<?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>192863</bug_id>
          
          <creation_ts>2018-12-19 11:00:43 -0800</creation_ts>
          <short_desc>Refresh usrsctplib to M72</short_desc>
          <delta_ts>2018-12-19 17:49:26 -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>WebRTC</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="youenn fablet">youennf</reporter>
          <assigned_to name="youenn fablet">youennf</assigned_to>
          <cc>achristensen</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1489363</commentid>
    <comment_count>0</comment_count>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-12-19 11:00:43 -0800</bug_when>
    <thetext>Refresh usrsctplib to M72</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489365</commentid>
    <comment_count>1</comment_count>
      <attachid>357695</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-12-19 11:04:14 -0800</bug_when>
    <thetext>Created attachment 357695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489383</commentid>
    <comment_count>2</comment_count>
      <attachid>357701</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2018-12-19 11:42:52 -0800</bug_when>
    <thetext>Created attachment 357701
Update CMake</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489643</commentid>
    <comment_count>3</comment_count>
      <attachid>357701</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 17:48:27 -0800</bug_when>
    <thetext>Comment on attachment 357701
Update CMake

Clearing flags on attachment: 357701

Committed r239418: &lt;https://trac.webkit.org/changeset/239418&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489645</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-12-19 17:48:29 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1489646</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-12-19 17:49:26 -0800</bug_when>
    <thetext>&lt;rdar://problem/46859410&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357695</attachid>
            <date>2018-12-19 11:04:14 -0800</date>
            <delta_ts>2018-12-19 11:42:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-192863-20181219110410.patch</filename>
            <type>text/plain</type>
            <size>6524419</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5MGZmYzQ1ODAwODFhYzRhMTQwOTIwNjY3NjZlNWNmNjBmZGZkZTM0Li5jYzlk
ZWVlOWM2MDdiNzMzYWYyNGYwODcyZDA1OGJhYzg0NDIwY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0xMi0xOSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmcmVzaCB1c3JzY3RwbGliIHRv
IE03MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTky
ODYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC86IFJlc3luY2VkIHRvIENocm9tZSBNNzIgYnJhbmNo
LgorCiAyMDE4LTEyLTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXN5bmMgbGlic3J0cCB0byBNNzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9CVUlMRC5nbiBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9CVUlMRC5nbgpp
bmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi45NGYyNjc4NmUx
ZDgxNDM5OGIxMDBjMTU0MTQwYTI4ZDhiZDM2MjRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQlVJTEQuZ24KKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0JV
SUxELmduCkBAIC0wLDAgKzEsMTQ2IEBACisjIENvcHlyaWdodCAyMDE0IFRoZSBDaHJvbWl1bSBB
dXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBp
cyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCisjIGZvdW5kIGlu
IHRoZSBMSUNFTlNFIGZpbGUuCisKK2ltcG9ydCgiLy9idWlsZC90b29sY2hhaW4vdG9vbGNoYWlu
LmduaSIpCisKK2NvbmZpZygidXNyc2N0cF9jb25maWciKSB7CisgIGluY2x1ZGVfZGlycyA9IFsK
KyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQiLAorICBdCit9CisKK2NvbmZpZygidXNyc2N0cF93YXJuaW5ncyIpIHsKKyAgaWYg
KGlzX2NsYW5nKSB7CisgICAgY2ZsYWdzID0gWworICAgICAgIyBhdG9taWNfaW5pdCBpbiB1c2Vy
X2F0b21pYy5oIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgaGVhZGVyLgorICAgICAgIi1Xbm8t
dW51c2VkLWZ1bmN0aW9uIiwKKworICAgICAgIyBVc2Ugb2YgZGVwcmVjYXRlZCBPU0F0b21pYyog
ZnVuY3Rpb25zIGluIHVzZXJfYXRvbWljLmguIFRoaXMgaXMKKyAgICAgICMgd2hhdCB0aGV5IGRp
ZCBpbiBjb25maWd1cmUuYWMuIFdlIGNhbiByZW1vdmUgdGhpcyBvbmNlCisgICAgICAjIGh0dHBz
Oi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvaXNzdWVzLzE3NyBpcyBmaXhlZC4KKyAgICAg
ICItV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIiwKKyAgICBdCisgIH0KK30KKworc3RhdGlj
X2xpYnJhcnkoInVzcnNjdHAiKSB7CisgIHNvdXJjZXMgPSBbCisgICAgInVzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHAuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfYXNjb25mLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2FzY29uZi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9h
dXRoLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaCIs
CisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYyIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCIsCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jIiwKKyAgICAidXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmgiLAorICAgICJ1c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jIiwKKyAgICAidXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaCIsCisgICAgInVzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuYyIsCisgICAgInVzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfaGVhZGVyLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2luZGF0YS5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbmRhdGEuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
aW5wdXQuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQu
aCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfbG9ja191c2Vyc3Bh
Y2UuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3MuaCIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgiLAor
ICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5jIiwKKyAgICAi
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaCIsCisgICAgInVzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMiLAorICAgICJ1c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9wZWVsb2ZmLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BlZWxvZmYuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcHJvY2Vzc19sb2NrLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX3NoYTEuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
c2hhMS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zc19mdW5j
dGlvbnMuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0
cy5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuYyIs
CisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmgiLAorICAg
ICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMiLAorICAgICJ1c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgiLAorICAgICJ1c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfdXNycmVxLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3Zhci5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cHV0aWwuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmgi
LAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMiLAor
ICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdmFyLmgiLAorICAgICJ1
c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaCIsCisgICAgInVzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIv
dXNlcl9lbnZpcm9ubWVudC5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaW5w
Y2IuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwNl92YXIuaCIsCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwX2ljbXAuaCIsCisgICAgInVzcnNjdHBsaWIv
dXNyc2N0cGxpYi91c2VyX21hbGxvYy5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfbWJ1Zi5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5oIiwKKyAg
ICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcXVldWUuaCIsCisgICAgInVzcnNjdHBsaWIv
dXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBs
aWIvdXNlcl9yZWN2X3RocmVhZC5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJf
cm91dGUuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldC5jIiwKKyAg
ICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgiLAorICAgICJ1c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91
c3JzY3RwLmgiLAorICBdCisKKyAgZGVmaW5lcyA9IFsKKyAgICAiU0NUUF9QUk9DRVNTX0xFVkVM
X0xPQ0tTIiwKKyAgICAiU0NUUF9TSU1QTEVfQUxMT0NBVE9SIiwKKyAgICAiU0NUUF9VU0VfT1BF
TlNTTF9TSEExIiwKKyAgICAiX19Vc2Vyc3BhY2VfXyIsCisKKyAgICAjICJTQ1RQX0RFQlVHIiwg
IyBVbmNvbW1lbnQgZm9yIFNDVFAgZGVidWdnaW5nLgorICBdCisKKyAgY29uZmlncyAtPSBbICIv
L2J1aWxkL2NvbmZpZy9jb21waWxlcjpjaHJvbWl1bV9jb2RlIiBdCisgIGNvbmZpZ3MgKz0gWwor
ICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpub19jaHJvbWl1bV9jb2RlIiwKKworICAgICMg
VGhlc2UgbXVzdCBiZSBhZnRlciBub19jaHJvbWl1bV9jb2RlIGZvciB3YXJuaW5nIGZsYWdzIHRv
IGJlIG9yZGVyZWQKKyAgICAjIGNvcnJlY3RseS4KKyAgICAiLy9idWlsZC9jb25maWcvY29tcGls
ZXI6bm9faW5jb21wYXRpYmxlX3BvaW50ZXJfd2FybmluZ3MiLAorICAgICI6dXNyc2N0cF93YXJu
aW5ncyIsCisgIF0KKworICBwdWJsaWNfY29uZmlncyA9IFsgIjp1c3JzY3RwX2NvbmZpZyIgXQor
CisgIGNmbGFncyA9IFsKKyAgICAiLVVJTkVUIiwKKyAgICAiLVVJTkVUNiIsCisgIF0KKworICBp
ZiAoaXNfbGludXggfHwgaXNfYW5kcm9pZCkgeworICAgIGRlZmluZXMgKz0gWworICAgICAgIl9f
VXNlcnNwYWNlX29zX0xpbnV4IiwKKyAgICAgICJfR05VX1NPVVJDRSIsCisgICAgXQorICB9IGVs
c2UgaWYgKGlzX21hYyB8fCBpc19pb3MpIHsKKyAgICBkZWZpbmVzICs9IFsKKyAgICAgICJIQVZF
X1NBX0xFTiIsCisgICAgICAiSEFWRV9TQ09OTl9MRU4iLAorICAgICAgIl9fQVBQTEVfVVNFX1JG
Q18yMjkyIiwKKyAgICAgICJfX1VzZXJzcGFjZV9vc19EYXJ3aW4iLAorICAgIF0KKyAgICBjZmxh
Z3MgKz0gWyAiLVVfX0FQUExFX18iIF0KKyAgfQorCisgIGlmIChpc193aW4pIHsKKyAgICBkZWZp
bmVzICs9IFsgIl9fVXNlcnNwYWNlX29zX1dpbmRvd3MiIF0KKyAgfSBlbHNlIHsKKyAgICBkZWZp
bmVzICs9IFsgIk5PTl9XSU5ET1dTX0RFRklORSIgXQorICB9CisKKyAgaWYgKGlzX2Z1Y2hzaWEp
IHsKKyAgICBkZWZpbmVzICs9IFsgIl9fVXNlcnNwYWNlX29zX0Z1Y2hzaWEiIF0KKyAgfQorICBk
ZXBzID0gWworICAgICIvL3RoaXJkX3BhcnR5L2JvcmluZ3NzbCIsCisgIF0KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMGY3MTgzMzU0MjNkODU1Y2EyNTM1ZjQ3Y2UwNDk0NWUyZjc4ZjFjZS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQ01ha2VMaXN0cy50eHQKKysrIC9k
ZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNSBP
bGVnIEFsZXhlZW5rb3YKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgRmVsaXggV2VpbnJhbmsK
LSMKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0jIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
IyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
cHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSMgICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotIwot
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSMg
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSMg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KLSMKLQotY21ha2VfbWluaW11bV9yZXF1aXJl
ZChWRVJTSU9OIDIuNikKLXByb2plY3QodXNyc2N0cGxpYikKLQotIyBEZWJ1ZyBidWlsZCB0eXBl
IGFzIGRlZmF1bHQKLWlmIChOT1QgQ01BS0VfQlVJTERfVFlQRSkKLSAgICBtZXNzYWdlKFNUQVRV
UyAiTm8gYnVpbGQgdHlwZSBzZWxlY3RlZCwgdXNpbmcgREVCVUciKQotICAgIHNldChDTUFLRV9C
VUlMRF9UWVBFICJERUJVRyIpCi1lbmRpZiAoKQotCi1pbmNsdWRlKENoZWNrU3RydWN0SGFzTWVt
YmVyKQotaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQotaW5jbHVkZShDaGVja0luY2x1ZGVGaWxl
cykKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Ci0jIENIRUNLIE9QVElPTlMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKLQotb3B0aW9uKElOVkFSSUFOVFMgIkFkZCBydW50aW1lIGNoZWNrcyIgMCkK
LWlmIChJTlZBUklBTlRTKQotICAgIGFkZF9kZWZpbml0aW9ucygtRElOVkFSSUFOVFMpCi1lbmRp
ZiAoKQotCi1vcHRpb24oU0NUUF9ERUJVRyAiUHJvdmlkZSBkZWJ1ZyBpbmZvcm1hdGlvbiIgMSkK
LWlmIChTQ1RQX0RFQlVHKQotICAgIGFkZF9kZWZpbml0aW9ucygtRFNDVFBfREVCVUcpCi1lbmRp
ZiAoKQotCi1vcHRpb24oSU5FVCAiU3VwcG9ydCBJUHY0IiAxKQotaWYgKElORVQpCi0gICAgYWRk
X2RlZmluaXRpb25zKC1ESU5FVCkKLWVuZGlmICgpCi0KLW9wdGlvbihJTkVUNiAiU3VwcG9ydCBJ
UHY2IiAxKQotaWYgKElORVQ2KQotICAgIGFkZF9kZWZpbml0aW9ucygtRElORVQ2KQotZW5kaWYg
KCkKLQotb3B0aW9uKFNDVFBfU0lNUExFX0FMTE9DQVRPUiAiICIgMSkKLWlmIChTQ1RQX1NJTVBM
RV9BTExPQ0FUT1IpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9TSU1QTEVfQUxMT0NBVE9S
KQotZW5kaWYgKCkKLQotb3B0aW9uKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyAiICIgMSkKLWlm
IChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9Q
Uk9DRVNTX0xFVkVMX0xPQ0tTKQotZW5kaWYgKCkKLQotb3B0aW9uKFNDVFBfV0lUSF9OT19DU1VN
ICJEaXNhYmxlIFNDVFAgY2hlY2tzdW0iIDApCi1pZiAoU0NUUF9XSVRIX05PX0NTVU0pCi0gICAg
YWRkX2RlZmluaXRpb25zKC1EU0NUUF9XSVRIX05PX0NTVU0pCi1lbmRpZiAoKQotCi1vcHRpb24o
U0NUUF9NQlVGX0xPR0dJTkcgIiAiIDApCi1pZiAoU0NUUF9NQlVGX0xPR0dJTkcpCi0gICAgYWRk
X2RlZmluaXRpb25zKC1EU0NUUF9NQlVGX0xPR0dJTkcpCi1lbmRpZiAoKQotCi1vcHRpb24oU0NU
UF9QQUNLRVRfTE9HR0lORyAiICIgMCkKLWlmIChTQ1RQX1BBQ0tFVF9MT0dHSU5HKQotICAgIGFk
ZF9kZWZpbml0aW9ucygtRFNDVFBfUEFDS0VUX0xPR0dJTkcpCi1lbmRpZiAoKQotCi1vcHRpb24o
U0NUUF9TT19MT0NLX1RFU1RJTkcgIiAiIDApCi1pZiAoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0g
ICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9TT19MT0NLX1RFU1RJTkcpCi1lbmRpZiAoKQotCi1v
cHRpb24oU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAiICIgMCkKLWlmIChTQ1RQX0VNQkVEREVEX1Y2
X1NDT1BFKQotICAgIGFkZF9kZWZpbml0aW9ucygtRFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi1l
bmRpZiAoKQotCi1vcHRpb24oU0NUUF9LQU1FICIgIiAwKQotaWYgKFNDVFBfS0FNRSkKLSAgICBh
ZGRfZGVmaW5pdGlvbnMoLURTQ1RQX0tBTUUpCi1lbmRpZiAoKQotCi1vcHRpb24oV0VSUk9SICJX
YXJuaW5nIGFzIGVycm9yIiAxKQotCi1vcHRpb24oTElOS19QUk9HUkFNU19TVEFUSUMgIkxpbmsg
ZXhhbXBsZSBwcm9ncmFtcyBzdGF0aWMiIDApCi0KLW9wdGlvbihCVUlMRF9QUk9HUkFNUyAiQnVp
bGQgZXhhbXBsZSBwcm9ncmFtcyIgMSkKLQotb3B0aW9uKFNBTklUSVpFUl9BRERSRVNTICJDb21w
aWxlIHdpdGggYWRkcmVzcyBzYW5pdGl6ZXIiIDApCi0KLW9wdGlvbihTQU5JVElaRVJfTUVNT1JZ
ICJDb21waWxlIHdpdGggbWVtb3J5IHNhbml0aXplciIgMCkKLQotaWYgKFNBTklUSVpFUl9BRERS
RVNTIEFORCBTQU5JVElaRVJfTUVNT1JZKQotICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkNhbiBu
b3QgY29tcGlsZSB3aXRoIGJvdGggc2FuaXRpemVyIG9wdGlvbnMiKQotZW5kaWYgKCkKLQotaWYg
KExJTktfUFJPR1JBTVNfU1RBVElDIE9SIFdJTjMyKQotICAgIHNldChQUk9HUkFNU19MSU5LX0xJ
QlJBUlkgInVzcnNjdHAtc3RhdGljIikKLWVsc2UgKCkKLSAgICBzZXQoUFJPR1JBTVNfTElOS19M
SUJSQVJZICJ1c3JzY3RwIikKLWVuZGlmICgpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDSEVDSyBGT1IgVFlQRVMgQU5EIEZVTkNUSU9O
UwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1j
aGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvcXVldWUuaCIgSEFWRV9TWVNfUVVFVUVfSCkKLWlmIChI
QVZFX1NZU19RVUVVRV9IKQotICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfU1lTX1FVRVVFX0gp
Ci1lbmRpZiAoKQotCi1jaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvc29ja2V0Lmg7bGludXgvaWZf
YWRkci5oIiBIQVZFX0xJTlVYX0lGX0FERFJfSCkKLWlmIChIQVZFX0xJTlVYX0lGX0FERFJfSCkK
LSAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0xJTlVYX0lGX0FERFJfSCkKLWVuZGlmICgpCi0K
LWNoZWNrX2luY2x1ZGVfZmlsZXMoInN5cy9zb2NrZXQuaDtsaW51eC9ydG5ldGxpbmsuaCIgSEFW
RV9MSU5VWF9SVE5FVExJTktfSCkKLWlmIChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQotICAgIGFk
ZF9kZWZpbml0aW9ucygtREhBVkVfTElOVVhfUlRORVRMSU5LX0gpCi1lbmRpZiAoKQotCi1jaGVj
a19pbmNsdWRlX2ZpbGVzKCJzeXMvdHlwZXMuaDtuZXRpbmV0L2luLmg7bmV0aW5ldC9pcC5oO25l
dGluZXQvaXBfaWNtcC5oIiBIQVZFX05FVElORVRfSVBfSUNNUF9IKQotaWYgKEhBVkVfTkVUSU5F
VF9JUF9JQ01QX0gpCi0gICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9ORVRJTkVUX0lQX0lDTVBf
SCkKLWVuZGlmICgpCi0KLWNoZWNrX2luY2x1ZGVfZmlsZXMoInN0ZGF0b21pYy5oIiBIQVZFX1NU
REFUT01JQ19IKQotaWYgKEhBVkVfU1REQVRPTUlDX0gpCi0gICAgYWRkX2RlZmluaXRpb25zKC1E
SEFWRV9TVERBVE9NSUNfSCkKLWVuZGlmICgpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDSEVDSyBTVFJVQ1QgTUVNQkVSUwotIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1zZXQgKENNQUtF
X1JFUVVJUkVEX0lOQ0xVREVTICIke0NNQUtFX1NPVVJDRV9ESVJ9L3VzcnNjdHBsaWIiKQotY2hl
Y2tfaW5jbHVkZV9maWxlKHVzcnNjdHAuaCBIQVZFX1VTUlNDVFBfSCkKLWlmIChOT1QgSEFWRV9V
U1JTQ1RQX0gpCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAidXNyc2N0cC5oIG5vdCBmb3VuZCIp
Ci1lbmRpZiAoKQotCi1jaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2thZGRyIiAi
c2FfbGVuIiAic3lzL3R5cGVzLmg7c3lzL3NvY2tldC5oIiBIQVZFX1NBX0xFTikKLWlmIChIQVZF
X1NBX0xFTikKLSAgICBtZXNzYWdlKFNUQVRVUyAiSEFWRV9TQV9MRU4iKQotICAgIGFkZF9kZWZp
bml0aW9ucygtREhBVkVfU0FfTEVOKQotZW5kaWYgKCkKLQotY2hlY2tfc3RydWN0X2hhc19tZW1i
ZXIoInN0cnVjdCBzb2NrYWRkcl9pbiIgInNpbl9sZW4iICJzeXMvdHlwZXMuaDtuZXRpbmV0L2lu
LmgiIEhBVkVfU0lOX0xFTikKLWlmIChIQVZFX1NJTl9MRU4pCi0gICAgbWVzc2FnZShTVEFUVVMg
IkhBVkVfU0lOX0xFTiIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9TSU5fTEVOKQotZW5k
aWYgKCkKLQotY2hlY2tfc3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9pbjYiICJz
aW42X2xlbiIgInN5cy90eXBlcy5oO25ldGluZXQvaW4uaCIgSEFWRV9TSU42X0xFTikKLWlmIChI
QVZFX1NJTjZfTEVOKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIQVZFX1NJTjZfTEVOIikKLSAgICBh
ZGRfZGVmaW5pdGlvbnMoLURIQVZFX1NJTjZfTEVOKQotZW5kaWYgKCkKLQotY2hlY2tfc3RydWN0
X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9jb25uIiAic2Nvbm5fbGVuIiAidXNyc2N0cC5o
IiBIQVZFX1NDT05OX0xFTikKLWlmIChIQVZFX1NDT05OX0xFTikKLSAgICBtZXNzYWdlKFNUQVRV
UyAiSEFWRV9TQ09OTl9MRU4iKQotICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfU0NPTk5fTEVO
KQotZW5kaWYgKCkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCi0jIENPTVBJTEVSIFNFVFRJTkdTCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgU0VUVElOR1MgRk9SIFVOSVggQ09NUElMRVIK
LWlmICgieCR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIFNUUkVRVUFMICJ4Q2xhbmciIE9SICJ4JHtD
TUFLRV9DX0NPTVBJTEVSX0lEfSIgU1RSRVFVQUwgInhHTlUiKQotICAgIHNldChDTUFLRV9DX0ZM
QUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtc3RkPWM5OSAtcGVkYW50aWMgLVdhbGwgLVdleHRy
YSAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2luaXQtc2VsZiAtV25v
LXVudXNlZC1mdW5jdGlvbiAtV25vLXVudXNlZC1wYXJhbWV0ZXIiKQotICAgIHNldChDTUFLRV9D
WFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtc3RkPWM5OSAtcGVkYW50aWMgLVdhbGwgLVdl
eHRyYSAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAtV2luaXQtc2VsZiAt
V25vLXVudXNlZC1mdW5jdGlvbiAtV25vLXVudXNlZC1wYXJhbWV0ZXIiKQotCi0gICAgaWYgKFdF
UlJPUikKLSAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1X
ZXJyb3IiKQotICAgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30g
LVdlcnJvciIpCi0gICAgZW5kaWYgKCkKLQotICAgIGlmIChTQU5JVElaRVJfQUREUkVTUykKLSAg
ICAgICAgc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1mc2FuaXRpemU9
YWRkcmVzcyAtTzEgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcgLVduby1hZGRyZXNzLW9mLXBh
Y2tlZC1tZW1iZXIiKQotICAgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9G
TEFHU30gLWZzYW5pdGl6ZT1hZGRyZXNzIC1PMSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZyAt
V25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIpCi0gICAgZW5kaWYgKCkKLQotICAgIGlmIChT
QU5JVElaRVJfTUVNT1JZKQotICAgICAgICAjIG1heWJlIGFkZCAiLWZQSUUgLXBpZSIgaGVyZQot
ICAgICAgICBzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLWZzYW5pdGl6
ZT1tZW1vcnkgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcgLVduby1hZGRyZXNzLW9mLXBhY2tl
ZC1tZW1iZXIgLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucyIpCi0gICAgICAgIHNldChD
TUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtZnNhbml0aXplPW1lbW9yeSAtZm5v
LW9taXQtZnJhbWUtcG9pbnRlciAtZyAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciAtZnNh
bml0aXplLW1lbW9yeS10cmFjay1vcmlnaW5zIikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQot
IyBTRVRUSU5HUyBGT1IgVklTVUFMIFNUVURJTyBDT01QSUxFUgotaWYgKCJ4JHtDTUFLRV9DX0NP
TVBJTEVSX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKLSAgICBpZiAoQ01BS0VfQ19GTEFHUyBNQVRD
SEVTICIvV1swLTRdIikKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExBQ0UgIi9XWzAtNF0iICIv
VzMiIENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30iKQotICAgIGVsc2UgKCkKLSAgICAg
ICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gL1czIikKLSAgICBlbmRpZiAo
KQotCi0gICAgaWYgKFdFUlJPUikKLSAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0Vf
Q19GTEFHU30gL1dYIikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQotCi0jIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIElOQ0xVREUgU1VCRElSUwot
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1hZGRf
c3ViZGlyZWN0b3J5KHVzcnNjdHBsaWIpCi0KLWlmIChCVUlMRF9QUk9HUkFNUykKLSAgICBhZGRf
c3ViZGlyZWN0b3J5KHByb2dyYW1zKQotZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9MSUNFTlNFIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0xJQ0VO
U0UKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZjYxNGJl
OWUyMmNjNDYzMjczYTNiNDhjZTEwNThkNmEwM2QwZDJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0xJQ0VOU0UKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L0xJQ0VOU0UKQEAgLTAsMCArMSwzMCBAQAorKENvcGllZCBmcm9tIHRoZSBDT1BZUklHSFQgZmls
ZSBvZgoraHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9zY3RwLXJlZmltcGwvc291cmNlL2Jyb3dz
ZS90cnVuay9DT1BZUklHSFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQg
KGMpIDIwMDEsIDIwMDIgQ2lzY28gU3lzdGVtcywgSW5jLgorQ29weXJpZ2h0IChjKSAyMDAyLTEy
IFJhbmRhbGwgUi4gU3Rld2FydAorQ29weXJpZ2h0IChjKSAyMDAyLTEyIE1pY2hhZWwgVHVleGVu
CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoK
KworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
CitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCitTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9MSUNFTlNFLm1kIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0xJQ0VOU0UubWQKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZDFmOTg5Y2ZmYTllNmU2NzJjMGEzOGVjZjg5Yzc2
MmM0NzUzMjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0xJ
Q0VOU0UubWQKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1Db3B5cmlnaHQgKGMpIDIw
MTUsICBSYW5kYWxsIFN0ZXdhcnQgYW5kIE1pY2hhZWwgVHVleGVuCi1BbGwgcmlnaHRzIHJlc2Vy
dmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0qIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwg
dGhpcwotICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LQotKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KLSAgYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0KLSogTmVpdGhlciB0
aGUgbmFtZSBvZiB1c3JzY3RwIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0g
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERF
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IKLVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi1DQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAotT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFrZWZpbGUuYW0gYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFrZWZp
bGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZTE3ZTIyYzRmNzhkZmJiNTYy
Y2U1NjRkOWE1YWE1Zjc3ZTAyNmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotIwot
IyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotIwotIyBBbGwgcmlnaHRz
IHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4J
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot
IyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0j
IFNVQ0ggREFNQUdFLgotIwotCi1TVUJESVJTID0gdXNyc2N0cGxpYiBwcm9ncmFtcwotRVhUUkFf
RElTVCA9IGJvb3RzdHJhcCBNYWtlZmlsZS5ubWFrZQotQUNMT0NBTF9BTUZMQUdTID0gLUkgbTQK
LSMgcGtnY29uZmlnX0RBVEEgPSB1c3JzY3RwLnBjCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFrZWZpbGUubm1ha2Ug
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
TWFrZWZpbGUubm1ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmOWQ3MDE0Nzg0
OThlZDJmYjQxYzI5ZWQ1MjEyMGY3MzgyNGMxOTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL01ha2VmaWxlLm5tYWtlCisrKyAvZGV2L251bGwKQEAgLTEsNDUg
KzAsMCBAQAotIw0KLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4NCi0j
DQotIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSMNCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dA0KLSMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
DQotIyBhcmUgbWV0Og0KLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCi0jIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0DQot
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlDQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KLSMgMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMNCi0jICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQ0KLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uDQotIw0KLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KLSMgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UNCi0jIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJP
SkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KLSMg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMNCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QNCi0j
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkNCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCi0jIFNVQ0ggREFNQUdFLg0KLSMN
Ci0NCi1hbGw6DQotCWNkIHVzcnNjdHBsaWINCi0Jbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UNCi0J
Y2QgLi4NCi0JY2QgcHJvZ3JhbXMNCi0Jbm1ha2UgYWxsIC1mIE1ha2VmaWxlLm5tYWtlDQotCWNk
IC4uDQotDQotY2xlYW46DQotCWNkIHVzcnNjdHBsaWINCi0Jbm1ha2UgY2xlYW4gLWYgTWFrZWZp
bGUubm1ha2UNCi0JY2QgLi4NCi0JY2QgcHJvZ3JhbXMNCi0Jbm1ha2UgY2xlYW4gLWYgTWFrZWZp
bGUubm1ha2UNCi0JY2QgLi4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFudWFsLm1kIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01hbnVhbC5tZApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjYWU0MjE3ZjI3YWI1MWRjMjM5YmZmZDViMDg5ODQx
MDdiMmIxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFu
dWFsLm1kCisrKyAvZGV2L251bGwKQEAgLTEsNzc5ICswLDAgQEAKLSMgU0NUUCB1c2VyLWxhbmQg
aW1wbGVtZW50YXRpb24gKHVzcnNjdHApCi0KLVNDVFAgaXMgYSBtZXNzYWdlIG9yaWVudGVkLCBy
ZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgd2l0aCBkaXJlY3Qgc3VwcG9ydCBmb3IgbXVsdGlo
b21pbmcgdGhhdCBydW5zIG9uIHRvcCBvZiBJUCBvciBVRFAsIGFuZCBzdXBwb3J0cyBib3RoIHY0
IGFuZCB2NiB2ZXJzaW9ucy4KLQotTGlrZSBUQ1AsIFNDVFAgcHJvdmlkZXMgcmVsaWFibGUsIGNv
bm5lY3Rpb24gb3JpZW50ZWQgZGF0YSBkZWxpdmVyeSB3aXRoIGNvbmdlc3Rpb24gY29udHJvbC4g
VW5saWtlIFRDUCwgU0NUUCBhbHNvIHByb3ZpZGVzIG1lc3NhZ2UgYm91bmRhcnkgcHJlc2VydmF0
aW9uLCBvcmRlcmVkIGFuZCB1bm9yZGVyZWQgbWVzc2FnZSBkZWxpdmVyeSwgbXVsdGktc3RyZWFt
aW5nIGFuZCBtdWx0aS1ob21pbmcuIERldGVjdGlvbiBvZiBkYXRhIGNvcnJ1cHRpb24sIGxvc3Mg
b2YgZGF0YSBhbmQgZHVwbGljYXRpb24gb2YgZGF0YSBpcyBhY2hpZXZlZCBieSB1c2luZyBjaGVj
a3N1bXMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEEgc2VsZWN0aXZlIHJldHJhbnNtaXNzaW9uIG1l
Y2hhbmlzbSBpcyBhcHBsaWVkIHRvIGNvcnJlY3QgbG9zcyBvciBjb3JydXB0aW9uIG9mIGRhdGEu
Ci0KLUluIHRoaXMgbWFudWFsIHRoZSBzb2NrZXQgQVBJIGZvciB0aGUgU0NUUCBVc2VyLWxhbmQg
aW1wbGVtZW50YXRpb24gd2lsbCBiZSBkZXNjcmliZWQuICBJdCBpcyBiYXNlZCBvbiBbUkZDIDY0
NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLiBUaGUgbWFpbiBmb2N1cyBv
ZiB0aGlzIGRvY3VtZW50IGlzIG9uIHBvaW50aW5nIG91dCB0aGUgZGlmZmVyZW5jZXMgdG8gdGhl
IFNDVFAgU29ja2V0cyBBUEkuIEZvciBhbGwgYXNwZWN0cyBvZiB0aGUgc29ja2V0cyBBUEkgdGhh
dCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGlzIGRvY3VtZW50LCBwbGVhc2UgcmVmZXIgdG8gW1JG
QyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4gUXVlc3Rpb25zIGFi
b3V0IFNDVFAgaXRzZWxmIGNhbiBob3BlZnVsbHkgYmUgYW5zd2VyZWQgYnkgW1JGQyA0OTYwXSho
dHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTYwKS4KLQotIyMgR2V0dGluZyBTdGFydGVk
Ci1UaGUgdXNlci1sYW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAsIFVi
dW50dSAxMS4xMCwgV2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCBhbmQgTWFjIE9TIFggMTAuNy4g
VGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdXNlci1sYW5kIHN0YWNrIGlzIHByb3ZpZGVkIG9u
IFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHApLiBEb3dubG9hZCB0
aGUgdGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91ciBjaG9pY2UuIFRoZSB0
YXJiYWxsIGNvbnRhaW5zIGFsbCB0aGUgc291cmNlcyB0byBidWlsZCB0aGUgbGlidXNyc2N0cCwg
d2hpY2ggaGFzIHRvIGJlIGxpbmtlZCB0byB0aGUgb2JqZWN0IGZpbGUgb2YgYW4gZXhhbXBsZSBw
cm9ncmFtLiBJbiBhZGRpdGlvbiB0aGVyZSBhcmUgdHdvIGFwcGxpY2F0aW9ucyBpbiB0aGUgZm9s
ZGVyIGBwcm9ncmFtc2AgdGhhdCBjYW4gYmUgYnVpbHQgYW5kIHJ1bi4KLQotIyMjIEJ1aWxkaW5n
IHRoZSBMaWJyYXJ5IGFuZCB0aGUgQXBwbGljYXRpb25zCi0jIyMjIFVuaXgtbGlrZSBPcGVyYXRp
bmcgU3lzdGVtcwotSW4gdGhlIGZvbGRlciBgdXNyc2N0cGAgdHlwZQotCi0gICAgJCAuL2Jvb3Rz
dHJhcAotICAgICQgLi9jb25maWd1cmUKLSAgICAkIG1ha2UKLQotTm93LCB0aGUgbGlicmFyeSBg
bGlidXNyc2N0cC5sYWAgaGFzIGJlZW4gYnVpbHQgaW4gdGhlIHN1YmRpcmVjdG9yeSBgdXNyc2N0
cGxpYmAsIGFuZCB0aGUgZXhhbXBsZSBwcm9ncmFtcyBhcmUgcmVhZHkgdG8gcnVuIGZyb20gdGhl
IHN1YmRpcmVjdG9yeSBgcHJvZ3JhbXNgLgotCi1JZiB5b3UgaGF2ZSByb290IHByaXZpbGVnZXMg
b3IgYXJlIGluIHRoZSBzdWRvZXIgZ3JvdXAsIHlvdSBjYW4gaW5zdGFsbCB0aGUgbGlicmFyeSBp
biBgL3Vzci9sb2NhbC9saWJgIGFuZCBjb3B5IHRoZSBoZWFkZXIgZmlsZSB0byBgL3Vzci9pbmNs
dWRlYCB3aXRoIHRoZSBjb21tYW5kCi0KLSAgICAkIHN1ZG8gbWFrZSBpbnN0YWxsCi0KLSMjIyMg
V2luZG93cwotT24gV2luZG93cyB5b3UgbmVlZCBhIGNvbXBpbGVyIGxpa2UgTWljcm9zb2Z0IFZp
c3VhbCBTdHVkaW8uIFlvdSBjYW4gYnVpbGQgdGhlIGxpYnJhcnkgYW5kIHRoZSBleGFtcGxlIHBy
b2dyYW1zIHdpdGggdGhlIGNvbW1hbmQgbGluZSB0b29sIG9mIHRoZSBjb21waWxlciBieSB0eXBp
bmcKLQotICAgICQgbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UKLQotaW4gdGhlIGRpcmVjdG9yeSBg
dXNyc2N0cGAuCi0KLSMjIyMgQ01ha2UKLUNyZWF0ZSBhIGRpcmVjdG9yeSBvdXRzaWRlIHRoZSBg
dXNyc2N0cGAgZGlyZWN0b3J5LCBlbnRlciBpdCBhbmQgZ2VuZXJhdGUgZmlsZXMgYnkgdHlwaW5n
Ci0KLSAgICAkIGNtYWtlIDxwYXRoLXRvLXVzcnNjdHAtc291cmNlcz4KLSAgICAkIGNtYWtlIC0t
YnVpbGQgLgotCi1CeSBkZWZhdWx0IENNYWtlIGdlbmVyYXRlcyBhIERFQlVHIGJ1aWxkIHdpdGgg
dmVyYm9zZSBvdXRwdXQuCi0KLSMjIyBSdW5uaW5nIHRoZSBUZXN0IFByb2dyYW1zCi0KLVNldmVy
YWwgdGVzdCBwcm9ncmFtcyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBhIGRpc2NhcmQgc2VydmVy
IGFuZCBhIGNsaWVudC4gWW91IGNhbiBydW4gYm90aCB0byBzZW5kIGRhdGEgZnJvbSB0aGUgY2xp
ZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGluIGFuZCBz
ZW5kcyB0aGVtIHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZSBpbiB0aGUg
dGVybWluYWwgYW5kIGRpc2NhcmRzIGl0LiBUaGUgc291cmNlcyBvZiB0aGUgc2VydmVyIGFyZSBh
bHNvIHByb3ZpZGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3JzY3RwL2Js
b2IvbWFzdGVyL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMpIGFuZCB0aG9zZSBvZiB0aGUgY2xp
ZW50IFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3JzY3RwL2Jsb2IvbWFzdGVy
L3Byb2dyYW1zL2NsaWVudC5jKS4KLQotIyMjIFVzaW5nIFVEUCBFbmNhcHN1bGF0aW9uCi0KLUJv
dGggcHJvZ3JhbXMgY2FuIGVpdGhlciBzZW5kIGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IG9yIHVz
ZSBVRFAgZW5jYXBzdWxhdGlvbiwgdGh1cyBlbmNhcHN1bGF0aW5nIHRoZSBTQ1RQIHBhY2tldCBp
biBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24gbG9vcGJhY2sgb3IgaW4g
YSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkgTkFUIGJveGVzIGludm9sdmVkLiBJbiBhbGwg
b3RoZXIgY2FzZXMgaXQgaXMgYmV0dGVyIHRvIHVzZSBVRFAgZW5jYXBzdWxhdGlvbi4KLQotVGhl
IHVzYWdlIG9mIHRoZSBgZGlzY2FyZF9zZXJ2ZXJgIGlzCi0KLSAgICAkIGRpc2NhcmRfc2VydmVy
IFtsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5jYXBzX3BvcnRdCi0KLUZvciBVRFAgZW5jYXBz
dWxhdGlvbiB0aGUgcG9ydHMgaGF2ZSB0byBiZSBzcGVjaWZpZWQuIFRoZSBsb2NhbCBhbmQgcmVt
b3RlIGVuY2Fwc3VsYXRpb24gcG9ydHMgY2FuIGJlIGFyYml0cmFyaWx5IHNldC4gRm9yIGV4YW1w
bGUsIHlvdSBjYW4gY2FsbAotCi0gICAgJCAuL2Rpc2NhcmRfc2VydmVyIDExMTExIDIyMjIyCi0K
LW9uIGEgVW5peC1saWtlIE9TIGFuZAotCi0gICAgJCBkaXNjYXJkX3NlcnZlci5leGUgMTExMTEg
MjIyMjIKLQotb24gV2luZG93cy4KLQotVGhlIGNsaWVudCBuZWVkcyB0d28gYWRkaXRpb25hbCBw
YXJhbWV0ZXJzLCB0aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgaXRzIHBvcnQuIEl0cyB1c2FnZSBp
cwotCi0gICAgJCBjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3BvcnQgbG9j
YWxfZW5jYXBzX3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XQotCi1UaGUgcmVtb3RlIGFkZHJlc3Mg
aXMgdGhlIHNlcnZlcidzIGFkZHJlc3MuIElmIGNsaWVudCBhbmQgc2VydmVyIGFyZSBzdGFydGVk
IG9uIHRoZSBzYW1lIG1hY2hpbmUsIHRoZSBsb29wYmFjayBhZGRyZXNzIGAxMjcuMC4wLjFgIGNh
biBiZSB1c2VkIGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyBvbiBXaW5k
b3dzLiBUaGUgZGlzY2FyZCBwb3J0IGlzIDksIHRodXMgOSBoYXMgdG8gYmUgdGFrZW4gYXMgcmVt
b3RlIHBvcnQuIFRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIGhhdmUgdG8gbWF0Y2ggdGhvc2Ugb2Yg
dGhlIHNlcnZlciwgaS5lLiB0aGUgc2VydmVyJ3MgYGxvY2FsX2VuY2Fwc19wb3J0YCBpcyB0aGUg
Y2xpZW50J3MgYHJlbW90ZV9lbmNhcHNfcG9ydGAgYW5kIHZpY2UgdmVyc2EuIFRodXMsIHRoZSBj
bGllbnQgY2FuIGJlIHN0YXJ0ZWQgd2l0aAotCi0gICAgJCAuL2NsaWVudCAxMjcuMC4wLjEgOSAw
IDIyMjIyIDExMTExCi0KLW9uIGEgVW5peC1saWtlIE9TIGFuZAotCi0gICAgJCBjbGllbnQuZXhl
IDE5Mi4xNjguMC4xIDkgMCAyMjIyMiAxMTExMQotCi1vbiBXaW5kb3dzIHByb3ZpZGVkIHlvdXIg
bG9jYWwgSVAgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KLQotIyMjIFNlbmRpbmcgb3ZlciBTQ1RQ
Ci0KLVRvIHNlbmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgeW91IG1pZ2h0IG5lZWQgcm9vdCBw
cml2aWxlZ2VzIGJlY2F1c2UgcmF3IHNvY2tldHMgYXJlIHVzZWQuIFRodXMgaW5zdGVhZCBvZiBz
cGVjaWZ5aW5nIHRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIHlvdSBoYXZlIHRvIHN0YXJ0IHRoZSBw
cm9ncmFtcyBwcmVwZW5kaW5nIGBzdWRvYCBvciBpbiBjYXNlIG9mIFdpbmRvd3Mgc3RhcnQgdGhl
IHByb2dyYW0gZnJvbSBhbiBhZG1pbmlzdHJhdG9yIGNvbnNvbGUuCi0KLSMjIyBVc2luZyB0aGUg
Q2FsbGJhY2sgQVBJCi0KLUluc3RlYWQgb2YgYXNraW5nIGNvbnN0YW50bHkgZm9yIG5ldyBkYXRh
LCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0IGlzIHRyaWdnZXJlZCBieSBTQ1RQLiBB
IGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0byBiZSByZWdpc3RlcmVkIHRoYXQgd2lsbCBiZSBjYWxs
ZWQgd2hlbmV2ZXIgZGF0YSBpcyByZWFkeSB0byBiZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0
aW9uLgotCi1UaGUgYGRpc2NhcmRfc2VydmVyYCBoYXMgYSBmbGFnIHRvIHN3aXRjaCBiZXR3ZWVu
IHRoZSB0d28gbW9kaS4gSWYgIGB1c2VfY2JgIGlzIHNldCB0byAxLCB0aGUgY2FsbGJhY2sgQVBJ
IHdpbGwgYmUgdXNlZC4gVG8gY2hhbmdlIHRoZSBzZXR0aW5nLCBqdXN0IHNldCB0aGUgZmxhZyBh
bmQgY29tcGlsZSB0aGUgcHJvZ3JhbSBhZ2Fpbi4KLQotCi0jIyBCYXNpYyBPcGVyYXRpb25zCi0K
LUFsbCBzeXN0ZW0gY2FsbHMgc3RhcnQgd2l0aCB0aGUgcHJlZml4IGB1c3JzY3RwX2AgdG8gZGlz
dGluZ3Vpc2ggdGhlbSBmcm9tIHRoZSBrZXJuZWwgdmFyaWFudHMuIFNvbWUgb2YgdGhlbSBhcmUg
Y2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJs
YW5kIGVudmlyb25tZW50LgotCi0jIyBEaWZmZXJlbmNlcyB0byBSRkMgNjQ1OAotCi0jIyMgdXNy
c2N0cF9pbml0KCkKLQotRXZlcnkgYXBwbGljYXRpb24gaGFzIHRvIHN0YXJ0IHdpdGggYHVzcnNj
dHBfaW5pdCgpYC4gVGhpcyBmdW5jdGlvbiBjYWxscyBgc2N0cF9pbml0KClgIGFuZCByZXNlcnZl
cyB0aGUgbWVtb3J5IG5lY2Vzc2FyeSB0byBhZG1pbmlzdGVyIHRoZSBkYXRhIHRyYW5zZmVyLiBU
aGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzCi0KLWBgYGMKLXZvaWQgdXNyc2N0cF9pbml0KHVpbnQx
Nl90IHVkcF9wb3J0KQotYGBgCi0KLUFzIGl0IGlzIG5vdCBhbHdheXMgcG9zc2libGUgdG8gc2Vu
ZCBkYXRhIGRpcmVjdGx5IG92ZXIgU0NUUCBiZWNhdXNlIG5vdCBhbGwgTkFUIGJveGVzIGNhbiBw
cm9jZXNzIFNDVFAgcGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRvIGVu
Y2Fwc3VsYXRlIFNDVFAgaW50byBVRFAgYSBVRFAgcG9ydCBoYXMgdG8gYmUgc3BlY2lmaWVkLCB0
byB3aGljaCB0aGUgZGF0YWdyYW1zIGNhbiBiZSBzZW50LiBUaGlzIGxvY2FsIFVEUCBwb3J0ICBp
cyBzZXQgd2l0aCB0aGUgcGFyYW1ldGVyIGB1ZHBfcG9ydGAuIFRoZSBkZWZhdWx0IHZhbHVlIGlz
IDk4OTksIHRoZSBzdGFuZGFyZCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0LiBJZiBVRFAgZW5jYXBz
dWxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFzIHRvIGJlIHNldCB0byAw
LgotCi0jIyMgdXNyc2N0cF9maW5pc2goKQotCi1BdCB0aGUgZW5kIG9mIHRoZSBwcm9ncmFtIGB1
c3JzY3RwX2ZpbmlzaCgpYCBzaG91bGQgYmUgY2FsbGVkIHRvIGZyZWUgYWxsIHRoZSBtZW1vcnkg
dGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYmVmb3JlLiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlz
Ci0KLWBgYGMKLWludCB1c3JzY3RwX2ZpbmlzaCh2b2lkKQotYGBgCi0KLVRoZSByZXR1cm4gY29k
ZSBpcyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLSMjIyB1c3Jz
Y3RwX3NvY2tldCgpCi0KLUEgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBlbmRwb2ludCBpcyBh
IHNvY2tldC4gSXMgaXQgY3JlYXRlZCB3aXRoIGB1c3JzY3RwX3NvY2tldCgpYC4gVGhlIGZ1bmN0
aW9uIHByb3RvdHlwZSBpcwotCi1gYGBjCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfc29ja2V0
KGludCBkb21haW4sCi0gICAgICAgICAgICAgICBpbnQgdHlwZSwKLSAgICAgICAgICAgICAgIGlu
dCBwcm90b2NvbCwKLSAgICAgICAgICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2Nr
ZXQgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfcmN2aW5mbywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyksCi0gICAgICAgICAgICAgICBp
bnQgKCpzZW5kX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3Qgc2JfZnJlZSksCi0gICAgICAgICAgICAgICB1aW50MzJfdCBzYl90
aHJlc2hvbGQpCi1gYGAKLQotYW5kIHRoZSBhcmd1bWVudHMgdGFrZW4gZnJvbSBbUkZDIDY0NThd
KGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpIGFyZQotCi0qIGRvbWFpbjogUEZf
SU5FVCBvciBQRl9JTkVUNiBjYW4gYmUgdXNlZC4KLSogdHlwZTogSW4gY2FzZSBvZiBhIG9uZS10
by1tYW55IHN0eWxlIHNvY2tldCBpdCBpcyBTT0NLX1NFUVBBQ0tFVCwgaW4gY2FzZSBvZiBhIG9u
ZS10by1vbmUgc3R5bGUKLXNvY2tldCBpdCBpcyBTT0NLX1NUUkVBTS4gRm9yIGFuIGV4cGxhbmF0
aW9uIG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzb2NrZXQgdHlwZXMgcGxlYXNlCi1y
ZWZlciB0byBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLgot
KiBwcm90b2NvbDogU2V0IElQUFJPVE9fU0NUUC4KLQotSW4gdXNyc2N0cCBhIGNhbGxiYWNrIEFQ
SSBjYW4gYmUgdXNlZC4gVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIHRoZSByZWNlaXZlIGFuZCBz
ZW5kIGNhbGxiYWNrcyBhcmUgbmV3IGFyZ3VtZW50cyB0byB0aGUgc29ja2V0IGNhbGwuIFRoZXkg
YXJlIE5VTEwsIGlmIG5vIGNhbGxiYWNrIEFQSSBpcyB1c2VkLiBUaGUgYHNiX3RocmVzaG9sZGAg
c3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVm
ZmVyIGJlZm9yZSB0aGUgc2VuZCBmdW5jdGlvbiBpbiB0aGUgYXBwbGljYXRpb24gaXMgY2FsbGVk
LiBJZiBhIHNlbmQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc3BlY2lmaWVkIGFuZCBgc2JfdGhyZXNo
b2xkYCBpcyAwLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIHJvb20g
aW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlci4KLQotT24gc3VjY2VzcyBgdXNyc2N0cF9zb2NrZXQo
KWAgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbmV3IHNvY2tldCBpbiB0aGUgYHN0cnVjdCBz
b2NrZXRgIGRhdGEgdHlwZS4gSXQgd2lsbCBiZSBuZWVkZWQgaW4gYWxsIG90aGVyIHN5c3RlbSBj
YWxscy4gSW4gY2FzZSBvZiBhIGZhaWx1cmUgTlVMTCBpcyByZXR1cm5lZCBhbmQgZXJybm8gaXMg
c2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgotCi0jIyMgdXNyc2N0cF9jbG9zZSgp
Ci0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgYHVzcnNjdHBfY2xvc2UoKWAgaXMKLQotYGBg
Ywotdm9pZCB1c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKQotIGBgYAotVGh1cyB0aGUg
b25seSBkaWZmZXJlbmNlIGlzIHRoZSBhYnNlbmNlIG9mIGEgcmV0dXJuIGNvZGUuCi0KLSMjIFNh
bWUgRnVuY3Rpb25hbGl0eSBhcyBSRkMgNjQ1OAotCi1UaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBo
YXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlaXIga2VybmVsIHBlbmRhbnRzLiBUaGVy
ZSBwcm90b3R5cGVzCi1hcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMu
IEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHBsZWFzZSByZWZlciB0byBbUkZDIDY0NThdKGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLgotCi0jIyMgdXNyc2N0cF9iaW5kKCkK
LQotYGBgYwotaW50Ci11c3JzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAg
ICAgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgIHNvY2tsZW5fdCBhZGRybGVu
KQotYGBgCi0KLSogc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBgdXNy
c2N0cF9zb2NrZXQoKWAuCi0qIGFkZHI6IFRoZSBhZGRyZXNzIHN0cnVjdHVyZSAoYHN0cnVjdCBz
b2NrYWRkcl9pbmAgZm9yIGFuIElQdjQgYWRkcmVzcyBvciBgc3RydWN0IHNvY2thZGRyX2luNmAg
Zm9yIGFuIElQdjYgYWRkcmVzcykuCi0qIGFkZHJsZW46IFRoZSBzaXplIG9mIHRoZSBhZGRyZXNz
IHN0cnVjdHVyZS4KLQotYHVzcnNjdHBfYmluZCgpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQg
LTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KLQotIyMjIHVzcnNjdHBfbGlzdGVuKCkKLQotYGBgYwot
aW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgIGlu
dCBiYWNrbG9nKQotYGBgCi0KLSogc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5l
ZCBieSBgdXNyc2N0cF9zb2NrZXQoKWAuCi0qIGJhY2tsb2c6IElmIGJhY2tsb2cgaXMgbm9uLXpl
cm8sIGVuYWJsZSBsaXN0ZW5pbmcsIGVsc2UgZGlzYWJsZSBsaXN0ZW5pbmcuCi0KLWB1c3JzY3Rw
X2xpc3RlbigpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJv
ci4KLQotIyMjIHVzcnNjdHBfYWNjZXB0KCkKLQotYGBgYwotc3RydWN0IHNvY2tldCAqCi11c3Jz
Y3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgIHN0cnVjdCBzb2Nr
YWRkciAqIGFkZHIsCi0gICAgICAgICAgICAgICBzb2NrbGVuX3QgKiBhZGRybGVuKQotYGBgCi0K
LSogc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBgdXNyc2N0cF9zb2Nr
ZXQoKWAuCi0qIGFkZHI6IE9uIHJldHVybiwgIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIHBl
ZXIgKGBzdHJ1Y3Qgc29ja2FkZHJfaW5gIGZvciBhbiBJUHY0IGFkZHJlc3Mgb3IgYHN0cnVjdCBz
b2NrYWRkcl9pbjZgIGZvciBhbiBJUHY2IGFkZHJlc3MpLgotKiBhZGRybGVuOiBTaXplIG9mIHRo
ZSByZXR1cm5lZCBhZGRyZXNzIHN0cnVjdHVyZS4KLQotYHVzcnNjdHBfYWNjZXB0KClgIHJldHVy
bnMgdGhlIGFjY2VwdGVkIHNvY2tldCBvbiBzdWNjZXNzIGFuZCBOVUxMIGluIGNhc2Ugb2YgYW4g
ZXJyb3IuCi0KLSMjIyB1c3JzY3RwX2Nvbm5lY3QoKQotCi1gYGBjCi1pbnQKLXVzcnNjdHBfY29u
bmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
Km5hbWUsCi0gICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCi1gYGAKLQotKiBzbzog
UG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tldCgpYC4K
LSogbmFtZTogQWRkcmVzcyBvZiB0aGUgcGVlciB0byBjb25uZWN0IHRvIChgc3RydWN0IHNvY2th
ZGRyX2luYCBmb3IgYW4gSVB2NCBhZGRyZXNzIG9yIGBzdHJ1Y3Qgc29ja2FkZHJfaW42YCBmb3Ig
YW4gSVB2NiBhZGRyZXNzKS4KLSogYWRkcmxlbjogU2l6ZSBvZiB0aGUgcGVlcidzIGFkZHJlc3Mu
Ci0KLXVzcnNjdHBfY29ubmVjdCgpIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNl
IG9mIGFuIGVycm9yLgotCi0jIyMgdXNyc2N0cF9zaHV0ZG93bigpCi0KLWBgYGMKLWludAotdXNy
c2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdykKLWBgYAotCi0qIHNvOiBQ
b2ludGVyIHRvIHRoZSBzb2NrZXQgb2YgdGhlIGFzc29jaWF0aW9uIHRvIGJlIGNsb3NlZAotKiBo
b3c6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBzaHV0ZG93bi4gIFRoZSB2YWx1ZXMgYXJlIGFzIGZv
bGxvd3M6Ci0gICogU0hVVF9SRDogIERpc2FibGVzIGZ1cnRoZXIgcmVjZWl2ZSBvcGVyYXRpb25z
LiAgTm8gU0NUUCBwcm90b2NvbCBhY3Rpb24gaXMgdGFrZW4uCi0gICogU0hVVF9XUjogIERpc2Fi
bGVzIGZ1cnRoZXIgc2VuZCBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVzIHRoZSBTQ1RQIHNodXRk
b3duIHNlcXVlbmNlLgotICAqIFNIVVRfUkRXUjogIERpc2FibGVzIGZ1cnRoZXIgc2VuZCBhbmQg
cmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVzIHRoZSBTQ1RQIHNodXRkb3duIHNlcXVl
bmNlLgotCi1gdXNyc2N0cF9saXN0ZW4oKWAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGlu
IGNhc2Ugb2YgYW4gZXJyb3IuCi0KLSMjIFNlbmRpbmcgYW5kIFJlY2VpdmluZyBEYXRhCi1TaW5j
ZSB0aGUgcHVibGljYXRpb24gb2YgW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmM2NDU4KSB0aGVyZSBpcyBvbmx5IG9uZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBhbmQgb25l
IGZvciByZWNlaXZpbmcKLXRoYXQgaXMgbm90IGRlcHJlY2F0ZWQuIFRoZXJlZm9yZSwgb25seSB0
aGVzZSB0d28gYXJlIGRlc2NyaWJlZCBoZXJlLgotCi0jIyMgdXNyc2N0cF9zZW5kdigpCi0KLWBg
YGMKLXNzaXplX3QKLXVzcnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAg
ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsCi0gICAgICAgICAgICAgIGludCBhZGRyY250
LAotICAgICAgICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAgICBzb2NrbGVuX3QgaW5m
b2xlbiwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90eXBlLAotICAgICAgICAgICAg
ICBpbnQgZmxhZ3MpCi1gYGAKLQotKiBzbzogVGhlIHNvY2tldCB0byBzZW5kIGRhdGEgb24uCi0q
IGRhdGE6IEFzIGl0IGlzIG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRhdGEgaW4gYSBidWZmZXIg
YW5kIG5vdCBhIGBzdHJ1Y3QgaW92ZWNgIGRhdGEgc3RydWN0dXJlLCB3ZSBjaG9zZSB0byBwYXNz
IHRoZSBkYXRhIGFzIGEgdm9pZCBwb2ludGVyLgotKiBsZW46IExlbmd0aCBvZiB0aGUgZGF0YS4K
LSogYWRkcnM6IEluIHRoaXMgdmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1vc3Qgb25lIGRlc3RpbmF0
aW9uIGFkZHJlc3MgaXMgc3VwcG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBhIGNvbm5lY3RlZCBzb2Nr
ZXQsIHRoZSBwYXJhbWV0ZXIgYGFkZHJzYCBjYW4gYmUgc2V0IHRvIE5VTEwuCi0qIGFkZHJjbnQ6
IE51bWJlciBvZiBhZGRyZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJlc3MgaXMgc3VwcG9ydGVk
LCBhZGRyY250IGlzIDAgaWYgYWRkcnMgaXMgTlVMTCBhbmQgMSBvdGhlcndpc2UuCi0qIGluZm86
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBzdG9yZWQgaW4gYHZvaWQg
KmluZm9gLiBUaGUgZGF0YSB0eXBlcyBgc3RydWN0IHNjdHBfc25kaW5mb2AsIGBzdHJ1Y3Qgc2N0
cF9wcmluZm9gLCBhbmQgYHN0cnVjdCBzY3RwX3NlbmR2X3NwYWAgYXJlIHN1cHBvcnRlZCBhcyBk
ZWZpbmVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCku
IFN1cHBvcnQgZm9yIGBzdHJ1Y3Qgc2N0cF9hdXRoaW5mb2AgaXMgbm90IGltcGxlbWVudGVkIHll
dCwgdGhlcmVmb3JlLCBlcnJubyBpcyBzZXQgRUlOVkFMIGFuZCAtMSB3aWxsIGJlIHJldHVybmVk
LCBpZiBpdCBpcyB1c2VkLgotKiBpbmZvbGVuOiBMZW5ndGggb2YgaW5mbyBpbiBieXRlcy4KLSog
aW5mb3R5cGU6IElkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVk
IGluIGluZm8uIFBvc3NpYmxlIHZhbHVlcyBhcmUKLSAgKiBTQ1RQX1NFTkRWX05PSU5GTwotICAq
IFNDVFBfU0VORFZfU05ESU5GTwotICAqIFNDVFBfU0VORFZfUFJJTkZPCi0gICogU0NUUF9TRU5E
Vl9TUEEgKEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBbUkZDIDY0
NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLikKLSogZmxhZ3M6IEZsYWdz
IGFzIGRlc2NyaWJlZCBpbiBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm
YzY0NTgpLgotCi1gdXNyc2N0cF9zZW5kdigpYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMg
c2VudCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBUaGUgdmFyaWFibGUgZXJybm8gaXMg
dGhlbiBzZXQgYXBwcm9wcmlhdGVseS4KLQotIyMjIHVzcnNjdHBfcmVjdnYoKQotCi1gYGBjCi1z
c2l6ZV90Ci11c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgIHZv
aWQgKmRidWYsCi0gICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmZyb20sCi0gICAgICAgICAgICAgc29ja2xlbl90ICogZnJvbWxlbiwKLSAgICAg
ICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKLSAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBlLAotICAgICAgICAgICAgIGludCAqbXNn
X2ZsYWdzKQotYGBgCi0KLSogc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9uLgotKiBk
YnVmOiBBbmFsb2cgdG8gYHVzcnNjdHBfc2VuZHYoKWAgdGhlIGRhdGEgaXMgcmV0dXJuZWQgaW4g
YSBidWZmZXIuCi0qIGxlbjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCi0qIGZyb206
IEEgcG9pbnRlciB0byBhbiBhZGRyZXNzIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBzZW5kZXIgb2Yg
dGhlIHJlY2VpdmVkIG1lc3NhZ2UncyBhZGRyZXNzLgotKiBmcm9tbGVuOiBBbiBpbi9vdXQgcGFy
YW1ldGVyIGRlc2NyaWJpbmcgdGhlIGZyb20gbGVuZ3RoLgotKiBpbmZvOiBBIHBvaW50ZXIgdG8g
dGhlIGJ1ZmZlciB0byBob2xkIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdl
LiAgVGhlIHN0cnVjdHVyZSB0eXBlIG9mIGluZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5mb3R5
cGUgcGFyYW1ldGVyLiBUaGUgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBgaW5mb2AgaGF2ZSB0byBi
ZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBzcGVjaWZpZWQgaW4gW1JGQyA2NDU4XShodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4KLSogaW5mb2xlbjogIEFuIGluL291dCBw
YXJhbWV0ZXIgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0aGUgaW5mbyBidWZmZXIuCi0qIGluZm90
eXBlOiAgT24gcmV0dXJuLCBgKmluZm90eXBlYCBpcyBzZXQgdG8gdGhlIHR5cGUgb2YgdGhlIGlu
Zm8gYnVmZmVyLiAgVGhlIGN1cnJlbnQgZGVmaW5lZCB2YWx1ZXMgYXJlCi0gICogU0NUUF9SRUNW
Vl9OT0lORk8KLSAgKiBTQ1RQX1JFQ1ZWX1JDVklORk8KLSAgKiBTQ1RQX1JFQ1ZWX05YVElORk8K
LSAgKiBTQ1RQX1JFQ1ZWX1JOIChBIGRldGFpbGVkIGRlc2NyaXB0aW9uIGlzIGdpdmVuIGluIFtS
RkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkpCi0qIGZsYWdzOiBB
IHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBhbnkgbWVzc2FnZSBmbGFn
cyAoZS5nLiwgYE1TR19OT1RJRklDQVRJT05gKS4gIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzIGFu
IGluL291dCBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2ZSBtYXkgYWxzbyBiZSBw
YXNzZWQgaW50byB0aGUgdmFsdWUgKGUuZy4sIGBNU0dfRU9SYCkuICBSZXR1cm5pbmcgZnJvbSB0
aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZSB3aWxsIGRpZmZlciBmcm9tIGl0cyBvcmlnaW5hbCB2
YWx1ZS4KLQotYHVzcnNjdHBfcmVjdnYoKWAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNl
bnQsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRo
ZW4gc2V0IGFwcHJvcHJpYXRlbHkuCi0KLSMjIFNvY2tldCBPcHRpb25zCi1Tb2NrZXQgb3B0aW9u
cyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc29ja2V0IGNhbGxz
LgotVGhlaXIgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuIFRoZSBmdW5jdGlvbnMgdG8gZ2V0IG9yIHNldCB0aGVt
IGFyZQotCi1gYGBjCi1pbnQKLXVzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywK
LSAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICAgIGlu
dCBvcHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0dmFsLAotICAgICAgICAg
ICAgICAgICAgICAgc29ja2xlbl90ICpvcHRsZW4pCi1gYGAKLWFuZAotYGBgYwotaW50Ci11c3Jz
Y3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAgICAgICAgICBp
bnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKLSAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdHZhbCwKLSAgICAgICAgICAgICAgICAgICAgIHNvY2ts
ZW5fdCBvcHRsZW4pCi1gYGAKLQotYW5kIHRoZSBhcmd1bWVudHMgYXJlCi0qIHNvOiAgVGhlIHNv
Y2tldCBvZiB0eXBlIHN0cnVjdCBzb2NrZXQuCi0qIGxldmVsOiAgU2V0IHRvIElQUFJPVE9fU0NU
UCBmb3IgYWxsIFNDVFAgb3B0aW9ucy4KLSogb3B0bmFtZTogIFRoZSBvcHRpb24gbmFtZSBhcyBz
cGVjaWZpZWQgaW4gVGhlIFNvY2tldCBPcHRpb25zIHRhYmxlIGJlbG93LgotKiBvcHR2YWw6IFRo
ZSBidWZmZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gYXMgc3BlY2lmaWVkIGlu
IHRoZSBzZWNvbmQgY29sdW1uIG9mIFNvY2tldCBPcHRpb25zIGJlbG93LgotKiBvcHRsZW46ICBU
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcHRpb24gcmV0dXJu
ZWQgaW4gY2FzZSBvZiBgdXNyc2N0cF9nZXRzb2Nrb3B0YCkuCi0KLVRoZXNlIGZ1bmN0aW9ucyBy
ZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgotCi0jIyMgU29j
a2V0IE9wdGlvbnMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKLQotT3B0aW9uIHwgRGF0YXR5cGUgfCBy
L3cKLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLQotU0NUUF9SVE9JTkZPIHwgc3RydWN0IHNjdHBf
cnRvaW5mbyB8IHIvdwotU0NUUF9BU1NPQ0lORk8gfCBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyB8
IHIvdwotU0NUUF9JTklUTVNHIHwgc3RydWN0IHNjdHBfaW5pdG1zZyB8IHIvdwotU0NUUF9OT0RF
TEFZIHwgaW50IHwgci93Ci1TQ1RQX0FVVE9DTE9TRSB8IGludCB8IHIvdwotU0NUUF9QUklNQVJZ
X0FERFIgfCBzdHJ1Y3Qgc2N0cF9zZXRwcmltIHwgci93Ci1TQ1RQX0FEQVBUQVRJT05fTEFZRVIg
fCBzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIHwgci93Ci1TQ1RQX0RJU0FCTEVfRlJBR01FTlRT
IHwgaW50IHwgci93Ci1TQ1RQX1BFRVJfQUREUl9QQVJBTVMgfCBzdHJ1Y3Qgc2N0cF9wYWRkcnBh
cmFtcyB8IHIvdwotU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgfCBpbnQgfCByL3cKLVNDVFBf
TUFYU0VHIHwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgfCByL3cKLVNDVFBfREVMQVlFRF9TQUNL
IHwgc3RydWN0IHNjdHBfc2Fja19pbmZvIHwgci93Ci1TQ1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUg
fCBpbnQgfCByL3cKLVNDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCB8IGludCB8IHIvdwotU0NU
UF9ITUFDX0lERU5UIHwgc3RydWN0IHNjdHBfaG1hY2FsZ28gfCByL3cKLVNDVFBfQVVUSF9BQ1RJ
VkVfS0VZIHwgc3RydWN0IHNjdHBfYXV0aGtleWlkIHwgci93Ci1TQ1RQX0FVVE9fQVNDT05GIHwg
aW50IHwgci93Ci1TQ1RQX01BWF9CVVJTVCB8IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHwgci93
Ci1TQ1RQX0NPTlRFWFQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdwotU0NUUF9FWFBM
SUNJVF9FT1IgfCBpbnQgfCByL3cKLVNDVFBfUkVVU0VfUE9SVCB8IGludCB8IHIvdwotU0NUUF9F
VkVOVCB8IHN0cnVjdCBzY3RwX2V2ZW50IHwgci93Ci1TQ1RQX1JFQ1ZSQ1ZJTkZPIHwgaW50IHwg
ci93Ci1TQ1RQX1JFQ1ZOWFRJTkZPIHwgaW50IHwgci93Ci1TQ1RQX0RFRkFVTFRfU05ESU5GTyB8
IHN0cnVjdCBzY3RwX3NuZGluZm8gfCByL3cKLVNDVFBfREVGQVVMVF9QUklORk8gfCBzdHJ1Y3Qg
c2N0cF9kZWZhdWx0X3ByaW5mbyB8IHIvdwotU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIHwg
aW50IHwgci93Ci1TQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSB8IHIvdwotU0NUUF9TVEFUVVMgfCBzdHJ1Y3Qgc2N0cF9zdGF0dXMgfCByCi1TQ1RQX0dF
VF9QRUVSX0FERFJfSU5GTyB8IHN0cnVjdCBzY3RwX3BhZGRyaW5mbyB8IHIKLVNDVFBfUEVFUl9B
VVRIX0NIVU5LUyB8IHN0cnVjdCBzY3RwX2F1dGhjaHVua3MgfCByCi1TQ1RQX0xPQ0FMX0FVVEhf
Q0hVTktTIHwgc3RydWN0IHNjdHBfYXV0aGNodW5rcyB8IHIKLVNDVFBfR0VUX0FTU09DX05VTUJF
UiB8IHVpbnQzMl90IHwgcgotU0NUUF9HRVRfQVNTT0NfSURfTElTVCB8IHN0cnVjdCBzY3RwX2Fz
c29jX2lkcyB8IHIKLVNDVFBfUkVTRVRfU1RSRUFNUyB8IHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVh
bXMgfCB3Ci1TQ1RQX1JFU0VUX0FTU09DIHwgc3RydWN0IHNjdHBfYXNzb2NfdCB8IHcKLVNDVFBf
QUREX1NUUkVBTVMgfCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB8IHcKLQotRnVydGhlciB1c2Fn
ZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gW1JGQyA2NDU4XSh0b29scy5pZXRmLm9yZy9odG1s
L3JmYzY0NTgpLCBbUkZDIDY1MjVdKHRvb2xzLmlldGYub3JnL2h0bWwvcmZjNjUyNSksIGFuZCBb
ZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwLXVkcC1lbmNhcHMtMDNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9kcmFmdC1pZXRmLXRzdndnLXNjdHAtdWRwLWVuY2Fwcy0wMykgKHdvcmsgaW4gcHJv
Z3Jlc3MpLgotCi0jIyBTeXNjdGwgdmFyaWFibGVzCi0KLUluIGtlcm5lbCBpbXBsZW1lbnRhdGlv
bnMgbGlrZSBmb3IgaW5zdGFuY2UgRnJlZUJTRCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBh
cmFtZXRlcnMgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNh
bGxlZCBzeXNjdGwgdmFyaWFibGVzLgotCi1JbiB1c3JzY3RwIGFwcGxpY2F0aW9ucyBjYW4gc2V0
IG9yIHJldHJpZXZlIHRoZXNlIHZhcmlhYmxlcyB3aXRoIHRoZSBmdW5jdGlvbnMKLWBgYGMKLXZv
aWQgdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyAodWludDMyX3QgdmFsdWUpCi1gYGAKLWFuZAotYGBg
YwotdWludDMyX3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkKLWBgYAotcmVzcGVjdGl2
ZWx5LCB3aGVyZSBgIyNgIHN0YW5kcyBmb3IgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLgotCi1J
biB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFy
YW1ldGVycyB3aWxsIGJlIGdpdmVuLgotCi0jIyBNYW5pcHVsYXRlIE1lbW9yeQotIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9zZW5kc3BhY2UoKQotVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFi
bGUgc2VuZCBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAy
NjIsMTQ0IGJ5dGVzIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBgMl4zMiAtIDFgIGJ5dGVzLgot
Ci0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3JlY3ZzcGFjZSgpCi1UaGUgc3BhY2Ugb2Yg
dGhlIGF2YWlsYWJsZSByZWNlaXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZh
dWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0ZXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIGAyXjMy
IC0gMWAgYnl0ZXMuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGFzaHRibHNpemUo
KQotVGhlIFRDQiAoVGhyZWFkIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4g
dGhlIHNpemUgb2Ygb25lIFRDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdl
ZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0
ZXMuIEEgVENCIGNvbnRhaW5zIGZvciBpbnN0YW5jZSBwb2ludGVycyB0byB0aGUgc29ja2V0LCB0
aGUgZW5kcG9pbnQsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NvY2lhdGlvbiBhbmQgc29tZSBz
dGF0aXN0aWMgZGF0YS4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wY2J0YmxzaXpl
KCkKLVRoZSBQQ0IgKFByb3RvY29sIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGku
ZS4gdGhlIHNpemUgb2Ygb25lIFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJl
dHdlZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5
dGVzLiBUaGUgUENCIGNvbnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4g
ZW5kcG9pbnQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc3lzdGVtX2ZyZWVfcmVz
Y19saW1pdCgpCi1UaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNh
Y2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIDAgYW5k
IGAyXjMyIC0gMWAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuCi0KLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQoKQotVGhpcyBwYXJhbWV0ZXJzIHR1
bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0
aW9uLiBJdCBjYW4gYmUgc2V0IGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYC4gVGhlIGRlZmF1bHQg
dmFsdWUgaXMgMTAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWJ1Zl90aHJlc2hv
bGRfY291bnQoKQotRGF0YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJl
IGNoYWluZWQgdG9nZXRoZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBh
IGNoYWluIGNhbiBiZSBzZXQgd2l0aCB0aGlzIHBhcmFtZXRlciwgYmVmb3JlIGFuIG1idWYgY2x1
c2V0IGlzIHVzZWQuIFRoZSBkZWZhdWx0IGlzIDUuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfYWRkX21vcmVfdGhyZXNob2xkKCkKLVRCRAotVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJl
cyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVkIHRv
IGEgc29ja2V0IHNlbmQgYnVmZmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNDUyIGJ5dGVzLgot
Ci0KLSMjIENvbmZpZ3VyZSBSVE8KLVRoZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBp
LmUuIHRoZSB0aW1lIHRoYXQgY29udHJvbHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2Vz
LCBoYXMgc2V2ZXJhbCBwYXJhbWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBs
ZSB0byBzaG9ydGVuIHRoZSB0aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlzIHJldHJhbnNtaXR0ZWQu
IFRoZSByYW5nZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4gMCBhbmQgYDJeMzIgLSAx
YG1zLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0b19tYXhfZGVmYXVsdCgpCi1U
aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBp
biBtcyBpcyA2MCwwMDAgKDYwc2VjcykuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
cnRvX21pbl9kZWZhdWx0KCkKLVRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbWluaW11bSByZXRy
YW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDEsMDAwICgxc2VjKS4KLQotIyMjIyB1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KCkKLVRoZSBkZWZhdWx0IHZhbHVl
IGZvciB0aGUgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDMsMDAwICgz
c2VjKS4gVGhpcyB2YWx1ZSBpcyBvbmx5IG5lZWRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGN1bGF0
aW9uIG9mIGEgcm91bmQgdHJpcCB0aW1lIHRvb2sgcGxhY2UuCi0KLSMjIyMgdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQoKQotVGhlIGRlZmF1bHQgdmFsdWUgZm9y
IHRoZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4g
bXMgaXMgNjAsMDAwICg2MHNlY3MpLgotCi0KLSMjIFNldCBUaW1lcnMKLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCgpCi1BIGNvb2tpZSBoYXMg
YSBzcGVjaWZpZWQgbGlmZSB0aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBjb29raWUgaXMgbm90IHZh
bGlkIGFueSBtb3JlIGFuZCBhbiBBQk9SVCBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpbiBt
cyBpcyA2MCwwMDAgKDYwc2VjcykuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGVh
cnRiZWF0X2ludGVydmFsX2RlZmF1bHQoKQotU2V0IHRoZSBkZWZhdWx0IHRpbWUgYmV0d2VlbiB0
d28gaGVhcnRiZWF0cy4gVGhlIGRlZmF1bHQgaXMgMzAsMDAwbXMuCi0KLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KCkKLUlmIGEgU0hVVERP
V04gaXMgbm90IGFuc3dlcmVkIHdpdGggYSBTSFVURE9XTi1BQ0sgd2hpbGUgdGhlIHNodXRkb3du
IGd1YXJkIHRpbWVyIGlzIHN0aWxsIHJ1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxsIGJlIGFi
b3J0ZWQgYWZ0ZXIgdGhlIGRlZmF1bHQgb2YgMTgwc2Vjcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCgpCi1UQkQKLVRvIHNldCB0aGUgc2l6
ZSBvZiB0aGUgcGFja2V0cyB0byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3NzaWJsZSwgdGhlIG1heGlt
dW0gdHJhbnNmZXIgdW5pdCAoTVRVKSBvZiB0aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25v
d24uIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3Zlcnkg
aXMgNjAwc2Vjcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zZWNyZXRfbGlmZXRp
bWVfZGVmYXVsdCgpCi1UQkQKLVRoZSBkZWZhdWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZl
ciBpcyAzNjAwc2Vjcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF92dGFnX3RpbWVf
d2FpdCgpCi1UQkQKLVZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERlZmF1bHQ6
IDYwc2VjcwotCi0KLSMjIFNldCBGYWlsdXJlIExpbWl0cwotVHJhbnNtaXNzaW9ucyBhbmQgcmV0
cmFuc21pc3Npb25zIG9mIG1lc3NhZ2VzIG1pZ2h0IGZhaWwuIFRvIHByb3RlY3QgdGhlIHN5c3Rl
bSBhZ2FpbnN0IHRvbyBtYW55IHJldHJhbnNtaXNzaW9ucywgbGltaXRzIGhhdmUgdG8gYmUgZGVm
aW5lZC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVs
dCgpCi1UaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgYW4g
SU5JVCBjaHVua3MgaXMgOCwgYmVmb3JlIGFuIEFCT1JUIGlzIHNlbnQuCi0KLSMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KCkKLVRoaXMgcGFyYW1ldGVy
IHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3Jl
IHRoZSBhc3NvY2lhdGlvbiBpcyBhYm9ydGVkLiBUaGUgZGVmYXVsdCB2YXVsZSBpcyAxMC4KLQot
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCgpCi1UaGlz
IHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRoIGZhaWx1cmVzIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4gTm90
aWNlIHRoYXQgdGhlIG51bWJlciBvZiBwYXRocyBtdWx0aXBsaWVkIGJ5IHRoaXMgdmFsdWUgc2hv
dWxkIGJlIGVxdWFsIHRvIGBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdGAuIFRoYXQgbWVhbnMg
dGhhdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGdvb2QgZm9yIHR3byBwYXRocy4KLQot
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfcmV0cmFuX2NodW5rKCkKLVRoZSBwYXJh
bWV0ZXIgY29uZmlndXJlcyBob3cgbWFueSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSBy
ZXRyYW5zbWl0dGVkIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBp
cyBzZXQgdG8gMzAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcGF0aF9wZl90aHJl
c2hvbGQoKQotVEJECi1EZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQuIERlZmF1
bHQ6IDY1NTM1CQkKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdCgpCi1UQkQKLVdoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0
LiBEZWZhdWx0OiAwCi0KLQotIyMgQ29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLcwotIyMjIyB1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCgpCi1UaGUgU0FDSyBmcmVx
dWVuY3kgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgYXdhaXRlZCwgYmVm
b3JlIGEgU0FDSyBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgotCi0jIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQoKQotQXMgYSBTQUNL
IChTZWxlY3RpdmUgQWNrbm93bGVnbWVudCkgaXMgc2VudCBhZnRlciBldmVyeSBvdGhlciBwYWNr
ZXQsIGEgdGltZXIgaXMgc2V0IHRvIHNlbmQgYSBTQUNLIGluIGNhc2UgYW5vdGhlciBwYWNrZXQg
ZG9lcyBub3QgYXJyaXZlIGluIGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0
aW1lciBpcyAyMDBtcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3Rfc2Fj
a3MoKQotVEJECi1UaGlzIGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUg
Y29oZXJlbmNlIG9mIFNBQ0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSAob24p
LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25yX3NhY2tfb25fb2ZmKCkKLUlmIGEg
c2xvdyBob3N0cyByZWNlaXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0
aGF0IGl0cyByZWNlaXZlciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IGRhdGEgY2FuIG9ubHkgYmUg
YWNjZXB0ZWQgaWYgb25lIGNodW5rIHdpdGggYSBoaWdoZXIgVFNOIChUcmFuc21pc3Npb24gU2Vx
dWVuY2UgTnVtYmVyKSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gYWNrbm93bGVkZ2VkIGlzIGRy
b3BwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHNlbmRlciBoYXMgdG8gc3RvcmUgZGF0YSwgZXZl
biBpZiB0aGV5IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgaW4gY2FzZSB0aGV5IGhhdmUgdG8gYmUg
cmV0cmFuc21pdHRlZC4gSWYgdGhpcyBiZWhhdmlvciBpcyBub3QgbmVjZXNzYXJ5LCBub24tcmVu
ZWdhYmxlIFNBQ0tzIGNhbiBiZSB0dXJuZWQgb24uIEJ5IGRlZmF1bHQgdGhlIHVzZSBvZiBub24t
cmVuZWdhYmxlIFNBQ0tzIGlzIHR1cm5lZCBvZmYuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkoKQotSW4gc29tZSBjYXNlcyBpdCBpcyBub3Qg
ZGVzaXJhYmxlIHRvIHdhaXQgZm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4cGlyZSBiZWZvcmUgYSBT
QUNLIGlzIHNlbnQuIEluIHRoZXNlIGNhc2VzIGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZ
IChzZWUgW2RyYWZ0LXR1ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDldKGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC10dWV4ZW4tdHN2d2ctc2N0cC1zYWNrLWltbWVk
aWF0ZWx5LTA5KSkgY2FuIGJlIHNldCB0byBwcm92b2tlIHRoZSBpbnN0YW50IHNlbmRpbmcgb2Yg
YSBTQUNLLiBUaGUgZGVmYXVsdCBpcyB0byB0dXJuIGl0IG9mZi4KLQotIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9MMl9hYmNfdmFyaWFibGUoKQotVEJECi1TQ1RQIEFCQyBtYXggaW5jcmVh
c2UgcGVyIFNBQ0sgKEwpLiBEZWZhdWx0OiAxCi0KLSMjIENoYW5nZSBNYXggQnVyc3QKLU1heCBi
dXJzdCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgbWF5IGJlIHNl
bnQgaW4gb25lIGZsaWdodC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfYnVy
c3RfZGVmYXVsdCgpCi1UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1cnN0IGlzIDAsIHdoaWNo
IG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMgYSBmbGlnaHQgaXMgbm90
IGxpbWl0ZWQgYnkgdGhpcyBwYXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkgYW5vdGhlciBvbmUsIHNl
ZSB0aGUgbmV4dCBwYXJhZ3JhcGguCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdXNl
X2N3bmRfYmFzZWRfbWF4YnVyc3QoKQotVGhlIHVzZSBvZiBtYXggYnVyc3QgaXMgYmFzZWQgb24g
dGhlIHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IChjd25kKS4gVGhpcyBwYXJhbWV0ZXIg
aXMgc2V0IGJ5IGRlZmF1bHQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGJfbWF4
YnVyc3QoKQotSGVhcnRiZWF0cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVyaWZ5IGEgcGF0aC4gVGhl
aXIgbnVtYmVyIGNhbiBiZSBsaW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0LgotCi0jIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KCkKLUluIHRoZSBzdGF0ZSBv
ZiBmYXN0IHJldHJhbnNtaXNzaW9uIHRoZSBudW1iZXIgb2YgcGFja2V0IGJ1cnN0cyBjYW4gYmUg
bGltaXRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNC4KLQotCi0jIyBIYW5kbGUgQ2h1bmtzCi0j
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3BlZXJfY2h1bmtfb2goKQotSW4gb3JkZXIgdG8g
a2VlcCB0cmFjayBvZiB0aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2luZG93LCB0aGUg
c2VuZGVyIGNhbGN1bGF0ZXMgdGhlIHdpbmRvdyBieSBzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9m
IGRhdGEgc2VudC4gWWV0LCBzb21lIE9TcyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0
aGUgcmVhbCBzcGFjZSBuZWVkZWQgdG8gc3RvcmUgdGhlIGRhdGEuIFRoaXMgcGFyYW1ldGVyIHNl
dHMgdGhlIGFkZGl0aW9uYWwgYW1vdW50IHRvIGRlYml0IHRoZSBwZWVyJ3MgcmVjZWl2ZXIgd2lu
ZG93IHBlciBjaHVuayBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYsIHdoaWNoIGlzIHRo
ZSB2YWx1ZSBuZWVkZWQgYnkgRnJlZUJTRC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9tYXhfY2h1bmtzX29uX3F1ZXVlKCkKLVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGNodW5rcyB0aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFzc29jaWF0aW9uLiBUaGUg
ZGVmYXVsdCB2YWx1ZSBpcyA1MTIuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWlu
X3NwbGl0X3BvaW50KCkKLVRCRAotVGhlIG1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNo
dW5rIGlzIDI5MDQgYnl0ZXMgYnkgZGVmYXVsdC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9jaHVua3NjYWxlKCkKLVRCRAotVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBz
Y2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEw
LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21pbl9yZXNpZHVhbCgpCi1UQkQKLVRo
aXMgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgcmVzaWR1YWwg
ZGF0YSBjaHVuayBpbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHNwbGl0LiBUaGUgZGVmYXVsdCBp
cyAxNDUyLgotCi0KLSMjIENhbGN1bGF0ZSBSVFQKLVRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcm91
bmQgdHJpcCB0aW1lIChSVFQpIGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJhbWV0ZXJzLgotCi0jIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9idygpCi1UQkQKLVNoaWZ0IGFtb3VudCBm
b3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjLiBEZWZhdWx0OiA0Ci0KLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfcnR0dmFyX3J0dCgpCi1UQkQKLVNoaWZ0IGFtb3VudCBmb3IgcnR0IHNt
b290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVsdDogNQotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX3J0dHZhcl9lcXJldCgpCi1UQkQKLVdoYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBi
dyBhcmUgdW5jaGFuZ2VkLiBEZWZhdWx0OiAwCi0KLQotIyMgSW5mbHVlbmNlIHRoZSBDb25nZXN0
aW9uIENvbnRyb2wKLVRoZSBjb25nZXN0aW9uIGNvbnRyb2wgc2hvdWxkIHByb3RlY3QgdGhlIG5l
dHdvcmsgYWdhaW5zdCBmYXN0IHNlbmRlcnMuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfZWNuX2VuYWJsZQotRXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIGFyZSB0dXJu
ZWQgb24gYnkgZGVmYXVsdC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0
X2NjX21vZHVsZSgpCi1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBm
b3IgdGhlIGNvbmdlc3Rpb24gY29udHJvbC4gRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3Bl
Y2lmaWVkIGluIFtSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCku
Ci0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdGlhbF9jd25kKCkKLVNldCB0aGUg
aW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVmYXVsdCBpcyAzLgotCi0j
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VzZV9kY2NjX2VjbigpCi1UQkQKLUVuYWJsZSBm
b3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTi4gRGVmYXVsdDogMQotCi0jIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX3N0ZWFkeV9zdGVwKCkKLVRCRAotSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRh
a2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZC4gRGVmYXVsdDogMjAKLQotCi0jIyBDb25maWd1
cmUgQVVUSCBhbmQgQURELUlQCi1BbiBpbXBvcnRhbnQgZXh0ZW5zaW9uIG9mIFNDVFAgaXMgdGhl
IGR5bmFtaWMgYWRkcmVzcyByZWNvbmZpZ3VyYXRpb24gKHNlZSBbUkZDIDUwNjFdKGh0dHA6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzUwNjEpKSwgYWxzbyBrbm93biBhcyBBREQtSVAsIHdoaWNo
IGFsbG93cyB0aGUgY2hhbmdpbmcgb2YgYWRkcmVzc2VzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2Yg
YW4gYXNzb2NpYXRpb24uIEZvciB0aGlzIGZlYXR1cmUgdGhlIEFVVEggZXh0ZW5zaW9uIChzZWUg
W1JGQyA0ODk1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODk1KSkgaXMgbmVjZXNz
YXJ5LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2F1dG9fYXNjb25mKCkKLUlmIFND
VFAgQXV0by1BU0NPTkYgaXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5mb3JtZWQgYXV0b21hdGlj
YWxseSB3aGVuIGEgbmV3IGFkZHJlc3MKLWlzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgZmVhdHVy
ZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
bXVsdGlwbGVfYXNjb25mcygpCi1CeSBkZWZhdWx0IHRoZSBzZW5kaW5nIG9mIG11bHRpcGxlIEFT
Q09ORnMgaXMgZGlzYWJsZWQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXV0aF9k
aXNhYmxlKCkKLVRoZSB1c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFsbHkgdHVybmVkIG9uLCBj
YW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxLgotCi0jIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2FzY29uZl9hdXRoX25vY2hrKCkKLUl0IGlzIGFsc28gcG9z
c2libGUgdG8gZGlzYWJsZSB0aGUgcmVxdWlyZW1lbnQgdG8gdXNlIEFVVEggaW4gY29uanVuY3Rp
b24gd2l0aCBBREQtSVAgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlcgotdG8gMS4KLQotCi0jIyBD
b25jdXJyZW50IE11bHRpcGF0aCBUcmFuc2ZlciAoQ01UKQotQSBwcm9taW5lbnQgZmVhdHVyZSBv
ZiBTQ1RQIGlzIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugc2V2ZXJhbCBhZGRyZXNzZXMgZm9yIHRo
ZSBzYW1lIGFzc29jaWF0aW9uLiBPbmUgaXMgdGhlIHByaW1hcnkgcGF0aCwgYW5kIHRoZSBvdGhl
cnMgYXJlIG5lZWRlZCBpbiBjYXNlIG9mIGEgcGF0aCBmYWlsdXJlLiBVc2luZyBDTVQgdGhlIGRh
dGEgaXMgc2VudCBvbiBzZXZlcmFsIHBhdGhzIHRvIGVuaGFuY2UgdGhlIHRocm91Z2hwdXQuCi0K
LSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfY210X29uX29mZigpCi1UbyB0dXJuIENNVCBv
biwgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0byAxLgotCi0jIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX2NtdF91c2VfZGFjKCkKLVRvIHVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50
cyB3aXRoIENNVCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCi0KLSMjIyMgdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfYnVmZmVyX3NwbGl0dGluZygpCi1Gb3IgQ01UIGl0IG1ha2Vz
IHNlbnNlIHRvIHNwbGl0IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciB0byBoYXZlIHNoYXJl
cyBmb3IgZWFjaCBwYXRoLiBCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRpbmcgaXMgdHVybmVkIG9m
Zi4KLQotCi0jIyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkKLVRvIGJlIGFibGUg
dG8gcGFzcyBOQVQgYm94ZXMsIHRoZSBib3hlcyBoYXZlIHRvIGhhbmRsZSBTQ1RQIHBhY2tldHMg
aW4gYSBzcGVjaWZpYyB3YXkuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbmF0X2Zy
aWVuZGx5KCkKLVNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVmYXVsdDoxCi0KLSMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkoKQotRW5h
YmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gRGVm
YXVsdDogMAotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VkcF90dW5uZWxpbmdfcG9y
dCgpCi1TZXQgdGhlIFNDVFAvVURQIHR1bm5lbGluZyBwb3J0LiBEZWZhdWx0OiA5ODk5Ci0KLSMj
IFNDVFAgTW9iaWxpdHkKLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbW9iaWxpdHlfYmFz
ZSgpCi1UQkQKLUVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkuIERlZmF1bHQ6IDAKLQotCi0jIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKCkKLVRCRAotRW5h
YmxlIFNDVFAgZmFzdCBoYW5kb2ZmLiBkZWZhdWx0OiAwCi0KLQotIyMgTWlzY2VsbGFuZW91cwot
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKCkKLUNhbGN1
bGF0aW5nIHRoZSBjaGVja3N1bSBmb3IgcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrIGlzIHR1cm5l
ZCBvZmYgYnkgZGVmYXVsdC4gVG8gdHVybiBpdCBvbiwgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDAu
Ci0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZh
dWx0KCkKLVRoZSBwZWVyIGlzIG5vdGlmaWVkIGFib3V0IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcg
c3RyZWFtcyBpbiB0aGUgSU5JVCBvciBJTklULUFDSyBjaHVuay4gVGhlIGRlZmF1bHQgaXMgMTAu
Ci0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZG9fZHJhaW4oKQotRGV0ZXJtaW5lcyB3
aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzLiBEZWZhdWx0OiAx
CQkKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3RfZGF0YV9vcmRlcigpCi1U
QkQKLUVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRl
IGRhdGEuIERlZmF1bHQ6IDAKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0
X3NzX21vZHVsZSgpCi1TZXQgdGhlIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlLiBJ
bXBsZW1lbnRlZCBtb2R1bGVzIGFyZToKLSogU0NUUF9TU19ERUZBVUxUCi0qIFNDVFBfU1NfUk9V
TkRfUk9CSU4KLSogU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQKLSogU0NUUF9TU19QUklPUklU
WQotKiBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgKLSogU0NUUF9TU19GSVJTVF9DT01FCi0KLSMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUoKQotVEJECi1E
ZWZhdWx0IGZyYWdtZW50IGludGVybGVhdmUgbGV2ZWwuIERlZmF1bHQ6IDEKLQotIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoKQotVEJECi1FbmFibGUgU0NUUCBibGFja2hv
bGluZy4gRGVmYXVsdDogMAotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2xvZ2dpbmdf
bGV2ZWwoKQotU2V0IHRoZSBsb2dnaW5nIGxldmVsLiBUaGUgZGVmYXVsdCBpcyAwLgotCi0jIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKCkKLVR1cm4gZGVidWcgb3V0cHV0IG9u
IG9yIG9mZi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0YWluIGRlYnVnIG91dHB1
dCwgYFNDVFBfREVCVUdgIGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxlIGZsYWcuCi0KLQotIyMj
IHN5c2N0bCB2YXJpYWJsZXMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKLQotUGFyYW1ldGVyIHwgTWVh
bmluZyB8IERlZmF1bHQgVmFsdWUKLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0t
Ci1zY3RwX3NlbmRzcGFjZSB8IFNlbmQgYnVmZmVyIHNwYWNlIHwgMTg2NDEzNQotc2N0cF9yZWN2
c3BhY2UgfCBSZWNlaXZlIGJ1ZmZlciBzcGFjZSB8IDE4NjQxMzUKLXNjdHBfaGFzaHRibHNpemUg
fCBUdW5hYmxlIGZvciBUQ0IgaGFzaCB0YWJsZSBzaXplcyB8IDEwMjQKLXNjdHBfcGNidGJsc2l6
ZSB8IFR1bmFibGUgZm9yIFBDQiBoYXNoIHRhYmxlIHNpemVzIHwgMjU2Ci1zY3RwX3N5c3RlbV9m
cmVlX3Jlc2NfbGltaXQgfCBDYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0gfCAxMDAwCi1z
Y3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0IHwgQ2FzaGVkIHJlc291cmNlcyBpbiBhbiBhc3NvY2lh
dGlvbiB8IDEwCi1zY3RwX3J0b19tYXhfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJUT19t
YXggfCA2MDAwMG1zCi1zY3RwX3J0b19taW5fZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJU
T19taW4gfCAxMDAwbXMKLXNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUg
Zm9yIFJUT19pbml0aWFsIHwgMzAwMG1zCi1zY3RwX2luaXRfcnRvX21heF9kZWZhdWx0IHwgRGVm
YXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gUlRPIGZvciBzZW5kaW5nIGFuIElOSVQgfCA2MDAw
MG1zCi1zY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQgfCBWYWxpZCBjb29raWUgbGlmZSB0
aW1lIHwgNjAwMDBtcwotc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCB8IE1heGltdW0gbnVtYmVy
IG9mIElOSVQgcmV0cmFuc21pc3Npb25zIHwgOAotc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQg
fCBNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zIGJlZm9yZSB0aGUgYXNz
b2NpYXRpb24gaXMgYWJvcnRlZCB8IDEwCi1zY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0IHwgTWF4
aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJhbnNtaXNzaW9ucyBiZWZvcmUgYSBwYXRoIGZhaWxz
IHwgNQotc2N0cF9lY25fZW5hYmxlIHwgRW5hYmxpbmcgZXhwbGljaXQgY29uZ2VzdGlvbiBub3Rp
ZmljYXRpb25zIHwgMQotc2N0cF9zdHJpY3Rfc2Fja3MgfCBDb250cm9sIHRoZSBjb2hlcmVuY2Ug
b2YgU0FDS3MgfCAxCi1zY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQgfCBEZWZhdWx0IGRl
bGF5ZWQgU0FDSyB0aW1lciB8IDIwMG1zCi1zY3RwX3NhY2tfZnJlcV9kZWZhdWx0IHwgRGVmYXVs
dCBTQUNLIGZyZXF1ZW5jeSB8IDIKLXNjdHBfbnJfc2Fja19vbl9vZmYgfCBUdXJuIG5vbi1yZW5l
Z2FibGUgU0FDS3Mgb24gb3Igb2ZmIHwgMAotc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSB8
IEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJpdCB8IDAKLXNjdHBfbm9f
Y3N1bV9vbl9sb29wYmFjayB8IEVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNoZWNrc3Vt
IG9uIHBhY2tldHMgc2VudCBvbiBsb29wYmFjayB8IDEKLXNjdHBfcGVlcl9jaHVua19vaCB8IEFt
b3VudCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBzZW50IHwgMjU2Ci1zY3RwX21heF9i
dXJzdF9kZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHwgMAot
c2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCB8IFVzZSBtYXggYnVyc3QgYmFzZWQgb24gdGhl
IHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IHwgMQotc2N0cF9oYl9tYXhidXJzdCB8IENv
bmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0IHwgNAotc2N0cF9tYXhfY2h1bmtzX29uX3F1
ZXVlIHwgRGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jIHwgNTEyCi1zY3RwX21p
bl9zcGxpdF9wb2ludCB8IE1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIHwgMjkw
NAotc2N0cF9jaHVua3NjYWxlIHwgVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1
bmtzIGFuZCBtZXNzYWdlcyB8IDEwCi1zY3RwX21idWZfdGhyZXNob2xkX2NvdW50IHwgTWF4aW11
bSBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMgaW4gYSBjaGFpbiB8IDUKLXNjdHBfaGVhcnRiZWF0X2lu
dGVydmFsX2RlZmF1bHQgfCBEZWFmdWx0IHRpbWUgYmV0d2VlbiB0d28gSGVhcnRiZWF0cyB8IDMw
MDAwbXMKLXNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQgfCBEZWZhdWx0IFBNVFUgcmFpc2Ug
dGltZXIgfCA2MDBzZWNzCi1zY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCB8IERlZmF1
bHQgc2h1dGRvd24gZ3VhcmQgdGltZXIgfCAxODBzZWNzCi1zY3RwX3NlY3JldF9saWZldGltZV9k
ZWZhdWx0IHwgRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgfCAzNjAwc2Vjcwotc2N0cF9hZGRfbW9y
ZV90aHJlc2hvbGQgfCBUaHJlc2hvbGQgd2hlbiBtb3JlIHNwYWNlIHNob3VsZCBiZSBhZGRlZCB0
byBhIHNvY2tldCBzZW5kIGJ1ZmZlciB8IDE0NTIKLXNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19k
ZWZhdWx0IHwgRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyB8IDEwCi1zY3RwX2Nt
dF9vbl9vZmYgfCBUdXJuIENNVCBvbiBvciBvZmYuIHwgMAotc2N0cF9jbXRfdXNlX2RhYyB8IFVz
ZSBkZWxheWVkIGFja25vd2xlZGdtZW50IGZvciBDTVQgfCAwCi1zY3RwX2ZyX21heF9idXJzdF9k
ZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHdoZW4gZmFzdCBy
ZXRyYW5zbWl0dGluZyB8IDQKLXNjdHBfYXV0b19hc2NvbmYgfCBFbmFibGUgU0NUUCBBdXRvLUFT
Q09ORiB8IDEKLXNjdHBfbXVsdGlwbGVfYXNjb25mcyB8IEVuYWJsZSBTQ1RQIE11bGlwbGUtQVND
T05GcyB8IDAKLXNjdHBfYXNjb25mX2F1dGhfbm9jaGsgfCBEaXNhYmxlIFNDVFAgQVNDT05GIEFV
VEggcmVxdWlyZW1lbnQgfCAwCi1zY3RwX2F1dGhfZGlzYWJsZSB8IERpc2FibGUgU0NUUCBBVVRI
IGZ1bmN0aW9uIHwgMAotc2N0cF9uYXRfZnJpZW5kbHkgfCBTQ1RQIE5BVCBmcmllbmRseSBvcGVy
YXRpb24gfCAxCi1zY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5IHwgRW5hYmxlIHNlbmRp
bmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gfCAwCi1zY3RwX3Vk
cF90dW5uZWxpbmdfcG9ydCB8IFNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQgfCA5ODk5
Ci1zY3RwX2RvX2RyYWluIHwgRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQg
dG8gdGhlIGRyYWluIGNhbGxzIHwgMQotc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCB8IFdoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0IHwgMAotc2N0cF9zdHJpY3RfZGF0
YV9vcmRlciB8IEVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wg
aW5zaWRlIGRhdGEgfCAwCi1zY3RwX21pbl9yZXNpZHVhbCB8IE1pbmltdW0gcmVzaWR1YWwgZGF0
YSBjaHVuayBpbiBzZWNvbmQgcGFydCBvZiBzcGxpdCB8IDE0NTIKLXNjdHBfbWF4X3JldHJhbl9j
aHVuayB8IE1heGltdW0gdGltZXMgYW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRl
ZCBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGFib3J0cyB8IDMwCi1zY3RwX2RlZmF1bHRfY2NfbW9k
dWxlIHwgRGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHwgMAotc2N0cF9kZWZhdWx0
X3NzX21vZHVsZSB8IERlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlIHwgMAotc2N0cF9k
ZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSB8IERlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZl
bCB8IDEKLXNjdHBfbW9iaWxpdHlfYmFzZSB8IEVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkgfCAw
Ci1zY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmIHwgRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmIHwg
MAotc2N0cF9MMl9hYmNfdmFyaWFibGUgfCBTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sg
KEwpIHwgMQotc2N0cF92dGFnX3RpbWVfd2FpdCB8IFZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlz
YWJsZXMgaXQuIHwgNjBzZWNzCi1zY3RwX2JsYWNraG9sZSB8IEVuYWJsZSBTQ1RQIGJsYWNraG9s
aW5nIHwgMAotc2N0cF9wYXRoX3BmX3RocmVzaG9sZCB8IERlZmF1bHQgcG90ZW50aWFsbHkgZmFp
bGVkIHRocmVzaG9sZCB8IDY1NTM1Ci1zY3RwX3J0dHZhcl9idyB8IFNoaWZ0IGFtb3VudCBmb3Ig
Yncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNAotc2N0cF9ydHR2YXJfcnR0IHwgU2hpZnQgYW1v
dW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNQotc2N0cF9ydHR2YXJfZXFyZXQg
IHwgV2hhdCB0byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3IGFyZSB1bmNoYW5nZWQgfCAwCi1zY3Rw
X3N0ZWFkeV9zdGVwIHwgSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRv
d24gb2YgY3duZCB8IDIwCi1zY3RwX3VzZV9kY2NjX2VjbiB8IEVuYWJsZSBmb3IgUlRDQyBDQyBk
YXRhY2VudGVyIEVDTiB8IDEKLXNjdHBfYnVmZmVyX3NwbGl0dGluZyB8IEVuYWJsZSBzZW5kL3Jl
Y2VpdmUgYnVmZmVyIHNwbGl0dGluZyB8IDAKLXNjdHBfaW5pdGlhbF9jd25kIHwgSW5pdGlhbCBj
b25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzIHwgMwotc2N0cF9sb2dnaW5nX2xldmVsIHwgTG9nZ2lu
ZyBsZXZlbCB8IDAKLXNjdHBfZGVidWdfb24gfCBUdXJucyBkZWJ1ZyBvdXRwdXQgb24gb3Igb2Zm
LiB8IDAKLQotIyMgRXhhbXBsZXMKLQotU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3Vz
cnNjdHAvdHJlZS9tYXN0ZXIvcHJvZ3JhbXMKLQotCi0jIyBSZWZlcmVuY2VzCi0KLSMjIyMgU0NU
UAotUi4gU3Rld2FydDo8L2JyPgotYFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2Nv
bGAuPC9icj4KLVtSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCks
IFNlcHRlbWJlciAyMDA3LgotCi0jIyMjIGF1dGgKLU0uIFTDvHhlbiwgUi4gU3Rld2FydCwgUC4g
TGVpLCBhbmQgRS4gUmVzY29ybGE6PC9icj4KLWBBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhl
IFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUClgLjwvYnI+Ci1bUkZD
IDQ4OTVdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4OTUpLCBBdWd1c3QgMjAwNy4K
LQotIyMjIyBhZGRpcAotUi4gU3Rld2FydCwgUS4gWGllLCBNLiBUw7x4ZW4sIFMuIE1hcnV5YW1h
LCBhbmQgTS4gS296dWthOjwvYnI+Ci1gU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3Rv
Y29sIChTQ1RQKSBEeW5hbWljIEFkZHJlc3MgUmVjb25maWd1cmF0aW9uYC48L2JyPgotW1JGQyA1
MDYxXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MDYxKSwgU2VwdGVtYmVyIDIwMDcu
Ci0KLSMjIyMgc29ja2V0QVBJCi1SLiBTdGV3YXJ0LCBNLiBUw7x4ZW4sIEsuIFBvb24sIGFuZCBW
LiBZYXNldmljaDo8L2JyPgotYFNvY2tldHMgQVBJIEV4dGVuc2lvbnMgZm9yIHRoZSBTdHJlYW0g
Q29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApYC48L2JyPgotW1JGQyA2NDU4XSho
dHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSwgRGV6ZW1iZXIgMjAxMS4KLQotIyMj
IyBzdHJlYW1SZXNldAotUi4gU3Rld2FydCwgTS4gVMO8eGVuLCBhbmQgUC4gTGVpOjwvYnI+Ci1g
U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25m
aWd1cmF0aW9uYC48L2JyPgotW1JGQyA2NTI1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM2NTI1KSwgRmVicnVhcnkgMjAxMi4KLQotIyMjIyB1ZHBlbmNhcHMKLU0uIFTDvHhlbiBhbmQg
Ui4gU3Rld2FydDwvYnI+Ci1gVURQIEVuY2Fwc3VsYXRpb24gb2YgU3RyZWFtIENvbnRyb2wgVHJh
bnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBQYWNrZXRzIGZvciBFbmQtSG9zdCB0byBFbmQtSG9z
dCBDb21tdW5pY2F0aW9uYDwvYnI+Ci1bUkZDIDY5NTFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2OTUxKSwgTWF5IDIwMTMuCi0KLSMjIyMgc2Fjay1pbW0KLU0uIFTDvHhlbiwgSS4g
UsO8bmdlbGVyLCBhbmQgUi4gU3Rld2FydDo8L2JyPgotYFNBQ0stSU1NRURJQVRFTFkgRXh0ZW5z
aW9uIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sYDwvYnI+Ci1b
UkZDIDcwNTNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MDUzKSwgTm92ZW1iZXIg
MjAxMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9NYW51YWwudGV4IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01hbnVhbC50ZXgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGE1MjE1OTM5ODYyNWUzMGNkMzEzOWJmYTIzM2Y4ZjU2MzdmNzMwZTUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01hbnVhbC50ZXgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMzMwICswLDAgQEAKLSUKLSUgQ29weXJpZ2h0IChDKSAyMDEyLTIw
MTUgSXJlbmUgUnVlbmdlbGVyCi0lIENvcHlyaWdodCAoQykgMjAxMi0yMDE1IE1pY2hhZWwgVHVl
eGVuCi0lCi0lIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0lCi0lIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotJSBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSUgYXJlIG1ldDoKLSUgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSUgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotJSAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotJSAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0lICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0lIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0lICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQotJSAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSUKLSUgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSUgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0lIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0lIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0lIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0lIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0lIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotJSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotJSBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0lIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSUgU1VDSCBEQU1BR0UuCi0lCi1cZG9jdW1lbnRjbGFzc1thNHBh
cGVyXXthcnRpY2xlfQotJQotXHVzZXBhY2thZ2V7bG9uZ3RhYmxlfQotJQotXHRpdGxle1NvY2tl
dCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBJbXBsZW1lbnRhdGlvbiAodXNyc2N0cCl9Ci1c
YXV0aG9ye0kuflJcInVuZ2VsZXIlCi0gICAgICAgIFx0aGFua3N7TVwidW5zdGVyIFVuaXZlcnNp
dHkgb2YgQXBwbGllZCBTY2llbmNlcywKLSAgICAgICAgICAgICAgICBEZXBhcnRtZW50IG9mIEVs
ZWN0cmljYWwgRW5naW5lZXJpbmcKLSAgICAgICAgICAgICAgICBhbmQgQ29tcHV0ZXIgU2NpZW5j
ZSwKLSAgICAgICAgICAgICAgICBTdGVnZXJ3YWxkc3RyLn4zOSwKLSAgICAgICAgICAgICAgICBE
LTQ4NTY1IFN0ZWluZnVydCwKLSAgICAgICAgICAgICAgICBHZXJtYW55LAotICAgICAgICAgICAg
ICAgIFx0ZXh0dHR7aS5ydWVuZ2VsZXJAZmgtbXVlbnN0ZXIuZGV9Ln0KLSAgICAgICAgXGFuZAot
ICAgICAgICBNLn5UXCJ1eGVuJQotICAgICAgICBcdGhhbmtze01cInVuc3RlciBVbml2ZXJzaXR5
IG9mIEFwcGxpZWQgU2NpZW5jZXMsCi0gICAgICAgICAgICAgICAgRGVwYXJ0bWVudCBvZiBFbGVj
dHJpY2FsIEVuZ2luZWVyaW5nCi0gICAgICAgICAgICAgICAgYW5kIENvbXB1dGVyIFNjaWVuY2Us
Ci0gICAgICAgICAgICAgICAgU3RlZ2Vyd2FsZHN0ci5+MzksCi0gICAgICAgICAgICAgICAgRC00
ODU2NSBTdGVpbmZ1cnQsCi0gICAgICAgICAgICAgICAgR2VybWFueSwKLSAgICAgICAgICAgICAg
ICBcdGV4dHR0e3R1ZXhlbkBmaC1tdWVuc3Rlci5kZX0ufQotfQotJQotXGJlZ2lue2RvY3VtZW50
fQotXHNldGNvdW50ZXJ7c2VjbnVtZGVwdGh9ezR9Ci1cc2V0Y291bnRlcnt0b2NkZXB0aH17NH0K
LVxtYWtldGl0bGUKLVx0YWJsZW9mY29udGVudHMKLQotXHNlY3Rpb257SW50cm9kdWN0aW9ufQot
SW4gdGhpcyBtYW51YWwgdGhlIHNvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBpbXBs
ZW1lbnRhdGlvbiB3aWxsIGJlIGRlc2NyaWJlZC4gCi1JdCBpcyBiYXNlZCBvbiBSRkMgNjQ1OH5c
Y2l0ZXtzb2NrZXRBUEl9LiBUaGUgbWFpbiBmb2N1cyBvZiB0aGlzIGRvY3VtZW50IGlzIG9uIHBv
aW50aW5nIG91dAotIHRoZSBkaWZmZXJlbmNlcyB0byB0aGUgU0NUUCBTb2NrZXRzIEFQSS4gRm9y
IGFsbCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQSSB0aGF0IGFyZSBub3QKLSBtZW50aW9uZWQg
aW4gdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4LiBRdWVzdGlvbnMgYWJv
dXQgU0NUUCBjYW4gaG9wZWZ1bGx5IGJlCi0gYW5zd2VyZWQgYnkgUkZDfjQ5NjB+XGNpdGV7U0NU
UH0uCi0gCi1cc2VjdGlvbntHZXR0aW5nIFN0YXJ0ZWR9Ci1UaGUgVXNlci1sYW5kIHN0YWNrIGhh
cyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAsIFVidW50dSAxMS4xMCwgV2luZG93cyA3LCBN
YWMgT1MgWCAxMC42LCAKLWFuZCBNQUMgT1MgWCAxMC43LgotVGhlIGN1cnJlbnQgdmVyc2lvbiBv
ZiB0aGUgVXNlci1sYW5kIHN0YWNrIGlzIHByb3ZpZGVkIG9uIFx0ZXh0aXR7aHR0cDovL3NjdHAu
ZmgtbXVlbnN0ZXIuZGUvc2N0cC11c2VyLWxhbmQtc3RhY2suaHRtbH0uCi1Eb3dubG9hZCB0aGUg
dGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91ciBjaG9pY2UuIAotVGhlIHRh
cmJhbGwgY29udGFpbnMgYWxsIHRoZSBzb3VyY2VzIHRvIGJ1aWxkIHRoZSBsaWJ1c3JzY3RwLCB3
aGljaCBoYXMgdG8gYmUgbGlua2VkIHRvIHRoZSBvYmplY3QgZmlsZSBvZiBhbiAKLWV4YW1wbGUg
cHJvZ3JhbS4gSW4gYWRkaXRpb24gdGhlcmUgYXJlIHR3byBhcHBsaWNhdGlvbnMgaW4gdGhlIGZv
bGRlciBcdGV4dGl0e3Byb2dyYW1zfSB0aGF0IGNhbiBiZSBidWlsdCBhbmQgcnVuLgotIAotXHN1
YnNlY3Rpb257QnVpbGRpbmcgdGhlIExpYnJhcnkgYW5kIHRoZSBBcHBsaWNhdGlvbnN9Ci1cc3Vi
c3Vic2VjdGlvbntVbml4LWxpa2UgT3BlcmF0aW5nIFN5c3RlbXN9Ci1JbiB0aGUgZm9sZGVyIFx0
ZXh0aXR7dXNyc2N0cH0gdHlwZQotXGJlZ2lue3ZlcmJhdGltfQotLi9ib290c3RyYXAKLS4vY29u
ZmlndXJlCi1tYWtlCi1cZW5ke3ZlcmJhdGltfQotTm93LCB0aGUgbGlicmFyeSBcdGV4dGl0e2xp
YnVzcnNjdHAubGF9IGhhcyBiZWVuIGJ1aWx0IGluIHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHt1
c3JzY3RwbGlifSwgYW5kIHRoZSBleGFtcGxlIAotcHJvZ3JhbXMgYXJlIHJlYWR5IHRvIHJ1biBm
cm9tIHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHtwcm9ncmFtc30uCi0KLUlmIHlvdSBoYXZlIHJv
b3QgcHJpdmlsZWdlcyBvciBhcmUgaW4gdGhlIHN1ZG9lciBncm91cCwgeW91IGNhbiBpbnN0YWxs
IHRoZSBsaWJyYXJ5IGluIFx0ZXh0aXR7L3Vzci9sb2NhbC9saWJ9IAotYW5kIGNvcHkgdGhlIGhl
YWRlciBmaWxlIHRvIFx0ZXh0aXR7L3Vzci9pbmNsdWRlfSB3aXRoIHRoZSBjb21tYW5kCi1cYmVn
aW57dmVyYmF0aW19Ci1zdWRvIG1ha2UgaW5zdGFsbAotXGVuZHt2ZXJiYXRpbX0KLQotXHN1YnN1
YnNlY3Rpb257V2luZG93c30KLU9uIFdpbmRvd3MgeW91IG5lZWQgYSBjb21waWxlciBsaWtlIE1p
Y3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBZb3UgY2FuIGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCB0aGUK
LWV4YW1wbGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHRvb2wgb2YgdGhlIGNvbXBp
bGVyIGJ5IHR5cGluZwotXGJlZ2lue3ZlcmJhdGltfQotbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UK
LVxlbmR7dmVyYmF0aW19Ci1pbiB0aGUgZGlyZWN0b3J5IFx0ZXh0aXR7dXNyc2N0cH0uCi0KLVxz
dWJzZWN0aW9ue1J1bm5pbmcgdGhlIFRlc3QgUHJvZ3JhbXN9Ci1UaGVyZSBhcmUgdHdvIHRlc3Qg
cHJvZ3JhbXMgaW5jbHVkZWQsIGEgZGlzY2FyZCBzZXJ2ZXIgYW5kIGEgY2xpZW50LiBZb3UgY2Fu
IHJ1biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRoZQotY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIFRo
ZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGluIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSBzZXJ2
ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZQotaW4gdGhlIHRlcm1pbmFsIGFuZCBkaXNjYXJk
cyBpdC4gVGhlIHNvdXJjZXMgb2YgdGhlIHNlcnZlciBhcmUgYWxzbyBwcm92aWRlZCBpbiBTZWN0
aW9uflxyZWZ7c2VydmVyfSBhbmQgdGhvc2UKLW9mIHRoZSBjbGllbnQgaW4gU2VjdGlvbn5ccmVm
e2NsaWVudH0uCi0KLVxzdWJzdWJzZWN0aW9ue1VzaW5nIFVEUCBFbmNhcHN1bGF0aW9ufQotQm90
aCBwcm9ncmFtcyBjYW4gZWl0aGVyIHNlbmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgb3IgdXNl
IFVEUCBlbmNhcHN1bGF0aW9uLCB0aHVzIGVuY2Fwc3VsYXRpbmcgdGhlCi1TQ1RQIHBhY2tldCBp
biBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24gbG9vcGJhY2sgb3IgaW4g
YSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkgCi1OQVQgYm94ZXMgaW52b2x2ZWQuIEluIGFs
bCBvdGhlciBjYXNlcyBpdCBpcyBiZXR0ZXIgdG8gdXNlIFVEUCBlbmNhcHN1bGF0aW9uLgotCi1U
aGUgdXNhZ2Ugb2YgdGhlIGRpc2NhcmRcX3NlcnZlciBpcwotXGJlZ2lue3ZlcmJhdGltfQotZGlz
Y2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0IHJlbW90ZV9lbmNhcHNfcG9ydF0KLVxlbmR7
dmVyYmF0aW19Ci1Gb3IgVURQIGVuY2Fwc3VsYXRpb24gdGhlIHBvcnRzIGhhdmUgdG8gYmUgc3Bl
Y2lmaWVkLiBUaGUgbG9jYWwgYW5kIHJlbW90ZSBlbmNhcHN1bGF0aW9uIHBvcnRzIGNhbiBiZSBh
cmJpdHJhcmlseQotc2V0LgotRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbAotXGJlZ2lue3ZlcmJh
dGltfQotLi9kaXNjYXJkX3NlcnZlciAxMTExMSAyMjIyMgotXGVuZHt2ZXJiYXRpbX0KLW9uIGEg
VW5peC1saWtlIE9TIGFuZAotXGJlZ2lue3ZlcmJhdGltfQotZGlzY2FyZF9zZXJ2ZXIuZXhlIDEx
MTExIDIyMjIyCi1cZW5ke3ZlcmJhdGltfQotb24gV2luZG93cy4KLQotVGhlIGNsaWVudCBuZWVk
cyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLCB0aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgaXRz
IHBvcnQuCi1JdHMgdXNhZ2UgaXMKLVxiZWdpbnt2ZXJiYXRpbX0KLWNsaWVudCByZW1vdGVfYWRk
ciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5jYXBz
X3BvcnRdCi1cZW5ke3ZlcmJhdGltfQotVGhlIHJlbW90ZSBhZGRyZXNzIGlzIHRoZSBzZXJ2ZXIn
cyBhZGRyZXNzLiBJZiBjbGllbnQgYW5kIHNlcnZlciBhcmUgc3RhcnRlZCBvbiB0aGUgc2FtZSBt
YWNoaW5lLAotdGhlIGxvb3BiYWNrIGFkZHJlc3MgMTI3LjAuMC4xIGNhbiBiZSB1c2VkIGZvciBV
bml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyBvbiBXaW5kb3dzLgotVGhlIGRpc2Nh
cmQgcG9ydCBpcyA5LCB0aHVzIDkgaGFzIHRvIGJlIHRha2VuIGFzIHJlbW90ZSBwb3J0LiBUaGUg
ZW5jYXBzdWxhdGlvbiBwb3J0cyBoYXZlIHRvCi1tYXRjaCB0aG9zZSBvZiB0aGUgc2VydmVyLCBp
LmUuIHRoZSBzZXJ2ZXIncyBsb2NhbFxfZW5jYXBzXF9wb3J0IGlzIHRoZSBjbGllbnQncwotcmVt
b3RlXF9lbmNhcHNcX3BvcnQgYW5kIHZpY2UgdmVyc2EuIFRodXMsIHRoZSBjbGllbnQgY2FuIGJl
IHN0YXJ0ZWQgd2l0aAotXGJlZ2lue3ZlcmJhdGltfQotLi9jbGllbnQgMTI3LjAuMC4xIDkgMCAy
MjIyMiAxMTExMQotXGVuZHt2ZXJiYXRpbX0KLW9uIGEgVW5peC1saWtlIE9TIGFuZAotXGJlZ2lu
e3ZlcmJhdGltfQotY2xpZW50LmV4ZSAxOTIuMTY4LjAuMSA5IDAgMjIyMjIgMTExMTEKLVxlbmR7
dmVyYmF0aW19Ci1vbiBXaW5kb3dzIHByb3ZpZGVkIHlvdXIgbG9jYWwgSVAgYWRkcmVzcyBpcyAx
OTIuMTY4LjAuMS4KLQotXHN1YnN1YnNlY3Rpb257U2VuZGluZyBvdmVyIFNDVFB9Ci1UbyBzZW5k
IGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IHlvdSBtaWdodCBuZWVkIHJvb3QgcHJpdmlsZWdlcyBi
ZWNhdXNlIHJhdyBzb2NrZXRzIGFyZSB1c2VkLgotVGh1cyBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcg
dGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgeW91IGhhdmUgdG8gc3RhcnQgdGhlIHByb2dyYW1zIHBy
ZXBlbmRpbmcgCi1cdGV4dHR0e3N1ZG99IG9yIGluIGNhc2Ugb2YgV2luZG93cyBzdGFydCB0aGUg
cHJvZ3JhbSBmcm9tIGFuIGFkbWluaXN0cmF0b3IgY29uc29sZS4KLQotXHN1YnN1YnNlY3Rpb257
VXNpbmcgdGhlIENhbGxiYWNrIEFQSX0KLUluc3RlYWQgb2YgYXNraW5nIGNvbnN0YW50bHkgZm9y
IG5ldyBkYXRhLCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0IGlzIHRyaWdnZXJlZCBi
eSAKLVNDVFAuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRvIGJlIHJlZ2lzdGVyZWQgdGhhdCB3
aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBkYXRhIGlzIHJlYWR5IHRvCi1iZSBkZWxpdmVyZWQgdG8g
dGhlIGFwcGxpY2F0aW9uLgotCi1UaGUgZGlzY2FyZFxfc2VydmVyIGhhcyBhIGZsYWcgdG8gc3dp
dGNoIGJldHdlZW4gdGhlIHR3byBtb2RpLiBJZiAgdXNlXF9jYiBpcyBzZXQgdG8gMSwgdGhlCi1j
YWxsYmFjayBBUEkgd2lsbCBiZSB1c2VkLiBUbyBjaGFuZ2UgdGhlIHNldHRpbmcsIGp1c3Qgc2V0
IHRoZSBmbGFnIGFuZCBjb21waWxlIHRoZSBwcm9ncmFtIGFnYWluLgotCi0KLQotCi1cc2VjdGlv
bntCYXNpYyBPcGVyYXRpb25zfQotQWxsIHN5c3RlbSBjYWxscyBzdGFydCB3aXRoIHRoZSBwcmVm
aXggXHRleHRpdHt1c3JzY3RwXF99IHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJvbSB0aGUga2VybmVs
IHZhcmlhbnRzLiAKLVNvbWUgb2YgdGhlbSBhcmUgY2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGUg
ZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJsYW5kIGVudmlyb25tZW50LiAKLQotXHN1YnNl
Y3Rpb257RGlmZmVyZW5jZXMgdG8gUkZDIDY0NTh9Ci1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9p
bml0KCl9Ci1FdmVyeSBhcHBsaWNhdGlvbiBoYXMgdG8gc3RhcnQgd2l0aCBcdGV4dGl0e3VzcnNj
dHBcX2luaXQoKX0uIFRoaXMgZnVuY3Rpb24gY2FsbHMgXHRleHRpdHtzY3RwXF9pbml0KCl9IGFu
ZCByZXNlcnZlcwotdGhlIG1lbW9yeSBuZWNlc3NhcnkgdG8gYWRtaW5pc3RlciB0aGUgZGF0YSB0
cmFuc2Zlci4KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMgCi1cYmVnaW57dmVyYmF0aW19Ci12
b2lkCi11c3JzY3RwX2luaXQodWludDE2X3QgdWRwX3BvcnQpCi1cZW5ke3ZlcmJhdGltfQotQXMg
aXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzZW5kIGRhdGEgZGlyZWN0bHkgb3ZlciBTQ1RQ
IGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2FuCi1wcm9jZXNzIFNDVFAgcGFja2V0cywgdGhl
IGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRvIGVuY2Fwc3VsYXRlIFNDVFAgaW50byBVRFAK
LWEgVURQIHBvcnQgaGFzIHRvIGJlIHNwZWNpZmllZCwgdG8gd2hpY2ggdGhlIGRhdGFncmFtcyBj
YW4gYmUgc2VudC4gVGhpcyBsb2NhbCBVRFAgcG9ydCAgaXMgc2V0IAotd2l0aCB0aGUgcGFyYW1l
dGVyIFx0ZXh0dHR7dWRwXF9wb3J0fS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOTg5OSwgdGhlIHN0
YW5kYXJkIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQuCi1JZiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBu
b3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFzIHRvIGJlIHNldCB0byAwLgotCi1cc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9maW5pc2goKX0KLUF0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gXHRl
eHRpdHt1c3JzY3RwXF9maW5pc2goKX0gc2hvdWxkIGJlIGNhbGxlZCB0byBmcmVlIGFsbCB0aGUg
bWVtb3J5IHRoYXQgaGFzIGJlZW4KLWFsbG9jYXRlZCBiZWZvcmUuCi1UaGUgZnVuY3Rpb24gcHJv
dG90eXBlIGlzIAotXGJlZ2lue3ZlcmJhdGltfQotaW50Ci11c3JzY3RwX2ZpbmlzaCh2b2lkKS4K
LVxlbmR7dmVyYmF0aW19Ci1UaGUgcmV0dXJuIGNvZGUgaXMgMCBvbiBzdWNjZXNzIGFuZCAtMSBp
biBjYXNlIG9mIGFuIGVycm9yLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zb2NrZXQoKX0K
LUEgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBlbmRwb2ludCBpcyBhIHNvY2tldC4gSXMgaXQg
Y3JlYXRlZCB3aXRoIFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9LgotVGhlIGZ1bmN0aW9uIHBy
b3RvdHlwZSBpcyAKLVxiZWdpbnt2ZXJiYXRpbX0KLXN0cnVjdCBzb2NrZXQgKgotdXNyc2N0cF9z
b2NrZXQoaW50IGRvbWFpbiwgCi0gICAgICAgICAgICAgICBpbnQgdHlwZSwgCi0gICAgICAgICAg
ICAgICBpbnQgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaW9u
IHNjdHBfc29ja3N0b3JlIGFkZHIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRh
bGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3Jjdmlu
Zm8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSwKLSAgICAg
ICAgICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2JfZnJlZSksCi0gICAgICAgICAgICAgICB1
aW50MzJfdCBzYl90aHJlc2hvbGQpLgotXGVuZHt2ZXJiYXRpbX0KLWFuZCB0aGUgYXJndW1lbnRz
IHRha2VuIGZyb20gUkZDfjY0NTggYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtICBkb21haW46
IFBGXF9JTkVUIG9yIFBGXF9JTkVUNiBjYW4gYmUgdXNlZC4KLVxpdGVtIHR5cGU6IEluIGNhc2Ug
b2YgYSBvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQgaXQgaXMgU09DS1xfU0VRUEFDS0VULCBpbiBj
YXNlIG9mIGEgb25lLXRvLW9uZSBzdHlsZSAKLXNvY2tldCBpdCBpcyBTT0NLXF9TVFJFQU0uIEZv
ciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc29ja2V0IHR5
cGVzIHBsZWFzZQotcmVmZXIgdG8gUkZDfjY0NTguCi1caXRlbSBwcm90b2NvbDogU2V0IElQUFJP
VE9cX1NDVFAuCi1cZW5ke2l0ZW1pemV9Ci0KLUluIHVzcnNjdHAgYSBjYWxsYmFjayBBUEkgY2Fu
IGJlIHVzZWQuIFRoZSBmdW5jdGlvbiBwb2ludGVycyBvZiB0aGUgcmVjZWl2ZSBhbmQgc2VuZCBj
YWxsYmFja3MKLWFyZSBuZXcgYXJndW1lbnRzIHRvIHRoZSBzb2NrZXQgY2FsbC4gVGhleSBhcmUg
TlVMTCwgaWYgbm8gY2FsbGJhY2sgQVBJIGlzIHVzZWQuIFRoZSBzYlxfdGhyZXNob2xkIAotc3Bl
Y2lmaWVzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVy
IGJlZm9yZSB0aGUgc2VuZCBmdW5jdGlvbiBpbiB0aGUgCi1hcHBsaWNhdGlvbiBpcyBjYWxsZWQu
IElmIGEgc2VuZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBzcGVjaWZpZWQgYW5kIHNiXF90aHJlc2hv
bGQgaXMgMCwgdGhlIGZ1bmN0aW9uIGlzCi1jYWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgcm9vbSBp
biB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyLgotCi1PbiBzdWNjZXNzIFx0ZXh0aXR7dXNyc2N0cFxf
c29ja2V0KCl9IHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzb2NrZXQgaW4gdGhlIFx0
ZXh0dHR7c3RydWN0IHNvY2tldH0gZGF0YSB0eXBlLiAKLUl0IHdpbGwgYmUgbmVlZGVkIGluIGFs
bCBvdGhlciBzeXN0ZW0gY2FsbHMuIEluIGNhc2Ugb2YgYSBmYWlsdXJlIE5VTEwgaXMgcmV0dXJu
ZWQgYW5kCi1lcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX2Nsb3NlKCl9Ci0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUg
b2YgXHRleHRpdHt1c3JzY3RwXF9jbG9zZSgpfSBpcyAKLVxiZWdpbnt2ZXJiYXRpbX0gICAKLXZv
aWQKLXVzcnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pLgotIFxlbmR7dmVyYmF0aW19Ci1U
aHVzIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIGFic2VuY2Ugb2YgYSByZXR1cm4gY29kZS4g
Ci0gCi1cc3Vic2VjdGlvbntTYW1lIEZ1bmN0aW9uYWxpdHkgYXMgUkZDIDY0NTh9Ci1UaGUgZm9s
bG93aW5nIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlaXIga2Vy
bmVsIHBlbmRhbnRzLiBUaGVyZSBwcm90b3R5cGVzCi1hcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xs
b3dpbmcgc3Vic2VjdGlvbnMuIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHBsZWFzZSByZWZl
ciB0byBSRkN+NjQ1OC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfYmluZCgpfQotVGhlIGZ1
bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2JpbmQoKX0gaXMgCi1cYmVnaW57
dmVyYmF0aW19Ci1pbnQKLXVzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAg
ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgICAgICAgICAgc29ja2xlbl90IGFkZHJs
ZW4pLgotXGVuZHt2ZXJiYXRpbX0gICAgIAotVGhlIGFyZ3VtZW50cyBhcmUKLVxiZWdpbntpdGVt
aXplfQotXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4
dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KLVxpdGVtIGFkZHI6IFRoZSBhZGRyZXNzIHN0cnVjdHVy
ZSAoc3RydWN0IHNvY2thZGRyXF9pbiBmb3IgYW4gSVB2NCBhZGRyZXNzCi0gICAgICBvciBzdHJ1
Y3Qgc29ja2FkZHJcX2luNiBmb3IgYW4gSVB2NiBhZGRyZXNzKS4KLVxpdGVtIGFkZHJsZW46IFRo
ZSBzaXplIG9mIHRoZSBhZGRyZXNzIHN0cnVjdHVyZS4KLVxlbmR7aXRlbWl6ZX0KLVx0ZXh0aXR7
dXNyc2N0cFxfYmluZCgpfSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBh
biBlcnJvci4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfbGlzdGVuKCl9Ci1UaGUgZnVuY3Rp
b24gcHJvdG90eXBlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfbGlzdGVuKCl9IGlzIAotXGJlZ2lue3Zl
cmJhdGltfQotaW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAg
ICAgICAgIGludCBiYWNrbG9nKS4KLSBcZW5ke3ZlcmJhdGltfSAgICAgIAotVGhlIGFyZ3VtZW50
cyBhcmUKLVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBh
cyByZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KLVxpdGVtIGJhY2tsb2c6
IElmIGJhY2tsb2cgaXMgbm9uLXplcm8sIGVuYWJsZSBsaXN0ZW5pbmcsIGVsc2UgZGlzYWJsZQot
ICAgICAgbGlzdGVuaW5nLgotXGVuZHtpdGVtaXplfQotXHRleHRpdHt1c3JzY3RwXF9saXN0ZW4o
KX0gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX2FjY2VwdCgpfQotVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBv
ZiBcdGV4dGl0e3VzcnNjdHBcX2FjY2VwdCgpfSBpcyAKLVxiZWdpbnt2ZXJiYXRpbX0gICAgICAg
ICAgICAgICAgCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQg
KnNvLAotICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogYWRkciwKLSAgICAgICAgICAg
ICAgIHNvY2tsZW5fdCAqIGFkZHJsZW4pLgotIFxlbmR7dmVyYmF0aW19Ci0gVGhlIGFyZ3VtZW50
cyBhcmUKLVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBh
cyByZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KLVxpdGVtIGFkZHI6IE9u
IHJldHVybiwgIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIHBlZXIgKHN0cnVjdCBzb2NrYWRk
clxfaW4gZm9yIGFuIElQdjQgYWRkcmVzcyBvcgotICAgICAgc3RydWN0IHNvY2thZGRyXF9pbjYg
Zm9yIGFuIElQdjYgYWRkcmVzcykuCi1caXRlbSBhZGRybGVuOiBTaXplIG9mIHRoZSByZXR1cm5l
ZCBhZGRyZXNzIHN0cnVjdHVyZS4KLVxlbmR7aXRlbWl6ZX0KLVx0ZXh0aXR7dXNyc2N0cFxfYWNj
ZXB0KCl9IHJldHVybnMgdGhlIGFjY2VwdGVkIHNvY2tldCBvbiBzdWNjZXNzIGFuZCBOVUxMIGlu
IGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX2Nvbm5lY3QoKX0K
LVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgXHRleHRpdHt1c3JzY3RwXF9jb25uZWN0KCl9IGlz
IAotXGJlZ2lue3ZlcmJhdGltfSAgICAgCi1pbnQKLXVzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29j
a2V0ICpzbywKLSAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCi0gICAgICAg
ICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCi0gXGVuZHt2ZXJiYXRpbX0KLVRoZSBhcmd1bWVu
dHMgYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIHNvOiBQb2ludGVyIHRvIHRoZSBzb2NrZXQg
YXMgcmV0dXJuZWQgYnkgXHRleHRpdHt1c3JzY3RwXF9zb2NrZXQoKX0uCi0gXGl0ZW0gbmFtZTog
QWRkcmVzcyBvZiB0aGUgcGVlciB0byBjb25uZWN0IHRvIChzdHJ1Y3Qgc29ja2FkZHJcX2luIGZv
ciBhbiBJUHY0IGFkZHJlc3Mgb3IKLSAgICAgIHN0cnVjdCBzb2NrYWRkclxfaW42IGZvciBhbiBJ
UHY2IGFkZHJlc3MpLgotXGl0ZW0gYWRkcmxlbjogU2l6ZSBvZiB0aGUgcGVlcidzIGFkZHJlc3Mu
Ci1cZW5ke2l0ZW1pemV9Ci1cdGV4dGl0e3VzcnNjdHBcX2Nvbm5lY3QoKX0gcmV0dXJucyAwIG9u
IHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3NodXRkb3duKCl9IAotVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3Vz
cnNjdHBcX3NodXRkb3duKCl9IGlzIAotXGJlZ2lue3ZlcmJhdGltfSAgIAotaW50Ci11c3JzY3Rw
X3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KS4KLVxlbmR7dmVyYmF0aW19Ci1U
aGUgYXJndW1lbnRzIGFyZQotXGJlZ2lue2l0ZW1pemV9Ci1caXRlbSBzbzogUG9pbnRlciB0byB0
aGUgc29ja2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQuCi1caXRlbSBob3c6IFNw
ZWNpZmllcyB0aGUgdHlwZSBvZiBzaHV0ZG93bi4gIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3M6
Ci1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIFNIVVRcX1JEOiAgRGlzYWJsZXMgZnVydGhlciByZWNl
aXZlIG9wZXJhdGlvbnMuICBObyBTQ1RQIHByb3RvY29sCi0gICAgICAgICBhY3Rpb24gaXMgdGFr
ZW4uCi1caXRlbSBTSFVUXF9XUjogIERpc2FibGVzIGZ1cnRoZXIgc2VuZCBvcGVyYXRpb25zLCBh
bmQgaW5pdGlhdGVzIHRoZSBTQ1RQCi0gICAgICAgICBzaHV0ZG93biBzZXF1ZW5jZS4KLVxpdGVt
IFNIVVRcX1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9u
cywgYW5kCi0gICAgICAgICBpbml0aWF0ZXMgdGhlIFNDVFAgc2h1dGRvd24gc2VxdWVuY2UuCi1c
ZW5ke2l0ZW1pemV9Ci1cZW5ke2l0ZW1pemV9Ci1cdGV4dGl0e3VzcnNjdHBcX2xpc3RlbigpfSBy
ZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KLQotXHNlY3Rp
b257U2VuZGluZyBhbmQgUmVjZWl2aW5nIERhdGF9Ci1TaW5jZSB0aGUgcHVibGljYXRpb24gb2Yg
UkZDfjY0NTggdGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gZm9yIHNlbmRpbmcgYW5kIG9uZSBm
b3IgcmVjZWl2aW5nCi10aGF0IGlzIG5vdCBkZXByZWNhdGVkLiBUaGVyZWZvcmUsIG9ubHkgdGhl
c2UgdHdvIGFyZSBkZXNjcmliZWQgaGVyZS4KLQotXHN1YnNlY3Rpb257dXNyc2N0cFxfc2VuZHYo
KX0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMKLVxiZWdpbnt2ZXJiYXRpbX0KLXNzaXplX3QK
LXVzcnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAgIGNvbnN0IHZv
aWQgKmRhdGEsCi0gICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgIHN0cnVj
dCBzb2NrYWRkciAqYWRkcnMsCi0gICAgICAgICAgICAgIGludCBhZGRyY250LAotICAgICAgICAg
ICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAgICBzb2NrbGVuX3QgaW5mb2xlbiwKLSAgICAg
ICAgICAgICAgdW5zaWduZWQgaW50IGluZm90eXBlLAotICAgICAgICAgICAgICBpbnQgZmxhZ3Mp
LgotXGVuZHt2ZXJiYXRpbX0KLVRoZSBhcmd1bWVudHMgYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxp
dGVtIHNvOiBUaGUgc29ja2V0IHRvIHNlbmQgZGF0YSBvbi4KLVxpdGVtIGRhdGE6IEFzIGl0IGlz
IG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRhdGEgaW4gYSBidWZmZXIgYW5kIG5vdCBhIFx0ZXh0
dHR7c3RydWN0IGlvdmVjfSBkYXRhIHN0cnVjdHVyZSwgd2UKLWNob3NlIHRvIHBhc3MgdGhlIGRh
dGEgYXMgYSB2b2lkIHBvaW50ZXIuCi1caXRlbSBsZW46IExlbmd0aCBvZiB0aGUgZGF0YS4KLVxp
dGVtIGFkZHJzOiBJbiB0aGlzIHZlcnNpb24gb2YgdXNyc2N0cCBhdCBtb3N0IG9uZSBkZXN0aW5h
dGlvbiBhZGRyZXNzIGlzIHN1cHBvcnRlZC4gSW4gdGhlIGNhc2Ugb2YgYSBjb25uZWN0ZWQKLXNv
Y2tldCwgdGhlIHBhcmFtZXRlciBcdGV4dHR0e2FkZHJzfSBjYW4gYmUgc2V0IHRvIE5VTEwuCi1c
aXRlbSBhZGRyY250OiBOdW1iZXIgb2YgYWRkcmVzc2VzLiBBcyBhdCBtb3N0IG9uZSBhZGRyZXNz
IGlzIHN1cHBvcnRlZCwgYWRkcmNudCBpcyAwIGlmIGFkZHJzIGlzIE5VTEwgYW5kIAotMSBvdGhl
cndpc2UuCi1caXRlbSBpbmZvOiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBhIG1lc3NhZ2Ug
aXMgc3RvcmVkIGluIFx0ZXh0dHR7dm9pZCAqaW5mb30uIFRoZSBkYXRhIHR5cGVzIFx0ZXh0dHR7
c3RydWN0fnNjdHBcX3NuZGluZm99LAotXHRleHR0dHtzdHJ1Y3R+c2N0cFxfcHJpbmZvfSwgYW5k
IFx0ZXh0dHR7c3RydWN0fSBcbGluZWJyZWFrIFx0ZXh0dHR7c2N0cFxfc2VuZHZcX3NwYX0gYXJl
IHN1cHBvcnRlZCBhcyBkZWZpbmVkIGluIAotUkZDfjY0NTguIFN1cHBvcnQgZm9yIFx0ZXh0dHR7
c3RydWN0c2N0cFxfYXV0aGluZm99IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQsIHRoZXJlZm9yZSwg
ZXJybm8gaXMgc2V0IEVJTlZBTAotYW5kIC0xIHdpbGwgYmUgcmV0dXJuZWQsIGlmIGl0IGlzIHVz
ZWQuCi1caXRlbSBpbmZvbGVuOiBMZW5ndGggb2YgaW5mbyBpbiBieXRlcy4KLVxpdGVtIGluZm90
eXBlOiBJZGVudGlmaWVzIHRoZSB0eXBlIG9mIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBpbiBp
bmZvLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCi1TQ1RQXF9TRU5EVlxfTk9JTkZPLCBTQ1RQXF9TRU5E
VlxfU05ESU5GTywgXGxpbmVicmVhayBTQ1RQXF9TRU5EVlxfUFJJTkZPLCBTQ1RQXF9TRU5EVlxf
U1BBLiAKLUZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBSRkN+NjQ1
OC4KLVxpdGVtIGZsYWdzOiBGbGFncyBhcyBkZXNjcmliZWQgaW4gUkZDfjY0NTguCi1cZW5ke2l0
ZW1pemV9Ci0KLVx0ZXh0aXR7dXNyc2N0cFxfc2VuZHYoKX0gcmV0dXJucyB0aGUgbnVtYmVyIG9m
IGJ5dGVzIHNlbnQsIG9yIC0xIGlmIGFuIGVycm9yCi1vY2N1cnJlZC4gIFRoZSB2YXJpYWJsZSBl
cnJubyBpcyB0aGVuIHNldCBhcHByb3ByaWF0ZWx5LgotCi1cc3Vic2VjdGlvbnt1c3JzY3RwXF9y
ZWN2digpfQotVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcwotXGJlZ2lue3ZlcmJhdGltfQotc3Np
emVfdAotdXNyc2N0cF9yZWN2dihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICB2b2lk
ICpkYnVmLAotICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgc3RydWN0IHNv
Y2thZGRyICpmcm9tLAotICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZyb21sZW4sCi0gICAgICAg
ICAgICAgdm9pZCAqaW5mbywKLSAgICAgICAgICAgICBzb2NrbGVuX3QgKmluZm9sZW4sCi0gICAg
ICAgICAgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwKLSAgICAgICAgICAgICBpbnQgKm1zZ19m
bGFncykuCi1cZW5ke3ZlcmJhdGltfQotVGhlIGFyZ3VtZW50cyBhcmUKLVxiZWdpbntpdGVtaXpl
fQotXGl0ZW0gc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9uLgotXGl0ZW0gZGJ1Zjog
QW5hbG9nIHRvIFx0ZXh0aXR7dXNyc2N0cFxfc2VuZHYoKX0gdGhlIGRhdGEgaXMgcmV0dXJuZWQg
aW4gYSBidWZmZXIuCi1caXRlbSBsZW46IExlbmd0aCBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzLgot
XGl0ZW0gZnJvbTogQSBwb2ludGVyIHRvIGFuIGFkZHJlc3MgdG8gYmUgZmlsbGVkIHdpdGggdGhl
IHNlbmRlciBvZiB0aGUKLSAgICAgIHJlY2VpdmVkIG1lc3NhZ2UncyBhZGRyZXNzLgotXGl0ZW0g
ZnJvbWxlbjogQW4gaW4vb3V0IHBhcmFtZXRlciBkZXNjcmliaW5nIHRoZSBmcm9tIGxlbmd0aC4K
LVxpdGVtIGluZm86IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGhvbGQgdGhlIGF0dHJpYnV0
ZXMgb2YgdGhlIHJlY2VpdmVkCi0gICAgICBtZXNzYWdlLiAgVGhlIHN0cnVjdHVyZSB0eXBlIG9m
IGluZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSAgICAgIGluZm90eXBlIHBhcmFtZXRlci4gVGhl
IGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gXHRleHR0dHtpbmZvfSBoYXZlIHRvIGJlIAotICAgICAg
aGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgc3BlY2lmaWVkIGluIFJGQ342NDU4LgotXGl0ZW0g
aW5mb2xlbjogIEFuIGluL291dCBwYXJhbWV0ZXIgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0aGUg
aW5mbyBidWZmZXIuCi1caXRlbSBpbmZvdHlwZTogIE9uIHJldHVybiwgKmluZm90eXBlIGlzIHNl
dCB0byB0aGUgdHlwZSBvZiB0aGUgaW5mbwotICAgICAgYnVmZmVyLiAgVGhlIGN1cnJlbnQgZGVm
aW5lZCB2YWx1ZXMgYXJlIFNDVFBcX1JFQ1ZWXF9OT0lORk8sIAotICAgICAgU0NUUFxfUkVDVlZc
X1JDVklORk8sIFNDVFBcX1JFQ1ZWXF9OWFRJTkZPLCBhbmQKLSAgICAgIFNDVFBcX1JFQ1ZWXF9S
Ti4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpcyBnaXZlbiBpbiBSRkN+NjQ1OC4KLVxpdGVtIGZs
YWdzOiBBIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBhbnkgbWVzc2Fn
ZSBmbGFncwotICAgICAgKGUuZy4sIE1TR1xfTk9USUZJQ0FUSU9OKS4gIE5vdGUgdGhhdCB0aGlz
IGZpZWxkIGlzIGFuIGluL291dAotICAgICAgcGFyYW1ldGVyLiAgT3B0aW9ucyBmb3IgdGhlIHJl
Y2VpdmUgbWF5IGFsc28gYmUgcGFzc2VkIGludG8gdGhlCi0gICAgICB2YWx1ZSAoZS5nLiwgTVNH
XF9FT1IpLiAgUmV0dXJuaW5nIGZyb20gdGhlIGNhbGwsIHRoZSBmbGFncycgdmFsdWUKLSAgICAg
IHdpbGwgZGlmZmVyIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgotXGVuZHtpdGVtaXplfQotCi1c
dGV4dGl0e3VzcnNjdHBcX3JlY3Z2KCl9IHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBzZW50
LCBvciAtMSBpZiBhbiBlcnJvcgotb2NjdXJyZWQuICBUaGUgdmFyaWFibGUgZXJybm8gaXMgdGhl
biBzZXQgYXBwcm9wcmlhdGVseS4KLQotICAKLQotXHNlY3Rpb257U29ja2V0IE9wdGlvbnN9Ci1T
b2NrZXQgb3B0aW9ucyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Yg
c29ja2V0IGNhbGxzLgotVGhlaXIgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGluIFJGQ342NDU4LiBU
aGUgZnVuY3Rpb25zIHRvIGdldCBvciBzZXQgdGhlbSBhcmUKLQotXGJlZ2lue3ZlcmJhdGltfQot
aW50Ci11c3JzY3RwX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAg
ICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wdHZhbCwKLSAgICAgICAgICAgICAgICAgICAgIHNv
Y2tsZW5fdCAqb3B0bGVuKQotXGVuZHt2ZXJiYXRpbX0KLWFuZAotXGJlZ2lue3ZlcmJhdGltfQot
aW50Ci11c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAg
ICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKLSAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdHZhbCwKLSAgICAgICAgICAgICAgICAg
ICAgIHNvY2tsZW5fdCBvcHRsZW4pLgotXGVuZHt2ZXJiYXRpbX0KLQotYW5kIHRoZSBhcmd1bWVu
dHMgYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIHNvOiAgVGhlIHNvY2tldCBvZiB0eXBlIHN0
cnVjdCBzb2NrZXQuCi1caXRlbSBsZXZlbDogIFNldCB0byBJUFBST1RPXF9TQ1RQIGZvciBhbGwg
U0NUUCBvcHRpb25zLgotXGl0ZW0gb3B0bmFtZTogIFRoZSBvcHRpb24gbmFtZSBhcyBzcGVjaWZp
ZWQgaW4gVGFibGV+XHJlZntvcHRpb25zfS4KLVxpdGVtIG9wdHZhbDogVGhlIGJ1ZmZlciB0byBz
dG9yZSB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBhcyBzcGVjaWZpZWQgaW4gdGhlIHNlY29uZCBj
b2x1bW4gb2YgVGFibGV+XHJlZntvcHRpb25zfS4KLVxpdGVtIG9wdGxlbjogIFRoZSBzaXplIG9m
IHRoZSBidWZmZXIgKG9yIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbgotICAgICAgcmV0dXJuZWQg
aW4gY2FzZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2dldHNvY2tvcHR9KS4KLVxlbmR7aXRlbWl6ZX0K
LQotVGhlc2UgZnVuY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2Yg
YW4gZXJyb3IuCi0KLVxiZWdpbntsb25ndGFibGV9e3xsfGx8Y3x9IAotXGhsaW5lCi17XGJmc2Vy
aWVzIE9wdGlvbn0me1xiZnNlcmllcyBEYXRhdHlwZX0gJntcYmZzZXJpZXMgci93fVx0YWJ1bGFy
bmV3bGluZSAKLVxlbmRoZWFkCi1caGxpbmUKLVNDVFBcX1JUT0lORk8mc3RydWN0IHNjdHBcX3J0
b2luZm8mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfQVNTT0NJTkZPJnN0cnVjdCBz
Y3RwXF9hc3NvY3BhcmFtcyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9JTklUTVNH
JnN0cnVjdCBzY3RwXF9pbml0bXNnJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX05P
REVMQVkmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0FVVE9DTE9TRSZpbnQm
ci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUFJJTUFSWVxfQUREUiZzdHJ1Y3Qgc2N0
cFxfc2V0cHJpbSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9BREFQVEFUSU9OXF9M
QVlFUiZzdHJ1Y3Qgc2N0cFxfc2V0YWRhcHRhdGlvbiZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Ci1TQ1RQXF9ESVNBQkxFXF9GUkFHTUVOVFMmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LVNDVFBcX1BFRVJcX0FERFJcX1BBUkFNUyZzdHJ1Y3Qgc2N0cFxfcGFkZHJwYXJhbXMmci93XHRh
YnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfSVxfV0FOVFxfTUFQUEVEXF9WNFxfQUREUiZpbnQm
ci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfTUFYU0VHJnN0cnVjdCBzY3RwXF9hc3Nv
Y1xfdmFsdWUmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfREVMQVlFRFxfU0FDSyZz
dHJ1Y3Qgc2N0cFxfc2Fja1xfaW5mbyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9G
UkFHTUVOVFxfSU5URVJMRUFWRSZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxf
UEFSVElBTFxfREVMSVZFUllcX1BPSU5UJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1T
Q1RQXF9ITUFDXF9JREVOVCZzdHJ1Y3Qgc2N0cFxfaG1hY2FsZ28mci93XHRhYnVsYXJuZXdsaW5l
IFxobGluZQotU0NUUFxfQVVUSFxfQUNUSVZFXF9LRVkmc3RydWN0IHNjdHBcX2F1dGhrZXlpZCZy
L3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9BVVRPXF9BU0NPTkYmaW50JnIvd1x0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX01BWFxfQlVSU1Qmc3RydWN0IHNjdHBcX2Fzc29jXF92
YWx1ZSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9DT05URVhUJnN0cnVjdCBzY3Rw
XF9hc3NvY1xfdmFsdWUmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfRVhQTElDSVRc
X0VPUiZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUkVVU0VcX1BPUlQmaW50
JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0VWRU5UJnN0cnVjdCBzY3RwXF9ldmVu
dCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9SRUNWUkNWSU5GTyZpbnQmci93XHRh
YnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUkVDVk5YVElORk8maW50JnIvd1x0YWJ1bGFybmV3
bGluZSBcaGxpbmUKLVNDVFBcX0RFRkFVTFRcX1NORElORk8mc3RydWN0IHNjdHBcX3NuZGluZm8m
ci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfREVGQVVMVFxfUFJJTkZPJnN0cnVjdCBz
Y3RwXF9kZWZhdWx0XF9wcmluZm8mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUkVN
T1RFXF9VRFBcX0VOQ0FQU1xfUE9SVCZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NU
UFxfRU5BQkxFXF9TVFJFQU1cX1JFU0VUJnN0cnVjdCBzY3RwXF9hc3NvY1xfdmFsdWUmci93XHRh
YnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfU1RBVFVTJnN0cnVjdCBzY3RwXF9zdGF0dXMmclx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfUEVFUlxfQUREUlxfSU5GTyZzdHJ1Y3Qg
c2N0cFxfcGFkZHJpbmZvJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9QRUVSXF9BVVRI
XF9DSFVOS1Mmc3RydWN0IHNjdHBcX2F1dGhjaHVua3Mmclx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LVNDVFBcX0xPQ0FMXF9BVVRIXF9DSFVOS1Mmc3RydWN0IHNjdHBcX2F1dGhjaHVua3Mmclx0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfQVNTT0NcX05VTUJFUiZ1aW50MzJcX3Qmclx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfQVNTT0NcX0lEXF9MSVNUJnN0cnVjdCBz
Y3RwXF9hc3NvY1xfaWRzJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9SRVNFVFxfU1RS
RUFNUyZzdHJ1Y3Qgc2N0cFxfcmVzZXRcX3N0cmVhbXMmd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LVNDVFBcX1JFU0VUXF9BU1NPQyZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3Qmd1x0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKLVNDVFBcX0FERFxfU1RSRUFNUyZzdHJ1Y3Qgc2N0cFxfYWRkXF9zdHJlYW1zJndc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCi1cY2FwdGlvbntTb2NrZXQgT3B0aW9ucyBzdXBwb3J0ZWQg
YnkgdXNyc2N0cH0KLVxsYWJlbHtvcHRpb25zfQotXGVuZHtsb25ndGFibGV9Ci1BbiBvdmVydmll
dyBvZiB0aGUgc3VwcG9ydGVkIG9wdGlvbnMgaXMgZ2l2ZW4gaW4gVGFibGV+XHJlZntvcHRpb25z
fS4gVGhlaXIgdXNlIGlzIGRlc2NyaWJlZCBpbiBSRkN+NjQ1OH5cY2l0ZXtzb2NrZXRBUEl9LCBS
RkN+NjUyNX5cY2l0ZXtzdHJlYW1SZXNldH0sIGFuZH5cY2l0ZXt1ZHBlbmNhcHN9LgotCi1cc2Vj
dGlvbntTeXNjdGwgdmFyaWFibGVzfQotCi1JbiBrZXJuZWwgaW1wbGVtZW50YXRpb25zIGxpa2Ug
Zm9yIGluc3RhbmNlIEZyZWVCU0QsIGl0IGlzIHBvc3NpYmxlIHRvIGNoYW5nZSBwYXJhbWV0ZXJz
Ci1pbiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhlc2UgcGFyYW1ldGVycyBhcmUgY2FsbGVkIHN5
c2N0bCB2YXJpYWJsZXMuCi0KLUluIHVzcnNjdHAgYXBwbGljYXRpb25zIGNhbiBzZXQgb3IgcmV0
cmlldmUgdGhlc2UgdmFyaWFibGVzIHdpdGggdGhlIGZ1bmN0aW9ucwotXGJlZ2lue3ZlcmJhdGlt
fQotdm9pZAotdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyAodWludDMyX3QgdmFsdWUpCi1cZW5ke3Zl
cmJhdGltfQotYW5kCi1cYmVnaW57dmVyYmF0aW19Ci11aW50MzJfdAotdXNyc2N0cF9zeXNjdGxf
Z2V0XyAjIyAodm9pZCkKLVxlbmR7dmVyYmF0aW19Ci1yZXNwZWN0aXZlbHksIHdoZXJlIFwjXCMg
c3RhbmRzIGZvciB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCi0KLUluIHRoZSBmb2xsb3dpbmcg
cGFyYWdyYXBocyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJhbWV0ZXJzIHdpbGwgYmUg
Z2l2ZW4uCi0KLVxzdWJzZWN0aW9ue01hbmlwdWxhdGUgTWVtb3J5fQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3NlbmRzcGFjZSgpfQotVGhlIHNwYWNlIG9mIHRo
ZSBhdmFpbGFibGUgc2VuZCBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2
YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzCi10byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgJDJeezMyfS0x
JCBieXRlcy4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3Jl
Y3ZzcGFjZSgpfQotVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFibGUgcmVjZWl2ZSBidWZmZXIgY2Fu
IGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzCi10byBh
IHZhbHVlIGJldHdlZW4gMCBhbmQgJDJeezMyfS0xJCBieXRlcy4KLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2hhc2h0YmxzaXplKCl9Ci1UaGUgVENCIChUaHJl
YWQgQ29udHJvbCBCbG9jaykgaGFzaCB0YWJsZSBzaXplcywgaS5lLiB0aGUgc2l6ZSBvZiBvbmUg
VENCIGluIHRoZSBoYXNoIHRhYmxlLCBjYW4gYmUgdHVuZWQgYmV0d2VlbiAKLTEgYW5kICQyXnsz
Mn0tMSQgYnl0ZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEsMDI0IGJ5dGVzLiBBIFRDQiBjb250
YWlucyBmb3IgaW5zdGFuY2UgcG9pbnRlcnMgdG8gdGhlIHNvY2tldCwgdGhlCi1lbmRwb2ludCwg
aW5mb3JtYXRpb24gYWJvdXQgdGhlIGFzc29jaWF0aW9uIGFuZCBzb21lIHN0YXRpc3RpYyBkYXRh
LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcGNidGJsc2l6
ZSgpfQotVGhlIFBDQiAoUHJvdG9jb2wgQ29udHJvbCBCbG9jaykgaGFzaCB0YWJsZSBzaXplcywg
aS5lLiB0aGUgc2l6ZSBvZiBvbmUgUENCIGluIHRoZSBoYXNoIHRhYmxlLCBjYW4gYmUgdHVuZWQg
YmV0d2VlbiAKLTEgYW5kICQyXnszMn0tMSQgYnl0ZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1
NiBieXRlcy4gVGhlIFBDQiBjb250YWlucyBhbGwgdmFyaWFibGVzIHRoYXQgY2hhcmFjdGVyaXpl
IGFuIGVuZHBvaW50LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0
cFxfc3lzdGVtXF9mcmVlXF9yZXNjXF9saW1pdCgpfQotVGhpcyBwYXJhbWV0ZXJzIHR1bmVzIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0uIEl0IGNh
biBiZSBzZXQgYmV0d2VlbiAKLTAgYW5kICQyXnszMn0tMSQuIFRoZSBkZWZhdWx0IHZhbHVlIGlz
IDEwMDAuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hc29j
XF9mcmVlXF9yZXNjXF9saW1pdCgpfQotVGhpcyBwYXJhbWV0ZXJzIHR1bmVzIHRoZSBtYXhpbXVt
IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uLiBJdCBjYW4gYmUg
c2V0IGJldHdlZW4gCi0wIGFuZCAkMl57MzJ9LTEkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4K
LQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21idWZcX3RocmVz
aG9sZFxfY291bnQoKX0KLURhdGEgaXMgc3RvcmVkIGluIG1idWZzLiBTZXZlcmFsIG1idWZzIGNh
biBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMg
aW4gYSBjaGFpbgotY2FuIGJlIHNldCB3aXRoIHRoaXMgcGFyYW1ldGVyLCBiZWZvcmUgYW4gbWJ1
ZiBjbHVzZXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMgNS4KLQotXHN1YnN1YnNlY3Rpb257dXNy
c2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2FkZFxfbW9yZVxfdGhyZXNob2xkKCl9Ci1UQkQKLVRo
aXMgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgdGhlIHRocmVzaG9sZCBiZWxvdyB3aGljaCBtb3JlIHNw
YWNlIHNob3VsZCBiZSBhZGRlZCB0byBhIHNvY2tldCBzZW5kIGJ1ZmZlci4KLVRoZSBkZWZhdWx0
IHZhbHVlIGlzIDE0NTIgYnl0ZXMuCi0KLQotXHN1YnNlY3Rpb257Q29uZmlndXJlIFJUT30KLVRo
ZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBpLmUuIHRoZSB0aW1lIHRoYXQgY29udHJv
bHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzLCBoYXMKLXNldmVyYWwgcGFyYW1ldGVy
cywgdGhhdCBjYW4gYmUgY2hhbmdlZCwgZm9yIGV4YW1wbGUgdG8gc2hvcnRlbiB0aGUgdGltZSwg
YmVmb3JlIGEgbWVzc2FnZSBpcwotcmV0cmFuc21pdHRlZC4gVGhlIHJhbmdlIG9mIHRoZXNlIHBh
cmFtZXRlcnMgaXMgYmV0d2VlbiAwIGFuZCAkMl57MzJ9LTEkfm1zLiAKLQotXHN1YnN1YnNlY3Rp
b257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0b1xfbWF4XF9kZWZhdWx0KCl9Ci1UaGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBt
cyBpcyA2MCwwMDAgKDYwfnNlY3MpLiAKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX3J0b1xfbWluXF9kZWZhdWx0KCl9Ci1UaGUgZGVmYXVsdCB2YWx1ZSBmb3Ig
dGhlIG1pbmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyBpcyAxLDAwMCAoMX5zZWMp
LiAKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0b1xfaW5p
dGlhbFxfZGVmYXVsdCgpfQotVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBpbml0aWFsIHJldHJh
bnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMgaXMgMywwMDAgKDN+c2VjKS4gVGhpcyB2YWx1ZSBpcyBv
bmx5Ci1uZWVkZWQgYmVmb3JlIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBvZiBhIHJvdW5kIHRyaXAg
dGltZSB0b29rIHBsYWNlLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxf
c2N0cFxfaW5pdFxfcnRvXF9tYXhcX2RlZmF1bHQoKX0KLVRoZSBkZWZhdWx0IHZhbHVlIGZvciB0
aGUgbWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGZvciBhbiBJTklUIGNodW5rIGluIG1z
IGlzIDYwLDAwMCAoNjB+c2VjcykuIAotCi0KLVxzdWJzZWN0aW9ue1NldCBUaW1lcnN9Ci1cc3Vi
c3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdmFsaWRcX2Nvb2tpZVxfbGlm
ZVxfZGVmYXVsdCgpfQotQSBjb29raWUgaGFzIGEgc3BlY2lmaWVkIGxpZmUgdGltZS4gSWYgaXQg
ZXhwaXJlcyB0aGUgY29va2llIGlzIG5vdCB2YWxpZCBhbnkgbW9yZSBhbmQgYW4gQUJPUlQgaXMg
c2VudC4KLVRoZSBkZWZhdWx0IHZhbHVlIGluIG1zIGlzIDYwLDAwMCAoNjB+c2VjcykuCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9oZWFydGJlYXRcX2ludGVy
dmFsXF9kZWZhdWx0KCl9Ci1TZXQgdGhlIGRlZmF1bHQgdGltZSBiZXR3ZWVuIHR3byBoZWFydGJl
YXRzLiBUaGUgZGVmYXVsdCBpcyAzMCwwMDB+bXMuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X3N5c2N0bFxfc2V0XF9zY3RwXF9zaHV0ZG93blxfZ3VhcmRcX3RpbWVcX2RlZmF1bHQoKX0KLUlm
IGEgU0hVVERPV04gaXMgbm90IGFuc3dlcmVkIHdpdGggYSBTSFVURE9XTi1BQ0sgd2hpbGUgdGhl
IHNodXRkb3duIGd1YXJkIHRpbWVyIGlzIHN0aWxsCi1ydW5uaW5nLCB0aGUgYXNzb2NpYXRpb24g
d2lsbCBiZSBhYm9ydGVkIGFmdGVyIHRoZSBkZWZhdWx0IG9mIDE4MH5zZWNzLgotCi1cc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcG10dVxfcmFpc2VcX3RpbWVcX2Rl
ZmF1bHQoKX0KLVRCRAotVG8gc2V0IHRoZSBzaXplIG9mIHRoZSBwYWNrZXRzIHRvIHRoZSBoaWdo
ZXN0IHZhbHVlIHBvc3NpYmxlLCB0aGUgbWF4aW11bSB0cmFuc2ZlciB1bml0IChNVFUpCi1vZiB0
aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25vd24uIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2
YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3ZlcnkKLWlzIDYwMH5zZWNzLgotCi1cc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc2VjcmV0XF9saWZldGltZVxfZGVmYXVs
dCgpfQotVEJECi1UaGUgZGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgb2YgYSBzZXJ2ZXIgaXMgMzYw
MH5zZWNzLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdnRh
Z1xfdGltZVxfd2FpdCgpfQotVEJECi1WdGFnIHRpbWUgd2FpdCB0aW1lLCAwIGRpc2FibGVzIGl0
LiBEZWZhdWx0OiA2MH5zZWNzCi0KLQotXHN1YnNlY3Rpb257U2V0IEZhaWx1cmUgTGltaXRzfQot
VHJhbnNtaXNzaW9ucyBhbmQgcmV0cmFuc21pc3Npb25zIG9mIG1lc3NhZ2VzIG1pZ2h0IGZhaWwu
IFRvIHByb3RlY3QgdGhlIHN5c3RlbSBhZ2FpbnN0IHRvbyBtYW55Ci1yZXRyYW5zbWlzc2lvbnMs
IGxpbWl0cyBoYXZlIHRvIGJlIGRlZmluZWQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9pbml0XF9ydHhcX21heFxfZGVmYXVsdCgpfQotVGhlIGRlZmF1bHQg
bWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIG9mIGFuIElOSVQgY2h1bmtzIGlzIDgs
IGJlZm9yZSBhbiBBQk9SVCBpcyBzZW50LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNj
dGxcX3NldFxfc2N0cFxfYXNzb2NcX3J0eFxfbWF4XF9kZWZhdWx0KCl9Ci1UaGlzIHBhcmFtZXRl
ciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4KLVRoZSBkZWZhdWx0IHZhdWxlIGlzIDEwLgot
Ci1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcGF0aFxfcnR4XF9t
YXhcX2RlZmF1bHQoKX0KLVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IHBhdGggZmFpbHVyZXMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBpcyBhYm9ydGVkLgotVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgNS4gTm90aWNlIHRoYXQgdGhlIG51bWJlciBvZiBwYXRocyBtdWx0aXBs
aWVkIGJ5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIAotZXF1YWwgdG8gc2N0cFxfYXNzb2NcX3J0eFxf
bWF4XF9kZWZhdWx0LiBUaGF0IG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBp
cyBnb29kIGZvciB0d28gCi1wYXRocy4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX21heFxfcmV0cmFuXF9jaHVuaygpfQotVGhlIHBhcmFtZXRlciBjb25maWd1
cmVzIGhvdyBtYW55IHRpbWVzIGFuIHVubHVja3kgY2h1bmsgY2FuIGJlIHJldHJhbnNtaXR0ZWQg
YmVmb3JlIHRoZSAKLWFzc29jaWF0aW9uIGFib3J0cy4gVGhlIGRlZmF1bHQgaXMgc2V0IHRvIDMw
LgotCQkJCQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3BhdGhc
X3BmXF90aHJlc2hvbGQoKX0KLVRCRAotRGVmYXVsdCBwb3RlbnRpYWxseSBmYWlsZWQgdGhyZXNo
b2xkLiBEZWZhdWx0OiA2NTUzNQkJCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9hYm9ydFxfaWZcX29uZVxfMlxfb25lXF9oaXRzXF9saW1pdCgpfQotVEJECi1X
aGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBhYm9ydC4gRGVmYXVsdDogMAotCi0JCQotXHN1YnNl
Y3Rpb257Q29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLc30KLVxzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zYWNrXF9mcmVxXF9kZWZhdWx0KCl9Ci1UaGUgU0FDSyBm
cmVxdWVuY3kgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgYXdhaXRlZCwg
YmVmb3JlIGEgU0FDSyBpcyBzZW50LiAKLVRoZSBkZWZhdWx0IHZhbHVlIGlzIDIuCi0KLVxzdWJz
dWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWxheWVkXF9zYWNrXF90aW1l
XF9kZWZhdWx0KCl9Ci1BcyBhIFNBQ0sgKFNlbGVjdGl2ZSBBY2tub3dsZWdtZW50KSBpcyBzZW50
IGFmdGVyIGV2ZXJ5IG90aGVyIHBhY2tldCwgYSB0aW1lciBpcyBzZXQgdG8gc2VuZCBhCi1TQUNL
IGluIGNhc2UgYW5vdGhlciBwYWNrZXQgZG9lcyBub3QgYXJyaXZlIGluIGR1ZSB0aW1lLiBUaGUg
ZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0aW1lciBpcwotMjAwfm1zLgotCi1cc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc3RyaWN0XF9zYWNrcygpfQotVEJECi1UaGlz
IGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUgY29oZXJlbmNlIG9mIFNB
Q0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMKLTEgKG9uKS4KLQotXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX25yXF9zYWNrXF9vblxfb2ZmKCl9Ci1J
ZiBhIHNsb3cgaG9zdHMgcmVjZWl2ZXMgZGF0YSBvbiBhIGxvc3N5IGxpbmsgaXQgaXMgcG9zc2li
bGUgdGhhdCBpdHMgcmVjZWl2ZXIgd2luZG93IGlzIGZ1bGwgYW5kIG5ldyAKLWRhdGEgY2FuIG9u
bHkgYmUgYWNjZXB0ZWQgaWYgb25lIGNodW5rIHdpdGggYSBoaWdoZXIgVFNOIChUcmFuc21pc3Np
b24gU2VxdWVuY2UgTnVtYmVyKSB0aGF0IGhhcyAKLXByZXZpb3VzbHkgYmVlbiBhY2tub3dsZWRn
ZWQgaXMgZHJvcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGUgc2VuZGVyIGhhcyB0byBzdG9yZSBk
YXRhLCBldmVuIGlmCi10aGV5IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgaW4gY2FzZSB0aGV5IGhh
dmUgdG8gYmUgcmV0cmFuc21pdHRlZC4gSWYgdGhpcyBiZWhhdmlvciBpcyBub3QgbmVjZXNzYXJ5
LAotbm9uLXJlbmVnYWJsZSBTQUNLcyBjYW4gYmUgdHVybmVkIG9uLiAKLUJ5IGRlZmF1bHQgdGhl
IHVzZSBvZiBub24tcmVuZWdhYmxlIFNBQ0tzIGlzIHR1cm5lZCBvZmYuCi0KLVxzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9lbmFibGVcX3NhY2tcX2ltbWVkaWF0ZWx5
KCl9Ci1JbiBzb21lIGNhc2VzIGl0IGlzIG5vdCBkZXNpcmFibGUgdG8gd2FpdCBmb3IgdGhlIFNB
Q0sgdGltZXIgdG8gZXhwaXJlIGJlZm9yZSBhIFNBQ0sgaXMgc2VudC4gSW4gdGhlc2UKLWNhc2Vz
IGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZflxjaXRle3NhY2staW1tfSBjYW4gYmUgc2V0
IHRvIHByb3Zva2UgdGhlIGluc3RhbnQgc2VuZGluZyBvZiBhIFNBQ0suIAotVGhlIGRlZmF1bHQg
aXMgdG8gdHVybiBpdCBvZmYuIAotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfTDJcX2FiY1xfdmFyaWFibGUoKX0KLVRCRAotU0NUUCBBQkMgbWF4IGluY3JlYXNl
IHBlciBTQUNLIChMKS4gRGVmYXVsdDogMQotCi1cc3Vic2VjdGlvbntDaGFuZ2UgTWF4IEJ1cnN0
fQotTWF4IGJ1cnN0IGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBt
YXkgYmUgc2VudCBpbiBvbmUgZmxpZ2h0LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNj
dGxcX3NldFxfc2N0cFxfbWF4XF9idXJzdFxfZGVmYXVsdCgpfQotVGhlIGRlZmF1bHQgdmFsdWUg
Zm9yIG1heCBidXJzdCBpcyAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSBudW1iZXIgb2YgcGFja2V0
cyBzZW50IGFzIGEgZmxpZ2h0Ci1pcyBub3QgbGltaXRlZCBieSB0aGlzIHBhcmFtZXRlciwgYnV0
IG1heSBiZSBieSBhbm90aGVyIG9uZSwgc2VlIHRoZSBuZXh0IHBhcmFncmFwaC4KLQotXHN1YnN1
YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3VzZVxfY3duZFxfYmFzZWRcX21h
eGJ1cnN0KCl9Ci1UaGUgdXNlIG9mIG1heCBidXJzdCBpcyBiYXNlZCBvbiB0aGUgc2l6ZSBvZiB0
aGUgY29uZ2VzdGlvbiB3aW5kb3cgKGN3bmQpLiAKLVRoaXMgcGFyYW1ldGVyIGlzIHNldCBieSBk
ZWZhdWx0LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfaGJc
X21heGJ1cnN0KCl9Ci1IZWFydGJlYXRzIGFyZSBtb3N0bHkgdXNlZCB0byB2ZXJpZnkgYSBwYXRo
LiBUaGVpciBudW1iZXIgY2FuIGJlIGxpbWl0ZWQuIFRoZSBkZWZhdWx0IGlzIDQuCi0KLVxzdWJz
dWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9mclxfbWF4XF9idXJzdFxfZGVm
YXVsdCgpfQotSW4gdGhlIHN0YXRlIG9mIGZhc3QgcmV0cmFuc21pc3Npb24gdGhlIG51bWJlciBv
ZiBwYWNrZXQgYnVyc3RzIGNhbiBiZSBsaW1pdGVkLiBUaGUgZGVmYXVsdAotdmFsdWUgaXMgNC4K
LQotCi1cc3Vic2VjdGlvbntIYW5kbGUgQ2h1bmtzfQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX3BlZXJcX2NodW5rXF9vaCgpfQotSW4gb3JkZXIgdG8ga2VlcCB0
cmFjayBvZiB0aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2luZG93LCB0aGUgc2VuZGVy
IGNhbGN1bGF0ZXMgdGhlIHdpbmRvdyBieQotc3VidHJhY3RpbmcgdGhlIGFtb3VudCBvZiBkYXRh
IHNlbnQuIFlldCwgc29tZSBPU3MgcmVkdWNlIHRoZSByZWNlaXZlciB3aW5kb3cgYnkgdGhlIHJl
YWwgc3BhY2UgbmVlZGVkCi10byBzdG9yZSB0aGUgZGF0YS4gVGhpcyBwYXJhbWV0ZXIgc2V0cyB0
aGUgYWRkaXRpb25hbCBhbW91bnQgdG8gZGViaXQgdGhlIHBlZXIncyByZWNlaXZlciB3aW5kb3cg
cGVyCi1jaHVuayBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYsIHdoaWNoIGlzIHRoZSB2
YWx1ZSBuZWVkZWQgYnkgRnJlZUJTRC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX21heFxfY2h1bmtzXF9vblxfcXVldWUoKX0KLVRoaXMgcGFyYW1ldGVyIHNl
dHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNodW5rcyB0aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFz
c29jaWF0aW9uLiBUaGUgZGVmYXVsdCAKLXZhbHVlIGlzIDUxMi4KLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21pblxfc3BsaXRcX3BvaW50KCl9Ci1UQkQKLVRo
ZSBtaW5pbXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayBpcyAyOTA0IGJ5dGVzIGJ5IGRl
ZmF1bHQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9jaHVu
a3NjYWxlKCl9Ci1UQkQKLVRoaXMgcGFyYW1ldGVyIGNhbiBiZSB0dW5lZCBmb3Igc2NhbGluZyBv
ZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNzYWdlcy4gVGhlIGRlZmF1bHQgaXMxMC4JCQotCQkJ
CQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21pblxfcmVzaWR1
YWwoKX0KLVRCRAotVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJlcyB0aGUgbWluaW11bSBzaXplIG9m
IHRoZSByZXNpZHVhbCBkYXRhIGNodW5rIGluIHRoZSBzZWNvbmQKLXBhcnQgb2YgdGhlIHNwbGl0
LiBUaGUgZGVmYXVsdCBpcyAxNDUyLgotCi0KLVxzdWJzZWN0aW9ue0NhbGN1bGF0ZSBSVFR9Ci1U
aGUgY2FsY3VsYXRpb24gb2YgdGhlIHJvdW5kIHRyaXAgdGltZSAoUlRUKSBkZXBlbmRzIG9uIHNl
dmVyYWwgcGFyYW1ldGVycy4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX3J0dHZhclxfYncoKX0KLVRCRAotU2hpZnQgYW1vdW50IGZvciBidyBzbW9vdGhpbmcg
b24gcnR0IGNhbGMuIERlZmF1bHQ6IDQKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX3J0dHZhclxfcnR0KCl9Ci1UQkQKLVNoaWZ0IGFtb3VudCBmb3IgcnR0IHNt
b290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVsdDogNQotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zeXNjdGxcX3NldFxfc2N0cFxfcnR0dmFyXF9lcXJldCgpfQotVEJECi1XaGF0IHRvIHJldHVy
biB3aGVuIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZC4gRGVmYXVsdDogMAotCi0KLVxzdWJzZWN0
aW9ue0luZmx1ZW5jZSB0aGUgQ29uZ2VzdGlvbiBDb250cm9sfQotVGhlIGNvbmdlc3Rpb24gY29u
dHJvbCBzaG91bGQgcHJvdGVjdCB0aGUgbmV0d29yayBhZ2FpbnN0IGZhc3Qgc2VuZGVycy4gCi0K
LVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9lY25cX2VuYWJsZX0K
LUV4cGxpY2l0IGNvbmdlc3Rpb24gbm90aWZpY2F0aW9ucyBhcmUgdHVybmVkIG9uIGJ5IGRlZmF1
bHQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWZhdWx0
XF9jY1xfbW9kdWxlKCl9Ci1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBkZWZhdWx0IGFsZ29yaXRo
bSBmb3IgdGhlIGNvbmdlc3Rpb24gY29udHJvbC4KLURlZmF1bHQgaXMgMCwgaS5lLiB0aGUgb25l
IHNwZWNpZmllZCBpbiBSRkN+NDk2MC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX2luaXRpYWxcX2N3bmQoKX0KLVNldCB0aGUgaW5pdGlhbCBjb25nZXN0aW9u
IHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVmYXVsdCBpcyAzLgotCi1cc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdXNlXF9kY2NjXF9lY24oKX0KLVRCRAotRW5hYmxlIGZv
ciBSVENDIENDIGRhdGFjZW50ZXIgRUNOLiBEZWZhdWx0OiAxCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zdGVhZHlcX3N0ZXAoKX0KLVRCRAotSG93IG1hbnkg
dGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZC4gRGVmYXVsdDogMjAK
LQotCi1cc3Vic2VjdGlvbntDb25maWd1cmUgQVVUSCBhbmQgQURELUlQfQotQW4gaW1wb3J0YW50
IGV4dGVuc2lvbiBvZiBTQ1RQIGlzIHRoZSBkeW5hbWljIGFkZHJlc3MgcmVjb25maWd1cmF0aW9u
flxjaXRle2FkZGlwfSwgYWxzbyBrbm93biBhcwotQURELUlQLCB3aGljaCBhbGxvd3MgdGhlIGNo
YW5naW5nIG9mIGFkZHJlc3NlcyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9mIGFuIGFzc29jaWF0aW9u
LgotRm9yIHRoaXMgZmVhdHVyZSB0aGUgQVVUSCBleHRlbnNpb25+XGNpdGV7YXV0aH0gaXMgbmVj
ZXNzYXJ5LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXV0
b1xfYXNjb25mKCl9Ci1JZiBTQ1RQIEF1dG8tQVNDT05GIGlzIGVuYWJsZWQsIHRoZSBwZWVyIGlz
IGluZm9ybWVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIG5ldyBhZGRyZXNzCi1pcyBhZGRlZCBvciBy
ZW1vdmVkLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0LgotCi1cc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbXVsdGlwbGVcX2FzY29uZnMoKX0KLUJ5
IGRlZmF1bHQgdGhlIHNlbmRpbmcgb2YgbXVsdGlwbGUgQVNDT05GcyBpcyBkaXNhYmxlZC4KLQot
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2F1dGhcX2Rpc2FibGUo
KX0KLVRoZSB1c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFsbHkgdHVybmVkIG9uLCBjYW4gYmUg
ZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxLgotCi1cc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXNjb25mXF9hdXRoXF9ub2NoaygpfQotSXQg
aXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSByZXF1aXJlbWVudCB0byB1c2UgQVVUSCBp
biBjb25qdW5jdGlvbiB3aXRoIEFERC1JUCBieSBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyCi10byAx
LgotCi0KLVxzdWJzZWN0aW9ue0NvbmN1cnJlbnQgTXVsdGlwYXRoIFRyYW5zZmVyIChDTVQpfQot
QSBwcm9taW5lbnQgZmVhdHVyZSBvZiBTQ1RQIGlzIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugc2V2
ZXJhbCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGFzc29jaWF0aW9uLgotT25lIGlzIHRoZSBwcmlt
YXJ5IHBhdGgsIGFuZCB0aGUgb3RoZXJzIGFyZSBuZWVkZWQgaW4gY2FzZSBvZiBhIHBhdGggZmFp
bHVyZS4gVXNpbmcgQ01UIHRoZSBkYXRhIGlzIHNlbnQgCi1vbiBzZXZlcmFsIHBhdGhzIHRvIGVu
aGFuY2UgdGhlIHRocm91Z2hwdXQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9jbXRcX29uXF9vZmYoKX0KLVRvIHR1cm4gQ01UIG9uLCB0aGlzIHBhcmFtZXRl
ciBoYXMgdG8gYmUgc2V0IHRvIDEuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9jbXRcX3VzZVxfZGFjKCl9Ci1UbyB1c2UgZGVsYXllZCBhY2tub3dsZWRnbWVu
dHMgd2l0aCBDTVQgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0byAxLgotCi1cc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYnVmZmVyXF9zcGxpdHRpbmcoKX0K
LUZvciBDTVQgaXQgbWFrZXMgc2Vuc2UgdG8gc3BsaXQgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVm
ZmVyIHRvIGhhdmUgc2hhcmVzIGZvciBlYWNoIHBhdGguIAotQnkgZGVmYXVsdCBidWZmZXIgc3Bs
aXR0aW5nIGlzIHR1cm5lZCBvZmYuCi0KLQotXHN1YnNlY3Rpb257TmV0d29yayBBZGRyZXNzIFRy
YW5zbGF0aW9uIChOQVQpfQotVG8gYmUgYWJsZSB0byBwYXNzIE5BVCBib3hlcywgdGhlIGJveGVz
IGhhdmUgdG8gaGFuZGxlIFNDVFAgcGFja2V0cyBpbiBhIHNwZWNpZmljIHdheS4KLQotXHN1YnN1
YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX25hdFxfZnJpZW5kbHkoKX0KLVND
VFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVmYXVsdDoxCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9pbml0c1xfaW5jbHVkZVxfbmF0XF9mcmllbmRseSgp
fQotRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklU
cy4gRGVmYXVsdDogMAotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0
cFxfdWRwXF90dW5uZWxpbmdcX3BvcnQoKX0KLVNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBv
cnQuIERlZmF1bHQ6IDk4OTkKLQotXHN1YnNlY3Rpb257U0NUUCBNb2JpbGl0eX0KLVxzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tb2JpbGl0eVxfYmFzZSgpfQotVEJE
Ci1FbmFibGUgU0NUUCBiYXNlIG1vYmlsaXR5LiBEZWZhdWx0OiAwCi0KLQotXHN1YnN1YnNlY3Rp
b257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21vYmlsaXR5XF9mYXN0aGFuZG9mZigpfQot
VEJECi1FbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYuIGRlZmF1bHQ6IDAKLQotCi1cc3Vic2VjdGlv
bntNaXNjZWxsYW5lb3VzfQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX25vXF9jc3VtXF9vblxfbG9vcGJhY2soKX0KLUNhbGN1bGF0aW5nIHRoZSBjaGVja3N1bSBm
b3IgcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4KLVRv
IHR1cm4gaXQgb24sIHNldCB0aGlzIHBhcmFtZXRlciB0byAwLgotCi1cc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbnJcX291dGdvaW5nXF9zdHJlYW1zXF9kZWZhdWx0
KCl9Ci1UaGUgcGVlciBpcyBub3RpZmllZCBhYm91dCB0aGUgbnVtYmVyIG9mIG91dGdvaW5nIHN0
cmVhbXMgaW4gdGhlIElOSVQgb3IgSU5JVC1BQ0sgY2h1bmsuCi1UaGUgZGVmYXVsdCBpcyAxMC4g
Ci0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kb1xfZHJhaW4o
KX0KLURldGVybWluZXMgd2hldGhlciBTQ1RQIHNob3VsZCByZXNwb25kIHRvIHRoZSBkcmFpbiBj
YWxscy4gRGVmYXVsdDogMQkJCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9zdHJpY3RcX2RhdGFcX29yZGVyKCl9Ci1UQkQKLUVuZm9yY2Ugc3RyaWN0IGRhdGEg
b3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRlIGRhdGEuIERlZmF1bHQ6IDAKLQotXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RlZmF1bHRcX3NzXF9tb2R1
bGUoKX0KLVNldCB0aGUgZGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUuIEltcGxlbWVu
dGVkIG1vZHVsZXMgYXJlOgotU0NUUFxfU1NcX0RFRkFVTFQsIFNDVFBcX1NTXF9ST1VORFxfUk9C
SU4sIFNDVFBcX1NTXF9ST1VORFxfUk9CSU5cX1BBQ0tFVCwKLVNDVFBcX1NTXF9QUklPUklUWSwg
U0NUUFxfU1NcX0ZBSVJcX0JBTkRXSVRILCBhbmQgU0NUUFxfU1NcX0ZJUlNUXF9DT01FLgotCi1c
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZGVmYXVsdFxfZnJhZ1xf
aW50ZXJsZWF2ZSgpfQotVEJECi1EZWZhdWx0IGZyYWdtZW50IGludGVybGVhdmUgbGV2ZWwuIERl
ZmF1bHQ6IDEKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Js
YWNraG9sZSgpfQotVEJECi1FbmFibGUgU0NUUCBibGFja2hvbGluZy4gRGVmYXVsdDogMAotCi1c
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbG9nZ2luZ1xfbGV2ZWwo
KX0KLVNldCB0aGUgbG9nZ2luZyBsZXZlbC4gVGhlIGRlZmF1bHQgaXMgMC4KLQotCi1cc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZGVidWdcX29uKCl9Ci1UdXJuIGRl
YnVnIG91dHB1dCBvbiBvciBvZmYuIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFRvIG9idGFp
biBkZWJ1ZyBvdXRwdXQsCi1TQ1RQXF9ERUJVRyBoYXMgdG8gYmUgc2V0IGFzIGEgY29tcGlsZSBm
bGFnLgotCi0JCQkJCQkKLSVUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBhcmUgc3VwcG9ydGVkOgot
JVxiZWdpbntsb25ndGFibGV9e3xsfGx8Y3x9IAotJVxobGluZQotJXtcYmZzZXJpZXMgUGFyYW1l
dGVyfSZ7XGJmc2VyaWVzIE1lYW5pbmd9JntcYmZzZXJpZXMgRGVmYXVsdCBWYWx1ZX0gXHRhYnVs
YXJuZXdsaW5lIAotJVxlbmRoZWFkCi0lXGhsaW5lCi0lc2N0cFxfc2VuZHNwYWNlJlNlbmQgYnVm
ZmVyIHNwYWNlJjE4NjQxMzVcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfcmVjdnNwYWNl
JlJlY2VpdmUgYnVmZmVyIHNwYWNlJjE4NjQxMzUgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNj
dHBcX2hhc2h0YmxzaXplJlR1bmFibGUgZm9yIFRDQiBoYXNoIHRhYmxlIHNpemVzJjEwMjQgXHRh
YnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3BjYnRibHNpemUmVHVuYWJsZSBmb3IgUENCIGhh
c2ggdGFibGUgc2l6ZXMmMjU2IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zeXN0ZW1c
X2ZyZWVcX3Jlc2NcX2xpbWl0JkNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbSYxMDAwIFx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9hc29jXF9mcmVlXF9yZXNjXF9saW1pdCZDYXNo
ZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uJjEwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9ydG9cX21heFxfZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZvciBSVE9cX21heCY2MDAw
MH5tcyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfcnRvXF9taW5cX2RlZmF1bHQmRGVm
YXVsdCB2YWx1ZSBmb3IgUlRPXF9taW4mMTAwMH5tcyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0l
c2N0cFxfcnRvXF9pbml0aWFsXF9kZWZhdWx0JkRlZmF1bHQgdmFsdWUgZm9yIFJUT1xfaW5pdGlh
bCYzMDAwfm1zIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9pbml0XF9ydG9cX21heFxf
ZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZvciB0aGUgbWF4aW11bSBSVE8mNjAwMDB+bXMgXHRhYnVs
YXJuZXdsaW5lCi0gJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJmZvciBzZW5kaW5nIGFuIElOSVQmIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3Rw
XF92YWxpZFxfY29va2llXF9saWZlXF9kZWZhdWx0JlZhbGlkIGNvb2tpZSBsaWZlIHRpbWUmNjAw
MDB+bXMgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2luaXRcX3J0eFxfbWF4XF9kZWZh
dWx0Jk1heGltdW0gbnVtYmVyIG9mIElOSVQgcmV0cmFuc21pc3Npb25zJjggXHRhYnVsYXJuZXds
aW5lIFxobGluZQotJXNjdHBcX2Fzc29jXF9ydHhcX21heFxfZGVmYXVsdCZNYXhpbXVtIG51bWJl
ciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zJjEwXHRhYnVsYXJuZXdsaW5lCi0lCQkJCQkJJiBi
ZWZvcmUgdGhlIGFzc29jaWF0aW9uIGlzIGFib3J0ZWQmXHRhYnVsYXJuZXdsaW5lIFxobGluZQot
JXNjdHBcX3BhdGhcX3J0eFxfbWF4XF9kZWZhdWx0Jk1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCBy
ZXRyYW5zbWlzc2lvbnMmNVx0YWJ1bGFybmV3bGluZQotJQkJCQkJCSZiZWZvcmUgYSBwYXRoIGZh
aWxzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9lY25cX2VuYWJsZSZFbmFibGluZyBl
eHBsaWNpdCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMmMVx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9zdHJpY3RcX3NhY2tzJkNvbnRyb2wgdGhlIGNvaGVyZW5jZSBvZiBTQUNLcyYxIFx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9kZWxheWVkXF9zYWNrXF90aW1lXF9kZWZhdWx0
JkRlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVyJjIwMH5tc1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9zYWNrXF9mcmVxXF9kZWZhdWx0JkRlZmF1bHQgU0FDSyBmcmVxdWVuY3kmMiBcdGFi
dWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfbnJcX3NhY2tcX29uXF9vZmYmVHVybiBub24tcmVu
ZWdhYmxlIFNBQ0tzIG9uIG9yIG9mZiYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9l
bmFibGVcX3NhY2tcX2ltbWVkaWF0ZWx5JkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLSYwIFx0
YWJ1bGFybmV3bGluZSAJCQkJCQkmSU1NRURJQVRFTFkgYml0LiZcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCi0lc2N0cFxfbm9cX2NzdW1cX29uXF9sb29wYmFjayZFbmFibGUgdGhlIGNvbXBpbGF0aW9u
IG9mIHRoZSBjaGVja3N1bSBvbiYxIFx0YWJ1bGFybmV3bGluZQotJQkJCQkJCSZwYWNrZXRzIHNl
bnQgb24gbG9vcGJhY2smXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3BlZXJcX2NodW5r
XF9vaCZBbW91bnQgdG8gZGViaXQgcGVlcnMgcnduZCBwZXIgY2h1bmsgc2VudCYyNTYgXHRhYnVs
YXJuZXdsaW5lIFxobGluZQotJXNjdHBcX21heFxfYnVyc3RcX2RlZmF1bHQmRGVmYXVsdCBtYXgg
YnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzJjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBc
X3VzZVxfY3duZFxfYmFzZWRcX21heGJ1cnN0JlVzZSBtYXggYnVyc3QgYmFzZWQgb24gdGhlIHNp
emUgb2YgJjFcdGFidWxhcm5ld2xpbmUJCQkJJQkJCQkJCQkmdGhlIGNvbmdlc3Rpb24gd2luZG93
Jlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9oYlxfbWF4YnVyc3QmQ29uZmlybWF0aW9u
IEhlYXJ0YmVhdCBtYXggYnVyc3QmNCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfbWF4
XF9jaHVua3NcX29uXF9xdWV1ZSZEZWZhdWx0IG1heCBjaHVua3Mgb24gcXVldWUgcGVyIGFzb2Mm
NTEyIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9taW5cX3NwbGl0XF9wb2ludCZNaW5p
bXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayYyOTA0IFx0YWJ1bGFybmV3bGluZSBcaGxp
bmUKLSVzY3RwXF9jaHVua3NjYWxlJlR1bmFibGUgZm9yIFNjYWxpbmcgb2YgbnVtYmVyIG9mIGNo
dW5rcyBhbmQmMTBcdGFidWxhcm5ld2xpbmUgCi0lCQkJCQkJJm1lc3NhZ2VzJlx0YWJ1bGFybmV3
bGluZSBcaGxpbmUKLSVzY3RwXF9tYnVmXF90aHJlc2hvbGRcX2NvdW50Jk1heGltdW0gbnVtYmVy
IG9mIHNtYWxsIG1idWZzIGluIGEgY2hhaW4mNVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3Rw
XF9oZWFydGJlYXRcX2ludGVydmFsXF9kZWZhdWx0JkRlYWZ1bHQgdGltZSBiZXR3ZWVuIHR3byBI
ZWFydGJlYXRzJjMwMDAwfm1zXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3BtdHVcX3Jh
aXNlXF90aW1lXF9kZWZhdWx0JkRlZmF1bHQgUE1UVSByYWlzZSB0aW1lciY2MDB+c2Vjc1x0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zaHV0ZG93blxfZ3VhcmRcX3RpbWVcX2RlZmF1bHQm
RGVmYXVsdCBzaHV0ZG93biBndWFyZCB0aW1lciYxODB+c2Vjc1x0YWJ1bGFybmV3bGluZSBcaGxp
bmUKLSVzY3RwXF9zZWNyZXRcX2xpZmV0aW1lXF9kZWZhdWx0JkRlZmF1bHQgc2VjcmV0IGxpZmV0
aW1lJjM2MDB+c2VjcyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfYWRkXF9tb3JlXF90
aHJlc2hvbGQmVGhyZXNob2xkIHdoZW4gbW9yZSBzcGFjZSBzaG91bGQgJjE0NTJcdGFidWxhcm5l
d2xpbmUgCi0lCQkJCQkJJmJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyJlx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9uclxfb3V0Z29pbmdcX3N0cmVhbXNcX2RlZmF1bHQmRGVm
YXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyYxMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9jbXRcX29uXF9vZmYmVHVybiBDTVQgb24gb3Igb2ZmLiYwXHRhYnVsYXJuZXdsaW5l
IFxobGluZQotJXNjdHBcX2NtdFxfdXNlXF9kYWMmVXNlIGRlbGF5ZWQgYWNrbm93bGVkZ21lbnQg
Zm9yIENNVCYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2ZyXF9tYXhcX2J1cnN0XF9k
ZWZhdWx0JkRlZmF1bHQgbWF4IGJ1cnN0IGZvciBTQ1RQIGVuZHBvaW50cyB3aGVuICY0XHRhYnVs
YXJuZXdsaW5lCi0lCQkJCQkJJmZhc3QgcmV0cmFuc21pdHRpbmcmXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQotJXNjdHBcX2F1dG9cX2FzY29uZiZFbmFibGUgU0NUUCBBdXRvLUFTQ09ORiYxXHRhYnVs
YXJuZXdsaW5lIFxobGluZQotJXNjdHBcX211bHRpcGxlXF9hc2NvbmZzJkVuYWJsZSBTQ1RQIE11
bGlwbGUtQVNDT05GcyYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9hc2NvbmZcX2F1
dGhcX25vY2hrJkRpc2FibGUgU0NUUCBBU0NPTkYgQVVUSCByZXF1aXJlbWVudCYwXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQotJXNjdHBcX2F1dGhcX2Rpc2FibGUmRGlzYWJsZSBTQ1RQIEFVVEggZnVu
Y3Rpb24mMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9uYXRcX2ZyaWVuZGx5JlNDVFAg
TkFUIGZyaWVuZGx5IG9wZXJhdGlvbiYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2lu
aXRzXF9pbmNsdWRlXF9uYXRcX2ZyaWVuZGx5JkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBuYXQtZnJp
ZW5kbHkgJjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZTQ1RQIG9wdGlvbiBvbiBJTklUcy4mXHRh
YnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3VkcFxfdHVubmVsaW5nXF9wb3J0JlNldCB0aGUg
U0NUUC9VRFAgdHVubmVsaW5nIHBvcnQmOTg5OVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3Rw
XF9kb1xfZHJhaW4mRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQmMVx0YWJ1
bGFybmV3bGluZQotJQkJCQkJJnRvIHRoZSBkcmFpbiBjYWxscyZcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCi0lc2N0cFxfYWJvcnRcX2lmXF9vbmVcXzJcX29uZVxfaGl0c1xfbGltaXQmV2hlbiBvbmUt
Mi1vbmUgaGl0cyBxbGltaXQgYWJvcnQmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxf
c3RyaWN0XF9kYXRhXF9vcmRlciZFbmZvcmNlIHN0cmljdCBkYXRhIG9yZGVyaW5nLCBhYm9ydCBp
ZiBjb250cm9sJjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZpbnNpZGUgZGF0YSZcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCi0lc2N0cFxfbWluXF9yZXNpZHVhbCZNaW5pbXVtIHJlc2lkdWFsIGRhdGEg
Y2h1bmsgaW4gc2Vjb25kJjE0NTJcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZwYXJ0IG9mIHNwbGl0
Jlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9tYXhcX3JldHJhblxfY2h1bmsmTWF4aW11
bSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSYzMFx0YWJ1bGFybmV3bGluZQotJQkJCQkm
IHJldHJhbnNtaXR0ZWQgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBhYm9ydHMmXHRhYnVsYXJuZXds
aW5lIFxobGluZQotJXNjdHBcX2RlZmF1bHRcX2NjXF9tb2R1bGUmRGVmYXVsdCBjb25nZXN0aW9u
IGNvbnRyb2wgbW9kdWxlJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfZGVmYXVsdFxf
c3NcX21vZHVsZSZEZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSYwIFx0YWJ1bGFybmV3
bGluZSBcaGxpbmUKLSVzY3RwXF9kZWZhdWx0XF9mcmFnXF9pbnRlcmxlYXZlJkRlZmF1bHQgZnJh
Z21lbnQgaW50ZXJsZWF2ZSBsZXZlbCYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX21v
YmlsaXR5XF9iYXNlJkVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkmMFx0YWJ1bGFybmV3bGluZSBc
aGxpbmUKLSVzY3RwXF9tb2JpbGl0eVxfZmFzdGhhbmRvZmYmRW5hYmxlIFNDVFAgZmFzdCBoYW5k
b2ZmJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfTDJcX2FiY1xfdmFyaWFibGUmU0NU
UCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChMKSYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQot
JXNjdHBcX3Z0YWdcX3RpbWVcX3dhaXQmVnRhZyB0aW1lIHdhaXQgdGltZSwgMCBkaXNhYmxlcyBp
dC4mNjB+c2Vjc1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ibGFja2hvbGUmRW5hYmxl
IFNDVFAgYmxhY2tob2xpbmcmMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9wYXRoXF9w
ZlxfdGhyZXNob2xkJkRlZmF1bHQgcG90ZW50aWFsbHkgZmFpbGVkIHRocmVzaG9sZCY2NTUzNVx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ydHR2YXJcX2J3JlNoaWZ0IGFtb3VudCBmb3Ig
Yncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjJjQgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBc
X3J0dHZhclxfcnR0JlNoaWZ0IGFtb3VudCBmb3IgcnR0IHNtb290aGluZyBvbiBydHQgY2FsYyY1
IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ydHR2YXJcX2VxcmV0ICZXaGF0IHRvIHJl
dHVybiB3aGVuIHJ0dCBhbmQgYncgYXJlJjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZ1bmNoYW5n
ZWQmXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3N0ZWFkeVxfc3RlcCZIb3cgbWFueSB0
aGUgc2FtZXMgaXQgdGFrZXMgdG8gdHJ5IHN0ZXAmMjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZk
b3duIG9mIGN3bmQmXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3VzZVxfZGNjY1xfZWNu
JkVuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTiYxIFx0YWJ1bGFybmV3bGluZSBcaGxp
bmUKLSVzY3RwXF9idWZmZXJcX3NwbGl0dGluZyZFbmFibGUgc2VuZC9yZWNlaXZlIGJ1ZmZlciBz
cGxpdHRpbmcmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfaW5pdGlhbFxfY3duZCZJ
bml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGluIE1UVXMmM1x0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9sb2dnaW5nXF9sZXZlbCZMb2dnaW5nIGxldmVsJjAgXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQotJXNjdHBcX2RlYnVnXF9vbiZUdXJucyBkZWJ1ZyBvdXRwdXQgb24gb3Igb2ZmLiYwIFx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLQotJVxjYXB0aW9ue1N5c2N0bCB2YXJpYWJsZXMgc3VwcG9y
dGVkIGJ5IHVzcnNjdHB9Ci0lXGVuZHtsb25ndGFibGV9Ci0KLVxzZWN0aW9ue0V4YW1wbGVzfQot
XHN1YnNlY3Rpb257RGlzY2FyZCBTZXJ2ZXJ9XGxhYmVse3NlcnZlcn0KLVxiZWdpbnt2ZXJiYXRp
bX0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNU
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQot
LyoKLSAqIFVzYWdlOiBkaXNjYXJkX3NlcnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVf
ZW5jYXBzX3BvcnRdCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGli
Lmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNs
dWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFy
cGEvaW5ldC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIEJVRkZF
Ul9TSVpFIDEwMjQwCi0KLWNvbnN0IGludCB1c2VfY2IgPSAwOwotCi1zdGF0aWMgaW50Ci1yZWNl
aXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZv
aWQgKmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZv
IHJjdiwgaW50IGZsYWdzKQotewotICAgIGNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKLQot
ICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIGlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsK
LSAgICAgICAgICAgIHByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5c
biIsIChpbnQpZGF0YWxlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwcmludGYo
Ik1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJWQgd2l0aCAi
Ci0gICAgICAgICAgICAgICAgICAgIlNTTiAldSBhbmQgVFNOICV1LCBQUElEICVkLCBjb250ZXh0
ICV1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAoaW50KWRhdGFsZW4sCi0gICAgICAgICAgICAg
ICAgICAgYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/Ci0gICAgICAgICAgICAgICAgICAg
ICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci5zaW4uc2luX2FkZHIsIG5hbWUsIAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxFTik6Ci0gICAgICAgICAg
ICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNi5zaW42X2FkZHIsIG5h
bWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxFTiks
Ci0gICAgICAgICAgICAgICAgICAgbnRvaHMoYWRkci5zaW4uc2luX3BvcnQpLAotICAgICAgICAg
ICAgICAgICAgIHJjdi5yY3Zfc2lkLAotICAgICAgICAgICAgICAgICAgIHJjdi5yY3Zfc3NuLAot
ICAgICAgICAgICAgICAgICAgIHJjdi5yY3ZfdHNuLAotICAgICAgICAgICAgICAgICAgIG50b2hs
KHJjdi5yY3ZfcHBpZCksCi0gICAgICAgICAgICAgICAgICAgcmN2LnJjdl9jb250ZXh0KTsKLSAg
ICAgICAgfQotICAgICAgICBmcmVlKGRhdGEpOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQot
aW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAgc3RydWN0IHNvY2tldCAq
c29jazsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0gICAgc3RydWN0IHNjdHBfdWRw
ZW5jYXBzIGVuY2FwczsKLSAgICBzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKLSAgICB1aW50MTZf
dCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKLQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX1JFTU9URV9FUlJPUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07Ci0gICAgdW5zaWduZWQgaW50IGk7Ci0g
ICAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7Ci0gICAgY29uc3QgaW50IG9uID0gMTsKLSAg
ICBpbnQgbiwgZmxhZ3M7Ci0gICAgc29ja2xlbl90IGZyb21fbGVuOwotICAgIGNoYXIgYnVmZmVy
W0JVRkZFUl9TSVpFXTsKLSAgICBjaGFyIG5hbWVbSU5FVDZfQUREUlNUUkxFTl07Ci0gICAgc3Ry
dWN0IHNjdHBfcmVjdnZfcm4gcm47Ci0gICAgc29ja2xlbl90IGluZm9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcmVjdnZfcm4pOwotICAgIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2OwotICAgIHN0
cnVjdCBzY3RwX254dGluZm8gbnh0OwotICAgIHVuc2lnbmVkIGludCBpbmZvdHlwZSA9IDA7Ci0K
LSAgICBpZiAoYXJnYyA+IDEpIHsKLSAgICAgICAgdXNyc2N0cF9pbml0KGF0b2koYXJndlsxXSkp
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzcnNjdHBfaW5pdCg5ODk5KTsKLSAgICB9Ci0gICAg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oMCk7Ci0gICAgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfYmxhY2tob2xlKDIpOwotCi0gICAgaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQo
QUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsIAotICAgIAkgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVzZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5VTEwsIDApKSA9PSBOVUxM
KSB7Ci0gICAgICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tldCIpOwotICAgIH0KLSAgICBpZiAo
dXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQUEVE
X1Y0X0FERFIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQqKSZvbiwg
KHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigic2V0c29ja29w
dCIpOwotICAgIH0KLSAgICBtZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUpKTsKLSAgICBhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09DOwotICAgIGF2LmFzc29j
X3ZhbHVlID0gNDc7Ci0KLSAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9f
U0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAw
KSB7Ci0gICAgICAgIHBlcnJvcigic2V0c29ja29wdCIpOwotICAgIH0KLSAgICBpZiAoYXJnYyA+
IDIpIHsKLSAgICAgICAgbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBl
bmNhcHMpKTsKLSAgICAgICAgZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2
OwotICAgICAgICBlbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKLSAgICAg
ICAgaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RF
X1VEUF9FTkNBUFNfUE9SVCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHZvaWQqKSZlbmNhcHMsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgewotICAgICAgICAgICAgcGVy
cm9yKCJzZXRzb2Nrb3B0Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgbWVtc2V0KCZldmVudCwg
MCwgc2l6ZW9mKGV2ZW50KSk7Ci0gICAgZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9B
U1NPQzsKLSAgICBldmVudC5zZV9vbiA9IDE7Ci0gICAgZm9yIChpID0gMDsgaSA8ICh1bnNpZ25l
ZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7IGkrKykgewotICAg
ICAgICBldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07Ci0gICAgICAgIGlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCkpIDwg
MCkgewotICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2Vfc2V0c29ja29wdCIpOwotICAgICAg
ICB9Ci0gICAgfQotICAgIG1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotICAgIGFkZHIuc2luNl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLSAgICBhZGRyLnNpbjZfZmFtaWx5
ID0gQUZfSU5FVDY7Ci0gICAgYWRkci5zaW42X3BvcnQgPSBodG9ucyg5KTsKLSAgICBhZGRyLnNp
bjZfYWRkciA9IGluNmFkZHJfYW55OwotICAgIGlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVj
dCBzb2NrYWRkciAqKSZhZGRyLCAKLSAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigidXNlcnNwYWNlX2JpbmQiKTsK
LSAgICB9Ci0gICAgaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgewotICAgICAgICBw
ZXJyb3IoInVzZXJzcGFjZV9saXN0ZW4iKTsKLSAgICB9Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAg
ICAgaWYgKHVzZV9jYikgewotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0g
ICAgICAgICAgICBTbGVlcCgxKjEwMDApOwotI2Vsc2UKLSAgICAgICAgICAgIHNsZWVwKDEpOwot
I2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcm9tX2xlbiA9IChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgICAgICAgICAgZmxhZ3MgPSAwOwot
ICAgICAgICAgICAgcm4ucmVjdnZfcmN2aW5mbyA9IHJjdjsKLSAgICAgICAgICAgIHJuLnJlY3Z2
X254dGluZm8gPSBueHQ7Ci0gICAgICAgICAgICBuID0gdXNyc2N0cF9yZWN2dihzb2NrLCAodm9p
ZCopYnVmZmVyLCBCVUZGRVJfU0laRSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmZnJvbV9sZW4sICh2b2lkICopJnJuLAotCSAgICAg
ICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7Ci0gICAgICAgICAg
ICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FU
SU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0
aCAlZCByZWNlaXZlZC5cbiIsIG4pOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCByZWNlaXZlZCBmcm9tICVzOiV1
IG9uIHN0cmVhbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiJWQgd2l0aCBTU04gJXUg
YW5kIFRTTiAldSwgUFBJRCAlZCwgY29udGV4dCAldSwgIgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImNvbXBsZXRlICVkLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZf
YWRkciwgbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZf
QUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3NpZCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3NzbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJuLnJlY3Z2X3JjdmluZm8ucmN2X3RzbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG50
b2hsKHJuLnJlY3Z2X3JjdmluZm8ucmN2X3BwaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcm4ucmVjdnZfcmN2aW5mby5yY3ZfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChmbGFncyAmIE1TR19FT1IpID8gMSA6IDApOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB1c3JzY3RwX2Nsb3NlKHNvY2spOwotICAg
IHdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZiBkZWZpbmVkIChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotICAgICAgICBTbGVlcCgxMDAwKTsKLSNlbHNlCi0gICAgICAgIHNsZWVw
KDEpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiAoMCk7Ci19Ci0KLVxlbmR7dmVyYmF0aW19
Ci0KLVxzdWJzZWN0aW9ue0NsaWVudH1cbGFiZWx7Y2xpZW50fQotXGJlZ2lue3ZlcmJhdGltfQot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgot
ICogVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfZW5jYXBzX3Bv
cnQgcmVtb3RlX2VuY2Fwc19wb3J0XQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1
ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJw
YS9pbmV0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0KLWludCBkb25lID0gMDsK
LQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwg
c3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncykKLXsKLSAgICBpZiAoZGF0YSA9PSBO
VUxMKSB7Ci0gICAgICAgIGRvbmUgPSAxOwotICAgICAgICB1c3JzY3RwX2Nsb3NlKHNvY2spOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHdyaXRlKGZpbGVubyhzdGRvdXQpLCBkYXRhLCBkYXRhbGVu
KTsKLSAgICAgICAgZnJlZShkYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLWludAot
bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAgIHN0cnVjdCBzb2NrZXQgKnNvY2s7
Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYg
YWRkcjY7Ci0gICAgc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLSAgICBjaGFyIGJ1ZmZl
cls4MF07Ci0KLSAgICBpZiAoYXJnYyA+IDMpIHsKLSAgICAgICAgdXNyc2N0cF9pbml0KGF0b2ko
YXJndlszXSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzcnNjdHBfaW5pdCg5ODk5KTsKLSAg
ICB9Ci0gICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oMCk7Ci0gICAgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwotICAgIGlmICgoc29jayA9IHVzcnNjdHBf
c29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfY2IsIE5VTEwsIDApKSA9PSBOVUxMKSB7Ci0gICAg
ICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tldCBpcHY2Iik7Ci0gICAgfQotICAgIGlmIChhcmdj
ID4gNCkgewotICAgICAgICBtZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3Vk
cGVuY2FwcykpOwotICAgICAgICBlbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5F
VDY7Ci0gICAgICAgIGVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkpOwotICAg
ICAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1P
VEVfVURQX0VOQ0FQU19QT1JULCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29u
c3Qgdm9pZCopJmVuY2FwcywgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2ts
ZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7Ci0gICAgICAgICAgICBw
ZXJyb3IoInNldHNvY2tvcHQiKTsKLSAgICAgICAgfQotICAgIH0KLSAgICBtZW1zZXQoKHZvaWQg
KikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICBtZW1zZXQoKHZv
aWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jaWYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi0gICAgYWRkcjQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAg
IGFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0g
ICAgYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgYWRkcjYuc2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKLSAgICBhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotICAg
IGFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotICAgIGlmIChpbmV0X3B0
b24oQUZfSU5FVDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKLSAgICAgICAg
aWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwg
MCkgewotICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2VfY29ubmVjdCIpOwotICAgICAgICB9
Ci0gICAgfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJmFkZHI0LnNpbl9h
ZGRyKSA9PSAxKSB7Ci0gICAgICAgIGlmICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBz
b2NrYWRkciAqKSZhZGRyNCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2Vf
Y29ubmVjdCIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcHJpbnRmKCJJbGxl
Z2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MuXG4iKTsKLSAgICB9Ci0gICAgd2hpbGUgKChmZ2V0cyhi
dWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgIT0gTlVMTCkgJiYgIWRvbmUpIHsKLSAgICAg
ICAgdXNyc2N0cF9zZW5kdihzb2NrLCBidWZmZXIsIHN0cmxlbihidWZmZXIpLCBOVUxMLCAwLAot
CQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFNDVFBfU0VORFZfTk9JTkZPLCAwKTsKLSAg
ICB9Ci0gICAgaWYgKCFkb25lKSB7Ci0gICAgICAgIHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hV
VF9XUik7Ci0gICAgfQotICAgIHdoaWxlICghZG9uZSkgewotI2lmIGRlZmluZWQgKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0gICAgICAgIFNsZWVwKDEqMTAwMCk7Ci0jZWxzZQotICAgICAgICBz
bGVlcCgxKTsKLSNlbmRpZgotICAgIH0KLSAgICB3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAw
KSB7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSAgICAgICAgU2xlZXAo
MTAwMCk7Ci0jZWxzZQotICAgICAgICBzbGVlcCgxKTsKLSNlbmRpZgotICAgIH0KLSAgICByZXR1
cm4oMCk7Ci19Ci0KLVxlbmR7dmVyYmF0aW19Ci1cYmlibGlvZ3JhcGh5c3R5bGV7cGxhaW59Ci0l
Ci1cYmVnaW57dGhlYmlibGlvZ3JhcGh5fXs5OX0KLQotXGJpYml0ZW17c29ja2V0QVBJfQotUi5+
U3Rld2FydCwgTS5+VFwidXhlbiwgSy5+UG9vbiwgYW5kIFYufllhc2V2aWNoOgotXHRleHRpdHtT
b2NrZXRzIEFQSSBFeHRlbnNpb25zIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9u
IFByb3RvY29sIChTQ1RQKX0uCi1SRkN+NjQ1OCwgRGV6ZW1iZXJ+MjAxMS4KLQotXGJpYml0ZW17
U0NUUH0KLVIuflN0ZXdhcnQ6Ci1cdGV4dGl0e1N0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQ
cm90b2NvbH0uCi1SRkN+NDk2MCwgU2VwdGVtYmVyfjIwMDcuCi0KLQotXGJpYml0ZW17YXV0aH0K
LU0uflRcInV4ZW4sIFIuflN0ZXdhcnQsIFAufkxlaSwgYW5kIEUuflJlc2NvcmxhOgotXHRleHRp
dHtBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lv
biBQcm90b2NvbCAoU0NUUCl9LgotUkZDfjQ4OTUsIEF1Z3VzdH4yMDA3LgotCi1cYmliaXRlbXtz
dHJlYW1SZXNldH0KLVIuflN0ZXdhcnQsIE0uflRcInV4ZW4sIGFuZCBQLn5MZWk6Ci1cdGV4dGl0
e1N0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgU3RyZWFtIFJlY29u
ZmlndXJhdGlvbn0uCi1SRkN+NjUyNSwgRmVicnVhcnl+MjAxMi4KLQotCi1cYmliaXRlbXthZGRp
cH0KLVIuflN0ZXdhcnQsICBRLn5YaWUsIE0uflRcInV4ZW4sIFMufk1hcnV5YW1hLCBhbmQgTS5+
S296dWthOgotXHRleHRpdHtTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFND
VFApIER5bmFtaWMgQWRkcmVzcyBSZWNvbmZpZ3VyYXRpb259LgotUkZDfjUwNjEsIFNlcHRlbWJl
cn4yMDA3LgotCi1cYmliaXRlbXtzYWNrLWltbX0KLU0uflRcInV4ZW4sIEkuflJcInVuZ2VsZXIs
IGFuZCBSLn5TdGV3YXJ0OgotXHRleHRpdHtTQUNLLUlNTUVESUFURUxZIEV4dGVuc2lvbiBmb3Ig
dGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbH0uCi1kcmFmdC10dWV4ZW4t
dHN2d2ctc2N0cC1zYWNrLWltbWVkaWF0ZWx5LTA5ICh3b3JrIGluIHByb2dyZXNzKSwgQXByaWx+
MjAxMi4KLQotXGJpYml0ZW17dWRwZW5jYXBzfQotTS5+VFwidXhlbiBhbmQgUi5+U3Rld2FydAot
XHRleHRpdHtVRFAgRW5jYXBzdWxhdGlvbiBvZiBTQ1RQIFBhY2tldHNsfS4KLWRyYWZ0LWlldGYt
dHN2d2ctc2N0cC11ZHAtZW5jYXBzLTAzICh3b3JrIGluIHByb2dyZXNzKSwgTWFyY2h+MjAxMi4K
LQotXGVuZHt0aGViaWJsaW9ncmFwaHl9Ci1cZW5ke2RvY3VtZW50fQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL09XTkVS
UyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9PV05FUlMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4u
ZTgxM2IwNzk2ODBhMDdiZGYyZTY1ODQxNzRlZDFhNGZlOTRjNzRiZSAxMDA2NDQKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL09XTkVS
UworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvT1dORVJTCkBAIC0wLDAgKzEsMyBAQAorcHRoYXRjaGVyQGNocm9taXVtLm9yZworamlh
eWxAY2hyb21pdW0ub3JnCitsZGl4b25AY2hyb21pdW0ub3JnCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNo
cm9taXVtIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL1JFQURNRS5jaHJvbWl1bQppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVh
ZDhjMmU0OGM1MzkxLi4yNGIwYmRmNDVmN2FkMGZiYzQ2OGY4MTExNTZmN2ViMjcxNjY4ZjMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvUkVBRE1FLmNocm9taXVtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9SRUFETUUuY2hyb21pdW0KQEAgLTAsMCArMSwy
MCBAQAorTmFtZTogdXNyc2N0cAorVVJMOiBodHRwOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNj
dHAKK1ZlcnNpb246IDAKK0RhdGU6IEp1biAyMiwgMjAxOAorUmV2aXNpb246IDdhOGJjOWE5MGNh
OTY2MzRhYTU2ZWU3MTI4NTZkOTdmMjdkOTAzZjgKK0xpY2Vuc2U6IE5ldyBCU0QKK0xpY2Vuc2Ug
RmlsZTogTElDRU5TRQorU2VjdXJpdHkgQ3JpdGljYWw6IHllcworCitEZXNjcmlwdGlvbjoKK1Ro
ZSB1c3JzY3RwbGliIHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIG9mIFNDVFAgcHJvdG9jb2wgd2hp
Y2ggZnVsbHkgc3VwcG9ydHMKK1JGQyAyOTYwCithcyB3ZWxsIGFzIHVwZGF0ZXMgYW5kIGVuaGFu
Y2VtZW50cyBmcm9tIHRoZSBmb2xsb3dpbmcgSW50ZXJuZXQgRHJhZnRzOgorICAgZHJhZnQtaWV0
Zi10c3Z3Zy1zY3RwY3N1bS0wNS50eHQKKyAgIGRyYWZ0LWlldGYtdHN2d2ctc2N0cGltcGd1aWRl
LTA1LnR4dAorICAgZHJhZnQtaWV0Zi10c3Z3Zy1zY3Rwc29ja2V0LTA0LnR4dAorICAgZHJhZnQt
aWV0Zi10c3Z3Zy1hZGRpcC1zY3RwLTA1LnR4dAorICAgZHJhZnQtc3Rld2FydC1wcnNjdHAtMDAu
dHh0CisgICBkcmFmdC1zdGV3YXJ0LXRzdndnLXNjdHBpcHY2LTAwLnR4dAorICAgZHJhZnQtaXll
bmdhci1zY3RwLWNhY2MtMDAudHh0CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLm1kIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL1JFQURNRS5tZApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjMTY0YzVhOTI0MmU5YzY3ZGJkZGE5ZGJlNWRk
ZjRmNzM0NWZjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
UkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jIHVzcnNjdHAKLQotVGhp
cyBpcyBhIHVzZXJsYW5kIFNDVFAgc3RhY2sgc3VwcG9ydGluZyBGcmVlQlNELCBMaW51eCwgTWFj
IE9TIFggYW5kIFdpbmRvd3MuCi0KLVNlZSBbbWFudWFsXShNYW51YWwubWQpIGZvciBtb3JlIGlu
Zm9ybWF0aW9uLgotCi1UaGUgc3RhdHVzIG9mIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gdGVzdGlu
ZyBpcyBhdmFpbGFibGUgZnJvbSBbZ3JpZF0oaHR0cDovLzIxMi4yMDEuMTIxLjExMDoxODAxMC9n
cmlkKSBhbmQgW3dhdGVyZmFsbF0oaHR0cDovLzIxMi4yMDEuMTIxLjExMDoxODAxMC93YXRlcmZh
bGwpLgotSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzaW5nbGUgYnJhbmNoLCBqdXN0
IGFwcGVuZCBgP2JyYW5jaD1CUkFOQ0hOQU1FYCB0byB0aGUgVVJMLCBmb3IgZXhhbXBsZSBbd2F0
ZXJmYWxsXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL3dhdGVyZmFsbD9icmFuY2g9bWFz
dGVyKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9ib290c3RyYXAgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvYm9vdHN0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA4OWM3YmJhYmQ5MDM5MDkyZjY1Y2Q1MGJmNDk0MTQxMjRkYTRiMWI3Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9ib290c3RyYXAKKysrIC9k
ZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jISAvYmluL3NoCi0jCi0jIENvcHlyaWdodCAoQykg
MjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCi0jCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0j
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMu
IE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29u
dHJpYnV0b3JzCi0jICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCi0j
Ci0KLSNiYWlsIG91dCBvbiBlcnJvcgotc2V0IC1lCi0KLSNkZXRlY3QgKGcpbGlidG9vbGl6ZQot
aWYgd2hpY2ggbGlidG9vbGl6ZSA+L2Rldi9udWxsCi10aGVuCi0JX0xJQlRPT0xJWkU9YHdoaWNo
IGxpYnRvb2xpemVgCi1lbGlmIHdoaWNoIGdsaWJ0b29saXplID4vZGV2L251bGwKLXRoZW4KLQlf
TElCVE9PTElaRT1gd2hpY2ggZ2xpYnRvb2xpemVgCi1lbHNlCi0JZWNobyAiRVJST1I6IEkgY2Fu
bm90IGZpbmQgbGlidG9vbGl6ZSBvciBnbGlidG9vbGl6ZSEiCi0JZXhpdCAxCi1maQotCi0jZXhl
Y3V0ZSAoZylsaWJ0b29saXplCi0ke19MSUJUT09MSVpFfQotCi0jZXhlY3V0ZSBhY2xvY2FsCi1p
ZiBbIC1lIC91c3IvbG9jYWwvc2hhcmUvYWNsb2NhbCBdCi10aGVuCi0gICBhY2xvY2FsIC1JIC91
c3IvbG9jYWwvc2hhcmUvYWNsb2NhbAotZWxpZiBbIC1lIC91c3Ivc2hhcmUvYWNsb2NhbCBdCi10
aGVuCi0gICBhY2xvY2FsIC1JIC91c3Ivc2hhcmUvYWNsb2NhbAotZWxzZQotICAgYWNsb2NhbAot
ZmkKLQotI2V4ZWN1dGUgYXV0b2NvbmYKLWF1dG9jb25mCi0KLSNnZW5lcmF0ZSB0aGUgLi9jb25m
aWd1cmUKLWF1dG9tYWtlIC0tZm9yZWlnbiAtLWFkZC1taXNzaW5nIC0tY29weQotCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvY29uZmlndXJlLmFjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL2NvbmZpZ3VyZS5hYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMjMzOWVhN2I2NDU5M2MzOGNmNDdkYTI3Yjk3YTEzZDU4YTg2ZDAzNC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvY29uZmlndXJlLmFjCisrKyAvZGV2L251
bGwKQEAgLTEsMTk1ICswLDAgQEAKLWRubAotZG5sIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1p
Y2hhZWwgVHVleGVuCi1kbmwKLWRubCBBbGwgcmlnaHRzIHJlc2VydmVkLgotZG5sCi1kbmwgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci1kbmwgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi1kbmwgYXJlIG1ldDoKLWRubCAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotZG5sICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLWRubCAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotZG5sICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLWRubCAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotZG5sIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCi1kbmwgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi1kbmwgICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi1kbmwKLWRubCBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotZG5sIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotZG5sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi1kbmwgQVJFIERJ
U0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKLWRubCBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotZG5sIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi1kbmwg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi1kbmwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLWRubCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci1kbmwgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgotZG5sIFNVQ0ggREFNQUdFLgotZG5sCi0KLUFDX0lOSVQoW2xp
YnVzcnNjdHBdLCBbMC45LjMuMF0pCi1BTV9JTklUX0FVVE9NQUtFCi0KLUFDX1BST0dfQ0MKLUFD
X1BST0dfTElCVE9PTAotQUNfQ0FOT05JQ0FMX0hPU1QKLUFDX0NPTkZJR19NQUNST19ESVIoW200
XSkKLQotZG5sIERpc2FibGUgcGtnX2NvbmZpZyBzdXBwb3J0IGZvciBub3cKLWRubCBQS0dfUFJP
R19QS0dfQ09ORklHCi1kbmwgUEtHX0lOU1RBTExESVIKLQotTElCQ0ZMQUdTPSItRFNDVFBfUFJP
Q0VTU19MRVZFTF9MT0NLUyAtRFNDVFBfU0lNUExFX0FMTE9DQVRPUiAtRF9fVXNlcnNwYWNlX18i
Ci1BUFBDRkxBR1M9IiIKLQotY2FzZSAkaG9zdF9vcyBpbgotZGFyd2luKikKLSAgQ0ZMQUdTPSIk
Q0ZMQUdTIC1zdGQ9Yzk5IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLVduby1hZGRyZXNz
LW9mLXBhY2tlZC1tZW1iZXIgLURfX0FQUExFX1VTRV9SRkNfMjI5MiIKLSAgTElCQ0ZMQUdTPSIk
TElCQ0ZMQUdTIC1VX19BUFBMRV9fIC1EX19Vc2Vyc3BhY2Vfb3NfRGFyd2luIgotICA7OwotZHJh
Z29uZmx5KikKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1wdGhyZWFkIgotICBMSUJDRkxB
R1M9IiRMSUJDRkxBR1MgLVVfX0RyYWdvbkZseV9fIC1EX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5
IgotICA7OwotZnJlZWJzZCopCi0gIENGTEFHUz0iJENGTEFHUyAtc3RkPWM5OSAtcHRocmVhZCIK
LSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXEgY2xhbmc7IHRoZW4KLSAgICBDRkxBR1M9IiRD
RkxBR1MgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQt
bWVtYmVyIgotICAgIExERkxBR1M9IiRMREZMQUdTIC1RdW51c2VkLWFyZ3VtZW50cyIKLSAgZmkK
LSAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19GcmVlQlNEX18gLURfX1VzZXJzcGFjZV9vc19G
cmVlQlNEIgotICA7OwotbGludXgqKQotICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJl
YWQgLURfR05VX1NPVVJDRSIKLSAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1EX19Vc2Vyc3BhY2Vf
b3NfTGludXgiCi0gIDs7Ci1uZXRic2QqKQotICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0
aHJlYWQiCi0gIExJQkNGTEFHUz0iJExJQkNGTEFHUyAtVV9fTmV0QlNEX18gLURfX1VzZXJzcGFj
ZV9vc19OZXRCU0QiCi0gIDs7Ci1vcGVuYnNkKikKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5
IC1wdGhyZWFkIgotICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX09wZW5CU0RfXyAtRF9fVXNl
cnNwYWNlX29zX09wZW5CU0QiCi0gIDs7Ci1zb2xhcmlzKikKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1E
X1hQRzRfMiIKLSAgOzsKLWVzYWMKLQotaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1vICJ4JEND
IiA9ICJ4Y2xhbmciIDsgdGhlbgotICAgICAgICBhY19zdXBwb3J0c19nY2NfZmxhZ3M9eWVzCi1m
aQotCi1pZiB0ZXN0ICJ4JGFjX3N1cHBvcnRzX2djY19mbGFncyIgPSAieHllcyIgOyB0aGVuCi0g
ICAgICAgIENGTEFHUz0iJENGTEFHUyAtcGVkYW50aWMgLVdhbGwiCi1maQotCi1BQ19NU0dfQ0hF
Q0tJTkcod2hldGhlciB3ZSBzaG91bGQgdHJlYXQgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3Jz
KQotQUNfQVJHX0VOQUJMRSh3YXJuaW5ncy1hcy1lcnJvcnMsCi0gIEFDX0hFTFBfU1RSSU5HKCBb
LS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzXSwKLSAgICAgICAgICAgICAgICAgIFt0cmVhdCB3
YXJuaW5ncyBhcyBlcnJvcnMgKG9ubHkgZm9yIEdDQyBvciBjbGFuZykgQDw6QGRlZmF1bHQ9eWVz
QDo+QF0pLAotICAgIGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnM9JGVuYWJsZXZhbCxlbmFibGVf
d2FybmluZ3NfYXNfZXJyb3JzPXllcykKLWlmIHRlc3QgIngkYWNfc3VwcG9ydHNfZ2NjX2ZsYWdz
IiA9ICJ4eWVzIiAtYSB4JGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnMgPSB4eWVzOyB0aGVuCi0g
ICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJv
ciIKLWVsc2UKLSAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLWZpCi0KLUFDX0FSR19FTkFCTEUo
aW52YXJpYW50cywKLSAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1pbnZhcmlhbnRzXSwKLSAg
ICAgICAgICAgICAgICAgIFthZGQgYWRkaXRpb25hbCBydW50aW1lIGNoZWNrcyBAPDpAZGVmYXVs
dD1ub0A6PkBdKSwKLSAgICBlbmFibGVfaW52YXJpYW50cz0kZW5hYmxldmFsLGVuYWJsZV9pbnZh
cmlhbnRzPW5vKQotaWYgdGVzdCB4JGVuYWJsZV9pbnZhcmlhbnRzID0geHllczsgdGhlbgotICAg
ICAgICBBQ19ERUZJTkUoSU5WQVJJQU5UUywgMSwgW0FkZCBhZGRpdGlvbmFsIHJ1bnRpbWUgY2hl
Y2tzXSkKLWZpCi0KLUFDX0FSR19FTkFCTEUoZGVidWcsCi0gIEFDX0hFTFBfU1RSSU5HKCBbLS1l
bmFibGUtZGVidWddLAotICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgZGVidWcgaW5mb3JtYXRp
b24gQDw6QGRlZmF1bHQ9eWVzQDo+QF0pLAotICAgIGVuYWJsZV9kZWJ1Zz0kZW5hYmxldmFsLGVu
YWJsZV9kZWJ1Zz15ZXMpCi1pZiB0ZXN0IHgkZW5hYmxlX2RlYnVnID0geHllczsgdGhlbgotICAg
ICAgICBBQ19ERUZJTkUoU0NUUF9ERUJVRywgMSwgW1Byb3ZpZGUgZGVidWcgaW5mb3JtYXRpb25d
KQotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWcgLU8wIgotZmkKLQotQUNfQVJHX0VOQUJMRShp
bmV0LAotICBBQ19IRUxQX1NUUklORyggWy0tZW5hYmxlLWluZXRdLAotICAgICAgICAgICAgICAg
ICAgW1N1cHBvcnQgSVB2NCBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCi0gICAgZW5hYmxlX2luZXQ9
JGVuYWJsZXZhbCxlbmFibGVfaW5ldD15ZXMpCi1pZiB0ZXN0IHgkZW5hYmxlX2luZXQgPSB4eWVz
OyB0aGVuCi0gICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQiCi0gICAgICAgIEFD
X0RFRklORShJTkVULCAxLCBbU3VwcG9ydCBJUHY0XSkKLWZpCi0KLUFDX0FSR19FTkFCTEUoaW5l
dDYsCi0gIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtaW5ldDZdLAotICAgICAgICAgICAgICAg
ICAgW1N1cHBvcnQgSVB2NiBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCi0gICAgZW5hYmxlX2luZXQ2
PSRlbmFibGV2YWwsZW5hYmxlX2luZXQ2PXllcykKLWlmIHRlc3QgeCRlbmFibGVfaW5ldDYgPSB4
eWVzOyB0aGVuCi0gICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQ2IgotICAgICAg
ICBBQ19ERUZJTkUoSU5FVDYsIDEsIFtTdXBwb3J0IElQdjZdKQotZmkKLQotQUNfQVJHX0VOQUJM
RShwcm9ncmFtcywKLSAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1wcm9ncmFtc10sCi0gICAg
ICAgICAgICAgICAgICBbYnVpbGQgZXhhbXBsZSBwcm9ncmFtcyBAPDpAZGVmYXVsdD15ZXNAOj5A
XSksCi0gICAgZW5hYmxlX3Byb2dyYW1zPSRlbmFibGV2YWwsZW5hYmxlX3Byb2dyYW1zPXllcykK
LWlmIHRlc3QgeCRlbmFibGVfcHJvZ3JhbXMgPSB4eWVzOyB0aGVuCi0gICAgICAgIEFDX0NPTkZJ
R19GSUxFUyhwcm9ncmFtcy9NYWtlZmlsZSkKLWZpCi0KLUFDX0NIRUNLX1RZUEUoc2l6ZV90KQot
QUNfQ0hFQ0tfVFlQRShzc2l6ZV90KQotCi1BQ19DSEVDS19GVU5DUyhzb2NrZXQsICwgQUNfQ0hF
Q0tfTElCKHNvY2tldCwgc29ja2V0KSkKLUFDX0NIRUNLX0ZVTkNTKGluZXRfYWRkciwgLCBBQ19D
SEVDS19MSUIobnNsLCBpbmV0X2FkZHIpKQotCi1BQ19DSEVDS19IRUFERVJTKHN0ZGF0b21pYy5o
KQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvcXVldWUuaCkKLUFDX0NIRUNLX0hFQURFUlMobGludXgv
aWZfYWRkci5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCi1BQ19DSEVDS19I
RUFERVJTKGxpbnV4L3J0bmV0bGluay5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5o
Pl0pCi1BQ19DSEVDS19IRUFERVJTKG5ldGluZXQvaXBfaWNtcC5oLCBbXSwgW10sIFsjaW5jbHVk
ZSA8bmV0aW5ldC9pcC5oPl0pCi0KLUFDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHIuc2Ff
bGVuLAotICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1NBX0xFTiwgMSwgW0RlZmluZSB0
aGlzIGlmIHlvdXIgc3RhY2sgaGFzIHNhX2xlbiBpbiBzb2NrYWRkciBzdHJ1Y3QuXSksLAotICAg
ICAgICAgICAgICAgIFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotICAgICAgICAgICAgICAgICAj
aW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICAgICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAg
ICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCi0KLUFDX0NIRUNLX01FTUJFUihzdHJ1
Y3Qgc29ja2FkZHJfaW4uc2luX2xlbiwKLSAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9T
SU5fTEVOLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciBJUHY0IGhhcyBzaW5fbGVuIGluIHNvY2th
ZGRyX2luIHN0cnVjdC5dKSwsCi0gICAgICAgICAgICAgICAgWyNpZmRlZiBIQVZFX1NZU19UWVBF
U19ICi0gICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSAgICAgICAgICAg
ICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSkK
LQotQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9sZW4sCi0gICAgICAg
ICAgICAgICAgQUNfREVGSU5FKEhBVkVfU0lONl9MRU4sIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3Vy
IElQdjYgaGFzIHNpbjZfbGVuIGluIHNvY2thZGRyX2luNiBzdHJ1Y3QuXSksLAotICAgICAgICAg
ICAgICAgIFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotICAgICAgICAgICAgICAgICAjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+Ci0gICAgICAgICAgICAgICAgICNlbmRpZgotICAgICAgICAgICAgICAg
ICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl0pCi0KLUFDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29j
a2FkZHJfY29ubi5zY29ubl9sZW4sCi0gICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfU0NP
Tk5fTEVOLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciB1c2VybGFuZCBzdGFjayBoYXMgc2Nvbm5f
bGVuIGluIHNvY2thZGRyX2Nvbm4gc3RydWN0Ll0pLCwKLSAgICAgICAgICAgICAgICBbI2luY2x1
ZGUgInVzcnNjdHBsaWIvdXNyc2N0cC5oIl0pCi0KLUFDX01TR19DSEVDS0lORyhmb3Igc29ja2xl
bl90KQotQUNfVFJZX0NPTVBJTEUoWyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICi0gICAgICAgICAg
ICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAgICAgICAgICAgICAgICNlbmRpZgotICAg
ICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKLSAgICAgICAgICAgICAgIFtz
b2NrbGVuX3QgeDsgeCA9IDE7IHJldHVybiAoKGludCl4KTtdLAotICAgICAgICAgICAgICAgW0FD
X01TR19SRVNVTFQoeWVzKV0sCi0gICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChpbnQpCi0g
ICAgICAgICAgICAgICAgQUNfREVGSU5FKHNvY2tsZW5fdCwgaW50LCBbRGVmaW5lIGEgdHlwZSBm
b3Igc29ja2xlbl90Ll0pXSkKLQotQUNfQ19CSUdFTkRJQU4KLQotQUNfU1VCU1QoW0xJQkNGTEFH
U10pCi1BQ19TVUJTVChbQVBQQ0ZMQUdTXSkKLWRubCBBQ19DT05GSUdfRklMRVMoW3VzcnNjdHAu
cGNdKQotQUNfT1VUUFVUKE1ha2VmaWxlIHVzcnNjdHBsaWIvTWFrZWZpbGUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
bG9jYWxjaGFuZ2VzLnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL2xvY2FsY2hhbmdlcy5wYXRjaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1z
Ly5naXRhdHRyaWJ1dGVzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBhZjk1YjViOWJhODkyMmQxNTRlZGUxMjg3MGJiNDdmY2Q1YWMzODgxLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy8uZ2l0
YXR0cmlidXRlcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAKLWRpc2NhcmRfc2VydmVy
LmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotZWNob19zZXJ2ZXIuYyBzdm4tcHJvcGVy
dGllcz1hbGxvdy10YWJzPW9uCi1la3JfY2xpZW50LmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFi
cz1vbgotZWtyX2xvb3AuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1la3JfbG9vcF9v
ZmZsb2FkLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotZWtyX3BlZXIuYyBzdm4tcHJv
cGVydGllcz1hbGxvdy10YWJzPW9uCi1la3Jfc2VydmVyLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ct
dGFicz1vbgotcnRjd2ViLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotdGVzdF90aW1l
ci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXRzY3RwLmMgc3ZuLXByb3BlcnRpZXM9
YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0IGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1z
L0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMDI2ZGRjZTFi
ZGRjZDg2YjA4ZjE1OGVmYWI0OWNlNTgwODE0NDM3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxs
CkBAIC0xLDk5ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTUgT2xlZyBBbGV4
ZWVua292Ci0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEZlbGl4IFdlaW5yYW5rCi0jCi0jIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1l
dDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0jICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKLSMgU1VDSCBEQU1BR0UuCi0jCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBJTkNMVURFIE1PRFVMRVMKLSMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaW5jbHVkZShDaGVja0luY2x1
ZGVGaWxlKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKLSMgQ0hFQ0sgSU5DTFVERVMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKLQotaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtFX1NPVVJDRV9E
SVJ9L3VzcnNjdHBsaWIpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIwotIyBPUyBERVBFTkRFTlQKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaWYgKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENI
RVMgIkxpbnV4IikKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURfR05VX1NPVVJDRSkKLWVuZGlmICgp
Ci0KLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEYXJ3aW4iKQotICAgIGFkZF9k
ZWZpbml0aW9ucygtRF9fQVBQTEVfVVNFX1JGQ18yMjkyKQotZW5kaWYgKCkKLQotCi0jIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIE1JU0MKLSMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotZmluZF9wYWNr
YWdlKFRocmVhZHMpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwotIyBQUk9HUkFNUwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIwotCi1zZXQoQ0hFQ0tfUFJPR1JBTVMKLSAgICBjbGllbnQuYwotICAg
IGRheXRpbWVfc2VydmVyLmMKLSAgICBkaXNjYXJkX3NlcnZlci5jCi0gICAgZWNob19zZXJ2ZXIu
YwotICAgIGVrcl9jbGllbnQuYwotICAgIGVrcl9sb29wX29mZmxvYWQuYwotICAgIGVrcl9sb29w
LmMKLSAgICBla3JfcGVlci5jCi0gICAgZWtyX3NlcnZlci5jCi0gICAgaHR0cF9jbGllbnQuYwot
ICAgIHJ0Y3dlYi5jCi0gICAgdGVzdF9saWJtZ210LmMKLSAgICB0ZXN0X3RpbWVyLmMKLSAgICB0
c2N0cC5jCi0pCi0KLWZvcmVhY2ggKFNPVVJDRV9GSUxFICR7Q0hFQ0tfUFJPR1JBTVN9KQotICAg
IGdldF9maWxlbmFtZV9jb21wb25lbnQoU09VUkNFX0ZJTEVfV0UgJHtTT1VSQ0VfRklMRX0gTkFN
RV9XRSkKLSAgICBhZGRfZXhlY3V0YWJsZSgKLSAgICAgICAgJHtTT1VSQ0VfRklMRV9XRX0KLSAg
ICAgICAgJHtTT1VSQ0VfRklMRX0KLSAgICApCi0KLSAgICB0YXJnZXRfbGlua19saWJyYXJpZXMo
JHtTT1VSQ0VfRklMRV9XRX0KLSAgICAgICAgJHtQUk9HUkFNU19MSU5LX0xJQlJBUll9Ci0gICAg
ICAgICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0KLSAgICApCi1lbmRmb3JlYWNoICgpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvcHJvZ3JhbXMvTWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvTWFrZWZpbGUuYW0KZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YzI0OGZiYTNlOWM4NjhjMzk2YjM3ZjM2MmYwMTFmNjI5
MDNiZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dy
YW1zL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIwotIyBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotIwotIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBtZXQ6Ci0jIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycwotIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMgICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0jIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElTQ0xBSU1FRC4JSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotIyBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSMgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0jIFNVQ0gg
REFNQUdFLgotIwotCi1BTV9DUFBGTEFHUyA9IC1JJChzcmNkaXIpLy4uL3VzcnNjdHBsaWIKLUVY
VFJBX0RJU1QgPSBNYWtlZmlsZS5ubWFrZSB0c2N0cC5jIGRheXRpbWVfc2VydmVyLmMgZGlzY2Fy
ZF9zZXJ2ZXIuYyBlY2hvX3NlcnZlci5jIGNsaWVudC5jIHJ0Y3dlYi5jIGVrcl9jbGllbnQuYyBl
a3Jfc2VydmVyLmMgZWtyX2xvb3AuYyBla3JfbG9vcF9vZmZsb2FkLmMgdGVzdF9saWJtZ210LmMg
aHR0cF9jbGllbnQuYwotCi1ub2luc3RfUFJPR1JBTVMgPSB0c2N0cCBkYXl0aW1lX3NlcnZlciBk
aXNjYXJkX3NlcnZlciBlY2hvX3NlcnZlciBjbGllbnQgcnRjd2ViIGVrcl9jbGllbnQgZWtyX3Nl
cnZlciBla3JfcGVlciBla3JfbG9vcCBla3JfbG9vcF9vZmZsb2FkIHRlc3RfbGlibWdtdCB0ZXN0
X3RpbWVyIGh0dHBfY2xpZW50Ci10ZXN0X2xpYm1nbXRfU09VUkNFUyA9IHRlc3RfbGlibWdtdC5j
Ci10ZXN0X2xpYm1nbXRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLXRlc3Rf
dGltZXJfU09VUkNFUyA9IHRlc3RfdGltZXIuYwotdGVzdF90aW1lcl9MREFERCA9IC4uL3VzcnNj
dHBsaWIvbGlidXNyc2N0cC5sYQotdHNjdHBfU09VUkNFUyA9IHRzY3RwLmMKLXRzY3RwX0xEQURE
ID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1kYXl0aW1lX3NlcnZlcl9TT1VSQ0VTID0g
ZGF5dGltZV9zZXJ2ZXIuYwotZGF5dGltZV9zZXJ2ZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xp
YnVzcnNjdHAubGEKLWRpc2NhcmRfc2VydmVyX1NPVVJDRVMgPSBkaXNjYXJkX3NlcnZlci5jCi1k
aXNjYXJkX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQotZWNob19z
ZXJ2ZXJfU09VUkNFUyA9IGVjaG9fc2VydmVyLmMKLWVjaG9fc2VydmVyX0xEQUREID0gLi4vdXNy
c2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1jbGllbnRfU09VUkNFUyA9IGNsaWVudC5jCi1jbGllbnRf
TERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLXJ0Y3dlYl9TT1VSQ0VTID0gcnRj
d2ViLmMKLXJ0Y3dlYl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQotZWtyX3Nl
cnZlcl9TT1VSQ0VTID0gZWtyX3NlcnZlci5jCi1la3Jfc2VydmVyX0xEQUREID0gLi4vdXNyc2N0
cGxpYi9saWJ1c3JzY3RwLmxhCi1la3JfY2xpZW50X1NPVVJDRVMgPSBla3JfY2xpZW50LmMKLWVr
cl9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLWVrcl9wZWVyX1NP
VVJDRVMgPSBla3JfcGVlci5jCi1la3JfcGVlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNy
c2N0cC5sYQotZWtyX2xvb3BfU09VUkNFUyA9IGVrcl9sb29wLmMKLWVrcl9sb29wX0xEQUREID0g
Li4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1la3JfbG9vcF9vZmZsb2FkX1NPVVJDRVMgPSBl
a3JfbG9vcF9vZmZsb2FkLmMKLWVrcl9sb29wX29mZmxvYWRfTERBREQgPSAuLi91c3JzY3RwbGli
L2xpYnVzcnNjdHAubGEKLWh0dHBfY2xpZW50X1NPVVJDRVMgPSBodHRwX2NsaWVudC5jCi1odHRw
X2NsaWVudF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3By
b2dyYW1zL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL01ha2VmaWxlLm5tYWtlCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMWM0MTFjZWY2ODllYjg4Yjk4YjRmZjY4ZmViNDBmOWI0Zjgz
NjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy9NYWtlZmlsZS5ubWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiArMCwwIEBACi0jDQotIyBD
b3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbg0KLSMNCi0jIEFsbCByaWdodHMg
cmVzZXJ2ZWQuDQotIw0KLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMNCi0jIGFyZSBtZXQ6DQot
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodA0KLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0jICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUN
Ci0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uDQotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KLSMgICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlDQot
IyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4NCi0jDQotIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORA0KLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQ0KLSMg
QVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUNCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQotIyBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUw0K
LSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pDQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KLSMgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQ0KLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRg0KLSMgU1VDSCBEQU1BR0UuDQotIw0KLQ0KLUNGTEFHUz0vVzMg
L1dYIC9JLi5cdXNyc2N0cGxpYg0KLQ0KLUNWQVJTRExMPS1ESU5FVCAtRElORVQ2DQotDQotTElO
S0ZMQUdTPS9MSUJQQVRIOi4uXHVzcnNjdHBsaWIgdXNyc2N0cC5saWINCi0NCi0uYy5vYmo6Og0K
LQkkKENDKSAkKENWQVJTRExMKSAkKENGTEFHUykgLUZkLlwgLWMgJDwNCi0NCi1hbGw6IFwNCi0J
Y2xpZW50IFwNCi0JZGF5dGltZV9zZXJ2ZXIgXA0KLQlkaXNjYXJkX3NlcnZlciBcDQotCWVjaG9f
c2VydmVyIFwNCi0JdHNjdHAgXA0KLQlydGN3ZWIgXA0KLQlla3JfY2xpZW50IFwNCi0JZWtyX3Nl
cnZlciBcDQotCWVrcl9wZWVyIFwNCi0JZWtyX2xvb3AgXA0KLQl0ZXN0X2xpYm1nbXQgXA0KLQlo
dHRwX2NsaWVudA0KLQ0KLWNsaWVudDoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1j
IGNsaWVudC5jDQotCWxpbmsgLW91dDpjbGllbnQuZXhlIGNsaWVudC5vYmogJChMSU5LRkxBR1Mp
DQotDQotZGF5dGltZV9zZXJ2ZXI6DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBk
YXl0aW1lX3NlcnZlci5jDQotCWxpbmsgLW91dDpkYXl0aW1lX3NlcnZlci5leGUgZGF5dGltZV9z
ZXJ2ZXIub2JqICQoTElOS0ZMQUdTKQ0KLQ0KLWRpc2NhcmRfc2VydmVyOg0KLQkkKENDKSAkKENG
TEFHUykgJChDVkFSU0RMTCkgLWMgZGlzY2FyZF9zZXJ2ZXIuYw0KLQlsaW5rIC1vdXQ6ZGlzY2Fy
ZF9zZXJ2ZXIuZXhlIGRpc2NhcmRfc2VydmVyLm9iaiAkKExJTktGTEFHUykNCi0NCi1lY2hvX3Nl
cnZlcjoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVjaG9fc2VydmVyLmMNCi0J
bGluayAtb3V0OmVjaG9fc2VydmVyLmV4ZSBlY2hvX3NlcnZlci5vYmogJChMSU5LRkxBR1MpDQot
DQotdHNjdHA6DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyB0c2N0cC5jDQotCWxp
bmsgLW91dDp0c2N0cC5leGUgdHNjdHAub2JqICQoTElOS0ZMQUdTKQ0KLQ0KLXJ0Y3dlYjoNCi0J
JChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIHJ0Y3dlYi5jDQotCWxpbmsgLW91dDpydGN3
ZWIuZXhlIHJ0Y3dlYi5vYmogJChMSU5LRkxBR1MpDQotDQotZWtyX2NsaWVudDoNCi0JJChDQykg
JChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9jbGllbnQuYw0KLQlsaW5rIC1vdXQ6ZWtyX2Ns
aWVudC5leGUgZWtyX2NsaWVudC5vYmogJChMSU5LRkxBR1MpDQotDQotZWtyX3NlcnZlcjoNCi0J
JChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9zZXJ2ZXIuYw0KLQlsaW5rIC1vdXQ6
ZWtyX3NlcnZlci5leGUgZWtyX3NlcnZlci5vYmogJChMSU5LRkxBR1MpDQotDQotZWtyX3BlZXI6
DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBla3JfcGVlci5jDQotCWxpbmsgLW91
dDpla3JfcGVlci5leGUgZWtyX3BlZXIub2JqICQoTElOS0ZMQUdTKQ0KLQ0KLWVrcl9sb29wOg0K
LQkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX2xvb3AuYw0KLQlsaW5rIC1vdXQ6
ZWtyX2xvb3AuZXhlIGVrcl9sb29wLm9iaiAkKExJTktGTEFHUykNCi0NCi10ZXN0X2xpYm1nbXQ6
DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyB0ZXN0X2xpYm1nbXQuYw0KLQlsaW5r
IC1vdXQ6dGVzdF9saWJtZ210LmV4ZSB0ZXN0X2xpYm1nbXQub2JqICQoTElOS0ZMQUdTKQ0KLQ0K
LWh0dHBfY2xpZW50Og0KLQkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgaHR0cF9jbGll
bnQuYw0KLQlsaW5rIC1vdXQ6aHR0cF9jbGllbnQuZXhlIGh0dHBfY2xpZW50Lm9iaiAkKExJTktG
TEFHUykNCi0NCi1jbGVhbjoNCi0JZGVsIC9GIGNsaWVudC5leGUNCi0JZGVsIC9GIGNsaWVudC5v
YmoNCi0JZGVsIC9GIGRheXRpbWVfc2VydmVyLmV4ZQ0KLQlkZWwgL0YgZGF5dGltZV9zZXJ2ZXIu
b2JqDQotCWRlbCAvRiBkaXNjYXJkX3NlcnZlci5leGUNCi0JZGVsIC9GIGRpc2NhcmRfc2VydmVy
Lm9iag0KLQlkZWwgL0YgZWNob19zZXJ2ZXIuZXhlDQotCWRlbCAvRiBlY2hvX3NlcnZlci5vYmoN
Ci0JZGVsIC9GIHRzY3RwLmV4ZQ0KLQlkZWwgL0YgdHNjdHAub2JqDQotCWRlbCAvRiBydGN3ZWIu
ZXhlDQotCWRlbCAvRiBydGN3ZWIub2JqDQotCWRlbCAvRiBla3JfY2xpZW50LmV4ZQ0KLQlkZWwg
L0YgZWtyX2NsaWVudC5vYmoNCi0JZGVsIC9GIGVrcl9zZXJ2ZXIuZXhlDQotCWRlbCAvRiBla3Jf
c2VydmVyLm9iag0KLQlkZWwgL0YgZWtyX3BlZXIuZXhlDQotCWRlbCAvRiBla3JfcGVlci5vYmoN
Ci0JZGVsIC9GIGVrcl9sb29wLmV4ZQ0KLQlkZWwgL0YgZWtyX2xvb3Aub2JqDQotCWRlbCAvRiB0
ZXN0X2xpYm1nbXQuZXhlDQotCWRlbCAvRiB0ZXN0X2xpYm1nbXQub2JqDQotCWRlbCAvRiBodHRw
X2NsaWVudC5leGUNCi0JZGVsIC9GIGh0dHBfY2xpZW50Lm9iag0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy9jbGllbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC9wcm9ncmFtcy9jbGllbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGRjYWQ2ZjM3YTk1MjQyYWJmNDRkY2EzOTY0Njg5M2Y3NzNhOTdhOS4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvY2xpZW50LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEz
IE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0g
KiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciBy
ZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fw
c19wb3J0XQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lmbmRlZiBfV0lOMzIK
LSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lm
bmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9p
bi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxpby5oPgotI2Vu
ZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi1pbnQgZG9uZSA9IDA7Ci0KLSNpZmRlZiBfV0lO
MzIKLXR5cGVkZWYgY2hhciogY2FkZHJfdDsKLSNlbmRpZgotCi1zdGF0aWMgaW50Ci1yZWNlaXZl
X2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQg
KmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJj
diwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0J
CWRvbmUgPSAxOwotCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwotCX0gZWxzZSB7Ci0jaWZkZWYgX1dJ
TjMyCi0JCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGRhdGEsICh1bnNpZ25lZCBpbnQpZGF0YWxl
bik7Ci0jZWxzZQotCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGRhdGEsIGRhdGFsZW4pIDwg
MCkgewotCQkJcGVycm9yKCJ3cml0ZSIpOwotCQl9Ci0jZW5kaWYKLQkJZnJlZShkYXRhKTsKLQl9
Ci0JcmV0dXJuICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJp
bnRmKGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywg
Y2hhciAqYXJndltdKQotewotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0Jc3RydWN0IHNvY2thZGRy
ICphZGRyLCAqYWRkcnM7Ci0Jc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OwotCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgYWRkcjY7Ci0Jc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLQlzdHJ1Y3Qg
c2N0cHN0YXQgc3RhdDsKLQljaGFyIGJ1ZmZlcls4MF07Ci0JaW50IGksIG47Ci0KLQlpZiAoYXJn
YyA8IDMpIHsKLQkJcHJpbnRmKCIlcyIsICJVc2FnZTogY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90
ZV9wb3J0IGxvY2FsX3BvcnQgbG9jYWxfZW5jYXBzX3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XG4i
KTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChhcmdjID4gNCkgewotCQl1c3JzY3RwX2luaXQo
YXRvaShhcmd2WzRdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9IGVsc2UgewotCQl1c3JzY3Rw
X2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwot
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7Ci0jZW5k
aWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7Ci0JaWYgKChzb2NrID0g
dXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2Vp
dmVfY2IsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zb2Nr
ZXQiKTsKLQl9Ci0JaWYgKGFyZ2MgPiAzKSB7Ci0JCW1lbXNldCgodm9pZCAqKSZhZGRyNiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JCWFk
ZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCWFk
ZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0
b2koYXJndlszXSkpOwotCQlhZGRyNi5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKLQkJaWYgKHVz
cnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIDwgMCkgewotCQkJcGVycm9yKCJiaW5kIik7Ci0JCX0KLQl9Ci0JaWYg
KGFyZ2MgPiA1KSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRw
ZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKLQkJ
ZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7Ci0JCWlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQs
IChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBl
bmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigic2V0c29ja29wdCIpOwotCQl9Ci0JfQotCW1lbXNl
dCgodm9pZCAqKSZhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCW1lbXNl
dCgodm9pZCAqKSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRl
ZiBIQVZFX1NJTl9MRU4KLQlhZGRyNC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRkcjYuc2luNl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQlhZGRyNC5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKLQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCWFkZHI0LnNpbl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JYWRkcjYuc2luNl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2
WzJdKSk7Ci0JaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJndlsxXSwgJmFkZHI2LnNpbjZfYWRk
cikgPT0gMSkgewotCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkcjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0JCQlwZXJyb3Io
InVzcnNjdHBfY29ubmVjdCIpOwotCQl9Ci0JfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwg
YXJndlsxXSwgJmFkZHI0LnNpbl9hZGRyKSA9PSAxKSB7Ci0JCWlmICh1c3JzY3RwX2Nvbm5lY3Qo
c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgewotCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKLQkJfQotCX0gZWxzZSB7
Ci0JCXByaW50ZigiSWxsZWdhbCBkZXN0aW5hdGlvbiBhZGRyZXNzLlxuIik7Ci0JfQotCWlmICgo
biA9IHVzcnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycykpIDwgMCkgewotCQlwZXJyb3Io
InVzcnNjdHBfZ2V0bGFkZHJzIik7Ci0JfSBlbHNlIHsKLQkJYWRkciA9IGFkZHJzOwotCQlwcmlu
dGYoIkxvY2FsIGFkZHJlc3NlczogIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJ
CWlmIChpID4gMCkgewotCQkJCXByaW50ZigiJXMiLCAiLCAiKTsKLQkJCX0KLQkJCXN3aXRjaCAo
YWRkci0+c2FfZmFtaWx5KSB7Ci0JCQljYXNlIEFGX0lORVQ6Ci0JCQl7Ci0JCQkJc3RydWN0IHNv
Y2thZGRyX2luICpzaW47Ci0JCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKLQkJCQljb25z
dCBjaGFyICpuYW1lOwotCi0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0J
CQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FE
RFJTVFJMRU4pOwotCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKLSNpZm5kZWYgSEFWRV9TQV9MRU4K
LQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotI2VuZGlmCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljYXNlIEFG
X0lORVQ2OgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JCQkJY2hhciBi
dWZbSU5FVDZfQUREUlNUUkxFTl07Ci0JCQkJY29uc3QgY2hhciAqbmFtZTsKLQotCQkJCXNpbjYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJbmFtZSA9IGluZXRfbnRvcChBRl9J
TkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKLQkJCQlwcmlu
dGYoIiVzIiwgbmFtZSk7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCQkJYWRkciA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
Ci0jZW5kaWYKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9
Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOwotI2VuZGlmCi0JCX0KLQkJcHJpbnRmKCIuXG4iKTsK
LQkJdXNyc2N0cF9mcmVlbGFkZHJzKGFkZHJzKTsKLQl9Ci0JaWYgKChuID0gdXNyc2N0cF9nZXRw
YWRkcnMoc29jaywgMCwgJmFkZHJzKSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9nZXRwYWRk
cnMiKTsKLQl9IGVsc2UgewotCQlhZGRyID0gYWRkcnM7Ci0JCXByaW50ZigiUGVlciBhZGRyZXNz
ZXM6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlpZiAoaSA+IDApIHsKLQkJ
CQlwcmludGYoIiVzIiwgIiwgIik7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkg
ewotCQkJY2FzZSBBRl9JTkVUOgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwot
CQkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07Ci0JCQkJY29uc3QgY2hhciAqbmFtZTsKLQot
CQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJCW5hbWUgPSBpbmV0X250
b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKLQkJCQlw
cmludGYoIiVzIiwgbmFtZSk7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCQkJYWRkciA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKLSNlbmRpZgotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCXsKLQkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJM
RU5dOwotCQkJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKilhZGRyOwotCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42
X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7Ci0JCQkJcHJpbnRmKCIlcyIsIG5hbWUpOwot
I2lmbmRlZiBIQVZFX1NBX0xFTgotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotI2VuZGlmCi0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotI2lmZGVmIEhBVkVfU0Ff
TEVOCi0JCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+
c2FfbGVuKTsKLSNlbmRpZgotCQl9Ci0JCXByaW50ZigiLlxuIik7Ci0JCXVzcnNjdHBfZnJlZXBh
ZGRycyhhZGRycyk7Ci0JfQotCXdoaWxlICgoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
c3RkaW4pICE9IE5VTEwpICYmICFkb25lKSB7Ci0JCXVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVy
LCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lORk8sIDAp
OwotCX0KLQlpZiAoIWRvbmUpIHsKLQkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9X
UikgPCAwKSB7Ci0JCQlwZXJyb3IoInVzcnNjdHBfc2h1dGRvd24iKTsKLQkJfQotCX0KLQl3aGls
ZSAoIWRvbmUpIHsKLSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMSoxMDAwKTsKLSNlbHNlCi0JCXNs
ZWVwKDEpOwotI2VuZGlmCi0JfQotCXVzcnNjdHBfZ2V0X3N0YXQoJnN0YXQpOwotCXByaW50Zigi
TnVtYmVyIG9mIHBhY2tldHMgKHNlbnQvcmVjZWl2ZWQpOiAoJXUvJXUpLlxuIiwKLQkgICAgICAg
c3RhdC5zY3Rwc19vdXRwYWNrZXRzLCBzdGF0LnNjdHBzX2lucGFja2V0cyk7Ci0Jd2hpbGUgKHVz
cnNjdHBfZmluaXNoKCkgIT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNl
bHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQotCXJldHVybigwKTsKLX0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9w
cm9ncmFtcy9kYXl0aW1lX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2RheXRpbWVfc2VydmVyLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTBmY2I0NmQyZTRlZmUyNzZlMmZlZjhjYTIyYjVh
YmIzMzE1ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3By
b2dyYW1zL2RheXRpbWVfc2VydmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgot
ICogVXNhZ2U6IGRheXRpbWVfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNh
cHNfcG9ydF0KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dB
Uk5JTkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8dW5p
c3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K
LSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHVzcnNjdHAuaD4KLQot
dm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZhX2xpc3Qg
YXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1hdCwgYXApOwotCXZh
X2VuZChhcCk7Ci19Ci0KLSNkZWZpbmUgREFZVElNRV9QUElEIDQwCi1pbnQKLW1haW4oaW50IGFy
Z2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAqY29ubl9zb2NrOwot
CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7
Ci0Jc29ja2xlbl90IGFkZHJfbGVuOwotCWNoYXIgYnVmZmVyWzgwXTsKLQl0aW1lX3Qgbm93Owot
CXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKLQotCWlmIChhcmdjID4gMSkgewotCQl1c3Jz
Y3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9IGVsc2Ugewot
CQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9Ci0jaWZkZWYgU0NU
UF9ERUJVRwotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9O
RSk7Ci0jZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7Ci0KLQlp
ZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19T
Q1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewotCQlwZXJyb3IoInVzcnNjdHBf
c29ja2V0Iik7Ci0JfQotCWlmIChhcmdjID4gMikgewotCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOwotCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFt
aWx5ID0gQUZfSU5FVDsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7
Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9U
RV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigic2V0c29ja29wdCIp
OwotCQl9Ci0JfQotCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwot
CWFkZHIuc2luX3BvcnQgPSBodG9ucygxMyk7Ci0JYWRkci5zaW5fYWRkci5zX2FkZHIgPSBodG9u
bChJTkFERFJfQU5ZKTsKLQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoInVz
cnNjdHBfYmluZCIpOwotCX0KLQlpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7Ci0J
CXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKLQl9Ci0Jd2hpbGUgKDEpIHsKLQkJYWRkcl9sZW4g
PSAwOwotCQlpZiAoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIE5VTEwsICZhZGRy
X2xlbikpID09IE5VTEwpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXRpbWUoJm5vdyk7Ci0jaWZk
ZWYgX1dJTjMyCi0JCV9zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMiLCBjdGlt
ZSgmbm93KSk7Ci0jZWxzZQotCQlzbnByaW50ZihidWZmZXIsIHNpemVvZihidWZmZXIpLCAiJXMi
LCBjdGltZSgmbm93KSk7Ci0jZW5kaWYKLQkJc25kaW5mby5zbmRfc2lkID0gMDsKLQkJc25kaW5m
by5zbmRfZmxhZ3MgPSAwOwotCQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFZVElNRV9QUElE
KTsKLQkJc25kaW5mby5zbmRfY29udGV4dCA9IDA7Ci0JCXNuZGluZm8uc25kX2Fzc29jX2lkID0g
MDsKLQkJdXNyc2N0cF9zZW5kdihjb25uX3NvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5V
TEwsIDAsICh2b2lkICopJnNuZGluZm8sCi0JCSAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCk7Ci0JCXVzcnNj
dHBfY2xvc2UoY29ubl9zb2NrKTsKLQl9Ci0JdXNyc2N0cF9jbG9zZShzb2NrKTsKLQl3aGlsZSAo
dXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwot
I2Vsc2UKLQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjdjZDVmYWExZTY5ZGI4MWQ3YzU5ZDcwOWY0
NjFmNzZlODcxNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNDggKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0v
KgotICogVXNhZ2U6IGRpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9l
bmNhcHNfcG9ydF0KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05P
X1dBUk5JTkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5o
PgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEv
aW5ldC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIEJVRkZFUl9T
SVpFIDEwMjQwCi0KLWNvbnN0IGludCB1c2VfY2IgPSAwOwotCi1zdGF0aWMgaW50Ci1yZWNlaXZl
X2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQg
KmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJj
diwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQljaGFyIG5hbWVidWZbSU5FVDZfQURE
UlNUUkxFTl07Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1aW50MTZfdCBwb3J0OwotCi0JaWYgKGRh
dGEpIHsKLQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgewotCQkJcHJpbnRmKCJOb3Rp
ZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwgKGludClkYXRhbGVuKTsKLQkJfSBl
bHNlIHsKLQkJCXN3aXRjaCAoYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQlj
YXNlIEFGX0lORVQ6Ci0JCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmYWRkci5zaW4uc2lu
X2FkZHIsIG5hbWVidWYsIElORVRfQUREUlNUUkxFTik7Ci0JCQkJcG9ydCA9IG50b2hzKGFkZHIu
c2luLnNpbl9wb3J0KTsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNl
IEFGX0lORVQ2OgotCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjYuc2lu
Nl9hZGRyLCBuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOKSwKLQkJCQlwb3J0ID0gbnRvaHMoYWRk
ci5zaW42LnNpbjZfcG9ydCk7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWNhc2UgQUZfQ09OTjoK
LSNpZmRlZiBfV0lOMzIKLQkJCQlfc25wcmludGYobmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiwg
IiVwIiwgYWRkci5zY29ubi5zY29ubl9hZGRyKTsKLSNlbHNlCi0JCQkJc25wcmludGYobmFtZWJ1
ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwgYWRkci5zY29ubi5zY29ubl9hZGRyKTsKLSNlbmRp
ZgotCQkJCW5hbWUgPSBuYW1lYnVmOwotCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNjb25uLnNjb25u
X3BvcnQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQluYW1lID0gTlVMTDsKLQkJCQlw
b3J0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCBy
ZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQ
UElEICV1LCBjb250ZXh0ICV1LlxuIiwKLQkJCSAgICAgICAoaW50KWRhdGFsZW4sCi0JCQkgICAg
ICAgbmFtZSwKLQkJCSAgICAgICBwb3J0LAotCQkJICAgICAgIHJjdi5yY3Zfc2lkLAotCQkJICAg
ICAgIHJjdi5yY3Zfc3NuLAotCQkJICAgICAgIHJjdi5yY3ZfdHNuLAotCQkJICAgICAgIG50b2hs
KHJjdi5yY3ZfcHBpZCksCi0JCQkgICAgICAgcmN2LnJjdl9jb250ZXh0KTsKLQkJfQotCQlmcmVl
KGRhdGEpOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi12b2lkCi1kZWJ1Z19wcmludGYoY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmb3Jt
YXQpOwotCXZwcmludGYoZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotaW50Ci1tYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0Jc3RydWN0IHNvY2tldCAqc29jazsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0Jc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLQlz
dHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKLQl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBf
QVNTT0NfQ0hBTkdFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJf
Q0hBTkdFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVfRVJST1IsCi0J
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAotCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCi0JICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9OwotCXVuc2lnbmVk
IGludCBpOwotCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OwotCWNvbnN0IGludCBvbiA9IDE7
Ci0Jc3NpemVfdCBuOwotCWludCBmbGFnczsKLQlzb2NrbGVuX3QgZnJvbV9sZW47Ci0JY2hhciBi
dWZmZXJbQlVGRkVSX1NJWkVdOwotCWNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKLQlzb2Nr
bGVuX3QgaW5mb2xlbjsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdl9pbmZvOwotCXVuc2lnbmVk
IGludCBpbmZvdHlwZTsKLQotCWlmIChhcmdjID4gMSkgewotCQl1c3JzY3RwX2luaXQoYXRvaShh
cmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9IGVsc2UgewotCQl1c3JzY3RwX2luaXQo
OTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwotCXVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfQUxMKTsKLSNlbmRpZgotCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKLQotCWlmICgoc29jayA9IHVzcnNj
dHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQLCB1c2VfY2I/
cmVjZWl2ZV9jYjpOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewotCQlwZXJyb3IoInVz
cnNjdHBfc29ja2V0Iik7Ci0JfQotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9U
T19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiwgKGNvbnN0IHZvaWQqKSZvbiwgKHNv
Y2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0
IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSIik7Ci0JfQotCW1lbXNldCgmYXYsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOwotCWF2LmFzc29jX2lkID0gU0NUUF9BTExfQVNT
T0M7Ci0JYXYuYXNzb2NfdmFsdWUgPSA0NzsKLQotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQsIChjb25zdCB2b2lkKikmYXYsIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7Ci0JCXBlcnJvcigidXNy
c2N0cF9zZXRzb2Nrb3B0IFNDVFBfQ09OVEVYVCIpOwotCX0KLQlpZiAodXNyc2N0cF9zZXRzb2Nr
b3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNWSU5GTywgJm9uLCBzaXplb2YoaW50
KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfUkVDVlJDVklORk8i
KTsKLQl9Ci0JaWYgKGFyZ2MgPiAyKSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBB
Rl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JCWlm
ICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBf
RU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0
IFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCIpOwotCQl9Ci0JfQotCW1lbXNldCgmZXZlbnQs
IDAsIHNpemVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9GVVRVUkVfQVNT
T0M7Ci0JZXZlbnQuc2Vfb24gPSAxOwotCWZvciAoaSA9IDA7IGkgPCAodW5zaWduZWQgaW50KShz
aXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCkpOyBpKyspIHsKLQkJZXZlbnQuc2Vf
dHlwZSA9IGV2ZW50X3R5cGVzW2ldOwotCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQ
UFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnQp
KSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKLQkJ
fQotCX0KLQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRkci5zaW42X2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCWFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
LQlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKDkpOwotCWFkZHIuc2luNl9hZGRyID0gaW42YWRkcl9h
bnk7Ci0JaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9iaW5k
Iik7Ci0JfQotCWlmICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8IDApIHsKLQkJcGVycm9yKCJ1
c3JzY3RwX2xpc3RlbiIpOwotCX0KLQl3aGlsZSAoMSkgewotCQlpZiAodXNlX2NiKSB7Ci0jaWZk
ZWYgX1dJTjMyCi0JCQlTbGVlcCgxKjEwMDApOwotI2Vsc2UKLQkJCXNsZWVwKDEpOwotI2VuZGlm
Ci0JCX0gZWxzZSB7Ci0JCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOwotCQkJZmxhZ3MgPSAwOwotCQkJaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX3JjdmluZm8pOwotCQkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgKHZvaWQq
KWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xl
biwgKHZvaWQgKikmcmN2X2luZm8sCi0JCQkgICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmlu
Zm90eXBlLCAmZmxhZ3MpOwotCQkJaWYgKG4gPiAwKSB7Ci0JCQkJaWYgKGZsYWdzICYgTVNHX05P
VElGSUNBVElPTikgewotCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWxsdSBy
ZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ
aWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgewotCQkJCQkJcHJpbnRmKCJNc2cg
b2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04g
JXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxldGUgJWQuXG4iLAotCQkJ
CQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCi0JCQkJCQkgICAgICAgIGluZXRfbnRv
cChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRv
aHMoYWRkci5zaW42X3BvcnQpLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc2lkLAotCQkJ
CQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zf
dHNuLAotCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3ZfcHBpZCksCi0JCQkJCQkgICAg
ICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAotCQkJCQkJICAgICAgICAoZmxhZ3MgJiBNU0dfRU9S
KSA/IDEgOiAwKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAl
bGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRlICVkLlxuIiwKLQkJCQkJCSAgICAgICAg
KHVuc2lnbmVkIGxvbmcgbG9uZyluLAotCQkJCQkJICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYs
ICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2lu
Nl9wb3J0KSwKLQkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7Ci0JCQkJ
CX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXVzcnNj
dHBfY2xvc2Uoc29jayk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewotI2lmZGVm
IF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQot
CXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWNob19zZXJ2ZXIuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy9lY2hvX3NlcnZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZWFiMTkzYTVk
MzQ1OGE4NzA1MDM2MTcyOTg4OGYxMmNjYTFhZjEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCisrKyAvZGV2L251bGwK
QEAgLTEsMjc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVs
IFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNI
QUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotLyoKLSAqIFVzYWdlOiBkaXNjYXJkX3NlcnZlciBbbG9jYWxfZW5jYXBz
X3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCi0gKi8KLQotI2lmZGVmIF9XSU4zMgotI2RlZmlu
ZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcu
aD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8dW5p
c3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K
LSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHVzcnNjdHAuaD4KLQot
I2RlZmluZSBCVUZGRVJfU0laRSAxMDI0MAotCi1jb25zdCBpbnQgdXNlX2NiID0gMDsKLQotc3Rh
dGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tz
dG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0
IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0JY2hhciBu
YW1lYnVmW0lORVQ2X0FERFJTVFJMRU5dOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci0JdWludDE2X3Qg
cG9ydDsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsK
LQkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQp
ZGF0YWxlbik7Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGFkZHIuc2Euc2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5F
VCwgJmFkZHIuc2luLnNpbl9hZGRyLCBuYW1lYnVmLCBJTkVUX0FERFJTVFJMRU4pOwotCQkJCXBv
cnQgPSBudG9ocyhhZGRyLnNpbi5zaW5fcG9ydCk7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRl
ZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2
LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiksCi0JCQkJ
cG9ydCA9IG50b2hzKGFkZHIuc2luNi5zaW42X3BvcnQpOwotCQkJCWJyZWFrOwotI2VuZGlmCi0J
CQljYXNlIEFGX0NPTk46Ci0jaWZkZWYgX1dJTjMyCi0JCQkJX3NucHJpbnRmKG5hbWVidWYsIElO
RVQ2X0FERFJTVFJMRU4sICIlcCIsIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkcik7Ci0jZWxzZQotCQkJ
CXNucHJpbnRmKG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIGFkZHIuc2Nvbm4uc2Nv
bm5fYWRkcik7Ci0jZW5kaWYKLQkJCQluYW1lID0gbmFtZWJ1ZjsKLQkJCQlwb3J0ID0gbnRvaHMo
YWRkci5zY29ubi5zY29ubl9wb3J0KTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJbmFt
ZSA9IE5VTEw7Ci0JCQkJcG9ydCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlwcmludGYoIk1z
ZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04g
JXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldS5cbiIsCi0JCQkgICAgICAgKGludClk
YXRhbGVuLAotCQkJICAgICAgIG5hbWUsCi0JCQkgICAgICAgcG9ydCwKLQkJCSAgICAgICByY3Yu
cmN2X3NpZCwKLQkJCSAgICAgICByY3YucmN2X3NzbiwKLQkJCSAgICAgICByY3YucmN2X3RzbiwK
LQkJCSAgICAgICBudG9obChyY3YucmN2X3BwaWQpLAotCQkJICAgICAgIHJjdi5yY3ZfY29udGV4
dCk7Ci0JCQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQkJc3RydWN0IHNjdHBfc25kaW5mbyBz
bmRfaW5mbzsKLQotCQkJCXNuZF9pbmZvLnNuZF9zaWQgPSByY3YucmN2X3NpZDsKLQkJCQlzbmRf
aW5mby5zbmRfZmxhZ3MgPSAwOwotCQkJCWlmIChyY3YucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVS
RUQpIHsKLQkJCQkJc25kX2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOwotCQkJCX0K
LQkJCQlzbmRfaW5mby5zbmRfcHBpZCA9IHJjdi5yY3ZfcHBpZDsKLQkJCQlzbmRfaW5mby5zbmRf
Y29udGV4dCA9IDA7Ci0JCQkJc25kX2luZm8uc25kX2Fzc29jX2lkID0gcmN2LnJjdl9hc3NvY19p
ZDsKLQkJCQlpZiAodXNyc2N0cF9zZW5kdihzb2NrLCBkYXRhLCBkYXRhbGVuLCBOVUxMLCAwLCAm
c25kX2luZm8sIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZP
LCAwKSA8IDApIHsKLQkJCQkJcGVycm9yKCJzY3RwX3NlbmR2Iik7Ci0JCQkJfQotCQkJfQotCQl9
Ci0JCWZyZWUoZGF0YSk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZvaWQKLWRlYnVnX3ByaW50
Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQo
YXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2Nr
OwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5j
YXBzOwotCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OwotCXVpbnQxNl90IGV2ZW50X3R5cGVzW10g
PSB7U0NUUF9BU1NPQ19DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BF
RVJfQUREUl9DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9F
UlJPUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCi0J
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07Ci0J
dW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7Ci0JY29uc3QgaW50
IG9uID0gMTsKLQlzc2l6ZV90IG47Ci0JaW50IGZsYWdzOwotCXNvY2tsZW5fdCBmcm9tX2xlbjsK
LQljaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07Ci0JY2hhciBuYW1lW0lORVQ2X0FERFJTVFJMRU5d
OwotCXNvY2tsZW5fdCBpbmZvbGVuOwotCXN0cnVjdCBzY3RwX3JjdmluZm8gcmN2X2luZm87Ci0J
dW5zaWduZWQgaW50IGluZm90eXBlOwotCi0JaWYgKGFyZ2MgPiAxKSB7Ci0JCXVzcnNjdHBfaW5p
dChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0gZWxzZSB7Ci0JCXVzcnNj
dHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0KLSNpZmRlZiBTQ1RQX0RFQlVH
Ci0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKLSNl
bmRpZgotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKLQotCWlmICgoc29j
ayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9UT19TQ1RQ
LCB1c2VfY2I/cmVjZWl2ZV9jYjpOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewotCQlw
ZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JfQotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiwgKGNvbnN0IHZvaWQq
KSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9z
ZXRzb2Nrb3B0IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSIik7Ci0JfQotCW1lbXNldCgmYXYs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOwotCWF2LmFzc29jX2lkID0gU0NU
UF9BTExfQVNTT0M7Ci0JYXYuYXNzb2NfdmFsdWUgPSA0NzsKLQotCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQsIChjb25zdCB2b2lkKikmYXYs
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7Ci0JCXBl
cnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfQ09OVEVYVCIpOwotCX0KLQlpZiAodXNyc2N0
cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNWSU5GTywgJm9uLCBz
aXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfUkVD
VlJDVklORk8iKTsKLQl9Ci0JaWYgKGFyZ2MgPiAyKSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19m
YW1pbHkgPSBBRl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JF
TU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9z
ZXRzb2Nrb3B0IFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCIpOwotCQl9Ci0JfQotCW1lbXNl
dCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9G
VVRVUkVfQVNTT0M7Ci0JZXZlbnQuc2Vfb24gPSAxOwotCWZvciAoaSA9IDA7IGkgPCAodW5zaWdu
ZWQgaW50KShzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCkpOyBpKyspIHsKLQkJ
ZXZlbnQuc2VfdHlwZSA9IGV2ZW50X3R5cGVzW2ldOwotCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2Yoc3RydWN0IHNj
dHBfZXZlbnQpKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfRVZF
TlQiKTsKLQkJfQotCX0KLQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRkci5zaW42X2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCWFkZHIuc2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKLQlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKDcpOwotCWFkZHIuc2luNl9hZGRyID0g
aW42YWRkcl9hbnk7Ci0JaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICop
JmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNy
c2N0cF9iaW5kIik7Ci0JfQotCWlmICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8IDApIHsKLQkJ
cGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOwotCX0KLQl3aGlsZSAoMSkgewotCQlpZiAodXNlX2Ni
KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQlTbGVlcCgxKjEwMDApOwotI2Vsc2UKLQkJCXNsZWVwKDEp
OwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJZmxhZ3MgPSAwOwotCQkJaW5mb2xlbiA9IChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOwotCQkJbiA9IHVzcnNjdHBfcmVjdnYoc29j
aywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIs
ICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCi0JCQkgICAgICAgICAgICAgICAgICAmaW5m
b2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwotCQkJaWYgKG4gPiAwKSB7Ci0JCQkJaWYgKGZsYWdz
ICYgTVNHX05PVElGSUNBVElPTikgewotCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5n
dGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7Ci0JCQkJfSBlbHNl
IHsKLQkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgewotCQkJCQkJcHJp
bnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJXUg
d2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxldGUgJWQu
XG4iLAotCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCi0JCQkJCQkgICAgICAg
IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RS
TEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zf
c2lkLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAotCQkJCQkJICAgICAgICByY3Zf
aW5mby5yY3ZfdHNuLAotCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3ZfcHBpZCksCi0J
CQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAotCQkJCQkJICAgICAgICAoZmxhZ3Mg
JiBNU0dfRU9SKSA/IDEgOiAwKTsKLQkJCQkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKLQkJCQkJ
CQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZF9pbmZvOwotCi0JCQkJCQkJc25kX2luZm8uc25kX3Np
ZCA9IHJjdl9pbmZvLnJjdl9zaWQ7Ci0JCQkJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsKLQkJ
CQkJCQlpZiAocmN2X2luZm8ucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKLQkJCQkJCQkJ
c25kX2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOwotCQkJCQkJCX0KLQkJCQkJCQlz
bmRfaW5mby5zbmRfcHBpZCA9IHJjdl9pbmZvLnJjdl9wcGlkOwotCQkJCQkJCXNuZF9pbmZvLnNu
ZF9jb250ZXh0ID0gMDsKLQkJCQkJCQlzbmRfaW5mby5zbmRfYXNzb2NfaWQgPSByY3ZfaW5mby5y
Y3ZfYXNzb2NfaWQ7Ci0JCQkJCQkJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVyLCAoc2l6
ZV90KW4sIE5VTEwsIDAsICZzbmRfaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7Ci0JCQkJCQkJCXBlcnJvcigi
c2N0cF9zZW5kdiIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXBy
aW50ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRlICVk
LlxuIiwKLQkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAotCQkJCQkJICAgICAg
ICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNU
UkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKLQkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNH
X0VPUikgPyAxIDogMCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwot
CQkJfQotCQl9Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmlu
aXNoKCkgIT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNs
ZWVwKDEpOwotI2VuZGlmCi0JfQotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMv
ZWtyX2NsaWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9jbGllbnQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNWNlZjQwYzU5NGMzZTY4MGM0Y2Q3MTlhYjA0NTVkYTAwMzNlMjA0Zi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWtyX2NsaWVu
dC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlN
RUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBf
Q1JUX1NFQ1VSRV9OT19XQVJOSU5HUwotI2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4K
LSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3Nv
Y2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4K
LSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5o
PgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIE1BWF9QQUNLRVRfU0la
RSAoMTw8MTYpCi0jZGVmaW5lIEJVRkZFUl9TSVpFIDgwCi0jZGVmaW5lIERJU0NBUkRfUFBJRCAz
OQotCi0jaWZkZWYgX1dJTjMyCi1zdGF0aWMgRFdPUkQgV0lOQVBJCi0jZWxzZQotc3RhdGljIHZv
aWQgKgotI2VuZGlmCi1oYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCi17Ci0jaWZkZWYgX1dJTjMy
Ci0JU09DS0VUICpmZHA7Ci0jZWxzZQotCWludCAqZmRwOwotI2VuZGlmCi0JY2hhciAqZHVtcF9i
dWY7Ci0Jc3NpemVfdCBsZW5ndGg7Ci0JY2hhciBidWZbTUFYX1BBQ0tFVF9TSVpFXTsKLQotI2lm
ZGVmIF9XSU4zMgotCWZkcCA9IChTT0NLRVQgKilhcmc7Ci0jZWxzZQotCWZkcCA9IChpbnQgKilh
cmc7Ci0jZW5kaWYKLQlmb3IgKDs7KSB7Ci0jaWYgZGVmaW5lZChfX05ldEJTRF9fKQotCQlwdGhy
ZWFkX3Rlc3RjYW5jZWwoKTsKLSNlbmRpZgotCQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZiwgTUFY
X1BBQ0tFVF9TSVpFLCAwKTsKLQkJaWYgKGxlbmd0aCA+IDApIHsKLQkJCWlmICgoZHVtcF9idWYg
PSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCAoc2l6ZV90KWxlbmd0aCwgU0NUUF9EVU1QX0lOQk9V
TkQpKSAhPSBOVUxMKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmKTsKLQkJ
CQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsKLQkJCX0KLQkJCXVzcnNjdHBfY29u
bmlucHV0KGZkcCwgYnVmLCAoc2l6ZV90KWxlbmd0aCwgMCk7Ci0JCX0KLQl9Ci0jaWZkZWYgX1dJ
TjMyCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAoTlVMTCk7Ci0jZW5kaWYKLX0KLQotc3Rh
dGljIGludAotY29ubl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAqYnVmLCBzaXplX3QgbGVuZ3Ro
LCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpCi17Ci0JY2hhciAqZHVtcF9idWY7Ci0jaWZk
ZWYgX1dJTjMyCi0JU09DS0VUICpmZHA7Ci0jZWxzZQotCWludCAqZmRwOwotI2VuZGlmCi0KLSNp
ZmRlZiBfV0lOMzIKLQlmZHAgPSAoU09DS0VUICopYWRkcjsKLSNlbHNlCi0JZmRwID0gKGludCAq
KWFkZHI7Ci0jZW5kaWYKLQlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1Ziwg
bGVuZ3RoLCBTQ1RQX0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7Ci0JCWZwcmludGYoc3RkZXJy
LCAiJXMiLCBkdW1wX2J1Zik7Ci0JCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwot
CX0KLSNpZmRlZiBfV0lOMzIKLQlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9
PSBTT0NLRVRfRVJST1IpIHsKLQkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQot
CWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKLQkJcmV0dXJuIChlcnJubyk7
Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotc3RhdGljIGludAot
cmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRy
LCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2
aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0KLQlpZiAoZGF0YSkgewot
CQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQlwcmludGYoIk5vdGlmaWNhdGlv
biBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4pOwotCQl9IGVsc2Ugewot
CQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0g
JXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldS5cbiIsCi0JCQkg
ICAgICAgKGludClkYXRhbGVuLAotCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKLQkJ
CSAgICAgICBudG9ocyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAotCQkJICAgICAgIHJjdi5yY3Zf
c2lkLAotCQkJICAgICAgIHJjdi5yY3Zfc3NuLAotCQkJICAgICAgIHJjdi5yY3ZfdHNuLAotCQkJ
ICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCi0JCQkgICAgICAgcmN2LnJjdl9jb250ZXh0KTsK
LQkJfQotCQlmcmVlKGRhdGEpOwotCX0gZWxzZSB7Ci0JCXVzcnNjdHBfZGVyZWdpc3Rlcl9hZGRy
ZXNzKHVscF9pbmZvKTsKLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQl9Ci0JcmV0dXJuICgxKTsK
LX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZh
X2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1hdCwgYXAp
OwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot
ewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47
Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUIGZkOwotI2Vsc2UKLQlpbnQgZmQ7Ci0jZW5kaWYKLQlz
dHJ1Y3Qgc29ja2V0ICpzOwotI2lmZGVmIF9XSU4zMgotCUhBTkRMRSB0aWQ7Ci0jZWxzZQotCXB0
aHJlYWRfdCB0aWQ7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87Ci0JY2hh
ciBidWZmZXJbQlVGRkVSX1NJWkVdOwotI2lmZGVmIF9XSU4zMgotCVdTQURBVEEgd3NhRGF0YTsK
LSNlbmRpZgotCi0JaWYgKGFyZ2MgPCA0KSB7Ci0JCXByaW50ZigiZXJyb3I6IHRoaXMgcHJvZ3Jh
bSByZXF1aXJlcyA0IGFyZ3VtZW50cyFcbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEp
ICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7Ci0JCWV4aXQgKEVYSVRf
RkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBkZWJ1
Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICovCi0jaWZkZWYg
X1dJTjMyCi0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VE
UCkpID09IElOVkFMSURfU09DS0VUKSB7Ci0JCXByaW50Zigic29ja2V0KCkgZmFpbGVkIHdpdGgg
ZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZkID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAwKSB7Ci0JCXBlcnJv
cigic29ja2V0Iik7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9T
SU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRp
ZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotCWlmICghaW5ldF9wdG9u
KEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7Ci0JCXByaW50ZigiZXJy
b3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotI2lmZGVmIF9XSU4zMgot
CWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImJpbmQoKSBmYWlsZWQgd2l0
aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9Ci0jZWxzZQotCWlmIChiaW5k
KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
IDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQl9Ci0jZW5kaWYKLQltZW1zZXQoJnNpbiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
LSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOwotI2VuZGlmCi0Jc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7Ci0J
aWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsK
LQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKLQkJZXhpdCgxKTsKLQl9Ci0j
aWZkZWYgX1dJTjMyCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50Zigi
Y29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwot
CX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBlcnJvcigiY29ubmVjdCIpOwotCX0K
LSNlbmRpZgotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1
Z19vbihTQ1RQX0RFQlVHX05PTkUpOwotI2VuZGlmCi0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
ZWNuX2VuYWJsZSgwKTsKLQl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOwot
I2lmZGVmIF9XSU4zMgotCXRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tl
dHMsICh2b2lkICopJmZkLCAwLCBOVUxMKTsKLSNlbHNlCi0JcHRocmVhZF9jcmVhdGUoJnRpZCwg
TlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCk7Ci0jZW5kaWYKLQlpZiAoKHMgPSB1
c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZl
X2NiLCBOVUxMLCAwLCAmZmQpKSA9PSBOVUxMKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zb2NrZXQi
KTsKLQl9Ci0KLQltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
KTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVmIEhBVkVfU0NPTk5fTEVO
Ci0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRp
ZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucygwKTsKLQlzY29ubi5zY29ubl9hZGRyID0gTlVM
TDsKLQlpZiAodXNyc2N0cF9iaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIp
OwotCX0KLQotCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikp
OwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4K
LQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlm
Ci0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUwMDEpOwotCXNjb25uLnNjb25uX2FkZHIgPSAm
ZmQ7Ci0JaWYgKHVzcnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2Nv
bm5lY3QiKTsKLQl9Ci0JbWVtc2V0KGJ1ZmZlciwgJ0EnLCBCVUZGRVJfU0laRSk7Ci0Jc25kaW5m
by5zbmRfc2lkID0gMTsKLQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7Ci0Jc25kaW5mby5zbmRfcHBp
ZCA9IGh0b25sKERJU0NBUkRfUFBJRCk7Ci0Jc25kaW5mby5zbmRfY29udGV4dCA9IDA7Ci0Jc25k
aW5mby5zbmRfYXNzb2NfaWQgPSAwOwotCWlmICh1c3JzY3RwX3NlbmR2KHMsIGJ1ZmZlciwgQlVG
RkVSX1NJWkUsIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCi0JICAgICAgICAgICAgICAgICAg
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5G
TywgMCkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOwotCX0KLQotCXVzcnNjdHBf
c2h1dGRvd24ocywgU0hVVF9XUik7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewot
I2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlm
Ci0JfQotI2lmZGVmIF9XSU4zMgotCVRlcm1pbmF0ZVRocmVhZCh0aWQsIDApOwotCVdhaXRGb3JT
aW5nbGVPYmplY3QodGlkLCBJTkZJTklURSk7Ci0JaWYgKGNsb3Nlc29ja2V0KGZkKSA9PSBTT0NL
RVRfRVJST1IpIHsKLQkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAl
ZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLQlXU0FDbGVhbnVwKCk7Ci0jZWxzZQotCXB0
aHJlYWRfY2FuY2VsKHRpZCk7Ci0JcHRocmVhZF9qb2luKHRpZCwgTlVMTCk7Ci0JaWYgKGNsb3Nl
KGZkKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCX0KLSNlbmRpZgotCXJldHVybiAoMCk7
Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWtyX2xvb3AuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfbG9vcC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OThlODk5MWI4N2Q4NWQ0ZDJhYWM5NzU1Mzdh
YTAxZWY5MTMwMGRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9wcm9ncmFtcy9la3JfbG9vcC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTM3ICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVm
IF9XSU4zMgotI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwotI2VuZGlmCi0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZm5kZWYgX1dJTjMy
Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNs
dWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJlYWQu
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNp
bmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVm
aW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCi0jZGVmaW5lIExJTkVfTEVOR1RIICgxPDwyMCkK
LSNkZWZpbmUgRElTQ0FSRF9QUElEIDM5Ci0KLSNpZmRlZiBfV0lOMzIKLXN0YXRpYyBEV09SRCBX
SU5BUEkKLSNlbHNlCi1zdGF0aWMgdm9pZCAqCi0jZW5kaWYKLWhhbmRsZV9wYWNrZXRzKHZvaWQg
KmFyZykKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7
Ci0jZW5kaWYKLQljaGFyICpkdW1wX2J1ZjsKLQlzc2l6ZV90IGxlbmd0aDsKLQljaGFyIGJ1ZltN
QVhfUEFDS0VUX1NJWkVdOwotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFyZzsK
LSNlbHNlCi0JZmRwID0gKGludCAqKWFyZzsKLSNlbmRpZgotCWZvciAoOzspIHsKLSNpZiBkZWZp
bmVkKF9fTmV0QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0
aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAobGVuZ3RoID4g
MCkgewotCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3Qp
bGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKLQkJCQkvL2ZwcmludGYoc3Rk
ZXJyLCAiJXMiLCBkdW1wX2J1Zik7Ci0JCQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1
Zik7Ci0JCQl9Ci0JCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1ZiwgKHNpemVfdClsZW5ndGgs
IDApOwotCQl9Ci0JfQotI2lmZGVmIF9XSU4zMgotCXJldHVybiAwOwotI2Vsc2UKLQlyZXR1cm4g
KE5VTEwpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQKLWNvbm5fb3V0cHV0KHZvaWQgKmFkZHIs
IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKQot
ewotCWNoYXIgKmR1bXBfYnVmOwotI2lmZGVmIF9XSU4zMgotCVNPQ0tFVCAqZmRwOwotI2Vsc2UK
LQlpbnQgKmZkcDsKLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFk
ZHI7Ci0jZWxzZQotCWZkcCA9IChpbnQgKilhZGRyOwotI2VuZGlmCi0JaWYgKChkdW1wX2J1ZiA9
IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIGxlbmd0aCwgU0NUUF9EVU1QX09VVEJPVU5EKSkgIT0g
TlVMTCkgewotCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7Ci0JCXVzcnNjdHBf
ZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwotCX0KLSNpZmRlZiBfV0lOMzIKLQlpZiAoc2VuZCgq
ZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcmV0dXJuIChX
U0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVuZ3RoLCAw
KSA8IDApIHsKLQkJcmV0dXJuIChlcnJubyk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlyZXR1cm4g
KDApOwotCX0KLX0KLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXpl
X3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxw
X2luZm8pCi17Ci0JcHJpbnRmKCJNZXNzYWdlICVwIHJlY2VpdmVkIG9uIHNvY2sgPSAlcC5cbiIs
IGRhdGEsICh2b2lkICopc29jayk7Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pID09IDApIHsKLQkJCXByaW50ZigiTWVzc3NhZ2Ugb2YgbGVuZ3RoICVkIHJl
Y2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJ
RCAldSwgY29udGV4dCAldSwgZmxhZ3MgJXguXG4iLAotCQkJICAgICAgIChpbnQpZGF0YWxlbiwK
LQkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCi0JCQkgICAgICAgbnRvaHMoYWRkci5z
Y29ubi5zY29ubl9wb3J0KSwKLQkJCSAgICAgICByY3YucmN2X3NpZCwKLQkJCSAgICAgICByY3Yu
cmN2X3NzbiwKLQkJCSAgICAgICByY3YucmN2X3RzbiwKLQkJCSAgICAgICBudG9obChyY3YucmN2
X3BwaWQpLAotCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCwKLQkJCSAgICAgICBmbGFncyk7Ci0J
CX0KLQkJZnJlZShkYXRhKTsKLQl9IGVsc2UgewotCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh1bHBfaW5mbyk7Ci0JCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0JfQotCXJldHVybiAoMSk7Ci19
Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotcHJpbnRfYWRkcmVzc2VzKHN0cnVjdCBzb2NrZXQgKnNv
Y2spCi17Ci0JaW50IGksIG47Ci0Jc3RydWN0IHNvY2thZGRyICphZGRycywgKmFkZHI7Ci0KLQlu
ID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFkZHJzKTsKLQlhZGRyID0gYWRkcnM7Ci0J
Zm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewot
CQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCQkJY2hh
ciBidWZbSU5FVF9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJCXNpbiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVU
LCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOwotCQkJcHJpbnRmKCIlczol
ZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2Ug
QUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JCQljaGFyIGJ1
ZltJTkVUNl9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2
LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4pOwotCQkJcHJpbnRmKCIl
czolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJ
Y2FzZSBBRl9DT05OOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJ
CXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCXByaW50ZigiJXA6JWQi
LCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNjb25uX3BvcnQpKTsKLQkJCWJyZWFr
OwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYoIlVua25vd24gZmFtaWx5OiAlZCIsIGFkZHIt
PnNhX2ZhbWlseSk7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAq
KSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKLQkJaWYgKGkgIT0gbiAtIDEpIHsKLQkJ
CXByaW50ZigiLCIpOwotCQl9Ci0JfQotCWlmIChuID4gMCkgewotCQl1c3JzY3RwX2ZyZWVsYWRk
cnMoYWRkcnMpOwotCX0KLQlwcmludGYoIjwtPiIpOwotCW4gPSB1c3JzY3RwX2dldHBhZGRycyhz
b2NrLCAwLCAmYWRkcnMpOwotCWFkZHIgPSBhZGRyczsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7Ci0JCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0JCWNhc2UgQUZfSU5FVDoKLQkJewot
CQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0JCQljaGFyIGJ1ZltJTkVUX0FERFJTVFJMRU5d
OwotCQkJY29uc3QgY2hhciAqbmFtZTsKLQotCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KWFkZHI7Ci0JCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBidWYs
IElORVRfQUREUlNUUkxFTik7Ci0JCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luLT5z
aW5fcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBBRl9JTkVUNjoKLQkJewotCQkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOwot
CQkJY29uc3QgY2hhciAqbmFtZTsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
YWRkcjsKLQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1
ZiwgSU5FVDZfQUREUlNUUkxFTik7Ci0JCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2lu
Ni0+c2luNl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIEFGX0NPTk46Ci0JCXsKLQkJ
CXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKilhZGRyOwotCQkJcHJpbnRmKCIlcDolZCIsIHNjb25uLT5zY29ubl9hZGRyLCBu
dG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJ
CXByaW50ZigiVW5rbm93biBmYW1pbHk6ICVkIiwgYWRkci0+c2FfZmFtaWx5KTsKLQkJCWJyZWFr
OwotCQl9Ci0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRy
LT5zYV9sZW4pOwotCQlpZiAoaSAhPSBuIC0gMSkgewotCQkJcHJpbnRmKCIsIik7Ci0JCX0KLQl9
Ci0JaWYgKG4gPiAwKSB7Ci0JCXVzcnNjdHBfZnJlZXBhZGRycyhhZGRycyk7Ci0JfQotCXByaW50
ZigiXG4iKTsKLX0KLSNlbmRpZgotCi12b2lkCi1kZWJ1Z19wcmludGYoY29uc3QgY2hhciAqZm9y
bWF0LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOwotCXZw
cmludGYoZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotaW50Ci1tYWluKHZvaWQpCi17
Ci0Jc3RydWN0IHNvY2thZGRyX2luIHNpbl9zLCBzaW5fYzsKLQlzdHJ1Y3Qgc29ja2FkZHJfY29u
biBzY29ubjsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgZmRfYywgZmRfczsKLSNlbHNlCi0JaW50
IGZkX2MsIGZkX3M7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2V0ICpzX2MsICpzX3MsICpzX2w7Ci0j
aWZkZWYgX1dJTjMyCi0JSEFORExFIHRpZF9jLCB0aWRfczsKLSNlbHNlCi0JcHRocmVhZF90IHRp
ZF9jLCB0aWRfczsKLSNlbmRpZgotCWludCBjdXJfYnVmX3NpemUsIHNuZF9idWZfc2l6ZSwgcmN2
X2J1Zl9zaXplOwotCXNvY2tsZW5fdCBvcHRfbGVuOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc25k
aW5mbzsKLQljaGFyICpsaW5lOwotI2lmZGVmIF9XSU4zMgotCVdTQURBVEEgd3NhRGF0YTsKLSNl
bmRpZgotCi0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndz
YURhdGEpICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7Ci0JCWV4aXQg
KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0
LCBkZWJ1Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICovCi0j
aWZkZWYgX1dJTjMyCi0JaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQ
UFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKLQkJcHJpbnRmKCJzb2NrZXQoKSBmYWls
ZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQ
Uk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQlwcmludGYoInNvY2tldCgpIGZhaWxl
ZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQlleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZkX2MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JB
TSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQiKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwg
SVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQiKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLSNlbmRpZgotCW1lbXNldCgmc2luX2MsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKLQlzaW5fYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJ
Tl9MRU4KLQlzaW5fYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5k
aWYKLQlzaW5fYy5zaW5fcG9ydCA9IGh0b25zKDk5MDApOwotCXNpbl9jLnNpbl9hZGRyLnNfYWRk
ciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7Ci0JbWVtc2V0KCZzaW5fcywgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbl9zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVm
IEhBVkVfU0lOX0xFTgotCXNpbl9zLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKLSNlbmRpZgotCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMoOTkwMSk7Ci0Jc2luX3Muc2luX2Fk
ZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKLSNpZmRlZiBfV0lOMzIKLQlpZiAo
YmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRo
IGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7
Ci0JfQotCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJiaW5kKCkg
ZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLQl9Ci0jZWxzZQotCWlmIChiaW5kKGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKLQkJcGVycm9yKCJi
aW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGJpbmQoZmRfcywgKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewot
CQlwZXJyb3IoImJpbmQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotI2lm
ZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3Ms
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRm
KCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7
Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGNvbm5lY3QoZmRfcywgKHN0cnVjdCBz
b2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9F
UlJPUikgewotCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdT
QUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbHNlCi0JaWYg
KGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImNvbm5lY3QiKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQlpZiAoY29ubmVjdChmZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9j
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBlcnJvcigiY29ubmVjdCIp
OwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0jaWZkZWYgX1dJTjMyCi0JdGlk
X2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9j
LCAwLCBOVUxMKTsKLQl0aWRfcyA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tl
dHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwpOwotI2Vsc2UKLQlpZiAocHRocmVhZF9jcmVhdGUo
JnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX2MpKSB7Ci0JCXBlcnJv
cigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQot
CWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQg
KikmZmRfcykpIHsKLQkJcGVycm9yKCJwdGhyZWFkX2NyZWF0ZSB0aWRfcyIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfTsKLSNlbmRpZgotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7Ci0jZW5kaWYKLQl1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOwotCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVz
cygodm9pZCAqKSZmZF9jKTsKLQl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRf
cyk7Ci0JaWYgKChzX2MgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQ
Uk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfYykpID09IE5VTEwpIHsKLQkJcGVy
cm9yKCJ1c3JzY3RwX3NvY2tldCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCW9wdF9s
ZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOwotCWN1cl9idWZfc2l6ZSA9IDA7Ci0JaWYgKHVz
cnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgJmN1cl9idWZfc2l6
ZSwgJm9wdF9sZW4pIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOwotCQll
eGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXByaW50ZigiQ2hhbmdlIHNlbmQgc29ja2V0IGJ1ZmZl
ciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKLQlzbmRfYnVmX3NpemUgPSAxPDwyMDsg
LyogMSBNQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19T
TkRCVUYsICZzbmRfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKLQkJcGVycm9yKCJ1c3Jz
Y3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlvcHRfbGVuID0g
KHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAwOwotCWlmICh1c3JzY3Rw
X2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3NpemUsICZv
cHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKLQlp
ZiAoKHNfbCA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1ND
VFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZmZF9zKSkgPT0gTlVMTCkgewotCQlwZXJyb3IoInVz
cnNjdHBfc29ja2V0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0Jb3B0X2xlbiA9IChz
b2NrbGVuX3Qpc2l6ZW9mKGludCk7Ci0JY3VyX2J1Zl9zaXplID0gMDsKLQlpZiAodXNyc2N0cF9n
ZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0
X2xlbikgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7Ci0JCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLQl9Ci0JcHJpbnRmKCJDaGFuZ2UgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNp
emUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUpOwotCXJjdl9idWZfc2l6ZSA9IDE8PDE2OyAvKiA2
NCBLQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZC
VUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3Rw
X3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlvcHRfbGVuID0gKHNv
Y2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAwOwotCWlmICh1c3JzY3RwX2dl
dHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZjdXJfYnVmX3NpemUsICZvcHRf
bGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKLQkvKiBC
aW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KLQltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVm
IEhBVkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKLSNlbmRpZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKLQlzY29u
bi5zY29ubl9hZGRyID0gJmZkX2M7Ci0JaWYgKHVzcnNjdHBfYmluZChzX2MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgewotCQlw
ZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCS8qIEJp
bmQgdGhlIHNlcnZlciBzaWRlLiAqLwotCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpOwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYg
SEFWRV9TQ09OTl9MRU4KLQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUwMDEpOwotCXNjb25u
LnNjb25uX2FkZHIgPSAmZmRfczsKLQlpZiAodXNyc2N0cF9iaW5kKHNfbCwgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7Ci0JCXBl
cnJvcigidXNyc2N0cF9iaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JLyogTWFr
ZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICovCi0JaWYgKHVzcnNjdHBfbGlzdGVuKHNfbCwgMSkg
PCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUp
OwotCX0KLQkvKiBJbml0aWF0ZSB0aGUgaGFuZHNoYWtlICovCi0JbWVtc2V0KCZzY29ubiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZf
Q09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMo
NTAwMSk7Ci0Jc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOwotCWlmICh1c3JzY3RwX2Nvbm5lY3Qo
c19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQlpZiAoKHNfcyA9IHVzcnNjdHBfYWNjZXB0KHNfbCwgTlVMTCwgTlVMTCkp
ID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwotCQlleGl0KEVYSVRfRkFJ
TFVSRSk7Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc19sKTsKLQlpZiAoKGxpbmUgPSBtYWxsb2MoTElO
RV9MRU5HVEgpKSA9PSBOVUxMKSB7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JbWVtc2V0
KGxpbmUsICdBJywgTElORV9MRU5HVEgpOwotCXNuZGluZm8uc25kX3NpZCA9IDE7Ci0Jc25kaW5m
by5zbmRfZmxhZ3MgPSAwOwotCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChESVNDQVJEX1BQSUQp
OwotCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOwotCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsK
LQkvKiBTZW5kIGEgMSBNQiBtZXNzYWdlICovCi0JaWYgKHVzcnNjdHBfc2VuZHYoc19jLCBsaW5l
LCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywKLQkgICAgICAgICAgICAg
ICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NO
RElORk8sIDApIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlmcmVlKGxpbmUpOwotCXVzcnNjdHBfc2h1dGRvd24oc19jLCBTSFVU
X1dSKTsKLQotCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZmRlZiBfV0lOMzIK
LQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQlzbGVlcCgxKTsKLSNlbmRpZgotCX0KLSNpZmRlZiBf
V0lOMzIKLQlUZXJtaW5hdGVUaHJlYWQodGlkX2MsIDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3Qo
dGlkX2MsIElORklOSVRFKTsKLQlUZXJtaW5hdGVUaHJlYWQodGlkX3MsIDApOwotCVdhaXRGb3JT
aW5nbGVPYmplY3QodGlkX3MsIElORklOSVRFKTsKLQlpZiAoY2xvc2Vzb2NrZXQoZmRfYykgPT0g
U09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJv
cjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQlpZiAoY2xvc2Vzb2NrZXQoZmRfcykgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xv
c2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlXU0FDbGVhbnVwKCk7Ci0jZWxzZQotCXB0aHJl
YWRfY2FuY2VsKHRpZF9jKTsKLQlwdGhyZWFkX2pvaW4odGlkX2MsIE5VTEwpOwotCXB0aHJlYWRf
Y2FuY2VsKHRpZF9zKTsKLQlwdGhyZWFkX2pvaW4odGlkX3MsIE5VTEwpOwotCWlmIChjbG9zZShm
ZF9jKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0J
fQotCWlmIChjbG9zZShmZF9zKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9n
cmFtcy9la3JfbG9vcF9vZmZsb2FkLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWtyX2xvb3Bfb2ZmbG9hZC5jCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWY3ZDdmYzY5NDViNzVhMDYwNWQ3ODVlYTU5NWQ3
OGQ2NjE2YzZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9w
cm9ncmFtcy9la3JfbG9vcF9vZmZsb2FkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NTkgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKgotICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5kaWYKLSNp
bmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5o
PgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmbmRlZiBf
V0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgot
I2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8cHRo
cmVhZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSNpbmNsdWRlIDx3aW5zb2NrMi5o
PgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0K
LSNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKLSNkZWZpbmUgTElORV9MRU5HVEggKDE8
PDIwKQotI2RlZmluZSBESVNDQVJEX1BQSUQgMzkKLQotI2lmZGVmIF9XSU4zMgotc3RhdGljIERX
T1JEIFdJTkFQSQotI2Vsc2UKLXN0YXRpYyB2b2lkICoKLSNlbmRpZgotaGFuZGxlX3BhY2tldHMo
dm9pZCAqYXJnKQotewotI2lmZGVmIF9XSU4zMgotCVNPQ0tFVCAqZmRwOwotI2Vsc2UKLQlpbnQg
KmZkcDsKLSNlbmRpZgotCWNoYXIgKmR1bXBfYnVmZmVyOwotCXN0cnVjdCBzY3RwX2NvbW1vbl9o
ZWFkZXIgKmhkcjsKLQlzc2l6ZV90IGxlbmd0aDsKLQljaGFyIGJ1ZmZlcltNQVhfUEFDS0VUX1NJ
WkVdOwotCXVpbnQzMl90IHJlY2VpdmVkX2NyYzMyYywgY29tcHV0ZWRfY3JjMzJjOwotCi0jaWZk
ZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFyZzsKLSNlbHNlCi0JZmRwID0gKGludCAqKWFy
ZzsKLSNlbmRpZgotCWZvciAoOzspIHsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0JCXB0aHJl
YWRfdGVzdGNhbmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmZmVyLCBN
QVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAobGVuZ3RoID4gMCkgewotCQkJaWYgKChkdW1wX2J1
ZmZlciA9IHVzcnNjdHBfZHVtcHBhY2tldChidWZmZXIsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RV
TVBfSU5CT1VORCkpICE9IE5VTEwpIHsKLQkJCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1w
X2J1ZmZlcik7Ci0JCQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1ZmZlcik7Ci0JCQl9
Ci0JCQlpZiAoKHNpemVfdClsZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFk
ZXIpKSB7Ci0JCQkJaGRyID0gKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKilidWZmZXI7Ci0J
CQkJcmVjZWl2ZWRfY3JjMzJjID0gaGRyLT5jcmMzMmM7Ci0JCQkJaGRyLT5jcmMzMmMgPSBodG9u
bCgwKTsKLQkJCQljb21wdXRlZF9jcmMzMmMgPSB1c3JzY3RwX2NyYzMyYyhidWZmZXIsIChzaXpl
X3QpbGVuZ3RoKTsKLQkJCQloZHItPmNyYzMyYyA9IHJlY2VpdmVkX2NyYzMyYzsKLQkJCQlpZiAo
cmVjZWl2ZWRfY3JjMzJjID09IGNvbXB1dGVkX2NyYzMyYykgewotCQkJCQl1c3JzY3RwX2Nvbm5p
bnB1dChmZHAsIGJ1ZmZlciwgKHNpemVfdClsZW5ndGgsIDApOwotCQkJCX0gZWxzZSB7Ci0JCQkJ
CWZwcmludGYoc3RkZXJyLCAiV3JvbmcgQ1JDMzJjOiBleHBlY3RlZCAlMDh4IHJlY2VpdmVkICUw
OHhcbiIsCi0JCQkJCSAgICAgICAgbnRvaGwoY29tcHV0ZWRfY3JjMzJjKSwgbnRvaGwocmVjZWl2
ZWRfY3JjMzJjKSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIlBh
Y2tldCB0b28gc2hvcnQ6IGxlbmd0aCAlenUiLCAoc2l6ZV90KWxlbmd0aCk7Ci0JCQl9Ci0JCX0K
LQl9Ci0jaWZkZWYgX1dJTjMyCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAoTlVMTCk7Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIGludAotY29ubl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAqYnVm
ZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpCi17Ci0JY2hh
ciAqZHVtcF9idWZmZXI7Ci0Jc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlciAqaGRyOwotI2lmZGVm
IF9XSU4zMgotCVNPQ0tFVCAqZmRwOwotI2Vsc2UKLQlpbnQgKmZkcDsKLSNlbmRpZgotCi0jaWZk
ZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFkZHI7Ci0jZWxzZQotCWZkcCA9IChpbnQgKilh
ZGRyOwotI2VuZGlmCi0JaWYgKGxlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY29tbW9uX2hl
YWRlcikpIHsKLQkJaGRyID0gKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKilidWZmZXI7Ci0J
CWhkci0+Y3JjMzJjID0gdXNyc2N0cF9jcmMzMmMoYnVmZmVyLCAoc2l6ZV90KWxlbmd0aCk7Ci0J
fQotCWlmICgoZHVtcF9idWZmZXIgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmZmVyLCBsZW5ndGgs
IFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKLQkJLy9mcHJpbnRmKHN0ZGVyciwgIiVz
IiwgZHVtcF9idWZmZXIpOwotCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmZmVyKTsK
LQl9Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKHNlbmQoKmZkcCwgYnVmZmVyLCAoaW50KWxlbmd0aCwg
MCkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXJldHVybiAoV1NBR2V0TGFzdEVycm9yKCkpOwotI2Vs
c2UKLQlpZiAoc2VuZCgqZmRwLCBidWZmZXIsIGxlbmd0aCwgMCkgPCAwKSB7Ci0JCXJldHVybiAo
ZXJybm8pOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRp
YyBpbnQKLXJlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBz
Y3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewotCXByaW50Zigi
TWVzc2FnZSAlcCByZWNlaXZlZCBvbiBzb2NrID0gJXAuXG4iLCBkYXRhLCAodm9pZCAqKXNvY2sp
OwotCWlmIChkYXRhKSB7Ci0JCWlmICgoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSA9PSAwKSB7
Ci0JCQlwcmludGYoIk1lc3NzYWdlIG9mIGxlbmd0aCAlZCByZWNlaXZlZCB2aWEgJXA6JXUgb24g
c3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUsIGZs
YWdzICV4LlxuIiwKLQkJCSAgICAgICAoaW50KWRhdGFsZW4sCi0JCQkgICAgICAgYWRkci5zY29u
bi5zY29ubl9hZGRyLAotCQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCi0J
CQkgICAgICAgcmN2LnJjdl9zaWQsCi0JCQkgICAgICAgcmN2LnJjdl9zc24sCi0JCQkgICAgICAg
cmN2LnJjdl90c24sCi0JCQkgICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKLQkJCSAgICAgICBy
Y3YucmN2X2NvbnRleHQsCi0JCQkgICAgICAgZmxhZ3MpOwotCQl9Ci0JCWZyZWUoZGF0YSk7Ci0J
fSBlbHNlIHsKLQkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3ModWxwX2luZm8pOwotCQl1c3Jz
Y3RwX2Nsb3NlKHNvY2spOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0jaWYgMAotc3RhdGljIHZv
aWQKLXByaW50X2FkZHJlc3NlcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrKQotewotCWludCBpLCBuOwot
CXN0cnVjdCBzb2NrYWRkciAqYWRkcnMsICphZGRyOwotCi0JbiA9IHVzcnNjdHBfZ2V0bGFkZHJz
KHNvY2ssIDAsICZhZGRycyk7Ci0JYWRkciA9IGFkZHJzOwotCWZvciAoaSA9IDA7IGkgPCBuOyBp
KyspIHsKLQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLQkJY2FzZSBBRl9JTkVUOgotCQl7
Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxF
Tl07Ci0JCQljb25zdCBjaGFyICpuYW1lOwotCi0JCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopYWRkcjsKLQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1
ZiwgSU5FVF9BRERSU1RSTEVOKTsKLQkJCXByaW50ZigiJXM6JWQiLCBuYW1lLCBudG9ocyhzaW4t
PnNpbl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIEFGX0lORVQ2OgotCQl7Ci0JCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07
Ci0JCQljb25zdCBjaGFyICpuYW1lOwotCi0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilhZGRyOwotCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwg
YnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKLQkJCXByaW50ZigiJXM6JWQiLCBuYW1lLCBudG9ocyhz
aW42LT5zaW42X3BvcnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgQUZfQ09OTjoKLQkJewot
CQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0JCQlzY29ubiA9IChzdHJ1Y3Qgc29j
a2FkZHJfY29ubiAqKWFkZHI7Ci0JCQlwcmludGYoIiVwOiVkIiwgc2Nvbm4tPnNjb25uX2FkZHIs
IG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJfQotCQlkZWZhdWx0Ogot
CQkJcHJpbnRmKCJVbmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOwotCQkJYnJl
YWs7Ci0JCX0KLQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIGFk
ZHItPnNhX2xlbik7Ci0JCWlmIChpICE9IG4gLSAxKSB7Ci0JCQlwcmludGYoIiwiKTsKLQkJfQot
CX0KLQlpZiAobiA+IDApIHsKLQkJdXNyc2N0cF9mcmVlbGFkZHJzKGFkZHJzKTsKLQl9Ci0JcHJp
bnRmKCI8LT4iKTsKLQluID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywgMCwgJmFkZHJzKTsKLQlh
ZGRyID0gYWRkcnM7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlzd2l0Y2ggKGFkZHIt
PnNhX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOwotCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5h
bWU7Ci0KLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJbmFtZSA9IGlu
ZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOwot
CQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLQkJCWJyZWFr
OwotCQl9Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7Ci0JCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5hbWU7
Ci0KLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQluYW1lID0gaW5l
dF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4p
OwotCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkpOwotCQkJ
YnJlYWs7Ci0JCX0KLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqc2Nvbm47Ci0KLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJ
CXByaW50ZigiJXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNjb25uX3Bv
cnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYoIlVua25vd24gZmFt
aWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKLQkJaWYgKGkg
IT0gbiAtIDEpIHsKLQkJCXByaW50ZigiLCIpOwotCQl9Ci0JfQotCWlmIChuID4gMCkgewotCQl1
c3JzY3RwX2ZyZWVwYWRkcnMoYWRkcnMpOwotCX0KLQlwcmludGYoIlxuIik7Ci19Ci0jZW5kaWYK
LQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZhX2xp
c3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1hdCwgYXApOwot
CXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbih2b2lkKQotewotCXN0cnVjdCBzb2NrYWRkcl9p
biBzaW5fcywgc2luX2M7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47Ci0jaWZkZWYgX1dJ
TjMyCi0JU09DS0VUIGZkX2MsIGZkX3M7Ci0jZWxzZQotCWludCBmZF9jLCBmZF9zOwotI2VuZGlm
Ci0Jc3RydWN0IHNvY2tldCAqc19jLCAqc19zLCAqc19sOwotI2lmZGVmIF9XSU4zMgotCUhBTkRM
RSB0aWRfYywgdGlkX3M7Ci0jZWxzZQotCXB0aHJlYWRfdCB0aWRfYywgdGlkX3M7Ci0jZW5kaWYK
LQlpbnQgY3VyX2J1Zl9zaXplLCBzbmRfYnVmX3NpemUsIHJjdl9idWZfc2l6ZTsKLQlzb2NrbGVu
X3Qgb3B0X2xlbjsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87Ci0JY2hhciAqbGluZTsK
LSNpZmRlZiBfV0lOMzIKLQlXU0FEQVRBIHdzYURhdGE7Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4z
MgotCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FEYXRhKSAhPSAwKSB7Ci0JCXBy
aW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOwotCQlleGl0IChFWElUX0ZBSUxVUkUpOwotCX0K
LSNlbmRpZgotCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1dCwgZGVidWdfcHJpbnRmKTsKLQl1
c3JzY3RwX2VuYWJsZV9jcmMzMmNfb2ZmbG9hZCgpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBV
RFAgc29ja2V0ICovCi0jaWZkZWYgX1dJTjMyCi0JaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKLQkJcHJpbnRm
KCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQlwcmludGYo
InNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwot
CQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZkX2MgPSBzb2NrZXQoQUZf
SU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5F
VCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotCW1lbXNldCgmc2luX2MsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW5fYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
LSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW5fYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7Ci0jZW5kaWYKLQlzaW5fYy5zaW5fcG9ydCA9IGh0b25zKDk4OTkpOwotCXNpbl9j
LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7Ci0JbWVtc2V0KCZzaW5f
cywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbl9zLnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbl9zLnNpbl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMoOTkwMSk7
Ci0Jc2luX3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKLSNpZmRl
ZiBfV0lOMzIKLQlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiYmlu
ZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQlleGl0
KEVYSVRfRkFJTFVSRSk7Ci0JfQotCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJ
cHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0jZWxzZQotCWlmIChiaW5kKGZkX2MsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDAp
IHsKLQkJcGVycm9yKCJiaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGJp
bmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpIDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJS
T1IpIHsKLQkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGNvbm5lY3Qo
ZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBl
cnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImNvbm5lY3QiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoY29ubmVjdChmZF9zLCAoc3RydWN0IHNv
Y2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBl
cnJvcigiY29ubmVjdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0jaWZk
ZWYgX1dJTjMyCi0JdGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRz
LCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKTsKLQl0aWRfcyA9IENyZWF0ZVRocmVhZChOVUxMLCAw
LCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwpOwotI2Vsc2UKLQlpZiAo
cHRocmVhZF9jcmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZk
X2MpKSB7Ci0JCXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQotCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZoYW5kbGVf
cGFja2V0cywgKHZvaWQgKikmZmRfcykpIHsKLQkJcGVycm9yKCJwdGhyZWFkX2NyZWF0ZSB0aWRf
cyIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfTsKLSNlbmRpZgotI2lmZGVmIFNDVFBfREVC
VUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7Ci0j
ZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOwotCXVzcnNjdHBf
cmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9jKTsKLQl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJl
c3MoKHZvaWQgKikmZmRfcyk7Ci0JaWYgKChzX2MgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfYykpID09
IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwotCQlleGl0KEVYSVRfRkFJTFVS
RSk7Ci0JfQotCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOwotCWN1cl9idWZfc2l6
ZSA9IDA7Ci0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9TT0NLRVQsIFNPX1NOREJV
RiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfZ2V0
c29ja29wdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXByaW50ZigiQ2hhbmdlIHNl
bmQgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKLQlzbmRfYnVm
X3NpemUgPSAxPDwyMDsgLyogMSBNQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19jLCBT
T0xfU09DS0VULCBTT19TTkRCVUYsICZzbmRfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsK
LQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAw
OwotCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZj
dXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tv
cHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3Vy
X2J1Zl9zaXplKTsKLQlpZiAoKHNfbCA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RS
RUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZmZF9zKSkgPT0gTlVMTCkg
ewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9
Ci0Jb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7Ci0JY3VyX2J1Zl9zaXplID0gMDsK
LQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3Vy
X2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0
Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JcHJpbnRmKCJDaGFuZ2UgcmVjZWl2ZSBz
b2NrZXQgYnVmZmVyIHNpemUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUpOwotCXJjdl9idWZfc2l6
ZSA9IDE8PDE2OyAvKiA2NCBLQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19sLCBTT0xf
U09DS0VULCBTT19SQ1ZCVUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKLQkJ
cGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAwOwot
CWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZjdXJf
YnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3VyX2J1
Zl9zaXplKTsKLQkvKiBCaW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KLQltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOwotI2lmZGVmIEhBVkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9u
cyg1MDAxKTsKLQlzY29ubi5zY29ubl9hZGRyID0gJmZkX2M7Ci0JaWYgKHVzcnNjdHBfYmluZChz
X2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bikpIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCQlleGl0KEVYSVRfRkFJTFVS
RSk7Ci0JfQotCS8qIEJpbmQgdGhlIHNlcnZlciBzaWRlLiAqLwotCW1lbXNldCgmc2Nvbm4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFG
X0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25z
KDUwMDEpOwotCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfczsKLQlpZiAodXNyc2N0cF9iaW5kKHNf
bCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9iaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0JLyogTWFrZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICovCi0JaWYgKHVzcnNjdHBf
bGlzdGVuKHNfbCwgMSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKLQkJZXhp
dChFWElUX0ZBSUxVUkUpOwotCX0KLQkvKiBJbml0aWF0ZSB0aGUgaGFuZHNoYWtlICovCi0JbWVt
c2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nv
bm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25u
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29u
bl9wb3J0ID0gaHRvbnMoNTAwMSk7Ci0Jc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOwotCWlmICh1
c3JzY3RwX2Nvbm5lY3Qoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKHNfcyA9IHVzcnNjdHBfYWNjZXB0KHNf
bCwgTlVMTCwgTlVMTCkpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwot
CQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc19sKTsKLQlpZiAoKGxp
bmUgPSBtYWxsb2MoTElORV9MRU5HVEgpKSA9PSBOVUxMKSB7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0JbWVtc2V0KGxpbmUsICdBJywgTElORV9MRU5HVEgpOwotCXNuZGluZm8uc25kX3Np
ZCA9IDE7Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCXNuZGluZm8uc25kX3BwaWQgPSBodG9u
bChESVNDQVJEX1BQSUQpOwotCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOwotCXNuZGluZm8uc25k
X2Fzc29jX2lkID0gMDsKLQkvKiBTZW5kIGEgMSBNQiBtZXNzYWdlICovCi0JaWYgKHVzcnNjdHBf
c2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywK
LQkgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8p
LCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlmcmVlKGxpbmUpOwotCXVzcnNjdHBfc2h1
dGRvd24oc19jLCBTSFVUX1dSKTsKLQotCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsK
LSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQlzbGVlcCgxKTsKLSNlbmRp
ZgotCX0KLSNpZmRlZiBfV0lOMzIKLQlUZXJtaW5hdGVUaHJlYWQodGlkX2MsIDApOwotCVdhaXRG
b3JTaW5nbGVPYmplY3QodGlkX2MsIElORklOSVRFKTsKLQlUZXJtaW5hdGVUaHJlYWQodGlkX3Ms
IDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkX3MsIElORklOSVRFKTsKLQlpZiAoY2xvc2Vz
b2NrZXQoZmRfYykgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlpZiAoY2xvc2Vzb2NrZXQoZmRfcykgPT0gU09DS0VUX0VSUk9SKSB7
Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlXU0FDbGVhbnVwKCk7
Ci0jZWxzZQotCXB0aHJlYWRfY2FuY2VsKHRpZF9jKTsKLQlwdGhyZWFkX2pvaW4odGlkX2MsIE5V
TEwpOwotCXB0aHJlYWRfY2FuY2VsKHRpZF9zKTsKLQlwdGhyZWFkX2pvaW4odGlkX3MsIE5VTEwp
OwotCWlmIChjbG9zZShmZF9jKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfQotCWlmIChjbG9zZShmZF9zKSA8IDApIHsKLQkJcGVycm9yKCJjbG9z
ZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfcGVlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9wZWVyLmMKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzY2ZlNjJkOGJlM2Q2YzM0MmFhZjQ5ZTk0M2ExOTMx
ZGVlZWUyMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3By
b2dyYW1zL2Vrcl9wZWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MzggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2pl
Y3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
LSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX1dJ
TjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxz
dGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1
ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSNpbmNsdWRl
IDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1
c3JzY3RwLmg+Ci0KLSNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKLSNkZWZpbmUgTElO
RV9MRU5HVEggODAKLSNkZWZpbmUgRElTQ0FSRF9QUElEIDM5Ci0KLSNpZmRlZiBfV0lOMzIKLXN0
YXRpYyBEV09SRCBXSU5BUEkKLSNlbHNlCi1zdGF0aWMgdm9pZCAqCi0jZW5kaWYKLWhhbmRsZV9w
YWNrZXRzKHZvaWQgKmFyZykKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNl
Ci0JaW50ICpmZHA7Ci0jZW5kaWYKLQlzc2l6ZV90IGxlbmd0aDsKLQljaGFyIGJ1ZltNQVhfUEFD
S0VUX1NJWkVdOwotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFyZzsKLSNlbHNl
Ci0JZmRwID0gKGludCAqKWFyZzsKLSNlbmRpZgotCWZvciAoOzspIHsKLSNpZiBkZWZpbmVkKF9f
TmV0QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0aCA9IHJl
Y3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAobGVuZ3RoID4gMCkgewot
CQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKLQkJfQot
CX0KLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIChOVUxMKTsKLSNl
bmRpZgotfQotCi1zdGF0aWMgaW50Ci1jb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWZm
ZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKLXsKLSNpZmRl
ZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQotI2lm
ZGVmIF9XSU4zMgotCWZkcCA9IChTT0NLRVQgKilhZGRyOwotI2Vsc2UKLQlmZHAgPSAoaW50ICop
YWRkcjsKLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCWlmIChzZW5kKCpmZHAsIGJ1ZmZlciwgKGlu
dClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikgewotCQlyZXR1cm4gKFdTQUdldExhc3RFcnJv
cigpKTsKLSNlbHNlCi0JaWYgKHNlbmQoKmZkcCwgYnVmZmVyLCBsZW5ndGgsIDApIDwgMCkgewot
CQlyZXR1cm4gKGVycm5vKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQot
fQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVudChzdHJ1Y3Qg
c2N0cF9hc3NvY19jaGFuZ2UgKnNhYykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgbjsKLQotCXByaW50
ZigiQXNzb2NpYXRpb24gY2hhbmdlICIpOwotCXN3aXRjaCAoc2FjLT5zYWNfc3RhdGUpIHsKLQlj
YXNlIFNDVFBfQ09NTV9VUDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fVVAiKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX0NPTU1fTE9TVDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fTE9TVCIpOwotCQlicmVh
azsKLQljYXNlIFNDVFBfUkVTVEFSVDoKLQkJcHJpbnRmKCJTQ1RQX1JFU1RBUlQiKTsKLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6Ci0JCXByaW50ZigiU0NUUF9TSFVURE9XTl9D
T01QIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NPQzoKLQkJcHJpbnRmKCJT
Q1RQX0NBTlRfU1RSX0FTU09DIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ZigiVU5L
Tk9XTiIpOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCIsIHN0cmVhbXMgKGluL291dCkgPSAoJXUv
JXUpIiwKLQkgICAgICAgc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zLCBzYWMtPnNhY19vdXRib3Vu
ZF9zdHJlYW1zKTsKLQluID0gc2FjLT5zYWNfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX2NoYW5nZSk7Ci0JaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX1VQKSB8fAot
CSAgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfUkVTVEFSVCkpICYmIChuID4gMCkpIHsKLQkJ
cHJpbnRmKCIsIHN1cHBvcnRzIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJCXN3
aXRjaCAoc2FjLT5zYWNfaW5mb1tpXSkgewotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BS
OgotCQkJCXByaW50ZigiIFBSIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQ
UE9SVFNfQVVUSDoKLQkJCQlwcmludGYoIiBBVVRIIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFND
VFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOgotCQkJCXByaW50ZigiIEFTQ09ORiIpOwotCQkJCWJy
ZWFrOwotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGOgotCQkJCXByaW50Zigi
IE1VTFRJQlVGIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUkVf
Q09ORklHOgotCQkJCXByaW50ZigiIFJFLUNPTkZJRyIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVs
dDoKLQkJCQlwcmludGYoIiBVTktOT1dOKDB4JTAyeCkiLCBzYWMtPnNhY19pbmZvW2ldKTsKLQkJ
CQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQ
X0NPTU1fTE9TVCkgfHwKLQkgICAgICAgICAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DQU5U
X1NUUl9BU1NPQykpICYmIChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIEFCT1JUID0iKTsKLQkJZm9y
IChpID0gMDsgaSA8IG47IGkrKykgewotCQkJcHJpbnRmKCIgMHglMDJ4Iiwgc2FjLT5zYWNfaW5m
b1tpXSk7Ci0JCX0KLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlpZiAoKHNhYy0+c2FjX3N0YXRlID09
IFNDVFBfQ0FOVF9TVFJfQVNTT0MpIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX1NI
VVRET1dOX0NPTVApIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkp
IHsKLQkJZXhpdCgwKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX3Bl
ZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGMpCi17
Ci0JY2hhciBhZGRyX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQljb25zdCBjaGFyICphZGRyOwot
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0J
c3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0Jc3dpdGNoIChzcGMtPnNwY19hYWRkci5z
c19mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g
Kikmc3BjLT5zcGNfYWFkZHI7Ci0JCWFkZHIgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2lu
X2FkZHIsIGFkZHJfYnVmLCBJTkVUX0FERFJTVFJMRU4pOwotCQlicmVhazsKLQljYXNlIEFGX0lO
RVQ2OgotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3BjLT5zcGNfYWFkZHI7Ci0J
CWFkZHIgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGFkZHJfYnVmLCBJ
TkVUNl9BRERSU1RSTEVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9DT05OOgotCQlzY29ubiA9IChz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqKSZzcGMtPnNwY19hYWRkcjsKLSNpZmRlZiBfV0lOMzIKLQkJ
X3NucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBzY29ubi0+c2Nvbm5f
YWRkcik7Ci0jZWxzZQotCQlzbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVw
Iiwgc2Nvbm4tPnNjb25uX2FkZHIpOwotI2VuZGlmCi0JCWFkZHIgPSBhZGRyX2J1ZjsKLQkJYnJl
YWs7Ci0JZGVmYXVsdDoKLSNpZmRlZiBfV0lOMzIKLQkJX3NucHJpbnRmKGFkZHJfYnVmLCBJTkVU
Nl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNwY19hYWRkci5zc19mYW1p
bHkpOwotI2Vsc2UKLQkJc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtu
b3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSk7Ci0jZW5kaWYKLQkJYWRk
ciA9IGFkZHJfYnVmOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCJQZWVyIGFkZHJlc3MgJXMgaXMg
bm93ICIsIGFkZHIpOwotCXN3aXRjaCAoc3BjLT5zcGNfc3RhdGUpIHsKLQljYXNlIFNDVFBfQURE
Ul9BVkFJTEFCTEU6Ci0JCXByaW50ZigiU0NUUF9BRERSX0FWQUlMQUJMRSIpOwotCQlicmVhazsK
LQljYXNlIFNDVFBfQUREUl9VTlJFQUNIQUJMRToKLQkJcHJpbnRmKCJTQ1RQX0FERFJfVU5SRUFD
SEFCTEUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FERFJfUkVNT1ZFRDoKLQkJcHJpbnRmKCJT
Q1RQX0FERFJfUkVNT1ZFRCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfQUREUl9BRERFRDoKLQkJ
cHJpbnRmKCJTQ1RQX0FERFJfQURERUQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FERFJfTUFE
RV9QUklNOgotCQlwcmludGYoIlNDVFBfQUREUl9NQURFX1BSSU0iKTsKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX0FERFJfQ09ORklSTUVEOgotCQlwcmludGYoIlNDVFBfQUREUl9DT05GSVJNRUQiKTsK
LQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCJVTktOT1dOIik7Ci0JCWJyZWFrOwotCX0K
LQlwcmludGYoIiAoZXJyb3IgPSAweCUwOHgpLlxuIiwgc3BjLT5zcGNfZXJyb3IpOwotCXJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9zZW5kX2ZhaWxlZF9ldmVudChzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZSkKLXsKLQlzaXplX3QgaSwgbjsKLQotCWlmIChzc2Zl
LT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1VOU0VOVCkgewotCQlwcmludGYoIlVuc2VudCAiKTsK
LQl9Ci0JaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfU0VOVCkgewotCQlwcmludGYo
IlNlbnQgIik7Ci0JfQotCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgfihTQ1RQX0RBVEFfU0VOVCB8
IFNDVFBfREFUQV9VTlNFTlQpKSB7Ci0JCXByaW50ZigiKGZsYWdzID0gJXgpICIsIHNzZmUtPnNz
ZmVfZmxhZ3MpOwotCX0KLQlwcmludGYoIm1lc3NhZ2Ugd2l0aCBQUElEID0gJXUsIFNJRCA9ICV1
LCBmbGFnczogMHglMDR4IGR1ZSB0byBlcnJvciA9IDB4JTA4eCIsCi0JICAgICAgIG50b2hsKHNz
ZmUtPnNzZmVfaW5mby5zbmRfcHBpZCksIHNzZmUtPnNzZmVfaW5mby5zbmRfc2lkLAotCSAgICAg
ICBzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzLCBzc2ZlLT5zc2ZlX2Vycm9yKTsKLQluID0gc3Nm
ZS0+c3NmZV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOwot
CWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJcHJpbnRmKCIgMHglMDJ4Iiwgc3NmZS0+c3Nm
ZV9kYXRhW2ldKTsKLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2
b2lkCi1oYW5kbGVfbm90aWZpY2F0aW9uKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICpub3RpZiwg
c2l6ZV90IG4pCi17Ci0JaWYgKG5vdGlmLT5zbl9oZWFkZXIuc25fbGVuZ3RoICE9ICh1aW50MzJf
dCluKSB7Ci0JCXJldHVybjsKLQl9Ci0Jc3dpdGNoIChub3RpZi0+c25faGVhZGVyLnNuX3R5cGUp
IHsKLQljYXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgotCQloYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdl
X2V2ZW50KCYobm90aWYtPnNuX2Fzc29jX2NoYW5nZSkpOwotCQlicmVhazsKLQljYXNlIFNDVFBf
UEVFUl9BRERSX0NIQU5HRToKLQkJaGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoJihu
b3RpZi0+c25fcGFkZHJfY2hhbmdlKSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9SRU1PVEVfRVJS
T1I6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjoKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1BBUlRJ
QUxfREVMSVZFUllfRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9F
VkVOVDoKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2Ug
U0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKLQkJaGFuZGxlX3NlbmRfZmFpbGVkX2V2ZW50KCYobm90
aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TVFJFQU1f
UkVTRVRfRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDoKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6Ci0JCWJyZWFrOwotCWRlZmF1
bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29j
a2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAg
ICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywg
dm9pZCAqdWxwX2luZm8pCi17Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKGZsYWdzICYgTVNHX05PVElG
SUNBVElPTikgewotCQkJaGFuZGxlX25vdGlmaWNhdGlvbigodW5pb24gc2N0cF9ub3RpZmljYXRp
b24gKilkYXRhLCBkYXRhbGVuKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ZigiTXNnIG9mIGxlbmd0
aCAlZCByZWNlaXZlZCB2aWEgJXA6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04g
JXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAotCQkJICAgICAgIChpbnQpZGF0YWxlbiwKLQkJ
CSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCi0JCQkgICAgICAgbnRvaHMoYWRkci5zY29u
bi5zY29ubl9wb3J0KSwKLQkJCSAgICAgICByY3YucmN2X3NpZCwKLQkJCSAgICAgICByY3YucmN2
X3NzbiwKLQkJCSAgICAgICByY3YucmN2X3RzbiwKLQkJCSAgICAgICBudG9obChyY3YucmN2X3Bw
aWQpLAotCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCk7Ci0JCX0KLQkJZnJlZShkYXRhKTsKLQl9
IGVsc2UgewotCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyh1bHBfaW5mbyk7Ci0JCXVzcnNj
dHBfY2xvc2Uoc29jayk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZvaWQKLWRlYnVnX3ByaW50
Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQo
YXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c2luOwotCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotCXN0cnVjdCBzY3RwX2V2ZW50IGV2
ZW50OwotCXVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCi0JICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UfTsKLQl1bnNpZ25lZCBpbnQg
aTsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgZmQ7Ci0jZWxzZQotCWludCBmZDsKLSNlbmRpZgot
CXN0cnVjdCBzb2NrZXQgKnM7Ci0jaWZkZWYgX1dJTjMyCi0JSEFORExFIHRpZDsKLSNlbHNlCi0J
cHRocmVhZF90IHRpZDsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKLQlj
aGFyIGxpbmVbTElORV9MRU5HVEhdOwotI2lmZGVmIF9XSU4zMgotCVdTQURBVEEgd3NhRGF0YTsK
LSNlbmRpZgotCi0JaWYgKGFyZ2MgPCA0KSB7Ci0JCXByaW50ZigiZXJyb3I6IHRoaXMgcHJvZ3Jh
bSByZXF1aXJlcyA0IGFyZ3VtZW50cyFcbiIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQot
Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEp
ICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7Ci0JCWV4aXQgKEVYSVRf
RkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBkZWJ1
Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICovCi0jaWZkZWYg
X1dJTjMyCi0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VE
UCkpID09IElOVkFMSURfU09DS0VUKSB7Ci0JCXByaW50Zigic29ja2V0KCkgZmFpbGVkIHdpdGgg
ZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZkID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAwKSB7Ci0JCXBlcnJv
cigic29ja2V0Iik7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9T
SU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRp
ZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotCWlmICghaW5ldF9wdG9u
KEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7Ci0JCXByaW50ZigiZXJy
b3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotI2lmZGVmIF9XSU4zMgot
CWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImJpbmQoKSBmYWlsZWQgd2l0
aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9Ci0jZWxzZQotCWlmIChiaW5k
KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
IDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQl9Ci0jZW5kaWYKLQltZW1zZXQoJnNpbiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
LSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOwotI2VuZGlmCi0Jc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7Ci0J
aWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsK
LQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKLQkJZXhpdCgxKTsKLQl9Ci0j
aWZkZWYgX1dJTjMyCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50Zigi
Y29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwot
CX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBlcnJvcigiY29ubmVjdCIpOwotCX0K
LSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCXRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFu
ZGxlX3BhY2tldHMsICh2b2lkICopJmZkLCAwLCBOVUxMKTsKLSNlbHNlCi0JcHRocmVhZF9jcmVh
dGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCk7Ci0jZW5kaWYKLSNp
ZmRlZiBTQ1RQX0RFQlVHCi0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9E
RUJVR19OT05FKTsKLSNlbmRpZgotCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZm
ZCk7Ci0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKLQlpZiAoKHMgPSB1
c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZl
X2NiLCBOVUxMLCAwLCAmZmQpKSA9PSBOVUxMKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zb2NrZXQi
KTsKLQl9Ci0JLyogRW5hYmxlIHRoZSBldmVudHMgb2YgaW50ZXJlc3QuICovCi0JaWYgKHVzcnNj
dHBfc2V0X25vbl9ibG9ja2luZyhzLCAxKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NldF9u
b25fYmxvY2tpbmciKTsKLQl9Ci0JbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7Ci0J
ZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKLQlldmVudC5zZV9vbiA9IDE7Ci0J
Zm9yIChpID0gMDsgaSA8IHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KTsgaSsr
KSB7Ci0JCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKLQkJaWYgKHVzcnNjdHBfc2V0
c29ja29wdChzLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKGV2ZW50
KSkgPCAwKSB7Ci0JCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FVkVOVCIpOwotCQl9Ci0JfQot
CW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCXNjb25u
LnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQlzY29ubi5z
Y29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4u
c2Nvbm5fcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOwotCXNjb25uLnNjb25uX2FkZHIgPSAm
ZmQ7Ci0JaWYgKHVzcnNjdHBfYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2JpbmQi
KTsKLQl9Ci0JbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7
Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgot
CXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYK
LQlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzZdKSk7Ci0Jc2Nvbm4uc2Nvbm5f
YWRkciA9ICZmZDsKLQlpZiAodXNyc2N0cF9jb25uZWN0KHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgewotCQlwZXJyb3IoInVz
cnNjdHBfY29ubmVjdCIpOwotCX0KLQlmb3IgKDs7KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCWlmIChn
ZXRzX3MobGluZSwgTElORV9MRU5HVEgpID09IE5VTEwpIHsKLSNlbHNlCi0JCWlmIChmZ2V0cyhs
aW5lLCBMSU5FX0xFTkdUSCwgc3RkaW4pID09IE5VTEwpIHsKLSNlbmRpZgotCQkJaWYgKHVzcnNj
dHBfc2h1dGRvd24ocywgU0hVVF9XUikgPCAwKSB7Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NodXRk
b3duIik7Ci0JCQl9Ci0JCQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYg
X1dJTjMyCi0JCQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQkJCXNsZWVwKDEpOwotI2VuZGlmCi0J
CQl9Ci0JCQlicmVhazsKLQkJfQotCQlzbmRpbmZvLnNuZF9zaWQgPSAxOwotCQlzbmRpbmZvLnNu
ZF9mbGFncyA9IDA7Ci0JCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChESVNDQVJEX1BQSUQpOwot
CQlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKLQkJc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOwot
CQlpZiAodXNyc2N0cF9zZW5kdihzLCBsaW5lLCBzdHJsZW4obGluZSksIE5VTEwsIDAsICh2b2lk
ICopJnNuZGluZm8sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2xlbl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKLQkJ
CXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOwotCQl9Ci0JfQotCXdoaWxlICh1c3JzY3RwX2Zpbmlz
aCgpICE9IDApIHsKLSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQlzbGVl
cCgxKTsKLSNlbmRpZgotCX0KLSNpZmRlZiBfV0lOMzIKLQlUZXJtaW5hdGVUaHJlYWQodGlkLCAw
KTsKLQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUpOwotCWlmIChjbG9zZXNvY2tl
dChmZCkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9Ci0JV1NBQ2xlYW51cCgp
OwotI2Vsc2UKLQlwdGhyZWFkX2NhbmNlbCh0aWQpOwotCXB0aHJlYWRfam9pbih0aWQsIE5VTEwp
OwotCWlmIChjbG9zZShmZCkgPCAwKSB7Ci0JCXBlcnJvcigiY2xvc2UiKTsKLQl9Ci0jZW5kaWYK
LQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy9la3Jfc2VydmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAyZjAyYjFjZjIx
NmRhMzc3NWU5OTQ0ZmY2MTk0YTczMjIzOWQ2NzIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYworKysgL2Rldi9udWxsCkBA
IC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBU
dWV4ZW4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklO
R1MKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNp
bmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzdGRh
cmcuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxlcnJuby5o
PgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jaW5j
bHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0jaW5jbHVk
ZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCi0KLSNpZmRl
ZiBfV0lOMzIKLXN0YXRpYyBEV09SRCBXSU5BUEkKLSNlbHNlCi1zdGF0aWMgdm9pZCAqCi0jZW5k
aWYKLWhhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQg
KmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJ
WkVdOwotCWNoYXIgKmR1bXBfYnVmOwotCXNzaXplX3QgbGVuZ3RoOwotCi0jaWZkZWYgX1dJTjMy
Ci0JZmRwID0gKFNPQ0tFVCAqKWFyZzsKLSNlbHNlCi0JZmRwID0gKGludCAqKWFyZzsKLSNlbmRp
ZgotCWZvciAoOzspIHsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNh
bmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJ
WkUsIDApOwotCQlpZiAobGVuZ3RoID4gMCkgewotCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBf
ZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5V
TEwpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOwotCQkJCXVzcnNjdHBf
ZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwotCQkJfQotCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRw
LCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKLQkJfQotCX0KLSNpZmRlZiBfV0lOMzIKLQlyZXR1
cm4gMDsKLSNlbHNlCi0JcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50Ci1j
b25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3Qg
dG9zLCB1aW50OF90IHNldF9kZikKLXsKLQljaGFyICpkdW1wX2J1ZjsKLSNpZmRlZiBfV0lOMzIK
LQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4z
MgotCWZkcCA9IChTT0NLRVQgKilhZGRyOwotI2Vsc2UKLQlmZHAgPSAoaW50ICopYWRkcjsKLSNl
bmRpZgotCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFND
VFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKLQkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1
bXBfYnVmKTsKLQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7Ci0JfQotI2lmZGVm
IF9XSU4zMgotCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9F
UlJPUikgewotCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKLSNlbHNlCi0JaWYgKHNlbmQo
KmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgewotCQlyZXR1cm4gKGVycm5vKTsKLSNlbmRpZgot
CX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1yZWNlaXZlX2Ni
KHN0cnVjdCBzb2NrZXQgKnMsIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEs
Ci0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50
IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChmbGFncyAm
IE1TR19OT1RJRklDQVRJT04pIHsKLQkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAl
ZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYoIk1z
ZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAl
dSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKLQkJCSAgICAgICAoaW50KWRh
dGFsZW4sCi0JCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAotCQkJICAgICAgIG50b2hz
KGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCi0JCQkgICAgICAgcmN2LnJjdl9zaWQsCi0JCQkgICAg
ICAgcmN2LnJjdl9zc24sCi0JCQkgICAgICAgcmN2LnJjdl90c24sCi0JCQkgICAgICAgbnRvaGwo
cmN2LnJjdl9wcGlkKSwKLQkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOwotCQl9Ci0JCWZyZWUo
ZGF0YSk7Ci0JfSBlbHNlIHsKLQkJdXNyc2N0cF9jbG9zZShzKTsKLQl9Ci0JcmV0dXJuICgxKTsK
LX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZh
X2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1hdCwgYXAp
OwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQot
ewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47
Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUIGZkOwotI2Vsc2UKLQlpbnQgZmQ7Ci0jZW5kaWYKLQlz
dHJ1Y3Qgc29ja2V0ICpzOwotI2lmZGVmIF9XSU4zMgotCUhBTkRMRSB0aWQ7Ci0jZWxzZQotCXB0
aHJlYWRfdCB0aWQ7Ci0jZW5kaWYKLSNpZmRlZiBfV0lOMzIKLQlXU0FEQVRBIHdzYURhdGE7Ci0j
ZW5kaWYKLQotCWlmIChhcmdjIDwgNCkgewotCQlwcmludGYoImVycm9yOiB0aGlzIHByb2dyYW0g
cmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQot
I2lmZGVmIF9XSU4zMgotCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FEYXRhKSAh
PSAwKSB7Ci0JCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOwotCQlleGl0IChFWElUX0ZB
SUxVUkUpOwotCX0KLSNlbmRpZgotCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1dCwgZGVidWdf
cHJpbnRmKTsKLQkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAqLwotI2lmZGVmIF9X
SU4zMgotCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFAp
KSA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQlwcmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRoIGVy
cm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLSNlbHNlCi0JaWYgKChmZCA9IHNv
Y2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgewotCQlwZXJyb3Io
InNvY2tldCIpOwotCX0KLSNlbmRpZgotCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSk7Ci0Jc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lO
X0xFTgotCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYK
LQlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKLQlpZiAoIWluZXRfcHRvbihB
Rl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpewotCQlwcmludGYoImVycm9y
OiBpbnZhbGlkIGFkZHJlc3NcbiIpOwotCQlleGl0KDEpOwotCX0KLSNpZmRlZiBfV0lOMzIKLQlp
ZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGgg
ZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vsc2UKLQlpZiAoYmluZChm
ZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8
IDApIHsKLQkJcGVycm9yKCJiaW5kIik7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZzaW4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0j
aWZkZWYgSEFWRV9TSU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKLSNlbmRpZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkpOwotCWlm
ICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7Ci0J
CXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQotI2lm
ZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImNv
bm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9
Ci0jZWxzZQotCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImNvbm5lY3QiKTsKLQl9Ci0j
ZW5kaWYKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdf
b24oU0NUUF9ERUJVR19OT05FKTsKLSNlbmRpZgotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Vj
bl9lbmFibGUoMCk7Ci0JdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkKTsKLSNp
ZmRlZiBfV0lOMzIKLQl0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRz
LCAodm9pZCAqKSZmZCwgMCwgTlVMTCk7Ci0jZWxzZQotCXB0aHJlYWRfY3JlYXRlKCZ0aWQsIE5V
TEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpOwotI2VuZGlmCi0JaWYgKChzID0gdXNy
c2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9j
YiwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIp
OwotCX0KLQltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
LQlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVmIEhBVkVfU0NPTk5fTEVOCi0J
c2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgot
CXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKLQlzY29ubi5zY29ubl9hZGRyID0gKHZv
aWQgKikmZmQ7Ci0JaWYgKHVzcnNjdHBfYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25u
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3Rw
X2JpbmQiKTsKLQl9Ci0JaWYgKHVzcnNjdHBfbGlzdGVuKHMsIDEpIDwgMCkgewotCQlwZXJyb3Io
InVzcnNjdHBfbGlzdGVuIik7Ci0JfQotCXdoaWxlICgxKSB7Ci0JCWlmICh1c3JzY3RwX2FjY2Vw
dChzLCBOVUxMLCBOVUxMKSA9PSBOVUxMKSB7Ci0JCQlwZXJyb3IoInVzcnNjdHBfYWNjZXB0Iik7
Ci0JCX0KLQl9Ci0JdXNyc2N0cF9jbG9zZShzKTsKLQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cygodm9pZCAqKSZmZCk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewotI2lmZGVm
IF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQot
I2lmZGVmIF9XSU4zMgotCVRlcm1pbmF0ZVRocmVhZCh0aWQsIDApOwotCVdhaXRGb3JTaW5nbGVP
YmplY3QodGlkLCBJTkZJTklURSk7Ci0JaWYgKGNsb3Nlc29ja2V0KGZkKSA9PSBTT0NLRVRfRVJS
T1IpIHsKLQkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwg
V1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLQlXU0FDbGVhbnVwKCk7Ci0jZWxzZQotCXB0aHJlYWRf
Y2FuY2VsKHRpZCk7Ci0JcHRocmVhZF9qb2luKHRpZCwgTlVMTCk7Ci0JaWYgKGNsb3NlKGZkKSA8
IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCX0KLSNlbmRpZgotCXJldHVybiAoMCk7Ci19CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9odHRwX2NsaWVudC5jCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZkMWVlN2RkODViNjQ1MmRhNDA1ZDBmZWNh
N2RkZWFiNmRlNWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9wcm9ncmFtcy9odHRwX2NsaWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMjI5ICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgRmVsaXggV2VpbnJhbmsKLSAqCi0gKiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJv
amVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBV
c2FnZTogaHR0cF9jbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgW2xvY2FsX3BvcnRdIFts
b2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0gW3VyaV0KLSAqLwotCi0jaWZk
ZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5kaWYKLSNpbmNs
dWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgot
I2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx1bmlzdGQuaD4K
LSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEv
aW5ldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0
cC5oPgotCi1pbnQgZG9uZSA9IDA7Ci1zdGF0aWMgY29uc3QgY2hhciAqcmVxdWVzdF9wcmVmaXgg
PSAiR0VUIjsKLXN0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3Bvc3RmaXggPSAiSFRUUC8xLjBc
clxuVXNlci1hZ2VudDogbGlidXNyc2N0cFxyXG5Db25uZWN0aW9uOiBjbG9zZVxyXG5cclxuIjsK
LWNoYXIgcmVxdWVzdFs1MTJdOwotCi0jaWZkZWYgX1dJTjMyCi10eXBlZGVmIGNoYXIqIGNhZGRy
X3Q7Ci0jZW5kaWYKLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXpl
X3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxw
X2luZm8pCi17Ci0JaWYgKGRhdGEgPT0gTlVMTCkgewotCQlkb25lID0gMTsKLQkJdXNyc2N0cF9j
bG9zZShzb2NrKTsKLQl9IGVsc2UgewotI2lmZGVmIF9XSU4zMgotCQlfd3JpdGUoX2ZpbGVubyhz
dGRvdXQpLCBkYXRhLCAodW5zaWduZWQgaW50KWRhdGFsZW4pOwotI2Vsc2UKLQkJaWYgKHdyaXRl
KGZpbGVubyhzdGRvdXQpLCBkYXRhLCBkYXRhbGVuKSA8IDApIHsKLQkJCXBlcnJvcigid3JpdGUi
KTsKLQkJfQotI2VuZGlmCi0JCWZyZWUoZGF0YSk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZv
aWQKLWRlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFw
OwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9l
bmQoYXApOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1
Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyNDsKLQlzdHJ1Y3Qgc29j
a2FkZHJfaW42IGFkZHI2OwotCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7Ci0JaW50IHJl
c3VsdDsKLQotICAgIGlmIChhcmdjIDwgMykgewotICAgICAgICBwcmludGYoIlVzYWdlOiBodHRw
X2NsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fw
c19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XSBbdXJpXVxuIik7Ci0gICAgICAgIHJldHVybihF
WElUX0ZBSUxVUkUpOwotICAgIH0KLQotCXJlc3VsdCA9IDA7Ci0JaWYgKGFyZ2MgPiA0KSB7Ci0J
CXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0gZWxz
ZSB7Ci0JCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0KLQotI2lm
ZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RF
QlVHX0FMTCk7Ci0jZW5kaWYKLQotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgy
KTsKLQotCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwg
SVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewotCQlw
ZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JCXJlc3VsdCA9IDE7Ci0JCWdvdG8gb3V0OwotCX0K
LQotCWlmIChhcmdjID4gMykgewotCQltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlhZGRyNi5zaW42
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQlhZGRyNi5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlhZGRyNi5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3Zb
M10pKTsKLQkJYWRkcjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0JCWlmICh1c3JzY3RwX2Jp
bmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKSA8IDApIHsKLQkJCXBlcnJvcigiYmluZCIpOwotCQkJdXNyc2N0cF9jbG9zZShzb2Nr
KTsKLQkJCXJlc3VsdCA9IDI7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCWlmIChhcmdjID4g
NSkgewotCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2Fwcykp
OwotCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCWVuY2Fwcy5z
dWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOwotCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qg
dm9pZCAqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2Fwcykp
IDwgMCkgewotCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7Ci0JCQl1c3JzY3RwX2Nsb3NlKHNvY2sp
OwotCQkJcmVzdWx0ID0gMzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCi0JaWYgKGFyZ2MgPiA2
KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCV9zbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCks
ICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCBhcmd2WzZdLCByZXF1ZXN0X3Bvc3RmaXgpOwot
I2Vsc2UKLQkJc25wcmludGYocmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCBy
ZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwgcmVxdWVzdF9wb3N0Zml4KTsKLSNlbmRpZgotCX0gZWxz
ZSB7Ci0jaWZkZWYgX1dJTjMyCi0JCV9zbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCks
ICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCk7Ci0jZWxz
ZQotCQlzbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVl
c3RfcHJlZml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCk7Ci0jZW5kaWYKLQl9Ci0KLQlwcmludGYo
IlxuSFRUUCByZXF1ZXN0OlxuJXNcbiIsIHJlcXVlc3QpOwotCXByaW50ZigiXG5IVFRQIHJlc3Bv
bnNlOlxuIik7Ci0KLQltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKLQltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JYWRkcjQuc2luX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9TSU42X0xFTgotCWFk
ZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JYWRk
cjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
LQlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotCWFkZHI2LnNpbjZfcG9y
dCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotCWlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZ3Zb
MV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKLQkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2Nr
LCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
IDwgMCkgewotCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKLQkJCXVzcnNjdHBfY2xvc2Uo
c29jayk7Ci0JCQlyZXN1bHQgPSA0OwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgaWYgKGlu
ZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsKLQkJaWYg
KHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0LCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIp
OwotCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJCXJlc3VsdCA9IDU7Ci0JCQlnb3RvIG91dDsK
LQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ZigiSWxsZWdhbCBkZXN0aW5hdGlvbiBhZGRyZXNzXG4i
KTsKLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJcmVzdWx0ID0gNjsKLQkJZ290byBvdXQ7Ci0J
fQotCi0JLyogc2VuZCBHRVQgcmVxdWVzdCAqLwotCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssIHJl
cXVlc3QsIHN0cmxlbihyZXF1ZXN0KSwgTlVMTCwgMCwgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lO
Rk8sIDApIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKLQkJdXNyc2N0cF9jbG9z
ZShzb2NrKTsKLQkJcmVzdWx0ID0gNjsKLQkJZ290byBvdXQ7Ci0JfQotCi0Jd2hpbGUgKCFkb25l
KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEqMTAwMCk7Ci0jZWxzZQotCQlzbGVlcCgxKTsK
LSNlbmRpZgotCX0KLW91dDoKLQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZk
ZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQl9
Ci0JcmV0dXJuIChyZXN1bHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL3J0Y3dlYi5jIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dy
YW1zL3J0Y3dlYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTBiNzM0MTI5YmU4
ODdkMDY3OTJiNzVmYjU0YWQxMjc1ODRkOGE1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9ydGN3ZWIuYworKysgL2Rldi9udWxsCkBAIC0xLDE1
MTcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1ZXhl
bgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgSXJlbmUgUnVlbmdlbGVyCi0gKgotICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKiAkSWQ6
IHJ0Y3dlYi5jLHYgMS4yNiAyMDEyLTA3LTE3IDEzOjUwOjAyIHR1ZXhlbiBFeHAgJAotICovCi0K
LS8qCi0gKiBnY2MgLVdhbGwgLXN0ZD1jOTkgLXBlZGFudGljIC1vIHJ0Y3dlYiBydGN3ZWIuYyAt
bHVzcnNjdHAKLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgX1dJTjMyCi0j
ZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNp
bmNsdWRlIDx3czJ0Y3BpcC5oPgotI2luY2x1ZGUgPGNydGRiZy5oPgotI2Vsc2UKLSNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8dXNyc2N0cC5o
PgotCi0jZGVmaW5lIExJTkVfTEVOR1RIICgxMDI0KQotI2RlZmluZSBCVUZGRVJfU0laRSAoMTw8
MTYpCi0jZGVmaW5lIE5VTUJFUl9PRl9DSEFOTkVMUyAoMTAwKQotI2RlZmluZSBOVU1CRVJfT0Zf
U1RSRUFNUyAoMTAwKQotCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9QUElEX0NPTlRST0wgICA1MAot
I2RlZmluZSBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkcgNTEKLSNkZWZpbmUgREFUQV9DSEFO
TkVMX1BQSURfQklOQVJZICAgIDUyCi0KLSNkZWZpbmUgREFUQV9DSEFOTkVMX0NMT1NFRCAgICAg
MAotI2RlZmluZSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORyAxCi0jZGVmaW5lIERBVEFfQ0hBTk5F
TF9PUEVOICAgICAgIDIKLSNkZWZpbmUgREFUQV9DSEFOTkVMX0NMT1NJTkcgICAgMwotCi0jZGVm
aW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUSAweDAwMDAwMDAxCi0jZGVmaW5lIERBVEFf
Q0hBTk5FTF9GTEFHU19TRU5EX1JTUCAweDAwMDAwMDAyCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9G
TEFHU19TRU5EX0FDSyAweDAwMDAwMDA0Ci0KLXN0cnVjdCBjaGFubmVsIHsKLQl1aW50MzJfdCBp
ZDsKLQl1aW50MzJfdCBwcl92YWx1ZTsKLQl1aW50MTZfdCBwcl9wb2xpY3k7Ci0JdWludDE2X3Qg
aV9zdHJlYW07Ci0JdWludDE2X3Qgb19zdHJlYW07Ci0JdWludDhfdCB1bm9yZGVyZWQ7Ci0JdWlu
dDhfdCBzdGF0ZTsKLQl1aW50MzJfdCBmbGFnczsKLX07Ci0KLXN0cnVjdCBwZWVyX2Nvbm5lY3Rp
b24gewotCXN0cnVjdCBjaGFubmVsIGNoYW5uZWxzW05VTUJFUl9PRl9DSEFOTkVMU107Ci0Jc3Ry
dWN0IGNoYW5uZWwgKmlfc3RyZWFtX2NoYW5uZWxbTlVNQkVSX09GX1NUUkVBTVNdOwotCXN0cnVj
dCBjaGFubmVsICpvX3N0cmVhbV9jaGFubmVsW05VTUJFUl9PRl9TVFJFQU1TXTsKLQl1aW50MTZf
dCBvX3N0cmVhbV9idWZmZXJbTlVNQkVSX09GX1NUUkVBTVNdOwotCXVpbnQzMl90IG9fc3RyZWFt
X2J1ZmZlcl9jb3VudGVyOwotI2lmZGVmIF9XSU4zMgotCUNSSVRJQ0FMX1NFQ1RJT04gbXV0ZXg7
Ci0jZWxzZQotCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKLSNlbmRpZgotCXN0cnVjdCBzb2NrZXQg
KnNvY2s7Ci19IHBlZXJfY29ubmVjdGlvbjsKLQotI2RlZmluZSBEQVRBX0NIQU5ORUxfT1BFTl9S
RVFVRVNUICAwCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BPTlNFIDEKLSNkZWZpbmUg
REFUQV9DSEFOTkVMX0FDSyAgICAgICAgICAgMgotCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJ
QUJMRSAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJF
QU0gICAgICAgICAxCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9VTlJFTElBQkxFICAgICAgICAgICAg
ICAyCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1JFWE1JVCAzCi0jZGVm
aW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEICA0Ci0KLSNkZWZpbmUgREFU
QV9DSEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9XRUQgMHgwMDAxCi0KLSNpZm5kZWYgX1dJ
TjMyCi0jZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZWxzZQot
I3ByYWdtYSBwYWNrIChwdXNoLCAxKQotI2RlZmluZSBTQ1RQX1BBQ0tFRAotI2VuZGlmCi0KLXN0
cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0IHsKLQl1aW50OF90IG1zZ190eXBl
OyAvKiBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICovCi0JdWludDhfdCBjaGFubmVsX3R5cGU7
Ci0JdWludDE2X3QgZmxhZ3M7Ci0JdWludDE2X3QgcmVsaWFiaWxpdHlfcGFyYW1zOwotCWludDE2
X3QgcHJpb3JpdHk7Ci0JY2hhciBsYWJlbFtdOwotfSBTQ1RQX1BBQ0tFRDsKLQotc3RydWN0IHJ0
Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlIHsKLQl1aW50OF90ICBtc2dfdHlwZTsgLyog
REFUQV9DSEFOTkVMX09QRU5fUkVTUE9OU0UgKi8KLQl1aW50OF90ICBlcnJvcjsKLQl1aW50MTZf
dCBmbGFnczsKLQl1aW50MTZfdCByZXZlcnNlX3N0cmVhbTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0
cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrIHsKLQl1aW50OF90ICBtc2dfdHlwZTsgLyogREFU
QV9DSEFOTkVMX0FDSyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotI2lmZGVmIF9XSU4zMgotI3ByYWdt
YSBwYWNrKHBvcCkKLSNlbmRpZgotCi0jdW5kZWYgU0NUUF9QQUNLRUQKLQotc3RhdGljIHZvaWQK
LWluaXRfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQotewotCXVp
bnQzMl90IGk7Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
TlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKLQkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxzW2ld
KTsKLQkJY2hhbm5lbC0+aWQgPSBpOwotCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9D
TE9TRUQ7Ci0JCWNoYW5uZWwtPnByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOwotCQljaGFu
bmVsLT5wcl92YWx1ZSA9IDA7Ci0JCWNoYW5uZWwtPmlfc3RyZWFtID0gMDsKLQkJY2hhbm5lbC0+
b19zdHJlYW0gPSAwOwotCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwotCQljaGFubmVsLT5mbGFn
cyA9IDA7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfU1RSRUFNUzsgaSsrKSB7Ci0J
CXBjLT5pX3N0cmVhbV9jaGFubmVsW2ldID0gTlVMTDsKLQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxb
aV0gPSBOVUxMOwotCQlwYy0+b19zdHJlYW1fYnVmZmVyW2ldID0gMDsKLQl9Ci0JcGMtPm9fc3Ry
ZWFtX2J1ZmZlcl9jb3VudGVyID0gMDsKLQlwYy0+c29jayA9IE5VTEw7Ci0jaWZkZWYgX1dJTjMy
Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkpOwotI2Vsc2UKLQlwdGhy
ZWFkX211dGV4X2luaXQoJnBjLT5tdXRleCwgTlVMTCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZv
aWQKLWxvY2tfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQotewot
I2lmZGVmIF9XSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYocGMtPm11dGV4KSk7Ci0jZWxz
ZQotCXB0aHJlYWRfbXV0ZXhfbG9jaygmcGMtPm11dGV4KTsKLSNlbmRpZgotfQotCi1zdGF0aWMg
dm9pZAotdW5sb2NrX3BlZXJfY29ubmVjdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykK
LXsKLSNpZmRlZiBfV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkpOwot
I2Vsc2UKLQlwdGhyZWFkX211dGV4X3VubG9jaygmcGMtPm11dGV4KTsKLSNlbmRpZgotfQotCi1z
dGF0aWMgc3RydWN0IGNoYW5uZWwgKgotZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHN0cnVjdCBw
ZWVyX2Nvbm5lY3Rpb24gKnBjLCB1aW50MTZfdCBpX3N0cmVhbSkKLXsKLQlpZiAoaV9zdHJlYW0g
PCBOVU1CRVJfT0ZfU1RSRUFNUykgewotCQlyZXR1cm4gKHBjLT5pX3N0cmVhbV9jaGFubmVsW2lf
c3RyZWFtXSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci19Ci0KLXN0YXRpYyBz
dHJ1Y3QgY2hhbm5lbCAqCi1maW5kX2NoYW5uZWxfYnlfb19zdHJlYW0oc3RydWN0IHBlZXJfY29u
bmVjdGlvbiAqcGMsIHVpbnQxNl90IG9fc3RyZWFtKQotewotCWlmIChvX3N0cmVhbSA8IE5VTUJF
Ul9PRl9TVFJFQU1TKSB7Ci0JCXJldHVybiAocGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1d
KTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCBj
aGFubmVsICoKLWZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQot
ewotCXVpbnQzMl90IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBp
KyspIHsKLQkJaWYgKHBjLT5jaGFubmVsc1tpXS5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ0xPU0VE
KSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSBOVU1CRVJfT0ZfQ0hBTk5FTFMpIHsK
LQkJcmV0dXJuIChOVUxMKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKCYocGMtPmNoYW5uZWxzW2ld
KSk7Ci0JfQotfQotCi1zdGF0aWMgdWludDE2X3QKLWZpbmRfZnJlZV9vX3N0cmVhbShzdHJ1Y3Qg
cGVlcl9jb25uZWN0aW9uICpwYykKLXsKLQlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVzOwotCXVp
bnQzMl90IGksIGxpbWl0OwotCXNvY2tsZW5fdCBsZW47Ci0KLQlsZW4gPSAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOwotCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocGMtPnNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsICZsZW4pIDwgMCkgewotCQlw
ZXJyb3IoImdldHNvY2tvcHQiKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKHN0YXR1cy5zc3Rh
dF9vdXRzdHJtcyA8IE5VTUJFUl9PRl9TVFJFQU1TKSB7Ci0JCWxpbWl0ID0gc3RhdHVzLnNzdGF0
X291dHN0cm1zOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gTlVNQkVSX09GX1NUUkVBTVM7Ci0JfQot
CS8qIHN0cmVhbSBpZCAwIGlzIHJlc2VydmVkICovCi0JZm9yIChpID0gMTsgaSA8IGxpbWl0OyBp
KyspIHsKLQkJaWYgKHBjLT5vX3N0cmVhbV9jaGFubmVsW2ldID09IE5VTEwpIHsKLQkJCWJyZWFr
OwotCQl9Ci0JfQotCWlmIChpID09IGxpbWl0KSB7Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsK
LQkJcmV0dXJuICgodWludDE2X3QpaSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcmVxdWVzdF9t
b3JlX29fc3RyZWFtcyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKLXsKLQlzdHJ1Y3Qgc2N0
cF9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zIHNhczsKLQl1aW50MzJf
dCBpLCBvX3N0cmVhbXNfbmVlZGVkOwotCXNvY2tsZW5fdCBsZW47Ci0KLQlvX3N0cmVhbXNfbmVl
ZGVkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKLQkJ
aWYgKChwYy0+Y2hhbm5lbHNbaV0uc3RhdGUgPT0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkcpICYm
Ci0JCSAgICAocGMtPmNoYW5uZWxzW2ldLm9fc3RyZWFtID09IDApKSB7Ci0JCQlvX3N0cmVhbXNf
bmVlZGVkKys7Ci0JCX0KLQl9Ci0JbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c3RhdHVzKTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAs
IFNDVFBfU1RBVFVTLCAmc3RhdHVzLCAmbGVuKSA8IDApIHsKLQkJcGVycm9yKCJnZXRzb2Nrb3B0
Iik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHN0YXR1cy5zc3RhdF9vdXRzdHJtcyArIG9fc3RyZWFt
c19uZWVkZWQgPiBOVU1CRVJfT0ZfU1RSRUFNUykgewotCQlvX3N0cmVhbXNfbmVlZGVkID0gTlVN
QkVSX09GX1NUUkVBTVMgLSBzdGF0dXMuc3N0YXRfb3V0c3RybXM7Ci0JfQotCWlmIChvX3N0cmVh
bXNfbmVlZGVkID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoJnNhcywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zKSk7Ci0Jc2FzLnNhc19pbnN0cm1zID0gMDsKLQlzYXMu
c2FzX291dHN0cm1zID0gKHVpbnQxNl90KW9fc3RyZWFtc19uZWVkZWQ7IC8qIFhYWCBlcm9yIGhh
bmRsaW5nICovCi0JaWYgKHVzcnNjdHBfc2V0c29ja29wdChwYy0+c29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX0FERF9TVFJFQU1TLCAmc2FzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9h
ZGRfc3RyZWFtcykpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKLQl9Ci0JcmV0dXJu
OwotfQotCi1zdGF0aWMgaW50Ci1zZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdlKHN0cnVjdCBzb2Nr
ZXQgKnNvY2ssIHVpbnQxNl90IG9fc3RyZWFtLCB1aW50OF90IHVub3JkZXJlZCwgdWludDE2X3Qg
cHJfcG9saWN5LCB1aW50MzJfdCBwcl92YWx1ZSkKLXsKLQkvKiBYWFg6IFRoaXMgc2hvdWxkIGJl
IGVuY29kZWQgaW4gYSBiZXR0ZXIgd2F5ICovCi0Jc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9v
cGVuX3JlcXVlc3QgcmVxOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKLQotCW1lbXNl
dCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3Qp
KTsKLQlyZXEubXNnX3R5cGUgPSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUOwotCXN3aXRjaCAo
cHJfcG9saWN5KSB7Ci0JY2FzZSBTQ1RQX1BSX1NDVFBfTk9ORToKLQkJLyogWFhYOiBXaGF0IGFi
b3V0IERBVEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gKi8KLQkJcmVxLmNoYW5uZWxfdHlwZSA9
IERBVEFfQ0hBTk5FTF9SRUxJQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1BSX1NDVFBfVFRM
OgotCQkvKiBYWFg6IFdoYXQgYWJvdXQgREFUQV9DSEFOTkVMX1VOUkVMSUFCTEUgKi8KLQkJcmVx
LmNoYW5uZWxfdHlwZSA9IERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEOwotCQli
cmVhazsKLQljYXNlIFNDVFBfUFJfU0NUUF9SVFg6Ci0JCXJlcS5jaGFubmVsX3R5cGUgPSBEQVRB
X0NIQU5ORUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J
CXJldHVybiAoMCk7Ci0JfQotCXJlcS5mbGFncyA9IGh0b25zKDApOwotCWlmICh1bm9yZGVyZWQp
IHsKLQkJcmVxLmZsYWdzIHw9IGh0b25zKERBVEFfQ0hBTk5FTF9GTEFHX09VVF9PRl9PUkRFUl9B
TExPV0VEKTsKLQl9Ci0JcmVxLnJlbGlhYmlsaXR5X3BhcmFtcyA9IGh0b25zKCh1aW50MTZfdClw
cl92YWx1ZSk7IC8qIFhYWCBXaHkgMTYtYml0ICovCi0JcmVxLnByaW9yaXR5ID0gaHRvbnMoMCk7
IC8qIFhYWDogYWRkIHN1cHBvcnQgKi8KLQltZW1zZXQoJnNuZGluZm8sIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9zbmRpbmZvKSk7Ci0Jc25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07Ci0Jc25kaW5m
by5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKLQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFUQV9D
SEFOTkVMX1BQSURfQ09OVFJPTCk7Ci0JaWYgKHVzcnNjdHBfc2VuZHYoc29jaywKLQkgICAgICAg
ICAgICAgICAgICAmcmVxLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jl
cXVlc3QpLAotCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCi0JICAgICAgICAgICAgICAgICAg
JnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLAotCSAgICAg
ICAgICAgICAgICAgIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7Ci0JCXBlcnJvcigic2N0
cF9zZW5kdiIpOwotCQlyZXR1cm4gKDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMSk7Ci0JfQot
fQotCi1zdGF0aWMgaW50Ci1zZW5kX29wZW5fcmVzcG9uc2VfbWVzc2FnZShzdHJ1Y3Qgc29ja2V0
ICpzb2NrLCB1aW50MTZfdCBvX3N0cmVhbSwgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0JLyogWFhY
OiBUaGlzIHNob3VsZCBiZSBlbmNvZGVkIGluIGEgYmV0dGVyIHdheSAqLwotCXN0cnVjdCBydGN3
ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSByc3A7Ci0Jc3RydWN0IHNjdHBfc25kaW5mbyBz
bmRpbmZvOwotCi0JbWVtc2V0KCZyc3AsIDAsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFu
bmVsX29wZW5fcmVzcG9uc2UpKTsKLQlyc3AubXNnX3R5cGUgPSBEQVRBX0NIQU5ORUxfT1BFTl9S
RVNQT05TRTsKLQlyc3AuZXJyb3IgPSAwOwotCXJzcC5mbGFncyA9IGh0b25zKDApOwotCXJzcC5y
ZXZlcnNlX3N0cmVhbSA9IGh0b25zKGlfc3RyZWFtKTsKLQltZW1zZXQoJnNuZGluZm8sIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7Ci0Jc25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07
Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKLQlzbmRpbmZvLnNuZF9wcGlkID0gaHRv
bmwoREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTCk7Ci0JaWYgKHVzcnNjdHBfc2VuZHYoc29jaywK
LQkgICAgICAgICAgICAgICAgICAmcnNwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5l
bF9vcGVuX3Jlc3BvbnNlKSwKLQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotCSAgICAgICAg
ICAgICAgICAgICZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZv
KSwKLQkgICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlw
ZXJyb3IoInNjdHBfc2VuZHYiKTsKLQkJcmV0dXJuICgwKTsKLQl9IGVsc2UgewotCQlyZXR1cm4g
KDEpOwotCX0KLX0KLQotc3RhdGljIGludAotc2VuZF9vcGVuX2Fja19tZXNzYWdlKHN0cnVjdCBz
b2NrZXQgKnNvY2ssIHVpbnQxNl90IG9fc3RyZWFtKQotewotCS8qIFhYWDogVGhpcyBzaG91bGQg
YmUgZW5jb2RlZCBpbiBhIGJldHRlciB3YXkgKi8KLQlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVs
X2FjayBhY2s7Ci0Jc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOwotCi0JbWVtc2V0KCZhY2ss
IDAsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpOwotCWFjay5tc2dfdHlw
ZSA9IERBVEFfQ0hBTk5FTF9BQ0s7Ci0JbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfc25kaW5mbykpOwotCXNuZGluZm8uc25kX3NpZCA9IG9fc3RyZWFtOwotCXNuZGluZm8u
c25kX2ZsYWdzID0gU0NUUF9FT1I7Ci0Jc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBVEFfQ0hB
Tk5FTF9QUElEX0NPTlRST0wpOwotCWlmICh1c3JzY3RwX3NlbmR2KHNvY2ssCi0JICAgICAgICAg
ICAgICAgICAgJmFjaywgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSwKLQkg
ICAgICAgICAgICAgICAgICBOVUxMLCAwLAotCSAgICAgICAgICAgICAgICAgICZzbmRpbmZvLCAo
c29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwKLQkgICAgICAgICAgICAgICAg
ICBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsK
LQkJcmV0dXJuICgwKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDEpOwotCX0KLX0KLQotc3RhdGlj
IHZvaWQKLXNlbmRfZGVmZXJyZWRfbWVzc2FnZXMoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMp
Ci17Ci0JdWludDMyX3QgaTsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKLQotCWZvciAoaSA9
IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgewotCQljaGFubmVsID0gJihwYy0+Y2hh
bm5lbHNbaV0pOwotCQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VO
RF9SRVEpIHsKLQkJCWlmIChzZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLT5zb2NrLCBjaGFu
bmVsLT5vX3N0cmVhbSwgY2hhbm5lbC0+dW5vcmRlcmVkLCBjaGFubmVsLT5wcl9wb2xpY3ksIGNo
YW5uZWwtPnByX3ZhbHVlKSkgewotCQkJCWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxf
RkxBR1NfU0VORF9SRVE7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsK
LQkJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAo
Y2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1ApIHsKLQkJCWlmIChz
ZW5kX29wZW5fcmVzcG9uc2VfbWVzc2FnZShwYy0+c29jaywgY2hhbm5lbC0+b19zdHJlYW0sIGNo
YW5uZWwtPmlfc3RyZWFtKSkgewotCQkJCWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxf
RkxBR1NfU0VORF9SU1A7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsK
LQkJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAo
Y2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0spIHsKLQkJCWlmIChz
ZW5kX29wZW5fYWNrX21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwtPm9fc3RyZWFtKSkgewotCQkJ
CWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9BQ0s7Ci0JCQl9IGVs
c2UgewotCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKLQkJCQkJLyogWFhYOiBlcnJvciBoYW5k
bGluZyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1
Y3QgY2hhbm5lbCAqCi1vcGVuX2NoYW5uZWwoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHVp
bnQ4X3QgdW5vcmRlcmVkLCB1aW50MTZfdCBwcl9wb2xpY3ksIHVpbnQzMl90IHByX3ZhbHVlKQot
ewotCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOwotCXVpbnQxNl90IG9fc3RyZWFtOwotCi0JaWYg
KChwcl9wb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCi0JICAgIChwcl9wb2xpY3kgIT0g
U0NUUF9QUl9TQ1RQX1RUTCkgJiYKLQkgICAgKHByX3BvbGljeSAhPSBTQ1RQX1BSX1NDVFBfUlRY
KSkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKHVub3JkZXJlZCAhPSAwKSAmJiAodW5v
cmRlcmVkICE9IDEpKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmICgocHJfcG9saWN5ID09
IFNDVFBfUFJfU0NUUF9OT05FKSAmJiAocHJfdmFsdWUgIT0gMCkpIHsKLQkJcmV0dXJuIChOVUxM
KTsKLQl9Ci0JaWYgKChjaGFubmVsID0gZmluZF9mcmVlX2NoYW5uZWwocGMpKSA9PSBOVUxMKSB7
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW9fc3RyZWFtID0gZmluZF9mcmVlX29fc3RyZWFtKHBj
KTsKLQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HOwotCWNoYW5uZWwt
PnVub3JkZXJlZCA9IHVub3JkZXJlZDsKLQljaGFubmVsLT5wcl9wb2xpY3kgPSBwcl9wb2xpY3k7
Ci0JY2hhbm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1ZTsKLQljaGFubmVsLT5vX3N0cmVhbSA9IG9f
c3RyZWFtOwotCWNoYW5uZWwtPmZsYWdzID0gMDsKLQlpZiAob19zdHJlYW0gPT0gMCkgewotCQly
ZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKLQl9IGVsc2UgewotCQlpZiAoc2VuZF9vcGVuX3Jl
cXVlc3RfbWVzc2FnZShwYy0+c29jaywgb19zdHJlYW0sIHVub3JkZXJlZCwgcHJfcG9saWN5LCBw
cl92YWx1ZSkpIHsKLQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7Ci0JCQkJcGMtPm9fc3RyZWFt
X2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKLQkJCQljaGFubmVsLT5mbGFncyB8PSBEQVRB
X0NIQU5ORUxfRkxBR1NfU0VORF9SRVE7Ci0JCQl9IGVsc2UgewotCQkJCWNoYW5uZWwtPnN0YXRl
ID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKLQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwotCQkJ
CWNoYW5uZWwtPnByX3BvbGljeSA9IDA7Ci0JCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwotCQkJ
CWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKLQkJCQljaGFubmVsLT5mbGFncyA9IDA7Ci0JCQkJY2hh
bm5lbCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjaGFubmVsKTsKLX0KLQotc3Rh
dGljIGludAotc2VuZF91c2VyX21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHN0
cnVjdCBjaGFubmVsICpjaGFubmVsLCBjaGFyICptZXNzYWdlLCBzaXplX3QgbGVuZ3RoKQotewot
CXN0cnVjdCBzY3RwX3NlbmR2X3NwYSBzcGE7Ci0KLQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0J
CXJldHVybiAoMCk7Ci0JfQotCWlmICgoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX09Q
RU4pICYmCi0JICAgIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykp
IHsKLQkJLyogWFhYOiBXaGF0IHRvIGRvIGluIG90aGVyIHN0YXRlcyAqLwotCQlyZXR1cm4gKDAp
OwotCX0KLQotCW1lbXNldCgmc3BhLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZHZfc3BhKSk7
Ci0Jc3BhLnNlbmR2X3NuZGluZm8uc25kX3NpZCA9IGNoYW5uZWwtPm9fc3RyZWFtOwotCWlmICgo
Y2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4pICYmCi0JICAgIChjaGFubmVsLT51
bm9yZGVyZWQpKSB7Ci0JCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFncyA9IFNDVFBfRU9SIHwg
U0NUUF9VTk9SREVSRUQ7Ci0JfSBlbHNlIHsKLQkJc3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdz
ID0gU0NUUF9FT1I7Ci0JfQotCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFU
QV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HKTsKLQlzcGEuc2VuZHZfZmxhZ3MgPSBTQ1RQX1NFTkRf
U05ESU5GT19WQUxJRDsKLQlpZiAoKGNoYW5uZWwtPnByX3BvbGljeSA9PSBTQ1RQX1BSX1NDVFBf
VFRMKSB8fAotCSAgICAoY2hhbm5lbC0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9SVFgpKSB7
Ci0JCXNwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gY2hhbm5lbC0+cHJfcG9saWN5OwotCQlz
cGEuc2VuZHZfcHJpbmZvLnByX3ZhbHVlID0gY2hhbm5lbC0+cHJfdmFsdWU7Ci0JCXNwYS5zZW5k
dl9mbGFncyB8PSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEOwotCX0KLQlpZiAodXNyc2N0cF9zZW5k
dihwYy0+c29jaywKLQkgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBsZW5ndGgsCi0JICAgICAg
ICAgICAgICAgICAgTlVMTCwgMCwKLQkgICAgICAgICAgICAgICAgICAmc3BhLCAoc29ja2xlbl90
KXNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpLAotCSAgICAgICAgICAgICAgICAgIFNDVFBf
U0VORFZfU1BBLCAwKSA8IDApIHsKLQkJcGVycm9yKCJzY3RwX3NlbmR2Iik7Ci0JCXJldHVybiAo
MCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZXNl
dF9vdXRnb2luZ19zdHJlYW0oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHVpbnQxNl90IG9f
c3RyZWFtKQotewotCXVpbnQzMl90IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgcGMtPm9fc3RyZWFt
X2J1ZmZlcl9jb3VudGVyOyBpKyspIHsKLQkJaWYgKHBjLT5vX3N0cmVhbV9idWZmZXJbaV0gPT0g
b19zdHJlYW0pIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlwYy0+b19zdHJlYW1fYnVmZmVyW3Bj
LT5vX3N0cmVhbV9idWZmZXJfY291bnRlcisrXSA9IG9fc3RyZWFtOwotCXJldHVybjsKLX0KLQot
c3RhdGljIHZvaWQKLXNlbmRfb3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHN0cnVjdCBwZWVyX2Nvbm5l
Y3Rpb24gKnBjKQotewotCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnNyczsKLQl1aW50MzJf
dCBpOwotCXNpemVfdCBsZW47Ci0KLQlpZiAocGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyID09
IDApIHsKLQkJcmV0dXJuOwotCX0KLQlsZW4gPSBzaXplb2Yoc2N0cF9hc3NvY190KSArICgyICsg
cGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyKSAqIHNpemVvZih1aW50MTZfdCk7Ci0Jc3JzID0g
KHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKiltYWxsb2MobGVuKTsKLQlpZiAoc3JzID09IE5V
TEwpIHsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoc3JzLCAwLCBsZW4pOwotCXNycy0+c3JzX2Zs
YWdzID0gU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkc7Ci0Jc3JzLT5zcnNfbnVtYmVyX3N0cmVh
bXMgPSBwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXI7Ci0JZm9yIChpID0gMDsgaSA8IHBjLT5v
X3N0cmVhbV9idWZmZXJfY291bnRlcjsgaSsrKSB7Ci0JCXNycy0+c3JzX3N0cmVhbV9saXN0W2ld
ID0gcGMtPm9fc3RyZWFtX2J1ZmZlcltpXTsKLQl9Ci0JaWYgKHVzcnNjdHBfc2V0c29ja29wdChw
Yy0+c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFU0VUX1NUUkVBTVMsIHNycywgKHNvY2tsZW5f
dClsZW4pIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKLQl9IGVsc2UgewotCQlmb3Ig
KGkgPSAwOyBpIDwgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOyBpKyspIHsKLQkJCXNycy0+
c3JzX3N0cmVhbV9saXN0W2ldID0gMDsKLQkJfQotCQlwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50
ZXIgPSAwOwotCX0KLQlmcmVlKHNycyk7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotY2xv
c2VfY2hhbm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IGNoYW5uZWwgKmNo
YW5uZWwpCi17Ci0JaWYgKGNoYW5uZWwgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWlmIChj
aGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BFTikgewotCQlyZXR1cm47Ci0JfQotCXJl
c2V0X291dGdvaW5nX3N0cmVhbShwYywgY2hhbm5lbC0+b19zdHJlYW0pOwotCXNlbmRfb3V0Z29p
bmdfc3RyZWFtX3Jlc2V0KHBjKTsKLQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9T
SU5HOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9vcGVuX3JlcXVlc3RfbWVz
c2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCAqcmVxLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7
Ci0JdWludDMyX3QgcHJfdmFsdWU7Ci0JdWludDE2X3QgcHJfcG9saWN5OwotCXVpbnQxNl90IG9f
c3RyZWFtOwotCXVpbnQ4X3QgdW5vcmRlcmVkOwotCi0JaWYgKChjaGFubmVsID0gZmluZF9jaGFu
bmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSkpKSB7Ci0JCXByaW50ZigiaGFuZGxlX29wZW5f
cmVxdWVzdF9tZXNzYWdlOiBjaGFubmVsICVkIGlzIGluIHN0YXRlICVkIGluc3RlYWQgb2YgQ0xP
U0VELlxuIiwKLQkJICAgICAgIGNoYW5uZWwtPmlkLCBjaGFubmVsLT5zdGF0ZSk7Ci0JCS8qIFhY
WDogc29tZSBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfQotCWlmICgoY2hhbm5lbCA9
IGZpbmRfZnJlZV9jaGFubmVsKHBjKSkgPT0gTlVMTCkgewotCQkvKiBYWFg6IHNvbWUgZXJyb3Ig
aGFuZGxpbmcgKi8KLQkJcmV0dXJuOwotCX0KLQlzd2l0Y2ggKHJlcS0+Y2hhbm5lbF90eXBlKSB7
Ci0JY2FzZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEU6Ci0JCXByX3BvbGljeSA9IFNDVFBfUFJfU0NU
UF9OT05FOwotCQlicmVhazsKLQkvKiBYWFggRG9lc24ndCBtYWtlIHNlbnNlICovCi0JY2FzZSBE
QVRBX0NIQU5ORUxfUkVMSUFCTEVfU1RSRUFNOgotCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBf
Tk9ORTsKLQkJYnJlYWs7Ci0JLyogWFhYIERvZXNuJ3QgbWFrZSBzZW5zZSAqLwotCWNhc2UgREFU
QV9DSEFOTkVMX1VOUkVMSUFCTEU6Ci0JCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9UVEw7Ci0J
CWJyZWFrOwotCWNhc2UgREFUQV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFCTEVfUkVYTUlUOgotCQlw
cl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfUlRYOwotCQlicmVhazsKLQljYXNlIERBVEFfQ0hBTk5F
TF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEOgotCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfVFRM
OwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsK
LQkJLyogWFhYIGVycm9yIGhhbmRsaW5nICovCi0JCWJyZWFrOwotCX0KLQlwcl92YWx1ZSA9IG50
b2hzKHJlcS0+cmVsaWFiaWxpdHlfcGFyYW1zKTsKLQlpZiAobnRvaHMocmVxLT5mbGFncykgJiBE
QVRBX0NIQU5ORUxfRkxBR19PVVRfT0ZfT1JERVJfQUxMT1dFRCkgewotCQl1bm9yZGVyZWQgPSAx
OwotCX0gZWxzZSB7Ci0JCXVub3JkZXJlZCA9IDA7Ci0JfQotCW9fc3RyZWFtID0gZmluZF9mcmVl
X29fc3RyZWFtKHBjKTsKLQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5H
OwotCWNoYW5uZWwtPnVub3JkZXJlZCA9IHVub3JkZXJlZDsKLQljaGFubmVsLT5wcl9wb2xpY3kg
PSBwcl9wb2xpY3k7Ci0JY2hhbm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1ZTsKLQljaGFubmVsLT5p
X3N0cmVhbSA9IGlfc3RyZWFtOwotCWNoYW5uZWwtPm9fc3RyZWFtID0gb19zdHJlYW07Ci0JY2hh
bm5lbC0+ZmxhZ3MgPSAwOwotCXBjLT5pX3N0cmVhbV9jaGFubmVsW2lfc3RyZWFtXSA9IGNoYW5u
ZWw7Ci0JaWYgKG9fc3RyZWFtID09IDApIHsKLQkJcmVxdWVzdF9tb3JlX29fc3RyZWFtcyhwYyk7
Ci0JfSBlbHNlIHsKLQkJaWYgKHNlbmRfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLT5zb2NrLCBv
X3N0cmVhbSwgaV9zdHJlYW0pKSB7Ci0JCQlwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0g
PSBjaGFubmVsOwotCQl9IGVsc2UgewotCQkJaWYgKGVycm5vID09IEVBR0FJTikgewotCQkJCWNo
YW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUDsKLQkJCQlwYy0+b19z
dHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBY
WFg6IFNpZ25hbCBlcnJvciB0byB0aGUgb3RoZXIgZW5kLiAqLwotCQkJCXBjLT5pX3N0cmVhbV9j
aGFubmVsW2lfc3RyZWFtXSA9IE5VTEw7Ci0JCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5O
RUxfQ0xPU0VEOwotCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7Ci0JCQkJY2hhbm5lbC0+cHJf
cG9saWN5ID0gMDsKLQkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7Ci0JCQkJY2hhbm5lbC0+aV9z
dHJlYW0gPSAwOwotCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKLQkJCQljaGFubmVsLT5mbGFn
cyA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfb3Blbl9yZXNw
b25zZV9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKnJz
cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwgdWludDE2X3Qg
aV9zdHJlYW0pCi17Ci0JdWludDE2X3Qgb19zdHJlYW07Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5u
ZWw7Ci0KLQlvX3N0cmVhbSA9IG50b2hzKHJzcC0+cmV2ZXJzZV9zdHJlYW0pOwotCWNoYW5uZWwg
PSBmaW5kX2NoYW5uZWxfYnlfb19zdHJlYW0ocGMsIG9fc3RyZWFtKTsKLQlpZiAoY2hhbm5lbCA9
PSBOVUxMKSB7Ci0JCS8qIFhYWDogaW1wcm92ZSBlcnJvciBoYW5kbGluZyAqLwotCQlwcmludGYo
ImhhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2U6IENhbid0IGZpbmQgY2hhbm5lbCBmb3Igb3V0
Z29pbmcgc3RlYW0gJWQuXG4iLCBvX3N0cmVhbSk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNoYW5u
ZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSB7Ci0JCS8qIFhYWDogaW1wcm92
ZSBlcnJvciBoYW5kbGluZyAqLwotCQlwcmludGYoImhhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3Nh
Z2U6IENoYW5uZWwgd2l0aCBpZCAlZCBmb3Igb3V0Z29pbmcgc3RlYW0gJWQgaXMgaW4gc3RhdGUg
JWQuXG4iLCBjaGFubmVsLT5pZCwgb19zdHJlYW0sIGNoYW5uZWwtPnN0YXRlKTsKLQkJcmV0dXJu
OwotCX0KLQlpZiAoZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSkpIHsKLQkJ
LyogWFhYOiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICovCi0JCXByaW50ZigiaGFuZGxlX29wZW5f
cmVzcG9uc2VfbWVzc2FnZTogQ2hhbm5lbCBjb2xsaXNpb24gZm9yIGNoYW5uZWwgd2l0aCBpZCAl
ZCBhbmQgc3RyZWFtcyAoaW4vb3V0KSA9ICglZC8lZCkuXG4iLCBjaGFubmVsLT5pZCwgaV9zdHJl
YW0sIG9fc3RyZWFtKTsKLQkJcmV0dXJuOwotCX0KLQljaGFubmVsLT5pX3N0cmVhbSA9IGlfc3Ry
ZWFtOwotCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47Ci0JcGMtPmlfc3RyZWFt
X2NoYW5uZWxbaV9zdHJlYW1dID0gY2hhbm5lbDsKLQlpZiAoc2VuZF9vcGVuX2Fja19tZXNzYWdl
KHBjLT5zb2NrLCBvX3N0cmVhbSkpIHsKLQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOwotCX0gZWxzZSB7
Ci0JCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSzsKLQl9Ci0J
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX29wZW5fYWNrX21lc3NhZ2Uoc3RydWN0
IHBlZXJfY29ubmVjdGlvbiAqcGMsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRj
d2ViX2RhdGFjaGFubmVsX2FjayAqYWNrLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IGxlbmd0aCwgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7
Ci0KLQljaGFubmVsID0gZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSk7Ci0J
aWYgKGNoYW5uZWwgPT0gTlVMTCkgewotCQkvKiBYWFg6IHNvbWUgZXJyb3IgaGFuZGxpbmcgKi8K
LQkJcmV0dXJuOwotCX0KLQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4p
IHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX0NP
Tk5FQ1RJTkcpIHsKLQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfQot
CWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47Ci0JcmV0dXJuOwotfQotCi1zdGF0
aWMgdm9pZAotaGFuZGxlX3Vua25vd25fbWVzc2FnZShjaGFyICptc2csIHNpemVfdCBsZW5ndGgs
IHVpbnQxNl90IGlfc3RyZWFtKQotewotCS8qIFhYWDogU2VuZCBhbiBlcnJvciBtZXNzYWdlICov
Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2RhdGFfbWVzc2FnZShzdHJ1Y3Qg
cGVlcl9jb25uZWN0aW9uICpwYywKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmZmVyLCBz
aXplX3QgbGVuZ3RoLCB1aW50MTZfdCBpX3N0cmVhbSkKLXsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hh
bm5lbDsKLQotCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFt
KTsKLQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0JCS8qIFhYWDogU29tZSBlcnJvciBoYW5kbGlu
ZyAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxf
Q09OTkVDVElORykgewotCQkvKiBJbXBsaWNpdCBBQ0sgKi8KLQkJY2hhbm5lbC0+c3RhdGUgPSBE
QVRBX0NIQU5ORUxfT1BFTjsKLQl9Ci0JaWYgKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5F
TF9PUEVOKSB7Ci0JCS8qIFhYWDogV2hhdCBhYm91dCBvdGhlciBzdGF0ZXM/ICovCi0JCS8qIFhY
WDogU29tZSBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJLyogQXNz
dW1pbmcgREFUQV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HICovCi0JCS8qIFhYWDogUHJvdGVjdCBm
b3Igbm9uIDAgdGVybWluYXRlZCBidWZmZXIgKi8KLQkJcHJpbnRmKCJNZXNzYWdlIHJlY2VpdmVk
IG9mIGxlbmd0aCAlenUgb24gY2hhbm5lbCB3aXRoIGlkICVkOiAlLipzXG4iLAotCQkgICAgICAg
bGVuZ3RoLCBjaGFubmVsLT5pZCwgKGludClsZW5ndGgsIGJ1ZmZlcik7Ci0JfQotCXJldHVybjsK
LX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24g
KnBjLCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQzMl90IHBwaWQsIHVpbnQxNl90
IGlfc3RyZWFtKQotewotCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICpy
ZXE7Ci0Jc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlICpyc3A7Ci0Jc3Ry
dWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKmFjaywgKm1zZzsKLQotCXN3aXRjaCAocHBpZCkg
ewotCWNhc2UgREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTDoKLQkJaWYgKGxlbmd0aCA8IHNpemVv
ZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpIHsKLQkJCXJldHVybjsKLQkJfQotCQlt
c2cgPSAoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKilidWZmZXI7Ci0JCXN3aXRjaCAo
bXNnLT5tc2dfdHlwZSkgewotCQljYXNlIERBVEFfQ0hBTk5FTF9PUEVOX1JFUVVFU1Q6Ci0JCQlp
ZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0
KSkgewotCQkJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmc/ICovCi0JCQkJcmV0dXJuOwotCQkJfQot
CQkJcmVxID0gKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICopYnVmZmVy
OwotCQkJaGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLCByZXEsIGxlbmd0aCwgaV9zdHJl
YW0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX09QRU5fUkVTUE9OU0U6Ci0JCQlp
ZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25z
ZSkpIHsKLQkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nPyAqLwotCQkJCXJldHVybjsKLQkJCX0K
LQkJCXJzcCA9IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKilidWZm
ZXI7Ci0JCQloYW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLCByc3AsIGxlbmd0aCwgaV9z
dHJlYW0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX0FDSzoKLQkJCWlmIChsZW5n
dGggPCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spKSB7Ci0JCQkJLyogWFhY
OiBlcnJvciBoYW5kbGluZz8gKi8KLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlhY2sgPSAoc3RydWN0
IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKilidWZmZXI7Ci0JCQloYW5kbGVfb3Blbl9hY2tfbWVz
c2FnZShwYywgYWNrLCBsZW5ndGgsIGlfc3RyZWFtKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0Ogot
CQkJaGFuZGxlX3Vua25vd25fbWVzc2FnZShidWZmZXIsIGxlbmd0aCwgaV9zdHJlYW0pOwotCQkJ
YnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkc6
Ci0JY2FzZSBEQVRBX0NIQU5ORUxfUFBJRF9CSU5BUlk6Ci0JCWhhbmRsZV9kYXRhX21lc3NhZ2Uo
cGMsIGJ1ZmZlciwgbGVuZ3RoLCBpX3N0cmVhbSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXBy
aW50ZigiTWVzc2FnZSBvZiBsZW5ndGggJXp1LCBQUElEICV1IG9uIHN0cmVhbSAldSByZWNlaXZl
ZC5cbiIsCi0JCSAgICAgICBsZW5ndGgsIHBwaWQsIGlfc3RyZWFtKTsKLQkJYnJlYWs7Ci0JfQot
fQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVudChzdHJ1Y3Qg
c2N0cF9hc3NvY19jaGFuZ2UgKnNhYykKLXsKLQl1bnNpZ25lZCBpbnQgaSwgbjsKLQotCXByaW50
ZigiQXNzb2NpYXRpb24gY2hhbmdlICIpOwotCXN3aXRjaCAoc2FjLT5zYWNfc3RhdGUpIHsKLQlj
YXNlIFNDVFBfQ09NTV9VUDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fVVAiKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX0NPTU1fTE9TVDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fTE9TVCIpOwotCQlicmVh
azsKLQljYXNlIFNDVFBfUkVTVEFSVDoKLQkJcHJpbnRmKCJTQ1RQX1JFU1RBUlQiKTsKLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6Ci0JCXByaW50ZigiU0NUUF9TSFVURE9XTl9D
T01QIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NPQzoKLQkJcHJpbnRmKCJT
Q1RQX0NBTlRfU1RSX0FTU09DIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXByaW50ZigiVU5L
Tk9XTiIpOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCIsIHN0cmVhbXMgKGluL291dCkgPSAoJXUv
JXUpIiwKLQkgICAgICAgc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zLCBzYWMtPnNhY19vdXRib3Vu
ZF9zdHJlYW1zKTsKLQluID0gc2FjLT5zYWNfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX2NoYW5nZSk7Ci0JaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX1VQKSB8fAot
CSAgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfUkVTVEFSVCkpICYmIChuID4gMCkpIHsKLQkJ
cHJpbnRmKCIsIHN1cHBvcnRzIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJCXN3
aXRjaCAoc2FjLT5zYWNfaW5mb1tpXSkgewotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BS
OgotCQkJCXByaW50ZigiIFBSIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQ
UE9SVFNfQVVUSDoKLQkJCQlwcmludGYoIiBBVVRIIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFND
VFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOgotCQkJCXByaW50ZigiIEFTQ09ORiIpOwotCQkJCWJy
ZWFrOwotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGOgotCQkJCXByaW50Zigi
IE1VTFRJQlVGIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUkVf
Q09ORklHOgotCQkJCXByaW50ZigiIFJFLUNPTkZJRyIpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVs
dDoKLQkJCQlwcmludGYoIiBVTktOT1dOKDB4JTAyeCkiLCBzYWMtPnNhY19pbmZvW2ldKTsKLQkJ
CQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQ
X0NPTU1fTE9TVCkgfHwKLQkgICAgICAgICAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DQU5U
X1NUUl9BU1NPQykpICYmIChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIEFCT1JUID0iKTsKLQkJZm9y
IChpID0gMDsgaSA8IG47IGkrKykgewotCQkJcHJpbnRmKCIgMHglMDJ4Iiwgc2FjLT5zYWNfaW5m
b1tpXSk7Ci0JCX0KLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlpZiAoKHNhYy0+c2FjX3N0YXRlID09
IFNDVFBfQ0FOVF9TVFJfQVNTT0MpIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX1NI
VVRET1dOX0NPTVApIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkp
IHsKLQkJZXhpdCgwKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX3Bl
ZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGMpCi17
Ci0JY2hhciBhZGRyX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQljb25zdCBjaGFyICphZGRyOwot
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0K
LQlzd2l0Y2ggKHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSkgewotCWNhc2UgQUZfSU5FVDoKLQkJ
c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzcGMtPnNwY19hYWRkcjsKLQkJYWRkciA9IGlu
ZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYWRkcl9idWYsIElORVRfQUREUlNUUkxF
Tik7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6Ci0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZzcGMtPnNwY19hYWRkcjsKLQkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNp
bjYtPnNpbjZfYWRkciwgYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4pOwotCQlicmVhazsKLQlk
ZWZhdWx0OgotI2lmZGVmIF9XSU4zMgotCQlfc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJT
VFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSk7Ci0j
ZWxzZQotCQlzbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFt
aWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKLSNlbmRpZgotCQlhZGRyID0gYWRk
cl9idWY7Ci0JCWJyZWFrOwotCX0KLQlwcmludGYoIlBlZXIgYWRkcmVzcyAlcyBpcyBub3cgIiwg
YWRkcik7Ci0Jc3dpdGNoIChzcGMtPnNwY19zdGF0ZSkgewotCWNhc2UgU0NUUF9BRERSX0FWQUlM
QUJMRToKLQkJcHJpbnRmKCJTQ1RQX0FERFJfQVZBSUxBQkxFIik7Ci0JCWJyZWFrOwotCWNhc2Ug
U0NUUF9BRERSX1VOUkVBQ0hBQkxFOgotCQlwcmludGYoIlNDVFBfQUREUl9VTlJFQUNIQUJMRSIp
OwotCQlicmVhazsKLQljYXNlIFNDVFBfQUREUl9SRU1PVkVEOgotCQlwcmludGYoIlNDVFBfQURE
Ul9SRU1PVkVEIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BRERSX0FEREVEOgotCQlwcmludGYo
IlNDVFBfQUREUl9BRERFRCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfQUREUl9NQURFX1BSSU06
Ci0JCXByaW50ZigiU0NUUF9BRERSX01BREVfUFJJTSIpOwotCQlicmVhazsKLQljYXNlIFNDVFBf
QUREUl9DT05GSVJNRUQ6Ci0JCXByaW50ZigiU0NUUF9BRERSX0NPTkZJUk1FRCIpOwotCQlicmVh
azsKLQlkZWZhdWx0OgotCQlwcmludGYoIlVOS05PV04iKTsKLQkJYnJlYWs7Ci0JfQotCXByaW50
ZigiIChlcnJvciA9IDB4JTA4eCkuXG4iLCBzcGMtPnNwY19lcnJvcik7Ci0JcmV0dXJuOwotfQot
Ci1zdGF0aWMgdm9pZAotaGFuZGxlX2FkYXB0YXRpb25faW5kaWNhdGlvbihzdHJ1Y3Qgc2N0cF9h
ZGFwdGF0aW9uX2V2ZW50ICpzYWkpCi17Ci0JcHJpbnRmKCJBZGFwdGF0aW9uIGluZGljYXRpb246
ICV4LlxuIiwgc2FpLT4gc2FpX2FkYXB0YXRpb25faW5kKTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRp
YyB2b2lkCi1oYW5kbGVfc2h1dGRvd25fZXZlbnQoc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQg
KnNzZSkKLXsKLQlwcmludGYoIlNodXRkb3duIGV2ZW50LlxuIik7Ci0JLyogWFhYOiBub3RpZnkg
YWxsIGNoYW5uZWxzLiAqLwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9zdHJl
YW1fcmVzZXRfZXZlbnQoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9ldmVudCAqc3RycnN0KQotewotCXVpbnQzMl90IG4sIGk7Ci0Jc3RydWN0IGNo
YW5uZWwgKmNoYW5uZWw7Ci0KLQluID0gKHN0cnJzdC0+c3RycmVzZXRfbGVuZ3RoIC0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCkpIC8gc2l6ZW9mKHVpbnQxNl90KTsKLQlw
cmludGYoIlN0cmVhbSByZXNldCBldmVudDogZmxhZ3MgPSAleCwgIiwgc3RycnN0LT5zdHJyZXNl
dF9mbGFncyk7Ci0JaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNF
VF9JTkNPTUlOR19TU04pIHsKLQkJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NU
UkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJCXByaW50ZigiaW5jb21pbmcvIik7Ci0JCX0K
LQkJcHJpbnRmKCJpbmNvbWluZyAiKTsKLQl9Ci0JaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3Mg
JiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJcHJpbnRmKCJvdXRnb2luZyAi
KTsKLQl9Ci0JcHJpbnRmKCJzdHJlYW0gaWRzID0gIik7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkr
KykgewotCQlpZiAoaSA+IDApIHsKLQkJCXByaW50ZigiLCAiKTsKLQkJfQotCQlwcmludGYoIiVk
Iiwgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7Ci0JfQotCXByaW50ZigiLlxuIik7
Ci0JaWYgKCEoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0RFTklF
RCkgJiYKLQkgICAgIShzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRf
RkFJTEVEKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlpZiAoc3RycnN0LT5z
dHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTikgewotCQkJCWNo
YW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIHN0cnJzdC0+c3RycmVzZXRfc3Ry
ZWFtX2xpc3RbaV0pOwotCQkJCWlmIChjaGFubmVsICE9IE5VTEwpIHsKLQkJCQkJcGMtPmlfc3Ry
ZWFtX2NoYW5uZWxbY2hhbm5lbC0+aV9zdHJlYW1dID0gTlVMTDsKLQkJCQkJY2hhbm5lbC0+aV9z
dHJlYW0gPSAwOwotCQkJCQlpZiAoY2hhbm5lbC0+b19zdHJlYW0gPT0gMCkgewotCQkJCQkJY2hh
bm5lbC0+cHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7Ci0JCQkJCQljaGFubmVsLT5wcl92
YWx1ZSA9IDA7Ci0JCQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwotCQkJCQkJY2hhbm5lbC0+
ZmxhZ3MgPSAwOwotCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOwot
CQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9P
UEVOKSB7Ci0JCQkJCQkJcmVzZXRfb3V0Z29pbmdfc3RyZWFtKHBjLCBjaGFubmVsLT5vX3N0cmVh
bSk7Ci0JCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0lORzsKLQkJCQkJ
CX0gZWxzZSB7Ci0JCQkJCQkJLyogWFhYOiBXaGF0IHRvIGRvPyAqLwotCQkJCQkJfQotCQkJCQl9
Ci0JCQkJfQotCQkJfQotCQkJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVB
TV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJCQljaGFubmVsID0gZmluZF9jaGFubmVsX2J5X29f
c3RyZWFtKHBjLCBzdHJyc3QtPnN0cnJlc2V0X3N0cmVhbV9saXN0W2ldKTsKLQkJCQlpZiAoY2hh
bm5lbCAhPSBOVUxMKSB7Ci0JCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW2NoYW5uZWwtPm9fc3Ry
ZWFtXSA9IE5VTEw7Ci0JCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKLQkJCQkJaWYgKGNoYW5u
ZWwtPmlfc3RyZWFtID09IDApIHsKLQkJCQkJCWNoYW5uZWwtPnByX3BvbGljeSA9IFNDVFBfUFJf
U0NUUF9OT05FOwotCQkJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwotCQkJCQkJY2hhbm5lbC0+
dW5vcmRlcmVkID0gMDsKLQkJCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsKLQkJCQkJCWNoYW5uZWwt
PnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQot
CX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfc3RyZWFtX2NoYW5nZV9ldmVu
dChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9l
dmVudCAqc3RyY2hnKQotewotCXVpbnQxNl90IG9fc3RyZWFtOwotCXVpbnQzMl90IGk7Ci0Jc3Ry
dWN0IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQlwcmludGYoIlN0cmVhbSBjaGFuZ2UgZXZlbnQ6IHN0
cmVhbXMgKGluL291dCkgPSAoJXUvJXUpLCBmbGFncyA9ICV4LlxuIiwKLQkgICAgICAgc3RyY2hn
LT5zdHJjaGFuZ2VfaW5zdHJtcywgc3RyY2hnLT5zdHJjaGFuZ2Vfb3V0c3RybXMsIHN0cmNoZy0+
c3RyY2hhbmdlX2ZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBp
KyspIHsKLQkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKLQkJaWYgKChjaGFubmVsLT5z
dGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgJiYKLQkJICAgIChjaGFubmVsLT5vX3N0
cmVhbSA9PSAwKSkgewotCQkJaWYgKChzdHJjaGctPnN0cmNoYW5nZV9mbGFncyAmIFNDVFBfU1RS
RUFNX0NIQU5HRV9ERU5JRUQpIHx8Ci0JCQkgICAgKHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzICYg
U0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRCkpIHsKLQkJCQkvKiBYWFg6IFNpZ25hbCB0byB0aGUg
b3RoZXIgZW5kLiAqLwotCQkJCWlmIChjaGFubmVsLT5pX3N0cmVhbSAhPSAwKSB7Ci0JCQkJCXBj
LT5pX3N0cmVhbV9jaGFubmVsW2NoYW5uZWwtPmlfc3RyZWFtXSA9IE5VTEw7Ci0JCQkJfQotCQkJ
CWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7Ci0JCQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9Q
Ul9TQ1RQX05PTkU7Ci0JCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwotCQkJCWNoYW5uZWwtPmlf
c3RyZWFtID0gMDsKLQkJCQljaGFubmVsLT5vX3N0cmVhbSA9IDA7Ci0JCQkJY2hhbm5lbC0+Zmxh
Z3MgPSAwOwotCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKLQkJCX0g
ZWxzZSB7Ci0JCQkJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0ocGMpOwotCQkJCWlmIChv
X3N0cmVhbSAhPSAwKSB7Ci0JCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gb19zdHJlYW07Ci0JCQkJ
CXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7Ci0JCQkJCWlmIChjaGFu
bmVsLT5pX3N0cmVhbSA9PSAwKSB7Ci0JCQkJCQljaGFubmVsLT5mbGFncyB8PSBEQVRBX0NIQU5O
RUxfRkxBR1NfU0VORF9SRVE7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQljaGFubmVsLT5mbGFncyB8
PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1A7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJ
CQkvKiBXZSB3aWxsIG5vdCBmaW5kIG1vcmUgLi4uICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
CX0KLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfcmVtb3RlX2Vy
cm9yX2V2ZW50KHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqc3JlKQotewotCXNpemVfdCBpLCBu
OwotCi0JbiA9IHNyZS0+c3JlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJy
b3IpOwotCXByaW50ZigiUmVtb3RlIEVycm9yIChlcnJvciA9IDB4JTA0eCk6ICIsIHNyZS0+c3Jl
X2Vycm9yKTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXByaW50ZigiIDB4JTAyeCIs
IHNyZS0+IHNyZV9kYXRhW2ldKTsKLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlyZXR1cm47Ci19Ci0K
LXN0YXRpYyB2b2lkCi1oYW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoc3RydWN0IHNjdHBfc2VuZF9m
YWlsZWRfZXZlbnQgKnNzZmUpCi17Ci0Jc2l6ZV90IGksIG47Ci0KLQlpZiAoc3NmZS0+c3NmZV9m
bGFncyAmIFNDVFBfREFUQV9VTlNFTlQpIHsKLQkJcHJpbnRmKCJVbnNlbnQgIik7Ci0JfQotCWlm
IChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1NFTlQpIHsKLQkJcHJpbnRmKCJTZW50ICIp
OwotCX0KLQlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIH4oU0NUUF9EQVRBX1NFTlQgfCBTQ1RQX0RB
VEFfVU5TRU5UKSkgewotCQlwcmludGYoIihmbGFncyA9ICV4KSAiLCBzc2ZlLT5zc2ZlX2ZsYWdz
KTsKLQl9Ci0JcHJpbnRmKCJtZXNzYWdlIHdpdGggUFBJRCA9ICV1LCBTSUQgPSAldSwgZmxhZ3M6
IDB4JTA0eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgiLAotCSAgICAgICBudG9obChzc2ZlLT5zc2Zl
X2luZm8uc25kX3BwaWQpLCBzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCwKLQkgICAgICAgc3NmZS0+
c3NmZV9pbmZvLnNuZF9mbGFncywgc3NmZS0+c3NmZV9lcnJvcik7Ci0JbiA9IHNzZmUtPnNzZmVf
bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50KTsKLQlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXByaW50ZigiIDB4JTAyeCIsIHNzZmUtPnNzZmVfZGF0YVtp
XSk7Ci0JfQotCXByaW50ZigiLlxuIik7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFu
ZGxlX25vdGlmaWNhdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdW5pb24gc2N0cF9u
b3RpZmljYXRpb24gKm5vdGlmLCBzaXplX3QgbikKLXsKLQlpZiAobm90aWYtPnNuX2hlYWRlci5z
bl9sZW5ndGggIT0gKHVpbnQzMl90KW4pIHsKLQkJcmV0dXJuOwotCX0KLQlzd2l0Y2ggKG5vdGlm
LT5zbl9oZWFkZXIuc25fdHlwZSkgewotCWNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6Ci0JCWhhbmRs
ZV9hc3NvY2lhdGlvbl9jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fYXNzb2NfY2hhbmdlKSk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9QRUVSX0FERFJfQ0hBTkdFOgotCQloYW5kbGVfcGVlcl9hZGRy
ZXNzX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9wYWRkcl9jaGFuZ2UpKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKLQkJaGFuZGxlX3JlbW90ZV9lcnJvcl9ldmVudCgmKG5v
dGlmLT5zbl9yZW1vdGVfZXJyb3IpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0VW
RU5UOgotCQloYW5kbGVfc2h1dGRvd25fZXZlbnQoJihub3RpZi0+c25fc2h1dGRvd25fZXZlbnQp
KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjoKLQkJaGFuZGxl
X2FkYXB0YXRpb25faW5kaWNhdGlvbigmKG5vdGlmLT5zbl9hZGFwdGF0aW9uX2V2ZW50KSk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOgotCQlicmVhazsKLQlj
YXNlIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TRU5E
RVJfRFJZX0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVE
X0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfU0VORF9GQUlMRURfRVZFTlQ6Ci0JCWhhbmRs
ZV9zZW5kX2ZhaWxlZF9ldmVudCgmKG5vdGlmLT5zbl9zZW5kX2ZhaWxlZF9ldmVudCkpOwotCQli
cmVhazsKLQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UOgotCQloYW5kbGVfc3RyZWFtX3Jl
c2V0X2V2ZW50KHBjLCAmKG5vdGlmLT5zbl9zdHJyZXNldF9ldmVudCkpOwotCQlzZW5kX2RlZmVy
cmVkX21lc3NhZ2VzKHBjKTsKLQkJc2VuZF9vdXRnb2luZ19zdHJlYW1fcmVzZXQocGMpOwotCQly
ZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FTU09DX1JF
U0VUX0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDoKLQkJ
aGFuZGxlX3N0cmVhbV9jaGFuZ2VfZXZlbnQocGMsICYobm90aWYtPnNuX3N0cmNoYW5nZV9ldmVu
dCkpOwotCQlzZW5kX2RlZmVycmVkX21lc3NhZ2VzKHBjKTsKLQkJc2VuZF9vdXRnb2luZ19zdHJl
YW1fcmVzZXQocGMpOwotCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKLQkJYnJlYWs7Ci0J
ZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotcHJpbnRfc3RhdHVzKHN0
cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQotewotCXN0cnVjdCBzY3RwX3N0YXR1cyBzdGF0dXM7
Ci0Jc29ja2xlbl90IGxlbjsKLQl1aW50MzJfdCBpOwotCXN0cnVjdCBjaGFubmVsICpjaGFubmVs
OwotCi0JbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc3RhdHVzKTsKLQlpZiAo
dXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfU1RBVFVTLCAm
c3RhdHVzLCAmbGVuKSA8IDApIHsKLQkJcGVycm9yKCJnZXRzb2Nrb3B0Iik7Ci0JCXJldHVybjsK
LQl9Ci0JcHJpbnRmKCJBc3NvY2lhdGlvbiBzdGF0ZTogIik7Ci0Jc3dpdGNoIChzdGF0dXMuc3N0
YXRfc3RhdGUpIHsKLQljYXNlIFNDVFBfQ0xPU0VEOgotCQlwcmludGYoIkNMT1NFRFxuIik7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9CT1VORDoKLQkJcHJpbnRmKCJCT1VORFxuIik7Ci0JCWJyZWFr
OwotCWNhc2UgU0NUUF9MSVNURU46Ci0JCXByaW50ZigiTElTVEVOXG4iKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX0NPT0tJRV9XQUlUOgotCQlwcmludGYoIkNPT0tJRV9XQUlUXG4iKTsKLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX0NPT0tJRV9FQ0hPRUQ6Ci0JCXByaW50ZigiQ09PS0lFX0VDSE9FRFxu
Iik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9FU1RBQkxJU0hFRDoKLQkJcHJpbnRmKCJFU1RBQkxJ
U0hFRFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TSFVURE9XTl9QRU5ESU5HOgotCQlwcmlu
dGYoIlNIVVRET1dOX1BFTkRJTkdcbiIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfU0hVVERPV05f
U0VOVDoKLQkJcHJpbnRmKCJTSFVURE9XTl9TRU5UXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQ
X1NIVVRET1dOX1JFQ0VJVkVEOgotCQlwcmludGYoIlNIVVRET1dOX1JFQ0VJVkVEXG4iKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0FDS19TRU5UOgotCQlwcmludGYoIlNIVVRET1dO
X0FDS19TRU5UXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCJVTktOT1dOXG4i
KTsKLQkJYnJlYWs7Ci0JfQotCXByaW50ZigiTnVtYmVyIG9mIHN0cmVhbXMgKGkvbykgPSAoJXUv
JXUpXG4iLAotCSAgICAgICBzdGF0dXMuc3N0YXRfaW5zdHJtcywgc3RhdHVzLnNzdGF0X291dHN0
cm1zKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKLQkJY2hh
bm5lbCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKLQkJaWYgKGNoYW5uZWwtPnN0YXRlID09IERBVEFf
Q0hBTk5FTF9DTE9TRUQpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXByaW50ZigiQ2hhbm5lbCB3
aXRoIGlkID0gJXU6IHN0YXRlICIsIGNoYW5uZWwtPmlkKTsKLQkJc3dpdGNoIChjaGFubmVsLT5z
dGF0ZSkgewotCQljYXNlIERBVEFfQ0hBTk5FTF9DTE9TRUQ6Ci0JCQlwcmludGYoIkNMT1NFRCIp
OwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkc6Ci0JCQlwcmludGYo
IkNPTk5FQ1RJTkciKTsKLQkJCWJyZWFrOwotCQljYXNlIERBVEFfQ0hBTk5FTF9PUEVOOgotCQkJ
cHJpbnRmKCJPUEVOIik7Ci0JCQlicmVhazsKLQkJY2FzZSBEQVRBX0NIQU5ORUxfQ0xPU0lORzoK
LQkJCXByaW50ZigiQ0xPU0lORyIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYo
IlVOS05PV04oJWQpIiwgY2hhbm5lbC0+c3RhdGUpOwotCQkJYnJlYWs7Ci0JCX0KLQkJcHJpbnRm
KCIsIGZsYWdzID0gMHglMDh4LCBzdHJlYW0gaWQgKGluL291dCk6ICgldS8ldSksICIsCi0JCSAg
ICAgICBjaGFubmVsLT5mbGFncywKLQkJICAgICAgIGNoYW5uZWwtPmlfc3RyZWFtLAotCQkgICAg
ICAgY2hhbm5lbC0+b19zdHJlYW0pOwotCQlpZiAoY2hhbm5lbC0+dW5vcmRlcmVkKSB7Ci0JCQlw
cmludGYoInVub3JkZXJlZCwgIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYoIm9yZGVyZWQsICIp
OwotCQl9Ci0JCXN3aXRjaCAoY2hhbm5lbC0+cHJfcG9saWN5KSB7Ci0JCWNhc2UgU0NUUF9QUl9T
Q1RQX05PTkU6Ci0JCQlwcmludGYoInJlbGlhYmxlLlxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBT
Q1RQX1BSX1NDVFBfVFRMOgotCQkJcHJpbnRmKCJ1bnJlbGlhYmxlICh0aW1lb3V0ICV1bXMpLlxu
IiwgY2hhbm5lbC0+cHJfdmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9QUl9TQ1RQX1JU
WDoKLQkJCXByaW50ZigidW5yZWxpYWJsZSAobWF4LiAldSBydHgpLlxuIiwgY2hhbm5lbC0+cHJf
dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYoInVua293biBwb2xpY3kg
JXUuXG4iLCBjaGFubmVsLT5wcl9wb2xpY3kpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLXN0
YXRpYyBpbnQKLXJlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nr
c3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVj
dCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewotCXN0cnVj
dCBwZWVyX2Nvbm5lY3Rpb24gKnBjOwotCi0JcGMgPSAoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAq
KXVscF9pbmZvOwotCi0JaWYgKGRhdGEpIHsKLQkJbG9ja19wZWVyX2Nvbm5lY3Rpb24ocGMpOwot
CQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQloYW5kbGVfbm90aWZpY2F0aW9u
KHBjLCAodW5pb24gc2N0cF9ub3RpZmljYXRpb24gKilkYXRhLCBkYXRhbGVuKTsKLQkJfSBlbHNl
IHsKLQkJCWhhbmRsZV9tZXNzYWdlKHBjLCBkYXRhLCBkYXRhbGVuLCBudG9obChyY3YucmN2X3Bw
aWQpLCByY3YucmN2X3NpZCk7Ci0JCX0KLQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7Ci0J
fQotCXJldHVybiAoMSk7Ci19Ci0KLXZvaWQKLWRlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3Jt
YXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JdnBy
aW50Zihmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBzb2NrYWRk
cl9pbiBhZGRyOwotCXNvY2tsZW5fdCBhZGRyX2xlbjsKLQljaGFyIGxpbmVbTElORV9MRU5HVEgg
KyAxXTsKLQl1bnNpZ25lZCBpbnQgdW5vcmRlcmVkLCBwb2xpY3ksIHZhbHVlLCBpZCwgc2Vjb25k
czsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKLQljb25zdCBp
bnQgb24gPSAxOwotCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OwotCXN0cnVjdCBzY3RwX2V2
ZW50IGV2ZW50OwotCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7Ci0Jc3RydWN0IHNjdHBf
aW5pdG1zZyBpbml0bXNnOwotCXVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19D
SEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0Us
Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9FUlJPUiwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCi0JICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKLQkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlQsCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVH07Ci0JY2hhciBhZGRyYnVmW0lORVRfQUREUlNUUkxF
Tl07Ci0KLQlpZiAoYXJnYyA+IDEpIHsKLQkJdXNyc2N0cF9pbml0KGF0b2koYXJndlsxXSksIE5V
TEwsIGRlYnVnX3ByaW50Zik7Ci0JfSBlbHNlIHsKLQkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEws
IGRlYnVnX3ByaW50Zik7Ci0JfQotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOwotI2VuZGlmCi0JdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwotCi0JaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQo
QUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwg
JnBlZXJfY29ubmVjdGlvbikpID09IE5VTEwpIHsKLQkJcGVycm9yKCJzb2NrZXQiKTsKLQl9Ci0J
aW5pdF9wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JaWYgKGFyZ2MgPiAyKSB7
Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0J
CWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9w
b3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lk
KikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDAp
IHsKLQkJCXBlcnJvcigic2V0c29ja29wdCIpOwotCQl9Ci0JfQotCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAmb24sIHNpemVvZihp
bnQpKSA8IDApIHsKLQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBfUkVDVlJDVklORk8iKTsKLQl9
Ci0JaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVhQTElD
SVRfRU9SLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKLQkJcGVycm9yKCJzZXRzb2Nrb3B0IFND
VFBfRVhQTElDSVRfRU9SIik7Ci0JfQotCS8qIEFsbG93IHJlc2V0dGluZyBzdHJlYW1zLiAqLwot
CWF2LmFzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7Ci0JYXYuYXNzb2NfdmFsdWUgPSBTQ1RQX0VO
QUJMRV9SRVNFVF9TVFJFQU1fUkVRIHwgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUTsKLQlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FTkFCTEVfU1RS
RUFNX1JFU0VULCAmYXYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgewot
CQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VUIik7Ci0JfQotCS8q
IEVuYWJsZSB0aGUgZXZlbnRzIG9mIGludGVyZXN0LiAqLwotCW1lbXNldCgmZXZlbnQsIDAsIHNp
emVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7Ci0JZXZl
bnQuc2Vfb24gPSAxOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVv
Zih1aW50MTZfdCk7IGkrKykgewotCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07Ci0J
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAm
ZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgewotCQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBf
RVZFTlQiKTsKLQkJfQotCX0KLQltZW1zZXQoJmluaXRtc2csIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pbml0bXNnKSk7Ci0JaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMgPSA1OwotCWluaXRtc2cu
c2luaXRfbWF4X2luc3RyZWFtcyA9IDY1NTM1OwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lOSVRNU0csICZpbml0bXNnLCBzaXplb2Yoc3RydWN0IHNj
dHBfaW5pdG1zZykpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9JTklUTVNHIik7
Ci0JfQotCi0JaWYgKGFyZ2MgPT0gNSkgewotCQkvKiBvcGVyYXRpbmcgYXMgY2xpZW50ICovCi0J
CW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQlhZGRyLnNp
bl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlhZGRyLnNpbl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQlpZiAoIWluZXRfcHRvbihB
Rl9JTkVULCBhcmd2WzNdLCAmYWRkci5zaW5fYWRkci5zX2FkZHIpKXsKLQkJCXByaW50ZigiZXJy
b3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCQlleGl0KDEpOwotCQl9Ci0JCWFkZHIuc2luX3Bv
cnQgPSBodG9ucyhhdG9pKGFyZ3ZbNF0pKTsKLQkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAo
c3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDAp
IHsKLQkJCXBlcnJvcigiY29ubmVjdCIpOwotCQl9Ci0KLQkJcHJpbnRmKCJDb25uZWN0ZWQgdG8g
JXM6JWQuXG4iLCBpbmV0X250b3AoQUZfSU5FVCwgJihhZGRyLnNpbl9hZGRyKSwgYWRkcmJ1Ziwg
SU5FVF9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW5fcG9ydCkpOwotCX0gZWxzZSBpZiAoYXJn
YyA9PSA0KSB7Ci0JCXN0cnVjdCBzb2NrZXQgKmNvbm5fc29jazsKLQotCQkvKiBvcGVyYXRpbmcg
YXMgc2VydmVyICovCi0JCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpOwotCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgot
CQlhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQlh
ZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7Ci0JCWFkZHIuc2luX3BvcnQgPSBodG9u
cyhhdG9pKGFyZ3ZbM10pKTsKLQkJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2th
ZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKLQkJCXBlcnJv
cigiYmluZCIpOwotCQl9Ci0JCWlmICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8IDApIHsKLQkJ
CXBlcnJvcigibGlzdGVuIik7Ci0JCX0KLQkJYWRkcl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKLQkJaWYgKChjb25uX3NvY2sgPSB1c3JzY3RwX2FjY2VwdChzb2NrLCAoc3Ry
dWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRyX2xlbikpID09IE5VTEwpIHsKLQkJCXBlcnJvcigi
YWNjZXB0Iik7Ci0JCX0KLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJc29jayA9IGNvbm5fc29j
azsKLQkJcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXM6JWQuXG4iLCBpbmV0X250b3AoQUZfSU5FVCwg
JihhZGRyLnNpbl9hZGRyKSwgYWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5z
aW5fcG9ydCkpOwotCX0gZWxzZSB7Ci0JCXByaW50ZigiVXNhZ2U6ICVzIGxvY2FsX3VkcF9wb3J0
IHJlbW90ZV91ZHBfcG9ydCBsb2NhbF9wb3J0IHdoZW4gb3BlcmF0aW5nIGFzIHNlcnZlclxuIgot
CQkgICAgICAgIiAgICAgICAlcyBsb2NhbF91ZHBfcG9ydCByZW1vdGVfdWRwX3BvcnQgcmVtb3Rl
X2FkZHIgcmVtb3RlX3BvcnQgd2hlbiBvcGVyYXRpbmcgYXMgY2xpZW50XG4iLAotCQkgICAgICAg
YXJndlswXSwgYXJndlswXSk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JbG9ja19wZWVyX2Nvbm5l
Y3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JcGVlcl9jb25uZWN0aW9uLnNvY2sgPSBzb2NrOwot
CXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0KLQlmb3IgKDs7KSB7
Ci0jaWZkZWYgX1dJTjMyCi0JCWlmIChnZXRzX3MobGluZSwgTElORV9MRU5HVEgpID09IE5VTEwp
IHsKLSNlbHNlCi0JCWlmIChmZ2V0cyhsaW5lLCBMSU5FX0xFTkdUSCwgc3RkaW4pID09IE5VTEwp
IHsKLSNlbmRpZgotCQkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9XUikgPCAwKSB7
Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NodXRkb3duIik7Ci0JCQl9Ci0JCQl3aGlsZSAodXNyc2N0
cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQkJU2xlZXAoMTAwMCk7Ci0jZWxz
ZQotCQkJCXNsZWVwKDEpOwotI2VuZGlmCi0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3Ry
bmNtcChsaW5lLCAiPyIsIHN0cmxlbigiPyIpKSA9PSAwIHx8Ci0JCSAgICBzdHJuY21wKGxpbmUs
ICJoZWxwIiwgc3RybGVuKCJoZWxwIikpID09IDApIHsKLQkJCXByaW50ZigiQ29tbWFuZHM6XG4i
Ci0JCQkgICAgICAgIm9wZW4gdW5vcmRlcmVkIHByX3BvbGljeSBwcl92YWx1ZSAtIG9wZW5zIGEg
Y2hhbm5lbFxuIgotCQkJICAgICAgICJjbG9zZSBjaGFubmVsIC0gY2xvc2VzIHRoZSBjaGFubmVs
XG4iCi0JCQkgICAgICAgInNlbmQgY2hhbm5lbDpzdHJpbmcgLSBzZW5kcyBzdHJpbmcgdXNpbmcg
Y2hhbm5lbFxuIgotCQkJICAgICAgICJzdGF0dXMgLSBwcmludHMgdGhlIHN0YXR1c1xuIgotCQkJ
ICAgICAgICJzbGVlcCBuIC0gc2xlZXAgZm9yIG4gc2Vjb25kc1xuIgotCQkJICAgICAgICJoZWxw
IC0gdGhpcyBtZXNzYWdlXG4iKTsKLQkJfSBlbHNlIGlmIChzdHJuY21wKGxpbmUsICJzdGF0dXMi
LCBzdHJsZW4oInN0YXR1cyIpKSA9PSAwKSB7Ci0JCQlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVl
cl9jb25uZWN0aW9uKTsKLQkJCXByaW50X3N0YXR1cygmcGVlcl9jb25uZWN0aW9uKTsKLQkJCXVu
bG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JCX0gZWxzZSBpZiAoc3Ry
bmNtcChsaW5lLCAicXVpdCIsIHN0cmxlbigicXVpdCIpKSA9PSAwKSB7Ci0JCQlpZiAodXNyc2N0
cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsKLQkJCQlwZXJyb3IoInVzcnNjdHBfc2h1
dGRvd24iKTsKLQkJCX0KLQkJCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZmRl
ZiBfV0lOMzIKLQkJCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCQkJc2xlZXAoMSk7Ci0jZW5kaWYK
LQkJCX0KLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKHNzY2FuZihsaW5lLCAib3BlbiAldSAldSAl
dSIsICZ1bm9yZGVyZWQsICZwb2xpY3ksICZ2YWx1ZSkgPT0gMykgewotCQkJbG9ja19wZWVyX2Nv
bm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JCQljaGFubmVsID0gb3Blbl9jaGFubmVsKCZw
ZWVyX2Nvbm5lY3Rpb24sICh1aW50OF90KXVub3JkZXJlZCwgKHVpbnQxNl90KXBvbGljeSwgKHVp
bnQzMl90KXZhbHVlKTsKLQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlv
bik7Ci0JCQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRmKCJDcmVhdGluZyBjaGFu
bmVsIGZhaWxlZC5cbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGYoIkNoYW5uZWwgd2l0aCBp
ZCAldSBjcmVhdGVkLlxuIiwgY2hhbm5lbC0+aWQpOwotCQkJfQotCQl9IGVsc2UgaWYgKHNzY2Fu
ZihsaW5lLCAiY2xvc2UgJXUiLCAmaWQpID09IDEpIHsKLQkJCWlmIChpZCA8IE5VTUJFUl9PRl9D
SEFOTkVMUykgewotCQkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOwot
CQkJCWNsb3NlX2NoYW5uZWwoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlvbi5jaGFu
bmVsc1tpZF0pOwotCQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7
Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJzZW5kICV1IiwgJmlkKSA9PSAxKSB7
Ci0JCQlpZiAoaWQgPCBOVU1CRVJfT0ZfQ0hBTk5FTFMpIHsKLQkJCQljaGFyICptc2c7Ci0KLQkJ
CQltc2cgPSBzdHJzdHIobGluZSwgIjoiKTsKLQkJCQlpZiAobXNnKSB7Ci0JCQkJCW1zZysrOwot
CQkJCQlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKLSNpZmRlZiBfV0lO
MzIKLQkJCQkJaWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5lY3Rpb24sICZwZWVyX2Nv
bm5lY3Rpb24uY2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpKSkgewotI2Vsc2UKLQkJCQkJ
aWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5lY3Rpb24sICZwZWVyX2Nvbm5lY3Rpb24u
Y2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpIC0gMSkpIHsKLSNlbmRpZgotCQkJCQkJcHJp
bnRmKCJNZXNzYWdlIHNlbnQuXG4iKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXByaW50ZigiTWVz
c2FnZSBzZW5kaW5nIGZhaWxlZC5cbiIpOwotCQkJCQl9Ci0JCQkJCXVubG9ja19wZWVyX2Nvbm5l
Y3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgaWYgKHNzY2Fu
ZihsaW5lLCAic2xlZXAgJXUiLCAmc2Vjb25kcykgPT0gMSkgewotI2lmZGVmIF9XSU4zMgotCQkJ
U2xlZXAoc2Vjb25kcyAqIDEwMDApOwotI2Vsc2UKLQkJCXNsZWVwKHNlY29uZHMpOwotI2VuZGlm
Ci0JCX0gZWxzZSB7Ci0JCQlwcmludGYoIlVua25vd24gY29tbWFuZDogJXMiLCBsaW5lKTsKLQkJ
fQotCX0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5j
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBk
ZTVlMGYwMmE4MGRmYmQ5ZDEyNDQ3NWEyNjVmYjZhZDQzODMzNGY1Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90ZXN0X2xpYm1nbXQuYworKysg
L2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWlj
aGFlbCBUdWV4ZW4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgICAgIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgot
ICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLSNlbmRpZgotI2luY2x1ZGUgInVzcnNjdHAuaCIKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0J
aW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewotCQl1c3JzY3RwX2luaXQo
MCwgTlVMTCwgTlVMTCk7Ci0JCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZmRl
ZiBfV0lOMzIKLQkJCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJCXNsZWVwKDEpOwotI2VuZGlmCi0J
CX0KLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90ZXN0X3RpbWVyLmMg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
cHJvZ3JhbXMvdGVzdF90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYTJj
YjUwMTBmYmE2ZDNmOTJiZTBhMTY2YWIwOTVlN2E2NDkyOTgzLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90ZXN0X3RpbWVyLmMKKysrIC9kZXYv
bnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE2IE1pY2hhZWwg
VHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNp
bmNsdWRlIDxzdGRhcmcuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0j
ZW5kaWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0KLWludAotbWFpbih2b2lkKSAKLXsKLQlpbnQg
aTsKLQl2b2lkICpwOwotCi0JdXNyc2N0cF9pbml0KDAsIE5VTEwsIE5VTEwpOwotI2lmZGVmIFND
VFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FM
TCk7Ci0jZW5kaWYKLQlwcmludGYoIkVudGVyaW5nIHRoZSBsb29wXG4iKTsKLQlwID0gJmk7Ci0J
Zm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0JCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVz
cyhwKTsKLQkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3MocCk7Ci0JfQotCXByaW50ZigiRXhp
dGVkIHRoZSBsb29wXG4iKTsKLQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZk
ZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQl9
Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90c2N0cC5jIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL3Rz
Y3RwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODExYzE3ZTk3NjYwNTczZTAz
ODE4YTY3NjA2NmExZjJhMWJkNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3Byb2dyYW1zL3RzY3RwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4MjUgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxMyBJcmVuZSBSdWVuZ2VsZXIKLSAqCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxzeXMv
dHlwZXMuaD4KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUg
PHdzMnRjcGlwLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8Y3J0ZGJnLmg+Ci0j
aW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNp
bmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jaW5jbHVkZSA8
c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
ZW5kaWYKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2lu
Y2x1ZGUgPGVycm5vLmg+Ci0jaWZkZWYgTElOVVgKLSNpbmNsdWRlIDxnZXRvcHQuaD4KLSNlbmRp
ZgotI2luY2x1ZGUgPHVzcnNjdHAuaD4KLQotLyogZ2xvYmFsIGZvciB0aGUgc2VuZCBjYWxsYmFj
aywgYnV0IHVzZWQgaW4ga2VybmVsIHZlcnNpb24gYXMgd2VsbCAqLwotc3RhdGljIHVuc2lnbmVk
IGxvbmcgbnVtYmVyX29mX21lc3NhZ2VzOwotc3RhdGljIGNoYXIgKmJ1ZmZlcjsKLXN0YXRpYyBp
bnQgbGVuZ3RoOwotc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKLXN0YXRp
YyBpbnQgdW5vcmRlcmVkOwotdWludDMyX3Qgb3B0dmFsID0gMTsKLXN0cnVjdCBzb2NrZXQgKnBz
b2NrID0gTlVMTDsKLQotc3RhdGljIHN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7Ci11bnNpZ25l
ZCBpbnQgcnVudGltZSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZXNzYWdlcyA9IDA7Ci1z
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0X2xlbmd0aCA9IDA7Ci1zdGF0aWMgdW5zaWdu
ZWQgbG9uZyBsb25nIHN1bSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHVzZV9jYiA9IDA7Ci0K
LSNpZm5kZWYgdGltZXJzdWIKLSNkZWZpbmUgdGltZXJzdWIodHZwLCB1dnAsIHZ2cCkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkodnZwKS0+dHZfc2VjID0gKHR2
cCktPnR2X3NlYyAtICh1dnApLT50dl9zZWM7ICAgIFwKLQkJKHZ2cCktPnR2X3VzZWMgPSAodHZw
KS0+dHZfdXNlYyAtICh1dnApLT50dl91c2VjOyBcCi0JCWlmICgodnZwKS0+dHZfdXNlYyA8IDAp
IHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJKHZ2cCktPnR2X3NlYy0tOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotCQkJKHZ2cCktPnR2X3VzZWMgKz0gMTAwMDAwMDsgICAgICAg
ICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLQl9IHdoaWxlICgwKQotI2VuZGlmCi0KLQotY2hhciBVc2FnZVtdID0KLSJVc2Fn
ZTogdHNjdHAgW29wdGlvbnNdIFthZGRyZXNzXVxuIgotIk9wdGlvbnM6XG4iCi0iICAgICAgICAt
YSAgICAgICAgICAgICBzZXQgYWRhcHRhdGlvbiBsYXllciBpbmRpY2F0aW9uXG4iCi0iICAgICAg
ICAtYyAgICAgICAgICAgICB1c2UgY2FsbGJhY2sgQVBJXG4iCi0iICAgICAgICAtRSAgICAgICAg
ICAgICBsb2NhbCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0IChkZWZhdWx0IDk4OTkpXG4iCi0iICAg
ICAgICAtZiAgICAgICAgICAgICBmcmFnbWVudGF0aW9uIHBvaW50XG4iCi0iICAgICAgICAtbCAg
ICAgICAgICAgICBzaXplIG9mIHNlbmQvcmVjZWl2ZSBidWZmZXJcbiIKLSIgICAgICAgIC1MICAg
ICAgICAgICAgIGJpbmQgdG8gbG9jYWwgSVAgKGRlZmF1bHQgSU5BRERSX0FOWSlcbiIKLSIgICAg
ICAgIC1uICAgICAgICAgICAgIG51bWJlciBvZiBtZXNzYWdlcyBzZW50ICgwIG1lYW5zIGluZmlu
aXRlKS9yZWNlaXZlZFxuIgotIiAgICAgICAgLUQgICAgICAgICAgICAgdHVybnMgTmFnbGUgb2Zm
XG4iCi0iICAgICAgICAtUiAgICAgICAgICAgICBzb2NrZXQgcmVjdiBidWZmZXJcbiIKLSIgICAg
ICAgIC1TICAgICAgICAgICAgIHNvY2tldCBzZW5kIGJ1ZmZlclxuIgotIiAgICAgICAgLVQgICAg
ICAgICAgICAgdGltZSB0byBzZW5kIG1lc3NhZ2VzXG4iCi0iICAgICAgICAtdSAgICAgICAgICAg
ICB1c2UgdW5vcmRlcmVkIHVzZXIgbWVzc2FnZXNcbiIKLSIgICAgICAgIC1VICAgICAgICAgICAg
IHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0XG4iCi0iICAgICAgICAtdiAgICAgICAgICAg
ICB2ZXJib3NlXG4iCi0iICAgICAgICAtViAgICAgICAgICAgICB2ZXJ5IHZlcmJvc2VcbiIKLTsK
LQotI2RlZmluZSBERUZBVUxUX0xFTkdUSCAgICAgICAgICAgICAxMDI0Ci0jZGVmaW5lIERFRkFV
TFRfTlVNQkVSX09GX01FU1NBR0VTIDEwMjQKLSNkZWZpbmUgREVGQVVMVF9QT1JUICAgICAgICAg
ICAgICAgNTAwMQotI2RlZmluZSBCVUZGRVJTSVpFICAgICAgICAgICAgICAgICAoMTw8MTYpCi0K
LXN0YXRpYyBpbnQgdmVyYm9zZSwgdmVyeV92ZXJib3NlOwotc3RhdGljIHVuc2lnbmVkIGludCBk
b25lOwotCi12b2lkIHN0b3Bfc2VuZGVyKGludCBzaWcpCi17Ci0JZG9uZSA9IDE7Ci19Ci0KLSNp
ZmRlZiBfV0lOMzIKLXN0YXRpYyB2b2lkCi1nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2
LCB2b2lkICppZ25vcmUpCi17Ci0Jc3RydWN0IHRpbWViIHRiOwotCi0JZnRpbWUoJnRiKTsKLQl0
di0+dHZfc2VjID0gKGxvbmcpdGIudGltZTsKLSAJdHYtPnR2X3VzZWMgPSB0Yi5taWxsaXRtICog
MTAwMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi1zdGF0aWMgRFdPUkQgV0lOQVBJCi0j
ZWxzZQotc3RhdGljIHZvaWQgKgotI2VuZGlmCi1oYW5kbGVfY29ubmVjdGlvbih2b2lkICphcmcp
Ci17Ci0Jc3NpemVfdCBuOwotCWNoYXIgKmJ1ZjsKLSNpZmRlZiBfV0lOMzIKLQlIQU5ETEUgdGlk
OwotI2Vsc2UKLQlwdGhyZWFkX3QgdGlkOwotI2VuZGlmCi0Jc3RydWN0IHNvY2tldCAqY29ubl9z
b2NrOwotCXN0cnVjdCB0aW1ldmFsIHRpbWVfc3RhcnQsIHRpbWVfbm93LCB0aW1lX2RpZmY7Ci0J
ZG91YmxlIHNlY29uZHM7Ci0JdW5zaWduZWQgbG9uZyByZWN2X2NhbGxzID0gMDsKLQl1bnNpZ25l
ZCBsb25nIG5vdGlmaWNhdGlvbnMgPSAwOwotCWludCBmbGFnczsKLQlzdHJ1Y3Qgc29ja2FkZHJf
aW4gYWRkcjsKLQlzb2NrbGVuX3QgbGVuOwotCXVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICpzbnA7
Ci0Jc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGM7Ci0Jc3RydWN0IHRpbWV2YWwgbm90ZV90
aW1lOwotCXVuc2lnbmVkIGludCBpbmZvdHlwZTsKLQlzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiBybjsK
LQlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7Ci0KLQlj
b25uX3NvY2sgPSAqKHN0cnVjdCBzb2NrZXQgKiopYXJnOwotI2lmZGVmIF9XSU4zMgotCXRpZCA9
IEdldEN1cnJlbnRUaHJlYWQoKTsKLSNlbHNlCi0JdGlkID0gcHRocmVhZF9zZWxmKCk7Ci0JcHRo
cmVhZF9kZXRhY2godGlkKTsKLSNlbmRpZgotCi0JYnVmID0gbWFsbG9jKEJVRkZFUlNJWkUpOwot
CWZsYWdzID0gMDsKLQlsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OwotCWluZm90eXBlID0gMDsKLQltZW1zZXQoJnJuLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmVj
dnZfcm4pKTsKLQluID0gdXNyc2N0cF9yZWN2dihjb25uX3NvY2ssIGJ1ZiwgQlVGRkVSU0laRSwg
KHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCi0JICAgICAgICAg
ICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwotCi0JZ2V0dGltZW9mZGF5KCZ0
aW1lX3N0YXJ0LCBOVUxMKTsKLQl3aGlsZSAobiA+IDApIHsKLQkJcmVjdl9jYWxscysrOwotCQlp
ZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQlub3RpZmljYXRpb25zKys7Ci0JCQln
ZXR0aW1lb2ZkYXkoJm5vdGVfdGltZSwgTlVMTCk7Ci0JCQlwcmludGYoIm5vdGlmaWNhdGlvbiBh
cnJpdmVkIGF0ICVmXG4iLCBub3RlX3RpbWUudHZfc2VjKyhkb3VibGUpbm90ZV90aW1lLnR2X3Vz
ZWMvMTAwMDAwMC4wKTsKLQkJCXNucCA9ICh1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqKWJ1ZjsK
LQkJCWlmIChzbnAtPnNuX2hlYWRlci5zbl90eXBlPT1TQ1RQX1BFRVJfQUREUl9DSEFOR0UpCi0J
CQl7Ci0JCQkJc3BjID0gJnNucC0+c25fcGFkZHJfY2hhbmdlOwotCQkJCXByaW50ZigiU0NUUF9Q
RUVSX0FERFJfQ0hBTkdFOiBzdGF0ZT0lZCwgZXJyb3I9JWRcbiIsc3BjLT5zcGNfc3RhdGUsIHNw
Yy0+c3BjX2Vycm9yKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmICh2ZXJ5X3ZlcmJvc2UpIHsK
LQkJCQlwcmludGYoIk1lc3NhZ2UgcmVjZWl2ZWRcbiIpOwotCQkJfQotCQkJc3VtICs9IG47Ci0J
CQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQkJbWVzc2FnZXMrKzsKLQkJCQlpZiAoZmlyc3Rf
bGVuZ3RoID09IDApCi0JCQkJCWZpcnN0X2xlbmd0aCA9IHN1bTsKLQkJCX0KLQkJfQotCQlmbGFn
cyA9IDA7Ci0JCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0J
CWluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOwotCQlpbmZvdHlwZSA9IDA7
Ci0JCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybikpOwotCQluID0g
dXNyc2N0cF9yZWN2dihjb25uX3NvY2ssICh2b2lkICopIGJ1ZiwgQlVGRkVSU0laRSwgKHN0cnVj
dCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCi0JCSAgICAgICAgICAgICAg
ICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7Ci0JfQotCWlmIChuIDwgMCkKLQkJcGVy
cm9yKCJzY3RwX3JlY3Z2Iik7Ci0JZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7Ci0JdGlt
ZXJzdWIoJnRpbWVfbm93LCAmdGltZV9zdGFydCwgJnRpbWVfZGlmZik7Ci0Jc2Vjb25kcyA9IHRp
bWVfZGlmZi50dl9zZWMgKyAoZG91YmxlKXRpbWVfZGlmZi50dl91c2VjLzEwMDAwMDAuMDsKLQlw
cmludGYoIiVsbHUsICVsdSwgJWx1LCAlbHUsICVsbHUsICVmLCAlZlxuIiwKLQkgICAgICAgIGZp
cnN0X2xlbmd0aCwgbWVzc2FnZXMsIHJlY3ZfY2FsbHMsIG5vdGlmaWNhdGlvbnMsIHN1bSwgc2Vj
b25kcywgKGRvdWJsZSlmaXJzdF9sZW5ndGggKiAoZG91YmxlKW1lc3NhZ2VzIC8gc2Vjb25kcyk7
Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JdXNyc2N0cF9jbG9zZShjb25uX3NvY2spOwotCWZyZWUoYnVm
KTsKLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIChOVUxMKTsKLSNl
bmRpZgotfQotCi1zdGF0aWMgaW50Ci1zZW5kX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQz
Ml90IHNiX2ZyZWUpIHsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87Ci0KLQlpZiAoKG1l
c3NhZ2VzID09IDApICYgdmVyYm9zZSkgewotCQlwcmludGYoIlN0YXJ0IHNlbmRpbmcgIik7Ci0J
CWlmIChudW1iZXJfb2ZfbWVzc2FnZXMgPiAwKSB7Ci0JCQlwcmludGYoIiVsZCBtZXNzYWdlcyAi
LCAobG9uZyludW1iZXJfb2ZfbWVzc2FnZXMpOwotCQl9Ci0JCWlmIChydW50aW1lID4gMCkgewot
CQkJcHJpbnRmKCJmb3IgJXUgc2Vjb25kcyAuLi4iLCBydW50aW1lKTsKLQkJfQotCQlwcmludGYo
IlxuIik7Ci0JCWZmbHVzaChzdGRvdXQpOwotCX0KLQotCXNuZGluZm8uc25kX3NpZCA9IDA7Ci0J
c25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCWlmICh1bm9yZGVyZWQgIT0gMCkgewotCQlzbmRpbmZv
LnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKLQl9Ci0Jc25kaW5mby5zbmRfcHBpZCA9IDA7
Ci0Jc25kaW5mby5zbmRfY29udGV4dCA9IDA7Ci0Jc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOwot
Ci0Jd2hpbGUgKCFkb25lICYmICgobnVtYmVyX29mX21lc3NhZ2VzID09IDApIHx8IChtZXNzYWdl
cyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpKSB7Ci0JCWlmICh2ZXJ5X3ZlcmJvc2UpIHsK
LQkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBtZXNzYWdlcyArIDEp
OwotCQl9Ci0KLQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwgbGVuZ3RoLAotCQkg
ICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKLQkJ
ICAgICAgICAgICAgICAgICAgKHZvaWQgKikmc25kaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywKLQkJICAgICAgICAgICAgICAg
ICAgMCkgPCAwKSB7Ci0JCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8gIT0gRUFH
QUlOKSB7Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2IChjYikiKTsKLQkJCQlleGl0KDEpOwot
CQkJfSBlbHNlIHsKLQkJCQlpZiAodmVyeV92ZXJib3NlKXsKLQkJCQkJcHJpbnRmKCJFV09VTERC
TE9DSyBvciBFQUdBSU4gZm9yIG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdpbGwgcmV0cnlcbiIsIG1l
c3NhZ2VzICsgMSk7Ci0JCQkJfQotCQkJCS8qIHNlbmQgdW50aWwgRVdPVUxEQkxPQ0sgdGhlbiBl
eGl0IGNhbGxiYWNrLiAqLwotCQkJCXJldHVybiAoMSk7Ci0JCQl9Ci0JCX0KLQkJbWVzc2FnZXMr
KzsKLQl9Ci0JaWYgKChkb25lID09IDEpIHx8IChtZXNzYWdlcyA9PSAobnVtYmVyX29mX21lc3Nh
Z2VzIC0gMSkpKSB7Ci0JCWlmICh2ZXJ5X3ZlcmJvc2UpCi0JCQlwcmludGYoIlNlbmRpbmcgZmlu
YWwgbWVzc2FnZSBudW1iZXIgJWx1LlxuIiwgbWVzc2FnZXMgKyAxKTsKLQotCQlzbmRpbmZvLnNu
ZF9mbGFncyB8PSBTQ1RQX0VPRjsKLQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwg
bGVuZ3RoLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKLQkJICAgICAgICAg
ICAgICAgICAgKHZvaWQgKikmc25kaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywKLQkJICAgICAgICAgICAgICAgICAgMCkgPCAw
KSB7Ci0JCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8gIT0gRUFHQUlOKSB7Ci0J
CQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2IChjYikiKTsKLQkJCQlleGl0KDEpOwotCQkJfSBlbHNl
IHsKLQkJCQlpZiAodmVyeV92ZXJib3NlKXsKLQkJCQkJcHJpbnRmKCJFV09VTERCTE9DSyBvciBF
QUdBSU4gZm9yIGZpbmFsIG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdpbGwgcmV0cnlcbiIsIG1lc3Nh
Z2VzICsgMSk7Ci0JCQkJfQotCQkJCS8qIHNlbmQgdW50aWwgRVdPVUxEQkxPQ0sgdGhlbiBleGl0
IGNhbGxiYWNrLiAqLwotCQkJCXJldHVybiAoMSk7Ci0JCQl9Ci0JCX0KLQkJbWVzc2FnZXMrKzsK
LQkJZG9uZSA9IDI7Ci0JfQotCi0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGludAotc2VydmVy
X3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRk
ciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3Jj
dmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewotCXN0cnVjdCB0aW1ldmFs
IG5vdywgZGlmZl90aW1lOwotCWRvdWJsZSBzZWNvbmRzOwotCi0JaWYgKGRhdGEgPT0gTlVMTCkg
ewotCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JCXRpbWVyc3ViKCZub3csICZzdGFydF90
aW1lLCAmZGlmZl90aW1lKTsKLQkJc2Vjb25kcyA9IGRpZmZfdGltZS50dl9zZWMgKyAoZG91Ymxl
KWRpZmZfdGltZS50dl91c2VjLzEwMDAwMDAuMDsKLQkJcHJpbnRmKCIlbGx1LCAlbHUsICVsbHUs
ICVmLCAlZlxuIiwKLQkJCWZpcnN0X2xlbmd0aCwgbWVzc2FnZXMsIHN1bSwgc2Vjb25kcywgKGRv
dWJsZSlmaXJzdF9sZW5ndGggKiAoZG91YmxlKW1lc3NhZ2VzIC8gc2Vjb25kcyk7Ci0JCXVzcnNj
dHBfY2xvc2Uoc29jayk7Ci0JCWZpcnN0X2xlbmd0aCA9IDA7Ci0JCXN1bSA9IDA7Ci0JCW1lc3Nh
Z2VzID0gMDsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JaWYgKGZpcnN0X2xlbmd0aCA9PSAwKSB7Ci0J
CWZpcnN0X2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpZGF0YWxlbjsKLQkJZ2V0dGltZW9mZGF5KCZz
dGFydF90aW1lLCBOVUxMKTsKLQl9Ci0Jc3VtICs9IGRhdGFsZW47Ci0JbWVzc2FnZXMrKzsKLQot
CWZyZWUoZGF0YSk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGludAotY2xpZW50X3JlY2Vp
dmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9p
ZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8g
cmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewotCWZyZWUoZGF0YSk7Ci0JcmV0dXJu
ICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQot
ewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1h
dCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJn
dikKLXsKLSNpZm5kZWYgX1dJTjMyCi0JaW50IGM7Ci0jZW5kaWYKLQlzb2NrbGVuX3QgYWRkcl9s
ZW47Ci0Jc3RydWN0IHNvY2thZGRyX2luIGxvY2FsX2FkZHI7Ci0Jc3RydWN0IHRpbWV2YWwgdGlt
ZV9zdGFydCwgdGltZV9ub3csIHRpbWVfZGlmZjsKLQlpbnQgY2xpZW50OwotCXVpbnQxNl90IGxv
Y2FsX3BvcnQsIHJlbW90ZV9wb3J0LCBwb3J0LCBsb2NhbF91ZHBfcG9ydCwgcmVtb3RlX3VkcF9w
b3J0OwotCWludCByY3ZidWZzaXplPTAsIHNuZGJ1ZnNpemU9MCwgbXlyY3ZidWZzaXplLCBteXNu
ZGJ1ZnNpemU7Ci0Jc29ja2xlbl90IGludGxlbjsKLQlkb3VibGUgc2Vjb25kczsKLQlkb3VibGUg
dGhyb3VnaHB1dDsKLQlpbnQgbm9kZWxheSA9IDA7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
YXY7Ci0Jc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZv
IHNuZGluZm87Ci0jaWZkZWYgX1dJTjMyCi0JdW5zaWduZWQgbG9uZyBzcmNBZGRyOwotCUhBTkRM
RSB0aWQ7Ci0jZWxzZQotCWluX2FkZHJfdCBzcmNBZGRyOwotCXB0aHJlYWRfdCB0aWQ7Ci0jZW5k
aWYKLQlpbnQgZnJhZ3BvaW50ID0gMDsKLQlzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIGluZCA9
IHswfTsKLSNpZmRlZiBfV0lOMzIKLQljaGFyICpvcHQ7Ci0JaW50IG9wdGluZDsKLSNlbmRpZgot
CXVub3JkZXJlZCA9IDA7Ci0KLQlsZW5ndGggPSBERUZBVUxUX0xFTkdUSDsKLQludW1iZXJfb2Zf
bWVzc2FnZXMgPSBERUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUzsKLQlwb3J0ID0gREVGQVVMVF9Q
T1JUOwotCXJlbW90ZV91ZHBfcG9ydCA9IDA7Ci0JbG9jYWxfdWRwX3BvcnQgPSA5ODk5OwotCXZl
cmJvc2UgPSAwOwotCXZlcnlfdmVyYm9zZSA9IDA7Ci0Jc3JjQWRkciA9IGh0b25sKElOQUREUl9B
TlkpOwotCi0JbWVtc2V0KCh2b2lkICopICZyZW1vdGVfYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOwotCW1lbXNldCgodm9pZCAqKSAmbG9jYWxfYWRkciwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotCi0jaWZuZGVmIF9XSU4zMgotCXdoaWxlICgoYyA9IGdldG9w
dChhcmdjLCBhcmd2LCAiYTpjcDpsOkU6ZjpMOm46UjpTOlQ6dVU6dlZEIikpICE9IC0xKQotCQlz
d2l0Y2goYykgewotCQkJY2FzZSAnYSc6Ci0JCQkJaW5kLnNzYl9hZGFwdGF0aW9uX2luZCA9IGF0
b2kob3B0YXJnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ2MnOgotCQkJCXVzZV9jYiA9IDE7Ci0J
CQkJYnJlYWs7Ci0JCQljYXNlICdsJzoKLQkJCQlsZW5ndGggPSBhdG9pKG9wdGFyZyk7Ci0JCQkJ
YnJlYWs7Ci0JCQljYXNlICduJzoKLQkJCQludW1iZXJfb2ZfbWVzc2FnZXMgPSBhdG9pKG9wdGFy
Zyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdwJzoKLQkJCQlwb3J0ID0gYXRvaShvcHRhcmcpOwot
CQkJCWJyZWFrOwotCQkJY2FzZSAnRSc6Ci0JCQkJbG9jYWxfdWRwX3BvcnQgPSBhdG9pKG9wdGFy
Zyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdmJzoKLQkJCQlmcmFncG9pbnQgPSBhdG9pKG9wdGFy
Zyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdMJzoKLQkJCQlpbmV0X3B0b24oQUZfSU5FVCwgb3B0
YXJnLCAmc3JjQWRkcik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdSJzoKLQkJCQlyY3ZidWZzaXpl
ID0gYXRvaShvcHRhcmcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnUyc6Ci0JCQkJc25kYnVmc2l6
ZSA9IGF0b2kob3B0YXJnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1QnOgotCQkJCXJ1bnRpbWUg
PSBhdG9pKG9wdGFyZyk7Ci0JCQkJbnVtYmVyX29mX21lc3NhZ2VzID0gMDsKLQkJCQlicmVhazsK
LQkJCWNhc2UgJ3UnOgotCQkJCXVub3JkZXJlZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdV
JzoKLQkJCQlyZW1vdGVfdWRwX3BvcnQgPSBhdG9pKG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQlj
YXNlICd2JzoKLQkJCQl2ZXJib3NlID0gMTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1YnOgotCQkJ
CXZlcmJvc2UgPSAxOwotCQkJCXZlcnlfdmVyYm9zZSA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNl
ICdEJzoKLQkJCQlub2RlbGF5ID0gMTsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJZnBy
aW50ZihzdGRlcnIsICIlcyIsIFVzYWdlKTsKLQkJCQlleGl0KDEpOwotCQl9Ci0jZWxzZQotCWZv
ciAob3B0aW5kID0gMTsgb3B0aW5kIDwgYXJnYzsgb3B0aW5kKyspIHsKLQkJaWYgKGFyZ3Zbb3B0
aW5kXVswXSA9PSAnLScpIHsKLQkJCXN3aXRjaCAoYXJndltvcHRpbmRdWzFdKSB7Ci0JCQkJY2Fz
ZSAnYSc6Ci0JCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwg
VXNhZ2UpOwotCQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07
Ci0JCQkJCWluZC5zc2JfYWRhcHRhdGlvbl9pbmQgPSBhdG9pKG9wdCk7Ci0JCQkJCWJyZWFrOwot
CQkJCWNhc2UgJ2MnOgotCQkJCQl1c2VfY2IgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICds
JzoKLQkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKLQkJCQkJCXByaW50ZigiJXMiLCBVc2Fn
ZSk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKLQkJ
CQkJbGVuZ3RoID0gYXRvaShvcHQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdwJzoKLQkJCQkJ
aWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKLQkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7Ci0JCQkJ
CQlleGl0KDEpOwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKLQkJCQkJcG9ydCA9
IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnbic6Ci0JCQkJCWlmICgrK29wdGlu
ZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgxKTsK
LQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCW51bWJlcl9vZl9tZXNzYWdl
cyA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnZic6Ci0JCQkJCWlmICgrK29w
dGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgx
KTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCWZyYWdwb2ludCA9IGF0
b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnTCc6Ci0JCQkJCWlmICgrK29wdGluZCA+
PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgxKTsKLQkJ
CQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCWluZXRfcHRvbihBRl9JTkVULCBv
cHQsICZzcmNBZGRyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnVSc6Ci0JCQkJCWlmICgrK29w
dGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgx
KTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCXJlbW90ZV91ZHBfcG9y
dCA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnRSc6Ci0JCQkJCWlmICgrK29w
dGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgx
KTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCWxvY2FsX3VkcF9wb3J0
ID0gYXRvaShvcHQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdSJzoKLQkJCQkJaWYgKCsrb3B0
aW5kID49IGFyZ2MpIHsKLQkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7Ci0JCQkJCQlleGl0KDEp
OwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKLQkJCQkJcmN2YnVmc2l6ZSA9IGF0
b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnUyc6Ci0JCQkJCWlmICgrK29wdGluZCA+
PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgxKTsKLQkJ
CQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCXNuZGJ1ZnNpemUgPSBhdG9pKG9w
dCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ1QnOgotCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJn
YykgewotCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKLQkJCQkJCWV4aXQoMSk7Ci0JCQkJCX0K
LQkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwotCQkJCQlydW50aW1lID0gYXRvaShvcHQpOwotCQkJ
CQludW1iZXJfb2ZfbWVzc2FnZXMgPSAwOwotCQkJCQlicmVhazsKLQkJCQljYXNlICd1JzoKLQkJ
CQkJdW5vcmRlcmVkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAndic6Ci0JCQkJCXZlcmJv
c2UgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdWJzoKLQkJCQkJdmVyYm9zZSA9IDE7Ci0J
CQkJCXZlcnlfdmVyYm9zZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ0QnOgotCQkJCQlu
b2RlbGF5ID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJCQkJcHJpbnRmKCIlcyIs
IFVzYWdlKTsKLQkJCQkJZXhpdCgxKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWJyZWFrOwotCQl9
Ci0JfQotI2VuZGlmCi0JaWYgKG9wdGluZCA9PSBhcmdjKSB7Ci0JCWNsaWVudCA9IDA7Ci0JCWxv
Y2FsX3BvcnQgPSBwb3J0OwotCQlyZW1vdGVfcG9ydCA9IDA7Ci0JfSBlbHNlIHsKLQkJY2xpZW50
ID0gMTsKLQkJbG9jYWxfcG9ydCA9IDA7Ci0JCXJlbW90ZV9wb3J0ID0gcG9ydDsKLQl9Ci0JbG9j
YWxfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlsb2Nh
bF9hZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCWxv
Y2FsX2FkZHIuc2luX3BvcnQgPSBodG9ucyhsb2NhbF9wb3J0KTsKLQlsb2NhbF9hZGRyLnNpbl9h
ZGRyLnNfYWRkciA9IHNyY0FkZHI7Ci0KLQl1c3JzY3RwX2luaXQobG9jYWxfdWRwX3BvcnQsIE5V
TEwsIGRlYnVnX3ByaW50Zik7Ci0jaWZkZWYgU0NUUF9ERUJVRwotCXVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfQUxMKTsKLSNlbmRpZgotCXVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX2JsYWNraG9sZSgyKTsKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lbmFibGVf
c2Fja19pbW1lZGlhdGVseSgxKTsKLQotCWlmIChjbGllbnQpIHsKLQkJaWYgKHVzZV9jYikgewot
CQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQ
Uk9UT19TQ1RQLCBjbGllbnRfcmVjZWl2ZV9jYiwgc2VuZF9jYiwgbGVuZ3RoLCBOVUxMKSkpIHsK
LQkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7Ci0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJfSBlbHNl
IHsKLQkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0s
IElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7Ci0JCQkJcGVycm9yKCJ1c2Vy
X3NvY2tldCIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAodXNl
X2NiKSB7Ci0JCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RS
RUFNLCBJUFBST1RPX1NDVFAsIHNlcnZlcl9yZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxMKSkpIHsK
LQkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7Ci0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJfSBlbHNl
IHsKLQkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0s
IElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7Ci0JCQkJcGVycm9yKCJ1c2Vy
X3NvY2tldCIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlpZiAodXNyc2N0cF9i
aW5kKHBzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmxvY2FsX2FkZHIsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSA9PSAtMSkgewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCQlleGl0
KDEpOwotCX0KLQotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwg
U0NUUF9BREFQVEFUSU9OX0xBWUVSLCAoY29uc3Qgdm9pZCopJmluZCwgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbikpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tv
cHQiKTsKLQl9Ci0KLQlpZiAoIWNsaWVudCkgewotCQlpZiAocmN2YnVmc2l6ZSkgewotCQkJaWYg
KHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmcmN2YnVm
c2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgewotCQkJCXBlcnJvcigic2V0c29ja29wdDogcmN2YnVm
Iik7Ci0JCQl9Ci0JCX0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCWludGxlbiA9IHNpemVvZihpbnQp
OwotCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fUkNWQlVG
LCAmbXlyY3ZidWZzaXplLCAoc29ja2xlbl90ICopJmludGxlbikgPCAwKSB7Ci0JCQkJcGVycm9y
KCJnZXRzb2Nrb3B0OiByY3ZidWYiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZnByaW50ZihzdGRvdXQs
IlJlY2VpdmUgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlyY3ZidWZzaXplKTsKLQkJCX0KLQkJfQot
Ci0JCWlmICh1c3JzY3RwX2xpc3Rlbihwc29jaywgMSkgPCAwKSB7Ci0JCQlwZXJyb3IoInVzcnNj
dHBfbGlzdGVuIik7Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJd2hpbGUgKDEpIHsKLQkJCW1lbXNl
dCgmcmVtb3RlX2FkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJCWFkZHJf
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQlpZiAodXNlX2NiKSB7Ci0JCQkJ
c3RydWN0IHNvY2tldCAqY29ubl9zb2NrOwotCi0JCQkJaWYgKChjb25uX3NvY2sgPSB1c3JzY3Rw
X2FjY2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsICZhZGRyX2xl
bikpPT0gTlVMTCkgewotCQkJCQlwZXJyb3IoInVzcnNjdHBfYWNjZXB0Iik7Ci0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IHNvY2tldCAqKmNvbm5fc29jazsK
LQotCQkJCWNvbm5fc29jayA9IChzdHJ1Y3Qgc29ja2V0ICoqKW1hbGxvYyhzaXplb2Yoc3RydWN0
IHNvY2tldCAqKSk7Ci0JCQkJaWYgKCgqY29ubl9zb2NrID0gdXNyc2N0cF9hY2NlcHQocHNvY2ss
IChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAmYWRkcl9sZW4pKT09IE5VTEwpIHsK
LQkJCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0j
aWZkZWYgX1dJTjMyCi0JCQkJdGlkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfY29u
bmVjdGlvbiwgKHZvaWQgKiljb25uX3NvY2ssIDAsIE5VTEwpOwotI2Vsc2UKLQkJCQlwdGhyZWFk
X2NyZWF0ZSgmdGlkLCBOVUxMLCAmaGFuZGxlX2Nvbm5lY3Rpb24sICh2b2lkICopY29ubl9zb2Nr
KTsKLSNlbmRpZgotCQkJfQotCQkJaWYgKHZlcmJvc2UpIHsKLQkJCQkvLyBjb25zdCBjaGFyICpp
bmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc29ja2xlbl90IHNp
emUpCi0JCQkJLy9pbmV0X250b2EocmVtb3RlX2FkZHIuc2luX2FkZHIpCi0JCQkJY2hhciBhZGRy
YnVmW0lORVRfQUREUlNUUkxFTl07Ci0JCQkJcHJpbnRmKCJDb25uZWN0aW9uIGFjY2VwdGVkIGZy
b20gJXM6JWRcbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKHJlbW90ZV9hZGRyLnNpbl9hZGRyKSwg
YWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVOKSwgbnRvaHMocmVtb3RlX2FkZHIuc2luX3BvcnQpKTsK
LQkJCX0KLQkJfQotCQkvL3VzcnNjdHBfY2xvc2UocHNvY2spOyAvLyB1bnJlYWNoYWJsZQotCX0g
ZWxzZSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBz
KSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUOwotCQllbmNhcHMu
c3VlX3BvcnQgPSBodG9ucyhyZW1vdGVfdWRwX3BvcnQpOwotCQlpZiAodXNyc2N0cF9zZXRzb2Nr
b3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNv
bnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2Fw
cykpIDwgMCkgewotCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7Ci0JCX0KLQotCQlyZW1vdGVfYWRk
ci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJcmVtb3RlX2Fk
ZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCWlmICgh
aW5ldF9wdG9uKEFGX0lORVQsIGFyZ3Zbb3B0aW5kXSwgJnJlbW90ZV9hZGRyLnNpbl9hZGRyLnNf
YWRkcikpewotCQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzXG4i
KTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJcmVtb3RlX2FkZHIuc2luX3BvcnQgPSBodG9ucyhyZW1v
dGVfcG9ydCk7Ci0KLQkJLyogVE9ETyBmcmFncG9pbnQgc3R1ZmYgKi8KLQkJaWYgKG5vZGVsYXkg
PT0gMSkgewotCQkJb3B0dmFsID0gMTsKLQkJfSBlbHNlIHsKLQkJCW9wdHZhbCA9IDA7Ci0JCX0K
LQkJdXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfTk9ERUxBWSwg
Jm9wdHZhbCwgc2l6ZW9mKGludCkpOwotCi0JCWlmIChmcmFncG9pbnQpIHsKLQkJCWF2LmFzc29j
X2lkID0gMDsKLQkJCWF2LmFzc29jX3ZhbHVlID0gZnJhZ3BvaW50OwotCQkJaWYgKHVzcnNjdHBf
c2V0c29ja29wdChwc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX01BWFNFRywgJmF2LCBzaXplb2Yo
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKLQkJCQlwZXJyb3IoInNldHNvY2tvcHQ6
IFNDVFBfTUFYU0VHIik7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc25kYnVmc2l6ZSkgewotCQkJaWYg
KHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc25kYnVm
c2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgewotCQkJCXBlcnJvcigic2V0c29ja29wdDogc25kYnVm
Iik7Ci0JCQl9Ci0JCX0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCWludGxlbiA9IHNpemVvZihpbnQp
OwotCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09fU05EQlVG
LCAmbXlzbmRidWZzaXplLCAoc29ja2xlbl90ICopJmludGxlbikgPCAwKSB7Ci0JCQkJcGVycm9y
KCJzZXRzb2Nrb3B0OiBTT19TTkRCVUYiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZnByaW50ZihzdGRv
dXQsIlNlbmQgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlzbmRidWZzaXplKTsKLQkJCX0KLQkJfQot
Ci0JCWJ1ZmZlciA9IG1hbGxvYyhsZW5ndGgpOwotCQltZW1zZXQoYnVmZmVyLCAnYicsIGxlbmd0
aCk7Ci0KLQkJaWYgKHVzcnNjdHBfY29ubmVjdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAm
cmVtb3RlX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSAtMSApIHsKLQkJCXBl
cnJvcigidXNyc2N0cF9jb25uZWN0Iik7Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJZ2V0dGltZW9m
ZGF5KCZ0aW1lX3N0YXJ0LCBOVUxMKTsKLQotCQlkb25lID0gMDsKLQotCQlpZiAocnVudGltZSA+
IDApIHsKLSNpZm5kZWYgX1dJTjMyCi0JCQlzaWduYWwoU0lHQUxSTSwgc3RvcF9zZW5kZXIpOwot
CQkJYWxhcm0ocnVudGltZSk7Ci0jZWxzZQotCQkJcHJpbnRmKCJZb3UgY2Fubm90IHNldCB0aGUg
cnVudGltZSBpbiBXaW5kb3dzIHlldFxuIik7Ci0JCQlleGl0KC0xKTsKLSNlbmRpZgotCQl9Ci0K
LQkJaWYgKHVzZV9jYikgewotCQkJd2hpbGUgKGRvbmUgPCAyICYmIChtZXNzYWdlcyA8IChudW1i
ZXJfb2ZfbWVzc2FnZXMgLSAxKSkpIHsKLSNpZmRlZiBfV0lOMzIKLQkJCQlTbGVlcCgxMDAwKTsK
LSNlbHNlCi0JCQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXNuZGlu
Zm8uc25kX3NpZCA9IDA7Ci0JCQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7Ci0JCQlpZiAodW5vcmRl
cmVkICE9IDApIHsKLQkJCQlzbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKLQkJ
CX0KLQkJCXNuZGluZm8uc25kX3BwaWQgPSAwOwotCQkJc25kaW5mby5zbmRfY29udGV4dCA9IDA7
Ci0JCQlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7Ci0JCQlpZiAodmVyYm9zZSkgewotCQkJCXBy
aW50ZigiU3RhcnQgc2VuZGluZyAiKTsKLQkJCQlpZiAobnVtYmVyX29mX21lc3NhZ2VzID4gMCkg
ewotCQkJCQlwcmludGYoIiVsZCBtZXNzYWdlcyAiLCAobG9uZyludW1iZXJfb2ZfbWVzc2FnZXMp
OwotCQkJCX0KLQkJCQlpZiAocnVudGltZSA+IDApIHsKLQkJCQkJcHJpbnRmKCJmb3IgJXUgc2Vj
b25kcyAuLi4iLCBydW50aW1lKTsKLQkJCQl9Ci0JCQkJcHJpbnRmKCJcbiIpOwotCQkJCWZmbHVz
aChzdGRvdXQpOwotCQkJfQotCQkJd2hpbGUgKCFkb25lICYmICgobnVtYmVyX29mX21lc3NhZ2Vz
ID09IDApIHx8IChtZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpKSB7Ci0JCQkJ
aWYgKHZlcnlfdmVyYm9zZSkgewotCQkJCQlwcmludGYoIlNlbmRpbmcgbWVzc2FnZSBudW1iZXIg
JWx1LlxuIiwgbWVzc2FnZXMgKyAxKTsKLQkJCQl9Ci0KLQkJCQlpZiAodXNyc2N0cF9zZW5kdihw
c29jaywgYnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAx
LAotCQkJCSAgICAgICAgICAgICAgICAgICh2b2lkICopJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sCi0JCQkJICAgICAg
ICAgICAgICAgICAgMCkgPCAwKSB7Ci0JCQkJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOwotCQkJ
CQlleGl0KDEpOwotCQkJCX0KLQkJCQltZXNzYWdlcysrOwotCQkJfQotCQkJaWYgKHZlcnlfdmVy
Ym9zZSkgewotCQkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBtZXNz
YWdlcyArIDEpOwotCQkJfQotCi0JCQlzbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQX0VPRjsKLQkJ
CWlmICh1c3JzY3RwX3NlbmR2KHBzb2NrLCBidWZmZXIsIGxlbmd0aCwgKHN0cnVjdCBzb2NrYWRk
ciAqKSAmcmVtb3RlX2FkZHIsIDEsCi0JCQkgICAgICAgICAgICAgICAgICAodm9pZCAqKSZzbmRp
bmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9T
TkRJTkZPLAotCQkJICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7Ci0JCQkJcGVycm9yKCJ1c3Jz
Y3RwX3NlbmR2Iik7Ci0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJCW1lc3NhZ2VzKys7Ci0JCX0KLQkJ
ZnJlZSAoYnVmZmVyKTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJcHJpbnRmKCJDbG9zaW5nIHNv
Y2tldC5cbiIpOwotCQl9Ci0KLQkJdXNyc2N0cF9jbG9zZShwc29jayk7Ci0JCWdldHRpbWVvZmRh
eSgmdGltZV9ub3csIE5VTEwpOwotCQl0aW1lcnN1YigmdGltZV9ub3csICZ0aW1lX3N0YXJ0LCAm
dGltZV9kaWZmKTsKLQkJc2Vjb25kcyA9IHRpbWVfZGlmZi50dl9zZWMgKyAoZG91YmxlKXRpbWVf
ZGlmZi50dl91c2VjLzEwMDAwMDA7Ci0JCXByaW50ZigiJXMgb2YgJWxkIG1lc3NhZ2VzIG9mIGxl
bmd0aCAldSB0b29rICVmIHNlY29uZHMuXG4iLAotCQkgICAgICAgIlNlbmRpbmciLCBtZXNzYWdl
cywgbGVuZ3RoLCBzZWNvbmRzKTsKLQkJdGhyb3VnaHB1dCA9IChkb3VibGUpbWVzc2FnZXMgKiAo
ZG91YmxlKWxlbmd0aCAvIHNlY29uZHM7Ci0JCXByaW50ZigiVGhyb3VnaHB1dCB3YXMgJWYgQnl0
ZS9zZWMuXG4iLCB0aHJvdWdocHV0KTsKLQl9Ci0KLQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAh
PSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAoMSk7
Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cC5wYy5pbiBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMWVjZDJmNzRlYmY4YWUw
MmIzMTQ5Y2E1MmU3NzhhNDdjMDY3NWFlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwLnBjLmluCisrKyAvZGV2L251bGwKQEAgLTEsMTIgKzAsMCBA
QAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACi1saWJkaXI9QGxp
YmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACi0KLU5hbWU6IHVzcnNjdHAKLURlc2NyaXB0
aW9uOiBTQ1RQIGltcGxlbWVudGF0aW9uCi1VUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFi
L3VzcnNjdHAKLVZlcnNpb246IEBWRVJTSU9OQAotUmVxdWlyZXM6IAotTGliczogLUwke2xpYmRp
cn0gLWx1c3JzY3RwCi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQVBQQ0ZMQUdTQApkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvLmdpdGF0dHJpYnV0ZXMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8uZ2l0YXR0cmlidXRlcwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwMzZlYjRmNDEyMTc3NjFiM2E5MTE4MWNj
OTQ5YWI2NjIwMzc5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi8uZ2l0YXR0cmlidXRlcworKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBA
QAotdXNlcl9hdG9taWMuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi11c2VyX2lwX2lj
bXAuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi11c2VyX21idWYuYyBzdm4tcHJvcGVy
dGllcz1hbGxvdy10YWJzPW9uCi11c2VyX3JlY3ZfdGhyZWFkLmMgc3ZuLXByb3BlcnRpZXM9YWxs
b3ctdGFicz1vbgotdXNlcl9zb2NrZXQuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi11
c3JzY3RwLmggc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvLmdpdGlnbm9yZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRpZ25vcmUKaW5kZXggZTY5ZGUyOWJiMmQxZDY0
MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNGEzODAxMzhkZjU5OWE0YWZlZGU3MDk2ZWM4NWRm
YzRhNzQ1N2U0MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGlnbm9yZQorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNzcgQEAKKyMgT2JqZWN0IGZpbGVzCisqLm8KKyoua28K
Kyoub2JqCisqLmVsZgorCisjIFByZWNvbXBpbGVkIEhlYWRlcnMKKyouZ2NoCisqLnBjaAorCisj
IExpYnJhcmllcworKi5saWIKKyouYQorKi5sYQorKi5sbworCisjIFNoYXJlZCBvYmplY3RzIChp
bmMuIFdpbmRvd3MgRExMcykKKyouZGxsCisqLnNvCisqLnNvLioKKyouZHlsaWIKKworIyBFeGVj
dXRhYmxlcworKi5leGUKKyoub3V0CisqLmFwcAorKi5pKjg2CisqLng4Nl82NAorKi5oZXgKKwor
IyBEZWJ1ZyBmaWxlcworKi5kU1lNCisKKyMgQXV0b21ha2UgYW5kIG1ha2UgcmVsZWF0ZWQgc3R1
ZmYKK01ha2VmaWxlCitNYWtlZmlsZS5pbgorLmRlcHMKKy5saWJzCisvYXV0b200dGUuY2FjaGUK
Ky9hY2xvY2FsLm00CisvY29tcGlsZQorL2NvbmZpZ3VyZQorL2RlcGNvbXAKKy9pbnN0YWxsLXNo
CisvbWlzc2luZworL3N0YW1wLWgxCisvY29uZmlnLmd1ZXNzCisvY29uZmlnLmxvZworL2NvbmZp
Zy5zdGF0dXMKKy9jb25maWcuc3ViCisvbGlidG9vbAorL2x0bWFpbi5zaAorL200CisvdXNyc2N0
cC5wYworLmRpcnN0YW1wCisKKyMgYmluYXJpZXMKK3Byb2dyYW1zL2NsaWVudAorcHJvZ3JhbXMv
ZGF5dGltZV9zZXJ2ZXIKK3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyCitwcm9ncmFtcy9lY2hvX3Nl
cnZlcgorcHJvZ3JhbXMvZWtyX2NsaWVudAorcHJvZ3JhbXMvZWtyX2xvb3AKK3Byb2dyYW1zL2Vr
cl9sb29wX29mZmxvYWQKK3Byb2dyYW1zL2Vrcl9wZWVyCitwcm9ncmFtcy9la3Jfc2VydmVyCitw
cm9ncmFtcy9odHRwX2NsaWVudAorcHJvZ3JhbXMvcnRjd2ViCitwcm9ncmFtcy90c2N0cAorcHJv
Z3JhbXMvdGVzdF9saWJtZ210Citwcm9ncmFtcy90ZXN0X3RpbWVyCisKKyMgY2FsbGdyaW5kCitj
YWxsZ3JpbmQub3V0KgorCisjIGNtYWtlIGJ1aWxkCisvYnVpbGQKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKaW5kZXggOTQyZTAx
YTgyNTYxMjY0OGQ1YjZjZWY1MmMwMDA0NGNjY2E4M2Y1OC4uYWNmNTA1NWE0ZTI4MTkxZDI5Yjgw
YjQ5YjE5MmJiY2Q4M2ZlN2UwMyAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQK
KysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKQEAgLTI5LDE2NiArMjksMjMwIEBACiAjIFNV
Q0ggREFNQUdFLgogIwogCitwcm9qZWN0KHVzcnNjdHBsaWIpCitjbWFrZV9taW5pbXVtX3JlcXVp
cmVkKFZFUlNJT04gMy4wKQorCisjIERlYnVnIGJ1aWxkIHR5cGUgYXMgZGVmYXVsdAoraWYgKE5P
VCBDTUFLRV9CVUlMRF9UWVBFKQorCW1lc3NhZ2UoU1RBVFVTICJObyBidWlsZCB0eXBlIHNlbGVj
dGVkLCB1c2luZyBERUJVRyIpCisJc2V0KENNQUtFX0JVSUxEX1RZUEUgIkRFQlVHIikKK2VuZGlm
ICgpCisKK2luY2x1ZGUoQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIpCitpbmNsdWRlKENoZWNrSW5jbHVk
ZUZpbGUpCitpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGVzKQoraW5jbHVkZShDaGVja0NDb21waWxl
ckZsYWcpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKLSMgSU5DTFVERSBNT0RVTEVTIEFORCBTRVRUSU5HUworIyBDSEVDSyBPUFRJT05TCiAjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLXNldChWRVJT
SU9OICIxLjAuMCIpCitvcHRpb24oc2N0cF9pbnZhcmlhbnRzICJBZGQgcnVudGltZSBjaGVja3Mi
IDApCitpZiAoc2N0cF9pbnZhcmlhbnRzKQorCWFkZF9kZWZpbml0aW9ucygtRElOVkFSSUFOVFMp
CitlbmRpZiAoKQorCitvcHRpb24oc2N0cF9kZWJ1ZyAiUHJvdmlkZSBkZWJ1ZyBpbmZvcm1hdGlv
biIgMSkKK2lmIChzY3RwX2RlYnVnKQorCWFkZF9kZWZpbml0aW9ucygtRFNDVFBfREVCVUcpCitl
bmRpZiAoKQorCitvcHRpb24oc2N0cF9pbmV0ICJTdXBwb3J0IElQdjQiIDEpCitpZiAoc2N0cF9p
bmV0KQorCWFkZF9kZWZpbml0aW9ucygtRElORVQpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF9p
bmV0NiAiU3VwcG9ydCBJUHY2IiAxKQoraWYgKHNjdHBfaW5ldDYpCisJYWRkX2RlZmluaXRpb25z
KC1ESU5FVDYpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF93ZXJyb3IgIlRyZWF0IHdhcm5pbmcg
YXMgZXJyb3IiIDEpCisKK29wdGlvbihzY3RwX2xpbmtfcHJvZ3JhbXNfc3RhdGljICJMaW5rIGV4
YW1wbGUgcHJvZ3JhbXMgc3RhdGljIiAwKQogCi1zZXQocHJlZml4ICR7Q01BS0VfSU5TVEFMTF9Q
UkVGSVh9KQotc2V0KGV4ZWNfcHJlZml4ICJcJHtwcmVmaXh9IikKLXNldChsaWJkaXIgIlwke2V4
ZWNfcHJlZml4fS9saWIiKQotc2V0KGluY2x1ZGVkaXIgIlwke3ByZWZpeH0vaW5jbHVkZS91c3Jz
Y3RwIikKLXNldChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0NNQUtFX0NVUlJFTlRfU09VUkNF
X0RJUn0pCi1zZXQoQ01BS0VfTUFDT1NYX1JQQVRIIDEpCitvcHRpb24oc2N0cF9idWlsZF9wcm9n
cmFtcyAiQnVpbGQgZXhhbXBsZSBwcm9ncmFtcyIgMSkKIAotYWRkX2RlZmluaXRpb25zKC1EX19V
c2Vyc3BhY2VfXykKLWFkZF9kZWZpbml0aW9ucygtRF9fVXNlcnNwYWNlX29zXyR7Q01BS0VfU1lT
VEVNX05BTUV9KQorb3B0aW9uKHNjdHBfc2FuaXRpemVyX2FkZHJlc3MgIkNvbXBpbGUgd2l0aCBh
ZGRyZXNzIHNhbml0aXplciIgMCkKKworb3B0aW9uKHNjdHBfc2FuaXRpemVyX21lbW9yeSAiQ29t
cGlsZSB3aXRoIG1lbW9yeSBzYW5pdGl6ZXIiIDApCisKK2lmIChzY3RwX3Nhbml0aXplcl9hZGRy
ZXNzIEFORCBzY3RwX3Nhbml0aXplcl9tZW1vcnkpCisJbWVzc2FnZShGQVRBTF9FUlJPUiAiQ2Fu
IG5vdCBjb21waWxlIHdpdGggYm90aCBzYW5pdGl6ZXIgb3B0aW9ucyIpCitlbmRpZiAoKQorCitp
ZiAoc2N0cF9saW5rX3Byb2dyYW1zX3N0YXRpYyBPUiBXSU4zMikKKwlzZXQocHJvZ3JhbXNfbGlu
a19saWJyYXJ5ICJ1c3JzY3RwLXN0YXRpYyIpCitlbHNlICgpCisJc2V0KHByb2dyYW1zX2xpbmtf
bGlicmFyeSAidXNyc2N0cCIpCitlbmRpZiAoKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgT1MgREVQRU5ERU5UCisjIENIRUNLIEZPUiBU
WVBFUyBBTkQgRlVOQ1RJT05TCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJMaW51eCIp
Ci0gICAgYWRkX2RlZmluaXRpb25zKC1EX0dOVV9TT1VSQ0UpCi0gICAgI3NldChDTUFLRV9DX0ZM
QUdTICIke0NNQUtFX0NfRkxBR1N9ICAgICAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIp
Ci0gICAgI3NldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLWFkZHJl
c3Mtb2YtcGFja2VkLW1lbWJlciIpCitjaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvcXVldWUuaCIg
aGF2ZV9zeXNfcXVldWVfaCkKK2lmIChoYXZlX3N5c19xdWV1ZV9oKQorCWFkZF9kZWZpbml0aW9u
cygtREhBVkVfU1lTX1FVRVVFX0gpCiBlbmRpZiAoKQogCi1pZiAoJHtDTUFLRV9TWVNURU1fTkFN
RX0gTUFUQ0hFUyAiRnJlZUJTRCIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1VX19GcmVlQlNEX18p
Ci0gICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gICAgIC1Xbm8tYWRkcmVz
cy1vZi1wYWNrZWQtbWVtYmVyIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiIpCi0gICAgc2V0
KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1Xbm8tYWRkcmVzcy1vZi1wYWNr
ZWQtbWVtYmVyIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiIpCitjaGVja19pbmNsdWRlX2Zp
bGVzKCJzeXMvc29ja2V0Lmg7bGludXgvaWZfYWRkci5oIiBoYXZlX2xpbnV4X2lmX2FkZHJfaCkK
K2lmIChoYXZlX2xpbnV4X2lmX2FkZHJfaCkKKwlhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0xJTlVY
X0lGX0FERFJfSCkKIGVuZGlmICgpCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVT
ICJEYXJ3aW4iKQotICAgIGFkZF9kZWZpbml0aW9ucygtVV9fQVBQTEVfXykKLSAgICBhZGRfZGVm
aW5pdGlvbnMoLURfX0FQUExFX1VTRV9SRkNfMjI5MikKLSAgICBzZXQoQ01BS0VfQ19GTEFHUyAi
JHtDTUFLRV9DX0ZMQUdTfSAgICAgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgLVduby1k
ZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIpCi0gICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFL
RV9DWFhfRkxBR1N9IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIC1Xbm8tZGVwcmVjYXRl
ZC1kZWNsYXJhdGlvbnMiKQorY2hlY2tfaW5jbHVkZV9maWxlcygic3lzL3NvY2tldC5oO2xpbnV4
L3J0bmV0bGluay5oIiBoYXZlX2xpbnV4X3J0bmV0bGlua19oKQoraWYgKGhhdmVfbGludXhfcnRu
ZXRsaW5rX2gpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9MSU5VWF9SVE5FVExJTktfSCkKIGVu
ZGlmICgpCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEcmFnb25GbHkiKQot
ICAgIGFkZF9kZWZpbml0aW9ucygtVV9fRHJhZ29uRmx5X18pCitjaGVja19pbmNsdWRlX2ZpbGVz
KCJzeXMvdHlwZXMuaDtuZXRpbmV0L2luLmg7bmV0aW5ldC9pcC5oO25ldGluZXQvaXBfaWNtcC5o
IiBoYXZlX25ldGluZXRfaXBfaWNtcF9oKQoraWYgKGhhdmVfbmV0aW5ldF9pcF9pY21wX2gpCisJ
YWRkX2RlZmluaXRpb25zKC1ESEFWRV9ORVRJTkVUX0lQX0lDTVBfSCkKIGVuZGlmICgpCiAKLWlm
ICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJOZXRCU0QiKQotICAgIGFkZF9kZWZpbml0
aW9ucygtVV9fTmV0QlNEX18pCitjaGVja19pbmNsdWRlX2ZpbGVzKCJzdGRhdG9taWMuaCIgaGF2
ZV9zdGRhdG9taWNfaCkKK2lmIChoYXZlX3N0ZGF0b21pY19oKQorCWFkZF9kZWZpbml0aW9ucygt
REhBVkVfU1REQVRPTUlDX0gpCiBlbmRpZiAoKQogCi1pZiAoJHtDTUFLRV9TWVNURU1fTkFNRX0g
TUFUQ0hFUyAiT3BlbkJTRCIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1VX19PcGVuQlNEX18pCisK
KyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0hF
Q0sgU1RSVUNUIE1FTUJFUlMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKKworc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICIke0NNQUtFX1NPVVJD
RV9ESVJ9L3VzcnNjdHBsaWIiKQorCitjaGVja19pbmNsdWRlX2ZpbGUodXNyc2N0cC5oIGhhdmVf
dXNyc2N0cF9oKQoraWYgKE5PVCBoYXZlX3VzcnNjdHBfaCkKKwltZXNzYWdlKEZBVEFMX0VSUk9S
ICJ1c3JzY3RwLmggbm90IGZvdW5kIikKK2VuZGlmICgpCisKK2NoZWNrX3N0cnVjdF9oYXNfbWVt
YmVyKCJzdHJ1Y3Qgc29ja2FkZHIiICJzYV9sZW4iICJzeXMvdHlwZXMuaDtzeXMvc29ja2V0Lmgi
IGhhdmVfc2FfbGVuKQoraWYgKGhhdmVfc2FfbGVuKQorCW1lc3NhZ2UoU1RBVFVTICJoYXZlX3Nh
X2xlbiIpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9TQV9MRU4pCitlbmRpZiAoKQorCitjaGVj
a19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2thZGRyX2luIiAic2luX2xlbiIgInN5cy90
eXBlcy5oO25ldGluZXQvaW4uaCIgaGF2ZV9zaW5fbGVuKQoraWYgKGhhdmVfc2luX2xlbikKKwlt
ZXNzYWdlKFNUQVRVUyAiaGF2ZV9zaW5fbGVuIikKKwlhZGRfZGVmaW5pdGlvbnMoLURIQVZFX1NJ
Tl9MRU4pCitlbmRpZiAoKQorCitjaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2th
ZGRyX2luNiIgInNpbjZfbGVuIiAic3lzL3R5cGVzLmg7bmV0aW5ldC9pbi5oIiBoYXZlX3NpbjZf
bGVuKQoraWYgKGhhdmVfc2luNl9sZW4pCisJbWVzc2FnZShTVEFUVVMgImhhdmVfc2luNl9sZW4i
KQorCWFkZF9kZWZpbml0aW9ucygtREhBVkVfU0lONl9MRU4pCitlbmRpZiAoKQorCitjaGVja19z
dHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2thZGRyX2Nvbm4iICJzY29ubl9sZW4iICJ1c3Jz
Y3RwLmgiIGhhdmVfc2Nvbm5fbGVuKQoraWYgKGhhdmVfc2Nvbm5fbGVuKQorCW1lc3NhZ2UoU1RB
VFVTICJIQVZFX1NDT05OX0xFTiIpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9TQ09OTl9MRU4p
CiBlbmRpZiAoKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKLSMgTElCUkFSWSBGSUxFUworIyBDT01QSUxFUiBTRVRUSU5HUwogIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi1pbmNsdWRlX2RpcmVj
dG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKLQotbGlzdChBUFBFTkQgdXNyc2N0
cF9yb290X0hFQURFUlMKLSAgICB1c2VyX2F0b21pYy5oCi0gICAgdXNlcl9lbnZpcm9ubWVudC5o
Ci0gICAgdXNlcl9pbnBjYi5oCi0gICAgdXNlcl9pcF9pY21wLmgKLSAgICB1c2VyX2lwNl92YXIu
aAotICAgIHVzZXJfbWFsbG9jLmgKLSAgICB1c2VyX21idWYuaAotICAgIHVzZXJfcXVldWUuaAot
ICAgIHVzZXJfcmVjdl90aHJlYWQuaAotICAgIHVzZXJfcm91dGUuaAotICAgIHVzZXJfc29ja2V0
dmFyLmgKLSAgICB1c2VyX3VtYS5oCi0gICAgdXNyc2N0cC5oCi0pCi0KLWxpc3QoQVBQRU5EIHVz
cnNjdHBfbmV0aW5ldF9IRUFERVJTCi0gICAgbmV0aW5ldC9zY3RwX2FzY29uZi5oCi0gICAgbmV0
aW5ldC9zY3RwX2F1dGguaAotICAgIG5ldGluZXQvc2N0cF9ic2RfYWRkci5oCi0gICAgbmV0aW5l
dC9zY3RwX2NhbGxvdXQuaAotICAgIG5ldGluZXQvc2N0cF9jb25zdGFudHMuaAotICAgIG5ldGlu
ZXQvc2N0cF9jcmMzMi5oCi0gICAgbmV0aW5ldC9zY3RwX2hlYWRlci5oCi0gICAgbmV0aW5ldC9z
Y3RwX2luZGF0YS5oCi0gICAgbmV0aW5ldC9zY3RwX2lucHV0LmgKLSAgICBuZXRpbmV0L3NjdHBf
bG9ja191c2Vyc3BhY2UuaAotICAgIG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaAotICAgIG5l
dGluZXQvc2N0cF9vcy5oCi0gICAgbmV0aW5ldC9zY3RwX291dHB1dC5oCi0gICAgbmV0aW5ldC9z
Y3RwX3BjYi5oCi0gICAgbmV0aW5ldC9zY3RwX3BlZWxvZmYuaAotICAgIG5ldGluZXQvc2N0cF9w
cm9jZXNzX2xvY2suaAotICAgIG5ldGluZXQvc2N0cF9zaGExLmgKLSAgICBuZXRpbmV0L3NjdHBf
c3RydWN0cy5oCi0gICAgbmV0aW5ldC9zY3RwX3N5c2N0bC5oCi0gICAgbmV0aW5ldC9zY3RwX3Rp
bWVyLmgKLSAgICBuZXRpbmV0L3NjdHBfdWlvLmgKLSAgICBuZXRpbmV0L3NjdHBfdmFyLmgKLSAg
ICBuZXRpbmV0L3NjdHB1dGlsLmgKLSAgICBuZXRpbmV0L3NjdHAuaAotKQotCi1saXN0KEFQUEVO
RCB1c3JzY3RwX25ldGluZXQ2X0hFQURFUlMKLSAgICBuZXRpbmV0Ni9zY3RwNl92YXIuaAotKQot
Ci1saXN0KEFQUEVORCB1c3JzY3RwX0hFQURFUlMKLSAgICAke3VzcnNjdHBfcm9vdF9IRUFERVJT
fQotICAgICR7dXNyc2N0cF9uZXRpbmV0X0hFQURFUlN9Ci0gICAgJHt1c3JzY3RwX25ldGluZXQ2
X0hFQURFUlN9Ci0pCi0KLWxpc3QoQVBQRU5EIHVzcnNjdHBfU09VUkNFUwotICAgIG5ldGluZXQv
c2N0cF9hc2NvbmYuYwotICAgIG5ldGluZXQvc2N0cF9hdXRoLmMKLSAgICBuZXRpbmV0L3NjdHBf
YnNkX2FkZHIuYwotICAgIG5ldGluZXQvc2N0cF9jYWxsb3V0LmMKLSAgICBuZXRpbmV0L3NjdHBf
Y2NfZnVuY3Rpb25zLmMKLSAgICBuZXRpbmV0L3NjdHBfY3JjMzIuYwotICAgIG5ldGluZXQvc2N0
cF9pbmRhdGEuYwotICAgIG5ldGluZXQvc2N0cF9pbnB1dC5jCi0gICAgbmV0aW5ldC9zY3RwX291
dHB1dC5jCi0gICAgbmV0aW5ldC9zY3RwX3BjYi5jCi0gICAgbmV0aW5ldC9zY3RwX3BlZWxvZmYu
YwotICAgIG5ldGluZXQvc2N0cF9zaGExLmMKLSAgICBuZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25z
LmMKLSAgICBuZXRpbmV0L3NjdHBfc3lzY3RsLmMKLSAgICBuZXRpbmV0L3NjdHBfdGltZXIuYwot
ICAgIG5ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwotICAgIG5ldGluZXQvc2N0cF91c3JyZXEuYwot
ICAgIG5ldGluZXQvc2N0cHV0aWwuYwotICAgIG5ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCi0gICAg
dXNlcl9lbnZpcm9ubWVudC5jCi0gICAgdXNlcl9tYnVmLmMKLSAgICB1c2VyX3JlY3ZfdGhyZWFk
LmMKLSAgICB1c2VyX3NvY2tldC5jCi0pCi0KLWFkZF9saWJyYXJ5KHVzcnNjdHAgU0hBUkVEICR7
dXNyc2N0cF9TT1VSQ0VTfSAke3VzcnNjdHBfSEVBREVSU30pCi1hZGRfbGlicmFyeSh1c3JzY3Rw
LXN0YXRpYyBTVEFUSUMgJHt1c3JzY3RwX1NPVVJDRVN9ICR7dXNyc2N0cF9IRUFERVJTfSkKLQot
aWYgKFdJTjMyKQotICAgIG1lc3NhZ2UoU1RBVFVTICJsaW5rIGxpYnJhcnk6IHdzMl8zMiIpCi0g
ICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHVzcnNjdHAgd3MyXzMyKQotICAgIHRhcmdldF9saW5r
X2xpYnJhcmllcyh1c3JzY3RwLXN0YXRpYyB3czJfMzIpCi1lbmRpZiAoKQotCi1zZXRfdGFyZ2V0
X3Byb3BlcnRpZXModXNyc2N0cC1zdGF0aWMgUFJPUEVSVElFUyBPVVRQVVRfTkFNRSAidXNyc2N0
cCIpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXModXNyc2N0cCBQUk9QRVJUSUVTIElNUE9SVF9TVUZG
SVggIl9pbXBvcnQubGliIikKLXNldF90YXJnZXRfcHJvcGVydGllcyh1c3JzY3RwIFBST1BFUlRJ
RVMgU09WRVJTSU9OIDEgVkVSU0lPTiAxLjAuMCkKLQotaWYgKE5PVCBERUZJTkVEIENNQUtFX0lO
U1RBTExfTElCRElSKQotICAgIFNFVChDTUFLRV9JTlNUQUxMX0xJQkRJUiBsaWIpCisjIFNFVFRJ
TkdTIEZPUiBVTklYIENPTVBJTEVSCitpZiAoIiR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIE1BVENI
RVMgIkNsYW5nIiBPUiAiJHtDTUFLRV9DX0NPTVBJTEVSX0lEfSIgTUFUQ0hFUyAiQXBwbGVDbGFu
ZyIgT1IgIiR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIE1BVENIRVMgIkdOVSIpCisJc2V0KENNQUtF
X0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1zdGQ9Yzk5IC1wZWRhbnRpYyAtV2FsbCAt
V2V4dHJhIikKKwlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLXN0ZD1j
OTkgLXBlZGFudGljIC1XYWxsIC1XZXh0cmEiKQorCisJY2hlY2tfY19jb21waWxlcl9mbGFnKC1X
ZmxvYXQtZXF1YWwgaGFzX3dmbG9hdF9lcXVhbCkKKwlpZiAoaGFzX3dmbG9hdF9lcXVhbCkKKwkJ
c2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1XZmxvYXQtZXF1YWwiKQor
CQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLVdmbG9hdC1lcXVhbCIp
CisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV3NoYWRvdyBoYXNfd3NoYWRv
dykKKwlpZiAoaGFzX3dzaGFkb3cpCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19G
TEFHU30gICAtV3NoYWRvdyIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZM
QUdTfSAtV3NoYWRvdyIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV3Bv
aW50ZXItYXJpdGggaGFzX3dwb2ludGVyX2FyaXRpaCkKKwlpZiAoaGFzX3dwb2ludGVyX2FyaXRp
aCkKKwkJc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1XcG9pbnRlci1h
cml0aCIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV3BvaW50
ZXItYXJpdGgiKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVd1bnJlYWNo
YWJsZS1jb2RlIGhhc193dW5yZWFjaGFibGVfY29kZSkKKwlpZiAoaGFzX3d1bnJlYWNoYWJsZV9j
b2RlKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLVd1bnJlYWNo
YWJsZS1jb2RlIikKKwkJc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1X
dW5yZWFjaGFibGUtY29kZSIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygt
V2luaXQtc2VsZiBoYXNfd2luaXRfc2VsZikKKwlpZiAoaGFzX3dpbml0X3NlbGYpCisJCXNldChD
TUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtV2luaXQtc2VsZiIpCisJCXNldChD
TUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV2luaXQtc2VsZiIpCisJZW5kaWYg
KCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV25vLXVudXNlZC1mdW5jdGlvbiBoYXNfd25v
X3VudXNlZF9mdW5jdGlvbikKKwlpZiAoaGFzX3dub191bnVzZWRfZnVuY3Rpb24pCisJCXNldChD
TUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtV25vLXVudXNlZC1mdW5jdGlvbiIp
CisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLXVudXNlZC1m
dW5jdGlvbiIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV25vLXVudXNl
ZC1wYXJhbWV0ZXIgaGFzX3dub191bnVzZWRfcGFyYW1ldGVyKQorCWlmIChoYXNfd25vX3VudXNl
ZF9wYXJhbWV0ZXIpCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAt
V25vLXVudXNlZC1wYXJhbWV0ZXIiKQorCQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NY
WF9GTEFHU30gLVduby11bnVzZWQtcGFyYW1ldGVyIikKKwllbmRpZiAoKQorCisJY2hlY2tfY19j
b21waWxlcl9mbGFnKC1Xbm8tdW5yZWFjaGFibGUtY29kZSBoYXNfd25vX3VucmVhY2hhYmxlX2Nv
ZGUpCisJaWYgKGhhc193bm9fdW5yZWFjaGFibGVfY29kZSkKKwkJc2V0KENNQUtFX0NfRkxBR1Mg
ICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1Xbm8tdW5yZWFjaGFibGUtY29kZSIpCisJCXNldChDTUFL
RV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLXVucmVhY2hhYmxlLWNvZGUiKQor
CWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVdzdHJpY3QtcHJvdG90eXBlcyBo
YXNfd3N0cmljdF9wcm90b3R5cGVzKQorCWlmIChoYXNfd3N0cmljdF9wcm90b3R5cGVzKQorCQlz
ZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLVdzdHJpY3QtcHJvdG90eXBl
cyIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV3N0cmljdC1w
cm90b3R5cGVzIikKKwllbmRpZiAoKQorCisJaWYgKHNjdHBfd2Vycm9yKQorCQlzZXQoQ01BS0Vf
Q19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLVdlcnJvciIpCisJCXNldChDTUFLRV9DWFhf
RkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV2Vycm9yIikKKwllbmRpZiAoKQorCisJaWYgKHNj
dHBfc2FuaXRpemVyX2FkZHJlc3MpCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19G
TEFHU30gICAtZnNhbml0aXplPWFkZHJlc3MgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWciKQor
CQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLWZzYW5pdGl6ZT1hZGRy
ZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1nIikKKwllbmRpZiAoKQorCisJaWYgKHNjdHBf
c2FuaXRpemVyX21lbW9yeSkKKwkJc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdT
fSAgIC1mc2FuaXRpemU9bWVtb3J5IC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1nIC1mc2FuaXRp
emUtbWVtb3J5LXRyYWNrLW9yaWdpbnMiKQorCQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtF
X0NYWF9GTEFHU30gLWZzYW5pdGl6ZT1tZW1vcnkgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcg
LWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucyIpCisJZW5kaWYgKCkKK2VuZGlmICgpCisK
KyMgU0VUVElOR1MgRk9SIFZJU1VBTCBTVFVESU8gQ09NUElMRVIKK2lmICgieCR7Q01BS0VfQ19D
T01QSUxFUl9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCisJaWYgKENNQUtFX0NfRkxBR1MgTUFUQ0hF
UyAiL1dbMC00XSIpCisJCXN0cmluZyhSRUdFWCBSRVBMQUNFICIvV1swLTRdIiAiL1czIiBDTUFL
RV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IikKKwllbHNlICgpCisJCXNldChDTUFLRV9DX0ZM
QUdTICIke0NNQUtFX0NfRkxBR1N9IC9XMyIpCisJZW5kaWYgKCkKKworCWlmIChXRVJST1IpCisJ
CXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XWCIpCisJZW5kaWYgKCkKIGVu
ZGlmICgpCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIwotIyBJTlNUQUxMIExJQlJBUlkgQU5EIEhFQURFUgorIyBJTkNMVURFIFNVQkRJUlMKICMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotaW5zdGFs
bChUQVJHRVRTIHVzcnNjdHAgdXNyc2N0cC1zdGF0aWMgREVTVElOQVRJT04gJHtDTUFLRV9JTlNU
QUxMX0xJQkRJUn0pCi1pbnN0YWxsKEZJTEVTIHVzcnNjdHAuaCBERVNUSU5BVElPTiBpbmNsdWRl
KQorYWRkX3N1YmRpcmVjdG9yeSh1c3JzY3RwbGliKQorCitpZiAoc2N0cF9idWlsZF9wcm9ncmFt
cykKKwlhZGRfc3ViZGlyZWN0b3J5KHByb2dyYW1zKQorZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL0xJQ0VOU0UubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9MSUNFTlNFLm1kCmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmEyZDFmOTg5Y2ZmYTllNmU2NzJjMGEzOGVj
Zjg5Yzc2MmM0NzUzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL0xJQ0VOU0UubWQKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvTElDRU5TRS5tZApAQCAtMCwwICsxLDI3IEBACitDb3B5cmlnaHQgKGMpIDIwMTUsICBS
YW5kYWxsIFN0ZXdhcnQgYW5kIE1pY2hhZWwgVHVleGVuCitBbGwgcmlnaHRzIHJlc2VydmVkLgor
CitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcwor
ICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyogTmVpdGhlciB0aGUgbmFt
ZSBvZiB1c3JzY3RwIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
CitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYWtlZmlsZS5hbSBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL01ha2VmaWxlLmFtCmluZGV4IDg1MjQwYjdjZWE4ZjY2YjA5YjM1ZWQwN2I3ZDJm
NmZlY2U5YzUxNzEuLmU5ZTE3ZTIyYzRmNzhkZmJiNTYyY2U1NjRkOWE1YWE1Zjc3ZTAyNmIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxlLmFt
CkBAIC0yOCw1NCArMjgsNyBAQAogIyBTVUNIIERBTUFHRS4KICMKIAotQVVUT01BS0VfT1BUSU9O
UyAgICAgICA9IHN1YmRpci1vYmplY3RzCi1FWFRSQV9ESVNUICAgICAgICAgICAgID0gTWFrZWZp
bGUubm1ha2UKLWxpYl9MVExJQlJBUklFUyAgICAgICAgPSBsaWJ1c3JzY3RwLmxhCi1saWJ1c3Jz
Y3RwX2xhX1NPVVJDRVMgID0gdXNlcl9hdG9taWMuaCBcCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlcl9lbnZpcm9ubWVudC5jIHVzZXJfZW52aXJvbm1lbnQuaCBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlcl9pbnBjYi5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vy
X2lwX2ljbXAuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pcDZfdmFyLmggXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWFsbG9jLmggXAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJfbWJ1Zi5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21i
dWYuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9xdWV1ZS5oIFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICB1c2VyX3JlY3ZfdGhyZWFkLmMgdXNlcl9yZWN2X3RocmVhZC5oIFwK
LSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3JvdXRlLmggXAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJfc29ja2V0LmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJf
c29ja2V0dmFyLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfdW1hLmggXAotICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cC5oIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXRpbmV0L3NjdHBfYXNjb25mLmMgbmV0aW5ldC9zY3RwX2FzY29uZi5oIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfYXV0aC5jIG5ldGluZXQvc2N0cF9h
dXRoLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9ic2RfYWRkci5j
IG5ldGluZXQvc2N0cF9ic2RfYWRkci5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRp
bmV0L3NjdHBfY2FsbG91dC5jIG5ldGluZXQvc2N0cF9jYWxsb3V0LmggXAotICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyBcCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXRpbmV0L3NjdHBfY3JjMzIuYyBuZXRpbmV0L3NjdHBfY3JjMzIuaCBcCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2hlYWRlci5oIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfaW5kYXRhLmMgbmV0aW5ldC9zY3RwX2luZGF0YS5o
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfaW5wdXQuYyBuZXRpbmV0
L3NjdHBfaW5wdXQuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2xv
Y2tfdXNlcnNwYWNlLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9v
cy5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
LmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9vdXRwdXQuYyBuZXRp
bmV0L3NjdHBfb3V0cHV0LmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0
cF9wY2IuYyBuZXRpbmV0L3NjdHBfcGNiLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5l
dGluZXQvc2N0cF9wZWVsb2ZmLmMgbmV0aW5ldC9zY3RwX3BlZWxvZmYuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5oIFwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfc2hhMS5jIG5ldGluZXQvc2N0cF9zaGExLmggXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3N0cnVjdHMuaCBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3N5c2N0bC5jIG5ldGluZXQvc2N0cF9zeXNj
dGwuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3VzZXJzcGFjZS5j
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfdGltZXIuYyBuZXRpbmV0
L3NjdHBfdGltZXIuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3Vp
by5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfdXNycmVxLmMgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF92YXIuaCBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwdXRpbC5jIG5ldGluZXQvc2N0cHV0aWwuaCBcCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvc2N0cDZfdmFyLmggXAotICAgICAgICAg
ICAgICAgICAgICAgICAgIG5ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCi1saWJ1c3JzY3RwX2xhX0NG
TEFHUyA9ICQoTElCQ0ZMQUdTKQotbGlidXNyc2N0cF9sYV9MREZMQUdTID0gLXZlcnNpb24taW5m
byAxOjA6MAotaW5jbHVkZV9IRUFERVJTID0gdXNyc2N0cC5oCi0KK1NVQkRJUlMgPSB1c3JzY3Rw
bGliIHByb2dyYW1zCitFWFRSQV9ESVNUID0gYm9vdHN0cmFwIE1ha2VmaWxlLm5tYWtlCitBQ0xP
Q0FMX0FNRkxBR1MgPSAtSSBtNAorIyBwa2djb25maWdfREFUQSA9IHVzcnNjdHAucGMKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UK
aW5kZXggNDhkMmJkMTEwYzdlNWJjZjhiOWQ0YzliOGUzMDc5YWU1YmNmZmQ1MC4uNmY5ZDcwMTQ3
ODQ5OGVkMmZiNDFjMjllZDUyMTIwZjczODI0YzE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFr
ZWZpbGUubm1ha2UKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UKQEAgLTI4LDE1MiArMjgs
MTggQEAKICMgU1VDSCBEQU1BR0UuDQogIw0KIA0KLUNGTEFHUz0vSS4gL1czIC9XWA0KLQ0KLUNW
QVJTRExMPS1EU0NUUF9ERUJVRyAtRFNDVFBfU0lNUExFX0FMTE9DQVRPUiAtRFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUw0KLUNWQVJTRExMPSQoQ1ZBUlNETEwpIC1EX19Vc2Vyc3BhY2VfXyAtRF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MNCi1DVkFSU0RMTD0kKENWQVJTRExMKSAtRElORVQgLURJTkVU
Ng0KLUNWQVJTRExMPSQoQ1ZBUlNETEwpIC1EX0xJQg0KLQ0KLUxJTktGTEFHUz0vTElCUEFUSDou
IFdzMl8zMi5saWINCi0NCi11c3JzY3RwX09CSkVDVFMgPSBcDQotCXVzZXJfZW52aXJvbm1lbnQu
b2JqIFwNCi0JdXNlcl9tYnVmLm9iaiBcDQotCXVzZXJfcmVjdl90aHJlYWQub2JqIFwNCi0JdXNl
cl9zb2NrZXQub2JqIFwNCi0Jc2N0cF9hc2NvbmYub2JqIFwNCi0Jc2N0cF9hdXRoLm9iaiBcDQot
CXNjdHBfYnNkX2FkZHIub2JqIFwNCi0Jc2N0cF9jYWxsb3V0Lm9iaiBcDQotCXNjdHBfY2NfZnVu
Y3Rpb25zLm9iaiBcDQotCXNjdHBfY3JjMzIub2JqIFwNCi0Jc2N0cF9pbmRhdGEub2JqIFwNCi0J
c2N0cF9pbnB1dC5vYmogXA0KLQlzY3RwX291dHB1dC5vYmogXA0KLQlzY3RwX3BjYi5vYmogXA0K
LQlzY3RwX3BlZWxvZmYub2JqIFwNCi0Jc2N0cF9zaGExLm9iaiBcDQotCXNjdHBfc3NfZnVuY3Rp
b25zLm9iaiBcDQotCXNjdHBfc3lzY3RsLm9iaiBcDQotCXNjdHBfdGltZXIub2JqIFwNCi0Jc2N0
cF91c2Vyc3BhY2Uub2JqICBcDQotCXNjdHBfdXNycmVxLm9iaiBcDQotCXNjdHB1dGlsLm9iaiBc
DQotCXNjdHA2X3VzcnJlcS5vYmoNCi0NCi11c3JzY3RwX0hFQURFUlMgPSBcDQotCXVzZXJfYXRv
bWljLmggXA0KLQl1c2VyX2Vudmlyb25tZW50LmggXA0KLQl1c2VyX2lucGNiLmggXA0KLQl1c2Vy
X2lwNl92YXIuaCBcDQotCXVzZXJfbWFsbG9jLmggXA0KLQl1c2VyX21idWYuaCBcDQotCXVzZXJf
cmVjdl90aHJlYWQuaCBcDQotCXVzZXJfcm91dGUuaCBcDQotCXVzZXJfc29ja2V0dmFyLmggXA0K
LQl1c2VyX3VtYS5oIFwNCi0JdXNlcl9xdWV1ZS5oIFwNCi0JdXNlcl9pcF9pY21wLmggXA0KLQl1
c2VyX2lwNl92YXIuaCBcDQotCW5ldGluZXRcc2N0cC5oIFwNCi0JbmV0aW5ldFxzY3RwX2FzY29u
Zi5oIFwNCi0JbmV0aW5ldFxzY3RwX2F1dGguaCBcDQotCW5ldGluZXRcc2N0cF9ic2RfYWRkci5o
IFwNCi0JbmV0aW5ldFxzY3RwX2NhbGxvdXQuaCBcDQotCW5ldGluZXRcc2N0cF9jb25zdGFudHMu
aCBcDQotCW5ldGluZXRcc2N0cF9jcmMzMi5oIFwNCi0JbmV0aW5ldFxzY3RwX2hlYWRlci5oIFwN
Ci0JbmV0aW5ldFxzY3RwX2luZGF0YS5oIFwNCi0JbmV0aW5ldFxzY3RwX2lucHV0LmggXA0KLQlu
ZXRpbmV0XHNjdHBfbG9ja191c2Vyc3BhY2UuaCBcDQotCW5ldGluZXRcc2N0cF9vcy5oIFwNCi0J
bmV0aW5ldFxzY3RwX29zX3VzZXJzcGFjZS5oIFwNCi0JbmV0aW5ldFxzY3RwX291dHB1dC5oIFwN
Ci0JbmV0aW5ldFxzY3RwX3BjYi5oIFwNCi0JbmV0aW5ldFxzY3RwX3BlZWxvZmYuaCBcDQotCW5l
dGluZXRcc2N0cF9wcm9jZXNzX2xvY2suaCBcDQotCW5ldGluZXRcc2N0cF9zaGExLmggXA0KLQlu
ZXRpbmV0XHNjdHBfc3RydWN0cy5oIFwNCi0JbmV0aW5ldFxzY3RwX3N5c2N0bC5oIFwNCi0JbmV0
aW5ldFxzY3RwX3RpbWVyLmggXA0KLQluZXRpbmV0XHNjdHBfdWlvLmggXA0KLQluZXRpbmV0XHNj
dHBfdmFyLmggXA0KLQluZXRpbmV0XHNjdHB1dGlsLmggXA0KLQluZXRpbmV0NlxzY3RwNl92YXIu
aA0KLQ0KLXVzcnNjdHAubGliIDogJCh1c3JzY3RwX09CSkVDVFMpDQotCWxpYiAvb3V0OnVzcnNj
dHAubGliICQoTElOS0ZMQUdTKSAkKHVzcnNjdHBfT0JKRUNUUykNCi0NCi11c2VyX2Vudmlyb25t
ZW50Lm9iaiA6IHVzZXJfZW52aXJvbm1lbnQuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChD
VkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfZW52aXJvbm1lbnQuYw0KLQ0KLXVzZXJfbWJ1Zi5v
YmogIDogdXNlcl9tYnVmLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQo
Q0ZMQUdTKSAtYyB1c2VyX21idWYuYw0KLQ0KLXVzZXJfcmVjdl90aHJlYWQub2JqOiB1c2VyX3Jl
Y3ZfdGhyZWFkLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdT
KSAtYyB1c2VyX3JlY3ZfdGhyZWFkLmMNCi0NCi11c2VyX3NvY2tldC5vYmogOiB1c2VyX3NvY2tl
dC5jICQodXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgdXNl
cl9zb2NrZXQuYw0KLQ0KLXNjdHBfYXNjb25mLm9iaiA6IG5ldGluZXRcc2N0cF9hc2NvbmYuYyAk
KHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRc
c2N0cF9hc2NvbmYuYw0KLQ0KLXNjdHBfYXV0aC5vYmogOiBuZXRpbmV0XHNjdHBfYXV0aC5jICQo
dXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxz
Y3RwX2F1dGguYw0KLQ0KLXNjdHBfYnNkX2FkZHIub2JqIDogbmV0aW5ldFxzY3RwX2JzZF9hZGRy
LmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRp
bmV0XHNjdHBfYnNkX2FkZHIuYw0KLQ0KLXNjdHBfY2FsbG91dC5vYmogOiBuZXRpbmV0XHNjdHBf
Y2FsbG91dC5jICQodXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFHUykg
LWMgbmV0aW5ldFxzY3RwX2NhbGxvdXQuYw0KLQ0KLXNjdHBfY2NfZnVuY3Rpb25zLm9iaiA6IG5l
dGluZXRcc2N0cF9jY19mdW5jdGlvbnMuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFS
U0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9jY19mdW5jdGlvbnMuYw0KLQ0KLXNjdHBf
Y3JjMzIub2JqIDogbmV0aW5ldFxzY3RwX2NyYzMyLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNs
ICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfY3JjMzIuYw0KLQ0KLXNjdHBf
aW5kYXRhLm9iaiA6IG5ldGluZXRcc2N0cF9pbmRhdGEuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0J
Y2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9pbmRhdGEuYw0KLQ0KLXNj
dHBfaW5wdXQub2JqIDogbmV0aW5ldFxzY3RwX2lucHV0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQot
CWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfaW5wdXQuYw0KLQ0KLXNj
dHBfb3V0cHV0Lm9iaiA6IG5ldGluZXRcc2N0cF9vdXRwdXQuYyAkKHVzcnNjdHBfSEVBREVSUykN
Ci0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9vdXRwdXQuYw0KLQ0K
LXNjdHBfcGNiLm9iaiA6IG5ldGluZXRcc2N0cF9wY2IuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0J
Y2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9wY2IuYw0KLQ0KLXNjdHBf
cGVlbG9mZi5vYmogOiBuZXRpbmV0XHNjdHBfcGVlbG9mZi5jICQodXNyc2N0cF9IRUFERVJTKQ0K
LQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3BlZWxvZmYuYw0KLQ0K
LXNjdHBfc2hhMS5vYmogOiBuZXRpbmV0XHNjdHBfc2hhMS5jICQodXNyc2N0cF9IRUFERVJTKQ0K
LQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3NoYTEuYw0KLQ0KLXNj
dHBfc3NfZnVuY3Rpb25zLm9iaiA6IG5ldGluZXRcc2N0cF9zc19mdW5jdGlvbnMuYyAkKHVzcnNj
dHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9z
c19mdW5jdGlvbnMuYw0KLQ0KLXNjdHBfc3lzY3RsLm9iaiA6IG5ldGluZXRcc2N0cF9zeXNjdGwu
YyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGlu
ZXRcc2N0cF9zeXNjdGwuYw0KLQ0KLXNjdHBfdGltZXIub2JqIDogbmV0aW5ldFxzY3RwX3RpbWVy
LmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRp
bmV0XHNjdHBfdGltZXIuYw0KLQ0KLXNjdHBfdXNlcnNwYWNlLm9iaiA6IG5ldGluZXRcc2N0cF91
c2Vyc3BhY2UuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1Mp
IC1jIG5ldGluZXRcc2N0cF91c2Vyc3BhY2UuYw0KLQ0KLXNjdHBfdXNycmVxLm9iaiA6IG5ldGlu
ZXRcc2N0cF91c3JyZXEuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChD
RkxBR1MpIC1jIG5ldGluZXRcc2N0cF91c3JyZXEuYw0KLQ0KLXNjdHB1dGlsLm9iaiA6IG5ldGlu
ZXRcc2N0cHV0aWwuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxB
R1MpIC1jIG5ldGluZXRcc2N0cHV0aWwuYw0KLQ0KLXNjdHA2X3VzcnJlcS5vYmogOiBuZXRpbmV0
NlxzY3RwNl91c3JyZXEuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChD
RkxBR1MpIC1jIG5ldGluZXQ2XHNjdHA2X3VzcnJlcS5jDQorYWxsOg0KKwljZCB1c3JzY3RwbGli
DQorCW5tYWtlIC1mIE1ha2VmaWxlLm5tYWtlDQorCWNkIC4uDQorCWNkIHByb2dyYW1zDQorCW5t
YWtlIGFsbCAtZiBNYWtlZmlsZS5ubWFrZQ0KKwljZCAuLg0KIA0KIGNsZWFuOg0KLQlkZWwgKi5v
YmoNCi0JZGVsIHVzcnNjdHAubGliDQorCWNkIHVzcnNjdHBsaWINCisJbm1ha2UgY2xlYW4gLWYg
TWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCisJY2QgcHJvZ3JhbXMNCisJbm1ha2UgY2xlYW4gLWYg
TWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwubWQg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9NYW51YWwubWQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4
YzJlNDhjNTM5MS4uNzA1NzM2ODg0NGRlZTMyNDBhMDNhNzI1YjA5OWRkODBhNmQyMWY1OSAxMDA2
NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvTWFudWFsLm1kCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC5tZApAQCAt
MCwwICsxLDc4NSBAQAorIyBTQ1RQIHVzZXItbGFuZCBpbXBsZW1lbnRhdGlvbiAodXNyc2N0cCkK
KworU0NUUCBpcyBhIG1lc3NhZ2Ugb3JpZW50ZWQsIHJlbGlhYmxlIHRyYW5zcG9ydCBwcm90b2Nv
bCB3aXRoIGRpcmVjdCBzdXBwb3J0IGZvciBtdWx0aWhvbWluZyB0aGF0IHJ1bnMgb24gdG9wIG9m
IElQIG9yIFVEUCwgYW5kIHN1cHBvcnRzIGJvdGggdjQgYW5kIHY2IHZlcnNpb25zLgorCitMaWtl
IFRDUCwgU0NUUCBwcm92aWRlcyByZWxpYWJsZSwgY29ubmVjdGlvbiBvcmllbnRlZCBkYXRhIGRl
bGl2ZXJ5IHdpdGggY29uZ2VzdGlvbiBjb250cm9sLiBVbmxpa2UgVENQLCBTQ1RQIGFsc28gcHJv
dmlkZXMgbWVzc2FnZSBib3VuZGFyeSBwcmVzZXJ2YXRpb24sIG9yZGVyZWQgYW5kIHVub3JkZXJl
ZCBtZXNzYWdlIGRlbGl2ZXJ5LCBtdWx0aS1zdHJlYW1pbmcgYW5kIG11bHRpLWhvbWluZy4gRGV0
ZWN0aW9uIG9mIGRhdGEgY29ycnVwdGlvbiwgbG9zcyBvZiBkYXRhIGFuZCBkdXBsaWNhdGlvbiBv
ZiBkYXRhIGlzIGFjaGlldmVkIGJ5IHVzaW5nIGNoZWNrc3VtcyBhbmQgc2VxdWVuY2UgbnVtYmVy
cy4gQSBzZWxlY3RpdmUgcmV0cmFuc21pc3Npb24gbWVjaGFuaXNtIGlzIGFwcGxpZWQgdG8gY29y
cmVjdCBsb3NzIG9yIGNvcnJ1cHRpb24gb2YgZGF0YS4KKworSW4gdGhpcyBtYW51YWwgdGhlIHNv
Y2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRl
c2NyaWJlZC4gIEl0IGlzIGJhc2VkIG9uIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNjQ1OCkuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgZG9jdW1lbnQgaXMgb24gcG9p
bnRpbmcgb3V0IHRoZSBkaWZmZXJlbmNlcyB0byB0aGUgU0NUUCBTb2NrZXRzIEFQSS4gRm9yIGFs
bCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQSSB0aGF0IGFyZSBub3QgbWVudGlvbmVkIGluIHRo
aXMgZG9jdW1lbnQsIHBsZWFzZSByZWZlciB0byBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRm
Lm9yZy9odG1sL3JmYzY0NTgpLiBRdWVzdGlvbnMgYWJvdXQgU0NUUCBpdHNlbGYgY2FuIGhvcGVm
dWxseSBiZSBhbnN3ZXJlZCBieSBbUkZDIDQ5NjBdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1s
L3JmYzQ5NjApLgorCisjIyBHZXR0aW5nIFN0YXJ0ZWQKK1RoZSB1c2VyLWxhbmQgc3RhY2sgaGFz
IGJlZW4gdGVzdGVkIG9uIEZyZWVCU0QgMTAuMCwgVWJ1bnR1IDExLjEwLCBXaW5kb3dzIDcsIE1h
YyBPUyBYIDEwLjYsIGFuZCBNYWMgT1MgWCAxMC43LiBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIHRo
ZSB1c2VyLWxhbmQgc3RhY2sgaXMgcHJvdmlkZWQgb24gW2dpdGh1Yl0oaHR0cHM6Ly9naXRodWIu
Y29tL3NjdHBsYWIvdXNyc2N0cCkuIERvd25sb2FkIHRoZSB0YXJiYWxsIGFuZCB1bnRhciBpdCBp
biBhIGZvbGRlciBvZiB5b3VyIGNob2ljZS4gVGhlIHRhcmJhbGwgY29udGFpbnMgYWxsIHRoZSBz
b3VyY2VzIHRvIGJ1aWxkIHRoZSBsaWJ1c3JzY3RwLCB3aGljaCBoYXMgdG8gYmUgbGlua2VkIHRv
IHRoZSBvYmplY3QgZmlsZSBvZiBhbiBleGFtcGxlIHByb2dyYW0uIEluIGFkZGl0aW9uIHRoZXJl
IGFyZSB0d28gYXBwbGljYXRpb25zIGluIHRoZSBmb2xkZXIgYHByb2dyYW1zYCB0aGF0IGNhbiBi
ZSBidWlsdCBhbmQgcnVuLgorCisjIyMgQnVpbGRpbmcgdGhlIExpYnJhcnkgYW5kIHRoZSBBcHBs
aWNhdGlvbnMKKyMjIyMgVW5peC1saWtlIE9wZXJhdGluZyBTeXN0ZW1zCitJbiB0aGUgZm9sZGVy
IGB1c3JzY3RwYCB0eXBlCisKKyAgICAkIC4vYm9vdHN0cmFwCisgICAgJCAuL2NvbmZpZ3VyZQor
ICAgICQgbWFrZQorCitOb3csIHRoZSBsaWJyYXJ5IGBsaWJ1c3JzY3RwLmxhYCBoYXMgYmVlbiBi
dWlsdCBpbiB0aGUgc3ViZGlyZWN0b3J5IGB1c3JzY3RwbGliYCwgYW5kIHRoZSBleGFtcGxlIHBy
b2dyYW1zIGFyZSByZWFkeSB0byBydW4gZnJvbSB0aGUgc3ViZGlyZWN0b3J5IGBwcm9ncmFtc2Au
CisKK0lmIHlvdSBoYXZlIHJvb3QgcHJpdmlsZWdlcyBvciBhcmUgaW4gdGhlIHN1ZG9lciBncm91
cCwgeW91IGNhbiBpbnN0YWxsIHRoZSBsaWJyYXJ5IGluIGAvdXNyL2xvY2FsL2xpYmAgYW5kIGNv
cHkgdGhlIGhlYWRlciBmaWxlIHRvIGAvdXNyL2luY2x1ZGVgIHdpdGggdGhlIGNvbW1hbmQKKwor
ICAgICQgc3VkbyBtYWtlIGluc3RhbGwKKworIyMjIyBXaW5kb3dzCitPbiBXaW5kb3dzIHlvdSBu
ZWVkIGEgY29tcGlsZXIgbGlrZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4gWW91IGNhbiBidWls
ZCB0aGUgbGlicmFyeSBhbmQgdGhlIGV4YW1wbGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29tbWFuZCBs
aW5lIHRvb2wgb2YgdGhlIGNvbXBpbGVyIGJ5IHR5cGluZworCisgICAgJCBubWFrZSAtZiBNYWtl
ZmlsZS5ubWFrZQorCitpbiB0aGUgZGlyZWN0b3J5IGB1c3JzY3RwYC4KKworIyMjIyBDTWFrZQor
Q3JlYXRlIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIGB1c3JzY3RwYCBkaXJlY3RvcnksIGVudGVy
IGl0IGFuZCBnZW5lcmF0ZSBmaWxlcyBieSB0eXBpbmcKKworICAgICQgY21ha2UgPHBhdGgtdG8t
dXNyc2N0cC1zb3VyY2VzPgorICAgICQgY21ha2UgLS1idWlsZCAuCisKK0J5IGRlZmF1bHQgQ01h
a2UgZ2VuZXJhdGVzIGEgREVCVUcgYnVpbGQgd2l0aCB2ZXJib3NlIG91dHB1dC4KKworIyMjIFJ1
bm5pbmcgdGhlIFRlc3QgUHJvZ3JhbXMKKworU2V2ZXJhbCB0ZXN0IHByb2dyYW1zIGFyZSBpbmNs
dWRlZCwgaW5jbHVkaW5nIGEgZGlzY2FyZCBzZXJ2ZXIgYW5kIGEgY2xpZW50LiBZb3UgY2FuIHJ1
biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRoZSBjbGllbnQgdG8gdGhlIHNlcnZlci4gVGhlIGNs
aWVudCByZWFkcyBkYXRhIGZyb20gc3RkaW4gYW5kIHNlbmRzIHRoZW0gdG8gdGhlIHNlcnZlciwg
d2hpY2ggcHJpbnRzIHRoZSBtZXNzYWdlIGluIHRoZSB0ZXJtaW5hbCBhbmQgZGlzY2FyZHMgaXQu
IFRoZSBzb3VyY2VzIG9mIHRoZSBzZXJ2ZXIgYXJlIGFsc28gcHJvdmlkZWQgW2hlcmVdKGh0dHBz
Oi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvYmxvYi9tYXN0ZXIvcHJvZ3JhbXMvZGlzY2Fy
ZF9zZXJ2ZXIuYykgYW5kIHRob3NlIG9mIHRoZSBjbGllbnQgW2hlcmVdKGh0dHBzOi8vZ2l0aHVi
LmNvbS9zY3RwbGFiL3VzcnNjdHAvYmxvYi9tYXN0ZXIvcHJvZ3JhbXMvY2xpZW50LmMpLgorCisj
IyMgVXNpbmcgVURQIEVuY2Fwc3VsYXRpb24KKworQm90aCBwcm9ncmFtcyBjYW4gZWl0aGVyIHNl
bmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgb3IgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCB0aHVz
IGVuY2Fwc3VsYXRpbmcgdGhlIFNDVFAgcGFja2V0IGluIGEgVURQIGRhdGFncmFtLiBUaGUgZmly
c3QgbW9kZSB3b3JrcyBvbiBsb29wYmFjayBvciBpbiBhIHByb3RlY3RlZCBzZXR1cCB3aXRob3V0
IGFueSBOQVQgYm94ZXMgaW52b2x2ZWQuIEluIGFsbCBvdGhlciBjYXNlcyBpdCBpcyBiZXR0ZXIg
dG8gdXNlIFVEUCBlbmNhcHN1bGF0aW9uLgorCitUaGUgdXNhZ2Ugb2YgdGhlIGBkaXNjYXJkX3Nl
cnZlcmAgaXMKKworICAgICQgZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0IHJlbW90
ZV9lbmNhcHNfcG9ydF0KKworRm9yIFVEUCBlbmNhcHN1bGF0aW9uIHRoZSBwb3J0cyBoYXZlIHRv
IGJlIHNwZWNpZmllZC4gVGhlIGxvY2FsIGFuZCByZW1vdGUgZW5jYXBzdWxhdGlvbiBwb3J0cyBj
YW4gYmUgYXJiaXRyYXJpbHkgc2V0LiBGb3IgZXhhbXBsZSwgeW91IGNhbiBjYWxsCisKKyAgICAk
IC4vZGlzY2FyZF9zZXJ2ZXIgMTExMTEgMjIyMjIKKworb24gYSBVbml4LWxpa2UgT1MgYW5kCisK
KyAgICAkIGRpc2NhcmRfc2VydmVyLmV4ZSAxMTExMSAyMjIyMgorCitvbiBXaW5kb3dzLgorCitU
aGUgY2xpZW50IG5lZWRzIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMsIHRoZSBzZXJ2ZXIncyBh
ZGRyZXNzIGFuZCBpdHMgcG9ydC4gSXRzIHVzYWdlIGlzCisKKyAgICAkIGNsaWVudCByZW1vdGVf
YWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5j
YXBzX3BvcnRdCisKK1RoZSByZW1vdGUgYWRkcmVzcyBpcyB0aGUgc2VydmVyJ3MgYWRkcmVzcy4g
SWYgY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIHN0YXJ0ZWQgb24gdGhlIHNhbWUgbWFjaGluZSwgdGhl
IGxvb3BiYWNrIGFkZHJlc3MgYDEyNy4wLjAuMWAgY2FuIGJlIHVzZWQgZm9yIFVuaXgtbGlrZSBP
U3MgYW5kIHRoZSBsb2NhbCBhZGRyZXNzIG9uIFdpbmRvd3MuIFRoZSBkaXNjYXJkIHBvcnQgaXMg
OSwgdGh1cyA5IGhhcyB0byBiZSB0YWtlbiBhcyByZW1vdGUgcG9ydC4gVGhlIGVuY2Fwc3VsYXRp
b24gcG9ydHMgaGF2ZSB0byBtYXRjaCB0aG9zZSBvZiB0aGUgc2VydmVyLCBpLmUuIHRoZSBzZXJ2
ZXIncyBgbG9jYWxfZW5jYXBzX3BvcnRgIGlzIHRoZSBjbGllbnQncyBgcmVtb3RlX2VuY2Fwc19w
b3J0YCBhbmQgdmljZSB2ZXJzYS4gVGh1cywgdGhlIGNsaWVudCBjYW4gYmUgc3RhcnRlZCB3aXRo
CisKKyAgICAkIC4vY2xpZW50IDEyNy4wLjAuMSA5IDAgMjIyMjIgMTExMTEKKworb24gYSBVbml4
LWxpa2UgT1MgYW5kCisKKyAgICAkIGNsaWVudC5leGUgMTkyLjE2OC4wLjEgOSAwIDIyMjIyIDEx
MTExCisKK29uIFdpbmRvd3MgcHJvdmlkZWQgeW91ciBsb2NhbCBJUCBhZGRyZXNzIGlzIDE5Mi4x
NjguMC4xLgorCisjIyMgU2VuZGluZyBvdmVyIFNDVFAKKworVG8gc2VuZCBkYXRhIG92ZXIgU0NU
UCBkaXJlY3RseSB5b3UgbWlnaHQgbmVlZCByb290IHByaXZpbGVnZXMgYmVjYXVzZSByYXcgc29j
a2V0cyBhcmUgdXNlZC4gVGh1cyBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdGhlIGVuY2Fwc3VsYXRp
b24gcG9ydHMgeW91IGhhdmUgdG8gc3RhcnQgdGhlIHByb2dyYW1zIHByZXBlbmRpbmcgYHN1ZG9g
IG9yIGluIGNhc2Ugb2YgV2luZG93cyBzdGFydCB0aGUgcHJvZ3JhbSBmcm9tIGFuIGFkbWluaXN0
cmF0b3IgY29uc29sZS4KKworIyMjIFVzaW5nIHRoZSBDYWxsYmFjayBBUEkKKworSW5zdGVhZCBv
ZiBhc2tpbmcgY29uc3RhbnRseSBmb3IgbmV3IGRhdGEsIGEgY2FsbGJhY2sgQVBJIGNhbiBiZSB1
c2VkIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IFNDVFAuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRv
IGJlIHJlZ2lzdGVyZWQgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBkYXRhIGlzIHJlYWR5
IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24uCisKK1RoZSBgZGlzY2FyZF9zZXJ2
ZXJgIGhhcyBhIGZsYWcgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3byBtb2RpLiBJZiAgYHVzZV9j
YmAgaXMgc2V0IHRvIDEsIHRoZSBjYWxsYmFjayBBUEkgd2lsbCBiZSB1c2VkLiBUbyBjaGFuZ2Ug
dGhlIHNldHRpbmcsIGp1c3Qgc2V0IHRoZSBmbGFnIGFuZCBjb21waWxlIHRoZSBwcm9ncmFtIGFn
YWluLgorCisKKyMjIEJhc2ljIE9wZXJhdGlvbnMKKworQWxsIHN5c3RlbSBjYWxscyBzdGFydCB3
aXRoIHRoZSBwcmVmaXggYHVzcnNjdHBfYCB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb20gdGhlIGtl
cm5lbCB2YXJpYW50cy4gU29tZSBvZiB0aGVtIGFyZSBjaGFuZ2VkIHRvIGFjY291bnQgZm9yIHRo
ZSBkaWZmZXJlbnQgZGVtYW5kcyBpbiB0aGUgdXNlcmxhbmQgZW52aXJvbm1lbnQuCisKKyMjIERp
ZmZlcmVuY2VzIHRvIFJGQyA2NDU4CisKKyMjIyB1c3JzY3RwX2luaXQoKQorCitFdmVyeSBhcHBs
aWNhdGlvbiBoYXMgdG8gc3RhcnQgd2l0aCBgdXNyc2N0cF9pbml0KClgLiBUaGlzIGZ1bmN0aW9u
IGNhbGxzIGBzY3RwX2luaXQoKWAgYW5kIHJlc2VydmVzIHRoZSBtZW1vcnkgbmVjZXNzYXJ5IHRv
IGFkbWluaXN0ZXIgdGhlIGRhdGEgdHJhbnNmZXIuIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMK
KworYGBgYwordm9pZCB1c3JzY3RwX2luaXQodWludDE2X3QgdWRwX3BvcnQpCitgYGAKKworQXMg
aXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzZW5kIGRhdGEgZGlyZWN0bHkgb3ZlciBTQ1RQ
IGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2FuIHByb2Nlc3MgU0NUUCBwYWNrZXRzLCB0aGUg
ZGF0YSBjYW4gYmUgc2VudCBvdmVyIFVEUC4gVG8gZW5jYXBzdWxhdGUgU0NUUCBpbnRvIFVEUCBh
IFVEUCBwb3J0IGhhcyB0byBiZSBzcGVjaWZpZWQsIHRvIHdoaWNoIHRoZSBkYXRhZ3JhbXMgY2Fu
IGJlIHNlbnQuIFRoaXMgbG9jYWwgVURQIHBvcnQgIGlzIHNldCB3aXRoIHRoZSBwYXJhbWV0ZXIg
YHVkcF9wb3J0YC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOTg5OSwgdGhlIHN0YW5kYXJkIFVEUCBl
bmNhcHN1bGF0aW9uIHBvcnQuIElmIFVEUCBlbmNhcHN1bGF0aW9uIGlzIG5vdCBuZWNlc3Nhcnks
IHRoZSBVRFAgcG9ydCBoYXMgdG8gYmUgc2V0IHRvIDAuCisKKyMjIyB1c3JzY3RwX2ZpbmlzaCgp
CisKK0F0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gYHVzcnNjdHBfZmluaXNoKClgIHNob3VsZCBi
ZSBjYWxsZWQgdG8gZnJlZSBhbGwgdGhlIG1lbW9yeSB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBi
ZWZvcmUuIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMKKworYGBgYworaW50IHVzcnNjdHBfZmlu
aXNoKHZvaWQpCitgYGAKKworVGhlIHJldHVybiBjb2RlIGlzIDAgb24gc3VjY2VzcyBhbmQgLTEg
aW4gY2FzZSBvZiBhbiBlcnJvci4KKworIyMjIHVzcnNjdHBfc29ja2V0KCkKKworQSByZXByZXNl
bnRhdGlvbiBvZiBhbiBTQ1RQIGVuZHBvaW50IGlzIGEgc29ja2V0LiBJcyBpdCBjcmVhdGVkIHdp
dGggYHVzcnNjdHBfc29ja2V0KClgLiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzOgorCitgYGBj
CitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfc29ja2V0KGludCBkb21haW4sCisgICAgICAgICAg
ICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgIGludCBwcm90b2NvbCwKKyAgICAgICAgICAg
ICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfcmN2aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVs
cF9pbmZvKSwKKyAgICAgICAgICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNv
Y2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYl9mcmVlKSwKKyAg
ICAgICAgICAgICAgIHVpbnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAgICAgICAgICAgIHZvaWQg
KnVscF9pbmZvKQorYGBgCisKK1RoZSBhcmd1bWVudHMgdGFrZW4gZnJvbSBbUkZDIDY0NThdKGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpIGFyZToKKworKiBkb21haW46IFBGX0lO
RVQgb3IgUEZfSU5FVDYgY2FuIGJlIHVzZWQuCisqIHR5cGU6IEluIGNhc2Ugb2YgYSBvbmUtdG8t
bWFueSBzdHlsZSBzb2NrZXQgaXQgaXMgU09DS19TRVFQQUNLRVQsIGluIGNhc2Ugb2YgYSBvbmUt
dG8tb25lIHN0eWxlCitzb2NrZXQgaXQgaXMgU09DS19TVFJFQU0uIEZvciBhbiBleHBsYW5hdGlv
biBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc29ja2V0IHR5cGVzIHBsZWFzZQorcmVm
ZXIgdG8gW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4KKyog
cHJvdG9jb2w6IFNldCBJUFBST1RPX1NDVFAuCisKK0luIHVzcnNjdHAsIGEgY2FsbGJhY2sgQVBJ
IGNhbiBiZSB1c2VkLgorCisqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBvZiB0aGUgcmVjZWl2ZSBh
bmQgc2VuZCBjYWxsYmFja3MgYXJlIG5ldyBhcmd1bWVudHMgdG8gdGhlIHNvY2tldCBjYWxsLiBJ
ZiBubyBjYWxsYmFjayBBUEkgaXMgdXNlZCwgdGhlc2UgbXVzdCBiZSBgTlVMTGAuCisqIFRoZSBg
c2JfdGhyZXNob2xkYCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBmcmVlIHNwYWNlIGluIHRoZSBz
ZW5kIHNvY2tldCBidWZmZXIgYmVmb3JlIHRoZSBzZW5kIGZ1bmN0aW9uIGluIHRoZSBhcHBsaWNh
dGlvbiBpcyBjYWxsZWQuIElmIGEgc2VuZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBzcGVjaWZpZWQg
YW5kIGBzYl90aHJlc2hvbGRgIGlzIDAsIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIg
dGhlcmUgaXMgcm9vbSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyLgorKiBBZGRpdGlvbmFsIGRh
dGEgbWF5IGJlIHBhc3NlZCBhbG9uZyB3aXRoaW4gdGhlIGB1bHBfaW5mb2AgcGFyYW1ldGVyLiBU
aGlzIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgcmVjZWl2ZV9jYmAgd2hlbiBpdCBpcyBp
bnZva2VkLgorCitPbiBzdWNjZXNzIGB1c3JzY3RwX3NvY2tldCgpYCByZXR1cm5zIHRoZSBwb2lu
dGVyIHRvIHRoZSBuZXcgc29ja2V0IGluIHRoZSBgc3RydWN0IHNvY2tldGAgZGF0YSB0eXBlLiBJ
dCB3aWxsIGJlIG5lZWRlZCBpbiBhbGwgb3RoZXIgc3lzdGVtIGNhbGxzLiBJbiBjYXNlIG9mIGEg
ZmFpbHVyZSBOVUxMIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJp
YXRlIGVycm9yIGNvZGUuCisKKyMjIyB1c3JzY3RwX2Nsb3NlKCkKKworVGhlIGZ1bmN0aW9uIHBy
b3RvdHlwZSBvZiBgdXNyc2N0cF9jbG9zZSgpYCBpcworCitgYGBjCit2b2lkIHVzcnNjdHBfY2xv
c2Uoc3RydWN0IHNvY2tldCAqc28pCisgYGBgCitUaHVzIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMg
dGhlIGFic2VuY2Ugb2YgYSByZXR1cm4gY29kZS4KKworIyMgU2FtZSBGdW5jdGlvbmFsaXR5IGFz
IFJGQyA2NDU4CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUgdGhlIHNhbWUgZnVuY3Rp
b25hbGl0eSBhcyB0aGVpciBrZXJuZWwgcGVuZGFudHMuIFRoZXJlIHByb3RvdHlwZXMKK2FyZSBk
ZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gRm9yIGEgZGV0YWlsZWQgZGVz
Y3JpcHRpb24gcGxlYXNlIHJlZmVyIHRvIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNjQ1OCkuCisKKyMjIyB1c3JzY3RwX2JpbmQoKQorCitgYGBjCitpbnQKK3VzcnNj
dHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsCisgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCitgYGAKKworKiBzbzogUG9p
bnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tldCgpYC4KKyog
YWRkcjogVGhlIGFkZHJlc3Mgc3RydWN0dXJlIChgc3RydWN0IHNvY2thZGRyX2luYCBmb3IgYW4g
SVB2NCBhZGRyZXNzIG9yIGBzdHJ1Y3Qgc29ja2FkZHJfaW42YCBmb3IgYW4gSVB2NiBhZGRyZXNz
KS4KKyogYWRkcmxlbjogVGhlIHNpemUgb2YgdGhlIGFkZHJlc3Mgc3RydWN0dXJlLgorCitgdXNy
c2N0cF9iaW5kKClgIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVy
cm9yLgorCisjIyMgdXNyc2N0cF9saXN0ZW4oKQorCitgYGBjCitpbnQKK3VzcnNjdHBfbGlzdGVu
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgaW50IGJhY2tsb2cpCitgYGAKKwor
KiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tl
dCgpYC4KKyogYmFja2xvZzogSWYgYmFja2xvZyBpcyBub24temVybywgZW5hYmxlIGxpc3Rlbmlu
ZywgZWxzZSBkaXNhYmxlIGxpc3RlbmluZy4KKworYHVzcnNjdHBfbGlzdGVuKClgIHJldHVybnMg
MCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisjIyMgdXNyc2N0cF9h
Y2NlcHQoKQorCitgYGBjCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfYWNjZXB0KHN0cnVjdCBz
b2NrZXQgKnNvLAorICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogYWRkciwKKyAgICAg
ICAgICAgICAgIHNvY2tsZW5fdCAqIGFkZHJsZW4pCitgYGAKKworKiBzbzogUG9pbnRlciB0byB0
aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tldCgpYC4KKyogYWRkcjogT24g
cmV0dXJuLCAgdGhlIHByaW1hcnkgYWRkcmVzcyBvZiB0aGUgcGVlciAoYHN0cnVjdCBzb2NrYWRk
cl9pbmAgZm9yIGFuIElQdjQgYWRkcmVzcyBvciBgc3RydWN0IHNvY2thZGRyX2luNmAgZm9yIGFu
IElQdjYgYWRkcmVzcykuCisqIGFkZHJsZW46IFNpemUgb2YgdGhlIHJldHVybmVkIGFkZHJlc3Mg
c3RydWN0dXJlLgorCitgdXNyc2N0cF9hY2NlcHQoKWAgcmV0dXJucyB0aGUgYWNjZXB0ZWQgc29j
a2V0IG9uIHN1Y2Nlc3MgYW5kIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworIyMjIHVzcnNj
dHBfY29ubmVjdCgpCisKK2BgYGMKK2ludAordXNyc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKKyAgICAgICAgICAg
ICAgICBzb2NrbGVuX3QgYWRkcmxlbikKK2BgYAorCisqIHNvOiBQb2ludGVyIHRvIHRoZSBzb2Nr
ZXQgYXMgcmV0dXJuZWQgYnkgYHVzcnNjdHBfc29ja2V0KClgLgorKiBuYW1lOiBBZGRyZXNzIG9m
IHRoZSBwZWVyIHRvIGNvbm5lY3QgdG8gKGBzdHJ1Y3Qgc29ja2FkZHJfaW5gIGZvciBhbiBJUHY0
IGFkZHJlc3Mgb3IgYHN0cnVjdCBzb2NrYWRkcl9pbjZgIGZvciBhbiBJUHY2IGFkZHJlc3MpLgor
KiBhZGRybGVuOiBTaXplIG9mIHRoZSBwZWVyJ3MgYWRkcmVzcy4KKworYHVzcnNjdHBfY29ubmVj
dCgpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKwor
IyMjIHVzcnNjdHBfc2h1dGRvd24oKQorCitgYGBjCitpbnQKK3VzcnNjdHBfc2h1dGRvd24oc3Ry
dWN0IHNvY2tldCAqc28sIGludCBob3cpCitgYGAKKworKiBzbzogUG9pbnRlciB0byB0aGUgc29j
a2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQKKyogaG93OiBTcGVjaWZpZXMgdGhl
IHR5cGUgb2Ygc2h1dGRvd24uICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xsb3dzOgorICAqIFNIVVRf
UkQ6ICBEaXNhYmxlcyBmdXJ0aGVyIHJlY2VpdmUgb3BlcmF0aW9ucy4gIE5vIFNDVFAgcHJvdG9j
b2wgYWN0aW9uIGlzIHRha2VuLgorICAqIFNIVVRfV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQg
b3BlcmF0aW9ucywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1ZW5jZS4KKyAg
KiBTSFVUX1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9u
cywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1ZW5jZS4KKworYHVzcnNjdHBf
c2h1dGRvd24oKWAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJy
b3IuCisKKyMjIFNlbmRpbmcgYW5kIFJlY2VpdmluZyBEYXRhCitTaW5jZSB0aGUgcHVibGljYXRp
b24gb2YgW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSB0aGVy
ZSBpcyBvbmx5IG9uZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBhbmQgb25lIGZvciByZWNlaXZpbmcK
K3RoYXQgaXMgbm90IGRlcHJlY2F0ZWQuIFRoZXJlZm9yZSwgb25seSB0aGVzZSB0d28gYXJlIGRl
c2NyaWJlZCBoZXJlLgorCisjIyMgdXNyc2N0cF9zZW5kdigpCisKK2BgYGMKK3NzaXplX3QKK3Vz
cnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgIGNvbnN0IHZvaWQg
KmRhdGEsCisgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgIHN0cnVjdCBz
b2NrYWRkciAqYWRkcnMsCisgICAgICAgICAgICAgIGludCBhZGRyY250LAorICAgICAgICAgICAg
ICB2b2lkICppbmZvLAorICAgICAgICAgICAgICBzb2NrbGVuX3QgaW5mb2xlbiwKKyAgICAgICAg
ICAgICAgdW5zaWduZWQgaW50IGluZm90eXBlLAorICAgICAgICAgICAgICBpbnQgZmxhZ3MpCitg
YGAKKworKiBzbzogVGhlIHNvY2tldCB0byBzZW5kIGRhdGEgb24uCisqIGRhdGE6IEFzIGl0IGlz
IG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRhdGEgaW4gYSBidWZmZXIgYW5kIG5vdCBhIGBzdHJ1
Y3QgaW92ZWNgIGRhdGEgc3RydWN0dXJlLCB3ZSBjaG9zZSB0byBwYXNzIHRoZSBkYXRhIGFzIGEg
dm9pZCBwb2ludGVyLgorKiBsZW46IExlbmd0aCBvZiB0aGUgZGF0YS4KKyogYWRkcnM6IEluIHRo
aXMgdmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1vc3Qgb25lIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMg
c3VwcG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBhIGNvbm5lY3RlZCBzb2NrZXQsIHRoZSBwYXJhbWV0
ZXIgYGFkZHJzYCBjYW4gYmUgc2V0IHRvIE5VTEwuCisqIGFkZHJjbnQ6IE51bWJlciBvZiBhZGRy
ZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJlc3MgaXMgc3VwcG9ydGVkLCBhZGRyY250IGlzIDAg
aWYgYWRkcnMgaXMgTlVMTCBhbmQgMSBvdGhlcndpc2UuCisqIGluZm86IEFkZGl0aW9uYWwgaW5m
b3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBzdG9yZWQgaW4gYHZvaWQgKmluZm9gLiBUaGUgZGF0
YSB0eXBlcyBgc3RydWN0IHNjdHBfc25kaW5mb2AsIGBzdHJ1Y3Qgc2N0cF9wcmluZm9gLCBhbmQg
YHN0cnVjdCBzY3RwX3NlbmR2X3NwYWAgYXJlIHN1cHBvcnRlZCBhcyBkZWZpbmVkIGluIFtSRkMg
NjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuIFN1cHBvcnQgZm9yIGBz
dHJ1Y3Qgc2N0cF9hdXRoaW5mb2AgaXMgbm90IGltcGxlbWVudGVkIHlldCwgdGhlcmVmb3JlLCBl
cnJubyBpcyBzZXQgRUlOVkFMIGFuZCAtMSB3aWxsIGJlIHJldHVybmVkLCBpZiBpdCBpcyB1c2Vk
LgorKiBpbmZvbGVuOiBMZW5ndGggb2YgaW5mbyBpbiBieXRlcy4KKyogaW5mb3R5cGU6IElkZW50
aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGluZm8uIFBvc3Np
YmxlIHZhbHVlcyBhcmUKKyAgKiBTQ1RQX1NFTkRWX05PSU5GTworICAqIFNDVFBfU0VORFZfU05E
SU5GTworICAqIFNDVFBfU0VORFZfUFJJTkZPCisgICogU0NUUF9TRU5EVl9TUEEgKEZvciBhZGRp
dGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBbUkZDIDY0NThdKGh0dHA6Ly90b29s
cy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLikKKyogZmxhZ3M6IEZsYWdzIGFzIGRlc2NyaWJlZCBp
biBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLgorCitgdXNy
c2N0cF9zZW5kdigpYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCwgb3IgLTEgaWYg
YW4gZXJyb3Igb2NjdXJyZWQuICBUaGUgdmFyaWFibGUgZXJybm8gaXMgdGhlbiBzZXQgYXBwcm9w
cmlhdGVseS4KKworIyMjIHVzcnNjdHBfcmVjdnYoKQorCitgYGBjCitzc2l6ZV90Cit1c3JzY3Rw
X3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgIHZvaWQgKmRidWYsCisgICAg
ICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20s
CisgICAgICAgICAgICAgc29ja2xlbl90ICogZnJvbWxlbiwKKyAgICAgICAgICAgICB2b2lkICpp
bmZvLAorICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKKyAgICAgICAgICAgICB1bnNp
Z25lZCBpbnQgKmluZm90eXBlLAorICAgICAgICAgICAgIGludCAqbXNnX2ZsYWdzKQorYGBgCisK
Kyogc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9uLgorKiBkYnVmOiBBbmFsb2cgdG8g
YHVzcnNjdHBfc2VuZHYoKWAgdGhlIGRhdGEgaXMgcmV0dXJuZWQgaW4gYSBidWZmZXIuCisqIGxl
bjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCisqIGZyb206IEEgcG9pbnRlciB0byBh
biBhZGRyZXNzIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBzZW5kZXIgb2YgdGhlIHJlY2VpdmVkIG1l
c3NhZ2UncyBhZGRyZXNzLgorKiBmcm9tbGVuOiBBbiBpbi9vdXQgcGFyYW1ldGVyIGRlc2NyaWJp
bmcgdGhlIGZyb20gbGVuZ3RoLgorKiBpbmZvOiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBo
b2xkIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdlLiAgVGhlIHN0cnVjdHVy
ZSB0eXBlIG9mIGluZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5mb3R5cGUgcGFyYW1ldGVyLiBU
aGUgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBgaW5mb2AgaGF2ZSB0byBiZSBoYW5kbGVkIGluIHRo
ZSBzYW1lIHdheSBhcyBzcGVjaWZpZWQgaW4gW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9yZmM2NDU4KS4KKyogaW5mb2xlbjogIEFuIGluL291dCBwYXJhbWV0ZXIgZGVzY3Jp
YmluZyB0aGUgc2l6ZSBvZiB0aGUgaW5mbyBidWZmZXIuCisqIGluZm90eXBlOiAgT24gcmV0dXJu
LCBgKmluZm90eXBlYCBpcyBzZXQgdG8gdGhlIHR5cGUgb2YgdGhlIGluZm8gYnVmZmVyLiAgVGhl
IGN1cnJlbnQgZGVmaW5lZCB2YWx1ZXMgYXJlCisgICogU0NUUF9SRUNWVl9OT0lORk8KKyAgKiBT
Q1RQX1JFQ1ZWX1JDVklORk8KKyAgKiBTQ1RQX1JFQ1ZWX05YVElORk8KKyAgKiBTQ1RQX1JFQ1ZW
X1JOIChBIGRldGFpbGVkIGRlc2NyaXB0aW9uIGlzIGdpdmVuIGluIFtSRkMgNjQ1OF0oaHR0cDov
L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkpCisqIGZsYWdzOiBBIHBvaW50ZXIgdG8gYW4g
aW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBhbnkgbWVzc2FnZSBmbGFncyAoZS5nLiwgYE1TR19O
T1RJRklDQVRJT05gKS4gIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzIGFuIGluL291dCBwYXJhbWV0
ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2ZSBtYXkgYWxzbyBiZSBwYXNzZWQgaW50byB0aGUg
dmFsdWUgKGUuZy4sIGBNU0dfRU9SYCkuICBSZXR1cm5pbmcgZnJvbSB0aGUgY2FsbCwgdGhlIGZs
YWdzJyB2YWx1ZSB3aWxsIGRpZmZlciBmcm9tIGl0cyBvcmlnaW5hbCB2YWx1ZS4KKworYHVzcnNj
dHBfcmVjdnYoKWAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsIG9yIC0xIGlmIGFu
IGVycm9yIG9jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRoZW4gc2V0IGFwcHJvcHJp
YXRlbHkuCisKKyMjIFNvY2tldCBPcHRpb25zCitTb2NrZXQgb3B0aW9ucyBhcmUgdXNlZCB0byBj
aGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc29ja2V0IGNhbGxzLgorVGhlaXIgYmVoYXZp
b3IgaXMgc3BlY2lmaWVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwv
cmZjNjQ1OCkuIFRoZSBmdW5jdGlvbnMgdG8gZ2V0IG9yIHNldCB0aGVtIGFyZQorCitgYGBjCitp
bnQKK3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAg
ICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgc29j
a2xlbl90ICpvcHRsZW4pCitgYGAKK2FuZAorYGBgYworaW50Cit1c3JzY3RwX3NldHNvY2tvcHQo
c3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAg
ICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKm9wdHZhbCwKKyAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBvcHRsZW4pCitg
YGAKKworYW5kIHRoZSBhcmd1bWVudHMgYXJlCisqIHNvOiAgVGhlIHNvY2tldCBvZiB0eXBlIHN0
cnVjdCBzb2NrZXQuCisqIGxldmVsOiAgU2V0IHRvIElQUFJPVE9fU0NUUCBmb3IgYWxsIFNDVFAg
b3B0aW9ucy4KKyogb3B0bmFtZTogIFRoZSBvcHRpb24gbmFtZSBhcyBzcGVjaWZpZWQgaW4gVGhl
IFNvY2tldCBPcHRpb25zIHRhYmxlIGJlbG93LgorKiBvcHR2YWw6IFRoZSBidWZmZXIgdG8gc3Rv
cmUgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gYXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgY29s
dW1uIG9mIFNvY2tldCBPcHRpb25zIGJlbG93LgorKiBvcHRsZW46ICBUaGUgc2l6ZSBvZiB0aGUg
YnVmZmVyIChvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcHRpb24gcmV0dXJuZWQgaW4gY2FzZSBvZiBg
dXNyc2N0cF9nZXRzb2Nrb3B0YCkuCisKK1RoZXNlIGZ1bmN0aW9ucyByZXR1cm4gMCBvbiBzdWNj
ZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisjIyMgU29ja2V0IE9wdGlvbnMgc3Vw
cG9ydGVkIGJ5IHVzcnNjdHAKKworT3B0aW9uIHwgRGF0YXR5cGUgfCByL3cKKy0tLS0tLSB8IC0t
LS0tLS0tIHwgLS0tLQorU0NUUF9SVE9JTkZPIHwgc3RydWN0IHNjdHBfcnRvaW5mbyB8IHIvdwor
U0NUUF9BU1NPQ0lORk8gfCBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyB8IHIvdworU0NUUF9JTklU
TVNHIHwgc3RydWN0IHNjdHBfaW5pdG1zZyB8IHIvdworU0NUUF9OT0RFTEFZIHwgaW50IHwgci93
CitTQ1RQX0FVVE9DTE9TRSB8IGludCB8IHIvdworU0NUUF9QUklNQVJZX0FERFIgfCBzdHJ1Y3Qg
c2N0cF9zZXRwcmltIHwgci93CitTQ1RQX0FEQVBUQVRJT05fTEFZRVIgfCBzdHJ1Y3Qgc2N0cF9z
ZXRhZGFwdGF0aW9uIHwgci93CitTQ1RQX0RJU0FCTEVfRlJBR01FTlRTIHwgaW50IHwgci93CitT
Q1RQX1BFRVJfQUREUl9QQVJBTVMgfCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyB8IHIvdworU0NU
UF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgfCBpbnQgfCByL3cKK1NDVFBfTUFYU0VHIHwgc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUgfCByL3cKK1NDVFBfREVMQVlFRF9TQUNLIHwgc3RydWN0IHNjdHBf
c2Fja19pbmZvIHwgci93CitTQ1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUgfCBpbnQgfCByL3cKK1ND
VFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCB8IGludCB8IHIvdworU0NUUF9ITUFDX0lERU5UIHwg
c3RydWN0IHNjdHBfaG1hY2FsZ28gfCByL3cKK1NDVFBfQVVUSF9BQ1RJVkVfS0VZIHwgc3RydWN0
IHNjdHBfYXV0aGtleWlkIHwgci93CitTQ1RQX0FVVE9fQVNDT05GIHwgaW50IHwgci93CitTQ1RQ
X01BWF9CVVJTVCB8IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHwgci93CitTQ1RQX0NPTlRFWFQg
fCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdworU0NUUF9FWFBMSUNJVF9FT1IgfCBpbnQg
fCByL3cKK1NDVFBfUkVVU0VfUE9SVCB8IGludCB8IHIvdworU0NUUF9FVkVOVCB8IHN0cnVjdCBz
Y3RwX2V2ZW50IHwgci93CitTQ1RQX1JFQ1ZSQ1ZJTkZPIHwgaW50IHwgci93CitTQ1RQX1JFQ1ZO
WFRJTkZPIHwgaW50IHwgci93CitTQ1RQX0RFRkFVTFRfU05ESU5GTyB8IHN0cnVjdCBzY3RwX3Nu
ZGluZm8gfCByL3cKK1NDVFBfREVGQVVMVF9QUklORk8gfCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3By
aW5mbyB8IHIvdworU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIHwgaW50IHwgci93CitTQ1RQ
X0VOQUJMRV9TVFJFQU1fUkVTRVQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdworU0NU
UF9TVEFUVVMgfCBzdHJ1Y3Qgc2N0cF9zdGF0dXMgfCByCitTQ1RQX0dFVF9QRUVSX0FERFJfSU5G
TyB8IHN0cnVjdCBzY3RwX3BhZGRyaW5mbyB8IHIKK1NDVFBfUEVFUl9BVVRIX0NIVU5LUyB8IHN0
cnVjdCBzY3RwX2F1dGhjaHVua3MgfCByCitTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktTIHwgc3RydWN0
IHNjdHBfYXV0aGNodW5rcyB8IHIKK1NDVFBfR0VUX0FTU09DX05VTUJFUiB8IHVpbnQzMl90IHwg
cgorU0NUUF9HRVRfQVNTT0NfSURfTElTVCB8IHN0cnVjdCBzY3RwX2Fzc29jX2lkcyB8IHIKK1ND
VFBfUkVTRVRfU1RSRUFNUyB8IHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgfCB3CitTQ1RQX1JF
U0VUX0FTU09DIHwgc3RydWN0IHNjdHBfYXNzb2NfdCB8IHcKK1NDVFBfQUREX1NUUkVBTVMgfCBz
dHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB8IHcKKworRnVydGhlciB1c2FnZSBkZXRhaWxzIGFyZSBk
ZXNjcmliZWQgaW4gW1JGQyA2NDU4XSh0b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLCBbUkZD
IDY1MjVdKHRvb2xzLmlldGYub3JnL2h0bWwvcmZjNjUyNSksIGFuZCBbZHJhZnQtaWV0Zi10c3Z3
Zy1zY3RwLXVkcC1lbmNhcHMtMDNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1p
ZXRmLXRzdndnLXNjdHAtdWRwLWVuY2Fwcy0wMykgKHdvcmsgaW4gcHJvZ3Jlc3MpLgorCisjIyBT
eXNjdGwgdmFyaWFibGVzCisKK0luIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBmb3IgaW5z
dGFuY2UgRnJlZUJTRCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBhcmFtZXRlcnMgaW4gdGhl
IG9wZXJhdGluZyBzeXN0ZW0uIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNhbGxlZCBzeXNjdGwgdmFy
aWFibGVzLgorCitJbiB1c3JzY3RwIGFwcGxpY2F0aW9ucyBjYW4gc2V0IG9yIHJldHJpZXZlIHRo
ZXNlIHZhcmlhYmxlcyB3aXRoIHRoZSBmdW5jdGlvbnMKK2BgYGMKK3ZvaWQgdXNyc2N0cF9zeXNj
dGxfc2V0XyAjIyAodWludDMyX3QgdmFsdWUpCitgYGAKK2FuZAorYGBgYwordWludDMyX3QgdXNy
c2N0cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkKK2BgYAorcmVzcGVjdGl2ZWx5LCB3aGVyZSBgIyNg
IHN0YW5kcyBmb3IgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLgorCitJbiB0aGUgZm9sbG93aW5n
IHBhcmFncmFwaHMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFyYW1ldGVycyB3aWxsIGJl
IGdpdmVuLgorCisjIyBNYW5pcHVsYXRlIE1lbW9yeQorIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9zZW5kc3BhY2UoKQorVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFibGUgc2VuZCBidWZmZXIg
Y2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzIHRv
IGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBgMl4zMiAtIDFgIGJ5dGVzLgorCisjIyMjIHVzcnNjdHBf
c3lzY3RsX3NldF9zY3RwX3JlY3ZzcGFjZSgpCitUaGUgc3BhY2Ugb2YgdGhlIGF2YWlsYWJsZSBy
ZWNlaXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDI2
MiwxNDQgYnl0ZXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIGAyXjMyIC0gMWAgYnl0ZXMuCisK
KyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGFzaHRibHNpemUoKQorVGhlIFRDQiAoVGhy
ZWFkIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25l
IFRDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJeMzIg
LSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0ZXMuIEEgVENCIGNvbnRh
aW5zIGZvciBpbnN0YW5jZSBwb2ludGVycyB0byB0aGUgc29ja2V0LCB0aGUgZW5kcG9pbnQsIGlu
Zm9ybWF0aW9uIGFib3V0IHRoZSBhc3NvY2lhdGlvbiBhbmQgc29tZSBzdGF0aXN0aWMgZGF0YS4K
KworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wY2J0YmxzaXplKCkKK1RoZSBQQ0IgKFBy
b3RvY29sIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Yg
b25lIFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJe
MzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5dGVzLiBUaGUgUENCIGNv
bnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4gZW5kcG9pbnQuCisKKyMj
IyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCgpCitUaGlz
IHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMg
aW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIDAgYW5kIGAyXjMyIC0gMWAuIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
YXNvY19mcmVlX3Jlc2NfbGltaXQoKQorVGhpcyBwYXJhbWV0ZXJzIHR1bmVzIHRoZSBtYXhpbXVt
IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uLiBJdCBjYW4gYmUg
c2V0IGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisK
KyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQoKQorRGF0
YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJlIGNoYWluZWQgdG9nZXRo
ZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBhIGNoYWluIGNhbiBiZSBz
ZXQgd2l0aCB0aGlzIHBhcmFtZXRlciwgYmVmb3JlIGFuIG1idWYgY2x1c2V0IGlzIHVzZWQuIFRo
ZSBkZWZhdWx0IGlzIDUuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYWRkX21vcmVf
dGhyZXNob2xkKCkKK1RCRAorVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJlcyB0aGUgdGhyZXNob2xk
IGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQg
YnVmZmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNDUyIGJ5dGVzLgorCisKKyMjIENvbmZpZ3Vy
ZSBSVE8KK1RoZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBpLmUuIHRoZSB0aW1lIHRo
YXQgY29udHJvbHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzLCBoYXMgc2V2ZXJhbCBw
YXJhbWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBsZSB0byBzaG9ydGVuIHRo
ZSB0aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlzIHJldHJhbnNtaXR0ZWQuIFRoZSByYW5nZSBvZiB0
aGVzZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYG1zLgorCisjIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0b19tYXhfZGVmYXVsdCgpCitUaGUgZGVmYXVsdCB2YWx1
ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyBpcyA2MCwwMDAg
KDYwc2VjcykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcnRvX21pbl9kZWZhdWx0
KCkKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1l
b3V0IGluIG1zIGlzIDEsMDAwICgxc2VjKS4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9ydG9faW5pdGlhbF9kZWZhdWx0KCkKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW5pdGlh
bCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDMsMDAwICgzc2VjKS4gVGhpcyB2YWx1
ZSBpcyBvbmx5IG5lZWRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIG9mIGEgcm91bmQg
dHJpcCB0aW1lIHRvb2sgcGxhY2UuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5p
dF9ydG9fbWF4X2RlZmF1bHQoKQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHJl
dHJhbnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4gbXMgaXMgNjAsMDAwICg2
MHNlY3MpLgorCisKKyMjIFNldCBUaW1lcnMKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
dmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCgpCitBIGNvb2tpZSBoYXMgYSBzcGVjaWZpZWQgbGlm
ZSB0aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBjb29raWUgaXMgbm90IHZhbGlkIGFueSBtb3JlIGFu
ZCBhbiBBQk9SVCBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpbiBtcyBpcyA2MCwwMDAgKDYw
c2VjcykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGVhcnRiZWF0X2ludGVydmFs
X2RlZmF1bHQoKQorU2V0IHRoZSBkZWZhdWx0IHRpbWUgYmV0d2VlbiB0d28gaGVhcnRiZWF0cy4g
VGhlIGRlZmF1bHQgaXMgMzAsMDAwbXMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
c2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KCkKK0lmIGEgU0hVVERPV04gaXMgbm90IGFuc3dl
cmVkIHdpdGggYSBTSFVURE9XTi1BQ0sgd2hpbGUgdGhlIHNodXRkb3duIGd1YXJkIHRpbWVyIGlz
IHN0aWxsIHJ1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxsIGJlIGFib3J0ZWQgYWZ0ZXIgdGhl
IGRlZmF1bHQgb2YgMTgwc2Vjcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wbXR1
X3JhaXNlX3RpbWVfZGVmYXVsdCgpCitUQkQKK1RvIHNldCB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0
cyB0byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3NzaWJsZSwgdGhlIG1heGltdW0gdHJhbnNmZXIgdW5p
dCAoTVRVKSBvZiB0aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25vd24uIFRoZSBkZWZhdWx0
IHRpbWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3ZlcnkgaXMgNjAwc2Vjcy4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCgpCitU
QkQKK1RoZSBkZWZhdWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZlciBpcyAzNjAwc2Vjcy4K
KworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF92dGFnX3RpbWVfd2FpdCgpCitUQkQKK1Z0
YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERlZmF1bHQ6IDYwc2VjcworCisKKyMj
IFNldCBGYWlsdXJlIExpbWl0cworVHJhbnNtaXNzaW9ucyBhbmQgcmV0cmFuc21pc3Npb25zIG9m
IG1lc3NhZ2VzIG1pZ2h0IGZhaWwuIFRvIHByb3RlY3QgdGhlIHN5c3RlbSBhZ2FpbnN0IHRvbyBt
YW55IHJldHJhbnNtaXNzaW9ucywgbGltaXRzIGhhdmUgdG8gYmUgZGVmaW5lZC4KKworIyMjIyB1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCgpCitUaGUgZGVmYXVs
dCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgYW4gSU5JVCBjaHVua3MgaXMg
OCwgYmVmb3JlIGFuIEFCT1JUIGlzIHNlbnQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KCkKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3JlIHRoZSBhc3NvY2lhdGlv
biBpcyBhYm9ydGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKworIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCgpCitUaGlzIHBhcmFtZXRlciBzZXRz
IHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRoIGZhaWx1cmVzIGJlZm9yZSB0aGUgYXNzb2NpYXRp
b24gaXMgYWJvcnRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4gTm90aWNlIHRoYXQgdGhlIG51
bWJlciBvZiBwYXRocyBtdWx0aXBsaWVkIGJ5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIGVxdWFsIHRv
IGBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdGAuIFRoYXQgbWVhbnMgdGhhdCB0aGUgZGVmYXVs
dCBjb25maWd1cmF0aW9uIGlzIGdvb2QgZm9yIHR3byBwYXRocy4KKworIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9tYXhfcmV0cmFuX2NodW5rKCkKK1RoZSBwYXJhbWV0ZXIgY29uZmlndXJl
cyBob3cgbWFueSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSByZXRyYW5zbWl0dGVkIGJl
Zm9yZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gMzAuCisK
KyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcGF0aF9wZl90aHJlc2hvbGQoKQorVEJECitE
ZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQuIERlZmF1bHQ6IDY1NTM1CQkKKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCgpCitUQkQKK1doZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0LiBEZWZhdWx0OiAwCisK
KworIyMgQ29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLcworIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCgpCitUaGUgU0FDSyBmcmVxdWVuY3kgZGVmaW5lcyB0
aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgYXdhaXRlZCwgYmVmb3JlIGEgU0FDSyBpcyBz
ZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQoKQorQXMgYSBTQUNLIChTZWxlY3RpdmUgQWNr
bm93bGVnbWVudCkgaXMgc2VudCBhZnRlciBldmVyeSBvdGhlciBwYWNrZXQsIGEgdGltZXIgaXMg
c2V0IHRvIHNlbmQgYSBTQUNLIGluIGNhc2UgYW5vdGhlciBwYWNrZXQgZG9lcyBub3QgYXJyaXZl
IGluIGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0aW1lciBpcyAyMDBtcy4K
KworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3Rfc2Fja3MoKQorVEJECitUaGlz
IGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUgY29oZXJlbmNlIG9mIFNB
Q0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSAob24pLgorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX25yX3NhY2tfb25fb2ZmKCkKK0lmIGEgc2xvdyBob3N0cyByZWNl
aXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0cyByZWNlaXZl
ciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IGRhdGEgY2FuIG9ubHkgYmUgYWNjZXB0ZWQgaWYgb25l
IGNodW5rIHdpdGggYSBoaWdoZXIgVFNOIChUcmFuc21pc3Npb24gU2VxdWVuY2UgTnVtYmVyKSB0
aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gYWNrbm93bGVkZ2VkIGlzIGRyb3BwZWQuIEFzIGEgY29u
c2VxdWVuY2UgdGhlIHNlbmRlciBoYXMgdG8gc3RvcmUgZGF0YSwgZXZlbiBpZiB0aGV5IGhhdmUg
YmVlbiBhY2tub3dsZWRnZWQgaW4gY2FzZSB0aGV5IGhhdmUgdG8gYmUgcmV0cmFuc21pdHRlZC4g
SWYgdGhpcyBiZWhhdmlvciBpcyBub3QgbmVjZXNzYXJ5LCBub24tcmVuZWdhYmxlIFNBQ0tzIGNh
biBiZSB0dXJuZWQgb24uIEJ5IGRlZmF1bHQgdGhlIHVzZSBvZiBub24tcmVuZWdhYmxlIFNBQ0tz
IGlzIHR1cm5lZCBvZmYuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZW5hYmxlX3Nh
Y2tfaW1tZWRpYXRlbHkoKQorSW4gc29tZSBjYXNlcyBpdCBpcyBub3QgZGVzaXJhYmxlIHRvIHdh
aXQgZm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4cGlyZSBiZWZvcmUgYSBTQUNLIGlzIHNlbnQuIElu
IHRoZXNlIGNhc2VzIGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZIChzZWUgW2RyYWZ0LXR1
ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDldKGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9kcmFmdC10dWV4ZW4tdHN2d2ctc2N0cC1zYWNrLWltbWVkaWF0ZWx5LTA5KSkgY2Fu
IGJlIHNldCB0byBwcm92b2tlIHRoZSBpbnN0YW50IHNlbmRpbmcgb2YgYSBTQUNLLiBUaGUgZGVm
YXVsdCBpcyB0byB0dXJuIGl0IG9mZi4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9M
Ml9hYmNfdmFyaWFibGUoKQorVEJECitTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwp
LiBEZWZhdWx0OiAxCisKKyMjIENoYW5nZSBNYXggQnVyc3QKK01heCBidXJzdCBkZWZpbmVzIHRo
ZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgbWF5IGJlIHNlbnQgaW4gb25lIGZsaWdo
dC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCgpCitU
aGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1cnN0IGlzIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhl
IG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMgYSBmbGlnaHQgaXMgbm90IGxpbWl0ZWQgYnkgdGhp
cyBwYXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkgYW5vdGhlciBvbmUsIHNlZSB0aGUgbmV4dCBwYXJh
Z3JhcGguCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdXNlX2N3bmRfYmFzZWRfbWF4
YnVyc3QoKQorVGhlIHVzZSBvZiBtYXggYnVyc3QgaXMgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhl
IGNvbmdlc3Rpb24gd2luZG93IChjd25kKS4gVGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGJ5IGRlZmF1
bHQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGJfbWF4YnVyc3QoKQorSGVhcnRi
ZWF0cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVyaWZ5IGEgcGF0aC4gVGhlaXIgbnVtYmVyIGNhbiBi
ZSBsaW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0LgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KCkKK0luIHRoZSBzdGF0ZSBvZiBmYXN0IHJldHJhbnNt
aXNzaW9uIHRoZSBudW1iZXIgb2YgcGFja2V0IGJ1cnN0cyBjYW4gYmUgbGltaXRlZC4gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgNC4KKworCisjIyBIYW5kbGUgQ2h1bmtzCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX3BlZXJfY2h1bmtfb2goKQorSW4gb3JkZXIgdG8ga2VlcCB0cmFjayBvZiB0
aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2luZG93LCB0aGUgc2VuZGVyIGNhbGN1bGF0
ZXMgdGhlIHdpbmRvdyBieSBzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9mIGRhdGEgc2VudC4gWWV0
LCBzb21lIE9TcyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0aGUgcmVhbCBzcGFjZSBu
ZWVkZWQgdG8gc3RvcmUgdGhlIGRhdGEuIFRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIGFkZGl0aW9u
YWwgYW1vdW50IHRvIGRlYml0IHRoZSBwZWVyJ3MgcmVjZWl2ZXIgd2luZG93IHBlciBjaHVuayBz
ZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYsIHdoaWNoIGlzIHRoZSB2YWx1ZSBuZWVkZWQg
YnkgRnJlZUJTRC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfY2h1bmtzX29u
X3F1ZXVlKCkKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNodW5r
cyB0aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFzc29jaWF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBp
cyA1MTIuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWluX3NwbGl0X3BvaW50KCkK
K1RCRAorVGhlIG1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIGlzIDI5MDQgYnl0
ZXMgYnkgZGVmYXVsdC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9jaHVua3NjYWxl
KCkKK1RCRAorVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBzY2FsaW5nIG9mIG51bWJl
ciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEwLgorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX21pbl9yZXNpZHVhbCgpCitUQkQKK1RoaXMgcGFyYW1ldGVyIGNv
bmZpZ3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgcmVzaWR1YWwgZGF0YSBjaHVuayBpbiB0
aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHNwbGl0LiBUaGUgZGVmYXVsdCBpcyAxNDUyLgorCisKKyMj
IENhbGN1bGF0ZSBSVFQKK1RoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcm91bmQgdHJpcCB0aW1lIChS
VFQpIGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJhbWV0ZXJzLgorCisjIyMjIHVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX3J0dHZhcl9idygpCitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5n
IG9uIHJ0dCBjYWxjLiBEZWZhdWx0OiA0CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
cnR0dmFyX3J0dCgpCitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgcnR0IHNtb290aGluZyBvbiBydHQg
Y2FsYy4gRGVmYXVsdDogNQorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9l
cXJldCgpCitUQkQKK1doYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBidyBhcmUgdW5jaGFuZ2Vk
LiBEZWZhdWx0OiAwCisKKworIyMgSW5mbHVlbmNlIHRoZSBDb25nZXN0aW9uIENvbnRyb2wKK1Ro
ZSBjb25nZXN0aW9uIGNvbnRyb2wgc2hvdWxkIHByb3RlY3QgdGhlIG5ldHdvcmsgYWdhaW5zdCBm
YXN0IHNlbmRlcnMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZQor
RXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVs
dC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0X2NjX21vZHVsZSgpCitU
aGlzIHBhcmFtZXRlciBzZXRzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBmb3IgdGhlIGNvbmdlc3Rp
b24gY29udHJvbC4gRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3BlY2lmaWVkIGluIFtSRkMg
NDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCkuCisKKyMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfaW5pdGlhbF9jd25kKCkKK1NldCB0aGUgaW5pdGlhbCBjb25nZXN0
aW9uIHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVmYXVsdCBpcyAzLgorCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX3VzZV9kY2NjX2VjbigpCitUQkQKK0VuYWJsZSBmb3IgUlRDQyBDQyBkYXRh
Y2VudGVyIEVDTi4gRGVmYXVsdDogMQorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3N0
ZWFkeV9zdGVwKCkKK1RCRAorSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVw
IGRvd24gb2YgY3duZC4gRGVmYXVsdDogMjAKKworCisjIyBDb25maWd1cmUgQVVUSCBhbmQgQURE
LUlQCitBbiBpbXBvcnRhbnQgZXh0ZW5zaW9uIG9mIFNDVFAgaXMgdGhlIGR5bmFtaWMgYWRkcmVz
cyByZWNvbmZpZ3VyYXRpb24gKHNlZSBbUkZDIDUwNjFdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzUwNjEpKSwgYWxzbyBrbm93biBhcyBBREQtSVAsIHdoaWNoIGFsbG93cyB0aGUgY2hh
bmdpbmcgb2YgYWRkcmVzc2VzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgYW4gYXNzb2NpYXRpb24u
IEZvciB0aGlzIGZlYXR1cmUgdGhlIEFVVEggZXh0ZW5zaW9uIChzZWUgW1JGQyA0ODk1XShodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODk1KSkgaXMgbmVjZXNzYXJ5LgorCisjIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2F1dG9fYXNjb25mKCkKK0lmIFNDVFAgQXV0by1BU0NPTkYg
aXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5mb3JtZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3
IGFkZHJlc3MKK2lzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5
IGRlZmF1bHQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbXVsdGlwbGVfYXNjb25m
cygpCitCeSBkZWZhdWx0IHRoZSBzZW5kaW5nIG9mIG11bHRpcGxlIEFTQ09ORnMgaXMgZGlzYWJs
ZWQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXV0aF9kaXNhYmxlKCkKK1RoZSB1
c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFsbHkgdHVybmVkIG9uLCBjYW4gYmUgZGlzYWJsZWQg
Ynkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2FzY29uZl9hdXRoX25vY2hrKCkKK0l0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJs
ZSB0aGUgcmVxdWlyZW1lbnQgdG8gdXNlIEFVVEggaW4gY29uanVuY3Rpb24gd2l0aCBBREQtSVAg
Ynkgc2V0dGluZyB0aGlzIHBhcmFtZXRlcgordG8gMS4KKworCisjIyBDb25jdXJyZW50IE11bHRp
cGF0aCBUcmFuc2ZlciAoQ01UKQorQSBwcm9taW5lbnQgZmVhdHVyZSBvZiBTQ1RQIGlzIHRoZSBw
b3NzaWJpbGl0eSB0byB1c2Ugc2V2ZXJhbCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGFzc29jaWF0
aW9uLiBPbmUgaXMgdGhlIHByaW1hcnkgcGF0aCwgYW5kIHRoZSBvdGhlcnMgYXJlIG5lZWRlZCBp
biBjYXNlIG9mIGEgcGF0aCBmYWlsdXJlLiBVc2luZyBDTVQgdGhlIGRhdGEgaXMgc2VudCBvbiBz
ZXZlcmFsIHBhdGhzIHRvIGVuaGFuY2UgdGhlIHRocm91Z2hwdXQuCisKKyMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfY210X29uX29mZigpCitUbyB0dXJuIENNVCBvbiwgdGhpcyBwYXJhbWV0
ZXIgaGFzIHRvIGJlIHNldCB0byAxLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Nt
dF91c2VfZGFjKCkKK1RvIHVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50cyB3aXRoIENNVCB0aGlz
IHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfYnVmZmVyX3NwbGl0dGluZygpCitGb3IgQ01UIGl0IG1ha2VzIHNlbnNlIHRvIHNwbGl0
IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciB0byBoYXZlIHNoYXJlcyBmb3IgZWFjaCBwYXRo
LiBCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRpbmcgaXMgdHVybmVkIG9mZi4KKworCisjIyBOZXR3
b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkKK1RvIGJlIGFibGUgdG8gcGFzcyBOQVQgYm94
ZXMsIHRoZSBib3hlcyBoYXZlIHRvIGhhbmRsZSBTQ1RQIHBhY2tldHMgaW4gYSBzcGVjaWZpYyB3
YXkuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbmF0X2ZyaWVuZGx5KCkKK1NDVFAg
TkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVmYXVsdDoxCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkoKQorRW5hYmxlIHNlbmRpbmcgb2Yg
dGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gRGVmYXVsdDogMAorCisjIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VkcF90dW5uZWxpbmdfcG9ydCgpCitTZXQgdGhlIFND
VFAvVURQIHR1bm5lbGluZyBwb3J0LiBEZWZhdWx0OiA5ODk5CisKKyMjIFNDVFAgTW9iaWxpdHkK
KyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbW9iaWxpdHlfYmFzZSgpCitUQkQKK0VuYWJs
ZSBTQ1RQIGJhc2UgbW9iaWxpdHkuIERlZmF1bHQ6IDAKKworCisjIyMjIHVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKCkKK1RCRAorRW5hYmxlIFNDVFAgZmFzdCBo
YW5kb2ZmLiBkZWZhdWx0OiAwCisKKworIyMgTWlzY2VsbGFuZW91cworIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKCkKK0NhbGN1bGF0aW5nIHRoZSBjaGVj
a3N1bSBmb3IgcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVs
dC4gVG8gdHVybiBpdCBvbiwgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDAuCisKKyMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KCkKK1RoZSBwZWVy
IGlzIG5vdGlmaWVkIGFib3V0IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyBpbiB0aGUg
SU5JVCBvciBJTklULUFDSyBjaHVuay4gVGhlIGRlZmF1bHQgaXMgMTAuCisKKyMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfZG9fZHJhaW4oKQorRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hv
dWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzLiBEZWZhdWx0OiAxCQkKKworIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3RfZGF0YV9vcmRlcigpCitUQkQKK0VuZm9yY2Ugc3Ry
aWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRlIGRhdGEuIERlZmF1bHQ6
IDAKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0X3NzX21vZHVsZSgpCitT
ZXQgdGhlIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlLiBJbXBsZW1lbnRlZCBtb2R1
bGVzIGFyZToKKyogU0NUUF9TU19ERUZBVUxUCisqIFNDVFBfU1NfUk9VTkRfUk9CSU4KKyogU0NU
UF9TU19ST1VORF9ST0JJTl9QQUNLRVQKKyogU0NUUF9TU19QUklPUklUWQorKiBTQ1RQX1NTX0ZB
SVJfQkFORFdJVEgKKyogU0NUUF9TU19GSVJTVF9DT01FCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUoKQorVEJECitEZWZhdWx0IGZyYWdtZW50
IGludGVybGVhdmUgbGV2ZWwuIERlZmF1bHQ6IDEKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9ibGFja2hvbGUoKQorVEJECitFbmFibGUgU0NUUCBibGFja2hvbGluZy4gRGVmYXVsdDog
MAorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2xvZ2dpbmdfbGV2ZWwoKQorU2V0IHRo
ZSBsb2dnaW5nIGxldmVsLiBUaGUgZGVmYXVsdCBpcyAwLgorCisjIyMjIHVzcnNjdHBfc3lzY3Rs
X3NldF9zY3RwX2RlYnVnX29uKCkKK1R1cm4gZGVidWcgb3V0cHV0IG9uIG9yIG9mZi4gSXQgaXMg
ZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0YWluIGRlYnVnIG91dHB1dCwgYFNDVFBfREVCVUdg
IGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxlIGZsYWcuCisKKworIyMjIHN5c2N0bCB2YXJpYWJs
ZXMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKKworUGFyYW1ldGVyIHwgTWVhbmluZyB8IERlZmF1bHQg
VmFsdWUKKy0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tCitzY3RwX3NlbmRzcGFj
ZSB8IFNlbmQgYnVmZmVyIHNwYWNlIHwgMTg2NDEzNQorc2N0cF9yZWN2c3BhY2UgfCBSZWNlaXZl
IGJ1ZmZlciBzcGFjZSB8IDE4NjQxMzUKK3NjdHBfaGFzaHRibHNpemUgfCBUdW5hYmxlIGZvciBU
Q0IgaGFzaCB0YWJsZSBzaXplcyB8IDEwMjQKK3NjdHBfcGNidGJsc2l6ZSB8IFR1bmFibGUgZm9y
IFBDQiBoYXNoIHRhYmxlIHNpemVzIHwgMjU2CitzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQg
fCBDYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0gfCAxMDAwCitzY3RwX2Fzb2NfZnJlZV9y
ZXNjX2xpbWl0IHwgQ2FzaGVkIHJlc291cmNlcyBpbiBhbiBhc3NvY2lhdGlvbiB8IDEwCitzY3Rw
X3J0b19tYXhfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJUT19tYXggfCA2MDAwMG1zCitz
Y3RwX3J0b19taW5fZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJUT19taW4gfCAxMDAwbXMK
K3NjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJUT19pbml0aWFs
IHwgMzAwMG1zCitzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0IHwgRGVmYXVsdCB2YWx1ZSBmb3Ig
dGhlIG1heGltdW0gUlRPIGZvciBzZW5kaW5nIGFuIElOSVQgfCA2MDAwMG1zCitzY3RwX3ZhbGlk
X2Nvb2tpZV9saWZlX2RlZmF1bHQgfCBWYWxpZCBjb29raWUgbGlmZSB0aW1lIHwgNjAwMDBtcwor
c2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCB8IE1heGltdW0gbnVtYmVyIG9mIElOSVQgcmV0cmFu
c21pc3Npb25zIHwgOAorc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQgfCBNYXhpbXVtIG51bWJl
ciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJv
cnRlZCB8IDEwCitzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0IHwgTWF4aW11bSBudW1iZXIgb2Yg
ZmFpbGVkIHJldHJhbnNtaXNzaW9ucyBiZWZvcmUgYSBwYXRoIGZhaWxzIHwgNQorc2N0cF9lY25f
ZW5hYmxlIHwgRW5hYmxpbmcgZXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIHwgMQor
c2N0cF9zdHJpY3Rfc2Fja3MgfCBDb250cm9sIHRoZSBjb2hlcmVuY2Ugb2YgU0FDS3MgfCAxCitz
Y3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQgfCBEZWZhdWx0IGRlbGF5ZWQgU0FDSyB0aW1l
ciB8IDIwMG1zCitzY3RwX3NhY2tfZnJlcV9kZWZhdWx0IHwgRGVmYXVsdCBTQUNLIGZyZXF1ZW5j
eSB8IDIKK3NjdHBfbnJfc2Fja19vbl9vZmYgfCBUdXJuIG5vbi1yZW5lZ2FibGUgU0FDS3Mgb24g
b3Igb2ZmIHwgMAorc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSB8IEVuYWJsZSBzZW5kaW5n
IG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJpdCB8IDAKK3NjdHBfbm9fY3N1bV9vbl9sb29wYmFj
ayB8IEVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNoZWNrc3VtIG9uIHBhY2tldHMgc2Vu
dCBvbiBsb29wYmFjayB8IDEKK3NjdHBfcGVlcl9jaHVua19vaCB8IEFtb3VudCB0byBkZWJpdCBw
ZWVycyByd25kIHBlciBjaHVuayBzZW50IHwgMjU2CitzY3RwX21heF9idXJzdF9kZWZhdWx0IHwg
RGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHwgMAorc2N0cF91c2VfY3duZF9i
YXNlZF9tYXhidXJzdCB8IFVzZSBtYXggYnVyc3QgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNv
bmdlc3Rpb24gd2luZG93IHwgMQorc2N0cF9oYl9tYXhidXJzdCB8IENvbmZpcm1hdGlvbiBIZWFy
dGJlYXQgbWF4IGJ1cnN0IHwgNAorc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlIHwgRGVmYXVsdCBt
YXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jIHwgNTEyCitzY3RwX21pbl9zcGxpdF9wb2ludCB8
IE1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIHwgMjkwNAorc2N0cF9jaHVua3Nj
YWxlIHwgVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNzYWdl
cyB8IDEwCitzY3RwX21idWZfdGhyZXNob2xkX2NvdW50IHwgTWF4aW11bSBudW1iZXIgb2Ygc21h
bGwgbWJ1ZnMgaW4gYSBjaGFpbiB8IDUKK3NjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQg
fCBEZWFmdWx0IHRpbWUgYmV0d2VlbiB0d28gSGVhcnRiZWF0cyB8IDMwMDAwbXMKK3NjdHBfcG10
dV9yYWlzZV90aW1lX2RlZmF1bHQgfCBEZWZhdWx0IFBNVFUgcmFpc2UgdGltZXIgfCA2MDBzZWNz
CitzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCB8IERlZmF1bHQgc2h1dGRvd24gZ3Vh
cmQgdGltZXIgfCAxODBzZWNzCitzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0IHwgRGVmYXVs
dCBzZWNyZXQgbGlmZXRpbWUgfCAzNjAwc2Vjcworc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQgfCBU
aHJlc2hvbGQgd2hlbiBtb3JlIHNwYWNlIHNob3VsZCBiZSBhZGRlZCB0byBhIHNvY2tldCBzZW5k
IGJ1ZmZlciB8IDE0NTIKK3NjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0IHwgRGVmYXVs
dCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyB8IDEwCitzY3RwX2NtdF9vbl9vZmYgfCBUdXJu
IENNVCBvbiBvciBvZmYuIHwgMAorc2N0cF9jbXRfdXNlX2RhYyB8IFVzZSBkZWxheWVkIGFja25v
d2xlZGdtZW50IGZvciBDTVQgfCAwCitzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0IHwgRGVmYXVs
dCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHdoZW4gZmFzdCByZXRyYW5zbWl0dGluZyB8
IDQKK3NjdHBfYXV0b19hc2NvbmYgfCBFbmFibGUgU0NUUCBBdXRvLUFTQ09ORiB8IDEKK3NjdHBf
bXVsdGlwbGVfYXNjb25mcyB8IEVuYWJsZSBTQ1RQIE11bGlwbGUtQVNDT05GcyB8IDAKK3NjdHBf
YXNjb25mX2F1dGhfbm9jaGsgfCBEaXNhYmxlIFNDVFAgQVNDT05GIEFVVEggcmVxdWlyZW1lbnQg
fCAwCitzY3RwX2F1dGhfZGlzYWJsZSB8IERpc2FibGUgU0NUUCBBVVRIIGZ1bmN0aW9uIHwgMAor
c2N0cF9uYXRfZnJpZW5kbHkgfCBTQ1RQIE5BVCBmcmllbmRseSBvcGVyYXRpb24gfCAxCitzY3Rw
X2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5IHwgRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1m
cmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gfCAwCitzY3RwX3VkcF90dW5uZWxpbmdfcG9y
dCB8IFNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQgfCA5ODk5CitzY3RwX2RvX2RyYWlu
IHwgRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNh
bGxzIHwgMQorc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCB8IFdoZW4gb25lLTIt
b25lIGhpdHMgcWxpbWl0IGFib3J0IHwgMAorc2N0cF9zdHJpY3RfZGF0YV9vcmRlciB8IEVuZm9y
Y2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRlIGRhdGEgfCAw
CitzY3RwX21pbl9yZXNpZHVhbCB8IE1pbmltdW0gcmVzaWR1YWwgZGF0YSBjaHVuayBpbiBzZWNv
bmQgcGFydCBvZiBzcGxpdCB8IDE0NTIKK3NjdHBfbWF4X3JldHJhbl9jaHVuayB8IE1heGltdW0g
dGltZXMgYW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRlZCBiZWZvcmUgdGhlIGFz
c29jaWF0aW9uIGFib3J0cyB8IDMwCitzY3RwX2RlZmF1bHRfY2NfbW9kdWxlIHwgRGVmYXVsdCBj
b25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHwgMAorc2N0cF9kZWZhdWx0X3NzX21vZHVsZSB8IERl
ZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlIHwgMAorc2N0cF9kZWZhdWx0X2ZyYWdfaW50
ZXJsZWF2ZSB8IERlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZlbCB8IDEKK3NjdHBfbW9i
aWxpdHlfYmFzZSB8IEVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkgfCAwCitzY3RwX21vYmlsaXR5
X2Zhc3RoYW5kb2ZmIHwgRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmIHwgMAorc2N0cF9MMl9hYmNf
dmFyaWFibGUgfCBTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwpIHwgMQorc2N0cF92
dGFnX3RpbWVfd2FpdCB8IFZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIHwgNjBz
ZWNzCitzY3RwX2JsYWNraG9sZSB8IEVuYWJsZSBTQ1RQIGJsYWNraG9saW5nIHwgMAorc2N0cF9w
YXRoX3BmX3RocmVzaG9sZCB8IERlZmF1bHQgcG90ZW50aWFsbHkgZmFpbGVkIHRocmVzaG9sZCB8
IDY1NTM1CitzY3RwX3J0dHZhcl9idyB8IFNoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9u
IHJ0dCBjYWxjIHwgNAorc2N0cF9ydHR2YXJfcnR0IHwgU2hpZnQgYW1vdW50IGZvciBydHQgc21v
b3RoaW5nIG9uIHJ0dCBjYWxjIHwgNQorc2N0cF9ydHR2YXJfZXFyZXQgIHwgV2hhdCB0byByZXR1
cm4gd2hlbiBydHQgYW5kIGJ3IGFyZSB1bmNoYW5nZWQgfCAwCitzY3RwX3N0ZWFkeV9zdGVwIHwg
SG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZCB8IDIw
CitzY3RwX3VzZV9kY2NjX2VjbiB8IEVuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTiB8
IDEKK3NjdHBfYnVmZmVyX3NwbGl0dGluZyB8IEVuYWJsZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHNw
bGl0dGluZyB8IDAKK3NjdHBfaW5pdGlhbF9jd25kIHwgSW5pdGlhbCBjb25nZXN0aW9uIHdpbmRv
dyBpbiBNVFVzIHwgMworc2N0cF9sb2dnaW5nX2xldmVsIHwgTG9nZ2luZyBsZXZlbCB8IDAKK3Nj
dHBfZGVidWdfb24gfCBUdXJucyBkZWJ1ZyBvdXRwdXQgb24gb3Igb2ZmLiB8IDAKKworIyMgRXhh
bXBsZXMKKworU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvdHJlZS9tYXN0
ZXIvcHJvZ3JhbXMKKworCisjIyBSZWZlcmVuY2VzCisKKyMjIyMgU0NUUAorUi4gU3Rld2FydDo8
L2JyPgorYFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbGAuPC9icj4KK1tSRkMg
NDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCksIFNlcHRlbWJlciAyMDA3
LgorCisjIyMjIGF1dGgKK00uIFTDvHhlbiwgUi4gU3Rld2FydCwgUC4gTGVpLCBhbmQgRS4gUmVz
Y29ybGE6PC9icj4KK2BBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhlIFN0cmVhbSBDb250cm9s
IFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUClgLjwvYnI+CitbUkZDIDQ4OTVdKGh0dHA6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4OTUpLCBBdWd1c3QgMjAwNy4KKworIyMjIyBhZGRpcAor
Ui4gU3Rld2FydCwgUS4gWGllLCBNLiBUw7x4ZW4sIFMuIE1hcnV5YW1hLCBhbmQgTS4gS296dWth
OjwvYnI+CitgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBEeW5h
bWljIEFkZHJlc3MgUmVjb25maWd1cmF0aW9uYC48L2JyPgorW1JGQyA1MDYxXShodHRwOi8vdG9v
bHMuaWV0Zi5vcmcvaHRtbC9yZmM1MDYxKSwgU2VwdGVtYmVyIDIwMDcuCisKKyMjIyMgc29ja2V0
QVBJCitSLiBTdGV3YXJ0LCBNLiBUw7x4ZW4sIEsuIFBvb24sIGFuZCBWLiBZYXNldmljaDo8L2Jy
PgorYFNvY2tldHMgQVBJIEV4dGVuc2lvbnMgZm9yIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21p
c3Npb24gUHJvdG9jb2wgKFNDVFApYC48L2JyPgorW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0
Zi5vcmcvaHRtbC9yZmM2NDU4KSwgRGV6ZW1iZXIgMjAxMS4KKworIyMjIyBzdHJlYW1SZXNldAor
Ui4gU3Rld2FydCwgTS4gVMO8eGVuLCBhbmQgUC4gTGVpOjwvYnI+CitgU3RyZWFtIENvbnRyb2wg
VHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25maWd1cmF0aW9uYC48L2Jy
PgorW1JGQyA2NTI1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTI1KSwgRmVicnVh
cnkgMjAxMi4KKworIyMjIyB1ZHBlbmNhcHMKK00uIFTDvHhlbiBhbmQgUi4gU3Rld2FydDwvYnI+
CitgVURQIEVuY2Fwc3VsYXRpb24gb2YgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3Rv
Y29sIChTQ1RQKSBQYWNrZXRzIGZvciBFbmQtSG9zdCB0byBFbmQtSG9zdCBDb21tdW5pY2F0aW9u
YDwvYnI+CitbUkZDIDY5NTFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTUxKSwg
TWF5IDIwMTMuCisKKyMjIyMgc2Fjay1pbW0KK00uIFTDvHhlbiwgSS4gUsO8bmdlbGVyLCBhbmQg
Ui4gU3Rld2FydDo8L2JyPgorYFNBQ0stSU1NRURJQVRFTFkgRXh0ZW5zaW9uIGZvciB0aGUgU3Ry
ZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sYDwvYnI+CitbUkZDIDcwNTNdKGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MDUzKSwgTm92ZW1iZXIgMjAxMy4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL01hbnVhbC50ZXggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwudGV4CmluZGV4IGU2OWRl
MjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjdlYzFlMWY1M2IzMWU0ZWQxZDdk
Yjk2ODU3MjdjY2M5MWM1ZDBlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC50ZXgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvTWFudWFsLnRleApAQCAtMCwwICsxLDEzMzMgQEAKKyUKKyUgQ29weXJpZ2h0
IChDKSAyMDEyLTIwMTUgSXJlbmUgUnVlbmdlbGVyCislIENvcHlyaWdodCAoQykgMjAxMi0yMDE1
IE1pY2hhZWwgVHVleGVuCislCislIEFsbCByaWdodHMgcmVzZXJ2ZWQuCislCislIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorJSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyUgYXJlIG1ldDoKKyUgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyUgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorJSAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorJSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCislICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCislIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CislICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorJSAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyUKKyUgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyUgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCislIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCislIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJP
SkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCislIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCislIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCislIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorJSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorJSBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCislIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyUgU1VDSCBEQU1BR0UuCislCitcZG9jdW1l
bnRjbGFzc1thNHBhcGVyXXthcnRpY2xlfQorJQorXHVzZXBhY2thZ2V7bG9uZ3RhYmxlfQorJQor
XHRpdGxle1NvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBJbXBsZW1lbnRhdGlvbiAo
dXNyc2N0cCl9CitcYXV0aG9ye0kuflJcInVuZ2VsZXIlCisgICAgICAgIFx0aGFua3N7TVwidW5z
dGVyIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcywKKyAgICAgICAgICAgICAgICBEZXBh
cnRtZW50IG9mIEVsZWN0cmljYWwgRW5naW5lZXJpbmcKKyAgICAgICAgICAgICAgICBhbmQgQ29t
cHV0ZXIgU2NpZW5jZSwKKyAgICAgICAgICAgICAgICBTdGVnZXJ3YWxkc3RyLn4zOSwKKyAgICAg
ICAgICAgICAgICBELTQ4NTY1IFN0ZWluZnVydCwKKyAgICAgICAgICAgICAgICBHZXJtYW55LAor
ICAgICAgICAgICAgICAgIFx0ZXh0dHR7aS5ydWVuZ2VsZXJAZmgtbXVlbnN0ZXIuZGV9Ln0KKyAg
ICAgICAgXGFuZAorICAgICAgICBNLn5UXCJ1eGVuJQorICAgICAgICBcdGhhbmtze01cInVuc3Rl
ciBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsCisgICAgICAgICAgICAgICAgRGVwYXJ0
bWVudCBvZiBFbGVjdHJpY2FsIEVuZ2luZWVyaW5nCisgICAgICAgICAgICAgICAgYW5kIENvbXB1
dGVyIFNjaWVuY2UsCisgICAgICAgICAgICAgICAgU3RlZ2Vyd2FsZHN0ci5+MzksCisgICAgICAg
ICAgICAgICAgRC00ODU2NSBTdGVpbmZ1cnQsCisgICAgICAgICAgICAgICAgR2VybWFueSwKKyAg
ICAgICAgICAgICAgICBcdGV4dHR0e3R1ZXhlbkBmaC1tdWVuc3Rlci5kZX0ufQorfQorJQorXGJl
Z2lue2RvY3VtZW50fQorXHNldGNvdW50ZXJ7c2VjbnVtZGVwdGh9ezR9Citcc2V0Y291bnRlcnt0
b2NkZXB0aH17NH0KK1xtYWtldGl0bGUKK1x0YWJsZW9mY29udGVudHMKKworXHNlY3Rpb257SW50
cm9kdWN0aW9ufQorSW4gdGhpcyBtYW51YWwgdGhlIHNvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVz
ZXItbGFuZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRlc2NyaWJlZC4gCitJdCBpcyBiYXNlZCBv
biBSRkMgNjQ1OH5cY2l0ZXtzb2NrZXRBUEl9LiBUaGUgbWFpbiBmb2N1cyBvZiB0aGlzIGRvY3Vt
ZW50IGlzIG9uIHBvaW50aW5nIG91dAorIHRoZSBkaWZmZXJlbmNlcyB0byB0aGUgU0NUUCBTb2Nr
ZXRzIEFQSS4gRm9yIGFsbCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQSSB0aGF0IGFyZSBub3QK
KyBtZW50aW9uZWQgaW4gdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4LiBR
dWVzdGlvbnMgYWJvdXQgU0NUUCBjYW4gaG9wZWZ1bGx5IGJlCisgYW5zd2VyZWQgYnkgUkZDfjQ5
NjB+XGNpdGV7U0NUUH0uCisgCitcc2VjdGlvbntHZXR0aW5nIFN0YXJ0ZWR9CitUaGUgVXNlci1s
YW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAsIFVidW50dSAxMS4xMCwg
V2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCAKK2FuZCBNQUMgT1MgWCAxMC43LgorVGhlIGN1cnJl
bnQgdmVyc2lvbiBvZiB0aGUgVXNlci1sYW5kIHN0YWNrIGlzIHByb3ZpZGVkIG9uIFx0ZXh0aXR7
aHR0cDovL3NjdHAuZmgtbXVlbnN0ZXIuZGUvc2N0cC11c2VyLWxhbmQtc3RhY2suaHRtbH0uCitE
b3dubG9hZCB0aGUgdGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91ciBjaG9p
Y2UuIAorVGhlIHRhcmJhbGwgY29udGFpbnMgYWxsIHRoZSBzb3VyY2VzIHRvIGJ1aWxkIHRoZSBs
aWJ1c3JzY3RwLCB3aGljaCBoYXMgdG8gYmUgbGlua2VkIHRvIHRoZSBvYmplY3QgZmlsZSBvZiBh
biAKK2V4YW1wbGUgcHJvZ3JhbS4gSW4gYWRkaXRpb24gdGhlcmUgYXJlIHR3byBhcHBsaWNhdGlv
bnMgaW4gdGhlIGZvbGRlciBcdGV4dGl0e3Byb2dyYW1zfSB0aGF0IGNhbiBiZSBidWlsdCBhbmQg
cnVuLgorIAorXHN1YnNlY3Rpb257QnVpbGRpbmcgdGhlIExpYnJhcnkgYW5kIHRoZSBBcHBsaWNh
dGlvbnN9Citcc3Vic3Vic2VjdGlvbntVbml4LWxpa2UgT3BlcmF0aW5nIFN5c3RlbXN9CitJbiB0
aGUgZm9sZGVyIFx0ZXh0aXR7dXNyc2N0cH0gdHlwZQorXGJlZ2lue3ZlcmJhdGltfQorLi9ib290
c3RyYXAKKy4vY29uZmlndXJlCittYWtlCitcZW5ke3ZlcmJhdGltfQorTm93LCB0aGUgbGlicmFy
eSBcdGV4dGl0e2xpYnVzcnNjdHAubGF9IGhhcyBiZWVuIGJ1aWx0IGluIHRoZSBzdWJkaXJlY3Rv
cnkgXHRleHRpdHt1c3JzY3RwbGlifSwgYW5kIHRoZSBleGFtcGxlIAorcHJvZ3JhbXMgYXJlIHJl
YWR5IHRvIHJ1biBmcm9tIHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHtwcm9ncmFtc30uCisKK0lm
IHlvdSBoYXZlIHJvb3QgcHJpdmlsZWdlcyBvciBhcmUgaW4gdGhlIHN1ZG9lciBncm91cCwgeW91
IGNhbiBpbnN0YWxsIHRoZSBsaWJyYXJ5IGluIFx0ZXh0aXR7L3Vzci9sb2NhbC9saWJ9IAorYW5k
IGNvcHkgdGhlIGhlYWRlciBmaWxlIHRvIFx0ZXh0aXR7L3Vzci9pbmNsdWRlfSB3aXRoIHRoZSBj
b21tYW5kCitcYmVnaW57dmVyYmF0aW19CitzdWRvIG1ha2UgaW5zdGFsbAorXGVuZHt2ZXJiYXRp
bX0KKworXHN1YnN1YnNlY3Rpb257V2luZG93c30KK09uIFdpbmRvd3MgeW91IG5lZWQgYSBjb21w
aWxlciBsaWtlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBZb3UgY2FuIGJ1aWxkIHRoZSBsaWJy
YXJ5IGFuZCB0aGUKK2V4YW1wbGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHRvb2wg
b2YgdGhlIGNvbXBpbGVyIGJ5IHR5cGluZworXGJlZ2lue3ZlcmJhdGltfQorbm1ha2UgLWYgTWFr
ZWZpbGUubm1ha2UKK1xlbmR7dmVyYmF0aW19CitpbiB0aGUgZGlyZWN0b3J5IFx0ZXh0aXR7dXNy
c2N0cH0uCisKK1xzdWJzZWN0aW9ue1J1bm5pbmcgdGhlIFRlc3QgUHJvZ3JhbXN9CitUaGVyZSBh
cmUgdHdvIHRlc3QgcHJvZ3JhbXMgaW5jbHVkZWQsIGEgZGlzY2FyZCBzZXJ2ZXIgYW5kIGEgY2xp
ZW50LiBZb3UgY2FuIHJ1biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRoZQorY2xpZW50IHRvIHRo
ZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGluIGFuZCBzZW5kcyB0aGVt
IHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZQoraW4gdGhlIHRlcm1pbmFs
IGFuZCBkaXNjYXJkcyBpdC4gVGhlIHNvdXJjZXMgb2YgdGhlIHNlcnZlciBhcmUgYWxzbyBwcm92
aWRlZCBpbiBTZWN0aW9uflxyZWZ7c2VydmVyfSBhbmQgdGhvc2UKK29mIHRoZSBjbGllbnQgaW4g
U2VjdGlvbn5ccmVme2NsaWVudH0uCisKK1xzdWJzdWJzZWN0aW9ue1VzaW5nIFVEUCBFbmNhcHN1
bGF0aW9ufQorQm90aCBwcm9ncmFtcyBjYW4gZWl0aGVyIHNlbmQgZGF0YSBvdmVyIFNDVFAgZGly
ZWN0bHkgb3IgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCB0aHVzIGVuY2Fwc3VsYXRpbmcgdGhlCitT
Q1RQIHBhY2tldCBpbiBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24gbG9v
cGJhY2sgb3IgaW4gYSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkgCitOQVQgYm94ZXMgaW52
b2x2ZWQuIEluIGFsbCBvdGhlciBjYXNlcyBpdCBpcyBiZXR0ZXIgdG8gdXNlIFVEUCBlbmNhcHN1
bGF0aW9uLgorCitUaGUgdXNhZ2Ugb2YgdGhlIGRpc2NhcmRcX3NlcnZlciBpcworXGJlZ2lue3Zl
cmJhdGltfQorZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0IHJlbW90ZV9lbmNhcHNf
cG9ydF0KK1xlbmR7dmVyYmF0aW19CitGb3IgVURQIGVuY2Fwc3VsYXRpb24gdGhlIHBvcnRzIGhh
dmUgdG8gYmUgc3BlY2lmaWVkLiBUaGUgbG9jYWwgYW5kIHJlbW90ZSBlbmNhcHN1bGF0aW9uIHBv
cnRzIGNhbiBiZSBhcmJpdHJhcmlseQorc2V0LgorRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbAor
XGJlZ2lue3ZlcmJhdGltfQorLi9kaXNjYXJkX3NlcnZlciAxMTExMSAyMjIyMgorXGVuZHt2ZXJi
YXRpbX0KK29uIGEgVW5peC1saWtlIE9TIGFuZAorXGJlZ2lue3ZlcmJhdGltfQorZGlzY2FyZF9z
ZXJ2ZXIuZXhlIDExMTExIDIyMjIyCitcZW5ke3ZlcmJhdGltfQorb24gV2luZG93cy4KKworVGhl
IGNsaWVudCBuZWVkcyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLCB0aGUgc2VydmVyJ3MgYWRk
cmVzcyBhbmQgaXRzIHBvcnQuCitJdHMgdXNhZ2UgaXMKK1xiZWdpbnt2ZXJiYXRpbX0KK2NsaWVu
dCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2NhbF9lbmNhcHNfcG9ydCBy
ZW1vdGVfZW5jYXBzX3BvcnRdCitcZW5ke3ZlcmJhdGltfQorVGhlIHJlbW90ZSBhZGRyZXNzIGlz
IHRoZSBzZXJ2ZXIncyBhZGRyZXNzLiBJZiBjbGllbnQgYW5kIHNlcnZlciBhcmUgc3RhcnRlZCBv
biB0aGUgc2FtZSBtYWNoaW5lLAordGhlIGxvb3BiYWNrIGFkZHJlc3MgMTI3LjAuMC4xIGNhbiBi
ZSB1c2VkIGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyBvbiBXaW5kb3dz
LgorVGhlIGRpc2NhcmQgcG9ydCBpcyA5LCB0aHVzIDkgaGFzIHRvIGJlIHRha2VuIGFzIHJlbW90
ZSBwb3J0LiBUaGUgZW5jYXBzdWxhdGlvbiBwb3J0cyBoYXZlIHRvCittYXRjaCB0aG9zZSBvZiB0
aGUgc2VydmVyLCBpLmUuIHRoZSBzZXJ2ZXIncyBsb2NhbFxfZW5jYXBzXF9wb3J0IGlzIHRoZSBj
bGllbnQncworcmVtb3RlXF9lbmNhcHNcX3BvcnQgYW5kIHZpY2UgdmVyc2EuIFRodXMsIHRoZSBj
bGllbnQgY2FuIGJlIHN0YXJ0ZWQgd2l0aAorXGJlZ2lue3ZlcmJhdGltfQorLi9jbGllbnQgMTI3
LjAuMC4xIDkgMCAyMjIyMiAxMTExMQorXGVuZHt2ZXJiYXRpbX0KK29uIGEgVW5peC1saWtlIE9T
IGFuZAorXGJlZ2lue3ZlcmJhdGltfQorY2xpZW50LmV4ZSAxOTIuMTY4LjAuMSA5IDAgMjIyMjIg
MTExMTEKK1xlbmR7dmVyYmF0aW19CitvbiBXaW5kb3dzIHByb3ZpZGVkIHlvdXIgbG9jYWwgSVAg
YWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KKworXHN1YnN1YnNlY3Rpb257U2VuZGluZyBvdmVyIFND
VFB9CitUbyBzZW5kIGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IHlvdSBtaWdodCBuZWVkIHJvb3Qg
cHJpdmlsZWdlcyBiZWNhdXNlIHJhdyBzb2NrZXRzIGFyZSB1c2VkLgorVGh1cyBpbnN0ZWFkIG9m
IHNwZWNpZnlpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgeW91IGhhdmUgdG8gc3RhcnQgdGhl
IHByb2dyYW1zIHByZXBlbmRpbmcgCitcdGV4dHR0e3N1ZG99IG9yIGluIGNhc2Ugb2YgV2luZG93
cyBzdGFydCB0aGUgcHJvZ3JhbSBmcm9tIGFuIGFkbWluaXN0cmF0b3IgY29uc29sZS4KKworXHN1
YnN1YnNlY3Rpb257VXNpbmcgdGhlIENhbGxiYWNrIEFQSX0KK0luc3RlYWQgb2YgYXNraW5nIGNv
bnN0YW50bHkgZm9yIG5ldyBkYXRhLCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0IGlz
IHRyaWdnZXJlZCBieSAKK1NDVFAuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRvIGJlIHJlZ2lz
dGVyZWQgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBkYXRhIGlzIHJlYWR5IHRvCitiZSBk
ZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorCitUaGUgZGlzY2FyZFxfc2VydmVyIGhhcyBh
IGZsYWcgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3byBtb2RpLiBJZiAgdXNlXF9jYiBpcyBzZXQg
dG8gMSwgdGhlCitjYWxsYmFjayBBUEkgd2lsbCBiZSB1c2VkLiBUbyBjaGFuZ2UgdGhlIHNldHRp
bmcsIGp1c3Qgc2V0IHRoZSBmbGFnIGFuZCBjb21waWxlIHRoZSBwcm9ncmFtIGFnYWluLgorCisK
KworCitcc2VjdGlvbntCYXNpYyBPcGVyYXRpb25zfQorQWxsIHN5c3RlbSBjYWxscyBzdGFydCB3
aXRoIHRoZSBwcmVmaXggXHRleHRpdHt1c3JzY3RwXF99IHRvIGRpc3Rpbmd1aXNoIHRoZW0gZnJv
bSB0aGUga2VybmVsIHZhcmlhbnRzLiAKK1NvbWUgb2YgdGhlbSBhcmUgY2hhbmdlZCB0byBhY2Nv
dW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJsYW5kIGVudmlyb25tZW50
LiAKKworXHN1YnNlY3Rpb257RGlmZmVyZW5jZXMgdG8gUkZDIDY0NTh9Citcc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9pbml0KCl9CitFdmVyeSBhcHBsaWNhdGlvbiBoYXMgdG8gc3RhcnQgd2l0aCBc
dGV4dGl0e3VzcnNjdHBcX2luaXQoKX0uIFRoaXMgZnVuY3Rpb24gY2FsbHMgXHRleHRpdHtzY3Rw
XF9pbml0KCl9IGFuZCByZXNlcnZlcwordGhlIG1lbW9yeSBuZWNlc3NhcnkgdG8gYWRtaW5pc3Rl
ciB0aGUgZGF0YSB0cmFuc2Zlci4KK1RoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMgCitcYmVnaW57
dmVyYmF0aW19Cit2b2lkCit1c3JzY3RwX2luaXQodWludDE2X3QgdWRwX3BvcnQpCitcZW5ke3Zl
cmJhdGltfQorQXMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzZW5kIGRhdGEgZGlyZWN0
bHkgb3ZlciBTQ1RQIGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2FuCitwcm9jZXNzIFNDVFAg
cGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRvIGVuY2Fwc3VsYXRlIFND
VFAgaW50byBVRFAKK2EgVURQIHBvcnQgaGFzIHRvIGJlIHNwZWNpZmllZCwgdG8gd2hpY2ggdGhl
IGRhdGFncmFtcyBjYW4gYmUgc2VudC4gVGhpcyBsb2NhbCBVRFAgcG9ydCAgaXMgc2V0IAord2l0
aCB0aGUgcGFyYW1ldGVyIFx0ZXh0dHR7dWRwXF9wb3J0fS4gVGhlIGRlZmF1bHQgdmFsdWUgaXMg
OTg5OSwgdGhlIHN0YW5kYXJkIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQuCitJZiBVRFAgZW5jYXBz
dWxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFzIHRvIGJlIHNldCB0byAw
LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9maW5pc2goKX0KK0F0IHRoZSBlbmQgb2YgdGhl
IHByb2dyYW0gXHRleHRpdHt1c3JzY3RwXF9maW5pc2goKX0gc2hvdWxkIGJlIGNhbGxlZCB0byBm
cmVlIGFsbCB0aGUgbWVtb3J5IHRoYXQgaGFzIGJlZW4KK2FsbG9jYXRlZCBiZWZvcmUuCitUaGUg
ZnVuY3Rpb24gcHJvdG90eXBlIGlzIAorXGJlZ2lue3ZlcmJhdGltfQoraW50Cit1c3JzY3RwX2Zp
bmlzaCh2b2lkKS4KK1xlbmR7dmVyYmF0aW19CitUaGUgcmV0dXJuIGNvZGUgaXMgMCBvbiBzdWNj
ZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zb2NrZXQoKX0KK0EgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBlbmRwb2ludCBpcyBhIHNv
Y2tldC4gSXMgaXQgY3JlYXRlZCB3aXRoIFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9LgorVGhl
IGZ1bmN0aW9uIHByb3RvdHlwZSBpczoKK1xiZWdpbnt2ZXJiYXRpbX0KK3N0cnVjdCBzb2NrZXQg
KgordXNyc2N0cF9zb2NrZXQoaW50IGRvbWFpbiwgCisgICAgICAgICAgICAgICBpbnQgdHlwZSwg
CisgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2wsCisgICAgICAgICAgICAgICBpbnQgKCpyZWNl
aXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBkYXRhbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX3JjdmluZm8sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZs
YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdWxwX2luZm8pLAor
ICAgICAgICAgICAgICAgaW50ICgqc2VuZF9jYikoc3RydWN0IHNvY2tldCAqc29jaywgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYl9mcmVlKSwKKyAgICAgICAgICAg
ICAgIHVpbnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAgICAgICAgICAgIHZvaWQgKnVscF9pbmZv
KS4KK1xlbmR7dmVyYmF0aW19CitUaGUgYXJndW1lbnRzIHRha2VuIGZyb20gUkZDfjY0NTggYXJl
OgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBkb21haW46IFBGXF9JTkVUIG9yIFBGXF9JTkVUNiBj
YW4gYmUgdXNlZC4KK1xpdGVtIHR5cGU6IEluIGNhc2Ugb2YgYSBvbmUtdG8tbWFueSBzdHlsZSBz
b2NrZXQgaXQgaXMgU09DS1xfU0VRUEFDS0VULCBpbiBjYXNlIG9mIGEgb25lLXRvLW9uZSBzdHls
ZSAKK3NvY2tldCBpdCBpcyBTT0NLXF9TVFJFQU0uIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUg
ZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc29ja2V0IHR5cGVzIHBsZWFzZQorcmVmZXIgdG8gUkZD
fjY0NTguCitcaXRlbSBwcm90b2NvbDogU2V0IElQUFJPVE9cX1NDVFAuCitcZW5ke2l0ZW1pemV9
CisKK0luIHVzcnNjdHAsIGEgY2FsbGJhY2sgQVBJIGNhbiBiZSB1c2VkLgorXGJlZ2lue2l0ZW1p
emV9CitcaXRlbSBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgb2YgdGhlIHJlY2VpdmUgYW5kIHNlbmQg
Y2FsbGJhY2tzIGFyZSBuZXcgYXJndW1lbnRzIHRvIHRoZSBzb2NrZXQgY2FsbC4gSWYgbm8gY2Fs
bGJhY2sgQVBJIGlzIHVzZWQsIHRoZXNlIG11c3QgYmUgXHRleHRpdHtOVUxMfS4KK1xpdGVtIFRo
ZSBcdGV4dGl0e3NiXF90aHJlc2hvbGR9IHNwZWNpZmllcyB0aGUgYW1vdW50IG9mIGZyZWUgc3Bh
Y2UgaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlciBiZWZvcmUgdGhlIHNlbmQgZnVuY3Rpb24gaW4g
dGhlIGFwcGxpY2F0aW9uIGlzIGNhbGxlZC4gSWYgYSBzZW5kIGNhbGxiYWNrIGZ1bmN0aW9uIGlz
IHNwZWNpZmllZCBhbmQgXHRleHRpdHtzYlxfdGhyZXNob2xkfSBpcyAwLCB0aGUgZnVuY3Rpb24g
aXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIHJvb20gaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZl
ci4KK1xpdGVtIEFkZGl0aW9uYWwgZGF0YSBtYXkgYmUgcGFzc2VkIGFsb25nIHdpdGhpbiB0aGUg
XHRleHRpdHt1bHBcX2luZm99IHBhcmFtZXRlci4gVGhpcyB2YWx1ZSB3aWxsIGJlIHBhc3NlZCB0
byB0aGUgXHRleHRpdHtyZWNlaXZlXF9jYn0gd2hlbiBpdCBpcyBpbnZva2VkLgorXGVuZHtpdGVt
aXplfQorCitPbiBzdWNjZXNzIFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9IHJldHVybnMgdGhl
IHBvaW50ZXIgdG8gdGhlIG5ldyBzb2NrZXQgaW4gdGhlIFx0ZXh0dHR7c3RydWN0IHNvY2tldH0g
ZGF0YSB0eXBlLiAKK0l0IHdpbGwgYmUgbmVlZGVkIGluIGFsbCBvdGhlciBzeXN0ZW0gY2FsbHMu
IEluIGNhc2Ugb2YgYSBmYWlsdXJlIE5VTEwgaXMgcmV0dXJuZWQgYW5kCitlcnJubyBpcyBzZXQg
dG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X2Nsb3NlKCl9CisKK1RoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgXHRleHRpdHt1c3JzY3RwXF9j
bG9zZSgpfSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0gICAKK3ZvaWQKK3VzcnNjdHBfY2xvc2Uoc3Ry
dWN0IHNvY2tldCAqc28pLgorIFxlbmR7dmVyYmF0aW19CitUaHVzIHRoZSBvbmx5IGRpZmZlcmVu
Y2UgaXMgdGhlIGFic2VuY2Ugb2YgYSByZXR1cm4gY29kZS4gCisgCitcc3Vic2VjdGlvbntTYW1l
IEZ1bmN0aW9uYWxpdHkgYXMgUkZDIDY0NTh9CitUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoYXZl
IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlaXIga2VybmVsIHBlbmRhbnRzLiBUaGVyZSBw
cm90b3R5cGVzCithcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuIEZv
ciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHBsZWFzZSByZWZlciB0byBSRkN+NjQ1OC4KKworXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfYmluZCgpfQorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBc
dGV4dGl0e3VzcnNjdHBcX2JpbmQoKX0gaXMgCitcYmVnaW57dmVyYmF0aW19CitpbnQKK3VzcnNj
dHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsCisgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pLgorXGVuZHt2ZXJiYXRpbX0g
ICAgIAorVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0gc286IFBvaW50
ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgp
fS4KK1xpdGVtIGFkZHI6IFRoZSBhZGRyZXNzIHN0cnVjdHVyZSAoc3RydWN0IHNvY2thZGRyXF9p
biBmb3IgYW4gSVB2NCBhZGRyZXNzCisgICAgICBvciBzdHJ1Y3Qgc29ja2FkZHJcX2luNiBmb3Ig
YW4gSVB2NiBhZGRyZXNzKS4KK1xpdGVtIGFkZHJsZW46IFRoZSBzaXplIG9mIHRoZSBhZGRyZXNz
IHN0cnVjdHVyZS4KK1xlbmR7aXRlbWl6ZX0KK1x0ZXh0aXR7dXNyc2N0cFxfYmluZCgpfSByZXR1
cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfbGlzdGVuKCl9CitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIFx0ZXh0
aXR7dXNyc2N0cFxfbGlzdGVuKCl9IGlzIAorXGJlZ2lue3ZlcmJhdGltfQoraW50Cit1c3JzY3Rw
X2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgIGludCBiYWNrbG9nKS4K
KyBcZW5ke3ZlcmJhdGltfSAgICAgIAorVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXpl
fQorXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0
e3VzcnNjdHBcX3NvY2tldCgpfS4KK1xpdGVtIGJhY2tsb2c6IElmIGJhY2tsb2cgaXMgbm9uLXpl
cm8sIGVuYWJsZSBsaXN0ZW5pbmcsIGVsc2UgZGlzYWJsZQorICAgICAgbGlzdGVuaW5nLgorXGVu
ZHtpdGVtaXplfQorXHRleHRpdHt1c3JzY3RwXF9saXN0ZW4oKX0gcmV0dXJucyAwIG9uIHN1Y2Nl
c3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X2FjY2VwdCgpfQorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2Fj
Y2VwdCgpfSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0gICAgICAgICAgICAgICAgCitzdHJ1Y3Qgc29j
a2V0ICoKK3VzcnNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAg
c3RydWN0IHNvY2thZGRyICogYWRkciwKKyAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGFkZHJs
ZW4pLgorIFxlbmR7dmVyYmF0aW19CisgVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXpl
fQorXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0
e3VzcnNjdHBcX3NvY2tldCgpfS4KK1xpdGVtIGFkZHI6IE9uIHJldHVybiwgIHRoZSBwcmltYXJ5
IGFkZHJlc3Mgb2YgdGhlIHBlZXIgKHN0cnVjdCBzb2NrYWRkclxfaW4gZm9yIGFuIElQdjQgYWRk
cmVzcyBvcgorICAgICAgc3RydWN0IHNvY2thZGRyXF9pbjYgZm9yIGFuIElQdjYgYWRkcmVzcyku
CitcaXRlbSBhZGRybGVuOiBTaXplIG9mIHRoZSByZXR1cm5lZCBhZGRyZXNzIHN0cnVjdHVyZS4K
K1xlbmR7aXRlbWl6ZX0KK1x0ZXh0aXR7dXNyc2N0cFxfYWNjZXB0KCl9IHJldHVybnMgdGhlIGFj
Y2VwdGVkIHNvY2tldCBvbiBzdWNjZXNzIGFuZCBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisK
K1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX2Nvbm5lY3QoKX0KK1RoZSBmdW5jdGlvbiBwcm90b3R5
cGUgb2YgXHRleHRpdHt1c3JzY3RwXF9jb25uZWN0KCl9IGlzIAorXGJlZ2lue3ZlcmJhdGltfSAg
ICAgCitpbnQKK3VzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCisgICAgICAgICAgICAgICAgc29ja2xlbl90IGFk
ZHJsZW4pCisgXGVuZHt2ZXJiYXRpbX0KK1RoZSBhcmd1bWVudHMgYXJlCitcYmVnaW57aXRlbWl6
ZX0KK1xpdGVtIHNvOiBQb2ludGVyIHRvIHRoZSBzb2NrZXQgYXMgcmV0dXJuZWQgYnkgXHRleHRp
dHt1c3JzY3RwXF9zb2NrZXQoKX0uCisgXGl0ZW0gbmFtZTogQWRkcmVzcyBvZiB0aGUgcGVlciB0
byBjb25uZWN0IHRvIChzdHJ1Y3Qgc29ja2FkZHJcX2luIGZvciBhbiBJUHY0IGFkZHJlc3Mgb3IK
KyAgICAgIHN0cnVjdCBzb2NrYWRkclxfaW42IGZvciBhbiBJUHY2IGFkZHJlc3MpLgorXGl0ZW0g
YWRkcmxlbjogU2l6ZSBvZiB0aGUgcGVlcidzIGFkZHJlc3MuCitcZW5ke2l0ZW1pemV9CitcdGV4
dGl0e3VzcnNjdHBcX2Nvbm5lY3QoKX0gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNh
c2Ugb2YgYW4gZXJyb3IuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3NodXRkb3duKCl9IAor
VGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX3NodXRkb3duKCl9IGlz
IAorXGJlZ2lue3ZlcmJhdGltfSAgIAoraW50Cit1c3JzY3RwX3NodXRkb3duKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBpbnQgaG93KS4KK1xlbmR7dmVyYmF0aW19CitUaGUgYXJndW1lbnRzIGFyZQorXGJl
Z2lue2l0ZW1pemV9CitcaXRlbSBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IG9mIHRoZSBhc3Nv
Y2lhdGlvbiB0byBiZSBjbG9zZWQuCitcaXRlbSBob3c6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBz
aHV0ZG93bi4gIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3M6CitcYmVnaW57aXRlbWl6ZX0KK1xp
dGVtIFNIVVRcX1JEOiAgRGlzYWJsZXMgZnVydGhlciByZWNlaXZlIG9wZXJhdGlvbnMuICBObyBT
Q1RQIHByb3RvY29sCisgICAgICAgICBhY3Rpb24gaXMgdGFrZW4uCitcaXRlbSBTSFVUXF9XUjog
IERpc2FibGVzIGZ1cnRoZXIgc2VuZCBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVzIHRoZSBTQ1RQ
CisgICAgICAgICBzaHV0ZG93biBzZXF1ZW5jZS4KK1xpdGVtIFNIVVRcX1JEV1I6ICBEaXNhYmxl
cyBmdXJ0aGVyIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucywgYW5kCisgICAgICAgICBpbml0
aWF0ZXMgdGhlIFNDVFAgc2h1dGRvd24gc2VxdWVuY2UuCitcZW5ke2l0ZW1pemV9CitcZW5ke2l0
ZW1pemV9CitcdGV4dGl0e3VzcnNjdHBcX3NodXRkb3duKCl9IHJldHVybnMgMCBvbiBzdWNjZXNz
IGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcc2VjdGlvbntTZW5kaW5nIGFuZCBSZWNl
aXZpbmcgRGF0YX0KK1NpbmNlIHRoZSBwdWJsaWNhdGlvbiBvZiBSRkN+NjQ1OCB0aGVyZSBpcyBv
bmx5IG9uZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBhbmQgb25lIGZvciByZWNlaXZpbmcKK3RoYXQg
aXMgbm90IGRlcHJlY2F0ZWQuIFRoZXJlZm9yZSwgb25seSB0aGVzZSB0d28gYXJlIGRlc2NyaWJl
ZCBoZXJlLgorCitcc3Vic2VjdGlvbnt1c3JzY3RwXF9zZW5kdigpfQorVGhlIGZ1bmN0aW9uIHBy
b3RvdHlwZSBpcworXGJlZ2lue3ZlcmJhdGltfQorc3NpemVfdAordXNyc2N0cF9zZW5kdihzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAg
ICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRycywK
KyAgICAgICAgICAgICAgaW50IGFkZHJjbnQsCisgICAgICAgICAgICAgIHZvaWQgKmluZm8sCisg
ICAgICAgICAgICAgIHNvY2tsZW5fdCBpbmZvbGVuLAorICAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgaW5mb3R5cGUsCisgICAgICAgICAgICAgIGludCBmbGFncykuCitcZW5ke3ZlcmJhdGltfQor
VGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0gc286IFRoZSBzb2NrZXQg
dG8gc2VuZCBkYXRhIG9uLgorXGl0ZW0gZGF0YTogQXMgaXQgaXMgbW9yZSBjb252ZW5pZW50IHRv
IHNlbmQgZGF0YSBpbiBhIGJ1ZmZlciBhbmQgbm90IGEgXHRleHR0dHtzdHJ1Y3QgaW92ZWN9IGRh
dGEgc3RydWN0dXJlLCB3ZQorY2hvc2UgdG8gcGFzcyB0aGUgZGF0YSBhcyBhIHZvaWQgcG9pbnRl
ci4KK1xpdGVtIGxlbjogTGVuZ3RoIG9mIHRoZSBkYXRhLgorXGl0ZW0gYWRkcnM6IEluIHRoaXMg
dmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1vc3Qgb25lIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgc3Vw
cG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBhIGNvbm5lY3RlZAorc29ja2V0LCB0aGUgcGFyYW1ldGVy
IFx0ZXh0dHR7YWRkcnN9IGNhbiBiZSBzZXQgdG8gTlVMTC4KK1xpdGVtIGFkZHJjbnQ6IE51bWJl
ciBvZiBhZGRyZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJlc3MgaXMgc3VwcG9ydGVkLCBhZGRy
Y250IGlzIDAgaWYgYWRkcnMgaXMgTlVMTCBhbmQgCisxIG90aGVyd2lzZS4KK1xpdGVtIGluZm86
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBzdG9yZWQgaW4gXHRleHR0
dHt2b2lkICppbmZvfS4gVGhlIGRhdGEgdHlwZXMgXHRleHR0dHtzdHJ1Y3R+c2N0cFxfc25kaW5m
b30sCitcdGV4dHR0e3N0cnVjdH5zY3RwXF9wcmluZm99LCBhbmQgXHRleHR0dHtzdHJ1Y3R9IFxs
aW5lYnJlYWsgXHRleHR0dHtzY3RwXF9zZW5kdlxfc3BhfSBhcmUgc3VwcG9ydGVkIGFzIGRlZmlu
ZWQgaW4gCitSRkN+NjQ1OC4gU3VwcG9ydCBmb3IgXHRleHR0dHtzdHJ1Y3RzY3RwXF9hdXRoaW5m
b30gaXMgbm90IGltcGxlbWVudGVkIHlldCwgdGhlcmVmb3JlLCBlcnJubyBpcyBzZXQgRUlOVkFM
CithbmQgLTEgd2lsbCBiZSByZXR1cm5lZCwgaWYgaXQgaXMgdXNlZC4KK1xpdGVtIGluZm9sZW46
IExlbmd0aCBvZiBpbmZvIGluIGJ5dGVzLgorXGl0ZW0gaW5mb3R5cGU6IElkZW50aWZpZXMgdGhl
IHR5cGUgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGluZm8uIFBvc3NpYmxlIHZhbHVl
cyBhcmUKK1NDVFBcX1NFTkRWXF9OT0lORk8sIFNDVFBcX1NFTkRWXF9TTkRJTkZPLCBcbGluZWJy
ZWFrIFNDVFBcX1NFTkRWXF9QUklORk8sIFNDVFBcX1NFTkRWXF9TUEEuIAorRm9yIGFkZGl0aW9u
YWwgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4LgorXGl0ZW0gZmxhZ3M6IEZs
YWdzIGFzIGRlc2NyaWJlZCBpbiBSRkN+NjQ1OC4KK1xlbmR7aXRlbWl6ZX0KKworXHRleHRpdHt1
c3JzY3RwXF9zZW5kdigpfSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgc2VudCwgb3IgLTEg
aWYgYW4gZXJyb3IKK29jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRoZW4gc2V0IGFw
cHJvcHJpYXRlbHkuCisKK1xzdWJzZWN0aW9ue3VzcnNjdHBcX3JlY3Z2KCl9CitUaGUgZnVuY3Rp
b24gcHJvdG90eXBlIGlzCitcYmVnaW57dmVyYmF0aW19Citzc2l6ZV90Cit1c3JzY3RwX3JlY3Z2
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgIHZvaWQgKmRidWYsCisgICAgICAgICAg
ICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCisgICAg
ICAgICAgICAgc29ja2xlbl90ICogZnJvbWxlbiwKKyAgICAgICAgICAgICB2b2lkICppbmZvLAor
ICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKKyAgICAgICAgICAgICB1bnNpZ25lZCBp
bnQgKmluZm90eXBlLAorICAgICAgICAgICAgIGludCAqbXNnX2ZsYWdzKS4KK1xlbmR7dmVyYmF0
aW19CitUaGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBzbzogVGhlIHNv
Y2tldCB0byByZWNlaXZlIGRhdGEgb24uCitcaXRlbSBkYnVmOiBBbmFsb2cgdG8gXHRleHRpdHt1
c3JzY3RwXF9zZW5kdigpfSB0aGUgZGF0YSBpcyByZXR1cm5lZCBpbiBhIGJ1ZmZlci4KK1xpdGVt
IGxlbjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCitcaXRlbSBmcm9tOiBBIHBvaW50
ZXIgdG8gYW4gYWRkcmVzcyB0byBiZSBmaWxsZWQgd2l0aCB0aGUgc2VuZGVyIG9mIHRoZQorICAg
ICAgcmVjZWl2ZWQgbWVzc2FnZSdzIGFkZHJlc3MuCitcaXRlbSBmcm9tbGVuOiBBbiBpbi9vdXQg
cGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIGZyb20gbGVuZ3RoLgorXGl0ZW0gaW5mbzogQSBwb2lu
dGVyIHRvIHRoZSBidWZmZXIgdG8gaG9sZCB0aGUgYXR0cmlidXRlcyBvZiB0aGUgcmVjZWl2ZWQK
KyAgICAgIG1lc3NhZ2UuICBUaGUgc3RydWN0dXJlIHR5cGUgb2YgaW5mbyBpcyBkZXRlcm1pbmVk
IGJ5IHRoZQorICAgICAgaW5mb3R5cGUgcGFyYW1ldGVyLiBUaGUgYXR0cmlidXRlcyByZXR1cm5l
ZCBpbiBcdGV4dHR0e2luZm99IGhhdmUgdG8gYmUgCisgICAgICBoYW5kbGVkIGluIHRoZSBzYW1l
IHdheSBhcyBzcGVjaWZpZWQgaW4gUkZDfjY0NTguCitcaXRlbSBpbmZvbGVuOiAgQW4gaW4vb3V0
IHBhcmFtZXRlciBkZXNjcmliaW5nIHRoZSBzaXplIG9mIHRoZSBpbmZvIGJ1ZmZlci4KK1xpdGVt
IGluZm90eXBlOiAgT24gcmV0dXJuLCAqaW5mb3R5cGUgaXMgc2V0IHRvIHRoZSB0eXBlIG9mIHRo
ZSBpbmZvCisgICAgICBidWZmZXIuICBUaGUgY3VycmVudCBkZWZpbmVkIHZhbHVlcyBhcmUgU0NU
UFxfUkVDVlZcX05PSU5GTywgCisgICAgICBTQ1RQXF9SRUNWVlxfUkNWSU5GTywgU0NUUFxfUkVD
VlZcX05YVElORk8sIGFuZAorICAgICAgU0NUUFxfUkVDVlZcX1JOLiBBIGRldGFpbGVkIGRlc2Ny
aXB0aW9uIGlzIGdpdmVuIGluIFJGQ342NDU4LgorXGl0ZW0gZmxhZ3M6IEEgcG9pbnRlciB0byBh
biBpbnRlZ2VyIHRvIGJlIGZpbGxlZCB3aXRoIGFueSBtZXNzYWdlIGZsYWdzCisgICAgICAoZS5n
LiwgTVNHXF9OT1RJRklDQVRJT04pLiAgTm90ZSB0aGF0IHRoaXMgZmllbGQgaXMgYW4gaW4vb3V0
CisgICAgICBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2ZSBtYXkgYWxzbyBiZSBw
YXNzZWQgaW50byB0aGUKKyAgICAgIHZhbHVlIChlLmcuLCBNU0dcX0VPUikuICBSZXR1cm5pbmcg
ZnJvbSB0aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZQorICAgICAgd2lsbCBkaWZmZXIgZnJvbSBp
dHMgb3JpZ2luYWwgdmFsdWUuCitcZW5ke2l0ZW1pemV9CisKK1x0ZXh0aXR7dXNyc2N0cFxfcmVj
dnYoKX0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsIG9yIC0xIGlmIGFuIGVycm9y
CitvY2N1cnJlZC4gIFRoZSB2YXJpYWJsZSBlcnJubyBpcyB0aGVuIHNldCBhcHByb3ByaWF0ZWx5
LgorCisgIAorCitcc2VjdGlvbntTb2NrZXQgT3B0aW9uc30KK1NvY2tldCBvcHRpb25zIGFyZSB1
c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzb2NrZXQgY2FsbHMuCitUaGVp
ciBiZWhhdmlvciBpcyBzcGVjaWZpZWQgaW4gUkZDfjY0NTguIFRoZSBmdW5jdGlvbnMgdG8gZ2V0
IG9yIHNldCB0aGVtIGFyZQorCitcYmVnaW57dmVyYmF0aW19CitpbnQKK3VzcnNjdHBfZ2V0c29j
a29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwK
KyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
dm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpvcHRsZW4pCitc
ZW5ke3ZlcmJhdGltfQorYW5kCitcYmVnaW57dmVyYmF0aW19CitpbnQKK3VzcnNjdHBfc2V0c29j
a29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwK
KyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAg
Y29uc3Qgdm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IG9wdGxl
bikuCitcZW5ke3ZlcmJhdGltfQorCithbmQgdGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVt
aXplfQorXGl0ZW0gc286ICBUaGUgc29ja2V0IG9mIHR5cGUgc3RydWN0IHNvY2tldC4KK1xpdGVt
IGxldmVsOiAgU2V0IHRvIElQUFJPVE9cX1NDVFAgZm9yIGFsbCBTQ1RQIG9wdGlvbnMuCitcaXRl
bSBvcHRuYW1lOiAgVGhlIG9wdGlvbiBuYW1lIGFzIHNwZWNpZmllZCBpbiBUYWJsZX5ccmVme29w
dGlvbnN9LgorXGl0ZW0gb3B0dmFsOiBUaGUgYnVmZmVyIHRvIHN0b3JlIHRoZSB2YWx1ZSBvZiB0
aGUgb3B0aW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiBUYWJsZX5ccmVm
e29wdGlvbnN9LgorXGl0ZW0gb3B0bGVuOiAgVGhlIHNpemUgb2YgdGhlIGJ1ZmZlciAob3IgdGhl
IGxlbmd0aCBvZiB0aGUgb3B0aW9uCisgICAgICByZXR1cm5lZCBpbiBjYXNlIG9mIFx0ZXh0aXR7
dXNyc2N0cFxfZ2V0c29ja29wdH0pLgorXGVuZHtpdGVtaXplfQorCitUaGVzZSBmdW5jdGlvbnMg
cmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworXGJlZ2lu
e2xvbmd0YWJsZX17fGx8bHxjfH0gCitcaGxpbmUKK3tcYmZzZXJpZXMgT3B0aW9ufSZ7XGJmc2Vy
aWVzIERhdGF0eXBlfSAme1xiZnNlcmllcyByL3d9XHRhYnVsYXJuZXdsaW5lIAorXGVuZGhlYWQK
K1xobGluZQorU0NUUFxfUlRPSU5GTyZzdHJ1Y3Qgc2N0cFxfcnRvaW5mbyZyL3dcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCitTQ1RQXF9BU1NPQ0lORk8mc3RydWN0IHNjdHBcX2Fzc29jcGFyYW1zJnIv
d1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0lOSVRNU0cmc3RydWN0IHNjdHBcX2luaXRt
c2cmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfTk9ERUxBWSZpbnQmci93XHRhYnVs
YXJuZXdsaW5lIFxobGluZQorU0NUUFxfQVVUT0NMT1NFJmludCZyL3dcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCitTQ1RQXF9QUklNQVJZXF9BRERSJnN0cnVjdCBzY3RwXF9zZXRwcmltJnIvd1x0YWJ1
bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0FEQVBUQVRJT05cX0xBWUVSJnN0cnVjdCBzY3RwXF9z
ZXRhZGFwdGF0aW9uJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0RJU0FCTEVcX0ZS
QUdNRU5UUyZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfUEVFUlxfQUREUlxf
UEFSQU1TJnN0cnVjdCBzY3RwXF9wYWRkcnBhcmFtcyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CitTQ1RQXF9JXF9XQU5UXF9NQVBQRURcX1Y0XF9BRERSJmludCZyL3dcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCitTQ1RQXF9NQVhTRUcmc3RydWN0IHNjdHBcX2Fzc29jXF92YWx1ZSZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9ERUxBWUVEXF9TQUNLJnN0cnVjdCBzY3RwXF9zYWNrXF9p
bmZvJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0ZSQUdNRU5UXF9JTlRFUkxFQVZF
JmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9QQVJUSUFMXF9ERUxJVkVSWVxf
UE9JTlQmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0hNQUNcX0lERU5UJnN0
cnVjdCBzY3RwXF9obWFjYWxnbyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9BVVRI
XF9BQ1RJVkVcX0tFWSZzdHJ1Y3Qgc2N0cFxfYXV0aGtleWlkJnIvd1x0YWJ1bGFybmV3bGluZSBc
aGxpbmUKK1NDVFBcX0FVVE9cX0FTQ09ORiZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQor
U0NUUFxfTUFYXF9CVVJTVCZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3ZhbHVlJnIvd1x0YWJ1bGFybmV3
bGluZSBcaGxpbmUKK1NDVFBcX0NPTlRFWFQmc3RydWN0IHNjdHBcX2Fzc29jXF92YWx1ZSZyL3dc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9FWFBMSUNJVFxfRU9SJmludCZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRVVTRVxfUE9SVCZpbnQmci93XHRhYnVsYXJuZXdsaW5l
IFxobGluZQorU0NUUFxfRVZFTlQmc3RydWN0IHNjdHBcX2V2ZW50JnIvd1x0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKK1NDVFBcX1JFQ1ZSQ1ZJTkZPJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CitTQ1RQXF9SRUNWTlhUSU5GTyZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxf
REVGQVVMVFxfU05ESU5GTyZzdHJ1Y3Qgc2N0cFxfc25kaW5mbyZyL3dcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCitTQ1RQXF9ERUZBVUxUXF9QUklORk8mc3RydWN0IHNjdHBcX2RlZmF1bHRcX3ByaW5m
byZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRU1PVEVcX1VEUFxfRU5DQVBTXF9Q
T1JUJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9FTkFCTEVcX1NUUkVBTVxf
UkVTRVQmc3RydWN0IHNjdHBcX2Fzc29jXF92YWx1ZSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5l
CitTQ1RQXF9TVEFUVVMmc3RydWN0IHNjdHBcX3N0YXR1cyZyXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorU0NUUFxfR0VUXF9QRUVSXF9BRERSXF9JTkZPJnN0cnVjdCBzY3RwXF9wYWRkcmluZm8mclx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1BFRVJcX0FVVEhcX0NIVU5LUyZzdHJ1Y3Qgc2N0
cFxfYXV0aGNodW5rcyZyXHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfTE9DQUxcX0FVVEhc
X0NIVU5LUyZzdHJ1Y3Qgc2N0cFxfYXV0aGNodW5rcyZyXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
U0NUUFxfR0VUXF9BU1NPQ1xfTlVNQkVSJnVpbnQzMlxfdCZyXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorU0NUUFxfR0VUXF9BU1NPQ1xfSURcX0xJU1Qmc3RydWN0IHNjdHBcX2Fzc29jXF9pZHMmclx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1JFU0VUXF9TVFJFQU1TJnN0cnVjdCBzY3RwXF9y
ZXNldFxfc3RyZWFtcyZ3XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfUkVTRVRcX0FTU09D
JnN0cnVjdCBzY3RwXF9hc3NvY1xfdCZ3XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfQURE
XF9TVFJFQU1TJnN0cnVjdCBzY3RwXF9hZGRcX3N0cmVhbXMmd1x0YWJ1bGFybmV3bGluZSBcaGxp
bmUKK1xjYXB0aW9ue1NvY2tldCBPcHRpb25zIHN1cHBvcnRlZCBieSB1c3JzY3RwfQorXGxhYmVs
e29wdGlvbnN9CitcZW5ke2xvbmd0YWJsZX0KK0FuIG92ZXJ2aWV3IG9mIHRoZSBzdXBwb3J0ZWQg
b3B0aW9ucyBpcyBnaXZlbiBpbiBUYWJsZX5ccmVme29wdGlvbnN9LiBUaGVpciB1c2UgaXMgZGVz
Y3JpYmVkIGluIFJGQ342NDU4flxjaXRle3NvY2tldEFQSX0sIFJGQ342NTI1flxjaXRle3N0cmVh
bVJlc2V0fSwgYW5kflxjaXRle3VkcGVuY2Fwc30uCisKK1xzZWN0aW9ue1N5c2N0bCB2YXJpYWJs
ZXN9CisKK0luIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBmb3IgaW5zdGFuY2UgRnJlZUJT
RCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBhcmFtZXRlcnMKK2luIHRoZSBvcGVyYXRpbmcg
c3lzdGVtLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBjYWxsZWQgc3lzY3RsIHZhcmlhYmxlcy4KKwor
SW4gdXNyc2N0cCBhcHBsaWNhdGlvbnMgY2FuIHNldCBvciByZXRyaWV2ZSB0aGVzZSB2YXJpYWJs
ZXMgd2l0aCB0aGUgZnVuY3Rpb25zCitcYmVnaW57dmVyYmF0aW19Cit2b2lkCit1c3JzY3RwX3N5
c2N0bF9zZXRfICMjICh1aW50MzJfdCB2YWx1ZSkKK1xlbmR7dmVyYmF0aW19CithbmQKK1xiZWdp
bnt2ZXJiYXRpbX0KK3VpbnQzMl90Cit1c3JzY3RwX3N5c2N0bF9nZXRfICMjICh2b2lkKQorXGVu
ZHt2ZXJiYXRpbX0KK3Jlc3BlY3RpdmVseSwgd2hlcmUgXCNcIyBzdGFuZHMgZm9yIHRoZSBuYW1l
IG9mIHRoZSB2YXJpYWJsZS4KKworSW4gdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGEgc2hvcnQg
ZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBnaXZlbi4KKworXHN1YnNlY3Rp
b257TWFuaXB1bGF0ZSBNZW1vcnl9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfc2VuZHNwYWNlKCl9CitUaGUgc3BhY2Ugb2YgdGhlIGF2YWlsYWJsZSBzZW5kIGJ1
ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0
ZXMKK3RvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAkMl57MzJ9LTEkIGJ5dGVzLgorCitcc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcmVjdnNwYWNlKCl9CitUaGUgc3Bh
Y2Ugb2YgdGhlIGF2YWlsYWJsZSByZWNlaXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0
cyBkZWZhdWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0ZXMKK3RvIGEgdmFsdWUgYmV0d2VlbiAwIGFu
ZCAkMl57MzJ9LTEkIGJ5dGVzLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfaGFzaHRibHNpemUoKX0KK1RoZSBUQ0IgKFRocmVhZCBDb250cm9sIEJsb2NrKSBo
YXNoIHRhYmxlIHNpemVzLCBpLmUuIHRoZSBzaXplIG9mIG9uZSBUQ0IgaW4gdGhlIGhhc2ggdGFi
bGUsIGNhbiBiZSB0dW5lZCBiZXR3ZWVuIAorMSBhbmQgJDJeezMyfS0xJCBieXRlcy4gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0ZXMuIEEgVENCIGNvbnRhaW5zIGZvciBpbnN0YW5jZSBw
b2ludGVycyB0byB0aGUgc29ja2V0LCB0aGUKK2VuZHBvaW50LCBpbmZvcm1hdGlvbiBhYm91dCB0
aGUgYXNzb2NpYXRpb24gYW5kIHNvbWUgc3RhdGlzdGljIGRhdGEuCisKK1xzdWJzdWJzZWN0aW9u
e3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wY2J0YmxzaXplKCl9CitUaGUgUENCIChQcm90
b2NvbCBDb250cm9sIEJsb2NrKSBoYXNoIHRhYmxlIHNpemVzLCBpLmUuIHRoZSBzaXplIG9mIG9u
ZSBQQ0IgaW4gdGhlIGhhc2ggdGFibGUsIGNhbiBiZSB0dW5lZCBiZXR3ZWVuIAorMSBhbmQgJDJe
ezMyfS0xJCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5dGVzLiBUaGUgUENCIGNv
bnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4gZW5kcG9pbnQuCisKK1xz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zeXN0ZW1cX2ZyZWVcX3Jl
c2NcX2xpbWl0KCl9CitUaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IGNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIAor
MCBhbmQgJDJeezMyfS0xJC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAwMC4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Fzb2NcX2ZyZWVcX3Jlc2NcX2xpbWl0
KCl9CitUaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNhY2hlZCBy
ZXNvdXJjZXMgaW4gYW4gYXNzb2NpYXRpb24uIEl0IGNhbiBiZSBzZXQgYmV0d2VlbiAKKzAgYW5k
ICQyXnszMn0tMSQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCitcc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWJ1ZlxfdGhyZXNob2xkXF9jb3VudCgpfQorRGF0
YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJlIGNoYWluZWQgdG9nZXRo
ZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBhIGNoYWluCitjYW4gYmUg
c2V0IHdpdGggdGhpcyBwYXJhbWV0ZXIsIGJlZm9yZSBhbiBtYnVmIGNsdXNldCBpcyB1c2VkLiBU
aGUgZGVmYXVsdCBpcyA1LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxf
c2N0cFxfYWRkXF9tb3JlXF90aHJlc2hvbGQoKX0KK1RCRAorVGhpcyBwYXJhbWV0ZXIgY29uZmln
dXJlcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVk
IHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTQ1MiBieXRl
cy4KKworCitcc3Vic2VjdGlvbntDb25maWd1cmUgUlRPfQorVGhlIHJldHJhbnNtaXNzaW9uIHRp
bWVvdXQgKFJUTyksIGkuZS4gdGhlIHRpbWUgdGhhdCBjb250cm9scyB0aGUgcmV0cmFuc21pc3Np
b24gb2YgbWVzc2FnZXMsIGhhcworc2V2ZXJhbCBwYXJhbWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFu
Z2VkLCBmb3IgZXhhbXBsZSB0byBzaG9ydGVuIHRoZSB0aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlz
CityZXRyYW5zbWl0dGVkLiBUaGUgcmFuZ2Ugb2YgdGhlc2UgcGFyYW1ldGVycyBpcyBiZXR3ZWVu
IDAgYW5kICQyXnszMn0tMSR+bXMuIAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfcnRvXF9tYXhcX2RlZmF1bHQoKX0KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0
aGUgbWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDYwLDAwMCAoNjB+c2Vj
cykuIAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnRvXF9t
aW5cX2RlZmF1bHQoKX0KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbWluaW11bSByZXRyYW5z
bWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDEsMDAwICgxfnNlYykuIAorCitcc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnRvXF9pbml0aWFsXF9kZWZhdWx0KCl9CitU
aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGluaXRpYWwgcmV0cmFuc21pc3Npb24gdGltZW91dCBp
biBtcyBpcyAzLDAwMCAoM35zZWMpLiBUaGlzIHZhbHVlIGlzIG9ubHkKK25lZWRlZCBiZWZvcmUg
dGhlIGZpcnN0IGNhbGN1bGF0aW9uIG9mIGEgcm91bmQgdHJpcCB0aW1lIHRvb2sgcGxhY2UuCisK
K1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9pbml0XF9ydG9cX21h
eFxfZGVmYXVsdCgpfQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHJldHJhbnNt
aXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4gbXMgaXMgNjAsMDAwICg2MH5zZWNz
KS4gCisKKworXHN1YnNlY3Rpb257U2V0IFRpbWVyc30KK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X3N5c2N0bFxfc2V0XF9zY3RwXF92YWxpZFxfY29va2llXF9saWZlXF9kZWZhdWx0KCl9CitBIGNv
b2tpZSBoYXMgYSBzcGVjaWZpZWQgbGlmZSB0aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBjb29raWUg
aXMgbm90IHZhbGlkIGFueSBtb3JlIGFuZCBhbiBBQk9SVCBpcyBzZW50LgorVGhlIGRlZmF1bHQg
dmFsdWUgaW4gbXMgaXMgNjAsMDAwICg2MH5zZWNzKS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2hlYXJ0YmVhdFxfaW50ZXJ2YWxcX2RlZmF1bHQoKX0KK1Nl
dCB0aGUgZGVmYXVsdCB0aW1lIGJldHdlZW4gdHdvIGhlYXJ0YmVhdHMuIFRoZSBkZWZhdWx0IGlz
IDMwLDAwMH5tcy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBc
X3NodXRkb3duXF9ndWFyZFxfdGltZVxfZGVmYXVsdCgpfQorSWYgYSBTSFVURE9XTiBpcyBub3Qg
YW5zd2VyZWQgd2l0aCBhIFNIVVRET1dOLUFDSyB3aGlsZSB0aGUgc2h1dGRvd24gZ3VhcmQgdGlt
ZXIgaXMgc3RpbGwKK3J1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxsIGJlIGFib3J0ZWQgYWZ0
ZXIgdGhlIGRlZmF1bHQgb2YgMTgwfnNlY3MuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9wbXR1XF9yYWlzZVxfdGltZVxfZGVmYXVsdCgpfQorVEJECitUbyBz
ZXQgdGhlIHNpemUgb2YgdGhlIHBhY2tldHMgdG8gdGhlIGhpZ2hlc3QgdmFsdWUgcG9zc2libGUs
IHRoZSBtYXhpbXVtIHRyYW5zZmVyIHVuaXQgKE1UVSkKK29mIHRoZSBjb21wbGV0ZSBwYXRoIGhh
cyB0byBiZSBrbm93bi4gVGhlIGRlZmF1bHQgdGltZSBpbnRlcnZhbCBmb3IgdGhlIHBhdGggbXR1
IGRpc2NvdmVyeQoraXMgNjAwfnNlY3MuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0
bFxfc2V0XF9zY3RwXF9zZWNyZXRcX2xpZmV0aW1lXF9kZWZhdWx0KCl9CitUQkQKK1RoZSBkZWZh
dWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZlciBpcyAzNjAwfnNlY3MuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF92dGFnXF90aW1lXF93YWl0KCl9CitU
QkQKK1Z0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERlZmF1bHQ6IDYwfnNlY3MK
KworCitcc3Vic2VjdGlvbntTZXQgRmFpbHVyZSBMaW1pdHN9CitUcmFuc21pc3Npb25zIGFuZCBy
ZXRyYW5zbWlzc2lvbnMgb2YgbWVzc2FnZXMgbWlnaHQgZmFpbC4gVG8gcHJvdGVjdCB0aGUgc3lz
dGVtIGFnYWluc3QgdG9vIG1hbnkKK3JldHJhbnNtaXNzaW9ucywgbGltaXRzIGhhdmUgdG8gYmUg
ZGVmaW5lZC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2lu
aXRcX3J0eFxfbWF4XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiBy
ZXRyYW5zbWlzc2lvbnMgb2YgYW4gSU5JVCBjaHVua3MgaXMgOCwgYmVmb3JlIGFuIEFCT1JUIGlz
IHNlbnQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hc3Nv
Y1xfcnR4XF9tYXhcX2RlZmF1bHQoKX0KK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBp
cyBhYm9ydGVkLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisKK1xzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wYXRoXF9ydHhcX21heFxfZGVmYXVsdCgpfQorVGhp
cyBwYXJhbWV0ZXIgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0aCBmYWlsdXJlcyBiZWZv
cmUgdGhlIGFzc29jaWF0aW9uIGlzIGFib3J0ZWQuCitUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1LiBO
b3RpY2UgdGhhdCB0aGUgbnVtYmVyIG9mIHBhdGhzIG11bHRpcGxpZWQgYnkgdGhpcyB2YWx1ZSBz
aG91bGQgYmUgCitlcXVhbCB0byBzY3RwXF9hc3NvY1xfcnR4XF9tYXhcX2RlZmF1bHQuIFRoYXQg
bWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGdvb2QgZm9yIHR3byAKK3Bh
dGhzLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWF4XF9y
ZXRyYW5cX2NodW5rKCl9CitUaGUgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgaG93IG1hbnkgdGltZXMg
YW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRlZCBiZWZvcmUgdGhlIAorYXNzb2Np
YXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gMzAuCisJCQkJCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcGF0aFxfcGZcX3RocmVzaG9sZCgpfQor
VEJECitEZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQuIERlZmF1bHQ6IDY1NTM1
CQkKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Fib3J0XF9p
Zlxfb25lXF8yXF9vbmVcX2hpdHNcX2xpbWl0KCl9CitUQkQKK1doZW4gb25lLTItb25lIGhpdHMg
cWxpbWl0IGFib3J0LiBEZWZhdWx0OiAwCisKKwkJCitcc3Vic2VjdGlvbntDb250cm9sIHRoZSBT
ZW5kaW5nIG9mIFNBQ0tzfQorXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX3NhY2tcX2ZyZXFcX2RlZmF1bHQoKX0KK1RoZSBTQUNLIGZyZXF1ZW5jeSBkZWZpbmVzIHRo
ZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGFyZSBhd2FpdGVkLCBiZWZvcmUgYSBTQUNLIGlzIHNl
bnQuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMi4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX2RlbGF5ZWRcX3NhY2tcX3RpbWVcX2RlZmF1bHQoKX0KK0FzIGEg
U0FDSyAoU2VsZWN0aXZlIEFja25vd2xlZ21lbnQpIGlzIHNlbnQgYWZ0ZXIgZXZlcnkgb3RoZXIg
cGFja2V0LCBhIHRpbWVyIGlzIHNldCB0byBzZW5kIGEKK1NBQ0sgaW4gY2FzZSBhbm90aGVyIHBh
Y2tldCBkb2VzIG5vdCBhcnJpdmUgaW4gZHVlIHRpbWUuIFRoZSBkZWZhdWx0IHZhbHVlIGZvciB0
aGlzIHRpbWVyIGlzCisyMDB+bXMuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9zdHJpY3RcX3NhY2tzKCl9CitUQkQKK1RoaXMgaXMgYSBmbGFnIHRvIHR1cm4g
dGhlIGNvbnRyb2xsaW5nIG9mIHRoZSBjb2hlcmVuY2Ugb2YgU0FDS3Mgb24gb3Igb2ZmLiBUaGUg
ZGVmYXVsdCB2YWx1ZSBpcworMSAob24pLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNj
dGxcX3NldFxfc2N0cFxfbnJcX3NhY2tcX29uXF9vZmYoKX0KK0lmIGEgc2xvdyBob3N0cyByZWNl
aXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0aGF0IGl0cyByZWNlaXZl
ciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IAorZGF0YSBjYW4gb25seSBiZSBhY2NlcHRlZCBpZiBv
bmUgY2h1bmsgd2l0aCBhIGhpZ2hlciBUU04gKFRyYW5zbWlzc2lvbiBTZXF1ZW5jZSBOdW1iZXIp
IHRoYXQgaGFzIAorcHJldmlvdXNseSBiZWVuIGFja25vd2xlZGdlZCBpcyBkcm9wcGVkLiBBcyBh
IGNvbnNlcXVlbmNlIHRoZSBzZW5kZXIgaGFzIHRvIHN0b3JlIGRhdGEsIGV2ZW4gaWYKK3RoZXkg
aGF2ZSBiZWVuIGFja25vd2xlZGdlZCBpbiBjYXNlIHRoZXkgaGF2ZSB0byBiZSByZXRyYW5zbWl0
dGVkLiBJZiB0aGlzIGJlaGF2aW9yIGlzIG5vdCBuZWNlc3NhcnksCitub24tcmVuZWdhYmxlIFNB
Q0tzIGNhbiBiZSB0dXJuZWQgb24uIAorQnkgZGVmYXVsdCB0aGUgdXNlIG9mIG5vbi1yZW5lZ2Fi
bGUgU0FDS3MgaXMgdHVybmVkIG9mZi4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX2VuYWJsZVxfc2Fja1xfaW1tZWRpYXRlbHkoKX0KK0luIHNvbWUgY2FzZXMg
aXQgaXMgbm90IGRlc2lyYWJsZSB0byB3YWl0IGZvciB0aGUgU0FDSyB0aW1lciB0byBleHBpcmUg
YmVmb3JlIGEgU0FDSyBpcyBzZW50LiBJbiB0aGVzZQorY2FzZXMgYSBiaXQgY2FsbGVkIFNBQ0st
SU1NRURJQVRFTFl+XGNpdGV7c2Fjay1pbW19IGNhbiBiZSBzZXQgdG8gcHJvdm9rZSB0aGUgaW5z
dGFudCBzZW5kaW5nIG9mIGEgU0FDSy4gCitUaGUgZGVmYXVsdCBpcyB0byB0dXJuIGl0IG9mZi4g
CisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9MMlxfYWJjXF92
YXJpYWJsZSgpfQorVEJECitTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwpLiBEZWZh
dWx0OiAxCisKK1xzdWJzZWN0aW9ue0NoYW5nZSBNYXggQnVyc3R9CitNYXggYnVyc3QgZGVmaW5l
cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IG1heSBiZSBzZW50IGluIG9uZSBm
bGlnaHQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tYXhc
X2J1cnN0XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1cnN0IGlzIDAs
IHdoaWNoIG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMgYSBmbGlnaHQK
K2lzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgcGFyYW1ldGVyLCBidXQgbWF5IGJlIGJ5IGFub3RoZXIg
b25lLCBzZWUgdGhlIG5leHQgcGFyYWdyYXBoLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfdXNlXF9jd25kXF9iYXNlZFxfbWF4YnVyc3QoKX0KK1RoZSB1c2Ug
b2YgbWF4IGJ1cnN0IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBjb25nZXN0aW9uIHdpbmRv
dyAoY3duZCkuIAorVGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGJ5IGRlZmF1bHQuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9oYlxfbWF4YnVyc3QoKX0KK0hlYXJ0
YmVhdHMgYXJlIG1vc3RseSB1c2VkIHRvIHZlcmlmeSBhIHBhdGguIFRoZWlyIG51bWJlciBjYW4g
YmUgbGltaXRlZC4gVGhlIGRlZmF1bHQgaXMgNC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX2ZyXF9tYXhcX2J1cnN0XF9kZWZhdWx0KCl9CitJbiB0aGUgc3Rh
dGUgb2YgZmFzdCByZXRyYW5zbWlzc2lvbiB0aGUgbnVtYmVyIG9mIHBhY2tldCBidXJzdHMgY2Fu
IGJlIGxpbWl0ZWQuIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyA0LgorCisKK1xzdWJzZWN0aW9ue0hh
bmRsZSBDaHVua3N9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxf
cGVlclxfY2h1bmtcX29oKCl9CitJbiBvcmRlciB0byBrZWVwIHRyYWNrIG9mIHRoZSBwZWVyJ3Mg
YWR2ZXJ0aXNlZCByZWNlaXZlciB3aW5kb3csIHRoZSBzZW5kZXIgY2FsY3VsYXRlcyB0aGUgd2lu
ZG93IGJ5CitzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9mIGRhdGEgc2VudC4gWWV0LCBzb21lIE9T
cyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0aGUgcmVhbCBzcGFjZSBuZWVkZWQKK3Rv
IHN0b3JlIHRoZSBkYXRhLiBUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBhZGRpdGlvbmFsIGFtb3Vu
dCB0byBkZWJpdCB0aGUgcGVlcidzIHJlY2VpdmVyIHdpbmRvdyBwZXIKK2NodW5rIHNlbnQuIFRo
ZSBkZWZhdWx0IHZhbHVlIGlzIDI1Niwgd2hpY2ggaXMgdGhlIHZhbHVlIG5lZWRlZCBieSBGcmVl
QlNELgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWF4XF9j
aHVua3NcX29uXF9xdWV1ZSgpfQorVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgbWF4aW11bSBudW1i
ZXIgb2YgY2h1bmtzIHRoYXQgY2FuIGJlIHF1ZXVlZCBwZXIgYXNzb2NpYXRpb24uIFRoZSBkZWZh
dWx0IAordmFsdWUgaXMgNTEyLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfbWluXF9zcGxpdFxfcG9pbnQoKX0KK1RCRAorVGhlIG1pbmltdW0gc2l6ZSB3aGVu
IHNwbGl0dGluZyBhIGNodW5rIGlzIDI5MDQgYnl0ZXMgYnkgZGVmYXVsdC4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2NodW5rc2NhbGUoKX0KK1RCRAorVGhp
cyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBzY2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3Mg
YW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEwLgkJCisJCQkJCitcc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWluXF9yZXNpZHVhbCgpfQorVEJECitUaGlzIHBh
cmFtZXRlciBjb25maWd1cmVzIHRoZSBtaW5pbXVtIHNpemUgb2YgdGhlIHJlc2lkdWFsIGRhdGEg
Y2h1bmsgaW4gdGhlIHNlY29uZAorcGFydCBvZiB0aGUgc3BsaXQuIFRoZSBkZWZhdWx0IGlzIDE0
NTIuCisKKworXHN1YnNlY3Rpb257Q2FsY3VsYXRlIFJUVH0KK1RoZSBjYWxjdWxhdGlvbiBvZiB0
aGUgcm91bmQgdHJpcCB0aW1lIChSVFQpIGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJhbWV0ZXJzLgor
Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnR0dmFyXF9idygp
fQorVEJECitTaGlmdCBhbW91bnQgZm9yIGJ3IHNtb290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVs
dDogNAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnR0dmFy
XF9ydHQoKX0KK1RCRAorU2hpZnQgYW1vdW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxj
LiBEZWZhdWx0OiA1CisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3Rw
XF9ydHR2YXJcX2VxcmV0KCl9CitUQkQKK1doYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBidyBh
cmUgdW5jaGFuZ2VkLiBEZWZhdWx0OiAwCisKKworXHN1YnNlY3Rpb257SW5mbHVlbmNlIHRoZSBD
b25nZXN0aW9uIENvbnRyb2x9CitUaGUgY29uZ2VzdGlvbiBjb250cm9sIHNob3VsZCBwcm90ZWN0
IHRoZSBuZXR3b3JrIGFnYWluc3QgZmFzdCBzZW5kZXJzLiAKKworXHN1YnN1YnNlY3Rpb257dXNy
c2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2VjblxfZW5hYmxlfQorRXhwbGljaXQgY29uZ2VzdGlv
biBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdC4KKworXHN1YnN1YnNlY3Rp
b257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RlZmF1bHRcX2NjXF9tb2R1bGUoKX0KK1Ro
aXMgcGFyYW1ldGVyIHNldHMgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIGZvciB0aGUgY29uZ2VzdGlv
biBjb250cm9sLgorRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3BlY2lmaWVkIGluIFJGQ340
OTYwLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfaW5pdGlh
bFxfY3duZCgpfQorU2V0IHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGluIE1UVXMuIFRo
ZSBkZWZhdWx0IGlzIDMuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9z
Y3RwXF91c2VcX2RjY2NcX2VjbigpfQorVEJECitFbmFibGUgZm9yIFJUQ0MgQ0MgZGF0YWNlbnRl
ciBFQ04uIERlZmF1bHQ6IDEKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX3N0ZWFkeVxfc3RlcCgpfQorVEJECitIb3cgbWFueSB0aGUgc2FtZXMgaXQgdGFrZXMg
dG8gdHJ5IHN0ZXAgZG93biBvZiBjd25kLiBEZWZhdWx0OiAyMAorCisKK1xzdWJzZWN0aW9ue0Nv
bmZpZ3VyZSBBVVRIIGFuZCBBREQtSVB9CitBbiBpbXBvcnRhbnQgZXh0ZW5zaW9uIG9mIFNDVFAg
aXMgdGhlIGR5bmFtaWMgYWRkcmVzcyByZWNvbmZpZ3VyYXRpb25+XGNpdGV7YWRkaXB9LCBhbHNv
IGtub3duIGFzCitBREQtSVAsIHdoaWNoIGFsbG93cyB0aGUgY2hhbmdpbmcgb2YgYWRkcmVzc2Vz
IGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgYW4gYXNzb2NpYXRpb24uCitGb3IgdGhpcyBmZWF0dXJl
IHRoZSBBVVRIIGV4dGVuc2lvbn5cY2l0ZXthdXRofSBpcyBuZWNlc3NhcnkuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hdXRvXF9hc2NvbmYoKX0KK0lmIFND
VFAgQXV0by1BU0NPTkYgaXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5mb3JtZWQgYXV0b21hdGlj
YWxseSB3aGVuIGEgbmV3IGFkZHJlc3MKK2lzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgZmVhdHVy
ZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0
bFxfc2V0XF9zY3RwXF9tdWx0aXBsZVxfYXNjb25mcygpfQorQnkgZGVmYXVsdCB0aGUgc2VuZGlu
ZyBvZiBtdWx0aXBsZSBBU0NPTkZzIGlzIGRpc2FibGVkLgorCitcc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXV0aFxfZGlzYWJsZSgpfQorVGhlIHVzZSBvZiBBVVRI
LCB3aGljaCBpcyBub3JtYWxseSB0dXJuZWQgb24sIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5n
IHRoaXMgcGFyYW1ldGVyIHRvIDEuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9hc2NvbmZcX2F1dGhcX25vY2hrKCl9CitJdCBpcyBhbHNvIHBvc3NpYmxlIHRv
IGRpc2FibGUgdGhlIHJlcXVpcmVtZW50IHRvIHVzZSBBVVRIIGluIGNvbmp1bmN0aW9uIHdpdGgg
QURELUlQIGJ5IHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIKK3RvIDEuCisKKworXHN1YnNlY3Rpb257
Q29uY3VycmVudCBNdWx0aXBhdGggVHJhbnNmZXIgKENNVCl9CitBIHByb21pbmVudCBmZWF0dXJl
IG9mIFNDVFAgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBzZXZlcmFsIGFkZHJlc3NlcyBmb3Ig
dGhlIHNhbWUgYXNzb2NpYXRpb24uCitPbmUgaXMgdGhlIHByaW1hcnkgcGF0aCwgYW5kIHRoZSBv
dGhlcnMgYXJlIG5lZWRlZCBpbiBjYXNlIG9mIGEgcGF0aCBmYWlsdXJlLiBVc2luZyBDTVQgdGhl
IGRhdGEgaXMgc2VudCAKK29uIHNldmVyYWwgcGF0aHMgdG8gZW5oYW5jZSB0aGUgdGhyb3VnaHB1
dC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2NtdFxfb25c
X29mZigpfQorVG8gdHVybiBDTVQgb24sIHRoaXMgcGFyYW1ldGVyIGhhcyB0byBiZSBzZXQgdG8g
MS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2NtdFxfdXNl
XF9kYWMoKX0KK1RvIHVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50cyB3aXRoIENNVCB0aGlzIHBh
cmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9idWZmZXJcX3NwbGl0dGluZygpfQorRm9yIENNVCBpdCBtYWtlcyBz
ZW5zZSB0byBzcGxpdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgdG8gaGF2ZSBzaGFyZXMg
Zm9yIGVhY2ggcGF0aC4gCitCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRpbmcgaXMgdHVybmVkIG9m
Zi4KKworCitcc3Vic2VjdGlvbntOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCl9CitU
byBiZSBhYmxlIHRvIHBhc3MgTkFUIGJveGVzLCB0aGUgYm94ZXMgaGF2ZSB0byBoYW5kbGUgU0NU
UCBwYWNrZXRzIGluIGEgc3BlY2lmaWMgd2F5LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfbmF0XF9mcmllbmRseSgpfQorU0NUUCBOQVQgZnJpZW5kbHkgb3Bl
cmF0aW9uLiBEZWZhdWx0OjEKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX2luaXRzXF9pbmNsdWRlXF9uYXRcX2ZyaWVuZGx5KCl9CitFbmFibGUgc2VuZGluZyBv
ZiB0aGUgbmF0LWZyaWVuZGx5IFNDVFAgb3B0aW9uIG9uIElOSVRzLiBEZWZhdWx0OiAwCisKK1xz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF91ZHBcX3R1bm5lbGluZ1xf
cG9ydCgpfQorU2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydC4gRGVmYXVsdDogOTg5OQor
Citcc3Vic2VjdGlvbntTQ1RQIE1vYmlsaXR5fQorXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lz
Y3RsXF9zZXRcX3NjdHBcX21vYmlsaXR5XF9iYXNlKCl9CitUQkQKK0VuYWJsZSBTQ1RQIGJhc2Ug
bW9iaWxpdHkuIERlZmF1bHQ6IDAKKworCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfbW9iaWxpdHlcX2Zhc3RoYW5kb2ZmKCl9CitUQkQKK0VuYWJsZSBTQ1RQIGZh
c3QgaGFuZG9mZi4gZGVmYXVsdDogMAorCisKK1xzdWJzZWN0aW9ue01pc2NlbGxhbmVvdXN9Citc
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbm9cX2NzdW1cX29uXF9s
b29wYmFjaygpfQorQ2FsY3VsYXRpbmcgdGhlIGNoZWNrc3VtIGZvciBwYWNrZXRzIHNlbnQgb24g
bG9vcGJhY2sgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorVG8gdHVybiBpdCBvbiwgc2V0IHRo
aXMgcGFyYW1ldGVyIHRvIDAuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9uclxfb3V0Z29pbmdcX3N0cmVhbXNcX2RlZmF1bHQoKX0KK1RoZSBwZWVyIGlzIG5v
dGlmaWVkIGFib3V0IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyBpbiB0aGUgSU5JVCBv
ciBJTklULUFDSyBjaHVuay4KK1RoZSBkZWZhdWx0IGlzIDEwLiAKKworXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RvXF9kcmFpbigpfQorRGV0ZXJtaW5lcyB3aGV0
aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzLiBEZWZhdWx0OiAxCQkK
KworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3N0cmljdFxfZGF0
YVxfb3JkZXIoKX0KK1RCRAorRW5mb3JjZSBzdHJpY3QgZGF0YSBvcmRlcmluZywgYWJvcnQgaWYg
Y29udHJvbCBpbnNpZGUgZGF0YS4gRGVmYXVsdDogMAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zeXNjdGxcX3NldFxfc2N0cFxfZGVmYXVsdFxfc3NcX21vZHVsZSgpfQorU2V0IHRoZSBkZWZh
dWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZS4gSW1wbGVtZW50ZWQgbW9kdWxlcyBhcmU6CitT
Q1RQXF9TU1xfREVGQVVMVCwgU0NUUFxfU1NcX1JPVU5EXF9ST0JJTiwgU0NUUFxfU1NcX1JPVU5E
XF9ST0JJTlxfUEFDS0VULAorU0NUUFxfU1NcX1BSSU9SSVRZLCBTQ1RQXF9TU1xfRkFJUlxfQkFO
RFdJVEgsIGFuZCBTQ1RQXF9TU1xfRklSU1RcX0NPTUUuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWZhdWx0XF9mcmFnXF9pbnRlcmxlYXZlKCl9CitUQkQK
K0RlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZlbC4gRGVmYXVsdDogMQorCitcc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYmxhY2tob2xlKCl9CitUQkQKK0Vu
YWJsZSBTQ1RQIGJsYWNraG9saW5nLiBEZWZhdWx0OiAwCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9sb2dnaW5nXF9sZXZlbCgpfQorU2V0IHRoZSBsb2dnaW5n
IGxldmVsLiBUaGUgZGVmYXVsdCBpcyAwLgorCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9kZWJ1Z1xfb24oKX0KK1R1cm4gZGVidWcgb3V0cHV0IG9uIG9yIG9m
Zi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0YWluIGRlYnVnIG91dHB1dCwKK1ND
VFBcX0RFQlVHIGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxlIGZsYWcuCisKKwkJCQkJCQorJVRo
ZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQ6CislXGJlZ2lue2xvbmd0YWJsZX17
fGx8bHxjfH0gCislXGhsaW5lCisle1xiZnNlcmllcyBQYXJhbWV0ZXJ9JntcYmZzZXJpZXMgTWVh
bmluZ30me1xiZnNlcmllcyBEZWZhdWx0IFZhbHVlfSBcdGFidWxhcm5ld2xpbmUgCislXGVuZGhl
YWQKKyVcaGxpbmUKKyVzY3RwXF9zZW5kc3BhY2UmU2VuZCBidWZmZXIgc3BhY2UmMTg2NDEzNVx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9yZWN2c3BhY2UmUmVjZWl2ZSBidWZmZXIgc3Bh
Y2UmMTg2NDEzNSBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfaGFzaHRibHNpemUmVHVu
YWJsZSBmb3IgVENCIGhhc2ggdGFibGUgc2l6ZXMmMTAyNCBcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfcGNidGJsc2l6ZSZUdW5hYmxlIGZvciBQQ0IgaGFzaCB0YWJsZSBzaXplcyYyNTYg
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3N5c3RlbVxfZnJlZVxfcmVzY1xfbGltaXQm
Q2FjaGVkIHJlc291cmNlcyBpbiB0aGUgc3lzdGVtJjEwMDAgXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorJXNjdHBcX2Fzb2NcX2ZyZWVcX3Jlc2NcX2xpbWl0JkNhc2hlZCByZXNvdXJjZXMgaW4gYW4g
YXNzb2NpYXRpb24mMTAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3J0b1xfbWF4XF9k
ZWZhdWx0JkRlZmF1bHQgdmFsdWUgZm9yIFJUT1xfbWF4JjYwMDAwfm1zIFx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKKyVzY3RwXF9ydG9cX21pblxfZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZvciBSVE9c
X21pbiYxMDAwfm1zIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9ydG9cX2luaXRpYWxc
X2RlZmF1bHQmRGVmYXVsdCB2YWx1ZSBmb3IgUlRPXF9pbml0aWFsJjMwMDB+bXMgXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorJXNjdHBcX2luaXRcX3J0b1xfbWF4XF9kZWZhdWx0JkRlZmF1bHQgdmFs
dWUgZm9yIHRoZSBtYXhpbXVtIFJUTyY2MDAwMH5tcyBcdGFidWxhcm5ld2xpbmUKKyAlICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZm9yIHNlbmRpbmcg
YW4gSU5JVCYgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3ZhbGlkXF9jb29raWVcX2xp
ZmVcX2RlZmF1bHQmVmFsaWQgY29va2llIGxpZmUgdGltZSY2MDAwMH5tcyBcdGFidWxhcm5ld2xp
bmUgXGhsaW5lCislc2N0cFxfaW5pdFxfcnR4XF9tYXhcX2RlZmF1bHQmTWF4aW11bSBudW1iZXIg
b2YgSU5JVCByZXRyYW5zbWlzc2lvbnMmOCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxf
YXNzb2NcX3J0eFxfbWF4XF9kZWZhdWx0Jk1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5z
bWlzc2lvbnMmMTBcdGFidWxhcm5ld2xpbmUKKyUJCQkJCQkmIGJlZm9yZSB0aGUgYXNzb2NpYXRp
b24gaXMgYWJvcnRlZCZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcGF0aFxfcnR4XF9t
YXhcX2RlZmF1bHQmTWF4aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJhbnNtaXNzaW9ucyY1XHRh
YnVsYXJuZXdsaW5lCislCQkJCQkJJmJlZm9yZSBhIHBhdGggZmFpbHMmXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX2VjblxfZW5hYmxlJkVuYWJsaW5nIGV4cGxpY2l0IGNvbmdlc3Rpb24g
bm90aWZpY2F0aW9ucyYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3N0cmljdFxfc2Fj
a3MmQ29udHJvbCB0aGUgY29oZXJlbmNlIG9mIFNBQ0tzJjEgXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorJXNjdHBcX2RlbGF5ZWRcX3NhY2tcX3RpbWVcX2RlZmF1bHQmRGVmYXVsdCBkZWxheWVkIFNB
Q0sgdGltZXImMjAwfm1zXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3NhY2tcX2ZyZXFc
X2RlZmF1bHQmRGVmYXVsdCBTQUNLIGZyZXF1ZW5jeSYyIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
KyVzY3RwXF9uclxfc2Fja1xfb25cX29mZiZUdXJuIG5vbi1yZW5lZ2FibGUgU0FDS3Mgb24gb3Ig
b2ZmJjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2VuYWJsZVxfc2Fja1xfaW1tZWRp
YXRlbHkmRW5hYmxlIHNlbmRpbmcgb2YgdGhlIFNBQ0stJjAgXHRhYnVsYXJuZXdsaW5lIAkJCQkJ
CSZJTU1FRElBVEVMWSBiaXQuJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9ub1xfY3N1
bVxfb25cX2xvb3BiYWNrJkVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNoZWNrc3VtIG9u
JjEgXHRhYnVsYXJuZXdsaW5lCislCQkJCQkJJnBhY2tldHMgc2VudCBvbiBsb29wYmFjayZcdGFi
dWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcGVlclxfY2h1bmtcX29oJkFtb3VudCB0byBkZWJp
dCBwZWVycyByd25kIHBlciBjaHVuayBzZW50JjI1NiBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCisl
c2N0cFxfbWF4XF9idXJzdFxfZGVmYXVsdCZEZWZhdWx0IG1heCBidXJzdCBmb3IgU0NUUCBlbmRw
b2ludHMmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdXNlXF9jd25kXF9iYXNlZFxf
bWF4YnVyc3QmVXNlIG1heCBidXJzdCBiYXNlZCBvbiB0aGUgc2l6ZSBvZiAmMVx0YWJ1bGFybmV3
bGluZQkJCQklCQkJCQkJCSZ0aGUgY29uZ2VzdGlvbiB3aW5kb3cmXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQorJXNjdHBcX2hiXF9tYXhidXJzdCZDb25maXJtYXRpb24gSGVhcnRiZWF0IG1heCBidXJz
dCY0IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9tYXhcX2NodW5rc1xfb25cX3F1ZXVl
JkRlZmF1bHQgbWF4IGNodW5rcyBvbiBxdWV1ZSBwZXIgYXNvYyY1MTIgXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX21pblxfc3BsaXRcX3BvaW50Jk1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0
dGluZyBhIGNodW5rJjI5MDQgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2NodW5rc2Nh
bGUmVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtzIGFuZCYxMFx0YWJ1bGFy
bmV3bGluZSAKKyUJCQkJCQkmbWVzc2FnZXMmXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBc
X21idWZcX3RocmVzaG9sZFxfY291bnQmTWF4aW11bSBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMgaW4g
YSBjaGFpbiY1XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2hlYXJ0YmVhdFxfaW50ZXJ2
YWxcX2RlZmF1bHQmRGVhZnVsdCB0aW1lIGJldHdlZW4gdHdvIEhlYXJ0YmVhdHMmMzAwMDB+bXNc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcG10dVxfcmFpc2VcX3RpbWVcX2RlZmF1bHQm
RGVmYXVsdCBQTVRVIHJhaXNlIHRpbWVyJjYwMH5zZWNzXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
JXNjdHBcX3NodXRkb3duXF9ndWFyZFxfdGltZVxfZGVmYXVsdCZEZWZhdWx0IHNodXRkb3duIGd1
YXJkIHRpbWVyJjE4MH5zZWNzXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3NlY3JldFxf
bGlmZXRpbWVcX2RlZmF1bHQmRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUmMzYwMH5zZWNzIFx0YWJ1
bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9hZGRcX21vcmVcX3RocmVzaG9sZCZUaHJlc2hvbGQg
d2hlbiBtb3JlIHNwYWNlIHNob3VsZCAmMTQ1Mlx0YWJ1bGFybmV3bGluZSAKKyUJCQkJCQkmYmUg
YWRkZWQgdG8gYSBzb2NrZXQgc2VuZCBidWZmZXImXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX25yXF9vdXRnb2luZ1xfc3RyZWFtc1xfZGVmYXVsdCZEZWZhdWx0IG51bWJlciBvZiBvdXRn
b2luZyBzdHJlYW1zJjEwXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2NtdFxfb25cX29m
ZiZUdXJuIENNVCBvbiBvciBvZmYuJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfY210
XF91c2VcX2RhYyZVc2UgZGVsYXllZCBhY2tub3dsZWRnbWVudCBmb3IgQ01UJjBcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCislc2N0cFxfZnJcX21heFxfYnVyc3RcX2RlZmF1bHQmRGVmYXVsdCBtYXgg
YnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHdoZW4gJjRcdGFidWxhcm5ld2xpbmUKKyUJCQkJCQkm
ZmFzdCByZXRyYW5zbWl0dGluZyZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfYXV0b1xf
YXNjb25mJkVuYWJsZSBTQ1RQIEF1dG8tQVNDT05GJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCisl
c2N0cFxfbXVsdGlwbGVcX2FzY29uZnMmRW5hYmxlIFNDVFAgTXVsaXBsZS1BU0NPTkZzJjAgXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2FzY29uZlxfYXV0aFxfbm9jaGsmRGlzYWJsZSBT
Q1RQIEFTQ09ORiBBVVRIIHJlcXVpcmVtZW50JjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0
cFxfYXV0aFxfZGlzYWJsZSZEaXNhYmxlIFNDVFAgQVVUSCBmdW5jdGlvbiYwXHRhYnVsYXJuZXds
aW5lIFxobGluZQorJXNjdHBcX25hdFxfZnJpZW5kbHkmU0NUUCBOQVQgZnJpZW5kbHkgb3BlcmF0
aW9uJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfaW5pdHNcX2luY2x1ZGVcX25hdFxf
ZnJpZW5kbHkmRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSAmMFx0YWJ1bGFybmV3
bGluZQorJQkJCQkJJlNDVFAgb3B0aW9uIG9uIElOSVRzLiZcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfdWRwXF90dW5uZWxpbmdcX3BvcnQmU2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcg
cG9ydCY5ODk5XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2RvXF9kcmFpbiZEZXRlcm1p
bmVzIHdoZXRoZXIgU0NUUCBzaG91bGQgcmVzcG9uZCYxXHRhYnVsYXJuZXdsaW5lCislCQkJCQkm
dG8gdGhlIGRyYWluIGNhbGxzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9hYm9ydFxf
aWZcX29uZVxfMlxfb25lXF9oaXRzXF9saW1pdCZXaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBh
Ym9ydCYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9zdHJpY3RcX2RhdGFcX29yZGVy
JkVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wmMFx0YWJ1bGFy
bmV3bGluZQorJQkJCQkJJmluc2lkZSBkYXRhJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3Rw
XF9taW5cX3Jlc2lkdWFsJk1pbmltdW0gcmVzaWR1YWwgZGF0YSBjaHVuayBpbiBzZWNvbmQmMTQ1
Mlx0YWJ1bGFybmV3bGluZQorJQkJCQkJJnBhcnQgb2Ygc3BsaXQmXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQorJXNjdHBcX21heFxfcmV0cmFuXF9jaHVuayZNYXhpbXVtIHRpbWVzIGFuIHVubHVja3kg
Y2h1bmsgY2FuIGJlJjMwXHRhYnVsYXJuZXdsaW5lCislCQkJCSYgcmV0cmFuc21pdHRlZCBiZWZv
cmUgdGhlIGFzc29jaWF0aW9uIGFib3J0cyZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxf
ZGVmYXVsdFxfY2NcX21vZHVsZSZEZWZhdWx0IGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUmMFx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9kZWZhdWx0XF9zc1xfbW9kdWxlJkRlZmF1bHQg
c3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlJjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBc
X2RlZmF1bHRcX2ZyYWdcX2ludGVybGVhdmUmRGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlIGxl
dmVsJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfbW9iaWxpdHlcX2Jhc2UmRW5hYmxl
IFNDVFAgYmFzZSBtb2JpbGl0eSYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX21vYmls
aXR5XF9mYXN0aGFuZG9mZiZFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYmMFx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKKyVzY3RwXF9MMlxfYWJjXF92YXJpYWJsZSZTQ1RQIEFCQyBtYXggaW5jcmVhc2Ug
cGVyIFNBQ0sgKEwpJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdnRhZ1xfdGltZVxf
d2FpdCZWdGFnIHRpbWUgd2FpdCB0aW1lLCAwIGRpc2FibGVzIGl0LiY2MH5zZWNzXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorJXNjdHBcX2JsYWNraG9sZSZFbmFibGUgU0NUUCBibGFja2hvbGluZyYw
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3BhdGhcX3BmXF90aHJlc2hvbGQmRGVmYXVs
dCBwb3RlbnRpYWxseSBmYWlsZWQgdGhyZXNob2xkJjY1NTM1XHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorJXNjdHBcX3J0dHZhclxfYncmU2hpZnQgYW1vdW50IGZvciBidyBzbW9vdGhpbmcgb24gcnR0
IGNhbGMmNCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcnR0dmFyXF9ydHQmU2hpZnQg
YW1vdW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxjJjUgXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQorJXNjdHBcX3J0dHZhclxfZXFyZXQgJldoYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBi
dyBhcmUmMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJnVuY2hhbmdlZCZcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCislc2N0cFxfc3RlYWR5XF9zdGVwJkhvdyBtYW55IHRoZSBzYW1lcyBpdCB0YWtlcyB0
byB0cnkgc3RlcCYyMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJmRvd24gb2YgY3duZCZcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdXNlXF9kY2NjXF9lY24mRW5hYmxlIGZvciBSVENDIEND
IGRhdGFjZW50ZXIgRUNOJjEgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2J1ZmZlclxf
c3BsaXR0aW5nJkVuYWJsZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHNwbGl0dGluZyYwIFx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKKyVzY3RwXF9pbml0aWFsXF9jd25kJkluaXRpYWwgY29uZ2VzdGlvbiB3
aW5kb3cgaW4gTVRVcyYzXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2xvZ2dpbmdcX2xl
dmVsJkxvZ2dpbmcgbGV2ZWwmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfZGVidWdc
X29uJlR1cm5zIGRlYnVnIG91dHB1dCBvbiBvciBvZmYuJjAgXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorCislXGNhcHRpb257U3lzY3RsIHZhcmlhYmxlcyBzdXBwb3J0ZWQgYnkgdXNyc2N0cH0KKyVc
ZW5ke2xvbmd0YWJsZX0KKworXHNlY3Rpb257RXhhbXBsZXN9Citcc3Vic2VjdGlvbntEaXNjYXJk
IFNlcnZlcn1cbGFiZWx7c2VydmVyfQorXGJlZ2lue3ZlcmJhdGltfQorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGRpc2Nh
cmRfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqLwor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYK
KyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgQlVGRkVSX1NJWkUgMTAyNDAKKworY29u
c3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tl
dCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAgICAgICAg
ICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MpCit7
CisgICAgY2hhciBuYW1lW0lORVQ2X0FERFJTVFJMRU5dOworCisgICAgaWYgKGRhdGEpIHsKKyAg
ICAgICAgaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworICAgICAgICAgICAgcHJpbnRm
KCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwgKGludClkYXRhbGVuKTsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCBy
ZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAlZCB3aXRoICIKKyAgICAgICAgICAgICAgICAg
ICAiU1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJWQsIGNvbnRleHQgJXUuXG4iLAorICAgICAgICAg
ICAgICAgICAgIChpbnQpZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAgICBhZGRyLnNhLnNhX2Zh
bWlseSA9PSBBRl9JTkVUID8KKyAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lO
RVQsICZhZGRyLnNpbi5zaW5fYWRkciwgbmFtZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBJTkVUNl9BRERSU1RSTEVOKToKKyAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9u
dG9wKEFGX0lORVQ2LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFtZSwgCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKSwKKyAgICAgICAgICAgICAgICAg
ICBudG9ocyhhZGRyLnNpbi5zaW5fcG9ydCksCisgICAgICAgICAgICAgICAgICAgcmN2LnJjdl9z
aWQsCisgICAgICAgICAgICAgICAgICAgcmN2LnJjdl9zc24sCisgICAgICAgICAgICAgICAgICAg
cmN2LnJjdl90c24sCisgICAgICAgICAgICAgICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKyAg
ICAgICAgICAgICAgICAgICByY3YucmN2X2NvbnRleHQpOworICAgICAgICB9CisgICAgICAgIGZy
ZWUoZGF0YSk7CisgICAgfQorICAgIHJldHVybiAxOworfQorCitpbnQKK21haW4oaW50IGFyZ2Ms
IGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBzdHJ1Y3Qgc29ja2V0ICpzb2NrOworICAgIHN0cnVjdCBz
b2NrYWRkcl9pbjYgYWRkcjsKKyAgICBzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworICAg
IHN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworICAgIHVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7
U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9Q
RUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUkVN
T1RFX0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05f
RVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lO
RElDQVRJT04sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQVJUSUFMX0RF
TElWRVJZX0VWRU5UfTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSBhdjsKKyAgICBjb25zdCBpbnQgb24gPSAxOworICAgIGludCBuLCBmbGFnczsKKyAg
ICBzb2NrbGVuX3QgZnJvbV9sZW47CisgICAgY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOworICAg
IGNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKKyAgICBzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiBy
bjsKKyAgICBzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7
CisgICAgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7CisgICAgc3RydWN0IHNjdHBfbnh0aW5mbyBu
eHQ7CisgICAgdW5zaWduZWQgaW50IGluZm90eXBlID0gMDsKKworICAgIGlmIChhcmdjID4gMSkg
eworICAgICAgICB1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdXNyc2N0cF9pbml0KDk4OTkpOworICAgIH0KKyAgICB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9kZWJ1Z19vbigwKTsKKyAgICB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUo
Mik7CisKKyAgICBpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TRVFQ
QUNLRVQsIElQUFJPVE9fU0NUUCwgCisgICAgCSAgICAgICAgICAgICAgICAgICAgICAgICAgdXNl
X2NiP3JlY2VpdmVfY2I6TlVMTCwgTlVMTCwgMCkpID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9y
KCJ1c2Vyc3BhY2Vfc29ja2V0Iik7CisgICAgfQorICAgIGlmICh1c3JzY3RwX3NldHNvY2tvcHQo
c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihp
bnQpKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisgICAgfQorICAgIG1l
bXNldCgmYXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOworICAgIGF2LmFz
c29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisgICAgYXYuYXNzb2NfdmFsdWUgPSA0NzsKKworICAg
IGlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQs
IChjb25zdCB2b2lkKikmYXYsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKKyAgICAgICAgcGVycm9y
KCJzZXRzb2Nrb3B0Iik7CisgICAgfQorICAgIGlmIChhcmdjID4gMikgeworICAgICAgICBtZW1z
ZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworICAgICAgICBl
bmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIGVuY2Fwcy5z
dWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworICAgICAgICBpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCopJmVuY2FwcywgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNj
dHBfdWRwZW5jYXBzKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoInNldHNvY2tvcHQiKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBtZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZlbnQpKTsK
KyAgICBldmVudC5zZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOworICAgIGV2ZW50LnNl
X29uID0gMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkoc2l6ZW9mKGV2ZW50
X3R5cGVzKS9zaXplb2YodWludDE2X3QpKTsgaSsrKSB7CisgICAgICAgIGV2ZW50LnNlX3R5cGUg
PSBldmVudF90eXBlc1tpXTsKKyAgICAgICAgaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KSkgPCAwKSB7CisgICAgICAgICAgICBw
ZXJyb3IoInVzZXJzcGFjZV9zZXRzb2Nrb3B0Iik7CisgICAgICAgIH0KKyAgICB9CisgICAgbWVt
c2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZk
ZWYgSEFWRV9TSU5fTEVOCisgICAgYWRkci5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KTsKKyNlbmRpZgorICAgIGFkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBh
ZGRyLnNpbjZfcG9ydCA9IGh0b25zKDkpOworICAgIGFkZHIuc2luNl9hZGRyID0gaW42YWRkcl9h
bnk7CisgICAgaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIs
IAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDAp
IHsKKyAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2VfYmluZCIpOworICAgIH0KKyAgICBpZiAodXNy
c2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisgICAgICAgIHBlcnJvcigidXNlcnNwYWNlX2xp
c3RlbiIpOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBpZiAodXNlX2NiKSB7Cisj
aWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyAgICAgICAgICAgIFNsZWVwKDEq
MTAwMCk7CisjZWxzZQorICAgICAgICAgICAgc2xlZXAoMSk7CisjZW5kaWYKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGZyb21fbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7CisgICAgICAgICAgICBmbGFncyA9IDA7CisgICAgICAgICAgICBybi5yZWN2
dl9yY3ZpbmZvID0gcmN2OworICAgICAgICAgICAgcm4ucmVjdnZfbnh0aW5mbyA9IG54dDsKKyAg
ICAgICAgICAgIG4gPSB1c3JzY3RwX3JlY3Z2KHNvY2ssICh2b2lkKilidWZmZXIsIEJVRkZFUl9T
SVpFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikg
JmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcm4sCisJICAgICAgICAgICAgICAgICAgICAgJmlu
Zm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKyAgICAgICAgICAgIGlmIChuID4gMCkgeworICAg
ICAgICAgICAgICAgIGlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwg
bik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRm
KCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIlZCB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICVk
LCBjb250ZXh0ICV1LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY29tcGxldGUgJWQu
XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMo
YWRkci5zaW42X3BvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcm4ucmVjdnZfcmN2
aW5mby5yY3Zfc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcm4ucmVjdnZfcmN2aW5m
by5yY3Zfc3NuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcm4ucmVjdnZfcmN2aW5mby5y
Y3ZfdHNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRvaGwocm4ucmVjdnZfcmN2aW5m
by5yY3ZfcHBpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBybi5yZWN2dl9yY3ZpbmZv
LnJjdl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZsYWdzICYgTVNHX0VP
UikgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorICAgIHVzcnNjdHBfY2xvc2Uoc29jayk7CisgICAgd2hpbGUgKHVzcnNjdHBfZmlu
aXNoKCkgIT0gMCkgeworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisgICAg
ICAgIFNsZWVwKDEwMDApOworI2Vsc2UKKyAgICAgICAgc2xlZXAoMSk7CisjZW5kaWYKKyAgICB9
CisgICAgcmV0dXJuICgwKTsKK30KKworXGVuZHt2ZXJiYXRpbX0KKworXHN1YnNlY3Rpb257Q2xp
ZW50fVxsYWJlbHtjbGllbnR9CitcYmVnaW57dmVyYmF0aW19CisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBVc2FnZTogY2xpZW50IHJl
bW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5jYXBzX3Bv
cnRdCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5j
bHVkZSA8c3RyaW5nLmg+CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgor
I2luY2x1ZGUgPHVzcnNjdHAuaD4KKworaW50IGRvbmUgPSAwOworCitzdGF0aWMgaW50CityZWNl
aXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZv
aWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZv
IHJjdiwgaW50IGZsYWdzKQoreworICAgIGlmIChkYXRhID09IE5VTEwpIHsKKyAgICAgICAgZG9u
ZSA9IDE7CisgICAgICAgIHVzcnNjdHBfY2xvc2Uoc29jayk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgd3JpdGUoZmlsZW5vKHN0ZG91dCksIGRhdGEsIGRhdGFsZW4pOworICAgICAgICBmcmVlKGRh
dGEpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFy
ICphcmd2W10pCit7CisgICAgc3RydWN0IHNvY2tldCAqc29jazsKKyAgICBzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gYWRkcjQ7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyNjsKKyAgICBzdHJ1Y3Qg
c2N0cF91ZHBlbmNhcHMgZW5jYXBzOworICAgIGNoYXIgYnVmZmVyWzgwXTsKKworICAgIGlmIChh
cmdjID4gMykgeworICAgICAgICB1c3JzY3RwX2luaXQoYXRvaShhcmd2WzNdKSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdXNyc2N0cF9pbml0KDk4OTkpOworICAgIH0KKyAgICB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbigwKTsKKyAgICB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9i
bGFja2hvbGUoMik7CisgICAgaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09D
S19TVFJFQU0sIElQUFJPVE9fU0NUUCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cmVjZWl2ZV9jYiwgTlVMTCwgMCkpID09IE5VTEwpIHsKKyAgICAgICAgcGVycm9yKCJ1c2Vyc3Bh
Y2Vfc29ja2V0IGlwdjYiKTsKKyAgICB9CisgICAgaWYgKGFyZ2MgPiA0KSB7CisgICAgICAgIG1l
bXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisgICAgICAg
IGVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgZW5jYXBz
LnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisgICAgICAgIGlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQs
IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkKikmZW5jYXBzLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJvcigic2V0c29ja29wdCIp
OworICAgICAgICB9CisgICAgfQorICAgIG1lbXNldCgodm9pZCAqKSZhZGRyNCwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgIG1lbXNldCgodm9pZCAqKSZhZGRyNiwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19M
aW51eCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyAgICBhZGRyNC5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgYWRkcjYuc2luNl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICBhZGRyNC5zaW5fZmFtaWx5
ID0gQUZfSU5FVDsKKyAgICBhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIGFkZHI0
LnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisgICAgYWRkcjYuc2luNl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzJdKSk7CisgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJndlsx
XSwgJmFkZHI2LnNpbjZfYWRkcikgPT0gMSkgeworICAgICAgICBpZiAodXNyc2N0cF9jb25uZWN0
KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisgICAgICAgICAgICBw
ZXJyb3IoInVzZXJzcGFjZV9jb25uZWN0Iik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGlu
ZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsKKyAgICAg
ICAgaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0LCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkg
PCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9jb25uZWN0Iik7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIklsbGVnYWwgZGVzdGluYXRpb24gYWRk
cmVzcy5cbiIpOworICAgIH0KKyAgICB3aGlsZSAoKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZl
ciksIHN0ZGluKSAhPSBOVUxMKSAmJiAhZG9uZSkgeworICAgICAgICB1c3JzY3RwX3NlbmR2KHNv
Y2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsCisJCQkJICAgICAgICAgICAgICAg
ICAgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lORk8sIDApOworICAgIH0KKyAgICBpZiAoIWRvbmUp
IHsKKyAgICAgICAgdXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKTsKKyAgICB9CisgICAg
d2hpbGUgKCFkb25lKSB7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyAg
ICAgICAgU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisgICAgICAgIHNsZWVwKDEpOworI2VuZGlmCisg
ICAgfQorICAgIHdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZiBkZWZpbmVkIChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorICAgICAgICBTbGVlcCgxMDAwKTsKKyNlbHNlCisgICAg
ICAgIHNsZWVwKDEpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybigwKTsKK30KKworXGVuZHt2
ZXJiYXRpbX0KK1xiaWJsaW9ncmFwaHlzdHlsZXtwbGFpbn0KKyUKK1xiZWdpbnt0aGViaWJsaW9n
cmFwaHl9ezk5fQorCitcYmliaXRlbXtzb2NrZXRBUEl9CitSLn5TdGV3YXJ0LCBNLn5UXCJ1eGVu
LCBLLn5Qb29uLCBhbmQgVi5+WWFzZXZpY2g6CitcdGV4dGl0e1NvY2tldHMgQVBJIEV4dGVuc2lv
bnMgZm9yIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApfS4K
K1JGQ342NDU4LCBEZXplbWJlcn4yMDExLgorCitcYmliaXRlbXtTQ1RQfQorUi5+U3Rld2FydDoK
K1x0ZXh0aXR7U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sfS4KK1JGQ340OTYw
LCBTZXB0ZW1iZXJ+MjAwNy4KKworCitcYmliaXRlbXthdXRofQorTS5+VFwidXhlbiwgUi5+U3Rl
d2FydCwgUC5+TGVpLCBhbmQgRS5+UmVzY29ybGE6CitcdGV4dGl0e0F1dGhlbnRpY2F0ZWQgQ2h1
bmtzIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKX0u
CitSRkN+NDg5NSwgQXVndXN0fjIwMDcuCisKK1xiaWJpdGVte3N0cmVhbVJlc2V0fQorUi5+U3Rl
d2FydCwgTS5+VFwidXhlbiwgYW5kIFAufkxlaToKK1x0ZXh0aXR7U3RyZWFtIENvbnRyb2wgVHJh
bnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25maWd1cmF0aW9ufS4KK1JGQ342
NTI1LCBGZWJydWFyeX4yMDEyLgorCisKK1xiaWJpdGVte2FkZGlwfQorUi5+U3Rld2FydCwgIFEu
flhpZSwgTS5+VFwidXhlbiwgUy5+TWFydXlhbWEsIGFuZCBNLn5Lb3p1a2E6CitcdGV4dGl0e1N0
cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkgRHluYW1pYyBBZGRyZXNz
IFJlY29uZmlndXJhdGlvbn0uCitSRkN+NTA2MSwgU2VwdGVtYmVyfjIwMDcuCisKK1xiaWJpdGVt
e3NhY2staW1tfQorTS5+VFwidXhlbiwgSS5+UlwidW5nZWxlciwgYW5kIFIuflN0ZXdhcnQ6Citc
dGV4dGl0e1NBQ0stSU1NRURJQVRFTFkgRXh0ZW5zaW9uIGZvciB0aGUgU3RyZWFtIENvbnRyb2wg
VHJhbnNtaXNzaW9uIFByb3RvY29sfS4KK2RyYWZ0LXR1ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1t
ZWRpYXRlbHktMDkgKHdvcmsgaW4gcHJvZ3Jlc3MpLCBBcHJpbH4yMDEyLgorCitcYmliaXRlbXt1
ZHBlbmNhcHN9CitNLn5UXCJ1eGVuIGFuZCBSLn5TdGV3YXJ0CitcdGV4dGl0e1VEUCBFbmNhcHN1
bGF0aW9uIG9mIFNDVFAgUGFja2V0c2x9LgorZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwLXVkcC1lbmNh
cHMtMDMgKHdvcmsgaW4gcHJvZ3Jlc3MpLCBNYXJjaH4yMDEyLgorCitcZW5ke3RoZWJpYmxpb2dy
YXBoeX0KK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9SRUFETUUubWQgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9SRUFETUUubWQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uMGYwZjhiMTZjNTE5Y2UwOWVkZjZjOWM0ZmVmMTZiMmNjNDRiOTQ2NCAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvUkVBRE1FLm1kCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL1JFQURNRS5tZApAQCAtMCww
ICsxLDkgQEAKKyMgdXNyc2N0cAorWyFbQ292ZXJpdHkgU2NhbiBCdWlsZCBTdGF0dXNdKGh0dHBz
Oi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvMTM0MzAvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9z
Y2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy91c3JzY3RwKQorCitUaGlzIGlzIGEgdXNlcmxhbmQg
U0NUUCBzdGFjayBzdXBwb3J0aW5nIEZyZWVCU0QsIExpbnV4LCBNYWMgT1MgWCBhbmQgV2luZG93
cy4KKworU2VlIFttYW51YWxdKE1hbnVhbC5tZCkgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1Ro
ZSBzdGF0dXMgb2YgY29udGludW91cyBpbnRlZ3JhdGlvbiB0ZXN0aW5nIGlzIGF2YWlsYWJsZSBm
cm9tIFtncmlkXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL2dyaWQpIGFuZCBbd2F0ZXJm
YWxsXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL3dhdGVyZmFsbCkuCitJZiB5b3UgYXJl
IG9ubHkgaW50ZXJlc3RlZCBpbiBhIHNpbmdsZSBicmFuY2gsIGp1c3QgYXBwZW5kIGA/YnJhbmNo
PUJSQU5DSE5BTUVgIHRvIHRoZSBVUkwsIGZvciBleGFtcGxlIFt3YXRlcmZhbGxdKGh0dHA6Ly8y
MTIuMjAxLjEyMS4xMTA6MTgwMTAvd2F0ZXJmYWxsP2JyYW5jaD1tYXN0ZXIpLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvYm9vdHN0cmFwIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFwCmluZGV4IGU2OWRlMjli
YjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjg5YzdiYmFiZDkwMzkwOTJmNjVjZDUw
YmY0OTQxNDEyNGRhNGIxYjcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2Jvb3RzdHJhcAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9ib290c3RyYXAKQEAgLTAsMCArMSw2NiBAQAorIyEgL2Jpbi9zaAorIworIyBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorIworIyBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4JSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0gg
REFNQUdFLgorIworCisjYmFpbCBvdXQgb24gZXJyb3IKK3NldCAtZQorCisjZGV0ZWN0IChnKWxp
YnRvb2xpemUKK2lmIHdoaWNoIGxpYnRvb2xpemUgPi9kZXYvbnVsbAordGhlbgorCV9MSUJUT09M
SVpFPWB3aGljaCBsaWJ0b29saXplYAorZWxpZiB3aGljaCBnbGlidG9vbGl6ZSA+L2Rldi9udWxs
Cit0aGVuCisJX0xJQlRPT0xJWkU9YHdoaWNoIGdsaWJ0b29saXplYAorZWxzZQorCWVjaG8gIkVS
Uk9SOiBJIGNhbm5vdCBmaW5kIGxpYnRvb2xpemUgb3IgZ2xpYnRvb2xpemUhIgorCWV4aXQgMQor
ZmkKKworI2V4ZWN1dGUgKGcpbGlidG9vbGl6ZQorJHtfTElCVE9PTElaRX0KKworI2V4ZWN1dGUg
YWNsb2NhbAoraWYgWyAtZSAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwgXQordGhlbgorICAgYWNs
b2NhbCAtSSAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwKK2VsaWYgWyAtZSAvdXNyL3NoYXJlL2Fj
bG9jYWwgXQordGhlbgorICAgYWNsb2NhbCAtSSAvdXNyL3NoYXJlL2FjbG9jYWwKK2Vsc2UKKyAg
IGFjbG9jYWwKK2ZpCisKKyNleGVjdXRlIGF1dG9jb25mCithdXRvY29uZgorCisjZ2VuZXJhdGUg
dGhlIC4vY29uZmlndXJlCithdXRvbWFrZSAtLWZvcmVpZ24gLS1hZGQtbWlzc2luZyAtLWNvcHkK
KwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvY29uZmlndXJlLmFjIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvY29uZmlndXJl
LmFjCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmE2YmZi
ZDkzZDc5NmQ3MmJmYzc2YmEzZjQ5ZWQ0YTA3YTdlY2M1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L2NvbmZpZ3VyZS5hYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwxOTUg
QEAKK2RubAorZG5sIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCitkbmwK
K2RubCBBbGwgcmlnaHRzIHJlc2VydmVkLgorZG5sCitkbmwgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CitkbmwgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCitkbmwgYXJlIG1ldDoKK2RubCAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KK2RubCAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorZG5sICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorZG5sIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCitkbmwgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCitkbmwKK2RubCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorZG5sIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorZG5sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitkbmwgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVW
RU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK2RubCBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAorZG5sIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitkbmwgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitkbmwg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QKK2RubCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitkbmwgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorZG5sIFNVQ0ggREFNQUdFLgorZG5sCisKK0FDX0lOSVQoW2xpYnVzcnNjdHBdLCBbMC45LjMu
MF0pCitBTV9JTklUX0FVVE9NQUtFCisKK0FDX1BST0dfQ0MKK0FDX1BST0dfTElCVE9PTAorQUNf
Q0FOT05JQ0FMX0hPU1QKK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkKKworZG5sIERpc2FibGUg
cGtnX2NvbmZpZyBzdXBwb3J0IGZvciBub3cKK2RubCBQS0dfUFJPR19QS0dfQ09ORklHCitkbmwg
UEtHX0lOU1RBTExESVIKKworTElCQ0ZMQUdTPSItRFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyAt
RFNDVFBfU0lNUExFX0FMTE9DQVRPUiAtRF9fVXNlcnNwYWNlX18iCitBUFBDRkxBR1M9IiIKKwor
Y2FzZSAkaG9zdF9vcyBpbgorZGFyd2luKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1X
bm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLURfX0FQUExFX1VTRV9SRkNfMjI5MiIKKyAgTElC
Q0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19BUFBMRV9fIC1EX19Vc2Vyc3BhY2Vfb3NfRGFyd2luIgor
ICA7OworZHJhZ29uZmx5KikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1wdGhyZWFkIgor
ICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX0RyYWdvbkZseV9fIC1EX19Vc2Vyc3BhY2Vfb3Nf
RHJhZ29uRmx5IgorICA7OworZnJlZWJzZCopCisgIENGTEFHUz0iJENGTEFHUyAtc3RkPWM5OSAt
cHRocmVhZCIKKyAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXEgY2xhbmc7IHRoZW4KKyAgICBD
RkxBR1M9IiRDRkxBR1MgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIgorICAgIExERkxBR1M9
IiRMREZMQUdTIC1RdW51c2VkLWFyZ3VtZW50cyIKKyAgZmkKKyAgTElCQ0ZMQUdTPSIkTElCQ0ZM
QUdTIC1VX19GcmVlQlNEX18gLURfX1VzZXJzcGFjZV9vc19GcmVlQlNEIgorICA7OworbGludXgq
KQorICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQgLURfR05VX1NPVVJDRSIKKyAg
TElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1EX19Vc2Vyc3BhY2Vfb3NfTGludXgiCisgIDs7CituZXRi
c2QqKQorICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQiCisgIExJQkNGTEFHUz0i
JExJQkNGTEFHUyAtVV9fTmV0QlNEX18gLURfX1VzZXJzcGFjZV9vc19OZXRCU0QiCisgIDs7Citv
cGVuYnNkKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1wdGhyZWFkIgorICBMSUJDRkxB
R1M9IiRMSUJDRkxBR1MgLVVfX09wZW5CU0RfXyAtRF9fVXNlcnNwYWNlX29zX09wZW5CU0QiCisg
IDs7Citzb2xhcmlzKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1EX1hQRzRfMiIKKyAgOzsKK2VzYWMK
KworaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1vICJ4JENDIiA9ICJ4Y2xhbmciIDsgdGhlbgor
ICAgICAgICBhY19zdXBwb3J0c19nY2NfZmxhZ3M9eWVzCitmaQorCitpZiB0ZXN0ICJ4JGFjX3N1
cHBvcnRzX2djY19mbGFncyIgPSAieHllcyIgOyB0aGVuCisgICAgICAgIENGTEFHUz0iJENGTEFH
UyAtcGVkYW50aWMgLVdhbGwiCitmaQorCitBQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBzaG91
bGQgdHJlYXQgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzKQorQUNfQVJHX0VOQUJMRSh3YXJu
aW5ncy1hcy1lcnJvcnMsCisgIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtd2FybmluZ3MtYXMt
ZXJyb3JzXSwKKyAgICAgICAgICAgICAgICAgIFt0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMgKG9u
bHkgZm9yIEdDQyBvciBjbGFuZykgQDw6QGRlZmF1bHQ9eWVzQDo+QF0pLAorICAgIGVuYWJsZV93
YXJuaW5nc19hc19lcnJvcnM9JGVuYWJsZXZhbCxlbmFibGVfd2FybmluZ3NfYXNfZXJyb3JzPXll
cykKK2lmIHRlc3QgIngkYWNfc3VwcG9ydHNfZ2NjX2ZsYWdzIiA9ICJ4eWVzIiAtYSB4JGVuYWJs
ZV93YXJuaW5nc19hc19lcnJvcnMgPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX01TR19SRVNVTFQo
eWVzKQorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKK2Vsc2UKKyAgICAgICAgQUNf
TVNHX1JFU1VMVChubykKK2ZpCisKK0FDX0FSR19FTkFCTEUoaW52YXJpYW50cywKKyAgQUNfSEVM
UF9TVFJJTkcoIFstLWVuYWJsZS1pbnZhcmlhbnRzXSwKKyAgICAgICAgICAgICAgICAgIFthZGQg
YWRkaXRpb25hbCBydW50aW1lIGNoZWNrcyBAPDpAZGVmYXVsdD1ub0A6PkBdKSwKKyAgICBlbmFi
bGVfaW52YXJpYW50cz0kZW5hYmxldmFsLGVuYWJsZV9pbnZhcmlhbnRzPW5vKQoraWYgdGVzdCB4
JGVuYWJsZV9pbnZhcmlhbnRzID0geHllczsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoSU5WQVJJ
QU5UUywgMSwgW0FkZCBhZGRpdGlvbmFsIHJ1bnRpbWUgY2hlY2tzXSkKK2ZpCisKK0FDX0FSR19F
TkFCTEUoZGVidWcsCisgIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtZGVidWddLAorICAgICAg
ICAgICAgICAgICAgW3Byb3ZpZGUgZGVidWcgaW5mb3JtYXRpb24gQDw6QGRlZmF1bHQ9eWVzQDo+
QF0pLAorICAgIGVuYWJsZV9kZWJ1Zz0kZW5hYmxldmFsLGVuYWJsZV9kZWJ1Zz15ZXMpCitpZiB0
ZXN0IHgkZW5hYmxlX2RlYnVnID0geHllczsgdGhlbgorICAgICAgICBBQ19ERUZJTkUoU0NUUF9E
RUJVRywgMSwgW1Byb3ZpZGUgZGVidWcgaW5mb3JtYXRpb25dKQorICAgICAgICBDRkxBR1M9IiRD
RkxBR1MgLWcgLU8wIgorZmkKKworQUNfQVJHX0VOQUJMRShpbmV0LAorICBBQ19IRUxQX1NUUklO
RyggWy0tZW5hYmxlLWluZXRdLAorICAgICAgICAgICAgICAgICAgW1N1cHBvcnQgSVB2NCBAPDpA
ZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxlX2luZXQ9JGVuYWJsZXZhbCxlbmFibGVfaW5l
dD15ZXMpCitpZiB0ZXN0IHgkZW5hYmxlX2luZXQgPSB4eWVzOyB0aGVuCisgICAgICAgIEFQUENG
TEFHUz0iJEFQUENGTEFHUyAtRElORVQiCisgICAgICAgIEFDX0RFRklORShJTkVULCAxLCBbU3Vw
cG9ydCBJUHY0XSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoaW5ldDYsCisgIEFDX0hFTFBfU1RSSU5H
KCBbLS1lbmFibGUtaW5ldDZdLAorICAgICAgICAgICAgICAgICAgW1N1cHBvcnQgSVB2NiBAPDpA
ZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxlX2luZXQ2PSRlbmFibGV2YWwsZW5hYmxlX2lu
ZXQ2PXllcykKK2lmIHRlc3QgeCRlbmFibGVfaW5ldDYgPSB4eWVzOyB0aGVuCisgICAgICAgIEFQ
UENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQ2IgorICAgICAgICBBQ19ERUZJTkUoSU5FVDYsIDEs
IFtTdXBwb3J0IElQdjZdKQorZmkKKworQUNfQVJHX0VOQUJMRShwcm9ncmFtcywKKyAgQUNfSEVM
UF9TVFJJTkcoIFstLWVuYWJsZS1wcm9ncmFtc10sCisgICAgICAgICAgICAgICAgICBbYnVpbGQg
ZXhhbXBsZSBwcm9ncmFtcyBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxlX3Byb2dy
YW1zPSRlbmFibGV2YWwsZW5hYmxlX3Byb2dyYW1zPXllcykKK2lmIHRlc3QgeCRlbmFibGVfcHJv
Z3JhbXMgPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX0NPTkZJR19GSUxFUyhwcm9ncmFtcy9NYWtl
ZmlsZSkKK2ZpCisKK0FDX0NIRUNLX1RZUEUoc2l6ZV90KQorQUNfQ0hFQ0tfVFlQRShzc2l6ZV90
KQorCitBQ19DSEVDS19GVU5DUyhzb2NrZXQsICwgQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0
KSkKK0FDX0NIRUNLX0ZVTkNTKGluZXRfYWRkciwgLCBBQ19DSEVDS19MSUIobnNsLCBpbmV0X2Fk
ZHIpKQorCitBQ19DSEVDS19IRUFERVJTKHN0ZGF0b21pYy5oKQorQUNfQ0hFQ0tfSEVBREVSUyhz
eXMvcXVldWUuaCkKK0FDX0NIRUNLX0hFQURFUlMobGludXgvaWZfYWRkci5oLCBbXSwgW10sIFsj
aW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitBQ19DSEVDS19IRUFERVJTKGxpbnV4L3J0bmV0bGlu
ay5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitBQ19DSEVDS19IRUFERVJT
KG5ldGluZXQvaXBfaWNtcC5oLCBbXSwgW10sIFsjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPl0pCisK
K0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHIuc2FfbGVuLAorICAgICAgICAgICAgICAg
IEFDX0RFRklORShIQVZFX1NBX0xFTiwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdXIgc3RhY2sgaGFz
IHNhX2xlbiBpbiBzb2NrYWRkciBzdHJ1Y3QuXSksLAorICAgICAgICAgICAgICAgIFsjaWZkZWYg
SEFWRV9TWVNfVFlQRVNfSAorICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lz
L3NvY2tldC5oPl0pCisKK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHJfaW4uc2luX2xl
biwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU5fTEVOLCAxLCBbRGVmaW5lIHRo
aXMgaWYgeW91ciBJUHY0IGhhcyBzaW5fbGVuIGluIHNvY2thZGRyX2luIHN0cnVjdC5dKSwsCisg
ICAgICAgICAgICAgICAgWyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICAgICAgICAgICAgICAg
ICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAg
ICAgICAgICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSkKKworQUNfQ0hFQ0tfTUVNQkVSKHN0
cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9sZW4sCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhB
VkVfU0lONl9MRU4sIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3VyIElQdjYgaGFzIHNpbjZfbGVuIGlu
IHNvY2thZGRyX2luNiBzdHJ1Y3QuXSksLAorICAgICAgICAgICAgICAgIFsjaWZkZWYgSEFWRV9T
WVNfVFlQRVNfSAorICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICAg
ICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bmV0aW5ldC9p
bi5oPl0pCisKK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHJfY29ubi5zY29ubl9sZW4s
CisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfU0NPTk5fTEVOLCAxLCBbRGVmaW5lIHRo
aXMgaWYgeW91ciB1c2VybGFuZCBzdGFjayBoYXMgc2Nvbm5fbGVuIGluIHNvY2thZGRyX2Nvbm4g
c3RydWN0Ll0pLCwKKyAgICAgICAgICAgICAgICBbI2luY2x1ZGUgInVzcnNjdHBsaWIvdXNyc2N0
cC5oIl0pCisKK0FDX01TR19DSEVDS0lORyhmb3Igc29ja2xlbl90KQorQUNfVFJZX0NPTVBJTEUo
WyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICNpbmNsdWRl
IDxzeXMvc29ja2V0Lmg+XSwKKyAgICAgICAgICAgICAgIFtzb2NrbGVuX3QgeDsgeCA9IDE7IHJl
dHVybiAoKGludCl4KTtdLAorICAgICAgICAgICAgICAgW0FDX01TR19SRVNVTFQoeWVzKV0sCisg
ICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChpbnQpCisgICAgICAgICAgICAgICAgQUNfREVG
SU5FKHNvY2tsZW5fdCwgaW50LCBbRGVmaW5lIGEgdHlwZSBmb3Igc29ja2xlbl90Ll0pXSkKKwor
QUNfQ19CSUdFTkRJQU4KKworQUNfU1VCU1QoW0xJQkNGTEFHU10pCitBQ19TVUJTVChbQVBQQ0ZM
QUdTXSkKK2RubCBBQ19DT05GSUdfRklMRVMoW3VzcnNjdHAucGNdKQorQUNfT1VUUFVUKE1ha2Vm
aWxlIHVzcnNjdHBsaWIvTWFrZWZpbGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ly5n
aXRhdHRyaWJ1dGVzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC8uZ2l0YXR0cmlidXRlcwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NGY2YjMxYWU4YTFmZTk1MTk5NGQ4YzNhN2YyY2FmOTBh
YmU3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0Ly5naXRhdHRyaWJ1dGVzCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBA
QAotc2N0cC5oIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfYXNjb25mLmMgc3Zu
LXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9hdXRoLmMgc3ZuLXByb3BlcnRpZXM9YWxs
b3ctdGFicz1vbgotc2N0cF9jYWxsb3V0LmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgot
c2N0cF9jb25zdGFudHMuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1zY3RwX2hlYWRl
ci5oIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfaW5kYXRhLmMgc3ZuLXByb3Bl
cnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9pbnB1dC5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRh
YnM9b24KLXNjdHBfb3NfdXNlcnNwYWNlLmggc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgot
c2N0cF9vdXRwdXQuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1zY3RwX291dHB1dC5o
IHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfcGNiLmMgc3ZuLXByb3BlcnRpZXM9
YWxsb3ctdGFicz1vbgotc2N0cF9zc19mdW5jdGlvbnMuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10
YWJzPW9uCi1zY3RwX3N5c2N0bC5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBf
dGltZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1zY3RwX3VzZXJzcGFjZS5jIHN2
bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfdXNycmVxLmMgc3ZuLXByb3BlcnRpZXM9
YWxsb3ctdGFicz1vbgotc2N0cF92YXIuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1z
Y3RwdXRpbC5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHB1dGlsLmggc3ZuLXBy
b3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMGUzODA1NDdhNDhmOGI5OWM3NTFmYzYwZTdlMjljYWViOTIwZDAzZi4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHAu
aAorKysgL2Rldi9udWxsCkBAIC0xLDY2NyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cC5oIDI5NzY2MiAyMDE2LTA0LTA3IDA5OjEwOjM0WiBycnMgJCIpOwotI2VuZGlmCi0KLSNp
Zm5kZWYgX05FVElORVRfU0NUUF9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0hfCi0KLSNpZiAo
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRp
ZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp
Ci0jZWxzZQotI3ByYWdtYSBwYWNrIChwdXNoLCAxKQotI2RlZmluZSBTQ1RQX1BBQ0tFRAotI2Vu
ZGlmCi0KLS8qCi0gKiBTQ1RQIHByb3RvY29sIC0gUkZDNDk2MC4KLSAqLwotc3RydWN0IHNjdHBo
ZHIgewotCXVpbnQxNl90IHNyY19wb3J0OwkvKiBzb3VyY2UgcG9ydCAqLwotCXVpbnQxNl90IGRl
c3RfcG9ydDsJLyogZGVzdGluYXRpb24gcG9ydCAqLwotCXVpbnQzMl90IHZfdGFnOwkJLyogdmVy
aWZpY2F0aW9uIHRhZyBvZiBwYWNrZXQgKi8KLQl1aW50MzJfdCBjaGVja3N1bTsJLyogQ1JDMzJD
IGNoZWNrc3VtICovCi0JLyogY2h1bmtzIGZvbGxvdy4uLiAqLwotfSBTQ1RQX1BBQ0tFRDsKLQot
LyoKLSAqIFNDVFAgQ2h1bmtzCi0gKi8KLXN0cnVjdCBzY3RwX2NodW5raGRyIHsKLQl1aW50OF90
IGNodW5rX3R5cGU7CS8qIGNodW5rIHR5cGUgKi8KLQl1aW50OF90IGNodW5rX2ZsYWdzOwkvKiBj
aHVuayBmbGFncyAqLwotCXVpbnQxNl90IGNodW5rX2xlbmd0aDsJLyogY2h1bmsgbGVuZ3RoICov
Ci0JLyogb3B0aW9uYWwgcGFyYW1zIGZvbGxvdyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotLyoKLSAq
IFNDVFAgY2h1bmsgcGFyYW1ldGVycwotICovCi1zdHJ1Y3Qgc2N0cF9wYXJhbWhkciB7Ci0JdWlu
dDE2X3QgcGFyYW1fdHlwZTsJLyogcGFyYW1ldGVyIHR5cGUgKi8KLQl1aW50MTZfdCBwYXJhbV9s
ZW5ndGg7CS8qIHBhcmFtZXRlciBsZW5ndGggKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qCi0gKiB1
c2VyIHNvY2tldCBvcHRpb25zOiBzb2NrZXQgQVBJIGRlZmluZWQKLSAqLwotLyoKLSAqIHJlYWQt
d3JpdGUgb3B0aW9ucwotICovCi0jZGVmaW5lIFNDVFBfUlRPSU5GTwkJCTB4MDAwMDAwMDEKLSNk
ZWZpbmUgU0NUUF9BU1NPQ0lORk8JCQkweDAwMDAwMDAyCi0jZGVmaW5lIFNDVFBfSU5JVE1TRwkJ
CTB4MDAwMDAwMDMKLSNkZWZpbmUgU0NUUF9OT0RFTEFZCQkJMHgwMDAwMDAwNAotI2RlZmluZSBT
Q1RQX0FVVE9DTE9TRQkJCTB4MDAwMDAwMDUKLSNkZWZpbmUgU0NUUF9TRVRfUEVFUl9QUklNQVJZ
X0FERFIJMHgwMDAwMDAwNgotI2RlZmluZSBTQ1RQX1BSSU1BUllfQUREUgkJMHgwMDAwMDAwNwot
I2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fTEFZRVIJCTB4MDAwMDAwMDgKLS8qIHNhbWUgYXMgYWJv
dmUgKi8KLSNkZWZpbmUgU0NUUF9BREFQVElPTl9MQVlFUgkJMHgwMDAwMDAwOAotI2RlZmluZSBT
Q1RQX0RJU0FCTEVfRlJBR01FTlRTCQkweDAwMDAwMDA5Ci0jZGVmaW5lIFNDVFBfUEVFUl9BRERS
X1BBUkFNUyAJCTB4MDAwMDAwMGEKLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU0JCTB4
MDAwMDAwMGIKLS8qIGFuY2lsbGFyeSBkYXRhL25vdGlmaWNhdGlvbiBpbnRlcmVzdCBvcHRpb25z
ICovCi0jZGVmaW5lIFNDVFBfRVZFTlRTCQkJMHgwMDAwMDAwYyAvKiBkZXByZWNhdGVkICovCi0v
KiBXaXRob3V0IHRoaXMgYXBwbGllZCB3ZSB3aWxsIGdpdmUgVjQgYW5kIFY2IGFkZHJlc3NlcyBv
biBhIFY2IHNvY2tldCAqLwotI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUgkweDAw
MDAwMDBkCi0jZGVmaW5lIFNDVFBfTUFYU0VHIAkJCTB4MDAwMDAwMGUKLSNkZWZpbmUgU0NUUF9E
RUxBWUVEX1NBQ0sgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVmaW5lIFNDVFBfRlJBR01F
TlRfSU5URVJMRUFWRSAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVM
SVZFUllfUE9JTlQgICAgIDB4MDAwMDAwMTEKLS8qIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8K
LSNkZWZpbmUgU0NUUF9BVVRIX0NIVU5LIAkJMHgwMDAwMDAxMgotI2RlZmluZSBTQ1RQX0FVVEhf
S0VZIAkJCTB4MDAwMDAwMTMKLSNkZWZpbmUgU0NUUF9ITUFDX0lERU5UIAkJMHgwMDAwMDAxNAot
I2RlZmluZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAJCTB4MDAwMDAwMTUKLSNkZWZpbmUgU0NUUF9B
VVRIX0RFTEVURV9LRVkgCQkweDAwMDAwMDE2Ci0jZGVmaW5lIFNDVFBfVVNFX0VYVF9SQ1ZJTkZP
CQkweDAwMDAwMDE3Ci0jZGVmaW5lIFNDVFBfQVVUT19BU0NPTkYJCTB4MDAwMDAwMTggLyogcncg
Ki8KLSNkZWZpbmUgU0NUUF9NQVhCVVJTVAkJCTB4MDAwMDAwMTkgLyogcncgKi8KLSNkZWZpbmUg
U0NUUF9NQVhfQlVSU1QJCQkweDAwMDAwMDE5IC8qIHJ3ICovCi0vKiBhc3NvYyBsZXZlbCBjb250
ZXh0ICovCi0jZGVmaW5lIFNDVFBfQ09OVEVYVCAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAx
YSAvKiBydyAqLwotLyogZXhwbGljaXQgRU9SIHNpZ25hbGxpbmcgKi8KLSNkZWZpbmUgU0NUUF9F
WFBMSUNJVF9FT1IgICAgICAgICAgICAgICAweDAwMDAwMDFiCi0jZGVmaW5lIFNDVFBfUkVVU0Vf
UE9SVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYyAvKiBydyAqLwotI2RlZmluZSBTQ1RQX0FV
VEhfREVBQ1RJVkFURV9LRVkJMHgwMDAwMDAxZAotI2RlZmluZSBTQ1RQX0VWRU5UICAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAwMWUKLSNkZWZpbmUgU0NUUF9SRUNWUkNWSU5GTyAgICAgICAg
ICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFNDVFBfUkVDVk5YVElORk8gICAgICAgICAgICAg
ICAgMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5GTyAgICAgICAgICAgIDB4
MDAwMDAwMjEKLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAgICAgICAgICAweDAwMDAw
MDIyCi0jZGVmaW5lIFNDVFBfUEVFUl9BRERSX1RITERTICAgICAgICAgICAgMHgwMDAwMDAyMwot
I2RlZmluZSBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQgICAgIDB4MDAwMDAwMjQKLSNkZWZp
bmUgU0NUUF9FQ05fU1VQUE9SVEVEICAgICAgICAgICAgICAweDAwMDAwMDI1Ci0jZGVmaW5lIFND
VFBfUFJfU1VQUE9SVEVEICAgICAgICAgICAgICAgMHgwMDAwMDAyNgotI2RlZmluZSBTQ1RQX0FV
VEhfU1VQUE9SVEVEICAgICAgICAgICAgIDB4MDAwMDAwMjcKLSNkZWZpbmUgU0NUUF9BU0NPTkZf
U1VQUE9SVEVEICAgICAgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIFNDVFBfUkVDT05GSUdfU1VQ
UE9SVEVEICAgICAgICAgMHgwMDAwMDAyOQotI2RlZmluZSBTQ1RQX05SU0FDS19TVVBQT1JURUQg
ICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgU0NUUF9QS1REUk9QX1NVUFBPUlRFRCAgICAg
ICAgICAweDAwMDAwMDMxCi0jZGVmaW5lIFNDVFBfTUFYX0NXTkQgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAzMgotCi0vKgotICogcmVhZC1vbmx5IG9wdGlvbnMKLSAqLwotI2RlZmluZSBTQ1RQ
X1NUQVRVUwkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8JCTB4
MDAwMDAxMDEKLS8qIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8KLSNkZWZpbmUgU0NUUF9QRUVS
X0FVVEhfQ0hVTktTIAkJMHgwMDAwMDEwMgotI2RlZmluZSBTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktT
IAkJMHgwMDAwMDEwMwotI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19OVU1CRVIgICAgICAgICAgIDB4
MDAwMDAxMDQgLyogcm8gKi8KLSNkZWZpbmUgU0NUUF9HRVRfQVNTT0NfSURfTElTVCAgICAgICAg
ICAweDAwMDAwMTA1IC8qIHJvICovCi0jZGVmaW5lIFNDVFBfVElNRU9VVFMgICAgICAgICAgICAg
ICAgICAgMHgwMDAwMDEwNgotI2RlZmluZSBTQ1RQX1BSX1NUUkVBTV9TVEFUVVMgICAgICAgICAg
IDB4MDAwMDAxMDcKLSNkZWZpbmUgU0NUUF9QUl9BU1NPQ19TVEFUVVMgICAgICAgICAgICAweDAw
MDAwMTA4Ci0KLS8qCi0gKiB1c2VyIHNvY2tldCBvcHRpb25zOiBCU0QgaW1wbGVtZW50YXRpb24g
c3BlY2lmaWMKLSAqLwotLyoKLSAqIEJsb2NraW5nIEkvTyBpcyBlbmFibGVkIG9uIGFueSBUQ1Ag
dHlwZSBzb2NrZXQgYnkgZGVmYXVsdC4gRm9yIHRoZSBVRFAKLSAqIG1vZGVsIGlmIHRoaXMgaXMg
dHVybmVkIG9uIHRoZW4gdGhlIHNvY2tldCBidWZmZXIgaXMgc2hhcmVkIGZvciBzZW5kCi0gKiBy
ZXNvdXJjZXMgYW1vbmdzdCBhbGwgYXNzb2NpYXRpb25zLiAgVGhlIGRlZmF1bHQgZm9yIHRoZSBV
RFAgbW9kZWwgaXMgdGhhdAotICogaXMgU1NfTkJJTyBpcyBzZXQuICBXaGljaCBtZWFucyBhbGwg
YXNzb2NpYXRpb25zIGhhdmUgYSBzZXBhcmF0ZSBzZW5kCi0gKiBsaW1pdCBCVVQgdGhleSB3aWxs
IE5PVCBldmVyIEJMT0NLIGluc3RlYWQgeW91IHdpbGwgZ2V0IGFuIGVycm9yIGJhY2sKLSAqIEVB
R0FJTiBpZiB5b3UgdHJ5IHRvIHNlbmQgdG9vIG11Y2guIElmIHlvdSB3YW50IHRoZSBibG9ja2lu
ZyBzZW1hbnRpY3MgeW91Ci0gKiBzZXQgdGhpcyBvcHRpb24gYXQgdGhlIGNvc3Qgb2Ygc2hhcmlu
ZyBvbmUgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgYW1vbmdzdAotICogYWxsIGFzc29jaWF0aW9u
cy4gUGVlbGVkIG9mZiBzb2NrZXRzIHR1cm4gdGhpcyBvcHRpb24gb2ZmIGFuZCBibG9jay4gQnV0
Ci0gKiBzaW5jZSBib3RoIFRDUCBhbmQgcGVlbGVkIG9mZiBzb2NrZXRzIGhhdmUgb25seSBvbmUg
YXNzb2MgcGVyIHNvY2tldCB0aGlzCi0gKiBpcyBmaW5lLiBJdCBwcm9iYWJseSBkb2VzIE5PVCBt
YWtlIHNlbnNlIHRvIHNldCB0aGlzIG9uIFNTX05CSU8gb24gYSBUQ1AKLSAqIG1vZGVsIE9SIHBl
ZWxlZCBvZmYgVURQIG1vZGVsLCBidXQgd2UgZG8gYWxsb3cgeW91IHRvIGRvIHNvLiBZb3UganVz
dCB1c2UKLSAqIHRoZSBub3JtYWwgc3lzY2FsbCB0byB0b2dnbGUgU1NfTkJJTyB0aGUgd2F5IHlv
dSB3YW50LgotICoKLSAqIEJsb2NraW5nIEkvTyBpcyBjb250cm9sbGVkIGJ5IHRoZSBTU19OQklP
IGZsYWcgb24gdGhlIHNvY2tldCBzdGF0ZSBzb19zdGF0ZQotICogZmllbGQuCi0gKi8KLQotI2Rl
ZmluZSBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQJMHgwMDAwMDkwMCAvKiBzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqLwotI2RlZmluZSBTQ1RQX1JFU0VUX1NUUkVBTVMJCTB4MDAwMDA5MDEgLyog
c3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqLwotI2RlZmluZSBTQ1RQX1JFU0VUX0FTU09DCQkw
eDAwMDAwOTAyIC8qIHNjdHBfYXNzb2NfdCAqLwotI2RlZmluZSBTQ1RQX0FERF9TVFJFQU1TCQkw
eDAwMDAwOTAzIC8qIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICovCi0KLS8qIEZvciBlbmFibGUg
c3RyZWFtIHJlc2V0ICovCi0jZGVmaW5lIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEgCTB4
MDAwMDAwMDEKLSNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfQVNTT0NfUkVRIAkweDAwMDAwMDAy
Ci0jZGVmaW5lIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEgCTB4MDAwMDAwMDQKLSNkZWZp
bmUgU0NUUF9FTkFCTEVfVkFMVUVfTUFTSwkJMHgwMDAwMDAwNwotLyogRm9yIHJlc2V0IHN0cmVh
bXMgKi8KLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcJMHgwMDAwMDAwMQotI2Rl
ZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lORwkweDAwMDAwMDAyCi0KLQotLyogaGVyZSBv
biBkb3duIGFyZSBtb3JlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICovCi0jZGVmaW5lIFNDVFBf
U0VUX0RFQlVHX0xFVkVMCQkweDAwMDAxMDA1Ci0jZGVmaW5lIFNDVFBfQ0xSX1NUQVRfTE9HICAg
ICAgICAgICAgICAgMHgwMDAwMTAwNwotLyogQ01UIE9OL09GRiBzb2NrZXQgb3B0aW9uICovCi0j
ZGVmaW5lIFNDVFBfQ01UX09OX09GRiAgICAgICAgICAgICAgICAgMHgwMDAwMTIwMAotI2RlZmlu
ZSBTQ1RQX0NNVF9VU0VfREFDICAgICAgICAgICAgICAgIDB4MDAwMDEyMDEKLS8qIEpSUyAtIFBs
dWdnYWJsZSBDb25nZXN0aW9uIENvbnRyb2wgU29ja2V0IG9wdGlvbiAqLwotI2RlZmluZSBTQ1RQ
X1BMVUdHQUJMRV9DQyAgICAgICAgICAgICAgIDB4MDAwMDEyMDIKLS8qIFJTIC0gUGx1Z2dhYmxl
IFN0cmVhbSBTY2hlZHVsaW5nIFNvY2tldCBvcHRpb24gKi8KLSNkZWZpbmUgU0NUUF9QTFVHR0FC
TEVfU1MJCTB4MDAwMDEyMDMKLSNkZWZpbmUgU0NUUF9TU19WQUxVRQkJCTB4MDAwMDEyMDQKLSNk
ZWZpbmUgU0NUUF9DQ19PUFRJT04JCQkweDAwMDAxMjA1IC8qIE9wdGlvbnMgZm9yIENDIG1vZHVs
ZXMgKi8KLS8qIEZvciBJLURBVEEgKi8KLSNkZWZpbmUgU0NUUF9JTlRFUkxFQVZJTkdfU1VQUE9S
VEVECTB4MDAwMDEyMDYKLQotLyogcmVhZCBvbmx5ICovCi0jZGVmaW5lIFNDVFBfR0VUX1NOREJV
Rl9VU0UJCTB4MDAwMDExMDEKLSNkZWZpbmUgU0NUUF9HRVRfU1RBVF9MT0cJCTB4MDAwMDExMDMK
LSNkZWZpbmUgU0NUUF9QQ0JfU1RBVFVTCQkJMHgwMDAwMTEwNAotI2RlZmluZSBTQ1RQX0dFVF9O
T05DRV9WQUxVRVMgICAgICAgICAgIDB4MDAwMDExMDUKLQotCi0vKiBTcGVjaWFsIGhvb2sgZm9y
IGR5bmFtaWNhbGx5IHNldHRpbmcgcHJpbWFyeSBmb3IgYWxsIGFzc29jJ3MsCi0gKiB0aGlzIGlz
IGEgd3JpdGUgb25seSBvcHRpb24gdGhhdCByZXF1aXJlcyByb290IHByaXZpbGVnZS4KLSAqLwot
I2RlZmluZSBTQ1RQX1NFVF9EWU5BTUlDX1BSSU1BUlkgICAgICAgIDB4MDAwMDIwMDEKLQotLyog
VlJGICh2aXJ0dWFsIHJvdXRlciBmZWF0dXJlKSBhbmQgbXVsdGktVlJGIHN1cHBvcnQKLSAqIG9w
dGlvbnMuIFZSRidzIHByb3ZpZGUgc3BsaXRzIHdpdGhpbiBhIHJvdXRlcgotICogdGhhdCBnaXZl
IHRoZSB2aWV3cyBvZiBtdWx0aXBsZSByb3V0ZXJzLiBBCi0gKiBzdGFuZGFyZCBob3N0LCB3aXRo
b3V0IFZSRiBzdXBwb3J0LCBpcyBqdXN0Ci0gKiBhIHNpbmdsZSBWUkYuIElmIFZSRidzIGFyZSBz
dXBwb3J0ZWQgdGhlbgotICogdGhlIHRyYW5zcG9ydCBtdXN0IGJlIFZSRiBhd2FyZS4gVGhpcyBt
ZWFucwotICogdGhhdCBldmVyeSBzb2NrZXQgY2FsbCBjb21pbmcgaW4gbXVzdCBiZSBkaXJlY3Rl
ZAotICogd2l0aGluIHRoZSBlbmRwb2ludCB0byBvbmUgb2YgdGhlIFZSRidzIGl0IGJlbG9uZ3MK
LSAqIHRvLiBUaGUgZW5kcG9pbnQsIGJlZm9yZSBiaW5kaW5nLCBtYXkgc2VsZWN0Ci0gKiB0aGUg
ImRlZmF1bHQiIFZSRiBpdCBpcyBpbiBieSB1c2luZyBhIHNldCBzb2NrZXQKLSAqIG9wdGlvbiB3
aXRoIFNDVFBfVlJGX0lELiBUaGlzIHdpbGwgYWxzbwotICogZ2V0IHByb3BhZ2F0ZWQgdG8gdGhl
IGRlZmF1bHQgVlJGLiBPbmNlIHRoZQotICogZW5kcG9pbnQgYmluZHMgYW4gYWRkcmVzcyB0aGVu
IGl0IENBTk5PVCBhZGQKLSAqIGFkZGl0aW9uYWwgVlJGJ3MgdG8gYmVjb21lIGEgTXVsdGktVlJG
IGVuZHBvaW50LgotICoKLSAqIEJlZm9yZSBCSU5ESU5HIGFkZGl0aW9uYWwgVlJGJ3MgY2FuIGJl
IGFkZGVkIHdpdGgKLSAqIHRoZSBTQ1RQX0FERF9WUkZfSUQgY2FsbCBvciBkZWxldGVkIHdpdGgK
LSAqIFNDVFBfREVMX1ZSRl9JRC4KLSAqCi0gKiBBc3NvY2lhdGlvbnMgYXJlIEFMV0FZUyBjb250
YWluZWQgaW5zaWRlIGEgc2luZ2xlCi0gKiBWUkYuIFRoZXkgY2Fubm90IHJlc2lkZSBpbiB0d28g
KG9yIG1vcmUpIFZSRidzLiBJbmNvbWluZwotICogcGFja2V0cywgYXNzdW1pbmcgdGhlIHJvdXRl
ciBpcyBWUkYgYXdhcmUsIGNhbiBhbHdheXMKLSAqIHRlbGwgdXMgd2hhdCBWUkYgdGhleSBhcnJp
dmVkIG9uLiBBIGhvc3Qgbm90IHN1cHBvcnRpbmcKLSAqIGFueSBWUkYncyB3aWxsIGZpbmQgdGhh
dCB0aGUgcGFja2V0cyBhbHdheXMgYXJyaXZlZCBvbiB0aGUKLSAqIHNpbmdsZSBWUkYgdGhhdCB0
aGUgaG9zdCBoYXMuCi0gKgotICovCi0KLSNkZWZpbmUgU0NUUF9WUkZfSUQJCQkweDAwMDAzMDAx
Ci0jZGVmaW5lIFNDVFBfQUREX1ZSRl9JRAkJCTB4MDAwMDMwMDIKLSNkZWZpbmUgU0NUUF9HRVRf
VlJGX0lEUwkJMHgwMDAwMzAwMwotI2RlZmluZSBTQ1RQX0dFVF9BU09DX1ZSRiAgICAgICAgICAg
ICAgIDB4MDAwMDMwMDQKLSNkZWZpbmUgU0NUUF9ERUxfVlJGX0lEICAgICAgICAgICAgICAgICAw
eDAwMDAzMDA1Ci0KLS8qCi0gKiBJZiB5b3UgZW5hYmxlIHBhY2tldCBsb2dnaW5nIHlvdSBjYW4g
Z2V0Ci0gKiBhIHBvb3IgbWFucyBldGhlcmVhbCBvdXRwdXQgaW4gYmluYXJ5Ci0gKiBmb3JtLiBO
b3RlIHRoaXMgaXMgYSBjb21waWxlIG9wdGlvbiB0bwotICogdGhlIGtlcm5lbCwgIFNDVFBfUEFD
S0VUX0xPR0dJTkcsIGFuZAotICogd2l0aG91dCBpdCBpbiB5b3VyIGtlcm5lbCB5b3UKLSAqIHdp
bGwgZ2V0IGEgRU9QTk9UU1VQUAotICovCi0jZGVmaW5lIFNDVFBfR0VUX1BBQ0tFVF9MT0cgICAg
ICAgICAgICAgMHgwMDAwNDAwMQotCi0vKgotICogaGlkZGVuIGltcGxlbWVudGF0aW9uIHNwZWNp
ZmljIG9wdGlvbnMgdGhlc2UgYXJlIE5PVCB1c2VyIHZpc2libGUgKHNob3VsZAotICogbW92ZSBv
dXQgb2Ygc2N0cC5oKQotICovCi0vKiBzY3RwX2JpbmR4KCkgZmxhZ3MgYXMgaGlkZGVuIHNvY2tl
dCBvcHRpb25zICovCi0jZGVmaW5lIFNDVFBfQklORFhfQUREX0FERFIJCTB4MDAwMDgwMDEKLSNk
ZWZpbmUgU0NUUF9CSU5EWF9SRU1fQUREUgkJMHgwMDAwODAwMgotLyogSGlkZGVuIHNvY2tldCBv
cHRpb24gdGhhdCBnZXRzIHRoZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUgU0NUUF9HRVRfUEVFUl9B
RERSRVNTRVMJCTB4MDAwMDgwMDMKLSNkZWZpbmUgU0NUUF9HRVRfTE9DQUxfQUREUkVTU0VTCTB4
MDAwMDgwMDQKLS8qIHJldHVybiB0aGUgdG90YWwgY291bnQgaW4gYnl0ZXMgbmVlZGVkIHRvIGhv
bGQgYWxsIGxvY2FsIGFkZHJlc3NlcyBib3VuZCAqLwotI2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9B
RERSX1NJWkUJMHgwMDAwODAwNQotLyogUmV0dXJuIHRoZSB0b3RhbCBjb3VudCBpbiBieXRlcyBu
ZWVkZWQgdG8gaG9sZCB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KLSNkZWZpbmUgU0NUUF9HRVRfUkVN
T1RFX0FERFJfU0laRQkweDAwMDA4MDA2Ci0vKiBoaWRkZW4gb3B0aW9uIGZvciBjb25uZWN0eCAq
LwotI2RlZmluZSBTQ1RQX0NPTk5FQ1RfWAkJCTB4MDAwMDgwMDcKLS8qIGhpZGRlbiBvcHRpb24g
Zm9yIGNvbm5lY3R4X2RlbGF5ZWQsIHBhcnQgb2Ygc2VuZHggKi8KLSNkZWZpbmUgU0NUUF9DT05O
RUNUX1hfREVMQVlFRAkJMHgwMDAwODAwOAotI2RlZmluZSBTQ1RQX0NPTk5FQ1RfWF9DT01QTEVU
RSAgICAgICAgIDB4MDAwMDgwMDkKLS8qIGhpZGRlbiBzb2NrZXQgb3B0aW9uIGJhc2VkIHNjdHBf
cGVlbG9mZiAqLwotI2RlZmluZSBTQ1RQX1BFRUxPRkYgICAgICAgICAgICAgICAgICAgIDB4MDAw
MDgwMGEKLS8qIHRoZSByZWFsIHdvcmtlciBmb3Igc2N0cF9nZXRhZGRybGVuKCkgKi8KLSNkZWZp
bmUgU0NUUF9HRVRfQUREUl9MRU4gICAgICAgICAgICAgICAweDAwMDA4MDBiCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pCi0vKiB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3IgQXBwbGUgbGlzdGVuKCkg
aXNzdWUsIG5vIGFyZ3MgdXNlZCAqLwotI2RlZmluZSBTQ1RQX0xJU1RFTl9GSVgJCQkweDAwMDA4
MDBjCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotLyogd29ya2Fyb3VuZCBmb3Ig
Q3lnd2luIG9uIFdpbmRvd3M6IHJldHVybnMgdGhlIFNPQ0tFVCBoYW5kbGUgKi8KLSNkZWZpbmUg
U0NUUF9HRVRfSEFORExFCQkJMHgwMDAwODAwZAotI2VuZGlmCi0vKiBEZWJ1ZyB0aGluZ3MgdGhh
dCBuZWVkIHRvIGJlIHB1cmdlZCAqLwotI2RlZmluZSBTQ1RQX1NFVF9JTklUSUFMX0RCR19TRVEJ
MHgwMDAwOWYwMAotCi0vKiBKUlMgLSBTdXBwb3J0ZWQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVs
ZXMgZm9yIHBsdWdnYWJsZQotICogY29uZ2VzdGlvbiBjb250cm9sCi0gKi8KLS8qIFN0YW5kYXJk
IFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKi8KLSNkZWZpbmUgU0NUUF9DQ19SRkMyNTgxCQkweDAw
MDAwMDAwCi0vKiBIaWdoIFNwZWVkIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKEZsb3lkKSAqLwot
I2RlZmluZSBTQ1RQX0NDX0hTVENQCQkweDAwMDAwMDAxCi0vKiBIVENQIENvbmdlc3Rpb24gQ29u
dHJvbCAqLwotI2RlZmluZSBTQ1RQX0NDX0hUQ1AJCTB4MDAwMDAwMDIKLS8qIFJUQ0MgQ29uZ2Vz
dGlvbiBDb250cm9sIC0gUkZDMjU4MSBwbHVzICovCi0jZGVmaW5lIFNDVFBfQ0NfUlRDQyAgICAg
ICAgICAgIDB4MDAwMDAwMDMKLQotI2RlZmluZSBTQ1RQX0NDX09QVF9SVENDX1NFVE1PREUJMHgw
MDAwMjAwMAotI2RlZmluZSBTQ1RQX0NDX09QVF9VU0VfRENDQ19FQ04JMHgwMDAwMjAwMQotI2Rl
ZmluZSBTQ1RQX0NDX09QVF9TVEVBRFlfU1RFUCAgICAgICAgIDB4MDAwMDIwMDIKLQotI2RlZmlu
ZSBTQ1RQX0NNVF9PRkYgICAgICAgICAgICAwCi0jZGVmaW5lIFNDVFBfQ01UX0JBU0UgICAgICAg
ICAgIDEKLSNkZWZpbmUgU0NUUF9DTVRfUlBWMSAgICAgICAgICAgMgotI2RlZmluZSBTQ1RQX0NN
VF9SUFYyICAgICAgICAgICAzCi0jZGVmaW5lIFNDVFBfQ01UX01QVENQICAgICAgICAgIDQKLSNk
ZWZpbmUgU0NUUF9DTVRfTUFYICAgICAgICAgICAgU0NUUF9DTVRfTVBUQ1AKLQotLyogUlMgLSBT
dXBwb3J0ZWQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlcyBmb3IgcGx1Z2dhYmxlCi0gKiBzdHJl
YW0gc2NoZWR1bGluZwotICovCi0vKiBEZWZhdWx0IHNpbXBsZSByb3VuZC1yb2JpbiAqLwotI2Rl
ZmluZSBTQ1RQX1NTX0RFRkFVTFQJCQkweDAwMDAwMDAwCi0vKiBSZWFsIHJvdW5kLXJvYmluICov
Ci0jZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9CSU4JCTB4MDAwMDAwMDEKLS8qIFJlYWwgcm91bmQt
cm9iaW4gcGVyIHBhY2tldCAqLwotI2RlZmluZSBTQ1RQX1NTX1JPVU5EX1JPQklOX1BBQ0tFVAkw
eDAwMDAwMDAyCi0vKiBQcmlvcml0eSAqLwotI2RlZmluZSBTQ1RQX1NTX1BSSU9SSVRZCQkweDAw
MDAwMDAzCi0vKiBGYWlyIEJhbmR3aWR0aCAqLwotI2RlZmluZSBTQ1RQX1NTX0ZBSVJfQkFORFdJ
VEgJCTB4MDAwMDAwMDQKLS8qIEZpcnN0LWNvbWUsIGZpcnN0LXNlcnZlICovCi0jZGVmaW5lIFND
VFBfU1NfRklSU1RfQ09NRQkJMHgwMDAwMDAwNQotCi0KLS8qIGZyYWdtZW50IGludGVybGVhdmUg
Y29uc3RhbnRzCi0gKiBzZXR0aW5nIG11c3QgYmUgb25lIG9mIHRoZXNlIG9yCi0gKiBFSU5WQUwg
cmV0dXJuZWQuCi0gKi8KLSNkZWZpbmUgU0NUUF9GUkFHX0xFVkVMXzAgICAgMHgwMDAwMDAwMAot
I2RlZmluZSBTQ1RQX0ZSQUdfTEVWRUxfMSAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfRlJB
R19MRVZFTF8yICAgIDB4MDAwMDAwMDIKLQotLyoKLSAqIHVzZXIgc3RhdGUgdmFsdWVzCi0gKi8K
LSNkZWZpbmUgU0NUUF9DTE9TRUQJCQkweDAwMDAKLSNkZWZpbmUgU0NUUF9CT1VORAkJCTB4MTAw
MAotI2RlZmluZSBTQ1RQX0xJU1RFTgkJCTB4MjAwMAotI2RlZmluZSBTQ1RQX0NPT0tJRV9XQUlU
CQkweDAwMDIKLSNkZWZpbmUgU0NUUF9DT09LSUVfRUNIT0VECQkweDAwMDQKLSNkZWZpbmUgU0NU
UF9FU1RBQkxJU0hFRAkJMHgwMDA4Ci0jZGVmaW5lIFNDVFBfU0hVVERPV05fU0VOVAkJMHgwMDEw
Ci0jZGVmaW5lIFNDVFBfU0hVVERPV05fUkVDRUlWRUQJCTB4MDAyMAotI2RlZmluZSBTQ1RQX1NI
VVRET1dOX0FDS19TRU5UCQkweDAwNDAKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9QRU5ESU5HCQkw
eDAwODAKLQotLyoKLSAqIFNDVFAgb3BlcmF0aW9uYWwgZXJyb3IgY29kZXMgKHVzZXIgdmlzaWJs
ZSkKLSAqLwotI2RlZmluZSBTQ1RQX0NBVVNFX05PX0VSUk9SCQkweDAwMDAKLSNkZWZpbmUgU0NU
UF9DQVVTRV9JTlZBTElEX1NUUkVBTQkweDAwMDEKLSNkZWZpbmUgU0NUUF9DQVVTRV9NSVNTSU5H
X1BBUkFNCTB4MDAwMgotI2RlZmluZSBTQ1RQX0NBVVNFX1NUQUxFX0NPT0tJRQkJMHgwMDAzCi0j
ZGVmaW5lIFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MJCTB4MDAwNAotI2RlZmluZSBTQ1RQX0NBVVNF
X1VOUkVTT0xWQUJMRV9BRERSCTB4MDAwNQotI2RlZmluZSBTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hV
TksJMHgwMDA2Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTQkweDAwMDcKLSNkZWZp
bmUgU0NUUF9DQVVTRV9VTlJFQ09HX1BBUkFNCTB4MDAwOAotI2RlZmluZSBTQ1RQX0NBVVNFX05P
X1VTRVJfREFUQQkJMHgwMDA5Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfQ09PS0lFX0lOX1NIVVRET1dO
CTB4MDAwYQotI2RlZmluZSBTQ1RQX0NBVVNFX1JFU1RBUlRfV19ORVdBRERSCTB4MDAwYgotI2Rl
ZmluZSBTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVAkweDAwMGMKLSNkZWZpbmUgU0NUUF9D
QVVTRV9QUk9UT0NPTF9WSU9MQVRJT04JMHgwMDBkCi0KLS8qIEVycm9yIGNhdXNlcyBmcm9tIFJG
QzUwNjEgKi8KLSNkZWZpbmUgU0NUUF9DQVVTRV9ERUxFVElOR19MQVNUX0FERFIJMHgwMGEwCi0j
ZGVmaW5lIFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0UJMHgwMGExCi0jZGVmaW5lIFNDVFBf
Q0FVU0VfREVMRVRJTkdfU1JDX0FERFIJMHgwMGEyCi0jZGVmaW5lIFNDVFBfQ0FVU0VfSUxMRUdB
TF9BU0NPTkZfQUNLCTB4MDBhMwotI2RlZmluZSBTQ1RQX0NBVVNFX1JFUVVFU1RfUkVGVVNFRAkw
eDAwYTQKLQotLyogRXJyb3IgY2F1c2VzIGZyb20gbmF0LWRyYWZ0ICovCi0jZGVmaW5lIFNDVFBf
Q0FVU0VfTkFUX0NPTExJRElOR19TVEFURSAgMHgwMGIwCi0jZGVmaW5lIFNDVFBfQ0FVU0VfTkFU
X01JU1NJTkdfU1RBVEUgICAgMHgwMGIxCi0KLS8qIEVycm9yIGNhdXNlcyBmcm9tIFJGQzQ4OTUg
Ki8KLSNkZWZpbmUgU0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFDSUQJMHgwMTA1Ci0KLS8qCi0g
KiBlcnJvciBjYXVzZSBwYXJhbWV0ZXJzICh1c2VyIHZpc2libGUpCi0gKi8KLXN0cnVjdCBzY3Rw
X2dlbl9lcnJvcl9jYXVzZSB7Ci0JdWludDE2X3QgY29kZTsKLQl1aW50MTZfdCBsZW5ndGg7Ci0J
dWludDhfdCBpbmZvW107Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVz
ZSB7Ci0JdWludDE2X3QgY29kZTsKLQl1aW50MTZfdCBsZW5ndGg7Ci0JLyogb3B0aW9uYWwgY2F1
c2Utc3BlY2lmaWMgaW5mbyBtYXkgZm9sbG93ICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qg
c2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSB7Ci0Jc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1
c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9JTlZBTElEX1NUUkVBTSAqLwotCXVpbnQxNl90IHN0cmVh
bV9pZDsJLyogc3RyZWFtIGlkIG9mIHRoZSBEQVRBIGluIGVycm9yICovCi0JdWludDE2X3QgcmVz
ZXJ2ZWQ7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9taXNzaW5nX3BhcmFt
IHsKLQlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX01J
U1NJTkdfUEFSQU0gKi8KLQl1aW50MzJfdCBudW1fbWlzc2luZ19wYXJhbXM7CS8qIG51bWJlciBv
ZiBtaXNzaW5nIHBhcmFtZXRlcnMgKi8KLQl1aW50MTZfdCB0eXBlW107Ci19IFNDVFBfUEFDS0VE
OwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUgewotCXN0cnVjdCBzY3RwX2Vycm9y
X2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfU1RBTEVfQ09PS0lFICovCi0JdWludDMy
X3Qgc3RhbGVfdGltZTsJLyogdGltZSBpbiB1c2VjIG9mIHN0YWxlbmVzcyAqLwotfSBTQ1RQX1BB
Q0tFRDsKLQotc3RydWN0IHNjdHBfZXJyb3Jfb3V0X29mX3Jlc291cmNlIHsKLQlzdHJ1Y3Qgc2N0
cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX09VVF9PRl9SRVNPVVJDRVMg
Ki8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2Vycm9yX3VucmVzb2x2X2FkZHIgewot
CXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfVU5SRVNP
TFZBQkxFX0FERFIgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2Vycm9yX3VucmVj
b2duaXplZF9jaHVuayB7Ci0Jc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9
U0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LICovCi0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Lyog
aGVhZGVyIGZyb20gY2h1bmsgaW4gZXJyb3IgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBz
Y3RwX2Vycm9yX25vX3VzZXJfZGF0YSB7Ci0Jc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1c2U7
CS8qIGNvZGU9U0NUUF9DQVVTRV9OT19VU0VSX0RBVEEgKi8KLQl1aW50MzJfdCB0c247CQkJLyog
VFNOIG9mIHRoZSBlbXB0eSBkYXRhIGNodW5rICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qg
c2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYyB7Ci0Jc3RydWN0IHNjdHBfZXJyb3JfY2F1c2Ug
Y2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFDSUQgKi8KLQl1aW50MTZf
dCBobWFjX2lkOwotfSBTQ1RQX1BBQ0tFRDsKLQotLyoKLSAqIE1haW4gU0NUUCBjaHVuayB0eXBl
cyB3ZSBwbGFjZSB0aGVzZSBoZXJlIHNvIG5hdGQgYW5kIGYvdydzIGluIHVzZXIgbGFuZAotICog
Y2FuIGZpbmQgdGhlbS4KLSAqLwotLyoqKioqKioqKioqKjB4MDAgc2VyaWVzICoqKioqKioqKioq
LwotI2RlZmluZSBTQ1RQX0RBVEEJCTB4MDAKLSNkZWZpbmUgU0NUUF9JTklUSUFUSU9OCQkweDAx
Ci0jZGVmaW5lIFNDVFBfSU5JVElBVElPTl9BQ0sJMHgwMgotI2RlZmluZSBTQ1RQX1NFTEVDVElW
RV9BQ0sJMHgwMwotI2RlZmluZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUCTB4MDQKLSNkZWZpbmUg
U0NUUF9IRUFSVEJFQVRfQUNLCTB4MDUKLSNkZWZpbmUgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTgkw
eDA2Ci0jZGVmaW5lIFNDVFBfU0hVVERPV04JCTB4MDcKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9B
Q0sJMHgwOAotI2RlZmluZSBTQ1RQX09QRVJBVElPTl9FUlJPUgkweDA5Ci0jZGVmaW5lIFNDVFBf
Q09PS0lFX0VDSE8JMHgwYQotI2RlZmluZSBTQ1RQX0NPT0tJRV9BQ0sJCTB4MGIKLSNkZWZpbmUg
U0NUUF9FQ05fRUNITwkJMHgwYwotI2RlZmluZSBTQ1RQX0VDTl9DV1IJCTB4MGQKLSNkZWZpbmUg
U0NUUF9TSFVURE9XTl9DT01QTEVURQkweDBlCi0vKiBSRkM0ODk1ICovCi0jZGVmaW5lIFNDVFBf
QVVUSEVOVElDQVRJT04gICAgIDB4MGYKLS8qIEVZIG5yX3NhY2sgY2h1bmsgaWQqLwotI2RlZmlu
ZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0sJMHgxMAotLyoqKioqKioqKioqKjB4NDAgc2VyaWVzICoq
KioqKioqKioqLwotI2RlZmluZSBTQ1RQX0lEQVRBCQkweDQwCi0vKioqKioqKioqKioqMHg4MCBz
ZXJpZXMgKioqKioqKioqKiovCi0vKiBSRkM1MDYxICovCi0jZGVmaW5lCVNDVFBfQVNDT05GX0FD
SwkJMHg4MAotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXBrdGRycHNjdHAgKi8KLSNkZWZpbmUgU0NU
UF9QQUNLRVRfRFJPUFBFRAkweDgxCi0vKiBkcmFmdC1pZXRmLXN0ZXdhcnQtc3RycmVzZXQteHh4
ICovCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUICAgICAgIDB4ODIKLQotLyogUkZDNDgyMCAg
ICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTQ1RQX1BBRF9DSFVOSyAgICAgICAg
ICAweDg0Ci0vKioqKioqKioqKioqMHhjMCBzZXJpZXMgKioqKioqKioqKiovCi0vKiBSRkMzNzU4
ICovCi0jZGVmaW5lIFNDVFBfRk9SV0FSRF9DVU1fVFNOCTB4YzAKLS8qIFJGQzUwNjEgKi8KLSNk
ZWZpbmUgU0NUUF9BU0NPTkYJCTB4YzEKLSNkZWZpbmUgU0NUUF9JRk9SV0FSRF9DVU1fVFNOCTB4
YzIKLQotLyogQUJPUlQgYW5kIFNIVVRET1dOIENPTVBMRVRFIEZMQUcgKi8KLSNkZWZpbmUgU0NU
UF9IQURfTk9fVENCCQkweDAxCi0KLS8qIFBhY2tldCBkcm9wcGVkIGZsYWdzICovCi0jZGVmaW5l
IFNDVFBfRlJPTV9NSURETEVfQk9YCVNDVFBfSEFEX05PX1RDQgotI2RlZmluZSBTQ1RQX0JBRENS
QwkJMHgwMgotI2RlZmluZSBTQ1RQX1BBQ0tFVF9UUlVOQ0FURUQJMHgwNAotCi0vKiBGbGFnIGZv
ciBFQ04gLUNXUiAqLwotI2RlZmluZSBTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUgMHgwMQotI2Rl
ZmluZSBTQ1RQX0NXUl9JTl9TQU1FX1dJTkRPVyAgMHgwMgotCi0jZGVmaW5lIFNDVFBfU0FUX05F
VFdPUktfTUlOCTQwMAkvKiBtaW4gbXMgZm9yIFJUVCB0byBzZXQgc2F0ZWxsaXRlCi0JCQkJCSAq
IHRpbWUgKi8KLSNkZWZpbmUgU0NUUF9TQVRfTkVUV09SS19CVVJTVF9JTkNSICAyCS8qIGhvdyBt
YW55IHRpbWVzIHRvIG11bHRpcGx5IG1heGJ1cnN0Ci0JCQkJCSAqIGluIHNhdCAqLwotCi0vKiBE
YXRhIENodWNrIFNwZWNpZmljIEZsYWdzICovCi0jZGVmaW5lIFNDVFBfREFUQV9GUkFHX01BU0sg
ICAgICAgIDB4MDMKLSNkZWZpbmUgU0NUUF9EQVRBX01JRERMRV9GUkFHICAgICAgMHgwMAotI2Rl
ZmluZSBTQ1RQX0RBVEFfTEFTVF9GUkFHICAgICAgICAweDAxCi0jZGVmaW5lIFNDVFBfREFUQV9G
SVJTVF9GUkFHICAgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9EQVRBX05PVF9GUkFHICAgICAgICAg
MHgwMwotI2RlZmluZSBTQ1RQX0RBVEFfVU5PUkRFUkVEICAgICAgICAweDA0Ci0jZGVmaW5lIFND
VFBfREFUQV9TQUNLX0lNTUVESUFURUxZIDB4MDgKLS8qIEVDTiBOb25jZTogU0FDSyBDaHVuayBT
cGVjaWZpYyBGbGFncyAqLwotI2RlZmluZSBTQ1RQX1NBQ0tfTk9OQ0VfU1VNICAgICAgICAweDAx
Ci0KLS8qIENNVCBEQUMgYWxnb3JpdGhtIFNBQ0sgZmxhZyAqLwotI2RlZmluZSBTQ1RQX1NBQ0tf
Q01UX0RBQyAgICAgICAgICAweDgwCi0KLS8qCi0gKiBQQ0IgZmxhZ3MgKGluIHNjdHBfZmxhZ3Mg
Yml0bWFzaykuCi0gKiBOb3RlIHRoZSBmZWF0dXJlcyBhbmQgZmxhZ3MgYXJlIG1lYW50Ci0gKiBm
b3IgdXNlIGJ5IG5ldHN0YXQuCi0gKi8KLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRQkJ
MHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFCQkweDAwMDAwMDAyCi0j
ZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBf
UENCX0ZMQUdTX0FDQ0VQVElORwkweDAwMDAwMDA4Ci0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1VO
Qk9VTkQJCTB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVAgICAgICAg
ICAweDAwMDQwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBU19DT05ORUNURUQgICAgMHgw
MDA4MDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19XQVNfQUJPUlRFRCAgICAgIDB4MDAxMDAw
MDAKLS8qIFRDUCBtb2RlbCBzdXBwb3J0ICovCi0KLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVECTB4MDAyMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTAkweDAw
NDAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRQkweDAwODAwMDAwCi0jZGVm
aW5lIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQJMHgwMTAwMDAwMAotI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19XQUtFSU5QVVQJMHgwMjAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19CT1VO
RF9WNgkJMHgwNDAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19CTE9DS0lOR19JTwkweDA4
MDAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FCTB4MTAwMDAwMDAKLSNk
ZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUJMHgyMDAwMDAwMAotI2RlZmluZSBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFECTB4NDAwMDAwMDAKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4gICAgICAgMHg4
MDAwMDAwMAotCi0vKiBmbGFncyB0byBjb3B5IHRvIG5ldyBQQ0IgKi8KLSNkZWZpbmUgU0NUUF9Q
Q0JfQ09QWV9GTEFHUwkJKFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMfFwKLQkJCQkJIFNDVFBfUENC
X0ZMQUdTX1dBS0VJTlBVVHxcCi0JCQkJCSBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNnxcCi0JCQkJ
CSBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKQotI2Vsc2UKLQotLyogZmxhZ3MgdG8gY29weSB0
byBuZXcgUENCICovCi0jZGVmaW5lIFNDVFBfUENCX0NPUFlfRkxBR1MJCShTQ1RQX1BDQl9GTEFH
U19CT1VOREFMTHxcCi0JCQkJCSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVR8XAotCQkJCQkgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjYpCi0jZW5kaWYKLQotLyoKLSAqIFBDQiBGZWF0dXJlcyAoaW4g
c2N0cF9mZWF0dXJlcyBiaXRtYXNrKQotICovCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPX05P
VF9QTVRVRCAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19F
WFRfUkNWSU5GTyAgICAgICAweDAwMDAwMDAwMDAwMDAwMDIgLyogZGVwcmVjYXRlZCAqLwotI2Rl
ZmluZSBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJFQVQgICAweDAwMDAwMDAwMDAwMDAwMDQK
LSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFICAgMHgwMDAwMDAwMDAwMDAw
MDA4Ci0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMgIDB4MDAwMDAwMDAw
MDAwMDAxMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYgICAgICAgICAweDAwMDAw
MDAwMDAwMDAwMjAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYgICAgICAgMHgw
MDAwMDAwMDAwMDAwMDQwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1pFUk9fQ09QWV9BQ1RJVkUg
IDB4MDAwMDAwMDAwMDAwMDA4MAotLyogc29ja2V0IG9wdGlvbnMgKi8KLSNkZWZpbmUgU0NUUF9Q
Q0JfRkxBR1NfTk9ERUxBWSAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAwMTAwCi0jZGVmaW5lIFND
VFBfUENCX0ZMQUdTX0FVVE9DTE9TRSAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDIwMAotI2RlZmlu
ZSBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCAgICAweDAwMDAwMDAwMDAwMDA0MDAgLyog
ZGVwcmVjYXRlZCAqLwotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWQVNTT0NFVk5UICAgICAw
eDAwMDAwMDAwMDAwMDA4MDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVCAg
ICAgMHgwMDAwMDAwMDAwMDAxMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJS
ICAgICAgIDB4MDAwMDAwMDAwMDAwMjAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UICAweDAwMDAwMDAwMDAwMDQwMDAgLyogZGVwcmVjYXRlZCAqLwotI2RlZmluZSBT
Q1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UICAweDAwMDAwMDAwMDAwMDgwMDAKLSNkZWZp
bmUgU0NUUF9QQ0JfRkxBR1NfQURBUFRBVElPTkVWTlQgICAgMHgwMDAwMDAwMDAwMDEwMDAwCi0j
ZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCAgICAgICAgIDB4MDAwMDAwMDAwMDAyMDAw
MAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCAgICAgICAgICAweDAwMDAwMDAwMDAw
NDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVCAgMHgwMDAwMDAw
MDAwMDgwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05PX0ZSQUdNRU5UICAgICAgIDB4MDAw
MDAwMDAwMDEwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJVF9FT1IgICAgICAw
eDAwMDAwMDAwMDA0MDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0
ICAgMHgwMDAwMDAwMDAwODAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX01VTFRJUExFX0FT
Q09ORlMgIDB4MDAwMDAwMDAwMTAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19QT1JUUkVV
U0UgICAgICAgICAweDAwMDAwMDAwMDIwMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRFJZ
RVZOVCAgICAgICAgICAgMHgwMDAwMDAwMDA0MDAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdT
X1JFQ1ZSQ1ZJTkZPICAgICAgIDB4MDAwMDAwMDAwODAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9G
TEFHU19SRUNWTlhUSU5GTyAgICAgICAweDAwMDAwMDAwMTAwMDAwMDAKLSNkZWZpbmUgU0NUUF9Q
Q0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UICAgMHgwMDAwMDAwMDIwMDAwMDAwCi0jZGVmaW5lIFND
VFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UIDB4MDAwMDAwMDA0MDAwMDAwMAotI2RlZmlu
ZSBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCAweDAwMDAwMDAwODAwMDAwMDAKLQot
LyotCi0gKiBtb2JpbGl0eV9mZWF0dXJlcyBwYXJhbWV0ZXJzIChieSBtaWNjaGllKS5Ob3RlCi0g
KiB0aGVzZSBmZWF0dXJlcyBhcmUgYXBwbGllZCBhZ2FpbnN0IHRoZQotICogc2N0cF9tb2JpbGl0
eV9mZWF0dXJlcyBmbGFncy4uIG5vdCB0aGUgc2N0cF9mZWF0dXJlcwotICogZmxhZ3MuCi0gKi8K
LSNkZWZpbmUgU0NUUF9NT0JJTElUWV9CQVNFICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2Rl
ZmluZSBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGICAgICAgICAweDAwMDAwMDAyCi0jZGVmaW5l
IFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEICAgICAgIDB4MDAwMDAwMDQKLQotCi0jZGVmaW5l
IFNDVFBfU01BTExFU1RfUE1UVSA1MTIJIC8qIHNtYWxsZXN0IHBtdHUgYWxsb3dlZCB3aGVuIGRp
c2FibGluZyBQTVRVIGRpc2NvdmVyeSAqLwotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotI3ByYWdtYSBwYWNrKHBvcCkKLSNlbmRpZgotI3VuZGVmIFNDVFBfUEFDS0VECi0K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0KLS8qIFRoaXMgZGljdGF0ZXMgdGhlIHNp
emUgb2YgdGhlIHBhY2tldAotICogY29sbGVjdGlvbiBidWZmZXIuIFRoaXMgb25seSBhcHBsaWVz
Ci0gKiBpZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HIGlzIGVuYWJsZWQgaW4KLSAqIHlvdXIgY29uZmln
LgotICovCi0jZGVmaW5lIFNDVFBfUEFDS0VUX0xPR19TSVpFIDY1NTM2Ci0KLS8qIE1heGltdW0g
ZGVsYXlzIGFuZCBzdWNoIGEgdXNlciBjYW4gc2V0IGZvciBvcHRpb25zIHRoYXQKLSAqIHRha2Ug
bXMuCi0gKi8KLSNkZWZpbmUgU0NUUF9NQVhfU0FDS19ERUxBWSA1MDAgLyogcGVyIFJGQzQ5NjAg
Ki8KLSNkZWZpbmUgU0NUUF9NQVhfSEJfSU5URVJWQUwgMTQ0MDAwMDAgLyogNCBob3VycyBpbiBt
cyAqLwotI2RlZmluZSBTQ1RQX01BWF9DT09LSUVfTElGRSAgMzYwMDAwMCAvKiAxIGhvdXIgaW4g
bXMgKi8KLQotCi0vKiBUeXBlcyBvZiBsb2dnaW5nL0tUUiB0cmFjaW5nICB0aGF0IGNhbiBiZSBl
bmFibGVkIHZpYSB0aGUKLSAqIHN5c2N0bCBuZXQuaW5ldC5zY3RwLnNjdHBfbG9nZ2luZy4gWW91
IG11c3QgYWxzbyBlbmFibGUKLSAqIFNVQlNZUyB0cmFjaW5nLgotICogTm90ZSB0aGF0IHlvdSBt
dXN0IGhhdmUgdGhlIFNDVFAgb3B0aW9uIGluIHRoZSBrZXJuZWwKLSAqIHRvIGVuYWJsZSB0aGVz
ZSBhcyB3ZWxsLgotICovCi0jZGVmaW5lIFNDVFBfQkxLX0xPR0dJTkdfRU5BQkxFCQkJCTB4MDAw
MDAwMDEKLSNkZWZpbmUgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFCQkJMHgwMDAwMDAwMgotI2Rl
ZmluZSBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBf
RkxJR0hUX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0ZSX0xPR0dJ
TkdfRU5BQkxFCQkJCTB4MDAwMDAwNDAKLSNkZWZpbmUgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxF
CQkJMHgwMDAwMDA4MAotI2RlZmluZSBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDAw
MTAwCi0jZGVmaW5lIFNDVFBfTUJDTlRfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAwMjAwCi0jZGVm
aW5lIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDA0MDAKLSNkZWZpbmUgU0NUUF9O
QUdMRV9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDA4MDAKLSNkZWZpbmUgU0NUUF9SRUNWX1JXTkRf
TE9HR0lOR19FTkFCTEUJCQkweDAwMDAxMDAwCi0jZGVmaW5lIFNDVFBfUlRUVkFSX0xPR0dJTkdf
RU5BQkxFCQkJMHgwMDAwMjAwMAotI2RlZmluZSBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUJCQkw
eDAwMDA0MDAwCi0jZGVmaW5lIFNDVFBfU0FDS19SV05EX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAw
ODAwMAotI2RlZmluZSBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFCQkJCTB4MDAwMTAwMDAKLSNkZWZp
bmUgU0NUUF9TVFJfTE9HR0lOR19FTkFCTEUJCQkJMHgwMDAyMDAwMAotI2RlZmluZSBTQ1RQX1dB
S0VfTE9HR0lOR19FTkFCTEUJCQkweDAwMDQwMDAwCi0jZGVmaW5lIFNDVFBfTE9HX01BWEJVUlNU
X0VOQUJMRQkJCTB4MDAwODAwMDAKLSNkZWZpbmUgU0NUUF9MT0dfUldORF9FTkFCTEUgICAgCQkJ
MHgwMDEwMDAwMAotI2RlZmluZSBTQ1RQX0xPR19TQUNLX0FSUklWQUxTX0VOQUJMRQkJCTB4MDAy
MDAwMDAKLSNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hVTktfRU5BQkxFCQkJMHgwMDQwMDAwMAotI2Rl
ZmluZSBTQ1RQX0xUUkFDRV9FUlJPUl9FTkFCTEUJCQkweDAwODAwMDAwCi0jZGVmaW5lIFNDVFBf
TEFTVF9QQUNLRVRfVFJBQ0lORwkJCTB4MDEwMDAwMDAKLSNkZWZpbmUgU0NUUF9USFJFU0hPTERf
TE9HR0lORwkJCQkweDAyMDAwMDAwCi0jZGVmaW5lIFNDVFBfTE9HX0FUX1NFTkRfMl9TQ1RQCQkJ
CTB4MDQwMDAwMDAKLSNkZWZpbmUgU0NUUF9MT0dfQVRfU0VORF8yX09VVFEJCQkJMHgwODAwMDAw
MAotI2RlZmluZSBTQ1RQX0xPR19UUllfQURWQU5DRQkJCQkweDEwMDAwMDAwCi0KLSNlbmRpZgkJ
CQkvKiAhX05FVElORVRfU0NUUF9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2FzY29uZi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5jCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMjM0ODEwNjcwODkwNDI1OTFmZTBmNzk3MTcwM2UwZTlhNzc4
MmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9hc2NvbmYuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NTAgKzAsMCBA
QAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJh
bmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwK
LSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRG
cmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYXNjb25mLmMgMzIxMjA0IDIwMTctMDctMTkg
MTQ6Mjg6NThaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9v
cy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2Nv
bmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLQotLyoKLSAqIGRlYnVnIGZs
YWdzOgotICogU0NUUF9ERUJVR19BU0NPTkYxOiBwcm90b2NvbCBpbmZvLCBnZW5lcmFsIGluZm8g
YW5kIGVycm9ycwotICogU0NUUF9ERUJVR19BU0NPTkYyOiBkZXRhaWxlZCBpbmZvCi0gKi8KLQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmluZSBBUFBMRV9GSUxFX05PIDEKLSNlbmRpZgot
Ci0vKgotICogUkZDIDUwNjEKLSAqCi0gKiBBbiBBU0NPTkYgcGFyYW1ldGVyIHF1ZXVlIGV4aXN0
cyBwZXIgYXNvYyB3aGljaCBob2xkcyB0aGUgcGVuZGluZyBhZGRyZXNzCi0gKiBvcGVyYXRpb25z
LiAgTGlzdHMgYXJlIHVwZGF0ZWQgdXBvbiByZWNlaXB0IG9mIEFTQ09ORi1BQ0suCi0gKgotICog
QSByZXN0cmljdGVkX2FkZHJzIGxpc3QgZXhpc3RzIHBlciBhc3NvYyB0byBob2xkIGxvY2FsIGFk
ZHJlc3NlcyB0aGF0IGFyZQotICogbm90ICh5ZXQpIHVzYWJsZSBieSB0aGUgYXNzb2MgYXMgYSBz
b3VyY2UgYWRkcmVzcy4gIFRoZXNlIGFkZHJlc3NlcyBhcmUKLSAqIGVpdGhlciBwZW5kaW5nIGFu
IEFTQ09ORiBvcGVyYXRpb24gKGFuZCBleGlzdCBvbiB0aGUgQVNDT05GIHBhcmFtZXRlcgotICog
cXVldWUpLCBvciB0aGV5IGFyZSBwZXJtYW5lbnRseSByZXN0cmljdGVkICh0aGUgcGVlciBoYXMg
cmV0dXJuZWQgYW4KLSAqIEVSUk9SIGluZGljYXRpb24gdG8gYW4gQVNDT05GKEFERCksIG9yIHRo
ZSBwZWVyIGRvZXMgbm90IHN1cHBvcnQgQVNDT05GKS4KLSAqCi0gKiBEZWxldGVkIGFkZHJlc3Nl
cyBhcmUgYWx3YXlzIGltbWVkaWF0ZWx5IHJlbW92ZWQgZnJvbSB0aGUgbGlzdHMgYXMgdGhleSB3
aWxsCi0gKiAoc2hvcnRseSkgbm8gbG9uZ2VyIGV4aXN0IGluIHRoZSBrZXJuZWwuICBXZSBzZW5k
IEFTQ09ORnMgYXMgYSBjb3VydGVzeSwKLSAqIG9ubHkgaWYgYWxsb3dlZC4KLSAqLwotCi0vKgot
ICogQVNDT05GIHBhcmFtZXRlciBwcm9jZXNzaW5nLgotICogcmVzcG9uc2VfcmVxdWlyZWQ6IHNl
dCBpZiBhIHJlcGx5IGlzIHJlcXVpcmVkIChlZy4gU1VDQ0VTU19SRVBPUlQpLgotICogcmV0dXJu
cyBhIG1idWYgdG8gYW4gImVycm9yIiByZXNwb25zZSBwYXJhbWV0ZXIgb3IgTlVMTC8ic3VjY2Vz
cyIgaWYgb2suCi0gKiBGSVg6IGFsbG9jYXRpbmcgdGhpcyBtYW55IG1idWZzIG9uIHRoZSBmbHkg
aXMgcHJldHR5IGluZWZmaWNpZW50Li4uCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3Rw
X2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKHVpbnQzMl90IGlkKQotewotCXN0cnVjdCBtYnVmICpt
X3JlcGx5ID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKLQotCW1f
cmVwbHkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9w
YXJhbWhkciksCi0JCQkJCTAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobV9yZXBseSA9
PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImFzY29uZl9zdWNj
ZXNzX3Jlc3BvbnNlOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOwotCQlyZXR1cm4gKE5VTEwpOwot
CX0KLQlhcGggPSBtdG9kKG1fcmVwbHksIHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKTsK
LQlhcGgtPmNvcnJlbGF0aW9uX2lkID0gaWQ7Ci0JYXBoLT5waC5wYXJhbV90eXBlID0gaHRvbnMo
U0NUUF9TVUNDRVNTX1JFUE9SVCk7Ci0JYXBoLT5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKTsKLQlTQ1RQX0JVRl9MRU4obV9yZXBseSkgPSBhcGgt
PnBoLnBhcmFtX2xlbmd0aDsKLQlhcGgtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFwaC0+cGgu
cGFyYW1fbGVuZ3RoKTsKLQotCXJldHVybiAobV9yZXBseSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qg
bWJ1ZiAqCi1zY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZSh1aW50MzJfdCBpZCwgdWludDE2X3Qg
Y2F1c2UsIHVpbnQ4X3QgKmVycm9yX3RsdiwKLQkJCSAgIHVpbnQxNl90IHRsdl9sZW5ndGgpCi17
Ci0Jc3RydWN0IG1idWYgKm1fcmVwbHkgPSBOVUxMOwotCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJh
bWhkciAqYXBoOwotCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICplcnJvcjsKLQl1aW50OF90ICp0
bHY7Ci0KLQltX3JlcGx5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKChzaXplb2Yoc3RydWN0IHNj
dHBfYXNjb25mX3BhcmFtaGRyKSArCi0JCQkJCSB0bHZfbGVuZ3RoICsKLQkJCQkJIHNpemVvZihz
dHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkpLAotCQkJCQkwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7
Ci0JaWYgKG1fcmVwbHkgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwK
LQkJCSJhc2NvbmZfZXJyb3JfcmVzcG9uc2U6IGNvdWxkbid0IGdldCBtYnVmIVxuIik7Ci0JCXJl
dHVybiAoTlVMTCk7Ci0JfQotCWFwaCA9IG10b2QobV9yZXBseSwgc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyICopOwotCWVycm9yID0gKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKGFwaCAr
IDEpOwotCi0JYXBoLT5jb3JyZWxhdGlvbl9pZCA9IGlkOwotCWFwaC0+cGgucGFyYW1fdHlwZSA9
IGh0b25zKFNDVFBfRVJST1JfQ0FVU0VfSU5EKTsKLQllcnJvci0+Y29kZSA9IGh0b25zKGNhdXNl
KTsKLQllcnJvci0+bGVuZ3RoID0gdGx2X2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJv
cl9jYXVzZSk7Ci0JYXBoLT5waC5wYXJhbV9sZW5ndGggPSBlcnJvci0+bGVuZ3RoICsKLQkgICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcik7Ci0KLQlpZiAoYXBoLT5waC5wYXJh
bV9sZW5ndGggPiBNTEVOKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImFz
Y29uZl9lcnJvcl9yZXNwb25zZTogdGx2X2xlbmd0aCAoJXhoKSB0b28gYmlnXG4iLAotCQkJdGx2
X2xlbmd0aCk7Ci0JCXNjdHBfbV9mcmVlbShtX3JlcGx5KTsJLyogZGlzY2FyZCAqLwotCQlyZXR1
cm4gKE5VTEwpOwotCX0KLQlpZiAoZXJyb3JfdGx2ICE9IE5VTEwpIHsKLQkJdGx2ID0gKHVpbnQ4
X3QgKikgKGVycm9yICsgMSk7Ci0JCW1lbWNweSh0bHYsIGVycm9yX3RsdiwgdGx2X2xlbmd0aCk7
Ci0JfQotCVNDVFBfQlVGX0xFTihtX3JlcGx5KSA9IGFwaC0+cGgucGFyYW1fbGVuZ3RoOwotCWVy
cm9yLT5sZW5ndGggPSBodG9ucyhlcnJvci0+bGVuZ3RoKTsKLQlhcGgtPnBoLnBhcmFtX2xlbmd0
aCA9IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKLQotCXJldHVybiAobV9yZXBseSk7Ci19
Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzdHJ1
Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZW5kX2hi
LCBpbnQgcmVzcG9uc2VfcmVxdWlyZWQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0
cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsK
LQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFt
X2xlbmd0aDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JdWludDE2X3Qg
cGFyYW1fbGVuZ3RoOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyICpzYTsKLQlpbnQgemVyb19h
ZGRyZXNzID0gMDsKLQlpbnQgYmFkX2FkZHJlc3MgPSAwOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbjsKLQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOwot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCXN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7Ci0jZW5kaWYKLQotCWFwYXJhbV9sZW5ndGgg
PSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JcGggPSAoc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKikoYXBoICsgMSk7Ci0JcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKLSNp
ZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JcGFyYW1fbGVuZ3RoID0gbnRvaHMo
cGgtPnBhcmFtX2xlbmd0aCk7Ci0jZW5kaWYKLQlzYSA9ICZzdG9yZS5zYTsKLQlzd2l0Y2ggKHBh
cmFtX3R5cGUpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJaWYg
KHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7Ci0J
CQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJdjRh
ZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopcGg7Ci0JCXNpbiA9ICZzdG9yZS5z
aW47Ci0JCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Ci0JCXNpbi0+c2luX2ZhbWlseSA9
IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JCXNpbi0+c2luX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNpbi0+c2luX3BvcnQgPSBzdGNiLT5ycG9y
dDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7Ci0JCWlmICgoc2luLT5z
aW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJICAgIElOX01VTFRJQ0FT
VChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQliYWRfYWRkcmVzcyA9IDE7Ci0J
CX0KLQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCi0JCQl6ZXJvX2Fk
ZHJlc3MgPSAxOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25m
X2FkZF9pcDogYWRkaW5nICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBz
YSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIFNDVFBfSVBWNl9BRERS
RVNTOgotCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSkpIHsKLQkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLwotCQkJcmV0dXJuIChOVUxMKTsK
LQkJfQotCQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaDsKLQkJc2lu
NiA9ICZzdG9yZS5zaW42OwotCQltZW1zZXQoc2luNiwgMCwgc2l6ZW9mKCpzaW42KSk7Ci0JCXNp
bjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlzaW42
LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQlzaW42
LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJbWVtY3B5KChjYWRkcl90KSZzaW42LT5zaW42
X2FkZHIsIHY2YWRkci0+YWRkciwKLQkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJ
aWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJYmFkX2Fk
ZHJlc3MgPSAxOwotCQl9Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2lu
Nl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NP
TkYxLCAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBhZGRpbmcgIik7Ci0JCVNDVFBEQkdfQUREUihT
Q1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlt
X3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwK
LQkJICAgIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgKHVpbnQ4X3QgKikgYXBoLAotCQkgICAg
YXBhcmFtX2xlbmd0aCk7Ci0JCXJldHVybiAobV9yZXBseSk7Ci0JfQkJCS8qIGVuZCBzd2l0Y2gg
Ki8KLQotCS8qIGlmIDAuMC4wLjAvOjowLCBhZGQgdGhlIHNvdXJjZSBhZGRyZXNzIGluc3RlYWQg
Ki8KLQlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5k
bHkpKSB7Ci0JCXNhID0gc3JjOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJICAg
ICAgICAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiB1c2luZyBzb3VyY2UgYWRkciAiKTsKLQkJU0NU
UERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKLQl9Ci0JLyogYWRkIHRoZSBhZGRy
ZXNzICovCi0JaWYgKGJhZF9hZGRyZXNzKSB7Ci0JCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9lcnJv
cl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAotCQkgICAgU0NUUF9DQVVTRV9JTlZBTElE
X1BBUkFNLCAodWludDhfdCAqKSBhcGgsCi0JCSAgICBhcGFyYW1fbGVuZ3RoKTsKLQl9IGVsc2Ug
aWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCAmbmV0LCBzdGNiLT5hc29jLnBvcnQs
Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLAot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BRERSX0RZTkFNSUNfQURERUQp
ICE9IDApIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vzc19hc2Nv
bmZfYWRkX2lwOiBlcnJvciBhZGRpbmcgYWRkcmVzc1xuIik7Ci0JCW1fcmVwbHkgPSBzY3RwX2Fz
Y29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAotCQkgICAgU0NUUF9DQVVT
RV9SRVNPVVJDRV9TSE9SVEFHRSwgKHVpbnQ4X3QgKikgYXBoLAotCQkgICAgYXBhcmFtX2xlbmd0
aCk7Ci0JfSBlbHNlIHsKLQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCi0JCXNjdHBfdWxwX25v
dGlmeShTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQLCBzdGNiLCAwLCBzYSwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLQkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7Ci0JCQltX3JlcGx5ID0KLQkJCSAg
ICBzY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQpOwotCQl9
Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
SEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCk7
Ci0JCWlmIChzZW5kX2hiKSB7Ci0JCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCQl9Ci0JfQotCXJldHVybiAobV9yZXBseSk7Ci19Ci0KLXN0YXRpYyBpbnQK
LXNjdHBfYXNjb25mX2RlbF9yZW1vdGVfYWRkcnNfZXhjZXB0KHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNvY2thZGRyICpzcmMpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqc3JjX25ldCwg
Km5ldDsKLQotCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFkZHJlc3MgZXhpc3RzIGFzIGEgZGVz
dGluYXRpb24gbmV0ICovCi0Jc3JjX25ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBzcmMpOwotCWlm
IChzcmNfbmV0ID09IE5VTEwpIHsKLQkJLyogbm90IGZvdW5kICovCi0JCXJldHVybiAoLTEpOwot
CX0KLQotCS8qIGRlbGV0ZSBhbGwgZGVzdGluYXRpb24gYWRkcmVzc2VzIGV4Y2VwdCB0aGUgc291
cmNlICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkg
ewotCQlpZiAobmV0ICE9IHNyY19uZXQpIHsKLQkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8K
LQkJCXNjdHBfcmVtb3ZlX25ldChzdGNiLCBuZXQpOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsCi0JCQkJImFzY29uZl9kZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdDogZGVsZXRpbmcgIik7
Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJCSAgICAgKHN0cnVjdCBz
b2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpOwotCQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICov
Ci0JCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCwgc3RjYiwg
MCwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgc3RydWN0IG1i
dWYgKgotc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAoc3RydWN0IHNvY2thZGRyICpzcmMs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1o
ZHIgKmFwaCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IHJlc3BvbnNlX3Jl
cXVpcmVkKQotewotCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKLQl1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSBzdG9yZTsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdWludDE2X3QgcGFy
YW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCi0JdWludDE2X3QgcGFyYW1fbGVuZ3RoOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyICpz
YTsKLQlpbnQgemVyb19hZGRyZXNzID0gMDsKLQlpbnQgcmVzdWx0OwotI2lmZGVmIElORVQKLQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRh
ZGRyOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owot
CXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7Ci0jZW5kaWYKLQotCWFwYXJhbV9s
ZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JcGggPSAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKikoYXBoICsgMSk7Ci0JcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBl
KTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JcGFyYW1fbGVuZ3RoID0g
bnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7Ci0jZW5kaWYKLQlzYSA9ICZzdG9yZS5zYTsKLQlzd2l0
Y2ggKHBhcmFtX3R5cGUpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoK
LQkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0p
KSB7Ci0JCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0K
LQkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopcGg7Ci0JCXNpbiA9ICZz
dG9yZS5zaW47Ci0JCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Ci0JCXNpbi0+c2luX2Zh
bWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JCXNpbi0+c2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNpbi0+c2luX3BvcnQgPSBzdGNi
LT5ycG9ydDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7Ci0JCWlmIChz
aW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQotCQkJemVyb19hZGRyZXNzID0gMTsK
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vzc19hc2NvbmZfZGVsZXRl
X2lwOiBkZWxldGluZyAiKTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc2Ep
OwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBTQ1RQX0lQVjZfQUREUkVT
UzoKLQkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0pKSB7Ci0JCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0J
CX0KLQkJdjZhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGg7Ci0JCXNpbjYg
PSAmc3RvcmUuc2luNjsKLQkJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotCQlzaW42
LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc2luNi0+
c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJc2luNi0+
c2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLCB2NmFk
ZHItPmFkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWlmIChJTjZfSVNf
QUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nlc3NfYXNjb25mX2RlbGV0
ZV9pcDogZGVsZXRpbmcgIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNh
KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZf
ZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKLQkJICAgIFNDVFBfQ0FVU0VfVU5S
RVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFwaCwKLQkJICAgIGFwYXJhbV9sZW5ndGgpOwot
CQlyZXR1cm4gKG1fcmVwbHkpOwotCX0KLQotCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFkZHJl
c3MgaXMgbm90IGJlaW5nIGRlbGV0ZWQgKi8KLQlpZiAoc2N0cF9jbXBhZGRyKHNhLCBzcmMpKSB7
Ci0JCS8qIHRyeWluZyB0byBkZWxldGUgdGhlIHNvdXJjZSBhZGRyZXNzISAqLwotCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogdHJpZWQgdG8g
ZGVsZXRlIHNvdXJjZSBhZGRyXG4iKTsKLQkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jl
c3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCi0JCSAgICBTQ1RQX0NBVVNFX0RFTEVUSU5HX1NS
Q19BRERSLCAodWludDhfdCAqKSBhcGgsCi0JCSAgICBhcGFyYW1fbGVuZ3RoKTsKLQkJcmV0dXJu
IChtX3JlcGx5KTsKLQl9Ci0KLQkvKiBpZiBkZWxldGluZyAwLjAuMC4wLzo6MCwgZGVsZXRlIGFs
bCBhZGRyZXNzZXMgZXhjZXB0IHNyYyBhZGRyICovCi0JaWYgKHplcm9fYWRkcmVzcyAmJiBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSkgewotCQlyZXN1bHQgPSBzY3RwX2FzY29u
Zl9kZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdChzdGNiLCBzcmMpOwotCi0JCWlmIChyZXN1bHQpIHsK
LQkJCS8qIHNyYyBhZGRyZXNzIGRpZCBub3QgZXhpc3Q/ICovCi0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogc3JjIGFkZHIgZG9lcyBub3Qg
ZXhpc3Q/XG4iKTsKLQkJCS8qIHdoYXQgZXJyb3IgdG8gcmVwbHkgd2l0aD8/ICovCi0JCQltX3Jl
cGx5ID0KLQkJCSAgICBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9u
X2lkLAotCQkJICAgIFNDVFBfQ0FVU0VfUkVRVUVTVF9SRUZVU0VELCAodWludDhfdCAqKSBhcGgs
Ci0JCQkgICAgYXBhcmFtX2xlbmd0aCk7Ci0JCX0gZWxzZSBpZiAocmVzcG9uc2VfcmVxdWlyZWQp
IHsKLQkJCW1fcmVwbHkgPQotCQkJICAgIHNjdHBfYXNjb25mX3N1Y2Nlc3NfcmVzcG9uc2UoYXBo
LT5jb3JyZWxhdGlvbl9pZCk7Ci0JCX0KLQkJcmV0dXJuIChtX3JlcGx5KTsKLQl9Ci0KLQkvKiBk
ZWxldGUgdGhlIGFkZHJlc3MgKi8KLQlyZXN1bHQgPSBzY3RwX2RlbF9yZW1vdGVfYWRkcihzdGNi
LCBzYSk7Ci0JLyoKLQkgKiBub3RlIGlmIHJlc3VsdCA9PSAtMiwgdGhlIGFkZHJlc3MgZG9lc24n
dCBleGlzdCBpbiB0aGUgYXNvYyBidXQKLQkgKiBzaW5jZSBpdCdzIGJlaW5nIGRlbGV0ZWQgYW55
d2F5cywgd2UganVzdCBhY2sgdGhlIGRlbGV0ZSAtLSBidXQKLQkgKiB0aGlzIHByb2JhYmx5IG1l
YW5zIHNvbWV0aGluZyBoYXMgYWxyZWFkeSBnb25lIGF3cnkKLQkgKi8KLQlpZiAocmVzdWx0ID09
IC0xKSB7Ci0JCS8qIG9ubHkgb25lIGFkZHJlc3MgaW4gdGhlIGFzb2MgKi8KLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2FzY29uZl9kZWxldGVfaXA6IHRyaWVkIHRvIGRl
bGV0ZSBsYXN0IElQIGFkZHIhXG4iKTsKLQkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jl
c3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCi0JCSAgICBTQ1RQX0NBVVNFX0RFTEVUSU5HX0xB
U1RfQUREUiwgKHVpbnQ4X3QgKikgYXBoLAotCQkgICAgYXBhcmFtX2xlbmd0aCk7Ci0JfSBlbHNl
IHsKLQkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7Ci0JCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZf
c3VjY2Vzc19yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkKTsKLQkJfQotCQkvKiBub3RpZnkg
dXBwZXIgbGF5ZXIgKi8KLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTQ09ORl9ERUxF
VEVfSVAsIHN0Y2IsIDAsIHNhLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCX0KLQlyZXR1cm4gKG1f
cmVwbHkpOwotfQotCi1zdGF0aWMgc3RydWN0IG1idWYgKgotc2N0cF9wcm9jZXNzX2FzY29uZl9z
ZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNyYywKLQkJCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZf
cGFyYW1oZHIgKmFwaCwKLQkJCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCByZXNwb25zZV9y
ZXF1aXJlZCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9yZXBseSA9IE5VTEw7Ci0JdW5pb24gc2N0cF9z
b2Nrc3RvcmUgc3RvcmU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOwotCXVpbnQxNl90IHBh
cmFtX3R5cGUsIGFwYXJhbV9sZW5ndGg7Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO
RVQ2KQotCXVpbnQxNl90IHBhcmFtX2xlbmd0aDsKLSNlbmRpZgotCXN0cnVjdCBzb2NrYWRkciAq
c2E7Ci0JaW50IHplcm9fYWRkcmVzcyA9IDA7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRk
cl9pbiAqc2luOwotCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICp2NGFkZHI7Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0Jc3RydWN0IHNjdHBf
aXB2NmFkZHJfcGFyYW0gKnY2YWRkcjsKLSNlbmRpZgotCi0JYXBhcmFtX2xlbmd0aCA9IG50b2hz
KGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKLQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShh
cGggKyAxKTsKLQlwYXJhbV90eXBlID0gbnRvaHMocGgtPnBhcmFtX3R5cGUpOwotI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlwYXJhbV9sZW5ndGggPSBudG9ocyhwaC0+cGFy
YW1fbGVuZ3RoKTsKLSNlbmRpZgotCXNhID0gJnN0b3JlLnNhOwotCXN3aXRjaCAocGFyYW1fdHlw
ZSkgewotI2lmZGVmIElORVQKLQljYXNlIFNDVFBfSVBWNF9BRERSRVNTOgotCQlpZiAocGFyYW1f
bGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsKLQkJCS8qIGlu
dmFsaWQgcGFyYW0gc2l6ZSAqLwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQl2NGFkZHIgPSAo
c3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaDsKLQkJc2luID0gJnN0b3JlLnNpbjsKLQkJ
bWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKLQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFk
ZHI7Ci0JCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQotCQkJemVyb19h
ZGRyZXNzID0gMTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2FzY29u
Zl9zZXRfcHJpbWFyeTogIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNh
KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgU0NUUF9JUFY2X0FERFJF
U1M6Ci0JCWlmIChwYXJhbV9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3Bh
cmFtKSkgewotCQkJLyogaW52YWxpZCBwYXJhbSBzaXplICovCi0JCQlyZXR1cm4gKE5VTEwpOwot
CQl9Ci0JCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoOwotCQlzaW42
ID0gJnN0b3JlLnNpbjY7Ci0JCW1lbXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsKLQkJc2lu
Ni0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JCXNpbjYt
PnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCW1lbWNw
eSgoY2FkZHJfdCkmc2luNi0+c2luNl9hZGRyLCB2NmFkZHItPmFkZHIsCi0JCSAgICBzaXplb2Yo
c3RydWN0IGluNl9hZGRyKSk7Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+
c2luNl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6ICIpOwotCQlTQ1RQREJHX0FERFIo
U0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJ
bV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQs
Ci0JCSAgICBTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSLCAodWludDhfdCAqKSBhcGgsCi0J
CSAgICBhcGFyYW1fbGVuZ3RoKTsKLQkJcmV0dXJuIChtX3JlcGx5KTsKLQl9Ci0KLQkvKiBpZiAw
LjAuMC4wLzo6MCwgdXNlIHRoZSBzb3VyY2UgYWRkcmVzcyBpbnN0ZWFkICovCi0JaWYgKHplcm9f
YWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSkgewotCQlzYSA9
IHNyYzsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vzc19hc2NvbmZf
c2V0X3ByaW1hcnk6IHVzaW5nIHNvdXJjZSBhZGRyICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9E
RUJVR19BU0NPTkYxLCBzcmMpOwotCX0KLQkvKiBzZXQgdGhlIHByaW1hcnkgYWRkcmVzcyAqLwot
CWlmIChzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgc2EsIE5VTEwpID09IDApIHsKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6
IHByaW1hcnkgYWRkcmVzcyBzZXRcbiIpOwotCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KLQkJ
c2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWSwgc3RjYiwgMCwg
c2EsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCWlmICgoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgJiYKLQkJICAgICghKHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikp
ICYmCi0JCSAgICAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpKSB7Ci0JCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBO
VUxMOwotCQl9Ci0JCWlmIChyZXNwb25zZV9yZXF1aXJlZCkgewotCQkJbV9yZXBseSA9IHNjdHBf
YXNjb25mX3N1Y2Nlc3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7Ci0JCX0KLQkJLyog
TW9iaWxpdHkgYWRhcHRhdGlvbi4KLQkJICAgSWRlYWxseSwgd2hlbiB0aGUgcmVjZXB0aW9uIG9m
IFNFVCBQUklNQVJZIHdpdGggREVMRVRFIElQCi0JCSAgIEFERFJFU1Mgb2YgdGhlIHByZXZpb3Vz
IHByaW1hcnkgZGVzdGluYXRpb24sIHVuYWNrbm93bGVkZ2VkCi0JCSAgIERBVEEgYXJlIHJldHJh
bnNtaXR0ZWQgaW1tZWRpYXRlbHkgdG8gdGhlIG5ldyBwcmltYXJ5Ci0JCSAgIGRlc3RpbmF0aW9u
IGZvciBzZWFtbGVzcyBoYW5kb3Zlci4KLQkJICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIFVOQ09O
RklSTUVEIGFuZCBtYXJrZWQgdG8gUkVRX1BSSU0sCi0JCSAgIFRoZSByZXRyYW5zbWlzc2lvbiBv
Y2N1ciB3aGVuIHJlY2VwdGlvbiBvZiB0aGUKLQkJICAgSEVBUlRCRUFULUFDSy4gIChTZWUgc2N0
cF9oYW5kbGVfaGVhcnRiZWF0X2FjayBpbgotCQkgICBzY3RwX2lucHV0LmMpCi0JCSAgIEFsc28s
IHdoZW4gY2hhbmdlIG9mIHRoZSBwcmltYXJ5IGRlc3RpbmF0aW9uLCBpdCBpcyBiZXR0ZXIKLQkJ
ICAgdGhhdCBhbGwgc3Vic2VxdWVudCBuZXcgREFUQSBjb250YWluaW5nIGFscmVhZHkgcXVldWVk
IERBVEEKLQkJICAgYXJlIHRyYW5zbWl0dGVkIHRvIHRoZSBuZXcgcHJpbWFyeSBkZXN0aW5hdGlv
bi4gKGJ5IG1pY2NoaWUpCi0JCSAqLwotCQlpZiAoKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9v
bihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQ
X01PQklMSVRZX0JBU0UpIHx8Ci0JCSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3Rj
Yi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklM
SVRZX0ZBU1RIQU5ET0ZGKSkgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihz
dGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9C
SUxJVFlfUFJJTV9ERUxFVEVEKSAmJgotCQkgICAgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbi0+ZGVzdF9zdGF0ZSAmCi0JCSAgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKSB7
Ci0KLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAotCQkJ
ICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCi0JCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMSk7Ci0JCQlpZiAoc2N0cF9p
c19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCQkJCVNDVFBfTU9CSUxJVFlf
RkFTVEhBTkRPRkYpKSB7Ci0JCQkJc2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdGNiLAot
CQkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJCX0KLQkJCWlmIChzY3Rw
X2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJCQkJU0NUUF9NT0JJTElU
WV9CQVNFKSkgewotCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwKLQkJCQkJCXN0
Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKLQkJCX0KLQkJCXNjdHBfZGVsZXRlX3ByaW1fdGlt
ZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5
KTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGNvdWxkbid0IHNldCB0aGUgcmVxdWVzdGVkIHByaW1h
cnkgYWRkcmVzcyEgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vz
c19hc2NvbmZfc2V0X3ByaW1hcnk6IHNldCBwcmltYXJ5IGZhaWxlZCFcbiIpOwotCQkvKiBtdXN0
IGhhdmUgYmVlbiBhbiBpbnZhbGlkIGFkZHJlc3MsIHNvIHJlcG9ydCAqLwotCQltX3JlcGx5ID0g
c2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKLQkJICAgIFND
VFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFwaCwKLQkJICAgIGFwYXJh
bV9sZW5ndGgpOwotCX0KLQotCXJldHVybiAobV9yZXBseSk7Ci19Ci0KLS8qCi0gKiBoYW5kbGVz
IGFuIEFTQ09ORiBjaHVuay4KLSAqIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBwcm9jZXNzZWQgb2ss
IHNlbmQgYSBwbGFpbiAoZW1wdHkpIEFTQ09ORi1BQ0sKLSAqLwotdm9pZAotc2N0cF9oYW5kbGVf
YXNjb25mKHN0cnVjdCBtYnVmICptLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAotICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLAotCQkgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1
bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSAgIGludCBmaXJzdCkKLXsKLQlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQl1aW50MzJfdCBzZXJpYWxfbnVtOwotCXN0cnVj
dCBtYnVmICpuLCAqbV9hY2ssICptX3Jlc3VsdCwgKm1fdGFpbDsKLQlzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWNrX2NodW5rICphY2tfY3A7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGg7
Ci0Jc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnBfYWRkcjsKLQl1bnNpZ25lZCBpbnQgYXNj
b25mX2xpbWl0LCBjbnQ7Ci0JaW50IGVycm9yID0gMDsJCS8qIGRpZCBhbiBlcnJvciBvY2N1cj8g
Ki8KLQotCS8qIGFzY29uZiBwYXJhbSBidWZmZXIgKi8KLQl1aW50OF90IGFwYXJhbV9idWZbU0NU
UF9QQVJBTV9CVUZGRVJfU0laRV07Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FjayAqYWNrLCAqYWNr
X25leHQ7Ci0KLQkvKiB2ZXJpZnkgbWluaW11bSBsZW5ndGggKi8KLQlpZiAobnRvaHMoY3AtPmNo
LmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSkgewotCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNjb25mOiBjaHVuayB0b28g
c21hbGwgPSAleGhcbiIsCi0JCQludG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSk7Ci0JCXJldHVy
bjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCXNlcmlhbF9udW0gPSBudG9obChjcC0+c2Vy
aWFsX251bWJlcik7Ci0KLQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+YXNjb25mX3NlcV9pbiwgc2Vy
aWFsX251bSkpIHsKLQkJLyogZ290IGEgZHVwbGljYXRlIEFTQ09ORiAqLwotCQlTQ1RQREJHKFND
VFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNjb25mOiBnb3QgZHVwbGljYXRlIHNlcmlh
bCBudW1iZXIgPSAleGhcbiIsCi0JCQlzZXJpYWxfbnVtKTsKLQkJcmV0dXJuOwotCX0gZWxzZSBp
ZiAoc2VyaWFsX251bSAhPSAoYXNvYy0+YXNjb25mX3NlcV9pbiArIDEpKSB7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29uZjogaW5jb3JyZWN0IHNlcmlhbCBudW1i
ZXIgPSAleGggKGV4cGVjdGVkIG5leHQgPSAleGgpXG4iLAotCQkJc2VyaWFsX251bSwgYXNvYy0+
YXNjb25mX3NlcV9pbiArIDEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogaXQncyB0aGUgZXhwZWN0
ZWQgIm5leHQiIHNlcXVlbmNlIG51bWJlciwgc28gcHJvY2VzcyBpdCAqLwotCWFzb2MtPmFzY29u
Zl9zZXFfaW4gPSBzZXJpYWxfbnVtOwkvKiB1cGRhdGUgc2VxdWVuY2UgKi8KLQkvKiBnZXQgbGVu
Z3RoIG9mIGFsbCB0aGUgcGFyYW0ncyBpbiB0aGUgQVNDT05GICovCi0JYXNjb25mX2xpbWl0ID0g
b2Zmc2V0ICsgbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsCi0JCSJoYW5kbGVfYXNjb25mOiBhc2NvbmZfbGltaXQ9JXUsIHNlcXVlbmNlPSV4
aFxuIiwKLQkJYXNjb25mX2xpbWl0LCBzZXJpYWxfbnVtKTsKLQotCWlmIChmaXJzdCkgewotCQkv
KiBkZWxldGUgb2xkIGNhY2hlICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCJoYW5k
bGVfYXNjb25mOiBOb3cgcHJvY2Vzc2luZyBmaXJzdCBBU0NPTkYuIFRyeSB0byBkZWxldGUgb2xk
IGNhY2hlXG4iKTsKLQotCQlUQUlMUV9GT1JFQUNIX1NBRkUoYWNrLCAmYXNvYy0+YXNjb25mX2Fj
a19zZW50LCBuZXh0LCBhY2tfbmV4dCkgewotCQkJaWYgKGFjay0+c2VyaWFsX251bWJlciA9PSBz
ZXJpYWxfbnVtKQotCQkJCWJyZWFrOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsImhh
bmRsZV9hc2NvbmY6IGRlbGV0ZSBvbGQoJXUpIDwgZmlyc3QoJXUpXG4iLAotCQkJICAgIGFjay0+
c2VyaWFsX251bWJlciwgc2VyaWFsX251bSk7Ci0JCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29u
Zl9hY2tfc2VudCwgYWNrLCBuZXh0KTsKLQkJCWlmIChhY2stPmRhdGEgIT0gTlVMTCkgewotCQkJ
CXNjdHBfbV9mcmVlbShhY2stPmRhdGEpOwotCQkJfQotCQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9C
QVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjayksIGFjayk7Ci0JCX0KLQl9Ci0KLQltX2FjayA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVu
ayksIDAsCi0JCQkJICAgICAgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChtX2FjayA9PSBO
VUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImhhbmRsZV9hc2NvbmY6
IGNvdWxkbid0IGdldCBtYnVmIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JbV90YWlsID0gbV9hY2s7
CQkvKiBjdXJyZW50IHJlcGx5IGNoYWluJ3MgdGFpbCAqLwotCi0JLyogZmlsbCBpbiBBU0NPTkYt
QUNLIGhlYWRlciAqLwotCWFja19jcCA9IG10b2QobV9hY2ssIHN0cnVjdCBzY3RwX2FzY29uZl9h
Y2tfY2h1bmsgKik7Ci0JYWNrX2NwLT5jaC5jaHVua190eXBlID0gU0NUUF9BU0NPTkZfQUNLOwot
CWFja19jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwotCWFja19jcC0+c2VyaWFsX251bWJlciA9IGh0
b25sKHNlcmlhbF9udW0pOwotCS8qIHNldCBpbml0aWFsIGxlbmd0aHMgKGVnLiBqdXN0IGFuIEFT
Q09ORi1BQ0spLCBudG9oeCBhdCB0aGUgZW5kISAqLwotCVNDVFBfQlVGX0xFTihtX2FjaykgPSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7Ci0JYWNrX2NwLT5jaC5jaHVua19s
ZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7Ci0KLQkvKiBza2lw
IHRoZSBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKi8KLQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2FzY29uZl9jaHVuayk7Ci0JcF9hZGRyID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3Bh
cmFtICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciksICh1aW50OF90ICopJmFwYXJhbV9idWYpOwotCWlmIChwX2FkZHIgPT0gTlVMTCkgewotCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNjb25mOiBjb3VsZG4ndCBn
ZXQgbG9va3VwIGFkZHIhXG4iKTsKLQkJLyogcmVzcG9uZCB3aXRoIGEgbWlzc2luZy9pbnZhbGlk
IG1hbmRhdG9yeSBwYXJhbWV0ZXIgZXJyb3IgKi8KLQkJcmV0dXJuOwotCX0KLQkvKiBwYXJhbV9s
ZW5ndGggaXMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gcHJvY2Vzc19jb250cm9sLi4uICovCi0Jb2Zm
c2V0ICs9IG50b2hzKHBfYWRkci0+cGgucGFyYW1fbGVuZ3RoKTsJLyogc2tpcCBsb29rdXAgYWRk
ciAqLwotCS8qIGdldCBwb2ludGVyIHRvIGZpcnN0IGFzY29uZiBwYXJhbSBpbiBBU0NPTkYgKi8K
LQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBv
ZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpLCAodWludDhfdCAqKSZh
cGFyYW1fYnVmKTsKLQlpZiAoYXBoID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsICJFbXB0eSBBU0NPTkYgcmVjZWl2ZWQ/XG4iKTsKLQkJZ290byBzZW5kX3JlcGx5Owot
CX0KLQkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRlcnMgKi8KLQljbnQgPSAwOwotCXdo
aWxlIChhcGggIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90
eXBlOwotCi0JCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOwotCQlwYXJh
bV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JCWlmIChvZmZzZXQgKyBw
YXJhbV9sZW5ndGggPiBhc2NvbmZfbGltaXQpIHsKLQkJCS8qIHBhcmFtZXRlciBnb2VzIGJleW9u
ZCBlbmQgb2YgY2h1bmshICovCi0JCQlzY3RwX21fZnJlZW0obV9hY2spOwotCQkJcmV0dXJuOwot
CQl9Ci0JCW1fcmVzdWx0ID0gTlVMTDsKLQotCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFw
YXJhbV9idWYpKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmY6IHBhcmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1f
bGVuZ3RoKTsKLQkJCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYg
KHBhcmFtX2xlbmd0aCA8PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7Ci0JCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUp
IHRvbyBzaG9ydFxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0J
CX0KLQkJLyogZ2V0IHRoZSBlbnRpcmUgcGFyYW1ldGVyICovCi0JCWFwaCA9IChzdHJ1Y3Qgc2N0
cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcGFyYW1fbGVuZ3Ro
LCBhcGFyYW1fYnVmKTsKLQkJaWYgKGFwaCA9PSBOVUxMKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBlbnRpcmUgcGFyYW1cbiIp
OwotCQkJc2N0cF9tX2ZyZWVtKG1fYWNrKTsKLQkJCXJldHVybjsKLQkJfQotCQlzd2l0Y2ggKHBh
cmFtX3R5cGUpIHsKLQkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgotCQkJbV9yZXN1bHQgPSBz
Y3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzcmMsIGFwaCwgc3RjYiwKLQkJCSAgICAoY250IDwg
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSksIGVycm9yKTsKLQkJCWNudCsrOwot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKLQkJCW1fcmVzdWx0ID0gc2N0
cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAoc3JjLCBhcGgsIHN0Y2IsCi0JCQkgICAgZXJyb3Ip
OwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FUlJPUl9DQVVTRV9JTkQ6Ci0JCQkvKiBub3QgdmFs
aWQgaW4gYW4gQVNDT05GIGNodW5rICovCi0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NFVF9QUklN
X0FERFI6Ci0JCQltX3Jlc3VsdCA9IHNjdHBfcHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnkoc3Jj
LCBhcGgsCi0JCQkgICAgc3RjYiwgZXJyb3IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9OQVRf
VlRBR1M6Ci0JCSAgICAgICAgU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJoYW5kbGVfYXNj
b25mOiBzZWVzIGEgTkFUIFZUQUcgc3RhdGUgcGFyYW1ldGVyXG4iKTsKLQkJICAgICAgICBicmVh
azsKLQkJY2FzZSBTQ1RQX1NVQ0NFU1NfUkVQT1JUOgotCQkJLyogbm90IHZhbGlkIGluIGFuIEFT
Q09ORiBjaHVuayAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9VTFBfQURBUFRBVElPTjoKLQkJ
CS8qIEZJWCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAoKHBhcmFtX3R5cGUgJiAw
eDgwMDApID09IDApIHsKLQkJCQkvKiBCZWVuIHRvbGQgdG8gU1RPUCBhdCB0aGlzIHBhcmFtICov
Ci0JCQkJYXNjb25mX2xpbWl0ID0gb2Zmc2V0OwotCQkJCS8qCi0JCQkJICogRklYIEZJWCAtIFdl
IG5lZWQgdG8gY2FsbAotCQkJCSAqIHNjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRl
cnMoKQotCQkJCSAqIHRvIGdldCBhIG9wZXJyIGFuZCBzZW5kIGl0IGZvciBhbnkKLQkJCQkgKiBw
YXJhbSdzIHdpdGggdGhlIDB4NDAwMCBiaXQgc2V0IE9SIGRvIGl0Ci0JCQkJICogaGVyZSBvdXJz
ZWx2ZXMuLi4gbm90ZSB3ZSBzdGlsbCBtdXN0IFNUT1AKLQkJCQkgKiBpZiB0aGUgMHg4MDAwIGJp
dCBpcyBjbGVhci4KLQkJCQkgKi8KLQkJCX0KLQkJCS8qIHVua25vd24vaW52YWxpZCBwYXJhbSB0
eXBlICovCi0JCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KLQotCQkvKiBhZGQgYW55IChlcnJv
cikgcmVzdWx0IHRvIHRoZSByZXBseSBtYnVmIGNoYWluICovCi0JCWlmIChtX3Jlc3VsdCAhPSBO
VUxMKSB7Ci0JCQlTQ1RQX0JVRl9ORVhUKG1fdGFpbCkgPSBtX3Jlc3VsdDsKLQkJCW1fdGFpbCA9
IG1fcmVzdWx0OwotCQkJLyogdXBkYXRlIGxlbmd0aHMsIG1ha2Ugc3VyZSBpdCdzIGFsaWduZWQg
dG9vICovCi0JCQlTQ1RQX0JVRl9MRU4obV9yZXN1bHQpID0gU0NUUF9TSVpFMzIoU0NUUF9CVUZf
TEVOKG1fcmVzdWx0KSk7Ci0JCQlhY2tfY3AtPmNoLmNodW5rX2xlbmd0aCArPSBTQ1RQX0JVRl9M
RU4obV9yZXN1bHQpOwotCQkJLyogc2V0IGZsYWcgdG8gZm9yY2Ugc3VjY2VzcyByZXBvcnRzICov
Ci0JCQllcnJvciA9IDE7Ci0JCX0KLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBhcmFtX2xlbmd0
aCk7Ci0JCS8qIHVwZGF0ZSByZW1haW5pbmcgQVNDT05GIG1lc3NhZ2UgbGVuZ3RoIHRvIHByb2Nl
c3MgKi8KLQkJaWYgKG9mZnNldCA+PSBhc2NvbmZfbGltaXQpIHsKLQkJCS8qIG5vIG1vcmUgZGF0
YSBpbiB0aGUgbWJ1ZiBjaGFpbiAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogZ2V0IHBvaW50ZXIg
dG8gbmV4dCBhc2NvbmYgcGFyYW0gKi8KLQkJYXBoID0gKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJh
bWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FzY29uZl9wYXJhbWhkciksCi0JCSAgICAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKLQkJaWYg
KGFwaCA9PSBOVUxMKSB7Ci0JCQkvKiBjYW4ndCBnZXQgYW4gYXNjb25mIHBhcmFtaGRyICovCi0J
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGNhbid0IGdldCBh
c2NvbmYgcGFyYW0gaGRyIVxuIik7Ci0JCQkvKiBGSVggTUUgLSBhZGQgZXJyb3IgaGVyZS4uLiAq
LwotCQl9Ci0JfQotCi0gc2VuZF9yZXBseToKLQlhY2tfY3AtPmNoLmNodW5rX2xlbmd0aCA9IGh0
b25zKGFja19jcC0+Y2guY2h1bmtfbGVuZ3RoKTsKLQkvKiBzYXZlIHRoZSBBU0NPTkYtQUNLIHJl
cGx5ICovCi0JYWNrID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2Nv
bmZfYWNrKSwKLQkgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fjayk7Ci0JaWYgKGFjayA9PSBOVUxM
KSB7Ci0JCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0JCXJldHVybjsKLQl9Ci0JYWNrLT5zZXJpYWxf
bnVtYmVyID0gc2VyaWFsX251bTsKLQlhY2stPmxhc3Rfc2VudF90byA9IE5VTEw7Ci0JYWNrLT5k
YXRhID0gbV9hY2s7Ci0JYWNrLT5sZW4gPSAwOwotCWZvciAobiA9IG1fYWNrOyBuICE9IE5VTEw7
IG4gPSBTQ1RQX0JVRl9ORVhUKG4pKSB7Ci0JCWFjay0+bGVuICs9IFNDVFBfQlVGX0xFTihuKTsK
LQl9Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBhY2ss
IG5leHQpOwotCi0JLyogc2VlIGlmIGxhc3RfY29udHJvbF9jaHVua19mcm9tIGlzIHNldCBwcm9w
ZXJseSAodXNlIElQIHNyYyBhZGRyKSAqLwotCWlmIChzdGNiLT5hc29jLmxhc3RfY29udHJvbF9j
aHVua19mcm9tID09IE5VTEwpIHsKLQkJLyoKLQkJICogdGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhl
IHNvdXJjZSBhZGRyZXNzIHdhcyBqdXN0IG5ld2x5Ci0JCSAqIGFkZGVkCi0JCSAqLwotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGxvb2tpbmcgdXAgbmV0IGZv
ciBJUCBzb3VyY2UgYWRkcmVzc1xuIik7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAi
TG9va2luZyBmb3IgSVAgc291cmNlOiAiKTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVND
T05GMSwgc3JjKTsKLQkJLyogbG9vayB1cCB0aGUgZnJvbSBhZGRyZXNzICovCi0JCXN0Y2ItPmFz
b2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSBzY3RwX2ZpbmRuZXQoc3RjYiwgc3JjKTsKLSNp
ZmRlZiBTQ1RQX0RFQlVHCi0JCWlmIChzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9t
ID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29u
ZjogSVAgc291cmNlIGFkZHJlc3Mgbm90IGZvdW5kPyFcbiIpOwotCQl9Ci0jZW5kaWYKLQl9Ci19
Ci0KLS8qCi0gKiBkb2VzIHRoZSBhZGRyZXNzIG1hdGNoPyByZXR1cm5zIDAgaWYgbm90LCAxIGlm
IHNvCi0gKi8KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9hc2NvbmZfYWRkcl9tYXRjaChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfYWRkciAqYWEsIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17Ci0Jc3dpdGNoIChz
YS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJLyog
WFhYIHNjb3BlaWQgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopc2E7Ci0KLQkJaWYgKChhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9PSBT
Q1RQX0lQVjZfQUREUkVTUykgJiYKLQkJICAgIChtZW1jbXAoJmFhLT5hcC5hZGRycC5hZGRyLCAm
c2luNi0+c2luNl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7
Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQK
LQljYXNlIEFGX0lORVQ6Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilzYTsKLQotCQlpZiAoKGFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID09
IFNDVFBfSVBWNF9BRERSRVNTKSAmJgotCQkgICAgKG1lbWNtcCgmYWEtPmFwLmFkZHJwLmFkZHIs
ICZzaW4tPnNpbl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCkpIHsK
LQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJ
YnJlYWs7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBkb2VzIHRoZSBhZGRyZXNzIG1h
dGNoPyByZXR1cm5zIDAgaWYgbm90LCAxIGlmIHNvCi0gKi8KLXN0YXRpYyB1aW50MzJfdAotc2N0
cF9hZGRyX21hdGNoKHN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaCwgc3RydWN0IHNvY2thZGRyICpz
YSkKLXsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JdWludDE2X3QgcGFy
YW1fdHlwZSwgcGFyYW1fbGVuZ3RoOwotCi0JcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90
eXBlKTsKLQlwYXJhbV9sZW5ndGggPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKLSNlbmRpZgot
CXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoK
LQl7Ci0JCS8qIFhYWCBzY29wZWlkICovCi0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAq
djZhZGRyOwotCi0JCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoOwot
CQlpZiAoKHBhcmFtX3R5cGUgPT0gU0NUUF9JUFY2X0FERFJFU1MpICYmCi0JCSAgICAocGFyYW1f
bGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpICYmCi0JCSAgICAo
bWVtY21wKCZ2NmFkZHItPmFkZHIsICZzaW42LT5zaW42X2FkZHIsCi0JCSAgICBzaXplb2Yoc3Ry
dWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0J
fQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOwotCQlzdHJ1Y3Qgc2N0cF9p
cHY0YWRkcl9wYXJhbSAqdjRhZGRyOwotCi0JCXY0YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSAqKXBoOwotCQlpZiAoKHBhcmFtX3R5cGUgPT0gU0NUUF9JUFY0X0FERFJFU1MpICYm
Ci0JCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJh
bSkpICYmCi0JCSAgICAobWVtY21wKCZ2NGFkZHItPmFkZHIsICZzaW4tPnNpbl9hZGRyLAotCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCkpIHsKLQkJCXJldHVybiAoMSk7Ci0JCX0K
LQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAo
MCk7Ci19Ci0vKgotICogQ2xlYW51cCBmb3Igbm9uLXJlc3BvbmRlZC9PUCBFUlInZCBBU0NPTkYK
LSAqLwotdm9pZAotc2N0cF9hc2NvbmZfY2xlYW51cChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKgotCSAqIGNsZWFyIG91dCBhbnkgZXhpc3Rpbmcg
YXNjb25mcyBnb2luZyBvdXQKLQkgKi8KLQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0FTQ09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJU0NUUF9GUk9NX1NDVFBfQVND
T05GICsgU0NUUF9MT0NfMik7Ci0Jc3RjYi0+YXNvYy5hc2NvbmZfc2VxX291dF9hY2tlZCA9IHN0
Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQ7Ci0JLyogcmVtb3ZlIHRoZSBvbGQgQVNDT05GIG9uIG91
ciBvdXRib3VuZCBxdWV1ZSAqLwotCXNjdHBfdG9zc19vbGRfYXNjb25mKHN0Y2IpOwotfQotCi0v
KgotICogY2xlYW51cCBhbnkgY2FjaGVkIHNvdXJjZSBhZGRyZXNzZXMgdGhhdCBtYXkgYmUgdG9w
b2xvZ2ljYWxseQotICogaW5jb3JyZWN0IGFmdGVyIGEgbmV3IGFkZHJlc3MgaGFzIGJlZW4gYWRk
ZWQgdG8gdGhpcyBpbnRlcmZhY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX2FzY29uZl9uZXRz
X2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZm4gKmlmbikKLXsK
LQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkvKgotCSAqIElkZWFsbHksIHdlIHdhbnQgdG8g
b25seSBjbGVhciBjYWNoZWQgcm91dGVzIGFuZCBzb3VyY2UgYWRkcmVzc2VzCi0JICogdGhhdCBh
cmUgdG9wb2xvZ2ljYWxseSBpbmNvcnJlY3QuICBCdXQgc2luY2UgdGhlcmUgaXMgbm8gZWFzeSB3
YXkKLQkgKiB0byBrbm93IHdoZXRoZXIgdGhlIG5ld2x5IGFkZGVkIGFkZHJlc3Mgb24gdGhlIGlm
biB3b3VsZCBjYXVzZSBhCi0JICogcm91dGluZyBjaGFuZ2UgKGkuZS4gYSBuZXcgZWdyZXNzIGlu
dGVyZmFjZSB3b3VsZCBiZSBjaG9zZW4pCi0JICogd2l0aG91dCBkb2luZyBhIG5ldyByb3V0aW5n
IGxvb2t1cCBhbmQgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLAotCSAqIHdlIHdpbGwgKGZvciBu
b3cpIGp1c3QgZmx1c2ggYW55IGNhY2hlZCByb3V0ZSB1c2luZyBhIGRpZmZlcmVudAotCSAqIGlm
biAoYW5kIGNhY2hlZCBzb3VyY2UgYWRkcnMpIGFuZCBsZXQgb3V0cHV0IHJlLWNob29zZSB0aGVt
IGR1cmluZwotCSAqIHRoZSBuZXh0IHNlbmQgb24gdGhhdCBuZXQuCi0JICovCi0JVEFJTFFfRk9S
RUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkvKgotCQkgKiBjbGVh
ciBhbnkgY2FjaGVkIHJvdXRlIChhbmQgY2FjaGVkIHNvdXJjZSBhZGRyZXNzKSBpZiB0aGUKLQkJ
ICogcm91dGUncyBpbnRlcmZhY2UgaXMgTk9UIHRoZSBzYW1lIGFzIHRoZSBhZGRyZXNzIGNoYW5n
ZS4KLQkJICogSWYgaXQncyB0aGUgc2FtZSBpbnRlcmZhY2UsIGp1c3QgY2xlYXIgdGhlIGNhY2hl
ZCBzb3VyY2UKLQkJICogYWRkcmVzcy4KLQkJICovCi0JCWlmIChTQ1RQX1JPVVRFX0hBU19WQUxJ
RF9JRk4oJm5ldC0+cm8pICYmCi0JCSAgICAoKGlmbiA9PSBOVUxMKSB8fAotCQkgICAgIChTQ1RQ
X0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKCZuZXQtPnJvKSAhPSBpZm4tPmlmbl9pbmRleCkpKSB7
Ci0JCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlICovCi0JCQlSVEZSRUUobmV0LT5yby5yb19y
dCk7Ci0JCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJfQotCQkvKiBjbGVhciBhbnkgY2FjaGVk
IHNvdXJjZSBhZGRyZXNzICovCi0JCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7Ci0JCQlz
Y3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxM
OwotCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCX0KLQl9Ci19Ci0KLQotdm9pZAot
c2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX25ldHMgKmRzdG5ldCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlpZiAoZHN0bmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHN0
Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQotCWlm
ICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpIHsKLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FTQ09ORjEsICJhc3NvY19pbW1lZGlhdGVfcmV0cmFuczogRGVsZXRlZCBwcmltYXJ5
IGlzICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCAmc3RjYi0+YXNvYy5k
ZWxldGVkX3ByaW1hcnktPnJvLl9sX2FkZHIuc2EpOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgIkN1cnJlbnQgUHJpbWFyeSBpcyAiKTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdf
QVNDT05GMSwgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkci5zYSk7
Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwg
c3RjYiwKLQkJCQlzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeSwKLQkJCQlTQ1RQX0ZST01fU0NU
UF9BU0NPTkYgKyBTQ1RQX0xPQ18zKTsKLQkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAt
LTsKLQkJaWYgKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwIDwgMCkgewotCQkJc3RjYi0+
YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPSAwOwotCQl9Ci0JCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOwotCQllcnJvciA9IHNjdHBfdDNyeHRfdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwK
LQkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCVND
VFBfSU5QX0RFQ1JfUkVGKHN0Y2ItPnNjdHBfZXApOwotCQkJcmV0dXJuOwotCQl9Ci0JCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlz
Y3RwX2F1ZGl0aW5nKDQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIHN0Y2ItPmFzb2MuZGVsZXRlZF9w
cmltYXJ5KTsKLSNlbmRpZgotCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlpZiAoKHN0Y2It
PmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID09IDApICYmCi0JCSAgICAoc3RjYi0+YXNvYy5zZW50
X3F1ZXVlX2NudCA+IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQkJ
CWNoayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwotCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKLQkJCQkJIHN0Y2Is
IGNoay0+d2hvVG8pOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1z
dGF0aWMgaW50Ci1zY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc2N0cF9pZmEgKiwgdWludDE2X3QpOwotCi12b2lkCi1zY3RwX25ldF9pbW1lZGlhdGVfcmV0
cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgIm5ldF9pbW1lZGlhdGVfcmV0cmFuczogUlRPIGlzICVkXG4iLCBuZXQtPlJUTyk7Ci0Jc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBu
ZXQsCi0JICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiArIFNDVFBfTE9DXzQp
OwotCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3Rj
YiwgbmV0KTsKLQluZXQtPmVycm9yX2NvdW50ID0gMDsKLQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChjaGstPndob1RvID09IG5l
dCkgewotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJY2hr
LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQkJc2N0cF91Y291bnRfaW5jcihzdGNi
LT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNy
ZWFzZShjaGspOwotCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7Ci0J
CQkJbmV0LT5tYXJrZWRfcmV0cmFucysrOwotCQkJCXN0Y2ItPmFzb2MubWFya2VkX3JldHJhbnMr
KzsKLQkJCX0KLQkJfQotCX0KLQlpZiAobmV0LT5tYXJrZWRfcmV0cmFucykgewotCQlzY3RwX2No
dW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfcGF0aF9jaGVja19h
bmRfcmVhY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKm5ld2lmYSkK
LXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JaW50IGFkZHJudW0sIGNoYW5nZWQ7Ci0KLQkv
KiAgIElmIG51bWJlciBvZiBsb2NhbCB2YWxpZCBhZGRyZXNzZXMgaXMgMSwgdGhlIHZhbGlkIGFk
ZHJlc3MgaXMKLQkgICAgIHByb2JhYmx5IG5ld2x5IGFkZGVkIGFkZHJlc3MuCi0JICAgICBTZXZl
cmFsIHZhbGlkIGFkZHJlc3NlcyBpbiB0aGlzIGFzc29jaWF0aW9uLiAgQSBzb3VyY2UgYWRkcmVz
cwotCSAgICAgbWF5IG5vdCBiZSBjaGFuZ2VkLiAgQWRkaXRpb25hbGx5LCB0aGV5IGNhbiBiZSBj
b25maWd1cmVkIG9uIGEKLQkgICAgIHNhbWUgaW50ZXJmYWNlIGFzICJhbGlhcyIgYWRkcmVzc2Vz
LiAgKGJ5IG1pY2NoaWUpCi0JICovCi0JYWRkcm51bSA9IHNjdHBfbG9jYWxfYWRkcl9jb3VudChz
dGNiKTsKLQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInBfY2hlY2tfcmVhY3QoKTogJWQg
bG9jYWwgYWRkcmVzc2VzXG4iLAotCQlhZGRybnVtKTsKLQlpZiAoYWRkcm51bSA9PSAxKSB7Ci0J
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCS8q
IGNsZWFyIGFueSBjYWNoZWQgcm91dGUgYW5kIHNvdXJjZSBhZGRyZXNzICovCi0JCQlpZiAobmV0
LT5yby5yb19ydCkgewotCQkJCVJURlJFRShuZXQtPnJvLnJvX3J0KTsKLQkJCQluZXQtPnJvLnJv
X3J0ID0gTlVMTDsKLQkJCX0KLQkJCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7Ci0JCQkJ
c2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOwotCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5V
TEw7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQl9Ci0JCQkvKiBSZXRyYW5z
bWl0IHVuYWNrbm93bGVkZ2VkIERBVEEgY2h1bmtzIGltbWVkaWF0ZWx5ICovCi0JCQlpZiAoc2N0
cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7Ci0JCQkJc2N0
cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RjYiwgbmV0KTsKLQkJCX0KLQkJCS8qIGFsc28sIFNF
VCBQUklNQVJZIGlzIG1heWJlIGFscmVhZHkgc2VudCAqLwotCQl9Ci0JCXJldHVybjsKLQl9Ci0K
LQkvKiBNdWx0aXBsZSBsb2NhbCBhZGRyZXNzZXMgZXhzaXN0IGluIHRoZSBhc3NvY2lhdGlvbi4g
ICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewot
CQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIGFuZCBzb3VyY2UgYWRkcmVzcyAqLwotCQlpZiAo
bmV0LT5yby5yb19ydCkgewotCQkJUlRGUkVFKG5ldC0+cm8ucm9fcnQpOwotCQkJbmV0LT5yby5y
b19ydCA9IE5VTEw7Ci0JCX0KLQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsKLQkJCXNj
dHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7
Ci0JCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQkJfQotCQkvKiBDaGVjayBpZiB0aGUg
bmV4dGhvcCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgYWRkcmVzcy4KLQkJICAgSWYgdGhl
IG5ldyBhZGRyZXNzIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgbmV4dGhvcCwKLQkJ
ICAgdGhlIHBhdGggd2lsbCBiZSBjaGFuZ2VkLgotCQkgICBJZiB0aGUgbmV3IGFkZHJlc3MgaXMg
Tk9UIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQKLQkJICAgbmV4dGhvcCwgdGhlIHBhdGgg
d2lsbCBub3QgYmUgY2hhbmdlZC4KLQkJICovCi0JCVNDVFBfUlRBTExPQygoc2N0cF9yb3V0ZV90
ICopJm5ldC0+cm8sCi0JCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZfaWQsCi0JCQkgICAg
IHN0Y2ItPnNjdHBfZXAtPmZpYm51bSk7Ci0JCWlmIChuZXQtPnJvLnJvX3J0ID09IE5VTEwpCi0J
CQljb250aW51ZTsKLQotCQljaGFuZ2VkID0gMDsKLQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIu
c2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlpZiAoc2N0
cF92NHNyY19tYXRjaF9uZXh0aG9wKG5ld2lmYSwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvKSkg
ewotCQkJCWNoYW5nZWQgPSAxOwotCQkJfQotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVU
NgotCQljYXNlIEFGX0lORVQ2OgotCQkJaWYgKHNjdHBfdjZzcmNfbWF0Y2hfbmV4dGhvcCgKLQkJ
CSAgICAmbmV3aWZhLT5hZGRyZXNzLnNpbjYsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybykpIHsK
LQkJCQljaGFuZ2VkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0J
CQlicmVhazsKLQkJfQotCQkvKiBpZiB0aGUgbmV3bHkgYWRkZWQgYWRkcmVzcyBkb2VzIG5vdCBy
ZWxhdGUgcm91dGluZwotCQkgICBpbmZvcm1hdGlvbiwgd2Ugc2tpcC4KLQkJICovCi0JCWlmIChj
aGFuZ2VkID09IDApCi0JCQljb250aW51ZTsKLQkJLyogUmV0cmFuc21pdCB1bmFja25vd2xlZGdl
ZCBEQVRBIGNodW5rcyBpbW1lZGlhdGVseSAqLwotCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0
dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKLQkJCXNjdHBfbmV0X2ltbWVkaWF0ZV9yZXRy
YW5zKHN0Y2IsIG5ldCk7Ci0JCX0KLQkJLyogU2VuZCBTRVQgUFJJTUFSWSBmb3IgdGhpcyBuZXcg
YWRkcmVzcyAqLwotCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikg
ewotCQkJKHZvaWQpc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBuZXdpZmEsCi0JCQkJCQkg
ICAgIFNDVFBfU0VUX1BSSU1fQUREUik7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYgLyogX19GcmVlQlNE
X18gIF9fQVBQTEVfXyAgX19Vc2Vyc3BhY2VfXyAqLwotCi0vKgotICogcHJvY2VzcyBhbiBBREQv
REVMRVRFIElQIGFjayBmcm9tIHBlZXIuCi0gKiBhZGRyOiBjb3JyZXNwb25kaW5nIHNjdHBfaWZh
IHRvIHRoZSBhZGRyZXNzIGJlaW5nIGFkZGVkL2RlbGV0ZWQuCi0gKiB0eXBlOiBTQ1RQX0FERF9J
UF9BRERSRVNTIG9yIFNDVFBfREVMX0lQX0FERFJFU1MuCi0gKiBmbGFnOiAxPXN1Y2Nlc3MsIDA9
ZmFpbHVyZS4KLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfYXNjb25mX2FkZHJfbWdtdF9hY2soc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKmFkZHIsIHVpbnQzMl90IGZsYWcp
Ci17Ci0JLyoKLQkgKiBkbyB0aGUgbmVjZXNzYXJ5IGFzb2MgbGlzdCB3b3JrLSBpZiB3ZSBnZXQg
YSBmYWlsdXJlIGluZGljYXRpb24sCi0JICogbGVhdmUgdGhlIGFkZHJlc3Mgb24gdGhlIGFzc29j
J3MgcmVzdHJpY3RlZCBsaXN0LiAgSWYgd2UgZ2V0IGEKLQkgKiBzdWNjZXNzIGluZGljYXRpb24s
IHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSByZXN0cmljdGVkIGxpc3QuCi0JICovCi0JLyoK
LQkgKiBOb3RlOiB0aGlzIHdpbGwgb25seSBvY2N1ciBmb3IgQUREX0lQX0FERFJFU1MsIHNpbmNl
Ci0JICogREVMX0lQX0FERFJFU1MgaXMgbmV2ZXIgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGxpc3Qu
Li4KLQkgKi8KLQlpZiAoZmxhZykgewotCQkvKiBzdWNjZXNzIGNhc2UsIHNvIHJlbW92ZSBmcm9t
IHRoZSByZXN0cmljdGVkIGxpc3QgKi8KLQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIGFkZHIpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJaWYgKHNjdHBfaXNfbW9iaWxpdHlf
ZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVy
ZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7Ci0JCQlzY3RwX3BhdGhfY2hlY2tfYW5kX3JlYWN0
KHN0Y2IsIGFkZHIpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYgLyogX19GcmVlQlNEX18gX19B
UFBMRV9fIF9fVXNlcnNwYWNlX18gKi8KLQkJLyogY2xlYXIgYW55IGNhY2hlZC90b3BvbG9naWNh
bGx5IGluY29ycmVjdCBzb3VyY2UgYWRkcmVzc2VzICovCi0JCXNjdHBfYXNjb25mX25ldHNfY2xl
YW51cChzdGNiLCBhZGRyLT5pZm5fcCk7Ci0JfQotCS8qIGVsc2UsIGxlYXZlIGl0IG9uIHRoZSBs
aXN0ICovCi19Ci0KLS8qCi0gKiBhZGQgYW4gYXNjb25mIGFkZC9kZWxldGUvc2V0IHByaW1hcnkg
SVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlLgotICogdHlwZSA9IFNDVFBfQUREX0lQ
X0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBfU0VUX1BSSU1fQUREUi4KLSAqIHJl
dHVybnMgMCBpZiBxdWV1ZWQsIC0xIGlmIG5vdCBxdWV1ZWQvcmVtb3ZlZC4KLSAqIE5PVEU6IGlm
IGFkZGluZywgYnV0IGEgZGVsZXRlIGZvciB0aGUgc2FtZSBhZGRyZXNzIGlzIGFscmVhZHkgc2No
ZWR1bGVkCi0gKiAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkgcmVtb3ZlIGl0IGZyb20g
cXVldWUuICBTYW1lIGZvciBkZWxldGluZwotICogYW4gYWRkcmVzcyBhbHJlYWR5IHNjaGVkdWxl
ZCBmb3IgYWRkLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5kLAotICogaWdub3Jl
IHRoZSBuZXcgb25lLgotICovCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEsCi0JCSAgICAgICB1aW50
MTZfdCB0eXBlKQotewotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7Ci0K
LQkvKiBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgcXVldWUgKi8K
LQlUQUlMUV9GT1JFQUNIX1NBRkUoYWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCwg
YWFfbmV4dCkgewotCQkvKiBhZGRyZXNzIG1hdGNoPyAqLwotCQlpZiAoc2N0cF9hc2NvbmZfYWRk
cl9tYXRjaChhYSwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQkvKiBp
cyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIGJ1dCBub3Qgc2VudD8KLQkJICogcGFzcyB0
aGUgcmVxdWVzdCBhbHJlYWR5IHNlbnQgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUgZm9sbG93aW5n
IGNhc2U6Ci0JCSAqICAxLiBhcnJpdmFsIG9mIEFERCwgdGhlbiBzZW50Ci0JCSAqICAyLiBhcnJp
dmFsIG9mIERFTC4gd2UgY2FuJ3QgcmVtb3ZlIHRoZSBBREQgcmVxdWVzdCBhbHJlYWR5IHNlbnQK
LQkJICogIDMuIGFycml2YWwgb2YgQURECi0JCSAqLwotCQlpZiAoYWEtPmFwLmFwaC5waC5wYXJh
bV90eXBlID09IHR5cGUgJiYgYWEtPnNlbnQgPT0gMCkgewotCQkJcmV0dXJuICgtMSk7Ci0JCX0K
LQkJLyogaXMgdGhlIG5lZ2F0aXZlIHJlcXVlc3QgYWxyZWFkeSBpbiBxdWV1ZSwgYW5kIG5vdCBz
ZW50ICovCi0JCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9BRERfSVBfQURE
UkVTUykgJiYKLQkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9ERUxfSVBf
QUREUkVTUykpIHsKLQkJCS8qIGFkZCByZXF1ZXN0ZWQsIGRlbGV0ZSBhbHJlYWR5IHF1ZXVlZCAq
LwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwot
CQkJLyogcmVtb3ZlIHRoZSBpZmEgZnJvbSB0aGUgcmVzdHJpY3RlZCBsaXN0ICovCi0JCQlzY3Rw
X2RlbF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKLQkJCS8qIGZyZWUgdGhlIGFz
Y29uZiBwYXJhbSAqLwotCQkJU0NUUF9GUkVFKGFhLCBTQ1RQX01fQVNDX0FERFIpOwotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJhc2NvbmZfcXVldWVfbWdtdDogYWRkIHJlbW92ZXMg
cXVldWVkIGVudHJ5XG4iKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCWlmICgoYWEtPnNlbnQg
PT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgJiYKLQkJICAgIChhYS0+YXAu
YXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykpIHsKLQkJCS8qIGRlbGV0
ZSByZXF1ZXN0ZWQsIGFkZCBhbHJlYWR5IHF1ZXVlZCAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNi
LT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQkJLyogcmVtb3ZlIHRoZSBhYS0+aWZh
IGZyb20gdGhlIHJlc3RyaWN0ZWQgbGlzdCAqLwotCQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIGFhLT5pZmEpOwotCQkJLyogZnJlZSB0aGUgYXNjb25mIHBhcmFtICovCi0J
CQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMiwgImFzY29uZl9xdWV1ZV9tZ210OiBkZWxldGUgcmVtb3ZlcyBxdWV1ZWQgZW50cnlc
biIpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9IC8qIGZvciBlYWNoIGFhICovCi0KLQkvKiBh
ZGRpbmcgbmV3IHJlcXVlc3QgdG8gdGhlIHF1ZXVlICovCi0JU0NUUF9NQUxMT0MoYWEsIHN0cnVj
dCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAotCQkgICAgU0NUUF9NX0FTQ19BRERS
KTsKLQlpZiAoYWEgPT0gTlVMTCkgewotCQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLwotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImFzY29uZl9xdWV1ZV9tZ210OiBmYWlsZWQgdG8gZ2V0
IG1lbW9yeSFcbiIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JYWEtPnNwZWNpYWxfZGVsID0gMDsK
LQkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBhcmFtZXRlciBmaWVsZHMgKi8KLQkvKiB0b3Ag
bGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQiIGR1cmluZyBzZW5kICovCi0JYWEtPmFwLmFw
aC5waC5wYXJhbV90eXBlID0gdHlwZTsKLQlhYS0+aWZhID0gaWZhOwotCWF0b21pY19hZGRfaW50
KCZpZmEtPnJlZmNvdW50LCAxKTsKLQkvKiBjb3JyZWxhdGlvbl9pZCBmaWxsZWQgaW4gZHVyaW5n
IHNlbmQgcm91dGluZSBsYXRlci4uLiAqLwotCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSkgewotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9ICZpZmEtPmFkZHJlc3Muc2luNjsKLQkJYWEtPmFw
LmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKLQkJYWEtPmFwLmFkZHJw
LnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKTsK
LQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyKSArCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pOwot
CQltZW1jcHkoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAotCQkgICAgICAg
c2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUCi0JY2FzZSBBRl9JTkVUOgotCXsKLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJ
c2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0g
U0NUUF9JUFY0X0FERFJFU1M7Ci0JCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSAoc2l6
ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSk7Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1f
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcikgKwotCQkgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKLQkJbWVtY3B5KCZhYS0+YXAuYWRkcnAu
YWRkciwgJnNpbi0+c2luX2FkZHIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsK
LQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogaW52YWxpZCBmYW1pbHkhICov
Ci0JCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKLQkJc2N0cF9mcmVlX2lmYShpZmEp
OwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JYWEtPnNlbnQgPSAwOwkJLyogY2xlYXIgc2VudCBmbGFn
ICovCi0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIGFhLCBu
ZXh0KTsKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1
Z19vbikgJiBTQ1RQX0RFQlVHX0FTQ09ORjIpIHsKLQkJaWYgKHR5cGUgPT0gU0NUUF9BRERfSVBf
QUREUkVTUykgewotCQkJU0NUUF9QUklOVEYoImFzY29uZl9xdWV1ZV9tZ210OiBpbnNlcnRlZCBh
c2NvbmYgQUREX0lQX0FERFJFU1M6ICIpOwotCQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVND
T05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7Ci0JCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9J
UF9BRERSRVNTKSB7Ci0JCQlTQ1RQX1BSSU5URigiYXNjb25mX3F1ZXVlX21nbXQ6IGFwcGVuZGVk
IGFzY29uZiBERUxfSVBfQUREUkVTUzogIik7Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19B
U0NPTkYyLCAmaWZhLT5hZGRyZXNzLnNhKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfUFJJTlRGKCJh
c2NvbmZfcXVldWVfbWdtdDogYXBwZW5kZWQgYXNjb25mIFNFVF9QUklNX0FERFI6ICIpOwotCQkJ
U0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7Ci0JCX0K
LQl9Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotLyoKLSAqIGFkZCBhbiBhc2NvbmYg
b3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gaWZhIGFuZCB0eXBlLgotICogdHlwZSA9IFNDVFBfQURE
X0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBfU0VUX1BSSU1fQUREUi4KLSAq
IHJldHVybnMgMCBpZiBjb21wbGV0ZWQsIC0xIGlmIG5vdCBjb21wbGV0ZWQsIDEgaWYgaW1tZWRp
YXRlIHNlbmQgaXMKLSAqIGFkdmlzYWJsZS4KLSAqLwotc3RhdGljIGludAotc2N0cF9hc2NvbmZf
cXVldWVfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEsCi0J
CSAgICAgIHVpbnQxNl90IHR5cGUpCi17Ci0JdWludDMyX3Qgc3RhdHVzOwotCWludCBwZW5kaW5n
X2RlbGV0ZV9xdWV1ZWQgPSAwOwotCWludCBsYXN0OwotCi0JLyogc2VlIGlmIHBlZXIgc3VwcG9y
dHMgQVNDT05GICovCi0JaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7Ci0J
CXJldHVybiAoLTEpOwotCX0KLQotCS8qCi0JICogaWYgdGhpcyBpcyBkZWxldGluZyB0aGUgbGFz
dCBhZGRyZXNzIGZyb20gdGhlIGFzc29jLCBtYXJrIGl0IGFzCi0JICogcGVuZGluZy4KLQkgKi8K
LQlpZiAoKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgJiYgIXN0Y2ItPmFzb2MuYXNjb25m
X2RlbF9wZW5kaW5nKSB7Ci0JCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJCWxhc3QgPSAoc2N0cF9sb2NhbF9hZGRyX2NvdW50KHN0
Y2IpID09IDApOwotCQl9IGVsc2UgewotCQkJbGFzdCA9IChzY3RwX2xvY2FsX2FkZHJfY291bnQo
c3RjYikgPT0gMSk7Ci0JCX0KLQkJaWYgKGxhc3QpIHsKLQkJCS8qIHNldCB0aGUgcGVuZGluZyBk
ZWxldGUgaW5mbyBvbmx5ICovCi0JCQlzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyA9IDE7
Ci0JCQlzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nID0gaWZhOwotCQkJYXRvbWlj
X2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjIsCi0JCQkJImFzY29uZl9xdWV1ZV9hZGQ6IG1hcmsgZGVsZXRlIGxhc3QgYWRkcmVzcyBwZW5k
aW5nXG4iKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JfQotCi0JLyogcXVldWUgYW4gYXNjb25m
IHBhcmFtZXRlciAqLwotCXN0YXR1cyA9IHNjdHBfYXNjb25mX3F1ZXVlX21nbXQoc3RjYiwgaWZh
LCB0eXBlKTsKLQotCS8qCi0JICogaWYgdGhpcyBpcyBhbiBhZGQsIGFuZCB0aGVyZSBpcyBhIGRl
bGV0ZSBhbHNvIHBlbmRpbmcgKGkuZS4gdGhlCi0JICogbGFzdCBsb2NhbCBhZGRyZXNzIGlzIGJl
aW5nIGNoYW5nZWQpLCBxdWV1ZSB0aGUgcGVuZGluZyBkZWxldGUgdG9vLgotCSAqLwotCWlmICgo
dHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSAmJiBzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVu
ZGluZyAmJiAoc3RhdHVzID09IDApKSB7Ci0JCS8qIHF1ZXVlIGluIHRoZSBwZW5kaW5nIGRlbGV0
ZSAqLwotCQlpZiAoc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLAotCQkJCQkgICBzdGNiLT5h
c29jLmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nLAotCQkJCQkgICBTQ1RQX0RFTF9JUF9BRERSRVNT
KSA9PSAwKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1ZV9h
ZGQ6IHF1ZWluZyBwZW5kaW5nIGRlbGV0ZVxuIik7Ci0JCQlwZW5kaW5nX2RlbGV0ZV9xdWV1ZWQg
PSAxOwotCQkJLyogY2xlYXIgb3V0IHRoZSBwZW5kaW5nIGRlbGV0ZSBpbmZvICovCi0JCQlzdGNi
LT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyA9IDA7Ci0JCQlzY3RwX2ZyZWVfaWZhKHN0Y2ItPmFz
b2MuYXNjb25mX2FkZHJfZGVsX3BlbmRpbmcpOwotCQkJc3RjYi0+YXNvYy5hc2NvbmZfYWRkcl9k
ZWxfcGVuZGluZyA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlpZiAocGVuZGluZ19kZWxldGVfcXVldWVk
KSB7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJLyoKLQkJICogc2luY2Ugd2Uga25vdyB0
aGF0IHRoZSBvbmx5L2xhc3QgYWRkcmVzcyBpcyBub3cgYmVpbmcKLQkJICogY2hhbmdlZCBpbiB0
aGlzIGNhc2UsIHJlc2V0IHRoZSBjd25kL3J0byBvbiBhbGwgbmV0cyB0bwotCQkgKiBzdGFydCBh
cyBhIG5ldyBhZGRyZXNzIGFuZCBwYXRoLiAgQWxzbyBjbGVhciB0aGUgZXJyb3IKLQkJICogY291
bnRzIHRvIGdpdmUgdGhlIGFzc29jIHRoZSBiZXN0IGNoYW5jZSB0byBjb21wbGV0ZSB0aGUKLQkJ
ICogYWRkcmVzcyBjaGFuZ2UuCi0JCSAqLwotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3Nl
dF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsCi0JCQkJCQkJCQkgIG5ldCk7Ci0JCQluZXQtPlJUTyA9
IDA7Ci0JCQluZXQtPmVycm9yX2NvdW50ID0gMDsKLQkJfQotCQlzdGNiLT5hc29jLm92ZXJhbGxf
ZXJyb3JfY291bnQgPSAwOwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJc2N0cF9taXNjX2ludHMoU0NUUF9U
SFJFU0hPTERfQ0xFQVIsCi0JCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3Vu
dCwKLQkJCQkgICAgICAgMCwKLQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfQVNDT05GLAotCQkJ
CSAgICAgICBfX0xJTkVfXyk7Ci0JCX0KLQotCQkvKiBxdWV1ZSBpbiBhbiBhZHZpc29yeSBzZXQg
cHJpbWFyeSB0b28gKi8KLQkJKHZvaWQpc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBpZmEs
IFNDVFBfU0VUX1BSSU1fQUREUik7Ci0JCS8qIGxldCBjYWxsZXIga25vdyB3ZSBzaG91bGQgc2Vu
ZCB0aGlzIG91dCBpbW1lZGlhdGVseSAqLwotCQlzdGF0dXMgPSAxOwotCX0KLQlyZXR1cm4gKHN0
YXR1cyk7Ci19Ci0KLS8qLQotICogYWRkIGFuIGFzY29uZiBkZWxldGUgSVAgYWRkcmVzcyBwYXJh
bWV0ZXIgdG8gdGhlIHF1ZXVlIGJ5IHNvY2thZGRyIGFuZAotICogcG9zc2libHkgd2l0aCBubyBz
Y3RwX2lmYSBhdmFpbGFibGUuICBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSByb3V0aW5lCi0g
KiB0aGF0IGNoZWNrcyB0aGUgYWRkcmVzc2VzIGluIGFuIElOSVQtQUNLIGFnYWluc3QgdGhlIGN1
cnJlbnQgYWRkcmVzcyBsaXN0LgotICogcmV0dXJucyAwIGlmIGNvbXBsZXRlZCwgbm9uLXplcm8g
aWYgbm90IGNvbXBsZXRlZC4KLSAqIE5PVEU6IGlmIGFuIGFkZCBpcyBhbHJlYWR5IHNjaGVkdWxl
ZCAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkKLSAqIHJlbW92ZSBpdCBmcm9tIHF1ZXVl
LiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5kLCBpZ25vcmUgdGhlCi0gKiBuZXcg
b25lLgotICovCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9xdWV1ZV9zYV9kZWxldGUoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQotewotCXN0cnVjdCBzY3RwX2lm
YSAqaWZhOwotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7Ci0KLQlpZiAo
c3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBzZWUgaWYgcGVlciBzdXBw
b3J0cyBBU0NPTkYgKi8KLQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsK
LQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIG1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpc24ndCBhbHJl
YWR5IGluIHRoZSBxdWV1ZSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShhYSwgJnN0Y2ItPmFzb2Mu
YXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7Ci0JCS8qIGFkZHJlc3MgbWF0Y2g/ICovCi0J
CWlmIChzY3RwX2FzY29uZl9hZGRyX21hdGNoKGFhLCBzYSkgPT0gMCkKLQkJCWNvbnRpbnVlOwot
CQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIChzZW50IG9yIG5vdCkgKi8KLQkJ
aWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0J
CQlyZXR1cm4gKC0xKTsKLQkJfQotCQkvKiBpcyB0aGUgbmVnYXRpdmUgcmVxdWVzdCBhbHJlYWR5
IGluIHF1ZXVlLCBhbmQgbm90IHNlbnQgKi8KLQkJaWYgKGFhLT5zZW50ID09IDEpCi0JCQljb250
aW51ZTsKLQkJaWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0FERF9JUF9BRERS
RVNTKSB7Ci0JCQkvKiBhZGQgYWxyZWFkeSBxdWV1ZWQsIHNvIHJlbW92ZSBleGlzdGluZyBlbnRy
eSAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQp
OwotCQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEpOwotCQkJ
LyogZnJlZSB0aGUgZW50cnkgKi8KLQkJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsK
LQkJCXJldHVybiAoLTEpOwotCQl9Ci0JfSAvKiBmb3IgZWFjaCBhYSAqLwotCi0JLyogZmluZCBh
bnkgZXhpc3RpbmcgaWZhLS0gTk9URSBpZmEgQ0FOIGJlIGFsbG93ZWQgdG8gYmUgTlVMTCAqLwot
CWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihzYSwgc3RjYi0+YXNvYy52cmZfaWQsIFNDVFBf
QUREUl9OT1RfTE9DS0VEKTsKLQotCS8qIGFkZGluZyBuZXcgcmVxdWVzdCB0byB0aGUgcXVldWUg
Ki8KLQlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwgc2l6ZW9mKCph
YSksCi0JCSAgICBTQ1RQX01fQVNDX0FERFIpOwotCWlmIChhYSA9PSBOVUxMKSB7Ci0JCS8qIGRp
ZG4ndCBnZXQgbWVtb3J5ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInNj
dHBfYXNjb25mX3F1ZXVlX3NhX2RlbGV0ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4iKTsKLQkJ
cmV0dXJuICgtMSk7Ci0JfQotCWFhLT5zcGVjaWFsX2RlbCA9IDA7Ci0JLyogZmlsbCBpbiBhc2Nv
bmYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzICovCi0JLyogdG9wIGxldmVsIGVsZW1lbnRzIGFy
ZSAibmV0d29ya2VkIiBkdXJpbmcgc2VuZCAqLwotCWFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9
IFNDVFBfREVMX0lQX0FERFJFU1M7Ci0JYWEtPmlmYSA9IGlmYTsKLQlpZiAoaWZhKQotCQlhdG9t
aWNfYWRkX2ludCgmaWZhLT5yZWZjb3VudCwgMSk7Ci0JLyogY29ycmVsYXRpb25faWQgZmlsbGVk
IGluIGR1cmluZyBzZW5kIHJvdXRpbmUgbGF0ZXIuLi4gKi8KLQlzd2l0Y2ggKHNhLT5zYV9mYW1p
bHkpIHsKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JewotCQkvKiBJUHY2IGFkZHJl
c3MgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlzaW42ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilzYTsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQ
VjZfQUREUkVTUzsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3Ry
dWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKTsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGgg
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCW1lbWNweSgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW42LT5z
aW42X2FkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWJyZWFrOwotCX0K
LSNlbmRpZgotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JewotCQkvKiBJUHY0IGFkZHJl
c3MgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
c2E7Ci0KLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsK
LQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NGFkZHJfcGFyYW0pKTsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSk7Ci0JCW1lbWNweSgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW4tPnNpbl9hZGRyLAotCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCWRlZmF1
bHQ6Ci0JCS8qIGludmFsaWQgZmFtaWx5ISAqLwotCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0Nf
QUREUik7Ci0JCWlmIChpZmEpCi0JCQlzY3RwX2ZyZWVfaWZhKGlmYSk7Ci0JCXJldHVybiAoLTEp
OwotCX0KLQlhYS0+c2VudCA9IDA7CQkvKiBjbGVhciBzZW50IGZsYWcgKi8KLQotCS8qIGRlbGV0
ZSBnb2VzIHRvIHRoZSBiYWNrIG9mIHRoZSBxdWV1ZSAqLwotCVRBSUxRX0lOU0VSVF9UQUlMKCZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCi0JLyogc2FfaWdub3JlIE1FTUxF
QUsge21lbW9yeSBpcyBwdXQgb24gdGhlIHRhaWxxfSAqLwotCXJldHVybiAoMCk7Ci19Ci0KLS8q
Ci0gKiBmaW5kIGEgc3BlY2lmaWMgYXNjb25mIHBhcmFtIG9uIG91ciAic2VudCIgcXVldWUKLSAq
Lwotc3RhdGljIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICoKLXNjdHBfYXNjb25mX2ZpbmRfcGFy
YW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBjb3JyZWxhdGlvbl9pZCkKLXsKLQlz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWE7Ci0KLQlUQUlMUV9GT1JFQUNIKGFhLCAmc3RjYi0+
YXNvYy5hc2NvbmZfcXVldWUsIG5leHQpIHsKLQkJaWYgKGFhLT5hcC5hcGguY29ycmVsYXRpb25f
aWQgPT0gY29ycmVsYXRpb25faWQgJiYKLQkJICAgIGFhLT5zZW50ID09IDEpIHsKLQkJCS8qIGZv
dW5kIGl0ICovCi0JCQlyZXR1cm4gKGFhKTsKLQkJfQotCX0KLQkvKiBkaWRuJ3QgZmluZCBpdCAq
LwotCXJldHVybiAoTlVMTCk7Ci19Ci0KLS8qCi0gKiBwcm9jZXNzIGFuIFNDVFBfRVJST1JfQ0FV
U0VfSU5EIGZvciBhIEFTQ09ORi1BQ0sgcGFyYW1ldGVyIGFuZCBkbwotICogbm90aWZpY2F0aW9u
cyBiYXNlZCBvbiB0aGUgZXJyb3IgcmVzcG9uc2UKLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfYXNj
b25mX3Byb2Nlc3NfZXJyb3Ioc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELAotCQkJ
ICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCkKLXsKLQlzdHJ1Y3Qgc2N0cF9lcnJv
cl9jYXVzZSAqZWg7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOwotCXVpbnQxNl90IHBhcmFt
X3R5cGU7Ci0JdWludDE2X3QgZXJyb3JfY29kZTsKLQotCWVoID0gKHN0cnVjdCBzY3RwX2Vycm9y
X2NhdXNlICopKGFwaCArIDEpOwotCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKGVoICsg
MSk7Ci0JLyogdmFsaWRhdGUgbGVuZ3RocyAqLwotCWlmIChodG9ucyhlaC0+bGVuZ3RoKSArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkgPgotCSAgICBodG9ucyhhcGgtPnBoLnBhcmFt
X2xlbmd0aCkpIHsKLQkJLyogaW52YWxpZCBlcnJvciBjYXVzZSBsZW5ndGggKi8KLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkiYXNjb25mX3Byb2Nlc3NfZXJyb3I6IGNhdXNlIGVs
ZW1lbnQgdG9vIGxvbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmIChodG9ucyhwaC0+cGFyYW1f
bGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgPgotCSAgICBodG9ucyhlaC0+
bGVuZ3RoKSkgewotCQkvKiBpbnZhbGlkIGluY2x1ZGVkIFRMViBsZW5ndGggKi8KLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkiYXNjb25mX3Byb2Nlc3NfZXJyb3I6IGluY2x1ZGVk
IFRMViB0b28gbG9uZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0JLyogd2hpY2ggZXJyb3IgY29kZSA/
ICovCi0JZXJyb3JfY29kZSA9IG50b2hzKGVoLT5jb2RlKTsKLQlwYXJhbV90eXBlID0gbnRvaHMo
YXBoLT5waC5wYXJhbV90eXBlKTsKLQkvKiBGSVg6IHRoaXMgc2hvdWxkIGdvIGJhY2sgdXAgdGhl
IFJFTU9URV9FUlJPUiBVTFAgbm90aWZ5ICovCi0Jc3dpdGNoIChlcnJvcl9jb2RlKSB7Ci0JY2Fz
ZSBTQ1RQX0NBVVNFX1JFU09VUkNFX1NIT1JUQUdFOgotCQkvKiB3ZSBhbGxvdyBvdXJzZWx2ZXMg
dG8gInRyeSBhZ2FpbiIgZm9yIHRoaXMgZXJyb3IgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJ
LyogcGVlciBjYW4ndCBoYW5kbGUgaXQuLi4gKi8KLQkJc3dpdGNoIChwYXJhbV90eXBlKSB7Ci0J
CWNhc2UgU0NUUF9BRERfSVBfQUREUkVTUzoKLQkJY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNTOgot
CQljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJl
YWs7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBwcm9jZXNzIGFuIGFzY29uZiBxdWV1ZSBwYXJhbS4K
LSAqIGFwYXJhbTogcGFyYW1ldGVyIHRvIHByb2Nlc3MsIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRo
ZSBxdWV1ZS4KLSAqIGZsYWc6IDE9c3VjY2VzcyBjYXNlLCAwPWZhaWx1cmUgY2FzZQotICovCi1z
dGF0aWMgdm9pZAotc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotCQkJICAgICAgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKmFwYXJhbSwgdWludDMy
X3QgZmxhZykKLXsKLQl1aW50MTZfdCBwYXJhbV90eXBlOwotCi0JLyogcHJvY2VzcyB0aGlzIHBh
cmFtICovCi0JcGFyYW1fdHlwZSA9IGFwYXJhbS0+YXAuYXBoLnBoLnBhcmFtX3R5cGU7Ci0Jc3dp
dGNoIChwYXJhbV90eXBlKSB7Ci0JY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgotCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJwcm9jZXNzX3BhcmFtX2FjazogYWRkZWQgSVAgYWRk
cmVzc1xuIik7Ci0JCXNjdHBfYXNjb25mX2FkZHJfbWdtdF9hY2soc3RjYiwgYXBhcmFtLT5pZmEs
IGZsYWcpOwotCQlicmVhazsKLQljYXNlIFNDVFBfREVMX0lQX0FERFJFU1M6Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nlc3NfcGFyYW1fYWNrOiBkZWxldGVkIElQIGFk
ZHJlc3NcbiIpOwotCQkvKiBub3RoaW5nIHJlYWxseSB0byBkby4uLiBsaXN0cyBhbHJlYWR5IHVw
ZGF0ZWQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nlc3NfcGFyYW1fYWNrOiBzZXQgcHJpbWFyeSBJ
UCBhZGRyZXNzXG4iKTsKLQkJLyogbm90aGluZyB0byBkby4uLiBwZWVyIG1heSBzdGFydCB1c2lu
ZyB0aGlzIGFkZHIgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogc2hvdWxkIE5FVkVSIGhh
cHBlbiAqLwotCQlicmVhazsKLQl9Ci0KLQkvKiByZW1vdmUgdGhlIHBhcmFtIGFuZCBmcmVlIGl0
ICovCi0JVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYXBhcmFtLCBuZXh0
KTsKLQlpZiAoYXBhcmFtLT5pZmEpCi0JCXNjdHBfZnJlZV9pZmEoYXBhcmFtLT5pZmEpOwotCVND
VFBfRlJFRShhcGFyYW0sIFNDVFBfTV9BU0NfQUREUik7Ci19Ci0KLS8qCi0gKiBjbGVhbnVwIGZy
b20gYSBiYWQgYXNjb25mIGFjayBwYXJhbWV0ZXIKLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfYXNj
b25mX2Fja19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQpCi17Ci0JLyog
YXNzdW1lIHBlZXIgZG9lc24ndCByZWFsbHkga25vdyBob3cgdG8gZG8gYXNjb25mcyAqLwotCS8q
IFhYWCB3ZSBjb3VsZCBmcmVlIHRoZSBwZW5kaW5nIHF1ZXVlIGhlcmUgKi8KLQotfQotCi12b2lk
Ci1zY3RwX2hhbmRsZV9hc2NvbmZfYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAotCQkg
ICAgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayAqY3AsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQkJICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50ICphYm9ydF9ub191bmxv
Y2spCi17Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0JdWludDMyX3Qgc2VyaWFs
X251bTsKLQl1aW50MTZfdCBhY2tfbGVuZ3RoOwotCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhk
ciAqYXBoOwotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7Ci0JdWludDMy
X3QgbGFzdF9lcnJvcl9pZCA9IDA7CS8qIGxhc3QgZXJyb3IgY29ycmVsYXRpb24gaWQgKi8KLQl1
aW50MzJfdCBpZDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYXA7Ci0KLQkvKiBhc2NvbmYg
cGFyYW0gYnVmZmVyICovCi0JdWludDhfdCBhcGFyYW1fYnVmW1NDVFBfUEFSQU1fQlVGRkVSX1NJ
WkVdOwotCi0JLyogdmVyaWZ5IG1pbmltdW0gbGVuZ3RoICovCi0JaWYgKG50b2hzKGNwLT5jaC5j
aHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmspKSB7Ci0J
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImhhbmRsZV9hc2NvbmZfYWNrOiBjaHVu
ayB0b28gc21hbGwgPSAleGhcbiIsCi0JCQludG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSk7Ci0J
CXJldHVybjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCXNlcmlhbF9udW0gPSBudG9obChj
cC0+c2VyaWFsX251bWJlcik7Ci0KLQkvKgotCSAqIE5PVEU6IHdlIG1heSB3YW50IHRvIGhhbmRs
ZSB0aGlzIGRpZmZlcmVudGx5LSBjdXJyZW50bHksIHdlIHdpbGwKLQkgKiBhYm9ydCB3aGVuIHdl
IGdldCBhbiBhY2sgZm9yIHRoZSBleHBlY3RlZCBzZXJpYWwgbnVtYmVyICsgMSAoZWcuCi0JICog
d2UgZGlkbid0IHNlbmQgaXQpLCBwcm9jZXNzIGFuIGFjayBub3JtYWxseSBpZiBpdCBpcyB0aGUg
ZXhwZWN0ZWQKLQkgKiBzZXJpYWwgbnVtYmVyLCBhbmQgcmUtc2VuZCB0aGUgcHJldmlvdXMgYWNr
IGZvciAqQUxMKiBvdGhlcgotCSAqIHNlcmlhbCBudW1iZXJzCi0JICovCi0KLQkvKgotCSAqIGlm
IHRoZSBzZXJpYWwgbnVtYmVyIGlzIHRoZSBuZXh0IGV4cGVjdGVkLCBidXQgSSBkaWRuJ3Qgc2Vu
ZCBpdCwKLQkgKiBhYm9ydCB0aGUgYXNvYywgc2luY2Ugc29tZW9uZSBwcm9iYWJseSBqdXN0IGhp
amFja2VkIHVzLi4uCi0JICovCi0JaWYgKHNlcmlhbF9udW0gPT0gKGFzb2MtPmFzY29uZl9zZXFf
b3V0ICsgMSkpIHsKLQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKLQotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmZfYWNrOiBnb3QgdW5leHBlY3RlZCBuZXh0IHNlcmlhbCBudW1iZXIhIEFib3J0aW5nIGFzb2Mh
XG4iKTsKLQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk5ldmVyIHNlbnQgc2VyaWFsIG51
bWJlciAlOC44eCIsCi0JCQkgc2VyaWFsX251bSk7Ci0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0JCXNjdHBfYWJvcnRf
YW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc2Vy
aWFsX251bSAhPSBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCArIDEpIHsKLQkJLyogZ290IGEg
ZHVwbGljYXRlL3VuZXhwZWN0ZWQgQVNDT05GLUFDSyAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgZHVwbGljYXRlL3VuZXhwZWN0ZWQgc2Vy
aWFsIG51bWJlciA9ICV4aCAoZXhwZWN0ZWQgPSAleGgpXG4iLAotCQkJc2VyaWFsX251bSwgYXNv
Yy0+YXNjb25mX3NlcV9vdXRfYWNrZWQgKyAxKTsKLQkJcmV0dXJuOwotCX0KLQotCWlmIChzZXJp
YWxfbnVtID09IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMSkgewotCQkvKiBzdG9wIG91ciB0aW1l
ciAqLwotCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgbmV0LAotCQkJCVNDVFBfRlJPTV9TQ1RQX0FTQ09ORiArIFNDVFBfTE9DXzUp
OwotCX0KLQotCS8qIHByb2Nlc3MgdGhlIEFTQ09ORi1BQ0sgY29udGVudHMgKi8KLQlhY2tfbGVu
Z3RoID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgLQotCSAgICBzaXplb2Yoc3RydWN0IHNj
dHBfYXNjb25mX2Fja19jaHVuayk7Ci0Jb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWNrX2NodW5rKTsKLQkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRlcnMgKi8KLQl3
aGlsZSAoYWNrX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSkg
ewotCQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBlOwotCi0JCS8qIGdldCBw
b2ludGVyIHRvIG5leHQgYXNjb25mIHBhcmFtZXRlciAqLwotCQlhcGggPSAoc3RydWN0IHNjdHBf
YXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCi0JCSAgICBzaXplb2Yo
c3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7Ci0JCWlmIChhcGggPT0g
TlVMTCkgewotCQkJLyogY2FuJ3QgZ2V0IGFuIGFzY29uZiBwYXJhbWhkciAqLwotCQkJc2N0cF9h
c2NvbmZfYWNrX2NsZWFyKHN0Y2IpOwotCQkJcmV0dXJuOwotCQl9Ci0JCXBhcmFtX3R5cGUgPSBu
dG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOwotCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBo
LnBhcmFtX2xlbmd0aCk7Ci0JCWlmIChwYXJhbV9sZW5ndGggPiBhY2tfbGVuZ3RoKSB7Ci0JCQlz
Y3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHBhcmFt
X2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKLQkJCXNjdHBfYXNjb25m
X2Fja19jbGVhcihzdGNiKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBnZXQgdGhlIGNvbXBsZXRl
IHBhcmFtZXRlci4uLiAqLwotCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYp
KSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCQkicGFyYW0gbGVuZ3RoICgl
dSkgbGFyZ2VyIHRoYW4gYnVmZmVyIHNpemUhXG4iLCBwYXJhbV9sZW5ndGgpOwotCQkJc2N0cF9h
c2NvbmZfYWNrX2NsZWFyKHN0Y2IpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWFwaCA9IChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcGFyYW1fbGVu
Z3RoLCBhcGFyYW1fYnVmKTsKLQkJaWYgKGFwaCA9PSBOVUxMKSB7Ci0JCQlzY3RwX2FzY29uZl9h
Y2tfY2xlYXIoc3RjYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogY29ycmVsYXRpb25faWQgaXMg
dHJhbnNwYXJlbnQgdG8gcGVlciwgbm8gbnRvaGwgbmVlZGVkICovCi0JCWlkID0gYXBoLT5jb3Jy
ZWxhdGlvbl9pZDsKLQotCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKLQkJY2FzZSBTQ1RQX0VSUk9S
X0NBVVNFX0lORDoKLQkJCWxhc3RfZXJyb3JfaWQgPSBpZDsKLQkJCS8qIGZpbmQgdGhlIGNvcnJl
c3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1ZSAqLwotCQkJYXAgPSBzY3RwX2FzY29u
Zl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKLQkJCWlmIChhcCA9PSBOVUxMKSB7Ci0JCQkJLyogaG1t
Li4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUhICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0J
CQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIGZhaWxlZCBmbGFnICovCi0JCQlzY3RwX2FzY29u
Zl9wcm9jZXNzX3BhcmFtX2FjayhzdGNiLCBhcCwgMCk7Ci0JCQkvKiBwcm9jZXNzIHRoZSBlcnJv
ciByZXNwb25zZSAqLwotCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19lcnJvcihzdGNiLCBhcGgpOwot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9SVDoKLQkJCS8qIGZpbmQgdGhlIGNv
cnJlc3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1ZSAqLwotCQkJYXAgPSBzY3RwX2Fz
Y29uZl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKLQkJCWlmIChhcCA9PSBOVUxMKSB7Ci0JCQkJLyog
aG1tLi4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUhICovCi0JCQkJYnJlYWs7Ci0JCQl9
Ci0JCQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIHN1Y2Nlc3MgZmxhZyAqLwotCQkJc2N0cF9h
c2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYXAsIDEpOwotCQkJYnJlYWs7Ci0JCWRlZmF1
bHQ6Ci0JCQlicmVhazsKLQkJfQkJLyogc3dpdGNoICovCi0KLQkJLyogdXBkYXRlIHJlbWFpbmlu
ZyBBU0NPTkYtQUNLIG1lc3NhZ2UgbGVuZ3RoIHRvIHByb2Nlc3MgKi8KLQkJYWNrX2xlbmd0aCAt
PSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOwotCQlpZiAoYWNrX2xlbmd0aCA8PSAwKSB7Ci0J
CQkvKiBubyBtb3JlIGRhdGEgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJCWJyZWFrOwotCQl9Ci0J
CW9mZnNldCArPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOwotCX0gLyogd2hpbGUgKi8KLQot
CS8qCi0JICogaWYgdGhlcmUgYXJlIGFueSAic2VudCIgcGFyYW1zIHN0aWxsIG9uIHRoZSBxdWV1
ZSwgdGhlc2UgYXJlCi0JICogaW1wbGljaXRseSAic3VjY2VzcyIsIG9yICJmYWlsZWQiIChpZiB3
ZSBnb3QgYW4gZXJyb3IgYmFjaykgLi4uCi0JICogc28gcHJvY2VzcyB0aGVzZSBhcHByb3ByaWF0
ZWx5Ci0JICoKLQkgKiB3ZSBhc3N1bWUgdGhhdCB0aGUgY29ycmVsYXRpb25faWQncyBhcmUgbW9u
b3RvbmljYWxseSBpbmNyZWFzaW5nCi0JICogYmVnaW5uaW5nIGZyb20gMSBhbmQgdGhhdCB3ZSBk
b24ndCBoYXZlICp0aGF0KiBtYW55IG91dHN0YW5kaW5nCi0JICogYXQgYW55IGdpdmVuIHRpbWUK
LQkgKi8KLQlpZiAobGFzdF9lcnJvcl9pZCA9PSAwKQotCQlsYXN0X2Vycm9yX2lkLS07CS8qIHNl
dCB0byAibWF4IiB2YWx1ZSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShhYSwgJnN0Y2ItPmFzb2Mu
YXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7Ci0JCWlmIChhYS0+c2VudCA9PSAxKSB7Ci0J
CQkvKgotCQkJICogaW1wbGljaXRseSBzdWNjZXNzZnVsIG9yIGZhaWxlZCBpZiBjb3JyZWxhdGlv
bl9pZAotCQkJICogPCBsYXN0X2Vycm9yX2lkLCB0aGVuIHN1Y2Nlc3MgZWxzZSwgZmFpbHVyZQot
CQkJICovCi0JCQlpZiAoYWEtPmFwLmFwaC5jb3JyZWxhdGlvbl9pZCA8IGxhc3RfZXJyb3JfaWQp
Ci0JCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYWEsIDEpOwotCQkJZWxz
ZQotCQkJCXNjdHBfYXNjb25mX3Byb2Nlc3NfcGFyYW1fYWNrKHN0Y2IsIGFhLCAwKTsKLQkJfSBl
bHNlIHsKLQkJCS8qCi0JCQkgKiBzaW5jZSB3ZSBhbHdheXMgcHJvY2VzcyBpbiBvcmRlciAoRklG
TyBxdWV1ZSkgaWYKLQkJCSAqIHdlIHJlYWNoIG9uZSB0aGF0IGhhc24ndCBiZWVuIHNlbnQsIHRo
ZSByZXN0Ci0JCQkgKiBzaG91bGQgbm90IGhhdmUgYmVlbiBzZW50IGVpdGhlci4gc28sIHdlJ3Jl
Ci0JCQkgKiBkb25lLi4uCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JLyogdXBkYXRl
IHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0byB1c2UgKi8KLQlhc29jLT5hc2NvbmZfc2VxX291
dF9hY2tlZCsrOwotCS8qIHJlbW92ZSB0aGUgb2xkIEFTQ09ORiBvbiBvdXIgb3V0Ym91bmQgcXVl
dWUgKi8KLQlzY3RwX3Rvc3Nfb2xkX2FzY29uZihzdGNiKTsKLQlpZiAoIVRBSUxRX0VNUFRZKCZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSkpIHsKLSNpZmRlZiBTQ1RQX1RJTUVSX0JBU0VEX0FTQ09O
RgotCQkvKiB3ZSBoYXZlIG1vcmUgcGFyYW1zLCBzbyByZXN0YXJ0IG91ciB0aW1lciAqLwotCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIHN0Y2ItPnNjdHBfZXAsCi0J
CQkJIHN0Y2IsIG5ldCk7Ci0jZWxzZQotCQkvKiB3ZSBoYXZlIG1vcmUgcGFyYW1zLCBzbyBzZW5k
IG91dCBtb3JlICovCi0JCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgbmV0LCBTQ1RQX0FERFJfTk9U
X0xPQ0tFRCk7Ci0jZW5kaWYKLQl9Ci19Ci0KLSNpZmRlZiBJTkVUNgotc3RhdGljIHVpbnQzMl90
Ci1zY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
b2NrYWRkciAqc2EpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKm5ldDY7Ci0Jc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsK
LQkJLyogd3JvbmcgZmFtaWx5ICovCi0JCXJldHVybiAoMCk7Ci0JfQotCXNpbjYgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKXNhOwotCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNp
bjZfYWRkcikgPT0gMCkgewotCQkvKiBub3QgbGluayBsb2NhbCBhZGRyZXNzICovCi0JCXJldHVy
biAoMCk7Ci0JfQotCS8qIGh1bnQgdGhyb3VnaCBvdXIgZGVzdGluYXRpb24gbmV0cyBsaXN0IGZv
ciB0aGlzIHNjb3BlX2lkICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMs
IHNjdHBfbmV4dCkgewotCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHIgKikoJm5ldC0+cm8uX2xfYWRk
cikpLT5zYV9mYW1pbHkgIT0KLQkJICAgIEFGX0lORVQ2KQotCQkJY29udGludWU7Ci0JCW5ldDYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCWlmIChJTjZfSVNf
QUREUl9MSU5LTE9DQUwoJm5ldDYtPnNpbjZfYWRkcikgPT0gMCkKLQkJCWNvbnRpbnVlOwotCQlp
ZiAoc2N0cF9pc19zYW1lX3Njb3BlKHNpbjYsIG5ldDYpKSB7Ci0JCQkvKiBmb3VuZCBvbmUgKi8K
LQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0JLyogZGlkbid0IGZpbmQgb25lICovCi0JcmV0dXJu
ICgwKTsKLX0KLSNlbmRpZgotCi0vKgotICogYWRkcmVzcyBtYW5hZ2VtZW50IGZ1bmN0aW9ucwot
ICovCi1zdGF0aWMgdm9pZAotc2N0cF9hZGRyX21nbXRfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkgICAgIHN0cnVjdCBzY3RwX2lmYSAqaWZh
LCB1aW50MTZfdCB0eXBlLCBpbnQgYWRkcl9sb2NrZWQpCi17Ci0JaW50IHN0YXR1czsKLQotCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDAgfHwKLQkg
ICAgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpIHsK
LQkJLyogc3Vic2V0IGJvdW5kLCBubyBBU0NPTkYgYWxsb3dlZCBjYXNlLCBzbyBpZ25vcmUgKi8K
LQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIG5vdGU6IHdlIGtub3cgdGhpcyBpcyBub3QgdGhlIHN1
YnNldCBib3VuZCwgbm8gQVNDT05GIGNhc2UgZWcuCi0JICogdGhpcyBpcyBib3VuZGFsbCBvciBz
dWJzZXQgYm91bmQgdy9BU0NPTkYgYWxsb3dlZAotCSAqLwotCi0JLyogZmlyc3QsIG1ha2Ugc3Vy
ZSB0aGF0IHRoZSBhZGRyZXNzIGlzIElQdjQgb3IgSVB2NiBhbmQgbm90IGphaWxlZCAqLwotCXN3
aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQ2Ci0JY2FzZSBB
Rl9JTkVUNjoKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAocHJpc29uX2NoZWNrX2lw
NihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICZpZmEt
PmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApIHsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlm
Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCQlpZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luLnNpbl9h
ZGRyKSAhPSAwKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQlicmVhazsKLSNlbmRpZgot
CWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0jaWZkZWYgSU5FVDYKLQkvKiBtYWtlIHN1cmUgd2Un
cmUgImFsbG93ZWQiIHRvIGFkZCB0aGlzIHR5cGUgb2YgYWRkciAqLwotCWlmIChpZmEtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCS8qIGludmFsaWQgaWYgd2UncmUgbm90
IGEgdjYgZW5kcG9pbnQgKi8KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9WNikgPT0gMCkKLQkJCXJldHVybjsKLQkJLyogaXMgdGhlIHY2IGFkZHIgcmVhbGx5
IHZhbGlkID8gKi8KLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VO
VVNFQUJMRSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogcHV0IHRoaXMgYWRk
cmVzcyBvbiB0aGUgInBlbmRpbmcvZG8gbm90IHVzZSB5ZXQiIGxpc3QgKi8KLQlzY3RwX2FkZF9s
b2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKLQkvKgotCSAqIGNoZWNrIGFkZHJlc3Mg
c2NvcGUgaWYgYWRkcmVzcyBpcyBvdXQgb2Ygc2NvcGUsIGRvbid0IHF1ZXVlCi0JICogYW55dGhp
bmcuLi4gbm90ZTogdGhpcyB3b3VsZCBsZWF2ZSB0aGUgYWRkcmVzcyBvbiBib3RoIGlucCBhbmQK
LQkgKiBhc29jIGxpc3RzCi0JICovCi0Jc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKLQotCQlzaW42ID0gJmlmYS0+YWRkcmVzcy5zaW42OwotCQlpZiAoSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCS8qIHdlIHNraXAgdW5z
cGVjaWZlZCBhZGRyZXNzZXMgKi8KLQkJCXJldHVybjsKLQkJfQotCQlpZiAoSU42X0lTX0FERFJf
TElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5s
b2NhbF9zY29wZSA9PSAwKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJLyogaXMgaXQgdGhlIHJp
Z2h0IGxpbmsgbG9jYWwgc2NvcGU/ICovCi0JCQlpZiAoc2N0cF9pc19zY29wZWlkX2luX25ldHMo
c3RjYiwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkgewotCQkJCXJldHVybjsKLQkJCX0KLQkJfQot
CQlpZiAoc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID09IDAgJiYKLQkJICAgIElONl9JU19B
RERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWJy
ZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JewotCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJc3RydWN0IGluNnBjYiAqaW5wNjsKLQotCQlpbnA2ID0g
KHN0cnVjdCBpbjZwY2IgKikmaW5wLT5pcF9pbnAuaW5wOwotCQkvKiBpbnZhbGlkIGlmIHdlIGFy
ZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgJiYKLQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpCi0JCQly
ZXR1cm47Ci0KLQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCWlmIChzaW4tPnNpbl9hZGRy
LnNfYWRkciA9PSAwKSB7Ci0JCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0J
CQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9
PSAwICYmCi0JCSAgICBJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSB7Ci0J
CQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogZWxz
ZSwgbm90IEFGX0lORVQgb3IgQUZfSU5FVDYsIHNvIHNraXAgKi8KLQkJcmV0dXJuOwotCX0KLQot
CS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyZXNzIGFkZC9kZWxldGUgKi8KLQlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgewotCQkv
KiBkb2VzIHRoZSBwZWVyIGRvIGFzY29uZj8gKi8KLQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1
cHBvcnRlZCkgewotCQkJLyogcXVldWUgYW4gYXNjb25mIGZvciB0aGlzIGFkZHIgKi8KLQkJCXN0
YXR1cyA9IHNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsIHR5cGUpOwotCi0JCQkvKgot
CQkJICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0IHRoZQot
CQkJICogQVNDT05GLiAgSWYgaW4gdGhlIG5vbi1vcGVuIHN0YXRlLCB0aGVzZSB3aWxsIGJlCi0J
CQkgKiBzZW50IHdoZW4gdGhlIHN0YXRlIGdvZXMgb3Blbi4KLQkJCSAqLwotCQkJaWYgKHN0YXR1
cyA9PSAwICYmCi0JCQkgICAgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9T
VEFURV9PUEVOKSB8fAotCQkJICAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFND
VFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSkgewotI2lmZGVmIFNDVFBfVElNRVJfQkFTRURf
QVNDT05GCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLCBpbnAs
Ci0JCQkJICAgIHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0jZWxzZQot
CQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgTlVMTCwgYWRkcl9sb2NrZWQpOwotI2VuZGlmCi0J
CQl9Ci0JCX0KLQl9Ci19Ci0KLQotaW50Ci1zY3RwX2FzY29uZl9pdGVyYXRvcl9lcChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCB2b2lkICpwdHIsIHVpbnQzMl90IHZhbCBTQ1RQX1VOVVNFRCkKLXsK
LQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKmlm
YTsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbDsKLQlpbnQgY250X2ludmFsaWQgPSAwOwotCi0JYXNj
ID0gKHN0cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciAqKXB0cjsKLQlMSVNUX0ZPUkVBQ0gobCwg
JmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyKSB7Ci0JCWlmYSA9IGwtPmlmYTsKLQkJ
c3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQkJY2Fz
ZSBBRl9JTkVUNjoKLQkJCS8qIGludmFsaWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8K
LQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDAp
IHsKLQkJCQljbnRfaW52YWxpZCsrOwotCQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkK
LQkJCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVAot
CQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCS8qIGludmFsaWQgaWYgd2UgYXJlIGEgdjYgb25seSBl
bmRwb2ludCAqLwotCQkJc3RydWN0IGluNnBjYiAqaW5wNjsKLQkJCWlucDYgPSAoc3RydWN0IGlu
NnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsK
LQkJCQljbnRfaW52YWxpZCsrOwotCQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKLQkJ
CQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoK
LQkJCS8qIGludmFsaWQgYWRkcmVzcyBmYW1pbHkgKi8KLQkJCWNudF9pbnZhbGlkKys7Ci0JCQlp
ZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCi0JCQkJcmV0dXJuICgxKTsKLQkJfQotCX0KLQly
ZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9pdGVyYXRvcl9lcF9lbmQo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVT
RUQpCi17Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJh
dG9yICphc2M7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxhZGRyLCAqbDsKLQotCS8q
IE9ubHkgZm9yIHNwZWNpZmljIGNhc2Ugbm90IGJvdW5kIGFsbCAqLwotCWFzYyA9IChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7Ci0JTElTVF9GT1JFQUNIKGwsICZhc2MtPmxpc3Rf
b2Zfd29yaywgc2N0cF9ueHRfYWRkcikgewotCQlpZmEgPSBsLT5pZmE7Ci0JCWlmIChsLT5hY3Rp
b24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5w
LT5zY3RwX2FkZHJfbGlzdCwKLQkJCQkgICAgIHNjdHBfbnh0X2FkZHIpIHsKLQkJCQlpZiAobGFk
ZHItPmlmYSA9PSBpZmEpIHsKLQkJCQkJbGFkZHItPmFjdGlvbiA9IDA7Ci0JCQkJCWJyZWFrOwot
CQkJCX0KLQotCQkJfQotCQl9IGVsc2UgaWYgKGwtPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERS
RVNTKSB7Ci0JCQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3Qs
IHNjdHBfbnh0X2FkZHIsIG5sYWRkcikgewotCQkJCS8qIHJlbW92ZSBvbmx5IGFmdGVyIGFsbCBn
dXlzIGFyZSBkb25lICovCi0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQkJCXNjdHBf
ZGVsX2xvY2FsX2FkZHJfZXAoaW5wLCBpZmEpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1
cm4gKDApOwotfQotCi12b2lkCi1zY3RwX2FzY29uZl9pdGVyYXRvcl9zdGNiKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgdm9pZCAqcHRyLCB1aW50
MzJfdCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICph
c2M7Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmw7Ci0JaW50
IGNudF9pbnZhbGlkID0gMDsKLQlpbnQgdHlwZSwgc3RhdHVzOwotCWludCBudW1fcXVldWVkID0g
MDsKLQotCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7Ci0JTElTVF9G
T1JFQUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRkcikgewotCQlpZmEgPSBs
LT5pZmE7Ci0JCXR5cGUgPSBsLT5hY3Rpb247Ci0KLQkJLyogYWRkcmVzcydzIHZyZl9pZCBtdXN0
IGJlIHRoZSB2cmZfaWQgb2YgdGhlIGFzc29jICovCi0JCWlmIChpZmEtPnZyZl9pZCAhPSBzdGNi
LT5hc29jLnZyZl9pZCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBTYW1lIGNoZWNrcyBh
Z2FpbiBmb3IgYXNzb2MgKi8KLQkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7
Ci0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJewotCQkJLyogaW52YWxpZCBpZiB3
ZSdyZSBub3QgYSB2NiBlbmRwb2ludCAqLwotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
LQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0g
MCkgewotCQkJCWNudF9pbnZhbGlkKys7Ci0JCQkJaWYgKGFzYy0+Y250ID09IGNudF9pbnZhbGlk
KQotCQkJCQlyZXR1cm47Ci0JCQkJZWxzZQotCQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXNpbjYg
PSAmaWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICov
Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCWlmIChw
cmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCSAgICAgICAgICAg
ICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0K
LSNlbmRpZgotCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkg
ewotCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlID09IDApIHsKLQkJCQkJY29u
dGludWU7Ci0JCQkJfQotCQkJCS8qIGlzIGl0IHRoZSByaWdodCBsaW5rIGxvY2FsIHNjb3BlPyAq
LwotCQkJCWlmIChzY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhzdGNiLCAmaWZhLT5hZGRyZXNzLnNh
KSA9PSAwKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJewotCQkJLyogaW52YWxpZCBp
ZiB3ZSBhcmUgYSB2NiBvbmx5IGVuZHBvaW50ICovCi0JCQlzdHJ1Y3QgaW42cGNiICppbnA2Owot
CQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCWlucDYgPSAoc3RydWN0IGluNnBjYiAq
KSZpbnAtPmlwX2lucC5pbnA7Ci0JCQkvKiBpbnZhbGlkIGlmIHdlIGFyZSBhIHY2IG9ubHkgZW5k
cG9pbnQgKi8KLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpICYmCi0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnA2KSkKLQkJCQljb250aW51ZTsKLQot
CQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIg
PT0gMCkgewotCQkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KLQkJCQljb250
aW51ZTsKLQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJaWYgKHByaXNvbl9jaGVj
a19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAg
JnNpbi0+c2luX2FkZHIpICE9IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgotCQkJ
aWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCi0JCQkgICAgSU40
X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgewotCQkJCWNvbnRpbnVlOwotCQkJ
fQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYK
LQkJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7Ci0JCQkJY250X2ludmFsaWQrKzsKLQkJ
CQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCi0JCQkJCXJldHVybjsKLQkJCQllbHNlCi0J
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlkZWZhdWx0Ogot
CQkJLyogaW52YWxpZCBhZGRyZXNzIGZhbWlseSAqLwotCQkJY250X2ludmFsaWQrKzsKLQkJCWlm
IChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKLQkJCQlyZXR1cm47Ci0JCQllbHNlCi0JCQkJY29u
dGludWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICh0eXBlID09IFNDVFBfQUREX0lQX0FERFJF
U1MpIHsKLQkJCS8qIHByZXZlbnQgdGhpcyBhZGRyZXNzIGZyb20gYmVpbmcgdXNlZCBhcyBhIHNv
dXJjZSAqLwotCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGlmYSk7Ci0J
CX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQ7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7Ci0JCQkJc2N0cF9ydGVudHJ5X3QgKnJ0OwotCi0JCQkJLyogZGVsZXRlIHRoaXMg
YWRkcmVzcyBpZiBjYWNoZWQgKi8KLQkJCQlpZiAobmV0LT5yby5fc19hZGRyID09IGlmYSkgewot
CQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJCW5ldC0+cm8uX3NfYWRk
ciA9IE5VTEw7Ci0JCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJCQlydCA9IG5l
dC0+cm8ucm9fcnQ7Ci0JCQkJCWlmIChydCkgewotCQkJCQkJUlRGUkVFKHJ0KTsKLQkJCQkJCW5l
dC0+cm8ucm9fcnQgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIE5vdyB3ZSBkZWxl
dGVkIG91ciBzcmMgYWRkcmVzcywKLQkJCQkJICogc2hvdWxkIHdlIG5vdCBhbHNvIG5vdyByZXNl
dCB0aGUKLQkJCQkJICogY3duZC9ydG8gdG8gc3RhcnQgYXMgaWYgaXRzIGEgbmV3Ci0JCQkJCSAq
IGFkZHJlc3M/Ci0JCQkJCSAqLwotCQkJCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3Nl
dF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7Ci0JCQkJCW5ldC0+UlRPID0gMDsKLQotCQkJ
CX0KLQkJCX0KLQkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBfU0VUX1BSSU1fQUREUikgewotCQkJ
aWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwp
ID09IDApIHsKLQkJCQkvKiBtdXN0IHZhbGlkYXRlIHRoZSBpZmEgaXMgaW4gdGhlIGVwICovCi0J
CQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChzdGNiLT5zY3RwX2VwLCBpZmEpID09IDApIHsKLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBOZWVkIHRvIGNoZWNrIHNj
b3BlcyBmb3IgdGhpcyBndXkgKi8KLQkJCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGlm
YSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQot
CQkJfQotCQl9Ci0JCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyZXNzIGFkZC9kZWxl
dGUgKi8KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FT
Q09ORikgJiYKLQkJICAgIHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCQkv
KiBxdWV1ZSBhbiBhc2NvbmYgZm9yIHRoaXMgYWRkciAqLwotCQkJc3RhdHVzID0gc2N0cF9hc2Nv
bmZfcXVldWVfYWRkKHN0Y2IsIGlmYSwgdHlwZSk7Ci0JCQkvKgotCQkJICogaWYgcXVldWVkIG9r
LCBhbmQgaW4gdGhlIG9wZW4gc3RhdGUsIHVwZGF0ZSB0aGUKLQkJCSAqIGNvdW50IG9mIHF1ZXVl
ZCBwYXJhbXMuICBJZiBpbiB0aGUgbm9uLW9wZW4gc3RhdGUsCi0JCQkgKiB0aGVzZSBnZXQgc2Vu
dCB3aGVuIHRoZSBhc3NvYyBnb2VzIG9wZW4uCi0JCQkgKi8KLQkJCWlmICgoU0NUUF9HRVRfU1RB
VEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCSAgICAoU0NUUF9HRVRf
U1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0J
CQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQkJCW51bV9xdWV1ZWQrKzsKLQkJCQl9Ci0JCQl9Ci0J
CX0KLQl9Ci0JLyoKLQkgKiBJZiB3ZSBoYXZlIHF1ZXVlZCBwYXJhbXMgaW4gdGhlIG9wZW4gc3Rh
dGUsIHNlbmQgb3V0IGFuIEFTQ09ORi4KLQkgKi8KLQlpZiAobnVtX3F1ZXVlZCA+IDApIHsKLQkJ
c2N0cF9zZW5kX2FzY29uZihzdGNiLCBOVUxMLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7Ci0JfQot
fQotCi12b2lkCi1zY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQodm9pZCAqcHRyLCB1aW50MzJfdCB2
YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7Ci0J
c3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmwsICpubDsKLQotCWFz
YyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7Ci0JTElTVF9GT1JFQUNIX1NB
RkUobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyLCBubCkgewotCQlpZmEgPSBs
LT5pZmE7Ci0JCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkJLyog
Q2xlYXIgdGhlIGRlZmVyIHVzZSBmbGFnICovCi0JCQlpZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5T
Q1RQX0FERFJfREVGRVJfVVNFOwotCQl9Ci0JCXNjdHBfZnJlZV9pZmEoaWZhKTsKLQkJU0NUUF9a
T05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBsKTsKLQkJU0NUUF9ERUNS
X0xBRERSX0NPVU5UKCk7Ci0JfQotCVNDVFBfRlJFRShhc2MsIFNDVFBfTV9BU0NfSVQpOwotfQot
Ci0vKgotICogc2EgaXMgdGhlIHNvY2thZGRyIHRvIGFzayB0aGUgcGVlciB0byBzZXQgcHJpbWFy
eSB0by4KLSAqIHJldHVybnM6IDAgPSBjb21wbGV0ZWQsIC0xID0gZXJyb3IKLSAqLwotaW50MzJf
dAotc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNvY2thZGRyICpzYSkKLXsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0Jc3RydWN0IHNjdHBf
aWZhICppZmE7Ci0KLQkvKiBmaW5kIHRoZSBpZmEgZm9yIHRoZSBkZXNpcmVkIHNldCBwcmltYXJ5
ICovCi0JdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7Ci0JaWZhID0gc2N0cF9maW5kX2lmYV9i
eV9hZGRyKHNhLCB2cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQlpZiAoaWZhID09IE5V
TEwpIHsKLQkJLyogSW52YWxpZCBhZGRyZXNzICovCi0JCXJldHVybiAoLTEpOwotCX0KLQotCS8q
IHF1ZXVlIGFuIEFTQ09ORjpTRVRfUFJJTV9BRERSIHRvIGJlIHNlbnQgKi8KLQlpZiAoIXNjdHBf
YXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUikpIHsKLQkJLyog
c2V0IHByaW1hcnkgcXVldWluZyBzdWNjZWVkZWQgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsCi0JCQkic2V0X3ByaW1hcnlfaXBfYWRkcmVzc19zYTogcXVldWVkIG9uIHRjYj0lcCwg
IiwKLQkJCSh2b2lkICopc3RjYik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEs
IHNhKTsKLQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9P
UEVOKSB8fAotCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRF
X1NIVVRET1dOX1JFQ0VJVkVEKSkgewotI2lmZGVmIFNDVFBfVElNRVJfQkFTRURfQVNDT05GCi0J
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsCi0JCQkJCSBzdGNiLT5z
Y3RwX2VwLCBzdGNiLAotCQkJCQkgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLSNl
bHNlCi0JCQlzY3RwX3NlbmRfYXNjb25mKHN0Y2IsIE5VTEwsIFNDVFBfQUREUl9OT1RfTE9DS0VE
KTsKLSNlbmRpZgotCQl9Ci0JfSBlbHNlIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
ICJzZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhOiBmYWlsZWQgdG8gYWRkIHRvIHF1ZXVlIG9uIHRj
Yj0lcCwgIiwKLQkJCSh2b2lkICopc3RjYik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FT
Q09ORjEsIHNhKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLXZvaWQK
LXNjdHBfc2V0X3ByaW1hcnlfaXBfYWRkcmVzcyhzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JLyogZ28gdGhyb3VnaCBhbGwgb3VyIFBDQidzICov
Ci0JTElTVF9GT1JFQUNIKGlucCwgJlNDVFBfQkFTRV9JTkZPKGxpc3RoZWFkKSwgc2N0cF9saXN0
KSB7Ci0JCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQotCQkvKiBwcm9jZXNzIGZvciBhbGwgYXNz
b2NpYXRpb25zIGZvciB0aGlzIGVuZHBvaW50ICovCi0JCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5w
LT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkvKiBxdWV1ZSBhbiBBU0NPTkY6
U0VUX1BSSU1fQUREUiB0byBiZSBzZW50ICovCi0JCQlpZiAoIXNjdHBfYXNjb25mX3F1ZXVlX2Fk
ZChzdGNiLCBpZmEsCi0JCQkJCQkgICBTQ1RQX1NFVF9QUklNX0FERFIpKSB7Ci0JCQkJLyogc2V0
IHByaW1hcnkgcXVldWluZyBzdWNjZWVkZWQgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgInNldF9wcmltYXJ5X2lwX2FkZHJlc3M6IHF1ZXVlZCBvbiBzdGNiPSVwLCAiLAotCQkJ
CQkodm9pZCAqKXN0Y2IpOwotCQkJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsICZp
ZmEtPmFkZHJlc3Muc2EpOwotCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09
IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29j
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgewotI2lmZGVmIFNDVFBfVElNRVJf
QkFTRURfQVNDT05GCi0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09O
RiwKLQkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCQkgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uKTsKLSNlbHNlCi0JCQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgTlVM
TCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOwotI2VuZGlmCi0JCQkJfQotCQkJfQotCQl9IC8qIGZv
ciBlYWNoIHN0Y2IgKi8KLQl9IC8qIGZvciBlYWNoIGlucCAqLwotfQotCi1pbnQKLXNjdHBfaXNf
YWRkcl9wZW5kaW5nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICpzY3Rw
X2lmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOwotCXVuc2lnbmVk
IGludCBvZmZzZXQsIGFzY29uZl9saW1pdDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKmFj
cDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKLQl1aW50OF90IGFwYXJhbV9i
dWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOwot
CWludCBhZGRfY250LCBkZWxfY250OwotCXVpbnQxNl90IGxhc3RfcGFyYW1fdHlwZTsKLQotCWFk
ZF9jbnQgPSBkZWxfY250ID0gMDsKLQlsYXN0X3BhcmFtX3R5cGUgPSAwOwotCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5j
aGspIHsKLQkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgImlzX2FkZHJfcGVuZGluZzogTm8gbWJ1ZiBkYXRhP1xuIik7Ci0JCQljb250aW51
ZTsKLQkJfQotCQlvZmZzZXQgPSAwOwotCQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNj
dHBfYXNjb25mX2NodW5rICopOwotCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29u
Zl9jaHVuayk7Ci0JCWFzY29uZl9saW1pdCA9IG50b2hzKGFjcC0+Y2guY2h1bmtfbGVuZ3RoKTsK
LQkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKGNoay0+ZGF0YSwg
b2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCBhcGFyYW1fYnVmKTsKLQkJaWYg
KHBoID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9w
ZW5kaW5nOiBjb3VsZG4ndCBnZXQgbG9va3VwIGFkZHIhXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCW9mZnNldCArPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKLQotCQlhcGggPSAoc3RydWN0
IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihjaGstPmRhdGEsIG9mZnNldCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksIGFwYXJhbV9idWYpOwotCQlpZiAo
YXBoID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9w
ZW5kaW5nOiBFbXB0eSBBU0NPTkYgd2lsbCBiZSBzZW50P1xuIik7Ci0JCQljb250aW51ZTsKLQkJ
fQotCQl3aGlsZSAoYXBoICE9IE5VTEwpIHsKLQkJCXVuc2lnbmVkIGludCBwYXJhbV9sZW5ndGgs
IHBhcmFtX3R5cGU7Ci0KLQkJCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUp
OwotCQkJcGFyYW1fbGVuZ3RoID0gbnRvaHMoYXBoLT5waC5wYXJhbV9sZW5ndGgpOwotCQkJaWYg
KG9mZnNldCArIHBhcmFtX2xlbmd0aCA+IGFzY29uZl9saW1pdCkgewotCQkJCS8qIHBhcmFtZXRl
ciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAo
cGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IHBhcmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0
aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CWlmIChwYXJhbV9sZW5ndGggPD0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgewotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBwYXJhbSBsZW5n
dGgoJXUpIHRvbyBzaG9ydFxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCQlicmVhazsKLQkJCX0KLQot
CQkJYXBoID0gKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIoY2hr
LT5kYXRhLCBvZmZzZXQsIHBhcmFtX2xlbmd0aCwgYXBhcmFtX2J1Zik7Ci0JCQlpZiAoYXBoID09
IE5VTEwpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImlzX2FkZHJfcGVuZGlu
ZzogY291bGRuJ3QgZ2V0IGVudGlyZSBwYXJhbVxuIik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJ
CXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKGFwaCArIDEpOwotCQkJaWYgKHNjdHBfYWRk
cl9tYXRjaChwaCwgJnNjdHBfaWZhLT5hZGRyZXNzLnNhKSAhPSAwKSB7Ci0JCQkJc3dpdGNoIChw
YXJhbV90eXBlKSB7Ci0JCQkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgotCQkJCQlhZGRfY250
Kys7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKLQkJCQkJZGVs
X2NudCsrOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0J
CQkJbGFzdF9wYXJhbV90eXBlID0gcGFyYW1fdHlwZTsKLQkJCX0KLQotCQkJb2Zmc2V0ICs9IFND
VFBfU0laRTMyKHBhcmFtX2xlbmd0aCk7Ci0JCQlpZiAob2Zmc2V0ID49IGFzY29uZl9saW1pdCkg
ewotCQkJCS8qIG5vIG1vcmUgZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAqLwotCQkJCWJyZWFrOwot
CQkJfQotCQkJLyogZ2V0IHBvaW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFyYW0gKi8KLQkJCWFwaCA9
IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKGNoay0+ZGF0YSwg
b2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7
Ci0JCX0KLQl9Ci0KLQkvKiB3ZSB3YW50IHRvIGZpbmQgdGhlIHNlcXVlbmNlcyB3aGljaCBjb25z
aXN0IG9mIEFERCAtPiBERUwgLT4gQUREIG9yIERFTCAtPiBBREQgKi8KLQlpZiAoYWRkX2NudCA+
IGRlbF9jbnQgfHwKLQkgICAgKGFkZF9jbnQgPT0gZGVsX2NudCAmJiBsYXN0X3BhcmFtX3R5cGUg
PT0gU0NUUF9BRERfSVBfQUREUkVTUykpIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JcmV0dXJuICgw
KTsKLX0KLQotc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCi1zY3RwX2ZpbmRfdmFsaWRfbG9jYWxh
ZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFkZHJfbG9ja2VkKQotewotCXN0cnVjdCBz
Y3RwX3ZyZiAqdnJmID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwotCXN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLQlpZiAoYWRkcl9sb2NrZWQgPT0gU0NUUF9BRERSX05P
VF9MT0NLRUQpCi0JCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLQl2cmYgPSBzY3RwX2ZpbmRfdnJm
KHN0Y2ItPmFzb2MudnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJaWYgKGFkZHJfbG9j
a2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQotCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZu
bGlzdCwgbmV4dF9pZm4pIHsKLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUg
PT0gMCAmJgotCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7Ci0JCQkvKiBT
a2lwIGlmIGxvb3BiYWNrX3Njb3BlIG5vdCBzZXQgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUxJ
U1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotCQkJ
c3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
CQljYXNlIEFGX0lORVQ6Ci0JCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2Fs
KSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCQkJCXNpbiA9ICZzY3RwX2lm
YS0+YWRkcmVzcy5zaW47Ci0JCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7Ci0J
CQkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCQljb250aW51ZTsKLQkJ
CQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0
KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCSAgICAgICAgICAgICAg
ICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQot
I2VuZGlmCi0JCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCAm
JgotCQkJCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkKLQkJCQkJ
CWNvbnRpbnVlOwotCi0JCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzY3Rw
X2lmYSkgJiYKLQkJCQkJICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2N0cF9pZmEp
KSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQkvKiBmb3VuZCBhIHZhbGlkIGxvY2FsIHY0IGFkZHJl
c3MgdG8gdXNlICovCi0JCQkJCWlmIChhZGRyX2xvY2tlZCA9PSBTQ1RQX0FERFJfTk9UX0xPQ0tF
RCkKLQkJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOwotCQkJCQlyZXR1cm4gKCZzY3RwX2lm
YS0+YWRkcmVzcy5zYSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xl
Z2FsKSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCQkJaWYgKHNjdHBf
aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7Ci0JCQkJCQlj
b250aW51ZTsKLQkJCQkJfQotCi0JCQkJCXNpbjYgPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNjsK
LQkJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0J
CQkJCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCQljb250aW51ZTsK
LQkJCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCWlmIChwcmlzb25fY2hlY2tf
aXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCSAgICAgICAgICAg
ICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJ
CQl9Ci0jZW5kaWYKLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGUgPT0gMCAm
JgotCQkJCQkgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQotCQkJ
CQkJY29udGludWU7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPT0gMCAm
JgotCQkJCQkgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQotCQkJ
CQkJY29udGludWU7Ci0KLQkJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNj
dHBfaWZhKSAmJgotCQkJCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzY3RwX2lm
YSkpKQotCQkJCQkJY29udGludWU7Ci0JCQkJCS8qIGZvdW5kIGEgdmFsaWQgbG9jYWwgdjYgYWRk
cmVzcyB0byB1c2UgKi8KLQkJCQkJaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9D
S0VEKQotCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJCXJldHVybiAoJnNjdHBf
aWZhLT5hZGRyZXNzLnNhKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogbm8gdmFsaWQgYWRkcmVzc2VzIGZvdW5k
ICovCi0JaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQotCQlTQ1RQX0lQ
SV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgc3RydWN0IHNv
Y2thZGRyICoKLXNjdHBfZmluZF92YWxpZF9sb2NhbGFkZHJfZXAoc3RydWN0IHNjdHBfdGNiICpz
dGNiKQotewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCUxJU1RfRk9SRUFDSChsYWRk
ciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCWlm
IChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGlzIHRoZSBh
ZGRyZXNzIHJlc3RyaWN0ZWQgPyAqLwotCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3Rj
YiwgbGFkZHItPmlmYSkgJiYKLQkJICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgbGFk
ZHItPmlmYSkpKQotCQkJY29udGludWU7Ci0KLQkJLyogZm91bmQgYSB2YWxpZCBsb2NhbCBhZGRy
ZXNzIHRvIHVzZSAqLwotCQlyZXR1cm4gKCZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKTsKLQl9Ci0J
Lyogbm8gdmFsaWQgYWRkcmVzc2VzIGZvdW5kICovCi0JcmV0dXJuIChOVUxMKTsKLX0KLQotLyoK
LSAqIGJ1aWxkcyBhbiBBU0NPTkYgY2h1bmsgZnJvbSBxdWV1ZWQgQVNDT05GIHBhcmFtcy4KLSAq
IHJldHVybnMgTlVMTCBvbiBlcnJvciAobm8gbWJ1Ziwgbm8gQVNDT05GIHBhcmFtcyBxdWV1ZWQs
IGV0YykuCi0gKi8KLXN0cnVjdCBtYnVmICoKLXNjdHBfY29tcG9zZV9hc2NvbmYoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBpbnQgKnJldGxlbiwgaW50IGFkZHJfbG9ja2VkKQotewotCXN0cnVjdCBt
YnVmICptX2FzY29uZiwgKm1fYXNjb25mX2NoazsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAq
YWE7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICphY3A7Ci0Jc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyICphcGg7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0gKmFhcDsKLQl1
aW50MzJfdCBwX2xlbmd0aDsKLQl1aW50MzJfdCBjb3JyZWxhdGlvbl9pZCA9IDE7CS8qIDAgaXMg
cmVzZXJ2ZWQuLi4gKi8KLQljYWRkcl90IHB0ciwgbG9va3VwX3B0cjsKLQl1aW50OF90IGxvb2t1
cF91c2VkID0gMDsKLQotCS8qIGFyZSB0aGVyZSBhbnkgYXNjb25mIHBhcmFtcyB0byBzZW5kPyAq
LwotCVRBSUxRX0ZPUkVBQ0goYWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCkgewot
CQlpZiAoYWEtPnNlbnQgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAoYWEgPT0gTlVMTCkKLQkJ
cmV0dXJuIChOVUxMKTsKLQotCS8qCi0JICogZ2V0IGEgY2h1bmsgaGVhZGVyIG1idWYgYW5kIGEg
Y2x1c3RlciBmb3IgdGhlIGFzY29uZiBwYXJhbXMgc2luY2UKLQkgKiBpdCdzIHNpbXBsZXIgdG8g
ZmlsbCBpbiB0aGUgYXNjb25mIGNodW5rIGhlYWRlciBsb29rdXAgYWRkcmVzcyBvbgotCSAqIHRo
ZSBmbHkKLQkgKi8KLQltX2FzY29uZl9jaGsgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlp
ZiAobV9hc2NvbmZfY2hrID09IE5VTEwpIHsKLQkJLyogbm8gbWJ1ZidzICovCi0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImNvbXBvc2VfYXNjb25mOiBjb3VsZG4ndCBnZXQgY2h1
bmsgbWJ1ZiFcbiIpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQltX2FzY29uZiA9IHNjdHBfZ2V0
X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmICht
X2FzY29uZiA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1idWYncyAqLwotCQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMSwKLQkJCSJjb21wb3NlX2FzY29uZjogY291bGRuJ3QgZ2V0IG1idWYhXG4iKTsK
LQkJc2N0cF9tX2ZyZWVtKG1fYXNjb25mX2Noayk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCVND
VFBfQlVGX0xFTihtX2FzY29uZl9jaGspID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVu
ayk7Ci0JU0NUUF9CVUZfTEVOKG1fYXNjb25mKSA9IDA7Ci0JYWNwID0gbXRvZChtX2FzY29uZl9j
aGssIHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqKTsKLQltZW1zZXQoYWNwLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSk7Ci0JLyogc2F2ZSBwb2ludGVycyB0byBsb29rdXAg
YWRkcmVzcyBhbmQgYXNjb25mIHBhcmFtcyAqLwotCWxvb2t1cF9wdHIgPSAoY2FkZHJfdCkoYWNw
ICsgMSk7CS8qIGFmdGVyIHRoZSBoZWFkZXIgKi8KLQlwdHIgPSBtdG9kKG1fYXNjb25mLCBjYWRk
cl90KTsJLyogYmVnaW5uaW5nIG9mIGNsdXN0ZXIgKi8KLQotCS8qIGZpbGwgaW4gY2h1bmsgaGVh
ZGVyIGluZm8gKi8KLQlhY3AtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0FTQ09ORjsKLQlhY3AtPmNo
LmNodW5rX2ZsYWdzID0gMDsKLQlhY3AtPnNlcmlhbF9udW1iZXIgPSBodG9ubChzdGNiLT5hc29j
LmFzY29uZl9zZXFfb3V0KTsKLQlzdGNiLT5hc29jLmFzY29uZl9zZXFfb3V0Kys7Ci0KLQkvKiBh
ZGQgcGFyYW1ldGVycy4uLiB1cCB0byBzbWFsbGVzdCBNVFUgYWxsb3dlZCAqLwotCVRBSUxRX0ZP
UkVBQ0goYWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCkgewotCQlpZiAoYWEtPnNl
bnQpCi0JCQljb250aW51ZTsKLQkJLyogZ2V0IHRoZSBwYXJhbWV0ZXIgbGVuZ3RoICovCi0JCXBf
bGVuZ3RoID0gU0NUUF9TSVpFMzIoYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGgpOwotCQkvKiB3
aWxsIGl0IGZpdCBpbiBjdXJyZW50IGNodW5rPyAqLwotCQlpZiAoKFNDVFBfQlVGX0xFTihtX2Fz
Y29uZikgKyBwX2xlbmd0aCA+IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1KSB8fAotCQkgICAgKFND
VFBfQlVGX0xFTihtX2FzY29uZikgKyBwX2xlbmd0aCA+IE1DTEJZVEVTKSkgewotCQkJLyogd29u
J3QgZml0LCBzbyB3ZSdyZSBkb25lIHdpdGggdGhpcyBjaHVuayAqLwotCQkJYnJlYWs7Ci0JCX0K
LQkJLyogYXNzaWduIChhbmQgc3RvcmUpIGEgY29ycmVsYXRpb24gaWQgKi8KLQkJYWEtPmFwLmFw
aC5jb3JyZWxhdGlvbl9pZCA9IGNvcnJlbGF0aW9uX2lkKys7Ci0KLQkJLyoKLQkJICogZmlsbCBp
biBhZGRyZXNzIGlmIHdlJ3JlIGRvaW5nIGEgZGVsZXRlIHRoaXMgaXMgYSBzaW1wbGUKLQkJICog
d2F5IGZvciB1cyB0byBmaWxsIGluIHRoZSBjb3JyZWxhdGlvbiBhZGRyZXNzLCB3aGljaAotCQkg
KiBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSBwZWVyIGlmIHdlJ3JlIGRlbGV0aW5nIG91cgot
CQkgKiBzb3VyY2UgYWRkcmVzcyBhbmQgYWRkaW5nIGEgbmV3IGFkZHJlc3MgKGUuZy4gcmVudW1i
ZXJpbmcKLQkJICogY2FzZSkKLQkJICovCi0JCWlmIChsb29rdXBfdXNlZCA9PSAwICYmCi0JCSAg
ICAoYWEtPnNwZWNpYWxfZGVsID09IDApICYmCi0JCSAgICBhYS0+YXAuYXBoLnBoLnBhcmFtX3R5
cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgewotCQkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0gKmxvb2t1cDsKLQkJCXVpbnQxNl90IHBfc2l6ZSwgYWRkcl9zaXplOwotCi0JCQlsb29rdXAg
PSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilsb29rdXBfcHRyOwotCQkJbG9va3VwLT5w
aC5wYXJhbV90eXBlID0KLQkJCSAgICBodG9ucyhhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSk7
Ci0JCQlpZiAoYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9JUFY2X0FERFJFU1Mp
IHsKLQkJCQkvKiBjb3B5IElQdjYgYWRkcmVzcyAqLwotCQkJCXBfc2l6ZSA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBp
bjZfYWRkcik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGNvcHkgSVB2NCBhZGRyZXNzICovCi0JCQkJ
cF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKLQkJCQlhZGRyX3Np
emUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwotCQkJfQotCQkJbG9va3VwLT5waC5wYXJhbV9s
ZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihwX3NpemUpKTsKLQkJCW1lbWNweShsb29rdXAtPmFk
ZHIsICZhYS0+YXAuYWRkcnAuYWRkciwgYWRkcl9zaXplKTsKLQkJCVNDVFBfQlVGX0xFTihtX2Fz
Y29uZl9jaGspICs9IFNDVFBfU0laRTMyKHBfc2l6ZSk7Ci0JCQlsb29rdXBfdXNlZCA9IDE7Ci0J
CX0KLQkJLyogY29weSBpbnRvIGN1cnJlbnQgc3BhY2UgKi8KLQkJbWVtY3B5KHB0ciwgJmFhLT5h
cCwgcF9sZW5ndGgpOwotCi0JCS8qIG5ldHdvcmsgZWxlbWVudHMgYW5kIHVwZGF0ZSBsZW5ndGhz
ICovCi0JCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilwdHI7Ci0JCWFhcCA9
IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSAqKXB0cjsKLQkJLyogY29ycmVsYXRpb25f
aWQgaXMgdHJhbnNwYXJlbnQgdG8gcGVlciwgbm8gaHRvbmwgbmVlZGVkICovCi0JCWFwaC0+cGgu
cGFyYW1fdHlwZSA9IGh0b25zKGFwaC0+cGgucGFyYW1fdHlwZSk7Ci0JCWFwaC0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMoYXBoLT5waC5wYXJhbV9sZW5ndGgpOwotCQlhYXAtPmFkZHJwLnBoLnBh
cmFtX3R5cGUgPSBodG9ucyhhYXAtPmFkZHJwLnBoLnBhcmFtX3R5cGUpOwotCQlhYXAtPmFkZHJw
LnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFhcC0+YWRkcnAucGgucGFyYW1fbGVuZ3RoKTsKLQot
CQlTQ1RQX0JVRl9MRU4obV9hc2NvbmYpICs9IFNDVFBfU0laRTMyKHBfbGVuZ3RoKTsKLQkJcHRy
ICs9IFNDVFBfU0laRTMyKHBfbGVuZ3RoKTsKLQotCQkvKgotCQkgKiB0aGVzZSBwYXJhbXMgYXJl
IHJlbW92ZWQgb2ZmIHRoZSBwZW5kaW5nIGxpc3QgdXBvbgotCQkgKiBnZXR0aW5nIGFuIEFTQ09O
Ri1BQ0sgYmFjayBmcm9tIHRoZSBwZWVyLCBqdXN0IHNldCBmbGFnCi0JCSAqLwotCQlhYS0+c2Vu
dCA9IDE7Ci0JfQotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgbG9va3VwIGFkZHIgaGFzIGJlZW4g
cG9wdWxhdGVkIHlldCAqLwotCWlmIChsb29rdXBfdXNlZCA9PSAwKSB7Ci0JCS8qIE5PVEU6IGlm
IHRoZSBhZGRyZXNzIHBhcmFtIGlzIG9wdGlvbmFsLCBjYW4gc2tpcCB0aGlzLi4uICovCi0JCS8q
IGFkZCBhbnkgdmFsaWQgKGV4aXN0aW5nKSBhZGRyZXNzLi4uICovCi0JCXN0cnVjdCBzY3RwX2lw
djZhZGRyX3BhcmFtICpsb29rdXA7Ci0JCXVpbnQxNl90IHBfc2l6ZSwgYWRkcl9zaXplOwotCQlz
dHJ1Y3Qgc29ja2FkZHIgKmZvdW5kX2FkZHI7Ci0JCWNhZGRyX3QgYWRkcl9wdHI7Ci0KLQkJaWYg
KHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkKLQkJ
CWZvdW5kX2FkZHIgPSBzY3RwX2ZpbmRfdmFsaWRfbG9jYWxhZGRyKHN0Y2IsCi0JCQkJCQkJICAg
ICAgIGFkZHJfbG9ja2VkKTsKLQkJZWxzZQotCQkJZm91bmRfYWRkciA9IHNjdHBfZmluZF92YWxp
ZF9sb2NhbGFkZHJfZXAoc3RjYik7Ci0KLQkJbG9va3VwID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtICopbG9va3VwX3B0cjsKLQkJaWYgKGZvdW5kX2FkZHIgIT0gTlVMTCkgewotCQkJc3dp
dGNoIChmb3VuZF9hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9J
TkVUNjoKLQkJCQkvKiBjb3B5IElQdjYgYWRkcmVzcyAqLwotCQkJCWxvb2t1cC0+cGgucGFyYW1f
dHlwZSA9Ci0JCQkJICAgIGh0b25zKFNDVFBfSVBWNl9BRERSRVNTKTsKLQkJCQlwX3NpemUgPSBz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pOwotCQkJCWFkZHJfc2l6ZSA9IHNpemVv
ZihzdHJ1Y3QgaW42X2FkZHIpOwotCQkJCWFkZHJfcHRyID0gKGNhZGRyX3QpJigoc3RydWN0IHNv
Y2thZGRyX2luNiAqKQotCQkJCSAgICBmb3VuZF9hZGRyKS0+c2luNl9hZGRyOwotCQkJCWJyZWFr
OwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCS8qIGNvcHkgSVB2
NCBhZGRyZXNzICovCi0JCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0KLQkJCQkgICAgaHRvbnMo
U0NUUF9JUFY0X0FERFJFU1MpOwotCQkJCXBfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSk7Ci0JCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKLQkJ
CQlhZGRyX3B0ciA9IChjYWRkcl90KSYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQotCQkJCSAgICBm
b3VuZF9hZGRyKS0+c2luX2FkZHI7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0J
CQkJcF9zaXplID0gMDsKLQkJCQlhZGRyX3NpemUgPSAwOwotCQkJCWFkZHJfcHRyID0gTlVMTDsK
LQkJCQlicmVhazsKLQkJCX0KLQkJCWxvb2t1cC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMoU0NU
UF9TSVpFMzIocF9zaXplKSk7Ci0JCQltZW1jcHkobG9va3VwLT5hZGRyLCBhZGRyX3B0ciwgYWRk
cl9zaXplKTsKLQkJCVNDVFBfQlVGX0xFTihtX2FzY29uZl9jaGspICs9IFNDVFBfU0laRTMyKHBf
c2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB1aCBvaC4uLiBkb24ndCBoYXZlIGFueSBhZGRyZXNz
Pz8gKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJCSJjb21wb3NlX2FzY29u
Zjogbm8gbG9va3VwIGFkZHIhXG4iKTsKLQkJCS8qIFhYWCBmb3Igbm93LCB3ZSBzZW5kIGEgSVB2
NCBhZGRyZXNzIG9mIDAuMC4wLjAgKi8KLQkJCWxvb2t1cC0+cGgucGFyYW1fdHlwZSA9IGh0b25z
KFNDVFBfSVBWNF9BRERSRVNTKTsKLQkJCWxvb2t1cC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMo
U0NUUF9TSVpFMzIoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkpOwotCQkJbWVt
c2V0KGxvb2t1cC0+YWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCQlTQ1RQX0JV
Rl9MRU4obV9hc2NvbmZfY2hrKSArPSBTQ1RQX1NJWkUzMihzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NGFkZHJfcGFyYW0pKTsKLQkJfQotCX0KLQkvKiBjaGFpbiBpdCBhbGwgdG9nZXRoZXIgKi8KLQlT
Q1RQX0JVRl9ORVhUKG1fYXNjb25mX2NoaykgPSBtX2FzY29uZjsKLQkqcmV0bGVuID0gU0NUUF9C
VUZfTEVOKG1fYXNjb25mX2NoaykgKyBTQ1RQX0JVRl9MRU4obV9hc2NvbmYpOwotCWFjcC0+Y2gu
Y2h1bmtfbGVuZ3RoID0gaHRvbnMoKnJldGxlbik7Ci0KLQlyZXR1cm4gKG1fYXNjb25mX2Noayk7
Ci19Ci0KLS8qCi0gKiBzZWN0aW9uIHRvIGhhbmRsZSBhZGRyZXNzIGNoYW5nZXMgYmVmb3JlIGFu
IGFzc29jaWF0aW9uIGlzIHVwIGVnLiBjaGFuZ2VzCi0gKiBkdXJpbmcgSU5JVC9JTklULUFDSy9D
T09LSUUtRUNITyBoYW5kc2hha2UKLSAqLwotCi0vKgotICogcHJvY2Vzc2VzIHRoZSAobG9jYWwp
IGFkZHJlc3NlcyBpbiB0aGUgSU5JVC1BQ0sgY2h1bmsKLSAqLwotc3RhdGljIHZvaWQKLXNjdHBf
cHJvY2Vzc19pbml0YWNrX2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBt
YnVmICptLAotICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVkIGludCBsZW5ndGgpCi17
Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgdG1wX3BhcmFtLCAqcGg7Ci0JdWludDE2X3QgcGxlbiwg
cHR5cGU7Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQl1bmlvbiBzY3RwX3NvY2tzdG9y
ZSBzdG9yZTsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI2
X3N0b3JlOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFt
IGFkZHI0X3N0b3JlOwotI2VuZGlmCi0KLQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgInBy
b2Nlc3NpbmcgaW5pdC1hY2sgYWRkcmVzc2VzXG4iKTsKLQlpZiAoc3RjYiA9PSBOVUxMKSAvKiBV
bi1uZWVkZWQgY2hlY2sgZm9yIFNBICovCi0JCXJldHVybjsKLQotCS8qIGNvbnZlcnQgdG8gdXBw
ZXIgYm91bmQgKi8KLQlsZW5ndGggKz0gb2Zmc2V0OwotCi0JaWYgKChvZmZzZXQgKyBzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpKSA+IGxlbmd0aCkgewotCQlyZXR1cm47Ci0JfQotCS8qIGdv
IHRocm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sgKi8KLQlwaCA9IChzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciAqKQotCSAgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciksCi0JICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopJnRt
cF9wYXJhbSk7Ci0Jd2hpbGUgKHBoICE9IE5VTEwpIHsKLQkJcHR5cGUgPSBudG9ocyhwaC0+cGFy
YW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKLQkJc3dpdGNoIChw
dHlwZSkgewotI2lmZGVmIElORVQ2Ci0JCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6Ci0JCXsKLQkJ
CXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICphNnA7Ci0KLQkJCS8qIGdldCB0aGUgZW50aXJl
IElQdjYgYWRkcmVzcyBwYXJhbSAqLwotCQkJYTZwID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3Bh
cmFtICopCi0JCQkgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCi0JCQkgICAgc2l6ZW9mKHN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKLQkJCSAgICAodWludDhfdCAqKSZhZGRyNl9zdG9y
ZSk7Ci0JCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pIHx8
Ci0JCQkgICAgYTZwID09IE5VTEwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQltZW1zZXQoJnN0
b3JlLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKLQkJCXN0b3JlLnNpbjYuc2lu
Nl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JCQlzdG9yZS5zaW42
LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCQlzdG9y
ZS5zaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJbWVtY3B5KCZzdG9yZS5zaW42LnNp
bjZfYWRkciwgYTZwLT5hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlicmVhazsK
LQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQljYXNlIFNDVFBfSVBWNF9BRERSRVNTOgotCQl7
Ci0JCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqYTRwOwotCi0JCQkvKiBnZXQgdGhlIGVu
dGlyZSBJUHY0IGFkZHJlc3MgcGFyYW0gKi8KLQkJCWE0cCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJCQkJICBzaXplb2Yoc3Ry
dWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pLAotCQkJCQkJCQkJICAodWludDhfdCAqKSZhZGRyNF9z
dG9yZSk7Ci0JCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0p
IHx8Ci0JCQkgICAgYTRwID09IE5VTEwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQltZW1zZXQo
JnN0b3JlLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKLQkJCXN0b3JlLnNpbi5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCXN0b3JlLnNpbi5z
aW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCXN0b3JlLnNp
bi5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJc3RvcmUuc2luLnNpbl9hZGRyLnNfYWRkciA9
IGE0cC0+YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCWdvdG8g
bmV4dF9hZGRyOwotCQl9Ci0KLQkJLyogc2VlIGlmIHRoaXMgYWRkcmVzcyByZWFsbHkgKHN0aWxs
KSBleGlzdHMgKi8KLQkJc2N0cF9pZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoJnN0b3JlLnNh
LCBzdGNiLT5hc29jLnZyZl9pZCwKLQkJCQkJCSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7Ci0JCWlm
IChzY3RwX2lmYSA9PSBOVUxMKSB7Ci0JCQkvKiBhZGRyZXNzIGRvZXNuJ3QgZXhpc3QgYW55bW9y
ZSAqLwotCQkJaW50IHN0YXR1czsKLQotCQkJLyogYXJlIEFTQ09ORnMgYWxsb3dlZCA/ICovCi0J
CQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkJICAgIFNDVFBfUENC
X0ZMQUdTX0RPX0FTQ09ORikpICYmCi0JCQkgICAgc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVk
KSB7Ci0JCQkJLyogcXVldWUgYW4gQVNDT05GIERFTF9JUF9BRERSRVNTICovCi0JCQkJc3RhdHVz
ID0gc2N0cF9hc2NvbmZfcXVldWVfc2FfZGVsZXRlKHN0Y2IsICZzdG9yZS5zYSk7Ci0JCQkJLyoK
LQkJCQkgKiBpZiBxdWV1ZWQgb2ssIGFuZCBpbiBjb3JyZWN0IHN0YXRlLCBzZW5kCi0JCQkJICog
b3V0IHRoZSBBU0NPTkYuCi0JCQkJICovCi0JCQkJaWYgKHN0YXR1cyA9PSAwICYmCi0JCQkJICAg
IFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PQotCQkJCSAgICBTQ1RQX1NUQVRFX09QRU4p
IHsKLSNpZmRlZiBTQ1RQX1RJTUVSX0JBU0VEX0FTQ09ORgotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsCi0JCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0J
CQkJCQkJIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0jZWxzZQotCQkJCQlzY3Rw
X3NlbmRfYXNjb25mKHN0Y2IsIE5VTEwsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLSNlbmRpZgot
CQkJCX0KLQkJCX0KLQkJfQotCi1uZXh0X2FkZHI6Ci0JCS8qCi0JCSAqIFNhbml0eSBjaGVjazog
IE1ha2Ugc3VyZSB0aGUgbGVuZ3RoIGlzbid0IDAsIG90aGVyd2lzZQotCQkgKiB3ZSdsbCBiZSBz
dHVjayBpbiB0aGlzIGxvb3AgZm9yIGEgbG9uZyB0aW1lLi4uCi0JCSAqLwotCQlpZiAoU0NUUF9T
SVpFMzIocGxlbikgPT0gMCkgewotCQkJU0NUUF9QUklOVEYoInByb2Nlc3NfaW5pdGFja19hZGRy
czogYmFkIGxlbiAoJWQpIHR5cGU9JXhoXG4iLAotCQkJCSAgICBwbGVuLCBwdHlwZSk7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJLyogZ2V0IG5leHQgcGFyYW1ldGVyICovCi0JCW9mZnNldCArPSBTQ1RQ
X1NJWkUzMihwbGVuKTsKLQkJaWYgKChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1o
ZHIpKSA+IGxlbmd0aCkKLQkJCXJldHVybjsKLQkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciksICh1aW50OF90ICopJnRtcF9wYXJhbSk7Ci0JfSAvKiB3aGlsZSAqLwotfQotCi0vKiBG
SVggTUU6IG5lZWQgdG8gdmVyaWZ5IHJldHVybiByZXN1bHQgZm9yIHY2IGFkZHJlc3MgdHlwZSBp
ZiB2NiBkaXNhYmxlZCAqLwotLyoKLSAqIGNoZWNrcyB0byBzZWUgaWYgYSBzcGVjaWZpYyBhZGRy
ZXNzIGlzIGluIHRoZSBpbml0YWNrIGFkZHJlc3MgbGlzdCByZXR1cm5zCi0gKiAxIGlmIGZvdW5k
LCAwIGlmIG5vdAotICovCi1zdGF0aWMgdWludDMyX3QKLXNjdHBfYWRkcl9pbl9pbml0YWNrKHN0
cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxlbmd0aCwgc3RydWN0IHNv
Y2thZGRyICpzYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB0bXBfcGFyYW0sICpwaDsKLQl1
aW50MTZfdCBwbGVuLCBwdHlwZTsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpz
aW47Ci0Jc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKmE0cDsKLQlzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSBhZGRyNF9zdG9yZTsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNv
Y2thZGRyX2luNiAqc2luNjsKLQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqYTZwOwotCXN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI2X3N0b3JlOwotI2lmZGVmIFNDVFBfRU1CRURE
RURfVjZfU0NPUEUKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjZfdG1wOwotI2VuZGlmCi0jZW5k
aWYKLQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lO
RVQ6Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQli
cmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjIsICJmaW5kX2luaXRhY2tfYWRkcjogc3RhcnRpbmcgc2VhcmNoIGZv
ciAiKTsKLQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYyLCBzYSk7Ci0JLyogY29udmVy
dCB0byB1cHBlciBib3VuZCAqLwotCWxlbmd0aCArPSBvZmZzZXQ7Ci0KLQlpZiAoKG9mZnNldCAr
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVuZ3RoKSB7Ci0JCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLAotCQkJImZpbmRfaW5pdGFja19hZGRyOiBpbnZhbGlkIG9mZnNldD9c
biIpOwotCQlyZXR1cm4gKDApOwotCX0KLQkvKiBnbyB0aHJvdWdoIHRoZSBhZGRyZXNzZXMgaW4g
dGhlIGluaXQtYWNrICovCi0JcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0
cHRyKG0sIG9mZnNldCwKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4
X3QgKikgJiB0bXBfcGFyYW0pOwotCXdoaWxlIChwaCAhPSBOVUxMKSB7Ci0JCXB0eXBlID0gbnRv
aHMocGgtPnBhcmFtX3R5cGUpOwotCQlwbGVuID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7Ci0J
CXN3aXRjaCAocHR5cGUpIHsKLSNpZmRlZiBJTkVUNgotCQljYXNlIFNDVFBfSVBWNl9BRERSRVNT
OgotCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkvKiBnZXQgdGhlIGVu
dGlyZSBJUHY2IGFkZHJlc3MgcGFyYW0gKi8KLQkJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0
IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkvKiBnZXQg
dGhlIGVudGlyZSBJUHY2IGFkZHJlc3MgcGFyYW0gKi8KLQkJCQlhNnAgPSAoc3RydWN0IHNjdHBf
aXB2NmFkZHJfcGFyYW0gKikKLQkJCQkgICAgICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkJ
CQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSks
Ci0JCQkJICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZhZGRyNl9zdG9yZSk7Ci0JCQkJ
aWYgKGE2cCA9PSBOVUxMKSB7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJfQotCQkJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUK
LQkJCQlpZiAoSU42X0lTX1NDT1BFX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJ
CQkvKiBjcmVhdGUgYSBjb3B5IGFuZCBjbGVhciBzY29wZSAqLwotCQkJCQltZW1jcHkoJnNpbjZf
dG1wLCBzaW42LAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJ
CQkJc2luNiA9ICZzaW42X3RtcDsKLQkJCQkJaW42X2NsZWFyc2NvcGUoJnNpbjYtPnNpbjZfYWRk
cik7Ci0JCQkJfQotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJCQlpZiAo
bWVtY21wKCZzaW42LT5zaW42X2FkZHIsIGE2cC0+YWRkciwKLQkJCQkgICAgICAgICAgIHNpemVv
ZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSB7Ci0JCQkJCS8qIGZvdW5kIGl0ICovCi0JCQkJCXJl
dHVybiAoMSk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0jZW5kaWYgLyogSU5FVDYgKi8KLSNp
ZmRlZiBJTkVUCi0JCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6Ci0JCQlpZiAoc2EtPnNhX2ZhbWls
eSA9PSBBRl9JTkVUKSB7Ci0JCQkJaWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogZ2V0IHRoZSBlbnRpcmUg
SVB2NCBhZGRyZXNzIHBhcmFtICovCi0JCQkJYTRwID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3Bh
cmFtICopCi0JCQkJICAgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCi0JCQkJICAgICAgICAg
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pLAotCQkJCSAgICAg
ICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmYWRkcjRfc3RvcmUpOwotCQkJCWlmIChhNHAgPT0g
TlVMTCkgewotCQkJCQlyZXR1cm4gKDApOwotCQkJCX0KLQkJCQlzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopc2E7Ci0JCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IGE0cC0+YWRkcikg
ewotCQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCX0KLQkJ
CWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQkvKiBnZXQgbmV4
dCBwYXJhbWV0ZXIgKi8KLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwotCQlpZiAob2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSA+IGxlbmd0aCkgewotCQkJcmV0dXJu
ICgwKTsKLQkJfQotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKQotCQkgICAgc2N0cF9t
X2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCi0JCSAgICAo
dWludDhfdCAqKSAmIHRtcF9wYXJhbSk7Ci0JfSAvKiB3aGlsZSAqLwotCS8qIG5vdCBmb3VuZCEg
Ki8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogbWFrZXMgc3VyZSB0aGF0IHRoZSBjdXJyZW50
IGVuZHBvaW50IGxvY2FsIGFkZHIgbGlzdCBpcyBjb25zaXN0ZW50IHdpdGgKLSAqIHRoZSBuZXcg
YXNzb2NpYXRpb24gKGVnLiBzdWJzZXQgYm91bmQsIGFzY29uZiBhbGxvd2VkKSBhZGRzIGFkZHJl
c3NlcyBhcwotICogbmVjZXNzYXJ5Ci0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX2NoZWNrX2FkZHJl
c3NfbGlzdF9lcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zm
c2V0LAotICAgIGludCBsZW5ndGgsIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9hZGRyKQotewotCXN0
cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCS8qIGdvIHRocm91Z2ggdGhlIGVuZHBvaW50IGxp
c3QgKi8KLQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5zY3RwX2VwLT5zY3RwX2FkZHJfbGlz
dCwgc2N0cF9ueHRfYWRkcikgewotCQkvKiBiZSBwYXJhbm9pZCBhbmQgdmFsaWRhdGUgdGhlIGxh
ZGRyICovCi0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19BU0NPTkYxLAotCQkJCSJjaGVja19hZGRyX2xpc3RfZXA6IGxhZGRyLT5pZmEgaXMgTlVMTCIp
OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJjaGVja19hZGRyX2xpc3RfZXA6IGxhZGRyLT5pZmEt
PmlmYV9hZGRyIGlzIE5VTEwiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGRvIGkgaGF2ZSBp
dCBpbXBsaWNpdGx5PyAqLwotCQlpZiAoc2N0cF9jbXBhZGRyKCZsYWRkci0+aWZhLT5hZGRyZXNz
LnNhLCBpbml0X2FkZHIpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBjaGVjayB0byBzZWUg
aWYgaW4gdGhlIGluaXQtYWNrICovCi0JCWlmICghc2N0cF9hZGRyX2luX2luaXRhY2sobSwgb2Zm
c2V0LCBsZW5ndGgsICZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKSkgewotCQkJLyogdHJ5IHRvIGFk
ZCBpdCAqLwotCQkJc2N0cF9hZGRyX21nbXRfYXNzb2Moc3RjYi0+c2N0cF9lcCwgc3RjYiwgbGFk
ZHItPmlmYSwKLQkJCSAgICBTQ1RQX0FERF9JUF9BRERSRVNTLCBTQ1RQX0FERFJfTk9UX0xPQ0tF
RCk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBtYWtlcyBzdXJlIHRoYXQgdGhlIGN1cnJlbnQga2Vy
bmVsIGFkZHJlc3MgbGlzdCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIG5ldwotICogYXNzb2NpYXRp
b24gKHdpdGggYWxsIGFkZHJzIGJvdW5kKSBhZGRzIGFkZHJlc3NlcyBhcyBuZWNlc3NhcnkKLSAq
Lwotc3RhdGljIHZvaWQKLXNjdHBfY2hlY2tfYWRkcmVzc19saXN0X2FsbChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAotICAgIGludCBsZW5ndGgsIHN0
cnVjdCBzb2NrYWRkciAqaW5pdF9hZGRyLAotICAgIHVpbnQxNl90IGxvY2FsX3Njb3BlLCB1aW50
MTZfdCBzaXRlX3Njb3BlLAotICAgIHVpbnQxNl90IGlwdjRfc2NvcGUsIHVpbnQxNl90IGxvb3Bi
YWNrX3Njb3BlKQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0
cF9pZm4gKnNjdHBfaWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0JdWludDMyX3Qg
dnJmX2lkOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLSNlbmRpZgotCi0JaWYg
KHN0Y2IpIHsKLQkJdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7Ci0JfSBlbHNlIHsKLQkJcmV0
dXJuOwotCX0KLQlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7Ci0JdnJmID0gc2N0cF9maW5kX3ZyZih2
cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsK
LQkJcmV0dXJuOwotCX0KLQkvKiBnbyB0aHJvdWdoIGFsbCBvdXIga25vd24gaW50ZXJmYWNlcyAq
LwotCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKLQkJ
aWYgKGxvb3BiYWNrX3Njb3BlID09IDAgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4p
KSB7Ci0JCQkvKiBza2lwIGxvb3BiYWNrIGludGVyZmFjZSAqLwotCQkJY29udGludWU7Ci0JCX0K
LQkJLyogZ28gdGhyb3VnaCBlYWNoIGludGVyZmFjZSBhZGRyZXNzICovCi0JCUxJU1RfRk9SRUFD
SChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotCQkJLyogZG8gaSBo
YXZlIGl0IGltcGxpY2l0bHk/ICovCi0JCQlpZiAoc2N0cF9jbXBhZGRyKCZzY3RwX2lmYS0+YWRk
cmVzcy5zYSwgaW5pdF9hZGRyKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3dpdGNoIChz
Y3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFG
X0lORVQ6Ci0JCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lu
cC5pbnAuaW5wX2NyZWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIp
ICE9IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0JCQkJaWYgKChpcHY0X3Nj
b3BlID09IDApICYmCi0JCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2Fk
ZHIpKSkgewotCQkJCQkvKiBwcml2YXRlIGFkZHJlc3Mgbm90IGluIHNjb3BlICovCi0JCQkJCWNv
bnRpbnVlOwotCQkJCX0KLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNl
IEFGX0lORVQ2OgotCQkJCXNpbjYgPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNjsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAt
PmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNp
bjZfYWRkcikgIT0gMCkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlpZiAo
KGxvY2FsX3Njb3BlID09IDApICYmCi0JCQkJICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNp
bjYtPnNpbjZfYWRkcikpKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlpZiAoKHNpdGVf
c2NvcGUgPT0gMCkgJiYKLQkJCQkgICAgKElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2lu
Nl9hZGRyKSkpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0J
CQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogY2hlY2sgdG8gc2VlIGlmIGluIHRo
ZSBpbml0LWFjayAqLwotCQkJaWYgKCFzY3RwX2FkZHJfaW5faW5pdGFjayhtLCBvZmZzZXQsIGxl
bmd0aCwgJnNjdHBfaWZhLT5hZGRyZXNzLnNhKSkgewotCQkJCS8qIHRyeSB0byBhZGQgaXQgKi8K
LQkJCQlzY3RwX2FkZHJfbWdtdF9hc3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCSAgICBz
Y3RwX2lmYSwgU0NUUF9BRERfSVBfQUREUkVTUywKLQkJCQkgICAgU0NUUF9BRERSX0xPQ0tFRCk7
Ci0JCQl9Ci0JCX0gLyogZW5kIGZvcmVhY2ggaWZhICovCi0JfSAvKiBlbmQgZm9yZWFjaCBpZm4g
Ki8KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLX0KLQotLyoKLSAqIHZhbGlkYXRlcyBhbiBp
bml0LWFjayBjaHVuayAoZnJvbSBhIGNvb2tpZS1lY2hvKSB3aXRoIGN1cnJlbnQgYWRkcmVzc2Vz
Ci0gKiBhZGRzIGFkZHJlc3NlcyBmcm9tIHRoZSBpbml0LWFjayBpbnRvIG91ciBsb2NhbCBhZGRy
ZXNzIGxpc3QsIGlmIG5lZWRlZAotICogcXVldWVzIGFzY29uZiBhZGRzL2RlbGV0ZXMgYWRkcmVz
c2VzIGFzIG5lZWRlZCBhbmQgbWFrZXMgYXBwcm9wcmlhdGUgbGlzdAotICogY2hhbmdlcyBmb3Ig
c291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIG0sIG9mZnNldDogcG9pbnRzIHRvIHRoZSBzdGFydCBv
ZiB0aGUKLSAqIGFkZHJlc3MgbGlzdCBpbiBhbiBpbml0LWFjayBjaHVuayBsZW5ndGg6IHRvdGFs
IGxlbmd0aCBvZiB0aGUgYWRkcmVzcwotICogcGFyYW1zIG9ubHkgaW5pdF9hZGRyOiBhZGRyZXNz
IHdoZXJlIG15IElOSVQtQUNLIHdhcyBzZW50IGZyb20KLSAqLwotdm9pZAotc2N0cF9jaGVja19h
ZGRyZXNzX2xpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9m
ZnNldCwKLSAgICBpbnQgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKmluaXRfYWRkciwKLSAgICB1
aW50MTZfdCBsb2NhbF9zY29wZSwgdWludDE2X3Qgc2l0ZV9zY29wZSwKLSAgICB1aW50MTZfdCBp
cHY0X3Njb3BlLCB1aW50MTZfdCBsb29wYmFja19zY29wZSkKLXsKLQkvKiBwcm9jZXNzIHRoZSBs
b2NhbCBhZGRyZXNzZXMgaW4gdGhlIGluaXRhY2sgKi8KLQlzY3RwX3Byb2Nlc3NfaW5pdGFja19h
ZGRyZXNzZXMoc3RjYiwgbSwgb2Zmc2V0LCBsZW5ndGgpOwotCi0JaWYgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKiBib3VuZCBhbGwg
Y2FzZSAqLwotCQlzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdF9hbGwoc3RjYiwgbSwgb2Zmc2V0LCBs
ZW5ndGgsIGluaXRfYWRkciwKLQkJICAgIGxvY2FsX3Njb3BlLCBzaXRlX3Njb3BlLCBpcHY0X3Nj
b3BlLCBsb29wYmFja19zY29wZSk7Ci0JfSBlbHNlIHsKLQkJLyogc3Vic2V0IGJvdW5kIGNhc2Ug
Ki8KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgU0NUUF9Q
Q0JfRkxBR1NfRE9fQVNDT05GKSkgewotCQkJLyogYXNjb25mJ3MgYWxsb3dlZCAqLwotCQkJc2N0
cF9jaGVja19hZGRyZXNzX2xpc3RfZXAoc3RjYiwgbSwgb2Zmc2V0LCBsZW5ndGgsCi0JCQkgICAg
aW5pdF9hZGRyKTsKLQkJfQotCQkvKiBlbHNlLCBubyBhc2NvbmZzIGFsbG93ZWQsIHNvIHdoYXQg
d2Ugc2VudCBpcyB3aGF0IHdlIGdldCAqLwotCX0KLX0KLQotLyoKLSAqIHNjdHBfYmluZHgoKSBz
dXBwb3J0Ci0gKi8KLXVpbnQzMl90Ci1zY3RwX2FkZHJfbWdtdF9lcF9zYShzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAotICAgIHVpbnQzMl90IHR5cGUsIHVpbnQz
Ml90IHZyZl9pZCwgc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCi17Ci0Jc3RydWN0IHNjdHBf
aWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxhZGRyOwotCi0jaWZkZWYg
SEFWRV9TQV9MRU4KLQlpZiAoc2EtPnNhX2xlbiA9PSAwKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVJTlZBTCk7Ci0JCXJl
dHVybiAoRUlOVkFMKTsKLQl9Ci0jZW5kaWYKLQlpZiAoc2N0cF9pZmFwKSB7Ci0JCWlmYSA9IHNj
dHBfaWZhcDsKLQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkv
KiBGb3IgYW4gYWRkIHRoZSBhZGRyZXNzIE1VU1QgYmUgb24gdGhlIHN5c3RlbSAqLwotCQlpZmEg
PSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoc2EsIHZyZl9pZCwgU0NUUF9BRERSX05PVF9MT0NLRUQp
OwotCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCS8qIEZvciBh
IGRlbGV0ZSB3ZSBuZWVkIHRvIGZpbmQgaXQgaW4gdGhlIGlucCAqLwotCQlpZmEgPSBzY3RwX2Zp
bmRfaWZhX2luX2VwKGlucCwgc2EsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQl9IGVsc2Ugewot
CQlpZmEgPSBOVUxMOwotCX0KLQlpZiAoaWZhICE9IE5VTEwpIHsKLQkJaWYgKHR5cGUgPT0gU0NU
UF9BRERfSVBfQUREUkVTUykgewotCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9lcChpbnAsIGlmYSwg
dHlwZSk7Ci0JCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQlp
ZiAoaW5wLT5sYWRkcl9jb3VudCA8IDIpIHsKLQkJCQkvKiBjYW4ndCBkZWxldGUgdGhlIGxhc3Qg
bG9jYWwgYWRkcmVzcyAqLwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwot
CQkJfQotCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwKLQkJCQkg
ICAgIHNjdHBfbnh0X2FkZHIpIHsKLQkJCQlpZiAoaWZhID09IGxhZGRyLT5pZmEpIHsKLQkJCQkJ
LyogTWFyayBpbiB0aGUgZGVsZXRlICovCi0JCQkJCWxhZGRyLT5hY3Rpb24gPSB0eXBlOwotCQkJ
CX0KLQkJCX0KLQkJfQotCQlpZiAoTElTVF9FTVBUWSgmaW5wLT5zY3RwX2Fzb2NfbGlzdCkpIHsK
LQkJCS8qCi0JCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHN0YXJ0IHRoZSBpdGVyYXRvciBpZgot
CQkJICogdGhlIGlucCBoYXMgbm8gYXNzb2NpYXRpb25zLgotCQkJICovCi0JCQlpZiAodHlwZSA9
PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkJTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZp
bnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIpIHsKLQkJCQkJaWYgKGxh
ZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQkJCQlzY3RwX2RlbF9sb2NhbF9hZGRyX2VwKGlucCwgaWZh
KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBzY3RwX2FzY29u
Zl9pdGVyYXRvciAqYXNjOwotCQkJc3RydWN0IHNjdHBfbGFkZHIgKndpOwotCQkJaW50IHJldDsK
LQotCQkJU0NUUF9NQUxMT0MoYXNjLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKiwKLQkJ
CSAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IpLAotCQkJICAg
ICAgICAgICAgU0NUUF9NX0FTQ19JVCk7Ci0JCQlpZiAoYXNjID09IE5VTEwpIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBF
Tk9NRU0pOwotCQkJCXJldHVybiAoRU5PTUVNKTsKLQkJCX0KLQkJCXdpID0gU0NUUF9aT05FX0dF
VChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0cnVjdCBzY3RwX2xhZGRyKTsKLQkJ
CWlmICh3aSA9PSBOVUxMKSB7Ci0JCQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7Ci0J
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX0FT
Q09ORiwgRU5PTUVNKTsKLQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQl9Ci0JCQlMSVNUX0lOSVQo
JmFzYy0+bGlzdF9vZl93b3JrKTsKLQkJCWFzYy0+Y250ID0gMTsKLQkJCVNDVFBfSU5DUl9MQURE
Ul9DT1VOVCgpOwotCQkJd2ktPmlmYSA9IGlmYTsKLQkJCXdpLT5hY3Rpb24gPSB0eXBlOwotCQkJ
YXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOwotCQkJTElTVF9JTlNFUlRfSEVBRCgm
YXNjLT5saXN0X29mX3dvcmssIHdpLCBzY3RwX254dF9hZGRyKTsKLQkJCXJldCA9IHNjdHBfaW5p
dGlhdGVfaXRlcmF0b3Ioc2N0cF9hc2NvbmZfaXRlcmF0b3JfZXAsCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2IsCi0JCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VwX2VuZCwKLQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQ0JfQU5ZX0ZMQUdTLAotCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX1BDQl9BTllfRkVBVFVSRVMsCi0JCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfQVNPQ19BTllfU1RBVEUsCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2b2lkICopYXNjLCAwLAotCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQsIGlucCwgMCk7Ci0JCQlpZiAocmV0KSB7
Ci0JCQkJU0NUUF9QUklOVEYoIkZhaWxlZCB0byBpbml0aWF0ZSBpdGVyYXRvciBmb3IgYWRkcl9t
Z210X2VwX3NhXG4iKTsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFRkFVTFQpOwotCQkJCSAgICAgICAgICAgICAgICAgICAg
c2N0cF9hc2NvbmZfaXRlcmF0b3JfZW5kKGFzYywgMCk7Ci0JCQkJcmV0dXJuIChFRkFVTFQpOwot
CQkJfQotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsKLQkJLyogaW52YWxpZCBhZGRyZXNz
ISAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX0FTQ09ORiwgRUFERFJOT1RBVkFJTCk7Ci0JCXJldHVybiAoRUFERFJOT1RBVkFJTCk7Ci0J
fQotfQotCi12b2lkCi1zY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGUoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotCQkJCSAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCXN0cnVjdCBz
Y3RwX2FzY29uZl9hZGRyICphYTsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcDsKLQlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfdGFnX3BhcmFtICp2dGFnOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnRvOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICp0bzY7Ci0jZW5kaWYKLQlpZiAobmV0ID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IE1pc3NpbmcgbmV0
XG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLCAic2N0cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVfdXBkYXRlOiBNaXNz
aW5nIHN0Y2JcbiIpOwotCQlyZXR1cm47Ci0JfQotICAvKiBOZWVkIHRvIGhhdmUgaW4gdGhlIGFz
Y29uZjoKLSAgICogLSB2dGFncGFyYW0obXlfdnRhZy9wZWVyX3Z0YWcpCi0gICAqIC0gYWRkKDAu
MC4wLjApCi0gICAqIC0gZGVsKDAuMC4wLjApCi0gICAqIC0gQW55IGdsb2JhbCBhZGRyZXNzZXMg
YWRkKGFkZHIpCi0gICAqLwotCVNDVFBfTUFMTE9DKGFhLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRk
ciAqLCBzaXplb2YoKmFhKSwKLQkgICAgICAgICAgICBTQ1RQX01fQVNDX0FERFIpOwotCWlmIChh
YSA9PSBOVUxMKSB7Ci0JCS8qIGRpZG4ndCBnZXQgbWVtb3J5ICovCi0JCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLAotCQkgICAgICAgICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRh
dGU6IGZhaWxlZCB0byBnZXQgbWVtb3J5IVxuIik7Ci0JCXJldHVybjsKLQl9Ci0JYWEtPnNwZWNp
YWxfZGVsID0gMDsKLQkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBhcmFtZXRlciBmaWVsZHMg
Ki8KLQkvKiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQiIGR1cmluZyBzZW5kICov
Ci0JYWEtPmlmYSA9IE5VTEw7Ci0JYWEtPnNlbnQgPSAwOwkJLyogY2xlYXIgc2VudCBmbGFnICov
Ci0JdnRhZyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfdGFnX3BhcmFtICopJmFhLT5hcC5hcGg7Ci0J
dnRhZy0+YXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX05BVF9WVEFHUzsKLQl2dGFnLT5hcGgucGgu
cGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0pOwotCXZ0
YWctPmxvY2FsX3Z0YWcgPSBodG9ubChzdGNiLT5hc29jLm15X3Z0YWcpOwotCXZ0YWctPnJlbW90
ZV92dGFnID0gaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpOwotCVRBSUxRX0lOU0VSVF9UQUlM
KCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCi0JU0NUUF9NQUxMT0MoYWEs
IHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAotCSAgICAgICAgICAgIFND
VFBfTV9BU0NfQUREUik7Ci0JaWYgKGFhID09IE5VTEwpIHsKLQkJLyogZGlkbid0IGdldCBtZW1v
cnkgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCSAgICAgICAgInNjdHBfYXNj
b25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4iKTsKLQkJ
cmV0dXJuOwotCX0KLQltZW1zZXQoYWEsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRk
cikpOwotCS8qIGZpbGwgaW4gYXNjb25mIGFkZHJlc3MgcGFyYW1ldGVyIGZpZWxkcyAqLwotCS8q
IEFERCgwLjAuMC4wKSAqLwotCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkg
ewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fdHlw
ZSA9IFNDVFBfQUREX0lQX0FERFJFU1M7Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pOwotCQlhYS0+YXAuYWRkcnAu
cGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNF9BRERSRVNTOwotCQlhYS0+YXAuYWRkcnAucGgucGFy
YW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7Ci0JCS8qIE5v
IG5lZWQgdG8gYWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAuMC4wICovCi0JCVRBSUxR
X0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQlicmVh
azsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJYWEtPmFwLmFwaC5w
aC5wYXJhbV90eXBlID0gU0NUUF9BRERfSVBfQUREUkVTUzsKLQkJYWEtPmFwLmFwaC5waC5wYXJh
bV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pOwotCQlhYS0+
YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNl9BRERSRVNTOwotCQlhYS0+YXAuYWRk
cnAucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7
Ci0JCS8qIE5vIG5lZWQgdG8gYWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAuMC4wICov
Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQp
OwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NP
TkYxLAotCQkgICAgICAgICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IHVua25v
d24gYWRkcmVzcyBmYW1pbHlcbiIpOwotCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7
Ci0JCXJldHVybjsKLQl9Ci0JU0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRy
ICosIHNpemVvZigqYWEpLAotCSAgICAgICAgICAgIFNDVFBfTV9BU0NfQUREUik7Ci0JaWYgKGFh
ID09IE5VTEwpIHsKLQkJLyogZGlkbid0IGdldCBtZW1vcnkgKi8KLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FTQ09ORjEsCi0JCSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0
ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYWEs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcikpOwotCS8qIGZpbGwgaW4gYXNjb25m
IGFkZHJlc3MgcGFyYW1ldGVyIGZpZWxkcyAqLwotCS8qIEFERCgwLjAuMC4wKSAqLwotCXN3aXRj
aCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFG
X0lORVQ6Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1M7
Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29u
Zl9hZGRydjRfcGFyYW0pOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFNDVFBfSVBW
NF9BRERSRVNTOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7Ci0JCS8qIE5vIG5lZWQgdG8gYWRkIGFuIGFkZHJlc3Ms
IHdlIGFyZSB1c2luZyAwLjAuMC4wICovCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29j
LmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JY2FzZSBBRl9JTkVUNjoKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gU0NUUF9ERUxf
SVBfQUREUkVTUzsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9
IFNDVFBfSVBWNl9BRERSRVNTOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gc2l6
ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCS8qIE5vIG5lZWQgdG8gYWRkIGFu
IGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAuMC4wICovCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQlicmVhazsKLSNlbmRpZgotCWRl
ZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkgICAgICAgICJzY3RwX2Fz
Y29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IHVua25vd24gYWRkcmVzcyBmYW1pbHlcbiIpOwot
CQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7Ci0JCXJldHVybjsKLQl9Ci0JLyogTm93
IHdlIG11c3QgaHVudCB0aGUgYWRkcmVzc2VzIGFuZCBhZGQgYWxsIGdsb2JhbCBhZGRyZXNzZXMg
Ki8KLQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5E
QUxMKSB7Ci0JCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKLQkJc3RydWN0IHNjdHBfaWZu
ICpzY3RwX2lmbnA7Ci0JCXVpbnQzMl90IHZyZl9pZDsKLQotCQl2cmZfaWQgPSBzdGNiLT5zY3Rw
X2VwLT5kZWZfdnJmX2lkOwotCQl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7Ci0JCWlmICh2
cmYgPT0gTlVMTCkgewotCQkJZ290byBza2lwX3Jlc3Q7Ci0JCX0KLQotCQlTQ1RQX0lQSV9BRERS
X1JMT0NLKCk7Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmbnAsICZ2cmYtPmlmbmxpc3QsIG5leHRf
aWZuKSB7Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmFwLCAmc2N0cF9pZm5wLT5pZmFsaXN0LCBu
ZXh0X2lmYSkgewotCQkJCXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkg
ewotI2lmZGVmIElORVQKLQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJCXRvID0gJnNjdHBfaWZhcC0+
YWRkcmVzcy5zaW47Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJaWYgKHByaXNvbl9j
aGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAg
ICAgICAgICAgICAgICAgJnRvLT5zaW5fYWRkcikgIT0gMCkgewotCQkJCQkJY29udGludWU7Ci0J
CQkJCX0KLSNlbmRpZgotCQkJCQlpZiAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZ0by0+c2luX2Fk
ZHIpKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAoSU40X0lTTE9PUEJBQ0tf
QUREUkVTUygmdG8tPnNpbl9hZGRyKSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCXRv
NiA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNjsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLmlucF9j
cmVkLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAmdG82LT5zaW42X2FkZHIpICE9IDApIHsK
LQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJaWYgKElONl9JU19BRERSX0xP
T1BCQUNLKCZ0bzYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJ
CWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnRvNi0+c2luNl9hZGRyKSkgewotCQkJCQkJY29u
dGludWU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQlj
b250aW51ZTsKLQkJCQl9Ci0JCQkJc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBzY3RwX2lm
YXAsIFNDVFBfQUREX0lQX0FERFJFU1MpOwotCQkJfQotCQl9Ci0JCVNDVFBfSVBJX0FERFJfUlVO
TE9DSygpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCQlMSVNU
X0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5zY3RwX2VwLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRf
YWRkcikgewotCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJCWNvbnRpbnVlOwotCQkJ
fQotCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVE
KQotCQkJCS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBieSB0aGUgc3lzdGVtLCBkb250Ci0JCQkJ
ICogbGlzdC4KLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJCWlmIChsYWRkci0+YWN0aW9uID09
IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKLQkJCQkvKiBBZGRyZXNzIGJlaW5nIGRlbGV0ZWQgb24g
dGhpcyBlcAotCQkJCSAqIGRvbid0IGxpc3QuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9
Ci0JCQlzY3RwX2lmYXAgPSBsYWRkci0+aWZhOwotCQkJc3dpdGNoIChzY3RwX2lmYXAtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCXRv
ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW47Ci0JCQkJaWYgKElONF9JU1BSSVZBVEVfQUREUkVT
UygmdG8tPnNpbl9hZGRyKSkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKElONF9J
U0xPT1BCQUNLX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJ
fQotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0J
CQkJdG82ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42OwotCQkJCWlmIChJTjZfSVNfQUREUl9M
T09QQkFDSygmdG82LT5zaW42X2FkZHIpKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlp
ZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZ0bzYtPnNpbjZfYWRkcikpIHsKLQkJCQkJY29udGlu
dWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQlkZWZhdWx0OgotCQkJCWNvbnRpbnVl
OwotCQkJfQotCQkJc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBzY3RwX2lmYXAsIFNDVFBf
QUREX0lQX0FERFJFU1MpOwotCQl9Ci0JfQotIHNraXBfcmVzdDoKLQkvKiBOb3cgd2UgbXVzdCBz
ZW5kIHRoZSBhc2NvbmYgaW50byB0aGUgcXVldWUgKi8KLQlzY3RwX3NlbmRfYXNjb25mKHN0Y2Is
IG5ldCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2FzY29uZi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFjY2QyYjg1MmQzOTAyM2Y0Yjc4NDMwMWFkMDU4
ZjNjMGExN2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICsw
LDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3Rp
Y2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElE
KCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2FzY29uZi5oIDMwOTYwNyAyMDE2LTEy
LTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0KLSNpZm5kZWYgX05FVElORVRfU0NU
UF9BU0NPTkZfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9BU0NPTkZfSF8KLQotI2lmIGRlZmlu
ZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCi0vKgotICogZnVuY3Rpb24g
cHJvdG90eXBlcwotICovCi1leHRlcm4gdm9pZCBzY3RwX2FzY29uZl9jbGVhbnVwKHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1leHRlcm4gc3RydWN0IG1idWYgKnNj
dHBfY29tcG9zZV9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICosIGludCAqLCBpbnQpOwotCi1leHRl
cm4gdm9pZAotc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICosIHVuc2lnbmVkIGludCwg
c3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNjb25m
X2NodW5rICosIHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOwotCi1leHRlcm4gdm9pZAotc2N0cF9o
YW5kbGVfYXNjb25mX2FjayhzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBzY3RwX2FzY29uZl9h
Y2tfY2h1bmsgKiwKLSAgICAgc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwg
aW50ICopOwotCi1leHRlcm4gdWludDMyX3QKLXNjdHBfYWRkcl9tZ210X2VwX3NhKHN0cnVjdCBz
Y3RwX2lucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLAotCQkgICAgIHVpbnQzMl90LCB1aW50MzJf
dCwgc3RydWN0IHNjdHBfaWZhICopOwotCi0KLWV4dGVybiBpbnQgc2N0cF9hc2NvbmZfaXRlcmF0
b3JfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLAotCQkJCSAgIHVpbnQzMl90
IHZhbCk7Ci1leHRlcm4gdm9pZCBzY3RwX2FzY29uZl9pdGVyYXRvcl9zdGNiKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCi0JCQkJICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJCSAgICAg
IHZvaWQgKnB0ciwgdWludDMyX3QgdHlwZSk7Ci1leHRlcm4gdm9pZCBzY3RwX2FzY29uZl9pdGVy
YXRvcl9lbmQodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwpOwotCi0KLWV4dGVybiBpbnQzMl90Ci1z
Y3RwX3NldF9wcmltYXJ5X2lwX2FkZHJlc3Nfc2Eoc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3Ry
dWN0IHNvY2thZGRyICopOwotCi1leHRlcm4gdm9pZAotc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRy
ZXNzKHN0cnVjdCBzY3RwX2lmYSAqaWZhKTsKLQotZXh0ZXJuIHZvaWQKLXNjdHBfY2hlY2tfYWRk
cmVzc19saXN0KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKLSAg
ICBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2
X3QpOwotCi1leHRlcm4gdm9pZAotc2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qg
c2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotZXh0ZXJu
IHZvaWQKLXNjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc2N0cF9uZXRzICopOwotI2VuZGlmCi0KLWV4dGVybiB2b2lkCi1zY3RwX2FzY29uZl9zZW5k
X25hdF9zdGF0ZV91cGRhdGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJCSAgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KTsKLQotZXh0ZXJuIGludAotc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKLSNlbmRpZgkJCQkvKiBfS0VSTkVMICov
Ci0KLSNlbmRpZgkJCQkvKiAhX05FVElORVRfU0NUUF9BU0NPTkZfSF8gKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0
aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDNhY2U1NzM3NDE2N2U4MjEyYjZl
MDAwNDQ2YjFjNGM5YjJlODU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwyMzQ3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
LV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2F1dGguYyAzMjEyMDQg
MjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2hlYWRlci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aW5kYXRhLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9hdXRoLmg+Ci0KLSNpZmRlZiBTQ1RQX0RFQlVHCi0jZGVmaW5lIFNDVFBfQVVU
SF9ERUJVRwkJKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FV
VEgxKQotI2RlZmluZSBTQ1RQX0FVVEhfREVCVUcyCShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVi
dWdfb24pICYgU0NUUF9ERUJVR19BVVRIMikKLSNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCi0KLQot
dm9pZAotc2N0cF9jbGVhcl9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCkK
LXsKLQltZW1zZXQoY2hrbGlzdCwgMCwgc2l6ZW9mKCpjaGtsaXN0KSk7Ci0JLyogY2hrbGlzdC0+
bnVtX2NodW5rcyA9IDA7ICovCi19Ci0KLXNjdHBfYXV0aF9jaGtsaXN0X3QgKgotc2N0cF9hbGxv
Y19jaHVua2xpc3Qodm9pZCkKLXsKLQlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0OwotCi0J
U0NUUF9NQUxMT0MoY2hrbGlzdCwgc2N0cF9hdXRoX2Noa2xpc3RfdCAqLCBzaXplb2YoKmNoa2xp
c3QpLAotCQkgICAgU0NUUF9NX0FVVEhfQ0wpOwotCWlmIChjaGtsaXN0ID09IE5VTEwpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAic2N0cF9hbGxvY19jaHVua2xpc3Q6IGZhaWxlZCB0
byBnZXQgbWVtb3J5IVxuIik7Ci0JfSBlbHNlIHsKLQkJc2N0cF9jbGVhcl9jaHVua2xpc3QoY2hr
bGlzdCk7Ci0JfQotCXJldHVybiAoY2hrbGlzdCk7Ci19Ci0KLXZvaWQKLXNjdHBfZnJlZV9jaHVu
a2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKLXsKLQlpZiAobGlzdCAhPSBOVUxMKQot
CQlTQ1RQX0ZSRUUobGlzdCwgU0NUUF9NX0FVVEhfQ0wpOwotfQotCi1zY3RwX2F1dGhfY2hrbGlz
dF90ICoKLXNjdHBfY29weV9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKLXsK
LQlzY3RwX2F1dGhfY2hrbGlzdF90ICpuZXdfbGlzdDsKLQotCWlmIChsaXN0ID09IE5VTEwpCi0J
CXJldHVybiAoTlVMTCk7Ci0KLQkvKiBnZXQgYSBuZXcgbGlzdCAqLwotCW5ld19saXN0ID0gc2N0
cF9hbGxvY19jaHVua2xpc3QoKTsKLQlpZiAobmV3X2xpc3QgPT0gTlVMTCkKLQkJcmV0dXJuIChO
VUxMKTsKLQkvKiBjb3B5IGl0ICovCi0JbWVtY3B5KG5ld19saXN0LCBsaXN0LCBzaXplb2YoKm5l
d19saXN0KSk7Ci0KLQlyZXR1cm4gKG5ld19saXN0KTsKLX0KLQotCi0vKgotICogYWRkIGEgY2h1
bmsgdG8gdGhlIHJlcXVpcmVkIGNodW5rcyBsaXN0Ci0gKi8KLWludAotc2N0cF9hdXRoX2FkZF9j
aHVuayh1aW50OF90IGNodW5rLCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KQotewotCWlmIChs
aXN0ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0JLyogaXMgY2h1bmsgcmVzdHJpY3RlZD8g
Ki8KLQlpZiAoKGNodW5rID09IFNDVFBfSU5JVElBVElPTikgfHwKLQkgICAgKGNodW5rID09IFND
VFBfSU5JVElBVElPTl9BQ0spIHx8Ci0JICAgIChjaHVuayA9PSBTQ1RQX1NIVVRET1dOX0NPTVBM
RVRFKSB8fAotCSAgICAoY2h1bmsgPT0gU0NUUF9BVVRIRU5USUNBVElPTikpIHsKLQkJcmV0dXJu
ICgtMSk7Ci0JfQotCWlmIChsaXN0LT5jaHVua3NbY2h1bmtdID09IDApIHsKLQkJbGlzdC0+Y2h1
bmtzW2NodW5rXSA9IDE7Ci0JCWxpc3QtPm51bV9jaHVua3MrKzsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FVVEgxLAotCQkJIlNDVFA6IGFkZGVkIGNodW5rICV1ICgweCUwMngpIHRvIEF1dGggbGlz
dFxuIiwKLQkJCWNodW5rLCBjaHVuayk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBk
ZWxldGUgYSBjaHVuayBmcm9tIHRoZSByZXF1aXJlZCBjaHVua3MgbGlzdAotICovCi1pbnQKLXNj
dHBfYXV0aF9kZWxldGVfY2h1bmsodWludDhfdCBjaHVuaywgc2N0cF9hdXRoX2Noa2xpc3RfdCAq
bGlzdCkKLXsKLQlpZiAobGlzdCA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQotCWlmIChsaXN0
LT5jaHVua3NbY2h1bmtdID09IDEpIHsKLQkJbGlzdC0+Y2h1bmtzW2NodW5rXSA9IDA7Ci0JCWxp
c3QtPm51bV9jaHVua3MtLTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFA6
IGRlbGV0ZWQgY2h1bmsgJXUgKDB4JTAyeCkgZnJvbSBBdXRoIGxpc3RcbiIsCi0JCQljaHVuaywg
Y2h1bmspOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zaXplX3QKLXNjdHBfYXV0aF9nZXRfY2hr
bGlzdF9zaXplKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCi17Ci0JaWYgKGxpc3Qg
PT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQllbHNlCi0JCXJldHVybiAobGlzdC0+bnVtX2NodW5r
cyk7Ci19Ci0KLS8qCi0gKiByZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIGFuZCBsaXN0IG9mIHJl
cXVpcmVkIGNodW5rcyBjYWxsZXIgbXVzdAotICogZ3VhcmFudGVlIHB0ciBoYXMgc3BhY2UgZm9y
IHVwIHRvIDI1NiBieXRlcwotICovCi1pbnQKLXNjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNv
bnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0cikKLXsKLQlpbnQgaSwg
Y291bnQgPSAwOwotCi0JaWYgKGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQotCWZvciAo
aSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlpZiAobGlzdC0+Y2h1bmtzW2ldICE9IDApIHsKLQkJ
CSpwdHIrKyA9IGk7Ci0JCQljb3VudCsrOwotCQl9Ci0JfQotCXJldHVybiAoY291bnQpOwotfQot
Ci1pbnQKLXNjdHBfcGFja19hdXRoX2NodW5rcyhjb25zdCBzY3RwX2F1dGhfY2hrbGlzdF90ICps
aXN0LCB1aW50OF90ICpwdHIpCi17Ci0JaW50IGksIHNpemUgPSAwOwotCi0JaWYgKGxpc3QgPT0g
TlVMTCkKLQkJcmV0dXJuICgwKTsKLQotCWlmIChsaXN0LT5udW1fY2h1bmtzIDw9IDMyKSB7Ci0J
CS8qIGp1c3QgbGlzdCB0aGVtLCBvbmUgYnl0ZSBlYWNoICovCi0JCWZvciAoaSA9IDA7IGkgPCAy
NTY7IGkrKykgewotCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7Ci0JCQkJKnB0cisrID0g
aTsKLQkJCQlzaXplKys7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlpbnQgaW5kZXgsIG9mZnNl
dDsKLQotCQkvKiBwYWNrIGludG8gYSAzMiBieXRlIGJpdGZpZWxkICovCi0JCWZvciAoaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7Ci0JCQkJaW5k
ZXggPSBpIC8gODsKLQkJCQlvZmZzZXQgPSBpICUgODsKLQkJCQlwdHJbaW5kZXhdIHw9ICgxIDw8
IG9mZnNldCk7Ci0JCQl9Ci0JCX0KLQkJc2l6ZSA9IDMyOwotCX0KLQlyZXR1cm4gKHNpemUpOwot
fQotCi1pbnQKLXNjdHBfdW5wYWNrX2F1dGhfY2h1bmtzKGNvbnN0IHVpbnQ4X3QgKnB0ciwgdWlu
dDhfdCBudW1fY2h1bmtzLAotICAgIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCi17Ci0JaW50
IGk7Ci0JaW50IHNpemU7Ci0KLQlpZiAobGlzdCA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCi0J
aWYgKG51bV9jaHVua3MgPD0gMzIpIHsKLQkJLyoganVzdCBwdWxsIHRoZW0sIG9uZSBieXRlIGVh
Y2ggKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgewotCQkJKHZvaWQpc2N0
cF9hdXRoX2FkZF9jaHVuaygqcHRyKyssIGxpc3QpOwotCQl9Ci0JCXNpemUgPSBudW1fY2h1bmtz
OwotCX0gZWxzZSB7Ci0JCWludCBpbmRleCwgb2Zmc2V0OwotCi0JCS8qIHVucGFjayBmcm9tIGEg
MzIgYnl0ZSBiaXRmaWVsZCAqLwotCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgr
KykgewotCQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA4OyBvZmZzZXQrKykgewotCQkJCWlm
IChwdHJbaW5kZXhdICYgKDEgPDwgb2Zmc2V0KSkgewotCQkJCQkodm9pZClzY3RwX2F1dGhfYWRk
X2NodW5rKChpbmRleCAqIDgpICsgb2Zmc2V0LCBsaXN0KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJ
c2l6ZSA9IDMyOwotCX0KLQlyZXR1cm4gKHNpemUpOwotfQotCi0KLS8qCi0gKiBhbGxvY2F0ZSBz
dHJ1Y3R1cmUgc3BhY2UgZm9yIGEga2V5IG9mIGxlbmd0aCBrZXlsZW4KLSAqLwotc2N0cF9rZXlf
dCAqCi1zY3RwX2FsbG9jX2tleSh1aW50MzJfdCBrZXlsZW4pCi17Ci0Jc2N0cF9rZXlfdCAqbmV3
X2tleTsKLQotCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBfa2V5X3QgKiwgc2l6ZW9mKCpuZXdf
a2V5KSArIGtleWxlbiwKLQkJICAgIFNDVFBfTV9BVVRIX0tZKTsKLQlpZiAobmV3X2tleSA9PSBO
VUxMKSB7Ci0JCS8qIG91dCBvZiBtZW1vcnkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbmV3
X2tleS0+a2V5bGVuID0ga2V5bGVuOwotCXJldHVybiAobmV3X2tleSk7Ci19Ci0KLXZvaWQKLXNj
dHBfZnJlZV9rZXkoc2N0cF9rZXlfdCAqa2V5KQotewotCWlmIChrZXkgIT0gTlVMTCkKLQkJU0NU
UF9GUkVFKGtleSxTQ1RQX01fQVVUSF9LWSk7Ci19Ci0KLXZvaWQKLXNjdHBfcHJpbnRfa2V5KHNj
dHBfa2V5X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKQotewotCXVpbnQzMl90IGk7Ci0KLQlpZiAo
a2V5ID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIiVzOiBbTnVsbCBrZXldXG4iLCBzdHIpOwot
CQlyZXR1cm47Ci0JfQotCVNDVFBfUFJJTlRGKCIlczogbGVuICV1LCAiLCBzdHIsIGtleS0+a2V5
bGVuKTsKLQlpZiAoa2V5LT5rZXlsZW4pIHsKLQkJZm9yIChpID0gMDsgaSA8IGtleS0+a2V5bGVu
OyBpKyspCi0JCQlTQ1RQX1BSSU5URigiJTAyeCIsIGtleS0+a2V5W2ldKTsKLQkJU0NUUF9QUklO
VEYoIlxuIik7Ci0JfSBlbHNlIHsKLQkJU0NUUF9QUklOVEYoIltOdWxsIGtleV1cbiIpOwotCX0K
LX0KLQotdm9pZAotc2N0cF9zaG93X2tleShzY3RwX2tleV90ICprZXksIGNvbnN0IGNoYXIgKnN0
cikKLXsKLQl1aW50MzJfdCBpOwotCi0JaWYgKGtleSA9PSBOVUxMKSB7Ci0JCVNDVFBfUFJJTlRG
KCIlczogW051bGwga2V5XVxuIiwgc3RyKTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX1BSSU5URigi
JXM6IGxlbiAldSwgIiwgc3RyLCBrZXktPmtleWxlbik7Ci0JaWYgKGtleS0+a2V5bGVuKSB7Ci0J
CWZvciAoaSA9IDA7IGkgPCBrZXktPmtleWxlbjsgaSsrKQotCQkJU0NUUF9QUklOVEYoIiUwMngi
LCBrZXktPmtleVtpXSk7Ci0JCVNDVFBfUFJJTlRGKCJcbiIpOwotCX0gZWxzZSB7Ci0JCVNDVFBf
UFJJTlRGKCJbTnVsbCBrZXldXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9n
ZXRfa2V5bGVuKHNjdHBfa2V5X3QgKmtleSkKLXsKLQlpZiAoa2V5ICE9IE5VTEwpCi0JCXJldHVy
biAoa2V5LT5rZXlsZW4pOwotCWVsc2UKLQkJcmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIGdlbmVy
YXRlIGEgbmV3IHJhbmRvbSBrZXkgb2YgbGVuZ3RoICdrZXlsZW4nCi0gKi8KLXNjdHBfa2V5X3Qg
Kgotc2N0cF9nZW5lcmF0ZV9yYW5kb21fa2V5KHVpbnQzMl90IGtleWxlbikKLXsKLQlzY3RwX2tl
eV90ICpuZXdfa2V5OwotCi0JbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JaWYg
KG5ld19rZXkgPT0gTlVMTCkgewotCQkvKiBvdXQgb2YgbWVtb3J5ICovCi0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCVNDVFBfUkVBRF9SQU5ET00obmV3X2tleS0+a2V5LCBrZXlsZW4pOwotCW5ld19r
ZXktPmtleWxlbiA9IGtleWxlbjsKLQlyZXR1cm4gKG5ld19rZXkpOwotfQotCi1zY3RwX2tleV90
ICoKLXNjdHBfc2V0X2tleSh1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbikKLXsKLQlzY3Rw
X2tleV90ICpuZXdfa2V5OwotCi0JbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0J
aWYgKG5ld19rZXkgPT0gTlVMTCkgewotCQkvKiBvdXQgb2YgbWVtb3J5ICovCi0JCXJldHVybiAo
TlVMTCk7Ci0JfQotCW1lbWNweShuZXdfa2V5LT5rZXksIGtleSwga2V5bGVuKTsKLQlyZXR1cm4g
KG5ld19rZXkpOwotfQotCi0vKi0KLSAqIGdpdmVuIHR3byBrZXlzIG9mIHZhcmlhYmxlIHNpemUs
IGNvbXB1dGUgd2hpY2gga2V5IGlzICJsYXJnZXIvc21hbGxlciIKLSAqIHJldHVybnM6ICAxIGlm
IGtleTEgPiBrZXkyCi0gKiAgICAgICAgICAtMSBpZiBrZXkxIDwga2V5MgotICogICAgICAgICAg
IDAgaWYga2V5MSA9IGtleTIKLSAqLwotc3RhdGljIGludAotc2N0cF9jb21wYXJlX2tleShzY3Rw
X2tleV90ICprZXkxLCBzY3RwX2tleV90ICprZXkyKQotewotCXVpbnQzMl90IG1heGxlbjsKLQl1
aW50MzJfdCBpOwotCXVpbnQzMl90IGtleTFsZW4sIGtleTJsZW47Ci0JdWludDhfdCAqa2V5XzEs
ICprZXlfMjsKLQl1aW50OF90IHZhbDEsIHZhbDI7Ci0KLQkvKiBzYW5pdHkvbGVuZ3RoIGNoZWNr
ICovCi0Ja2V5MWxlbiA9IHNjdHBfZ2V0X2tleWxlbihrZXkxKTsKLQlrZXkybGVuID0gc2N0cF9n
ZXRfa2V5bGVuKGtleTIpOwotCWlmICgoa2V5MWxlbiA9PSAwKSAmJiAoa2V5MmxlbiA9PSAwKSkK
LQkJcmV0dXJuICgwKTsKLQllbHNlIGlmIChrZXkxbGVuID09IDApCi0JCXJldHVybiAoLTEpOwot
CWVsc2UgaWYgKGtleTJsZW4gPT0gMCkKLQkJcmV0dXJuICgxKTsKLQotCWlmIChrZXkxbGVuIDwg
a2V5MmxlbikgewotCQltYXhsZW4gPSBrZXkybGVuOwotCX0gZWxzZSB7Ci0JCW1heGxlbiA9IGtl
eTFsZW47Ci0JfQotCWtleV8xID0ga2V5MS0+a2V5OwotCWtleV8yID0ga2V5Mi0+a2V5OwotCS8q
IGNoZWNrIGZvciBudW1lcmljIGVxdWFsaXR5ICovCi0JZm9yIChpID0gMDsgaSA8IG1heGxlbjsg
aSsrKSB7Ci0JCS8qIGxlZnQtcGFkIHdpdGggemVyb3MgKi8KLQkJdmFsMSA9IChpIDwgKG1heGxl
biAtIGtleTFsZW4pKSA/IDAgOiAqKGtleV8xKyspOwotCQl2YWwyID0gKGkgPCAobWF4bGVuIC0g
a2V5MmxlbikpID8gMCA6ICooa2V5XzIrKyk7Ci0JCWlmICh2YWwxID4gdmFsMikgewotCQkJcmV0
dXJuICgxKTsKLQkJfSBlbHNlIGlmICh2YWwxIDwgdmFsMikgewotCQkJcmV0dXJuICgtMSk7Ci0J
CX0KLQl9Ci0JLyoga2V5cyBhcmUgZXF1YWwgdmFsdWUsIHNvIGNoZWNrIGxlbmd0aHMgKi8KLQlp
ZiAoa2V5MWxlbiA9PSBrZXkybGVuKQotCQlyZXR1cm4gKDApOwotCWVsc2UgaWYgKGtleTFsZW4g
PCBrZXkybGVuKQotCQlyZXR1cm4gKC0xKTsKLQllbHNlCi0JCXJldHVybiAoMSk7Ci19Ci0KLS8q
Ci0gKiBnZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGVkIGtleWluZyBtYXRlcmlhbCBiYXNlZCBvbiB0
aGUgdHdvIGtleXMgYW5kIHRoZQotICogc2hhcmVkIGtleSAoaWYgYXZhaWxhYmxlKS4gZHJhZnQt
aWV0Zi10c3Z3Zy1hdXRoIHNwZWNpZmllcyB0aGUgc3BlY2lmaWMKLSAqIG9yZGVyIGZvciBjb25j
YXRlbmF0aW9uCi0gKi8KLXNjdHBfa2V5X3QgKgotc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9r
ZXlfdCAqa2V5MSwgc2N0cF9rZXlfdCAqa2V5Miwgc2N0cF9rZXlfdCAqc2hhcmVkKQotewotCXVp
bnQzMl90IGtleWxlbjsKLQlzY3RwX2tleV90ICpuZXdfa2V5OwotCXVpbnQ4X3QgKmtleV9wdHI7
Ci0KLQlrZXlsZW4gPSBzY3RwX2dldF9rZXlsZW4oa2V5MSkgKyBzY3RwX2dldF9rZXlsZW4oa2V5
MikgKwotCSAgICBzY3RwX2dldF9rZXlsZW4oc2hhcmVkKTsKLQotCWlmIChrZXlsZW4gPiAwKSB7
Ci0JCS8qIGdldCBzcGFjZSBmb3IgdGhlIG5ldyBrZXkgKi8KLQkJbmV3X2tleSA9IHNjdHBfYWxs
b2Nfa2V5KGtleWxlbik7Ci0JCWlmIChuZXdfa2V5ID09IE5VTEwpIHsKLQkJCS8qIG91dCBvZiBt
ZW1vcnkgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJbmV3X2tleS0+a2V5bGVuID0ga2V5
bGVuOwotCQlrZXlfcHRyID0gbmV3X2tleS0+a2V5OwotCX0gZWxzZSB7Ci0JCS8qIGFsbCBrZXlz
IGVtcHR5L251bGw/ISAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCS8qIGNvbmNhdGVuYXRl
IHRoZSBrZXlzICovCi0JaWYgKHNjdHBfY29tcGFyZV9rZXkoa2V5MSwga2V5MikgPD0gMCkgewot
CQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MSArIGtleTIgKi8KLQkJaWYgKHNjdHBfZ2V0X2tleWxl
bihzaGFyZWQpKSB7Ci0JCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5
bGVuKTsKLQkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47Ci0JCX0KLQkJaWYgKHNjdHBfZ2V0
X2tleWxlbihrZXkxKSkgewotCQkJbWVtY3B5KGtleV9wdHIsIGtleTEtPmtleSwga2V5MS0+a2V5
bGVuKTsKLQkJCWtleV9wdHIgKz0ga2V5MS0+a2V5bGVuOwotCQl9Ci0JCWlmIChzY3RwX2dldF9r
ZXlsZW4oa2V5MikpIHsKLQkJCW1lbWNweShrZXlfcHRyLCBrZXkyLT5rZXksIGtleTItPmtleWxl
bik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MiArIGtleTEgKi8K
LQkJaWYgKHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7Ci0JCQltZW1jcHkoa2V5X3B0ciwgc2hh
cmVkLT5rZXksIHNoYXJlZC0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47
Ci0JCX0KLQkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkyKSkgewotCQkJbWVtY3B5KGtleV9wdHIs
IGtleTItPmtleSwga2V5Mi0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0ga2V5Mi0+a2V5bGVuOwot
CQl9Ci0JCWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MSkpIHsKLQkJCW1lbWNweShrZXlfcHRyLCBr
ZXkxLT5rZXksIGtleTEtPmtleWxlbik7Ci0JCX0KLQl9Ci0JcmV0dXJuIChuZXdfa2V5KTsKLX0K
LQotCi1zY3RwX3NoYXJlZGtleV90ICoKLXNjdHBfYWxsb2Nfc2hhcmVka2V5KHZvaWQpCi17Ci0J
c2N0cF9zaGFyZWRrZXlfdCAqbmV3X2tleTsKLQotCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBf
c2hhcmVka2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSwKLQkJICAgIFNDVFBfTV9BVVRIX0tZKTsK
LQlpZiAobmV3X2tleSA9PSBOVUxMKSB7Ci0JCS8qIG91dCBvZiBtZW1vcnkgKi8KLQkJcmV0dXJu
IChOVUxMKTsKLQl9Ci0JbmV3X2tleS0+a2V5aWQgPSAwOwotCW5ld19rZXktPmtleSA9IE5VTEw7
Ci0JbmV3X2tleS0+cmVmY291bnQgPSAxOwotCW5ld19rZXktPmRlYWN0aXZhdGVkID0gMDsKLQly
ZXR1cm4gKG5ld19rZXkpOwotfQotCi12b2lkCi1zY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hh
cmVka2V5X3QgKnNrZXkpCi17Ci0JaWYgKHNrZXkgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYg
KFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmc2tleS0+cmVmY291bnQpKSB7Ci0J
CWlmIChza2V5LT5rZXkgIT0gTlVMTCkKLQkJCXNjdHBfZnJlZV9rZXkoc2tleS0+a2V5KTsKLQkJ
U0NUUF9GUkVFKHNrZXksIFNDVFBfTV9BVVRIX0tZKTsKLQl9Ci19Ci0KLXNjdHBfc2hhcmVka2V5
X3QgKgotc2N0cF9maW5kX3NoYXJlZGtleShzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5
cywgdWludDE2X3Qga2V5X2lkKQotewotCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7Ci0KLQlMSVNU
X0ZPUkVBQ0goc2tleSwgc2hhcmVkX2tleXMsIG5leHQpIHsKLQkJaWYgKHNrZXktPmtleWlkID09
IGtleV9pZCkKLQkJCXJldHVybiAoc2tleSk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLWlu
dAotc2N0cF9pbnNlcnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlz
LAotCQkgICAgICBzY3RwX3NoYXJlZGtleV90ICpuZXdfc2tleSkKLXsKLQlzY3RwX3NoYXJlZGtl
eV90ICpza2V5OwotCi0JaWYgKChzaGFyZWRfa2V5cyA9PSBOVUxMKSB8fCAobmV3X3NrZXkgPT0g
TlVMTCkpCi0JCXJldHVybiAoRUlOVkFMKTsKLQotCS8qIGluc2VydCBpbnRvIGFuIGVtcHR5IGxp
c3Q/ICovCi0JaWYgKExJU1RfRU1QVFkoc2hhcmVkX2tleXMpKSB7Ci0JCUxJU1RfSU5TRVJUX0hF
QUQoc2hhcmVkX2tleXMsIG5ld19za2V5LCBuZXh0KTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyog
aW5zZXJ0IGludG8gdGhlIGV4aXN0aW5nIGxpc3QsIG9yZGVyZWQgYnkga2V5IGlkICovCi0JTElT
VF9GT1JFQUNIKHNrZXksIHNoYXJlZF9rZXlzLCBuZXh0KSB7Ci0JCWlmIChuZXdfc2tleS0+a2V5
aWQgPCBza2V5LT5rZXlpZCkgewotCQkJLyogaW5zZXJ0IGl0IGJlZm9yZSBoZXJlICovCi0JCQlM
SVNUX0lOU0VSVF9CRUZPUkUoc2tleSwgbmV3X3NrZXksIG5leHQpOwotCQkJcmV0dXJuICgwKTsK
LQkJfSBlbHNlIGlmIChuZXdfc2tleS0+a2V5aWQgPT0gc2tleS0+a2V5aWQpIHsKLQkJCS8qIHJl
cGxhY2UgdGhlIGV4aXN0aW5nIGtleSAqLwotCQkJLyogdmVyaWZ5IHRoaXMga2V5ICpjYW4qIGJl
IHJlcGxhY2VkICovCi0JCQlpZiAoKHNrZXktPmRlYWN0aXZhdGVkKSAmJiAoc2tleS0+cmVmY291
bnQgPiAxKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCQkJImNhbid0IHJl
cGxhY2Ugc2hhcmVkIGtleSBpZCAldVxuIiwKLQkJCQkJbmV3X3NrZXktPmtleWlkKTsKLQkJCQly
ZXR1cm4gKEVCVVNZKTsKLQkJCX0KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCQki
cmVwbGFjaW5nIHNoYXJlZCBrZXkgaWQgJXVcbiIsCi0JCQkJbmV3X3NrZXktPmtleWlkKTsKLQkJ
CUxJU1RfSU5TRVJUX0JFRk9SRShza2V5LCBuZXdfc2tleSwgbmV4dCk7Ci0JCQlMSVNUX1JFTU9W
RShza2V5LCBuZXh0KTsKLQkJCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7Ci0JCQlyZXR1cm4g
KDApOwotCQl9Ci0JCWlmIChMSVNUX05FWFQoc2tleSwgbmV4dCkgPT0gTlVMTCkgewotCQkJLyog
YmVsb25ncyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0ICovCi0JCQlMSVNUX0lOU0VSVF9BRlRFUihz
a2V5LCBuZXdfc2tleSwgbmV4dCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JfQotCS8qIHNob3Vs
ZG4ndCByZWFjaCBoZXJlICovCi0JcmV0dXJuIChFSU5WQUwpOwotfQotCi12b2lkCi1zY3RwX2F1
dGhfa2V5X2FjcXVpcmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlfaWQpCi17
Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8K
LQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5
X2lkKTsKLQotCS8qIGJ1bXAgdGhlIHJlZiBjb3VudCAqLwotCWlmIChza2V5KSB7Ci0JCWF0b21p
Y19hZGRfaW50KCZza2V5LT5yZWZjb3VudCwgMSk7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRI
MiwKLQkJCSIlczogc3RjYiAlcCBrZXkgJXUgcmVmY291bnQgYWNxdWlyZSB0byAlZFxuIiwKLQkJ
CV9fZnVuY19fLCAodm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQpOwotCX0KLX0K
LQotdm9pZAotc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDE2X3Qga2V5X2lkLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17
Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8K
LQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5
X2lkKTsKLQotCS8qIGRlY3JlbWVudCB0aGUgcmVmIGNvdW50ICovCi0JaWYgKHNrZXkpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgyLAotCQkJIiVzOiBzdGNiICVwIGtleSAldSByZWZjb3Vu
dCByZWxlYXNlIHRvICVkXG4iLAotCQkJX19mdW5jX18sICh2b2lkICopc3RjYiwga2V5X2lkLCBz
a2V5LT5yZWZjb3VudCk7Ci0KLQkJLyogc2VlIGlmIGEgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBn
ZW5lcmF0ZWQgKi8KLQkJaWYgKChza2V5LT5yZWZjb3VudCA8PSAyKSAmJiAoc2tleS0+ZGVhY3Rp
dmF0ZWQpKSB7Ci0JCQkvKiBub3RpZnkgVUxQIHRoYXQga2V5IGlzIG5vIGxvbmdlciB1c2VkICov
Ci0JCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwgc3RjYiwKLQkJ
CQkJa2V5X2lkLCAwLCBzb19sb2NrZWQpOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgyLAot
CQkJCSIlczogc3RjYiAlcCBrZXkgJXUgbm8gbG9uZ2VyIHVzZWQsICVkXG4iLAotCQkJCV9fZnVu
Y19fLCAodm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQpOwotCQl9Ci0JCXNjdHBf
ZnJlZV9zaGFyZWRrZXkoc2tleSk7Ci0JfQotfQotCi1zdGF0aWMgc2N0cF9zaGFyZWRrZXlfdCAq
Ci1zY3RwX2NvcHlfc2hhcmVka2V5KGNvbnN0IHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpCi17Ci0J
c2N0cF9zaGFyZWRrZXlfdCAqbmV3X3NrZXk7Ci0KLQlpZiAoc2tleSA9PSBOVUxMKQotCQlyZXR1
cm4gKE5VTEwpOwotCW5ld19za2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQlpZiAobmV3
X3NrZXkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQlpZiAoc2tleS0+a2V5ICE9IE5VTEwp
Ci0JCW5ld19za2V5LT5rZXkgPSBzY3RwX3NldF9rZXkoc2tleS0+a2V5LT5rZXksIHNrZXktPmtl
eS0+a2V5bGVuKTsKLQllbHNlCi0JCW5ld19za2V5LT5rZXkgPSBOVUxMOwotCW5ld19za2V5LT5r
ZXlpZCA9IHNrZXktPmtleWlkOwotCXJldHVybiAobmV3X3NrZXkpOwotfQotCi1pbnQKLXNjdHBf
Y29weV9za2V5bGlzdChjb25zdCBzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzcmMsIHN0cnVjdCBzY3Rw
X2tleWhlYWQgKmRlc3QpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleSwgKm5ld19za2V5Owot
CWludCBjb3VudCA9IDA7Ci0KLQlpZiAoKHNyYyA9PSBOVUxMKSB8fCAoZGVzdCA9PSBOVUxMKSkK
LQkJcmV0dXJuICgwKTsKLQlMSVNUX0ZPUkVBQ0goc2tleSwgc3JjLCBuZXh0KSB7Ci0JCW5ld19z
a2V5ID0gc2N0cF9jb3B5X3NoYXJlZGtleShza2V5KTsKLQkJaWYgKG5ld19za2V5ICE9IE5VTEwp
IHsKLQkJCWlmIChzY3RwX2luc2VydF9zaGFyZWRrZXkoZGVzdCwgbmV3X3NrZXkpKSB7Ci0JCQkJ
c2N0cF9mcmVlX3NoYXJlZGtleShuZXdfc2tleSk7Ci0JCQl9IGVsc2UgewotCQkJCWNvdW50Kys7
Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjb3VudCk7Ci19Ci0KLQotc2N0cF9obWFjbGlzdF90
ICoKLXNjdHBfYWxsb2NfaG1hY2xpc3QodWludDE2X3QgbnVtX2htYWNzKQotewotCXNjdHBfaG1h
Y2xpc3RfdCAqbmV3X2xpc3Q7Ci0JaW50IGFsbG9jX3NpemU7Ci0KLQlhbGxvY19zaXplID0gc2l6
ZW9mKCpuZXdfbGlzdCkgKyBudW1faG1hY3MgKiBzaXplb2YobmV3X2xpc3QtPmhtYWNbMF0pOwot
CVNDVFBfTUFMTE9DKG5ld19saXN0LCBzY3RwX2htYWNsaXN0X3QgKiwgYWxsb2Nfc2l6ZSwKLQkJ
ICAgIFNDVFBfTV9BVVRIX0hMKTsKLQlpZiAobmV3X2xpc3QgPT0gTlVMTCkgewotCQkvKiBvdXQg
b2YgbWVtb3J5ICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW5ld19saXN0LT5tYXhfYWxnbyA9
IG51bV9obWFjczsKLQluZXdfbGlzdC0+bnVtX2FsZ28gPSAwOwotCXJldHVybiAobmV3X2xpc3Qp
OwotfQotCi12b2lkCi1zY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KQot
ewotCWlmIChsaXN0ICE9IE5VTEwpIHsKLQkJU0NUUF9GUkVFKGxpc3QsU0NUUF9NX0FVVEhfSEwp
OwotCQlsaXN0ID0gTlVMTDsKLQl9Ci19Ci0KLWludAotc2N0cF9hdXRoX2FkZF9obWFjaWQoc2N0
cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFjX2lkKQotewotCWludCBpOwotCWlmIChs
aXN0ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCWlmIChsaXN0LT5udW1fYWxnbyA9PSBsaXN0
LT5tYXhfYWxnbykgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkiU0NUUDogSE1B
QyBpZCBsaXN0IGZ1bGwsIGlnbm9yaW5nIGFkZCAldVxuIiwgaG1hY19pZCk7Ci0JCXJldHVybiAo
LTEpOwotCX0KLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQlpZiAoKGht
YWNfaWQgIT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgJiYKLQkgICAgKGhtYWNfaWQgIT0gU0NU
UF9BVVRIX0hNQUNfSURfU0hBMjU2KSkgewotI2Vsc2UKLQlpZiAoaG1hY19pZCAhPSBTQ1RQX0FV
VEhfSE1BQ19JRF9TSEExKSB7Ci0jZW5kaWYKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIE5vdyBp
cyBpdCBhbHJlYWR5IGluIHRoZSBsaXN0ICovCi0JZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9h
bGdvOyBpKyspIHsKLQkJaWYgKGxpc3QtPmhtYWNbaV0gPT0gaG1hY19pZCkgewotCQkJLyogYWxy
ZWFkeSBpbiBsaXN0ICovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCX0KLQlTQ1RQREJHKFNDVFBf
REVCVUdfQVVUSDEsICJTQ1RQOiBhZGQgSE1BQyBpZCAldSB0byBsaXN0XG4iLCBobWFjX2lkKTsK
LQlsaXN0LT5obWFjW2xpc3QtPm51bV9hbGdvKytdID0gaG1hY19pZDsKLQlyZXR1cm4gKDApOwot
fQotCi1zY3RwX2htYWNsaXN0X3QgKgotc2N0cF9jb3B5X2htYWNsaXN0KHNjdHBfaG1hY2xpc3Rf
dCAqbGlzdCkKLXsKLQlzY3RwX2htYWNsaXN0X3QgKm5ld19saXN0OwotCWludCBpOwotCi0JaWYg
KGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQkvKiBnZXQgYSBuZXcgbGlzdCAqLwot
CW5ld19saXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdChsaXN0LT5tYXhfYWxnbyk7Ci0JaWYgKG5l
d19saXN0ID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JLyogY29weSBpdCAqLwotCW5ld19s
aXN0LT5tYXhfYWxnbyA9IGxpc3QtPm1heF9hbGdvOwotCW5ld19saXN0LT5udW1fYWxnbyA9IGxp
c3QtPm51bV9hbGdvOwotCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsgaSsrKQotCQlu
ZXdfbGlzdC0+aG1hY1tpXSA9IGxpc3QtPmhtYWNbaV07Ci0JcmV0dXJuIChuZXdfbGlzdCk7Ci19
Ci0KLXNjdHBfaG1hY2xpc3RfdCAqCi1zY3RwX2RlZmF1bHRfc3VwcG9ydGVkX2htYWNsaXN0KHZv
aWQpCi17Ci0Jc2N0cF9obWFjbGlzdF90ICpuZXdfbGlzdDsKLQotI2lmIGRlZmluZWQoU0NUUF9T
VVBQT1JUX0hNQUNfU0hBMjU2KQotCW5ld19saXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdCgyKTsK
LSNlbHNlCi0JbmV3X2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KDEpOwotI2VuZGlmCi0JaWYg
KG5ld19saXN0ID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0jaWYgZGVmaW5lZChTQ1RQX1NV
UFBPUlRfSE1BQ19TSEEyNTYpCi0JLyogV2UgcHJlZmVyIFNIQTI1Niwgc28gbGlzdCBpdCBmaXJz
dCAqLwotCSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lkKG5ld19saXN0LCBTQ1RQX0FVVEhfSE1B
Q19JRF9TSEEyNTYpOwotI2VuZGlmCi0JKHZvaWQpc2N0cF9hdXRoX2FkZF9obWFjaWQobmV3X2xp
c3QsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpOwotCXJldHVybiAobmV3X2xpc3QpOwotfQotCi0v
Ki0KLSAqIEhNQUMgYWxnb3MgYXJlIGxpc3RlZCBpbiBwcmlvcml0eS9wcmVmZXJlbmNlIG9yZGVy
Ci0gKiBmaW5kIHRoZSBiZXN0IEhNQUMgaWQgdG8gdXNlIGZvciB0aGUgcGVlciBiYXNlZCBvbiBs
b2NhbCBzdXBwb3J0Ci0gKi8KLXVpbnQxNl90Ci1zY3RwX25lZ290aWF0ZV9obWFjaWQoc2N0cF9o
bWFjbGlzdF90ICpwZWVyLCBzY3RwX2htYWNsaXN0X3QgKmxvY2FsKQotewotCWludCBpLCBqOwot
Ci0JaWYgKChsb2NhbCA9PSBOVUxMKSB8fCAocGVlciA9PSBOVUxMKSkKLQkJcmV0dXJuIChTQ1RQ
X0FVVEhfSE1BQ19JRF9SU1ZEKTsKLQotCWZvciAoaSA9IDA7IGkgPCBwZWVyLT5udW1fYWxnbzsg
aSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBsb2NhbC0+bnVtX2FsZ287IGorKykgewotCQkJaWYg
KHBlZXItPmhtYWNbaV0gPT0gbG9jYWwtPmhtYWNbal0pIHsKLQkJCQkvKiBmb3VuZCB0aGUgImJl
c3QiIG9uZSAqLwotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCQkJIlNDVFA6IG5l
Z290aWF0ZWQgcGVlciBITUFDIGlkICV1XG4iLAotCQkJCQlwZWVyLT5obWFjW2ldKTsKLQkJCQly
ZXR1cm4gKHBlZXItPmhtYWNbaV0pOwotCQkJfQotCQl9Ci0JfQotCS8qIGRpZG4ndCBmaW5kIG9u
ZSEgKi8KLQlyZXR1cm4gKFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQpOwotfQotCi0vKi0KLSAqIHNl
cmlhbGl6ZSB0aGUgSE1BQyBhbGdvIGxpc3QgYW5kIHJldHVybiBzcGFjZSB1c2VkCi0gKiBjYWxs
ZXIgbXVzdCBndWFyYW50ZWUgcHRyIGhhcyBhcHByb3ByaWF0ZSBzcGFjZQotICovCi1pbnQKLXNj
dHBfc2VyaWFsaXplX2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCwgdWludDhfdCAqcHRy
KQotewotCWludCBpOwotCXVpbnQxNl90IGhtYWNfaWQ7Ci0KLQlpZiAobGlzdCA9PSBOVUxMKQot
CQlyZXR1cm4gKDApOwotCi0JZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBpKyspIHsK
LQkJaG1hY19pZCA9IGh0b25zKGxpc3QtPmhtYWNbaV0pOwotCQltZW1jcHkocHRyLCAmaG1hY19p
ZCwgc2l6ZW9mKGhtYWNfaWQpKTsKLQkJcHRyICs9IHNpemVvZihobWFjX2lkKTsKLQl9Ci0JcmV0
dXJuIChsaXN0LT5udW1fYWxnbyAqIHNpemVvZihobWFjX2lkKSk7Ci19Ci0KLWludAotc2N0cF92
ZXJpZnlfaG1hY19wYXJhbSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzLCB1aW50
MzJfdCBudW1faG1hY3MpCi17Ci0JdWludDMyX3QgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBudW1f
aG1hY3M7IGkrKykgewotCQlpZiAobnRvaHMoaG1hY3MtPmhtYWNfaWRzW2ldKSA9PSBTQ1RQX0FV
VEhfSE1BQ19JRF9TSEExKSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JfQotCXJldHVybiAoLTEp
OwotfQotCi1zY3RwX2F1dGhpbmZvX3QgKgotc2N0cF9hbGxvY19hdXRoaW5mbyh2b2lkKQotewot
CXNjdHBfYXV0aGluZm9fdCAqbmV3X2F1dGhpbmZvOwotCi0JU0NUUF9NQUxMT0MobmV3X2F1dGhp
bmZvLCBzY3RwX2F1dGhpbmZvX3QgKiwgc2l6ZW9mKCpuZXdfYXV0aGluZm8pLAotCQkgICAgU0NU
UF9NX0FVVEhfSUYpOwotCi0JaWYgKG5ld19hdXRoaW5mbyA9PSBOVUxMKSB7Ci0JCS8qIG91dCBv
ZiBtZW1vcnkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbWVtc2V0KG5ld19hdXRoaW5mbywg
MCwgc2l6ZW9mKCpuZXdfYXV0aGluZm8pKTsKLQlyZXR1cm4gKG5ld19hdXRoaW5mbyk7Ci19Ci0K
LXZvaWQKLXNjdHBfZnJlZV9hdXRoaW5mbyhzY3RwX2F1dGhpbmZvX3QgKmF1dGhpbmZvKQotewot
CWlmIChhdXRoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAoYXV0aGluZm8tPnJhbmRv
bSAhPSBOVUxMKQotCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yYW5kb20pOwotCWlmIChhdXRo
aW5mby0+cGVlcl9yYW5kb20gIT0gTlVMTCkKLQkJc2N0cF9mcmVlX2tleShhdXRoaW5mby0+cGVl
cl9yYW5kb20pOwotCWlmIChhdXRoaW5mby0+YXNzb2Nfa2V5ICE9IE5VTEwpCi0JCXNjdHBfZnJl
ZV9rZXkoYXV0aGluZm8tPmFzc29jX2tleSk7Ci0JaWYgKGF1dGhpbmZvLT5yZWN2X2tleSAhPSBO
VUxMKQotCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yZWN2X2tleSk7Ci0KLQkvKiBXZSBhcmUg
Tk9UIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgYXV0aGluZm8ncyByaWdodCBub3cuLi4gKi8KLQkv
KiBTQ1RQX0ZSRUUoYXV0aGluZm8sIFNDVFBfTV9BVVRIXz8/KTsgKi8KLX0KLQotCi11aW50MzJf
dAotc2N0cF9nZXRfYXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19hbGdvKQotewotCWludCBz
aXplOwotCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSArIHNjdHBfZ2V0
X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOwotCXJldHVybiAoU0NUUF9TSVpFMzIoc2l6ZSkp
OwotfQotCi11aW50MzJfdAotc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKHVpbnQxNl90IGhtYWNf
YWxnbykKLXsKLQlzd2l0Y2ggKGhtYWNfYWxnbykgewotCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURf
U0hBMToKLQkJcmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExKTsKLSNpZiBkZWZpbmVk
KFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1
NjoKLQkJcmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYpOwotI2VuZGlmCi0JZGVm
YXVsdDoKLQkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8K
LQkJcmV0dXJuICgwKTsKLQl9IC8qIGVuZCBzd2l0Y2ggKi8KLX0KLQotc3RhdGljIGlubGluZSBp
bnQKLXNjdHBfZ2V0X2htYWNfYmxvY2tfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKLXsKLQlzd2l0
Y2ggKGhtYWNfYWxnbykgewotCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKLQkJcmV0dXJu
ICg2NCk7Ci0jaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCi0JY2FzZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9TSEEyNTY6Ci0JCXJldHVybiAoNjQpOwotI2VuZGlmCi0JY2FzZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9SU1ZEOgotCWRlZmF1bHQ6Ci0JCS8qIHVua25vd24gSE1BQyBhbGdvcml0
aG06IGNhbid0IGRvIGFueXRoaW5nICovCi0JCXJldHVybiAoMCk7Ci0JfSAvKiBlbmQgc3dpdGNo
ICovCi19Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0vKiBfX1VzZXJzcGFjZV9fIFNI
QTFfSW5pdCBpcyBkZWZpbmVkIGluIGxpYmNyeXB0by5hIChsaWJzc2wtZGV2IG9uIFVidW50dSkg
Ki8KLSNlbmRpZgotc3RhdGljIHZvaWQKLXNjdHBfaG1hY19pbml0KHVpbnQxNl90IGhtYWNfYWxn
bywgc2N0cF9oYXNoX2NvbnRleHRfdCAqY3R4KQotewotCXN3aXRjaCAoaG1hY19hbGdvKSB7Ci0J
Y2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgotCQlTQ1RQX1NIQTFfSU5JVCgmY3R4LT5zaGEx
KTsKLQkJYnJlYWs7Ci0jaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCi0JY2Fz
ZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTY6Ci0JCVNDVFBfU0hBMjU2X0lOSVQoJmN0eC0+c2hh
MjU2KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQ6Ci0J
ZGVmYXVsdDoKLQkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcg
Ki8KLQkJcmV0dXJuOwotCX0gLyogZW5kIHN3aXRjaCAqLwotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9obWFjX3VwZGF0ZSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0
eCwKLSAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuKQotewotCXN3aXRjaCAoaG1h
Y19hbGdvKSB7Ci0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgotCQlTQ1RQX1NIQTFfVVBE
QVRFKCZjdHgtPnNoYTEsIHRleHQsIHRleHRsZW4pOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKFND
VFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoK
LQkJU0NUUF9TSEEyNTZfVVBEQVRFKCZjdHgtPnNoYTI1NiwgdGV4dCwgdGV4dGxlbik7Ci0JCWJy
ZWFrOwotI2VuZGlmCi0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgotCWRlZmF1bHQ6Ci0J
CS8qIHVua25vd24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRoaW5nICovCi0JCXJldHVy
bjsKLQl9IC8qIGVuZCBzd2l0Y2ggKi8KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaG1hY19maW5h
bCh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKLSAgICB1aW50
OF90ICpkaWdlc3QpCi17Ci0Jc3dpdGNoIChobWFjX2FsZ28pIHsKLQljYXNlIFNDVFBfQVVUSF9I
TUFDX0lEX1NIQTE6Ci0JCVNDVFBfU0hBMV9GSU5BTChkaWdlc3QsICZjdHgtPnNoYTEpOwotCQli
cmVhazsKLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQljYXNlIFNDVFBf
QVVUSF9ITUFDX0lEX1NIQTI1NjoKLQkJU0NUUF9TSEEyNTZfRklOQUwoZGlnZXN0LCAmY3R4LT5z
aGEyNTYpOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfUlNWRDoK
LQlkZWZhdWx0OgotCQkvKiB1bmtub3duIEhNQUMgYWxnb3JpdGhtOiBjYW4ndCBkbyBhbnl0aGlu
ZyAqLwotCQlyZXR1cm47Ci0JfSAvKiBlbmQgc3dpdGNoICovCi19Ci0KLS8qLQotICogS2V5ZWQt
SGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbjogRklQUyAxOTggKFJGQyAyMTA0KQot
ICoKLSAqIENvbXB1dGUgdGhlIEhNQUMgZGlnZXN0IHVzaW5nIHRoZSBkZXNpcmVkIGhhc2gga2V5
LCB0ZXh0LCBhbmQgSE1BQwotICogYWxnb3JpdGhtLiAgUmVzdWx0aW5nIGRpZ2VzdCBpcyBwbGFj
ZWQgaW4gJ2RpZ2VzdCcgYW5kIGRpZ2VzdCBsZW5ndGgKLSAqIGlzIHJldHVybmVkLCBpZiB0aGUg
SE1BQyB3YXMgcGVyZm9ybWVkLgotICoKLSAqIFdBUk5JTkc6IGl0IGlzIHVwIHRvIHRoZSBjYWxs
ZXIgdG8gc3VwcGx5IHN1ZmZpY2llbnQgc3BhY2UgdG8gaG9sZCB0aGUKLSAqIHJlc3VsdGFudCBk
aWdlc3QuCi0gKi8KLXVpbnQzMl90Ci1zY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50
OF90ICprZXksIHVpbnQzMl90IGtleWxlbiwKLSAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0
ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpCi17Ci0JdWludDMyX3QgZGlnZXN0bGVuOwotCXVpbnQz
Ml90IGJsb2NrbGVuOwotCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OwotCXVpbnQ4X3QgaXBhZFsx
MjhdLCBvcGFkWzEyOF07CS8qIGtleWVkIGhhc2ggaW5uZXIvb3V0ZXIgcGFkcyAqLwotCXVpbnQ4
X3QgdGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCXVpbnQzMl90IGk7Ci0KLQkvKiBz
YW5pdHkgY2hlY2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KLQlpZiAoKGtleSA9PSBOVUxM
KSB8fCAoa2V5bGVuID09IDApIHx8ICh0ZXh0ID09IE5VTEwpIHx8Ci0JICAgICh0ZXh0bGVuID09
IDApIHx8IChkaWdlc3QgPT0gTlVMTCkpIHsKLQkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5
IGtleSBvciB0ZXh0IG9yIGRpZ2VzdCBzdG9yZSAqLwotCQlyZXR1cm4gKDApOwotCX0KLQkvKiB2
YWxpZGF0ZSB0aGUgaG1hYyBhbGdvIGFuZCBnZXQgdGhlIGRpZ2VzdCBsZW5ndGggKi8KLQlkaWdl
c3RsZW4gPSBzY3RwX2dldF9obWFjX2RpZ2VzdF9sZW4oaG1hY19hbGdvKTsKLQlpZiAoZGlnZXN0
bGVuID09IDApCi0JCXJldHVybiAoMCk7Ci0KLQkvKiBoYXNoIHRoZSBrZXkgaWYgaXQgaXMgbG9u
Z2VyIHRoYW4gdGhlIGhhc2ggYmxvY2sgc2l6ZSAqLwotCWJsb2NrbGVuID0gc2N0cF9nZXRfaG1h
Y19ibG9ja19sZW4oaG1hY19hbGdvKTsKLQlpZiAoa2V5bGVuID4gYmxvY2tsZW4pIHsKLQkJc2N0
cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2Fs
Z28sICZjdHgsIGtleSwga2V5bGVuKTsKLQkJc2N0cF9obWFjX2ZpbmFsKGhtYWNfYWxnbywgJmN0
eCwgdGVtcCk7Ci0JCS8qIHNldCB0aGUgaGFzaGVkIGtleSBhcyB0aGUga2V5ICovCi0JCWtleWxl
biA9IGRpZ2VzdGxlbjsKLQkJa2V5ID0gdGVtcDsKLQl9Ci0JLyogaW5pdGlhbGl6ZSB0aGUgaW5u
ZXIvb3V0ZXIgcGFkcyB3aXRoIHRoZSBrZXkgYW5kICJhcHBlbmQiIHplcm9lcyAqLwotCW1lbXNl
dChpcGFkLCAwLCBibG9ja2xlbik7Ci0JbWVtc2V0KG9wYWQsIDAsIGJsb2NrbGVuKTsKLQltZW1j
cHkoaXBhZCwga2V5LCBrZXlsZW4pOwotCW1lbWNweShvcGFkLCBrZXksIGtleWxlbik7Ci0KLQkv
KiBYT1IgdGhlIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCi0JZm9yIChpID0gMDsg
aSA8IGJsb2NrbGVuOyBpKyspIHsKLQkJaXBhZFtpXSBePSAweDM2OwotCQlvcGFkW2ldIF49IDB4
NWM7Ci0JfQotCi0JLyogcGVyZm9ybSBpbm5lciBoYXNoICovCi0Jc2N0cF9obWFjX2luaXQoaG1h
Y19hbGdvLCAmY3R4KTsKLQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgaXBhZCwg
YmxvY2tsZW4pOwotCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZXh0LCB0ZXh0
bGVuKTsKLQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKLQotCS8qIHBl
cmZvcm0gb3V0ZXIgaGFzaCAqLwotCXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7Ci0J
c2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIG9wYWQsIGJsb2NrbGVuKTsKLQlzY3Rw
X2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgdGVtcCwgZGlnZXN0bGVuKTsKLQlzY3RwX2ht
YWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCBkaWdlc3QpOwotCi0JcmV0dXJuIChkaWdlc3RsZW4p
OwotfQotCi0vKiBtYnVmIHZlcnNpb24gKi8KLXVpbnQzMl90Ci1zY3RwX2htYWNfbSh1aW50MTZf
dCBobWFjX2FsZ28sIHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5bGVuLAotICAgIHN0cnVjdCBt
YnVmICptLCB1aW50MzJfdCBtX29mZnNldCwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCB0cmFp
bGVyKQotewotCXVpbnQzMl90IGRpZ2VzdGxlbjsKLQl1aW50MzJfdCBibG9ja2xlbjsKLQlzY3Rw
X2hhc2hfY29udGV4dF90IGN0eDsKLQl1aW50OF90IGlwYWRbMTI4XSwgb3BhZFsxMjhdOwkvKiBr
ZXllZCBoYXNoIGlubmVyL291dGVyIHBhZHMgKi8KLQl1aW50OF90IHRlbXBbU0NUUF9BVVRIX0RJ
R0VTVF9MRU5fTUFYXTsKLQl1aW50MzJfdCBpOwotCXN0cnVjdCBtYnVmICptX3RtcDsKLQotCS8q
IHNhbml0eSBjaGVjayB0aGUgbWF0ZXJpYWwgYW5kIGxlbmd0aCAqLwotCWlmICgoa2V5ID09IE5V
TEwpIHx8IChrZXlsZW4gPT0gMCkgfHwgKG0gPT0gTlVMTCkgfHwgKGRpZ2VzdCA9PSBOVUxMKSkg
ewotCQkvKiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0
b3JlICovCi0JCXJldHVybiAoMCk7Ci0JfQotCS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5k
IGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLwotCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGln
ZXN0X2xlbihobWFjX2FsZ28pOwotCWlmIChkaWdlc3RsZW4gPT0gMCkKLQkJcmV0dXJuICgwKTsK
LQotCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBz
aXplICovCi0JYmxvY2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOwot
CWlmIChrZXlsZW4gPiBibG9ja2xlbikgewotCQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZj
dHgpOwotCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwga2V5LCBrZXlsZW4pOwot
CQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKLQkJLyogc2V0IHRoZSBo
YXNoZWQga2V5IGFzIHRoZSBrZXkgKi8KLQkJa2V5bGVuID0gZGlnZXN0bGVuOwotCQlrZXkgPSB0
ZW1wOwotCX0KLQkvKiBpbml0aWFsaXplIHRoZSBpbm5lci9vdXRlciBwYWRzIHdpdGggdGhlIGtl
eSBhbmQgImFwcGVuZCIgemVyb2VzICovCi0JbWVtc2V0KGlwYWQsIDAsIGJsb2NrbGVuKTsKLQlt
ZW1zZXQob3BhZCwgMCwgYmxvY2tsZW4pOwotCW1lbWNweShpcGFkLCBrZXksIGtleWxlbik7Ci0J
bWVtY3B5KG9wYWQsIGtleSwga2V5bGVuKTsKLQotCS8qIFhPUiB0aGUga2V5IHdpdGggaXBhZCBh
bmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYmxvY2tsZW47IGkrKykgewotCQlp
cGFkW2ldIF49IDB4MzY7Ci0JCW9wYWRbaV0gXj0gMHg1YzsKLQl9Ci0KLQkvKiBwZXJmb3JtIGlu
bmVyIGhhc2ggKi8KLQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOwotCXNjdHBfaG1h
Y191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCBpcGFkLCBibG9ja2xlbik7Ci0JLyogZmluZCB0aGUg
Y29ycmVjdCBzdGFydGluZyBtYnVmIGFuZCBvZmZzZXQgKGdldCBzdGFydCBvZiB0ZXh0KSAqLwot
CW1fdG1wID0gbTsKLQl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYmIChtX29mZnNldCA+PSAodWlu
dDMyX3QpIFNDVFBfQlVGX0xFTihtX3RtcCkpKSB7Ci0JCW1fb2Zmc2V0IC09IFNDVFBfQlVGX0xF
TihtX3RtcCk7Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotCS8qIG5vdyB1
c2UgdGhlIHJlc3Qgb2YgdGhlIG1idWYgY2hhaW4gZm9yIHRoZSB0ZXh0ICovCi0Jd2hpbGUgKG1f
dG1wICE9IE5VTEwpIHsKLQkJaWYgKChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBOVUxMKSAmJiB0
cmFpbGVyKSB7Ci0JCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3Rt
cCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAotCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtICh0
cmFpbGVyK21fb2Zmc2V0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNf
YWxnbywgJmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAotCQkJCQkgU0NU
UF9CVUZfTEVOKG1fdG1wKSAtIG1fb2Zmc2V0KTsKLQkJfQotCi0JCS8qIGNsZWFyIHRoZSBvZmZz
ZXQgc2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLwotCQltX29mZnNldCA9IDA7
Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotCXNjdHBfaG1hY19maW5hbCho
bWFjX2FsZ28sICZjdHgsIHRlbXApOwotCi0JLyogcGVyZm9ybSBvdXRlciBoYXNoICovCi0Jc2N0
cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxn
bywgJmN0eCwgb3BhZCwgYmxvY2tsZW4pOwotCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAm
Y3R4LCB0ZW1wLCBkaWdlc3RsZW4pOwotCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgs
IGRpZ2VzdCk7Ci0KLQlyZXR1cm4gKGRpZ2VzdGxlbik7Ci19Ci0KLS8qLQotICogdmVyaWZ5IHRo
ZSBITUFDIGRpZ2VzdCB1c2luZyB0aGUgZGVzaXJlZCBoYXNoIGtleSwgdGV4dCwgYW5kIEhNQUMK
LSAqIGFsZ29yaXRobS4KLSAqIFJldHVybnMgLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KLSAq
LwotaW50Ci1zY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5
LCB1aW50MzJfdCBrZXlsZW4sCi0gICAgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwK
LSAgICB1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikKLXsKLQl1aW50MzJfdCBs
ZW47Ci0JdWludDhfdCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07Ci0KLQkvKiBzYW5p
dHkgY2hlY2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KLQlpZiAoKGtleSA9PSBOVUxMKSB8
fCAoa2V5bGVuID09IDApIHx8Ci0JICAgICh0ZXh0ID09IE5VTEwpIHx8ICh0ZXh0bGVuID09IDAp
IHx8IChkaWdlc3QgPT0gTlVMTCkpIHsKLQkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtl
eSBvciB0ZXh0IG9yIGRpZ2VzdCAqLwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JbGVuID0gc2N0cF9n
ZXRfaG1hY19kaWdlc3RfbGVuKGhtYWNfYWxnbyk7Ci0JaWYgKChsZW4gPT0gMCkgfHwgKGRpZ2Vz
dGxlbiAhPSBsZW4pKQotCQlyZXR1cm4gKC0xKTsKLQotCS8qIGNvbXB1dGUgdGhlIGV4cGVjdGVk
IGhhc2ggKi8KLQlpZiAoc2N0cF9obWFjKGhtYWNfYWxnbywga2V5LCBrZXlsZW4sIHRleHQsIHRl
eHRsZW4sIHRlbXApICE9IGxlbikKLQkJcmV0dXJuICgtMSk7Ci0KLQlpZiAobWVtY21wKGRpZ2Vz
dCwgdGVtcCwgZGlnZXN0bGVuKSAhPSAwKQotCQlyZXR1cm4gKC0xKTsKLQllbHNlCi0JCXJldHVy
biAoMCk7Ci19Ci0KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSByZXF1ZXN0ZWQgSE1BQyB1c2luZyBh
IGtleSBzdHJ1Y3QgKHdoaWNoIG1heSBiZSBtb2RpZmllZCBpZgotICogdGhlIGtleWxlbiBleGNl
ZWRzIHRoZSBITUFDIGJsb2NrIGxlbikuCi0gKi8KLXVpbnQzMl90Ci1zY3RwX2NvbXB1dGVfaG1h
Yyh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgdWludDhfdCAqdGV4dCwKLSAg
ICB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpCi17Ci0JdWludDMyX3QgZGlnZXN0
bGVuOwotCXVpbnQzMl90IGJsb2NrbGVuOwotCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OwotCXVp
bnQ4X3QgdGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCi0JLyogc2FuaXR5IGNoZWNr
ICovCi0JaWYgKChrZXkgPT0gTlVMTCkgfHwgKHRleHQgPT0gTlVMTCkgfHwgKHRleHRsZW4gPT0g
MCkgfHwKLQkgICAgKGRpZ2VzdCA9PSBOVUxMKSkgewotCQkvKiBjYW4ndCBkbyBITUFDIHdpdGgg
ZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICovCi0JCXJldHVybiAoMCk7Ci0JfQot
CS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLwot
CWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOwotCWlmIChk
aWdlc3RsZW4gPT0gMCkKLQkJcmV0dXJuICgwKTsKLQotCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBp
cyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICovCi0JYmxvY2tsZW4gPSBzY3RwX2dl
dF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOwotCWlmIChrZXktPmtleWxlbiA+IGJsb2NrbGVu
KSB7Ci0JCXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7Ci0JCXNjdHBfaG1hY191cGRh
dGUoaG1hY19hbGdvLCAmY3R4LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOwotCQlzY3RwX2htYWNf
ZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKLQkJLyogc2F2ZSB0aGUgaGFzaGVkIGtleSBh
cyB0aGUgbmV3IGtleSAqLwotCQlrZXktPmtleWxlbiA9IGRpZ2VzdGxlbjsKLQkJbWVtY3B5KGtl
eS0+a2V5LCB0ZW1wLCBrZXktPmtleWxlbik7Ci0JfQotCXJldHVybiAoc2N0cF9obWFjKGhtYWNf
YWxnbywga2V5LT5rZXksIGtleS0+a2V5bGVuLCB0ZXh0LCB0ZXh0bGVuLAotCSAgICBkaWdlc3Qp
KTsKLX0KLQotLyogbWJ1ZiB2ZXJzaW9uICovCi11aW50MzJfdAotc2N0cF9jb21wdXRlX2htYWNf
bSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgc3RydWN0IG1idWYgKm0sCi0g
ICAgdWludDMyX3QgbV9vZmZzZXQsIHVpbnQ4X3QgKmRpZ2VzdCkKLXsKLQl1aW50MzJfdCBkaWdl
c3RsZW47Ci0JdWludDMyX3QgYmxvY2tsZW47Ci0Jc2N0cF9oYXNoX2NvbnRleHRfdCBjdHg7Ci0J
dWludDhfdCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07Ci0KLQkvKiBzYW5pdHkgY2hl
Y2sgKi8KLQlpZiAoKGtleSA9PSBOVUxMKSB8fCAobSA9PSBOVUxMKSB8fCAoZGlnZXN0ID09IE5V
TEwpKSB7Ci0JCS8qIGNhbid0IGRvIEhNQUMgd2l0aCBlbXB0eSBrZXkgb3IgdGV4dCBvciBkaWdl
c3Qgc3RvcmUgKi8KLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyogdmFsaWRhdGUgdGhlIGhtYWMgYWxn
byBhbmQgZ2V0IHRoZSBkaWdlc3QgbGVuZ3RoICovCi0JZGlnZXN0bGVuID0gc2N0cF9nZXRfaG1h
Y19kaWdlc3RfbGVuKGhtYWNfYWxnbyk7Ci0JaWYgKGRpZ2VzdGxlbiA9PSAwKQotCQlyZXR1cm4g
KDApOwotCi0JLyogaGFzaCB0aGUga2V5IGlmIGl0IGlzIGxvbmdlciB0aGFuIHRoZSBoYXNoIGJs
b2NrIHNpemUgKi8KLQlibG9ja2xlbiA9IHNjdHBfZ2V0X2htYWNfYmxvY2tfbGVuKGhtYWNfYWxn
byk7Ci0JaWYgKGtleS0+a2V5bGVuID4gYmxvY2tsZW4pIHsKLQkJc2N0cF9obWFjX2luaXQoaG1h
Y19hbGdvLCAmY3R4KTsKLQkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtleS0+
a2V5LCBrZXktPmtleWxlbik7Ci0JCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIHRl
bXApOwotCQkvKiBzYXZlIHRoZSBoYXNoZWQga2V5IGFzIHRoZSBuZXcga2V5ICovCi0JCWtleS0+
a2V5bGVuID0gZGlnZXN0bGVuOwotCQltZW1jcHkoa2V5LT5rZXksIHRlbXAsIGtleS0+a2V5bGVu
KTsKLQl9Ci0JcmV0dXJuIChzY3RwX2htYWNfbShobWFjX2FsZ28sIGtleS0+a2V5LCBrZXktPmtl
eWxlbiwgbSwgbV9vZmZzZXQsIGRpZ2VzdCwgMCkpOwotfQotCi1pbnQKLXNjdHBfYXV0aF9pc19z
dXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQxNl90IGlkKQotewotCWlu
dCBpOwotCi0JaWYgKChsaXN0ID09IE5VTEwpIHx8IChpZCA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9S
U1ZEKSkKLQkJcmV0dXJuICgwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsg
aSsrKQotCQlpZiAobGlzdC0+aG1hY1tpXSA9PSBpZCkKLQkJCXJldHVybiAoMSk7Ci0KLQkvKiBu
b3QgaW4gdGhlIGxpc3QgKi8KLQlyZXR1cm4gKDApOwotfQotCi0KLS8qLQotICogY2xlYXIgYW55
IGNhY2hlZCBrZXkocykgaWYgdGhleSBtYXRjaCB0aGUgZ2l2ZW4ga2V5IGlkIG9uIGFuIGFzc29j
aWF0aW9uLgotICogdGhlIGNhY2hlZCBrZXkocykgd2lsbCBiZSByZWNvbXB1dGVkIGFuZCByZS1j
YWNoZWQgYXQgbmV4dCB1c2UuCi0gKiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkgaGVsZAot
ICovCi12b2lkCi1zY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1
aW50MTZfdCBrZXlpZCkKLXsKLQlpZiAoc3RjYiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAo
a2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCkgewotCQlzY3RwX2ZyZWVf
a2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5KTsKLQkJc3RjYi0+YXNvYy5hdXRoaW5m
by5hc3NvY19rZXkgPSBOVUxMOwotCX0KLQlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5m
by5yZWN2X2tleWlkKSB7Ci0JCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2
X2tleSk7Ci0JCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPSBOVUxMOwotCX0KLX0KLQot
LyotCi0gKiBjbGVhciBhbnkgY2FjaGVkIGtleShzKSBpZiB0aGV5IG1hdGNoIHRoZSBnaXZlbiBr
ZXkgaWQgZm9yIGFsbCBhc3NvY3Mgb24KLSAqIGFuIGVuZHBvaW50LgotICogQVNTVU1FUyBJTlBf
V0xPQ0sgaXMgYWxyZWFkeSBoZWxkCi0gKi8KLXZvaWQKLXNjdHBfY2xlYXJfY2FjaGVka2V5c19l
cChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2I7Ci0KLQlpZiAoaW5wID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qIGNsZWFy
IHRoZSBjYWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIG9uIHRoaXMgaW5zdGFuY2UgKi8KLQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwga2V5aWQp
OwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JfQotfQotCi0vKi0KLSAqIGRlbGV0ZSBhIHNo
YXJlZCBrZXkgZnJvbSBhbiBhc3NvY2lhdGlvbgotICogQVNTVU1FUyBUQ0JfTE9DSyBpcyBhbHJl
YWR5IGhlbGQKLSAqLwotaW50Ci1zY3RwX2RlbGV0ZV9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5OwotCi0J
aWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBpcyB0aGUga2V5aWQgdGhl
IGFzc29jIGFjdGl2ZSBzZW5kaW5nIGtleSAqLwotCWlmIChrZXlpZCA9PSBzdGNiLT5hc29jLmF1
dGhpbmZvLmFjdGl2ZV9rZXlpZCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBkb2VzIHRoZSBrZXkg
ZXhpc3Q/ICovCi0Jc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVk
X2tleXMsIGtleWlkKTsKLQlpZiAoc2tleSA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQotCS8q
IGFyZSB0aGVyZSBvdGhlciByZWZjb3VudCBob2xkZXJzIG9uIHRoZSBrZXk/ICovCi0JaWYgKHNr
ZXktPnJlZmNvdW50ID4gMSkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiByZW1vdmUgaXQgKi8KLQlM
SVNUX1JFTU9WRShza2V5LCBuZXh0KTsKLQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBm
cmVlcyBza2V5LT5rZXkgYXMgd2VsbCAqLwotCi0JLyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICov
Ci0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIGtleWlkKTsKLQlyZXR1cm4gKDApOwotfQot
Ci0vKi0KLSAqIGRlbGV0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVuZHBvaW50Ci0gKiBBU1NV
TUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKLSAqLwotaW50Ci1zY3RwX2RlbGV0ZV9zaGFy
ZWRrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpCi17Ci0Jc2N0
cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCWlmIChpbnAgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7
Ci0KLQkvKiBpcyB0aGUga2V5aWQgdGhlIGFjdGl2ZSBzZW5kaW5nIGtleSBvbiB0aGUgZW5kcG9p
bnQgKi8KLQlpZiAoa2V5aWQgPT0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQpCi0JCXJldHVy
biAoLTEpOwotCi0JLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLwotCXNrZXkgPSBzY3RwX2ZpbmRf
c2hhcmVka2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlkKTsKLQlpZiAoc2tleSA9
PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQotCS8qIGVuZHBvaW50IGtleXMgYXJlIG5vdCByZWZj
b3VudGVkICovCi0KLQkvKiByZW1vdmUgaXQgKi8KLQlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsK
LQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBmcmVlcyBza2V5LT5rZXkgYXMgd2VsbCAq
LwotCi0JLyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICovCi0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlz
X2VwKGlucCwga2V5aWQpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qLQotICogc2V0IHRoZSBhY3Rp
dmUga2V5IG9uIGFuIGFzc29jaWF0aW9uCi0gKiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkg
aGVsZAotICovCi1pbnQKLXNjdHBfYXV0aF9zZXRhY3RpdmVrZXkoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5ID0gTlVMTDsK
LQotCS8qIGZpbmQgdGhlIGtleSBvbiB0aGUgYXNzb2MgKi8KLQlza2V5ID0gc2N0cF9maW5kX3No
YXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5aWQpOwotCWlmIChza2V5ID09IE5V
TEwpIHsKLQkJLyogdGhhdCBrZXkgZG9lc24ndCBleGlzdCAqLwotCQlyZXR1cm4gKC0xKTsKLQl9
Ci0JaWYgKChza2V5LT5kZWFjdGl2YXRlZCkgJiYgKHNrZXktPnJlZmNvdW50ID4gMSkpIHsKLQkJ
LyogY2FuJ3QgcmVhY3RpdmF0ZSBhIGRlYWN0aXZhdGVkIGtleSB3aXRoIG90aGVyIHJlZmNvdW50
cyAqLwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQkvKiBzZXQgdGhlIChuZXcpIGFjdGl2ZSBrZXkg
Ki8KLQlzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCA9IGtleWlkOwotCS8qIHJlc2V0
IHRoZSBkZWFjdGl2YXRlZCBmbGFnICovCi0Jc2tleS0+ZGVhY3RpdmF0ZWQgPSAwOwotCi0JcmV0
dXJuICgwKTsKLX0KLQotLyotCi0gKiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24gYW4gZW5kcG9pbnQK
LSAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAotICovCi1pbnQKLXNjdHBfYXV0
aF9zZXRhY3RpdmVrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQp
Ci17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQgdGhlIGtleSAqLwotCXNr
ZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlk
KTsKLQlpZiAoc2tleSA9PSBOVUxMKSB7Ci0JCS8qIHRoYXQga2V5IGRvZXNuJ3QgZXhpc3QgKi8K
LQkJcmV0dXJuICgtMSk7Ci0JfQotCWlucC0+c2N0cF9lcC5kZWZhdWx0X2tleWlkID0ga2V5aWQ7
Ci0JcmV0dXJuICgwKTsKLX0KLQotLyotCi0gKiBkZWFjdGl2YXRlcyBhIHNoYXJlZCBrZXkgZnJv
bSB0aGUgYXNzb2NpYXRpb24KLSAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAot
ICovCi1pbnQKLXNjdHBfZGVhY3Rfc2hhcmVka2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDE2X3Qga2V5aWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCWlmIChzdGNiID09
IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0JLyogaXMgdGhlIGtleWlkIHRoZSBhc3NvYyBhY3Rp
dmUgc2VuZGluZyBrZXkgKi8KLQlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3Rp
dmVfa2V5aWQpCi0JCXJldHVybiAoLTEpOwotCi0JLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLwot
CXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlp
ZCk7Ci0JaWYgKHNrZXkgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBhcmUgdGhlcmUg
b3RoZXIgcmVmY291bnQgaG9sZGVycyBvbiB0aGUga2V5PyAqLwotCWlmIChza2V5LT5yZWZjb3Vu
dCA9PSAxKSB7Ci0JCS8qIG5vIG90aGVyIHVzZXJzLCBzZW5kIGEgbm90aWZpY2F0aW9uIGZvciB0
aGlzIGtleSAqLwotCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwg
c3RjYiwga2V5aWQsIDAsCi0JCQkJU0NUUF9TT19MT0NLRUQpOwotCX0KLQotCS8qIG1hcmsgdGhl
IGtleSBhcyBkZWFjdGl2YXRlZCAqLwotCXNrZXktPmRlYWN0aXZhdGVkID0gMTsKLQotCXJldHVy
biAoMCk7Ci19Ci0KLS8qLQotICogZGVhY3RpdmF0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVu
ZHBvaW50Ci0gKiBBU1NVTUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKLSAqLwotaW50Ci1z
Y3RwX2RlYWN0X3NoYXJlZGtleV9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBr
ZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5OwotCi0JaWYgKGlucCA9PSBOVUxMKQot
CQlyZXR1cm4gKC0xKTsKLQotCS8qIGlzIHRoZSBrZXlpZCB0aGUgYWN0aXZlIHNlbmRpbmcga2V5
IG9uIHRoZSBlbmRwb2ludCAqLwotCWlmIChrZXlpZCA9PSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9r
ZXlpZCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCi0Jc2tl
eSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywga2V5aWQp
OwotCWlmIChza2V5ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0JLyogZW5kcG9pbnQga2V5
cyBhcmUgbm90IHJlZmNvdW50ZWQgKi8KLQotCS8qIHJlbW92ZSBpdCAqLwotCUxJU1RfUkVNT1ZF
KHNrZXksIG5leHQpOwotCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7CS8qIGZyZWVzIHNrZXkt
PmtleSBhcyB3ZWxsICovCi0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogZ2V0IGxvY2FsIGF1
dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZnJvbSBjb29raWUgKGZyb20gSU5JVC1BQ0spCi0gKi8K
LXZvaWQKLXNjdHBfYXV0aF9nZXRfY29va2llX3BhcmFtcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBtYnVmICptLAotICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQot
ewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCB0bXBfcGFyYW07Ci0JdWludDE2X3QgcGxl
biwgcHR5cGU7Ci0JdWludDhfdCByYW5kb21fc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07
Ci0Jc3RydWN0IHNjdHBfYXV0aF9yYW5kb20gKnBfcmFuZG9tID0gTlVMTDsKLQl1aW50MTZfdCBy
YW5kb21fbGVuID0gMDsKLQl1aW50OF90IGhtYWNzX3N0b3JlW1NDVFBfUEFSQU1fQlVGRkVSX1NJ
WkVdOwotCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjcyA9IE5VTEw7Ci0JdWludDE2
X3QgaG1hY3NfbGVuID0gMDsKLQl1aW50OF90IGNodW5rc19zdG9yZVtTQ1RQX1BBUkFNX0JVRkZF
Ul9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rcyA9IE5VTEw7Ci0J
dWludDE2X3QgbnVtX2NodW5rcyA9IDA7Ci0Jc2N0cF9rZXlfdCAqbmV3X2tleTsKLQl1aW50MzJf
dCBrZXlsZW47Ci0KLQkvKiBjb252ZXJ0IHRvIHVwcGVyIGJvdW5kICovCi0JbGVuZ3RoICs9IG9m
ZnNldDsKLQotCXBoZHIgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0s
IG9mZnNldCwKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4X3QgKikm
dG1wX3BhcmFtKTsKLQl3aGlsZSAocGhkciAhPSBOVUxMKSB7Ci0JCXB0eXBlID0gbnRvaHMocGhk
ci0+cGFyYW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOwotCi0J
CWlmICgocGxlbiA9PSAwKSB8fCAob2Zmc2V0ICsgcGxlbiA+IGxlbmd0aCkpCi0JCQlicmVhazsK
LQotCQlpZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKLQkJCWlmIChwbGVuID4gc2l6ZW9mKHJh
bmRvbV9zdG9yZSkpCi0JCQkJYnJlYWs7Ci0JCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbSht
LCBvZmZzZXQsCi0JCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopcmFuZG9tX3N0b3JlLCBw
bGVuKTsKLQkJCWlmIChwaGRyID09IE5VTEwpCi0JCQkJcmV0dXJuOwotCQkJLyogc2F2ZSB0aGUg
cmFuZG9tIGFuZCBsZW5ndGggZm9yIHRoZSBrZXkgKi8KLQkJCXBfcmFuZG9tID0gKHN0cnVjdCBz
Y3RwX2F1dGhfcmFuZG9tICopcGhkcjsKLQkJCXJhbmRvbV9sZW4gPSBwbGVuIC0gc2l6ZW9mKCpw
X3JhbmRvbSk7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKLQkJCXVp
bnQxNl90IG51bV9obWFjczsKLQkJCXVpbnQxNl90IGk7Ci0KLQkJCWlmIChwbGVuID4gc2l6ZW9m
KGhtYWNzX3N0b3JlKSkKLQkJCQlicmVhazsKLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFt
KG0sIG9mZnNldCwKLQkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilobWFjc19zdG9yZSwg
cGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKQotCQkJCXJldHVybjsKLQkJCS8qIHNhdmUgdGhl
IGhtYWNzIGxpc3QgYW5kIG51bSBmb3IgdGhlIGtleSAqLwotCQkJaG1hY3MgPSAoc3RydWN0IHNj
dHBfYXV0aF9obWFjX2FsZ28gKilwaGRyOwotCQkJaG1hY3NfbGVuID0gcGxlbiAtIHNpemVvZigq
aG1hY3MpOwotCQkJbnVtX2htYWNzID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGhtYWNzLT5obWFjX2lk
c1swXSk7Ci0JCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKQotCQkJCXNjdHBf
ZnJlZV9obWFjbGlzdChzdGNiLT5hc29jLmxvY2FsX2htYWNzKTsKLQkJCXN0Y2ItPmFzb2MubG9j
YWxfaG1hY3MgPSBzY3RwX2FsbG9jX2htYWNsaXN0KG51bV9obWFjcyk7Ci0JCQlpZiAoc3RjYi0+
YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IG51bV9obWFj
czsgaSsrKSB7Ci0JCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lkKHN0Y2ItPmFzb2MubG9j
YWxfaG1hY3MsCi0JCQkJCSAgICBudG9ocyhobWFjcy0+aG1hY19pZHNbaV0pKTsKLQkJCQl9Ci0J
CQl9Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9DSFVOS19MSVNUKSB7Ci0JCQlpbnQgaTsK
LQotCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkKLQkJCQlicmVhazsKLQkJCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKiljaHVua3Nfc3RvcmUsIHBsZW4pOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkKLQkJ
CQlyZXR1cm47Ci0JCQljaHVua3MgPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICopcGhk
cjsKLQkJCW51bV9jaHVua3MgPSBwbGVuIC0gc2l6ZW9mKCpjaHVua3MpOwotCQkJLyogc2F2ZSBj
aHVua3MgbGlzdCBhbmQgbnVtIGZvciB0aGUga2V5ICovCi0JCQlpZiAoc3RjYi0+YXNvYy5sb2Nh
bF9hdXRoX2NodW5rcyAhPSBOVUxMKQotCQkJCXNjdHBfY2xlYXJfY2h1bmtsaXN0KHN0Y2ItPmFz
b2MubG9jYWxfYXV0aF9jaHVua3MpOwotCQkJZWxzZQotCQkJCXN0Y2ItPmFzb2MubG9jYWxfYXV0
aF9jaHVua3MgPSBzY3RwX2FsbG9jX2NodW5rbGlzdCgpOwotCQkJZm9yIChpID0gMDsgaSA8IG51
bV9jaHVua3M7IGkrKykgewotCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoY2h1bmtzLT5j
aHVua190eXBlc1tpXSwKLQkJCQkgICAgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyk7Ci0J
CQl9Ci0JCX0KLQkJLyogZ2V0IG5leHQgcGFyYW1ldGVyICovCi0JCW9mZnNldCArPSBTQ1RQX1NJ
WkUzMihwbGVuKTsKLQkJaWYgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikg
PiBsZW5ndGgpCi0JCQlicmVhazsKLQkJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNj
dHBfbV9nZXRwdHIobSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLAotCQkg
ICAgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKLQl9Ci0JLyogY29uY2F0ZW5hdGUgdGhlIGZ1bGwg
cmFuZG9tIGtleSAqLwotCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbiAr
IHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuOwotCWlmIChjaHVua3MgIT0gTlVMTCkgewotCQlr
ZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKLQl9Ci0JbmV3X2tleSA9IHNj
dHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JaWYgKG5ld19rZXkgIT0gTlVMTCkgewotCSAgICAvKiBj
b3B5IGluIHRoZSBSQU5ET00gKi8KLQkgICAgaWYgKHBfcmFuZG9tICE9IE5VTEwpIHsKLQkJa2V5
bGVuID0gc2l6ZW9mKCpwX3JhbmRvbSkgKyByYW5kb21fbGVuOwotCQltZW1jcHkobmV3X2tleS0+
a2V5LCBwX3JhbmRvbSwga2V5bGVuKTsKLQkgICAgfQotCSAgICAvKiBhcHBlbmQgaW4gdGhlIEFV
VEggY2h1bmtzICovCi0JICAgIGlmIChjaHVua3MgIT0gTlVMTCkgewotCQltZW1jcHkobmV3X2tl
eS0+a2V5ICsga2V5bGVuLCBjaHVua3MsCi0JCSAgICAgICBzaXplb2YoKmNodW5rcykgKyBudW1f
Y2h1bmtzKTsKLQkJa2V5bGVuICs9IHNpemVvZigqY2h1bmtzKSArIG51bV9jaHVua3M7Ci0JICAg
IH0KLQkgICAgLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLwotCSAgICBpZiAoaG1hY3MgIT0gTlVM
TCkgewotCQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBobWFjcywKLQkJICAgICAgIHNp
emVvZigqaG1hY3MpICsgaG1hY3NfbGVuKTsKLQkgICAgfQotCX0KLQlpZiAoc3RjYi0+YXNvYy5h
dXRoaW5mby5yYW5kb20gIT0gTlVMTCkKLQkJc2N0cF9mcmVlX2tleShzdGNiLT5hc29jLmF1dGhp
bmZvLnJhbmRvbSk7Ci0Jc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20gPSBuZXdfa2V5OwotCXN0
Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tX2xlbiA9IHJhbmRvbV9sZW47Ci0Jc2N0cF9jbGVhcl9j
YWNoZWRrZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5aWQpOwotCXNjdHBf
Y2xlYXJfY2FjaGVka2V5cyhzdGNiLCBzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQpOwot
Ci0JLyogbmVnb3RpYXRlIHdoYXQgSE1BQyB0byB1c2UgZm9yIHRoZSBwZWVyICovCi0Jc3RjYi0+
YXNvYy5wZWVyX2htYWNfaWQgPSBzY3RwX25lZ290aWF0ZV9obWFjaWQoc3RjYi0+YXNvYy5wZWVy
X2htYWNzLAotCSAgICBzdGNiLT5hc29jLmxvY2FsX2htYWNzKTsKLQotCS8qIGNvcHkgZGVmYXVs
dHMgZnJvbSB0aGUgZW5kcG9pbnQgKi8KLQkvKiBGSVggTUU6IHB1dCBpbiBjb29raWU/ICovCi0J
c3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQgPSBzdGNiLT5zY3RwX2VwLT5zY3RwX2Vw
LmRlZmF1bHRfa2V5aWQ7Ci0JLyogY29weSBvdXQgdGhlIHNoYXJlZCBrZXkgbGlzdCAoYnkgcmVm
ZXJlbmNlKSBmcm9tIHRoZSBlbmRwb2ludCAqLwotCSh2b2lkKXNjdHBfY29weV9za2V5bGlzdCgm
c3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zaGFyZWRfa2V5cywKLQkJCQkgJnN0Y2ItPmFzb2Muc2hh
cmVkX2tleXMpOwotfQotCi0vKgotICogY29tcHV0ZSBhbmQgZmlsbCBpbiB0aGUgSE1BQyBkaWdl
c3QgZm9yIGEgcGFja2V0Ci0gKi8KLXZvaWQKLXNjdHBfZmlsbF9obWFjX2RpZ2VzdF9tKHN0cnVj
dCBtYnVmICptLCB1aW50MzJfdCBhdXRoX29mZnNldCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2No
dW5rICphdXRoLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IGtleWlkKQotewotCXVp
bnQzMl90IGRpZ2VzdGxlbjsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5OwotCXNjdHBfa2V5X3Qg
KmtleTsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoYXV0aCA9PSBOVUxMKSkKLQkJcmV0dXJu
OwotCi0JLyogemVybyB0aGUgZGlnZXN0ICsgY2h1bmsgcGFkZGluZyAqLwotCWRpZ2VzdGxlbiA9
IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7Ci0JbWVt
c2V0KGF1dGgtPmhtYWMsIDAsIFNDVFBfU0laRTMyKGRpZ2VzdGxlbikpOwotCi0JLyogaXMgdGhl
IGRlc2lyZWQga2V5IGNhY2hlZD8gKi8KLQlpZiAoKGtleWlkICE9IHN0Y2ItPmFzb2MuYXV0aGlu
Zm8uYXNzb2Nfa2V5aWQpIHx8Ci0JICAgIChzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleSA9
PSBOVUxMKSkgewotCQlpZiAoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkgIT0gTlVMTCkg
ewotCQkJLyogZnJlZSB0aGUgb2xkIGNhY2hlZCBrZXkgKi8KLQkJCXNjdHBfZnJlZV9rZXkoc3Rj
Yi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkpOwotCQl9Ci0JCXNrZXkgPSBzY3RwX2ZpbmRfc2hh
cmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlpZCk7Ci0JCS8qIHRoZSBvbmx5IHdh
eSBza2V5IGlzIE5VTEwgaXMgaWYgbnVsbCBrZXkgaWQgMCBpcyB1c2VkICovCi0JCWlmIChza2V5
ICE9IE5VTEwpCi0JCQlrZXkgPSBza2V5LT5rZXk7Ci0JCWVsc2UKLQkJCWtleSA9IE5VTEw7Ci0J
CS8qIGNvbXB1dGUgYSBuZXcgYXNzb2Mga2V5IGFuZCBjYWNoZSBpdCAqLwotCQlzdGNiLT5hc29j
LmF1dGhpbmZvLmFzc29jX2tleSA9Ci0JCSAgICBzY3RwX2NvbXB1dGVfaGFzaGtleShzdGNiLT5h
c29jLmF1dGhpbmZvLnJhbmRvbSwKLQkJCQkJIHN0Y2ItPmFzb2MuYXV0aGluZm8ucGVlcl9yYW5k
b20sIGtleSk7Ci0JCXN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5aWQgPSBrZXlpZDsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAiY2FjaGluZyBrZXkgaWQgJXVcbiIsCi0JCQlzdGNi
LT5hc29jLmF1dGhpbmZvLmFzc29jX2tleWlkKTsKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JCWlmIChT
Q1RQX0FVVEhfREVCVUcpCi0JCQlzY3RwX3ByaW50X2tleShzdGNiLT5hc29jLmF1dGhpbmZvLmFz
c29jX2tleSwKLQkJCQkgICAgICAgIkFzc29jIEtleSIpOwotI2VuZGlmCi0JfQotCi0JLyogc2V0
IGluIHRoZSBhY3RpdmUga2V5IGlkICovCi0JYXV0aC0+c2hhcmVkX2tleV9pZCA9IGh0b25zKGtl
eWlkKTsKLQotCS8qIGNvbXB1dGUgYW5kIGZpbGwgaW4gdGhlIGRpZ2VzdCAqLwotCSh2b2lkKXNj
dHBfY29tcHV0ZV9obWFjX20oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQsIHN0Y2ItPmFzb2MuYXV0
aGluZm8uYXNzb2Nfa2V5LAotCQkJCSAgbSwgYXV0aF9vZmZzZXQsIGF1dGgtPmhtYWMpOwotfQot
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3plcm9fbShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3QgbV9v
ZmZzZXQsIHVpbnQzMl90IHNpemUpCi17Ci0Jc3RydWN0IG1idWYgKm1fdG1wOwotCXVpbnQ4X3Qg
KmRhdGE7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobSA9PSBOVUxMKQotCQlyZXR1cm47
Ci0KLQkvKiBmaW5kIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIG1idWYgYW5kIG9mZnNldCAoZ2V0IHN0
YXJ0IHBvc2l0aW9uKSAqLwotCW1fdG1wID0gbTsKLQl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYm
IChtX29mZnNldCA+PSAodWludDMyX3QpIFNDVFBfQlVGX0xFTihtX3RtcCkpKSB7Ci0JCW1fb2Zm
c2V0IC09IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3Rt
cCk7Ci0JfQotCS8qIG5vdyB1c2UgdGhlIHJlc3Qgb2YgdGhlIG1idWYgY2hhaW4gKi8KLQl3aGls
ZSAoKG1fdG1wICE9IE5VTEwpICYmIChzaXplID4gMCkpIHsKLQkJZGF0YSA9IG10b2QobV90bXAs
IHVpbnQ4X3QgKikgKyBtX29mZnNldDsKLQkJaWYgKHNpemUgPiAodWludDMyX3QpIFNDVFBfQlVG
X0xFTihtX3RtcCkpIHsKLQkJCW1lbXNldChkYXRhLCAwLCBTQ1RQX0JVRl9MRU4obV90bXApKTsK
LQkJCXNpemUgLT0gU0NUUF9CVUZfTEVOKG1fdG1wKTsKLQkJfSBlbHNlIHsKLQkJCW1lbXNldChk
YXRhLCAwLCBzaXplKTsKLQkJCXNpemUgPSAwOwotCQl9Ci0JCS8qIGNsZWFyIHRoZSBvZmZzZXQg
c2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLwotCQltX29mZnNldCA9IDA7Ci0J
CW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotfQotCi0vKi0KLSAqIHByb2Nlc3Mg
dGhlIGluY29taW5nIEF1dGhlbnRpY2F0aW9uIGNodW5rCi0gKiByZXR1cm4gY29kZXM6Ci0gKiAg
IC0xIG9uIGFueSBhdXRoZW50aWNhdGlvbiBlcnJvcgotICogICAgMCBvbiBhdXRoZW50aWNhdGlv
biB2ZXJpZmljYXRpb24KLSAqLwotaW50Ci1zY3RwX2hhbmRsZV9hdXRoKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLSAgICBzdHJ1Y3QgbWJ1ZiAq
bSwgdWludDMyX3Qgb2Zmc2V0KQotewotCXVpbnQxNl90IGNodW5rbGVuOwotCXVpbnQxNl90IHNo
YXJlZF9rZXlfaWQ7Ci0JdWludDE2X3QgaG1hY19pZDsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5
OwotCXVpbnQzMl90IGRpZ2VzdGxlbjsKLQl1aW50OF90IGRpZ2VzdFtTQ1RQX0FVVEhfRElHRVNU
X0xFTl9NQVhdOwotCXVpbnQ4X3QgY29tcHV0ZWRfZGlnZXN0W1NDVFBfQVVUSF9ESUdFU1RfTEVO
X01BWF07Ci0KLQkvKiBhdXRoIGlzIGNoZWNrZWQgZm9yIE5VTEwgYnkgY2FsbGVyICovCi0JY2h1
bmtsZW4gPSBudG9ocyhhdXRoLT5jaC5jaHVua19sZW5ndGgpOwotCWlmIChjaHVua2xlbiA8IHNp
emVvZigqYXV0aCkpIHsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhmYWlsZWQpOwot
CQlyZXR1cm4gKC0xKTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGgpOwotCi0J
LyogZ2V0IHRoZSBhdXRoIHBhcmFtcyAqLwotCXNoYXJlZF9rZXlfaWQgPSBudG9ocyhhdXRoLT5z
aGFyZWRfa2V5X2lkKTsKLQlobWFjX2lkID0gbnRvaHMoYXV0aC0+aG1hY19pZCk7Ci0JU0NUUERC
RyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkiU0NUUCBBVVRIIENodW5rOiBzaGFyZWQga2V5ICV1LCBI
TUFDIGlkICV1XG4iLAotCQlzaGFyZWRfa2V5X2lkLCBobWFjX2lkKTsKLQotCS8qIGlzIHRoZSBp
bmRpY2F0ZWQgSE1BQyBzdXBwb3J0ZWQ/ICovCi0JaWYgKCFzY3RwX2F1dGhfaXNfc3VwcG9ydGVk
X2htYWMoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywgaG1hY19pZCkpIHsKLQkJc3RydWN0IG1idWYg
Km9wX2VycjsKLQkJc3RydWN0IHNjdHBfZXJyb3JfYXV0aF9pbnZhbGlkX2htYWMgKmNhdXNlOwot
Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZpdmFsaG1hY2lkKTsKLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FVVEgxLAotCQkJIlNDVFAgQXV0aDogdW5zdXBwb3J0ZWQgSE1BQyBpZCAldVxuIiwK
LQkJCWhtYWNfaWQpOwotCQkvKgotCQkgKiByZXBvcnQgdGhpcyBpbiBhbiBFcnJvciBDaHVuazog
VW5zdXBwb3J0ZWQgSE1BQwotCQkgKiBJZGVudGlmaWVyCi0JCSAqLwotCQlvcF9lcnIgPSBzY3Rw
X2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2F1dGhfaW52YWxpZF9o
bWFjKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBN
VF9IRUFERVIpOwotCQlpZiAob3BfZXJyICE9IE5VTEwpIHsKLQkJCS8qIHByZS1yZXNlcnZlIHNv
bWUgc3BhY2UgKi8KLQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpKTsKLQkJCS8qIGZpbGwgaW4gdGhlIGVycm9yICovCi0JCQljYXVzZSA9IG10
b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYyAqKTsKLQkJCWNh
dXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFDSUQpOwot
CQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9h
dXRoX2ludmFsaWRfaG1hYykpOwotCQkJY2F1c2UtPmhtYWNfaWQgPSBudG9ocyhobWFjX2lkKTsK
LQkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2F1dGhf
aW52YWxpZF9obWFjKTsKLQkJCS8qIHF1ZXVlIGl0ICovCi0JCQlzY3RwX3F1ZXVlX29wX2Vycihz
dGNiLCBvcF9lcnIpOwotCQl9Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBnZXQgdGhlIGluZGlj
YXRlZCBzaGFyZWQga2V5LCBpZiBhdmFpbGFibGUgKi8KLQlpZiAoKHN0Y2ItPmFzb2MuYXV0aGlu
Zm8ucmVjdl9rZXkgPT0gTlVMTCkgfHwKLQkgICAgKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9r
ZXlpZCAhPSBzaGFyZWRfa2V5X2lkKSkgewotCQkvKiBmaW5kIHRoZSBzaGFyZWQga2V5IG9uIHRo
ZSBhc3NvYyBmaXJzdCAqLwotCQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNv
Yy5zaGFyZWRfa2V5cywKLQkJCQkJICAgc2hhcmVkX2tleV9pZCk7Ci0JCS8qIGlmIHRoZSBzaGFy
ZWQga2V5IGlzbid0IGZvdW5kLCBkaXNjYXJkIHRoZSBjaHVuayAqLwotCQlpZiAoc2tleSA9PSBO
VUxMKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aXZhbGtleWlkKTsKLQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCQkiU0NUUCBBdXRoOiB1bmtub3duIGtleSBpZCAldVxu
IiwKLQkJCQlzaGFyZWRfa2V5X2lkKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCS8qIGdlbmVy
YXRlIGEgbm90aWZpY2F0aW9uIGlmIHRoaXMgaXMgYSBuZXcga2V5IGlkICovCi0JCWlmIChzdGNi
LT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQgIT0gc2hhcmVkX2tleV9pZCkKLQkJCS8qCi0JCQkg
KiBzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9ORVdfS0VZLCBzdGNiLAotCQkJICog
c2hhcmVkX2tleV9pZCwgKHZvaWQKLQkJCSAqICopc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tl
eWlkKTsKLQkJCSAqLwotCQkJc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9B
VVRIX05FV19LRVksCi0JCQkgICAgc2hhcmVkX2tleV9pZCwgc3RjYi0+YXNvYy5hdXRoaW5mby5y
ZWN2X2tleWlkLAotCQkJICAgIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCS8qIGNvbXB1dGUgYSBu
ZXcgcmVjdiBhc3NvYyBrZXkgYW5kIGNhY2hlIGl0ICovCi0JCWlmIChzdGNiLT5hc29jLmF1dGhp
bmZvLnJlY3Zfa2V5ICE9IE5VTEwpCi0JCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGlu
Zm8ucmVjdl9rZXkpOwotCQlzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ID0KLQkJICAgIHNj
dHBfY29tcHV0ZV9oYXNoa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tLAotCQkgICAgc3Rj
Yi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSwgc2tleS0+a2V5KTsKLQkJc3RjYi0+YXNvYy5h
dXRoaW5mby5yZWN2X2tleWlkID0gc2hhcmVkX2tleV9pZDsKLSNpZmRlZiBTQ1RQX0RFQlVHCi0J
CWlmIChTQ1RQX0FVVEhfREVCVUcpCi0JCQlzY3RwX3ByaW50X2tleShzdGNiLT5hc29jLmF1dGhp
bmZvLnJlY3Zfa2V5LCAiUmVjdiBLZXkiKTsKLSNlbmRpZgotCX0KLQkvKiB2YWxpZGF0ZSB0aGUg
ZGlnZXN0IGxlbmd0aCAqLwotCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbiho
bWFjX2lkKTsKLQlpZiAoY2h1bmtsZW4gPCAoc2l6ZW9mKCphdXRoKSArIGRpZ2VzdGxlbikpIHsK
LQkJLyogaW52YWxpZCBkaWdlc3QgbGVuZ3RoICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3ZhdXRoZmFpbGVkKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFAgQXV0
aDogY2h1bmsgdG9vIHNob3J0IGZvciBITUFDXG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8q
IHNhdmUgYSBjb3B5IG9mIHRoZSBkaWdlc3QsIHplcm8gdGhlIHBzZXVkbyBoZWFkZXIsIGFuZCB2
YWxpZGF0ZSAqLwotCW1lbWNweShkaWdlc3QsIGF1dGgtPmhtYWMsIGRpZ2VzdGxlbik7Ci0Jc2N0
cF96ZXJvX20obSwgb2Zmc2V0ICsgc2l6ZW9mKCphdXRoKSwgU0NUUF9TSVpFMzIoZGlnZXN0bGVu
KSk7Ci0JKHZvaWQpc2N0cF9jb21wdXRlX2htYWNfbShobWFjX2lkLCBzdGNiLT5hc29jLmF1dGhp
bmZvLnJlY3Zfa2V5LAotCSAgICBtLCBvZmZzZXQsIGNvbXB1dGVkX2RpZ2VzdCk7Ci0KLQkvKiBj
b21wYXJlIHRoZSBjb21wdXRlZCBkaWdlc3Qgd2l0aCB0aGUgb25lIGluIHRoZSBBVVRIIGNodW5r
ICovCi0JaWYgKG1lbWNtcChkaWdlc3QsIGNvbXB1dGVkX2RpZ2VzdCwgZGlnZXN0bGVuKSAhPSAw
KSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRoZmFpbGVkKTsKLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFAgQXV0aDogSE1BQyBkaWdlc3QgY2hlY2sgZmFpbGVk
XG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHZW5l
cmF0ZSBOT1RJRklDQVRJT04KLSAqLwotdm9pZAotc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24o
c3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBpbmRpY2F0aW9uLAotCQkJICAgdWludDE2
X3Qga2V5aWQsIHVpbnQxNl90IGFsdF9rZXlpZCwgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JU0NUUF9VTlVT
RUQKLSNlbmRpZgotKQotewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9h
dXRoa2V5X2V2ZW50ICphdXRoOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
OwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkgICAoc3RjYi0+c2N0cF9lcC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAotCSAgIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKQotCQkpIHsKLQkJLyogSWYg
dGhlIHNvY2tldCBpcyBnb25lIHdlIGFyZSBvdXQgb2YgaGVyZSAqLwotCQlyZXR1cm47Ci0JfQot
Ci0JaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQ
X1BDQl9GTEFHU19BVVRIRVZOVCkpCi0JCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCi0JCXJldHVy
bjsKLQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0
cF9hdXRoa2V5X2V2ZW50KSwKLQkJCQkJICAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlp
ZiAobV9ub3RpZnkgPT0gTlVMTCkKLQkJLyogbm8gc3BhY2UgbGVmdCAqLwotCQlyZXR1cm47Ci0K
LQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlhdXRoID0gbXRvZChtX25vdGlmeSwgc3Ry
dWN0IHNjdHBfYXV0aGtleV9ldmVudCAqKTsKLQltZW1zZXQoYXV0aCwgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2F1dGhrZXlfZXZlbnQpKTsKLQlhdXRoLT5hdXRoX3R5cGUgPSBTQ1RQX0FVVEhFTlRJ
Q0FUSU9OX0VWRU5UOwotCWF1dGgtPmF1dGhfZmxhZ3MgPSAwOwotCWF1dGgtPmF1dGhfbGVuZ3Ro
ID0gc2l6ZW9mKCphdXRoKTsKLQlhdXRoLT5hdXRoX2tleW51bWJlciA9IGtleWlkOwotCWF1dGgt
PmF1dGhfYWx0a2V5bnVtYmVyID0gYWx0X2tleWlkOwotCWF1dGgtPmF1dGhfaW5kaWNhdGlvbiA9
IGluZGljYXRpb247Ci0JYXV0aC0+YXV0aF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3Rj
Yik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKCphdXRoKTsKLQlTQ1RQX0JV
Rl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0KLQkvKiBhcHBlbmQgdG8gc29ja2V0ICovCi0JY29u
dHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uLAotCSAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsIG1fbm90
aWZ5KTsKLQlpZiAoY29udHJvbCA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3Rw
X21fZnJlZW0obV9ub3RpZnkpOwotCQlyZXR1cm47Ci0JfQotCWNvbnRyb2wtPmxlbmd0aCA9IFND
VFBfQlVGX0xFTihtX25vdGlmeSk7Ci0JY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FU
SU9OOwotCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwotCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9
IG1fbm90aWZ5OwotCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRy
b2wsCi0JICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19O
T1RfSEVMRCwgc29fbG9ja2VkKTsKLX0KLQotCi0vKi0KLSAqIHZhbGlkYXRlcyB0aGUgQVVUSGVu
dGljYXRpb24gcmVsYXRlZCBwYXJhbWV0ZXJzIGluIGFuIElOSVQvSU5JVC1BQ0sKLSAqIE5vdGU6
IGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIElOSVQgYXMgSU5JVC1BQ0sgaXMgaGFuZGxlZCBpbmxp
bmUKLSAqIHdpdGggc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoKQotICovCi1pbnQKLXNj
dHBfdmFsaWRhdGVfaW5pdF9hdXRoX3BhcmFtcyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwg
aW50IGxpbWl0KQotewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbV9idWY7Ci0J
dWludDE2X3QgcHR5cGUsIHBsZW47Ci0JaW50IHBlZXJfc3VwcG9ydHNfYXNjb25mID0gMDsKLQlp
bnQgcGVlcl9zdXBwb3J0c19hdXRoID0gMDsKLQlpbnQgZ290X3JhbmRvbSA9IDAsIGdvdF9obWFj
cyA9IDAsIGdvdF9jaGtsaXN0ID0gMDsKLQl1aW50OF90IHNhd19hc2NvbmYgPSAwOwotCXVpbnQ4
X3Qgc2F3X2FzY29uZl9hY2sgPSAwOwotCi0JLyogZ28gdGhyb3VnaCBlYWNoIG9mIHRoZSBwYXJh
bXMuICovCi0JcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVm
LCBzaXplb2YocGFyYW1fYnVmKSk7Ci0Jd2hpbGUgKHBoZHIpIHsKLQkJcHR5cGUgPSBudG9ocyhw
aGRyLT5wYXJhbV90eXBlKTsKLQkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7Ci0K
LQkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgewotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHBs
ZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlp
ZiAocHR5cGUgPT0gU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKSB7Ci0JCQkvKiBBIHN1cHBvcnRl
ZCBleHRlbnNpb24gY2h1bmsgKi8KLQkJCXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBl
c19wYXJhbSAqcHJfc3VwcG9ydGVkOwotCQkJdWludDhfdCBsb2NhbF9zdG9yZVtTQ1RQX1NNQUxM
X0NIVU5LX1NUT1JFXTsKLQkJCWludCBudW1fZW50LCBpOwotCi0JCQlpZiAocGxlbiA+IHNpemVv
Zihsb2NhbF9zdG9yZSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9u
ZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKSZsb2NhbF9zdG9yZSwKLQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBsZW4pOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkgewotCQkJCXJldHVybiAoLTEpOwot
CQkJfQotCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBl
c19wYXJhbSAqKXBoZHI7Ci0JCQludW1fZW50ID0gcGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YXJhbWhkcik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7Ci0JCQkJc3dpdGNo
IChwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7Ci0JCQkJY2FzZSBTQ1RQX0FTQ09ORjoK
LQkJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKLQkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAx
OwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBvbmUgd2UgZG9uJ3QgY2FyZSBh
Ym91dCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0g
U0NUUF9SQU5ET00pIHsKLQkJCS8qIGVuZm9yY2UgdGhlIHJhbmRvbSBsZW5ndGggKi8KLQkJCWlm
IChwbGVuICE9IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20pICsKLQkJCQkgICAgIFND
VFBfQVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVVUSDEsCi0JCQkJCSJTQ1RQOiBpbnZhbGlkIFJBTkRPTSBsZW5cbiIpOwotCQkJCXJldHVybiAo
LTEpOwotCQkJfQotCQkJZ290X3JhbmRvbSA9IDE7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NU
UF9ITUFDX0xJU1QpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjczsKLQkJ
CXVpbnQ4X3Qgc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07Ci0JCQlpbnQgbnVtX2htYWNz
OwotCi0JCQlpZiAocGxlbiA+IHNpemVvZihzdG9yZSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXN0b3JlLAotCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0
dXJuICgtMSk7Ci0JCQl9Ci0JCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAq
KXBoZHI7Ci0JCQludW1faG1hY3MgPSAocGxlbiAtIHNpemVvZigqaG1hY3MpKSAvIHNpemVvZiho
bWFjcy0+aG1hY19pZHNbMF0pOwotCQkJLyogdmFsaWRhdGUgdGhlIGhtYWMgbGlzdCAqLwotCQkJ
aWYgKHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oaG1hY3MsIG51bV9obWFjcykpIHsKLQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkJCSJTQ1RQOiBpbnZhbGlkIEhNQUMgcGFyYW1cbiIp
OwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJZ290X2htYWNzID0gMTsKLQkJfSBlbHNlIGlm
IChwdHlwZSA9PSBTQ1RQX0NIVU5LX0xJU1QpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtf
bGlzdCAqY2h1bmtzOwotCQkJdWludDhfdCBjaHVua3Nfc3RvcmVbU0NUUF9TTUFMTF9DSFVOS19T
VE9SRV07Ci0JCQlpbnQgaSwgbnVtX2NodW5rczsKLQotCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1
bmtzX3N0b3JlKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJcGhkciA9IHNjdHBfZ2V0X25leHRf
cGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopY2h1bmtz
X3N0b3JlLAotCQkJCQkJICAgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0
dXJuICgtMSk7Ci0JCQl9Ci0JCQkvKi0KLQkJCSAqIEZsaXAgdGhyb3VnaCB0aGUgbGlzdCBhbmQg
bWFyayB0aGF0IHRoZQotCQkJICogcGVlciBzdXBwb3J0cyBhc2NvbmYvYXNjb25mX2Fjay4KLQkJ
CSAqLwotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKXBoZHI7Ci0J
CQludW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtzKTsKLQkJCWZvciAoaSA9IDA7IGkg
PCBudW1fY2h1bmtzOyBpKyspIHsKLQkJCQkvKiByZWNvcmQgYXNjb25mL2FzY29uZi1hY2sgaWYg
bGlzdGVkICovCi0JCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9BU0NPTkYp
Ci0JCQkJCXNhd19hc2NvbmYgPSAxOwotCQkJCWlmIChjaHVua3MtPmNodW5rX3R5cGVzW2ldID09
IFNDVFBfQVNDT05GX0FDSykKLQkJCQkJc2F3X2FzY29uZl9hY2sgPSAxOwotCi0JCQl9Ci0JCQlp
ZiAobnVtX2NodW5rcykKLQkJCQlnb3RfY2hrbGlzdCA9IDE7Ci0JCX0KLQotCQlvZmZzZXQgKz0g
U0NUUF9TSVpFMzIocGxlbik7Ci0JCWlmIChvZmZzZXQgPj0gbGltaXQpIHsKLQkJCWJyZWFrOwot
CQl9Ci0JCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1ZiwK
LQkJICAgIHNpemVvZihwYXJhbV9idWYpKTsKLQl9Ci0JLyogdmFsaWRhdGUgYXV0aGVudGljYXRp
b24gcmVxdWlyZWQgcGFyYW1ldGVycyAqLwotCWlmIChnb3RfcmFuZG9tICYmIGdvdF9obWFjcykg
ewotCQlwZWVyX3N1cHBvcnRzX2F1dGggPSAxOwotCX0gZWxzZSB7Ci0JCXBlZXJfc3VwcG9ydHNf
YXV0aCA9IDA7Ci0JfQotCWlmICghcGVlcl9zdXBwb3J0c19hdXRoICYmIGdvdF9jaGtsaXN0KSB7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCSJTQ1RQOiBwZWVyIHNlbnQgY2h1bmsg
bGlzdCB3L28gQVVUSFxuIik7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAocGVlcl9zdXBwb3J0
c19hc2NvbmYgJiYgIXBlZXJfc3VwcG9ydHNfYXV0aCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVVUSDEsCi0JCQkiU0NUUDogcGVlciBzdXBwb3J0cyBBU0NPTkYgYnV0IG5vdCBBVVRIXG4iKTsK
LQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIGlmICgocGVlcl9zdXBwb3J0c19hc2NvbmYpICYmIChw
ZWVyX3N1cHBvcnRzX2F1dGgpICYmCi0JCSAgICgoc2F3X2FzY29uZiA9PSAwKSB8fCAoc2F3X2Fz
Y29uZl9hY2sgPT0gMCkpKSB7Ci0JCXJldHVybiAoLTIpOwotCX0KLQlyZXR1cm4gKDApOwotfQot
Ci12b2lkCi1zY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXVpbnQxNl90IGNodW5rc19sZW4gPSAwOwot
CXVpbnQxNl90IGhtYWNzX2xlbiA9IDA7Ci0JdWludDE2X3QgcmFuZG9tX2xlbiA9IFNDVFBfQVVU
SF9SQU5ET01fU0laRV9ERUZBVUxUOwotCXNjdHBfa2V5X3QgKm5ld19rZXk7Ci0JdWludDE2X3Qg
a2V5bGVuOwotCi0JLyogaW5pdGlhbGl6ZSBobWFjIGxpc3QgZnJvbSBlbmRwb2ludCAqLwotCXN0
Y2ItPmFzb2MubG9jYWxfaG1hY3MgPSBzY3RwX2NvcHlfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxv
Y2FsX2htYWNzKTsKLQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKSB7Ci0JCWht
YWNzX2xlbiA9IHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MtPm51bV9hbGdvICoKLQkJICAgIHNpemVv
ZihzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5obWFjWzBdKTsKLQl9Ci0JLyogaW5pdGlhbGl6ZSBh
dXRoIGNodW5rcyBsaXN0IGZyb20gZW5kcG9pbnQgKi8KLQlzdGNiLT5hc29jLmxvY2FsX2F1dGhf
Y2h1bmtzID0KLQkgICAgc2N0cF9jb3B5X2NodW5rbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfYXV0
aF9jaHVua3MpOwotCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzICE9IE5VTEwpIHsK
LQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJaWYgKHN0Y2ItPmFz
b2MubG9jYWxfYXV0aF9jaHVua3MtPmNodW5rc1tpXSkKLQkJCQljaHVua3NfbGVuKys7Ci0JCX0K
LQl9Ci0JLyogY29weSBkZWZhdWx0cyBmcm9tIHRoZSBlbmRwb2ludCAqLwotCXN0Y2ItPmFzb2Mu
YXV0aGluZm8uYWN0aXZlX2tleWlkID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQ7Ci0KLQkv
KiBjb3B5IG91dCB0aGUgc2hhcmVkIGtleSBsaXN0IChieSByZWZlcmVuY2UpIGZyb20gdGhlIGVu
ZHBvaW50ICovCi0JKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0KCZpbnAtPnNjdHBfZXAuc2hhcmVk
X2tleXMsCi0JCQkJICZzdGNiLT5hc29jLnNoYXJlZF9rZXlzKTsKLQotCS8qIG5vdyBzZXQgdGhl
IGNvbmNhdGVuYXRlZCBrZXkgKHJhbmRvbSArIGNodW5rcyArIGhtYWNzKSAqLwotCS8qIGtleSBp
bmNsdWRlcyBwYXJhbWV0ZXIgaGVhZGVycyAqLwotCWtleWxlbiA9ICgzICogc2l6ZW9mKHN0cnVj
dCBzY3RwX3BhcmFtaGRyKSkgKyByYW5kb21fbGVuICsgY2h1bmtzX2xlbiArCi0JICAgIGhtYWNz
X2xlbjsKLQluZXdfa2V5ID0gc2N0cF9hbGxvY19rZXkoa2V5bGVuKTsKLQlpZiAobmV3X2tleSAh
PSBOVUxMKSB7Ci0JCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQkJaW50IHBsZW47Ci0JCS8q
IGdlbmVyYXRlIGFuZCBjb3B5IGluIHRoZSBSQU5ET00gKi8KLQkJcGggPSAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKiluZXdfa2V5LT5rZXk7Ci0JCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9S
QU5ET00pOwotCQlwbGVuID0gc2l6ZW9mKCpwaCkgKyByYW5kb21fbGVuOwotCQlwaC0+cGFyYW1f
bGVuZ3RoID0gaHRvbnMocGxlbik7Ci0JCVNDVFBfUkVBRF9SQU5ET00obmV3X2tleS0+a2V5ICsg
c2l6ZW9mKCpwaCksIHJhbmRvbV9sZW4pOwotCQlrZXlsZW4gPSBwbGVuOwotCi0JCS8qIGFwcGVu
ZCBpbiB0aGUgQVVUSCBjaHVua3MgKi8KLQkJLyogTk9URTogY3VycmVudGx5IHdlIGFsd2F5cyBo
YXZlIGNodW5rcyB0byBsaXN0ICovCi0JCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG5l
d19rZXktPmtleSArIGtleWxlbik7Ci0JCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9DSFVO
S19MSVNUKTsKLQkJcGxlbiA9IHNpemVvZigqcGgpICsgY2h1bmtzX2xlbjsKLQkJcGgtPnBhcmFt
X2xlbmd0aCA9IGh0b25zKHBsZW4pOwotCQlrZXlsZW4gKz0gc2l6ZW9mKCpwaCk7Ci0JCWlmIChz
dGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSB7Ci0JCQlpbnQgaTsKLQkJCWZvciAoaSA9IDA7
IGkgPCAyNTY7IGkrKykgewotCQkJCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzLT5j
aHVua3NbaV0pCi0JCQkJCW5ld19rZXktPmtleVtrZXlsZW4rK10gPSBpOwotCQkJfQotCQl9Ci0K
LQkJLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKShuZXdfa2V5LT5rZXkgKyBrZXlsZW4pOwotCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFND
VFBfSE1BQ19MSVNUKTsKLQkJcGxlbiA9IHNpemVvZigqcGgpICsgaG1hY3NfbGVuOwotCQlwaC0+
cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7Ci0JCWtleWxlbiArPSBzaXplb2YoKnBoKTsKLQkJ
KHZvaWQpc2N0cF9zZXJpYWxpemVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywKLQkJ
CQkJbmV3X2tleS0+a2V5ICsga2V5bGVuKTsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MuYXV0aGluZm8u
cmFuZG9tICE9IE5VTEwpCi0JICAgIHNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5y
YW5kb20pOwotCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tID0gbmV3X2tleTsKLQlzdGNiLT5h
c29jLmF1dGhpbmZvLnJhbmRvbV9sZW4gPSByYW5kb21fbGVuOwotfQotCi0KLSNpZmRlZiBTQ1RQ
X0hNQUNfVEVTVAotLyoKLSAqIEhNQUMgYW5kIGtleSBjb25jYXRlbmF0aW9uIHRlc3RzCi0gKi8K
LXN0YXRpYyB2b2lkCi1zY3RwX3ByaW50X2RpZ2VzdCh1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90
IGRpZ2VzdGxlbiwgY29uc3QgY2hhciAqc3RyKQotewotCXVpbnQzMl90IGk7Ci0KLQlTQ1RQX1BS
SU5URigiXG4lczogMHgiLCBzdHIpOwotCWlmIChkaWdlc3QgPT0gTlVMTCkKLQkJcmV0dXJuOwot
Ci0JZm9yIChpID0gMDsgaSA8IGRpZ2VzdGxlbjsgaSsrKQotCQlTQ1RQX1BSSU5URigiJTAyeCIs
IGRpZ2VzdFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfdGVzdF9obWFjKGNvbnN0IGNoYXIg
KnN0ciwgdWludDE2X3QgaG1hY19pZCwgdWludDhfdCAqa2V5LAotICAgIHVpbnQzMl90IGtleWxl
biwgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwKLSAgICB1aW50OF90ICpkaWdlc3Qs
IHVpbnQzMl90IGRpZ2VzdGxlbikKLXsKLQl1aW50OF90IGNvbXB1dGVkX2RpZ2VzdFtTQ1RQX0FV
VEhfRElHRVNUX0xFTl9NQVhdOwotCi0JU0NUUF9QUklOVEYoIlxuJXM6Iiwgc3RyKTsKLQlzY3Rw
X2htYWMoaG1hY19pZCwga2V5LCBrZXlsZW4sIHRleHQsIHRleHRsZW4sIGNvbXB1dGVkX2RpZ2Vz
dCk7Ci0Jc2N0cF9wcmludF9kaWdlc3QoZGlnZXN0LCBkaWdlc3RsZW4sICJFeHBlY3RlZCBkaWdl
c3QiKTsKLQlzY3RwX3ByaW50X2RpZ2VzdChjb21wdXRlZF9kaWdlc3QsIGRpZ2VzdGxlbiwgIkNv
bXB1dGVkIGRpZ2VzdCIpOwotCWlmIChtZW1jbXAoZGlnZXN0LCBjb21wdXRlZF9kaWdlc3QsIGRp
Z2VzdGxlbikgIT0gMCkgewotCQlTQ1RQX1BSSU5URigiXG5GQUlMRUQiKTsKLQkJcmV0dXJuICgt
MSk7Ci0JfSBlbHNlIHsKLQkJU0NUUF9QUklOVEYoIlxuUEFTU0VEIik7Ci0JCXJldHVybiAoMCk7
Ci0JfQotfQotCi0KLS8qCi0gKiBSRkMgMjIwMjogSE1BQy1TSEExIHRlc3QgY2FzZXMKLSAqLwot
dm9pZAotc2N0cF90ZXN0X2htYWNfc2hhMSh2b2lkKQotewotCXVpbnQ4X3QgKmRpZ2VzdDsKLQl1
aW50OF90IGtleVsxMjhdOwotCXVpbnQzMl90IGtleWxlbjsKLQl1aW50OF90IHRleHRbMTI4XTsK
LQl1aW50MzJfdCB0ZXh0bGVuOwotCXVpbnQzMl90IGRpZ2VzdGxlbiA9IDIwOwotCWludCBmYWls
ZWQgPSAwOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDEKLQkgKiBrZXkgPSAgICAgICAg
ICAgMHgwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiCi0JICoga2V5X2xl
biA9ICAgICAgIDIwCi0JICogZGF0YSA9ICAgICAgICAgICJIaSBUaGVyZSIKLQkgKiBkYXRhX2xl
biA9ICAgICAgOAotCSAqIGRpZ2VzdCA9ICAgICAgICAweGI2MTczMTg2NTUwNTcyNjRlMjhiYzBi
NmZiMzc4YzhlZjE0NmJlMDAKLQkgKi8KLQlrZXlsZW4gPSAyMDsKLQltZW1zZXQoa2V5LCAweDBi
LCBrZXlsZW4pOwotCXRleHRsZW4gPSA4OwotCXN0cmNweSh0ZXh0LCAiSGkgVGhlcmUiKTsKLQlk
aWdlc3QgPSAiXHhiNlx4MTdceDMxXHg4Nlx4NTVceDA1XHg3Mlx4NjRceGUyXHg4Ylx4YzBceGI2
XHhmYlx4MzdceDhjXHg4ZVx4ZjFceDQ2XHhiZVx4MDAiOwotCWlmIChzY3RwX3Rlc3RfaG1hYygi
U0hBMSB0ZXN0IGNhc2UgMSIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5bGVuLAot
CSAgICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAwKQotCQlmYWlsZWQrKzsK
LQotCS8qLQotCSAqIHRlc3RfY2FzZSA9ICAgICAyCi0JICoga2V5ID0gICAgICAgICAgICJKZWZl
IgotCSAqIGtleV9sZW4gPSAgICAgICA0Ci0JICogZGF0YSA9ICAgICAgICAgICJ3aGF0IGRvIHlh
IHdhbnQgZm9yIG5vdGhpbmc/IgotCSAqIGRhdGFfbGVuID0gICAgICAyOAotCSAqIGRpZ2VzdCA9
ICAgICAgICAweGVmZmNkZjZhZTVlYjJmYTJkMjc0MTZkNWYxODRkZjljMjU5YTdjNzkKLQkgKi8K
LQlrZXlsZW4gPSA0OwotCXN0cmNweShrZXksICJKZWZlIik7Ci0JdGV4dGxlbiA9IDI4OwotCXN0
cmNweSh0ZXh0LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIpOwotCWRpZ2VzdCA9ICJc
eGVmXHhmY1x4ZGZceDZhXHhlNVx4ZWJceDJmXHhhMlx4ZDJceDc0XHgxNlx4ZDVceGYxXHg4NFx4
ZGZceDljXHgyNVx4OWFceDdjXHg3OSI7Ci0JaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3Qg
Y2FzZSAyIiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCi0JICAgIHRleHQs
IHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyotCi0J
ICogdGVzdF9jYXNlID0gICAgIDMKLQkgKiBrZXkgPSAgICAgICAgICAgMHhhYWFhYWFhYWFhYWFh
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCi0JICoga2V5X2xlbiA9ICAgICAgIDIwCi0JICog
ZGF0YSA9ICAgICAgICAgIDB4ZGQgcmVwZWF0ZWQgNTAgdGltZXMKLQkgKiBkYXRhX2xlbiA9ICAg
ICAgNTAKLQkgKiBkaWdlc3QgPSAgICAgICAgMHgxMjVkNzM0MmI5YWMxMWNkOTFhMzlhZjQ4YWEx
N2I0ZjYzZjE3NWQzCi0JICovCi0Ja2V5bGVuID0gMjA7Ci0JbWVtc2V0KGtleSwgMHhhYSwga2V5
bGVuKTsKLQl0ZXh0bGVuID0gNTA7Ci0JbWVtc2V0KHRleHQsIDB4ZGQsIHRleHRsZW4pOwotCWRp
Z2VzdCA9ICJceDEyXHg1ZFx4NzNceDQyXHhiOVx4YWNceDExXHhjZFx4OTFceGEzXHg5YVx4ZjRc
eDhhXHhhMVx4N2JceDRmXHg2M1x4ZjFceDc1XHhkMyI7Ci0JaWYgKHNjdHBfdGVzdF9obWFjKCJT
SEExIHRlc3QgY2FzZSAzIiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCi0J
ICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCi0JCWZhaWxlZCsrOwot
Ci0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDQKLQkgKiBrZXkgPSAgICAgICAgICAgMHgwMTAy
MDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOQotCSAqIGtleV9s
ZW4gPSAgICAgICAyNQotCSAqIGRhdGEgPSAgICAgICAgICAweGNkIHJlcGVhdGVkIDUwIHRpbWVz
Ci0JICogZGF0YV9sZW4gPSAgICAgIDUwCi0JICogZGlnZXN0ID0gICAgICAgIDB4NGM5MDA3ZjQw
MjYyNTBjNmJjODQxNGY5YmY1MGM4NmMyZDcyMzVkYQotCSAqLwotCWtleWxlbiA9IDI1OwotCW1l
bWNweShrZXksICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4
MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5Iiwg
a2V5bGVuKTsKLQl0ZXh0bGVuID0gNTA7Ci0JbWVtc2V0KHRleHQsIDB4Y2QsIHRleHRsZW4pOwot
CWRpZ2VzdCA9ICJceDRjXHg5MFx4MDdceGY0XHgwMlx4NjJceDUwXHhjNlx4YmNceDg0XHgxNFx4
ZjlceGJmXHg1MFx4YzhceDZjXHgyZFx4NzJceDM1XHhkYSI7Ci0JaWYgKHNjdHBfdGVzdF9obWFj
KCJTSEExIHRlc3QgY2FzZSA0IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4s
Ci0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCi0JCWZhaWxlZCsr
OwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDUKLQkgKiBrZXkgPSAgICAgICAgICAgMHgw
YzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjCi0JICoga2V5X2xlbiA9ICAg
ICAgIDIwCi0JICogZGF0YSA9ICAgICAgICAgICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIKLQkgKiBk
YXRhX2xlbiA9ICAgICAgMjAKLQkgKiBkaWdlc3QgPSAgICAgICAgMHg0YzFhMDM0MjRiNTVlMDdm
ZTdmMjdiZTFkNThiYjkzMjRhOWE1YTA0Ci0JICogZGlnZXN0LTk2ID0gICAgIDB4NGMxYTAzNDI0
YjU1ZTA3ZmU3ZjI3YmUxCi0JICovCi0Ja2V5bGVuID0gMjA7Ci0JbWVtc2V0KGtleSwgMHgwYywg
a2V5bGVuKTsKLQl0ZXh0bGVuID0gMjA7Ci0Jc3RyY3B5KHRleHQsICJUZXN0IFdpdGggVHJ1bmNh
dGlvbiIpOwotCWRpZ2VzdCA9ICJceDRjXHgxYVx4MDNceDQyXHg0Ylx4NTVceGUwXHg3Zlx4ZTdc
eGYyXHg3Ylx4ZTFceGQ1XHg4Ylx4YjlceDMyXHg0YVx4OWFceDVhXHgwNCI7Ci0JaWYgKHNjdHBf
dGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA1IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5
LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCi0J
CWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDYKLQkgKiBrZXkgPSAgICAg
ICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcwotCSAqIGtleV9sZW4gPSAgICAgICA4MAotCSAq
IGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAt
IEhhc2ggS2V5IEZpcnN0IgotCSAqIGRhdGFfbGVuID0gICAgICA1NAotCSAqIGRpZ2VzdCA9ICAg
ICAgICAweGFhNGFlNWUxNTI3MmQwMGU5NTcwNTYzN2NlOGEzYjU1ZWQ0MDIxMTIKLQkgKi8KLQlr
ZXlsZW4gPSA4MDsKLQltZW1zZXQoa2V5LCAweGFhLCBrZXlsZW4pOwotCXRleHRsZW4gPSA1NDsK
LQlzdHJjcHkodGV4dCwgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBI
YXNoIEtleSBGaXJzdCIpOwotCWRpZ2VzdCA9ICJceGFhXHg0YVx4ZTVceGUxXHg1Mlx4NzJceGQw
XHgwZVx4OTVceDcwXHg1Nlx4MzdceGNlXHg4YVx4M2JceDU1XHhlZFx4NDBceDIxXHgxMiI7Ci0J
aWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA2IiwgU0NUUF9BVVRIX0hNQUNfSURf
U0hBMSwga2V5LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVu
KSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDcKLQkgKiBr
ZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcwotCSAqIGtleV9sZW4gPSAgICAg
ICA4MAotCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1T
aXplIEtleSBhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0YSIKLQkgKiBkYXRhX2xl
biA9ICAgICAgNzMKLQkgKiBkaWdlc3QgPSAgICAgICAgMHhlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJh
YTc5NjVjNzgwOGJiZmYxYTkxCi0JICovCi0Ja2V5bGVuID0gODA7Ci0JbWVtc2V0KGtleSwgMHhh
YSwga2V5bGVuKTsKLQl0ZXh0bGVuID0gNzM7Ci0Jc3RyY3B5KHRleHQsICJUZXN0IFVzaW5nIExh
cmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IGFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBE
YXRhIik7Ci0JZGlnZXN0ID0gIlx4ZThceGU5XHg5ZFx4MGZceDQ1XHgyM1x4N2RceDc4XHg2ZFx4
NmJceGJhXHhhN1x4OTZceDVjXHg3OFx4MDhceGJiXHhmZlx4MWFceDkxIjsKLQlpZiAoc2N0cF90
ZXN0X2htYWMoIlNIQTEgdGVzdCBjYXNlIDciLCBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExLCBrZXks
IGtleWxlbiwKLQkgICAgdGV4dCwgdGV4dGxlbiwgZGlnZXN0LCBkaWdlc3RsZW4pIDwgMCkKLQkJ
ZmFpbGVkKys7Ci0KLQkvKiBkb25lIHdpdGggYWxsIHRlc3RzICovCi0JaWYgKGZhaWxlZCkKLQkJ
U0NUUF9QUklOVEYoIlxuU0hBMSB0ZXN0IHJlc3VsdHM6ICVkIGNhc2VzIGZhaWxlZCIsIGZhaWxl
ZCk7Ci0JZWxzZQotCQlTQ1RQX1BSSU5URigiXG5TSEExIHRlc3QgcmVzdWx0czogYWxsIHRlc3Qg
Y2FzZXMgcGFzc2VkIik7Ci19Ci0KLS8qCi0gKiB0ZXN0IGFzc29jIGtleSBjb25jYXRlbmF0aW9u
Ci0gKi8KLXN0YXRpYyBpbnQKLXNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihzY3RwX2tleV90
ICprZXkxLCBzY3RwX2tleV90ICprZXkyLAotICAgIHNjdHBfa2V5X3QgKmV4cGVjdGVkX2tleSkK
LXsKLQlzY3RwX2tleV90ICprZXk7Ci0JaW50IHJldF92YWw7Ci0KLQlzY3RwX3Nob3dfa2V5KGtl
eTEsICJcbmtleTEiKTsKLQlzY3RwX3Nob3dfa2V5KGtleTIsICJcbmtleTIiKTsKLQlrZXkgPSBz
Y3RwX2NvbXB1dGVfaGFzaGtleShrZXkxLCBrZXkyLCBOVUxMKTsKLQlzY3RwX3Nob3dfa2V5KGV4
cGVjdGVkX2tleSwgIlxuRXhwZWN0ZWQiKTsKLQlzY3RwX3Nob3dfa2V5KGtleSwgIlxuQ29tcHV0
ZWQiKTsKLQlpZiAobWVtY21wKGtleSwgZXhwZWN0ZWRfa2V5LCBleHBlY3RlZF9rZXktPmtleWxl
bikgIT0gMCkgewotCQlTQ1RQX1BSSU5URigiXG5GQUlMRUQiKTsKLQkJcmV0X3ZhbCA9IC0xOwot
CX0gZWxzZSB7Ci0JCVNDVFBfUFJJTlRGKCJcblBBU1NFRCIpOwotCQlyZXRfdmFsID0gMDsKLQl9
Ci0Jc2N0cF9mcmVlX2tleShrZXkxKTsKLQlzY3RwX2ZyZWVfa2V5KGtleTIpOwotCXNjdHBfZnJl
ZV9rZXkoZXhwZWN0ZWRfa2V5KTsKLQlzY3RwX2ZyZWVfa2V5KGtleSk7Ci0JcmV0dXJuIChyZXRf
dmFsKTsKLX0KLQotCi12b2lkCi1zY3RwX3Rlc3RfYXV0aGtleSh2b2lkKQotewotCXNjdHBfa2V5
X3QgKmtleTEsICprZXkyLCAqZXhwZWN0ZWRfa2V5OwotCWludCBmYWlsZWQgPSAwOwotCi0JLyog
dGVzdCBjYXNlIDEgKi8KLQlrZXkxID0gc2N0cF9zZXRfa2V5KCJceDAxXHgwMVx4MDFceDAxIiwg
NCk7Ci0Ja2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDJceDAzXHgwNCIsIDQpOwotCWV4cGVj
dGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAyXHgwM1x4MDQi
LCA4KTsKLQlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVj
dGVkX2tleSkgPCAwKQotCQlmYWlsZWQrKzsKLQotCS8qIHRlc3QgY2FzZSAyICovCi0Ja2V5MSA9
IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMSIsIDQpOwotCWtleTIgPSBzY3RwX3NldF9r
ZXkoIlx4MDIiLCAxKTsKLQlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgw
MFx4MDFceDAyIiwgNSk7Ci0JaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBr
ZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKLQkJZmFpbGVkKys7Ci0KLQkvKiB0ZXN0IGNhc2UgMyAq
LwotCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDEiLCAxKTsKLQlrZXkyID0gc2N0cF9zZXRfa2V5
KCJceDAwXHgwMFx4MDBceDAyIiwgNCk7Ci0JZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJc
eDAxXHgwMFx4MDBceDAwXHgwMiIsIDUpOwotCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRp
b24oa2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyogdGVz
dCBjYXNlIDQgKi8KLQlrZXkxID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAxIiwgNCk7
Ci0Ja2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMSIsIDEpOwotCWV4cGVjdGVkX2tleSA9IHNjdHBf
c2V0X2tleSgiXHgwMVx4MDBceDAwXHgwMFx4MDEiLCA1KTsKLQlpZiAoc2N0cF90ZXN0X2tleV9j
b25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQotCQlmYWlsZWQrKzsK
LQotCS8qIHRlc3QgY2FzZSA1ICovCi0Ja2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMSIsIDEpOwot
CWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDEiLCA0KTsKLQlleHBlY3RlZF9r
ZXkgPSBzY3RwX3NldF9rZXkoIlx4MDFceDAwXHgwMFx4MDBceDAxIiwgNSk7Ci0JaWYgKHNjdHBf
dGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKLQkJ
ZmFpbGVkKys7Ci0KLQkvKiB0ZXN0IGNhc2UgNiAqLwotCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4
MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3IiwgMTEpOwotCWtleTIg
PSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc
eDA4IiwgMTEpOwotCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgw
MFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAz
XHgwNFx4MDVceDA2XHgwOCIsIDIyKTsKLQlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9u
KGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQotCQlmYWlsZWQrKzsKLQotCS8qIHRlc3Qg
Y2FzZSA3ICovCi0Ja2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAy
XHgwM1x4MDRceDA1XHgwNlx4MDgiLCAxMSk7Ci0Ja2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMFx4
MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLCAxMSk7Ci0JZXhwZWN0ZWRf
a2V5ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVc
eDA2XHgwN1x4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA4IiwgMjIp
OwotCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0ZWRf
a2V5KSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyogZG9uZSB3aXRoIGFsbCB0ZXN0cyAqLwotCWlm
IChmYWlsZWQpCi0JCVNDVFBfUFJJTlRGKCJcbktleSBjb25jYXRlbmF0aW9uIHRlc3QgcmVzdWx0
czogJWQgY2FzZXMgZmFpbGVkIiwgZmFpbGVkKTsKLQllbHNlCi0JCVNDVFBfUFJJTlRGKCJcbktl
eSBjb25jYXRlbmF0aW9uIHRlc3QgcmVzdWx0czogYWxsIHRlc3QgY2FzZXMgcGFzc2VkIik7Ci19
Ci0KLQotI2lmIGRlZmluZWQoU1RBTkRBTE9ORV9ITUFDX1RFU1QpCi1pbnQKLW1haW4odm9pZCkK
LXsKLQlzY3RwX3Rlc3RfaG1hY19zaGExKCk7Ci0Jc2N0cF90ZXN0X2F1dGhrZXkoKTsKLX0KLQot
I2VuZGlmIC8qIFNUQU5EQUxPTkVfSE1BQ19URVNUICovCi0KLSNlbmRpZiAvKiBTQ1RQX0hNQUNf
VEVTVCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9hdXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIy
NGY1MTQxZTgxYmNmZTY5NWJmMTdmYzhkOGVhMTRiNDM2NDYzZjMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGgu
aAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cF9hdXRoLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAkIik7Ci0jZW5k
aWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0FVVEhfSF8KLSNkZWZpbmUgX05FVElORVRfU0NU
UF9BVVRIX0hfCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KLQotLyogZGlnZXN0IGxl
bmd0aHMgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9MRU5fU0hBMQkyMAotI2RlZmluZSBT
Q1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYJMzIKLSNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9M
RU5fTUFYCVNDVFBfQVVUSF9ESUdFU1RfTEVOX1NIQTI1NgotCi0vKiByYW5kb20gc2l6ZXMgKi8K
LSNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX0RFRkFVTFQJMzIKLSNkZWZpbmUgU0NUUF9B
VVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVECTMyCi0KLS8qIHVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQg
SE1BQyBhbGdvcml0aG0gY29udGV4dHMgKi8KLXR5cGVkZWYgdW5pb24gc2N0cF9oYXNoX2NvbnRl
eHQgewotCVNDVFBfU0hBMV9DVFggc2hhMTsKLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFD
X1NIQTI1NikKLQlTQ1RQX1NIQTI1Nl9DVFggc2hhMjU2OwotI2VuZGlmCi19IHNjdHBfaGFzaF9j
b250ZXh0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNjdHBfa2V5IHsKLQl1aW50MzJfdCBrZXlsZW47
Ci0JdWludDhfdCBrZXlbXTsKLX0gc2N0cF9rZXlfdDsKLQotdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9z
aGFyZWRfa2V5IHsKLQlMSVNUX0VOVFJZKHNjdHBfc2hhcmVkX2tleSkgbmV4dDsKLQlzY3RwX2tl
eV90ICprZXk7CS8qIGtleSB0ZXh0ICovCi0JdWludDMyX3QgcmVmY291bnQ7CS8qIHJlZmVyZW5j
ZSBjb3VudCAqLwotCXVpbnQxNl90IGtleWlkOwkJLyogc2hhcmVkIGtleSBJRCAqLwotCXVpbnQ4
X3QgZGVhY3RpdmF0ZWQ7CS8qIGtleSBpcyBkZWFjdGl2YXRlZCAqLwotfSBzY3RwX3NoYXJlZGtl
eV90OwotCi1MSVNUX0hFQUQoc2N0cF9rZXloZWFkLCBzY3RwX3NoYXJlZF9rZXkpOwotCi0vKiBh
dXRoZW50aWNhdGlvbiBjaHVua3MgbGlzdCAqLwotdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hdXRoX2No
a2xpc3QgewotCXVpbnQ4X3QgY2h1bmtzWzI1Nl07Ci0JdWludDhfdCBudW1fY2h1bmtzOwotfSBz
Y3RwX2F1dGhfY2hrbGlzdF90OwotCi0vKiBobWFjIGFsZ29zIHN1cHBvcnRlZCBsaXN0ICovCi10
eXBlZGVmIHN0cnVjdCBzY3RwX2htYWNsaXN0IHsKLQl1aW50MTZfdCBtYXhfYWxnbzsJLyogbWF4
IGFsZ29yaXRobXMgYWxsb2NhdGVkICovCi0JdWludDE2X3QgbnVtX2FsZ287CS8qIG51bSBhbGdv
cml0aG1zIHVzZWQgKi8KLQl1aW50MTZfdCBobWFjW107Ci19IHNjdHBfaG1hY2xpc3RfdDsKLQot
LyogYXV0aGVudGljYXRpb24gaW5mbyAqLwotdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hdXRoaW5mb3Jt
YXRpb24gewotCXNjdHBfa2V5X3QgKnJhbmRvbTsJLyogbG9jYWwgcmFuZG9tIGtleSAoY29uY2F0
ZW5hdGVkKSAqLwotCXVpbnQzMl90IHJhbmRvbV9sZW47CS8qIGxvY2FsIHJhbmRvbSBudW1iZXIg
bGVuZ3RoIGZvciBwYXJhbSAqLwotCXNjdHBfa2V5X3QgKnBlZXJfcmFuZG9tOy8qIHBlZXIncyBy
YW5kb20ga2V5IChjb25jYXRlbmF0ZWQpICovCi0Jc2N0cF9rZXlfdCAqYXNzb2Nfa2V5OwkvKiBj
YWNoZWQgY29uY2F0ZW5hdGVkIHNlbmQga2V5ICovCi0Jc2N0cF9rZXlfdCAqcmVjdl9rZXk7CS8q
IGNhY2hlZCBjb25jYXRlbmF0ZWQgcmVjdiBrZXkgKi8KLQl1aW50MTZfdCBhY3RpdmVfa2V5aWQ7
CS8qIGFjdGl2ZSBzZW5kIGtleWlkICovCi0JdWludDE2X3QgYXNzb2Nfa2V5aWQ7CS8qIGN1cnJl
bnQgc2VuZCBrZXlpZCAoY2FjaGVkKSAqLwotCXVpbnQxNl90IHJlY3Zfa2V5aWQ7CS8qIGxhc3Qg
cmVjdiBrZXlpZCAoY2FjaGVkKSAqLwotfSBzY3RwX2F1dGhpbmZvX3Q7Ci0KLQotCi0vKgotICog
TWFjcm9zCi0gKi8KLSNkZWZpbmUgc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNodW5rLCBs
aXN0KSAoKGxpc3QgPT0gTlVMTCkgPyAoMCkgOiAobGlzdC0+Y2h1bmtzW2NodW5rXSAhPSAwKSkK
LQotLyoKLSAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotCi0vKiBzb2NrZXQgb3B0aW9uIGFw
aSBmdW5jdGlvbnMgKi8KLWV4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90ICpzY3RwX2FsbG9jX2No
dW5rbGlzdCh2b2lkKTsKLWV4dGVybiB2b2lkIHNjdHBfZnJlZV9jaHVua2xpc3Qoc2N0cF9hdXRo
X2Noa2xpc3RfdCAqY2hrbGlzdCk7Ci1leHRlcm4gdm9pZCBzY3RwX2NsZWFyX2NodW5rbGlzdChz
Y3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0KTsKLWV4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90
ICpzY3RwX2NvcHlfY2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xpc3QpOwotZXh0
ZXJuIGludCBzY3RwX2F1dGhfYWRkX2NodW5rKHVpbnQ4X3QgY2h1bmssIHNjdHBfYXV0aF9jaGts
aXN0X3QgKmxpc3QpOwotZXh0ZXJuIGludCBzY3RwX2F1dGhfZGVsZXRlX2NodW5rKHVpbnQ4X3Qg
Y2h1bmssIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOwotZXh0ZXJuIHNpemVfdCBzY3RwX2F1
dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjb25zdCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KTsKLWV4
dGVybiBpbnQgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbGlzdCwKLSAgICB1aW50OF90ICpwdHIpOwotZXh0ZXJuIGludCBzY3RwX3BhY2tfYXV0
aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwKLSAgICB1aW50OF90ICpw
dHIpOwotZXh0ZXJuIGludCBzY3RwX3VucGFja19hdXRoX2NodW5rcyhjb25zdCB1aW50OF90ICpw
dHIsIHVpbnQ4X3QgbnVtX2NodW5rcywKLSAgICBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KTsK
LQotLyoga2V5IGhhbmRsaW5nICovCi1leHRlcm4gc2N0cF9rZXlfdCAqc2N0cF9hbGxvY19rZXko
dWludDMyX3Qga2V5bGVuKTsKLWV4dGVybiB2b2lkIHNjdHBfZnJlZV9rZXkoc2N0cF9rZXlfdCAq
a2V5KTsKLWV4dGVybiB2b2lkIHNjdHBfcHJpbnRfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3Qg
Y2hhciAqc3RyKTsKLWV4dGVybiB2b2lkIHNjdHBfc2hvd19rZXkoc2N0cF9rZXlfdCAqa2V5LCBj
b25zdCBjaGFyICpzdHIpOwotZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfZ2VuZXJhdGVfcmFuZG9t
X2tleSh1aW50MzJfdCBrZXlsZW4pOwotZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfc2V0X2tleSh1
aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbik7Ci1leHRlcm4gc2N0cF9rZXlfdCAqc2N0cF9j
b21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlfdCAqa2V5MiwKLSAgICBz
Y3RwX2tleV90ICpzaGFyZWQpOwotCi0vKiBzaGFyZWQga2V5IGhhbmRsaW5nICovCi1leHRlcm4g
c2N0cF9zaGFyZWRrZXlfdCAqc2N0cF9hbGxvY19zaGFyZWRrZXkodm9pZCk7Ci1leHRlcm4gdm9p
ZCBzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpOwotZXh0ZXJuIHNj
dHBfc2hhcmVka2V5X3QgKnNjdHBfZmluZF9zaGFyZWRrZXkoc3RydWN0IHNjdHBfa2V5aGVhZCAq
c2hhcmVkX2tleXMsCi0gICAgdWludDE2X3Qga2V5X2lkKTsKLWV4dGVybiBpbnQgc2N0cF9pbnNl
cnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlzLAotICAgIHNjdHBf
c2hhcmVka2V5X3QgKm5ld19za2V5KTsKLWV4dGVybiBpbnQgc2N0cF9jb3B5X3NrZXlsaXN0KGNv
bnN0IHN0cnVjdCBzY3RwX2tleWhlYWQgKnNyYywKLSAgICBzdHJ1Y3Qgc2N0cF9rZXloZWFkICpk
ZXN0KTsKLS8qIHJlZiBjb3VudHMgb24gc2hhcmVkIGtleXMsIGJ5IGtleSBpZCAqLwotZXh0ZXJu
IHZvaWQgc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2
X3Qga2V5aWQpOwotZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQsCi0gICAgaW50IHNvX2xvY2tlZCk7Ci0KLQotLyog
aG1hYyBsaXN0IGhhbmRsaW5nICovCi1leHRlcm4gc2N0cF9obWFjbGlzdF90ICpzY3RwX2FsbG9j
X2htYWNsaXN0KHVpbnQxNl90IG51bV9obWFjcyk7Ci1leHRlcm4gdm9pZCBzY3RwX2ZyZWVfaG1h
Y2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KTsKLWV4dGVybiBpbnQgc2N0cF9hdXRoX2FkZF9o
bWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFjX2lkKTsKLWV4dGVybiBz
Y3RwX2htYWNsaXN0X3QgKnNjdHBfY29weV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxpc3Qp
OwotZXh0ZXJuIHNjdHBfaG1hY2xpc3RfdCAqc2N0cF9kZWZhdWx0X3N1cHBvcnRlZF9obWFjbGlz
dCh2b2lkKTsKLWV4dGVybiB1aW50MTZfdCBzY3RwX25lZ290aWF0ZV9obWFjaWQoc2N0cF9obWFj
bGlzdF90ICpwZWVyLAotICAgIHNjdHBfaG1hY2xpc3RfdCAqbG9jYWwpOwotZXh0ZXJuIGludCBz
Y3RwX3NlcmlhbGl6ZV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0
cik7Ci1leHRlcm4gaW50IHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oc3RydWN0IHNjdHBfYXV0aF9o
bWFjX2FsZ28gKmhtYWNzLAotICAgIHVpbnQzMl90IG51bV9obWFjcyk7Ci0KLWV4dGVybiBzY3Rw
X2F1dGhpbmZvX3QgKnNjdHBfYWxsb2NfYXV0aGluZm8odm9pZCk7Ci1leHRlcm4gdm9pZCBzY3Rw
X2ZyZWVfYXV0aGluZm8oc2N0cF9hdXRoaW5mb190ICphdXRoaW5mbyk7Ci0KLS8qIGtleWVkLUhN
QUMgZnVuY3Rpb25zICovCi1leHRlcm4gdWludDMyX3Qgc2N0cF9nZXRfYXV0aF9jaHVua19sZW4o
dWludDE2X3QgaG1hY19hbGdvKTsKLWV4dGVybiB1aW50MzJfdCBzY3RwX2dldF9obWFjX2RpZ2Vz
dF9sZW4odWludDE2X3QgaG1hY19hbGdvKTsKLWV4dGVybiB1aW50MzJfdCBzY3RwX2htYWModWlu
dDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbiwKLSAgICB1aW50
OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpOwotZXh0ZXJuIGlu
dCBzY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4sCi0gICAgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwgdWludDhf
dCAqZGlnZXN0LCB1aW50MzJfdCBkaWdlc3RsZW4pOwotZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29t
cHV0ZV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9rZXlfdCAqa2V5LAotICAgIHVpbnQ4
X3QgKnRleHQsIHVpbnQzMl90IHRleHRsZW4sIHVpbnQ4X3QgKmRpZ2VzdCk7Ci1leHRlcm4gaW50
IHNjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQx
Nl90IGlkKTsKLQotLyogbWJ1ZiB2ZXJzaW9ucyAqLwotZXh0ZXJuIHVpbnQzMl90IHNjdHBfaG1h
Y19tKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCi0g
ICAgc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QsIHVp
bnQzMl90IHRyYWlsZXIpOwotZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29tcHV0ZV9obWFjX20odWlu
dDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksCi0gICAgc3RydWN0IG1idWYgKm0sIHVp
bnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QpOwotCi0vKgotICogYXV0aGVudGljYXRp
b24gcm91dGluZXMKLSAqLwotZXh0ZXJuIHZvaWQgc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwotZXh0ZXJuIHZvaWQgc2N0cF9jbGVh
cl9jYWNoZWRrZXlzX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsK
LWV4dGVybiBpbnQgc2N0cF9kZWxldGVfc2hhcmVka2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDE2X3Qga2V5aWQpOwotZXh0ZXJuIGludCBzY3RwX2RlbGV0ZV9zaGFyZWRrZXlfZXAoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOwotZXh0ZXJuIGludCBzY3RwX2F1
dGhfc2V0YWN0aXZla2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwot
ZXh0ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsIHVpbnQxNl90IGtleWlkKTsKLWV4dGVybiBpbnQgc2N0cF9kZWFjdF9zaGFyZWRrZXkoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7Ci1leHRlcm4gaW50IHNjdHBfZGVh
Y3Rfc2hhcmVka2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsK
LQotZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2dldF9jb29raWVfcGFyYW1zKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCi0gICAgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpOwotZXh0ZXJuIHZvaWQgc2N0cF9maWxsX2htYWNfZGlnZXN0X20oc3RydWN0IG1idWYg
Km0sIHVpbnQzMl90IGF1dGhfb2Zmc2V0LAotICAgIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1
dGgsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lkKTsKLWV4dGVybiBzdHJ1
Y3QgbWJ1ZiAqc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYg
KiptX2VuZCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0aF9yZXQsIHVpbnQzMl90
ICpvZmZzZXQsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IGNodW5rKTsKLWV4
dGVybiBpbnQgc2N0cF9oYW5kbGVfYXV0aChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2F1dGhfY2h1bmsgKmNoLAotICAgIHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZzZXQp
OwotZXh0ZXJuIHZvaWQgc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotICAgIHVpbnQzMl90IGluZGljYXRpb24sIHVpbnQxNl90IGtleWlkLCB1aW50MTZf
dCBhbHRfa2V5aWQsIGludCBzb19sb2NrZWQpOwotZXh0ZXJuIGludCBzY3RwX3ZhbGlkYXRlX2lu
aXRfYXV0aF9wYXJhbXMoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCi0gICAgaW50IGxpbWl0
KTsKLWV4dGVybiB2b2lkIHNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7Ci0KLS8qIHRlc3QgZnVuY3Rp
b25zICovCi0jaWZkZWYgU0NUUF9ITUFDX1RFU1QKLWV4dGVybiB2b2lkIHNjdHBfdGVzdF9obWFj
X3NoYTEodm9pZCk7Ci1leHRlcm4gdm9pZCBzY3RwX3Rlc3RfYXV0aGtleSh2b2lkKTsKLSNlbmRp
ZgotI2VuZGlmIC8qIF9fU0NUUF9BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2JzZF9hZGRyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1ZmRiODdkMGVjNDMyZDY4NDQ2ZmQ2MGUy
MWI2OTdiMWUzMmU5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYworKysgL2Rldi9udWxsCkBAIC0x
LDExMTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28g
U3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAg
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0
ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgot
X19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYyAzMTA1
OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9v
dXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdWlvLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2luZGF0YS5oPgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaW5jbHVkZSA8c3lzL3Vu
aXN0ZC5oPgotI2VuZGlmCi0KLS8qIERlY2xhcmUgYWxsIG9mIG91ciBtYWxsb2MgbmFtZWQgdHlw
ZXMgKi8KLSNpZm5kZWYgX19QYW5kYV9fCi1NQUxMT0NfREVGSU5FKFNDVFBfTV9NQVAsICJzY3Rw
X21hcCIsICJzY3RwIGFzb2MgbWFwIGRlc2NyaXB0b3IiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9N
X1NUUk1JLCAic2N0cF9zdHJpIiwgInNjdHAgc3RyZWFtIGluIGFycmF5Iik7Ci1NQUxMT0NfREVG
SU5FKFNDVFBfTV9TVFJNTywgInNjdHBfc3RybyIsICJzY3RwIHN0cmVhbSBvdXQgYXJyYXkiKTsK
LU1BTExPQ19ERUZJTkUoU0NUUF9NX0FTQ19BRERSLCAic2N0cF9hYWRyIiwgInNjdHAgYXNjb25m
IGFkZHJlc3MiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9NX0FTQ19JVCwgInNjdHBfYV9pdCIsICJz
Y3RwIGFzY29uZiBpdGVyYXRvciIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fQVVUSF9DTCwgInNj
dHBfYXRjbCIsICJzY3RwIGF1dGggY2h1bmtsaXN0Iik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9B
VVRIX0tZLCAic2N0cF9hdGt5IiwgInNjdHAgYXV0aCBrZXkiKTsKLU1BTExPQ19ERUZJTkUoU0NU
UF9NX0FVVEhfSEwsICJzY3RwX2F0aG0iLCAic2N0cCBhdXRoIGhtYWMgbGlzdCIpOwotTUFMTE9D
X0RFRklORShTQ1RQX01fQVVUSF9JRiwgInNjdHBfYXRoaSIsICJzY3RwIGF1dGggaW5mbyIpOwot
TUFMTE9DX0RFRklORShTQ1RQX01fU1RSRVNFVCwgInNjdHBfc3RyZSIsICJzY3RwIHN0cmVhbSBy
ZXNldCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fQ01TRywgInNjdHBfY21zZyIsICJzY3RwIENN
U0cgYnVmZmVyIik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9DT1BZQUwsICJzY3RwX2NwYWwiLCAi
c2N0cCBjb3B5IGFsbCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fVlJGLCAic2N0cF92cmYiLCAi
c2N0cCB2cmYgc3RydWN0Iik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9JRkEsICJzY3RwX2lmYSIs
ICJzY3RwIGlmYSBzdHJ1Y3QiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9NX0lGTiwgInNjdHBfaWZu
IiwgInNjdHAgaWZuIHN0cnVjdCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fVElNVywgInNjdHBf
dGltdyIsICJzY3RwIHRpbWUgYmxvY2siKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9NX01WUkYsICJz
Y3RwX212cmYiLCAic2N0cCBtdnJmIHBjYiBsaXN0Iik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9J
VEVSLCAic2N0cF9pdGVyIiwgInNjdHAgaXRlcmF0b3IgY29udHJvbCIpOwotTUFMTE9DX0RFRklO
RShTQ1RQX01fU09DS09QVCwgInNjdHBfc29ja28iLCAic2N0cCBzb2NrZXQgb3B0aW9uIik7Ci1N
QUxMT0NfREVGSU5FKFNDVFBfTV9NQ09SRSwgInNjdHBfbWNvcmUiLCAic2N0cCBtY29yZSBxdWV1
ZSIpOwotI2VuZGlmCi0KLS8qIEdsb2JhbCBOT04tVk5FVCBzdHJ1Y3R1cmUgdGhhdCBjb250cm9s
cyB0aGUgaXRlcmF0b3IgKi8KLXN0cnVjdCBpdGVyYXRvcl9jb250cm9sIHNjdHBfaXRfY3RsOwot
Ci0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCi1zdGF0aWMgdm9pZAotc2N0cF9jbGVhbnVwX2l0
cXVldWUodm9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQsICpuaXQ7Ci0KLQlUQUlM
UV9GT1JFQUNIX1NBRkUoaXQsICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIHNjdHBfbnh0X2l0
ciwgbml0KSB7Ci0JCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgewotCQkJKCppdC0+
ZnVuY3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7Ci0JCX0KLQkJVEFJTFFfUkVN
T1ZFKCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOwotCQlTQ1RQ
X0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKLQl9Ci19Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0vKl9fVXNlcnNwYWNlX18gVE9ETyBpZiB3ZSB1c2UgdGhyZWFkIGJhc2VkIGl0
ZXJhdG9yCi0gKiB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB3YWtldXAgd2lsbCBuZWVkIHRv
IGNoYW5nZS4KLSAqIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGltZW9fY29uZCBmb3IgaWRlbnQg
c29fdGltZW8KLSAqIGJ1dCB0aGF0IGlzIG5vdCBzdWZmaWNpZW50IGlmIHdlIG5lZWQgdG8gdXNl
IGFub3RoZXIgaWRlbnQKLSAqIGxpa2Ugd2FrZXVwKCZzY3RwcGNiaW5mby5pdGVyYXRvcl9ydW5u
aW5nKTsKLSAqLwotI2VuZGlmCi0KLXZvaWQKLXNjdHBfd2FrZXVwX2l0ZXJhdG9yKHZvaWQpCi17
Ci0jaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQotCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9pdF9j
dGwuaXRlcmF0b3Jfd2FrZXVwKTsKLSNlbHNlCi0JcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmc2N0
cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKLSNlbmRpZgotI2Vsc2UKLQl3YWtldXAoJnNjdHBf
aXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcpOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi1zdGF0aWMgdm9pZCAqCi0jZWxzZQotc3RhdGljIHZvaWQKLSNlbmRpZgotc2N0
cF9pdGVyYXRvcl90aHJlYWQodm9pZCAqdiBTQ1RQX1VOVVNFRCkKLXsKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0Jc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgaXRlcmF0
b3IiKTsKLSNlbmRpZgotCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKLQkvKiBJbiBGcmVl
QlNEIHRoaXMgdGhyZWFkIG5ldmVyIHRlcm1pbmF0ZXMuICovCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQlmb3IgKDs7KSB7Ci0jZWxzZQotCXdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
ZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgPT0gMCkgewotI2VuZGlmCi0jaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJbXNsZWVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5u
aW5nLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAmc2N0cF9pdF9jdGwuaXBp
X2l0ZXJhdG9yX3dxX210eCwKLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0RhcndpbikKLQkJICAgICAgIHNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93
cV9tdHgsCi0jZW5kaWYKLQkJICAgICAgIDAsICJ3YWl0aW5nX2Zvcl93b3JrIiwgMCk7Ci0jZWxz
ZQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJU2xlZXBDb25kaXRpb25W
YXJpYWJsZUNTKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXAsICZzY3RwX2l0X2N0bC5pcGlf
aXRlcmF0b3Jfd3FfbXR4LCBJTkZJTklURSk7Ci0jZWxzZQotCQlwdGhyZWFkX2NvbmRfd2FpdCgm
c2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwLCAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dx
X210eCk7Ci0jZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAo
c2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgewot
CQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlzY3RwX2l0ZXJhdG9yX3dvcmtlcigpOwotCX0KLSNp
ZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkvKiBOb3cgdGhpcyB0aHJlYWQgbmVlZHMgdG8gYmUg
dGVybWluYXRlZCAqLwotCXNjdHBfY2xlYW51cF9pdHF1ZXVlKCk7Ci0Jc2N0cF9pdF9jdGwuaXRl
cmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9FWElURUQ7Ci0JU0NUUF9JUElfSVRFUkFUT1Jf
V1FfVU5MT0NLKCk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCXNjdHBfd2FrZXVwX2l0
ZXJhdG9yKCk7Ci0JcmV0dXJuIChOVUxMKTsKLSNlbHNlCi0Jd2FrZXVwKCZzY3RwX2l0X2N0bC5p
dGVyYXRvcl9mbGFncyk7Ci0JdGhyZWFkX3Rlcm1pbmF0ZShjdXJyZW50X3RocmVhZCgpKTsKLSNp
ZmRlZiBJTlZBUklBTlRTCi0JcGFuaWMoIkhtbS4gdGhyZWFkX3Rlcm1pbmF0ZSgpIGNvbnRpbnVl
cy4uLiIpOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotfQotCi12b2lkCi1zY3RwX3N0YXJ0dXBf
aXRlcmF0b3Iodm9pZCkKLXsKLQlpZiAoc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MpIHsKLQkJLyog
WW91IG9ubHkgZ2V0IG9uZSAqLwotCQlyZXR1cm47Ci0JfQotCS8qIEluaXRpYWxpemUgZ2xvYmFs
IGxvY2tzIGhlcmUsIHRodXMgb25seSBvbmNlLiAqLwotCVNDVFBfSVRFUkFUT1JfTE9DS19JTklU
KCk7Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfSU5JVCgpOwotCVRBSUxRX0lOSVQoJnNjdHBfaXRf
Y3RsLml0ZXJhdG9yaGVhZCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVC
U0RfdmVyc2lvbiA8PSA3MDEwMDAKLQlrdGhyZWFkX2NyZWF0ZShzY3RwX2l0ZXJhdG9yX3RocmVh
ZCwKLSNlbHNlCi0Ja3Byb2NfY3JlYXRlKHNjdHBfaXRlcmF0b3JfdGhyZWFkLAotI2VuZGlmCi0J
ICAgICAgICAgICAgICh2b2lkICopTlVMTCwKLQkgICAgICAgICAgICAgJnNjdHBfaXRfY3RsLnRo
cmVhZF9wcm9jLAotCSAgICAgICAgICAgICBSRlBST0MsCi0JICAgICAgICAgICAgIFNDVFBfS1RI
UkVBRF9QQUdFUywKLQkgICAgICAgICAgICAgU0NUUF9LVFJIRUFEX05BTUUpOwotI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pCi0Ja2VybmVsX3RocmVhZF9zdGFydCgodGhyZWFkX2NvbnRpbnVlX3Qp
c2N0cF9pdGVyYXRvcl90aHJlYWQsIE5VTEwsICZzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7Ci0j
ZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaWYgKHNjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUoJnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCAmc2N0cF9pdGVyYXRvcl90aHJlYWQpKSB7
Ci0JCVNDVFBfUFJJTlRGKCJFUlJPUjogQ3JlYXRpbmcgc2N0cF9pdGVyYXRvcl90aHJlYWQgZmFp
bGVkLlxuIik7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBJTkVUNgotCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotLyogX19Vc2Vyc3BhY2VfXyBUT0RPLiBzdHJ1Y3QgaW42X2lmYWRkciBp
cyBkZWZpbmVkIGluIHN5cy9uZXRpbmV0Ni9pbjZfdmFyLmgKLSAgIGlwNl91c2VfZGVwcmVjYXRl
ZCBpcyBkZWZpbmVkIGFzICBpbnQgaXA2X3VzZV9kZXByZWNhdGVkID0gMTsgaW4gL3NyYy9zeXMv
bmV0aW5ldDYvaW42X3Byb3RvLmMKLSAqLwotdm9pZAotc2N0cF9nYXRoZXJfaW50ZXJuYWxfaWZh
X2ZsYWdzKHN0cnVjdCBzY3RwX2lmYSAqaWZhKQotewotICAgIHJldHVybjsgLyogc3R1YiAqLwot
fQotI2Vsc2UKLXZvaWQKLXNjdHBfZ2F0aGVyX2ludGVybmFsX2lmYV9mbGFncyhzdHJ1Y3Qgc2N0
cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKLQotCWlmYTYgPSAoc3Ry
dWN0IGluNl9pZmFkZHIgKilpZmEtPmlmYTsKLQlpZmEtPmZsYWdzID0gaWZhNi0+aWE2X2ZsYWdz
OwotCWlmICghTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlcHJlY2F0ZWQpKSB7Ci0JCWlmIChpZmEt
PmZsYWdzICYKLQkJICAgIElONl9JRkZfREVQUkVDQVRFRCkgewotCQkJaWZhLT5sb2NhbGlmYV9m
bGFncyB8PSBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRTsKLQkJfSBlbHNlIHsKLQkJCWlmYS0+bG9j
YWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOwotCQl9Ci0JfSBlbHNlIHsK
LQkJaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0JfQot
CWlmIChpZmEtPmZsYWdzICYKLQkgICAgKElONl9JRkZfREVUQUNIRUQgfAotCSAgICAgSU42X0lG
Rl9BTllDQVNUIHwKLQkgICAgIElONl9JRkZfTk9UUkVBRFkpKSB7Ci0JCWlmYS0+bG9jYWxpZmFf
ZmxhZ3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0JfSBlbHNlIHsKLQkJaWZhLT5sb2Nh
bGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0JfQotfQotI2VuZGlmIC8q
IF9fVXNlcnNwYWNlX18gKi8KLSNlbmRpZiAvKiBJTkVUNiAqLwotCi0KLSNpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotc3RhdGljIHVpbnQzMl90Ci1zY3RwX2lzX2Rlc2lyZWRfaW50ZXJmYWNl
X3R5cGUoc3RydWN0IGlmbmV0ICppZm4pCi17Ci0JaW50IHJlc3VsdDsKLQotCS8qIGNoZWNrIHRo
ZSBpbnRlcmZhY2UgdHlwZSB0byBzZWUgaWYgaXQncyBvbmUgd2UgY2FyZSBhYm91dCAqLwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotCXN3aXRjaChpZm5ldF90eXBlKGlmbikpIHsKLSNlbHNlCi0J
c3dpdGNoIChpZm4tPmlmX3R5cGUpIHsKLSNlbmRpZgotCWNhc2UgSUZUX0VUSEVSOgotCWNhc2Ug
SUZUX0lTTzg4MDIzOgotCWNhc2UgSUZUX0lTTzg4MDI0OgotCWNhc2UgSUZUX0lTTzg4MDI1Ogot
CWNhc2UgSUZUX0lTTzg4MDI2OgotCWNhc2UgSUZUX1NUQVJMQU46Ci0JY2FzZSBJRlRfUDEwOgot
CWNhc2UgSUZUX1A4MDoKLQljYXNlIElGVF9IWToKLQljYXNlIElGVF9GRERJOgotCWNhc2UgSUZU
X1hFVEhFUjoKLQljYXNlIElGVF9JU0ROQkFTSUM6Ci0JY2FzZSBJRlRfSVNETlBSSU1BUlk6Ci0J
Y2FzZSBJRlRfUFRQU0VSSUFMOgotCWNhc2UgSUZUX09USEVSOgotCWNhc2UgSUZUX1BQUDoKLQlj
YXNlIElGVF9MT09QOgotCWNhc2UgSUZUX1NMSVA6Ci0JY2FzZSBJRlRfR0lGOgotCWNhc2UgSUZU
X0wyVkxBTjoKLQljYXNlIElGVF9TVEY6Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKQotCWNhc2Ug
SUZUX0lQOgotCWNhc2UgSUZUX0lQT1ZFUkNETEM6Ci0JY2FzZSBJRlRfSVBPVkVSQ0xBVzoKLQlj
YXNlIElGVF9QUk9QVklSVFVBTDogLyogTmV0R3JhcGggVmlydHVhbCB0b28gKi8KLQljYXNlIElG
VF9WSVJUVUFMSVBBRERSRVNTOgotI2VuZGlmCi0JCXJlc3VsdCA9IDE7Ci0JCWJyZWFrOwotCWRl
ZmF1bHQ6Ci0JCXJlc3VsdCA9IDA7Ci0JfQotCi0JcmV0dXJuIChyZXN1bHQpOwotfQotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLWludAotc2N0cF9pc192bXdhcmVfaW50ZXJmYWNl
KHN0cnVjdCBpZm5ldCAqaWZuKQotewotCXJldHVybiAoc3RybmNtcChpZm5ldF9uYW1lKGlmbiks
ICJ2bW5ldCIsIDUpID09IDApOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0jaWZkZWYgTUFMTE9DCi0jdW5kZWYgTUFMTE9DCi0jZGVmaW5lIE1BTExP
Qyh4KSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKHgpKQotI2VuZGlmCi0jaWZkZWYg
RlJFRQotI3VuZGVmIEZSRUUKLSNkZWZpbmUgRlJFRSh4KSBIZWFwRnJlZShHZXRQcm9jZXNzSGVh
cCgpLCAwLCAoeCkpCi0jZW5kaWYKLXN0YXRpYyB2b2lkCi1zY3RwX2luaXRfaWZuc19mb3JfdnJm
KGludCB2cmZpZCkKLXsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0Jc3Ry
dWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQlEV09SRCBFcnIsIEFkYXB0ZXJBZGRyc1NpemU7Ci0J
UElQX0FEQVBURVJfQUREUkVTU0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFwdDsKLQlQSVBfQURBUFRF
Ul9VTklDQVNUX0FERFJFU1MgcFVuaWNhc3Q7Ci0jZW5kaWYKLQotI2lmZGVmIElORVQKLQlBZGFw
dGVyQWRkcnNTaXplID0gMDsKLQotCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZf
SU5FVCwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7Ci0JCWlmICgo
RXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lF
TlRfQlVGRkVSKSkgewotCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjRBZGRyZXNzZXMoKSBz
aXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKLQkJCVNDVFBfUFJJTlRG
KCJlcnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1Np
emUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogQWxsb2NhdGUgbWVtb3J5IGZyb20gc2l6
aW5nIGluZm9ybWF0aW9uICovCi0JaWYgKChwQWRhcHRlckFkZHJzID0gKFBJUF9BREFQVEVSX0FE
RFJFU1NFUykgR2xvYmFsQWxsb2MoR1BUUiwgQWRhcHRlckFkZHJzU2l6ZSkpID09IE5VTEwpIHsK
LQkJU0NUUF9QUklOVEYoIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIik7Ci0JCXJldHVybjsK
LQl9Ci0JLyogR2V0IGFjdHVhbCBhZGFwdGVyIGluZm9ybWF0aW9uICovCi0JaWYgKChFcnIgPSBH
ZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVULCAwLCBOVUxMLCBwQWRhcHRlckFkZHJzLCAmQWRh
cHRlckFkZHJzU2l6ZSkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLQkJU0NUUF9QUklOVEYoIkdldEFk
YXB0ZXJzVjRBZGRyZXNzZXMoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOwot
CQlGUkVFKHBBZGFwdGVyQWRkcnMpOwotCQlyZXR1cm47Ci0JfQotCS8qIEVudW1lcmF0ZSB0aHJv
dWdoIGVhY2ggcmV0dXJuZWQgYWRhcHRlciBhbmQgc2F2ZSBpdHMgaW5mb3JtYXRpb24gKi8KLQlm
b3IgKHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0
KSB7Ci0JCWlmIChwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSB8fCBwQWRhcHQt
PklmVHlwZSA9PSBJRl9UWVBFX0VUSEVSTkVUX0NTTUFDRCkgewotCQkJZm9yIChwVW5pY2FzdCA9
IHBBZGFwdC0+Rmlyc3RVbmljYXN0QWRkcmVzczsgcFVuaWNhc3Q7IHBVbmljYXN0ID0gcFVuaWNh
c3QtPk5leHQpIHsKLQkJCQlpZiAoSU40X0lTTElOS0xPQ0FMX0FERFJFU1MoJigoKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKShwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRyKSktPnNpbl9hZGRyKSkp
IHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90
b192cmYoMCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0JCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHQtPklmSW5kZXgsCi0JCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocEFkYXB0LT5JZlR5cGUgPT0gSUZfVFlQRV9J
RUVFODAyMTEpP01JQl9JRl9UWVBFX0VUSEVSTkVUOnBBZGFwdC0+SWZUeXBlLAotCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5BZGFwdGVyTmFtZSwKLQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0JCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRyLAotCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5GbGFncywKLQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDApOwotCQkJCWlmIChzY3RwX2lmYSkgewotCQkJCQlzY3RwX2lm
YS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7Ci0JCQkJfQotCQkJfQot
CQl9Ci0JfQotCUZSRUUocEFkYXB0ZXJBZGRycyk7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCUFk
YXB0ZXJBZGRyc1NpemUgPSAwOwotCi0JaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhB
Rl9JTkVUNiwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7Ci0JCWlm
ICgoRXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJ
Q0lFTlRfQlVGRkVSKSkgewotCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjZBZGRyZXNzZXMo
KSBzaXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKLQkJCVNDVFBfUFJJ
TlRGKCJlcnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRy
c1NpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCS8qIEFsbG9jYXRlIG1lbW9yeSBmcm9tIHNp
emluZyBpbmZvcm1hdGlvbiAqLwotCWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9B
RERSRVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7
Ci0JCVNDVFBfUFJJTlRGKCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOwotCQlyZXR1cm47
Ci0JfQotCS8qIEdldCBhY3R1YWwgYWRhcHRlciBpbmZvcm1hdGlvbiAqLwotCWlmICgoRXJyID0g
R2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIDAsIE5VTEwsIHBBZGFwdGVyQWRkcnMsICZB
ZGFwdGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VTUykgewotCQlTQ1RQX1BSSU5URigiR2V0
QWRhcHRlcnNWNkFkZHJlc3NlcygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7
Ci0JCUZSRUUocEFkYXB0ZXJBZGRycyk7Ci0JCXJldHVybjsKLQl9Ci0JLyogRW51bWVyYXRlIHRo
cm91Z2ggZWFjaCByZXR1cm5lZCBhZGFwdGVyIGFuZCBzYXZlIGl0cyBpbmZvcm1hdGlvbiAqLwot
CWZvciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRhcHQtPk5l
eHQpIHsKLQkJaWYgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExIHx8IHBBZGFw
dC0+SWZUeXBlID09IElGX1RZUEVfRVRIRVJORVRfQ1NNQUNEKSB7Ci0JCQlmb3IgKHBVbmljYXN0
ID0gcEFkYXB0LT5GaXJzdFVuaWNhc3RBZGRyZXNzOyBwVW5pY2FzdDsgcFVuaWNhc3QgPSBwVW5p
Y2FzdC0+TmV4dCkgewotCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYoMCwKLQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0JCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwQWRhcHQtPklwdjZJZkluZGV4LAotCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjEx
KT9NSUJfSUZfVFlQRV9FVEhFUk5FVDpwQWRhcHQtPklmVHlwZSwKLQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBBZGFwdC0+QWRhcHRlck5hbWUsCi0JCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcFVuaWNhc3QtPkFkZHJlc3MubHBTb2NrYWRkciwKLQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBBZGFwdC0+RmxhZ3MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAwKTsKLQkJCQlpZiAoc2N0cF9pZmEpIHsKLQkJCQkJc2N0cF9pZmEtPmxvY2Fs
aWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOwotCQkJCX0KLQkJCX0KLQkJfQotCX0K
LQlGUkVFKHBBZGFwdGVyQWRkcnMpOwotI2VuZGlmCi19Ci0jZWxpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi1zdGF0aWMgdm9pZAotc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJmaWQpCi17
Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCWludCByYzsKLQlzdHJ1Y3Qg
aWZhZGRycyAqaWZhLCAqaWZhczsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwotCXVpbnQz
Ml90IGlmYV9mbGFnczsKLQotCXJjID0gZ2V0aWZhZGRycygmaWZhcyk7Ci0JaWYgKHJjICE9IDAp
IHsKLQkJcmV0dXJuOwotCX0KLQlmb3IgKGlmYSA9IGlmYXM7IGlmYTsgaWZhID0gaWZhLT5pZmFf
bmV4dCkgewotCQlpZiAoaWZhLT5pZmFfYWRkciA9PSBOVUxMKSB7Ci0JCQljb250aW51ZTsKLQkJ
fQotI2lmICFkZWZpbmVkKElORVQpCi0JCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0g
QUZfSU5FVDYpIHsKLQkJCS8qIG5vbiBpbmV0NiBza2lwICovCi0JCQljb250aW51ZTsKLQkJfQot
I2VsaWYgIWRlZmluZWQoSU5FVDYpCi0JCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0g
QUZfSU5FVCkgewotCQkJLyogbm9uIGluZXQgc2tpcCAqLwotCQkJY29udGludWU7Ci0JCX0KLSNl
bHNlCi0JCWlmICgoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICYmIChpZmEt
PmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpKSB7Ci0JCQkvKiBub24gaW5ldC9pbmV0
NiBza2lwICovCi0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikK
LQkJaWYgKChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCSAgICBJ
TjZfSVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopaWZhLT5pZmFf
YWRkciktPnNpbjZfYWRkcikpIHsKLQkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8K
LQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQpCi0JCWlmIChpZmEt
PmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgotCQkgICAgKChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2FkZHIuc19hZGRyID09IDApIHsKLQkJCWNvbnRp
bnVlOwotCQl9Ci0jZW5kaWYKLQkJaWZhX2ZsYWdzID0gMDsKLQkJc2N0cF9pZmEgPSBzY3RwX2Fk
ZF9hZGRyX3RvX3ZyZih2cmZpZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO
VUxMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4KGlm
YS0+aWZhX25hbWUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSwKLQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmYS0+aWZhX2FkZHIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWZhX2ZsYWdzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotCQlpZiAo
c2N0cF9pZmEpIHsKLQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RF
RkVSX1VTRTsKLQkJfQotCX0KLQlmcmVlaWZhZGRycyhpZmFzKTsKLSNlbmRpZgotfQotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyB2b2lkCi1zY3RwX2luaXRfaWZuc19m
b3JfdnJmKGludCB2cmZpZCkKLXsKLQkvKiBIZXJlIHdlIG11c3QgYXBwbHkgQU5ZIGxvY2tzIG5l
ZWRlZCBieSB0aGUKLQkgKiBJRk4gd2UgYWNjZXNzIGFuZCBhbHNvIG1ha2Ugc3VyZSB3ZSBsb2Nr
Ci0JICogYW55IElGQSB0aGF0IGV4aXN0cyBhcyB3ZSBmbG9hdCB0aHJvdWdoIHRoZQotCSAqIGxp
c3Qgb2YgSUZBJ3MKLQkgKi8KLQlzdHJ1Y3QgaWZuZXQgKippZm5ldGxpc3Q7Ci0JdWludDMyX3Qg
aSwgaiwgY291bnQ7Ci0JY2hhciBuYW1lW1NDVFBfSUZOQU1TSVpdOwotCXN0cnVjdCBpZm5ldCAq
aWZuOwotCXN0cnVjdCBpZmFkZHIgKippZmFkZHJsaXN0OwotCXN0cnVjdCBpZmFkZHIgKmlmYTsK
LQlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwot
CXVpbnQzMl90IGlmYV9mbGFnczsKLQotCWlmIChpZm5ldF9saXN0X2dldChJRk5FVF9GQU1JTFlf
QU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLQlmb3IgKGkg
PSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlpZm4gPSBpZm5ldGxpc3RbaV07Ci0JCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKSAmJiBzY3RwX2lzX3Zt
d2FyZV9pbnRlcmZhY2UoaWZuKSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHNjdHBfaXNf
ZGVzaXJlZF9pbnRlcmZhY2VfdHlwZShpZm4pID09IDApIHsKLQkJCS8qIG5vbiBkZXNpcmVkIHR5
cGUgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChpZm5ldF9nZXRfYWRkcmVzc19saXN0KGlm
biwgJmlmYWRkcmxpc3QpICE9IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWZvciAoaiA9IDA7
IGlmYWRkcmxpc3Rbal0gIT0gTlVMTDsgaisrKSB7Ci0JCQlpZmEgPSBpZmFkZHJsaXN0W2pdOwot
CQkJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJ
aWYgKChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgJiYgKGlmYS0+aWZhX2Fk
ZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUNikpIHsKLQkJCQkvKiBub24gaW5ldC9pbmV0NiBza2lw
ICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5
ID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCYoKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRyKSkgewotCQkJCQkvKiBz
a2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0g
ZWxzZSB7Ci0JCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopaWZhLT5pZmFfYWRkciktPnNp
bl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJ
CX0KLQkJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlp
ZmE2ID0gKHN0cnVjdCBpbjZfaWZhZGRyICopaWZhOwotCQkJCWlmYV9mbGFncyA9IGlmYTYtPmlh
Nl9mbGFnczsKLQkJCX0gZWxzZSB7Ci0JCQkJaWZhX2ZsYWdzID0gMDsKLQkJCX0KLQkJCXNucHJp
bnRmKG5hbWUsIFNDVFBfSUZOQU1TSVosICIlcyVkIiwgaWZuZXRfbmFtZShpZm4pLCBpZm5ldF91
bml0KGlmbikpOwotCQkJc2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpZm4sIC8qIFhYWCAqLwot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF9pbmRleChpZm4pLAotCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF90eXBlKGlmbiksCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCi0JCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICh2b2lkICopaWZhLCAvKiBYWFggKi8KLQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWZhLT5pZmFfYWRkciwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWZhX2ZsYWdzLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
KTsKLQkJCWlmIChzY3RwX2lmYSkgewotCQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+
U0NUUF9BRERSX0RFRkVSX1VTRTsKLQkJCX0KLQkJfQotCQlpZm5ldF9mcmVlX2FkZHJlc3NfbGlz
dChpZmFkZHJsaXN0KTsKLQl9Ci0JaWZuZXRfbGlzdF9mcmVlKGlmbmV0bGlzdCk7Ci19Ci0jZW5k
aWYKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi1zdGF0aWMgdm9pZAotc2N0cF9pbml0X2lm
bnNfZm9yX3ZyZihpbnQgdnJmaWQpCi17Ci0JLyogSGVyZSB3ZSBtdXN0IGFwcGx5IEFOWSBsb2Nr
cyBuZWVkZWQgYnkgdGhlCi0JICogSUZOIHdlIGFjY2VzcyBhbmQgYWxzbyBtYWtlIHN1cmUgd2Ug
bG9jawotCSAqIGFueSBJRkEgdGhhdCBleGlzdHMgYXMgd2UgZmxvYXQgdGhyb3VnaCB0aGUKLQkg
KiBsaXN0IG9mIElGQSdzCi0JICovCi0Jc3RydWN0IGlmbmV0ICppZm47Ci0Jc3RydWN0IGlmYWRk
ciAqaWZhOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0JdWludDMyX3QgaWZhX2ZsYWdz
OwotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IGluNl9pZmFkZHIgKmlmYTY7Ci0jZW5kaWYKLQotCUlG
TkVUX1JMT0NLKCk7Ci0JVEFJTFFfRk9SRUFDSChpZm4sICZNT0RVTEVfR0xPQkFMKGlmbmV0KSwg
aWZfbGluaykgewotCQlpZiAoc2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90eXBlKGlmbikgPT0g
MCkgewotCQkJLyogbm9uIGRlc2lyZWQgdHlwZSAqLwotCQkJY29udGludWU7Ci0JCX0KLSNpZiAo
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAw
KSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMAotCQlJRl9BRERSX1JMT0NLKGlmbik7Ci0j
ZWxzZQotCQlJRl9BRERSX0xPQ0soaWZuKTsKLSNlbmRpZgotCQlUQUlMUV9GT1JFQUNIKGlmYSwg
Jmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5rKSB7Ci0JCQlpZiAoaWZhLT5pZmFfYWRkciA9PSBO
VUxMKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGlmYS0+aWZhX2FkZHItPnNh
X2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoKLQkJCQlpZiAoKChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2FkZHIuc19hZGRyID09IDApIHsK
LQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCYoKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRyKSkgewotCQkJCQkv
KiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJ
CQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXN3
aXRjaCAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBB
Rl9JTkVUOgotCQkJCWlmYV9mbGFncyA9IDA7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlpZmE2ID0gKHN0cnVjdCBpbjZfaWZhZGRyICop
aWZhOwotCQkJCWlmYV9mbGFncyA9IGlmYTYtPmlhNl9mbGFnczsKLQkJCQlicmVhazsKLSNlbmRp
ZgotCQkJZGVmYXVsdDoKLQkJCQlpZmFfZmxhZ3MgPSAwOwotCQkJCWJyZWFrOwotCQkJfQotCQkJ
c2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHZvaWQgKilpZm4sCi0JCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmbi0+aWZfaW5kZXgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmbi0+aWZfdHlwZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZu
LT5pZl94bmFtZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilp
ZmEsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2FkZHIsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYV9mbGFncywKLQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0JCQlpZiAoc2N0cF9pZmEpIHsKLQkJCQlzY3Rw
X2lmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7Ci0JCQl9Ci0JCX0K
LSNpZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwg
OTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMAotCQlJRl9BRERSX1JVTkxPQ0so
aWZuKTsKLSNlbHNlCi0JCUlGX0FERFJfVU5MT0NLKGlmbik7Ci0jZW5kaWYKLQl9Ci0JSUZORVRf
UlVOTE9DSygpOwotfQotI2VuZGlmCi0KLXZvaWQKLXNjdHBfaW5pdF92cmZfbGlzdChpbnQgdnJm
aWQpCi17Ci0JaWYgKHZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKQotCQkvKiBjYW4ndCBkbyB0aGF0
ICovCi0JCXJldHVybjsKLQotCS8qIERvbid0IGNhcmUgYWJvdXQgcmV0dXJuIGhlcmUgKi8KLQko
dm9pZClzY3RwX2FsbG9jYXRlX3ZyZih2cmZpZCk7Ci0KLQkvKiBOb3cgd2UgbmVlZCB0byBidWls
ZCBhbGwgdGhlIGlmbidzCi0JICogZm9yIHRoaXMgdnJmIGFuZCB0aGVyZSBhZGRyZXNzZXMKLQkg
Ki8KLQlzY3RwX2luaXRfaWZuc19mb3JfdnJmKHZyZmlkKTsKLX0KLQotdm9pZAotc2N0cF9hZGRy
X2NoYW5nZShzdHJ1Y3QgaWZhZGRyICppZmEsIGludCBjbWQpCi17Ci0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotCXVpbnQzMl90IGlmYV9mbGFncyA9
IDA7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPT0gMCkgewot
CQlyZXR1cm47Ci0JfQotCS8qIEJTRCBvbmx5IGhhcyBvbmUgVlJGLCBpZiB0aGlzIGNoYW5nZXMK
LQkgKiB3ZSB3aWxsIG5lZWQgdG8gaG9vayBpbiB0aGUgcmlnaHQKLQkgKiB0aGluZ3MgaGVyZSB0
byBnZXQgdGhlIGlkIHRvIHBhc3MgdG8KLQkgKiB0aGUgYWRkcmVzcyBtYW5hZ2VtZW50IHJvdXRp
bmUuCi0JICovCi0JaWYgKFNDVFBfQkFTRV9WQVIoZmlyc3RfdGltZSkgPT0gMCkgewotCQkvKiBT
cGVjaWFsIHRlc3QgdG8gc2VlIGlmIG15IDo6MSB3aWxsIHNob3d1cCB3aXRoIHRoaXMgKi8KLQkJ
U0NUUF9CQVNFX1ZBUihmaXJzdF90aW1lKSA9IDE7Ci0JCXNjdHBfaW5pdF9pZm5zX2Zvcl92cmYo
U0NUUF9ERUZBVUxUX1ZSRklEKTsKLQl9Ci0KLQlpZiAoKGNtZCAhPSBSVE1fQUREKSAmJiAoY21k
ICE9IFJUTV9ERUxFVEUpKSB7Ci0JCS8qIGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIHRoaXMg
Ki8KLQkJcmV0dXJuOwotCX0KLQotCWlmIChpZmEtPmlmYV9hZGRyID09IE5VTEwpIHsKLQkJcmV0
dXJuOwotCX0KLQlpZiAoc2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90eXBlKGlmYS0+aWZhX2lm
cCkgPT0gMCkgewotCQkvKiBub24gZGVzaXJlZCB0eXBlICovCi0JCXJldHVybjsKLQl9Ci0Jc3dp
dGNoIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9J
TkVUOgotCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2Fk
ZHIuc19hZGRyID09IDApIHsKLQkJCXJldHVybjsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lm
ZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaWZhX2ZsYWdzID0gKChzdHJ1Y3QgaW42X2lm
YWRkciAqKWlmYSktPmlhNl9mbGFnczsKLQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCYo
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRyKSkgewotCQkJ
Lyogc2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFr
OwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogbm9uIGluZXQvaW5ldDYgc2tpcCAqLwotCQlyZXR1
cm47Ci0JfQotCWlmIChjbWQgPT0gUlRNX0FERCkgewotCQkodm9pZClzY3RwX2FkZF9hZGRyX3Rv
X3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsICh2b2lkICopaWZhLT5pZmFfaWZwLAotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF9pbmRleChp
ZmEtPmlmYV9pZnApLCBpZm5ldF90eXBlKGlmYS0+aWZhX2lmcCksIGlmbmV0X25hbWUoaWZhLT5p
ZmFfaWZwKSwKLSNlbHNlCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2lm
cC0+aWZfaW5kZXgsIGlmYS0+aWZhX2lmcC0+aWZfdHlwZSwgaWZhLT5pZmFfaWZwLT5pZl94bmFt
ZSwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWlmYSwgaWZh
LT5pZmFfYWRkciwgaWZhX2ZsYWdzLCAxKTsKLQl9IGVsc2UgewotCi0JCXNjdHBfZGVsX2FkZHJf
ZnJvbV92cmYoU0NUUF9ERUZBVUxUX1ZSRklELCBpZmEtPmlmYV9hZGRyLAotI2lmIGRlZmluZWQo
X19BUFBMRV9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIGlmbmV0X2luZGV4KGlmYS0+aWZh
X2lmcCksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZuZXRfbmFtZShpZmEtPmlmYV9pZnAp
KTsKLSNlbHNlCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfaWZwLT5pZl9pbmRl
eCwKLQkJICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9pZnAtPmlmX3huYW1lKTsKLSNl
bmRpZgotCi0JCS8qIFdlIGRvbid0IGJ1bXAgcmVmY291bnQgaGVyZSBzbyB3aGVuIGl0IGNvbXBs
ZXRlcwotCQkgKiB0aGUgZmluYWwgZGVsZXRlIHdpbGwgaGFwcGVuLgotCQkgKi8KLQl9Ci0jZW5k
aWYKLX0KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi12b2lkCi1zY3RwX2FkZF9vcl9kZWxf
aW50ZXJmYWNlcyhpbnQgKCpwcmVkKShzdHJ1Y3QgaWZuZXQgKiksIGludCBhZGQpCi17Ci0Jc3Ry
dWN0IGlmbmV0ICppZm47Ci0Jc3RydWN0IGlmYWRkciAqaWZhOwotCi0JSUZORVRfUkxPQ0soKTsK
LQlUQUlMUV9GT1JFQUNIKGlmbiwgJk1PRFVMRV9HTE9CQUwoaWZuZXQpLCBpZl9saW5rKSB7Ci0J
CWlmICghKCpwcmVkKShpZm4pKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlUQUlMUV9GT1JFQUNI
KGlmYSwgJmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5rKSB7Ci0JCQlzY3RwX2FkZHJfY2hhbmdl
KGlmYSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOwotCQl9Ci0JfQotCUlGTkVUX1JVTkxP
Q0soKTsKLX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotdm9pZAotc2N0cF9hZGRf
b3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3RydWN0IGlmbmV0ICopLCBpbnQgYWRkKQot
ewotCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKLQlzdHJ1Y3QgaWZhZGRyICoqaWZhZGRybGlz
dDsKLQl1aW50MzJfdCBpLCBqLCBjb3VudDsKLQotCWlmIChpZm5ldF9saXN0X2dldChJRk5FVF9G
QU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLQlm
b3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlpZiAoISgqcHJlZCkoaWZuZXRsaXN0W2ld
KSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGlmbmV0X2dldF9hZGRyZXNzX2xpc3QoaWZu
ZXRsaXN0W2ldLCAmaWZhZGRybGlzdCkgIT0gMCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJZm9y
IChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBqKyspIHsKLQkJCXNjdHBfYWRkcl9jaGFu
Z2UoaWZhZGRybGlzdFtqXSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOwotCQl9Ci0JCWlm
bmV0X2ZyZWVfYWRkcmVzc19saXN0KGlmYWRkcmxpc3QpOwotCX0KLQlpZm5ldF9saXN0X2ZyZWUo
aWZuZXRsaXN0KTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQotc3RydWN0IG1idWYgKgotc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHVuc2lnbmVkIGludCBzcGFjZV9uZWVkZWQsIGludCB3YW50X2hlYWRl
ciwKLQkJICAgICAgaW50IGhvdywgaW50IGFsbG9uZWJ1ZiwgaW50IHR5cGUpCi17Ci0gICAgc3Ry
dWN0IG1idWYgKm0gPSBOVUxMOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQotICAvKgot
ICAgKiBfX1VzZXJzcGFjZV9fCi0gICAqIFVzaW5nIG1fY2xnZXQsIHdoaWNoIGNyZWF0ZXMgYW5k
IG1idWYgYW5kIGEgY2x1c3RlciBhbmQKLSAgICogaG9va3MgdGhvc2UgdG9nZXRoZXIuCi0gICAq
IFRPRE86IFRoaXMgZG9lcyBub3QgeWV0IGhhdmUgZnVuY3Rpb25hbGl0eSBmb3IganVtYm8gcGFj
a2V0cy4KLSAgICoKLSAgICovCi0KLQlpbnQgbWJ1Zl90aHJlc2hvbGQ7Ci0JaWYgKHdhbnRfaGVh
ZGVyKSB7Ci0JCU1HRVRIRFIobSwgaG93LCB0eXBlKTsKLQl9IGVsc2UgewotCQlNR0VUKG0sIGhv
dywgdHlwZSk7Ci0JfQotCWlmIChtID09IE5VTEwpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0J
aWYgKGFsbG9uZWJ1ZiA9PSAwKQotCQltYnVmX3RocmVzaG9sZCA9IFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCk7Ci0JZWxzZQotCQltYnVmX3RocmVzaG9sZCA9IDE7
Ci0KLQotCWlmICgoaW50KXNwYWNlX25lZWRlZCA+ICgoKG1idWZfdGhyZXNob2xkIC0gMSkgKiBN
TEVOKSArIE1ITEVOKSkgewotCQlNQ0xHRVQobSwgaG93KTsKLQkJaWYgKG0gPT0gTlVMTCkgewot
CQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCi0JCWlmIChTQ1RQX0JVRl9JU19FWFRFTkRFRChtKSA9
PSAwKSB7Ci0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JfQot
CVNDVFBfQlVGX0xFTihtKSA9IDA7Ci0JU0NUUF9CVUZfTkVYVChtKSA9IFNDVFBfQlVGX05FWFRf
UEtUKG0pID0gTlVMTDsKLQotCS8qIF9fVXNlcnNwYWNlX18KLQkgKiBDaGVjayBpZiBhbnl0aGlu
ZyBuZWVkIHRvIGJlIGRvbmUgdG8gZW5zdXJlIGxvZ2dpbmcgd29ya3MKLQkgKi8KLSNpZmRlZiBT
Q1RQX01CVUZfTE9HR0lORwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWIobSwgU0NUUF9N
QlVGX0lBTExPQyk7Ci0JfQotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDExMDAwNTIKLQltID0gIG1fZ2V0bTIoTlVMTCwgc3BhY2VfbmVl
ZGVkLCBob3csIHR5cGUsIHdhbnRfaGVhZGVyID8gTV9QS1RIRFIgOiAwKTsKLQlpZiAobSA9PSBO
VUxMKSB7Ci0JCS8qIGJhZCwgbm8gbWVtb3J5ICovCi0JCXJldHVybiAobSk7Ci0JfQotCWlmIChh
bGxvbmVidWYpIHsKLQkJaWYgKFNDVFBfQlVGX1NJWkUobSkgPCBzcGFjZV9uZWVkZWQpIHsKLQkJ
CW1fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JfQotCWlmIChTQ1RQX0JVRl9O
RVhUKG0pKSB7Ci0JCXNjdHBfbV9mcmVlbShTQ1RQX0JVRl9ORVhUKG0pKTsKLQkJU0NUUF9CVUZf
TkVYVChtKSA9IE5VTEw7Ci0JfQotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJM
RSkgewotCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9DKTsKLQl9Ci0jZW5kaWYKLSNl
bGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0J
bSA9ICBtX2dldG0yKE5VTEwsIHNwYWNlX25lZWRlZCwgaG93LCB0eXBlLCB3YW50X2hlYWRlciA/
IE1fUEtUSERSIDogMCk7Ci0JaWYgKG0gPT0gTlVMTCkgewotCQkvKiBiYWQsIG5vIG1lbW9yeSAq
LwotCQlyZXR1cm4gKG0pOwotCX0KLQlpZiAoYWxsb25lYnVmKSB7Ci0JCWludCBzaXo7Ci0JCWlm
IChTQ1RQX0JVRl9JU19FWFRFTkRFRChtKSkgewotCQkJc2l6ID0gU0NUUF9CVUZfRVhURU5EX1NJ
WkUobSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAod2FudF9oZWFkZXIpCi0JCQkJc2l6ID0gTUhMRU47
Ci0JCQllbHNlCi0JCQkJc2l6ID0gTUxFTjsKLQkJfQotCQlpZiAoc2l6IDwgc3BhY2VfbmVlZGVk
KSB7Ci0JCQltX2ZyZWVtKG0pOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCX0KLQlpZiAoU0NU
UF9CVUZfTkVYVChtKSkgewotCQlzY3RwX21fZnJlZW0oU0NUUF9CVUZfTkVYVChtKSk7Ci0JCVND
VFBfQlVGX05FWFQobSkgPSBOVUxMOwotCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lO
R19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWIobSwgU0NUUF9NQlVGX0lBTExPQyk7Ci0JfQotI2Vu
ZGlmCi0jZWxzZQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDYwMTAwMAotCWludCBhbG9jX3NpemU7Ci0JaW50IGluZGV4ID0gMDsKLSNlbmRpZgotCWlu
dCBtYnVmX3RocmVzaG9sZDsKLQlpZiAod2FudF9oZWFkZXIpIHsKLQkJTUdFVEhEUihtLCBob3cs
IHR5cGUpOwotCX0gZWxzZSB7Ci0JCU1HRVQobSwgaG93LCB0eXBlKTsKLQl9Ci0JaWYgKG0gPT0g
TlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoYWxsb25lYnVmID09IDApCi0JCW1i
dWZfdGhyZXNob2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21idWZfdGhyZXNob2xkX2NvdW50
KTsKLQllbHNlCi0JCW1idWZfdGhyZXNob2xkID0gMTsKLQotCi0JaWYgKHNwYWNlX25lZWRlZCA+
ICgoKG1idWZfdGhyZXNob2xkIC0gMSkgKiBNTEVOKSArIE1ITEVOKSkgewotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDYwMTAwMAotCXRyeV9hZ2FpbjoK
LQkJaW5kZXggPSA0OwotCQlpZiAoc3BhY2VfbmVlZGVkIDw9IE1DTEJZVEVTKSB7Ci0JCQlhbG9j
X3NpemUgPSBNQ0xCWVRFUzsKLQkJfSBlbHNlIHsKLQkJCWFsb2Nfc2l6ZSA9IE1KVU1QQUdFU0la
RTsKLQkJCWluZGV4ID0gNTsKLQkJfQotCQltX2NsamdldChtLCBob3csIGFsb2Nfc2l6ZSk7Ci0J
CWlmIChtID09IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKFNDVFBfQlVG
X0lTX0VYVEVOREVEKG0pID09IDApIHsKLQkJCWlmICgoYWxvY19zaXplICE9IE1DTEJZVEVTKSAm
JgotCQkJICAgKGFsbG9uZWJ1ZiA9PSAwKSkgewotCQkJCWFsb2Nfc2l6ZSAtPSAxMDsKLQkJCQln
b3RvIHRyeV9hZ2FpbjsKLQkJCX0KLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCXJldHVybiAoTlVM
TCk7Ci0JCX0KLSNlbHNlCi0JCU1DTEdFVChtLCBob3cpOwotCQlpZiAobSA9PSBOVUxMKSB7Ci0J
CQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChTQ1RQX0JVRl9JU19FWFRFTkRFRChtKSA9PSAw
KSB7Ci0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0jZW5kaWYK
LQl9Ci0JU0NUUF9CVUZfTEVOKG0pID0gMDsKLQlTQ1RQX0JVRl9ORVhUKG0pID0gU0NUUF9CVUZf
TkVYVF9QS1QobSkgPSBOVUxMOwotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJM
RSkgewotCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9DKTsKLQl9Ci0jZW5kaWYKLSNl
bmRpZgotCXJldHVybiAobSk7Ci19Ci0KLQotI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKLXZv
aWQKLXNjdHBfcGFja2V0X2xvZyhzdHJ1Y3QgbWJ1ZiAqbSkKLXsKLQlpbnQgKmxlbmF0LCB0aGlz
b25lOwotCXZvaWQgKmNvcHl0bzsKLQl1aW50MzJfdCAqdGlja190b2NrOwotCWludCBsZW5ndGg7
Ci0JaW50IHRvdGFsX2xlbjsKLQlpbnQgZ3JhYmJlZF9sb2NrID0gMDsKLQlpbnQgdmFsdWUsIG5l
d3ZhbCwgdGhpc2VuZCwgdGhpc2JlZ2luOwotCS8qCi0JICogQnVmZmVyIGxheW91dC4KLQkgKiAt
c2l6ZW9mIHRoaXMgZW50cnkgKHRvdGFsX2xlbikKLQkgKiAtcHJldmlvdXMgZW5kICAgICAgKHZh
bHVlKQotCSAqIC10aWNrcyBvZiBsb2cgICAgICAodGlja3MpCi0JICogbyAtaXAgcGFja2V0Ci0J
ICogbyAtYXMgbG9nZ2VkCi0JICogLSB3aGVyZSB0aGlzIHN0YXJ0ZWQgKHRoaXNiZWdpbikKLQkg
KiB4IDwtLWVuZCBwb2ludHMgaGVyZQotCSAqLwotCWxlbmd0aCA9IFNDVFBfSEVBREVSX0xFTiht
KTsKLQl0b3RhbF9sZW4gPSBTQ1RQX1NJWkUzMigobGVuZ3RoICsgKDQgKiBzaXplb2YoaW50KSkp
KTsKLQkvKiBMb2cgYSBwYWNrZXQgdG8gdGhlIGJ1ZmZlci4gKi8KLQlpZiAodG90YWxfbGVuPiBT
Q1RQX1BBQ0tFVF9MT0dfU0laRSkgewotCQkvKiBDYW4ndCBsb2cgdGhpcyBwYWNrZXQgSSBoYXZl
IG5vdCBhIGJ1ZmZlciBiaWcgZW5vdWdoICovCi0JCXJldHVybjsKLQl9Ci0JaWYgKGxlbmd0aCA8
IChpbnQpKFNDVFBfTUlOX1Y0X09WRVJIRUFEICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9h
Y2tfY2h1bmspKSkgewotCQlyZXR1cm47Ci0JfQotCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0Vf
VkFSKHBhY2tldF9sb2dfd3JpdGVycyksIDEpOwotIHRyeV9hZ2FpbjoKLQlpZiAoU0NUUF9CQVNF
X1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpID4gU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0sp
IHsKLQkJU0NUUF9JUF9QS1RMT0dfTE9DSygpOwotCQlncmFiYmVkX2xvY2sgPSAxOwotCWFnYWlu
X2xvY2tlZDoKLQkJdmFsdWUgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKTsKLQkJbmV3
dmFsID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCkgKyB0b3RhbF9sZW47Ci0JCWlmIChu
ZXd2YWwgPj0gU0NUUF9QQUNLRVRfTE9HX1NJWkUpIHsKLQkJCS8qIHdlIHdyYXBwZWQgKi8KLQkJ
CXRoaXNiZWdpbiA9IDA7Ci0JCQl0aGlzZW5kID0gdG90YWxfbGVuOwotCQl9IGVsc2UgewotCQkJ
dGhpc2JlZ2luID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCk7Ci0JCQl0aGlzZW5kID0g
bmV3dmFsOwotCQl9Ci0JCWlmICghKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfVkFSKHBh
Y2tldF9sb2dfZW5kKSwgdmFsdWUsIHRoaXNlbmQpKSkgewotCQkJZ290byBhZ2Fpbl9sb2NrZWQ7
Ci0JCX0KLQl9IGVsc2UgewotCQl2YWx1ZSA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQp
OwotCQluZXd2YWwgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSArIHRvdGFsX2xlbjsK
LQkJaWYgKG5ld3ZhbCA+PSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgewotCQkJLyogd2Ugd3JhcHBl
ZCAqLwotCQkJdGhpc2JlZ2luID0gMDsKLQkJCXRoaXNlbmQgPSB0b3RhbF9sZW47Ci0JCX0gZWxz
ZSB7Ci0JCQl0aGlzYmVnaW4gPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKTsKLQkJCXRo
aXNlbmQgPSBuZXd2YWw7Ci0JCX0KLQkJaWYgKCEoYXRvbWljX2NtcHNldF9pbnQoJlNDVFBfQkFT
RV9WQVIocGFja2V0X2xvZ19lbmQpLCB2YWx1ZSwgdGhpc2VuZCkpKSB7Ci0JCQlnb3RvIHRyeV9h
Z2FpbjsKLQkJfQotCX0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAodGhpc2VuZCA+PSBTQ1RQ
X1BBQ0tFVF9MT0dfU0laRSkgewotCQlTQ1RQX1BSSU5URigiSW5zYW5pdHkgc3RvcHMgYSBsb2cg
dGhpc2JlZ2luOiVkIHRoaXNlbmQ6JWQgd3JpdGVyczolZCBsb2NrOiVkIGVuZDolZFxuIiwKLQkJ
ICAgICAgICAgICAgdGhpc2JlZ2luLAotCQkgICAgICAgICAgICB0aGlzZW5kLAotCQkgICAgICAg
ICAgICBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycyksCi0JCSAgICAgICAgICAgIGdy
YWJiZWRfbG9jaywKLQkJICAgICAgICAgICAgU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCkp
OwotCQlTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSA9IDA7Ci0JCWdvdG8gbm9fbG9nOwot
Ci0JfQotCWxlbmF0ID0gKGludCAqKSZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKVt0
aGlzYmVnaW5dOwotCSpsZW5hdCA9IHRvdGFsX2xlbjsKLQlsZW5hdCsrOwotCSpsZW5hdCA9IHZh
bHVlOwotCWxlbmF0Kys7Ci0JdGlja190b2NrID0gKHVpbnQzMl90ICopbGVuYXQ7Ci0JbGVuYXQr
KzsKLQkqdGlja190b2NrID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotCWNvcHl0byA9ICh2b2lk
ICopbGVuYXQ7Ci0JdGhpc29uZSA9IHRoaXNlbmQgLSBzaXplb2YoaW50KTsKLQlsZW5hdCA9IChp
bnQgKikmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2J1ZmZlcilbdGhpc29uZV07Ci0JKmxlbmF0
ID0gdGhpc2JlZ2luOwotCWlmIChncmFiYmVkX2xvY2spIHsKLQkJU0NUUF9JUF9QS1RMT0dfVU5M
T0NLKCk7Ci0JCWdyYWJiZWRfbG9jayA9IDA7Ci0JfQotCW1fY29weWRhdGEobSwgMCwgbGVuZ3Ro
LCAoY2FkZHJfdCljb3B5dG8pOwotIG5vX2xvZzoKLQlpZiAoZ3JhYmJlZF9sb2NrKSB7Ci0JCVND
VFBfSVBfUEtUTE9HX1VOTE9DSygpOwotCX0KLQlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JB
U0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycyksIDEpOwotfQotCi0KLWludAotc2N0cF9jb3B5X291
dF9wYWNrZXRfbG9nKHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCkKLXsKLQkvKiBXZSB3aW5k
IHRocm91Z2ggdGhlIHBhY2tldCBsb2cgc3RhcnRpbmcgYXQKLQkgKiBzdGFydCBjb3B5aW5nIHVw
IHRvIGxlbmd0aCBieXRlcyBvdXQuCi0JICogV2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMg
Y29waWVkLgotCSAqLwotCWludCB0b2NvcHksIHRoaXNfY29weTsKLQlpbnQgKmxlbmF0OwotCWlu
dCBkaWRfZGVsYXkgPSAwOwotCi0JdG9jb3B5ID0gbGVuZ3RoOwotCWlmIChsZW5ndGggPCAoaW50
KSgyICogc2l6ZW9mKGludCkpKSB7Ci0JCS8qIG5vdCBlbm91Z2ggcm9vbSAqLwotCQlyZXR1cm4g
KDApOwotCX0KLQlpZiAoU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spIHsKLQkJYXRvbWlj
X2FkZF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgU0NUUF9QS1RMT0df
V1JJVEVSU19ORUVEX0xPQ0spOwotCWFnYWluOgotCQlpZiAoKGRpZF9kZWxheSA9PSAwKSAmJiAo
U0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpICE9IFNDVFBfUEtUTE9HX1dSSVRFUlNf
TkVFRF9MT0NLKSkgewotCQkJLyogd2UgZGVsYXkgaGVyZSBmb3IganVzdCBhIG1vbWVudCBob3Bp
bmcgdGhlIHdyaXRlcihzKSB0aGF0IHdlcmUKLQkJCSAqIHByZXNlbnQgd2hlbiB3ZSBlbnRlcmVk
IHdpbGwgaGF2ZSBsZWZ0IGFuZCB3ZSBvbmx5IGhhdmUKLQkJCSAqIGxvY2tpbmcgb25lcyB0aGF0
IHdpbGwgY29udGVuZCB3aXRoIHVzIGZvciB0aGUgbG9jay4gVGhpcwotCQkJICogZG9lcyBub3Qg
YXNzdXJlIDEwMCUgYWNjZXNzLCBidXQgaXRzIGdvb2QgZW5vdWdoIGZvcgotCQkJICogYSBsb2dn
aW5nIGZhY2lsaXR5IGxpa2UgdGhpcy4KLQkJCSAqLwotCQkJZGlkX2RlbGF5ID0gMTsKLQkJCURF
TEFZKDEwKTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLQl9Ci0JU0NUUF9JUF9QS1RMT0dfTE9DSygp
OwotCWxlbmF0ID0gKGludCAqKXRhcmdldDsKLQkqbGVuYXQgPSBTQ1RQX0JBU0VfVkFSKHBhY2tl
dF9sb2dfZW5kKTsKLQlsZW5hdCsrOwotCXRoaXNfY29weSA9IG1pbigobGVuZ3RoIC0gc2l6ZW9m
KGludCkpLCBTQ1RQX1BBQ0tFVF9MT0dfU0laRSk7Ci0JbWVtY3B5KCh2b2lkICopbGVuYXQsICh2
b2lkICopU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2J1ZmZlciksIHRoaXNfY29weSk7Ci0JaWYg
KFNDVFBfUEtUTE9HX1dSSVRFUlNfTkVFRF9MT0NLKSB7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQo
JlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwKLQkJCQkgICAgU0NUUF9QS1RMT0df
V1JJVEVSU19ORUVEX0xPQ0spOwotCX0KLQlTQ1RQX0lQX1BLVExPR19VTkxPQ0soKTsKLQlyZXR1
cm4gKHRoaXNfY29weSArIHNpemVvZihpbnQpKTsKLX0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9i
c2RfYWRkci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMDQ4M2E0Njg3OTRkMmVk
YzRjYzIwOGY3MmIzZTE2YzFhMWZjOGQzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywg
YnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoK
LSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
bgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBD
aXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYnNkX2Fk
ZHIuaCAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0j
aWZuZGVmIF9ORVRJTkVUX1NDVFBfQlNEX0FERFJfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9C
U0RfQUREUl9IXwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotCi0jaWYgZGVmaW5l
ZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0KLWV4dGVybiBzdHJ1Y3QgaXRl
cmF0b3JfY29udHJvbCBzY3RwX2l0X2N0bDsKLXZvaWQgc2N0cF93YWtldXBfaXRlcmF0b3Iodm9p
ZCk7Ci0KLXZvaWQgc2N0cF9zdGFydHVwX2l0ZXJhdG9yKHZvaWQpOwotCi0KLSNpZmRlZiBJTkVU
Ngotdm9pZCBzY3RwX2dhdGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3Moc3RydWN0IHNjdHBfaWZhICpp
ZmEpOwotI2VuZGlmCi0KLSNpZmRlZiAgU0NUUF9QQUNLRVRfTE9HR0lORwotCi12b2lkIHNjdHBf
cGFja2V0X2xvZyhzdHJ1Y3QgbWJ1ZiAqbSk7Ci1pbnQgc2N0cF9jb3B5X291dF9wYWNrZXRfbG9n
KHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCk7Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQo
X19QYW5kYV9fKQotdm9pZCBzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlmYSwgaW50
IGNtZCk7Ci0jZW5kaWYKLQotdm9pZCBzY3RwX2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhpbnQgKCpw
cmVkKShzdHJ1Y3QgaWZuZXQgKiksIGludCBhZGQpOwotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9jYWxsb3V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM1NWYxYjQxM2Y0
MGVjMjg0MDZkNTVhYzkzMWY0NThkMWNiODM0YzAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYworKysg
L2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0y
MDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1l
IG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2luY2x1ZGUg
PHB0aHJlYWQuaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLSNp
bmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNs
dWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9w
Y2IuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2NhbGxvdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Ci0jZW5k
aWYKLQotLyoKLSAqIENhbGxvdXQvVGltZXIgcm91dGluZXMgZm9yIE9TIHRoYXQgZG9lc24ndCBo
YXZlIHRoZW0KLSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi1zdGF0aWMgaW50IHRpY2tzID0gMDsKLSNlbHNlCi1leHRlcm4gaW50IHRpY2tzOwot
I2VuZGlmCi0KLWludCBzY3RwX2dldF90aWNrX2NvdW50KHZvaWQpIHsKLQlpbnQgcmV0OwotCi0J
U0NUUF9USU1FUlFfTE9DSygpOwotCXJldCA9IHRpY2tzOwotCVNDVFBfVElNRVJRX1VOTE9DSygp
OwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTQ1RQX1RJTUVSUV9MT0NLIHByb3RlY3RzOgot
ICogLSBTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpCi0gKiAtIHNjdHBfb3NfdGltZXJfbmV4dDog
bmV4dCB0aW1lciB0byBjaGVjawotICovCi1zdGF0aWMgc2N0cF9vc190aW1lcl90ICpzY3RwX29z
X3RpbWVyX25leHQgPSBOVUxMOwotCi12b2lkCi1zY3RwX29zX3RpbWVyX2luaXQoc2N0cF9vc190
aW1lcl90ICpjKQotewotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsKLX0KLQotdm9pZAotc2N0
cF9vc190aW1lcl9zdGFydChzY3RwX29zX3RpbWVyX3QgKmMsIGludCB0b190aWNrcywgdm9pZCAo
KmZ0bikgKHZvaWQgKiksCi0gICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZykKLXsKLQkvKiBw
YXJhbm9pYSAqLwotCWlmICgoYyA9PSBOVUxMKSB8fCAoZnRuID09IE5VTEwpKQotCSAgICByZXR1
cm47Ci0KLQlTQ1RQX1RJTUVSUV9MT0NLKCk7Ci0JLyogY2hlY2sgdG8gc2VlIGlmIHdlJ3JlIHJl
c2NoZWR1bGluZyBhIHRpbWVyICovCi0JaWYgKGMtPmNfZmxhZ3MgJiBTQ1RQX0NBTExPVVRfUEVO
RElORykgewotCQlpZiAoYyA9PSBzY3RwX29zX3RpbWVyX25leHQpIHsKLQkJCXNjdHBfb3NfdGlt
ZXJfbmV4dCA9IFRBSUxRX05FWFQoYywgdHFlKTsKLQkJfQotCQlUQUlMUV9SRU1PVkUoJlNDVFBf
QkFTRV9JTkZPKGNhbGxxdWV1ZSksIGMsIHRxZSk7Ci0JCS8qCi0JCSAqIHBhcnQgb2YgdGhlIG5v
cm1hbCAic3RvcCBhIHBlbmRpbmcgY2FsbG91dCIgcHJvY2VzcwotCQkgKiBpcyB0byBjbGVhciB0
aGUgQ0FMTE9VVF9BQ1RJVkUgYW5kIENBTExPVVRfUEVORElORwotCQkgKiBmbGFncy4gIFdlIGRv
bid0IGJvdGhlciBzaW5jZSB3ZSBhcmUgc2V0dGluZyB0aGVzZQotCQkgKiBiZWxvdyBhbmQgd2Ug
c3RpbGwgaG9sZCB0aGUgbG9jay4KLQkJICovCi0JfQotCi0JLyoKLQkgKiBXZSBjb3VsZCB1bmxv
Y2svc3BseCBoZXJlIGFuZCBsb2NrL3NwbCBhdCB0aGUgVEFJTFFfSU5TRVJUX1RBSUwsCi0JICog
YnV0IHRoZXJlJ3Mgbm8gcG9pbnQgc2luY2UgZG9pbmcgdGhpcyBzZXR1cCBkb2Vzbid0IHRha2Ug
bXVjaCB0aW1lLgotCSAqLwotCWlmICh0b190aWNrcyA8PSAwKQotCQl0b190aWNrcyA9IDE7Ci0K
LQljLT5jX2FyZyA9IGFyZzsKLQljLT5jX2ZsYWdzID0gKFNDVFBfQ0FMTE9VVF9BQ1RJVkUgfCBT
Q1RQX0NBTExPVVRfUEVORElORyk7Ci0JYy0+Y19mdW5jID0gZnRuOwotCWMtPmNfdGltZSA9IHRp
Y2tzICsgdG9fdGlja3M7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJlNDVFBfQkFTRV9JTkZPKGNhbGxx
dWV1ZSksIGMsIHRxZSk7Ci0JU0NUUF9USU1FUlFfVU5MT0NLKCk7Ci19Ci0KLWludAotc2N0cF9v
c190aW1lcl9zdG9wKHNjdHBfb3NfdGltZXJfdCAqYykKLXsKLQlTQ1RQX1RJTUVSUV9MT0NLKCk7
Ci0JLyoKLQkgKiBEb24ndCBhdHRlbXB0IHRvIGRlbGV0ZSBhIGNhbGxvdXQgdGhhdCdzIG5vdCBv
biB0aGUgcXVldWUuCi0JICovCi0JaWYgKCEoYy0+Y19mbGFncyAmIFNDVFBfQ0FMTE9VVF9QRU5E
SU5HKSkgewotCQljLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRfQUNUSVZFOwotCQlTQ1RQX1RJ
TUVSUV9VTkxPQ0soKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JYy0+Y19mbGFncyAmPSB+KFNDVFBf
Q0FMTE9VVF9BQ1RJVkUgfCBTQ1RQX0NBTExPVVRfUEVORElORyk7Ci0JaWYgKGMgPT0gc2N0cF9v
c190aW1lcl9uZXh0KSB7Ci0JCXNjdHBfb3NfdGltZXJfbmV4dCA9IFRBSUxRX05FWFQoYywgdHFl
KTsKLQl9Ci0JVEFJTFFfUkVNT1ZFKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpLCBjLCB0cWUp
OwotCVNDVFBfVElNRVJRX1VOTE9DSygpOwotCXJldHVybiAoMSk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2hhbmRsZV90aWNrKGludCBkZWx0YSkKLXsKLQlzY3RwX29zX3RpbWVyX3QgKmM7Ci0J
dm9pZCAoKmNfZnVuYykodm9pZCAqKTsKLQl2b2lkICpjX2FyZzsKLQotCVNDVFBfVElNRVJRX0xP
Q0soKTsKLQkvKiB1cGRhdGUgb3VyIHRpY2sgY291bnQgKi8KLQl0aWNrcyArPSBkZWx0YTsKLQlj
ID0gVEFJTFFfRklSU1QoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSkpOwotCXdoaWxlIChjKSB7
Ci0JCWlmIChjLT5jX3RpbWUgPD0gdGlja3MpIHsKLQkJCXNjdHBfb3NfdGltZXJfbmV4dCA9IFRB
SUxRX05FWFQoYywgdHFlKTsKLQkJCVRBSUxRX1JFTU9WRSgmU0NUUF9CQVNFX0lORk8oY2FsbHF1
ZXVlKSwgYywgdHFlKTsKLQkJCWNfZnVuYyA9IGMtPmNfZnVuYzsKLQkJCWNfYXJnID0gYy0+Y19h
cmc7Ci0JCQljLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRfUEVORElORzsKLQkJCVNDVFBfVElN
RVJRX1VOTE9DSygpOwotCQkJY19mdW5jKGNfYXJnKTsKLQkJCVNDVFBfVElNRVJRX0xPQ0soKTsK
LQkJCWMgPSBzY3RwX29zX3RpbWVyX25leHQ7Ci0JCX0gZWxzZSB7Ci0JCQljID0gVEFJTFFfTkVY
VChjLCB0cWUpOwotCQl9Ci0JfQotCXNjdHBfb3NfdGltZXJfbmV4dCA9IE5VTEw7Ci0JU0NUUF9U
SU1FUlFfVU5MT0NLKCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXZvaWQKLXNjdHBf
dGltZW91dCh2b2lkICphcmcgU0NUUF9VTlVTRUQpCi17Ci0Jc2N0cF9oYW5kbGVfdGljayhTQ1RQ
X0JBU0VfVkFSKHNjdHBfbWFpbl90aW1lcl90aWNrcykpOwotCXNjdHBfc3RhcnRfbWFpbl90aW1l
cigpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFRJ
TUVPVVRfSU5URVJWQUwgMTAKLQotdm9pZCAqCi11c2VyX3NjdHBfdGltZXJfaXRlcmF0ZSh2b2lk
ICphcmcpCi17Ci0Jc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgdGltZXIiKTsK
LQlmb3IgKDs7KSB7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJU2xl
ZXAoVElNRU9VVF9JTlRFUlZBTCk7Ci0jZWxzZQotCQlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0Owot
Ci0JCXRpbWVvdXQudHZfc2VjICA9IDA7Ci0JCXRpbWVvdXQudHZfdXNlYyA9IDEwMDAgKiBUSU1F
T1VUX0lOVEVSVkFMOwotCQlzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVMTCwgJnRpbWVvdXQpOwot
I2VuZGlmCi0JCWlmIChTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zaG91bGRfZXhpdCkpIHsK
LQkJCWJyZWFrOwotCQl9Ci0JCXNjdHBfaGFuZGxlX3RpY2soTVNFQ19UT19USUNLUyhUSU1FT1VU
X0lOVEVSVkFMKSk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXZvaWQKLXNjdHBfc3RhcnRf
dGltZXIodm9pZCkKLXsKLQkvKgotCSAqIE5vIG5lZWQgdG8gZG8gU0NUUF9USU1FUlFfTE9DS19J
TklUKCk7Ci0JICogaGVyZSwgaXQgaXMgYmVpbmcgZG9uZSBpbiBzY3RwX3BjYl9pbml0KCkKLQkg
Ki8KLQlpbnQgcmM7Ci0KLQlyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUoJlNDVFBf
QkFTRV9WQVIodGltZXJfdGhyZWFkKSwgdXNlcl9zY3RwX3RpbWVyX2l0ZXJhdGUpOwotCWlmIChy
YykgewotCQlTQ1RQX1BSSU5URigiRVJST1I7IHJldHVybiBjb2RlIGZyb20gc2N0cF90aHJlYWRf
Y3JlYXRlKCkgaXMgJWRcbiIsIHJjKTsKLQl9Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxs
b3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzY0YzkwOTgyY2JhZmRkNDU3
ZmY4NDJmOWRjOGI3NjBhZTllMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaAorKysgL2Rldi9udWxs
CkBAIC0xLDEwOCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBD
aXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVl
QlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLSNl
bmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfQ0FMTE9VVF8KLSNkZWZpbmUgX05FVElORVRf
U0NUUF9DQUxMT1VUXwotCi0vKgotICogTk9URTogdGhlIGZvbGxvd2luZyBNQUNST1MgYXJlIHJl
cXVpcmVkIGZvciBsb2NraW5nIHRoZSBjYWxsb3V0Ci0gKiBxdWV1ZSBhbG9uZyB3aXRoIGEgbG9j
ay9tdXRleCBpbiB0aGUgT1Mgc3BlY2lmaWMgaGVhZGVycyBhbmQKLSAqIGltcGxlbWVudGF0aW9u
IGZpbGVzOjoKLSAqIC0gU0NUUF9USU1FUlFfTE9DSygpCi0gKiAtIFNDVFBfVElNRVJRX1VOTE9D
SygpCi0gKiAtIFNDVFBfVElNRVJRX0xPQ0tfSU5JVCgpCi0gKiAtIFNDVFBfVElNRVJRX0xPQ0tf
REVTVFJPWSgpCi0gKi8KLQotI2RlZmluZSBfU0NUUF9ORUVEU19DQUxMT1VUXyAxCi0KLSNkZWZp
bmUgU0NUUF9USUNLU19QRVJfRkFTVFRJTU8gMjAJLyogY2FsbGVkIGFib3V0IGV2ZXJ5IDIwbXMg
Ki8KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0soKSAgICAgICAgICBFbnRlckNy
aXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQotI2RlZmluZSBTQ1RQX1RJ
TUVSUV9VTkxPQ0soKSAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIo
dGltZXJfbXR4KSkKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19JTklUKCkgICAgIEluaXRpYWxp
emVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKLSNkZWZpbmUgU0NU
UF9USU1FUlFfTE9DS19ERVNUUk9ZKCkgIERlbGV0ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNF
X1ZBUih0aW1lcl9tdHgpKQotI2Vsc2UKLSNpZmRlZiBJTlZBUklBTlRTCi0jZGVmaW5lIFNDVFBf
VElNRVJRX0xPQ0soKSAgICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9C
QVNFX1ZBUih0aW1lcl9tdHgpKSA9PSAwLCAoIiVzOiB0aW1lcl9tdHggYWxyZWFkeSBsb2NrZWQi
LCBfX2Z1bmNfXykpCi0jZGVmaW5lIFNDVFBfVElNRVJRX1VOTE9DSygpICAgICAgICBLQVNTRVJU
KHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCkpID09IDAsICgi
JXM6IHRpbWVyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQotI2Vsc2UKLSNkZWZpbmUgU0NU
UF9USU1FUlFfTE9DSygpICAgICAgICAgICh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9C
QVNFX1ZBUih0aW1lcl9tdHgpKQotI2RlZmluZSBTQ1RQX1RJTUVSUV9VTkxPQ0soKSAgICAgICAg
KHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKLSNl
bmRpZgotI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKSAgICAgKHZvaWQpcHRocmVhZF9t
dXRleF9pbml0KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCksICZTQ1RQX0JBU0VfVkFSKG10eF9h
dHRyKSkKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCkgICh2b2lkKXB0aHJlYWRf
bXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQotI2VuZGlmCi0jZW5kaWYK
LQotaW50IHNjdHBfZ2V0X3RpY2tfY291bnQodm9pZCk7Ci0KLVRBSUxRX0hFQUQoY2FsbG91dGxp
c3QsIHNjdHBfY2FsbG91dCk7Ci0KLXN0cnVjdCBzY3RwX2NhbGxvdXQgewotCVRBSUxRX0VOVFJZ
KHNjdHBfY2FsbG91dCkgdHFlOwotCWludCBjX3RpbWU7CQkvKiB0aWNrcyB0byB0aGUgZXZlbnQg
Ki8KLQl2b2lkICpjX2FyZzsJCS8qIGZ1bmN0aW9uIGFyZ3VtZW50ICovCi0Jdm9pZCAoKmNfZnVu
Yykodm9pZCAqKTsJLyogZnVuY3Rpb24gdG8gY2FsbCAqLwotCWludCBjX2ZsYWdzOwkJLyogc3Rh
dGUgb2YgdGhpcyBlbnRyeSAqLwotfTsKLXR5cGVkZWYgc3RydWN0IHNjdHBfY2FsbG91dCBzY3Rw
X29zX3RpbWVyX3Q7Ci0KLSNkZWZpbmUJU0NUUF9DQUxMT1VUX0FDVElWRQkweDAwMDIJLyogY2Fs
bG91dCBpcyBjdXJyZW50bHkgYWN0aXZlICovCi0jZGVmaW5lCVNDVFBfQ0FMTE9VVF9QRU5ESU5H
CTB4MDAwNAkvKiBjYWxsb3V0IGlzIHdhaXRpbmcgZm9yIHRpbWVvdXQgKi8KLQotdm9pZCBzY3Rw
X29zX3RpbWVyX2luaXQoc2N0cF9vc190aW1lcl90ICp0bXIpOwotdm9pZCBzY3RwX29zX3RpbWVy
X3N0YXJ0KHNjdHBfb3NfdGltZXJfdCAqLCBpbnQsIHZvaWQgKCopKHZvaWQgKiksIHZvaWQgKik7
Ci1pbnQgc2N0cF9vc190aW1lcl9zdG9wKHNjdHBfb3NfdGltZXJfdCAqKTsKLQotI2RlZmluZSBT
Q1RQX09TX1RJTUVSX0lOSVQJc2N0cF9vc190aW1lcl9pbml0Ci0jZGVmaW5lIFNDVFBfT1NfVElN
RVJfU1RBUlQJc2N0cF9vc190aW1lcl9zdGFydAotI2RlZmluZSBTQ1RQX09TX1RJTUVSX1NUT1AJ
c2N0cF9vc190aW1lcl9zdG9wCi0vKiBNVCBGSVhNRTogSXMgdGhlIGZvbGxvd2luZyBjb3JyZWN0
PyAqLwotI2RlZmluZSBTQ1RQX09TX1RJTUVSX1NUT1BfRFJBSU4gU0NUUF9PU19USU1FUl9TVE9Q
Ci0jZGVmaW5lCVNDVFBfT1NfVElNRVJfUEVORElORyh0bXIpICgodG1yKS0+Y19mbGFncyAmIFND
VFBfQ0FMTE9VVF9QRU5ESU5HKQotI2RlZmluZQlTQ1RQX09TX1RJTUVSX0FDVElWRSh0bXIpICgo
dG1yKS0+Y19mbGFncyAmIFNDVFBfQ0FMTE9VVF9BQ1RJVkUpCi0jZGVmaW5lCVNDVFBfT1NfVElN
RVJfREVBQ1RJVkFURSh0bXIpICgodG1yKS0+Y19mbGFncyAmPSB+U0NUUF9DQUxMT1VUX0FDVElW
RSkKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0cF9zdGFydF90aW1lcih2
b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotdm9pZCBzY3RwX3RpbWVvdXQo
dm9pZCAqKTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9jY19mdW5jdGlvbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlNzQ2NGQ0YTkwYjQyOWU1ZTFkNGM1
NDNmN2Q0NTkxNjBjYzIwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMKKysrIC9kZXYvbnVs
bApAQCAtMSwyNTA2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0g
KiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K
LSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lz
Y28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0
aW9ucy5jIDMxMDU5MCAyMDE2LTEyLTI2IDExOjA2OjQxWiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFy
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KLSNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5k
YXRhLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF90aW1lci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Ci0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX2FzY29uZi5oPgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDgwMzAwMAotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9kdHJhY2VfZGVj
bGFyZS5oPgotI2VuZGlmCi0KLSNkZWZpbmUgU0hJRlRfTVBUQ1BfTVVMVElfTiA0MAotI2RlZmlu
ZSBTSElGVF9NUFRDUF9NVUxUSV9aIDE2Ci0jZGVmaW5lIFNISUZUX01QVENQX01VTFRJIDgKLQot
c3RhdGljIHZvaWQKLXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc3NvYywgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWlmICgoYXNzb2MtPm1heF9j
d25kID4gMCkgJiYKLQkgICAgKG5ldC0+Y3duZCA+IGFzc29jLT5tYXhfY3duZCkgJiYKLQkgICAg
KG5ldC0+Y3duZCA+IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSkgewotCQlu
ZXQtPmN3bmQgPSBhc3NvYy0+bWF4X2N3bmQgOwotCQlpZiAobmV0LT5jd25kIDwgKG5ldC0+bXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpIHsKLQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0g
c2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBf
c2V0X2luaXRpYWxfY2NfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jOwotCXVpbnQzMl90
IGN3bmRfaW5fbXR1OwotCi0JYXNzb2MgPSAmc3RjYi0+YXNvYzsKLQljd25kX2luX210dSA9IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpOwotCWlmIChjd25kX2luX210dSA9PSAw
KSB7Ci0JCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2YgUkZDIDQ5NjAgaXMgdXNl
ZC4gKi8KLQkJbmV0LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10
dSksIFNDVFBfSU5JVElBTF9DV05EKSk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogV2UgdGFrZSB0
aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQotCQkgKiBpbml0aWFsIGNvbmdl
c3Rpb24gd2luZG93LgotCQkgKi8KLQkJaWYgKChhc3NvYy0+bWF4X2J1cnN0ID4gMCkgJiYgKGN3
bmRfaW5fbXR1ID4gYXNzb2MtPm1heF9idXJzdCkpCi0JCQljd25kX2luX210dSA9IGFzc29jLT5t
YXhfYnVyc3Q7Ci0JCW5ldC0+Y3duZCA9IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikpICogY3duZF9pbl9tdHU7Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYg
PT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09
IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCS8qIEluIGNhc2Ugb2YgcmVzb3VyY2UgcG9vbGluZyBpbml0
aWFsaXplIGFwcHJvcHJpYXRlbHkgKi8KLQkJbmV0LT5jd25kIC89IGFzc29jLT5udW1uZXRzOwot
CQlpZiAobmV0LT5jd25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpIHsK
LQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJfQot
CX0KLQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc3NvYywgbmV0KTsKLQluZXQtPnNzdGhyZXNo
ID0gYXNzb2MtPnBlZXJzX3J3bmQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGluaXQs
Ci0JICAgICAgICAgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xw
b3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCi0JICAgICAgICAgIDAsIG5ldC0+Y3du
ZCk7Ci0jZW5kaWYKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYK
LQkgICAgKFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRXxTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUp
KSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfSU5JVElBTElaQVRJ
T04pOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JdWludDMy
X3QgdF9zc3RocmVzaCwgdF9jd25kOwotCXVpbnQ2NF90IHRfdWN3bmRfc2J3OwotCi0JLyogTVQg
RklYTUU6IERvbid0IGNvbXB1dGUgdGhpcyBvdmVyIGFuZCBvdmVyIGFnYWluICovCi0JdF9zc3Ro
cmVzaCA9IDA7Ci0JdF9jd25kID0gMDsKLQl0X3Vjd25kX3NidyA9IDA7Ci0JaWYgKChhc29jLT5z
Y3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAgKGFzb2MtPnNjdHBfY210
X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYyKSkgewotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2Mt
Pm5ldHMsIHNjdHBfbmV4dCkgewotCQkJdF9zc3RocmVzaCArPSBuZXQtPnNzdGhyZXNoOwotCQkJ
dF9jd25kICs9IG5ldC0+Y3duZDsKLQkJCWlmIChuZXQtPmxhc3RzYSA+IDApIHsKLQkJCQl0X3Vj
d25kX3NidyArPSAodWludDY0X3QpbmV0LT5jd25kIC8gKHVpbnQ2NF90KW5ldC0+bGFzdHNhOwot
CQkJfQotCQl9Ci0JCWlmICh0X3Vjd25kX3NidyA9PSAwKSB7Ci0JCQl0X3Vjd25kX3NidyA9IDE7
Ci0JCX0KLQl9Ci0KLQkvKi0KLQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRl
YnVnLiAoKHNjdHBfY210X29uX29mZiA+IDApICYmCi0JICogKG5ldC0+ZmFzdF9yZXRyYW5fbG9z
c19yZWNvdmVyeSA9PSAwKSkpCi0JICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRz
LCBzY3RwX25leHQpIHsKLQkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09
IDApIHx8Ci0JCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkpIHsKLQkJCS8qIG91dCBv
ZiBhIFJGQzI1ODIgRmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCi0JCQlpZiAobmV0LT5uZXRfYWNr
ID4gMCkgewotCQkJCS8qCi0JCQkJICogcGVyIHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBhbnkK
LQkJCQkgKiBkZXN0aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJhbnNtaXQKLQkJCQkgKiB0
byB0aGVtLiBJZiBzbyB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKLQkJCQkgKiBhZGp1c3Qgc3N0aHJl
c2ggYW5kIGN3bmQuCi0JCQkJICovCi0JCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsK
LQkJCQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7Ci0KLQkJCQlpZiAoKGFzb2MtPnNjdHBfY210
X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYxKSB8fAotCQkJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25f
b2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYg
PT0gU0NUUF9DTVRfUlBWMSkgewotCQkJCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1
aW50NjRfdCk0ICoKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVp
bnQ2NF90KW5ldC0+bXR1ICoKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKLQotCQkJCQl9Ci0JCQkJCWlmIChhc29jLT5z
Y3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMikgewotCQkJCQkJdWludDMyX3Qgc3J0dDsK
LQotCQkJCQkJc3J0dCA9IG5ldC0+bGFzdHNhOwotCQkJCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9u
J3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KLQkJCQkJCWlmIChzcnR0ID09IDApIHsKLQkJCQkJCQlz
cnR0ID0gMTsKLQkJCQkJCX0KLQkJCQkJCS8qIFNob3J0IFZlcnNpb24gPT4gRXF1YWwgdG8gQ29u
dGVsIFZlcnNpb24gTUJlICovCi0JCQkJCQluZXQtPnNzdGhyZXNoID0gKHVpbnQzMl90KSAoKCh1
aW50NjRfdCk0ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90
KW5ldC0+bXR1ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90
KW5ldC0+Y3duZCkgLwotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0
X3Qpc3J0dCAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfdWN3bmRfc2J3
KSk7Ci0JCQkJCQkJCQkgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLzsKLQkJCQkJfQotCQkJCQlp
ZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCi0JCQkJCSAgICAobmV0LT5zc3RocmVzaCA8
IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7Ci0JCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5j
d25kIC0gdF9jd25kIC8gMjsKLQkJCQkJfQotCQkJCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+
bXR1KSB7Ci0JCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7Ci0JCQkJCX0KLQkJCQl9IGVs
c2UgewotCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsKLQkJCQkJaWYgKG5ldC0+
c3N0aHJlc2ggPCAobmV0LT5tdHUgKiAyKSkgewotCQkJCQkJbmV0LT5zc3RocmVzaCA9IDIgKiBu
ZXQtPm10dTsKLQkJCQkJfQotCQkJCX0KLQkJCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOwot
CQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkJU0RUX1BST0JFNShz
Y3RwLCBjd25kLCBuZXQsIGZyLAotCQkJCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5z
Y3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCi0JCQkJCSAg
b2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAotCQkJCQkJU0NU
UF9DV05EX0xPR19GUk9NX0ZSKTsKLQkJCQl9Ci0JCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZhc29j
LT5zZW5kX3F1ZXVlKTsKLQotCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCQkJ
LyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLwotCQkJCWFzb2MtPmZhc3RfcmV0cmFu
X2xvc3NfcmVjb3ZlcnkgPSAxOwotCQkJCWlmIChsY2hrID09IE5VTEwpIHsKLQkJCQkJLyogTWFy
ayBlbmQgb2YgdGhlIHdpbmRvdyAqLwotCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFz
b2MtPnNlbmRpbmdfc2VxIC0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlhc29jLT5mYXN0X3JlY292
ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkg
KiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KLQkJCQkgKiByZWNvdmVyeSB2
YXJpYWJsZS4KLQkJCQkgKi8KLQkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAx
OwotCi0JCQkJaWYgKGxjaGsgPT0gTlVMTCkgewotCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUgd2lu
ZG93ICovCi0JCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAt
IDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJl
Yy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9TRU5ELAotCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCSAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18xKTsKLQkJCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJCQkJIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG5ldCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkgewot
CQkJLyoKLQkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25kCi0J
CQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgotCQkJICov
Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKLQkJfQotCX0KLX0K
LQotLyogRGVmaW5lcyBmb3IgaW5zdGFudGFuZW91cyBidyBkZWNpc2lvbnMgKi8KLSNkZWZpbmUg
U0NUUF9JTlNUX0xPT1NJTkcgMSAvKiBMb3NpbmcgdG8gb3RoZXIgZmxvd3MgKi8KLSNkZWZpbmUg
U0NUUF9JTlNUX05FVVRSQUwgMiAvKiBOZXV0cmFsLCBubyBpbmRpY2F0aW9uICovCi0jZGVmaW5l
IFNDVFBfSU5TVF9HQUlOSU5HIDMgLyogR2FpbmluZywgc3RlcCBkb3duIHBvc3NpYmxlICovCi0K
LQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAw
MAotc3RhdGljIGludAotY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LAotCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQsIHVp
bnQ2NF90IHZ0YWcsIHVpbnQ4X3QgaW5zdF9pbmQpCi0jZWxzZQotc3RhdGljIGludAotY2NfYndf
c2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCwgdWludDY0X3QgbmJ3LAotCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQsIHVpbnQ4X3QgaW5z
dF9pbmQpCi0jZW5kaWYKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA4MDMwMDAKLQl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7Ci0jZW5kaWYKLQot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAot
CXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKLSNlbmRpZgotCWlm
IChuZXQtPnJ0dCA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCArIHJ0dF9vZmZzZXQpIHsKLQkJ
LyoKLQkJICogcnR0IGluY3JlYXNlZAotCQkgKiB3ZSBkb24ndCB1cGRhdGUgYncuLiBzbyB3ZSBk
b24ndAotCQkgKiB1cGRhdGUgdGhlIHJ0dCBlaXRoZXIuCi0JCSAqLwotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQkvKiBQcm9iZSBwb2lu
dCA1ICovCi0JCXByb2JlcG9pbnQgfD0gICgoNSA8PCAxNikgfCAxKTsKLQkJU0RUX1BST0JFNShz
Y3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKLQkJCSAgdnRhZywKLQkJCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8
PCAzMikgfCBuZXQtPnJ0dCksCi0JCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCi0JCQkgIHByb2JlcG9p
bnQpOwotI2VuZGlmCi0JCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYgKGlu
c3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgewotCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Mu
bGFzdF9zdGVwX3N0YXRlID09IDUpCi0JCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCsrOwot
CQkJZWxzZQotCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAxOwotCQkJbmV0LT5jY19t
b2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSA1OwotCQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnN0
ZXBfY250ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8Ci0JCQkgICAgKChuZXQt
PmNjX21vZC5ydGNjLnN0ZXBfY250ID4gbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYK
LQkJCSAgICAgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ICUgbmV0LT5jY19tb2QucnRjYy5z
dGVhZHlfc3RlcCkgPT0gMCkpKSB7Ci0JCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkJb3Ro
ID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwotCQkJCW90aCA8PD0gMTY7Ci0JCQkJb3Ro
IHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7Ci0JCQkJb3RoIDw8PSAxNjsKLQkJCQlvdGgg
fD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7Ci0JCQkJU0RUX1BST0JFNShzY3Rw
LCBjd25kLCBuZXQsIHJ0dHN0ZXAsCi0JCQkJCSAgdnRhZywKLQkJCQkJICAoKG5ldC0+Y2NfbW9k
LnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19y
dHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJCQkgIG90aCwKLQkJCQkJICBwcm9iZXBvaW50KTsK
LSNlbmRpZgotCQkJCWlmIChuZXQtPmN3bmQgPiAoNCAqIG5ldC0+bXR1KSkgewotCQkJCQluZXQt
PmN3bmQgLT0gbmV0LT5tdHU7Ci0JCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSsrOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOwotCQkJCX0K
LQkJCX0KLQkJfQotCQlyZXR1cm4gKDEpOwotCX0KLQlpZiAobmV0LT5ydHQgPCBuZXQtPmNjX21v
ZC5ydGNjLmxid19ydHQtcnR0X29mZnNldCkgewotCQkvKgotCQkgKiBydHQgZGVjcmVhc2VkLCB0
aGVyZSBjb3VsZCBiZSBtb3JlIHJvb20uCi0JCSAqIHdlIHVwZGF0ZSBib3RoIHRoZSBidyBhbmQg
dGhlIHJ0dCBoZXJlIHRvCi0JCSAqIGxvY2sgdGhpcyBpbiBhcyBhIGdvb2Qgc3RlcCBkb3duLgot
CQkgKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDMwMDAKLQkJLyogUHJvYmUgcG9pbnQgNiAqLwotCQlwcm9iZXBvaW50IHw9ICAoKDYgPDwgMTYp
IHwgMCk7Ci0JCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCi0JCQkgIHZ0YWcs
Ci0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJCSAgKChuZXQt
PmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJICBuZXQtPmZsaWdo
dF9zaXplLAotCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQlpZiAobmV0LT5jY19tb2QucnRj
Yy5zdGVhZHlfc3RlcCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMzAwMAotCQkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwot
CQkJb3RoIDw8PSAxNjsKLQkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OwotCQkJ
b3RoIDw8PSAxNjsKLQkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZTsK
LQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAotCQkJCSAgdnRhZywKLQkJ
CQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCQkgIG90aCwKLQkJCQkg
IHByb2JlcG9pbnQpOwotI2VuZGlmCi0JCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVw
X3N0YXRlID09IDUpICYmCi0JCQkgICAgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPiBuZXQt
PmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSkgewotCQkJCS8qIFN0ZXAgZG93biB3b3JrZWQgKi8K
LQkJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID0gMDsKLQkJCQlyZXR1cm4gKDEpOwotCQkJ
fSBlbHNlIHsKLQkJCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDY7Ci0JCQkJ
bmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCQl9Ci0JCX0KLQkJbmV0LT5jY19tb2Qu
cnRjYy5sYncgPSBuYnc7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+cnR0Owot
CQluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOwotCQlpZiAoaW5z
dF9pbmQgPT0gU0NUUF9JTlNUX0dBSU5JTkcpCi0JCQlyZXR1cm4gKDEpOwotCQllbHNlIGlmIChp
bnN0X2luZCA9PSBTQ1RQX0lOU1RfTkVVVFJBTCkKLQkJCXJldHVybiAoMSk7Ci0JCWVsc2UKLQkJ
CXJldHVybiAoMCk7Ci0JfQotCS8qIE9rIGJ3IGFuZCBydHQgcmVtYWluZWQgdGhlIHNhbWUgLi4g
bm8gdXBkYXRlIHRvIGFueQotCSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCS8qIFByb2JlIHBvaW50IDcgKi8KLQlwcm9iZXBvaW50
IHw9ICAoKDcgPDwgMTYpIHwgbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSk7Ci0JU0RUX1BS
T0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKLQkJICB2dGFnLAotCQkgICgobmV0LT5jY19t
b2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0
dCA8PCAzMikgfCBuZXQtPnJ0dCksCi0JCSAgbmV0LT5mbGlnaHRfc2l6ZSwKLQkJICBwcm9iZXBv
aW50KTsKLSNlbmRpZgotCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYgKGlu
c3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgewotCQlpZiAobmV0LT5jY19tb2QucnRjYy5s
YXN0X3N0ZXBfc3RhdGUgPT0gNSkKLQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQrKzsKLQkJ
ZWxzZQotCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDE7Ci0JCW5ldC0+Y2NfbW9kLnJ0
Y2MubGFzdF9zdGVwX3N0YXRlID0gNTsKLQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250
ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8Ci0JCSAgICAoKG5ldC0+Y2NfbW9k
LnJ0Y2Muc3RlcF9jbnQgPiBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSAmJgotCQkgICAg
ICgobmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCAlIG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0
ZXApID09IDApKSkgewotCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCi0JCQlpZiAobmV0LT5jd25k
ID4gKDQgKiBuZXQtPm10dSkpIHsKLQkJCQluZXQtPmN3bmQgLT0gbmV0LT5tdHU7Ci0JCQkJbmV0
LT5jY19tb2QucnRjYy52b2xfcmVkdWNlKys7Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0gZWxzZSB7
Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYg
KGluc3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKQotCQlyZXR1cm4gKDEpOwotCWVsc2UgaWYg
KGluc3RfaW5kID09IFNDVFBfSU5TVF9ORVVUUkFMKQotCQlyZXR1cm4gKDEpOwotCWVsc2UKLQkJ
cmV0dXJuICgoaW50KW5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpOwotfQotCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi1zdGF0aWMg
aW50Ci1jY19id19kZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0LAotCSAgICAgICB1aW50
NjRfdCB2dGFnLCB1aW50OF90IGluc3RfaW5kKQotI2Vsc2UKLXN0YXRpYyBpbnQKLWNjX2J3X2Rl
Y3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfbmV0
cyAqbmV0LCB1aW50NjRfdCBuYncsIHVpbnQ2NF90IHJ0dF9vZmZzZXQsCi0JICAgICAgIHVpbnQ4
X3QgaW5zdF9pbmQpCi0jZW5kaWYKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7Ci0jZW5k
aWYKLQotCS8qIEJhbmR3aWR0aCBkZWNyZWFzZWQuKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQlwcm9iZXBvaW50ID0gKCgodWludDY0
X3QpbmV0LT5jd25kKSA8PCAzMik7Ci0jZW5kaWYKLQlpZiAobmV0LT5ydHQgID4gbmV0LT5jY19t
b2QucnRjYy5sYndfcnR0K3J0dF9vZmZzZXQpIHsKLQkJLyogcnR0IGluY3JlYXNlZCAqLwotCQkv
KiBEaWQgd2UgYWRkIG1vcmUgKi8KLQkJaWYgKChuZXQtPmN3bmQgPiBuZXQtPmNjX21vZC5ydGNj
LmN3bmRfYXRfYndfc2V0KSAmJgotCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5H
KSkgewotCQkJLyogV2UgY2F1c2VkIGl0IG1heWJlLi4gYmFjayBvZmY/ICovCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkvKiBQUk9C
RSBQT0lOVCAxICovCi0JCQlwcm9iZXBvaW50IHw9ICAoKDEgPDwgMTYpIHwgMSk7Ci0JCQlTRFRf
UFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJCSAgdnRhZywKLQkJCQkgICgobmV0
LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJCQkgICgobmV0LT5jY19tb2QucnRj
Yy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCi0J
CQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zy
b21fZXEpIHsKLQkJCQkvKiBTd2l0Y2ggb3ZlciB0byBDQSBpZiB3ZSBhcmUgbGVzcyBhZ2dyZXNz
aXZlICovCi0JCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZC0xOwotCQkJCW5ldC0+cGFydGlh
bF9ieXRlc19hY2tlZCA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCS8qIFByb2Jl
IHBvaW50IDIgKi8KLQkJcHJvYmVwb2ludCB8PSAgKCgyIDw8IDE2KSB8IDApOwotCQlTRFRfUFJP
QkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJICB2dGFnLAotCQkJICAoKG5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndf
cnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJv
YmVwb2ludCk7Ci0jZW5kaWYKLQkJLyogU29tZW9uZSBlbHNlIC0gZmlnaHQgZm9yIG1vcmU/ICov
Ci0JCWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQlvdGggPSBuZXQtPmNj
X21vZC5ydGNjLnZvbF9yZWR1Y2U7Ci0JCQlvdGggPDw9IDE2OwotCQkJb3RoIHw9IG5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlcF9jbnQ7Ci0JCQlvdGggPDw9IDE2OwotCQkJb3RoIHw9IG5ldC0+Y2NfbW9k
LnJ0Y2MubGFzdF9zdGVwX3N0YXRlOwotCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0
dHN0ZXAsCi0JCQkJICB2dGFnLAotCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikg
fCBuYncpLAotCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5y
dHQpLAotCQkJCSAgb3RoLAotCQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJCS8qIERpZCB3
ZSB2b2x1bnRhcmlseSBnaXZlIHVwIHNvbWU/IGlmIHNvIHRha2UKLQkJCSAqIG9uZSBiYWNrIHBs
ZWFzZQotCQkJICovCi0JCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSkgJiYKLQkJ
CSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7Ci0JCQkJbmV0LT5jd25kICs9
IG5ldC0+bXR1OwotCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQp
OwotCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOwotCQkJfQotCQkJbmV0LT5jY19t
b2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAyOwotCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2Nu
dCA9IDA7Ci0JCX0KLQkJZ290byBvdXRfZGVjaXNpb247Ci0JfSBlbHNlICBpZiAobmV0LT5ydHQg
IDwgbmV0LT5jY19tb2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsKLQkJLyogYncgJiBydHQg
ZGVjcmVhc2VkICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAzMDAwCi0JCS8qIFByb2JlIHBvaW50IDMgKi8KLQkJcHJvYmVwb2ludCB8PSAgKCgz
IDw8IDE2KSB8IDApOwotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJ
ICB2dGFnLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkg
ICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCSAgbmV0
LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJaWYgKG5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCW90aCA9IG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3Jl
ZHVjZTsKLQkJCW90aCA8PD0gMTY7Ci0JCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5zdGVwX2Nu
dDsKLQkJCW90aCA8PD0gMTY7Ci0JCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBf
c3RhdGU7Ci0JCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKLQkJCQkgIHZ0
YWcsCi0JCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkJICAo
KG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCi0JCQkJICBvdGgs
Ci0JCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnZv
bF9yZWR1Y2UpICYmCi0JCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9HQUlOSU5HKSkgewot
CQkJCW5ldC0+Y3duZCArPSBuZXQtPm10dTsKLQkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgm
c3RjYi0+YXNvYywgbmV0KTsKLQkJCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UtLTsKLQkJ
CX0KLQkJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gMzsKLQkJCW5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOwotCQl9Ci0JCWdvdG8gb3V0X2RlY2lzaW9uOwotCX0KLQkv
KiBUaGUgYncgZGVjcmVhc2VkIGJ1dCBydHQgc3RheWVkIHRoZSBzYW1lICovCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JLyogUHJvYmUg
cG9pbnQgNCAqLwotCXByb2JlcG9pbnQgfD0gICgoNCA8PCAxNikgfCAwKTsKLQlTRFRfUFJPQkU1
KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkgIHZ0YWcsCi0JCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8
IDMyKSB8IG5ldC0+cnR0KSwKLQkJICBuZXQtPmZsaWdodF9zaXplLAotCQkgIHByb2JlcG9pbnQp
OwotI2VuZGlmCi0JaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJb3RoID0g
bmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwotCQlvdGggPDw9IDE2OwotCQlvdGggfD0gbmV0
LT5jY19tb2QucnRjYy5zdGVwX2NudDsKLQkJb3RoIDw8PSAxNjsKLQkJb3RoIHw9IG5ldC0+Y2Nf
bW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOwotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwg
cnR0c3RlcCwKLQkJCSAgdnRhZywKLQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikg
fCBuYncpLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0
dCksCi0JCQkgIG90aCwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJaWYgKChuZXQtPmNj
X21vZC5ydGNjLnZvbF9yZWR1Y2UpICYmCi0JCSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dB
SU5JTkcpKSB7Ci0JCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQlzY3RwX2VuZm9yY2VfY3du
ZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVj
ZS0tOwotCQl9Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gNDsKLQkJbmV0
LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JfQotb3V0X2RlY2lzaW9uOgotCW5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3ID0gbmJ3OwotCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+cnR0
OwotCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSBuZXQtPmN3bmQ7Ci0JaWYgKGlu
c3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKSB7Ci0JCXJldHVybiAoMSk7Ci0JfSBlbHNlIHsK
LQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLXN0YXRpYyBpbnQKLWNjX2J3X2luY3JlYXNlKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncsIHVp
bnQ2NF90IHZ0YWcpCi0jZWxzZQotc3RhdGljIGludAotY2NfYndfaW5jcmVhc2Uoc3RydWN0IHNj
dHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQ2NF90
IG5idykKLSNlbmRpZgotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMzAwMAotCXVpbnQ2NF90IG90aCwgcHJvYmVwb2ludDsKLQotI2VuZGlmCi0J
LyogQlcgaW5jcmVhc2VkLCBzbyB1cGRhdGUgYW5kCi0JICogcmV0dXJuIDAsIHNpbmNlIGFsbCBh
Y3Rpb25zIGluCi0JICogb3VyIHRhYmxlIHNheSB0byBkbyB0aGUgbm9ybWFsIENDCi0JICogdXBk
YXRlLiBOb3RlIHRoYXQgd2UgcGF5IG5vIGF0dGVudGlvbiB0bwotCSAqIHRoZSBpbnN0X2luZCBz
aW5jZSBvdXIgb3ZlcmFsbCBzdW0gaXMgaW5jcmVhc2luZy4KLQkgKi8KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkvKiBQUk9CRSBQT0lO
VCAwICovCi0JcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOwotCVNE
VF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCi0JCSAgdnRhZywKLQkJICAoKG5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCSAgKChuZXQtPmNjX21vZC5ydGNjLmxi
d19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCi0JCSAgcHJv
YmVwb2ludCk7Ci0jZW5kaWYKLQlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAot
CQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7Ci0JCW90aCA8PD0gMTY7Ci0JCW90
aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OwotCQlvdGggPDw9IDE2OwotCQlvdGggfD0g
bmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7Ci0JCVNEVF9QUk9CRTUoc2N0cCwgY3du
ZCwgbmV0LCBydHRzdGVwLAotCQkJICB2dGFnLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
IDw8IDMyKSB8IG5idyksCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8
IG5ldC0+cnR0KSwKLQkJCSAgb3RoLAotCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQluZXQt
PmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2Muc3Rl
cF9jbnQgPSAwOwotCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAwOwotCX0KLQluZXQt
PmNjX21vZC5ydGNjLmxidyA9IG5idzsKLQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBuZXQt
PnJ0dDsKLQluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOwotCXJl
dHVybiAoMCk7Ci19Ci0KLS8qIFJUQ0MgQWxnb3JpdGhtIHRvIGxpbWl0IGdyb3d0aCBvZiBjd25k
LCByZXR1cm4KLSAqIHRydWUgaWYgeW91IHdhbnQgdG8gTk9UIGFsbG93IGN3bmQgZ3Jvd3RoCi0g
Ki8KLXN0YXRpYyBpbnQKLWNjX2J3X2xpbWl0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncpCi17Ci0JdWludDY0X3QgYndfb2Zmc2V0LCBy
dHRfb2Zmc2V0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMzAwMAotCXVpbnQ2NF90IHByb2JlcG9pbnQsIHJ0dCwgdnRhZzsKLSNlbmRpZgotCXVp
bnQ2NF90IGJ5dGVzX2Zvcl90aGlzX3J0dCwgaW5zdF9idzsKLQl1aW50NjRfdCBkaXYsIGluc3Rf
b2ZmOwotCWludCBid19zaGlmdDsKLQl1aW50OF90IGluc3RfaW5kOwotCWludCByZXQ7Ci0JLyot
Ci0JICogSGVyZSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSB3YW50Ci0JICogdG8gbGltaXQgY3duZCBn
cm93dGggZHVlIHRvIGluY3JlYXNlCi0JICogaW4gb3ZlcmFsbCBydHQgYnV0IG5vIGluY3JlYXNl
IGluIGJ3LgotCSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRhYmxlIHRvIGZpZ3VyZQotCSAqIG91
dCB3aGF0IHdlIHNob3VsZCBkby4gV2hlbiB3ZSByZXR1cm4KLQkgKiAwLCBjYyB1cGRhdGUgZ29l
cyBvbiBhcyBwbGFubmVkLiBJZiB3ZQotCSAqIHJldHVybiAxLCB0aGVuIG5vIGNjIHVwZGF0ZSBo
YXBwZW5zIGFuZCBjd25kCi0JICogc3RheXMgd2hlcmUgaXQgaXMgYXQuCi0JICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgQlcgICAgfCAgICBSVFQgICB8IEFjdGlv
bgotCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotCSAqICAgSU5DICAgfCAg
ICBJTkMgICB8IHJldHVybiAwCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCSAqICAgSU5DICAgfCAgICBTQU1FICB8IHJldHVybiAwCi0JICogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgSU5DICAgfCAgICBERUNSICB8IHJldHVybiAwCi0J
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgU0FNRSAgfCAgICBJ
TkMgICB8IHJldHVybiAxCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
CSAqICAgU0FNRSAgfCAgICBTQU1FICB8IHJldHVybiAxCi0JICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCSAqICAgU0FNRSAgfCAgICBERUNSICB8IHJldHVybiAwCi0JICog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgREVDUiAgfCAgICBJTkMg
ICB8IHJldHVybiAwIG9yIDEgYmFzZWQgb24gaWYgd2UgY2F1c2VkLgotCSAqIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIERFQ1IgIHwgICAgU0FNRSAgfCByZXR1cm4g
MAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIERFQ1IgIHwg
ICAgREVDUiAgfCByZXR1cm4gMAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQkgKgotCSAqIFdlIGFyZSBhIGJpdCBmdXp6IG9uIHdoYXQgYW4gaW5jcmVhc2Ugb3IKLQkg
KiBkZWNyZWFzZSBpcy4gRm9yIEJXIGl0IGlzIHRoZSBzYW1lIGlmCi0JICogaXQgZGlkIG5vdCBj
aGFuZ2Ugd2l0aGluIDEvNjR0aC4gRm9yCi0JICogUlRUIGl0IHN0YXllZCB0aGUgc2FtZSBpZiBp
dCBkaWQgbm90Ci0JICogY2hhbmdlIHdpdGhpbiAxLzMybmQKLQkgKi8KLQlid19zaGlmdCA9IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXJ0dCA9IHN0Y2ItPmFzb2MubXlfdnRh
ZzsKLQl2dGFnID0gKHJ0dCA8PCAzMikgfCAoKCh1aW50MzJfdCkoc3RjYi0+c2N0cF9lcC0+c2N0
cF9scG9ydCkpIDw8IDE2KSB8IChzdGNiLT5ycG9ydCk7Ci0JcHJvYmVwb2ludCA9ICgoKHVpbnQ2
NF90KW5ldC0+Y3duZCkgPDwgMzIpOwotCXJ0dCA9IG5ldC0+cnR0OwotI2VuZGlmCi0JaWYgKG5l
dC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2spIHsKLQkJbmV0LT5jY19tb2QucnRjYy5y
dHRfc2V0X3RoaXNfc2FjayA9IDA7Ci0JCWJ5dGVzX2Zvcl90aGlzX3J0dCA9IG5ldC0+Y2NfbW9k
LnJ0Y2MuYndfYnl0ZXMgLSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzX2F0X2xhc3RfcnR0YzsK
LQkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSBuZXQtPmNjX21vZC5y
dGNjLmJ3X2J5dGVzOwotCQlpZiAobmV0LT5ydHQpIHsKLQkJCWRpdiA9IG5ldC0+cnR0IC8gMTAw
MDsKLQkJCWlmIChkaXYpIHsKLQkJCQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gZGl2
OwotCQkJCWluc3Rfb2ZmID0gaW5zdF9idyA+PiBid19zaGlmdDsKLQkJCQlpZiAoaW5zdF9idyA+
IG5idykKLQkJCQkJaW5zdF9pbmQgPSBTQ1RQX0lOU1RfR0FJTklORzsKLQkJCQllbHNlIGlmICgo
aW5zdF9idytpbnN0X29mZikgPCBuYncpCi0JCQkJCWluc3RfaW5kID0gU0NUUF9JTlNUX0xPT1NJ
Tkc7Ci0JCQkJZWxzZQotCQkJCQlpbnN0X2luZCA9IFNDVFBfSU5TVF9ORVVUUkFMOwotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQkJCXBy
b2JlcG9pbnQgfD0gICgoMHhiIDw8IDE2KSB8IGluc3RfaW5kKTsKLSNlbmRpZgotCQkJfSBlbHNl
IHsKLQkJCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCQlp
bnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gKHVpbnQ2NF90KShuZXQtPnJ0dCk7Ci0JCQkJ
LyogQ2FuJ3QgZGV0ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8KLQkJCQlwcm9iZXBvaW50IHw9ICAo
KDB4YyA8PCAxNikgfCBpbnN0X2luZCk7Ci0jZW5kaWYKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlu
c3RfaW5kID0gbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kOwotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQkJaW5zdF9idyA9IGJ5
dGVzX2Zvcl90aGlzX3J0dDsKLQkJCS8qIENhbid0IGRldGVybWluZSBkbyBub3QgY2hhbmdlICov
Ci0JCQlwcm9iZXBvaW50IHw9ICAoKDB4ZCA8PCAxNikgfCBpbnN0X2luZCk7Ci0jZW5kaWYKLQkJ
fQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAw
MAotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJICB2dGFnLAotCQkJ
ICAoKG5idyA8PCAzMikgfCBpbnN0X2J3KSwKLQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19y
dHQgPDwgMzIpIHwgcnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJvYmVwb2lu
dCk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvKiBObyBydHQgbWVhc3VyZW1lbnQsIHVzZSBsYXN0
IG9uZSAqLwotCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsKLQl9
Ci0JYndfb2Zmc2V0ID0gbmV0LT5jY19tb2QucnRjYy5sYncgPj4gYndfc2hpZnQ7Ci0JaWYgKG5i
dyA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ICsgYndfb2Zmc2V0KSB7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCXJldCA9IGNjX2J3X2lu
Y3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCB2dGFnKTsKLSNlbHNlCi0JCXJldCA9IGNjX2J3X2luY3Jl
YXNlKHN0Y2IsIG5ldCwgbmJ3KTsKLSNlbmRpZgotCQlnb3RvIG91dDsKLQl9Ci0JcnR0X29mZnNl
dCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA+PiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0
dmFyX3J0dCk7Ci0JaWYgKG5idyA8IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IC0gYndfb2Zmc2V0KSB7
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAw
Ci0JCXJldCA9IGNjX2J3X2RlY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCBydHRfb2Zmc2V0LCB2dGFn
LCBpbnN0X2luZCk7Ci0jZWxzZQotCQlyZXQgPSBjY19id19kZWNyZWFzZShzdGNiLCBuZXQsIG5i
dywgcnR0X29mZnNldCwgaW5zdF9pbmQpOwotI2VuZGlmCi0JCWdvdG8gb3V0OwotCX0KLQkvKiBJ
ZiB3ZSByZWFjaCBoZXJlIHRoZW4KLQkgKiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUKLQkg
KiB0aGUgYncgc3RheWVkIHRoZSBzYW1lLgotCSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXJldCA9IGNjX2J3X3NhbWUoc3RjYiwg
bmV0LCBuYncsIHJ0dF9vZmZzZXQsIHZ0YWcsIGluc3RfaW5kKTsKLSNlbHNlCi0JcmV0ID0gY2Nf
Yndfc2FtZShzdGNiLCBuZXQsIG5idywgcnR0X29mZnNldCwgaW5zdF9pbmQpOwotI2VuZGlmCi1v
dXQ6Ci0JbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kID0gaW5zdF9pbmQ7Ci0JcmV0dXJu
IChyZXQpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2Nv
bW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MsCi0JCQkJICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVuZWdlZF9hbGwgU0NUUF9V
TlVTRUQsIGludCB3aWxsX2V4aXQsIGludCB1c2VfcnRjYykKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAzMDAwCi0JaW50IG9sZF9jd25kOwotI2VuZGlmCi0JdWludDMyX3QgdF9zc3RocmVzaCwgdF9j
d25kLCBpbmNyOwotCXVpbnQ2NF90IHRfdWN3bmRfc2J3OwotCXVpbnQ2NF90IHRfcGF0aF9tcHRj
cDsKLQl1aW50NjRfdCBtcHRjcF9saWtlX2FscGhhOwotCXVpbnQzMl90IHNydHQ7Ci0JdWludDY0
X3QgbWF4X3BhdGg7Ci0KLQkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5k
IG92ZXIgYWdhaW4gKi8KLQl0X3NzdGhyZXNoID0gMDsKLQl0X2N3bmQgPSAwOwotCXRfdWN3bmRf
c2J3ID0gMDsKLQl0X3BhdGhfbXB0Y3AgPSAwOwotCW1wdGNwX2xpa2VfYWxwaGEgPSAxOwotCWlm
ICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAg
KHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpIHx8Ci0JICAgIChz
dGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9NUFRDUCkpIHsKLQkJbWF4X3Bh
dGggPSAwOwotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0
KSB7Ci0JCQl0X3NzdGhyZXNoICs9IG5ldC0+c3N0aHJlc2g7Ci0JCQl0X2N3bmQgKz0gbmV0LT5j
d25kOwotCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KLQkJ
CXNydHQgPSBuZXQtPmxhc3RzYTsKLQkJCWlmIChzcnR0ID4gMCkgewotCQkJCXVpbnQ2NF90IHRt
cDsKLQotCQkJCXRfdWN3bmRfc2J3ICs9ICh1aW50NjRfdCluZXQtPmN3bmQgLyAodWludDY0X3Qp
c3J0dDsKLQkJCQl0X3BhdGhfbXB0Y3AgKz0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCBTSElG
VF9NUFRDUF9NVUxUSV9aKSAvCi0JCQkJICAgICAgICAgICAgICAgICgoKHVpbnQ2NF90KW5ldC0+
bXR1KSAqICh1aW50NjRfdClzcnR0KTsKLQkJCQl0bXAgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQp
IDw8IFNISUZUX01QVENQX01VTFRJX04pIC8KLQkJCQkgICAgICAoKHVpbnQ2NF90KW5ldC0+bXR1
ICogKHVpbnQ2NF90KShzcnR0ICogc3J0dCkpOwotCQkJCWlmICh0bXAgPiBtYXhfcGF0aCkgewot
CQkJCQltYXhfcGF0aCA9IHRtcDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHRfcGF0aF9tcHRj
cCA+IDApIHsKLQkJCW1wdGNwX2xpa2VfYWxwaGEgPSBtYXhfcGF0aCAvICh0X3BhdGhfbXB0Y3Ag
KiB0X3BhdGhfbXB0Y3ApOwotCQl9IGVsc2UgewotCQkJbXB0Y3BfbGlrZV9hbHBoYSA9IDE7Ci0J
CX0KLQl9Ci0JaWYgKHRfc3N0aHJlc2ggPT0gMCkgewotCQl0X3NzdGhyZXNoID0gMTsKLQl9Ci0J
aWYgKHRfdWN3bmRfc2J3ID09IDApIHsKLQkJdF91Y3duZF9zYncgPSAxOwotCX0KLQkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIHVwZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAg
ICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlUQUlMUV9GT1JFQUNIKG5l
dCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCi0jaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNP
VkVSWQotCQkvKgotCQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgot
CQkgKi8KLQkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19w
c2V1ZG9fY3VtYWNrKSB7Ci0JCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEs
IG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8Ci0JCQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1
ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pKSB7Ci0JCQkJbmV0LT53aWxsX2V4aXRf
ZmFzdF9yZWNvdmVyeSA9IDE7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQkvKiBpZiBub3RoaW5nIHdh
cyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KLQkJaWYgKG5ldC0+bmV0X2Fj
ayA9PSAwKSB7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQs
IDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0j
aWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQotICAgICAgICAgICAgICAgIC8qIENNVCBmYXN0
IHJlY292ZXJ5IGNvZGUKLQkJICovCi0JCS8qCi0JCSAgaWYgKHNjdHBfY210X29uX29mZiA+IDAg
JiYgbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIG5ldC0+d2lsbF9leGl0X2Zhc3Rf
cmVjb3ZlcnkgPT0gMCkgewotCQkgIEBAQCBEbyBzb21ldGhpbmcKLQkJICB9Ci0JCSAgZWxzZSBp
ZiAoc2N0cF9jbXRfb25fb2ZmID09IDAgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVy
eSAmJiB3aWxsX2V4aXQgPT0gMCkgewotCQkqLwotI2VuZGlmCi0KLQkJaWYgKGFzb2MtPmZhc3Rf
cmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKLQkJICAgICh3aWxsX2V4aXQgPT0gMCkgJiYKLQkJICAg
IChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBhcmUg
aW4gbG9zcyByZWNvdmVyeSB3ZSBza2lwIGFueSBjd25kCi0JCQkgKiB1cGRhdGUKLQkJCSAqLwot
CQkJcmV0dXJuOwotCQl9Ci0JCS8qCi0JCSAqIERpZCBhbnkgbWVhc3VyZW1lbnRzIGdvIG9uIGZv
ciB0aGlzIG5ldHdvcms/Ci0JCSAqLwotCQlpZiAodXNlX3J0Y2MgJiYgKG5ldC0+Y2NfbW9kLnJ0
Y2MudGxzX25lZWRzX3NldCA+IDApKSB7Ci0JCQl1aW50NjRfdCBuYnc7Ci0JCQkvKgotCQkJICog
QXQgdGhpcyBwb2ludCBvdXIgYndfYnl0ZXMgaGFzIGJlZW4gdXBkYXRlZAotCQkJICogYnkgaW5j
b21pbmcgc2FjayBpbmZvcm1hdGlvbi4KLQkJCSAqCi0JCQkgKiBCdXQgb3VyIGJ3IG1heSBub3Qg
eWV0IGJlIHNldC4KLQkJCSAqCi0JCQkgKi8KLQkJCWlmICgobmV0LT5jY19tb2QucnRjYy5uZXdf
dG90X3RpbWUvMTAwMCkgPiAwKSB7Ci0JCQkJbmJ3ID0gbmV0LT5jY19tb2QucnRjYy5id19ieXRl
cy8obmV0LT5jY19tb2QucnRjYy5uZXdfdG90X3RpbWUvMTAwMCk7Ci0JCQl9IGVsc2UgewotCQkJ
CW5idyA9IG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXM7Ci0JCQl9Ci0JCQlpZiAobmV0LT5jY19t
b2QucnRjYy5sYncpIHsKLQkJCQlpZiAoY2NfYndfbGltaXQoc3RjYiwgbmV0LCBuYncpKSB7Ci0J
CQkJCS8qIEhvbGQgaGVyZSwgbm8gdXBkYXRlICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJ
CX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAzMDAwCi0JCQkJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKLQotCQkJCXByb2JlcG9p
bnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKLQkJCQlwcm9iZXBvaW50IHw9ICAo
KDB4YSA8PCAxNikgfCAwKTsKLQkJCQl2dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8Ci0JCQkJCSgo
KHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKLQkJCQkJKHN0
Y2ItPnJwb3J0KTsKLQotCQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCi0J
CQkJCSAgdnRhZywKLQkJCQkJICBuYncsCi0JCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19y
dHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCi0JCQkJCSAg
cHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJCQluZXQtPmNjX21vZC5ydGNjLmxidyA9IG5idzsKLQkJ
CQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBuZXQtPnJ0dDsKLQkJCQlpZiAobmV0LT5jY19t
b2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjaykgewotCQkJCQluZXQtPmNjX21vZC5ydGNjLnJ0dF9z
ZXRfdGhpc19zYWNrID0gMDsKLQkJCQkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0
X3J0dGMgPSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzOwotCQkJCX0KLQkJCX0KLQkJfQotCQkv
KgotCQkgKiBDTVQ6IENVQyBhbGdvcml0aG0uIFVwZGF0ZSBjd25kIGlmIHBzZXVkby1jdW1hY2sg
aGFzCi0JCSAqIG1vdmVkLgotCQkgKi8KLQkJaWYgKGFjY3VtX21vdmVkIHx8Ci0JCSAgICAoKGFz
b2MtPnNjdHBfY210X29uX29mZiA+IDApICYmIG5ldC0+bmV3X3BzZXVkb19jdW1hY2spKSB7Ci0J
CQkvKiBJZiB0aGUgY3VtdWxhdGl2ZSBhY2sgbW92ZWQgd2UgY2FuIHByb2NlZWQgKi8KLQkJCWlm
IChuZXQtPmN3bmQgPD0gbmV0LT5zc3RocmVzaCkgewotCQkJCS8qIFdlIGFyZSBpbiBzbG93IHN0
YXJ0ICovCi0JCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0LT5j
d25kKSB7Ci0JCQkJCXVpbnQzMl90IGxpbWl0OwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkJCW9sZF9jd25kID0gbmV0LT5jd25k
OwotI2VuZGlmCi0JCQkJCXN3aXRjaCAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmKSB7Ci0JCQkJCWNh
c2UgU0NUUF9DTVRfUlBWMToKLQkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5l
dC0+bXR1ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAg
KHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAgICAgICAodWlu
dDY0X3QpdF9zc3RocmVzaCk7Ci0JCQkJCQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5l
dC0+bmV0X2FjayAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0
aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsK
LQkJCQkJCWlmIChpbmNyID4gbGltaXQpIHsKLQkJCQkJCQlpbmNyID0gbGltaXQ7Ci0JCQkJCQl9
Ci0JCQkJCQlpZiAoaW5jciA9PSAwKSB7Ci0JCQkJCQkJaW5jciA9IDE7Ci0JCQkJCQl9Ci0JCQkJ
CQlicmVhazsKLQkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYyOgotCQkJCQkJLyogbGFzdHNhPj4zOyAg
d2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uKi8KLQkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsK
LQkJCQkJCWlmIChzcnR0ID09IDApIHsKLQkJCQkJCQlzcnR0ID0gMTsKLQkJCQkJCX0KLQkJCQkJ
CWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFi
bGUpICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLwot
CQkJCQkJICAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqIHRfdWN3bmRfc2J3KSk7
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgLyogSU5DUkVBU0UgRkFDVE9SICovCi0JCQkJCQlp
bmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCi0JCQkJCQkgICAgICAg
ICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLwotCQkJCQkJICAgICAgICAgICAgICAg
ICAgKCh1aW50NjRfdClzcnR0ICogdF91Y3duZF9zYncpKTsKLQkJCQkJCSAgICAgICAgICAgICAg
ICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLwotCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkgewotCQkJ
CQkJCWluY3IgPSBsaW1pdDsKLQkJCQkJCX0KLQkJCQkJCWlmIChpbmNyID09IDApIHsKLQkJCQkJ
CQlpbmNyID0gMTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFNDVFBfQ01UX01Q
VENQOgotCQkJCQkJbGltaXQgPSAodWludDMyX3QpKCgodWludDY0X3QpbmV0LT5tdHUgKgotCQkJ
CQkJICAgICAgICAgICAgICAgICAgICBtcHRjcF9saWtlX2FscGhhICoKLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFi
bGUpKSA+PgotCQkJCQkJICAgICAgICAgICAgICAgICAgIFNISUZUX01QVENQX01VTFRJKTsKLQkJ
CQkJCWluY3IgID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCi0JCQkJCQkg
ICAgICAgICAgICAgICAgICAgIG1wdGNwX2xpa2VfYWxwaGEpID4+Ci0JCQkJCQkgICAgICAgICAg
ICAgICAgICAgU0hJRlRfTVBUQ1BfTVVMVEkpOwotCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkgewot
CQkJCQkJCWluY3IgPSBsaW1pdDsKLQkJCQkJCX0KLQkJCQkJCWlmIChpbmNyID4gbmV0LT5uZXRf
YWNrKSB7Ci0JCQkJCQkJaW5jciA9IG5ldC0+bmV0X2FjazsKLQkJCQkJCX0KLQkJCQkJCWlmIChp
bmNyID4gbmV0LT5tdHUpIHsKLQkJCQkJCQlpbmNyID0gbmV0LT5tdHU7Ci0JCQkJCQl9Ci0JCQkJ
CQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWluY3IgPSBuZXQtPm5ldF9hY2s7Ci0JCQkJ
CQlpZiAoaW5jciA+IG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJp
YWJsZSkpIHsKLQkJCQkJCQlpbmNyID0gbmV0LT5tdHUgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
TDJfYWJjX3ZhcmlhYmxlKTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCW5l
dC0+Y3duZCArPSBpbmNyOwotCQkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc29jLCBuZXQp
OwotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9D
V05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgaW5j
ciwKLQkJCQkJCSAgICAgICAgICAgICAgU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKLQkJCQkJfQot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAot
CQkJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAotCQkJCQkgICAgICAgICAgc3Rj
Yi0+YXNvYy5teV92dGFnLAotCQkJCQkgICAgICAgICAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xw
b3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAotCQkJCQkgICAgICAgICAgbmV0LAotCQkJCQkg
ICAgICAgICAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQkJCQl9IGVsc2UgewotCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRf
YWNrLAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOwotCQkJCQl9Ci0JCQkJ
fQotCQkJfSBlbHNlIHsKLQkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8K
LQkJCQkvKgotCQkJCSAqIEFkZCB0byBwYmEKLQkJCQkgKi8KLQkJCSAgICAgICAgbmV0LT5wYXJ0
aWFsX2J5dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKLQotCQkJCWlmICgobmV0LT5mbGlnaHRf
c2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID49IG5ldC0+Y3duZCkp
IHsKLQkJCQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkIC09IG5ldC0+Y3duZDsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCQkJb2xk
X2N3bmQgPSBuZXQtPmN3bmQ7Ci0jZW5kaWYKLQkJCQkJc3dpdGNoIChhc29jLT5zY3RwX2NtdF9v
bl9vZmYpIHsKLQkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYxOgotCQkJCQkJaW5jciA9ICh1aW50MzJf
dCkoKCh1aW50NjRfdCluZXQtPm10dSAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0
X3NzdGhyZXNoKTsKLQkJCQkJCWlmIChpbmNyID09IDApIHsKLQkJCQkJCQlpbmNyID0gMTsKLQkJ
CQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFNDVFBfQ01UX1JQVjI6Ci0JCQkJCQkvKiBs
YXN0c2E+PjM7ICB3ZSBkb24ndCBuZWVkIHRvIGRpdmlkZSAuLi4gKi8KLQkJCQkJCXNydHQgPSBu
ZXQtPmxhc3RzYTsKLQkJCQkJCWlmIChzcnR0ID09IDApIHsKLQkJCQkJCQlzcnR0ID0gMTsKLQkJ
CQkJCX0KLQkJCQkJCWluY3IgPSAodWludDMyX3QpKCh1aW50NjRfdCluZXQtPm10dSAqCi0JCQkJ
CQkgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5jd25kIC8KLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgdF91
Y3duZF9zYncpKTsKLQkJCQkJCSAgICAgICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAq
LwotCQkJCQkJaWYgKGluY3IgPT0gMCkgewotCQkJCQkJCWluY3IgPSAxOwotCQkJCQkJfQotCQkJ
CQkJYnJlYWs7Ci0JCQkJCWNhc2UgU0NUUF9DTVRfTVBUQ1A6Ci0JCQkJCQlpbmNyID0gKHVpbnQz
Ml90KSgobXB0Y3BfbGlrZV9hbHBoYSAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KSBuZXQtPmN3bmQpID4+Ci0JCQkJCQkgICAgICAgICAgICAgICAgICBTSElGVF9NUFRDUF9N
VUxUSSk7Ci0JCQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1KSB7Ci0JCQkJCQkJaW5jciA9IG5ldC0+
bXR1OwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlpbmNyID0g
bmV0LT5tdHU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQluZXQtPmN3bmQgKz0gaW5jcjsK
LQkJCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoYXNvYywgbmV0KTsKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCQkJU0RUX1BST0JF
NShzY3RwLCBjd25kLCBuZXQsIGFjaywKLQkJCQkJCSAgc3RjYi0+YXNvYy5teV92dGFnLAotCQkJ
CQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSks
Ci0JCQkJCQkgIG5ldCwKLQkJCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQkJ
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9N
T05JVE9SX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1
LAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfRlJPTV9DQSk7Ci0JCQkJCX0KLQkJCQl9IGVs
c2UgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
bmV0LT5uZXRfYWNrLAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EpOwotCQkJ
CQl9Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBf
bG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJCQkJICAgICAgU0NUUF9DV05EX0xPR19O
T19DVU1BQ0spOwotCQkJfQotCQl9Ci0JfQotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3Vw
ZGF0ZV9leGl0X3BmX2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCkKLSNlbHNlCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2Nv
bW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCkKLSNlbmRpZgotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMzAwMAotCWludCBvbGRfY3duZDsKLQotCW9sZF9jd25kID0gbmV0LT5jd25k
OwotI2VuZGlmCi0JbmV0LT5jd25kID0gbmV0LT5tdHU7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JU0RUX1BST0JFNShzY3RwLCBjd25k
LCBuZXQsIGFjaywKLQkgICAgICAgICAgc3RjYi0+YXNvYy5teV92dGFnLCAoKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksIG5ldCwKLQkgICAgICAgICAg
b2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRB
MSwgIkRlc3RpbmF0aW9uICVwIG1vdmVkIGZyb20gUEYgdG8gcmVhY2hhYmxlIHdpdGggY3duZCAl
ZC5cbiIsCi0JICAgICAgICAodm9pZCAqKW5ldCwgbmV0LT5jd25kKTsKLX0KLQotCi1zdGF0aWMg
dm9pZAotc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsK
LQl1aW50MzJfdCB0X3NzdGhyZXNoLCB0X2N3bmQ7Ci0JdWludDY0X3QgdF91Y3duZF9zYnc7Ci0K
LQkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4gKi8K
LQl0X3NzdGhyZXNoID0gMDsKLQl0X2N3bmQgPSAwOwotCWlmICgoc3RjYi0+YXNvYy5zY3RwX2Nt
dF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRf
b25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7Ci0J
CXVpbnQzMl90IHNydHQ7Ci0KLQkJdF91Y3duZF9zYncgPSAwOwotCQlUQUlMUV9GT1JFQUNIKGxu
ZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJdF9zc3RocmVzaCArPSBsbmV0
LT5zc3RocmVzaDsKLQkJCXRfY3duZCArPSBsbmV0LT5jd25kOwotCQkJc3J0dCA9IGxuZXQtPmxh
c3RzYTsKLQkJCS8qIGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8gZGl2aWRlIC4uLiAqLwot
CQkJaWYgKHNydHQgPiAwKSB7Ci0JCQkJdF91Y3duZF9zYncgKz0gKHVpbnQ2NF90KWxuZXQtPmN3
bmQgLyAodWludDY0X3Qpc3J0dDsKLQkJCX0KLQkJfQotCQlpZiAodF9zc3RocmVzaCA8IDEpIHsK
LQkJCXRfc3N0aHJlc2ggPSAxOwotCQl9Ci0JCWlmICh0X3Vjd25kX3NidyA8IDEpIHsKLQkJCXRf
dWN3bmRfc2J3ID0gMTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0g
U0NUUF9DTVRfUlBWMSkgewotCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1aW50NjRf
dCk0ICoKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5tdHUg
KgotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCluZXQtPnNzdGhyZXNo
KSAvCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpdF9zc3RocmVzaCk7
Ci0JCX0gZWxzZSB7Ci0JCQl1aW50NjRfdCBjY19kZWx0YTsKLQotCQkJc3J0dCA9IG5ldC0+bGFz
dHNhOwotCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uICovCi0J
CQlpZiAoc3J0dCA9PSAwKSB7Ci0JCQkJc3J0dCA9IDE7Ci0JCQl9Ci0JCQljY19kZWx0YSA9IHRf
dWN3bmRfc2J3ICogKHVpbnQ2NF90KXNydHQgLyAyOwotCQkJaWYgKGNjX2RlbHRhIDwgdF9jd25k
KSB7Ci0JCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKHVpbnQ2NF90KXRfY3duZCAtIGNj
X2RlbHRhKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0LT5zc3RocmVzaCAgPSBuZXQtPm10dTsKLQkJ
CX0KLQkJfQotCQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCi0JCSAgICAobmV0LT5z
c3RocmVzaCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7Ci0JCQluZXQtPnNzdGhyZXNoID0g
bmV0LT5jd25kIC0gdF9jd25kIC8gMjsKLQkJfQotCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+
bXR1KSB7Ci0JCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7Ci0JCX0KLQl9IGVsc2UgewotCQlu
ZXQtPnNzdGhyZXNoID0gbWF4KG5ldC0+Y3duZCAvIDIsIDQgKiBuZXQtPm10dSk7Ci0JfQotCW5l
dC0+Y3duZCA9IG5ldC0+bXR1OwotCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JU0RU
X1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHRvLAotCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywKLQkJ
ICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCi0J
CSAgbmV0LAotCQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOwotI2VuZGlmCi0JaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkg
ewotCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5jd25kIC0gb2xkX2N3bmQsIFNDVFBf
Q1dORF9MT0dfRlJPTV9SVFgpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfZWNuX2VjaG9fY29tbW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0LAotCQkJCQkgICAgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9zdCwg
aW50IHVzZV9ydGNjKQotewotCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQlpZiAoKHVzZV9y
dGNjKSAmJiAobmV0LT5sYW5fdHlwZSA9PSBTQ1RQX0xBTl9MT0NBTCkgJiYgKG5ldC0+Y2NfbW9k
LnJ0Y2MudXNlX2RjY2NfZWNuKSkgewotCQkvKiBEYXRhIGNlbnRlciBDb25nZXN0aW9uIENvbnRy
b2wgKi8KLQkJaWYgKGluX3dpbmRvdyA9PSAwKSB7Ci0JCQkvKiBHbyB0byBDQSB3aXRoIHRoZSBj
d25kIGF0IHRoZSBwb2ludCB3ZSBzZW50Ci0JCQkgKiB0aGUgVFNOIHRoYXQgd2FzIG1hcmtlZCB3
aXRoIGEgQ0UuCi0JCQkgKi8KLQkJCWlmIChuZXQtPmVjbl9wcmV2X2N3bmQgPCBuZXQtPmN3bmQp
IHsKLQkJCQkvKiBSZXN0b3JlIHRvIHByZXYgY3duZCAqLwotCQkJCW5ldC0+Y3duZCA9IG5ldC0+
ZWNuX3ByZXZfY3duZCAtIChuZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7Ci0JCQl9IGVsc2Ugewot
CQkJCS8qIEp1c3QgY3V0IGluIDEvMiAqLwotCQkJCW5ldC0+Y3duZCAvPSAyOwotCQkJfQotCQkJ
LyogRHJvcCB0byBDQSAqLwotCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIChudW1fcGt0
X2xvc3QgKiBuZXQtPm10dSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChz
dGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TQVQp
OwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogRnVydGhlciB0dW5pbmcgZG93biByZXF1aXJlZCBv
dmVyIHRoZSBkcmFzdGljIG9yaWdpbmFsIGN1dCAqLwotCQkJbmV0LT5zc3RocmVzaCAtPSAobmV0
LT5tdHUgKiBudW1fcGt0X2xvc3QpOwotCQkJbmV0LT5jd25kIC09IChuZXQtPm10dSAqIG51bV9w
a3RfbG9zdCk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQs
IChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TQVQpOwotCQkJfQot
Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKLQl9ICBlbHNl
IHsKLQkJaWYgKGluX3dpbmRvdyA9PSAwKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19lY25l
cmVkdWNlZGN3bmQpOwotCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7Ci0JCQlpZiAo
bmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7Ci0JCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+bXR1
OwotCQkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRpbWVyIGFzIHdlbGwsIHRvIHNsb3cgdXMgZG93
biAqLwotCQkJCW5ldC0+UlRPIDw8PSAxOwotCQkJfQotCQkJbmV0LT5jd25kID0gbmV0LT5zc3Ro
cmVzaDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDMwMDAKLQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBlY24sCi0JCQkJICBzdGNiLT5h
c29jLm15X3Z0YWcsCi0JCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwg
KHN0Y2ItPnJwb3J0KSksCi0JCQkJICBuZXQsCi0JCQkJICBvbGRfY3duZCwgbmV0LT5jd25kKTsK
LSNlbmRpZgotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAo
bmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKLQkJCX0KLQkJ
fQotCX0KLQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRf
ZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBz
dHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKLQl1aW50MzJfdCAqYm90dGxlX2J3LCB1aW50
MzJfdCAqb25fcXVldWUpCi17Ci0JdWludDMyX3QgYndfYXZhaWw7Ci0JdW5zaWduZWQgaW50IGlu
Y3I7Ci0JaW50IG9sZF9jd25kID0gbmV0LT5jd25kOwotCi0JLyogZ2V0IGJvdHRsZSBuZWNrIGJ3
ICovCi0JKmJvdHRsZV9idyA9IG50b2hsKGNwLT5ib3R0bGVfYncpOwotCS8qIGFuZCB3aGF0cyBv
biBxdWV1ZSAqLwotCSpvbl9xdWV1ZSA9IG50b2hsKGNwLT5jdXJyZW50X29ucSk7Ci0JLyoKLQkg
KiBhZGp1c3QgdGhlIG9uLXF1ZXVlIGlmIG91ciBmbGlnaHQgaXMgbW9yZSBpdCBjb3VsZCBiZQot
CSAqIHRoYXQgdGhlIHJvdXRlciBoYXMgbm90IHlldCBnb3R0ZW4gZGF0YSAiaW4tZmxpZ2h0IiB0
byBpdAotCSAqLwotCWlmICgqb25fcXVldWUgPCBuZXQtPmZsaWdodF9zaXplKSB7Ci0JCSpvbl9x
dWV1ZSA9IG5ldC0+ZmxpZ2h0X3NpemU7Ci0JfQotCS8qIHJ0dCBpcyBtZWFzdXJlZCBpbiBtaWNy
byBzZWNvbmRzLCBib3R0bGVfYncgaW4gYnl0ZXMgcGVyIHNlY29uZCAqLwotCWJ3X2F2YWlsID0g
KHVpbnQzMl90KSgoKHVpbnQ2NF90KSgqYm90dGxlX2J3KSAqIG5ldC0+cnR0KSAvICh1aW50NjRf
dCkxMDAwMDAwKTsKLQlpZiAoYndfYXZhaWwgPiAqYm90dGxlX2J3KSB7Ci0JCS8qCi0JCSAqIENh
cCB0aGUgZ3Jvd3RoIHRvIG5vIG1vcmUgdGhhbiB0aGUgYm90dGxlIG5lY2suCi0JCSAqIFRoaXMg
Y2FuIGhhcHBlbiBhcyBSVFQgc2xpZGVzIHVwIGR1ZSB0byBxdWV1ZXMuCi0JCSAqIEl0IGFsc28g
bWVhbnMgaWYgeW91IGhhdmUgbW9yZSB0aGFuIGEgMSBzZWNvbmQKLQkJICogUlRUIHdpdGggYSBl
bXB0eSBxdWV1ZSB5b3Ugd2lsbCBiZSBsaW1pdGVkIHRvIHRoZQotCQkgKiBib3R0bGVfYncgcGVy
IHNlY29uZCBubyBtYXR0ZXIgaWYgb3RoZXIgcG9pbnRzCi0JCSAqIGhhdmUgMS8yIHRoZSBSVFQg
YW5kIHlvdSBjb3VsZCBnZXQgbW9yZSBvdXQuLi4KLQkJICovCi0JCWJ3X2F2YWlsID0gKmJvdHRs
ZV9idzsKLQl9Ci0JaWYgKCpvbl9xdWV1ZSA+IGJ3X2F2YWlsKSB7Ci0JCS8qCi0JCSAqIE5vIHJv
b20gZm9yIGFueXRoaW5nIGVsc2UgZG9uJ3QgYWxsb3cgYW55dGhpbmcKLQkJICogZWxzZSB0byBi
ZSAiYWRkZWQgdG8gdGhlIGZpcmUiLgotCQkgKi8KLQkJaW50IHNlZ19pbmZsaWdodCwgc2VnX29u
cXVldWUsIG15X3BvcnRpb247Ci0KLQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKLQkJ
LyogaG93IG11Y2ggYXJlIHdlIG92ZXIgcXVldWUgc2l6ZT8gKi8KLQkJaW5jciA9ICpvbl9xdWV1
ZSAtIGJ3X2F2YWlsOwotCQlpZiAoc3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlzX3BrdCkgewot
CQkJLyoKLQkJCSAqIHVuZG8gYW55IGN3bmQgYWRqdXN0bWVudCB0aGF0IHRoZSBzYWNrCi0JCQkg
KiBtaWdodCBoYXZlIG1hZGUKLQkJCSAqLwotCQkJbmV0LT5jd25kID0gbmV0LT5wcmV2X2N3bmQ7
Ci0JCX0KLQkJLyogTm93IGhvdyBtdWNoIG9mIHRoYXQgaXMgbWluZT8gKi8KLQkJc2VnX2luZmxp
Z2h0ID0gbmV0LT5mbGlnaHRfc2l6ZSAvIG5ldC0+bXR1OwotCQlzZWdfb25xdWV1ZSA9ICpvbl9x
dWV1ZSAvIG5ldC0+bXR1OwotCQlteV9wb3J0aW9uID0gKGluY3IgKiBzZWdfaW5mbGlnaHQpIC8g
c2VnX29ucXVldWU7Ci0KLQkJLyogSGF2ZSBJIG1hZGUgYW4gYWRqdXN0bWVudCBhbHJlYWR5ICov
Ci0JCWlmIChuZXQtPmN3bmQgPiBuZXQtPmZsaWdodF9zaXplKSB7Ci0JCQkvKgotCQkJICogZm9y
IHRoaXMgZmxpZ2h0IEkgbWFkZSBhbiBhZGp1c3RtZW50IHdlCi0JCQkgKiBuZWVkIHRvIGRlY3Jl
YXNlIHRoZSBwb3J0aW9uIGJ5IGEgc2hhcmUKLQkJCSAqIG91ciBwcmV2aW91cyBhZGp1c3RtZW50
LgotCQkJICovCi0JCQlpbnQgZGlmZl9hZGo7Ci0KLQkJCWRpZmZfYWRqID0gbmV0LT5jd25kIC0g
bmV0LT5mbGlnaHRfc2l6ZTsKLQkJCWlmIChkaWZmX2FkaiA+IG15X3BvcnRpb24pCi0JCQkJbXlf
cG9ydGlvbiA9IDA7Ci0JCQllbHNlCi0JCQkJbXlfcG9ydGlvbiAtPSBkaWZmX2FkajsKLQkJfQot
CQkvKgotCQkgKiBiYWNrIGRvd24gdG8gdGhlIHByZXZpb3VzIGN3bmQgKGFzc3VtZSB3ZSBoYXZl
Ci0JCSAqIGhhZCBhIHNhY2sgYmVmb3JlIHRoaXMgcGFja2V0KS4gbWludXMgd2hhdCBldmVyCi0J
CSAqIHBvcnRpb24gb2YgdGhlIG92ZXJhZ2UgaXMgbXkgZmF1bHQuCi0JCSAqLwotCQluZXQtPmN3
bmQgLT0gbXlfcG9ydGlvbjsKLQotCQkvKiB3ZSB3aWxsIE5PVCBiYWNrIGRvd24gbW9yZSB0aGFu
IDEgTVRVICovCi0JCWlmIChuZXQtPmN3bmQgPD0gbmV0LT5tdHUpIHsKLQkJCW5ldC0+Y3duZCA9
IG5ldC0+bXR1OwotCQl9Ci0JCS8qIGZvcmNlIGludG8gQ0EgKi8KLQkJbmV0LT5zc3RocmVzaCA9
IG5ldC0+Y3duZCAtIDE7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGFrZSAxLzQgb2YgdGhlIHNw
YWNlIGxlZnQgb3IgbWF4IGJ1cnN0IHVwIC4uCi0JCSAqIHdoaWNoZXZlciBpcyBsZXNzLgotCQkg
Ki8KLQkJaW5jciA9IChid19hdmFpbCAtICpvbl9xdWV1ZSkgPj4gMjsKLQkJaWYgKChzdGNiLT5h
c29jLm1heF9idXJzdCA+IDApICYmCi0JCSAgICAoc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBuZXQt
Pm10dSA8IGluY3IpKSB7Ci0JCQlpbmNyID0gc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBuZXQtPm10
dTsKLQkJfQotCQluZXQtPmN3bmQgKz0gaW5jcjsKLQl9Ci0JaWYgKG5ldC0+Y3duZCA+IGJ3X2F2
YWlsKSB7Ci0JCS8qIFdlIGNhbid0IGV4Y2VlZCB0aGUgcGlwZSBzaXplICovCi0JCW5ldC0+Y3du
ZCA9IGJ3X2F2YWlsOwotCX0KLQlpZiAobmV0LT5jd25kIDwgbmV0LT5tdHUpIHsKLQkJLyogV2Ug
YWx3YXlzIGhhdmUgMSBNVFUgKi8KLQkJbmV0LT5jd25kID0gbmV0LT5tdHU7Ci0JfQotCXNjdHBf
ZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotCWlmIChuZXQtPmN3bmQgLSBv
bGRfY3duZCAhPSAwKSB7Ci0JCS8qIGxvZyBvbmx5IGNoYW5nZXMgKi8KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJU0RUX1BST0JFNShz
Y3RwLCBjd25kLCBuZXQsIHBkLAotCQkJICBzdGNiLT5hc29jLm15X3Z0YWcsCi0JCQkgICgoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+cnBvcnQpKSwKLQkJCSAgbmV0
LAotCQkJICBvbGRfY3duZCwgbmV0LT5jd25kKTsKLSNlbmRpZgotCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0J
CQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9sZF9jd25kKSwKLQkJCQlT
Q1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAg
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGJ1cnN0X2xpbWl0KQotewotCWludCBvbGRfY3du
ZCA9IG5ldC0+Y3duZDsKLQotCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5jd25kKQotCQluZXQt
PnNzdGhyZXNoID0gbmV0LT5jd25kOwotCWlmIChidXJzdF9saW1pdCkgewotCQluZXQtPmN3bmQg
PSAobmV0LT5mbGlnaHRfc2l6ZSArIChidXJzdF9saW1pdCAqIG5ldC0+bXR1KSk7Ci0JCXNjdHBf
ZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQlTRFRfUFJPQkU1KHNjdHAs
IGN3bmQsIG5ldCwgYmwsCi0JCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywKLQkJCSAgKChzdGNiLT5z
Y3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAotCQkJICBuZXQsCi0J
CQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOwotI2VuZGlmCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRf
TE9HX0ZST01fQlJTVCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJICAgIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgIGludCBhY2N1bV9tb3ZlZCwgaW50IHJlbmVnZWRf
YWxsLCBpbnQgd2lsbF9leGl0KQotewotCS8qIFBhc3NpbmcgYSB6ZXJvIGFyZ3VtZW50IGluIGxh
c3QgZGlzYWJsZXMgdGhlIHJ0Y2MgYWxnb3JpdGhtICovCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9zYWNrX2NvbW1vbihzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxf
ZXhpdCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9l
Y2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotCWludCBp
bl93aW5kb3csIGludCBudW1fcGt0X2xvc3QpCi17Ci0JLyogUGFzc2luZyBhIHplcm8gYXJndW1l
bnQgaW4gbGFzdCBkaXNhYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8KLQlzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX2Vjbl9lY2hvX2NvbW1vbihzdGNiLCBuZXQsIGluX3dpbmRvdywgbnVtX3BrdF9s
b3N0LCAwKTsKLX0KLQotLyogSGVyZSBzdGFydHMgdGhlIFJUQ0NWQVIgdHlwZSBDQyBpbnZlbnRl
ZCBieSBSUlMgd2hpY2gKLSAqIGlzIGEgc2xpZ2h0IG1vZCB0byBSRkMyNTgxLiBXZSByZXVzZSBh
IGNvbW1vbiByb3V0aW5lIG9yCi0gKiB0d28gc2luY2UgdGhlc2UgYWxnb3JpdGhtcyBhcmUgc28g
Y2xvc2UgYW5kIG5lZWQgdG8KLSAqIHJlbWFpbiB0aGUgc2FtZS4KLSAqLwotc3RhdGljIHZvaWQK
LXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJCQkgICAgIGludCBpbl93aW5kb3csIGludCBu
dW1fcGt0X2xvc3QpCi17Ci0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNob19jb21tb24o
c3RjYiwgbmV0LCBpbl93aW5kb3csIG51bV9wa3RfbG9zdCwgMSk7Ci19Ci0KLQotc3RhdGljCi12
b2lkIHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkKHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwKLQkJCQkJICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSkKLXsKLQluZXQt
PmNjX21vZC5ydGNjLmJ3X2J5dGVzICs9IHRwMS0+c2VuZF9zaXplOwotfQotCi1zdGF0aWMgdm9p
ZAotc2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2soc3RydWN0IHNjdHBfdGNiICpz
dGNiIFNDVFBfVU5VU0VELAotCQkJCSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JaWYg
KG5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA+IDApIHsKLQkJLyogV2UgaGFkIGEgYncg
bWVhc3VybWVudCBnb2luZyBvbiAqLwotCQlzdHJ1Y3QgdGltZXZhbCBsdGxzOwotCQlTQ1RQX0dF
VFBUSU1FX1RJTUVWQUwoJmx0bHMpOwotCQl0aW1ldmFsc3ViKCZsdGxzLCAmbmV0LT5jY19tb2Qu
cnRjYy50bHMpOwotCQluZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGltZSA9IChsdGxzLnR2X3Nl
YyAqIDEwMDAwMDApICsgbHRscy50dl91c2VjOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBf
Y3duZF9uZXdfcnRjY190cmFuc21pc3Npb25fYmVnaW5zKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
LQkJCQkgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXVpbnQ2NF90IHZ0YWcsIHBy
b2JlcG9pbnQ7Ci0KLSNlbmRpZgotCWlmIChuZXQtPmNjX21vZC5ydGNjLmxidykgewotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQkvKiBD
bGVhciB0aGUgb2xkIGJ3Li4gd2Ugd2VudCB0byAwIGluLWZsaWdodCAqLwotCQl2dGFnID0gKG5l
dC0+cnR0IDw8IDMyKSB8ICgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkg
PDwgMTYpIHwKLQkJCShzdGNiLT5ycG9ydCk7Ci0JCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdClu
ZXQtPmN3bmQpIDw8IDMyKTsKLQkJLyogUHJvYmUgcG9pbnQgOCAqLwotCQlwcm9iZXBvaW50IHw9
ICAoKDggPDwgMTYpIHwgMCk7Ci0JCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIs
Ci0JCQkgIHZ0YWcsCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgMCksCi0J
CQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCSAg
bmV0LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJbmV0LT5jY19t
b2QucnRjYy5sYndfcnR0ID0gMDsKLQkJbmV0LT5jY19tb2QucnRjYy5jd25kX2F0X2J3X3NldCA9
IDA7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ID0gMDsKLQkJbmV0LT5jY19tb2QucnRjYy5id19i
eXRlc19hdF9sYXN0X3J0dGMgPSAwOwotCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAw
OwotCQluZXQtPmNjX21vZC5ydGNjLmJ3X3RvdF90aW1lID0gMDsKLQkJbmV0LT5jY19tb2QucnRj
Yy5id19ieXRlcyA9IDA7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7Ci0J
CWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7Ci0JCQluZXQtPmNjX21vZC5ydGNj
LnZvbF9yZWR1Y2UgPSAwOwotCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCQlu
ZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7Ci0JCX0KLQkJaWYgKG5ldC0+Y2Nf
bW9kLnJ0Y2MucmV0X2Zyb21fZXEpIHsKLQkJCS8qIGxlc3MgYWdncmVzc2l2ZSBvbmUgLSByZXNl
dCBjd25kIHRvbyAqLwotCQkJdWludDMyX3QgY3duZF9pbl9tdHUsIGN3bmQ7Ci0KLQkJCWN3bmRf
aW5fbXR1ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCk7Ci0JCQlpZiAoY3du
ZF9pbl9tdHUgPT0gMCkgewotCQkJCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2Yg
UkZDIDQ5NjAgaXMgdXNlZC4gKi8KLQkJCQljd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgo
KDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7Ci0JCQl9IGVsc2UgewotCQkJCS8q
Ci0JCQkJICogV2UgdGFrZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQot
CQkJCSAqIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cuCi0JCQkJICovCi0JCQkJaWYgKChzdGNi
LT5hc29jLm1heF9idXJzdCA+IDApICYmIChjd25kX2luX210dSA+IHN0Y2ItPmFzb2MubWF4X2J1
cnN0KSkKLQkJCQkJY3duZF9pbl9tdHUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKLQkJCQljd25k
ID0gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkgKiBjd25kX2luX210dTsKLQkJ
CX0KLQkJCWlmIChuZXQtPmN3bmQgPiBjd25kKSB7Ci0JCQkJLyogT25seSBzZXQgaWYgd2UgYXJl
IG5vdCBhIHRpbWVvdXQgKGkuZS4gZG93biB0byAxIG10dSkgKi8KLQkJCQluZXQtPmN3bmQgPSBj
d25kOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zZXRfcnRjY19pbml0
aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQpCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAzMDAwCi0JdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKLQotI2VuZGlmCi0J
c2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOwotCXN0Y2ItPmFzb2MudXNlX3By
ZWNpc2VfdGltZSA9IDE7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAzMDAwCi0JcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwg
MzIpOwotCXByb2JlcG9pbnQgfD0gICgoOSA8PCAxNikgfCAwKTsKLQl2dGFnID0gKG5ldC0+cnR0
IDw8IDMyKSB8Ci0JCSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwg
MTYpIHwKLQkJKHN0Y2ItPnJwb3J0KTsKLQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0
dmFyLAotCQkgIHZ0YWcsCi0JCSAgMCwKLQkJICAwLAotCQkgIDAsCi0JCSAgcHJvYmVwb2ludCk7
Ci0jZW5kaWYKLQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0
Y2MuY3duZF9hdF9id19zZXQgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSA9IDA7
Ci0JbmV0LT5jY19tb2QucnRjYy5sYncgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVj
ZSA9IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSAwOwotCW5l
dC0+Y2NfbW9kLnJ0Y2MuYndfdG90X3RpbWUgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0
ZXMgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7Ci0JbmV0LT5jY19t
b2QucnRjYy5yZXRfZnJvbV9lcSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQp
OwotCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXAgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
c3RlYWR5X3N0ZXApOwotCW5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2RjY2NfZWNuID0gU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3VzZV9kY2NjX2Vjbik7Ci0JbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9
IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAwOwotCi0KLX0KLQotc3Rh
dGljIGludAotc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIGludCBzZXRvcmdldCwKLQkJCSAgICAgc3RydWN0IHNjdHBfY2Nfb3B0aW9uICpjY19vcHQp
Ci17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCWlmIChzZXRvcmdldCA9PSAxKSB7Ci0JCS8q
IGEgc2V0ICovCi0JCWlmIChjY19vcHQtPm9wdGlvbiA9PSBTQ1RQX0NDX09QVF9SVENDX1NFVE1P
REUpIHsKLQkJCWlmICgoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMCkgJiYKLQkJ
CSAgICAoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMSkpIHsKLQkJCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JCQl9Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywg
c2N0cF9uZXh0KSB7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IGNjX29wdC0+
YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOwotCQkJfQotCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9u
ID09IFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDTikgewotCQkJaWYgKChjY19vcHQtPmFpZF92YWx1
ZS5hc3NvY192YWx1ZSAhPSAwKSAmJgotCQkJICAgIChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY192
YWx1ZSAhPSAxKSkgewotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCX0KLQkJCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQluZXQtPmNjX21vZC5y
dGNjLnVzZV9kY2NjX2VjbiA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOwotCQkJfQot
CQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQKSB7
Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0J
CQkJbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29j
X3ZhbHVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfSBl
bHNlIHsKLQkJLyogYSBnZXQgKi8KLQkJaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BU
X1JUQ0NfU0VUTU9ERSkgewotCQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7
Ci0JCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKEVGQVVMVCk7Ci0JCQl9Ci0JCQlj
Y19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSA9IG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21f
ZXE7Ci0JCX0gZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfVVNFX0RDQ0Nf
RUNOKSB7Ci0JCQluZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKLQkJCWlmIChu
ZXQgPT0gTlVMTCkgewotCQkJCXJldHVybiAoRUZBVUxUKTsKLQkJCX0KLQkJCWNjX29wdC0+YWlk
X3ZhbHVlLmFzc29jX3ZhbHVlID0gbmV0LT5jY19tb2QucnRjYy51c2VfZGNjY19lY247Ci0JCX0g
ZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfU1RFQURZX1NURVApIHsKLQkJ
CW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwotCQkJaWYgKG5ldCA9PSBOVUxM
KSB7Ci0JCQkJcmV0dXJuIChFRkFVTFQpOwotCQkJfQotCQkJY2Nfb3B0LT5haWRfdmFsdWUuYXNz
b2NfdmFsdWUgPSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwOwotCQl9IGVsc2UgewotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2N3bmRfdXBkYXRlX3J0Y2NfcGFja2V0X3RyYW5zbWl0dGVkKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiBTQ1RQX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWlmIChuZXQtPmNjX21vZC5ydGNjLnRs
c19uZWVkc19zZXQgPT0gMCkgewotCQlTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5ldC0+Y2NfbW9k
LnJ0Y2MudGxzKTsKLQkJbmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNfc2V0ID0gMjsKLQl9Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfc2FjayhzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCi0JCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJ
CSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCwgaW50IHdpbGxfZXhpdCkKLXsKLQkv
KiBQYXNzaW5nIGEgb25lIGFyZ3VtZW50IGF0IHRoZSBsYXN0IGVuYWJsZXMgdGhlIHJ0Y2MgYWxn
b3JpdGhtICovCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1vbihzdGNiLCBhc29j
LCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdCwgMSk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zY3RwX3J0dF9ydGNjX2NhbGN1bGF0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBf
VU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93IFNDVFBfVU5VU0VE
KQotewotCW5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2sgPSAxOwotfQotCi0vKiBI
ZXJlIHN0YXJ0cyBTYWxseSBGbG95ZHMgSFMtVENQICovCi0KLXN0cnVjdCBzY3RwX2hzX3JhaXNl
X2Ryb3AgewotCWludDMyX3QgY3duZDsKLQlpbnQ4X3QgaW5jcmVhc2U7Ci0JaW50OF90IGRyb3Bf
cGVyY2VudDsKLX07Ci0KLSNkZWZpbmUgU0NUUF9IU19UQUJMRV9TSVpFIDczCi0KLXN0YXRpYyBj
b25zdCBzdHJ1Y3Qgc2N0cF9oc19yYWlzZV9kcm9wIHNjdHBfY3duZF9hZGp1c3RbU0NUUF9IU19U
QUJMRV9TSVpFXSA9IHsKLQl7MzgsIDEsIDUwfSwJCS8qIDAgICAqLwotCXsxMTgsIDIsIDQ0fSwJ
CS8qIDEgICAqLwotCXsyMjEsIDMsIDQxfSwJCS8qIDIgICAqLwotCXszNDcsIDQsIDM4fSwJCS8q
IDMgICAqLwotCXs0OTUsIDUsIDM3fSwJCS8qIDQgICAqLwotCXs2NjMsIDYsIDM1fSwJCS8qIDUg
ICAqLwotCXs4NTEsIDcsIDM0fSwJCS8qIDYgICAqLwotCXsxMDU4LCA4LCAzM30sCQkvKiA3ICAg
Ki8KLQl7MTI4NCwgOSwgMzJ9LAkJLyogOCAgICovCi0JezE1MjksIDEwLCAzMX0sCQkvKiA5ICAg
Ki8KLQl7MTc5MywgMTEsIDMwfSwJCS8qIDEwICAqLwotCXsyMDc2LCAxMiwgMjl9LAkJLyogMTEg
ICovCi0JezIzNzgsIDEzLCAyOH0sCQkvKiAxMiAgKi8KLQl7MjY5OSwgMTQsIDI4fSwJCS8qIDEz
ICAqLwotCXszMDM5LCAxNSwgMjd9LAkJLyogMTQgICovCi0JezMzOTksIDE2LCAyN30sCQkvKiAx
NSAgKi8KLQl7Mzc3OCwgMTcsIDI2fSwJCS8qIDE2ICAqLwotCXs0MTc3LCAxOCwgMjZ9LAkJLyog
MTcgICovCi0JezQ1OTYsIDE5LCAyNX0sCQkvKiAxOCAgKi8KLQl7NTAzNiwgMjAsIDI1fSwJCS8q
IDE5ICAqLwotCXs1NDk3LCAyMSwgMjR9LAkJLyogMjAgICovCi0JezU5NzksIDIyLCAyNH0sCQkv
KiAyMSAgKi8KLQl7NjQ4MywgMjMsIDIzfSwJCS8qIDIyICAqLwotCXs3MDA5LCAyNCwgMjN9LAkJ
LyogMjMgICovCi0Jezc1NTgsIDI1LCAyMn0sCQkvKiAyNCAgKi8KLQl7ODEzMCwgMjYsIDIyfSwJ
CS8qIDI1ICAqLwotCXs4NzI2LCAyNywgMjJ9LAkJLyogMjYgICovCi0JezkzNDYsIDI4LCAyMX0s
CQkvKiAyNyAgKi8KLQl7OTk5MSwgMjksIDIxfSwJCS8qIDI4ICAqLwotCXsxMDY2MSwgMzAsIDIx
fSwJLyogMjkgICovCi0JezExMzU4LCAzMSwgMjB9LAkvKiAzMCAgKi8KLQl7MTIwODIsIDMyLCAy
MH0sCS8qIDMxICAqLwotCXsxMjgzNCwgMzMsIDIwfSwJLyogMzIgICovCi0JezEzNjE0LCAzNCwg
MTl9LAkvKiAzMyAgKi8KLQl7MTQ0MjQsIDM1LCAxOX0sCS8qIDM0ICAqLwotCXsxNTI2NSwgMzYs
IDE5fSwJLyogMzUgICovCi0JezE2MTM3LCAzNywgMTl9LAkvKiAzNiAgKi8KLQl7MTcwNDIsIDM4
LCAxOH0sCS8qIDM3ICAqLwotCXsxNzk4MSwgMzksIDE4fSwJLyogMzggICovCi0JezE4OTU1LCA0
MCwgMTh9LAkvKiAzOSAgKi8KLQl7MTk5NjUsIDQxLCAxN30sCS8qIDQwICAqLwotCXsyMTAxMywg
NDIsIDE3fSwJLyogNDEgICovCi0JezIyMTAxLCA0MywgMTd9LAkvKiA0MiAgKi8KLQl7MjMyMzAs
IDQ0LCAxN30sCS8qIDQzICAqLwotCXsyNDQwMiwgNDUsIDE2fSwJLyogNDQgICovCi0JezI1NjE4
LCA0NiwgMTZ9LAkvKiA0NSAgKi8KLQl7MjY4ODEsIDQ3LCAxNn0sCS8qIDQ2ICAqLwotCXsyODE5
MywgNDgsIDE2fSwJLyogNDcgICovCi0JezI5NTU3LCA0OSwgMTV9LAkvKiA0OCAgKi8KLQl7MzA5
NzUsIDUwLCAxNX0sCS8qIDQ5ICAqLwotCXszMjQ1MCwgNTEsIDE1fSwJLyogNTAgICovCi0JezMz
OTg2LCA1MiwgMTV9LAkvKiA1MSAgKi8KLQl7MzU1ODYsIDUzLCAxNH0sCS8qIDUyICAqLwotCXsz
NzI1MywgNTQsIDE0fSwJLyogNTMgICovCi0JezM4OTkyLCA1NSwgMTR9LAkvKiA1NCAgKi8KLQl7
NDA4MDgsIDU2LCAxNH0sCS8qIDU1ICAqLwotCXs0MjcwNywgNTcsIDEzfSwJLyogNTYgICovCi0J
ezQ0Njk0LCA1OCwgMTN9LAkvKiA1NyAgKi8KLQl7NDY3NzYsIDU5LCAxM30sCS8qIDU4ICAqLwot
CXs0ODk2MSwgNjAsIDEzfSwJLyogNTkgICovCi0JezUxMjU4LCA2MSwgMTN9LAkvKiA2MCAgKi8K
LQl7NTM2NzcsIDYyLCAxMn0sCS8qIDYxICAqLwotCXs1NjIzMCwgNjMsIDEyfSwJLyogNjIgICov
Ci0JezU4OTMyLCA2NCwgMTJ9LAkvKiA2MyAgKi8KLQl7NjE3OTksIDY1LCAxMn0sCS8qIDY0ICAq
LwotCXs2NDg1MSwgNjYsIDExfSwJLyogNjUgICovCi0JezY4MTEzLCA2NywgMTF9LAkvKiA2NiAg
Ki8KLQl7NzE2MTcsIDY4LCAxMX0sCS8qIDY3ICAqLwotCXs3NTQwMSwgNjksIDEwfSwJLyogNjgg
ICovCi0Jezc5NTE3LCA3MCwgMTB9LAkvKiA2OSAgKi8KLQl7ODQwMzUsIDcxLCAxMH0sCS8qIDcw
ICAqLwotCXs4OTA1MywgNzIsIDEwfSwJLyogNzEgICovCi0Jezk0NzE3LCA3MywgOX0JCS8qIDcy
ICAqLwotfTsKLQotc3RhdGljIHZvaWQKLXNjdHBfaHNfY3duZF9pbmNyZWFzZShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlpbnQgY3VyX3ZhbCwgaSwg
aW5keCwgaW5jcjsKLQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7Ci0KLQljdXJfdmFsID0gbmV0
LT5jd25kID4+IDEwOwotCWluZHggPSBTQ1RQX0hTX1RBQkxFX1NJWkUgLSAxOwotCi0JaWYgKGN1
cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsKLQkJLyogbm9ybWFsIG1vZGUgKi8K
LQkJaWYgKG5ldC0+bmV0X2FjayA+IG5ldC0+bXR1KSB7Ci0JCQluZXQtPmN3bmQgKz0gbmV0LT5t
dHU7Ci0JCX0gZWxzZSB7Ci0JCQluZXQtPmN3bmQgKz0gbmV0LT5uZXRfYWNrOwotCQl9Ci0JfSBl
bHNlIHsKLQkJZm9yIChpID0gbmV0LT5sYXN0X2hzX3VzZWQ7IGkgPCBTQ1RQX0hTX1RBQkxFX1NJ
WkU7IGkrKykgewotCQkJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0W2ldLmN3bmQpIHsK
LQkJCQlpbmR4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluZXQtPmxhc3RfaHNfdXNl
ZCA9IGluZHg7Ci0JCWluY3IgPSAoKChpbnQzMl90KXNjdHBfY3duZF9hZGp1c3RbaW5keF0uaW5j
cmVhc2UpIDw8IDEwKTsKLQkJbmV0LT5jd25kICs9IGluY3I7Ci0JfQotCXNjdHBfZW5mb3JjZV9j
d25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJc2N0cF9sb2df
Y3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJP
TV9TUyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oc19jd25kX2RlY3JlYXNlKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWludCBjdXJfdmFs
LCBpLCBpbmR4OwotCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCWN1cl92YWwgPSBuZXQt
PmN3bmQgPj4gMTA7Ci0JaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsK
LQkJLyogbm9ybWFsIG1vZGUgKi8KLQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7Ci0J
CWlmIChuZXQtPnNzdGhyZXNoIDwgKG5ldC0+bXR1ICogMikpIHsKLQkJCW5ldC0+c3N0aHJlc2gg
PSAyICogbmV0LT5tdHU7Ci0JCX0KLQkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKLQl9IGVs
c2UgewotCQkvKiBkcm9wIGJ5IHRoZSBwcm9wZXIgYW1vdW50ICovCi0JCW5ldC0+c3N0aHJlc2gg
PSBuZXQtPmN3bmQgLSAoaW50KSgobmV0LT5jd25kIC8gMTAwKSAqCi0JCSAgICAoaW50MzJfdClz
Y3RwX2N3bmRfYWRqdXN0W25ldC0+bGFzdF9oc191c2VkXS5kcm9wX3BlcmNlbnQpOwotCQluZXQt
PmN3bmQgPSBuZXQtPnNzdGhyZXNoOwotCQkvKiBub3cgd2hlcmUgYXJlIHdlICovCi0JCWluZHgg
PSBuZXQtPmxhc3RfaHNfdXNlZDsKLQkJY3VyX3ZhbCA9IG5ldC0+Y3duZCA+PiAxMDsKLQkJLyog
cmVzZXQgd2hlcmUgd2UgYXJlIGluIHRoZSB0YWJsZSAqLwotCQlpZiAoY3VyX3ZhbCA8IHNjdHBf
Y3duZF9hZGp1c3RbMF0uY3duZCkgewotCQkJLyogZmVlbCBvdXQgb2YgaHMgKi8KLQkJCW5ldC0+
bGFzdF9oc191c2VkID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IGluZHg7IGkgPj0gMTsg
aS0tKSB7Ci0JCQkJaWYgKGN1cl92YWwgPiBzY3RwX2N3bmRfYWRqdXN0W2kgLSAxXS5jd25kKSB7
Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCW5ldC0+bGFzdF9oc191c2VkID0gaW5keDsK
LQkJfQotCX0KLQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklU
T1JfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xk
X2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fRlIpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNj
dHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsK
LQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCS8qCi0JICogQ01UIGZhc3QgcmVjb3ZlcnkgY29k
ZS4gTmVlZCB0byBkZWJ1Zy4gKChzY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgotCSAqIChuZXQtPmZh
c3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPT0gMCkpKQotCSAqLwotCVRBSUxRX0ZPUkVBQ0gobmV0
LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0JCWlmICgoYXNvYy0+ZmFzdF9yZXRyYW5fbG9z
c19yZWNvdmVyeSA9PSAwKSB8fAotCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApKSB7
Ci0JCQkvKiBvdXQgb2YgYSBSRkMyNTgyIEZhc3QgcmVjb3Zlcnkgd2luZG93PyAqLwotCQkJaWYg
KG5ldC0+bmV0X2FjayA+IDApIHsKLQkJCQkvKgotCQkJCSAqIHBlciBzZWN0aW9uIDcuMi4zLCBh
cmUgdGhlcmUgYW55Ci0JCQkJICogZGVzdGluYXRpb25zIHRoYXQgaGFkIGEgZmFzdCByZXRyYW5z
bWl0Ci0JCQkJICogdG8gdGhlbS4gSWYgc28gd2hhdCB3ZSBuZWVkIHRvIGRvIGlzCi0JCQkJICog
YWRqdXN0IHNzdGhyZXNoIGFuZCBjd25kLgotCQkJCSAqLwotCQkJCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmxjaGs7Ci0KLQkJCQlzY3RwX2hzX2N3bmRfZGVjcmVhc2Uoc3RjYiwgbmV0KTsKLQot
CQkJCWxjaGsgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VuZF9xdWV1ZSk7Ci0KLQkJCQluZXQtPnBh
cnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwotCQkJCS8qIFR1cm4gb24gZmFzdCByZWNvdmVyeSB3aW5k
b3cgKi8KLQkJCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKLQkJCQlpZiAo
bGNoayA9PSBOVUxMKSB7Ci0JCQkJCS8qIE1hcmsgZW5kIG9mIHRoZSB3aW5kb3cgKi8KLQkJCQkJ
YXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24g
LSAxOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogQ01UIGZhc3QgcmVjb3ZlcnkgLS0gcGVyIGRl
c3RpbmF0aW9uCi0JCQkJICogcmVjb3ZlcnkgdmFyaWFibGUuCi0JCQkJICovCi0JCQkJbmV0LT5m
YXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKLQotCQkJCWlmIChsY2hrID09IE5VTEwpIHsK
LQkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLwotCQkJCQluZXQtPmZhc3RfcmVjb3Zl
cnlfdHNuID0gYXNvYy0+c2VuZGluZ19zZXEgLSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldC0+
ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAxOwotCQkJCX0KLQotCQkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKLQkJCQkJCXN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG5ldCwKLQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfQ0NfRlVO
Q1RJT05TICsgU0NUUF9MT0NfMik7Ci0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfU0VORCwKLQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOwotCQkJfQotCQl9IGVs
c2UgaWYgKG5ldC0+bmV0X2FjayA+IDApIHsKLQkJCS8qCi0JCQkgKiBNYXJrIGEgcGVnIHRoYXQg
d2UgV09VTEQgaGF2ZSBkb25lIGEgY3duZAotCQkJICogcmVkdWN0aW9uIGJ1dCBSRkMyNTgyIHBy
ZXZlbnRlZCB0aGlzIGFjdGlvbi4KLQkJCSAqLwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZmFz
dHJldHJhbnNpbnJ0dCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hzX2N3bmRf
dXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCi0JCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCBT
Q1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0J
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiB1cGRhdGUgY3duZCBhbmQgRWFy
bHkgRlIgICAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JVEFJTFFfRk9S
RUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQotI2lmZGVmIEpBTkFfQ01UX0ZB
U1RfUkVDT1ZFUlkKLQkJLyoKLQkJICogQ01UIGZhc3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0byBk
ZWJ1Zy4KLQkJICovCi0JCWlmIChuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0
LT5uZXdfcHNldWRvX2N1bWFjaykgewotCQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNr
ZWRfc2VxLCBuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSB8fAotCQkJICAgIFNDVFBfVFNOX0dFKG5l
dC0+cHNldWRvX2N1bWFjayxuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSkgewotCQkJCW5ldC0+d2ls
bF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAxOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJLyogaWYgbm90
aGluZyB3YXMgYWNrZWQgb24gdGhpcyBkZXN0aW5hdGlvbiBza2lwIGl0ICovCi0JCWlmIChuZXQt
Pm5ldF9hY2sgPT0gMCkgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3Rj
YiwgbmV0LCAwLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7Ci0JCQl9Ci0JCQljb250aW51ZTsK
LQkJfQotI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKLSAgICAgICAgICAgICAgICAvKiBD
TVQgZmFzdCByZWNvdmVyeSBjb2RlCi0JCSAqLwotCQkvKgotCQlpZiAoc2N0cF9jbXRfb25fb2Zm
ID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT53aWxsX2V4aXRf
ZmFzdF9yZWNvdmVyeSA9PSAwKSB7Ci0JCSAgICBAQEAgRG8gc29tZXRoaW5nCi0JCSB9Ci0JCSBl
bHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0X3JldHJhbl9sb3NzX3Jl
Y292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7Ci0JCSovCi0jZW5kaWYKLQotCQkgaWYgKGFzb2Mt
PmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKLQkJICAgICAod2lsbF9leGl0ID09IDApICYm
Ci0JCSAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgewotCQkJLyoKLQkJCSAqIElm
IHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKLQkJCSAqIHVwZGF0ZQot
CQkJICovCi0JCQlyZXR1cm47Ci0JCX0KLQkJLyoKLQkJICogQ01UOiBDVUMgYWxnb3JpdGhtLiBV
cGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcwotCQkgKiBtb3ZlZC4KLQkJICovCi0JCWlm
IChhY2N1bV9tb3ZlZCB8fAotCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJiBu
ZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgewotCQkJLyogSWYgdGhlIGN1bXVsYXRpdmUgYWNrIG1v
dmVkIHdlIGNhbiBwcm9jZWVkICovCi0JCQlpZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gp
IHsKLQkJCQkvKiBXZSBhcmUgaW4gc2xvdyBzdGFydCAqLwotCQkJCWlmIChuZXQtPmZsaWdodF9z
aXplICsgbmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgewotCQkJCQlzY3RwX2hzX2N3bmRfaW5j
cmVhc2Uoc3RjYiwgbmV0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJ
CQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQkJCVNDVFBfQ1dO
RF9MT0dfTk9BRFZfU1MpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBXZSBh
cmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8KLQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNr
ZWQgKz0gbmV0LT5uZXRfYWNrOwotCQkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSArIG5ldC0+bmV0
X2FjayA+PSBuZXQtPmN3bmQpICYmCi0JCQkJICAgIChuZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQg
Pj0gbmV0LT5jd25kKSkgewotCQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgLT0gbmV0LT5j
d25kOwotCQkJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQkJCXNjdHBfZW5mb3JjZV9jd25k
X2xpbWl0KGFzb2MsIG5ldCk7Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJCQkJCXNjdHBfbG9nX2N3
bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJCQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fQ0EpOwot
CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2df
Y3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKLQkJCQkJCQlTQ1RQX0NXTkRfTE9HX05PQURW
X0NBKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCi0JCQkJCVNDVFBfQ1dORF9M
T0dfTk9fQ1VNQUNLKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotCi0vKgotICogSC1UQ1AgY29uZ2Vz
dGlvbiBjb250cm9sLiBUaGUgYWxnb3JpdGhtIGlzIGRldGFpbGVkIGluOgotICogUi5OLlNob3J0
ZW4sIEQuSi5MZWl0aDoKLSAqICAgIkgtVENQOiBUQ1AgZm9yIGhpZ2gtc3BlZWQgYW5kIGxvbmct
ZGlzdGFuY2UgbmV0d29ya3MiCi0gKiAgIFByb2MuIFBGTERuZXQsIEFyZ29ubmUsIDIwMDQuCi0g
KiBodHRwOi8vd3d3LmhhbWlsdG9uLmllL25ldC9odGNwMy5wZGYKLSAqLwotCi0KLXN0YXRpYyBp
bnQgdXNlX3J0dF9zY2FsaW5nID0gMTsKLXN0YXRpYyBpbnQgdXNlX2JhbmR3aWR0aF9zd2l0Y2gg
PSAxOwotCi1zdGF0aWMgaW5saW5lIGludAotYmV0d2Vlbih1aW50MzJfdCBzZXExLCB1aW50MzJf
dCBzZXEyLCB1aW50MzJfdCBzZXEzKQotewotCXJldHVybiAoc2VxMyAtIHNlcTIgPj0gc2VxMSAt
IHNlcTIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1odGNwX2NvbmdfdGltZShzdHJ1
Y3QgaHRjcCAqY2EpCi17Ci0JcmV0dXJuIChzY3RwX2dldF90aWNrX2NvdW50KCkgLSBjYS0+bGFz
dF9jb25nKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdAotaHRjcF9jY291bnQoc3RydWN0
IGh0Y3AgKmNhKQotewotCXJldHVybiAoaHRjcF9jb25nX3RpbWUoY2EpL2NhLT5taW5SVFQpOwot
fQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWh0Y3BfcmVzZXQoc3RydWN0IGh0Y3AgKmNhKQotewot
CWNhLT51bmRvX2xhc3RfY29uZyA9IGNhLT5sYXN0X2Nvbmc7Ci0JY2EtPnVuZG9fbWF4UlRUID0g
Y2EtPm1heFJUVDsKLQljYS0+dW5kb19vbGRfbWF4QiA9IGNhLT5vbGRfbWF4QjsKLQljYS0+bGFz
dF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotfQotCi0jaWZkZWYgU0NUUF9OT1RfVVNF
RAotCi1zdGF0aWMgdWludDMyX3QKLWh0Y3BfY3duZF91bmRvKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdF9j
b25nID0gbmV0LT5jY19tb2QuaHRjcF9jYS51bmRvX2xhc3RfY29uZzsKLQluZXQtPmNjX21vZC5o
dGNwX2NhLm1heFJUVCA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19tYXhSVFQ7Ci0JbmV0LT5j
Y19tb2QuaHRjcF9jYS5vbGRfbWF4QiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19vbGRfbWF4
QjsKLQlyZXR1cm4gKG1heChuZXQtPmN3bmQsICgobmV0LT5zc3RocmVzaC9uZXQtPm10dTw8Nykv
bmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhKSpuZXQtPm10dSkpOwotfQotCi0jZW5kaWYKLQotc3Rh
dGljIGlubGluZSB2b2lkCi1tZWFzdXJlX3J0dChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0J
dWludDMyX3Qgc3J0dCA9IG5ldC0+bGFzdHNhPj5TQ1RQX1JUVF9TSElGVDsKLQotCS8qIGtlZXAg
dHJhY2sgb2YgbWluaW11bSBSVFQgc2VlbiBzbyBmYXIsIG1pblJUVCBpcyB6ZXJvIGF0IGZpcnN0
ICovCi0JaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID4gc3J0dCB8fCAhbmV0LT5jY19t
b2QuaHRjcF9jYS5taW5SVFQpCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID0gc3J0dDsK
LQotCS8qIG1heCBSVFQgKi8KLQlpZiAobmV0LT5mYXN0X3JldHJhbl9pcCA9PSAwICYmIG5ldC0+
c3N0aHJlc2ggPCAweEZGRkYgJiYgaHRjcF9jY291bnQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EpID4g
MykgewotCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPCBuZXQtPmNjX21vZC5odGNw
X2NhLm1pblJUVCkKLQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gbmV0LT5jY19tb2Qu
aHRjcF9jYS5taW5SVFQ7Ci0JCWlmIChuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA8IHNydHQg
JiYgc3J0dCA8PSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCtNU0VDX1RPX1RJQ0tTKDIwKSkK
LQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gc3J0dDsKLQl9Ci19Ci0KLXN0YXRpYyB2
b2lkCi1tZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCXVpbnQzMl90IG5vdyA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsKLQotCWlmIChuZXQtPmZh
c3RfcmV0cmFuX2lwID09IDApCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQgPSBu
ZXQtPm5ldF9hY2s7Ci0KLQlpZiAoIXVzZV9iYW5kd2lkdGhfc3dpdGNoKQotCQlyZXR1cm47Ci0K
LQkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwotCS8qIEpSUyAtIG5vdCAx
MDAlIHN1cmUgb2YgdGhpcyBzdGF0ZW1lbnQgKi8KLQlpZiAobmV0LT5mYXN0X3JldHJhbl9pcCA9
PSAxKSB7Ci0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ID0gMDsKLQkJbmV0LT5jY19t
b2QuaHRjcF9jYS5sYXN0dGltZSA9IG5vdzsKLQkJcmV0dXJuOwotCX0KLQotCW5ldC0+Y2NfbW9k
Lmh0Y3BfY2EuYnl0ZWNvdW50ICs9IG5ldC0+bmV0X2FjazsKLQlpZiAoKG5ldC0+Y2NfbW9kLmh0
Y3BfY2EuYnl0ZWNvdW50ID49IG5ldC0+Y3duZCAtICgoKG5ldC0+Y2NfbW9kLmh0Y3BfY2EuYWxw
aGEgPj4gNykgPyAobmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA+PiA3KSA6IDEpICogbmV0LT5t
dHUpKSAmJgotCSAgICAobm93IC0gbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0dGltZSA+PSBuZXQt
PmNjX21vZC5odGNwX2NhLm1pblJUVCkgJiYKLQkgICAgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWlu
UlRUID4gMCkpIHsKLQkJdWludDMyX3QgY3VyX0JpID0gbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRl
Y291bnQvbmV0LT5tdHUqaHovKG5vdyAtIG5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdHRpbWUpOwot
Ci0JCWlmIChodGNwX2Njb3VudCgmbmV0LT5jY19tb2QuaHRjcF9jYSkgPD0gMykgewotCQkJLyog
anVzdCBhZnRlciBiYWNrb2ZmICovCi0JCQluZXQtPmNjX21vZC5odGNwX2NhLm1pbkIgPSBuZXQt
PmNjX21vZC5odGNwX2NhLm1heEIgPSBuZXQtPmNjX21vZC5odGNwX2NhLkJpID0gY3VyX0JpOwot
CQl9IGVsc2UgewotCQkJbmV0LT5jY19tb2QuaHRjcF9jYS5CaSA9ICgzKm5ldC0+Y2NfbW9kLmh0
Y3BfY2EuQmkgKyBjdXJfQmkpLzQ7Ci0JCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5CaSA+IG5l
dC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKLQkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1heEIgPSBu
ZXQtPmNjX21vZC5odGNwX2NhLkJpOwotCQkJaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluQiA+
IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKLQkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1pbkIg
PSBuZXQtPmNjX21vZC5odGNwX2NhLm1heEI7Ci0JCX0KLQkJbmV0LT5jY19tb2QuaHRjcF9jYS5i
eXRlY291bnQgPSAwOwotCQluZXQtPmNjX21vZC5odGNwX2NhLmxhc3R0aW1lID0gbm93OwotCX0K
LX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1odGNwX2JldGFfdXBkYXRlKHN0cnVjdCBodGNwICpj
YSwgdWludDMyX3QgbWluUlRULCB1aW50MzJfdCBtYXhSVFQpCi17Ci0JaWYgKHVzZV9iYW5kd2lk
dGhfc3dpdGNoKSB7Ci0JCXVpbnQzMl90IG1heEIgPSBjYS0+bWF4QjsKLQkJdWludDMyX3Qgb2xk
X21heEIgPSBjYS0+b2xkX21heEI7Ci0JCWNhLT5vbGRfbWF4QiA9IGNhLT5tYXhCOwotCi0JCWlm
ICghYmV0d2Vlbig1Km1heEIsIDQqb2xkX21heEIsIDYqb2xkX21heEIpKSB7Ci0JCQljYS0+YmV0
YSA9IEJFVEFfTUlOOwotCQkJY2EtPm1vZGVzd2l0Y2ggPSAwOwotCQkJcmV0dXJuOwotCQl9Ci0J
fQotCi0JaWYgKGNhLT5tb2Rlc3dpdGNoICYmIG1pblJUVCA+ICh1aW50MzJfdClNU0VDX1RPX1RJ
Q0tTKDEwKSAmJiBtYXhSVFQpIHsKLQkJY2EtPmJldGEgPSAobWluUlRUPDw3KS9tYXhSVFQ7Ci0J
CWlmIChjYS0+YmV0YSA8IEJFVEFfTUlOKQotCQkJY2EtPmJldGEgPSBCRVRBX01JTjsKLQkJZWxz
ZSBpZiAoY2EtPmJldGEgPiBCRVRBX01BWCkKLQkJCWNhLT5iZXRhID0gQkVUQV9NQVg7Ci0JfSBl
bHNlIHsKLQkJY2EtPmJldGEgPSBCRVRBX01JTjsKLQkJY2EtPm1vZGVzd2l0Y2ggPSAxOwotCX0K
LX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1odGNwX2FscGhhX3VwZGF0ZShzdHJ1Y3QgaHRjcCAq
Y2EpCi17Ci0JdWludDMyX3QgbWluUlRUID0gY2EtPm1pblJUVDsKLQl1aW50MzJfdCBmYWN0b3Ig
PSAxOwotCXVpbnQzMl90IGRpZmYgPSBodGNwX2NvbmdfdGltZShjYSk7Ci0KLQlpZiAoZGlmZiA+
ICh1aW50MzJfdCloeikgewotCQlkaWZmIC09IGh6OwotCQlmYWN0b3IgPSAxKyAoIDEwKmRpZmYg
KyAoKGRpZmYvMikqKGRpZmYvMikvaHopKS9oejsKLQl9Ci0KLQlpZiAodXNlX3J0dF9zY2FsaW5n
ICYmIG1pblJUVCkgewotCQl1aW50MzJfdCBzY2FsZSA9IChoejw8MykvKDEwKm1pblJUVCk7Ci0J
CXNjYWxlID0gbWluKG1heChzY2FsZSwgMVU8PDIpLCAxMFU8PDMpOyAvKiBjbGFtcGluZyByYXRp
byB0byBpbnRlcnZhbCBbMC41LDEwXTw8MyAqLwotCQlmYWN0b3IgPSAoZmFjdG9yPDwzKS9zY2Fs
ZTsKLQkJaWYgKCFmYWN0b3IpCi0JCQlmYWN0b3IgPSAxOwotCX0KLQotCWNhLT5hbHBoYSA9IDIq
ZmFjdG9yKigoMTw8NyktY2EtPmJldGEpOwotCWlmICghY2EtPmFscGhhKQotCQljYS0+YWxwaGEg
PSBBTFBIQV9CQVNFOwotfQotCi0vKiBBZnRlciB3ZSBoYXZlIHRoZSBydHQgZGF0YSB0byBjYWxj
dWxhdGUgYmV0YSwgd2UnZCBzdGlsbCBwcmVmZXIgdG8gd2FpdCBvbmUKLSAqIHJ0dCBiZWZvcmUg
d2UgYWRqdXN0IG91ciBiZXRhIHRvIGVuc3VyZSB3ZSBhcmUgd29ya2luZyBmcm9tIGEgY29uc2lz
dGVudAotICogZGF0YS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hl
biB3ZSBoaXQgYSBjb25nZXN0aW9uIGV2ZW50IHNpbmNlIG9ubHkgYXQKLSAqIHRoYXQgcG9pbnQg
ZG8gd2UgcmVhbGx5IGhhdmUgYSByZWFsIHNlbnNlIG9mIG1heFJUVCAodGhlIHF1ZXVlcyBlbiBy
b3V0ZQotICogd2VyZSBnZXR0aW5nIGp1c3QgdG9vIGZ1bGwgbm93KS4KLSAqLwotc3RhdGljIHZv
aWQKLWh0Y3BfcGFyYW1fdXBkYXRlKHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQl1aW50MzJf
dCBtaW5SVFQgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVDsKLQl1aW50MzJfdCBtYXhSVFQg
PSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVDsKLQotCWh0Y3BfYmV0YV91cGRhdGUoJm5ldC0+
Y2NfbW9kLmh0Y3BfY2EsIG1pblJUVCwgbWF4UlRUKTsKLQlodGNwX2FscGhhX3VwZGF0ZSgmbmV0
LT5jY19tb2QuaHRjcF9jYSk7Ci0KLQkvKiBhZGQgc2xvd2x5IGZhZGluZyBtZW1vcnkgZm9yIG1h
eFJUVCB0byBhY2NvbW1vZGF0ZSByb3V0aW5nIGNoYW5nZXMgZXRjICovCi0JaWYgKG1pblJUVCA+
IDAgJiYgbWF4UlRUID4gbWluUlRUKQotCQluZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA9IG1p
blJUVCArICgobWF4UlRULW1pblJUVCkqOTUpLzEwMDsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1o
dGNwX3JlY2FsY19zc3RocmVzaChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JaHRjcF9wYXJh
bV91cGRhdGUobmV0KTsKLQlyZXR1cm4gKG1heCgoKG5ldC0+Y3duZC9uZXQtPm10dSAqIG5ldC0+
Y2NfbW9kLmh0Y3BfY2EuYmV0YSkgPj4gNykqbmV0LT5tdHUsIDJVKm5ldC0+bXR1KSk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1odGNwX2NvbmdfYXZvaWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JLyotCi0JICogSG93IHRvIGhhbmRsZSB0aGVzZSBmdW5j
dGlvbnM/Ci0gICAgICAgICAqCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0
KSkgUlJTIC0gZ29vZCBxdWVzdGlvbi4KLQkgKgkJcmV0dXJuOwotCSAqLwotICAgICAgICBpZiAo
bmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKLQkJLyogV2UgYXJlIGluIHNsb3cgc3RhcnQg
Ki8KLQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0LT5jd25kKSB7
Ci0JCQlpZiAobmV0LT5uZXRfYWNrID4gKG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X0wyX2FiY192YXJpYWJsZSkpKSB7Ci0JCQkJbmV0LT5jd25kICs9IChuZXQtPm10dSAqIFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpKTsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0J
CQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJCQkJCVNDVFBfQ1dORF9M
T0dfRlJPTV9TUyk7Ci0JCQkJfQotCi0JCQl9IGVsc2UgewotCQkJCW5ldC0+Y3duZCArPSBuZXQt
Pm5ldF9hY2s7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5l
dCwgbmV0LT5uZXRfYWNrLAotCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKLQkJCQl9Ci0K
LQkJCX0KLQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotCQl9
IGVsc2UgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBu
ZXQtPm5ldF9hY2ssCi0JCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOwotCQkJfQotCQl9Ci0J
fSBlbHNlIHsKLQkJbWVhc3VyZV9ydHQobmV0KTsKLQotCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwg
aW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyBuZXQtPmN3bmQgKz0gYWxw
aGEgLyBuZXQtPmN3bmQKLQkJICovCi0JCS8qIFdoYXQgaXMgc25kX2N3bmRfY250Pz8gKi8KLQkJ
aWYgKCgobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkL25ldC0+bXR1ICogbmV0LT5jY19tb2QuaHRj
cF9jYS5hbHBoYSkgPj4gNykqbmV0LT5tdHUgPj0gbmV0LT5jd25kKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvKi0KLQkJCSAqIERvZXMgU0NUUCBoYXZlIGEgY3duZCBjbGFtcD8KLQkJCSAq
IGlmIChuZXQtPnNuZF9jd25kIDwgbmV0LT5zbmRfY3duZF9jbGFtcCkgLSBOb3BlIChSUlMpLgot
CQkJICovCi0JCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQluZXQtPnBhcnRpYWxfYnl0ZXNf
YWNrZWQgPSAwOwotCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5ldCk7
Ci0JCQlodGNwX2FscGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9jYSk7Ci0JCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5B
QkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1LAotCQkJCQlTQ1RQ
X0NXTkRfTE9HX0ZST01fQ0EpOwotCQkJfQotCQl9IGVsc2UgewotCQkJbmV0LT5wYXJ0aWFsX2J5
dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQlTQ1RQX0NXTkRfTE9HX05PQURW
X0NBKTsKLQkJCX0KLQkJfQotCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQgPSBu
ZXQtPm10dTsKLQl9Ci19Ci0KLSNpZmRlZiBTQ1RQX05PVF9VU0VECi0vKiBMb3dlciBib3VuZCBv
biBjb25nZXN0aW9uIHdpbmRvdy4gKi8KLXN0YXRpYyB1aW50MzJfdAotaHRjcF9taW5fY3duZChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlyZXR1cm4g
KG5ldC0+c3N0aHJlc2gpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lkCi1odGNwX2luaXQoc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0KQotewotCW1lbXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSwgMCwg
c2l6ZW9mKHN0cnVjdCBodGNwKSk7Ci0JbmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA9IEFMUEhB
X0JBU0U7Ci0JbmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhID0gQkVUQV9NSU47Ci0JbmV0LT5jY19t
b2QuaHRjcF9jYS5ieXRlc19hY2tlZCA9IG5ldC0+bXR1OwotCW5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
bGFzdF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KQotewotCS8qCi0JICogV2UgdGFrZSB0aGUgbWF4IG9mIHRoZSBidXJz
dCBsaW1pdCB0aW1lcyBhIE1UVSBvciB0aGUKLQkgKiBJTklUSUFMX0NXTkQuIFdlIHRoZW4gbGlt
aXQgdGhpcyB0byA0IE1UVSdzIG9mIHNlbmRpbmcuCi0JICovCi0JbmV0LT5jd25kID0gbWluKChu
ZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7Ci0J
bmV0LT5zc3RocmVzaCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLQlzY3RwX2VuZm9yY2VfY3du
ZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQlodGNwX2luaXQobmV0KTsKLQotCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiAoU0NUUF9DV05EX01PTklUT1JfRU5B
QkxFfFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkpIHsKLQkJc2N0cF9sb2dfY3duZChzdGNiLCBu
ZXQsIDAsIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot
c2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSBpbnQgYWNjdW1fbW92ZWQsIGlu
dCByZW5lZ2VkX2FsbCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKLXsKLQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQ7Ci0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIHVw
ZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAgICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCi0j
aWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQotCQkvKgotCQkgKiBDTVQgZmFzdCByZWNvdmVy
eSBjb2RlLiBOZWVkIHRvIGRlYnVnLgotCQkgKi8KLQkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5fbG9z
c19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7Ci0JCQlpZiAoU0NUUF9UU05f
R0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8Ci0JCQkg
ICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90c24p
KSB7Ci0JCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7Ci0JCQl9Ci0JCX0KLSNl
bmRpZgotCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNraXAg
aXQgKi8KLQkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJ
c2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKLQkJ
CX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0jaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQotICAg
ICAgICAgICAgICAgIC8qIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUKLQkJICovCi0JCS8qCi0JCWlm
IChzY3RwX2NtdF9vbl9vZmYgPiAwICYmIG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAm
JiBuZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID09IDApIHsKLQkJICAgIEBAQCBEbyBzb21l
dGhpbmcKLQkJIH0KLQkJIGVsc2UgaWYgKHNjdHBfY210X29uX29mZiA9PSAwICYmIGFzb2MtPmZh
c3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgd2lsbF9leGl0ID09IDApIHsKLQkJKi8KLSNlbmRp
ZgotCi0JCWlmIChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmCi0JCSAgICB3aWxs
X2V4aXQgPT0gMCAmJgotCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgewotCQkJ
LyoKLQkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKLQkJ
CSAqIHVwZGF0ZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCX0KLQkJLyoKLQkJICogQ01UOiBDVUMg
YWxnb3JpdGhtLiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcwotCQkgKiBtb3ZlZC4K
LQkJICovCi0JCWlmIChhY2N1bV9tb3ZlZCB8fAotCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9v
ZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgewotCQkJaHRjcF9jb25nX2F2b2lk
KHN0Y2IsIG5ldCk7Ci0JCQltZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQobmV0KTsKLQkJfSBl
bHNlIHsKLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0
LT5tdHUsCi0JCQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKLQkJCX0KLQkJfQotCX0KLX0K
LQotc3RhdGljIHZvaWQKLXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9mcihzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCi0JCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0cnVj
dCBzY3RwX25ldHMgKm5ldDsKLQkvKgotCSAqIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUuIE5lZWQg
dG8gZGVidWcuICgoc2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgKiAobmV0LT5mYXN0X3JldHJh
bl9sb3NzX3JlY292ZXJ5ID09IDApKSkKLQkgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2Mt
Pm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkgPT0gMCkgfHwKLQkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSkgewotCQkJLyog
b3V0IG9mIGEgUkZDMjU4MiBGYXN0IHJlY292ZXJ5IHdpbmRvdz8gKi8KLQkJCWlmIChuZXQtPm5l
dF9hY2sgPiAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBwZXIgc2VjdGlvbiA3LjIuMywgYXJlIHRoZXJl
IGFueQotCQkJCSAqIGRlc3RpbmF0aW9ucyB0aGF0IGhhZCBhIGZhc3QgcmV0cmFuc21pdAotCQkJ
CSAqIHRvIHRoZW0uIElmIHNvIHdoYXQgd2UgbmVlZCB0byBkbyBpcwotCQkJCSAqIGFkanVzdCBz
c3RocmVzaCBhbmQgY3duZC4KLQkJCQkgKi8KLQkJCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICps
Y2hrOwotCQkJCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCQkJCS8qIEpSUyAtIHJlc2V0
IGFzIGlmIHN0YXRlIHdlcmUgY2hhbmdlZCAqLwotCQkJCWh0Y3BfcmVzZXQoJm5ldC0+Y2NfbW9k
Lmh0Y3BfY2EpOwotCQkJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQp
OwotCQkJCW5ldC0+Y3duZCA9IG5ldC0+c3N0aHJlc2g7Ci0JCQkJc2N0cF9lbmZvcmNlX2N3bmRf
bGltaXQoYXNvYywgbmV0KTsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbG9nX2N3bmQo
c3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAotCQkJCQkJU0NUUF9DV05EX0xPR19G
Uk9NX0ZSKTsKLQkJCQl9Ci0JCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVl
KTsKLQotCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCQkJLyogVHVybiBvbiBm
YXN0IHJlY292ZXJ5IHdpbmRvdyAqLwotCQkJCWFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkgPSAxOwotCQkJCWlmIChsY2hrID09IE5VTEwpIHsKLQkJCQkJLyogTWFyayBlbmQgb2YgdGhl
IHdpbmRvdyAqLwotCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRpbmdf
c2VxIC0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxj
aGstPnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJLyoKLQkJCQkgKiBDTVQgZmFzdCBy
ZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KLQkJCQkgKiByZWNvdmVyeSB2YXJpYWJsZS4KLQkJ
CQkgKi8KLQkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOwotCi0JCQkJaWYg
KGxjaGsgPT0gTlVMTCkgewotCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUgd2luZG93ICovCi0JCQkJ
CW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAt
IDE7Ci0JCQkJfQotCi0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELAot
CQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCSAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18zKTsKLQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5l
dCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkgewotCQkJLyoKLQkJCSAq
IE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25kCi0JCQkgKiByZWR1Y3Rp
b24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgotCQkJICovCi0JCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZv
aWQKLXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JCWludCBvbGRfY3duZCA9IG5ldC0+
Y3duZDsKLQotCQkvKiBKUlMgLSByZXNldCBhcyBpZiB0aGUgc3RhdGUgd2VyZSBiZWluZyBjaGFu
Z2VkIHRvIHRpbWVvdXQgKi8KLQkJaHRjcF9yZXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSk7Ci0J
CW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQpOwotCQluZXQtPmN3bmQg
PSBuZXQtPm10dTsKLQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKLQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJM
RSkgewotCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+Y3duZCAtIG9sZF9jd25kLCBT
Q1RQX0NXTkRfTE9HX0ZST01fUlRYKTsKLQkJfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9odGNw
X2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0IFNDVFBf
VU5VU0VEKQotewotCWludCBvbGRfY3duZDsKLQlvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCS8q
IEpSUyAtIHJlc2V0IGhjdHAgYXMgaWYgc3RhdGUgY2hhbmdlZCAqLwotCWlmIChpbl93aW5kb3cg
PT0gMCkgewotCQlodGNwX3Jlc2V0KCZuZXQtPmNjX21vZC5odGNwX2NhKTsKLQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKLQkJbmV0LT5zc3RocmVzaCA9IGh0Y3BfcmVj
YWxjX3NzdGhyZXNoKG5ldCk7Ci0JCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5tdHUpIHsKLQkJ
CW5ldC0+c3N0aHJlc2ggPSBuZXQtPm10dTsKLQkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRpbWVy
IGFzIHdlbGwsIHRvIHNsb3cgdXMgZG93biAqLwotCQkJbmV0LT5SVE8gPDw9IDE7Ci0JCX0KLQkJ
bmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKLQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0
Y2ItPmFzb2MsIG5ldCk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwg
bmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKLQkJ
fQotCX0KLX0KLQotY29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2NfZnVuY3Rp
b25zW10gPSB7Ci17Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotCXNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0sCi0Jc2N0cF9jd25k
X3VwZGF0ZV9hZnRlcl9zYWNrLAotCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCi0J
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKLQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVv
dXQsCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKLQlzY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX3BhY2tldF9kcm9wcGVkLAotCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAot
I2Vsc2UKLQkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfc2V0X2luaXRpYWxfY2Nf
cGFyYW0sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayA9IHNjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfc2FjaywKLQkuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmID0gc2N0cF9jd25kX3VwZGF0
ZV9leGl0X3BmX2NvbW1vbiwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciA9IHNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfZnIsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9l
Y25fZWNobyA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8sCi0JLnNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tl
dF9kcm9wcGVkLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfb3V0cHV0LAotI2VuZGlmCi19LAotewotI2lmIGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlzY3RwX3NldF9pbml0aWFs
X2NjX3BhcmFtLAotCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKLQlzY3RwX2N3bmRf
dXBkYXRlX2V4aXRfcGZfY29tbW9uLAotCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIsCi0J
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAotCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
ZWNuX2VjaG8sCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKLQlzY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKLSNlbHNlCi0JLnNjdHBfc2V0X2luaXRpYWxfY2Nf
cGFyYW0gPSBzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAotCS5zY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX3NhY2sgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCi0JLnNjdHBfY3duZF91
cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCi0JLnNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAotCS5z
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3Rp
bWVvdXQsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX2Vjbl9lY2hvLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9w
cGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKLQkuc2N0cF9jd25k
X3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKLSNl
bmRpZgotfSwKLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtLAotCXNjdHBf
aHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrLAotCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9j
b21tb24sCi0Jc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAotCXNjdHBfaHRjcF9jd25k
X3VwZGF0ZV9hZnRlcl90aW1lb3V0LAotCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9lY25f
ZWNobywKLQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAotCXNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAotI2Vsc2UKLQkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJh
bSA9IHNjdHBfaHRjcF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKLQkuc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9zYWNrID0gc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCi0JLnNjdHBfY3du
ZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCi0JLnNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfZnIs
Ci0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNjdHBfaHRjcF9jd25kX3VwZGF0
ZV9hZnRlcl90aW1lb3V0LAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvID0gc2N0
cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAotCS5zY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX3BhY2tldF9kcm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBl
ZCwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX291dHB1dCwKLSNlbmRpZgotfSwKLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9zZXRfcnRjY19pbml0aWFsX2Nj
X3BhcmFtLAotCXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9zYWNrLAotCXNjdHBfY3duZF91
cGRhdGVfZXhpdF9wZl9jb21tb24sCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKLQlzY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCi0Jc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVy
X2Vjbl9lY2hvLAotCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQsCi0Jc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQsCi0Jc2N0cF9jd25kX3VwZGF0ZV9ydGNjX3BhY2tl
dF90cmFuc21pdHRlZCwKLQlzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfdHNuX2Fja25vd2xlZGdlZCwK
LQlzY3RwX2N3bmRfbmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2JlZ2lucywKLQlzY3RwX2N3bmRfcHJl
cGFyZV9ydGNjX25ldF9mb3Jfc2FjaywKLQlzY3RwX2N3bmRfcnRjY19zb2NrZXRfb3B0aW9uLAot
CXNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAotI2Vsc2UKLQkuc2N0cF9zZXRfaW5pdGlhbF9jY19w
YXJhbSA9IHNjdHBfc2V0X3J0Y2NfaW5pdGlhbF9jY19wYXJhbSwKLQkuc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9zYWNrID0gc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVyX3NhY2ssCi0JLnNjdHBf
Y3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCi0J
LnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAot
CS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVy
X3RpbWVvdXQsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRf
dXBkYXRlX3J0Y2NfYWZ0ZXJfZWNuX2VjaG8sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFj
a2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAotCS5z
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0
cHV0LAotCS5zY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCA9IHNjdHBfY3duZF91
cGRhdGVfcnRjY19wYWNrZXRfdHJhbnNtaXR0ZWQsCi0JLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fj
a25vd2xlZGdlZCA9IHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkLAotCS5z
Y3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMgPSBzY3RwX2N3bmRfbmV3X3J0Y2NfdHJh
bnNtaXNzaW9uX2JlZ2lucywKLQkuc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrID0gc2N0
cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2ssCi0JLnNjdHBfY3duZF9zb2NrZXRfb3B0
aW9uID0gc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbiwKLQkuc2N0cF9ydHRfY2FsY3VsYXRl
ZCA9IHNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAotI2VuZGlmCi19Ci19OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2NvbnN0YW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YWZjOWJkNmZkYjlh
MzA5OTM3OGNjZWQ3OTMyYjE1ZjMwODYxYWVlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaAorKysg
L2Rldi9udWxsCkBAIC0xLDExMDMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFt
ZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUg
PHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBf
Y29uc3RhbnRzLmggMzIwMjYzIDIwMTctMDYtMjMgMDk6Mjc6MzFaIHR1ZXhlbiAkIik7Ci0jZW5k
aWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NPTlNUQU5UU19IXwotI2RlZmluZSBfTkVUSU5F
VF9TQ1RQX0NPTlNUQU5UU19IXwotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotZXh0ZXJuIHZvaWQgZ2V0d2ludGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dik7Ci0jZW5k
aWYKLQotLyogSUFOQSBhc3NpZ25lZCBwb3J0IG51bWJlciBmb3IgU0NUUCBvdmVyIFVEUCBlbmNh
cHN1bGF0aW9uICovCi0jZGVmaW5lIFNDVFBfT1ZFUl9VRFBfVFVOTkVMSU5HX1BPUlQgOTg5OQot
Ci0vKiBOdW1iZXIgb2YgcGFja2V0cyB0byBnZXQgYmVmb3JlIHNhY2sgc2VudCBieSBkZWZhdWx0
ICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9TQUNLX0ZSRVEgMgotCi0vKiBBZGRyZXNzIGxpbWl0
IC0gVGhpcyB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkCi0gKiBiYXNlZCBvbiBhbiA2NTUzNSBieXRl
IG1heCBpcCBwYWNrZXQuIFdlIHRha2Ugb3V0IDEwMCBieXRlcwotICogZm9yIHRoZSBjb29raWUs
IDQwIGJ5dGVzIGZvciBhIHY2IGhlYWRlciBhbmQgMzIKLSAqIGJ5dGVzIGZvciB0aGUgaW5pdCBz
dHJ1Y3R1cmUuIEEgc2Vjb25kIGluaXQgc3RydWN0dXJlCi0gKiBmb3IgdGhlIGluaXQtYWNrIGFu
ZCB0aGVuIGZpbmFsbHkgYSB0aGlyZCBvbmUgZm9yIHRoZQotICogaW1iZWRkZWQgaW5pdC4gVGhp
cyB5ZWlsZHMgMTAwKzQwKygzICogMzIpID0gMjM2IGJ5dGVzLgotICogVGhpcyBsZWF2ZXMgNjUy
OTkgYnl0ZXMgZm9yIGFkZHJlc3Nlcy4gV2UgdGhyb3cgb3V0IHRoZSAyOTkgYnl0ZXMuCi0gKiBO
b3cgd2hhdGV2ZXIgd2Ugc2VuZCBpbiB0aGUgSU5JVCgpIHdlIG5lZWQgdG8gYWxsb3cgdG8gZ2V0
IGJhY2sgaW4gdGhlCi0gKiBJTklULUFDSyBwbHVzIGFsbCB0aGUgdmFsdWVzIGZyb20gSU5JVCBh
bmQgSU5JVC1BQ0sKLSAqIGxpc3RlZCBpbiB0aGUgY29va2llLiBQbHVzIHdlIG5lZWQgc29tZSBv
dmVyaGVhZCBmb3IKLSAqIG1heWJlIGNvcGllZCBwYXJhbWV0ZXJzIGluIHRoZSBDT09LSUUuIElm
IHdlCi0gKiBhbGxvdyAxMDgwIGFkZHJlc3NlcywgYW5kIGVhY2ggc2lkZSBoYXMgMTA4MCBWNiBh
ZGRyZXNzZXMKLSAqIHRoYXQgd2lsbCBiZSAyMTYwMCBieXRlcy4gSW4gdGhlIElOSVQtQUNLIHdl
IHdpbGwKLSAqIHNlZSB0aGUgSU5JVC1BQ0sgMjE2MDAgKyA0MzIwMCBpbiB0aGUgY29va2llLiBU
aGlzIGxlYXZlcwotICogYWJvdXQgNTAwIGJ5dGVzIHNsYWNrIGZvciBtaXNjIHRoaW5ncyBpbiB0
aGUgY29va2llLgotICovCi0jZGVmaW5lIFNDVFBfQUREUkVTU19MSU1JVCAxMDgwCi0KLS8qIFdl
IG5lZWQgYXQgbGVhc3QgMmsgb2Ygc3BhY2UgZm9yIHVzLCBpbml0cwotICogbGFyZ2VyIHRoYW4g
dGhhdCBsZXRzIGFib3J0LgotICovCi0jZGVmaW5lIFNDVFBfTEFSR0VTVF9JTklUX0FDQ0VQVEVE
ICg2NTUzNSAtIDIwNDgpCi0KLS8qIExhcmdlc3QgbGVuZ3RoIG9mIGEgY2h1bmsgKi8KLSNkZWZp
bmUgU0NUUF9NQVhfQ0hVTktfTEVOR1RIIDB4ZmZmZgotLyogTGFyZ2VzdCBsZW5ndGggb2YgYW4g
ZXJyb3IgY2F1c2UgKi8KLSNkZWZpbmUgU0NUUF9NQVhfQ0FVU0VfTEVOR1RIIDB4ZmZmZgotLyog
TnVtYmVyIG9mIGFkZHJlc3NlcyB3aGVyZSB3ZSBqdXN0IHNraXAgdGhlIGNvdW50aW5nICovCi0j
ZGVmaW5lIFNDVFBfQ09VTlRfTElNSVQgNDAKLQotI2RlZmluZSBTQ1RQX1pFUk9fQ09QWV9USUNL
X0RFTEFZICgoKDEwMCAqIGh6KSArIDk5OSkgLyAxMDAwKQotI2RlZmluZSBTQ1RQX1pFUk9fQ09Q
WV9TRU5EUV9USUNLX0RFTEFZICgoKDEwMCAqIGh6KSArIDk5OSkgLyAxMDAwKQotCi0vKiBOdW1i
ZXIgb2YgdGlja3MgdG8gZGVsYXkgYmVmb3JlIHJ1bm5pbmcKLSAqIGl0ZXJhdG9yIG9uIGFuIGFk
ZHJlc3MgY2hhbmdlLgotICovCi0jZGVmaW5lIFNDVFBfQUREUkVTU19USUNLX0RFTEFZIDIKLQot
I2RlZmluZSBTQ1RQX1ZFUlNJT05fU1RSSU5HICJLQU1FLUJTRCAxLjEiCi0vKiAjZGVmaW5lIFND
VFBfQVVESVRJTkdfRU5BQkxFRCAxIHVzZWQgZm9yIGRlYnVnL2F1ZGl0aW5nICovCi0jZGVmaW5l
IFNDVFBfQVVESVRfU0laRSAyNTYKLQotCi0jZGVmaW5lIFNDVFBfS1RSSEVBRF9OQU1FICJzY3Rw
X2l0ZXJhdG9yIgotI2RlZmluZSBTQ1RQX0tUSFJFQURfUEFHRVMgMAotCi0jZGVmaW5lIFNDVFBf
TUNPUkVfTkFNRSAic2N0cF9jb3JlX3dvcmtlciIKLQotCi0vKiBJZiB5b3Ugc3VwcG9ydCBNdWx0
aS1WUkYgaG93IGJpZyB0bwotICogbWFrZSB0aGUgaW5pdGlhbCBhcnJheSBvZiBWUkYncyB0by4K
LSAqLwotI2RlZmluZSBTQ1RQX0RFRkFVTFRfVlJGX1NJWkUgNAotCi0vKiBjb25zdGFudHMgZm9y
IHJ0byBjYWxjICovCi0jZGVmaW5lIHNjdHBfYWxpZ25fc2FmZV9ub2NvcHkgMAotI2RlZmluZSBz
Y3RwX2FsaWduX3Vuc2FmZV9tYWtlY29weSAxCi0KLS8qIEpSUyAtIFZhbHVlcyBkZWZpbmVkIGZv
ciB0aGUgSFRDUCBhbGdvcml0aG0gKi8KLSNkZWZpbmUgQUxQSEFfQkFTRQkoMTw8NykgIC8qIDEu
MCB3aXRoIHNoaWZ0IDw8IDcgKi8KLSNkZWZpbmUgQkVUQV9NSU4JKDE8PDYpICAvKiAwLjUgd2l0
aCBzaGlmdCA8PCA3ICovCi0jZGVmaW5lIEJFVEFfTUFYCTEwMgkvKiAwLjggd2l0aCBzaGlmdCA8
PCA3ICovCi0KLS8qIFBsYWNlcyB0aGF0IENXTkQgbG9nIGNhbiBoYXBwZW4gZnJvbSAqLwotI2Rl
ZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fRlIJMQotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01f
UlRYCTIKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX0JSU1QJMwotI2RlZmluZSBTQ1RQX0NX
TkRfTE9HX0ZST01fU1MJNAotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fQ0EJNQotI2RlZmlu
ZSBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUCTYKLSNkZWZpbmUgU0NUUF9CTE9DS19MT0dfSU5UT19C
TEsgNwotI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19PVVRPRl9CTEsgOAotI2RlZmluZSBTQ1RQX0JM
T0NLX0xPR19DSEVDSyAgICAgOQotI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlRPX1NUUkQg
MTAKLSNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVMIDExCi0jZGVmaW5lIFNDVFBf
U1RSX0xPR19GUk9NX0lOU0VSVF9IRCAxMgotI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNF
UlRfTUQgMTMKLSNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX1RMIDE0Ci0jZGVmaW5l
IFNDVFBfU1RSX0xPR19GUk9NX01BUktfVFNOICAxNQotI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJP
TV9FWFBSU19ERUwgMTYKLSNkZWZpbmUgU0NUUF9GUl9MT0dfQklHR0VTVF9UU05TICAgIDE3Ci0j
ZGVmaW5lIFNDVFBfRlJfTE9HX1NUUklLRV9URVNUICAgICAxOAotI2RlZmluZSBTQ1RQX0ZSX0xP
R19TVFJJS0VfQ0hVTksgICAgMTkKLSNkZWZpbmUgU0NUUF9GUl9UM19USU1FT1VUICAgICAgICAg
IDIwCi0jZGVmaW5lIFNDVFBfTUFQX1BSRVBBUkVfU0xJREUgICAgICAyMQotI2RlZmluZSBTQ1RQ
X01BUF9TTElERV9GUk9NICAgICAgICAgMjIKLSNkZWZpbmUgU0NUUF9NQVBfU0xJREVfUkVTVUxU
ICAgICAgIDIzCi0jZGVmaW5lIFNDVFBfTUFQX1NMSURFX0NMRUFSRUQJICAgIDI0Ci0jZGVmaW5l
IFNDVFBfTUFQX1NMSURFX05PTkUgICAgICAgICAyNQotI2RlZmluZSBTQ1RQX0ZSX1QzX01BUktf
VElNRSAgICAgICAgMjYKLSNkZWZpbmUgU0NUUF9GUl9UM19NQVJLRUQgICAgICAgICAgIDI3Ci0j
ZGVmaW5lIFNDVFBfRlJfVDNfU1RPUFBFRCAgICAgICAgICAyOAotI2RlZmluZSBTQ1RQX0ZSX01B
UktFRCAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19OT0FEVl9TUyAgICAg
IDMxCi0jZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EgICAgICAzMgotI2RlZmluZSBTQ1RQ
X01BWF9CVVJTVF9BUFBMSUVEICAgICAgMzMKLSNkZWZpbmUgU0NUUF9NQVhfSUZQX0FQUExJRUQg
ICAgICAgIDM0Ci0jZGVmaW5lIFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NUT1AgICAzNQotI2RlZmlu
ZSBTQ1RQX0lOQ1JFQVNFX1BFRVJfUldORCAgICAgMzYKLSNkZWZpbmUgU0NUUF9ERUNSRUFTRV9Q
RUVSX1JXTkQgICAgIDM3Ci0jZGVmaW5lIFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSyAzOAot
I2RlZmluZSBTQ1RQX0xPR19NQkNOVF9JTkNSRUFTRSAgICAgMzkKLSNkZWZpbmUgU0NUUF9MT0df
TUJDTlRfREVDUkVBU0UgICAgIDQwCi0jZGVmaW5lIFNDVFBfTE9HX01CQ05UX0NIS1NFVCAgICAg
ICA0MQotI2RlZmluZSBTQ1RQX0xPR19ORVdfU0FDSyAgICAgICAgICAgNDIKLSNkZWZpbmUgU0NU
UF9MT0dfVFNOX0FDS0VEICAgICAgICAgIDQzCi0jZGVmaW5lIFNDVFBfTE9HX1RTTl9SRVZPS0VE
ICAgICAgICA0NAotI2RlZmluZSBTQ1RQX0xPR19MT0NLX1RDQiAgICAgICAgICAgNDUKLSNkZWZp
bmUgU0NUUF9MT0dfTE9DS19JTlAgICAgICAgICAgIDQ2Ci0jZGVmaW5lIFNDVFBfTE9HX0xPQ0tf
U09DSyAgICAgICAgICA0NwotI2RlZmluZSBTQ1RQX0xPR19MT0NLX1NPQ0tCVUZfUiAgICAgNDgK
LSNkZWZpbmUgU0NUUF9MT0dfTE9DS19TT0NLQlVGX1MgICAgIDQ5Ci0jZGVmaW5lIFNDVFBfTE9H
X0xPQ0tfQ1JFQVRFICAgICAgICA1MAotI2RlZmluZSBTQ1RQX0xPR19JTklUSUFMX1JUVCAgICAg
ICAgNTEKLSNkZWZpbmUgU0NUUF9MT0dfUlRUVkFSICAgICAgICAgICAgIDUyCi0jZGVmaW5lIFND
VFBfTE9HX1NCQUxMT0MgICAgICAgICAgICA1MwotI2RlZmluZSBTQ1RQX0xPR19TQkZSRUUgICAg
ICAgICAgICAgNTQKLSNkZWZpbmUgU0NUUF9MT0dfU0JSRVNVTFQgICAgICAgICAgIDU1Ci0jZGVm
aW5lIFNDVFBfRlJfRFVQRUQgICAgICAgICAgICAgICA1NgotI2RlZmluZSBTQ1RQX0ZSX01BUktF
RF9FQVJMWSAgICAgICAgNTcKLSNkZWZpbmUgU0NUUF9GUl9DV05EX1JFUE9SVCAgICAgICAgIDU4
Ci0jZGVmaW5lIFNDVFBfRlJfQ1dORF9SRVBPUlRfU1RBUlQgICA1OQotI2RlZmluZSBTQ1RQX0ZS
X0NXTkRfUkVQT1JUX1NUT1AgICAgNjAKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NFTkQg
ICAgIDYxCi0jZGVmaW5lIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTiAgICA2MgotI2RlZmluZSBT
Q1RQX0NXTkRfTE9HX0ZST01fVDMgICAgICAgNjMKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9N
X1NBQ0sgICAgIDY0Ci0jZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLICAgICA2NQotI2Rl
ZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fUkVTRU5EICAgNjYKLSNkZWZpbmUgU0NUUF9GUl9MT0df
Q0hFQ0tfU1RSSUtFICAgIDY3Ci0jZGVmaW5lIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTICAgICA2
OAotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQgNjkKLSNkZWZpbmUgU0NU
UF9DV05EX0xPR19GSUxMX09VVFFfRklMTFMgIDcwCi0jZGVmaW5lIFNDVFBfTE9HX0ZSRUVfU0VO
VCAgICAgICAgICAgICA3MQotI2RlZmluZSBTQ1RQX05BR0xFX0FQUExJRUQgICAgICAgICAgNzIK
LSNkZWZpbmUgU0NUUF9OQUdMRV9TS0lQUEVEICAgICAgICAgIDczCi0jZGVmaW5lIFNDVFBfV0FL
RVNORF9GUk9NX1NBQ0sgICAgICA3NAotI2RlZmluZSBTQ1RQX1dBS0VTTkRfRlJPTV9GV0RUU04g
ICAgNzUKLSNkZWZpbmUgU0NUUF9OT1dBS0VfRlJPTV9TQUNLICAgICAgIDc2Ci0jZGVmaW5lIFND
VFBfQ1dORExPR19QUkVTRU5EICAgICAgICA3NwotI2RlZmluZSBTQ1RQX0NXTkRMT0dfRU5EU0VO
RCAgICAgICAgNzgKLSNkZWZpbmUgU0NUUF9BVF9FTkRfT0ZfU0FDSyAgICAgICAgIDc5Ci0jZGVm
aW5lIFNDVFBfUkVBU09OX0ZPUl9TQyAgICAgICAgICA4MAotI2RlZmluZSBTQ1RQX0JMT0NLX0xP
R19JTlRPX0JMS0EgICAgODEKLSNkZWZpbmUgU0NUUF9FTlRFUl9VU0VSX1JFQ1YgICAgICAgIDgy
Ci0jZGVmaW5lIFNDVFBfVVNFUl9SRUNWX1NBQ0tTICAgICAgICA4MwotI2RlZmluZSBTQ1RQX1NP
UkVDVl9CTE9DS1NBICAgICAgICAgODQKLSNkZWZpbmUgU0NUUF9TT1JFQ1ZfQkxPQ0tTQiAgICAg
ICAgIDg1Ci0jZGVmaW5lIFNDVFBfU09SRUNWX0RPTkUgICAgICAgICAgICA4NgotI2RlZmluZSBT
Q1RQX1NBQ0tfUldORF9VUERBVEUgICAgICAgODcKLSNkZWZpbmUgU0NUUF9TT1JFQ1ZfRU5URVIg
ICAgICAgICAgIDg4Ci0jZGVmaW5lIFNDVFBfU09SRUNWX0VOVEVSUEwgICAgICAgICA4OQotI2Rl
ZmluZSBTQ1RQX01CVUZfSU5QVVQgICAgICAgICAgICAgOTAKLSNkZWZpbmUgU0NUUF9NQlVGX0lB
TExPQyAgICAgICAgICAgIDkxCi0jZGVmaW5lIFNDVFBfTUJVRl9JRlJFRSAgICAgICAgICAgICA5
MgotI2RlZmluZSBTQ1RQX01CVUZfSUNPUFkgICAgICAgICAgICAgOTMKLSNkZWZpbmUgU0NUUF9N
QlVGX1NQTElUICAgICAgICAgICAgIDk0Ci0jZGVmaW5lIFNDVFBfU09SQ1ZfRlJFRUNUTCAgICAg
ICAgICA5NQotI2RlZmluZSBTQ1RQX1NPUkNWX0RPRVNDUFkgICAgICAgICAgOTYKLSNkZWZpbmUg
U0NUUF9TT1JDVl9ET0VTTENLICAgICAgICAgIDk3Ci0jZGVmaW5lIFNDVFBfU09SQ1ZfRE9FU0FE
SiAgICAgICAgICA5OAotI2RlZmluZSBTQ1RQX1NPUkNWX0JPVFdISUxFICAgICAgICAgOTkKLSNk
ZWZpbmUgU0NUUF9TT1JDVl9QQVNTQkYgICAgICAgICAgMTAwCi0jZGVmaW5lIFNDVFBfU09SQ1Zf
QURKRCAgICAgICAgICAgIDEwMQotI2RlZmluZSBTQ1RQX1VOS05PV05fTUFYICAgICAgICAgICAx
MDIKLSNkZWZpbmUgU0NUUF9SQU5EWV9TVFVGRiAgICAgICAgICAgMTAzCi0jZGVmaW5lIFNDVFBf
UkFORFlfU1RVRkYxICAgICAgICAgIDEwNAotI2RlZmluZSBTQ1RQX1NUUk1PVVRfTE9HX0FTU0lH
TgkgICAxMDUKLSNkZWZpbmUgU0NUUF9TVFJNT1VUX0xPR19TRU5ECSAgIDEwNgotI2RlZmluZSBT
Q1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSAgICAxMDcKLSNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX1VQ
ICAgICAgICAgMTA4Ci0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX0dBUCAgIDEwOQotI2Rl
ZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9SU05EICAxMTAKLSNkZWZpbmUgU0NUUF9GTElHSFRf
TE9HX1VQX1JTTkQgICAgMTExCi0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkRfVE8g
ICAgMTEyCi0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1dQICAgIDExMwotI2RlZmluZSBT
Q1RQX0ZMSUdIVF9MT0dfVVBfUkVWT0tFICAxMTQKLSNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX0RP
V05fUERSUCAgMTE1Ci0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1BNVFUgIDExNgotI2Rl
ZmluZSBTQ1RQX1NBQ0tfTE9HX05PUk1BTAkgICAxMTcKLSNkZWZpbmUgU0NUUF9TQUNLX0xPR19F
WFBSRVNTCSAgIDExOAotI2RlZmluZSBTQ1RQX01BUF9UU05fRU5URVJTICAgICAgICAxMTkKLSNk
ZWZpbmUgU0NUUF9USFJFU0hPTERfQ0xFQVIgICAgICAgMTIwCi0jZGVmaW5lIFNDVFBfVEhSRVNI
T0xEX0lOQ1IgICAgICAgIDEyMQotI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRFdOX1dQX0ZXRCAx
MjIKLSNkZWZpbmUgU0NUUF9GV0RfVFNOX0NIRUNLICAgICAgICAgMTIzCi0jZGVmaW5lIFNDVFBf
TE9HX01BWF9UWVBFUyAxMjQKLS8qCi0gKiBUbyB0dXJuIG9uIHZhcmlvdXMgbG9nZ2luZywgeW91
IG11c3QgZmlyc3QgZW5hYmxlICdvcHRpb25zIEtUUicgYW5kCi0gKiB5b3UgbWlnaHQgd2FudCB0
byBidW1wIHRoZSBlbnRpcmVzICdvcHRpb25zIEtUUl9FTlRSSUVTPTgwMDAwJy4KLSAqIFRvIGdl
dCBzb21ldGhpbmcgdG8gbG9nIHlvdSBkZWZpbmUgb25lIG9mIHRoZSBsb2dnaW5nIGRlZmluZXMu
Ci0gKiAoc2VlIExJTlQpLgotICoKLSAqIFRoaXMgZ2V0cyB0aGUgY29tcGlsZSBpbiBwbGFjZSwg
YnV0IHlvdSBzdGlsbCBuZWVkIHRvIHR1cm4gdGhlCi0gKiBsb2dnaW5nIGZsYWcgb24gdG9vIGlu
IHRoZSBzeXNjdGwgKHNlZSBpbiBzY3RwLmgpLgotICovCi0KLSNkZWZpbmUgU0NUUF9MT0dfRVZF
TlRfVU5LTk9XTiAwCi0jZGVmaW5lIFNDVFBfTE9HX0VWRU5UX0NXTkQgIDEKLSNkZWZpbmUgU0NU
UF9MT0dfRVZFTlRfQkxPQ0sgMgotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TVFJNICAzCi0jZGVm
aW5lIFNDVFBfTE9HX0VWRU5UX0ZSICAgIDQKLSNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUFQICAg
NQotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQVhCVVJTVCA2Ci0jZGVmaW5lIFNDVFBfTE9HX0VW
RU5UX1JXTkQgIDcKLSNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUJDTlQgOAotI2RlZmluZSBTQ1RQ
X0xPR19FVkVOVF9TQUNLICA5Ci0jZGVmaW5lIFNDVFBfTE9HX0xPQ0tfRVZFTlQgMTAKLSNkZWZp
bmUgU0NUUF9MT0dfRVZFTlRfUlRUICAxMQotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TQiAgIDEy
Ci0jZGVmaW5lIFNDVFBfTE9HX0VWRU5UX05BR0xFIDEzCi0jZGVmaW5lIFNDVFBfTE9HX0VWRU5U
X1dBS0UgMTQKLSNkZWZpbmUgU0NUUF9MT0dfTUlTQ19FVkVOVCAxNQotI2RlZmluZSBTQ1RQX0xP
R19FVkVOVF9DTE9TRSAxNgotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQlVGIDE3Ci0jZGVmaW5l
IFNDVFBfTE9HX0NIVU5LX1BST0MgMTgKLSNkZWZpbmUgU0NUUF9MT0dfRVJST1JfUkVUICAxOQot
Ci0jZGVmaW5lIFNDVFBfTE9HX01BWF9FVkVOVCAyMAotCi0jZGVmaW5lIFNDVFBfTE9DS19VTktO
T1dOIDIKLQotCi0vKiBudW1iZXIgb2YgYXNzb2NpYXRpb25zIGJ5IGRlZmF1bHQgZm9yIHpvbmUg
YWxsb2NhdGlvbiAqLwotI2RlZmluZSBTQ1RQX01BWF9OVU1fT0ZfQVNPQwk0MDAwMAotLyogaG93
IG1hbnkgYWRkcmVzc2VzIHBlciBhc3NvYyByZW1vdGUgYW5kIGxvY2FsICovCi0jZGVmaW5lIFND
VFBfU0NBTEVfRk9SX0FERFIJMgotCi0vKiBkZWZhdWx0IE1VTFRJUExFX0FTQ09ORiBtb2RlIGVu
YWJsZSgxKS9kaXNhYmxlKDApIHZhbHVlIChzeXNjdGwpICovCi0jZGVmaW5lIFNDVFBfREVGQVVM
VF9NVUxUSVBMRV9BU0NPTkZTCTAKLQotLyoKLSAqIFRocmVzaG9sZCBmb3IgcnduZCB1cGRhdGVz
LCB3ZSBoYXZlIHRvIHJlYWQgKHNiX2hpd2F0ID4+Ci0gKiBTQ1RQX1JXTkRfSElXQVRfU0hJRlQp
IGJlZm9yZSB3ZSB3aWxsIGxvb2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhCi0gKiB3aW5k
b3cgdXBkYXRlIHNhY2suIFdoZW4gd2UgbG9vaywgd2UgY29tcGFyZSB0aGUgbGFzdCByd25kIHdl
IHNlbnQgdnMgdGhlCi0gKiBjdXJyZW50IHJ3bmQuIEl0IHRvbyBtdXN0IGJlIGdyZWF0ZXIgdGhh
biB0aGlzIHZhbHVlLiBVc2luZyAzIGRpdmRlcyB0aGUKLSAqIGhpd2F0IGJ5IDgsIHNvIGZvciAy
MDBrIHJ3bmQgd2UgbmVlZCB0byByZWFkIDI0ay4gRm9yIGEgNjRrIHJ3bmQgd2UgbmVlZAotICog
dG8gcmVhZCA4ay4gVGhpcyBzZWVtcyBhYm91dCByaWdodC4uIEkgaG9wZSA6LUQuLiB3ZSBkbyBz
ZXQgYQotICogbWluIG9mIGEgTVRVIG9uIGl0IHNvIGlmIHRoZSByd25kIGlzIHJlYWwgc21hbGwg
d2Ugd2lsbCBpbnNpc3QKLSAqIG9uIGEgZnVsbCBNVFUgb2YgMTUwMCBieXRlcy4KLSAqLwotI2Rl
ZmluZSBTQ1RQX1JXTkRfSElXQVRfU0hJRlQgMwotCi0vKiBIb3cgbXVjaCBvZiB0aGUgcnduZCBt
dXN0IHRoZQotICogbWVzc2FnZSBiZSB0YWtpbmcgdXAgdG8gc3RhcnQgcGFydGlhbCBkZWxpdmVy
eS4KLSAqIFdlIGNhbGN1bGF0ZSB0aGlzIGJ5IHNoaWZpbmcgdGhlIGhpX3dhdGVyIChyZWN2X3dp
bikKLSAqIGxlZnQgdGhlIGZvbGxvd2luZyAuLiBzZXQgdG8gMSwgd2hlbiBhIG1lc3NhZ2UgaG9s
ZHMKLSAqIDEvMiB0aGUgcnduZC4gSWYgd2Ugc2V0IGl0IHRvIDIgd2hlbiBhIG1lc3NhZ2UgaG9s
ZHMKLSAqIDEvNCB0aGUgcnduZC4uLmV0Yy4uCi0gKi8KLQotI2RlZmluZSBTQ1RQX1BBUlRJQUxf
REVMSVZFUllfU0hJRlQgMQotCi0vKgotICogZGVmYXVsdCBITUFDIGZvciBjb29raWVzLCBldGMu
Li4gdXNlIG9uZSBvZiB0aGUgQVVUSCBITUFDIGlkJ3MKLSAqIFNDVFBfSE1BQyBpcyB0aGUgSE1B
Q19JRCB0byB1c2UKLSAqIFNDVFBfU0lHTkFUVVJFX1NJWkUgaXMgdGhlIGRpZ2VzdCBsZW5ndGgK
LSAqLwotI2RlZmluZSBTQ1RQX0hNQUMJCVNDVFBfQVVUSF9ITUFDX0lEX1NIQTEKLSNkZWZpbmUg
U0NUUF9TSUdOQVRVUkVfU0laRQlTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExCi0jZGVmaW5lIFND
VFBfU0lHTkFUVVJFX0FMT0NfU0laRSBTQ1RQX1NJR05BVFVSRV9TSVpFCi0KLS8qCi0gKiB0aGUg
U0NUUCBwcm90b2NvbCBzaWduYXR1cmUgdGhpcyBpbmNsdWRlcyB0aGUgdmVyc2lvbiBudW1iZXIg
ZW5jb2RlZCBpbgotICogdGhlIGxhc3QgNCBiaXRzIG9mIHRoZSBzaWduYXR1cmUuCi0gKi8KLSNk
ZWZpbmUgUFJPVE9fU0lHTkFUVVJFX0EJMHgzMDAwMDAwMAotI2RlZmluZSBTQ1RQX1ZFUlNJT05f
TlVNQkVSCTB4MwotCi0jZGVmaW5lIE1BWF9UU04JMHhmZmZmZmZmZgotCi0vKiBob3cgbWFueSBl
eGVjdXRpb25zIGV2ZXJ5IE4gdGljaydzICovCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTUFYX0FU
X09OQ0UgMjAKLQotLyogbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGJldHdlZW4gaXRlcmF0b3IgZXhl
Y3V0aW9ucyAqLwotI2RlZmluZSBTQ1RQX0lURVJBVE9SX1RJQ0tTIDEKLQotLyoKLSAqIG9wdGlv
bjogSWYgeW91IGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgeW91IHdpbGwgcmVjZWl2ZSB0aGUg
b2xkIGJlaGF2aW9yCi0gKiBvZiBvYmV5aW5nIGN3bmQgZm9yIHRoZSBmYXN0IHJldHJhbnNtaXQg
YWxnb3JpdGhtLiBXaXRoIHRoaXMgZGVmaW5lZCBhIEZSCi0gKiBoYXBwZW5zIHJpZ2h0IGF3YXkg
d2l0aC1vdXQgd2FpdGluZyBmb3IgdGhlIGZsaWdodHNpemUgdG8gZHJvcCBiZWxvdyB0aGUKLSAq
IGN3bmQgdmFsdWUgKHdoaWNoIGlzIHJlZHVjZWQgYnkgdGhlIEZSIHRvIDEvMiB0aGUgaW5mbGln
aHQgcGFja2V0cykuCi0gKi8KLSNkZWZpbmUgU0NUUF9JR05PUkVfQ1dORF9PTl9GUiAxCi0KLS8q
Ci0gKiBBZGRzIGltcGxlbWVudG9ycyBndWlkZSBiZWhhdmlvciB0byBvbmx5IHVzZSBuZXdlc3Qg
aGlnaGVzdCB1cGRhdGUgaW4gU0FDSwotICogZ2FwIGFjaydzIHRvIGZpZ3VyZSBvdXQgaWYgeW91
IG5lZWQgdG8gc3Ryb2tlIGEgY2h1bmsgZm9yIEZSLgotICovCi0jZGVmaW5lIFNDVFBfTk9fRlJf
VU5MRVNTX1NFR01FTlRfU01BTExFUiAxCi0KLS8qIGRlZmF1bHQgbWF4IEkgY2FuIGJ1cnN0IG91
dCBhZnRlciBhIGZhc3QgcmV0cmFuc21pdCwgMCBkaXNhYmxlcyBpdCAqLwotI2RlZmluZSBTQ1RQ
X0RFRl9NQVhfQlVSU1QgNAotI2RlZmluZSBTQ1RQX0RFRl9IQk1BWF9CVVJTVCA0Ci0jZGVmaW5l
IFNDVFBfREVGX0ZSTUFYX0JVUlNUIDQKLQotLyogUlRPIGNhbGN1bGF0aW9uIGZsYWcgdG8gc2F5
IGlmIGl0Ci0gKiBpcyBzYWZlIHRvIGRldGVybWluZSBsb2NhbCBsYW4gb3Igbm90LgotICovCi0j
ZGVmaW5lIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEgMAotI2RlZmluZSBTQ1RQX1JUVF9GUk9NX0RB
VEEgICAgIDEKLQotI2RlZmluZSBQUl9TQ1RQX1VOT1JERVJFRF9GTEFHIDB4MDAwMQotCi0vKiBJ
UCBoZHIgKDIwLzQwKSArIDEyKzIrMiAoZW5ldCkgKyBzY3RwIGNvbW1vbiAxMiAqLwotI2RlZmlu
ZSBTQ1RQX0ZJUlNUX01CVUZfUkVTViA2OAotLyogUGFja2V0IHRyYW5zbWl0IHN0YXRlcyBpbiB0
aGUgc2VudCBmaWVsZCAqLwotI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1VOU0VOVAkJMAotI2RlZmlu
ZSBTQ1RQX0RBVEFHUkFNX1NFTlQJCTEKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQxCQky
CS8qIG5vdCB1c2VkIChpbiBjb2RlLCBidXQgbWF5Ci0JCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkg
Ki8KLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQyCQkzCS8qIG5vdCB1c2VkIChpbiBjb2Rl
LCBidXQgbWF5Ci0JCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkgKi8KLSNkZWZpbmUgU0NUUF9EQVRB
R1JBTV9SRVNFTkQJCTQKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9BQ0tFRAkJMTAwMTAKLSNkZWZp
bmUgU0NUUF9EQVRBR1JBTV9NQVJLRUQJCTIwMDEwCi0jZGVmaW5lIFNDVFBfRk9SV0FSRF9UU05f
U0tJUAkJMzAwMTAKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRAkJNDAwMTAKLQotLyog
Y2h1bmsgb3V0cHV0IHNlbmQgZnJvbSBsb2NhdGlvbnMgKi8KLSNkZWZpbmUgU0NUUF9PVVRQVVRf
RlJPTV9VU1JfU0VORCAgICAgICAwCi0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fVDMgICAgICAg
CTEKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9JTlBVVF9FUlJPUiAgICAyCi0jZGVmaW5lIFND
VFBfT1VUUFVUX0ZST01fQ09OVFJPTF9QUk9DICAgMwotI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9N
X1NBQ0tfVE1SICAgICAgIDQKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiAgICAg
ICA1Ci0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SICAgICAgICAgNgotI2RlZmluZSBT
Q1RQX09VVFBVVF9GUk9NX1NIVVRfQUNLX1RNUiAgIDcKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJP
TV9BU0NPTkZfVE1SICAgICA4Ci0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1RNUiAg
ICAgOQotI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIgIDEwCi0jZGVmaW5l
IFNDVFBfT1VUUFVUX0ZST01fRUFSTFlfRlJfVE1SICAgMTEKLSNkZWZpbmUgU0NUUF9PVVRQVVRf
RlJPTV9TVFJSU1RfUkVRICAgICAxMgotI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1VTUl9SQ1ZE
ICAgICAgIDEzCi0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lFX0FDSyAgICAgMTQKLSNk
ZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9EUkFJTiAgICAgICAgICAxNQotI2RlZmluZSBTQ1RQX09V
VFBVVF9GUk9NX0NMT1NJTkcgICAgICAgIDE2Ci0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU09D
S09QVCAgICAgICAgMTcKLQotLyogU0NUUCBjaHVuayB0eXBlcyBhcmUgbW92ZWQgc2N0cC5oIGZv
ciBhcHBsaWNhdGlvbiAoTkFULCBGVykgdXNlICovCi0KLS8qIGFsaWduIHRvIDMyLWJpdCBzaXpl
cyAqLwotI2RlZmluZSBTQ1RQX1NJWkUzMih4KQkoKCgoeCkgKyAzKSA+PiAyKSA8PCAyKQotCi0j
ZGVmaW5lIElTX1NDVFBfQ09OVFJPTChhKSAoKChhKS0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0RBVEEp
ICYmICgoYSktPmNodW5rX3R5cGUgIT0gU0NUUF9JREFUQSkpCi0jZGVmaW5lIElTX1NDVFBfREFU
QShhKSAoKChhKS0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHx8ICgoYSktPmNodW5rX3R5cGUg
PT0gU0NUUF9JREFUQSkpCi0KLQotLyogU0NUUCBwYXJhbWV0ZXIgdHlwZXMgKi8KLS8qKioqKioq
KioqKioqMHgwMDAwIHNlcmllcyoqKioqKioqKioqKiovCi0jZGVmaW5lIFNDVFBfSEVBUlRCRUFU
X0lORk8JCTB4MDAwMQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNkZWZpbmUgU0NUUF9D
T05OX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDQKLSNlbmRpZgotI2RlZmluZSBTQ1RQX0lQ
VjRfQUREUkVTUwkJMHgwMDA1Ci0jZGVmaW5lIFNDVFBfSVBWNl9BRERSRVNTCQkweDAwMDYKLSNk
ZWZpbmUgU0NUUF9TVEFURV9DT09LSUUJCTB4MDAwNwotI2RlZmluZSBTQ1RQX1VOUkVDT0dfUEFS
QU0JCTB4MDAwOAotI2RlZmluZSBTQ1RQX0NPT0tJRV9QUkVTRVJWRQkJMHgwMDA5Ci0jZGVmaW5l
IFNDVFBfSE9TVE5BTUVfQUREUkVTUwkJMHgwMDBiCi0jZGVmaW5lIFNDVFBfU1VQUE9SVEVEX0FE
RFJUWVBFCQkweDAwMGMKLQotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXRzdndnLXN0cnJlc2V0LXh4
eCAqLwotI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVAkweDAwMGQKLSNkZWZpbmUg
U0NUUF9TVFJfUkVTRVRfSU5fUkVRVUVTVAkweDAwMGUKLSNkZWZpbmUgU0NUUF9TVFJfUkVTRVRf
VFNOX1JFUVVFU1QJMHgwMDBmCi0jZGVmaW5lIFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFCQkweDAw
MTAKLSNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TCTB4MDAxMQotI2RlZmlu
ZSBTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUyAgIDB4MDAxMgotCi0jZGVmaW5lIFNDVFBf
TUFYX1JFU0VUX1BBUkFNUyAyCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1RTTl9ERUxUQSAg
ICAweDEwMDAKLQotLyoqKioqKioqKioqKioweDQwMDAgc2VyaWVzKioqKioqKioqKioqKi8KLQot
LyoqKioqKioqKioqKioweDgwMDAgc2VyaWVzKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0NUUF9F
Q05fQ0FQQUJMRQkJMHg4MDAwCi0KLS8qIGRyYWZ0LWlldGYtdHN2d2ctYXV0aC14eHggKi8KLSNk
ZWZpbmUgU0NUUF9SQU5ET00JCQkweDgwMDIKLSNkZWZpbmUgU0NUUF9DSFVOS19MSVNUCQkJMHg4
MDAzCi0jZGVmaW5lIFNDVFBfSE1BQ19MSVNUCQkJMHg4MDA0Ci0vKgotICogZHJhZnQtaWV0Zi10
c3Z3Zy1hZGRpcC1zY3RwLXh4IHBhcmFtPTB4ODAwOCAgbGVuPTB4Tk5OTiBCeXRlIHwgQnl0ZSB8
IEJ5dGUKLSAqIHwgQnl0ZSBCeXRlIHwgQnl0ZSAuLi4KLSAqCi0gKiBXaGVyZSBlYWNoIGJ5dGUg
aXMgYSBjaHVuayB0eXBlIGV4dGVuc2lvbiBzdXBwb3J0ZWQuIEZvciBleGFtcGxlLCB0byBzdXBw
b3J0Ci0gKiBhbGwgY2h1bmtzIG9uZSB3b3VsZCBoYXZlIChpbiBoZXgpOgotICoKLSAqIDgwIDAx
IDAwIDA5IEMwIEMxIDgwIDgxIDgyIDAwIDAwIDAwCi0gKgotICogSGFzIHRoZSBwYXJhbWV0ZXIu
IEMwID0gUFItU0NUUCAgICAoUkZDMzc1OCkgQzEsIDgwID0gQVNDT05GIChhZGRpcCBkcmFmdCkg
ODEKLSAqID0gUGFja2V0IERyb3AgODIgPSBTdHJlYW0gUmVzZXQgODMgPSBBdXRoZW50aWNhdGlv
bgotICovCi0jZGVmaW5lIFNDVFBfU1VQUE9SVEVEX0NIVU5LX0VYVCAgICAweDgwMDgKLQotLyoq
KioqKioqKioqKioweEMwMDAgc2VyaWVzKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0NUUF9QUlND
VFBfU1VQUE9SVEVECQkweGMwMDAKLS8qIGRyYWZ0LWlldGYtdHN2d2ctYWRkaXAtc2N0cCAqLwot
I2RlZmluZSBTQ1RQX0FERF9JUF9BRERSRVNTCQkweGMwMDEKLSNkZWZpbmUgU0NUUF9ERUxfSVBf
QUREUkVTUwkJMHhjMDAyCi0jZGVmaW5lIFNDVFBfRVJST1JfQ0FVU0VfSU5ECQkweGMwMDMKLSNk
ZWZpbmUgU0NUUF9TRVRfUFJJTV9BRERSCQkweGMwMDQKLSNkZWZpbmUgU0NUUF9TVUNDRVNTX1JF
UE9SVAkJMHhjMDA1Ci0jZGVmaW5lIFNDVFBfVUxQX0FEQVBUQVRJT04JCTB4YzAwNgotLyogYmVo
YXZlLW5hdC1kcmFmdCAqLwotI2RlZmluZSBTQ1RQX0hBU19OQVRfU1VQUE9SVCAgICAgICAgICAg
IDB4YzAwNwotI2RlZmluZSBTQ1RQX05BVF9WVEFHUyAgICAgICAgICAgICAgICAgIDB4YzAwOAot
Ci0vKiBiaXRzIGZvciBUT1MgZmllbGQgKi8KLSNkZWZpbmUgU0NUUF9FQ1QwX0JJVAkJMHgwMgot
I2RlZmluZSBTQ1RQX0VDVDFfQklUCQkweDAxCi0jZGVmaW5lIFNDVFBfQ0VfQklUUwkJMHgwMwot
Ci0vKiBiZWxvdyB0dXJucyBvZmYgYWJvdmUgKi8KLSNkZWZpbmUgU0NUUF9GTEVYSUJMRV9BRERS
RVNTCTB4MjAKLSNkZWZpbmUgU0NUUF9OT19IRUFSVEJFQVQJMHg0MAotCi0vKiBtYXNrIHRvIGdl
dCBzdGlja3kgKi8KLSNkZWZpbmUgU0NUUF9TVElDS1lfT1BUSU9OU19NQVNLCTB4MGMKLQotCi0v
KgotICogU0NUUCBzdGF0ZXMgZm9yIGludGVybmFsIHN0YXRlIG1hY2hpbmUKLSAqLwotI2RlZmlu
ZSBTQ1RQX1NUQVRFX0VNUFRZCQkweDAwMDAKLSNkZWZpbmUgU0NUUF9TVEFURV9JTlVTRQkJMHgw
MDAxCi0jZGVmaW5lIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQJCTB4MDAwMgotI2RlZmluZSBTQ1RQ
X1NUQVRFX0NPT0tJRV9FQ0hPRUQJMHgwMDA0Ci0jZGVmaW5lIFNDVFBfU1RBVEVfT1BFTgkJCTB4
MDAwOAotI2RlZmluZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQJMHgwMDEwCi0jZGVmaW5lIFND
VFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQJMHgwMDIwCi0jZGVmaW5lIFNDVFBfU1RBVEVfU0hV
VERPV05fQUNLX1NFTlQJMHgwMDQwCi0jZGVmaW5lIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElO
RwkweDAwODAKLSNkZWZpbmUgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUCTB4MDEwMAotI2RlZmlu
ZSBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEICAgIDB4MDIwMAotI2RlZmluZSBTQ1RQX1NU
QVRFX1BBUlRJQUxfTVNHX0xFRlQgICAgIDB4MDQwMAotI2RlZmluZSBTQ1RQX1NUQVRFX1dBU19B
Qk9SVEVEICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBTQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVV
RSAgICAgIDB4MTAwMAotI2RlZmluZSBTQ1RQX1NUQVRFX01BU0sJCQkweDAwN2YKLQotI2RlZmlu
ZSBTQ1RQX0dFVF9TVEFURShhc29jKQkoKGFzb2MpLT5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykK
LSNkZWZpbmUgU0NUUF9TRVRfU1RBVEUoYXNvYywgbmV3c3RhdGUpICAoKGFzb2MpLT5zdGF0ZSA9
ICgoYXNvYyktPnN0YXRlICYgflNDVFBfU1RBVEVfTUFTSykgfCAgbmV3c3RhdGUpCi0jZGVmaW5l
IFNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgc3Vic3RhdGUpICgoYXNvYyktPnN0YXRlICY9IH5z
dWJzdGF0ZSkKLSNkZWZpbmUgU0NUUF9BRERfU1VCU1RBVEUoYXNvYywgc3Vic3RhdGUpICgoYXNv
YyktPnN0YXRlIHw9IHN1YnN0YXRlKQotCi0vKiBTQ1RQIHJlYWNoYWJpbGl0eSBzdGF0ZSBmb3Ig
ZWFjaCBhZGRyZXNzICovCi0jZGVmaW5lIFNDVFBfQUREUl9SRUFDSEFCTEUJCTB4MDAxCi0jZGVm
aW5lIFNDVFBfQUREUl9OT19QTVRVRCAgICAgICAgICAgICAgMHgwMDIKLSNkZWZpbmUgU0NUUF9B
RERSX05PSEIJCQkweDAwNAotI2RlZmluZSBTQ1RQX0FERFJfQkVJTkdfREVMRVRFRAkJMHgwMDgK
LSNkZWZpbmUgU0NUUF9BRERSX05PVF9JTl9BU1NPQwkJMHgwMTAKLSNkZWZpbmUgU0NUUF9BRERS
X09VVF9PRl9TQ09QRQkJMHgwODAKLSNkZWZpbmUgU0NUUF9BRERSX1VOQ09ORklSTUVECQkweDIw
MAotI2RlZmluZSBTQ1RQX0FERFJfUkVRX1BSSU1BUlkgICAgICAgICAgIDB4NDAwCi0vKiBKUlMg
NS8xMy8wNyAtIEFkZGVkIHBvdGVudGlhbGx5IGZhaWxlZCBzdGF0ZSBmb3IgQ01UIFBGICovCi0j
ZGVmaW5lIFNDVFBfQUREUl9QRiAgICAgICAgICAgICAgICAgICAgMHg4MDAKLQotLyogYm91bmQg
YWRkcmVzcyB0eXBlcyAoZS5nLiB2YWxpZCBhZGRyZXNzIHR5cGVzIHRvIGFsbG93KSAqLwotI2Rl
ZmluZSBTQ1RQX0JPVU5EX1Y2CQkweDAxCi0jZGVmaW5lIFNDVFBfQk9VTkRfVjQJCTB4MDIKLQot
LyoKLSAqIHdoYXQgaXMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIG1idWZzIGluIGEgY2hhaW4gSSBh
bGxvdyBiZWZvcmUgc3dpdGNoaW5nIHRvCi0gKiBhIGNsdXN0ZXIKLSAqLwotI2RlZmluZSBTQ1RQ
X0RFRkFVTFRfTUJVRlNfSU5fQ0hBSU4gNQotCi0vKiBIb3cgbG9uZyBhIGNvb2tpZSBsaXZlcyBp
biBtaWxsaS1zZWNvbmRzICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9DT09LSUVfTElGRQk2MDAw
MAotCi0vKiBNYXhpbXVtIHRoZSBtYXBwaW5nIGFycmF5IHdpbGwgIGdyb3cgdG8gKFRTTiBtYXBw
aW5nIGFycmF5KSAqLwotI2RlZmluZSBTQ1RQX01BUFBJTkdfQVJSQVkJNTEyCi0KLS8qIHNpemUg
b2YgdGhlIGluaXRpYWwgbWFsbG9jIG9uIHRoZSBtYXBwaW5nIGFycmF5ICovCi0jZGVmaW5lIFND
VFBfSU5JVElBTF9NQVBQSU5HX0FSUkFZICAxNgotLyogaG93IG11Y2ggd2UgZ3JvdyB0aGUgbWFw
cGluZyBhcnJheSBlYWNoIGNhbGwgKi8KLSNkZWZpbmUgU0NUUF9NQVBQSU5HX0FSUkFZX0lOQ1Ig
ICAgIDMyCi0KLS8qCi0gKiBIZXJlIHdlIGRlZmluZSB0aGUgdGltZXIgdHlwZXMgdXNlZCBieSB0
aGUgaW1wbGVtZW50YXRpb24gYXMgYXJndW1lbnRzIGluCi0gKiB0aGUgc2V0L2dldCB0aW1lciB0
eXBlIGNhbGxzLgotICovCi0jZGVmaW5lIFNDVFBfVElNRVJfSU5JVCAJMAotI2RlZmluZSBTQ1RQ
X1RJTUVSX1JFQ1YgCTEKLSNkZWZpbmUgU0NUUF9USU1FUl9TRU5EIAkyCi0jZGVmaW5lIFNDVFBf
VElNRVJfSEVBUlRCRUFUCTMKLSNkZWZpbmUgU0NUUF9USU1FUl9QTVRVCQk0Ci0jZGVmaW5lIFND
VFBfVElNRVJfTUFYU0hVVERPV04JNQotI2RlZmluZSBTQ1RQX1RJTUVSX1NJR05BVFVSRQk2Ci0v
KgotICogbnVtYmVyIG9mIHRpbWVyIHR5cGVzIGluIHRoZSBiYXNlIFNDVFAgc3RydWN0dXJlIHVz
ZWQgaW4gdGhlIHNldC9nZXQgYW5kCi0gKiBoYXMgdGhlIGJhc2UgZGVmYXVsdC4KLSAqLwotI2Rl
ZmluZSBTQ1RQX05VTV9UTVJTCTcKLQotLyogdGltZXIgdHlwZXMgKi8KLSNkZWZpbmUgU0NUUF9U
SU1FUl9UWVBFX05PTkUJCTAKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1NFTkQJCTEKLSNkZWZp
bmUgU0NUUF9USU1FUl9UWVBFX0lOSVQJCTIKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1JFQ1YJ
CTMKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOCTQKLSNkZWZpbmUgU0NUUF9USU1F
Ul9UWVBFX0hFQVJUQkVBVAk1Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9DT09LSUUJCTYKLSNk
ZWZpbmUgU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRQk3Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQ
RV9QQVRITVRVUkFJU0UJOAotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0sJOQot
I2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfQVNDT05GCQkxMAotI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfU0hVVERPV05HVUFSRAkxMQotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFCTEy
Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9FVkVOVFdBS0UJMTMKLSNkZWZpbmUgU0NUUF9USU1F
Ul9UWVBFX1NUUlJFU0VUICAgICAgICAxNAotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSU5QS0lM
TCAgICAgICAgIDE1Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCAgICAgICAgMTYK
LSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0FERFJfV1EgICAgICAgICAxNwotI2RlZmluZSBTQ1RQ
X1RJTUVSX1RZUEVfWkVST19DT1BZICAgICAgIDE4Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9a
Q09QWV9TRU5EUSAgICAgMTkKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRCAg
ICAyMAotLyogYWRkIG5ldyB0aW1lcnMgaGVyZSAtIGFuZCBpbmNyZW1lbnQgTEFTVCAqLwotI2Rl
ZmluZSBTQ1RQX1RJTUVSX1RZUEVfTEFTVCAgICAgICAgICAgIDIxCi0KLSNkZWZpbmUgU0NUUF9J
U19USU1FUl9UWVBFX1ZBTElEKHQpCSgoKHQpID4gU0NUUF9USU1FUl9UWVBFX05PTkUpICYmIFwK
LQkJCQkJICgodCkgPCBTQ1RQX1RJTUVSX1RZUEVfTEFTVCkpCi0KLQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotLyogTnVtYmVyIG9mIHRpY2tzIHRvIHJ1biB0aGUgbWFpbiB0aW1lciBhdCBpbiBt
c2VjICovCi0jZGVmaW5lIFNDVFBfTUFJTl9USU1FUl9ERUZBVUxUCQkxMAotI2VuZGlmCi0KLS8q
IG1heCBudW1iZXIgb2YgVFNOJ3MgZHVwJ2QgdGhhdCBJIHdpbGwgaG9sZCAqLwotI2RlZmluZSBT
Q1RQX01BWF9EVVBfVFNOUwkyMAotCi0vKgotICogSGVyZSB3ZSBkZWZpbmUgdGhlIHR5cGVzIHVz
ZWQgd2hlbiBzZXR0aW5nIHRoZSByZXRyeSBhbW91bnRzLgotICovCi0vKiBIb3cgbWFueSBkcm9w
IHJlLWF0dGVtcHRzIHdlIG1ha2Ugb24gIElOSVQvQ09PS0lFLUVDSE8gKi8KLSNkZWZpbmUgU0NU
UF9SRVRSWV9EUk9QUEVEX1RIUkVTSCA0Ci0KLS8qCi0gKiBNYXhtaXVtIG51bWJlciBvZiBjaHVu
a3MgYSBzaW5nbGUgYXNzb2NpYXRpb24gY2FuIGhhdmUgb24gaXQuIE5vdGUgdGhhdAotICogdGhp
cyBpcyBhIHNxdWlzaHkgbnVtYmVyIHNpbmNlIHRoZSBjb3VudCBjYW4gcnVuIG92ZXIgdGhpcyBp
ZiB0aGUgdXNlcgotICogc2VuZHMgYSBsYXJnZSBtZXNzYWdlIGRvd24gLi4gdGhlIGZyYWdtZW50
ZWQgY2h1bmtzIGRvbid0IGNvdW50IHVudGlsCi0gKiBBRlRFUiB0aGUgbWVzc2FnZSBpcyBvbiBx
dWV1ZS4uIGl0IHdvdWxkIGJlIHRoZSBuZXh0IHNlbmQgdGhhdCBibG9ja3MKLSAqIHRoaW5ncy4g
VGhpcyBudW1iZXIgd2lsbCBnZXQgdHVuZWQgdXAgYXQgYm9vdCBpbiB0aGUgc2N0cF9pbml0IGFu
ZCB1c2UgdGhlCi0gKiBudW1iZXIgb2YgY2x1c3RlcnMgYXMgYSBiYXNlLiBUaGlzIHdheSBoaWdo
IGJhbmR3aWR0aCBlbnZpcm9ubWVudHMgd2lsbAotICogbm90IGdldCBpbXBhY3RlZCBieSB0aGUg
bG93ZXIgYmFuZHdpZHRoIHNlbmRpbmcgYSBidW5jaCBvZiAxIGJ5dGUgY2h1bmtzCi0gKi8KLSNp
ZmRlZiBfX1BhbmRhX18KLSNkZWZpbmUgU0NUUF9BU09DX01BWF9DSFVOS1NfT05fUVVFVUUgMTAy
NDAKLSNlbHNlCi0jZGVmaW5lIFNDVFBfQVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFIDUxMgotI2Vu
ZGlmCi0KLQotLyogVGhlIGNvbnZlcnNpb24gZnJvbSB0aW1lIHRvIHRpY2tzIGFuZCB2aWNlIHZl
cnNhIGlzIGRvbmUgYnkgcm91bmRpbmcKLSAqIHVwd2FyZHMuIFRoaXMgd2F5IHdlIGNhbiB0ZXN0
IGluIHRoZSBjb2RlIHRoZSB0aW1lIHRvIGJlIHBvc2l0aXZlIGFuZAotICoga25vdyB0aGF0IHRo
aXMgY29ycmVzcG9uZHMgdG8gYSBwb3NpdGl2ZSBudW1iZXIgb2YgdGlja3MuCi0gKi8KLSNkZWZp
bmUgTVNFQ19UT19USUNLUyh4KSAoKGh6ID09IDEwMDApID8geCA6ICgoKCh4KSAqIGh6KSArIDk5
OSkgLyAxMDAwKSkKLSNkZWZpbmUgVElDS1NfVE9fTVNFQyh4KSAoKGh6ID09IDEwMDApID8geCA6
ICgoKCh4KSAqIDEwMDApICsgKGh6IC0gMSkpIC8gaHopKQotCi0jZGVmaW5lIFNFQ19UT19USUNL
Uyh4KSAoKHgpICogaHopCi0jZGVmaW5lIFRJQ0tTX1RPX1NFQyh4KSAoKCh4KSArIChoeiAtIDEp
KSAvIGh6KQotCi0vKgotICogQmFzaWNhbGx5IHRoZSBtaW5pbXVtIGFtb3VudCBvZiB0aW1lIGJl
Zm9yZSBJIGRvIGEgZWFybHkgRlIuIE1ha2luZyB0aGlzCi0gKiB2YWx1ZSB0byBsb3cgd2lsbCBj
YXVzZSBkdXBsaWNhdGUgcmV0cmFuc21pc3Npb25zLgotICovCi0jZGVmaW5lIFNDVFBfTUlORlJf
TVNFQ19USU1FUiAyNTAKLS8qIFRoZSBmbG9vciB0aGlzIHZhbHVlIGlzIGFsbG93ZWQgdG8gZmFs
bCB0byB3aGVuIHN0YXJ0aW5nIGEgdGltZXIuICovCi0jZGVmaW5lIFNDVFBfTUlORlJfTVNFQ19G
TE9PUiAyMAotCi0vKiBpbml0IHRpbWVyIGRlZiA9IDEgc2VjICovCi0jZGVmaW5lIFNDVFBfSU5J
VF9TRUMJMQotCi0vKiBzZW5kIHRpbWVyIGRlZiA9IDEgc2Vjb25kcyAqLwotI2RlZmluZSBTQ1RQ
X1NFTkRfU0VDCTEKLQotLyogcmVjdiB0aW1lciBkZWYgPSAyMDBtcyAgKi8KLSNkZWZpbmUgU0NU
UF9SRUNWX01TRUMJMjAwCi0KLS8qIDMwIHNlY29uZHMgKyBSVE8gKGluIG1zKSAqLwotI2RlZmlu
ZSBTQ1RQX0hCX0RFRkFVTFRfTVNFQwkzMDAwMAotCi0vKgotICogVGhpcyBpcyBob3cgbG9uZyBh
IHNlY3JldCBsaXZlcywgTk9UIGhvdyBsb25nIGEgY29va2llIGxpdmVzIGhvdyBtYW55Ci0gKiB0
aWNrcyB0aGUgY3VycmVudCBzZWNyZXQgd2lsbCBsaXZlLgotICovCi0jZGVmaW5lIFNDVFBfREVG
QVVMVF9TRUNSRVRfTElGRV9TRUMgMzYwMAotCi0jZGVmaW5lIFNDVFBfUlRPX1VQUEVSX0JPVU5E
CSg2MDAwMCkJLyogNjAgc2VjIGluIG1zICovCi0jZGVmaW5lIFNDVFBfUlRPX0xPV0VSX0JPVU5E
CSgxMDAwKQkvKiAxIHNlYyBpcyBtcyAqLwotI2RlZmluZSBTQ1RQX1JUT19JTklUSUFMCSgzMDAw
KQkvKiAzIHNlYyBpbiBtcyAqLwotCi0KLSNkZWZpbmUgU0NUUF9JTlBfS0lMTF9USU1FT1VUIDIw
CS8qIG51bWJlciBvZiBtcyB0byByZXRyeSBraWxsIG9mIGlucGNiICovCi0jZGVmaW5lIFNDVFBf
QVNPQ19LSUxMX1RJTUVPVVQgMTAJLyogbnVtYmVyIG9mIG1zIHRvIHJldHJ5IGtpbGwgb2YgaW5w
Y2IgKi8KLQotI2RlZmluZSBTQ1RQX0RFRl9NQVhfSU5JVAkJOAotI2RlZmluZSBTQ1RQX0RFRl9N
QVhfU0VORAkJMTAKLSNkZWZpbmUgU0NUUF9ERUZfTUFYX1BBVEhfUlRYCQk1Ci0jZGVmaW5lIFND
VFBfREVGX1BBVEhfUEZfVEhSRVNIT0xECVNDVFBfREVGX01BWF9QQVRIX1JUWAotCi0jZGVmaW5l
IFNDVFBfREVGX1BNVFVfUkFJU0VfU0VDCTYwMAkvKiAxMCBtaW4gYmV0d2VlbiByYWlzZSBhdHRl
bXB0cyAqLwotCi0KLS8qIEhvdyBtYW55IHN0cmVhbXMgSSByZXF1ZXN0IGluaXRpYWxseSBieSBk
ZWZhdWx0ICovCi0jZGVmaW5lIFNDVFBfT1NUUkVBTV9JTklUSUFMIDEwCi0jZGVmaW5lIFNDVFBf
SVNUUkVBTV9JTklUSUFMIDIwNDgKLQotLyoKLSAqIEhvdyBtYW55IHNtYWxsZXN0X210dSdzIG5l
ZWQgdG8gaW5jcmVhc2UgYmVmb3JlIGEgd2luZG93IHVwZGF0ZSBzYWNrIGlzCi0gKiBzZW50IChz
aG91bGQgYmUgYSBwb3dlciBvZiAyKS4KLSAqLwotLyogU2VuZCB3aW5kb3cgdXBkYXRlIChpbmNy
ICogdGhpcyA+IGhpd2F0KS4gU2hvdWxkIGJlIGEgcG93ZXIgb2YgMiAqLwotI2RlZmluZSBTQ1RQ
X01JTklNQUxfUldORAkJKDQwOTYpCS8qIG1pbmltYWwgcnduZCAqLwotCi0jZGVmaW5lIFNDVFBf
QUREUk1BWAkJMTYKLQotLyogU0NUUCBERUJVRyBTd2l0Y2ggcGFyYW1ldGVycyAqLwotI2RlZmlu
ZSBTQ1RQX0RFQlVHX1RJTUVSMQkweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfREVCVUdfVElNRVIy
CTB4MDAwMDAwMDIJLyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfVElNRVIzCTB4MDAw
MDAwMDQJLyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfVElNRVI0CTB4MDAwMDAwMDgK
LSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQxCTB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9ERUJV
R19PVVRQVVQyCTB4MDAwMDAwMjAKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQzCTB4MDAwMDAw
NDAKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQ0CTB4MDAwMDAwODAKLSNkZWZpbmUgU0NUUF9E
RUJVR19VVElMMQkweDAwMDAwMTAwCi0jZGVmaW5lIFNDVFBfREVCVUdfVVRJTDIJMHgwMDAwMDIw
MAkvKiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJVR19BVVRIMQkweDAwMDAwNDAwCi0jZGVm
aW5lIFNDVFBfREVCVUdfQVVUSDIJMHgwMDAwMDgwMAkvKiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NU
UF9ERUJVR19JTlBVVDEJMHgwMDAwMTAwMAotI2RlZmluZSBTQ1RQX0RFQlVHX0lOUFVUMgkweDAw
MDAyMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfSU5QVVQzCTB4MDAwMDQwMDAKLSNkZWZpbmUgU0NU
UF9ERUJVR19JTlBVVDQJMHgwMDAwODAwMAkvKiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJV
R19BU0NPTkYxCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0NUUF9ERUJVR19BU0NPTkYyCTB4MDAwMjAw
MDAKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQ1CTB4MDAwNDAwMDAJLyogdW51c2VkICovCi0j
ZGVmaW5lIFNDVFBfREVCVUdfWFhYCQkweDAwMDgwMDAwCS8qIHVudXNlZCAqLwotI2RlZmluZSBT
Q1RQX0RFQlVHX1BDQjEJCTB4MDAxMDAwMDAKLSNkZWZpbmUgU0NUUF9ERUJVR19QQ0IyCQkweDAw
MjAwMDAwCS8qIHVudXNlZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX1BDQjMJCTB4MDA0MDAwMDAK
LSNkZWZpbmUgU0NUUF9ERUJVR19QQ0I0CQkweDAwODAwMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdf
SU5EQVRBMQkweDAxMDAwMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfSU5EQVRBMgkweDAyMDAwMDAw
CS8qIHVudXNlZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX0lOREFUQTMJMHgwNDAwMDAwMAkvKiB1
bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJVR19DUkNPRkZMT0FECTB4MDgwMDAwMDAJLyogdW51
c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfVVNSUkVRMQkweDEwMDAwMDAwCS8qIHVudXNlZCAq
LwotI2RlZmluZSBTQ1RQX0RFQlVHX1VTUlJFUTIJMHgyMDAwMDAwMAkvKiB1bnVzZWQgKi8KLSNk
ZWZpbmUgU0NUUF9ERUJVR19QRUVMMQkweDQwMDAwMDAwCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotI2RlZmluZSBTQ1RQX0RFQlVHX1VTUiAJCTB4ODAwMDAwMDAKLSNlbHNlCi0jZGVmaW5l
IFNDVFBfREVCVUdfWFhYWFgJMHg4MDAwMDAwMAkvKiB1bnVzZWQgKi8KLSNlbmRpZgotI2RlZmlu
ZSBTQ1RQX0RFQlVHX0FMTAkJMHg3ZmYzZmZmZgotI2RlZmluZSBTQ1RQX0RFQlVHX05PSVNZCTB4
MDAwNDAwMDAKLQotLyogV2hhdCBzZW5kZXIgbmVlZHMgdG8gc2VlIHRvIGF2b2lkIFNXUyBvciB3
ZSBjb25zaWRlciBwZWVycyByd25kIDAgKi8KLSNkZWZpbmUgU0NUUF9TV1NfU0VOREVSX0RFRgkx
NDIwCi0KLS8qCi0gKiBTV1MgaXMgc2NhbGVkIHRvIHRoZSBzYl9oaXdhdCBvZiB0aGUgc29ja2V0
LiBBIHZhbHVlIG9mIDIgaXMgaGl3YXQvNCwgMQotICogd291bGQgYmUgaGl3YXQvMiBldGMuCi0g
Ki8KLS8qIFdoYXQgcmVjZWl2ZXIgbmVlZHMgdG8gc2VlIGluIHNvY2tidWYgb3Igd2UgdGVsbCBw
ZWVyIGl0cyAxICovCi0jZGVmaW5lIFNDVFBfU1dTX1JFQ0VJVkVSX0RFRgkzMDAwCi0KLSNkZWZp
bmUgU0NUUF9JTklUSUFMX0NXTkQgNDM4MAotCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9NVFUgMTUw
MCAvKiBlbWVyZ2VuY3kgZGVmYXVsdCBNVFUgKi8KLS8qIGFtb3VudCBwZWVyIGlzIG9ibGlnYXRl
ZCB0byBoYXZlIGluIHJ3bmQgb3IgSSB3aWxsIGFib3J0ICovCi0jZGVmaW5lIFNDVFBfTUlOX1JX
TkQJMTUwMAotCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UIDY1NTM1Ci0KLSNkZWZp
bmUgU0NUUF9DSFVOS19CVUZGRVJfU0laRQk1MTIKLSNkZWZpbmUgU0NUUF9QQVJBTV9CVUZGRVJf
U0laRQk1MTIKLQotLyogc21hbGwgY2h1bmsgc3RvcmUgZm9yIGxvb2tpbmcgYXQgY2h1bmtfbGlz
dCBpbiBhdXRoICovCi0jZGVmaW5lIFNDVFBfU01BTExfQ0hVTktfU1RPUkUgMjYwCi0KLSNkZWZp
bmUgU0NUUF9IT1dfTUFOWV9TRUNSRVRTCTIJLyogaG93IG1hbnkgc2VjcmV0cyBJIGtlZXAgKi8K
LQotI2RlZmluZSBTQ1RQX05VTUJFUl9PRl9TRUNSRVRTCTgJLyogb3IgOCAqIDQgPSAzMiBvY3Rl
dHMgKi8KLSNkZWZpbmUgU0NUUF9TRUNSRVRfU0laRQkzMgkvKiBudW1iZXIgb2Ygb2N0ZXRzIGlu
IGEgMjU2IGJpdHMgKi8KLQotCi0vKgotICogU0NUUCB1cHBlciBsYXllciBub3RpZmljYXRpb25z
Ci0gKi8KLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfVVAgICAgICAgICAgICAgICAgICAgICAx
Ci0jZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX0RPV04gICAgICAgICAgICAgICAgICAgMgotI2Rl
ZmluZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiAgICAgICAgICAgICAgIDMKLSNkZWZpbmUg
U0NUUF9OT1RJRllfSU5URVJGQUNFX1VQICAgICAgICAgICAgICAgICA0Ci0jZGVmaW5lIFNDVFBf
Tk9USUZZX1NFTlRfREdfRkFJTCAgICAgICAgICAgICAgICAgNQotI2RlZmluZSBTQ1RQX05PVElG
WV9VTlNFTlRfREdfRkFJTCAgICAgICAgICAgICAgIDYKLSNkZWZpbmUgU0NUUF9OT1RJRllfU1BF
Q0lBTF9TUF9GQUlMICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX0xP
Q19BQk9SVEVEICAgICAgICAgICAgOAotI2RlZmluZSBTQ1RQX05PVElGWV9BU1NPQ19SRU1fQUJP
UlRFRCAgICAgICAgICAgIDkKLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfUkVTVEFSVCAgICAg
ICAgICAgICAgIDEwCi0jZGVmaW5lIFNDVFBfTk9USUZZX1BFRVJfU0hVVERPV04gICAgICAgICAg
ICAgICAxMQotI2RlZmluZSBTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQICAgICAgICAgICAgICAg
MTIKLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCAgICAgICAgICAgIDEzCi0j
ZGVmaW5lIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWSAgICAgICAgICAxNAotI2RlZmlu
ZSBTQ1RQX05PVElGWV9QQVJUSUFMX0RFTFZJRVJZX0lORElDQVRJT04gMTUKLSNkZWZpbmUgU0NU
UF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRCAgICAgICAgIDE2Ci0jZGVmaW5lIFNDVFBfTk9U
SUZZX1NUUl9SRVNFVF9SRUNWICAgICAgICAgICAgICAxNwotI2RlZmluZSBTQ1RQX05PVElGWV9T
VFJfUkVTRVRfU0VORCAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JF
U0VUX0ZBSUxFRF9PVVQgICAgICAgIDE5Ci0jZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9G
QUlMRURfSU4gICAgICAgICAyMAotI2RlZmluZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVOSUVE
X09VVCAgICAgICAgMjEKLSNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklFRF9JTiAg
ICAgICAgIDIyCi0jZGVmaW5lIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tFWSAgICAgICAgICAgICAg
ICAyMwotI2RlZmluZSBTQ1RQX05PVElGWV9BVVRIX0ZSRUVfS0VZICAgICAgICAgICAgICAgMjQK
LSNkZWZpbmUgU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRIICAgICAgICAgICAgICAgIDI1Ci0jZGVm
aW5lIFNDVFBfTk9USUZZX1NFTkRFUl9EUlkgICAgICAgICAgICAgICAgICAyNgotI2RlZmluZSBT
Q1RQX05PVElGWV9SRU1PVEVfRVJST1IgICAgICAgICAgICAgICAgMjcKLQotLyogVGhpcyBpcyB0
aGUgdmFsdWUgZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIE5PVCBjb21wbGV0ZWx5Ci0gKiBjb3BpZWQg
ZG93biB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHRvIHNwbGl0IHRoZSBtZXNzYWdlLgotICogU28sIHdp
dGggb3VyIGRlZmF1bHQsIHdlIHNwbGl0IG9ubHkgaWYgdGhlIHBpZWNlIHdlCi0gKiB3YW50IHRv
IHRha2Ugd2lsbCBmaWxsIHVwIGEgZnVsbCBNVFUgKGFzc3VtaW5nCi0gKiBhIDE1MDAgYnl0ZSBN
VFUpLgotICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9TUExJVF9QT0lOVF9NSU4gMjkwNAotCi0v
KiBNYXhpbXVtIGxlbmd0aCBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9uIGluIGVycm9yIGNhdXNl
cyAqLwotI2RlZmluZSBTQ1RQX0RJQUdfSU5GT19MRU4gMTI4Ci0KLS8qIEFCT1JUIENPREVTIGFu
ZCBvdGhlciB0ZWxsLXRhbGUgbG9jYXRpb24KLSAqIGNvZGVzIGFyZSBnZW5lcmF0ZWQgYnkgYWRk
aW5nIHRoZSBiZWxvdwotICogdG8gdGhlIGluc3RhbmNlIGlkLgotICovCi0KLS8qIEZpbGUgZGVm
aW5lcyAqLwotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9JTlBVVCAgICAgICAgMHgxMDAwMDAwMAot
I2RlZmluZSBTQ1RQX0ZST01fU0NUUF9QQ0IgICAgICAgICAgMHgyMDAwMDAwMAotI2RlZmluZSBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgICAgICAgMHgzMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01f
U0NUUF9USU1FUiAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEgICAgICAgMHg1MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUFVUSUwgICAgICAgICAg
MHg2MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRICAgICAgMHg3MDAwMDAw
MAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9BU0NPTkYgICAgICAgMHg4MDAwMDAwMAotI2RlZmlu
ZSBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgICAgICAgMHg5MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZS
T01fU0NUUF9QRUVMT0ZGICAgICAgMHhhMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9Q
QU5EQSAgICAgICAgMHhiMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9TWVNDVEwgICAg
ICAgMHhjMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgMHhkMDAw
MDAwMAotCi0vKiBMb2NhdGlvbiBJRCdzICovCi0jZGVmaW5lIFNDVFBfTE9DXzEgIDB4MDAwMDAw
MDEKLSNkZWZpbmUgU0NUUF9MT0NfMiAgMHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQX0xPQ18zICAw
eDAwMDAwMDAzCi0jZGVmaW5lIFNDVFBfTE9DXzQgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU0NUUF9M
T0NfNSAgMHgwMDAwMDAwNQotI2RlZmluZSBTQ1RQX0xPQ182ICAweDAwMDAwMDA2Ci0jZGVmaW5l
IFNDVFBfTE9DXzcgIDB4MDAwMDAwMDcKLSNkZWZpbmUgU0NUUF9MT0NfOCAgMHgwMDAwMDAwOAot
I2RlZmluZSBTQ1RQX0xPQ185ICAweDAwMDAwMDA5Ci0jZGVmaW5lIFNDVFBfTE9DXzEwIDB4MDAw
MDAwMGEKLSNkZWZpbmUgU0NUUF9MT0NfMTEgMHgwMDAwMDAwYgotI2RlZmluZSBTQ1RQX0xPQ18x
MiAweDAwMDAwMDBjCi0jZGVmaW5lIFNDVFBfTE9DXzEzIDB4MDAwMDAwMGQKLSNkZWZpbmUgU0NU
UF9MT0NfMTQgMHgwMDAwMDAwZQotI2RlZmluZSBTQ1RQX0xPQ18xNSAweDAwMDAwMDBmCi0jZGVm
aW5lIFNDVFBfTE9DXzE2IDB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9MT0NfMTcgMHgwMDAwMDAx
MQotI2RlZmluZSBTQ1RQX0xPQ18xOCAweDAwMDAwMDEyCi0jZGVmaW5lIFNDVFBfTE9DXzE5IDB4
MDAwMDAwMTMKLSNkZWZpbmUgU0NUUF9MT0NfMjAgMHgwMDAwMDAxNAotI2RlZmluZSBTQ1RQX0xP
Q18yMSAweDAwMDAwMDE1Ci0jZGVmaW5lIFNDVFBfTE9DXzIyIDB4MDAwMDAwMTYKLSNkZWZpbmUg
U0NUUF9MT0NfMjMgMHgwMDAwMDAxNwotI2RlZmluZSBTQ1RQX0xPQ18yNCAweDAwMDAwMDE4Ci0j
ZGVmaW5lIFNDVFBfTE9DXzI1IDB4MDAwMDAwMTkKLSNkZWZpbmUgU0NUUF9MT0NfMjYgMHgwMDAw
MDAxYQotI2RlZmluZSBTQ1RQX0xPQ18yNyAweDAwMDAwMDFiCi0jZGVmaW5lIFNDVFBfTE9DXzI4
IDB4MDAwMDAwMWMKLSNkZWZpbmUgU0NUUF9MT0NfMjkgMHgwMDAwMDAxZAotI2RlZmluZSBTQ1RQ
X0xPQ18zMCAweDAwMDAwMDFlCi0jZGVmaW5lIFNDVFBfTE9DXzMxIDB4MDAwMDAwMWYKLSNkZWZp
bmUgU0NUUF9MT0NfMzIgMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0xPQ18zMyAweDAwMDAwMDIx
Ci0jZGVmaW5lIFNDVFBfTE9DXzM0IDB4MDAwMDAwMjIKLSNkZWZpbmUgU0NUUF9MT0NfMzUgMHgw
MDAwMDAyMwotCi0KLS8qIEZyZWUgYXNzb2MgY29kZXMgKi8KLSNkZWZpbmUgU0NUUF9OT1JNQUxf
UFJPQyAgICAgIDAKLSNkZWZpbmUgU0NUUF9QQ0JGUkVFX05PRk9SQ0UgIDEKLSNkZWZpbmUgU0NU
UF9QQ0JGUkVFX0ZPUkNFICAgIDIKLQotLyogRnJvbSBjb2RlcyBmb3IgYWRkaW5nIGFkZHJlc3Nl
cyAqLwotI2RlZmluZSBTQ1RQX0FERFJfSVNfQ09ORklSTUVEIDgKLSNkZWZpbmUgU0NUUF9BRERS
X0RZTkFNSUNfQURERUQgNgotI2RlZmluZSBTQ1RQX0lOX0NPT0tJRV9QUk9DIDEwMAotI2RlZmlu
ZSBTQ1RQX0FMTE9DX0FTT0MgIDEKLSNkZWZpbmUgU0NUUF9MT0FEX0FERFJfMiAyCi0jZGVmaW5l
IFNDVFBfTE9BRF9BRERSXzMgMwotI2RlZmluZSBTQ1RQX0xPQURfQUREUl80IDQKLSNkZWZpbmUg
U0NUUF9MT0FEX0FERFJfNSA1Ci0KLSNkZWZpbmUgU0NUUF9ET05PVF9TRVRTQ09QRSAwCi0jZGVm
aW5lIFNDVFBfRE9fU0VUU0NPUEUgMQotCi0KLS8qIFRoaXMgdmFsdWUgZGV0ZXJtaW5lcyB0aGUg
ZGVmYXVsdCBmb3Igd2hlbgotICogd2UgdHJ5IHRvIGFkZCBtb3JlIG9uIHRoZSBzZW5kIHF1ZXVl
LiwgaWYKLSAqIHRoZXJlIGlzIHJvb20uIFRoaXMgcHJldmVudHMgdXMgZnJvbSBjeWNsaW5nCi0g
KiBpbnRvIHRoZSBjb3B5X3Jlc3VtZSByb3V0aW5lIHRvIG9mdGVuIGlmCi0gKiB3ZSBoYXZlIG5v
dCBnb3QgZW5vdWdoIHNwYWNlIHRvIGFkZCBhIGRlY2VudAotICogZW5vdWdoIHNpemUgbWVzc2Fn
ZS4gTm90ZSB0aGF0IGlmIHdlIGhhdmUgZW5vdWdoCi0gKiBzcGFjZSB0byBjb21wbGV0ZSB0aGUg
bWVzc2FnZSBjb3B5IHdlIHdpbGwgYWx3YXlzCi0gKiBhZGQgdG8gdGhlIG1lc3NhZ2UsIG5vIG1h
dHRlciB3aGF0IHRoZSBzaXplLiBJdHMKLSAqIG9ubHkgd2hlbiB3ZSByZWFjaCB0aGUgcG9pbnQg
dGhhdCB3ZSBoYXZlIHNvbWUgbGVmdAotICogdG8gYWRkLCB0aGVyZSBpcyBvbmx5IHJvb20gZm9y
IHBhcnQgb2YgaXQgdGhhdCB3ZQotICogd2lsbCB1c2UgdGhpcyB0aHJlc2hvbGQuIEl0cyBhbHNv
IGEgc3lzY3RsLgotICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9BRERfTU9SRSAxNDUyCi0KLSNp
Zm5kZWYgU0NUUF9QQ0JIQVNIU0laRQotLyogZGVmYXVsdCBudW1iZXIgb2YgYXNzb2NpYXRpb24g
aGFzaCBidWNrZXRzIGluIGVhY2ggZW5kcG9pbnQgKi8KLSNkZWZpbmUgU0NUUF9QQ0JIQVNIU0la
RSAyNTYKLSNlbmRpZgotI2lmbmRlZiBTQ1RQX1RDQkhBU0hTSVpFCi0jZGVmaW5lIFNDVFBfVENC
SEFTSFNJWkUgMTAyNAotI2VuZGlmCi0KLSNpZm5kZWYgU0NUUF9DSFVOS1FVRVVFX1NDQUxFCi0j
ZGVmaW5lIFNDVFBfQ0hVTktRVUVVRV9TQ0FMRSAxMAotI2VuZGlmCi0KLSNpZmRlZiBfX0ZyZWVC
U0RfXwotLyogY2xvY2sgdmFyaWFuY2UgaXMgMSBtcyAqLwotI2RlZmluZSBTQ1RQX0NMT0NLX0dS
QU5VTEFSSVRZCTEKLSNlbHNlCi0vKiBjbG9jayB2YXJpYW5jZSBpcyAxMCBtcyAqLwotI2RlZmlu
ZSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZCTEwCi0jZW5kaWYKLSNkZWZpbmUgSVBfSERSX1NJWkUg
NDAJCS8qIHdlIHVzZSB0aGUgc2l6ZSBvZiBhIElQNiBoZWFkZXIgaGVyZSB0aGlzCi0JCQkJICog
ZGV0cmFjdHMgYSBzbWFsbCBhbW91bnQgZm9yIGlwdjQgYnV0IGl0Ci0JCQkJICogc2ltcGxpZmll
cyB0aGUgaXB2NiBhZGRpdGlvbiAqLwotCi0vKiBBcmd1bWVudCBtYWdpYyBudW1iZXIgZm9yIHNj
dHBfaW5wY2JfZnJlZSgpICovCi0KLS8qIHRoaXJkIGFyZ3VtZW50ICovCi0jZGVmaW5lIFNDVFBf
Q0FMTEVEX0RJUkVDVExZX05PQ01QU0VUICAgICAwCi0jZGVmaW5lIFNDVFBfQ0FMTEVEX0FGVEVS
X0NNUFNFVF9PRkNMT1NFICAxCi0jZGVmaW5lIFNDVFBfQ0FMTEVEX0ZST01fSU5QS0lMTF9USU1F
UiAgICAyCi0vKiBzZWNvbmQgYXJndW1lbnQgKi8KLSNkZWZpbmUgU0NUUF9GUkVFX1NIT1VMRF9V
U0VfQUJPUlQgICAgICAgICAgMQotI2RlZmluZSBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9HUkFDRUZV
TF9DTE9TRSAwCi0KLSNpZm5kZWYgSVBQUk9UT19TQ1RQCi0jZGVmaW5lIElQUFJPVE9fU0NUUCAx
MzIJLyogdGhlIE9mZmljaWFsIElBTkEgbnVtYmVyIDotKSAqLwotI2VuZGlmCQkJCS8qICFJUFBS
T1RPX1NDVFAgKi8KLQotI2RlZmluZSBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HCQkyNTYKLQotLyog
bW9kdWxhciBjb21wYXJpc29uICovCi0vKiBTZWUgUkZDIDE5ODIgZm9yIGRldGFpbHMuICovCi0j
ZGVmaW5lIFNDVFBfVUlOVDE2X0dUKGEsIGIpICgoKGEgPCBiKSAmJiAoKHVpbnQxNl90KShiIC0g
YSkgPiAoMVU8PDE1KSkpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYSA+
IGIpICYmICgodWludDE2X3QpKGEgLSBiKSA8ICgxVTw8MTUpKSkpCi0jZGVmaW5lIFNDVFBfVUlO
VDE2X0dFKGEsIGIpIChTQ1RQX1VJTlQxNl9HVChhLCBiKSB8fCAoYSA9PSBiKSkKLSNkZWZpbmUg
U0NUUF9VSU5UMzJfR1QoYSwgYikgKCgoYSA8IGIpICYmICgodWludDMyX3QpKGIgLSBhKSA+ICgx
VTw8MzEpKSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChhID4gYikgJiYg
KCh1aW50MzJfdCkoYSAtIGIpIDwgKDFVPDwzMSkpKSkKLSNkZWZpbmUgU0NUUF9VSU5UMzJfR0Uo
YSwgYikgKFNDVFBfVUlOVDMyX0dUKGEsIGIpIHx8IChhID09IGIpKQotCi0jZGVmaW5lIFNDVFBf
U1NOX0dUKGEsIGIpIFNDVFBfVUlOVDE2X0dUKGEsIGIpCi0jZGVmaW5lIFNDVFBfU1NOX0dFKGEs
IGIpIFNDVFBfVUlOVDE2X0dFKGEsIGIpCi0jZGVmaW5lIFNDVFBfVFNOX0dUKGEsIGIpIFNDVFBf
VUlOVDMyX0dUKGEsIGIpCi0jZGVmaW5lIFNDVFBfVFNOX0dFKGEsIGIpIFNDVFBfVUlOVDMyX0dF
KGEsIGIpCi0jZGVmaW5lIFNDVFBfTUlEX0dUKGksIGEsIGIpICgoKGkpID09IDEpID8gU0NUUF9V
SU5UMzJfR1QoYSwgYikgOiBTQ1RQX1VJTlQxNl9HVCgodWludDE2X3QpYSwgKHVpbnQxNl90KWIp
KQotI2RlZmluZSBTQ1RQX01JRF9HRShpLCBhLCBiKSAoKChpKSA9PSAxKSA/IFNDVFBfVUlOVDMy
X0dFKGEsIGIpIDogU0NUUF9VSU5UMTZfR0UoKHVpbnQxNl90KWEsICh1aW50MTZfdCliKSkKLSNk
ZWZpbmUgU0NUUF9NSURfRVEoaSwgYSwgYikgKCgoaSkgPT0gMSkgPyBhID09IGIgOiAodWludDE2
X3QpYSA9PSAodWludDE2X3QpYikKLQotLyogTWFwcGluZyBhcnJheSBtYW5pcHVsYXRpb24gcm91
dGluZXMgKi8KLSNkZWZpbmUgU0NUUF9JU19UU05fUFJFU0VOVChhcnJ5LCBnYXApICgoYXJyeVso
Z2FwID4+IDMpXSA+PiAoZ2FwICYgMHgwNykpICYgMHgwMSkKLSNkZWZpbmUgU0NUUF9TRVRfVFNO
X1BSRVNFTlQoYXJyeSwgZ2FwKSAoYXJyeVsoZ2FwID4+IDMpXSB8PSAoMHgwMSA8PCAoKGdhcCAm
IDB4MDcpKSkpCi0jZGVmaW5lIFNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXJyeSwgZ2FwKSAoYXJy
eVsoZ2FwID4+IDMpXSAmPSAoKH4oMHgwMSA8PCAoKGdhcCAmIDB4MDcpKSkpICYgMHhmZikpCi0j
ZGVmaW5lIFNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNuLCBtYXBwaW5nX3RzbikgZG8geyBc
Ci0JICAgICAgICAgICAgICAgIGlmICh0c24gPj0gbWFwcGluZ190c24pIHsgXAotCQkJCQkJZ2Fw
ID0gdHNuIC0gbWFwcGluZ190c247IFwKLQkJCQkJfSBlbHNlIHsgXAotCQkJCQkJZ2FwID0gKE1B
WF9UU04gLSBtYXBwaW5nX3RzbikgKyB0c24gKyAxOyBcCi0JCQkJCX0gXAotICAgICAgICAgICAg
ICAgICAgfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIFNDVFBfUkVUUkFOX0RPTkUgLTEKLSNkZWZp
bmUgU0NUUF9SRVRSQU5fRVhJVCAtMgotCi0vKgotICogVGhpcyB2YWx1ZSBkZWZpbmVzIHRoZSBu
dW1iZXIgb2YgdnRhZyBibG9jayB0aW1lIHdhaXQgZW50cnkncyBwZXIgbGlzdAotICogZWxlbWVu
dC4gIEVhY2ggZW50cnkgd2lsbCB0YWtlIDIgNCBieXRlIGludHMgKGFuZCBvZiBjb3Vyc2UgdGhl
IG92ZXJoZWFkCi0gKiBvZiB0aGUgbmV4dCBwb2ludGVyIGFzIHdlbGwpLiBVc2luZyAxNSBhcyBh
biBleGFtcGxlIHdpbGwgeWllbGQgKiAoKDggKgotICogMTUpICsgOCkgb3IgMTI4IGJ5dGVzIG9m
IG92ZXJoZWFkIGZvciBlYWNoIHRpbWV3YWl0IGJsb2NrIHRoYXQgZ2V0cwotICogaW5pdGlhbGl6
ZWQuIEluY3JlYXNpbmcgaXQgdG8gMzEgd291bGQgeWllbGQgMjU2IGJ5dGVzIHBlciBibG9jay4K
LSAqLwotI2RlZmluZSBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLIDE1Ci0vKgotICogSWYgd2Ug
dXNlIHRoZSBTVEFDSyBvcHRpb24sIHdlIGhhdmUgYW4gYXJyYXkgb2YgdGhpcyBzaXplIGhlYWQg
cG9pbnRlcnMuCi0gKiBUaGlzIGFycmF5IGlzIG1vZCdkIHRoZSB3aXRoIHRoZSBzaXplIHRvIGZp
bmQgd2hpY2ggYnVja2V0IGFuZCB0aGVuIGFsbAotICogZW50cmllcyBtdXN0IGJlIHNlYXJjaGVk
IHRvIHNlZSBpZiB0aGUgdGFnIGlzIGluIHRpbWVkIHdhaXQuIElmIHNvIHdlCi0gKiByZWplY3Qg
aXQuCi0gKi8KLSNkZWZpbmUgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRSAgIDMyCi0KLS8qCi0g
KiBOdW1iZXIgb2Ygc2Vjb25kcyBvZiB0aW1lIHdhaXQgZm9yIGEgdnRhZy4KLSAqLwotI2RlZmlu
ZSBTQ1RQX1RJTUVfV0FJVCA2MAotCi0vKiBIb3cgbWFueSBtaWNybyBzZWNvbmRzIGlzIHRoZSBj
dXRvZmYgZnJvbQotICogbG9jYWwgbGFuIHR5cGUgcnR0J3MKLSAqLwotIC8qCi0gICogV2UgYWxs
b3cgOTAwdXMgZm9yIHRoZSBydHQuCi0gICovCi0jZGVmaW5lIFNDVFBfTE9DQUxfTEFOX1JUVCA5
MDAKLSNkZWZpbmUgU0NUUF9MQU5fVU5LTk9XTiAgMAotI2RlZmluZSBTQ1RQX0xBTl9MT0NBTCAg
ICAxCi0jZGVmaW5lIFNDVFBfTEFOX0lOVEVSTkVUIDIKLQotI2RlZmluZSBTQ1RQX1NFTkRfQlVG
RkVSX1NQTElUVElORyAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfUkVDVl9CVUZGRVJfU1BMSVRU
SU5HIDB4MDAwMDAwMDIKLQotLyogVGhlIHN5c3RlbSByZXRhaW5zIGEgY2FjaGUgb2YgZnJlZSBj
aHVua3Mgc3VjaCB0bwotICogY3V0IGRvd24gb24gY2FsbHMgdGhlIG1lbW9yeSBhbGxvY2F0aW9u
IHN5c3RlbS4gVGhlcmUKLSAqIGlzIGEgcGVyIGFzc29jaWF0aW9uIGxpbWl0IG9mIGZyZWUgaXRl
bXMgYW5kIGEgb3ZlcmFsbAotICogc3lzdGVtIGxpbWl0LiBJZiBlaXRoZXIgb25lIGdldHMgaGl0
IHRoZW4gdGhlIHJlc291cmNlCi0gKiBzdG9wcyBiZWluZyBjYWNoZWQuCi0gKi8KLQotI2RlZmlu
ZSBTQ1RQX0RFRl9BU09DX1JFU0NfTElNSVQgMTAKLSNkZWZpbmUgU0NUUF9ERUZfU1lTVEVNX1JF
U0NfTElNSVQgMTAwMAotCi0vKi0KLSAqIGRlZmluZXMgZm9yIHNvY2tldCBsb2NrIHN0YXRlcy4K
LSAqIFVzZWQgYnkgX19BUFBMRV9fIGFuZCBTQ1RQX1NPX0xPQ0tfVEVTVElORwotICovCi0jZGVm
aW5lIFNDVFBfU09fTE9DS0VECQkxCi0jZGVmaW5lIFNDVFBfU09fTk9UX0xPQ0tFRAkwCi0KLQot
I2RlZmluZSBTQ1RQX0hPTERTX0xPQ0sgMQotI2RlZmluZSBTQ1RQX05PVF9MT0NLRUQgMAotCi0v
Ki0KLSAqIEZvciBhZGRyZXNzIGxvY2tzLCBkbyB3ZSBob2xkIHRoZSBsb2NrPwotICovCi0jZGVm
aW5lIFNDVFBfQUREUl9MT0NLRUQgMQotI2RlZmluZSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCAwCi0K
LSNkZWZpbmUgSU40X0lTUFJJVkFURV9BRERSRVNTKGEpIFwKLSAgICgoKCh1aW50OF90ICopJihh
KS0+c19hZGRyKVswXSA9PSAxMCkgfHwgXAotICAgICgoKCh1aW50OF90ICopJihhKS0+c19hZGRy
KVswXSA9PSAxNzIpICYmIFwKLSAgICAgKCgodWludDhfdCAqKSYoYSktPnNfYWRkcilbMV0gPj0g
MTYpICYmIFwKLSAgICAgKCgodWludDhfdCAqKSYoYSktPnNfYWRkcilbMV0gPD0gMzIpKSB8fCBc
Ci0gICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDE5MikgJiYgXAotICAgICAo
KCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA9PSAxNjgpKSkKLQotI2RlZmluZSBJTjRfSVNM
T09QQkFDS19BRERSRVNTKGEpIFwKLSAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVswXSA9
PSAxMjcpCi0KLSNkZWZpbmUgSU40X0lTTElOS0xPQ0FMX0FERFJFU1MoYSkgXAotICAgICgoKCh1
aW50OF90ICopJihhKS0+c19hZGRyKVswXSA9PSAxNjkpICYmIFwKLSAgICAgKCgodWludDhfdCAq
KSYoYSktPnNfYWRkcilbMV0gPT0gMjU0KSkKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfR0VUVElN
RV9USU1FVkFMKHgpCWdldHdpbnRpbWVvZmRheSh4KQotI2RlZmluZSBTQ1RQX0dFVFBUSU1FX1RJ
TUVWQUwoeCkgZ2V0d2ludGltZW9mZGF5KHgpIC8qIHRoaXMgZG9lc24ndCBzZWVtIHRvIGV2ZXIg
YmUgdXNlZC4uICovCi0jZWxzZQotI2RlZmluZSBTQ1RQX0dFVFRJTUVfVElNRVZBTCh4KQlnZXR0
aW1lb2ZkYXkoeCwgTlVMTCkKLSNkZWZpbmUgU0NUUF9HRVRQVElNRV9USU1FVkFMKHgpIGdldHRp
bWVvZmRheSh4LCBOVUxMKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX0tFUk5FTCkK
LSNkZWZpbmUgU0NUUF9HRVRUSU1FX1RJTUVWQUwoeCkgKGdldG1pY3JvdXB0aW1lKHgpKQotI2Rl
ZmluZSBTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoeCkgKG1pY3JvdXB0aW1lKHgpKQotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNkZWZpbmUg
c2N0cF9zb3d3YWtldXAoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0JCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQ
X1BDQl9GTEFHU19XQUtFT1VUUFVUOyBcCi0JfSBlbHNlIHsgXAotCQlzb3d3YWtldXAoc28pOyBc
Ci0JfSBcCi19IHdoaWxlICgwKQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2RlZmluZSBzY3RwX3Nv
d3dha2V1cF9sb2NrZWQoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0gICAgICAgICAgICAgICAgU09DS0JVRl9V
TkxPQ0soJigoc28pLT5zb19zbmQpKTsgXAotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0Jf
RkxBR1NfV0FLRU9VVFBVVDsgXAotCX0gZWxzZSB7IFwKLQkJc293d2FrZXVwX2xvY2tlZChzbyk7
IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBzY3RwX3Nvd3dha2V1cF9sb2Nr
ZWQoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0RPTlRfV0FLRSkgeyBcCi0gICAgICAgICAgICAgICAgU09DS0JVRl9VTkxPQ0soJigoc28p
LT5zb19zbmQpKTsgXAotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRU9V
VFBVVDsgXAotCX0gZWxzZSB7IFwKLQkJc293d2FrZXVwKHNvKTsgXAotCX0gXAotfSB3aGlsZSAo
MCkKLSNlbmRpZgotCi0jZGVmaW5lIHNjdHBfc29yd2FrZXVwKGlucCwgc28pIFwKLWRvIHsgXAot
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpIHsgXAotCQlp
bnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUOyBcCi0JfSBlbHNlIHsg
XAotCQlzb3J3YWtldXAoc28pOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotI2RlZmluZSBzY3RwX3Nvcndha2V1cF9sb2NrZWQoaW5wLCBzbykgXAotZG8geyBcCi0J
aWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0JCWlu
cC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKLSAgICAgICAgICAg
ICAgICBTT0NLQlVGX1VOTE9DSygmKChzbyktPnNvX3JjdikpOyBcCi0JfSBlbHNlIHsgXAotCQlz
b3J3YWtldXBfbG9ja2VkKHNvKTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0KLSNkZWZp
bmUgc2N0cF9zb3J3YWtldXBfbG9ja2VkKGlucCwgc28pIFwKLWRvIHsgXAotCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpIHsgXAotCQlpbnAtPnNjdHBfZmxh
Z3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUOyBcCi0gICAgICAgICAgICAgICAgU09DS0JV
Rl9VTkxPQ0soJigoc28pLT5zb19yY3YpKTsgXAotCX0gZWxzZSB7IFwKLQkJc29yd2FrZXVwKHNv
KTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYJCQkJLyogX0tFUk5FTCB8
fCBfX1VzZXJzcGFjZV9fKi8KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2NyYzMyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjc1MzZmMTFkMGVlMWU4YWJiYjIwNzZiMWI0OTg0NThlYjdiZTE1
Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfY3JjMzIuYworKysgL2Rldi9udWxsCkBAIC0xLDgyNSArMCwwIEBACi0v
Ki0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFs
bCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICog
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRl
ZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNE
OiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfY3JjMzIuYyAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0
MVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotCi0KLSNpZiAhZGVmaW5lZChTQ1RQX1dJ
VEhfTk9fQ1NVTSkKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDAwMDAKLSNlbHNlCi0vKioKLSAqCi0gKiBSb3V0aW5lIERlc2NyaXB0aW9uOgotICoK
LSAqIENvbXB1dGVzIHRoZSBDUkMzMmMgY2hlY2tzdW0gZm9yIHRoZSBzcGVjaWZpZWQgYnVmZmVy
IHVzaW5nIHRoZSBzbGljaW5nIGJ5IDgKLSAqIGFsZ29yaXRobSBvdmVyIDY0IGJpdCBxdWFudGl0
aWVzLgotICoKLSAqIEFyZ3VtZW50czoKLSAqCi0gKgkJcF9ydW5uaW5nX2NyYyAtIHBvaW50ZXIg
dG8gdGhlIGluaXRpYWwgb3IgZmluYWwgcmVtYWluZGVyIHZhbHVlCi0gKgkJCQl1c2VkIGluIENS
QyBjb21wdXRhdGlvbnMuIEl0IHNob3VsZCBiZSBzZXQgdG8KLSAqCQkJCW5vbi1OVUxMIGlmIHRo
ZSBtb2RlIGFyZ3VtZW50IGlzIGVxdWFsIHRvIENPTlQgb3IgRU5ECi0gKgkJcF9idWYgLSB0aGUg
cGFja2V0IGJ1ZmZlciB3aGVyZSBjcmMgY29tcHV0YXRpb25zIGFyZSBiZWluZyBwZXJmb3JtZWQK
LSAqCQlsZW5ndGggLSB0aGUgbGVuZ3RoIG9mIHBfYnVmIGluIGJ5dGVzCi0gKgkJaW5pdF9ieXRl
cyAtIHRoZSBudW1iZXIgb2YgaW5pdGlhbCBieXRlcyB0aGF0IG5lZWQgdG8gYmUgcHJvY2VzZWQg
YmVmb3JlCi0gKgkJCQkJIGFsaWduaW5nIHBfYnVmIHRvIG11bHRpcGxlcyBvZiA0IGJ5dGVzCi0g
KgkJbW9kZSAtIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzogQkVHSU4sIENPTlQsIEVORCwg
Qk9EWSwgQUxJR04KLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKgotICoJCVRoZSBjb21wdXRlZCBD
UkMzMmMgdmFsdWUKLSAqLwotCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwNiBJbnRl
bCBDb3Jwb3JhdGlvbiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0gKgotICogVGhpcyBzb2Z0
d2FyZSBwcm9ncmFtIGlzIGxpY2Vuc2VkIHN1YmplY3QgdG8gdGhlIEJTRCBMaWNlbnNlLCBhdmFp
bGFibGUgYXQKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vu
c2UuaHRtbC4KLSAqCi0gKiBBYnN0cmFjdDoKLSAqCi0gKiBUYWJsZXMgZm9yIHNvZnR3YXJlIENS
QyBnZW5lcmF0aW9uCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJs
ZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgbW9k
ZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4u
Li4uLi4uIDB4MUVEQzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4u
Li4uLi4gMzIgYml0cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJp
dHMKLSAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMK
LSAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDgg
OCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCi0gKiBG
aWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCi0g
Ki8KLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X28zMlsyNTZdID0K
LXsKLQkweDAwMDAwMDAwLCAweEYyNkI4MzAzLCAweEUxM0I3MEY3LCAweDEzNTBGM0Y0LCAweEM3
OUE5NzFGLCAweDM1RjExNDFDLCAweDI2QTFFN0U4LCAweEQ0Q0E2NEVCLAotCTB4OEFEOTU4Q0Ys
IDB4NzhCMkRCQ0MsIDB4NkJFMjI4MzgsIDB4OTk4OUFCM0IsIDB4NEQ0M0NGRDAsIDB4QkYyODRD
RDMsIDB4QUM3OEJGMjcsIDB4NUUxMzNDMjQsCi0JMHgxMDVFQzc2RiwgMHhFMjM1NDQ2QywgMHhG
MTY1Qjc5OCwgMHgwMzBFMzQ5QiwgMHhEN0M0NTA3MCwgMHgyNUFGRDM3MywgMHgzNkZGMjA4Nywg
MHhDNDk0QTM4NCwKLQkweDlBODc5RkEwLCAweDY4RUMxQ0EzLCAweDdCQkNFRjU3LCAweDg5RDc2
QzU0LCAweDVEMUQwOEJGLCAweEFGNzY4QkJDLCAweEJDMjY3ODQ4LCAweDRFNERGQjRCLAotCTB4
MjBCRDhFREUsIDB4RDJENjBEREQsIDB4QzE4NkZFMjksIDB4MzNFRDdEMkEsIDB4RTcyNzE5QzEs
IDB4MTU0QzlBQzIsIDB4MDYxQzY5MzYsIDB4RjQ3N0VBMzUsCi0JMHhBQTY0RDYxMSwgMHg1ODBG
NTUxMiwgMHg0QjVGQTZFNiwgMHhCOTM0MjVFNSwgMHg2REZFNDEwRSwgMHg5Rjk1QzIwRCwgMHg4
Q0M1MzFGOSwgMHg3RUFFQjJGQSwKLQkweDMwRTM0OUIxLCAweEMyODhDQUIyLCAweEQxRDgzOTQ2
LCAweDIzQjNCQTQ1LCAweEY3NzlERUFFLCAweDA1MTI1REFELCAweDE2NDJBRTU5LCAweEU0Mjky
RDVBLAotCTB4QkEzQTExN0UsIDB4NDg1MTkyN0QsIDB4NUIwMTYxODksIDB4QTk2QUUyOEEsIDB4
N0RBMDg2NjEsIDB4OEZDQjA1NjIsIDB4OUM5QkY2OTYsIDB4NkVGMDc1OTUsCi0JMHg0MTdCMURC
QywgMHhCMzEwOUVCRiwgMHhBMDQwNkQ0QiwgMHg1MjJCRUU0OCwgMHg4NkUxOEFBMywgMHg3NDhB
MDlBMCwgMHg2N0RBRkE1NCwgMHg5NUIxNzk1NywKLQkweENCQTI0NTczLCAweDM5QzlDNjcwLCAw
eDJBOTkzNTg0LCAweEQ4RjJCNjg3LCAweDBDMzhEMjZDLCAweEZFNTM1MTZGLCAweEVEMDNBMjlC
LCAweDFGNjgyMTk4LAotCTB4NTEyNURBRDMsIDB4QTM0RTU5RDAsIDB4QjAxRUFBMjQsIDB4NDI3
NTI5MjcsIDB4OTZCRjREQ0MsIDB4NjRENENFQ0YsIDB4Nzc4NDNEM0IsIDB4ODVFRkJFMzgsCi0J
MHhEQkZDODIxQywgMHgyOTk3MDExRiwgMHgzQUM3RjJFQiwgMHhDOEFDNzFFOCwgMHgxQzY2MTUw
MywgMHhFRTBEOTYwMCwgMHhGRDVENjVGNCwgMHgwRjM2RTZGNywKLQkweDYxQzY5MzYyLCAweDkz
QUQxMDYxLCAweDgwRkRFMzk1LCAweDcyOTY2MDk2LCAweEE2NUMwNDdELCAweDU0Mzc4NzdFLCAw
eDQ3Njc3NDhBLCAweEI1MENGNzg5LAotCTB4RUIxRkNCQUQsIDB4MTk3NDQ4QUUsIDB4MEEyNEJC
NUEsIDB4Rjg0RjM4NTksIDB4MkM4NTVDQjIsIDB4REVFRURGQjEsIDB4Q0RCRTJDNDUsIDB4M0ZE
NUFGNDYsCi0JMHg3MTk4NTQwRCwgMHg4M0YzRDcwRSwgMHg5MEEzMjRGQSwgMHg2MkM4QTdGOSwg
MHhCNjAyQzMxMiwgMHg0NDY5NDAxMSwgMHg1NzM5QjNFNSwgMHhBNTUyMzBFNiwKLQkweEZCNDEw
Q0MyLCAweDA5MkE4RkMxLCAweDFBN0E3QzM1LCAweEU4MTFGRjM2LCAweDNDREI5QkRELCAweENF
QjAxOERFLCAweERERTBFQjJBLCAweDJGOEI2ODI5LAotCTB4ODJGNjNCNzgsIDB4NzA5REI4N0Is
IDB4NjNDRDRCOEYsIDB4OTFBNkM4OEMsIDB4NDU2Q0FDNjcsIDB4QjcwNzJGNjQsIDB4QTQ1N0RD
OTAsIDB4NTYzQzVGOTMsCi0JMHgwODJGNjNCNywgMHhGQTQ0RTBCNCwgMHhFOTE0MTM0MCwgMHgx
QjdGOTA0MywgMHhDRkI1RjRBOCwgMHgzRERFNzdBQiwgMHgyRThFODQ1RiwgMHhEQ0U1MDc1QywK
LQkweDkyQThGQzE3LCAweDYwQzM3RjE0LCAweDczOTM4Q0UwLCAweDgxRjgwRkUzLCAweDU1MzI2
QjA4LCAweEE3NTlFODBCLCAweEI0MDkxQkZGLCAweDQ2NjI5OEZDLAotCTB4MTg3MUE0RDgsIDB4
RUExQTI3REIsIDB4Rjk0QUQ0MkYsIDB4MEIyMTU3MkMsIDB4REZFQjMzQzcsIDB4MkQ4MEIwQzQs
IDB4M0VEMDQzMzAsIDB4Q0NCQkMwMzMsCi0JMHhBMjRCQjVBNiwgMHg1MDIwMzZBNSwgMHg0Mzcw
QzU1MSwgMHhCMTFCNDY1MiwgMHg2NUQxMjJCOSwgMHg5N0JBQTFCQSwgMHg4NEVBNTI0RSwgMHg3
NjgxRDE0RCwKLQkweDI4OTJFRDY5LCAweERBRjk2RTZBLCAweEM5QTk5RDlFLCAweDNCQzIxRTlE
LCAweEVGMDg3QTc2LCAweDFENjNGOTc1LCAweDBFMzMwQTgxLCAweEZDNTg4OTgyLAotCTB4QjIx
NTcyQzksIDB4NDA3RUYxQ0EsIDB4NTMyRTAyM0UsIDB4QTE0NTgxM0QsIDB4NzU4RkU1RDYsIDB4
ODdFNDY2RDUsIDB4OTRCNDk1MjEsIDB4NjZERjE2MjIsCi0JMHgzOENDMkEwNiwgMHhDQUE3QTkw
NSwgMHhEOUY3NUFGMSwgMHgyQjlDRDlGMiwgMHhGRjU2QkQxOSwgMHgwRDNEM0UxQSwgMHgxRTZE
Q0RFRSwgMHhFQzA2NEVFRCwKLQkweEMzOEQyNkM0LCAweDMxRTZBNUM3LCAweDIyQjY1NjMzLCAw
eEQwRERENTMwLCAweDA0MTdCMURCLCAweEY2N0MzMkQ4LCAweEU1MkNDMTJDLCAweDE3NDc0MjJG
LAotCTB4NDk1NDdFMEIsIDB4QkIzRkZEMDgsIDB4QTg2RjBFRkMsIDB4NUEwNDhERkYsIDB4OEVD
RUU5MTQsIDB4N0NBNTZBMTcsIDB4NkZGNTk5RTMsIDB4OUQ5RTFBRTAsCi0JMHhEM0QzRTFBQiwg
MHgyMUI4NjJBOCwgMHgzMkU4OTE1QywgMHhDMDgzMTI1RiwgMHgxNDQ5NzZCNCwgMHhFNjIyRjVC
NywgMHhGNTcyMDY0MywgMHgwNzE5ODU0MCwKLQkweDU5MEFCOTY0LCAweEFCNjEzQTY3LCAweEI4
MzFDOTkzLCAweDRBNUE0QTkwLCAweDlFOTAyRTdCLCAweDZDRkJBRDc4LCAweDdGQUI1RThDLCAw
eDhEQzBERDhGLAotCTB4RTMzMEE4MUEsIDB4MTE1QjJCMTksIDB4MDIwQkQ4RUQsIDB4RjA2MDVC
RUUsIDB4MjRBQTNGMDUsIDB4RDZDMUJDMDYsIDB4QzU5MTRGRjIsIDB4MzdGQUNDRjEsCi0JMHg2
OUU5RjBENSwgMHg5QjgyNzNENiwgMHg4OEQyODAyMiwgMHg3QUI5MDMyMSwgMHhBRTczNjdDQSwg
MHg1QzE4RTRDOSwgMHg0RjQ4MTczRCwgMHhCRDIzOTQzRSwKLQkweEYzNkU2Rjc1LCAweDAxMDVF
Qzc2LCAweDEyNTUxRjgyLCAweEUwM0U5QzgxLCAweDM0RjRGODZBLCAweEM2OUY3QjY5LCAweEQ1
Q0Y4ODlELCAweDI3QTQwQjlFLAotCTB4NzlCNzM3QkEsIDB4OEJEQ0I0QjksIDB4OTg4QzQ3NEQs
IDB4NkFFN0M0NEUsIDB4QkUyREEwQTUsIDB4NEM0NjIzQTYsIDB4NUYxNkQwNTIsIDB4QUQ3RDUz
NTEKLX07Ci0KLS8qCi0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4
X28zMgotICovCi0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdh
cyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBw
YXJhbWV0ZXJzOgotICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4u
Li4gMHgxRURDNkY0MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4u
LiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRS
VUUKLSAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwot
ICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICog
U2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgK
LSAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUg
TmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwot
Ci1zdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzQwWzI1Nl0gPQotewot
CTB4MDAwMDAwMDAsIDB4MTNBMjk4NzcsIDB4Mjc0NTMwRUUsIDB4MzRFN0E4OTksIDB4NEU4QTYx
REMsIDB4NUQyOEY5QUIsIDB4NjlDRjUxMzIsIDB4N0E2REM5NDUsCi0JMHg5RDE0QzNCOCwgMHg4
RUI2NUJDRiwgMHhCQTUxRjM1NiwgMHhBOUYzNkIyMSwgMHhEMzlFQTI2NCwgMHhDMDNDM0ExMywg
MHhGNERCOTI4QSwgMHhFNzc5MEFGRCwKLQkweDNGQzVGMTgxLCAweDJDNjc2OUY2LCAweDE4ODBD
MTZGLCAweDBCMjI1OTE4LCAweDcxNEY5MDVELCAweDYyRUQwODJBLCAweDU2MEFBMEIzLCAweDQ1
QTgzOEM0LAotCTB4QTJEMTMyMzksIDB4QjE3M0FBNEUsIDB4ODU5NDAyRDcsIDB4OTYzNjlBQTAs
IDB4RUM1QjUzRTUsIDB4RkZGOUNCOTIsIDB4Q0IxRTYzMEIsIDB4RDhCQ0ZCN0MsCi0JMHg3RjhC
RTMwMiwgMHg2QzI5N0I3NSwgMHg1OENFRDNFQywgMHg0QjZDNEI5QiwgMHgzMTAxODJERSwgMHgy
MkEzMUFBOSwgMHgxNjQ0QjIzMCwgMHgwNUU2MkE0NywKLQkweEUyOUYyMEJBLCAweEYxM0RCOENE
LCAweEM1REExMDU0LCAweEQ2Nzg4ODIzLCAweEFDMTU0MTY2LCAweEJGQjdEOTExLCAweDhCNTA3
MTg4LCAweDk4RjJFOUZGLAotCTB4NDA0RTEyODMsIDB4NTNFQzhBRjQsIDB4NjcwQjIyNkQsIDB4
NzRBOUJBMUEsIDB4MEVDNDczNUYsIDB4MUQ2NkVCMjgsIDB4Mjk4MTQzQjEsIDB4M0EyM0RCQzYs
Ci0JMHhERDVBRDEzQiwgMHhDRUY4NDk0QywgMHhGQTFGRTFENSwgMHhFOUJENzlBMiwgMHg5M0Qw
QjBFNywgMHg4MDcyMjg5MCwgMHhCNDk1ODAwOSwgMHhBNzM3MTg3RSwKLQkweEZGMTdDNjA0LCAw
eEVDQjU1RTczLCAweEQ4NTJGNkVBLCAweENCRjA2RTlELCAweEIxOURBN0Q4LCAweEEyM0YzRkFG
LCAweDk2RDg5NzM2LCAweDg1N0EwRjQxLAotCTB4NjIwMzA1QkMsIDB4NzFBMTlEQ0IsIDB4NDU0
NjM1NTIsIDB4NTZFNEFEMjUsIDB4MkM4OTY0NjAsIDB4M0YyQkZDMTcsIDB4MEJDQzU0OEUsIDB4
MTg2RUNDRjksCi0JMHhDMEQyMzc4NSwgMHhEMzcwQUZGMiwgMHhFNzk3MDc2QiwgMHhGNDM1OUYx
QywgMHg4RTU4NTY1OSwgMHg5REZBQ0UyRSwgMHhBOTFENjZCNywgMHhCQUJGRkVDMCwKLQkweDVE
QzZGNDNELCAweDRFNjQ2QzRBLCAweDdBODNDNEQzLCAweDY5MjE1Q0E0LCAweDEzNEM5NUUxLCAw
eDAwRUUwRDk2LCAweDM0MDlBNTBGLCAweDI3QUIzRDc4LAotCTB4ODA5QzI1MDYsIDB4OTMzRUJE
NzEsIDB4QTdEOTE1RTgsIDB4QjQ3QjhEOUYsIDB4Q0UxNjQ0REEsIDB4RERCNERDQUQsIDB4RTk1
Mzc0MzQsIDB4RkFGMUVDNDMsCi0JMHgxRDg4RTZCRSwgMHgwRTJBN0VDOSwgMHgzQUNERDY1MCwg
MHgyOTZGNEUyNywgMHg1MzAyODc2MiwgMHg0MEEwMUYxNSwgMHg3NDQ3Qjc4QywgMHg2N0U1MkZG
QiwKLQkweEJGNTlENDg3LCAweEFDRkI0Q0YwLCAweDk4MUNFNDY5LCAweDhCQkU3QzFFLCAweEYx
RDNCNTVCLCAweEUyNzEyRDJDLCAweEQ2OTY4NUI1LCAweEM1MzQxREMyLAotCTB4MjI0RDE3M0Ys
IDB4MzFFRjhGNDgsIDB4MDUwODI3RDEsIDB4MTZBQUJGQTYsIDB4NkNDNzc2RTMsIDB4N0Y2NUVF
OTQsIDB4NEI4MjQ2MEQsIDB4NTgyMERFN0EsCi0JMHhGQkMzRkFGOSwgMHhFODYxNjI4RSwgMHhE
Qzg2Q0ExNywgMHhDRjI0NTI2MCwgMHhCNTQ5OUIyNSwgMHhBNkVCMDM1MiwgMHg5MjBDQUJDQiwg
MHg4MUFFMzNCQywKLQkweDY2RDczOTQxLCAweDc1NzVBMTM2LCAweDQxOTIwOUFGLCAweDUyMzA5
MUQ4LCAweDI4NUQ1ODlELCAweDNCRkZDMEVBLCAweDBGMTg2ODczLCAweDFDQkFGMDA0LAotCTB4
QzQwNjBCNzgsIDB4RDdBNDkzMEYsIDB4RTM0MzNCOTYsIDB4RjBFMUEzRTEsIDB4OEE4QzZBQTQs
IDB4OTkyRUYyRDMsIDB4QURDOTVBNEEsIDB4QkU2QkMyM0QsCi0JMHg1OTEyQzhDMCwgMHg0QUIw
NTBCNywgMHg3RTU3RjgyRSwgMHg2REY1NjA1OSwgMHgxNzk4QTkxQywgMHgwNDNBMzE2QiwgMHgz
MEREOTlGMiwgMHgyMzdGMDE4NSwKLQkweDg0NDgxOUZCLCAweDk3RUE4MThDLCAweEEzMEQyOTE1
LCAweEIwQUZCMTYyLCAweENBQzI3ODI3LCAweEQ5NjBFMDUwLCAweEVEODc0OEM5LCAweEZFMjVE
MEJFLAotCTB4MTk1Q0RBNDMsIDB4MEFGRTQyMzQsIDB4M0UxOUVBQUQsIDB4MkRCQjcyREEsIDB4
NTdENkJCOUYsIDB4NDQ3NDIzRTgsIDB4NzA5MzhCNzEsIDB4NjMzMTEzMDYsCi0JMHhCQjhERTg3
QSwgMHhBODJGNzAwRCwgMHg5Q0M4RDg5NCwgMHg4RjZBNDBFMywgMHhGNTA3ODlBNiwgMHhFNkE1
MTFEMSwgMHhEMjQyQjk0OCwgMHhDMUUwMjEzRiwKLQkweDI2OTkyQkMyLCAweDM1M0JCM0I1LCAw
eDAxREMxQjJDLCAweDEyN0U4MzVCLCAweDY4MTM0QTFFLCAweDdCQjFEMjY5LCAweDRGNTY3QUYw
LCAweDVDRjRFMjg3LAotCTB4MDRENDNDRkQsIDB4MTc3NkE0OEEsIDB4MjM5MTBDMTMsIDB4MzAz
Mzk0NjQsIDB4NEE1RTVEMjEsIDB4NTlGQ0M1NTYsIDB4NkQxQjZEQ0YsIDB4N0VCOUY1QjgsCi0J
MHg5OUMwRkY0NSwgMHg4QTYyNjczMiwgMHhCRTg1Q0ZBQiwgMHhBRDI3NTdEQywgMHhENzRBOUU5
OSwgMHhDNEU4MDZFRSwgMHhGMDBGQUU3NywgMHhFM0FEMzYwMCwKLQkweDNCMTFDRDdDLCAweDI4
QjM1NTBCLCAweDFDNTRGRDkyLCAweDBGRjY2NUU1LCAweDc1OUJBQ0EwLCAweDY2MzkzNEQ3LCAw
eDUyREU5QzRFLCAweDQxN0MwNDM5LAotCTB4QTYwNTBFQzQsIDB4QjVBNzk2QjMsIDB4ODE0MDNF
MkEsIDB4OTJFMkE2NUQsIDB4RTg4RjZGMTgsIDB4RkIyREY3NkYsIDB4Q0ZDQTVGRjYsIDB4REM2
OEM3ODEsCi0JMHg3QjVGREZGRiwgMHg2OEZENDc4OCwgMHg1QzFBRUYxMSwgMHg0RkI4Nzc2Niwg
MHgzNUQ1QkUyMywgMHgyNjc3MjY1NCwgMHgxMjkwOEVDRCwgMHgwMTMyMTZCQSwKLQkweEU2NEIx
QzQ3LCAweEY1RTk4NDMwLCAweEMxMEUyQ0E5LCAweEQyQUNCNERFLCAweEE4QzE3RDlCLCAweEJC
NjNFNUVDLCAweDhGODQ0RDc1LCAweDlDMjZENTAyLAotCTB4NDQ5QTJFN0UsIDB4NTczOEI2MDks
IDB4NjNERjFFOTAsIDB4NzA3RDg2RTcsIDB4MEExMDRGQTIsIDB4MTlCMkQ3RDUsIDB4MkQ1NTdG
NEMsIDB4M0VGN0U3M0IsCi0JMHhEOThFRURDNiwgMHhDQTJDNzVCMSwgMHhGRUNCREQyOCwgMHhF
RDY5NDU1RiwgMHg5NzA0OEMxQSwgMHg4NEE2MTQ2RCwgMHhCMDQxQkNGNCwgMHhBM0UzMjQ4Mwot
fTsKLQotLyoKLSAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzQw
Ci0gKi8KLQotCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdl
bmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQotICogZm9sbG93aW5nIG1vZGVsIHBhcmFt
ZXRlcnM6Ci0gKgotICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAw
eDFFREM2RjQxCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMy
IGJpdHMKLSAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQot
ICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBO
dW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCi0gKiBTbGlj
ZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAotICog
RGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAotICogRmlsZSBOYW1l
ID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYwotICovCi0KLXN0
YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNDhbMjU2XSA9Ci17Ci0JMHgw
MDAwMDAwMCwgMHhBNTQxOTI3RSwgMHg0RjZGNTIwRCwgMHhFQTJFQzA3MywgMHg5RURFQTQxQSwg
MHgzQjlGMzY2NCwgMHhEMUIxRjYxNywgMHg3NEYwNjQ2OSwKLQkweDM4NTEzRUM1LCAweDlEMTBB
Q0JCLCAweDc3M0U2Q0M4LCAweEQyN0ZGRUI2LCAweEE2OEY5QURGLCAweDAzQ0UwOEExLCAweEU5
RTBDOEQyLCAweDRDQTE1QUFDLAotCTB4NzBBMjdEOEEsIDB4RDVFM0VGRjQsIDB4M0ZDRDJGODcs
IDB4OUE4Q0JERjksIDB4RUU3Q0Q5OTAsIDB4NEIzRDRCRUUsIDB4QTExMzhCOUQsIDB4MDQ1MjE5
RTMsCi0JMHg0OEYzNDM0RiwgMHhFREIyRDEzMSwgMHgwNzlDMTE0MiwgMHhBMkREODMzQywgMHhE
NjJERTc1NSwgMHg3MzZDNzUyQiwgMHg5OTQyQjU1OCwgMHgzQzAzMjcyNiwKLQkweEUxNDRGQjE0
LCAweDQ0MDU2OTZBLCAweEFFMkJBOTE5LCAweDBCNkEzQjY3LCAweDdGOUE1RjBFLCAweERBREJD
RDcwLCAweDMwRjUwRDAzLCAweDk1QjQ5RjdELAotCTB4RDkxNUM1RDEsIDB4N0M1NDU3QUYsIDB4
OTY3QTk3REMsIDB4MzMzQjA1QTIsIDB4NDdDQjYxQ0IsIDB4RTI4QUYzQjUsIDB4MDhBNDMzQzYs
IDB4QURFNUExQjgsCi0JMHg5MUU2ODY5RSwgMHgzNEE3MTRFMCwgMHhERTg5RDQ5MywgMHg3QkM4
NDZFRCwgMHgwRjM4MjI4NCwgMHhBQTc5QjBGQSwgMHg0MDU3NzA4OSwgMHhFNTE2RTJGNywKLQkw
eEE5QjdCODVCLCAweDBDRjYyQTI1LCAweEU2RDhFQTU2LCAweDQzOTk3ODI4LCAweDM3NjkxQzQx
LCAweDkyMjg4RTNGLCAweDc4MDY0RTRDLCAweERENDdEQzMyLAotCTB4Qzc2NTgwRDksIDB4NjIy
NDEyQTcsIDB4ODgwQUQyRDQsIDB4MkQ0QjQwQUEsIDB4NTlCQjI0QzMsIDB4RkNGQUI2QkQsIDB4
MTZENDc2Q0UsIDB4QjM5NUU0QjAsCi0JMHhGRjM0QkUxQywgMHg1QTc1MkM2MiwgMHhCMDVCRUMx
MSwgMHgxNTFBN0U2RiwgMHg2MUVBMUEwNiwgMHhDNEFCODg3OCwgMHgyRTg1NDgwQiwgMHg4QkM0
REE3NSwKLQkweEI3QzdGRDUzLCAweDEyODY2RjJELCAweEY4QThBRjVFLCAweDVERTkzRDIwLCAw
eDI5MTk1OTQ5LCAweDhDNThDQjM3LCAweDY2NzYwQjQ0LCAweEMzMzc5OTNBLAotCTB4OEY5NkMz
OTYsIDB4MkFENzUxRTgsIDB4QzBGOTkxOUIsIDB4NjVCODAzRTUsIDB4MTE0ODY3OEMsIDB4QjQw
OUY1RjIsIDB4NUUyNzM1ODEsIDB4RkI2NkE3RkYsCi0JMHgyNjIxN0JDRCwgMHg4MzYwRTlCMywg
MHg2OTRFMjlDMCwgMHhDQzBGQkJCRSwgMHhCOEZGREZENywgMHgxREJFNERBOSwgMHhGNzkwOERE
QSwgMHg1MkQxMUZBNCwKLQkweDFFNzA0NTA4LCAweEJCMzFENzc2LCAweDUxMUYxNzA1LCAweEY0
NUU4NTdCLCAweDgwQUVFMTEyLCAweDI1RUY3MzZDLCAweENGQzFCMzFGLCAweDZBODAyMTYxLAot
CTB4NTY4MzA2NDcsIDB4RjNDMjk0MzksIDB4MTlFQzU0NEEsIDB4QkNBREM2MzQsIDB4Qzg1REEy
NUQsIDB4NkQxQzMwMjMsIDB4ODczMkYwNTAsIDB4MjI3MzYyMkUsCi0JMHg2RUQyMzg4MiwgMHhD
QjkzQUFGQywgMHgyMUJENkE4RiwgMHg4NEZDRjhGMSwgMHhGMDBDOUM5OCwgMHg1NTREMEVFNiwg
MHhCRjYzQ0U5NSwgMHgxQTIyNUNFQiwKLQkweDhCMjc3NzQzLCAweDJFNjZFNTNELCAweEM0NDgy
NTRFLCAweDYxMDlCNzMwLCAweDE1RjlEMzU5LCAweEIwQjg0MTI3LCAweDVBOTY4MTU0LCAweEZG
RDcxMzJBLAotCTB4QjM3NjQ5ODYsIDB4MTYzN0RCRjgsIDB4RkMxOTFCOEIsIDB4NTk1ODg5RjUs
IDB4MkRBOEVEOUMsIDB4ODhFOTdGRTIsIDB4NjJDN0JGOTEsIDB4Qzc4NjJERUYsCi0JMHhGQjg1
MEFDOSwgMHg1RUM0OThCNywgMHhCNEVBNThDNCwgMHgxMUFCQ0FCQSwgMHg2NTVCQUVEMywgMHhD
MDFBM0NBRCwgMHgyQTM0RkNERSwgMHg4Rjc1NkVBMCwKLQkweEMzRDQzNDBDLCAweDY2OTVBNjcy
LCAweDhDQkI2NjAxLCAweDI5RkFGNDdGLCAweDVEMEE5MDE2LCAweEY4NEIwMjY4LCAweDEyNjVD
MjFCLCAweEI3MjQ1MDY1LAotCTB4NkE2MzhDNTcsIDB4Q0YyMjFFMjksIDB4MjUwQ0RFNUEsIDB4
ODA0RDRDMjQsIDB4RjRCRDI4NEQsIDB4NTFGQ0JBMzMsIDB4QkJEMjdBNDAsIDB4MUU5M0U4M0Us
Ci0JMHg1MjMyQjI5MiwgMHhGNzczMjBFQywgMHgxRDVERTA5RiwgMHhCODFDNzJFMSwgMHhDQ0VD
MTY4OCwgMHg2OUFEODRGNiwgMHg4MzgzNDQ4NSwgMHgyNkMyRDZGQiwKLQkweDFBQzFGMURELCAw
eEJGODA2M0EzLCAweDU1QUVBM0QwLCAweEYwRUYzMUFFLCAweDg0MUY1NUM3LCAweDIxNUVDN0I5
LCAweENCNzAwN0NBLCAweDZFMzE5NUI0LAotCTB4MjI5MENGMTgsIDB4ODdEMTVENjYsIDB4NkRG
RjlEMTUsIDB4QzhCRTBGNkIsIDB4QkM0RTZCMDIsIDB4MTkwRkY5N0MsIDB4RjMyMTM5MEYsIDB4
NTY2MEFCNzEsCi0JMHg0QzQyRjc5QSwgMHhFOTAzNjVFNCwgMHgwMzJEQTU5NywgMHhBNjZDMzdF
OSwgMHhEMjlDNTM4MCwgMHg3N0REQzFGRSwgMHg5REYzMDE4RCwgMHgzOEIyOTNGMywKLQkweDc0
MTNDOTVGLCAweEQxNTI1QjIxLCAweDNCN0M5QjUyLCAweDlFM0QwOTJDLCAweEVBQ0Q2RDQ1LCAw
eDRGOENGRjNCLCAweEE1QTIzRjQ4LCAweDAwRTNBRDM2LAotCTB4M0NFMDhBMTAsIDB4OTlBMTE4
NkUsIDB4NzM4RkQ4MUQsIDB4RDZDRTRBNjMsIDB4QTIzRTJFMEEsIDB4MDc3RkJDNzQsIDB4RUQ1
MTdDMDcsIDB4NDgxMEVFNzksCi0JMHgwNEIxQjRENSwgMHhBMUYwMjZBQiwgMHg0QkRFRTZEOCwg
MHhFRTlGNzRBNiwgMHg5QTZGMTBDRiwgMHgzRjJFODJCMSwgMHhENTAwNDJDMiwgMHg3MDQxRDBC
QywKLQkweEFEMDYwQzhFLCAweDA4NDc5RUYwLCAweEUyNjk1RTgzLCAweDQ3MjhDQ0ZELCAweDMz
RDhBODk0LCAweDk2OTkzQUVBLCAweDdDQjdGQTk5LCAweEQ5RjY2OEU3LAotCTB4OTU1NzMyNEIs
IDB4MzAxNkEwMzUsIDB4REEzODYwNDYsIDB4N0Y3OUYyMzgsIDB4MEI4OTk2NTEsIDB4QUVDODA0
MkYsIDB4NDRFNkM0NUMsIDB4RTFBNzU2MjIsCi0JMHhEREE0NzEwNCwgMHg3OEU1RTM3QSwgMHg5
MkNCMjMwOSwgMHgzNzhBQjE3NywgMHg0MzdBRDUxRSwgMHhFNjNCNDc2MCwgMHgwQzE1ODcxMywg
MHhBOTU0MTU2RCwKLQkweEU1RjU0RkMxLCAweDQwQjREREJGLCAweEFBOUExRENDLCAweDBGREI4
RkIyLCAweDdCMkJFQkRCLCAweERFNkE3OUE1LCAweDM0NDRCOUQ2LCAweDkxMDUyQkE4Ci19Owot
Ci0vKgotICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNDgKLSAq
LwotCi0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJh
dGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVy
czoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVE
QzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0
cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCi0gKiBU
YWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJpdHMKLSAqIE51bWJl
ciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMKLSAqIFNsaWNlIExl
bmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDggOCA4Ci0gKiBEaXJl
Y3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCi0gKiBGaWxlIE5hbWUgPSAu
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCi0gKi8KLQotc3RhdGlj
IGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X281NlsyNTZdID0KLXsKLQkweDAwMDAw
MDAwLCAweERENDVBQUI4LCAweEJGNjcyMzgxLCAweDYyMjI4OTM5LCAweDdCMjIzMUYzLCAweEE2
Njc5QjRCLCAweEM0NDUxMjcyLCAweDE5MDBCOENBLAotCTB4RjY0NDYzRTYsIDB4MkIwMUM5NUUs
IDB4NDkyMzQwNjcsIDB4OTQ2NkVBREYsIDB4OEQ2NjUyMTUsIDB4NTAyM0Y4QUQsIDB4MzIwMTcx
OTQsIDB4RUY0NERCMkMsCi0JMHhFOTY0QjEzRCwgMHgzNDIxMUI4NSwgMHg1NjAzOTJCQywgMHg4
QjQ2MzgwNCwgMHg5MjQ2ODBDRSwgMHg0RjAzMkE3NiwgMHgyRDIxQTM0RiwgMHhGMDY0MDlGNywK
LQkweDFGMjBEMkRCLCAweEMyNjU3ODYzLCAweEEwNDdGMTVBLCAweDdEMDI1QkUyLCAweDY0MDJF
MzI4LCAweEI5NDc0OTkwLCAweERCNjVDMEE5LCAweDA2MjA2QTExLAotCTB4RDcyNTE0OEIsIDB4
MEE2MEJFMzMsIDB4Njg0MjM3MEEsIDB4QjUwNzlEQjIsIDB4QUMwNzI1NzgsIDB4NzE0MjhGQzAs
IDB4MTM2MDA2RjksIDB4Q0UyNUFDNDEsCi0JMHgyMTYxNzc2RCwgMHhGQzI0RERENSwgMHg5RTA2
NTRFQywgMHg0MzQzRkU1NCwgMHg1QTQzNDY5RSwgMHg4NzA2RUMyNiwgMHhFNTI0NjUxRiwgMHgz
ODYxQ0ZBNywKLQkweDNFNDFBNUI2LCAweEUzMDQwRjBFLCAweDgxMjY4NjM3LCAweDVDNjMyQzhG
LCAweDQ1NjM5NDQ1LCAweDk4MjYzRUZELCAweEZBMDRCN0M0LCAweDI3NDExRDdDLAotCTB4Qzgw
NUM2NTAsIDB4MTU0MDZDRTgsIDB4Nzc2MkU1RDEsIDB4QUEyNzRGNjksIDB4QjMyN0Y3QTMsIDB4
NkU2MjVEMUIsIDB4MEM0MEQ0MjIsIDB4RDEwNTdFOUEsCi0JMHhBQkE2NUZFNywgMHg3NkUzRjU1
RiwgMHgxNEMxN0M2NiwgMHhDOTg0RDZERSwgMHhEMDg0NkUxNCwgMHgwREMxQzRBQywgMHg2RkUz
NEQ5NSwgMHhCMkE2RTcyRCwKLQkweDVERTIzQzAxLCAweDgwQTc5NkI5LCAweEUyODUxRjgwLCAw
eDNGQzBCNTM4LCAweDI2QzAwREYyLCAweEZCODVBNzRBLCAweDk5QTcyRTczLCAweDQ0RTI4NENC
LAotCTB4NDJDMkVFREEsIDB4OUY4NzQ0NjIsIDB4RkRBNUNENUIsIDB4MjBFMDY3RTMsIDB4MzlF
MERGMjksIDB4RTRBNTc1OTEsIDB4ODY4N0ZDQTgsIDB4NUJDMjU2MTAsCi0JMHhCNDg2OEQzQywg
MHg2OUMzMjc4NCwgMHgwQkUxQUVCRCwgMHhENkE0MDQwNSwgMHhDRkE0QkNDRiwgMHgxMkUxMTY3
NywgMHg3MEMzOUY0RSwgMHhBRDg2MzVGNiwKLQkweDdDODM0QjZDLCAweEExQzZFMUQ0LCAweEMz
RTQ2OEVELCAweDFFQTFDMjU1LCAweDA3QTE3QTlGLCAweERBRTREMDI3LCAweEI4QzY1OTFFLCAw
eDY1ODNGM0E2LAotCTB4OEFDNzI4OEEsIDB4NTc4MjgyMzIsIDB4MzVBMDBCMEIsIDB4RThFNUEx
QjMsIDB4RjFFNTE5NzksIDB4MkNBMEIzQzEsIDB4NEU4MjNBRjgsIDB4OTNDNzkwNDAsCi0JMHg5
NUU3RkE1MSwgMHg0OEEyNTBFOSwgMHgyQTgwRDlEMCwgMHhGN0M1NzM2OCwgMHhFRUM1Q0JBMiwg
MHgzMzgwNjExQSwgMHg1MUEyRTgyMywgMHg4Q0U3NDI5QiwKLQkweDYzQTM5OUI3LCAweEJFRTYz
MzBGLCAweERDQzRCQTM2LCAweDAxODExMDhFLCAweDE4ODFBODQ0LCAweEM1QzQwMkZDLCAweEE3
RTY4QkM1LCAweDdBQTMyMTdELAotCTB4NTJBMEM5M0YsIDB4OEZFNTYzODcsIDB4RURDN0VBQkUs
IDB4MzA4MjQwMDYsIDB4Mjk4MkY4Q0MsIDB4RjRDNzUyNzQsIDB4OTZFNURCNEQsIDB4NEJBMDcx
RjUsCi0JMHhBNEU0QUFEOSwgMHg3OUExMDA2MSwgMHgxQjgzODk1OCwgMHhDNkM2MjNFMCwgMHhE
RkM2OUIyQSwgMHgwMjgzMzE5MiwgMHg2MEExQjhBQiwgMHhCREU0MTIxMywKLQkweEJCQzQ3ODAy
LCAweDY2ODFEMkJBLCAweDA0QTM1QjgzLCAweEQ5RTZGMTNCLCAweEMwRTY0OUYxLCAweDFEQTNF
MzQ5LCAweDdGODE2QTcwLCAweEEyQzRDMEM4LAotCTB4NEQ4MDFCRTQsIDB4OTBDNUIxNUMsIDB4
RjJFNzM4NjUsIDB4MkZBMjkyREQsIDB4MzZBMjJBMTcsIDB4RUJFNzgwQUYsIDB4ODlDNTA5OTYs
IDB4NTQ4MEEzMkUsCi0JMHg4NTg1RERCNCwgMHg1OEMwNzcwQywgMHgzQUUyRkUzNSwgMHhFN0E3
NTQ4RCwgMHhGRUE3RUM0NywgMHgyM0UyNDZGRiwgMHg0MUMwQ0ZDNiwgMHg5Qzg1NjU3RSwKLQkw
eDczQzFCRTUyLCAweEFFODQxNEVBLCAweENDQTY5REQzLCAweDExRTMzNzZCLCAweDA4RTM4RkEx
LCAweEQ1QTYyNTE5LCAweEI3ODRBQzIwLCAweDZBQzEwNjk4LAotCTB4NkNFMTZDODksIDB4QjFB
NEM2MzEsIDB4RDM4NjRGMDgsIDB4MEVDM0U1QjAsIDB4MTdDMzVEN0EsIDB4Q0E4NkY3QzIsIDB4
QThBNDdFRkIsIDB4NzVFMUQ0NDMsCi0JMHg5QUE1MEY2RiwgMHg0N0UwQTVENywgMHgyNUMyMkNF
RSwgMHhGODg3ODY1NiwgMHhFMTg3M0U5QywgMHgzQ0MyOTQyNCwgMHg1RUUwMUQxRCwgMHg4M0E1
QjdBNSwKLQkweEY5MDY5NkQ4LCAweDI0NDMzQzYwLCAweDQ2NjFCNTU5LCAweDlCMjQxRkUxLCAw
eDgyMjRBNzJCLCAweDVGNjEwRDkzLCAweDNENDM4NEFBLCAweEUwMDYyRTEyLAotCTB4MEY0MkY1
M0UsIDB4RDIwNzVGODYsIDB4QjAyNUQ2QkYsIDB4NkQ2MDdDMDcsIDB4NzQ2MEM0Q0QsIDB4QTky
NTZFNzUsIDB4Q0IwN0U3NEMsIDB4MTY0MjRERjQsCi0JMHgxMDYyMjdFNSwgMHhDRDI3OEQ1RCwg
MHhBRjA1MDQ2NCwgMHg3MjQwQUVEQywgMHg2QjQwMTYxNiwgMHhCNjA1QkNBRSwgMHhENDI3MzU5
NywgMHgwOTYyOUYyRiwKLQkweEU2MjY0NDAzLCAweDNCNjNFRUJCLCAweDU5NDE2NzgyLCAweDg0
MDRDRDNBLCAweDlEMDQ3NUYwLCAweDQwNDFERjQ4LCAweDIyNjM1NjcxLCAweEZGMjZGQ0M5LAot
CTB4MkUyMzgyNTMsIDB4RjM2NjI4RUIsIDB4OTE0NEExRDIsIDB4NEMwMTBCNkEsIDB4NTUwMUIz
QTAsIDB4ODg0NDE5MTgsIDB4RUE2NjkwMjEsIDB4MzcyMzNBOTksCi0JMHhEODY3RTFCNSwgMHgw
NTIyNEIwRCwgMHg2NzAwQzIzNCwgMHhCQTQ1Njg4QywgMHhBMzQ1RDA0NiwgMHg3RTAwN0FGRSwg
MHgxQzIyRjNDNywgMHhDMTY3NTk3RiwKLQkweEM3NDczMzZFLCAweDFBMDI5OUQ2LCAweDc4MjAx
MEVGLCAweEE1NjVCQTU3LCAweEJDNjUwMjlELCAweDYxMjBBODI1LCAweDAzMDIyMTFDLCAweERF
NDc4QkE0LAotCTB4MzEwMzUwODgsIDB4RUM0NkZBMzAsIDB4OEU2NDczMDksIDB4NTMyMUQ5QjEs
IDB4NEEyMTYxN0IsIDB4OTc2NENCQzMsIDB4RjU0NjQyRkEsIDB4MjgwM0U4NDIKLX07Ci0KLS8q
Ci0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4X281NgotICovCi0K
LQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQg
YXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgot
ICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0
MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0g
KiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxl
IEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwotICogTnVtYmVyIG9m
IFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3Ro
cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9y
eSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29u
c3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzY0WzI1Nl0gPQotewotCTB4MDAwMDAwMDAs
IDB4MzgxMTZGQUMsIDB4NzAyMkRGNTgsIDB4NDgzM0IwRjQsIDB4RTA0NUJFQjAsIDB4RDg1NEQx
MUMsIDB4OTA2NzYxRTgsIDB4QTg3NjBFNDQsCi0JMHhDNTY3MEI5MSwgMHhGRDc2NjQzRCwgMHhC
NTQ1RDRDOSwgMHg4RDU0QkI2NSwgMHgyNTIyQjUyMSwgMHgxRDMzREE4RCwgMHg1NTAwNkE3OSwg
MHg2RDExMDVENSwKLQkweDhGMjI2MUQzLCAweEI3MzMwRTdGLCAweEZGMDBCRThCLCAweEM3MTFE
MTI3LCAweDZGNjdERjYzLCAweDU3NzZCMENGLCAweDFGNDUwMDNCLCAweDI3NTQ2Rjk3LAotCTB4
NEE0NTZBNDIsIDB4NzI1NDA1RUUsIDB4M0E2N0I1MUEsIDB4MDI3NkRBQjYsIDB4QUEwMEQ0RjIs
IDB4OTIxMUJCNUUsIDB4REEyMjBCQUEsIDB4RTIzMzY0MDYsCi0JMHgxQkE4QjU1NywgMHgyM0I5
REFGQiwgMHg2QjhBNkEwRiwgMHg1MzlCMDVBMywgMHhGQkVEMEJFNywgMHhDM0ZDNjQ0QiwgMHg4
QkNGRDRCRiwgMHhCM0RFQkIxMywKLQkweERFQ0ZCRUM2LCAweEU2REVEMTZBLCAweEFFRUQ2MTlF
LCAweDk2RkMwRTMyLCAweDNFOEEwMDc2LCAweDA2OUI2RkRBLCAweDRFQThERjJFLCAweDc2QjlC
MDgyLAotCTB4OTQ4QUQ0ODQsIDB4QUM5QkJCMjgsIDB4RTRBODBCREMsIDB4RENCOTY0NzAsIDB4
NzRDRjZBMzQsIDB4NENERTA1OTgsIDB4MDRFREI1NkMsIDB4M0NGQ0RBQzAsCi0JMHg1MUVEREYx
NSwgMHg2OUZDQjBCOSwgMHgyMUNGMDA0RCwgMHgxOURFNkZFMSwgMHhCMUE4NjFBNSwgMHg4OUI5
MEUwOSwgMHhDMThBQkVGRCwgMHhGOTlCRDE1MSwKLQkweDM3NTE2QUFFLCAweDBGNDAwNTAyLCAw
eDQ3NzNCNUY2LCAweDdGNjJEQTVBLCAweEQ3MTRENDFFLCAweEVGMDVCQkIyLCAweEE3MzYwQjQ2
LCAweDlGMjc2NEVBLAotCTB4RjIzNjYxM0YsIDB4Q0EyNzBFOTMsIDB4ODIxNEJFNjcsIDB4QkEw
NUQxQ0IsIDB4MTI3M0RGOEYsIDB4MkE2MkIwMjMsIDB4NjI1MTAwRDcsIDB4NUE0MDZGN0IsCi0J
MHhCODczMEI3RCwgMHg4MDYyNjREMSwgMHhDODUxRDQyNSwgMHhGMDQwQkI4OSwgMHg1ODM2QjVD
RCwgMHg2MDI3REE2MSwgMHgyODE0NkE5NSwgMHgxMDA1MDUzOSwKLQkweDdEMTQwMEVDLCAweDQ1
MDU2RjQwLCAweDBEMzZERkI0LCAweDM1MjdCMDE4LCAweDlENTFCRTVDLCAweEE1NDBEMUYwLCAw
eEVENzM2MTA0LCAweEQ1NjIwRUE4LAotCTB4MkNGOURGRjksIDB4MTRFOEIwNTUsIDB4NUNEQjAw
QTEsIDB4NjRDQTZGMEQsIDB4Q0NCQzYxNDksIDB4RjRBRDBFRTUsIDB4QkM5RUJFMTEsIDB4ODQ4
RkQxQkQsCi0JMHhFOTlFRDQ2OCwgMHhEMThGQkJDNCwgMHg5OUJDMEIzMCwgMHhBMUFENjQ5Qywg
MHgwOURCNkFEOCwgMHgzMUNBMDU3NCwgMHg3OUY5QjU4MCwgMHg0MUU4REEyQywKLQkweEEzREJC
RTJBLCAweDlCQ0FEMTg2LCAweEQzRjk2MTcyLCAweEVCRTgwRURFLCAweDQzOUUwMDlBLCAweDdC
OEY2RjM2LCAweDMzQkNERkMyLCAweDBCQURCMDZFLAotCTB4NjZCQ0I1QkIsIDB4NUVBRERBMTcs
IDB4MTY5RTZBRTMsIDB4MkU4RjA1NEYsIDB4ODZGOTBCMEIsIDB4QkVFODY0QTcsIDB4RjZEQkQ0
NTMsIDB4Q0VDQUJCRkYsCi0JMHg2RUEyRDU1QywgMHg1NkIzQkFGMCwgMHgxRTgwMEEwNCwgMHgy
NjkxNjVBOCwgMHg4RUU3NkJFQywgMHhCNkY2MDQ0MCwgMHhGRUM1QjRCNCwgMHhDNkQ0REIxOCwK
LQkweEFCQzVERUNELCAweDkzRDRCMTYxLCAweERCRTcwMTk1LCAweEUzRjY2RTM5LCAweDRCODA2
MDdELCAweDczOTEwRkQxLCAweDNCQTJCRjI1LCAweDAzQjNEMDg5LAotCTB4RTE4MEI0OEYsIDB4
RDk5MURCMjMsIDB4OTFBMjZCRDcsIDB4QTlCMzA0N0IsIDB4MDFDNTBBM0YsIDB4MzlENDY1OTMs
IDB4NzFFN0Q1NjcsIDB4NDlGNkJBQ0IsCi0JMHgyNEU3QkYxRSwgMHgxQ0Y2RDBCMiwgMHg1NEM1
NjA0NiwgMHg2Q0Q0MEZFQSwgMHhDNEEyMDFBRSwgMHhGQ0IzNkUwMiwgMHhCNDgwREVGNiwgMHg4
QzkxQjE1QSwKLQkweDc1MEE2MDBCLCAweDREMUIwRkE3LCAweDA1MjhCRjUzLCAweDNEMzlEMEZG
LCAweDk1NEZERUJCLCAweEFENUVCMTE3LCAweEU1NkQwMUUzLCAweEREN0M2RTRGLAotCTB4QjA2
RDZCOUEsIDB4ODg3QzA0MzYsIDB4QzA0RkI0QzIsIDB4Rjg1RURCNkUsIDB4NTAyOEQ1MkEsIDB4
NjgzOUJBODYsIDB4MjAwQTBBNzIsIDB4MTgxQjY1REUsCi0JMHhGQTI4MDFEOCwgMHhDMjM5NkU3
NCwgMHg4QTBBREU4MCwgMHhCMjFCQjEyQywgMHgxQTZEQkY2OCwgMHgyMjdDRDBDNCwgMHg2QTRG
NjAzMCwgMHg1MjVFMEY5QywKLQkweDNGNEYwQTQ5LCAweDA3NUU2NUU1LCAweDRGNkRENTExLCAw
eDc3N0NCQUJELCAweERGMEFCNEY5LCAweEU3MUJEQjU1LCAweEFGMjg2QkExLCAweDk3MzkwNDBE
LAotCTB4NTlGM0JGRjIsIDB4NjFFMkQwNUUsIDB4MjlEMTYwQUEsIDB4MTFDMDBGMDYsIDB4QjlC
NjAxNDIsIDB4ODFBNzZFRUUsIDB4Qzk5NERFMUEsIDB4RjE4NUIxQjYsCi0JMHg5Qzk0QjQ2Mywg
MHhBNDg1REJDRiwgMHhFQ0I2NkIzQiwgMHhENEE3MDQ5NywgMHg3Q0QxMEFEMywgMHg0NEMwNjU3
RiwgMHgwQ0YzRDU4QiwgMHgzNEUyQkEyNywKLQkweEQ2RDFERTIxLCAweEVFQzBCMThELCAweEE2
RjMwMTc5LCAweDlFRTI2RUQ1LCAweDM2OTQ2MDkxLCAweDBFODUwRjNELCAweDQ2QjZCRkM5LCAw
eDdFQTdEMDY1LAotCTB4MTNCNkQ1QjAsIDB4MkJBN0JBMUMsIDB4NjM5NDBBRTgsIDB4NUI4NTY1
NDQsIDB4RjNGMzZCMDAsIDB4Q0JFMjA0QUMsIDB4ODNEMUI0NTgsIDB4QkJDMERCRjQsCi0JMHg0
MjVCMEFBNSwgMHg3QTRBNjUwOSwgMHgzMjc5RDVGRCwgMHgwQTY4QkE1MSwgMHhBMjFFQjQxNSwg
MHg5QTBGREJCOSwgMHhEMjNDNkI0RCwgMHhFQTJEMDRFMSwKLQkweDg3M0MwMTM0LCAweEJGMkQ2
RTk4LCAweEY3MUVERTZDLCAweENGMEZCMUMwLCAweDY3NzlCRjg0LCAweDVGNjhEMDI4LCAweDE3
NUI2MERDLCAweDJGNEEwRjcwLAotCTB4Q0Q3OTZCNzYsIDB4RjU2ODA0REEsIDB4QkQ1QkI0MkUs
IDB4ODU0QURCODIsIDB4MkQzQ0Q1QzYsIDB4MTUyREJBNkEsIDB4NUQxRTBBOUUsIDB4NjUwRjY1
MzIsCi0JMHgwODFFNjBFNywgMHgzMDBGMEY0QiwgMHg3ODNDQkZCRiwgMHg0MDJERDAxMywgMHhF
ODVCREU1NywgMHhEMDRBQjFGQiwgMHg5ODc5MDEwRiwgMHhBMDY4NkVBMwotfTsKLQotLyoKLSAq
IGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzY0Ci0gKi8KLQotCi0K
LS8qCi0gKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRv
bWFnaWNhbGx5IHVzaW5nIHRoZQotICogZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6Ci0gKgot
ICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQxCi0g
KiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKLSAqIFJl
ZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQotICogVGFibGUgR2Vu
ZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBOdW1iZXIgb2YgU2xp
Y2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCi0gKiBTbGljZSBMZW5ndGhzID0g
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAotICogRGlyZWN0b3J5IE5h
bWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAotICogRmlsZSBOYW1lID0gLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYwotICovCi0KLXN0YXRpYyBjb25zdCB1
aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNzJbMjU2XSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHhF
RjMwNkIxOSwgMHhEQjhDQTBDMywgMHgzNEJDQ0JEQSwgMHhCMkY1Mzc3NywgMHg1REM1NUM2RSwg
MHg2OTc5OTdCNCwgMHg4NjQ5RkNBRCwKLQkweDYwMDYxODFGLCAweDhGMzY3MzA2LCAweEJCOEFC
OERDLCAweDU0QkFEM0M1LCAweEQyRjMyRjY4LCAweDNEQzM0NDcxLCAweDA5N0Y4RkFCLCAweEU2
NEZFNEIyLAotCTB4QzAwQzMwM0UsIDB4MkYzQzVCMjcsIDB4MUI4MDkwRkQsIDB4RjRCMEZCRTQs
IDB4NzJGOTA3NDksIDB4OURDOTZDNTAsIDB4QTk3NUE3OEEsIDB4NDY0NUNDOTMsCi0JMHhBMDBB
MjgyMSwgMHg0RjNBNDMzOCwgMHg3Qjg2ODhFMiwgMHg5NEI2RTNGQiwgMHgxMkZGMUY1NiwgMHhG
RENGNzQ0RiwgMHhDOTczQkY5NSwgMHgyNjQzRDQ4QywKLQkweDg1RjQxNjhELCAweDZBQzQ3RDk0
LCAweDVFNzhCNjRFLCAweEIxNDhERDU3LCAweDM3MDEyMUZBLCAweEQ4MzE0QUUzLCAweEVDOEQ4
MTM5LCAweDAzQkRFQTIwLAotCTB4RTVGMjBFOTIsIDB4MEFDMjY1OEIsIDB4M0U3RUFFNTEsIDB4
RDE0RUM1NDgsIDB4NTcwNzM5RTUsIDB4QjgzNzUyRkMsIDB4OEM4Qjk5MjYsIDB4NjNCQkYyM0Ys
Ci0JMHg0NUY4MjZCMywgMHhBQUM4NERBQSwgMHg5RTc0ODY3MCwgMHg3MTQ0RUQ2OSwgMHhGNzBE
MTFDNCwgMHgxODNEN0FERCwgMHgyQzgxQjEwNywgMHhDM0IxREExRSwKLQkweDI1RkUzRUFDLCAw
eENBQ0U1NUI1LCAweEZFNzI5RTZGLCAweDExNDJGNTc2LCAweDk3MEIwOURCLCAweDc4M0I2MkMy
LCAweDRDODdBOTE4LCAweEEzQjdDMjAxLAotCTB4MEUwNDVCRUIsIDB4RTEzNDMwRjIsIDB4RDU4
OEZCMjgsIDB4M0FCODkwMzEsIDB4QkNGMTZDOUMsIDB4NTNDMTA3ODUsIDB4Njc3RENDNUYsIDB4
ODg0REE3NDYsCi0JMHg2RTAyNDNGNCwgMHg4MTMyMjhFRCwgMHhCNThFRTMzNywgMHg1QUJFODgy
RSwgMHhEQ0Y3NzQ4MywgMHgzM0M3MUY5QSwgMHgwNzdCRDQ0MCwgMHhFODRCQkY1OSwKLQkweENF
MDg2QkQ1LCAweDIxMzgwMENDLCAweDE1ODRDQjE2LCAweEZBQjRBMDBGLCAweDdDRkQ1Q0EyLCAw
eDkzQ0QzN0JCLCAweEE3NzFGQzYxLCAweDQ4NDE5Nzc4LAotCTB4QUUwRTczQ0EsIDB4NDEzRTE4
RDMsIDB4NzU4MkQzMDksIDB4OUFCMkI4MTAsIDB4MUNGQjQ0QkQsIDB4RjNDQjJGQTQsIDB4Qzc3
N0U0N0UsIDB4Mjg0NzhGNjcsCi0JMHg4QkYwNEQ2NiwgMHg2NEMwMjY3RiwgMHg1MDdDRURBNSwg
MHhCRjRDODZCQywgMHgzOTA1N0ExMSwgMHhENjM1MTEwOCwgMHhFMjg5REFEMiwgMHgwREI5QjFD
QiwKLQkweEVCRjY1NTc5LCAweDA0QzYzRTYwLCAweDMwN0FGNUJBLCAweERGNEE5RUEzLCAweDU5
MDM2MjBFLCAweEI2MzMwOTE3LCAweDgyOEZDMkNELCAweDZEQkZBOUQ0LAotCTB4NEJGQzdENTgs
IDB4QTRDQzE2NDEsIDB4OTA3MEREOUIsIDB4N0Y0MEI2ODIsIDB4RjkwOTRBMkYsIDB4MTYzOTIx
MzYsIDB4MjI4NUVBRUMsIDB4Q0RCNTgxRjUsCi0JMHgyQkZBNjU0NywgMHhDNENBMEU1RSwgMHhG
MDc2QzU4NCwgMHgxRjQ2QUU5RCwgMHg5OTBGNTIzMCwgMHg3NjNGMzkyOSwgMHg0MjgzRjJGMywg
MHhBREIzOTlFQSwKLQkweDFDMDhCN0Q2LCAweEYzMzhEQ0NGLCAweEM3ODQxNzE1LCAweDI4QjQ3
QzBDLCAweEFFRkQ4MEExLCAweDQxQ0RFQkI4LCAweDc1NzEyMDYyLCAweDlBNDE0QjdCLAotCTB4
N0MwRUFGQzksIDB4OTMzRUM0RDAsIDB4QTc4MjBGMEEsIDB4NDhCMjY0MTMsIDB4Q0VGQjk4QkUs
IDB4MjFDQkYzQTcsIDB4MTU3NzM4N0QsIDB4RkE0NzUzNjQsCi0JMHhEQzA0ODdFOCwgMHgzMzM0
RUNGMSwgMHgwNzg4MjcyQiwgMHhFOEI4NEMzMiwgMHg2RUYxQjA5RiwgMHg4MUMxREI4NiwgMHhC
NTdEMTA1QywgMHg1QTREN0I0NSwKLQkweEJDMDI5RkY3LCAweDUzMzJGNEVFLCAweDY3OEUzRjM0
LCAweDg4QkU1NDJELCAweDBFRjdBODgwLCAweEUxQzdDMzk5LCAweEQ1N0IwODQzLCAweDNBNEI2
MzVBLAotCTB4OTlGQ0ExNUIsIDB4NzZDQ0NBNDIsIDB4NDI3MDAxOTgsIDB4QUQ0MDZBODEsIDB4
MkIwOTk2MkMsIDB4QzQzOUZEMzUsIDB4RjA4NTM2RUYsIDB4MUZCNTVERjYsCi0JMHhGOUZBQjk0
NCwgMHgxNkNBRDI1RCwgMHgyMjc2MTk4NywgMHhDRDQ2NzI5RSwgMHg0QjBGOEUzMywgMHhBNDNG
RTUyQSwgMHg5MDgzMkVGMCwgMHg3RkIzNDVFOSwKLQkweDU5RjA5MTY1LCAweEI2QzBGQTdDLCAw
eDgyN0MzMUE2LCAweDZENEM1QUJGLCAweEVCMDVBNjEyLCAweDA0MzVDRDBCLCAweDMwODkwNkQx
LCAweERGQjk2REM4LAotCTB4MzlGNjg5N0EsIDB4RDZDNkUyNjMsIDB4RTI3QTI5QjksIDB4MEQ0
QTQyQTAsIDB4OEIwM0JFMEQsIDB4NjQzM0Q1MTQsIDB4NTA4RjFFQ0UsIDB4QkZCRjc1RDcsCi0J
MHgxMjBDRUMzRCwgMHhGRDNDODcyNCwgMHhDOTgwNENGRSwgMHgyNkIwMjdFNywgMHhBMEY5REI0
QSwgMHg0RkM5QjA1MywgMHg3Qjc1N0I4OSwgMHg5NDQ1MTA5MCwKLQkweDcyMEFGNDIyLCAweDlE
M0E5RjNCLCAweEE5ODY1NEUxLCAweDQ2QjYzRkY4LCAweEMwRkZDMzU1LCAweDJGQ0ZBODRDLCAw
eDFCNzM2Mzk2LCAweEY0NDMwODhGLAotCTB4RDIwMERDMDMsIDB4M0QzMEI3MUEsIDB4MDk4QzdD
QzAsIDB4RTZCQzE3RDksIDB4NjBGNUVCNzQsIDB4OEZDNTgwNkQsIDB4QkI3OTRCQjcsIDB4NTQ0
OTIwQUUsCi0JMHhCMjA2QzQxQywgMHg1RDM2QUYwNSwgMHg2OThBNjRERiwgMHg4NkJBMEZDNiwg
MHgwMEYzRjM2QiwgMHhFRkMzOTg3MiwgMHhEQjdGNTNBOCwgMHgzNDRGMzhCMSwKLQkweDk3RjhG
QUIwLCAweDc4Qzg5MUE5LCAweDRDNzQ1QTczLCAweEEzNDQzMTZBLCAweDI1MERDREM3LCAweENB
M0RBNkRFLCAweEZFODE2RDA0LCAweDExQjEwNjFELAotCTB4RjdGRUUyQUYsIDB4MThDRTg5QjYs
IDB4MkM3MjQyNkMsIDB4QzM0MjI5NzUsIDB4NDUwQkQ1RDgsIDB4QUEzQkJFQzEsIDB4OUU4Nzc1
MUIsIDB4NzFCNzFFMDIsCi0JMHg1N0Y0Q0E4RSwgMHhCOEM0QTE5NywgMHg4Qzc4NkE0RCwgMHg2
MzQ4MDE1NCwgMHhFNTAxRkRGOSwgMHgwQTMxOTZFMCwgMHgzRThENUQzQSwgMHhEMUJEMzYyMywK
LQkweDM3RjJEMjkxLCAweEQ4QzJCOTg4LCAweEVDN0U3MjUyLCAweDAzNEUxOTRCLCAweDg1MDdF
NUU2LCAweDZBMzc4RUZGLCAweDVFOEI0NTI1LCAweEIxQkIyRTNDCi19OwotCi0vKgotICogZW5k
IG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNzIKLSAqLwotCi0KLQotLyoK
LSAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdp
Y2FsbHkgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBH
ZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKLSAqIEdl
bmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0cwotICogUmVmbGVj
dGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0
aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJpdHMKLSAqIE51bWJlciBvZiBTbGljZXMg
PSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMKLSAqIFNsaWNlIExlbmd0aHMgPSAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDggOCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9
IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCi0gKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCi0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQz
Ml90IHNjdHBfY3JjX3RhYmxlaWw4X284MFsyNTZdID0KLXsKLQkweDAwMDAwMDAwLCAweDY4MDMy
Q0M4LCAweEQwMDY1OTkwLCAweEI4MDU3NTU4LCAweEE1RTBDNUQxLCAweENERTNFOTE5LCAweDc1
RTY5QzQxLCAweDFERTVCMDg5LAotCTB4NEUyREZENTMsIDB4MjYyRUQxOUIsIDB4OUUyQkE0QzMs
IDB4RjYyODg4MEIsIDB4RUJDRDM4ODIsIDB4ODNDRTE0NEEsIDB4M0JDQjYxMTIsIDB4NTNDODRE
REEsCi0JMHg5QzVCRkFBNiwgMHhGNDU4RDY2RSwgMHg0QzVEQTMzNiwgMHgyNDVFOEZGRSwgMHgz
OUJCM0Y3NywgMHg1MUI4MTNCRiwgMHhFOUJENjZFNywgMHg4MUJFNEEyRiwKLQkweEQyNzYwN0Y1
LCAweEJBNzUyQjNELCAweDAyNzA1RTY1LCAweDZBNzM3MkFELCAweDc3OTZDMjI0LCAweDFGOTVF
RUVDLCAweEE3OTA5QkI0LCAweENGOTNCNzdDLAotCTB4M0Q1QjgzQkQsIDB4NTU1OEFGNzUsIDB4
RUQ1RERBMkQsIDB4ODU1RUY2RTUsIDB4OThCQjQ2NkMsIDB4RjBCODZBQTQsIDB4NDhCRDFGRkMs
IDB4MjBCRTMzMzQsCi0JMHg3Mzc2N0VFRSwgMHgxQjc1NTIyNiwgMHhBMzcwMjc3RSwgMHhDQjcz
MEJCNiwgMHhENjk2QkIzRiwgMHhCRTk1OTdGNywgMHgwNjkwRTJBRiwgMHg2RTkzQ0U2NywKLQkw
eEExMDA3OTFCLCAweEM5MDM1NUQzLCAweDcxMDYyMDhCLCAweDE5MDUwQzQzLCAweDA0RTBCQ0NB
LCAweDZDRTM5MDAyLCAweEQ0RTZFNTVBLCAweEJDRTVDOTkyLAotCTB4RUYyRDg0NDgsIDB4ODcy
RUE4ODAsIDB4M0YyQkRERDgsIDB4NTcyOEYxMTAsIDB4NEFDRDQxOTksIDB4MjJDRTZENTEsIDB4
OUFDQjE4MDksIDB4RjJDODM0QzEsCi0JMHg3QUI3MDc3QSwgMHgxMkI0MkJCMiwgMHhBQUIxNUVF
QSwgMHhDMkIyNzIyMiwgMHhERjU3QzJBQiwgMHhCNzU0RUU2MywgMHgwRjUxOUIzQiwgMHg2NzUy
QjdGMywKLQkweDM0OUFGQTI5LCAweDVDOTlENkUxLCAweEU0OUNBM0I5LCAweDhDOUY4RjcxLCAw
eDkxN0EzRkY4LCAweEY5NzkxMzMwLCAweDQxN0M2NjY4LCAweDI5N0Y0QUEwLAotCTB4RTZFQ0ZE
REMsIDB4OEVFRkQxMTQsIDB4MzZFQUE0NEMsIDB4NUVFOTg4ODQsIDB4NDMwQzM4MEQsIDB4MkIw
RjE0QzUsIDB4OTMwQTYxOUQsIDB4RkIwOTRENTUsCi0JMHhBOEMxMDA4RiwgMHhDMEMyMkM0Nywg
MHg3OEM3NTkxRiwgMHgxMEM0NzVENywgMHgwRDIxQzU1RSwgMHg2NTIyRTk5NiwgMHhERDI3OUND
RSwgMHhCNTI0QjAwNiwKLQkweDQ3RUM4NEM3LCAweDJGRUZBODBGLCAweDk3RUFERDU3LCAweEZG
RTlGMTlGLCAweEUyMEM0MTE2LCAweDhBMEY2RERFLCAweDMyMEExODg2LCAweDVBMDkzNDRFLAot
CTB4MDlDMTc5OTQsIDB4NjFDMjU1NUMsIDB4RDlDNzIwMDQsIDB4QjFDNDBDQ0MsIDB4QUMyMUJD
NDUsIDB4QzQyMjkwOEQsIDB4N0MyN0U1RDUsIDB4MTQyNEM5MUQsCi0JMHhEQkI3N0U2MSwgMHhC
M0I0NTJBOSwgMHgwQkIxMjdGMSwgMHg2M0IyMEIzOSwgMHg3RTU3QkJCMCwgMHgxNjU0OTc3OCwg
MHhBRTUxRTIyMCwgMHhDNjUyQ0VFOCwKLQkweDk1OUE4MzMyLCAweEZEOTlBRkZBLCAweDQ1OUNE
QUEyLCAweDJEOUZGNjZBLCAweDMwN0E0NkUzLCAweDU4Nzk2QTJCLCAweEUwN0MxRjczLCAweDg4
N0YzM0JCLAotCTB4RjU2RTBFRjQsIDB4OUQ2RDIyM0MsIDB4MjU2ODU3NjQsIDB4NEQ2QjdCQUMs
IDB4NTA4RUNCMjUsIDB4Mzg4REU3RUQsIDB4ODA4ODkyQjUsIDB4RTg4QkJFN0QsCi0JMHhCQjQz
RjNBNywgMHhEMzQwREY2RiwgMHg2QjQ1QUEzNywgMHgwMzQ2ODZGRiwgMHgxRUEzMzY3NiwgMHg3
NkEwMUFCRSwgMHhDRUE1NkZFNiwgMHhBNkE2NDMyRSwKLQkweDY5MzVGNDUyLCAweDAxMzZEODlB
LCAweEI5MzNBREMyLCAweEQxMzA4MTBBLCAweENDRDUzMTgzLCAweEE0RDYxRDRCLCAweDFDRDM2
ODEzLCAweDc0RDA0NERCLAotCTB4MjcxODA5MDEsIDB4NEYxQjI1QzksIDB4RjcxRTUwOTEsIDB4
OUYxRDdDNTksIDB4ODJGOENDRDAsIDB4RUFGQkUwMTgsIDB4NTJGRTk1NDAsIDB4M0FGREI5ODgs
Ci0JMHhDODM1OEQ0OSwgMHhBMDM2QTE4MSwgMHgxODMzRDREOSwgMHg3MDMwRjgxMSwgMHg2REQ1
NDg5OCwgMHgwNUQ2NjQ1MCwgMHhCREQzMTEwOCwgMHhENUQwM0RDMCwKLQkweDg2MTg3MDFBLCAw
eEVFMUI1Q0QyLCAweDU2MUUyOThBLCAweDNFMUQwNTQyLCAweDIzRjhCNUNCLCAweDRCRkI5OTAz
LCAweEYzRkVFQzVCLCAweDlCRkRDMDkzLAotCTB4NTQ2RTc3RUYsIDB4M0M2RDVCMjcsIDB4ODQ2
ODJFN0YsIDB4RUM2QjAyQjcsIDB4RjE4RUIyM0UsIDB4OTk4RDlFRjYsIDB4MjE4OEVCQUUsIDB4
NDk4QkM3NjYsCi0JMHgxQTQzOEFCQywgMHg3MjQwQTY3NCwgMHhDQTQ1RDMyQywgMHhBMjQ2RkZF
NCwgMHhCRkEzNEY2RCwgMHhEN0EwNjNBNSwgMHg2RkE1MTZGRCwgMHgwN0E2M0EzNSwKLQkweDhG
RDkwOThFLCAweEU3REEyNTQ2LCAweDVGREY1MDFFLCAweDM3REM3Q0Q2LCAweDJBMzlDQzVGLCAw
eDQyM0FFMDk3LCAweEZBM0Y5NUNGLCAweDkyM0NCOTA3LAotCTB4QzFGNEY0REQsIDB4QTlGN0Q4
MTUsIDB4MTFGMkFENEQsIDB4NzlGMTgxODUsIDB4NjQxNDMxMEMsIDB4MEMxNzFEQzQsIDB4QjQx
MjY4OUMsIDB4REMxMTQ0NTQsCi0JMHgxMzgyRjMyOCwgMHg3QjgxREZFMCwgMHhDMzg0QUFCOCwg
MHhBQjg3ODY3MCwgMHhCNjYyMzZGOSwgMHhERTYxMUEzMSwgMHg2NjY0NkY2OSwgMHgwRTY3NDNB
MSwKLQkweDVEQUYwRTdCLCAweDM1QUMyMkIzLCAweDhEQTk1N0VCLCAweEU1QUE3QjIzLCAweEY4
NEZDQkFBLCAweDkwNENFNzYyLCAweDI4NDk5MjNBLCAweDQwNEFCRUYyLAotCTB4QjI4MjhBMzMs
IDB4REE4MUE2RkIsIDB4NjI4NEQzQTMsIDB4MEE4N0ZGNkIsIDB4MTc2MjRGRTIsIDB4N0Y2MTYz
MkEsIDB4Qzc2NDE2NzIsIDB4QUY2NzNBQkEsCi0JMHhGQ0FGNzc2MCwgMHg5NEFDNUJBOCwgMHgy
Q0E5MkVGMCwgMHg0NEFBMDIzOCwgMHg1OTRGQjJCMSwgMHgzMTRDOUU3OSwgMHg4OTQ5RUIyMSwg
MHhFMTRBQzdFOSwKLQkweDJFRDk3MDk1LCAweDQ2REE1QzVELCAweEZFREYyOTA1LCAweDk2REMw
NUNELCAweDhCMzlCNTQ0LCAweEUzM0E5OThDLCAweDVCM0ZFQ0Q0LCAweDMzM0NDMDFDLAotCTB4
NjBGNDhEQzYsIDB4MDhGN0ExMEUsIDB4QjBGMkQ0NTYsIDB4RDhGMUY4OUUsIDB4QzUxNDQ4MTcs
IDB4QUQxNzY0REYsIDB4MTUxMjExODcsIDB4N0QxMTNENEYKLX07Ci0KLS8qCi0gKiBlbmQgb2Yg
dGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4X284MAotICovCi0KLQotCi0vKgotICog
VGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxs
eSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgotICoKLSAqIEdlbmVy
YXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQotICogR2VuZXJh
dG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQg
Qml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxlIEdlbmVyYXRpb24g
T2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwotICogTnVtYmVyIG9mIFNsaWNlcyA9IC4u
Li4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9yeSBOYW1lID0gLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qg
c2N0cF9jcmNfdGFibGVpbDhfbzg4WzI1Nl0gPQotewotCTB4MDAwMDAwMDAsIDB4NDkzQzdEMjcs
IDB4OTI3OEZBNEUsIDB4REI0NDg3NjksIDB4MjExRDgyNkQsIDB4NjgyMUZGNEEsIDB4QjM2NTc4
MjMsIDB4RkE1OTA1MDQsCi0JMHg0MjNCMDREQSwgMHgwQjA3NzlGRCwgMHhEMDQzRkU5NCwgMHg5
OTdGODNCMywgMHg2MzI2ODZCNywgMHgyQTFBRkI5MCwgMHhGMTVFN0NGOSwgMHhCODYyMDFERSwK
LQkweDg0NzYwOUI0LCAweENENEE3NDkzLCAweDE2MEVGM0ZBLCAweDVGMzI4RURELCAweEE1NkI4
QkQ5LCAweEVDNTdGNkZFLCAweDM3MTM3MTk3LCAweDdFMkYwQ0IwLAotCTB4QzY0RDBENkUsIDB4
OEY3MTcwNDksIDB4NTQzNUY3MjAsIDB4MUQwOThBMDcsIDB4RTc1MDhGMDMsIDB4QUU2Q0YyMjQs
IDB4NzUyODc1NEQsIDB4M0MxNDA4NkEsCi0JMHgwRDAwNjU5OSwgMHg0NDNDMThCRSwgMHg5Rjc4
OUZENywgMHhENjQ0RTJGMCwgMHgyQzFERTdGNCwgMHg2NTIxOUFEMywgMHhCRTY1MURCQSwgMHhG
NzU5NjA5RCwKLQkweDRGM0I2MTQzLCAweDA2MDcxQzY0LCAweERENDM5QjBELCAweDk0N0ZFNjJB
LCAweDZFMjZFMzJFLCAweDI3MUE5RTA5LCAweEZDNUUxOTYwLCAweEI1NjI2NDQ3LAotCTB4ODk3
NjZDMkQsIDB4QzA0QTExMEEsIDB4MUIwRTk2NjMsIDB4NTIzMkVCNDQsIDB4QTg2QkVFNDAsIDB4
RTE1NzkzNjcsIDB4M0ExMzE0MEUsIDB4NzMyRjY5MjksCi0JMHhDQjRENjhGNywgMHg4MjcxMTVE
MCwgMHg1OTM1OTJCOSwgMHgxMDA5RUY5RSwgMHhFQTUwRUE5QSwgMHhBMzZDOTdCRCwgMHg3ODI4
MTBENCwgMHgzMTE0NkRGMywKLQkweDFBMDBDQjMyLCAweDUzM0NCNjE1LCAweDg4NzgzMTdDLCAw
eEMxNDQ0QzVCLCAweDNCMUQ0OTVGLCAweDcyMjEzNDc4LCAweEE5NjVCMzExLCAweEUwNTlDRTM2
LAotCTB4NTgzQkNGRTgsIDB4MTEwN0IyQ0YsIDB4Q0E0MzM1QTYsIDB4ODM3RjQ4ODEsIDB4Nzky
NjREODUsIDB4MzAxQTMwQTIsIDB4RUI1RUI3Q0IsIDB4QTI2MkNBRUMsCi0JMHg5RTc2QzI4Niwg
MHhENzRBQkZBMSwgMHgwQzBFMzhDOCwgMHg0NTMyNDVFRiwgMHhCRjZCNDBFQiwgMHhGNjU3M0RD
QywgMHgyRDEzQkFBNSwgMHg2NDJGQzc4MiwKLQkweERDNERDNjVDLCAweDk1NzFCQjdCLCAweDRF
MzUzQzEyLCAweDA3MDk0MTM1LCAweEZENTA0NDMxLCAweEI0NkMzOTE2LCAweDZGMjhCRTdGLCAw
eDI2MTRDMzU4LAotCTB4MTcwMEFFQUIsIDB4NUUzQ0QzOEMsIDB4ODU3ODU0RTUsIDB4Q0M0NDI5
QzIsIDB4MzYxRDJDQzYsIDB4N0YyMTUxRTEsIDB4QTQ2NUQ2ODgsIDB4RUQ1OUFCQUYsCi0JMHg1
NTNCQUE3MSwgMHgxQzA3RDc1NiwgMHhDNzQzNTAzRiwgMHg4RTdGMkQxOCwgMHg3NDI2MjgxQywg
MHgzRDFBNTUzQiwgMHhFNjVFRDI1MiwgMHhBRjYyQUY3NSwKLQkweDkzNzZBNzFGLCAweERBNEFE
QTM4LCAweDAxMEU1RDUxLCAweDQ4MzIyMDc2LCAweEIyNkIyNTcyLCAweEZCNTc1ODU1LCAweDIw
MTNERjNDLCAweDY5MkZBMjFCLAotCTB4RDE0REEzQzUsIDB4OTg3MURFRTIsIDB4NDMzNTU5OEIs
IDB4MEEwOTI0QUMsIDB4RjA1MDIxQTgsIDB4Qjk2QzVDOEYsIDB4NjIyOERCRTYsIDB4MkIxNEE2
QzEsCi0JMHgzNDAxOTY2NCwgMHg3RDNERUI0MywgMHhBNjc5NkMyQSwgMHhFRjQ1MTEwRCwgMHgx
NTFDMTQwOSwgMHg1QzIwNjkyRSwgMHg4NzY0RUU0NywgMHhDRTU4OTM2MCwKLQkweDc2M0E5MkJF
LCAweDNGMDZFRjk5LCAweEU0NDI2OEYwLCAweEFEN0UxNUQ3LCAweDU3MjcxMEQzLCAweDFFMUI2
REY0LCAweEM1NUZFQTlELCAweDhDNjM5N0JBLAotCTB4QjA3NzlGRDAsIDB4Rjk0QkUyRjcsIDB4
MjIwRjY1OUUsIDB4NkIzMzE4QjksIDB4OTE2QTFEQkQsIDB4RDg1NjYwOUEsIDB4MDMxMkU3RjMs
IDB4NEEyRTlBRDQsCi0JMHhGMjRDOUIwQSwgMHhCQjcwRTYyRCwgMHg2MDM0NjE0NCwgMHgyOTA4
MUM2MywgMHhEMzUxMTk2NywgMHg5QTZENjQ0MCwgMHg0MTI5RTMyOSwgMHgwODE1OUUwRSwKLQkw
eDM5MDFGM0ZELCAweDcwM0Q4RURBLCAweEFCNzkwOUIzLCAweEUyNDU3NDk0LCAweDE4MUM3MTkw
LCAweDUxMjAwQ0I3LCAweDhBNjQ4QkRFLCAweEMzNThGNkY5LAotCTB4N0IzQUY3MjcsIDB4MzIw
NjhBMDAsIDB4RTk0MjBENjksIDB4QTA3RTcwNEUsIDB4NUEyNzc1NEEsIDB4MTMxQjA4NkQsIDB4
Qzg1RjhGMDQsIDB4ODE2M0YyMjMsCi0JMHhCRDc3RkE0OSwgMHhGNDRCODc2RSwgMHgyRjBGMDAw
NywgMHg2NjMzN0QyMCwgMHg5QzZBNzgyNCwgMHhENTU2MDUwMywgMHgwRTEyODI2QSwgMHg0NzJF
RkY0RCwKLQkweEZGNENGRTkzLCAweEI2NzA4M0I0LCAweDZEMzQwNERELCAweDI0MDg3OUZBLCAw
eERFNTE3Q0ZFLCAweDk3NkQwMUQ5LCAweDRDMjk4NkIwLCAweDA1MTVGQjk3LAotCTB4MkUwMTVE
NTYsIDB4NjczRDIwNzEsIDB4QkM3OUE3MTgsIDB4RjU0NURBM0YsIDB4MEYxQ0RGM0IsIDB4NDYy
MEEyMUMsIDB4OUQ2NDI1NzUsIDB4RDQ1ODU4NTIsCi0JMHg2QzNBNTk4QywgMHgyNTA2MjRBQiwg
MHhGRTQyQTNDMiwgMHhCNzdFREVFNSwgMHg0RDI3REJFMSwgMHgwNDFCQTZDNiwgMHhERjVGMjFB
RiwgMHg5NjYzNUM4OCwKLQkweEFBNzc1NEUyLCAweEUzNEIyOUM1LCAweDM4MEZBRUFDLCAweDcx
MzNEMzhCLCAweDhCNkFENjhGLCAweEMyNTZBQkE4LCAweDE5MTIyQ0MxLCAweDUwMkU1MUU2LAot
CTB4RTg0QzUwMzgsIDB4QTE3MDJEMUYsIDB4N0EzNEFBNzYsIDB4MzMwOEQ3NTEsIDB4Qzk1MUQy
NTUsIDB4ODA2REFGNzIsIDB4NUIyOTI4MUIsIDB4MTIxNTU1M0MsCi0JMHgyMzAxMzhDRiwgMHg2
QTNENDVFOCwgMHhCMTc5QzI4MSwgMHhGODQ1QkZBNiwgMHgwMjFDQkFBMiwgMHg0QjIwQzc4NSwg
MHg5MDY0NDBFQywgMHhEOTU4M0RDQiwKLQkweDYxM0EzQzE1LCAweDI4MDY0MTMyLCAweEYzNDJD
NjVCLCAweEJBN0VCQjdDLCAweDQwMjdCRTc4LCAweDA5MUJDMzVGLCAweEQyNUY0NDM2LCAweDlC
NjMzOTExLAotCTB4QTc3NzMxN0IsIDB4RUU0QjRDNUMsIDB4MzUwRkNCMzUsIDB4N0MzM0I2MTIs
IDB4ODY2QUIzMTYsIDB4Q0Y1NkNFMzEsIDB4MTQxMjQ5NTgsIDB4NUQyRTM0N0YsCi0JMHhFNTRD
MzVBMSwgMHhBQzcwNDg4NiwgMHg3NzM0Q0ZFRiwgMHgzRTA4QjJDOCwgMHhDNDUxQjdDQywgMHg4
RDZEQ0FFQiwgMHg1NjI5NEQ4MiwgMHgxRjE1MzBBNQotfTsKLQotLyoKLSAqIGVuZCBvZiB0aGUg
Q1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzg4Ci0gKi8KLQotCi1zdGF0aWMgdWludDMy
X3QKLXNjdHBfY3JjMzJjX3NiOF82NF9iaXQodWludDMyX3QgY3JjLAotICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwX2J1ZiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBpbml0
X2J5dGVzKQotewotCXVpbnQzMl90IGxpOwotCXVpbnQzMl90IHRlcm0xLCB0ZXJtMjsKLQl1aW50
MzJfdCBydW5uaW5nX2xlbmd0aDsKLQl1aW50MzJfdCBlbmRfYnl0ZXM7Ci0KLQlydW5uaW5nX2xl
bmd0aCA9ICgobGVuZ3RoIC0gaW5pdF9ieXRlcykgLyA4KSAqIDg7Ci0JZW5kX2J5dGVzID0gbGVu
Z3RoIC0gaW5pdF9ieXRlcyAtIHJ1bm5pbmdfbGVuZ3RoOwotCi0JZm9yIChsaSA9IDA7IGxpIDwg
aW5pdF9ieXRlczsgbGkrKykKLQkJY3JjID0gc2N0cF9jcmNfdGFibGVpbDhfbzMyWyhjcmMgXiAq
cF9idWYrKykgJiAweDAwMDAwMEZGXSBeCi0JCSAgICAoY3JjID4+IDgpOwotCWZvciAobGkgPSAw
OyBsaSA8IHJ1bm5pbmdfbGVuZ3RoIC8gODsgbGkrKykgewotI2lmIEJZVEVfT1JERVIgPT0gQklH
X0VORElBTgotCQljcmMgXj0gKnBfYnVmKys7Ci0JCWNyYyBePSAoKnBfYnVmKyspIDw8IDg7Ci0J
CWNyYyBePSAoKnBfYnVmKyspIDw8IDE2OwotCQljcmMgXj0gKCpwX2J1ZisrKSA8PCAyNDsKLSNl
bHNlCi0JCWNyYyBePSAqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmOwotCQlwX2J1ZiArPSA0Owot
I2VuZGlmCi0JCXRlcm0xID0gc2N0cF9jcmNfdGFibGVpbDhfbzg4W2NyYyAmIDB4MDAwMDAwRkZd
IF4KLQkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X284MFsoY3JjID4+IDgpICYgMHgwMDAwMDBGRl07
Ci0JCXRlcm0yID0gY3JjID4+IDE2OwotCQljcmMgPSB0ZXJtMSBeCi0JCSAgICBzY3RwX2NyY190
YWJsZWlsOF9vNzJbdGVybTIgJiAweDAwMDAwMEZGXSBeCi0JCSAgICBzY3RwX2NyY190YWJsZWls
OF9vNjRbKHRlcm0yID4+IDgpICYgMHgwMDAwMDBGRl07Ci0KLSNpZiBCWVRFX09SREVSID09IEJJ
R19FTkRJQU4KLQkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4X281NlsqcF9idWYrK107Ci0JCWNy
YyBePSBzY3RwX2NyY190YWJsZWlsOF9vNDhbKnBfYnVmKytdOwotCQljcmMgXj0gc2N0cF9jcmNf
dGFibGVpbDhfbzQwWypwX2J1ZisrXTsKLQkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4X28zMlsq
cF9idWYrK107Ci0jZWxzZQotCQl0ZXJtMSA9IHNjdHBfY3JjX3RhYmxlaWw4X281NlsoKihjb25z
dCB1aW50MzJfdCAqKSBwX2J1ZikgJiAweDAwMDAwMEZGXSBeCi0JCSAgICBzY3RwX2NyY190YWJs
ZWlsOF9vNDhbKCgqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmKSA+PiA4KSAmIDB4MDAwMDAwRkZd
OwotCi0JCXRlcm0yID0gKCooY29uc3QgdWludDMyX3QgKikgcF9idWYpID4+IDE2OwotCQljcmMg
PSBjcmMgXgotCQkgICAgdGVybTEgXgotCQkgICAgc2N0cF9jcmNfdGFibGVpbDhfbzQwW3Rlcm0y
ICYgMHgwMDAwMDBGRl0gXgotCQkgICAgc2N0cF9jcmNfdGFibGVpbDhfbzMyWyh0ZXJtMiA+PiA4
KSAmIDB4MDAwMDAwRkZdOwotCQlwX2J1ZiArPSA0OwotI2VuZGlmCi0JfQotCWZvciAobGkgPSAw
OyBsaSA8IGVuZF9ieXRlczsgbGkrKykKLQkJY3JjID0gc2N0cF9jcmNfdGFibGVpbDhfbzMyWyhj
cmMgXiAqcF9idWYrKykgJiAweDAwMDAwMEZGXSBeCi0JCSAgICAoY3JjID4+IDgpOwotCXJldHVy
biAoY3JjKTsKLX0KLQotCi0vKioKLSAqCi0gKiBSb3V0aW5lIERlc2NyaXB0aW9uOgotICoKLSAq
IHdhcm1zIHRoZSB0YWJsZXMKLSAqCi0gKiBBcmd1bWVudHM6Ci0gKgotICoJCW5vbmUKLSAqCi0g
KiBSZXR1cm4gdmFsdWU6Ci0gKgotICoJCW5vbmUKLSAqLwotc3RhdGljIHVpbnQzMl90Ci1tdWx0
aXRhYmxlX2NyYzMyYyh1aW50MzJfdCBjcmMzMmMsCi0gICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoKQotewotCXVpbnQzMl90IHRvX2V2ZW5fd29yZDsKLQotCWlmIChsZW5ndGggPT0gMCkgewot
CQlyZXR1cm4gKGNyYzMyYyk7Ci0JfQotCXRvX2V2ZW5fd29yZCA9ICg0IC0gKCgodWludHB0cl90
KSBidWZmZXIpICYgMHgzKSk7Ci0JcmV0dXJuIChzY3RwX2NyYzMyY19zYjhfNjRfYml0KGNyYzMy
YywgYnVmZmVyLCBsZW5ndGgsIHRvX2V2ZW5fd29yZCkpOwotfQotCi1zdGF0aWMgY29uc3QgdWlu
dDMyX3Qgc2N0cF9jcmNfY1syNTZdID0gewotCTB4MDAwMDAwMDAsIDB4RjI2QjgzMDMsIDB4RTEz
QjcwRjcsIDB4MTM1MEYzRjQsCi0JMHhDNzlBOTcxRiwgMHgzNUYxMTQxQywgMHgyNkExRTdFOCwg
MHhENENBNjRFQiwKLQkweDhBRDk1OENGLCAweDc4QjJEQkNDLCAweDZCRTIyODM4LCAweDk5ODlB
QjNCLAotCTB4NEQ0M0NGRDAsIDB4QkYyODRDRDMsIDB4QUM3OEJGMjcsIDB4NUUxMzNDMjQsCi0J
MHgxMDVFQzc2RiwgMHhFMjM1NDQ2QywgMHhGMTY1Qjc5OCwgMHgwMzBFMzQ5QiwKLQkweEQ3QzQ1
MDcwLCAweDI1QUZEMzczLCAweDM2RkYyMDg3LCAweEM0OTRBMzg0LAotCTB4OUE4NzlGQTAsIDB4
NjhFQzFDQTMsIDB4N0JCQ0VGNTcsIDB4ODlENzZDNTQsCi0JMHg1RDFEMDhCRiwgMHhBRjc2OEJC
QywgMHhCQzI2Nzg0OCwgMHg0RTRERkI0QiwKLQkweDIwQkQ4RURFLCAweEQyRDYwRERELCAweEMx
ODZGRTI5LCAweDMzRUQ3RDJBLAotCTB4RTcyNzE5QzEsIDB4MTU0QzlBQzIsIDB4MDYxQzY5MzYs
IDB4RjQ3N0VBMzUsCi0JMHhBQTY0RDYxMSwgMHg1ODBGNTUxMiwgMHg0QjVGQTZFNiwgMHhCOTM0
MjVFNSwKLQkweDZERkU0MTBFLCAweDlGOTVDMjBELCAweDhDQzUzMUY5LCAweDdFQUVCMkZBLAot
CTB4MzBFMzQ5QjEsIDB4QzI4OENBQjIsIDB4RDFEODM5NDYsIDB4MjNCM0JBNDUsCi0JMHhGNzc5
REVBRSwgMHgwNTEyNURBRCwgMHgxNjQyQUU1OSwgMHhFNDI5MkQ1QSwKLQkweEJBM0ExMTdFLCAw
eDQ4NTE5MjdELCAweDVCMDE2MTg5LCAweEE5NkFFMjhBLAotCTB4N0RBMDg2NjEsIDB4OEZDQjA1
NjIsIDB4OUM5QkY2OTYsIDB4NkVGMDc1OTUsCi0JMHg0MTdCMURCQywgMHhCMzEwOUVCRiwgMHhB
MDQwNkQ0QiwgMHg1MjJCRUU0OCwKLQkweDg2RTE4QUEzLCAweDc0OEEwOUEwLCAweDY3REFGQTU0
LCAweDk1QjE3OTU3LAotCTB4Q0JBMjQ1NzMsIDB4MzlDOUM2NzAsIDB4MkE5OTM1ODQsIDB4RDhG
MkI2ODcsCi0JMHgwQzM4RDI2QywgMHhGRTUzNTE2RiwgMHhFRDAzQTI5QiwgMHgxRjY4MjE5OCwK
LQkweDUxMjVEQUQzLCAweEEzNEU1OUQwLCAweEIwMUVBQTI0LCAweDQyNzUyOTI3LAotCTB4OTZC
RjREQ0MsIDB4NjRENENFQ0YsIDB4Nzc4NDNEM0IsIDB4ODVFRkJFMzgsCi0JMHhEQkZDODIxQywg
MHgyOTk3MDExRiwgMHgzQUM3RjJFQiwgMHhDOEFDNzFFOCwKLQkweDFDNjYxNTAzLCAweEVFMEQ5
NjAwLCAweEZENUQ2NUY0LCAweDBGMzZFNkY3LAotCTB4NjFDNjkzNjIsIDB4OTNBRDEwNjEsIDB4
ODBGREUzOTUsIDB4NzI5NjYwOTYsCi0JMHhBNjVDMDQ3RCwgMHg1NDM3ODc3RSwgMHg0NzY3NzQ4
QSwgMHhCNTBDRjc4OSwKLQkweEVCMUZDQkFELCAweDE5NzQ0OEFFLCAweDBBMjRCQjVBLCAweEY4
NEYzODU5LAotCTB4MkM4NTVDQjIsIDB4REVFRURGQjEsIDB4Q0RCRTJDNDUsIDB4M0ZENUFGNDYs
Ci0JMHg3MTk4NTQwRCwgMHg4M0YzRDcwRSwgMHg5MEEzMjRGQSwgMHg2MkM4QTdGOSwKLQkweEI2
MDJDMzEyLCAweDQ0Njk0MDExLCAweDU3MzlCM0U1LCAweEE1NTIzMEU2LAotCTB4RkI0MTBDQzIs
IDB4MDkyQThGQzEsIDB4MUE3QTdDMzUsIDB4RTgxMUZGMzYsCi0JMHgzQ0RCOUJERCwgMHhDRUIw
MThERSwgMHhEREUwRUIyQSwgMHgyRjhCNjgyOSwKLQkweDgyRjYzQjc4LCAweDcwOURCODdCLCAw
eDYzQ0Q0QjhGLCAweDkxQTZDODhDLAotCTB4NDU2Q0FDNjcsIDB4QjcwNzJGNjQsIDB4QTQ1N0RD
OTAsIDB4NTYzQzVGOTMsCi0JMHgwODJGNjNCNywgMHhGQTQ0RTBCNCwgMHhFOTE0MTM0MCwgMHgx
QjdGOTA0MywKLQkweENGQjVGNEE4LCAweDNEREU3N0FCLCAweDJFOEU4NDVGLCAweERDRTUwNzVD
LAotCTB4OTJBOEZDMTcsIDB4NjBDMzdGMTQsIDB4NzM5MzhDRTAsIDB4ODFGODBGRTMsCi0JMHg1
NTMyNkIwOCwgMHhBNzU5RTgwQiwgMHhCNDA5MUJGRiwgMHg0NjYyOThGQywKLQkweDE4NzFBNEQ4
LCAweEVBMUEyN0RCLCAweEY5NEFENDJGLCAweDBCMjE1NzJDLAotCTB4REZFQjMzQzcsIDB4MkQ4
MEIwQzQsIDB4M0VEMDQzMzAsIDB4Q0NCQkMwMzMsCi0JMHhBMjRCQjVBNiwgMHg1MDIwMzZBNSwg
MHg0MzcwQzU1MSwgMHhCMTFCNDY1MiwKLQkweDY1RDEyMkI5LCAweDk3QkFBMUJBLCAweDg0RUE1
MjRFLCAweDc2ODFEMTRELAotCTB4Mjg5MkVENjksIDB4REFGOTZFNkEsIDB4QzlBOTlEOUUsIDB4
M0JDMjFFOUQsCi0JMHhFRjA4N0E3NiwgMHgxRDYzRjk3NSwgMHgwRTMzMEE4MSwgMHhGQzU4ODk4
MiwKLQkweEIyMTU3MkM5LCAweDQwN0VGMUNBLCAweDUzMkUwMjNFLCAweEExNDU4MTNELAotCTB4
NzU4RkU1RDYsIDB4ODdFNDY2RDUsIDB4OTRCNDk1MjEsIDB4NjZERjE2MjIsCi0JMHgzOENDMkEw
NiwgMHhDQUE3QTkwNSwgMHhEOUY3NUFGMSwgMHgyQjlDRDlGMiwKLQkweEZGNTZCRDE5LCAweDBE
M0QzRTFBLCAweDFFNkRDREVFLCAweEVDMDY0RUVELAotCTB4QzM4RDI2QzQsIDB4MzFFNkE1Qzcs
IDB4MjJCNjU2MzMsIDB4RDBEREQ1MzAsCi0JMHgwNDE3QjFEQiwgMHhGNjdDMzJEOCwgMHhFNTJD
QzEyQywgMHgxNzQ3NDIyRiwKLQkweDQ5NTQ3RTBCLCAweEJCM0ZGRDA4LCAweEE4NkYwRUZDLCAw
eDVBMDQ4REZGLAotCTB4OEVDRUU5MTQsIDB4N0NBNTZBMTcsIDB4NkZGNTk5RTMsIDB4OUQ5RTFB
RTAsCi0JMHhEM0QzRTFBQiwgMHgyMUI4NjJBOCwgMHgzMkU4OTE1QywgMHhDMDgzMTI1RiwKLQkw
eDE0NDk3NkI0LCAweEU2MjJGNUI3LCAweEY1NzIwNjQzLCAweDA3MTk4NTQwLAotCTB4NTkwQUI5
NjQsIDB4QUI2MTNBNjcsIDB4QjgzMUM5OTMsIDB4NEE1QTRBOTAsCi0JMHg5RTkwMkU3QiwgMHg2
Q0ZCQUQ3OCwgMHg3RkFCNUU4QywgMHg4REMwREQ4RiwKLQkweEUzMzBBODFBLCAweDExNUIyQjE5
LCAweDAyMEJEOEVELCAweEYwNjA1QkVFLAotCTB4MjRBQTNGMDUsIDB4RDZDMUJDMDYsIDB4QzU5
MTRGRjIsIDB4MzdGQUNDRjEsCi0JMHg2OUU5RjBENSwgMHg5QjgyNzNENiwgMHg4OEQyODAyMiwg
MHg3QUI5MDMyMSwKLQkweEFFNzM2N0NBLCAweDVDMThFNEM5LCAweDRGNDgxNzNELCAweEJEMjM5
NDNFLAotCTB4RjM2RTZGNzUsIDB4MDEwNUVDNzYsIDB4MTI1NTFGODIsIDB4RTAzRTlDODEsCi0J
MHgzNEY0Rjg2QSwgMHhDNjlGN0I2OSwgMHhENUNGODg5RCwgMHgyN0E0MEI5RSwKLQkweDc5Qjcz
N0JBLCAweDhCRENCNEI5LCAweDk4OEM0NzRELCAweDZBRTdDNDRFLAotCTB4QkUyREEwQTUsIDB4
NEM0NjIzQTYsIDB4NUYxNkQwNTIsIDB4QUQ3RDUzNTEsCi19OwotCi0KLSNkZWZpbmUgU0NUUF9D
UkMzMkMoYyxkKSAoYz0oYz4+OClec2N0cF9jcmNfY1soY14oZCkpJjB4RkZdKQotCi1zdGF0aWMg
dWludDMyX3QKLXNpbmdsZXRhYmxlX2NyYzMyYyh1aW50MzJfdCBjcmMzMmMsCi0gICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAg
IHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJU0NUUF9DUkMzMkMoY3JjMzJjLCBidWZmZXJbaV0pOwot
CX0KLQlyZXR1cm4gKGNyYzMyYyk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi11
aW50MzJfdAotI2Vsc2UKLXN0YXRpYyB1aW50MzJfdAotI2VuZGlmCi1jYWxjdWxhdGVfY3JjMzJj
KHVpbnQzMl90IGNyYzMyYywKLSAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAq
YnVmZmVyLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCWlmIChs
ZW5ndGggPCA0KSB7Ci0JCXJldHVybiAoc2luZ2xldGFibGVfY3JjMzJjKGNyYzMyYywgYnVmZmVy
LCBsZW5ndGgpKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKG11bHRpdGFibGVfY3JjMzJjKGNyYzMy
YywgYnVmZmVyLCBsZW5ndGgpKTsKLQl9Ci19Ci0jZW5kaWYgLyogRnJlZUJTRCA8IDgwMDAwIHx8
IG90aGVyIE9TICovCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi11aW50MzJfdAotI2Vs
c2UKLXN0YXRpYyB1aW50MzJfdAotI2VuZGlmCi1zY3RwX2ZpbmFsaXplX2NyYzMyYyh1aW50MzJf
dCBjcmMzMmMpCi17Ci0JdWludDMyX3QgcmVzdWx0OwotCi0jaWYgQllURV9PUkRFUiA9PSBCSUdf
RU5ESUFOCi0JdWludDhfdCBieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRlMzsKLQotI2VuZGlmCi0J
LyogQ29tcGxlbWVudCB0aGUgcmVzdWx0ICovCi0JcmVzdWx0ID0gfmNyYzMyYzsKLSNpZiBCWVRF
X09SREVSID09IEJJR19FTkRJQU4KLQkvKgotCSAqIEZvciBCSUctRU5ESUFOLi4gYWthIE1vdG9y
b2xhIGJ5dGUgb3JkZXIgdGhlIHJlc3VsdCBpcyBpbgotCSAqIGxpdHRsZS1lbmRpYW4gZm9ybS4g
U28gd2UgbXVzdCBtYW51YWxseSBzd2FwIHRoZSBieXRlcy4gVGhlbiB3ZQotCSAqIGNhbiBjYWxs
IGh0b25sKCkgd2hpY2ggZG9lcyBub3RoaW5nLi4uCi0JICovCi0JYnl0ZTAgPSByZXN1bHQgJiAw
eDAwMDAwMGZmOwotCWJ5dGUxID0gKHJlc3VsdCA+PiA4KSAmIDB4MDAwMDAwZmY7Ci0JYnl0ZTIg
PSAocmVzdWx0ID4+IDE2KSAmIDB4MDAwMDAwZmY7Ci0JYnl0ZTMgPSAocmVzdWx0ID4+IDI0KSAm
IDB4MDAwMDAwZmY7Ci0JY3JjMzJjID0gKChieXRlMCA8PCAyNCkgfCAoYnl0ZTEgPDwgMTYpIHwg
KGJ5dGUyIDw8IDgpIHwgYnl0ZTMpOwotI2Vsc2UKLQkvKgotCSAqIEZvciBJTlRFTCBwbGF0Zm9y
bXMgdGhlIHJlc3VsdCBjb21lcyBvdXQgaW4gbmV0d29yayBvcmRlci4gTm8KLQkgKiBodG9ubCBp
cyByZXF1aXJlZCBvciB0aGUgc3dhcCBhYm92ZS4gU28gd2Ugb3B0aW1pemUgb3V0IGJvdGggdGhl
Ci0JICogaHRvbmwgYW5kIHRoZSBtYW51YWwgc3dhcCBhYm92ZS4KLQkgKi8KLQljcmMzMmMgPSBy
ZXN1bHQ7Ci0jZW5kaWYKLQlyZXR1cm4gKGNyYzMyYyk7Ci19Ci0KLXVpbnQzMl90Ci1zY3RwX2Nh
bGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQotewotCS8qCi0J
ICogZ2l2ZW4gYSBtYnVmIGNoYWluIHdpdGggYSBwYWNrZXRoZWFkZXIgb2Zmc2V0IGJ5ICdvZmZz
ZXQnCi0JICogcG9pbnRpbmcgYXQgYSBzY3RwaGRyICh3aXRoIGNzdW0gc2V0IHRvIDApIGdvIHRo
cm91Z2ggdGhlIGNoYWluCi0JICogb2YgU0NUUF9CVUZfTkVYVCgpJ3MgYW5kIGNhbGN1bGF0ZSB0
aGUgU0NUUCBjaGVja3N1bS4gVGhpcyBhbHNvCi0JICogaGFzIGEgc2lkZSBib251cyBhcyBpdCB3
aWxsIGNhbGN1bGF0ZSB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZQotCSAqIG1idWYgY2hhaW4uIE5v
dGU6IGlmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG1idWYKLQkgKiBsZW5ndGgs
IGNoZWNrc3VtPTEsIHBrdGxlbj0wIGlzIHJldHVybmVkIChpZS4gbm8gcmVhbCBlcnJvciBjb2Rl
KQotCSAqLwotCXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOwotCXN0cnVjdCBtYnVmICphdDsK
LQotCWF0ID0gbTsKLQkvKiBmaW5kIHRoZSBjb3JyZWN0IG1idWYgYW5kIG9mZnNldCBpbnRvIG1i
dWYgKi8KLQl3aGlsZSAoKGF0ICE9IE5VTEwpICYmIChvZmZzZXQgPiAodWludDMyX3QpIFNDVFBf
QlVGX0xFTihhdCkpKSB7Ci0JCW9mZnNldCAtPSBTQ1RQX0JVRl9MRU4oYXQpOwkvKiB1cGRhdGUg
cmVtYWluaW5nIG9mZnNldAotCQkJCQkJICogbGVmdCAqLwotCQlhdCA9IFNDVFBfQlVGX05FWFQo
YXQpOwotCX0KLQl3aGlsZSAoYXQgIT0gTlVMTCkgewotCQlpZiAoKFNDVFBfQlVGX0xFTihhdCkg
LSBvZmZzZXQpID4gMCkgewotCQkJYmFzZSA9IGNhbGN1bGF0ZV9jcmMzMmMoYmFzZSwKLQkJCSAg
ICAodW5zaWduZWQgY2hhciAqKShTQ1RQX0JVRl9BVChhdCwgb2Zmc2V0KSksCi0JCQkgICAgKHVu
c2lnbmVkIGludCkoU0NUUF9CVUZfTEVOKGF0KSAtIG9mZnNldCkpOwotCQl9Ci0JCWlmIChvZmZz
ZXQpIHsKLQkJCS8qIHdlIG9ubHkgb2Zmc2V0IG9uY2UgaW50byB0aGUgZmlyc3QgbWJ1ZiAqLwot
CQkJaWYgKG9mZnNldCA8ICh1aW50MzJfdCkgU0NUUF9CVUZfTEVOKGF0KSkKLQkJCQlvZmZzZXQg
PSAwOwotCQkJZWxzZQotCQkJCW9mZnNldCAtPSBTQ1RQX0JVRl9MRU4oYXQpOwotCQl9Ci0JCWF0
ID0gU0NUUF9CVUZfTkVYVChhdCk7Ci0JfQotCWJhc2UgPSBzY3RwX2ZpbmFsaXplX2NyYzMyYyhi
YXNlKTsKLQlyZXR1cm4gKGJhc2UpOwotfQotI2VuZGlmCQkJCS8qICFkZWZpbmVkKFNDVFBfV0lU
SF9OT19DU1VNKSAqLwotCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotdm9pZAotc2N0cF9k
ZWxheWVkX2Nrc3VtKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZzZXQpCi17Ci0jaWYgZGVm
aW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLSNpZmRlZiBJTlZBUklBTlRTCi0JcGFuaWMoInNjdHBf
ZGVsYXllZF9ja3N1bSgpIGNhbGxlZCB3aGVuIHVzaW5nIG5vIFNDVFAgQ1JDLiIpOwotI2VuZGlm
Ci0jZWxzZQotCXVpbnQzMl90IGNoZWNrc3VtOwotCi0JY2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0
ZV9ja3N1bShtLCBvZmZzZXQpOwotCVNDVFBfU1RBVF9ERUNSKHNjdHBzX3NlbmRod2NyYyk7Ci0J
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLQlvZmZzZXQgKz0gb2Zmc2V0b2Yoc3Ry
dWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKLQotCWlmIChvZmZzZXQgKyBzaXplb2YodWludDMyX3Qp
ID4gKHVpbnQzMl90KSAobS0+bV9sZW4pKSB7Ci0JCVNDVFBfUFJJTlRGKCJzY3RwX2RlbGF5ZWRf
Y2tzdW0oKTogbS0+bGVuOiAlZCwgIG9mZjogJWQuXG4iLAotCQkgICAgICAgICAgICAodWludDMy
X3QpIG0tPm1fbGVuLCBvZmZzZXQpOwotCQkvKgotCQkgKiBYWFggdGhpcyBzaG91bGRuJ3QgaGFw
cGVuLCBidXQgaWYgaXQgZG9lcywgdGhlIGNvcnJlY3QKLQkJICogYmVoYXZpb3IgbWF5IGJlIHRv
IGluc2VydCB0aGUgY2hlY2tzdW0gaW4gdGhlIGFwcHJvcHJpYXRlCi0JCSAqIG5leHQgbWJ1ZiBp
biB0aGUgY2hhaW4uCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCSoodWludDMyX3QgKikgKG0tPm1f
ZGF0YSArIG9mZnNldCkgPSBjaGVja3N1bTsKLSNlbmRpZgotfQotI2VuZGlmCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2NyYzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBiMWNiYmI0ZjFlNjdiODVl
MjUxZGE1MjI3ZWMwNDM0MGU0NjMzNmUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw1NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBD
aXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICog
YSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0g
KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2Nv
IFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZz
Lmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jcmMzMi5oIDMw
OTYwNyAyMDE2LTEyLTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0KLSNpZm5kZWYg
X05FVElORVRfU0NUUF9DUkMzMl9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0NSQzMyX0hfCi0K
LSNpZiBkZWZpbmVkKF9LRVJORUwpCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi11
aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqLCB1aW50MzJfdCk7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotdm9pZCBzY3RwX2RlbGF5ZWRfY2tzdW0o
c3RydWN0IG1idWYgKiwgdWludDMyX3Qgb2Zmc2V0KTsKLSNlbmRpZgotI2VuZGlmCQkJCS8qIF9L
RVJORUwgKi8KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgIWRlZmluZWQoU0NUUF9X
SVRIX05PX0NTVU0pCi11aW50MzJfdCBjYWxjdWxhdGVfY3JjMzJjKHVpbnQzMl90LCBjb25zdCB1
bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci11aW50MzJfdCBzY3RwX2ZpbmFsaXplX2Ny
YzMyYyh1aW50MzJfdCk7Ci11aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1
ZiAqLCB1aW50MzJfdCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCQkJCS8qIF9fY3JjMzJjX2hf
XyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
MDAzMWU5Yjc2OTRjNmUwYjg5ZTQwNzY0NjFiMTA5YTg4NWJiMmI2Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9oZWFk
ZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwOSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAo
YykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVl
eGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVy
IHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQot
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0j
aW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGlu
ZXQvc2N0cF9oZWFkZXIuaCAzMDk2ODIgMjAxNi0xMi0wNyAxOTozMDo1OVogdHVleGVuICQiKTsK
LSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfSEVBREVSX0hfCi0jZGVmaW5lIF9ORVRJ
TkVUX1NDVFBfSEVBREVSX0hfCi0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHBhY2tvbi5oPgotI2VuZGlmCi0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxzeXMvdGltZS5o
PgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2NvbnN0YW50cy5oPgotCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LSNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKLSNlbHNlCi0jcHJh
Z21hIHBhY2sgKHB1c2gsIDEpCi0jZGVmaW5lIFNDVFBfUEFDS0VECi0jZW5kaWYKLQotLyoKLSAq
IFBhcmFtZXRlciBzdHJ1Y3R1cmVzCi0gKi8KLXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtIHsK
LQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfSVBWNF9QQVJBTV9UWVBFLCBs
ZW49OCAqLwotCXVpbnQzMl90IGFkZHI7CQkvKiBJUFY0IGFkZHJlc3MgKi8KLX0gU0NUUF9QQUNL
RUQ7Ci0KLSNkZWZpbmUgU0NUUF9WNl9BRERSX0JZVEVTIDE2Ci0KLQotc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0gewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGU9U0NUUF9JUFY2
X1BBUkFNX1RZUEUsIGxlbj0yMCAqLwotCXVpbnQ4X3QgYWRkcltTQ1RQX1Y2X0FERFJfQllURVNd
OwkvKiBJUFY2IGFkZHJlc3MgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIENvb2tpZSBQcmVzZXJ2
YXRpdmUgKi8KLXN0cnVjdCBzY3RwX2Nvb2tpZV9wZXJzZXJ2ZV9wYXJhbSB7Ci0Jc3RydWN0IHNj
dHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0NPT0tJRV9QUkVTRVJWRSwgbGVuPTggKi8KLQl1
aW50MzJfdCB0aW1lOwkJLyogdGltZSBpbiBtcyB0byBleHRlbmQgY29va2llICovCi19IFNDVFBf
UEFDS0VEOwotCi0jZGVmaW5lIFNDVFBfQVJSQVlfTUlOX0xFTiAxCi0vKiBIb3N0IE5hbWUgQWRk
cmVzcyAqLwotc3RydWN0IHNjdHBfaG9zdF9uYW1lX3BhcmFtIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBwaDsvKiB0eXBlPVNDVFBfSE9TVE5BTUVfQUREUkVTUyAqLwotCWNoYXIgbmFtZVtTQ1RQ
X0FSUkFZX01JTl9MRU5dOwkJLyogaG9zdCBuYW1lICovCi19IFNDVFBfUEFDS0VEOwotCi0vKgot
ICogVGhpcyBpcyB0aGUgbWF4aW11bSBwYWRkZWQgc2l6ZSBvZiBhIHMtYS1wCi0gKiBzbyBwYXJh
bWhlYWRyICsgMyBhZGRyZXNzIHR5cGVzICg2IGJ5dGVzKSArIDIgYnl0ZSBwYWQgPSAxMgotICov
Ci0jZGVmaW5lIFNDVFBfTUFYX0FERFJfUEFSQU1TX1NJWkUgMTIKLS8qIHN1cHBvcnRlZCBhZGRy
ZXNzIHR5cGUgKi8KLXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9hZGRyX3BhcmFtIHsKLQlzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfU1VQUE9SVEVEX0FERFJUWVBFICovCi0JdWlu
dDE2X3QgYWRkcl90eXBlWzJdOwkvKiBhcnJheSBvZiBzdXBwb3J0ZWQgYWRkcmVzcyB0eXBlcyAq
LwotfSBTQ1RQX1BBQ0tFRDsKLQotLyogaGVhcnRiZWF0IGluZm8gcGFyYW1ldGVyICovCi1zdHJ1
Y3Qgc2N0cF9oZWFydGJlYXRfaW5mb19wYXJhbSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7
Ci0JdWludDMyX3QgdGltZV92YWx1ZV8xOwotCXVpbnQzMl90IHRpbWVfdmFsdWVfMjsKLQl1aW50
MzJfdCByYW5kb21fdmFsdWUxOwotCXVpbnQzMl90IHJhbmRvbV92YWx1ZTI7Ci0JdWludDhfdCBh
ZGRyX2ZhbWlseTsKLQl1aW50OF90IGFkZHJfbGVuOwotCS8qIG1ha2Ugc3VyZSB0aGF0IHRoaXMg
c3RydWN0dXJlIGlzIDQgYnl0ZSBhbGlnbmVkICovCi0JdWludDhfdCBwYWRkaW5nWzJdOwotCWNo
YXIgYWRkcmVzc1tTQ1RQX0FERFJNQVhdOwotfSBTQ1RQX1BBQ0tFRDsKLQotCi0vKiBkcmFmdC1p
ZXRmLXRzdndnLXByc2N0cCAqLwotLyogUFItU0NUUCBzdXBwb3J0ZWQgcGFyYW1ldGVyICovCi1z
dHJ1Y3Qgc2N0cF9wcnNjdHBfc3VwcG9ydGVkX3BhcmFtIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciBwaDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLQotLyogZHJhZnQtaWV0Zi10c3Z3Zy1hZGRpcC1zY3Rw
ICovCi1zdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgewkvKiBhbiBBU0NPTkYgInBhcmFtZXRl
ciIgKi8KLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiBhIFNDVFAgcGFyYW1ldGVyIGhlYWRl
ciAqLwotCXVpbnQzMl90IGNvcnJlbGF0aW9uX2lkOy8qIGNvcnJlbGF0aW9uIGlkIGZvciB0aGlz
IHBhcmFtICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJh
bSB7CS8qIGFuIEFTQ09ORiBhZGRyZXNzIHBhcmFtZXRlciAqLwotCXN0cnVjdCBzY3RwX2FzY29u
Zl9wYXJhbWhkciBhcGg7CS8qIGFzY29uZiAicGFyYW1ldGVyIiAqLwotCXN0cnVjdCBzY3RwX2lw
djZhZGRyX3BhcmFtIGFkZHJwOwkvKiBtYXggc3RvcmFnZSBzaXplICovCi19IFNDVFBfUEFDS0VE
OwotCi0KLXN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0gewkvKiBhbiBBU0NPTkYgTkFULVZ0
YWcgcGFyYW1ldGVyICovCi0Jc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyIGFwaDsJLyogYXNj
b25mICJwYXJhbWV0ZXIiICovCi0gICAgICAgIHVpbnQzMl90IGxvY2FsX3Z0YWc7Ci0gICAgICAg
IHVpbnQzMl90IHJlbW90ZV92dGFnOwotfSBTQ1RQX1BBQ0tFRDsKLQotCi1zdHJ1Y3Qgc2N0cF9h
c2NvbmZfYWRkcnY0X3BhcmFtIHsJLyogYW4gQVNDT05GIGFkZHJlc3MgKHY0KSBwYXJhbWV0ZXIg
Ki8KLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgYXBoOwkvKiBhc2NvbmYgInBhcmFtZXRl
ciIgKi8KLQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSBhZGRycDsJLyogbWF4IHN0b3JhZ2Ug
c2l6ZSAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotI2RlZmluZSBTQ1RQX01BWF9TVVBQT1JURURfRVhU
IDI1NgotCi1zdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gewotCXN0cnVj
dCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGUgPSAweDgwMDggIGxlbiA9IHggKi8KLQl1aW50OF90
IGNodW5rX3R5cGVzW107Ci19IFNDVFBfUEFDS0VEOwotCi0KLS8qCi0gKiBTdHJ1Y3R1cmVzIGZv
ciBEQVRBIGNodW5rcwotICovCi1zdHJ1Y3Qgc2N0cF9kYXRhIHsKLQl1aW50MzJfdCB0c247Ci0J
dWludDE2X3Qgc2lkOwotCXVpbnQxNl90IHNzbjsKLQl1aW50MzJfdCBwcGlkOwotCS8qIHVzZXIg
ZGF0YSBmb2xsb3dzICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9kYXRhX2NodW5r
IHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9kYXRhIGRwOwotfSBT
Q1RQX1BBQ0tFRDsKLQotc3RydWN0IHNjdHBfaWRhdGEgewotCXVpbnQzMl90IHRzbjsKLQl1aW50
MTZfdCBzaWQ7Ci0JdWludDE2X3QgcmVzZXJ2ZWQ7CS8qIFdoZXJlIGRvZXMgdGhlIFNTTiBnbz8g
Ki8KLQl1aW50MzJfdCBtaWQ7Ci0JdW5pb24gewotCQl1aW50MzJfdCBwcGlkOwotCQl1aW50MzJf
dCBmc247CS8qIEZyYWdtZW50IFNlcXVlbmNlIE51bWJlciAqLwotCX0gcHBpZF9mc247Ci0JLyog
dXNlciBkYXRhIGZvbGxvd3MgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2lkYXRh
X2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9pZGF0YSBk
cDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qCi0gKiBTdHJ1Y3R1cmVzIGZvciB0aGUgY29udHJvbCBj
aHVua3MKLSAqLwotCi0vKiBJbml0aWF0ZSAoSU5JVCkvSW5pdGlhdGUgQWNrIChJTklUIEFDSykg
Ki8KLXN0cnVjdCBzY3RwX2luaXQgewotCXVpbnQzMl90IGluaXRpYXRlX3RhZzsJLyogaW5pdGlh
dGUgdGFnICovCi0JdWludDMyX3QgYV9yd25kOwkvKiBhX3J3bmQgKi8KLQl1aW50MTZfdCBudW1f
b3V0Ym91bmRfc3RyZWFtczsJLyogT1MgKi8KLQl1aW50MTZfdCBudW1faW5ib3VuZF9zdHJlYW1z
OwkvKiBNSVMgKi8KLQl1aW50MzJfdCBpbml0aWFsX3RzbjsJLyogSS1UU04gKi8KLQkvKiBvcHRp
b25hbCBwYXJhbSdzIGZvbGxvdyAqLwotfSBTQ1RQX1BBQ0tFRDsKLSNkZWZpbmUgU0NUUF9JREVO
VElGSUNBVElPTl9TSVpFIDE2Ci0jZGVmaW5lIFNDVFBfQUREUkVTU19TSVpFIDQKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBfUkVTRVJWRV9TUEFDRSA1Ci0jZWxzZQot
I2RlZmluZSBTQ1RQX1JFU0VSVkVfU1BBQ0UgNgotI2VuZGlmCi0vKiBzdGF0ZSBjb29raWUgaGVh
ZGVyICovCi1zdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgewkvKiB0aGlzIGlzIG91ciBkZWZpbml0
aW9uLi4uICovCi0JdWludDhfdCBpZGVudGlmaWNhdGlvbltTQ1RQX0lERU5USUZJQ0FUSU9OX1NJ
WkVdOy8qIGlkIG9mIHdobyB3ZSBhcmUgKi8KLQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7
CS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0JdWludDMyX3QgY29va2llX2xpZmU7CS8q
IGxpZmUgSSB3aWxsIGF3YXJkIHRoaXMgY29va2llICovCi0JdWludDMyX3QgdGllX3RhZ19teV92
dGFnOwkvKiBteSB0YWcgaW4gb2xkIGFzc29jaWF0aW9uICovCi0KLQl1aW50MzJfdCB0aWVfdGFn
X3BlZXJfdnRhZzsJLyogcGVlcnMgdGFnIGluIG9sZCBhc3NvY2lhdGlvbiAqLwotCXVpbnQzMl90
IHBlZXJzX3Z0YWc7CS8qIHBlZXJzIHRhZyBpbiBJTklUIChmb3IgcXVpY2sgcmVmKSAqLwotCi0J
dWludDMyX3QgbXlfdnRhZzsJLyogbXkgdGFnIGluIElOSVQtQUNLIChmb3IgcXVpY2sgcmVmKSAq
LwotCXVpbnQzMl90IGFkZHJlc3NbU0NUUF9BRERSRVNTX1NJWkVdOwkvKiA0IGludHMvMTI4IGJp
dHMgKi8KLQl1aW50MzJfdCBhZGRyX3R5cGU7CS8qIGFkZHJlc3MgdHlwZSAqLwotCXVpbnQzMl90
IGxhZGRyZXNzW1NDVFBfQUREUkVTU19TSVpFXTsJLyogbXkgbG9jYWwgZnJvbSBhZGRyZXNzICov
Ci0JdWludDMyX3QgbGFkZHJfdHlwZTsJLyogbXkgbG9jYWwgZnJvbSBhZGRyZXNzIHR5cGUgKi8K
LQl1aW50MzJfdCBzY29wZV9pZDsJLyogdjYgc2NvcGUgaWQgZm9yIGxpbmstbG9jYWxzICovCi0K
LQl1aW50MTZfdCBwZWVycG9ydDsJLyogcG9ydCBhZGRyZXNzIG9mIHRoZSBwZWVyIGluIHRoZSBJ
TklUICovCi0JdWludDE2X3QgbXlwb3J0OwkvKiBteSBwb3J0IGFkZHJlc3MgdXNlZCBpbiB0aGUg
SU5JVCAqLwotCXVpbnQ4X3QgaXB2NF9hZGRyX2xlZ2FsOy8qIEFyZSBWNCBhZGRyIGxlZ2FsPyAq
LwotCXVpbnQ4X3QgaXB2Nl9hZGRyX2xlZ2FsOy8qIEFyZSBWNiBhZGRyIGxlZ2FsPyAqLwotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQl1aW50OF90IGNvbm5fYWRkcl9sZWdhbDsKLSNlbmRp
ZgotCXVpbnQ4X3QgbG9jYWxfc2NvcGU7CS8qIElQdjYgbG9jYWwgc2NvcGUgZmxhZyAqLwotCXVp
bnQ4X3Qgc2l0ZV9zY29wZTsJLyogSVB2NiBzaXRlIHNjb3BlIGZsYWcgKi8KLQotCXVpbnQ4X3Qg
aXB2NF9zY29wZTsJLyogSVB2NCBwcml2YXRlIGFkZHIgc2NvcGUgKi8KLQl1aW50OF90IGxvb3Bi
YWNrX3Njb3BlOwkvKiBsb29wYmFjayBzY29wZSBpbmZvcm1hdGlvbiAqLwotCXVpbnQ4X3QgcmVz
ZXJ2ZWRbU0NUUF9SRVNFUlZFX1NQQUNFXTsgICAgLyogQWxpZ24gdG8gNjQgYml0cyAqLwotCS8q
Ci0JICogYXQgdGhlIGVuZCBpcyB0YWNrZWQgb24gdGhlIElOSVQgY2h1bmsgYW5kIHRoZSBJTklU
LUFDSyBjaHVuawotCSAqIChtaW51cyB0aGUgY29va2llKS4KLQkgKi8KLX0gU0NUUF9QQUNLRUQ7
Ci0KLS8qIHN0YXRlIGNvb2tpZSBwYXJhbWV0ZXIgKi8KLXN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tp
ZV9wYXJhbSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7Ci0Jc3RydWN0IHNjdHBfc3RhdGVf
Y29va2llIGNvb2tpZTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2luaXRfY2h1bmsg
ewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXN0cnVjdCBzY3RwX2luaXQgaW5pdDsKLX0g
U0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2luaXRfbXNnIHsKLQlzdHJ1Y3Qgc2N0cGhkciBz
aDsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rIG1zZzsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIC4u
LiB1c2VkIGZvciBib3RoIElOSVQgYW5kIElOSVQgQUNLICovCi0jZGVmaW5lIHNjdHBfaW5pdF9h
Y2sJCXNjdHBfaW5pdAotI2RlZmluZSBzY3RwX2luaXRfYWNrX2NodW5rCXNjdHBfaW5pdF9jaHVu
awotI2RlZmluZSBzY3RwX2luaXRfYWNrX21zZwlzY3RwX2luaXRfbXNnCi0KLQotLyogU2VsZWN0
aXZlIEFjayAoU0FDSykgKi8KLXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgewotCXVpbnQxNl90
IHN0YXJ0OwkJLyogR2FwIEFjayBibG9jayBzdGFydCAqLwotCXVpbnQxNl90IGVuZDsJCS8qIEdh
cCBBY2sgYmxvY2sgZW5kICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9zYWNrIHsK
LQl1aW50MzJfdCBjdW1fdHNuX2FjazsJLyogY3VtdWxhdGl2ZSBUU04gQWNrICovCi0JdWludDMy
X3QgYV9yd25kOwkvKiB1cGRhdGVkIGFfcnduZCBvZiBzZW5kZXIgKi8KLQl1aW50MTZfdCBudW1f
Z2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2YgR2FwIEFjayBibG9ja3MgKi8KLQl1aW50MTZfdCBu
dW1fZHVwX3RzbnM7CS8qIG51bWJlciBvZiBkdXBsaWNhdGUgVFNOcyAqLwotCS8qIHN0cnVjdCBz
Y3RwX2dhcF9hY2tfYmxvY2sncyBmb2xsb3cgKi8KLQkvKiB1aW50MzJfdCBkdXBsaWNhdGVfdHNu
J3MgZm9sbG93ICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rIHsK
LQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9zYWNrIHNhY2s7Ci19IFND
VFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9ucl9zYWNrIHsKLQl1aW50MzJfdCBjdW1fdHNuX2Fj
azsJLyogY3VtdWxhdGl2ZSBUU04gQWNrICovCi0JdWludDMyX3QgYV9yd25kOwkvKiB1cGRhdGVk
IGFfcnduZCBvZiBzZW5kZXIgKi8KLQl1aW50MTZfdCBudW1fZ2FwX2Fja19ibGtzOwkvKiBudW1i
ZXIgb2YgR2FwIEFjayBibG9ja3MgKi8KLQl1aW50MTZfdCBudW1fbnJfZ2FwX2Fja19ibGtzOwkv
KiBudW1iZXIgb2YgTlIgR2FwIEFjayBibG9ja3MgKi8KLQl1aW50MTZfdCBudW1fZHVwX3RzbnM7
CS8qIG51bWJlciBvZiBkdXBsaWNhdGUgVFNOcyAqLwotCXVpbnQxNl90IHJlc2VydmVkOwkvKiBu
b3QgY3VycmVudGx5IHVzZWQqLwotCS8qIHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sncyBmb2xs
b3cgKi8KLQkvKiB1aW50MzJfdCBkdXBsaWNhdGVfdHNuJ3MgZm9sbG93ICovCi19IFNDVFBfUEFD
S0VEOwotCi1zdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciBjaDsKLQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrIG5yX3NhY2s7Ci19IFNDVFBfUEFDS0VEOwotCi0K
LS8qIEhlYXJ0YmVhdCBSZXF1ZXN0IChIRUFSVEJFQVQpICovCi1zdHJ1Y3Qgc2N0cF9oZWFydGJl
YXQgewotCXN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9pbmZvX3BhcmFtIGhiX2luZm87Ci19IFNDVFBf
UEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgewotCXN0cnVjdCBzY3RwX2No
dW5raGRyIGNoOwotCXN0cnVjdCBzY3RwX2hlYXJ0YmVhdCBoZWFydGJlYXQ7Ci19IFNDVFBfUEFD
S0VEOwotCi0vKiAuLi4gdXNlZCBmb3IgSGVhcnRiZWF0IEFjayAoSEVBUlRCRUFUIEFDSykgKi8K
LSNkZWZpbmUgc2N0cF9oZWFydGJlYXRfYWNrCQlzY3RwX2hlYXJ0YmVhdAotI2RlZmluZSBzY3Rw
X2hlYXJ0YmVhdF9hY2tfY2h1bmsJc2N0cF9oZWFydGJlYXRfY2h1bmsKLQotCi0vKiBBYm9ydCBB
c3Nzb2NpYXRpb24gKEFCT1JUKSAqLwotc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgewotCXN0cnVj
dCBzY3RwX2NodW5raGRyIGNoOwotCS8qIG9wdGlvbmFsIGVycm9yIGNhdXNlIG1heSBmb2xsb3cg
Ki8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2Fib3J0X21zZyB7Ci0Jc3RydWN0IHNj
dHBoZHIgc2g7Ci0Jc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgbXNnOwotfSBTQ1RQX1BBQ0tFRDsK
LQotCi0vKiBTaHV0ZG93biBBc3NvY2lhdGlvbiAoU0hVVERPV04pICovCi1zdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9jaHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0JdWludDMyX3QgY3Vt
dWxhdGl2ZV90c25fYWNrOwotfSBTQ1RQX1BBQ0tFRDsKLQotCi0vKiBTaHV0ZG93biBBY2tub3ds
ZWRnbWVudCAoU0hVVERPV04gQUNLKSAqLwotc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5r
IHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLQotLyogT3Bl
cmF0aW9uIEVycm9yIChFUlJPUikgKi8KLXN0cnVjdCBzY3RwX2Vycm9yX2NodW5rIHsKLQlzdHJ1
Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQkvKiBvcHRpb25hbCBlcnJvciBjYXVzZXMgZm9sbG93ICov
Ci19IFNDVFBfUEFDS0VEOwotCi0KLS8qIENvb2tpZSBFY2hvIChDT09LSUUgRUNITykgKi8KLXN0
cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsK
LQlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgY29va2llOwotfSBTQ1RQX1BBQ0tFRDsKLQotLyog
Q29va2llIEFja25vd2xlZGdtZW50IChDT09LSUUgQUNLKSAqLwotc3RydWN0IHNjdHBfY29va2ll
X2Fja19jaHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci19IFNDVFBfUEFDS0VEOwot
Ci0vKiBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiBFY2hvIChFQ05FKSAqLwotc3Ry
dWN0IG9sZF9zY3RwX2VjbmVfY2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVp
bnQzMl90IHRzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgewot
CXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQzMl90IHRzbjsKLQl1aW50MzJfdCBudW1f
cGt0c19zaW5jZV9jd3I7Ci19IFNDVFBfUEFDS0VEOwotCi0vKiBDb25nZXN0aW9uIFdpbmRvdyBS
ZWR1Y2VkIChDV1IpICovCi1zdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgewotCXN0cnVjdCBzY3RwX2No
dW5raGRyIGNoOwotCXVpbnQzMl90IHRzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIFNodXRkb3du
IENvbXBsZXRlIChTSFVURE9XTiBDT01QTEVURSkgKi8KLXN0cnVjdCBzY3RwX3NodXRkb3duX2Nv
bXBsZXRlX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLX0gU0NUUF9QQUNLRUQ7
Ci0KLXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiB7Ci0Jc3RydWN0IHNj
dHBfcGFyYW1oZHIgcGg7Ci0JdWludDMyX3QgaW5kaWNhdGlvbjsKLX0gU0NUUF9QQUNLRUQ7Ci0K
LS8qCi0gKiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAKLSAqLwotLyogQWRkcmVzcy9TdHJl
YW0gQ29uZmlndXJhdGlvbiBDaGFuZ2UgKEFTQ09ORikgKi8KLXN0cnVjdCBzY3RwX2FzY29uZl9j
aHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0JdWludDMyX3Qgc2VyaWFsX251bWJl
cjsKLQkvKiBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKG1hbmRhdG9yeSkgKi8KLQkvKiBhc2Nv
bmYgcGFyYW1ldGVycyBmb2xsb3cgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIEFkZHJlc3MvU3Ry
ZWFtIENvbmZpZ3VyYXRpb24gQWNrbm93bGVkZ2UgKEFTQ09ORiBBQ0spICovCi1zdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWNrX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQl1aW50MzJf
dCBzZXJpYWxfbnVtYmVyOwotCS8qIGFzY29uZiBwYXJhbWV0ZXJzIGZvbGxvdyAqLwotfSBTQ1RQ
X1BBQ0tFRDsKLQotLyogZHJhZnQtaWV0Zi10c3Z3Zy1wcnNjdHAgKi8KLS8qIEZvcndhcmQgQ3Vt
dWxhdGl2ZSBUU04gKEZPUldBUkQgVFNOKSAqLwotc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1
bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQzMl90IG5ld19jdW11bGF0aXZl
X3RzbjsKLQkvKiBzdHJlYW0vc2VxdWVuY2UgcGFpcnMgKHNjdHBfc3Ryc2VxKSBmb2xsb3cgKi8K
LX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0cnNlcSB7Ci0JdWludDE2X3Qgc2lkOwot
CXVpbnQxNl90IHNzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0cnNlcV9taWQg
ewotCXVpbnQxNl90IHNpZDsKLQl1aW50MTZfdCBmbGFnczsKLQl1aW50MzJfdCBtaWQ7Ci19Owot
Ci1zdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9tc2cgewotCXN0cnVjdCBzY3RwaGRyIHNoOwotCXN0
cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIG1zZzsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIHNo
b3VsZCBiZSBhIG11bHRpcGxlIG9mIDQgLSAxIGFrYSAzLzcvMTEgZXRjLiAqLwotCi0jZGVmaW5l
IFNDVFBfTlVNX0RCX1RPX1ZFUklGWSAzMQotCi1zdHJ1Y3Qgc2N0cF9jaHVua19kZXNjIHsKLQl1
aW50OF90IGNodW5rX3R5cGU7Ci0JdWludDhfdCBkYXRhX2J5dGVzW1NDVFBfTlVNX0RCX1RPX1ZF
UklGWV07Ci0JdWludDMyX3QgdHNuX2lmYW55OwotfSBTQ1RQX1BBQ0tFRDsKLQotCi1zdHJ1Y3Qg
c2N0cF9wa3Rkcm9wX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQl1aW50MzJf
dCBib3R0bGVfYnc7Ci0JdWludDMyX3QgY3VycmVudF9vbnE7Ci0JdWludDE2X3QgdHJ1bmNfbGVu
OwotCXVpbnQxNl90IHJlc2VydmVkOwotCXVpbnQ4X3QgZGF0YVtdOwotfSBTQ1RQX1BBQ0tFRDsK
LQotLyoqKioqKioqKipTVFJFQU0gUkVTRVQgU1RVRkYgKioqKioqKioqKioqKioqKioqLwotCi1z
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIg
cGg7Ci0JdWludDMyX3QgcmVxdWVzdF9zZXE7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOwot
CXVpbnQzMl90IHJlcXVlc3Rfc2VxOwkvKiBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgc2VxIG5v
ICovCi0JdWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0aGUgcmVzcCBz
ZXEgbm8gKi8KLQl1aW50MzJfdCBzZW5kX3Jlc2V0X2F0X3RzbjsJLyogbGFzdCBUU04gSSBhc3Np
Z25lZCBvdXRib3VuZCAqLwotCXVpbnQxNl90IGxpc3Rfb2Zfc3RyZWFtc1tdOwkvKiBpZiBub3Qg
YWxsIGxpc3Qgb2Ygc3RyZWFtcyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X2luX3JlcXVlc3QgewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOwotCXVpbnQz
Ml90IHJlcXVlc3Rfc2VxOwotCXVpbnQxNl90IGxpc3Rfb2Zfc3RyZWFtc1tdOwkvKiBpZiBub3Qg
YWxsIGxpc3Qgb2Ygc3RyZWFtcyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0IHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKLQl1aW50
MzJfdCByZXF1ZXN0X3NlcTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9yZXNwb25zZSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7Ci0JdWludDMyX3QgcmVz
cG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0aGUgcmVzcCBzZXEgbm8gKi8KLQl1aW50MzJf
dCByZXN1bHQ7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVz
cG9uc2VfdHNuIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKLQl1aW50MzJfdCByZXNwb25z
ZV9zZXE7CS8qIGlmIGEgcmVzcG9uc2UsIHRoZSByZXNwIHNlcSBubyAqLwotCXVpbnQzMl90IHJl
c3VsdDsKLQl1aW50MzJfdCBzZW5kZXJzX25leHRfdHNuOwotCXVpbnQzMl90IHJlY2VpdmVyc19u
ZXh0X3RzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRf
c3RybSB7Ci0gIHN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOwotICB1aW50MzJfdCByZXF1ZXN0X3Nl
cTsKLSAgdWludDE2X3QgbnVtYmVyX29mX3N0cmVhbXM7Ci0gIHVpbnQxNl90IHJlc2VydmVkOwot
fSBTQ1RQX1BBQ0tFRDsKLQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfTk9USElO
R19UT19ETyAgIDB4MDAwMDAwMDAgLyogWFhYOiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9TVFJF
QU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBT
Q1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX19XUk9OR19TU04gIDB4MDAwMDAwMDMgLyogWFhY
OiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9JTl9QUk9H
UkVTUyAweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFE
X1NFUU5PICAgMHgwMDAwMDAwNQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfSU5f
UFJPR1JFU1MgICAgIDB4MDAwMDAwMDYgLyogWFhYOiB1bnVzZWQgKi8KLQotLyoKLSAqIGNvbnZp
ZW5jZSBzdHJ1Y3R1cmVzLCBub3RlIHRoYXQgaWYgeW91IGFyZSBtYWtpbmcgYSByZXF1ZXN0IGZv
ciBzcGVjaWZpYwotICogc3RyZWFtcyB0aGVuIHRoZSByZXF1ZXN0IHdpbGwgbmVlZCB0byBiZSBh
biBvdmVybGF5IHN0cnVjdHVyZS4KLSAqLwotCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNu
X3JlcSB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X3Rzbl9yZXF1ZXN0IHNyX3JlcTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9yZXNwIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2Ugc3JfcmVzcDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIHJl
c3BvbmUgb25seSB2YWxpZCB3aXRoIGEgVFNOIHJlcXVlc3QgKi8KLXN0cnVjdCBzY3RwX3N0cmVh
bV9yZXNldF9yZXNwX3RzbiB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0Jc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiBzcl9yZXNwOwotfSBTQ1RQX1BBQ0tFRDsKLQot
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0K
LS8qCi0gKiBBdXRoZW50aWNhdGVkIGNodW5rcyBzdXBwb3J0IGRyYWZ0LWlldGYtdHN2d2ctc2N0
cC1hdXRoCi0gKi8KLQotLyogU2hvdWxkIHdlIG1ha2UgdGhlIG1heCBiZSAzMj8gKi8KLSNkZWZp
bmUgU0NUUF9SQU5ET01fTUFYX1NJWkUgMjU2Ci1zdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSB7Ci0J
c3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4ODAwMiAqLwotCXVpbnQ4X3QgcmFu
ZG9tX2RhdGFbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlz
dCB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4ODAwMyAqLwotCXVpbnQ4
X3QgY2h1bmtfdHlwZXNbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2F1dGhfaG1h
Y19hbGdvIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlID0gMHg4MDA0ICovCi0J
dWludDE2X3QgaG1hY19pZHNbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2F1dGhf
Y2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQxNl90IHNoYXJlZF9rZXlf
aWQ7Ci0JdWludDE2X3QgaG1hY19pZDsKLQl1aW50OF90IGhtYWNbXTsKLX0gU0NUUF9QQUNLRUQ7
Ci0KLS8qCi0gKiB3ZSBwcmUtcmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3IgYSBFQ05FIG9yIENXUiBB
TkQgYSBTQUNLIHdpdGggbm8gbWlzc2luZwotICogcGllY2VzLiBJZiBFTkNFIGlzIG1pc3Npbmcg
d2UgY291bGQgaGF2ZSBhIGNvdXBsZSBvZiBibG9ja3MuIFRoaXMgd2F5IHdlCi0gKiBvcHRpbWl6
ZSBzbyB3ZSBNT1NUIGxpa2VseSBjYW4gYnVuZGxlIGEgU0FDSy9FQ04gd2l0aCB0aGUgc21hbGxl
c3Qgc2l6ZQotICogZGF0YSBjaHVuayBJIHdpbGwgc3BsaXQgaW50by4gV2UgY291bGQgaW5jcmVh
c2UgdGhyb3VnaHB1dCBzbGlnaHRseSBieQotICogdGFraW5nIG91dCB0aGVzZSB0d28gYnV0IHRo
ZSAgMjQtc2Fjay84LUNXUiBpLmUuIDMyIGJ5dGVzIEkgcHJlLXJlc2VydmUgSQotICogZmVlbCBp
cyB3b3J0aCBpdCBmb3Igbm93LgotICovCi0jaWZuZGVmIFNDVFBfTUFYX09WRVJIRUFECi0jaWZk
ZWYgSU5FVDYKLSNkZWZpbmUgU0NUUF9NQVhfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9k
YXRhX2NodW5rKSArIFwKLQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCi0JCQkgICBz
aXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNj
dHBfc2Fja19jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKQotCi0jZGVm
aW5lIFNDVFBfTUVEX09WRVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBc
Ci0JCQkgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAotCQkJICAgc2l6ZW9mKHN0cnVjdCBp
cDZfaGRyKSkKLQotCi0jZGVmaW5lIFNDVFBfTUlOX09WRVJIRUFEIChzaXplb2Yoc3RydWN0IGlw
Nl9oZHIpICsgXAotCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKLQotI2Vsc2UKLSNkZWZp
bmUgU0NUUF9NQVhfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwK
LQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNj
dHBfZWNuZV9jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykg
KyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IGlwKSkKLQotI2RlZmluZSBTQ1RQX01FRF9PVkVSSEVB
RCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgXAotCQkJICAgc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKSArIFwKLQkJCSAgIHNpemVvZihzdHJ1Y3QgaXApKQotCi0KLSNkZWZpbmUgU0NU
UF9NSU5fT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3QgaXApICsgXAotCQkJICAgc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKSkKLQotI2VuZGlmIC8qIElORVQ2ICovCi0jZW5kaWYgLyogIVNDVFBfTUFYX09W
RVJIRUFEICovCi0KLSNkZWZpbmUgU0NUUF9NRURfVjRfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qg
c2N0cF9kYXRhX2NodW5rKSArIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBc
Ci0JCQkgICAgICBzaXplb2Yoc3RydWN0IGlwKSkKLQotI2RlZmluZSBTQ1RQX01JTl9WNF9PVkVS
SEVBRCAoc2l6ZW9mKHN0cnVjdCBpcCkgKyBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpKQotCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLSNpbmNsdWRlIDxwYWNrb2ZmLmg+Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jcHJhZ21hIHBhY2so
cG9wKQotI2VuZGlmCi0jdW5kZWYgU0NUUF9QQUNLRUQKLSNlbmRpZgkJCQkvKiAhX19zY3RwX2hl
YWRlcl9oX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMjExYzA1YWI0ZTE2Y2MxNjc4NDQ1YzUxY2VkYTExYzlmODY2NTY0NC4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfaW5kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzM5ICswLDAgQEAKLS8qLQotICogQ29w
eXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWlj
aGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIp
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMp
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVl
QlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9z
eXMvbmV0aW5ldC9zY3RwX2luZGF0YS5jIDMyMTQ2MyAyMDE3LTA3LTI1IDExOjA1OjUzWiB0dWV4
ZW4gJCIpOwotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KLSNpZmRlZiBf
X0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9v
dXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2F1dGguaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9pbnB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgotI2lmZGVmIF9f
RnJlZUJTRF9fCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYnNkLmg+Ci0jZW5kaWYKLS8q
Ci0gKiBOT1RFUzogT24gdGhlIG91dGJvdW5kIHNpZGUgb2YgdGhpbmdzIEkgbmVlZCB0byBjaGVj
ayB0aGUgc2FjayB0aW1lciB0bwotICogc2VlIGlmIEkgc2hvdWxkIGdlbmVyYXRlIGEgc2FjayBp
bnRvIHRoZSBjaHVuayBxdWV1ZSAoaWYgSSBoYXZlIGRhdGEgdG8KLSAqIHNlbmQgdGhhdCBpcyBh
bmQgd2lsbCBiZSBzZW5kaW5nIGl0IC4uIGZvciBidW5kbGluZy4KLSAqCi0gKiBUaGUgY2FsbGJh
Y2sgaW4gc2N0cF91c3JyZXEuYyB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGUgc29ja2V0IGlzIHJl
YWQgZnJvbS4KLSAqIFRoaXMgd2lsbCBjYXVzZSBzY3RwX3NlcnZpY2VfcXVldWVzKCkgdG8gZ2V0
IGNhbGxlZCBvbiB0aGUgdG9wIGVudHJ5IGluCi0gKiB0aGUgbGlzdC4KLSAqLwotc3RhdGljIHVp
bnQzMl90Ci1zY3RwX2FkZF9jaGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCAqY29udHJvbCwKLQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKLQkJCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgbG9ja19oZWxkKTsKLQotCi12b2lkCi1zY3Rw
X3NldF9yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MpCi17Ci0JYXNvYy0+bXlfcnduZCA9IHNjdHBfY2FsY19yd25kKHN0Y2IsIGFzb2MpOwot
fQotCi0vKiBDYWxjdWxhdGUgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAqLwotdWludDMyX3QKLXNj
dHBfY2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpCi17Ci0JdWludDMyX3QgY2FsYyA9IDA7Ci0KLQkvKgotCSAqIFRoaXMgaXMgcmVh
bGx5IHNldCB3cm9uZyB3aXRoIHJlc3BlY3QgdG8gYSAxLTItbSBzb2NrZXQuIFNpbmNlCi0JICog
dGhlIHNiX2NjIGlzIHRoZSBjb3VudCB0aGF0IGV2ZXJ5b25lIGFzIHB1dCB1cC4gV2hlbiB3ZSBy
ZS13cml0ZQotCSAqIHNjdHBfc29yZWNlaXZlIHRoZW4gd2Ugd2lsbCBmaXggdGhpcyBzbyB0aGF0
IE9OTFkgdGhpcwotCSAqIGFzc29jaWF0aW9ucyBkYXRhIGlzIHRha2VuIGludG8gYWNjb3VudC4K
LQkgKi8KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgewotCQlyZXR1cm4gKGNhbGMp
OwotCX0KLQotCWlmIChzdGNiLT5hc29jLnNiX2NjID09IDAgJiYKLQkgICAgYXNvYy0+c2l6ZV9v
bl9yZWFzbV9xdWV1ZSA9PSAwICYmCi0JICAgIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPT0g
MCkgewotCQkvKiBGdWxsIHJ3bmQgZ3JhbnRlZCAqLwotCQlLQVNTRVJUKGFzb2MtPmNudF9vbl9y
ZWFzbV9xdWV1ZSA9PSAwLCAoImNudF9vbl9yZWFzbV9xdWV1ZSBpcyAldSIsIGFzb2MtPmNudF9v
bl9yZWFzbV9xdWV1ZSkpOwotCQlLQVNTRVJUKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyA9PSAw
LCAoImNudF9vbl9hbGxfc3RyZWFtcyBpcyAldSIsIGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcykp
OwotCQljYWxjID0gbWF4KFNDVFBfU0JfTElNSVRfUkNWKHN0Y2ItPnNjdHBfc29ja2V0KSwgU0NU
UF9NSU5JTUFMX1JXTkQpOwotCQlyZXR1cm4gKGNhbGMpOwotCX0KLQkvKiBnZXQgYWN0dWFsIHNw
YWNlICovCi0JY2FsYyA9ICh1aW50MzJfdCkgc2N0cF9zYnNwYWNlKCZzdGNiLT5hc29jLCAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3Jjdik7Ci0JLyoKLQkgKiB0YWtlIG91dCB3aGF0IGhhcyBOT1Qg
YmVlbiBwdXQgb24gc29ja2V0IHF1ZXVlIGFuZCB3ZSB5ZXQgaG9sZAotCSAqIGZvciBwdXR0aW5n
IHVwLgotCSAqLwotCWNhbGMgPSBzY3RwX3Nic3BhY2Vfc3ViKGNhbGMsICh1aW50MzJfdCkoYXNv
Yy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhc29jLT5jbnRfb25fcmVhc21fcXVldWUgKiBNU0laRSkpOwotCWNhbGMgPSBz
Y3RwX3Nic3BhY2Vfc3ViKGNhbGMsICh1aW50MzJfdCkoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyArCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc29jLT5jbnRf
b25fYWxsX3N0cmVhbXMgKiBNU0laRSkpOwotCWlmIChjYWxjID09IDApIHsKLQkJLyogb3V0IG9m
IHNwYWNlICovCi0JCXJldHVybiAoY2FsYyk7Ci0JfQotCi0JLyogd2hhdCBpcyB0aGUgb3Zlcmhl
YWQgb2YgYWxsIHRoZXNlIHJ3bmQncyAqLwotCWNhbGMgPSBzY3RwX3Nic3BhY2Vfc3ViKGNhbGMs
IHN0Y2ItPmFzb2MubXlfcnduZF9jb250cm9sX2xlbik7Ci0JLyogSWYgdGhlIHdpbmRvdyBnZXRz
IHRvbyBzbWFsbCBkdWUgdG8gY3RybC1zdHVmZiwgcmVkdWNlIGl0Ci0JICogdG8gMSwgZXZlbiBp
dCBpcyAwLiBTV1MgZW5nYWdlZAotCSAqLwotCWlmIChjYWxjIDwgc3RjYi0+YXNvYy5teV9yd25k
X2NvbnRyb2xfbGVuKSB7Ci0JCWNhbGMgPSAxOwotCX0KLQlyZXR1cm4gKGNhbGMpOwotfQotCi0K
LQotLyoKLSAqIEJ1aWxkIG91dCBvdXIgcmVhZHEgZW50cnkgYmFzZWQgb24gdGhlIGluY29taW5n
IHBhY2tldC4KLSAqLwotc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKgotc2N0cF9idWlsZF9y
ZWFkcV9lbnRyeShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LAotICAgIHVpbnQzMl90IHRzbiwgdWludDMyX3QgcHBpZCwKLSAgICB1aW50MzJfdCBjb250
ZXh0LCB1aW50MTZfdCBzaWQsCi0gICAgdWludDMyX3QgbWlkLCB1aW50OF90IGZsYWdzLAotICAg
IHN0cnVjdCBtYnVmICpkbSkKLXsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqcmVhZF9x
dWV1ZV9lID0gTlVMTDsKLQotCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNiLCByZWFkX3F1ZXVlX2Up
OwotCWlmIChyZWFkX3F1ZXVlX2UgPT0gTlVMTCkgewotCQlnb3RvIGZhaWxlZF9idWlsZDsKLQl9
Ci0JbWVtc2V0KHJlYWRfcXVldWVfZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkKSk7Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19zdHJlYW0gPSBzaWQ7Ci0JcmVhZF9xdWV1ZV9l
LT5zaW5mb19mbGFncyA9IChmbGFncyA8PCA4KTsKLQlyZWFkX3F1ZXVlX2UtPnNpbmZvX3BwaWQg
PSBwcGlkOwotCXJlYWRfcXVldWVfZS0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7Ci0JcmVhZF9x
dWV1ZV9lLT5zaW5mb190c24gPSB0c247Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19jdW10c24gPSB0
c247Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3Rj
Yik7Ci0JcmVhZF9xdWV1ZV9lLT5taWQgPSBtaWQ7Ci0JcmVhZF9xdWV1ZV9lLT50b3BfZnNuID0g
cmVhZF9xdWV1ZV9lLT5mc25faW5jbHVkZWQgPSAweGZmZmZmZmZmOwotCVRBSUxRX0lOSVQoJnJl
YWRfcXVldWVfZS0+cmVhc20pOwotCXJlYWRfcXVldWVfZS0+d2hvRnJvbSA9IG5ldDsKLQlhdG9t
aWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOwotCXJlYWRfcXVldWVfZS0+ZGF0YSA9IGRt
OwotCXJlYWRfcXVldWVfZS0+c3RjYiA9IHN0Y2I7Ci0JcmVhZF9xdWV1ZV9lLT5wb3J0X2Zyb20g
PSBzdGNiLT5ycG9ydDsKLWZhaWxlZF9idWlsZDoKLQlyZXR1cm4gKHJlYWRfcXVldWVfZSk7Ci19
Ci0KLXN0cnVjdCBtYnVmICoKLXNjdHBfYnVpbGRfY3RsX25jaHVuayhzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbykKLXsKLQlzdHJ1Y3Qgc2N0cF9l
eHRyY3ZpbmZvICpzZWluZm87Ci0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqb3V0aW5mbzsKLQlz
dHJ1Y3Qgc2N0cF9yY3ZpbmZvICpyY3ZpbmZvOwotCXN0cnVjdCBzY3RwX254dGluZm8gKm54dGlu
Zm87Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCVdTQUNNU0dIRFIgKmNt
aDsKLSNlbHNlCi0Jc3RydWN0IGNtc2doZHIgKmNtaDsKLSNlbmRpZgotCXN0cnVjdCBtYnVmICpy
ZXQ7Ci0JaW50IGxlbjsKLQlpbnQgdXNlX2V4dGVuZGVkOwotCWludCBwcm92aWRlX254dDsKLQot
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VW
TlQpICYmCi0JICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNW
UkNWSU5GTykgJiYKLQkgICAgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X1JFQ1ZOWFRJTkZPKSkgewotCQkvKiB1c2VyIGRvZXMgbm90IHdhbnQgYW55IGFuY2lsbGFyeSBk
YXRhICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JbGVuID0gMDsKLQlpZiAoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pKSB7Ci0JCWxlbiArPSBD
TVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7Ci0JfQotCXNlaW5mbyA9IChz
dHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICopc2luZm87Ci0JaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKSAmJgotCSAgICAoc2VpbmZvLT5zZXJpbmZv
X25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0FWQUlMKSkgewotCQlwcm92aWRlX254dCA9IDE7
Ci0JCWxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9ueHRpbmZvKSk7Ci0JfSBl
bHNlIHsKLQkJcHJvdmlkZV9ueHQgPSAwOwotCX0KLQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpKSB7Ci0JCWlmIChzY3RwX2lzX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykpIHsKLQkJCXVzZV9leHRlbmRl
ZCA9IDE7Ci0JCQlsZW4gKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfZXh0cmN2aW5m
bykpOwotCQl9IGVsc2UgewotCQkJdXNlX2V4dGVuZGVkID0gMDsKLQkJCWxlbiArPSBDTVNHX1NQ
QUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Ci0JCX0KLQl9IGVsc2UgewotCQl1
c2VfZXh0ZW5kZWQgPSAwOwotCX0KLQotCXJldCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4s
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAocmV0ID09IE5VTEwpIHsKLQkJLyogTm8g
c3BhY2UgKi8KLQkJcmV0dXJuIChyZXQpOwotCX0KLQlTQ1RQX0JVRl9MRU4ocmV0KSA9IDA7Ci0K
LQkvKiBXZSBuZWVkIGEgQ01TRyBoZWFkZXIgZm9sbG93ZWQgYnkgdGhlIHN0cnVjdCAqLwotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQljbWggPSBtdG9kKHJldCwgV1NBQ01T
R0hEUiAqKTsKLSNlbHNlCi0JY21oID0gbXRvZChyZXQsIHN0cnVjdCBjbXNnaGRyICopOwotI2Vu
ZGlmCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBubyB1bi1pbml0aWFsaXplZCBw
YWRkaW5nIGJldHdlZW4KLQkgKiB0aGUgY21zZyBoZWFkZXIgYW5kIGNtc2cgZGF0YSBhbmQgYWZ0
ZXIgdGhlIGNtc2cgZGF0YS4KLQkgKi8KLQltZW1zZXQoY21oLCAwLCBsZW4pOwotCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykpIHsKLQkJY21o
LT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwotCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4o
c2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKTsKLQkJY21oLT5jbXNnX3R5cGUgPSBTQ1RQX1JD
VklORk87Ci0JCXJjdmluZm8gPSAoc3RydWN0IHNjdHBfcmN2aW5mbyAqKUNNU0dfREFUQShjbWgp
OwotCQlyY3ZpbmZvLT5yY3Zfc2lkID0gc2luZm8tPnNpbmZvX3N0cmVhbTsKLQkJcmN2aW5mby0+
cmN2X3NzbiA9IHNpbmZvLT5zaW5mb19zc247Ci0JCXJjdmluZm8tPnJjdl9mbGFncyA9IHNpbmZv
LT5zaW5mb19mbGFnczsKLQkJcmN2aW5mby0+cmN2X3BwaWQgPSBzaW5mby0+c2luZm9fcHBpZDsK
LQkJcmN2aW5mby0+cmN2X3RzbiA9IHNpbmZvLT5zaW5mb190c247Ci0JCXJjdmluZm8tPnJjdl9j
dW10c24gPSBzaW5mby0+c2luZm9fY3VtdHNuOwotCQlyY3ZpbmZvLT5yY3ZfY29udGV4dCA9IHNp
bmZvLT5zaW5mb19jb250ZXh0OwotCQlyY3ZpbmZvLT5yY3ZfYXNzb2NfaWQgPSBzaW5mby0+c2lu
Zm9fYXNzb2NfaWQ7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQljbWgg
PSAoV1NBQ01TR0hEUiAqKSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qg
c2N0cF9yY3ZpbmZvKSkpOwotI2Vsc2UKLQkJY21oID0gKHN0cnVjdCBjbXNnaGRyICopKChjYWRk
cl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKSk7Ci0jZW5k
aWYKLQkJU0NUUF9CVUZfTEVOKHJldCkgKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBf
cmN2aW5mbykpOwotCX0KLQlpZiAocHJvdmlkZV9ueHQpIHsKLQkJY21oLT5jbXNnX2xldmVsID0g
SVBQUk9UT19TQ1RQOwotCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBz
Y3RwX254dGluZm8pKTsKLQkJY21oLT5jbXNnX3R5cGUgPSBTQ1RQX05YVElORk87Ci0JCW54dGlu
Zm8gPSAoc3RydWN0IHNjdHBfbnh0aW5mbyAqKUNNU0dfREFUQShjbWgpOwotCQlueHRpbmZvLT5u
eHRfc2lkID0gc2VpbmZvLT5zZXJpbmZvX25leHRfc3RyZWFtOwotCQlueHRpbmZvLT5ueHRfZmxh
Z3MgPSAwOwotCQlpZiAoc2VpbmZvLT5zZXJpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNH
X0lTX1VOT1JERVJFRCkgewotCQkJbnh0aW5mby0+bnh0X2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVE
OwotCQl9Ci0JCWlmIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0df
SVNfTk9USUZJQ0FUSU9OKSB7Ci0JCQlueHRpbmZvLT5ueHRfZmxhZ3MgfD0gU0NUUF9OT1RJRklD
QVRJT047Ci0JCX0KLQkJaWYgKHNlaW5mby0+c2VyaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhU
X01TR19JU0NPTVBMRVRFKSB7Ci0JCQlueHRpbmZvLT5ueHRfZmxhZ3MgfD0gU0NUUF9DT01QTEVU
RTsKLQkJfQotCQlueHRpbmZvLT5ueHRfcHBpZCA9IHNlaW5mby0+c2VyaW5mb19uZXh0X3BwaWQ7
Ci0JCW54dGluZm8tPm54dF9sZW5ndGggPSBzZWluZm8tPnNlcmluZm9fbmV4dF9sZW5ndGg7Ci0J
CW54dGluZm8tPm54dF9hc3NvY19pZCA9IHNlaW5mby0+c2VyaW5mb19uZXh0X2FpZDsKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCWNtaCA9IChXU0FDTVNHSERSICopKChj
YWRkcl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKSk7Ci0j
ZWxzZQotCQljbWggPSAoc3RydWN0IGNtc2doZHIgKikoKGNhZGRyX3QpY21oICsgQ01TR19TUEFD
RShzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpKTsKLSNlbmRpZgotCQlTQ1RQX0JVRl9MRU4o
cmV0KSArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9ueHRpbmZvKSk7Ci0JfQotCWlm
IChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkp
IHsKLQkJY21oLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwotCQlvdXRpbmZvID0gKHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21oKTsKLQkJaWYgKHVzZV9leHRlbmRlZCkg
ewotCQkJY21oLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3Zp
bmZvKSk7Ci0JCQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfRVhUUkNWOwotCQkJbWVtY3B5KG91dGlu
Zm8sIHNpbmZvLCBzaXplb2Yoc3RydWN0IHNjdHBfZXh0cmN2aW5mbykpOwotCQkJU0NUUF9CVUZf
TEVOKHJldCkgKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfZXh0cmN2aW5mbykpOwot
CQl9IGVsc2UgewotCQkJY21oLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvKSk7Ci0JCQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfU05EUkNWOwotCQkJKm91
dGluZm8gPSAqc2luZm87Ci0JCQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBDTVNHX1NQQUNFKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Ci0JCX0KLQl9Ci0JcmV0dXJuIChyZXQpOwotfQot
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX21hcmtfbm9uX3Jldm9rYWJsZShzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYywgdWludDMyX3QgdHNuKQotewotCXVpbnQzMl90IGdhcCwgaSwgY3VtYWNr
cDE7Ci0JaW50IGZuZCA9IDA7Ci0JaW50IGluX3I9MCwgaW5fbnI9MDsKLQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RvX2RyYWluKSA9PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0JY3VtYWNrcDEg
PSBhc29jLT5jdW11bGF0aXZlX3RzbiArIDE7Ci0JaWYgKFNDVFBfVFNOX0dUKGN1bWFja3AxLCB0
c24pKSB7Ci0JCS8qIHRoaXMgdHNuIGlzIGJlaGluZCB0aGUgY3VtIGFjayBhbmQgdGh1cyB3ZSBk
b24ndAotCQkgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIG1vdmVkIGZyb20gb25lIHRv
IHRoZSBvdGhlci4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0JU0NUUF9DQUxDX1RTTl9UT19HQVAo
Z2FwLCB0c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCWluX3IgPSBTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JaW5fbnIgPSBTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCk7Ci0JaWYgKChpbl9yID09
IDApICYmIChpbl9uciA9PSAwKSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoIlRoaW5n
cyBhcmUgcmVhbGx5IG1lc3NlZCB1cCBub3ciKTsKLSNlbHNlCi0JCVNDVFBfUFJJTlRGKCJnYXA6
JXggdHNuOiV4XG4iLCBnYXAsIHRzbik7Ci0JCXNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShhc29j
KTsKLSNlbmRpZgotCX0KLQlpZiAoaW5fbnIgPT0gMCkKLQkJU0NUUF9TRVRfVFNOX1BSRVNFTlQo
YXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKLQlpZiAoaW5fcikKLQkJU0NUUF9VTlNFVF9U
U05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOwotCWlmIChTQ1RQX1RTTl9HVCh0
c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7Ci0JCWFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9ucl9tYXAgPSB0c247Ci0JfQotCWlmICh0c24gPT0gYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCkgewotCQkvKiBXZSBtdXN0IGJhY2sgZG93biB0byBzZWUgd2hhdCB0aGUg
bmV3IGhpZ2hlc3QgaXMgKi8KLQkJZm9yIChpID0gdHNuIC0gMTsgU0NUUF9UU05fR0UoaSwgYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7IGktLSkgewotCQkJU0NUUF9DQUxDX1RTTl9UT19H
QVAoZ2FwLCBpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKLQkJCWlmIChTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCkpIHsKLQkJCQlhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID0gaTsKLQkJCQlmbmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQot
CQl9Ci0JCWlmICghZm5kKSB7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIDE7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQK
LXNjdHBfcGxhY2VfY29udHJvbF9pbl9zdHJlYW0oc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJt
LAotCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJCSAgICAgc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wpCi17Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKmF0OwotCXN0cnVjdCBzY3RwX3JlYWRoZWFkICpxOwotCXVpbnQ4X3QgZmxhZ3MsIHVu
b3JkZXJlZDsKLQotCWZsYWdzID0gKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpOwotCXVub3Jk
ZXJlZCA9IGZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRDsKLQlpZiAodW5vcmRlcmVkKSB7Ci0J
CXEgPSAmc3RybS0+dW5vX2lucXVldWU7Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0g
MCkgewotCQkJaWYgKCFUQUlMUV9FTVBUWShxKSkgewotCQkJCS8qIE9ubHkgb25lIHN0cmVhbSBj
YW4gYmUgaGVyZSBpbiBvbGQgc3R5bGUgIC0tIGFib3J0ICovCi0JCQkJcmV0dXJuICgtMSk7Ci0J
CQl9Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTChxLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQlj
b250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JERVJFRDsKLQkJCXJldHVybiAoMCk7Ci0J
CX0KLQl9IGVsc2UgewotCQlxID0gJnN0cm0tPmlucXVldWU7Ci0JfQotCWlmICgoZmxhZ3MgJiBT
Q1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykgewotCQljb250cm9sLT5l
bmRfYWRkZWQgPSAxOwotCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOwotCQljb250cm9s
LT5sYXN0X2ZyYWdfc2VlbiA9IDE7Ci0JfQotCWlmIChUQUlMUV9FTVBUWShxKSkgewotCQkvKiBF
bXB0eSBxdWV1ZSAqLwotCQlUQUlMUV9JTlNFUlRfSEVBRChxLCBjb250cm9sLCBuZXh0X2luc3Ry
bSk7Ci0JCWlmICh1bm9yZGVyZWQpIHsKLQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IFNDVFBfT05f
VU5PUkRFUkVEOwotCQl9IGVsc2UgewotCQkJY29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9P
UkRFUkVEOwotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsKLQkJVEFJTFFfRk9SRUFDSChh
dCwgcSwgbmV4dF9pbnN0cm0pIHsKLQkJCWlmIChTQ1RQX01JRF9HVChhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIGF0LT5taWQsIGNvbnRyb2wtPm1pZCkpIHsKLQkJCQkvKgotCQkJCSAqIG9uZSBpbiBx
dWV1ZSBpcyBiaWdnZXIgdGhhbiB0aGUKLQkJCQkgKiBuZXcgb25lLCBpbnNlcnQgYmVmb3JlIHRo
aXMgb25lCi0JCQkJICovCi0JCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShhdCwgY29udHJvbCwgbmV4
dF9pbnN0cm0pOwotCQkJCWlmICh1bm9yZGVyZWQpIHsKLQkJCQkJY29udHJvbC0+b25fc3RybV9x
ID0gU0NUUF9PTl9VTk9SREVSRUQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY29udHJvbC0+b25fc3Ry
bV9xID0gU0NUUF9PTl9PUkRFUkVEIDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYg
KFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXQtPm1pZCwgY29udHJvbC0+bWlk
KSkgewotCQkJCS8qCi0JCQkJICogR2FrLCBIZSBzZW50IG1lIGEgZHVwbGljYXRlIG1zZwotCQkJ
CSAqIGlkIG51bWJlcj8/IHJldHVybiAtMSB0byBhYm9ydC4KLQkJCQkgKi8KLQkJCQlyZXR1cm4g
KC0xKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFRBSUxRX05FWFQoYXQsIG5leHRfaW5zdHJtKSA9
PSBOVUxMKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFdlIGFyZSBhdCB0aGUgZW5kLCBpbnNlcnQKLQkJ
CQkJICogaXQgYWZ0ZXIgdGhpcyBvbmUKLQkJCQkJICovCi0JCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJ
CQkJc2N0cF9sb2dfc3RybV9kZWwoY29udHJvbCwgYXQsCi0JCQkJCQkJCSAgU0NUUF9TVFJfTE9H
X0ZST01fSU5TRVJUX1RMKTsKLQkJCQkJfQotCQkJCQlUQUlMUV9JTlNFUlRfQUZURVIocSwgYXQs
IGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJCQkJaWYgKHVub3JkZXJlZCkgewotCQkJCQkJY29u
dHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQgOwotCQkJCQl9IGVsc2UgewotCQkJ
CQkJY29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9PUkRFUkVEIDsKLQkJCQkJfQotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZv
aWQKLXNjdHBfYWJvcnRfaW5fcmVhc20oc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLSAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotICAgICAgICAgICAgICAg
ICAgICBpbnQgKmFib3J0X2ZsYWcsIGludCBvcHNwb3QpCi17Ci0JY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKLQlzdHJ1Y3QgbWJ1ZiAqb3BlcjsKLQotCWlmIChzdGNiLT5hc29jLmlkYXRh
X3N1cHBvcnRlZCkgewotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAotCQkJICJSZWFzcyAl
eCxDRjoleCxUU049JTguOHgsU0lEPSU0LjR4LEZTTj0lOC44eCxNSUQ6JTguOHgiLAotCQkJIG9w
c3BvdCwKLQkJCSBjb250cm9sLT5mc25faW5jbHVkZWQsCi0JCQkgY2hrLT5yZWMuZGF0YS50c24s
Ci0JCQkgY2hrLT5yZWMuZGF0YS5zaWQsCi0JCQkgY2hrLT5yZWMuZGF0YS5mc24sIGNoay0+cmVj
LmRhdGEubWlkKTsKLQl9IGVsc2UgewotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAotCQkJ
ICJSZWFzcyAleCxDSToleCxUU049JTguOHgsU0lEPSU0LjR4LEZTTj0lNC40eCxTU046JTQuNHgi
LAotCQkJIG9wc3BvdCwKLQkJCSBjb250cm9sLT5mc25faW5jbHVkZWQsCi0JCQkgY2hrLT5yZWMu
ZGF0YS50c24sCi0JCQkgY2hrLT5yZWMuZGF0YS5zaWQsCi0JCQkgY2hrLT5yZWMuZGF0YS5mc24s
Ci0JCQkgKHVpbnQxNl90KWNoay0+cmVjLmRhdGEubWlkKTsKLQl9Ci0Jb3BlciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0Jc2N0cF9t
X2ZyZWVtKGNoay0+ZGF0YSk7Ci0JY2hrLT5kYXRhID0gTlVMTDsKLQlzY3RwX2ZyZWVfYV9jaHVu
ayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0Jc3RjYi0+c2N0cF9lcC0+bGFzdF9h
Ym9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTsKLQlzY3RwX2Fi
b3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wZXIsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JKmFib3J0X2ZsYWcgPSAxOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jbGVh
bl91cF9jb250cm9sKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKmNvbnRyb2wpCi17Ci0JLyogCi0JICogVGhlIGNvbnRyb2wgY291bGQgbm90IGJlIHBs
YWNlZCBhbmQgbXVzdCBiZSBjbGVhbmVkLgotCSAqLwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsg
KmNoaywgKm5jaGs7Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBz
Y3RwX25leHQsIG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBz
Y3RwX25leHQpOwotCQlpZiAoY2hrLT5kYXRhKQotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7
Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0Jc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7
CQotfQotCi0vKgotICogUXVldWUgdGhlIGNodW5rIGVpdGhlciByaWdodCBpbnRvIHRoZSBzb2Nr
ZXQgYnVmZmVyIGlmIGl0IGlzIHRoZSBuZXh0IG9uZQotICogdG8gZ28gT1IgcHV0IGl0IGluIHRo
ZSBjb3JyZWN0IHBsYWNlIGluIHRoZSBkZWxpdmVyeSBxdWV1ZS4gIElmIHdlIGRvCi0gKiBhcHBl
bmQgdG8gdGhlIHNvX2J1Ziwga2VlcCBkb2luZyBzbyB1bnRpbCB3ZSBhcmUgb3V0IG9mIG9yZGVy
IGFzCi0gKiBsb25nIGFzIHRoZSBjb250cm9sJ3MgZW50ZXJlZCBhcmUgbm9uLWZyYWdtZW50ZWQu
Ci0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX3F1ZXVlX2RhdGFfdG9fc3RyZWFtKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICBzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgaW50ICphYm9ydF9mbGFnLCBpbnQgKm5l
ZWRfcmVhc20pCi17Ci0JLyoKLQkgKiBGSVgtTUUgbWF5YmU/IFdoYXQgaGFwcGVucyB3aGVuIHRo
ZSBzc24gd3JhcHM/IElmIHdlIGFyZSBnZXR0aW5nCi0JICogYWxsIHRoZSBkYXRhIGluIG9uZSBz
dHJlYW0gdGhpcyBjb3VsZCBoYXBwZW4gcXVpdGUgcmFwaWRseS4gT25lCi0JICogY291bGQgdXNl
IHRoZSBUU04gdG8ga2VlcCB0cmFjayBvZiB0aGluZ3MsIGJ1dCB0aGlzIHNjaGVtZSBicmVha3MK
LQkgKiBkb3duIGluIHRoZSBvdGhlciB0eXBlIG9mIHN0cmVhbSB1c2FnZSB0aGF0IGNvdWxkIG9j
Y3VyLiBTZW5kIGEKLQkgKiBzaW5nbGUgbXNnIHRvIHN0cmVhbSAwLCBzZW5kIDRCaWxsaW9uIG1l
c3NhZ2VzIHRvIHN0cmVhbSAxLCBub3cKLQkgKiBzZW5kIGEgbWVzc2FnZSB0byBzdHJlYW0gMC4g
WW91IGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIFRTTgotCSAqIGhhcyB3cmFwcGVkIGJ1dCBu
b3QgaW4gdGhlIHN0cmVhbS4gSXMgdGhpcyB3b3J0aCB3b3JyeWluZyBhYm91dAotCSAqIG9yIHNo
b3VsZCB3ZSBqdXN0IGNoYW5nZSBvdXIgcXVldWUgc29ydCBhdCB0aGUgYm90dG9tIHRvIGJlIGJ5
Ci0JICogVFNOLgotCSAqCi0JICogQ291bGQgaXQgYWxzbyBiZSBsZWdhbCBmb3IgYSBwZWVyIHRv
IHNlbmQgc3NuIDEgd2l0aCBUU04gMiBhbmQgc3NuIDIKLQkgKiB3aXRoIFRTTiAxPyBJZiB0aGUg
cGVlciBpcyBkb2luZyBzb21lIHNvcnQgb2YgZnVua3kgVFNOL1NTTgotCSAqIGFzc2lnbm1lbnQg
dGhpcyBjb3VsZCBoYXBwZW4uLi4gYW5kIEkgZG9uJ3Qgc2VlIGhvdyB0aGlzIHdvdWxkIGJlCi0J
ICogYSB2aW9sYXRpb24uIFNvIGZvciBub3cgSSBhbSB1bmRlY2lkZWQgYW4gd2lsbCBsZWF2ZSB0
aGUgc29ydCBieQotCSAqIFNTTiBhbG9uZS4gTWF5YmUgYSBoeWJyZWQgYXBwcm9hY2ggaXMgdGhl
IGFuc3dlcgotCSAqCi0JICovCi0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmF0OwotCWlu
dCBxdWV1ZV9uZWVkZWQ7Ci0JdWludDMyX3Qgbnh0X3RvZGVsOwotCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtOwotCWNoYXIgbXNnW1NDVFBfRElBR19J
TkZPX0xFTl07Ci0KLQlzdHJtID0gJmFzb2MtPnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1d
OwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9M
T0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19zdHJtX2RlbChjb250cm9sLCBOVUxMLCBTQ1RQ
X1NUUl9MT0dfRlJPTV9JTlRPX1NUUkQpOwotCX0KLQlpZiAoU0NUUF9NSURfR1QoKGFzb2MtPmlk
YXRhX3N1cHBvcnRlZCksIHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCwgY29udHJvbC0+bWlkKSkg
ewotCQkvKiBUaGUgaW5jb21pbmcgc3NlcSBpcyBiZWhpbmQgd2hlcmUgd2UgbGFzdCBkZWxpdmVy
ZWQ/ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTkRBVEExLCAiRHVwbGljYXRlIFMtU0VROiAl
dSBkZWxpdmVyZWQ6ICV1IGZyb20gcGVlciwgQWJvcnQgYXNzb2NpYXRpb25cbiIsCi0JCQlzdHJt
LT5sYXN0X21pZF9kZWxpdmVyZWQsIGNvbnRyb2wtPm1pZCk7Ci0JCS8qCi0JCSAqIHRocm93IGl0
IGluIHRoZSBzdHJlYW0gc28gaXQgZ2V0cyBjbGVhbmVkIHVwIGluCi0JCSAqIGFzc29jaWF0aW9u
IGRlc3RydWN0aW9uCi0JCSAqLwotCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3RybS0+aW5xdWV1ZSwg
Y29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7Ci0J
CQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIE1JRD0lOC44eCwgZ290IFRT
Tj0lOC44eCwgU0lEPSU0LjR4LCBNSUQ9JTguOHgiLAotCQkJICAgICAgICAgc3RybS0+bGFzdF9t
aWRfZGVsaXZlcmVkLCBjb250cm9sLT5zaW5mb190c24sCi0JCQkgICAgICAgICBjb250cm9sLT5z
aW5mb19zdHJlYW0sIGNvbnRyb2wtPm1pZCk7Ci0JCX0gZWxzZSB7Ci0JCQlzbnByaW50Zihtc2cs
IHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIFNTTj0lNC40eCwgZ290IFRTTj0lOC44eCwgU0lEPSU0
LjR4LCBTU049JTQuNHgiLAotCQkJICAgICAgICAgKHVpbnQxNl90KXN0cm0tPmxhc3RfbWlkX2Rl
bGl2ZXJlZCwKLQkJCSAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3RzbiwKLQkJCSAgICAgICAgIGNv
bnRyb2wtPnNpbmZvX3N0cmVhbSwKLQkJCSAgICAgICAgICh1aW50MTZfdCljb250cm9sLT5taWQp
OwotCQl9Ci0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NP
TF9WSU9MQVRJT04sIG1zZyk7Ci0JCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFND
VFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI7Ci0JCXNjdHBfYWJvcnRfYW5fYXNzb2Np
YXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQkqYWJvcnRfZmxhZyA9IDE7Ci0JCXJldHVybjsKLQotCX0KLQlxdWV1ZV9uZWVkZWQgPSAxOwot
CWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gY29udHJvbC0+bGVuZ3RoOwotCXNjdHBfdWNv
dW50X2luY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQlueHRfdG9kZWwgPSBzdHJtLT5s
YXN0X21pZF9kZWxpdmVyZWQgKyAxOwotCWlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlkKSkgewotI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzdHJ1Y3Qgc29ja2V0ICpzbzsK
LQotCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBf
U09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCWlmIChzdGNiLT5zY3RwX2VwLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKLQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQkvKiBjYW4gYmUgZGVs
aXZlcmVkIHJpZ2h0IGF3YXk/ICovCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJc2N0cF9sb2dfc3RybV9k
ZWwoY29udHJvbCwgTlVMTCwgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVMKTsKLQkJfQotCQkv
KiBFWSBpdCB3b250IGJlIHF1ZXVlZCBpZiBpdCBjb3VsZCBiZSBkZWxpdmVyZWQgZGlyZWN0bHkg
Ki8KLQkJcXVldWVfbmVlZGVkID0gMDsKLQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
Pj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0JCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNv
bnRyb2wtPmxlbmd0aDsKLQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQlwYW5pYygi
c2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIs
IGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxzZQotCQkJ
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7Ci0jZW5kaWYKLQkJfQotCQlzY3RwX3Vjb3Vu
dF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCXN0cm0tPmxhc3RfbWlkX2RlbGl2
ZXJlZCsrOwotCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190
c24pOwotCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkgICAgICAg
ICAgICAgICAgICBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2Nr
ZXQtPnNvX3JjdiwgMSwKLQkJICAgICAgICAgICAgICAgICAgU0NUUF9SRUFEX0xPQ0tfTk9UX0hF
TEQsIFNDVFBfU09fTE9DS0VEKTsKLQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZzdHJt
LT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgYXQpIHsKLQkJCS8qIGFsbCBkZWxpdmVyZWQgKi8KLQkJ
CW54dF90b2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7Ci0JCQlpZiAoU0NUUF9N
SURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBueHRfdG9kZWwsIGNvbnRyb2wtPm1pZCkgJiYK
LQkJCSAgICAoKChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9OT1RfRlJB
RykgPT0gU0NUUF9EQVRBX05PVF9GUkFHKSkgewotCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3Eg
PT0gU0NUUF9PTl9PUkRFUkVEKSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwg
Y29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
LT0gY29udHJvbC0+bGVuZ3RoOwotCQkJCQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJ
CQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wg
bGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsK
LSNlbHNlCi0JCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJ
CQl9Ci0JCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLSNp
ZmRlZiBJTlZBUklBTlRTCi0JCQkJfSBlbHNlIHsKLQkJCQkJcGFuaWMoIkh1aCBjb250cm9sOiAl
cCBpcyBvbl9zdHJtX3E6ICVkIiwKLQkJCQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3Ry
bV9xKTsKLSNlbmRpZgotCQkJCX0KLQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotCQkJCXN0
cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCsrOwotCQkJCS8qCi0JCQkJICogV2UgaWdub3JlIHRoZSBy
ZXR1cm4gb2YgZGVsaXZlcl9kYXRhIGhlcmUKLQkJCQkgKiBzaW5jZSB3ZSBhbHdheXMgY2FuIGhv
bGQgdGhlIGNodW5rIG9uIHRoZQotCQkJCSAqIGQtcXVldWUuIEFuZCB3ZSBoYXZlIGEgZmluaXRl
IG51bWJlciB0aGF0Ci0JCQkJICogY2FuIGJlIGRlbGl2ZXJlZCBmcm9tIHRoZSBzdHJxLgotCQkJ
CSAqLwotCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19zdHJtX2RlbChjb250cm9sLCBO
VUxMLAotCQkJCQkJCSAgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVMKTsKLQkJCQl9Ci0JCQkJ
c2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+c2luZm9fdHNuKTsKLQkJCQlz
Y3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCSAgICAgICAgICAgICAg
ICAgIGNvbnRyb2wsCi0JCQkJICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5z
b19yY3YsIDEsCi0JCQkJICAgICAgICAgICAgICAgICAgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQs
Ci0JCQkJICAgICAgICAgICAgICAgICAgU0NUUF9TT19MT0NLRUQpOwotCQkJCWNvbnRpbnVlOwot
CQkJfSBlbHNlIGlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG54dF90b2Rl
bCwgY29udHJvbC0+bWlkKSkgewotCQkJCSpuZWVkX3JlYXNtID0gMTsKLQkJCX0KLQkJCWJyZWFr
OwotCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci0JaWYgKHF1
ZXVlX25lZWRlZCkgewotCQkvKgotCQkgKiBPaywgd2UgZGlkIG5vdCBkZWxpdmVyIHRoaXMgZ3V5
LCBmaW5kIHRoZSBjb3JyZWN0IHBsYWNlCi0JCSAqIHRvIHB1dCBpdCBvbiB0aGUgcXVldWUuCi0J
CSAqLwotCQlpZiAoc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShzdHJtLCBhc29jLCBjb250
cm9sKSkgewotCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKLQkJCQkgIlF1ZXVlIHRvIHN0
ciBNSUQ6ICV1IGR1cGxpY2F0ZSIsCi0JCQkJIGNvbnRyb2wtPm1pZCk7Ci0JCQlzY3RwX2NsZWFu
X3VwX2NvbnRyb2woc3RjYiwgY29udHJvbCk7Ci0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwotCQkJc3RjYi0+c2N0cF9l
cC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMzsK
LQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJy
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJKmFib3J0X2ZsYWcgPSAxOwotCQl9Ci0JfQotfQot
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NldHVwX3RhaWxfcG9pbnRlcihzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbSwgKnByZXYgPSBOVUxMOwot
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQotCXN0Y2IgPSBjb250cm9sLT5zdGNiOwotCWNvbnRy
b2wtPmhlbGRfbGVuZ3RoID0gMDsKLQljb250cm9sLT5sZW5ndGggPSAwOwotCW0gPSBjb250cm9s
LT5kYXRhOwotCXdoaWxlIChtKSB7Ci0JCWlmIChTQ1RQX0JVRl9MRU4obSkgPT0gMCkgewotCQkJ
LyogU2tpcCBtYnVmcyB3aXRoIE5PIGxlbmd0aCAqLwotCQkJaWYgKHByZXYgPT0gTlVMTCkgewot
CQkJCS8qIEZpcnN0IG9uZSAqLwotCQkJCWNvbnRyb2wtPmRhdGEgPSBzY3RwX21fZnJlZShtKTsK
LQkJCQltID0gY29udHJvbC0+ZGF0YTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9CVUZfTkVYVChw
cmV2KSA9IHNjdHBfbV9mcmVlKG0pOwotCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKHByZXYpOwotCQkJ
fQotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7Ci0J
CQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcmV2ID0gbTsKLQkJYXRvbWljX2FkZF9pbnQoJmNv
bnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRf
cSkgewotCQkJLyoKLQkJCSAqIE9uIHJlYWQgcXVldWUgc28gd2UgbXVzdCBpbmNyZW1lbnQgdGhl
Ci0JCQkgKiBTQiBzdHVmZiwgd2UgYXNzdW1lIGNhbGxlciBoYXMgZG9uZSBhbnkgbG9ja3Mgb2Yg
U0IuCi0JCQkgKi8KLQkJCXNjdHBfc2JhbGxvYyhzdGNiLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNv
X3JjdiwgbSk7Ci0JCX0KLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JfQotCWlmIChwcmV2KSB7
Ci0JCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9hZGRfdG9fdGFpbF9wb2ludGVyKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
LCBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3QgKmFkZGVkKQotewotCXN0cnVjdCBtYnVmICpwcmV2
PU5VTEw7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCi0Jc3RjYiA9IGNvbnRyb2wtPnN0Y2I7
Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoIkNvbnRy
b2wgYnJva2VuIik7Ci0jZWxzZQotCQlyZXR1cm47Ci0jZW5kaWYKLQl9Ci0JaWYgKGNvbnRyb2wt
PnRhaWxfbWJ1ZiA9PSBOVUxMKSB7Ci0JCS8qIFRTTkggKi8KLQkJY29udHJvbC0+ZGF0YSA9IG07
Ci0JCXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKGNvbnRyb2wpOwotCQlyZXR1cm47Ci0JfQotCWNv
bnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0ID0gbTsKLQl3aGlsZSAobSkgewotCQlpZiAoU0NUUF9C
VUZfTEVOKG0pID09IDApIHsKLQkJCS8qIFNraXAgbWJ1ZnMgd2l0aCBOTyBsZW5ndGggKi8KLQkJ
CWlmIChwcmV2ID09IE5VTEwpIHsKLQkJCQkvKiBGaXJzdCBvbmUgKi8KLQkJCQljb250cm9sLT50
YWlsX21idWYtPm1fbmV4dCA9IHNjdHBfbV9mcmVlKG0pOwotCQkJCW0gPSBjb250cm9sLT50YWls
X21idWYtPm1fbmV4dDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9CVUZfTkVYVChwcmV2KSA9IHNj
dHBfbV9mcmVlKG0pOwotCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKHByZXYpOwotCQkJfQotCQkJaWYg
KG0gPT0gTlVMTCkgewotCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7Ci0JCQl9Ci0JCQlj
b250aW51ZTsKLQkJfQotCQlwcmV2ID0gbTsKLQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgewot
CQkJLyoKLQkJCSAqIE9uIHJlYWQgcXVldWUgc28gd2UgbXVzdCBpbmNyZW1lbnQgdGhlCi0JCQkg
KiBTQiBzdHVmZiwgd2UgYXNzdW1lIGNhbGxlciBoYXMgZG9uZSBhbnkgbG9ja3Mgb2YgU0IuCi0J
CQkgKi8KLQkJCXNjdHBfc2JhbGxvYyhzdGNiLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdiwg
bSk7Ci0JCX0KLQkJKmFkZGVkICs9IFNDVFBfQlVGX0xFTihtKTsKLQkJYXRvbWljX2FkZF9pbnQo
JmNvbnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJbSA9IFNDVFBfQlVGX05FWFQo
bSk7Ci0JfQotCWlmIChwcmV2KSB7Ci0JCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7Ci0JfQot
fQotCi1zdGF0aWMgdm9pZCAKLXNjdHBfYnVpbGRfcmVhZHFfZW50cnlfZnJvbV9jdGwoc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKm5jLCBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbCkKLXsKLQltZW1zZXQobmMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCkpOwotCW5jLT5zaW5mb19zdHJlYW0gPSBjb250cm9sLT5zaW5mb19zdHJlYW07Ci0JbmMtPm1p
ZCA9IGNvbnRyb2wtPm1pZDsKLQlUQUlMUV9JTklUKCZuYy0+cmVhc20pOwotCW5jLT50b3BfZnNu
ID0gY29udHJvbC0+dG9wX2ZzbjsKLQluYy0+bWlkID0gY29udHJvbC0+bWlkOwotCW5jLT5zaW5m
b19mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOwotCW5jLT5zaW5mb19wcGlkID0gY29udHJv
bC0+c2luZm9fcHBpZDsKLQluYy0+c2luZm9fY29udGV4dCA9IGNvbnRyb2wtPnNpbmZvX2NvbnRl
eHQ7Ci0JbmMtPmZzbl9pbmNsdWRlZCA9IDB4ZmZmZmZmZmY7Ci0JbmMtPnNpbmZvX3RzbiA9IGNv
bnRyb2wtPnNpbmZvX3RzbjsKLQluYy0+c2luZm9fY3VtdHNuID0gY29udHJvbC0+c2luZm9fY3Vt
dHNuOwotCW5jLT5zaW5mb19hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lkOwotCW5j
LT53aG9Gcm9tID0gY29udHJvbC0+d2hvRnJvbTsKLQlhdG9taWNfYWRkX2ludCgmbmMtPndob0Zy
b20tPnJlZl9jb3VudCwgMSk7Ci0JbmMtPnN0Y2IgPSBjb250cm9sLT5zdGNiOwotCW5jLT5wb3J0
X2Zyb20gPSBjb250cm9sLT5wb3J0X2Zyb207Ci19Ci0KLXN0YXRpYyB2b2lkIAotc2N0cF9yZXNl
dF9hX2NvbnRyb2woc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MzJfdCB0c24pCi17Ci0J
Y29udHJvbC0+ZnNuX2luY2x1ZGVkID0gdHNuOwotCWlmIChjb250cm9sLT5vbl9yZWFkX3EpIHsK
LQkJLyogCi0JCSAqIFdlIGhhdmUgdG8gcHVyZ2UgaXQgZnJvbSB0aGVyZSwKLQkJICogaG9wZWZ1
bGx5IHRoaXMgd2lsbCB3b3JrIDotKQotCQkgKi8KLQkJVEFJTFFfUkVNT1ZFKCZpbnAtPnJlYWRf
cXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQljb250cm9sLT5vbl9yZWFkX3EgPSAwOwotCX0KLX0K
LQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfb2xkX3Vub3JkZXJlZF9kYXRhKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1faW4gKnN0cm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgcGRfcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGlucF9yZWFkX2xvY2tfaGVsZCkKLXsKLQkvKiBTcGVjaWFsIGhhbmRsaW5nIGZvciB0
aGUgb2xkIHVuLW9yZGVyZWQgZGF0YSBjaHVuay4KLQkgKiBBbGwgdGhlIGNodW5rcy9UU04ncyBn
byB0byBtaWQgMC4gU28KLQkgKiB3ZSBoYXZlIHRvIGRvIHRoZSBvbGQgc3R5bGUgd2F0Y2hpbmcg
dG8gc2VlCi0JICogaWYgd2UgaGF2ZSBpdCBhbGwuIElmIHlvdSByZXR1cm4gb25lLCBubyBvdGhl
cgotCSAqIGNvbnRyb2wgZW50cmllcyBvbiB0aGUgdW4tb3JkZXJlZCBxdWV1ZSB3aWxsCi0JICog
YmUgbG9va2VkIGF0LiBJbiB0aGVvcnkgdGhlcmUgc2hvdWxkIGJlIG5vIG90aGVycwotCSAqIGVu
dHJpZXMgaW4gcmVhbGl0eSwgdW5sZXNzIHRoZSBndXkgaXMgc2VuZGluZyBib3RoCi0JICogdW5v
cmRlcmVkIE5EQVRBIGFuZCB1bm9yZGVyZWQgREFUQS4uLgotCSAqLwotCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoaywgKmxjaGssICp0Y2hrOwotCXVpbnQzMl90IGZzbjsKLQlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqbmM7Ci0JaW50IGNudF9hZGRlZDsKLQotCWlmIChjb250cm9sLT5m
aXJzdF9mcmFnX3NlZW4gPT0gMCkgewotCQkvKiBOb3RoaW5nIHdlIGNhbiBkbywgd2UgaGF2ZSBu
b3Qgc2VlbiB0aGUgZmlyc3QgcGllY2UgeWV0ICovCi0JCXJldHVybiAoMSk7Ci0JfQotCS8qIENv
bGxhcHNlIGFueSB3ZSBjYW4gKi8KLQljbnRfYWRkZWQgPSAwOwotcmVzdGFydDoKLQlmc24gPSBj
b250cm9sLT5mc25faW5jbHVkZWQgKyAxOwotCS8qIE5vdyB3aGF0IGNhbiB3ZSBhZGQ/ICovCi0J
VEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIGxjaGsp
IHsKLQkJaWYgKGNoay0+cmVjLmRhdGEuZnNuID09IGZzbikgewotCQkJLyogT2sgbGV0cyBhZGQg
aXQgKi8KLQkJCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNiLCBuYyk7Ci0JCQlpZiAobmMgPT0gTlVM
TCkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJbWVtc2V0KG5jLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfcXVldWVkX3RvX3JlYWQpKTsKLQkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNo
aywgc2N0cF9uZXh0KTsKLQkJCXNjdHBfYWRkX2Noa190b19jb250cm9sKGNvbnRyb2wsIHN0cm0s
IHN0Y2IsIGFzb2MsIGNoaywgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOwotCQkJZnNuKys7Ci0J
CQljbnRfYWRkZWQrKzsKLQkJCWNoayA9IE5VTEw7Ci0JCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVk
KSB7Ci0JCQkJLyogV2UgYXJlIGRvbmUgKi8KLQkJCQlpZiAoIVRBSUxRX0VNUFRZKCZjb250cm9s
LT5yZWFzbSkpIHsKLQkJCQkJLyogCi0JCQkJCSAqIE9rIHdlIGhhdmUgdG8gbW92ZSBhbnl0aGlu
ZyBsZWZ0IG9uCi0JCQkJCSAqIHRoZSBjb250cm9sIHF1ZXVlIHRvIGEgbmV3IGNvbnRyb2wuCi0J
CQkJCSAqLwotCQkJCQlzY3RwX2J1aWxkX3JlYWRxX2VudHJ5X2Zyb21fY3RsKG5jLCBjb250cm9s
KTsKLQkJCQkJdGNoayA9IFRBSUxRX0ZJUlNUKCZjb250cm9sLT5yZWFzbSk7Ci0JCQkJCWlmICh0
Y2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgewotCQkJCQkJ
VEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgdGNoaywgc2N0cF9uZXh0KTsKLQkJCQkJCWlm
IChhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID49IHRjaGstPnNlbmRfc2l6ZSkgewotCQkJCQkJ
CWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gdGNoay0+c2VuZF9zaXplOwotCQkJCQkJfSBl
bHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCQlwYW5pYygic2l6ZV9vbl9yZWFzbV9xdWV1
ZSA9ICV1IHNtYWxsZXIgdGhhbiBjaHVuayBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX3JlYXNt
X3F1ZXVlLCB0Y2hrLT5zZW5kX3NpemUpOwotI2Vsc2UKLQkJCQkJCWFzb2MtPnNpemVfb25fcmVh
c21fcXVldWUgPSAwOwotI2VuZGlmCi0JCQkJCQl9Ci0JCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFz
b2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7Ci0JCQkJCQluYy0+Zmlyc3RfZnJhZ19zZWVuID0gMTsK
LQkJCQkJCW5jLT5mc25faW5jbHVkZWQgPSB0Y2hrLT5yZWMuZGF0YS5mc247Ci0JCQkJCQluYy0+
ZGF0YSA9IHRjaGstPmRhdGE7Ci0JCQkJCQluYy0+c2luZm9fcHBpZCA9IHRjaGstPnJlYy5kYXRh
LnBwaWQ7Ci0JCQkJCQluYy0+c2luZm9fdHNuID0gdGNoay0+cmVjLmRhdGEudHNuOwotCQkJCQkJ
c2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgdGNoay0+cmVjLmRhdGEudHNuKTsKLQkJCQkJ
CXRjaGstPmRhdGEgPSBOVUxMOwotCQkJCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgdGNoaywg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJCXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKG5jKTsK
LQkJCQkJCXRjaGsgPSBUQUlMUV9GSVJTVCgmY29udHJvbC0+cmVhc20pOwotCQkJCQl9Ci0JCQkJ
CS8qIFNwaW4gdGhlIHJlc3Qgb250byB0aGUgcXVldWUgKi8KLQkJCQkJd2hpbGUgKHRjaGspIHsK
LQkJCQkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIHRjaGssIHNjdHBfbmV4dCk7Ci0J
CQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmbmMtPnJlYXNtLCB0Y2hrLCBzY3RwX25leHQpOwotCQkJ
CQkJdGNoayA9IFRBSUxRX0ZJUlNUKCZjb250cm9sLT5yZWFzbSk7Ci0JCQkJCX0KLQkJCQkJLyog
Tm93IGxldHMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhZnRlciByZW1vdmluZyBjb250cm9sICovCi0J
CQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdHJtLT51bm9faW5xdWV1ZSwgbmMsIG5leHRfaW5zdHJt
KTsKLQkJCQkJbmMtPm9uX3N0cm1fcSA9IFNDVFBfT05fVU5PUkRFUkVEOwotCQkJCQlpZiAoY29u
dHJvbC0+b25fc3RybV9xKSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVl
LCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwot
CQkJCQl9Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5wZGFwaV9zdGFydGVkKSB7Ci0JCQkJCXN0
cm0tPnBkX2FwaV9zdGFydGVkID0gMDsKLQkJCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDA7
Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKLQkJCQkJVEFJTFFfUkVNT1ZF
KCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCQljb250cm9s
LT5vbl9zdHJtX3EgPSAwOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfcmVh
c211c3Jtc2dzKTsKLQkJCQl9Ci0JCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0J
CQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCi0JCQkJ
CQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkJ
CQkJCSAgaW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX2ludm9rZV9yZWN2X2Nh
bGxiYWNrKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsIGlucF9yZWFkX2xvY2tfaGVsZCk7
Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJaWYgKChuYy0+Zmlyc3RfZnJh
Z19zZWVuKSAmJiAhVEFJTFFfRU1QVFkoJm5jLT5yZWFzbSkpIHsKLQkJCQkJLyogU3dpdGNoIHRv
IHRoZSBuZXcgZ3V5IGFuZCBjb250aW51ZSAqLwotCQkJCQljb250cm9sID0gbmM7Ci0JCQkJCWdv
dG8gcmVzdGFydDsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAobmMtPm9uX3N0cm1fcSA9PSAwKSB7
Ci0JCQkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBuYyk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJ
cmV0dXJuICgxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgbmMp
OwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogQ2FuJ3QgYWRkIG1vcmUgKi8KLQkJCWJyZWFrOwot
CQl9Ci0JfQotCWlmICgoY29udHJvbC0+bGVuZ3RoID4gcGRfcG9pbnQpICYmIChzdHJtLT5wZF9h
cGlfc3RhcnRlZCA9PSAwKSkgewotCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDE7Ci0JCWNvbnRy
b2wtPnBkYXBpX3N0YXJ0ZWQgPSAxOwotCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkgICAgICAgICAgICAgICAgICBpbnBfcmVh
ZF9sb2NrX2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCXNjdHBfd2FrZXVwX3RoZV9yZWFk
X3NvY2tldChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1
cm4gKDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot
c2N0cF9pbmplY3Rfb2xkX3Vub3JkZXJlZF9kYXRhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICph
Ym9ydF9mbGFnKQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmF0OwotCWludCBpbnNlcnRl
ZDsKLQkvKgotCSAqIEhlcmUgd2UgbmVlZCB0byBwbGFjZSB0aGUgY2h1bmsgaW50byB0aGUgY29u
dHJvbCBzdHJ1Y3R1cmUKLQkgKiBzb3J0ZWQgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCi0JICovCi0J
aWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKLQkJ
LyogSXRzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4gKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwK
LQkJCSJjaHVuayBpcyBhIGZpcnN0IGZzbjogJXUgYmVjb21lcyBmc25faW5jbHVkZWRcbiIsCi0J
CQljaGstPnJlYy5kYXRhLmZzbik7Ci0JCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsK
LQkJCS8qCi0JCQkgKiBJbiBvbGQgdW4tb3JkZXJlZCB3ZSBjYW4gcmVhc3NlbWJseSBvbgotCQkJ
ICogb25lIGNvbnRyb2wgbXVsdGlwbGUgbWVzc2FnZXMuIEFzIGxvbmcKLQkJCSAqIGFzIHRoZSBu
ZXh0IEZJUlNUIGlzIGdyZWF0ZXIgdGhlbiB0aGUgb2xkCi0JCQkgKiBmaXJzdCAoVFNOIGkuZS4g
RlNOIHdpc2UpCi0JCQkgKi8KLQkJCXN0cnVjdCBtYnVmICp0ZGF0YTsKLQkJCXVpbnQzMl90IHRt
cDsKLQotCQkJaWYgKFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNuLCBjb250cm9sLT5mc25f
aW5jbHVkZWQpKSB7Ci0JCQkJLyogRWFzeSB3YXkgdGhlIHN0YXJ0IG9mIGEgbmV3IGd1eSBiZXlv
bmQgdGhlIGxvd2VzdCAqLwotCQkJCWdvdG8gcGxhY2VfY2h1bms7Ci0JCQl9Ci0JCQlpZiAoKGNo
ay0+cmVjLmRhdGEuZnNuID09IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCkgfHwKLQkJCSAgICAoY29u
dHJvbC0+cGRhcGlfc3RhcnRlZCkpIHsKLQkJCQkvKiAKLQkJCQkgKiBPayB0aGlzIHNob3VsZCBu
b3QgaGFwcGVuLCBpZiBpdCBkb2VzCi0JCQkJICogd2Ugc3RhcnRlZCB0aGUgcGQtYXBpIG9uIHRo
ZSBoaWdoZXIgVFNOIChzaW5jZQotCQkJCSAqIHRoZSBlcXVhbHMgcGFydCBpcyBhIFRTTiBmYWls
dXJlIGl0IG11c3QgYmUgdGhhdCkuCi0JCQkJICoKLQkJCQkgKiBXZSBhcmUgY29tcGxldGx5IGhv
c2VkIGluIHRoYXQgY2FzZSBzaW5jZSBJIGhhdmUKLQkJCQkgKiBubyB3YXkgdG8gcmVjb3Zlci4g
VGhpcyByZWFsbHkgd2lsbCBvbmx5IGhhcHBlbgotCQkJCSAqIGlmIHdlIGNhbiBnZXQgbW9yZSBU
U04ncyBoaWdoZXIgYmVmb3JlIHRoZSBwZC1hcGktcG9pbnQuCi0JCQkJICovCi0JCQkJc2N0cF9h
Ym9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCi0JCQkJCQkgICAgYWJvcnRfZmxhZywK
LQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ180KTsKLQotCQkJCXJl
dHVybjsKLQkJCX0KLQkJCS8qCi0JCQkgKiBPayB3ZSBoYXZlIHR3byBmaXJzdHMgYW5kIHRoZSBv
bmUgd2UganVzdCBnb3QKLQkJCSAqIGlzIHNtYWxsZXIgdGhhbiB0aGUgb25lIHdlIHByZXZpb3Vz
bHkgcGxhY2VkLi4geXVjayEKLQkJCSAqIFdlIG11c3Qgc3dhcCB0aGVtIG91dC4KLQkJCSAqLwot
CQkJLyogc3dhcCB0aGUgbWJ1ZnMgKi8KLQkJCXRkYXRhID0gY29udHJvbC0+ZGF0YTsKLQkJCWNv
bnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7Ci0JCQljaGstPmRhdGEgPSB0ZGF0YTsKLQkJCS8qIFNh
dmUgdGhlIGxlbmd0aHMgKi8KLQkJCWNoay0+c2VuZF9zaXplID0gY29udHJvbC0+bGVuZ3RoOwot
CQkJLyogUmVjb21wdXRlIGxlbmd0aCBvZiBjb250cm9sIGFuZCB0YWlsIHBvaW50ZXIgKi8KLQkJ
CXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKGNvbnRyb2wpOwotCQkJLyogRml4IHRoZSBGU04gaW5j
bHVkZWQgKi8KLQkJCXRtcCA9IGNvbnRyb2wtPmZzbl9pbmNsdWRlZDsKLQkJCWNvbnRyb2wtPmZz
bl9pbmNsdWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQkJY2hrLT5yZWMuZGF0YS5mc24gPSB0
bXA7Ci0JCQkvKiBGaXggdGhlIFRTTiBpbmNsdWRlZCAqLwotCQkJdG1wID0gY29udHJvbC0+c2lu
Zm9fdHNuOwotCQkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0YS50c247Ci0JCQlj
aGstPnJlYy5kYXRhLnRzbiA9IHRtcDsKLQkJCS8qIEZpeCB0aGUgUFBJRCBpbmNsdWRlZCAqLwot
CQkJdG1wID0gY29udHJvbC0+c2luZm9fcHBpZDsKLQkJCWNvbnRyb2wtPnNpbmZvX3BwaWQgPSBj
aGstPnJlYy5kYXRhLnBwaWQ7Ci0JCQljaGstPnJlYy5kYXRhLnBwaWQgPSB0bXA7Ci0JCQkvKiBG
aXggdGFpbCBwb2ludGVyICovCi0JCQlnb3RvIHBsYWNlX2NodW5rOwotCQl9Ci0JCWNvbnRyb2wt
PmZpcnN0X2ZyYWdfc2VlbiA9IDE7Ci0JCWNvbnRyb2wtPmZzbl9pbmNsdWRlZCA9IGNoay0+cmVj
LmRhdGEuZnNuOwotCQljb250cm9sLT50b3BfZnNuID0gY2hrLT5yZWMuZGF0YS5mc247Ci0JCWNv
bnRyb2wtPnNpbmZvX3RzbiA9IGNoay0+cmVjLmRhdGEudHNuOwotCQljb250cm9sLT5zaW5mb19w
cGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOwotCQljb250cm9sLT5kYXRhID0gY2hrLT5kYXRhOwot
CQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjaGstPnJlYy5kYXRhLnRzbik7Ci0JCWNo
ay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJvbCk7Ci0JCXJldHVy
bjsKLQl9Ci1wbGFjZV9jaHVuazoKLQlpbnNlcnRlZCA9IDA7Ci0JVEFJTFFfRk9SRUFDSChhdCwg
JmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBfVFNOX0dUKGF0LT5yZWMu
ZGF0YS5mc24sIGNoay0+cmVjLmRhdGEuZnNuKSkgewotCQkJLyoKLQkJCSAqIFRoaXMgb25lIGlu
IHF1ZXVlIGlzIGJpZ2dlciB0aGFuIHRoZSBuZXcgb25lLCBpbnNlcnQKLQkJCSAqIHRoZSBuZXcg
b25lIGJlZm9yZSBhdC4KLQkJCSAqLwotCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArPSBj
aGstPnNlbmRfc2l6ZTsKLQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1
ZXVlKTsKLQkJCWluc2VydGVkID0gMTsKLQkJCVRBSUxRX0lOU0VSVF9CRUZPUkUoYXQsIGNoaywg
c2N0cF9uZXh0KTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGF0LT5yZWMuZGF0YS5mc24gPT0g
Y2hrLT5yZWMuZGF0YS5mc24pIHsKLQkJCS8qIAotCQkJICogVGhleSBzZW50IGEgZHVwbGljYXRl
IGZzbiBudW1iZXIuIFRoaXMKLQkJCSAqIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbiBzaW5jZSB0
aGUgRlNOIGlzCi0JCQkgKiBhIFRTTiBhbmQgaXQgc2hvdWxkIGhhdmUgYmVlbiBkcm9wcGVkIGVh
cmxpZXIuCi0JCQkgKi8KLQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hr
LAotCQkJICAgICAgICAgICAgICAgICAgICBhYm9ydF9mbGFnLAotCQkJICAgICAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ181KTsKLQkJCXJldHVybjsKLQkJ
fQotCi0JfQotCWlmIChpbnNlcnRlZCA9PSAwKSB7Ci0JCS8qIEl0cyBhdCB0aGUgZW5kICovCi0J
CWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgKz0gY2hrLT5zZW5kX3NpemU7Ci0JCXNjdHBfdWNv
dW50X2luY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKLQkJY29udHJvbC0+dG9wX2ZzbiA9
IGNoay0+cmVjLmRhdGEuZnNuOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmY29udHJvbC0+cmVhc20s
IGNoaywgc2N0cF9uZXh0KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfZGVsaXZlcl9yZWFz
bV9jaGVjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3Ry
bSwgaW50IGlucF9yZWFkX2xvY2tfaGVsZCkKLXsKLQkvKgotCSAqIEdpdmVuIGEgc3RyZWFtLCBz
dHJtLCBzZWUgaWYgYW55IG9mCi0JICogdGhlIFNTTidzIG9uIGl0IHRoYXQgYXJlIGZyYWdtZW50
ZWQKLQkgKiBhcmUgcmVhZHkgdG8gZGVsaXZlci4gSWYgc28gZ28gYWhlYWQKLQkgKiBhbmQgcGxh
Y2UgdGhlbSBvbiB0aGUgcmVhZCBxdWV1ZS4gSW4KLQkgKiBzbyBwbGFjaW5nIGlmIHdlIGhhdmUg
aGl0IHRoZSBlbmQsIHRoZW4KLQkgKiB3ZSBuZWVkIHRvIHJlbW92ZSB0aGVtIGZyb20gdGhlIHN0
cmVhbSdzIHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
LCAqbmN0bCA9IE5VTEw7Ci0JdWludDMyX3QgbmV4dF90b19kZWw7Ci0JdWludDMyX3QgcGRfcG9p
bnQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLQkJcGRfcG9p
bnQgPSBtaW4oU0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2NrZXQpID4+IFNDVFBfUEFS
VElBTF9ERUxJVkVSWV9TSElGVCwKLQkJCSAgICAgICBzdGNiLT5zY3RwX2VwLT5wYXJ0aWFsX2Rl
bGl2ZXJ5X3BvaW50KTsKLQl9IGVsc2UgewotCQlwZF9wb2ludCA9IHN0Y2ItPnNjdHBfZXAtPnBh
cnRpYWxfZGVsaXZlcnlfcG9pbnQ7Ci0JfQotCWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgmc3RybS0+
dW5vX2lucXVldWUpOwotCi0JaWYgKChjb250cm9sICE9IE5VTEwpICYmCi0JICAgIChhc29jLT5p
ZGF0YV9zdXBwb3J0ZWQgPT0gMCkpIHsKLQkJLyogU3BlY2lhbCBoYW5kbGluZyBuZWVkZWQgZm9y
ICJvbGQiIGRhdGEgZm9ybWF0ICovCi0JCWlmIChzY3RwX2hhbmRsZV9vbGRfdW5vcmRlcmVkX2Rh
dGEoc3RjYiwgYXNvYywgc3RybSwgY29udHJvbCwgcGRfcG9pbnQsIGlucF9yZWFkX2xvY2tfaGVs
ZCkpIHsKLQkJCWdvdG8gZG9uZV91bjsKLQkJfQotCX0KLQlpZiAoc3RybS0+cGRfYXBpX3N0YXJ0
ZWQpIHsKLQkJLyogQ2FuJ3QgYWRkIG1vcmUgKi8KLQkJcmV0dXJuICgwKTsKLQl9Ci0Jd2hpbGUg
KGNvbnRyb2wpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkxvb2tpbmcgYXQgY29udHJv
bDogJXAgZSglZCkgc3NuOiAldSB0b3BfZnNuOiAldSBpbmNfZnNuOiAldSAtdW9cbiIsCi0JCQlj
b250cm9sLCBjb250cm9sLT5lbmRfYWRkZWQsIGNvbnRyb2wtPm1pZCwgY29udHJvbC0+dG9wX2Zz
biwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKLQkJbmN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwg
bmV4dF9pbnN0cm0pOwotCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQkvKiBXZSBqdXN0
IHB1dCB0aGUgbGFzdCBiaXQgb24gKi8KLQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKLSNp
ZmRlZiBJTlZBUklBTlRTCi0JCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX1VO
T1JERVJFRCApIHsKLQkJCQkJcGFuaWMoIkh1aCBjb250cm9sOiAlcCBvbl9xOiAlZCAtLSBub3Qg
dW5vcmRlcmVkPyIsCi0JCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0J
CQkJfQotI2VuZGlmCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX3JlYXNtdXNy
bXNncyk7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4
dF9pbnN0cm0pOwotCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7Ci0JCQl9Ci0JCQlpZiAoY29u
dHJvbC0+b25fcmVhZF9xID09IDApIHsKLQkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3Rw
X2VwLCBzdGNiLAotCQkJCQkJICBjb250cm9sLAotCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkJCQkJICBpbnBfcmVhZF9sb2NrX2hlbGQs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBDYW4gd2UgZG8g
YSBQRC1BUEkgZm9yIHRoaXMgdW4tb3JkZXJlZCBndXk/ICovCi0JCQlpZiAoKGNvbnRyb2wtPmxl
bmd0aCA+PSBwZF9wb2ludCkgJiYgKHN0cm0tPnBkX2FwaV9zdGFydGVkID09IDApKSB7Ci0JCQkJ
c3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAxOwotCQkJCWNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQgPSAx
OwotCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkgIGNv
bnRyb2wsCi0JCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRf
YWRkZWQsCi0JCQkJCQkgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
LQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNvbnRyb2wgPSBuY3RsOwotCX0KLWRvbmVfdW46
Ci0JY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZzdHJtLT5pbnF1ZXVlKTsKLQlpZiAoc3RybS0+cGRf
YXBpX3N0YXJ0ZWQpIHsKLQkJLyogQ2FuJ3QgYWRkIG1vcmUgKi8KLQkJcmV0dXJuICgwKTsKLQl9
Ci0JaWYgKGNvbnRyb2wgPT0gTlVMTCkgewotCQlyZXR1cm4gKHJldCk7Ci0JfQotCWlmIChTQ1RQ
X01JRF9FUShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCwg
Y29udHJvbC0+bWlkKSkgewotCQkvKiBPayB0aGUgZ3V5IGF0IHRoZSB0b3Agd2FzIGJlaW5nIHBh
cnRpYWxseSBkZWxpdmVyZWQKLQkJICogY29tcGxldGVkLCBzbyB3ZSByZW1vdmUgaXQuIE5vdGUK
LQkJICogdGhlIHBkX2FwaSBmbGFnIHdhcyB0YWtlbiBvZmYgd2hlbiB0aGUKLQkJICogY2h1bmsg
d2FzIG1lcmdlZCBvbiBpbiBzY3RwX3F1ZXVlX2RhdGFfZm9yX3JlYXNtIGJlbG93LgotCQkgKi8K
LQkJbmN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQlTQ1RQREJHKFND
VFBfREVCVUdfWFhYLAotCQkJIkxvb2tpbmcgYXQgY29udHJvbDogJXAgZSglZCkgc3NuOiAldSB0
b3BfZnNuOiAldSBpbmNfZnNuOiAldSAobGFzdGRlbDogJXUpLSBvXG4iLAotCQkJY29udHJvbCwg
Y29udHJvbC0+ZW5kX2FkZGVkLCBjb250cm9sLT5taWQsCi0JCQljb250cm9sLT50b3BfZnNuLCBj
b250cm9sLT5mc25faW5jbHVkZWQsCi0JCQlzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQpOwotCQlp
ZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7Ci0j
aWZkZWYgSU5WQVJJQU5UUwotCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EgIT0gU0NUUF9PTl9P
UkRFUkVEICkgewotCQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCBv
cmRlcmVkPyIsCi0JCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0JCQkJ
fQotI2VuZGlmCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX3JlYXNtdXNybXNn
cyk7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3Ry
bSk7Ci0JCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3Ro
KSB7Ci0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOwot
CQkJCX0gZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxf
c3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVf
b25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxzZQotCQkJCQlhc29jLT5zaXpl
X29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCX0KLQkJCQlzY3RwX3Vjb3VudF9kZWNy
KGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsK
LQkJCX0KLQkJCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCAmJiBjb250cm9sLT5wZGFwaV9zdGFy
dGVkKSB7Ci0JCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDA7Ci0JCQkJc3RybS0+cGRfYXBp
X3N0YXJ0ZWQgPSAwOwotCQkJfQotCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0J
CQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCSAgY29udHJv
bCwKLQkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRl
ZCwKLQkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJ
fQotCQkJY29udHJvbCA9IG5jdGw7Ci0JCX0KLQl9Ci0JaWYgKHN0cm0tPnBkX2FwaV9zdGFydGVk
KSB7Ci0JCS8qIENhbid0IGFkZCBtb3JlIG11c3QgaGF2ZSBnb3R0ZW4gYW4gdW4tb3JkZXJlZCBh
Ym92ZSBiZWluZyBwYXJ0aWFsbHkgZGVsaXZlcmVkLiAqLwotCQlyZXR1cm4gKDApOwotCX0KLWRl
bGl2ZXJfbW9yZToKLQluZXh0X3RvX2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7
Ci0JaWYgKGNvbnRyb2wpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKLQkJCSJMb29raW5n
IGF0IGNvbnRyb2w6ICVwIGUoJWQpIHNzbjogJXUgdG9wX2ZzbjogJXUgaW5jX2ZzbjogJXUgKG54
dGRlbDogJXUpLSBvXG4iLAotCQkJY29udHJvbCwgY29udHJvbC0+ZW5kX2FkZGVkLCBjb250cm9s
LT5taWQsIGNvbnRyb2wtPnRvcF9mc24sIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwKLQkJCW5leHRf
dG9fZGVsKTsKLQkJbmN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQlp
ZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG5leHRf
dG9fZGVsKSAmJgotCQkgICAgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikpIHsKLQkJCWludCBk
b25lOwotCi0JCQkvKiBPayB3ZSBjYW4gZGVsaXZlciBpdCBvbnRvIHRoZSBzdHJlYW0uICovCi0J
CQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQkJLyogV2UgYXJlIGRvbmUgd2l0aCBpdCBh
ZnRlcndhcmRzICovCi0JCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgewotI2lmZGVmIElOVkFS
SUFOVFMKLQkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX09SREVSRUQgKSB7
Ci0JCQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCBvcmRlcmVkPyIs
Ci0JCQkJCQkgICAgICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOwotCQkJCQl9Ci0jZW5k
aWYKLQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX3JlYXNtdXNybXNncyk7Ci0J
CQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwot
CQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsK
LQkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOwotCQkJ
CQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJCXBhbmljKCJzaXplX29uX2FsbF9z
dHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9v
bl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0JCQkJCQlhc29jLT5zaXpl
X29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJCXNjdHBfdWNvdW50X2Rl
Y3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQkJCQkJY29udHJvbC0+b25fc3RybV9xID0g
MDsKLQkJCQl9Ci0JCQkJcmV0Kys7Ci0JCQl9Ci0JCQlpZiAoKChjb250cm9sLT5zaW5mb19mbGFn
cyA+PiA4KSAmIFNDVFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9EQVRBX05PVF9GUkFHKSB7Ci0J
CQkJLyogQSBzaW5nbGV0b24gbm93IHNsaXBwaW5nIHRocm91Z2ggLSBtYXJrIGl0IG5vbi1yZXZv
a2FibGUgdG9vICovCi0JCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+
c2luZm9fdHNuKTsKLQkJCX0gZWxzZSBpZiAoY29udHJvbC0+ZW5kX2FkZGVkID09IDApIHsKLQkJ
CQkvKiBDaGVjayBpZiB3ZSBjYW4gZGVmZXIgYWRkaW5nIHVudGlsIGl0cyBhbGwgdGhlcmUgKi8K
LQkJCQlpZiAoKGNvbnRyb2wtPmxlbmd0aCA8IHBkX3BvaW50KSB8fCAoc3RybS0+cGRfYXBpX3N0
YXJ0ZWQpKSB7Ci0JCQkJCS8qIERvbid0IG5lZWQgaXQgb3IgY2Fubm90IGFkZCBtb3JlIChvbmUg
YmVpbmcgZGVsaXZlcmVkIHRoYXQgd2F5KSAqLwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9
Ci0JCQlkb25lID0gKGNvbnRyb2wtPmVuZF9hZGRlZCkgJiYgKGNvbnRyb2wtPmxhc3RfZnJhZ19z
ZWVuKTsKLQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgewotCQkJCXNjdHBfYWRkX3Rv
X3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkgIGNvbnRyb2wsCi0JCQkJCQkgICZz
dGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRfYWRkZWQsCi0JCQkJCQkgIGlu
cF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0KLQkJCXN0cm0tPmxh
c3RfbWlkX2RlbGl2ZXJlZCA9IG5leHRfdG9fZGVsOwotCQkJaWYgKGRvbmUpIHsKLQkJCQljb250
cm9sID0gbmN0bDsKLQkJCQlnb3RvIGRlbGl2ZXJfbW9yZTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyog
V2UgYXJlIG5vdyBkb2luZyBQRCBBUEkgKi8KLQkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDE7
Ci0JCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDE7Ci0JCQl9Ci0JCX0KLQl9Ci1vdXQ6Ci0J
cmV0dXJuIChyZXQpOwotfQotCi0KLXVpbnQzMl90Ci1zY3RwX2FkZF9jaGtfdG9fY29udHJvbChz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLQkJCXN0cnVjdCBzY3RwX3N0cmVh
bV9pbiAqc3RybSwKLQkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCi0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssIGludCBob2xkX3Js
b2NrKQotewotCS8qCi0JICogR2l2ZW4gYSBjb250cm9sIGFuZCBhIGNodW5rLCBtZXJnZSB0aGUK
LQkgKiBkYXRhIGZyb20gdGhlIGNoayBvbnRvIHRoZSBjb250cm9sIGFuZCBmcmVlCi0JICogdXAg
dGhlIGNodW5rIHJlc291cmNlcy4KLQkgKi8KLQl1aW50MzJfdCBhZGRlZD0wOwotCWludCBpX2xv
Y2tlZCA9IDA7Ci0KLQlpZiAoY29udHJvbC0+b25fcmVhZF9xICYmIChob2xkX3Jsb2NrID09IDAp
KSB7Ci0JCS8qCi0JCSAqIEl0cyBiZWluZyBwZC1hcGknZCBzbyB3ZSBtdXN0Ci0JCSAqIGRvIHNv
bWUgbG9ja3MuCi0JCSAqLwotCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7Ci0J
CWlfbG9ja2VkID0gMTsKLQl9Ci0JaWYgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkgewotCQljb250
cm9sLT5kYXRhID0gY2hrLT5kYXRhOwotCQlzY3RwX3NldHVwX3RhaWxfcG9pbnRlcihjb250cm9s
KTsKLQl9IGVsc2UgewotCQlzY3RwX2FkZF90b190YWlsX3BvaW50ZXIoY29udHJvbCwgY2hrLT5k
YXRhLCAmYWRkZWQpOwotCX0KLQljb250cm9sLT5mc25faW5jbHVkZWQgPSBjaGstPnJlYy5kYXRh
LmZzbjsKLQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlIC09IGNoay0+c2VuZF9zaXplOwotCXNj
dHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKLQlzY3RwX21hcmtfbm9u
X3Jldm9rYWJsZShhc29jLCBjaGstPnJlYy5kYXRhLnRzbik7Ci0JY2hrLT5kYXRhID0gTlVMTDsK
LQlpZiAoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgewot
CQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOwotCQljb250cm9sLT5zaW5mb190c24gPSBj
aGstPnJlYy5kYXRhLnRzbjsKLQkJY29udHJvbC0+c2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEu
cHBpZDsKLQl9Ci0JaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1Rf
RlJBRykgewotCQkvKiBJdHMgY29tcGxldGUgKi8KLQkJaWYgKChjb250cm9sLT5vbl9zdHJtX3Ep
ICYmIChjb250cm9sLT5vbl9yZWFkX3EpKSB7Ci0JCQlpZiAoY29udHJvbC0+cGRhcGlfc3RhcnRl
ZCkgewotCQkJCWNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQgPSAwOwotCQkJCXN0cm0tPnBkX2FwaV9z
dGFydGVkID0gMDsKLQkJCX0KLQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9V
Tk9SREVSRUQpIHsKLQkJCQkvKiBVbm9yZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0t
PnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJY29udHJvbC0+b25fc3Ry
bV9xID0gMDsKLQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fT1JE
RVJFRCkgewotCQkJCS8qIE9yZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlucXVl
dWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3Ry
ZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyAtPSBjb250cm9sLT5sZW5ndGg7Ci0JCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0J
CQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wg
bGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsK
LSNlbHNlCi0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOwotI2VuZGlmCi0JCQkJ
fQotCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQkJCQlj
b250cm9sLT5vbl9zdHJtX3EgPSAwOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCX0gZWxzZSBpZiAo
Y29udHJvbC0+b25fc3RybV9xKSB7Ci0JCQkJcGFuaWMoIlVua25vd24gc3RhdGUgb24gY3RybDog
JXAgb25fc3RybV9xOiAlZCIsIGNvbnRyb2wsCi0JCQkJICAgICAgY29udHJvbC0+b25fc3RybV9x
KTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7Ci0JCWNvbnRy
b2wtPmxhc3RfZnJhZ19zZWVuID0gMTsKLQl9Ci0JaWYgKGlfbG9ja2VkKSB7Ci0JCVNDVFBfSU5Q
X1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwotCX0KLQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JcmV0dXJuIChhZGRlZCk7Ci19Ci0KLS8qCi0g
KiBEdW1wIG9udG8gdGhlIHJlLWFzc2VtYmx5IHF1ZXVlLCBpbiBpdHMgcHJvcGVyIHBsYWNlLiBB
ZnRlciBkdW1waW5nIG9uIHRoZQotICogcXVldWUsIHNlZSBpZiBhbnRoaW5nIGNhbiBiZSBkZWxp
dmVyZWQuIElmIHNvIHB1bGwgaXQgb2ZmIChvciBhcyBtdWNoIGFzCi0gKiB3ZSBjYW4uIElmIHdl
IHJ1biBvdXQgb2Ygc3BhY2UgdGhlbiB3ZSBtdXN0IGR1bXAgd2hhdCB3ZSBjYW4gYW5kIHNldCB0
aGUKLSAqIGFwcHJvcHJpYXRlIGZsYWcgdG8gc2F5IHdlIHF1ZXVlZCB3aGF0IHdlIGNvdWxkLgot
ICovCi1zdGF0aWMgdm9pZAotc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFzbShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICBzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLQkJCSAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrLAotCQkJICBpbnQgY3JlYXRlZF9jb250cm9sLAotCQkJICBpbnQgKmFib3J0X2ZsYWcsIHVp
bnQzMl90IHRzbikKLXsKLQl1aW50MzJfdCBuZXh0X2ZzbjsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICphdCwgKm5hdDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm07Ci0JaW50IGRvX3dh
a2V1cCwgdW5vcmRlcmVkOwotCXVpbnQzMl90IGxlbmFkZGVkOwotCi0Jc3RybSA9ICZhc29jLT5z
dHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXTsKLQkvKgotCSAqIEZvciBvbGQgdW4tb3JkZXJl
ZCBkYXRhIGNodW5rcy4KLQkgKi8KLQlpZiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYg
U0NUUF9EQVRBX1VOT1JERVJFRCkgewotCQl1bm9yZGVyZWQgPSAxOwotCX0gZWxzZSB7Ci0JCXVu
b3JkZXJlZCA9IDA7Ci0JfQotCS8qIE11c3QgYmUgYWRkZWQgdG8gdGhlIHN0cmVhbS1pbiBxdWV1
ZSAqLwotCWlmIChjcmVhdGVkX2NvbnRyb2wpIHsKLQkJaWYgKHVub3JkZXJlZCA9PSAwKSB7Ci0J
CQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCX0KLQkJaWYg
KHNjdHBfcGxhY2VfY29udHJvbF9pbl9zdHJlYW0oc3RybSwgYXNvYywgY29udHJvbCkpIHsKLQkJ
CS8qIER1cGxpY2F0ZSBTU04/ICovCi0JCQlzY3RwX2NsZWFuX3VwX2NvbnRyb2woc3RjYiwgY29u
dHJvbCk7Ci0JCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJCQkJ
ICAgIGFib3J0X2ZsYWcsCi0JCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xP
Q182KTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90
c24gKyAxKSAmJiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDApKSkgewotCQkJLyogT2sgd2Ug
Y3JlYXRlZCB0aGlzIGNvbnRyb2wgYW5kIG5vdwotCQkJICogbGV0cyB2YWxpZGF0ZSB0aGF0IGl0
cyBsZWdhbCBpLmUuIHRoZXJlCi0JCQkgKiBpcyBhIEIgYml0IHNldCwgaWYgbm90IGFuZCB3ZSBo
YXZlCi0JCQkgKiB1cCB0byB0aGUgY3VtLWFjayB0aGVuIGl0cyBpbnZhbGlkLgotCQkJICovCi0J
CQlpZiAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpID09
IDApIHsKLQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJCQkg
ICAgICAgICAgICAgICAgICAgIGFib3J0X2ZsYWcsCi0JCQkJICAgICAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ183KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0J
CX0KLQl9Ci0JaWYgKChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgJiYgKHVub3JkZXJlZCA9
PSAxKSkgewotCQlzY3RwX2luamVjdF9vbGRfdW5vcmRlcmVkX2RhdGEoc3RjYiwgYXNvYywgY29u
dHJvbCwgY2hrLCBhYm9ydF9mbGFnKTsKLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIE9rIHdlIG11
c3QgcXVldWUgdGhlIGNodW5rIGludG8gdGhlIHJlYXNlbWJseSBwb3J0aW9uOgotCSAqICBvIGlm
IGl0cyB0aGUgZmlyc3QgaXQgZ29lcyB0byB0aGUgY29udHJvbCBtYnVmLgotCSAqICBvIGlmIGl0
cyBub3QgZmlyc3QgYnV0IHRoZSBuZXh0IGluIHNlcXVlbmNlIGl0IGdvZXMgdG8gdGhlIGNvbnRy
b2wsCi0JICogICAgYW5kIGVhY2ggc3VjY2VlZGluZyBvbmUgaW4gb3JkZXIgYWxzbyBnb2VzLgot
CSAqICBvIGlmIGl0cyBub3QgaW4gb3JkZXIgd2UgcGxhY2UgaXQgb24gdGhlIGxpc3QgaW4gaXRz
IHBsYWNlLgotCSAqLwotCWlmIChjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9G
SVJTVF9GUkFHKSB7Ci0JCS8qIEl0cyB0aGUgdmVyeSBmaXJzdCBvbmUuICovCi0JCVNDVFBEQkco
U0NUUF9ERUJVR19YWFgsCi0JCQkiY2h1bmsgaXMgYSBmaXJzdCBmc246ICV1IGJlY29tZXMgZnNu
X2luY2x1ZGVkXG4iLAotCQkJY2hrLT5yZWMuZGF0YS5mc24pOwotCQlpZiAoY29udHJvbC0+Zmly
c3RfZnJhZ19zZWVuKSB7Ci0JCQkvKgotCQkJICogRXJyb3Igb24gc2VuZGVycyBwYXJ0LCB0aGV5
IGVpdGhlcgotCQkJICogc2VudCB1cyB0d28gZGF0YSBjaHVua3Mgd2l0aCBGSVJTVCwKLQkJCSAq
IG9yIHRoZXkgc2VudCB0d28gdW4tb3JkZXJlZCBjaHVua3MgdGhhdAotCQkJICogd2VyZSBmcmFn
bWVudGVkIGF0IHRoZSBzYW1lIHRpbWUgaW4gdGhlIHNhbWUgc3RyZWFtLgotCQkJICovCi0JCQlz
Y3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJCSAgICAgICAgICAgICAg
ICAgICAgYWJvcnRfZmxhZywKLQkJCSAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICsgU0NUUF9MT0NfOCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY29udHJvbC0+Zmlyc3Rf
ZnJhZ19zZWVuID0gMTsKLQkJY29udHJvbC0+c2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBp
ZDsKLQkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0YS50c247Ci0JCWNvbnRyb2wt
PmZzbl9pbmNsdWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQljb250cm9sLT5kYXRhID0gY2hr
LT5kYXRhOwotCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjaGstPnJlYy5kYXRhLnRz
bik7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJvbCk7
Ci0JCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gY29udHJvbC0+bGVuZ3RoOwotCX0gZWxz
ZSB7Ci0JCS8qIFBsYWNlIHRoZSBjaHVuayBpbiBvdXIgbGlzdCAqLwotCQlpbnQgaW5zZXJ0ZWQ9
MDsKLQkJaWYgKGNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID09IDApIHsKLQkJCS8qIFN0aWxsIHdp
bGxpbmcgdG8gcmFpc2UgaGlnaGVzdCBGU04gc2VlbiAqLwotCQkJaWYgKFNDVFBfVFNOX0dUKGNo
ay0+cmVjLmRhdGEuZnNuLCBjb250cm9sLT50b3BfZnNuKSkgewotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19YWFgsCi0JCQkJCSJXZSBoYXZlIGEgbmV3IHRvcF9mc246ICV1XG4iLAotCQkJCQljaGst
PnJlYy5kYXRhLmZzbik7Ci0JCQkJY29udHJvbC0+dG9wX2ZzbiA9IGNoay0+cmVjLmRhdGEuZnNu
OwotCQkJfQotCQkJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1Rf
RlJBRykgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJCSJUaGUgbGFzdCBmc24g
aXMgbm93IGluIHBsYWNlIGZzbjogJXVcbiIsCi0JCQkJCWNoay0+cmVjLmRhdGEuZnNuKTsKLQkJ
CQljb250cm9sLT5sYXN0X2ZyYWdfc2VlbiA9IDE7Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+aWRhdGFf
c3VwcG9ydGVkIHx8IGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgewotCQkJCS8qIAotCQkJCSAq
IEZvciBJREFUQSB3ZSBhbHdheXMgY2hlY2sgc2luY2Ugd2Uga25vdyB0aGF0Ci0JCQkJICogdGhl
IGZpcnN0IGZyYWdtZW50IGlzIDAuIEZvciBvbGQgREFUQSB3ZSBoYXZlCi0JCQkJICogdG8gcmVj
ZWl2ZSB0aGUgZmlyc3QgYmVmb3JlIHdlIGtub3cgdGhlIGZpcnN0IEZTTgotCQkJCSAqICh3aGlj
aCBpcyB0aGUgVFNOKS4KLQkJCQkgKi8KLQkJCQlpZiAoU0NUUF9UU05fR0UoY29udHJvbC0+ZnNu
X2luY2x1ZGVkLCBjaGstPnJlYy5kYXRhLmZzbikpIHsKLQkJCQkJLyogV2UgaGF2ZSBhbHJlYWR5
IGRlbGl2ZXJlZCB1cCB0byB0aGlzIHNvIGl0cyBhIGR1cCAqLwotCQkJCQlzY3RwX2Fib3J0X2lu
X3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJCQkJCQkgICAgYWJvcnRfZmxhZywKLQkJCQkJ
CQkgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfOSk7Ci0JCQkJCXJldHVybjsK
LQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3Mg
JiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7Ci0JCQkJLyogU2Vjb25kIGxhc3Q/IGh1aD8gKi8KLQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJCQkiRHVwbGljYXRlIGxhc3QgZnNuOiAldSAo
dG9wOiAldSkgLS0gYWJvcnRcbiIsCi0JCQkJCWNoay0+cmVjLmRhdGEuZnNuLCBjb250cm9sLT50
b3BfZnNuKTsKLQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsCi0JCQkJCQkg
ICAgY2hrLCBhYm9ydF9mbGFnLAotCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFND
VFBfTE9DXzEwKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9y
dGVkIHx8IGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgewotCQkJCS8qIAotCQkJCSAqIEZvciBJ
REFUQSB3ZSBhbHdheXMgY2hlY2sgc2luY2Ugd2Uga25vdyB0aGF0Ci0JCQkJICogdGhlIGZpcnN0
IGZyYWdtZW50IGlzIDAuIEZvciBvbGQgREFUQSB3ZSBoYXZlCi0JCQkJICogdG8gcmVjZWl2ZSB0
aGUgZmlyc3QgYmVmb3JlIHdlIGtub3cgdGhlIGZpcnN0IEZTTgotCQkJCSAqICh3aGljaCBpcyB0
aGUgVFNOKS4KLQkJCQkgKi8KLQotCQkJCWlmIChTQ1RQX1RTTl9HRShjb250cm9sLT5mc25faW5j
bHVkZWQsIGNoay0+cmVjLmRhdGEuZnNuKSkgewotCQkJCQkvKiBXZSBoYXZlIGFscmVhZHkgZGVs
aXZlcmVkIHVwIHRvIHRoaXMgc28gaXRzIGEgZHVwICovCi0JCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19YWFgsCi0JCQkJCQkiTmV3IGZzbjogJXUgaXMgYWxyZWFkeSBzZWVuIGluIGluY2x1ZGVkX2Zz
bjogJXUgLS0gYWJvcnRcbiIsCi0JCQkJCQljaGstPnJlYy5kYXRhLmZzbiwgY29udHJvbC0+ZnNu
X2luY2x1ZGVkKTsKLQkJCQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGss
Ci0JCQkJCQkJICAgIGFib3J0X2ZsYWcsCi0JCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFU
QSArIFNDVFBfTE9DXzExKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0KLQkJCS8qIHZhbGlk
YXRlIG5vdCBiZXlvbmQgdG9wIEZTTiBpZiB3ZSBoYXZlIHNlZW4gbGFzdCBvbmUgKi8KLQkJCWlm
IChTQ1RQX1RTTl9HVChjaGstPnJlYy5kYXRhLmZzbiwgY29udHJvbC0+dG9wX2ZzbikpIHsKLQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJCQkiTmV3IGZzbjogJXUgaXMgYmV5b25kIG9y
IGF0IHRvcF9mc246ICV1IC0tIGFib3J0XG4iLAotCQkJCQljaGstPnJlYy5kYXRhLmZzbiwKLQkJ
CQkJY29udHJvbC0+dG9wX2Zzbik7Ci0JCQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250
cm9sLCBjaGssCi0JCQkJCQkgICAgYWJvcnRfZmxhZywKLQkJCQkJCSAgICBTQ1RQX0ZST01fU0NU
UF9JTkRBVEEgKyBTQ1RQX0xPQ18xMik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCS8qCi0J
CSAqIElmIHdlIHJlYWNoIGhlcmUsIHdlIG5lZWQgdG8gcGxhY2UgdGhlCi0JCSAqIG5ldyBjaHVu
ayBpbiB0aGUgcmVhc3NlbWJseSBmb3IgdGhpcyAKLQkJICogY29udHJvbC4KLQkJICovCi0JCVND
VFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkiY2h1bmsgaXMgYSBub3QgZmlyc3QgZnNuOiAldSBu
ZWVkcyB0byBiZSBpbnNlcnRlZFxuIiwKLQkJCWNoay0+cmVjLmRhdGEuZnNuKTsKLQkJVEFJTFFf
Rk9SRUFDSChhdCwgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQpIHsKLQkJCWlmIChTQ1RQX1RT
Tl9HVChhdC0+cmVjLmRhdGEuZnNuLCBjaGstPnJlYy5kYXRhLmZzbikpIHsKLQkJCQkvKgotCQkJ
CSAqIFRoaXMgb25lIGluIHF1ZXVlIGlzIGJpZ2dlciB0aGFuIHRoZSBuZXcgb25lLCBpbnNlcnQK
LQkJCQkgKiB0aGUgbmV3IG9uZSBiZWZvcmUgYXQuCi0JCQkJICovCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1hYWCwKLQkJCQkJIkluc2VydCBpdCBiZWZvcmUgZnNuOiAldVxuIiwKLQkJCQkJYXQt
PnJlYy5kYXRhLmZzbik7Ci0JCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArPSBjaGstPnNl
bmRfc2l6ZTsKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7
Ci0JCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShhdCwgY2hrLCBzY3RwX25leHQpOwotCQkJCWluc2Vy
dGVkID0gMTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoYXQtPnJlYy5kYXRhLmZzbiA9PSBj
aGstPnJlYy5kYXRhLmZzbikgewotCQkJCS8qIEdhaywgSGUgc2VudCBtZSBhIGR1cGxpY2F0ZSBz
dHIgc2VxIG51bWJlciAqLwotCQkJCS8qCi0JCQkJICogZm9vIGJhciwgSSBndWVzcyBJIHdpbGwg
anVzdCBmcmVlIHRoaXMgbmV3IGd1eSwKLQkJCQkgKiBzaG91bGQgd2UgYWJvcnQgdG9vPyBGSVgg
TUUgTUFZQkU/IE9yIGl0IENPVUxEIGJlCi0JCQkJICogdGhhdCB0aGUgU1NOJ3MgaGF2ZSB3cmFw
cGVkLiBNYXliZSBJIHNob3VsZAotCQkJCSAqIGNvbXBhcmUgdG8gVFNOIHNvbWVob3cuLi4gc2ln
aCBmb3Igbm93IGp1c3QgYmxvdwotCQkJCSAqIGF3YXkgdGhlIGNodW5rIQotCQkJCSAqLwotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJCSJEdXBsaWNhdGUgdG8gZnNuOiAldSAtLSBh
Ym9ydFxuIiwKLQkJCQkJYXQtPnJlYy5kYXRhLmZzbik7Ci0JCQkJc2N0cF9hYm9ydF9pbl9yZWFz
bShzdGNiLCBjb250cm9sLAotCQkJCQkJICAgIGNoaywgYWJvcnRfZmxhZywKLQkJCQkJCSAgICBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xMyk7Ci0JCQkJcmV0dXJuOwotCQkJfQot
CQl9Ci0JCWlmIChpbnNlcnRlZCA9PSAwKSB7Ci0JCQkvKiBHb2VzIG9uIHRoZSBlbmQgKi8KLQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsICJJbnNlcnRpbmcgYXQgdGFpbCBvZiBsaXN0IGZzbjog
JXVcbiIsCi0JCQkJY2hrLT5yZWMuZGF0YS5mc24pOwotCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9x
dWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29u
X3JlYXNtX3F1ZXVlKTsKLQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZjb250cm9sLT5yZWFzbSwgY2hr
LCBzY3RwX25leHQpOwotCQl9Ci0JfQotCS8qCi0JICogT2sgbGV0cyBzZWUgaWYgd2UgY2FuIHN1
Y2sgYW55IHVwIGludG8gdGhlIGNvbnRyb2wKLQkgKiBzdHJ1Y3R1cmUgdGhhdCBhcmUgaW4gc2Vx
IGlmIGl0IG1ha2VzIHNlbnNlLgotCSAqLwotCWRvX3dha2V1cCA9IDA7Ci0JLyoKLQkgKiBJZiB0
aGUgZmlyc3QgZnJhZ21lbnQgaGFzIG5vdCBiZWVuCi0JICogc2VlbiB0aGVyZSBpcyBubyBzZW5z
ZSBpbiBsb29raW5nLgotCSAqLwotCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKLQkJ
bmV4dF9mc24gPSBjb250cm9sLT5mc25faW5jbHVkZWQgKyAxOwotCQlUQUlMUV9GT1JFQUNIX1NB
RkUoYXQsICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuYXQpIHsKLQkJCWlmIChhdC0+cmVj
LmRhdGEuZnNuID09IG5leHRfZnNuKSB7Ci0JCQkJLyogV2UgY2FuIGFkZCB0aGlzIG9uZSBub3cg
dG8gdGhlIGNvbnRyb2wgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJCQkiQWRk
aW5nIG1vcmUgdG8gY29udHJvbDogJXAgYXQ6ICVwIGZzbjogJXUgbmV4dF9mc246ICV1IGluY2x1
ZGVkOiAldVxuIiwKLQkJCQkJY29udHJvbCwgYXQsCi0JCQkJCWF0LT5yZWMuZGF0YS5mc24sCi0J
CQkJCW5leHRfZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQpOwotCQkJCVRBSUxRX1JFTU9WRSgm
Y29udHJvbC0+cmVhc20sIGF0LCBzY3RwX25leHQpOwotCQkJCWxlbmFkZGVkID0gc2N0cF9hZGRf
Y2hrX3RvX2NvbnRyb2woY29udHJvbCwgc3RybSwgc3RjYiwgYXNvYywgYXQsIFNDVFBfUkVBRF9M
T0NLX05PVF9IRUxEKTsKLQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zICs9IGxlbmFkZGVk
OwotCQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EpIHsKLQkJCQkJZG9fd2FrZXVwID0gMTsKLQkJ
CQl9Ci0JCQkJbmV4dF9mc24rKzsKLQkJCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkICYmIGNvbnRy
b2wtPnBkYXBpX3N0YXJ0ZWQpIHsKLQkJCQkJaWYgKHN0cm0tPnBkX2FwaV9zdGFydGVkKSB7Ci0J
CQkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7Ci0JCQkJCQljb250cm9sLT5wZGFwaV9zdGFy
dGVkID0gMDsKLQkJCQkJfQotCQkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKLQkJ
CQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkJCSAgY29u
dHJvbCwKLQkJCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5k
X2FkZGVkLAotCQkJCQkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCQkJCQkJZG9fd2FrZXVwID0gMTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCWlmIChkb193YWtldXAp
IHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJh
Y2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJvbCwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQp
OwotI2VuZGlmCi0JCS8qIE5lZWQgdG8gd2FrZXVwIHRoZSByZWFkZXIgKi8KLQkJc2N0cF93YWtl
dXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKgotc2N0cF9m
aW5kX3JlYXNtX2VudHJ5KHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwgdWludDMyX3QgbWlk
LCBpbnQgb3JkZXJlZCwgaW50IGlkYXRhX3N1cHBvcnRlZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbDsKLQotCWlmIChvcmRlcmVkKSB7Ci0JCVRBSUxRX0ZPUkVBQ0go
Y29udHJvbCwgJnN0cm0tPmlucXVldWUsIG5leHRfaW5zdHJtKSB7Ci0JCQlpZiAoU0NUUF9NSURf
RVEoaWRhdGFfc3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG1pZCkpIHsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChpZGF0YV9zdXBwb3J0ZWQpIHsKLQkJCVRBSUxRX0ZP
UkVBQ0goY29udHJvbCwgJnN0cm0tPnVub19pbnF1ZXVlLCBuZXh0X2luc3RybSkgewotCQkJCWlm
IChTQ1RQX01JRF9FUShpZGF0YV9zdXBwb3J0ZWQsIGNvbnRyb2wtPm1pZCwgbWlkKSkgewotCQkJ
CQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQljb250cm9sID0gVEFJTFFfRklS
U1QoJnN0cm0tPnVub19pbnF1ZXVlKTsKLQkJfQotCX0KLQlyZXR1cm4gKGNvbnRyb2wpOwotfQot
Ci1zdGF0aWMgaW50Ci1zY3RwX3Byb2Nlc3NfYV9kYXRhX2NodW5rKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgIHN0cnVjdCBtYnVmICoq
bSwgaW50IG9mZnNldCwgIGludCBjaGtfbGVuZ3RoLAotCQkJICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsIHVpbnQzMl90ICpoaWdoX3RzbiwgaW50ICphYm9ydF9mbGFnLAotCQkJICBpbnQgKmJyZWFr
X2ZsYWcsIGludCBsYXN0X2NodW5rLCB1aW50OF90IGNoa190eXBlKQotewotCS8qIFByb2Nlc3Mg
YSBkYXRhIGNodW5rICovCi0JLyogc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOyAqLwotCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQl1aW50MzJfdCB0c24sIGZzbiwgZ2FwLCBtaWQ7
Ci0Jc3RydWN0IG1idWYgKmRtYnVmOwotCWludCB0aGVfbGVuOwotCWludCBuZWVkX3JlYXNtX2No
ZWNrID0gMDsKLQl1aW50MTZfdCBzaWQ7Ci0Jc3RydWN0IG1idWYgKm9wX2VycjsKLQljaGFyIG1z
Z1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sLCAqbmNvbnRyb2w7Ci0JdWludDMyX3QgcHBpZDsKLQl1aW50OF90IGNoa19mbGFnczsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqbGlzdGU7Ci0JaW50IG9yZGVyZWQ7Ci0Jc2l6
ZV90IGNsZW47Ci0JaW50IGNyZWF0ZWRfY29udHJvbCA9IDA7Ci0KLQlpZiAoY2hrX3R5cGUgPT0g
U0NUUF9JREFUQSkgewotCQlzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAqY2h1bmssIGNodW5rX2J1
ZjsKLQotCQljaHVuayA9IChzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAqKXNjdHBfbV9nZXRwdHIo
Km0sIG9mZnNldCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayksICh1aW50OF90ICopJmNodW5r
X2J1Zik7Ci0JCWNoa19mbGFncyA9IGNodW5rLT5jaC5jaHVua19mbGFnczsKLQkJY2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayk7Ci0JCXRzbiA9IG50b2hsKGNodW5rLT5kcC50
c24pOwotCQlzaWQgPSBudG9ocyhjaHVuay0+ZHAuc2lkKTsKLQkJbWlkID0gbnRvaGwoY2h1bmst
PmRwLm1pZCk7Ci0JCWlmIChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgewotCQkJ
ZnNuID0gMDsKLQkJCXBwaWQgPSBjaHVuay0+ZHAucHBpZF9mc24ucHBpZDsKLQkJfSBlbHNlIHsK
LQkJCWZzbiA9IG50b2hsKGNodW5rLT5kcC5wcGlkX2Zzbi5mc24pOwotCQkJcHBpZCA9IDB4ZmZm
ZmZmZmY7IC8qIFVzZSBhcyBhbiBpbnZhbGlkIHZhbHVlLiAqLwotCQl9Ci0JfSBlbHNlIHsKLQkJ
c3RydWN0IHNjdHBfZGF0YV9jaHVuayAqY2h1bmssIGNodW5rX2J1ZjsKLQotCQljaHVuayA9IChz
dHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopc2N0cF9tX2dldHB0cigqbSwgb2Zmc2V0LAotCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0
IHNjdHBfZGF0YV9jaHVuayksICh1aW50OF90ICopJmNodW5rX2J1Zik7Ci0JCWNoa19mbGFncyA9
IGNodW5rLT5jaC5jaHVua19mbGFnczsKLQkJY2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRh
X2NodW5rKTsKLQkJdHNuID0gbnRvaGwoY2h1bmstPmRwLnRzbik7Ci0JCXNpZCA9IG50b2hzKGNo
dW5rLT5kcC5zaWQpOwotCQltaWQgPSAodWludDMyX3QpKG50b2hzKGNodW5rLT5kcC5zc24pKTsK
LQkJZnNuID0gdHNuOwotCQlwcGlkID0gY2h1bmstPmRwLnBwaWQ7Ci0JfQotCWlmICgoc2l6ZV90
KWNoa19sZW5ndGggPT0gY2xlbikgewotCQkvKgotCQkgKiBOZWVkIHRvIHNlbmQgYW4gYWJvcnQg
c2luY2Ugd2UgaGFkIGEKLQkJICogZW1wdHkgZGF0YSBjaHVuay4KLQkJICovCi0JCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfbm9fdXNlcl9kYXRhX2NhdXNlKHRzbik7Ci0JCXN0Y2ItPnNjdHBfZXAt
Pmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE0Owot
CQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2Vyciwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJKmFib3J0X2ZsYWcgPSAxOwotCQlyZXR1cm4gKDApOwot
CX0KLQlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZKSA9PSBTQ1RQ
X0RBVEFfU0FDS19JTU1FRElBVEVMWSkgewotCQlhc29jLT5zZW5kX3NhY2sgPSAxOwotCX0KLQlv
cmRlcmVkID0gKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwKTsKLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19F
TkFCTEUpIHsKLQkJc2N0cF9sb2dfbWFwKHRzbiwgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1RTTl9FTlRFUlMpOwotCX0KLQlpZiAo
c3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCVNDVFBfTFRSQUNFX0NISyhzdGNi
LT5zY3RwX2VwLCBzdGNiLCBjaGtfdHlwZSwgdHNuKTsKLQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+
Y3VtdWxhdGl2ZV90c24sIHRzbikpIHsKLQkJLyogSXQgaXMgYSBkdXBsaWNhdGUgKi8KLQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmR1cGRhdGEpOwotCQlpZiAoYXNvYy0+bnVtZHVwdHNucyA8
IFNDVFBfTUFYX0RVUF9UU05TKSB7Ci0JCQkvKiBSZWNvcmQgYSBkdXAgZm9yIHRoZSBuZXh0IG91
dGJvdW5kIHNhY2sgKi8KLQkJCWFzb2MtPmR1cF90c25zW2Fzb2MtPm51bWR1cHRzbnNdID0gdHNu
OwotCQkJYXNvYy0+bnVtZHVwdHNucysrOwotCQl9Ci0JCWFzb2MtPnNlbmRfc2FjayA9IDE7Ci0J
CXJldHVybiAoMCk7Ci0JfQotCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIFRTTidzIGJldHdl
ZW4gdGhlIGJhc2UgYW5kIHRoaXMgVFNOICovCi0JU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCB0
c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCWlmIChnYXAgPj0gKFNDVFBfTUFQ
UElOR19BUlJBWSA8PCAzKSkgewotCQkvKiBDYW4ndCBob2xkIHRoZSBiaXQgaW4gdGhlIG1hcHBp
bmcgYXQgbWF4IGFycmF5LCB0b3NzIGl0ICovCi0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChnYXAg
Pj0gKHVpbnQzMl90KSAoYXNvYy0+bWFwcGluZ19hcnJheV9zaXplIDw8IDMpKSB7Ci0JCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCQlpZiAoc2N0cF9leHBhbmRfbWFwcGluZ19hcnJheShh
c29jLCBnYXApKSB7Ci0JCQkvKiBDYW4ndCBleHBhbmQsIGRyb3AgaXQgKi8KLQkJCXJldHVybiAo
MCk7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfVFNOX0dUKHRzbiwgKmhpZ2hfdHNuKSkgewotCQkqaGln
aF90c24gPSB0c247Ci0JfQotCS8qIFNlZSBpZiB3ZSBoYXZlIHJlY2VpdmVkIHRoaXMgb25lIGFs
cmVhZHkgKi8KLQlpZiAoU0NUUF9JU19UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBn
YXApIHx8Ci0JICAgIFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwg
Z2FwKSkgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2ZHVwZGF0YSk7Ci0JCWlmIChhc29j
LT5udW1kdXB0c25zIDwgU0NUUF9NQVhfRFVQX1RTTlMpIHsKLQkJCS8qIFJlY29yZCBhIGR1cCBm
b3IgdGhlIG5leHQgb3V0Ym91bmQgc2FjayAqLwotCQkJYXNvYy0+ZHVwX3RzbnNbYXNvYy0+bnVt
ZHVwdHNuc10gPSB0c247Ci0JCQlhc29jLT5udW1kdXB0c25zKys7Ci0JCX0KLQkJYXNvYy0+c2Vu
ZF9zYWNrID0gMTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyoKLQkgKiBDaGVjayB0byBzZWUgYWJv
dXQgdGhlIEdPTkUgZmxhZywgZHVwbGljYXRlcyB3b3VsZCBjYXVzZSBhIHNhY2sKLQkgKiB0byBi
ZSBzZW50IHVwIGFib3ZlCi0JICovCi0JaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSkpIHsKLQkJLyoKLQkJICog
d2FpdCBhIG1pbnV0ZSwgdGhpcyBndXkgaXMgZ29uZSwgdGhlcmUgaXMgbm8gbG9uZ2VyIGEKLQkJ
ICogcmVjZWl2ZXIuIFNlbmQgcGVlciBhbiBBQk9SVCEKLQkJICovCi0JCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOwotCQlzY3RwX2Fib3J0
X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLQkJKmFib3J0X2ZsYWcgPSAxOwotCQlyZXR1cm4gKDApOwotCX0KLQkvKgotCSAq
IE5vdyBiZWZvcmUgZ29pbmcgZnVydGhlciB3ZSBzZWUgaWYgdGhlcmUgaXMgcm9vbS4gSWYgTk9U
IHRoZW4gd2UKLQkgKiBNQVkgbGV0IG9uZSB0aHJvdWdoIG9ubHkgSUYgdGhpcyBUU04gaXMgdGhl
IG9uZSB3ZSBhcmUgd2FpdGluZwotCSAqIGZvciBvbiBhIHBhcnRpYWwgZGVsaXZlcnkgQVBJLgot
CSAqLwotCi0JLyogSXMgdGhlIHN0cmVhbSB2YWxpZD8gKi8KLQlpZiAoc2lkID49IGFzb2MtPnN0
cmVhbWluY250KSB7Ci0JCXN0cnVjdCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFtICpjYXVzZTsK
LQotCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2Vy
cm9yX2ludmFsaWRfc3RyZWFtKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJaWYgKG9wX2VyciAhPSBOVUxMKSB7Ci0JCQkvKiBh
ZGQgc29tZSBzcGFjZSB1cCBmcm9udCBzbyBwcmVwZW5kIHdpbGwgd29yayB3ZWxsICovCi0JCQlT
Q1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7Ci0J
CQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSAq
KTsKLQkJCS8qCi0JCQkgKiBFcnJvciBjYXVzZXMgYXJlIGp1c3QgcGFyYW0ncyBhbmQgdGhpcyBv
bmUgaGFzCi0JCQkgKiB0d28gYmFjayB0byBiYWNrIHBoZHIsIG9uZSB3aXRoIHRoZSBlcnJvciB0
eXBlCi0JCQkgKiBhbmQgc2l6ZSwgdGhlIG90aGVyIHdpdGggdGhlIHN0cmVhbWlkIGFuZCBhIHJz
dmQKLQkJCSAqLwotCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSBzaXplb2Yoc3RydWN0IHNjdHBf
ZXJyb3JfaW52YWxpZF9zdHJlYW0pOwotCQkJY2F1c2UtPmNhdXNlLmNvZGUgPSBodG9ucyhTQ1RQ
X0NBVVNFX0lOVkFMSURfU1RSRUFNKTsKLQkJCWNhdXNlLT5jYXVzZS5sZW5ndGggPSBodG9ucyhz
aXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0pKTsKLQkJCWNhdXNlLT5zdHJl
YW1faWQgPSBodG9ucyhzaWQpOwotCQkJY2F1c2UtPnJlc2VydmVkID0gaHRvbnMoMCk7Ci0JCQlz
Y3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOwotCQl9Ci0JCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX2JhZHNpZCk7Ci0JCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCQlTQ1RQX1NFVF9U
U05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOwotCQlpZiAoU0NUUF9UU05f
R1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotCQkJYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKLQkJfQotCQlpZiAodHNuID09IChhc29jLT5j
dW11bGF0aXZlX3RzbiArIDEpKSB7Ci0JCQkvKiBVcGRhdGUgY3VtLWFjayAqLwotCQkJYXNvYy0+
Y3VtdWxhdGl2ZV90c24gPSB0c247Ci0JCX0KLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyoKLQkgKiBJ
ZiBpdHMgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIGxldHMgc2VlIGlmIHdlIGNhbgotCSAqIGZpbmQg
dGhlIGNvbnRyb2wgb24gdGhlIHJlYXNzZW1ibHkgcXVldWVzLgotCSAqLwotCWlmICgoY2hrX3R5
cGUgPT0gU0NUUF9JREFUQSkgJiYKLQkgICAgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1Rf
RlJBRykgPT0gMCkgJiYKLQkgICAgKGZzbiA9PSAwKSkgewotCQkvKiAKLQkJICogIFRoZSBmaXJz
dCAqbXVzdCogYmUgZnNuIDAsIGFuZCBvdGhlciAKLQkJICogIChtaWRkbGUvZW5kKSBwaWVjZXMg
Y2FuICpub3QqIGJlIGZzbiAwLgotCQkgKiBYWFg6IFRoaXMgY2FuIGhhcHBlbiBpbiBjYXNlIG9m
IGEgd3JhcCBhcm91bmQuCi0JCSAqICAgICAgSWdub3JlIGlzIGZvciBub3cuCi0JCSAqLwotCQlz
bnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRlNOIHplcm8gZm9yIE1JRD0lOC44eCwgYnV0IGZs
YWdzPSUyLjJ4IiwKLQkJICAgICAgICAgbWlkLCBjaGtfZmxhZ3MpOwotCQlnb3RvIGVycl9vdXQ7
Ci0JfQotCWNvbnRyb2wgPSBzY3RwX2ZpbmRfcmVhc21fZW50cnkoJmFzb2MtPnN0cm1pbltzaWRd
LCBtaWQsIG9yZGVyZWQsIGFzb2MtPmlkYXRhX3N1cHBvcnRlZCk7Ci0JU0NUUERCRyhTQ1RQX0RF
QlVHX1hYWCwgImNodW5rX2ZsYWdzOjB4JXggbG9vayBmb3IgY29udHJvbCBvbiBxdWV1ZXMgJXBc
biIsCi0JCWNoa19mbGFncywgY29udHJvbCk7Ci0JaWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFf
Tk9UX0ZSQUcpICE9IFNDVFBfREFUQV9OT1RfRlJBRykgewotCQkvKiBTZWUgaWYgd2UgY2FuIGZp
bmQgdGhlIHJlLWFzc2VtYmx5IGVudGl0eSAqLwotCQlpZiAoY29udHJvbCAhPSBOVUxMKSB7Ci0J
CQkvKiBXZSBmb3VuZCBzb21ldGhpbmcsIGRvZXMgaXQgYmVsb25nPyAqLwotCQkJaWYgKG9yZGVy
ZWQgJiYgKG1pZCAhPSBjb250cm9sLT5taWQpKSB7Ci0JCQkJc25wcmludGYobXNnLCBzaXplb2Yo
bXNnKSwgIlJlYXNzZW1ibHkgcHJvYmxlbSAoTUlEPSU4Ljh4KSIsIG1pZCk7Ci0JCQllcnJfb3V0
OgotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9W
SU9MQVRJT04sIG1zZyk7Ci0JCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NU
UF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTU7Ci0JCQkJc2N0cF9hYm9ydF9hbl9hc3Nv
Y2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JCQkJKmFib3J0X2ZsYWcgPSAxOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAob3Jk
ZXJlZCAmJiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJF
RCkpIHsKLQkJCQkvKiBXZSBjYW4ndCBoYXZlIGEgc3dpdGNoZWQgb3JkZXIgd2l0aCBhbiB1bm9y
ZGVyZWQgY2h1bmsgKi8KLQkJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQWxsIGZyYWdt
ZW50cyBvZiBhIHVzZXIgbWVzc2FnZSBtdXN0IGJlIG9yZGVyZWQgb3IgdW5vcmRlcmVkIChUU049
JTguOHgpIiwKLQkJCQkJIHRzbik7Ci0JCQkJZ290byBlcnJfb3V0OwotCQkJfQotCQkJaWYgKCFv
cmRlcmVkICYmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX1VOT1JE
RVJFRCkgPT0gMCkpIHsKLQkJCQkvKiBXZSBjYW4ndCBoYXZlIGEgc3dpdGNoZWQgdW5vcmRlcmVk
IHdpdGggYSBvcmRlcmVkIGNodW5rICovCi0JCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwg
IkFsbCBmcmFnbWVudHMgb2YgYSB1c2VyIG1lc3NhZ2UgbXVzdCBiZSBvcmRlcmVkIG9yIHVub3Jk
ZXJlZCAoVFNOPSU4Ljh4KSIsCi0JCQkJCSB0c24pOwotCQkJCWdvdG8gZXJyX291dDsKLQkJCX0K
LQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0cyBhIGNvbXBsZXRlIHNlZ21lbnQuIExldHMgdmFsaWRh
dGUgd2UKLQkJICogZG9uJ3QgaGF2ZSBhIHJlLWFzc2VtYmx5IGdvaW5nIG9uIHdpdGgKLQkJICog
dGhlIHNhbWUgU3RyZWFtL1NlcSAoZm9yIG9yZGVyZWQpIG9yIGluCi0JCSAqIHRoZSBzYW1lIFN0
cmVhbSBmb3IgdW5vcmRlcmVkLgotCQkgKi8KLQkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgewotCQkJ
aWYgKG9yZGVyZWQgfHwgYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7Ci0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1hYWCwgImNodW5rX2ZsYWdzOiAweCV4IGR1cCBkZXRlY3RlZCBvbiBNSUQ6ICV1XG4i
LAotCQkJCQljaGtfZmxhZ3MsIG1pZCk7Ci0JCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwg
IkR1cGxpY2F0ZSBNSUQ9JTguOHggZGV0ZWN0ZWQuIiwgbWlkKTsKLQkJCQlnb3RvIGVycl9vdXQ7
Ci0JCQl9IGVsc2UgewotCQkJCWlmICgodHNuID09IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCArIDEp
ICYmCi0JCQkJICAgIChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkpIHsKLQkJCQkJc25wcmludGYo
bXNnLCBzaXplb2YobXNnKSwgIklsbGVnYWwgbWVzc2FnZSBzZXF1ZW5jZSwgbWlzc2luZyBlbmQg
Zm9yIE1JRDogJTguOHgiLCBjb250cm9sLT5mc25faW5jbHVkZWQpOwotCQkJCQlnb3RvIGVycl9v
dXQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY29udHJvbCA9IE5VTEw7Ci0JCQkJfQotCQkJfQotCQl9
Ci0JfQotCS8qIG5vdyBkbyB0aGUgdGVzdHMgKi8KLQlpZiAoKChhc29jLT5jbnRfb25fYWxsX3N0
cmVhbXMgKwotCSAgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSArCi0JICAgICAgYXNvYy0+
Y250X21zZ19vbl9zYikgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVl
dWUpKSB8fAotCSAgICAoKChpbnQpYXNvYy0+bXlfcnduZCkgPD0gMCkpIHsKLQkJLyoKLQkJICog
V2hlbiB3ZSBoYXZlIE5PIHJvb20gaW4gdGhlIHJ3bmQgd2UgY2hlY2sgdG8gbWFrZSBzdXJlCi0J
CSAqIHRoZSByZWFkZXIgaXMgZG9pbmcgaXRzIGpvYi4uLgotCQkgKi8KLQkJaWYgKHN0Y2ItPnNj
dHBfc29ja2V0LT5zb19yY3Yuc2JfY2MpIHsKLQkJCS8qIHNvbWUgdG8gcmVhZCwgd2FrZS11cCAq
LwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQotCQkJc3RydWN0IHNvY2tldCAqc287Ci0KLQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCk7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NL
RVQpIHsKLQkJCQkvKiBhc3NvYyB3YXMgZnJlZWQgd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZCAqLwot
CQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLSNl
bmRpZgotCQkJc2N0cF9zb3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQp
OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQl9Ci0JCS8qIG5vdyBp
cyBpdCBpbiB0aGUgbWFwcGluZyBhcnJheSBvZiB3aGF0IHdlIGhhdmUgYWNjZXB0ZWQ/ICovCi0J
CWlmIChjaGtfdHlwZSA9PSBTQ1RQX0RBVEEpIHsKLQkJCWlmIChTQ1RQX1RTTl9HVCh0c24sIGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApICYmCi0JCQkgICAgU0NUUF9UU05fR1QodHNuLCBh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotCQkJCS8qIE5vcGUgbm90IGluIHRo
ZSB2YWxpZCByYW5nZSBkdW1wIGl0ICovCi0JCQlkdW1wX3BhY2tldDoKLQkJCQlzY3RwX3NldF9y
d25kKHN0Y2IsIGFzb2MpOwotCQkJCWlmICgoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zICsKLQkJ
CQkgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSArCi0JCQkJICAgICBhc29jLT5jbnRfbXNn
X29uX3NiKSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpIHsK
LQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZGF0YWRyb3BjaGtsbXQpOwotCQkJCX0gZWxzZSB7
Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2RhdGFkcm9wcnduZCk7Ci0JCQkJfQotCQkJCSpi
cmVha19mbGFnID0gMTsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYg
KGNvbnRyb2wgPT0gTlVMTCkgewotCQkJCWdvdG8gZHVtcF9wYWNrZXQ7Ci0JCQl9Ci0JCQlpZiAo
U0NUUF9UU05fR1QoZnNuLCBjb250cm9sLT50b3BfZnNuKSkgewotCQkJCWdvdG8gZHVtcF9wYWNr
ZXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLQlTQ1RQX1RD
Ql9MT0NLX0FTU0VSVChzdGNiKTsKLQlpZiAoYXNvYy0+dHNuX2luX2F0ID49IFNDVFBfVFNOX0xP
R19TSVpFKSB7Ci0JCWFzb2MtPnRzbl9pbl9hdCA9IDA7Ci0JCWFzb2MtPnRzbl9pbl93cmFwcGVk
ID0gMTsKLQl9Ci0JYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0udHNuID0gdHNuOwot
CWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnN0cm0gPSBzaWQ7Ci0JYXNvYy0+aW5f
dHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uc2VxID0gbWlkOwotCWFzb2MtPmluX3RzbmxvZ1thc29j
LT50c25faW5fYXRdLnN6ID0gY2hrX2xlbmd0aDsKLQlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNu
X2luX2F0XS5mbGdzID0gY2h1bmtfZmxhZ3M7Ci0JYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9p
bl9hdF0uc3RjYiA9ICh2b2lkICopc3RjYjsKLQlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNuX2lu
X2F0XS5pbl9wb3MgPSBhc29jLT50c25faW5fYXQ7Ci0JYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRz
bl9pbl9hdF0uaW5fb3V0ID0gMTsKLQlhc29jLT50c25faW5fYXQrKzsKLSNlbmRpZgotCS8qCi0J
ICogQmVmb3JlIHdlIGNvbnRpbnVlIGxldHMgdmFsaWRhdGUgdGhhdCB3ZSBhcmUgbm90IGJlaW5n
IGZvb2xlZCBieQotCSAqIGFuIGV2aWwgYXR0YWNrZXIuIFdlIGNhbiBvbmx5IGhhdmUgTmsgY2h1
bmtzIGJhc2VkIG9uIG91ciBUU04KLQkgKiBzcHJlYWQgYWxsb3dlZCBieSB0aGUgbWFwcGluZyBh
cnJheSBOICogOCBiaXRzLCBzbyB0aGVyZSBpcyBubwotCSAqIHdheSBvdXIgc3RyZWFtIHNlcXVl
bmNlIG51bWJlcnMgY291bGQgaGF2ZSB3cmFwcGVkLiBXZSBvZiBjb3Vyc2UKLQkgKiBvbmx5IHZh
bGlkYXRlIHRoZSBGSVJTVCBmcmFnbWVudCBzbyB0aGUgYml0IG11c3QgYmUgc2V0LgotCSAqLwot
CWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpICYmCi0JICAgIChUQUlMUV9F
TVBUWSgmYXNvYy0+cmVzZXRIZWFkKSkgJiYKLQkgICAgKGNoa19mbGFncyAmIFNDVFBfREFUQV9V
Tk9SREVSRUQpID09IDAgJiYKLQkgICAgU0NUUF9NSURfR0UoYXNvYy0+aWRhdGFfc3VwcG9ydGVk
LCBhc29jLT5zdHJtaW5bc2lkXS5sYXN0X21pZF9kZWxpdmVyZWQsIG1pZCkpIHsKLQkJLyogVGhl
IGluY29taW5nIHNzZXEgaXMgYmVoaW5kIHdoZXJlIHdlIGxhc3QgZGVsaXZlcmVkPyAqLwotCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkVWSUwvQnJva2VuLUR1cCBTLVNFUTogJXUgZGVs
aXZlcmVkOiAldSBmcm9tIHBlZXIsIEFib3J0IVxuIiwKLQkJCW1pZCwgYXNvYy0+c3RybWluW3Np
ZF0ubGFzdF9taWRfZGVsaXZlcmVkKTsKLQotCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7
Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIE1JRD0lOC44eCwgZ290
IFRTTj0lOC44eCwgU0lEPSU0LjR4LCBNSUQ9JTguOHgiLAotCQkJICAgICAgICAgYXNvYy0+c3Ry
bWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkLAotCQkJICAgICAgICAgdHNuLAotCQkJICAgICAg
ICAgc2lkLAotCQkJICAgICAgICAgbWlkKTsKLQkJfSBlbHNlIHsKLQkJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgU1NOPSU0LjR4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9JTQu
NHgsIFNTTj0lNC40eCIsCi0JCQkgICAgICAgICAodWludDE2X3QpYXNvYy0+c3RybWluW3NpZF0u
bGFzdF9taWRfZGVsaXZlcmVkLAotCQkJICAgICAgICAgdHNuLAotCQkJICAgICAgICAgc2lkLAot
CQkJICAgICAgICAgKHVpbnQxNl90KW1pZCk7Ci0JCX0KLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKLQkJc3RjYi0+c2N0
cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0Nf
MTY7Ci0JCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3Bf
ZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkqYWJvcnRfZmxhZyA9IDE7Ci0JCXJldHVybiAo
MCk7Ci0JfQotCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7Ci0JCXRoZV9sZW4gPSAoY2hr
X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuaykpOwotCX0gZWxzZSB7Ci0J
CXRoZV9sZW4gPSAoY2hrX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSk7
Ci0JfQotCWlmIChsYXN0X2NodW5rID09IDApIHsKLQkJaWYgKGNoa190eXBlID09IFNDVFBfSURB
VEEpIHsKLQkJCWRtYnVmID0gU0NUUF9NX0NPUFlNKCptLAotCQkJCQkgICAgIChvZmZzZXQgKyBz
aXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspKSwKLQkJCQkJICAgICB0aGVfbGVuLCBNX05P
V0FJVCk7Ci0JCX0gZWxzZSB7Ci0JCQlkbWJ1ZiA9IFNDVFBfTV9DT1BZTSgqbSwKLQkJCQkJICAg
ICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKSwKLQkJCQkJICAgICB0
aGVfbGVuLCBNX05PV0FJVCk7Ci0JCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19tYmMoZG1idWYsIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0K
LSNlbmRpZgotCX0gZWxzZSB7Ci0JCS8qIFdlIGNhbiBzdGVhbCB0aGUgbGFzdCBjaHVuayAqLwot
CQlpbnQgbF9sZW47Ci0JCWRtYnVmID0gKm07Ci0JCS8qIGxvcCBvZmYgdGhlIHRvcCBwYXJ0ICov
Ci0JCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7Ci0JCQltX2FkaihkbWJ1ZiwgKG9mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuaykpKTsKLQkJfSBlbHNlIHsKLQkJCW1f
YWRqKGRtYnVmLCAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKSk7Ci0J
CX0KLQkJaWYgKFNDVFBfQlVGX05FWFQoZG1idWYpID09IE5VTEwpIHsKLQkJCWxfbGVuID0gU0NU
UF9CVUZfTEVOKGRtYnVmKTsKLQkJfSBlbHNlIHsKLQkJCS8qIG5lZWQgdG8gY291bnQgdXAgdGhl
IHNpemUgaG9wZWZ1bGx5Ci0JCQkgKiBkb2VzIG5vdCBoaXQgdGhpcyB0byBvZnRlbiA6LTAKLQkJ
CSAqLwotCQkJc3RydWN0IG1idWYgKmxhdDsKLQotCQkJbF9sZW4gPSAwOwotCQkJZm9yIChsYXQg
PSBkbWJ1ZjsgbGF0OyBsYXQgPSBTQ1RQX0JVRl9ORVhUKGxhdCkpIHsKLQkJCQlsX2xlbiArPSBT
Q1RQX0JVRl9MRU4obGF0KTsKLQkJCX0KLQkJfQotCQlpZiAobF9sZW4gPiB0aGVfbGVuKSB7Ci0J
CQkvKiBUcmltIHRoZSBlbmQgcm91bmQgYnl0ZXMgb2ZmICB0b28gKi8KLQkJCW1fYWRqKGRtYnVm
LCAtKGxfbGVuIC0gdGhlX2xlbikpOwotCQl9Ci0JfQotCWlmIChkbWJ1ZiA9PSBOVUxMKSB7Ci0J
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX25vbWVtKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyoKLQkg
KiBOb3cgbm8gbWF0dGVyIHdoYXQsIHdlIG5lZWQgYSBjb250cm9sLCBnZXQgb25lCi0JICogaWYg
d2UgZG9uJ3QgaGF2ZSBvbmUgKHdlIG1heSBoYXZlIGdvdHRlbiBpdAotCSAqIGFib3ZlIHdoZW4g
d2UgZm91bmQgdGhlIG1lc3NhZ2Ugd2FzIGZyYWdtZW50ZWQKLQkgKi8KLQlpZiAoY29udHJvbCA9
PSBOVUxMKSB7Ci0JCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKLQkJc2N0cF9i
dWlsZF9yZWFkcV9lbnRyeV9tYWMoY29udHJvbCwgc3RjYiwgYXNvYy0+Y29udGV4dCwgbmV0LCB0
c24sCi0JCQkJCSAgIHBwaWQsCi0JCQkJCSAgIHNpZCwKLQkJCQkJICAgY2hrX2ZsYWdzLAotCQkJ
CQkgICBOVUxMLCBmc24sIG1pZCk7Ci0JCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX25vbWVtKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJaWYgKChjaGtf
ZmxhZ3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykgewotCQkJ
c3RydWN0IG1idWYgKm1tOwotCi0JCQljb250cm9sLT5kYXRhID0gZG1idWY7Ci0JCQlmb3IgKG1t
ID0gY29udHJvbC0+ZGF0YTsgbW07IG1tID0gbW0tPm1fbmV4dCkgewotCQkJCWNvbnRyb2wtPmxl
bmd0aCArPSBTQ1RQX0JVRl9MRU4obW0pOwotCQkJfQotCQkJY29udHJvbC0+dGFpbF9tYnVmID0g
TlVMTDsKLQkJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7Ci0JCQljb250cm9sLT5sYXN0X2ZyYWdf
c2VlbiA9IDE7Ci0JCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOwotCQkJY29udHJvbC0+
ZnNuX2luY2x1ZGVkID0gZnNuOwotCQkJY29udHJvbC0+dG9wX2ZzbiA9IGZzbjsKLQkJfQotCQlj
cmVhdGVkX2NvbnRyb2wgPSAxOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiY2h1bmtf
ZmxhZ3M6IDB4JXggb3JkZXJlZDogJWQgTUlEOiAldSBjb250cm9sOiAlcFxuIiwKLQkJY2hrX2Zs
YWdzLCBvcmRlcmVkLCBtaWQsIGNvbnRyb2wpOwotCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRB
X05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcgJiYKLQkgICAgVEFJTFFfRU1QVFkoJmFz
b2MtPnJlc2V0SGVhZCkgJiYKLQkgICAgKChvcmRlcmVkID09IDApIHx8Ci0JICAgICAoU0NUUF9N
SURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBhc29jLT5zdHJtaW5bc2lkXS5sYXN0X21pZF9k
ZWxpdmVyZWQgKyAxLCBtaWQpICYmCi0JICAgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1pbltz
aWRdLmlucXVldWUpKSkpIHsKLQkJLyogQ2FuZGlkYXRlIGZvciBleHByZXNzIGRlbGl2ZXJ5ICov
Ci0JCS8qCi0JCSAqIEl0cyBub3QgZnJhZ21lbnRlZCwgTm8gUEQtQVBJIGlzIHVwLCBOb3RoaW5n
IGluIHRoZQotCQkgKiBkZWxpdmVyeSBxdWV1ZSwgSXRzIHVuLW9yZGVyZWQgT1Igb3JkZXJlZCBh
bmQgdGhlIG5leHQgdG8KLQkJICogZGVsaXZlciBBTkQgbm90aGluZyBlbHNlIGlzIHN0dWNrIG9u
IHRoZSBzdHJlYW0gcXVldWUsCi0JCSAqIEFuZCB0aGVyZSBpcyByb29tIGZvciBpdCBpbiB0aGUg
c29ja2V0IGJ1ZmZlci4gTGV0cyBqdXN0Ci0JCSAqIHN0dWZmIGl0IHVwIHRoZSBidWZmZXIuLi4u
Ci0JCSAqLwotCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBn
YXApOwotCQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJf
bWFwKSkgewotCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKLQkJfQot
CQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiSW5qZWN0aW5nIGNvbnRyb2w6ICVwIHRvIGJlIHJl
YWQgKE1JRDogJXUpXG4iLAotCQkJY29udHJvbCwgbWlkKTsKLQotCQlzY3RwX2FkZF90b19yZWFk
cShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkgICAgICAgICAgICAgICAgICBjb250cm9sLCAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwKLQkJICAgICAgICAgICAgICAgICAgMSwgU0NUUF9SRUFE
X0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0KLQkJaWYgKChjaGtfZmxhZ3Mg
JiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwKSB7Ci0JCQkvKiBmb3Igb3JkZXJlZCwgYnVtcCB3
aGF0IHdlIGRlbGl2ZXJlZCAqLwotCQkJYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZl
cmVkKys7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmV4cHJlc3MpOwotCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TVFJfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCXNjdHBfbG9nX3N0cm1fZGVsX2FsdChzdGNiLCB0c24sIG1pZCwgc2lkLAot
CQkJCQkgICAgICBTQ1RQX1NUUl9MT0dfRlJPTV9FWFBSU19ERUwpOwotCQl9Ci0JCWNvbnRyb2wg
PSBOVUxMOwotCQlnb3RvIGZpbmlzaF9leHByZXNzX2RlbDsKLQl9Ci0KLQkvKiBOb3cgd2lsbCB3
ZSBuZWVkIGEgY2h1bmsgdG9vPyAqLwotCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9G
UkFHKSAhPSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2Is
IGNoayk7Ci0JCWlmIChjaGsgPT0gTlVMTCkgewotCQkJLyogTm8gbWVtb3J5IHNvIHdlIGRyb3Ag
dGhlIGNodW5rICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19ub21lbSk7Ci0JCQlpZiAobGFz
dF9jaHVuayA9PSAwKSB7Ci0JCQkJLyogd2UgY29waWVkIGl0LCBmcmVlIHRoZSBjb3B5ICovCi0J
CQkJc2N0cF9tX2ZyZWVtKGRtYnVmKTsKLQkJCX0KLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJY2hr
LT5yZWMuZGF0YS50c24gPSB0c247Ci0JCWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7Ci0JCWNoay0+
cmVjLmRhdGEuZnNuID0gZnNuOwotCQljaGstPnJlYy5kYXRhLm1pZCA9IG1pZDsKLQkJY2hrLT5y
ZWMuZGF0YS5zaWQgPSBzaWQ7Ci0JCWNoay0+cmVjLmRhdGEucHBpZCA9IHBwaWQ7Ci0JCWNoay0+
cmVjLmRhdGEuY29udGV4dCA9IHN0Y2ItPmFzb2MuY29udGV4dDsKLQkJY2hrLT5yZWMuZGF0YS5k
b2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOwotCQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IGNo
a19mbGFnczsKLQkJY2hrLT5hc29jID0gYXNvYzsKLQkJY2hrLT5zZW5kX3NpemUgPSB0aGVfbGVu
OwotCQljaGstPndob1RvID0gbmV0OwotCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiQnVpbGRp
bmcgY2s6ICVwIGZvciBjb250cm9sOiAlcCB0byBiZSByZWFkIChNSUQ6ICV1KVxuIiwKLQkJCWNo
aywKLQkJCWNvbnRyb2wsIG1pZCk7Ci0JCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwg
MSk7Ci0JCWNoay0+ZGF0YSA9IGRtYnVmOwotCX0KLQkvKiBTZXQgdGhlIGFwcHJvcHJpYXRlIFRT
TiBtYXJrICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgewot
CQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOwotCQlp
ZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewot
CQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKLQkJfQotCX0gZWxzZSB7
Ci0JCVNDVFBfU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JCWlm
IChTQ1RQX1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7Ci0JCQlh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gdHNuOwotCQl9Ci0JfQotCS8qIE5vdyBpcyBp
dCBjb21wbGV0ZSAoaS5lLiBub3QgZnJhZ21lbnRlZCk/ICovCi0JaWYgKChjaGtfZmxhZ3MgJiBT
Q1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykgewotCQkvKgotCQkgKiBT
cGVjaWFsIGNoZWNrIGZvciB3aGVuIHN0cmVhbXMgYXJlIHJlc2V0dGluZy4gV2UKLQkJICogY291
bGQgYmUgbW9yZSBzbWFydCBhYm91dCB0aGlzIGFuZCBjaGVjayB0aGUKLQkJICogYWN0dWFsIHN0
cmVhbSB0byBzZWUgaWYgaXQgaXMgbm90IGJlaW5nIHJlc2V0Li4KLQkJICogdGhhdCB3YXkgd2Ug
d291bGQgbm90IGNyZWF0ZSBhIEhPTEIgd2hlbiBhbW9uZ3N0Ci0JCSAqIHN0cmVhbXMgYmVpbmcg
cmVzZXQgYW5kIHRob3NlIG5vdCBiZWluZyByZXNldC4KLQkJICoKLQkJICovCi0JCWlmICgoKGxp
c3RlID0gVEFJTFFfRklSU1QoJmFzb2MtPnJlc2V0SGVhZCkpICE9IE5VTEwpICYmCi0JCSAgICBT
Q1RQX1RTTl9HVCh0c24sIGxpc3RlLT50c24pKSB7Ci0JCQkvKgotCQkJICogeWVwIGl0cyBwYXN0
IHdoZXJlIHdlIG5lZWQgdG8gcmVzZXQuLi4gZ28KLQkJCSAqIGFoZWFkIGFuZCBxdWV1ZSBpdC4K
LQkJCSAqLwotCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVlKSkg
ewotCQkJCS8qIGZpcnN0IG9uZSBvbiAqLwotCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5w
ZW5kaW5nX3JlcGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Ry
dWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmxjb250cm9sLCAqbmxjb250cm9sOwotCQkJCXVuc2ln
bmVkIGNoYXIgaW5zZXJ0ZWQgPSAwOwotCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShsY29udHJvbCwg
JmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIG5leHQsIG5sY29udHJvbCkgewotCQkJCQlpZiAo
U0NUUF9UU05fR1QoY29udHJvbC0+c2luZm9fdHNuLCBsY29udHJvbC0+c2luZm9fdHNuKSkgewot
Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0J
CQkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKGxjb250cm9sLCBjb250cm9sLCBuZXh0KTsKLQkJCQkJ
CWluc2VydGVkID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChpbnNl
cnRlZCA9PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIG11c3QgYmUgcHV0IGF0IGVuZCwgdXNlCi0J
CQkJCSAqIHByZXZQIChhbGwgc2V0dXAgZnJvbQotCQkJCQkgKiBsb29wKSB0byBzZXR1cCBuZXh0
UC4KLQkJCQkJICovCi0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5wZW5kaW5nX3JlcGx5
X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCQl9Ci0JCQl9Ci0JCQlnb3RvIGZpbmlzaF9leHBy
ZXNzX2RlbDsKLQkJfQotCQlpZiAoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgewot
CQkJLyogcXVldWUgZGlyZWN0bHkgaW50byBzb2NrZXQgYnVmZmVyICovCi0JCQlTQ1RQREJHKFND
VFBfREVCVUdfWFhYLCAiVW5vcmRlcmVkIGRhdGEgdG8gYmUgcmVhZCBjb250cm9sOiAlcCBNSUQ6
ICV1XG4iLAotCQkJCWNvbnRyb2wsIG1pZCk7Ci0JCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShh
c29jLCBjb250cm9sLT5zaW5mb190c24pOwotCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwKLQkJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCi0JCQkgICAgICAgICAg
ICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKLQkJCSAgICAgICAgICAgICAg
ICAgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCi0JCX0g
ZWxzZSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiUXVldWUgY29udHJvbDogJXAgZm9y
IHJlb3JkZXJpbmcgTUlEOiAldVxuIiwgY29udHJvbCwKLQkJCQltaWQpOwotCQkJc2N0cF9xdWV1
ZV9kYXRhX3RvX3N0cmVhbShzdGNiLCBhc29jLCBjb250cm9sLCBhYm9ydF9mbGFnLCAmbmVlZF9y
ZWFzbV9jaGVjayk7Ci0JCQlpZiAoKmFib3J0X2ZsYWcpIHsKLQkJCQlpZiAobGFzdF9jaHVuaykg
ewotCQkJCQkqbSA9IE5VTEw7Ci0JCQkJfQotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCX0KLQkJ
Z290byBmaW5pc2hfZXhwcmVzc19kZWw7Ci0JfQotCS8qIElmIHdlIHJlYWNoIGhlcmUgaXRzIGEg
cmVhc3NlbWJseSAqLwotCW5lZWRfcmVhc21fY2hlY2sgPSAxOwotCVNDVFBEQkcoU0NUUF9ERUJV
R19YWFgsCi0JCSJRdWV1ZSBkYXRhIHRvIHN0cmVhbSBmb3IgcmVhc20gY29udHJvbDogJXAgTUlE
OiAldVxuIiwKLQkJY29udHJvbCwgbWlkKTsKLQlzY3RwX3F1ZXVlX2RhdGFfZm9yX3JlYXNtKHN0
Y2IsIGFzb2MsIGNvbnRyb2wsIGNoaywgY3JlYXRlZF9jb250cm9sLCBhYm9ydF9mbGFnLCB0c24p
OwotCWlmICgqYWJvcnRfZmxhZykgewotCQkvKgotCQkgKiB0aGUgYXNzb2MgaXMgbm93IGdvbmUg
YW5kIGNoayB3YXMgcHV0IG9udG8gdGhlCi0JCSAqIHJlYXNtIHF1ZXVlLCB3aGljaCBoYXMgYWxs
IGJlZW4gZnJlZWQuCi0JCSAqLwotCQlpZiAobGFzdF9jaHVuaykgewotCQkJKm0gPSBOVUxMOwot
CQl9Ci0JCXJldHVybiAoMCk7Ci0JfQotZmluaXNoX2V4cHJlc3NfZGVsOgotCS8qIEhlcmUgd2Ug
dGlkeSB1cCB0aGluZ3MgKi8KLQlpZiAodHNuID09IChhc29jLT5jdW11bGF0aXZlX3RzbiArIDEp
KSB7Ci0JCS8qIFVwZGF0ZSBjdW0tYWNrICovCi0JCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0gdHNu
OwotCX0KLQlpZiAobGFzdF9jaHVuaykgewotCQkqbSA9IE5VTEw7Ci0JfQotCWlmIChvcmRlcmVk
KSB7Ci0JCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbm9yZGVyY2h1bmtzKTsKLQl9
IGVsc2UgewotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW51bm9yZGVyY2h1bmtz
KTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmRhdGEpOwotCS8qIFNldCBpdCBwcmVz
ZW50IHBsZWFzZSAqLwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19zdHJtX2RlbF9hbHQoc3Rj
YiwgdHNuLCBtaWQsIHNpZCwgU0NUUF9TVFJfTE9HX0ZST01fTUFSS19UU04pOwotCX0KLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19F
TkFCTEUpIHsKLQkJc2N0cF9sb2dfbWFwKGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sIGFz
b2MtPmN1bXVsYXRpdmVfdHNuLAotCQkJICAgICBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFw
LCBTQ1RQX01BUF9QUkVQQVJFX1NMSURFKTsKLQl9Ci0JaWYgKG5lZWRfcmVhc21fY2hlY2spIHsK
LQkJKHZvaWQpc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsIGFzb2MsICZhc29jLT5zdHJt
aW5bc2lkXSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOwotCQluZWVkX3JlYXNtX2NoZWNrID0g
MDsKLQl9Ci0JLyogY2hlY2sgdGhlIHNwZWNpYWwgZmxhZyBmb3Igc3RyZWFtIHJlc2V0cyAqLwot
CWlmICgoKGxpc3RlID0gVEFJTFFfRklSU1QoJmFzb2MtPnJlc2V0SGVhZCkpICE9IE5VTEwpICYm
Ci0JICAgIFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBsaXN0ZS0+dHNuKSkgewot
CQkvKgotCQkgKiB3ZSBoYXZlIGZpbmlzaGVkIHdvcmtpbmcgdGhyb3VnaCB0aGUgYmFja2xvZ2dl
ZCBUU04ncyBub3cKLQkJICogdGltZSB0byByZXNldCBzdHJlYW1zLiAxOiBjYWxsIHJlc2V0IGZ1
bmN0aW9uLiAyOiBmcmVlCi0JCSAqIHBlbmRpbmdfcmVwbHkgc3BhY2UgMzogZGlzdHJpYnV0ZSBh
bnkgY2h1bmtzIGluCi0JCSAqIHBlbmRpbmdfcmVwbHlfcXVldWUuCi0JCSAqLwotCQlzY3RwX3Jl
c2V0X2luX3N0cmVhbShzdGNiLCBsaXN0ZS0+bnVtYmVyX2VudHJpZXMsIGxpc3RlLT5saXN0X29m
X3N0cmVhbXMpOwotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnJlc2V0SGVhZCwgbGlzdGUsIG5leHRf
cmVzcCk7Ci0JCXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25zZShzdGNiLCBsaXN0ZSwg
U0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCk7Ci0JCVNDVFBfRlJFRShsaXN0ZSwg
U0NUUF9NX1NUUkVTRVQpOwotCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLwotCQlsaXN0ZSA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpOwotCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2Mt
PnJlc2V0SGVhZCkpIHsKLQkJCS8qIEFsbCBjYW4gYmUgcmVtb3ZlZCAqLwotCQkJVEFJTFFfRk9S
RUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVlLCBuZXh0LCBuY29u
dHJvbCkgewotCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgY29u
dHJvbCwgbmV4dCk7Ci0JCQkJc2N0cF9xdWV1ZV9kYXRhX3RvX3N0cmVhbShzdGNiLCBhc29jLCBj
b250cm9sLCBhYm9ydF9mbGFnLCAmbmVlZF9yZWFzbV9jaGVjayk7Ci0JCQkJaWYgKCphYm9ydF9m
bGFnKSB7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJfQotCQkJCWlmIChuZWVkX3JlYXNtX2NoZWNr
KSB7Ci0JCQkJCSh2b2lkKXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCAmYXNv
Yy0+c3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0sIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxE
KTsKLQkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDA7Ci0JCQkJfQotCQkJfQotCQl9IGVsc2Ugewot
CQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVl
LCBuZXh0LCBuY29udHJvbCkgewotCQkJCWlmIChTQ1RQX1RTTl9HVChjb250cm9sLT5zaW5mb190
c24sIGxpc3RlLT50c24pKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQkvKgotCQkJCSAqIGlm
IGNvbnRyb2wtPnNpbmZvX3RzbiBpcyA8PSBsaXN0ZS0+dHNuIHdlIGNhbgotCQkJCSAqIHByb2Nl
c3MgaXQgd2hpY2ggaXMgdGhlIE5PVCBvZgotCQkJCSAqIGNvbnRyb2wtPnNpbmZvX3RzbiA+IGxp
c3RlLT50c24KLQkJCQkgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnBlbmRpbmdfcmVwbHlf
cXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCXNjdHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3Rj
YiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21fY2hlY2spOwotCQkJCWlm
ICgqYWJvcnRfZmxhZykgewotCQkJCQlyZXR1cm4gKDApOwotCQkJCX0KLQkJCQlpZiAobmVlZF9y
ZWFzbV9jaGVjaykgewotCQkJCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwg
YXNvYywgJmFzb2MtPnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLCBTQ1RQX1JFQURfTE9D
S19OT1RfSEVMRCk7Ci0JCQkJCW5lZWRfcmVhc21fY2hlY2sgPSAwOwotCQkJCX0KLQkJCX0KLQkJ
fQotCX0KLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgY29uc3QgaW50OF90IHNjdHBfbWFwX2xv
b2t1cF90YWJbMjU2XSA9IHsKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwg
MiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwg
MCwgMSwgMCwgNSwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwg
MSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwg
MCwgNiwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwg
NCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNSwK
LSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAg
MCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNywKLSAgMCwg
MSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwg
MCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNSwKLSAgMCwgMSwgMCwg
MiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwg
MCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNiwKLSAgMCwgMSwgMCwgMiwgMCwg
MSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwg
MCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNSwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwg
MywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywK
LSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgOAotfTsKLQotCi12b2lkCi1zY3RwX3NsaWRlX21hcHBp
bmdfYXJyYXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQkvKgotCSAqIE5vdyB3ZSBhbHNv
IG5lZWQgdG8gY2hlY2sgdGhlIG1hcHBpbmcgYXJyYXkgaW4gYSBjb3VwbGUgb2Ygd2F5cy4KLQkg
KiAxKSBEaWQgd2UgbW92ZSB0aGUgY3VtLWFjayBwb2ludD8KLQkgKgotCSAqIFdoZW4geW91IGZp
cnN0IGdsYW5jZSBhdCB0aGlzIHlvdSBtaWdodCB0aGluawotCSAqIHRoYXQgYWxsIGVudHJpZXMg
dGhhdCBtYWtlIHVwIHRoZSBwb3NpdGlvbgotCSAqIG9mIHRoZSBjdW0tYWNrIHdvdWxkIGJlIGlu
IHRoZSBuci1tYXBwaW5nIGFycmF5Ci0JICogb25seS4uIGkuZS4gdGhpbmdzIHVwIHRvIHRoZSBj
dW0tYWNrIGFyZSBhbHdheXMKLQkgKiBkZWxpdmVyYWJsZS4gVGhhdHMgdHJ1ZSB3aXRoIG9uZSBl
eGNlcHRpb24sIHdoZW4KLQkgKiBpdHMgYSBmcmFnbWVudGVkIG1lc3NhZ2Ugd2UgbWF5IG5vdCBk
ZWxpdmVyIHRoZSBkYXRhCi0JICogdW50aWwgc29tZSB0aHJlc2hvbGQgKG9yIGFsbCBvZiBpdCkg
aXMgaW4gcGxhY2UuIFNvCi0JICogd2UgbXVzdCBPUiB0aGUgbnJfbWFwcGluZ19hcnJheSBhbmQg
bWFwcGluZ19hcnJheSB0bwotCSAqIGdldCBhIHRydWUgcGljdHVyZSBvZiB0aGUgY3VtLWFjay4K
LQkgKi8KLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlpbnQgYXQ7Ci0JdWludDhf
dCB2YWw7Ci0JaW50IHNsaWRlX2Zyb20sIHNsaWRlX2VuZCwgbGdhcCwgZGlzdGFuY2U7Ci0JdWlu
dDMyX3Qgb2xkX2N1bWFjaywgb2xkX2Jhc2UsIG9sZF9oaWdoZXN0LCBoaWdoZXN0X3RzbjsKLQot
CWFzb2MgPSAmc3RjYi0+YXNvYzsKLQotCW9sZF9jdW1hY2sgPSBhc29jLT5jdW11bGF0aXZlX3Rz
bjsKLQlvbGRfYmFzZSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c247Ci0Jb2xkX2hpZ2hl
c3QgPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCS8qCi0JICogV2UgY291bGQgcHJv
YmFibHkgaW1wcm92ZSB0aGlzIGEgc21hbGwgYml0IGJ5IGNhbGN1bGF0aW5nIHRoZQotCSAqIG9m
ZnNldCBvZiB0aGUgY3VycmVudCBjdW0tYWNrIGFzIHRoZSBzdGFydGluZyBwb2ludC4KLQkgKi8K
LQlhdCA9IDA7Ci0JZm9yIChzbGlkZV9mcm9tID0gMDsgc2xpZGVfZnJvbSA8IHN0Y2ItPmFzb2Mu
bWFwcGluZ19hcnJheV9zaXplOyBzbGlkZV9mcm9tKyspIHsKLQkJdmFsID0gYXNvYy0+bnJfbWFw
cGluZ19hcnJheVtzbGlkZV9mcm9tXSB8IGFzb2MtPm1hcHBpbmdfYXJyYXlbc2xpZGVfZnJvbV07
Ci0JCWlmICh2YWwgPT0gMHhmZikgewotCQkJYXQgKz0gODsKLQkJfSBlbHNlIHsKLQkJCS8qIHRo
ZXJlIGlzIGEgMCBiaXQgKi8KLQkJCWF0ICs9IHNjdHBfbWFwX2xvb2t1cF90YWJbdmFsXTsKLQkJ
CWJyZWFrOwotCQl9Ci0JfQotCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0gYXNvYy0+bWFwcGluZ19h
cnJheV9iYXNlX3RzbiArIChhdC0xKTsKLQotCWlmIChTQ1RQX1RTTl9HVChhc29jLT5jdW11bGF0
aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkgJiYKLSAgICAgICAgICAgIFND
VFBfVFNOX0dUKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bnJfbWFwKSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoImh1aCwgY3VtYWNrIDB4JXgg
Z3JlYXRlciB0aGFuIGhpZ2gtdHNuIDB4JXggaW4gbWFwIiwKLQkJICAgICAgYXNvYy0+Y3VtdWxh
dGl2ZV90c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApOwotI2Vsc2UKLQkJU0NUUF9Q
UklOVEYoImh1aCwgY3VtYWNrIDB4JXggZ3JlYXRlciB0aGFuIGhpZ2gtdHNuIDB4JXggaW4gbWFw
IC0gc2hvdWxkIHBhbmljP1xuIiwKLQkJCSAgICBhc29jLT5jdW11bGF0aXZlX3RzbiwgYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX21hcCk7Ci0JCXNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShhc29j
KTsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQ
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19tYXAoMCwgNiwgYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVTVUxUKTsKLQkJfQotCQlhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247Ci0JCWFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5jdW11bGF0aXZlX3RzbjsKLSNlbmRpZgotCX0K
LQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbnJfbWFwOwotCX0gZWxzZSB7Ci0JCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX21hcDsKLQl9Ci0JaWYgKChhc29jLT5jdW11bGF0aXZlX3RzbiA9PSBo
aWdoZXN0X3RzbikgJiYgKGF0ID49IDgpKSB7Ci0JCS8qIFRoZSBjb21wbGV0ZSBhcnJheSB3YXMg
Y29tcGxldGVkIGJ5IGEgc2luZ2xlIEZSICovCi0JCS8qIGhpZ2hlc3QgYmVjb21lcyB0aGUgY3Vt
LWFjayAqLwotCQlpbnQgY2xyOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJdW5zaWduZWQgaW50IGk7
Ci0jZW5kaWYKLQotCQkvKiBjbGVhciB0aGUgYXJyYXkgKi8KLQkJY2xyID0gKChhdCs3KSA+PiAz
KTsKLQkJaWYgKGNsciA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSkgewotCQkJY2xyID0gYXNv
Yy0+bWFwcGluZ19hcnJheV9zaXplOwotCQl9Ci0JCW1lbXNldChhc29jLT5tYXBwaW5nX2FycmF5
LCAwLCBjbHIpOwotCQltZW1zZXQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgMCwgY2xyKTsKLSNp
ZmRlZiBJTlZBUklBTlRTCi0JCWZvciAoaSA9IDA7IGkgPCBhc29jLT5tYXBwaW5nX2FycmF5X3Np
emU7IGkrKykgewotCQkJaWYgKChhc29jLT5tYXBwaW5nX2FycmF5W2ldKSB8fCAoYXNvYy0+bnJf
bWFwcGluZ19hcnJheVtpXSkpIHsKLQkJCQlTQ1RQX1BSSU5URigiRXJyb3IgTWFwcGluZyBhcnJh
eSdzIG5vdCBjbGVhbiBhdCBjbGVhclxuIik7Ci0JCQkJc2N0cF9wcmludF9tYXBwaW5nX2FycmF5
KGFzb2MpOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rz
biA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuICsgMTsKLQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X25yX21hcCA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5jdW11bGF0aXZl
X3RzbjsKLQl9IGVsc2UgaWYgKGF0ID49IDgpIHsKLQkJLyogd2UgY2FuIHNsaWRlIHRoZSBtYXBw
aW5nIGFycmF5IGRvd24gKi8KLQkJLyogc2xpZGVfZnJvbSBob2xkcyB3aGVyZSB3ZSBoaXQgdGhl
IGZpcnN0IE5PTiAweGZmIGJ5dGUgKi8KLQotCQkvKgotCQkgKiBub3cgY2FsY3VsYXRlIHRoZSBj
ZWlsaW5nIG9mIHRoZSBtb3ZlIHVzaW5nIG91ciBoaWdoZXN0Ci0JCSAqIFRTTiB2YWx1ZQotCQkg
Ki8KLQkJU0NUUF9DQUxDX1RTTl9UT19HQVAobGdhcCwgaGlnaGVzdF90c24sIGFzb2MtPm1hcHBp
bmdfYXJyYXlfYmFzZV90c24pOwotCQlzbGlkZV9lbmQgPSAobGdhcCA+PiAzKTsKLQkJaWYgKHNs
aWRlX2VuZCA8IHNsaWRlX2Zyb20pIHsKLQkJCXNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShhc29j
KTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQlwYW5pYygiaW1wb3NzaWJsZSBzbGlkZSIpOwotI2Vs
c2UKLQkJCVNDVFBfUFJJTlRGKCJpbXBvc3NpYmxlIHNsaWRlIGxnYXA6ICV4IHNsaWRlX2VuZDog
JXggc2xpZGVfZnJvbTogJXg/IGF0OiAlZFxuIiwKLQkJCSAgICAgICAgICAgIGxnYXAsIHNsaWRl
X2VuZCwgc2xpZGVfZnJvbSwgYXQpOwotCQkJcmV0dXJuOwotI2VuZGlmCi0JCX0KLQkJaWYgKHNs
aWRlX2VuZCA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSkgewotI2lmZGVmIElOVkFSSUFOVFMK
LQkJCXBhbmljKCJ3b3VsZCBvdmVycnVuIGJ1ZmZlciIpOwotI2Vsc2UKLQkJCVNDVFBfUFJJTlRG
KCJHYWssIHdvdWxkIGhhdmUgb3ZlcnJ1biBtYXAgZW5kOiAlZCBzbGlkZV9lbmQ6ICVkXG4iLAot
CQkJICAgICAgICAgICAgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLCBzbGlkZV9lbmQpOwotCQkJ
c2xpZGVfZW5kID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOwotI2VuZGlmCi0JCX0KLQkJZGlz
dGFuY2UgPSAoc2xpZGVfZW5kIC0gc2xpZGVfZnJvbSkgKyAxOwotCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKLQkJ
CXNjdHBfbG9nX21hcChvbGRfYmFzZSwgb2xkX2N1bWFjaywgb2xkX2hpZ2hlc3QsCi0JCQkJICAg
ICBTQ1RQX01BUF9QUkVQQVJFX1NMSURFKTsKLQkJCXNjdHBfbG9nX21hcCgodWludDMyX3QpIHNs
aWRlX2Zyb20sICh1aW50MzJfdCkgc2xpZGVfZW5kLAotCQkJCSAgICAgKHVpbnQzMl90KSBsZ2Fw
LCBTQ1RQX01BUF9TTElERV9GUk9NKTsKLQkJfQotCQlpZiAoZGlzdGFuY2UgKyBzbGlkZV9mcm9t
ID4gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplIHx8Ci0JCSAgICBkaXN0YW5jZSA8IDApIHsKLQkJ
CS8qCi0JCQkgKiBIZXJlIHdlIGRvIE5PVCBzbGlkZSBmb3J3YXJkIHRoZSBhcnJheSBzbyB0aGF0
Ci0JCQkgKiBob3BlZnVsbHkgd2hlbiBtb3JlIGRhdGEgY29tZXMgaW4gdG8gZmlsbCBpdCB1cAot
CQkJICogd2Ugd2lsbCBiZSBhYmxlIHRvIHNsaWRlIGl0IGZvcndhcmQuIFJlYWxseSBJCi0JCQkg
KiBkb24ndCB0aGluayB0aGlzIHNob3VsZCBoYXBwZW4gOi0wCi0JCQkgKi8KLQotCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5B
QkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWFwKCh1aW50MzJfdCkgZGlzdGFuY2UsICh1aW50MzJfdCkg
c2xpZGVfZnJvbSwKLQkJCQkJICAgICAodWludDMyX3QpIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6
ZSwKLQkJCQkJICAgICBTQ1RQX01BUF9TTElERV9OT05FKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CWludCBpaTsKLQotCQkJZm9yIChpaSA9IDA7IGlpIDwgZGlzdGFuY2U7IGlpKyspIHsKLQkJCQlh
c29jLT5tYXBwaW5nX2FycmF5W2lpXSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlbc2xpZGVfZnJvbSAr
IGlpXTsKLQkJCQlhc29jLT5ucl9tYXBwaW5nX2FycmF5W2lpXSA9IGFzb2MtPm5yX21hcHBpbmdf
YXJyYXlbc2xpZGVfZnJvbSArIGlpXTsKLQotCQkJfQotCQkJZm9yIChpaSA9IGRpc3RhbmNlOyBp
aSA8IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgaWkrKykgewotCQkJCWFzb2MtPm1hcHBpbmdf
YXJyYXlbaWldID0gMDsKLQkJCQlhc29jLT5ucl9tYXBwaW5nX2FycmF5W2lpXSA9IDA7Ci0JCQl9
Ci0JCQlpZiAoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCArIDEgPT0gYXNvYy0+bWFwcGlu
Z19hcnJheV9iYXNlX3RzbikgewotCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgKz0g
KHNsaWRlX2Zyb20gPDwgMyk7Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X25yX21hcCArIDEgPT0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgewotCQkJCWFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKz0gKHNsaWRlX2Zyb20gPDwgMyk7Ci0JCQl9Ci0J
CQlhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICs9IChzbGlkZV9mcm9tIDw8IDMpOwotCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJ
TkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWFwKGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90
c24sCi0JCQkJCSAgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2lu
c2lkZV9tYXAsCi0JCQkJCSAgICAgU0NUUF9NQVBfU0xJREVfUkVTVUxUKTsKLQkJCX0KLQkJfQot
CX0KLX0KLQotdm9pZAotc2N0cF9zYWNrX2NoZWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50
IHdhc19hX2dhcCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQl1aW50MzJf
dCBoaWdoZXN0X3RzbjsKLQlpbnQgaXNfYV9nYXA7Ci0KLQlzY3RwX3NsaWRlX21hcHBpbmdfYXJy
YXlzKHN0Y2IpOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkp
IHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOwotCX0g
ZWxzZSB7Ci0JCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKLQl9
Ci0JLyogSXMgdGhlcmUgYSBnYXAgbm93PyAqLwotCWlzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGln
aGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c24pOwotCi0JLyoKLQkgKiBOb3cgd2Ug
bmVlZCB0byBzZWUgaWYgd2UgbmVlZCB0byBxdWV1ZSBhIHNhY2sgb3IganVzdCBzdGFydCB0aGUK
LQkgKiB0aW1lciAoaWYgYWxsb3dlZCkuCi0JICovCi0JaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2Mp
ID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgewotCQkvKgotCQkgKiBPayBzcGVjaWFsIGNh
c2UsIGluIFNIVVRET1dOLVNFTlQgY2FzZS4gaGVyZSB3ZQotCQkgKiBtYWtlciBzdXJlIFNBQ0sg
dGltZXIgaXMgb2ZmIGFuZCBpbnN0ZWFkIHNlbmQgYQotCQkgKiBTSFVURE9XTiBhbmQgYSBTQUNL
Ci0JCSAqLwotCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZzdGNiLT5hc29jLmRhY2tfdGlt
ZXIudGltZXIpKSB7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0J
CQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCwKLQkJCSAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xNyk7Ci0JCX0KLQkJc2N0
cF9zZW5kX3NodXRkb3duKHN0Y2IsCi0JCSAgICAgICAgICAgICAgICAgICAoKHN0Y2ItPmFzb2Mu
YWx0ZXJuYXRlKSA/IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlIDogc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uKSk7Ci0JCWlmIChpc19hX2dhcCkgewotCQkJc2N0cF9zZW5kX3NhY2soc3RjYiwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIENNVCBEQUMg
YWxnb3JpdGhtOiBpbmNyZWFzZSBudW1iZXIgb2YgcGFja2V0cwotCQkgKiByZWNlaXZlZCBzaW5j
ZSBsYXN0IGFjawotCQkgKi8KLQkJc3RjYi0+YXNvYy5jbXRfZGFjX3BrdHNfcmN2ZCsrOwotCi0J
CWlmICgoc3RjYi0+YXNvYy5zZW5kX3NhY2sgPT0gMSkgfHwgICAgICAvKiBXZSBuZWVkIHRvIHNl
bmQgYSBTQUNLICovCi0JCSAgICAoKHdhc19hX2dhcCkgJiYgKGlzX2FfZ2FwID09IDApKSB8fAkv
KiB3YXMgYSBnYXAsIGJ1dCBubwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogbG9uZ2VyIGlzIG9uZSAqLwotCQkgICAgKHN0Y2ItPmFzb2MubnVtZHVwdHNucykg
fHwgICAgICAgICAgLyogd2UgaGF2ZSBkdXAncyAqLwotCQkgICAgKGlzX2FfZ2FwKSB8fCAgICAg
ICAgICAgICAgICAgICAgICAgLyogaXMgc3RpbGwgYSBnYXAgKi8KLQkJICAgIChzdGNiLT5hc29j
LmRlbGF5ZWRfYWNrID09IDApIHx8ICAgIC8qIERlbGF5ZWQgc2FjayBkaXNhYmxlZCAqLwotCQkg
ICAgKHN0Y2ItPmFzb2MuZGF0YV9wa3RzX3NlZW4gPj0gc3RjYi0+YXNvYy5zYWNrX2ZyZXEpCS8q
IGhpdCBsaW1pdCBvZiBwa3RzICovCi0JCQkpIHsKLQotCQkJaWYgKChzdGNiLT5hc29jLnNjdHBf
Y210X29uX29mZiA+IDApICYmCi0JCQkgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNl
X2RhYykpICYmCi0JCQkgICAgKHN0Y2ItPmFzb2Muc2VuZF9zYWNrID09IDApICYmCi0JCQkgICAg
KHN0Y2ItPmFzb2MubnVtZHVwdHNucyA9PSAwKSAmJgotCQkJICAgIChzdGNiLT5hc29jLmRlbGF5
ZWRfYWNrKSAmJgotCQkJICAgICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZzdGNiLT5hc29jLmRh
Y2tfdGltZXIudGltZXIpKSkgewotCi0JCQkJLyoKLQkJCQkgKiBDTVQgREFDIGFsZ29yaXRobTog
V2l0aCBDTVQsCi0JCQkJICogZGVsYXkgYWNrcyBldmVuIGluIHRoZSBmYWNlIG9mCi0KLQkJCQkg
KiByZW9yZGVyaW5nLiBUaGVyZWZvcmUsIGlmIGFja3MKLQkJCQkgKiB0aGF0IGRvIG5vdCBoYXZl
IHRvIGJlIHNlbnQKLQkJCQkgKiBiZWNhdXNlIG9mIHRoZSBhYm92ZSByZWFzb25zLAotCQkJCSAq
IHdpbGwgYmUgZGVsYXllZC4gVGhhdCBpcywgYWNrcwotCQkJCSAqIHRoYXQgd291bGQgaGF2ZSBi
ZWVuIHNlbnQgZHVlIHRvCi0JCQkJICogZ2FwIHJlcG9ydHMgd2lsbCBiZSBkZWxheWVkIHdpdGgK
LQkJCQkgKiBEQUMuIFN0YXJ0IHRoZSBkZWxheWVkIGFjayB0aW1lci4KLQkJCQkgKi8KLQkJCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAotCQkJCSAgICAgICAgICAgICAg
ICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJ
ICogT2sgd2UgbXVzdCBidWlsZCBhIFNBQ0sgc2luY2UgdGhlCi0JCQkJICogdGltZXIgaXMgcGVu
ZGluZywgd2UgZ290IG91cgotCQkJCSAqIGZpcnN0IHBhY2tldCBPUiB0aGVyZSBhcmUgZ2FwcyBv
cgotCQkJCSAqIGR1cGxpY2F0ZXMuCi0JCQkJICovCi0JCQkJKHZvaWQpU0NUUF9PU19USU1FUl9T
VE9QKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpOwotCQkJCXNjdHBfc2VuZF9zYWNrKHN0
Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoIVNDVFBf
T1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkgewotCQkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0JCQkJICAgICAgICAgICAgICAg
ICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotaW50Ci1z
Y3RwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgbWJ1ZiAqKm1tLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNl
dCwgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgdWludDMyX3QgKmhpZ2hfdHNuKQotewotCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aCwgY2h1bmtfYnVmOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCWludCBudW1f
Y2h1bmtzID0gMDsJLyogbnVtYmVyIG9mIGNvbnRyb2wgY2h1bmtzIHByb2Nlc3NlZCAqLwotCWlu
dCBzdG9wX3Byb2MgPSAwOwotCWludCBjaGtfbGVuZ3RoLCBicmVha19mbGFnLCBsYXN0X2NodW5r
OwotCWludCBhYm9ydF9mbGFnID0gMCwgd2FzX2FfZ2FwOwotCXN0cnVjdCBtYnVmICptOwotCXVp
bnQzMl90IGhpZ2hlc3RfdHNuOwotCi0JLyogc2V0IHRoZSByd25kICovCi0Jc2N0cF9zZXRfcndu
ZChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0KLQltID0gKm1tOwotCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsK
LQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOwotCX0gZWxz
ZSB7Ci0JCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKLQl9Ci0J
d2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2
ZV90c24pOwotCS8qCi0JICogc2V0dXAgd2hlcmUgd2UgZ290IHRoZSBsYXN0IERBVEEgcGFja2V0
IGZyb20gZm9yIGFueSBTQUNLIHRoYXQKLQkgKiBtYXkgbmVlZCB0byBnbyBvdXQuIERvbid0IGJ1
bXAgdGhlIG5ldC4gVGhpcyBpcyBkb25lIE9OTFkgd2hlbiBhCi0JICogY2h1bmsgaXMgYXNzaWdu
ZWQuCi0JICovCi0JYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20gPSBuZXQ7Ci0KLSNpZm5kZWYg
X19QYW5kYV9fCi0JLyotCi0JICogTm93IGJlZm9yZSB3ZSBwcm9jZWVkIHdlIG11c3QgZmlndXJl
IG91dCBpZiB0aGlzIGlzIGEgd2FzdGVkCi0JICogY2x1c3Rlci4uLiBpLmUuIGl0IGlzIGEgc21h
bGwgcGFja2V0IHNlbnQgaW4gYW5kIHlldCB0aGUgZHJpdmVyCi0JICogdW5kZXJuZWF0aCBhbGxv
Y2F0ZWQgYSBmdWxsIGNsdXN0ZXIgZm9yIGl0LiBJZiBzbyB3ZSBtdXN0IGNvcHkgaXQKLQkgKiB0
byBhIHNtYWxsZXIgbWJ1ZiBhbmQgZnJlZSB1cCB0aGUgY2x1c3RlciBtYnVmLiBUaGlzIHdpbGwg
aGVscAotCSAqIHdpdGggY2x1c3RlciBzdGFydmF0aW9uLiBOb3RlIGZvciBfX1BhbmRhX18gd2Ug
ZG9uJ3QgZG8gdGhpcwotCSAqIHNpbmNlIGl0IGhhcyBjbHVzdGVycyBhbGwgdGhlIHdheSBkb3du
IHRvIDY0IGJ5dGVzLgotCSAqLwotCWlmIChTQ1RQX0JVRl9MRU4obSkgPCAobG9uZylNTEVOICYm
IFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgewotCQkvKiB3ZSBvbmx5IGhhbmRsZSBtYnVmcyB0
aGF0IGFyZSBzaW5nbGV0b25zLi4gbm90IGNoYWlucyAqLwotCQltID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKFNDVFBfQlVGX0xFTihtKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAo
bSkgewotCQkJLyogb2sgbGV0cyBzZWUgaWYgd2UgY2FuIGNvcHkgdGhlIGRhdGEgdXAgKi8KLQkJ
CWNhZGRyX3QgKmZyb20sICp0bzsKLQkJCS8qIGdldCB0aGUgcG9pbnRlcnMgYW5kIGNvcHkgKi8K
LQkJCXRvID0gbXRvZChtLCBjYWRkcl90ICopOwotCQkJZnJvbSA9IG10b2QoKCptbSksIGNhZGRy
X3QgKik7Ci0JCQltZW1jcHkodG8sIGZyb20sIFNDVFBfQlVGX0xFTigoKm1tKSkpOwotCQkJLyog
Y29weSB0aGUgbGVuZ3RoIGFuZCBmcmVlIHVwIHRoZSBvbGQgKi8KLQkJCVNDVFBfQlVGX0xFTiht
KSA9IFNDVFBfQlVGX0xFTigoKm1tKSk7Ci0JCQlzY3RwX21fZnJlZW0oKm1tKTsKLQkJCS8qIHN1
Y2Nlc3MsIGJhY2sgY29weSAqLwotCQkJKm1tID0gbTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGFy
ZSBpbiB0cm91YmxlIGluIHRoZSBtYnVmIHdvcmxkIC4uIHlpa2VzICovCi0JCQltID0gKm1tOwot
CQl9Ci0JfQotI2VuZGlmCi0JLyogZ2V0IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNodW5rIGhlYWRl
ciAqLwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zm
c2V0LAotCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCAodWludDhfdCAq
KSAmIGNodW5rX2J1Zik7Ci0JaWYgKGNoID09IE5VTEwpIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci0J
LyoKLQkgKiBwcm9jZXNzIGFsbCBEQVRBIGNodW5rcy4uLgotCSAqLwotCSpoaWdoX3RzbiA9IGFz
b2MtPmN1bXVsYXRpdmVfdHNuOwotCWJyZWFrX2ZsYWcgPSAwOwotCWFzb2MtPmRhdGFfcGt0c19z
ZWVuKys7Ci0Jd2hpbGUgKHN0b3BfcHJvYyA9PSAwKSB7Ci0JCS8qIHZhbGlkYXRlIGNodW5rIGxl
bmd0aCAqLwotCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7Ci0JCWlmIChs
ZW5ndGggLSAqb2Zmc2V0IDwgY2hrX2xlbmd0aCkgewotCQkJLyogYWxsIGRvbmUsIG11dHVsYXRl
ZCBjaHVuayAqLwotCQkJc3RvcF9wcm9jID0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgo
YXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpICYmCi0JCSAgICAoY2gtPmNodW5rX3R5cGUgPT0g
U0NUUF9EQVRBKSkgewotCQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJCWNoYXIgbXNnW1NDVFBf
RElBR19JTkZPX0xFTl07Ci0KLQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJJ
LURBVEEgY2h1bmsgcmVjZWl2ZWQgd2hlbiBEQVRBIHdhcyBuZWdvdGlhdGVkIik7Ci0JCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBt
c2cpOwotCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICsgU0NUUF9MT0NfMTg7Ci0JCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwg
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJcmV0dXJuICgyKTsKLQkJfQot
CQlpZiAoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJgotCQkgICAgKGNoLT5jaHVua190
eXBlID09IFNDVFBfSURBVEEpKSB7Ci0JCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCQkJY2hhciBt
c2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwg
IiVzIiwgIkRBVEEgY2h1bmsgcmVjZWl2ZWQgd2hlbiBJLURBVEEgd2FzIG5lZ290aWF0ZWQiKTsK
LQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9M
QVRJT04sIG1zZyk7Ci0JCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZS
T01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xOTsKLQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRp
b24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQlyZXR1cm4gKDIp
OwotCQl9Ci0JCWlmICgoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9EQVRBKSB8fAotCQkgICAgKGNo
LT5jaHVua190eXBlID09IFNDVFBfSURBVEEpKSB7Ci0JCQlpbnQgY2xlbjsKLQotCQkJaWYgKGNo
LT5jaHVua190eXBlID09IFNDVFBfREFUQSkgewotCQkJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNj
dHBfZGF0YV9jaHVuayk7Ci0JCQl9IGVsc2UgewotCQkJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNj
dHBfaWRhdGFfY2h1bmspOwotCQkJfQotCQkJaWYgKGNoa19sZW5ndGggPCBjbGVuKSB7Ci0JCQkJ
LyoKLQkJCQkgKiBOZWVkIHRvIHNlbmQgYW4gYWJvcnQgc2luY2Ugd2UgaGFkIGEKLQkJCQkgKiBp
bnZhbGlkIGRhdGEgY2h1bmsuCi0JCQkJICovCi0JCQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJ
CQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQkJc25wcmludGYobXNnLCBzaXpl
b2YobXNnKSwgIkRBVEEgY2h1bmsgb2YgbGVuZ3RoICVkIiwKLQkJCQkgICAgICAgICBjaGtfbGVu
Z3RoKTsKLQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9D
T0xfVklPTEFUSU9OLCBtc2cpOwotCQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9
IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzIwOwotCQkJCXNjdHBfYWJvcnRfYW5f
YXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJ
cmV0dXJuICgyKTsKLQkJCX0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJCXNjdHBf
YXVkaXRfbG9nKDB4QjEsIDApOwotI2VuZGlmCi0JCQlpZiAoU0NUUF9TSVpFMzIoY2hrX2xlbmd0
aCkgPT0gKGxlbmd0aCAtICpvZmZzZXQpKSB7Ci0JCQkJbGFzdF9jaHVuayA9IDE7Ci0JCQl9IGVs
c2UgewotCQkJCWxhc3RfY2h1bmsgPSAwOwotCQkJfQotCQkJaWYgKHNjdHBfcHJvY2Vzc19hX2Rh
dGFfY2h1bmsoc3RjYiwgYXNvYywgbW0sICpvZmZzZXQsIAotCQkJCQkJICAgICAgY2hrX2xlbmd0
aCwgbmV0LCBoaWdoX3RzbiwgJmFib3J0X2ZsYWcsICZicmVha19mbGFnLAotCQkJCQkJICAgICAg
bGFzdF9jaHVuaywgY2gtPmNodW5rX3R5cGUpKSB7Ci0JCQkJbnVtX2NodW5rcysrOwotCQkJfQot
CQkJaWYgKGFib3J0X2ZsYWcpCi0JCQkJcmV0dXJuICgyKTsKLQotCQkJaWYgKGJyZWFrX2ZsYWcp
IHsKLQkJCQkvKgotCQkJCSAqIFNldCBiZWNhdXNlIG9mIG91dCBvZiByd25kIHNwYWNlIGFuZCBu
bwotCQkJCSAqIGRyb3AgcmVwIHNwYWNlIGxlZnQuCi0JCQkJICovCi0JCQkJc3RvcF9wcm9jID0g
MTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIG5vdCBhIGRhdGEgY2h1
bmsgaW4gdGhlIGRhdGEgcmVnaW9uICovCi0JCQlzd2l0Y2ggKGNoLT5jaHVua190eXBlKSB7Ci0J
CQljYXNlIFNDVFBfSU5JVElBVElPTjoKLQkJCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoKLQkJ
CWNhc2UgU0NUUF9TRUxFQ1RJVkVfQUNLOgotCQkJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0s6
Ci0JCQljYXNlIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q6Ci0JCQljYXNlIFNDVFBfSEVBUlRCRUFU
X0FDSzoKLQkJCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjoKLQkJCWNhc2UgU0NUUF9TSFVU
RE9XTjoKLQkJCWNhc2UgU0NUUF9TSFVURE9XTl9BQ0s6Ci0JCQljYXNlIFNDVFBfT1BFUkFUSU9O
X0VSUk9SOgotCQkJY2FzZSBTQ1RQX0NPT0tJRV9FQ0hPOgotCQkJY2FzZSBTQ1RQX0NPT0tJRV9B
Q0s6Ci0JCQljYXNlIFNDVFBfRUNOX0VDSE86Ci0JCQljYXNlIFNDVFBfRUNOX0NXUjoKLQkJCWNh
c2UgU0NUUF9TSFVURE9XTl9DT01QTEVURToKLQkJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoK
LQkJCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgot
CQkJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVDoKLQkJCWNhc2UgU0NUUF9GT1JXQVJEX0NVTV9UU046
Ci0JCQljYXNlIFNDVFBfQVNDT05GOgotCQkJewotCQkJCS8qCi0JCQkJICogTm93LCB3aGF0IGRv
IHdlIGRvIHdpdGggS05PV04gY2h1bmtzIHRoYXQKLQkJCQkgKiBhcmUgTk9UIGluIHRoZSByaWdo
dCBwbGFjZT8KLQkJCQkgKgotCQkJCSAqIEZvciBub3csIEkgZG8gbm90aGluZyBidXQgaWdub3Jl
IHRoZW0uIFdlCi0JCQkJICogbWF5IGxhdGVyIHdhbnQgdG8gYWRkIHN5c2N0bCBzdHVmZiB0bwot
CQkJCSAqIHN3aXRjaCBvdXQgYW5kIGRvIGVpdGhlciBhbiBBQk9SVCgpIG9yCi0JCQkJICogcG9z
c2libHkgcHJvY2VzcyB0aGVtLgotCQkJCSAqLwotCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0J
CQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQkJCXNucHJpbnRmKG1zZywgc2l6
ZW9mKG1zZyksICJEQVRBIGNodW5rIGZvbGxvd2VkIGJ5IGNodW5rIG9mIHR5cGUgJTIuMngiLAot
CQkJCSAgICAgICAgIGNoLT5jaHVua190eXBlKTsKLQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwotCQkJCXNjdHBfYWJv
cnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JCQkJcmV0dXJuICgyKTsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJLyogdW5rbm93biBjaHVu
ayB0eXBlLCB1c2UgYml0IHJ1bGVzICovCi0JCQkJaWYgKGNoLT5jaHVua190eXBlICYgMHg0MCkg
ewotCQkJCQkvKiBBZGQgYSBlcnJvciByZXBvcnQgdG8gdGhlIHF1ZXVlICovCi0JCQkJCXN0cnVj
dCBtYnVmICpvcF9lcnI7Ci0JCQkJCXN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqY2F1c2U7
Ci0KLQkJCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0
cF9nZW5fZXJyb3JfY2F1c2UpLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQkJCQlpZiAob3BfZXJyICE9IE5VTEwpIHsKLQkJ
CQkJCWNhdXNlICA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKik7
Ci0JCQkJCQljYXVzZS0+Y29kZSA9IGh0b25zKFNDVFBfQ0FVU0VfVU5SRUNPR19DSFVOSyk7Ci0J
CQkJCQljYXVzZS0+bGVuZ3RoID0gaHRvbnMoKHVpbnQxNl90KShjaGtfbGVuZ3RoICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSkpKTsKLQkJCQkJCVNDVFBfQlVGX0xFTihvcF9l
cnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSk7Ci0JCQkJCQlTQ1RQX0JV
Rl9ORVhUKG9wX2VycikgPSBTQ1RQX01fQ09QWU0obSwgKm9mZnNldCwgY2hrX2xlbmd0aCwgTV9O
T1dBSVQpOwotCQkJCQkJaWYgKFNDVFBfQlVGX05FWFQob3BfZXJyKSAhPSBOVUxMKSB7Ci0JCQkJ
CQkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJ
CQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYg
KChjaC0+Y2h1bmtfdHlwZSAmIDB4ODApID09IDApIHsKLQkJCQkJLyogZGlzY2FyZCB0aGUgcmVz
dCBvZiB0aGlzIHBhY2tldCAqLwotCQkJCQlzdG9wX3Byb2MgPSAxOwotCQkJCX0JLyogZWxzZSBz
a2lwIHRoaXMgYmFkIGNodW5rIGFuZAotCQkJCQkgKiBjb250aW51ZS4uLiAqLwotCQkJCWJyZWFr
OwotCQkJfQkvKiBzd2l0Y2ggb2YgY2h1bmsgdHlwZSAqLwotCQl9Ci0JCSpvZmZzZXQgKz0gU0NU
UF9TSVpFMzIoY2hrX2xlbmd0aCk7Ci0JCWlmICgoKm9mZnNldCA+PSBsZW5ndGgpIHx8IHN0b3Bf
cHJvYykgewotCQkJLyogbm8gbW9yZSBkYXRhIGxlZnQgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJ
CXN0b3BfcHJvYyA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQljaCA9IChzdHJ1Y3Qgc2N0cF9j
aHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKLQkJCQkJCQkgICAgIHNpemVvZihz
dHJ1Y3Qgc2N0cF9jaHVua2hkciksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKLQkJaWYgKGNo
ID09IE5VTEwpIHsKLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlzdG9wX3Byb2MgPSAxOwotCQkJ
Y29udGludWU7Ci0JCX0KLQl9Ci0JaWYgKGJyZWFrX2ZsYWcpIHsKLQkJLyoKLQkJICogd2UgbmVl
ZCB0byByZXBvcnQgcnduZCBvdmVycnVuIGRyb3BzLgotCQkgKi8KLQkJc2N0cF9zZW5kX3BhY2tl
dF9kcm9wcGVkKHN0Y2IsIG5ldCwgKm1tLCBsZW5ndGgsIGlwaGxlbiwgMCk7Ci0JfQotCWlmIChu
dW1fY2h1bmtzKSB7Ci0JCS8qCi0JCSAqIERpZCB3ZSBnZXQgZGF0YSwgaWYgc28gdXBkYXRlIHRo
ZSB0aW1lIGZvciBhdXRvLWNsb3NlIGFuZAotCQkgKiBnaXZlIHBlZXIgY3JlZGl0IGZvciBiZWlu
ZyBhbGl2ZS4KLQkJICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zwa3R3aXRoZGF0YSk7
Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVT
SE9MRF9MT0dHSU5HKSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwK
LQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCSAgICAgICAw
LAotCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEsCi0JCQkJICAgICAgIF9fTElORV9f
KTsKLQkJfQotCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkodm9pZClT
Q1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2xhc3RfcmN2ZCk7Ci0JfQotCS8q
IG5vdyBzZXJ2aWNlIGFsbCBvZiB0aGUgcmVhc3NtIHF1ZXVlIGlmIG5lZWRlZCAqLwotCWlmIChT
Q1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKLQkJLyog
QXNzdXJlIHRoYXQgd2UgYWNrIHJpZ2h0IGF3YXkgKi8KLQkJc3RjYi0+YXNvYy5zZW5kX3NhY2sg
PSAxOwotCX0KLQkvKiBTdGFydCBhIHNhY2sgdGltZXIgb3IgUVVFVUUgYSBTQUNLIGZvciBzZW5k
aW5nICovCi0Jc2N0cF9zYWNrX2NoZWNrKHN0Y2IsIHdhc19hX2dhcCk7Ci0JcmV0dXJuICgwKTsK
LX0KLQotc3RhdGljIGludAotc2N0cF9wcm9jZXNzX3NlZ21lbnRfcmFuZ2Uoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqcF90cDEsIHVpbnQzMl90IGxhc3Rf
dHNuLAotCQkJICAgdWludDE2X3QgZnJhZ19zdHJ0LCB1aW50MTZfdCBmcmFnX2VuZCwgaW50IG5y
X3NhY2tpbmcsCi0JCQkgICBpbnQgKm51bV9mcnMsCi0JCQkgICB1aW50MzJfdCAqYmlnZ2VzdF9u
ZXdseV9hY2tlZF90c24sCi0JCQkgICB1aW50MzJfdCAgKnRoaXNfc2Fja19sb3dlc3RfbmV3YWNr
LAotCQkJICAgaW50ICpydG9fb2spCi17Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwot
CXVuc2lnbmVkIGludCB0aGVUU047Ci0JaW50IGosIHdha2VfaGltID0gMCwgY2lyY2xlZCA9IDA7
Ci0KLQkvKiBSZWNvdmVyIHRoZSB0cDEgd2UgbGFzdCBzYXcgKi8KLQl0cDEgPSAqcF90cDE7Ci0J
aWYgKHRwMSA9PSBOVUxMKSB7Ci0JCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRf
cXVldWUpOwotCX0KLQlmb3IgKGogPSBmcmFnX3N0cnQ7IGogPD0gZnJhZ19lbmQ7IGorKykgewot
CQl0aGVUU04gPSBqICsgbGFzdF90c247Ci0JCXdoaWxlICh0cDEpIHsKLQkJCWlmICh0cDEtPnJl
Yy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCkKLQkJCQkoKm51bV9mcnMpICs9IDE7Ci0KLQkJ
CS8qLQotCQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZvciBlYWNoIFRTTiBiZWluZwotCQkJ
ICogcHJvY2Vzc2VkIGZyb20gdGhlIHNlbnQgcXVldWUsIHRyYWNrIHRoZQotCQkJICogbmV4dCBl
eHBlY3RlZCBwc2V1ZG8tY3VtYWNrLCBvcgotCQkJICogcnR4X3BzZXVkb19jdW1hY2ssIGlmIHJl
cXVpcmVkLiBTZXBhcmF0ZQotCQkJICogY3VtYWNrIHRyYWNrZXJzIGZvciBmaXJzdCB0cmFuc21p
c3Npb25zLAotCQkJICogYW5kIHJldHJhbnNtaXNzaW9ucy4KLQkJCSAqLwotCQkJaWYgKCh0cDEt
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKLQkJCSAgICAodHAxLT53aG9Uby0+Zmlu
ZF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCi0JCQkgICAgKHRwMS0+c25kX2NvdW50ID09IDEpKSB7
Ci0JCQkJdHAxLT53aG9Uby0+cHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNuOwotCQkJ
CXRwMS0+d2hvVG8tPmZpbmRfcHNldWRvX2N1bWFjayA9IDA7Ci0JCQl9Ci0JCQlpZiAoKHRwMS0+
c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSAmJgotCQkJICAgICh0cDEtPndob1RvLT5maW5k
X3J0eF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCi0JCQkgICAgKHRwMS0+c25kX2NvdW50ID4gMSkp
IHsKLQkJCQl0cDEtPndob1RvLT5ydHhfcHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNu
OwotCQkJCXRwMS0+d2hvVG8tPmZpbmRfcnR4X3BzZXVkb19jdW1hY2sgPSAwOwotCQkJfQotCQkJ
aWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRoZVRTTikgewotCQkJCWlmICh0cDEtPnNlbnQgIT0g
U0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJCQkJLyotCi0JCQkJCSAqIG11c3QgYmUgaGVsZCB1
bnRpbAotCQkJCQkgKiBjdW0tYWNrIHBhc3NlcwotCQkJCQkgKi8KLQkJCQkJaWYgKHRwMS0+c2Vu
dCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCQkvKi0KLQkJCQkJCSAqIElmIGl0IGlz
IGxlc3MgdGhhbiBSRVNFTkQsIGl0IGlzCi0JCQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdo
dC4KLQkJCQkJCSAqIEhpZ2hlciB2YWx1ZXMgbWF5IGFscmVhZHkgYmUgc2V0Ci0JCQkJCQkgKiB2
aWEgcHJldmlvdXMgR2FwIEFjayBCbG9ja3MuLi4KLQkJCQkJCSAqIGkuZS4gQUNLRUQgb3IgUkVT
RU5ELgotCQkJCQkJICovCi0JCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24s
Ci0JCQkJCQkgICAgICAgICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuKSkgewotCQkJ
CQkJCSpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiA9IHRwMS0+cmVjLmRhdGEudHNuOwotCQkJCQkJ
fQotCQkJCQkJLyotCi0JCQkJCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQgSFROQSkgLSBzZXQKLQkJ
CQkJCSAqIHNhd19uZXdhY2sgdG8gMSBmb3IgZGVzdCBiZWluZwotCQkJCQkJICogbmV3bHkgYWNr
ZWQuIHVwZGF0ZQotCQkJCQkJICogdGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrIGlmCi0JCQkJCQkg
KiBhcHByb3ByaWF0ZS4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtf
d2FzX3Jldm9rZWQgPT0gMCkKLQkJCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNrID0gMTsKLQot
CQkJCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkJICAgICAgICAg
ICAgICAgIHRwMS0+d2hvVG8tPnRoaXNfc2Fja19oaWdoZXN0X25ld2FjaykpIHsKLQkJCQkJCQl0
cDEtPndob1RvLT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgPQotCQkJCQkJCQl0cDEtPnJlYy5k
YXRhLnRzbjsKLQkJCQkJCX0KLQkJCQkJCS8qLQotCQkJCQkJICogQ01UIERBQyBhbGdvOiBhbHNv
IHVwZGF0ZQotCQkJCQkJICogdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sKLQkJCQkJCSAqLwotCQkJ
CQkJaWYgKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9PSAwKSB7Ci0JCQkJCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dHSU5HX0VOQUJM
RSkgewotCQkJCQkJCQlzY3RwX2xvZ19zYWNrKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKLQkJ
CQkJCQkJCSAgICAgIGxhc3RfdHNuLAotCQkJCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24s
Ci0JCQkJCQkJCQkgICAgICAwLAotCQkJCQkJCQkJICAgICAgMCwKLQkJCQkJCQkJCSAgICAgIFND
VFBfTE9HX1RTTl9BQ0tFRCk7Ci0JCQkJCQkJfQotCQkJCQkJCSp0aGlzX3NhY2tfbG93ZXN0X25l
d2FjayA9IHRwMS0+cmVjLmRhdGEudHNuOwotCQkJCQkJfQotCQkJCQkJLyotCi0JCQkJCQkgKiBD
TVQ6IENVQ3YyIGFsZ29yaXRobS4gSWYgKHJ0eC0pcHNldWRvLWN1bWFjayBmb3IgY29ycmVzcAot
CQkJCQkJICogZGVzdCBpcyBiZWluZyBhY2tlZCwgdGhlbiB3ZSBoYXZlIGEgbmV3IChydHgtKXBz
ZXVkby1jdW1hY2suIFNldAotCQkJCQkJICogbmV3XyhydHhfKXBzZXVkb19jdW1hY2sgdG8gVFJV
RSBzbyB0aGF0IHRoZSBjd25kIGZvciB0aGlzIGRlc3QgY2FuIGJlCi0JCQkJCQkgKiB1cGRhdGVk
LiBBbHNvIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dCBleHBlY3RlZCAocnR4LSlwc2V1ZG8t
Y3VtYWNrLgotCQkJCQkJICogU2VwYXJhdGUgcHNldWRvX2N1bWFjayB0cmFja2VycyBmb3IgZmly
c3QgdHJhbnNtaXNzaW9ucyBhbmQKLQkJCQkJCSAqIHJldHJhbnNtaXNzaW9ucy4KLQkJCQkJCSAq
LwotCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRwMS0+d2hvVG8tPnBzZXVkb19jdW1h
Y2spIHsKLQkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7
Ci0JCQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKLQkJCQkJCQl9Ci0J
CQkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKLQkJCQkJCX0KLQkJCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIHRwMS0+d2hvVG8sIHRw
MS0+cmVjLmRhdGEudHNuLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7Ci0JCQkJCQl9Ci0JCQkJ
CQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHAxLT53aG9Uby0+cnR4X3BzZXVkb19jdW1hY2sp
IHsKLQkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7Ci0J
CQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKLQkJCQkJCQl9Ci0JCQkJ
CQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7Ci0JCQkJCQl9Ci0JCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9sb2dfc2FjaygqYmlnZ2VzdF9uZXdseV9hY2tl
ZF90c24sCi0JCQkJCQkJCSAgICAgIGxhc3RfdHNuLAotCQkJCQkJCQkgICAgICB0cDEtPnJlYy5k
YXRhLnRzbiwKLQkJCQkJCQkJICAgICAgZnJhZ19zdHJ0LAotCQkJCQkJCQkgICAgICBmcmFnX2Vu
ZCwKLQkJCQkJCQkJICAgICAgU0NUUF9MT0dfVFNOX0FDS0VEKTsKLQkJCQkJCX0KLQkJCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dO
X0dBUCwKLQkJCQkJCQkJICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkJCQkg
ICAgICAgdHAxLT5ib29rX3NpemUsCi0JCQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJf
dCl0cDEtPndob1RvLAotCQkJCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCQkJ
fQotCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwotCQkJCQkJaWYgKHN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgewot
CQkJCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNr
bm93bGVkZ2VkKSh0cDEtPndob1RvLAotCQkJCQkJCQkJCQkJCQkgICAgIHRwMSk7Ci0JCQkJCQl9
Ci0JCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCi0JCQkJCQl0
cDEtPndob1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOwotCQkJCQkJaWYgKHRwMS0+c25k
X2NvdW50IDwgMikgewotCQkJCQkJCS8qLQotCQkJCQkJCSAqIFRydWUgbm9uLXJldHJhbnNtaXRl
ZCBjaHVuawotCQkJCQkJCSAqLwotCQkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2syICs9IHRwMS0+
c2VuZF9zaXplOwotCi0JCQkJCQkJLyotCi0JCQkJCQkJICogdXBkYXRlIFJUTyB0b28gPwotCQkJ
CQkJCSAqLwotCQkJCQkJCWlmICh0cDEtPmRvX3J0dCkgewotCQkJCQkJCQlpZiAoKnJ0b19vaykg
ewotCQkJCQkJCQkJdHAxLT53aG9Uby0+UlRPID0KLQkJCQkJCQkJCQlzY3RwX2NhbGN1bGF0ZV9y
dG8oc3RjYiwKLQkJCQkJCQkJCQkJCSAgICZzdGNiLT5hc29jLAotCQkJCQkJCQkJCQkJICAgdHAx
LT53aG9UbywKLQkJCQkJCQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3RpbWUsCi0JCQkJCQkJCQkJ
CQkgICBzY3RwX2FsaWduX3NhZmVfbm9jb3B5LAotCQkJCQkJCQkJCQkJICAgU0NUUF9SVFRfRlJP
TV9EQVRBKTsKLQkJCQkJCQkJCSpydG9fb2sgPSAwOwotCQkJCQkJCQl9Ci0JCQkJCQkJCWlmICh0
cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKLQkJCQkJCQkJCXRwMS0+d2hvVG8tPnJ0b19u
ZWVkZWQgPSAxOwotCQkJCQkJCQl9Ci0JCQkJCQkJCXRwMS0+ZG9fcnR0ID0gMDsKLQkJCQkJCQl9
Ci0JCQkJCQl9Ci0KLQkJCQkJfQotCQkJCQlpZiAodHAxLT5zZW50IDw9IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7Ci0JCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sCi0JCQkJ
CQkgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50aGlzX3NhY2tfaGlnaGVzdF9nYXApKSB7Ci0J
CQkJCQkJc3RjYi0+YXNvYy50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPQotCQkJCQkJCQl0cDEtPnJl
Yy5kYXRhLnRzbjsKLQkJCQkJCX0KLQkJCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JB
TV9SRVNFTkQpIHsKLQkJCQkJCQlzY3RwX3Vjb3VudF9kZWNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1
ZV9yZXRyYW5fY250KTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJCQkJCQlzY3Rw
X2F1ZGl0X2xvZygweEIyLAotCQkJCQkJCQkgICAgICAgKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9y
ZXRyYW5fY250ICYgMHgwMDAwMDBmZikpOwotI2VuZGlmCi0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJ
LyotCi0JCQkJCSAqIEFsbCBjaHVua3MgTk9UIFVOU0VOVCBmYWxsIHRocm91Z2ggaGVyZSBhbmQg
YXJlIG1hcmtlZAotCQkJCQkgKiAobGVhdmUgUFItU0NUUCBvbmVzIHRoYXQgYXJlIHRvIHNraXAg
YWxvbmUgdGhvdWdoKQotCQkJCQkgKi8KLQkJCQkJaWYgKCh0cDEtPnNlbnQgIT0gU0NUUF9GT1JX
QVJEX1RTTl9TS0lQKSAmJgotCQkJCQkgICAgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05S
X0FDS0VEKSkgewotCQkJCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9NQVJLRUQ7Ci0JCQkJ
CX0KLQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQpIHsKLQkJCQkJCS8q
IGRlZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29r
X3NpemU7Ci0JCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKLQkJCQkJ
fQotCQkJCQkvKiBOUiBTYWNrIGNvZGUgaGVyZSAqLwotCQkJCQlpZiAobnJfc2Fja2luZyAmJgot
CQkJCQkgICAgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgewotCQkJCQkJ
aWYgKHN0Y2ItPmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVl
cyA+IDApIHsKLQkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNo
dW5rc19vbl9xdWV1ZXMtLTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCQl9IGVsc2UgewotCQkJ
CQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIHRwMS0+cmVj
LmRhdGEuc2lkKTsKLSNlbmRpZgotCQkJCQkJfQotCQkJCQkJaWYgKChzdGNiLT5hc29jLnN0cm1v
dXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPT0gMCkgJiYKLQkJCQkJCSAg
ICAoc3RjYi0+YXNvYy5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5zdGF0ZSA9PSBTQ1RQX1NU
UkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29j
LnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgewotCQkJCQkJCXN0Y2ItPmFz
b2MudHJpZ2dlcl9yZXNldCA9IDE7Ci0JCQkJCQl9Ci0JCQkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX05SX0FDS0VEOwotCQkJCQkJaWYgKHRwMS0+ZGF0YSkgewotCQkJCQkJCS8qIHNhX2ln
bm9yZSBOT19OVUxMX0NISyAqLwotCQkJCQkJCXNjdHBfZnJlZV9idWZzcGFjZShzdGNiLCAmc3Rj
Yi0+YXNvYywgdHAxLCAxKTsKLQkJCQkJCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKLQkJCQkJ
CQl0cDEtPmRhdGEgPSBOVUxMOwotCQkJCQkJfQotCQkJCQkJd2FrZV9oaW0rKzsKLQkJCQkJfQot
CQkJCX0KLQkJCQlicmVhazsKLQkJCX0JLyogaWYgKHRwMS0+dHNuID09IHRoZVRTTikgKi8KLQkJ
CWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgdGhlVFNOKSkgewotCQkJCWJyZWFr
OwotCQkJfQotCQkJdHAxID0gVEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4dCk7Ci0JCQlpZiAoKHRw
MSA9PSBOVUxMKSAmJiAoY2lyY2xlZCA9PSAwKSkgewotCQkJCWNpcmNsZWQrKzsKLQkJCQl0cDEg
PSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKTsKLQkJCX0KLQkJfQkvKiBlbmQg
d2hpbGUgKHRwMSkgKi8KLQkJaWYgKHRwMSA9PSBOVUxMKSB7Ci0JCQljaXJjbGVkID0gMDsKLQkJ
CXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwotCQl9Ci0JCS8qIElu
IGNhc2UgdGhlIGZyYWdtZW50cyB3ZXJlIG5vdCBpbiBvcmRlciB3ZSBtdXN0IHJlc2V0ICovCi0J
fSAvKiBlbmQgZm9yIChqID0gZnJhZ1N0YXJ0ICovCi0JKnBfdHAxID0gdHAxOwotCXJldHVybiAo
d2FrZV9oaW0pOwkvKiBSZXR1cm4gdmFsdWUgb25seSB1c2VkIGZvciBuci1zYWNrICovCi19Ci0K
LQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfc2VnbWVudHMoc3RydWN0IG1idWYgKm0sIGludCAq
b2Zmc2V0LCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAotCQl1aW50MzJfdCBsYXN0X3RzbiwgdWludDMyX3QgKmJpZ2dlc3RfdHNuX2Fja2VkLAot
CQl1aW50MzJfdCAqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24sIHVpbnQzMl90ICp0aGlzX3NhY2tf
bG93ZXN0X25ld2FjaywKLQkJaW50IG51bV9zZWcsIGludCBudW1fbnJfc2VnLCBpbnQgKnJ0b19v
aykKLXsKLQlzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrICpmcmFnLCBibG9jazsKLQlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICp0cDE7Ci0JaW50IGk7Ci0JaW50IG51bV9mcnMgPSAwOwotCWludCBj
aHVua19mcmVlZDsKLQlpbnQgbm9uX3Jldm9jYWJsZTsKLQl1aW50MTZfdCBmcmFnX3N0cnQsIGZy
YWdfZW5kLCBwcmV2X2ZyYWdfZW5kOwotCi0JdHAxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNlbnRf
cXVldWUpOwotCXByZXZfZnJhZ19lbmQgPSAwOwotCWNodW5rX2ZyZWVkID0gMDsKLQotCWZvciAo
aSA9IDA7IGkgPCAobnVtX3NlZyArIG51bV9ucl9zZWcpOyBpKyspIHsKLQkJaWYgKGkgPT0gbnVt
X3NlZykgewotCQkJcHJldl9mcmFnX2VuZCA9IDA7Ci0JCQl0cDEgPSBUQUlMUV9GSVJTVCgmYXNv
Yy0+c2VudF9xdWV1ZSk7Ci0JCX0KLQkJZnJhZyA9IChzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2Nr
ICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2Nr
KSwgKHVpbnQ4X3QgKikgJmJsb2NrKTsKLQkJKm9mZnNldCArPSBzaXplb2YoYmxvY2spOwotCQlp
ZiAoZnJhZyA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gKGNodW5rX2ZyZWVkKTsKLQkJfQotCQlmcmFn
X3N0cnQgPSBudG9ocyhmcmFnLT5zdGFydCk7Ci0JCWZyYWdfZW5kID0gbnRvaHMoZnJhZy0+ZW5k
KTsKLQotCQlpZiAoZnJhZ19zdHJ0ID4gZnJhZ19lbmQpIHsKLQkJCS8qIFRoaXMgZ2FwIHJlcG9y
dCBpcyBtYWxmb3JtZWQsIHNraXAgaXQuICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoZnJh
Z19zdHJ0IDw9IHByZXZfZnJhZ19lbmQpIHsKLQkJCS8qIFRoaXMgZ2FwIHJlcG9ydCBpcyBub3Qg
aW4gb3JkZXIsIHNvIHJlc3RhcnQuICovCi0JCQkgdHAxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNl
bnRfcXVldWUpOwotCQl9Ci0JCWlmIChTQ1RQX1RTTl9HVCgobGFzdF90c24gKyBmcmFnX2VuZCks
ICpiaWdnZXN0X3Rzbl9hY2tlZCkpIHsKLQkJCSpiaWdnZXN0X3Rzbl9hY2tlZCA9IGxhc3RfdHNu
ICsgZnJhZ19lbmQ7Ci0JCX0KLQkJaWYgKGkgPCBudW1fc2VnKSB7Ci0JCQlub25fcmV2b2NhYmxl
ID0gMDsKLQkJfSBlbHNlIHsKLQkJCW5vbl9yZXZvY2FibGUgPSAxOwotCQl9Ci0JCWlmIChzY3Rw
X3Byb2Nlc3Nfc2VnbWVudF9yYW5nZShzdGNiLCAmdHAxLCBsYXN0X3RzbiwgZnJhZ19zdHJ0LCBm
cmFnX2VuZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbl9yZXZvY2FibGUs
ICZudW1fZnJzLCBiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLCBydG9fb2spKSB7Ci0JCQljaHVu
a19mcmVlZCA9IDE7Ci0JCX0KLQkJcHJldl9mcmFnX2VuZCA9IGZyYWdfZW5kOwotCX0KLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VO
QUJMRSkgewotCQlpZiAobnVtX2ZycykKLQkJCXNjdHBfbG9nX2ZyKCpiaWdnZXN0X3Rzbl9hY2tl
ZCwKLQkJCSAgICAgICAgICAgICpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiwKLQkJCSAgICAgICAg
ICAgIGxhc3RfdHNuLCBTQ1RQX0ZSX0xPR19CSUdHRVNUX1RTTlMpOwotCX0KLQlyZXR1cm4gKGNo
dW5rX2ZyZWVkKTsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfY2hlY2tfZm9yX3Jldm9rZWQoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAotCQkgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MsIHVpbnQzMl90IGN1bWFjaywKLQkJICAgICAgIHVpbnQzMl90IGJpZ2dlc3RfdHNuX2Fja2Vk
KQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKLQotCVRBSUxRX0ZPUkVBQ0godHAx
LCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChTQ1RQX1RTTl9HVCh0cDEt
PnJlYy5kYXRhLnRzbiwgY3VtYWNrKSkgewotCQkJLyoKLQkJCSAqIG9rIHRoaXMgZ3V5IGlzIGVp
dGhlciBBQ0sgb3IgTUFSS0VELiBJZiBpdCBpcwotCQkJICogQUNLRUQgaXQgaGFzIGJlZW4gcHJl
dmlvdXNseSBhY2tlZCBidXQgbm90IHRoaXMKLQkJCSAqIHRpbWUgaS5lLiByZXZva2VkLiAgSWYg
aXQgaXMgTUFSS0VEIGl0IHdhcyBBQ0snZWQKLQkJCSAqIGFnYWluLgotCQkJICovCi0JCQlpZiAo
U0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGJpZ2dlc3RfdHNuX2Fja2VkKSkgewotCQkJ
CWJyZWFrOwotCQkJfQotCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7
Ci0JCQkJLyogaXQgaGFzIGJlZW4gcmV2b2tlZCAqLwotCQkJCXRwMS0+c2VudCA9IFNDVFBfREFU
QUdSQU1fU0VOVDsKLQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMTsKLQkJ
CQkvKiBXZSBtdXN0IGFkZCB0aGlzIHN0dWZmIGJhY2sgaW4gdG8KLQkJCQkgKiBhc3N1cmUgdGlt
ZXJzIGFuZCBzdWNoIGdldCBzdGFydGVkLgotCQkJCSAqLwotCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVBfUkVWT0tFLAotCQkJCQkJICAg
ICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkJICAgICAgIHRwMS0+Ym9va19zaXpl
LAotCQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+d2hvVG8sCi0JCQkJCQkg
ICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCX0KLQkJCQlzY3RwX2ZsaWdodF9zaXplX2lu
Y3JlYXNlKHRwMSk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsK
LQkJCQkvKiBXZSBpbmZsYXRlIHRoZSBjd25kIHRvIGNvbXBlbnNhdGUgZm9yIG91cgotCQkJCSAq
IGFydGlmaWNpYWwgaW5mbGF0aW9uIG9mIHRoZSBmbGlnaHRfc2l6ZS4KLQkJCQkgKi8KLQkJCQl0
cDEtPndob1RvLT5jd25kICs9IHRwMS0+Ym9va19zaXplOwotCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKLQkJ
CQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2VkX3NlcSwKLQkJCQkJCSAgICAgIGN1bWFj
aywKLQkJCQkJCSAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkJICAgICAgMCwKLQkJCQkJ
CSAgICAgIDAsCi0JCQkJCQkgICAgICBTQ1RQX0xPR19UU05fUkVWT0tFRCk7Ci0JCQkJfQotCQkJ
fSBlbHNlIGlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9NQVJLRUQpIHsKLQkJCQkvKiBp
dCBoYXMgYmVlbiByZS1hY2tlZCBpbiB0aGlzIFNBQ0sgKi8KLQkJCQl0cDEtPnNlbnQgPSBTQ1RQ
X0RBVEFHUkFNX0FDS0VEOwotCQkJfQotCQl9Ci0JCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRB
R1JBTV9VTlNFTlQpCi0JCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3Ry
aWtlX2dhcF9hY2tfY2h1bmtzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2MsCi0JCQkgICB1aW50MzJfdCBiaWdnZXN0X3Rzbl9hY2tlZCwgdWludDMy
X3QgYmlnZ2VzdF90c25fbmV3bHlfYWNrZWQsIHVpbnQzMl90IHRoaXNfc2Fja19sb3dlc3RfbmV3
YWNrLCBpbnQgYWNjdW1fbW92ZWQpCi17Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwot
CWludCBzdHJpa2VfZmxhZyA9IDA7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwotCWludCB0b3RfcmV0
cmFucyA9IDA7Ci0JdWludDMyX3Qgc2VuZGluZ19zZXE7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0
OwotCWludCBudW1fZGVzdHNfc2Fja2VkID0gMDsKLQotCS8qCi0JICogc2VsZWN0IHRoZSBzZW5k
aW5nX3NlcSwgdGhpcyBpcyBlaXRoZXIgdGhlIG5leHQgdGhpbmcgcmVhZHkgdG8gYmUKLQkgKiBz
ZW50IGJ1dCBub3QgdHJhbnNtaXR0ZWQsIE9SLCB0aGUgbmV4dCBzZXEgd2UgYXNzaWduLgotCSAq
LwotCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpOwotCWlmICh0cDEg
PT0gTlVMTCkgewotCQlzZW5kaW5nX3NlcSA9IGFzb2MtPnNlbmRpbmdfc2VxOwotCX0gZWxzZSB7
Ci0JCXNlbmRpbmdfc2VxID0gdHAxLT5yZWMuZGF0YS50c247Ci0JfQotCi0JLyogQ01UIERBQyBh
bGdvOiBmaW5kaW5nIG91dCBpZiBTQUNLIGlzIGEgbWl4ZWQgU0FDSyAqLwotCWlmICgoYXNvYy0+
c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91
c2VfZGFjKSkgewotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkg
ewotCQkJaWYgKG5ldC0+c2F3X25ld2FjaykKLQkJCQludW1fZGVzdHNfc2Fja2VkKys7Ci0JCX0K
LQl9Ci0JaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCkgewotCQkodm9pZClTQ1RQX0dF
VFRJTUVfVElNRVZBTCgmbm93KTsKLQl9Ci0JVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50
X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJc3RyaWtlX2ZsYWcgPSAwOwotCQlpZiAodHAxLT5ub19m
cl9hbGxvd2VkKSB7Ci0JCQkvKiB0aGlzIG9uZSBoYWQgYSB0aW1lb3V0IG9yIHNvbWV0aGluZyAq
LwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKLQkJCWlmICh0cDEtPnNlbnQgPCBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQlzY3RwX2xvZ19mcihiaWdnZXN0X3Rzbl9uZXdseV9h
Y2tlZCwKLQkJCQkJICAgIHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkgICAgdHAxLT5zZW50LAot
CQkJCQkgICAgU0NUUF9GUl9MT0dfQ0hFQ0tfU1RSSUtFKTsKLQkJfQotCQlpZiAoU0NUUF9UU05f
R1QodHAxLT5yZWMuZGF0YS50c24sIGJpZ2dlc3RfdHNuX2Fja2VkKSB8fAotCQkgICAgdHAxLT5z
ZW50ID09IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7Ci0JCQkvKiBkb25lICovCi0JCQlicmVhazsK
LQkJfQotCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSB7Ci0JCQlpZiAoKFBSX1ND
VFBfVFRMX0VOQUJMRUQodHAxLT5mbGFncykpICYmIHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1f
QUNLRUQpIHsKLQkJCQkvKiBJcyBpdCBleHBpcmVkPyAqLwotI2lmbmRlZiBfX0ZyZWVCU0RfXwot
CQkJCWlmICh0aW1lcmNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9wLCA+KSkgewot
I2Vsc2UKLQkJCQlpZiAodGltZXZhbGNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9w
LCA+KSkgewotI2VuZGlmCi0JCQkJCS8qIFllcyBzbyBkcm9wIGl0ICovCi0JCQkJCWlmICh0cDEt
PmRhdGEgIT0gTlVMTCkgewotCQkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmso
c3RjYiwgdHAxLCAxLAotCQkJCQkJCQkJCSBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCQl9Ci0J
CQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCWlmIChTQ1RQX1RTTl9HVCh0cDEt
PnJlYy5kYXRhLnRzbiwgYXNvYy0+dGhpc19zYWNrX2hpZ2hlc3RfZ2FwKSkgewotCQkJLyogd2Ug
YXJlIGJleW9uZCB0aGUgdHNuIGluIHRoZSBzYWNrICAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYg
KHRwMS0+c2VudCA+PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJLyogZWl0aGVyIGEgUkVT
RU5ELCBBQ0tFRCwgb3IgTUFSS0VEICovCi0JCQkvKiBza2lwICovCi0JCQlpZiAodHAxLT5zZW50
ID09IFNDVFBfRk9SV0FSRF9UU05fU0tJUCkgewotCQkJCS8qIENvbnRpbnVlIHN0cmlraW4gRldE
LVRTTiBjaHVua3MgKi8KLQkJCQl0cDEtPnJlYy5kYXRhLmZ3ZF90c25fY250Kys7Ci0JCQl9Ci0J
CQljb250aW51ZTsKLQkJfQotCQkvKgotCQkgKiBDTVQgOiBTRlIgYWxnbyAoY292ZXJzIHBhcnQg
b2YgREFDIGFuZCBIVE5BIGFzIHdlbGwpCi0JCSAqLwotCQlpZiAodHAxLT53aG9UbyAmJiB0cDEt
Pndob1RvLT5zYXdfbmV3YWNrID09IDApIHsKLQkJCS8qCi0JCQkgKiBObyBuZXcgYWNrcyB3ZXJl
IHJlY2VpZXZlZCBmb3IgZGF0YSBzZW50IHRvIHRoaXMKLQkJCSAqIGRlc3QuIFRoZXJlZm9yZSwg
YWNjb3JkaW5nIHRvIHRoZSBTRlIgYWxnbyBmb3IKLQkJCSAqIENNVCwgbm8gZGF0YSBzZW50IHRv
IHRoaXMgZGVzdCBjYW4gYmUgbWFya2VkIGZvcgotCQkJICogRlIgdXNpbmcgdGhpcyBTQUNLLgot
CQkJICovCi0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICh0cDEtPndob1RvICYmIFNDVFBfVFNO
X0dUKHRwMS0+cmVjLmRhdGEudHNuLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHAxLT53aG9Uby0+dGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrKSkgewotCQkJLyoKLQkJ
CSAqIENNVDogTmV3IGFja3Mgd2VyZSByZWNlaWV2ZWQgZm9yIGRhdGEgc2VudCB0bwotCQkJICog
dGhpcyBkZXN0LiBCdXQgbm8gbmV3IGFja3Mgd2VyZSBzZWVuIGZvciBkYXRhCi0JCQkgKiBzZW50
IGFmdGVyIHRwMS4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUgotCQkJICogYWxnbyBm
b3IgQ01ULCB0cDEgY2Fubm90IGJlIG1hcmtlZCBmb3IgRlIgdXNpbmcKLQkJCSAqIHRoaXMgU0FD
Sy4gVGhpcyBzdGVwIGNvdmVycyBwYXJ0IG9mIHRoZSBEQUMgYWxnbwotCQkJICogYW5kIHRoZSBI
VE5BIGFsZ28gYXMgd2VsbC4KLQkJCSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJLyoKLQkJICog
SGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgd2Ugd2VyZSBoYXZlIGFscmVhZHkgZG9uZSBhIEZSCi0J
CSAqIGFuZCBpZiBzbyB3ZSBzZWUgaWYgdGhlIGJpZ2dlc3QgVFNOIHdlIHNhdyBpbiB0aGUgc2Fj
ayBpcwotCQkgKiBzbWFsbGVyIHRoYW4gdGhlIHJlY292ZXJ5IHBvaW50LiBJZiBzbyB3ZSBkb24n
dCBzdHJpa2UKLQkJICogdGhlIHRzbi4uLiBvdGhlcndpc2Ugd2UgQ0FOIHN0cmlrZSB0aGUgVFNO
LgotCQkgKi8KLQkJLyoKLQkJICogQEBAIEpSSTogQ2hlY2sgZm9yIENNVAotCQkgKiBpZiAoYWNj
dW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiAoc2N0cF9jbXRf
b25fb2ZmID09IDApKSB7Ci0JCSAqLwotCQlpZiAoYWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9y
ZXRyYW5fbG9zc19yZWNvdmVyeSkgewotCQkJLyoKLQkJCSAqIFN0cmlrZSB0aGUgVFNOIGlmIGlu
IGZhc3QtcmVjb3ZlcnkgYW5kIGN1bS1hY2sKLQkJCSAqIG1vdmVkLgotCQkJICovCi0JCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VO
QUJMRSkgewotCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCQkg
ICAgdHAxLT5yZWMuZGF0YS50c24sCi0JCQkJCSAgICB0cDEtPnNlbnQsCi0JCQkJCSAgICBTQ1RQ
X0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJfQotCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7Ci0JCQkJdHAxLT5zZW50Kys7Ci0JCQl9Ci0JCQlpZiAoKGFzb2MtPnNj
dHBfY210X29uX29mZiA+IDApICYmCi0JCQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91
c2VfZGFjKSkgewotCQkJCS8qCi0JCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxh
ZyBpcyBzZXQgdG8KLQkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBw
YXNzCi0JCQkJICogYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQotCQkJCSAq
IGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQotCQkJCSAqIHJ0eCdkLCBJZiBu
b3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEgaXMKLQkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fj
a2VkIFRTTnMsIHRoZW4gbWFyayBieQotCQkJCSAqIG9uZSBtb3JlLgotCQkJCSAqIE5PVEUgdGhh
dCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERB
QyBmbGFnIGluZGljYXRlcyB0aGF0Ci0JCQkJICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2Vp
dmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCi0JCQkJICovCi0JCQkJaWYgKCh0cDEtPnNlbnQg
PCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKLQkJ
CQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEu
dHNuKSkgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfZnIoMTYgKyBudW1fZGVz
dHNfc2Fja2VkLAotCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkgICAgdHAx
LT5zZW50LAotCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJCQl9Ci0J
CQkJCXRwMS0+c2VudCsrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlmICgodHAxLT5yZWMuZGF0
YS5kb2luZ19mYXN0X3JldHJhbnNtaXQpICYmCi0JCSAgICAgICAgICAgKGFzb2MtPnNjdHBfY210
X29uX29mZiA9PSAwKSkgewotCQkJLyoKLQkJCSAqIEZvciB0aG9zZSB0aGF0IGhhdmUgZG9uZSBh
IEZSIHdlIG11c3QgdGFrZQotCQkJICogc3BlY2lhbCBjb25zaWRlcmF0aW9uIGlmIHdlIHN0cmlr
ZS4gSS5lIHRoZQotCQkJICogYmlnZ2VzdF9uZXdseV9hY2tlZCBtdXN0IGJlIGhpZ2hlciB0aGFu
IHRoZQotCQkJICogc2VuZGluZ19zZXEgYXQgdGhlIHRpbWUgd2UgZGlkIHRoZSBGUi4KLQkJCSAq
LwotCQkJaWYgKAotI2lmZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCi0JCQkJLyoKLQkJCQkgKiBJ
ZiBGUidzIGdvIHRvIG5ldyBuZXR3b3JrcywgdGhlbiB3ZSBtdXN0IG9ubHkgZG8KLQkJCQkgKiB0
aGlzIGZvciBzaW5nbHkgaG9tZWQgYXNvYydzLiBIb3dldmVyIGlmIHRoZSBGUidzCi0JCQkJICog
Z28gdG8gdGhlIHNhbWUgbmV0d29yayAoQXJtYW5kbydzIHdvcmspIHRoZW4gaXRzCi0JCQkJICog
b2sgdG8gRlIgbXVsdGlwbGUgdGltZXMuCi0JCQkJICovCi0JCQkJKGFzb2MtPm51bW5ldHMgPCAy
KQotI2Vsc2UKLQkJCQkoMSkKLSNlbmRpZgotCQkJCSkgewotCi0JCQkJaWYgKFNDVFBfVFNOX0dF
KGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCSAgICAgICAgICAgICAgICB0cDEtPnJlYy5k
YXRhLmZhc3RfcmV0cmFuX3RzbikpIHsKLQkJCQkJLyoKLQkJCQkJICogU3RyaWtlIHRoZSBUU04s
IHNpbmNlIHRoaXMgYWNrIGlzCi0JCQkJCSAqIGJleW9uZCB3aGVyZSB0aGluZ3Mgd2VyZSB3aGVu
IHdlCi0JCQkJCSAqIGRpZCBhIEZSLgotCQkJCQkgKi8KLQkJCQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJ
CXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCQkJCSAgICB0cDEtPnJl
Yy5kYXRhLnRzbiwKLQkJCQkJCQkgICAgdHAxLT5zZW50LAotCQkJCQkJCSAgICBTQ1RQX0ZSX0xP
R19TVFJJS0VfQ0hVTkspOwotCQkJCQl9Ci0JCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgewotCQkJCQkJdHAxLT5zZW50Kys7Ci0JCQkJCX0KLQkJCQkJc3RyaWtlX2Zs
YWcgPSAxOwotCQkJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCQkJCSAg
ICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSB7Ci0JCQkJCQkvKgotCQkJCQkJ
ICogQ01UIERBQyBhbGdvcml0aG06IElmCi0JCQkJCQkgKiBTQUNLIGZsYWcgaXMgc2V0IHRvIDAs
Ci0JCQkJCQkgKiB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdAotCQkJCQkJICogd2lsbCBub3QgcGFz
cyBiZWNhdXNlIGl0Ci0JCQkJCQkgKiB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvCi0JCQkJCQkgKiB0
aGUgY3VtYWNrIGVhcmxpZXIuIElmCi0JCQkJCQkgKiBub3QgYWxyZWFkeSB0byBiZSBydHgnZCwK
LQkJCQkJCSAqIElmIG5vdCBhIG1peGVkIHNhY2sgYW5kCi0JCQkJCQkgKiBpZiB0cDEgaXMgbm90
IGJldHdlZW4gdHdvCi0JCQkJCQkgKiBzYWNrZWQgVFNOcywgdGhlbiBtYXJrIGJ5Ci0JCQkJCQkg
KiBvbmUgbW9yZS4KLQkJCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRk
aXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0Ci0JCQkJ
CQkgKiB0d28gcGFja2V0cyBoYXZlIGJlZW4gcmVjZWl2ZWQgYWZ0ZXIgdGhpcyBtaXNzaW5nIFRT
Ti4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VO
RCkgJiYKLQkJCQkJCSAgICAobnVtX2Rlc3RzX3NhY2tlZCA9PSAxKSAmJgotCQkJCQkJICAgIFND
VFBfVFNOX0dUKHRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLAotCQkJCQkJICAgICAgICAgICAgICAg
IHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJCXNjdHBf
bG9nX2ZyKDMyICsgbnVtX2Rlc3RzX3NhY2tlZCwKLQkJCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRh
LnRzbiwKLQkJCQkJCQkJCSAgICB0cDEtPnNlbnQsCi0JCQkJCQkJCQkgICAgU0NUUF9GUl9MT0df
U1RSSUtFX0NIVU5LKTsKLQkJCQkJCQl9Ci0JCQkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7Ci0JCQkJCQkJCXRwMS0+c2VudCsrOwotCQkJCQkJCX0KLQkJCQkJCX0K
LQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBKUkk6IFRPRE86IHJlbW92ZSBjb2Rl
IGZvciBIVE5BIGFsZ28uIENNVCdzCi0JCQkgKiBTRlIgYWxnbyBjb3ZlcnMgSFROQS4KLQkJCSAq
LwotCQl9IGVsc2UgaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAotCQkgICAgICAg
ICAgICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkKSkgewotCQkJLyoKLQkJCSAq
IFdlIGRvbid0IHN0cmlrZSB0aGVzZTogVGhpcyBpcyB0aGUgIEhUTkEKLQkJCSAqIGFsZ29yaXRo
bSBpLmUuIHdlIGRvbid0IHN0cmlrZSBJZiBvdXIgVFNOIGlzCi0JCQkgKiBsYXJnZXIgdGhhbiB0
aGUgSGlnaGVzdCBUU04gTmV3bHkgQWNrZWQuCi0JCQkgKi8KLQkJCTsKLQkJfSBlbHNlIHsKLQkJ
CS8qIFN0cmlrZSB0aGUgVFNOICovCi0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2ZyKGJp
Z2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCi0JCQkJ
CSAgICB0cDEtPnNlbnQsCi0JCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJ
fQotCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJdHAxLT5z
ZW50Kys7Ci0JCQl9Ci0JCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCQkg
ICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewotCQkJCS8qCi0JCQkJICog
Q01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8KLQkJCQkgKiAwLCB0aGVu
IGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBwYXNzCi0JCQkJICogYmVjYXVzZSBpdCB3b3Vs
ZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQotCQkJCSAqIGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxy
ZWFkeSB0byBiZQotCQkJCSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEg
aXMKLQkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRoZW4gbWFyayBieQotCQkJ
CSAqIG9uZSBtb3JlLgotCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRk
aXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0Ci0JCQkJ
ICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04u
Ci0JCQkJICovCi0JCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYg
KG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKLQkJCQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNr
X2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCQkJc2N0cF9sb2dfZnIoNDggKyBudW1fZGVzdHNfc2Fja2VkLAotCQkJCQkJCSAgICB0cDEt
PnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkgICAgdHAxLT5zZW50LAotCQkJCQkJCSAgICBTQ1RQX0ZS
X0xPR19TVFJJS0VfQ0hVTkspOwotCQkJCQl9Ci0JCQkJCXRwMS0+c2VudCsrOwotCQkJCX0KLQkJ
CX0KLQkJfQotCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQlz
dHJ1Y3Qgc2N0cF9uZXRzICphbHQ7Ci0KLQkJCS8qIGZpeCBjb3VudHMgYW5kIHRoaW5ncyAqLwot
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hU
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RP
V05fUlNORCwKLQkJCQkJICAgICAgICh0cDEtPndob1RvID8gKHRwMS0+d2hvVG8tPmZsaWdodF9z
aXplKSA6IDApLAotCQkJCQkgICAgICAgdHAxLT5ib29rX3NpemUsCi0JCQkJCSAgICAgICAodWlu
dDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAotCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50
c24pOwotCQkJfQotCQkJaWYgKHRwMS0+d2hvVG8pIHsKLQkJCQl0cDEtPndob1RvLT5uZXRfYWNr
Kys7Ci0JCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwotCQkJCWlmIChzdGNiLT5h
c29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJ
CQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3ds
ZWRnZWQpKHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkJCQkgICAgIHRwMSk7Ci0JCQkJfQotCQkJfQot
Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0df
UldORF9FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19yd25kKFNDVFBfSU5DUkVBU0VfUEVFUl9SV05E
LAotCQkJCQkgICAgICBhc29jLT5wZWVyc19yd25kLCB0cDEtPnNlbmRfc2l6ZSwgU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKTsKLQkJCX0KLQkJCS8qIGFkZCBiYWNrIHRvIHRo
ZSByd25kICovCi0JCQlhc29jLT5wZWVyc19yd25kICs9ICh0cDEtPnNlbmRfc2l6ZSArIFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSk7Ci0KLQkJCS8qIHJlbW92ZSBmcm9tIHRo
ZSB0b3RhbCBmbGlnaHQgKi8KLQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRw
MSk7Ci0KLQkJCWlmICgoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSAmJgotCQkJICAgIChQ
Ul9TQ1RQX1JUWF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSkgewotCQkJCS8qIEhhcyBpdCBiZWVuIHJl
dHJhbnNtaXR0ZWQgdHZfc2VjIHRpbWVzPyAtIHdlIHN0b3JlIHRoZSByZXRyYW4gY291bnQgdGhl
cmUuICovCi0JCQkJaWYgKHRwMS0+c25kX2NvdW50ID4gdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9w
LnR2X3NlYykgewotCQkJCQkvKiBZZXMsIHNvIGRyb3AgaXQgKi8KLQkJCQkJaWYgKHRwMS0+ZGF0
YSAhPSBOVUxMKSB7Ci0JCQkJCQkodm9pZClzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNi
LCB0cDEsIDEsCi0JCQkJCQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCX0KLQkJCQkJ
LyogTWFrZSBzdXJlIHRvIGZsYWcgd2UgaGFkIGEgRlIgKi8KLQkJCQkJdHAxLT53aG9Uby0+bmV0
X2FjaysrOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBTQ1RQX1BSSU5URigi
T0ssIHdlIGFyZSBub3cgcmVhZHkgdG8gRlIgdGhpcyBndXlcbiIpOyAqLwotCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUp
IHsKLQkJCQlzY3RwX2xvZ19mcih0cDEtPnJlYy5kYXRhLnRzbiwgdHAxLT5zbmRfY291bnQsCi0J
CQkJCSAgICAwLCBTQ1RQX0ZSX01BUktFRCk7Ci0JCQl9Ci0JCQlpZiAoc3RyaWtlX2ZsYWcpIHsK
LQkJCQkvKiBUaGlzIGlzIGEgc3Vic2VxdWVudCBGUiAqLwotCQkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3NlbmRtdWx0ZmFzdHJldHJhbnMpOwotCQkJfQotCQkJc2N0cF91Y291bnRfaW5jcihzdGNi
LT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQlpZiAoYXNvYy0+c2N0cF9jbXRfb25f
b2ZmID4gMCkgewotCQkJCS8qCi0JCQkJICogQ01UOiBVc2luZyBSVFhfU1NUSFJFU0ggcG9saWN5
IGZvciBDTVQuCi0JCQkJICogSWYgQ01UIGlzIGJlaW5nIHVzZWQsIHRoZW4gcGljayBkZXN0IHdp
dGgKLQkJCQkgKiBsYXJnZXN0IHNzdGhyZXNoIGZvciBhbnkgcmV0cmFuc21pc3Npb24uCi0JCQkJ
ICovCi0JCQkJdHAxLT5ub19mcl9hbGxvd2VkID0gMTsKLQkJCQlhbHQgPSB0cDEtPndob1RvOwot
CQkJCS8qc2FfaWdub3JlIE5PX05VTExfQ0hLKi8KLQkJCQlpZiAoYXNvYy0+c2N0cF9jbXRfcGYg
PiAwKSB7Ci0JCQkJCS8qIEpSUyA1LzE4LzA3IC0gSWYgQ01UIFBGIGlzIG9uLCB1c2UgdGhlIFBG
IHZlcnNpb24gb2YgZmluZF9hbHRfbmV0KCkgKi8KLQkJCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVy
bmF0ZV9uZXQoc3RjYiwgYWx0LCAyKTsKLQkJCQl9IGVsc2UgewotCQkJCQkvKiBKUlMgNS8xOC8w
NyAtIElmIG9ubHkgQ01UIGlzIG9uLCB1c2UgdGhlIENNVCB2ZXJzaW9uIG9mIGZpbmRfYWx0X25l
dCgpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLypzYV9pZ25v
cmUgTk9fTlVMTF9DSEsqLwotCQkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNi
LCBhbHQsIDEpOwotCQkJCX0KLQkJCQlpZiAoYWx0ID09IE5VTEwpIHsKLQkJCQkJYWx0ID0gdHAx
LT53aG9UbzsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBDVUN2MjogSWYgYSBkaWZmZXJlbnQgZGVz
dCBpcyBwaWNrZWQgZm9yCi0JCQkJICogdGhlIHJldHJhbnNtaXNzaW9uLCB0aGVuIG5ldwotCQkJ
CSAqIChydHgtKXBzZXVkb19jdW1hY2sgbmVlZHMgdG8gYmUgdHJhY2tlZAotCQkJCSAqIGZvciBv
cmlnIGRlc3QuIExldCBDVUN2MiB0cmFjayBuZXcgKHJ0eC0pCi0JCQkJICogcHNldWRvLWN1bWFj
ayBhbHdheXMuCi0JCQkJICovCi0JCQkJaWYgKHRwMS0+d2hvVG8pIHsKLQkJCQkJdHAxLT53aG9U
by0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKLQkJCQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNl
dWRvX2N1bWFjayA9IDE7Ci0JCQkJfQotCi0JCQl9IGVsc2Ugey8qIENNVCBpcyBPRkYgKi8KLQot
I2lmZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCi0JCQkJLyogQ2FuIHdlIGZpbmQgYW4gYWx0ZXJu
YXRlPyAqLwotCQkJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHRwMS0+d2hv
VG8sIDApOwotI2Vsc2UKLQkJCQkvKgotCQkJCSAqIGRlZmF1bHQgYmVoYXZpb3IgaXMgdG8gTk9U
IHJldHJhbnNtaXQKLQkJCQkgKiBGUidzIHRvIGFuIGFsdGVybmF0ZS4gQXJtYW5kbyBDYXJvJ3MK
LQkJCQkgKiBwYXBlciBkZXRhaWxzIHdoeS4KLQkJCQkgKi8KLQkJCQlhbHQgPSB0cDEtPndob1Rv
OwotI2VuZGlmCi0JCQl9Ci0KLQkJCXRwMS0+cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0
ID0gMTsKLQkJCXRvdF9yZXRyYW5zKys7Ci0JCQkvKiBtYXJrIHRoZSBzZW5kaW5nIHNlcSBmb3Ig
cG9zc2libGUgc3Vic2VxdWVudCBGUidzICovCi0JCQkvKgotCQkJICogU0NUUF9QUklOVEYoIk1h
cmtpbmcgVFNOIGZvciBGUiBuZXcgdmFsdWUgJXhcbiIsCi0JCQkgKiAodWludDMyX3QpdHBpLT5y
ZWMuZGF0YS50c24pOwotCQkJICovCi0JCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVl
dWUpKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgcXVldWUgb2Ygc2VuZCBpcyBlbXB0eSB0aGVu
IGl0cwotCQkJCSAqIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0aGF0IHdpbGwgYmUKLQkJCQkg
KiBhc3NpZ25lZCBzbyB3ZSBzdWJ0cmFjdCBvbmUgZnJvbSB0aGlzIHRvCi0JCQkJICogZ2V0IHRo
ZSBvbmUgd2UgbGFzdCBzZW50LgotCQkJCSAqLwotCQkJCXRwMS0+cmVjLmRhdGEuZmFzdF9yZXRy
YW5fdHNuID0gc2VuZGluZ19zZXE7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogSWYgdGhl
cmUgYXJlIGNodW5rcyBvbiB0aGUgc2VuZCBxdWV1ZQotCQkJCSAqICh1bnNlbnQgZGF0YSB0aGF0
IGhhcyBtYWRlIGl0IGZyb20gdGhlCi0JCQkJICogc3RyZWFtIHF1ZXVlcyBidXQgbm90IG91dCB0
aGUgZG9vciwgd2UKLQkJCQkgKiB0YWtlIHRoZSBmaXJzdCBvbmUgKHdoaWNoIHdpbGwgaGF2ZSB0
aGUKLQkJCQkgKiBsb3dlc3QgVFNOKSBhbmQgc3VidHJhY3Qgb25lIHRvIGdldCB0aGUKLQkJCQkg
KiBvbmUgd2UgbGFzdCBzZW50LgotCQkJCSAqLwotCQkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsg
KnR0dDsKLQotCQkJCXR0dCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVlKTsKLQkJCQl0
cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9Ci0JCQkJCXR0dC0+cmVjLmRhdGEudHNuOwot
CQkJfQotCi0JCQlpZiAodHAxLT5kb19ydHQpIHsKLQkJCQkvKgotCQkJCSAqIHRoaXMgZ3V5IGhh
ZCBhIFJUTyBjYWxjdWxhdGlvbiBwZW5kaW5nIG9uCi0JCQkJICogaXQsIGNhbmNlbCBpdAotCQkJ
CSAqLwotCQkJCWlmICgodHAxLT53aG9UbyAhPSBOVUxMKSAmJgotCQkJCSAgICAodHAxLT53aG9U
by0+cnRvX25lZWRlZCA9PSAwKSkgewotCQkJCQl0cDEtPndob1RvLT5ydG9fbmVlZGVkID0gMTsK
LQkJCQl9Ci0JCQkJdHAxLT5kb19ydHQgPSAwOwotCQkJfQotCQkJaWYgKGFsdCAhPSB0cDEtPndo
b1RvKSB7Ci0JCQkJLyogeWVzLCB0aGVyZSBpcyBhbiBhbHRlcm5hdGUuICovCi0JCQkJc2N0cF9m
cmVlX3JlbW90ZV9hZGRyKHRwMS0+d2hvVG8pOwotCQkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9S
WSovCi0JCQkJdHAxLT53aG9UbyA9IGFsdDsKLQkJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZf
Y291bnQsIDEpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoK
LXNjdHBfdHJ5X2FkdmFuY2VfcGVlcl9hY2tfcG9pbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
ICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKnRwMSwgKnRwMiwgKmFfYWR2ID0gTlVMTDsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0J
aW50IG5vd19maWxsZWQgPSAwOwotCi0JaWYgKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMCkg
ewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlUQUlMUV9GT1JFQUNIX1NBRkUodHAxLCAmYXNvYy0+
c2VudF9xdWV1ZSwgc2N0cF9uZXh0LCB0cDIpIHsKLQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0ZP
UldBUkRfVFNOX1NLSVAgJiYKLQkJICAgIHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RCAmJgotCQkgICAgdHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKLQkJCS8q
IG5vIGNoYW5jZSB0byBhZHZhbmNlLCBvdXQgb2YgaGVyZSAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1RSWV9B
RFZBTkNFKSB7Ci0JCQlpZiAoKHRwMS0+c2VudCA9PSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApIHx8
Ci0JCQkgICAgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgewotCQkJCXNj
dHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKLQkJCQkJICAgICAgIGFzb2MtPmFkdmFu
Y2VkX3BlZXJfYWNrX3BvaW50LAotCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24sIDAsIDAp
OwotCQkJfQotCQl9Ci0JCWlmICghUFJfU0NUUF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7Ci0JCQkv
KgotCQkJICogV2UgY2FuJ3QgZndkLXRzbiBwYXN0IGFueSB0aGF0IGFyZSByZWxpYWJsZSBha2EK
LQkJCSAqIHJldHJhbnNtaXR0ZWQgdW50aWwgdGhlIGFzb2MgZmFpbHMuCi0JCQkgKi8KLQkJCWJy
ZWFrOwotCQl9Ci0JCWlmICghbm93X2ZpbGxlZCkgewotCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJ
TUVWQUwoJm5vdyk7Ci0JCQlub3dfZmlsbGVkID0gMTsKLQkJfQotCQkvKgotCQkgKiBub3cgd2Ug
Z290IGEgY2h1bmsgd2hpY2ggaXMgbWFya2VkIGZvciBhbm90aGVyCi0JCSAqIHJldHJhbnNtaXNz
aW9uIHRvIGEgUFItc3RyZWFtIGJ1dCBoYXMgcnVuIG91dCBpdHMgY2hhbmNlcwotCQkgKiBhbHJl
YWR5IG1heWJlIE9SIGhhcyBiZWVuIG1hcmtlZCB0byBza2lwIG5vdy4gQ2FuIHdlIHNraXAKLQkJ
ICogaXQgaWYgaXRzIGEgcmVzZW5kPwotCQkgKi8KLQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RB
VEFHUkFNX1JFU0VORCAmJgotCQkgICAgKFBSX1NDVFBfVFRMX0VOQUJMRUQodHAxLT5mbGFncykp
KSB7Ci0JCQkvKgotCQkJICogTm93IGlzIHRoaXMgb25lIG1hcmtlZCBmb3IgcmVzZW5kIGFuZCBp
dHMgdGltZSBpcwotCQkJICogbm93IHVwPwotCQkJICovCi0jaWZuZGVmIF9fRnJlZUJTRF9fCi0J
CQlpZiAodGltZXJjbXAoJm5vdywgJnRwMS0+cmVjLmRhdGEudGltZXRvZHJvcCwgPikpIHsKLSNl
bHNlCi0JCQlpZiAodGltZXZhbGNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9wLCA+
KSkgewotI2VuZGlmCi0JCQkJLyogWWVzIHNvIGRyb3AgaXQgKi8KLQkJCQlpZiAodHAxLT5kYXRh
KSB7Ci0JCQkJCSh2b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0Y2IsIHRwMSwKLQkJ
CQkJICAgIDEsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkv
KgotCQkJCSAqIE5vLCB3ZSBhcmUgZG9uZSB3aGVuIGhpdCBvbmUgZm9yIHJlc2VuZAotCQkJCSAq
IHdob3MgdGltZSBhcyBub3QgZXhwaXJlZC4KLQkJCQkgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJ
fQotCQkvKgotCQkgKiBPayBub3cgaWYgdGhpcyBjaHVuayBpcyBtYXJrZWQgdG8gZHJvcCBpdCB3
ZSBjYW4gY2xlYW4gdXAKLQkJICogdGhlIGNodW5rLCBhZHZhbmNlIG91ciBwZWVyIGFjayBwb2lu
dCBhbmQgd2UgY2FuIGNoZWNrCi0JCSAqIHRoZSBuZXh0IGNodW5rLgotCQkgKi8KLQkJaWYgKCh0
cDEtPnNlbnQgPT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSB8fAotCQkgICAgKHRwMS0+c2VudCA9
PSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgewotCQkJLyogYWR2YW5jZSBQZWVyQWNrUG9pbnQg
Z29lcyBmb3J3YXJkICovCi0JCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGFz
b2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50KSkgewotCQkJCWFzb2MtPmFkdmFuY2VkX3BlZXJf
YWNrX3BvaW50ID0gdHAxLT5yZWMuZGF0YS50c247Ci0JCQkJYV9hZHYgPSB0cDE7Ci0JCQl9IGVs
c2UgaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50
KSB7Ci0JCQkJLyogTm8gdXBkYXRlIGJ1dCB3ZSBkbyBzYXZlIHRoZSBjaGsgKi8KLQkJCQlhX2Fk
diA9IHRwMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBJZiBpdCBpcyBzdGlsbCBp
biBSRVNFTkQgd2UgY2FuIGFkdmFuY2Ugbm8KLQkJCSAqIGZ1cnRoZXIKLQkJCSAqLwotCQkJYnJl
YWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIChhX2Fkdik7Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfZnNf
YXVkaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrOwotCWludCBpbmZsaWdodCA9IDAsIHJlc2VuZCA9IDAsIGluYmV0d2VlbiA9
IDAsIGFja2VkID0gMCwgYWJvdmUgPSAwOwotCWludCByZXQ7Ci0jaWZuZGVmIElOVkFSSUFOVFMK
LQlpbnQgZW50cnlfZmxpZ2h0LCBlbnRyeV9jbnQ7Ci0jZW5kaWYKLQotCXJldCA9IDA7Ci0jaWZu
ZGVmIElOVkFSSUFOVFMKLQllbnRyeV9mbGlnaHQgPSBhc29jLT50b3RhbF9mbGlnaHQ7Ci0JZW50
cnlfY250ID0gYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50OwotI2VuZGlmCi0JaWYgKGFzb2MtPnBy
X3NjdHBfY250ID49IGFzb2MtPnNlbnRfcXVldWVfY250KQotCQlyZXR1cm4gKDApOwotCi0JVEFJ
TFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNo
ay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQlTQ1RQX1BSSU5URigiQ2hrIFRT
TjogJXUgc2l6ZTogJWQgaW5mbGlnaHQgY250OiAlZFxuIiwKLQkJCSAgICAgICAgICAgIGNoay0+
cmVjLmRhdGEudHNuLAotCQkJICAgICAgICAgICAgY2hrLT5zZW5kX3NpemUsCi0JCQkgICAgICAg
ICAgICBjaGstPnNuZF9jb3VudCk7Ci0JCQlpbmZsaWdodCsrOwotCQl9IGVsc2UgaWYgKGNoay0+
c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJcmVzZW5kKys7Ci0JCX0gZWxzZSBp
ZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkgewotCQkJaW5iZXR3ZWVuKys7Ci0J
CX0gZWxzZSBpZiAoY2hrLT5zZW50ID4gU0NUUF9EQVRBR1JBTV9BQ0tFRCkgewotCQkJYWJvdmUr
KzsKLQkJfSBlbHNlIHsKLQkJCWFja2VkKys7Ci0JCX0KLQl9Ci0KLQlpZiAoKGluZmxpZ2h0ID4g
MCkgfHwgKGluYmV0d2VlbiA+IDApKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQlwYW5pYygiRmxp
Z2h0IHNpemUtZXhwcmVzcyBpbmNvcnJlY3Q/IFxuIik7Ci0jZWxzZQotCQlTQ1RQX1BSSU5URigi
YXNvYy0+dG90YWxfZmxpZ2h0OiAlZCBjbnQ6ICVkXG4iLAotCQkgICAgICAgICAgICBlbnRyeV9m
bGlnaHQsIGVudHJ5X2NudCk7Ci0KLQkJU0NUUF9QUklOVEYoIkZsaWdodCBzaXplLWV4cHJlc3Mg
aW5jb3JyZWN0IEY6ICVkIEk6ICVkIFI6ICVkIEFiOiAlZCBBQ0s6ICVkXG4iLAotCQkJICAgIGlu
ZmxpZ2h0LCBpbmJldHdlZW4sIHJlc2VuZCwgYWJvdmUsIGFja2VkKTsKLQkJcmV0ID0gMTsKLSNl
bmRpZgotCX0KLQlyZXR1cm4gKHJldCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfd2luZG93
X3Byb2JlX3JlY292ZXJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICBzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICp0cDEpCi17Ci0JdHAxLT53aW5kb3dfcHJvYmUgPSAwOwotCWlmICgodHAxLT5zZW50
ID49IFNDVFBfREFUQUdSQU1fQUNLRUQpIHx8ICh0cDEtPmRhdGEgPT0gTlVMTCkpIHsKLQkJLyog
VFNOJ3Mgc2tpcHBlZCB3ZSBkbyBOT1QgbW92ZSBiYWNrLiAqLwotCQlzY3RwX21pc2NfaW50cyhT
Q1RQX0ZMSUdIVF9MT0dfRFdOX1dQX0ZXRCwKLQkJCSAgICAgICB0cDEtPndob1RvID8gdHAxLT53
aG9Uby0+ZmxpZ2h0X3NpemUgOiAwLAotCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJICAg
ICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+d2hvVG8sCi0JCQkgICAgICAgdHAxLT5yZWMu
ZGF0YS50c24pOwotCQlyZXR1cm47Ci0JfQotCS8qIEZpcnN0IHNldHVwIHRoaXMgYnkgc2hyaW5r
aW5nIGZsaWdodCAqLwotCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBk
YXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3Rw
X2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkgICAg
IHRwMSk7Ci0JfQotCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKLQlzY3RwX3RvdGFs
X2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCS8qIE5vdyBtYXJrIGZvciByZXNlbmQgKi8K
LQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQlzY3RwX3Vjb3VudF9pbmNyKGFz
b2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fV1AsCi0JCQkgICAgICAgdHAxLT53aG9Uby0+
ZmxpZ2h0X3NpemUsCi0JCQkgICAgICAgdHAxLT5ib29rX3NpemUsCi0JCQkgICAgICAgKHVpbnQz
Ml90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKLQkJCSAgICAgICB0cDEtPnJlYy5kYXRhLnRzbik7
Ci0JfQotfQotCi12b2lkCi1zY3RwX2V4cHJlc3NfaGFuZGxlX3NhY2soc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCB1aW50MzJfdCBjdW1hY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgcnduZCwgaW50ICphYm9ydF9ub3csIGludCBlY25lX3NlZW4pCi17Ci0Jc3RydWN0IHNjdHBf
bmV0cyAqbmV0OwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKnRwMSwgKnRwMjsKLQl1aW50MzJfdCBvbGRfcnduZDsKLQlpbnQgd2luX3By
b2JlX3JlY292ZXJ5ID0gMDsKLQlpbnQgd2luX3Byb2JlX3JlY292ZXJlZCA9IDA7Ci0JaW50IGos
IGRvbmVfb25jZSA9IDA7Ci0JaW50IHJ0b19vayA9IDE7Ci0JdWludDMyX3Qgc2VuZF9zOwotCi0J
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1NBQ0tf
QVJSSVZBTFNfRU5BQkxFKSB7Ci0JCXNjdHBfbWlzY19pbnRzKFNDVFBfU0FDS19MT0dfRVhQUkVT
UywgY3VtYWNrLAotCQkgICAgICAgICAgICAgICByd25kLCBzdGNiLT5hc29jLmxhc3RfYWNrZWRf
c2VxLCBzdGNiLT5hc29jLnBlZXJzX3J3bmQpOwotCX0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChz
dGNiKTsKLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCXN0Y2ItPmFzb2MuY3VtYWNrX2xv
Z1tzdGNiLT5hc29jLmN1bWFja19sb2dfYXRdID0gY3VtYWNrOwotCXN0Y2ItPmFzb2MuY3VtYWNr
X2xvZ19hdCsrOwotCWlmIChzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPiBTQ1RQX1RTTl9MT0df
U0laRSkgewotCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPSAwOwotCX0KLSNlbmRpZgotCWFz
b2MgPSAmc3RjYi0+YXNvYzsKLQlvbGRfcnduZCA9IGFzb2MtPnBlZXJzX3J3bmQ7Ci0JaWYgKFND
VFBfVFNOX0dUKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBjdW1hY2spKSB7Ci0JCS8qIG9sZCBhY2sg
Ki8KLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoYXNvYy0+bGFzdF9hY2tlZF9zZXEgPT0gY3VtYWNr
KSB7Ci0JCS8qIFdpbmRvdyB1cGRhdGUgc2FjayAqLwotCQlhc29jLT5wZWVyc19yd25kID0gc2N0
cF9zYnNwYWNlX3N1Yihyd25kLAotCQkJCQkJICAgICh1aW50MzJfdCkgKGFzb2MtPnRvdGFsX2Zs
aWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGVlcl9jaHVua19vaCkpKSk7Ci0JCWlmIChhc29jLT5wZWVyc19yd25kIDwgc3RjYi0+c2N0cF9l
cC0+c2N0cF9lcC5zY3RwX3N3c19zZW5kZXIpIHsKLQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdh
Z2VzICovCi0JCQlhc29jLT5wZWVyc19yd25kID0gMDsKLQkJfQotCQlpZiAoYXNvYy0+cGVlcnNf
cnduZCA+IG9sZF9yd25kKSB7Ci0JCQlnb3RvIGFnYWluOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0K
LQkvKiBGaXJzdCBzZXR1cCBmb3IgQ0Mgc3R1ZmYgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoU0NUUF9UU05fR1QoY3VtYWNrLCBuZXQtPmN3
cl93aW5kb3dfdHNuKSkgewotCQkJLyogRHJhZyBhbG9uZyB0aGUgd2luZG93X3RzbiBmb3IgY3dy
J3MgKi8KLQkJCW5ldC0+Y3dyX3dpbmRvd190c24gPSBjdW1hY2s7Ci0JCX0KLQkJbmV0LT5wcmV2
X2N3bmQgPSBuZXQtPmN3bmQ7Ci0JCW5ldC0+bmV0X2FjayA9IDA7Ci0JCW5ldC0+bmV0X2FjazIg
PSAwOwotCi0JCS8qCi0JCSAqIENNVDogUmVzZXQgQ1VDIGFuZCBGYXN0IHJlY292ZXJ5IGFsZ28g
dmFyaWFibGVzIGJlZm9yZQotCQkgKiBTQUNLIHByb2Nlc3NpbmcKLQkJICovCi0JCW5ldC0+bmV3
X3BzZXVkb19jdW1hY2sgPSAwOwotCQluZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0gMDsK
LQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jf
c2FjaykgewotCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfcHJlcGFyZV9u
ZXRfZm9yX3NhY2spKHN0Y2IsIG5ldCk7Ci0JCX0KLQl9Ci0JaWYgKCFUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VudF9xdWV1ZSkpIHsKLQkJdHAxID0gVEFJTFFfTEFTVCgmYXNvYy0+c2VudF9xdWV1ZSwK
LQkJCQkgc2N0cGNodW5rX2xpc3RoZWFkKTsKLQkJc2VuZF9zID0gdHAxLT5yZWMuZGF0YS50c24g
KyAxOwotCX0gZWxzZSB7Ci0JCXNlbmRfcyA9IGFzb2MtPnNlbmRpbmdfc2VxOwotCX0KLQlpZiAo
U0NUUF9UU05fR0UoY3VtYWNrLCBzZW5kX3MpKSB7Ci0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0J
CWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJKmFib3J0X25vdyA9IDE7Ci0JCS8q
IFhYWCAqLwotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQ3VtIGFjayAlOC44eCBncmVh
dGVyIG9yIGVxdWFsIHRoYW4gVFNOICU4Ljh4IiwKLQkJCSBjdW1hY2ssIHNlbmRfcyk7Ci0JCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04s
IG1zZyk7Ci0JCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQ
X0lOREFUQSArIFNDVFBfTE9DXzIxOwotCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuOwot
CX0KLQlhc29jLT50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPSBjdW1hY2s7Ci0JaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsK
LQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkgICAgICAgc3RjYi0+
YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJICAgICAgIDAsCi0JCQkgICAgICAgU0NUUF9G
Uk9NX1NDVFBfSU5EQVRBLAotCQkJICAgICAgIF9fTElORV9fKTsKLQl9Ci0Jc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQlpZiAoU0NUUF9UU05fR1QoY3VtYWNrLCBhc29jLT5s
YXN0X2Fja2VkX3NlcSkpIHsKLQkJLyogcHJvY2VzcyB0aGUgbmV3IGNvbnNlY3V0aXZlIFRTTiBm
aXJzdCAqLwotCQlUQUlMUV9GT1JFQUNIX1NBRkUodHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0
cF9uZXh0LCB0cDIpIHsKLQkJCWlmIChTQ1RQX1RTTl9HRShjdW1hY2ssIHRwMS0+cmVjLmRhdGEu
dHNuKSkgewotCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJ
CQkJU0NUUF9QUklOVEYoIldhcm5pbmcsIGFuIHVuc2VudCBpcyBub3cgYWNrZWQ/XG4iKTsKLQkJ
CQl9Ci0JCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCQkJLyoK
LQkJCQkJICogSWYgaXQgaXMgbGVzcyB0aGFuIEFDS0VELCBpdCBpcwotCQkJCQkgKiBub3cgbm8t
bG9uZ2VyIGluIGZsaWdodC4gSGlnaGVyCi0JCQkJCSAqIHZhbHVlcyBtYXkgb2NjdXIgZHVyaW5n
IG1hcmtpbmcKLQkJCQkJICovCi0JCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JF
U0VORCkgewotCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9taXNjX2ludHMoU0NU
UF9GTElHSFRfTE9HX0RPV05fQ0EsCi0JCQkJCQkJCSAgICAgICB0cDEtPndob1RvLT5mbGlnaHRf
c2l6ZSwKLQkJCQkJCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJCQkJCQkgICAgICAgKHVp
bnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKLQkJCQkJCQkJICAgICAgIHRwMS0+cmVjLmRh
dGEudHNuKTsKLQkJCQkJCX0KLQkJCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsK
LQkJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9h
Y2tub3dsZWRnZWQpIHsKLQkJCQkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3du
ZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkodHAxLT53aG9UbywKLQkJCQkJCQkJCQkJCQkJICAg
ICB0cDEpOwotCQkJCQkJfQotCQkJCQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCi0JCQkJ
CQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCQkJCQl9Ci0JCQkJCXRw
MS0+d2hvVG8tPm5ldF9hY2sgKz0gdHAxLT5zZW5kX3NpemU7Ci0JCQkJCWlmICh0cDEtPnNuZF9j
b3VudCA8IDIpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBUcnVlIG5vbi1yZXRyYW5zbWl0ZWQKLQkJ
CQkJCSAqIGNodW5rCi0JCQkJCQkgKi8KLQkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2syICs9Ci0J
CQkJCQkJdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJCS8qIHVwZGF0ZSBSVE8gdG9vPyAqLwotCQkJ
CQkJaWYgKHRwMS0+ZG9fcnR0KSB7Ci0JCQkJCQkJaWYgKHJ0b19vaykgewotCQkJCQkJCQl0cDEt
Pndob1RvLT5SVE8gPQotCQkJCQkJCQkJLyoKLQkJCQkJCQkJCSAqIHNhX2lnbm9yZQotCQkJCQkJ
CQkJICogTk9fTlVMTF9DSEsKLQkJCQkJCQkJCSAqLwotCQkJCQkJCQkJc2N0cF9jYWxjdWxhdGVf
cnRvKHN0Y2IsCi0JCQkJCQkJCQkJCSAgIGFzb2MsIHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkJCSAg
ICZ0cDEtPnNlbnRfcmN2X3RpbWUsCi0JCQkJCQkJCQkJCSAgIHNjdHBfYWxpZ25fc2FmZV9ub2Nv
cHksCi0JCQkJCQkJCQkJCSAgIFNDVFBfUlRUX0ZST01fREFUQSk7Ci0JCQkJCQkJCXJ0b19vayA9
IDA7Ci0JCQkJCQkJfQotCQkJCQkJCWlmICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsK
LQkJCQkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7Ci0JCQkJCQkJfQotCQkJCQkJCXRw
MS0+ZG9fcnR0ID0gMDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBDTVQ6IENV
Q3YyIGFsZ29yaXRobS4gRnJvbSB0aGUKLQkJCQkJICogY3VtYWNrJ2QgVFNOcywgZm9yIGVhY2gg
VFNOIGJlaW5nCi0JCQkJCSAqIGFja2VkIGZvciB0aGUgZmlyc3QgdGltZSwgc2V0IHRoZQotCQkJ
CQkgKiBmb2xsb3dpbmcgdmFyaWFibGVzIGZvciB0aGUKLQkJCQkJICogY29ycmVzcCBkZXN0aW5h
dGlvbi4KLQkJCQkJICogbmV3X3BzZXVkb19jdW1hY2sgd2lsbCB0cmlnZ2VyIGEKLQkJCQkJICog
Y3duZCB1cGRhdGUuCi0JCQkJCSAqIGZpbmRfKHJ0eF8pcHNldWRvX2N1bWFjayB3aWxsCi0JCQkJ
CSAqIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dAotCQkJCQkgKiBleHBlY3RlZCAocnR4LSlw
c2V1ZG8tY3VtYWNrLgotCQkJCQkgKi8KLQkJCQkJdHAxLT53aG9Uby0+bmV3X3BzZXVkb19jdW1h
Y2sgPSAxOwotCQkJCQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOwotCQkJCQl0
cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKLQotCQkJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxF
KSB7Ci0JCQkJCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KLQkJCQkJCXNjdHBfbG9nX2N3
bmQoc3RjYiwgdHAxLT53aG9UbywgdHAxLT5yZWMuZGF0YS50c24sIFNDVFBfQ1dORF9MT0dfRlJP
TV9TQUNLKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRy
YW5fY250KTsKLQkJCQl9Ci0JCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQp
IHsKLQkJCQkJLyogZGVmbGF0ZSB0aGUgY3duZCAqLwotCQkJCQl0cDEtPndob1RvLT5jd25kIC09
IHRwMS0+Ym9va19zaXplOwotCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0g
MDsKLQkJCQl9Ci0JCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSB7
Ci0JCQkJCWlmIChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID4gMCkgewotCQkJCQkJYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtz
X29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXBh
bmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIHRwMS0+cmVjLmRhdGEu
c2lkKTsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICgoYXNvYy0+c3RybW91dFt0cDEt
PnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgotCQkJCSAgICAoYXNvYy0+
c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVO
RElORykgJiYKLQkJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0
YS5zaWRdLm91dHF1ZXVlKSkgewotCQkJCQlhc29jLT50cmlnZ2VyX3Jlc2V0ID0gMTsKLQkJCQl9
Ci0JCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCB0cDEsIHNjdHBfbmV4dCk7Ci0J
CQkJaWYgKHRwMS0+ZGF0YSkgewotCQkJCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KLQkJ
CQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgMSk7Ci0JCQkJCXNjdHBfbV9m
cmVlbSh0cDEtPmRhdGEpOwotCQkJCQl0cDEtPmRhdGEgPSBOVUxMOwotCQkJCX0KLQkJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCi0JCQkJ
CQkgICAgICBjdW1hY2ssCi0JCQkJCQkgICAgICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCSAg
ICAgIDAsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgU0NUUF9MT0dfRlJFRV9TRU5UKTsK
LQkJCQl9Ci0JCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnQtLTsKLQkJCQlzY3RwX2ZyZWVfYV9jaHVu
ayhzdGNiLCB0cDEsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFr
OwotCQkJfQotCQl9Ci0KLQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmIChzdGNi
LT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewot
CQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0JCQlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOwotCi0JCQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJaW5xdWV1ZV9ieXRlcyA9
IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nf
b25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKLQkJCXNiX2Zy
ZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVf
Ynl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBh
bW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9s
ZCAqLwotCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgotCQkJICAgICgoKGlucC0+c2VuZF9z
Yl90aHJlc2hvbGQgPiAwKSAmJgotCQkJICAgICAgKHNiX2ZyZWVfbm93ID49IGlucC0+c2VuZF9z
Yl90aHJlc2hvbGQpICYmCi0JCQkgICAgICAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVl
IDw9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkpIHx8Ci0JCQkg
ICAgIChpbnAtPnNlbmRfc2JfdGhyZXNob2xkID09IDApKSkgewotCQkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJ
CWlucC0+c2VuZF9jYWxsYmFjayhzdGNiLT5zY3RwX3NvY2tldCwgc2JfZnJlZV9ub3cpOwotCQkJ
CVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChzdGNiLT5zY3RwX3NvY2tldCkg
ewotI2Vsc2UKLQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KLQlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQpIHsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQotI2VuZGlmCi0JCVNPQ0tC
VUZfTE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19FTkFCTEUpIHsKLQkJ
CS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLwotCQkJc2N0cF93YWtldXBfbG9nKHN0Y2IsIDEs
IFNDVFBfV0FLRVNORF9GUk9NX1NBQ0spOwotCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+
c2N0cF9lcCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQp
IHsKLQkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCi0JCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJc2N0
cF9zb3d3YWtldXBfbG9ja2VkKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNjdHBfc29ja2V0KTsKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJ
U0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19FTkFC
TEUpIHsKLQkJCXNjdHBfd2FrZXVwX2xvZyhzdGNiLCAxLCBTQ1RQX05PV0FLRV9GUk9NX1NBQ0sp
OwotCQl9Ci0JfQotCi0JLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4g
aW4gdGhlIENDIG1vZHVsZSAqLwotCWlmICgoYXNvYy0+bGFzdF9hY2tlZF9zZXEgIT0gY3VtYWNr
KSAmJiAoZWNuZV9zZWVuID09IDApKSB7Ci0JCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7Ci0JCQlpZiAobmV0LT5uZXRfYWNrMiA+IDApIHsKLQkJCQkvKgotCQkJ
CSAqIEthcm4ncyBydWxlIGFwcGxpZXMgdG8gY2xlYXJpbmcgZXJyb3IgY291bnQsIHRoaXMKLQkJ
CQkgKiBpcyBvcHRpb25hbC4KLQkJCQkgKi8KLQkJCQluZXQtPmVycm9yX2NvdW50ID0gMDsKLQkJ
CQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgewotCQkJCQkv
KiBhZGRyIGNhbWUgZ29vZCAqLwotCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JF
QUNIQUJMRTsKLQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwg
c3RjYiwKLQkJCQkJICAgICAgICAgICAgICAgIDAsICh2b2lkICopbmV0LCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCQkJCX0KLQkJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbikgewotCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQkJCS8qIHJlbGVh
c2UgdGhlIGFsdGVybmF0ZSwgcHJpbWFyeSBpcyBnb29kICovCi0JCQkJCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJCQkJc3RjYi0+YXNvYy5hbHRlcm5h
dGUgPSBOVUxMOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUEYpIHsKLQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7Ci0JCQkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAotCQkJCQkgICAgICAg
ICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjIpOwotCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7
Ci0JCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYoc3RjYiwg
bmV0KTsKLQkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCi0JCQkJCW5ldC0+bmV0X2FjayA9
IDA7Ci0JCQkJfQotCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGltZXJzICovCi0JCQkJbmV0
LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7Ci0J
CQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBz
dGNiLT5hc29jLm1pbnJ0bzsKLQkJCQl9Ci0JCQkJaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5t
YXhydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0bzsKLQkJCQl9Ci0JCQl9
Ci0JCX0KLQkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2Fjayhz
dGNiLCBhc29jLCAxLCAwLCAwKTsKLQl9Ci0JYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBjdW1hY2s7
Ci0KLQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7Ci0JCS8qIG5vdGhpbmcg
bGVmdCBpbi1mbGlnaHQgKi8KLQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3Rw
X25leHQpIHsKLQkJCW5ldC0+ZmxpZ2h0X3NpemUgPSAwOwotCQkJbmV0LT5wYXJ0aWFsX2J5dGVz
X2Fja2VkID0gMDsKLQkJfQotCQlhc29jLT50b3RhbF9mbGlnaHQgPSAwOwotCQlhc29jLT50b3Rh
bF9mbGlnaHRfY291bnQgPSAwOwotCX0KLQotCS8qIFJXTkQgdXBkYXRlICovCi0JYXNvYy0+cGVl
cnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIocnduZCwKLQkJCQkJICAgICh1aW50MzJfdCkgKGFz
b2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7Ci0JaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBz
dGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewotCQkvKiBTV1Mgc2VuZGVy
IHNpZGUgZW5nYWdlcyAqLwotCQlhc29jLT5wZWVyc19yd25kID0gMDsKLQl9Ci0JaWYgKGFzb2Mt
PnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgewotCQl3aW5fcHJvYmVfcmVjb3ZlcnkgPSAxOwotCX0K
LQkvKiBOb3cgYXNzdXJlIGEgdGltZXIgd2hlcmUgZGF0YSBpcyBxdWV1ZWQgYXQgKi8KLWFnYWlu
OgotCWogPSAwOwotCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7
Ci0JCWludCB0b190aWNrczsKLQkJaWYgKHdpbl9wcm9iZV9yZWNvdmVyeSAmJiAobmV0LT53aW5k
b3dfcHJvYmUpKSB7Ci0JCQl3aW5fcHJvYmVfcmVjb3ZlcmVkID0gMTsKLQkJCS8qCi0JCQkgKiBG
aW5kIGZpcnN0IGNodW5rIHRoYXQgd2FzIHVzZWQgd2l0aCB3aW5kb3cgcHJvYmUKLQkJCSAqIGFu
ZCBjbGVhciB0aGUgc2VudAotCQkJICovCi0JCQkvKiBzYV9pZ25vcmUgRlJFRURfTUVNT1JZICov
Ci0JCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgewot
CQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgewotCQkJCQkvKiBtb3ZlIGJhY2sgdG8gZGF0YSBz
ZW5kIHF1ZXVlICovCi0JCQkJCXNjdHBfd2luZG93X3Byb2JlX3JlY292ZXJ5KHN0Y2IsIGFzb2Ms
IHRwMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAobmV0LT5SVE8gPT0g
MCkgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8p
OwotCQl9IGVsc2UgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKLQkJ
fQotCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSkgewotCQkJaisrOwotCQkJKHZvaWQpU0NUUF9PU19U
SU1FUl9TVEFSVCgmbmV0LT5yeHRfdGltZXIudGltZXIsIHRvX3RpY2tzLAotCQkJCQkJICBzY3Rw
X3RpbWVvdXRfaGFuZGxlciwgJm5ldC0+cnh0X3RpbWVyKTsKLQkJCWlmIChuZXQtPndpbmRvd19w
cm9iZSkgewotCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CWlmIChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCS8qIEluIHdpbmRvdyBwcm9iZXMgd2UgbXVz
dCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRoZXJlICovCi0JCQkJbmV0LT53aW5k
b3dfcHJvYmUgPSAwOwotCQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90
aW1lci50aW1lcikpIHsKLQkJCQkJU0NUUF9PU19USU1FUl9TVEFSVCgmbmV0LT5yeHRfdGltZXIu
dGltZXIsIHRvX3RpY2tzLAotCQkJCQkgICAgICAgICAgICAgICAgICAgIHNjdHBfdGltZW91dF9o
YW5kbGVyLCAmbmV0LT5yeHRfdGltZXIpOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAoU0NUUF9PU19U
SU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKLQkJCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCi0JCQkJICAgICAgICAgICAg
ICAgIHN0Y2IsIG5ldCwKLQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRB
ICsgU0NUUF9MT0NfMjMpOwotCQkJfQotCQl9Ci0JfQotCWlmICgoaiA9PSAwKSAmJgotCSAgICAo
IVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgJiYKLQkgICAgKGFzb2MtPnNlbnRfcXVl
dWVfcmV0cmFuX2NudCA9PSAwKSAmJgotCSAgICAod2luX3Byb2JlX3JlY292ZXJlZCA9PSAwKSAm
JgotCSAgICAoZG9uZV9vbmNlID09IDApKSB7Ci0JCS8qIGh1aCwgdGhpcyBzaG91bGQgbm90IGhh
cHBlbiB1bmxlc3MgYWxsIHBhY2tldHMKLQkJICogYXJlIFBSLVNDVFAgYW5kIG1hcmtlZCB0byBz
a2lwIG9mIGNvdXJzZS4KLQkJICovCi0JCWlmIChzY3RwX2ZzX2F1ZGl0KGFzb2MpKSB7Ci0JCQlU
QUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCW5ldC0+Zmxp
Z2h0X3NpemUgPSAwOwotCQkJfQotCQkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKLQkJCWFzb2Mt
PnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7Ci0JCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQg
PSAwOwotCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQp
IHsKLQkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQkJc2N0
cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZSh0cDEpOwotCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNy
ZWFzZShzdGNiLCB0cDEpOwotCQkJCX0gZWxzZSBpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRy
YW5fY250KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZG9uZV9vbmNlID0gMTsKLQkJZ290byBhZ2Fp
bjsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogTm93IHdo
YXQgYWJvdXQgc2h1dGRvd24gaXNzdWVzICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCi0JaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJiBUQUlMUV9F
TVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKLQkJLyogbm90aGluZyBsZWZ0IG9uIHNlbmRxdWV1
ZS4uIGNvbnNpZGVyIGRvbmUgKi8KLQkJLyogY2xlYW4gdXAgKi8KLQkJaWYgKChhc29jLT5zdHJl
YW1fcXVldWVfY250ID09IDEpICYmCi0JCSAgICAoKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9T
SFVURE9XTl9QRU5ESU5HKSB8fAotCQkgICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpKSAmJgotCQkgICAgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3Nf
aXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSkgewotCQkJYXNvYy0+c3RhdGUg
fD0gU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUOwotCQl9Ci0JCWlmICgoKGFzb2MtPnN0YXRl
ICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB8fAotCQkgICAgICAoU0NUUF9HRVRfU1RB
VEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpICYmCi0JCSAgICAoYXNv
Yy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgotCQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9T
VEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQotCQkJ
KmFib3J0X25vdyA9IDE7Ci0JCQkvKiBYWFggKi8KLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKLQkJCXN0Y2ItPnNjdHBf
ZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI0
OwotCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9l
cnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgJiYKLQkJICAgIChhc29jLT5zdHJl
YW1fcXVldWVfY250ID09IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwotCi0JCQlp
ZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCSAgICAo
U0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsK
LQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQl9Ci0JCQlT
Q1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOwotCQkJU0NUUF9D
TEVBUl9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJc2N0
cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7Ci0JCQlpZiAoYXNvYy0+YWx0ZXJuYXRl
KSB7Ci0JCQkJbmV0cCA9IGFzb2MtPmFsdGVybmF0ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0cCA9
IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb247Ci0JCQl9Ci0JCQlzY3RwX3NlbmRfc2h1dGRvd24o
c3RjYiwgbmV0cCk7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9X
TiwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHApOwotCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIG5ldHApOwotCQl9IGVsc2UgaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NU
QVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkJICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQg
PT0gMCkpIHsKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7Ci0KLQkJCVNDVFBfU1RBVF9ERUNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBf
U1RBVEVfU0hVVERPV05fQUNLX1NFTlQpOwotCQkJU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBT
Q1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1
dGRvd24oc3RjYik7Ci0JCQlpZiAoYXNvYy0+YWx0ZXJuYXRlKSB7Ci0JCQkJbmV0cCA9IGFzb2Mt
PmFsdGVybmF0ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0cCA9IGFzb2MtPnByaW1hcnlfZGVzdGlu
YXRpb247Ci0JCQl9Ci0JCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIG5ldHApOwotCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssCi0JCQkJCSBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJfQotCX0KLQkvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIEhlcmUgd2UgcGVyZm9ybSBQUi1TQ1RQIHBy
b2NlZHVyZXMgICAgICAgICovCi0JLyogKHNlY3Rpb24gNC4yKSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwotCS8qIEMxLiB1cGRhdGUgYWR2YW5jZWRQZWVyQWNrUG9pbnQgKi8KLQlpZiAoU0NUUF9U
U05fR1QoY3VtYWNrLCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCkpIHsKLQkJYXNvYy0+
YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1hY2s7Ci0JfQotCS8qIFBSLVNjdHAgaXNzdWVz
IG5lZWQgdG8gYmUgYWRkcmVzc2VkIHRvbyAqLwotCWlmICgoYXNvYy0+cHJzY3RwX3N1cHBvcnRl
ZCkgJiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsKLQkJc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqbGNoazsKLQkJdWludDMyX3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2ludDsKLQotCQlvbGRfYWR2
X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7Ci0JCWxjaGsg
PSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFzb2MpOwotCQkvKiBDMy4g
U2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04gKi8KLQkJaWYgKFNDVFBfVFNOX0dUKGFz
b2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1hY2spKSB7Ci0JCQkvKgotCQkJICogSVNT
VUUgd2l0aCBFQ04sIHNlZSBGV0QtVFNOIHByb2Nlc3NpbmcuCi0JCQkgKi8KLQkJCWlmIChTQ1RQ
X1RTTl9HVChhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgb2xkX2Fkdl9wZWVyX2Fja19w
b2ludCkpIHsKLQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOwotCQkJfSBlbHNlIGlm
IChsY2hrKSB7Ci0JCQkJLyogdHJ5IHRvIEZSIGZ3ZC10c24ncyB0aGF0IGdldCBsb3N0IHRvbyAq
LwotCQkJCWlmIChsY2hrLT5yZWMuZGF0YS5md2RfdHNuX2NudCA+PSAzKSB7Ci0JCQkJCXNlbmRf
Zm9yd2FyZF90c24oc3RjYiwgYXNvYyk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChsY2hrKSB7
Ci0JCQkvKiBBc3N1cmUgYSB0aW1lciBpcyB1cCAqLwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGstPndob1Rv
KTsKLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9T
QUNLX1JXTkRfVVBEQVRFLAotCQkJICAgICAgIHJ3bmQsCi0JCQkgICAgICAgc3RjYi0+YXNvYy5w
ZWVyc19yd25kLAotCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0LAotCQkJICAgICAg
IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCX0KLX0KLQotdm9pZAotc2N0
cF9oYW5kbGVfc2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldF9zZWcsIGludCBvZmZzZXRf
ZHVwLAotICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAg
ICAgICAgIHVpbnQxNl90IG51bV9zZWcsIHVpbnQxNl90IG51bV9ucl9zZWcsIHVpbnQxNl90IG51
bV9kdXAsCi0gICAgICAgICAgICAgICAgIGludCAqYWJvcnRfbm93LCB1aW50OF90IGZsYWdzLAot
ICAgICAgICAgICAgICAgICB1aW50MzJfdCBjdW1fYWNrLCB1aW50MzJfdCByd25kLCBpbnQgZWNu
ZV9zZWVuKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKnRwMSwgKnRwMjsKLQl1aW50MzJfdCBsYXN0X3RzbiwgYmlnZ2VzdF90c25f
YWNrZWQsIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0aGlzX3NhY2tfbG93ZXN0X25ld2FjazsK
LQl1aW50MTZfdCB3YWtlX2hpbSA9IDA7Ci0JdWludDMyX3Qgc2VuZF9zID0gMDsKLQlsb25nIGo7
Ci0JaW50IGFjY3VtX21vdmVkID0gMDsKLQlpbnQgd2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAw
OwotCXVpbnQzMl90IGFfcnduZCwgb2xkX3J3bmQ7Ci0JaW50IHdpbl9wcm9iZV9yZWNvdmVyeSA9
IDA7Ci0JaW50IHdpbl9wcm9iZV9yZWNvdmVyZWQgPSAwOwotCXN0cnVjdCBzY3RwX25ldHMgKm5l
dCA9IE5VTEw7Ci0JaW50IGRvbmVfb25jZTsKLQlpbnQgcnRvX29rID0gMTsKLQl1aW50OF90IHJl
bmVnZWRfYWxsID0gMDsKLQl1aW50OF90IGNtdF9kYWNfZmxhZzsKLQkvKgotCSAqIHdlIHRha2Ug
YW55IGNoYW5jZSB3ZSBjYW4gdG8gc2VydmljZSBvdXIgcXVldWVzIHNpbmNlIHdlIGNhbm5vdAot
CSAqIGdldCBhd29rZW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWQgZnJvbSA6PAotCSAqLwotCS8q
Ci0JICogTm93IHBlcmZvcm0gdGhlIGFjdHVhbCBTQUNLIGhhbmRsaW5nOiAxKSBWZXJpZnkgdGhh
dCBpdCBpcyBub3QgYW4KLQkgKiBvbGQgc2FjaywgaWYgc28gZGlzY2FyZC4gMikgSWYgdGhlcmUg
aXMgbm90aGluZyBsZWZ0IGluIHRoZSBzZW5kCi0JICogcXVldWUgKGN1bS1hY2sgaXMgZXF1YWwg
dG8gbGFzdCBhY2tlZCkgdGhlbiB5b3UgaGF2ZSBhIGR1cGxpY2F0ZQotCSAqIHRvbywgdXBkYXRl
IGFueSByd25kIGNoYW5nZSBhbmQgdmVyaWZ5IG5vIHRpbWVycyBhcmUgcnVubmluZy4KLQkgKiB0
aGVuIHJldHVybi4gMykgUHJvY2VzcyBhbnkgbmV3IGNvbnNlcXV0aXZlIGRhdGEgaS5lLiBjdW0t
YWNrCi0JICogbW92ZWQgcHJvY2VzcyB0aGVzZSBmaXJzdCBhbmQgbm90ZSB0aGF0IGl0IG1vdmVk
LiA0KSBQcm9jZXNzIGFueQotCSAqIHNhY2sgYmxvY2tzLiA1KSBEcm9wIGFueSBhY2tlZCBmcm9t
IHRoZSBxdWV1ZS4gNikgQ2hlY2sgZm9yIGFueQotCSAqIHJldm9rZWQgYmxvY2tzIGFuZCBtYXJr
LiA3KSBVcGRhdGUgdGhlIGN3bmQuIDgpIE5vdGhpbmcgbGVmdCwKLQkgKiBzeW5jIHVwIGZsaWdo
dHNpemVzIGFuZCB0aGluZ3MsIHN0b3AgYWxsIHRpbWVycyBhbmQgYWxzbyBjaGVjawotCSAqIGZv
ciBzaHV0ZG93bl9wZW5kaW5nIHN0YXRlLiBJZiBzbyB0aGVuIGdvIGFoZWFkIGFuZCBzZW5kIG9m
ZiB0aGUKLQkgKiBzaHV0ZG93bi4gSWYgaW4gc2h1dGRvd24gcmVjdiwgc2VuZCBvZmYgdGhlIHNo
dXRkb3duLWFjayBhbmQKLQkgKiBzdGFydCB0aGF0IHRpbWVyLCBSZXQuIDkpIFN0cmlrZSBhbnkg
bm9uLWFja2VkIHRoaW5ncyBhbmQgZG8gRlIKLQkgKiBwcm9jZWR1cmUgaWYgbmVlZGVkIGJlaW5n
IHN1cmUgdG8gc2V0IHRoZSBGUiBmbGFnLiAxMCkgRG8gcHItc2N0cAotCSAqIHByb2NlZHVyZXMu
IDExKSBBcHBseSBhbnkgRlIgcGVuYWx0aWVzLiAxMikgQXNzdXJlIHdlIHdpbGwgU0FDSwotCSAq
IGlmIGluIHNodXRkb3duX3JlY3Ygc3RhdGUuCi0JICovCi0JU0NUUF9UQ0JfTE9DS19BU1NFUlQo
c3RjYik7Ci0JLyogQ01UIERBQyBhbGdvICovCi0JdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgPSAw
OwotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nsb3dwYXRoX3NhY2spOwotCWxhc3RfdHNuID0gY3Vt
X2FjazsKLQljbXRfZGFjX2ZsYWcgPSBmbGFncyAmIFNDVFBfU0FDS19DTVRfREFDOwotI2lmZGVm
IFNDVFBfQVNPQ0xPR19PRl9UU05TCi0Jc3RjYi0+YXNvYy5jdW1hY2tfbG9nW3N0Y2ItPmFzb2Mu
Y3VtYWNrX2xvZ19hdF0gPSBjdW1fYWNrOwotCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdCsrOwot
CWlmIChzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPiBTQ1RQX1RTTl9MT0dfU0laRSkgewotCQlz
dGNiLT5hc29jLmN1bWFja19sb2dfYXQgPSAwOwotCX0KLSNlbmRpZgotCWFfcnduZCA9IHJ3bmQ7
Ci0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0df
U0FDS19BUlJJVkFMU19FTkFCTEUpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNLX0xPR19O
T1JNQUwsIGN1bV9hY2ssCi0JCSAgICAgICAgICAgICAgIHJ3bmQsIHN0Y2ItPmFzb2MubGFzdF9h
Y2tlZF9zZXEsIHN0Y2ItPmFzb2MucGVlcnNfcnduZCk7Ci0JfQotCi0Jb2xkX3J3bmQgPSBzdGNi
LT5hc29jLnBlZXJzX3J3bmQ7Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9U
SFJFU0hPTERfQ0xFQVIsCi0JCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJv
cl9jb3VudCwKLQkJICAgICAgICAgICAgICAgMCwKLQkJICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfSU5EQVRBLAotCQkgICAgICAgICAgICAgICBfX0xJTkVfXyk7Ci0JfQotCXN0Y2ItPmFz
b2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19F
TkFCTEUpIHsKLQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2VkX3NlcSwKLQkJICAgICAg
ICAgICAgICBjdW1fYWNrLAotCQkgICAgICAgICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgbnVt
X3NlZywKLQkJICAgICAgICAgICAgICBudW1fZHVwLAotCQkgICAgICAgICAgICAgIFNDVFBfTE9H
X05FV19TQUNLKTsKLQl9Ci0JaWYgKChudW1fZHVwKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkpIHsKLQkJdWludDE2X3Qg
aTsKLQkJdWludDMyX3QgKmR1cGRhdGEsIGRibG9jazsKLQotCQlmb3IgKGkgPSAwOyBpIDwgbnVt
X2R1cDsgaSsrKSB7Ci0JCQlkdXBkYXRhID0gKHVpbnQzMl90ICopc2N0cF9tX2dldHB0cihtLCBv
ZmZzZXRfZHVwICsgaSAqIHNpemVvZih1aW50MzJfdCksCi0JCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpLCAodWludDhfdCAqKSZkYmxvY2spOwot
CQkJaWYgKGR1cGRhdGEgPT0gTlVMTCkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJc2N0cF9sb2df
ZnIoKmR1cGRhdGEsIDAsIDAsIFNDVFBfRlJfRFVQRUQpOwotCQl9Ci0JfQotCS8qIHJlYWxpdHkg
Y2hlY2sgKi8KLQlpZiAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgewotCQl0cDEg
PSBUQUlMUV9MQVNUKCZhc29jLT5zZW50X3F1ZXVlLAotCQkJCSBzY3RwY2h1bmtfbGlzdGhlYWQp
OwotCQlzZW5kX3MgPSB0cDEtPnJlYy5kYXRhLnRzbiArIDE7Ci0JfSBlbHNlIHsKLQkJdHAxID0g
TlVMTDsKLQkJc2VuZF9zID0gYXNvYy0+c2VuZGluZ19zZXE7Ci0JfQotCWlmIChTQ1RQX1RTTl9H
RShjdW1fYWNrLCBzZW5kX3MpKSB7Ci0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCWNoYXIgbXNn
W1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJLyoKLQkJICogbm8gd2F5LCB3ZSBoYXZlIG5vdCBl
dmVuIHNlbnQgdGhpcyBUU04gb3V0IHlldC4KLQkJICogUGVlciBpcyBob3BlbGVzc2x5IG1lc3Nl
ZCB1cCB3aXRoIHVzLgotCQkgKi8KLQkJU0NUUF9QUklOVEYoIk5FVyBjdW1fYWNrOiV4IHNlbmRf
czoleCBpcyBzbWFsbGVyIG9yIGVxdWFsXG4iLAotCQkJICAgIGN1bV9hY2ssIHNlbmRfcyk7Ci0J
CWlmICh0cDEpIHsKLQkJCVNDVFBfUFJJTlRGKCJHb3Qgc2VuZF9zIGZyb20gdHNuOiV4ICsgMSBv
ZiB0cDE6ICVwXG4iLAotCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwgKHZvaWQgKil0cDEpOwot
CQl9Ci0JaG9wZWxlc3NfcGVlcjoKLQkJKmFib3J0X25vdyA9IDE7Ci0JCS8qIFhYWCAqLwotCQlz
bnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQ3VtIGFjayAlOC44eCBncmVhdGVyIG9yIGVxdWFs
IHRoYW4gVFNOICU4Ljh4IiwKLQkJCSBjdW1fYWNrLCBzZW5kX3MpOwotCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwotCQlz
dGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBT
Q1RQX0xPQ18yNTsKLQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBz
dGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCXJldHVybjsKLQl9Ci0JLyoqKioq
KioqKioqKioqKioqKioqKiovCi0JLyogMSkgY2hlY2sgdGhlIHJhbmdlICovCi0JLyoqKioqKioq
KioqKioqKioqKioqKiovCi0JaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBs
YXN0X3RzbikpIHsKLQkJLyogYWNraW5nIHNvbWV0aGluZyBiZWhpbmQgKi8KLQkJcmV0dXJuOwot
CX0KLQotCS8qIHVwZGF0ZSB0aGUgUnduZCBvZiB0aGUgcGVlciAqLwotCWlmIChUQUlMUV9FTVBU
WSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVl
dWUpICYmCi0JICAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCS8qIG5vdGhp
bmcgbGVmdCBvbiBzZW5kL3NlbnQgYW5kIHN0cm1xICovCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJMRSkgewotCQkJc2N0cF9s
b2dfcnduZF9zZXQoU0NUUF9TRVRfUEVFUl9SV05EX1ZJQV9TQUNLLAotCQkJICAgICAgICAgICAg
ICAgICAgYXNvYy0+cGVlcnNfcnduZCwgMCwgMCwgYV9yd25kKTsKLQkJfQotCQlhc29jLT5wZWVy
c19yd25kID0gYV9yd25kOwotCQlpZiAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KSB7Ci0J
CQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAwOwotCQl9Ci0JCWlmIChhc29jLT5wZWVy
c19yd25kIDwgc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zY3RwX3N3c19zZW5kZXIpIHsKLQkJCS8q
IFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCi0JCQlhc29jLT5wZWVyc19yd25kID0gMDsKLQkJ
fQotCQkvKiBzdG9wIGFueSB0aW1lcnMgKi8KLQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5u
ZXRzLCBzY3RwX25leHQpIHsKLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VO
RCwgc3RjYi0+c2N0cF9lcCwKLQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsIFNDVFBfRlJP
TV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI2KTsKLQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tl
ZCA9IDA7Ci0JCQluZXQtPmZsaWdodF9zaXplID0gMDsKLQkJfQotCQlhc29jLT50b3RhbF9mbGln
aHQgPSAwOwotCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOwotCQlyZXR1cm47Ci0JfQot
CS8qCi0JICogV2UgaW5pdCBuZXRBY2tTeiBhbmQgbmV0QWNrU3oyIHRvIDAuIFRoZXNlIGFyZSB1
c2VkIHRvIHRyYWNrIDIKLQkgKiB0aGluZ3MuIFRoZSB0b3RhbCBieXRlIGNvdW50IGFja2VkIGlz
IHRyYWNrZWQgaW4gbmV0QWNrU3ogQU5ECi0JICogbmV0QWNrMiBpcyB1c2VkIHRvIHRyYWNrIHRo
ZSB0b3RhbCBieXRlcyBhY2tlZCB0aGF0IGFyZSB1bi0KLQkgKiBhbWliZ3Vpb3VzIGFuZCB3ZXJl
IG5ldmVyIHJldHJhbnNtaXR0ZWQuIFdlIHRyYWNrIHRoZXNlIG9uIGEgcGVyCi0JICogZGVzdGlu
YXRpb24gYWRkcmVzcyBiYXNpcy4KLQkgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5l
dHMsIHNjdHBfbmV4dCkgewotCQlpZiAoU0NUUF9UU05fR1QoY3VtX2FjaywgbmV0LT5jd3Jfd2lu
ZG93X3RzbikpIHsKLQkJCS8qIERyYWcgYWxvbmcgdGhlIHdpbmRvd190c24gZm9yIGN3cidzICov
Ci0JCQluZXQtPmN3cl93aW5kb3dfdHNuID0gY3VtX2FjazsKLQkJfQotCQluZXQtPnByZXZfY3du
ZCA9IG5ldC0+Y3duZDsKLQkJbmV0LT5uZXRfYWNrID0gMDsKLQkJbmV0LT5uZXRfYWNrMiA9IDA7
Ci0KLQkJLyoKLQkJICogQ01UOiBSZXNldCBDVUMgYW5kIEZhc3QgcmVjb3ZlcnkgYWxnbyB2YXJp
YWJsZXMgYmVmb3JlCi0JCSAqIFNBQ0sgcHJvY2Vzc2luZwotCQkgKi8KLQkJbmV0LT5uZXdfcHNl
dWRvX2N1bWFjayA9IDA7Ci0JCW5ldC0+d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAwOwotCQlp
ZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNr
KSB7Ci0JCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9wcmVwYXJlX25ldF9m
b3Jfc2Fjaykoc3RjYiwgbmV0KTsKLQkJfQotCX0KLQkvKiBwcm9jZXNzIHRoZSBuZXcgY29uc2Vj
dXRpdmUgVFNOIGZpcnN0ICovCi0JVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVl
LCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGxhc3RfdHNuLCB0cDEtPnJlYy5kYXRh
LnRzbikpIHsKLQkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJ
CQlhY2N1bV9tb3ZlZCA9IDE7Ci0JCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNL
RUQpIHsKLQkJCQkJLyoKLQkJCQkJICogSWYgaXQgaXMgbGVzcyB0aGFuIEFDS0VELCBpdCBpcwot
CQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdodC4gSGlnaGVyCi0JCQkJCSAqIHZhbHVlcyBt
YXkgb2NjdXIgZHVyaW5nIG1hcmtpbmcKLQkJCQkJICovCi0JCQkJCWlmICgodHAxLT53aG9Uby0+
ZGVzdF9zdGF0ZSAmCi0JCQkJCSAgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEKSAmJgotCQkJCQkg
ICAgKHRwMS0+c25kX2NvdW50IDwgMikpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBJZiB0aGVyZSB3
YXMgbm8gcmV0cmFuCi0JCQkJCQkgKiBhbmQgdGhlIGFkZHJlc3MgaXMKLQkJCQkJCSAqIHVuLWNv
bmZpcm1lZCBhbmQgd2Ugc2VudAotCQkJCQkJICogdGhlcmUgYW5kIGFyZSBub3cKLQkJCQkJCSAq
IHNhY2tlZC4uIGl0cyBjb25maXJtZWQsCi0JCQkJCQkgKiBtYXJrIGl0IHNvLgotCQkJCQkJICov
Ci0JCQkJCQl0cDEtPndob1RvLT5kZXN0X3N0YXRlICY9Ci0JCQkJCQkJflNDVFBfQUREUl9VTkNP
TkZJUk1FRDsKLQkJCQkJfQotCQkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNF
TkQpIHsKLQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBf
RkxJR0hUX0xPR19ET1dOX0NBLAotCQkJCQkJCSAgICAgICAgICAgICAgIHRwMS0+d2hvVG8tPmZs
aWdodF9zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJCQkJ
CSAgICAgICAgICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+d2hvVG8sCi0JCQkJCQkJ
ICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCQkJfQotCQkJCQkJc2N0cF9m
bGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwotCQkJCQkJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVh
c2Uoc3RjYiwgdHAxKTsKLQkJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3
bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJCQkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkodHAxLT53aG9UbywKLQkJ
CQkJCQkJCQkJCQkJICAgICB0cDEpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCXRwMS0+d2hvVG8t
Pm5ldF9hY2sgKz0gdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJLyogQ01UIFNGUiBhbmQgREFDIGFs
Z29zICovCi0JCQkJCXRoaXNfc2Fja19sb3dlc3RfbmV3YWNrID0gdHAxLT5yZWMuZGF0YS50c247
Ci0JCQkJCXRwMS0+d2hvVG8tPnNhd19uZXdhY2sgPSAxOwotCi0JCQkJCWlmICh0cDEtPnNuZF9j
b3VudCA8IDIpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBUcnVlIG5vbi1yZXRyYW5zbWl0ZWQKLQkJ
CQkJCSAqIGNodW5rCi0JCQkJCQkgKi8KLQkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2syICs9Ci0J
CQkJCQkJdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJCS8qIHVwZGF0ZSBSVE8gdG9vPyAqLwotCQkJ
CQkJaWYgKHRwMS0+ZG9fcnR0KSB7Ci0JCQkJCQkJaWYgKHJ0b19vaykgewotCQkJCQkJCQl0cDEt
Pndob1RvLT5SVE8gPQotCQkJCQkJCQkJc2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsCi0JCQkJCQkJ
CQkJCSAgIGFzb2MsIHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3Rp
bWUsCi0JCQkJCQkJCQkJCSAgIHNjdHBfYWxpZ25fc2FmZV9ub2NvcHksCi0JCQkJCQkJCQkJCSAg
IFNDVFBfUlRUX0ZST01fREFUQSk7Ci0JCQkJCQkJCXJ0b19vayA9IDA7Ci0JCQkJCQkJfQotCQkJ
CQkJCWlmICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKLQkJCQkJCQkJdHAxLT53aG9U
by0+cnRvX25lZWRlZCA9IDE7Ci0JCQkJCQkJfQotCQkJCQkJCXRwMS0+ZG9fcnR0ID0gMDsKLQkJ
CQkJCX0KLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBDTVQ6IENVQ3YyIGFsZ29yaXRobS4gRnJv
bSB0aGUKLQkJCQkJICogY3VtYWNrJ2QgVFNOcywgZm9yIGVhY2ggVFNOIGJlaW5nCi0JCQkJCSAq
IGFja2VkIGZvciB0aGUgZmlyc3QgdGltZSwgc2V0IHRoZQotCQkJCQkgKiBmb2xsb3dpbmcgdmFy
aWFibGVzIGZvciB0aGUKLQkJCQkJICogY29ycmVzcCBkZXN0aW5hdGlvbi4KLQkJCQkJICogbmV3
X3BzZXVkb19jdW1hY2sgd2lsbCB0cmlnZ2VyIGEKLQkJCQkJICogY3duZCB1cGRhdGUuCi0JCQkJ
CSAqIGZpbmRfKHJ0eF8pcHNldWRvX2N1bWFjayB3aWxsCi0JCQkJCSAqIHRyaWdnZXIgc2VhcmNo
IGZvciB0aGUgbmV4dAotCQkJCQkgKiBleHBlY3RlZCAocnR4LSlwc2V1ZG8tY3VtYWNrLgotCQkJ
CQkgKi8KLQkJCQkJdHAxLT53aG9Uby0+bmV3X3BzZXVkb19jdW1hY2sgPSAxOwotCQkJCQl0cDEt
Pndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOwotCQkJCQl0cDEtPndob1RvLT5maW5kX3J0
eF9wc2V1ZG9fY3VtYWNrID0gMTsKLQotCi0JCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJCXNjdHBf
bG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCi0JCQkJCQkgICAgICAgICAgICAgIGN1bV9h
Y2ssCi0JCQkJCQkgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkJICAgICAg
ICAgICAgICAwLAotCQkJCQkJICAgICAgICAgICAgICAwLAotCQkJCQkJICAgICAgICAgICAgICBT
Q1RQX0xPR19UU05fQUNLRUQpOwotCQkJCQl9Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgdHAxLT53aG9UbywgdHAxLT5yZWMuZGF0YS50c24sIFNDVFBfQ1dO
RF9MT0dfRlJPTV9TQUNLKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAodHAxLT5zZW50ID09IFND
VFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+c2VudF9x
dWV1ZV9yZXRyYW5fY250KTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJCQkJc2N0
cF9hdWRpdF9sb2coMHhCMywKLQkJCQkJICAgICAgICAgICAgICAgKGFzb2MtPnNlbnRfcXVldWVf
cmV0cmFuX2NudCAmIDB4MDAwMDAwZmYpKTsKLSNlbmRpZgotCQkJCX0KLQkJCQlpZiAodHAxLT5y
ZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgewotCQkJCQkvKiBkZWZsYXRlIHRoZSBjd25kICov
Ci0JCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29rX3NpemU7Ci0JCQkJCXRwMS0+cmVj
LmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOwotCQkJCX0KLQkJCQlpZiAodHAxLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKLQkJCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JB
TV9BQ0tFRDsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQli
aWdnZXN0X3Rzbl9uZXdseV9hY2tlZCA9IGJpZ2dlc3RfdHNuX2Fja2VkID0gbGFzdF90c247Ci0J
LyogYWx3YXlzIHNldCB0aGlzIHVwIHRvIGN1bS1hY2sgKi8KLQlhc29jLT50aGlzX3NhY2tfaGln
aGVzdF9nYXAgPSBsYXN0X3RzbjsKLQotCWlmICgobnVtX3NlZyA+IDApIHx8IChudW1fbnJfc2Vn
ID4gMCkpIHsKLQotCQkvKgotCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQgSFROQSkgLSB0aGlzX3Nh
Y2tfaGlnaGVzdF9uZXdhY2sgaGFzCi0JCSAqIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VtYWNr
LiBBbHNvIHJlc2V0IHNhd19uZXdhY2sgdG8gMAotCQkgKiBmb3IgYWxsIGRlc3RzLgotCQkgKi8K
LQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCW5ldC0+
c2F3X25ld2FjayA9IDA7Ci0JCQluZXQtPnRoaXNfc2Fja19oaWdoZXN0X25ld2FjayA9IGxhc3Rf
dHNuOwotCQl9Ci0KLQkJLyoKLQkJICogdGhpc1NhY2tIaWdoZXN0R2FwIHdpbGwgaW5jcmVhc2Ug
d2hpbGUgaGFuZGxpbmcgTkVXCi0JCSAqIHNlZ21lbnRzIHRoaXNfc2Fja19oaWdoZXN0X25ld2Fj
ayB3aWxsIGluY3JlYXNlIHdoaWxlCi0JCSAqIGhhbmRsaW5nIE5FV0xZIEFDS0VEIGNodW5rcy4g
dGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgaXMKLQkJICogdXNlZCBmb3IgQ01UIERBQyBhbGdvLiBz
YXdfbmV3YWNrIHdpbGwgYWxzbyBjaGFuZ2UuCi0JCSAqLwotCQlpZiAoc2N0cF9oYW5kbGVfc2Vn
bWVudHMobSwgJm9mZnNldF9zZWcsIHN0Y2IsIGFzb2MsIGxhc3RfdHNuLCAmYmlnZ2VzdF90c25f
YWNrZWQsCi0JCQkmYmlnZ2VzdF90c25fbmV3bHlfYWNrZWQsICZ0aGlzX3NhY2tfbG93ZXN0X25l
d2FjaywKLQkJCW51bV9zZWcsIG51bV9ucl9zZWcsICZydG9fb2spKSB7Ci0JCQl3YWtlX2hpbSsr
OwotCQl9Ci0JCS8qCi0JCSAqIHZhbGlkYXRlIHRoZSBiaWdnZXN0X3Rzbl9hY2tlZCBpbiB0aGUg
Z2FwIGFja3MgaWYKLQkJICogc3RyaWN0IGFkaGVyZW5jZSBpcyB3YW50ZWQuCi0JCSAqLwotCQlp
ZiAoU0NUUF9UU05fR0UoYmlnZ2VzdF90c25fYWNrZWQsIHNlbmRfcykpIHsKLQkJCS8qCi0JCQkg
KiBwZWVyIGlzIGVpdGhlciBjb25mdXNlZCBvciB3ZSBhcmUgdW5kZXIKLQkJCSAqIGF0dGFjay4g
V2UgbXVzdCBhYm9ydC4KLQkJCSAqLwotCQkJU0NUUF9QUklOVEYoIkhvcGVsZXNzIHBlZXIhIGJp
Z2dlc3RfdHNuX2Fja2VkOiV4IGxhcmdlc3Qgc2VxOiV4XG4iLAotCQkJCSAgICBiaWdnZXN0X3Rz
bl9hY2tlZCwgc2VuZF9zKTsKLQkJCWdvdG8gaG9wZWxlc3NfcGVlcjsKLQkJfQotCX0KLQkvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiBjYW5jZWwgQUxM
IFQzLXNlbmQgdGltZXIgaWYgYWNjdW0gbW92ZWQgKi8KLQkvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KLQlpZiAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkg
ewotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkJaWYg
KG5ldC0+bmV3X3BzZXVkb19jdW1hY2spCi0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAotCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQs
Ci0JCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI3
KTsKLQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGFjY3VtX21vdmVkKSB7Ci0JCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCXNjdHBfdGltZXJfc3RvcChT
Q1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKLQkJCQkgICAgICAgICAgICAgICAg
c3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yOCk7Ci0JCQl9Ci0J
CX0KLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
CS8qIGRyb3AgdGhlIGFja2VkIGNodW5rcyBmcm9tIHRoZSBzZW50cXVldWUgKi8KLQkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JYXNvYy0+bGFzdF9hY2tl
ZF9zZXEgPSBjdW1fYWNrOwotCi0JVEFJTFFfRk9SRUFDSF9TQUZFKHRwMSwgJmFzb2MtPnNlbnRf
cXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7Ci0JCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRh
LnRzbiwgY3VtX2FjaykpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh0cDEtPnNlbnQgIT0gU0NU
UF9EQVRBR1JBTV9OUl9BQ0tFRCkgewotCQkJaWYgKGFzb2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0
YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7Ci0JCQkJYXNvYy0+c3RybW91dFt0cDEtPnJl
Yy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCX0g
ZWxzZSB7Ci0JCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwg
dHAxLT5yZWMuZGF0YS5zaWQpOwotI2VuZGlmCi0JCQl9Ci0JCX0KLQkJaWYgKChhc29jLT5zdHJt
b3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCi0JCSAgICAo
YXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVT
RVRfUEVORElORykgJiYKLQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zdHJtb3V0W3RwMS0+cmVj
LmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKLQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOwotCQl9
Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwgdHAxLCBzY3RwX25leHQpOwotCQlp
ZiAoUFJfU0NUUF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7Ci0JCQlpZiAoYXNvYy0+cHJfc2N0cF9j
bnQgIT0gMCkKLQkJCQlhc29jLT5wcl9zY3RwX2NudC0tOwotCQl9Ci0JCWFzb2MtPnNlbnRfcXVl
dWVfY250LS07Ci0JCWlmICh0cDEtPmRhdGEpIHsKLQkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NI
SyAqLwotCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgMSk7Ci0JCQlzY3Rw
X21fZnJlZW0odHAxLT5kYXRhKTsKLQkJCXRwMS0+ZGF0YSA9IE5VTEw7Ci0JCQlpZiAoYXNvYy0+
cHJzY3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQX0JVRl9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7Ci0J
CQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0tOwotCQkJfQotCQl9Ci0JCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCi0JCQkgICAg
ICAgICAgICAgIGN1bV9hY2ssCi0JCQkgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAot
CQkJICAgICAgICAgICAgICAwLAotCQkJICAgICAgICAgICAgICAwLAotCQkJICAgICAgICAgICAg
ICBTQ1RQX0xPR19GUkVFX1NFTlQpOwotCQl9Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRw
MSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJd2FrZV9oaW0rKzsKLQl9Ci0JaWYgKFRBSUxRX0VN
UFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJiAoYXNvYy0+dG90YWxfZmxpZ2h0ID4gMCkpIHsKLSNp
ZmRlZiBJTlZBUklBTlRTCi0JCXBhbmljKCJXYXJuaW5nIGZsaWdodCBzaXplIGlzIHBvc2l0aXZl
IGFuZCBzaG91bGQgYmUgMCIpOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYoIldhcm5pbmcgZmxpZ2h0
IHNpemUgaW5jb3JyZWN0IHNob3VsZCBiZSAwIGlzICVkXG4iLAotCQkgICAgICAgICAgICBhc29j
LT50b3RhbF9mbGlnaHQpOwotI2VuZGlmCi0JCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7Ci0JfQot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2Nh
bGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJdWludDMyX3QgaW5xdWV1
ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0JCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JCQlp
bnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxf
b3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6
ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKLQkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9M
SU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29j
LnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUg
c2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9sZCAqLwotCQkJaWYgKGlucC0+
c2VuZF9jYWxsYmFjayAmJgotCQkJICAgKCgoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA+IDApICYm
IChzYl9mcmVlX25vdyA+PSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkKSkgfHwKLQkJCSAgICAoaW5w
LT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkpIHsKLQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlpbnAtPnNl
bmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIHNiX2ZyZWVfbm93KTsKLQkJCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOwotCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKHdha2VfaGltKSAmJiAoc3RjYi0+c2N0cF9z
b2NrZXQpKSB7Ci0jZWxzZQotCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLwotCWlmICgod2Fr
ZV9oaW0pICYmIChzdGNiLT5zY3RwX3NvY2tldCkpIHsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzdHJ1Y3Qgc29ja2V0
ICpzbzsKLQotI2VuZGlmCi0JCVNPQ0tCVUZfTE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Nu
ZCk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dB
S0VfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfd2FrZXVwX2xvZyhzdGNiLCB3YWtlX2hpbSwg
U0NUUF9XQUtFU05EX0ZST01fU0FDSyk7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5z
Y3RwX2VwKTsKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkg
ewotCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KLQkJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQlzY3Rw
X3Nvd3dha2V1cF9sb2NrZWQoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJM
RSkgewotCQkJc2N0cF93YWtldXBfbG9nKHN0Y2IsIHdha2VfaGltLCBTQ1RQX05PV0FLRV9GUk9N
X1NBQ0spOwotCQl9Ci0JfQotCi0JaWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnkg
JiYgYWNjdW1fbW92ZWQpIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2Vx
LCBhc29jLT5mYXN0X3JlY292ZXJ5X3RzbikpIHsKLQkJCS8qIFNldHVwIHNvIHdlIHdpbGwgZXhp
dCBSRkMyNTgyIGZhc3QgcmVjb3ZlcnkgKi8KLQkJCXdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0g
MTsKLQkJfQotCX0KLQkvKgotCSAqIENoZWNrIGZvciByZXZva2VkIGZyYWdtZW50czoKLQkgKgot
CSAqIGlmIFByZXZpb3VzIHNhY2sgLSBIYWQgbm8gZnJhZ3MgdGhlbiB3ZSBjYW4ndCBoYXZlIGFu
eSByZXZva2VkIGlmCi0JICogUHJldmlvdXMgc2FjayAtIEhhZCBmcmFnJ3MgdGhlbiAtIElmIHdl
IG5vdyBoYXZlIGZyYWdzIGFrYQotCSAqIG51bV9zZWcgPiAwIGNhbGwgc2N0cF9jaGVja19mb3Jf
cmV2b2tlZCgpIHRvIHRlbGwgaWYgcGVlciByZXZva2VkCi0JICogc29tZSBvZiB0aGVtLiBlbHNl
IC0gVGhlIHBlZXIgcmV2b2tlZCBhbGwgQUNLRUQgZnJhZ21lbnRzLCBzaW5jZQotCSAqIHdlIGhh
ZCBzb21lIGJlZm9yZSBhbmQgbm93IHdlIGhhdmUgTk9ORS4KLQkgKi8KLQotCWlmIChudW1fc2Vn
KSB7Ci0JCXNjdHBfY2hlY2tfZm9yX3Jldm9rZWQoc3RjYiwgYXNvYywgY3VtX2FjaywgYmlnZ2Vz
dF90c25fYWNrZWQpOwotCQlhc29jLT5zYXdfc2Fja193aXRoX2ZyYWdzID0gMTsKLQl9IGVsc2Ug
aWYgKGFzb2MtPnNhd19zYWNrX3dpdGhfZnJhZ3MpIHsKLQkJaW50IGNudF9yZXZva2VkID0gMDsK
LQotCQkvKiBQZWVyIHJldm9rZWQgYWxsIGRnJ3MgbWFya2VkIG9yIGFja2VkICovCi0JCVRBSUxR
X0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQlpZiAodHAx
LT5zZW50ID09IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1NFTlQ7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRzKFND
VFBfRkxJR0hUX0xPR19VUF9SRVZPS0UsCi0JCQkJCSAgICAgICAgICAgICAgIHRwMS0+d2hvVG8t
PmZsaWdodF9zaXplLAotCQkJCQkgICAgICAgICAgICAgICB0cDEtPmJvb2tfc2l6ZSwKLQkJCQkJ
ICAgICAgICAgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKLQkJCQkJICAg
ICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCX0KLQkJCQlzY3RwX2ZsaWdodF9z
aXplX2luY3JlYXNlKHRwMSk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwg
dHAxKTsKLQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMTsKLQkJCQkvKgot
CQkJCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgaW5jcmVhc2UgaW4KLQkJCQkgKiBmbGlnaHRzaXpl
LCB3aGljaCBpcyBhcnRpZmljaWFsLAotCQkJCSAqIGRvZXMgbm90IHRocm90dGxlIHRoZSBzZW5k
ZXIsIHdlCi0JCQkJICogYWxzbyBpbmNyZWFzZSB0aGUgY3duZAotCQkJCSAqIGFydGlmaWNpYWxs
eS4KLQkJCQkgKi8KLQkJCQl0cDEtPndob1RvLT5jd25kICs9IHRwMS0+Ym9va19zaXplOwotCQkJ
CWNudF9yZXZva2VkKys7Ci0JCQl9Ci0JCX0KLQkJaWYgKGNudF9yZXZva2VkKSB7Ci0JCQlyZW5l
Z2VkX2FsbCA9IDE7Ci0JCX0KLQkJYXNvYy0+c2F3X3NhY2tfd2l0aF9mcmFncyA9IDA7Ci0JfQot
CWlmIChudW1fbnJfc2VnID4gMCkKLQkJYXNvYy0+c2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9IDE7
Ci0JZWxzZQotCQlhc29jLT5zYXdfc2Fja193aXRoX25yX2ZyYWdzID0gMDsKLQotCS8qIEpSUyAt
IFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KLQlp
ZiAoZWNuZV9zZWVuID09IDApIHsKLQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBz
Y3RwX25leHQpIHsKLQkJCWlmIChuZXQtPm5ldF9hY2syID4gMCkgewotCQkJCS8qCi0JCQkJICog
S2FybidzIHJ1bGUgYXBwbGllcyB0byBjbGVhcmluZyBlcnJvciBjb3VudCwgdGhpcwotCQkJCSAq
IGlzIG9wdGlvbmFsLgotCQkJCSAqLwotCQkJCW5ldC0+ZXJyb3JfY291bnQgPSAwOwotCQkJCWlm
ICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7Ci0JCQkJCS8qIGFk
ZHIgY2FtZSBnb29kICovCi0JCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hB
QkxFOwotCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNi
LAotCQkJCQkgICAgICAgICAgICAgICAgMCwgKHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7Ci0JCQkJfQotCi0JCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24pIHsKLQkJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCQkJCQkvKiByZWxlYXNl
IHRoZSBhbHRlcm5hdGUsIHByaW1hcnkgaXMgZ29vZCAqLwotCQkJCQkJc2N0cF9mcmVlX3JlbW90
ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKLQkJCQkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRl
ID0gTlVMTDsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUEYpIHsKLQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7Ci0JCQkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAotCQkJCQkgICAgICAg
ICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjkpOwotCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7
Ci0JCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYoc3RjYiwg
bmV0KTsKLQkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCi0JCQkJCW5ldC0+bmV0X2FjayA9
IDA7Ci0JCQkJfQotCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGltZXJzICovCi0JCQkJbmV0
LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7Ci0J
CQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBz
dGNiLT5hc29jLm1pbnJ0bzsKLQkJCQl9Ci0JCQkJaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5t
YXhydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0bzsKLQkJCQl9Ci0JCQl9
Ci0JCX0KLQkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2Fjayhz
dGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdF9mYXN0X3JlY292
ZXJ5KTsKLQl9Ci0KLQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7Ci0JCS8q
IG5vdGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8KLQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5u
ZXRzLCBzY3RwX25leHQpIHsKLQkJCS8qIHN0b3AgYWxsIHRpbWVycyAqLwotCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAotCQkJICAgICAgICAg
ICAgICAgIHN0Y2IsIG5ldCwKLQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRB
VEEgKyBTQ1RQX0xPQ18zMCk7Ci0JCQluZXQtPmZsaWdodF9zaXplID0gMDsKLQkJCW5ldC0+cGFy
dGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCX0KLQkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKLQkJ
YXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKLQl9Ci0KLQkvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KLQkvKiBOb3cgd2hhdCBhYm91dCBzaHV0ZG93biBpc3N1ZXMgKi8K
LQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlpZiAoVEFJTFFfRU1QVFko
JmFzb2MtPnNlbmRfcXVldWUpICYmIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgewot
CQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZHF1ZXVlLi4gY29uc2lkZXIgZG9uZSAqLwotCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFC
TEUpIHsKLQkJCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywK
LQkJCSAgICAgICAgICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAsIDAsIGFfcnduZCk7Ci0J
CX0KLQkJYXNvYy0+cGVlcnNfcnduZCA9IGFfcnduZDsKLQkJaWYgKGFzb2MtPnBlZXJzX3J3bmQg
PCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewotCQkJLyogU1dTIHNl
bmRlciBzaWRlIGVuZ2FnZXMgKi8KLQkJCWFzb2MtPnBlZXJzX3J3bmQgPSAwOwotCQl9Ci0JCS8q
IGNsZWFuIHVwICovCi0JCWlmICgoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgotCQkg
ICAgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKLQkJICAg
ICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKLQkJICAg
ICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShz
dGNiLCBhc29jKSkpIHsKLQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0df
TEVGVDsKLQkJfQotCQlpZiAoKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVO
RElORykgfHwKLQkJICAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpKSAmJgotCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMSkg
JiYKLQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsK
LQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQkJCSphYm9ydF9ub3cgPSAxOwotCQkJLyogWFhY
ICovCi0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklU
SUFURURfQUJULCAiIik7Ci0JCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQ
X0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNDsKLQkJCXNjdHBfYWJvcnRfYW5fYXNzb2Np
YXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQkJcmV0dXJuOwotCQl9Ci0JCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dO
X1BFTkRJTkcpICYmCi0JCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgewotCQkJ
c3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQotCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9
PSBTQ1RQX1NUQVRFX09QRU4pIHx8Ci0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFND
VFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0Uz
MihzY3Rwc19jdXJyZXN0YWIpOwotCQkJfQotCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9T
VEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9T
VEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3du
KHN0Y2IpOwotCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewotCQkJCW5ldHAgPSBhc29jLT5hbHRl
cm5hdGU7Ci0JCQl9IGVsc2UgewotCQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9u
OwotCQkJfQotCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldHApOwotCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBz
dGNiLCBuZXRwKTsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
R1VBUkQsCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCXJldHVybjsKLQkJ
fSBlbHNlIGlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9S
RUNFSVZFRCkgJiYKLQkJCSAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwotCi0JCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBz
X2N1cnJlc3RhYik7Ci0JCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dO
X0FDS19TRU5UKTsKLQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVU
RE9XTl9QRU5ESU5HKTsKLQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOwot
CQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewotCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7Ci0J
CQl9IGVsc2UgewotCQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkJfQot
CQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXRwKTsKLQkJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLLAotCQkJICAgICAgICAgICAgICAgICBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQkvKgotCSAqIE5v
dyBoZXJlIHdlIGFyZSBnb2luZyB0byByZWN5Y2xlIG5ldF9hY2sgZm9yIGEgZGlmZmVyZW50IHVz
ZS4uLgotCSAqIEhFQURTIFVQLgotCSAqLwotCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7Ci0JCW5ldC0+bmV0X2FjayA9IDA7Ci0JfQotCi0JLyoKLQkgKiBDTVQg
REFDIGFsZ29yaXRobTogSWYgU0FDSyBEQUMgZmxhZyB3YXMgMCwgdGhlbiBubyBleHRyYSBtYXJr
aW5nCi0JICogdG8gYmUgZG9uZS4gU2V0dGluZyB0aGlzX3NhY2tfbG93ZXN0X25ld2FjayB0byB0
aGUgY3VtX2FjayB3aWxsCi0JICogYXV0b21hdGljYWxseSBlbnN1cmUgdGhhdC4KLQkgKi8KLQlp
ZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JICAgIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9jbXRfdXNlX2RhYykgJiYKLQkgICAgKGNtdF9kYWNfZmxhZyA9PSAwKSkgewotCQl0aGlz
X3NhY2tfbG93ZXN0X25ld2FjayA9IGN1bV9hY2s7Ci0JfQotCWlmICgobnVtX3NlZyA+IDApIHx8
IChudW1fbnJfc2VnID4gMCkpIHsKLQkJc2N0cF9zdHJpa2VfZ2FwX2Fja19jaHVua3Moc3RjYiwg
YXNvYywgYmlnZ2VzdF90c25fYWNrZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJp
Z2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywgYWNjdW1fbW92
ZWQpOwotCX0KLQkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0
aGUgQ0MgbW9kdWxlICovCi0JYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfZnIoc3RjYiwgYXNvYyk7Ci0KLQkvKiBOb3cgYXJlIHdlIGV4aXRpbmcgbG9zcyByZWNvdmVy
eSA/ICovCi0JaWYgKHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5KSB7Ci0JCS8qIE9rLCB3ZSBtdXN0
IGV4aXQgZmFzdCByZWNvdmVyeSAqLwotCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5
ID0gMDsKLQl9Ci0JaWYgKChhc29jLT5zYXRfdDNfbG9zc19yZWNvdmVyeSkgJiYKLQkgICAgU0NU
UF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGFzb2MtPnNhdF90M19yZWNvdmVyeV90c24p
KSB7Ci0JCS8qIGVuZCBzYXRlbGxpdGUgdDMgbG9zcyByZWNvdmVyeSAqLwotCQlhc29jLT5zYXRf
dDNfbG9zc19yZWNvdmVyeSA9IDA7Ci0JfQotCS8qCi0JICogQ01UIEZhc3QgcmVjb3ZlcnkKLQkg
Ki8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAo
bmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSkgewotCQkJLyogT2ssIHdlIG11c3QgZXhpdCBm
YXN0IHJlY292ZXJ5ICovCi0JCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOwot
CQl9Ci0JfQotCi0JLyogQWRqdXN0IGFuZCBzZXQgdGhlIG5ldyByd25kIHZhbHVlICovCi0JaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5B
QkxFKSB7Ci0JCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywK
LQkJICAgICAgICAgICAgICAgICAgYXNvYy0+cGVlcnNfcnduZCwgYXNvYy0+dG90YWxfZmxpZ2h0
LCAoYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJf
Y2h1bmtfb2gpKSwgYV9yd25kKTsKLQl9Ci0JYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFj
ZV9zdWIoYV9yd25kLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50
MzJfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7Ci0JaWYgKGFzb2MtPnBlZXJz
X3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewotCQkvKiBT
V1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQlhc29jLT5wZWVyc19yd25kID0gMDsKLQl9Ci0J
aWYgKGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgewotCQl3aW5fcHJvYmVfcmVjb3Zlcnkg
PSAxOwotCX0KLQotCS8qCi0JICogTm93IHdlIG11c3Qgc2V0dXAgc28gd2UgaGF2ZSBhIHRpbWVy
IHVwIGZvciBhbnlvbmUgd2l0aAotCSAqIG91dHN0YW5kaW5nIGRhdGEuCi0JICovCi0JZG9uZV9v
bmNlID0gMDsKLWFnYWluOgotCWogPSAwOwotCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7Ci0JCWlmICh3aW5fcHJvYmVfcmVjb3ZlcnkgJiYgKG5ldC0+d2luZG93
X3Byb2JlKSkgewotCQkJd2luX3Byb2JlX3JlY292ZXJlZCA9IDE7Ci0JCQkvKi0KLQkJCSAqIEZp
bmQgZmlyc3QgY2h1bmsgdGhhdCB3YXMgdXNlZCB3aXRoCi0JCQkgKiB3aW5kb3cgcHJvYmUgYW5k
IGNsZWFyIHRoZSBldmVudC4gUHV0Ci0JCQkgKiBpdCBiYWNrIGludG8gdGhlIHNlbmQgcXVldWUg
YXMgaWYgaGFzCi0JCQkgKiBub3QgYmVlbiBzZW50LgotCQkJICovCi0JCQlUQUlMUV9GT1JFQUNI
KHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJCWlmICh0cDEtPndpbmRv
d19wcm9iZSkgewotCQkJCQlzY3RwX3dpbmRvd19wcm9iZV9yZWNvdmVyeShzdGNiLCBhc29jLCB0
cDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKG5ldC0+ZmxpZ2h0X3Np
emUpIHsKLQkJCWorKzsKLQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90
aW1lci50aW1lcikpIHsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5E
LAotCQkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJCX0K
LQkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsK
LQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCS8qIElu
IHdpbmRvdyBwcm9iZXMgd2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRo
ZXJlICovCi0JCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRp
bWVyKSkgewotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJ
CQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0KLQkJCQl9Ci0J
CQl9IGVsc2UgaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIp
KSB7Ci0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3Rw
X2VwLAotCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCi0JCQkJICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzMyKTsKLQkJCX0KLQkJfQotCX0KLQlp
ZiAoKGogPT0gMCkgJiYKLQkgICAgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpICYm
Ci0JICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYKLQkgICAgKHdpbl9w
cm9iZV9yZWNvdmVyZWQgPT0gMCkgJiYKLQkgICAgKGRvbmVfb25jZSA9PSAwKSkgewotCQkvKiBo
dWgsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gdW5sZXNzIGFsbCBwYWNrZXRzCi0JCSAqIGFyZSBQ
Ui1TQ1RQIGFuZCBtYXJrZWQgdG8gc2tpcCBvZiBjb3Vyc2UuCi0JCSAqLwotCQlpZiAoc2N0cF9m
c19hdWRpdChhc29jKSkgewotCQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3Rw
X25leHQpIHsKLQkJCQluZXQtPmZsaWdodF9zaXplID0gMDsKLQkJCX0KLQkJCWFzb2MtPnRvdGFs
X2ZsaWdodCA9IDA7Ci0JCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOwotCQkJYXNvYy0+
c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKLQkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+
c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKTsKLQkJCQkJ
c2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKLQkJCQl9IGVsc2UgaWYgKHRw
MS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCQlzY3RwX3Vjb3VudF9pbmNy
KGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWRvbmVf
b25jZSA9IDE7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCS8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKiovCi0JLyogSGVyZSB3ZSBwZXJmb3JtIFBSLVNDVFAgcHJvY2Vk
dXJlcyAgICAgICAgKi8KLQkvKiAoc2VjdGlvbiA0LjIpICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0JLyogQzEuIHVwZGF0ZSBhZHZhbmNlZFBlZXJBY2tQb2ludCAqLwotCWlmIChTQ1RQX1RTTl9H
VChjdW1fYWNrLCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCkpIHsKLQkJYXNvYy0+YWR2
YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1fYWNrOwotCX0KLQkvKiBDMi4gdHJ5IHRvIGZ1cnRo
ZXIgbW92ZSBhZHZhbmNlZFBlZXJBY2tQb2ludCBhaGVhZCAqLwotCWlmICgoYXNvYy0+cHJzY3Rw
X3N1cHBvcnRlZCkgJiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsKLQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqbGNoazsKLQkJdWludDMyX3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2ludDsKLQot
CQlvbGRfYWR2X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7
Ci0JCWxjaGsgPSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFzb2MpOwot
CQkvKiBDMy4gU2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04gKi8KLQkJaWYgKFNDVFBf
VFNOX0dUKGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1fYWNrKSkgewotCQkJLyoK
LQkJCSAqIElTU1VFIHdpdGggRUNOLCBzZWUgRldELVRTTiBwcm9jZXNzaW5nLgotCQkJICovCi0J
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZ
X0FEVkFOQ0UpIHsKLQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCi0JCQkJ
ICAgICAgICAgICAgICAgMHhlZSwgY3VtX2FjaywgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9p
bnQsCi0JCQkJICAgICAgICAgICAgICAgb2xkX2Fkdl9wZWVyX2Fja19wb2ludCk7Ci0JCQl9Ci0J
CQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsIG9sZF9hZHZf
cGVlcl9hY2tfcG9pbnQpKSB7Ci0JCQkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCBhc29jKTsKLQkJ
CX0gZWxzZSBpZiAobGNoaykgewotCQkJCS8qIHRyeSB0byBGUiBmd2QtdHNuJ3MgdGhhdCBnZXQg
bG9zdCB0b28gKi8KLQkJCQlpZiAobGNoay0+cmVjLmRhdGEuZndkX3Rzbl9jbnQgPj0gMykgewot
CQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlp
ZiAobGNoaykgewotCQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8KLQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsCi0JCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIGxjaGstPndob1RvKTsKLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsK
LQkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNLX1JXTkRfVVBEQVRFLAotCQkgICAgICAgICAgICAg
ICBhX3J3bmQsCi0JCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKLQkJICAg
ICAgICAgICAgICAgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsCi0JCSAgICAgICAgICAgICAgIHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCX0KLX0KLQotdm9pZAotc2N0cF91
cGRhdGVfYWNrZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9j
aHVuayAqY3AsIGludCAqYWJvcnRfZmxhZykKLXsKLQkvKiBDb3B5IGN1bS1hY2sgKi8KLQl1aW50
MzJfdCBjdW1fYWNrLCBhX3J3bmQ7Ci0KLQljdW1fYWNrID0gbnRvaGwoY3AtPmN1bXVsYXRpdmVf
dHNuX2Fjayk7Ci0JLyogQXJyYW5nZSBzbyBhX3J3bmQgZG9lcyBOT1QgY2hhbmdlICovCi0JYV9y
d25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kICsgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7Ci0K
LQkvKiBOb3cgY2FsbCB0aGUgZXhwcmVzcyBzYWNrIGhhbmRsaW5nICovCi0Jc2N0cF9leHByZXNz
X2hhbmRsZV9zYWNrKHN0Y2IsIGN1bV9hY2ssIGFfcnduZCwgYWJvcnRfZmxhZywgMCk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX2tpY2tfcHJzY3RwX3Jlb3JkZXJfcXVldWUoc3RydWN0IHNjdHBf
dGNiICpzdGNiLAotCQkJICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybWluKQotewot
CXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7Ci0Jc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0JdWludDMyX3QgbWlkOwotCWludCBuZWVkX3JlYXNt
X2NoZWNrID0gMDsKLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQltaWQgPSBzdHJtaW4tPmxhc3Rf
bWlkX2RlbGl2ZXJlZDsKLQkvKgotCSAqIEZpcnN0IGRlbGl2ZXIgYW55dGhpbmcgcHJpb3IgdG8g
YW5kIGluY2x1ZGluZyB0aGUgc3RyZWFtIG5vIHRoYXQKLQkgKiBjYW1lIGluLgotCSAqLwotCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmc3RybWluLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwg
bmNvbnRyb2wpIHsKLQkJaWYgKFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlk
LCBjb250cm9sLT5taWQpKSB7Ci0JCQkvKiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLwotCQkJ
aWYgKCgoY29udHJvbC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpICA9
PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7Ci0J
CQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7Ci0JCQkJCQlU
QUlMUV9SRU1PVkUoJnN0cm1pbi0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJ
CQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX1VOT1JERVJFRCkgewot
CQkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtaW4tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2lu
c3RybSk7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQl9IGVsc2UgewotCQkJCQkJcGFuaWMoInN0
cm1pbjogJXAgY3RsOiAlcCB1bmtub3duICVkIiwKLQkJCQkJCSAgICAgIHN0cm1pbiwgY29udHJv
bCwgY29udHJvbC0+b25fc3RybV9xKTsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJCWNvbnRyb2wtPm9u
X3N0cm1fcSA9IDA7Ci0JCQkJfQotCQkJCS8qIHN1YnRyYWN0IHBlbmRpbmcgb24gc3RyZWFtcyAq
LwotCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkg
ewotCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKLQkJ
CQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0
cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29u
X2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOwotI2Vsc2UKLQkJCQkJYXNvYy0+c2l6ZV9v
bl9hbGxfc3RyZWFtcyA9IDA7Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJc2N0cF91Y291bnRfZGVjcihh
c29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOwotCQkJCS8qIGRlbGl2ZXIgaXQgdG8gYXQgbGVhc3Qg
dGhlIGRlbGl2ZXJ5LXEgKi8KLQkJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLQkJCQkJc2N0
cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+c2luZm9fdHNuKTsKLQkJCQkJc2N0
cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCQkgIGNvbnRyb2wsCi0J
CQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwKLQkJCQkJCQkgIDEsIFNDVFBfUkVB
RF9MT0NLX0hFTEQsCi0JCQkJCQkJICBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCX0KLQkJCX0g
ZWxzZSB7Ci0JCQkJLyogSXRzIGEgZnJhZ21lbnRlZCBtZXNzYWdlICovCi0JCQkJaWYgKGNvbnRy
b2wtPmZpcnN0X2ZyYWdfc2VlbikgewotCQkJCQkvKiBNYWtlIGl0IHNvIHRoaXMgaXMgbmV4dCB0
byBkZWxpdmVyLCB3ZSByZXN0b3JlIGxhdGVyICovCi0JCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVs
aXZlcmVkID0gY29udHJvbC0+bWlkIC0gMTsKLQkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDE7Ci0J
CQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIG5vIG1vcmUgZGVsaXZl
cnkgbm93LiAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKG5lZWRfcmVhc21fY2hlY2spIHsK
LQkJaW50IHJldDsKLQkJcmV0ID0gc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsICZzdGNi
LT5hc29jLCBzdHJtaW4sIFNDVFBfUkVBRF9MT0NLX0hFTEQpOwotCQlpZiAoU0NUUF9NSURfR1Qo
YXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQsIHN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkKSkg
ewotCQkJLyogUmVzdG9yZSB0aGUgbmV4dCB0byBkZWxpdmVyIHVubGVzcyB3ZSBhcmUgYWhlYWQg
Ki8KLQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlkOwotCQl9Ci0JCWlmIChyZXQg
PT0gMCkgewotCQkJLyogTGVmdCB0aGUgZnJvbnQgUGFydGlhbCBvbmUgb24gKi8KLQkJCXJldHVy
bjsKLQkJfQotCQluZWVkX3JlYXNtX2NoZWNrID0gMDsKLQl9Ci0JLyoKLQkgKiBub3cgd2UgbXVz
dCBkZWxpdmVyIHRoaW5ncyBpbiBxdWV1ZSB0aGUgbm9ybWFsIHdheSAgaWYgYW55IGFyZQotCSAq
IG5vdyByZWFkeS4KLQkgKi8KLQltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7
Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZzdHJtaW4tPmlucXVldWUsIG5leHRfaW5z
dHJtLCBuY29udHJvbCkgewotCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVk
LCBtaWQsIGNvbnRyb2wtPm1pZCkpIHsKLQkJCWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+
IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJCQkv
KiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLwotCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3Ep
IHsKLQkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKLQkJ
CQkJCVRBSUxRX1JFTU9WRSgmc3RybWluLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7
Ci0JCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVE
KSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm1pbi0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5l
eHRfaW5zdHJtKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlwYW5p
Yygic3RybWluOiAlcCBjdGw6ICVwIHVua25vd24gJWQiLAotCQkJCQkJICAgICAgc3RybWluLCBj
b250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOwotI2VuZGlmCi0JCQkJCX0KLQkJCQkJY29udHJv
bC0+b25fc3RybV9xID0gMDsKLQkJCQl9Ci0JCQkJLyogc3VidHJhY3QgcGVuZGluZyBvbiBzdHJl
YW1zICovCi0JCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVu
Z3RoKSB7Ci0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3Ro
OwotCQkJCX0gZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQlwYW5pYygic2l6ZV9vbl9h
bGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNp
emVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxzZQotCQkJCQlhc29jLT5z
aXplX29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCX0KLQkJCQlzY3RwX3Vjb3VudF9k
ZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCQkJLyogZGVsaXZlciBpdCB0byBhdCBs
ZWFzdCB0aGUgZGVsaXZlcnktcSAqLwotCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0g
Y29udHJvbC0+bWlkOwotCQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJCQlzY3RwX21h
cmtfbm9uX3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOwotCQkJCQlzY3RwX2Fk
ZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSAgY29udHJvbCwKLQkJCQkJ
CQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAotCQkJCQkJCSAgU0NUUF9SRUFEX0xP
Q0tfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQotCQkJCX0KLQkJCQltaWQgPSBzdHJtaW4t
Pmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEl0cyBhIGZyYWdt
ZW50ZWQgbWVzc2FnZSAqLwotCQkJCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKLQkJ
CQkJLyogTWFrZSBpdCBzbyB0aGlzIGlzIG5leHQgdG8gZGVsaXZlciAqLwotCQkJCQlzdHJtaW4t
Pmxhc3RfbWlkX2RlbGl2ZXJlZCA9IGNvbnRyb2wtPm1pZCAtIDE7Ci0JCQkJCW5lZWRfcmVhc21f
Y2hlY2sgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlicmVh
azsKLQkJfQotCX0KLQlpZiAobmVlZF9yZWFzbV9jaGVjaykgewotCQkodm9pZClzY3RwX2RlbGl2
ZXJfcmVhc21fY2hlY2soc3RjYiwgJnN0Y2ItPmFzb2MsIHN0cm1pbiwgU0NUUF9SRUFEX0xPQ0tf
SEVMRCk7Ci0JfQotfQotCi0KLQotc3RhdGljIHZvaWQKLXNjdHBfZmx1c2hfcmVhc3NtX2Zvcl9z
dHJfc2VxKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKLQl1aW50MTZfdCBzdHJlYW0sIHVpbnQzMl90IG1pZCwgaW50IG9yZGVyZWQsIHVpbnQz
Ml90IGN1bXRzbikKLXsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm07Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hr
LCAqbmNoazsKLQlpbnQgY250X3JlbW92ZWQ9MDsKLQotCS8qCi0JICogRm9yIG5vdyBsYXJnZSBt
ZXNzYWdlcyBoZWxkIG9uIHRoZSBzdHJlYW0gcmVhc20gdGhhdCBhcmUKLQkgKiBjb21wbGV0ZSB3
aWxsIGJlIHRvc3NlZCB0b28uIFdlIGNvdWxkIGluIHRoZW9yeSBkbyBtb3JlCi0JICogd29yayB0
byBzcGluIHRocm91Z2ggYW5kIHN0b3AgYWZ0ZXIgZHVtcGluZyBvbmUgbXNnIGFrYQotCSAqIHNl
ZWluZyB0aGUgc3RhcnQgb2YgYSBuZXcgbXNnIGF0IHRoZSBoZWFkLCBhbmQgY2FsbCB0aGUKLQkg
KiBkZWxpdmVyeSBmdW5jdGlvbi4uLiB0byBzZWUgaWYgaXQgY2FuIGJlIGRlbGl2ZXJlZC4uLiBC
dXQKLQkgKiBmb3Igbm93IHdlIGp1c3QgZHVtcCBldmVyeXRoaW5nIG9uIHRoZSBxdWV1ZS4KLQkg
Ki8KLQlzdHJtID0gJmFzb2MtPnN0cm1pbltzdHJlYW1dOwotCWNvbnRyb2wgPSBzY3RwX2ZpbmRf
cmVhc21fZW50cnkoc3RybSwgbWlkLCBvcmRlcmVkLCBhc29jLT5pZGF0YV9zdXBwb3J0ZWQpOwot
CWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogTm90IGZvdW5kICovCi0JCXJldHVybjsKLQl9
Ci0JaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgIW9yZGVyZWQgJiYgU0NUUF9UU05fR1Qo
Y29udHJvbC0+ZnNuX2luY2x1ZGVkLCBjdW10c24pKSB7Ci0JCXJldHVybjsKLQl9Ci0JVEFJTFFf
Rk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKLQkJ
LyogUHVyZ2UgaGFuZ2luZyBjaHVua3MgKi8KLQkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQg
JiYgKG9yZGVyZWQgPT0gMCkpIHsKLQkJCWlmIChTQ1RQX1RTTl9HVChjaGstPnJlYy5kYXRhLnRz
biwgY3VtdHNuKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNudF9yZW1vdmVkKys7Ci0J
CVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKLQkJaWYgKGFz
b2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0gY2hrLT5zZW5kX3NpemUpIHsKLQkJCWFzb2MtPnNp
emVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5zZW5kX3NpemU7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYg
SU5WQVJJQU5UUwotCQkJcGFuaWMoInNpemVfb25fcmVhc21fcXVldWUgPSAldSBzbWFsbGVyIHRo
YW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSwgY2hrLT5zZW5k
X3NpemUpOwotI2Vsc2UKLQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPSAwOwotI2VuZGlm
Ci0JCX0KLQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOwotCQlp
ZiAoY2hrLT5kYXRhKSB7Ci0JCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCWNoay0+ZGF0
YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCX0KLQlpZiAoIVRBSUxRX0VNUFRZKCZjb250cm9sLT5yZWFzbSkpIHsKLQkJ
LyogVGhpcyBoYXMgdG8gYmUgb2xkIGRhdGEsIHVub3JkZXJlZCAqLwotCQlpZiAoY29udHJvbC0+
ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOwotCQkJY29udHJvbC0+ZGF0
YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9yZXNldF9hX2NvbnRyb2woY29udHJvbCwgc3RjYi0+c2N0
cF9lcCwgY3VtdHNuKTsKLQkJY2hrID0gVEFJTFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKLQkJ
aWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKLQkJ
CVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKLQkJCXNjdHBf
YWRkX2Noa190b19jb250cm9sKGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsCi0JCQkJCQljaGss
IFNDVFBfUkVBRF9MT0NLX0hFTEQpOwotCQl9Ci0JCXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhz
dGNiLCBhc29jLCBzdHJtLCBTQ1RQX1JFQURfTE9DS19IRUxEKTsKLQkJcmV0dXJuOwotCX0KLQlp
ZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fT1JERVJFRCkgewotCQlUQUlMUV9SRU1P
VkUoJnN0cm0tPmlucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJaWYgKGFzb2MtPnNp
emVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0JCQlhc29jLT5zaXplX29u
X2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKLQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZB
UklBTlRTCi0JCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBj
b250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxl
bmd0aCk7Ci0jZWxzZQotCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7Ci0jZW5kaWYK
LQkJfQotCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCWNv
bnRyb2wtPm9uX3N0cm1fcSA9IDA7Ci0JfSBlbHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0g
U0NUUF9PTl9VTk9SREVSRUQpIHsKLQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwg
Y29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotI2lmZGVm
IElOVkFSSUFOVFMKLQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgewotCQlwYW5pYygi
c3RybTogJXAgY3RsOiAlcCB1bmtub3duICVkIiwKLQkJICAgIHN0cm0sIGNvbnRyb2wsIGNvbnRy
b2wtPm9uX3N0cm1fcSk7Ci0jZW5kaWYKLQl9Ci0JY29udHJvbC0+b25fc3RybV9xID0gMDsKLQlp
ZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNv
bnRyb2wtPndob0Zyb20pOwotCQlpZiAoY29udHJvbC0+ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVt
KGNvbnRyb2wtPmRhdGEpOwotCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9m
cmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0JfQotfQotCi12b2lkCi1zY3RwX2hhbmRsZV9m
b3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAqZndkLAotICAgICAgICAgICAgICAgICAg
ICAgICAgaW50ICphYm9ydF9mbGFnLCBzdHJ1Y3QgbWJ1ZiAqbSAsIGludCBvZmZzZXQpCi17Ci0J
LyogVGhlIHByLXNjdHAgZndkIHRzbiAqLwotCS8qCi0JICogaGVyZSB3ZSB3aWxsIHBlcmZvcm0g
YWxsIHRoZSBkYXRhIHJlY2VpdmVyIHNpZGUgc3RlcHMgZm9yCi0JICogcHJvY2Vzc2luZyBGd2RU
U04sIGFzIHJlcXVpcmVkIGluIGJ5IHByLXNjdHAgZHJhZnQ6Ci0JICoKLQkgKiBBc3N1bWUgd2Ug
Z2V0IEZ3ZFRTTih4KToKLQkgKgotCSAqIDEpIHVwZGF0ZSBsb2NhbCBjdW1UU04gdG8geCAKLQkg
KiAyKSB0cnkgdG8gZnVydGhlciBhZHZhbmNlIGN1bVRTTiB0byB4ICsgb3RoZXJzIHdlIGhhdmUg
Ci0JICogMykgZXhhbWluZSBhbmQgdXBkYXRlIHJlLW9yZGVyaW5nIHF1ZXVlIG9uIHByLWluLXN0
cmVhbXMgCi0JICogNCkgY2xlYW4gdXAgcmUtYXNzZW1ibHkgcXVldWUgCi0JICogNSkgU2VuZCBh
IHNhY2sgdG8gcmVwb3J0IHdoZXJlIHdlIGFyZS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYzsKLQl1aW50MzJfdCBuZXdfY3VtX3RzbiwgZ2FwOwotCXVuc2lnbmVkIGludCBp
LCBmd2Rfc3osIG1fc2l6ZTsKLQl1aW50MzJfdCBzdHJfc2VxOwotCXN0cnVjdCBzY3RwX3N0cmVh
bV9pbiAqc3RybTsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKnN2Owot
Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmICgoZndkX3N6ID0gbnRvaHMoZndkLT5jaC5jaHVu
a19sZW5ndGgpKSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsCi0JCQkiQmFkIHNpemUgdG9vIHNtYWxsL2JpZyBm
d2QtdHNuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltX3NpemUgPSAoc3RjYi0+YXNvYy5tYXBwaW5n
X2FycmF5X3NpemUgPDwgMyk7Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMS4gSGVyZSB3ZSB1cGRhdGUgbG9jYWwg
Y3VtVFNOIGFuZCBzaGlmdCB0aGUgYml0bWFwIGFycmF5ICovCi0JLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JbmV3X2N1bV90
c24gPSBudG9obChmd2QtPm5ld19jdW11bGF0aXZlX3Rzbik7Ci0KLQlpZiAoU0NUUF9UU05fR0Uo
YXNvYy0+Y3VtdWxhdGl2ZV90c24sIG5ld19jdW1fdHNuKSkgewotCQkvKiBBbHJlYWR5IGdvdCB0
aGVyZSAuLi4gKi8KLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIG5vdyB3ZSBrbm93IHRoZSBuZXcg
VFNOIGlzIG1vcmUgYWR2YW5jZWQsIGxldCdzIGZpbmQgdGhlIGFjdHVhbAotCSAqIGdhcAotCSAq
LwotCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgbmV3X2N1bV90c24sIGFzb2MtPm1hcHBpbmdf
YXJyYXlfYmFzZV90c24pOwotCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0gbmV3X2N1bV90c247Ci0J
aWYgKGdhcCA+PSBtX3NpemUpIHsKLQkJaWYgKChsb25nKWdhcCA+IHNjdHBfc2JzcGFjZSgmc3Rj
Yi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpKSB7Ci0JCQlzdHJ1Y3QgbWJ1ZiAq
b3BfZXJyOwotCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQkJLyoKLQkJCSAq
IG91dCBvZiByYW5nZSAob2Ygc2luZ2xlIGJ5dGUgY2h1bmtzIGluIHRoZSByd25kIEkKLQkJCSAq
IGdpdmUgb3V0KS4gVGhpcyBtdXN0IGJlIGFuIGF0dGFja2VyLgotCQkJICovCi0JCQkqYWJvcnRf
ZmxhZyA9IDE7Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAotCQkJICAgICAgICAgIk5l
dyBjdW0gYWNrICU4Ljh4IHRvbyBoaWdoLCBoaWdoZXN0IFRTTiAlOC44eCIsCi0JCQkgICAgICAg
ICBuZXdfY3VtX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCk7Ci0JCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cp
OwotCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5E
QVRBICsgU0NUUF9MT0NfMzM7Ci0JCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCXJldHVybjsKLQkJ
fQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19md2R0c25fbWFwX292ZXIpOwotCi0JCW1lbXNldChz
dGNiLT5hc29jLm1hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXpl
KTsKLQkJYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IG5ld19jdW1fdHNuICsgMTsKLQkJ
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IG5ld19jdW1fdHNuOwotCi0JCW1lbXNldChz
dGNiLT5hc29jLm5yX21hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9z
aXplKTsKLQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IG5ld19jdW1fdHNuOwot
Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9M
T0dHSU5HX0VOQUJMRSkgewotCQkJc2N0cF9sb2dfbWFwKDAsIDMsIGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7Ci0JCX0KLQl9IGVsc2UgewotCQlT
Q1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkJZm9yIChpID0gMDsgaSA8PSBnYXA7IGkrKykg
ewotCQkJaWYgKCFTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGkpICYm
Ci0JCQkgICAgIVNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgaSkp
IHsKLQkJCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBpKTsK
LQkJCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArIGksIGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7Ci0JCQkJCWFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9ucl9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgaTsKLQkJCQl9
Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMi4gQ2xlYXIgdXAgcmUtYXNzZW1ibHkgcXVl
dWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLQkvKiBUaGlzIGlz
IG5vdyBkb25lIGFzIHBhcnQgb2YgY2xlYXJpbmcgdXAgdGhlIHN0cmVhbS9zZXEgKi8KLQlpZiAo
YXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJdWludDE2X3Qgc2lkOwotCQkvKiBGbHVz
aCBhbGwgdGhlIHVuLW9yZGVyZWQgZGF0YSBiYXNlZCBvbiBjdW0tdHNuICovCi0JCVNDVFBfSU5Q
X1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJZm9yIChzaWQgPSAwIDsgc2lkIDwgYXNvYy0+
c3RyZWFtaW5jbnQ7IHNpZCsrKSB7Ci0JCQlzY3RwX2ZsdXNoX3JlYXNzbV9mb3Jfc3RyX3NlcShz
dGNiLCBhc29jLCBzaWQsIDAsIDAsIG5ld19jdW1fdHNuKTsKLQkJfQotCQlTQ1RQX0lOUF9SRUFE
X1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMy4gVXBkYXRlIHRoZSBQUi1zdHJl
YW0gcmUtb3JkZXJpbmcgcXVldWVzIGFuZCBmaXggICovCi0JLyogICAgZGVsaXZlcnkgaXNzdWVz
IGFzIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICovCi0JLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JZndkX3N6IC09IHNpemVv
ZigqZndkKTsKLQlpZiAobSAmJiBmd2Rfc3opIHsKLQkJLyogTmV3IG1ldGhvZC4gKi8KLQkJdW5z
aWduZWQgaW50IG51bV9zdHI7Ci0JCXVpbnQzMl90IG1pZCwgY3VyX21pZDsKLQkJdWludDE2X3Qg
c2lkOwotCQl1aW50MTZfdCBvcmRlcmVkLCBmbGFnczsKLQkJc3RydWN0IHNjdHBfc3Ryc2VxICpz
dHNlcSwgc3Ryc2VxYnVmOwotCQlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHNlcV9tLCBzdHJz
ZXFidWZfbTsKLQkJb2Zmc2V0ICs9IHNpemVvZigqZndkKTsKLQotCQlTQ1RQX0lOUF9SRUFEX0xP
Q0soc3RjYi0+c2N0cF9lcCk7Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJCW51
bV9zdHIgPSBmd2Rfc3ogLyBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCk7Ci0JCX0gZWxz
ZSB7Ci0JCQludW1fc3RyID0gZndkX3N6IC8gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7Ci0J
CX0KLQkJZm9yIChpID0gMDsgaSA8IG51bV9zdHI7IGkrKykgewotCQkJaWYgKGFzb2MtPmlkYXRh
X3N1cHBvcnRlZCkgewotCQkJCXN0c2VxX20gPSAoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCAqKXNj
dHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9z
dHJzZXFfbWlkKSwKLQkJCQkJCQkJCSAgICAodWludDhfdCAqKSZzdHJzZXFidWZfbSk7Ci0JCQkJ
b2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKLQkJCQlpZiAoc3RzZXFf
bSA9PSBOVUxMKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlzaWQgPSBudG9ocyhzdHNlcV9t
LT5zaWQpOwotCQkJCW1pZCA9IG50b2hsKHN0c2VxX20tPm1pZCk7Ci0JCQkJZmxhZ3MgPSBudG9o
cyhzdHNlcV9tLT5mbGFncyk7Ci0JCQkJaWYgKGZsYWdzICYgUFJfU0NUUF9VTk9SREVSRURfRkxB
RykgewotCQkJCQlvcmRlcmVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlvcmRlcmVkID0gMTsK
LQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXN0c2VxID0gKHN0cnVjdCBzY3RwX3N0cnNlcSAqKXNj
dHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9z
dHJzZXEpLAotCQkJCQkJCQkJICAgICh1aW50OF90ICopJnN0cnNlcWJ1Zik7Ci0JCQkJb2Zmc2V0
ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpOwotCQkJCWlmIChzdHNlcSA9PSBOVUxMKSB7
Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlzaWQgPSBudG9ocyhzdHNlcS0+c2lkKTsKLQkJCQlt
aWQgPSAodWludDMyX3QpbnRvaHMoc3RzZXEtPnNzbik7Ci0JCQkJb3JkZXJlZCA9IDE7Ci0JCQl9
Ci0JCQkvKiBDb252ZXJ0ICovCi0KLQkJCS8qIG5vdyBwcm9jZXNzICovCi0KLQkJCS8qCi0JCQkg
KiBPayB3ZSBub3cgbG9vayBmb3IgdGhlIHN0cmVhbS9zZXEgb24gdGhlIHJlYWQgcXVldWUKLQkJ
CSAqIHdoZXJlIGl0cyBub3QgYWxsIGRlbGl2ZXJlZC4gSWYgd2UgZmluZCBpdCB3ZSB0cmFuc211
dGUgdGhlCi0JCQkgKiByZWFkIGVudHJ5IGludG8gYSBQRElfQUJPUlRFRC4KLQkJCSAqLwotCQkJ
aWYgKHNpZCA+PSBhc29jLT5zdHJlYW1pbmNudCkgewotCQkJCS8qIHNjcmV3ZWQgdXAgc3RyZWFt
cywgc3RvcCEgICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoKGFzb2MtPnN0cl9vZl9wZGFw
aSA9PSBzaWQpICYmCi0JCQkgICAgKGFzb2MtPnNzbl9vZl9wZGFwaSA9PSBtaWQpKSB7Ci0JCQkJ
LyogSWYgdGhpcyBpcyB0aGUgb25lIHdlIHdlcmUgcGFydGlhbGx5IGRlbGl2ZXJpbmcKLQkJCQkg
KiBub3cgdGhlbiB3ZSBubyBsb25nZXIgYXJlLiBOb3RlIHRoaXMgd2lsbCBjaGFuZ2UKLQkJCQkg
KiB3aXRoIHRoZSByZWFzc2VtYmx5IHJlLXdyaXRlLgotCQkJCSAqLwotCQkJCWFzb2MtPmZyYWdt
ZW50ZWRfZGVsaXZlcnlfaW5wcm9ncmVzcyA9IDA7Ci0JCQl9Ci0JCQlzdHJtID0gJmFzb2MtPnN0
cm1pbltzaWRdOwotCQkJZm9yIChjdXJfbWlkID0gc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkOyBT
Q1RQX01JRF9HRShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgY3VyX21pZCk7IGN1cl9taWQr
KykgewotCQkJCXNjdHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0Y2IsIGFzb2MsIHNpZCwg
Y3VyX21pZCwgb3JkZXJlZCwgbmV3X2N1bV90c24pOwotCQkJfQotCQkJVEFJTFFfRk9SRUFDSChj
b250cm9sLCAmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgbmV4dCkgewotCQkJCWlmICgoY29u
dHJvbC0+c2luZm9fc3RyZWFtID09IHNpZCkgJiYKLQkJCQkgICAgKFNDVFBfTUlEX0VRKGFzb2Mt
PmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSkgewotCQkJCQlzdHJfc2VxID0g
KHNpZCA8PCAxNikgfCAoMHgwMDAwZmZmZiAmIG1pZCk7Ci0JCQkJCWNvbnRyb2wtPnBkYXBpX2Fi
b3J0ZWQgPSAxOwotCQkJCQlzdiA9IHN0Y2ItPmFzb2MuY29udHJvbF9wZGFwaTsKLQkJCQkJY29u
dHJvbC0+ZW5kX2FkZGVkID0gMTsKLQkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQ
X09OX09SREVSRUQpIHsKLQkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJv
bCwgbmV4dF9pbnN0cm0pOwotCQkJCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0g
Y29udHJvbC0+bGVuZ3RoKSB7Ci0JCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBj
b250cm9sLT5sZW5ndGg7Ci0JCQkJCQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJ
CQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxl
bmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0j
ZWxzZQotCQkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOwotI2VuZGlmCi0JCQkJ
CQl9Ci0JCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0J
CQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7
Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2lu
c3RybSk7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0
cm1fcSkgewotCQkJCQkJcGFuaWMoInN0cm06ICVwIGN0bDogJXAgdW5rbm93biAlZCIsCi0JCQkJ
CQkgICAgICBzdHJtLCBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOwotI2VuZGlmCi0JCQkJ
CX0KLQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKLQkJCQkJc3RjYi0+YXNvYy5jb250cm9s
X3BkYXBpID0gY29udHJvbDsKLQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJ
QUxfREVMVklFUllfSU5ESUNBVElPTiwKLQkJCQkJICAgICAgICAgICAgICAgIHN0Y2IsCi0JCQkJ
CSAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRCwKLQkJCQkJICAg
ICAgICAgICAgICAgICh2b2lkICopJnN0cl9zZXEsCi0JCQkJCQkJU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3Y7Ci0JCQkJCWJyZWFrOwotCQkJ
CX0gZWxzZSBpZiAoKGNvbnRyb2wtPnNpbmZvX3N0cmVhbSA9PSBzaWQpICYmCi0JCQkJCSAgIFND
VFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSB7Ci0J
CQkJCS8qIFdlIGFyZSBwYXN0IG91ciB2aWN0aW0gU1NOICovCi0JCQkJCWJyZWFrOwotCQkJCX0K
LQkJCX0KLQkJCWlmIChTQ1RQX01JRF9HVChhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgc3Ry
bS0+bGFzdF9taWRfZGVsaXZlcmVkKSkgewotCQkJCS8qIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVt
YmVyICovCi0JCQkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlkOwotCQkJfQotCQkJLyog
bm93IGtpY2sgdGhlIHN0cmVhbSB0aGUgbmV3IHdheSAqLwotCQkJLypzYV9pZ25vcmUgTk9fTlVM
TF9DSEsqLwotCQkJc2N0cF9raWNrX3Byc2N0cF9yZW9yZGVyX3F1ZXVlKHN0Y2IsIHN0cm0pOwot
CQl9Ci0JCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwotCX0KLQkvKgotCSAq
IE5vdyBzbGlkZSB0aGluZyBmb3J3YXJkLgotCSAqLwotCXNjdHBfc2xpZGVfbWFwcGluZ19hcnJh
eXMoc3RjYik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDYyNWRkNjI0ZjM3YjI2OWIzYzBjZjY4M2VjZGQ0OTVmZjg4NjdhMmIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2luZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qLQotICogQ29w
eXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWlj
aGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIp
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMp
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVl
QlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9z
eXMvbmV0aW5ldC9zY3RwX2luZGF0YS5oIDMxMDU5MCAyMDE2LTEyLTI2IDExOjA2OjQxWiB0dWV4
ZW4gJCIpOwotI2VuZGlmCi0KLSNpZm5kZWYgX05FVElORVRfU0NUUF9JTkRBVEFfSF8KLSNkZWZp
bmUgX05FVElORVRfU0NUUF9JTkRBVEFfSF8KLQotI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCi1zdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqCi1zY3Rw
X2J1aWxkX3JlYWRxX2VudHJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsCi0gICAgdWludDMyX3QgdHNuLCB1aW50MzJfdCBwcGlkLAotICAgIHVpbnQz
Ml90IGNvbnRleHQsIHVpbnQxNl90IHNpZCwKLSAgICB1aW50MzJfdCBtaWQsIHVpbnQ4X3QgZmxh
Z3MsCi0gICAgc3RydWN0IG1idWYgKmRtKTsKLQotCi0jZGVmaW5lIHNjdHBfYnVpbGRfcmVhZHFf
ZW50cnlfbWFjKF9jdGwsIGluX2l0LCBjb250ZXh0LCBuZXQsIHRzbiwgcHBpZCwgc2lkLCBmbGFn
cywgZG0sIHRmc24sIG1pZCkgZG8geyBcCi0JaWYgKF9jdGwpIHsgXAotCQlhdG9taWNfYWRkX2lu
dCgmKChuZXQpLT5yZWZfY291bnQpLCAxKTsgXAotCQltZW1zZXQoX2N0bCwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKSk7IFwKLQkJKF9jdGwpLT5zaW5mb19zdHJlYW0gPSBz
aWQ7IFwKLQkJVEFJTFFfSU5JVCgmX2N0bC0+cmVhc20pOyBcCi0JCShfY3RsKS0+dG9wX2ZzbiA9
IHRmc247IFwKLQkJKF9jdGwpLT5taWQgPSBtaWQ7IFwKLQkJKF9jdGwpLT5zaW5mb19mbGFncyA9
IChmbGFncyA8PCA4KTsgXAotCQkoX2N0bCktPnNpbmZvX3BwaWQgPSBwcGlkOyBcCi0JCShfY3Rs
KS0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7IFwKLQkJKF9jdGwpLT5mc25faW5jbHVkZWQgPSAw
eGZmZmZmZmZmOyBcCi0JCShfY3RsKS0+dG9wX2ZzbiA9IDB4ZmZmZmZmZmY7IFwKLQkJKF9jdGwp
LT5zaW5mb190c24gPSB0c247IFwKLQkJKF9jdGwpLT5zaW5mb19jdW10c24gPSB0c247IFwKLQkJ
KF9jdGwpLT5zaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoKGluX2l0KSk7IFwKLQkJ
KF9jdGwpLT53aG9Gcm9tID0gbmV0OyBcCi0JCShfY3RsKS0+ZGF0YSA9IGRtOyBcCi0JCShfY3Rs
KS0+c3RjYiA9IChpbl9pdCk7IFwKLQkJKF9jdGwpLT5wb3J0X2Zyb20gPSAoaW5faXQpLT5ycG9y
dDsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQotCi0KLXN0cnVjdCBtYnVmICoKLXNjdHBfYnVpbGRf
Y3RsX25jaHVuayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkgICAgICBzdHJ1Y3Qgc2N0cF9z
bmRyY3ZpbmZvICpzaW5mbyk7Ci0KLXZvaWQgc2N0cF9zZXRfcnduZChzdHJ1Y3Qgc2N0cF90Y2Ig
Kiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Ci0KLXVpbnQzMl90Ci1zY3RwX2NhbGNfcndu
ZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsK
LQotdm9pZAotc2N0cF9leHByZXNzX2hhbmRsZV9zYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDMyX3QgY3VtYWNrLAotCQkJIHVpbnQzMl90IHJ3bmQsIGludCAqYWJvcnRfbm93LCBpbnQg
ZWNuZV9zZWVuKTsKLQotdm9pZAotc2N0cF9oYW5kbGVfc2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50
IG9mZnNldF9zZWcsIGludCBvZmZzZXRfZHVwLAotICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgIHVpbnQxNl90IG51bV9zZWcsIHVpbnQxNl90
IG51bV9ucl9zZWcsIHVpbnQxNl90IG51bV9kdXAsCi0gICAgICAgICAgICAgICAgIGludCAqYWJv
cnRfbm93LCB1aW50OF90IGZsYWdzLAotICAgICAgICAgICAgICAgICB1aW50MzJfdCBjdW1fYWNr
LCB1aW50MzJfdCByd25kLCBpbnQgZWNuZV9zZWVuKTsKLQotLyogZHJhZnQtaWV0Zi10c3Z3Zy11
c2N0cCAqLwotdm9pZAotc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RydWN0IHNjdHBfdGNiICos
Ci0JCQlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAqLCBpbnQgKiwgc3RydWN0IG1idWYg
KiwgaW50KTsKLQotc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqCi1zY3RwX3RyeV9hZHZhbmNlX3Bl
ZXJfYWNrX3BvaW50KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
KTsKLQotdm9pZCBzY3RwX3NlcnZpY2VfcXVldWVzKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZAotc2N0cF91cGRhdGVfYWNrZWQoc3RydWN0IHNj
dHBfdGNiICosIHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICosIGludCAqKTsKLQotaW50Ci1z
Y3RwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgbWJ1ZiAqKiwgaW50LCBpbnQgKiwgaW50LAotCQkgIHN0
cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAotCQkgIHN0cnVjdCBzY3RwX25l
dHMgKiwgdWludDMyX3QgKik7Ci0KLXZvaWQgc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IpOwotCi12b2lkIHNjdHBfc2Fja19jaGVjayhzdHJ1Y3Qgc2N0cF90
Y2IgKiwgaW50KTsKLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9pbnB1dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YmI1MTM3OGRjZDY2ZDU5MmE5YWNkZmM3M2FiNDI1Mzc5
Y2NmYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NTU4ICswLDAg
QEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
Ci0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2lucHV0LmMgMzIwNjUzIDIwMTctMDctMDQg
MTg6MjQ6NTBaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9v
cy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1
dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2luZGF0YS5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KLSNpZiBkZWZpbmVkKElORVQpIHx8
IGRlZmluZWQoSU5FVDYpCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNp
bmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotI2luY2x1ZGUgPHN5cy9zbXAuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQ
UExFX18pCi0jZGVmaW5lIEFQUExFX0ZJTEVfTk8gMgotI2VuZGlmCi0KLQotc3RhdGljIHZvaWQK
LXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17Ci0J
c3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JLyogVGhpcyBub3cgbm90IG9ubHkgc3RvcHMgYWxs
IGNvb2tpZSB0aW1lcnMKLQkgKiBpdCBhbHNvIHN0b3BzIGFueSBJTklUIHRpbWVycyBhcyB3ZWxs
LiBUaGlzCi0JICogd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXJzIGFyZSBzdG9wcGVkIGlu
Ci0JICogYWxsIGNvbGxpc2lvbiBjYXNlcy4KLQkgKi8KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChz
dGNiKTsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
Ci0JCWlmIChuZXQtPnJ4dF90aW1lci50eXBlID09IFNDVFBfVElNRVJfVFlQRV9DT09LSUUpIHsK
LQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLAotCQkJCQlzdGNiLT5z
Y3RwX2VwLAotCQkJCQlzdGNiLAotCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NU
UF9MT0NfMSk7Ci0JCX0gZWxzZSBpZiAobmV0LT5yeHRfdGltZXIudHlwZSA9PSBTQ1RQX1RJTUVS
X1RZUEVfSU5JVCkgewotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULAot
CQkJCQlzdGNiLT5zY3RwX2VwLAotCQkJCQlzdGNiLAotCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQ
X0lOUFVUICsgU0NUUF9MT0NfMik7Ci0JCX0KLQl9Ci19Ci0KLS8qIElOSVQgaGFuZGxlciAqLwot
c3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4s
IGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1
Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAotICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjcCwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
IGludCAqYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgICAg
ICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKLXsKLQlzdHJ1
Y3Qgc2N0cF9pbml0ICppbml0OwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQyLCAic2N0cF9oYW5kbGVfaW5pdDogaGFuZGxpbmcgSU5JVCB0Y2I6JXBc
biIsCi0JCSh2b2lkICopc3RjYik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOwotCX0KLQkvKiB2YWxpZGF0ZSBsZW5ndGggKi8KLQlpZiAobnRvaHMoY3AtPmNo
LmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykpIHsKLQkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsK
LQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3Qs
IHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJCQkgICAgICAgdnJmX2lkLCBw
b3J0KTsKLQkJaWYgKHN0Y2IpCi0JCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJZ290byBvdXRu
b3c7Ci0JfQotCS8qIHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KLQlpbml0ID0gJmNwLT5pbml0Owot
CWlmIChpbml0LT5pbml0aWF0ZV90YWcgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBz
ZW5kIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9J
TlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBt
LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0J
CQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNiKQotCQkJKmFib3J0X25vX3VubG9j
ayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAobnRvaGwoaW5pdC0+YV9yd25kKSA8IFND
VFBfTUlOX1JXTkQpIHsKLQkJLyogaW52YWxpZCBwYXJhbWV0ZXIuLi4gc2VuZCBhYm9ydCAqLwot
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwg
IiIpOwotCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVuLCBzcmMs
IGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJCSAgICAgICB2cmZf
aWQsIHBvcnQpOwotCQlpZiAoc3RjYikKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQlnb3Rv
IG91dG5vdzsKLQl9Ci0JaWYgKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMgPT0gMCkgewotCQkv
KiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJh
dGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNz
b2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBl
LCBtZmxvd2lkLAotI2VuZGlmCi0JCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNi
KQotCQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAoaW5p
dC0+bnVtX291dGJvdW5kX3N0cmVhbXMgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBz
ZW5kIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9J
TlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBt
LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0J
CQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNiKQotCQkJKmFib3J0X25vX3VubG9j
ayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAoc2N0cF92YWxpZGF0ZV9pbml0X2F1dGhf
cGFyYW1zKG0sIG9mZnNldCArIHNpemVvZigqY3ApLAotCQkJCQkgICBvZmZzZXQgKyBudG9ocyhj
cC0+Y2guY2h1bmtfbGVuZ3RoKSkpIHsKLQkJLyogYXV0aCBwYXJhbWV0ZXIocykgZXJyb3IuLi4g
c2VuZCBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIlByb2JsZW0gd2l0aCBBVVRIIHBhcmFtZXRlcnMiKTsKLQkJc2N0cF9hYm9ydF9hc3NvY2lh
dGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1m
bG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwot
CQlpZiAoc3RjYikKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQlnb3RvIG91dG5vdzsKLQl9
Ci0JLyogV2UgYXJlIG9ubHkgYWNjZXB0aW5nIGlmIHdlIGhhdmUgYSBsaXN0ZW5pbmcgc29ja2V0
LiovCi0JaWYgKChzdGNiID09IE5VTEwpICYmCi0JICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHx8Ci0JICAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8Ci0JICAgICAoIVNDVFBfSVNfTElTVEVOSU5H
KGlucCkpKSkgewotCQkvKgotCQkgKiBGSVggTUUgPz8gV2hhdCBhYm91dCBUQ1AgbW9kZWwgYW5k
IHdlIGhhdmUgYQotCQkgKiBtYXRjaC9yZXN0YXJ0IGNhc2U/IEFjdHVhbGx5IG5vIGZpeCBpcyBu
ZWVkZWQuCi0JCSAqIHRoZSBsb29rdXAgd2lsbCBhbHdheXMgZmluZCB0aGUgZXhpc3RpbmcgYXNz
b2Mgc28gc3RjYgotCQkgKiB3b3VsZCBub3QgYmUgTlVMTC4gSXQgbWF5IGJlIHF1ZXN0aW9uYWJs
ZSB0byBkbyB0aGlzCi0JCSAqIHNpbmNlIHdlIENPVUxEIGp1c3Qgc2VuZCBiYWNrIHRoZSBJTklU
LUFDSyBhbmQgaG9wZSB0aGF0Ci0JCSAqIHRoZSBhcHAgZGlkIGFjY2VwdCgpJ3MgYnkgdGhlIHRp
bWUgdGhlIENPT0tJRSB3YXMgc2VudC4gQnV0Ci0JCSAqIHRoZXJlIGlzIGEgcHJpY2UgdG8gcGF5
IGZvciBDT09LSUUgZ2VuZXJhdGlvbiBhbmQgSSBkb24ndAotCQkgKiB3YW50IHRvIHBheSBpdCBv
biB0aGUgY2hhbmNlIHRoYXQgdGhlIGFwcCB3aWxsIGFjdHVhbGx5IGRvCi0JCSAqIHNvbWUgYWNj
ZXB0cygpLiBUaGUgQXBwIGp1c3QgbG9vc2VzIGFuZCBzaG91bGQgTk9UIGJlIGluCi0JCSAqIHRo
aXMgc3RhdGUgOi0pCi0JCSAqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9s
ZSkgPT0gMCkgewotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiTm8gbGlzdGVuZXIiKTsKLQkJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNyYywgZHN0
LCBzaCwgMCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgotCQkJICAgICAg
ICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCX0KLQkJZ290byBvdXRub3c7Ci0JfQotCWlmICgo
c3RjYiAhPSBOVUxMKSAmJgotCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDMsICJzY3RwX2hhbmRsZV9pbml0OiBzZW5kaW5nIFNIVVRET1dOLUFDS1xuIik7Ci0JCXNjdHBf
c2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgTlVMTCk7Ci0JCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwg
c3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0MsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JfSBlbHNlIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgInNjdHBfaGFuZGxlX2lu
aXQ6IHNlbmRpbmcgSU5JVC1BQ0tcbiIpOwotCQlzY3RwX3NlbmRfaW5pdGlhdGVfYWNrKGlucCwg
c3RjYiwgbmV0LCBtLCBpcGhsZW4sIG9mZnNldCwKLQkJICAgICAgICAgICAgICAgICAgICAgICBz
cmMsIGRzdCwgc2gsIGNwLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkLCBwb3J0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICgoc3RjYiA9
PSBOVUxMKSA/IFNDVFBfSE9MRFNfTE9DSyA6IFNDVFBfTk9UX0xPQ0tFRCkpOwotCX0KLSBvdXRu
b3c6Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfQot
fQotCi0vKgotICogcHJvY2VzcyBwZWVyICJJTklUL0lOSVQtQUNLIiBjaHVuayByZXR1cm5zIHZh
bHVlIDwgMCBvbiBlcnJvcgotICovCi0KLWludAotc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExF
X18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCVNDVFBfVU5VU0VECi0jZW5k
aWYKLSkKLXsKLQlpbnQgdW5zZW50X2RhdGE7Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOwotCi0JLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGlmIGFueSBzdHJlYW0gaGFzIHRydWUg
dW5zZW50IGRhdGEgb24gaXQuCi0JICogTm90ZSB0aGF0IGFzIGl0IGxvb2tzIHRocm91Z2ggaXQg
d2lsbCBjbGVhbiB1cCBhbnkgcGxhY2VzIHRoYXQKLQkgKiBoYXZlIG9sZCBkYXRhIHRoYXQgaGFz
IGJlZW4gc2VudCBidXQgbGVmdCBhdCB0b3Agb2Ygc3RyZWFtIHF1ZXVlLgotCSAqLwotCWFzb2Mg
PSAmc3RjYi0+YXNvYzsKLQl1bnNlbnRfZGF0YSA9IDA7Ci0JU0NUUF9UQ0JfU0VORF9MT0NLKHN0
Y2IpOwotCWlmICghc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc19lbXB0eShzdGNi
LCBhc29jKSkgewotCQkvKiBDaGVjayB0byBzZWUgaWYgc29tZSBkYXRhIHF1ZXVlZCAqLwotCQlm
b3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQkJLypzYV9p
Z25vcmUgRlJFRURfTUVNT1JZKi8KLQkJCXNwID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5vdXRxdWV1ZSk7Ci0JCQlpZiAoc3AgPT0gTlVMTCkgewotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJaWYgKChzcC0+bXNnX2lzX2NvbXBsZXRlKSAmJgotCQkJICAgIChzcC0+bGVuZ3Ro
ID09IDApICAmJgotCQkJICAgIChzcC0+c2VuZGVyX2FsbF9kb25lKSkgewotCQkJCS8qIFdlIGFy
ZSBkb2luZyBkaWZmZXJlZCBjbGVhbnVwLiBMYXN0Ci0JCQkJICogdGltZSB0aHJvdWdoIHdoZW4g
d2UgdG9vayBhbGwgdGhlIGRhdGEKLQkJCQkgKiB0aGUgc2VuZGVyX2FsbF9kb25lIHdhcyBub3Qg
c2V0LgotCQkJCSAqLwotCQkJCWlmIChzcC0+cHV0X2xhc3Rfb3V0ID09IDApIHsKLQkJCQkJU0NU
UF9QUklOVEYoIkdhaywgcHV0IG91dCBlbnRpcmUgbXNnIHdpdGggTk8gZW5kIS0xXG4iKTsKLQkJ
CQkJU0NUUF9QUklOVEYoInNlbmRlcl9kb25lOiVkIGxlbjolZCBtc2dfY29tcDolZCBwdXRfbGFz
dF9vdXQ6JWRcbiIsCi0JCQkJCSAgICAgICAgICAgIHNwLT5zZW5kZXJfYWxsX2RvbmUsCi0JCQkJ
CSAgICAgICAgICAgIHNwLT5sZW5ndGgsCi0JCQkJCSAgICAgICAgICAgIHNwLT5tc2dfaXNfY29t
cGxldGUsCi0JCQkJCSAgICAgICAgICAgIHNwLT5wdXRfbGFzdF9vdXQpOwotCQkJCX0KLQkJCQlh
dG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQsIDEpOwotCQkJ
CVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlLCBzcCwgbmV4dCk7
Ci0JCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0o
c3RjYiwgYXNvYywgJmFzb2MtPnN0cm1vdXRbaV0sIHNwLCAxKTsKLQkJCQlpZiAoc3AtPm5ldCkg
ewotCQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7Ci0JCQkJCXNwLT5uZXQgPSBO
VUxMOwotCQkJCX0KLQkJCQlpZiAoc3AtPmRhdGEpIHsKLQkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5k
YXRhKTsKLQkJCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJCX0KLQkJCQlzY3RwX2ZyZWVfYV9zdHJt
b3Eoc3RjYiwgc3AsIHNvX2xvY2tlZCk7Ci0JCQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNv
Yy5zdHJtb3V0W2ldLm91dHF1ZXVlKSkgewotCQkJCQl1bnNlbnRfZGF0YSsrOwotCQkJCX0KLQkJ
CX0gZWxzZSB7Ci0JCQkJdW5zZW50X2RhdGErKzsKLQkJCX0KLQkJCWlmICh1bnNlbnRfZGF0YSA+
IDApIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhz
dGNiKTsKLQlyZXR1cm4gKHVuc2VudF9kYXRhKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9wcm9j
ZXNzX2luaXQoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqY3AsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YikKLXsKLQlzdHJ1Y3Qgc2N0cF9pbml0ICppbml0OwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOwotCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlp
bml0ID0gJmNwLT5pbml0OwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQkvKiBzYXZlIG9mZiBwYXJh
bWV0ZXJzICovCi0JYXNvYy0+cGVlcl92dGFnID0gbnRvaGwoaW5pdC0+aW5pdGlhdGVfdGFnKTsK
LQlhc29jLT5wZWVyc19yd25kID0gbnRvaGwoaW5pdC0+YV9yd25kKTsKLQkvKiBpbml0IHRzbidz
ICovCi0JYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IGFzb2MtPmFzY29uZl9zZXFfaW4g
PSBudG9obChpbml0LT5pbml0aWFsX3RzbikgLSAxOwotCi0JaWYgKCFUQUlMUV9FTVBUWSgmYXNv
Yy0+bmV0cykpIHsKLQkJLyogdXBkYXRlIGFueSBzc3RocmVzaCdzIHRoYXQgbWF5IGhhdmUgYSBk
ZWZhdWx0ICovCi0JCVRBSUxRX0ZPUkVBQ0gobG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkg
ewotCQkJbG5ldC0+c3N0aHJlc2ggPSBhc29jLT5wZWVyc19yd25kOwotCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIChTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEV8
U0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbG5l
dCwgMCwgU0NUUF9DV05EX0lOSVRJQUxJWkFUSU9OKTsKLQkJCX0KLQotCQl9Ci0JfQotCVNDVFBf
VENCX1NFTkRfTE9DSyhzdGNiKTsKLQlpZiAoYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA+IG50b2hz
KGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMpKSB7Ci0JCXVuc2lnbmVkIGludCBuZXdjbnQ7Ci0J
CXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcCwgKm5zcDsKLQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNo
azsKLQotCQkvKiBhYmFuZG9uIHRoZSB1cHBlciBzdHJlYW1zICovCi0JCW5ld2NudCA9IG50b2hz
KGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMpOwotCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAm
YXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQlpZiAoY2hrLT5yZWMuZGF0
YS5zaWQgPj0gbmV3Y250KSB7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBj
aGssIHNjdHBfbmV4dCk7Ci0JCQkJYXNvYy0+c2VuZF9xdWV1ZV9jbnQtLTsKLQkJCQlpZiAoYXNv
Yy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKLQkJ
CQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwot
I2lmZGVmIElOVkFSSUFOVFMKLQkJCQl9IGVsc2UgewotCQkJCQlwYW5pYygiTm8gY2h1bmtzIG9u
IHRoZSBxdWV1ZXMgZm9yIHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNpZCk7Ci0jZW5kaWYKLQkJ
CQl9Ci0JCQkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7Ci0JCQkJCXNjdHBfZnJlZV9idWZzcGFj
ZShzdGNiLCBhc29jLCBjaGssIDEpOwotCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
VU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkJCSAgICAgICAgICAgICAgICAwLCBjaGssIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0JCQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQkJCXNjdHBfbV9mcmVl
bShjaGstPmRhdGEpOwotCQkJCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJCQkJfQotCQkJCX0KLQkJ
CQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJCX0KLQkJfQotCQlpZiAoYXNvYy0+c3RybW91
dCkgewotCQkJZm9yIChpID0gbmV3Y250OyBpIDwgYXNvYy0+cHJlX29wZW5fc3RyZWFtczsgaSsr
KSB7Ci0JCQkJb3V0cyA9ICZhc29jLT5zdHJtb3V0W2ldOwotCQkJCVRBSUxRX0ZPUkVBQ0hfU0FG
RShzcCwgJm91dHMtPm91dHF1ZXVlLCBuZXh0LCBuc3ApIHsKLQkJCQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJCQkJVEFJTFFfUkVNT1ZF
KCZvdXRzLT5vdXRxdWV1ZSwgc3AsIG5leHQpOwotCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9u
cy5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbShzdGNiLCBhc29jLCBvdXRzLCBzcCwgMSk7Ci0J
CQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQX0ZBSUwsCi0JCQkJCSAg
ICBzdGNiLCAwLCBzcCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJaWYgKHNwLT5kYXRhKSB7
Ci0JCQkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOwotCQkJCQkJc3AtPmRhdGEgPSBOVUxMOwot
CQkJCQl9Ci0JCQkJCWlmIChzcC0+bmV0KSB7Ci0JCQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
c3AtPm5ldCk7Ci0JCQkJCQlzcC0+bmV0ID0gTlVMTDsKLQkJCQkJfQotCQkJCQkvKiBGcmVlIHRo
ZSBjaHVuayAqLwotCQkJCQlzY3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JCQkJfQotCQkJCW91
dHMtPnN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEOwotCQkJfQotCQl9Ci0JCS8qIGN1dCBiYWNr
IHRoZSBjb3VudCAqLwotCQlhc29jLT5wcmVfb3Blbl9zdHJlYW1zID0gbmV3Y250OwotCX0KLQlT
Q1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQlhc29jLT5zdHJlYW1vdXRjbnQgPSBhc29jLT5w
cmVfb3Blbl9zdHJlYW1zOwotCWlmIChhc29jLT5zdHJtb3V0KSB7Ci0JCWZvciAoaSA9IDA7IGkg
PCBhc29jLT5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQkJYXNvYy0+c3RybW91dFtpXS5zdGF0ZSA9
IFNDVFBfU1RSRUFNX09QRU47Ci0JCX0KLQl9Ci0JLyogRVkgLSBucl9zYWNrOiBpbml0aWFsaXpl
IGhpZ2hlc3QgdHNuIGluIG5yX21hcHBpbmdfYXJyYXkgKi8KLQlhc29jLT5oaWdoZXN0X3Rzbl9p
bnNpZGVfbnJfbWFwID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKLQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUp
IHsKLQkJc2N0cF9sb2dfbWFwKDAsIDUsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFND
VFBfTUFQX1NMSURFX1JFU1VMVCk7Ci0JfQotCS8qIFRoaXMgaXMgdGhlIG5leHQgb25lIHdlIGV4
cGVjdCAqLwotCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5hc2NvbmZfc2VxX2luICsg
MTsKLQotCWFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBudG9obChpbml0LT5pbml0aWFs
X3Rzbik7Ci0JYXNvYy0+dHNuX2xhc3RfZGVsaXZlcmVkID0gYXNvYy0+Y3VtdWxhdGl2ZV90c24g
PSBhc29jLT5hc2NvbmZfc2VxX2luOwotCi0JYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQg
PSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKLQkvKiBvcGVuIHRoZSByZXF1ZXN0ZWQgc3RyZWFtcyAq
LwotCi0JaWYgKGFzb2MtPnN0cm1pbiAhPSBOVUxMKSB7Ci0JCS8qIEZyZWUgdGhlIG9sZCBvbmVz
ICovCi0JCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1pbmNudDsgaSsrKSB7Ci0JCQlzY3Rw
X2NsZWFuX3VwX3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybWluW2ldLmlucXVldWUpOwotCQkJc2N0
cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0J
CX0KLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1pbiwgU0NUUF9NX1NUUk1JKTsKLQl9Ci0JaWYgKGFz
b2MtPm1heF9pbmJvdW5kX3N0cmVhbXMgPiBudG9ocyhpbml0LT5udW1fb3V0Ym91bmRfc3RyZWFt
cykpIHsKLQkJYXNvYy0+c3RyZWFtaW5jbnQgPSBudG9ocyhpbml0LT5udW1fb3V0Ym91bmRfc3Ry
ZWFtcyk7Ci0JfSBlbHNlIHsKLQkJYXNvYy0+c3RyZWFtaW5jbnQgPSBhc29jLT5tYXhfaW5ib3Vu
ZF9zdHJlYW1zOwotCX0KLQlTQ1RQX01BTExPQyhhc29jLT5zdHJtaW4sIHN0cnVjdCBzY3RwX3N0
cmVhbV9pbiAqLCBhc29jLT5zdHJlYW1pbmNudCAqCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBf
c3RyZWFtX2luKSwgU0NUUF9NX1NUUk1JKTsKLQlpZiAoYXNvYy0+c3RybWluID09IE5VTEwpIHsK
LQkJLyogd2UgZGlkbid0IGdldCBtZW1vcnkgZm9yIHRoZSBzdHJlYW1zISAqLwotCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQyLCAicHJvY2Vzc19pbml0OiBjb3VsZG4ndCBnZXQgbWVtb3J5IGZv
ciB0aGUgc3RyZWFtcyFcbiIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8
IGFzb2MtPnN0cmVhbWluY250OyBpKyspIHsKLQkJYXNvYy0+c3RybWluW2ldLnNpZCA9IGk7Ci0J
CWFzb2MtPnN0cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZmOwotCQlUQUlM
UV9JTklUKCZhc29jLT5zdHJtaW5baV0uaW5xdWV1ZSk7Ci0JCVRBSUxRX0lOSVQoJmFzb2MtPnN0
cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0JCWFzb2MtPnN0cm1pbltpXS5wZF9hcGlfc3RhcnRlZCA9
IDA7Ci0JCWFzb2MtPnN0cm1pbltpXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKLQl9Ci0JLyoKLQkg
KiBsb2FkX2FkZHJlc3NfZnJvbV9pbml0IHdpbGwgcHV0IHRoZSBhZGRyZXNzZXMgaW50byB0aGUK
LQkgKiBhc3NvY2lhdGlvbiB3aGVuIHRoZSBDT09LSUUgaXMgcHJvY2Vzc2VkIG9yIHRoZSBJTklU
LUFDSyBpcwotCSAqIHByb2Nlc3NlZC4gQm90aCB0eXBlcyBvZiBDT09LSUUncyBleGlzdGluZyBh
bmQgbmV3IGNhbGwgdGhpcwotCSAqIHJvdXRpbmUuIEl0IHdpbGwgcmVtb3ZlIGFkZHJlc3NlcyB0
aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlCi0JICogYXNzb2NpYXRpb24gKGZvciB0aGUgcmVzdGFy
dGluZyBjYXNlIHdoZXJlIGFkZHJlc3NlcyBhcmUKLQkgKiByZW1vdmVkKS4gVXAgZnJvbnQgd2hl
biB0aGUgSU5JVCBhcnJpdmVzIHdlIHdpbGwgZGlzY2FyZCBpdCBpZiBpdAotCSAqIGlzIGEgcmVz
dGFydCBhbmQgbmV3IGFkZHJlc3NlcyBoYXZlIGJlZW4gYWRkZWQuCi0JICovCi0JLyogc2FfaWdu
b3JlIE1FTUxFQUsgKi8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogSU5JVC1BQ0sgbWVzc2Fn
ZSBwcm9jZXNzaW5nL2NvbnN1bXB0aW9uIHJldHVybnMgdmFsdWUgPCAwIG9uIGVycm9yCi0gKi8K
LXN0YXRpYyBpbnQKLXNjdHBfcHJvY2Vzc19pbml0X2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlw
aGxlbiwgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
KnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsIHN0cnVjdCBzY3RwaGRyICpzaCwKLSAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqY3AsIHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
IGludCAqYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAg
IHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JaW50IHJldHZhbCwgYWJvcnRfZmxhZzsK
LQl1aW50MzJfdCBpbml0YWNrX2xpbWl0OwotCWludCBuYXRfZnJpZW5kbHkgPSAwOwotCi0JLyog
Rmlyc3QgdmVyaWZ5IHRoYXQgd2UgaGF2ZSBubyBpbGxlZ2FsIHBhcmFtJ3MgKi8KLQlhYm9ydF9m
bGFnID0gMDsKLQotCW9wX2VyciA9IHNjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRl
cnMobSwKLQkJCQkJCSAgICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1
bmspKSwKLQkJCQkJCSAgICAgICAmYWJvcnRfZmxhZywgKHN0cnVjdCBzY3RwX2NodW5raGRyICop
Y3AsICZuYXRfZnJpZW5kbHkpOwotCWlmIChhYm9ydF9mbGFnKSB7Ci0JCS8qIFNlbmQgYW4gYWJv
cnQgYW5kIG5vdGlmeSBwZWVyICovCi0JCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkqYWJvcnRfbm9f
dW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlh
c29jLT5wZWVyX3N1cHBvcnRzX25hdCA9ICh1aW50OF90KW5hdF9mcmllbmRseTsKLQkvKiBwcm9j
ZXNzIHRoZSBwZWVyJ3MgcGFyYW1ldGVycyBpbiB0aGUgSU5JVC1BQ0sgKi8KLQlyZXR2YWwgPSBz
Y3RwX3Byb2Nlc3NfaW5pdCgoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKWNwLCBzdGNiKTsKLQlp
ZiAocmV0dmFsIDwgMCkgewotCQlyZXR1cm4gKHJldHZhbCk7Ci0JfQotCWluaXRhY2tfbGltaXQg
PSBvZmZzZXQgKyBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKLQkvKiBsb2FkIGFsbCBhZGRy
ZXNzZXMgKi8KLQlpZiAoKHJldHZhbCA9IHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0
Y2IsIG0sCi0JICAgIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykpLCBp
bml0YWNrX2xpbWl0LAotCSAgICBzcmMsIGRzdCwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0KSkpIHsK
LQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlh
Z19pbmZvX2NvZGUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQcm9ibGVtIHdp
dGggYWRkcmVzcyBwYXJhbWV0ZXJzIik7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCi0J
CQkiTG9hZCBhZGRyZXNzZXMgZnJvbSBJTklUIGNhdXNlcyBhbiBhYm9ydCAlZFxuIiwKLQkJCXJl
dHZhbCk7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwg
aXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBu
ZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQot
CS8qIGlmIHRoZSBwZWVyIGRvZXNuJ3Qgc3VwcG9ydCBhc2NvbmYsIGZsdXNoIHRoZSBhc2NvbmYg
cXVldWUgKi8KLQlpZiAoYXNvYy0+YXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCXN0cnVjdCBz
Y3RwX2FzY29uZl9hZGRyICpwYXJhbSwgKm5wYXJhbTsKLQotCQlUQUlMUV9GT1JFQUNIX1NBRkUo
cGFyYW0sICZhc29jLT5hc2NvbmZfcXVldWUsIG5leHQsIG5wYXJhbSkgewotCQkJVEFJTFFfUkVN
T1ZFKCZhc29jLT5hc2NvbmZfcXVldWUsIHBhcmFtLCBuZXh0KTsKLQkJCVNDVFBfRlJFRShwYXJh
bSwgU0NUUF9NX0FTQ19BRERSKTsKLQkJfQotCX0KLQotCXN0Y2ItPmFzb2MucGVlcl9obWFjX2lk
ID0gc2N0cF9uZWdvdGlhdGVfaG1hY2lkKHN0Y2ItPmFzb2MucGVlcl9obWFjcywKLQkgICAgc3Rj
Yi0+YXNvYy5sb2NhbF9obWFjcyk7Ci0JaWYgKG9wX2VycikgewotCQlzY3RwX3F1ZXVlX29wX2Vy
cihzdGNiLCBvcF9lcnIpOwotCQkvKiBxdWV1aW5nIHdpbGwgc3RlYWwgYXdheSB0aGUgbWJ1ZiBj
aGFpbiB0byB0aGUgb3V0IHF1ZXVlICovCi0JCW9wX2VyciA9IE5VTEw7Ci0JfQotCS8qIGV4dHJh
Y3QgdGhlIGNvb2tpZSBhbmQgcXVldWUgaXQgdG8gImVjaG8iIGl0IGJhY2suLi4gKi8KLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9H
R0lORykgewotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCSAgICAg
ICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkgICAgICAgMCwKLQkJCSAgICAg
ICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JfQotCXN0Y2It
PmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JbmV0LT5lcnJvcl9jb3VudCA9IDA7Ci0K
LQkvKgotCSAqIENhbmNlbCB0aGUgSU5JVCB0aW1lciwgV2UgZG8gdGhpcyBmaXJzdCBiZWZvcmUg
cXVldWVpbmcgdGhlCi0JICogY29va2llLiBXZSBhbHdheXMgY2FuY2VsIGF0IHRoZSBwcmltYXJ5
IHRvIGFzc3VlIHRoYXQgd2UgYXJlCi0JICogY2FuY2VsaW5nIHRoZSB0aW1lciBzdGFydGVkIGJ5
IHRoZSBJTklUIHdoaWNoIGFsd2F5cyBnb2VzIHRvIHRoZQotCSAqIHByaW1hcnkuCi0JICovCi0J
c2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULCBzdGNiLT5zY3RwX2VwLCBzdGNi
LAotCSAgICBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBTQ1RQX0ZST01fU0NUUF9JTlBVVCAr
IFNDVFBfTE9DXzMpOwotCi0JLyogY2FsY3VsYXRlIHRoZSBSVE8gKi8KLQluZXQtPlJUTyA9IHNj
dHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCBuZXQsICZhc29jLT50aW1lX2VudGVyZWQsIHNj
dHBfYWxpZ25fc2FmZV9ub2NvcHksCi0JCQkJICAgICAgU0NUUF9SVFRfRlJPTV9OT05fREFUQSk7
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2Nh
bGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJdWludDMyX3QgaW5xdWV1
ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0JCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JCQlp
bnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxf
b3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6
ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKLQkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9M
SU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29j
LnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUg
c2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9sZCAqLwotCQkJaWYgKGlucC0+
c2VuZF9jYWxsYmFjayAmJgotCQkJICAgICgoKGlucC0+c2VuZF9zYl90aHJlc2hvbGQgPiAwKSAm
JgotCQkJICAgICAgKHNiX2ZyZWVfbm93ID49IGlucC0+c2VuZF9zYl90aHJlc2hvbGQpICYmCi0J
CQkgICAgICAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlIDw9IFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkpIHx8Ci0JCQkgICAgIChpbnAtPnNlbmRfc2Jf
dGhyZXNob2xkID09IDApKSkgewotCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCWlucC0+c2VuZF9jYWxsYmFj
ayhzdGNiLT5zY3RwX3NvY2tldCwgc2JfZnJlZV9ub3cpOwotCQkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7Ci0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJ
fQotCQl9Ci0JfQotI2VuZGlmCi0JcmV0dmFsID0gc2N0cF9zZW5kX2Nvb2tpZV9lY2hvKG0sIG9m
ZnNldCwgc3RjYiwgbmV0KTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQkvKgotCQkgKiBObyBjb29r
aWUsIHdlIHByb2JhYmx5IHNob3VsZCBzZW5kIGEgb3AgZXJyb3IuIEJ1dCBpbiBhbnkKLQkJICog
Y2FzZSBpZiB0aGVyZSBpcyBubyBjb29raWUgaW4gdGhlIElOSVQtQUNLLCB3ZSBjYW4KLQkJICog
YWJhbmRvbiB0aGUgcGVlciwgaXRzIGJyb2tlLgotCQkgKi8KLQkJaWYgKHJldHZhbCA9PSAtMykg
ewotCQkJdWludDE2X3QgbGVuOwotCi0JCQlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qg
c2N0cF9lcnJvcl9taXNzaW5nX3BhcmFtKSArIHNpemVvZih1aW50MTZfdCkpOwotCQkJLyogV2Ug
YWJvcnQgd2l0aCBhbiBlcnJvciBvZiBtaXNzaW5nIG1hbmRhdG9yeSBwYXJhbSAqLwotCQkJb3Bf
ZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEp
OwotCQkJaWYgKG9wX2VyciAhPSBOVUxMKSB7Ci0JCQkJc3RydWN0IHNjdHBfZXJyb3JfbWlzc2lu
Z19wYXJhbSAqY2F1c2U7Ci0KLQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IGxlbjsKLQkJCQlj
YXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9taXNzaW5nX3BhcmFtICopOwot
CQkJCS8qIFN1YnRyYWN0IHRoZSByZXNlcnZlZCBwYXJhbSAqLwotCQkJCWNhdXNlLT5jYXVzZS5j
b2RlID0gaHRvbnMoU0NUUF9DQVVTRV9NSVNTSU5HX1BBUkFNKTsKLQkJCQljYXVzZS0+Y2F1c2Uu
bGVuZ3RoID0gaHRvbnMobGVuKTsKLQkJCQljYXVzZS0+bnVtX21pc3NpbmdfcGFyYW1zID0gaHRv
bmwoMSk7Ci0JCQkJY2F1c2UtPnR5cGVbMF0gPSBodG9ucyhTQ1RQX1NUQVRFX0NPT0tJRSk7Ci0J
CQl9Ci0JCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlw
aGxlbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwg
bmV0LT5wb3J0KTsKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQl9Ci0JCXJldHVybiAocmV0
dmFsKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5kbGVf
aGVhcnRiZWF0X2FjayhzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgKmNwLAotICAgIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCXVuaW9uIHNjdHBf
c29ja3N0b3JlIHN0b3JlOwotCXN0cnVjdCBzY3RwX25ldHMgKnJfbmV0LCAqZl9uZXQ7Ci0Jc3Ry
dWN0IHRpbWV2YWwgdHY7Ci0JaW50IHJlcV9wcmltID0gMDsKLQl1aW50MTZfdCBvbGRfZXJyb3Jf
Y291bnRlcjsKLQotCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSAhPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkgewotCQkvKiBJbnZhbGlkIGxlbmd0aCAqLwotCQly
ZXR1cm47Ci0JfQotCi0JbWVtc2V0KCZzdG9yZSwgMCwgc2l6ZW9mKHN0b3JlKSk7Ci0Jc3dpdGNo
IChjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2Fz
ZSBBRl9JTkVUOgotCQlpZiAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID09IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQlzdG9yZS5zaW4uc2luX2ZhbWlseSA9IGNwLT5o
ZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWlseTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCXN0
b3JlLnNpbi5zaW5fbGVuID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuOwotI2VuZGlm
Ci0JCQlzdG9yZS5zaW4uc2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJCW1lbWNweSgmc3RvcmUu
c2luLnNpbl9hZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywKLQkJCSAgICAgICBz
aXplb2Yoc3RvcmUuc2luLnNpbl9hZGRyKSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm47Ci0JCX0K
LQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCWlmIChj
cC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKSB7Ci0JCQlzdG9yZS5zaW42LnNpbjZfZmFtaWx5ID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZv
LmFkZHJfZmFtaWx5OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJCXN0b3JlLnNpbjYuc2luNl9s
ZW4gPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW47Ci0jZW5kaWYKLQkJCXN0b3JlLnNp
bjYuc2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCQltZW1jcHkoJnN0b3JlLnNpbjYuc2luNl9h
ZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywgc2l6ZW9mKHN0cnVjdCBpbjZfYWRk
cikpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQkJaWYgKGNwLT5oZWFydGJl
YXQuaGJfaW5mby5hZGRyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7Ci0J
CQlzdG9yZS5zY29ubi5zY29ubl9mYW1pbHkgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9m
YW1pbHk7Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJCXN0b3JlLnNjb25uLnNjb25uX2xlbiA9
IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbjsKLSNlbmRpZgotCQkJc3RvcmUuc2Nvbm4u
c2Nvbm5fcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJbWVtY3B5KCZzdG9yZS5zY29ubi5zY29ubl9h
ZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywgc2l6ZW9mKHZvaWQgKikpOwotCQl9
IGVsc2UgewotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJ
cmV0dXJuOwotCX0KLQlyX25ldCA9IHNjdHBfZmluZG5ldChzdGNiLCAmc3RvcmUuc2EpOwotCWlm
IChyX25ldCA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJIdWg/IEkg
Y2FuJ3QgZmluZCB0aGUgYWRkcmVzcyBJIHNlbnQgaXQgdG8sIGRpc2NhcmRcbiIpOwotCQlyZXR1
cm47Ci0JfQotCWlmICgocl9uZXQgJiYgKHJfbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VO
Q09ORklSTUVEKSkgJiYKLQkgICAgKHJfbmV0LT5oZWFydGJlYXRfcmFuZG9tMSA9PSBjcC0+aGVh
cnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMSkgJiYKLQkgICAgKHJfbmV0LT5oZWFydGJlYXRf
cmFuZG9tMiA9PSBjcC0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMikpIHsKLQkJLyoK
LQkJICogSWYgdGhlIGl0cyBhIEhCIGFuZCBpdCdzIHJhbmRvbSB2YWx1ZSBpcyBjb3JyZWN0IHdo
ZW4gY2FuCi0JCSAqIGNvbmZpcm0gdGhlIGRlc3RpbmF0aW9uLgotCQkgKi8KLQkJcl9uZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKLQkJaWYgKHJfbmV0LT5kZXN0X3N0
YXRlICYgU0NUUF9BRERSX1JFUV9QUklNQVJZKSB7Ci0JCQlzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb24gPSByX25ldDsKLQkJCXJfbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVR
X1BSSU1BUlk7Ci0JCQlmX25ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwotCQkJ
aWYgKGZfbmV0ICE9IHJfbmV0KSB7Ci0JCQkJLyogZmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlzIE5P
VCB0aGUgcHJpbWFyeQotCQkJCSAqIHNjdHBfY21wYWRkcigpIGlzIG11Y2ggbW9yZSBlZmZpY2ll
bnQgaWYKLQkJCQkgKiB0aGUgcHJpbWFyeSBpcyB0aGUgZmlyc3Qgb24gdGhlIGxpc3QsIG1ha2Ug
aXQKLQkJCQkgKiBzby4KLQkJCQkgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MubmV0
cywgcl9uZXQsIHNjdHBfbmV4dCk7Ci0JCQkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2ItPmFzb2Mu
bmV0cywgcl9uZXQsIHNjdHBfbmV4dCk7Ci0JCQl9Ci0JCQlyZXFfcHJpbSA9IDE7Ci0JCX0KLQkJ
c2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCi0JCSAgICBz
dGNiLCAwLCAodm9pZCAqKXJfbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJ
ICAgICAgICAgICAgICAgIHJfbmV0LCBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzQp
OwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIHJfbmV0KTsKLQl9Ci0Jb2xkX2Vycm9yX2NvdW50ZXIgPSByX25ldC0+ZXJy
b3JfY291bnQ7Ci0Jcl9uZXQtPmVycm9yX2NvdW50ID0gMDsKLQlyX25ldC0+aGJfcmVzcG9uZGVk
ID0gMTsKLQl0di50dl9zZWMgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8udGltZV92YWx1ZV8xOwot
CXR2LnR2X3VzZWMgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8udGltZV92YWx1ZV8yOwotCS8qIE5v
dyBsZXRzIGRvIGEgUlRPIHdpdGggdGhpcyAqLwotCXJfbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0
ZV9ydG8oc3RjYiwgJnN0Y2ItPmFzb2MsIHJfbmV0LCAmdHYsIHNjdHBfYWxpZ25fc2FmZV9ub2Nv
cHksCi0JCQkJCVNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOwotCWlmICghKHJfbmV0LT5kZXN0X3N0
YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKLQkJcl9uZXQtPmRlc3Rfc3RhdGUgfD0gU0NU
UF9BRERSX1JFQUNIQUJMRTsKLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFD
RV9VUCwgc3RjYiwKLQkJCQkwLCAodm9pZCAqKXJfbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CX0KLQlpZiAocl9uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKLQkJcl9uZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX3VwZGF0ZV9leGl0X3BmKHN0Y2IsIG5ldCk7Ci0JfQotCWlmIChvbGRfZXJyb3JfY291
bnRlciA+IDApIHsKLQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQs
IHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICBzdGNiLCByX25ldCwgU0NUUF9GUk9N
X1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ181KTsKLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCByX25ldCk7Ci0JfQotCWlmIChy
X25ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKLQkJaWYgKHN0Y2ItPmFz
b2MuYWx0ZXJuYXRlKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5hdGUsIHByaW1hcnkgaXMg
Z29vZCAqLwotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsK
LQkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKLQkJfQotCX0KLQkvKiBNb2JpbGl0eSBh
ZGFwdGF0aW9uICovCi0JaWYgKHJlcV9wcmltKSB7Ci0JCWlmICgoc2N0cF9pc19tb2JpbGl0eV9m
ZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVy
ZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSAmJgotCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0
dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpKSB7Ci0KLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQ
X1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAotCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIE5VTEwsCi0JCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQg
KyBTQ1RQX0xPQ182KTsKLQkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+
c2N0cF9lcCwKLQkJCQkJU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKLQkJCQlzY3RwX2Fz
c29jX2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsCi0JCQkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbik7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2It
PnNjdHBfZXAsCi0JCQkJCVNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKLQkJCQlzY3RwX21vdmVfY2h1
bmtzX2Zyb21fbmV0KHN0Y2IsCi0JCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKLQkJ
CX0KLQkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJ
c3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1z
Y3RwX2hhbmRsZV9uYXRfY29sbGlkaW5nX3N0YXRlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsK
LQkvKiByZXR1cm4gMCBtZWFucyB3ZSB3YW50IHlvdSB0byBwcm9jZWVkIHdpdGggdGhlIGFib3J0
Ci0JICogbm9uLXplcm8gbWVhbnMgbm8gYWJvcnQgcHJvY2Vzc2luZwotCSovCi0Jc3RydWN0IHNj
dHBhc29jaGVhZCAqaGVhZDsKLQotCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0g
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgewotCQkvKiBnZW5lcmF0ZSBhIG5ldyB2dGFnIGFuZCBz
ZW5kIGluaXQgKi8KLQkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF9hc29jcyk7Ci0JCXN0Y2ItPmFz
b2MubXlfdnRhZyA9IHNjdHBfc2VsZWN0X2FfdGFnKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LCAxKTsKLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5G
TyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsIFND
VFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQkJLyogcHV0IGl0IGluIHRoZSBidWNrZXQg
aW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lzdGVtICovCi0JCUxJU1RfSU5T
RVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF9hc29jcyk7Ci0JCXNjdHBfc2VuZF9pbml0aWF0ZShz
dGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm4gKDEpOwot
CX0KLQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lF
X0VDSE9FRCkgewotCQkvKiB0cmVhdCBsaWtlIGEgY2FzZSB3aGVyZSB0aGUgY29va2llIGV4cGly
ZWQgaS5lLjoKLQkJKiAtIGR1bXAgY3VycmVudCBjb29raWUuCi0JCSogLSBnZW5lcmF0ZSBhIG5l
dyB2dGFnLgotCQkqIC0gcmVzZW5kIGluaXQuCi0JCSovCi0JCS8qIGdlbmVyYXRlIGEgbmV3IHZ0
YWcgYW5kIHNlbmQgaW5pdCAqLwotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX2Fzb2NzKTsKLQkJ
c3RjYi0+YXNvYy5zdGF0ZSAmPSB+U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOwotCQlzdGNiLT5h
c29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ7Ci0JCXNjdHBfc3RvcF9hbGxfY29v
a2llX3RpbWVycyhzdGNiKTsKLQkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsICZzdGNiLT5h
c29jKTsKLQkJc3RjYi0+YXNvYy5teV92dGFnID0gc2N0cF9zZWxlY3RfYV90YWcoc3RjYi0+c2N0
cF9lcCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsICAxKTsKLQkJaGVh
ZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNi
LT5hc29jLm15X3Z0YWcsIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQkJLyogcHV0
IGl0IGluIHRoZSBidWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lz
dGVtICovCi0JCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF9hc29jcyk7Ci0JCXNj
dHBfc2VuZF9pbml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OwotCQlyZXR1cm4gKDEpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50Ci1zY3Rw
X2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkgICAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JLyogcmV0dXJuIDAgbWVhbnMgd2Ugd2FudCB5
b3UgdG8gcHJvY2VlZCB3aXRoIHRoZSBhYm9ydAotCSAqIG5vbi16ZXJvIG1lYW5zIG5vIGFib3J0
IHByb2Nlc3NpbmcKLQkgKi8KLQlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19z
dGF0ZTogUGVlciBkb2VzIG5vdCBzdXBwb3J0IEFVVEgsIGNhbm5vdCBzZW5kIGFuIGFzY29uZlxu
Iik7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0
ZShzdGNiLCBuZXQpOwotCXJldHVybiAoMSk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfaGFu
ZGxlX2Fib3J0KHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydCwKLSAgICBzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpz
bzsKLSNlbmRpZgotCXVpbnQxNl90IGxlbjsKLQl1aW50MTZfdCBlcnJvcjsKLQotCVNDVFBEQkco
U0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRsZV9hYm9ydDogaGFuZGxpbmcgQUJPUlRcbiIp
OwotCWlmIChzdGNiID09IE5VTEwpCi0JCXJldHVybjsKLQotCWxlbiA9IG50b2hzKGFib3J0LT5j
aC5jaHVua19sZW5ndGgpOwotCWlmIChsZW4gPiBzaXplb2YgKHN0cnVjdCBzY3RwX2NodW5raGRy
KSkgewotCQkvKiBOZWVkIHRvIGNoZWNrIHRoZSBjYXVzZSBjb2RlcyBmb3Igb3VyCi0JCSAqIHR3
byBtYWdpYyBuYXQgYWJvcnRzIHdoaWNoIGRvbid0IGtpbGwgdGhlIGFzc29jCi0JCSAqIG5lY2Vz
c2FyaWx5LgotCQkgKi8KLQkJc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICpjYXVzZTsKLQot
CQljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKikoYWJvcnQgKyAxKTsKLQkJ
ZXJyb3IgPSBudG9ocyhjYXVzZS0+Y29kZSk7Ci0JCWlmIChlcnJvciA9PSBTQ1RQX0NBVVNFX05B
VF9DT0xMSURJTkdfU1RBVEUpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJSZWNl
aXZlZCBDb2xsaWRpbmcgc3RhdGUgYWJvcnQgZmxhZ3M6JXhcbiIsCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhYm9ydC0+Y2guY2h1bmtfZmxhZ3MpOwotCQkJaWYgKHNjdHBfaGFuZGxl
X25hdF9jb2xsaWRpbmdfc3RhdGUoc3RjYikpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0gZWxz
ZSBpZiAoZXJyb3IgPT0gU0NUUF9DQVVTRV9OQVRfTUlTU0lOR19TVEFURSkgewotCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3RhdGUgYWJvcnQgZmxhZ3M6
JXhcbiIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydC0+Y2guY2h1bmtfZmxh
Z3MpOwotCQkJaWYgKHNjdHBfaGFuZGxlX25hdF9taXNzaW5nX3N0YXRlKHN0Y2IsIG5ldCkpIHsK
LQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQllcnJvciA9IDA7Ci0JfQotCS8q
IHN0b3AgYW55IHJlY2VpdmUgdGltZXJzICovCi0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9SRUNWLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCi0JICAgICAgICAgICAgICAgIFND
VFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfNyk7Ci0JLyogbm90aWZ5IHVzZXIgb2YgdGhl
IGFib3J0IGFuZCBjbGVhbiB1cC4uLiAqLwotCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2Is
IDEsIGVycm9yLCBhYm9ydCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkvKiBmcmVlIHRoZSB0Y2Ig
Ki8KLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JaWYgKChTQ1RQ
X0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCSAgICAoU0NU
UF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQp
KSB7Ci0JCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQl9Ci0jaWZk
ZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLQlzY3RwX3ByaW50X291dF90cmFja19sb2coc3RjYik7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKLQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCWF0b21pY19hZGRf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCVND
VFBfU09DS0VUX0xPQ0soc28sIDEpOwotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0Jc3RjYi0+YXNvYy5z
dGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOwotCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhz
dGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJICAgICAgU0NUUF9GUk9N
X1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ184KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwot
I2VuZGlmCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInNjdHBfaGFuZGxlX2Fib3J0OiBm
aW5pc2hlZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3N0YXJ0X25ldF90aW1lcnMoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiKQotewotCXVpbnQzMl90IGNudF9oYl9zZW50OwotCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKLQotCWNudF9oYl9zZW50ID0gMDsKLQlUQUlMUV9GT1JFQUNIKG5ldCwg
JnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCS8qIEZvciBlYWNoIG5ldHdvcmsgc3Rh
cnQ6Ci0JCSAqIDEpIEEgcG10dSB0aW1lci4KLQkJICogMikgQSBIQiB0aW1lcgotCQkgKiAzKSBJ
ZiB0aGUgZGVzdCBpbiB1bmNvbmZpcm1lZCBzZW5kCi0JCSAqICAgIGEgaGIgYXMgd2VsbCBpZiB1
bmRlciBtYXhfaGJfYnVyc3QgaGF2ZQotCQkgKiAgICBiZWVuIHNlbnQuCi0JCSAqLwotCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIG5ldCk7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVB
VCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfVU5DT05GSVJNRUQpICYmCi0JCSAgICAoY250X2hiX3NlbnQgPCBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfaGJfbWF4YnVyc3QpKSkgewotCQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCWNudF9oYl9zZW50Kys7Ci0JCX0KLQl9Ci0JaWYgKGNu
dF9oYl9zZW50KSB7Ci0JCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0J
CQkJICBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0ssCi0JCQkJICBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5kbGVfc2h1dGRvd24oc3RydWN0
IHNjdHBfc2h1dGRvd25fY2h1bmsgKmNwLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X2ZsYWcpCi17Ci0Jc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2M7Ci0JaW50IHNvbWVfb25fc3RyZWFtd2hlZWw7Ci0JaW50IG9sZF9zdGF0
ZTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMiwKLQkJInNjdHBfaGFuZGxlX3NodXRkb3duOiBoYW5kbGluZyBTSFVURE9XTlxuIik7Ci0J
aWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAo
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8Ci0JICAg
IChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7Ci0J
CXJldHVybjsKLQl9Ci0JaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuaykpIHsKLQkJLyogU2h1dGRvd24gTk9UIHRoZSBleHBl
Y3RlZCBzaXplICovCi0JCXJldHVybjsKLQl9Ci0Jb2xkX3N0YXRlID0gU0NUUF9HRVRfU1RBVEUo
YXNvYyk7Ci0Jc2N0cF91cGRhdGVfYWNrZWQoc3RjYiwgY3AsIGFib3J0X2ZsYWcpOwotCWlmICgq
YWJvcnRfZmxhZykgewotCQlyZXR1cm47Ci0JfQotCWlmIChhc29jLT5jb250cm9sX3BkYXBpKSB7
Ci0JCS8qIFdpdGggYSBub3JtYWwgc2h1dGRvd24KLQkJICogd2UgYXNzdW1lIHRoZSBlbmQgb2Yg
bGFzdCByZWNvcmQuCi0JCSAqLwotCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7
Ci0JCWlmIChhc29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EpIHsKLQkJCXN0cnVjdCBzY3Rw
X3N0cmVhbV9pbiAqc3RybTsKLQotCQkJc3RybSA9ICZhc29jLT5zdHJtaW5bYXNvYy0+Y29udHJv
bF9wZGFwaS0+c2luZm9fc3RyZWFtXTsKLQkJCWlmIChhc29jLT5jb250cm9sX3BkYXBpLT5vbl9z
dHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKLQkJCQkvKiBVbm9yZGVyZWQgKi8KLQkJCQlU
QUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBhc29jLT5jb250cm9sX3BkYXBpLCBuZXh0
X2luc3RybSk7Ci0JCQkJYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xID0gMDsKLQkJCX0g
ZWxzZSBpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xID09IFNDVFBfT05fT1JERVJF
RCkgewotCQkJCS8qIE9yZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlucXVldWUs
IGFzb2MtPmNvbnRyb2xfcGRhcGksIG5leHRfaW5zdHJtKTsKLQkJCQlhc29jLT5jb250cm9sX3Bk
YXBpLT5vbl9zdHJtX3EgPSAwOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCX0gZWxzZSB7Ci0JCQkJ
cGFuaWMoIlVua25vd24gc3RhdGUgb24gY3RybDolcCBvbl9zdHJtX3E6JWQiLAotCQkJCSAgICAg
IGFzb2MtPmNvbnRyb2xfcGRhcGksCi0JCQkJICAgICAgYXNvYy0+Y29udHJvbF9wZGFwaS0+b25f
c3RybV9xKTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JCWFzb2MtPmNvbnRyb2xfcGRhcGktPmVuZF9h
ZGRlZCA9IDE7Ci0JCWFzb2MtPmNvbnRyb2xfcGRhcGktPnBkYXBpX2Fib3J0ZWQgPSAxOwotCQlh
c29jLT5jb250cm9sX3BkYXBpID0gTlVMTDsKLQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soc3RjYi0+
c2N0cF9lcCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCi0JCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0
b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJaWYgKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCS8qIGFzc29jIHdhcyBm
cmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCi0JCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28s
IDEpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7
Ci0JCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7Ci0J
CX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCX0KLQkvKiBnb3RvIFNI
VVRET1dOX1JFQ0VJVkVEIHN0YXRlIHRvIGJsb2NrIG5ldyByZXF1ZXN0cyAqLwotCWlmIChzdGNi
LT5zY3RwX3NvY2tldCkgewotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpICYmCi0JCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0g
U0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgJiYKLQkJICAgIChTQ1RQX0dFVF9TVEFURShh
c29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpKSB7Ci0JCQlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKTsKLQkJCVNDVFBfQ0xFQVJfU1VCU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCS8qIG5vdGlmeSB1cHBl
ciBsYXllciB0aGF0IHBlZXIgaGFzIGluaXRpYXRlZCBhIHNodXRkb3duICovCi0JCQlzY3RwX3Vs
cF9ub3RpZnkoU0NUUF9OT1RJRllfUEVFUl9TSFVURE9XTiwgc3RjYiwgMCwgTlVMTCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKLQotCQkJLyogcmVzZXQgdGltZSAqLwotCQkJKHZvaWQpU0NUUF9HRVRU
SU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJlZCk7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfR0VU
X1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgewotCQkvKgotCQkgKiBz
dG9wIHRoZSBzaHV0ZG93biB0aW1lciwgc2luY2Ugd2UgV0lMTCBtb3ZlIHRvCi0JCSAqIFNIVVRE
T1dOLUFDSy1TRU5ULgotCQkgKi8KLQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9T
SFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJICAgICAgICAgICAgICAgIG5ldCwgU0NU
UF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ185KTsKLQl9Ci0JLyogTm93IGlzIHRoZXJlIHVu
c2VudCBkYXRhIG9uIGEgc3RyZWFtIHNvbWV3aGVyZT8gKi8KLQlzb21lX29uX3N0cmVhbXdoZWVs
ID0gc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
Ci0JaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgfHwKLQkgICAgIVRBSUxRX0VN
UFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAotCSAgICBzb21lX29uX3N0cmVhbXdoZWVsKSB7Ci0J
CS8qIEJ5IHJldHVybmluZyB3ZSB3aWxsIHB1c2ggbW9yZSBkYXRhIG91dCAqLwotCQlyZXR1cm47
Ci0JfSBlbHNlIHsKLQkJLyogbm8gb3V0c3RhbmRpbmcgZGF0YSB0byBzZW5kLCBzbyBtb3ZlIG9u
Li4uICovCi0JCS8qIHNlbmQgU0hVVERPV04tQUNLICovCi0JCS8qIG1vdmUgdG8gU0hVVERPV04t
QUNLLVNFTlQgc3RhdGUgKi8KLQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NU
QVRFX09QRU4pIHx8Ci0JCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9T
SFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3Vy
cmVzdGFiKTsKLQkJfQotCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORyk7Ci0JCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRF
X1NIVVRET1dOX0FDS19TRU5UKSB7Ci0JCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRF
X1NIVVRET1dOX0FDS19TRU5UKTsKLQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0
Y2IpOwotCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQpOwotCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssCi0JCQkgICAgICAgICAgICAgICAg
IHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsKLQkJCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2so
c3RjYiwgbmV0KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX3NodXRk
b3duX2FjayhzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmNwIFNDVFBfVU5VU0VELAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0KLQlzbyA9IFNDVFBfSU5Q
X1NPKHN0Y2ItPnNjdHBfZXApOwotI2VuZGlmCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwK
LQkJInNjdHBfaGFuZGxlX3NodXRkb3duX2FjazogaGFuZGxpbmcgU0hVVERPV04gQUNLXG4iKTsK
LQlpZiAoc3RjYiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0J
LyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gYXNzb2NpYXRpb24gc3RhdGUgKi8KLQlpZiAoKFNDVFBf
R0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8Ci0JICAgIChTQ1RQ
X0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7Ci0JCS8qIHVu
ZXhwZWN0ZWQgU0hVVERPV04tQUNLLi4uIGRvIE9PVEIgaGFuZGxpbmcuLi4gKi8KLQkJc2N0cF9z
ZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBf
U1RBVEVfU0hVVERPV05fU0VOVCkgJiYKLQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7Ci0JCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04t
QUNLLi4uIHNvIGlnbm9yZS4uLiAqLwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCXJldHVy
bjsKLQl9Ci0JaWYgKGFzb2MtPmNvbnRyb2xfcGRhcGkpIHsKLQkJLyogV2l0aCBhIG5vcm1hbCBz
aHV0ZG93bgotCQkgKiB3ZSBhc3N1bWUgdGhlIGVuZCBvZiBsYXN0IHJlY29yZC4KLQkJICovCi0J
CVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJYXNvYy0+Y29udHJvbF9wZGFw
aS0+ZW5kX2FkZGVkID0gMTsKLQkJYXNvYy0+Y29udHJvbF9wZGFwaS0+cGRhcGlfYWJvcnRlZCA9
IDE7Ci0JCWFzb2MtPmNvbnRyb2xfcGRhcGkgPSBOVUxMOwotCQlTQ1RQX0lOUF9SRUFEX1VOTE9D
SyhzdGNiLT5zY3RwX2VwKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsK
LQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VE
X1NPQ0tFVCkgewotCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQg
Ki8KLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRp
ZgotCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7Ci0j
aWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0J
CVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpIHx8Ci0JICAgICFUQUlMUV9F
TVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgfHwKLQkgICAgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0
YShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpKSB7Ci0JCXBhbmljKCJRdWV1ZXMgYXJlIG5vdCBl
bXB0eSB3aGVuIGhhbmRsaW5nIFNIVVRET1dOLUFDSyIpOwotCX0KLSNlbmRpZgotCS8qIHN0b3Ag
dGhlIHRpbWVyICovCi0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwg
c3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NU
UF9JTlBVVCArIFNDVFBfTE9DXzEwKTsKLQkvKiBzZW5kIFNIVVRET1dOLUNPTVBMRVRFICovCi0J
c2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMCk7Ci0JLyogbm90aWZ5IHVw
cGVyIGxheWVyIHByb3RvY29sICovCi0JaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7Ci0JCWlmICgo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0J
CSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpKSB7Ci0JCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0gMDsKLQkJfQotCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNTT0NfRE9XTiwgc3RjYiwgMCwgTlVMTCwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3No
dXRkb3duKTsKLQkvKiBmcmVlIHRoZSBUQ0IgYnV0IGZpcnN0IHNhdmUgb2ZmIHRoZSBlcCAqLwot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQot
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCVNDVFBfVENCX0xPQ0soc3RjYik7
Ci0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0J
KHZvaWQpc2N0cF9mcmVlX2Fzc29jKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfTk9STUFMX1BS
T0MsCi0JCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzExKTsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQ
X1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBTa2lwIHBhc3QgdGhl
IHBhcmFtIGhlYWRlciBhbmQgdGhlbiB3ZSB3aWxsIGZpbmQgdGhlIGNodW5rIHRoYXQgY2F1c2Vk
IHRoZQotICogcHJvYmxlbS4gVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0aWVzIEFTQ09ORiBvciBG
V0QtVFNOIG90aGVyIHRoYW4gdGhhdCBhbmQKLSAqIG91ciBwZWVyIG11c3QgYmUgYnJva2VuLgot
ICovCi1zdGF0aWMgdm9pZAotc2N0cF9wcm9jZXNzX3VucmVjb2dfY2h1bmsoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwKLSAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoazsKLQotCWNoayA9IChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdClwaGRyICsgc2l6ZW9mKCpwaGRyKSk7Ci0Jc3dp
dGNoIChjaGstPmNodW5rX3R5cGUpIHsKLQljYXNlIFNDVFBfQVNDT05GX0FDSzoKLQljYXNlIFND
VFBfQVNDT05GOgotCQlzY3RwX2FzY29uZl9jbGVhbnVwKHN0Y2IsIG5ldCk7Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9JRk9SV0FSRF9DVU1fVFNOOgotCWNhc2UgU0NUUF9GT1JXQVJEX0NVTV9UU046
Ci0JCXN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCi0JCQkiUGVlciBkb2VzIG5vdCBzdXBwb3J0
IGNodW5rIHR5cGUgJWQoJXgpPz9cbiIsCi0JCQljaGstPmNodW5rX3R5cGUsICh1aW50MzJfdCkg
Y2hrLT5jaHVua190eXBlKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgotICogU2tpcCBwYXN0IHRo
ZSBwYXJhbSBoZWFkZXIgYW5kIHRoZW4gd2Ugd2lsbCBmaW5kIHRoZSBwYXJhbSB0aGF0IGNhdXNl
ZCB0aGUKLSAqIHByb2JsZW0uICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGFyYW0ncyBpbiBhIEFT
Q09ORiBPUiB0aGUgcHJzY3RwIHBhcmFtCi0gKiB0aGVzZSB3aWxsIHR1cm4gb2Ygc3BlY2lmaWMg
ZmVhdHVyZXMuCi0gKiBYWFg6IElzIHRoaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPwotICovCi1z
dGF0aWMgdm9pZAotc2N0cF9wcm9jZXNzX3VucmVjb2dfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkcikKLXsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqcGJhZDsKLQotCXBiYWQgPSBwaGRyICsgMTsKLQlzd2l0Y2ggKG50b2hzKHBiYWQtPnBhcmFt
X3R5cGUpKSB7Ci0JCS8qIHByLXNjdHAgZHJhZnQgKi8KLQljYXNlIFNDVFBfUFJTQ1RQX1NVUFBP
UlRFRDoKLQkJc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID0gMDsKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQ6Ci0JCWJyZWFrOwotCQkvKiBkcmFmdC1pZXRmLXRz
dndnLWFkZGlwLXNjdHAgKi8KLQljYXNlIFNDVFBfSEFTX05BVF9TVVBQT1JUOgotCSAgICAgICAg
c3RjYi0+YXNvYy5wZWVyX3N1cHBvcnRzX25hdCA9IDA7Ci0JICAgICAgICBicmVhazsKLQljYXNl
IFNDVFBfQUREX0lQX0FERFJFU1M6Ci0JY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNTOgotCWNhc2Ug
U0NUUF9TRVRfUFJJTV9BRERSOgotCQlzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPSAwOwot
CQlicmVhazsKLQljYXNlIFNDVFBfU1VDQ0VTU19SRVBPUlQ6Ci0JY2FzZSBTQ1RQX0VSUk9SX0NB
VVNFX0lORDoKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIkh1aCwgdGhlIHBlZXIgZG9l
cyBub3Qgc3VwcG9ydCBzdWNjZXNzPyBvciBlcnJvciBjYXVzZT9cbiIpOwotCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQyLAotCQkJIlR1cm5pbmcgb2ZmIEFTQ09ORiB0byB0aGlzIHN0cmFuZ2Ug
cGVlclxuIik7Ci0JCXN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9IDA7Ci0JCWJyZWFrOwot
CWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCi0JCQkiUGVlciBkb2VzIG5v
dCBzdXBwb3J0IHBhcmFtIHR5cGUgJWQoJXgpPz9cbiIsCi0JCQlwYmFkLT5wYXJhbV90eXBlLCAo
dWludDMyX3QpIHBiYWQtPnBhcmFtX3R5cGUpOwotCQlicmVhazsKLQl9Ci19Ci0KLXN0YXRpYyBp
bnQKLXNjdHBfaGFuZGxlX2Vycm9yKHN0cnVjdCBzY3RwX2NodW5raGRyICpjaCwKLSAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlpbnQgY2hrbGVu
OwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyOwotCXVpbnQxNl90IGVycm9yLCBlcnJvcl90
eXBlOwotCXVpbnQxNl90IGVycm9yX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YzsKLQlpbnQgYWRqdXN0OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotI2VuZGlmCi0KLQkvKiBwYXJz
ZSB0aHJvdWdoIGFsbCBvZiB0aGUgZXJyb3JzIGFuZCBwcm9jZXNzICovCi0JYXNvYyA9ICZzdGNi
LT5hc29jOwotCXBoZHIgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoKGNhZGRyX3QpY2ggKwot
CSAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKLQljaGtsZW4gPSBudG9ocyhjaC0+
Y2h1bmtfbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JZXJyb3IgPSAw
OwotCXdoaWxlICgoc2l6ZV90KWNoa2xlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIp
KSB7Ci0JCS8qIFByb2Nlc3MgYW4gRXJyb3IgQ2F1c2UgKi8KLQkJZXJyb3JfdHlwZSA9IG50b2hz
KHBoZHItPnBhcmFtX3R5cGUpOwotCQllcnJvcl9sZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5n
dGgpOwotCQlpZiAoKGVycm9yX2xlbiA+IGNoa2xlbikgfHwgKGVycm9yX2xlbiA9PSAwKSkgewot
CQkJLyogaW52YWxpZCBwYXJhbSBsZW5ndGggZm9yIHRoaXMgcGFyYW0gKi8KLQkJCVNDVFBEQkco
U0NUUF9ERUJVR19JTlBVVDEsICJCb2d1cyBsZW5ndGggaW4gZXJyb3IgcGFyYW0tIGNodW5rIGxl
ZnQ6JWQgZXJyb3JsZW46JWRcbiIsCi0JCQkJY2hrbGVuLCBlcnJvcl9sZW4pOwotCQkJcmV0dXJu
ICgwKTsKLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJLyogcmVwb3J0IHRoZSBmaXJzdCBl
cnJvciBjYXVzZSAqLwotCQkJZXJyb3IgPSBlcnJvcl90eXBlOwotCQl9Ci0JCXN3aXRjaCAoZXJy
b3JfdHlwZSkgewotCQljYXNlIFNDVFBfQ0FVU0VfSU5WQUxJRF9TVFJFQU06Ci0JCWNhc2UgU0NU
UF9DQVVTRV9NSVNTSU5HX1BBUkFNOgotCQljYXNlIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTToK
LQkJY2FzZSBTQ1RQX0NBVVNFX05PX1VTRVJfREFUQToKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsICJTb2Z0d2FyZSBlcnJvciB3ZSBnb3QgYSAlZCBiYWNrPyBXZSBoYXZlIGEgYnVnIDov
IChvciBkbyB0aGV5PylcbiIsCi0JCQkJZXJyb3JfdHlwZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBT
Q1RQX0NBVVNFX05BVF9DT0xMSURJTkdfU1RBVEU6Ci0JCSAgICAgICAgU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMiwgIlJlY2VpdmVkIENvbGxpZGluZyBzdGF0ZSBhYm9ydCBmbGFnczoleFxuIiwK
LQkJCQljaC0+Y2h1bmtfZmxhZ3MpOwotCQkJaWYgKHNjdHBfaGFuZGxlX25hdF9jb2xsaWRpbmdf
c3RhdGUoc3RjYikpIHsKLQkJCSAgcmV0dXJuICgwKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNl
IFNDVFBfQ0FVU0VfTkFUX01JU1NJTkdfU1RBVEU6Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5Q
VVQyLCAiUmVjZWl2ZWQgbWlzc2luZyBzdGF0ZSBhYm9ydCBmbGFnczoleFxuIiwKLQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaHVua19mbGFncyk7Ci0JCQlpZiAoc2N0cF9oYW5k
bGVfbmF0X21pc3Npbmdfc3RhdGUoc3RjYiwgbmV0KSkgewotCQkJICByZXR1cm4gKDApOwotCQkJ
fQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9DQVVTRV9TVEFMRV9DT09LSUU6Ci0JCQkvKgotCQkJ
ICogV2Ugb25seSBhY3QgaWYgd2UgaGF2ZSBlY2hvZWQgYSBjb29raWUgYW5kIGFyZQotCQkJICog
d2FpdGluZy4KLQkJCSAqLwotCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RB
VEVfQ09PS0lFX0VDSE9FRCkgewotCQkJCWludCAqcDsKLQotCQkJCXAgPSAoaW50ICopKChjYWRk
cl90KXBoZHIgKyBzaXplb2YoKnBoZHIpKTsKLQkJCQkvKiBTYXZlIHRoZSB0aW1lIGRvdWJsZWQg
Ki8KLQkJCQlhc29jLT5jb29raWVfcHJlc2VydmVfcmVxID0gbnRvaGwoKnApIDw8IDE7Ci0JCQkJ
YXNvYy0+c3RhbGVfY29va2llX2NvdW50Kys7Ci0JCQkJaWYgKGFzb2MtPnN0YWxlX2Nvb2tpZV9j
b3VudCA+Ci0JCQkJICAgIGFzb2MtPm1heF9pbml0X3RpbWVzKSB7Ci0JCQkJCXNjdHBfYWJvcnRf
bm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJ
CS8qIG5vdyBmcmVlIHRoZSBhc29jICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCk7Ci0JCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0J
CQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Moc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkJCQkgICAgICBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEyKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCAxKTsKLSNlbmRpZgotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJLyogYmxhc3QgYmFj
ayB0byBJTklUIHN0YXRlICovCi0JCQkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsICZzdGNi
LT5hc29jKTsKLQkJCQlhc29jLT5zdGF0ZSAmPSB+U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOwot
CQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ7Ci0JCQkJc2N0cF9zdG9w
X2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwotCQkJCXNjdHBfc2VuZF9pbml0aWF0ZShzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNh
c2UgU0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQUREUjoKLQkJCS8qCi0JCQkgKiBOb3RoaW5nIHdl
IGNhbiBkbyBoZXJlLCB3ZSBkb24ndCBkbyBob3N0bmFtZQotCQkJICogYWRkcmVzc2VzIHNvIGlm
IHRoZSBwZWVyIGRvZXMgbm90IGxpa2UgbXkgSVB2NgotCQkJICogKG9yIElQdjQgZm9yIHRoYXQg
bWF0dGVyKSBpdCBkb2VzIG5vdCBtYXR0ZXIuIElmCi0JCQkgKiB0aGV5IGRvbid0IHN1cHBvcnQg
dGhhdCB0eXBlIG9mIGFkZHJlc3MsIHRoZXkgY2FuCi0JCQkgKiBOT1QgcG9zc2libHkgZ2V0IHRo
YXQgcGFja2V0IHR5cGUuLi4gaS5lLiB3aXRoIG5vCi0JCQkgKiBJUHY2IHlvdSBjYW4ndCByZWNl
aXZlIGEgSVB2NiBwYWNrZXQuIHNvIHdlIGNhbgotCQkJICogc2FmZWx5IGlnbm9yZSB0aGlzIG9u
ZS4gSWYgd2UgZXZlciBhZGRlZCBzdXBwb3J0Ci0JCQkgKiBmb3IgSE9TVE5BTUUgQWRkcmVzc2Vz
LCB0aGVuIHdlIHdvdWxkIG5lZWQgdG8gZG8KLQkJCSAqIHNvbWV0aGluZyBoZXJlLgotCQkJICov
Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hVTks6Ci0JCQlzY3RwX3By
b2Nlc3NfdW5yZWNvZ19jaHVuayhzdGNiLCBwaGRyLCBuZXQpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9DQVVTRV9VTlJFQ09HX1BBUkFNOgotCQkJc2N0cF9wcm9jZXNzX3VucmVjb2dfcGFyYW0o
c3RjYiwgcGhkcik7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0NBVVNFX0NPT0tJRV9JTl9TSFVU
RE9XTjoKLQkJCS8qCi0JCQkgKiBXZSBpZ25vcmUgdGhpcyBzaW5jZSB0aGUgdGltZXIgd2lsbCBk
cml2ZSBvdXQgYQotCQkJICogbmV3IGNvb2tpZSBhbnl3YXkgYW5kIHRoZXJlIHRpbWVyIHdpbGwg
ZHJpdmUgdXMKLQkJCSAqIHRvIHNlbmQgYSBTSFVURE9XTl9DT01QTEVURS4gV2UgY2FuJ3Qgc2Vu
ZCBvbmUKLQkJCSAqIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVpciB0YWcuCi0JCQkgKi8K
LQkJCWJyZWFrOwotCQljYXNlIFNDVFBfQ0FVU0VfREVMRVRJTkdfTEFTVF9BRERSOgotCQljYXNl
IFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0U6Ci0JCWNhc2UgU0NUUF9DQVVTRV9ERUxFVElO
R19TUkNfQUREUjoKLQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgTk9UIGdldCB0aGVzZSBoZXJlLCBi
dXQgaW4gYQotCQkJICogQVNDT05GLUFDSy4KLQkJCSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMiwgIlBlZXIgc2VuZHMgQVNDT05GIGVycm9ycyBpbiBhIE9wZXJhdGlvbmFsIEVycm9y
PzwlZD4/XG4iLAotCQkJCWVycm9yX3R5cGUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9DQVVT
RV9PVVRfT0ZfUkVTQzoKLQkJCS8qCi0JCQkgKiBBbmQgd2hhdCwgcHJheSB0ZWxsIGRvIHdlIGRv
IHdpdGggdGhlIGZhY3QgdGhhdAotCQkJICogdGhlIHBlZXIgaXMgb3V0IG9mIHJlc291cmNlcz8g
Tm90IHJlYWxseSBzdXJlIHdlCi0JCQkgKiBjb3VsZCBkbyBhbnl0aGluZyBidXQgYWJvcnQuIEkg
c3VzcGVjdCB0aGlzCi0JCQkgKiBzaG91bGQgaGF2ZSBjYW1lIFdJVEggYW4gYWJvcnQgaW5zdGVh
ZCBvZiBpbiBhCi0JCQkgKiBPUC1FUlJPUi4KLQkJCSAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6
Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9oYW5kbGVfZXJyb3I6IHVua25v
d24gZXJyb3IgdHlwZSA9IDB4JXhoXG4iLAotCQkJCWVycm9yX3R5cGUpOwotCQkJYnJlYWs7Ci0J
CX0KLQkJYWRqdXN0ID0gU0NUUF9TSVpFMzIoZXJyb3JfbGVuKTsKLQkJY2hrbGVuIC09IGFkanVz
dDsKLQkJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSgoY2FkZHJfdClwaGRyICsgYWRq
dXN0KTsKLQl9Ci0Jc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1JFTU9URV9FUlJPUiwgc3Rj
YiwgZXJyb3IsIGNoLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCXJldHVybiAoMCk7Ci19Ci0KLXN0
YXRpYyBpbnQKLXNjdHBfaGFuZGxlX2luaXRfYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu
LCBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMs
IHN0cnVjdCBzb2NrYWRkciAqZHN0LCBzdHJ1Y3Qgc2N0cGhkciAqc2gsCi0gICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqY3AsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50ICph
Ym9ydF9ub191bmxvY2ssCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAotI2VuZGlmCi0gICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQpCi17Ci0Jc3RydWN0IHNjdHBfaW5pdF9h
Y2sgKmluaXRfYWNrOwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQyLAotCQkic2N0cF9oYW5kbGVfaW5pdF9hY2s6IGhhbmRsaW5nIElOSVQtQUNLXG4i
KTsKLQotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwK
LQkJCSJzY3RwX2hhbmRsZV9pbml0X2FjazogVENCIGlzIG51bGxcbiIpOwotCQlyZXR1cm4gKC0x
KTsKLQl9Ci0JaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2luaXRfYWNrX2NodW5rKSkgewotCQkvKiBJbnZhbGlkIGxlbmd0aCAqLwotCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwotCQlz
Y3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dp
ZCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsK
LQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpbml0X2FjayA9
ICZjcC0+aW5pdDsKLQkvKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzICovCi0JaWYgKGluaXRfYWNrLT5p
bml0aWF0ZV90YWcgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0
ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
bSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lk
LCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0J
fQotCWlmIChudG9obChpbml0X2Fjay0+YV9yd25kKSA8IFNDVFBfTUlOX1JXTkQpIHsKLQkJLyog
cHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwotCQlzY3RwX2Fib3J0X2Fz
c29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKLQkJICAgICAgICAgICAg
ICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgot
CQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKLQkJKmFib3J0X25v
X3VubG9jayA9IDE7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoaW5pdF9hY2stPm51bV9pbmJv
dW5kX3N0cmVhbXMgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0
ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
bSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lk
LCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0J
fQotCWlmIChpbml0X2Fjay0+bnVtX291dGJvdW5kX3N0cmVhbXMgPT0gMCkgewotCQkvKiBwcm90
b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2Np
YXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5s
b2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFz
c29jaWF0aW9uIHN0YXRlLi4uICovCi0Jc3dpdGNoIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9T
VEFURV9NQVNLKSB7Ci0JY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgotCQkvKiB0aGlzIGlz
IHRoZSBleHBlY3RlZCBzdGF0ZSBmb3IgdGhpcyBjaHVuayAqLwotCQkvKiBwcm9jZXNzIHRoZSBJ
TklULUFDSyBwYXJhbWV0ZXJzICovCi0JCWlmIChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24tPmRlc3Rfc3RhdGUgJgotCQkgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7Ci0JCQkvKgot
CQkJICogVGhlIHByaW1hcnkgaXMgd2hlcmUgd2Ugc2VudCB0aGUgSU5JVCwgd2UgY2FuCi0JCQkg
KiBhbHdheXMgY29uc2lkZXIgaXQgY29uZmlybWVkIHdoZW4gdGhlIElOSVQtQUNLIGlzCi0JCQkg
KiByZXR1cm5lZC4gRG8gdGhpcyBiZWZvcmUgd2UgbG9hZCBhZGRyZXNzZXMKLQkJCSAqIHRob3Vn
aC4KLQkJCSAqLwotCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRl
ICY9Ci0JCQkgICAgflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKLQkJCXNjdHBfdWxwX25vdGlmeShT
Q1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAotCQkJICAgIHN0Y2IsIDAsICh2b2lkICop
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQl9
Ci0JCWlmIChzY3RwX3Byb2Nlc3NfaW5pdF9hY2sobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0
LCBzaCwgY3AsIHN0Y2IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LCBhYm9ydF9u
b191bmxvY2ssCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQpIDwgMCkgewotCQkJLyogZXJyb3IgaW4gcGFyc2luZyBwYXJhbWV0ZXJz
ICovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkvKiB1cGRhdGUgb3VyIHN0YXRlICovCi0JCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJtb3ZpbmcgdG8gQ09PS0lFLUVDSE9FRCBzdGF0ZVxu
Iik7Ci0JCVNDVFBfU0VUX1NUQVRFKCZzdGNiLT5hc29jLCBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hP
RUQpOwotCi0JCS8qIHJlc2V0IHRoZSBSVE8gY2FsYyAqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJc2N0
cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJICAgICAgIHN0Y2ItPmFzb2Mu
b3ZlcmFsbF9lcnJvcl9jb3VudCwKLQkJCQkgICAgICAgMCwKLQkJCQkgICAgICAgU0NUUF9GUk9N
X1NDVFBfSU5QVVQsCi0JCQkJICAgICAgIF9fTElORV9fKTsKLQkJfQotCQlzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3Rj
Yi0+YXNvYy50aW1lX2VudGVyZWQpOwotCQkvKgotCQkgKiBjb2xsYXBzZSB0aGUgaW5pdCB0aW1l
ciBiYWNrIGluIGNhc2Ugb2YgYSBleHBvbmVudGlhbAotCQkgKiBiYWNrb2ZmCi0JCSAqLwotCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9DT09LSUUsIHN0Y2ItPnNjdHBfZXAsCi0J
CSAgICBzdGNiLCBuZXQpOwotCQkvKgotCQkgKiB0aGUgc2VuZCBhdCB0aGUgZW5kIG9mIHRoZSBp
bmJvdW5kIGRhdGEgcHJvY2Vzc2luZyB3aWxsCi0JCSAqIGNhdXNlIHRoZSBjb29raWUgdG8gYmUg
c2VudAotCQkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQ6Ci0J
CS8qIGluY29ycmVjdCBzdGF0ZS4uLiBkaXNjYXJkICovCi0JCWJyZWFrOwotCWNhc2UgU0NUUF9T
VEFURV9DT09LSUVfRUNIT0VEOgotCQkvKiBpbmNvcnJlY3Qgc3RhdGUuLi4gZGlzY2FyZCAqLwot
CQlicmVhazsKLQljYXNlIFNDVFBfU1RBVEVfT1BFTjoKLQkJLyogaW5jb3JyZWN0IHN0YXRlLi4u
IGRpc2NhcmQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NUQVRFX0VNUFRZOgotCWNhc2UgU0NU
UF9TVEFURV9JTlVTRToKLQlkZWZhdWx0OgotCQkvKiBpbmNvcnJlY3Qgc3RhdGUuLi4gZGlzY2Fy
ZCAqLwotCQlyZXR1cm4gKC0xKTsKLQkJYnJlYWs7Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsICJMZWF2aW5nIGhhbmRsZS1pbml0LWFjayBlbmRcbiIpOwotCXJldHVybiAoMCk7Ci19
Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcoc3Ry
dWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gICAgc3RydWN0IHNvY2thZGRy
ICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3Ry
dWN0IHNjdHBfc3RhdGVfY29va2llICpjb29raWUsIGludCBjb29raWVfbGVuLAotICAgIHN0cnVj
dCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLAotICAgIHN0cnVjdCBz
b2NrYWRkciAqaW5pdF9zcmMsIGludCAqbm90aWZpY2F0aW9uLAotICAgIGludCBhdXRoX3NraXBw
ZWQsIHVpbnQzMl90IGF1dGhfb2Zmc2V0LCB1aW50MzJfdCBhdXRoX2xlbiwKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAot
I2VuZGlmCi0gICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KTsKLQotCi0vKgotICog
aGFuZGxlIGEgc3RhdGUgY29va2llIGZvciBhbiBleGlzdGluZyBhc3NvY2lhdGlvbiBtOiBpbnB1
dCBwYWNrZXQgbWJ1ZgotICogY2hhaW4tLSBhc3N1bWVzIGEgcHVsbHVwIG9uIElQL1NDVFAvQ09P
S0lFLUVDSE8gY2h1bmsgbm90ZTogdGhpcyBpcyBhCi0gKiAic3BsaXQiIG1idWYgYW5kIHRoZSBj
b29raWUgc2lnbmF0dXJlIGRvZXMgbm90IGV4aXN0IG9mZnNldDogb2Zmc2V0IGludG8KLSAqIG1i
dWYgdG8gdGhlIGNvb2tpZS1lY2hvIGNodW5rCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2Ig
Kgotc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxl
biwgaW50IG9mZnNldCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRy
ICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUg
KmNvb2tpZSwgaW50IGNvb2tpZV9sZW4sCi0gICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwKLSAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmluaXRfc3JjLCBpbnQgKm5vdGlmaWNhdGlvbiwKLSAgICBpbnQgYXV0aF9za2lw
cGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9sZW4sCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLSAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwK
LSNlbmRpZgotICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKLXsKLQlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0X2Nw
LCBpbml0X2J1ZjsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqaW5pdGFja19jcCwgaW5p
dGFja19idWY7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVjdCBtYnVmICpvcF9lcnI7
Ci0JaW50IGluaXRfb2Zmc2V0LCBpbml0YWNrX29mZnNldCwgaTsKLQlpbnQgcmV0dmFsOwotCWlu
dCBzcGVjX2ZsYWcgPSAwOwotCXVpbnQzMl90IGhvd19pbmR4OwotI2lmIGRlZmluZWQoU0NUUF9E
RVRBSUxFRF9TVFJfU1RBVFMpCi0JaW50IGo7Ci0jZW5kaWYKLQotCW5ldCA9ICpuZXRwOwotCS8q
IEkga25vdyB0aGF0IHRoZSBUQ0IgaXMgbm9uLU5VTEwgZnJvbSB0aGUgY2FsbGVyICovCi0JYXNv
YyA9ICZzdGNiLT5hc29jOwotCWZvciAoaG93X2luZHggPSAwOyBob3dfaW5keCAgPCBzaXplb2Yo
YXNvYy0+Y29va2llX2hvdyk7IGhvd19pbmR4KyspIHsKLQkJaWYgKGFzb2MtPmNvb2tpZV9ob3db
aG93X2luZHhdID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFz
b2MtPmNvb2tpZV9ob3cpKSB7Ci0JCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTsKLQl9
Ci0JaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NF
TlQpIHsKLQkJLyogU0hVVERPV04gY2FtZSBpbiBhZnRlciBzZW5kaW5nIElOSVQtQUNLICovCi0J
CXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uKTsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0NPT0tJRV9J
Tl9TSFVURE9XTiwgIiIpOwotCQlzY3RwX3NlbmRfb3BlcnJfdG8oc3JjLCBkc3QsIHNoLCBjb29r
aWUtPnBlZXJzX3Z0YWcsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgot
CQkgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQlpZiAoaG93X2luZHgg
PCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4
XSA9IDI7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogZmluZCBhbmQgdmFsaWRhdGUg
dGhlIElOSVQgY2h1bmsgaW4gdGhlIGNvb2tpZSAocGVlcidzIGluZm8pIHRoZQotCSAqIElOSVQg
c2hvdWxkIHN0YXJ0IGFmdGVyIHRoZSBjb29raWUtZWNobyBoZWFkZXIgc3RydWN0IChjaHVuawot
CSAqIGhlYWRlciwgc3RhdGUgY29va2llIGhlYWRlciBzdHJ1Y3QpCi0JICovCi0JaW5pdF9vZmZz
ZXQgPSBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rKTsKLQot
CWluaXRfY3AgPSAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKQotCQlzY3RwX21fZ2V0cHRyKG0s
IGluaXRfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCi0JCQkgICAgICAo
dWludDhfdCAqKSAmIGluaXRfYnVmKTsKLQlpZiAoaW5pdF9jcCA9PSBOVUxMKSB7Ci0JCS8qIGNv
dWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUgKi8KLQkJcmV0dXJuIChOVUxMKTsK
LQl9Ci0JaWYgKGluaXRfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB7Ci0J
CXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogZmluZCBhbmQgdmFsaWRhdGUgdGhlIElOSVQt
QUNLIGNodW5rIGluIHRoZSBjb29raWUgKG15IGluZm8pIHRoZQotCSAqIElOSVQtQUNLIGZvbGxv
d3MgdGhlIElOSVQgY2h1bmsKLQkgKi8KLQlpbml0YWNrX29mZnNldCA9IGluaXRfb2Zmc2V0ICsg
U0NUUF9TSVpFMzIobnRvaHMoaW5pdF9jcC0+Y2guY2h1bmtfbGVuZ3RoKSk7Ci0JaW5pdGFja19j
cCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqKQotCQlzY3RwX21fZ2V0cHRyKG0sIGlu
aXRhY2tfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspLAotCQkJICAg
ICAgKHVpbnQ4X3QgKikgJiBpbml0YWNrX2J1Zik7Ci0JaWYgKGluaXRhY2tfY3AgPT0gTlVMTCkg
ewotCQkvKiBjb3VsZCBub3QgcHVsbCBJTklULUFDSyBjaHVuayBpbiBjb29raWUgKi8KLQkJcmV0
dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRhY2tfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9J
TklUSUFUSU9OX0FDSykgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKG50b2hsKGluaXRh
Y2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92dGFnKSAmJgotCSAgICAobnRv
aGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2MtPnBlZXJfdnRhZykpIHsKLQkJ
LyoKLQkJICogY2FzZSBEIGluIFNlY3Rpb24gNS4yLjQgVGFibGUgMjogTU1BQSBwcm9jZXNzIGFj
Y29yZGluZ2x5Ci0JCSAqIHRvIGdldCBpbnRvIHRoZSBPUEVOIHN0YXRlCi0JCSAqLwotCQlpZiAo
bnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3RzbikgIT0gYXNvYy0+aW5pdF9zZXFfbnVt
YmVyKSB7Ci0JCQkvKi0KLQkJCSAqIE9wcHMsIHRoaXMgbWVhbnMgdGhhdCB3ZSBzb21laG93IGdl
bmVyYXRlZCB0d28gdnRhZydzCi0JCQkgKiB0aGUgc2FtZS4gSS5lLiB3ZSBkaWQ6Ci0JCQkgKiAg
VXMgICAgICAgICAgICAgICBQZWVyCi0JCQkgKiAgIDwtLS1JTklUKHRhZz1hKS0tLS0tLQotCQkJ
ICogICAtLS0tSU5JVC1BQ0sodGFnPXQpLS0+Ci0JCQkgKiAgIC0tLS1JTklUKHRhZz10KS0tLS0t
LT4gKjEKLQkJCSAqICAgPC0tLUlOSVQtQUNLKHRhZz1hKS0tLQotICAgICAgICAgICAgICAgICAg
ICAgICAgICogICA8LS0tLUNFKHRhZz10KS0tLS0tLS0tLS0tLS0gKjIKLQkJCSAqCi0JCQkgKiBB
dCBwb2ludCAqMSB3ZSBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIGRpZmZlcmVudAotCQkJICogdGFn
IHQnLiBXaGljaCBtZWFucyB3ZSB3b3VsZCB0aHJvdyBhd2F5IHRoZSBDRSBhbmQgc2VuZAotCQkJ
ICogb3VycyBpbnN0ZWFkLiBCYXNpY2FsbHkgdGhpcyBpcyBjYXNlIEMgKHRocm93IGF3YXkgc2lk
ZSkuCi0JCQkgKi8KLQkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkK
LQkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE3OwotCQkJcmV0dXJuIChOVUxMKTsK
LQotCQl9Ci0JCXN3aXRjaCAoU0NUUF9HRVRfU1RBVEUoYXNvYykpIHsKLQkJCWNhc2UgU0NUUF9T
VEFURV9DT09LSUVfV0FJVDoKLQkJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgotCQkJ
CS8qCi0JCQkJICogSU5JVCB3YXMgc2VudCBidXQgZ290IGEgQ09PS0lFX0VDSE8gd2l0aCB0aGUK
LQkJCQkgKiBjb3JyZWN0IHRhZ3MuLi4ganVzdCBhY2NlcHQgaXQuLi5idXQgd2UgbXVzdAotCQkJ
CSAqIHByb2Nlc3MgdGhlIGluaXQgc28gdGhhdCB3ZSBjYW4gbWFrZSBzdXJlIHdlCi0JCQkJICog
aGF2ZSB0aGUgcmlnaHQgc2VxIG5vJ3MuCi0JCQkJICovCi0JCQkJLyogRmlyc3Qgd2UgbXVzdCBw
cm9jZXNzIHRoZSBJTklUICEhICovCi0JCQkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoaW5p
dF9jcCwgc3RjYik7Ci0JCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQkJaWYgKGhvd19pbmR4IDwg
c2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5k
eF0gPSAzOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQkvKiB3ZSBoYXZlIGFscmVh
ZHkgcHJvY2Vzc2VkIHRoZSBJTklUIHNvIG5vIHByb2JsZW0gKi8KLQkJCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLAotCQkJCSAgICAgICAgICAgICAgICBz
dGNiLCBuZXQsCi0JCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NU
UF9MT0NfMTMpOwotCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgaW5w
LAotCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCi0JCQkJICAgICAgICAgICAgICAgIFND
VFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTQpOwotCQkJCS8qIHVwZGF0ZSBjdXJyZW50
IHN0YXRlICovCi0JCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09P
S0lFX0VDSE9FRCkKLQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2FjdGl2ZWVz
dGFiKTsKLQkJCQllbHNlCi0JCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19jb2xs
aXNpb25lc3RhYik7Ci0KLQkJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX09QRU4p
OwotCQkJCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgewot
CQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAotCQkJ
CQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJ
CQl9Ci0JCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQkJCXNj
dHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKLQkJCQlpZiAoKChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCQkgICAgIChzdGNi
LT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpICYmCi0J
CQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQkJc3RydWN0IHNvY2tldCAq
c287Ci0jZW5kaWYKLQkJCQkJLyoKLQkJCQkJICogSGVyZSBpcyB3aGVyZSBjb2xsaXNpb24gd291
bGQgZ28gaWYgd2UKLQkJCQkJICogZGlkIGEgY29ubmVjdCgpIGFuZCBpbnN0ZWFkIGdvdCBhCi0J
CQkJCSAqIGluaXQvaW5pdC1hY2svY29va2llIGRvbmUgYmVmb3JlIHRoZQotCQkJCQkgKiBpbml0
LWFjayBjYW1lIGJhY2suLgotCQkJCQkgKi8KLQkJCQkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyB8PQotCQkJCQkJU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCQlzbyA9IFNDVFBfSU5Q
X1NPKHN0Y2ItPnNjdHBfZXApOwotCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCVNDVFBfU09DS0VUX0xP
Q0soc28sIDEpOwotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywg
MSk7Ci0JCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJc29pc2Nvbm5l
Y3RlZChzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7
Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCi0JCQkJKm5vdGlm
aWNhdGlvbiA9IFNDVFBfTk9USUZZX0FTU09DX1VQOwotCQkJCS8qCi0JCQkJICogc2luY2Ugd2Ug
ZGlkIG5vdCBzZW5kIGEgSEIgbWFrZSBzdXJlIHdlCi0JCQkJICogZG9uJ3QgZG91YmxlIHRoaW5n
cwotCQkJCSAqLwotCQkJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKLQkJCQlzdHJ1Y3QgdGltZXZh
bCB0aW1lX2VudGVyZWQ7Ci0JCQkJbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwg
YXNvYywgbmV0LAotCQkJCQkJCSAgICAgICZ0aW1lX2VudGVyZWQsCi0JCQkJCQkJICAgICAgc2N0
cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCi0JCQkJCQkJICAgICAgU0NUUF9SVFRfRlJPTV9OT05f
REFUQSk7Ci0JCQkJY29va2llLT50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0KLQkJCQlp
ZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgotCQkJCSAgICAoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFKSkpIHsKLQkJCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLAotCQkJCQkJCSBpbnAsIHN0Y2Is
IE5VTEwpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJLyoKLQkJCQkgKiB3
ZSdyZSBpbiB0aGUgT1BFTiBzdGF0ZSAob3IgYmV5b25kKSwgc28KLQkJCQkgKiBwZWVyIG11c3Qg
aGF2ZSBzaW1wbHkgbG9zdCB0aGUgQ09PS0lFLUFDSwotCQkJCSAqLwotCQkJCWJyZWFrOwotCQl9
CS8qIGVuZCBzd2l0Y2ggKi8KLQkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwot
CQkvKgotCQkgKiBXZSBpZ25vcmUgdGhlIHJldHVybiBjb2RlIGhlcmUuLiBub3Qgc3VyZSBpZiB3
ZSBzaG91bGQKLQkJICogc29tZWhvdyBhYm9ydC4uIGJ1dCB3ZSBkbyBoYXZlIGFuIGV4aXN0aW5n
IGFzb2MuIFRoaXMKLQkJICogcmVhbGx5IHNob3VsZCBub3QgZmFpbC4KLQkJICovCi0JCWlmIChz
Y3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAotCQkJCQkJICBpbml0X29mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKLQkJCQkJCSAgaW5pdGFja19vZmZz
ZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkgewotCQkJaWYgKGhvd19p
bmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93
X2luZHhdID0gNDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJLyogcmVzcG9uZCB3aXRoIGEg
Q09PS0lFLUFDSyAqLwotCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RjYiwgYXNvYyk7Ci0JCXNj
dHBfc2VuZF9jb29raWVfYWNrKHN0Y2IpOwotCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+
Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDU7Ci0JCXJldHVy
biAoc3RjYik7Ci0JfQotCi0JaWYgKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFn
KSAhPSBhc29jLT5teV92dGFnICYmCi0JICAgIG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVf
dGFnKSA9PSBhc29jLT5wZWVyX3Z0YWcgJiYKLQkgICAgY29va2llLT50aWVfdGFnX215X3Z0YWcg
PT0gMCAmJgotCSAgICBjb29raWUtPnRpZV90YWdfcGVlcl92dGFnID09IDApIHsKLQkJLyoKLQkJ
ICogY2FzZSBDIGluIFNlY3Rpb24gNS4yLjQgVGFibGUgMjogWE1PTyBzaWxlbnRseSBkaXNjYXJk
Ci0JCSAqLwotCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlh
c29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDY7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8q
IElmIG5hdCBzdXBwb3J0LCBhbmQgdGhlIGJlbG93IGFuZCBzdGNiIGlzIGVzdGFibGlzaGVkLAot
CSAqIHNlbmQgYmFjayBhIEFCT1JUKGNvbGxpZGluZyBzdGF0ZSkgaWYgd2UgYXJlIGVzdGFibGlz
aGVkLgotCSAqLwotCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVO
KSAgJiYKLQkgICAgKGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSAmJgotCSAgICAoKG50b2hsKGlu
aXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92dGFnKSAmJgotCSAgICAo
KG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcpIHx8
Ci0JICAgICAoYXNvYy0+cGVlcl92dGFnID09IDApKSkpIHsKLQkJLyogU3BlY2lhbCBjYXNlIC0g
UGVlcidzIHN1cHBvcnQgbmF0LiBXZSBtYXkgaGF2ZQotCQkgKiB0d28gaW5pdCdzIHRoYXQgd2Ug
Z2F2ZSBvdXQgdGhlIHNhbWUgdGFnIG9uIHNpbmNlCi0JCSAqIG9uZSB3YXMgbm90IGVzdGFibGlz
aGVkLi4gaS5lLiB3ZSBnZXQgSU5JVCBmcm9tIGhvc3QtMQotCQkgKiBiZWhpbmQgdGhlIG5hdCBh
bmQgd2UgcmVzcG9uZCB0YWctYSwgd2UgZ2V0IGEgSU5JVCBmcm9tCi0JCSAqIGhvc3QtMiBiZWhp
bmQgdGhlIG5hdCBhbmQgd2UgZ2V0IHRhZy1hIGFnYWluLiBUaGVuIHdlCi0JCSAqIGJyaW5nIHVw
IGhvc3QtMSAob3IgMidzKSBhc3NvYywgVGhlbiBjb21lcyB0aGUgY29va2llCi0JCSAqIGZyb20g
aHNvdC0yIChvciAxKS4gTm93IHdlIGhhdmUgY29sbGlkaW5nIHN0YXRlLiBXZSBtdXN0Ci0JCSAq
IHNlbmQgYW4gYWJvcnQgaGVyZSB3aXRoIGNvbGxpZGluZyBzdGF0ZSBpbmRpY2F0aW9uLgotCQkg
Ki8KLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX05BVF9DT0xMSURJ
TkdfU1RBVEUsICIiKTsKLQkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgIHNyYywgZHN0LCBz
aCwgMCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAg
ICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCSAgICAgICAgICAg
ICAgICB2cmZfaWQsIHBvcnQpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKG50b2hsKGlu
aXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92dGFnKSAmJgotCSAgICAo
KG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcpIHx8
Ci0JICAgICAoYXNvYy0+cGVlcl92dGFnID09IDApKSkgewotCQkvKgotCQkgKiBjYXNlIEIgaW4g
U2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBNWEFBIG9yIE1PQUEgbXkgaW5mbwotCQkgKiBzaG91bGQg
YmUgb2ssIHJlLWFjY2VwdCBwZWVyIGluZm8KLQkJICovCi0JCWlmIChudG9obChpbml0YWNrX2Nw
LT5pbml0LmluaXRpYWxfdHNuKSAhPSBhc29jLT5pbml0X3NlcV9udW1iZXIpIHsKLQkJCS8qIEV4
dGVuc2lvbiBvZiBjYXNlIEMuCi0JCQkgKiBJZiB3ZSBoaXQgdGhpcywgdGhlbiB0aGUgcmFuZG9t
IG51bWJlcgotCQkJICogZ2VuZXJhdG9yIHJldHVybmVkIHRoZSBzYW1lIHZ0YWcgd2hlbiB3ZQot
CQkJICogZmlyc3Qgc2VudCBvdXIgSU5JVC1BQ0sgYW5kIHdoZW4gd2UgbGF0ZXIgc2VudAotCQkJ
ICogb3VyIElOSVQuIFRoZSBzaWRlIHdpdGggdGhlIHNlcSBudW1iZXJzIHRoYXQgYXJlCi0JCQkg
KiBkaWZmZXJlbnQgd2lsbCBiZSB0aGUgb25lIHRoYXQgbm9ybW5hbGx5IHdvdWxkCi0JCQkgKiBo
YXZlIGhpdCBjYXNlIEMuIFRoaXMgaW4gZWZmZWN0ICJleHRlbmRzIiBvdXIgdnRhZ3MKLQkJCSAq
IGluIHRoaXMgY29sbGlzaW9uIGNhc2UgdG8gYmUgNjQgYml0cy4gVGhlIHNhbWUgY29sbGlzaW9u
Ci0JCQkgKiBjb3VsZCBvY2N1ciBha2EgeW91IGdldCBib3RoIHZ0YWcgYW5kIHNlcSBudW1iZXIg
dGhlCi0JCQkgKiBzYW1lIHR3aWNlIGluIGEgcm93Li4gYnV0IGlzIG11Y2ggbGVzcyBsaWtlbHku
IElmIGl0Ci0JCQkgKiBkaWQgaGFwcGVuIHRoZW4gd2Ugd291bGQgcHJvY2VlZCB0aHJvdWdoIGFu
ZCBicmluZwotCQkJICogdXAgdGhlIGFzc29jLi4gd2UgbWF5IGVuZCB1cCB3aXRoIHRoZSB3cm9u
ZyBzdHJlYW0KLQkJCSAqIHNldHVwIGhvd2V2ZXIuLiB3aGljaCB3b3VsZCBiZSBiYWQuLiBidXQg
dGhlcmUgaXMKLQkJCSAqIG5vIHdheSB0byB0ZWxsLi4gdW50aWwgd2Ugc2VuZCBvbiBhIHN0cmVh
bSB0aGF0IGRvZXMKLQkJCSAqIG5vdCBleGlzdCA6LSkKLQkJCSAqLwotCQkJaWYgKGhvd19pbmR4
IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2lu
ZHhdID0gNzsKLQotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlpZiAoaG93X2luZHggPCBzaXpl
b2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDg7
Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2Is
IG5ldCwKLQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0Nf
MTUpOwotCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JCS8qCi0JCSAqIHNp
bmNlIHdlIGRpZCBub3Qgc2VuZCBhIEhCIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUKLQkJICog
dGhpbmdzCi0JCSAqLwotCQluZXQtPmhiX3Jlc3BvbmRlZCA9IDE7Ci0JCWlmIChzdGNiLT5hc29j
LnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCi0JCSAgICBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9BVVRPQ0xPU0UsIGlucCwgc3RjYiwKLQkJCQkJIE5VTEwpOwotCQl9Ci0JCWFzb2Mt
Pm15X3J3bmQgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmFfcnduZCk7Ci0JCWFzb2MtPnByZV9v
cGVuX3N0cmVhbXMgPSBudG9ocyhpbml0YWNrX2NwLT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1z
KTsKLQotCQlpZiAobnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0ZV90YWcpICE9IGFzb2MtPnBl
ZXJfdnRhZykgewotCQkJLyogT2sgdGhlIHBlZXIgcHJvYmFibHkgZGlzY2FyZGVkIG91cgotCQkJ
ICogZGF0YSAoaWYgd2UgZWNob2VkIGEgY29va2llK2RhdGEpLiBTbyBhbnl0aGluZwotCQkJICog
b24gdGhlIHNlbnRfcXVldWUgc2hvdWxkIGJlIG1hcmtlZCBmb3IKLQkJCSAqIHJldHJhbnNtaXQs
IHdlIG1heSBub3QgZ2V0IHNvbWV0aGluZyB0bwotCQkJICoga2ljayB1cyBzbyBpdCBDT1VMRCBz
dGlsbCB0YWtlIGEgdGltZW91dAotCQkJICogdG8gbW92ZSB0aGVzZS4uIGJ1dCBpdCBjYW4ndCBo
dXJ0IHRvIG1hcmsgdGhlbS4KLQkJCSAqLwotCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hr
OwotCQkgICAgICAgIFRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBz
Y3RwX25leHQpIHsKLQkJCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsK
LQkJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQkJCXNjdHBfZmxpZ2h0
X3NpemVfZGVjcmVhc2UoY2hrKTsKLQkJCQkJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3Rj
YiwgY2hrKTsKLQkJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCk7Ci0JCQkJCXNwZWNfZmxhZysrOwotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCS8qIHBy
b2Nlc3MgdGhlIElOSVQgaW5mbyAocGVlcidzIGluZm8pICovCi0JCXJldHZhbCA9IHNjdHBfcHJv
Y2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOwotCQlpZiAocmV0dmFsIDwgMCkgewotCQkJaWYgKGhv
d19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2MtPmNvb2tpZV9ob3db
aG93X2luZHhdID0gOTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKHNjdHBfbG9hZF9h
ZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0sCi0JCQkJCQkgIGluaXRfb2Zmc2V0ICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCQkJCQkJICBpbml0YWNrX29mZnNldCwgc3JjLCBk
c3QsIGluaXRfc3JjLCBzdGNiLT5hc29jLnBvcnQpKSB7Ci0JCQlpZiAoaG93X2luZHggPCBzaXpl
b2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAx
MDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfQ09PS0lFX1dBSVQpIHx8Ci0JCSAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX0NPT0tJ
RV9FQ0hPRUQpKSB7Ci0JCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNTT0NfVVA7Ci0K
LQkJCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAotCQkJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0lOX1RDUFBPT0wpKSAmJgotCQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkpIHsK
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
LQkJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCQkJCXN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgfD0KLQkJCQkJU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCXNvID0gU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJU0NUUF9TT0NLRVRfTE9D
SyhzbywgMSk7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewotCQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwot
CQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLSNlbmRpZgotCQkJCXNvaXNjb25uZWN0ZWQoc3Rj
Yi0+c2N0cF9zb2NrZXQpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYK
LQkJCX0KLQkJCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2FjdGl2ZWVzdGFiKTsK
LQkJCWVsc2UKLQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfY29sbGlzaW9uZXN0
YWIpOwotCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQl9IGVs
c2UgaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgewotCQkJU0NU
UF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3Jlc3RhcnRlc3RhYik7Ci0JCX0gZWxzZSB7Ci0J
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfY29sbGlzaW9uZXN0YWIpOwotCQl9Ci0J
CVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7Ci0JCWlmIChhc29jLT5zdGF0
ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgewotCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOwotCQl9Ci0JCXNjdHBfc3RvcF9hbGxfY29va2ll
X3RpbWVycyhzdGNiKTsKLQkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsIGFzb2MpOwotCQlz
Y3RwX3NlbmRfY29va2llX2FjayhzdGNiKTsKLQkJaWYgKHNwZWNfZmxhZykgewotCQkJLyogb25s
eSBpZiB3ZSBoYXZlIHJldHJhbnMgc2V0IGRvIHdlIGRvIHRoaXMuIFdoYXQKLQkJCSAqIHRoaXMg
Y2FsbCBkb2VzIGlzIGdldCBvbmx5IHRoZSBDT09LSUUtQUNLIG91dAotCQkJICogYW5kIHRoZW4g
d2hlbiB3ZSByZXR1cm4gdGhlIG5vcm1hbCBjYWxsIHRvCi0JCQkgKiBzY3RwX2NodW5rX291dHB1
dCB3aWxsIGdldCB0aGUgcmV0cmFucyBvdXQKLQkJCSAqIGJlaGluZCB0aGlzLgotCQkJICovCi0J
CQlzY3RwX2NodW5rX291dHB1dChpbnAsc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT09LSUVfQUNL
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQl9Ci0JCWlmIChob3dfaW5keCA8IHNpemVvZihhc29j
LT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTE7Ci0KLQkJ
cmV0dXJuIChzdGNiKTsKLQl9Ci0JaWYgKChudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRl
X3RhZykgIT0gYXNvYy0+bXlfdnRhZyAmJgotCSAgICAgbnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0
aWF0ZV90YWcpICE9IGFzb2MtPnBlZXJfdnRhZykgJiYKLQkgICAgY29va2llLT50aWVfdGFnX215
X3Z0YWcgPT0gYXNvYy0+bXlfdnRhZ19ub25jZSAmJgotCSAgICBjb29raWUtPnRpZV90YWdfcGVl
cl92dGFnID09IGFzb2MtPnBlZXJfdnRhZ19ub25jZSAmJgotCSAgICBjb29raWUtPnRpZV90YWdf
cGVlcl92dGFnICE9IDApIHsKLQkJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJc3RydWN0
IHNvY2tldCAqc287Ci0jZW5kaWYKLQotCQlpZiAoYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpIHsK
LQkJCS8qIFRoaXMgaXMgYSBncm9zcyBncm9zcyBoYWNrLgotCQkJICogSnVzdCBjYWxsIHRoZSBj
b29raWVfbmV3IGNvZGUgc2luY2Ugd2UKLQkJCSAqIGFyZSBhbGxvd2luZyBhIGR1cGxpY2F0ZSBh
c3NvY2lhdGlvbi4KLQkJCSAqIEkgaG9wZSB0aGlzIHdvcmtzLi4uCi0JCQkgKi8KLQkJCXJldHVy
biAoc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LAot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY29va2llLCBjb29raWVfbGVu
LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAsIG5ldHAsIGluaXRfc3Jj
LG5vdGlmaWNhdGlvbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9z
a2lwcGVkLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAot
I2VuZGlmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCkp
OwotCQl9Ci0JCS8qCi0JCSAqIGNhc2UgQSBpbiBTZWN0aW9uIDUuMi40IFRhYmxlIDI6IFhYTU0g
KHBlZXIgcmVzdGFydGVkKQotCQkgKi8KLQkJLyogdGVtcCBjb2RlICovCi0JCWlmIChob3dfaW5k
eCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2lu
ZHhdID0gMTI7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgaW5wLCBz
dGNiLCBuZXQsCi0JCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzE2KTsKLQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlu
cCwgc3RjYiwgbmV0LAotCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBT
Q1RQX0xPQ18xNyk7Ci0KLQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCi0JCSpub3RpZmljYXRp
b24gPSBTQ1RQX05PVElGWV9BU1NPQ19SRVNUQVJUOwotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RB
VEVfT1BFTikgJiYKLQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSAmJgotCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBf
U1RBVEVfU0hVVERPV05fU0VOVCkpIHsKLQkJCVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIoc2N0cHNf
Y3VycmVzdGFiKTsKLQkJfQotCQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFU
RV9PUEVOKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX3Jlc3RhcnRlc3RhYik7
Ci0JCX0gZWxzZSBpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9X
Tl9TRU5UKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX2NvbGxpc2lvbmVzdGFi
KTsKLQkJfQotCQlpZiAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcp
IHsKLQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7Ci0JCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAotCQkJCQkgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0KLQkJfSBlbHNlIGlmICgh
KGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSkgewotCQkJLyogbW92ZSB0
byBPUEVOIHN0YXRlLCBpZiBub3QgaW4gU0hVVERPV05fU0VOVCAqLwotCQkJU0NUUF9TRVRfU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9PUEVOKTsKLQkJfQotCQlhc29jLT5wcmVfb3Blbl9zdHJlYW1z
ID0KLQkJCW50b2hzKGluaXRhY2tfY3AtPmluaXQubnVtX291dGJvdW5kX3N0cmVhbXMpOwotCQlh
c29jLT5pbml0X3NlcV9udW1iZXIgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYWxfdHNu
KTsKLQkJYXNvYy0+c2VuZGluZ19zZXEgPSBhc29jLT5hc2NvbmZfc2VxX291dCA9IGFzb2MtPnN0
cl9yZXNldF9zZXFfb3V0ID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOwotCQlhc29jLT5hc2NvbmZf
c2VxX291dF9hY2tlZCA9IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMTsKLQotCQlhc29jLT5hc2Nv
bmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBhc29jLT5pbml0X3NlcV9udW1iZXIg
LSAxOwotCi0JCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5pbml0X3NlcV9udW1iZXI7
Ci0KLQkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3Nl
cTsKLQkJaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXkpIHsKLQkJCW1lbXNldChhc29jLT5tYXBwaW5n
X2FycmF5LCAwLAotCQkJICAgICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSk7Ci0JCX0KLQkJ
aWYgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXkpIHsKLQkJCW1lbXNldChhc29jLT5ucl9tYXBwaW5n
X2FycmF5LCAwLAotCQkJICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSk7Ci0JCX0KLQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQotCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwot
CQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQlTQ1RQX0lOUF9JTkZPX1dMT0NL
KCk7Ci0JCVNDVFBfSU5QX1dMT0NLKHN0Y2ItPnNjdHBfZXApOwotCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOwotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJLyogc2Vu
ZCB1cCBhbGwgdGhlIGRhdGEgKi8KLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCi0JCXNj
dHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdGNiLCAwLCAxLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCWZv
ciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7Ci0jaWYgZGVmaW5lZChTQ1RQX0RF
VEFJTEVEX1NUUl9TVEFUUykKLQkJCWZvciAoaiA9IDA7IGogPCBTQ1RQX1BSX1NDVFBfTUFYICsg
MTsgaisrKSB7Ci0JCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7Ci0J
CQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKLQkJCX0KLSNlbHNl
Ci0JCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0gMDsKLQkJCWFzb2MtPnN0
cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7Ci0jZW5kaWYKLQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5zaWQgPSBpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29y
ZGVyZWQgPSAwOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9
IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0J
CX0KLQkJLyogcHJvY2VzcyB0aGUgSU5JVC1BQ0sgaW5mbyAobXkgaW5mbykgKi8KLQkJYXNvYy0+
bXlfdnRhZyA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKTsKLQkJYXNvYy0+
bXlfcnduZCA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuYV9yd25kKTsKLQotCQkvKiBwdWxsIGZy
b20gdnRhZyBoYXNoICovCi0JCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOwotCQkvKiBy
ZS1pbnNlcnQgdG8gbmV3IHZ0YWcgcG9zaXRpb24gKi8KLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5G
TyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsCi0J
CQkJCQkJCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07Ci0JCS8qCi0JCSAqIHB1
dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2YgYXNzb2MncyBmb3IgdGhlCi0J
CSAqIHN5c3RlbQotCQkgKi8KLQkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fz
b2NzKTsKLQotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9JTlBfV1VOTE9D
SyhzdGNiLT5zY3RwX2VwKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0jaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKLQkJ
YXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKLQkJLyogcHJvY2VzcyB0aGUgSU5JVCBpbmZv
IChwZWVyJ3MgaW5mbykgKi8KLQkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoaW5pdF9jcCwg
c3RjYik7Ci0JCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNv
Yy0+Y29va2llX2hvdykpCi0JCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxMzsKLQot
CQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQkvKgotCQkgKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQg
YSBIQiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCi0JCSAqIHRoaW5ncwotCQkgKi8KLQkJbmV0
LT5oYl9yZXNwb25kZWQgPSAxOwotCi0JCWlmIChzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5p
dChzdGNiLCBtLAotCQkJCQkJICBpbml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0
X2NodW5rKSwKLQkJCQkJCSAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3Rj
Yi0+YXNvYy5wb3J0KSkgewotCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9o
b3cpKQotCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTQ7Ci0KLQkJCXJldHVybiAo
TlVMTCk7Ci0JCX0KLQkJLyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwotCQlzY3RwX3N0
b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JCXNjdHBfdG9zc19vbGRfY29va2llcyhzdGNi
LCBhc29jKTsKLQkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7Ci0JCWlmIChob3dfaW5keCA8
IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhd
ID0gMTU7Ci0KLQkJcmV0dXJuIChzdGNiKTsKLQl9Ci0JaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFz
b2MtPmNvb2tpZV9ob3cpKQotCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE2OwotCS8q
IGFsbCBvdGhlciBjYXNlcy4uLiAqLwotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotLyoKLSAqIGhh
bmRsZSBhIHN0YXRlIGNvb2tpZSBmb3IgYSBuZXcgYXNzb2NpYXRpb24gbTogaW5wdXQgcGFja2V0
IG1idWYgY2hhaW4tLQotICogYXNzdW1lcyBhIHB1bGx1cCBvbiBJUC9TQ1RQL0NPT0tJRS1FQ0hP
IGNodW5rIG5vdGU6IHRoaXMgaXMgYSAic3BsaXQiIG1idWYKLSAqIGFuZCB0aGUgY29va2llIHNp
Z25hdHVyZSBkb2VzIG5vdCBleGlzdCBvZmZzZXQ6IG9mZnNldCBpbnRvIG1idWYgdG8gdGhlCi0g
KiBjb29raWUtZWNobyBjaHVuayBsZW5ndGg6IGxlbmd0aCBvZiB0aGUgY29va2llIGNodW5rIHRv
OiB3aGVyZSB0aGUgaW5pdAotICogd2FzIGZyb20gcmV0dXJucyBhIG5ldyBUQ0IKLSAqLwotc3Rh
dGljIHN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX3Byb2Nlc3NfY29va2llX25ldyhzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywg
c3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0
cF9zdGF0ZV9jb29raWUgKmNvb2tpZSwgaW50IGNvb2tpZV9sZW4sCi0gICAgc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsCi0gICAgc3RydWN0IHNvY2thZGRy
ICppbml0X3NyYywgaW50ICpub3RpZmljYXRpb24sCi0gICAgaW50IGF1dGhfc2tpcHBlZCwgdWlu
dDMyX3QgYXV0aF9vZmZzZXQsIHVpbnQzMl90IGF1dGhfbGVuLAotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0gICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCi0jZW5kaWYK
LSAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17Ci0Jc3RydWN0IHNjdHBfdGNi
ICpzdGNiOwotCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY3AsIGluaXRfYnVmOwotCXN0
cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICppbml0YWNrX2NwLCBpbml0YWNrX2J1ZjsKLQl1bmlv
biBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsK
LQlpbnQgaW5pdF9vZmZzZXQsIGluaXRhY2tfb2Zmc2V0LCBpbml0YWNrX2xpbWl0OwotCWludCBy
ZXR2YWw7Ci0JaW50IGVycm9yID0gMDsKLQl1aW50OF90IGF1dGhfY2h1bmtfYnVmW1NDVFBfUEFS
QU1fQlVGRkVSX1NJWkVdOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0Jc28gPSBTQ1RQX0lOUF9T
TyhpbnApOwotI2VuZGlmCi0KLQkvKgotCSAqIGZpbmQgYW5kIHZhbGlkYXRlIHRoZSBJTklUIGNo
dW5rIGluIHRoZSBjb29raWUgKHBlZXIncyBpbmZvKSB0aGUKLQkgKiBJTklUIHNob3VsZCBzdGFy
dCBhZnRlciB0aGUgY29va2llLWVjaG8gaGVhZGVyIHN0cnVjdCAoY2h1bmsKLQkgKiBoZWFkZXIs
IHN0YXRlIGNvb2tpZSBoZWFkZXIgc3RydWN0KQotCSAqLwotCWluaXRfb2Zmc2V0ID0gb2Zmc2V0
ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rKTsKLQlpbml0X2NwID0gKHN0
cnVjdCBzY3RwX2luaXRfY2h1bmsgKikKLQkgICAgc2N0cF9tX2dldHB0cihtLCBpbml0X29mZnNl
dCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCSAgICAodWludDhfdCAqKSAmIGlu
aXRfYnVmKTsKLQlpZiAoaW5pdF9jcCA9PSBOVUxMKSB7Ci0JCS8qIGNvdWxkIG5vdCBwdWxsIGEg
SU5JVCBjaHVuayBpbiBjb29raWUgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwKLQkJ
CSJwcm9jZXNzX2Nvb2tpZV9uZXc6IGNvdWxkIG5vdCBwdWxsIElOSVQgY2h1bmsgaGRyXG4iKTsK
LQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NU
UF9JTklUSUFUSU9OKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJIVUg/IHByb2Nl
c3NfY29va2llX25ldzogY291bGQgbm90IGZpbmQgSU5JVCBjaHVuayFcbiIpOwotCQlyZXR1cm4g
KE5VTEwpOwotCX0KLQlpbml0YWNrX29mZnNldCA9IGluaXRfb2Zmc2V0ICsgU0NUUF9TSVpFMzIo
bnRvaHMoaW5pdF9jcC0+Y2guY2h1bmtfbGVuZ3RoKSk7Ci0JLyoKLQkgKiBmaW5kIGFuZCB2YWxp
ZGF0ZSB0aGUgSU5JVC1BQ0sgY2h1bmsgaW4gdGhlIGNvb2tpZSAobXkgaW5mbykgdGhlCi0JICog
SU5JVC1BQ0sgZm9sbG93cyB0aGUgSU5JVCBjaHVuawotCSAqLwotCWluaXRhY2tfY3AgPSAoc3Ry
dWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKikKLQkgICAgc2N0cF9tX2dldHB0cihtLCBpbml0YWNr
X29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSwKLQkgICAgKHVpbnQ4
X3QgKikgJiBpbml0YWNrX2J1Zik7Ci0JaWYgKGluaXRhY2tfY3AgPT0gTlVMTCkgewotCQkvKiBj
b3VsZCBub3QgcHVsbCBJTklULUFDSyBjaHVuayBpbiBjb29raWUgKi8KLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMSwgInByb2Nlc3NfY29va2llX25ldzogY291bGQgbm90IHB1bGwgSU5JVC1B
Q0sgY2h1bmsgaGRyXG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRhY2tfY3At
PmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OX0FDSykgewotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQkvKgotCSAqIE5PVEU6IFdlIGNhbid0IHVzZSB0aGUgSU5JVF9BQ0sncyBjaGtfbGVu
Z3RoIHRvIGRldGVybWluZSB0aGUKLQkgKiAiaW5pdGFja19saW1pdCIgdmFsdWUuICBUaGlzIGlz
IGJlY2F1c2UgdGhlIGNoa19sZW5ndGggZmllbGQKLQkgKiBpbmNsdWRlcyB0aGUgbGVuZ3RoIG9m
IHRoZSBjb29raWUsIGJ1dCB0aGUgY29va2llIGlzIG9taXR0ZWQgd2hlbgotCSAqIHRoZSBJTklU
IGFuZCBJTklUX0FDSyBhcmUgdGFja2VkIG9udG8gdGhlIGNvb2tpZS4uLgotCSAqLwotCWluaXRh
Y2tfbGltaXQgPSBvZmZzZXQgKyBjb29raWVfbGVuOwotCi0JLyoKLQkgKiBub3cgdGhhdCB3ZSBr
bm93IHRoZSBJTklUL0lOSVQtQUNLIGFyZSBpbiBwbGFjZSwgY3JlYXRlIGEgbmV3IFRDQgotCSAq
IGFuZCBwb3BsdWF0ZQotCSAqLwotCi0JLyoKLQkgKiBIZXJlIHdlIGRvIGEgdHJpY2ssIHdlIHNl
dCBpbiBOVUxMIGZvciB0aGUgcHJvYy90aHJlYWQgYXJndW1lbnQuIFdlCi0JICogZG8gdGhpcyBz
aW5jZSBpbiBlZmZlY3Qgd2Ugb25seSB1c2UgdGhlIHAgYXJndW1lbnQgd2hlbgotCSAqIHRoZSBz
b2NrZXQgaXMgdW5ib3VuZCBhbmQgd2UgbXVzdCBkbyBhbiBpbXBsaWNpdCBiaW5kLgotCSAqIFNp
bmNlIHdlIGFyZSBnZXR0aW5nIGEgY29va2llLCB3ZSBjYW5ub3QgYmUgdW5ib3VuZC4KLQkgKi8K
LQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgaW5pdF9zcmMsICZlcnJvciwKLQkgICAgICAg
ICAgICAgICAgICAgICAgIG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSwgdnJm
X2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgbnRvaHMoaW5pdGFja19jcC0+aW5pdC5udW1f
b3V0Ym91bmRfc3RyZWFtcyksCi0JICAgICAgICAgICAgICAgICAgICAgICBwb3J0LAotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCSAgICAg
ICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aHJlYWQgKilOVUxMCi0jZWxpZiBkZWZpbmVkKF9f
V2luZG93c19fKQotCSAgICAgICAgICAgICAgICAgICAgICAgKFBLVEhSRUFEKU5VTEwKLSNlbHNl
Ci0JICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHByb2MgKilOVUxMCi0jZW5kaWYKLQkg
ICAgICAgICAgICAgICAgICAgICAgICk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQlzdHJ1Y3Qg
bWJ1ZiAqb3BfZXJyOwotCi0JCS8qIG1lbW9yeSBwcm9ibGVtPyAqLwotCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQxLAotCQkJInByb2Nlc3NfY29va2llX25ldzogbm8gcm9vbSBmb3IgYW5vdGhl
ciBUQ0IhXG4iKTsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX09V
VF9PRl9SRVNDLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCAoc3RydWN0IHNj
dHBfdGNiICopTlVMTCwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywg
ZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyogZ2V0IHRo
ZSBjb3JyZWN0IHNjdHBfbmV0cyAqLwotCWlmIChuZXRwKQotCQkqbmV0cCA9IHNjdHBfZmluZG5l
dChzdGNiLCBpbml0X3NyYyk7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JLyogZ2V0IHNjb3Bl
IHZhcmlhYmxlcyBvdXQgb2YgY29va2llICovCi0JYXNvYy0+c2NvcGUuaXB2NF9sb2NhbF9zY29w
ZSA9IGNvb2tpZS0+aXB2NF9zY29wZTsKLQlhc29jLT5zY29wZS5zaXRlX3Njb3BlID0gY29va2ll
LT5zaXRlX3Njb3BlOwotCWFzb2MtPnNjb3BlLmxvY2FsX3Njb3BlID0gY29va2llLT5sb2NhbF9z
Y29wZTsKLQlhc29jLT5zY29wZS5sb29wYmFja19zY29wZSA9IGNvb2tpZS0+bG9vcGJhY2tfc2Nv
cGU7Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaWYgKChhc29jLT5zY29wZS5pcHY0
X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY0X2FkZHJfbGVnYWwpIHx8Ci0JICAgIChhc29jLT5z
Y29wZS5pcHY2X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY2X2FkZHJfbGVnYWwpIHx8Ci0JICAg
IChhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwgIT0gY29va2llLT5jb25uX2FkZHJfbGVnYWwp
KSB7Ci0jZWxzZQotCWlmICgoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+
aXB2NF9hZGRyX2xlZ2FsKSB8fAotCSAgICAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsICE9
IGNvb2tpZS0+aXB2Nl9hZGRyX2xlZ2FsKSkgewotI2VuZGlmCi0JCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0KLQkJLyoKLQkJICogSG91c3RvbiB3ZSBoYXZlIGEgcHJvYmxlbS4gVGhlIEVQIGNoYW5n
ZWQgd2hpbGUgdGhlCi0JCSAqIGNvb2tpZSB3YXMgaW4gZmxpZ2h0LiBPbmx5IHJlY291cnNlIGlz
IHRvIGFib3J0IHRoZQotCQkgKiBhc3NvY2lhdGlvbi4KLQkJICovCi0JCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOwotCQlzY3RwX2Fib3J0
X2Fzc29jaWF0aW9uKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsIG0sIGlwaGxlbiwKLQkJ
CQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBf
U09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYKLQkJKHZvaWQpc2N0cF9m
cmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkgICAgICBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzE4KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKLSNlbmRpZgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKiBwcm9jZXNzIHRoZSBJTklULUFD
SyBpbmZvIChteSBpbmZvKSAqLwotCWFzb2MtPm15X3Z0YWcgPSBudG9obChpbml0YWNrX2NwLT5p
bml0LmluaXRpYXRlX3RhZyk7Ci0JYXNvYy0+bXlfcnduZCA9IG50b2hsKGluaXRhY2tfY3AtPmlu
aXQuYV9yd25kKTsKLQlhc29jLT5wcmVfb3Blbl9zdHJlYW1zID0gbnRvaHMoaW5pdGFja19jcC0+
aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyk7Ci0JYXNvYy0+aW5pdF9zZXFfbnVtYmVyID0gbnRv
aGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3Rzbik7Ci0JYXNvYy0+c2VuZGluZ19zZXEgPSBh
c29jLT5hc2NvbmZfc2VxX291dCA9IGFzb2MtPnN0cl9yZXNldF9zZXFfb3V0ID0gYXNvYy0+aW5p
dF9zZXFfbnVtYmVyOwotCWFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkID0gYXNvYy0+YXNjb25m
X3NlcV9vdXQgLSAxOwotCWFzb2MtPmFzY29uZl9zZXFfaW4gPSBhc29jLT5sYXN0X2Fja2VkX3Nl
cSA9IGFzb2MtPmluaXRfc2VxX251bWJlciAtIDE7Ci0JYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9
IGFzb2MtPmluaXRfc2VxX251bWJlcjsKLQotCWFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50
ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7Ci0KLQkvKiBwcm9jZXNzIHRoZSBJTklUIGluZm8gKHBl
ZXIncyBpbmZvKSAqLwotCWlmIChuZXRwKQotCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdChp
bml0X2NwLCBzdGNiKTsKLQllbHNlCi0JCXJldHZhbCA9IDA7Ci0JaWYgKHJldHZhbCA8IDApIHsK
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
LQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2Vu
ZGlmCi0JCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0Ms
Ci0JCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9D
XzE5KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQlyZXR1cm4gKE5V
TEwpOwotCX0KLQkvKiBsb2FkIGFsbCBhZGRyZXNzZXMgKi8KLQlpZiAoc2N0cF9sb2FkX2FkZHJl
c3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKLQkgICAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9jaHVuayksIGluaXRhY2tfb2Zmc2V0LAotCSAgICBzcmMsIGRzdCwgaW5pdF9z
cmMsIHBvcnQpKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCi0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLSNlbmRpZgotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQ
X05PUk1BTF9QUk9DLAotCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5Q
VVQgKyBTQ1RQX0xPQ18yMCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYK
LQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyoKLQkgKiB2ZXJpZnkgYW55IHByZWNlZGluZyBBVVRI
IGNodW5rIHRoYXQgd2FzIHNraXBwZWQKLQkgKi8KLQkvKiBwdWxsIHRoZSBsb2NhbCBhdXRoZW50
aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIGNvb2tpZS9pbml0LWFjayAqLwotCXNjdHBfYXV0
aF9nZXRfY29va2llX3BhcmFtcyhzdGNiLCBtLAotCSAgICBpbml0YWNrX29mZnNldCArIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCi0JICAgIGluaXRhY2tfbGltaXQgLSAoaW5p
dGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspKSk7Ci0JaWYg
KGF1dGhfc2tpcHBlZCkgewotCQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoOwotCi0JCWF1
dGggPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKQotCQkgICAgc2N0cF9tX2dldHB0cihtLCBh
dXRoX29mZnNldCwgYXV0aF9sZW4sIGF1dGhfY2h1bmtfYnVmKTsKLQkJaWYgKChhdXRoID09IE5V
TEwpIHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgYXV0aCwgbSwgYXV0aF9vZmZzZXQpKSB7Ci0J
CQkvKiBhdXRoIEhNQUMgZmFpbGVkLCBkdW1wIHRoZSBhc3NvYyBhbmQgcGFja2V0ICovCi0JCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkJIkNPT0tJRS1FQ0hPOiBBVVRIIGZhaWxlZFxu
Iik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCi0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOwotI2VuZGlmCi0JCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05P
Uk1BTF9QUk9DLAotCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVU
ICsgU0NUUF9MT0NfMjEpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgot
CQkJcmV0dXJuIChOVUxMKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHJlbWFpbmluZyBjaHVua3MgY2hl
Y2tlZC4uLiBnb29kIHRvIGdvICovCi0JCQlzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQgPSAxOwot
CQl9Ci0JfQotCi0JLyoKLQkgKiBpZiB3ZSdyZSBkb2luZyBBU0NPTkZzLCBjaGVjayB0byBzZWUg
aWYgd2UgaGF2ZSBhbnkgbmV3IGxvY2FsCi0JICogYWRkcmVzc2VzIHRoYXQgbmVlZCB0byBnZXQg
YWRkZWQgdG8gdGhlIHBlZXIgKGVnLiBhZGRyZXNzZXMKLQkgKiBjaGFuZ2VkIHdoaWxlIGNvb2tp
ZSBlY2hvIGluIGZsaWdodCkuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUKLQkgKiBhZnRlciB3ZSBn
byB0byB0aGUgT1BFTiBzdGF0ZSB0byBkbyB0aGUgY29ycmVjdCBhc2NvbmYKLQkgKiBwcm9jZXNz
aW5nLiBlbHNlLCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBhZGRyZXNzZXMgaW4gb3Vy
Ci0JICogbGlzdHMKLQkgKi8KLQotCS8qIHdhcm5pbmcsIHdlIHJlLXVzZSBzaW4sIHNpbjYsIHNh
X3N0b3JlIGhlcmUhICovCi0JLyogcHVsbCBpbiBsb2NhbF9hZGRyZXNzIChvdXIgImZyb20iIGFk
ZHJlc3MpICovCi0Jc3dpdGNoIChjb29raWUtPmxhZGRyX3R5cGUpIHsKLSNpZmRlZiBJTkVUCi0J
Y2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJLyogc291cmNlIGFkZHIgaXMgSVB2NCAqLwotCQlt
ZW1zZXQoJnN0b3JlLnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQlzdG9y
ZS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JCXN0b3Jl
LnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJc3Rv
cmUuc2luLnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+bGFkZHJlc3NbMF07Ci0JCWJyZWFrOwot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgotCQkvKiBzb3Vy
Y2UgYWRkciBpcyBJUHY2ICovCi0JCW1lbXNldCgmc3RvcmUuc2luNiwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKLQkJc3RvcmUuc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owot
I2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc3RvcmUuc2luNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQlzdG9yZS5zaW42LnNpbjZfc2NvcGVfaWQgPSBj
b29raWUtPnNjb3BlX2lkOwotCQltZW1jcHkoJnN0b3JlLnNpbjYuc2luNl9hZGRyLCBjb29raWUt
PmxhZGRyZXNzLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgU0NUUF9DT05OX0FERFJFU1M6Ci0JCS8q
IHNvdXJjZSBhZGRyIGlzIGNvbm4gKi8KLQkJbWVtc2V0KCZzdG9yZS5zY29ubiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0JCXN0b3JlLnNjb25uLnNjb25uX2ZhbWlseSA9IEFG
X0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJc3RvcmUuc2Nvbm4uc2Nvbm5fbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCQltZW1jcHkoJnN0b3JlLnNj
b25uLnNjb25uX2FkZHIsIGNvb2tpZS0+bGFkZHJlc3MsIHNpemVvZih2b2lkICopKTsKLQkJYnJl
YWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBfU09DS0VUX0xPQ0soc28s
IDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNi
LT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYKLQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwg
c3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjIpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEp
OwotI2VuZGlmCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JLyogdXBkYXRlIGN1cnJlbnQgc3Rh
dGUgKi8KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAibW92aW5nIHRvIE9QRU4gc3RhdGVc
biIpOwotCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7Ci0JaWYgKGFzb2Mt
PnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7Ci0JCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCi0JCQkJIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOwotCX0KLQlzY3RwX3N0b3BfYWxsX2Nvb2tp
ZV90aW1lcnMoc3RjYik7Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3Bhc3NpdmVl
c3RhYik7Ci0JU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCi0JLyog
c2V0IHVwIHRvIG5vdGlmeSB1cHBlciBsYXllciAqLwotCSpub3RpZmljYXRpb24gPSBTQ1RQX05P
VElGWV9BU1NPQ19VUDsKLQlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKLQkgICAgKCFTQ1RQX0lTX0xJU1RFTklORyhp
bnApKSkgewotCQkvKgotCQkgKiBUaGlzIGlzIGFuIGVuZHBvaW50IHRoYXQgY2FsbGVkIGNvbm5l
Y3QoKSBob3cgaXQgZ290IGEKLQkJICogY29va2llIHRoYXQgaXMgTkVXIGlzIGEgYml0IG9mIGEg
bXlzdGVyeS4gSXQgbXVzdCBiZSB0aGF0Ci0JCSAqIHRoZSBJTklUIHdhcyBzZW50LCBidXQgYmVm
b3JlIGl0IGdvdCB0aGVyZS4uIGEgY29tcGxldGUKLQkJICogSU5JVC9JTklULUFDSy9DT09LSUUg
YXJyaXZlZC4gQnV0IG9mIGNvdXJzZSB0aGVuIGl0Ci0JCSAqIHNob3VsZCBoYXZlIHdlbnQgdG8g
dGhlIG90aGVyIGNvZGUuLiBub3QgaGVyZS4uIG9oIHdlbGwuLgotCQkgKiBhIGJpdCBvZiBwcm90
ZWN0aW9uIGlzIHdvcnRoIGhhdmluZy4uCi0JCSAqLwotCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
LQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLSNlbmRpZgotCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNj
dHBfc29ja2V0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCX0gZWxz
ZSBpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSAmJgotCSAgICAgICAgICAgKFNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSB7Ci0JCS8qCi0JCSAq
IFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGlzIG9uZS4gU2luY2UgaXQgaXMK
LQkJICogdGhlIGxpc3RlbmluZyBndXkuIFRoZSB0aW1lciB3aWxsIGdldCBzdGFydGVkIGZvcgot
CQkgKiBhY2NlcHRlZCBjb25uZWN0aW9ucyBpbiB0aGUgY2FsbGVyLgotCQkgKi8KLQkJOwotCX0K
LQkvKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91Ymxl
IHRoaW5ncyAqLwotCWlmICgobmV0cCkgJiYgKCpuZXRwKSkKLQkJKCpuZXRwKS0+aGJfcmVzcG9u
ZGVkID0gMTsKLQotCWlmIChzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCi0JICAg
IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSkpIHsKLQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAsIHN0Y2IsIE5V
TEwpOwotCX0KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2Vu
dGVyZWQpOwotCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKLQkJLyog
Y2FsY3VsYXRlIHRoZSBSVFQgYW5kIHNldCB0aGUgZW5jYXBzIHBvcnQgKi8KLQkJc3RydWN0IHRp
bWV2YWwgdGltZV9lbnRlcmVkOwotCQkoKm5ldHApLT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9ydG8o
c3RjYiwgYXNvYywgKm5ldHAsCi0JCQkJCQkgICZ0aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fdW5z
YWZlX21ha2Vjb3B5LAotCQkJCQkJICBTQ1RQX1JUVF9GUk9NX05PTl9EQVRBKTsKLQkJY29va2ll
LT50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0JfQotCS8qIHJlc3BvbmQgd2l0aCBhIENP
T0tJRS1BQ0sgKi8KLQlzY3RwX3NlbmRfY29va2llX2FjayhzdGNiKTsKLQotCS8qCi0JICogY2hl
Y2sgdGhlIGFkZHJlc3MgbGlzdHMgZm9yIGFueSBBU0NPTkZzIHRoYXQgbmVlZCB0byBiZSBzZW50
Ci0JICogQUZURVIgdGhlIGNvb2tpZS1hY2sgaXMgc2VudAotCSAqLwotCXNjdHBfY2hlY2tfYWRk
cmVzc19saXN0KHN0Y2IsIG0sCi0JICAgIGluaXRhY2tfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2luaXRfYWNrX2NodW5rKSwKLQkgICAgaW5pdGFja19saW1pdCAtIChpbml0YWNrX29mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuaykpLAotCSAgICAmc3RvcmUuc2Es
IGNvb2tpZS0+bG9jYWxfc2NvcGUsIGNvb2tpZS0+c2l0ZV9zY29wZSwKLQkgICAgY29va2llLT5p
cHY0X3Njb3BlLCBjb29raWUtPmxvb3BiYWNrX3Njb3BlKTsKLQotCi0JcmV0dXJuIChzdGNiKTsK
LX0KLQotLyoKLSAqIENPREUgTElLRSBUSElTIE5FRURTIFRPIFJVTiBJRiB0aGUgcGVlciBzdXBw
b3J0cyB0aGUgTkFUIGV4dGVuc2lvbiwgaS5lCi0gKiB3ZSBORUVEIHRvIG1ha2Ugc3VyZSB3ZSBh
cmUgbm90IGFscmVhZHkgdXNpbmcgdGhlIHZ0YWcuIElmIHNvIHdlCi0gKiBuZWVkIHRvIHNlbmQg
YmFjayBhbiBBQk9SVC1UUlktQUdBSU4tV0lUSC1ORVctVEFHIE5vIG1pZGRsZSBib3ggYml0IQot
CWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0Mo
dGFnLAotCQkJCQkJCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07Ci0JTElTVF9G
T1JFQUNIKHN0Y2IsIGhlYWQsIHNjdHBfYXNvY3MpIHsKLQkgICAgICAgIGlmICgoc3RjYi0+YXNv
Yy5teV92dGFnID09IHRhZykgJiYgKHN0Y2ItPnJwb3J0ID09IHJwb3J0KSAmJiAoaW5wID09IHN0
Y2ItPnNjdHBfZXApKSAgewotCQkgICAgICAgLS0gU0VORCBBQk9SVCAtIFRSWSBBR0FJTiAtLQot
CQl9Ci0JfQotKi8KLQotLyoKLSAqIGhhbmRsZXMgYSBDT09LSUUtRUNITyBtZXNzYWdlIHN0Y2I6
IG1vZGlmaWVkIHRvIGVpdGhlciBhIG5ldyBvciBsZWZ0IGFzCi0gKiBleGlzdGluZyAobm9uLU5V
TEwpIFRDQgotICovCi1zdGF0aWMgc3RydWN0IG1idWYgKgotc2N0cF9oYW5kbGVfY29va2llX2Vj
aG8oc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gICAgc3RydWN0IHNv
Y2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgIHN0cnVjdCBzY3RwaGRyICpz
aCwgc3RydWN0IHNjdHBfY29va2llX2VjaG9fY2h1bmsgKmNwLAotICAgIHN0cnVjdCBzY3RwX2lu
cGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX3RjYiAqKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKipu
ZXRwLAotICAgIGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1dGhfb2Zmc2V0LCB1aW50MzJf
dCBhdXRoX2xlbiwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKipsb2NrZWRfdGNiLAotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0gICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQs
Ci0jZW5kaWYKLSAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17Ci0Jc3RydWN0
IHNjdHBfc3RhdGVfY29va2llICpjb29raWU7Ci0Jc3RydWN0IHNjdHBfdGNiICpsX3N0Y2IgPSAq
c3RjYjsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbF9pbnA7Ci0Jc3RydWN0IHNvY2thZGRyICp0bzsK
LQlzdHJ1Y3Qgc2N0cF9wY2IgKmVwOwotCXN0cnVjdCBtYnVmICptX3NpZzsKLQl1aW50OF90IGNh
bGNfc2lnW1NDVFBfU0lHTkFUVVJFX1NJWkVdLCB0bXBfc2lnW1NDVFBfU0lHTkFUVVJFX1NJWkVd
OwotCXVpbnQ4X3QgKnNpZzsKLQl1aW50OF90IGNvb2tpZV9vayA9IDA7Ci0JdW5zaWduZWQgaW50
IHNpZ19vZmZzZXQsIGNvb2tpZV9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50IGNvb2tpZV9sZW47Ci0J
c3RydWN0IHRpbWV2YWwgbm93OwotCXN0cnVjdCB0aW1ldmFsIHRpbWVfZXhwaXJlczsKLQlpbnQg
bm90aWZpY2F0aW9uID0gMDsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRsOwotCWludCBoYWRfYV9l
eGlzdGluZ190Y2IgPSAwOwotCWludCBzZW5kX2ludF9jb25mID0gMDsKLSNpZmRlZiBJTkVUCi0J
c3RydWN0IHNvY2thZGRyX2luIHNpbjsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNv
Y2thZGRyX2luNiBzaW42OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCXN0
cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotI2VuZGlmCi0KLQlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQyLAotCQkic2N0cF9oYW5kbGVfY29va2llOiBoYW5kbGluZyBDT09LSUUtRUNIT1xuIik7
Ci0KLQlpZiAoaW5wX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQljb29raWUg
PSAmY3AtPmNvb2tpZTsKLQljb29raWVfb2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NodW5raGRyKTsKLQljb29raWVfbGVuID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7
Ci0KLQlpZiAoY29va2llX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVu
aykgKwotCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykgKwotCSAgICBzaXplb2Yo
c3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspICsgU0NUUF9TSUdOQVRVUkVfU0laRSkgewotCQkv
KiBjb29raWUgdG9vIHNtYWxsICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmICgoY29va2ll
LT5wZWVycG9ydCAhPSBzaC0+c3JjX3BvcnQpIHx8Ci0JICAgIChjb29raWUtPm15cG9ydCAhPSBz
aC0+ZGVzdF9wb3J0KSB8fAotCSAgICAoY29va2llLT5teV92dGFnICE9IHNoLT52X3RhZykpIHsK
LQkJLyoKLQkJICogaW52YWxpZCBwb3J0cyBvciBiYWQgdGFnLiAgTm90ZSB0aGF0IHdlIGFsd2F5
cyBsZWF2ZSB0aGUKLQkJICogdl90YWcgaW4gdGhlIGhlYWRlciBpbiBuZXR3b3JrIG9yZGVyIGFu
ZCB3aGVuIHdlIHN0b3JlZAotCQkgKiBpdCBpbiB0aGUgbXlfdnRhZyBzbG90IHdlIGFsc28gbGVm
dCBpdCBpbiBuZXR3b3JrIG9yZGVyLgotCQkgKiBUaGlzIG1haW50YWlucyB0aGUgbWF0Y2ggZXZl
biB0aG91Z2ggaXQgbWF5IGJlIGluIHRoZQotCQkgKiBvcHBvc2l0ZSBieXRlIG9yZGVyIG9mIHRo
ZSBtYWNoaW5lIDotPgotCQkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyoKLQkgKiBzcGxp
dCBvZmYgdGhlIHNpZ25hdHVyZSBpbnRvIGl0cyBvd24gbWJ1ZiAoc2luY2UgaXQgc2hvdWxkIG5v
dCBiZQotCSAqIGNhbGN1bGF0ZWQgaW4gdGhlIHNjdHBfaG1hY19tKCkgY2FsbCkuCi0JICovCi0J
c2lnX29mZnNldCA9IG9mZnNldCArIGNvb2tpZV9sZW4gLSBTQ1RQX1NJR05BVFVSRV9TSVpFOwot
CW1fc2lnID0gbV9zcGxpdChtLCBzaWdfb2Zmc2V0LCBNX05PV0FJVCk7Ci0JaWYgKG1fc2lnID09
IE5VTEwpIHsKLQkJLyogb3V0IG9mIG1lbW9yeSBvciA/PyAqLwotCQlyZXR1cm4gKE5VTEwpOwot
CX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2df
bWJjKG1fc2lnLCBTQ1RQX01CVUZfU1BMSVQpOwotCX0KLSNlbmRpZgotCi0JLyoKLQkgKiBjb21w
dXRlIHRoZSBzaWduYXR1cmUvZGlnZXN0IGZvciB0aGUgY29va2llCi0JICovCi0JZXAgPSAmKCpp
bnBfcCktPnNjdHBfZXA7Ci0JbF9pbnAgPSAqaW5wX3A7Ci0JaWYgKGxfc3RjYikgewotCQlTQ1RQ
X1RDQl9VTkxPQ0sobF9zdGNiKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0sobF9pbnApOwotCWlmIChs
X3N0Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DSyhsX3N0Y2IpOwotCX0KLQkvKiB3aGljaCBjb29raWUg
aXMgaXQ/ICovCi0JaWYgKChjb29raWUtPnRpbWVfZW50ZXJlZC50dl9zZWMgPCAobG9uZyllcC0+
dGltZV9vZl9zZWNyZXRfY2hhbmdlKSAmJgotCSAgICAoZXAtPmN1cnJlbnRfc2VjcmV0X251bWJl
ciAhPSBlcC0+bGFzdF9zZWNyZXRfbnVtYmVyKSkgewotCQkvKiBpdCdzIHRoZSBvbGQgY29va2ll
ICovCi0JCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1BQywKLQkJICAgICh1aW50OF90ICopZXAt
PnNlY3JldF9rZXlbKGludCllcC0+bGFzdF9zZWNyZXRfbnVtYmVyXSwKLQkJICAgIFNDVFBfU0VD
UkVUX1NJWkUsIG0sIGNvb2tpZV9vZmZzZXQsIGNhbGNfc2lnLCAwKTsKLQl9IGVsc2UgewotCQkv
KiBpdCdzIHRoZSBjdXJyZW50IGNvb2tpZSAqLwotCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hN
QUMsCi0JCSAgICAodWludDhfdCAqKWVwLT5zZWNyZXRfa2V5WyhpbnQpZXAtPmN1cnJlbnRfc2Vj
cmV0X251bWJlcl0sCi0JCSAgICBTQ1RQX1NFQ1JFVF9TSVpFLCBtLCBjb29raWVfb2Zmc2V0LCBj
YWxjX3NpZywgMCk7Ci0JfQotCS8qIGdldCB0aGUgc2lnbmF0dXJlICovCi0JU0NUUF9JTlBfUlVO
TE9DSyhsX2lucCk7Ci0Jc2lnID0gKHVpbnQ4X3QgKikgc2N0cF9tX2dldHB0cihtX3NpZywgMCwg
U0NUUF9TSUdOQVRVUkVfU0laRSwgKHVpbnQ4X3QgKikgJiB0bXBfc2lnKTsKLQlpZiAoc2lnID09
IE5VTEwpIHsKLQkJLyogY291bGRuJ3QgZmluZCBzaWduYXR1cmUgKi8KLQkJc2N0cF9tX2ZyZWVt
KG1fc2lnKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyogY29tcGFyZSB0aGUgcmVjZWl2ZWQg
ZGlnZXN0IHdpdGggdGhlIGNvbXB1dGVkIGRpZ2VzdCAqLwotCWlmIChtZW1jbXAoY2FsY19zaWcs
IHNpZywgU0NUUF9TSUdOQVRVUkVfU0laRSkgIT0gMCkgewotCQkvKiB0cnkgdGhlIG9sZCBjb29r
aWU/ICovCi0JCWlmICgoY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjID09IChsb25nKWVwLT50
aW1lX29mX3NlY3JldF9jaGFuZ2UpICYmCi0JCSAgICAoZXAtPmN1cnJlbnRfc2VjcmV0X251bWJl
ciAhPSBlcC0+bGFzdF9zZWNyZXRfbnVtYmVyKSkgewotCQkJLyogY29tcHV0ZSBkaWdlc3Qgd2l0
aCBvbGQgKi8KLQkJCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1BQywKLQkJCSAgICAodWludDhf
dCAqKWVwLT5zZWNyZXRfa2V5WyhpbnQpZXAtPmxhc3Rfc2VjcmV0X251bWJlcl0sCi0JCQkgICAg
U0NUUF9TRUNSRVRfU0laRSwgbSwgY29va2llX29mZnNldCwgY2FsY19zaWcsIDApOwotCQkJLyog
Y29tcGFyZSAqLwotCQkJaWYgKG1lbWNtcChjYWxjX3NpZywgc2lnLCBTQ1RQX1NJR05BVFVSRV9T
SVpFKSA9PSAwKQotCQkJCWNvb2tpZV9vayA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQljb29raWVf
b2sgPSAxOwotCX0KLQotCS8qCi0JICogTm93IGJlZm9yZSB3ZSBjb250aW51ZSB3ZSBtdXN0IHJl
Y29uc3RydWN0IG91ciBtYnVmIHNvIHRoYXQKLQkgKiBub3JtYWwgcHJvY2Vzc2luZyBvZiBhbnkg
b3RoZXIgY2h1bmtzIHdpbGwgd29yay4KLQkgKi8KLQl7Ci0JCXN0cnVjdCBtYnVmICptX2F0Owot
Ci0JCW1fYXQgPSBtOwotCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChtX2F0KSAhPSBOVUxMKSB7Ci0J
CQltX2F0ID0gU0NUUF9CVUZfTkVYVChtX2F0KTsKLQkJfQotCQlTQ1RQX0JVRl9ORVhUKG1fYXQp
ID0gbV9zaWc7Ci0JfQotCi0JaWYgKGNvb2tpZV9vayA9PSAwKSB7Ci0JCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDIsICJoYW5kbGVfY29va2llX2VjaG86IGNvb2tpZSBzaWduYXR1cmUgdmFsaWRh
dGlvbiBmYWlsZWQhXG4iKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJCSJvZmZz
ZXQgPSAldSwgY29va2llX29mZnNldCA9ICV1LCBzaWdfb2Zmc2V0ID0gJXVcbiIsCi0JCQkodWlu
dDMyX3QpIG9mZnNldCwgY29va2llX29mZnNldCwgc2lnX29mZnNldCk7Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCi0JLyoKLQkgKiBjaGVjayB0aGUgY29va2llIHRpbWVzdGFtcHMgdG8gYmUgc3Vy
ZSBpdCdzIG5vdCBzdGFsZQotCSAqLwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cp
OwotCS8qIEV4cGlyZSB0aW1lIGlzIGluIFRpY2tzLCBzbyB3ZSBjb252ZXJ0IHRvIHNlY29uZHMg
Ki8KLQl0aW1lX2V4cGlyZXMudHZfc2VjID0gY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjICsg
VElDS1NfVE9fU0VDKGNvb2tpZS0+Y29va2llX2xpZmUpOwotCXRpbWVfZXhwaXJlcy50dl91c2Vj
ID0gY29va2llLT50aW1lX2VudGVyZWQudHZfdXNlYzsKLSAgICAgICAgLyogVE9ETyBzY3RwX2Nv
bnN0YW50cy5oIG5lZWRzIGFsdGVybmF0aXZlIHRpbWUgbWFjcm9zIHdoZW4KLSAgICAgICAgICog
IF9LRVJORUwgaXMgdW5kZWZpbmVkLgotICAgICAgICAgKi8KLSNpZm5kZWYgX19GcmVlQlNEX18K
LQlpZiAodGltZXJjbXAoJm5vdywgJnRpbWVfZXhwaXJlcywgPikpCi0jZWxzZQotCWlmICh0aW1l
dmFsY21wKCZub3csICZ0aW1lX2V4cGlyZXMsID4pKQotI2VuZGlmCi0JewotCQkvKiBjb29raWUg
aXMgc3RhbGUhICovCi0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCXN0cnVjdCBzY3RwX2Vycm9y
X3N0YWxlX2Nvb2tpZSAqY2F1c2U7Ci0JCXVpbnQzMl90IHRpbTsKLQkJb3BfZXJyID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpLAot
CQkJCQkgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAob3BfZXJyID09IE5V
TEwpIHsKLQkJCS8qIEZPT0JBUiAqLwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQkvKiBTZXQg
dGhlIGxlbiAqLwotCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9l
cnJvcl9zdGFsZV9jb29raWUpOwotCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9l
cnJvcl9zdGFsZV9jb29raWUgKik7Ci0JCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9D
QVVTRV9TVEFMRV9DT09LSUUpOwotCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKwotCQkgICAgKHNpemVvZih1aW50MzJfdCkpKSk7Ci0J
CS8qIHNlY29uZHMgdG8gdXNlYyAqLwotCQl0aW0gPSAobm93LnR2X3NlYyAtIHRpbWVfZXhwaXJl
cy50dl9zZWMpICogMTAwMDAwMDsKLQkJLyogYWRkIGluIHVzZWMgKi8KLQkJaWYgKHRpbSA9PSAw
KQotCQkJdGltID0gbm93LnR2X3VzZWMgLSBjb29raWUtPnRpbWVfZW50ZXJlZC50dl91c2VjOwot
CQljYXVzZS0+c3RhbGVfdGltZSA9IGh0b25sKHRpbSk7Ci0JCXNjdHBfc2VuZF9vcGVycl90byhz
cmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3BfZXJyLAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGxfaW5w
LT5maWJudW0sCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0J
CXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogTm93IHdlIG11c3Qgc2VlIHdpdGggdGhlIGxv
b2t1cCBhZGRyZXNzIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcKLQkgKiBhc29jLiBUaGlzIHdpbGwg
b25seSBoYXBwZW4gaWYgd2Ugd2VyZSBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUKLQkgKiBhbmQg
YSBJTklUIGNvbGxpZGVkIHdpdGggdXMgYW5kIHNvbWV3aGVyZSB0aGUgcGVlciBzZW50IHRoZQot
CSAqIGNvb2tpZSBvbiBhbm90aGVyIGFkZHJlc3MgYmVzaWRlcyB0aGUgc2luZ2xlIGFkZHJlc3Mg
b3VyIGFzc29jCi0JICogaGFkIGZvciBoaW0uIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGhhdmUgb25l
IG9mIHRoZSB0aWUtdGFncyBzZXQgYXQKLQkgKiBsZWFzdCBBTkQgdGhlIGFkZHJlc3MgZmllbGQg
aW4gdGhlIGNvb2tpZSBjYW4gYmUgdXNlZCB0byBsb29rIGl0Ci0JICogdXAuCi0JICovCi0JdG8g
PSBOVUxMOwotCXN3aXRjaCAoY29va2llLT5hZGRyX3R5cGUpIHsKLSNpZmRlZiBJTkVUNgotCWNh
c2UgU0NUUF9JUFY2X0FERFJFU1M6Ci0JCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsK
LQkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJ
c2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKLSNlbmRpZgotCQlzaW42LnNpbjZfcG9ydCA9
IHNoLT5zcmNfcG9ydDsKLQkJc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5zY29wZV9pZDsK
LQkJbWVtY3B5KCZzaW42LnNpbjZfYWRkci5zNl9hZGRyLCBjb29raWUtPmFkZHJlc3MsCi0JCSAg
ICBzaXplb2Yoc2luNi5zaW42X2FkZHIuczZfYWRkcikpOwotCQl0byA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luNjsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQX0lQ
VjRfQUREUkVTUzoKLQkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKLQkJc2luLnNpbl9m
YW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzaW4uc2luX2xlbiA9IHNp
emVvZihzaW4pOwotI2VuZGlmCi0JCXNpbi5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQkJc2lu
LnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+YWRkcmVzc1swXTsKLQkJdG8gPSAoc3RydWN0IHNv
Y2thZGRyICopJnNpbjsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JY2FzZSBTQ1RQX0NPTk5fQUREUkVTUzoKLQkJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0JCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47
Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCQlzY29ubi5zY29ubl9wb3J0ID0gc2gtPnNyY19w
b3J0OwotCQltZW1jcHkoJnNjb25uLnNjb25uX2FkZHIsIGNvb2tpZS0+YWRkcmVzcywgc2l6ZW9m
KHZvaWQgKikpOwotCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm47Ci0JCWJyZWFrOwot
I2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLwotCQlyZXR1
cm4gKE5VTEwpOwotCX0KLQlpZiAoKnN0Y2IgPT0gTlVMTCkgewotCQkvKiBZZXAsIGxldHMgY2hl
Y2sgKi8KLQkJKnN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLCB0bywg
bmV0cCwgZHN0LCBOVUxMKTsKLQkJaWYgKCpzdGNiID09IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBX
ZSBzaG91bGQgaGF2ZSBvbmx5IGdvdCBiYWNrIHRoZSBzYW1lIGlucC4gSWYgd2UKLQkJCSAqIGdv
dCBiYWNrIGEgZGlmZmVyZW50IGVwIHdlIGhhdmUgYSBwcm9ibGVtLiBUaGUKLQkJCSAqIG9yaWdp
bmFsIGZpbmRlcCBnb3QgYmFjayBsX2lucCBhbmQgbm93Ci0JCQkgKi8KLQkJCWlmIChsX2lucCAh
PSAqaW5wX3ApIHsKLQkJCQlTQ1RQX1BSSU5URigiQmFkIHByb2JsZW0gZmluZF9lcCBnb3QgYSBk
aWZmIGlucCB0aGVuIHNwZWNpYWxfbG9jYXRlP1xuIik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoKmxvY2tlZF90Y2IgPT0gTlVMTCkgewotCQkJCS8qIEluIHRoaXMgY2FzZSB3ZSBmb3VuZCB0
aGUgYXNzb2Mgb25seQotCQkJCSAqIGFmdGVyIHdlIGxvY2tlZCB0aGUgY3JlYXRlIGxvY2suIFRo
aXMgbWVhbnMKLQkJCQkgKiB3ZSBhcmUgaW4gYSBjb2xsaWRpbmcgY2FzZSBhbmQgd2UgbXVzdCBt
YWtlCi0JCQkJICogc3VyZSB0aGF0IHdlIHVubG9jayB0aGUgdGNiIGlmIGl0cyBvbmUgb2YgdGhl
Ci0JCQkJICogY2FzZXMgd2hlcmUgd2UgdGhyb3cgYXdheSB0aGUgaW5jb21pbmcgcGFja2V0cy4K
LQkJCQkgKi8KLQkJCQkqbG9ja2VkX3RjYiA9ICpzdGNiOwotCi0JCQkJLyogV2UgbXVzdCBhbHNv
IGluY3JlbWVudCB0aGUgaW5wIHJlZiBjb3VudAotCQkJCSAqIHNpbmNlIHRoZSByZWZfY291bnQg
ZmxhZ3Mgd2FzIHNldCB3aGVuIHdlCi0JCQkJICogZGlkIG5vdCBmaW5kIHRoZSBUQ0IsIG5vdyB3
ZSBmb3VuZCBpdCB3aGljaAotCQkJCSAqIHJlZHVjZXMgdGhlIHJlZmNvdW50Li4gd2UgbXVzdCBy
YWlzZSBpdCBiYWNrCi0JCQkJICogb3V0IHRvIGJhbGFuY2UgaXQgYWxsIDotKQotCQkJCSAqLwot
CQkJCVNDVFBfSU5QX0lOQ1JfUkVGKCgqc3RjYiktPnNjdHBfZXApOwotCQkJCWlmICgoKnN0Y2Ip
LT5zY3RwX2VwICE9IGxfaW5wKSB7Ci0JCQkJCVNDVFBfUFJJTlRGKCJIdWg/IGVwOiVwIGRpZmYg
dGhlbiBsX2lucDolcD9cbiIsCi0JCQkJCQkgICAgKHZvaWQgKikoKnN0Y2IpLT5zY3RwX2VwLCAo
dm9pZCAqKWxfaW5wKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQljb29raWVfbGVuIC09IFND
VFBfU0lHTkFUVVJFX1NJWkU7Ci0JaWYgKCpzdGNiID09IE5VTEwpIHsKLQkJLyogdGhpcyBpcyB0
aGUgIm5vcm1hbCIgY2FzZS4uLiBnZXQgYSBuZXcgVENCICovCi0JCSpzdGNiID0gc2N0cF9wcm9j
ZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LCBzaCwKLQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsIGNvb2tpZV9sZW4sICppbnBfcCwKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCB0bywgJm5vdGlmaWNhdGlvbiwK
LQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBwZWQsIGF1dGhfb2Zm
c2V0LCBhdXRoX2xlbiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JfSBlbHNlIHsKLQkJLyog
dGhpcyBpcyBhYm5vcm1hbC4uLiBjb29raWUtZWNobyBvbiBleGlzdGluZyBUQ0IgKi8KLQkJaGFk
X2FfZXhpc3RpbmdfdGNiID0gMTsKLQkJKnN0Y2IgPSBzY3RwX3Byb2Nlc3NfY29va2llX2V4aXN0
aW5nKG0sIGlwaGxlbiwgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3JjLCBkc3QsIHNoLAotCQkJCQkJICAgICBjb29raWUsIGNvb2tpZV9sZW4sICppbnBf
cCwgKnN0Y2IsIG5ldHAsIHRvLAotCQkJCQkJICAgICAmbm90aWZpY2F0aW9uLCBhdXRoX3NraXBw
ZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAot
I2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBv
cnQpOwotCX0KLQotCWlmICgqc3RjYiA9PSBOVUxMKSB7Ci0JCS8qIHN0aWxsIG5vIFRDQi4uLiBt
dXN0IGJlIGJhZCBjb29raWUtZWNobyAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCWlmICgqbmV0cCAhPSBOVUxMKSB7Ci0JCSgqbmV0cCktPmZsb3d0
eXBlID0gbWZsb3d0eXBlOwotCQkoKm5ldHApLT5mbG93aWQgPSBtZmxvd2lkOwotCX0KLSNlbmRp
ZgotCS8qCi0JICogT2ssIHdlIGJ1aWx0IGFuIGFzc29jaWF0aW9uIHNvIGNvbmZpcm0gdGhlIGFk
ZHJlc3Mgd2Ugc2VudCB0aGUKLQkgKiBJTklULUFDSyB0by4KLQkgKi8KLQluZXRsID0gc2N0cF9m
aW5kbmV0KCpzdGNiLCB0byk7Ci0JLyoKLQkgKiBUaGlzIGNvZGUgc2hvdWxkIGluIHRoZW9yeSBO
T1QgcnVuIGJ1dAotCSAqLwotCWlmIChuZXRsID09IE5VTEwpIHsKLQkJLyogVFNOSCEgSHVoLCB3
aHkgZG8gSSBuZWVkIHRvIGFkZCB0aGlzIGFkZHJlc3MgaGVyZT8gKi8KLQkJaWYgKHNjdHBfYWRk
X3JlbW90ZV9hZGRyKCpzdGNiLCB0bywgTlVMTCwgcG9ydCwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfSU5fQ09PS0lFX1BST0MpKSB7Ci0JCQly
ZXR1cm4gKE5VTEwpOwotCQl9Ci0JCW5ldGwgPSBzY3RwX2ZpbmRuZXQoKnN0Y2IsIHRvKTsKLQl9
Ci0JaWYgKG5ldGwpIHsKLQkJaWYgKG5ldGwtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQpIHsKLQkJCW5ldGwtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsK
LQkJCSh2b2lkKXNjdHBfc2V0X3ByaW1hcnlfYWRkcigoKnN0Y2IpLCAoc3RydWN0IHNvY2thZGRy
ICopTlVMTCwKLQkJCSAgICBuZXRsKTsKLQkJCXNlbmRfaW50X2NvbmYgPSAxOwotCQl9Ci0JfQot
CXNjdHBfc3RhcnRfbmV0X3RpbWVycygqc3RjYik7Ci0JaWYgKCgqaW5wX3ApLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgewotCQlpZiAoIWhhZF9hX2V4aXN0aW5nX3RjYiB8
fAotCQkgICAgKCgoKmlucF9wKS0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBoYXZlIGEgTkVXIGNvb2tpZSBvciB0aGUg
Y29ubmVjdCBuZXZlcgotCQkJICogcmVhY2hlZCB0aGUgY29ubmVjdGVkIHN0YXRlIGR1cmluZyBj
b2xsaXNpb24gd2UKLQkJCSAqIG11c3QgZG8gdGhlIFRDUCBhY2NlcHQgdGhpbmcuCi0JCQkgKi8K
LQkJCXN0cnVjdCBzb2NrZXQgKnNvLCAqb3NvOwotCQkJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
LQotCQkJaWYgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9BU1NPQ19SRVNUQVJUKSB7Ci0J
CQkJLyoKLQkJCQkgKiBGb3IgYSByZXN0YXJ0IHdlIHdpbGwga2VlcCB0aGUgc2FtZQotCQkJCSAq
IHNvY2tldCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZy4gSSBUSElOSyEhCi0JCQkJICovCi0JCQkJ
c2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJaWYgKHNlbmRfaW50X2NvbmYpIHsKLQkJCQkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCi0JCQkJCSAgICAgICAgICAgICAgICAo
KnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJfQotCQkJ
CXJldHVybiAobSk7Ci0JCQl9Ci0JCQlvc28gPSAoKmlucF9wKS0+c2N0cF9zb2NrZXQ7Ci0jaWYg
KGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKQotCQkJ
LyoKLQkJCSAqIFdlIGRvIHRoaXMgdG8ga2VlcCB0aGUgc29ja2V0cyBzaWRlIGhhcHB5IGR1cmlu
ZwotCQkJICogdGhlIHNvbmV3Y29uIE9OTFkuCi0JCQkgKi8KLQkJCU5FVF9MT0NLX0dJQU5UKCk7
Ci0jZW5kaWYKLQkJCWF0b21pY19hZGRfaW50KCYoKnN0Y2IpLT5hc29jLnJlZmNudCwgMSk7Ci0J
CQlTQ1RQX1RDQl9VTkxPQ0soKCpzdGNiKSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVUX1NFVChvc28tPnNvX3ZuZXQp
OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQlTQ1RQX1NPQ0tFVF9MT0NLKG9z
bywgMSk7Ci0jZW5kaWYKLQkJCXNvID0gc29uZXdjb25uKG9zbywgMAotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotCQkJICAgICxOVUxMCi0jZW5kaWYKLSNpZmRlZiBfX1BhbmRhX18KLQkJCSAgICAg
LE5VTEwgLCAoKmlucF9wKS0+ZGVmX3ZyZl9pZAotI2VuZGlmCi0JCQkgICAgKTsKLSNpZiAoZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDApCi0JCQlORVRf
VU5MT0NLX0dJQU5UKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCVNDVFBf
U09DS0VUX1VOTE9DSyhvc28sIDEpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVUX1JFU1RPUkUoKTsKLSNl
bmRpZgotCQkJU0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQo
Jigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKLQotCQkJaWYgKHNvID09IE5VTEwpIHsKLQkJCQlz
dHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQotCQkJCXN0cnVjdCBzb2NrZXQgKnBjYl9zbzsKLSNlbmRpZgot
CQkJCS8qIFRvbyBtYW55IHNvY2tldHMgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQx
LCAicHJvY2Vzc19jb29raWVfbmV3OiBubyByb29tIGZvciBhbm90aGVyIHNvY2tldCFcbiIpOwot
CQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywg
IiIpOwotCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oKmlucF9wLCBOVUxMLCBtLCBpcGhsZW4s
Ci0JCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNl
bmRpZgotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQlwY2Jf
c28gPSBTQ1RQX0lOUF9TTygqaW5wX3ApOwotCQkJCWF0b21pY19hZGRfaW50KCYoKnN0Y2IpLT5h
c29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOwotCQkJCVNDVFBf
U09DS0VUX0xPQ0socGNiX3NvLCAxKTsKLQkJCQlTQ1RQX1RDQl9MT0NLKCgqc3RjYikpOwotCQkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgot
CQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYygqaW5wX3AsICpzdGNiLCBTQ1RQX05PUk1BTF9QUk9D
LAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzIzKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKLQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0socGNiX3NvLCAxKTsKLSNlbmRpZgotCQkJ
CXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+
c29fcGNiOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCS8qCi0JCQkgKiBXZSBhZGQg
dGhlIHVuYm91bmQgZmxhZyBoZXJlIHNvIHRoYXQKLQkJCSAqIGlmIHdlIGdldCBhbiBzb2Fib3J0
KCkgYmVmb3JlIHdlIGdldCB0aGUKLQkJCSAqIG1vdmVfcGNiIGRvbmUsIHdlIHdpbGwgcHJvcGVy
bHkgY2xlYW51cC4KLQkJCSAqLwotCQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUgfAotCQkJICAgIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCB8Ci0JCQkgICAgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCB8Ci0JCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCB8
Ci0JCQkgICAgKFNDVFBfUENCX0NPUFlfRkxBR1MgJiAoKmlucF9wKS0+c2N0cF9mbGFncykgfAot
CQkJICAgIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSk7Ci0JCQlpbnAtPnNjdHBfZmVhdHVyZXMg
PSAoKmlucF9wKS0+c2N0cF9mZWF0dXJlczsKLQkJCWlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJl
cyA9ICgqaW5wX3ApLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzOwotCQkJaW5wLT5zY3RwX3NvY2tl
dCA9IHNvOwotCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoKmlucF9wKS0+c2N0cF9mcmFnX3Bv
aW50OwotCQkJaW5wLT5tYXhfY3duZCA9ICgqaW5wX3ApLT5tYXhfY3duZDsKLQkJCWlucC0+c2N0
cF9jbXRfb25fb2ZmID0gKCppbnBfcCktPnNjdHBfY210X29uX29mZjsKLQkJCWlucC0+ZWNuX3N1
cHBvcnRlZCA9ICgqaW5wX3ApLT5lY25fc3VwcG9ydGVkOwotCQkJaW5wLT5wcnNjdHBfc3VwcG9y
dGVkID0gKCppbnBfcCktPnByc2N0cF9zdXBwb3J0ZWQ7Ci0JCQlpbnAtPmF1dGhfc3VwcG9ydGVk
ID0gKCppbnBfcCktPmF1dGhfc3VwcG9ydGVkOwotCQkJaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0g
KCppbnBfcCktPmFzY29uZl9zdXBwb3J0ZWQ7Ci0JCQlpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9
ICgqaW5wX3ApLT5yZWNvbmZpZ19zdXBwb3J0ZWQ7Ci0JCQlpbnAtPm5yc2Fja19zdXBwb3J0ZWQg
PSAoKmlucF9wKS0+bnJzYWNrX3N1cHBvcnRlZDsKLQkJCWlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQg
PSAoKmlucF9wKS0+cGt0ZHJvcF9zdXBwb3J0ZWQ7Ci0JCQlpbnAtPnBhcnRpYWxfZGVsaXZlcnlf
cG9pbnQgPSAoKmlucF9wKS0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsKLQkJCWlucC0+c2N0cF9j
b250ZXh0ID0gKCppbnBfcCktPnNjdHBfY29udGV4dDsKLQkJCWlucC0+bG9jYWxfc3RycmVzZXRf
c3VwcG9ydCA9ICgqaW5wX3ApLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OwotCQkJaW5wLT5maWJu
dW0gPSAoKmlucF9wKS0+ZmlibnVtOwotCQkJaW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0
ZXJhdG9yID0gTlVMTDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlpbnAtPnVscF9p
bmZvID0gKCppbnBfcCktPnVscF9pbmZvOwotCQkJaW5wLT5yZWN2X2NhbGxiYWNrID0gKCppbnBf
cCktPnJlY3ZfY2FsbGJhY2s7Ci0JCQlpbnAtPnNlbmRfY2FsbGJhY2sgPSAoKmlucF9wKS0+c2Vu
ZF9jYWxsYmFjazsKLQkJCWlucC0+c2VuZF9zYl90aHJlc2hvbGQgPSAoKmlucF9wKS0+c2VuZF9z
Yl90aHJlc2hvbGQ7Ci0jZW5kaWYKLQkJCS8qCi0JCQkgKiBjb3B5IGluIHRoZSBhdXRoZW50aWNh
dGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCi0JCQkgKiBvcmlnaW5hbCBlbmRwb2ludAotCQkJICov
Ci0JCQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQotCQkJCXNjdHBfZnJlZV9obWFjbGlz
dChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOwotCQkJaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNz
ID0KLQkJCSAgICBzY3RwX2NvcHlfaG1hY2xpc3QoKCppbnBfcCktPnNjdHBfZXAubG9jYWxfaG1h
Y3MpOwotCQkJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcykKLQkJCQlzY3RwX2Zy
ZWVfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7Ci0JCQlpbnAtPnNj
dHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQotCQkJICAgIHNjdHBfY29weV9jaHVua2xpc3QoKCpp
bnBfcCktPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwotCi0JCQkvKgotCQkJICogTm93IHdl
IG11c3QgbW92ZSBpdCBmcm9tIG9uZSBoYXNoIHRhYmxlIHRvCi0JCQkgKiBhbm90aGVyIGFuZCBn
ZXQgdGhlIHRjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCi0JCQkgKi8KLQotCQkJLyogVGhpcyBpcyB3
aGVyZSB0aGUgb25lLTItb25lIHNvY2tldCBpcyBwdXQgaW50bwotCQkJICogdGhlIGFjY2VwdCBz
dGF0ZSB3YWl0aW5nIGZvciB0aGUgYWNjZXB0IQotCQkJICovCi0JCQlpZiAoKnN0Y2IpIHsKLQkJ
CQkoKnN0Y2IpLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQkJ
fQotCQkJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoKmlucF9wLCBpbnAsICpzdGNiKTsKLQotCQkJ
YXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKLQkJCVNDVFBfVENCX1VO
TE9DSygoKnN0Y2IpKTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQlzY3RwX3B1bGxf
b2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9wKSwgaW5wLCAqc3RjYiwKLQkJCSAgICAwKTsK
LSNlbHNlCi0JCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9wKSwgaW5w
LCAqc3RjYiwgTV9OT1dBSVQpOwotI2VuZGlmCi0JCQlTQ1RQX1RDQl9MT0NLKCgqc3RjYikpOwot
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQsIDEpOwotCi0KLQkJ
CS8qIG5vdyB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB3ZSB3ZXJlIGFib3J0ZWQgd2hpbGUKLQkJ
CSAqIHRoZSBtb3ZlIHdhcyBnb2luZyBvbiBhbmQgdGhlIGxvY2svdW5sb2NrIGhhcHBlbmVkLgot
CQkJICovCi0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dP
TkUpIHsKLQkJCQkvKiB5ZXAgaXQgd2FzLCB3ZSBsZWF2ZSB0aGUKLQkJCQkgKiBhc3NvYyBhdHRh
Y2hlZCB0byB0aGUgc29ja2V0IHNpbmNlCi0JCQkJICogdGhlIHNjdHBfaW5wY2JfZnJlZSgpIGNh
bGwgd2lsbCBzZW5kCi0JCQkJICogYW4gYWJvcnQgZm9yIHVzLgotCQkJCSAqLwotCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7Ci0JCQkvKiBTd2l0Y2ggb3ZlciB0byB0aGUgbmV3IGd1eSAqLwotCQkJ
KmlucF9wID0gaW5wOwotCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0Y2IsIDAs
IE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQlpZiAoc2VuZF9pbnRfY29uZikgewotCQkJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAotCQkJCSAg
ICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7Ci0JCQl9Ci0KLQkJCS8qIFB1bGwgaXQgZnJvbSB0aGUgaW5jb21wbGV0ZSBxdWV1ZSBhbmQg
d2FrZSB0aGUgZ3V5ICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCQlhdG9taWNfYWRkX2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQs
IDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhz
bywgMSk7Ci0jZW5kaWYKLQkJCXNvaXNjb25uZWN0ZWQoc28pOwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9UQ0JfTE9DSygo
KnN0Y2IpKTsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAx
KTsKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJCXJldHVybiAobSk7
Ci0JCX0KLQl9Ci0JaWYgKG5vdGlmaWNhdGlvbikgewotCQlzY3RwX3VscF9ub3RpZnkobm90aWZp
Y2F0aW9uLCAqc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0JaWYgKHNl
bmRfaW50X2NvbmYpIHsKLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9D
T05GSVJNRUQsCi0JCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFND
VFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1z
Y3RwX2hhbmRsZV9jb29raWVfYWNrKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmsgKmNwIFND
VFBfVU5VU0VELAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAq
bmV0KQotewotCS8qIGNwIG11c3Qgbm90IGJlIHVzZWQsIG90aGVycyBjYWxsIHRoaXMgd2l0aG91
dCBhIGMtYWNrIDotKSAqLwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCi0JU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJInNjdHBfaGFuZGxlX2Nvb2tpZV9hY2s6IGhhbmRs
aW5nIENPT0tJRS1BQ0tcbiIpOwotCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwp
KSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0KLQlzY3RwX3N0b3Bf
YWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JLyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gYXNzb2Np
YXRpb24gc3RhdGUgKi8KLQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9D
T09LSUVfRUNIT0VEKSB7Ci0JCS8qIHN0YXRlIGNoYW5nZSBvbmx5IG5lZWRlZCB3aGVuIEkgYW0g
aW4gcmlnaHQgc3RhdGUgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIm1vdmluZyB0
byBPUEVOIHN0YXRlXG4iKTsKLQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9PUEVO
KTsKLQkJc2N0cF9zdGFydF9uZXRfdGltZXJzKHN0Y2IpOwotCQlpZiAoYXNvYy0+c3RhdGUgJiBT
Q1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29j
LT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQotCQl9Ci0JCS8qIHVwZGF0ZSBSVE8gKi8KLQkJU0NU
UF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2FjdGl2ZWVzdGFiKTsKLQkJU0NUUF9TVEFUX0lO
Q1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQlpZiAoYXNvYy0+b3ZlcmFsbF9lcnJvcl9j
b3VudCA9PSAwKSB7Ci0JCQluZXQtPlJUTyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29j
LCBuZXQsCi0JCQkJCSAgICAgICAgICAgICAmYXNvYy0+dGltZV9lbnRlcmVkLCBzY3RwX2FsaWdu
X3NhZmVfbm9jb3B5LAotCQkJCQkJICAgICAgU0NUUF9SVFRfRlJPTV9OT05fREFUQSk7Ci0JCX0K
LQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJlZCk7Ci0JCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19VUCwgc3RjYiwgMCwgTlVMTCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKLQkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0j
ZW5kaWYKLQkJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVEOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19U
RVNUSU5HKQotCQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKLQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0J
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYKLQkJ
CWlmICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgPT0gMCkg
ewotCQkJCXNvaXNjb25uZWN0ZWQoc3RjYi0+c2N0cF9zb2NrZXQpOwotCQkJfQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQl9Ci0JCS8qCi0JCSAqIHNpbmNlIHdlIGRp
ZCBub3Qgc2VuZCBhIEhCIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUKLQkJICogdGhpbmdzCi0J
CSAqLwotCQluZXQtPmhiX3Jlc3BvbmRlZCA9IDE7Ci0KLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUg
JiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCS8qIFdlIGRvbid0IG5lZWQgdG8gZG8g
dGhlIGFzY29uZiB0aGluZywKLQkJCSAqIG5vciBoYiBvciBhdXRvY2xvc2UgaWYgdGhlIHNvY2tl
dCBpcyBjbG9zZWQuCi0JCQkgKi8KLQkJCWdvdG8gY2xvc2VkX3NvY2tldDsKLQkJfQotCi0JCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwK
LQkJICAgIHN0Y2IsIG5ldCk7Ci0KLQotCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90
aWNrcyAmJgotCQkgICAgc2N0cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIFNDVFBfUENC
X0ZMQUdTX0FVVE9DTE9TRSkpIHsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X0FVVE9DTE9TRSwKLQkJCSAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKLQkJfQotCQkv
KgotCQkgKiBzZW5kIEFTQ09ORiBpZiBwYXJhbWV0ZXJzIGFyZSBwZW5kaW5nIGFuZCBBU0NPTkZz
IGFyZQotCQkgKiBhbGxvd2VkIChlZy4gYWRkcmVzc2VzIGNoYW5nZWQgd2hlbiBpbml0L2Nvb2tp
ZSBlY2hvIHdlcmUKLQkJICogaW4gZmxpZ2h0KQotCQkgKi8KLQkJaWYgKChzY3RwX2lzX2ZlYXR1
cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgJiYKLQkJICAg
IChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkgJiYKLQkJICAgICghVEFJTFFfRU1Q
VFkoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlKSkpIHsKLSNpZmRlZiBTQ1RQX1RJTUVSX0JBU0VE
X0FTQ09ORgotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLAotCQkJ
CQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbik7Ci0jZWxzZQotCQkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBzdGNiLT5hc29jLnByaW1h
cnlfZGVzdGluYXRpb24sCi0JCQkJCSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7Ci0jZW5kaWYKLQkJ
fQotCX0KLWNsb3NlZF9zb2NrZXQ6Ci0JLyogVG9zcyB0aGUgY29va2llIGlmIEkgY2FuICovCi0J
c2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsIGFzb2MpOwotCWlmICghVEFJTFFfRU1QVFkoJmFz
b2MtPnNlbnRfcXVldWUpKSB7Ci0JCS8qIFJlc3RhcnQgdGhlIHRpbWVyIGlmIHdlIGhhdmUgcGVu
ZGluZyBkYXRhICovCi0JCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCQljaGsgPSBU
QUlMUV9GSVJTVCgmYXNvYy0+c2VudF9xdWV1ZSk7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNoay0+d2hvVG8pOwotCX0KLX0K
LQotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX2VjbmVfY2h1
bmsgKmNwLAotCQkgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKLQlzdHJ1Y3Qgc2N0cF9l
Y25lX2NodW5rIGJrdXA7Ci0JdWludDhfdCBvdmVycmlkZV9iaXQ7Ci0JdWludDMyX3QgdHNuLCB3
aW5kb3dfZGF0YV90c247Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQgcGt0X2NudDsKLQotCWxl
biA9IG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpOwotCWlmICgobGVuICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9lY25lX2NodW5rKSkgJiYKLQkgICAgKGxlbiAhPSBzaXplb2Yoc3RydWN0IG9sZF9z
Y3RwX2VjbmVfY2h1bmspKSkgewotCQlyZXR1cm47Ci0JfQotCWlmIChsZW4gPT0gc2l6ZW9mKHN0
cnVjdCBvbGRfc2N0cF9lY25lX2NodW5rKSkgewotCQkvKiBJdHMgdGhlIG9sZCBmb3JtYXQgKi8K
LQkJbWVtY3B5KCZia3VwLCBjcCwgc2l6ZW9mKHN0cnVjdCBvbGRfc2N0cF9lY25lX2NodW5rKSk7
Ci0JCWJrdXAubnVtX3BrdHNfc2luY2VfY3dyID0gaHRvbmwoMSk7Ci0JCWNwID0gJmJrdXA7Ci0J
fQotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZlY25lKTsKLQl0c24gPSBudG9obChjcC0+dHNu
KTsKLQlwa3RfY250ID0gbnRvaGwoY3AtPm51bV9wa3RzX3NpbmNlX2N3cik7Ci0JbGNoayA9IFRB
SUxRX0xBU1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgc2N0cGNodW5rX2xpc3RoZWFkKTsKLQlp
ZiAobGNoayA9PSBOVUxMKSB7Ci0JCXdpbmRvd19kYXRhX3RzbiA9IHN0Y2ItPmFzb2Muc2VuZGlu
Z19zZXEgLSAxOwotCX0gZWxzZSB7Ci0JCXdpbmRvd19kYXRhX3RzbiA9IGxjaGstPnJlYy5kYXRh
LnRzbjsKLQl9Ci0KLQkvKiBGaW5kIHdoZXJlIGl0IHdhcyBzZW50IHRvIGlmIHBvc3NpYmxlLiAq
LwotCW5ldCA9IE5VTEw7Ci0JVEFJTFFfRk9SRUFDSChsY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1
ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGxjaGstPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsKLQkJ
CW5ldCA9IGxjaGstPndob1RvOwotCQkJbmV0LT5lY25fcHJldl9jd25kID0gbGNoay0+cmVjLmRh
dGEuY3duZF9hdF9zZW5kOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKFNDVFBfVFNOX0dUKGxjaGst
PnJlYy5kYXRhLnRzbiwgdHNuKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKG5ldCA9PSBO
VUxMKSB7Ci0JCS8qCi0JCSAqIFdoYXQgdG8gZG8uIEEgcHJldmlvdXMgc2VuZCBvZiBhCi0JCSAq
IENXUiB3YXMgcG9zc2libHkgbG9zdC4gU2VlIGhvdyBvbGQgaXQgaXMsIHdlCi0JCSAqIG1heSBo
YXZlIGl0IG1hcmtlZCBvbiB0aGUgYWN0dWFsIG5ldC4KLQkJICovCi0JCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWlmICh0c24gPT0gbmV0LT5s
YXN0X2N3cl90c24pIHsKLQkJCQkvKiBGb3VuZCBoaW0sIHNlbmQgaXQgb2ZmICovCi0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCQkvKgotCQkJICogSWYgd2Ug
cmVhY2ggaGVyZSwgd2UgbmVlZCB0byBzZW5kIGEgc3BlY2lhbAotCQkJICogQ1dSIHRoYXQgc2F5
cyBoZXksIHdlIGRpZCB0aGlzIGEgbG9uZyB0aW1lCi0JCQkgKiBhZ28gYW5kIHlvdSBsb3N0IHRo
ZSByZXNwb25zZS4KLQkJCSAqLwotCQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0
cyk7Ci0JCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCQkvKiBUU05IICovCi0JCQkJcmV0dXJuOwot
CQkJfQotCQkJb3ZlcnJpZGVfYml0ID0gU0NUUF9DV1JfUkVEVUNFX09WRVJSSURFOwotCQl9IGVs
c2UgewotCQkJb3ZlcnJpZGVfYml0ID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCW92ZXJyaWRlX2Jp
dCA9IDA7Ci0JfQotCWlmIChTQ1RQX1RTTl9HVCh0c24sIG5ldC0+Y3dyX3dpbmRvd190c24pICYm
Ci0JICAgICgob3ZlcnJpZGVfYml0JlNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERSkgPT0gMCkpIHsK
LQkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4gaW4gdGhlIHBsdWdn
YWJsZSBDQyBtb2R1bGUgKi8KLQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl9lY25fZWNobyhzdGNiLCBuZXQsIDAsIHBrdF9jbnQpOwotCQkvKgotCQkgKiBX
ZSByZWR1Y2Ugb25jZSBldmVyeSBSVFQuIFNvIHdlIHdpbGwgb25seSBsb3dlciBjd25kIGF0Ci0J
CSAqIHRoZSBuZXh0IHNlbmRpbmcgc2VxIGkuZS4gdGhlIHdpbmRvd19kYXRhX3RzbgotCQkgKi8K
LQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IHdpbmRvd19kYXRhX3RzbjsKLQkJbmV0LT5lY25fY2Vf
cGt0X2NudCArPSBwa3RfY250OwotCQluZXQtPmxvc3RfY250ID0gcGt0X2NudDsKLQkJbmV0LT5s
YXN0X2N3cl90c24gPSB0c247Ci0JfSBlbHNlIHsKLQkJb3ZlcnJpZGVfYml0IHw9IFNDVFBfQ1dS
X0lOX1NBTUVfV0lORE9XOwotCQlpZiAoU0NUUF9UU05fR1QodHNuLCBuZXQtPmxhc3RfY3dyX3Rz
bikgJiYKLQkJICAgICgob3ZlcnJpZGVfYml0JlNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERSkgPT0g
MCkpIHsKLQkJCS8qCi0JCQkgKiBBbm90aGVyIGxvc3MgaW4gdGhlIHNhbWUgd2luZG93IHVwZGF0
ZSBob3cKLQkJCSAqIG1hbnkgbWFya3MvcGFja2V0cyBsb3N0IHdlIGhhdmUgaGFkLgotCQkJICov
Ci0JCQlpbnQgY250ID0gMTsKLQkJCWlmIChwa3RfY250ID4gbmV0LT5sb3N0X2NudCkgewotCQkJ
CS8qIFNob3VsZCBiZSB0aGUgY2FzZSAqLwotCQkJCWNudCA9IChwa3RfY250IC0gbmV0LT5sb3N0
X2NudCk7Ci0JCQkJbmV0LT5lY25fY2VfcGt0X2NudCArPSBjbnQ7Ci0JCQl9Ci0JCQluZXQtPmxv
c3RfY250ID0gcGt0X2NudDsKLQkJCW5ldC0+bGFzdF9jd3JfdHNuID0gdHNuOwotCQkJLyoKLQkJ
CSAqIE1vc3QgQ0MgZnVuY3Rpb25zIHdpbGwgaWdub3JlIHRoaXMgY2FsbCwgc2luY2Ugd2UgYXJl
IGluLXdpbmRvdwotCQkJICogeWV0IG9mIHRoZSBpbml0aWFsIENFIHRoZSBwZWVyIHNhdy4KLQkJ
CSAqLwotCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9l
Y25fZWNobyhzdGNiLCBuZXQsIDEsIGNudCk7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBXZSBhbHdheXMg
c2VuZCBhIENXUiB0aGlzIHdheSBpZiBvdXIgcHJldmlvdXMgb25lIHdhcyBsb3N0IG91cgotCSAq
IHBlZXIgd2lsbCBnZXQgYW4gdXBkYXRlLCBvciBpZiBpdCBpcyBub3QgdGltZSBhZ2FpbiB0byBy
ZWR1Y2Ugd2UKLQkgKiBzdGlsbCBnZXQgdGhlIGN3ciB0byB0aGUgcGVlci4gTm90ZSB3ZSBzZXQg
dGhlIG92ZXJyaWRlIHdoZW4gd2UKLQkgKiBjb3VsZCBub3QgZmluZCB0aGUgVFNOIG9uIHRoZSBj
aHVuayBvciB0aGUgZGVzdGluYXRpb24gbmV0d29yay4KLQkgKi8KLQlzY3RwX3NlbmRfY3dyKHN0
Y2IsIG5ldCwgbmV0LT5sYXN0X2N3cl90c24sIG92ZXJyaWRlX2JpdCk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zY3RwX2hhbmRsZV9lY25fY3dyKHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqY3AsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qCi0JICogSGVy
ZSB3ZSBnZXQgYSBDV1IgZnJvbSB0aGUgcGVlci4gV2UgbXVzdCBsb29rIGluIHRoZSBvdXRxdWV1
ZSBhbmQKLQkgKiBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgY292ZXJlZCBFQ05FIGluIHRoZSBj
b250cm9sIGNodW5rIHBhcnQuCi0JICogSWYgc28gcmVtb3ZlIGl0LgotCSAqLwotCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICplY25lOwotCWlu
dCBvdmVycmlkZTsKLQl1aW50MzJfdCBjd3JfdHNuOwotCi0JY3dyX3RzbiA9IG50b2hsKGNwLT50
c24pOwotCW92ZXJyaWRlID0gY3AtPmNoLmNodW5rX2ZsYWdzICYgU0NUUF9DV1JfUkVEVUNFX09W
RVJSSURFOwotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVl
dWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgIT0gU0NUUF9FQ05f
RUNITykgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChvdmVycmlkZSA9PSAwKSAmJiAoY2hr
LT53aG9UbyAhPSBuZXQpKSB7Ci0JCQkvKiBNdXN0IGJlIGZyb20gdGhlIHJpZ2h0IHNyYyB1bmxl
c3Mgb3ZlcnJpZGUgaXMgc2V0ICovCi0JCQljb250aW51ZTsKLQkJfQotCQllY25lID0gbXRvZChj
aGstPmRhdGEsIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKik7Ci0JCWlmIChTQ1RQX1RTTl9HRShj
d3JfdHNuLCBudG9obChlY25lLT50c24pKSkgewotCQkJLyogdGhpcyBjb3ZlcnMgdGhpcyBFQ05F
LCB3ZSBjYW4gcmVtb3ZlIGl0ICovCi0JCQlzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEtLTsK
LQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIGNoaywKLQkJ
CSAgICBzY3RwX25leHQpOwotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQljaGstPmRh
dGEgPSBOVUxMOwotCQkJc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2NudC0tOwotCQkJc2N0cF9mcmVl
X2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJaWYgKG92ZXJyaWRl
ID09IDApIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNj
dHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlKHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRl
X2NodW5rICpjcCBTQ1RQX1VOVVNFRCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlz
dHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwK
LQkJInNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlOiBoYW5kbGluZyBTSFVURE9XTi1DT01Q
TEVURVxuIik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JYXNvYyA9ICZzdGNi
LT5hc29jOwotCS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFzc29jaWF0aW9uIHN0YXRlICovCi0J
aWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQp
IHsKLQkJLyogdW5leHBlY3RlZCBTSFVURE9XTi1DT01QTEVURS4uLiBzbyBpZ25vcmUuLi4gKi8K
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJCSJzY3RwX2hhbmRsZV9zaHV0ZG93bl9j
b21wbGV0ZTogbm90IGluIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQgLS0tIGlnbm9yZVxu
Iik7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBub3RpZnkg
dXBwZXIgbGF5ZXIgcHJvdG9jb2wgKi8KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLQkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTU09DX0RPV04sIHN0Y2IsIDAsIE5VTEwsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0JfQotI2lmZGVmIElOVkFSSUFOVFMKLQlpZiAoIVRBSUxRX0VNUFRZ
KCZhc29jLT5zZW5kX3F1ZXVlKSB8fAotCSAgICAhVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVl
dWUpIHx8Ci0JICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RjYiwgU0NUUF9TT19OT1Rf
TE9DS0VEKSkgewotCQlwYW5pYygiUXVldWVzIGFyZSBub3QgZW1wdHkgd2hlbiBoYW5kbGluZyBT
SFVURE9XTi1DT01QTEVURSIpOwotCX0KLSNlbmRpZgotCS8qIHN0b3AgdGhlIHRpbWVyICovCi0J
c2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSywgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFND
VFBfTE9DXzI0KTsKLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfc2h1dGRvd24pOwot
CS8qIGZyZWUgdGhlIFRDQiAqLwotCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCi0JCSJzY3Rw
X2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZTogY2FsbHMgZnJlZS1hc29jXG4iKTsKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzbyA9IFND
VFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCVNDVFBfU09DS0VUX0xPQ0soc28s
IDEpOwotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0JKHZvaWQpc2N0cF9mcmVlX2Fzc29jKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JICAgICAgICAgICAgICAgICAgICAgIFND
VFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjUpOwotI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCVNDVFBfU09DS0VUX1VOTE9DSyhz
bywgMSk7Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQKLXByb2Nlc3NfY2h1bmtf
ZHJvcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2NodW5rX2Rlc2MgKmRlc2Ms
Ci0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50OF90IGZsZykKLXsKLQlzd2l0Y2ggKGRl
c2MtPmNodW5rX3R5cGUpIHsKLQljYXNlIFNDVFBfREFUQToKLQkJLyogZmluZCB0aGUgdHNuIHRv
IHJlc2VuZCAocG9zc2libHkgKi8KLQl7Ci0JCXVpbnQzMl90IHRzbjsKLQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqdHAxOwotCi0JCXRzbiA9IG50b2hsKGRlc2MtPnRzbl9pZmFueSk7Ci0JCVRB
SUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJ
CWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsKLQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJ
CWJyZWFrOwotCQkJfQotCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCB0c24p
KSB7Ci0JCQkJLyogbm90IGZvdW5kICovCi0JCQkJdHAxID0gTlVMTDsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJfQotCQlpZiAodHAxID09IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBEbyBpdCB0aGUgb3Ro
ZXIgd2F5ICwgYWthIHdpdGhvdXQgcGF5aW5nCi0JCQkgKiBhdHRlbnRpb24gdG8gcXVldWUgc2Vx
IG9yZGVyLgotCQkJICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwZG5mbmQpOwotCQkJ
VEFJTFFfRk9SRUFDSCh0cDEsICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgewot
CQkJCWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsKLQkJCQkJLyogZm91bmQgaXQgKi8K
LQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmICh0cDEgPT0gTlVMTCkgewotCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycHRzbm5mKTsKLQkJfQotCQlpZiAoKHRwMSkgJiYgKHRw
MS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpKSB7Ci0JCQl1aW50OF90ICpkZHA7Ci0KLQkJ
CWlmICgoKGZsZyAmIFNDVFBfQkFEQ1JDKSA9PSAwKSAmJgotCQkJICAgICgoZmxnICYgU0NUUF9G
Uk9NX01JRERMRV9CT1gpID09IDApKSB7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWlmICgo
c3RjYi0+YXNvYy5wZWVyc19yd25kID09IDApICYmCi0JCQkgICAgKChmbGcgJiBTQ1RQX0ZST01f
TUlERExFX0JPWCkgPT0gMCkpIHsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwZGl3bnAp
OwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+YXNvYy5wZWVyc19yd25kID09
IDAgJiYKLQkJCSAgICAoZmxnICYgU0NUUF9GUk9NX01JRERMRV9CT1gpKSB7Ci0JCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcGRycGRpenJ3KTsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQkJZGRw
ID0gKHVpbnQ4X3QgKikgKG10b2QodHAxLT5kYXRhLCBjYWRkcl90KSArCi0JCQkJCSAgIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSk7Ci0JCQl7Ci0JCQkJdW5zaWduZWQgaW50IGlpaTsK
LQotCQkJCWZvciAoaWlpID0gMDsgaWlpIDwgc2l6ZW9mKGRlc2MtPmRhdGFfYnl0ZXMpOwotCQkJ
CSAgICAgaWlpKyspIHsKLQkJCQkJaWYgKGRkcFtpaWldICE9IGRlc2MtPmRhdGFfYnl0ZXNbaWlp
XSkgewotCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGJhZGQpOwotCQkJCQkJcmV0dXJu
ICgtMSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICh0cDEtPmRvX3J0dCkgewotCQkJ
CS8qCi0JCQkJICogdGhpcyBndXkgaGFkIGEgUlRPIGNhbGN1bGF0aW9uCi0JCQkJICogcGVuZGlu
ZyBvbiBpdCwgY2FuY2VsIGl0Ci0JCQkJICovCi0JCQkJaWYgKHRwMS0+d2hvVG8tPnJ0b19uZWVk
ZWQgPT0gMCkgewotCQkJCQl0cDEtPndob1RvLT5ydG9fbmVlZGVkID0gMTsKLQkJCQl9Ci0JCQkJ
dHAxLT5kb19ydHQgPSAwOwotCQkJfQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycG1hcmsp
OwotCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQlzY3RwX3Vj
b3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCS8qCi0JCQkg
KiBtYXJrIGl0IGFzIGlmIHdlIHdlcmUgZG9pbmcgYSBGUiwgc2luY2UKLQkJCSAqIHdlIHdpbGwg
YmUgZ2V0dGluZyBnYXAgYWNrIHJlcG9ydHMgYmVoaW5kCi0JCQkgKiB0aGUgaW5mbyBmcm9tIHRo
ZSByb3V0ZXIuCi0JCQkgKi8KLQkJCXRwMS0+cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0
ID0gMTsKLQkJCS8qCi0JCQkgKiBtYXJrIHRoZSB0c24gd2l0aCB3aGF0IHNlcXVlbmNlcyBjYW4K
LQkJCSAqIGNhdXNlIGEgbmV3IEZSLgotCQkJICovCi0JCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2It
PmFzb2Muc2VuZF9xdWV1ZSkpIHsKLQkJCQl0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9
IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXE7Ci0JCQl9IGVsc2UgewotCQkJCXRwMS0+cmVjLmRhdGEu
ZmFzdF9yZXRyYW5fdHNuID0gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpKS0+
cmVjLmRhdGEudHNuOwotCQkJfQotCi0JCQkvKiByZXN0YXJ0IHRoZSB0aW1lciAqLwotCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAotCQkJCQlz
dGNiLCB0cDEtPndob1RvLAotCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVU
ICsgU0NUUF9MT0NfMjYpOwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VO
RCwgc3RjYi0+c2N0cF9lcCwKLQkJCQkJIHN0Y2IsIHRwMS0+d2hvVG8pOwotCi0JCQkvKiBmaXgg
Y291bnRzIGFuZCB0aGluZ3MgKi8KLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbWlzY19p
bnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1BEUlAsCi0JCQkJCSAgICAgICB0cDEtPndob1RvLT5m
bGlnaHRfc2l6ZSwKLQkJCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJCQkgICAgICAgKHVp
bnQzMl90KSh1aW50cHRyX3Qpc3RjYiwKLQkJCQkJICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsK
LQkJCX0KLQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCXNj
dHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKLQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNy
ZWFzZShzdGNiLCB0cDEpOwotCQkJfQotCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNF
TkQ7Ci0JCX0gewotCQkJLyogYXVkaXQgY29kZSAqLwotCQkJdW5zaWduZWQgaW50IGF1ZGl0Owot
Ci0JCQlhdWRpdCA9IDA7Ci0JCQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0Y2ItPmFzb2Muc2VudF9x
dWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JF
U0VORCkKLQkJCQkJYXVkaXQrKzsKLQkJCX0KLQkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+
YXNvYy5jb250cm9sX3NlbmRfcXVldWUsCi0JCQkJICAgICAgc2N0cF9uZXh0KSB7Ci0JCQkJaWYg
KHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQkJYXVkaXQrKzsKLQkJCX0K
LQkJCWlmIChhdWRpdCAhPSBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCkgewotCQkJ
CVNDVFBfUFJJTlRGKCIqKkxvY2FsIEF1ZGl0IGZpbmRzIGNudDolZCBhc29jIGNudDolZFxuIiwK
LQkJCQkJICAgIGF1ZGl0LCBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0jaWZu
ZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQkJCXN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRy
YW5fY250ID0gYXVkaXQ7Ci0jZW5kaWYKLQkJCX0KLQkJfQotCX0KLQlicmVhazsKLQljYXNlIFND
VFBfQVNDT05GOgotCXsKLQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqYXNjb25mOwotCi0JCVRB
SUxRX0ZPUkVBQ0goYXNjb25mLCAmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsCi0JCQkg
ICAgICBzY3RwX25leHQpIHsKLQkJCWlmIChhc2NvbmYtPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQ
X0FTQ09ORikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChhc2NvbmYpIHsKLQkJCWlm
IChhc2NvbmYtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCi0JCQkJc2N0cF91Y291bnRf
aW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQlhc2NvbmYtPnNlbnQg
PSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJCWFzY29uZi0+c25kX2NvdW50LS07Ci0JCX0KLQl9
Ci0JYnJlYWs7Ci0JY2FzZSBTQ1RQX0lOSVRJQVRJT046Ci0JCS8qIHJlc2VuZCB0aGUgSU5JVCAq
LwotCQlzdGNiLT5hc29jLmRyb3BwZWRfc3BlY2lhbF9jbnQrKzsKLQkJaWYgKHN0Y2ItPmFzb2Mu
ZHJvcHBlZF9zcGVjaWFsX2NudCA8IFNDVFBfUkVUUllfRFJPUFBFRF9USFJFU0gpIHsKLQkJCS8q
Ci0JCQkgKiBJZiB3ZSBjYW4gZ2V0IGl0IGluLCBpbiBhIGZldyBhdHRlbXB0cyB3ZSBkbwotCQkJ
ICogdGhpcywgb3RoZXJ3aXNlIHdlIGxldCB0aGUgdGltZXIgZmlyZS4KLQkJCSAqLwotCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULCBzdGNiLT5zY3RwX2VwLAotCQkJCQlz
dGNiLCBuZXQsCi0JCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQ
X0xPQ18yNyk7Ci0JCQlzY3RwX3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfU0VMRUNUSVZFX0FD
SzoKLQljYXNlIFNDVFBfTlJfU0VMRUNUSVZFX0FDSzoKLQkJLyogcmVzZW5kIHRoZSBzYWNrICov
Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDoKLQkJLyogcmVzZW5kIGEgZGVtYW5kIEhCICov
Ci0JCWlmICgoc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ICsgMykgPCBzdGNiLT5hc29j
Lm1heF9zZW5kX3RpbWVzKSB7Ci0JCQkvKiBPbmx5IHJldHJhbnNtaXQgaWYgd2UgS05PVyB3ZSB3
b250IGRlc3Ryb3kgdGhlIHRjYiAqLwotCQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfU0hVVERPV046Ci0JCXNj
dHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfU0hVVERP
V05fQUNLOgotCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIG5ldCk7Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9DT09LSUVfRUNITzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNv
b2tpZTsKLQotCQljb29raWUgPSBOVUxMOwotCQlUQUlMUV9GT1JFQUNIKGNvb2tpZSwgJnN0Y2It
PmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAotCQkJICAgICAgc2N0cF9uZXh0KSB7Ci0JCQlpZiAo
Y29va2llLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgewotCQkJCWJyZWFr
OwotCQkJfQotCQl9Ci0JCWlmIChjb29raWUpIHsKLQkJCWlmIChjb29raWUtPnNlbnQgIT0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQpCi0JCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7Ci0JCQljb29raWUtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RDsKLQkJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKLQkJfQotCX0KLQlicmVh
azsKLQljYXNlIFNDVFBfQ09PS0lFX0FDSzoKLQkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7
Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkvKiByZXNlbmQgbGFzdCBhc2Nv
bmYgYWNrICovCi0JCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOwotCQlicmVhazsKLQljYXNl
IFNDVFBfSUZPUldBUkRfQ1VNX1RTTjoKLQljYXNlIFNDVFBfRk9SV0FSRF9DVU1fVFNOOgotCQlz
ZW5kX2ZvcndhcmRfdHNuKHN0Y2IsICZzdGNiLT5hc29jKTsKLQkJYnJlYWs7Ci0JCS8qIGNhbid0
IGRvIGFueXRoaW5nIHdpdGggdGhlc2UgKi8KLQljYXNlIFNDVFBfUEFDS0VUX0RST1BQRUQ6Ci0J
Y2FzZSBTQ1RQX0lOSVRJQVRJT05fQUNLOgkvKiB0aGlzIHNob3VsZCBub3QgaGFwcGVuICovCi0J
Y2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6Ci0JY2FzZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OOgot
CWNhc2UgU0NUUF9PUEVSQVRJT05fRVJST1I6Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRF
OgotCWNhc2UgU0NUUF9FQ05fRUNITzoKLQljYXNlIFNDVFBfRUNOX0NXUjoKLQlkZWZhdWx0Ogot
CQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotdm9pZAotc2N0cF9yZXNldF9pbl9zdHJl
YW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJfZW50cmllcywgdWludDE2
X3QgKmxpc3QpCi17Ci0JdWludDMyX3QgaTsKLQl1aW50MTZfdCB0ZW1wOwotCi0JLyoKLQkgKiBX
ZSBzZXQgdGhpbmdzIHRvIDB4ZmZmZmZmZmYgc2luY2UgdGhpcyBpcyB0aGUgbGFzdCBkZWxpdmVy
ZWQgc2VxdWVuY2UKLQkgKiBhbmQgd2Ugd2lsbCBiZSBzZW5kaW5nIGluIDAgYWZ0ZXIgdGhlIHJl
c2V0LgotCSAqLwotCi0JaWYgKG51bWJlcl9lbnRyaWVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBu
dW1iZXJfZW50cmllczsgaSsrKSB7Ci0JCQl0ZW1wID0gbnRvaHMobGlzdFtpXSk7Ci0JCQlpZiAo
dGVtcCA+PSBzdGNiLT5hc29jLnN0cmVhbWluY250KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0J
CQlzdGNiLT5hc29jLnN0cm1pblt0ZW1wXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZm
OwotCQl9Ci0JfSBlbHNlIHsKLQkJbGlzdCA9IE5VTEw7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNi
LT5hc29jLnN0cmVhbWluY250OyBpKyspIHsKLQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLmxhc3Rf
bWlkX2RlbGl2ZXJlZCA9IDB4ZmZmZmZmZmY7Ci0JCX0KLQl9Ci0Jc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1NUUl9SRVNFVF9SRUNWLCBzdGNiLCBudW1iZXJfZW50cmllcywgKHZvaWQgKils
aXN0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9yZXNldF9v
dXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IG51bWJlcl9lbnRyaWVz
LCB1aW50MTZfdCAqbGlzdCkKLXsKLQl1aW50MzJfdCBpOwotCXVpbnQxNl90IHRlbXA7Ci0KLQlp
ZiAobnVtYmVyX2VudHJpZXMgPiAwKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50cmll
czsgaSsrKSB7Ci0JCQl0ZW1wID0gbnRvaHMobGlzdFtpXSk7Ci0JCQlpZiAodGVtcCA+PSBzdGNi
LT5hc29jLnN0cmVhbW91dGNudCkgewotCQkJCS8qIG5vIHN1Y2ggc3RyZWFtICovCi0JCQkJY29u
dGludWU7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbdGVtcF0ubmV4dF9taWRfb3JkZXJl
ZCA9IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbdGVtcF0ubmV4dF9taWRfdW5vcmRlcmVkID0g
MDsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91
dGNudDsgaSsrKSB7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9
IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKLQkJ
fQotCX0KLQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RSX1JFU0VUX1NFTkQsIHN0Y2Is
IG51bWJlcl9lbnRyaWVzLCAodm9pZCAqKWxpc3QsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX3Jlc2V0X2NsZWFyX3BlbmRpbmcoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50MzJfdCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxpc3QpCi17Ci0JdWludDMy
X3QgaTsKLQl1aW50MTZfdCB0ZW1wOwotCi0JaWYgKG51bWJlcl9lbnRyaWVzID4gMCkgewotCQlm
b3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgewotCQkJdGVtcCA9IG50b2hzKGxp
c3RbaV0pOwotCQkJaWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKLQkJCQkv
KiBubyBzdWNoIHN0cmVhbSAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3RjYi0+YXNvYy5z
dHJtb3V0W3RlbXBdLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BFTjsKLQkJfQotCX0gZWxzZSB7Ci0J
CWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOOwotCQl9Ci0JfQotfQot
Ci0KLXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1ZXN0ICoKLXNjdHBfZmluZF9zdHJlYW1f
cmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZXEsIHN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKipiY2hrKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0
cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVz
dCAqcjsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0JaW50IGxlbiwgY2xlbjsKLQot
CWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuY29udHJv
bF9zZW5kX3F1ZXVlKSkgewotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPSAwOwot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5zdHJfcmVzZXQgPT0gTlVMTCkg
ewotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPSAwOwotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQljaGsgPSBzdGNiLT5hc29jLnN0cl9yZXNldDsKLQlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGJjaGspIHsKLQkJLyogaGUgd2FudHMg
YSBjb3B5IG9mIHRoZSBjaGsgcG9pbnRlciAqLwotCQkqYmNoayA9IGNoazsKLQl9Ci0JY2xlbiA9
IGNoay0+c2VuZF9zaXplOwotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5r
aGRyICopOwotCXIgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgKikoY2ggKyAx
KTsKLQlpZiAobnRvaGwoci0+cmVxdWVzdF9zZXEpID09IHNlcSkgewotCQkvKiBmb3VuZCBpdCAq
LwotCQlyZXR1cm4gKHIpOwotCX0KLQlsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhyLT5waC5wYXJh
bV9sZW5ndGgpKTsKLQlpZiAoY2xlbiA+IChsZW4gKyAoaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9j
aHVua2hkcikpKSB7Ci0JCS8qIG1vdmUgdG8gdGhlIG5leHQgb25lLCB0aGVyZSBjYW4gb25seSBi
ZSBhIG1heCBvZiB0d28gKi8KLQkJciA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVz
dCAqKSgoY2FkZHJfdClyICsgbGVuKTsKLQkJaWYgKG50b2hsKHItPnJlcXVlc3Rfc2VxKSA9PSBz
ZXEpIHsKLQkJCXJldHVybiAocik7Ci0JCX0KLQl9Ci0JLyogdGhhdCBzZXEgaXMgbm90IGhlcmUg
Ki8KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jbGVhbl91cF9zdHJl
YW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoayA9IHN0Y2ItPmFzb2Muc3Ry
X3Jlc2V0OwotCi0JaWYgKHN0Y2ItPmFzb2Muc3RyX3Jlc2V0ID09IE5VTEwpIHsKLQkJcmV0dXJu
OwotCX0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0KLQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1F
Ul9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICAgICAgICAgICAgICBj
aGstPndob1RvLCBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzI4KTsKLQlUQUlMUV9S
RU1PVkUoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkgICAgY2hrLAotCSAgICBzY3RwX25l
eHQpOwotCWlmIChjaGstPmRhdGEpIHsKLQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCWNo
ay0+ZGF0YSA9IE5VTEw7Ci0JfQotCWFzb2MtPmN0cmxfcXVldWVfY250LS07Ci0Jc2N0cF9mcmVl
X2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCS8qc2FfaWdub3JlIE5P
X05VTExfQ0hLKi8KLQlzdGNiLT5hc29jLnN0cl9yZXNldCA9IE5VTEw7Ci19Ci0KLQotc3RhdGlj
IGludAotc2N0cF9oYW5kbGVfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQkJCQkgIHVpbnQzMl90IHNlcSwgdWludDMyX3QgYWN0aW9uLAotCQkJCSAgc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICpyZXNwaW4pCi17Ci0JdWludDE2X3QgdHlwZTsK
LQlpbnQgbHBhcmFtX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNi
LT5hc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfcmVxdWVzdCAqcmVxX3BhcmFtOwotCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9v
dXRfcmVxdWVzdCAqcmVxX291dF9wYXJhbTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5f
cmVxdWVzdCAqcmVxX2luX3BhcmFtOwotCXVpbnQzMl90IG51bWJlcl9lbnRyaWVzOwotCi0JaWYg
KGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCS8qIGR1cGxpY2F0ZSAq
LwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoc2VxID09IHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3Nl
cV9vdXQpIHsKLQkJcmVxX3BhcmFtID0gc2N0cF9maW5kX3N0cmVhbV9yZXNldChzdGNiLCBzZXEs
ICZjaGspOwotCQlpZiAocmVxX3BhcmFtICE9IE5VTEwpIHsKLQkJCXN0Y2ItPmFzb2Muc3RyX3Jl
c2V0X3NlcV9vdXQrKzsKLQkJCXR5cGUgPSBudG9ocyhyZXFfcGFyYW0tPnBoLnBhcmFtX3R5cGUp
OwotCQkJbHBhcmFtX2xlbiA9IG50b2hzKHJlcV9wYXJhbS0+cGgucGFyYW1fbGVuZ3RoKTsKLQkJ
CWlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VUX09VVF9SRVFVRVNUKSB7Ci0JCQkJaW50IG5vX2Ns
ZWFyID0gMDsKLQotCQkJCXJlcV9vdXRfcGFyYW0gPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X291dF9yZXF1ZXN0ICopcmVxX3BhcmFtOwotCQkJCW51bWJlcl9lbnRyaWVzID0gKGxwYXJhbV9s
ZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgLyBzaXpl
b2YodWludDE2X3QpOwotCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRfaXNfb3V0c3RhbmRpbmcg
PSAwOwotCQkJCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpCi0JCQkJCWFzb2Mt
PnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZy0tOwotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJF
QU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCkgewotCQkJCQkvKiBkbyBpdCAqLwotCQkJCQlzY3Rw
X3Jlc2V0X291dF9zdHJlYW1zKHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXFfb3V0X3BhcmFtLT5s
aXN0X29mX3N0cmVhbXMpOwotCQkJCX0gZWxzZSBpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JF
U0VUX1JFU1VMVF9ERU5JRUQpIHsKLQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NU
Ul9SRVNFVF9ERU5JRURfT1VULCBzdGNiLCBudW1iZXJfZW50cmllcywgcmVxX291dF9wYXJhbS0+
bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCX0gZWxzZSBpZiAoYWN0
aW9uID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9JTl9QUk9HUkVTUykgewotCQkJCQkvKiBT
ZXQgaXQgdXAgc28gd2UgZG9uJ3Qgc3RvcCByZXRyYW5zbWl0dGluZyAqLwotCQkJCQlhc29jLT5z
dHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKLQkJCQkJc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2Vx
X291dC0tOwotCQkJCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0X2lzX291dHN0YW5kaW5nID0gMTsK
LQkJCQkJbm9fY2xlYXIgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlmeShT
Q1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX09VVCwgc3RjYiwgbnVtYmVyX2VudHJpZXMsIHJl
cV9vdXRfcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9
Ci0JCQkJaWYgKG5vX2NsZWFyID09IDApIHsKLQkJCQkJc2N0cF9yZXNldF9jbGVhcl9wZW5kaW5n
KHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXFfb3V0X3BhcmFtLT5saXN0X29mX3N0cmVhbXMpOwot
CQkJCX0KLQkJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9JTl9SRVFVRVNUKSB7
Ci0JCQkJcmVxX2luX3BhcmFtID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0
ICopcmVxX3BhcmFtOwotCQkJCW51bWJlcl9lbnRyaWVzID0gKGxwYXJhbV9sZW4gLSBzaXplb2Yo
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QpKSAvIHNpemVvZih1aW50MTZfdCk7
Ci0JCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykKLQkJCQkJYXNvYy0+c3Ry
ZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07Ci0JCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9S
RVNFVF9SRVNVTFRfREVOSUVEKSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9T
VFJfUkVTRVRfREVOSUVEX0lOLCBzdGNiLAotCQkJCQkJCW51bWJlcl9lbnRyaWVzLCByZXFfaW5f
cGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9IGVsc2Ug
aWYgKGFjdGlvbiAhPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEKSB7Ci0JCQkJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX0lOLCBzdGNiLAot
CQkJCQkJCW51bWJlcl9lbnRyaWVzLCByZXFfaW5fcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9TVFJf
UkVTRVRfQUREX09VVF9TVFJFQU1TKSB7Ci0JCQkJLyogT2sgd2Ugbm93IG1heSBoYXZlIG1vcmUg
c3RyZWFtcyAqLwotCQkJCWludCBudW1fc3RyZWFtOwotCi0JCQkJbnVtX3N0cmVhbSA9IHN0Y2It
PmFzb2Muc3RybV9wZW5kaW5nX2FkZF9zaXplOwotCQkJCWlmIChudW1fc3RyZWFtID4gKHN0Y2It
PmFzb2Muc3RybV9yZWFsb3V0c2l6ZSAtIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSkgewotCQkJ
CQkvKiBUU05IICovCi0JCQkJCW51bV9zdHJlYW0gPSBzdGNiLT5hc29jLnN0cm1fcmVhbG91dHNp
emUgLSBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsKLQkJCQl9Ci0JCQkJc3RjYi0+YXNvYy5zdHJt
X3BlbmRpbmdfYWRkX3NpemUgPSAwOwotCQkJCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3Rh
bmRpbmcpCi0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZy0tOwotCQkJCWlmIChh
Y3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCkgewotCQkJCQkvKiBQ
dXQgdGhlIG5ldyBzdHJlYW1zIGludG8gZWZmZWN0ICovCi0JCQkJCWludCBpOwotCQkJCQlmb3Ig
KCBpID0gYXNvYy0+c3RyZWFtb3V0Y250OyBpPCAoYXNvYy0+c3RyZWFtb3V0Y250ICsgbnVtX3N0
cmVhbSk7IGkrKykgewotCQkJCQkJYXNvYy0+c3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFN
X09QRU47Ci0JCQkJCX0KLQkJCQkJYXNvYy0+c3RyZWFtb3V0Y250ICs9IG51bV9zdHJlYW07Ci0J
CQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3RjYi0+YXNvYy5zdHJlYW1p
bmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsIDApOwotCQkJCX0gZWxzZSBpZiAoYWN0aW9u
ID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKLQkJCQkJc2N0cF9ub3RpZnlf
c3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29j
LnN0cmVhbW91dGNudCwKLQkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9DSEFOR0VfREVOSUVEKTsK
LQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0
Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LAotCQkJCQkJCQkg
ICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQpOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAodHlw
ZSA9PSBTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUykgewotCQkJCWlmIChhc29jLT5zdHJl
YW1fcmVzZXRfb3V0c3RhbmRpbmcpCi0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGlu
Zy0tOwotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkg
ewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3Ry
ZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LAotCQkJCQkJCQkgICAgIFNDVFBfU1RS
RUFNX0NIQU5HRV9ERU5JRUQpOwotCQkJCX0gZWxzZSBpZiAoYWN0aW9uICE9IFNDVFBfU1RSRUFN
X1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpIHsKLQkJCQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0
X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29jLnN0cmVhbW91dGNu
dCwKLQkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVEKTsKLQkJCQl9Ci0JCQl9
IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVFU1QpIHsKLQkJCQkvKioK
LQkJCQkgKiBhKSBBZG9wdCB0aGUgbmV3IGluIHRzbi4KLQkJCQkgKiBiKSByZXNldCB0aGUgbWFw
Ci0JCQkJICogYykgQWRvcHQgdGhlIG5ldyBvdXQtdHNuCi0JCQkJICovCi0JCQkJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqcmVzcDsKLQkJCQlzdHJ1Y3Qgc2N0cF9mb3J3
YXJkX3Rzbl9jaHVuayBmd2R0c247Ci0JCQkJaW50IGFib3J0X2ZsYWcgPSAwOwotCQkJCWlmIChy
ZXNwaW4gPT0gTlVMTCkgewotCQkJCQkvKiBodWggPyAqLwotCQkJCQlyZXR1cm4gKDApOwotCQkJ
CX0KLQkJCQlpZiAobnRvaHMocmVzcGluLT5waC5wYXJhbV9sZW5ndGgpIDwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24pKSB7Ci0JCQkJCXJldHVybiAoMCk7Ci0J
CQkJfQotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1F
RCkgewotCQkJCQlyZXNwID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24g
KilyZXNwaW47Ci0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZy0tOwotCQkJCQlm
d2R0c24uY2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRf
dHNuX2NodW5rKSk7Ci0JCQkJCWZ3ZHRzbi5jaC5jaHVua190eXBlID0gU0NUUF9GT1JXQVJEX0NV
TV9UU047Ci0JCQkJCWZ3ZHRzbi5uZXdfY3VtdWxhdGl2ZV90c24gPSBodG9ubChudG9obChyZXNw
LT5zZW5kZXJzX25leHRfdHNuKSAtIDEpOwotCQkJCQlzY3RwX2hhbmRsZV9mb3J3YXJkX3Rzbihz
dGNiLCAmZndkdHNuLCAmYWJvcnRfZmxhZywgTlVMTCwgMCk7Ci0JCQkJCWlmIChhYm9ydF9mbGFn
KSB7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJCXN0Y2ItPmFzb2MuaGlnaGVzdF90
c25faW5zaWRlX21hcCA9IChudG9obChyZXNwLT5zZW5kZXJzX25leHRfdHNuKSAtIDEpOwotCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCQkJCXNjdHBfbG9nX21hcCgwLCA3LCBhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9TTElERV9SRVNVTFQpOwotCQkJCQl9Ci0KLQkJCQkJc3Rj
Yi0+YXNvYy50c25fbGFzdF9kZWxpdmVyZWQgPSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuID0g
c3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCQkJCQlzdGNiLT5hc29jLm1hcHBp
bmdfYXJyYXlfYmFzZV90c24gPSBudG9obChyZXNwLT5zZW5kZXJzX25leHRfdHNuKTsKLQkJCQkJ
bWVtc2V0KHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheSwgMCwgc3RjYi0+YXNvYy5tYXBwaW5nX2Fy
cmF5X3NpemUpOwotCi0JCQkJCXN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9
IHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcDsKLQkJCQkJbWVtc2V0KHN0Y2ItPmFz
b2MubnJfbWFwcGluZ19hcnJheSwgMCwgc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X3NpemUpOwot
Ci0JCQkJCXN0Y2ItPmFzb2Muc2VuZGluZ19zZXEgPSBudG9obChyZXNwLT5yZWNlaXZlcnNfbmV4
dF90c24pOwotCQkJCQlzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2VxID0gc3RjYi0+YXNvYy5jdW11
bGF0aXZlX3RzbjsKLQotCQkJCQlzY3RwX3Jlc2V0X291dF9zdHJlYW1zKHN0Y2IsIDAsICh1aW50
MTZfdCAqKSBOVUxMKTsKLQkJCQkJc2N0cF9yZXNldF9pbl9zdHJlYW0oc3RjYiwgMCwgKHVpbnQx
Nl90ICopIE5VTEwpOwotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0Y2IsIHN0
Y2ItPmFzb2Muc2VuZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfYmFzZV90c24g
KyAxKSwgMCk7Ci0JCQkJfSBlbHNlIGlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVT
VUxUX0RFTklFRCkgewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0Y2IsIHN0
Y2ItPmFzb2Muc2VuZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfYmFzZV90c24g
KyAxKSwKLQkJCQkJCQkJICAgICBTQ1RQX0FTU09DX1JFU0VUX0RFTklFRCk7Ci0JCQkJfSBlbHNl
IHsKLQkJCQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X3RzbihzdGNiLCBzdGNiLT5hc29jLnNl
bmRpbmdfc2VxLCAoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgMSksCi0JCQkJ
CQkJCSAgICAgU0NUUF9BU1NPQ19SRVNFVF9GQUlMRUQpOwotCQkJCX0KLQkJCX0KLQkJCS8qIGdl
dCByaWQgb2YgdGhlIHJlcXVlc3QgYW5kIGdldCB0aGUgcmVxdWVzdCBmbGFncyAqLwotCQkJaWYg
KGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCQkJc2N0cF9jbGVhbl91
cF9zdHJlYW1fcmVzZXQoc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGFzb2MtPnN0cmVhbV9y
ZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCXNjdHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0X2lm
X3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQotCXJldHVybiAoMCk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF9pbihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICpyZXEsIGludCB0cnVuYykKLXsKLQl1
aW50MzJfdCBzZXE7Ci0JaW50IGxlbiwgaTsKLQlpbnQgbnVtYmVyX2VudHJpZXM7Ci0JdWludDE2
X3QgdGVtcDsKLQotCS8qCi0JICogcGVlciB3YW50cyBtZSB0byBzZW5kIGEgc3RyLXJlc2V0IHRv
IGhpbSBmb3IgbXkgb3V0Z29pbmcgc2VxJ3MgaWYKLQkgKiBzZXFfaW4gaXMgcmlnaHQuCi0JICov
Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQotCXNlcSA9
IG50b2hsKHJlcS0+cmVxdWVzdF9zZXEpOwotCWlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luID09
IHNlcSkgewotCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IGFzb2MtPmxhc3RfcmVzZXRf
YWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ICYgU0NUUF9F
TkFCTEVfUkVTRVRfU1RSRUFNX1JFUSkpIHsKLQkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBd
ID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJfSBlbHNlIGlmICh0cnVuYykg
ewotCQkJLyogQ2FuJ3QgZG8gaXQsIHNpbmNlIHRoZXkgZXhjZWVkZWQgb3VyIGJ1ZmZlciBzaXpl
ICAqLwotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfREVOSUVEOwotCQl9IGVsc2UgaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dF9p
c19vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCQlsZW4gPSBudG9ocyhyZXEtPnBoLnBhcmFtX2xlbmd0
aCk7Ci0JCQludW1iZXJfZW50cmllcyA9ICgobGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVh
bV9yZXNldF9pbl9yZXF1ZXN0KSkgLyBzaXplb2YodWludDE2X3QpKTsKLQkJCWlmIChudW1iZXJf
ZW50cmllcykgewotCQkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50cmllczsgaSsrKSB7Ci0J
CQkJCXRlbXAgPSBudG9ocyhyZXEtPmxpc3Rfb2Zfc3RyZWFtc1tpXSk7Ci0JCQkJCWlmICh0ZW1w
ID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7Ci0JCQkJCQlnb3RvIGJh
ZF9ib3k7Ci0JCQkJCX0KLQkJCQkJcmVxLT5saXN0X29mX3N0cmVhbXNbaV0gPSB0ZW1wOwotCQkJ
CX0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgewotCQkJCQlpZiAo
c3RjYi0+YXNvYy5zdHJtb3V0W3JlcS0+bGlzdF9vZl9zdHJlYW1zW2ldXS5zdGF0ZSA9PSBTQ1RQ
X1NUUkVBTV9PUEVOKSB7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbcmVxLT5saXN0X29mX3N0
cmVhbXNbaV1dLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKLQkJCQkJfQotCQkJ
CX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogSXRzIGFsbCAqLwotCQkJCWZvciAoaSA9IDA7IGkgPCBz
dGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0cm1v
dXRbaV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikKLQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkc7Ci0JCQkJfQotCQkJfQotCQkJ
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVS
Rk9STUVEOwotCQl9IGVsc2UgewotCQkJLyogQ2FuJ3QgZG8gaXQsIHNpbmNlIHdlIGhhdmUgc2Vu
dCBvbmUgb3V0ICovCi0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFN
X1JFU0VUX1JFU1VMVF9FUlJfSU5fUFJPR1JFU1M7Ci0JCX0KLQliYWRfYm95OgotCQlzY3RwX2Fk
ZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsw
XSk7Ci0JCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4rKzsKLQl9IGVsc2UgaWYgKGFzb2MtPnN0cl9y
ZXNldF9zZXFfaW4gLSAxID09IHNlcSkgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0
KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7Ci0JfSBlbHNlIGlmIChhc29j
LT5zdHJfcmVzZXRfc2VxX2luIC0gMiA9PSBzZXEpIHsKLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0
X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMV0pOwotCX0gZWxzZSB7
Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIFNDVFBfU1RSRUFNX1JF
U0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKLQl9Ci0Jc2N0cF9zZW5kX3N0cmVhbV9yZXNldF9v
dXRfaWZfcG9zc2libGUoc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLX0KLQotc3RhdGljIGlu
dAotc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3RfdHNuKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKLSAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICpyZXEpCi17Ci0JLyogcmVzZXQgYWxsIGluIGFuZCBvdXQg
YW5kIHVwZGF0ZSB0aGUgdHNuICovCi0JLyoKLQkgKiBBKSByZXNldCBteSBzdHItc2VxJ3Mgb24g
aW4gYW5kIG91dC4gQikgU2VsZWN0IGEgcmVjZWl2ZSBuZXh0LAotCSAqIGFuZCBzZXQgY3VtLWFj
ayB0byBpdC4gQWxzbyBwcm9jZXNzIHRoaXMgc2VsZWN0ZWQgbnVtYmVyIGFzIGEKLQkgKiBmd2Qt
dHNuIGFzIHdlbGwuIEMpIHNldCBpbiB0aGUgcmVzcG9uc2UgbXkgbmV4dCBzZW5kaW5nIHNlcS4K
LQkgKi8KLQlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayBmd2R0c247Ci0Jc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpbnQgYWJvcnRfZmxhZyA9IDA7
Ci0JdWludDMyX3Qgc2VxOwotCi0Jc2VxID0gbnRvaGwocmVxLT5yZXF1ZXN0X3NlcSk7Ci0JaWYg
KGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPT0gc2VxKSB7Ci0JCWFzb2MtPmxhc3RfcmVzZXRfYWN0
aW9uWzFdID0gc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblswXTsKLQkJaWYgKCEoYXNvYy0+
bG9jYWxfc3RycmVzZXRfc3VwcG9ydCAmIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEpKSB7
Ci0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VM
VF9ERU5JRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlmd2R0c24uY2guY2h1bmtfbGVuZ3RoID0gaHRvbnMo
c2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSk7Ci0JCQlmd2R0c24uY2guY2h1
bmtfdHlwZSA9IFNDVFBfRk9SV0FSRF9DVU1fVFNOOwotCQkJZndkdHNuLmNoLmNodW5rX2ZsYWdz
ID0gMDsKLQkJCWZ3ZHRzbi5uZXdfY3VtdWxhdGl2ZV90c24gPSBodG9ubChzdGNiLT5hc29jLmhp
Z2hlc3RfdHNuX2luc2lkZV9tYXAgKyAxKTsKLQkJCXNjdHBfaGFuZGxlX2ZvcndhcmRfdHNuKHN0
Y2IsICZmd2R0c24sICZhYm9ydF9mbGFnLCBOVUxMLCAwKTsKLQkJCWlmIChhYm9ydF9mbGFnKSB7
Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAg
Kz0gU0NUUF9TVFJFQU1fUkVTRVRfVFNOX0RFTFRBOwotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0
cF9sb2dfbWFwKDAsIDEwLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9T
TElERV9SRVNVTFQpOwotCQkJfQotCQkJYXNvYy0+dHNuX2xhc3RfZGVsaXZlcmVkID0gYXNvYy0+
Y3VtdWxhdGl2ZV90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCQkJYXNvYy0+
bWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgKyAx
OwotCQkJbWVtc2V0KGFzb2MtPm1hcHBpbmdfYXJyYXksIDAsIGFzb2MtPm1hcHBpbmdfYXJyYXlf
c2l6ZSk7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID0gYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX21hcDsKLQkJCW1lbXNldChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCAwLCBh
c29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwotCQkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnNlbmRp
bmdfc2VxLCAxKTsKLQkJCS8qIHNhdmUgb2ZmIGhpc3RvcmljYWwgZGF0YSBmb3IgcmV0cmFucyAq
LwotCQkJYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsxXSA9IGFzb2MtPmxhc3Rfc2VuZGluZ19zZXFb
MF07Ci0JCQlhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBdID0gYXNvYy0+c2VuZGluZ19zZXE7Ci0J
CQlhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFsxXSA9IGFzb2MtPmxhc3RfYmFzZV90c25zZW50WzBd
OwotCQkJYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMF0gPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jh
c2VfdHNuOwotCQkJc2N0cF9yZXNldF9vdXRfc3RyZWFtcyhzdGNiLCAwLCAodWludDE2X3QgKikg
TlVMTCk7Ci0JCQlzY3RwX3Jlc2V0X2luX3N0cmVhbShzdGNiLCAwLCAodWludDE2X3QgKikgTlVM
TCk7Ci0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9QRVJGT1JNRUQ7Ci0JCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0Y2IsIGFz
b2MtPnNlbmRpbmdfc2VxLCAoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArIDEpLCAwKTsK
LQkJfQotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihjaGssIHNlcSwgYXNvYy0+
bGFzdF9yZXNldF9hY3Rpb25bMF0sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMF0sIGFzb2MtPmxhc3RfYmFzZV90c25zZW50WzBdKTsK
LQkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOwotCX0gZWxzZSBpZiAoYXNvYy0+c3RyX3Jlc2V0
X3NlcV9pbiAtIDEgPT0gc2VxKSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNu
KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSwKLQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVswXSwgYXNvYy0+bGFzdF9i
YXNlX3RzbnNlbnRbMF0pOwotCX0gZWxzZSBpZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDIg
PT0gc2VxKSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNuKGNoaywgc2VxLCBh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsxXSwgYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRb
MV0pOwotCX0gZWxzZSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEs
IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKLQl9Ci0JcmV0dXJuICgw
KTsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX3N0cl9yZXNldF9yZXF1ZXN0X291dChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAot
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAqcmVxLCBpbnQgdHJ1bmMp
Ci17Ci0JdWludDMyX3Qgc2VxLCB0c247Ci0JaW50IG51bWJlcl9lbnRyaWVzLCBsZW47Ci0Jc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQotCXNlcSA9IG50b2hs
KHJlcS0+cmVxdWVzdF9zZXEpOwotCi0JLyogbm93IGlmIGl0cyBub3QgYSBkdXBsaWNhdGUgd2Ug
cHJvY2VzcyBpdCAqLwotCWlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luID09IHNlcSkgewotCQls
ZW4gPSBudG9ocyhyZXEtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JCW51bWJlcl9lbnRyaWVzID0gKChs
ZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgLyBzaXpl
b2YodWludDE2X3QpKTsKLQkJLyoKLQkJICogdGhlIHNlbmRlciBpcyByZXNldHRpbmcsIGhhbmRs
ZSB0aGUgbGlzdCBpc3N1ZS4uIHdlIG11c3QKLQkJICogYSkgdmVyaWZ5IGlmIHdlIGNhbiBkbyB0
aGUgcmVzZXQsIGlmIHNvIG5vIHByb2JsZW0gYikgSWYKLQkJICogd2UgY2FuJ3QgZG8gdGhlIHJl
c2V0IHdlIG11c3QgY29weSB0aGUgcmVxdWVzdC4gYykgcXVldWUKLQkJICogaXQsIGFuZCBzZXR1
cCB0aGUgZGF0YSBpbiBwcm9jZXNzb3IgdG8gdHJpZ2dlciBpdCBvZmYKLQkJICogd2hlbiBuZWVk
ZWQgYW5kIGRlcXVldWUgYWxsIHRoZSBxdWV1ZWQgZGF0YS4KLQkJICovCi0JCXRzbiA9IG50b2hs
KHJlcS0+c2VuZF9yZXNldF9hdF90c24pOwotCi0JCS8qIG1vdmUgdGhlIHJlc2V0IGFjdGlvbiBi
YWNrIG9uZSAqLwotCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IGFzb2MtPmxhc3RfcmVz
ZXRfYWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ICYgU0NU
UF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSkpIHsKLQkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9u
WzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJfSBlbHNlIGlmICh0cnVu
YykgewotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfREVOSUVEOwotCQl9IGVsc2UgaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVf
dHNuLCB0c24pKSB7Ci0JCQkvKiB3ZSBjYW4gZG8gaXQgbm93ICovCi0JCQlzY3RwX3Jlc2V0X2lu
X3N0cmVhbShzdGNiLCBudW1iZXJfZW50cmllcywgcmVxLT5saXN0X29mX3N0cmVhbXMpOwotCQkJ
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVS
Rk9STUVEOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHdlIG11c3QgcXVldWUgaXQgdXAgYW5k
IHRodXMgd2FpdCBmb3IgdGhlIFRTTidzCi0JCQkgKiB0byBhcnJpdmUgdGhhdCBhcmUgYXQgb3Ig
YmVmb3JlIHRzbgotCQkJICovCi0JCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqbGlz
dGU7Ci0JCQlpbnQgc2l6OwotCi0JCQlzaXogPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2xpc3QpICsgKG51bWJlcl9lbnRyaWVzICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCQlTQ1RQ
X01BTExPQyhsaXN0ZSwgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QgKiwKLQkJCQkgICAg
c2l6LCBTQ1RQX01fU1RSRVNFVCk7Ci0JCQlpZiAobGlzdGUgPT0gTlVMTCkgewotCQkJCS8qIGdh
ayBvdXQgb2YgbWVtb3J5ICovCi0JCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQkJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9y
ZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKLQkJCQlyZXR1cm47
Ci0JCQl9Ci0JCQlsaXN0ZS0+c2VxID0gc2VxOwotCQkJbGlzdGUtPnRzbiA9IHRzbjsKLQkJCWxp
c3RlLT5udW1iZXJfZW50cmllcyA9IG51bWJlcl9lbnRyaWVzOwotCQkJbWVtY3B5KCZsaXN0ZS0+
bGlzdF9vZl9zdHJlYW1zLCByZXEtPmxpc3Rfb2Zfc3RyZWFtcywgbnVtYmVyX2VudHJpZXMgKiBz
aXplb2YodWludDE2X3QpKTsKLQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5yZXNldEhlYWQs
IGxpc3RlLCBuZXh0X3Jlc3ApOwotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfSU5fUFJPR1JFU1M7Ci0JCX0KLQkJc2N0cF9hZGRfc3RyZWFt
X3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOwotCQlh
c29jLT5zdHJfcmVzZXRfc2VxX2luKys7Ci0JfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3Nl
cV9pbiAtIDEpID09IHNlcSkgewotCQkvKgotCQkgKiBvbmUgc2VxIGJhY2ssIGp1c3QgZWNobyBi
YWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15Ci0JCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgotCQkgKi8K
LQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNl
dF9hY3Rpb25bMF0pOwotCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyKSA9
PSBzZXEpIHsKLQkJLyoKLQkJICogdHdvIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFjayBsYXN0IGFj
dGlvbiBzaW5jZSBteQotCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KLQkJICovCi0JCXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFd
KTsKLQl9IGVsc2UgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBT
Q1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7Ci0JfQotfQotCi1zdGF0aWMg
dm9pZAotc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X2FkZF9zdHJtKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotCQkJICAgICAgIHN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9hZGRfc3RybSAgKnN0cl9hZGQpCi17Ci0JLyoKLQkgKiBQZWVyIGlzIHJlcXVl
c3RpbmcgdG8gYWRkIG1vcmUgc3RyZWFtcy4KLQkgKiBJZiBpdHMgd2l0aGluIG91ciBtYXgtc3Ry
ZWFtcyB3ZSB3aWxsCi0JICogYWxsb3cgaXQuCi0JICovCi0JdWludDMyX3QgbnVtX3N0cmVhbSwg
aTsKLQl1aW50MzJfdCBzZXE7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3Rj
Yi0+YXNvYzsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY3RsLCAqbmN0bDsKLQotCS8q
IEdldCB0aGUgbnVtYmVyLiAqLwotCXNlcSA9IG50b2hsKHN0cl9hZGQtPnJlcXVlc3Rfc2VxKTsK
LQludW1fc3RyZWFtID0gbnRvaHMoc3RyX2FkZC0+bnVtYmVyX29mX3N0cmVhbXMpOwotCS8qIE5v
dyB3aGF0IHdvdWxkIGJlIHRoZSBuZXcgdG90YWw/ICovCi0JaWYgKGFzb2MtPnN0cl9yZXNldF9z
ZXFfaW4gPT0gc2VxKSB7Ci0JCW51bV9zdHJlYW0gKz0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsK
LQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IHN0Y2ItPmFzb2MubGFzdF9yZXNl
dF9hY3Rpb25bMF07Ci0JCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQ
X0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRKSkgewotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25b
MF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQl9IGVsc2UgaWYgKChudW1f
c3RyZWFtID4gc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zKSB8fAotCQkgICAgICAgICAg
IChudW1fc3RyZWFtID4gMHhmZmZmKSkgewotCQkJLyogV2UgbXVzdCByZWplY3QgaXQgdGhleSBh
c2sgZm9yIHRvIG1hbnkgKi8KLSAgZGVuaWVkOgotCQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2Fj
dGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7Ci0JCX0gZWxzZSB7Ci0J
CQkvKiBPaywgd2UgY2FuIGRvIHRoYXQgOi0pICovCi0JCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4g
Km9sZHN0cm07Ci0KLQkJCS8qIHNhdmUgb2ZmIHRoZSBvbGQgKi8KLQkJCW9sZHN0cm0gPSBzdGNi
LT5hc29jLnN0cm1pbjsKLQkJCVNDVFBfTUFMTE9DKHN0Y2ItPmFzb2Muc3RybWluLCBzdHJ1Y3Qg
c2N0cF9zdHJlYW1faW4gKiwKLQkJCSAgICAgICAgICAgIChudW1fc3RyZWFtICogc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9pbikpLAotCQkJICAgICAgICAgICAgU0NUUF9NX1NUUk1JKTsKLQkJ
CWlmIChzdGNiLT5hc29jLnN0cm1pbiA9PSBOVUxMKSB7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtaW4g
PSBvbGRzdHJtOwotCQkJCWdvdG8gZGVuaWVkOwotCQkJfQotCQkJLyogY29weSBvZmYgdGhlIG9s
ZCBkYXRhICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsgaSsr
KSB7Ci0JCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtaW5baV0uaW5xdWV1ZSk7Ci0JCQkJ
VEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtaW5baV0udW5vX2lucXVldWUpOwotCQkJCXN0Y2It
PmFzb2Muc3RybWluW2ldLnNpZCA9IGk7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0ubGFzdF9t
aWRfZGVsaXZlcmVkID0gb2xkc3RybVtpXS5sYXN0X21pZF9kZWxpdmVyZWQ7Ci0JCQkJc3RjYi0+
YXNvYy5zdHJtaW5baV0uZGVsaXZlcnlfc3RhcnRlZCA9IG9sZHN0cm1baV0uZGVsaXZlcnlfc3Rh
cnRlZDsKLQkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5wZF9hcGlfc3RhcnRlZCA9IG9sZHN0cm1b
aV0ucGRfYXBpX3N0YXJ0ZWQ7Ci0JCQkJLyogbm93IGFueXRoaW5nIG9uIHRob3NlIHF1ZXVlcz8g
Ki8KLQkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoY3RsLCAmb2xkc3RybVtpXS5pbnF1ZXVlLCBuZXh0
X2luc3RybSwgbmN0bCkgewotCQkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0cm1baV0uaW5xdWV1ZSwg
Y3RsLCBuZXh0X2luc3RybSk7Ci0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnN0
cm1pbltpXS5pbnF1ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKLQkJCQl9Ci0JCQkJVEFJTFFfRk9S
RUFDSF9TQUZFKGN0bCwgJm9sZHN0cm1baV0udW5vX2lucXVldWUsIG5leHRfaW5zdHJtLCBuY3Rs
KSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RybVtpXS51bm9faW5xdWV1ZSwgY3RsLCBuZXh0
X2luc3RybSk7Ci0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnN0cm1pbltpXS51
bm9faW5xdWV1ZSwgY3RsLCBuZXh0X2luc3RybSk7Ci0JCQkJfQotCQkJfQotCQkJLyogSW5pdCB0
aGUgbmV3IHN0cmVhbXMgKi8KLQkJCWZvciAoaSA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7IGkg
PCBudW1fc3RyZWFtOyBpKyspIHsKLQkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltp
XS5pbnF1ZXVlKTsKLQkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltpXS51bm9faW5x
dWV1ZSk7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0uc2lkID0gaTsKLQkJCQlzdGNiLT5hc29j
LnN0cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZmOwotCQkJCXN0Y2ItPmFz
b2Muc3RybWluW2ldLnBkX2FwaV9zdGFydGVkID0gMDsKLQkJCQlzdGNiLT5hc29jLnN0cm1pbltp
XS5kZWxpdmVyeV9zdGFydGVkID0gMDsKLQkJCX0KLQkJCVNDVFBfRlJFRShvbGRzdHJtLCBTQ1RQ
X01fU1RSTUkpOwotCQkJLyogdXBkYXRlIHRoZSBzaXplICovCi0JCQlzdGNiLT5hc29jLnN0cmVh
bWluY250ID0gbnVtX3N0cmVhbTsKLQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0g
PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEOwotCQkJc2N0cF9ub3RpZnlfc3Ry
ZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29jLnN0
cmVhbW91dGNudCwgMCk7Ci0JCX0KLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGss
IHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOwotCQlhc29jLT5zdHJfcmVzZXRfc2Vx
X2luKys7Ci0JfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDEpID09IHNlcSkg
ewotCQkvKgotCQkgKiBvbmUgc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9uIHNp
bmNlIG15Ci0JCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgotCQkgKi8KLQkJc2N0cF9hZGRfc3RyZWFt
X3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOwotCX0g
ZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyKSA9PSBzZXEpIHsKLQkJLyoKLQkJ
ICogdHdvIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQotCQkg
KiByZXNwb25zZSB3YXMgbG9zdC4KLQkJICovCi0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1
bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdKTsKLQl9IGVsc2UgewotCQlz
Y3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfRVJSX0JBRF9TRVFOTyk7Ci0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRs
ZV9zdHJfcmVzZXRfYWRkX291dF9zdHJtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrLAotCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRf
c3RybSAgKnN0cl9hZGQpCi17Ci0JLyoKLQkgKiBQZWVyIGlzIHJlcXVlc3RpbmcgdG8gYWRkIG1v
cmUgc3RyZWFtcy4KLQkgKiBJZiBpdHMgd2l0aGluIG91ciBtYXgtc3RyZWFtcyB3ZSB3aWxsCi0J
ICogYWxsb3cgaXQuCi0JICovCi0JdWludDE2X3QgbnVtX3N0cmVhbTsKLQl1aW50MzJfdCBzZXE7
Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQotCS8qIEdl
dCB0aGUgbnVtYmVyLiAqLwotCXNlcSA9IG50b2hsKHN0cl9hZGQtPnJlcXVlc3Rfc2VxKTsKLQlu
dW1fc3RyZWFtID0gbnRvaHMoc3RyX2FkZC0+bnVtYmVyX29mX3N0cmVhbXMpOwotCS8qIE5vdyB3
aGF0IHdvdWxkIGJlIHRoZSBuZXcgdG90YWw/ICovCi0JaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFf
aW4gPT0gc2VxKSB7Ci0JCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMV0gPSBzdGNiLT5h
c29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNldF9z
dXBwb3J0ICYgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSkpIHsKLQkJCWFzb2MtPmxhc3Rf
cmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJfSBl
bHNlIGlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykgewotCQkJLyogV2Ug
bXVzdCByZWplY3QgaXQgd2UgaGF2ZSBzb21ldGhpbmcgcGVuZGluZyAqLwotCQkJc3RjYi0+YXNv
Yy5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfSU5f
UFJPR1JFU1M7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPaywgd2UgY2FuIGRvIHRoYXQgOi0pICovCi0J
CQlpbnQgbXljaGs7Ci0JCQlteWNoayA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OwotCQkJbXlj
aGsgKz0gbnVtX3N0cmVhbTsKLQkJCWlmIChteWNoayA8IDB4MTAwMDApIHsKLQkJCQlzdGNiLT5h
c29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZP
Uk1FRDsKLQkJCQlpZiAoc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RjYiwgMCwgTlVMTCwgMCwg
MCwgMSwgbnVtX3N0cmVhbSwgMCwgMSkpIHsKLQkJCQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2Fj
dGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7Ci0JCQkJfQotCQkJfSBl
bHNlIHsKLQkJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1f
UkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJCX0KLQkJfQotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRf
cmVzdWx0KGNoaywgc2VxLCBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKLQkJYXNv
Yy0+c3RyX3Jlc2V0X3NlcV9pbisrOwotCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFf
aW4gLSAxKSA9PSBzZXEpIHsKLQkJLyoKLQkJICogb25lIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFj
ayBsYXN0IGFjdGlvbiBzaW5jZSBteQotCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KLQkJICovCi0J
CXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRf
YWN0aW9uWzBdKTsKLQl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMikgPT0g
c2VxKSB7Ci0JCS8qCi0JCSAqIHR3byBzZXEgYmFjaywganVzdCBlY2hvIGJhY2sgbGFzdCBhY3Rp
b24gc2luY2UgbXkKLQkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCi0JCSAqLwotCQlzY3RwX2FkZF9z
dHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSk7
Ci0JfSBlbHNlIHsKLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgU0NU
UF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOwotCX0KLX0KLQotI2lmICFkZWZp
bmVkKF9fUGFuZGFfXykKLSNpZmRlZiBfX0dOVUNfXwotX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5l
KSkKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgaW50Ci1zY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwKLQkJCSBz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2hfcmVxKQotewotCXVpbnQxNl90IHJlbWFpbmluZ19sZW5n
dGgsIHBhcmFtX2xlbiwgcHR5cGU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcHN0b3JlOwotCXVp
bnQ4X3QgY3N0b3JlW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOwotCXVpbnQzMl90IHNlcSA9IDA7
Ci0JaW50IG51bV9yZXEgPSAwOwotCWludCB0cnVuYyA9IDA7Ci0Jc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciAqcGg7Ci0JaW50IHJldF9jb2RlID0gMDsKLQlpbnQgbnVtX3BhcmFtID0gMDsKLQotCS8q
IG5vdyBpdCBtYXkgYmUgYSByZXNldCBvciBhIHJlc2V0LXJlc3BvbnNlICovCi0JcmVtYWluaW5n
X2xlbmd0aCA9IG50b2hzKGNoX3JlcS0+Y2h1bmtfbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0
cF9jaHVua2hkcik7Ci0KLQkvKiBzZXR1cCBmb3IgYWRkaW5nIHRoZSByZXNwb25zZSAqLwotCXNj
dHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQlyZXR1
cm4gKHJldF9jb2RlKTsKLQl9Ci0JY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFr
ZV9kYXRhID0gMDsKLQljaGstPmZsYWdzID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsK
LQljaGstPm5vX2ZyX2FsbG93ZWQgPSAwOwotCWNoay0+Ym9va19zaXplID0gY2hrLT5zZW5kX3Np
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCWNoay0+Ym9va19zaXplX3NjYWxl
ID0gMDsKLQljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1f
Tk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQlzdHJyZXNf
bm9jaHVuazoKLQkJaWYgKGNoay0+ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7
Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQl9Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNo
aywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuIChyZXRfY29kZSk7Ci0JfQotCVNDVFBf
QlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0KLQkvKiBzZXR1cCBj
aHVuayBwYXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0J
Y2hrLT5zbmRfY291bnQgPSAwOwotCWNoay0+d2hvVG8gPSBOVUxMOwotCi0JY2ggPSBtdG9kKGNo
ay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNodW5rX3R5cGUgPSBTQ1RQ
X1NUUkVBTV9SRVNFVDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNoLT5jaHVua19sZW5ndGgg
PSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBTQ1RQ
X1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7Ci0Jb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9j
aHVua2hkcik7Ci0Jd2hpbGUgKHJlbWFpbmluZ19sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKSkgewotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRw
dHIobSwgb2Zmc2V0LCBzaXplb2YocHN0b3JlKSwgKHVpbnQ4X3QgKikmcHN0b3JlKTsKLQkJaWYg
KHBoID09IE5VTEwpIHsKLQkJCS8qIFRTTkggKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXBhcmFtX2xl
biA9IG50b2hzKHBoLT5wYXJhbV9sZW5ndGgpOwotCQlpZiAoKHBhcmFtX2xlbiA+IHJlbWFpbmlu
Z19sZW5ndGgpIHx8Ci0JCSAgICAocGFyYW1fbGVuIDwgKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkcikgKyBzaXplb2YodWludDMyX3QpKSkpIHsKLQkJCS8qIGJhZCBwYXJhbWV0ZXIgbGVuZ3Ro
ICovCi0JCQlicmVhazsKLQkJfQotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBf
bV9nZXRwdHIobSwgb2Zmc2V0LCBtaW4ocGFyYW1fbGVuLCBzaXplb2YoY3N0b3JlKSksCi0JCQkJ
CQkJICAgKHVpbnQ4X3QgKikmY3N0b3JlKTsKLQkJaWYgKHBoID09IE5VTEwpIHsKLQkJCS8qIFRT
TkggKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXB0eXBlID0gbnRvaHMocGgtPnBhcmFtX3R5cGUpOwot
CQludW1fcGFyYW0rKzsKLQkJaWYgKHBhcmFtX2xlbiA+IHNpemVvZihjc3RvcmUpKSB7Ci0JCQl0
cnVuYyA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQl0cnVuYyA9IDA7Ci0JCX0KLQkJaWYgKG51bV9wYXJh
bSA+IFNDVFBfTUFYX1JFU0VUX1BBUkFNUykgewotCQkJLyogaGl0IHRoZSBtYXggb2YgcGFyYW1l
dGVycyBhbHJlYWR5IHNvcnJ5Li4gKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChwdHlwZSA9PSBT
Q1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVCkgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X291dF9yZXF1ZXN0ICpyZXFfb3V0OwotCi0JCQlpZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
CXJlcV9vdXQgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICopcGg7Ci0J
CQludW1fcmVxKys7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcp
IHsKLQkJCQlzZXEgPSBudG9obChyZXFfb3V0LT5yZXNwb25zZV9zZXEpOwotCQkJCWlmIChzZXEg
PT0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dCkgewotCQkJCQkvKiBpbXBsaWNpdCBhY2sg
Ki8KLQkJCQkJKHZvaWQpc2N0cF9oYW5kbGVfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlKHN0Y2IsIHNl
cSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCwgTlVMTCk7Ci0JCQkJfQotCQkJ
fQotCQkJc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3Rfb3V0KHN0Y2IsIGNoaywgcmVxX291
dCwgdHJ1bmMpOwotCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX0FERF9PVVRf
U1RSRUFNUykgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAqc3RyX2Fk
ZDsKLQotCQkJaWYgKHBhcmFtX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
YWRkX3N0cm0pKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzdHJfYWRkID0gKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9hZGRfc3RybSAgKilwaDsKLQkJCW51bV9yZXErKzsKLQkJCXNjdHBfaGFu
ZGxlX3N0cl9yZXNldF9hZGRfc3RybShzdGNiLCBjaGssIHN0cl9hZGQpOwotCQl9IGVsc2UgaWYg
KHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX0FERF9JTl9TVFJFQU1TKSB7Ci0JCQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICpzdHJfYWRkOwotCi0JCQlpZiAocGFyYW1fbGVuIDwg
c2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSkpIHsKLQkJCQlicmVhazsK
LQkJCX0KLQkJCXN0cl9hZGQgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAq
KXBoOwotCQkJbnVtX3JlcSsrOwotCQkJc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X2FkZF9vdXRfc3Ry
bShzdGNiLCBjaGssIHN0cl9hZGQpOwotCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JF
U0VUX0lOX1JFUVVFU1QpIHsKLQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0
ICpyZXFfaW47Ci0KLQkJCW51bV9yZXErKzsKLQkJCXJlcV9pbiA9IChzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfaW5fcmVxdWVzdCAqKXBoOwotCQkJc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVl
c3RfaW4oc3RjYiwgY2hrLCByZXFfaW4sIHRydW5jKTsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBT
Q1RQX1NUUl9SRVNFVF9UU05fUkVRVUVTVCkgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X3Rzbl9yZXF1ZXN0ICpyZXFfdHNuOwotCi0JCQludW1fcmVxKys7Ci0JCQlyZXFfdHNuID0gKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqKXBoOwotCQkJaWYgKHNjdHBfaGFu
ZGxlX3N0cl9yZXNldF9yZXF1ZXN0X3RzbihzdGNiLCBjaGssIHJlcV90c24pKSB7Ci0JCQkJcmV0
X2NvZGUgPSAxOwotCQkJCWdvdG8gc3RycmVzX25vY2h1bms7Ci0JCQl9Ci0JCQkvKiBubyBtb3Jl
ICovCi0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9SRVNQ
T05TRSkgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICpyZXNwOwotCQkJ
dWludDMyX3QgcmVzdWx0OwotCi0JCQlpZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9yZXNwb25zZSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJlc3AgPSAo
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICopcGg7Ci0JCQlzZXEgPSBudG9obChy
ZXNwLT5yZXNwb25zZV9zZXEpOwotCQkJcmVzdWx0ID0gbnRvaGwocmVzcC0+cmVzdWx0KTsKLQkJ
CWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3RjYiwgc2VxLCByZXN1bHQs
IHJlc3ApKSB7Ci0JCQkJcmV0X2NvZGUgPSAxOwotCQkJCWdvdG8gc3RycmVzX25vY2h1bms7Ci0J
CQl9Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIo
cGFyYW1fbGVuKTsKLQkJaWYgKHJlbWFpbmluZ19sZW5ndGggPj0gU0NUUF9TSVpFMzIocGFyYW1f
bGVuKSkgewotCQkJcmVtYWluaW5nX2xlbmd0aCAtPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW4pOwot
CQl9IGVsc2UgewotCQkJcmVtYWluaW5nX2xlbmd0aCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKG51bV9y
ZXEgPT0gMCkgewotCQkvKiB3ZSBoYXZlIG5vIHJlc3BvbnNlIGZyZWUgdGhlIHN0dWZmICovCi0J
CWdvdG8gc3RycmVzX25vY2h1bms7Ci0JfQotCS8qIG9rIHdlIGhhdmUgYSBjaHVuayB0byBsaW5r
IGluICovCi0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVl
LAotCQkJICBjaGssCi0JCQkgIHNjdHBfbmV4dCk7Ci0Jc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2Nu
dCsrOwotCXJldHVybiAocmV0X2NvZGUpOwotfQotCi0vKgotICogSGFuZGxlIGEgcm91dGVyIG9y
IGVuZHBvaW50cyByZXBvcnQgb2YgYSBwYWNrZXQgbG9zcywgdGhlcmUgYXJlIHR3byB3YXlzCi0g
KiB0byBoYW5kbGUgdGhpcywgZWl0aGVyIHdlIGdldCB0aGUgd2hvbGUgcGFja2V0IGFuZCBtdXN0
IGRpc2VjdCBpdAotICogb3Vyc2VsdmVzIChwb3NzaWJseSB3aXRoIHRydW5jYXRpb24gYW5kIG9y
IGNvcnJ1cHRpb24pIG9yIGl0IGlzIGEgc3VtbWFyeQotICogZnJvbSBhIG1pZGRsZSBib3ggdGhh
dCBkaWQgdGhlIGRpc2VjdHRpbmcgZm9yIHVzLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5k
bGVfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayAqY3AsCi0gICAgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90IGxpbWl0
KQotewotCXVpbnQzMl90IGJvdHRsZV9idywgb25fcXVldWU7Ci0JdWludDE2X3QgdHJ1bmNfbGVu
OwotCXVuc2lnbmVkIGludCBjaGxlbjsKLQl1bnNpZ25lZCBpbnQgYXQ7Ci0Jc3RydWN0IHNjdHBf
Y2h1bmtfZGVzYyBkZXNjOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQotCWNobGVuID0g
bnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7Ci0JY2hsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BrdGRyb3BfY2h1bmspOwotCS8qIFhYWCBwb3NzaWJsZSBjaGxlbiB1bmRlcmZsb3cgKi8KLQlp
ZiAoY2hsZW4gPT0gMCkgewotCQljaCA9IE5VTEw7Ci0JCWlmIChjcC0+Y2guY2h1bmtfZmxhZ3Mg
JiBTQ1RQX0ZST01fTUlERExFX0JPWCkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBid3Jw
dCk7Ci0JfSBlbHNlIHsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoY3AtPmRhdGEg
KyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQkJY2hsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKTsKLQkJLyogWFhYIHBvc3NpYmxlIGNobGVuIHVuZGVyZmxvdyAqLwotCQltZW1zZXQoJmRl
c2MsIDAsIHNpemVvZihkZXNjKSk7Ci0JfQotCXRydW5jX2xlbiA9ICh1aW50MTZfdCkgbnRvaHMo
Y3AtPnRydW5jX2xlbik7Ci0JaWYgKHRydW5jX2xlbiA+IGxpbWl0KSB7Ci0JCXRydW5jX2xlbiA9
IGxpbWl0OwotCX0KLQotCS8qIG5vdyB0aGUgY2h1bmtzIHRoZW1zZWx2ZXMgKi8KLQl3aGlsZSAo
KGNoICE9IE5VTEwpICYmIChjaGxlbiA+PSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSkg
ewotCQlkZXNjLmNodW5rX3R5cGUgPSBjaC0+Y2h1bmtfdHlwZTsKLQkJLyogZ2V0IGFtb3VudCB3
ZSBuZWVkIHRvIG1vdmUgKi8KLQkJYXQgPSBudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKTsKLQkJaWYg
KGF0IDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgewotCQkJLyogY29ycnVwdCBjaHVu
aywgbWF5YmUgYXQgdGhlIGVuZD8gKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBjcnVw
dCk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodHJ1bmNfbGVuID09IDApIHsKLQkJCS8qIHdlIGFy
ZSBzdXBwb3NlZCB0byBoYXZlIGFsbCBvZiBpdCAqLwotCQkJaWYgKGF0ID4gY2hsZW4pIHsKLQkJ
CQkvKiBjb3JydXB0IHNraXAgaXQgKi8KLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwY3J1
cHQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogaXMgdGhlcmUgZW5vdWdo
IG9mIGl0IGxlZnQgPyAqLwotCQkJaWYgKGRlc2MuY2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHsK
LQkJCQlpZiAoY2hsZW4gPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsKLQkJCQkg
ICAgc2l6ZW9mKGRlc2MuZGF0YV9ieXRlcykpKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0g
ZWxzZSB7Ci0JCQkJaWYgKGNobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgewot
CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGRlc2MuY2h1bmtfdHlwZSA9PSBT
Q1RQX0RBVEEpIHsKLQkJCS8qIGNhbiB3ZSBnZXQgb3V0IHRoZSB0c24/ICovCi0JCQlpZiAoKGNw
LT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSkKLQkJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19wZHJwbWJkYSk7Ci0KLQkJCWlmIChjaGxlbiA+PSAoc2l6ZW9mKHN0cnVjdCBz
Y3RwX2RhdGFfY2h1bmspICsgc2l6ZW9mKHVpbnQzMl90KSkpIHsKLQkJCQkvKiB5ZXAgKi8KLQkJ
CQlzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICpkY3A7Ci0JCQkJdWludDhfdCAqZGRwOwotCQkJCXVu
c2lnbmVkIGludCBpaWk7Ci0KLQkJCQlkY3AgPSAoc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqKWNo
OwotCQkJCWRkcCA9ICh1aW50OF90ICopIChkY3AgKyAxKTsKLQkJCQlmb3IgKGlpaSA9IDA7IGlp
aSA8IHNpemVvZihkZXNjLmRhdGFfYnl0ZXMpOyBpaWkrKykgewotCQkJCQlkZXNjLmRhdGFfYnl0
ZXNbaWlpXSA9IGRkcFtpaWldOwotCQkJCX0KLQkJCQlkZXNjLnRzbl9pZmFueSA9IGRjcC0+ZHAu
dHNuOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBub3BlIHdlIGFyZSBkb25lLiAqLwotCQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3BkcnBuZWRhdCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0gZWxzZSB7
Ci0JCQlpZiAoKGNwLT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSkKLQkJ
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwbWJjdCk7Ci0JCX0KLQotCQlpZiAocHJvY2Vzc19j
aHVua19kcm9wKHN0Y2IsICZkZXNjLCBuZXQsIGNwLT5jaC5jaHVua19mbGFncykpIHsKLQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBwZGJyayk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoU0NU
UF9TSVpFMzIoYXQpID4gY2hsZW4pIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWNobGVuIC09IFNDVFBf
U0laRTMyKGF0KTsKLQkJaWYgKGNobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkg
ewotCQkJLyogZG9uZSwgbm9uZSBsZWZ0ICovCi0JCQlicmVhazsKLQkJfQotCQljaCA9IChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdCljaCArIFNDVFBfU0laRTMyKGF0KSk7Ci0JfQot
CS8qIE5vdyB1cGRhdGUgYW55IHJ3bmQgLS0tIHBvc3NpYmx5ICovCi0JaWYgKChjcC0+Y2guY2h1
bmtfZmxhZ3MgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkgPT0gMCkgewotCQkvKiBGcm9tIGEgcGVl
ciwgd2UgZ2V0IGEgcnduZCByZXBvcnQgKi8KLQkJdWludDMyX3QgYV9yd25kOwotCi0JCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3BkcnBmZWhvcyk7Ci0KLQkJYm90dGxlX2J3ID0gbnRvaGwoY3AtPmJv
dHRsZV9idyk7Ci0JCW9uX3F1ZXVlID0gbnRvaGwoY3AtPmN1cnJlbnRfb25xKTsKLQkJaWYgKGJv
dHRsZV9idyAmJiBvbl9xdWV1ZSkgewotCQkJLyogYSByd25kIHJlcG9ydCBpcyBpbiBoZXJlICov
Ci0JCQlpZiAoYm90dGxlX2J3ID4gb25fcXVldWUpCi0JCQkJYV9yd25kID0gYm90dGxlX2J3IC0g
b25fcXVldWU7Ci0JCQllbHNlCi0JCQkJYV9yd25kID0gMDsKLQotCQkJaWYgKGFfcnduZCA9PSAw
KQotCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7Ci0JCQllbHNlIHsKLQkJCQlpZiAoYV9y
d25kID4gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpIHsKLQkJCQkJc3RjYi0+YXNvYy5wZWVyc19y
d25kID0KLQkJCQkJICAgIGFfcnduZCAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OwotCQkJCX0g
ZWxzZSB7Ci0JCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7Ci0JCQkJfQotCQkJCWlmIChz
dGNiLT5hc29jLnBlZXJzX3J3bmQgPAotCQkJCSAgICBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNj
dHBfc3dzX3NlbmRlcikgewotCQkJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQkJ
CQlzdGNiLT5hc29jLnBlZXJzX3J3bmQgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7
Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBmbWJveCk7Ci0JfQotCi0JLyogbm93IG1pZGRs
ZSBib3hlcyBpbiBzYXQgbmV0d29ya3MgZ2V0IGEgY3duZCBidW1wICovCi0JaWYgKChjcC0+Y2gu
Y2h1bmtfZmxhZ3MgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkgJiYKLQkgICAgKHN0Y2ItPmFzb2Mu
c2F0X3QzX2xvc3NfcmVjb3ZlcnkgPT0gMCkgJiYKLQkgICAgKHN0Y2ItPmFzb2Muc2F0X25ldHdv
cmspKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgZGViYXRhYmxlIGJ1dCBmb3Igc2F0IG5ldHdvcmtz
IGl0IG1ha2VzIHNlbnNlCi0JCSAqIE5vdGUgaWYgYSBUMyB0aW1lciBoYXMgd2VudCBvZmYsIHdl
IHdpbGwgcHJvaGliaXQgYW55Ci0JCSAqIGNoYW5nZXMgdG8gY3duZCB1bnRpbCB3ZSBleGl0IHRo
ZSB0MyBsb3NzIHJlY292ZXJ5LgotCQkgKi8KLQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZChzdGNiLAotCQkJbmV0LCBjcCwgJmJv
dHRsZV9idywgJm9uX3F1ZXVlKTsKLQl9Ci19Ci0KLS8qCi0gKiBoYW5kbGVzIGFsbCBjb250cm9s
IGNodW5rcyBpbiBhIHBhY2tldCBpbnB1dHM6IC0gbTogbWJ1ZiBjaGFpbiwgYXNzdW1lZCB0bwot
ICogc3RpbGwgY29udGFpbiBJUC9TQ1RQIGhlYWRlciAtIHN0Y2I6IGlzIHRoZSB0Y2IgZm91bmQg
Zm9yIHRoaXMgcGFja2V0IC0KLSAqIG9mZnNldDogb2Zmc2V0IGludG8gdGhlIG1idWYgY2hhaW4g
dG8gZmlyc3QgY2h1bmtoZHIgLSBsZW5ndGg6IGlzIHRoZQotICogbGVuZ3RoIG9mIHRoZSBjb21w
bGV0ZSBwYWNrZXQgb3V0cHV0czogLSBsZW5ndGg6IG1vZGlmaWVkIHRvIHJlbWFpbmluZwotICog
bGVuZ3RoIGFmdGVyIGNvbnRyb2wgcHJvY2Vzc2luZyAtIG5ldHA6IG1vZGlmaWVkIHRvIG5ldyBz
Y3RwX25ldHMgYWZ0ZXIKLSAqIGNvb2tpZS1lY2hvIHByb2Nlc3NpbmcgLSByZXR1cm4gTlVMTCB0
byBkaXNjYXJkIHRoZSBwYWNrZXQgKGllLiBubyBhc29jLAotICogYmFkIHBhY2tldCwuLi4pIG90
aGVyd2lzZSByZXR1cm4gdGhlIHRjYiBmb3IgdGhpcyBwYWNrZXQKLSAqLwotI2lmICFkZWZpbmVk
KF9fUGFuZGFfXykKLSNpZmRlZiBfX0dOVUNfXwotX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkK
LSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfcHJvY2Vzc19j
b250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0
aCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAg
c3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICoqbmV0cCwgaW50ICpmd2RfdHNuX3NlZW4sCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAg
ICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWludDE2X3QgZmlibnVtLAot
I2VuZGlmCi0gICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQotewotCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JY2hhciBtc2db
U0NUUF9ESUFHX0lORk9fTEVOXTsKLQl1aW50MzJfdCB2dGFnX2luOwotCWludCBudW1fY2h1bmtz
ID0gMDsJLyogbnVtYmVyIG9mIGNvbnRyb2wgY2h1bmtzIHByb2Nlc3NlZCAqLwotCXVpbnQzMl90
IGNoa19sZW5ndGg7Ci0JaW50IHJldDsKLQlpbnQgYWJvcnRfbm9fdW5sb2NrID0gMDsKLQlpbnQg
ZWNuZV9zZWVuID0gMDsKLQkvKgotCSAqIEhvdyBiaWcgc2hvdWxkIHRoaXMgYmUsIGFuZCBzaG91
bGQgaXQgYmUgYWxsb2MnZD8gTGV0cyB0cnkgdGhlCi0JICogZC1tdHUtY2VpbGluZyBmb3Igbm93
ICgyaykgYW5kIHRoYXQgc2hvdWxkIGhvcGVmdWxseSB3b3JrIC4uLgotCSAqIHVudGlsIHdlIGdl
dCBpbnRvIGp1bWJvIGdyYW1zIGFuZCBzdWNoLi4KLQkgKi8KLQl1aW50OF90IGNodW5rX2J1ZltT
Q1RQX0NIVU5LX0JVRkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2tlZF90Y2IgPSBz
dGNiOwotCWludCBnb3RfYXV0aCA9IDA7Ci0JdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwLCBhdXRo
X2xlbiA9IDA7Ci0JaW50IGF1dGhfc2tpcHBlZCA9IDA7Ci0JaW50IGFzY29uZl9jbnQgPSAwOwot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQot
CXN0cnVjdCBzb2NrZXQgKnNvOwotI2VuZGlmCi0KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQx
LCAic2N0cF9wcm9jZXNzX2NvbnRyb2w6IGlwaGxlbj0ldSwgb2Zmc2V0PSV1LCBsZW5ndGg9JXUg
c3RjYjolcFxuIiwKLQkJaXBobGVuLCAqb2Zmc2V0LCBsZW5ndGgsICh2b2lkICopc3RjYik7Ci0K
LQkvKiB2YWxpZGF0ZSBjaHVuayBoZWFkZXIgbGVuZ3RoLi4uICovCi0JaWYgKG50b2hzKGNoLT5j
aHVua19sZW5ndGgpIDwgc2l6ZW9mKCpjaCkpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MSwgIkludmFsaWQgaGVhZGVyIGxlbmd0aCAlZFxuIiwKLQkJCW50b2hzKGNoLT5jaHVua19sZW5n
dGgpKTsKLQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNi
KTsKLQkJfQotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIHZhbGlkYXRlIHRoZSB2ZXJp
ZmljYXRpb24gdGFnCi0JICovCi0JdnRhZ19pbiA9IG50b2hsKHNoLT52X3RhZyk7Ci0KLQlpZiAo
bG9ja2VkX3RjYikgewotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChsb2NrZWRfdGNiKTsKLQl9Ci0J
aWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElBVElPTikgewotCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQxLCAiSXRzIGFuIElOSVQgb2YgbGVuOiVkIHZ0YWc6JXhcbiIsCi0JCQludG9o
cyhjaC0+Y2h1bmtfbGVuZ3RoKSwgdnRhZ19pbik7Ci0JCWlmICh2dGFnX2luICE9IDApIHsKLQkJ
CS8qIHByb3RvY29sIGVycm9yLSBzaWxlbnRseSBkaXNjYXJkLi4uICovCi0JCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19iYWR2dGFnKTsKLQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJU0NUUF9UQ0Jf
VU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCX0gZWxz
ZSBpZiAoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9DT09LSUVfRUNITykgewotCQkvKgotCQkgKiBJ
ZiB0aGVyZSBpcyBubyBzdGNiLCBza2lwIHRoZSBBVVRIIGNodW5rIGFuZCBwcm9jZXNzCi0JCSAq
IGxhdGVyIGFmdGVyIGEgc3RjYiBpcyBmb3VuZCAodG8gdmFsaWRhdGUgdGhlIGxvb2t1cCB3YXMK
LQkJICogdmFsaWQuCi0JCSAqLwotCQlpZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfQVVUSEVO
VElDQVRJT04pICYmCi0JCSAgICAoc3RjYiA9PSBOVUxMKSAmJgotCQkgICAgKGlucC0+YXV0aF9z
dXBwb3J0ZWQgPT0gMSkpIHsKLQkJCS8qIHNhdmUgdGhpcyBjaHVuayBmb3IgbGF0ZXIgcHJvY2Vz
c2luZyAqLwotCQkJYXV0aF9za2lwcGVkID0gMTsKLQkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsK
LQkJCWF1dGhfbGVuID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7Ci0KLQkJCS8qICh0ZW1wb3Jh
cmlseSkgbW92ZSBwYXN0IHRoaXMgY2h1bmsgKi8KLQkJCSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIo
YXV0aF9sZW4pOwotCQkJaWYgKCpvZmZzZXQgPj0gbGVuZ3RoKSB7Ci0JCQkJLyogbm8gbW9yZSBk
YXRhIGxlZnQgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJ
CWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJ
CQl9Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5r
aGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkJCQkJCQkgICBzaXplb2Yoc3RydWN0
IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOwotCQl9Ci0JCWlmIChjaCA9PSBOVUxMKSB7Ci0J
CQkvKiBIZWxwICovCi0JCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJaWYgKGxvY2tlZF90Y2IpIHsK
LQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQl9Ci0JCQlyZXR1cm4gKE5VTEwp
OwotCQl9Ci0JCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0NPT0tJRV9FQ0hPKSB7Ci0JCQln
b3RvIHByb2Nlc3NfY29udHJvbF9jaHVua3M7Ci0JCX0KLQkJLyoKLQkJICogZmlyc3QgY2hlY2sg
aWYgaXQncyBhbiBBU0NPTkYgd2l0aCBhbiB1bmtub3duIHNyYyBhZGRyIHdlCi0JCSAqIG5lZWQg
dG8gbG9vayBpbnNpZGUgdG8gZmluZCB0aGUgYXNzb2NpYXRpb24KLQkJICovCi0JCWlmIChjaC0+
Y2h1bmtfdHlwZSA9PSBTQ1RQX0FTQ09ORiAmJiBzdGNiID09IE5VTEwpIHsKLQkJCXN0cnVjdCBz
Y3RwX2NodW5raGRyICphc2NvbmZfY2ggPSBjaDsKLQkJCXVpbnQzMl90IGFzY29uZl9vZmZzZXQg
PSAwLCBhc2NvbmZfbGVuID0gMDsKLQotCQkJLyogaW5wJ3MgcmVmY291bnQgbWF5IGJlIHJlZHVj
ZWQgKi8KLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0KLQkJCWFzY29uZl9vZmZzZXQgPSAq
b2Zmc2V0OwotCQkJZG8gewotCQkJCWFzY29uZl9sZW4gPSBudG9ocyhhc2NvbmZfY2gtPmNodW5r
X2xlbmd0aCk7Ci0JCQkJaWYgKGFzY29uZl9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyKSkKLQkJCQkJYnJlYWs7Ci0JCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2FzY29uZihtLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Km9mZnNldCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRzdCwK
LQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCAmaW5wLCBuZXRw
LCB2cmZfaWQpOwotCQkJCWlmIChzdGNiICE9IE5VTEwpCi0JCQkJCWJyZWFrOwotCQkJCWFzY29u
Zl9vZmZzZXQgKz0gU0NUUF9TSVpFMzIoYXNjb25mX2xlbik7Ci0JCQkJYXNjb25mX2NoID0gKHN0
cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBhc2NvbmZfb2Zmc2V0LAotCQkJ
CQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgY2h1bmtfYnVmKTsKLQkJCX0g
d2hpbGUgKGFzY29uZl9jaCAhPSBOVUxMICYmIGFzY29uZl9jaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQ
X0FTQ09ORik7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiByZWR1Y2Ug
aW5wJ3MgcmVmY291bnQgaWYgbm90IHJlZHVjZWQgaW4KLQkJCQkgKiBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hc2NvbmYoKS4KLQkJCQkgKi8KLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwot
CQkJfSBlbHNlIHsKLQkJCQlsb2NrZWRfdGNiID0gc3RjYjsKLQkJCX0KLQotCQkJLyogbm93IGdv
IGJhY2sgYW5kIHZlcmlmeSBhbnkgYXV0aCBjaHVuayB0byBiZSBzdXJlICovCi0JCQlpZiAoYXV0
aF9za2lwcGVkICYmIChzdGNiICE9IE5VTEwpKSB7Ci0JCQkJc3RydWN0IHNjdHBfYXV0aF9jaHVu
ayAqYXV0aDsKLQotCQkJCWF1dGggPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKQotCQkJCQlz
Y3RwX21fZ2V0cHRyKG0sIGF1dGhfb2Zmc2V0LAotCQkJCQkJICAgICAgYXV0aF9sZW4sIGNodW5r
X2J1Zik7Ci0JCQkJZ290X2F1dGggPSAxOwotCQkJCWF1dGhfc2tpcHBlZCA9IDA7Ci0JCQkJaWYg
KChhdXRoID09IE5VTEwpIHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgYXV0aCwgbSwKLQkJCQkJ
CQkJICAgICAgIGF1dGhfb2Zmc2V0KSkgewotCQkJCQkvKiBhdXRoIEhNQUMgZmFpbGVkIHNvIGR1
bXAgaXQgKi8KLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsK
LQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHJlbWFpbmluZyBjaHVua3MgYXJlIEhNQUMg
Y2hlY2tlZCAqLwotCQkJCQlzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQgPSAxOwotCQkJCX0KLQkJ
CX0KLQkJfQotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZiht
c2cpLCAiT09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsK
LQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Rp
YWdfaW5mb19jb2RlKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKLQkJ
CS8qIG5vIGFzc29jaWF0aW9uLCBzbyBpdCdzIG91dCBvZiB0aGUgYmx1ZS4uLiAqLwotCQkJc2N0
cF9oYW5kbGVfb290YihtLCBpcGhsZW4sICpvZmZzZXQsIHNyYywgZHN0LCBzaCwgaW5wLCBvcF9l
cnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCSAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgotCQkJCQkgdnJmX2lkLCBwb3J0KTsK
LQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlpZiAobG9ja2VkX3RjYikgewotCQkJCVNDVFBfVENC
X1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCX0KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJYXNv
YyA9ICZzdGNiLT5hc29jOwotCQkvKiBBQk9SVCBhbmQgU0hVVERPV04gY2FuIHVzZSBlaXRoZXIg
dl90YWcuLi4gKi8KLQkJaWYgKChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0FCT1JUX0FTU09DSUFU
SU9OKSB8fAotCQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0hVVERPV05fQ09NUExFVEUp
IHx8Ci0JCSAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9QQUNLRVRfRFJPUFBFRCkpIHsKLQkJ
CS8qIFRha2UgdGhlIFQtYml0IGFsd2F5cyBpbnRvIGFjY291bnQuICovCi0JCQlpZiAoKCgoY2gt
PmNodW5rX2ZsYWdzICYgU0NUUF9IQURfTk9fVENCKSA9PSAwKSAmJgotCQkJICAgICAodnRhZ19p
biA9PSBhc29jLT5teV92dGFnKSkgfHwKLQkJCSAgICAoKChjaC0+Y2h1bmtfZmxhZ3MgJiBTQ1RQ
X0hBRF9OT19UQ0IpID09IFNDVFBfSEFEX05PX1RDQikgJiYKLQkJCSAgICAgKHZ0YWdfaW4gPT0g
YXNvYy0+cGVlcl92dGFnKSkpIHsKLQkJCQkvKiB0aGlzIGlzIHZhbGlkICovCi0JCQl9IGVsc2Ug
ewotCQkJCS8qIGRyb3AgdGhpcyBwYWNrZXQuLi4gKi8KLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19iYWR2dGFnKTsKLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
bG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCX0gZWxzZSBp
ZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9XTl9BQ0spIHsKLQkJCWlmICh2dGFnX2lu
ICE9IGFzb2MtPm15X3Z0YWcpIHsKLQkJCQkvKgotCQkJCSAqIHRoaXMgY291bGQgYmUgYSBzdGFs
ZSBTSFVURE9XTi1BQ0sgb3IgdGhlCi0JCQkJICogcGVlciBuZXZlciBnb3QgdGhlIFNIVVRET1dO
LUNPTVBMRVRFIGFuZAotCQkJCSAqIGlzIHN0aWxsIGh1bmc7IHdlIGhhdmUgc3RhcnRlZCBhIG5l
dyBhc29jCi0JCQkJICogYnV0IGl0IHdvbid0IGNvbXBsZXRlIHVudGlsIHRoZSBzaHV0ZG93bgot
CQkJCSAqIGlzIGNvbXBsZXRlZAotCQkJCSAqLwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJ
CVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJc25wcmludGYobXNnLCBz
aXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1
bmNfXyk7Ci0JCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bXNnKTsKLQkJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3Qs
Ci0JCQkJICAgICAgICAgICAgICAgICBzaCwgaW5wLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQkJCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVt
LAotI2VuZGlmCi0JCQkJICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJCXJldHVy
biAoTlVMTCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBmb3IgYWxsIG90aGVyIGNodW5rcywg
dnRhZyBtdXN0IG1hdGNoICovCi0JCQlpZiAodnRhZ19pbiAhPSBhc29jLT5teV92dGFnKSB7Ci0J
CQkJLyogaW52YWxpZCB2dGFnLi4uICovCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywK
LQkJCQkJImludmFsaWQgdnRhZzogJXhoLCBleHBlY3QgJXhoXG4iLAotCQkJCQl2dGFnX2luLCBh
c29jLT5teV92dGFnKTsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKLQkJCQlp
ZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJ
fQotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJfQot
CX0JCQkvKiBlbmQgaWYgIVNDVFBfQ09PS0lFX0VDSE8gKi8KLQkvKgotCSAqIHByb2Nlc3MgYWxs
IGNvbnRyb2wgY2h1bmtzLi4uCi0JICovCi0JaWYgKCgoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9T
RUxFQ1RJVkVfQUNLKSB8fAotCSAgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfTlJfU0VMRUNU
SVZFX0FDSykgfHwKLQkgICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0hFQVJUQkVBVF9SRVFV
RVNUKSkgJiYKLQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRF
X0NPT0tJRV9FQ0hPRUQpKSB7Ci0JCS8qIGltcGxpZWQgY29va2llLWFjay4uIHdlIG11c3QgaGF2
ZSBsb3N0IHRoZSBhY2sgKi8KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJCXNjdHBfbWlzY19pbnRzKFNDVFBf
VEhSRVNIT0xEX0NMRUFSLAotCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291
bnQsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAotCQkJ
CSAgICAgICBfX0xJTkVfXyk7Ci0JCX0KLQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
ID0gMDsKLQkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0IHNjdHBfY29va2llX2Fja19j
aHVuayAqKWNoLCBzdGNiLAotCQkJCSAgICAgICAqbmV0cCk7Ci0JfQotCi0gcHJvY2Vzc19jb250
cm9sX2NodW5rczoKLQl3aGlsZSAoSVNfU0NUUF9DT05UUk9MKGNoKSkgewotCQkvKiB2YWxpZGF0
ZSBjaHVuayBsZW5ndGggKi8KLQkJY2hrX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgp
OwotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAic2N0cF9wcm9jZXNzX2NvbnRyb2w6IHBy
b2Nlc3NpbmcgYSBjaHVuayB0eXBlPSV1LCBsZW49JXVcbiIsCi0JCQljaC0+Y2h1bmtfdHlwZSwg
Y2hrX2xlbmd0aCk7Ci0JCVNDVFBfTFRSQUNFX0NISyhpbnAsIHN0Y2IsIGNoLT5jaHVua190eXBl
LCBjaGtfbGVuZ3RoKTsKLQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSB8fAotCQkgICAg
KCpvZmZzZXQgKyAoaW50KWNoa19sZW5ndGgpID4gbGVuZ3RoKSB7Ci0JCQkqb2Zmc2V0ID0gbGVu
Z3RoOwotCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3Rj
Yik7Ci0JCQl9Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVI2NChzY3Rwc19pbmNvbnRyb2xjaHVua3MpOwotCQkvKgotCQkgKiBJTklULUFDSyBvbmx5IGdl
dHMgdGhlIGluaXQgYWNrICJoZWFkZXIiIHBvcnRpb24gb25seQotCQkgKiBiZWNhdXNlIHdlIGRv
bid0IGhhdmUgdG8gcHJvY2VzcyB0aGUgcGVlcidzIENPT0tJRS4gQWxsCi0JCSAqIG90aGVycyBn
ZXQgYSBjb21wbGV0ZSBjaHVuay4KLQkJICovCi0JCWlmICgoY2gtPmNodW5rX3R5cGUgPT0gU0NU
UF9JTklUSUFUSU9OX0FDSykgfHwKLQkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJ
QVRJT04pKSB7Ci0JCQkvKiBnZXQgYW4gaW5pdC1hY2sgY2h1bmsgKi8KLQkJCWNoID0gKHN0cnVj
dCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkJCQkJCQkgICBz
aXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspLCBjaHVua19idWYpOwotCQkJaWYgKGNo
ID09IE5VTEwpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlmIChsb2NrZWRfdGNiKSB7
Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChO
VUxMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIEZvciBjb29raWVzIGFuZCBhbGwgb3RoZXIg
Y2h1bmtzLiAqLwotCQkJaWYgKGNoa19sZW5ndGggPiBzaXplb2YoY2h1bmtfYnVmKSkgewotCQkJ
CS8qCi0JCQkJICogdXNlIGp1c3QgdGhlIHNpemUgb2YgdGhlIGNodW5rIGJ1ZmZlcgotCQkJCSAq
IHNvIHRoZSBmcm9udCBwYXJ0IG9mIG91ciBjaHVua3MgZml0IGluCi0JCQkJICogY29udGlndW91
cyBzcGFjZSB1cCB0byB0aGUgY2h1bmsgYnVmZmVyCi0JCQkJICogc2l6ZSAoNTA4IGJ5dGVzKS4K
LQkJCQkgKiBGb3IgY2h1bmtzIHRoYXQgbmVlZCB0byBnZXQgbW9yZSB0aGFuIHRoYXQKLQkJCQkg
KiB0aGV5IG11c3QgdXNlIHRoZSBzY3RwX21fZ2V0cHRyKCkgZnVuY3Rpb24KLQkJCQkgKiBvciBv
dGhlciBtZWFucyAoZS5nLiBrbm93IGhvdyB0byBwYXJzZSBtYnVmCi0JCQkJICogY2hhaW5zKS4g
Q29va2llcyBkbyB0aGlzIGFscmVhZHkuCi0JCQkJICovCi0JCQkJY2ggPSAoc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCi0JCQkJCQkJCQkgICAoc2l6ZW9m
KGNodW5rX2J1ZikgLSA0KSwKLQkJCQkJCQkJCSAgIGNodW5rX2J1Zik7Ci0JCQkJaWYgKGNoID09
IE5VTEwpIHsKLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsK
LQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogV2UgY2FuIGZpdCBpdCBhbGwgKi8K
LQkJCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNl
dCwKLQkJCQkJCQkJICAgY2hrX2xlbmd0aCwgY2h1bmtfYnVmKTsKLQkJCQlpZiAoY2ggPT0gTlVM
TCkgewotCQkJCQlTQ1RQX1BSSU5URigic2N0cF9wcm9jZXNzX2NvbnRyb2w6IENhbid0IGdldCB0
aGUgYWxsIGRhdGEuLi4uXG4iKTsKLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJaWYgKGxv
Y2tlZF90Y2IpIHsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJfQot
CQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCX0KLQkJfQotCQludW1fY2h1bmtzKys7Ci0J
CS8qIFNhdmUgb2ZmIHRoZSBsYXN0IHBsYWNlIHdlIGdvdCBhIGNvbnRyb2wgZnJvbSAqLwotCQlp
ZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlpZiAoKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBO
VUxMKSkgfHwgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKSkgewotCQkJCS8qCi0JCQkJ
ICogYWxsb3cgbGFzdF9jb250cm9sIHRvIGJlIE5VTEwgaWYKLQkJCQkgKiBBU0NPTkYuLi4gQVND
T05GIHByb2Nlc3Npbmcgd2lsbCBmaW5kIHRoZQotCQkJCSAqIHJpZ2h0IG5ldCBsYXRlcgotCQkJ
CSAqLwotCQkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpCi0JCQkJCXN0
Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSAqbmV0cDsKLQkJCX0KLQkJfQotI2lm
ZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0X2xvZygweEIwLCBjaC0+Y2h1
bmtfdHlwZSk7Ci0jZW5kaWYKLQotCQkvKiBjaGVjayB0byBzZWUgaWYgdGhpcyBjaHVuayByZXF1
aXJlZCBhdXRoLCBidXQgaXNuJ3QgKi8KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmCi0JCSAgICAo
c3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSAmJgotCQkgICAgc2N0cF9hdXRoX2lzX3Jl
cXVpcmVkX2NodW5rKGNoLT5jaHVua190eXBlLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtz
KSAmJgotCQkgICAgIXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCkgewotCQkJLyogInNpbGVudGx5
IiBpZ25vcmUgKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7Ci0J
CQlnb3RvIG5leHRfY2h1bms7Ci0JCX0KLQkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgewotCQlj
YXNlIFNDVFBfSU5JVElBVElPTjoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQ
X0lOSVRcbiIpOwotCQkJLyogVGhlIElOSVQgY2h1bmsgbXVzdCBiZSB0aGUgb25seSBjaHVuay4g
Ki8KLQkJCWlmICgobnVtX2NodW5rcyA+IDEpIHx8Ci0JCQkgICAgKGxlbmd0aCAtICpvZmZzZXQg
PiAoaW50KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgewotCQkJCS8qIFJGQyA0OTYwIHJlcXVp
cmVzIHRoYXQgbm8gQUJPUlQgaXMgc2VudCAqLwotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJ
aWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJ
CX0KLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJLyogSG9ub3Igb3VyIHJlc291cmNlIGxp
bWl0LiAqLwotCQkJaWYgKGNoa19sZW5ndGggPiBTQ1RQX0xBUkdFU1RfSU5JVF9BQ0NFUFRFRCkg
ewotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVT
QywgIiIpOwotCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4s
Ci0JCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNl
bmRpZgotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJCQkqb2Zm
c2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlzY3RwX2hhbmRsZV9p
bml0KG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3QsIHNoLAotCQkJICAgICAgICAgICAgICAg
ICAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKWNoLCBpbnAsCi0JCQkgICAgICAgICAgICAgICAg
IHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJICAg
ICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCWlm
ICgoIWFib3J0X25vX3VubG9jaykgJiYgKGxvY2tlZF90Y2IpKSB7Ci0JCQkJU0NUUF9UQ0JfVU5M
T0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJcmV0dXJuIChOVUxMKTsKLQkJCWJyZWFrOwotCQlj
YXNlIFNDVFBfUEFEX0NIVU5LOgotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FD
SzoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0lOSVQtQUNLXG4iKTsKLQkJ
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgewotCQkJ
CS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCi0JCQkJaWYgKChzdGNiKSAmJiAo
c3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSkpIHsKLQkJCQkJOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCWlmICgobG9ja2VkX3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiAhPSBzdGNi
KSkgewotCQkJCQkJLyogVmVyeSB1bmxpa2VseSAqLwotCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxv
Y2tlZF90Y2IpOwotCQkJCQl9Ci0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCWlmIChzdGNi
KSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCi0JCQkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCQkJCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJ
CQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwot
CQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlm
Ci0JCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9D
LAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NU
UF9MT0NfMjkpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQotCQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQkJ
CQl9Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJfQotCQkJLyogVGhlIElOSVQtQUNL
IGNodW5rIG11c3QgYmUgdGhlIG9ubHkgY2h1bmsuICovCi0JCQlpZiAoKG51bV9jaHVua3MgPiAx
KSB8fAotCQkJICAgIChsZW5ndGggLSAqb2Zmc2V0ID4gKGludClTQ1RQX1NJWkUzMihjaGtfbGVu
Z3RoKSkpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0J
CQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChOVUxM
KTsKLQkJCX0KLQkJCWlmICgobmV0cCkgJiYgKCpuZXRwKSkgewotCQkJCXJldCA9IHNjdHBfaGFu
ZGxlX2luaXRfYWNrKG0sIGlwaGxlbiwgKm9mZnNldCwKLQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzcmMsIGRzdCwgc2gsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICopY2gsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RjYiwgKm5ldHAsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFib3J0
X25vX3VubG9jaywKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCk7Ci0JCQl9IGVsc2UgewotCQkJCXJldCA9IC0xOwotCQkJ
fQotCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCWlmIChhYm9ydF9ub191bmxvY2spIHsKLQkJCQly
ZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJLyoKLQkJCSAqIFNwZWNpYWwgY2FzZSwgSSBtdXN0IGNh
bGwgdGhlIG91dHB1dCByb3V0aW5lIHRvCi0JCQkgKiBnZXQgdGhlIGNvb2tpZSBlY2hvZWQKLQkJ
CSAqLwotCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChyZXQgPT0gMCkpIHsKLQkJCQlzY3RwX2No
dW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NPTlRST0xf
UFJPQywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0KLQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0J
CQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJcmV0dXJuIChOVUxMKTsK
LQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FDSzoKLQkJCXsKLQkJCQlzdHJ1Y3Qg
c2N0cF9zYWNrX2NodW5rICpzYWNrOwotCQkJCWludCBhYm9ydF9ub3cgPSAwOwotCQkJCXVpbnQz
Ml90IGFfcnduZCwgY3VtX2FjazsKLQkJCQl1aW50MTZfdCBudW1fc2VnLCBudW1fZHVwOwotCQkJ
CXVpbnQ4X3QgZmxhZ3M7Ci0JCQkJaW50IG9mZnNldF9zZWcsIG9mZnNldF9kdXA7Ci0KLQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9TQUNLXG4iKTsKLQkJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2c2Fja3MpOwotCQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsICJObyBzdGNiIHdoZW4gcHJvY2Vzc2luZyBTQUNLIGNo
dW5rXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspKSB7Ci0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTkRB
VEExLCAiQmFkIHNpemUgb24gU0FDSyBjaHVuaywgdG9vIHNtYWxsXG4iKTsKLQkJCQkJYnJlYWs7
Ci0JCQkJfQotCQkJCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9BQ0tfU0VOVCkgewotCQkJCQkvKi0KLQkJCQkJICogSWYgd2UgaGF2ZSBzZW50
IGEgc2h1dGRvd24tYWNrLCB3ZSB3aWxsIHBheSBubwotCQkJCQkgKiBhdHRlbnRpb24gdG8gYSBz
YWNrIHNlbnQgaW4gdG8gdXMgc2luY2UKLQkJCQkJICogd2UgZG9uJ3QgY2FyZSBhbnltb3JlLgot
CQkJCQkgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXNhY2sgPSAoc3RydWN0IHNjdHBfc2Fj
a19jaHVuayAqKWNoOwotCQkJCWZsYWdzID0gY2gtPmNodW5rX2ZsYWdzOwotCQkJCWN1bV9hY2sg
PSBudG9obChzYWNrLT5zYWNrLmN1bV90c25fYWNrKTsKLQkJCQludW1fc2VnID0gbnRvaHMoc2Fj
ay0+c2Fjay5udW1fZ2FwX2Fja19ibGtzKTsKLQkJCQludW1fZHVwID0gbnRvaHMoc2Fjay0+c2Fj
ay5udW1fZHVwX3RzbnMpOwotCQkJCWFfcnduZCA9ICh1aW50MzJfdCkgbnRvaGwoc2Fjay0+c2Fj
ay5hX3J3bmQpOwotCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykgKwotCQkJ
CSAgICBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spICsKLQkJCQkg
ICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0aCkgewotCQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIFNBQ0sgY2h1bmtcbiIpOwotCQkJ
CQlicmVhazsKLQkJCQl9Ci0JCQkJb2Zmc2V0X3NlZyA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0
IHNjdHBfc2Fja19jaHVuayk7Ci0JCQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcgKyBudW1fc2Vn
ICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOwotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDMsICJTQ1RQX1NBQ0sgcHJvY2VzcyBjdW1fYWNrOiV4IG51bV9zZWc6JWQgYV9y
d25kOiVkXG4iLAotCQkJCSAgICAgICAgY3VtX2FjaywgbnVtX3NlZywgYV9yd25kKTsKLQkJCQlz
dGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMTsKLQkJCQlpZiAoKHN0Y2ItPmFzb2Mu
cHJfc2N0cF9jbnQgPT0gMCkgJiYKLQkJCQkgICAgKG51bV9zZWcgPT0gMCkgJiYKLQkJCQkgICAg
U0NUUF9UU05fR0UoY3VtX2Fjaywgc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSkgJiYKLQkJCQkg
ICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0aF9mcmFncyA9PSAwKSAmJgotCQkJCSAgICAoc3Rj
Yi0+YXNvYy5zYXdfc2Fja193aXRoX25yX2ZyYWdzID09IDApICYmCi0JCQkJICAgICghVEFJTFFf
RU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpCi0JCQkJCSkgewotCQkJCQkvKiBXZSBoYXZl
IGEgU0lNUExFIHNhY2sgaGF2aW5nIG5vIHByaW9yIHNlZ21lbnRzIGFuZAotCQkJCQkgKiBkYXRh
IG9uIHNlbnQgcXVldWUgdG8gYmUgYWNrZWQuLiBVc2UgdGhlIGZhc3RlcgotCQkJCQkgKiBwYXRo
IHNhY2sgcHJvY2Vzc2luZy4gV2UgYWxzbyBhbGxvdyB3aW5kb3cgdXBkYXRlCi0JCQkJCSAqIHNh
Y2tzIHdpdGggbm8gbWlzc2luZyBzZWdtZW50cyB0byBnbyB0aGlzIHdheSB0b28uCi0JCQkJCSAq
LwotCQkJCQlzY3RwX2V4cHJlc3NfaGFuZGxlX3NhY2soc3RjYiwgY3VtX2FjaywgYV9yd25kLCAm
YWJvcnRfbm93LCBlY25lX3NlZW4pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChuZXRwICYmICpu
ZXRwKQotCQkJCQkJc2N0cF9oYW5kbGVfc2FjayhtLCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwLCBz
dGNiLAotCQkJCQkJCQkgbnVtX3NlZywgMCwgbnVtX2R1cCwgJmFib3J0X25vdywgZmxhZ3MsCi0J
CQkJCQkJCSBjdW1fYWNrLCBhX3J3bmQsIGVjbmVfc2Vlbik7Ci0JCQkJfQotCQkJCWlmIChhYm9y
dF9ub3cpIHsKLQkJCQkJLyogQUJPUlQgc2lnbmFsIGZyb20gc2FjayBwcm9jZXNzaW5nICovCi0J
CQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJCWlm
IChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgotCQkJCSAgICBUQUlMUV9F
TVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSAmJgotCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJl
YW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9T
RU5ERVJfRFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9Ci0J
CQl9Ci0JCQlicmVhazsKLQkJLyogRVkgLSBucl9zYWNrOiAgSWYgdGhlIHJlY2VpdmVkIGNodW5r
IGlzIGFuIG5yX3NhY2sgY2h1bmsgKi8KLQkJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0s6Ci0J
CQl7Ci0JCQkJc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayAqbnJfc2FjazsKLQkJCQlpbnQgYWJv
cnRfbm93ID0gMDsKLQkJCQl1aW50MzJfdCBhX3J3bmQsIGN1bV9hY2s7Ci0JCQkJdWludDE2X3Qg
bnVtX3NlZywgbnVtX25yX3NlZywgbnVtX2R1cDsKLQkJCQl1aW50OF90IGZsYWdzOwotCQkJCWlu
dCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwOwotCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MywgIlNDVFBfTlJfU0FDS1xuIik7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnNhY2tz
KTsKLQkJCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTkRB
VEExLCAiTm8gc3RjYiB3aGVuIHByb2Nlc3NpbmcgTlItU0FDSyBjaHVua1xuIik7Ci0JCQkJCWJy
ZWFrOwotCQkJCX0KLQkJCQlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDApIHsK
LQkJCQkJZ290byB1bmtub3duX2NodW5rOwotCQkJCX0KLQkJCQlpZiAoY2hrX2xlbmd0aCA8IHNp
emVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSkgewotCQkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5EQVRBMSwgIkJhZCBzaXplIG9uIE5SLVNBQ0sgY2h1bmssIHRvbyBzbWFsbFxuIik7Ci0J
CQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsKLQkJCQkJLyotCi0JCQkJCSAqIElmIHdl
IGhhdmUgc2VudCBhIHNodXRkb3duLWFjaywgd2Ugd2lsbCBwYXkgbm8KLQkJCQkJICogYXR0ZW50
aW9uIHRvIGEgc2FjayBzZW50IGluIHRvIHVzIHNpbmNlCi0JCQkJCSAqIHdlIGRvbid0IGNhcmUg
YW55bW9yZS4KLQkJCQkJICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlucl9zYWNrID0gKHN0
cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKiljaDsKLQkJCQlmbGFncyA9IGNoLT5jaHVua19mbGFn
czsKLQkJCQljdW1fYWNrID0gbnRvaGwobnJfc2Fjay0+bnJfc2Fjay5jdW1fdHNuX2Fjayk7Ci0J
CQkJbnVtX3NlZyA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2subnVtX2dhcF9hY2tfYmxrcyk7Ci0J
CQkJbnVtX25yX3NlZyA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2subnVtX25yX2dhcF9hY2tfYmxr
cyk7Ci0JCQkJbnVtX2R1cCA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2subnVtX2R1cF90c25zKTsK
LQkJCQlhX3J3bmQgPSAodWludDMyX3QpIG50b2hsKG5yX3NhY2stPm5yX3NhY2suYV9yd25kKTsK
LQkJCQlpZiAoc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspICsKLQkJCQkgICAgKG51
bV9zZWcgKyBudW1fbnJfc2VnKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSAr
Ci0JCQkJICAgIG51bV9kdXAgKiBzaXplb2YodWludDMyX3QpICE9IGNoa19sZW5ndGgpIHsKLQkJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsICJCYWQgc2l6ZSBvZiBOUl9TQUNLIGNodW5r
XG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW9mZnNldF9zZWcgPSAqb2Zmc2V0ICsgc2l6
ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspOwotCQkJCW9mZnNldF9kdXAgPSBvZmZzZXRf
c2VnICsgbnVtX3NlZyAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKTsKLQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9OUl9TQUNLIHByb2Nlc3MgY3VtX2Fjazol
eCBudW1fc2VnOiVkIGFfcnduZDolZFxuIiwKLQkJCQkgICAgICAgIGN1bV9hY2ssIG51bV9zZWcs
IGFfcnduZCk7Ci0JCQkJc3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlzX3BrdCA9IDE7Ci0JCQkJ
aWYgKChzdGNiLT5hc29jLnByX3NjdHBfY250ID09IDApICYmCi0JCQkJICAgIChudW1fc2VnID09
IDApICYmIChudW1fbnJfc2VnID09IDApICYmCi0JCQkJICAgIFNDVFBfVFNOX0dFKGN1bV9hY2ss
IHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEpICYmCi0JCQkJICAgIChzdGNiLT5hc29jLnNhd19z
YWNrX3dpdGhfZnJhZ3MgPT0gMCkgJiYKLQkJCQkgICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0
aF9ucl9mcmFncyA9PSAwKSAmJgotCQkJCSAgICAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNl
bnRfcXVldWUpKSkgewotCQkJCQkvKgotCQkJCQkgKiBXZSBoYXZlIGEgU0lNUExFIHNhY2sgaGF2
aW5nIG5vCi0JCQkJCSAqIHByaW9yIHNlZ21lbnRzIGFuZCBkYXRhIG9uIHNlbnQKLQkJCQkJICog
cXVldWUgdG8gYmUgYWNrZWQuIFVzZSB0aGUKLQkJCQkJICogZmFzdGVyIHBhdGggc2FjayBwcm9j
ZXNzaW5nLiBXZQotCQkJCQkgKiBhbHNvIGFsbG93IHdpbmRvdyB1cGRhdGUgc2Fja3MKLQkJCQkJ
ICogd2l0aCBubyBtaXNzaW5nIHNlZ21lbnRzIHRvIGdvCi0JCQkJCSAqIHRoaXMgd2F5IHRvby4K
LQkJCQkJICovCi0JCQkJCXNjdHBfZXhwcmVzc19oYW5kbGVfc2FjayhzdGNiLCBjdW1fYWNrLCBh
X3J3bmQsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAmYWJvcnRfbm93LCBlY25lX3Nl
ZW4pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChuZXRwICYmICpuZXRwKQotCQkJCQkJc2N0cF9o
YW5kbGVfc2FjayhtLCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwLCBzdGNiLAotCQkJCQkJICAgICAg
ICAgICAgICAgICBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwLCAmYWJvcnRfbm93LCBmbGFn
cywKLQkJCQkJCSAgICAgICAgICAgICAgICAgY3VtX2FjaywgYV9yd25kLCBlY25lX3NlZW4pOwot
CQkJCX0KLQkJCQlpZiAoYWJvcnRfbm93KSB7Ci0JCQkJCS8qIEFCT1JUIHNpZ25hbCBmcm9tIHNh
Y2sgcHJvY2Vzc2luZyAqLwotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5V
TEwpOwotCQkJCX0KLQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkg
JiYKLQkJCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkgJiYKLQkJCQkg
ICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgewotCQkJCQlzY3RwX3VscF9u
b3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5VTEwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBTQ1RQX0hFQVJUQkVB
VF9SRVFVRVNUOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfSEVBUlRCRUFU
XG4iKTsKLQkJCWlmICgoc3RjYikgJiYgbmV0cCAmJiAqbmV0cCkgewotCQkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3JlY3ZoZWFydGJlYXQpOwotCQkJCXNjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0
Y2IsIG0sICpvZmZzZXQsCi0JCQkJCQkJY2hrX2xlbmd0aCwgKm5ldHApOwotCi0JCQkJLyogSGUn
cyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCQlzY3Rw
X21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29j
Lm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQ
X0ZST01fU0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJfQotCQkJCXN0
Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2Fz
ZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NU
UF9IRUFSVEJFQVQtQUNLXG4iKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0
aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkpIHsKLQkJCQkvKiBJdHMg
bm90IG91cnMgKi8KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlmIChsb2NrZWRfdGNiKSB7
Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChO
VUxMKTsKLQkJCX0KLQkJCS8qIEhlJ3MgYWxpdmUgc28gZ2l2ZSBoaW0gY3JlZGl0ICovCi0JCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERf
TE9HR0lORykgewotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJ
CQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCQkgICAgICAgMCwK
LQkJCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAotCQkJCQkgICAgICAgX19MSU5FX18p
OwotCQkJfQotCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3JlY3ZoZWFydGJlYXRhY2spOwotCQkJaWYgKG5ldHAgJiYgKm5ldHAp
Ci0JCQkJc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2Fjaygoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2No
dW5rICopY2gsCi0JCQkJCQkJICBzdGNiLCAqbmV0cCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQ
X0FCT1JUX0FTU09DSUFUSU9OOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBf
QUJPUlQsIHN0Y2IgJXBcbiIsCi0JCQkJKHZvaWQgKilzdGNiKTsKLQkJCWlmICgoc3RjYikgJiYg
bmV0cCAmJiAqbmV0cCkKLQkJCQlzY3RwX2hhbmRsZV9hYm9ydCgoc3RydWN0IHNjdHBfYWJvcnRf
Y2h1bmsgKiljaCwKLQkJCQkJCSAgc3RjYiwgKm5ldHApOwotCQkJKm9mZnNldCA9IGxlbmd0aDsK
LQkJCXJldHVybiAoTlVMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NIVVRET1dOOgotCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04sIHN0Y2IgJXBcbiIsCi0J
CQkJKHZvaWQgKilzdGNiKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspKSkgewotCQkJCSpvZmZzZXQgPSBs
ZW5ndGg7Ci0JCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tl
ZF90Y2IpOwotCQkJCX0KLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaWYgKG5ldHAgJiYg
Km5ldHApIHsKLQkJCQlpbnQgYWJvcnRfZmxhZyA9IDA7Ci0KLQkJCQlzY3RwX2hhbmRsZV9zaHV0
ZG93bigoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKiljaCwKLQkJCQkJCSAgICAgc3RjYiwg
Km5ldHAsICZhYm9ydF9mbGFnKTsKLQkJCQlpZiAoYWJvcnRfZmxhZykgewotCQkJCQkqb2Zmc2V0
ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwot
CQljYXNlIFNDVFBfU0hVVERPV05fQUNLOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IlNDVFBfU0hVVERPV04tQUNLLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOwotCQkJaWYgKChz
dGNiKSAmJiAobmV0cCkgJiYgKCpuZXRwKSkKLQkJCQlzY3RwX2hhbmRsZV9zaHV0ZG93bl9hY2so
KHN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7Ci0JCQkq
b2Zmc2V0ID0gbGVuZ3RoOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJCWJyZWFrOwotCi0JCWNhc2Ug
U0NUUF9PUEVSQVRJT05fRVJST1I6Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NU
UF9PUC1FUlJcbiIpOwotCQkJaWYgKChzdGNiKSAmJiBuZXRwICYmICpuZXRwICYmIHNjdHBfaGFu
ZGxlX2Vycm9yKGNoLCBzdGNiLCAqbmV0cCkgPCAwKSB7Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsK
LQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9DT09LSUVf
RUNITzoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsCi0JCQkJIlNDVFBfQ09PS0lFLUVD
SE8sIHN0Y2IgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JCQlpZiAoKHN0Y2IpICYmIChzdGNiLT5h
c29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKSkgewotCQkJCTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
aWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkJ
CS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCi0JCQkJYWJlbmQ6Ci0JCQkJCWlm
IChzdGNiKSB7Ci0JCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCX0KLQkJCQkJKm9m
ZnNldCA9IGxlbmd0aDsKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCQl9Ci0JCQl9Ci0JCQkvKi0K
LQkJCSAqIEZpcnN0IGFyZSB3ZSBhY2NlcHRpbmc/IFdlIGRvIHRoaXMgYWdhaW4gaGVyZQotCQkJ
ICogc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIHByZXZpb3VzIGVuZHBvaW50IFdBUwotCQkJ
ICogbGlzdGVuaW5nIHJlc3BvbmRlZCB0byBhIElOSVQtQUNLIGFuZCB0aGVuCi0JCQkgKiBjbG9z
ZWQuIFdlIG9wZW5lZCBhbmQgYm91bmQuLiBhbmQgYXJlIG5vdyBubwotCQkJICogbG9uZ2VyIGxp
c3RlbmluZy4KLQkJCSAqCi0JCQkgKiBYWFhHTDogbm90ZXMgb24gY2hlY2tpbmcgbGlzdGVuIHF1
ZXVlIGxlbmd0aC4KLQkJCSAqIDEpIFNDVFBfSVNfTElTVEVOSU5HKCkgZG9lc24ndCBuZWNlc3Nh
cmlseSBtZWFuCi0JCQkgKiAgICBTT0xJU1RFTklORygpLCBiZWNhdXNlIGEgbGlzdGVuaW5nICJV
RFAgdHlwZSIKLQkJCSAqICAgIHNvY2tldCBpc24ndCBsaXN0ZW5pbmcgaW4gdGVybXMgb2YgdGhl
IHNvY2tldAotCQkJICogICAgbGF5ZXIuICBJdCBpcyBhIG5vcm1hbCBkYXRhIGZsb3cgc29ja2V0
LCB0aGF0Ci0JCQkgKiAgICBjYW4gZm9yayBvZmYgbmV3IGNvbm5lY3Rpb25zLiAgVGh1cywgd2Ug
c2hvdWxkCi0JCQkgKiAgICBsb29rIGludG8gc29sX3FsZW4gb25seSBpbiBjYXNlIHdlIGFyZSAh
VURQLgotCQkJICogMikgQ2hlY2tpbmcgc29sX3FsZW4gaW4gZ2VuZXJhbCByZXF1aXJlcyBsb2Nr
aW5nCi0JCQkgKiAgICB0aGUgc29ja2V0LCBhbmQgdGhpcyBjb2RlIGxhY2tzIHRoYXQuCi0JCQkg
Ki8KLQkJCWlmICgoc3RjYiA9PSBOVUxMKSAmJgotCQkJICAgICghU0NUUF9JU19MSVNURU5JTkco
aW5wKSB8fAotCQkJICAgICAoIShpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBU
WVBFKSAmJgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDEyMDAwMzQKLQkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvbF9xbGVuID49IGlucC0+c2N0
cF9zb2NrZXQtPnNvbF9xbGltaXQpKSkgewotI2Vsc2UKLQkJCSAgICAgIGlucC0+c2N0cF9zb2Nr
ZXQtPnNvX3FsZW4gPj0gaW5wLT5zY3RwX3NvY2tldC0+c29fcWxpbWl0KSkpIHsKLSNlbmRpZgot
CQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKLQkJ
CQkgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCkpKSB7Ci0JCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRf
T0ZfUkVTQywgIiIpOwotCQkJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwg
aXBobGVuLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgbWJ1ZiAqcmV0X2J1ZjsKLQkJCQlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqbGlucDsKLQkJCQlpZiAoc3RjYikgewotCQkJCQlsaW5wID0gTlVMTDsK
LQkJCQl9IGVsc2UgewotCQkJCQlsaW5wID0gaW5wOwotCQkJCX0KLQotCQkJCWlmIChsaW5wKSB7
Ci0JCQkJCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhsaW5wKTsKLQkJCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkJCQkJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKLQkJCQkJCVNDVFBf
QVNPQ19DUkVBVEVfVU5MT0NLKGxpbnApOwotCQkJCQkJZ290byBhYmVuZDsKLQkJCQkJfQotCQkJ
CX0KLQotCQkJCWlmIChuZXRwKSB7Ci0JCQkJCXJldF9idWYgPQotCQkJCQkJc2N0cF9oYW5kbGVf
Y29va2llX2VjaG8obSwgaXBobGVuLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgKm9m
ZnNldCwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LAotCQkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgc2gsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHNjdHBfY29va2llX2VjaG9fY2h1bmsgKiljaCwKLQkJCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICZpbnAsICZzdGNiLCBuZXRwLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0aF9za2lwcGVkLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9vZmZz
ZXQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2xlbiwKLQkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICZsb2NrZWRfdGNiLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsCi0JCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICBtZmxvd2lkLAotI2VuZGlmCi0JCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBwb3J0KTsKLQkJ
CQl9IGVsc2UgewotCQkJCQlyZXRfYnVmID0gTlVMTDsKLQkJCQl9Ci0JCQkJaWYgKGxpbnApIHsK
LQkJCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0sobGlucCk7Ci0JCQkJfQotCQkJCWlmIChyZXRf
YnVmID09IE5VTEwpIHsKLQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJCVNDVFBfVENCX1VO
TE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJfQotCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQz
LAotCQkJCQkJIkdBSywgbnVsbCBidWZmZXJcbiIpOwotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwot
CQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQkvKiBpZiBBVVRIIHNraXBwZWQsIHNlZSBp
ZiBpdCB2ZXJpZmllZC4uLiAqLwotCQkJCWlmIChhdXRoX3NraXBwZWQpIHsKLQkJCQkJZ290X2F1
dGggPSAxOwotCQkJCQlhdXRoX3NraXBwZWQgPSAwOwotCQkJCX0KLQkJCQlpZiAoIVRBSUxRX0VN
UFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFJlc3RhcnQg
dGhlIHRpbWVyIGlmIHdlIGhhdmUKLQkJCQkJICogcGVuZGluZyBkYXRhCi0JCQkJCSAqLwotCQkJ
CQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQkJCQkJY2hrID0gVEFJTFFfRklSU1Qo
JnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSk7Ci0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNoay0+d2hvVG8pOwotCQkJCX0KLQkJ
CX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfQ09PS0lFX0FDSzoKLQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDMsICJTQ1RQX0NPT0tJRS1BQ0ssIHN0Y2IgJXBcbiIsICh2b2lkICopc3RjYik7
Ci0JCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNj
dHBfY29va2llX2Fja19jaHVuaykpIHsKLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9
Ci0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsK
LQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55bW9yZSAqLwotCQkJCWlmICgoc3RjYikg
JiYgKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpKSB7Ci0JCQkJCTsKLQkJCQl9
IGVsc2UgaWYgKHN0Y2IpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKLQkJCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOwotCQkJCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOwotCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
Ci0jZW5kaWYKLQkJCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JN
QUxfUFJPQywKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVU
ICsgU0NUUF9MT0NfMzApOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlm
Ci0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJ
fQotCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCWlmICgoc3RjYikg
JiYgbmV0cCAmJiAqbmV0cCkgewotCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRz
KFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9l
cnJvcl9jb3VudCwKLQkJCQkJCSAgICAgICAwLAotCQkJCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQ
X0lOUFVULAotCQkJCQkJICAgICAgIF9fTElORV9fKTsKLQkJCQl9Ci0JCQkJc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCQlzY3RwX2hhbmRsZV9jb29raWVfYWNrKChzdHJ1
Y3Qgc2N0cF9jb29raWVfYWNrX2NodW5rICopY2gsc3RjYiwgKm5ldHApOwotCQkJfQotCQkJYnJl
YWs7Ci0JCWNhc2UgU0NUUF9FQ05fRUNITzoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMs
ICJTQ1RQX0VDTi1FQ0hPXG4iKTsKLQkJCS8qIEhlJ3MgYWxpdmUgc28gZ2l2ZSBoaW0gY3JlZGl0
ICovCi0JCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2VjbmVfY2h1bmspKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAqLwotCQkJCWlmIChs
b2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0J
CQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaWYgKHN0
Y2IpIHsKLQkJCQlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKLQkJCQkJZ290
byB1bmtub3duX2NodW5rOwotCQkJCX0KLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCQlzY3RwX21pc2Nf
aW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJh
bGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQX0ZST01f
U0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJfQotCQkJCXN0Y2ItPmFz
b2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JCQkJc2N0cF9oYW5kbGVfZWNuX2VjaG8oKHN0
cnVjdCBzY3RwX2VjbmVfY2h1bmsgKiljaCwKLQkJCQkJCSAgICAgc3RjYik7Ci0JCQkJZWNuZV9z
ZWVuID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfRUNOX0NXUjoKLQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0VDTi1DV1JcbiIpOwotCQkJLyogSGUncyBhbGl2
ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xl
bmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY3dyX2NodW5rKSkpIHsKLQkJCQkvKiBJdHMgbm90
IG91cnMgKi8KLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9j
a2VkX3RjYik7Ci0JCQkJfQotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChOVUxM
KTsKLQkJCX0KLQkJCWlmIChzdGNiKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRl
ZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcp
IHsKLQkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJCQkgICAg
ICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCQkJICAgICAgIDAsCi0JCQkJ
CQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJCQkgICAgICAgX19MSU5FX18pOwot
CQkJCX0KLQkJCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkJCXNjdHBf
aGFuZGxlX2Vjbl9jd3IoKHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7
Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFOgotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04tQ09NUExFVEUsIHN0Y2IgJXBc
biIsICh2b2lkICopc3RjYik7Ci0JCQkvKiBtdXN0IGJlIGZpcnN0IGFuZCBvbmx5IGNodW5rICov
Ci0JCQlpZiAoKG51bV9jaHVua3MgPiAxKSB8fAotCQkJICAgIChsZW5ndGggLSAqb2Zmc2V0ID4g
KGludClTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKSkpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwot
CQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsK
LQkJCQl9Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWlmICgoc3RjYikgJiYgbmV0cCAm
JiAqbmV0cCkgewotCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlKChzdHJ1Y3Qgc2N0
cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayAqKWNoLAotCQkJCQkJCSAgICAgIHN0Y2IsICpuZXRw
KTsKLQkJCX0KLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQkJYnJl
YWs7Ci0JCWNhc2UgU0NUUF9BU0NPTkY6Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAi
U0NUUF9BU0NPTkZcbiIpOwotCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8K
LQkJCWlmIChzdGNiKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJ
CQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJCQkgICAgICAgc3Rj
Yi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCQkJICAgICAgIDAsCi0JCQkJCQkgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJCQkgICAgICAgX19MSU5FX18pOwotCQkJCX0K
LQkJCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkJCXNjdHBfaGFuZGxl
X2FzY29uZihtLCAqb2Zmc2V0LCBzcmMsCi0JCQkJCQkgICAoc3RydWN0IHNjdHBfYXNjb25mX2No
dW5rICopY2gsIHN0Y2IsIGFzY29uZl9jbnQgPT0gMCk7Ci0JCQkJYXNjb25mX2NudCsrOwotCQkJ
fQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgIlNDVFBfQVNDT05GLUFDS1xuIik7Ci0JCQlpZiAoY2hrX2xlbmd0aCA8IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKSkgewotCQkJCS8qIEl0cyBub3Qgb3Vy
cyAqLwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRf
dGNiKTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwot
CQkJfQotCQkJaWYgKChzdGNiKSAmJiBuZXRwICYmICpuZXRwKSB7Ci0JCQkJaWYgKHN0Y2ItPmFz
b2MuYXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJ
CQl9Ci0JCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lO
RykgewotCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAg
ICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJ
CQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7
Ci0JCQkJfQotCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JCQkJc2N0
cF9oYW5kbGVfYXNjb25mX2FjayhtLCAqb2Zmc2V0LAotCQkJCQkJICAgICAgIChzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWNrX2NodW5rICopY2gsIHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2NrKTsK
LQkJCQlpZiAoYWJvcnRfbm9fdW5sb2NrKQotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9GT1JXQVJEX0NVTV9UU046Ci0JCWNhc2UgU0NUUF9JRk9SV0FS
RF9DVU1fVFNOOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfRldELVRTTlxu
Iik7Ci0JCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9j
aHVuaykpIHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQlpZiAobG9ja2VkX3RjYikgewot
CQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCSpvZmZzZXQgPSBs
ZW5ndGg7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQotCQkJLyogSGUncyBhbGl2ZSBzbyBn
aXZlIGhpbSBjcmVkaXQgKi8KLQkJCWlmIChzdGNiKSB7Ci0JCQkJaW50IGFib3J0X2ZsYWcgPSAw
OwotCi0JCQkJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdv
dG8gdW5rbm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2Nv
dW50ID0gMDsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVT
SE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQs
Ci0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJ
CQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJfQotCQkJCSpmd2RfdHNuX3NlZW4gPSAxOwotCQkJ
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgewotCQkJ
CQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55bW9yZSAqLwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCQlzbyA9IFNDVFBfSU5Q
X1NPKGlucCk7Ci0JCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7
Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18zMSk7Ci0jaWYgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJcmV0dXJu
IChOVUxMKTsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBGb3Igc2VuZGluZyBhIFNBQ0sgdGhpcyBs
b29rcyBsaWtlIERBVEEKLQkJCQkgKiBjaHVua3MuCi0JCQkJICovCi0JCQkJc3RjYi0+YXNvYy5s
YXN0X2RhdGFfY2h1bmtfZnJvbSA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207
Ci0JCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RjYiwKLQkJCQkJCQkoc3RydWN0IHNjdHBf
Zm9yd2FyZF90c25fY2h1bmsgKiljaCwgJmFib3J0X2ZsYWcsIG0sICpvZmZzZXQpOwotCQkJCWlm
IChhYm9ydF9mbGFnKSB7Ci0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAoTlVM
TCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJCQkJCXNjdHBfbWlzY19pbnRz
KFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxf
ZXJyb3JfY291bnQsCi0JCQkJCQkJICAgICAgIDAsCi0JCQkJCQkJICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOUFVULAotCQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJCX0KLQkJCQkJc3RjYi0+
YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCQl9Ci0KLQkJCX0KLQkJCWJyZWFrOwot
CQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IlNDVFBfU1RSRUFNX1JFU0VUXG4iKTsKLQkJCWlmICgoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoID09
IE5VTEwpIHx8IChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90
c25fcmVxKSkpKSB7Ci0JCQkJLyogSXRzIG5vdCBvdXJzICovCi0JCQkJaWYgKGxvY2tlZF90Y2Ip
IHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJCX0KLQkJCQkqb2Zmc2V0
ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+YXNvYy5y
ZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMCkgewotCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCX0K
LQkJCWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQoc3RjYiwgbSwgKm9mZnNldCwgY2gpKSB7
Ci0JCQkJLyogc3RvcCBwcm9jZXNzaW5nICovCi0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQly
ZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBF
RDoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1BBQ0tFVF9EUk9QUEVEXG4i
KTsKLQkJCS8qIHJlLWdldCBpdCBhbGwgcGxlYXNlICovCi0JCQlpZiAoY2hrX2xlbmd0aCA8IHNp
emVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAq
LwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNi
KTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJ
fQotCi0KLQkJCWlmIChjaCAmJiAoc3RjYikgJiYgbmV0cCAmJiAoKm5ldHApKSB7Ci0JCQkJaWYg
KHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMCkgewotCQkJCQlnb3RvIHVua25vd25f
Y2h1bms7Ci0JCQkJfQotCQkJCXNjdHBfaGFuZGxlX3BhY2tldF9kcm9wcGVkKChzdHJ1Y3Qgc2N0
cF9wa3Rkcm9wX2NodW5rICopY2gsCi0JCQkJCQkJICAgc3RjYiwgKm5ldHAsCi0JCQkJCQkJICAg
bWluKGNoa19sZW5ndGgsIChzaXplb2YoY2h1bmtfYnVmKSAtIDQpKSk7Ci0KLQkJCX0KLQotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJTQ1RQX0FVVEhFTlRJQ0FUSU9OXG4iKTsKLQkJCWlmIChzdGNiID09IE5VTEwp
IHsKLQkJCQkvKiBzYXZlIHRoZSBmaXJzdCBBVVRIIGZvciBsYXRlciBwcm9jZXNzaW5nICovCi0J
CQkJaWYgKGF1dGhfc2tpcHBlZCA9PSAwKSB7Ci0JCQkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsK
LQkJCQkJYXV0aF9sZW4gPSBjaGtfbGVuZ3RoOwotCQkJCQlhdXRoX3NraXBwZWQgPSAxOwotCQkJ
CX0KLQkJCQkvKiBza2lwIHRoaXMgY2h1bmsgKHRlbXBvcmFyaWx5KSAqLwotCQkJCWdvdG8gbmV4
dF9jaHVuazsKLQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsK
LQkJCQlnb3RvIHVua25vd25fY2h1bms7Ci0JCQl9Ci0JCQlpZiAoKGNoa19sZW5ndGggPCAoc2l6
ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspKSkgfHwKLQkJCSAgICAoY2hrX2xlbmd0aCA+IChz
aXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVuaykgKwotCQkJCQkgICBTQ1RQX0FVVEhfRElHRVNU
X0xFTl9NQVgpKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAqLwotCQkJCWlmIChsb2NrZWRfdGNi
KSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJKm9mZnNl
dCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaWYgKGdvdF9hdXRoID09
IDEpIHsKLQkJCQkvKiBza2lwIHRoaXMgY2h1bmsuLi4gaXQncyBhbHJlYWR5IGF1dGgnZCAqLwot
CQkJCWdvdG8gbmV4dF9jaHVuazsKLQkJCX0KLQkJCWdvdF9hdXRoID0gMTsKLQkJCWlmICgoY2gg
PT0gTlVMTCkgfHwgc2N0cF9oYW5kbGVfYXV0aChzdGNiLCAoc3RydWN0IHNjdHBfYXV0aF9jaHVu
ayAqKWNoLAotCQkJCQkJCSAgICAgbSwgKm9mZnNldCkpIHsKLQkJCQkvKiBhdXRoIEhNQUMgZmFp
bGVkIHNvIGR1bXAgdGhlIHBhY2tldCAqLwotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0
dXJuIChzdGNiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogcmVtYWluaW5nIGNodW5rcyBhcmUgSE1B
QyBjaGVja2VkICovCi0JCQkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMTsKLQkJCX0KLQkJ
CWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCXVua25vd25fY2h1bms6Ci0JCQkvKiBpdCdzIGFuIHVu
a25vd24gY2h1bmshICovCi0JCQlpZiAoKGNoLT5jaHVua190eXBlICYgMHg0MCkgJiYgKHN0Y2Ig
IT0gTlVMTCkpIHsKLQkJCQlzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKmNhdXNlOwotCQkJ
CWludCBsZW47Ci0KLQkJCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0
cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSksCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCQlpZiAob3BfZXJyICE9IE5VTEwp
IHsKLQkJCQkJbGVuID0gbWluKFNDVFBfU0laRTMyKGNoa19sZW5ndGgpLCAodWludDMyX3QpKGxl
bmd0aCAtICpvZmZzZXQpKTsKLQkJCQkJY2F1c2UgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNjdHBf
Z2VuX2Vycm9yX2NhdXNlICopOwotCQkJCQljYXVzZS0+Y29kZSA9ICBodG9ucyhTQ1RQX0NBVVNF
X1VOUkVDT0dfQ0hVTkspOwotCQkJCQljYXVzZS0+bGVuZ3RoID0gaHRvbnMoKHVpbnQxNl90KShs
ZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKSkpOwotCQkJCQlTQ1RQX0JV
Rl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UpOwotCQkJ
CQlTQ1RQX0JVRl9ORVhUKG9wX2VycikgPSBTQ1RQX01fQ09QWU0obSwgKm9mZnNldCwgbGVuLCBN
X05PV0FJVCk7Ci0JCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG9wX2VycikgIT0gTlVMTCkgewotI2lm
ZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9s
b2dfbWJjKFNDVFBfQlVGX05FWFQob3BfZXJyKSwgU0NUUF9NQlVGX0lDT1BZKTsKLQkJCQkJCX0K
LSNlbmRpZgotCQkJCQkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKLQkJCQkJfSBl
bHNlIHsKLQkJCQkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQot
CQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAmIDB4ODApID09IDApIHsKLQkJCQkvKiBkaXNjYXJkIHRo
aXMgcGFja2V0ICovCi0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKHN0Y2IpOwot
CQkJfQkvKiBlbHNlIHNraXAgdGhpcyBiYWQgY2h1bmsgYW5kIGNvbnRpbnVlLi4uICovCi0JCQli
cmVhazsKLQkJfQkJLyogc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgKi8KLQotCi0JbmV4dF9jaHVu
azoKLQkJLyogZ2V0IHRoZSBuZXh0IGNodW5rICovCi0JCSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIo
Y2hrX2xlbmd0aCk7Ci0JCWlmICgqb2Zmc2V0ID49IGxlbmd0aCkgewotCQkJLyogbm8gbW9yZSBk
YXRhIGxlZnQgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWNoID0gKHN0
cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkJCQkJCSAg
IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIGNodW5rX2J1Zik7Ci0JCWlmIChjaCA9PSBO
VUxMKSB7Ci0JCQlpZiAobG9ja2VkX3RjYikgewotCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRf
dGNiKTsKLQkJCX0KLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9
Ci0JfQkJCS8qIHdoaWxlICovCi0KLQlpZiAoYXNjb25mX2NudCA+IDAgJiYgc3RjYiAhPSBOVUxM
KSB7Ci0JCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOwotCX0KLQlyZXR1cm4gKHN0Y2IpOwot
fQotCi0KLS8qCi0gKiBjb21tb24gaW5wdXQgY2h1bmsgcHJvY2Vzc2luZyAodjQgYW5kIHY2KQot
ICovCi12b2lkCi1zY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVjdCBtYnVmICoqbW0s
IGludCBpcGhsZW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0
cF9jaHVua2hkciAqY2gsCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY29tcHV0ZV9jcmMsCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlY25fYml0cywKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlw
ZSwgdWludDMyX3QgbWZsb3dpZCwgdWludDE2X3QgZmlibnVtLAotI2VuZGlmCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKLXsKLQl1
aW50MzJfdCBoaWdoX3RzbjsKLQlpbnQgZndkX3Rzbl9zZWVuID0gMCwgZGF0YV9wcm9jZXNzZWQg
PSAwOwotCXN0cnVjdCBtYnVmICptID0gKm1tLCAqb3BfZXJyOwotCWNoYXIgbXNnW1NDVFBfRElB
R19JTkZPX0xFTl07Ci0JaW50IHVuX3NlbnQ7Ci0JaW50IGNudF9jdHJsX3JlYWR5ID0gMDsKLQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTCwgKmlucF9kZWNyID0gTlVMTDsKLQlzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7Ci0K
LQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2ZGF0YWdyYW1zKTsKLSNpZmRlZiBTQ1RQX0FVRElU
SU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEUwLCAxKTsKLQlzY3RwX2F1ZGl0aW5nKDAs
IGlucCwgc3RjYiwgbmV0KTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VN
KQotCWlmIChjb21wdXRlX2NyYyAhPSAwKSB7Ci0JCXVpbnQzMl90IGNoZWNrLCBjYWxjX2NoZWNr
OwotCi0JCWNoZWNrID0gc2gtPmNoZWNrc3VtOwotCQlzaC0+Y2hlY2tzdW0gPSAwOwotCQljYWxj
X2NoZWNrID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgaXBobGVuKTsKLQkJc2gtPmNoZWNrc3Vt
ID0gY2hlY2s7Ci0JCWlmIChjYWxjX2NoZWNrICE9IGNoZWNrKSB7Ci0JCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQxLCAiQmFkIENTVU0gb24gU0NUUCBwYWNrZXQgY2FsY19jaGVjazoleCBjaGVj
azoleCAgbTolcCBtbGVuOiVkIGlwaGxlbjolZFxuIiwKLQkJCSAgICAgICAgY2FsY19jaGVjaywg
Y2hlY2ssICh2b2lkICopbSwgbGVuZ3RoLCBpcGhsZW4pOwotCQkJc3RjYiA9IHNjdHBfZmluZGFz
c29jaWF0aW9uX2FkZHIobSwgb2Zmc2V0LCBzcmMsIGRzdCwKLQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNoLCBjaCwgJmlucCwgJm5ldCwgdnJmX2lkKTsKLSNpZiBkZWZpbmVk
KElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JCQlpZiAoKGNoLT5jaHVua190eXBlICE9IFNDVFBf
SU5JVElBVElPTikgJiYKLQkJCSAgICAobmV0ICE9IE5VTEwpICYmIChuZXQtPnBvcnQgIT0gcG9y
dCkpIHsKLQkJCQlpZiAobmV0LT5wb3J0ID09IDApIHsKLQkJCQkJLyogVURQIGVuY2Fwc3VsYXRp
b24gdHVybmVkIG9uLiAqLwotCQkJCQluZXQtPm10dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7
Ci0JCQkJCWlmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG5ldC0+bXR1KSB7Ci0JCQkJCQlz
Y3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0JCQkJCX0KLQkJCQl9IGVs
c2UgaWYgKHBvcnQgPT0gMCkgewotCQkJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2Zm
LiAqLwotCQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQkJCS8qIFhY
WCBVcGRhdGUgc21hbGxlc3RfbXR1ICovCi0JCQkJfQotCQkJCW5ldC0+cG9ydCA9IHBvcnQ7Ci0J
CQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJaWYgKG5ldCAhPSBOVUxM
KSB7Ci0JCQkJbmV0LT5mbG93dHlwZSA9IG1mbG93dHlwZTsKLQkJCQluZXQtPmZsb3dpZCA9IG1m
bG93aWQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmICgoaW5wICE9IE5VTEwpICYmIChzdGNiICE9IE5V
TEwpKSB7Ci0JCQkJc2N0cF9zZW5kX3BhY2tldF9kcm9wcGVkKHN0Y2IsIG5ldCwgbSwgbGVuZ3Ro
LCBpcGhsZW4sIDEpOwotCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQ
VVRfRlJPTV9JTlBVVF9FUlJPUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0gZWxzZSBpZiAo
KGlucCAhPSBOVUxMKSAmJiAoc3RjYiA9PSBOVUxMKSkgewotCQkJCWlucF9kZWNyID0gaW5wOwot
CQkJfQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfYmFkc3VtKTsKLQkJCVNDVFBfU1RBVF9JTkNS
X0NPVU5URVIzMihzY3Rwc19jaGVja3N1bWVycm9ycyk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0K
LSNlbmRpZgotCS8qIERlc3RpbmF0aW9uIHBvcnQgb2YgMCBpcyBpbGxlZ2FsLCBiYXNlZCBvbiBS
RkM0OTYwLiAqLwotCWlmIChzaC0+ZGVzdF9wb3J0ID09IDApIHsKLQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfaGRyb3BzKTsKLQkJZ290byBvdXQ7Ci0JfQotCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9hZGRyKG0sIG9mZnNldCwgc3JjLCBkc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2gsIGNoLCAmaW5wLCAmbmV0LCB2cmZfaWQpOwotI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKLQlpZiAoKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElP
TikgJiYKLQkgICAgKG5ldCAhPSBOVUxMKSAmJiAobmV0LT5wb3J0ICE9IHBvcnQpKSB7Ci0JCWlm
IChuZXQtPnBvcnQgPT0gMCkgewotCQkJLyogVURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9uLiAq
LwotCQkJbmV0LT5tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQkJaWYgKHN0Y2ItPmFz
b2Muc21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKLQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVu
dChzdGNiLCBuZXQtPm10dSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7Ci0JCQkv
KiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2ZmLiAqLwotCQkJbmV0LT5tdHUgKz0gc2l6ZW9m
KHN0cnVjdCB1ZHBoZHIpOwotCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVzdF9tdHUgKi8KLQkJfQot
CQluZXQtPnBvcnQgPSBwb3J0OwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCW5ldC0+Zmxvd3R5cGUgPSBtZmxvd3R5cGU7Ci0JCW5l
dC0+Zmxvd2lkID0gbWZsb3dpZDsKLQl9Ci0jZW5kaWYKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9wb3J0KTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiAoKChfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMCkgJiYgKF9fRnJlZUJTRF92ZXJzaW9uID49
IDgwNDAwMCkpIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMCkpCi0JCWlmIChiYWRwb3J0
X2JhbmRsaW0oQkFORExJTV9TQ1RQX09PVEIpIDwgMCkgewotCQkJZ290byBvdXQ7Ci0JCX0KLSNl
bmRpZgotCQlpZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9XTl9BQ0spIHsKLQkJCXNj
dHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZTIoc3JjLCBkc3QsIHNoLAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZs
b3dpZCwgZmlibnVtLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZy
Zl9pZCwgcG9ydCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoY2gtPmNodW5rX3R5cGUgPT0g
U0NUUF9TSFVURE9XTl9DT01QTEVURSkgewotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYgKGNoLT5j
aHVua190eXBlICE9IFNDVFBfQUJPUlRfQVNTT0NJQVRJT04pIHsKLQkJCWlmICgoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2JsYWNraG9sZSkgPT0gMCkgfHwKLQkJCSAgICAoKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ibGFja2hvbGUpID09IDEpICYmCi0JCQkgICAgIChjaC0+Y2h1bmtfdHlwZSAhPSBT
Q1RQX0lOSVQpKSkgewotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJPdXQgb2YgdGhlIGJsdWUiKTsKLQkJCQlzY3RwX3NlbmRfYWJvcnQobSwgaXBobGVu
LCBzcmMsIGRzdCwKLQkJCQkgICAgICAgICAgICAgICAgc2gsIDAsIG9wX2VyciwKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCQkJCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQs
IGZpYm51bSwKLSNlbmRpZgotCQkJCSAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJ
fQotCQl9Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCWlucF9k
ZWNyID0gaW5wOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiT2ssIENvbW1vbiBp
bnB1dCBwcm9jZXNzaW5nIGNhbGxlZCwgbTolcCBpcGhsZW46JWQgb2Zmc2V0OiVkIGxlbmd0aDol
ZCBzdGNiOiVwXG4iLAotCQkodm9pZCAqKW0sIGlwaGxlbiwgb2Zmc2V0LCBsZW5ndGgsICh2b2lk
ICopc3RjYik7Ci0JaWYgKHN0Y2IpIHsKLQkJLyogYWx3YXlzIGNsZWFyIHRoaXMgYmVmb3JlIGJl
Z2lubmluZyBhIHBhY2tldCAqLwotCQlzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQgPSAwOwotCQlz
dGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMDsKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwgInN0Y2I6JXAgc3RhdGU6JXhcbiIsCi0JCQkodm9pZCAqKXN0Y2IsIHN0Y2ItPmFz
b2Muc3RhdGUpOwotCi0JCWlmICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfV0FTX0FC
T1JURUQpIHx8Ci0JCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9f
QkVfRlJFRUQpKSB7Ci0JCQkvKi0KLQkJCSAqIElmIHdlIGhpdCBoZXJlLCB3ZSBoYWQgYSByZWYg
Y291bnQKLQkJCSAqIHVwIHdoZW4gdGhlIGFzc29jIHdhcyBhYm9ydGVkIGFuZCB0aGUKLQkJCSAq
IHRpbWVyIGlzIGNsZWFyaW5nIG91dCB0aGUgYXNzb2MsIHdlIHNob3VsZAotCQkJICogTk9UIHJl
c3BvbmQgdG8gYW55IHBhY2tldC4uIGl0cyBPT1RCLgotCQkJICovCi0JCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQlzdGNiID0gTlVMTDsKLQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyks
ICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQkJ
b3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19p
bmZvX2NvZGUpLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOwotCQkJc2N0
cF9oYW5kbGVfb290YihtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAsIG9wX2Vy
ciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5
cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAgIHZy
Zl9pZCwgcG9ydCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JfQotCWlmIChJU19TQ1RQX0NPTlRS
T0woY2gpKSB7Ci0JCS8qIHByb2Nlc3MgdGhlIGNvbnRyb2wgcG9ydGlvbiBvZiB0aGUgU0NUUCBw
YWNrZXQgKi8KLQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCi0JCXN0Y2IgPSBzY3RwX3By
b2Nlc3NfY29udHJvbChtLCBpcGhsZW4sICZvZmZzZXQsIGxlbmd0aCwKLQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgY2gsCi0JCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnAsIHN0Y2IsICZuZXQsICZmd2RfdHNuX3NlZW4sCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dp
ZCwgZmlibnVtLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQs
IHBvcnQpOwotCQlpZiAoc3RjYikgewotCQkJLyogVGhpcyBjb3ZlcnMgdXMgaWYgdGhlIGNvb2tp
ZS1lY2hvIHdhcyB0aGVyZQotCQkJICogYW5kIGl0IGNoYW5nZXMgb3VyIElOUC4KLQkJCSAqLwot
CQkJaW5wID0gc3RjYi0+c2N0cF9lcDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCi0JCQlpZiAoKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgJiYKLQkJCSAg
ICAobmV0ICE9IE5VTEwpICYmIChuZXQtPnBvcnQgIT0gcG9ydCkpIHsKLQkJCQlpZiAobmV0LT5w
b3J0ID09IDApIHsKLQkJCQkJLyogVURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9uLiAqLwotCQkJ
CQluZXQtPm10dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQkJCWlmIChzdGNiLT5hc29j
LnNtYWxsZXN0X210dSA+IG5ldC0+bXR1KSB7Ci0JCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVu
dChzdGNiLCBuZXQtPm10dSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKHBvcnQgPT0gMCkgewot
CQkJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2ZmLiAqLwotCQkJCQluZXQtPm10dSAr
PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQkJCS8qIFhYWCBVcGRhdGUgc21hbGxlc3RfbXR1
ICovCi0JCQkJfQotCQkJCW5ldC0+cG9ydCA9IHBvcnQ7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCX0g
ZWxzZSB7Ci0JCS8qCi0JCSAqIG5vIGNvbnRyb2wgY2h1bmtzLCBzbyBwcmUtcHJvY2VzcyBEQVRB
IGNodW5rcyAodGhlc2UKLQkJICogY2hlY2tzIGFyZSB0YWtlbiBjYXJlIG9mIGJ5IGNvbnRyb2wg
cHJvY2Vzc2luZykKLQkJICovCi0KLQkJLyoKLQkJICogaWYgREFUQSBvbmx5IHBhY2tldCwgYW5k
IGF1dGggaXMgcmVxdWlyZWQsIHRoZW4gcHVudC4uLgotCQkgKiBjYW4ndCBoYXZlIGF1dGhlbnRp
Y2F0ZWQgd2l0aG91dCBhbnkgQVVUSCAoY29udHJvbCkKLQkJICogY2h1bmtzCi0JCSAqLwotCQlp
ZiAoKHN0Y2IgIT0gTlVMTCkgJiYKLQkJICAgIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09
IDEpICYmCi0JCSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLCBzdGNi
LT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSkgewotCQkJLyogInNpbGVudGx5IiBpZ25vcmUgKi8K
LQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7Ci0JCQlnb3RvIG91dDsK
LQkJfQotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkvKiBvdXQgb2YgdGhlIGJsdWUgREFUQSBj
aHVuayAqLwotCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVz
IiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7Ci0JCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlw
aGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwgc2gsIGlucCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVt
LAotI2VuZGlmCi0JCQkJCSB2cmZfaWQsIHBvcnQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJaWYg
KHN0Y2ItPmFzb2MubXlfdnRhZyAhPSBudG9obChzaC0+dl90YWcpKSB7Ci0JCQkvKiB2X3RhZyBt
aXNtYXRjaCEgKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2JhZHZ0YWcpOwotCQkJZ290byBv
dXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIG5vIHZhbGlk
IFRDQiBmb3IgdGhpcyBwYWNrZXQsIG9yIHdlIGZvdW5kIGl0J3MgYSBiYWQKLQkJICogcGFja2V0
IHdoaWxlIHByb2Nlc3NpbmcgY29udHJvbCwgb3Igd2UncmUgZG9uZSB3aXRoIHRoaXMKLQkJICog
cGFja2V0IChkb25lIG9yIHNraXAgcmVzdCBvZiBkYXRhKSwgc28gd2UgZHJvcCBpdC4uLgotCQkg
Ki8KLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBEQVRBIGNodW5rIHByb2Nlc3NpbmcKLQkg
Ki8KLQkvKiBwbG93IHRocm91Z2ggdGhlIGRhdGEgY2h1bmtzIHdoaWxlIGxlbmd0aCA+IG9mZnNl
dCAqLwotCi0JLyoKLQkgKiBSZXN0IHNob3VsZCBiZSBEQVRBIG9ubHkuICBDaGVjayBhdXRoZW50
aWNhdGlvbiBzdGF0ZSBpZiBBVVRIIGZvcgotCSAqIERBVEEgaXMgcmVxdWlyZWQuCi0JICovCi0J
aWYgKChsZW5ndGggPiBvZmZzZXQpICYmCi0JICAgIChzdGNiICE9IE5VTEwpICYmCi0JICAgIChz
dGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDEpICYmCi0JICAgIHNjdHBfYXV0aF9pc19yZXF1
aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MpICYmCi0J
ICAgICFzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQpIHsKLQkJLyogInNpbGVudGx5IiBpZ25vcmUg
Ki8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhtaXNzaW5nKTsKLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FVVEgxLAotCQkJIkRhdGEgY2h1bmsgcmVxdWlyZXMgQVVUSCwgc2tpcHBlZFxu
Iik7Ci0JCWdvdG8gdHJpZ2dlcl9zZW5kOwotCX0KLQlpZiAobGVuZ3RoID4gb2Zmc2V0KSB7Ci0J
CWludCByZXR2YWw7Ci0KLQkJLyoKLQkJICogRmlyc3QgY2hlY2sgdG8gbWFrZSBzdXJlIG91ciBz
dGF0ZSBpcyBjb3JyZWN0LiBXZSB3b3VsZAotCQkgKiBub3QgZ2V0IGhlcmUgdW5sZXNzIHdlIHJl
YWxseSBkaWQgaGF2ZSBhIHRhZywgc28gd2UgZG9uJ3QKLQkJICogYWJvcnQgaWYgdGhpcyBoYXBw
ZW5zLCBqdXN0IGR1bXAgdGhlIGNodW5rIHNpbGVudGx5LgotCQkgKi8KLQkJc3dpdGNoIChTQ1RQ
X0dFVF9TVEFURSgmc3RjYi0+YXNvYykpIHsKLQkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hP
RUQ6Ci0JCQkvKgotCQkJICogd2UgY29uc2lkZXIgZGF0YSB3aXRoIHZhbGlkIHRhZ3MgaW4gdGhp
cyBzdGF0ZQotCQkJICogc2hvd3MgdXMgdGhlIGNvb2tpZS1hY2sgd2FzIGxvc3QuIEltcGx5IGl0
IHdhcwotCQkJICogdGhlcmUuCi0JCQkgKi8KLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQkJc2N0cF9taXNj
X2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJh
bGxfZXJyb3JfY291bnQsCi0JCQkJCSAgICAgICAwLAotCQkJCQkgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5QVVQsCi0JCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0
IHNjdHBfY29va2llX2Fja19jaHVuayAqKWNoLCBzdGNiLCBuZXQpOwotCQkJYnJlYWs7Ci0JCWNh
c2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKLQkJCS8qCi0JCQkgKiBXZSBjb25zaWRlciBPT1RC
IGFueSBkYXRhIHNlbnQgZHVyaW5nIGFzb2Mgc2V0dXAuCi0JCQkgKi8KLQkJCXNucHJpbnRmKG1z
Zywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywg
X19mdW5jX18pOwotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtc2cpOwotCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3Qs
IHNoLCBpbnAsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCQkJCSB2
cmZfaWQsIHBvcnQpOwotCQkJZ290byBvdXQ7Ci0JCQkvKnNhX2lnbm9yZSBOT1RSRUFDSEVEKi8K
LQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6CS8qIHNob3VsZCBub3QgaGFwcGVu
ICovCi0JCWNhc2UgU0NUUF9TVEFURV9JTlVTRToJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJ
Y2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEOgkvKiBUaGlzIGlzIGEgcGVlciBlcnJv
ciAqLwotCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQ6Ci0JCWRlZmF1bHQ6Ci0J
CQlnb3RvIG91dDsKLQkJCS8qc2FfaWdub3JlIE5PVFJFQUNIRUQqLwotCQkJYnJlYWs7Ci0JCWNh
c2UgU0NUUF9TVEFURV9PUEVOOgotCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVDoKLQkJ
CWJyZWFrOwotCQl9Ci0JCS8qIHBsb3cgdGhyb3VnaCB0aGUgZGF0YSBjaHVua3Mgd2hpbGUgbGVu
Z3RoID4gb2Zmc2V0ICovCi0JCXJldHZhbCA9IHNjdHBfcHJvY2Vzc19kYXRhKG1tLCBpcGhsZW4s
ICZvZmZzZXQsIGxlbmd0aCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLCBzdGNi
LCBuZXQsICZoaWdoX3Rzbik7Ci0JCWlmIChyZXR2YWwgPT0gMikgewotCQkJLyoKLQkJCSAqIFRo
ZSBhc3NvY2lhdGlvbiBhYm9ydGVkLCBOTyBVTkxPQ0sgbmVlZGVkIHNpbmNlCi0JCQkgKiB0aGUg
YXNzb2NpYXRpb24gaXMgZGVzdHJveWVkLgotCQkJICovCi0JCQlzdGNiID0gTlVMTDsKLQkJCWdv
dG8gb3V0OwotCQl9Ci0JCWRhdGFfcHJvY2Vzc2VkID0gMTsKLQkJLyoKLQkJICogQW55dGhpbmcg
aW1wb3J0YW50IG5lZWRzIHRvIGhhdmUgYmVlbiBtX2NvcHknZWQgaW4KLQkJICogcHJvY2Vzc19k
YXRhCi0JCSAqLwotCX0KLQotCS8qIHRha2UgY2FyZSBvZiBlY24gKi8KLQlpZiAoKGRhdGFfcHJv
Y2Vzc2VkID09IDEpICYmCi0JICAgIChzdGNiLT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0gMSkgJiYK
LQkgICAgKChlY25fYml0cyAmIFNDVFBfQ0VfQklUUykgPT0gU0NUUF9DRV9CSVRTKSkgewotCQkv
KiBZZXAsIHdlIG5lZWQgdG8gYWRkIGEgRUNORSAqLwotCQlzY3RwX3NlbmRfZWNuX2VjaG8oc3Rj
YiwgbmV0LCBoaWdoX3Rzbik7Ci0JfQotCi0JaWYgKChkYXRhX3Byb2Nlc3NlZCA9PSAwKSAmJiAo
ZndkX3Rzbl9zZWVuKSkgewotCQlpbnQgd2FzX2FfZ2FwOwotCQl1aW50MzJfdCBoaWdoZXN0X3Rz
bjsKLQotCQlpZiAoU0NUUF9UU05fR1Qoc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJf
bWFwLCBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7Ci0JCQloaWdoZXN0X3Rz
biA9IHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX25yX21hcDsKLQkJfSBlbHNlIHsKLQkJ
CWhpZ2hlc3RfdHNuID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCQl9Ci0J
CXdhc19hX2dhcCA9IFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBzdGNiLT5hc29jLmN1bXVsYXRp
dmVfdHNuKTsKLQkJc3RjYi0+YXNvYy5zZW5kX3NhY2sgPSAxOwotCQlzY3RwX3NhY2tfY2hlY2so
c3RjYiwgd2FzX2FfZ2FwKTsKLQl9IGVsc2UgaWYgKGZ3ZF90c25fc2VlbikgewotCQlzdGNiLT5h
c29jLnNlbmRfc2FjayA9IDE7Ci0JfQotCS8qIHRyaWdnZXIgc2VuZCBvZiBhbnkgY2h1bmtzIGlu
IHF1ZXVlLi4uICovCi10cmlnZ2VyX3NlbmQ6Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVE
Ci0Jc2N0cF9hdWRpdF9sb2coMHhFMCwgMik7Ci0Jc2N0cF9hdWRpdGluZygxLCBpbnAsIHN0Y2Is
IG5ldCk7Ci0jZW5kaWYKLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAotCQkiQ2hlY2sgZm9y
IGNodW5rIG91dHB1dCBwcnc6JWQgdHFlOiVkIHRmPSVkXG4iLAotCQlzdGNiLT5hc29jLnBlZXJz
X3J3bmQsCi0JCVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSksCi0J
CXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KTsKLQl1bl9zZW50ID0gKHN0Y2ItPmFzb2MudG90YWxf
b3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCk7Ci0JaWYgKCFUQUlM
UV9FTVBUWSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUpKSB7Ci0JCWNudF9jdHJsX3Jl
YWR5ID0gc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2NudCAtIHN0Y2ItPmFzb2MuZWNuX2VjaG9fY250
X29ucTsKLQl9Ci0JaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1
ZSkgfHwKLQkgICAgY250X2N0cmxfcmVhZHkgfHwKLQkgICAgc3RjYi0+YXNvYy50cmlnZ2VyX3Jl
c2V0IHx8Ci0JICAgICgodW5fc2VudCkgJiYKLQkgICAgIChzdGNiLT5hc29jLnBlZXJzX3J3bmQg
PiAwIHx8Ci0JICAgICAgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA8PSAwICYmIHN0Y2ItPmFzb2Mu
dG90YWxfZmxpZ2h0ID09IDApKSkpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIkNh
bGxpbmcgY2h1bmsgT1VUUFVUXG4iKTsKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX0NPTlRST0xfUFJPQywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgImNodW5rIE9VVFBVVCByZXR1cm5zXG4iKTsKLQl9Ci0j
aWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdF9sb2coMHhFMCwgMyk7Ci0J
c2N0cF9hdWRpdGluZygyLCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLSBvdXQ6Ci0JaWYgKHN0
Y2IgIT0gTlVMTCkgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JfQotCWlmIChpbnBfZGVj
ciAhPSBOVUxMKSB7Ci0JCS8qIHJlZHVjZSByZWYtY291bnQgKi8KLQkJU0NUUF9JTlBfV0xPQ0so
aW5wX2RlY3IpOwotCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnBfZGVjcik7Ci0JCVNDVFBfSU5QX1dV
TkxPQ0soaW5wX2RlY3IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLSNpZmRlZiBJTkVUCi0jaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXZvaWQKLXNjdHBfaW5wdXRfd2l0
aF9wb3J0KHN0cnVjdCBtYnVmICppX3BhaywgaW50IG9mZiwgdWludDE2X3QgcG9ydCkKLSNlbGlm
IGRlZmluZWQoX19QYW5kYV9fKQotdm9pZAotc2N0cF9pbnB1dChwYWtoYW5kbGVfdHlwZSBpX3Bh
aykKLSNlbHNlCi12b2lkCi0jaWYgX19TVERDX18KLXNjdHBfaW5wdXQoc3RydWN0IG1idWYgKmlf
cGFrLC4uLikKLSNlbHNlCi1zY3RwX2lucHV0KGlfcGFrLCB2YV9hbGlzdCkKLQlzdHJ1Y3QgbWJ1
ZiAqaV9wYWs7Ci0jZW5kaWYKLSNlbmRpZgotewotCXN0cnVjdCBtYnVmICptOwotCWludCBpcGhs
ZW47Ci0JdWludDMyX3QgdnJmX2lkID0gMDsKLQl1aW50OF90IGVjbl9iaXRzOwotCXN0cnVjdCBz
b2NrYWRkcl9pbiBzcmMsIGRzdDsKLQlzdHJ1Y3QgaXAgKmlwOwotCXN0cnVjdCBzY3RwaGRyICpz
aDsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7Ci0JaW50IGxlbmd0aCwgb2Zmc2V0OwotI2lm
ICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCXVpbnQ4X3QgY29tcHV0ZV9jcmM7Ci0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXVpbnQzMl90IG1mbG93aWQ7Ci0JdWludDhf
dCBtZmxvd3R5cGU7Ci0JdWludDE2X3QgZmlibnVtOwotI2VuZGlmCi0jaWYgIShkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykp
Ci0JdWludDE2X3QgcG9ydCA9IDA7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQot
CS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3Jr
IHJpZ2h0LiAqLwotCWlwaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXApOwotI2Vsc2UKLQlpcGhsZW4g
PSBvZmY7Ci0jZW5kaWYKLQlpZiAoU0NUUF9HRVRfUEtUX1ZSRklEKGlfcGFrLCB2cmZfaWQpKSB7
Ci0JCVNDVFBfUkVMRUFTRV9QS1QoaV9wYWspOwotCQlyZXR1cm47Ci0JfQotCW0gPSBTQ1RQX0hF
QURFUl9UT19DSEFJTihpX3Bhayk7Ci0jaWZkZWYgX19QYW5kYV9fCi0JU0NUUF9ERVRBQ0hfSEVB
REVSX0ZST01fQ0hBSU4oaV9wYWspOwotCSh2b2lkKVNDVFBfUkVMRUFTRV9IRUFERVIoaV9wYWsp
OwotI2VuZGlmCi0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQkvKiBMb2cgaW4gYW55IGlucHV0
IG1idWZzICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19tYmMobSwgU0NUUF9NQlVGX0lO
UFVUKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCi0JaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lO
RykgewotCQlzY3RwX3BhY2tldF9sb2cobSk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkKLQlTQ1RQREJHKFNDVFBf
REVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5n
dGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JWIuXG4iLAotCSAgICAgICAg
bS0+bV9wa3RoZHIubGVuLAotCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCi0J
ICAgICAgICAoaW50KW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MsIENTVU1fQklUUyk7Ci0jZWxpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9B
RCwKLQkgICAgICAgICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQg
b24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAotCSAgICAgICAgbS0+bV9wa3RoZHIubGVu
LAotCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCi0JICAgICAgICBtLT5tX3Br
dGhkci5jc3VtX2ZsYWdzKTsKLSNlbHNlCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0NSQ09GRkxPQUQs
Ci0JICAgICAgICAic2N0cF9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9u
ICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwK
LQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKLQkgICAgICAgIG0tPm1fcGt0
aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX2lucHV0KCk6
IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMlZCB3aXRoIGNzdW1fZmxhZ3MgMHgl
eC5cbiIsCi0JICAgICAgICBtLT5tX3BrdGhkci5sZW4sCi0JICAgICAgICBtLT5tX3BrdGhkci5y
Y3ZpZi0+aWZfbmFtZSwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl91bml0LAotCSAg
ICAgICAgbS0+bV9wa3RoZHIuY3N1bV9mbGFncyk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2lu
ZG93c19fKQotCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAotCSAgICAgICAgInNjdHBf
aW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxh
Z3MgMHgleC5cbiIsCi0JICAgICAgICBtLT5tX3BrdGhkci5sZW4sCi0JICAgICAgICBtLT5tX3Br
dGhkci5yY3ZpZi0+aWZfeG5hbWUsCi0JICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JbWZsb3dpZCA9IG0tPm1fcGt0aGRy
LmZsb3dpZDsKLQltZmxvd3R5cGUgPSBNX0hBU0hUWVBFX0dFVChtKTsKLQlmaWJudW0gPSBNX0dF
VEZJQihtKTsKLSNlbmRpZgotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKLQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsKLQkvKiBHZXQgSVAsIFND
VFAsIGFuZCBmaXJzdCBjaHVuayBoZWFkZXIgdG9nZXRoZXIgaW4gdGhlIGZpcnN0IG1idWYuICov
Ci0Jb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcik7Ci0JaWYgKFNDVFBfQlVGX0xFTihtKSA8IG9mZnNldCkgewotCQlp
ZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7Ci0JCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19oZHJvcHMpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlwID0gbXRvZChtLCBzdHJ1
Y3QgaXAgKik7Ci0Jc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBpcGhsZW4p
OwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKSk7Ci0Jb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7
Ci0JbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzcmMuc2lu
X2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0Jc3JjLnNpbl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNyYy5zaW5fcG9ydCA9IHNoLT5z
cmNfcG9ydDsKLQlzcmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOwotCW1lbXNldCgmZHN0LCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwot
I2lmZGVmIEhBVkVfU0lOX0xFTgotCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbik7Ci0jZW5kaWYKLQlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCWRzdC5zaW5f
YWRkciA9IGlwLT5pcF9kc3Q7Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlOVE9IUyhpcC0+
aXBfbGVuKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlpcC0+aXBfbGVuID0gbnRvaHMoaXAtPmlw
X2xlbik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDEwMDAwMDAKLQlsZW5ndGggPSBudG9ocyhpcC0+aXBfbGVuKTsKLSNlbHNlCi0J
bGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX0FQ
UExFX18pCi0JbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNlbGlmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JbGVuZ3RoID0gaXAtPmlwX2xlbjsKLSNlbHNlCi0J
bGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNlbmRpZgotI2Vsc2UKLQlsZW5ndGggPSBp
cC0+aXBfbGVuOwotI2VuZGlmCi0JLyogVmFsaWRhdGUgbWJ1ZiBjaGFpbiBsZW5ndGggd2l0aCBJ
UCBwYXlsb2FkIGxlbmd0aC4gKi8KLQlpZiAoU0NUUF9IRUFERVJfTEVOKG0pICE9IGxlbmd0aCkg
ewotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAotCQkgICAgICAgICJzY3RwX2lucHV0KCkg
bGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwgbGVuZ3RoLCBTQ1RQX0hFQURFUl9MRU4o
bSkpOwotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOwotCQlnb3RvIG91dDsKLQl9Ci0J
LyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KLQlpZiAo
SU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkgewotCQlnb3RvIG91dDsK
LQl9Ci0JaWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRkciwgbSkpIHsKLQkJZ290
byBvdXQ7Ci0JfQotCWVjbl9iaXRzID0gaXAtPmlwX3RvczsKLSNpZiBkZWZpbmVkKFNDVFBfV0lU
SF9OT19DU1VNKQotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0jZWxzZQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAotCWlm
IChtLT5tX3BrdGhkci5jc3VtX2ZsYWdzICYgQ1NVTV9TQ1RQX1ZBTElEKSB7Ci0JCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7Ci0JCWNvbXB1dGVfY3JjID0gMDsKLQl9IGVsc2Ugewot
I2Vsc2UKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYm
Ci0JICAgICgoc3JjLnNpbl9hZGRyLnNfYWRkciA9PSBkc3Quc2luX2FkZHIuc19hZGRyKSB8fAot
CSAgICAgKFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkpKSkgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19yZWN2bm9jcmMpOwotCQljb21wdXRlX2NyYyA9IDA7Ci0JfSBlbHNlIHsKLSNlbmRpZgotCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQljb21wdXRlX2NyYyA9IDE7Ci0JfQot
I2VuZGlmCi0Jc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmbSwgaXBobGVuLCBvZmZzZXQs
IGxlbmd0aCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc3JjLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAq
KSZkc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsCi0jaWYgIWRlZmlu
ZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21w
dXRlX2NyYywKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNuX2JpdHMs
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotIG91dDoKLQlpZiAobSkgewotCQlzY3RwX21fZnJl
ZW0obSk7Ci0JfQotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRl
ZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi1leHRlcm4gaW50ICpzY3Rw
X2NwdWFycnk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDExMDAwMjAKLWludAotc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKm1wLCBp
bnQgKm9mZnAsIGludCBwcm90byBTQ1RQX1VOVVNFRCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlp
bnQgb2ZmOwotCi0JbSA9ICptcDsKLQlvZmYgPSAqb2ZmcDsKLSNlbHNlCi12b2lkCi1zY3RwX2lu
cHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQotewotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNNUCkKLQlp
ZiAobXBfbmNwdXMgPiAxKSB7Ci0JCXN0cnVjdCBpcCAqaXA7Ci0JCXN0cnVjdCBzY3RwaGRyICpz
aDsKLQkJaW50IG9mZnNldDsKLQkJaW50IGNwdV90b191c2U7Ci0JCXVpbnQzMl90IGZsb3dpZCwg
dGFnOwotCi0JCWlmIChNX0hBU0hUWVBFX0dFVChtKSAhPSBNX0hBU0hUWVBFX05PTkUpIHsKLQkJ
CWZsb3dpZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKLQkJfSBlbHNlIHsKLQkJCS8qIE5vIGZsb3cg
aWQgYnVpbHQgYnkgbG93ZXIgbGF5ZXJzCi0JCQkgKiBmaXggaXQgc28gd2UgY3JlYXRlIG9uZS4K
LQkJCSAqLwotCQkJb2Zmc2V0ID0gb2ZmICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJCWlm
IChTQ1RQX0JVRl9MRU4obSkgPCBvZmZzZXQpIHsKLQkJCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBv
ZmZzZXQpKSA9PSBOVUxMKSB7Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyMAot
CQkJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0jZWxzZQotCQkJCQlyZXR1cm47Ci0jZW5kaWYK
LQkJCQl9Ci0JCQl9Ci0JCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOwotCQkJc2ggPSAoc3Ry
dWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBvZmYpOwotCQkJdGFnID0gaHRvbmwoc2gtPnZf
dGFnKTsKLQkJCWZsb3dpZCA9IHRhZyBeIG50b2hzKHNoLT5kZXN0X3BvcnQpIF4gbnRvaHMoc2gt
PnNyY19wb3J0KTsKLQkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9IGZsb3dpZDsKLQkJCU1fSEFTSFRZ
UEVfU0VUKG0sIE1fSEFTSFRZUEVfT1BBUVVFX0hBU0gpOwotCQl9Ci0JCWNwdV90b191c2UgPSBz
Y3RwX2NwdWFycnlbZmxvd2lkICUgbXBfbmNwdXNdOwotCQlzY3RwX3F1ZXVlX3RvX21jb3JlKG0s
IG9mZiwgY3B1X3RvX3VzZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gMTEwMDAyMAotCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0jZWxzZQotCQly
ZXR1cm47Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYs
IDApOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEx
MDAwMjAKLQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbnB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYzRjZjQy
M2YxYzYzZDAxNzhhNjMwNDM3Y2UwYTMwNDNmZjY0OTdiLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5oCisr
KyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFt
ZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUg
PHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBf
aW5wdXQuaCAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKLSNlbmRpZgot
Ci0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfSU5QVVRfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9J
TlBVVF9IXwotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci12b2lkCi1zY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVjdCBtYnVmICoqLCBpbnQs
IGludCwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2NodW5raGRyICosCi0jaWYgIWRlZmluZWQoU0NUUF9X
SVRIX05PX0NTVU0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsCi0jZW5k
aWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50MzJf
dCwgdWludDE2X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QsIHVpbnQxNl90KTsKLQotc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgKgotc2N0
cF9maW5kX3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHNlcSwK
LSAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqYmNoayk7Ci0KLXZvaWQgc2N0cF9yZXNldF9p
bl9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJfZW50cmllcywK
LSAgICB1aW50MTZfdCAqbGlzdCk7Ci0KLQotaW50IHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc29fbG9ja2VkKTsKLQotI2VuZGlmCi0jZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDgzYTU2NWMzNzFjNGYxMTdlNDE1ZWRlNWE1ZGFmYzUyMGQ5MWIzNWUuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2xvY2tfdXNlcnNwYWNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNTEgKzAsMCBAQAot
LyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRh
bGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBCcmFkIFBlbm9mZi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLSAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQg
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgot
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElE
KCIkRnJlZUJTRCQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfTE9DS19FTVBU
WV9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0xPQ0tfRU1QVFlfSF8KLQotLyoKLSAqIEVtcHR5
IExvY2sgZGVjbGFyYXRpb25zIGZvciBhbGwgb3RoZXIgcGxhdGZvcm1zLiBQcmUtcHJvY2VzcyBh
d2F5IHRvCi0gKiBub3RoaW5nLgotICovCi0KLS8qIF9fVXNlcnNwYWNlX18gcHV0dGluZyBsb2Nr
IG1hY3JvcyBpbiBzYW1lIG9yZGVyIGFzIHNjdHBfbG9ja19ic2QuaCAuLi4qLwotCi0jZGVmaW5l
IFNDVFBfSVBJX0NPVU5UX0lOSVQoKQotCi0jZGVmaW5lIFNDVFBfU1RBVExPR19JTklUX0xPQ0so
KQotI2RlZmluZSBTQ1RQX1NUQVRMT0dfTE9DSygpCi0jZGVmaW5lIFNDVFBfU1RBVExPR19VTkxP
Q0soKQotI2RlZmluZSBTQ1RQX1NUQVRMT0dfREVTVFJPWSgpCi0KLSNkZWZpbmUgU0NUUF9JTlBf
SU5GT19MT0NLX0RFU1RST1koKQotCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19JTklUKCkK
LSNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV0xP
Q0soKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1RSWUxPQ0soKSAxCi0jZGVmaW5lIFNDVFBfSU5Q
X0lORk9fUlVOTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCi0KLSNkZWZp
bmUgU0NUUF9XUV9BRERSX0lOSVQoKQotI2RlZmluZSBTQ1RQX1dRX0FERFJfREVTVFJPWSgpCi0j
ZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NLKCkKLSNkZWZpbmUgU0NUUF9XUV9BRERSX1VOTE9DSygp
Ci0KLQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKQotI2RlZmluZSBTQ1RQX0lQSV9BRERS
X0RFU1RST1koKQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkKLSNkZWZpbmUgU0NUUF9J
UElfQUREUl9XTE9DSygpCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfUlVOTE9DSygpCi0jZGVmaW5l
IFNDVFBfSVBJX0FERFJfV1VOTE9DSygpCi0KLSNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1Ff
SU5JVCgpCi0jZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RST1koKQotI2RlZmluZSBT
Q1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCkKLSNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1Ff
VU5MT0NLKCkKLQotCi0jZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQoKQotI2RlZmluZSBTQ1RQ
X0lQX1BLVExPR19MT0NLKCkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkKLSNkZWZp
bmUgU0NUUF9JUF9QS1RMT0dfREVTVFJPWSgpCi0KLQotCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURf
SU5JVChfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKLSNkZWZpbmUg
U0NUUF9JTlBfUkVBRF9MT0NLKF9pbnApCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9p
bnApCi0KLSNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApCi0jZGVmaW5lIFNDVFBfQVNP
Q19DUkVBVEVfTE9DS19JTklUKF9pbnApCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShf
aW5wKQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVTVFJPWShfaW5wKQotCi0KLSNk
ZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkK
LQotI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkgLyogRG9uJ3Qga25v
dyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0KLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9DT05URU5E
RUQoX2lucCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLwotCi0jZGVm
aW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoX2lucCkgKDApIC8qIERvbid0IGtu
b3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLwotCi0KLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NL
X0lOSVQoX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3RjYikKLSNk
ZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfVU5M
T0NLKF90Y2IpCi0KLSNkZWZpbmUgU0NUUF9JTlBfSU5DUl9SRUYoX2lucCkKLSNkZWZpbmUgU0NU
UF9JTlBfREVDUl9SRUYoX2lucCkKLQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soX2lu
cCkKLQotI2RlZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApCi0jZGVmaW5lIFNDVFBfSU5QX1dV
TkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkKLQotCi0j
ZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5JVChfdGNiKQotI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0RF
U1RST1koX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKQotI2RlZmluZSBTQ1RQX1RD
Ql9UUllMT0NLKF90Y2IpIDEKLSNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NLKF90Y2IpCi0jZGVmaW5l
IFNDVFBfVENCX1VOTE9DS19JRk9XTkVEKF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNT
RVJUKF90Y2IpCi0KLQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkKLSNkZWZp
bmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkKLSNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKQot
I2RlZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0tfREVTVFJPWSgpCi0KLQotCi0jZGVmaW5lIFNDVFBf
SU5DUl9FUF9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAgICAgIHNjdHBw
Y2JpbmZvLmlwaV9jb3VudF9lcCsrOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5l
IFNDVFBfREVDUl9FUF9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAgICAg
IHNjdHBwY2JpbmZvLmlwaV9jb3VudF9lcC0tOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0j
ZGVmaW5lIFNDVFBfSU5DUl9BU09DX0NPVU5UKCkgXAotICAgICAgICAgICAgICAgIGRvIHsgXAot
CSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9hc29jKys7IFwKLQkgICAgICAg
IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0FTT0NfQ09VTlQoKSBcCi0gICAgICAg
ICAgICAgICAgZG8geyBcCi0JICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2Fz
b2MtLTsgXAotCSAgICAgICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lOQ1JfTEFERFJf
Q09VTlQoKSBcCi0gICAgICAgICAgICAgICAgZG8geyBcCi0JICAgICAgICAgICAgICAgc2N0cHBj
YmluZm8uaXBpX2NvdW50X2xhZGRyKys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZp
bmUgU0NUUF9ERUNSX0xBRERSX0NPVU5UKCkgXAotICAgICAgICAgICAgICAgIGRvIHsgXAotCSAg
ICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9sYWRkci0tOyBcCi0JICAgICAgICB9
IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9SQUREUl9DT1VOVCgpIFwKLSAgICAgICAg
ICAgICAgICBkbyB7IFwKLSAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X3Jh
ZGRyKys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1JBRERS
X0NPVU5UKCkgXAotICAgICAgICAgICAgICAgIGRvIHsgXAotIAkgICAgICAgICAgICAgICBzY3Rw
cGNiaW5mby5pcGlfY291bnRfcmFkZHItLTsgXAotCSAgICAgICAgfSB3aGlsZSAoMCkKLQotI2Rl
ZmluZSBTQ1RQX0lOQ1JfQ0hLX0NPVU5UKCkgXAotICAgICAgICAgICAgICAgIGRvIHsgXAotICAJ
ICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2NodW5rKys7IFwKLQkgICAgICAg
IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0NIS19DT1VOVCgpIFwKLSAgICAgICAg
ICAgICAgICBkbyB7IFwKLSAgCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9j
aHVuay0tOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9SRUFE
UV9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAgICAgIHNjdHBwY2JpbmZv
LmlwaV9jb3VudF9yZWFkcSsrOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFND
VFBfREVDUl9SRUFEUV9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAgICAg
IHNjdHBwY2JpbmZvLmlwaV9jb3VudF9yZWFkcS0tOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQot
Ci0jZGVmaW5lIFNDVFBfSU5DUl9TVFJNT1FfQ09VTlQoKSBcCi0gICAgICAgICAgICAgICAgZG8g
eyBcCi0JCSAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfc3RybW9xKys7IFwKLQkgICAgICAg
IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpIFwKLSAgICAg
ICAgICAgICAgICBkbyB7IFwKLQkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9zdHJtb3Et
LTsgXAotCSAgICAgICAgfSB3aGlsZSAoMCkKLQotCi0vKiBub3Qgc3VyZSBpZiBfX1VzZXJzcGFj
ZV9fIG5lZWRzIHRoZXNlIChidXQgY29waWVkIG5vbmV0aGVsZXNzLi4uKSAqLwotI2lmIGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0jZGVmaW5lIFNDVFBfSU5QX1NPKHNjdHBpbnApCShz
Y3RwaW5wKS0+aXBfaW5wLmlucC5pbnBfc29ja2V0Ci0jZGVmaW5lIFNDVFBfU09DS0VUX0xPQ0so
c28sIHJlZmNudCkKLSNkZWZpbmUgU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCByZWZjbnQpCi0jZW5k
aWYKLQotCi0vKiB0aGVzZSB3ZXJlIGluIHNjdHBfbG9ja19lbXB0eS5oIGJ1dCBhcmVuJ3QgaW4g
c2N0cF9sb2NrX2JzZC5oIC4uLiAqLwotI2lmIDAKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9MT0NL
KCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9VTkxPQ0soKQotI2VuZGlmCi0KLQotLyogVGhlc2Ug
d2VyZSBpbiBzY3RwX2xvY2tfZW1wdHkuaCBiZWNhdXNlIHRoZXkgd2VyZSBjb21tZW50ZWQgb3V0
IHdpdGhpbgotICogIHdpdGhpbiB1c2VyX2luY2x1ZGUvdXNlcl9zb2NrZXR2YXIuaCAuICBJZiB0
aGV5IGFyZSBOT1QgY29tbWVudGVkIG91dAotICogIGluIHVzZXJfc29ja2V0dmFyLmggKGJlY2F1
c2UgdGhhdCBzZWVtcyB0aGUgbW9yZSBuYXR1cmFsIHBsYWNlIGZvciB0aGVtCi0gKiAgdG8gbGl2
ZSksIHRoZW4gY2hhbmdlIHRoaXMgImlmIiB0byAwLiAgS2VlcCB0aGUgImlmIiBhcyAxIGlmIHRo
ZXNlIEFSRQotICogIGluZGVlZCBjb21tZW50ZWQgb3V0IGluIHVzZXJfc29ja2V0dmFyLmggLgot
ICoKLSAqIFRoaXMgbW9kdWxhcml0eSBpcyBrZXB0IHNvIHRoaXMgZmlsZSBjYW4gZWFzaWx5IGJl
IGNob3NlbiBhcyBhbiBhbHRlcm5hdGl2ZQotICogIHRvIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NL
Uy4gIElmIG9uZSBkZWZpbmVzIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyBpbgotICogIHVzZXJf
aW5jbHVkZS9vcHRfc2N0cC5oLCB0aGVuIHRoZSBmaWxlIHNjdHBfcHJvY2Vzc19sb2NrLmggKHdo
aWNoIHdlIGRpZG4ndAotICogIGltcGxlbWVudCkgaXMgdXNlZCwgYW5kIHRoYXQgZGVjbGFyZXMg
dGhlc2UgbG9ja3MgYWxyZWFkeSAoc28gdXNpbmcKLSAqICBTQ1RQX1BST0NFU1NfTEVWRUxfTE9D
S1MgKnJlcXVpcmVzKiB0aGF0IHRoZXNlIGRlZmludGlvbnMgYmUgY29tbWVudGVkIG91dAotICog
IGluIHVzZXJfc29ja2V0dmFyLmgpLgotICovCi0jaWYgMQotI2RlZmluZSBTT0NLX0xPQ0soX3Nv
KQotI2RlZmluZSBTT0NLX1VOTE9DSyhfc28pCi0jZGVmaW5lIFNPQ0tCVUZfTE9DSyhfc29fYnVm
KQotI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKQotI2RlZmluZSBTT0NLQlVGX0xPQ0tf
QVNTRVJUKF9zb19idWYpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfb3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA0ODg4MzgxMWExZTU0ZmJmZDA2MmJjYWIxZTI2NWVlN2Y5ZjM2
MWY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9vcy5oCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLyot
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwg
U3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRl
ZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNE
OiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfb3MuaCAyMzU4MjggMjAxMi0wNS0yMyAxMToyNjoyOFog
dHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfT1NfSF8KLSNkZWZp
bmUgX05FVElORVRfU0NUUF9PU19IXwotCi0vKgotICogR2VuZXJhbCBrZXJuZWwgbWVtb3J5IGFs
bG9jYXRpb246Ci0gKiAgU0NUUF9NQUxMT0MoZWxlbWVudCwgdHlwZSwgc2l6ZSwgbmFtZSkKLSAq
ICBTQ1RQX0ZSRUUoZWxlbWVudCkKLSAqIEtlcm5lbCBtZW1vcnkgYWxsb2NhdGlvbiBmb3IgInNv
bmFtZSItIG1lbW9yeSBtdXN0IGJlIHplcm9lZC4KLSAqICBTQ1RQX01BTExPQ19TT05BTUUobmFt
ZSwgdHlwZSwgc2l6ZSkKLSAqICBTQ1RQX0ZSRUVfU09OQU1FKG5hbWUpCi0gKi8KLQotLyoKLSAq
IFpvbmUocG9vbCkgYWxsb2NhdGlvbiByb3V0aW5lczogTVVTVCBiZSBkZWZpbmVkIGZvciBlYWNo
IE9TLgotICogIHpvbmUgPSB6b25lL3Bvb2wgcG9pbnRlci4KLSAqICBuYW1lID0gc3RyaW5nIG5h
bWUgb2YgdGhlIHpvbmUvcG9vbC4KLSAqICBzaXplID0gc2l6ZSBvZiBlYWNoIHpvbmUvcG9vbCBl
bGVtZW50LgotICogIG51bWJlciA9IG51bWJlciBvZiBlbGVtZW50cyBpbiB6b25lL3Bvb2wuCi0g
KiAgdHlwZSA9IHN0cnVjdHVyZSB0eXBlIHRvIGFsbG9jYXRlCi0gKgotICogc2N0cF96b25lX3QK
LSAqIFNDVFBfWk9ORV9JTklUKHpvbmUsIG5hbWUsIHNpemUsIG51bWJlcikKLSAqIFNDVFBfWk9O
RV9HRVQoem9uZSwgdHlwZSkKLSAqIFNDVFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQpCi0gKiBT
Q1RQX1pPTkVfREVTVFJPWSh6b25lKQotICovCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc19ic2QuaD4KLSNlbHNlCi0jZGVmaW5lIE1PRFVMRV9H
TE9CQUwoX0IpIChfQikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX21hY29zeC5oPgotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSNpbmNsdWRlIDxpcC9zY3RwL3NjdHBfb3NfaW94
Lmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX29zX3dpbmRvd3MuaD4KLSNlbmRpZgotCi0vKiBBbGwgb3MncyBtdXN0IGltcGxlbWVu
dCB0aGlzIGFkZHJlc3MgZ2F0aGVyZXIuIElmCi0gKiBubyBWUkYncyBleGlzdCwgdGhlbiB2cmYg
MCBpcyB0aGUgb25seSBvbmUgYW5kIGFsbAotICogYWRkcmVzc2VzIGFuZCBpZm4ncyBsaXZlIGhl
cmUuCi0gKi8KLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1ZSRiAwCi12b2lkIHNjdHBfaW5pdF92cmZf
bGlzdChpbnQgdnJmaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9vc191c2Vyc3BhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2Uu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiN2RlMjM0NDM1YjU5ZTBkMmYzZDAx
YTkwZWMxMTE2MTU4MGM0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMTYxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcsIGJ5
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgQnJhZCBQZW5vZmYuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbgotICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1l
IG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX3NjdHBfb3NfdXNlcnNwYWNlX2hf
XwotI2RlZmluZSBfX3NjdHBfb3NfdXNlcnNwYWNlX2hfXwotLyoKLSAqIFVzZXJzcGFjZSBpbmNs
dWRlcwotICogQWxsIHRoZSBvcHRfeHh4LmggZmlsZXMgYXJlIHBsYWNlZCBpbiB0aGUga2VybmVs
IGJ1aWxkIGRpcmVjdG9yeS4KLSAqIFdlIHdpbGwgcGxhY2UgdGhlbSBpbiB1c2Vyc3BhY2Ugc3Rh
Y2sgYnVpbGQgZGlyZWN0b3J5LgotICovCi0KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5j
bHVkZSA8d3MydGNwaXAuaD4KLSNpbmNsdWRlIDxpcGhscGFwaS5oPgotI2luY2x1ZGUgPG1zd3Nv
Y2suaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSAidXNlcl9lbnZpcm9ubWVudC5o
IgotdHlwZWRlZiBDUklUSUNBTF9TRUNUSU9OIHVzZXJsYW5kX211dGV4X3Q7Ci0jaWYgV0lOVkVS
IDwgMHgwNjAwCi1lbnVtIHsKLQlDX1NJR05BTCA9IDAsCi0JQ19CUk9BRENBU1QgPSAxLAotCUNf
TUFYX0VWRU5UUyA9IDIKLX07Ci10eXBlZGVmIHN0cnVjdAotewotCXVfaW50IHdhaXRlcnNfY291
bnQ7Ci0JQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJzX2NvdW50X2xvY2s7Ci0JSEFORExFIGV2ZW50
c19bQ19NQVhfRVZFTlRTXTsKLX0gdXNlcmxhbmRfY29uZF90Owotdm9pZCBJbml0aWFsaXplWFBD
b25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKik7Ci12b2lkIERlbGV0ZVhQQ29uZGl0
aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOwotaW50IFNsZWVwWFBDb25kaXRpb25WYXJp
YWJsZSh1c2VybGFuZF9jb25kX3QgKiwgdXNlcmxhbmRfbXV0ZXhfdCAqKTsKLXZvaWQgV2FrZUFs
bFhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOwotI2RlZmluZSBJbml0aWFs
aXplQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgSW5pdGlhbGl6ZVhQQ29uZGl0aW9uVmFyaWFibGUo
Y29uZCkKLSNkZWZpbmUgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgRGVsZXRlWFBDb25k
aXRpb25WYXJpYWJsZShjb25kKQotI2RlZmluZSBTbGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoY29u
ZCwgbXR4LCB0aW1lKSBTbGVlcFhQQ29uZGl0aW9uVmFyaWFibGUoY29uZCwgbXR4KQotI2RlZmlu
ZSBXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgV2FrZUFsbFhQQ29uZGl0aW9uVmFyaWFi
bGUoY29uZCkKLSNlbHNlCi0jZGVmaW5lIERlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKGNvbmQpCi10
eXBlZGVmIENPTkRJVElPTl9WQVJJQUJMRSB1c2VybGFuZF9jb25kX3Q7Ci0jZW5kaWYKLXR5cGVk
ZWYgSEFORExFIHVzZXJsYW5kX3RocmVhZF90OwotI2RlZmluZSBBRERSRVNTX0ZBTUlMWQl1bnNp
Z25lZCBfX2ludDgKLSNkZWZpbmUgSVBWRVJTSU9OICA0Ci0jZGVmaW5lIE1BWFRUTCAgICAgMjU1
Ci0vKiBWUzIwMTAgY29tZXMgd2l0aCBzdGRpbnQuaCAqLwotI2lmIF9NU0NfVkVSID49IDE2MDAK
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCi0jZGVmaW5lIHVpbnQ2NF90ICAgdW5zaWduZWQg
X19pbnQ2NAotI2RlZmluZSB1aW50MzJfdCAgIHVuc2lnbmVkIF9faW50MzIKLSNkZWZpbmUgaW50
MzJfdCAgICBfX2ludDMyCi0jZGVmaW5lIHVpbnQxNl90ICAgdW5zaWduZWQgX19pbnQxNgotI2Rl
ZmluZSBpbnQxNl90ICAgIF9faW50MTYKLSNkZWZpbmUgdWludDhfdCAgICB1bnNpZ25lZCBfX2lu
dDgKLSNkZWZpbmUgaW50OF90ICAgICBfX2ludDgKLSNlbmRpZgotI2lmbmRlZiBfU0laRV9UX0RF
RklORUQKLSNkZWZpbmUgc2l6ZV90ICAgICBfX2ludDMyCi0jZW5kaWYKLSNkZWZpbmUgdV9sb25n
ICAgICB1bnNpZ25lZCBfX2ludDY0Ci0jZGVmaW5lIHVfaW50ICAgICAgdW5zaWduZWQgX19pbnQz
MgotI2RlZmluZSB1X2ludDMyX3QgIHVuc2lnbmVkIF9faW50MzIKLSNkZWZpbmUgdV9pbnQxNl90
ICB1bnNpZ25lZCBfX2ludDE2Ci0jZGVmaW5lIHVfaW50OF90ICAgdW5zaWduZWQgX19pbnQ4Ci0j
ZGVmaW5lIHVfY2hhciAgICAgdW5zaWduZWQgY2hhcgotI2RlZmluZSBuX3Nob3J0ICAgIHVuc2ln
bmVkIF9faW50MTYKLSNkZWZpbmUgdV9zaG9ydCAgICB1bnNpZ25lZCBfX2ludDE2Ci0jZGVmaW5l
IG5fdGltZSAgICAgdW5zaWduZWQgX19pbnQzMgotI2RlZmluZSBzYV9mYW1pbHlfdCB1bnNpZ25l
ZCBfX2ludDgKLSNkZWZpbmUgc3NpemVfdCAgICBfX2ludDY0Ci0jZGVmaW5lIF9fZnVuY19fCV9f
RlVOQ1RJT05fXwotCi0jaWZuZGVmIEVXT1VMREJMT0NLCi0jZGVmaW5lIEVXT1VMREJMT0NLICAg
ICAgICAgICAgIFdTQUVXT1VMREJMT0NLCi0jZW5kaWYKLSNpZm5kZWYgRUlOUFJPR1JFU1MKLSNk
ZWZpbmUgRUlOUFJPR1JFU1MgICAgICAgICAgICAgV1NBRUlOUFJPR1JFU1MKLSNlbmRpZgotI2lm
bmRlZiBFQUxSRUFEWQotI2RlZmluZSBFQUxSRUFEWSAgICAgICAgICAgICAgICBXU0FFQUxSRUFE
WQotI2VuZGlmCi0jaWZuZGVmIEVOT1RTT0NLCi0jZGVmaW5lIEVOT1RTT0NLICAgICAgICAgICAg
ICAgIFdTQUVOT1RTT0NLCi0jZW5kaWYKLSNpZm5kZWYgRURFU1RBRERSUkVRCi0jZGVmaW5lIEVE
RVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNUQUREUlJFUQotI2VuZGlmCi0jaWZuZGVmIEVN
U0dTSVpFCi0jZGVmaW5lIEVNU0dTSVpFICAgICAgICAgICAgICAgIFdTQUVNU0dTSVpFCi0jZW5k
aWYKLSNpZm5kZWYgRVBST1RPVFlQRQotI2RlZmluZSBFUFJPVE9UWVBFICAgICAgICAgICAgICBX
U0FFUFJPVE9UWVBFCi0jZW5kaWYKLSNpZm5kZWYgRU5PUFJPVE9PUFQKLSNkZWZpbmUgRU5PUFJP
VE9PUFQgICAgICAgICAgICAgV1NBRU5PUFJPVE9PUFQKLSNlbmRpZgotI2lmbmRlZiBFUFJPVE9O
T1NVUFBPUlQKLSNkZWZpbmUgRVBST1RPTk9TVVBQT1JUICAgICAgICAgV1NBRVBST1RPTk9TVVBQ
T1JUCi0jZW5kaWYKLSNpZm5kZWYgRVNPQ0tUTk9TVVBQT1JUCi0jZGVmaW5lIEVTT0NLVE5PU1VQ
UE9SVCAgICAgICAgIFdTQUVTT0NLVE5PU1VQUE9SVAotI2VuZGlmCi0jaWZuZGVmIEVPUE5PVFNV
UFAKLSNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAgICAgICAgV1NBRU9QTk9UU1VQUAotI2VuZGlm
Ci0jaWZuZGVmIEVOT1RTVVAKLSNkZWZpbmUgRU5PVFNVUCAgICAgICAgICAgICAgICAgV1NBRU9Q
Tk9UU1VQUAotI2VuZGlmCi0jaWZuZGVmIEVQRk5PU1VQUE9SVAotI2RlZmluZSBFUEZOT1NVUFBP
UlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQKLSNlbmRpZgotI2lmbmRlZiBFQUZOT1NVUFBP
UlQKLSNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFGTk9TVVBQT1JUCi0jZW5k
aWYKLSNpZm5kZWYgRUFERFJJTlVTRQotI2RlZmluZSBFQUREUklOVVNFICAgICAgICAgICAgICBX
U0FFQUREUklOVVNFCi0jZW5kaWYKLSNpZm5kZWYgRUFERFJOT1RBVkFJTAotI2RlZmluZSBFQURE
Uk5PVEFWQUlMICAgICAgICAgICBXU0FFQUREUk5PVEFWQUlMCi0jZW5kaWYKLSNpZm5kZWYgRU5F
VERPV04KLSNkZWZpbmUgRU5FVERPV04gICAgICAgICAgICAgICAgV1NBRU5FVERPV04KLSNlbmRp
ZgotI2lmbmRlZiBFTkVUVU5SRUFDSAotI2RlZmluZSBFTkVUVU5SRUFDSCAgICAgICAgICAgICBX
U0FFTkVUVU5SRUFDSAotI2VuZGlmCi0jaWZuZGVmIEVORVRSRVNFVAotI2RlZmluZSBFTkVUUkVT
RVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQKLSNlbmRpZgotI2lmbmRlZiBFQ09OTkFCT1JU
RUQKLSNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAgICAgICAgV1NBRUNPTk5BQk9SVEVECi0jZW5k
aWYKLSNpZm5kZWYgRUNPTk5SRVNFVAotI2RlZmluZSBFQ09OTlJFU0VUICAgICAgICAgICAgICBX
U0FFQ09OTlJFU0VUCi0jZW5kaWYKLSNpZm5kZWYgRU5PQlVGUwotI2RlZmluZSBFTk9CVUZTICAg
ICAgICAgICAgICAgICBXU0FFTk9CVUZTCi0jZW5kaWYKLSNpZm5kZWYgRUlTQ09OTgotI2RlZmlu
ZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FFSVNDT05OCi0jZW5kaWYKLSNpZm5kZWYgRU5P
VENPTk4KLSNkZWZpbmUgRU5PVENPTk4gICAgICAgICAgICAgICAgV1NBRU5PVENPTk4KLSNlbmRp
ZgotI2lmbmRlZiBFU0hVVERPV04KLSNkZWZpbmUgRVNIVVRET1dOICAgICAgICAgICAgICAgV1NB
RVNIVVRET1dOCi0jZW5kaWYKLSNpZm5kZWYgRVRPT01BTllSRUZTCi0jZGVmaW5lIEVUT09NQU5Z
UkVGUyAgICAgICAgICAgIFdTQUVUT09NQU5ZUkVGUwotI2VuZGlmCi0jaWZuZGVmIEVUSU1FRE9V
VAotI2RlZmluZSBFVElNRURPVVQgICAgICAgICAgICAgICBXU0FFVElNRURPVVQKLSNlbmRpZgot
I2lmbmRlZiBFQ09OTlJFRlVTRUQKLSNkZWZpbmUgRUNPTk5SRUZVU0VEICAgICAgICAgICAgV1NB
RUNPTk5SRUZVU0VECi0jZW5kaWYKLSNpZm5kZWYgRUxPT1AKLSNkZWZpbmUgRUxPT1AgICAgICAg
ICAgICAgICAgICAgV1NBRUxPT1AKLSNlbmRpZgotI2lmbmRlZiBFSE9TVERPV04KLSNkZWZpbmUg
RUhPU1RET1dOICAgICAgICAgICAgICAgV1NBRUhPU1RET1dOCi0jZW5kaWYKLSNpZm5kZWYgRUhP
U1RVTlJFQUNICi0jZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgICAgICAgIFdTQUVIT1NUVU5SRUFD
SAotI2VuZGlmCi0jaWZuZGVmIEVQUk9DTElNCi0jZGVmaW5lIEVQUk9DTElNICAgICAgICAgICAg
ICAgIFdTQUVQUk9DTElNCi0jZW5kaWYKLSNpZm5kZWYgRVVTRVJTCi0jZGVmaW5lIEVVU0VSUyAg
ICAgICAgICAgICAgICAgIFdTQUVVU0VSUwotI2VuZGlmCi0jaWZuZGVmIEVEUVVPVAotI2RlZmlu
ZSBFRFFVT1QgICAgICAgICAgICAgICAgICBXU0FFRFFVT1QKLSNlbmRpZgotI2lmbmRlZiBFU1RB
TEUKLSNkZWZpbmUgRVNUQUxFICAgICAgICAgICAgICAgICAgV1NBRVNUQUxFCi0jZW5kaWYKLSNp
Zm5kZWYgRVJFTU9URQotI2RlZmluZSBFUkVNT1RFICAgICAgICAgICAgICAgICBXU0FFUkVNT1RF
Ci0jZW5kaWYKLQotdHlwZWRlZiBjaGFyKiBjYWRkcl90OwotCi0jaWYgX01TQ19WRVIgPCAxOTAw
Ci0jZGVmaW5lIHNucHJpbnRmKGRhdGEsIHNpemUsIGZvcm1hdCwgLi4uKSBfc25wcmludGZfcyhk
YXRhLCBzaXplLCBfVFJVTkNBVEUsIGZvcm1hdCwgX19WQV9BUkdTX18pCi0jZW5kaWYKLSNkZWZp
bmUgaW5saW5lIF9faW5saW5lCi0jZGVmaW5lIF9faW5saW5lX18gX19pbmxpbmUKLSNkZWZpbmUJ
TVNHX0VPUgkJMHg4CQkvKiBkYXRhIGNvbXBsZXRlcyByZWNvcmQgKi8KLSNkZWZpbmUJTVNHX0RP
TlRXQUlUCTB4ODAJCS8qIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbm9uYmxvY2tpbmcgKi8KLQot
I2lmZGVmIENNU0dfREFUQQotI3VuZGVmIENNU0dfREFUQQotI2VuZGlmCi0vKgotICogVGhlIGZv
bGxvd2luZyBkZWZpbml0aW9ucyBzaG91bGQgYXBwbHkgaWZmIFdJTlZFUiA8IDB4MDYwMAotICog
YnV0IHRoYXQgY2hlY2sgZG9lc24ndCB3b3JrIGluIGFsbCBjYXNlcy4gU28gYmUgbW9yZSBwZWRh
bnRpYy4uLgotICovCi0jZGVmaW5lIENNU0dfREFUQSh4KSBXU0FfQ01TR19EQVRBKHgpCi0jZGVm
aW5lIENNU0dfQUxJR04oeCkgV1NBX0NNU0dEQVRBX0FMSUdOKHgpCi0jaWZuZGVmIENNU0dfRklS
U1RIRFIKLSNkZWZpbmUgQ01TR19GSVJTVEhEUih4KSBXU0FfQ01TR19GSVJTVEhEUih4KQotI2Vu
ZGlmCi0jaWZuZGVmIENNU0dfTlhUSERSCi0jZGVmaW5lIENNU0dfTlhUSERSKHgsIHkpIFdTQV9D
TVNHX05YVEhEUih4LCB5KQotI2VuZGlmCi0jaWZuZGVmIENNU0dfU1BBQ0UKLSNkZWZpbmUgQ01T
R19TUEFDRSh4KSBXU0FfQ01TR19TUEFDRSh4KQotI2VuZGlmCi0jaWZuZGVmIENNU0dfTEVOCi0j
ZGVmaW5lIENNU0dfTEVOKHgpIFdTQV9DTVNHX0xFTih4KQotI2VuZGlmCi0KLS8qKioqICBmcm9t
IHNjdHBfb3Nfd2luZG93cy5oICoqKioqKioqKioqKioqKi8KLSNkZWZpbmUgU0NUUF9JRk5fSVNf
SUZUX0xPT1AoaWZuKQkoKGlmbiktPmlmbl90eXBlID09IElGVF9MT09QKQotI2RlZmluZSBTQ1RQ
X1JPVVRFX0lTX1JFQUxfTE9PUChybykgKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0LT5ydF9p
ZmEgJiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcCAmJiAocm8pLT5yb19ydC0+cnRfaWZh
LT5pZmFfaWZwLT5pZl90eXBlID09IElGVF9MT09QKQotCi0vKgotICogQWNjZXNzIHRvIElGTidz
IHRvIGhlbHAgd2l0aCBzcmMtYWRkci1zZWxlY3Rpb24KLSAqLwotLyogVGhpcyBjb3VsZCByZXR1
cm4gVk9JRCBpZiB0aGUgaW5kZXggd29ya3MgYnV0IGZvciBCU0Qgd2UgcHJvdmlkZSBib3RoLiAq
LwotI2RlZmluZSBTQ1RQX0dFVF9JRk5fVk9JRF9GUk9NX1JPVVRFKHJvKSBcCi0JKChybyktPnJv
X3J0ICE9IE5VTEwgPyAocm8pLT5yb19ydC0+cnRfaWZwIDogTlVMTCkKLSNkZWZpbmUgU0NUUF9S
T1VURV9IQVNfVkFMSURfSUZOKHJvKSBcCi0JKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0LT5y
dF9pZnApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0j
ZGVmaW5lIFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUocm8pIDEgLyogY29tcGlsZXMuLi4g
IFRPRE8gdXNlIHJvdXRpbmcgc29ja2V0IHRvIGRldGVybWluZSAqLwotCi0jZGVmaW5lIEJJR19F
TkRJQU4gMQotI2RlZmluZSBMSVRUTEVfRU5ESUFOIDAKLSNpZmRlZiBXT1JEU19CSUdFTkRJQU4K
LSNkZWZpbmUgQllURV9PUkRFUiBCSUdfRU5ESUFOCi0jZWxzZQotI2RlZmluZSBCWVRFX09SREVS
IExJVFRMRV9FTkRJQU4KLSNlbmRpZgotCi0jZWxzZSAvKiAhZGVmaW5lZChVc2Vyc3BhY2Vfb3Nf
V2luZG93cykgKi8KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19O
ZXRCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19OYUNsKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotdHlwZWRlZiBw
dGhyZWFkX211dGV4X3QgdXNlcmxhbmRfbXV0ZXhfdDsKLXR5cGVkZWYgcHRocmVhZF9jb25kX3Qg
dXNlcmxhbmRfY29uZF90OwotdHlwZWRlZiBwdGhyZWFkX3QgdXNlcmxhbmRfdGhyZWFkX3Q7Ci0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OYUNsKQotCi0jZGVmaW5lIElGTkFNU0laIDY0Ci0KLSNkZWZpbmUgcmFu
ZG9tKCkgcmFuZCgpCi0jZGVmaW5lIHNyYW5kb20ocykgc3JhbmQocykKLQotI2RlZmluZSB0aW1l
cmFkZCh0dnAsIHV2cCwgdnZwKSAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBc
Ci0JICAgICh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjICsgKHV2cCktPnR2X3NlYzsgIFwK
LQkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyArICh1dnApLT50dl91c2VjOyAgXAot
CQlpZiAoKHZ2cCktPnR2X3VzZWMgPj0gMTAwMDAwMCkgeyAgICAgICAgICAgICAgICAgICBcCi0J
CSAgICAodnZwKS0+dHZfc2VjKys7ICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJKHZ2cCkt
PnR2X3VzZWMgLT0gMTAwMDAwMDsgICAgICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHRpbWVyc3ViKHR2cCwgdXZwLCB2dnAp
ICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgKHZ2cCktPnR2X3Nl
YyA9ICh0dnApLT50dl9zZWMgLSAodXZwKS0+dHZfc2VjOyAgXAotCQkodnZwKS0+dHZfdXNlYyA9
ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7ICBcCi0JCWlmICgodnZwKS0+dHZfdXNl
YyA8IDApIHsgICAgICAgICAgICAgICAgICAgXAotCQkgICAgKHZ2cCktPnR2X3NlYy0tOyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKLQkJCSh2dnApLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAg
ICAgICAgIFwKLQkJfSAgICAgICAgICAgICAgICAgICAgICAgXAotCX0gd2hpbGUgKDApCi0KLS8q
I2luY2x1ZGUgPHBhY2tvbi5oPgotI3ByYWdtYSBwYWNrKHB1c2gsIDEpKi8KLXN0cnVjdCBpcCB7
Ci0JdV9jaGFyICAgIGlwX2hsOjQsIGlwX3Y6NDsKLQl1X2NoYXIgICAgaXBfdG9zOwotCXVfc2hv
cnQgICBpcF9sZW47Ci0JdV9zaG9ydCAgIGlwX2lkOwotCXVfc2hvcnQgICBpcF9vZmY7Ci0jZGVm
aW5lIElQX1JQIDB4ODAwMAotI2RlZmluZSBJUF9ERiAweDQwMDAKLSNkZWZpbmUgSVBfTUYgMHgy
MDAwCi0jZGVmaW5lIElQX09GRk1BU0sgMHgxZmZmCi0JdV9jaGFyICAgIGlwX3R0bDsKLQl1X2No
YXIgICAgaXBfcDsKLQl1X3Nob3J0ICAgaXBfc3VtOwotCXN0cnVjdCBpbl9hZGRyIGlwX3NyYywg
aXBfZHN0OwotfTsKLQotc3RydWN0IGlmYWRkcnMgewotCXN0cnVjdCBpZmFkZHJzICAqaWZhX25l
eHQ7Ci0JY2hhcgkJKmlmYV9uYW1lOwotCXVuc2lnbmVkIGludAkJIGlmYV9mbGFnczsKLQlzdHJ1
Y3Qgc29ja2FkZHIJKmlmYV9hZGRyOwotCXN0cnVjdCBzb2NrYWRkcgkqaWZhX25ldG1hc2s7Ci0J
c3RydWN0IHNvY2thZGRyCSppZmFfZHN0YWRkcjsKLQl2b2lkCQkqaWZhX2RhdGE7Ci19OwotCi1z
dHJ1Y3QgdWRwaGRyIHsKLQl1aW50MTZfdCB1aF9zcG9ydDsKLQl1aW50MTZfdCB1aF9kcG9ydDsK
LQl1aW50MTZfdCB1aF91bGVuOwotCXVpbnQxNl90IHVoX3N1bTsKLX07Ci0KLXN0cnVjdCBpb3Zl
YyB7Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICpidWY7Ci19OwotCi0jZGVmaW5lIGlvdl9iYXNlIGJ1
ZgotI2RlZmluZSBpb3ZfbGVuCWxlbgotCi1zdHJ1Y3QgaWZhX21zZ2hkciB7Ci0JdWludDE2X3Qg
ICAgICAgICBpZmFtX21zZ2xlbjsKLQl1bnNpZ25lZCBjaGFyICAgIGlmYW1fdmVyc2lvbjsKLQl1
bnNpZ25lZCBjaGFyICAgIGlmYW1fdHlwZTsKLQl1aW50MzJfdCAgICAgICAgIGlmYW1fYWRkcnM7
Ci0JdWludDMyX3QgICAgICAgICBpZmFtX2ZsYWdzOwotCXVpbnQxNl90ICAgICAgICAgaWZhbV9p
bmRleDsKLQl1aW50MzJfdCAgICAgICAgIGlmYW1fbWV0cmljOwotfTsKLQotc3RydWN0IGlmZGV2
bXR1IHsKLQlpbnQgaWZkbV9jdXJyZW50OwotCWludCBpZmRtX21pbjsKLQlpbnQgaWZkbV9tYXg7
Ci19OwotCi1zdHJ1Y3QgaWZrcGkgewotCXVuc2lnbmVkIGludCAgaWZrX21vZHVsZV9pZDsKLQl1
bnNpZ25lZCBpbnQgIGlma190eXBlOwotCXVuaW9uIHsKLQkJdm9pZCAqaWZrX3B0cjsKLQkJaW50
IGlma192YWx1ZTsKLQl9IGlma19kYXRhOwotfTsKLQotc3RydWN0IGlmcmVxIHsKLQljaGFyICAg
IGlmcl9uYW1lWzE2XTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7Ci0J
CXN0cnVjdCBzb2NrYWRkciBpZnJ1X2RzdGFkZHI7Ci0JCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2Jy
b2FkYWRkcjsKLQkJc2hvcnQgIGlmcnVfZmxhZ3M7Ci0JCWludCBpZnJ1X21ldHJpYzsKLQkJaW50
IGlmcnVfbXR1OwotCQlpbnQgaWZydV9waHlzOwotCQlpbnQgaWZydV9tZWRpYTsKLQkJaW50ICAg
IGlmcnVfaW50dmFsOwotCQljaGFyKiAgaWZydV9kYXRhOwotCQlzdHJ1Y3QgaWZkZXZtdHUgaWZy
dV9kZXZtdHU7Ci0JCXN0cnVjdCBpZmtwaSAgaWZydV9rcGk7Ci0JCXVpbnQzMl90IGlmcnVfd2Fr
ZV9mbGFnczsKLQl9IGlmcl9pZnJ1OwotI2RlZmluZSBpZnJfYWRkciAgICAgICAgaWZyX2lmcnUu
aWZydV9hZGRyCi0jZGVmaW5lIGlmcl9kc3RhZGRyICAgICBpZnJfaWZydS5pZnJ1X2RzdGFkZHIK
LSNkZWZpbmUgaWZyX2Jyb2FkYWRkciAgIGlmcl9pZnJ1LmlmcnVfYnJvYWRhZGRyCi0jZGVmaW5l
IGlmcl9mbGFncyAgICAgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzBdCi0jZGVmaW5lIGlmcl9wcmV2
ZmxhZ3MgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzFdCi0jZGVmaW5lIGlmcl9tZXRyaWMgICAgICBp
ZnJfaWZydS5pZnJ1X21ldHJpYwotI2RlZmluZSBpZnJfbXR1ICAgICAgICAgaWZyX2lmcnUuaWZy
dV9tdHUKLSNkZWZpbmUgaWZyX3BoeXMgICAgICAgIGlmcl9pZnJ1LmlmcnVfcGh5cwotI2RlZmlu
ZSBpZnJfbWVkaWEgICAgICAgaWZyX2lmcnUuaWZydV9tZWRpYQotI2RlZmluZSBpZnJfZGF0YSAg
ICAgICAgaWZyX2lmcnUuaWZydV9kYXRhCi0jZGVmaW5lIGlmcl9kZXZtdHUgICAgICBpZnJfaWZy
dS5pZnJ1X2Rldm10dQotI2RlZmluZSBpZnJfaW50dmFsICAgICAgaWZyX2lmcnUuaWZydV9pbnR2
YWwKLSNkZWZpbmUgaWZyX2twaSAgICAgICAgIGlmcl9pZnJ1LmlmcnVfa3BpCi0jZGVmaW5lIGlm
cl93YWtlX2ZsYWdzICBpZnJfaWZydS5pZnJ1X3dha2VfZmxhZ3MKLX07Ci0KLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotaW50IHdpbl9pZl9uYW1ldG9pbmRl
eChjb25zdCBjaGFyICopOwotI2RlZmluZSBpZl9uYW1ldG9pbmRleCh4KSB3aW5faWZfbmFtZXRv
aW5kZXgoeCkKLSNlbmRpZgotCi0jZGVmaW5lIG10eF9sb2NrKGFyZzEpCi0jZGVmaW5lIG10eF91
bmxvY2soYXJnMSkKLSNkZWZpbmUgbXR4X2Fzc2VydChhcmcxLGFyZzIpCi0jZGVmaW5lIE1BX09X
TkVEIDcgLyogc3lzL211dGV4LmggdHlwaWNhbGx5IG9uIEZyZWVCU0QgKi8KLSNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQotc3RydWN0IG10eCB7aW50IGR1bW15O307Ci0jaWYg
IWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKQotc3RydWN0IHNlbGluZm8ge2ludCBkdW1t
eTt9OwotI2VuZGlmCi1zdHJ1Y3Qgc3gge2ludCBkdW1teTt9OwotI2VuZGlmCi0KLSNpbmNsdWRl
IDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotLyogI2luY2x1ZGUgPHN5cy9wYXJhbS5o
PiAgaW4gRnJlZUJTRCBkZWZpbmVzIE1TSVpFICovCi0vKiAjaW5jbHVkZSA8c3lzL2t0ci5oPiAq
LwotLyogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPiAqLwotI2lmIGRlZmluZWQoSEFWRV9TWVNfUVVF
VUVfSCkKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dXNlcl9xdWV1
ZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNlcl9tYWxsb2MuaD4KLS8qICNpbmNsdWRlIDxzeXMv
a2VybmVsLmg+ICovCi0vKiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPiAqLwotLyogI2luY2x1ZGUg
PHN5cy9wcm90b3N3Lmg+ICovCi0vKiBvbiBGcmVlQlNELCB0aGlzIHJlc3VsdHMgaW4gYSByZWRl
ZmludGlvbiBvZiBTT0NLKEJVRilfKFVOKUxPQ0sgYW5kCi0gKiAgdWtub3duIHR5cGUgb2Ygc3Ry
dWN0IG10eCBmb3Igc2JfbXR4IGluIHN0cnVjdCBzb2NrYnVmICovCi0jaW5jbHVkZSAidXNlcl9z
b2NrZXR2YXIuaCIgLyogTUFMTE9DX0RFQ0xBUkUncyBNX1BDQi4gUmVwbGFjZW1lbnQgZm9yIHN5
cy9zb2NrZXR2YXIuaCAqLwotLyogI2luY2x1ZGUgPHN5cy9qYWlsLmg+ICovCi0vKiAjaW5jbHVk
ZSA8c3lzL3N5c2N0bC5oPiAqLwotI2luY2x1ZGUgPHVzZXJfZW52aXJvbm1lbnQuaD4KLSNpbmNs
dWRlIDx1c2VyX2F0b21pYy5oPgotI2luY2x1ZGUgPHVzZXJfbWJ1Zi5oPgotLyogI2luY2x1ZGUg
PHN5cy91aW8uaD4gKi8KLS8qICNpbmNsdWRlIDxzeXMvbG9jay5oPiAqLwotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0jaW5jbHVkZSA8c3lz
L3J3bG9jay5oPgotI2VuZGlmCi0vKiAjaW5jbHVkZSA8c3lzL2t0aHJlYWQuaD4gKi8KLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAotI2luY2x1
ZGUgPHN5cy9wcml2Lmg+Ci0jZW5kaWYKLS8qICNpbmNsdWRlIDxzeXMvcmFuZG9tLmg+ICovCi0v
KiAjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPiAqLwotLyogI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+
ICovCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKLS8qIHdhcyBhIDAgYnl0
ZSBmaWxlLiAgbmVlZGVkIGZvciBzdHJ1Y3RzIGlmX2RhdGEoNjQpIGFuZCBuZXRfZXZlbnRfZGF0
YSAqLwotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfRnJlZUJTRCkKLSNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KLS8qICNpbmNsdWRl
IDxuZXQvaWZfdmFyLmg+IHdhcyBhIDAgYnl0ZSBmaWxlLiAgY2F1c2VzIHN0cnVjdCBtdHggcmVk
ZWZpbml0aW9uICovCi0jZW5kaWYKLS8qIE9PVEIgb25seSAtIGR1bW15IHJvdXRlIHVzZWQgYXQg
dGhlIG1vbWVudC4gc2hvdWxkIHdlIHBvcnQgcm91dGUgdG8KLSAqICB1c2Vyc3BhY2UgYXMgd2Vs
bD8gKi8KLS8qIG9uIEZyZWVCU0QsIHRoaXMgcmVzdWx0cyBpbiBhIHJlZGVmaW50aW9uIG9mIHN0
cnVjdCByb3V0ZSAqLwotLyogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPiAqLwotI2lmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wp
Ci0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUg
PG5ldGluZXQvaW5fc3lzdG0uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gpCi0jaW5jbHVkZSA8bmV0aW5ldC9pcF9p
Y21wLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVzZXJfaXBfaWNtcC5oPgotI2VuZGlmCi0vKiAjaW5j
bHVkZSA8bmV0aW5ldC9pbl9wY2IuaD4gcG9ydGVkIHRvIHVzZXJzcGFjZSAqLwotI2luY2x1ZGUg
PHVzZXJfaW5wY2IuaD4KLQotLyogZm9yIGdldGlmYWRkcnMgKi8KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2lmIGRlZmluZWQo
SU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLSNpbmNsdWRlIDxpZmFkZHJzLmg+Ci0jZW5kaWYKLQot
LyogZm9yIGlvY3RsICovCi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0KLS8qIGZvciBjbG9zZSwg
ZXRjLiAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLS8qIGxvdHMgb2YgZXJybm8n
cyB1c2VkIGFuZCBuZWVkZWQgaW4gdXNlcnNwYWNlICovCi0KLS8qIGZvciBvZmZzZXRvZiAqLwot
I2luY2x1ZGUgPHN0ZGRlZi5oPgotCi0jaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9D
S1MpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0vKiBmb3IgcHRocmVhZF9t
dXRleF9sb2NrLCBwdGhyZWFkX211dGV4X3VubG9jaywgZXRjLiAqLwotI2luY2x1ZGUgPHB0aHJl
YWQuaD4KLSNlbmRpZgotCi0jaWZkZWYgSVBTRUMKLSNpbmNsdWRlIDxuZXRpcHNlYy9pcHNlYy5o
PgotI2luY2x1ZGUgPG5ldGlwc2VjL2tleS5oPgotI2VuZGlmCQkJCS8qIElQU0VDICovCi0KLSNp
ZmRlZiBJTkVUNgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLSNpbmNsdWRl
IDxzeXMvZG9tYWluLmg+Ci0jZW5kaWYKLSNpZmRlZiBJUFNFQwotI2luY2x1ZGUgPG5ldGlwc2Vj
L2lwc2VjNi5oPgotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LSNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0Qp
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgInVzZXJfaXA2X3Zhci5oIgotI2Vsc2UKLSNpbmNsdWRl
IDxuZXRpbmV0Ni9pcDZfdmFyLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0ZyZWVCU0QpCi0jaW5jbHVkZSA8bmV0aW5ldDYvaW42X3BjYi5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQ2L2lwNnByb3Rvc3cuaD4KLS8qICNpbmNsdWRlIDxuZXRpbmV0Ni9uZDYuaD4gd2FzIGEgMCBi
eXRlIGZpbGUgKi8KLSNpbmNsdWRlIDxuZXRpbmV0Ni9zY29wZTZfdmFyLmg+Ci0jZW5kaWYKLSNl
bmRpZiAvKiBJTkVUNiAqLwotCi0jaWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BU
KQotI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0jaW5jbHVkZSA8c3lzL2ZpbGVkZXNjLmg+Ci0jZW5k
aWYKLQotI2luY2x1ZGUgIm5ldGluZXQvc2N0cF9zaGExLmgiCi0KLSNpZiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA3MDAwMDAKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX29wdGlvbnMuaD4KLSNlbmRpZgot
Ci0jZGVmaW5lIFNDVFBfUFJJTlRGKC4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAotCWlmIChTQ1RQX0JBU0VfVkFSKGRlYnVnX3ByaW50ZikpIHsgICAgICAgICAgICAgICAg
XAotCQlTQ1RQX0JBU0VfVkFSKGRlYnVnX3ByaW50ZikoX19WQV9BUkdTX18pOyBcCi0JfQotCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZm5kZWYgaW42cGNiCi0jZGVmaW5lIGluNnBjYgkJ
aW5wY2IKLSNlbmRpZgotI2VuZGlmCi0vKiBEZWNsYXJlIGFsbCB0aGUgbWFsbG9jIG5hbWVzIGZv
ciBhbGwgdGhlIHZhcmlvdXMgbWFsbG9jcyAqLwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX01BUCk7
Ci1NQUxMT0NfREVDTEFSRShTQ1RQX01fU1RSTUkpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1NU
Uk1PKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BU0NfQUREUik7Ci1NQUxMT0NfREVDTEFSRShT
Q1RQX01fQVNDX0lUKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRIX0NMKTsKLU1BTExPQ19E
RUNMQVJFKFNDVFBfTV9BVVRIX0tZKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRIX0hMKTsK
LU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRIX0lGKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9T
VFJFU0VUKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9DTVNHKTsKLU1BTExPQ19ERUNMQVJFKFND
VFBfTV9DT1BZQUwpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1ZSRik7Ci1NQUxMT0NfREVDTEFS
RShTQ1RQX01fSUZBKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9JRk4pOwotTUFMTE9DX0RFQ0xB
UkUoU0NUUF9NX1RJTVcpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX01WUkYpOwotTUFMTE9DX0RF
Q0xBUkUoU0NUUF9NX0lURVIpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1NPQ0tPUFQpOwotCi0j
aWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQotI2RlZmluZSBTQ1RQX0dFVF9DWUNM
RUNPVU5UIGdldF9jeWNsZWNvdW50KCkKLSNkZWZpbmUgU0NUUF9DVFI2IHNjdHBfbG9nX3RyYWNl
Ci0KLSNlbHNlCi0jZGVmaW5lIFNDVFBfQ1RSNiBDVFI2Ci0jZW5kaWYKLQotLyogRW1wdHkga3Ry
IHN0YXRlbWVudCBmb3IgX1VzZXJzcGFjZV9fIChzaW1pbGFyIHRvIHdoYXQgaXMgZG9uZSBmb3Ig
bWFjKSAqLwotI2RlZmluZQlDVFI2KG0sIGQsIHAxLCBwMiwgcDMsIHA0LCBwNSwgcDYpCi0KLQot
Ci0jZGVmaW5lIFNDVFBfQkFTRV9JTkZPKF9fbSkgc3lzdGVtX2Jhc2VfaW5mby5zY3RwcGNiaW5m
by5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1NUQVRTIHN5c3RlbV9iYXNlX2luZm8uc2N0cHN0YXQK
LSNkZWZpbmUgU0NUUF9CQVNFX1NUQVQoX19tKSAgICAgc3lzdGVtX2Jhc2VfaW5mby5zY3Rwc3Rh
dC5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1NZU0NUTChfX20pIHN5c3RlbV9iYXNlX2luZm8uc2N0
cHN5c2N0bC5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1ZBUihfX20pIHN5c3RlbV9iYXNlX2luZm8u
X19tCi0KLS8qCi0gKgotICovCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKQot
I2RlZmluZSBVU0VSX0FERFJfTlVMTAkoTlVMTCkJCS8qIEZJWCBNRTogdGVtcCAqLwotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKFNDVFBfREVCVUcpCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0
YW50cy5oPgotI2RlZmluZSBTQ1RQREJHKGxldmVsLCAuLi4pCQkJCQlcCi17CQkJCQkJCQlcCi0J
ZG8gewkJCQkJCQlcCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pICYgbGV2
ZWwpIHsJXAotCQkJU0NUUF9QUklOVEYoX19WQV9BUkdTX18pOwkJXAotCQl9CQkJCQkJXAotCX0g
d2hpbGUgKDApOwkJCQkJCVwKLX0KLSNkZWZpbmUgU0NUUERCR19BRERSKGxldmVsLCBhZGRyKQkJ
CQlcCi17CQkJCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZGVidWdfb24pICYgbGV2ZWwgKSB7CVwKLQkJICAgIHNjdHBfcHJpbnRfYWRkcmVzcyhhZGRy
KTsJCQlcCi0JCX0JCQkJCQlcCi0JfSB3aGlsZSAoMCk7CQkJCQkJXAotfQotI2Vsc2UKLSNkZWZp
bmUgU0NUUERCRyhsZXZlbCwgLi4uKQotI2RlZmluZSBTQ1RQREJHX0FERFIobGV2ZWwsIGFkZHIp
Ci0jZW5kaWYKLQotI2lmZGVmIFNDVFBfTFRSQUNFX0NIVU5LUwotI2RlZmluZSBTQ1RQX0xUUkFD
RV9DSEsoYSwgYiwgYywgZCkgaWYoc2N0cF9sb2dnaW5nX2xldmVsICYgU0NUUF9MVFJBQ0VfQ0hV
TktfRU5BQkxFKSBDVFI2KEtUUl9TVUJTWVMsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsIFND
VFBfTE9HX0NIVU5LX1BST0MsIDAsIGEsIGIsIGMsIGQpCi0jZWxzZQotI2RlZmluZSBTQ1RQX0xU
UkFDRV9DSEsoYSwgYiwgYywgZCkKLSNlbmRpZgotCi0jaWZkZWYgU0NUUF9MVFJBQ0VfRVJST1JT
Ci0jZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgbmV0LCBmaWxl
LCBlcnIpIFwKLQlpZiAoc2N0cF9sb2dnaW5nX2xldmVsICYgU0NUUF9MVFJBQ0VfRVJST1JfRU5B
QkxFKSBcCi0JCVNDVFBfUFJJTlRGKCJtYnVmOiVwIGlucDolcCBzdGNiOiVwIG5ldDolcCBmaWxl
OiV4IGxpbmU6JWQgZXJyb3I6JWRcbiIsIFwKLQkJICAgICAgICAgICAgKHZvaWQgKiltLCAodm9p
ZCAqKWlucCwgKHZvaWQgKilzdGNiLCAodm9pZCAqKW5ldCwgZmlsZSwgX19MSU5FX18sIGVycik7
Ci0jZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIGZpbGUsIGVycikg
XAotCWlmIChzY3RwX2xvZ2dpbmdfbGV2ZWwgJiBTQ1RQX0xUUkFDRV9FUlJPUl9FTkFCTEUpIFwK
LQkJU0NUUF9QUklOVEYoImlucDolcCBzdGNiOiVwIG5ldDolcCBmaWxlOiV4IGxpbmU6JWQgZXJy
b3I6JWRcbiIsIFwKLQkJICAgICAgICAgICAgKHZvaWQgKilpbnAsICh2b2lkICopc3RjYiwgKHZv
aWQgKiluZXQsIGZpbGUsIF9fTElORV9fLCBlcnIpOwotI2Vsc2UKLSNkZWZpbmUgU0NUUF9MVFJB
Q0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIGZpbGUsIGVycikKLSNkZWZpbmUgU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgZmlsZSwgZXJyKQotI2VuZGlmCi0KLQot
LyoKLSAqIExvY2FsIGFkZHJlc3MgYW5kIGludGVyZmFjZSBsaXN0IGhhbmRsaW5nCi0gKi8KLSNk
ZWZpbmUgU0NUUF9NQVhfVlJGX0lECQkwCi0jZGVmaW5lIFNDVFBfU0laRV9PRl9WUkZfSEFTSAkz
Ci0jZGVmaW5lIFNDVFBfSUZOQU1TSVoJCUlGTkFNU0laCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9W
UkZJRAkwCi0jZGVmaW5lIFNDVFBfVlJGX0FERFJfSEFTSF9TSVpFCTE2Ci0jZGVmaW5lIFNDVFBf
VlJGX0lGTl9IQVNIX1NJWkUJMwotI2RlZmluZQlTQ1RQX0lOSVRfVlJGX1RBQkxFSUQodnJmKQot
Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU0NUUF9JRk5f
SVNfSUZUX0xPT1AoaWZuKSAoc3RybmNtcCgoaWZuKS0+aWZuX25hbWUsICJsbyIsIDIpID09IDAp
Ci0vKiBCU0QgZGVmaW5pdGlvbiAqLwotLyogI2RlZmluZSBTQ1RQX1JPVVRFX0lTX1JFQUxfTE9P
UChybykgKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0LT5ydF9pZmEgJiYgKHJvKS0+cm9fcnQt
PnJ0X2lmYS0+aWZhX2lmcCAmJiAocm8pLT5yb19ydC0+cnRfaWZhLT5pZmFfaWZwLT5pZl90eXBl
ID09IElGVF9MT09QKSAqLwotLyogb25seSB1c2VkIGluIElQdjYgc2NlbmFyaW8sIHdoaWNoIGlz
bid0IHN1cHBvcnRlZCB5ZXQgKi8KLSNkZWZpbmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8p
IDAKLQotLyoKLSAqIEFjY2VzcyB0byBJRk4ncyB0byBoZWxwIHdpdGggc3JjLWFkZHItc2VsZWN0
aW9uCi0gKi8KLS8qIFRoaXMgY291bGQgcmV0dXJuIFZPSUQgaWYgdGhlIGluZGV4IHdvcmtzIGJ1
dCBmb3IgQlNEIHdlIHByb3ZpZGUgYm90aC4gKi8KLSNkZWZpbmUgU0NUUF9HRVRfSUZOX1ZPSURf
RlJPTV9ST1VURShybykgKHZvaWQgKilyby0+cm9fcnQtPnJ0X2lmcAotI2RlZmluZSBTQ1RQX0dF
VF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKSAxIC8qIGNvbXBpbGVzLi4uICBUT0RPIHVzZSByb3V0
aW5nIHNvY2tldCB0byBkZXRlcm1pbmUgKi8KLSNkZWZpbmUgU0NUUF9ST1VURV9IQVNfVkFMSURf
SUZOKHJvKSAoKHJvKS0+cm9fcnQgJiYgKHJvKS0+cm9fcnQtPnJ0X2lmcCkKLSNlbmRpZgotCi0v
KgotICogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdGlvbgotICovCi0jZGVmaW5lIFNDVFBfTUFMTE9D
KHZhciwgdHlwZSwgc2l6ZSwgbmFtZSkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJTUFMTE9DKHZh
ciwgdHlwZSwgc2l6ZSwgbmFtZSwgTV9OT1dBSVQpOwkJXAotCX0gd2hpbGUgKDApCi0KLSNkZWZp
bmUgU0NUUF9GUkVFKHZhciwgdHlwZSkJRlJFRSh2YXIsIHR5cGUpCi0KLSNkZWZpbmUgU0NUUF9N
QUxMT0NfU09OQU1FKHZhciwgdHlwZSwgc2l6ZSkJCQkJXAotCWRvIHsJCQkJCQkJCVwKLQkJTUFM
TE9DKHZhciwgdHlwZSwgc2l6ZSwgTV9TT05BTUUsIChNX1dBSVRPSyB8IE1fWkVSTykpOwlcCi0J
fSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0ZSRUVfU09OQU1FKHZhcikJRlJFRSh2YXIsIE1f
U09OQU1FKQotCi0jZGVmaW5lIFNDVFBfUFJPQ0VTU19TVFJVQ1Qgc3RydWN0IHByb2MgKgotCi0v
KgotICogem9uZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICovCi0KLQotI2lmIGRlZmluZWQoU0NU
UF9TSU1QTEVfQUxMT0NBVE9SKQotLyp0eXBlZGVmIHNpemVfdCBzY3RwX3pvbmVfdDsqLwotI2Rl
ZmluZSBTQ1RQX1pPTkVfSU5JVCh6b25lLCBuYW1lLCBzaXplLCBudW1iZXIpIHsgXAotCXpvbmUg
PSBzaXplOyBcCi19Ci0KLS8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05FX0dFVDogYWxsb2NhdGUg
ZWxlbWVudCBmcm9tIHRoZSB6b25lICovCi0jZGVmaW5lIFNDVFBfWk9ORV9HRVQoem9uZSwgdHlw
ZSkgIFwKLSAgICAgICAgKHR5cGUgKiltYWxsb2Moem9uZSk7Ci0KLQotLyogX19Vc2Vyc3BhY2Vf
XyBTQ1RQX1pPTkVfRlJFRTogZnJlZSBlbGVtZW50IGZyb20gdGhlIHpvbmUgKi8KLSNkZWZpbmUg
U0NUUF9aT05FX0ZSRUUoem9uZSwgZWxlbWVudCkgeyBcCi0JZnJlZShlbGVtZW50KTsgIFwKLX0K
LQotI2RlZmluZSBTQ1RQX1pPTkVfREVTVFJPWSh6b25lKQotI2Vsc2UKLS8qX19Vc2Vyc3BhY2Vf
XwotICBDb21waWxpbmcgJiBsaW5raW5nIG5vdGVzOiBOZWVkcyBsaWJ1bWVtLCB3aGljaCBoYXMg
YmVlbiBwbGFjZWQgaW4gLi91c2VyX2xpYgotICBBbGwgdXNlcnNwYWNlIGhlYWRlciBmaWxlcyBh
cmUgaW4gLi91c2VyX2luY2x1ZGUuIE1ha2VmaWxlIHdpbGwgbmVlZCB0aGUKLSAgZm9sbG93aW5n
LgotICBDRkxBR1MgPSAtSS4vIC1XYWxsCi0gIExERkxBR1MgPSAtTC4vdXNlcl9saWIgLVIuL3Vz
ZXJfbGliIC1sdW1lbQotKi8KLSNpbmNsdWRlICJ1c2VyX2luY2x1ZGUvdW1lbS5oIgotCi0vKiBf
X1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9JTklUOiBpbml0aWFsaXplIHRoZSB6b25lICovCi0vKgot
ICBfX1VzZXJzcGFjZV9fCi0gIE5vIGVxdWl2YWxlbnQgZnVuY3Rpb24gdG8gdW1hX3pvbmVfc2V0
X21heCBhZGRlZCB5ZXQuIChTZWUgU0NUUF9aT05FX0lOSVQgaW4gc2N0cF9vc19ic2QuaAotICBm
b3IgcmVmZXJlbmNlKS4gSXQgbWF5IG5vdCBiZSByZXF1aXJlZCBhcyBtZW50aW9uZWQgaW4KLSAg
aHR0cDovL25peGRvYy5uZXQvbWFuLXBhZ2VzL0ZyZWVCU0QvdW1hX3phbGxvYy45Lmh0bWwgdGhh
dAotICBtYXggbGltaXRzIG1heSBub3QgZW5mb3JjZWQgb24gc3lzdGVtcyB3aXRoIG1vcmUgdGhh
biBvbmUgQ1BVLgotKi8KLSNkZWZpbmUgU0NUUF9aT05FX0lOSVQoem9uZSwgbmFtZSwgc2l6ZSwg
bnVtYmVyKSB7IFwKLQl6b25lID0gdW1lbV9jYWNoZV9jcmVhdGUobmFtZSwgc2l6ZSwgMCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7IFwKLSAgfQotCi0vKiBfX1VzZXJzcGFjZV9f
IFNDVFBfWk9ORV9HRVQ6IGFsbG9jYXRlIGVsZW1lbnQgZnJvbSB0aGUgem9uZSAqLwotI2RlZmlu
ZSBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUpIFwKLSAgICAgICAgKHR5cGUgKil1bWVtX2NhY2hl
X2FsbG9jKHpvbmUsIFVNRU1fREVGQVVMVCk7Ci0KLQotLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pP
TkVfRlJFRTogZnJlZSBlbGVtZW50IGZyb20gdGhlIHpvbmUgKi8KLSNkZWZpbmUgU0NUUF9aT05F
X0ZSRUUoem9uZSwgZWxlbWVudCkgXAotCXVtZW1fY2FjaGVfZnJlZSh6b25lLCBlbGVtZW50KTsK
LQotCi0vKiBfX1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9ERVNUUk9ZOiBkZXN0cm95IHRoZSB6b25l
ICovCi0jZGVmaW5lIFNDVFBfWk9ORV9ERVNUUk9ZKHpvbmUpIFwKLQl1bWVtX2NhY2hlX2Rlc3Ry
b3koem9uZSk7Ci0jZW5kaWYKLQotLyoKLSAqIF9fVXNlcnNwYWNlX18gRGVmaW5pbmcgc2N0cF9o
YXNoaW5pdF9mbGFncygpIGFuZCBzY3RwX2hhc2hkZXN0cm95KCkgZm9yIHVzZXJsYW5kLgotICov
Ci12b2lkICpzY3RwX2hhc2hpbml0X2ZsYWdzKGludCBlbGVtZW50cywgc3RydWN0IG1hbGxvY190
eXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmhhc2htYXNrLCBpbnQgZmxh
Z3MpOwotdm9pZAotc2N0cF9oYXNoZGVzdHJveSh2b2lkICp2aGFzaHRibCwgc3RydWN0IG1hbGxv
Y190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2spOwotCi12b2lkCi1zY3RwX2hhc2hmcmVlZGVz
dHJveSh2b2lkICp2aGFzaHRibCwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFz
aG1hc2spOwotCi0KLSNkZWZpbmUgSEFTSF9OT1dBSVQgMHgwMDAwMDAwMQotI2RlZmluZSBIQVNI
X1dBSVRPSyAweDAwMDAwMDAyCi0KLS8qIE1fUENCIGlzIE1BTExPQ19ERUNMQVJFJ2QgaW4gc3lz
L3NvY2tldHZhci5oICovCi0jZGVmaW5lIFNDVFBfSEFTSF9JTklUKHNpemUsIGhhc2htYXJrKSBz
Y3RwX2hhc2hpbml0X2ZsYWdzKHNpemUsIE1fUENCLCBoYXNobWFyaywgSEFTSF9OT1dBSVQpCi0K
LSNkZWZpbmUgU0NUUF9IQVNIX0ZSRUUodGFibGUsIGhhc2htYXJrKSBzY3RwX2hhc2hkZXN0cm95
KHRhYmxlLCBNX1BDQiwgaGFzaG1hcmspCi0KLSNkZWZpbmUgU0NUUF9IQVNIX0ZSRUVfREVTVFJP
WSh0YWJsZSwgaGFzaG1hcmspICBzY3RwX2hhc2hmcmVlZGVzdHJveSh0YWJsZSwgTV9QQ0IsIGhh
c2htYXJrKQotI2RlZmluZSBTQ1RQX01fQ09QWU0JbV9jb3B5bQotCi0vKgotICogdGltZXJzCi0g
Ki8KLS8qIF9fVXNlcnNwYWNlX18KLSAqIHVzZXJfc2N0cF9jYWxsb3V0LmggaGFzIHR5cGVkZWYg
c3RydWN0IHNjdHBfY2FsbG91dCBzY3RwX29zX3RpbWVyX3Q7Ci0gKiB3aGljaCBpcyB1c2VkIGlu
IHRoZSB0aW1lciByZWxhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzCi0gKiBTQ1RQX09TX1RJTUVSX0lO
SVQgZXRjLgotKi8KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY2FsbG91dC5oPgotCi0vKiBfX1Vz
ZXJzcGFjZV9fIENyZWF0aW5nIGEgcmVjZWl2ZSB0aHJlYWQgKi8KLSNpbmNsdWRlIDx1c2VyX3Jl
Y3ZfdGhyZWFkLmg+Ci0KLS8qX19Vc2Vyc3BhY2VfXyBkZWZpbmluZyBLVFJfU1VCU1lTIDEgYXMg
ZG9uZSBpbiBzY3RwX29zX21hY29zeC5oICovCi0jZGVmaW5lIEtUUl9TVUJTWVMgMQotCi0vKiBU
aGUgcGFja2VkIGRlZmluZSBmb3IgNjQgYml0IHBsYXRmb3JtcyAqLwotI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18o
KHBhY2tlZCkpCi0jZGVmaW5lIFNDVFBfVU5VU0VEIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCi0j
ZWxzZQotI2RlZmluZSBTQ1RQX1BBQ0tFRAotI2RlZmluZSBTQ1RQX1VOVVNFRAotI2VuZGlmCi0K
LS8qCi0gKiBGdW5jdGlvbnMKLSAqLwotLyogTWJ1ZiBtYW5pcHVsYXRpb24gYW5kIGFjY2VzcyBt
YWNyb3MgICovCi0jZGVmaW5lIFNDVFBfQlVGX0xFTihtKSAobS0+bV9sZW4pCi0jZGVmaW5lIFND
VFBfQlVGX05FWFQobSkgKG0tPm1fbmV4dCkKLSNkZWZpbmUgU0NUUF9CVUZfTkVYVF9QS1QobSkg
KG0tPm1fbmV4dHBrdCkKLSNkZWZpbmUgU0NUUF9CVUZfUkVTVl9VRihtLCBzaXplKSBtLT5tX2Rh
dGEgKz0gc2l6ZQotI2RlZmluZSBTQ1RQX0JVRl9BVChtLCBzaXplKSBtLT5tX2RhdGEgKyBzaXpl
Ci0jZGVmaW5lIFNDVFBfQlVGX0lTX0VYVEVOREVEKG0pIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0j
ZGVmaW5lIFNDVFBfQlVGX0VYVEVORF9TSVpFKG0pIChtLT5tX2V4dC5leHRfc2l6ZSkKLSNkZWZp
bmUgU0NUUF9CVUZfVFlQRShtKSAobS0+bV90eXBlKQotI2RlZmluZSBTQ1RQX0JVRl9SRUNWSUYo
bSkgKG0tPm1fcGt0aGRyLnJjdmlmKQotI2RlZmluZSBTQ1RQX0JVRl9QUkVQRU5ECU1fUFJFUEVO
RAotCi0jZGVmaW5lIFNDVFBfQUxJR05fVE9fRU5EKG0sIGxlbikgaWYobS0+bV9mbGFncyAmIE1f
UEtUSERSKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSF9BTElH
TihtLCBsZW4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlm
ICgobS0+bV9mbGFncyAmIE1fRVhUKSA9PSAwKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBNX0FMSUdOKG0sIGxlbik7IFwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9Ci0KLS8qIFdlIG1ha2UgaXQgc28gaWYgeW91IGhhdmUgdXAgdG8gNCB0aHJl
YWRzCi0gKiB3cml0dGluZyBiYXNlZCBvbiB0aGUgZGVmYXVsdCBzaXplIG9mCi0gKiB0aGUgcGFj
a2V0IGxvZyA2NSBrLCB0aGF0IHdvdWxkIGJlCi0gKiA0IDE2ayBwYWNrZXRzIGJlZm9yZSB3ZSB3
b3VsZCBoaXQKLSAqIGEgcHJvYmxlbS4KLSAqLwotI2RlZmluZSBTQ1RQX1BLVExPR19XUklURVJT
X05FRURfTE9DSyAzCi0KLQotLyoKLSAqIHJvdXRlcywgb3V0cHV0LCBldGMuCi0gKi8KLQotdHlw
ZWRlZiBzdHJ1Y3Qgc2N0cF9yb3V0ZQlzY3RwX3JvdXRlX3Q7Ci10eXBlZGVmIHN0cnVjdCBzY3Rw
X3J0ZW50cnkJc2N0cF9ydGVudHJ5X3Q7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3RwX3VzZXJz
cGFjZV9ydGFsbG9jKHNjdHBfcm91dGVfdCAqcm8pCi17Ci0JaWYgKHJvLT5yb19ydCAhPSBOVUxM
KSB7Ci0JCXJvLT5yb19ydC0+cnRfcmVmY250Kys7Ci0JCXJldHVybjsKLQl9Ci0KLQlyby0+cm9f
cnQgPSAoc2N0cF9ydGVudHJ5X3QgKikgbWFsbG9jKHNpemVvZihzY3RwX3J0ZW50cnlfdCkpOwot
CWlmIChyby0+cm9fcnQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyogaW5pdGlhbGl6ZSAqLwot
CW1lbXNldChyby0+cm9fcnQsIDAsIHNpemVvZihzY3RwX3J0ZW50cnlfdCkpOwotCXJvLT5yb19y
dC0+cnRfcmVmY250ID0gMTsKLQotCS8qIHNldCBNVFUgKi8KLQkvKiBUT0RPIHNldCB0aGlzIGJh
c2VkIG9uIHRoZSByby0+cm9fZHN0LCBsb29raW5nIHVwIE1UVSB3aXRoIHJvdXRpbmcgc29ja2V0
ICovCi0jaWYgMAotCWlmICh1c2Vyc3BhY2VfcmF3cm91dGUgPT0gLTEpIHsKLQkJdXNlcnNwYWNl
X3Jhd3JvdXRlID0gc29ja2V0KEFGX1JPVVRFLCBTT0NLX1JBVywgMCk7Ci0JCWlmICh1c2Vyc3Bh
Y2VfcmF3cm91dGUgPT0gLTEpCi0JCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0Jcm8tPnJvX3J0LT5y
dF9ybXgucm14X210dSA9IDE1MDA7IC8qIEZJWE1FIHRlbXBvcmFyeSBzb2x1dGlvbiAqLwotCi0J
LyogVE9ETyBlbmFibGUgdGhlIGFiaWxpdHkgdG8gb2J0YWluIGludGVyZmFjZSBpbmRleCBvZiBy
b3V0ZSBmb3IKLQkgKiAgU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURSBtYWNyby4KLQkgKi8K
LX0KLSNkZWZpbmUgU0NUUF9SVEFMTE9DKHJvLCB2cmZfaWQsIGZpYm51bSkgc2N0cF91c2Vyc3Bh
Y2VfcnRhbGxvYygoc2N0cF9yb3V0ZV90ICopcm8pCi0KLS8qIGR1bW15IHJ0ZnJlZSBuZWVkZWQg
b25jZSB1c2VyX3JvdXRlLmggaXMgaW5jbHVkZWQgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBzY3Rw
X3VzZXJzcGFjZV9ydGZyZWUoc2N0cF9ydGVudHJ5X3QgKnJ0KQotewotCWlmKHJ0ID09IE5VTEwp
IHsKLQkJcmV0dXJuOwotCX0KLQlpZigtLXJ0LT5ydF9yZWZjbnQgPiAwKSB7Ci0JCXJldHVybjsK
LQl9Ci0JZnJlZShydCk7Ci0JcnQgPSBOVUxMOwotfQotI2RlZmluZSBydGZyZWUoYXJnMSkgc2N0
cF91c2Vyc3BhY2VfcnRmcmVlKGFyZzEpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0vKiAgICAgIE1UVSAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioq
LwotaW50IHNjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZfaW5kZXgs
IGludCBhZik7Ci0KLSNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fSUZOX0lORk8oaWZuLCBp
Zm5faW5kZXgsIGFmKSBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKGlmbl9pbmRleCwg
YWYpCi0KLSNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUoc2N0cF9pZmEsIHNhLCBy
dCkgKChydCAhPSBOVUxMKSA/IHJ0LT5ydF9ybXgucm14X210dSA6IDApCi0KLSNkZWZpbmUgU0NU
UF9HQVRIRVJfTVRVX0ZST01fSU5URkMoc2N0cF9pZm4pICBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1
X2Zyb21faWZuKGlmX25hbWV0b2luZGV4KCgoc3RydWN0IGlmYWRkcnMgKikgKHNjdHBfaWZuKSkt
PmlmYV9uYW1lKSwgQUZfSU5FVCkKLQotI2RlZmluZSBTQ1RQX1NFVF9NVFVfT0ZfUk9VVEUoc2Es
IHJ0LCBtdHUpIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChydCAhPSBOVUxMKSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcnQtPnJ0X3JteC5ybXhfbXR1ID0gbXR1OyBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgwKQotCi0vKiAoZGUtKXJl
Z2lzdGVyIGludGVyZmFjZSBldmVudCBub3RpZmljYXRpb25zICovCi0jZGVmaW5lIFNDVFBfUkVH
SVNURVJfSU5URVJGQUNFKGlmaGFuZGxlLCBhZikKLSNkZWZpbmUgU0NUUF9ERVJFR0lTVEVSX0lO
VEVSRkFDRShpZmhhbmRsZSwgYWYpCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKiovCi0v
KiBUaGVzZSBhcmUgZm9yIGxvZ2dpbmcgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqLwot
LyogcmV0dXJuIHRoZSBiYXNlIGV4dCBkYXRhIHBvaW50ZXIgKi8KLSNkZWZpbmUgU0NUUF9CVUZf
RVhURU5EX0JBU0UobSkgKG0tPm1fZXh0LmV4dF9idWYpCi0gLyogcmV0dXJuIHRoZSByZWZjbnQg
b2YgdGhlIGRhdGEgcG9pbnRlciAqLwotI2RlZmluZSBTQ1RQX0JVRl9FWFRFTkRfUkVGQ05UKG0p
ICgqbS0+bV9leHQucmVmX2NudCkKLS8qIHJldHVybiBhbnkgYnVmZmVyIHJlbGF0ZWQgZmxhZ3Ms
IHRoaXMgaXMKLSAqIHVzZWQgYmV5b25kIGxvZ2dpbmcgZm9yIGFwcGxlIG9ubHkuCi0gKi8KLSNk
ZWZpbmUgU0NUUF9CVUZfR0VUX0ZMQUdTKG0pIChtLT5tX2ZsYWdzKQotCi0vKiBGb3IgQlNEIHRo
aXMganVzdCBhY2Nlc3NlcyB0aGUgTV9QS1RIRFIgbGVuZ3RoCi0gKiBzbyBpdCBvcGVyYXRlcyBv
biBhbiBtYnVmIHdpdGggaGRyIGZsYWcuIE90aGVyCi0gKiBPL1MncyBtYXkgaGF2ZSBzZXBlcmF0
ZSBwYWNrZXQgaGVhZGVyIGFuZCBtYnVmCi0gKiBjaGFpbiBwb2ludGVycy4uIHRodXMgdGhlIG1h
Y3JvLgotICovCi0jZGVmaW5lIFNDVFBfSEVBREVSX1RPX0NIQUlOKG0pIChtKQotI2RlZmluZSBT
Q1RQX0RFVEFDSF9IRUFERVJfRlJPTV9DSEFJTihtKQotI2RlZmluZSBTQ1RQX0hFQURFUl9MRU4o
bSkgKChtKS0+bV9wa3RoZHIubGVuKQotI2RlZmluZSBTQ1RQX0dFVF9IRUFERVJfRk9SX09VVFBV
VChvX3BhaykgMAotI2RlZmluZSBTQ1RQX1JFTEVBU0VfSEVBREVSKG0pCi0jZGVmaW5lIFNDVFBf
UkVMRUFTRV9QS1QobSkJc2N0cF9tX2ZyZWVtKG0pCi0KLSNkZWZpbmUgU0NUUF9HRVRfUEtUX1ZS
RklEKG0sIHZyZl9pZCkgICgodnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEKSAhPSBTQ1RQX0RF
RkFVTFRfVlJGSUQpCi0KLQotCi0vKiBBdHRhY2ggdGhlIGNoYWluIG9mIGRhdGEgaW50byB0aGUg
c2VuZGFibGUgcGFja2V0LiAqLwotI2RlZmluZSBTQ1RQX0FUVEFDSF9DSEFJTihwYWssIG0sIHBh
Y2tldF9sZW5ndGgpIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYWsgPSBtOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhay0+bV9wa3RoZHIubGVuID0gcGFja2V0X2xlbmd0aDsgXAot
ICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCi0KLS8qIE90aGVyIG1fcGt0aGRy
IHR5cGUgdGhpbmdzICovCi0vKiBGSVhNRSBuZWVkIHJlYWwgZGVmaW5pdGlvbnMgKi8KLSNkZWZp
bmUgU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LCBtKSAwCi0vKiBPT1RCIG9ubHkgI2RlZmluZSBT
Q1RQX0lTX0lUX0JST0FEQ0FTVChkc3QsIG0pICgobS0+bV9mbGFncyAmIE1fUEtUSERSKSA/IGlu
X2Jyb2FkY2FzdChkc3QsIG0tPm1fcGt0aGRyLnJjdmlmKSA6IDApICBCU0QgZGVmICovCi0jZGVm
aW5lIFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkgMAotLyogT09UQiBPTkxZICNkZWZpbmUgU0NUUF9J
U19JVF9MT09QQkFDSyhtKSAoKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikgJiYgKChtLT5tX3BrdGhk
ci5yY3ZpZiA9PSBOVUxMKSB8fCAobS0+bV9wa3RoZHIucmN2aWYtPmlmX3R5cGUgPT0gSUZUX0xP
T1ApKSkgIEJTRCBkZWYgKi8KLQotCi0vKiBUaGlzIGNvbnZlcnRzIGFueSBpbnB1dCBwYWNrZXQg
aGVhZGVyCi0gKiBpbnRvIHRoZSBjaGFpbiBvZiBkYXRhIGhvbGRlcnMsIGZvciBCU0QKLSAqIGl0
cyBhIE5PUC4KLSAqLwotCi0vKiBnZXQgdGhlIHY2IGhvcCBsaW1pdCAqLwotI2RlZmluZSBTQ1RQ
X0dFVF9ITElNKGlucCwgcm8pIDEyOCAvKiBBcyBkb25lIGZvciBfX1dpbmRvd3NfXyAqLwotI2Rl
ZmluZSBJUHY2X0hPUF9MSU1JVCAxMjgKLQotLyogaXMgdGhlIGVuZHBvaW50IHY2b25seT8gKi8K
LSNkZWZpbmUgU0NUUF9JUFY2X1Y2T05MWShpbnApCSgoKHN0cnVjdCBpbnBjYiAqKWlucCktPmlu
cF9mbGFncyAmIElONlBfSVBWNl9WNk9OTFkpCi0vKiBpcyB0aGUgc29ja2V0IG5vbi1ibG9ja2lu
Zz8gKi8KLSNkZWZpbmUgU0NUUF9TT19JU19OQklPKHNvKQkoKHNvKS0+c29fc3RhdGUgJiBTU19O
QklPKQotI2RlZmluZSBTQ1RQX1NFVF9TT19OQklPKHNvKQkoKHNvKS0+c29fc3RhdGUgfD0gU1Nf
TkJJTykKLSNkZWZpbmUgU0NUUF9DTEVBUl9TT19OQklPKHNvKQkoKHNvKS0+c29fc3RhdGUgJj0g
flNTX05CSU8pCi0vKiBnZXQgdGhlIHNvY2tldCB0eXBlICovCi0jZGVmaW5lIFNDVFBfU09fVFlQ
RShzbykJKChzbyktPnNvX3R5cGUpCi0KLS8qIHJlc2VydmUgc2Igc3BhY2UgZm9yIGEgc29ja2V0
ICovCi0jZGVmaW5lIFNDVFBfU09SRVNFUlZFKHNvLCBzZW5kLCByZWN2KQlzb3Jlc2VydmUoc28s
IHNlbmQsIHJlY3YpCi0KLS8qIHdha2V1cCBhIHNvY2tldCAqLwotI2RlZmluZSBTQ1RQX1NPV0FL
RVVQKHNvKQl3YWtldXAoJihzbyktPnNvX3RpbWVvLCBzbykKLS8qIGNsZWFyIHRoZSBzb2NrZXQg
YnVmZmVyIHN0YXRlICovCi0jZGVmaW5lIFNDVFBfU0JfQ0xFQVIoc2IpCVwKLQkoc2IpLnNiX2Nj
ID0gMDsJCVwKLQkoc2IpLnNiX21iID0gTlVMTDsJXAotCShzYikuc2JfbWJjbnQgPSAwOwotCi0j
ZGVmaW5lIFNDVFBfU0JfTElNSVRfUkNWKHNvKSBzby0+c29fcmN2LnNiX2hpd2F0Ci0jZGVmaW5l
IFNDVFBfU0JfTElNSVRfU05EKHNvKSBzby0+c29fc25kLnNiX2hpd2F0Ci0KLS8qIEZ1dHVyZSB6
ZXJvIGNvcHkgd2FrZXVwL3NlbmQgIGZ1bmN0aW9uICovCi0jZGVmaW5lIFNDVFBfWkVST19DT1BZ
X0VWRU5UKGlucCwgc28pCi0vKiBUaGlzIGlzIHJlLXB1bHNlIG91cnNlbHZlcyBmb3Igc2VuZGJ1
ZiAqLwotI2RlZmluZSBTQ1RQX1pFUk9fQ09QWV9TRU5EUV9FVkVOVChpbnAsIHNvKQotCi0jZGVm
aW5lIFNDVFBfUkVBRF9SQU5ET00oYnVmLCBsZW4pCXJlYWRfcmFuZG9tKGJ1ZiwgbGVuKQotCi0j
ZGVmaW5lIFNDVFBfU0hBMV9DVFgJCXN0cnVjdCBzY3RwX3NoYTFfY29udGV4dAotI2RlZmluZSBT
Q1RQX1NIQTFfSU5JVAkJc2N0cF9zaGExX2luaXQKLSNkZWZpbmUgU0NUUF9TSEExX1VQREFURQlz
Y3RwX3NoYTFfdXBkYXRlCi0jZGVmaW5lIFNDVFBfU0hBMV9GSU5BTCh4LHkpCXNjdHBfc2hhMV9m
aW5hbCgodW5zaWduZWQgY2hhciAqKXgsIHkpCi0KLS8qIHN0YXJ0IE9PVEIgb25seSBzdHVmZiAq
LwotLyogVE9ETyBJRlRfTE9PUCBpcyBpbiBuZXQvaWZfdHlwZXMuaCBvbiBMaW51eCAqLwotI2Rl
ZmluZSBJRlRfTE9PUCAweDE4Ci0KLS8qIHNjdHBfcGNiLmggKi8KLQotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU0hVVF9SRCAxCi0jZGVmaW5lIFNIVVRfV1Ig
MgotI2RlZmluZSBTSFVUX1JEV1IgMwotI2VuZGlmCi0jZGVmaW5lIFBSVV9GTFVTSF9SRCBTSFVU
X1JECi0jZGVmaW5lIFBSVV9GTFVTSF9XUiBTSFVUX1dSCi0jZGVmaW5lIFBSVV9GTFVTSF9SRFdS
IFNIVVRfUkRXUgotCi0vKiBuZXRpbmV0L2lwX3Zhci5oIGRlZmludGlvbnMgYXJlIGJlaGluZCBh
biBpZiBkZWZpbmVkIGZvciBfS0VSTkVMIG9uIEZyZWVCU0QgKi8KLSNkZWZpbmUJSVBfUkFXT1VU
UFVUCQkweDIKLQotCi0vKiBlbmQgT09UQiBvbmx5IHN0dWZmICovCi0KLSNkZWZpbmUgQUZfQ09O
TiAxMjMKLXN0cnVjdCBzb2NrYWRkcl9jb25uIHsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXVp
bnQ4X3Qgc2Nvbm5fbGVuOwotCXVpbnQ4X3Qgc2Nvbm5fZmFtaWx5OwotI2Vsc2UKLQl1aW50MTZf
dCBzY29ubl9mYW1pbHk7Ci0jZW5kaWYKLQl1aW50MTZfdCBzY29ubl9wb3J0OwotCXZvaWQgKnNj
b25uX2FkZHI7Ci19OwotCi10eXBlZGVmIHZvaWQgKigqc3RhcnRfcm91dGluZV90KSh2b2lkICop
OwotCi1leHRlcm4gaW50Ci1zY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKHVzZXJsYW5kX3Ro
cmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0aW5lKTsKLQotdm9pZAot
c2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoY29uc3QgY2hhciAqbmFtZSk7Ci0KLS8qCi0g
KiBTQ1RQIHByb3RvY29sIHNwZWNpZmljIG1idWYgZmxhZ3MuCi0gKi8KLSNkZWZpbmUJTV9OT1RJ
RklDQVRJT04JCU1fUFJPVE81CS8qIFNDVFAgbm90aWZpY2F0aW9uICovCi0KLS8qCi0gKiBJUCBv
dXRwdXQgcm91dGluZXMKLSAqLwotCi0vKiBEZWZpbmluZyBTQ1RQX0lQX0lEIG1hY3JvLgotICAg
SW4gbmV0aW5ldC9pcF9vdXRwdXQuYywgd2UgaGF2ZSB1X3Nob3J0IGlwX2lkOwotICAgSW4gbmV0
aW5ldC9pcF92YXIuaCwgd2UgaGF2ZSBleHRlcm4gdV9zaG9ydAlpcF9pZDsgKGVuY2xvc2VkIHdp
dGhpbiBfS0VSTkVMXykKLSAgIFNlZSBzdGF0aWMgX19pbmxpbmUgdWludDE2X3QgaXBfbmV3aWQo
dm9pZCkgaW4gbmV0aW5ldC9pcF92YXIuaAotICovCi0jZGVmaW5lIFNDVFBfSVBfSUQoaW5wKSAo
aXBfaWQpCi0KLS8qIG5lZWQgc2N0cGhkciB0byBnZXQgcG9ydCBpbiBTQ1RQX0lQX09VVFBVVC4g
c2N0cGhkciBkZWZpbmVkIGluIHNjdHAuaCAgKi8KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4K
LWV4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwX291dHB1dChpbnQgKnJlc3VsdCwgc3RydWN0
IG1idWYgKm9fcGFrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBf
cm91dGVfdCAqcm8sIHZvaWQgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QgdnJmX2lkKTsKLQotI2RlZmluZSBTQ1RQX0lQX09VVFBVVChyZXN1bHQs
IG9fcGFrLCBybywgc3RjYiwgdnJmX2lkKSBzY3RwX3VzZXJzcGFjZV9pcF9vdXRwdXQoJnJlc3Vs
dCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOwotCi0jaWYgZGVmaW5lZChJTkVUNikKLWV4dGVy
biB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQoaW50ICpyZXN1bHQsIHN0cnVjdCBtYnVm
ICpvX3BhaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJv
dXRlX2luNiAqcm8sIHZvaWQgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHZyZl9pZCk7Ci0jZGVmaW5lIFNDVFBfSVA2X09VVFBVVChyZXN1bHQs
IG9fcGFrLCBybywgaWZwLCBzdGNiLCB2cmZfaWQpIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQo
JnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOwotI2VuZGlmCi0KLQotCi0jaWYgMAot
I2RlZmluZSBTQ1RQX0lQNl9PVVRQVVQocmVzdWx0LCBvX3Bhaywgcm8sIGlmcCwgc3RjYiwgdnJm
X2lkKSBcCi17IFwKLQlpZiAoc3RjYiAmJiBzdGNiLT5zY3RwX2VwKSBcCi0JCXJlc3VsdCA9IGlw
Nl9vdXRwdXQob19wYWssIFwKLQkJCQkgICAgKChzdHJ1Y3QgaW42cGNiICopKHN0Y2ItPnNjdHBf
ZXApKS0+aW42cF9vdXRwdXRvcHRzLCBcCi0JCQkJICAgIChybyksIDAsIDAsIGlmcCwgTlVMTCk7
IFwKLQllbHNlIFwKLQkJcmVzdWx0ID0gaXA2X291dHB1dChvX3BhaywgTlVMTCwgKHJvKSwgMCwg
MCwgaWZwLCBOVUxMKTsgXAotfQotI2VuZGlmCi0KLXN0cnVjdCBtYnVmICoKLXNjdHBfZ2V0X21i
dWZfZm9yX21zZyh1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkLCBpbnQgd2FudF9oZWFkZXIsIGlu
dCBob3csIGludCBhbGxvbmVidWYsIGludCB0eXBlKTsKLQotCi0vKiB3aXRoIHRoZSBjdXJyZW50
IGluY2x1ZGVkIGZpbGVzLCB0aGlzIGlzIGRlZmluZWQgaW4gTGludXggYnV0Ci0gKiAgaW4gRnJl
ZUJTRCwgaXQgaXMgYmVoaW5kIGEgX0tFUk5FTCBpbiBzeXMvc29ja2V0LmggLi4uCi0gKi8KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RyYWdvbkZseSkgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19GcmVlQlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09wZW5CU0QpIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLS8qIHN0b2xlbiBmcm9tIC91c3IvaW5jbHVkZS9zeXMv
c29ja2V0LmggKi8KLSNkZWZpbmUgQ01TR19BTElHTihuKSAgIF9BTElHTihuKQotI2VsaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCi0jZGVmaW5lIENNU0dfQUxJR04obikgICAoKChu
KSArIF9fQUxJR05CWVRFUykgJiB+X19BTElHTkJZVEVTKQotI2VsaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19EYXJ3aW4pCi0jaWYgIWRlZmluZWQoX19EQVJXSU5fQUxJR05CWVRFUykKLSNkZWZp
bmUJX19EQVJXSU5fQUxJR05CWVRFUwkoc2l6ZW9mKF9fZGFyd2luX3NpemVfdCkgLSAxKQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTikKLSNkZWZpbmUJX19EQVJXSU5fQUxJ
R04ocCkJKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RBUldJ
Tl9BTElHTkJZVEVTKSAmfiBfX0RBUldJTl9BTElHTkJZVEVTKQotI2VuZGlmCi0KLSNpZiAhZGVm
aW5lZChfX0RBUldJTl9BTElHTkJZVEVTMzIpCi0jZGVmaW5lIF9fREFSV0lOX0FMSUdOQllURVMz
MiAgICAgKHNpemVvZihfX3VpbnQzMl90KSAtIDEpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9f
REFSV0lOX0FMSUdOMzIpCi0jZGVmaW5lIF9fREFSV0lOX0FMSUdOMzIocCkgICAgICAgKChfX2Rh
cndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVT
MzIpICZ+IF9fREFSV0lOX0FMSUdOQllURVMzMikKLSNlbmRpZgotI2RlZmluZSBDTVNHX0FMSUdO
KG4pICAgX19EQVJXSU5fQUxJR04zMihuKQotI2VuZGlmCi0jZGVmaW5lIElfQU1fSEVSRSBcCi0g
ICAgICAgICAgICAgICAgZG8geyBcCi0JCQlTQ1RQX1BSSU5URigiJXM6JWQgYXQgJXNcbiIsIF9f
RklMRV9fLCBfX0xJTkVfXyAsIF9fZnVuY19fKTsgXAotCQl9IHdoaWxlICgwKQotCi0jaWZuZGVm
IHRpbWV2YWxzdWIKLSNkZWZpbmUgdGltZXZhbHN1Yih0cDEsIHRwMikgICAgICAgICAgICAgICAg
ICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot
CQkodHAxKS0+dHZfc2VjIC09ICh0cDIpLT50dl9zZWM7ICAgIFwKLQkJKHRwMSktPnR2X3VzZWMg
LT0gKHRwMiktPnR2X3VzZWM7ICBcCi0JCWlmICgodHAxKS0+dHZfdXNlYyA8IDApIHsgICAgICAg
ICAgXAotCQkJKHRwMSktPnR2X3NlYy0tOyAgICAgICAgICAgXAotCQkJKHRwMSktPnR2X3VzZWMg
Kz0gMTAwMDAwMDsgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl9
IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQot
I2lmICFkZWZpbmVkKFRBSUxRX0ZPUkVBQ0hfU0FGRSkKLSNkZWZpbmUgVEFJTFFfRk9SRUFDSF9T
QUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpICAgICAgICAgICAgIFwKLSAgICAgICAgIGZvciAo
KHZhcikgPSAoKGhlYWQpLT50cWhfZmlyc3QpOyAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IFRBSUxRX05FWFQoKHZhciksIGZpZWxkKSwgMSk7
IFwKLSAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChM
SVNUX0ZPUkVBQ0hfU0FGRSkKLSNkZWZpbmUgTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBm
aWVsZCwgdHZhcikgICAgICAgICAgICAgIFwKLSAgICAgICAgIGZvciAoKHZhcikgPSAoKGhlYWQp
LT5saF9maXJzdCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgKHZhcikg
JiYgKCh0dmFyKSA9IExJU1RfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsgIFwKLSAgICAgICAgICAg
ICAgKHZhcikgPSAodHZhcikpCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfRHJhZ29uRmx5KQotI2RlZmluZSBUQUlMUV9GT1JFQUNIX1NBRkUgVEFJTFFfRk9SRUFD
SF9NVVRBQkxFCi0jZGVmaW5lIExJU1RfRk9SRUFDSF9TQUZFIExJU1RfRk9SRUFDSF9NVVRBQkxF
Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLSNkZWZpbmUJdGlt
ZXJjbXAodHZwLCB1dnAsIGNtcCkJCQkJCQlcCi0JKCgodHZwKS0+dHZfc2VjID09ICh1dnApLT50
dl9zZWMpID8JCQkJXAotCSAgICAoKHR2cCktPnR2X3VzZWMgY21wICh1dnApLT50dl91c2VjKSA6
CQkJXAotCSAgICAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3NlYykpCi0jZW5kaWYKLQot
I2RlZmluZSBTQ1RQX0lTX0xJU1RFTklORyhpbnApICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQUNDRVBUSU5HKSAhPSAwKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9vdXRwdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwpk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0NmNhM2EzYzYyZWVkYTMyM2UyNGQzNGQx
Mjk4Mjc5NzUxYjcyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwx
NTAxMCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBT
eXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3Rl
bXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1f
X0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9vdXRwdXQuYyAzMjEyMDQg
MjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvcHJvYy5o
PgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3Vpby5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2lucHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19MaW51eCkKLSNkZWZpbmUgX19GQVZPUl9CU0QgICAgLyogKG9uIFVi
dW50dSBhdCBsZWFzdCkgZW5hYmxlcyBVRFAgaGVhZGVyIGZpZWxkIG5hbWVzIGxpa2UgQlNEIGlu
IFJGQyA3NjggKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikK
LSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPG5ldGluZXQv
dWRwLmg+Ci0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0jaW5jbHVk
ZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxtYWNoaW5lL2luX2Nrc3Vt
Lmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pICYmIGRlZmluZWQoSU5FVDYp
Ci0jaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQo
X19BUFBMRV9fKQotI2RlZmluZSBBUFBMRV9GSUxFX05PIDMKLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pCi0jaWYgIShkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQ
TEVfU05PV0xFT1BBUkQpKQotI2RlZmluZSBTQ1RQX01BWF9MSU5LSERSIDE2Ci0jZW5kaWYKLSNl
bmRpZgotCi0jZGVmaW5lIFNDVFBfTUFYX0dBUFNfSU5BUlJBWSA0Ci1zdHJ1Y3Qgc2Fja190cmFj
ayB7Ci0JdWludDhfdCByaWdodF9lZGdlOwkvKiBtZXJnYWJsZSBvbiB0aGUgcmlnaHQgZWRnZSAq
LwotCXVpbnQ4X3QgbGVmdF9lZGdlOwkvKiBtZXJnYWJsZSBvbiB0aGUgbGVmdCBlZGdlICovCi0J
dWludDhfdCBudW1fZW50cmllczsKLQl1aW50OF90IHNwYXJlOwotCXN0cnVjdCBzY3RwX2dhcF9h
Y2tfYmxvY2sgZ2Fwc1tTQ1RQX01BWF9HQVBTX0lOQVJSQVldOwotfTsKLQotY29uc3Qgc3RydWN0
IHNhY2tfdHJhY2sgc2Fja19hcnJheVsyNTZdID0gewotCXswLCAwLCAwLCAwLAkJLyogMHgwMCAq
LwotCQl7ezAsIDB9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAxLCAwLAkJLyogMHgwMSAqLwotCQl7ezAsIDB9LAotCQl7MCwgMH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwMiAqLwotCQl7ezEs
IDF9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAx
LCAwLAkJLyogMHgwMyAqLwotCQl7ezAsIDF9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwNCAqLwotCQl7ezIsIDJ9LAotCQl7
MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyog
MHgwNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwNiAqLwotCQl7ezEsIDJ9LAotCQl7MCwgMH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgwNyAqLwot
CQl7ezAsIDJ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAxLCAwLAkJLyogMHgwOCAqLwotCQl7ezMsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgwOSAqLwotCQl7ezAsIDB9
LAotCQl7MywgM30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAw
LAkJLyogMHgwYSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgwYiAqLwotCQl7ezAsIDF9LAotCQl7Mywg
M30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgw
YyAqLwotCQl7ezIsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAyLCAwLAkJLyogMHgwZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwZSAqLwotCQl7
ezEsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAxLCAwLAkJLyogMHgwZiAqLwotCQl7ezAsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgxMCAqLwotCQl7ezQsIDR9LAot
CQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJ
LyogMHgxMSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgxMiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNH0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxMyAq
LwotCQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAyLCAwLAkJLyogMHgxNCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgxNSAqLwotCQl7ezAs
IDB9LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAy
LCAwLAkJLyogMHgxNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxNyAqLwotCQl7ezAsIDJ9LAotCQl7
NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyog
MHgxOCAqLwotCQl7ezMsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxOSAqLwotCQl7ezAsIDB9LAotCQl7MywgNH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgxYSAqLwot
CQl7ezEsIDF9LAotCQl7MywgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAyLCAwLAkJLyogMHgxYiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgxYyAqLwotCQl7ezIsIDR9
LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAw
LAkJLyogMHgxZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgxZSAqLwotCQl7ezEsIDR9LAotCQl7MCwg
MH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgx
ZiAqLwotCQl7ezAsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAxLCAwLAkJLyogMHgyMCAqLwotCQl7ezUsIDV9LAotCQl7MCwgMH0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgyMSAqLwotCQl7
ezAsIDB9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAyLCAwLAkJLyogMHgyMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgyMyAqLwotCQl7ezAsIDF9LAot
CQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJ
LyogMHgyNCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgyNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0s
Ci0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyNiAq
LwotCQl7ezEsIDJ9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAyLCAwLAkJLyogMHgyNyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgNX0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyOCAqLwotCQl7ezMs
IDN9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAz
LCAwLAkJLyogMHgyOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHgyYSAqLwotCQl7ezEsIDF9LAotCQl7
MywgM30sCi0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyog
MHgyYiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyYyAqLwotCQl7ezIsIDN9LAotCQl7NSwgNX0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgyZCAqLwot
CQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAyLCAwLAkJLyogMHgyZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgyZiAqLwotCQl7ezAsIDN9
LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAw
LAkJLyogMHgzMCAqLwotCQl7ezQsIDV9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzMSAqLwotCQl7ezAsIDB9LAotCQl7NCwg
NX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgz
MiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNX0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgzNCAqLwotCQl7
ezIsIDJ9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAzLCAwLAkJLyogMHgzNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA1fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgzNiAqLwotCQl7ezEsIDJ9LAot
CQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJ
LyogMHgzNyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgzOCAqLwotCQl7ezMsIDV9LAotCQl7MCwgMH0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzOSAq
LwotCQl7ezAsIDB9LAotCQl7MywgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAyLCAwLAkJLyogMHgzYSAqLwotCQl7ezEsIDF9LAotCQl7MywgNX0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzYiAqLwotCQl7ezAs
IDF9LAotCQl7MywgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAx
LCAwLAkJLyogMHgzYyAqLwotCQl7ezIsIDV9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzZCAqLwotCQl7ezAsIDB9LAotCQl7
MiwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyog
MHgzZSAqLwotCQl7ezEsIDV9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgzZiAqLwotCQl7ezAsIDV9LAotCQl7MCwgMH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHg0MCAqLwot
CQl7ezYsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAyLCAwLAkJLyogMHg0MSAqLwotCQl7ezAsIDB9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0MiAqLwotCQl7ezEsIDF9
LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAw
LAkJLyogMHg0MyAqLwotCQl7ezAsIDF9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0NCAqLwotCQl7ezIsIDJ9LAotCQl7Niwg
Nn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0
NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAyLCAwLAkJLyogMHg0NiAqLwotCQl7ezEsIDJ9LAotCQl7NiwgNn0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg0NyAqLwotCQl7
ezAsIDJ9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAyLCAwLAkJLyogMHg0OCAqLwotCQl7ezMsIDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0OSAqLwotCQl7ezAsIDB9LAot
CQl7MywgM30sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJ
LyogMHg0YSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0YiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30s
Ci0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0YyAq
LwotCQl7ezIsIDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAzLCAwLAkJLyogMHg0ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs2LCA2
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0ZSAqLwotCQl7ezEs
IDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAy
LCAwLAkJLyogMHg0ZiAqLwotCQl7ezAsIDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1MCAqLwotCQl7ezQsIDR9LAotCQl7
NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyog
MHg1MSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg1MiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNH0sCi0J
CXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1MyAqLwot
CQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAzLCAwLAkJLyogMHg1NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCA0LCAwLAkJLyogMHg1NSAqLwotCQl7ezAsIDB9
LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezYsIDZ9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAw
LAkJLyogMHg1NiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1NyAqLwotCQl7ezAsIDJ9LAotCQl7NCwg
NH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1
OCAqLwotCQl7ezMsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1OSAqLwotCQl7ezAsIDB9LAotCQl7MywgNH0sCi0JCXs2
LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg1YSAqLwotCQl7
ezEsIDF9LAotCQl7MywgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAzLCAwLAkJLyogMHg1YiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0JCXs2LCA2fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1YyAqLwotCQl7ezIsIDR9LAot
CQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJ
LyogMHg1ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1ZSAqLwotCQl7ezEsIDR9LAotCQl7NiwgNn0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg1ZiAq
LwotCQl7ezAsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAxLCAwLAkJLyogMHg2MCAqLwotCQl7ezUsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2MSAqLwotCQl7ezAs
IDB9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAy
LCAwLAkJLyogMHg2MiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2MyAqLwotCQl7ezAsIDF9LAotCQl7
NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyog
MHg2NCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg2NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0J
CXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2NiAqLwot
CQl7ezEsIDJ9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAyLCAwLAkJLyogMHg2NyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2OCAqLwotCQl7ezMsIDN9
LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAw
LAkJLyogMHg2OSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA2fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg2YSAqLwotCQl7ezEsIDF9LAotCQl7Mywg
M30sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg2
YiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAyLCAwLAkJLyogMHg2YyAqLwotCQl7ezIsIDN9LAotCQl7NSwgNn0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg2ZCAqLwotCQl7
ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAyLCAwLAkJLyogMHg2ZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2ZiAqLwotCQl7ezAsIDN9LAot
CQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJ
LyogMHg3MCAqLwotCQl7ezQsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3MSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNn0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg3MiAq
LwotCQl7ezEsIDF9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAyLCAwLAkJLyogMHg3MyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNn0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg3NCAqLwotCQl7ezIs
IDJ9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAz
LCAwLAkJLyogMHg3NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA2fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg3NiAqLwotCQl7ezEsIDJ9LAotCQl7
NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyog
MHg3NyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHg3OCAqLwotCQl7ezMsIDZ9LAotCQl7MCwgMH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3OSAqLwot
CQl7ezAsIDB9LAotCQl7MywgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAyLCAwLAkJLyogMHg3YSAqLwotCQl7ezEsIDF9LAotCQl7MywgNn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3YiAqLwotCQl7ezAsIDF9
LAotCQl7MywgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAw
LAkJLyogMHg3YyAqLwotCQl7ezIsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3ZCAqLwotCQl7ezAsIDB9LAotCQl7Miwg
Nn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHg3
ZSAqLwotCQl7ezEsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAxLCAwLAkJLyogMHg3ZiAqLwotCQl7ezAsIDZ9LAotCQl7MCwgMH0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHg4MCAqLwotCQl7
ezcsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAyLCAwLAkJLyogMHg4MSAqLwotCQl7ezAsIDB9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4MiAqLwotCQl7ezEsIDF9LAot
CQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJ
LyogMHg4MyAqLwotCQl7ezAsIDF9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4NCAqLwotCQl7ezIsIDJ9LAotCQl7NywgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4NSAq
LwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAxLCAyLCAwLAkJLyogMHg4NiAqLwotCQl7ezEsIDJ9LAotCQl7NywgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHg4NyAqLwotCQl7ezAs
IDJ9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAy
LCAwLAkJLyogMHg4OCAqLwotCQl7ezMsIDN9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4OSAqLwotCQl7ezAsIDB9LAotCQl7
MywgM30sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyog
MHg4YSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4YiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0J
CXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4YyAqLwot
CQl7ezIsIDN9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAzLCAwLAkJLyogMHg4ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs3LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4ZSAqLwotCQl7ezEsIDN9
LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAw
LAkJLyogMHg4ZiAqLwotCQl7ezAsIDN9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5MCAqLwotCQl7ezQsIDR9LAotCQl7Nywg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5
MSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAzLCAwLAkJLyogMHg5MiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNH0sCi0JCXs3
LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5MyAqLwotCQl7
ezAsIDF9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAzLCAwLAkJLyogMHg5NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHg5NSAqLwotCQl7ezAsIDB9LAot
CQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJ
LyogMHg5NiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5NyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNH0s
Ci0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5OCAq
LwotCQl7ezMsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAzLCAwLAkJLyogMHg5OSAqLwotCQl7ezAsIDB9LAotCQl7MywgNH0sCi0JCXs3LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHg5YSAqLwotCQl7ezEs
IDF9LAotCQl7MywgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAz
LCAwLAkJLyogMHg5YiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0JCXs3LCA3fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5YyAqLwotCQl7ezIsIDR9LAotCQl7
NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyog
MHg5ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5ZSAqLwotCQl7ezEsIDR9LAotCQl7NywgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHg5ZiAqLwot
CQl7ezAsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAyLCAwLAkJLyogMHhhMCAqLwotCQl7ezUsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhMSAqLwotCQl7ezAsIDB9
LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAw
LAkJLyogMHhhMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhMyAqLwotCQl7ezAsIDF9LAotCQl7NSwg
NX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhh
NCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCA0LCAwLAkJLyogMHhhNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs1
LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhhNiAqLwotCQl7
ezEsIDJ9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAzLCAwLAkJLyogMHhhNyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhhOCAqLwotCQl7ezMsIDN9LAot
CQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJ
LyogMHhhOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0J
CX0KLQl9LAotCXswLCAxLCA0LCAwLAkJLyogMHhhYSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30s
Ci0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHhhYiAq
LwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAot
CXswLCAxLCAzLCAwLAkJLyogMHhhYyAqLwotCQl7ezIsIDN9LAotCQl7NSwgNX0sCi0JCXs3LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHhhZCAqLwotCQl7ezAs
IDB9LAotCQl7MiwgM30sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAz
LCAwLAkJLyogMHhhZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhZiAqLwotCQl7ezAsIDN9LAotCQl7
NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyog
MHhiMCAqLwotCQl7ezQsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiMSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNX0sCi0J
CXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhiMiAqLwot
CQl7ezEsIDF9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAzLCAwLAkJLyogMHhiMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhiNCAqLwotCQl7ezIsIDJ9
LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAw
LAkJLyogMHhiNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA1fSwKLQkJezcsIDd9
Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhiNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwg
NX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhi
NyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAyLCAwLAkJLyogMHhiOCAqLwotCQl7ezMsIDV9LAotCQl7NywgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiOSAqLwotCQl7
ezAsIDB9LAotCQl7MywgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAzLCAwLAkJLyogMHhiYSAqLwotCQl7ezEsIDF9LAotCQl7MywgNX0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiYiAqLwotCQl7ezAsIDF9LAot
CQl7MywgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJ
LyogMHhiYyAqLwotCQl7ezIsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNX0s
Ci0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhiZSAq
LwotCQl7ezEsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAyLCAwLAkJLyogMHhiZiAqLwotCQl7ezAsIDV9LAotCQl7NywgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHhjMCAqLwotCQl7ezYs
IDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAy
LCAwLAkJLyogMHhjMSAqLwotCQl7ezAsIDB9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjMiAqLwotCQl7ezEsIDF9LAotCQl7
NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyog
MHhjMyAqLwotCQl7ezAsIDF9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjNCAqLwotCQl7ezIsIDJ9LAotCQl7NiwgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjNSAqLwot
CQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAyLCAwLAkJLyogMHhjNiAqLwotCQl7ezEsIDJ9LAotCQl7NiwgN30sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhjNyAqLwotCQl7ezAsIDJ9
LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAw
LAkJLyogMHhjOCAqLwotCQl7ezMsIDN9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjOSAqLwotCQl7ezAsIDB9LAotCQl7Mywg
M30sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhj
YSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjYiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs2
LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjYyAqLwotCQl7
ezIsIDN9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAzLCAwLAkJLyogMHhjZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs2LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjZSAqLwotCQl7ezEsIDN9LAot
CQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJ
LyogMHhjZiAqLwotCQl7ezAsIDN9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkMCAqLwotCQl7ezQsIDR9LAotCQl7NiwgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkMSAq
LwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAxLCAzLCAwLAkJLyogMHhkMiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNH0sCi0JCXs2LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkMyAqLwotCQl7ezAs
IDF9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAz
LCAwLAkJLyogMHhkNCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHhkNSAqLwotCQl7ezAsIDB9LAotCQl7
MiwgMn0sCi0JCXs0LCA0fSwKLQkJezYsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyog
MHhkNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkNyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNH0sCi0J
CXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkOCAqLwot
CQl7ezMsIDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAzLCAwLAkJLyogMHhkOSAqLwotCQl7ezAsIDB9LAotCQl7MywgNH0sCi0JCXs2LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhkYSAqLwotCQl7ezEsIDF9
LAotCQl7MywgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAw
LAkJLyogMHhkYiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkYyAqLwotCQl7ezIsIDR9LAotCQl7Niwg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhk
ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAyLCAwLAkJLyogMHhkZSAqLwotCQl7ezEsIDR9LAotCQl7NiwgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhkZiAqLwotCQl7
ezAsIDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAxLCAwLAkJLyogMHhlMCAqLwotCQl7ezUsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlMSAqLwotCQl7ezAsIDB9LAot
CQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJ
LyogMHhlMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlMyAqLwotCQl7ezAsIDF9LAotCQl7NSwgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhlNCAq
LwotCQl7ezIsIDJ9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAzLCAwLAkJLyogMHhlNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs1LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhlNiAqLwotCQl7ezEs
IDJ9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAy
LCAwLAkJLyogMHhlNyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhlOCAqLwotCQl7ezMsIDN9LAotCQl7
NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyog
MHhlOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhlYSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0J
CXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhlYiAqLwot
CQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAyLCAwLAkJLyogMHhlYyAqLwotCQl7ezIsIDN9LAotCQl7NSwgN30sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhlZCAqLwotCQl7ezAsIDB9
LAotCQl7MiwgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAw
LAkJLyogMHhlZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlZiAqLwotCQl7ezAsIDN9LAotCQl7NSwg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHhm
MCAqLwotCQl7ezQsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmMSAqLwotCQl7ezAsIDB9LAotCQl7NCwgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmMiAqLwotCQl7
ezEsIDF9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAyLCAwLAkJLyogMHhmMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmNCAqLwotCQl7ezIsIDJ9LAot
CQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJ
LyogMHhmNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA3fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmNyAq
LwotCQl7ezAsIDJ9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAxLCAxLCAwLAkJLyogMHhmOCAqLwotCQl7ezMsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmOSAqLwotCQl7ezAs
IDB9LAotCQl7MywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAy
LCAwLAkJLyogMHhmYSAqLwotCQl7ezEsIDF9LAotCQl7MywgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmYiAqLwotCQl7ezAsIDF9LAotCQl7
MywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyog
MHhmYyAqLwotCQl7ezIsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHhmZSAqLwot
CQl7ezEsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAxLCAwLAkJLyogMHhmZiAqLwotCQl7ezAsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9Ci19OwotCi0KLWludAotc2N0cF9pc19hZGRyZXNzX2luX3Njb3Bl
KHN0cnVjdCBzY3RwX2lmYSAqaWZhLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3Njb3BpbmcgKnNjb3BlLAotICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb191cGRh
dGUpCi17Ci0JaWYgKChzY29wZS0+bG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYKLQkgICAgKGlmYS0+
aWZuX3ApICYmIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmYS0+aWZuX3ApKSB7Ci0JCS8qCi0JCSAq
IHNraXAgbG9vcGJhY2sgaWYgbm90IGluIHNjb3BlICoKLQkJICovCi0JCXJldHVybiAoMCk7Ci0J
fQotCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQlj
YXNlIEFGX0lORVQ6Ci0JCWlmIChzY29wZS0+aXB2NF9hZGRyX2xlZ2FsKSB7Ci0JCQlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbjsKLQotCQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgewotCQkJCS8qIG5vdCBpbiBzY29wZSAsIHVuc3Bl
Y2lmaWVkICovCi0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWlmICgoc2NvcGUtPmlwdjRfbG9j
YWxfc2NvcGUgPT0gMCkgJiYKLQkJCSAgICAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNp
bl9hZGRyKSkpIHsKLQkJCQkvKiBwcml2YXRlIGFkZHJlc3Mgbm90IGluIHNjb3BlICovCi0JCQkJ
cmV0dXJuICgwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJYnJl
YWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCWlmIChzY29wZS0+
aXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0jaWYg
IWRlZmluZWQoX19QYW5kYV9fKQotCQkJLyogTXVzdCB1cGRhdGUgdGhlIGZsYWdzLCAgYnVtbWVy
LCB3aGljaAotCQkJICogbWVhbnMgYW55IElGQSBsb2NrcyBtdXN0IG5vdyBiZSBhcHBsaWVkIEhF
UkUgPC0+Ci0JCQkgKi8KLQkJCWlmIChkb191cGRhdGUpIHsKLQkJCQlzY3RwX2dhdGhlcl9pbnRl
cm5hbF9pZmFfZmxhZ3MoaWZhKTsKLQkJCX0KLSNlbmRpZgotCQkJaWYgKGlmYS0+bG9jYWxpZmFf
ZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJCXJldHVybiAoMCk7Ci0JCQl9
Ci0JCQkvKiBvayB0byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXM/ICovCi0JCQlzaW42ID0gJmlm
YS0+YWRkcmVzcy5zaW42OwotCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5z
aW42X2FkZHIpKSB7Ci0JCQkJLyogc2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLwotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoCQkvKiAobG9jYWxfc2NvcGUgPT0gMCkgJiYgKi8KLQkJ
CSAgICAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgewotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoKHNjb3BlLT5zaXRlX3Njb3BlID09IDApICYmCi0JCQkg
ICAgKElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkpIHsKLQkJCQlyZXR1
cm4gKDApOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlicmVhazsK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWlm
ICghc2NvcGUtPmNvbm5fYWRkcl9sZWdhbCkgewotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlicmVh
azsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0JfQotCXJldHVybiAoMSk7Ci19
Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FkZF9hZGRyX3RvX21idWYoc3RydWN0IG1i
dWYgKm0sIHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MTZfdCAqbGVuKQotewotI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGFyYW1o
OwotCXN0cnVjdCBtYnVmICptcmV0OwotCXVpbnQxNl90IHBsZW47Ci0jZW5kaWYKLQotCXN3aXRj
aCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lO
RVQ6Ci0JCXBsZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFt
KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCXBs
ZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKLQkJYnJl
YWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gKG0pOwotCX0KLSNpZiBkZWZpbmVkKElO
RVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JaWYgKE1fVFJBSUxJTkdTUEFDRShtKSA+PSBwbGVuKSB7
Ci0JCS8qIGVhc3kgc2lkZSB3ZSBqdXN0IGRyb3AgaXQgb24gdGhlIGVuZCAqLwotCQlwYXJhbWgg
PSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoU0NUUF9CVUZfQVQobSwgU0NUUF9CVUZfTEVOKG0p
KSk7Ci0JCW1yZXQgPSBtOwotCX0gZWxzZSB7Ci0JCS8qIE5lZWQgbW9yZSBzcGFjZSAqLwotCQlt
cmV0ID0gbTsKLQkJd2hpbGUgKFNDVFBfQlVGX05FWFQobXJldCkgIT0gTlVMTCkgewotCQkJbXJl
dCA9IFNDVFBfQlVGX05FWFQobXJldCk7Ci0JCX0KLQkJU0NUUF9CVUZfTkVYVChtcmV0KSA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhwbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlm
IChTQ1RQX0JVRl9ORVhUKG1yZXQpID09IE5VTEwpIHsKLQkJCS8qIFdlIGFyZSBob3NlZCwgY2Fu
J3QgYWRkIG1vcmUgYWRkcmVzc2VzICovCi0JCQlyZXR1cm4gKG0pOwotCQl9Ci0JCW1yZXQgPSBT
Q1RQX0JVRl9ORVhUKG1yZXQpOwotCQlwYXJhbWggPSBtdG9kKG1yZXQsIHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopOwotCX0KLQkvKiBub3cgYWRkIHRoZSBwYXJhbWV0ZXIgKi8KLQlzd2l0Y2ggKGlm
YS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgot
CXsKLQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKmlwdjRwOwotCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKnNpbjsKLQotCQlzaW4gPSAmaWZhLT5hZGRyZXNzLnNpbjsKLQkJaXB2NHAgPSAoc3Ry
dWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwYXJhbWg7Ci0JCXBhcmFtaC0+cGFyYW1fdHlwZSA9
IGh0b25zKFNDVFBfSVBWNF9BRERSRVNTKTsKLQkJcGFyYW1oLT5wYXJhbV9sZW5ndGggPSBodG9u
cyhwbGVuKTsKLQkJaXB2NHAtPmFkZHIgPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKLQkJU0NUUF9C
VUZfTEVOKG1yZXQpICs9IHBsZW47Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICppcHY2
cDsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlzaW42ID0gJmlmYS0+YWRkcmVz
cy5zaW42OwotCQlpcHY2cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBhcmFtaDsK
LQkJcGFyYW1oLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9JUFY2X0FERFJFU1MpOwotCQlwYXJh
bWgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBsZW4pOwotCQltZW1jcHkoaXB2NnAtPmFkZHIsICZz
aW42LT5zaW42X2FkZHIsCi0JCSAgICBzaXplb2YoaXB2NnAtPmFkZHIpKTsKLSNpZiBkZWZpbmVk
KFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi0JCS8qIGNsZWFyIGVtYmVkZGVkIHNjb3BlIGluIHRo
ZSBhZGRyZXNzICovCi0JCWluNl9jbGVhcnNjb3BlKChzdHJ1Y3QgaW42X2FkZHIgKilpcHY2cC0+
YWRkcik7Ci0jZW5kaWYKLQkJU0NUUF9CVUZfTEVOKG1yZXQpICs9IHBsZW47Ci0JCWJyZWFrOwot
CX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAobSk7Ci0JfQotCWlmIChsZW4gIT0gTlVM
TCkgewotCQkqbGVuICs9IHBsZW47Ci0JfQotCXJldHVybiAobXJldCk7Ci0jZW5kaWYKLX0KLQot
Ci1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9pYShzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpzY29wZSwKLQkJCSAgIHN0cnVjdCBtYnVmICptX2F0
LCBpbnQgY250X2luaXRzX3RvLAotCQkJICAgdWludDE2X3QgKnBhZGRpbmdfbGVuLCB1aW50MTZf
dCAqY2h1bmtfbGVuKQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKLQlpbnQgY250
LCBsaW1pdF9vdXQgPSAwLCB0b3RhbF9jb3VudDsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0KLQl2cmZf
aWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JU0NUUF9JUElfQUREUl9STE9DSygpOwotCXZyZiA9IHNj
dHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJU0NUUF9JUElfQURE
Ul9SVU5MT0NLKCk7Ci0JCXJldHVybiAobV9hdCk7Ci0JfQotCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZh
cDsKLQkJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7Ci0KLQkJY250ID0gY250X2luaXRzX3Rv
OwotCQlpZiAodnJmLT50b3RhbF9pZmFfY291bnQgPiBTQ1RQX0NPVU5UX0xJTUlUKSB7Ci0JCQls
aW1pdF9vdXQgPSAxOwotCQkJY250ID0gU0NUUF9BRERSRVNTX0xJTUlUOwotCQkJZ290byBza2lw
X2NvdW50OwotCQl9Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmbnAsICZ2cmYtPmlmbmxpc3QsIG5l
eHRfaWZuKSB7Ci0JCQlpZiAoKHNjb3BlLT5sb29wYmFja19zY29wZSA9PSAwKSAmJgotCQkJICAg
IFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZucCkpIHsKLQkJCQkvKgotCQkJCSAqIFNraXAg
bG9vcGJhY2sgZGV2aWNlcyBpZiBsb29wYmFja19zY29wZQotCQkJCSAqIG5vdCBzZXQKLQkJCQkg
Ki8KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYXAsICZzY3Rw
X2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNp
ZmRlZiBJTkVUCi0JCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFG
X0lORVQpICYmCi0JCQkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW4u
c2luX2FkZHIpICE9IDApKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSAmJgotCQkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2Ny
ZWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNi5z
aW42X2FkZHIpICE9IDApKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNlbmRpZgotI2VuZGlm
Ci0JCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhcCkpIHsKLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQlpZiAo
c2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLSNlbmRpZgotCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2N0
cF9pZmFwLCBzY29wZSwgMSkgPT0gMCkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJY250
Kys7Ci0JCQkJaWYgKGNudCA+IFNDVFBfQUREUkVTU19MSU1JVCkgewotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9Ci0JCQlpZiAoY250ID4gU0NUUF9BRERSRVNTX0xJTUlUKSB7Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCX0KLQlza2lwX2NvdW50OgotCQlpZiAoY250ID4gMSkgewotCQkJdG90YWxfY291
bnQgPSAwOwotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+aWZubGlzdCwgbmV4dF9p
Zm4pIHsKLQkJCQljbnQgPSAwOwotCQkJCWlmICgoc2NvcGUtPmxvb3BiYWNrX3Njb3BlID09IDAp
ICYmCi0JCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZucCkpIHsKLQkJCQkJLyoK
LQkJCQkJICogU2tpcCBsb29wYmFjayBkZXZpY2VzIGlmCi0JCQkJCSAqIGxvb3BiYWNrX3Njb3Bl
IG5vdCBzZXQKLQkJCQkJICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlMSVNUX0ZPUkVB
Q0goc2N0cF9pZmFwLCAmc2N0cF9pZm5wLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCQkJICAgIChwcmlzb25fY2hlY2tfaXA0
KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICZz
Y3RwX2lmYXAtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgewotCQkJCQkJY29udGludWU7
Ci0JCQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmICgoc2N0cF9pZmFwLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJCQkJICAgIChwcmlzb25fY2hlY2tf
aXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7Ci0JCQkJCQljb250
aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIHNjdHBfaWZhcCkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCQlpZiAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNh
X2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0J
CQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2N0cF9pZmFwLAotCQkJCQkJCQkgICAg
IHNjb3BlLCAwKSA9PSAwKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAoKGNo
dW5rX2xlbiAhPSBOVUxMKSAmJgotCQkJCQkgICAgKHBhZGRpbmdfbGVuICE9IE5VTEwpICYmCi0J
CQkJCSAgICAoKnBhZGRpbmdfbGVuID4gMCkpIHsKLQkJCQkJCW1lbXNldChtdG9kKG1fYXQsIGNh
ZGRyX3QpICsgKmNodW5rX2xlbiwgMCwgKnBhZGRpbmdfbGVuKTsKLQkJCQkJCVNDVFBfQlVGX0xF
TihtX2F0KSArPSAqcGFkZGluZ19sZW47Ci0JCQkJCQkqY2h1bmtfbGVuICs9ICpwYWRkaW5nX2xl
bjsKLQkJCQkJCSpwYWRkaW5nX2xlbiA9IDA7Ci0JCQkJCX0KLQkJCQkJbV9hdCA9IHNjdHBfYWRk
X2FkZHJfdG9fbWJ1ZihtX2F0LCBzY3RwX2lmYXAsIGNodW5rX2xlbik7Ci0JCQkJCWlmIChsaW1p
dF9vdXQpIHsKLQkJCQkJCWNudCsrOwotCQkJCQkJdG90YWxfY291bnQrKzsKLQkJCQkJCWlmIChj
bnQgPj0gMikgewotCQkJCQkJCS8qIHR3byBmcm9tIGVhY2ggYWRkcmVzcyAqLwotCQkJCQkJCWJy
ZWFrOwotCQkJCQkJfQotCQkJCQkJaWYgKHRvdGFsX2NvdW50ID4gU0NUUF9BRERSRVNTX0xJTUlU
KSB7Ci0JCQkJCQkJLyogTm8gbW9yZSBhZGRyZXNzZXMgKi8KLQkJCQkJCQlicmVhazsKLQkJCQkJ
CX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBzY3RwX2xh
ZGRyICpsYWRkcjsKLQotCQljbnQgPSBjbnRfaW5pdHNfdG87Ci0JCS8qIEZpcnN0LCBob3cgbWFu
eSA/ICovCi0JCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBf
bnh0X2FkZHIpIHsKLQkJCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCQljb250aW51ZTsK
LQkJCX0KLQkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVM
RVRFRCkKLQkJCQkvKiBBZGRyZXNzIGJlaW5nIGRlbGV0ZWQgYnkgdGhlIHN5c3RlbSwgZG9udAot
CQkJCSAqIGxpc3QuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQlpZiAobGFkZHItPmFjdGlv
biA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkJLyogQWRkcmVzcyBiZWluZyBkZWxldGVk
IG9uIHRoaXMgZXAKLQkJCQkgKiBkb24ndCBsaXN0LgotCQkJCSAqLwotCQkJCWNvbnRpbnVlOwot
CQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChsYWRkci0+aWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0jZW5k
aWYKLQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUobGFkZHItPmlmYSwKLQkJCQkJCSAg
ICAgc2NvcGUsIDEpID09IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWNudCsrOwotCQl9
Ci0JCS8qCi0JCSAqIFRvIGdldCB0aHJvdWdoIGEgTkFUIHdlIG9ubHkgbGlzdCBhZGRyZXNzZXMg
aWYgd2UgaGF2ZQotCQkgKiBtb3JlIHRoYW4gb25lLiBUaGF0IHdheSBpZiB5b3UganVzdCBiaW5k
IGEgc2luZ2xlIGFkZHJlc3MKLQkJICogd2UgbGV0IHRoZSBzb3VyY2Ugb2YgdGhlIGluaXQgZGlj
dGF0ZSBvdXIgYWRkcmVzcy4KLQkJICovCi0JCWlmIChjbnQgPiAxKSB7Ci0JCQljbnQgPSBjbnRf
aW5pdHNfdG87Ci0JCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBz
Y3RwX254dF9hZGRyKSB7Ci0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJCQljb250
aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9C
RUlOR19ERUxFVEVEKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0JCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFG
X0NPTk4pIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0JCQkJaWYgKHNjdHBfaXNf
YWRkcmVzc19pbl9zY29wZShsYWRkci0+aWZhLAotCQkJCQkJCSAgICAgc2NvcGUsIDApID09IDAp
IHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWlmICgoY2h1bmtfbGVuICE9IE5VTEwpICYm
Ci0JCQkJICAgIChwYWRkaW5nX2xlbiAhPSBOVUxMKSAmJgotCQkJCSAgICAoKnBhZGRpbmdfbGVu
ID4gMCkpIHsKLQkJCQkJbWVtc2V0KG10b2QobV9hdCwgY2FkZHJfdCkgKyAqY2h1bmtfbGVuLCAw
LCAqcGFkZGluZ19sZW4pOwotCQkJCQlTQ1RQX0JVRl9MRU4obV9hdCkgKz0gKnBhZGRpbmdfbGVu
OwotCQkJCQkqY2h1bmtfbGVuICs9ICpwYWRkaW5nX2xlbjsKLQkJCQkJKnBhZGRpbmdfbGVuID0g
MDsKLQkJCQl9Ci0JCQkJbV9hdCA9IHNjdHBfYWRkX2FkZHJfdG9fbWJ1ZihtX2F0LCBsYWRkci0+
aWZhLCBjaHVua19sZW4pOwotCQkJCWNudCsrOwotCQkJCWlmIChjbnQgPj0gU0NUUF9BRERSRVNT
X0xJTUlUKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlTQ1RQX0lQSV9B
RERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKG1fYXQpOwotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBf
aWZhICoKLXNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKHN0cnVjdCBzY3RwX2lmYSAqaWZhLAot
CQkJICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCi0JCQkgICB1aW50OF90IGRlc3RfaXNfcHJpdiwK
LQkJCSAgIHNhX2ZhbWlseV90IGZhbSkKLXsKLQl1aW50OF90IGRlc3RfaXNfZ2xvYmFsID0gMDsK
LQkvKiBkZXN0X2lzX3ByaXYgaXMgdHJ1ZSBpZiBkZXN0aW5hdGlvbiBpcyBhIHByaXZhdGUgYWRk
cmVzcyAqLwotCS8qIGRlc3RfaXNfbG9vcCBpcyB0cnVlIGlmIGRlc3RpbmF0aW9uIGlzIGEgbG9v
cGJhY2sgYWRkcmVzc2VzICovCi0KLQkvKioKLQkgKiBIZXJlIHdlIGRldGVybWluZSBpZiBpdHMg
YSBwcmVmZXJyZWQgYWRkcmVzcy4gQSBwcmVmZXJyZWQgYWRkcmVzcwotCSAqIG1lYW5zIGl0IGlz
IHRoZSBzYW1lIHNjb3BlIG9yIGhpZ2hlciBzY29wZSB0aGVuIHRoZSBkZXN0aW5hdGlvbi4KLQkg
KiBMID0gbG9vcGJhY2ssIFAgPSBwcml2YXRlLCBHID0gZ2xvYmFsCi0JICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICBzcmMgICAgfCAgZGVzdCB8IHJl
c3VsdAotCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICog
ICAgIEwgICAgIHwgICAgTCAgfCAgICB5ZXMKLQkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgUCAgICAgfCAgICBMICB8ICAgIHllcy12NCBuby12
NgotCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAg
ICBHICAgICB8ICAgIEwgIHwgICAgeWVzLXY0IG5vLXY2Ci0JICogIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICAgIEwgICAgIHwgICAgUCAgfCAgICBubwot
CSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgICBQ
ICAgICB8ICAgIFAgIHwgICAgeWVzCi0JICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0JICogICAgIEcgICAgIHwgICAgUCAgfCAgICBubwotCSAqICAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgTCAgICAgfCAgICBH
ICB8ICAgIG5vCi0JICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCSAqICAgICBQICAgICB8ICAgIEcgIHwgICAgbm8KLQkgKiAgICAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgICBHICAgICB8ICAgIEcgIHwgICAgeWVz
Ci0JICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKi8K
LQotCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ICE9IGZhbSkgewotCQkvKiBmb3JnZXQg
bWlzLW1hdGNoZWQgZmFtaWx5ICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmICgoZGVzdF9p
c19wcml2ID09IDApICYmIChkZXN0X2lzX2xvb3AgPT0gMCkpIHsKLQkJZGVzdF9pc19nbG9iYWwg
PSAxOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIklzIGRlc3RpbmF0aW9uIHBy
ZWZlcnJlZDoiKTsKLQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmaWZhLT5hZGRy
ZXNzLnNhKTsKLQkvKiBPayB0aGUgYWRkcmVzcyBtYXkgYmUgb2sgKi8KLSNpZmRlZiBJTkVUNgot
CWlmIChmYW0gPT0gQUZfSU5FVDYpIHsKLQkJLyogb2sgdG8gdXNlIGRlcHJlY2F0ZWQgYWRkcmVz
c2VzPyBubyBsZXRzIG5vdCEgKi8KLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FE
RFJfSUZBX1VOVVNFQUJMRSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJOTzox
XG4iKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKGlmYS0+c3JjX2lzX3ByaXYgJiYg
IWlmYS0+c3JjX2lzX2xvb3ApIHsKLQkJCWlmIChkZXN0X2lzX2xvb3ApIHsKLQkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjJcbiIpOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9
Ci0JCX0KLQkJaWYgKGlmYS0+c3JjX2lzX2dsb2IpIHsKLQkJCWlmIChkZXN0X2lzX2xvb3ApIHsK
LQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjNcbiIpOwotCQkJCXJldHVybiAo
TlVMTCk7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiBOb3cgdGhhdCB3ZSBrbm93IHdoYXQg
aXMgd2hhdCwgaW1wbGVtZW50IG9yIHRhYmxlCi0JICogdGhpcyBjb3VsZCBpbiB0aGVvcnkgYmUg
ZG9uZSBzbGlja2VyIChpdCB1c2VkIHRvIGJlKSwgYnV0IHRoaXMKLQkgKiBpcyBzdHJhaWdodGZv
cndhcmQgYW5kIGVhc2llciB0byB2YWxpZGF0ZSA6LSkKLQkgKi8KLQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMywgInNyY19sb29wOiVkIHNyY19wcml2OiVkIHNyY19nbG9iOiVkXG4iLAotCQlp
ZmEtPnNyY19pc19sb29wLCBpZmEtPnNyY19pc19wcml2LCBpZmEtPnNyY19pc19nbG9iKTsKLQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImRlc3RfbG9vcDolZCBkZXN0X3ByaXY6JWQgZGVz
dF9nbG9iOiVkXG4iLAotCQlkZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJpdiwgZGVzdF9pc19nbG9i
YWwpOwotCi0JaWYgKChpZmEtPnNyY19pc19sb29wKSAmJiAoZGVzdF9pc19wcml2KSkgewotCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjRcbiIpOwotCQlyZXR1cm4gKE5VTEwpOwot
CX0KLQlpZiAoKGlmYS0+c3JjX2lzX2dsb2IpICYmIChkZXN0X2lzX3ByaXYpKSB7Ci0JCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86NVxuIik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQot
CWlmICgoaWZhLT5zcmNfaXNfbG9vcCkgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgewotCQlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjZcbiIpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlp
ZiAoKGlmYS0+c3JjX2lzX3ByaXYpICYmIChkZXN0X2lzX2dsb2JhbCkpIHsKLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDMsICJOTzo3XG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJZRVNcbiIpOwotCS8qIGl0cyBhIHByZWZlcnJlZCBh
ZGRyZXNzICovCi0JcmV0dXJuIChpZmEpOwotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBfaWZhICoK
LXNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSwKLQkJCSAg
ICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCSAgICB1aW50OF90IGRlc3RfaXNfcHJpdiwKLQkJ
CSAgICBzYV9mYW1pbHlfdCBmYW0pCi17Ci0JdWludDhfdCBkZXN0X2lzX2dsb2JhbCA9IDA7Ci0K
LQkvKioKLQkgKiBIZXJlIHdlIGRldGVybWluZSBpZiBpdHMgYSBhY2NlcHRhYmxlIGFkZHJlc3Mu
IEEgYWNjZXB0YWJsZQotCSAqIGFkZHJlc3MgbWVhbnMgaXQgaXMgdGhlIHNhbWUgc2NvcGUgb3Ig
aGlnaGVyIHNjb3BlIGJ1dCB3ZSBjYW4KLQkgKiBhbGxvdyBmb3IgTkFUIHdoaWNoIG1lYW5zIGl0
cyBvayB0byBoYXZlIGEgZ2xvYmFsIGRlc3QgYW5kIGEKLQkgKiBwcml2YXRlIHNyYy4KLQkgKgot
CSAqIEwgPSBsb29wYmFjaywgUCA9IHByaXZhdGUsIEcgPSBnbG9iYWwKLQkgKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICBzcmMgICAgfCAgZGVzdCB8IHJl
c3VsdAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICog
ICBMICAgICB8ICAgTCAgIHwgICAgeWVzCi0JICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0JICogICBQICAgICB8ICAgTCAgIHwgICAgeWVzLXY0IG5vLXY2Ci0J
ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICBHICAg
ICB8ICAgTCAgIHwgICAgeWVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQkgKiAgIEwgICAgIHwgICBQICAgfCAgICBubwotCSAqIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICBQICAgICB8ICAgUCAgIHwgICAgeWVz
Ci0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIEcg
ICAgIHwgICBQICAgfCAgICB5ZXMgLSBNYXkgbm90IHdvcmsKLQkgKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgTCAgICAgfCAgIEcgICB8ICAgIG5vCi0J
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIFAgICAg
IHwgICBHICAgfCAgICB5ZXMgLSBNYXkgbm90IHdvcmsKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgRyAgICAgfCAgIEcgICB8ICAgIHllcwotCSAq
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICovCi0KLQlpZiAo
aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSAhPSBmYW0pIHsKLQkJLyogZm9yZ2V0IG5vbiBtYXRj
aGluZyBmYW1pbHkgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJpZmFfZmFtOiVk
IGZhbTolZFxuIiwKLQkJCWlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHksIGZhbSk7Ci0JCXJldHVy
biAoTlVMTCk7Ci0JfQotCS8qIE9rIHRoZSBhZGRyZXNzIG1heSBiZSBvayAqLwotCVNDVFBEQkdf
QUREUihTQ1RQX0RFQlVHX09VVFBVVDMsICZpZmEtPmFkZHJlc3Muc2EpOwotCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQzLCAiZHN0X2lzX2xvb3A6JWQgZGVzdF9pc19wcml2OiVkXG4iLAotCQlk
ZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJpdik7Ci0JaWYgKChkZXN0X2lzX2xvb3AgPT0gMCkgJiYg
KGRlc3RfaXNfcHJpdiA9PSAwKSkgewotCQlkZXN0X2lzX2dsb2JhbCA9IDE7Ci0JfQotI2lmZGVm
IElORVQ2Ci0JaWYgKGZhbSA9PSBBRl9JTkVUNikgewotCQkvKiBvayB0byB1c2UgZGVwcmVjYXRl
ZCBhZGRyZXNzZXM/ICovCi0JCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0lG
QV9VTlVTRUFCTEUpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKGlmYS0+c3JjX2lz
X3ByaXYpIHsKLQkJCS8qIFNwZWNpYWwgY2FzZSwgbGlua2xvY2FsIHRvIGxvb3AgKi8KLQkJCWlm
IChkZXN0X2lzX2xvb3ApCi0JCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCX0KLSNlbmRpZgotCS8q
Ci0JICogTm93IHRoYXQgd2Uga25vdyB3aGF0IGlzIHdoYXQsIGltcGxlbWVudCBvdXIgdGFibGUu
Ci0JICogVGhpcyBjb3VsZCBpbiB0aGVvcnkgYmUgZG9uZSBzbGlja2VyIChpdCB1c2VkIHRvIGJl
KSwgYnV0IHRoaXMKLQkgKiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGVhc2llciB0byB2YWxpZGF0
ZSA6LSkKLQkgKi8KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImlmYS0+c3JjX2lzX2xv
b3A6JWQgZGVzdF9pc19wcml2OiVkXG4iLAotCQlpZmEtPnNyY19pc19sb29wLAotCQlkZXN0X2lz
X3ByaXYpOwotCWlmICgoaWZhLT5zcmNfaXNfbG9vcCA9PSAxKSAmJiAoZGVzdF9pc19wcml2KSkg
ewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImlm
YS0+c3JjX2lzX2xvb3A6JWQgZGVzdF9pc19nbG9iOiVkXG4iLAotCQlpZmEtPnNyY19pc19sb29w
LAotCQlkZXN0X2lzX2dsb2JhbCk7Ci0JaWYgKChpZmEtPnNyY19pc19sb29wID09IDEpICYmIChk
ZXN0X2lzX2dsb2JhbCkpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDMsICJhZGRyZXNzIGlzIGFjY2VwdGFibGVcbiIpOwotCS8qIGl0cyBhbiBhY2Nl
cHRhYmxlIGFkZHJlc3MgKi8KLQlyZXR1cm4gKGlmYSk7Ci19Ci0KLWludAotc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkK
LXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0J
CS8qIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMsIG5vIFRDQiA6LSkgKi8KLQkJcmV0dXJuICgw
KTsKLQl9Ci0JTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+YXNvYy5zY3RwX3Jlc3RyaWN0ZWRf
YWRkcnMsIHNjdHBfbnh0X2FkZHIpIHsKLQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICIlczogTlVMTCBpZmFcbiIsCi0JCQkJX19mdW5j
X18pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQkv
KiBZZXMgaXQgaXMgb24gdGhlIGxpc3QgKi8KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0JcmV0
dXJuICgwKTsKLX0KLQotCi1pbnQKLXNjdHBfaXNfYWRkcl9pbl9lcChzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFk
ZHI7Ci0KLQlpZiAoaWZhID09IE5VTEwpCi0JCXJldHVybiAoMCk7Ci0JTElTVF9GT1JFQUNIKGxh
ZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQlpZiAobGFkZHIt
PmlmYSA9PSBOVUxMKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIiVzOiBOVUxM
IGlmYVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGxhZGRy
LT5pZmEgPT0gaWZhKSAmJiBsYWRkci0+YWN0aW9uID09IDApCi0JCQkvKiBzYW1lIHBvaW50ZXIg
Ki8KLQkJCXJldHVybiAoMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLQotCi1zdGF0aWMgc3Ry
dWN0IHNjdHBfaWZhICoKLXNjdHBfY2hvb3NlX2JvdW5kc3BlY2lmaWNfaW5wKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCi0JCQkgICAgICBzY3RwX3JvdXRlX3QgKnJvLAotCQkJICAgICAgdWludDMy
X3QgdnJmX2lkLAotCQkJICAgICAgaW50IG5vbl9hc29jX2FkZHJfb2ssCi0JCQkgICAgICB1aW50
OF90IGRlc3RfaXNfcHJpdiwKLQkJCSAgICAgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAotCQkJICAg
ICAgc2FfZmFtaWx5X3QgZmFtKQotewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkciwgKnN0YXJ0
aW5nX3BvaW50OwotCXZvaWQgKmlmbjsKLQlpbnQgcmVzZXR0b3RvcCA9IDA7Ci0Jc3RydWN0IHNj
dHBfaWZuICpzY3RwX2lmbjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lmYTsKLQlz
dHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQl1aW50MzJfdCBpZm5faW5kZXg7Ci0KLQl2cmYgPSBzY3Rw
X2ZpbmRfdnJmKHZyZl9pZCk7Ci0JaWYgKHZyZiA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwot
Ci0JaWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7Ci0JaWZuX2luZGV4ID0g
U0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7Ci0Jc2N0cF9pZm4gPSBzY3RwX2ZpbmRf
aWZuKGlmbiwgaWZuX2luZGV4KTsKLQkvKgotCSAqIGZpcnN0IHF1ZXN0aW9uLCBpcyB0aGUgaWZu
IHdlIHdpbGwgZW1pdCBvbiBpbiBvdXIgbGlzdCwgaWYgc28sIHdlCi0JICogd2FudCBzdWNoIGFu
IGFkZHJlc3MuIE5vdGUgdGhhdCB3ZSBmaXJzdCBsb29rZWQgZm9yIGEKLQkgKiBwcmVmZXJyZWQg
YWRkcmVzcy4KLQkgKi8KLQlpZiAoc2N0cF9pZm4pIHsKLQkJLyogaXMgYSBwcmVmZXJyZWQgb25l
IG9uIHRoZSBpbnRlcmZhY2Ugd2Ugcm91dGUgb3V0PyAqLwotCQlMSVNUX0ZPUkVBQ0goc2N0cF9p
ZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQotI2lmZGVmIElORVQKLQkJCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5
ID09IEFGX0lORVQpICYmCi0JCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5z
aW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0jZW5kaWYKLSNpZmRl
ZiBJTkVUNgotCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5F
VDYpICYmCi0JCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVk
LAotCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42LnNpbjZf
YWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgotI2VuZGlmCi0JCQlp
ZiAoKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCi0J
CQkgICAgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCi0JCQkJY29udGludWU7Ci0JCQlzaWZhID0g
c2N0cF9pc19pZmFfYWRkcl9wcmVmZXJyZWQoc2N0cF9pZmEsCi0JCQkJCQkJICBkZXN0X2lzX2xv
b3AsCi0JCQkJCQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JCQlpZiAoc2lmYSA9PSBOVUxMKQot
CQkJCWNvbnRpbnVlOwotCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChpbnAsIHNpZmEpKSB7Ci0J
CQkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQkJCQlyZXR1cm4gKHNpZmEp
OwotCQkJfQotCQl9Ci0JfQotCS8qCi0JICogb2ssIG5vdyB3ZSBub3cgbmVlZCB0byBmaW5kIG9u
ZSBvbiB0aGUgbGlzdCBvZiB0aGUgYWRkcmVzc2VzLgotCSAqIFdlIGNhbid0IGdldCBvbmUgb24g
dGhlIGVtaXR0aW5nIGludGVyZmFjZSBzbyBsZXQncyBmaW5kIGZpcnN0Ci0JICogYSBwcmVmZXJy
ZWQgb25lLiBJZiBub3QgdGhhdCBhbiBhY2NlcHRhYmxlIG9uZSBvdGhlcndpc2UuLi4KLQkgKiB3
ZSByZXR1cm4gTlVMTC4KLQkgKi8KLQlzdGFydGluZ19wb2ludCA9IGlucC0+bmV4dF9hZGRyX3Rv
dXNlOwotIG9uY2VfYWdhaW46Ci0JaWYgKGlucC0+bmV4dF9hZGRyX3RvdXNlID09IE5VTEwpIHsK
LQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYWRkcl9saXN0
KTsKLQkJcmVzZXR0b3RvcCA9IDE7Ci0JfQotCWZvciAobGFkZHIgPSBpbnAtPm5leHRfYWRkcl90
b3VzZTsgbGFkZHI7Ci0JICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRkciwgc2N0cF9ueHRfYWRk
cikpIHsKLQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJLyogYWRkcmVzcyBoYXMgYmVl
biByZW1vdmVkICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGFkZHItPmFjdGlvbiA9PSBT
Q1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRlbGV0ZWQgKi8K
LQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChs
YWRkci0+aWZhLCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKLQkJ
aWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+
cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAocmVzZXR0b3RvcCA9PSAw
KSB7Ci0JCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gTlVMTDsKLQkJZ290byBvbmNlX2FnYWluOwot
CX0KLQotCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gc3RhcnRpbmdfcG9pbnQ7Ci0JcmVzZXR0b3Rv
cCA9IDA7Ci0gb25jZV9hZ2Fpbl90b286Ci0JaWYgKGlucC0+bmV4dF9hZGRyX3RvdXNlID09IE5V
TEwpIHsKLQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYWRk
cl9saXN0KTsKLQkJcmVzZXR0b3RvcCA9IDE7Ci0JfQotCi0JLyogb2ssIHdoYXQgYWJvdXQgYW4g
YWNjZXB0YWJsZSBhZGRyZXNzIGluIHRoZSBpbnAgKi8KLQlmb3IgKGxhZGRyID0gaW5wLT5uZXh0
X2FkZHJfdG91c2U7IGxhZGRyOwotCSAgICAgbGFkZHIgPSBMSVNUX05FWFQobGFkZHIsIHNjdHBf
bnh0X2FkZHIpKSB7Ci0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCS8qIGFkZHJlc3Mg
aGFzIGJlZW4gcmVtb3ZlZCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxhZGRyLT5hY3Rp
b24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgewotCQkJLyogYWRkcmVzcyBpcyBiZWluZyBkZWxl
dGVkICovCi0JCQljb250aW51ZTsKLQkJfQotCQlzaWZhID0gc2N0cF9pc19pZmFfYWRkcl9hY2Nl
cHRhYmxlKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwKLQkJCQkJCSAgIGRlc3RfaXNfcHJpdiwg
ZmFtKTsKLQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlhdG9taWNfYWRkX2lu
dCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAocmVzZXR0
b3RvcCA9PSAwKSB7Ci0JCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gTlVMTDsKLQkJZ290byBvbmNl
X2FnYWluX3RvbzsKLQl9Ci0KLQkvKgotCSAqIG5vIGFkZHJlc3MgYm91bmQgY2FuIGJlIGEgc291
cmNlIGZvciB0aGUgZGVzdGluYXRpb24gd2UgYXJlIGluCi0JICogdHJvdWJsZQotCSAqLwotCXJl
dHVybiAoTlVMTCk7Ci19Ci0KLQotCi1zdGF0aWMgc3RydWN0IHNjdHBfaWZhICoKLXNjdHBfY2hv
b3NlX2JvdW5kc3BlY2lmaWNfc3RjYihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkJICAgICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgICBzY3RwX3JvdXRlX3QgKnJvLAotCQkJ
ICAgICAgIHVpbnQzMl90IHZyZl9pZCwKLQkJCSAgICAgICB1aW50OF90IGRlc3RfaXNfcHJpdiwK
LQkJCSAgICAgICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCSAgICAgICBpbnQgbm9uX2Fzb2Nf
YWRkcl9vaywKLQkJCSAgICAgICBzYV9mYW1pbHlfdCBmYW0pCi17Ci0Jc3RydWN0IHNjdHBfbGFk
ZHIgKmxhZGRyLCAqc3RhcnRpbmdfcG9pbnQ7Ci0Jdm9pZCAqaWZuOwotCXN0cnVjdCBzY3RwX2lm
biAqc2N0cF9pZm47Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYSwgKnNpZmE7Ci0JdWludDhf
dCBzdGFydF9hdF9iZWdpbm5pbmcgPSAwOwotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXVpbnQz
Ml90IGlmbl9pbmRleDsKLQotCS8qCi0JICogZmlyc3QgcXVlc3Rpb24sIGlzIHRoZSBpZm4gd2Ug
d2lsbCBlbWl0IG9uIGluIG91ciBsaXN0LCBpZiBzbywgd2UKLQkgKiB3YW50IHRoYXQgb25lLgot
CSAqLwotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpCi0J
CXJldHVybiAoTlVMTCk7Ci0KLQlpZm4gPSBTQ1RQX0dFVF9JRk5fVk9JRF9GUk9NX1JPVVRFKHJv
KTsKLQlpZm5faW5kZXggPSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKTsKLQlzY3Rw
X2lmbiA9IHNjdHBfZmluZF9pZm4oIGlmbiwgaWZuX2luZGV4KTsKLQotCS8qCi0JICogZmlyc3Qg
cXVlc3Rpb24sIGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91ciBsaXN0PyAgSWYgc28s
Ci0JICogd2Ugd2FudCB0aGF0IG9uZS4gRmlyc3Qgd2UgbG9vayBmb3IgYSBwcmVmZXJyZWQuIFNl
Y29uZCwgd2UgZ28KLQkgKiBmb3IgYW4gYWNjZXB0YWJsZS4KLQkgKi8KLQlpZiAoc2N0cF9pZm4p
IHsKLQkJLyogZmlyc3QgdHJ5IGZvciBhIHByZWZlcnJlZCBhZGRyZXNzIG9uIHRoZSBlcCAqLwot
CQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmZGVmIElORVQKLQkJCWlmICgoc2N0cF9pZmEt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCi0JCQkgICAgKHByaXNvbl9jaGVj
a19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAg
ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQkJY29udGludWU7
Ci0JCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5w
LT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lm
YS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0K
LSNlbmRpZgotI2VuZGlmCi0JCQlpZiAoKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBf
QUREUl9ERUZFUl9VU0UpICYmIChub25fYXNvY19hZGRyX29rID09IDApKQotCQkJCWNvbnRpbnVl
OwotCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChpbnAsIHNjdHBfaWZhKSkgewotCQkJCXNpZmEg
PSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3RwX2lmYSwgZGVzdF9pc19sb29wLCBkZXN0
X2lzX3ByaXYsIGZhbSk7Ci0JCQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCQkJY29udGludWU7Ci0J
CQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgotCQkJCSAgICAgKHNjdHBfaXNfYWRk
cl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKLQkJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sg
JiYKLQkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKLQkJ
CQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgewotCQkJCQkvKiBv
biB0aGUgbm8tbm8gbGlzdCAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJYXRvbWljX2Fk
ZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQkJCQlyZXR1cm4gKHNpZmEpOwotCQkJfQotCQl9
Ci0JCS8qIG5leHQgdHJ5IGZvciBhbiBhY2NlcHRhYmxlIGFkZHJlc3Mgb24gdGhlIGVwICovCi0J
CUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJaWYgKChzY3RwX2lmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCSAgICAocHJpc29uX2NoZWNr
X2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAg
JnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsK
LQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAt
PmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZh
LT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQot
I2VuZGlmCi0jZW5kaWYKLQkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9B
RERSX0RFRkVSX1VTRSkgJiYgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCi0JCQkJY29udGludWU7
Ci0JCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2N0cF9pZmEpKSB7Ci0JCQkJc2lmYT0g
c2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLCBkZXN0X2lzX2xvb3AsIGRlc3Rf
aXNfcHJpdixmYW0pOwotCQkJCWlmIChzaWZhID09IE5VTEwpCi0JCQkJCWNvbnRpbnVlOwotCQkJ
CWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJCQkgICAgIChzY3RwX2lzX2FkZHJf
cmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8Ci0JCQkJICAgIChub25fYXNvY19hZGRyX29rICYm
Ci0JCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCi0JCQkJ
ICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKLQkJCQkJLyogb24g
dGhlIG5vLW5vIGxpc3QgKi8KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWF0b21pY19hZGRf
aW50KCZzaWZhLT5yZWZjb3VudCwgMSk7Ci0JCQkJcmV0dXJuIChzaWZhKTsKLQkJCX0KLQkJfQot
Ci0JfQotCS8qCi0JICogaWYgd2UgY2FuJ3QgZmluZCBvbmUgbGlrZSB0aGF0IHRoZW4gd2UgbXVz
dCBsb29rIGF0IGFsbAotCSAqIGFkZHJlc3NlcyBib3VuZCB0byBwaWNrIG9uZSBhdCBmaXJzdCBw
cmVmZXJhYmxlIHRoZW4KLQkgKiBzZWNvbmRseSBhY2NlcHRhYmxlLgotCSAqLwotCXN0YXJ0aW5n
X3BvaW50ID0gc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzczsKLSBzY3RwX2Zyb21fdGhlX3Rv
cDoKLQlpZiAoc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9PSBOVUxMKSB7Ci0JCXN0YXJ0
X2F0X2JlZ2lubmluZyA9IDE7Ci0JCXN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBMSVNU
X0ZJUlNUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKLQl9Ci0JLyogc2VhcmNoIGJlZ2lubmluZyB3
aXRoIHRoZSBsYXN0IHVzZWQgYWRkcmVzcyAqLwotCWZvciAobGFkZHIgPSBzdGNiLT5hc29jLmxh
c3RfdXNlZF9hZGRyZXNzOyBsYWRkcjsKLQkgICAgIGxhZGRyID0gTElTVF9ORVhUKGxhZGRyLCBz
Y3RwX254dF9hZGRyKSkgewotCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7Ci0JCQkvKiBhZGRy
ZXNzIGhhcyBiZWVuIHJlbW92ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChsYWRkci0+
YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKLQkJCS8qIGFkZHJlc3MgaXMgYmVpbmcg
ZGVsZXRlZCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJf
cHJlZmVycmVkKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwgZGVzdF9pc19wcml2LCBmYW0pOwot
CQlpZiAoc2lmYSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmICgoKG5vbl9hc29jX2FkZHJf
b2sgPT0gMCkgJiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkp
KSB8fAotCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jl
c3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCi0JCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhz
dGNiLCBzaWZhKSkpKSB7Ci0JCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAqLwotCQkJY29udGludWU7
Ci0JCX0KLQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IGxhZGRyOwotCQlhdG9taWNf
YWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAo
c3RhcnRfYXRfYmVnaW5uaW5nID09IDApIHsKLQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVz
cyA9IE5VTEw7Ci0JCWdvdG8gc2N0cF9mcm9tX3RoZV90b3A7Ci0JfQotCS8qIG5vdyB0cnkgZm9y
IGFueSBoaWdoZXIgc2NvcGUgdGhhbiB0aGUgZGVzdGluYXRpb24gKi8KLQlzdGNiLT5hc29jLmxh
c3RfdXNlZF9hZGRyZXNzID0gc3RhcnRpbmdfcG9pbnQ7Ci0Jc3RhcnRfYXRfYmVnaW5uaW5nID0g
MDsKLSBzY3RwX2Zyb21fdGhlX3RvcDI6Ci0JaWYgKHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJl
c3MgPT0gTlVMTCkgewotCQlzdGFydF9hdF9iZWdpbm5pbmcgPSAxOwotCQlzdGNiLT5hc29jLmxh
c3RfdXNlZF9hZGRyZXNzID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2FkZHJfbGlzdCk7Ci0JfQot
CS8qIHNlYXJjaCBiZWdpbm5pbmcgd2l0aCB0aGUgbGFzdCB1c2VkIGFkZHJlc3MgKi8KLQlmb3Ig
KGxhZGRyID0gc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzczsgbGFkZHI7Ci0JICAgICBsYWRk
ciA9IExJU1RfTkVYVChsYWRkciwgc2N0cF9ueHRfYWRkcikpIHsKLQkJaWYgKGxhZGRyLT5pZmEg
PT0gTlVMTCkgewotCQkJLyogYWRkcmVzcyBoYXMgYmVlbiByZW1vdmVkICovCi0JCQljb250aW51
ZTsKLQkJfQotCQlpZiAobGFkZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0J
CQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRlbGV0ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNp
ZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFibGUobGFkZHItPmlmYSwgZGVzdF9pc19sb29w
LAotCQkJCQkJICAgZGVzdF9pc19wcml2LCBmYW0pOwotCQlpZiAoc2lmYSA9PSBOVUxMKQotCQkJ
Y29udGludWU7Ci0JCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJICAgICAoc2N0
cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAotCQkgICAgKG5vbl9hc29jX2Fk
ZHJfb2sgJiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYm
Ci0JCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7Ci0JCQkvKiBv
biB0aGUgbm8tbm8gbGlzdCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJc3RjYi0+YXNvYy5sYXN0
X3VzZWRfYWRkcmVzcyA9IGxhZGRyOwotCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQs
IDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAoc3RhcnRfYXRfYmVnaW5uaW5nID09IDAp
IHsKLQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IE5VTEw7Ci0JCWdvdG8gc2N0cF9m
cm9tX3RoZV90b3AyOwotCX0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgc3RydWN0IHNj
dHBfaWZhICoKLXNjdHBfc2VsZWN0X250aF9wcmVmZXJyZWRfYWRkcl9mcm9tX2lmbl9ib3VuZGFs
bChzdHJ1Y3Qgc2N0cF9pZm4gKmlmbiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAgU0NUUF9VTlVTRUQsCi0jZW5kaWYKLQkJ
CQkJCSBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJCQkgaW50IG5vbl9hc29jX2FkZHJfb2ss
Ci0JCQkJCQkgdWludDhfdCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgdWludDhfdCBkZXN0X2lzX3By
aXYsCi0JCQkJCQkgaW50IGFkZHJfd2FudGVkLAotCQkJCQkJIHNhX2ZhbWlseV90IGZhbSwKLQkJ
CQkJCSBzY3RwX3JvdXRlX3QgKnJvCi0JCQkJCQkgKQotewotCXN0cnVjdCBzY3RwX2lmYSAqaWZh
LCAqc2lmYTsKLQlpbnQgbnVtX2VsaWdpYmxlX2FkZHIgPSAwOwotI2lmZGVmIElORVQ2Ci0jaWZk
ZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNiwgbHNh
NjsKLQotCWlmIChmYW0gPT0gQUZfSU5FVDYpIHsKLQkJbWVtY3B5KCZzaW42LCAmcm8tPnJvX2Rz
dCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJKHZv
aWQpc2E2X3JlY292ZXJzY29wZSgmc2luNik7Ci0jZWxzZQotCQkodm9pZClpbjZfcmVjb3ZlcnNj
b3BlKCZzaW42LCAmc2luNi5zaW42X2FkZHIsIE5VTEwpOwotI2VuZGlmICAvKiBTQ1RQX0tBTUUg
Ki8KLQl9Ci0jZW5kaWYgIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLSNlbmRpZgkvKiBJ
TkVUNiAqLwotCUxJU1RfRk9SRUFDSChpZmEsICZpZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZmRlZiBJTkVUCi0JCWlmICgoaWZhLT5hZGRyZXNz
LnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5w
LT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRk
cmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJaWYgKChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2
KSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAot
CQkgICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0g
MCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQlpZiAoKGlmYS0+bG9j
YWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkgICAgKG5vbl9hc29jX2Fk
ZHJfb2sgPT0gMCkpCi0JCQljb250aW51ZTsKLQkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJl
ZmVycmVkKGlmYSwgZGVzdF9pc19sb29wLAotCQkJCQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0J
CWlmIChzaWZhID09IE5VTEwpCi0JCQljb250aW51ZTsKLSNpZmRlZiBJTkVUNgotCQlpZiAoZmFt
ID09IEFGX0lORVQ2ICYmCi0JCSAgICBkZXN0X2lzX2xvb3AgJiYKLQkJICAgIHNpZmEtPnNyY19p
c19sb29wICYmIHNpZmEtPnNyY19pc19wcml2KSB7Ci0JCQkvKiBkb24ndCBhbGxvdyBmZTgwOjox
IHRvIGJlIGEgc3JjIG9uIGxvb3AgOjoxLCB3ZSBkb24ndCBsaXN0IGl0Ci0JCQkgKiB0byB0aGUg
cGVlciBzbyB3ZSB3aWxsIGdldCBhbiBhYm9ydC4KLQkJCSAqLwotCQkJY29udGludWU7Ci0JCX0K
LSNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCi0JCWlmIChmYW0gPT0gQUZfSU5FVDYgJiYK
LQkJICAgIElONl9JU19BRERSX0xJTktMT0NBTCgmc2lmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRk
cikgJiYKLQkJICAgIElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi5zaW42X2FkZHIpKSB7Ci0J
CQkvKiBsaW5rLWxvY2FsIDwtPiBsaW5rLWxvY2FsIG11c3QgYmVsb25nIHRvIHRoZSBzYW1lIHNj
b3BlLiAqLwotCQkJbWVtY3B5KCZsc2E2LCAmc2lmYS0+YWRkcmVzcy5zaW42LCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNikpOwotI2lmZGVmIFNDVFBfS0FNRQotCQkJKHZvaWQpc2E2X3JlY292
ZXJzY29wZSgmbHNhNik7Ci0jZWxzZQotCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZSgmbHNhNiwg
JmxzYTYuc2luNl9hZGRyLCBOVUxMKTsKLSNlbmRpZiAgLyogU0NUUF9LQU1FICovCi0JCQlpZiAo
c2luNi5zaW42X3Njb3BlX2lkICE9IGxzYTYuc2luNl9zY29wZV9pZCkgewotCQkJCWNvbnRpbnVl
OwotCQkJfQotCQl9Ci0jZW5kaWYgIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLSNlbmRp
ZgkvKiBJTkVUNiAqLwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJLyogQ2hlY2sgaWYgdGhlIElQdjYg
YWRkcmVzcyBtYXRjaGVzIHRvIG5leHQtaG9wLgotCQkgICBJbiB0aGUgbW9iaWxlIGNhc2UsIG9s
ZCBJUHY2IGFkZHJlc3MgbWF5IGJlIG5vdCBkZWxldGVkCi0JCSAgIGZyb20gdGhlIGludGVyZmFj
ZS4gVGhlbiwgdGhlIGludGVyZmFjZSBoYXMgcHJldmlvdXMgYW5kCi0JCSAgIG5ldyBhZGRyZXNz
ZXMuICBXZSBzaG91bGQgdXNlIG9uZSBjb3JyZXNwb25kaW5nIHRvIHRoZQotCQkgICBuZXh0LWhv
cC4gIChieSBtaWNjaGllKQotCQkgKi8KLSNpZmRlZiBJTkVUNgotCQlpZiAoc3RjYiAmJiBmYW0g
PT0gQUZfSU5FVDYgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5z
Y3RwX2VwLCBTQ1RQX01PQklMSVRZX0JBU0UpKSB7Ci0JCQlpZiAoc2N0cF92NnNyY19tYXRjaF9u
ZXh0aG9wKCZzaWZhLT5hZGRyZXNzLnNpbjYsIHJvKQotCQkJICAgID09IDApIHsKLQkJCQljb250
aW51ZTsKLQkJCX0KLQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQkvKiBBdm9pZCB0b3BvbG9n
aWNhbGx5IGluY29ycmVjdCBJUHY0IGFkZHJlc3MgKi8KLQkJaWYgKHN0Y2IgJiYgZmFtID09IEFG
X0lORVQgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2Vw
LCBTQ1RQX01PQklMSVRZX0JBU0UpKSB7Ci0JCQlpZiAoc2N0cF92NHNyY19tYXRjaF9uZXh0aG9w
KHNpZmEsIHJvKSA9PSAwKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotI2Vu
ZGlmCi0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGlmYSwg
JnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlm
ICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKLQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgotCQkJ
ICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCi0JCQkgICAgICgh
c2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgewotCQkJCS8qCi0JCQkJICogSXQg
aXMgcmVzdHJpY3RlZCBmb3Igc29tZSByZWFzb24uLgotCQkJCSAqIHByb2JhYmx5IG5vdCB5ZXQg
YWRkZWQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0KLQkJaWYgKG51bV9lbGln
aWJsZV9hZGRyID49IGFkZHJfd2FudGVkKSB7Ci0JCQlyZXR1cm4gKHNpZmEpOwotCQl9Ci0JCW51
bV9lbGlnaWJsZV9hZGRyKys7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotc3RhdGljIGlu
dAotc2N0cF9jb3VudF9udW1fcHJlZmVycmVkX2JvdW5kYWxsKHN0cnVjdCBzY3RwX2lmbiAqaWZu
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSNlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCBTQ1RQX1VOVVNFRCwKLSNlbmRp
ZgotCQkJCSAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJCSAgaW50IG5vbl9hc29jX2FkZHJf
b2ssCi0JCQkJICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCQkgIHVpbnQ4X3QgZGVzdF9pc19w
cml2LAotCQkJCSAgc2FfZmFtaWx5X3QgZmFtKQotewotCXN0cnVjdCBzY3RwX2lmYSAqaWZhLCAq
c2lmYTsKLQlpbnQgbnVtX2VsaWdpYmxlX2FkZHIgPSAwOwotCi0JTElTVF9GT1JFQUNIKGlmYSwg
Jmlmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lm
ZGVmIElORVQKLQkJaWYgKChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYm
Ci0JCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsK
LQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlpZiAoKGlmYS0+YWRk
cmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCSAgICAoc3RjYiAhPSBOVUxMKSAm
JgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkp
IHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQlpZiAoKGlmYS0+bG9jYWxp
ZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkgICAgKG5vbl9hc29jX2FkZHJf
b2sgPT0gMCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRy
X3ByZWZlcnJlZChpZmEsIGRlc3RfaXNfbG9vcCwKLQkJCQkJCSAgZGVzdF9pc19wcml2LCBmYW0p
OwotCQlpZiAoc2lmYSA9PSBOVUxMKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RjYikg
ewotCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShpZmEsICZzdGNiLT5hc29jLnNjb3Bl
LCAwKSA9PSAwKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoKChub25fYXNvY19hZGRy
X29rID09IDApICYmCi0JCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZh
KSkpIHx8Ci0JCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKLQkJCSAgICAgKHNjdHBfaXNfYWRk
cl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgotCQkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5k
aW5nKHN0Y2IsIHNpZmEpKSkpIHsKLQkJCQkvKgotCQkJCSAqIEl0IGlzIHJlc3RyaWN0ZWQgZm9y
IHNvbWUgcmVhc29uLi4KLQkJCQkgKiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgotCQkJCSAqLwot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCW51bV9lbGlnaWJsZV9hZGRyKys7Ci0JfQotCXJl
dHVybiAobnVtX2VsaWdpYmxlX2FkZHIpOwotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBfaWZhICoK
LXNjdHBfY2hvb3NlX2JvdW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSAgICAgc3RydWN0IHNjdHBfbmV0
cyAqbmV0LAotCQkgICAgIHNjdHBfcm91dGVfdCAqcm8sCi0JCSAgICAgdWludDMyX3QgdnJmX2lk
LAotCQkgICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAotCQkgICAgIHVpbnQ4X3QgZGVzdF9pc19s
b29wLAotCQkgICAgIGludCBub25fYXNvY19hZGRyX29rLAotCQkgICAgIHNhX2ZhbWlseV90IGZh
bSkKLXsKLQlpbnQgY3VyX2FkZHJfbnVtID0gMCwgbnVtX3ByZWZlcnJlZCA9IDA7Ci0Jdm9pZCAq
aWZuOwotCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm4sICpsb29rZWRfYXQgPSBOVUxMLCAqZW1p
dF9pZm47Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYSwgKnNpZmE7Ci0JdWludDMyX3QgaWZu
X2luZGV4OwotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotI2lmZGVmIElORVQKLQlpbnQgcmV0cmll
ZCA9IDA7Ci0jZW5kaWYKLQotCS8qLQotCSAqIEZvciBib3VuZGFsbCB3ZSBjYW4gdXNlIGFueSBh
ZGRyZXNzIGluIHRoZSBhc3NvY2lhdGlvbi4KLQkgKiBJZiBub25fYXNvY19hZGRyX29rIGlzIHNl
dCB3ZSBjYW4gdXNlIGFueSBhZGRyZXNzIChhdCBsZWFzdCBpbgotCSAqIHRoZW9yeSkuIFNvIHdl
IGxvb2sgZm9yIHByZWZlcnJlZCBhZGRyZXNzZXMgZmlyc3QuIElmIHdlIGZpbmQgb25lLAotCSAq
IHdlIHVzZSBpdC4gT3RoZXJ3aXNlIHdlIG5leHQgdHJ5IHRvIGdldCBhbiBhZGRyZXNzIG9uIHRo
ZQotCSAqIGludGVyZmFjZSwgd2hpY2ggd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gKHVubGVzcyBu
b25fYXNvY19hZGRyX29rCi0JICogaXMgZmFsc2UgYW5kIHdlIGFyZSByb3V0ZWQgb3V0IHRoYXQg
d2F5KS4gSW4gdGhlc2UgY2FzZXMgd2hlcmUgd2UKLQkgKiBjYW4ndCB1c2UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGludGVyZmFjZSB3ZSBnbyB0aHJvdWdoIGFsbCB0aGUKLQkgKiBpZm4ncyBsb29raW5n
IGZvciBhbiBhZGRyZXNzIHdlIGNhbiB1c2UgYW5kIGZpbGwgdGhhdCBpbi4gUHVudGluZwotCSAq
IG1lYW5zIHdlIHNlbmQgYmFjayBhZGRyZXNzIDAsIHdoaWNoIHdpbGwgcHJvYmFibHkgY2F1c2Ug
cHJvYmxlbXMKLQkgKiBhY3R1YWxseSBzaW5jZSB0aGVuIElQIHdpbGwgZmlsbCBpbiB0aGUgYWRk
cmVzcyBvZiB0aGUgcm91dGUgaWZuLAotCSAqIHdoaWNoIG1lYW5zIHdlIHByb2JhYmx5IGFscmVh
ZHkgcmVqZWN0ZWQgaXQuLiBpLmUuIGhlcmUgY29tZXMgYW4KLQkgKiBhYm9ydCA6LTwuCi0JICov
Ci0JdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkKLQkJcmV0
dXJuIChOVUxMKTsKLQotCWlmbiA9IFNDVFBfR0VUX0lGTl9WT0lEX0ZST01fUk9VVEUocm8pOwot
CWlmbl9pbmRleCA9IFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUocm8pOwotCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQyLCJpZm4gZnJvbSByb3V0ZTolcCBpZm5faW5kZXg6JWRcbiIsIGlm
biwgaWZuX2luZGV4KTsKLQllbWl0X2lmbiA9IGxvb2tlZF9hdCA9IHNjdHBfaWZuID0gc2N0cF9m
aW5kX2lmbihpZm4sIGlmbl9pbmRleCk7Ci0JaWYgKHNjdHBfaWZuID09IE5VTEwpIHsKLQkJLyog
Pz8gV2UgZG9uJ3QgaGF2ZSB0aGlzIGd1eSA/PyAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMiwiTm8gaWZuIGVtaXQgaW50ZXJmYWNlP1xuIik7Ci0JCWdvdG8gYm91bmRfYWxsX3BsYW5f
YjsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsImlmbl9pbmRleDolZCBuYW1lOiVz
IGlzIGVtaXQgaW50ZXJmYWNlXG4iLAotCQlpZm5faW5kZXgsIHNjdHBfaWZuLT5pZm5fbmFtZSk7
Ci0KLQlpZiAobmV0KSB7Ci0JCWN1cl9hZGRyX251bSA9IG5ldC0+aW5keF9vZl9lbGlnaWJsZV9u
ZXh0X3RvX3VzZTsKLQl9Ci0JbnVtX3ByZWZlcnJlZCA9IHNjdHBfY291bnRfbnVtX3ByZWZlcnJl
ZF9ib3VuZGFsbChzY3RwX2lmbiwKLQkJCQkJCQkgIGlucCwgc3RjYiwKLQkJCQkJCQkgIG5vbl9h
c29jX2FkZHJfb2ssCi0JCQkJCQkJICBkZXN0X2lzX2xvb3AsCi0JCQkJCQkJICBkZXN0X2lzX3By
aXYsIGZhbSk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJGb3VuZCAlZCBwcmVmZXJy
ZWQgc291cmNlIGFkZHJlc3NlcyBmb3IgaW50Zjolc1xuIiwKLQkJbnVtX3ByZWZlcnJlZCwgc2N0
cF9pZm4tPmlmbl9uYW1lKTsKLQlpZiAobnVtX3ByZWZlcnJlZCA9PSAwKSB7Ci0JCS8qCi0JCSAq
IG5vIGVsaWdpYmxlIGFkZHJlc3Nlcywgd2UgbXVzdCB1c2Ugc29tZSBvdGhlciBpbnRlcmZhY2UK
LQkJICogYWRkcmVzcyBpZiB3ZSBjYW4gZmluZCBvbmUuCi0JCSAqLwotCQlnb3RvIGJvdW5kX2Fs
bF9wbGFuX2I7Ci0JfQotCS8qCi0JICogT2sgd2UgaGF2ZSBudW1fZWxpZ2libGVfYWRkciBzZXQg
d2l0aCBob3cgbWFueSB3ZSBjYW4gdXNlLCB0aGlzCi0JICogbWF5IHZhcnkgZnJvbSBjYWxsIHRv
IGNhbGwgZHVlIHRvIGFkZHJlc3NlcyBiZWluZyBkZXByZWNhdGVkCi0JICogZXRjLi4KLQkgKi8K
LQlpZiAoY3VyX2FkZHJfbnVtID49IG51bV9wcmVmZXJyZWQpIHsKLQkJY3VyX2FkZHJfbnVtID0g
MDsKLQl9Ci0JLyoKLQkgKiBzZWxlY3QgdGhlIG50aCBhZGRyZXNzIGZyb20gdGhlIGxpc3QgKHdo
ZXJlIGN1cl9hZGRyX251bSBpcyB0aGUKLQkgKiBudGgpIGFuZCAwIGlzIHRoZSBmaXJzdCBvbmUs
IDEgaXMgdGhlIHNlY29uZCBvbmUgZXRjLi4uCi0JICovCi0JU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDIsICJjdXJfYWRkcl9udW06JWRcbiIsIGN1cl9hZGRyX251bSk7Ci0KLQlzY3RwX2lmYSA9
IHNjdHBfc2VsZWN0X250aF9wcmVmZXJyZWRfYWRkcl9mcm9tX2lmbl9ib3VuZGFsbChzY3RwX2lm
biwgaW5wLCBzdGNiLCBub25fYXNvY19hZGRyX29rLCBkZXN0X2lzX2xvb3AsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRlc3RfaXNfcHJpdiwgY3VyX2FkZHJfbnVtLCBmYW0sIHJvKTsKLQotCS8qIGlmIHNjdHBfaWZh
IGlzIE5VTEwgc29tZXRoaW5nIGNoYW5nZWQ/PywgZmFsbCB0byBwbGFuIGIuICovCi0JaWYgKHNj
dHBfaWZhKSB7Ci0JCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYS0+cmVmY291bnQsIDEpOwotCQlp
ZiAobmV0KSB7Ci0JCQkvKiBzYXZlIG9mZiB3aGVyZSB0aGUgbmV4dCBvbmUgd2Ugd2lsbCB3YW50
ICovCi0JCQluZXQtPmluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2UgPSBjdXJfYWRkcl9udW0g
KyAxOwotCQl9Ci0JCXJldHVybiAoc2N0cF9pZmEpOwotCX0KLQkvKgotCSAqIHBsYW5fYjogTG9v
ayBhdCBhbGwgaW50ZXJmYWNlcyBhbmQgZmluZCBhIHByZWZlcnJlZCBhZGRyZXNzLiBJZgotCSAq
IG5vIHByZWZlcnJlZCBmYWxsIHRocm91Z2ggdG8gcGxhbl9jLgotCSAqLwotIGJvdW5kX2FsbF9w
bGFuX2I6Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJUcnlpbmcgUGxhbiBCXG4iKTsK
LQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiRXhhbWluZSBpbnRlcmZhY2UgJXNcbiIsCi0JCQlz
Y3RwX2lmbi0+aWZuX25hbWUpOwotCQlpZiAoZGVzdF9pc19sb29wID09IDAgJiYgU0NUUF9JRk5f
SVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7Ci0JCQkvKiB3cm9uZyBiYXNlIHNjb3BlICovCi0JCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInNraXBcbiIpOwotCQkJY29udGludWU7Ci0JCX0K
LQkJaWYgKChzY3RwX2lmbiA9PSBsb29rZWRfYXQpICYmIGxvb2tlZF9hdCkgewotCQkJLyogYWxy
ZWFkeSBsb29rZWQgYXQgdGhpcyBndXkgKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQy
LCAiYWxyZWFkeSBzZWVuXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCW51bV9wcmVmZXJyZWQg
PSBzY3RwX2NvdW50X251bV9wcmVmZXJyZWRfYm91bmRhbGwoc2N0cF9pZm4sIGlucCwgc3RjYiwg
bm9uX2Fzb2NfYWRkcl9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfbG9vcCwgZGVzdF9pc19wcml2LCBm
YW0pOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwKLQkJCSJGb3VuZCBpZm46JXAgJWQg
cHJlZmVycmVkIHNvdXJjZSBhZGRyZXNzZXNcbiIsCi0JCQlpZm4sIG51bV9wcmVmZXJyZWQpOwot
CQlpZiAobnVtX3ByZWZlcnJlZCA9PSAwKSB7Ci0JCQkvKiBOb25lIG9uIHRoaXMgaW50ZXJmYWNl
LiAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJObyBwcmVmZXJyZWQgLS0gc2tp
cHBpbmcgdG8gbmV4dFxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMiwKLQkJCSJudW0gcHJlZmVycmVkOiVkIG9uIGludGVyZmFjZTolcCBjdXJfYWRk
cl9udW06JWRcbiIsCi0JCQludW1fcHJlZmVycmVkLCAodm9pZCAqKXNjdHBfaWZuLCBjdXJfYWRk
cl9udW0pOwotCi0JCS8qCi0JCSAqIE9rIHdlIGhhdmUgbnVtX2VsaWdpYmxlX2FkZHIgc2V0IHdp
dGggaG93IG1hbnkgd2UgY2FuCi0JCSAqIHVzZSwgdGhpcyBtYXkgdmFyeSBmcm9tIGNhbGwgdG8g
Y2FsbCBkdWUgdG8gYWRkcmVzc2VzCi0JCSAqIGJlaW5nIGRlcHJlY2F0ZWQgZXRjLi4KLQkJICov
Ci0JCWlmIChjdXJfYWRkcl9udW0gPj0gbnVtX3ByZWZlcnJlZCkgewotCQkJY3VyX2FkZHJfbnVt
ID0gMDsKLQkJfQotCQlzaWZhID0gc2N0cF9zZWxlY3RfbnRoX3ByZWZlcnJlZF9hZGRyX2Zyb21f
aWZuX2JvdW5kYWxsKHNjdHBfaWZuLCBpbnAsIHN0Y2IsIG5vbl9hc29jX2FkZHJfb2ssIGRlc3Rf
aXNfbG9vcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgY3VyX2FkZHJfbnVtLCBmYW0s
IHJvKTsKLQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAobmV0KSB7Ci0J
CQluZXQtPmluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2UgPSBjdXJfYWRkcl9udW0gKyAxOwot
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJ3ZSBzZWxlY3RlZCAlZFxuIiwKLQkJCQlj
dXJfYWRkcl9udW0pOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJTb3VyY2U6Iik7
Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmc2lmYS0+YWRkcmVzcy5zYSk7
Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkRlc3Q6Iik7Ci0JCQlTQ1RQREJHX0FE
RFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmbmV0LT5yby5fbF9hZGRyLnNhKTsKLQkJfQotCQlhdG9t
aWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLSNp
ZmRlZiBJTkVUCi1hZ2Fpbl93aXRoX3ByaXZhdGVfYWRkcmVzc2VzX2FsbG93ZWQ6Ci0jZW5kaWYK
LQkvKiBwbGFuX2M6IGRvIHdlIGhhdmUgYW4gYWNjZXB0YWJsZSBhZGRyZXNzIG9uIHRoZSBlbWl0
IGludGVyZmFjZSAqLwotCXNpZmEgPSBOVUxMOwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQy
LCJUcnlpbmcgUGxhbiBDOiBmaW5kIGFjY2VwdGFibGUgb24gaW50ZXJmYWNlXG4iKTsKLQlpZiAo
ZW1pdF9pZm4gPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiSnVtcCB0
byBQbGFuIEQgLSBubyBlbWl0X2lmblxuIik7Ci0JCWdvdG8gcGxhbl9kOwotCX0KLQlMSVNUX0ZP
UkVBQ0goc2N0cF9pZmEsICZlbWl0X2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDIsICJpZmE6JXBcbiIsICh2b2lkICopc2N0cF9pZmEpOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQlpZiAoKHNjdHBfaWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDQo
aW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBf
aWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQyLCJKYWlsZWRcbiIpOwotCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2
KSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAot
CQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRy
KSAhPSAwKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIkphaWxlZFxuIik7Ci0J
CQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJaWYgKChzY3RwX2lmYS0+bG9jYWxp
ZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkgICAgKG5vbl9hc29jX2FkZHJf
b2sgPT0gMCkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJEZWZlclxuIik7Ci0J
CQljb250aW51ZTsKLQkJfQotCQlzaWZhID0gc2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHNj
dHBfaWZhLCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JCWlm
IChzaWZhID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSUZBIG5v
dCBhY2NlcHRhYmxlXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzdGNiKSB7Ci0JCQlp
ZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKHNpZmEsICZzdGNiLT5hc29jLnNjb3BlLCAwKSA9
PSAwKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJOT1QgaW4gc2NvcGVcbiIp
OwotCQkJCXNpZmEgPSBOVUxMOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCgobm9uX2Fz
b2NfYWRkcl9vayA9PSAwKSAmJgotCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3Rj
Yiwgc2lmYSkpKSB8fAotCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCi0JCQkgICAgIChzY3Rw
X2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKLQkJCSAgICAgKCFzY3RwX2lzX2Fk
ZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7Ci0JCQkJLyoKLQkJCQkgKiBJdCBpcyByZXN0cmlj
dGVkIGZvciBzb21lCi0JCQkJICogcmVhc29uLi4gcHJvYmFibHkgbm90IHlldCBhZGRlZC4KLQkJ
CQkgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkl0cyByZXN0cmljdGVkXG4i
KTsKLQkJCQlzaWZhID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCQlhdG9taWNf
YWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlnb3RvIG91dDsKLQl9Ci0gcGxhbl9kOgot
CS8qCi0JICogcGxhbl9kOiBXZSBhcmUgaW4gdHJvdWJsZS4gTm8gcHJlZmVycmVkIGFkZHJlc3Mg
b24gdGhlIGVtaXQKLQkgKiBpbnRlcmZhY2UuIEFuZCBub3QgZXZlbiBhIHByZWZlcnJlZCBhZGRy
ZXNzIG9uIGFsbCBpbnRlcmZhY2VzLgotCSAqIEdvIG91dCBhbmQgc2VlIGlmIHdlIGNhbiBmaW5k
IGFuIGFjY2VwdGFibGUgYWRkcmVzcyBzb21ld2hlcmUKLQkgKiBhbW9uZ3N0IGFsbCBpbnRlcmZh
Y2VzLgotCSAqLwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiVHJ5aW5nIFBsYW4gRCBs
b29rZWRfYXQgaXMgJXBcbiIsICh2b2lkICopbG9va2VkX2F0KTsKLQlMSVNUX0ZPUkVBQ0goc2N0
cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCWlmIChkZXN0X2lzX2xvb3AgPT0g
MCAmJiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKLQkJCS8qIHdyb25nIGJhc2Ug
c2NvcGUgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNj
dHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0j
aWZkZWYgSU5FVAotCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZf
SU5FVCkgJiYKLQkJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2Ny
ZWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5f
YWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYK
LQkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkg
ICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAh
PSAwKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJCWlmICgoc2N0
cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKLQkJCSAgICAo
bm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKLQkJCQljb250aW51ZTsKLQkJCXNpZmEgPSBzY3RwX2lz
X2lmYV9hZGRyX2FjY2VwdGFibGUoc2N0cF9pZmEsCi0JCQkJCQkJICAgZGVzdF9pc19sb29wLAot
CQkJCQkJCSAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKLQkJCWlmIChzaWZhID09IE5VTEwpCi0JCQkJ
Y29udGludWU7Ci0JCQlpZiAoc3RjYikgewotCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2Nv
cGUoc2lmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJCQkJc2lmYSA9IE5VTEw7
Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlpZiAoKChub25fYXNvY19hZGRyX29rID09IDAp
ICYmCi0JCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAot
CQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgotCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgotCQkJCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhz
dGNiLCBzaWZhKSkpKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEl0IGlzIHJlc3RyaWN0ZWQgZm9yIHNv
bWUKLQkJCQkJICogcmVhc29uLi4gcHJvYmFibHkgbm90IHlldCBhZGRlZC4KLQkJCQkJICovCi0J
CQkJCXNpZmEgPSBOVUxMOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlnb3RvIG91
dDsKLQkJfQotCX0KLSNpZmRlZiBJTkVUCi0JaWYgKHN0Y2IpIHsKLQkJaWYgKChyZXRyaWVkID09
IDApICYmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCkpIHsKLQkJCXN0
Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQlyZXRyaWVkID0gMTsKLQkJ
CWdvdG8gYWdhaW5fd2l0aF9wcml2YXRlX2FkZHJlc3Nlc19hbGxvd2VkOwotCQl9IGVsc2UgaWYg
KHJldHJpZWQgPT0gMSkgewotCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID0g
MDsKLQkJfQotCX0KLSNlbmRpZgotb3V0OgotI2lmZGVmIElORVQKLQlpZiAoc2lmYSkgewotCQlp
ZiAocmV0cmllZCA9PSAxKSB7Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxp
c3QsIG5leHRfaWZuKSB7Ci0JCQkJaWYgKGRlc3RfaXNfbG9vcCA9PSAwICYmIFNDVFBfSUZOX0lT
X0lGVF9MT09QKHNjdHBfaWZuKSkgewotCQkJCQkvKiB3cm9uZyBiYXNlIHNjb3BlICovCi0JCQkJ
CWNvbnRpbnVlOwotCQkJCX0KLQkJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+
aWZhbGlzdCwgbmV4dF9pZmEpIHsKLQkJCQkJc3RydWN0IHNjdHBfaWZhICp0bXBfc2lmYTsKLQot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJCQlpZiAoKHNjdHBfaWZh
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkJCQkgICAgKHByaXNvbl9j
aGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKLQkJCQkJCWNv
bnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCQlpZiAoKHNjdHBfaWZh
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJCQkJICAgIChwcmlzb25f
Y2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAgICAgICAg
ICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKLQkJCQkJ
CWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQkJCQlpZiAoKHNjdHBfaWZhLT5s
b2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCi0JCQkJCSAgICAobm9uX2Fz
b2NfYWRkcl9vayA9PSAwKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl0bXBfc2lmYSA9IHNjdHBf
aXNfaWZhX2FkZHJfYWNjZXB0YWJsZShzY3RwX2lmYSwKLQkJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19sb29wLAotCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JCQkJCWlmICh0bXBf
c2lmYSA9PSBOVUxMKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAodG1wX3Np
ZmEgPT0gc2lmYSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJaWYgKHN0Y2IpIHsK
LQkJCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUodG1wX3NpZmEsCi0JCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZzdGNiLT5hc29jLnNjb3BlLCAwKSA9PSAwKSB7Ci0J
CQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoKChub25fYXNvY19hZGRyX29rID09
IDApICYmCi0JCQkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCB0bXBfc2lm
YSkpKSB8fAotCQkJCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCi0JCQkJCQkgICAgIChzY3Rw
X2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCB0bXBfc2lmYSkpICYmCi0JCQkJCQkgICAgICghc2N0
cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgdG1wX3NpZmEpKSkpIHsKLQkJCQkJCQkvKgotCQkJCQkJ
CSAqIEl0IGlzIHJlc3RyaWN0ZWQgZm9yIHNvbWUKLQkJCQkJCQkgKiByZWFzb24uLiBwcm9iYWJs
eSBub3QgeWV0IGFkZGVkLgotCQkJCQkJCSAqLwotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQot
CQkJCQl9Ci0JCQkJCWlmICgodG1wX3NpZmEtPmFkZHJlc3Muc2luLnNpbl9mYW1pbHkgPT0gQUZf
SU5FVCkgJiYKLQkJCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJih0bXBfc2lmYS0+YWRk
cmVzcy5zaW4uc2luX2FkZHIpKSkpIHsKLQkJCQkJCXNjdHBfYWRkX2xvY2FsX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCB0bXBfc2lmYSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYXRvbWlj
X2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gKHNpZmEp
OwotfQotCi0KLQotLyogdGNiIG1heSBiZSBOVUxMICovCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0
cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLQkJCSAg
ICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgIHNjdHBfcm91dGVfdCAqcm8sCi0J
CQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0JCQkgICAgICBpbnQgbm9uX2Fzb2NfYWRk
cl9vaywgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2lmYSAqYW5zd2VyOwotCXVp
bnQ4X3QgZGVzdF9pc19wcml2LCBkZXN0X2lzX2xvb3A7Ci0Jc2FfZmFtaWx5X3QgZmFtOwotI2lm
ZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KSZyby0+cm9fZHN0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICp0bzYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+cm9fZHN0OwotI2VuZGlmCi0KLQkv
KioKLQkgKiBSdWxlczoKLQkgKiAtIEZpbmQgdGhlIHJvdXRlIGlmIG5lZWRlZCwgY2FjaGUgaWYg
SSBjYW4uCi0JICogLSBMb29rIGF0IGludGVyZmFjZSBhZGRyZXNzIGluIHJvdXRlLCBJcyBpdCBp
biB0aGUgYm91bmQgbGlzdC4gSWYgc28gd2UKLQkgKiAgIGhhdmUgdGhlIGJlc3Qgc291cmNlLgot
CSAqIC0gSWYgbm90IHdlIG11c3Qgcm90YXRlIGFtb25nc3QgdGhlIGFkZHJlc3Nlcy4KLQkgKgot
CSAqIENhdmV0cyBhbmQgaXNzdWVzCi0JICoKLQkgKiBEbyB3ZSBuZWVkIHRvIHBheSBhdHRlbnRp
b24gdG8gc2NvcGUuIFdlIGNhbiBoYXZlIGEgcHJpdmF0ZSBhZGRyZXNzCi0JICogb3IgYSBnbG9i
YWwgYWRkcmVzcyB3ZSBhcmUgc291cmNpbmcgb3Igc2VuZGluZyB0by4gU28gaWYgd2UgZHJhdwot
CSAqIGl0IG91dAotCSAqIHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enoKLQkgKiBGb3IgVjQKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgIHNvdXJjZSAgICAgKiAgICAgIGRlc3QgICogIHJl
c3VsdAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICog
PGE+ICBQcml2YXRlICAgICogICAgR2xvYmFsICAqICBOQVQKLQkgKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIDxiPiAgUHJpdmF0ZSAgICAqICAgIFByaXZh
dGUgKiAgTm8gcHJvYmxlbQotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0JICogPGM+ICBHbG9iYWwgICAgICogICAgUHJpdmF0ZSAqICBIdWgsIEhvdyB3aWxs
IHRoaXMgd29yaz8KLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotCSAqIDxkPiAgR2xvYmFsICAgICAqICAgIEdsb2JhbCAgKiAgTm8gUHJvYmxlbQotCSAqLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogenp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6egotCSAqIEZvciBWNgot
CSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICAgICBz
b3VyY2UgICAgICogICAgICBkZXN0ICAqICByZXN1bHQKLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIDxhPiAgTGlua2xvY2FsICAqICAgIEdsb2JhbCAg
KgotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogPGI+
ICBMaW5rbG9jYWwgICogTGlua2xvY2FsICAqICBObyBwcm9ibGVtCi0JICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiA8Yz4gIEdsb2JhbCAgICAgKiBMaW5r
bG9jYWwgICogIEh1aCwgSG93IHdpbGwgdGhpcyB3b3JrPwotCSAqIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogPGQ+ICBHbG9iYWwgICAgICogICAgR2xvYmFs
ICAqICBObyBQcm9ibGVtCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQkgKiB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6Ci0JICoKLQkgKiBBbmQgdGhlbiB3ZSBhZGQgdG8gdGhhdCB3aGF0IGhhcHBlbnMg
aWYgdGhlcmUgYXJlIG11bHRpcGxlIGFkZHJlc3NlcwotCSAqIGFzc2lnbmVkIHRvIGFuIGludGVy
ZmFjZS4gUmVtZW1iZXIgdGhlIGlmYSBvbiBhIGlmbiBpcyBhIGxpbmtlZAotCSAqIGxpc3Qgb2Yg
YWRkcmVzc2VzLiBTbyBvbmUgaW50ZXJmYWNlIGNhbiBoYXZlIG1vcmUgdGhhbiBvbmUgSVAKLQkg
KiBhZGRyZXNzLiBXaGF0IGhhcHBlbnMgaWYgd2UgaGF2ZSBib3RoIGEgcHJpdmF0ZSBhbmQgYSBn
bG9iYWwKLQkgKiBhZGRyZXNzPyBEbyB3ZSB0aGVuIHVzZSBjb250ZXh0IG9mIGRlc3RpbmF0aW9u
IHRvIHNvcnQgb3V0IHdoaWNoCi0JICogb25lIGlzIGJlc3Q/IEFuZCB3aGF0IGFib3V0IE5BVCdz
IHNlbmRpbmcgUC0+RyBtYXkgZ2V0IHlvdSBhIE5BVAotCSAqIHRyYW5zbGF0aW9uLCBvciBzaG91
bGQgeW91IHNlbGVjdCB0aGUgRyB0aGF0cyBvbiB0aGUgaW50ZXJmYWNlIGluCi0JICogcHJlZmVy
ZW5jZS4KLQkgKgotCSAqIERlY2lzaW9uczoKLQkgKgotCSAqIC0gY291bnQgdGhlIG51bWJlciBv
ZiBhZGRyZXNzZXMgb24gdGhlIGludGVyZmFjZS4KLQkgKiAtIGlmIGl0IGlzIG9uZSwgbm8gcHJv
YmxlbSBleGNlcHQgY2FzZSA8Yz4uCi0JICogICBGb3IgPGE+IHdlIHdpbGwgYXNzdW1lIGEgTkFU
IG91dCB0aGVyZS4KLQkgKiAtIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lLCB0aGVuIHdlIG5l
ZWQgdG8gd29ycnkgYWJvdXQgc2NvcGUgUAotCSAqICAgb3IgRy4gV2Ugc2hvdWxkIHByZWZlciBH
IC0+IEcgYW5kIFAgLT4gUCBpZiBwb3NzaWJsZS4KLQkgKiAgIFRoZW4gYXMgYSBzZWNvbmRhcnkg
ZmFsbCBiYWNrIHRvIG1peGVkIHR5cGVzIEctPlAgYmVpbmcgYSBsYXN0Ci0JICogICBkaXRjaCBv
bmUuCi0JICogLSBUaGUgYWJvdmUgYWxsIHdvcmtzIGZvciBib3VuZCBhbGwsIGJ1dCBib3VuZCBz
cGVjaWZpYyB3ZSBuZWVkIHRvCi0JICogICB1c2UgdGhlIHNhbWUgY29uY2VwdCBidXQgaW5zdGVh
ZCBvbmx5IGNvbnNpZGVyIHRoZSBib3VuZAotCSAqICAgYWRkcmVzc2VzLiBJZiB0aGUgYm91bmQg
c2V0IGlzIE5PVCBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlIHRoZW4KLQkgKiAgIHdlIG11c3Qg
dXNlIHJvdGF0aW9uIGFtb25nc3QgdGhlIGJvdW5kIGFkZHJlc3Nlcy4uCi0JICovCi0JaWYgKHJv
LT5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIE5lZWQgYSByb3V0ZSB0byBjYWNoZS4KLQkJ
ICovCi0JCVNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7Ci0JfQotCWlmIChy
by0+cm9fcnQgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JLyogT24gV2luZG93cyB0aGUgc2FfZmFtaWx5IGlzIFVf
U0hPUlQgb3IgQUREUkVTU19GQU1JTFkgKi8KLQlmYW0gPSAoc2FfZmFtaWx5X3Qpcm8tPnJvX2Rz
dC5zYV9mYW1pbHk7Ci0jZWxzZQotCWZhbSA9IHJvLT5yb19kc3Quc2FfZmFtaWx5OwotI2VuZGlm
Ci0JZGVzdF9pc19wcml2ID0gZGVzdF9pc19sb29wID0gMDsKLQkvKiBTZXR1cCBvdXIgc2NvcGVz
IGZvciB0aGUgZGVzdGluYXRpb24gKi8KLQlzd2l0Y2ggKGZhbSkgewotI2lmZGVmIElORVQKLQlj
YXNlIEFGX0lORVQ6Ci0JCS8qIFNjb3BlIGJhc2VkIG9uIG91dGJvdW5kIGFkZHJlc3MgKi8KLQkJ
aWYgKElONF9JU0xPT1BCQUNLX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKLQkJCWRlc3RfaXNf
bG9vcCA9IDE7Ci0JCQlpZiAobmV0ICE9IE5VTEwpIHsKLQkJCQkvKiBtYXJrIGl0IGFzIGxvY2Fs
ICovCi0JCQkJbmV0LT5hZGRyX2lzX2xvY2FsID0gMTsKLQkJCX0KLQkJfSBlbHNlIGlmICgoSU40
X0lTUFJJVkFURV9BRERSRVNTKCZ0by0+c2luX2FkZHIpKSkgewotCQkJZGVzdF9pc19wcml2ID0g
MTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoK
LQkJLyogU2NvcGUgYmFzZWQgb24gb3V0Ym91bmQgYWRkcmVzcyAqLwotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYtPnNp
bjZfYWRkcikpIHsKLSNlbHNlCi0JCWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmdG82LT5zaW42
X2FkZHIpIHx8Ci0JCSAgICBTQ1RQX1JPVVRFX0lTX1JFQUxfTE9PUChybykpIHsKLSNlbmRpZgot
CQkJLyoKLQkJCSAqIElmIHRoZSBhZGRyZXNzIGlzIGEgbG9vcGJhY2sgYWRkcmVzcywgd2hpY2gK
LQkJCSAqIGNvbnNpc3RzIG9mICI6OjEiIE9SICJmZTgwOjoxJWxvMCIsIHdlIGFyZSBsb29wYmFj
awotCQkJICogc2NvcGUuIEJ1dCB3ZSBkb24ndCB1c2UgZGVzdF9pc19wcml2IChsaW5rIGxvY2Fs
Ci0JCQkgKiBhZGRyZXNzZXMpLgotCQkJICovCi0JCQlkZXN0X2lzX2xvb3AgPSAxOwotCQkJaWYg
KG5ldCAhPSBOVUxMKSB7Ci0JCQkJLyogbWFyayBpdCBhcyBsb2NhbCAqLwotCQkJCW5ldC0+YWRk
cl9pc19sb2NhbCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FM
KCZ0bzYtPnNpbjZfYWRkcikpIHsKLQkJCWRlc3RfaXNfcHJpdiA9IDE7Ci0JCX0KLQkJYnJlYWs7
Ci0jZW5kaWYKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJTZWxlY3Qgc291cmNl
IGFkZHIgZm9yOiIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsIChzdHJ1Y3Qg
c29ja2FkZHIgKikmcm8tPnJvX2RzdCk7Ci0JU0NUUF9JUElfQUREUl9STE9DSygpOwotCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKgotCQkgKiBC
b3VuZCBhbGwgY2FzZQotCQkgKi8KLQkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRhbGwoaW5w
LCBzdGNiLCBuZXQsIHJvLCB2cmZfaWQsCi0JCQkJCSAgICAgIGRlc3RfaXNfcHJpdiwgZGVzdF9p
c19sb29wLAotCQkJCQkgICAgICBub25fYXNvY19hZGRyX29rLCBmYW0pOwotCQlTQ1RQX0lQSV9B
RERSX1JVTkxPQ0soKTsKLQkJcmV0dXJuIChhbnN3ZXIpOwotCX0KLQkvKgotCSAqIFN1YnNldCBi
b3VuZCBjYXNlCi0JICovCi0JaWYgKHN0Y2IpIHsKLQkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91
bmRzcGVjaWZpY19zdGNiKGlucCwgc3RjYiwgcm8sCi0JCQkJCQkJdnJmX2lkLAlkZXN0X2lzX3By
aXYsCi0JCQkJCQkJZGVzdF9pc19sb29wLAotCQkJCQkJCW5vbl9hc29jX2FkZHJfb2ssIGZhbSk7
Ci0JfSBlbHNlIHsKLQkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19pbnAoaW5w
LCBybywgdnJmX2lkLAotCQkJCQkJICAgICAgIG5vbl9hc29jX2FkZHJfb2ssCi0JCQkJCQkgICAg
ICAgZGVzdF9pc19wcml2LAotCQkJCQkJICAgICAgIGRlc3RfaXNfbG9vcCwgZmFtKTsKLQl9Ci0J
U0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JcmV0dXJuIChhbnN3ZXIpOwotfQotCi1zdGF0aWMg
aW50Ci1zY3RwX2ZpbmRfY21zZyhpbnQgY190eXBlLCB2b2lkICpkYXRhLCBzdHJ1Y3QgbWJ1ZiAq
Y29udHJvbCwgc2l6ZV90IGNwc2l6ZSkKLXsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dp
bmRvd3MpCi0JV1NBQ01TR0hEUiBjbWg7Ci0jZWxzZQotCXN0cnVjdCBjbXNnaGRyIGNtaDsKLSNl
bmRpZgotCWludCB0bGVuLCBhdCwgZm91bmQ7Ci0Jc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZv
OwotCXN0cnVjdCBzY3RwX3ByaW5mbyBwcmluZm87Ci0Jc3RydWN0IHNjdHBfYXV0aGluZm8gYXV0
aGluZm87Ci0KLQl0bGVuID0gU0NUUF9CVUZfTEVOKGNvbnRyb2wpOwotCWF0ID0gMDsKLQlmb3Vu
ZCA9IDA7Ci0JLyoKLQkgKiBJbmRlcGVuZGVudCBvZiBob3cgbWFueSBtYnVmcywgZmluZCB0aGUg
Y190eXBlIGluc2lkZSB0aGUgY29udHJvbAotCSAqIHN0cnVjdHVyZSBhbmQgY29weSBvdXQgdGhl
IGRhdGEuCi0JICovCi0Jd2hpbGUgKGF0IDwgdGxlbikgewotCQlpZiAoKHRsZW4gLSBhdCkgPCAo
aW50KUNNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7Ci0JCQkvKiBUaGVyZSBpcyBub3QgZW5vdWdo
IHJvb20gZm9yIG9uZSBtb3JlLiAqLwotCQkJcmV0dXJuIChmb3VuZCk7Ci0JCX0KLQkJbV9jb3B5
ZGF0YShjb250cm9sLCBhdCwgc2l6ZW9mKGNtaCksIChjYWRkcl90KSZjbWgpOwotCQlpZiAoY21o
LmNtc2dfbGVuIDwgQ01TR19BTElHTihzaXplb2YoY21oKSkpIHsKLQkJCS8qIFdlIGRvbnQndCBo
YXZlIGEgY29tcGxldGUgQ01TRyBoZWFkZXIuICovCi0JCQlyZXR1cm4gKGZvdW5kKTsKLQkJfQot
CQlpZiAoKChpbnQpY21oLmNtc2dfbGVuICsgYXQpID4gdGxlbikgewotCQkJLyogV2UgZG9uJ3Qg
aGF2ZSB0aGUgY29tcGxldGUgQ01TRy4gKi8KLQkJCXJldHVybiAoZm91bmQpOwotCQl9Ci0JCWlm
ICgoY21oLmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSAmJgotCQkgICAgKChjX3R5cGUgPT0g
Y21oLmNtc2dfdHlwZSkgfHwKLQkJICAgICAoKGNfdHlwZSA9PSBTQ1RQX1NORFJDVikgJiYKLQkJ
ICAgICAgKChjbWguY21zZ190eXBlID09IFNDVFBfU05ESU5GTykgfHwKLQkJICAgICAgIChjbWgu
Y21zZ190eXBlID09IFNDVFBfUFJJTkZPKSB8fAotCQkgICAgICAgKGNtaC5jbXNnX3R5cGUgPT0g
U0NUUF9BVVRISU5GTykpKSkpIHsKLQkJCWlmIChjX3R5cGUgPT0gY21oLmNtc2dfdHlwZSkgewot
CQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkg
PCBjcHNpemUpIHsKLQkJCQkJcmV0dXJuIChmb3VuZCk7Ci0JCQkJfQotCQkJCS8qIEl0IGlzIGV4
YWN0bHkgd2hhdCB3ZSB3YW50LiBDb3B5IGl0IG91dC4gKi8KLQkJCQltX2NvcHlkYXRhKGNvbnRy
b2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIChpbnQpY3BzaXplLCAoY2FkZHJfdClk
YXRhKTsKLQkJCQlyZXR1cm4gKDEpOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvICpzbmRyY3ZpbmZvOwotCi0JCQkJc25kcmN2aW5mbyA9IChzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvICopZGF0YTsKLQkJCQlpZiAoZm91bmQgPT0gMCkgewotCQkJCQlpZiAoY3BzaXplIDwg
c2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKSB7Ci0JCQkJCQlyZXR1cm4gKGZvdW5kKTsK
LQkJCQkJfQotCQkJCQltZW1zZXQoc25kcmN2aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3Nu
ZHJjdmluZm8pKTsKLQkJCQl9Ci0JCQkJc3dpdGNoIChjbWguY21zZ190eXBlKSB7Ci0JCQkJY2Fz
ZSBTQ1RQX1NORElORk86Ci0JCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FM
SUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpIHsKLQkJCQkJ
CXJldHVybiAoZm91bmQpOwotCQkJCQl9Ci0JCQkJCW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBD
TVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCAoY2Fk
ZHJfdCkmc25kaW5mbyk7Ci0JCQkJCXNuZHJjdmluZm8tPnNpbmZvX3N0cmVhbSA9IHNuZGluZm8u
c25kX3NpZDsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fZmxhZ3MgPSBzbmRpbmZvLnNuZF9mbGFn
czsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fcHBpZCA9IHNuZGluZm8uc25kX3BwaWQ7Ci0JCQkJ
CXNuZHJjdmluZm8tPnNpbmZvX2NvbnRleHQgPSBzbmRpbmZvLnNuZF9jb250ZXh0OwotCQkJCQlz
bmRyY3ZpbmZvLT5zaW5mb19hc3NvY19pZCA9IHNuZGluZm8uc25kX2Fzc29jX2lkOwotCQkJCQli
cmVhazsKLQkJCQljYXNlIFNDVFBfUFJJTkZPOgotCQkJCQlpZiAoKHNpemVfdCkoY21oLmNtc2df
bGVuIC0gQ01TR19BTElHTihzaXplb2YoY21oKSkpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3ByaW5m
bykpIHsKLQkJCQkJCXJldHVybiAoZm91bmQpOwotCQkJCQl9Ci0JCQkJCW1fY29weWRhdGEoY29u
dHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX3By
aW5mbyksIChjYWRkcl90KSZwcmluZm8pOwotCQkJCQlpZiAocHJpbmZvLnByX3BvbGljeSAhPSBT
Q1RQX1BSX1NDVFBfTk9ORSkgewotCQkJCQkJc25kcmN2aW5mby0+c2luZm9fdGltZXRvbGl2ZSA9
IHByaW5mby5wcl92YWx1ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNuZHJjdmluZm8tPnNpbmZv
X3RpbWV0b2xpdmUgPSAwOwotCQkJCQl9Ci0JCQkJCXNuZHJjdmluZm8tPnNpbmZvX2ZsYWdzIHw9
IHByaW5mby5wcl9wb2xpY3k7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NUUF9BVVRISU5GTzoK
LQkJCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkp
KSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoaW5mbykpIHsKLQkJCQkJCXJldHVybiAoZm91bmQp
OwotCQkJCQl9Ci0JCQkJCW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVv
ZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhpbmZvKSwgKGNhZGRyX3QpJmF1dGhpbmZv
KTsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fa2V5bnVtYmVyX3ZhbGlkID0gMTsKLQkJCQkJc25k
cmN2aW5mby0+c2luZm9fa2V5bnVtYmVyID0gYXV0aGluZm8uYXV0aF9rZXludW1iZXI7Ci0JCQkJ
CWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiAoZm91bmQpOwotCQkJCX0KLQkJCQlm
b3VuZCA9IDE7Ci0JCQl9Ci0JCX0KLQkJYXQgKz0gQ01TR19BTElHTihjbWguY21zZ19sZW4pOwot
CX0KLQlyZXR1cm4gKGZvdW5kKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9wcm9jZXNzX2Ntc2dz
X2Zvcl9pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKmNvbnRyb2wsIGlu
dCAqZXJyb3IpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCVdTQUNN
U0dIRFIgY21oOwotI2Vsc2UKLQlzdHJ1Y3QgY21zZ2hkciBjbWg7Ci0jZW5kaWYKLQlpbnQgdGxl
biwgYXQ7Ci0Jc3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOwotI2lmZGVmIElORVQKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQotCXRsZW4gPSBTQ1RQX0JVRl9MRU4oY29udHJvbCk7Ci0J
YXQgPSAwOwotCXdoaWxlIChhdCA8IHRsZW4pIHsKLQkJaWYgKCh0bGVuIC0gYXQpIDwgKGludClD
TVNHX0FMSUdOKHNpemVvZihjbWgpKSkgewotCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29t
IGZvciBvbmUgbW9yZS4gKi8KLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybiAoMSk7Ci0J
CX0KLQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCwgc2l6ZW9mKGNtaCksIChjYWRkcl90KSZjbWgp
OwotCQlpZiAoY21oLmNtc2dfbGVuIDwgQ01TR19BTElHTihzaXplb2YoY21oKSkpIHsKLQkJCS8q
IFdlIGRvbnQndCBoYXZlIGEgY29tcGxldGUgQ01TRyBoZWFkZXIuICovCi0JCQkqZXJyb3IgPSBF
SU5WQUw7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWlmICgoKGludCljbWguY21zZ19sZW4gKyBh
dCkgPiB0bGVuKSB7Ci0JCQkvKiBXZSBkb24ndCBoYXZlIHRoZSBjb21wbGV0ZSBDTVNHLiAqLwot
CQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuICgxKTsKLQkJfQotCQlpZiAoY21oLmNtc2df
bGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSB7Ci0JCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKLQkJ
CWNhc2UgU0NUUF9JTklUOgotCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FM
SUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpIHsKLQkJCQkJ
KmVycm9yID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCQltX2NvcHlkYXRh
KGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pbml0bXNnKSwgKGNhZGRyX3QpJmluaXRtc2cpOwotCQkJCWlmIChpbml0bXNnLnNpbml0X21h
eF9hdHRlbXB0cykKLQkJCQkJc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1lcyA9IGluaXRtc2cuc2lu
aXRfbWF4X2F0dGVtcHRzOwotCQkJCWlmIChpbml0bXNnLnNpbml0X251bV9vc3RyZWFtcykKLQkJ
CQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVh
bXM7Ci0JCQkJaWYgKGluaXRtc2cuc2luaXRfbWF4X2luc3RyZWFtcykKLQkJCQkJc3RjYi0+YXNv
Yy5tYXhfaW5ib3VuZF9zdHJlYW1zID0gaW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zOwotCQkJ
CWlmIChpbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvKQotCQkJCQlzdGNiLT5hc29jLmluaXRp
YWxfaW5pdF9ydG9fbWF4ID0gaW5pdG1zZy5zaW5pdF9tYXhfaW5pdF90aW1lbzsKLQkJCQlpZiAo
c3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQgPCBzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMpIHsK
LQkJCQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqdG1wX3N0cjsKLQkJCQkJdW5zaWduZWQgaW50
IGk7Ci0jaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKLQkJCQkJaW50IGo7Ci0j
ZW5kaWYKLQotCQkJCQkvKiBEZWZhdWx0IGlzIE5PVCBjb3JyZWN0ICovCi0JCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQxLCAiT2ssIGRlZmF1bHQ6JWQgcHJlX29wZW46JWRcbiIsCi0JCQkJ
CQlzdGNiLT5hc29jLnN0cmVhbW91dGNudCwgc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zKTsK
LQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX01BTExPQyh0bXBfc3RyLAot
CQkJCQkgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICosCi0JCQkJCSAgICAgICAg
ICAgIChzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCkpLAotCQkJCQkgICAgICAgICAgICBTQ1RQX01fU1RSTU8pOwotCQkJCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOwotCQkJCQlpZiAodG1wX3N0ciAhPSBOVUxMKSB7Ci0JCQkJCQlTQ1RQX0ZS
RUUoc3RjYi0+YXNvYy5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOwotCQkJCQkJc3RjYi0+YXNvYy5z
dHJtb3V0ID0gdG1wX3N0cjsKLQkJCQkJCXN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSA9IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250ID0gc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zOwotCQkJ
CQl9IGVsc2UgewotCQkJCQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQ7Ci0JCQkJCX0KLQkJCQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Mu
c3RyZWFtb3V0Y250OyBpKyspIHsKLQkJCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91
dFtpXS5vdXRxdWV1ZSk7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1
ZXVlcyA9IDA7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9
IDA7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsK
LSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQotCQkJCQkJZm9yIChqID0gMDsg
aiA8IFNDVFBfUFJfU0NUUF9NQVggKyAxOyBqKyspIHsKLQkJCQkJCQlzdGNiLT5hc29jLnN0cm1v
dXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOwotCQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtp
XS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKLQkJCQkJCX0KLSNlbHNlCi0JCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOwotCQkJCQkJc3RjYi0+YXNvYy5z
dHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOwotI2VuZGlmCi0JCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0uc2lkID0gaTsKLQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5sYXN0
X21zZ19pbmNvbXBsZXRlID0gMDsKLQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9
IFNDVFBfU1RSRUFNX09QRU5JTkc7Ci0JCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3Rw
X3NzX2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOwotCQkJ
CQl9Ci0JCQkJfQotCQkJCWJyZWFrOwotI2lmZGVmIElORVQKLQkJCWNhc2UgU0NUUF9EU1RBRERS
VjQ6Ci0JCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNt
aCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKLQkJCQkJKmVycm9yID0gRUlOVkFMOwot
CQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpOwotCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBI
QVZFX1NJTl9MRU4KLQkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OwotI2VuZGlmCi0JCQkJc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCQkJbV9jb3B5ZGF0
YShjb250cm9sLCBhdCArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0IGlu
X2FkZHIpLCAoY2FkZHJfdCkmc2luLnNpbl9hZGRyKTsKLQkJCQlpZiAoKHNpbi5zaW5fYWRkci5z
X2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKLQkJCQkgICAgKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0g
SU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJCQkgICAgSU5fTVVMVElDQVNUKG50b2hsKHNpbi5zaW5f
YWRkci5zX2FkZHIpKSkgewotCQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCXJldHVybiAoMSk7
Ci0JCQkJfQotCQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2th
ZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgewot
CQkJCQkqZXJyb3IgPSBFTk9CVUZTOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCQlicmVh
azsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIFNDVFBfRFNUQUREUlY2OgotCQkJCWlm
ICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXpl
b2Yoc3RydWN0IGluNl9hZGRyKSkgewotCQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCXJldHVy
biAoMSk7Ci0JCQkJfQotCQkJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKLQkJCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9T
SU42X0xFTgotCQkJCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
Ci0jZW5kaWYKLQkJCQlzaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJCW1fY29weWRh
dGEoY29udHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBp
bjZfYWRkciksIChjYWRkcl90KSZzaW42LnNpbjZfYWRkcik7Ci0JCQkJaWYgKElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCZzaW42LnNpbjZfYWRkcikgfHwKLQkJCQkgICAgSU42X0lTX0FERFJfTVVM
VElDQVNUKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJKmVycm9yID0gRUlOVkFMOwotCQkJCQly
ZXR1cm4gKDEpOwotCQkJCX0KLSNpZmRlZiBJTkVUCi0JCQkJaWYgKElONl9JU19BRERSX1Y0TUFQ
UEVEKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNpbjYp
OwotCQkJCQlpZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKLQkJCQkJ
ICAgIChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8Ci0JCQkJCSAg
ICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQkJCQkqZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJCWlmIChzY3RwX2Fk
ZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+
YXNvYy5wb3J0LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRT
Q09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKLQkJCQkJCSplcnJvciA9IEVOT0JVRlM7
Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlCi0jZW5kaWYKLQkJCQkJaWYg
KHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgTlVM
TCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9E
T05PVF9TRVRTQ09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKLQkJCQkJCSplcnJvciA9
IEVOT0JVRlM7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJYnJlYWs7Ci0jZW5kaWYK
LQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJYXQgKz0gQ01TR19BTElHTihj
bWguY21zZ19sZW4pOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBf
dGNiICoKLXNjdHBfZmluZGFzc29jaWF0aW9uX2Ntc2dzKHN0cnVjdCBzY3RwX2lucGNiICoqaW5w
X3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0X3AsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgKmVycm9yKQotewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLQlXU0FDTVNHSERSIGNtaDsKLSNlbHNlCi0Jc3RydWN0IGNtc2doZHIgY21oOwotI2VuZGlm
Ci0JaW50IHRsZW4sIGF0OwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHI7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKLSNlbmRpZgotCi0JdGxl
biA9IFNDVFBfQlVGX0xFTihjb250cm9sKTsKLQlhdCA9IDA7Ci0Jd2hpbGUgKGF0IDwgdGxlbikg
ewotCQlpZiAoKHRsZW4gLSBhdCkgPCAoaW50KUNNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7Ci0J
CQkvKiBUaGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIG9uZSBtb3JlLiAqLwotCQkJKmVycm9y
ID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQltX2NvcHlkYXRhKGNvbnRyb2ws
IGF0LCBzaXplb2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7Ci0JCWlmIChjbWguY21zZ19sZW4gPCBD
TVNHX0FMSUdOKHNpemVvZihjbWgpKSkgewotCQkJLyogV2UgZG9udCd0IGhhdmUgYSBjb21wbGV0
ZSBDTVNHIGhlYWRlci4gKi8KLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybiAoTlVMTCk7
Ci0JCX0KLQkJaWYgKCgoaW50KWNtaC5jbXNnX2xlbiArIGF0KSA+IHRsZW4pIHsKLQkJCS8qIFdl
IGRvbid0IGhhdmUgdGhlIGNvbXBsZXRlIENNU0cuICovCi0JCQkqZXJyb3IgPSBFSU5WQUw7Ci0J
CQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChjbWguY21zZ19sZXZlbCA9PSBJUFBST1RPX1ND
VFApIHsKLQkJCXN3aXRjaCAoY21oLmNtc2dfdHlwZSkgewotI2lmZGVmIElORVQKLQkJCWNhc2Ug
U0NUUF9EU1RBRERSVjQ6Ci0JCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJ
R04oc2l6ZW9mKGNtaCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKLQkJCQkJKmVycm9y
ID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQltZW1zZXQoJnNpbiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCQkJc2luLnNpbl9wb3J0ID0gcG9ydDsKLQkJCQlt
X2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIHNpemVvZihz
dHJ1Y3QgaW5fYWRkciksIChjYWRkcl90KSZzaW4uc2luX2FkZHIpOwotCQkJCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbjsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
CQljYXNlIFNDVFBfRFNUQUREUlY2OgotCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBD
TVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgewotCQkJ
CQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJCW1lbXNl
dCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCQlzaW42LnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQkJCXNpbjYuc2luNl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJCQlzaW42LnNpbjZf
cG9ydCA9IHBvcnQ7Ci0JCQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCArIENNU0dfQUxJR04oc2l6
ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgKGNhZGRyX3QpJnNpbjYuc2luNl9h
ZGRyKTsKLSNpZmRlZiBJTkVUCi0JCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LnNp
bjZfYWRkcikpIHsKLQkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNpbjYpOwotCQkJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47Ci0JCQkJfSBlbHNlCi0jZW5kaWYKLQkJCQkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVm
YXVsdDoKLQkJCQlhZGRyID0gTlVMTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWlmIChhZGRyKSB7
Ci0JCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGFkZHIsIG5l
dF9wLCBOVUxMLCBOVUxMKTsKLQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQkJCXJldHVybiAo
c3RjYik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWF0ICs9IENNU0dfQUxJR04oY21oLmNtc2dfbGVu
KTsKLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYnVmICoKLXNjdHBf
YWRkX2Nvb2tpZShzdHJ1Y3QgbWJ1ZiAqaW5pdCwgaW50IGluaXRfb2Zmc2V0LAotICAgIHN0cnVj
dCBtYnVmICppbml0YWNrLCBpbnQgaW5pdGFja19vZmZzZXQsIHN0cnVjdCBzY3RwX3N0YXRlX2Nv
b2tpZSAqc3RjX2luLCB1aW50OF90ICoqc2lnbmF0dXJlKQotewotCXN0cnVjdCBtYnVmICpjb3B5
X2luaXQsICpjb3B5X2luaXRhY2ssICptX2F0LCAqc2lnLCAqbXJldDsKLQlzdHJ1Y3Qgc2N0cF9z
dGF0ZV9jb29raWUgKnN0YzsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdWludDhfdCAq
Zm9vOwotCWludCBzaWdfb2Zmc2V0OwotCXVpbnQxNl90IGNvb2tpZV9zejsKLQotCW1yZXQgPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2coKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsK
LQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwgMCwKLQkJCQkgICAgIE1f
Tk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobXJldCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCWNvcHlfaW5pdCA9IFNDVFBfTV9DT1BZTShpbml0LCBpbml0X29mZnNldCwgTV9D
T1BZQUxMLCBNX05PV0FJVCk7Ci0JaWYgKGNvcHlfaW5pdCA9PSBOVUxMKSB7Ci0JCXNjdHBfbV9m
cmVlbShtcmV0KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJ
TkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVG
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iYyhjb3B5X2luaXQsIFNDVFBfTUJVRl9J
Q09QWSk7Ci0JfQotI2VuZGlmCi0JY29weV9pbml0YWNrID0gU0NUUF9NX0NPUFlNKGluaXRhY2ss
IGluaXRhY2tfb2Zmc2V0LCBNX0NPUFlBTEwsCi0JICAgIE1fTk9XQUlUKTsKLQlpZiAoY29weV9p
bml0YWNrID09IE5VTEwpIHsKLQkJc2N0cF9tX2ZyZWVtKG1yZXQpOwotCQlzY3RwX21fZnJlZW0o
Y29weV9pbml0KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJ
TkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVG
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iYyhjb3B5X2luaXRhY2ssIFNDVFBfTUJV
Rl9JQ09QWSk7Ci0JfQotI2VuZGlmCi0JLyogZWFzeSBzaWRlIHdlIGp1c3QgZHJvcCBpdCBvbiB0
aGUgZW5kICovCi0JcGggPSBtdG9kKG1yZXQsIHN0cnVjdCBzY3RwX3BhcmFtaGRyICopOwotCVND
VFBfQlVGX0xFTihtcmV0KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsKLQkg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQlzdGMgPSAoc3RydWN0IHNjdHBfc3Rh
dGVfY29va2llICopKChjYWRkcl90KXBoICsKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFt
aGRyKSk7Ci0JcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUQVRFX0NPT0tJRSk7Ci0JcGgt
PnBhcmFtX2xlbmd0aCA9IDA7CS8qIGZpbGwgaW4gYXQgdGhlIGVuZCAqLwotCS8qIEZpbGwgaW4g
dGhlIHN0YyBjb29raWUgZGF0YSAqLwotCW1lbWNweShzdGMsIHN0Y19pbiwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0YXRlX2Nvb2tpZSkpOwotCi0JLyogdGFjayB0aGUgSU5JVCBhbmQgdGhlbiB0aGUg
SU5JVC1BQ0sgb250byB0aGUgY2hhaW4gKi8KLQljb29raWVfc3ogPSAwOwotCWZvciAobV9hdCA9
IG1yZXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCWNvb2tpZV9zeiAr
PSBTQ1RQX0JVRl9MRU4obV9hdCk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwp
IHsKLQkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXQ7Ci0JCQlicmVhazsKLQkJfQot
CX0KLQlmb3IgKG1fYXQgPSBjb3B5X2luaXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1f
YXQpKSB7Ci0JCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7Ci0JCWlmIChTQ1RQX0JV
Rl9ORVhUKG1fYXQpID09IE5VTEwpIHsKLQkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2lu
aXRhY2s7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlmb3IgKG1fYXQgPSBjb3B5X2luaXRhY2s7IG1f
YXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCWNvb2tpZV9zeiArPSBTQ1RQX0JV
Rl9MRU4obV9hdCk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKLQkJCWJy
ZWFrOwotCQl9Ci0JfQotCXNpZyA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhTQ1RQX1NFQ1JFVF9T
SVpFLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKHNpZyA9PSBOVUxMKSB7Ci0JCS8q
IG5vIHNwYWNlLCBzbyBmcmVlIHRoZSBlbnRpcmUgY2hhaW4gKi8KLQkJc2N0cF9tX2ZyZWVtKG1y
ZXQpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlTQ1RQX0JVRl9MRU4oc2lnKSA9IDA7Ci0JU0NU
UF9CVUZfTkVYVChtX2F0KSA9IHNpZzsKLQlzaWdfb2Zmc2V0ID0gMDsKLQlmb28gPSAodWludDhf
dCAqKSAobXRvZChzaWcsIGNhZGRyX3QpICsgc2lnX29mZnNldCk7Ci0JbWVtc2V0KGZvbywgMCwg
U0NUUF9TSUdOQVRVUkVfU0laRSk7Ci0JKnNpZ25hdHVyZSA9IGZvbzsKLQlTQ1RQX0JVRl9MRU4o
c2lnKSArPSBTQ1RQX1NJR05BVFVSRV9TSVpFOwotCWNvb2tpZV9zeiArPSBTQ1RQX1NJR05BVFVS
RV9TSVpFOwotCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhjb29raWVfc3opOwotCXJldHVybiAo
bXJldCk7Ci19Ci0KLQotc3RhdGljIHVpbnQ4X3QKLXNjdHBfZ2V0X2VjdChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IpCi17Ci0JaWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNiLT5hc29jLmVjbl9zdXBw
b3J0ZWQgPT0gMSkpIHsKLQkJcmV0dXJuIChTQ1RQX0VDVDBfQklUKTsKLQl9IGVsc2UgewotCQly
ZXR1cm4gKDApOwotCX0KLX0KLQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikK
LXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9ub19yb3V0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
Ci0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0gICAgICAgICAg
ICAgICAgICAgICBpbnQgc29fbG9ja2VkKQotewotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAiZHJvcHBlZCBwYWNrZXQgLSBubyB2YWxpZCBzb3VyY2UgYWRkclxuIik7Ci0KLQlpZiAobmV0
KSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiRGVzdGluYXRpb24gd2FzICIpOwot
CQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQxLCAmbmV0LT5yby5fbF9hZGRyLnNhKTsK
LQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9DT05GSVJNRUQpIHsKLQkJCWlmICgo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgJiYgc3RjYikgewotCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAibm8gcm91dGUgdGFrZXMgaW50ZXJmYWNlICVwIGRv
d25cbiIsICh2b2lkICopbmV0KTsKLQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5U
RVJGQUNFX0RPV04sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLCAwLAotCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiluZXQsCi0JCQkgICAgICAgICAgICAgICAgICAg
ICAgICBzb19sb2NrZWQpOwotCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNI
QUJMRTsKLQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCX0KLQkJfQot
CQlpZiAoc3RjYikgewotCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24pIHsKLQkJCQkvKiBuZWVkIGEgbmV3IHByaW1hcnkgKi8KLQkJCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICphbHQ7Ci0KLQkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDAp
OwotCQkJCWlmIChhbHQgIT0gbmV0KSB7Ci0JCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkg
ewotCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKLQkJ
CQkJfQotCQkJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IGFsdDsKLQkJCQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MuYWx0ZXJuYXRlLT5yZWZfY291bnQsIDEpOwotCQkJCQlpZiAobmV0LT5y
by5fc19hZGRyKSB7Ci0JCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJ
CQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCW5ldC0+c3JjX2FkZHJfc2Vs
ZWN0ZWQgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRpZgotCi1zdGF0aWMgaW50
Ci1zY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwJLyogbWF5IGJlIE5VTEwgKi8KLSAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsCi0gICAgc3RydWN0IHNvY2thZGRyICp0bywKLSAgICBzdHJ1Y3QgbWJ1ZiAq
bSwKLSAgICB1aW50MzJfdCBhdXRoX29mZnNldCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5r
ICphdXRoLAotICAgIHVpbnQxNl90IGF1dGhfa2V5aWQsCi0gICAgaW50IG5vZnJhZ21lbnRfZmxh
ZywKLSAgICBpbnQgZWNuX29rLAotICAgIGludCBvdXRfb2ZfYXNvY19vaywKLSAgICB1aW50MTZf
dCBzcmNfcG9ydCwKLSAgICB1aW50MTZfdCBkZXN0X3BvcnQsCi0gICAgdWludDMyX3Qgdl90YWcs
Ci0gICAgdWludDE2X3QgcG9ydCwKLSAgICB1bmlvbiBzY3RwX3NvY2tzdG9yZSAqb3Zlcl9hZGRy
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQz
Ml90IG1mbG93aWQsCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIGludCBzb19sb2NrZWQgU0NUUF9VTlVTRUQKLSNl
bHNlCi0gICAgaW50IHNvX2xvY2tlZAotI2VuZGlmCi0gICAgKQotLyogbm9mcmFnbWVudF9mbGFn
IHRvIHRlbGwgaWYgSVBfREYgc2hvdWxkIGJlIHNldCAoSVB2NCBvbmx5KSAqLwotewotCS8qKgot
CSAqIEdpdmVuIGEgbWJ1ZiBjaGFpbiAodmlhIFNDVFBfQlVGX05FWFQoKSkgdGhhdCBob2xkcyBh
IHBhY2tldCBoZWFkZXIKLQkgKiBXSVRIIGFuIFNDVFBIRFIgYnV0IG5vIElQIGhlYWRlciwgZW5k
cG9pbnQgaW5wIGFuZCBzYSBzdHJ1Y3R1cmU6Ci0JICogLSBmaWxsIGluIHRoZSBITUFDIGRpZ2Vz
dCBvZiBhbnkgQVVUSCBjaHVuayBpbiB0aGUgcGFja2V0LgotCSAqIC0gY2FsY3VsYXRlIGFuZCBm
aWxsIGluIHRoZSBTQ1RQIGNoZWNrc3VtLgotCSAqIC0gcHJlcGVuZCBhbiBJUCBhZGRyZXNzIGhl
YWRlci4KLQkgKiAtIGlmIGJvdW5kYWxsIHVzZSBJTkFERFJfQU5ZLgotCSAqIC0gaWYgYm91bmRz
cGVjaWZpYyBkbyBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24uCi0JICogLSBzZXQgZnJhZ21lbnRh
dGlvbiBvcHRpb24gZm9yIGlwVjQuCi0JICogLSBPbiByZXR1cm4gZnJvbSBJUCBvdXRwdXQsIGNo
ZWNrL2FkanVzdCBtdHUgc2l6ZSBvZiBvdXRwdXQKLQkgKiAgIGludGVyZmFjZSBhbmQgc21hbGxl
c3RfbXR1IHNpemUgYXMgd2VsbC4KLQkgKi8KLQkvKiBXaWxsIG5lZWQgaWZkZWZzIGFyb3VuZCB0
aGlzICovCi0jaWZkZWYgX19QYW5kYV9fCi0JcGFraGFuZGxlX3R5cGUgb19wYWs7Ci0jZW5kaWYK
LQlzdHJ1Y3QgbWJ1ZiAqbmV3bTsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2N0cGhkcjsKLQlpbnQgcGFj
a2V0X2xlbmd0aDsKLQlpbnQgcmV0OwotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVU
NikKLQl1aW50MzJfdCB2cmZfaWQ7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmlu
ZWQoSU5FVDYpCi0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQotCXN0cnVjdCBtYnVmICpvX3BhazsK
LSNlbmRpZgotCXNjdHBfcm91dGVfdCAqcm8gPSBOVUxMOwotCXN0cnVjdCB1ZHBoZHIgKnVkcCA9
IE5VTEw7Ci0jZW5kaWYKLQl1aW50OF90IHRvc192YWx1ZTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbyA9
IE5VTEw7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQp
IHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQkJU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5Q
X1NPKGlucCkpOwotCX0KLSNlbmRpZgotCWlmICgobmV0KSAmJiAobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX09VVF9PRl9TQ09QRSkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwg
aW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKLQkJc2N0cF9t
X2ZyZWVtKG0pOwotCQlyZXR1cm4gKEVGQVVMVCk7Ci0JfQotI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKLQlpZiAoc3RjYikgewotCQl2cmZfaWQgPSBzdGNiLT5hc29jLnZyZl9p
ZDsKLQl9IGVsc2UgewotCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JfQotI2VuZGlmCi0J
LyogZmlsbCBpbiB0aGUgSE1BQyBkaWdlc3QgZm9yIGFueSBBVVRIIGNodW5rIGluIHRoZSBwYWNr
ZXQgKi8KLQlpZiAoKGF1dGggIT0gTlVMTCkgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKLQkJc2N0cF9m
aWxsX2htYWNfZGlnZXN0X20obSwgYXV0aF9vZmZzZXQsIGF1dGgsIHN0Y2IsIGF1dGhfa2V5aWQp
OwotCX0KLQotCWlmIChuZXQpIHsKLQkJdG9zX3ZhbHVlID0gbmV0LT5kc2NwOwotCX0gZWxzZSBp
ZiAoc3RjYikgewotCQl0b3NfdmFsdWUgPSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcDsKLQl9IGVs
c2UgewotCQl0b3NfdmFsdWUgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwOwotCX0KLQotCXN3
aXRjaCAodG8tPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0Jewot
CQlzdHJ1Y3QgaXAgKmlwID0gTlVMTDsKLQkJc2N0cF9yb3V0ZV90IGlwcm91dGU7Ci0JCWludCBs
ZW47Ci0KLQkJbGVuID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCWlmIChwb3J0KSB7Ci0JCQls
ZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQl9Ci0JCW5ld20gPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlmIChuZXdtID09IE5V
TEwpIHsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBz
dGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCQlyZXR1cm4gKEVO
T01FTSk7Ci0JCX0KLQkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKLQkJU0NUUF9CVUZf
TEVOKG5ld20pID0gbGVuOwotCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKLQkJbSA9IG5ld207
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCQltLT5t
X3BrdGhkci5mbG93aWQgPSBuZXQtPmZsb3dpZDsKLQkJCU1fSEFTSFRZUEVfU0VUKG0sIG5ldC0+
Zmxvd3R5cGUpOwotCQl9IGVsc2UgewotCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbWZsb3dpZDsK
LQkJCU1fSEFTSFRZUEVfU0VUKG0sIG1mbG93dHlwZSk7Ci0gCQl9Ci0jZW5kaWYKLQkJcGFja2V0
X2xlbmd0aCA9IHNjdHBfY2FsY3VsYXRlX2xlbihtKTsKLQkJaXAgPSBtdG9kKG0sIHN0cnVjdCBp
cCAqKTsKLQkJaXAtPmlwX3YgPSBJUFZFUlNJT047Ci0JCWlwLT5pcF9obCA9IChzaXplb2Yoc3Ry
dWN0IGlwKSA+PiAyKTsKLQkJaWYgKHRvc192YWx1ZSA9PSAwKSB7Ci0JCQkvKgotCQkJICogVGhp
cyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQgdGhlCi0JCQkgKiBTQ1RQ
IGxheWVyLiBTbyB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVyLgotCQkJICovCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Q
YW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQl0b3NfdmFsdWUgPSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3RvczsKLSNlbHNlCi0JCQl0
b3NfdmFsdWUgPSBpbnAtPmlucF9pcF90b3M7Ci0jZW5kaWYKLQkJfQotCQl0b3NfdmFsdWUgJj0g
MHhmYzsKLQkJaWYgKGVjbl9vaykgewotCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNi
KTsKLQkJfQotCQlpZiAoKG5vZnJhZ21lbnRfZmxhZykgJiYgKHBvcnQgPT0gMCkpIHsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKLQkJ
CWlwLT5pcF9vZmYgPSBodG9ucyhJUF9ERik7Ci0jZWxzZQotCQkJaXAtPmlwX29mZiA9IElQX0RG
OwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFdJVEhfQ09OVkVSVF9JUF9PRkYpIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlpcC0+aXBfb2ZmID0gSVBf
REY7Ci0jZWxzZQotCQkJaXAtPmlwX29mZiA9IGh0b25zKElQX0RGKTsKLSNlbmRpZgotCQl9IGVs
c2UgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEw
MDAwMDAKLQkJCWlwLT5pcF9vZmYgPSBodG9ucygwKTsKLSNlbHNlCi0JCQlpcC0+aXBfb2ZmID0g
MDsKLSNlbmRpZgotCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJLyogRnJlZUJTRCBo
YXMgYSBmdW5jdGlvbiBmb3IgaXBfaWQncyAqLwotCQlpcF9maWxsaWQoaXApOwotI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pCi0jaWYgUkFORE9NX0lQX0lECi0JCWlwLT5pcF9pZCA9IGlwX3JhbmRv
bWlkKCk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBodG9ucyhpcF9pZCsrKTsKLSNlbmRpZgotI2Vs
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpcC0+aXBfaWQgPSBodG9ucyhTQ1RQX0lQX0lE
KGlucCkrKyk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBTQ1RQX0lQX0lEKGlucCkrKzsKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0JCWlwLT5pcF90dGwgPSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3R0bDsKLSNl
bHNlCi0JCWlwLT5pcF90dGwgPSBpbnAtPmlucF9pcF90dGw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMDAwMDAwCi0JCWlwLT5pcF9s
ZW4gPSBodG9ucyhwYWNrZXRfbGVuZ3RoKTsKLSNlbHNlCi0JCWlwLT5pcF9sZW4gPSBwYWNrZXRf
bGVuZ3RoOwotI2VuZGlmCi0JCWlwLT5pcF90b3MgPSB0b3NfdmFsdWU7Ci0JCWlmIChwb3J0KSB7
Ci0JCQlpcC0+aXBfcCA9IElQUFJPVE9fVURQOwotCQl9IGVsc2UgewotCQkJaXAtPmlwX3AgPSBJ
UFBST1RPX1NDVFA7Ci0JCX0KLQkJaXAtPmlwX3N1bSA9IDA7Ci0JCWlmIChuZXQgPT0gTlVMTCkg
ewotCQkJcm8gPSAmaXByb3V0ZTsKLQkJCW1lbXNldCgmaXByb3V0ZSwgMCwgc2l6ZW9mKGlwcm91
dGUpKTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCB0bywgdG8t
PnNhX2xlbik7Ci0jZWxzZQotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCB0bywgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlybyA9IChzY3RwX3JvdXRl
X3QgKikmbmV0LT5ybzsKLQkJfQotCQkvKiBOb3cgdGhlIGFkZHJlc3Mgc2VsZWN0aW9uIHBhcnQg
Ki8KLQkJaXAtPmlwX2RzdC5zX2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvKS0+c2lu
X2FkZHIuc19hZGRyOwotCi0JCS8qIGNhbGwgdGhlIHJvdXRpbmUgdG8gc2VsZWN0IHRoZSBzcmMg
YWRkcmVzcyAqLwotCQlpZiAobmV0ICYmIG91dF9vZl9hc29jX29rID09IDApIHsKLQkJCWlmIChu
ZXQtPnJvLl9zX2FkZHIgJiYgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3MgJiAoU0NU
UF9CRUlOR19ERUxFVEVEfFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSkpIHsKLQkJCQlzY3RwX2Zy
ZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKLQkJ
CQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQkJCQlpZiAocm8tPnJvX3J0KSB7Ci0JCQkJ
CVJURlJFRShyby0+cm9fcnQpOwotCQkJCQlyby0+cm9fcnQgPSBOVUxMOwotCQkJCX0KLQkJCX0K
LQkJCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkID09IDApIHsKLQkJCQkvKiBDYWNoZSB0aGUg
c291cmNlIGFkZHJlc3MgKi8KLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRy
ZXNzX3NlbGVjdGlvbihpbnAsc3RjYiwKLQkJCQkJCQkJCQlybywgbmV0LCAwLAotCQkJCQkJCQkJ
CXZyZl9pZCk7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7Ci0JCQl9Ci0JCQlpZiAo
bmV0LT5yby5fc19hZGRyID09IE5VTEwpIHsKLQkJCQkvKiBObyByb3V0ZSB0byBob3N0ICovCi0J
CQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUo
c3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOwotCQkJ
CXNjdHBfbV9mcmVlbShtKTsKLQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7Ci0JCQl9Ci0JCQlp
cC0+aXBfc3JjID0gbmV0LT5yby5fc19hZGRyLT5hZGRyZXNzLnNpbi5zaW5fYWRkcjsKLQkJfSBl
bHNlIHsKLQkJCWlmIChvdmVyX2FkZHIgPT0gTlVMTCkgewotCQkJCXN0cnVjdCBzY3RwX2lmYSAq
X2xzcmM7Ci0KLQkJCQlfbHNyYyA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwg
c3RjYiwgcm8sCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQs
Ci0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfb2ZfYXNvY19v
aywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7Ci0J
CQkJaWYgKF9sc3JjID09IE5VTEwpIHsKLQkJCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwg
bmV0LCBzb19sb2NrZWQpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0
Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKLQkJCQkJc2N0
cF9tX2ZyZWVtKG0pOwotCQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7Ci0JCQkJfQotCQkJCWlw
LT5pcF9zcmMgPSBfbHNyYy0+YWRkcmVzcy5zaW4uc2luX2FkZHI7Ci0JCQkJc2N0cF9mcmVlX2lm
YShfbHNyYyk7Ci0JCQl9IGVsc2UgewotCQkJCWlwLT5pcF9zcmMgPSBvdmVyX2FkZHItPnNpbi5z
aW5fYWRkcjsKLQkJCQlTQ1RQX1JUQUxMT0Mocm8sIHZyZl9pZCwgaW5wLT5maWJudW0pOwotCQkJ
fQotCQl9Ci0JCWlmIChwb3J0KSB7Ci0JCQlpZiAoaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3VkcF90dW5uZWxpbmdfcG9ydCkpID09IDApIHsKLQkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShz
dGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5w
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7Ci0JCQkJ
c2N0cF9tX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKLQkJCX0KLQkJCXVk
cCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwICsgc2l6ZW9mKHN0cnVjdCBpcCkpOwot
CQkJdWRwLT51aF9zcG9ydCA9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVs
aW5nX3BvcnQpKTsKLQkJCXVkcC0+dWhfZHBvcnQgPSBwb3J0OwotCQkJdWRwLT51aF91bGVuID0g
aHRvbnMoKHVpbnQxNl90KShwYWNrZXRfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBpcCkpKTsKLSNp
ZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9fRnJlZUJTRF92ZXJzaW9uID4gODAzMDAwICYmIF9f
RnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMCkK
LQkJCWlmIChWX3VkcF9ja3N1bSkgewotCQkJCXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5p
cF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQ
Uk9UT19VRFApKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdWRwLT51aF9zdW0gPSAwOwotCQkJfQotI2Vs
c2UKLQkJCXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBf
ZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQUk9UT19VRFApKTsKLSNlbmRpZgot
I2Vsc2UKLQkJCXVkcC0+dWhfc3VtID0gMDsKLSNlbmRpZgotCQkJc2N0cGhkciA9IChzdHJ1Y3Qg
c2N0cGhkciAqKSgoY2FkZHJfdCl1ZHAgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwotCQl9IGVs
c2UgewotCQkJc2N0cGhkciA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdClpcCArIHNpemVv
ZihzdHJ1Y3QgaXApKTsKLQkJfQotCi0JCXNjdHBoZHItPnNyY19wb3J0ID0gc3JjX3BvcnQ7Ci0J
CXNjdHBoZHItPmRlc3RfcG9ydCA9IGRlc3RfcG9ydDsKLQkJc2N0cGhkci0+dl90YWcgPSB2X3Rh
ZzsKLQkJc2N0cGhkci0+Y2hlY2tzdW0gPSAwOwotCi0JCS8qCi0JCSAqIElmIHNvdXJjZSBhZGRy
ZXNzIHNlbGVjdGlvbiBmYWlscyBhbmQgd2UgZmluZCBubyByb3V0ZQotCQkgKiB0aGVuIHRoZSBp
cF9vdXRwdXQgc2hvdWxkIGZhaWwgYXMgd2VsbCB3aXRoIGEKLQkJICogTk9fUk9VVEVfVE9fSE9T
VCB0eXBlIGVycm9yLiBXZSBwcm9iYWJseSBzaG91bGQgY2F0Y2gKLQkJICogdGhhdCBzb21ld2hl
cmUgYW5kIGFib3J0IHRoZSBhc3NvY2lhdGlvbiByaWdodCBhd2F5Ci0JCSAqIChhc3N1bWluZyB0
aGlzIGlzIGFuIElOSVQgYmVpbmcgc2VudCkuCi0JCSAqLwotCQlpZiAocm8tPnJvX3J0ID09IE5V
TEwpIHsKLQkJCS8qCi0JCQkgKiBzcmMgYWRkciBzZWxlY3Rpb24gZmFpbGVkIHRvIGZpbmQgYSBy
b3V0ZSAob3IKLQkJCSAqIHZhbGlkIHNvdXJjZSBhZGRyKSwgc28gd2UgY2FuJ3QgZ2V0IHRoZXJl
IGZyb20KLQkJCSAqIGhlcmUgKHlldCkhCi0JCQkgKi8KLQkJCXNjdHBfaGFuZGxlX25vX3JvdXRl
KHN0Y2IsIG5ldCwgc29fbG9ja2VkKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOwotCQkJ
c2N0cF9tX2ZyZWVtKG0pOwotCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOwotCQl9Ci0JCWlmIChy
byAhPSAmaXByb3V0ZSkgewotCQkJbWVtY3B5KCZpcHJvdXRlLCBybywgc2l6ZW9mKCpybykpOwot
CQl9Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiQ2FsbGluZyBpcHY0IG91dHB1dCBy
b3V0aW5lIGZyb20gbG93IGxldmVsIHNyYyBhZGRyOiV4XG4iLAotCQkJKHVpbnQzMl90KSAobnRv
aGwoaXAtPmlwX3NyYy5zX2FkZHIpKSk7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAi
RGVzdGluYXRpb24gaXMgJXhcbiIsCi0JCQkodWludDMyX3QpKG50b2hsKGlwLT5pcF9kc3Quc19h
ZGRyKSkpOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIlJUUCByb3V0ZSBpcyAlcCB0
aHJvdWdoXG4iLAotCQkJKHZvaWQgKilyby0+cm9fcnQpOwotCi0JCWlmIChTQ1RQX0dFVF9IRUFE
RVJfRk9SX09VVFBVVChvX3BhaykpIHsKLQkJCS8qIGZhaWxlZCB0byBwcmVwZW5kIGRhdGEsIGdp
dmUgdXAgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJ
cmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCVNDVFBfQVRUQUNIX0NIQUlOKG9fcGFrLCBtLCBwYWNr
ZXRfbGVuZ3RoKTsKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VN
KQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0JCQlzY3RwaGRy
LT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3QgaXApICsg
c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2Ny
Yyk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9fRnJlZUJTRF92ZXJzaW9u
ID4gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVy
c2lvbiA+IDkwMDAwMCkKLQkJCWlmIChWX3VkcF9ja3N1bSkgewotCQkJCVNDVFBfRU5BQkxFX1VE
UF9DU1VNKG9fcGFrKTsKLQkJCX0KLSNlbHNlCi0JCQlTQ1RQX0VOQUJMRV9VRFBfQ1NVTShvX3Bh
ayk7Ci0jZW5kaWYKLSNlbmRpZgotCQl9IGVsc2UgewotI2lmIGRlZmluZWQoU0NUUF9XSVRIX05P
X0NTVU0pCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kbm9jcmMpOwotI2Vsc2UKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCW0t
Pm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1NDVFA7Ci0JCQltLT5tX3BrdGhkci5jc3VtX2Rh
dGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hlY2tzdW0pOwotCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLSNlbHNlCi0JCQlpZiAoIShTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKLQkJCSAgICAgIChzdGNiKSAmJiAoc3RjYi0+YXNv
Yy5zY29wZS5sb29wYmFja19zY29wZSkpKSB7Ci0JCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3Rw
X2NhbGN1bGF0ZV9ja3N1bShtLCBzaXplb2Yoc3RydWN0IGlwKSk7Ci0JCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfc2VuZG5vY3JjKTsKLQkJCX0KLSNlbmRpZgotI2VuZGlmCi0JCX0KLSNpZmRlZiBTQ1RQX1BB
Q0tFVF9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcpCi0JCQlzY3RwX3BhY2tldF9sb2cob19wYWspOwot
I2VuZGlmCi0JCS8qIHNlbmQgaXQgb3V0LiAgdGFibGUgaWQgaXMgdGFrZW4gZnJvbSBzdGNiICov
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkpICYmIChzb19s
b2NrZWQpKSB7Ci0JCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCQlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDApOwotCQl9Ci0jZW5kaWYKLQkJU0NUUF9JUF9PVVRQVVQocmV0LCBvX3Bhaywgcm8s
IHN0Y2IsIHZyZl9pZCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxv
Y2tlZCkpICYmIChzb19sb2NrZWQpKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9D
SyhzbywgMCk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQl9Ci0jZW5kaWYKLQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfc2VuZHBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0
cGFja2V0cyk7Ci0JCWlmIChyZXQpCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kZXJyb3Jz
KTsKLQotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIklQIG91dHB1dCByZXR1cm5zICVk
XG4iLCByZXQpOwotCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCS8qIGZyZWUgdGVtcHkgcm91dGVz
ICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA5MDEw
MDAKLQkJCVJPX1JURlJFRShybyk7Ci0jZWxzZQotCQkJaWYgKHJvLT5yb19ydCkgewotCQkJCVJU
RlJFRShyby0+cm9fcnQpOwotCQkJCXJvLT5yb19ydCA9IE5VTEw7Ci0JCQl9Ci0jZW5kaWYKLQkJ
fSBlbHNlIHsKLQkJCS8qIFBNVFUgY2hlY2sgdmVyc3VzIHNtYWxsZXN0IGFzb2MgTVRVIGdvZXMg
aGVyZSAqLwotCQkJaWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYKLQkJCSAgICAobmV0LT5yby5f
c19hZGRyKSkgewotCQkJCXVpbnQzMl90IG10dTsKLQkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVf
RlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19y
dCk7Ci0JCQkJaWYgKG5ldC0+cG9ydCkgewotCQkJCQltdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBo
ZHIpOwotCQkJCX0KLQkJCQlpZiAobXR1ICYmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG10
dSkpIHsKLQkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNldChpbnAsICZzdGNiLT5hc29jLCBtdHUpOwot
CQkJCQluZXQtPm10dSA9IG10dTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHJvLT5yb19ydCA9PSBO
VUxMKSB7Ci0JCQkJLyogcm91dGUgd2FzIGZyZWVkICovCi0JCQkJaWYgKG5ldC0+cm8uX3NfYWRk
ciAmJgotCQkJCSAgICBuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7Ci0JCQkJCXNjdHBfZnJlZV9p
ZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKLQkJCQl9
Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQl9Ci0JCX0KLQkJcmV0dXJuIChy
ZXQpOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXVp
bnQzMl90IGZsb3dsYWJlbCwgZmxvd2luZm87Ci0JCXN0cnVjdCBpcDZfaGRyICppcDZoOwotCQlz
dHJ1Y3Qgcm91dGVfaW42IGlwNnJvdXRlOwotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCXN0cnVjdCBpZm5ldCAqaWZwOwotI2VuZGlmCi0JCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIHRtcCwgKmxzYTYsIGxzYTZfdG1wOwotCQlpbnQgcHJl
dl9zY29wZSA9IDA7Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCQlzdHJ1Y3Qgc29j
a2FkZHJfaW42IGxzYTZfc3RvcmFnZTsKLQkJaW50IGVycm9yOwotI2VuZGlmCi0JCXVfc2hvcnQg
cHJldl9wb3J0ID0gMDsKLQkJaW50IGxlbjsKLQotCQlpZiAobmV0KSB7Ci0JCQlmbG93bGFiZWwg
PSBuZXQtPmZsb3dsYWJlbDsKLQkJfSBlbHNlIGlmIChzdGNiKSB7Ci0JCQlmbG93bGFiZWwgPSBz
dGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsOwotCQl9IGVsc2UgewotCQkJZmxvd2xhYmVsID0g
aW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsOwotCQl9Ci0JCWlmIChmbG93bGFiZWwgPT0g
MCkgewotCQkJLyoKLQkJCSAqIFRoaXMgbWVhbnMgZXNwZWNpYWxseSwgdGhhdCBpdCBpcyBub3Qg
c2V0IGF0IHRoZQotCQkJICogU0NUUCBsYXllci4gU28gdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBJ
UCBsYXllci4KLQkJCSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAoIWRlZmluZWQoQVBQ
TEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQ
UExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikpCi0JCQlmbG93bGFiZWwg
PSBudG9obChpbnAtPmlwX2lucC5pbnAuaW5wX2Zsb3cpOwotI2Vsc2UKLQkJCWZsb3dsYWJlbCA9
IG50b2hsKCgoc3RydWN0IGluNnBjYiAqKWlucCktPmluNnBfZmxvd2luZm8pOwotI2VuZGlmCi0J
CX0KLQkJZmxvd2xhYmVsICY9IDB4MDAwZmZmZmY7Ci0JCWxlbiA9IFNDVFBfTUlOX09WRVJIRUFE
OwotCQlpZiAocG9ydCkgewotCQkJbGVuICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJfQot
CQluZXdtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMSwgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOwotCQlpZiAobmV3bSA9PSBOVUxMKSB7Ci0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCVNDVFBfQUxJR05fVE9fRU5EKG5l
d20sIGxlbik7Ci0JCVNDVFBfQlVGX0xFTihuZXdtKSA9IGxlbjsKLQkJU0NUUF9CVUZfTkVYVChu
ZXdtKSA9IG07Ci0JCW0gPSBuZXdtOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCWlmIChu
ZXQgIT0gTlVMTCkgewotCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbmV0LT5mbG93aWQ7Ci0JCQlN
X0hBU0hUWVBFX1NFVChtLCBuZXQtPmZsb3d0eXBlKTsKLQkJfSBlbHNlIHsKLQkJCW0tPm1fcGt0
aGRyLmZsb3dpZCA9IG1mbG93aWQ7Ci0JCQlNX0hBU0hUWVBFX1NFVChtLCBtZmxvd3R5cGUpOwot
IAkJfQotI2VuZGlmCi0JCXBhY2tldF9sZW5ndGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7Ci0K
LQkJaXA2aCA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7Ci0JCS8qIHByb3RlY3QgKnNpbjYg
ZnJvbSBvdmVyd3JpdGUgKi8KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87Ci0J
CXRtcCA9ICpzaW42OwotCQlzaW42ID0gJnRtcDsKLQotI2lmZGVmIFNDVFBfRU1CRURERURfVjZf
U0NPUEUKLQkJLyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlkICovCi0jaWYgZGVmaW5lZChfX0FQ
UExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dM
RU9QQVJEKQotCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVM
TCwgTlVMTCkgIT0gMCkKLSNlbHNlCi0JCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9h
ZGRyLCBzaW42LCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotI2VuZGlmCi0jZWxpZiBkZWZpbmVk
KFNDVFBfS0FNRSkKLQkJaWYgKHNhNl9lbWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2
X3VzZV9kZWZ6b25lKSkgIT0gMCkKLSNlbHNlCi0JCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+
c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCXsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVRfUEtUKG0sIGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7
Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1ND
T1BFICovCi0JCWlmIChuZXQgPT0gTlVMTCkgewotCQkJbWVtc2V0KCZpcDZyb3V0ZSwgMCwgc2l6
ZW9mKGlwNnJvdXRlKSk7Ci0JCQlybyA9IChzY3RwX3JvdXRlX3QgKikmaXA2cm91dGU7Ci0jaWZk
ZWYgSEFWRV9TSU42X0xFTgotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCBzaW42LCBzaW42LT5zaW42
X2xlbik7Ci0jZWxzZQotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCBzaW42LCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlybyA9IChzY3RwX3JvdXRl
X3QgKikmbmV0LT5ybzsKLQkJfQotCQkvKgotCQkgKiBXZSBhc3N1bWUgaGVyZSB0aGF0IGlucF9m
bG93IGlzIGluIGhvc3QgYnl0ZSBvcmRlciB3aXRoaW4KLQkJICogdGhlIFRDQiEKLQkJICovCi0J
CWlmICh0b3NfdmFsdWUgPT0gMCkgewotCQkJLyoKLQkJCSAqIFRoaXMgbWVhbnMgZXNwZWNpYWxs
eSwgdGhhdCBpdCBpcyBub3Qgc2V0IGF0IHRoZQotCQkJICogU0NUUCBsYXllci4gU28gdXNlIHRo
ZSB2YWx1ZSBmcm9tIHRoZSBJUCBsYXllci4KLQkJCSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAmJiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05P
V0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5U
QUlOTElPTikpCi0JCQl0b3NfdmFsdWUgPSAobnRvaGwoaW5wLT5pcF9pbnAuaW5wLmlucF9mbG93
KSA+PiAyMCkgJiAweGZmOwotI2Vsc2UKLQkJCXRvc192YWx1ZSA9IChudG9obCgoKHN0cnVjdCBp
bjZwY2IgKilpbnApLT5pbjZwX2Zsb3dpbmZvKSA+PiAyMCkgJiAweGZmOwotI2VuZGlmCi0jZW5k
aWYKLQkJfQotCQl0b3NfdmFsdWUgJj0gMHhmYzsKLQkJaWYgKGVjbl9vaykgewotCQkJdG9zX3Zh
bHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsKLQkJfQotCQlmbG93aW5mbyA9IDB4MDY7Ci0JCWZs
b3dpbmZvIDw8PSA4OwotCQlmbG93aW5mbyB8PSB0b3NfdmFsdWU7Ci0JCWZsb3dpbmZvIDw8PSAy
MDsKLQkJZmxvd2luZm8gfD0gZmxvd2xhYmVsOwotCQlpcDZoLT5pcDZfZmxvdyA9IGh0b25sKGZs
b3dpbmZvKTsKLQkJaWYgKHBvcnQpIHsKLQkJCWlwNmgtPmlwNl9ueHQgPSBJUFBST1RPX1VEUDsK
LQkJfSBlbHNlIHsKLQkJCWlwNmgtPmlwNl9ueHQgPSBJUFBST1RPX1NDVFA7Ci0JCX0KLQkJaXA2
aC0+aXA2X3BsZW4gPSAodWludDE2X3QpKHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlw
Nl9oZHIpKTsKLQkJaXA2aC0+aXA2X2RzdCA9IHNpbjYtPnNpbjZfYWRkcjsKLQotCQkvKgotCQkg
KiBBZGQgU1JDIGFkZHJlc3Mgc2VsZWN0aW9uIGhlcmU6IHdlIGNhbiBvbmx5IHJldXNlIHRvIGEK
LQkJICogbGltaXRlZCBkZWdyZWUgdGhlIGthbWUgc3JjLWFkZHItc2VsLCBzaW5jZSB3ZSBjYW4g
dHJ5Ci0JCSAqIHRoZWlyIHNlbGVjdGlvbiBidXQgaXQgbWF5IG5vdCBiZSBib3VuZC4KLQkJICov
Ci0JCW1lbXNldCgmbHNhNl90bXAsIDAsIHNpemVvZihsc2E2X3RtcCkpOwotCQlsc2E2X3RtcC5z
aW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJbHNhNl90bXAu
c2luNl9sZW4gPSBzaXplb2YobHNhNl90bXApOwotI2VuZGlmCi0JCWxzYTYgPSAmbHNhNl90bXA7
Ci0JCWlmIChuZXQgJiYgb3V0X29mX2Fzb2Nfb2sgPT0gMCkgewotCQkJaWYgKG5ldC0+cm8uX3Nf
YWRkciAmJiAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAmIChTQ1RQX0JFSU5HX0RF
TEVURUR8U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpKSkgewotCQkJCXNjdHBfZnJlZV9pZmEobmV0
LT5yby5fc19hZGRyKTsKLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOwotCQkJCW5ldC0+c3Jj
X2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJCWlmIChyby0+cm9fcnQpIHsKLQkJCQkJUlRGUkVFKHJv
LT5yb19ydCk7Ci0JCQkJCXJvLT5yb19ydCA9IE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJaWYgKG5l
dC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgewotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NP
UEUKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOwot
CQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2NvcGVpZCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9f
KQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFS
RCkKLQkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwg
TlVMTCkgIT0gMCkKLSNlbHNlCi0JCQkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2Fk
ZHIsIHNpbjYsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApCi0jZW5kaWYKLSNlbGlmIGRlZmluZWQo
U0NUUF9LQU1FKQotCQkJCWlmIChzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlw
Nl91c2VfZGVmem9uZSkpICE9IDApCi0jZWxzZQotCQkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2lu
Ni0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCQkJewotCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
SU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQkJfQotI2VuZGlmIC8qIFNDVFBfRU1C
RURERURfVjZfU0NPUEUgKi8KLQkJCQkvKiBDYWNoZSB0aGUgc291cmNlIGFkZHJlc3MgKi8KLQkJ
CQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAsCi0J
CQkJCQkJCQkJc3RjYiwKLQkJCQkJCQkJCQlybywKLQkJCQkJCQkJCQluZXQsCi0JCQkJCQkJCQkJ
MCwKLQkJCQkJCQkJCQl2cmZfaWQpOwotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLSNp
ZmRlZiBTQ1RQX0tBTUUKLQkJCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOwotI2Vsc2UK
LQkJCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5VTEwp
OwotI2VuZGlmCS8qIFNDVFBfS0FNRSAqLwotI2VuZGlmCS8qIFNDVFBfRU1CRURERURfVjZfU0NP
UEUgKi8KLQkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKLQkJCX0KLQkJCWlmIChuZXQt
PnJvLl9zX2FkZHIgPT0gTlVMTCkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAi
VjY6Tm8gcm91dGUgdG8gaG9zdFxuIik7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7
Ci0JCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFSE9TVFVOUkVBQ0gpOwotCQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCQlyZXR1cm4g
KEVIT1NUVU5SRUFDSCk7Ci0JCQl9Ci0JCQlsc2E2LT5zaW42X2FkZHIgPSBuZXQtPnJvLl9zX2Fk
ZHItPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgU0NUUF9FTUJF
RERFRF9WNl9TQ09QRQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvLT5yb19k
c3Q7Ci0JCQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xF
T1BBUkQpCi0JCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVM
TCwgTlVMTCkgIT0gMCkKLSNlbHNlCi0JCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNiwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKLSNlbmRpZgotI2VsaWYgZGVmaW5l
ZChTQ1RQX0tBTUUpCi0JCQlpZiAoc2E2X2VtYmVkc2NvcGUoc2luNiwgTU9EVUxFX0dMT0JBTChp
cDZfdXNlX2RlZnpvbmUpKSAhPSAwKQotI2Vsc2UKLQkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2lu
Ni0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCQkgIHsKLQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
SU5WQUwpOwotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCSAgfQotI2VuZGlmIC8qIFNDVFBfRU1C
RURERURfVjZfU0NPUEUgKi8KLQkJCWlmIChvdmVyX2FkZHIgPT0gTlVMTCkgewotCQkJCXN0cnVj
dCBzY3RwX2lmYSAqX2xzcmM7Ci0KLQkJCQlfbHNyYyA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2Vs
ZWN0aW9uKGlucCwgc3RjYiwgcm8sCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRfb2ZfYXNvY19vaywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZyZl9pZCk7Ci0JCQkJaWYgKF9sc3JjID09IE5VTEwpIHsKLQkJCQkJc2N0cF9oYW5kbGVfbm9f
cm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BL
VChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNI
KTsKLQkJCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7Ci0J
CQkJfQotCQkJCWxzYTYtPnNpbjZfYWRkciA9IF9sc3JjLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRy
OwotCQkJCXNjdHBfZnJlZV9pZmEoX2xzcmMpOwotCQkJfSBlbHNlIHsKLQkJCQlsc2E2LT5zaW42
X2FkZHIgPSBvdmVyX2FkZHItPnNpbjYuc2luNl9hZGRyOwotCQkJCVNDVFBfUlRBTExPQyhybywg
dnJmX2lkLCBpbnAtPmZpYm51bSk7Ci0JCQl9Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RQotI2lmZGVmIFNDVFBfS0FNRQotCQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKLSNl
bHNlCi0JCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5V
TEwpOwotI2VuZGlmCS8qIFNDVFBfS0FNRSAqLwotI2VuZGlmCS8qIFNDVFBfRU1CRURERURfVjZf
U0NPUEUgKi8KLQkJfQotCQlsc2E2LT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0KLQkJ
aWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7Ci0JCQkvKgotCQkJICogc3JjIGFkZHIgc2VsZWN0aW9u
IGZhaWxlZCB0byBmaW5kIGEgcm91dGUgKG9yCi0JCQkgKiB2YWxpZCBzb3VyY2UgYWRkciksIHNv
IHdlIGNhbid0IGdldCB0aGVyZSBmcm9tCi0JCQkgKiBoZXJlIQotCQkJICovCi0JCQlzY3RwX2hh
bmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RV
TlJFQUNIKTsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsK
LQkJfQotI2lmbmRlZiBTQ09QRURST1VUSU5HCi0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RQotCQkvKgotCQkgKiBYWFg6IHNhNiBtYXkgbm90IGhhdmUgYSB2YWxpZCBzaW42X3Njb3BlX2lk
IGluIHRoZQotCQkgKiBub24tU0NPUEVEUk9VVElORyBjYXNlLgotCQkgKi8KLQkJbWVtc2V0KCZs
c2E2X3N0b3JhZ2UsIDAsIHNpemVvZihsc2E2X3N0b3JhZ2UpKTsKLQkJbHNhNl9zdG9yYWdlLnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlsc2E2X3N0b3Jh
Z2Uuc2luNl9sZW4gPSBzaXplb2YobHNhNl9zdG9yYWdlKTsKLSNlbmRpZgotI2lmZGVmIFNDVFBf
S0FNRQotCQlsc2E2X3N0b3JhZ2Uuc2luNl9hZGRyID0gbHNhNi0+c2luNl9hZGRyOwotCQlpZiAo
KGVycm9yID0gc2E2X3JlY292ZXJzY29wZSgmbHNhNl9zdG9yYWdlKSkgIT0gMCkgewotI2Vsc2UK
LQkJaWYgKChlcnJvciA9IGluNl9yZWNvdmVyc2NvcGUoJmxzYTZfc3RvcmFnZSwgJmxzYTYtPnNp
bjZfYWRkciwKLQkJICAgIE5VTEwpKSAhPSAwKSB7Ci0jZW5kaWYJCQkJLyogU0NUUF9LQU1FICov
Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInJlY292ZXIgc2NvcGUgZmFpbHMgZXJy
b3IgJWRcbiIsIGVycm9yKTsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCXJldHVybiAoZXJyb3Ip
OwotCQl9Ci0JCS8qIFhYWCAqLwotCQlsc2E2X3N0b3JhZ2Uuc2luNl9hZGRyID0gbHNhNi0+c2lu
Nl9hZGRyOwotCQlsc2E2X3N0b3JhZ2Uuc2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQls
c2E2ID0gJmxzYTZfc3RvcmFnZTsKLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICov
Ci0jZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLwotCQlpcDZoLT5pcDZfc3JjID0gbHNhNi0+c2lu
Nl9hZGRyOwotCi0JCWlmIChwb3J0KSB7Ci0JCQlpZiAoaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpID09IDApIHsKLQkJCQlzY3RwX2hhbmRsZV9ub19yb3V0
ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwg
aW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7Ci0J
CQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKLQkJCX0KLQkJ
CXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwNmggKyBzaXplb2Yoc3RydWN0IGlw
Nl9oZHIpKTsKLQkJCXVkcC0+dWhfc3BvcnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7Ci0JCQl1ZHAtPnVoX2Rwb3J0ID0gcG9ydDsKLQkJCXVkcC0+
dWhfdWxlbiA9IGh0b25zKCh1aW50MTZfdCkocGFja2V0X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qg
aXA2X2hkcikpKTsKLQkJCXVkcC0+dWhfc3VtID0gMDsKLQkJCXNjdHBoZHIgPSAoc3RydWN0IHNj
dHBoZHIgKikoKGNhZGRyX3QpdWRwICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQkJfSBlbHNl
IHsKLQkJCXNjdHBoZHIgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXA2aCArIHNpemVv
ZihzdHJ1Y3QgaXA2X2hkcikpOwotCQl9Ci0KLQkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9y
dDsKLQkJc2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0OwotCQlzY3RwaGRyLT52X3RhZyA9
IHZfdGFnOwotCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7Ci0KLQkJLyoKLQkJICogV2Ugc2V0IHRo
ZSBob3AgbGltaXQgbm93IHNpbmNlIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UKLQkJICogdGhhdCBv
dXIgcm8gcG9pbnRlciBpcyBub3cgZmlsbGVkCi0JCSAqLwotCQlpcDZoLT5pcDZfaGxpbSA9IFND
VFBfR0VUX0hMSU0oaW5wLCBybyk7Ci0jaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKSkKLQkJaWZwID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShy
byk7Ci0jZW5kaWYKLQotI2lmZGVmIFNDVFBfREVCVUcKLQkJLyogQ29weSB0byBiZSBzdXJlIHNv
bWV0aGluZyBiYWQgaXMgbm90IGhhcHBlbmluZyAqLwotCQlzaW42LT5zaW42X2FkZHIgPSBpcDZo
LT5pcDZfZHN0OwotCQlsc2E2LT5zaW42X2FkZHIgPSBpcDZoLT5pcDZfc3JjOwotI2VuZGlmCi0K
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJDYWxsaW5nIGlwdjYgb3V0cHV0IHJvdXRp
bmUgZnJvbSBsb3cgbGV2ZWxcbiIpOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInNy
YzogIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDMsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKilsc2E2KTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJkc3Q6ICIpOwotCQlT
Q1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQzLCAoc3RydWN0IHNvY2thZGRyICopc2luNik7
Ci0JCWlmIChuZXQpIHsKLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJv
Ll9sX2FkZHI7Ci0JCQkvKiBwcmVzZXJ2ZSB0aGUgcG9ydCBhbmQgc2NvcGUgZm9yIGxpbmsgbG9j
YWwgc2VuZCAqLwotCQkJcHJldl9zY29wZSA9IHNpbjYtPnNpbjZfc2NvcGVfaWQ7Ci0JCQlwcmV2
X3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCX0KLQotCQlpZiAoU0NUUF9HRVRfSEVBREVSX0ZP
Ul9PVVRQVVQob19wYWspKSB7Ci0JCQkvKiBmYWlsZWQgdG8gcHJlcGVuZCBkYXRhLCBnaXZlIHVw
ICovCi0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJcmV0dXJuIChFTk9N
RU0pOwotCQl9Ci0JCVNDVFBfQVRUQUNIX0NIQUlOKG9fcGFrLCBtLCBwYWNrZXRfbGVuZ3RoKTsK
LQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0JCQlzY3RwaGRyLT5jaGVja3N1bSA9
IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikgKyBzaXplb2Yo
c3RydWN0IHVkcGhkcikpOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLSNl
bmRpZgotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQl1ZHAtPnVoX3N1bSA9IDA7Ci0jZWxp
ZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKCh1ZHAtPnVoX3N1bSA9IGluNl9ja3N1
bShvX3BhaywgSVBQUk9UT19VRFAsIHNpemVvZihzdHJ1Y3QgaXA2X2hkciksIHBhY2tldF9sZW5n
dGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgewotCQkJCXVkcC0+dWhfc3VtID0g
MHhmZmZmOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChTQ1RQX1dJVEhf
Tk9fQ1NVTSkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2NyYyk7Ci0jZWxzZQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAotI2lm
IF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwCi0JCQlzY3RwaGRyLT5jaGVja3N1bSA9IHNjdHBf
Y2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwotCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLSNlbHNlCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPiA5
MDEwMDAKLQkJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1NDVFBfSVBWNjsKLSNlbHNl
Ci0JCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOwotI2VuZGlmCi0JCQltLT5t
X3BrdGhkci5jc3VtX2RhdGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hlY2tzdW0pOwot
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLSNlbmRpZgotI2Vsc2UKLQkJCWlm
ICghKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgotCQkJICAg
ICAgKHN0Y2IpICYmIChzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlKSkpIHsKLQkJCQlz
Y3RwaGRyLT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3Qg
aXA2X2hkcikpOwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7Ci0JCQl9IGVs
c2UgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2NyYyk7Ci0JCQl9Ci0jZW5kaWYK
LSNlbmRpZgotCQl9Ci0JCS8qIHNlbmQgaXQgb3V0LiB0YWJsZSBpZCBpcyB0YWtlbiBmcm9tIHN0
Y2IgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSkgJiYg
KHNvX2xvY2tlZCkpIHsKLQkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKLQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMCk7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcK
LQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9Q
QUNLRVRfVFJBQ0lORykKLQkJCXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7Ci0jZW5kaWYKLSNpZiAh
KGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCQlTQ1RQX0lQ
Nl9PVVRQVVQocmV0LCBvX3BhaywgKHN0cnVjdCByb3V0ZV9pbjYgKilybywgJmlmcCwgc3RjYiwg
dnJmX2lkKTsKLSNlbHNlCi0JCVNDVFBfSVA2X09VVFBVVChyZXQsIG9fcGFrLCAoc3RydWN0IHJv
dXRlX2luNiAqKXJvLCBOVUxMLCBzdGNiLCB2cmZfaWQpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWlmICgoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkpICYmIChzb19sb2NrZWQpKSB7Ci0JCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQl9
Ci0jZW5kaWYKLQkJaWYgKG5ldCkgewotCQkJLyogZm9yIGxpbmsgbG9jYWwgdGhpcyBtdXN0IGJl
IGRvbmUgKi8KLQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBwcmV2X3Njb3BlOwotCQkJc2luNi0+
c2luNl9wb3J0ID0gcHJldl9wb3J0OwotCQl9Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQz
LCAicmV0dXJuIGZyb20gc2VuZCBpcyAlZFxuIiwgcmV0KTsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfc2VuZHBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0cGFj
a2V0cyk7Ci0JCWlmIChyZXQpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlcnJvcnMp
OwotCQl9Ci0JCWlmIChuZXQgPT0gTlVMTCkgewotCQkJLyogTm93IGlmIHdlIGhhZCBhIHRlbXAg
cm91dGUgZnJlZSBpdCAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID4gOTAxMDAwCi0JCQlST19SVEZSRUUocm8pOwotI2Vsc2UKLQkJCWlmIChyby0+cm9f
cnQpIHsKLQkJCQlSVEZSRUUocm8tPnJvX3J0KTsKLQkJCQlyby0+cm9fcnQgPSBOVUxMOwotCQkJ
fQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQkvKiBQTVRVIGNoZWNrIHZlcnN1cyBzbWFsbGVzdCBh
c29jIE1UVSBnb2VzIGhlcmUgKi8KLQkJCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgewotCQkJCS8q
IFJvdXRlIHdhcyBmcmVlZCAqLwotCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgJiYKLQkJCQkgICAg
bmV0LT5zcmNfYWRkcl9zZWxlY3RlZCkgewotCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3Nf
YWRkcik7Ci0JCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJfQotCQkJCW5ldC0+c3Jj
X2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJfQotCQkJaWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYK
LQkJCSAgICAobmV0LT5yby5fc19hZGRyKSkgewotCQkJCXVpbnQzMl90IG10dTsKLQkJCQltdHUg
PSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9s
X2FkZHIuc2EsIHJvLT5yb19ydCk7Ci0JCQkJaWYgKG10dSAmJgotCQkJCSAgICAoc3RjYi0+YXNv
Yy5zbWFsbGVzdF9tdHUgPiBtdHUpKSB7Ci0JCQkJCXNjdHBfbXR1X3NpemVfcmVzZXQoaW5wLCAm
c3RjYi0+YXNvYywgbXR1KTsKLQkJCQkJbmV0LT5tdHUgPSBtdHU7Ci0JCQkJCWlmIChuZXQtPnBv
cnQpIHsKLQkJCQkJCW5ldC0+bXR1IC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJCQkJfQot
CQkJCX0KLQkJCX0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JCQllbHNlIGlmIChpZnApIHsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotI2Rl
ZmluZSBORF9JRklORk8oaWZwKQkoaWZwKQotI2RlZmluZSBsaW5rbXR1CQlpZl9tdHUKLSNlbmRp
ZgotCQkJCWlmIChORF9JRklORk8oaWZwKS0+bGlua210dSAmJgotCQkJCSAgICAoc3RjYi0+YXNv
Yy5zbWFsbGVzdF9tdHUgPiBORF9JRklORk8oaWZwKS0+bGlua210dSkpIHsKLQkJCQkJc2N0cF9t
dHVfc2l6ZV9yZXNldChpbnAsCi0JCQkJCSAgICAmc3RjYi0+YXNvYywKLQkJCQkJICAgIE5EX0lG
SU5GTyhpZnApLT5saW5rbXR1KTsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCQlyZXR1cm4g
KHJldCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZf
Q09OTjoKLQl7Ci0JCWNoYXIgKmJ1ZmZlcjsKLQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25u
OwotCQlpbnQgbGVuOwotCi0JCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG87Ci0J
CWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JCW5ld20gPSBzY3RwX2dldF9tYnVmX2Zv
cl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlmIChuZXdtID09IE5VTEwp
IHsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNi
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCQlyZXR1cm4gKEVOT01F
TSk7Ci0JCX0KLQkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKLQkJU0NUUF9CVUZfTEVO
KG5ld20pID0gbGVuOwotCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKLQkJbSA9IG5ld207Ci0J
CXBhY2tldF9sZW5ndGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7Ci0JCXNjdHBoZHIgPSBtdG9k
KG0sIHN0cnVjdCBzY3RwaGRyICopOwotCQlzY3RwaGRyLT5zcmNfcG9ydCA9IHNyY19wb3J0Owot
CQlzY3RwaGRyLT5kZXN0X3BvcnQgPSBkZXN0X3BvcnQ7Ci0JCXNjdHBoZHItPnZfdGFnID0gdl90
YWc7Ci0JCXNjdHBoZHItPmNoZWNrc3VtID0gMDsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19D
U1VNKQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kbm9jcmMpOwotI2Vsc2UKLQkJaWYgKFND
VFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0gMCkgewotCQkJc2N0cGhkci0+Y2hlY2tz
dW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCAwKTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X3NlbmRzd2NyYyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdj
cmMpOwotCQl9Ci0jZW5kaWYKLQkJaWYgKHRvc192YWx1ZSA9PSAwKSB7Ci0JCQl0b3NfdmFsdWUg
PSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3RvczsKLQkJfQotCQl0b3NfdmFsdWUgJj0gMHhmYzsK
LQkJaWYgKGVjbl9vaykgewotCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsKLQkJ
fQotCQkvKiBEb24ndCBhbGxvYy9mcmVlIGZvciBlYWNoIHBhY2tldCAqLwotCQlpZiAoKGJ1ZmZl
ciA9IG1hbGxvYyhwYWNrZXRfbGVuZ3RoKSkgIT0gTlVMTCkgewotCQkJbV9jb3B5ZGF0YShtLCAw
LCBwYWNrZXRfbGVuZ3RoLCBidWZmZXIpOwotCQkJcmV0ID0gU0NUUF9CQVNFX1ZBUihjb25uX291
dHB1dCkoc2Nvbm4tPnNjb25uX2FkZHIsIGJ1ZmZlciwgcGFja2V0X2xlbmd0aCwgdG9zX3ZhbHVl
LCBub2ZyYWdtZW50X2ZsYWcpOwotCQkJZnJlZShidWZmZXIpOwotCQl9IGVsc2UgewotCQkJcmV0
ID0gRU5PTUVNOwotCQl9Ci0JCXNjdHBfbV9mcmVlbShtKTsKLQkJcmV0dXJuIChyZXQpOwotCX0K
LSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiVW5rbm93
biBwcm90b2NvbCAoVFNOSCkgdHlwZSAlZFxuIiwKLQkJICAgICAgICAoKHN0cnVjdCBzb2NrYWRk
ciAqKXRvKS0+c2FfZmFtaWx5KTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFV
TFQpOwotCQlyZXR1cm4gKEVGQVVMVCk7Ci0JfQotfQotCi0KLXZvaWQKLXNjdHBfc2VuZF9pbml0
aWF0ZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBz
b19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICApCi17Ci0Jc3RydWN0IG1i
dWYgKm0sICptX2xhc3Q7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVjdCBzY3RwX2lu
aXRfY2h1bmsgKmluaXQ7Ci0Jc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0gKnN1cF9h
ZGRyOwotCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqYWxpOwotCXN0
cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOwotCXN0
cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQlpbnQgY250X2luaXRzX3RvID0gMDsKLQlpbnQgZXJy
b3I7Ci0JdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbiwgcGFyYW1ldGVy
X2xlbjsKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0
cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9IGVsc2UgewotCQlzY3RwX3VubG9j
a19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7Ci0JfQotI2VuZGlmCi0JLyogSU5JVCdzIGFsd2F5
cyBnbyB0byB0aGUgcHJpbWFyeSAoYW5kIHVzdWFsbHkgT05MWSBhZGRyZXNzKSAqLwotCW5ldCA9
IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQlpZiAobmV0ID09IE5VTEwpIHsKLQkJ
bmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7Ci0JCWlmIChuZXQgPT0gTlVMTCkg
ewotCQkJLyogVFNOSCAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIHdlIGNvbmZpcm0gYW55IGFk
ZHJlc3Mgd2Ugc2VuZCBhbiBJTklUIHRvICovCi0JCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9B
RERSX1VOQ09ORklSTUVEOwotCQkodm9pZClzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgTlVM
TCwgbmV0KTsKLQl9IGVsc2UgewotCQkvKiB3ZSBjb25maXJtIGFueSBhZGRyZXNzIHdlIHNlbmQg
YW4gSU5JVCB0byAqLwotCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1F
RDsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJTZW5kaW5nIElOSVRcbiIpOwot
I2lmZGVmIElORVQ2Ci0JaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5F
VDYpIHsKLQkJLyoKLQkJICogc3BlY2lhbCBob29rLCBpZiB3ZSBhcmUgc2VuZGluZyB0byBsaW5r
IGxvY2FsIGl0IHdpbGwgbm90Ci0JCSAqIHNob3cgdXAgaW4gb3VyIHByaXZhdGUgYWRkcmVzcyBj
b3VudC4KLQkJICovCi0JCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ldC0+cm8uX2xfYWRk
ci5zaW42LnNpbjZfYWRkcikpCi0JCQljbnRfaW5pdHNfdG8gPSAxOwotCX0KLSNlbmRpZgotCWlm
IChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkgewotCQkvKiBU
aGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDQsICJTZW5kaW5nIElOSVQgLSBmYWlsZWQgdGltZXI/XG4iKTsKLQkJcmV0dXJuOwotCX0KLQkv
KiBzdGFydCB0aGUgSU5JVCB0aW1lciAqLwotCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0KTsKLQotCW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
TUNMQllURVMsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0J
CS8qIE5vIG1lbW9yeSwgSU5JVCB0aW1lciB3aWxsIHJlLWF0dGVtcHQuICovCi0JCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUIC0gbWJ1Zj9cbiIpOwotCQlyZXR1cm47
Ci0JfQotCWNodW5rX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVu
ayk7Ci0JcGFkZGluZ19sZW4gPSAwOwotCS8qIE5vdyBsZXRzIHB1dCB0aGUgY2h1bmsgaGVhZGVy
IGluIHBsYWNlICovCi0JaW5pdCA9IG10b2QobSwgc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKTsK
LQkvKiBub3cgdGhlIGNodW5rIGhlYWRlciAqLwotCWluaXQtPmNoLmNodW5rX3R5cGUgPSBTQ1RQ
X0lOSVRJQVRJT047Ci0JaW5pdC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwotCS8qIGZpbGwgaW4gbGF0
ZXIgZnJvbSBtYnVmIHdlIGJ1aWxkICovCi0JaW5pdC0+Y2guY2h1bmtfbGVuZ3RoID0gMDsKLQkv
KiBwbGFjZSBpbiBteSB0YWcgKi8KLQlpbml0LT5pbml0LmluaXRpYXRlX3RhZyA9IGh0b25sKHN0
Y2ItPmFzb2MubXlfdnRhZyk7Ci0JLyogc2V0IHVwIHNvbWUgb2YgdGhlIGNyZWRpdHMuICovCi0J
aW5pdC0+aW5pdC5hX3J3bmQgPSBodG9ubChtYXgoaW5wLT5zY3RwX3NvY2tldD9TQ1RQX1NCX0xJ
TUlUX1JDVihpbnAtPnNjdHBfc29ja2V0KTowLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfTUlOSU1BTF9SV05EKSk7Ci0JaW5pdC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFt
cyA9IGh0b25zKHN0Y2ItPmFzb2MucHJlX29wZW5fc3RyZWFtcyk7Ci0JaW5pdC0+aW5pdC5udW1f
aW5ib3VuZF9zdHJlYW1zID0gaHRvbnMoc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zKTsK
LQlpbml0LT5pbml0LmluaXRpYWxfdHNuID0gaHRvbmwoc3RjYi0+YXNvYy5pbml0X3NlcV9udW1i
ZXIpOwotCi0JLyogQWRhcHRhdGlvbiBsYXllciBpbmRpY2F0aW9uIHBhcmFtZXRlciAqLwotCWlm
IChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3JfcHJvdmlkZWQpIHsKLQkJ
cGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9s
YXllcl9pbmRpY2F0aW9uKTsKLQkJYWxpID0gKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJf
aW5kaWNhdGlvbiAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJYWxpLT5waC5w
YXJhbV90eXBlID0gaHRvbnMoU0NUUF9VTFBfQURBUFRBVElPTik7Ci0JCWFsaS0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCWFsaS0+aW5kaWNhdGlvbiA9IGh0b25s
KGlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcik7Ci0JCWNodW5rX2xlbiAr
PSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEVDTiBwYXJhbWV0ZXIgKi8KLQlpZiAoc3RjYi0+
YXNvYy5lY25fc3VwcG9ydGVkID09IDEpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClz
aXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBo
dG9ucyhTQ1RQX0VDTl9DQVBBQkxFKTsKLQkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFt
ZXRlcl9sZW4pOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9Ci0KLQkvKiBQUi1T
Q1RQIHN1cHBvcnRlZCBwYXJhbWV0ZXIgKi8KLQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9y
dGVkID09IDEpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShtdG9kKG0sIGNh
ZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1BSU0NU
UF9TVVBQT1JURUQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7
Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEFkZCBOQVQgZnJpZW5k
bHkgcGFyYW1ldGVyLiAqLwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdHNfaW5jbHVk
ZV9uYXRfZnJpZW5kbHkpKSB7Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRv
ZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NU
UF9IQVNfTkFUX1NVUFBPUlQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVy
X2xlbik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEFuZCBub3cg
dGVsbCB0aGUgcGVlciB3aGljaCBleHRlbnNpb25zIHdlIHN1cHBvcnQgKi8KLQludW1fZXh0ID0g
MDsKLQlwcl9zdXBwb3J0ZWQgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3Bh
cmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwotCWlmIChzdGNiLT5hc29jLnBy
c2N0cF9zdXBwb3J0ZWQgPT0gMSkgewotCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9l
eHQrK10gPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsKLQkJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3Vw
cG9ydGVkKSB7Ci0JCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQ
X0lGT1JXQVJEX0NVTV9UU047Ci0JCX0KLQl9Ci0JaWYgKHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0
ZWQgPT0gMSkgewotCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQ
X0FVVEhFTlRJQ0FUSU9OOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09
IDEpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9BU0NP
TkY7Ci0JCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfQVNDT05G
X0FDSzsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDEpIHsKLQkJ
cHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9TVFJFQU1fUkVTRVQ7
Ci0JfQotCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgewotCQlwcl9zdXBwb3J0ZWQt
PmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lEQVRBOwotCX0KLQlpZiAoc3RjYi0+YXNv
Yy5ucnNhY2tfc3VwcG9ydGVkID09IDEpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tu
dW1fZXh0KytdID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5w
a3Rkcm9wX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVt
X2V4dCsrXSA9IFNDVFBfUEFDS0VUX0RST1BQRUQ7Ci0JfQotCWlmIChudW1fZXh0ID4gMCkgewot
CQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRf
Y2h1bmtfdHlwZXNfcGFyYW0pICsgbnVtX2V4dDsKLQkJcHJfc3VwcG9ydGVkLT5waC5wYXJhbV90
eXBlID0gaHRvbnMoU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKTsKLQkJcHJfc3VwcG9ydGVkLT5w
aC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJcGFkZGluZ19sZW4gPSBT
Q1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47Ci0JCWNodW5rX2xlbiAr
PSBwYXJhbWV0ZXJfbGVuOwotCX0KLQkvKiBhZGQgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyAq
LwotCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkKSB7Ci0JCS8qIGF0dGFjaCBSQU5ET00g
cGFyYW1ldGVyLCBpZiBhdmFpbGFibGUgKi8KLQkJaWYgKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFu
ZG9tICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICpyYW5kcDsKLQotCQkJ
aWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJCW1lbXNldChtdG9kKG0sIGNhZGRyX3QpICsgY2h1
bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0JCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwot
CQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJCX0KLQkJCXJhbmRwID0gKHN0cnVjdCBzY3RwX2F1dGhf
cmFuZG9tICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwotCQkJcGFyYW1ldGVyX2xl
biA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20pICsgc3RjYi0+YXNv
Yy5hdXRoaW5mby5yYW5kb21fbGVuOwotCQkJLyogcmFuZG9tIGtleSBhbHJlYWR5IGNvbnRhaW5z
IHRoZSBoZWFkZXIgKi8KLQkJCW1lbWNweShyYW5kcCwgc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5k
b20tPmtleSwgcGFyYW1ldGVyX2xlbik7Ci0JCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBh
cmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJf
bGVuOwotCQl9Ci0JCS8qIGFkZCBITUFDX0FMR08gcGFyYW1ldGVyICovCi0JCWlmIChzdGNiLT5h
c29jLmxvY2FsX2htYWNzICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdv
ICpobWFjczsKLQotCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJCW1lbXNldChtdG9kKG0s
IGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0JCQkJY2h1bmtfbGVuICs9
IHBhZGRpbmdfbGVuOwotCQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJCX0KLQkJCWhtYWNzID0gKHN0
cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4p
OwotCQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhf
aG1hY19hbGdvKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLmxv
Y2FsX2htYWNzLT5udW1fYWxnbyAqIHNpemVvZih1aW50MTZfdCkpOwotCQkJaG1hY3MtPnBoLnBh
cmFtX3R5cGUgPSBodG9ucyhTQ1RQX0hNQUNfTElTVCk7Ci0JCQlobWFjcy0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCQlzY3RwX3NlcmlhbGl6ZV9obWFjbGlzdChz
dGNiLT5hc29jLmxvY2FsX2htYWNzLCAodWludDhfdCAqKWhtYWNzLT5obWFjX2lkcyk7Ci0JCQlw
YWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsK
LQkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCQl9Ci0JCS8qIGFkZCBDSFVOS1MgcGFy
YW1ldGVyICovCi0JCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzICE9IE5VTEwpIHsK
LQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOwotCi0JCQlpZiAocGFkZGlu
Z19sZW4gPiAwKSB7Ci0JCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAs
IHBhZGRpbmdfbGVuKTsKLQkJCQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47Ci0JCQkJcGFkZGlu
Z19sZW4gPSAwOwotCQkJfQotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlz
dCAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJCXBhcmFtZXRlcl9sZW4gPSAo
dWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QpICsKLQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXV0aF9nZXRfY2hrbGlzdF9zaXplKHN0Y2ItPmFz
b2MubG9jYWxfYXV0aF9jaHVua3MpKTsKLQkJCWNodW5rcy0+cGgucGFyYW1fdHlwZSA9IGh0b25z
KFNDVFBfQ0hVTktfTElTVCk7Ci0JCQljaHVua3MtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBh
cmFtZXRlcl9sZW4pOwotCQkJc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3Moc3RjYi0+YXNvYy5s
b2NhbF9hdXRoX2NodW5rcywgY2h1bmtzLT5jaHVua190eXBlcyk7Ci0JCQlwYWRkaW5nX2xlbiA9
IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQkJCWNodW5rX2xl
biArPSBwYXJhbWV0ZXJfbGVuOwotCQl9Ci0JfQotCi0JLyogbm93IGFueSBjb29raWUgdGltZSBl
eHRlbnNpb25zICovCi0JaWYgKHN0Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3JlcSkgewotCQlz
dHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0gKmNvb2tpZV9wcmVzZXJ2ZTsKLQotCQlp
ZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5r
X2xlbiwgMCwgcGFkZGluZ19sZW4pOwotCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJ
cGFkZGluZ19sZW4gPSAwOwotCQl9Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX2Nvb2tpZV9wZXJzZXJ2ZV9wYXJhbSk7Ci0JCWNvb2tpZV9wcmVzZXJ2ZSA9
IChzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0gKikobXRvZChtLCBjYWRkcl90KSAr
IGNodW5rX2xlbik7Ci0JCWNvb2tpZV9wcmVzZXJ2ZS0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFND
VFBfQ09PS0lFX1BSRVNFUlZFKTsKLQkJY29va2llX3ByZXNlcnZlLT5waC5wYXJhbV9sZW5ndGgg
PSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJY29va2llX3ByZXNlcnZlLT50aW1lID0gaHRvbmwo
c3RjYi0+YXNvYy5jb29raWVfcHJlc2VydmVfcmVxKTsKLQkJc3RjYi0+YXNvYy5jb29raWVfcHJl
c2VydmVfcmVxID0gMDsKLQkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47Ci0JfQotCi0JaWYg
KHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsIHx8IHN0Y2ItPmFzb2Muc2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsKSB7Ci0JCXVpbnQ4X3QgaTsKLQotCQlpZiAocGFkZGluZ19sZW4gPiAwKSB7
Ci0JCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4p
OwotCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJcGFkZGluZ19sZW4gPSAwOwotCQl9
Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRy
KTsKLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7Ci0JCQlwYXJhbWV0
ZXJfbGVuICs9ICh1aW50MTZfdClzaXplb2YodWludDE2X3QpOwotCQl9Ci0JCWlmIChzdGNiLT5h
c29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgewotCQkJcGFyYW1ldGVyX2xlbiArPSAodWludDE2
X3Qpc2l6ZW9mKHVpbnQxNl90KTsKLQkJfQotCQlzdXBfYWRkciA9IChzdHJ1Y3Qgc2N0cF9zdXBw
b3J0ZWRfYWRkcl9wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJc3Vw
X2FkZHItPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NVUFBPUlRFRF9BRERSVFlQRSk7Ci0J
CXN1cF9hZGRyLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJaSA9
IDA7Ci0JCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgewotCQkJc3VwX2Fk
ZHItPmFkZHJfdHlwZVtpKytdID0gaHRvbnMoU0NUUF9JUFY0X0FERFJFU1MpOwotCQl9Ci0JCWlm
IChzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgewotCQkJc3VwX2FkZHItPmFkZHJf
dHlwZVtpKytdID0gaHRvbnMoU0NUUF9JUFY2X0FERFJFU1MpOwotCQl9Ci0JCXBhZGRpbmdfbGVu
ID0gNCAtIDIgKiBpOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9Ci0KLQlTQ1RQ
X0JVRl9MRU4obSkgPSBjaHVua19sZW47Ci0JLyogbm93IHRoZSBhZGRyZXNzZXMgKi8KLQkvKiBU
byBvcHRpbWl6ZSB0aGlzIHdlIGNvdWxkIHB1dCB0aGUgc2NvcGluZyBzdHVmZgotCSAqIGludG8g
YSBzdHJ1Y3R1cmUgYW5kIHJlbW92ZSB0aGUgaW5kaXZpZHVhbCB1aW50OCdzIGZyb20KLQkgKiB0
aGUgYXNzb2Mgc3RydWN0dXJlLiBUaGVuIHdlIGNvdWxkIGp1c3Qgc2lmYSBpbiB0aGUKLQkgKiBh
ZGRyZXNzIHdpdGhpbiB0aGUgc3RjYi4gQnV0IGZvciBub3cgdGhpcyBpcyBhIHF1aWNrCi0JICog
aGFjayB0byBnZXQgdGhlIGFkZHJlc3Mgc3R1ZmYgdGVhc2VkIGFwYXJ0LgotCSAqLwotCW1fbGFz
dCA9IHNjdHBfYWRkX2FkZHJlc3Nlc190b19pX2lhKGlucCwgc3RjYiwgJnN0Y2ItPmFzb2Muc2Nv
cGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSwgY250X2luaXRzX3Rv
LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWRkaW5nX2xlbiwgJmNo
dW5rX2xlbik7Ci0KLQlpbml0LT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaHVua19sZW4pOwot
CWlmIChwYWRkaW5nX2xlbiA+IDApIHsKLQkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0
LCBwYWRkaW5nX2xlbikgPT0gTlVMTCkgewotCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJcmV0dXJu
OwotCQl9Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUIC0g
Y2FsbHMgbG93bGV2ZWxfb3V0cHV0XG4iKTsKLQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9j
aHVua19vdXRwdXQoaW5wLCBzdGNiLCBuZXQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCAwLCBOVUxMLCAwLCAwLCAwLCAw
LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBv
cnQsIHN0Y2ItPnJwb3J0LCBodG9ubCgwKSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0J
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCi0jZW5kaWYKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3Ip
OwotCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1
ZiA9IDE7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0JCX0KLQl9IGVs
c2UgewotCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMDsKLQl9Ci0JU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZuZXQtPmxhc3Rfc2VudF90aW1lKTsKLX0KLQotc3RydWN0IG1idWYgKgotc2N0
cF9hcmV0aGVyZV91bnJlY29nbml6ZWRfcGFyYW1ldGVycyhzdHJ1Y3QgbWJ1ZiAqaW5faW5pdHBr
dCwKLQlpbnQgcGFyYW1fb2Zmc2V0LCBpbnQgKmFib3J0X3Byb2Nlc3NpbmcsIHN0cnVjdCBzY3Rw
X2NodW5raGRyICpjcCwgaW50ICpuYXRfZnJpZW5kbHkpCi17Ci0JLyoKLQkgKiBHaXZlbiBhIG1i
dWYgY29udGFpbmluZyBhbiBJTklUIG9yIElOSVQtQUNLIHdpdGggdGhlIHBhcmFtX29mZnNldAot
CSAqIGJlaW5nIGVxdWFsIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFtcyBpLmUuIChpcGhs
ZW4gKwotCSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X21zZykgcGFyc2UgdGhyb3VnaCB0aGUg
cGFyYW1ldGVycyB0byB0aGUKLQkgKiBlbmQgb2YgdGhlIG1idWYgdmVyaWZ5aW5nIHRoYXQgYWxs
IHBhcmFtZXRlcnMgYXJlIGtub3duLgotCSAqCi0JICogRm9yIHVua25vd24gcGFyYW1ldGVycyBi
dWlsZCBhbmQgcmV0dXJuIGEgbWJ1ZiB3aXRoCi0JICogVU5SRUNPR05JWkVEX1BBUkFNRVRFUiBl
cnJvcnMuIElmIHRoZSBmbGFncyBpbmRpY2F0ZSB0byBzdG9wCi0JICogcHJvY2Vzc2luZyB0aGlz
IGNodW5rIHN0b3AsIGFuZCBzZXQgKmFib3J0X3Byb2Nlc3NpbmcgdG8gMS4KLQkgKgotCSAqIEJ5
IGhhdmluZyBwYXJhbV9vZmZzZXQgYmUgcHJlLXNldCB0byB3aGVyZSBwYXJhbWV0ZXJzIGJlZ2lu
IGl0IGlzCi0JICogaG9wZWQgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGJlIHJldXNlZCBpbiB0aGUg
ZnV0dXJlIGJ5IG5ldwotCSAqIGZlYXR1cmVzLgotCSAqLwotCXN0cnVjdCBzY3RwX3BhcmFtaGRy
ICpwaGRyLCBwYXJhbXM7Ci0KLQlzdHJ1Y3QgbWJ1ZiAqbWF0LCAqb3BfZXJyOwotCWNoYXIgdGVt
cGJ1ZltTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKLQlpbnQgYXQsIGxpbWl0LCBwYWRfbmVlZGVk
OwotCXVpbnQxNl90IHB0eXBlLCBwbGVuLCBwYWRkZWRfc2l6ZTsKLQlpbnQgZXJyX2F0OwotCi0J
KmFib3J0X3Byb2Nlc3NpbmcgPSAwOwotCW1hdCA9IGluX2luaXRwa3Q7Ci0JZXJyX2F0ID0gMDsK
LQlsaW1pdCA9IG50b2hzKGNwLT5jaHVua19sZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lu
aXRfY2h1bmspOwotCWF0ID0gcGFyYW1fb2Zmc2V0OwotCW9wX2VyciA9IE5VTEw7Ci0JU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJDaGVjayBmb3IgdW5yZWNvZ25pemVkIHBhcmFtJ3NcbiIp
OwotCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG1hdCwgYXQsICZwYXJhbXMsIHNpemVvZihw
YXJhbXMpKTsKLQl3aGlsZSAoKHBoZHIgIT0gTlVMTCkgJiYgKChzaXplX3QpbGltaXQgPj0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkpIHsKLQkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJh
bV90eXBlKTsKLQkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7Ci0JCWlmICgocGxl
biA+IGxpbWl0KSB8fCAocGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpKSB7Ci0J
CQkvKiB3YWNrZWQgcGFyYW1ldGVyICovCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwg
IkludmFsaWQgc2l6ZSAtIGVycm9yICVkXG4iLCBwbGVuKTsKLQkJCWdvdG8gaW52YWxpZF9zaXpl
OwotCQl9Ci0JCWxpbWl0IC09IFNDVFBfU0laRTMyKHBsZW4pOwotCQkvKi0KLQkJICogQWxsIHBh
cmFtZXRlcnMgZm9yIGFsbCBjaHVua3MgdGhhdCB3ZSBrbm93L3VuZGVyc3RhbmQgYXJlCi0JCSAq
IGxpc3RlZCBoZXJlLiBXZSBwcm9jZXNzIHRoZW0gb3RoZXIgcGxhY2VzIGFuZCBtYWtlCi0JCSAq
IGFwcHJvcHJpYXRlIHN0b3AgYWN0aW9ucyBwZXIgdGhlIHVwcGVyIGJpdHMuIEhvd2V2ZXIgdGhp
cwotCQkgKiBpcyB0aGUgZ2VuZXJpYyByb3V0aW5lIHByb2Nlc3NvcidzIGNhbiBjYWxsIHRvIGdl
dCBiYWNrCi0JCSAqIGFuIG9wZXJyLi4gdG8gZWl0aGVyIGluY29ycG9yYXRlIChpbml0LWFjaykg
b3Igc2VuZC4KLQkJICovCi0JCXBhZGRlZF9zaXplID0gU0NUUF9TSVpFMzIocGxlbik7Ci0JCXN3
aXRjaCAocHR5cGUpIHsKLQkJCS8qIFBhcmFtJ3Mgd2l0aCB2YXJpYWJsZSBzaXplICovCi0JCWNh
c2UgU0NUUF9IRUFSVEJFQVRfSU5GTzoKLQkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRToKLQkJY2Fz
ZSBTQ1RQX1VOUkVDT0dfUEFSQU06Ci0JCWNhc2UgU0NUUF9FUlJPUl9DQVVTRV9JTkQ6Ci0JCQkv
KiBvayBza2lwIGZ3ZCAqLwotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0JCQlicmVhazsKLQkJCS8q
IFBhcmFtJ3Mgd2l0aCB2YXJpYWJsZSBzaXplIHdpdGhpbiBhIHJhbmdlICovCi0JCWNhc2UgU0NU
UF9DSFVOS19MSVNUOgotCQljYXNlIFNDVFBfU1VQUE9SVEVEX0NIVU5LX0VYVDoKLQkJCWlmIChw
YWRkZWRfc2l6ZSA+IChzaXplb2Yoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3Bh
cmFtKSArIChzaXplb2YodWludDhfdCkgKiBTQ1RQX01BWF9TVVBQT1JURURfRVhUKSkpIHsKLQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGNoa2xp
c3QgJWRcbiIsIHBsZW4pOwotCQkJCWdvdG8gaW52YWxpZF9zaXplOwotCQkJfQotCQkJYXQgKz0g
cGFkZGVkX3NpemU7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NVUFBPUlRFRF9BRERSVFlQRToK
LQkJCWlmIChwYWRkZWRfc2l6ZSA+IFNDVFBfTUFYX0FERFJfUEFSQU1TX1NJWkUpIHsKLQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHN1cGFkZHJ0
eXBlICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFsaWRfc2l6ZTsKLQkJCX0KLQkJCWF0ICs9
IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9SQU5ET006Ci0JCQlpZiAocGFk
ZGVkX3NpemUgPiAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tKSArIFNDVFBfUkFORE9N
X01BWF9TSVpFKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBz
aXplIC0gZXJyb3IgcmFuZG9tICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFsaWRfc2l6ZTsK
LQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TRVRf
UFJJTV9BRERSOgotCQljYXNlIFNDVFBfREVMX0lQX0FERFJFU1M6Ci0JCWNhc2UgU0NUUF9BRERf
SVBfQUREUkVTUzoKLQkJCWlmICgocGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
Y29uZl9hZGRydjRfcGFyYW0pKSAmJgotCQkJICAgIChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3Igc2V0cHJpbSAlZFxuIiwgcGxlbik7Ci0JCQkJ
Z290byBpbnZhbGlkX3NpemU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFr
OwotCQkJLyogUGFyYW0ncyB3aXRoIGEgZml4ZWQgc2l6ZSAqLwotCQljYXNlIFNDVFBfSVBWNF9B
RERSRVNTOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6
ZSAtIGVycm9yIGlwdjQgYWRkciAlZFxuIiwgcGxlbik7Ci0JCQkJZ290byBpbnZhbGlkX3NpemU7
Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfSVBW
Nl9BRERSRVNTOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQg
c2l6ZSAtIGVycm9yIGlwdjYgYWRkciAlZFxuIiwgcGxlbik7Ci0JCQkJZ290byBpbnZhbGlkX3Np
emU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBf
Q09PS0lFX1BSRVNFUlZFOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9jb29raWVfcGVyc2VydmVfcGFyYW0pKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBjb29raWUtcHJlc2VydmUgJWRcbiIsIHBsZW4pOwot
CQkJCWdvdG8gaW52YWxpZF9zaXplOwotCQkJfQotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX0hBU19OQVRfU1VQUE9SVDoKLQkJCSpuYXRfZnJpZW5kbHkgPSAx
OwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgU0NUUF9QUlNDVFBfU1VQUE9SVEVEOgot
CQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKLQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHByc2N0
cC9uYXQgc3VwcG9ydCAlZFxuIiwgcGxlbik7Ci0JCQkJZ290byBpbnZhbGlkX3NpemU7Ci0JCQl9
Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfRUNOX0NBUEFC
TEU6Ci0JCQlpZiAocGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkg
ewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3Ig
ZWNuICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFsaWRfc2l6ZTsKLQkJCX0KLQkJCWF0ICs9
IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9VTFBfQURBUFRBVElPTjoKLQkJ
CWlmIChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9p
bmRpY2F0aW9uKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBz
aXplIC0gZXJyb3IgYWRhcGF0YXRpb24gJWRcbiIsIHBsZW4pOwotCQkJCWdvdG8gaW52YWxpZF9z
aXplOwotCQkJfQotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQ
X1NVQ0NFU1NfUkVQT1JUOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc2NvbmZfcGFyYW1oZHIpKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJ
bnZhbGlkIHNpemUgLSBlcnJvciBzdWNjZXNzICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFs
aWRfc2l6ZTsKLQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9IT1NUTkFNRV9BRERSRVNTOgotCQl7Ci0JCQkvKiBXZSBjYW4gTk9UIGhhbmRsZSBIT1NU
IE5BTUUgYWRkcmVzc2VzISEgKi8KLQkJCWludCBsX2xlbjsKLQotCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDEsICJDYW4ndCBoYW5kbGUgaG9zdG5hbWUgYWRkcmVzc2VzLi4gYWJvcnQgcHJv
Y2Vzc2luZ1xuIik7Ci0JCQkqYWJvcnRfcHJvY2Vzc2luZyA9IDE7Ci0JCQlpZiAob3BfZXJyID09
IE5VTEwpIHsKLQkJCQkvKiBPayBuZWVkIHRvIHRyeSB0byBnZXQgYSBtYnVmICovCi0jaWZkZWYg
SU5FVDYKLQkJCQlsX2xlbiA9IFNDVFBfTUlOX09WRVJIRUFEOwotI2Vsc2UKLQkJCQlsX2xlbiA9
IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotI2VuZGlmCi0JCQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2NodW5raGRyKTsKLQkJCQlsX2xlbiArPSBwbGVuOwotCQkJCWxfbGVuICs9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKGxfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCQkJaWYgKG9wX2Vycikgewot
CQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IDA7Ci0JCQkJCS8qCi0JCQkJCSAqIHByZS1yZXNl
cnZlIHNwYWNlIGZvciBpcCBhbmQgc2N0cAotCQkJCQkgKiBoZWFkZXIgIGFuZCBjaHVuayBoZHIK
LQkJCQkJICovCi0jaWZkZWYgSU5FVDYKLQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNp
emVvZihzdHJ1Y3QgaXA2X2hkcikpOwotI2Vsc2UKLQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9l
cnIsIHNpemVvZihzdHJ1Y3QgaXApKTsKLSNlbmRpZgotCQkJCQlTQ1RQX0JVRl9SRVNWX1VGKG9w
X2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0JCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3Bf
ZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAo
b3BfZXJyKSB7Ci0JCQkJLyogSWYgd2UgaGF2ZSBzcGFjZSAqLwotCQkJCXN0cnVjdCBzY3RwX3Bh
cmFtaGRyIHM7Ci0KLQkJCQlpZiAoZXJyX2F0ICUgNCkgewotCQkJCQl1aW50MzJfdCBjcHRoaXMg
PSAwOwotCi0JCQkJCXBhZF9uZWVkZWQgPSA0IC0gKGVycl9hdCAlIDQpOwotCQkJCQltX2NvcHli
YWNrKG9wX2VyciwgZXJyX2F0LCBwYWRfbmVlZGVkLCAoY2FkZHJfdCkmY3B0aGlzKTsKLQkJCQkJ
ZXJyX2F0ICs9IHBhZF9uZWVkZWQ7Ci0JCQkJfQotCQkJCXMucGFyYW1fdHlwZSA9IGh0b25zKFND
VFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIpOwotCQkJCXMucGFyYW1fbGVuZ3RoID0gaHRvbnMo
c2l6ZW9mKHMpICsgcGxlbik7Ci0JCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9m
KHMpLCAoY2FkZHJfdCkmcyk7Ci0JCQkJZXJyX2F0ICs9IHNpemVvZihzKTsKLQkJCQlpZiAocGxl
biA+IHNpemVvZih0ZW1wYnVmKSkgewotCQkJCQlwbGVuID0gc2l6ZW9mKHRlbXBidWYpOwotCQkJ
CX0KLQkJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0LCAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKil0ZW1wYnVmLCBwbGVuKTsKLQkJCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJ
CXNjdHBfbV9mcmVlbShvcF9lcnIpOwotCQkJCQkvKgotCQkJCQkgKiB3ZSBhcmUgb3V0IG9mIG1l
bW9yeSBidXQgd2Ugc3RpbGwKLQkJCQkJICogbmVlZCB0byBoYXZlIGEgbG9vayBhdCB3aGF0IHRv
IGRvCi0JCQkJCSAqICh0aGUgc3lzdGVtIGlzIGluIHRyb3VibGUKLQkJCQkJICogdGhvdWdoKS4K
LQkJCQkJICovCi0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJCW1fY29weWJhY2sob3Bf
ZXJyLCBlcnJfYXQsIHBsZW4sIChjYWRkcl90KXBoZHIpOwotCQkJfQotCQkJcmV0dXJuIChvcF9l
cnIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCS8qCi0JCQkgKiB3ZSBkbyBub3Qg
cmVjb2duaXplIHRoZSBwYXJhbWV0ZXIgZmlndXJlIG91dCB3aGF0Ci0JCQkgKiB3ZSBkby4KLQkJ
CSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJIaXQgZGVmYXVsdCBwYXJhbSAl
eFxuIiwgcHR5cGUpOwotCQkJaWYgKChwdHlwZSAmIDB4NDAwMCkgPT0gMHg0MDAwKSB7Ci0JCQkJ
LyogUmVwb3J0IGJpdCBpcyBzZXQ/PyAqLwotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAicmVwb3J0IG9wIGVyclxuIik7Ci0JCQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7Ci0JCQkJCWlu
dCBsX2xlbjsKLQkJCQkJLyogT2sgbmVlZCB0byB0cnkgdG8gZ2V0IGFuIG1idWYgKi8KLSNpZmRl
ZiBJTkVUNgotCQkJCQlsX2xlbiA9IFNDVFBfTUlOX09WRVJIRUFEOwotI2Vsc2UKLQkJCQkJbF9s
ZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLSNlbmRpZgotCQkJCQlsX2xlbiArPSBzaXplb2Yo
c3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCQkJCQlsX2xlbiArPSBwbGVuOwotCQkJCQlsX2xlbiAr
PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQkJCQlvcF9lcnIgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2cobF9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCQkJaWYgKG9w
X2VycikgewotCQkJCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSAwOwotI2lmZGVmIElORVQ2Ci0J
CQkJCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7Ci0j
ZWxzZQotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXApKTsK
LSNlbmRpZgotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcikpOwotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9jaHVua2hkcikpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChvcF9lcnIpIHsKLQkJCQkJLyog
SWYgd2UgaGF2ZSBzcGFjZSAqLwotCQkJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBzOwotCi0JCQkJ
CWlmIChlcnJfYXQgJSA0KSB7Ci0JCQkJCQl1aW50MzJfdCBjcHRoaXMgPSAwOwotCi0JCQkJCQlw
YWRfbmVlZGVkID0gNCAtIChlcnJfYXQgJSA0KTsKLQkJCQkJCW1fY29weWJhY2sob3BfZXJyLCBl
cnJfYXQsIHBhZF9uZWVkZWQsIChjYWRkcl90KSZjcHRoaXMpOwotCQkJCQkJZXJyX2F0ICs9IHBh
ZF9uZWVkZWQ7Ci0JCQkJCX0KLQkJCQkJcy5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9VTlJFQ09H
X1BBUkFNKTsKLQkJCQkJcy5wYXJhbV9sZW5ndGggPSBodG9ucyhzaXplb2YocykgKyBwbGVuKTsK
LQkJCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9mKHMpLCAoY2FkZHJfdCkmcyk7
Ci0JCQkJCWVycl9hdCArPSBzaXplb2Yocyk7Ci0JCQkJCWlmIChwbGVuID4gc2l6ZW9mKHRlbXBi
dWYpKSB7Ci0JCQkJCQlwbGVuID0gc2l6ZW9mKHRlbXBidWYpOwotCQkJCQl9Ci0JCQkJCXBoZHIg
PSBzY3RwX2dldF9uZXh0X3BhcmFtKG1hdCwgYXQsIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXRl
bXBidWYsIHBsZW4pOwotCQkJCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJCQlzY3RwX21fZnJl
ZW0ob3BfZXJyKTsKLQkJCQkJCS8qCi0JCQkJCQkgKiB3ZSBhcmUgb3V0IG9mIG1lbW9yeSBidXQK
LQkJCQkJCSAqIHdlIHN0aWxsIG5lZWQgdG8gaGF2ZSBhCi0JCQkJCQkgKiBsb29rIGF0IHdoYXQg
dG8gZG8gKHRoZQotCQkJCQkJICogc3lzdGVtIGlzIGluIHRyb3VibGUKLQkJCQkJCSAqIHRob3Vn
aCkuCi0JCQkJCQkgKi8KLQkJCQkJCW9wX2VyciA9IE5VTEw7Ci0JCQkJCQlnb3RvIG1vcmVfcHJv
Y2Vzc2luZzsKLQkJCQkJfQotCQkJCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwbGVuLCAo
Y2FkZHJfdClwaGRyKTsKLQkJCQkJZXJyX2F0ICs9IHBsZW47Ci0JCQkJfQotCQkJfQotCQltb3Jl
X3Byb2Nlc3Npbmc6Ci0JCQlpZiAoKHB0eXBlICYgMHg4MDAwKSA9PSAweDAwMDApIHsKLQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgInN0b3AgcHJvY1xuIik7Ci0JCQkJcmV0dXJuIChv
cF9lcnIpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBza2lwIHRoaXMgY2h1bmsgYW5kIGNvbnRpbnVl
IHByb2Nlc3NpbmcgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm1vdmUgb25c
biIpOwotCQkJCWF0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwotCQkJfQotCQkJYnJlYWs7Ci0KLQkJ
fQotCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0LCAmcGFyYW1zLCBzaXplb2Yo
cGFyYW1zKSk7Ci0JfQotCXJldHVybiAob3BfZXJyKTsKLSBpbnZhbGlkX3NpemU6Ci0JU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJhYm9ydCBmbGFnIHNldFxuIik7Ci0JKmFib3J0X3Byb2Nl
c3NpbmcgPSAxOwotCWlmICgob3BfZXJyID09IE5VTEwpICYmIHBoZHIpIHsKLQkJaW50IGxfbGVu
OwotI2lmZGVmIElORVQ2Ci0JCWxfbGVuID0gU0NUUF9NSU5fT1ZFUkhFQUQ7Ci0jZWxzZQotCQls
X2xlbiA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotI2VuZGlmCi0JCWxfbGVuICs9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JCWxfbGVuICs9ICgyICogc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKSk7Ci0JCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsX2xlbiwgMCwg
TV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAob3BfZXJyKSB7Ci0JCQlTQ1RQX0JVRl9MRU4o
b3BfZXJyKSA9IDA7Ci0jaWZkZWYgSU5FVDYKLQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBz
aXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKLSNlbHNlCi0JCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vy
ciwgc2l6ZW9mKHN0cnVjdCBpcCkpOwotI2VuZGlmCi0JCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vy
ciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0JCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7Ci0JCX0KLQl9Ci0JaWYgKChvcF9lcnIpICYm
IHBoZHIpIHsKLQkJc3RydWN0IHNjdHBfcGFyYW1oZHIgczsKLQotCQlpZiAoZXJyX2F0ICUgNCkg
ewotCQkJdWludDMyX3QgY3B0aGlzID0gMDsKLQotCQkJcGFkX25lZWRlZCA9IDQgLSAoZXJyX2F0
ICUgNCk7Ci0JCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwYWRfbmVlZGVkLCAoY2FkZHJf
dCkmY3B0aGlzKTsKLQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOwotCQl9Ci0JCXMucGFyYW1fdHlw
ZSA9IGh0b25zKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OKTsKLQkJcy5wYXJhbV9sZW5n
dGggPSBodG9ucyhzaXplb2YocykgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKTsKLQkJ
bV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9mKHMpLCAoY2FkZHJfdCkmcyk7Ci0JCWVy
cl9hdCArPSBzaXplb2Yocyk7Ci0JCS8qIE9ubHkgY29weSBiYWNrIHRoZSBwLWhkciB0aGF0IGNh
dXNlZCB0aGUgaXNzdWUgKi8KLQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSwgKGNhZGRyX3QpcGhkcik7Ci0JfQotCXJldHVybiAob3BfZXJy
KTsKLX0KLQotc3RhdGljIGludAotc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3NlcyhzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICBzdHJ1Y3QgbWJ1ZiAqaW5faW5pdHBrdCwgaW50
IG9mZnNldCwgc3RydWN0IHNvY2thZGRyICpzcmMpCi17Ci0JLyoKLQkgKiBHaXZlbiBhIElOSVQg
cGFja2V0LCBsb29rIHRocm91Z2ggdGhlIHBhY2tldCB0byB2ZXJpZnkgdGhhdCB0aGVyZQotCSAq
IGFyZSBOTyBuZXcgYWRkcmVzc2VzLiBBcyB3ZSBnbyB0aHJvdWdoIHRoZSBwYXJhbWV0ZXJzIGFk
ZCByZXBvcnRzCi0JICogb2YgYW55IHVuLXVuZGVyc3Rvb2QgcGFyYW1ldGVycyB0aGF0IHJlcXVp
cmUgYW4gZXJyb3IuICBBbHNvIHdlCi0JICogbXVzdCByZXR1cm4gKDEpIHRvIGRyb3AgdGhlIHBh
Y2tldCBpZiB3ZSBzZWUgYSB1bi11bmRlcnN0b29kCi0JICogcGFyYW1ldGVyIHRoYXQgdGVsbHMg
dXMgdG8gZHJvcCB0aGUgY2h1bmsuCi0JICovCi0Jc3RydWN0IHNvY2thZGRyICpzYV90b3VzZTsK
LQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJh
bXM7Ci0JdWludDE2X3QgcHR5cGUsIHBsZW47Ci0JdWludDhfdCBmbmQ7Ci0Jc3RydWN0IHNjdHBf
bmV0cyAqbmV0OwotCWludCBjaGVja19zcmM7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW40LCAqc2E0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJf
aW42IHNpbjYsICpzYTY7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKnNhYzsKLSNlbmRpZgotCi0jaWZkZWYgSU5FVAotCW1lbXNldCgm
c2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKLQlzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lm
ZGVmIEhBVkVfU0lOX0xFTgotCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKLSNlbmRpZgot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLQltZW1zZXQoJnNpbjYsIDAsIHNpemVvZihzaW42KSk7Ci0J
c2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQlzaW42
LnNpbjZfbGVuID0gc2l6ZW9mKHNpbjYpOwotI2VuZGlmCi0jZW5kaWYKLQkvKiBGaXJzdCB3aGF0
IGFib3V0IHRoZSBzcmMgYWRkcmVzcyBvZiB0aGUgcGt0ID8gKi8KLQljaGVja19zcmMgPSAwOwot
CXN3aXRjaCAoc3JjLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgot
CQlpZiAoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7Ci0JCQljaGVja19zcmMgPSAxOwot
CQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlp
ZiAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQljaGVja19zcmMgPSAxOwotCQl9
Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZf
Q09OTjoKLQkJaWYgKGFzb2MtPnNjb3BlLmNvbm5fYWRkcl9sZWdhbCkgewotCQkJY2hlY2tfc3Jj
ID0gMTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCS8qIFRTTkggKi8KLQkJ
YnJlYWs7Ci0JfQotCWlmIChjaGVja19zcmMpIHsKLQkJZm5kID0gMDsKLQkJVEFJTFFfRk9SRUFD
SChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCXNhID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBzcmMtPnNhX2Zh
bWlseSkgewotI2lmZGVmIElORVQKLQkJCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7
Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjNDsKLQotCQkJCQlzYTQgPSAoc3RydWN0IHNv
Y2thZGRyX2luICopc2E7Ci0JCQkJCXNyYzQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc3JjOwot
CQkJCQlpZiAoc2E0LT5zaW5fYWRkci5zX2FkZHIgPT0gc3JjNC0+c2luX2FkZHIuc19hZGRyKSB7
Ci0JCQkJCQlmbmQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzY7Ci0KLQkJCQkJc2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilzYTsKLQkJCQkJc3JjNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc3JjOwotCQkJCQlp
ZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2E2LCBzcmM2KSkgewotCQkJCQkJZm5kID0gMTsKLQkJ
CQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKLQkJCQkJc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKnNyY2M7Ci0KLQkJCQkJc2FjID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICop
c2E7Ci0JCQkJCXNyY2MgPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilzcmM7Ci0JCQkJCWlmIChz
YWMtPnNjb25uX2FkZHIgPT0gc3JjYy0+c2Nvbm5fYWRkcikgewotCQkJCQkJZm5kID0gMTsKLQkJ
CQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0JCQl9Ci0JCX0KLQkJaWYgKGZuZCA9
PSAwKSB7Ci0JCQkvKiBOZXcgYWRkcmVzcyBhZGRlZCEgbm8gbmVlZCB0byBsb29rIGZ1cnRoZXIu
ICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCS8qIE9rIHNvIGZhciBsZXRzIG11bmdlIHRo
cm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqLwotCW9mZnNldCArPSBzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9jaHVuayk7Ci0JcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBr
dCwgb2Zmc2V0LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7Ci0Jd2hpbGUgKHBoZHIpIHsKLQkJ
c2FfdG91c2UgPSBOVUxMOwotCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOwotCQlw
bGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKLQkJc3dpdGNoIChwdHlwZSkgewotI2lm
ZGVmIElORVQKLQkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJewotCQkJc3RydWN0IHNjdHBf
aXB2NGFkZHJfcGFyYW0gKnA0LCBwNF9idWY7Ci0KLQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsKLQkJCQlyZXR1cm4gKDEpOwotCQkJfQotCQkJcGhk
ciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LAotCQkJICAgIChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNF9idWYsIHNpemVvZihwNF9idWYpKTsKLQkJCWlmIChwaGRy
ID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKDEpOwotCQkJfQotCQkJaWYgKGFzb2MtPnNjb3BlLmlw
djRfYWRkcl9sZWdhbCkgewotCQkJCXA0ID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICop
cGhkcjsKLQkJCQlzaW40LnNpbl9hZGRyLnNfYWRkciA9IHA0LT5hZGRyOwotCQkJCXNhX3RvdXNl
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW40OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6Ci0JCXsKLQkJCXN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOwotCi0JCQlpZiAocGxlbiAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0K
LQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNldCwKLQkJCSAg
ICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDZfYnVmLCBzaXplb2YocDZfYnVmKSk7Ci0JCQlp
ZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWlmIChhc29jLT5z
Y29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQlwNiA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSAqKXBoZHI7Ci0JCQkJbWVtY3B5KChjYWRkcl90KSZzaW42LnNpbjZfYWRkciwgcDYtPmFk
ZHIsCi0JCQkJICAgICAgIHNpemVvZihwNi0+YWRkcikpOwotCQkJCXNhX3RvdXNlID0gKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW42OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlkZWZh
dWx0OgotCQkJc2FfdG91c2UgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNhX3RvdXNl
KSB7Ci0JCQkvKiBvaywgc2FfdG91c2UgcG9pbnRzIHRvIG9uZSB0byBjaGVjayAqLwotCQkJZm5k
ID0gMDsKLQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0J
CQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQlpZiAoc2Et
PnNhX2ZhbWlseSAhPSBzYV90b3VzZS0+c2FfZmFtaWx5KSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJ
CX0KLSNpZmRlZiBJTkVUCi0JCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJ
CQlzYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCQkJCWlmIChzYTQtPnNpbl9hZGRy
LnNfYWRkciA9PQotCQkJCQkgICAgc2luNC5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJCWZuZCA9
IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
CQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJc2E2ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilzYTsKLQkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKAotCQkJCQkg
ICAgc2E2LCAmc2luNikpIHsKLQkJCQkJCWZuZCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQot
CQkJCX0KLSNlbmRpZgotCQkJfQotCQkJaWYgKCFmbmQpIHsKLQkJCQkvKiBOZXcgYWRkciBhZGRl
ZCEgbm8gbmVlZCB0byBsb29rIGZ1cnRoZXIgKi8KLQkJCQlyZXR1cm4gKDEpOwotCQkJfQotCQl9
Ci0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJcGhkciA9IHNjdHBfZ2V0X25leHRf
cGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7Ci0JfQot
CXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHaXZlbiBhIE1CVUYgY2hhaW4gdGhhdCB3YXMgc2Vu
dCBpbnRvIHVzIGNvbnRhaW5pbmcgYW4gSU5JVC4gQnVpbGQgYQotICogSU5JVC1BQ0sgd2l0aCBD
T09LSUUgYW5kIHNlbmQgYmFjay4gV2UgYXNzdW1lIHRoYXQgdGhlIGluX2luaXRwa3QgaGFzIGRv
bmUKLSAqIGEgcHVsbHVwIHRvIGluY2x1ZGUgSVB2Ni80aGVhZGVyLCBTQ1RQIGhlYWRlciBhbmQg
aW5pdGlhbCBwYXJ0IG9mIElOSVQKLSAqIG1lc3NhZ2UgKGkuZS4gdGhlIHN0cnVjdCBzY3RwX2lu
aXRfbXNnKS4KLSAqLwotdm9pZAotc2N0cF9zZW5kX2luaXRpYXRlX2FjayhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX25ldHMgKnNyY19uZXQsIHN0cnVjdCBtYnVmICppbml0X3BrdCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2luaXRf
Y2h1bmsgKmluaXRfY2hrLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICB1aW50
OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKLSNlbmRpZgotICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQsIGludCBob2xkX2lucF9sb2Nr
KQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBtYnVmICptLCAq
bV90bXAsICptX2xhc3QsICptX2Nvb2tpZSwgKm9wX2VycjsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2Fj
a19jaHVuayAqaW5pdGFjazsKLQlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRp
b24gKmFsaTsKLQlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gKnByX3N1
cHBvcnRlZDsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgKm92ZXJfYWRkcjsKLQlzdHJ1Y3Qgc2N0cF9zY29waW5nIHNjcDsKLSNpZmRlZiBJTkVUCi0J
c3RydWN0IHNvY2thZGRyX2luICpkc3Q0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRzdDsKLQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNyYzQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc3JjOwotCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpkc3Q2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3Q7Ci0Jc3RydWN0IHNv
Y2thZGRyX2luNiAqc3JjNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc3JjOwotCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
c3RydWN0IHNvY2thZGRyX2Nvbm4gKmRzdGNvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilk
c3Q7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNyY2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nv
bm4gKilzcmM7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotI2VuZGlmCi0Jc3RydWN0
IHNvY2thZGRyICp0bzsKLQlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgc3RjOwotCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldCA9IE5VTEw7Ci0JdWludDhfdCAqc2lnbmF0dXJlID0gTlVMTDsKLQlpbnQg
Y250X2luaXRzX3RvID0gMDsKLQl1aW50MTZfdCBoaXNfbGltaXQsIGlfd2FudDsKLQlpbnQgYWJv
cnRfZmxhZzsKLQlpbnQgbmF0X2ZyaWVuZGx5ID0gMDsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHNv
Y2tldCAqc287Ci0JdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbiwgcGFy
YW1ldGVyX2xlbjsKLQotCWlmIChzdGNiKSB7Ci0JCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQl9IGVs
c2UgewotCQlhc29jID0gTlVMTDsKLQl9Ci0JaWYgKChhc29jICE9IE5VTEwpICYmCi0JICAgIChT
Q1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSkgewotCQlpZiAo
c2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3Nlcyhhc29jLCBpbml0X3BrdCwgb2Zmc2V0LCBzcmMp
KSB7Ci0JCQkvKgotCQkJICogbmV3IGFkZHJlc3Nlcywgb3V0IG9mIGhlcmUgaW4gbm9uLWNvb2tp
ZS13YWl0IHN0YXRlcwotCQkJICoKLQkJCSAqIFNlbmQgYW4gQUJPUlQsIHdpdGhvdXQgdGhlIG5l
dyBhZGRyZXNzIGVycm9yIGNhdXNlLgotCQkJICogVGhpcyBsb29rcyBubyBkaWZmZXJlbnQgdGhh
biBpZiBubyBsaXN0ZW5lcgotCQkJICogd2FzIHByZXNlbnQuCi0JCQkgKi8KLQkJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2Rl
KSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZHJlc3MgYWRkZWQiKTsKLQkJ
CXNjdHBfc2VuZF9hYm9ydChpbml0X3BrdCwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIDAsIG9wX2Vy
ciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAgICAgICAgIG1mbG93dHlw
ZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCi0jZW5kaWYKLQkJCSAgICAgICAgICAgICAgICB2cmZf
aWQsIHBvcnQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChzcmNfbmV0ICE9IE5VTEwgJiYgKHNy
Y19uZXQtPnBvcnQgIT0gcG9ydCkpIHsKLQkJCS8qCi0JCQkgKiBjaGFuZ2Ugb2YgcmVtb3RlIGVu
Y2Fwc3VsYXRpb24gcG9ydCwgb3V0IG9mIGhlcmUgaW4KLQkJCSAqIG5vbi1jb29raWUtd2FpdCBz
dGF0ZXMKLQkJCSAqCi0JCQkgKiBTZW5kIGFuIEFCT1JULCB3aXRob3V0IGFuIHNwZWNpZmljIGVy
cm9yIGNhdXNlLgotCQkJICogVGhpcyBsb29rcyBubyBkaWZmZXJlbnQgdGhhbiBpZiBubyBsaXN0
ZW5lcgotCQkJICogd2FzIHByZXNlbnQuCi0JCQkgKi8KLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJh
dGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlJlbW90ZSBlbmNhcHN1bGF0aW9uIHBvcnQgY2hhbmdl
ZCIpOwotCQkJc2N0cF9zZW5kX2Fib3J0KGluaXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwg
MCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgotCQkJICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JYWJvcnRfZmxhZyA9IDA7
Ci0Jb3BfZXJyID0gc2N0cF9hcmV0aGVyZV91bnJlY29nbml6ZWRfcGFyYW1ldGVycyhpbml0X3Br
dCwKLQkJCQkJCSAgICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsp
KSwKLQkJCQkJCSAgICAgICAmYWJvcnRfZmxhZywgKHN0cnVjdCBzY3RwX2NodW5raGRyICopaW5p
dF9jaGssICZuYXRfZnJpZW5kbHkpOwotCWlmIChhYm9ydF9mbGFnKSB7Ci0JZG9fYV9hYm9ydDoK
LQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7Ci0JCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5d
OwotCi0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiJXM6JWQgYXQgJXMiLCBfX0ZJTEVf
XywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnKTsKLQkJfQotCQlzY3RwX3NlbmRfYWJvcnQoaW5pdF9wa3QsIGlw
aGxlbiwgc3JjLCBkc3QsIHNoLAotCQkJCWluaXRfY2hrLT5pbml0LmluaXRpYXRlX3RhZywgb3Bf
ZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICBtZmxvd3R5
cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICB2cmZf
aWQsIHBvcnQpOwotCQlyZXR1cm47Ci0JfQotCW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNM
QllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0JCS8q
IE5vIG1lbW9yeSwgSU5JVCB0aW1lciB3aWxsIHJlLWF0dGVtcHQuICovCi0JCWlmIChvcF9lcnIp
Ci0JCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKLQkJcmV0dXJuOwotCX0KLQljaHVua19sZW4gPSAo
dWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKTsKLQlwYWRkaW5nX2xl
biA9IDA7Ci0KLQkvKgotCSAqIFdlIG1pZ2h0IG5vdCBvdmVyd3JpdGUgdGhlIGlkZW50aWZpY2F0
aW9uW10gY29tcGxldGVseSBhbmQgb24KLQkgKiBzb21lIHBsYXRmb3JtcyB0aW1lX2VudGVyZWQg
d2lsbCBjb250YWluIHNvbWUgcGFkZGluZy4KLQkgKiBUaGVyZWZvcmUgemVybyBvdXQgdGhlIGNv
b2tpZSB0byBhdm9pZCBwdXR0aW5nCi0JICogdW5pbml0aWFsaXplZCBtZW1vcnkgb24gdGhlIHdp
cmUuCi0JICovCi0JbWVtc2V0KCZzdGMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29r
aWUpKTsKLQotCS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0Jc3RydWN0IHRpbWV2YWwg
dGltZV9lbnRlcmVkOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ0aW1lX2VudGVyZWQp
OwotCXN0Yy50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0JLyogcG9wdWxhdGUgYW55IHRp
ZSB0YWdzICovCi0JaWYgKGFzb2MgIT0gTlVMTCkgewotCQkvKiB1bmxvY2sgYmVmb3JlIHRhZyBz
ZWxlY3Rpb25zICovCi0JCXN0Yy50aWVfdGFnX215X3Z0YWcgPSBhc29jLT5teV92dGFnX25vbmNl
OwotCQlzdGMudGllX3RhZ19wZWVyX3Z0YWcgPSBhc29jLT5wZWVyX3Z0YWdfbm9uY2U7Ci0JCXN0
Yy5jb29raWVfbGlmZSA9IGFzb2MtPmNvb2tpZV9saWZlOwotCQluZXQgPSBhc29jLT5wcmltYXJ5
X2Rlc3RpbmF0aW9uOwotCX0gZWxzZSB7Ci0JCXN0Yy50aWVfdGFnX215X3Z0YWcgPSAwOwotCQlz
dGMudGllX3RhZ19wZWVyX3Z0YWcgPSAwOwotCQkvKiBsaWZlIEkgd2lsbCBhd2FyZCB0aGlzIGNv
b2tpZSAqLwotCQlzdGMuY29va2llX2xpZmUgPSBpbnAtPnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZl
OwotCX0KLQotCS8qIGNvcHkgaW4gdGhlIHBvcnRzIGZvciBsYXRlciBjaGVjayAqLwotCXN0Yy5t
eXBvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCXN0Yy5wZWVycG9ydCA9IHNoLT5zcmNfcG9ydDsKLQot
CS8qCi0JICogSWYgd2Ugd2FudGVkIHRvIGhvbm9yIGNvb2tpZSBsaWZlIGV4dGVuc2lvbnMsIHdl
IHdvdWxkIGFkZCB0bwotCSAqIHN0Yy5jb29raWVfbGlmZS4gRm9yIG5vdyB3ZSBzaG91bGQgTk9U
IGhvbm9yIGFueSBleHRlbnNpb24KLQkgKi8KLQlzdGMuc2l0ZV9zY29wZSA9IHN0Yy5sb2NhbF9z
Y29wZSA9IHN0Yy5sb29wYmFja19zY29wZSA9IDA7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7Ci0JCXN0Yy5pcHY2X2FkZHJfbGVnYWwgPSAxOwotCQlp
ZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7Ci0JCQlzdGMuaXB2NF9hZGRyX2xlZ2FsID0gMDsK
LQkJfSBlbHNlIHsKLQkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAxOwotCQl9Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0gMDsKLSNlbmRpZgotCX0g
ZWxzZSB7Ci0JCXN0Yy5pcHY2X2FkZHJfbGVnYWwgPSAwOwotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4p
IHsKLQkJCXN0Yy5jb25uX2FkZHJfbGVnYWwgPSAxOwotCQkJc3RjLmlwdjRfYWRkcl9sZWdhbCA9
IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0gMDsKLQkJCXN0Yy5pcHY0
X2FkZHJfbGVnYWwgPSAxOwotCQl9Ci0jZWxzZQotCQlzdGMuaXB2NF9hZGRyX2xlZ2FsID0gMTsK
LSNlbmRpZgotCX0KLQlzdGMuaXB2NF9zY29wZSA9IDA7Ci0JaWYgKG5ldCA9PSBOVUxMKSB7Ci0J
CXRvID0gc3JjOwotCQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQlj
YXNlIEFGX0lORVQ6Ci0JCXsKLQkJCS8qIGxvb2t1cCBhZGRyZXNzICovCi0JCQlzdGMuYWRkcmVz
c1swXSA9IHNyYzQtPnNpbl9hZGRyLnNfYWRkcjsKLQkJCXN0Yy5hZGRyZXNzWzFdID0gMDsKLQkJ
CXN0Yy5hZGRyZXNzWzJdID0gMDsKLQkJCXN0Yy5hZGRyZXNzWzNdID0gMDsKLQkJCXN0Yy5hZGRy
X3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKLQkJCS8qIGxvY2FsIGZyb20gYWRkcmVzcyAqLwot
CQkJc3RjLmxhZGRyZXNzWzBdID0gZHN0NC0+c2luX2FkZHIuc19hZGRyOwotCQkJc3RjLmxhZGRy
ZXNzWzFdID0gMDsKLQkJCXN0Yy5sYWRkcmVzc1syXSA9IDA7Ci0JCQlzdGMubGFkZHJlc3NbM10g
PSAwOwotCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKLQkJCS8qIHNjb3Bl
X2lkIGlzIG9ubHkgZm9yIHY2ICovCi0JCQlzdGMuc2NvcGVfaWQgPSAwOwotCQkJaWYgKChJTjRf
SVNQUklWQVRFX0FERFJFU1MoJnNyYzQtPnNpbl9hZGRyKSkgfHwKLQkJCSAgICAoSU40X0lTUFJJ
VkFURV9BRERSRVNTKCZkc3Q0LT5zaW5fYWRkcikpKXsKLQkJCQlzdGMuaXB2NF9zY29wZSA9IDE7
Ci0JCQl9Ci0JCQkvKiBNdXN0IHVzZSB0aGUgYWRkcmVzcyBpbiB0aGlzIGNhc2UgKi8KLQkJCWlm
IChzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChzcmMsIHZyZl9pZCkpIHsKLQkJCQlzdGMu
bG9vcGJhY2tfc2NvcGUgPSAxOwotCQkJCXN0Yy5pcHY0X3Njb3BlID0gMTsKLQkJCQlzdGMuc2l0
ZV9zY29wZSA9IDE7Ci0JCQkJc3RjLmxvY2FsX3Njb3BlID0gMDsKLQkJCX0KLQkJCWJyZWFrOwot
CQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQl7Ci0JCQlzdGMu
YWRkcl90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7Ci0JCQltZW1jcHkoJnN0Yy5hZGRyZXNzLCAm
c3JjNi0+c2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgKCgoX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAwMDApICYmIChfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDQwMDApKSB8fCAoX19GcmVlQlNEX3ZlcnNpb24gPiA5MDAwMDApKQot
CQkJc3RjLnNjb3BlX2lkID0gbnRvaHMoaW42X2dldHNjb3BlKCZzcmM2LT5zaW42X2FkZHIpKTsK
LSNlbHNlCi0JCQlzdGMuc2NvcGVfaWQgPSAwOwotI2VuZGlmCi0JCQlpZiAoc2N0cF9pc19hZGRy
ZXNzX29uX2xvY2FsX2hvc3Qoc3JjLCB2cmZfaWQpKSB7Ci0JCQkJc3RjLmxvb3BiYWNrX3Njb3Bl
ID0gMTsKLQkJCQlzdGMubG9jYWxfc2NvcGUgPSAwOwotCQkJCXN0Yy5zaXRlX3Njb3BlID0gMTsK
LQkJCQlzdGMuaXB2NF9zY29wZSA9IDE7Ci0JCQl9IGVsc2UgaWYgKElONl9JU19BRERSX0xJTktM
T0NBTCgmc3JjNi0+c2luNl9hZGRyKSB8fAotCQkJICAgICAgICAgICBJTjZfSVNfQUREUl9MSU5L
TE9DQUwoJmRzdDYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZSBuZXcgZGVz
dGluYXRpb24gb3Igc291cmNlIGlzIGEKLQkJCQkgKiBMSU5LX0xPQ0FMIHdlIG11c3QgaGF2ZSBj
b21tb24gYm90aCBzaXRlIGFuZAotCQkJCSAqIGxvY2FsIHNjb3BlLiBEb24ndCBzZXQgbG9jYWwg
c2NvcGUgdGhvdWdoCi0JCQkJICogc2luY2Ugd2UgbXVzdCBkZXBlbmQgb24gdGhlIHNvdXJjZSB0
byBiZQotCQkJCSAqIGFkZGVkIGltcGxpY2l0bHkuIFdlIGNhbm5vdCBhc3N1cmUganVzdAotCQkJ
CSAqIGJlY2F1c2Ugd2Ugc2hhcmUgb25lIGxpbmsgdGhhdCBhbGwgbGlua3MgYXJlCi0JCQkJICog
Y29tbW9uLgotCQkJCSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkJCS8qIE1hYyBPUyBY
IGN1cnJlbnRseSBkb2Vzbid0IGhhdmUgaW42X2dldHNjb3BlKCkgKi8KLQkJCQlzdGMuc2NvcGVf
aWQgPSBzcmM2LT5zaW42X2FkZHIuczZfYWRkcjE2WzFdOwotI2VuZGlmCi0JCQkJc3RjLmxvY2Fs
X3Njb3BlID0gMDsKLQkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7Ci0JCQkJc3RjLmlwdjRfc2NvcGUg
PSAxOwotCQkJCS8qCi0JCQkJICogd2Ugc3RhcnQgY291bnRpbmcgZm9yIHRoZSBwcml2YXRlIGFk
ZHJlc3MKLQkJCQkgKiBzdHVmZiBhdCAxLiBzaW5jZSB0aGUgbGluayBsb2NhbCB3ZQotCQkJCSAq
IHNvdXJjZSBmcm9tIHdvbid0IHNob3cgdXAgaW4gb3VyIHNjb3BlZAotCQkJCSAqIGNvdW50Lgot
CQkJCSAqLwotCQkJCWNudF9pbml0c190byA9IDE7Ci0JCQkJLyogcHVsbCBvdXQgdGhlIHNjb3Bl
X2lkIGZyb20gaW5jb21pbmcgcGt0ICovCi0JCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVM
T0NBTCgmc3JjNi0+c2luNl9hZGRyKSB8fAotCQkJICAgICAgICAgICBJTjZfSVNfQUREUl9TSVRF
TE9DQUwoJmRzdDYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZSBuZXcgZGVz
dGluYXRpb24gb3Igc291cmNlIGlzCi0JCQkJICogU0lURV9MT0NBTCB0aGVuIHdlIG11c3QgaGF2
ZSBzaXRlIHNjb3BlIGluCi0JCQkJICogY29tbW9uLgotCQkJCSAqLwotCQkJCXN0Yy5zaXRlX3Nj
b3BlID0gMTsKLQkJCX0KLQkJCW1lbWNweSgmc3RjLmxhZGRyZXNzLCAmZHN0Ni0+c2luNl9hZGRy
LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfSVBW
Nl9BRERSRVNTOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQkvKiBsb29rdXAgYWRkcmVzcyAqLwotCQkJ
c3RjLmFkZHJlc3NbMF0gPSAwOwotCQkJc3RjLmFkZHJlc3NbMV0gPSAwOwotCQkJc3RjLmFkZHJl
c3NbMl0gPSAwOwotCQkJc3RjLmFkZHJlc3NbM10gPSAwOwotCQkJbWVtY3B5KCZzdGMuYWRkcmVz
cywgJnNyY2Nvbm4tPnNjb25uX2FkZHIsIHNpemVvZih2b2lkICopKTsKLQkJCXN0Yy5hZGRyX3R5
cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKLQkJCS8qIGxvY2FsIGZyb20gYWRkcmVzcyAqLwotCQkJ
c3RjLmxhZGRyZXNzWzBdID0gMDsKLQkJCXN0Yy5sYWRkcmVzc1sxXSA9IDA7Ci0JCQlzdGMubGFk
ZHJlc3NbMl0gPSAwOwotCQkJc3RjLmxhZGRyZXNzWzNdID0gMDsKLQkJCW1lbWNweSgmc3RjLmxh
ZGRyZXNzLCAmZHN0Y29ubi0+c2Nvbm5fYWRkciwgc2l6ZW9mKHZvaWQgKikpOwotCQkJc3RjLmxh
ZGRyX3R5cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKLQkJCS8qIHNjb3BlX2lkIGlzIG9ubHkgZm9y
IHY2ICovCi0JCQlzdGMuc2NvcGVfaWQgPSAwOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlk
ZWZhdWx0OgotCQkJLyogVFNOSCAqLwotCQkJZ290byBkb19hX2Fib3J0OwotCQkJYnJlYWs7Ci0J
CX0KLQl9IGVsc2UgewotCQkvKiBzZXQgdGhlIHNjb3BlIHBlciB0aGUgZXhpc3RpbmcgdGNiICov
Ci0KLSNpZmRlZiBJTkVUNgotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OwotI2VuZGlmCi0KLQkJ
c3RjLmxvb3BiYWNrX3Njb3BlID0gYXNvYy0+c2NvcGUubG9vcGJhY2tfc2NvcGU7Ci0JCXN0Yy5p
cHY0X3Njb3BlID0gYXNvYy0+c2NvcGUuaXB2NF9sb2NhbF9zY29wZTsKLQkJc3RjLnNpdGVfc2Nv
cGUgPSBhc29jLT5zY29wZS5zaXRlX3Njb3BlOwotCQlzdGMubG9jYWxfc2NvcGUgPSBhc29jLT5z
Y29wZS5sb2NhbF9zY29wZTsKLSNpZmRlZiBJTkVUNgotCQkvKiBXaHkgZG8gd2Ugbm90IGNvbnNp
ZGVyIElQdjQgTEwgYWRkcmVzc2VzPyAqLwotCQlUQUlMUV9GT1JFQUNIKGxuZXQsICZhc29jLT5u
ZXRzLCBzY3RwX25leHQpIHsKLQkJCWlmIChsbmV0LT5yby5fbF9hZGRyLnNpbjYuc2luNl9mYW1p
bHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZsbmV0LT5y
by5fbF9hZGRyLnNpbjYuc2luNl9hZGRyKSkgewotCQkJCQkvKgotCQkJCQkgKiBpZiB3ZSBoYXZl
IGEgTEwgYWRkcmVzcywgc3RhcnQKLQkJCQkJICogY291bnRpbmcgYXQgMS4KLQkJCQkJICovCi0J
CQkJCWNudF9pbml0c190byA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0jZW5kaWYKLQkJLyogdXNl
IHRoZSBuZXQgcG9pbnRlciAqLwotCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5f
bF9hZGRyOwotCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNhc2Ug
QUZfSU5FVDoKLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKLQkJCXN0Yy5hZGRy
ZXNzWzBdID0gc2luLT5zaW5fYWRkci5zX2FkZHI7Ci0JCQlzdGMuYWRkcmVzc1sxXSA9IDA7Ci0J
CQlzdGMuYWRkcmVzc1syXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1szXSA9IDA7Ci0JCQlzdGMuYWRk
cl90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7Ci0JCQlpZiAobmV0LT5zcmNfYWRkcl9zZWxlY3Rl
ZCA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBzdHJhbmdlIGNhc2UgaGVyZSwgdGhlIElOSVQgc2hv
dWxkIGhhdmUKLQkJCQkgKiBkaWQgdGhlIHNlbGVjdGlvbi4KLQkJCQkgKi8KLQkJCQluZXQtPnJv
Ll9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAsCi0JCQkJCQkJCQkJ
c3RjYiwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAotCQkJCQkJCQkJCW5ldCwgMCwgdnJmX2lk
KTsKLQkJCQlpZiAobmV0LT5yby5fc19hZGRyID09IE5VTEwpCi0JCQkJCXJldHVybjsKLQotCQkJ
CW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOwotCi0JCQl9Ci0JCQlzdGMubGFkZHJlc3NbMF0g
PSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyLnNfYWRkcjsKLQkJCXN0Yy5s
YWRkcmVzc1sxXSA9IDA7Ci0JCQlzdGMubGFkZHJlc3NbMl0gPSAwOwotCQkJc3RjLmxhZGRyZXNz
WzNdID0gMDsKLQkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7Ci0JCQkvKiBz
Y29wZV9pZCBpcyBvbmx5IGZvciB2NiAqLwotCQkJc3RjLnNjb3BlX2lkID0gMDsKLQkJCWJyZWFr
OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXRvOwotCQkJbWVtY3B5KCZzdGMuYWRkcmVzcywgJnNpbjYtPnNp
bjZfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlzdGMuYWRk
cl90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7Ci0JCQlzdGMuc2NvcGVfaWQgPSBzaW42LT5zaW42
X3Njb3BlX2lkOwotCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgewotCQkJCS8q
Ci0JCQkJICogc3RyYW5nZSBjYXNlIGhlcmUsIHRoZSBJTklUIHNob3VsZCBoYXZlCi0JCQkJICog
ZG9uZSB0aGUgc2VsZWN0aW9uLgotCQkJCSAqLwotCQkJCW5ldC0+cm8uX3NfYWRkciA9IHNjdHBf
c291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJCQkJCQkJCQlzdGNiLCAoc2N0cF9yb3V0
ZV90ICopJm5ldC0+cm8sCi0JCQkJCQkJCQkJbmV0LCAwLCB2cmZfaWQpOwotCQkJCWlmIChuZXQt
PnJvLl9zX2FkZHIgPT0gTlVMTCkKLQkJCQkJcmV0dXJuOwotCi0JCQkJbmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCA9IDE7Ci0JCQl9Ci0JCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJm5ldC0+cm8uX3Nf
YWRkci0+YWRkcmVzcy5zaW42LnNpbjZfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGlu
Nl9hZGRyKSk7Ci0JCQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfSVBWNl9BRERSRVNTOwotCQkJYnJl
YWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNhc2UgQUZfQ09OTjoK
LQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG87Ci0JCQlzdGMuYWRkcmVzc1sw
XSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1sxXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1syXSA9IDA7Ci0J
CQlzdGMuYWRkcmVzc1szXSA9IDA7Ci0JCQltZW1jcHkoJnN0Yy5hZGRyZXNzLCAmc2Nvbm4tPnNj
b25uX2FkZHIsIHNpemVvZih2b2lkICopKTsKLQkJCXN0Yy5hZGRyX3R5cGUgPSBTQ1RQX0NPTk5f
QUREUkVTUzsKLQkJCXN0Yy5sYWRkcmVzc1swXSA9IDA7Ci0JCQlzdGMubGFkZHJlc3NbMV0gPSAw
OwotCQkJc3RjLmxhZGRyZXNzWzJdID0gMDsKLQkJCXN0Yy5sYWRkcmVzc1szXSA9IDA7Ci0JCQlt
ZW1jcHkoJnN0Yy5sYWRkcmVzcywgJnNjb25uLT5zY29ubl9hZGRyLCBzaXplb2Yodm9pZCAqKSk7
Ci0JCQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfQ09OTl9BRERSRVNTOwotCQkJc3RjLnNjb3BlX2lk
ID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCX0KLQl9Ci0JLyogTm93IGxldHMgcHV0IHRoZSBT
Q1RQIGhlYWRlciBpbiBwbGFjZSAqLwotCWluaXRhY2sgPSBtdG9kKG0sIHN0cnVjdCBzY3RwX2lu
aXRfYWNrX2NodW5rICopOwotCS8qIFNhdmUgaXQgb2ZmIGZvciBxdWljayByZWYgKi8KLQlzdGMu
cGVlcnNfdnRhZyA9IG50b2hsKGluaXRfY2hrLT5pbml0LmluaXRpYXRlX3RhZyk7Ci0JLyogd2hv
IGFyZSB3ZSAqLwotCW1lbWNweShzdGMuaWRlbnRpZmljYXRpb24sIFNDVFBfVkVSU0lPTl9TVFJJ
TkcsCi0JICAgICAgIG1pbihzdHJsZW4oU0NUUF9WRVJTSU9OX1NUUklORyksIHNpemVvZihzdGMu
aWRlbnRpZmljYXRpb24pKSk7Ci0JbWVtc2V0KHN0Yy5yZXNlcnZlZCwgMCwgU0NUUF9SRVNFUlZF
X1NQQUNFKTsKLQkvKiBub3cgdGhlIGNodW5rIGhlYWRlciAqLwotCWluaXRhY2stPmNoLmNodW5r
X3R5cGUgPSBTQ1RQX0lOSVRJQVRJT05fQUNLOwotCWluaXRhY2stPmNoLmNodW5rX2ZsYWdzID0g
MDsKLQkvKiBmaWxsIGluIGxhdGVyIGZyb20gbWJ1ZiB3ZSBidWlsZCAqLwotCWluaXRhY2stPmNo
LmNodW5rX2xlbmd0aCA9IDA7Ci0JLyogcGxhY2UgaW4gbXkgdGFnICovCi0JaWYgKChhc29jICE9
IE5VTEwpICYmCi0JICAgICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09L
SUVfV0FJVCkgfHwKLQkgICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0lO
VVNFKSB8fAotCSAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lF
X0VDSE9FRCkpKSB7Ci0JCS8qIHJlLXVzZSB0aGUgdi10YWdzIGFuZCBpbml0LXNlcSBoZXJlICov
Ci0JCWluaXRhY2stPmluaXQuaW5pdGlhdGVfdGFnID0gaHRvbmwoYXNvYy0+bXlfdnRhZyk7Ci0J
CWluaXRhY2stPmluaXQuaW5pdGlhbF90c24gPSBodG9ubChhc29jLT5pbml0X3NlcV9udW1iZXIp
OwotCX0gZWxzZSB7Ci0JCXVpbnQzMl90IHZ0YWcsIGl0c247Ci0JCWlmIChob2xkX2lucF9sb2Nr
KSB7Ci0JCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQl9Ci0JCWlmIChhc29jKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgmYXNvYy0+cmVmY250LCAx
KTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJbmV3X3RhZzoKLQkJCXZ0YWcgPSBzY3Rw
X3NlbGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwgc2gtPnNyY19wb3J0LCAxKTsKLQkJ
CWlmICgoYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpICAmJiAodnRhZyA9PSBhc29jLT5teV92dGFn
KSkgewotCQkJCS8qIEdvdCBhIGR1cGxpY2F0ZSB2dGFnIG9uIHNvbWUgZ3V5IGJlaGluZCBhIG5h
dAotCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgaXQuCi0JCQkJICovCi0JCQkJZ290byBu
ZXdfdGFnOwotCQkJfQotCQkJaW5pdGFjay0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9ubCh2dGFn
KTsKLQkJCS8qIGdldCBhIFRTTiB0byB1c2UgdG9vICovCi0JCQlpdHNuID0gc2N0cF9zZWxlY3Rf
aW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCk7Ci0JCQlpbml0YWNrLT5pbml0LmluaXRpYWxfdHNu
ID0gaHRvbmwoaXRzbik7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX2FkZF9p
bnQoJmFzb2MtPnJlZmNudCwgLTEpOwotCQl9IGVsc2UgewotCQkJdnRhZyA9IHNjdHBfc2VsZWN0
X2FfdGFnKGlucCwgaW5wLT5zY3RwX2xwb3J0LCBzaC0+c3JjX3BvcnQsIDEpOwotCQkJaW5pdGFj
ay0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9ubCh2dGFnKTsKLQkJCS8qIGdldCBhIFRTTiB0byB1
c2UgdG9vICovCi0JCQlpbml0YWNrLT5pbml0LmluaXRpYWxfdHNuID0gaHRvbmwoc2N0cF9zZWxl
Y3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCkpOwotCQl9Ci0JCWlmIChob2xkX2lucF9sb2Nr
KSB7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
LQkJfQotCX0KLQkvKiBzYXZlIGF3YXkgbXkgdGFnIHRvICovCi0Jc3RjLm15X3Z0YWcgPSBpbml0
YWNrLT5pbml0LmluaXRpYXRlX3RhZzsKLQotCS8qIHNldCB1cCBzb21lIG9mIHRoZSBjcmVkaXRz
LiAqLwotCXNvID0gaW5wLT5zY3RwX3NvY2tldDsKLQlpZiAoc28gPT0gTlVMTCkgewotCQkvKiBt
ZW1vcnkgcHJvYmxlbSAqLwotCQlzY3RwX21fZnJlZW0obSk7Ci0JCXJldHVybjsKLQl9IGVsc2Ug
ewotCQlpbml0YWNrLT5pbml0LmFfcnduZCA9IGh0b25sKG1heChTQ1RQX1NCX0xJTUlUX1JDVihz
byksIFNDVFBfTUlOSU1BTF9SV05EKSk7Ci0JfQotCS8qIHNldCB3aGF0IEkgd2FudCAqLwotCWhp
c19saW1pdCA9IG50b2hzKGluaXRfY2hrLT5pbml0Lm51bV9pbmJvdW5kX3N0cmVhbXMpOwotCS8q
IGNob29zZSB3aGF0IEkgd2FudCAqLwotCWlmIChhc29jICE9IE5VTEwpIHsKLQkJaWYgKGFzb2Mt
PnN0cmVhbW91dGNudCA+IGFzb2MtPnByZV9vcGVuX3N0cmVhbXMpIHsKLQkJCWlfd2FudCA9IGFz
b2MtPnN0cmVhbW91dGNudDsKLQkJfSBlbHNlIHsKLQkJCWlfd2FudCA9IGFzb2MtPnByZV9vcGVu
X3N0cmVhbXM7Ci0JCX0KLQl9IGVsc2UgewotCQlpX3dhbnQgPSBpbnAtPnNjdHBfZXAucHJlX29w
ZW5fc3RyZWFtX2NvdW50OwotCX0KLQlpZiAoaGlzX2xpbWl0IDwgaV93YW50KSB7Ci0JCS8qIEkg
V2FudCBtb3JlIDo8ICovCi0JCWluaXRhY2stPmluaXQubnVtX291dGJvdW5kX3N0cmVhbXMgPSBp
bml0X2Noay0+aW5pdC5udW1faW5ib3VuZF9zdHJlYW1zOwotCX0gZWxzZSB7Ci0JCS8qIEkgY2Fu
IGhhdmUgd2hhdCBJIHdhbnQgOj4gKi8KLQkJaW5pdGFjay0+aW5pdC5udW1fb3V0Ym91bmRfc3Ry
ZWFtcyA9IGh0b25zKGlfd2FudCk7Ci0JfQotCS8qIHRlbGwgaGltIGhpcyBsaW1pdC4gKi8KLQlp
bml0YWNrLT5pbml0Lm51bV9pbmJvdW5kX3N0cmVhbXMgPQotCQlodG9ucyhpbnAtPnNjdHBfZXAu
bWF4X29wZW5fc3RyZWFtc19pbnRvbWUpOwotCi0JLyogYWRhcHRhdGlvbiBsYXllciBpbmRpY2F0
aW9uIHBhcmFtZXRlciAqLwotCWlmIChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRp
Y2F0b3JfcHJvdmlkZWQpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3Ry
dWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uKTsKLQkJYWxpID0gKHN0cnVjdCBz
Y3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1
bmtfbGVuKTsKLQkJYWxpLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9VTFBfQURBUFRBVElP
Tik7Ci0JCWFsaS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCWFs
aS0+aW5kaWNhdGlvbiA9IGh0b25sKGlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGlj
YXRvcik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEVDTiBwYXJh
bWV0ZXIgKi8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5lY25fc3VwcG9ydGVkID09
IDEpKSB8fAotCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+ZWNuX3N1cHBvcnRlZCA9PSAx
KSkpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfcGFy
YW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShtdG9kKG0sIGNhZGRyX3Qp
ICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0VDTl9DQVBBQkxF
KTsKLQkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQljaHVua19s
ZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9Ci0KLQkvKiBQUi1TQ1RQIHN1cHBvcnRlZCBwYXJhbWV0
ZXIgKi8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5wcnNjdHBfc3VwcG9ydGVkID09
IDEpKSB8fAotCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cHJzY3RwX3N1cHBvcnRlZCA9
PSAxKSkpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBf
cGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShtdG9kKG0sIGNhZGRy
X3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1BSU0NUUF9T
VVBQT1JURUQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0J
CWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEFkZCBOQVQgZnJpZW5kbHkg
cGFyYW1ldGVyICovCi0JaWYgKG5hdF9mcmllbmRseSkgewotCQlwYXJhbWV0ZXJfbGVuID0gKHVp
bnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCXBoID0gKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwotCQlwaC0+cGFyYW1f
dHlwZSA9IGh0b25zKFNDVFBfSEFTX05BVF9TVVBQT1JUKTsKLQkJcGgtPnBhcmFtX2xlbmd0aCA9
IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9
Ci0KLQkvKiBBbmQgbm93IHRlbGwgdGhlIHBlZXIgd2hpY2ggZXh0ZW5zaW9ucyB3ZSBzdXBwb3J0
ICovCi0JbnVtX2V4dCA9IDA7Ci0JcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRl
ZF9jaHVua190eXBlc19wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQlp
ZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5wcnNjdHBfc3VwcG9ydGVkID09IDEpKSB8fAot
CSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cHJzY3RwX3N1cHBvcnRlZCA9PSAxKSkpIHsK
LQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9GT1JXQVJEX0NV
TV9UU047Ci0JCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9
PSAxKSkgfHwKLQkJICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5pZGF0YV9zdXBwb3J0ZWQg
PT0gMSkpKSB7Ci0JCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQ
X0lGT1JXQVJEX0NVTV9UU047Ci0JCX0KLQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNv
Yy0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpIHx8Ci0JICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5w
LT5hdXRoX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tu
dW1fZXh0KytdID0gU0NUUF9BVVRIRU5USUNBVElPTjsKLQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxM
KSAmJiAoYXNvYy0+YXNjb25mX3N1cHBvcnRlZCA9PSAxKSkgfHwKLQkgICAgKChhc29jID09IE5V
TEwpICYmIChpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkpKSB7Ci0JCXByX3N1cHBvcnRlZC0+
Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfQVNDT05GOwotCQlwcl9zdXBwb3J0ZWQtPmNo
dW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0FTQ09ORl9BQ0s7Ci0JfQotCWlmICgoKGFzb2Mg
IT0gTlVMTCkgJiYgKGFzb2MtPnJlY29uZmlnX3N1cHBvcnRlZCA9PSAxKSkgfHwKLQkgICAgKChh
c29jID09IE5VTEwpICYmIChpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJf
c3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9TVFJFQU1fUkVTRVQ7Ci0J
fQotCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSkg
fHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSkp
IHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9JREFUQTsK
LQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+bnJzYWNrX3N1cHBvcnRlZCA9PSAx
KSkgfHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPm5yc2Fja19zdXBwb3J0ZWQgPT0g
MSkpKSB7Ci0JCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfTlJf
U0VMRUNUSVZFX0FDSzsKLQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+cGt0ZHJv
cF9zdXBwb3J0ZWQgPT0gMSkpIHx8Ci0JICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5wa3Rk
cm9wX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1f
ZXh0KytdID0gU0NUUF9QQUNLRVRfRFJPUFBFRDsKLQl9Ci0JaWYgKG51bV9leHQgPiAwKSB7Ci0J
CXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9j
aHVua190eXBlc19wYXJhbSkgKyBudW1fZXh0OwotCQlwcl9zdXBwb3J0ZWQtPnBoLnBhcmFtX3R5
cGUgPSBodG9ucyhTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQpOwotCQlwcl9zdXBwb3J0ZWQtPnBo
LnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQlwYWRkaW5nX2xlbiA9IFND
VFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQkJY2h1bmtfbGVuICs9
IHBhcmFtZXRlcl9sZW47Ci0JfQotCi0JLyogYWRkIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMg
Ki8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5hdXRoX3N1cHBvcnRlZCA9PSAxKSkg
fHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmF1dGhfc3VwcG9ydGVkID09IDEpKSkg
ewotCQlzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqcmFuZHA7Ci0JCXN0cnVjdCBzY3RwX2F1dGhf
aG1hY19hbGdvICpobWFjczsKLQkJc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICpjaHVua3M7
Ci0KLQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkg
KyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKLQkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xl
bjsKLQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJfQotCQkvKiBnZW5lcmF0ZSBhbmQgYWRkIFJBTkRP
TSBwYXJhbWV0ZXIgKi8KLQkJcmFuZHAgPSAoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20gKikobXRv
ZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qp
c2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tKSArCi0JCSAgICAgICAgICAgICAgICBTQ1RQ
X0FVVEhfUkFORE9NX1NJWkVfREVGQVVMVDsKLQkJcmFuZHAtPnBoLnBhcmFtX3R5cGUgPSBodG9u
cyhTQ1RQX1JBTkRPTSk7Ci0JCXJhbmRwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0
ZXJfbGVuKTsKLQkJU0NUUF9SRUFEX1JBTkRPTShyYW5kcC0+cmFuZG9tX2RhdGEsIFNDVFBfQVVU
SF9SQU5ET01fU0laRV9ERUZBVUxUKTsKLQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJh
bWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVu
OwotCi0JCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKLQkJCW1lbXNldChtdG9kKG0sIGNhZGRyX3Qp
ICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0JCQljaHVua19sZW4gKz0gcGFkZGluZ19s
ZW47Ci0JCQlwYWRkaW5nX2xlbiA9IDA7Ci0JCX0KLQkJLyogYWRkIEhNQUNfQUxHTyBwYXJhbWV0
ZXIgKi8KLQkJaG1hY3MgPSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKikobXRvZChtLCBj
YWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvKSArCi0JCSAgICAgICAgICAgICAgICBzY3RwX3Nl
cmlhbGl6ZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MsCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWhtYWNzLT5obWFjX2lkcyk7
Ci0JCWhtYWNzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9ITUFDX0xJU1QpOwotCQlobWFj
cy0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCXBhZGRpbmdfbGVu
ID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJfbGVuOwotCQljaHVua19s
ZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQotCQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCQltZW1z
ZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4pOwotCQkJY2h1
bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJcGFkZGluZ19sZW4gPSAwOwotCQl9Ci0JCS8qIGFk
ZCBDSFVOS1MgcGFyYW1ldGVyICovCi0JCWNodW5rcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5r
X2xpc3QgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBhcmFtZXRlcl9sZW4g
PSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCkgKwotCQkgICAg
ICAgICAgICAgICAgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoaW5wLT5zY3RwX2VwLmxvY2Fs
X2F1dGhfY2h1bmtzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2h1bmtzLT5jaHVua190eXBlcyk7Ci0JCWNodW5rcy0+cGgucGFyYW1fdHlwZSA9IGh0b25z
KFNDVFBfQ0hVTktfTElTVCk7Ci0JCWNodW5rcy0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFy
YW1ldGVyX2xlbik7Ci0JCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikg
LSBwYXJhbWV0ZXJfbGVuOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9Ci0JU0NU
UF9CVUZfTEVOKG0pID0gY2h1bmtfbGVuOwotCW1fbGFzdCA9IG07Ci0JLyogbm93IHRoZSBhZGRy
ZXNzZXMgKi8KLQkvKiBUbyBvcHRpbWl6ZSB0aGlzIHdlIGNvdWxkIHB1dCB0aGUgc2NvcGluZyBz
dHVmZgotCSAqIGludG8gYSBzdHJ1Y3R1cmUgYW5kIHJlbW92ZSB0aGUgaW5kaXZpZHVhbCB1aW50
OCdzIGZyb20KLQkgKiB0aGUgc3RjIHN0cnVjdHVyZS4gVGhlbiB3ZSBjb3VsZCBqdXN0IHNpZmEg
aW4gdGhlCi0JICogYWRkcmVzcyB3aXRoaW4gdGhlIHN0Yy4uIGJ1dCBmb3Igbm93IHRoaXMgaXMg
YSBxdWljawotCSAqIGhhY2sgdG8gZ2V0IHRoZSBhZGRyZXNzIHN0dWZmIHRlYXNlZCBhcGFydC4K
LQkgKi8KLQlzY3AuaXB2NF9hZGRyX2xlZ2FsID0gc3RjLmlwdjRfYWRkcl9sZWdhbDsKLQlzY3Au
aXB2Nl9hZGRyX2xlZ2FsID0gc3RjLmlwdjZfYWRkcl9sZWdhbDsKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0Jc2NwLmNvbm5fYWRkcl9sZWdhbCA9IHN0Yy5jb25uX2FkZHJfbGVnYWw7Ci0j
ZW5kaWYKLQlzY3AubG9vcGJhY2tfc2NvcGUgPSBzdGMubG9vcGJhY2tfc2NvcGU7Ci0Jc2NwLmlw
djRfbG9jYWxfc2NvcGUgPSBzdGMuaXB2NF9zY29wZTsKLQlzY3AubG9jYWxfc2NvcGUgPSBzdGMu
bG9jYWxfc2NvcGU7Ci0Jc2NwLnNpdGVfc2NvcGUgPSBzdGMuc2l0ZV9zY29wZTsKLQltX2xhc3Qg
PSBzY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9pYShpbnAsIHN0Y2IsICZzY3AsIG1fbGFzdCwKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfaW5pdHNfdG8sCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZGRpbmdfbGVuLCAmY2h1bmtfbGVuKTsK
LQkvKiBwYWRkaW5nX2xlbiBjYW4gb25seSBiZSBwb3NpdGl2ZSwgaWYgbm8gYWRkcmVzc2VzIGhh
dmUgYmVlbiBhZGRlZCAqLwotCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKLQkJbWVtc2V0KG10b2Qo
bSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKLQkJY2h1bmtfbGVuICs9
IHBhZGRpbmdfbGVuOwotCQlTQ1RQX0JVRl9MRU4obSkgKz0gcGFkZGluZ19sZW47Ci0JCXBhZGRp
bmdfbGVuID0gMDsKLQl9Ci0KLQkvKiB0YWNrIG9uIHRoZSBvcGVyYXRpb25hbCBlcnJvciBpZiBw
cmVzZW50ICovCi0JaWYgKG9wX2VycikgewotCQlwYXJhbWV0ZXJfbGVuID0gMDsKLQkJZm9yICht
X3RtcCA9IG9wX2VycjsgbV90bXAgIT0gTlVMTDsgbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1fdG1w
KSkgewotCQkJcGFyYW1ldGVyX2xlbiArPSBTQ1RQX0JVRl9MRU4obV90bXApOwotCQl9Ci0JCXBh
ZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJfbGVuOwot
CQlTQ1RQX0JVRl9ORVhUKG1fbGFzdCkgPSBvcF9lcnI7Ci0JCXdoaWxlIChTQ1RQX0JVRl9ORVhU
KG1fbGFzdCkgIT0gTlVMTCkgewotCQkJbV9sYXN0ID0gU0NUUF9CVUZfTkVYVChtX2xhc3QpOwot
CQl9Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQlpZiAocGFkZGluZ19sZW4g
PiAwKSB7Ci0JCW1fbGFzdCA9IHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0LCBwYWRkaW5nX2xl
bik7Ci0JCWlmIChtX2xhc3QgPT0gTlVMTCkgewotCQkJLyogSG91c3RvbiB3ZSBoYXZlIGEgcHJv
YmxlbSwgbm8gc3BhY2UgKi8KLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCXJldHVybjsKLQkJfQot
CQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47Ci0JCXBhZGRpbmdfbGVuID0gMDsKLQl9Ci0JLyog
Tm93IHdlIG11c3QgYnVpbGQgYSBjb29raWUgKi8KLQltX2Nvb2tpZSA9IHNjdHBfYWRkX2Nvb2tp
ZShpbml0X3BrdCwgb2Zmc2V0LCBtLCAwLCAmc3RjLCAmc2lnbmF0dXJlKTsKLQlpZiAobV9jb29r
aWUgPT0gTlVMTCkgewotCQkvKiBtZW1vcnkgcHJvYmxlbSAqLwotCQlzY3RwX21fZnJlZW0obSk7
Ci0JCXJldHVybjsKLQl9Ci0JLyogTm93IGFwcGVuZCB0aGUgY29va2llIHRvIHRoZSBlbmQgYW5k
IHVwZGF0ZSB0aGUgc3BhY2Uvc2l6ZSAqLwotCVNDVFBfQlVGX05FWFQobV9sYXN0KSA9IG1fY29v
a2llOwotCXBhcmFtZXRlcl9sZW4gPSAwOwotCWZvciAobV90bXAgPSBtX2Nvb2tpZTsgbV90bXAg
IT0gTlVMTDsgbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1fdG1wKSkgewotCQlwYXJhbWV0ZXJfbGVu
ICs9IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBO
VUxMKSB7Ci0JCQltX2xhc3QgPSBtX3RtcDsKLQkJfQotCX0KLQlwYWRkaW5nX2xlbiA9IFNDVFBf
U0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQljaHVua19sZW4gKz0gcGFy
YW1ldGVyX2xlbjsKLQotCS8qIFBsYWNlIGluIHRoZSBzaXplLCBidXQgd2UgZG9uJ3QgaW5jbHVk
ZQotCSAqIHRoZSBsYXN0IHBhZCAoaWYgYW55KSBpbiB0aGUgSU5JVC1BQ0suCi0JICovCi0JaW5p
dGFjay0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKLQotCS8qIFRpbWUgdG8g
c2lnbiB0aGUgY29va2llLCB3ZSBkb24ndCBzaWduIG92ZXIgdGhlIGNvb2tpZQotCSAqIHNpZ25h
dHVyZSB0aG91Z2ggdGh1cyB3ZSBzZXQgdHJhaWxlci4KLQkgKi8KLQkodm9pZClzY3RwX2htYWNf
bShTQ1RQX0hNQUMsCi0JCQkgICh1aW50OF90ICopaW5wLT5zY3RwX2VwLnNlY3JldF9rZXlbKGlu
dCkoaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcildLAotCQkJICBTQ1RQX1NFQ1JF
VF9TSVpFLCBtX2Nvb2tpZSwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwKLQkJCSAgKHVp
bnQ4X3QgKilzaWduYXR1cmUsIFNDVFBfU0lHTkFUVVJFX1NJWkUpOwotCS8qCi0JICogV2Ugc2lm
YSAwIGhlcmUgdG8gTk9UIHNldCBJUF9ERiBpZiBpdHMgSVB2NCwgd2UgaWdub3JlIHRoZSByZXR1
cm4KLQkgKiBoZXJlIHNpbmNlIHRoZSB0aW1lciB3aWxsIGRyaXZlIGEgcmV0cmFubWlzc2lvbi4K
LQkgKi8KLQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCWlmIChzY3RwX2FkZF9wYWRfdG9tYnVm
KG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwpIHsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJ
CXJldHVybjsKLQkJfQotCX0KLQlpZiAoc3RjLmxvb3BiYWNrX3Njb3BlKSB7Ci0JCW92ZXJfYWRk
ciA9ICh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqKWRzdDsKLQl9IGVsc2UgewotCQlvdmVyX2FkZHIg
PSBOVUxMOwotCX0KLQotCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChp
bnAsIE5VTEwsIE5VTEwsIHRvLCBtLCAwLCBOVUxMLCAwLCAwLAotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHNoLT5zcmNfcG9ydCwgaW5pdF9jaGstPmlu
aXQuaW5pdGlhdGVfdGFnLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0LCBvdmVyX2FkZHIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlm
Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU09fTk9UX0xP
Q0tFRCkpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiR2FrIHNlbmQgZXJyb3Ig
JWRcbiIsIGVycm9yKTsKLQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCWlmIChhc29jICE9
IE5VTEwpIHsKLQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7Ci0JCQl9Ci0JCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoYXNvYyAh
PSBOVUxMKSB7Ci0JCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7Ci0JCX0KLQl9Ci0JU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotfQotCi0KLXN0YXRp
YyB2b2lkCi1zY3RwX3BydW5lX3Byc2N0cChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAq
c3JjdiwKLSAgICBpbnQgZGF0YW91dCkKLXsKLQlpbnQgZnJlZWRfc3BjID0gMDsKLQlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOwotCi0JU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3Rj
Yik7Ci0JaWYgKChhc29jLT5wcnNjdHBfc3VwcG9ydGVkKSAmJgotCSAgICAoYXNvYy0+c2VudF9x
dWV1ZV9jbnRfcmVtb3ZlYWJsZSA+IDApKSB7Ci0JCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+
c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkvKgotCQkJICogTG9vayBmb3IgY2h1bmtzIG1h
cmtlZCB3aXRoIHRoZSBQUl9TQ1RQIGZsYWcgQU5ECi0JCQkgKiB0aGUgYnVmZmVyIHNwYWNlIGZs
YWcuIElmIHRoZSBvbmUgYmVpbmcgc2VudCBpcwotCQkJICogZXF1YWwgb3IgZ3JlYXRlciBwcmlv
cml0eSB0aGVuIHB1cmdlIHRoZSBvbGQgb25lCi0JCQkgKiBhbmQgZnJlZSBzb21lIHNwYWNlLgot
CQkJICovCi0JCQlpZiAoUFJfU0NUUF9CVUZfRU5BQkxFRChjaGstPmZsYWdzKSkgewotCQkJCS8q
Ci0JCQkJICogVGhpcyBvbmUgaXMgUFItU0NUUCBBTkQgYnVmZmVyIHNwYWNlCi0JCQkJICogbGlt
aXRlZCB0eXBlCi0JCQkJICovCi0JCQkJaWYgKGNoay0+cmVjLmRhdGEudGltZXRvZHJvcC50dl9z
ZWMgPj0gKGxvbmcpc3Jjdi0+c2luZm9fdGltZXRvbGl2ZSkgewotCQkJCQkvKgotCQkJCQkgKiBM
b3dlciBudW1iZXJzIGVxdWF0ZXMgdG8gaGlnaGVyCi0JCQkJCSAqIHByaW9yaXR5IHNvIGlmIHRo
ZSBvbmUgd2UgYXJlCi0JCQkJCSAqIGxvb2tpbmcgYXQgaGFzIGEgbGFyZ2VyIG9yIGVxdWFsCi0J
CQkJCSAqIHByaW9yaXR5IHdlIHdhbnQgdG8gZHJvcCB0aGUgZGF0YQotCQkJCQkgKiBhbmQgTk9U
IHJldHJhbnNtaXQgaXQuCi0JCQkJCSAqLwotCQkJCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQkv
KgotCQkJCQkJICogV2UgcmVsZWFzZSB0aGUgYm9va19zaXplCi0JCQkJCQkgKiBpZiB0aGUgbWJ1
ZiBpcyBoZXJlCi0JCQkJCQkgKi8KLQkJCQkJCWludCByZXRfc3BjOwotCQkJCQkJdWludDhfdCBz
ZW50OwotCi0JCQkJCQlpZiAoY2hrLT5zZW50ID4gU0NUUF9EQVRBR1JBTV9VTlNFTlQpCi0JCQkJ
CQkJc2VudCA9IDE7Ci0JCQkJCQllbHNlCi0JCQkJCQkJc2VudCA9IDA7Ci0JCQkJCQlyZXRfc3Bj
ID0gc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgY2hrLAotCQkJCQkJICAgIHNlbnQs
Ci0JCQkJCQkgICAgU0NUUF9TT19MT0NLRUQpOwotCQkJCQkJZnJlZWRfc3BjICs9IHJldF9zcGM7
Ci0JCQkJCQlpZiAoZnJlZWRfc3BjID49IGRhdGFvdXQpIHsKLQkJCQkJCQlyZXR1cm47Ci0JCQkJ
CQl9Ci0JCQkJCX0JLyogaWYgY2h1bmsgd2FzIHByZXNlbnQgKi8KLQkJCQl9CS8qIGlmIG9mIHN1
ZmZpY2llbnQgcHJpb3JpdHkgKi8KLQkJCX0JLyogaWYgY2h1bmsgaGFzIGVuYWJsZWQgKi8KLQkJ
fQkJLyogdGFpbHFmb3JlYWNoICovCi0KLQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2Mt
PnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewotCQkJLyogSGVyZSB3ZSBtdXN0IG1vdmUg
dG8gdGhlIHNlbnQgcXVldWUgYW5kIG1hcmsgKi8KLQkJCWlmIChQUl9TQ1RQX0JVRl9FTkFCTEVE
KGNoay0+ZmxhZ3MpKSB7Ci0JCQkJaWYgKGNoay0+cmVjLmRhdGEudGltZXRvZHJvcC50dl9zZWMg
Pj0gKGxvbmcpc3Jjdi0+c2luZm9fdGltZXRvbGl2ZSkgewotCQkJCQlpZiAoY2hrLT5kYXRhKSB7
Ci0JCQkJCQkvKgotCQkJCQkJICogV2UgcmVsZWFzZSB0aGUgYm9va19zaXplCi0JCQkJCQkgKiBp
ZiB0aGUgbWJ1ZiBpcyBoZXJlCi0JCQkJCQkgKi8KLQkJCQkJCWludCByZXRfc3BjOwotCi0JCQkJ
CQlyZXRfc3BjID0gc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgY2hrLAotCQkJCQkJ
ICAgIDAsIFNDVFBfU09fTE9DS0VEKTsKLQotCQkJCQkJZnJlZWRfc3BjICs9IHJldF9zcGM7Ci0J
CQkJCQlpZiAoZnJlZWRfc3BjID49IGRhdGFvdXQpIHsKLQkJCQkJCQlyZXR1cm47Ci0JCQkJCQl9
Ci0JCQkJCX0JLyogZW5kIGlmIGNoay0+ZGF0YSAqLwotCQkJCX0JLyogZW5kIGlmIHJpZ2h0IGNs
YXNzICovCi0JCQl9CS8qIGVuZCBpZiBjaGsgcHItc2N0cCAqLwotCQl9CQkvKiB0YWlscWZvcmVh
Y2hzYWZlIChjaGspICovCi0JfQkJCS8qIGlmIGVuYWJsZWQgaW4gYXNvYyAqLwotfQotCi1pbnQK
LXNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCWludCBzaXosIG92aDsKLQotCS8qCi0JICogRm9y
IGVuZHBvaW50cyB0aGF0IGhhdmUgYm90aCB2NiBhbmQgdjQgYWRkcmVzc2VzIHdlIG11c3QgcmVz
ZXJ2ZQotCSAqIHJvb20gZm9yIHRoZSBpcHY2IGhlYWRlciwgZm9yIHRob3NlIHRoYXQgYXJlIG9u
bHkgZGVhbGluZyB3aXRoIFY0Ci0JICogd2UgdXNlIGEgbGFyZ2VyIGZyYWcgcG9pbnQuCi0JICov
Ci0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgewotCQlvdmggPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQl9IGVsc2UgewotCQlvdmggPSBTQ1RQ
X01JTl9WNF9PVkVSSEVBRDsKLQl9Ci0Jb3ZoICs9IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChz
dGNiKTsKLQlpZiAoc3RjYi0+YXNvYy5zY3RwX2ZyYWdfcG9pbnQgPiBhc29jLT5zbWFsbGVzdF9t
dHUpCi0JCXNpeiA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKLQllbHNlCi0JCXNpeiA9IChz
dGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCAtIG92aCk7Ci0JLyoKLQkgKiBpZiAoc2l6ID4gKE1D
TEJZVEVTLXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpIHsKLQkgKi8KLQkvKiBBIGRh
dGEgY2h1bmsgTVVTVCBmaXQgaW4gYSBjbHVzdGVyICovCi0JLyogc2l6ID0gKE1DTEJZVEVTIC0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsgKi8KLQkvKiB9ICovCi0KLQkvKiBhZGp1
c3QgZm9yIGFuIEFVVEggY2h1bmsgaWYgREFUQSByZXF1aXJlcyBhdXRoICovCi0JaWYgKHNjdHBf
YXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2No
dW5rcykpCi0JCXNpeiAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7Ci0KLQlpZiAoc2l6ICUgNCkgewotCQkvKiBtYWtlIGl0IGFuIGV2ZW4gd29yZCBi
b3VuZGFyeSBwbGVhc2UgKi8KLQkJc2l6IC09IChzaXogJSA0KTsKLQl9Ci0JcmV0dXJuIChzaXop
OwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3ApCi17Ci0JLyoKLQkgKiBXZSBhc3N1bWUgdGhhdCB0aGUg
dXNlciB3YW50cyBQUl9TQ1RQX1RUTCBpZiB0aGUgdXNlcgotCSAqIHByb3ZpZGVzIGEgcG9zaXRp
dmUgbGlmZXRpbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYW55Ci0JICogUFJfU0NUUCBwb2xpY3ku
Ci0JICovCi0JaWYgKFBSX1NDVFBfRU5BQkxFRChzcC0+c2luZm9fZmxhZ3MpKSB7Ci0JCXNwLT5h
Y3RfZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koc3AtPnNpbmZvX2ZsYWdzKTsKLQl9IGVsc2UgaWYg
KHNwLT50aW1ldG9saXZlID4gMCkgewotCQlzcC0+c2luZm9fZmxhZ3MgfD0gU0NUUF9QUl9TQ1RQ
X1RUTDsKLQkJc3AtPmFjdF9mbGFncyB8PSBQUl9TQ1RQX1BPTElDWShzcC0+c2luZm9fZmxhZ3Mp
OwotCX0gZWxzZSB7Ci0JCXJldHVybjsKLQl9Ci0Jc3dpdGNoIChQUl9TQ1RQX1BPTElDWShzcC0+
c2luZm9fZmxhZ3MpKSB7Ci0JY2FzZSBDSFVOS19GTEFHU19QUl9TQ1RQX0JVRjoKLQkJLyoKLQkJ
ICogVGltZSB0byBsaXZlIGlzIGEgcHJpb3JpdHkgc3RvcmVkIGluIHR2X3NlYyB3aGVuCi0JCSAq
IGRvaW5nIHRoZSBidWZmZXIgZHJvcCB0aGluZy4KLQkJICovCi0JCXNwLT50cy50dl9zZWMgPSBz
cC0+dGltZXRvbGl2ZTsKLQkJc3AtPnRzLnR2X3VzZWMgPSAwOwotCQlicmVhazsKLQljYXNlIENI
VU5LX0ZMQUdTX1BSX1NDVFBfVFRMOgotCXsKLQkJc3RydWN0IHRpbWV2YWwgdHY7Ci0JCSh2b2lk
KVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOwotCQl0di50dl9zZWMgPSBzcC0+dGltZXRv
bGl2ZSAvIDEwMDA7Ci0JCXR2LnR2X3VzZWMgPSAoc3AtPnRpbWV0b2xpdmUgKiAxMDAwKSAlIDEw
MDAwMDA7Ci0JCS8qIFRPRE8gc2N0cF9jb25zdGFudHMuaCBuZWVkcyBhbHRlcm5hdGl2ZSB0aW1l
IG1hY3JvcyB3aGVuCi0JCSAqICBfS0VSTkVMIGlzIHVuZGVmaW5lZC4KLQkJICovCi0jaWZuZGVm
IF9fRnJlZUJTRF9fCi0JCXRpbWVyYWRkKCZzcC0+dHMsICZ0diwgJnNwLT50cyk7Ci0jZWxzZQot
CQl0aW1ldmFsYWRkKCZzcC0+dHMsICZ0dik7Ci0jZW5kaWYKLQl9Ci0JCWJyZWFrOwotCWNhc2Ug
Q0hVTktfRkxBR1NfUFJfU0NUUF9SVFg6Ci0JCS8qCi0JCSAqIFRpbWUgdG8gbGl2ZSBpcyBhIHRo
ZSBudW1iZXIgb3IgcmV0cmFuc21pc3Npb25zCi0JCSAqIHN0b3JlZCBpbiB0dl9zZWMuCi0JCSAq
LwotCQlzcC0+dHMudHZfc2VjID0gc3AtPnRpbWV0b2xpdmU7Ci0JCXNwLT50cy50dl91c2VjID0g
MDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUlJFUTEsCi0J
CQkiVW5rbm93biBQUl9TQ1RQIHBvbGljeSAldS5cbiIsCi0JCQlQUl9TQ1RQX1BPTElDWShzcC0+
c2luZm9fZmxhZ3MpKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1zY3RwX21zZ19h
cHBlbmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0J
CXN0cnVjdCBtYnVmICptLAotCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2LCBpbnQgaG9s
ZF9zdGNiX2xvY2spCi17Ci0JaW50IGVycm9yID0gMDsKLQlzdHJ1Y3QgbWJ1ZiAqYXQ7Ci0Jc3Ry
dWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpzdHJtOwotCi0JLyogR2l2ZW4gYW4gbWJ1ZiBjaGFpbiwgcHV0IGl0Ci0JICog
aW50byB0aGUgYXNzb2NpYXRpb24gc2VuZCBxdWV1ZSBhbmQKLQkgKiBwbGFjZSBpdCBvbiB0aGUg
d2hlZWwKLQkgKi8KLQlpZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250KSB7Ci0JCS8qIEludmFsaWQgc3RyZWFtIG51bWJlciAqLwotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUX1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlO
VkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0JaWYgKChzdGNi
LT5hc29jLnN0cmVhbV9sb2NrZWQpICYmCi0JICAgIChzdGNiLT5hc29jLnN0cmVhbV9sb2NrZWRf
b24gIT0gc3Jjdi0+c2luZm9fc3RyZWFtKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVCht
LCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc3RybSA9ICZzdGNiLT5hc29jLnN0
cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFtXTsKLQkvKiBOb3cgY2FuIHdlIHNlbmQgdGhpcz8gKi8K
LQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dO
X1NFTlQpIHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29j
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAotCSAgICAoc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKLQkJLyogZ290IGRhdGEgd2hp
bGUgc2h1dHRpbmcgZG93biAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7Ci0JCWVycm9yID0gRUNPTk5S
RVNFVDsKLQkJZ290byBvdXRfbm93OwotCX0KLQlzY3RwX2FsbG9jX2Ffc3RybW9xKHN0Y2IsIHNw
KTsKLQlpZiAoc3AgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKLQkJZXJyb3IgPSBFTk9NRU07
Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc3AtPnNpbmZvX2ZsYWdzID0gc3Jjdi0+c2luZm9fZmxh
Z3M7Ci0Jc3AtPnRpbWV0b2xpdmUgPSBzcmN2LT5zaW5mb190aW1ldG9saXZlOwotCXNwLT5wcGlk
ID0gc3Jjdi0+c2luZm9fcHBpZDsKLQlzcC0+Y29udGV4dCA9IHNyY3YtPnNpbmZvX2NvbnRleHQ7
Ci0Jc3AtPmZzbiA9IDA7Ci0JaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVSKSB7
Ci0JCXNwLT5uZXQgPSBuZXQ7Ci0JCWF0b21pY19hZGRfaW50KCZzcC0+bmV0LT5yZWZfY291bnQs
IDEpOwotCX0gZWxzZSB7Ci0JCXNwLT5uZXQgPSBOVUxMOwotCX0KLQkodm9pZClTQ1RQX0dFVFRJ
TUVfVElNRVZBTCgmc3AtPnRzKTsKLQlzcC0+c2lkID0gc3Jjdi0+c2luZm9fc3RyZWFtOwotCXNw
LT5tc2dfaXNfY29tcGxldGUgPSAxOwotCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAxOwotCXNwLT5z
b21lX3Rha2VuID0gMDsKLQlzcC0+ZGF0YSA9IG07Ci0Jc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0J
c2N0cF9zZXRfcHJzY3RwX3BvbGljeShzcCk7Ci0JLyogV2UgY291bGQgaW4gdGhlb3J5IChmb3Ig
c2VuZGFsbCkgc2lmYSB0aGUgbGVuZ3RoCi0JICogaW4sIGJ1dCB3ZSB3b3VsZCBzdGlsbCBoYXZl
IHRvIGh1bnQgdGhyb3VnaCB0aGUKLQkgKiBjaGFpbiBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIHRo
ZSB0YWlsX21idWYKLQkgKi8KLQlzcC0+bGVuZ3RoID0gMDsKLQlmb3IgKGF0ID0gbTsgYXQ7IGF0
ID0gU0NUUF9CVUZfTkVYVChhdCkpIHsKLQkJaWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5VTEwp
Ci0JCQlzcC0+dGFpbF9tYnVmID0gYXQ7Ci0JCXNwLT5sZW5ndGggKz0gU0NUUF9CVUZfTEVOKGF0
KTsKLQl9Ci0JaWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92YWxpZCkgewotCQlzcC0+YXV0aF9r
ZXlpZCA9IHNyY3YtPnNpbmZvX2tleW51bWJlcjsKLQl9IGVsc2UgewotCQlzcC0+YXV0aF9rZXlp
ZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOwotCX0KLQlpZiAoc2N0cF9hdXRo
X2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtz
KSkgewotCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgc3AtPmF1dGhfa2V5aWQpOwotCQlz
cC0+aG9sZHNfa2V5X3JlZiA9IDE7Ci0JfQotCWlmIChob2xkX3N0Y2JfbG9jayA9PSAwKSB7Ci0J
CVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQl9Ci0Jc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwg
c3AtPmxlbmd0aCk7Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2Nu
dCwgMSk7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVlLCBzcCwgbmV4dCk7Ci0J
c3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19hZGRfdG9fc3RyZWFtKHN0Y2IsICZzdGNi
LT5hc29jLCBzdHJtLCBzcCwgMSk7Ci0JbSA9IE5VTEw7Ci0JaWYgKGhvbGRfc3RjYl9sb2NrID09
IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQotb3V0X25vdzoKLQlpZiAo
bSkgewotCQlzY3RwX21fZnJlZW0obSk7Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCi0KLXN0
YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2NvcHlfbWJ1ZmNoYWluKHN0cnVjdCBtYnVmICpjbG9u
ZWNoYWluLAotCQkgICAgc3RydWN0IG1idWYgKm91dGNoYWluLAotCQkgICAgc3RydWN0IG1idWYg
KiplbmRvZmNoYWluLAotCQkgICAgaW50IGNhbl90YWtlX21idWYsCi0JCSAgICBpbnQgc2l6ZW9m
Y3B5LAotCQkgICAgdWludDhfdCBjb3B5X2J5X3JlZikKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlz
dHJ1Y3QgbWJ1ZiAqYXBwZW5kY2hhaW47Ci0JY2FkZHJfdCBjcDsKLQlpbnQgbGVuOwotCi0JaWYg
KGVuZG9mY2hhaW4gPT0gTlVMTCkgewotCQkvKiBlcnJvciAqLwotCWVycm9yX291dDoKLQkJaWYg
KG91dGNoYWluKQotCQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKLQkJcmV0dXJuIChOVUxMKTsK
LQl9Ci0JaWYgKGNhbl90YWtlX21idWYpIHsKLQkJYXBwZW5kY2hhaW4gPSBjbG9uZWNoYWluOwot
CX0gZWxzZSB7Ci0JCWlmICghY29weV9ieV9yZWYgJiYKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LQkJICAgIDAKLSNlbHNlCi0JCSAgICAoc2l6ZW9mY3B5IDw9IChpbnQpKCgoKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkgLSAxKSAqIE1MRU4pICsgTUhMRU4pKSkK
LSNlbmRpZgotCQkgICAgKSB7Ci0JCQkvKiBJdHMgbm90IGluIGEgY2x1c3RlciAqLwotCQkJaWYg
KCplbmRvZmNoYWluID09IE5VTEwpIHsKLQkJCQkvKiBsZXRzIGdldCBhIG1idWYgY2x1c3RlciAq
LwotCQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCS8qIFRoaXMgaXMgdGhlIGdlbmVy
YWwgY2FzZSAqLwotCQkJCW5ld19tYnVmOgotCQkJCQlvdXRjaGFpbiA9IHNjdHBfZ2V0X21idWZf
Zm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7Ci0JCQkJCWlmIChv
dXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCQlnb3RvIGVycm9yX291dDsKLQkJCQkJfQotCQkJCQlT
Q1RQX0JVRl9MRU4ob3V0Y2hhaW4pID0gMDsKLQkJCQkJKmVuZG9mY2hhaW4gPSBvdXRjaGFpbjsK
LQkJCQkJLyogZ2V0IHRoZSBwcmVwZW5kIHNwYWNlICovCi0JCQkJCVNDVFBfQlVGX1JFU1ZfVUYo
b3V0Y2hhaW4sIChTQ1RQX0ZJUlNUX01CVUZfUkVTVis0KSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ
LyogV2UgcmVhbGx5IHNob3VsZCBub3QgZ2V0IGEgTlVMTCBpbiBlbmRvZmNoYWluICovCi0JCQkJ
CS8qIGZpbmQgZW5kICovCi0JCQkJCW0gPSBvdXRjaGFpbjsKLQkJCQkJd2hpbGUgKG0pIHsKLQkJ
CQkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKLQkJCQkJCQkqZW5kb2ZjaGFpbiA9
IG07Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsK
LQkJCQkJfQotCQkJCQkvKiBzYW5pdHkgKi8KLQkJCQkJaWYgKCplbmRvZmNoYWluID09IE5VTEwp
IHsKLQkJCQkJCS8qIGh1aCwgVFNOSCBYWFggbWF5YmUgd2Ugc2hvdWxkIHBhbmljICovCi0JCQkJ
CQlzY3RwX21fZnJlZW0ob3V0Y2hhaW4pOwotCQkJCQkJZ290byBuZXdfbWJ1ZjsKLQkJCQkJfQot
CQkJCX0KLQkJCQkvKiBnZXQgdGhlIG5ldyBlbmQgb2YgbGVuZ3RoICovCi0JCQkJbGVuID0gKGlu
dClNX1RSQUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBob3cg
bXVjaCBpcyBsZWZ0IGF0IHRoZSBlbmQ/ICovCi0JCQkJbGVuID0gKGludClNX1RSQUlMSU5HU1BB
Q0UoKmVuZG9mY2hhaW4pOwotCQkJfQotCQkJLyogRmluZCB0aGUgZW5kIG9mIHRoZSBkYXRhLCBm
b3IgYXBwZW5kaW5nICovCi0JCQljcCA9IChtdG9kKCgqZW5kb2ZjaGFpbiksIGNhZGRyX3QpICsg
U0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpKTsKLQotCQkJLyogTm93IGxldHMgY29weSBpdCBv
dXQgKi8KLQkJCWlmIChsZW4gPj0gc2l6ZW9mY3B5KSB7Ci0JCQkJLyogSXQgYWxsIGZpdHMsIGNv
cHkgaXQgaW4gKi8KLQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIHNpemVvZmNweSwgY3Ap
OwotCQkJCVNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSArPSBzaXplb2ZjcHk7Ci0JCQl9IGVs
c2UgewotCQkJCS8qIGZpbGwgdXAgdGhlIGVuZCBvZiB0aGUgY2hhaW4gKi8KLQkJCQlpZiAobGVu
ID4gMCkgewotCQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIGxlbiwgY3ApOwotCQkJCQlT
Q1RQX0JVRl9MRU4oKCplbmRvZmNoYWluKSkgKz0gbGVuOwotCQkJCQkvKiBub3cgd2UgbmVlZCBh
bm90aGVyIG9uZSAqLwotCQkJCQlzaXplb2ZjcHkgLT0gbGVuOwotCQkJCX0KLQkJCQltID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsK
LQkJCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIFdlIGZhaWxlZCAqLwotCQkJCQlnb3RvIGVy
cm9yX291dDsKLQkJCQl9Ci0JCQkJU0NUUF9CVUZfTkVYVCgoKmVuZG9mY2hhaW4pKSA9IG07Ci0J
CQkJKmVuZG9mY2hhaW4gPSBtOwotCQkJCWNwID0gbXRvZCgoKmVuZG9mY2hhaW4pLCBjYWRkcl90
KTsKLQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIGxlbiwgc2l6ZW9mY3B5LCBjcCk7Ci0JCQkJ
U0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpICs9IHNpemVvZmNweTsKLQkJCX0KLQkJCXJldHVy
biAob3V0Y2hhaW4pOwotCQl9IGVsc2UgewotCQkJLyogY29weSB0aGUgb2xkIGZhc2hpb24gd2F5
ICovCi0JCQlhcHBlbmRjaGFpbiA9IFNDVFBfTV9DT1BZTShjbG9uZWNoYWluLCAwLCBNX0NPUFlB
TEwsIE1fTk9XQUlUKTsKLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkg
ewotCQkJCXNjdHBfbG9nX21iYyhhcHBlbmRjaGFpbiwgU0NUUF9NQlVGX0lDT1BZKTsKLQkJCX0K
LSNlbmRpZgotCQl9Ci0JfQotCWlmIChhcHBlbmRjaGFpbiA9PSBOVUxMKSB7Ci0JCS8qIGVycm9y
ICovCi0JCWlmIChvdXRjaGFpbikKLQkJCXNjdHBfbV9mcmVlbShvdXRjaGFpbik7Ci0JCXJldHVy
biAoTlVMTCk7Ci0JfQotCWlmIChvdXRjaGFpbikgewotCQkvKiB0YWNrIG9uIHRvIHRoZSBlbmQg
Ki8KLQkJaWYgKCplbmRvZmNoYWluICE9IE5VTEwpIHsKLQkJCVNDVFBfQlVGX05FWFQoKCgqZW5k
b2ZjaGFpbikpKSA9IGFwcGVuZGNoYWluOwotCQl9IGVsc2UgewotCQkJbSA9IG91dGNoYWluOwot
CQkJd2hpbGUgKG0pIHsKLQkJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7Ci0JCQkJ
CVNDVFBfQlVGX05FWFQobSkgPSBhcHBlbmRjaGFpbjsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ
CW0gPSBTQ1RQX0JVRl9ORVhUKG0pOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIHNhdmUgb2ZmIHRo
ZSBlbmQgYW5kIHVwZGF0ZSB0aGUgZW5kLWNoYWluCi0JCSAqIHBvc2l0aW9uCi0JCSAqLwotCQlt
ID0gYXBwZW5kY2hhaW47Ci0JCXdoaWxlIChtKSB7Ci0JCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9
PSBOVUxMKSB7Ci0JCQkJKmVuZG9mY2hhaW4gPSBtOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbSA9
IFNDVFBfQlVGX05FWFQobSk7Ci0JCX0KLQkJcmV0dXJuIChvdXRjaGFpbik7Ci0JfSBlbHNlIHsK
LQkJLyogc2F2ZSBvZmYgdGhlIGVuZCBhbmQgdXBkYXRlIHRoZSBlbmQtY2hhaW4gcG9zaXRpb24g
Ki8KLQkJbSA9IGFwcGVuZGNoYWluOwotCQl3aGlsZSAobSkgewotCQkJaWYgKFNDVFBfQlVGX05F
WFQobSkgPT0gTlVMTCkgewotCQkJCSplbmRvZmNoYWluID0gbTsKLQkJCQlicmVhazsKLQkJCX0K
LQkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOwotCQl9Ci0JCXJldHVybiAoYXBwZW5kY2hhaW4pOwot
CX0KLX0KLQotc3RhdGljIGludAotc2N0cF9tZWRfY2h1bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsCi0JCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICAgICAgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSAgICAgIGludCAqbnVtX291dCwKLQkJICAgICAg
aW50ICpyZWFzb25fY29kZSwKLQkJICAgICAgaW50IGNvbnRyb2xfb25seSwgaW50IGZyb21fd2hl
cmUsCi0JCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxlZCwgaW50IGZy
YWdfcG9pbnQsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkgICAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0g
ICAgICAgICAgICAgICAgICAgICAgKTsKLQotc3RhdGljIHZvaWQKLXNjdHBfc2VuZGFsbF9pdGVy
YXRvcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHZvaWQg
KnB0ciwKLSAgICB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfY29w
eV9hbGwgKmNhOwotCXN0cnVjdCBtYnVmICptOwotCWludCByZXQgPSAwOwotCWludCBhZGRlZF9j
b250cm9sID0gMDsKLQlpbnQgdW5fc2VudCwgZG9fY2h1bmtfb3V0cHV0ID0gMTsKLQlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQljYSA9
IChzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqKXB0cjsKLQlpZiAoY2EtPm0gPT0gTlVMTCkgewotCQly
ZXR1cm47Ci0JfQotCWlmIChjYS0+aW5wICE9IGlucCkgewotCQkvKiBUU05IICovCi0JCXJldHVy
bjsKLQl9Ci0JaWYgKGNhLT5zbmRsZW4gPiAwKSB7Ci0JCW0gPSBTQ1RQX01fQ09QWU0oY2EtPm0s
IDAsIE1fQ09QWUFMTCwgTV9OT1dBSVQpOwotCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkvKiBjYW4n
dCBjb3B5IHNvIHdlIGFyZSBkb25lICovCi0JCQljYS0+Y250X2ZhaWxlZCsrOwotCQkJcmV0dXJu
OwotCQl9Ci0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQkJc2N0
cF9sb2dfbWJjKG0sIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNlbmRpZgotCX0gZWxzZSB7Ci0J
CW0gPSBOVUxMOwotCX0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQlpZiAoc3RjYi0+
YXNvYy5hbHRlcm5hdGUpIHsKLQkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNl
IHsKLQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCX0KLQlpZiAoY2Et
PnNuZHJjdi5zaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHsKLQkJLyogQWJvcnQgdGhpcyBhc3Nv
YyB3aXRoIG0gYXMgdGhlIHVzZXIgZGVmaW5lZCByZWFzb24gKi8KLQkJaWYgKG0gIT0gTlVMTCkg
ewotCQkJU0NUUF9CVUZfUFJFUEVORChtLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCBN
X05PV0FJVCk7Ci0JCX0gZWxzZSB7Ci0JCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCVNDVFBfQlVGX0xFTihtKSA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCX0KLQkJaWYgKG0gIT0gTlVMTCkgewotCQkJc3RydWN0IHNj
dHBfcGFyYW1oZHIgKnBoOwotCi0JCQlwaCA9IG10b2QobSwgc3RydWN0IHNjdHBfcGFyYW1oZHIg
Kik7Ci0JCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURf
QUJUKTsKLQkJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucygodWludDE2X3QpKHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikgKyBjYS0+c25kbGVuKSk7Ci0JCX0KLQkJLyogV2UgYWRkIG9uZSBo
ZXJlIHRvIGtlZXAgdGhlIGFzc29jIGZyb20KLQkJICogZGlzLWFwcGVhcmluZyBvbiB1cy4KLQkJ
ICovCi0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCXNjdHBfYWJv
cnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkv
KiBzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uIGNhbGxzIHNjdHBfZnJlZV9hc29jKCkKLQkJICog
ZnJlZSBhc3NvY2lhdGlvbiB3aWxsIE5PVCBmcmVlIGl0IHNpbmNlIHdlCi0JCSAqIGluY3JlbWVu
dGVkIHRoZSByZWZjbnQgLi4gd2UgZG8gdGhpcyB0byBwcmV2ZW50Ci0JCSAqIGl0IGJlaW5nIGZy
ZWVkIGFuZCB0aGluZ3MgZ2V0dGluZyB0cmlja3kgc2luY2UKLQkJICogd2UgY291bGQgZW5kIHVw
IChmcm9tIGZyZWVfYXNvYykgY2FsbGluZyBpbnBjYl9mcmVlCi0JCSAqIHdoaWNoIHdvdWxkIGdl
dCBhIHJlY3Vyc2l2ZSBsb2NrIGNhbGwgdG8gdGhlCi0JCSAqIGl0ZXJhdG9yIGxvY2suLiBCdXQg
YXMgYSBjb25zZXF1ZW5jZSBvZiB0aGF0IHRoZQotCQkgKiBzdGNiIHdpbGwgcmV0dXJuIHRvIHVz
IHVuLWxvY2tlZC4uIHNpbmNlIGZyZWVfYXNvYwotCQkgKiByZXR1cm5zIHdpdGggZWl0aGVyIG5v
IFRDQiBvciB0aGUgVENCIHVubG9ja2VkLCB3ZQotCQkgKiBtdXN0IHJlbG9jay4uIHRvIHVubG9j
ayBpbiB0aGUgaXRlcmF0b3IgdGltZXIgOi0wCi0JCSAqLwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OwotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJZ290byBub19j
aHVua19vdXRwdXQ7Ci0JfSBlbHNlIHsKLQkJaWYgKG0pIHsKLQkJCXJldCA9IHNjdHBfbXNnX2Fw
cGVuZChzdGNiLCBuZXQsIG0sCi0JCQkJCSAgICAgICZjYS0+c25kcmN2LCAxKTsKLQkJfQotCQlh
c29jID0gJnN0Y2ItPmFzb2M7Ci0JCWlmIChjYS0+c25kcmN2LnNpbmZvX2ZsYWdzICYgU0NUUF9F
T0YpIHsKLQkJCS8qIHNodXRkb3duIHRoaXMgYXNzb2MgKi8KLQkJCWlmIChUQUlMUV9FTVBUWSgm
YXNvYy0+c2VuZF9xdWV1ZSkgJiYKLQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1
ZSkgJiYKLQkJCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIFNDVFBfU09fTk9U
X0xPQ0tFRCkgPT0gMCkgewotCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJCQlnb3RvIGFib3J0X2Fu
eXdheTsKLQkJCQl9Ci0JCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28g
SSdtIGRvbmUuLi4gKi8KLQkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fU0VOVCkgJiYKLQkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFND
VFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCi0JCQkJICAgIChTQ1RQX0dFVF9TVEFURShh
c29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgewotCQkJCQkvKiBvbmx5IHNl
bmQgU0hVVERPV04gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwotCQkJCQlpZiAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB7Ci0JCQkJCQlTQ1RQX1NUQVRfREVDUl9H
QVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQkJCX0KLQkJCQkJU0NUUF9TRVRfU1RBVEUoYXNv
YywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCQkJU0NUUF9DTEVBUl9TVUJTVEFURShh
c29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJCQlzY3RwX3N0b3BfdGltZXJz
X2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldCk7
Ci0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLCBzdGNiLT5z
Y3RwX2VwLCBzdGNiLAotCQkJCQkJCSBuZXQpOwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSBh
c29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJCQkJYWRkZWRfY29udHJvbCA9IDE7Ci0JCQkJ
CWRvX2NodW5rX291dHB1dCA9IDA7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKgotCQkJCSAq
IHdlIHN0aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEgdG8gc2VuZCwgc28gc2V0Ci0JCQkJICog
U0hVVERPV05fUEVORElORwotCQkJCSAqLwotCQkJCS8qCi0JCQkJICogWFhYIHNvY2tldHMgZHJh
ZnQgc2F5cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQotCQkJCSAqIHNlbnQgd2l0aCBubyBkYXRh
LiAgY3VycmVudGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKLQkJCQkgKiBkYXRhIHRvIGJlIHNlbnQg
Zmlyc3QgYW5kIG1vdmUgdG8KLQkJCQkgKiBTSFVURE9XTi1QRU5ESU5HCi0JCQkJICovCi0JCQkJ
aWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYm
Ci0JCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JF
Q0VJVkVEKSAmJgotCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9T
SFVURE9XTl9BQ0tfU0VOVCkpIHsKLQkJCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBf
c3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7Ci0JCQkJCQlhc29jLT5z
dGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQ7Ci0JCQkJCX0KLQkJCQkJYXNvYy0+
c3RhdGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOwotCQkJCQlpZiAoVEFJTFFfRU1Q
VFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2Vu
dF9xdWV1ZSkgJiYKLQkJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9N
U0dfTEVGVCkpIHsKLQkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCQkJCQljaGFyIG1zZ1tT
Q1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQkJCWFib3J0X2FueXdheToKLQkJCQkJCXNucHJpbnRm
KG1zZywgc2l6ZW9mKG1zZyksCi0JCQkJCQkgICAgICAgICAiJXM6JWQgYXQgJXMiLCBfX0ZJTEVf
XywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbXNnKTsKLQkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7Ci0JCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsCi0JCQkJCQkJCQkgIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJ
CQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwotCQkJCQkJZ290byBu
b19jaHVua19vdXRwdXQ7Ci0JCQkJCX0KLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCQkgYXNvYy0+
cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0JCQkJfQotCQkJfQotCi0JCX0KLQl9Ci0JdW5fc2VudCA9
ICgoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0KSArCi0JCSAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgKiBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpKTsKLQotCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAmJgotCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGln
aHQgPiAwKSAmJgotCSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1
IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgewotCQlkb19jaHVua19vdXRwdXQgPSAwOwotCX0KLQlp
ZiAoZG9fY2h1bmtfb3V0cHV0KQotCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBf
T1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JZWxzZSBpZiAoYWRk
ZWRfY29udHJvbCkgewotCQlpbnQgbnVtX291dCwgcmVhc29uLCBub3dfZmlsbGVkID0gMDsKLQkJ
c3RydWN0IHRpbWV2YWwgbm93OwotCQlpbnQgZnJhZ19wb2ludDsKLQotCQlmcmFnX3BvaW50ID0g
c2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0JCSh2b2lkKXNjdHBfbWVk
X2NodW5rX291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29jLCAmbnVtX291dCwKLQkJCQkgICAg
ICAmcmVhc29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQl9Ci0gbm9fY2h1bmtfb3V0cHV0OgotCWlmIChyZXQpIHsKLQkJY2EtPmNu
dF9mYWlsZWQrKzsKLQl9IGVsc2UgewotCQljYS0+Y250X3NlbnQrKzsKLQl9Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zY3RwX3NlbmRhbGxfY29tcGxldGVzKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsIFND
VFBfVU5VU0VEKQotewotCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKLQotCWNhID0gKHN0cnVj
dCBzY3RwX2NvcHlfYWxsICopcHRyOwotCS8qCi0JICogRG8gYSBub3RpZnkgaGVyZT8gS2FjaGVv
bmcgc3VnZ2VzdHMgdGhhdCB0aGUgbm90aWZ5IGJlIGRvbmUgYXQKLQkgKiB0aGUgc2VuZCB0aW1l
Li4gc28geW91IHdvdWxkIHB1c2ggdXAgYSBub3RpZmljYXRpb24gaWYgYW55IHNlbmQKLQkgKiBm
YWlsZWQuIERvbid0IGtub3cgaWYgdGhpcyBpcyBmZWFzaWJsZSBzaW5jZSB0aGUgb25seSBmYWls
dXJlcyB3ZQotCSAqIGhhdmUgaXMgIm1lbW9yeSIgcmVsYXRlZCBhbmQgaWYgeW91IGNhbm5vdCBn
ZXQgYW4gbWJ1ZiB0byBzZW5kCi0JICogdGhlIGRhdGEgeW91IHN1cmVseSBjYW4ndCBnZXQgYW4g
bWJ1ZiB0byBzZW5kIHVwIHRvIG5vdGlmeSB0aGUKLQkgKiB1c2VyIHlvdSBjYW4ndCBzZW5kIHRo
ZSBkYXRhIDotPgotCSAqLwotCi0JLyogbm93IGZyZWUgZXZlcnl0aGluZyAqLwotCXNjdHBfbV9m
cmVlbShjYS0+bSk7Ci0JU0NUUF9GUkVFKGNhLCBTQ1RQX01fQ09QWUFMKTsKLX0KLQotc3RhdGlj
IHN0cnVjdCBtYnVmICoKLXNjdHBfY29weV9vdXRfYWxsKHN0cnVjdCB1aW8gKnVpbywgaW50IGxl
bikKLXsKLQlzdHJ1Y3QgbWJ1ZiAqcmV0LCAqYXQ7Ci0JaW50IGxlZnQsIHdpbGxjcHksIGNhbmNw
eSwgZXJyb3I7Ci0KLQlyZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1f
V0FJVE9LLCAxLCBNVF9EQVRBKTsKLQlpZiAocmV0ID09IE5VTEwpIHsKLQkJLyogVFNOSCAqLwot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlsZWZ0ID0gbGVuOwotCVNDVFBfQlVGX0xFTihyZXQpID0g
MDsKLQkvKiBzYXZlIHNwYWNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgKi8KLQljYW5jcHkg
PSAoaW50KU1fVFJBSUxJTkdTUEFDRShyZXQpOwotCXdpbGxjcHkgPSBtaW4oY2FuY3B5LCBsZWZ0
KTsKLQlhdCA9IHJldDsKLQl3aGlsZSAobGVmdCA+IDApIHsKLQkJLyogQWxpZ24gZGF0YSB0byB0
aGUgZW5kICovCi0JCWVycm9yID0gdWlvbW92ZShtdG9kKGF0LCBjYWRkcl90KSwgd2lsbGNweSwg
dWlvKTsKLQkJaWYgKGVycm9yKSB7Ci0JZXJyX291dF9ub3c6Ci0JCQlzY3RwX21fZnJlZW0oYXQp
OwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlTQ1RQX0JVRl9MRU4oYXQpID0gd2lsbGNweTsK
LQkJU0NUUF9CVUZfTkVYVF9QS1QoYXQpID0gU0NUUF9CVUZfTkVYVChhdCkgPSAwOwotCQlsZWZ0
IC09IHdpbGxjcHk7Ci0JCWlmIChsZWZ0ID4gMCkgewotCQkJU0NUUF9CVUZfTkVYVChhdCkgPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOwotCQkJ
aWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5VTEwpIHsKLQkJCQlnb3RvIGVycl9vdXRfbm93Owot
CQkJfQotCQkJYXQgPSBTQ1RQX0JVRl9ORVhUKGF0KTsKLQkJCVNDVFBfQlVGX0xFTihhdCkgPSAw
OwotCQkJY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UoYXQpOwotCQkJd2lsbGNweSA9IG1p
bihjYW5jcHksIGxlZnQpOwotCQl9Ci0JfQotCXJldHVybiAocmV0KTsKLX0KLQotc3RhdGljIGlu
dAotc2N0cF9zZW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCB1aW8gKnVpbywg
c3RydWN0IG1idWYgKm0sCi0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3JjdikKLXsKLQlp
bnQgcmV0OwotCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKLQotCVNDVFBfTUFMTE9DKGNhLCBz
dHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqLCBzaXplb2Yoc3RydWN0IHNjdHBfY29weV9hbGwpLAotCQkg
ICAgU0NUUF9NX0NPUFlBTCk7Ci0JaWYgKGNhID09IE5VTEwpIHsKLQkJc2N0cF9tX2ZyZWVtKG0p
OwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCW1lbXNldChjYSwgMCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2NvcHlfYWxsKSk7Ci0KLQljYS0+aW5wID0gaW5wOwotCWlmIChz
cmN2KSB7Ci0JCW1lbWNweSgmY2EtPnNuZHJjdiwgc3Jjdiwgc2l6ZW9mKHN0cnVjdCBzY3RwX25v
bnBhZF9zbmRyY3ZpbmZvKSk7Ci0JfQotCS8qCi0JICogdGFrZSBvZmYgdGhlIHNlbmRhbGwgZmxh
ZywgaXQgd291bGQgYmUgYmFkIGlmIHdlIGZhaWxlZCB0byBkbwotCSAqIHRoaXMgOi0wCi0JICov
Ci0JY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmPSB+U0NUUF9TRU5EQUxMOwotCS8qIGdldCBsZW5n
dGggYW5kIG1idWYgY2hhaW4gKi8KLQlpZiAodWlvKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18p
Ci0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQljYS0+c25kbGVuID0gdWlvLT51aW9fcmVz
aWQ7Ci0jZWxzZQotCQljYS0+c25kbGVuID0gdWlvX3Jlc2lkKHVpbyk7Ci0jZW5kaWYKLSNlbHNl
Ci0JCWNhLT5zbmRsZW4gPSAoaW50KXVpby0+dWlvX3Jlc2lkOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lOUF9TTyhpbnApLCAwKTsK
LSNlbmRpZgotCQljYS0+bSA9IHNjdHBfY29weV9vdXRfYWxsKHVpbywgY2EtPnNuZGxlbik7Ci0j
aWYgZGVmaW5lZChfX0FQUExFX18pCi0JCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5w
KSwgMCk7Ci0jZW5kaWYKLQkJaWYgKGNhLT5tID09IE5VTEwpIHsKLQkJCVNDVFBfRlJFRShjYSwg
U0NUUF9NX0NPUFlBTCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9
Ci0JfSBlbHNlIHsKLQkJLyogR2F0aGVyIHRoZSBsZW5ndGggb2YgdGhlIHNlbmQgKi8KLQkJc3Ry
dWN0IG1idWYgKm1hdDsKLQotCQljYS0+c25kbGVuID0gMDsKLQkJZm9yIChtYXQgPSBtOyBtYXQ7
IG1hdCA9IFNDVFBfQlVGX05FWFQobWF0KSkgewotCQkJY2EtPnNuZGxlbiArPSBTQ1RQX0JVRl9M
RU4obWF0KTsKLQkJfQotCX0KLQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKE5VTEwsIHNj
dHBfc2VuZGFsbF9pdGVyYXRvciwgTlVMTCwKLQkJCQkgICAgIFNDVFBfUENCX0FOWV9GTEFHUywg
U0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTLAotCQkJCSAgICAgU0NUUF9BU09DX0FOWV9TVEFURSwKLQkJ
CQkgICAgICh2b2lkICopY2EsIDAsCi0JCQkJICAgICBzY3RwX3NlbmRhbGxfY29tcGxldGVzLCBp
bnAsIDEpOwotCWlmIChyZXQpIHsKLQkJU0NUUF9QUklOVEYoIkZhaWxlZCB0byBpbml0aWF0ZSBp
dGVyYXRvciBmb3Igc2VuZGFsbFxuIik7Ci0JCVNDVFBfRlJFRShjYSwgU0NUUF9NX0NPUFlBTCk7
Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFRkFVTFQpOwotCQlyZXR1cm4gKEVGQVVMVCk7Ci0JfQotCXJldHVybiAo
MCk7Ci19Ci0KLQotdm9pZAotc2N0cF90b3NzX29sZF9jb29raWVzKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrLCAqbmNoazsKLQotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5j
b250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewotCQlpZiAoY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgewotCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5j
b250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQkJCWlmIChjaGstPmRhdGEpIHsK
LQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJ
fQotCQkJYXNvYy0+Y3RybF9xdWV1ZV9jbnQtLTsKLQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2Is
IGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0KLX0KLQotdm9pZAotc2N0cF90b3Nz
X29sZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7Ci0Jc3Ry
dWN0IHNjdHBfYXNjb25mX2NodW5rICphY3A7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JVEFJ
TFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25leHQs
IG5jaGspIHsKLQkJLyogZmluZCBTQ1RQX0FTQ09ORiBjaHVuayBpbiBxdWV1ZSAqLwotCQlpZiAo
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpIHsKLQkJCWlmIChjaGstPmRhdGEp
IHsKLQkJCQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICop
OwotCQkJCWlmIChTQ1RQX1RTTl9HVChudG9obChhY3AtPnNlcmlhbF9udW1iZXIpLCBhc29jLT5h
c2NvbmZfc2VxX291dF9hY2tlZCkpIHsKLQkJCQkJLyogTm90IEFja2VkIHlldCAqLwotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9zZW5kX3F1
ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2Zy
ZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJCWFzb2MtPmN0
cmxfcXVldWVfY250LS07Ci0JCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfY2xlYW5fdXBf
ZGF0YWxpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLAotICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipkYXRhX2xpc3QsCi0gICAg
aW50IGJ1bmRsZV9hdCwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JaW50IGk7Ci0J
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwotCi0JZm9yIChpID0gMDsgaSA8IGJ1bmRsZV9h
dDsgaSsrKSB7Ci0JCS8qIG9mZiBvZiB0aGUgc2VuZCBxdWV1ZSAqLwotCQlUQUlMUV9SRU1PVkUo
JmFzb2MtPnNlbmRfcXVldWUsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKLQkJYXNvYy0+c2Vu
ZF9xdWV1ZV9jbnQtLTsKLQkJaWYgKGkgPiAwKSB7Ci0JCQkvKgotCQkJICogQW55IGNodW5rIE5P
VCAwIHlvdSB6YXAgdGhlIHRpbWUgY2h1bmsgMCBnZXRzCi0JCQkgKiB6YXBwZWQgb3Igc2V0IGJh
c2VkIG9uIGlmIGEgUlRPIG1lYXN1cm1lbnQgaXMKLQkJCSAqIG5lZWRlZC4KLQkJCSAqLwotCQkJ
ZGF0YV9saXN0W2ldLT5kb19ydHQgPSAwOwotCQl9Ci0JCS8qIHJlY29yZCB0aW1lICovCi0JCWRh
dGFfbGlzdFtpXS0+c2VudF9yY3ZfdGltZSA9IG5ldC0+bGFzdF9zZW50X3RpbWU7Ci0JCWRhdGFf
bGlzdFtpXS0+cmVjLmRhdGEuY3duZF9hdF9zZW5kID0gbmV0LT5jd25kOwotCQlkYXRhX2xpc3Rb
aV0tPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNu
OwotCQlpZiAoZGF0YV9saXN0W2ldLT53aG9UbyA9PSBOVUxMKSB7Ci0JCQlkYXRhX2xpc3RbaV0t
Pndob1RvID0gbmV0OwotCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJ
fQotCQkvKiBvbiB0byB0aGUgc2VudCBxdWV1ZSAqLwotCQl0cDEgPSBUQUlMUV9MQVNUKCZhc29j
LT5zZW50X3F1ZXVlLCBzY3RwY2h1bmtfbGlzdGhlYWQpOwotCQlpZiAoKHRwMSkgJiYgU0NUUF9U
U05fR1QodHAxLT5yZWMuZGF0YS50c24sIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuKSkgewot
CQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHBwOwotCi0JCQkvKiBuZWVkIHRvIG1vdmUgYmFj
ayAqLwotCQliYWNrX3VwX21vcmU6Ci0JCQl0cHAgPSBUQUlMUV9QUkVWKHRwMSwgc2N0cGNodW5r
X2xpc3RoZWFkLCBzY3RwX25leHQpOwotCQkJaWYgKHRwcCA9PSBOVUxMKSB7Ci0JCQkJVEFJTFFf
SU5TRVJUX0JFRk9SRSh0cDEsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKLQkJCQlnb3RvIGFs
bF9kb25lOwotCQkJfQotCQkJdHAxID0gdHBwOwotCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVj
LmRhdGEudHNuLCBkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLnRzbikpIHsKLQkJCQlnb3RvIGJhY2tf
dXBfbW9yZTsKLQkJCX0KLQkJCVRBSUxRX0lOU0VSVF9BRlRFUigmYXNvYy0+c2VudF9xdWV1ZSwg
dHAxLCBkYXRhX2xpc3RbaV0sIHNjdHBfbmV4dCk7Ci0JCX0gZWxzZSB7Ci0JCQlUQUlMUV9JTlNF
UlRfVEFJTCgmYXNvYy0+c2VudF9xdWV1ZSwKLQkJCQkJICBkYXRhX2xpc3RbaV0sCi0JCQkJCSAg
c2N0cF9uZXh0KTsKLQkJfQotCWFsbF9kb25lOgotCQkvKiBUaGlzIGRvZXMgbm90IGxvd2VyIHVu
dGlsIHRoZSBjdW0tYWNrIHBhc3NlcyBpdCAqLwotCQlhc29jLT5zZW50X3F1ZXVlX2NudCsrOwot
CQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPD0gMCkgJiYKLQkJICAgIChhc29jLT50b3RhbF9mbGln
aHQgPT0gMCkgJiYKLQkJICAgIChidW5kbGVfYXQgPT0gMSkpIHsKLQkJCS8qIE1hcmsgdGhlIGNo
dW5rIGFzIGJlaW5nIGEgd2luZG93IHByb2JlICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc193
aW5kb3dwcm9iZWQpOwotCQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0JCXNjdHBf
YXVkaXRfbG9nKDB4QzIsIDMpOwotI2VuZGlmCi0JCWRhdGFfbGlzdFtpXS0+c2VudCA9IFNDVFBf
REFUQUdSQU1fU0VOVDsKLQkJZGF0YV9saXN0W2ldLT5zbmRfY291bnQgPSAxOwotCQlkYXRhX2xp
c3RbaV0tPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKLQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7
Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVAsCi0JCQkJICAgICAgIGRhdGFf
bGlzdFtpXS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPmJv
b2tfc2l6ZSwKLQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpZGF0YV9saXN0W2ldLT53
aG9UbywKLQkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOwotCQl9Ci0JCXNj
dHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UoZGF0YV9saXN0W2ldKTsKLQkJc2N0cF90b3RhbF9mbGln
aHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7Ci0JCQlzY3RwX2xv
Z19yd25kKFNDVFBfREVDUkVBU0VfUEVFUl9SV05ELAotCQkJICAgICAgYXNvYy0+cGVlcnNfcndu
ZCwgZGF0YV9saXN0W2ldLT5zZW5kX3NpemUsIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2No
dW5rX29oKSk7Ci0JCX0KLQkJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIoYXNv
Yy0+cGVlcnNfcnduZCwKLQkJCQkJCSAgICAodWludDMyX3QpIChkYXRhX2xpc3RbaV0tPnNlbmRf
c2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkpOwotCQlpZiAoYXNv
Yy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7
Ci0JCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQkJYXNvYy0+cGVlcnNfcnduZCA9
IDA7Ci0JCX0KLQl9Ci0JaWYgKGFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Bh
Y2tldF90cmFuc21pdHRlZCkgewotCQkoKmFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBk
YXRlX3BhY2tldF90cmFuc21pdHRlZCkoc3RjYiwgbmV0KTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2NsZWFuX3VwX2N0bChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0p
Ci17Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKLQotCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykg
ewotCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwK
LQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spIHx8
CS8qIEVZICovCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9IRUFSVEJFQVRf
UkVRVUVTVCkgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVB
VF9BQ0spIHx8Ci0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NV
TV9UU04pIHx8Ci0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TSFVURE9XTikg
fHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOX0FDSykgfHwK
LQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElPTl9FUlJPUikgfHwK
LQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1BBQ0tFVF9EUk9QUEVEKSB8fAot
CQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0FDSykgfHwKLQkJICAg
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9DV1IpIHx8Ci0JCSAgICAoY2hrLT5y
ZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkZfQUNLKSkgewotCQkJLyogU3RyYXkgY2h1bmtz
IG11c3QgYmUgY2xlYW5lZCB1cCAqLwotCWNsZWFuX3VwX2FueXdheToKLQkJCVRBSUxRX1JFTU9W
RSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlpZiAoY2hr
LT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0g
TlVMTDsKLQkJCX0KLQkJCWFzb2MtPmN0cmxfcXVldWVfY250LS07Ci0JCQlpZiAoY2hrLT5yZWMu
Y2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pCi0JCQkJYXNvYy0+ZndkX3Rzbl9j
bnQtLTsKLQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJfSBl
bHNlIGlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NUUkVBTV9SRVNFVCkgewotCQkJ
Lyogc3BlY2lhbCBoYW5kbGluZywgd2UgbXVzdCBsb29rIGludG8gdGhlIHBhcmFtICovCi0JCQlp
ZiAoY2hrICE9IGFzb2MtPnN0cl9yZXNldCkgewotCQkJCWdvdG8gY2xlYW5fdXBfYW55d2F5Owot
CQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdWludDMyX3QKLXNjdHBfY2FuX3dlX3NwbGl0X3Ro
aXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBsZW5ndGgsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNwYWNlX2xlZnQsIHVpbnQzMl90IGZyYWdfcG9pbnQsIGludCBl
ZW9yX29uKQotewotCS8qIE1ha2UgYSBkZWNpc2lvbiBvbiBpZiBJIHNob3VsZCBzcGxpdCBhCi0J
ICogbXNnIGludG8gbXVsdGlwbGUgcGFydHMuIFRoaXMgaXMgb25seSBhc2tlZCBvZgotCSAqIGlu
Y29tcGxldGUgbWVzc2FnZXMuCi0JICovCi0JaWYgKGVlb3Jfb24pIHsKLQkJLyogSWYgd2UgYXJl
IGRvaW5nIEVFT1Igd2UgbmVlZCB0byBhbHdheXMgc2VuZAotCQkgKiBpdCBpZiBpdHMgdGhlIGVu
dGlyZSB0aGluZywgc2luY2UgaXQgbWlnaHQKLQkJICogYmUgYWxsIHRoZSBndXkgaXMgcHV0dGlu
ZyBpbiB0aGUgaG9wcGVyLgotCQkgKi8KLQkJaWYgKHNwYWNlX2xlZnQgPj0gbGVuZ3RoKSB7Ci0J
CQkvKi0KLQkJCSAqIElmIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZywKLQkJCSAqIHdlIGdldCBh
bm90aGVyIGNoYW5jZSB3aGVuIHRoZSBzYWNrCi0JCQkgKiBhcnJpdmVzIHRvIHRyYW5zbWl0IC0g
d2FpdCBmb3IgbW9yZSBkYXRhCi0JCQkgKi8KLQkJCWlmIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dCA9PSAwKSB7Ci0JCQkJLyogSWYgbm90aGluZyBpcyBpbiBmbGlnaHQsIHdlIHplcm8KLQkJCQkg
KiB0aGUgcGFja2V0IGNvdW50ZXIuCi0JCQkJICovCi0JCQkJcmV0dXJuIChsZW5ndGgpOwotCQkJ
fQotCQkJcmV0dXJuICgwKTsKLQotCQl9IGVsc2UgewotCQkJLyogWW91IGNhbiBmaWxsIHRoZSBy
ZXN0ICovCi0JCQlyZXR1cm4gKHNwYWNlX2xlZnQpOwotCQl9Ci0JfQotCS8qLQotCSAqIEZvciB0
aG9zZSBzdHJhbmdlIGZvbGsgdGhhdCBtYWtlIHRoZSBzZW5kIGJ1ZmZlcgotCSAqIHNtYWxsZXIg
dGhhbiBvdXIgZnJhZ21lbnRhdGlvbiBwb2ludCwgd2UgY2FuJ3QKLQkgKiBnZXQgYSBmdWxsIG1z
ZyBpbiBzbyB3ZSBoYXZlIHRvIGFsbG93IHNwbGl0dGluZy4KLQkgKi8KLQlpZiAoU0NUUF9TQl9M
SU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIDwgZnJhZ19wb2ludCkgewotCQlyZXR1cm4gKGxl
bmd0aCk7Ci0JfQotCWlmICgobGVuZ3RoIDw9IHNwYWNlX2xlZnQpIHx8Ci0JICAgICgobGVuZ3Ro
IC0gc3BhY2VfbGVmdCkgPCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3Jlc2lkdWFsKSkpIHsK
LQkJLyogU3ViLW9wdGltaWFsIHJlc2lkdWFsIGRvbid0IHNwbGl0IGluIG5vbi1lZW9yIG1vZGUu
ICovCi0JCXJldHVybiAoMCk7Ci0JfQotCS8qIElmIHdlIHJlYWNoIGhlcmUgbGVuZ3RoIGlzIGxh
cmdlcgotCSAqIHRoYW4gdGhlIHNwYWNlX2xlZnQuIERvIHdlIHdpc2ggdG8gc3BsaXQKLQkgKiBp
dCBmb3IgdGhlIHNha2Ugb2YgcGFja2V0IHB1dHRpbmcgdG9nZXRoZXI/Ci0JICovCi0JaWYgKHNw
YWNlX2xlZnQgPj0gbWluKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRfcG9pbnQpLCBm
cmFnX3BvaW50KSkgewotCQkvKiBJdHMgb2sgdG8gc3BsaXQgaXQgKi8KLQkJcmV0dXJuIChtaW4o
c3BhY2VfbGVmdCwgZnJhZ19wb2ludCkpOwotCX0KLQkvKiBOb3BlLCBjYW4ndCBzcGxpdCAqLwot
CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9tb3ZlX3RvX291dHF1ZXVl
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9zdHJlYW1fb3V0ICpzdHJxLAotICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNwYWNl
X2xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZnJhZ19wb2ludCwKLSAgICAg
ICAgICAgICAgICAgICAgICBpbnQgKmdpdmV1cCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQg
ZWVvcl9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqYmFpbCwKLSAgICAgICAgICAg
ICAgICAgICAgICBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1VO
VVNFRAotI2VuZGlmCi0JKQotewotCS8qIE1vdmUgZnJvbSB0aGUgc3RyZWFtIHRvIHRoZSBzZW5k
X3F1ZXVlIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHRvdGFsICovCi0Jc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwOwotCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICpkY2hr
aD1OVUxMOwotCXN0cnVjdCBzY3RwX2lkYXRhX2NodW5rICpuZGNoa2g9TlVMTDsKLQl1aW50MzJf
dCB0b19tb3ZlLCBsZW5ndGg7Ci0JaW50IGxlYWRpbmc7Ci0JdWludDhfdCByY3ZfZmxhZ3MgPSAw
OwotCXVpbnQ4X3Qgc29tZV90YWtlbjsKLQl1aW50OF90IHNlbmRfbG9ja191cCA9IDA7Ci0KLQlT
Q1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci1vbmVfbW9y
ZV90aW1lOgotCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0Jc3AgPSBUQUlMUV9GSVJTVCgm
c3RycS0+b3V0cXVldWUpOwotCWlmIChzcCA9PSBOVUxMKSB7Ci0JCWlmIChzZW5kX2xvY2tfdXAg
PT0gMCkgewotCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJc2VuZF9sb2NrX3VwID0g
MTsKLQkJfQotCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7Ci0JCWlmIChzcCkg
ewotCQkJZ290byBvbmVfbW9yZV90aW1lOwotCQl9Ci0JCWlmICgoc2N0cF9pc19mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUikgPT0gMCkgJiYKLQkJ
ICAgIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJgotCQkgICAgKHN0cnEtPmxh
c3RfbXNnX2luY29tcGxldGUpKSB7Ci0JCQlTQ1RQX1BSSU5URigiSHVoPyBTdHJlYW06JWQgbG1f
aW5fYz0lZCBidXQgcXVldWUgaXMgTlVMTFxuIiwKLQkJCSAgICAgICAgICAgIHN0cnEtPnNpZCwK
LQkJCSAgICAgICAgICAgIHN0cnEtPmxhc3RfbXNnX2luY29tcGxldGUpOwotCQkJc3RycS0+bGFz
dF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0JCX0KLQkJdG9fbW92ZSA9IDA7Ci0JCWlmIChzZW5kX2xv
Y2tfdXApIHsKLQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCQkJc2VuZF9sb2NrX3Vw
ID0gMDsKLQkJfQotCQlnb3RvIG91dF9vZjsKLQl9Ci0JaWYgKChzcC0+bXNnX2lzX2NvbXBsZXRl
KSAmJiAoc3AtPmxlbmd0aCA9PSAwKSkgewotCQlpZiAoc3AtPnNlbmRlcl9hbGxfZG9uZSkgewot
CQkJLyogV2UgYXJlIGRvaW5nIGRpZmZlcmVkIGNsZWFudXAuIExhc3QKLQkJCSAqIHRpbWUgdGhy
b3VnaCB3aGVuIHdlIHRvb2sgYWxsIHRoZSBkYXRhCi0JCQkgKiB0aGUgc2VuZGVyX2FsbF9kb25l
IHdhcyBub3Qgc2V0LgotCQkJICovCi0JCQlpZiAoKHNwLT5wdXRfbGFzdF9vdXQgPT0gMCkgJiYg
KHNwLT5kaXNjYXJkX3Jlc3QgPT0gMCkpIHsKLQkJCQlTQ1RQX1BSSU5URigiR2FrLCBwdXQgb3V0
IGVudGlyZSBtc2cgd2l0aCBOTyBlbmQhLTFcbiIpOwotCQkJCVNDVFBfUFJJTlRGKCJzZW5kZXJf
ZG9uZTolZCBsZW46JWQgbXNnX2NvbXA6JWQgcHV0X2xhc3Rfb3V0OiVkIHNlbmRfbG9jazolZFxu
IiwKLQkJCQkgICAgICAgICAgICBzcC0+c2VuZGVyX2FsbF9kb25lLAotCQkJCSAgICAgICAgICAg
IHNwLT5sZW5ndGgsCi0JCQkJICAgICAgICAgICAgc3AtPm1zZ19pc19jb21wbGV0ZSwKLQkJCQkg
ICAgICAgICAgICBzcC0+cHV0X2xhc3Rfb3V0LAotCQkJCSAgICAgICAgICAgIHNlbmRfbG9ja191
cCk7Ci0JCQl9Ci0JCQlpZiAoKFRBSUxRX05FWFQoc3AsIG5leHQpID09IE5VTEwpICYmIChzZW5k
X2xvY2tfdXAgID09IDApKSB7Ci0JCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJCXNl
bmRfbG9ja191cCA9IDE7Ci0JCQl9Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZhc29jLT5zdHJl
YW1fcXVldWVfY250LCAxKTsKLQkJCVRBSUxRX1JFTU9WRSgmc3RycS0+b3V0cXVldWUsIHNwLCBu
ZXh0KTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3Ry
ZWFtKHN0Y2IsIGFzb2MsIHN0cnEsIHNwLCBzZW5kX2xvY2tfdXApOwotCQkJaWYgKChzdHJxLT5z
dGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJICAgIChzdHJxLT5jaHVu
a3Nfb25fcXVldWVzID09IDApICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVl
KSkgewotCQkJCXN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCA9IDE7Ci0JCQl9Ci0JCQlpZiAoc3At
Pm5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcC0+bmV0KTsKLQkJCQlzcC0+bmV0
ID0gTlVMTDsKLQkJCX0KLQkJCWlmIChzcC0+ZGF0YSkgewotCQkJCXNjdHBfbV9mcmVlbShzcC0+
ZGF0YSk7Ci0JCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJfQotCQkJc2N0cF9mcmVlX2Ffc3RybW9x
KHN0Y2IsIHNwLCBzb19sb2NrZWQpOwotCQkJLyogd2UgY2FuJ3QgYmUgbG9ja2VkIHRvIGl0ICov
Ci0JCQlpZiAoc2VuZF9sb2NrX3VwKSB7Ci0JCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
Ci0JCQkJc2VuZF9sb2NrX3VwID0gMDsKLQkJCX0KLQkJCS8qIGJhY2sgdG8gZ2V0IHRoZSBuZXh0
IG1zZyAqLwotCQkJZ290byBvbmVfbW9yZV90aW1lOwotCQl9IGVsc2UgewotCQkJLyogc2VuZGVy
IGp1c3QgZmluaXNoZWQgdGhpcyBidXQKLQkJCSAqIHN0aWxsIGhvbGRzIGEgcmVmZXJlbmNlCi0J
CQkgKi8KLQkJCSpnaXZldXAgPSAxOwotCQkJdG9fbW92ZSA9IDA7Ci0JCQlnb3RvIG91dF9vZjsK
LQkJfQotCX0gZWxzZSB7Ci0JCS8qIGlzIHRoZXJlIHNvbWUgdG8gZ2V0ICovCi0JCWlmIChzcC0+
bGVuZ3RoID09IDApIHsKLQkJCS8qIG5vICovCi0JCQkqZ2l2ZXVwID0gMTsKLQkJCXRvX21vdmUg
PSAwOwotCQkJZ290byBvdXRfb2Y7Ci0JCX0gZWxzZSBpZiAoc3AtPmRpc2NhcmRfcmVzdCkgewot
CQkJaWYgKHNlbmRfbG9ja191cCA9PSAwKSB7Ci0JCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2Ip
OwotCQkJCXNlbmRfbG9ja191cCA9IDE7Ci0JCQl9Ci0JCQkvKiBXaGFjayBkb3duIHRoZSBzaXpl
ICovCi0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1
ZV9zaXplLCBzcC0+bGVuZ3RoKTsKLQkJCWlmICgoc3RjYi0+c2N0cF9zb2NrZXQgIT0gTlVMTCkg
JiYKLQkJCSAgICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAotCQkJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpKSkgewotCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPnNj
dHBfc29ja2V0LT5zb19zbmQuc2JfY2MsIHNwLT5sZW5ndGgpOwotCQkJfQotCQkJaWYgKHNwLT5k
YXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKLQkJCQlzcC0+ZGF0YSA9IE5VTEw7
Ci0JCQkJc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0JCQl9Ci0JCQlzcC0+bGVuZ3RoID0gMDsKLQkJ
CXNwLT5zb21lX3Rha2VuID0gMTsKLQkJCSpnaXZldXAgPSAxOwotCQkJdG9fbW92ZSA9IDA7Ci0J
CQlnb3RvIG91dF9vZjsKLQkJfQotCX0KLQlzb21lX3Rha2VuID0gc3AtPnNvbWVfdGFrZW47Ci1y
ZV9sb29rOgotCWxlbmd0aCA9IHNwLT5sZW5ndGg7Ci0JaWYgKHNwLT5tc2dfaXNfY29tcGxldGUp
IHsKLQkJLyogVGhlIG1lc3NhZ2UgaXMgY29tcGxldGUgKi8KLQkJdG9fbW92ZSA9IG1pbihsZW5n
dGgsIGZyYWdfcG9pbnQpOwotCQlpZiAodG9fbW92ZSA9PSBsZW5ndGgpIHsKLQkJCS8qIEFsbCBv
ZiBpdCBmaXRzIGluIHRoZSBNVFUgKi8KLQkJCWlmIChzcC0+c29tZV90YWtlbikgewotCQkJCXJj
dl9mbGFncyB8PSBTQ1RQX0RBVEFfTEFTVF9GUkFHOwotCQkJfSBlbHNlIHsKLQkJCQlyY3ZfZmxh
Z3MgfD0gU0NUUF9EQVRBX05PVF9GUkFHOwotCQkJfQotCQkJc3AtPnB1dF9sYXN0X291dCA9IDE7
Ci0JCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9TQUNLX0lNTUVESUFURUxZKSB7Ci0JCQkJ
cmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZOwotCQkJfQotCQl9IGVsc2Ug
ewotCQkJLyogTm90IGFsbCBvZiBpdCBmaXRzLCB3ZSBmcmFnbWVudCAqLwotCQkJaWYgKHNwLT5z
b21lX3Rha2VuID09IDApIHsKLQkJCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX0ZJUlNUX0ZSQUc7
Ci0JCQl9Ci0JCQlzcC0+c29tZV90YWtlbiA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQl0b19tb3Zl
ID0gc2N0cF9jYW5fd2Vfc3BsaXRfdGhpcyhzdGNiLCBsZW5ndGgsIHNwYWNlX2xlZnQsIGZyYWdf
cG9pbnQsIGVlb3JfbW9kZSk7Ci0JCWlmICh0b19tb3ZlKSB7Ci0JCQkvKi0KLQkJCSAqIFdlIHVz
ZSBhIHNuYXBzaG90IG9mIGxlbmd0aCBpbiBjYXNlIGl0Ci0JCQkgKiBpcyBleHBhbmRpbmcgZHVy
aW5nIHRoZSBjb21wYXJlLgotCQkJICovCi0JCQl1aW50MzJfdCBsbGVuOwotCi0JCQlsbGVuID0g
bGVuZ3RoOwotCQkJaWYgKHRvX21vdmUgPj0gbGxlbikgewotCQkJCXRvX21vdmUgPSBsbGVuOwot
CQkJCWlmIChzZW5kX2xvY2tfdXAgPT0gMCkgewotCQkJCQkvKi0KLQkJCQkJICogV2UgYXJlIHRh
a2luZyBhbGwgb2YgYW4gaW5jb21wbGV0ZSBtc2cKLQkJCQkJICogdGh1cyB3ZSBuZWVkIGEgc2Vu
ZCBsb2NrLgotCQkJCQkgKi8KLQkJCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJCQlz
ZW5kX2xvY2tfdXAgPSAxOwotCQkJCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSkgewotCQkJCQkJ
LyogdGhlIHNlbmRlciBmaW5pc2hlZCB0aGUgbXNnICovCi0JCQkJCQlnb3RvIHJlX2xvb2s7Ci0J
CQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoc3AtPnNvbWVfdGFrZW4gPT0gMCkgewotCQkJCXJj
dl9mbGFncyB8PSBTQ1RQX0RBVEFfRklSU1RfRlJBRzsKLQkJCQlzcC0+c29tZV90YWtlbiA9IDE7
Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3RoaW5nIHRvIHRha2UuICovCi0JCQkqZ2l2ZXVw
ID0gMTsKLQkJCXRvX21vdmUgPSAwOwotCQkJZ290byBvdXRfb2Y7Ci0JCX0KLQl9Ci0KLQkvKiBJ
ZiB3ZSByZWFjaCBoZXJlLCB3ZSBjYW4gY29weSBvdXQgYSBjaHVuayAqLwotCXNjdHBfYWxsb2Nf
YV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQkvKiBObyBjaHVuayBt
ZW1vcnkgKi8KLQkJKmdpdmV1cCA9IDE7Ci0JCXRvX21vdmUgPSAwOwotCQlnb3RvIG91dF9vZjsK
LQl9Ci0JLyogU2V0dXAgZm9yIHVub3JkZXJlZCBpZiBuZWVkZWQgYnkgbG9va2luZwotCSAqIGF0
IHRoZSB1c2VyIHNlbnQgaW5mbyBmbGFncy4KLQkgKi8KLQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYg
U0NUUF9VTk9SREVSRUQpIHsKLQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9VTk9SREVSRUQ7Ci0J
fQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpICYm
Ci0JICAgIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgPT0gU0NUUF9FT0YpIHsKLQkJcmN2
X2ZsYWdzIHw9IFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZOwotCX0KLQkvKiBjbGVhciBvdXQg
dGhlIGNodW5rIGJlZm9yZSBzZXR0aW5nIHVwICovCi0JbWVtc2V0KGNoaywgMCwgc2l6ZW9mKCpj
aGspKTsKLQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IHJjdl9mbGFnczsKLQotCWlmICh0b19t
b3ZlID49IGxlbmd0aCkgewotCQkvKiB3ZSB0aGluayB3ZSBjYW4gc3RlYWwgdGhlIHdob2xlIHRo
aW5nICovCi0JCWlmICgoc3AtPnNlbmRlcl9hbGxfZG9uZSA9PSAwKSAmJiAoc2VuZF9sb2NrX3Vw
ID09IDApKSB7Ci0JCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JCQlzZW5kX2xvY2tfdXAg
PSAxOwotCQl9Ci0JCWlmICh0b19tb3ZlIDwgc3AtPmxlbmd0aCkgewotCQkJLyogYmFpbCwgaXQg
Y2hhbmdlZCAqLwotCQkJZ290byBkb250X2RvX2l0OwotCQl9Ci0JCWNoay0+ZGF0YSA9IHNwLT5k
YXRhOwotCQljaGstPmxhc3RfbWJ1ZiA9IHNwLT50YWlsX21idWY7Ci0JCS8qIHJlZ2lzdGVyIHRo
ZSBzdGVhbGluZyAqLwotCQlzcC0+ZGF0YSA9IHNwLT50YWlsX21idWYgPSBOVUxMOwotCX0gZWxz
ZSB7Ci0JCXN0cnVjdCBtYnVmICptOwotCWRvbnRfZG9faXQ6Ci0JCWNoay0+ZGF0YSA9IFNDVFBf
TV9DT1BZTShzcC0+ZGF0YSwgMCwgdG9fbW92ZSwgTV9OT1dBSVQpOwotCQljaGstPmxhc3RfbWJ1
ZiA9IE5VTEw7Ci0JCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQkJc3AtPnNvbWVfdGFrZW4g
PSBzb21lX3Rha2VuOwotCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQp
OwotCQkJKmJhaWwgPSAxOwotCQkJdG9fbW92ZSA9IDA7Ci0JCQlnb3RvIG91dF9vZjsKLQkJfQot
I2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX21i
YyhjaGstPmRhdGEsIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNlbmRpZgotCQkvKiBQdWxsIG9m
ZiB0aGUgZGF0YSAqLwotCQltX2FkaihzcC0+ZGF0YSwgdG9fbW92ZSk7Ci0JCS8qIE5vdyBsZXRz
IHdvcmsgb3VyIHdheSBkb3duIGFuZCBjb21wYWN0IGl0ICovCi0JCW0gPSBzcC0+ZGF0YTsKLQkJ
d2hpbGUgKG0gJiYgKFNDVFBfQlVGX0xFTihtKSA9PSAwKSkgewotCQkJc3AtPmRhdGEgID0gU0NU
UF9CVUZfTkVYVChtKTsKLQkJCVNDVFBfQlVGX05FWFQobSkgPSBOVUxMOwotCQkJaWYgKHNwLT50
YWlsX21idWYgPT0gbSkgewotCQkJCS8qLQotCQkJCSAqIEZyZWVpbmcgdGFpbD8gVFNOSCBzaW5j
ZQotCQkJCSAqIHdlIHN1cHBvc2VkbHkgd2VyZSB0YWtpbmcgbGVzcwotCQkJCSAqIHRoYW4gdGhl
IHNwLT5sZW5ndGguCi0JCQkJICovCi0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCXBhbmljKCJIdWgs
IGZyZWluZyB0YWlsPyAtIFRTTkgiKTsKLSNlbHNlCi0JCQkJU0NUUF9QUklOVEYoIkh1aCwgZnJl
ZWluZyB0YWlsPyAtIFRTTkhcbiIpOwotCQkJCXNwLT50YWlsX21idWYgPSBzcC0+ZGF0YSA9IE5V
TEw7Ci0JCQkJc3AtPmxlbmd0aCA9IDA7Ci0jZW5kaWYKLQotCQkJfQotCQkJc2N0cF9tX2ZyZWUo
bSk7Ci0JCQltID0gc3AtPmRhdGE7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfQlVGX0lTX0VYVEVOREVE
KGNoay0+ZGF0YSkpIHsKLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDE7Ci0JfSBlbHNlIHsKLQkJY2hr
LT5jb3B5X2J5X3JlZiA9IDA7Ci0JfQotCS8qIGdldCBsYXN0X21idWYgYW5kIGNvdW50cyBvZiBt
YiB1c2FnZQotCSAqIFRoaXMgaXMgdWdseSBidXQgaG9wZWZ1bGx5IGl0cyBvbmx5IG9uZSBtYnVm
LgotCSAqLwotCWlmIChjaGstPmxhc3RfbWJ1ZiA9PSBOVUxMKSB7Ci0JCWNoay0+bGFzdF9tYnVm
ID0gY2hrLT5kYXRhOwotCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChjaGstPmxhc3RfbWJ1ZikgIT0g
TlVMTCkgewotCQkJY2hrLT5sYXN0X21idWYgPSBTQ1RQX0JVRl9ORVhUKGNoay0+bGFzdF9tYnVm
KTsKLQkJfQotCX0KLQotCWlmICh0b19tb3ZlID4gbGVuZ3RoKSB7Ci0JCS8qLSBUaGlzIHNob3Vs
ZCBub3QgaGFwcGVuIGVpdGhlcgotCQkgKiBzaW5jZSB3ZSBhbHdheXMgbG93ZXIgdG9fbW92ZSB0
byB0aGUgc2l6ZQotCQkgKiBvZiBzcC0+bGVuZ3RoIGlmIGl0cyBsYXJnZXIuCi0JCSAqLwotI2lm
ZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoIkh1aCwgaG93IGNhbiB0b19tb3ZlIGJlIGxhcmdlcj8i
KTsKLSNlbHNlCi0JCVNDVFBfUFJJTlRGKCJIdWgsIGhvdyBjYW4gdG9fbW92ZSBiZSBsYXJnZXI/
XG4iKTsKLQkJc3AtPmxlbmd0aCA9IDA7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzcC0+bGVuZ3RoLCB0b19tb3ZlKTsKLQl9Ci0JbGVhZGluZyA9IFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKTsKLQlpZiAoTV9MRUFESU5HU1BBQ0UoY2hrLT5kYXRhKSA8
IGxlYWRpbmcpIHsKLQkJLyogTm90IGVub3VnaCByb29tIGZvciBhIGNodW5rIGhlYWRlciwgZ2V0
IHNvbWUgKi8KLQkJc3RydWN0IG1idWYgKm07Ci0KLQkJbSA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZygxLCAwLCBNX05PV0FJVCwgMCwgTVRfREFUQSk7Ci0JCWlmIChtID09IE5VTEwpIHsKLQkJCS8q
Ci0JCQkgKiB3ZSdyZSBpbiB0cm91YmxlIGhlcmUuIF9QUkVQRU5EIGJlbG93IHdpbGwgZnJlZQot
CQkJICogYWxsIHRoZSBkYXRhIGlmIHRoZXJlIGlzIG5vIGxlYWRpbmcgc3BhY2UsIHNvIHdlCi0J
CQkgKiBtdXN0IHB1dCB0aGUgZGF0YSBiYWNrIGFuZCByZXN0b3JlLgotCQkJICovCi0JCQlpZiAo
c2VuZF9sb2NrX3VwID09IDApIHsKLQkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JCQkJ
c2VuZF9sb2NrX3VwID0gMTsKLQkJCX0KLQkJCWlmIChzcC0+ZGF0YSA9PSBOVUxMKSB7Ci0JCQkJ
LyogdW5zdGVhbCB0aGUgZGF0YSAqLwotCQkJCXNwLT5kYXRhID0gY2hrLT5kYXRhOwotCQkJCXNw
LT50YWlsX21idWYgPSBjaGstPmxhc3RfbWJ1ZjsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IG1i
dWYgKm1fdG1wOwotCQkJCS8qIHJlYXNzZW1ibGUgdGhlIGRhdGEgKi8KLQkJCQltX3RtcCA9IHNw
LT5kYXRhOwotCQkJCXNwLT5kYXRhID0gY2hrLT5kYXRhOwotCQkJCVNDVFBfQlVGX05FWFQoY2hr
LT5sYXN0X21idWYpID0gbV90bXA7Ci0JCQl9Ci0JCQlzcC0+c29tZV90YWtlbiA9IHNvbWVfdGFr
ZW47Ci0JCQlhdG9taWNfYWRkX2ludCgmc3AtPmxlbmd0aCwgdG9fbW92ZSk7Ci0JCQljaGstPmRh
dGEgPSBOVUxMOwotCQkJKmJhaWwgPSAxOwotCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hr
LCBzb19sb2NrZWQpOwotCQkJdG9fbW92ZSA9IDA7Ci0JCQlnb3RvIG91dF9vZjsKLQkJfSBlbHNl
IHsKLQkJCVNDVFBfQlVGX0xFTihtKSA9IDA7Ci0JCQlTQ1RQX0JVRl9ORVhUKG0pID0gY2hrLT5k
YXRhOwotCQkJY2hrLT5kYXRhID0gbTsKLQkJCU1fQUxJR04oY2hrLT5kYXRhLCA0KTsKLQkJfQot
CX0KLQlTQ1RQX0JVRl9QUkVQRU5EKGNoay0+ZGF0YSwgU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFE
KHN0Y2IpLCBNX05PV0FJVCk7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCS8qIEhFTFAs
IFRTTkggc2luY2Ugd2UgYXNzdXJlZCBpdCB3b3VsZCBub3QgYWJvdmU/ICovCi0jaWZkZWYgSU5W
QVJJQU5UUwotCQlwYW5pYygicHJlcGVuZCBmYWlsZXMgSEVMUD8iKTsKLSNlbHNlCi0JCVNDVFBf
UFJJTlRGKCJwcmVwZW5kIGZhaWxzIEhFTFA/XG4iKTsKLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3Rj
YiwgY2hrLCBzb19sb2NrZWQpOwotI2VuZGlmCi0JCSpiYWlsID0gMTsKLQkJdG9fbW92ZSA9IDA7
Ci0JCWdvdG8gb3V0X29mOwotCX0KLQlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpOwotCWNoay0+Ym9va19zaXplID0gY2hrLT5zZW5kX3NpemUg
PSAodWludDE2X3QpKHRvX21vdmUgKyBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOwot
CWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVDsKLQotCWNoay0+ZmxhZ3MgPSAwOwotCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNo
ay0+cGFkX2lucGxhY2UgPSAwOwotCWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7Ci0JaWYgKHN0Y2It
PmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJaWYgKHJjdl9mbGFncyAmIFNDVFBfREFU
QV9VTk9SREVSRUQpIHsKLQkJCS8qIEp1c3QgdXNlIDAuIFRoZSByZWNlaXZlciBpZ25vcmVzIHRo
ZSB2YWx1ZXMuICovCi0JCQljaGstPnJlYy5kYXRhLm1pZCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlj
aGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7Ci0JCQlpZiAocmN2X2Zs
YWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCXN0cnEtPm5leHRfbWlkX29yZGVyZWQr
KzsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5P
UkRFUkVEKSB7Ci0JCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX3Vub3JkZXJl
ZDsKLQkJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7Ci0JCQkJc3RycS0+
bmV4dF9taWRfdW5vcmRlcmVkKys7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQljaGstPnJlYy5kYXRh
Lm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7Ci0JCQlpZiAocmN2X2ZsYWdzICYgU0NUUF9E
QVRBX0xBU1RfRlJBRykgewotCQkJCXN0cnEtPm5leHRfbWlkX29yZGVyZWQrKzsKLQkJCX0KLQkJ
fQotCX0KLQljaGstPnJlYy5kYXRhLnNpZCA9IHNwLT5zaWQ7Ci0JY2hrLT5yZWMuZGF0YS5wcGlk
ID0gc3AtPnBwaWQ7Ci0JY2hrLT5yZWMuZGF0YS5jb250ZXh0ID0gc3AtPmNvbnRleHQ7Ci0JY2hr
LT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOwotCi0JY2hrLT5yZWMuZGF0YS50
aW1ldG9kcm9wID0gc3AtPnRzOwotCWNoay0+ZmxhZ3MgPSBzcC0+YWN0X2ZsYWdzOwotCi0JaWYg
KHNwLT5uZXQpIHsKLQkJY2hrLT53aG9UbyA9IHNwLT5uZXQ7Ci0JCWF0b21pY19hZGRfaW50KCZj
aGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCX0gZWxzZQotCQljaGstPndob1RvID0gTlVMTDsK
LQotCWlmIChzcC0+aG9sZHNfa2V5X3JlZikgewotCQljaGstPmF1dGhfa2V5aWQgPSBzcC0+YXV0
aF9rZXlpZDsKLQkJc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCk7
Ci0JCWNoay0+aG9sZHNfa2V5X3JlZiA9IDE7Ci0JfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
IHx8IGRlZmluZWQoX19QYW5kYV9fKQotCWNoay0+cmVjLmRhdGEudHNuID0gYXRvbWljX2ZldGNo
YWRkX2ludCgmYXNvYy0+c2VuZGluZ19zZXEsIDEpOwotI2Vsc2UKLQljaGstPnJlYy5kYXRhLnRz
biA9IGFzb2MtPnNlbmRpbmdfc2VxKys7Ci0jZW5kaWYKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfQVRfU0VORF8yX09VVFEpIHsKLQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9TVFJNT1VUX0xPR19TRU5ELAotCQkgICAgICAgICAgICAgICAodWludDMy
X3QpKHVpbnRwdHJfdClzdGNiLCBzcC0+bGVuZ3RoLAotCQkgICAgICAgICAgICAgICAodWludDMy
X3QpKChjaGstPnJlYy5kYXRhLnNpZCA8PCAxNikgfCAoMHgwMDAwZmZmZiAmIGNoay0+cmVjLmRh
dGEubWlkKSksCi0JCSAgICAgICAgICAgICAgIGNoay0+cmVjLmRhdGEudHNuKTsKLQl9Ci0JaWYg
KHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJZGNoa2ggPSBtdG9kKGNoay0+
ZGF0YSwgc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqKTsKLQl9IGVsc2UgewotCQluZGNoa2ggPSBt
dG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKik7Ci0JfQotCS8qCi0JICog
UHV0IHRoZSByZXN0IG9mIHRoZSB0aGluZ3MgaW4gcGxhY2Ugbm93LiBTaXplIHdhcyBkb25lCi0J
ICogZWFybGllciBpbiBwcmV2aW91cyBsb29wIHByaW9yIHRvIHBhZGRpbmcuCi0JICovCi0KLSNp
ZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwot
CWlmIChhc29jLT50c25fb3V0X2F0ID49IFNDVFBfVFNOX0xPR19TSVpFKSB7Ci0JCWFzb2MtPnRz
bl9vdXRfYXQgPSAwOwotCQlhc29jLT50c25fb3V0X3dyYXBwZWQgPSAxOwotCX0KLQlhc29jLT5v
dXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRdLnRzbiA9IGNoay0+cmVjLmRhdGEudHNuOwotCWFz
b2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0uc3RybSA9IGNoay0+cmVjLmRhdGEuc2lk
OwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0uc2VxID0gY2hrLT5yZWMuZGF0
YS5taWQ7Ci0JYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zeiA9IGNoay0+c2Vu
ZF9zaXplOwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0uZmxncyA9IGNoay0+
cmVjLmRhdGEucmN2X2ZsYWdzOwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0u
c3RjYiA9ICh2b2lkICopc3RjYjsKLQlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRd
LmluX3BvcyA9IGFzb2MtPnRzbl9vdXRfYXQ7Ci0JYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25f
b3V0X2F0XS5pbl9vdXQgPSAyOwotCWFzb2MtPnRzbl9vdXRfYXQrKzsKLSNlbmRpZgotCWlmIChz
dGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCWRjaGtoLT5jaC5jaHVua190eXBl
ID0gU0NUUF9EQVRBOwotCQlkY2hraC0+Y2guY2h1bmtfZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJj
dl9mbGFnczsKLQkJZGNoa2gtPmRwLnRzbiA9IGh0b25sKGNoay0+cmVjLmRhdGEudHNuKTsKLQkJ
ZGNoa2gtPmRwLnNpZCA9IGh0b25zKHN0cnEtPnNpZCk7Ci0JCWRjaGtoLT5kcC5zc24gPSBodG9u
cygodWludDE2X3QpY2hrLT5yZWMuZGF0YS5taWQpOwotCQlkY2hraC0+ZHAucHBpZCA9IGNoay0+
cmVjLmRhdGEucHBpZDsKLQkJZGNoa2gtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2Vu
ZF9zaXplKTsKLQl9IGVsc2UgewotCQluZGNoa2gtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0lEQVRB
OwotCQluZGNoa2gtPmNoLmNodW5rX2ZsYWdzID0gY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7Ci0J
CW5kY2hraC0+ZHAudHNuID0gaHRvbmwoY2hrLT5yZWMuZGF0YS50c24pOwotCQluZGNoa2gtPmRw
LnNpZCA9IGh0b25zKHN0cnEtPnNpZCk7Ci0JCW5kY2hraC0+ZHAucmVzZXJ2ZWQgPSBodG9ucygw
KTsKLQkJbmRjaGtoLT5kcC5taWQgPSBodG9ubChjaGstPnJlYy5kYXRhLm1pZCk7Ci0JCWlmIChz
cC0+ZnNuID09IDApCi0JCQluZGNoa2gtPmRwLnBwaWRfZnNuLnBwaWQgPSBjaGstPnJlYy5kYXRh
LnBwaWQ7Ci0JCWVsc2UKLQkJCW5kY2hraC0+ZHAucHBpZF9mc24uZnNuID0gaHRvbmwoc3AtPmZz
bik7Ci0JCXNwLT5mc24rKzsKLQkJbmRjaGtoLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGst
PnNlbmRfc2l6ZSk7Ci0JfQotCS8qIE5vdyBhZHZhbmNlIHRoZSBjaGstPnNlbmRfc2l6ZSBieSB0
aGUgYWN0dWFsIHBhZCBuZWVkZWQuICovCi0JaWYgKGNoay0+c2VuZF9zaXplIDwgU0NUUF9TSVpF
MzIoY2hrLT5ib29rX3NpemUpKSB7Ci0JCS8qIG5lZWQgYSBwYWQgKi8KLQkJc3RydWN0IG1idWYg
KmxtOwotCQlpbnQgcGFkczsKLQotCQlwYWRzID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUp
IC0gY2hrLT5zZW5kX3NpemU7Ci0JCWxtID0gc2N0cF9wYWRfbGFzdG1idWYoY2hrLT5kYXRhLCBw
YWRzLCBjaGstPmxhc3RfbWJ1Zik7Ci0JCWlmIChsbSAhPSBOVUxMKSB7Ci0JCQljaGstPmxhc3Rf
bWJ1ZiA9IGxtOwotCQkJY2hrLT5wYWRfaW5wbGFjZSA9IDE7Ci0JCX0KLQkJY2hrLT5zZW5kX3Np
emUgKz0gcGFkczsKLQl9Ci0JaWYgKFBSX1NDVFBfRU5BQkxFRChjaGstPmZsYWdzKSkgewotCQlh
c29jLT5wcl9zY3RwX2NudCsrOwotCX0KLQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSAmJiAoc3At
Pmxlbmd0aCA9PSAwKSAmJiAoc3AtPnNlbmRlcl9hbGxfZG9uZSkpIHsKLQkJLyogQWxsIGRvbmUg
cHVsbCBhbmQga2lsbCB0aGUgbWVzc2FnZSAqLwotCQlpZiAoc3AtPnB1dF9sYXN0X291dCA9PSAw
KSB7Ci0JCQlTQ1RQX1BSSU5URigiR2FrLCBwdXQgb3V0IGVudGlyZSBtc2cgd2l0aCBOTyBlbmQh
LTJcbiIpOwotCQkJU0NUUF9QUklOVEYoInNlbmRlcl9kb25lOiVkIGxlbjolZCBtc2dfY29tcDol
ZCBwdXRfbGFzdF9vdXQ6JWQgc2VuZF9sb2NrOiVkXG4iLAotCQkJICAgICAgICAgICAgc3AtPnNl
bmRlcl9hbGxfZG9uZSwKLQkJCSAgICAgICAgICAgIHNwLT5sZW5ndGgsCi0JCQkgICAgICAgICAg
ICBzcC0+bXNnX2lzX2NvbXBsZXRlLAotCQkJICAgICAgICAgICAgc3AtPnB1dF9sYXN0X291dCwK
LQkJCSAgICAgICAgICAgIHNlbmRfbG9ja191cCk7Ci0JCX0KLQkJaWYgKChzZW5kX2xvY2tfdXAg
PT0gMCkgJiYgKFRBSUxRX05FWFQoc3AsIG5leHQpID09IE5VTEwpKSB7Ci0JCQlTQ1RQX1RDQl9T
RU5EX0xPQ0soc3RjYik7Ci0JCQlzZW5kX2xvY2tfdXAgPSAxOwotCQl9Ci0JCWF0b21pY19zdWJ0
cmFjdF9pbnQoJmFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQsIDEpOwotCQlUQUlMUV9SRU1PVkUoJnN0
cnEtPm91dHF1ZXVlLCBzcCwgbmV4dCk7Ci0JCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBf
c3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIHN0cnEsIHNwLCBzZW5kX2xvY2tfdXAp
OwotCQlpZiAoKHN0cnEtPnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCi0J
CSAgICAoc3RycS0+Y2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgotCQkgICAgVEFJTFFfRU1QVFko
JnN0cnEtPm91dHF1ZXVlKSkgewotCQkJc3RjYi0+YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsKLQkJ
fQotCQlpZiAoc3AtPm5ldCkgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOwot
CQkJc3AtPm5ldCA9IE5VTEw7Ci0JCX0KLQkJaWYgKHNwLT5kYXRhKSB7Ci0JCQlzY3RwX21fZnJl
ZW0oc3AtPmRhdGEpOwotCQkJc3AtPmRhdGEgPSBOVUxMOwotCQl9Ci0JCXNjdHBfZnJlZV9hX3N0
cm1vcShzdGNiLCBzcCwgc29fbG9ja2VkKTsKLQl9Ci0JYXNvYy0+Y2h1bmtzX29uX291dF9xdWV1
ZSsrOwotCXN0cnEtPmNodW5rc19vbl9xdWV1ZXMrKzsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNv
Yy0+c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCWFzb2MtPnNlbmRfcXVldWVfY250Kys7
Ci1vdXRfb2Y6Ci0JaWYgKHNlbmRfbG9ja191cCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhz
dGNiKTsKLQl9Ci0JcmV0dXJuICh0b19tb3ZlKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9m
aWxsX291dHF1ZXVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsIGludCBmcmFnX3BvaW50LCBpbnQgZWVvcl9tb2RlLCBpbnQgKnF1aXRfbm93LCBpbnQg
c29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0Jc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKLQl1aW50MzJf
dCBzcGFjZV9sZWZ0LCBtb3ZlZCwgdG90YWxfbW92ZWQ7Ci0JaW50IGJhaWwsIGdpdmV1cDsKLQot
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQl0b3Rh
bF9tb3ZlZCA9IDA7Ci0Jc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlzcGFjZV9sZWZ0ID0gbmV0LT5tdHUgLSBT
Q1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
Y2FzZSBBRl9JTkVUNjoKLQkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJI
RUFEOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNh
c2UgQUZfQ09OTjoKLQkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcik7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJLyogVFNOSCAqLwotCQkJ
c3BhY2VfbGVmdCA9IG5ldC0+bXR1OwotCQkJYnJlYWs7Ci0JfQotCS8qIE5lZWQgYW4gYWxsb3dh
bmNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgdG9vICovCi0Jc3BhY2VfbGVmdCAtPSBTQ1RQ
X0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYik7Ci0KLQkvKiBtdXN0IG1ha2UgZXZlbiB3b3JkIGJv
dW5kYXJ5ICovCi0Jc3BhY2VfbGVmdCAmPSAweGZmZmZmZmZjOwotCXN0cnEgPSBzdGNiLT5hc29j
LnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NlbGVjdF9zdHJlYW0oc3RjYiwgbmV0LCBhc29jKTsKLQln
aXZldXAgPSAwOwotCWJhaWwgPSAwOwotCXdoaWxlICgoc3BhY2VfbGVmdCA+IDApICYmIChzdHJx
ICE9IE5VTEwpKSB7Ci0JCW1vdmVkID0gc2N0cF9tb3ZlX3RvX291dHF1ZXVlKHN0Y2IsIHN0cnEs
IHNwYWNlX2xlZnQsIGZyYWdfcG9pbnQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICZnaXZldXAsIGVlb3JfbW9kZSwgJmJhaWwsIHNvX2xvY2tlZCk7Ci0JCXN0Y2ItPmFzb2Muc3Nf
ZnVuY3Rpb25zLnNjdHBfc3Nfc2NoZWR1bGVkKHN0Y2IsIG5ldCwgYXNvYywgc3RycSwgbW92ZWQp
OwotCQlpZiAoKGdpdmV1cCAhPSAwKSB8fCAoYmFpbCAhPSAwKSkgewotCQkJYnJlYWs7Ci0JCX0K
LQkJc3RycSA9IHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nfc2VsZWN0X3N0cmVhbShz
dGNiLCBuZXQsIGFzb2MpOwotCQl0b3RhbF9tb3ZlZCArPSBtb3ZlZDsKLQkJc3BhY2VfbGVmdCAt
PSBtb3ZlZDsKLQkJaWYgKHNwYWNlX2xlZnQgPj0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0
Y2IpKSB7Ci0JCQlzcGFjZV9sZWZ0IC09IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsK
LQkJfSBlbHNlIHsKLQkJCXNwYWNlX2xlZnQgPSAwOwotCQl9Ci0JCXNwYWNlX2xlZnQgJj0gMHhm
ZmZmZmZmYzsKLQl9Ci0JaWYgKGJhaWwgIT0gMCkKLQkJKnF1aXRfbm93ID0gMTsKLQotCXN0Y2It
PmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcGFja2V0X2RvbmUoc3RjYiwgbmV0LCBhc29jKTsK
LQotCWlmICh0b3RhbF9tb3ZlZCA9PSAwKSB7Ci0JCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9v
bl9vZmYgPT0gMCkgJiYKLQkJICAgIChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uKSkgewotCQkJLyogcmFuIGRyeSBmb3IgcHJpbWFyeSBuZXR3b3JrIG5ldCAqLwotCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcHJpbWFyeV9yYW5kcnkpOwotCQl9IGVsc2UgaWYgKHN0Y2ItPmFz
b2Muc2N0cF9jbXRfb25fb2ZmID4gMCkgewotCQkJLyogcmFuIGRyeSB3aXRoIENNVCBvbiAqLwot
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfY210X3JhbmRyeSk7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQK
LXNjdHBfZml4X2Vjbl9lY2hvKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+
Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+cmVjLmNodW5rX2lk
LmlkID09IFNDVFBfRUNOX0VDSE8pIHsKLQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5T
RU5UOwotCQl9Ci0JfQotfQotCi12b2lkCi1zY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCXN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0JdW5zaWduZWQgaW50IGk7Ci0KLQlp
ZiAobmV0ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0J
Zm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJVEFJTFFf
Rk9SRUFDSChzcCwgJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgbmV4dCkgewotCQkJ
aWYgKHNwLT5uZXQgPT0gbmV0KSB7Ci0JCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQp
OwotCQkJCXNwLT5uZXQgPSBOVUxMOwotCQkJfQotCQl9Ci0JfQotCVRBSUxRX0ZPUkVBQ0goY2hr
LCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChjaGstPndob1RvID09IG5l
dCkgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwotCQkJY2hrLT53aG9U
byA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLWludAotc2N0cF9tZWRfY2h1bmtfb3V0cHV0KHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCi0JCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICAg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSAgICAgIGludCAqbnVtX291dCwK
LQkJICAgICAgaW50ICpyZWFzb25fY29kZSwKLQkJICAgICAgaW50IGNvbnRyb2xfb25seSwgaW50
IGZyb21fd2hlcmUsCi0JCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxl
ZCwgaW50IGZyYWdfcG9pbnQsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkgICAgICBTQ1RQX1VOVVNFRAot
I2VuZGlmCi0JKQotewotCS8qKgotCSAqIE9rIHRoaXMgaXMgdGhlIGdlbmVyaWMgY2h1bmsgc2Vy
dmljZSBxdWV1ZS4gd2UgbXVzdCBkbyB0aGUKLQkgKiBmb2xsb3dpbmc6Ci0JICogLSBTZXJ2aWNl
IHRoZSBzdHJlYW0gcXVldWUgdGhhdCBpcyBuZXh0LCBtb3ZpbmcgYW55Ci0JICogICBtZXNzYWdl
IChub3RlIEkgbXVzdCBnZXQgYSBjb21wbGV0ZSBtZXNzYWdlIGkuZS4gRklSU1QvTUlERExFIGFu
ZAotCSAqICAgTEFTVCB0byB0aGUgb3V0IHF1ZXVlIGluIG9uZSBwYXNzKSBhbmQgYXNzaWduaW5n
IFRTTidzLiBUaGlzCi0JICogICBvbmx5IGFwcGx5cyB0aG91Z2ggaWYgdGhlIHBlZXIgZG9lcyBu
b3Qgc3VwcG9ydCBOREFUQS4gRm9yIE5EQVRBCi0JICogICBjaHVua3MgaXRzIG9rIHRvIG5vdCBz
ZW5kIHRoZSBlbnRpcmUgbWVzc2FnZSA7LSkKLQkgKiAtIENoZWNrIHRvIHNlZSBpZiB0aGUgY3du
ZC9yd25kIGFsbG93cyBhbnkgb3V0cHV0LCBpZiBzbyB3ZSBnbyBhaGVhZCBhbmQKLQkgKiAgIGZv
bXVsYXRlIGFuZCBzZW5kIHRoZSBsb3cgbGV2ZWwgY2h1bmtzLiBNYWtpbmcgc3VyZSB0byBjb21i
aW5lCi0JICogICBhbnkgY29udHJvbCBpbiB0aGUgY29udHJvbCBjaHVuayBxdWV1ZSBhbHNvLgot
CSAqLwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKnN0YXJ0X2F0LCAqc2Fja19nb2VzX3RvID0g
TlVMTCwgKm9sZF9zdGFydF9hdCA9IE5VTEw7Ci0Jc3RydWN0IG1idWYgKm91dGNoYWluLCAqZW5k
b3V0Y2hhaW47Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKLQotCS8qIHRl
bXAgYXJyYXlzIGZvciB1bmxpbmtpbmcgKi8KLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpkYXRh
X2xpc3RbU0NUUF9NQVhfREFUQV9CVU5ETElOR107Ci0JaW50IG5vX2ZyYWdtZW50ZmxnLCBlcnJv
cjsKLQl1bnNpZ25lZCBpbnQgbWF4X3J3bmRfcGVyX2Rlc3QsIG1heF9zZW5kX3Blcl9kZXN0Owot
CWludCBvbmVfY2h1bmssIGhiZmxhZywgc2tpcF9kYXRhX2Zvcl90aGlzX25ldDsKLQlpbnQgYXNj
b25mLCBjb29raWUsIG5vX291dF9jbnQ7Ci0JaW50IGJ1bmRsZV9hdCwgY3RsX2NudCwgbm9fZGF0
YV9jaHVua3MsIGVlb3JfbW9kZTsKLQl1bnNpZ25lZCBpbnQgbXR1LCByX210dSwgb210dSwgbXhf
bXR1LCB0b19vdXQ7Ci0JaW50IHRzbnNfc2VudCA9IDA7Ci0JdWludDMyX3QgYXV0aF9vZmZzZXQg
PSAwOwotCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGggPSBOVUxMOwotCXVpbnQxNl90IGF1
dGhfa2V5aWQ7Ci0JaW50IG92ZXJyaWRlX29rID0gMTsKLQlpbnQgc2tpcF9maWxsX3VwID0gMDsK
LQlpbnQgZGF0YV9hdXRoX3JlcWQgPSAwOwotCS8qIEpSUyA1LzE0LzA3IC0gQWRkIGZsYWcgZm9y
IHdoZXRoZXIgYSBoZWFydGJlYXQgaXMgc2VudCB0bwotCSAgIHRoZSBkZXN0aW5hdGlvbi4gKi8K
LQlpbnQgcXVpdF9ub3cgPSAwOwotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaWYgKHNvX2xv
Y2tlZCkgewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0gZWxzZSB7
Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9Ci0jZW5kaWYKLQkq
bnVtX291dCA9IDA7Ci0JKnJlYXNvbl9jb2RlID0gMDsKLQlhdXRoX2tleWlkID0gc3RjYi0+YXNv
Yy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7Ci0JaWYgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVf
U0hVVERPV05fUEVORElORykgfHwKLQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVU
RE9XTl9SRUNFSVZFRCkgfHwKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX0VYUExJQ0lUX0VPUikpKSB7Ci0JCWVlb3JfbW9kZSA9IDE7Ci0JfSBlbHNlIHsKLQkJ
ZWVvcl9tb2RlID0gMDsKLQl9Ci0JY3RsX2NudCA9IG5vX291dF9jbnQgPSBhc2NvbmYgPSBjb29r
aWUgPSAwOwotCS8qCi0JICogRmlyc3QgbGV0cyBwcmltZSB0aGUgcHVtcC4gRm9yIGVhY2ggZGVz
dGluYXRpb24sIGlmIHRoZXJlIGlzIHJvb20KLQkgKiBpbiB0aGUgZmxpZ2h0IHNpemUsIGF0dGVt
cHQgdG8gcHVsbCBhbiBNVFUncyB3b3J0aCBvdXQgb2YgdGhlCi0JICogc3RyZWFtIHF1ZXVlcyBp
bnRvIHRoZSBnZW5lcmFsIHNlbmRfcXVldWUKLQkgKi8KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEMyLCAyKTsKLSNlbmRpZgotCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKHN0Y2IpOwotCWhiZmxhZyA9IDA7Ci0JaWYgKGNvbnRyb2xfb25seSkKLQkJbm9fZGF0
YV9jaHVua3MgPSAxOwotCWVsc2UKLQkJbm9fZGF0YV9jaHVua3MgPSAwOwotCi0JLyogTm90aGlu
ZyB0byBwb3NzaWJsZSB0byBzZW5kPyAqLwotCWlmICgoVEFJTFFfRU1QVFkoJmFzb2MtPmNvbnRy
b2xfc2VuZF9xdWV1ZSkgfHwKLQkgICAgIChhc29jLT5jdHJsX3F1ZXVlX2NudCA9PSBzdGNiLT5h
c29jLmVjbl9lY2hvX2NudF9vbnEpKSAmJgotCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+YXNjb25m
X3NlbmRfcXVldWUpICYmCi0JICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJgot
CSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNvX2xvY2tlZCkgPT0gMCkgewot
CW5vdGhpbmdfdG9fc2VuZDoKLQkJKnJlYXNvbl9jb2RlID0gOTsKLQkJcmV0dXJuICgwKTsKLQl9
Ci0JaWYgKGFzb2MtPnBlZXJzX3J3bmQgPT0gMCkgewotCQkvKiBObyByb29tIGluIHBlZXJzIHJ3
bmQgKi8KLQkJKnJlYXNvbl9jb2RlID0gMTsKLQkJaWYgKGFzb2MtPnRvdGFsX2ZsaWdodCA+IDAp
IHsKLQkJCS8qIHdlIGFyZSBhbGxvd2VkIG9uZSBjaHVuayBpbiBmbGlnaHQgKi8KLQkJCW5vX2Rh
dGFfY2h1bmtzID0gMTsKLQkJfQotCX0KLQlpZiAoc3RjYi0+YXNvYy5lY25fZWNob19jbnRfb25x
KSB7Ci0JCS8qIFJlY29yZCB3aGVyZSBhIHNhY2sgZ29lcywgaWYgYW55ICovCi0JCWlmIChub19k
YXRhX2NodW5rcyAmJgotCQkgICAgKGFzb2MtPmN0cmxfcXVldWVfY250ID09IHN0Y2ItPmFzb2Mu
ZWNuX2VjaG9fY250X29ucSkpIHsKLQkJCS8qIE5vdGhpbmcgYnV0IEVDTmUgdG8gc2VuZCAtIHdl
IGRvbid0IGRvIHRoYXQgKi8KLQkJCWdvdG8gbm90aGluZ190b19zZW5kOwotCQl9Ci0JCVRBSUxR
X0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJ
CWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAotCQkJ
ICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spKSB7Ci0J
CQkJc2Fja19nb2VzX3RvID0gY2hrLT53aG9UbzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0K
LQltYXhfcnduZF9wZXJfZGVzdCA9ICgoYXNvYy0+cGVlcnNfcnduZCArIGFzb2MtPnRvdGFsX2Zs
aWdodCkgLyBhc29jLT5udW1uZXRzKTsKLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpCi0JCW1heF9z
ZW5kX3Blcl9kZXN0ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC8gYXNv
Yy0+bnVtbmV0czsKLQllbHNlCi0JCW1heF9zZW5kX3Blcl9kZXN0ID0gMDsKLQlpZiAobm9fZGF0
YV9jaHVua3MgPT0gMCkgewotCQkvKiBIb3cgbWFueSBub24tZGlyZWN0ZWQgY2h1bmtzIGFyZSB0
aGVyZT8gKi8KLQkJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25l
eHQpIHsKLQkJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKLQkJCQkvKiBXZSBhbHJlYWR5IGhh
dmUgbm9uLWRpcmVjdGVkCi0JCQkJICogY2h1bmtzIG9uIHRoZSBxdWV1ZSwgbm8gbmVlZAotCQkJ
CSAqIHRvIGRvIGEgZmlsbC11cC4KLQkJCQkgKi8KLQkJCQlza2lwX2ZpbGxfdXAgPSAxOwotCQkJ
CWJyZWFrOwotCQkJfQotCQl9Ci0KLQl9Ci0JaWYgKChub19kYXRhX2NodW5rcyA9PSAwKSAmJgot
CSAgICAoc2tpcF9maWxsX3VwID09IDApICYmCi0JICAgICghc3RjYi0+YXNvYy5zc19mdW5jdGlv
bnMuc2N0cF9zc19pc19lbXB0eShzdGNiLCBhc29jKSkpIHsKLQkJVEFJTFFfRk9SRUFDSChuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCS8qCi0JCQkgKiBUaGlzIGZvciBsb29wIHdl
IGFyZSBpbiB0YWtlcyBpbgotCQkJICogZWFjaCBuZXQsIGlmIGl0cydzIGdvdCBzcGFjZSBpbiBj
d25kIGFuZAotCQkJICogaGFzIGRhdGEgc2VudCB0byBpdCAod2hlbiBDTVQgaXMgb2ZmKSB0aGVu
IGl0Ci0JCQkgKiBjYWxscyBzY3RwX2ZpbGxfb3V0cXVldWUgZm9yIHRoZSBuZXQuIFRoaXMgZ2V0
cwotCQkJICogZGF0YSBvbiB0aGUgc2VuZCBxdWV1ZSBmb3IgdGhhdCBuZXR3b3JrLgotCQkJICoK
LQkJCSAqIEluIHNjdHBfZmlsbF9vdXRxdWV1ZSBUU04ncyBhcmUgYXNzaWduZWQgYW5kCi0JCQkg
KiBkYXRhIGlzIGNvcGllZCBvdXQgb2YgdGhlIHN0cmVhbSBidWZmZXJzLiBOb3RlCi0JCQkgKiBt
b3N0bHkgY29weSBieSByZWZlcmVuY2UgKHdlIGhvcGUpLgotCQkJICovCi0JCQluZXQtPndpbmRv
d19wcm9iZSA9IDA7Ci0JCQlpZiAoKG5ldCAhPSBzdGNiLT5hc29jLmFsdGVybmF0ZSkgJiYKLQkJ
CSAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgfHwKLQkJCSAgICAgKCEobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHx8Ci0JCQkgICAgIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSkgewotCQkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDEsCi0JCQkJCQkgICAgICBTQ1RQX0NXTkRf
TE9HX0ZJTExfT1VUUV9DQUxMRUQpOwotCQkJCX0KLQkJCSAgICAgICAgY29udGludWU7Ci0JCQl9
Ci0JCQlpZiAoKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJhbnNtaXNz
aW9uX2JlZ2lucykgJiYKLQkJCSAgICAobmV0LT5mbGlnaHRfc2l6ZSA9PSAwKSkgewotCQkJCSgq
c3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX25ld190cmFuc21pc3Npb25fYmVnaW5z
KShzdGNiLCBuZXQpOwotCQkJfQotCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPj0gbmV0LT5jd25k
KSB7Ci0JCQkJLyogc2tpcCB0aGlzIG5ldHdvcmssIG5vIHJvb20gLSBjYW4ndCBmaWxsICovCi0J
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgMywKLQkJCQkJ
CSAgICAgIFNDVFBfQ1dORF9MT0dfRklMTF9PVVRRX0NBTExFRCk7Ci0JCQkJfQotCQkJCWNvbnRp
bnVlOwotCQkJfQotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0
LCA0LCBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQpOwotCQkJfQotCQkJc2N0cF9maWxs
X291dHF1ZXVlKHN0Y2IsIG5ldCwgZnJhZ19wb2ludCwgZWVvcl9tb2RlLCAmcXVpdF9ub3csIHNv
X2xvY2tlZCk7Ci0JCQlpZiAocXVpdF9ub3cpIHsKLQkJCQkvKiBtZW1vcnkgYWxsb2MgZmFpbHVy
ZSAqLwotCQkJCW5vX2RhdGFfY2h1bmtzID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0K
LQkvKiBub3cgc2VydmljZSBlYWNoIGRlc3RpbmF0aW9uIGFuZCBzZW5kIG91dCB3aGF0IHdlIGNh
biBmb3IgaXQgKi8KLQkvKiBOb3RoaW5nIHRvIHNlbmQ/ICovCi0JaWYgKFRBSUxRX0VNUFRZKCZh
c29jLT5jb250cm9sX3NlbmRfcXVldWUpICYmCi0JICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc2Nv
bmZfc2VuZF9xdWV1ZSkgJiYKLQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpKSB7
Ci0JCSpyZWFzb25fY29kZSA9IDg7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JaWYgKGFzb2MtPnNj
dHBfY210X29uX29mZiA+IDApIHsKLQkJLyogZ2V0IHRoZSBsYXN0IHN0YXJ0IHBvaW50ICovCi0J
CXN0YXJ0X2F0ID0gYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZDsKLQkJaWYgKHN0YXJ0
X2F0ID09IE5VTEwpIHsKLQkJCS8qIG51bGwgc28gdG8gYmVnaW5uaW5nICovCi0JCQlzdGFydF9h
dCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5uZXRzKTsKLQkJfSBlbHNlIHsKLQkJCXN0YXJ0X2F0ID0g
VEFJTFFfTkVYVChhc29jLT5sYXN0X25ldF9jbXRfc2VuZF9zdGFydGVkLCBzY3RwX25leHQpOwot
CQkJaWYgKHN0YXJ0X2F0ID09IE5VTEwpIHsKLQkJCQlzdGFydF9hdCA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5uZXRzKTsKLQkJCX0KLQkJfQotCQlhc29jLT5sYXN0X25ldF9jbXRfc2VuZF9zdGFydGVk
ID0gc3RhcnRfYXQ7Ci0JfSBlbHNlIHsKLQkJc3RhcnRfYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
bmV0cyk7Ci0JfQotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVl
LCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+d2hvVG8gPT0gTlVMTCkgewotCQkJaWYgKGFzb2Mt
PmFsdGVybmF0ZSkgewotCQkJCWNoay0+d2hvVG8gPSBhc29jLT5hbHRlcm5hdGU7Ci0JCQl9IGVs
c2UgewotCQkJCWNoay0+d2hvVG8gPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkJfQot
CQkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQl9Ci0J
b2xkX3N0YXJ0X2F0ID0gTlVMTDsKLWFnYWluX29uZV9tb3JlX3RpbWU6Ci0JZm9yIChuZXQgPSBz
dGFydF9hdCA7IG5ldCAhPSBOVUxMOyBuZXQgPSBUQUlMUV9ORVhUKG5ldCwgc2N0cF9uZXh0KSkg
ewotCQkvKiBob3cgbXVjaCBjYW4gd2Ugc2VuZD8gKi8KLQkJLyogU0NUUERCRygiRXhhbWluZSBm
b3Igc2VuZGluZyBuZXQ6JXhcbiIsICh1aW50MzJfdCluZXQpOyAqLwotCQlpZiAob2xkX3N0YXJ0
X2F0ICYmIChvbGRfc3RhcnRfYXQgPT0gbmV0KSkgewotCQkJLyogdGhyb3VnaCBsaXN0IG9jbXBs
ZXRlbHkuICovCi0JCQlicmVhazsKLQkJfQotCQl0c25zX3NlbnQgPSAweGE7Ci0JCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgotCQkgICAgVEFJTFFfRU1QVFko
JmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlKSAmJgotCQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPj0g
bmV0LT5jd25kKSkgewotCQkJLyogTm90aGluZyBvbiBjb250cm9sIG9yIGFzY29uZiBhbmQgZmxp
Z2h0IGlzIGZ1bGwsIHdlIGNhbiBza2lwCi0JCQkgKiBldmVuIGluIHRoZSBDTVQgY2FzZS4KLQkJ
CSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJYnVuZGxlX2F0ID0gMDsKLQkJZW5kb3V0Y2hhaW4g
PSBvdXRjaGFpbiA9IE5VTEw7Ci0JCW5vX2ZyYWdtZW50ZmxnID0gMTsKLQkJb25lX2NodW5rID0g
MDsKLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgewotCQkJ
c2tpcF9kYXRhX2Zvcl90aGlzX25ldCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlza2lwX2RhdGFfZm9y
X3RoaXNfbmV0ID0gMDsKLQkJfQotCQlzd2l0Y2ggKCgoc3RydWN0IHNvY2thZGRyICopJm5ldC0+
cm8uX2xfYWRkciktPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgot
CQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCWJyZWFrOwotI2Vu
ZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCW10dSA9IG5ldC0+bXR1IC0g
U0NUUF9NSU5fT1ZFUkhFQUQ7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQkJbXR1ID0gbmV0LT5tdHUgLSBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCS8qIFRTTkgg
Ki8KLQkJCW10dSA9IG5ldC0+bXR1OwotCQkJYnJlYWs7Ci0JCX0KLQkJbXhfbXR1ID0gbXR1Owot
CQl0b19vdXQgPSAwOwotCQlpZiAobXR1ID4gYXNvYy0+cGVlcnNfcnduZCkgewotCQkJaWYgKGFz
b2MtPnRvdGFsX2ZsaWdodCA+IDApIHsKLQkJCQkvKiBXZSBoYXZlIGEgcGFja2V0IGluIGZsaWdo
dCBzb21ld2hlcmUgKi8KLQkJCQlyX210dSA9IGFzb2MtPnBlZXJzX3J3bmQ7Ci0JCQl9IGVsc2Ug
ewotCQkJCS8qIFdlIGFyZSBhbHdheXMgYWxsb3dlZCB0byBzZW5kIG9uZSBNVFUgb3V0ICovCi0J
CQkJb25lX2NodW5rID0gMTsKLQkJCQlyX210dSA9IG10dTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CXJfbXR1ID0gbXR1OwotCQl9Ci0JCWVycm9yID0gMDsKLQkJLyoqKioqKioqKioqKioqKioqKioq
KioqKi8KLQkJLyogQVNDT05GIHRyYW5zbWlzc2lvbiAqLwotCQkvKioqKioqKioqKioqKioqKioq
KioqKioqLwotCQkvKiBOb3cgZmlyc3QgbGV0cyBnbyB0aHJvdWdoIHRoZSBhc2NvbmYgcXVldWUg
Ki8KLQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBz
Y3RwX25leHQsIG5jaGspIHsKLQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCAhPSBTQ1RQX0FT
Q09ORikgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGNoay0+d2hvVG8gPT0gTlVMTCkg
ewotCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgPT0gTlVMTCkgewotCQkJCQlpZiAoYXNvYy0+cHJp
bWFyeV9kZXN0aW5hdGlvbiAhPSBuZXQpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSAhPSBuZXQpIHsKLQkJCQkJCWJyZWFrOwot
CQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2hrLT53aG9UbyAhPSBuZXQpIHsK
LQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5U
ICYmCi0JCQkgICAgY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCQkvKgotCQkJICogaWYgbm8gQVVUSCBpcyB5ZXQgaW5jbHVkZWQgYW5kIHRo
aXMgY2h1bmsKLQkJCSAqIHJlcXVpcmVzIGl0LCBtYWtlIHN1cmUgdG8gYWNjb3VudCBmb3IgaXQu
ICBXZQotCQkJICogZG9uJ3QgYXBwbHkgdGhlIHNpemUgdW50aWwgdGhlIEFVVEggY2h1bmsgaXMK
LQkJCSAqIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UgdGhlcmUgaXMgbm8gcm9vbSBmb3IK
LQkJCSAqIHRoaXMgY2h1bmsuIE5PVEU6IHdlIG92ZXJsb2FkIHRoZSB1c2Ugb2YgIm9tdHUiCi0J
CQkgKiBoZXJlCi0JCQkgKi8KLQkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgotCQkJICAgIHNjdHBf
YXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKLQkJCQkJCQlzdGNi
LT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7Ci0JCQkJb210dSA9IHNjdHBfZ2V0X2F1dGhfY2h1
bmtfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKLQkJCX0gZWxzZQotCQkJCW9tdHUgPSAw
OwotCQkJLyogSGVyZSB3ZSBkbyBOT1QgZmFjdG9yIHRoZSByX210dSAqLwotCQkJaWYgKChjaGst
PnNlbmRfc2l6ZSA8IChpbnQpKG10dSAtIG9tdHUpKSB8fAotCQkJICAgIChjaGstPmZsYWdzICYg
Q0hVTktfRkxBR1NfRlJBR01FTlRfT0spKSB7Ci0JCQkJLyoKLQkJCQkgKiBXZSBwcm9iYWJseSBz
aG91bGQgZ2xvbSB0aGUgbWJ1ZiBjaGFpbgotCQkJCSAqIGZyb20gdGhlIGNoay0+ZGF0YSBmb3Ig
Y29udHJvbCBidXQgdGhlCi0JCQkJICogcHJvYmxlbSBpcyBpdCBiZWNvbWVzIHlldCBvbmUgbW9y
ZSBsZXZlbAotCQkJCSAqIG9mIHRyYWNraW5nIHRvIGRvIGlmIGZvciBzb21lIHJlYXNvbgotCQkJ
CSAqIG91dHB1dCBmYWlscy4gVGhlbiBJIGhhdmUgZ290IHRvCi0JCQkJICogcmVjb25zdHJ1Y3Qg
dGhlIG1lcmdlZCBjb250cm9sIGNoYWluLi4gZWwKLQkJCQkgKiB5dWNrby4uIGZvciBub3cgd2Ug
dGFrZSB0aGUgZWFzeSB3YXkgYW5kCi0JCQkJICogZG8gdGhlIGNvcHkKLQkJCQkgKi8KLQkJCQkv
KgotCQkJCSAqIEFkZCBhbiBBVVRIIGNodW5rLCBpZiBjaHVuayByZXF1aXJlcyBpdAotCQkJCSAq
IHNhdmUgdGhlIG9mZnNldCBpbnRvIHRoZSBjaGFpbiBmb3IgQVVUSAotCQkJCSAqLwotCQkJCWlm
ICgoYXV0aCA9PSBOVUxMKSAmJgotCQkJCSAgICAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5r
KGNoay0+cmVjLmNodW5rX2lkLmlkLAotCQkJCQkJCQkgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1
bmtzKSkpIHsKLQkJCQkJb3V0Y2hhaW4gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG91dGNoYWluLAot
CQkJCQkJCQkgICAgICAgJmVuZG91dGNoYWluLAotCQkJCQkJCQkgICAgICAgJmF1dGgsCi0JCQkJ
CQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCi0JCQkJCQkJCSAgICAgICBzdGNiLAotCQkJCQkJCQkg
ICAgICAgY2hrLT5yZWMuY2h1bmtfaWQuaWQpOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
NjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7Ci0JCQkJfQotCQkJCW91dGNoYWluID0gc2N0cF9j
b3B5X21idWZjaGFpbihjaGstPmRhdGEsIG91dGNoYWluLCAmZW5kb3V0Y2hhaW4sCi0JCQkJCQkJ
ICAgICAgIChpbnQpY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSwKLQkJCQkJCQkgICAg
ICAgY2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOwotCQkJCWlmIChvdXRjaGFpbiA9
PSBOVUxMKSB7Ci0JCQkJCSpyZWFzb25fY29kZSA9IDg7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCQkJ
CXJldHVybiAoRU5PTUVNKTsKLQkJCQl9Ci0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNj
dHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJCS8qIHVwZGF0ZSBvdXIgTVRVIHNpemUgKi8KLQkJ
CQlpZiAobXR1ID4gKGNoay0+c2VuZF9zaXplICsgb210dSkpCi0JCQkJCW10dSAtPSAoY2hrLT5z
ZW5kX3NpemUgKyBvbXR1KTsKLQkJCQllbHNlCi0JCQkJCW10dSA9IDA7Ci0JCQkJdG9fb3V0ICs9
IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpOwotCQkJCS8qIERvIGNsZWFyIElQX0RGID8gKi8KLQkJ
CQlpZiAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSB7Ci0JCQkJCW5vX2Zy
YWdtZW50ZmxnID0gMDsKLQkJCQl9Ci0JCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtl
X2RhdGEpCi0JCQkJCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCQkJLyoKLQkJCQkgKiBzZXQgaGIgZmxh
ZyBzaW5jZSB3ZSBjYW4KLQkJCQkgKiB1c2UgdGhlc2UgZm9yIFJUTwotCQkJCSAqLwotCQkJCWhi
ZmxhZyA9IDE7Ci0JCQkJYXNjb25mID0gMTsKLQkJCQkvKgotCQkJCSAqIHNob3VsZCBzeXNjdGwg
dGhpczogZG9uJ3QKLQkJCQkgKiBidW5kbGUgZGF0YSB3aXRoIEFTQ09ORgotCQkJCSAqIHNpbmNl
IGl0IHJlcXVpcmVzIEFVVEgKLQkJCQkgKi8KLQkJCQlub19kYXRhX2NodW5rcyA9IDE7Ci0JCQkJ
Y2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOwotCQkJCWlmIChjaGstPndob1RvID09IE5V
TEwpIHsKLQkJCQkJY2hrLT53aG9UbyA9IG5ldDsKLQkJCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+
cmVmX2NvdW50LCAxKTsKLQkJCQl9Ci0JCQkJY2hrLT5zbmRfY291bnQrKzsKLQkJCQlpZiAobXR1
ID09IDApIHsKLQkJCQkJLyoKLQkJCQkJICogT2sgd2UgYXJlIG91dCBvZiByb29tIGJ1dCB3ZSBj
YW4KLQkJCQkJICogb3V0cHV0IHdpdGhvdXQgZWZmZWN0aW5nIHRoZQotCQkJCQkgKiBmbGlnaHQg
c2l6ZSBzaW5jZSB0aGlzIGxpdHRsZSBndXkKLQkJCQkJICogaXMgYSBjb250cm9sIG9ubHkgcGFj
a2V0LgotCQkJCQkgKi8KLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVND
T05GLCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJCS8qCi0JCQkJCSAqIGRvIE5PVCBjbGVhciB0aGUg
YXNjb25mCi0JCQkJCSAqIGZsYWcgYXMgaXQgaXMgdXNlZCB0byBkbwotCQkJCQkgKiBhcHByb3By
aWF0ZSBzb3VyY2UgYWRkcmVzcwotCQkJCQkgKiBzZWxlY3Rpb24uCi0JCQkJCSAqLwotCQkJCQlp
ZiAoKm5vd19maWxsZWQgPT0gMCkgewotCQkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
bm93KTsKLQkJCQkJCSpub3dfZmlsbGVkID0gMTsKLQkJCQkJfQotCQkJCQluZXQtPmxhc3Rfc2Vu
dF90aW1lID0gKm5vdzsKLQkJCQkJaGJmbGFnID0gMDsKLQkJCQkJaWYgKChlcnJvciA9IHNjdHBf
bG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgbmV0LAotCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRj
aGFpbiwgYXV0aF9vZmZzZXQsIGF1dGgsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwKLQkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2ZyYWdtZW50ZmxnLCAwLCBh
c2NvbmYsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAt
PnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAotCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLAotI2VuZGlmCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb19sb2NrZWQpKSkgewotCQkJCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5vdCBv
dXRwdXQgKi8KLQkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJy
b3IgJWRcbiIsIGVycm9yKTsKLQkJCQkJCWlmIChmcm9tX3doZXJlID09IDApIHsKLQkJCQkJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycnVzcik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAo
ZXJyb3IgPT0gRU5PQlVGUykgewotCQkJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKLQkJ
CQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0JCQkJCQl9Ci0JCQkJCQkv
KiBlcnJvciwgY291bGQgbm90IG91dHB1dCAqLwotCQkJCQkJaWYgKGVycm9yID09IEVIT1NUVU5S
RUFDSCkgewotCQkJCQkJCS8qCi0JCQkJCQkJICogRGVzdGluYXRpb24gd2VudAotCQkJCQkJCSAq
IHVucmVhY2hhYmxlCi0JCQkJCQkJICogZHVyaW5nIHRoaXMgc2VuZAotCQkJCQkJCSAqLwotCQkJ
CQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKLQkJCQkJCX0KLQkJCQkJ
CSpyZWFzb25fY29kZSA9IDc7Ci0JCQkJCQlicmVhazsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWFz
b2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBpbmNyZWFz
ZSB0aGUgbnVtYmVyIHdlIHNlbnQsIGlmIGEKLQkJCQkJICogY29va2llIGlzIHNlbnQgd2UgZG9u
J3QgdGVsbCB0aGVtCi0JCQkJCSAqIGFueSB3YXMgc2VudCBvdXQuCi0JCQkJCSAqLwotCQkJCQlv
dXRjaGFpbiA9IGVuZG91dGNoYWluID0gTlVMTDsKLQkJCQkJYXV0aCA9IE5VTEw7Ci0JCQkJCWF1
dGhfb2Zmc2V0ID0gMDsKLQkJCQkJaWYgKCFub19vdXRfY250KQotCQkJCQkJKm51bV9vdXQgKz0g
Y3RsX2NudDsKLQkJCQkJLyogcmVjYWxjIGEgY2xlYW4gc2xhdGUgYW5kIHNldHVwICovCi0JCQkJ
CXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJ
CQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09W
RVJIRUFEOwotCQkJCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCQkJCWNhc2Ug
QUZfSU5FVDY6Ci0JCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJ
CQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQkJCWNh
c2UgQUZfQ09OTjoKLQkJCQkJCQltdHUgPSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cik7Ci0JCQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQkJCWRlZmF1bHQ6Ci0JCQkJCQkJLyogVFNO
SCAqLwotCQkJCQkJCW10dSA9IG5ldC0+bXR1OwotCQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJ
CXRvX291dCA9IDA7Ci0JCQkJCW5vX2ZyYWdtZW50ZmxnID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0K
LQkJaWYgKGVycm9yICE9IDApIHsKLQkJCS8qIHRyeSBuZXh0IG5ldCAqLwotCQkJY29udGludWU7
Ci0JCX0KLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJLyogQ29udHJvbCB0cmFuc21p
c3Npb24gKi8KLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJLyogTm93IGZpcnN0IGxl
dHMgZ28gdGhyb3VnaCB0aGUgY29udHJvbCBxdWV1ZSAqLwotCQlUQUlMUV9GT1JFQUNIX1NBRkUo
Y2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJCWlm
ICgoc2Fja19nb2VzX3RvKSAmJgotCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQ
X0VDTl9FQ0hPKSAmJgotCQkJICAgIChjaGstPndob1RvICE9IHNhY2tfZ29lc190bykpIHsKLQkJ
CQkvKgotCQkJCSAqIGlmIHdlIGhhdmUgYSBzYWNrIGluIHF1ZXVlLCBhbmQgd2UgYXJlIGxvb2tp
bmcgYXQgYW4KLQkJCQkgKiBlY24gZWNobyB0aGF0IGlzIE5PVCBxdWV1ZWQgdG8gd2hlcmUgdGhl
IHNhY2sgaXMgZ29pbmcuLgotCQkJCSAqLwotCQkJCWlmIChjaGstPndob1RvID09IG5ldCkgewot
CQkJCQkvKiBEb24ndCB0cmFuc21pdCBpdCB0byB3aGVyZSBpdHMgZ29pbmcgKGN1cnJlbnQgbmV0
KSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgaWYgKHNhY2tfZ29lc190byA9PSBuZXQp
IHsKLQkJCQkJLyogQnV0IGRvIHRyYW5zbWl0IGl0IHRvIHRoaXMgYWRkcmVzcyAqLwotCQkJCQln
b3RvIHNraXBfbmV0X2NoZWNrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChjaGstPndob1RvID09IE5V
TEwpIHsKLQkJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlID09IE5VTEwpIHsKLQkJCQkJaWYgKGFzb2Mt
PnByaW1hcnlfZGVzdGluYXRpb24gIT0gbmV0KSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQot
CQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgIT0gbmV0KSB7Ci0JCQkJCQlj
b250aW51ZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNoay0+d2hvVG8g
IT0gbmV0KSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJc2tpcF9uZXRfY2hlY2s6
Ci0JCQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlm
IChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJCQkvKgotCQkJCSAqIEl0
IG11c3QgYmUgdW5zZW50LiBDb29raWVzIGFuZCBBU0NPTkYncwotCQkJCSAqIGhhbmcgYXJvdW5k
IGJ1dCB0aGVyZSB0aW1lcnMgd2lsbCBmb3JjZQotCQkJCSAqIHdoZW4gbWFya2VkIGZvciByZXNl
bmQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKgotCQkJICogaWYgbm8gQVVU
SCBpcyB5ZXQgaW5jbHVkZWQgYW5kIHRoaXMgY2h1bmsKLQkJCSAqIHJlcXVpcmVzIGl0LCBtYWtl
IHN1cmUgdG8gYWNjb3VudCBmb3IgaXQuICBXZQotCQkJICogZG9uJ3QgYXBwbHkgdGhlIHNpemUg
dW50aWwgdGhlIEFVVEggY2h1bmsgaXMKLQkJCSAqIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNh
c2UgdGhlcmUgaXMgbm8gcm9vbSBmb3IKLQkJCSAqIHRoaXMgY2h1bmsuIE5PVEU6IHdlIG92ZXJs
b2FkIHRoZSB1c2Ugb2YgIm9tdHUiCi0JCQkgKiBoZXJlCi0JCQkgKi8KLQkJCWlmICgoYXV0aCA9
PSBOVUxMKSAmJgotCQkJICAgIHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5j
aHVua19pZC5pZCwKLQkJCQkJCQlzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7Ci0JCQkJ
b210dSA9IHNjdHBfZ2V0X2F1dGhfY2h1bmtfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsK
LQkJCX0gZWxzZQotCQkJCW9tdHUgPSAwOwotCQkJLyogSGVyZSB3ZSBkbyBOT1QgZmFjdG9yIHRo
ZSByX210dSAqLwotCQkJaWYgKChjaGstPnNlbmRfc2l6ZSA8PSAoaW50KShtdHUgLSBvbXR1KSkg
fHwKLQkJCSAgICAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSkgewotCQkJ
CS8qCi0JCQkJICogV2UgcHJvYmFibHkgc2hvdWxkIGdsb20gdGhlIG1idWYgY2hhaW4KLQkJCQkg
KiBmcm9tIHRoZSBjaGstPmRhdGEgZm9yIGNvbnRyb2wgYnV0IHRoZQotCQkJCSAqIHByb2JsZW0g
aXMgaXQgYmVjb21lcyB5ZXQgb25lIG1vcmUgbGV2ZWwKLQkJCQkgKiBvZiB0cmFja2luZyB0byBk
byBpZiBmb3Igc29tZSByZWFzb24KLQkJCQkgKiBvdXRwdXQgZmFpbHMuIFRoZW4gSSBoYXZlIGdv
dCB0bwotCQkJCSAqIHJlY29uc3RydWN0IHRoZSBtZXJnZWQgY29udHJvbCBjaGFpbi4uIGVsCi0J
CQkJICogeXVja28uLiBmb3Igbm93IHdlIHRha2UgdGhlIGVhc3kgd2F5IGFuZAotCQkJCSAqIGRv
IHRoZSBjb3B5Ci0JCQkJICovCi0JCQkJLyoKLQkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYg
Y2h1bmsgcmVxdWlyZXMgaXQKLQkJCQkgKiBzYXZlIHRoZSBvZmZzZXQgaW50byB0aGUgY2hhaW4g
Zm9yIEFVVEgKLQkJCQkgKi8KLQkJCQlpZiAoKGF1dGggPT0gTlVMTCkgJiYKLQkJCQkgICAgKHNj
dHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKLQkJCQkJCQkJ
IHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykpKSB7Ci0JCQkJCW91dGNoYWluID0gc2N0cF9h
ZGRfYXV0aF9jaHVuayhvdXRjaGFpbiwKLQkJCQkJCQkJICAgICAgICZlbmRvdXRjaGFpbiwKLQkJ
CQkJCQkJICAgICAgICZhdXRoLAotCQkJCQkJCQkgICAgICAgJmF1dGhfb2Zmc2V0LAotCQkJCQkJ
CQkgICAgICAgc3RjYiwKLQkJCQkJCQkJICAgICAgIGNoay0+cmVjLmNodW5rX2lkLmlkKTsKLQkJ
CQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJ
CX0KLQkJCQlvdXRjaGFpbiA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBvdXRjaGFp
biwgJmVuZG91dGNoYWluLAotCQkJCQkJCSAgICAgICAoaW50KWNoay0+cmVjLmNodW5rX2lkLmNh
bl90YWtlX2RhdGEsCi0JCQkJCQkJICAgICAgIGNoay0+c2VuZF9zaXplLCBjaGstPmNvcHlfYnlf
cmVmKTsKLQkJCQlpZiAob3V0Y2hhaW4gPT0gTlVMTCkgewotCQkJCQkqcmVhc29uX2NvZGUgPSA4
OwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFTk9NRU0pOwotCQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQkJfQotCQkJCVND
VFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKLQkJCQkvKiB1
cGRhdGUgb3VyIE1UVSBzaXplICovCi0JCQkJaWYgKG10dSA+IChjaGstPnNlbmRfc2l6ZSArIG9t
dHUpKQotCQkJCQltdHUgLT0gKGNoay0+c2VuZF9zaXplICsgb210dSk7Ci0JCQkJZWxzZQotCQkJ
CQltdHUgPSAwOwotCQkJCXRvX291dCArPSAoY2hrLT5zZW5kX3NpemUgKyBvbXR1KTsKLQkJCQkv
KiBEbyBjbGVhciBJUF9ERiA/ICovCi0JCQkJaWYgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19G
UkFHTUVOVF9PSykgewotCQkJCQlub19mcmFnbWVudGZsZyA9IDA7Ci0JCQkJfQotCQkJCWlmIChj
aGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhKQotCQkJCQljaGstPmRhdGEgPSBOVUxMOwot
CQkJCS8qIE1hcmsgdGhpbmdzIHRvIGJlIHJlbW92ZWQsIGlmIG5lZWRlZCAqLwotCQkJCWlmICgo
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAotCQkJCSAgICAo
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLKSB8fCAvKiBFWSAq
LwotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9IRUFSVEJFQVRfUkVRVUVT
VCkgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRCRUFUX0FD
SykgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0hVVERPV04pIHx8
Ci0JCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOX0FDSykgfHwK
LQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfT1BFUkFUSU9OX0VSUk9SKSB8
fAotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfQUNLKSB8fAot
CQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fQ1dSKSB8fAotCQkJCSAg
ICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9QQUNLRVRfRFJPUFBFRCkgfHwKLQkJCQkg
ICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQVNDT05GX0FDSykpIHsKLQkJCQkJaWYg
KGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRCRUFUX1JFUVVFU1QpIHsKLQkJCQkJ
CWhiZmxhZyA9IDE7Ci0JCQkJCX0KLQkJCQkJLyogcmVtb3ZlIHRoZXNlIGNodW5rcyBhdCB0aGUg
ZW5kICovCi0JCQkJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJVkVf
QUNLKSB8fAotCQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VMRUNU
SVZFX0FDSykpIHsKLQkJCQkJCS8qIHR1cm4gb2ZmIHRoZSB0aW1lciAqLwotCQkJCQkJaWYgKFND
VFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkgewotCQkJ
CQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUkVDViwKLQkJCQkJCQkJCWlucCwg
c3RjYiwgbmV0LAotCQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQg
KyBTQ1RQX0xPQ18xKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljdGxfY250Kys7Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJLyoKLQkJCQkJICogT3RoZXIgY2h1bmtzLCBzaW5jZSB0aGV5IGhhdmUKLQkJ
CQkJICogdGltZXJzIHJ1bm5pbmcgKGkuZS4gQ09PS0lFKQotCQkJCQkgKiB3ZSBqdXN0ICJ0cnVz
dCIgdGhhdCBpdAotCQkJCQkgKiBnZXRzIHNlbnQgb3IgcmV0cmFuc21pdHRlZC4KLQkJCQkJICov
Ci0JCQkJCWN0bF9jbnQrKzsKLQkJCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBf
Q09PS0lFX0VDSE8pIHsKLQkJCQkJCWNvb2tpZSA9IDE7Ci0JCQkJCQlub19vdXRfY250ID0gMTsK
LQkJCQkJfSBlbHNlIGlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSB7
Ci0JCQkJCQkvKgotCQkJCQkJICogSW5jcmVtZW50IGVjbmUgc2VuZCBjb3VudCBoZXJlCi0JCQkJ
CQkgKiB0aGlzIG1lYW5zIHdlIG1heSBiZSBvdmVyLXplYWxvdXMgaW4KLQkJCQkJCSAqIG91ciBj
b3VudGluZyBpZiB0aGUgc2VuZCBmYWlscywgYnV0IGl0cwotCQkJCQkJICogdGhlIGJlc3QgcGxh
Y2UgdG8gZG8gaXQgKHdlIHVzZWQgdG8gZG8KLQkJCQkJCSAqIGl0IGluIHRoZSBxdWV1ZSBvZiB0
aGUgY2h1bmssIGJ1dCB0aGF0IGRpZAotCQkJCQkJICogbm90IHRlbGwgaG93IG1hbnkgdGltZXMg
aXQgd2FzIHNlbnQuCi0JCQkJCQkgKi8KLQkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRl
Y25lKTsKLQkJCQkJfQotCQkJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7Ci0JCQkJ
CWlmIChjaGstPndob1RvID09IE5VTEwpIHsKLQkJCQkJCWNoay0+d2hvVG8gPSBuZXQ7Ci0JCQkJ
CQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOwotCQkJCQl9Ci0JCQkJCWNoay0+
c25kX2NvdW50Kys7Ci0JCQkJfQotCQkJCWlmIChtdHUgPT0gMCkgewotCQkJCQkvKgotCQkJCQkg
KiBPayB3ZSBhcmUgb3V0IG9mIHJvb20gYnV0IHdlIGNhbgotCQkJCQkgKiBvdXRwdXQgd2l0aG91
dCBlZmZlY3RpbmcgdGhlCi0JCQkJCSAqIGZsaWdodCBzaXplIHNpbmNlIHRoaXMgbGl0dGxlIGd1
eQotCQkJCQkgKiBpcyBhIGNvbnRyb2wgb25seSBwYWNrZXQuCi0JCQkJCSAqLwotCQkJCQlpZiAo
YXNjb25mKSB7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYs
IGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJCS8qCi0JCQkJCQkgKiBkbyBOT1QgY2xlYXIgdGhlIGFz
Y29uZgotCQkJCQkJICogZmxhZyBhcyBpdCBpcyB1c2VkIHRvIGRvCi0JCQkJCQkgKiBhcHByb3By
aWF0ZSBzb3VyY2UgYWRkcmVzcwotCQkJCQkJICogc2VsZWN0aW9uLgotCQkJCQkJICovCi0JCQkJ
CX0KLQkJCQkJaWYgKGNvb2tpZSkgewotCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfQ09PS0lFLCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJCQljb29raWUgPSAwOwotCQkJCQl9
Ci0JCQkJCS8qIE9ubHkgSEIgb3IgQVNDT05GIGFkdmFuY2VzIHRpbWUgKi8KLQkJCQkJaWYgKGhi
ZmxhZykgewotCQkJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsKLQkJCQkJCQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTChub3cpOwotCQkJCQkJCSpub3dfZmlsbGVkID0gMTsKLQkJCQkJCX0K
LQkJCQkJCW5ldC0+bGFzdF9zZW50X3RpbWUgPSAqbm93OwotCQkJCQkJaGJmbGFnID0gMDsKLQkJ
CQkJfQotCQkJCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBz
dGNiLCBuZXQsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKLQkJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNoYWluLAotCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9vZmZzZXQsIGF1dGgsCi0JCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2
ZV9rZXlpZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5v
X2ZyYWdtZW50ZmxnLCAwLCBhc2NvbmYsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAotCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0
YWcpLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5w
b3J0LCBOVUxMLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmCi0JCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgewotCQkJCQkJLyogZXJy
b3IsIHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KLQkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCQkJCWlmIChmcm9tX3doZXJl
ID09IDApIHsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycnVzcik7Ci0J
CQkJCQl9Ci0JCQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJCQkJCWFzb2MtPmlmcF9o
YWRfZW5vYnVmID0gMTsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7
Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoZXJyb3IgPT0gRUhPU1RVTlJFQUNIKSB7Ci0JCQkJCQkJLyoK
LQkJCQkJCQkgKiBEZXN0aW5hdGlvbiB3ZW50Ci0JCQkJCQkJICogdW5yZWFjaGFibGUKLQkJCQkJ
CQkgKiBkdXJpbmcgdGhpcyBzZW5kCi0JCQkJCQkJICovCi0JCQkJCQkJc2N0cF9tb3ZlX2NodW5r
c19mcm9tX25ldChzdGNiLCBuZXQpOwotCQkJCQkJfQotCQkJCQkJKnJlYXNvbl9jb2RlID0gNzsK
LQkJCQkJCWJyZWFrOwotCQkJCQl9IGVsc2UgewotCQkJCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYg
PSAwOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIGluY3JlYXNlIHRoZSBudW1iZXIgd2Ugc2Vu
dCwgaWYgYQotCQkJCQkgKiBjb29raWUgaXMgc2VudCB3ZSBkb24ndCB0ZWxsIHRoZW0KLQkJCQkJ
ICogYW55IHdhcyBzZW50IG91dC4KLQkJCQkJICovCi0JCQkJCW91dGNoYWluID0gZW5kb3V0Y2hh
aW4gPSBOVUxMOwotCQkJCQlhdXRoID0gTlVMTDsKLQkJCQkJYXV0aF9vZmZzZXQgPSAwOwotCQkJ
CQlpZiAoIW5vX291dF9jbnQpCi0JCQkJCQkqbnVtX291dCArPSBjdGxfY250OwotCQkJCQkvKiBy
ZWNhbGMgYSBjbGVhbiBzbGF0ZSBhbmQgc2V0dXAgKi8KLQkJCQkJc3dpdGNoIChuZXQtPnJvLl9s
X2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCQkJY2FzZSBBRl9JTkVUOgot
CQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCQkJCQkJYnJl
YWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJCQlt
dHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJCWJyZWFrOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCQkJY2FzZSBBRl9DT05OOgotCQkJCQkJ
CW10dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJCQkJCQlicmVhazsK
LSNlbmRpZgotCQkJCQkJZGVmYXVsdDoKLQkJCQkJCQkvKiBUU05IICovCi0JCQkJCQkJbXR1ID0g
bmV0LT5tdHU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJdG9fb3V0ID0gMDsKLQkJCQkJ
bm9fZnJhZ21lbnRmbGcgPSAxOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgIT0gMCkg
ewotCQkJLyogdHJ5IG5leHQgbmV0ICovCi0JCQljb250aW51ZTsKLQkJfQotCQkvKiBKUkk6IGlm
IGRlc3QgaXMgaW4gUEYgc3RhdGUsIGRvIG5vdCBzZW5kIGRhdGEgdG8gaXQgKi8KLQkJaWYgKChh
c29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgotCQkgICAgKG5ldCAhPSBzdGNiLT5hc29jLmFs
dGVybmF0ZSkgJiYKLQkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSB7Ci0J
CQlnb3RvIG5vX2RhdGFfZmlsbDsKLQkJfQotCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA+PSBuZXQt
PmN3bmQpIHsKLQkJCWdvdG8gbm9fZGF0YV9maWxsOwotCQl9Ci0JCWlmICgoYXNvYy0+c2N0cF9j
bXRfb25fb2ZmID4gMCkgJiYKLQkJICAgIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYnVmZmVyX3Nw
bGl0dGluZykgJiBTQ1RQX1JFQ1ZfQlVGRkVSX1NQTElUVElORykgJiYKLQkJICAgIChuZXQtPmZs
aWdodF9zaXplID4gbWF4X3J3bmRfcGVyX2Rlc3QpKSB7Ci0JCQlnb3RvIG5vX2RhdGFfZmlsbDsK
LQkJfQotCQkvKgotCQkgKiBXZSBuZWVkIGEgc3BlY2lmaWMgYWNjb3VudGluZyBmb3IgdGhlIHVz
YWdlIG9mIHRoZQotCQkgKiBzZW5kIGJ1ZmZlci4gV2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBu
dW1iZXIgb2YgbWVzc2FnZXMKLQkJICogcGVyIG5ldC4gRm9yIG5vdywgdGhpcyBpcyBiZXR0ZXIg
dGhhbiBub3RoaW5nIGFuZCBpdAotCQkgKiBkaXNhYmxlZCBieSBkZWZhdWx0Li4uCi0JCSAqLwot
CQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCSAgICAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpICYgU0NUUF9TRU5EX0JVRkZFUl9TUExJVFRJTkcp
ICYmCi0JCSAgICAobWF4X3NlbmRfcGVyX2Rlc3QgPiAwKSAmJgotCQkgICAgKG5ldC0+ZmxpZ2h0
X3NpemUgPiBtYXhfc2VuZF9wZXJfZGVzdCkpIHsKLQkJCWdvdG8gbm9fZGF0YV9maWxsOwotCQl9
Ci0JCS8qKioqKioqKioqKioqKioqKioqKiovCi0JCS8qIERhdGEgdHJhbnNtaXNzaW9uICovCi0J
CS8qKioqKioqKioqKioqKioqKioqKiovCi0JCS8qCi0JCSAqIGlmIEFVVEggZm9yIERBVEEgaXMg
cmVxdWlyZWQgYW5kIG5vIEFVVEggaGFzIGJlZW4gYWRkZWQKLQkJICogeWV0LCBhY2NvdW50IGZv
ciB0aGlzIGluIHRoZSBtdHUgbm93Li4uIGlmIG5vIGRhdGEgY2FuIGJlCi0JCSAqIGJ1bmRsZWQs
IHRoaXMgYWRqdXN0bWVudCB3b24ndCBtYXR0ZXIgYW55d2F5cyBzaW5jZSB0aGUKLQkJICogcGFj
a2V0IHdpbGwgYmUgZ29pbmcgb3V0Li4uCi0JCSAqLwotCQlkYXRhX2F1dGhfcmVxZCA9IHNjdHBf
YXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsCi0JCQkJCQkJICAgICBzdGNiLT5hc29j
LnBlZXJfYXV0aF9jaHVua3MpOwotCQlpZiAoZGF0YV9hdXRoX3JlcWQgJiYgKGF1dGggPT0gTlVM
TCkpIHsKLQkJCW10dSAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7Ci0JCX0KLQkJLyogbm93IGxldHMgYWRkIGFueSBkYXRhIHdpdGhpbiB0aGUgTVRV
IGNvbnN0cmFpbnRzICovCi0JCXN3aXRjaCAoKChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5f
bF9hZGRyKS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlp
ZiAobmV0LT5tdHUgPiBTQ1RQX01JTl9WNF9PVkVSSEVBRCkKLQkJCQlvbXR1ID0gbmV0LT5tdHUg
LSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCWVsc2UKLQkJCQlvbXR1ID0gMDsKLQkJCWJyZWFr
OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCWlmIChuZXQtPm10
dSA+IFNDVFBfTUlOX09WRVJIRUFEKQotCQkJCW9tdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09W
RVJIRUFEOwotCQkJZWxzZQotCQkJCW9tdHUgPSAwOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNhc2UgQUZfQ09OTjoKLQkJCWlmIChuZXQtPm10dSA+
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpIHsKLQkJCQlvbXR1ID0gbmV0LT5tdHUgLSBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpOwotCQkJfSBlbHNlIHsKLQkJCQlvbXR1ID0gMDsKLQkJCX0KLQkJCWJy
ZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQkvKiBUU05IICovCi0JCQlvbXR1ID0gMDsKLQkJ
CWJyZWFrOwotCQl9Ci0JCWlmICgoKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRF
X09QRU4pIHx8Ci0JCSAgICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSkgJiYKLQkJICAgICAoc2tpcF9kYXRhX2Zvcl90aGlzX25ldCA9PSAw
KSkgfHwKLQkJICAgIChjb29raWUpKSB7Ci0JCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNv
Yy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQkJaWYgKG5vX2RhdGFfY2h1bmtz
KSB7Ci0JCQkJCS8qIGxldCBvbmx5IGNvbnRyb2wgZ28gb3V0ICovCi0JCQkJCSpyZWFzb25fY29k
ZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA+PSBu
ZXQtPmN3bmQpIHsKLQkJCQkJLyogc2tpcCB0aGlzIG5ldCwgbm8gcm9vbSBmb3IgZGF0YSAqLwot
CQkJCQkqcmVhc29uX2NvZGUgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKChjaGst
Pndob1RvICE9IE5VTEwpICYmCi0JCQkJICAgIChjaGstPndob1RvICE9IG5ldCkpIHsKLQkJCQkJ
LyogRG9uJ3Qgc2VuZCB0aGUgY2h1bmsgb24gdGhpcyBuZXQgKi8KLQkJCQkJY29udGludWU7Ci0J
CQkJfQotCi0JCQkJaWYgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSB7Ci0JCQkJCWlmICgo
YXNvYy0+YWx0ZXJuYXRlKSAmJgotCQkJCQkgICAgKGFzb2MtPmFsdGVybmF0ZSAhPSBuZXQpICYm
Ci0JCQkJCSAgICAoY2hrLT53aG9UbyA9PSBOVUxMKSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJ
CX0gZWxzZSBpZiAoKG5ldCAhPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKSAmJgotCQkJCQkJ
ICAgKGFzb2MtPmFsdGVybmF0ZSA9PSBOVUxMKSAmJgotCQkJCQkJICAgKGNoay0+d2hvVG8gPT0g
TlVMTCkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICgoY2hrLT5z
ZW5kX3NpemUgPiBvbXR1KSAmJiAoKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9P
SykgPT0gMCkpIHsKLQkJCQkJLyotCi0JCQkJCSAqIHN0cmFuZ2UsIHdlIGhhdmUgYSBjaHVuayB0
aGF0IGlzCi0JCQkJCSAqIHRvIGJpZyBmb3IgaXRzIGRlc3RpbmF0aW9uIGFuZAotCQkJCQkgKiB5
ZXQgbm8gZnJhZ21lbnQgb2sgZmxhZy4KLQkJCQkJICogU29tZXRoaW5nIHdlbnQgd3Jvbmcgd2hl
biB0aGUKLQkJCQkJICogUE1UVSBjaGFuZ2VkLi4ud2UgZGlkIG5vdCBtYXJrCi0JCQkJCSAqIHRo
aXMgY2h1bmsgZm9yIHNvbWUgcmVhc29uPz8gSQotCQkJCQkgKiB3aWxsIGZpeCBpdCBoZXJlIGJ5
IGxldHRpbmcgSVAKLQkJCQkJICogZnJhZ21lbnQgaXQgZm9yIG5vdyBhbmQgcHJpbnRpbmcKLQkJ
CQkJICogYSB3YXJuaW5nLiBUaGlzIHJlYWxseSBzaG91bGQgbm90Ci0JCQkJCSAqIGhhcHBlbiAu
Li4KLQkJCQkJICovCi0JCQkJCVNDVFBfUFJJTlRGKCJXYXJuaW5nIGNodW5rIG9mICVkIGJ5dGVz
ID4gbXR1OiVkIGFuZCB5ZXQgUE1UVSBkaXNjIG1pc3NlZFxuIiwKLQkJCQkJCSAgICBjaGstPnNl
bmRfc2l6ZSwgbXR1KTsKLQkJCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9P
SzsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fja19pbW1l
ZGlhdGVseSkgJiYKLQkJCQkgICAgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05f
UEVORElORykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSkgewotCQkJCQlzdHJ1Y3Qg
c2N0cF9kYXRhX2NodW5rICpkY2hraDsKLQotCQkJCQlkY2hraCA9IG10b2QoY2hrLT5kYXRhLCBz
dHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopOwotCQkJCQlkY2hraC0+Y2guY2h1bmtfZmxhZ3MgfD0g
U0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7Ci0JCQkJfQotCQkJCWlmICgoKGNoay0+c2VuZF9z
aXplIDw9IG10dSkgJiYgKGNoay0+c2VuZF9zaXplIDw9IHJfbXR1KSkgfHwKLQkJCQkgICAgKChj
aGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spICYmIChjaGstPnNlbmRfc2l6ZSA8
PSBhc29jLT5wZWVyc19yd25kKSkpIHsKLQkJCQkJLyogb2sgd2Ugd2lsbCBhZGQgdGhpcyBvbmUg
Ki8KLQotCQkJCQkvKgotCQkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsKLQkJCQkJ
ICogcmVxdWlyZXMgaXQsIHNhdmUgdGhlIG9mZnNldCBpbnRvCi0JCQkJCSAqIHRoZSBjaGFpbiBm
b3IgQVVUSAotCQkJCQkgKi8KLQkJCQkJaWYgKGRhdGFfYXV0aF9yZXFkKSB7Ci0JCQkJCQlpZiAo
YXV0aCA9PSBOVUxMKSB7Ci0JCQkJCQkJb3V0Y2hhaW4gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG91
dGNoYWluLAotCQkJCQkJCQkJCSAgICAgICAmZW5kb3V0Y2hhaW4sCi0JCQkJCQkJCQkJICAgICAg
ICZhdXRoLAotCQkJCQkJCQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCi0JCQkJCQkJCQkJICAgICAg
IHN0Y2IsCi0JCQkJCQkJCQkJICAgICAgIFNDVFBfREFUQSk7Ci0JCQkJCQkJYXV0aF9rZXlpZCA9
IGNoay0+YXV0aF9rZXlpZDsKLQkJCQkJCQlvdmVycmlkZV9vayA9IDA7Ci0JCQkJCQkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJCQkJfSBlbHNl
IGlmIChvdmVycmlkZV9vaykgewotCQkJCQkJCS8qIHVzZSB0aGlzIGRhdGEncyBrZXlpZCAqLwot
CQkJCQkJCWF1dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7Ci0JCQkJCQkJb3ZlcnJpZGVfb2sg
PSAwOwotCQkJCQkJfSBlbHNlIGlmIChhdXRoX2tleWlkICE9IGNoay0+YXV0aF9rZXlpZCkgewot
CQkJCQkJCS8qIGRpZmZlcmVudCBrZXlpZCwgc28gZG9uZSBidW5kbGluZyAqLwotCQkJCQkJCWJy
ZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCW91dGNoYWluID0gc2N0cF9jb3B5X21idWZjaGFp
bihjaGstPmRhdGEsIG91dGNoYWluLCAmZW5kb3V0Y2hhaW4sIDAsCi0JCQkJCQkJCSAgICAgICBj
aGstPnNlbmRfc2l6ZSwgY2hrLT5jb3B5X2J5X3JlZik7Ci0JCQkJCWlmIChvdXRjaGFpbiA9PSBO
VUxMKSB7Ci0JCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5vIG1lbW9yeT9cbiIp
OwotCQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVy
KSkgewotCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwg
c3RjYiwgbmV0KTsKLQkJCQkJCX0KLQkJCQkJCSpyZWFzb25fY29kZSA9IDM7Ci0JCQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOwotCQkJCQkJcmV0dXJuIChFTk9NRU0pOwotCQkJCQl9Ci0JCQkJCS8qIHVwYXRlIG91
ciBNVFUgc2l6ZSAqLwotCQkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICovCi0JCQkJCWlmIChjaGst
PmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spIHsKLQkJCQkJCW5vX2ZyYWdtZW50Zmxn
ID0gMDsKLQkJCQkJfQotCQkJCQkvKiB1bnNpZ25lZCBzdWJ0cmFjdGlvbiBvZiBtdHUgKi8KLQkJ
CQkJaWYgKG10dSA+IGNoay0+c2VuZF9zaXplKQotCQkJCQkJbXR1IC09IGNoay0+c2VuZF9zaXpl
OwotCQkJCQllbHNlCi0JCQkJCQltdHUgPSAwOwotCQkJCQkvKiB1bnNpZ25lZCBzdWJ0cmFjdGlv
biBvZiByX210dSAqLwotCQkJCQlpZiAocl9tdHUgPiBjaGstPnNlbmRfc2l6ZSkKLQkJCQkJCXJf
bXR1IC09IGNoay0+c2VuZF9zaXplOwotCQkJCQllbHNlCi0JCQkJCQlyX210dSA9IDA7Ci0KLQkJ
CQkJdG9fb3V0ICs9IGNoay0+c2VuZF9zaXplOwotCQkJCQlpZiAoKHRvX291dCA+IG14X210dSkg
JiYgbm9fZnJhZ21lbnRmbGcpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCQlwYW5pYygiRXhj
ZWVkaW5nIG10dSBvZiAlZCBvdXQgc2l6ZSBpcyAlZCIsIG14X210dSwgdG9fb3V0KTsKLSNlbHNl
Ci0JCQkJCQlTQ1RQX1BSSU5URigiRXhjZWVkaW5nIG10dSBvZiAlZCBvdXQgc2l6ZSBpcyAlZFxu
IiwKLQkJCQkJCQkgICAgbXhfbXR1LCB0b19vdXQpOwotI2VuZGlmCi0JCQkJCX0KLQkJCQkJY2hr
LT53aW5kb3dfcHJvYmUgPSAwOwotCQkJCQlkYXRhX2xpc3RbYnVuZGxlX2F0KytdID0gY2hrOwot
CQkJCQlpZiAoYnVuZGxlX2F0ID49IFNDVFBfTUFYX0RBVEFfQlVORExJTkcpIHsKLQkJCQkJCWJy
ZWFrOwotCQkJCQl9Ci0JCQkJCWlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQp
IHsKLQkJCQkJCWlmICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRF
UkVEKSA9PSAwKSB7Ci0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dG9y
ZGVyY2h1bmtzKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dHVub3JkZXJjaHVua3MpOwotCQkJCQkJfQotCQkJCQkJaWYgKCgoY2hrLT5y
ZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTEFT
VF9GUkFHKSAmJgotCQkJCQkJICAgICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RB
VEFfRklSU1RfRlJBRykgPT0gMCkpCi0JCQkJCQkJLyogQ291bnQgbnVtYmVyIG9mIHVzZXIgbXNn
J3MgdGhhdCB3ZXJlIGZyYWdtZW50ZWQKLQkJCQkJCQkgKiB3ZSBkbyB0aGlzIGJ5IGNvdW50aW5n
IHdoZW4gd2Ugc2VlIGEgTEFTVCBmcmFnbWVudAotCQkJCQkJCSAqIG9ubHkuCi0JCQkJCQkJICov
Ci0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2ZyYWd1c3Jtc2dzKTsKLQkJ
CQkJfQotCQkJCQlpZiAoKG10dSA9PSAwKSB8fCAocl9tdHUgPT0gMCkgfHwgKG9uZV9jaHVuaykp
IHsKLQkJCQkJCWlmICgob25lX2NodW5rKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPT0g
MCkpIHsKLQkJCQkJCQlkYXRhX2xpc3RbMF0tPndpbmRvd19wcm9iZSA9IDE7Ci0JCQkJCQkJbmV0
LT53aW5kb3dfcHJvYmUgPSAxOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9
IGVsc2UgewotCQkJCQkvKgotCQkJCQkgKiBNdXN0IGJlIHNlbnQgaW4gb3JkZXIgb2YgdGhlCi0J
CQkJCSAqIFRTTidzIChvbiBhIG5ldHdvcmspCi0JCQkJCSAqLwotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQl9CS8qIGZvciAoY2h1bmsgZ2F0aGVyIGxvb3AgZm9yIHRoaXMgbmV0KSAqLwotCQl9CQkv
KiBpZiBhc29jLnN0YXRlIE9QRU4gKi8KLQlub19kYXRhX2ZpbGw6Ci0JCS8qIElzIHRoZXJlIHNv
bWV0aGluZyB0byBzZW5kIGZvciB0aGlzIGRlc3RpbmF0aW9uPyAqLwotCQlpZiAob3V0Y2hhaW4p
IHsKLQkJCS8qIFdlIG1heSBuZWVkIHRvIHN0YXJ0IGEgY29udHJvbCB0aW1lciBvciB0d28gKi8K
LQkJCWlmIChhc2NvbmYpIHsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9B
U0NPTkYsIGlucCwKLQkJCQkJCSBzdGNiLCBuZXQpOwotCQkJCS8qCi0JCQkJICogZG8gTk9UIGNs
ZWFyIHRoZSBhc2NvbmYgZmxhZyBhcyBpdCBpcyB1c2VkCi0JCQkJICogdG8gZG8gYXBwcm9wcmlh
dGUgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLgotCQkJCSAqLwotCQkJfQotCQkJaWYgKGNvb2tp
ZSkgewotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0NPT0tJRSwgaW5wLCBz
dGNiLCBuZXQpOwotCQkJCWNvb2tpZSA9IDA7Ci0JCQl9Ci0JCQkvKiBtdXN0IHN0YXJ0IGEgc2Vu
ZCB0aW1lciBpZiBkYXRhIGlzIGJlaW5nIHNlbnQgKi8KLQkJCWlmIChidW5kbGVfYXQgJiYgKCFT
Q1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkpIHsKLQkJCQkvKgot
CQkJCSAqIG5vIHRpbWVyIHJ1bm5pbmcgb24gdGhpcyBkZXN0aW5hdGlvbgotCQkJCSAqIHJlc3Rh
cnQgaXQuCi0JCQkJICovCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VO
RCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJfQotCQkJaWYgKGJ1bmRsZV9hdCB8fCBoYmZsYWcpIHsK
LQkJCQkvKiBGb3IgZGF0YS9hc2NvbmYgYW5kIGhiIHNldCB0aW1lICovCi0JCQkJaWYgKCpub3df
ZmlsbGVkID09IDApIHsKLQkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwobm93KTsKLQkJ
CQkJKm5vd19maWxsZWQgPSAxOwotCQkJCX0KLQkJCQluZXQtPmxhc3Rfc2VudF90aW1lID0gKm5v
dzsKLQkJCX0KLQkJCS8qIE5vdyBzZW5kIGl0LCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzZW5k
IDo+ICovCi0JCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLAot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2IsCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LAotCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5f
bF9hZGRyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNo
YWluLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfb2Zm
c2V0LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGgsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9rZXlpZCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZsZywK
LQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidW5kbGVfYXQsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNjb25mLAotCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9scG9ydCwgc3Rj
Yi0+cnBvcnQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRv
bmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCi0jZW5kaWYK
LQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkg
ewotCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0ICovCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3IpOwotCQkJCWlmIChm
cm9tX3doZXJlID09IDApIHsKLQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnJ1
c3IpOwotCQkJCX0KLQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJCQlhc29jLT5pZnBf
aGFkX2Vub2J1ZiA9IDE7Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xvd2xldmVsZXJyKTsK
LQkJCQl9Ci0JCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgewotCQkJCQkvKgotCQkJCQkg
KiBEZXN0aW5hdGlvbiB3ZW50IHVucmVhY2hhYmxlCi0JCQkJCSAqIGR1cmluZyB0aGlzIHNlbmQK
LQkJCQkJICovCi0JCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKLQkJ
CQl9Ci0JCQkJKnJlYXNvbl9jb2RlID0gNjsKLQkJCQkvKi0KLQkJCQkgKiBJIGFkZCB0aGlzIGxp
bmUgdG8gYmUgcGFyYW5vaWQuIEFzIGZhciBhcwotCQkJCSAqIEkgY2FuIHRlbGwgdGhlIGNvbnRp
bnVlLCB0YWtlcyB1cyBiYWNrIHRvCi0JCQkJICogdGhlIHRvcCBvZiB0aGUgZm9yLCBidXQganVz
dCB0byBtYWtlIHN1cmUKLQkJCQkgKiBJIHdpbGwgcmVzZXQgdGhlc2UgYWdhaW4gaGVyZS4KLQkJ
CQkgKi8KLQkJCQljdGxfY250ID0gYnVuZGxlX2F0ID0gMDsKLQkJCQljb250aW51ZTsgLyogVGhp
cyB0YWtlcyB1cyBiYWNrIHRvIHRoZSBmb3IoKSBmb3IgdGhlIG5ldHMuICovCi0JCQl9IGVsc2Ug
ewotCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKLQkJCX0KLQkJCWVuZG91dGNoYWluID0g
TlVMTDsKLQkJCWF1dGggPSBOVUxMOwotCQkJYXV0aF9vZmZzZXQgPSAwOwotCQkJaWYgKCFub19v
dXRfY250KSB7Ci0JCQkJKm51bV9vdXQgKz0gKGN0bF9jbnQgKyBidW5kbGVfYXQpOwotCQkJfQot
CQkJaWYgKGJ1bmRsZV9hdCkgewotCQkJCS8qIHNldHVwIGZvciBhIFJUTyBtZWFzdXJlbWVudCAq
LwotCQkJCXRzbnNfc2VudCA9IGRhdGFfbGlzdFswXS0+cmVjLmRhdGEudHNuOwotCQkJCS8qIGZp
bGwgdGltZSBpZiBub3QgYWxyZWFkeSBmaWxsZWQgKi8KLQkJCQlpZiAoKm5vd19maWxsZWQgPT0g
MCkgewotCQkJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+dGltZV9sYXN0X3Nl
bnQpOwotCQkJCQkqbm93X2ZpbGxlZCA9IDE7Ci0JCQkJCSpub3cgPSBhc29jLT50aW1lX2xhc3Rf
c2VudDsKLQkJCQl9IGVsc2UgewotCQkJCQlhc29jLT50aW1lX2xhc3Rfc2VudCA9ICpub3c7Ci0J
CQkJfQotCQkJCWlmIChuZXQtPnJ0b19uZWVkZWQpIHsKLQkJCQkJZGF0YV9saXN0WzBdLT5kb19y
dHQgPSAxOwotCQkJCQluZXQtPnJ0b19uZWVkZWQgPSAwOwotCQkJCX0KLQkJCQlTQ1RQX1NUQVRf
SU5DUl9CWShzY3Rwc19zZW5kZGF0YSwgYnVuZGxlX2F0KTsKLQkJCQlzY3RwX2NsZWFuX3VwX2Rh
dGFsaXN0KHN0Y2IsIGFzb2MsIGRhdGFfbGlzdCwgYnVuZGxlX2F0LCBuZXQpOwotCQkJfQotCQkJ
aWYgKG9uZV9jaHVuaykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCB0c25zX3NlbnQsIFNDVFBfQ1dORF9MT0dfRlJP
TV9TRU5EKTsKLQkJfQotCX0KLQlpZiAob2xkX3N0YXJ0X2F0ID09IE5VTEwpIHsKLQkJb2xkX3N0
YXJ0X2F0ID0gc3RhcnRfYXQ7Ci0JCXN0YXJ0X2F0ID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMp
OwotCQlpZiAob2xkX3N0YXJ0X2F0KQotCQkJZ290byBhZ2Fpbl9vbmVfbW9yZV90aW1lOwotCX0K
LQotCS8qCi0JICogQXQgdGhlIGVuZCB0aGVyZSBzaG91bGQgYmUgbm8gTk9OIHRpbWVkIGNodW5r
cyBoYW5naW5nIG9uIHRoaXMKLQkgKiBxdWV1ZS4KLQkgKi8KLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAqbnVtX291dCwgU0NUUF9DV05EX0xPR19GUk9NX1NFTkQp
OwotCX0KLQlpZiAoKCpudW1fb3V0ID09IDApICYmICgqcmVhc29uX2NvZGUgPT0gMCkpIHsKLQkJ
KnJlYXNvbl9jb2RlID0gNDsKLQl9IGVsc2UgewotCQkqcmVhc29uX2NvZGUgPSA1OwotCX0KLQlz
Y3RwX2NsZWFuX3VwX2N0bChzdGNiLCBhc29jLCBzb19sb2NrZWQpOwotCXJldHVybiAoMCk7Ci19
Ci0KLXZvaWQKLXNjdHBfcXVldWVfb3BfZXJyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IG1idWYgKm9wX2VycikKLXsKLQkvKi0KLQkgKiBQcmVwZW5kIGEgT1BFUkFUSU9OQUxfRVJST1Ig
Y2h1bmsgaGVhZGVyIGFuZCBwdXQgb24gdGhlIGVuZCBvZgotCSAqIHRoZSBjb250cm9sIGNodW5r
IHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpoZHI7Ci0Jc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrOwotCXN0cnVjdCBtYnVmICptYXQsICpsYXN0X21idWY7Ci0JdWludDMy
X3QgY2h1bmtfbGVuZ3RoOwotCXVpbnQxNl90IHBhZGRpbmdfbGVuZ3RoOwotCi0JU0NUUF9UQ0Jf
TE9DS19BU1NFUlQoc3RjYik7Ci0JU0NUUF9CVUZfUFJFUEVORChvcF9lcnIsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkciksIE1fTk9XQUlUKTsKLQlpZiAob3BfZXJyID09IE5VTEwpIHsKLQkJ
cmV0dXJuOwotCX0KLQlsYXN0X21idWYgPSBOVUxMOwotCWNodW5rX2xlbmd0aCA9IDA7Ci0JZm9y
IChtYXQgPSBvcF9lcnI7IG1hdCAhPSBOVUxMOyBtYXQgPSBTQ1RQX0JVRl9ORVhUKG1hdCkpIHsK
LQkJY2h1bmtfbGVuZ3RoICs9IFNDVFBfQlVGX0xFTihtYXQpOwotCQlpZiAoU0NUUF9CVUZfTkVY
VChtYXQpID09IE5VTEwpIHsKLQkJCWxhc3RfbWJ1ZiA9IG1hdDsKLQkJfQotCX0KLQlpZiAoY2h1
bmtfbGVuZ3RoID4gU0NUUF9NQVhfQ0hVTktfTEVOR1RIKSB7Ci0JCXNjdHBfbV9mcmVlbShvcF9l
cnIpOwotCQlyZXR1cm47Ci0JfQotCXBhZGRpbmdfbGVuZ3RoID0gY2h1bmtfbGVuZ3RoICUgNDsK
LQlpZiAocGFkZGluZ19sZW5ndGggIT0gMCkgewotCQlwYWRkaW5nX2xlbmd0aCA9IDQgLSBwYWRk
aW5nX2xlbmd0aDsKLQl9Ci0JaWYgKHBhZGRpbmdfbGVuZ3RoICE9IDApIHsKLQkJaWYgKHNjdHBf
YWRkX3BhZF90b21idWYobGFzdF9tYnVmLCBwYWRkaW5nX2xlbmd0aCkgPT0gTlVMTCkgewotCQkJ
c2N0cF9tX2ZyZWVtKG9wX2Vycik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0Jc2N0cF9hbGxvY19h
X2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAq
LwotCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKLQkJcmV0dXJuOwotCX0KLQljaGstPmNvcHlfYnlf
cmVmID0gMDsKLQljaGstPnNlbmRfc2l6ZSA9ICh1aW50MTZfdCljaHVua19sZW5ndGg7Ci0JY2hr
LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWNo
ay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNoay0+ZGF0YSA9IG9wX2VycjsKLQljaGstPndob1Rv
ID0gTlVMTDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfT1BFUkFUSU9OX0VSUk9SOwot
CWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOwotCWhkciA9IG10b2Qob3BfZXJy
LCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHItPmNodW5rX3R5cGUgPSBTQ1RQX09QRVJB
VElPTl9FUlJPUjsKLQloZHItPmNodW5rX2ZsYWdzID0gMDsKLQloZHItPmNodW5rX2xlbmd0aCA9
IGh0b25zKGNoay0+c2VuZF9zaXplKTsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5j
b250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQljaGstPmFzb2MtPmN0cmxfcXVl
dWVfY250Kys7Ci19Ci0KLWludAotc2N0cF9zZW5kX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICpt
LAotICAgIGludCBvZmZzZXQsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKi0KLQkgKiBwdWxsIG91dCB0aGUgY29va2llIGFuZCBw
dXQgaXQgYXQgdGhlIGZyb250IG9mIHRoZSBjb250cm9sIGNodW5rCi0JICogcXVldWUuCi0JICov
Ci0JaW50IGF0OwotCXN0cnVjdCBtYnVmICpjb29raWU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIg
cGFyYW0sICpwaGRyOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpoZHI7Ci0Jc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrOwotCXVpbnQxNl90IHB0eXBlLCBwbGVuOwotCi0JU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7Ci0JLyogRmlyc3QgZmluZCB0aGUgY29va2llIGluIHRoZSBwYXJhbSBh
cmVhICovCi0JY29va2llID0gTlVMTDsKLQlhdCA9IG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pbml0X2NodW5rKTsKLQlmb3IgKDs7KSB7Ci0JCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFt
KG0sIGF0LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0J
CQlyZXR1cm4gKC0zKTsKLQkJfQotCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOwot
CQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKLQkJaWYgKHB0eXBlID09IFNDVFBf
U1RBVEVfQ09PS0lFKSB7Ci0JCQlpbnQgcGFkOwotCi0JCQkvKiBmb3VuZCB0aGUgY29va2llICov
Ci0JCQlpZiAoKHBhZCA9IChwbGVuICUgNCkpKSB7Ci0JCQkJcGxlbiArPSA0IC0gcGFkOwotCQkJ
fQotCQkJY29va2llID0gU0NUUF9NX0NPUFlNKG0sIGF0LCBwbGVuLCBNX05PV0FJVCk7Ci0JCQlp
ZiAoY29va2llID09IE5VTEwpIHsKLQkJCQkvKiBObyBtZW1vcnkgKi8KLQkJCQlyZXR1cm4gKC0y
KTsKLQkJCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQkJ
CXNjdHBfbG9nX21iYyhjb29raWUsIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCQl9Ci0jZW5kaWYKLQkJ
CWJyZWFrOwotCQl9Ci0JCWF0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwotCX0KLQkvKiBvaywgd2Ug
Z290IHRoZSBjb29raWUgbGV0cyBjaGFuZ2UgaXQgaW50byBhIGNvb2tpZSBlY2hvIGNodW5rICov
Ci0JLyogZmlyc3QgdGhlIGNoYW5nZSBmcm9tIHBhcmFtIHRvIGNvb2tpZSAqLwotCWhkciA9IG10
b2QoY29va2llLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHItPmNodW5rX3R5cGUgPSBT
Q1RQX0NPT0tJRV9FQ0hPOwotCWhkci0+Y2h1bmtfZmxhZ3MgPSAwOwotCS8qIGdldCB0aGUgY2h1
bmsgc3R1ZmYgbm93IGFuZCBwbGFjZSBpdCBpbiB0aGUgRlJPTlQgb2YgdGhlIHF1ZXVlICovCi0J
c2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCS8q
IG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0oY29va2llKTsKLQkJcmV0dXJuICgtNSk7Ci0J
fQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9D
T09LSUVfRUNITzsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKLQljaGst
PmZsYWdzID0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JY2hrLT5zZW5kX3NpemUgPSBwbGVu
OwotCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0g
MDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmRhdGEgPSBjb29raWU7Ci0JY2hr
LT53aG9UbyA9IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAx
KTsKLQlUQUlMUV9JTlNFUlRfSEVBRCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNo
aywgc2N0cF9uZXh0KTsKLQljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci0JcmV0dXJuICgw
KTsKLX0KLQotdm9pZAotc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2soc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgIHN0cnVjdCBtYnVmICptLAotICAgIGludCBvZmZzZXQsCi0gICAgaW50IGNoa19s
ZW5ndGgsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qCi0JICogdGFrZSBhIEhC
IHJlcXVlc3QgYW5kIG1ha2UgaXQgaW50byBhIEhCIGFjayBhbmQgc2VuZCBpdC4KLQkgKi8KLQlz
dHJ1Y3QgbWJ1ZiAqb3V0Y2hhaW47Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoZHI7Ci0Jc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCi0KLQlpZiAobmV0ID09IE5VTEwpCi0JCS8qIG11
c3QgaGF2ZSBhIG5ldCBwb2ludGVyICovCi0JCXJldHVybjsKLQotCW91dGNoYWluID0gU0NUUF9N
X0NPUFlNKG0sIG9mZnNldCwgY2hrX2xlbmd0aCwgTV9OT1dBSVQpOwotCWlmIChvdXRjaGFpbiA9
PSBOVUxMKSB7Ci0JCS8qIGdhayBvdXQgb2YgbWVtb3J5ICovCi0JCXJldHVybjsKLQl9Ci0jaWZk
ZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iYyhvdXRj
aGFpbiwgU0NUUF9NQlVGX0lDT1BZKTsKLQl9Ci0jZW5kaWYKLQljaGRyID0gbXRvZChvdXRjaGFp
biwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2hkci0+Y2h1bmtfdHlwZSA9IFNDVFBfSEVB
UlRCRUFUX0FDSzsKLQljaGRyLT5jaHVua19mbGFncyA9IDA7Ci0JaWYgKGNoa19sZW5ndGggJSA0
KSB7Ci0JCS8qIG5lZWQgcGFkICovCi0JCXVpbnQzMl90IGNwdGhpcyA9IDA7Ci0JCWludCBwYWRs
ZW47Ci0KLQkJcGFkbGVuID0gNCAtIChjaGtfbGVuZ3RoICUgNCk7Ci0JCW1fY29weWJhY2sob3V0
Y2hhaW4sIGNoa19sZW5ndGgsIHBhZGxlbiwgKGNhZGRyX3QpJmNwdGhpcyk7Ci0JfQotCXNjdHBf
YWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQkvKiBubyBt
ZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKLQkJcmV0dXJuOwotCX0KLQljaGst
PmNvcHlfYnlfcmVmID0gMDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfSEVBUlRCRUFU
X0FDSzsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKLQljaGstPmZsYWdz
ID0gMDsKLQljaGstPnNlbmRfc2l6ZSA9IGNoa19sZW5ndGg7Ci0JY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWNoay0+YXNvYyA9ICZzdGNi
LT5hc29jOwotCWNoay0+ZGF0YSA9IG91dGNoYWluOwotCWNoay0+d2hvVG8gPSBuZXQ7Ci0JYXRv
bWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JVEFJTFFfSU5TRVJUX1RB
SUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JY2hr
LT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwotfQotCi12b2lkCi1zY3RwX3NlbmRfY29va2llX2Fj
ayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17Ci0JLyogZm9ybXVsYXRlIGFuZCBxdWV1ZSBhIGNv
b2tpZS1hY2sgYmFjayB0byBzZW5kZXIgKi8KLQlzdHJ1Y3QgbWJ1ZiAqY29va2llX2FjazsKLQlz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsK
LQotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCi0JY29va2llX2FjayA9IHNjdHBfZ2V0
X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCAwLCBNX05PV0FJVCwg
MSwgTVRfSEVBREVSKTsKLQlpZiAoY29va2llX2FjayA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1idWYn
cyAqLwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY29va2llX2FjaywgU0NUUF9N
SU5fT1ZFUkhFQUQpOwotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsg
PT0gTlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKGNvb2tpZV9hY2sp
OwotCQlyZXR1cm47Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5r
X2lkLmlkID0gU0NUUF9DT09LSUVfQUNLOwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2Rh
dGEgPSAxOwotCWNoay0+ZmxhZ3MgPSAwOwotCWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2NodW5raGRyKTsKLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQlj
aGstPnNuZF9jb3VudCA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7Ci0JY2hrLT5kYXRh
ID0gY29va2llX2FjazsKLQlpZiAoY2hrLT5hc29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSAh
PSBOVUxMKSB7Ci0JCWNoay0+d2hvVG8gPSBjaGstPmFzb2MtPmxhc3RfY29udHJvbF9jaHVua19m
cm9tOwotCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQl9IGVs
c2UgewotCQljaGstPndob1RvID0gTlVMTDsKLQl9Ci0JaGRyID0gbXRvZChjb29raWVfYWNrLCBz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHItPmNodW5rX3R5cGUgPSBTQ1RQX0NPT0tJRV9B
Q0s7Ci0JaGRyLT5jaHVua19mbGFncyA9IDA7Ci0JaGRyLT5jaHVua19sZW5ndGggPSBodG9ucyhj
aGstPnNlbmRfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKGNvb2tpZV9hY2spID0gY2hrLT5zZW5kX3Np
emU7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBj
aGssIHNjdHBfbmV4dCk7Ci0JY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwotCXJldHVybjsK
LX0KLQotCi12b2lkCi1zY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qIGZvcm11bGF0ZSBhbmQgcXVldWUgYSBT
SFVURE9XTi1BQ0sgYmFjayB0byB0aGUgc2VuZGVyICovCi0Jc3RydWN0IG1idWYgKm1fc2h1dGRv
d25fYWNrOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVuayAqYWNrX2NwOwotCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCW1fc2h1dGRvd25fYWNrID0gc2N0cF9nZXRfbWJ1
Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmspLCAwLCBNX05P
V0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAobV9zaHV0ZG93bl9hY2sgPT0gTlVMTCkgewotCQkv
KiBubyBtYnVmJ3MgKi8KLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9SRVNWX1VGKG1fc2h1dGRv
d25fYWNrLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0Jc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNo
ayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJl
ZW0obV9zaHV0ZG93bl9hY2spOwotCQlyZXR1cm47Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAw
OwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TSFVURE9XTl9BQ0s7Ci0JY2hrLT5yZWMu
Y2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5zZW5k
X3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQljaGstPmZsYWdzID0gMDsK
LQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmRhdGEgPSBtX3NodXRkb3duX2FjazsK
LQljaGstPndob1RvID0gbmV0OwotCWlmIChjaGstPndob1RvKSB7Ci0JCWF0b21pY19hZGRfaW50
KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCX0KLQlhY2tfY3AgPSBtdG9kKG1fc2h1dGRv
d25fYWNrLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKik7Ci0JYWNrX2NwLT5jaC5j
aHVua190eXBlID0gU0NUUF9TSFVURE9XTl9BQ0s7Ci0JYWNrX2NwLT5jaC5jaHVua19mbGFncyA9
IDA7Ci0JYWNrX2NwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7Ci0J
U0NUUF9CVUZfTEVOKG1fc2h1dGRvd25fYWNrKSA9IGNoay0+c2VuZF9zaXplOwotCVRBSUxRX0lO
U0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQp
OwotCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNj
dHBfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCkKLXsKLQkvKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGEgU0hVVERPV04gdG8gdGhlIHNlbmRl
ciAqLwotCXN0cnVjdCBtYnVmICptX3NodXRkb3duOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2No
dW5rICpzaHV0ZG93bl9jcDsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQlUQUlM
UV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQp
IHsKLQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0hVVERPV04pIHsKLQkJCS8q
IFdlIGFscmVhZHkgaGF2ZSBhIFNIVVRET1dOIHF1ZXVlZC4gUmV1c2UgaXQuICovCi0JCQlpZiAo
Y2hrLT53aG9UbykgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJ
CQljaGstPndob1RvID0gTlVMTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChjaGsg
PT0gTlVMTCkgewotCQltX3NodXRkb3duID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayksIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOwot
CQlpZiAobV9zaHV0ZG93biA9PSBOVUxMKSB7Ci0JCQkvKiBubyBtYnVmJ3MgKi8KLQkJCXJldHVy
bjsKLQkJfQotCQlTQ1RQX0JVRl9SRVNWX1VGKG1fc2h1dGRvd24sIFNDVFBfTUlOX09WRVJIRUFE
KTsKLQkJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JCWlmIChjaGsgPT0gTlVMTCkg
ewotCQkJLyogbm8gbWVtb3J5ICovCi0JCQlzY3RwX21fZnJlZW0obV9zaHV0ZG93bik7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWNoay0+cmVjLmNodW5rX2lk
LmlkID0gU0NUUF9TSFVURE9XTjsKLQkJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9
IDE7Ci0JCWNoay0+ZmxhZ3MgPSAwOwotCQljaGstPnNlbmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9zaHV0ZG93bl9jaHVuayk7Ci0JCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5U
OwotCQljaGstPnNuZF9jb3VudCA9IDA7Ci0JCWNoay0+ZmxhZ3MgPSAwOwotCQljaGstPmFzb2Mg
PSAmc3RjYi0+YXNvYzsKLQkJY2hrLT5kYXRhID0gbV9zaHV0ZG93bjsKLQkJY2hrLT53aG9UbyA9
IG5ldDsKLQkJaWYgKGNoay0+d2hvVG8pIHsKLQkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1Rv
LT5yZWZfY291bnQsIDEpOwotCQl9Ci0JCXNodXRkb3duX2NwID0gbXRvZChtX3NodXRkb3duLCBz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqKTsKLQkJc2h1dGRvd25fY3AtPmNoLmNodW5rX3R5
cGUgPSBTQ1RQX1NIVVRET1dOOwotCQlzaHV0ZG93bl9jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwot
CQlzaHV0ZG93bl9jcC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOwot
CQlzaHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25fYWNrID0gaHRvbmwoc3RjYi0+YXNvYy5jdW11
bGF0aXZlX3Rzbik7Ci0JCVNDVFBfQlVGX0xFTihtX3NodXRkb3duKSA9IGNoay0+c2VuZF9zaXpl
OwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNo
aywgc2N0cF9uZXh0KTsKLQkJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwotCX0gZWxzZSB7
Ci0JCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0
cF9uZXh0KTsKLQkJY2hrLT53aG9UbyA9IG5ldDsKLQkJaWYgKGNoay0+d2hvVG8pIHsKLQkJCWF0
b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCQl9Ci0JCXNodXRkb3du
X2NwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICopOwotCQlz
aHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25fYWNrID0gaHRvbmwoc3RjYi0+YXNvYy5jdW11bGF0
aXZlX3Rzbik7Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9x
dWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2Vu
ZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGlu
dCBhZGRyX2xvY2tlZCkKLXsKLQkvKgotCSAqIGZvcm11bGF0ZSBhbmQgcXVldWUgYW4gQVNDT05G
IHRvIHRoZSBwZWVyLgotCSAqIEFTQ09ORiBwYXJhbWV0ZXJzIHNob3VsZCBiZSBxdWV1ZWQgb24g
dGhlIGFzc29jIHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlz
dHJ1Y3QgbWJ1ZiAqbV9hc2NvbmY7Ci0JaW50IGxlbjsKLQotCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOwotCi0JaWYgKCghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuYXNjb25mX3NlbmRfcXVl
dWUpKSAmJgotCSAgICAoIXNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BD
Ql9GTEFHU19NVUxUSVBMRV9BU0NPTkZTKSkpIHsKLQkJLyogY2FuJ3Qgc2VuZCBhIG5ldyBvbmUg
aWYgdGhlcmUgaXMgb25lIGluIGZsaWdodCBhbHJlYWR5ICovCi0JCXJldHVybjsKLQl9Ci0KLQkv
KiBjb21wb3NlIGFuIEFTQ09ORiBjaHVuaywgbWF4aW11bSBsZW5ndGggaXMgUE1UVSAqLwotCW1f
YXNjb25mID0gc2N0cF9jb21wb3NlX2FzY29uZihzdGNiLCAmbGVuLCBhZGRyX2xvY2tlZCk7Ci0J
aWYgKG1fYXNjb25mID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQotCXNjdHBfYWxsb2NfYV9j
aHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8K
LQkJc2N0cF9tX2ZyZWVtKG1fYXNjb25mKTsKLQkJcmV0dXJuOwotCX0KLQotCWNoay0+Y29weV9i
eV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9BU0NPTkY7Ci0JY2hrLT5y
ZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7Ci0JY2hrLT5mbGFncyA9IENIVU5LX0ZMQUdT
X0ZSQUdNRU5UX09LOwotCWNoay0+ZGF0YSA9IG1fYXNjb25mOwotCWNoay0+c2VuZF9zaXplID0g
bGVuOwotCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50
ID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPndob1RvID0gbmV0OwotCWlm
IChjaGstPndob1RvKSB7Ci0JCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQs
IDEpOwotCX0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5hc2NvbmZfc2VuZF9xdWV1
ZSwgY2hrLCBzY3RwX25leHQpOwotCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLQlyZXR1
cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YikKLXsKLQkvKgotCSAqIGZvcm11bGF0ZSBhbmQgcXVldWUgYSBhc2NvbmYtYWNrIGJhY2sgdG8g
c2VuZGVyLgotCSAqIHRoZSBhc2NvbmYtYWNrIG11c3QgYmUgc3RvcmVkIGluIHRoZSB0Y2IuCi0J
ICovCi0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXN0cnVjdCBzY3RwX2FzY29uZl9h
Y2sgKmFjaywgKmxhdGVzdF9hY2s7Ci0Jc3RydWN0IG1idWYgKm1fYWNrOwotCXN0cnVjdCBzY3Rw
X25ldHMgKm5ldCA9IE5VTEw7Ci0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkvKiBH
ZXQgdGhlIGxhdGVzdCBBU0NPTkYtQUNLICovCi0JbGF0ZXN0X2FjayA9IFRBSUxRX0xBU1QoJnN0
Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBzY3RwX2FzY29uZl9hY2toZWFkKTsKLQlpZiAobGF0
ZXN0X2FjayA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGxhdGVzdF9hY2stPmxhc3Rf
c2VudF90byAhPSBOVUxMICYmCi0JICAgIGxhdGVzdF9hY2stPmxhc3Rfc2VudF90byA9PSBzdGNi
LT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tKSB7Ci0JCS8qIHdlJ3JlIGRvaW5nIGEgcmV0
cmFuc21pc3Npb24gKi8KLQkJbmV0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgc3Rj
Yi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSwgMCk7Ci0JCWlmIChuZXQgPT0gTlVMTCkg
ewotCQkJLyogbm8gYWx0ZXJuYXRlICovCi0JCQlpZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xf
Y2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0J
CQkJCW5ldCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldCA9
IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJ
CW5ldCA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207Ci0JCQl9Ci0JCX0KLQl9
IGVsc2UgewotCQkvKiBub3JtYWwgY2FzZSAqLwotCQlpZiAoc3RjYi0+YXNvYy5sYXN0X2NvbnRy
b2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
LQkJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0ID0g
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkJfQotCQl9IGVsc2UgewotCQkJbmV0
ID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsKLQkJfQotCX0KLQlsYXRlc3Rf
YWNrLT5sYXN0X3NlbnRfdG8gPSBuZXQ7Ci0KLQlUQUlMUV9GT1JFQUNIKGFjaywgJnN0Y2ItPmFz
b2MuYXNjb25mX2Fja19zZW50LCBuZXh0KSB7Ci0JCWlmIChhY2stPmRhdGEgPT0gTlVMTCkgewot
CQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBjb3B5IHRoZSBhc2NvbmZfYWNrICovCi0JCW1fYWNr
ID0gU0NUUF9NX0NPUFlNKGFjay0+ZGF0YSwgMCwgTV9DT1BZQUxMLCBNX05PV0FJVCk7Ci0JCWlm
IChtX2FjayA9PSBOVUxMKSB7Ci0JCQkvKiBjb3VsZG4ndCBjb3B5IGl0ICovCi0JCQlyZXR1cm47
Ci0JCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3Rw
X2xvZ19tYmMobV9hY2ssIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNlbmRpZgotCi0JCXNjdHBf
YWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCQlpZiAoY2hrID09IE5VTEwpIHsKLQkJCS8qIG5v
IG1lbW9yeSAqLwotCQkJaWYgKG1fYWNrKQotCQkJCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWNoay0+cmVjLmNodW5rX2lk
LmlkID0gU0NUUF9BU0NPTkZfQUNLOwotCQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRh
ID0gMTsKLQkJY2hrLT5mbGFncyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQljaGstPndo
b1RvID0gbmV0OwotCQlpZiAoY2hrLT53aG9UbykgewotCQkJYXRvbWljX2FkZF9pbnQoJmNoay0+
d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQkJY2hrLT5kYXRhID0gbV9hY2s7Ci0JCWNoay0+
c2VuZF9zaXplID0gYWNrLT5sZW47Ci0JCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5U
OwotCQljaGstPnNuZF9jb3VudCA9IDA7Ci0JCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCi0J
CVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBz
Y3RwX25leHQpOwotCQljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci0JfQotCXJldHVybjsK
LX0KLQotCi1zdGF0aWMgaW50Ci1zY3RwX2NodW5rX3JldHJhbnNtaXNzaW9uKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAotICAgIGludCAqY250X291dCwgc3RydWN0IHRpbWV2YWwgKm5v
dywgaW50ICpub3dfZmlsbGVkLCBpbnQgKmZyX2RvbmUsIGludCBzb19sb2NrZWQKLSNpZiAhZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFND
VFBfVU5VU0VECi0jZW5kaWYKLSAgICApCi17Ci0JLyotCi0JICogc2VuZCBvdXQgb25lIE1UVSBv
ZiByZXRyYW5zbWlzc2lvbi4gSWYgZmFzdF9yZXRyYW5zbWl0IGlzCi0JICogaGFwcGVuaW5nIHdl
IGlnbm9yZSB0aGUgY3duZC4gT3RoZXJ3aXNlIHdlIG9iZXkgdGhlIGN3bmQgYW5kCi0JICogcndu
ZC4gRm9yIGEgQ29va2llIG9yIEFzY29uZiBpbiB0aGUgY29udHJvbCBjaHVuayBxdWV1ZSB3ZQot
CSAqIHJldHJhbnNtaXQgdGhlbSBieSB0aGVtc2VsdmVzLgotCSAqCi0JICogRm9yIGRhdGEgY2h1
bmtzIHdlIHdpbGwgcGljayBvdXQgdGhlIGxvd2VzdCBUU04ncyBpbiB0aGUgc2VudF9xdWV1ZQot
CSAqIG1hcmtlZCBmb3IgcmVzZW5kIGFuZCBidW5kbGUgdGhlbSBhbGwgdG9nZXRoZXIgKHVwIHRv
IGEgTVRVIG9mCi0JICogZGVzdGluYXRpb24pLiBUaGUgYWRkcmVzcyB0byBzZW5kIHRvIHNob3Vs
ZCBoYXZlIGJlZW4KLQkgKiBzZWxlY3RlZC9jaGFuZ2VkIHdoZXJlIHRoZSByZXRyYW5zbWlzc2lv
biB3YXMgbWFya2VkIChpLmUuIGluIEZSCi0JICogb3IgdDMtdGltZW91dCByb3V0aW5lcykuCi0J
ICovCi0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqZGF0YV9saXN0W1NDVFBfTUFYX0RBVEFfQlVO
RExJTkddOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKmZ3ZDsKLQlzdHJ1Y3QgbWJ1
ZiAqbSwgKmVuZG9mY2hhaW47Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0ID0gTlVMTDsKLQl1aW50
MzJfdCB0c25zX3NlbnQgPSAwOwotCWludCBub19mcmFnbWVudGZsZywgYnVuZGxlX2F0LCBjbnRf
dGhydTsKLQl1bnNpZ25lZCBpbnQgbXR1OwotCWludCBlcnJvciwgaSwgb25lX2NodW5rLCBmd2Rf
dHNuLCBjdGxfY250LCB0bXJfc3RhcnRlZDsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRo
ID0gTlVMTDsKLQl1aW50MzJfdCBhdXRoX29mZnNldCA9IDA7Ci0JdWludDE2X3QgYXV0aF9rZXlp
ZDsKLQlpbnQgb3ZlcnJpZGVfb2sgPSAxOwotCWludCBkYXRhX2F1dGhfcmVxZCA9IDA7Ci0JdWlu
dDMyX3QgZG10dSA9IDA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAoc29fbG9ja2Vk
KSB7Ci0JCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7Ci0JfSBlbHNlIHsKLQkJ
c2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0KLSNlbmRpZgotCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCXRtcl9zdGFydGVkID0gY3RsX2NudCA9IGJ1bmRsZV9h
dCA9IGVycm9yID0gMDsKLQlub19mcmFnbWVudGZsZyA9IDE7Ci0JZndkX3RzbiA9IDA7Ci0JKmNu
dF9vdXQgPSAwOwotCWZ3ZCA9IE5VTEw7Ci0JZW5kb2ZjaGFpbiA9IG0gPSBOVUxMOwotCWF1dGhf
a2V5aWQgPSBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZDsKLSNpZmRlZiBTQ1RQX0FV
RElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEMzLCAxKTsKLSNlbmRpZgotCWlmICgo
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSAmJgotCSAgICAoVEFJTFFfRU1QVFkoJmFz
b2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCJTQ1RQIGhpdHMgZW1wdHkgcXVldWUgd2l0aCBjbnQgc2V0IHRvICVkP1xuIiwKLQkJCWFzb2Mt
PnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCWFzb2MtPnNlbnRfcXVldWVfY250ID0gMDsKLQkJ
YXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZSA9IDA7Ci0JCS8qIHNlbmQgYmFjayAwLzAg
c28gd2UgZW50ZXIgbm9ybWFsIHRyYW5zbWlzc2lvbiAqLwotCQkqY250X291dCA9IDA7Ci0JCXJl
dHVybiAoMCk7Ci0JfQotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1
ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0NP
T0tJRV9FQ0hPKSB8fAotCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU1RSRUFN
X1JFU0VUKSB8fAotCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRk9SV0FSRF9D
VU1fVFNOKSkgewotCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBf
U1RSRUFNX1JFU0VUKSB7Ci0JCQkJaWYgKGNoayAhPSBhc29jLT5zdHJfcmVzZXQpIHsKLQkJCQkJ
LyoKLQkJCQkJICogbm90IGVsaWdpYmxlIGZvciByZXRyYW4gaWYgaXRzCi0JCQkJCSAqIG5vdCBv
dXJzCi0JCQkJCSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQljdGxfY250Kys7
Ci0JCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pIHsK
LQkJCQlmd2RfdHNuID0gMTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywg
aWYgY2h1bmsgcmVxdWlyZXMgaXQgc2F2ZSB0aGUKLQkJCSAqIG9mZnNldCBpbnRvIHRoZSBjaGFp
biBmb3IgQVVUSAotCQkJICovCi0JCQlpZiAoKGF1dGggPT0gTlVMTCkgJiYKLQkJCSAgICAoc2N0
cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNoay0+cmVjLmNodW5rX2lkLmlkLAotCQkJCQkJCSBz
dGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSkgewotCQkJCW0gPSBzY3RwX2FkZF9hdXRoX2No
dW5rKG0sICZlbmRvZmNoYWluLAotCQkJCQkJCSZhdXRoLCAmYXV0aF9vZmZzZXQsCi0JCQkJCQkJ
c3RjYiwKLQkJCQkJCQljaGstPnJlYy5jaHVua19pZC5pZCk7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Jf
Q09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJfQotCQkJbSA9IHNjdHBfY29w
eV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwgY2hrLT5zZW5kX3NpemUs
IGNoay0+Y29weV9ieV9yZWYpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0Jb25lX2NodW5rID0gMDsK
LQljbnRfdGhydSA9IDA7Ci0JLyogZG8gd2UgaGF2ZSBjb250cm9sIGNodW5rcyB0byByZXRyYW5z
bWl0PyAqLwotCWlmIChtICE9IE5VTEwpIHsKLQkJLyogU3RhcnQgYSB0aW1lciBubyBtYXR0ZXIg
aWYgd2Ugc3VjY2VlZCBvciBmYWlsICovCi0JCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBT
Q1RQX0NPT0tJRV9FQ0hPKSB7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9D
T09LSUUsIGlucCwgc3RjYiwgY2hrLT53aG9Ubyk7Ci0JCX0gZWxzZSBpZiAoY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpCi0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9BU0NPTkYsIGlucCwgc3RjYiwgY2hrLT53aG9Ubyk7Ci0JCWNoay0+c25kX2NvdW50Kys7
CS8qIHVwZGF0ZSBvdXIgY291bnQgKi8KLQkJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1
bmtfb3V0cHV0KGlucCwgc3RjYiwgY2hrLT53aG9UbywKLQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2hrLT53aG9Uby0+cm8uX2xf
YWRkciwgbSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhf
b2Zmc2V0LCBhdXRoLCBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwKLQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2ZyYWdtZW50ZmxnLCAwLCAwLAot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0
LCBzdGNiLT5ycG9ydCwgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hrLT53aG9Uby0+cG9ydCwgTlVMTCwKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc29fbG9ja2VkKSkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAi
R2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7
Ci0JCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAxOwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2xvd2xldmVsZXJyKTsKLQkJCX0KLQkJCXJldHVybiAoZXJyb3IpOwotCQl9IGVsc2UgewotCQkJ
YXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOwotCQl9Ci0JCWVuZG9mY2hhaW4gPSBOVUxMOwotCQlh
dXRoID0gTlVMTDsKLQkJYXV0aF9vZmZzZXQgPSAwOwotCQkvKgotCQkgKiBXZSBkb24ndCB3YW50
IHRvIG1hcmsgdGhlIG5ldC0+c2VudCB0aW1lIGhlcmUgc2luY2UgdGhpcwotCQkgKiB3ZSB1c2Ug
dGhpcyBmb3IgSEIgYW5kIHJldHJhbnMgY2Fubm90IG1lYXN1cmUgUlRUCi0JCSAqLwotCQkvKiAo
dm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmY2hrLT53aG9Uby0+bGFzdF9zZW50X3RpbWUpOyAq
LwotCQkqY250X291dCArPSAxOwotCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7Ci0J
CXNjdHBfdWNvdW50X2RlY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQlp
ZiAoZndkX3RzbiA9PSAwKSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9IGVsc2UgewotCQkJLyogQ2xl
YW4gdXAgdGhlIGZ3ZC10c24gbGlzdCAqLwotCQkJc2N0cF9jbGVhbl91cF9jdGwoc3RjYiwgYXNv
Yywgc29fbG9ja2VkKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBPaywgaXQg
aXMganVzdCBkYXRhIHJldHJhbnNtaXNzaW9uIHdlIG5lZWQgdG8gZG8gb3IgdGhhdCBhbmQgYQot
CSAqIGZ3ZC10c24gd2l0aCBpdCBhbGwuCi0JICovCi0JaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW50X3F1ZXVlKSkgewotCQlyZXR1cm4gKFNDVFBfUkVUUkFOX0RPTkUpOwotCX0KLQlpZiAoKFND
VFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgfHwKLQkgICAg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpKSB7Ci0JCS8q
IG5vdCB5ZXQgb3BlbiwgcmVzZW5kIHRoZSBjb29raWUgYW5kIHRoYXQgaXMgaXQgKi8KLQkJcmV0
dXJuICgxKTsKLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdGlu
ZygyMCwgaW5wLCBzdGNiLCBOVUxMKTsKLSNlbmRpZgotCWRhdGFfYXV0aF9yZXFkID0gc2N0cF9h
dXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1
bmtzKTsKLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkg
ewotCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkvKiBObywg
bm90IHNlbnQgdG8gdGhpcyBuZXQgb3Igbm90IHJlYWR5IGZvciBydHggKi8KLQkJCWNvbnRpbnVl
OwotCQl9Ci0JCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQkJU0NUUF9QUklOVEYoIlRTTjol
eCBjaGstPnNuZF9jb3VudDolZCBjaGstPnNlbnQ6JWQgY2FuJ3QgcmV0cmFuIC0gbm8gZGF0YVxu
IiwKLQkJCSAgICAgICAgICAgIGNoay0+cmVjLmRhdGEudHNuLCBjaGstPnNuZF9jb3VudCwgY2hr
LT5zZW50KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X21heF9yZXRyYW5fY2h1bmspKSAmJgotCQkgICAgKGNoay0+c25kX2NvdW50ID49IFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSkpIHsKLQkJCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0JCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQlzbnByaW50Zihtc2cs
IHNpemVvZihtc2cpLCAiVFNOICU4Ljh4IHJldHJhbnNtaXR0ZWQgJWQgdGltZXMsIGdpdmluZyB1
cCIsCi0JCQkJIGNoay0+cmVjLmRhdGEudHNuLCBjaGstPnNuZF9jb3VudCk7Ci0JCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29k
ZSksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7Ci0JCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlv
bihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvX2xvY2tlZCk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJcmV0dXJuIChTQ1RQX1JFVFJBTl9F
WElUKTsKLQkJfQotCQkvKiBwaWNrIHVwIHRoZSBuZXQgKi8KLQkJbmV0ID0gY2hrLT53aG9UbzsK
LQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAot
CQkJY2FzZSBBRl9JTkVUOgotCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhF
QUQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoK
LQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCWJyZWFrOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJY2FzZSBBRl9DT05OOgotCQkJCW10
dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJCQlicmVhazsKLSNlbmRp
ZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJbXR1ID0gbmV0LT5tdHU7Ci0JCQkJ
YnJlYWs7Ci0JCX0KLQotCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPCBtdHUpICYmIChhc29jLT50
b3RhbF9mbGlnaHQgPiAwKSkgewotCQkJLyogTm8gcm9vbSBpbiBwZWVycyByd25kICovCi0JCQl1
aW50MzJfdCB0c247Ci0KLQkJCXRzbiA9IGFzb2MtPmxhc3RfYWNrZWRfc2VxICsgMTsKLQkJCWlm
ICh0c24gPT0gY2hrLT5yZWMuZGF0YS50c24pIHsKLQkJCQkvKgotCQkJCSAqIHdlIG1ha2UgYSBz
cGVjaWFsIGV4Y2VwdGlvbiBmb3IgdGhpcwotCQkJCSAqIGNhc2UuIFRoZSBwZWVyIGhhcyBubyBy
d25kIGJ1dCBpcyBtaXNzaW5nCi0JCQkJICogdGhlIGxvd2VzdCBjaHVuay4uIHdoaWNoIGlzIHBy
b2JhYmx5IHdoYXQKLQkJCQkgKiBpcyBob2xkaW5nIHVwIHRoZSByd25kLgotCQkJCSAqLwotCQkJ
CWdvdG8gb25lX2NodW5rX2Fyb3VuZDsKLQkJCX0KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQlvbmVf
Y2h1bmtfYXJvdW5kOgotCQlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IG10dSkgewotCQkJb25lX2No
dW5rID0gMTsKLQkJCWlmICgoYXNvYy0+cGVlcnNfcnduZCA9PSAwKSAmJgotCQkJICAgIChhc29j
LT50b3RhbF9mbGlnaHQgPT0gMCkpIHsKLQkJCQljaGstPndpbmRvd19wcm9iZSA9IDE7Ci0JCQkJ
Y2hrLT53aG9Uby0+d2luZG93X3Byb2JlID0gMTsKLQkJCX0KLQkJfQotI2lmZGVmIFNDVFBfQVVE
SVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0X2xvZygweEMzLCAyKTsKLSNlbmRpZgotCQlidW5k
bGVfYXQgPSAwOwotCQltID0gTlVMTDsKLQkJbmV0LT5mYXN0X3JldHJhbl9pcCA9IDA7Ci0JCWlm
IChjaGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9PSAwKSB7Ci0JCQkvKgotCQkJ
ICogaWYgbm8gRlIgaW4gcHJvZ3Jlc3Mgc2tpcCBkZXN0aW5hdGlvbiB0aGF0IGhhdmUKLQkJCSAq
IGZsaWdodF9zaXplID4gY3duZC4KLQkJCSAqLwotCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPj0g
bmV0LT5jd25kKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJ
ICogTWFyayB0aGUgZGVzdGluYXRpb24gbmV0IHRvIGhhdmUgRlIgcmVjb3ZlcnkKLQkJCSAqIGxp
bWl0cyBwdXQgb24gaXQuCi0JCQkgKi8KLQkJCSpmcl9kb25lID0gMTsKLQkJCW5ldC0+ZmFzdF9y
ZXRyYW5faXAgPSAxOwotCQl9Ci0KLQkJLyoKLQkJICogaWYgbm8gQVVUSCBpcyB5ZXQgaW5jbHVk
ZWQgYW5kIHRoaXMgY2h1bmsgcmVxdWlyZXMgaXQsCi0JCSAqIG1ha2Ugc3VyZSB0byBhY2NvdW50
IGZvciBpdC4gIFdlIGRvbid0IGFwcGx5IHRoZSBzaXplCi0JCSAqIHVudGlsIHRoZSBBVVRIIGNo
dW5rIGlzIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UKLQkJICogdGhlcmUgaXMgbm8gcm9v
bSBmb3IgdGhpcyBjaHVuay4KLQkJICovCi0JCWlmIChkYXRhX2F1dGhfcmVxZCAmJiAoYXV0aCA9
PSBOVUxMKSkgewotCQkJZG10dSA9IHNjdHBfZ2V0X2F1dGhfY2h1bmtfbGVuKHN0Y2ItPmFzb2Mu
cGVlcl9obWFjX2lkKTsKLQkJfSBlbHNlCi0JCQlkbXR1ID0gMDsKLQotCQlpZiAoKGNoay0+c2Vu
ZF9zaXplIDw9IChtdHUgLSBkbXR1KSkgfHwKLQkJICAgIChjaGstPmZsYWdzICYgQ0hVTktfRkxB
R1NfRlJBR01FTlRfT0spKSB7Ci0JCQkvKiBvayB3ZSB3aWxsIGFkZCB0aGlzIG9uZSAqLwotCQkJ
aWYgKGRhdGFfYXV0aF9yZXFkKSB7Ci0JCQkJaWYgKGF1dGggPT0gTlVMTCkgewotCQkJCQltID0g
c2N0cF9hZGRfYXV0aF9jaHVuayhtLAotCQkJCQkJCQkmZW5kb2ZjaGFpbiwKLQkJCQkJCQkJJmF1
dGgsCi0JCQkJCQkJCSZhdXRoX29mZnNldCwKLQkJCQkJCQkJc3RjYiwKLQkJCQkJCQkJU0NUUF9E
QVRBKTsKLQkJCQkJYXV0aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlpZDsKLQkJCQkJb3ZlcnJpZGVf
b2sgPSAwOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNo
dW5rcyk7Ci0JCQkJfSBlbHNlIGlmIChvdmVycmlkZV9vaykgewotCQkJCQlhdXRoX2tleWlkID0g
Y2hrLT5hdXRoX2tleWlkOwotCQkJCQlvdmVycmlkZV9vayA9IDA7Ci0JCQkJfSBlbHNlIGlmIChj
aGstPmF1dGhfa2V5aWQgIT0gYXV0aF9rZXlpZCkgewotCQkJCQkvKiBkaWZmZXJlbnQga2V5aWQs
IHNvIGRvbmUgYnVuZGxpbmcgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJbSA9IHNj
dHBfY29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwgY2hrLT5zZW5k
X3NpemUsIGNoay0+Y29weV9ieV9yZWYpOwotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVO
T01FTSk7Ci0JCQkJcmV0dXJuIChFTk9NRU0pOwotCQkJfQotCQkJLyogRG8gY2xlYXIgSVBfREYg
PyAqLwotCQkJaWYgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgewotCQkJ
CW5vX2ZyYWdtZW50ZmxnID0gMDsKLQkJCX0KLQkJCS8qIHVwYXRlIG91ciBNVFUgc2l6ZSAqLwot
CQkJaWYgKG10dSA+IChjaGstPnNlbmRfc2l6ZSArIGRtdHUpKQotCQkJCW10dSAtPSAoY2hrLT5z
ZW5kX3NpemUgKyBkbXR1KTsKLQkJCWVsc2UKLQkJCQltdHUgPSAwOwotCQkJZGF0YV9saXN0W2J1
bmRsZV9hdCsrXSA9IGNoazsKLQkJCWlmIChvbmVfY2h1bmsgJiYgKGFzb2MtPnRvdGFsX2ZsaWdo
dCA8PSAwKSkgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3dpbmRvd3Byb2JlZCk7Ci0JCQl9
Ci0JCX0KLQkJaWYgKG9uZV9jaHVuayA9PSAwKSB7Ci0JCQkvKgotCQkJICogbm93IGFyZSB0aGVy
ZSBhbnltb3JlIGZvcndhcmQgZnJvbSBjaGsgdG8gcGljawotCQkJICogdXA/Ci0JCQkgKi8KLQkJ
CWZvciAoZndkID0gVEFJTFFfTkVYVChjaGssIHNjdHBfbmV4dCk7IGZ3ZCAhPSBOVUxMOyBmd2Qg
PSBUQUlMUV9ORVhUKGZ3ZCwgc2N0cF9uZXh0KSkgewotCQkJCWlmIChmd2QtPnNlbnQgIT0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQkJLyogTm9wZSwgbm90IGZvciByZXRyYW4gKi8KLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotCQkJCWlmIChmd2QtPndob1RvICE9IG5ldCkgewotCQkJCQkv
KiBOb3BlLCBub3QgdGhlIG5ldCBpbiBxdWVzdGlvbiAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9
Ci0JCQkJaWYgKGRhdGFfYXV0aF9yZXFkICYmIChhdXRoID09IE5VTEwpKSB7Ci0JCQkJCWRtdHUg
PSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7Ci0JCQkJ
fSBlbHNlCi0JCQkJCWRtdHUgPSAwOwotCQkJCWlmIChmd2QtPnNlbmRfc2l6ZSA8PSAobXR1IC0g
ZG10dSkpIHsKLQkJCQkJaWYgKGRhdGFfYXV0aF9yZXFkKSB7Ci0JCQkJCQlpZiAoYXV0aCA9PSBO
VUxMKSB7Ci0JCQkJCQkJbSA9IHNjdHBfYWRkX2F1dGhfY2h1bmsobSwKLQkJCQkJCQkJCQkmZW5k
b2ZjaGFpbiwKLQkJCQkJCQkJCQkmYXV0aCwKLQkJCQkJCQkJCQkmYXV0aF9vZmZzZXQsCi0JCQkJ
CQkJCQkJc3RjYiwKLQkJCQkJCQkJCQlTQ1RQX0RBVEEpOwotCQkJCQkJCWF1dGhfa2V5aWQgPSBm
d2QtPmF1dGhfa2V5aWQ7Ci0JCQkJCQkJb3ZlcnJpZGVfb2sgPSAwOwotCQkJCQkJCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKLQkJCQkJCX0gZWxzZSBp
ZiAob3ZlcnJpZGVfb2spIHsKLQkJCQkJCQlhdXRoX2tleWlkID0gZndkLT5hdXRoX2tleWlkOwot
CQkJCQkJCW92ZXJyaWRlX29rID0gMDsKLQkJCQkJCX0gZWxzZSBpZiAoZndkLT5hdXRoX2tleWlk
ICE9IGF1dGhfa2V5aWQpIHsKLQkJCQkJCQkvKiBkaWZmZXJlbnQga2V5aWQsIHNvIGRvbmUgYnVu
ZGxpbmcgKi8KLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQltID0gc2N0cF9j
b3B5X21idWZjaGFpbihmd2QtPmRhdGEsIG0sICZlbmRvZmNoYWluLCAwLCBmd2QtPnNlbmRfc2l6
ZSwgZndkLT5jb3B5X2J5X3JlZik7Ci0JCQkJCWlmIChtID09IE5VTEwpIHsKLQkJCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVO
T01FTSk7Ci0JCQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQkJCX0KLQkJCQkJLyogRG8gY2xlYXIg
SVBfREYgPyAqLwotCQkJCQlpZiAoZndkLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09L
KSB7Ci0JCQkJCQlub19mcmFnbWVudGZsZyA9IDA7Ci0JCQkJCX0KLQkJCQkJLyogdXBhdGUgb3Vy
IE1UVSBzaXplICovCi0JCQkJCWlmIChtdHUgPiAoZndkLT5zZW5kX3NpemUgKyBkbXR1KSkKLQkJ
CQkJCW10dSAtPSAoZndkLT5zZW5kX3NpemUgKyBkbXR1KTsKLQkJCQkJZWxzZQotCQkJCQkJbXR1
ID0gMDsKLQkJCQkJZGF0YV9saXN0W2J1bmRsZV9hdCsrXSA9IGZ3ZDsKLQkJCQkJaWYgKGJ1bmRs
ZV9hdCA+PSBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSB7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQot
CQkJCX0gZWxzZSB7Ci0JCQkJCS8qIGNhbid0IGZpdCBzbyB3ZSBhcmUgZG9uZSAqLwotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyogSXMgdGhlcmUgc29tZXRoaW5nIHRvIHNlbmQg
Zm9yIHRoaXMgZGVzdGluYXRpb24/ICovCi0JCWlmIChtKSB7Ci0JCQkvKgotCQkJICogTm8gbWF0
dGVyIGlmIHdlIGZhaWwvb3Igc3VjY2VlZCB3ZSBzaG91bGQgc3RhcnQgYQotCQkJICogdGltZXIu
IEEgZmFpbHVyZSBpcyBsaWtlIGEgbG9zdCBJUCBwYWNrZXQgOi0pCi0JCQkgKi8KLQkJCWlmICgh
U0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKLQkJCQkvKgot
CQkJCSAqIG5vIHRpbWVyIHJ1bm5pbmcgb24gdGhpcyBkZXN0aW5hdGlvbgotCQkJCSAqIHJlc3Rh
cnQgaXQuCi0JCQkJICovCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VO
RCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJCXRtcl9zdGFydGVkID0gMTsKLQkJCX0KLQkJCS8qIE5v
dyBsZXRzIHNlbmQgaXQsIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIHNlbmQgOj4gKi8KLQkJCWlm
ICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIG5ldCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRy
ICopJm5ldC0+cm8uX2xfYWRkciwgbSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRoX29mZnNldCwgYXV0aCwgYXV0aF9rZXlpZCwKLQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZsZywgMCwgMCwKLQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0
Y2ItPnJwb3J0LCBodG9ubChzdGNiLT5hc29jLnBlZXJfdnRhZyksCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
MCwgMCwKLSNlbmRpZgotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvX2xvY2tlZCkpKSB7Ci0JCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KLQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJv
cik7Ci0JCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCQkJYXNvYy0+aWZwX2hhZF9lbm9i
dWYgPSAxOwotCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0JCQkJfQot
CQkJCXJldHVybiAoZXJyb3IpOwotCQkJfSBlbHNlIHsKLQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1
ZiA9IDA7Ci0JCQl9Ci0JCQllbmRvZmNoYWluID0gTlVMTDsKLQkJCWF1dGggPSBOVUxMOwotCQkJ
YXV0aF9vZmZzZXQgPSAwOwotCQkJLyogRm9yIEhCJ3MgKi8KLQkJCS8qCi0JCQkgKiBXZSBkb24n
dCB3YW50IHRvIG1hcmsgdGhlIG5ldC0+c2VudCB0aW1lIGhlcmUKLQkJCSAqIHNpbmNlIHRoaXMg
d2UgdXNlIHRoaXMgZm9yIEhCIGFuZCByZXRyYW5zIGNhbm5vdAotCQkJICogbWVhc3VyZSBSVFQK
LQkJCSAqLwotCQkJLyogKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5ldC0+bGFzdF9zZW50
X3RpbWUpOyAqLwotCi0JCQkvKiBGb3IgYXV0by1jbG9zZSAqLwotCQkJY250X3RocnUrKzsKLQkJ
CWlmICgqbm93X2ZpbGxlZCA9PSAwKSB7Ci0JCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
JmFzb2MtPnRpbWVfbGFzdF9zZW50KTsKLQkJCQkqbm93ID0gYXNvYy0+dGltZV9sYXN0X3NlbnQ7
Ci0JCQkJKm5vd19maWxsZWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlhc29jLT50aW1lX2xhc3Rf
c2VudCA9ICpub3c7Ci0JCQl9Ci0JCQkqY250X291dCArPSBidW5kbGVfYXQ7Ci0jaWZkZWYgU0NU
UF9BVURJVElOR19FTkFCTEVECi0JCQlzY3RwX2F1ZGl0X2xvZygweEM0LCBidW5kbGVfYXQpOwot
I2VuZGlmCi0JCQlpZiAoYnVuZGxlX2F0KSB7Ci0JCQkJdHNuc19zZW50ID0gZGF0YV9saXN0WzBd
LT5yZWMuZGF0YS50c247Ci0JCQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwgYnVuZGxlX2F0OyBpKysp
IHsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kcmV0cmFuc2RhdGEpOwotCQkJCWRhdGFf
bGlzdFtpXS0+c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKLQkJCQkvKgotCQkJCSAqIFdoZW4g
d2UgaGF2ZSBhIHJldm9rZWQgZGF0YSwgYW5kIHdlCi0JCQkJICogcmV0cmFuc21pdCBpdCwgdGhl
biB3ZSBjbGVhciB0aGUgcmV2b2tlZAotCQkJCSAqIGZsYWcgc2luY2UgdGhpcyBmbGFnIGRpY3Rh
dGVzIGlmIHdlCi0JCQkJICogc3VidHJhY3RlZCBmcm9tIHRoZSBmcwotCQkJCSAqLwotCQkJCWlm
IChkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkKSB7Ci0JCQkJCS8qIERl
ZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJZGF0YV9saXN0W2ldLT53aG9Uby0+Y3duZCAtPSBkYXRh
X2xpc3RbaV0tPmJvb2tfc2l6ZTsKLQkJCQkJZGF0YV9saXN0W2ldLT5yZWMuZGF0YS5jaHVua193
YXNfcmV2b2tlZCA9IDA7Ci0JCQkJfQotCQkJCWRhdGFfbGlzdFtpXS0+c25kX2NvdW50Kys7Ci0J
CQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQkJCS8q
IHJlY29yZCB0aGUgdGltZSAqLwotCQkJCWRhdGFfbGlzdFtpXS0+c2VudF9yY3ZfdGltZSA9IGFz
b2MtPnRpbWVfbGFzdF9zZW50OwotCQkJCWlmIChkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZV9zY2Fs
ZSkgewotCQkJCQkvKgotCQkJCQkgKiBuZWVkIHRvIGRvdWJsZSB0aGUgYm9vayBzaXplIG9uCi0J
CQkJCSAqIHRoaXMgb25lCi0JCQkJCSAqLwotCQkJCQlkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZV9z
Y2FsZSA9IDA7Ci0JCQkJCS8qIFNpbmNlIHdlIGRvdWJsZSB0aGUgYm9va3NpemUsIHdlIG11c3QK
LQkJCQkJICogYWxzbyBkb3VibGUgdGhlIG91dHB1dCBxdWV1ZSBzaXplLCBzaW5jZSB0aGlzCi0J
CQkJCSAqIGdldCBzaHJ1bmsgd2hlbiB3ZSBmcmVlIGJ5IHRoaXMgYW1vdW50LgotCQkJCQkgKi8K
LQkJCQkJYXRvbWljX2FkZF9pbnQoJigoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKSxk
YXRhX2xpc3RbaV0tPmJvb2tfc2l6ZSk7Ci0JCQkJCWRhdGFfbGlzdFtpXS0+Ym9va19zaXplICo9
IDI7Ci0KLQotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfcndu
ZChTQ1RQX0RFQ1JFQVNFX1BFRVJfUldORCwKLQkJCQkJCSAgICAgIGFzb2MtPnBlZXJzX3J3bmQs
IGRhdGFfbGlzdFtpXS0+c2VuZF9zaXplLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVu
a19vaCkpOwotCQkJCQl9Ci0JCQkJCWFzb2MtPnBlZXJzX3J3bmQgPSBzY3RwX3Nic3BhY2Vfc3Vi
KGFzb2MtPnBlZXJzX3J3bmQsCi0JCQkJCQkJCQkgICAgKHVpbnQzMl90KSAoZGF0YV9saXN0W2ld
LT5zZW5kX3NpemUgKwotCQkJCQkJCQkJCQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVu
a19vaCkpKTsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRz
KFNDVFBfRkxJR0hUX0xPR19VUF9SU05ELAotCQkJCQkJICAgICAgIGRhdGFfbGlzdFtpXS0+d2hv
VG8tPmZsaWdodF9zaXplLAotCQkJCQkJICAgICAgIGRhdGFfbGlzdFtpXS0+Ym9va19zaXplLAot
CQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KWRhdGFfbGlzdFtpXS0+d2hvVG8sCi0J
CQkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOwotCQkJCX0KLQkJCQlzY3Rw
X2ZsaWdodF9zaXplX2luY3JlYXNlKGRhdGFfbGlzdFtpXSk7Ci0JCQkJc2N0cF90b3RhbF9mbGln
aHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKLQkJCQlpZiAoYXNvYy0+cGVlcnNfcndu
ZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7Ci0JCQkJCS8qIFNX
UyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCi0JCQkJCWFzb2MtPnBlZXJzX3J3bmQgPSAwOwotCQkJ
CX0KLQkJCQlpZiAoKGkgPT0gMCkgJiYKLQkJCQkgICAgKGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEu
ZG9pbmdfZmFzdF9yZXRyYW5zbWl0KSkgewotCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5k
ZmFzdHJldHJhbnMpOwotCQkJCQlpZiAoKGRhdGFfbGlzdFtpXSA9PSBUQUlMUV9GSVJTVCgmYXNv
Yy0+c2VudF9xdWV1ZSkpICYmCi0JCQkJCSAgICAodG1yX3N0YXJ0ZWQgPT0gMCkpIHsKLQkJCQkJ
CS8qLQotCQkJCQkJICogb2sgd2UganVzdCBmYXN0LXJldHJhbnMnZAotCQkJCQkJICogdGhlIGxv
d2VzdCBUU04sIGkuZSB0aGUKLQkJCQkJCSAqIGZpcnN0IG9uIHRoZSBsaXN0LiBJbgotCQkJCQkJ
ICogdGhpcyBjYXNlIHdlIHdhbnQgdG8gZ2l2ZQotCQkJCQkJICogc29tZSBtb3JlIHRpbWUgdG8g
Z2V0IGEKLQkJCQkJCSAqIFNBQ0sgYmFjayB3aXRob3V0IGEKLQkJCQkJCSAqIHQzLWV4cGlyaW5n
LgotCQkJCQkJICovCi0JCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQs
IGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQlTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xP
Q18yKTsKLQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwg
c3RjYiwgbmV0KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlz
Y3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgdHNuc19zZW50LCBTQ1RQX0NXTkRfTE9HX0ZST01fUkVT
RU5EKTsKLQkJCX0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJCXNjdHBfYXVkaXRp
bmcoMjEsIGlucCwgc3RjYiwgTlVMTCk7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCS8qIE5vbmUg
d2lsbCBmaXQgKi8KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJaWYgKGFzb2MtPnNlbnRfcXVldWVf
cmV0cmFuX2NudCA8PSAwKSB7Ci0JCQkvKiBhbGwgZG9uZSB3ZSBoYXZlIG5vIG1vcmUgdG8gcmV0
cmFuICovCi0JCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAwOwotCQkJYnJlYWs7Ci0J
CX0KLQkJaWYgKG9uZV9jaHVuaykgewotCQkJLyogTm8gbW9yZSByb29tIGluIHJ3bmQgKi8KLQkJ
CXJldHVybiAoMSk7Ci0JCX0KLQkJLyogc3RvcCB0aGUgZm9yIGxvb3AgaGVyZS4gd2Ugc2VudCBv
dXQgYSBwYWNrZXQgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zY3RwX3RpbWVyX3ZhbGlkYXRpb24oc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Mp
Ci17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JLyogVmFsaWRhdGUgdGhhdCBhIHRpbWVy
IGlzIHJ1bm5pbmcgc29tZXdoZXJlICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRz
LCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGlt
ZXIudGltZXIpKSB7Ci0JCQkvKiBIZXJlIGlzIGEgdGltZXIgKi8KLQkJCXJldHVybjsKLQkJfQot
CX0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkvKiBHYWssIHdlIGRpZCBub3QgaGF2
ZSBhIHRpbWVyIHNvbWV3aGVyZSAqLwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiRGVh
ZGxvY2sgYXZvaWRlZCBzdGFydGluZyB0aW1lciBvbiBhIGRlc3QgYXQgcmV0cmFuXG4iKTsKLQlp
ZiAoYXNvYy0+YWx0ZXJuYXRlKSB7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NFTkQsIGlucCwgc3RjYiwgYXNvYy0+YWx0ZXJuYXRlKTsKLQl9IGVsc2UgewotCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2IsIGFzb2MtPnByaW1hcnlf
ZGVzdGluYXRpb24pOwotCX0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfY2h1bmtfb3V0cHV0
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAg
IGludCBmcm9tX3doZXJlLAotICAgIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExF
X18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0j
ZW5kaWYKLSAgICApCi17Ci0JLyotCi0JICogT2sgdGhpcyBpcyB0aGUgZ2VuZXJpYyBjaHVuayBz
ZXJ2aWNlIHF1ZXVlLiB3ZSBtdXN0IGRvIHRoZQotCSAqIGZvbGxvd2luZzoKLQkgKiAtIFNlZSBp
ZiB0aGVyZSBhcmUgcmV0cmFuc21pdHMgcGVuZGluZywgaWYgc28gd2UgbXVzdAotCSAqICAgZG8g
dGhlc2UgZmlyc3QuCi0JICogLSBTZXJ2aWNlIHRoZSBzdHJlYW0gcXVldWUgdGhhdCBpcyBuZXh0
LCBtb3ZpbmcgYW55Ci0JICogICBtZXNzYWdlIChub3RlIEkgbXVzdCBnZXQgYSBjb21wbGV0ZSBt
ZXNzYWdlIGkuZS4KLQkgKiAgIEZJUlNUL01JRERMRSBhbmQgTEFTVCB0byB0aGUgb3V0IHF1ZXVl
IGluIG9uZSBwYXNzKSBhbmQgYXNzaWduaW5nCi0JICogICBUU04ncwotCSAqIC0gQ2hlY2sgdG8g
c2VlIGlmIHRoZSBjd25kL3J3bmQgYWxsb3dzIGFueSBvdXRwdXQsIGlmIHNvIHdlCi0JICogICBn
byBhaGVhZCBhbmQgZm9tdWxhdGUgYW5kIHNlbmQgdGhlIGxvdyBsZXZlbCBjaHVua3MuIE1ha2lu
ZyBzdXJlCi0JICogICB0byBjb21iaW5lIGFueSBjb250cm9sIGluIHRoZSBjb250cm9sIGNodW5r
IHF1ZXVlIGFsc28uCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OwotCWludCBlcnJvciA9IDAsIG51bV9vdXQsIHRvdF9vdXQgPSAw
LCByZXQgPSAwLCByZWFzb25fY29kZTsKLQl1bnNpZ25lZCBpbnQgYnVyc3RfY250ID0gMDsKLQlz
dHJ1Y3QgdGltZXZhbCBub3c7Ci0JaW50IG5vd19maWxsZWQgPSAwOwotCWludCBuYWdsZV9vbjsK
LQlpbnQgZnJhZ19wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RjYiwgJnN0Y2ItPmFzb2Mp
OwotCWludCB1bl9zZW50ID0gMDsKLQlpbnQgZnJfZG9uZTsKLQl1bnNpZ25lZCBpbnQgdG90X2Zy
cyA9IDA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAoc29fbG9ja2VkKSB7Ci0JCXNj
dHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxv
Y2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0KLSNlbmRpZgotCWFzb2MgPSAmc3RjYi0+
YXNvYzsKLWRvX2l0X2FnYWluOgotCS8qIFRoZSBOYWdsZSBhbGdvcml0aG0gaXMgb25seSBhcHBs
aWVkIHdoZW4gaGFuZGxpbmcgYSBzZW5kIGNhbGwuICovCi0JaWYgKGZyb21fd2hlcmUgPT0gU0NU
UF9PVVRQVVRfRlJPTV9VU1JfU0VORCkgewotCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpIHsKLQkJCW5hZ2xlX29uID0gMDsKLQkJfSBlbHNlIHsK
LQkJCW5hZ2xlX29uID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCW5hZ2xlX29uID0gMDsKLQl9Ci0J
U0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0KLQl1bl9zZW50ID0gKHN0Y2ItPmFzb2MudG90
YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCk7Ci0KLQlpZiAo
KHVuX3NlbnQgPD0gMCkgJiYKLQkgICAgKFRBSUxRX0VNUFRZKCZhc29jLT5jb250cm9sX3NlbmRf
cXVldWUpKSAmJgotCSAgICAoVEFJTFFfRU1QVFkoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlKSkg
JiYKLQkgICAgKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9PSAwKSAmJgotCSAgICAoYXNv
Yy0+dHJpZ2dlcl9yZXNldCA9PSAwKSkgewotCQkvKiBOb3RoaW5nIHRvIGRvIHVubGVzcyB0aGVy
ZSBpcyBzb21ldGhpbmcgdG8gYmUgc2VudCBsZWZ0ICovCi0JCXJldHVybjsKLQl9Ci0JLyogRG8g
d2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VuZCwgZGF0YSBvciBjb250cm9sIEFORAotCSAqIGEgc2Fj
ayB0aW1lciBydW5uaW5nLCBpZiBzbyBwaWdneS1iYWNrIHRoZSBzYWNrLgotCSAqLwotCWlmIChT
Q1RQX09TX1RJTUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1lcikpIHsKLQkJ
c2N0cF9zZW5kX3NhY2soc3RjYiwgc29fbG9ja2VkKTsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9T
VE9QKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpOwotCX0KLQl3aGlsZSAoYXNvYy0+c2Vu
dF9xdWV1ZV9yZXRyYW5fY250KSB7Ci0JCS8qLQotCQkgKiBPaywgaXQgaXMgcmV0cmFuc21pc3Np
b24gdGltZSBvbmx5LCB3ZSBzZW5kIG91dCBvbmx5IE9ORQotCQkgKiBwYWNrZXQgd2l0aCBhIHNp
bmdsZSBjYWxsIG9mZiB0byB0aGUgcmV0cmFuIGNvZGUuCi0JCSAqLwotCQlpZiAoZnJvbV93aGVy
ZSA9PSBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0spIHsKLQkJCS8qLQotCQkJICogU3BlY2lh
bCBob29rIGZvciBoYW5kbGluZyBjb29raWVzcyBkaXNjYXJkZWQKLQkJCSAqIGJ5IHBlZXIgdGhh
dCBjYXJyaWVkIGRhdGEuIFNlbmQgY29va2llLWFjayBvbmx5Ci0JCQkgKiBhbmQgdGhlbiB0aGUg
bmV4dCBjYWxsIHdpdGggZ2V0IHRoZSByZXRyYW4ncy4KLQkJCSAqLwotCQkJKHZvaWQpc2N0cF9t
ZWRfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgYXNvYywgJm51bV9vdXQsICZyZWFzb25fY29kZSwg
MSwKLQkJCQkJCSAgICBmcm9tX3doZXJlLAotCQkJCQkJICAgICZub3csICZub3dfZmlsbGVkLCBm
cmFnX3BvaW50LCBzb19sb2NrZWQpOwotCQkJcmV0dXJuOwotCQl9IGVsc2UgaWYgKGZyb21fd2hl
cmUgIT0gU0NUUF9PVVRQVVRfRlJPTV9IQl9UTVIpIHsKLQkJCS8qIGlmIGl0cyBub3QgZnJvbSBh
IEhCIHRoZW4gZG8gaXQgKi8KLQkJCWZyX2RvbmUgPSAwOwotCQkJcmV0ID0gc2N0cF9jaHVua19y
ZXRyYW5zbWlzc2lvbihpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmbm93LCAmbm93X2ZpbGxl
ZCwgJmZyX2RvbmUsIHNvX2xvY2tlZCk7Ci0JCQlpZiAoZnJfZG9uZSkgewotCQkJCXRvdF9mcnMr
KzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBpdHMgZnJvbSBhbnkgb3RoZXIgcGxh
Y2UsIHdlIGRvbid0IGFsbG93IHJldHJhbgotCQkJICogb3V0cHV0IChvbmx5IGNvbnRyb2wpCi0J
CQkgKi8KLQkJCXJldCA9IDE7Ci0JCX0KLQkJaWYgKHJldCA+IDApIHsKLQkJCS8qIENhbid0IHNl
bmQgYW55bW9yZSAqLwotCQkJLyotCi0JCQkgKiBub3cgbGV0cyBwdXNoIG91dCBjb250cm9sIGJ5
IGNhbGxpbmcgbWVkLWxldmVsCi0JCQkgKiBvdXRwdXQgb25jZS4gdGhpcyBhc3N1cmVzIHRoYXQg
d2UgV0lMTCBzZW5kIEhCJ3MKLQkJCSAqIGlmIHF1ZXVlZCB0b28uCi0JCQkgKi8KLQkJCSh2b2lk
KXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVhc29u
X2NvZGUsIDEsCi0JCQkJCQkgICAgZnJvbV93aGVyZSwKLQkJCQkJCSAgICAmbm93LCAmbm93X2Zp
bGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2VkKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJM
RUQKLQkJCXNjdHBfYXVkaXRpbmcoOCwgaW5wLCBzdGNiLCBOVUxMKTsKLSNlbmRpZgotCQkJc2N0
cF90aW1lcl92YWxpZGF0aW9uKGlucCwgc3RjYiwgYXNvYyk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJ
aWYgKHJldCA8IDApIHsKLQkJCS8qLQotCQkJICogVGhlIGNvdW50IHdhcyBvZmYuLiByZXRyYW4g
aXMgbm90IGhhcHBlbmluZyBzbyBkbwotCQkJICogdGhlIG5vcm1hbCByZXRyYW5zbWlzc2lvbi4K
LQkJCSAqLwotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQkJc2N0cF9hdWRpdGluZyg5
LCBpbnAsIHN0Y2IsIE5VTEwpOwotI2VuZGlmCi0JCQlpZiAocmV0ID09IFNDVFBfUkVUUkFOX0VY
SVQpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZnJvbV93aGVy
ZSA9PSBTQ1RQX09VVFBVVF9GUk9NX1QzKSB7Ci0JCQkvKiBPbmx5IG9uZSB0cmFuc21pc3Npb24g
YWxsb3dlZCBvdXQgb2YgYSB0aW1lb3V0ICovCi0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVE
Ci0JCQlzY3RwX2F1ZGl0aW5nKDEwLCBpbnAsIHN0Y2IsIE5VTEwpOwotI2VuZGlmCi0JCQkvKiBQ
dXNoIG91dCBhbnkgY29udHJvbCAqLwotCQkJKHZvaWQpc2N0cF9tZWRfY2h1bmtfb3V0cHV0KGlu
cCwgc3RjYiwgYXNvYywgJm51bV9vdXQsICZyZWFzb25fY29kZSwgMSwgZnJvbV93aGVyZSwKLQkJ
CQkJCSAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2VkKTsKLQkJCXJl
dHVybjsKLQkJfQotCQlpZiAoKGFzb2MtPmZyX21heF9idXJzdCA+IDApICYmICh0b3RfZnJzID49
IGFzb2MtPmZyX21heF9idXJzdCkpIHsKLQkJCS8qIEhpdCBGUiBidXJzdCBsaW1pdCAqLwotCQkJ
cmV0dXJuOwotCQl9Ci0JCWlmICgobnVtX291dCA9PSAwKSAmJiAocmV0ID09IDApKSB7Ci0JCQkv
KiBObyBtb3JlIHJldHJhbnMgdG8gc2VuZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0jaWZkZWYg
U0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdGluZygxMiwgaW5wLCBzdGNiLCBOVUxM
KTsKLSNlbmRpZgotCS8qIENoZWNrIGZvciBiYWQgZGVzdGluYXRpb25zLCBpZiB0aGV5IGV4aXN0
IG1vdmUgY2h1bmtzIGFyb3VuZC4gKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMs
IHNjdHBfbmV4dCkgewotCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hB
QkxFKSkgewotCQkJLyotCi0JCQkgKiBpZiBwb3NzaWJsZSBtb3ZlIHRoaW5ncyBvZmYgb2YgdGhp
cyBhZGRyZXNzIHdlCi0JCQkgKiBzdGlsbCBtYXkgc2VuZCBiZWxvdyBkdWUgdG8gdGhlIGRvcm1h
bnQgc3RhdGUgYnV0Ci0JCQkgKiB3ZSB0cnkgdG8gZmluZCBhbiBhbHRlcm5hdGUgYWRkcmVzcyB0
byBzZW5kIHRvCi0JCQkgKiBhbmQgaWYgd2UgaGF2ZSBvbmUgd2UgbW92ZSBhbGwgcXVldWVkIGRh
dGEgb24gdGhlCi0JCQkgKiBvdXQgd2hlZWwgdG8gdGhpcyBhbHRlcm5hdGUgYWRkcmVzcy4KLQkJ
CSAqLwotCQkJaWYgKG5ldC0+cmVmX2NvdW50ID4gMSkKLQkJCQlzY3RwX21vdmVfY2h1bmtzX2Zy
b21fbmV0KHN0Y2IsIG5ldCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKi0KLQkJCSAqIGlmICgoYXNvYy0+
c2F0X25ldHdvcmspIHx8IChuZXQtPmFkZHJfaXNfbG9jYWwpKQotCQkJICogeyBidXJzdF9saW1p
dCA9IGFzb2MtPm1heF9idXJzdCAqCi0JCQkgKiBTQ1RQX1NBVF9ORVRXT1JLX0JVUlNUX0lOQ1I7
IH0KLQkJCSAqLwotCQkJaWYgKGFzb2MtPm1heF9idXJzdCA+IDApIHsKLQkJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KSkgewotCQkJCQlpZiAoKG5l
dC0+ZmxpZ2h0X3NpemUgKyAoYXNvYy0+bWF4X2J1cnN0ICogbmV0LT5tdHUpKSA8IG5ldC0+Y3du
ZCkgewotCQkJCQkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4gaW4g
dGhlIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgKi8KLQkJCQkJCWFzb2MtPmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dChzdGNiLCBuZXQsIGFzb2MtPm1heF9idXJz
dCk7Ci0JCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MT0dfTUFYQlVSU1RfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9sb2dfbWF4YnVyc3Qoc3RjYiwg
bmV0LCAwLCBhc29jLT5tYXhfYnVyc3QsIFNDVFBfTUFYX0JVUlNUX0FQUExJRUQpOwotCQkJCQkJ
fQotCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbWF4YnVyc3RxdWV1ZWQpOwotCQkJCQl9Ci0J
CQkJCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChuZXQt
PmZsaWdodF9zaXplID09IDApIHsKLQkJCQkJCS8qIFNob3VsZCBiZSBkZWNheWluZyB0aGUgY3du
ZCBoZXJlICovCi0JCQkJCQk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQotCX0KLQlidXJz
dF9jbnQgPSAwOwotCWRvIHsKLQkJZXJyb3IgPSBzY3RwX21lZF9jaHVua19vdXRwdXQoaW5wLCBz
dGNiLCBhc29jLCAmbnVtX291dCwKLQkJCQkJICAgICAgJnJlYXNvbl9jb2RlLCAwLCBmcm9tX3do
ZXJlLAotCQkJCQkgICAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2Vk
KTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkVycm9y
ICVkIHdhcyByZXR1cm5lZCBmcm9tIG1lZC1jLW9wXG4iLCBlcnJvcik7Ci0JCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfTUFYQlVSU1RfRU5BQkxF
KSB7Ci0JCQkJc2N0cF9sb2dfbWF4YnVyc3Qoc3RjYiwgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlv
biwgZXJyb3IsIGJ1cnN0X2NudCwgU0NUUF9NQVhfQlVSU1RfRVJST1JfU1RPUCk7Ci0JCQl9Ci0J
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBOVUxMLCBlcnJvciwgU0NU
UF9TRU5EX05PV19DT01QTEVURVMpOwotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVMTCwgMHhk
ZWFkYmVlZiwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0K
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJtLWMtbyBwdXQgb3V0ICVkXG4iLCBudW1f
b3V0KTsKLQotCQl0b3Rfb3V0ICs9IG51bV9vdXQ7Ci0JCWJ1cnN0X2NudCsrOwotCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5B
QkxFKSB7Ci0JCQlzY3RwX2xvZ19jd25kKHN0Y2IsIE5VTEwsIG51bV9vdXQsIFNDVFBfU0VORF9O
T1dfQ09NUExFVEVTKTsKLQkJCWlmIChudW1fb3V0ID09IDApIHsKLQkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIE5VTEwsIHJlYXNvbl9jb2RlLCBTQ1RQX1NFTkRfTk9XX0NPTVBMRVRFUyk7Ci0JCQl9
Ci0JCX0KLQkJaWYgKG5hZ2xlX29uKSB7Ci0JCQkvKgotCQkJICogV2hlbiB0aGUgTmFnbGUgYWxn
b3JpdGhtIGlzIHVzZWQsIGxvb2sgYXQgaG93IG11Y2gKLQkJCSAqIGlzIHVuc2VudCwgdGhlbiBp
ZiBpdHMgc21hbGxlciB0aGFuIGFuIE1UVSBhbmQgd2UKLQkJCSAqIGhhdmUgZGF0YSBpbiBmbGln
aHQgd2Ugc3RvcCwgZXhjZXB0IGlmIHdlIGFyZQotCQkJICogaGFuZGxpbmcgYSBmcmFnbWVudGVk
IHVzZXIgbWVzc2FnZS4KLQkJCSAqLwotCQkJdW5fc2VudCA9IHN0Y2ItPmFzb2MudG90YWxfb3V0
cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsKLQkJCWlmICgodW5fc2Vu
dCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSAm
JgotCQkJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApKSB7IAotLyoJJiYJCSAgICAg
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKSkpIHsq
LwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJv
bF9zZW5kX3F1ZXVlKSAmJgotCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYm
Ci0JCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNvX2xvY2tlZCkgPT0gMCkg
ewotCQkJLyogTm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgo
c3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0KSA8PSAwKSB7Ci0JCQkvKiBOb3RoaW5nIGxlZnQgdG8gc2VuZCAqLwotCQkJYnJlYWs7Ci0J
CX0KLQl9IHdoaWxlIChudW1fb3V0ICYmCi0JICAgICAgICAgKChhc29jLT5tYXhfYnVyc3QgPT0g
MCkgfHwKLQkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3Qp
IHx8Ci0JCSAgKGJ1cnN0X2NudCA8IGFzb2MtPm1heF9idXJzdCkpKTsKLQotCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpID09IDApIHsKLQkJaWYgKChh
c29jLT5tYXhfYnVyc3QgPiAwKSAmJiAoYnVyc3RfY250ID49IGFzb2MtPm1heF9idXJzdCkpIHsK
LQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsKLQkJCWFzb2MtPmJ1cnN0
X2xpbWl0X2FwcGxpZWQgPSAxOwotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX21heGJ1
cnN0KHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24sIDAsIGJ1cnN0X2NudCwgU0NUUF9N
QVhfQlVSU1RfQVBQTElFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhc29jLT5idXJzdF9saW1p
dF9hcHBsaWVkID0gMDsKLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2N3bmQo
c3RjYiwgTlVMTCwgdG90X291dCwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOwotCX0KLQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIk9rLCB3ZSBoYXZlIHB1dCBvdXQgJWQgY2h1bmtzXG4i
LAotCQl0b3Rfb3V0KTsKLQotCS8qLQotCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBj
b250cm9sIGNodW5rIGNoYWluIGlmIGEgRUNORSBpcyBvbgotCSAqIGl0LiBJdCBtdXN0IGJlIG1h
cmtlZCBhcyBVTlNFTlQgYWdhaW4gc28gbmV4dCBjYWxsIHdpbGwgY29udGludWUKLQkgKiB0byBz
ZW5kIGl0IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldCBhIENXUiwgdG8gcmVtb3ZlIGl0Lgot
CSAqLwotCWlmIChzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpCi0JCXNjdHBfZml4X2Vjbl9l
Y2hvKGFzb2MpOwotCi0JaWYgKHN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCkgewotCQlpZiAoc2N0
cF9zZW5kX3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwgc29fbG9ja2VkKSA9PSAw
KSAgewotCQkJZ290byBkb19pdF9hZ2FpbjsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLQotaW50
Ci1zY3RwX291dHB1dCgKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotI2lmIGRlZmluZWQoX19Q
YW5kYV9fKQotCXBha2hhbmRsZV90eXBlIG0sCi0jZWxzZQotCXN0cnVjdCBtYnVmICptLAotI2Vu
ZGlmCi0Jc3RydWN0IHNvY2thZGRyICphZGRyLAotI2lmIGRlZmluZWQoX19QYW5kYV9fKQotCXBh
a2hhbmRsZV90eXBlIGNvbnRyb2wsCi0jZWxzZQotCXN0cnVjdCBtYnVmICpjb250cm9sLAotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAw
MDAwCi0Jc3RydWN0IHRocmVhZCAqcCwKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0JUEtU
SFJFQUQgcCwKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc3RydWN0IHByb2MgKnAg
U0NUUF9VTlVTRUQsCi0jZWxzZQotCXN0cnVjdCBwcm9jICpwLAotI2VuZGlmCi0jZW5kaWYKLQlp
bnQgZmxhZ3MpCi17Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRf
UEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOwot
CQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCi0JaWYgKGlucC0+c2N0cF9zb2NrZXQgPT0gTlVMTCkg
ewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlyZXR1cm4g
KHNjdHBfc29zZW5kKGlucC0+c2N0cF9zb2NrZXQsCi0JCQkgICAgYWRkciwKLQkJCSAgICAoc3Ry
dWN0IHVpbyAqKU5VTEwsCi0JCQkgICAgbSwKLQkJCSAgICBjb250cm9sLAotI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKLQkJCSAgICBmbGFncwotI2Vsc2UKLQkJ
CSAgICBmbGFncywgcAotI2VuZGlmCi0JCQkpKTsKLX0KLQotdm9pZAotc2VuZF9mb3J3YXJkX3Rz
bihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YykKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphdCwgKnRwMSwgKmxhc3Q7Ci0J
c3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZHRzbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJz
ZXEgKnN0cnNlcTsKLQlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHJzZXFfbTsKLQl1aW50MzJf
dCBhZHZhbmNlX3BlZXJfYWNrX3BvaW50OwotCXVuc2lnbmVkIGludCBjbnRfb2Zfc3BhY2UsIGks
IG92aDsKLQl1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkOwotCXVuc2lnbmVkIGludCBjbnRfb2Zf
c2tpcHBlZCA9IDA7Ci0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQlUQUlMUV9GT1JF
QUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChj
aGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgewotCQkJLyogbWFy
ayBpdCB0byB1bnNlbnQgKi8KLQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwot
CQkJY2hrLT5zbmRfY291bnQgPSAwOwotCQkJLyogRG8gd2UgY29ycmVjdCBpdHMgb3V0cHV0IGxv
Y2F0aW9uPyAqLwotCQkJaWYgKGNoay0+d2hvVG8pIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2Fk
ZHIoY2hrLT53aG9Ubyk7Ci0JCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0JCQl9Ci0JCQlnb3RvIHNj
dHBfZmlsbF9pbl9yZXN0OwotCQl9Ci0JfQotCS8qIE9rIGlmIHdlIHJlYWNoIGhlcmUgd2UgbXVz
dCBidWlsZCBvbmUgKi8KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKLQlpZiAoY2hr
ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlhc29jLT5md2RfdHNuX2NudCsrOwotCWNoay0+
Y29weV9ieV9yZWYgPSAwOwotCS8qIAotCSAqIFdlIGRvbid0IGRvIHRoZSBvbGQgdGhpbmcgaGVy
ZSBzaW5jZQotCSAqIHRoaXMgaXMgdXNlZCBub3QgZm9yIG9uLXdpcmUgYnV0IHRvCi0JICogdGVs
bCBpZiB3ZSBhcmUgc2VuZGluZyBhIGZ3ZC10c24gYnkKLQkgKiB0aGUgc3RhY2sgZHVyaW5nIG91
dHB1dC4gQW5kIGlmIGl0cwotCSAqIGEgSUZPUldBUkQgb3IgYSBGT1JXQVJEIGl0IGlzIGEgZndk
LXRzbi4KLQkgKi8KLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfRk9SV0FSRF9DVU1fVFNO
OwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOwotCWNoay0+ZmxhZ3MgPSAw
OwotCWNoay0+YXNvYyA9IGFzb2M7Ci0JY2hrLT53aG9UbyA9IE5VTEw7Ci0JY2hrLT5kYXRhID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7
Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNo
aywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9SRVNWX1VG
KGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNv
Yy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JYXNvYy0+Y3RybF9xdWV1
ZV9jbnQrKzsKLXNjdHBfZmlsbF9pbl9yZXN0OgotCS8qLQotCSAqIEhlcmUgd2UgZ28gdGhyb3Vn
aCBhbmQgZmlsbCBvdXQgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoCi0JICogc3RyZWFtL3NlcSBv
ZiB0aGUgb25lcyB3ZSBza2lwLgotCSAqLwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gMDsK
LQlUQUlMUV9GT1JFQUNIKGF0LCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlm
ICgoYXQtPnNlbnQgIT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSAmJgotCQkgICAgKGF0LT5zZW50
ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7Ci0JCQkvKiBubyBtb3JlIHRvIGxvb2sgYXQg
Ki8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghYXNvYy0+aWRhdGFfc3VwcG9ydGVkICYmIChhdC0+
cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkpIHsKLQkJCS8qIFdlIGRv
bid0IHJlcG9ydCB0aGVzZSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJY250X29mX3NraXBwZWQr
KzsKLQl9Ci0JaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgewotCQlzcGFjZV9uZWVkZWQgPSAo
c2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCi0JCSAgICAgICAgICAgICAg
ICAoY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCkpKTsKLQl9
IGVsc2UgewotCQlzcGFjZV9uZWVkZWQgPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNu
X2NodW5rKSArCi0JCSAgICAgICAgICAgICAgICAoY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3Ryc2VxKSkpOwotCX0KLQljbnRfb2Zfc3BhY2UgPSAodW5zaWduZWQgaW50KU1f
VFJBSUxJTkdTUEFDRShjaGstPmRhdGEpOwotCi0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQlvdmggPSBTQ1RQX01JTl9PVkVSSEVB
RDsKLQl9IGVsc2UgewotCQlvdmggPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQl9Ci0JaWYgKGNu
dF9vZl9zcGFjZSA+IChhc29jLT5zbWFsbGVzdF9tdHUgLSBvdmgpKSB7Ci0JCS8qIHRyaW0gdG8g
YSBtdHUgc2l6ZSAqLwotCQljbnRfb2Zfc3BhY2UgPSBhc29jLT5zbWFsbGVzdF9tdHUgLSBvdmg7
Ci0JfQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xP
R19UUllfQURWQU5DRSkgewotCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCi0J
CQkgICAgICAgMHhmZiwgMCwgY250X29mX3NraXBwZWQsCi0JCQkgICAgICAgYXNvYy0+YWR2YW5j
ZWRfcGVlcl9hY2tfcG9pbnQpOwotCX0KLQlhZHZhbmNlX3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+
YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7Ci0JaWYgKGNudF9vZl9zcGFjZSA8IHNwYWNlX25lZWRl
ZCkgewotCQkvKi0KLQkJICogb2sgd2UgbXVzdCB0cmltIGRvd24gdGhlIGNodW5rIGJ5IGxvd2Vy
aW5nIHRoZQotCQkgKiBhZHZhbmNlIHBlZXIgYWNrIHBvaW50LgotCQkgKi8KLQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1RSWV9BRFZBTkNFKSB7
Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCi0JCQkJICAgICAgIDB4ZmYs
IDB4ZmYsIGNudF9vZl9zcGFjZSwKLQkJCQkgICAgICAgc3BhY2VfbmVlZGVkKTsKLQkJfQotCQlj
bnRfb2Zfc2tpcHBlZCA9IGNudF9vZl9zcGFjZSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJk
X3Rzbl9jaHVuayk7Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJCWNudF9vZl9z
a2lwcGVkIC89IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKLQkJfSBlbHNlIHsKLQkJ
CWNudF9vZl9za2lwcGVkIC89IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpOwotCQl9Ci0JCS8q
LQotCQkgKiBHbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBUU04gdGhhdCB3aWxsIGJlIHRoZSBvbmUK
LQkJICogd2UgcmVwb3J0LgotCQkgKi8KLQkJYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VudF9x
dWV1ZSk7Ci0JCWlmIChhdCAhPSBOVUxMKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgY250X29mX3Nr
aXBwZWQ7IGkrKykgewotCQkJCXRwMSA9IFRBSUxRX05FWFQoYXQsIHNjdHBfbmV4dCk7Ci0JCQkJ
aWYgKHRwMSA9PSBOVUxMKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlhdCA9IHRwMTsKLQkJ
CX0KLQkJfQotCQlpZiAoYXQgJiYgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKLQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RT
Tl9DSEVDSywKLQkJCQkgICAgICAgMHhmZiwgY250X29mX3NraXBwZWQsIGF0LT5yZWMuZGF0YS50
c24sCi0JCQkJICAgICAgIGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50KTsKLQkJfQotCQls
YXN0ID0gYXQ7Ci0JCS8qLQotCQkgKiBsYXN0IG5vdyBwb2ludHMgdG8gbGFzdCBvbmUgSSBjYW4g
cmVwb3J0LCB1cGRhdGUKLQkJICogcGVlciBhY2sgcG9pbnQKLQkJICovCi0JCWlmIChsYXN0KSB7
Ci0JCQlhZHZhbmNlX3BlZXJfYWNrX3BvaW50ID0gbGFzdC0+cmVjLmRhdGEudHNuOwotCQl9Ci0J
CWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJCXNwYWNlX25lZWRlZCA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykgKwotCQkJICAgICAgICAgICAgICAgY250X29m
X3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCk7Ci0JCX0gZWxzZSB7Ci0J
CQlzcGFjZV9uZWVkZWQgPSBzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspICsK
LQkJCSAgICAgICAgICAgICAgIGNudF9vZl9za2lwcGVkICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0
cnNlcSk7Ci0JCX0KLQl9Ci0JY2hrLT5zZW5kX3NpemUgPSBzcGFjZV9uZWVkZWQ7Ci0JLyogU2V0
dXAgdGhlIGNodW5rICovCi0JZndkdHNuID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2Zv
cndhcmRfdHNuX2NodW5rICopOwotCWZ3ZHRzbi0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hr
LT5zZW5kX3NpemUpOwotCWZ3ZHRzbi0+Y2guY2h1bmtfZmxhZ3MgPSAwOwotCWlmIChhc29jLT5p
ZGF0YV9zdXBwb3J0ZWQpIHsKLQkJZndkdHNuLT5jaC5jaHVua190eXBlID0gU0NUUF9JRk9SV0FS
RF9DVU1fVFNOOwotCX0gZWxzZSB7Ci0JCWZ3ZHRzbi0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfRk9S
V0FSRF9DVU1fVFNOOwotCX0KLQlmd2R0c24tPm5ld19jdW11bGF0aXZlX3RzbiA9IGh0b25sKGFk
dmFuY2VfcGVlcl9hY2tfcG9pbnQpOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5z
ZW5kX3NpemU7Ci0JZndkdHNuKys7Ci0JLyotCi0JICogTW92ZSBwb2ludGVyIHRvIGFmdGVyIHRo
ZSBmd2R0c24gYW5kIHRyYW5zZmVyIHRvIHRoZQotCSAqIHN0cnNlcSBwb2ludGVyLgotCSAqLwot
CWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJc3Ryc2VxX20gPSAoc3RydWN0IHNjdHBf
c3Ryc2VxX21pZCAqKWZ3ZHRzbjsKLQkJc3Ryc2VxID0gTlVMTDsKLQl9IGVsc2UgewotCQlzdHJz
ZXEgPSAoc3RydWN0IHNjdHBfc3Ryc2VxICopZndkdHNuOwotCQlzdHJzZXFfbSA9IE5VTEw7Ci0J
fQotCS8qLQotCSAqIE5vdyBwb3B1bGF0ZSB0aGUgc3Ryc2VxIGxpc3QuIFRoaXMgaXMgZG9uZSBi
bGluZGx5Ci0JICogd2l0aG91dCBwdWxsaW5nIG91dCBkdXBsaWNhdGUgc3RyZWFtIGluZm8uIFRo
aXMgaXMKLQkgKiBpbmVmZmljZW50IGJ1dCB3b24ndCBoYXJtIHRoZSBwcm9jZXNzIHNpbmNlIHRo
ZSBwZWVyIHdpbGwKLQkgKiBsb29rIGF0IHRoZXNlIGluIHNlcXVlbmNlIGFuZCB3aWxsIHRodXMg
cmVsZWFzZSBhbnl0aGluZy4KLQkgKiBJdCBjb3VsZCBtZWFuIHdlIGV4Y2VlZCB0aGUgUE1UVSBh
bmQgY2hvcCBvZmYgc29tZSB0aGF0Ci0JICogd2UgY291bGQgaGF2ZSBpbmNsdWRlZC4uIGJ1dCB0
aGlzIGlzIHVubGlrZWx5IChha2EgMTQzMi80Ci0JICogd291bGQgbWVhbiAzMDArIHN0cmVhbSBz
ZXEncyB3b3VsZCBoYXZlIHRvIGJlIHJlcG9ydGVkIGluCi0JICogb25lIEZXRC1UU04uIFdpdGgg
YSBiaXQgb2Ygd29yayB3ZSBjYW4gbGF0ZXIgRklYIHRoaXMgdG8KLQkgKiBvcHRpbWl6ZSBhbmQg
cHVsbCBvdXQgZHVwbGljYXRlcy4uIGJ1dCBpdCBkb2VzIGFkZCBtb3JlCi0JICogb3ZlcmhlYWQu
IFNvIGZvciBub3cuLi4gbm90IQotCSAqLwotCWkgPSAwOwotCVRBSUxRX0ZPUkVBQ0goYXQsICZh
c29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGkgPj0gY250X29mX3NraXBwZWQp
IHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghYXNvYy0+aWRhdGFfc3VwcG9ydGVkICYmIChhdC0+
cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkpIHsKLQkJCS8qIFdlIGRv
bid0IHJlcG9ydCB0aGVzZSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGF0LT5yZWMuZGF0
YS50c24gPT0gYWR2YW5jZV9wZWVyX2Fja19wb2ludCkgewotCQkJYXQtPnJlYy5kYXRhLmZ3ZF90
c25fY250ID0gMDsKLQkJfQotCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7Ci0JCQlzdHJz
ZXFfbS0+c2lkID0gaHRvbnMoYXQtPnJlYy5kYXRhLnNpZCk7Ci0JCQlpZiAoYXQtPnJlYy5kYXRh
LnJjdl9mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKLQkJCQlzdHJzZXFfbS0+ZmxhZ3Mg
PSBodG9ucyhQUl9TQ1RQX1VOT1JERVJFRF9GTEFHKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Ryc2Vx
X20tPmZsYWdzID0gMDsKLQkJCX0KLQkJCXN0cnNlcV9tLT5taWQgPSBodG9ubChhdC0+cmVjLmRh
dGEubWlkKTsKLQkJCXN0cnNlcV9tKys7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJzZXEtPnNpZCA9IGh0
b25zKGF0LT5yZWMuZGF0YS5zaWQpOwotCQkJc3Ryc2VxLT5zc24gPSBodG9ucygodWludDE2X3Qp
YXQtPnJlYy5kYXRhLm1pZCk7Ci0JCQlzdHJzZXErKzsKLQkJfQotCQlpKys7Ci0JfQotCXJldHVy
bjsKLX0KLQotdm9pZAotc2N0cF9zZW5kX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQg
c29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0JLyotCi0JICogUXVldWUg
dXAgYSBTQUNLIG9yIE5SLVNBQ0sgaW4gdGhlIGNvbnRyb2wgcXVldWUuCi0JICogV2UgbXVzdCBm
aXJzdCBjaGVjayB0byBzZWUgaWYgYSBTQUNLIG9yIE5SLVNBQ0sgaXMKLQkgKiBzb21laG93IG9u
IHRoZSBjb250cm9sIHF1ZXVlLgotCSAqIElmIHNvLCB3ZSB3aWxsIHRha2UgYW5kIGFuZCByZW1v
dmUgdGhlIG9sZCBvbmUuCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0J
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqYV9jaGs7Ci0Jc3RydWN0IHNjdHBfc2Fja19j
aHVuayAqc2FjazsKLQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICpucl9zYWNrOwotCXN0cnVj
dCBzY3RwX2dhcF9hY2tfYmxvY2sgKmdhcF9kZXNjcmlwdG9yOwotCWNvbnN0IHN0cnVjdCBzYWNr
X3RyYWNrICpzZWxlY3RvcjsKLQlpbnQgbWVyZ2VhYmxlID0gMDsKLQlpbnQgb2Zmc2V0OwotCWNh
ZGRyX3QgbGltaXQ7Ci0JdWludDMyX3QgKmR1cDsKLQlpbnQgbGltaXRfcmVhY2hlZCA9IDA7Ci0J
dW5zaWduZWQgaW50IGksIHNpeiwgajsKLQl1bnNpZ25lZCBpbnQgbnVtX2dhcF9ibG9ja3MgPSAw
LCBudW1fbnJfZ2FwX2Jsb2NrcyA9IDAsIHNwYWNlOwotCWludCBudW1fZHVwcyA9IDA7Ci0JaW50
IHNwYWNlX3JlcTsKLQl1aW50MzJfdCBoaWdoZXN0X3RzbjsKLQl1aW50OF90IGZsYWdzOwotCXVp
bnQ4X3QgdHlwZTsKLQl1aW50OF90IHRzbl9tYXA7Ci0KLQlpZiAoc3RjYi0+YXNvYy5ucnNhY2tf
c3VwcG9ydGVkID09IDEpIHsKLQkJdHlwZSA9IFNDVFBfTlJfU0VMRUNUSVZFX0FDSzsKLQl9IGVs
c2UgewotCQl0eXBlID0gU0NUUF9TRUxFQ1RJVkVfQUNLOwotCX0KLQlhX2NoayA9IE5VTEw7Ci0J
YXNvYyA9ICZzdGNiLT5hc29jOwotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWlmIChh
c29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCS8qIEhtbSB3ZSBuZXZlciBy
ZWNlaXZlZCBhbnl0aGluZyAqLwotCQlyZXR1cm47Ci0JfQotCXNjdHBfc2xpZGVfbWFwcGluZ19h
cnJheXMoc3RjYik7Ci0Jc2N0cF9zZXRfcnduZChzdGNiLCBhc29jKTsKLQlUQUlMUV9GT1JFQUNI
KGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSB0eXBlKSB7Ci0JCQkvKiBIbW0sIGZvdW5kIGEgc2FjayBhbHJl
YWR5IG9uIHF1ZXVlLCByZW1vdmUgaXQgKi8KLQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29udHJv
bF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlhc29jLT5jdHJsX3F1ZXVlX2NudC0t
OwotCQkJYV9jaGsgPSBjaGs7Ci0JCQlpZiAoYV9jaGstPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJl
ZW0oYV9jaGstPmRhdGEpOwotCQkJCWFfY2hrLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJCWlmIChh
X2Noay0+d2hvVG8pIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoYV9jaGstPndob1RvKTsK
LQkJCQlhX2Noay0+d2hvVG8gPSBOVUxMOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYg
KGFfY2hrID09IE5VTEwpIHsKLQkJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGFfY2hrKTsKLQkJ
aWYgKGFfY2hrID09IE5VTEwpIHsKLQkJCS8qIE5vIG1lbW9yeSBzbyB3ZSBkcm9wIHRoZSBpZGVh
LCBhbmQgc2V0IGEgdGltZXIgKi8KLQkJCWlmIChzdGNiLT5hc29jLmRlbGF5ZWRfYWNrKSB7Ci0J
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLAotCQkJCSAgICAgICAgICAg
ICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAotCQkJCSAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ18zKTsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFND
VFBfVElNRVJfVFlQRV9SRUNWLAotCQkJCSAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsK
LQkJCX0gZWxzZSB7Ci0JCQkJc3RjYi0+YXNvYy5zZW5kX3NhY2sgPSAxOwotCQkJfQotCQkJcmV0
dXJuOwotCQl9Ci0JCWFfY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWFfY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPSB0eXBlOwotCQlhX2Noay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOwot
CX0KLQkvKiBDbGVhciBvdXIgcGt0IGNvdW50cyAqLwotCWFzb2MtPmRhdGFfcGt0c19zZWVuID0g
MDsKLQotCWFfY2hrLT5mbGFncyA9IDA7Ci0JYV9jaGstPmFzb2MgPSBhc29jOwotCWFfY2hrLT5z
bmRfY291bnQgPSAwOwotCWFfY2hrLT5zZW5kX3NpemUgPSAwOwkvKiBmaWxsIGluIGxhdGVyICov
Ci0JYV9jaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQlhX2Noay0+d2hvVG8gPSBO
VUxMOwotCi0JaWYgKCEoYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20tPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfUkVBQ0hBQkxFKSkgewotCQkvKi0KLQkJICogT2ssIHRoZSBkZXN0aW5hdGlvbiBm
b3IgdGhlIFNBQ0sgaXMgdW5yZWFjaGFibGUsIGxldHMgc2VlIGlmCi0JCSAqIHdlIGNhbiBzZWxl
Y3QgYW4gYWx0ZXJuYXRlIHRvIGFzb2MtPmxhc3RfZGF0YV9jaHVua19mcm9tCi0JCSAqLwotCQlh
X2Noay0+d2hvVG8gPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhc29jLT5sYXN0X2Rh
dGFfY2h1bmtfZnJvbSwgMCk7Ci0JCWlmIChhX2Noay0+d2hvVG8gPT0gTlVMTCkgewotCQkJLyog
Tm9wZSwgbm8gYWx0ZXJuYXRlICovCi0JCQlhX2Noay0+d2hvVG8gPSBhc29jLT5sYXN0X2RhdGFf
Y2h1bmtfZnJvbTsKLQkJfQotCX0gZWxzZSB7Ci0JCWFfY2hrLT53aG9UbyA9IGFzb2MtPmxhc3Rf
ZGF0YV9jaHVua19mcm9tOwotCX0KLQlpZiAoYV9jaGstPndob1RvKSB7Ci0JCWF0b21pY19hZGRf
aW50KCZhX2Noay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JfQotCWlmIChTQ1RQX1RTTl9HVChh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJf
bWFwKSkgewotCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7Ci0J
fSBlbHNlIHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
OwotCX0KLQlpZiAoaGlnaGVzdF90c24gPT0gYXNvYy0+Y3VtdWxhdGl2ZV90c24pIHsKLQkJLyog
bm8gZ2FwcyAqLwotCQlpZiAodHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9BQ0spIHsKLQkJCXNwYWNl
X3JlcSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rKTsKLQkJfSBlbHNlIHsKLQkJCXNw
YWNlX3JlcSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKTsKLQkJfQotCX0gZWxz
ZSB7Ci0JCS8qIGdhcHMgZ2V0IGEgY2x1c3RlciAqLwotCQlzcGFjZV9yZXEgPSBNQ0xCWVRFUzsK
LQl9Ci0JLyogT2sgbm93IGxldHMgZm9ybXVsYXRlIGEgTUJVRiB3aXRoIG91ciBzYWNrICovCi0J
YV9jaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc3BhY2VfcmVxLCAwLCBNX05PV0FJ
VCwgMSwgTVRfREFUQSk7Ci0JaWYgKChhX2Noay0+ZGF0YSA9PSBOVUxMKSB8fAotCSAgICAoYV9j
aGstPndob1RvID09IE5VTEwpKSB7Ci0JCS8qIHJhdHMsIG5vIG1idWYgbWVtb3J5ICovCi0JCWlm
IChhX2Noay0+ZGF0YSkgewotCQkJLyogd2FzIGEgcHJvYmxlbSB3aXRoIHRoZSBkZXN0aW5hdGlv
biAqLwotCQkJc2N0cF9tX2ZyZWVtKGFfY2hrLT5kYXRhKTsKLQkJCWFfY2hrLT5kYXRhID0gTlVM
TDsKLQkJfQotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBhX2Noaywgc29fbG9ja2VkKTsKLQkJ
Lyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCi0JCWlmIChzdGNiLT5hc29jLmRlbGF5ZWRfYWNr
KSB7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0JCQkgICAgICAg
ICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCwKLQkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ180KTsKLQkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0JCQkgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7
Ci0JCX0gZWxzZSB7Ci0JCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7Ci0JCX0KLQkJcmV0dXJu
OwotCX0KLQkvKiBvaywgbGV0cyBnbyB0aHJvdWdoIGFuZCBmaWxsIGl0IGluICovCi0JU0NUUF9C
VUZfUkVTVl9VRihhX2Noay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCXNwYWNlID0gKHVu
c2lnbmVkIGludClNX1RSQUlMSU5HU1BBQ0UoYV9jaGstPmRhdGEpOwotCWlmIChzcGFjZSA+IChh
X2Noay0+d2hvVG8tPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkgewotCQlzcGFjZSA9IChhX2No
ay0+d2hvVG8tPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEKTsKLQl9Ci0JbGltaXQgPSBtdG9kKGFf
Y2hrLT5kYXRhLCBjYWRkcl90KTsKLQlsaW1pdCArPSBzcGFjZTsKLQotCWZsYWdzID0gMDsKLQot
CWlmICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgICAgU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2NtdF91c2VfZGFjKSkgewotCQkvKi0KLQkJICogQ01UIERBQyBhbGdvcml0aG06IElm
IDIgKGkuZS4sIDB4MTApIHBhY2tldHMgaGF2ZSBiZWVuCi0JCSAqIHJlY2VpdmVkLCB0aGVuIHNl
dCBoaWdoIGJpdCB0byAxLCBlbHNlIDAuIFJlc2V0Ci0JCSAqIHBrdHNfcmN2ZC4KLQkJICovCi0J
CWZsYWdzIHw9IChhc29jLT5jbXRfZGFjX3BrdHNfcmN2ZCA8PCA2KTsKLQkJYXNvYy0+Y210X2Rh
Y19wa3RzX3JjdmQgPSAwOwotCX0KLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCXN0Y2It
PmFzb2MuY3VtYWNrX2xvZ3NudFtzdGNiLT5hc29jLmN1bWFja19sb2dfYXRzbnRdID0gYXNvYy0+
Y3VtdWxhdGl2ZV90c247Ci0Jc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0c250Kys7Ci0JaWYgKHN0
Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNudCA+PSBTQ1RQX1RTTl9MT0dfU0laRSkgewotCQlzdGNi
LT5hc29jLmN1bWFja19sb2dfYXRzbnQgPSAwOwotCX0KLSNlbmRpZgotCS8qIHJlc2V0IHRoZSBy
ZWFkZXJzIGludGVycHJldGF0aW9uICovCi0Jc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0
ID0gMDsKLQotCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgewotCQlzYWNrID0gbXRv
ZChhX2Noay0+ZGF0YSwgc3RydWN0IHNjdHBfc2Fja19jaHVuayAqKTsKLQkJbnJfc2FjayA9IE5V
TEw7Ci0JCWdhcF9kZXNjcmlwdG9yID0gKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKikoKGNh
ZGRyX3Qpc2FjayArIHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rKSk7Ci0JCWlmIChoaWdo
ZXN0X3RzbiA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsKLQkJCXNpeiA9ICgoKGhp
Z2hlc3RfdHNuIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIDcpIC8gODsK
LQkJfSBlbHNlIHsKLQkJCXNpeiA9ICgoKE1BWF9UU04gLSBoaWdoZXN0X3RzbikgKyAxKSArIGhp
Z2hlc3RfdHNuICsgNykgLyA4OwotCQl9Ci0JfSBlbHNlIHsKLQkJc2FjayA9IE5VTEw7Ci0JCW5y
X3NhY2sgPSBtdG9kKGFfY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICopOwot
CQlnYXBfZGVzY3JpcHRvciA9IChzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrICopKChjYWRkcl90
KW5yX3NhY2sgKyBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuaykpOwotCQlpZiAoYXNv
Yy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24p
IHsKLQkJCXNpeiA9ICgoKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgLSBhc29jLT5tYXBw
aW5nX2FycmF5X2Jhc2VfdHNuKSArIDEpICsgNykgLyA4OwotCQl9IGVsc2UgewotCQkJc2l6ID0g
KCgoTUFYX1RTTiAtIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pICsgMSkgKyBhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbWFwICsgNykgLyA4OwotCQl9Ci0JfQotCi0JaWYgKFNDVFBfVFNO
X0dUKGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sIGFzb2MtPmN1bXVsYXRpdmVfdHNuKSkg
ewotCQlvZmZzZXQgPSAxOwotCX0gZWxzZSB7Ci0JCW9mZnNldCA9IGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24gLSBhc29jLT5jdW11bGF0aXZlX3RzbjsKLQl9Ci0JaWYgKCgodHlwZSA9PSBT
Q1RQX1NFTEVDVElWRV9BQ0spICYmCi0JICAgICBTQ1RQX1RTTl9HVChoaWdoZXN0X3RzbiwgYXNv
Yy0+Y3VtdWxhdGl2ZV90c24pKSB8fAotCSAgICAoKHR5cGUgPT0gU0NUUF9OUl9TRUxFQ1RJVkVf
QUNLKSAmJgotCSAgICAgU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwg
YXNvYy0+Y3VtdWxhdGl2ZV90c24pKSkgewotCQkvKiB3ZSBoYXZlIGEgZ2FwIC4uIG1heWJlICov
Ci0JCWZvciAoaSA9IDA7IGkgPCBzaXo7IGkrKykgewotCQkJdHNuX21hcCA9IGFzb2MtPm1hcHBp
bmdfYXJyYXlbaV07Ci0JCQlpZiAodHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9BQ0spIHsKLQkJCQl0
c25fbWFwIHw9IGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbaV07Ci0JCQl9Ci0JCQlpZiAoaSA9PSAw
KSB7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhciBhbGwgYml0cyBjb3JyZXNwb25kaW5nIHRvIFRTTnMK
LQkJCQkgKiBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdW11bGF0aXZlIFRTTi4KLQkJCQkgKi8K
LQkJCQl0c25fbWFwICY9ICh+MFUgPDwgKDEgLSBvZmZzZXQpKTsKLQkJCX0KLQkJCXNlbGVjdG9y
ID0gJnNhY2tfYXJyYXlbdHNuX21hcF07Ci0JCQlpZiAobWVyZ2VhYmxlICYmIHNlbGVjdG9yLT5y
aWdodF9lZGdlKSB7Ci0JCQkJLyoKLQkJCQkgKiBCYWNrdXAsIGxlZnQgYW5kIHJpZ2h0IGVkZ2Vz
IHdlcmUgb2sgdG8KLQkJCQkgKiBtZXJnZS4KLQkJCQkgKi8KLQkJCQludW1fZ2FwX2Jsb2Nrcy0t
OwotCQkJCWdhcF9kZXNjcmlwdG9yLS07Ci0JCQl9Ci0JCQlpZiAoc2VsZWN0b3ItPm51bV9lbnRy
aWVzID09IDApCi0JCQkJbWVyZ2VhYmxlID0gMDsKLQkJCWVsc2UgewotCQkJCWZvciAoaiA9IDA7
IGogPCBzZWxlY3Rvci0+bnVtX2VudHJpZXM7IGorKykgewotCQkJCQlpZiAobWVyZ2VhYmxlICYm
IHNlbGVjdG9yLT5yaWdodF9lZGdlKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogZG8gYSBtZXJnZSBi
eSBOT1Qgc2V0dGluZwotCQkJCQkJICogdGhlIGxlZnQgc2lkZQotCQkJCQkJICovCi0JCQkJCQlt
ZXJnZWFibGUgPSAwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJLyoKLQkJCQkJCSAqIG5vIG1lcmdl
LCBzZXQgdGhlIGxlZnQKLQkJCQkJCSAqIHNpZGUKLQkJCQkJCSAqLwotCQkJCQkJbWVyZ2VhYmxl
ID0gMDsKLQkJCQkJCWdhcF9kZXNjcmlwdG9yLT5zdGFydCA9IGh0b25zKChzZWxlY3Rvci0+Z2Fw
c1tqXS5zdGFydCArIG9mZnNldCkpOwotCQkJCQl9Ci0JCQkJCWdhcF9kZXNjcmlwdG9yLT5lbmQg
PSBodG9ucygoc2VsZWN0b3ItPmdhcHNbal0uZW5kICsgb2Zmc2V0KSk7Ci0JCQkJCW51bV9nYXBf
YmxvY2tzKys7Ci0JCQkJCWdhcF9kZXNjcmlwdG9yKys7Ci0JCQkJCWlmICgoKGNhZGRyX3QpZ2Fw
X2Rlc2NyaXB0b3IgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykpID4gbGltaXQp
IHsKLQkJCQkJCS8qIG5vIG1vcmUgcm9vbSAqLwotCQkJCQkJbGltaXRfcmVhY2hlZCA9IDE7Ci0J
CQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoc2VsZWN0b3ItPmxlZnRfZWRnZSkg
ewotCQkJCQltZXJnZWFibGUgPSAxOwotCQkJCX0KLQkJCX0KLQkJCWlmIChsaW1pdF9yZWFjaGVk
KSB7Ci0JCQkJLyogUmVhY2hlZCB0aGUgbGltaXQgc3RvcCAqLwotCQkJCWJyZWFrOwotCQkJfQot
CQkJb2Zmc2V0ICs9IDg7Ci0JCX0KLQl9Ci0JaWYgKCh0eXBlID09IFNDVFBfTlJfU0VMRUNUSVZF
X0FDSykgJiYKLQkgICAgKGxpbWl0X3JlYWNoZWQgPT0gMCkpIHsKLQotCQltZXJnZWFibGUgPSAw
OwotCi0JCWlmIChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID4gYXNvYy0+bWFwcGlu
Z19hcnJheV9iYXNlX3RzbikgewotCQkJc2l6ID0gKCgoYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X25yX21hcCAtIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pICsgMSkgKyA3KSAvIDg7Ci0J
CX0gZWxzZSB7Ci0JCQlzaXogPSAoKChNQVhfVFNOIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNl
X3RzbikgKyAxKSArIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKyA3KSAvIDg7Ci0J
CX0KLQotCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiwgYXNv
Yy0+Y3VtdWxhdGl2ZV90c24pKSB7Ci0JCQlvZmZzZXQgPSAxOwotCQl9IGVsc2UgewotCQkJb2Zm
c2V0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIGFzb2MtPmN1bXVsYXRpdmVfdHNu
OwotCQl9Ci0JCWlmIChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
LCBhc29jLT5jdW11bGF0aXZlX3RzbikpIHsKLQkJCS8qIHdlIGhhdmUgYSBnYXAgLi4gbWF5YmUg
Ki8KLQkJCWZvciAoaSA9IDA7IGkgPCBzaXo7IGkrKykgewotCQkJCXRzbl9tYXAgPSBhc29jLT5u
cl9tYXBwaW5nX2FycmF5W2ldOwotCQkJCWlmIChpID09IDApIHsKLQkJCQkJLyoKLQkJCQkJICog
Q2xlYXIgYWxsIGJpdHMgY29ycmVzcG9uZGluZyB0byBUU05zCi0JCQkJCSAqIHNtYWxsZXIgb3Ig
ZXF1YWwgdG8gdGhlIGN1bXVsYXRpdmUgVFNOLgotCQkJCQkgKi8KLQkJCQkJdHNuX21hcCAmPSAo
fjBVIDw8ICgxIC0gb2Zmc2V0KSk7Ci0JCQkJfQotCQkJCXNlbGVjdG9yID0gJnNhY2tfYXJyYXlb
dHNuX21hcF07Ci0JCQkJaWYgKG1lcmdlYWJsZSAmJiBzZWxlY3Rvci0+cmlnaHRfZWRnZSkgewot
CQkJCQkvKgotCQkJCQkqIEJhY2t1cCwgbGVmdCBhbmQgcmlnaHQgZWRnZXMgd2VyZSBvayB0bwot
CQkJCQkqIG1lcmdlLgotCQkJCQkqLwotCQkJCQludW1fbnJfZ2FwX2Jsb2Nrcy0tOwotCQkJCQln
YXBfZGVzY3JpcHRvci0tOwotCQkJCX0KLQkJCQlpZiAoc2VsZWN0b3ItPm51bV9lbnRyaWVzID09
IDApCi0JCQkJCW1lcmdlYWJsZSA9IDA7Ci0JCQkJZWxzZSB7Ci0JCQkJCWZvciAoaiA9IDA7IGog
PCBzZWxlY3Rvci0+bnVtX2VudHJpZXM7IGorKykgewotCQkJCQkJaWYgKG1lcmdlYWJsZSAmJiBz
ZWxlY3Rvci0+cmlnaHRfZWRnZSkgewotCQkJCQkJCS8qCi0JCQkJCQkJKiBkbyBhIG1lcmdlIGJ5
IE5PVCBzZXR0aW5nCi0JCQkJCQkJKiB0aGUgbGVmdCBzaWRlCi0JCQkJCQkJKi8KLQkJCQkJCQlt
ZXJnZWFibGUgPSAwOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvKgotCQkJCQkJCSogbm8gbWVy
Z2UsIHNldCB0aGUgbGVmdAotCQkJCQkJCSogc2lkZQotCQkJCQkJCSovCi0JCQkJCQkJbWVyZ2Vh
YmxlID0gMDsKLQkJCQkJCQlnYXBfZGVzY3JpcHRvci0+c3RhcnQgPSBodG9ucygoc2VsZWN0b3It
PmdhcHNbal0uc3RhcnQgKyBvZmZzZXQpKTsKLQkJCQkJCX0KLQkJCQkJCWdhcF9kZXNjcmlwdG9y
LT5lbmQgPSBodG9ucygoc2VsZWN0b3ItPmdhcHNbal0uZW5kICsgb2Zmc2V0KSk7Ci0JCQkJCQlu
dW1fbnJfZ2FwX2Jsb2NrcysrOwotCQkJCQkJZ2FwX2Rlc2NyaXB0b3IrKzsKLQkJCQkJCWlmICgo
KGNhZGRyX3QpZ2FwX2Rlc2NyaXB0b3IgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9j
aykpID4gbGltaXQpIHsKLQkJCQkJCQkvKiBubyBtb3JlIHJvb20gKi8KLQkJCQkJCQlsaW1pdF9y
ZWFjaGVkID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAoc2Vs
ZWN0b3ItPmxlZnRfZWRnZSkgewotCQkJCQkJbWVyZ2VhYmxlID0gMTsKLQkJCQkJfQotCQkJCX0K
LQkJCQlpZiAobGltaXRfcmVhY2hlZCkgewotCQkJCQkvKiBSZWFjaGVkIHRoZSBsaW1pdCBzdG9w
ICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlvZmZzZXQgKz0gODsKLQkJCX0KLQkJfQotCX0K
LQkvKiBub3cgd2UgbXVzdCBhZGQgYW55IGR1cHMgd2UgYXJlIGdvaW5nIHRvIHJlcG9ydC4gKi8K
LQlpZiAoKGxpbWl0X3JlYWNoZWQgPT0gMCkgJiYgKGFzb2MtPm51bWR1cHRzbnMpKSB7Ci0JCWR1
cCA9ICh1aW50MzJfdCAqKSBnYXBfZGVzY3JpcHRvcjsKLQkJZm9yIChpID0gMDsgaSA8IGFzb2Mt
Pm51bWR1cHRzbnM7IGkrKykgewotCQkJKmR1cCA9IGh0b25sKGFzb2MtPmR1cF90c25zW2ldKTsK
LQkJCWR1cCsrOwotCQkJbnVtX2R1cHMrKzsKLQkJCWlmICgoKGNhZGRyX3QpZHVwICsgc2l6ZW9m
KHVpbnQzMl90KSkgPiBsaW1pdCkgewotCQkJCS8qIG5vIG1vcmUgcm9vbSAqLwotCQkJCWJyZWFr
OwotCQkJfQotCQl9Ci0JCWFzb2MtPm51bWR1cHRzbnMgPSAwOwotCX0KLQkvKgotCSAqIG5vdyB0
aGF0IHRoZSBjaHVuayBpcyBwcmVwYXJlZCBxdWV1ZSBpdCB0byB0aGUgY29udHJvbCBjaHVuawot
CSAqIHF1ZXVlLgotCSAqLwotCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgewotCQlh
X2Noay0+c2VuZF9zaXplID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVu
aykgKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX2dhcF9ibG9ja3MgKyBu
dW1fbnJfZ2FwX2Jsb2NrcykgKiBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykgKwot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fZHVwcyAqIHNpemVvZihpbnQzMl90
KSk7Ci0JCVNDVFBfQlVGX0xFTihhX2Noay0+ZGF0YSkgPSBhX2Noay0+c2VuZF9zaXplOwotCQlz
YWNrLT5zYWNrLmN1bV90c25fYWNrID0gaHRvbmwoYXNvYy0+Y3VtdWxhdGl2ZV90c24pOwotCQlz
YWNrLT5zYWNrLmFfcnduZCA9IGh0b25sKGFzb2MtPm15X3J3bmQpOwotCQlzYWNrLT5zYWNrLm51
bV9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fZ2FwX2Jsb2Nrcyk7Ci0JCXNhY2stPnNhY2subnVt
X2R1cF90c25zID0gaHRvbnMobnVtX2R1cHMpOwotCQlzYWNrLT5jaC5jaHVua190eXBlID0gdHlw
ZTsKLQkJc2Fjay0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKLQkJc2Fjay0+Y2guY2h1bmtfbGVu
Z3RoID0gaHRvbnMoYV9jaGstPnNlbmRfc2l6ZSk7Ci0JfSBlbHNlIHsKLQkJYV9jaGstPnNlbmRf
c2l6ZSA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspICsKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV9nYXBfYmxvY2tzICsgbnVtX25yX2dh
cF9ibG9ja3MpICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spICsKLQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2R1cHMgKiBzaXplb2YoaW50MzJfdCkpOwotCQlT
Q1RQX0JVRl9MRU4oYV9jaGstPmRhdGEpID0gYV9jaGstPnNlbmRfc2l6ZTsKLQkJbnJfc2Fjay0+
bnJfc2Fjay5jdW1fdHNuX2FjayA9IGh0b25sKGFzb2MtPmN1bXVsYXRpdmVfdHNuKTsKLQkJbnJf
c2Fjay0+bnJfc2Fjay5hX3J3bmQgPSBodG9ubChhc29jLT5teV9yd25kKTsKLQkJbnJfc2Fjay0+
bnJfc2Fjay5udW1fZ2FwX2Fja19ibGtzID0gaHRvbnMobnVtX2dhcF9ibG9ja3MpOwotCQlucl9z
YWNrLT5ucl9zYWNrLm51bV9ucl9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fbnJfZ2FwX2Jsb2Nr
cyk7Ci0JCW5yX3NhY2stPm5yX3NhY2subnVtX2R1cF90c25zID0gaHRvbnMobnVtX2R1cHMpOwot
CQlucl9zYWNrLT5ucl9zYWNrLnJlc2VydmVkID0gMDsKLQkJbnJfc2Fjay0+Y2guY2h1bmtfdHlw
ZSA9IHR5cGU7Ci0JCW5yX3NhY2stPmNoLmNodW5rX2ZsYWdzID0gZmxhZ3M7Ci0JCW5yX3NhY2st
PmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGFfY2hrLT5zZW5kX3NpemUpOwotCX0KLQlUQUlMUV9J
TlNFUlRfVEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBhX2Noaywgc2N0cF9uZXh0KTsK
LQlhc29jLT5teV9sYXN0X3JlcG9ydGVkX3J3bmQgPSBhc29jLT5teV9yd25kOwotCWFzb2MtPmN0
cmxfcXVldWVfY250Kys7Ci0JYXNvYy0+c2VuZF9zYWNrID0gMDsKLQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kc2Fja3MpOwotCXJldHVybjsKLX0KLQotdm9pZAotc2N0cF9zZW5kX2Fib3J0X3Rj
YihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICpvcGVyciwgaW50IHNvX2xvY2tl
ZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9h
Ym9ydCwgKm0sICptX2xhc3Q7Ci0Jc3RydWN0IG1idWYgKm1fb3V0LCAqbV9lbmQgPSBOVUxMOwot
CXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydDsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5r
ICphdXRoID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JdWludDMyX3QgdnRhZzsK
LQl1aW50MzJfdCBhdXRoX29mZnNldCA9IDA7Ci0JaW50IGVycm9yOwotCXVpbnQxNl90IGNhdXNl
X2xlbiwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbjsKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
CWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5z
Y3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0
Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYKLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsK
LQkvKi0KLQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQgYW5kIHNh
dmUgdGhlIG9mZnNldCBpbnRvCi0JICogdGhlIGNoYWluIGZvciBBVVRICi0JICovCi0JaWYgKHNj
dHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0FCT1JUX0FTU09DSUFUSU9OLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkg
ewotCQltX291dCA9IHNjdHBfYWRkX2F1dGhfY2h1bmsoTlVMTCwgJm1fZW5kLCAmYXV0aCwgJmF1
dGhfb2Zmc2V0LAotCQkJCQkgICAgc3RjYiwgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTik7Ci0JCVND
VFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKLQl9IGVsc2Ug
ewotCQltX291dCA9IE5VTEw7Ci0JfQotCW1fYWJvcnQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURF
Uik7Ci0JaWYgKG1fYWJvcnQgPT0gTlVMTCkgewotCQlpZiAobV9vdXQpIHsKLQkJCXNjdHBfbV9m
cmVlbShtX291dCk7Ci0JCX0KLQkJaWYgKG9wZXJyKSB7Ci0JCQlzY3RwX21fZnJlZW0ob3BlcnIp
OwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JLyogbGluayBpbiBhbnkgZXJyb3IgKi8KLQlTQ1RQX0JV
Rl9ORVhUKG1fYWJvcnQpID0gb3BlcnI7Ci0JY2F1c2VfbGVuID0gMDsKLQltX2xhc3QgPSBOVUxM
OwotCWZvciAobSA9IG9wZXJyOyBtOyBtID0gU0NUUF9CVUZfTkVYVChtKSkgewotCQljYXVzZV9s
ZW4gKz0gKHVpbnQxNl90KVNDVFBfQlVGX0xFTihtKTsKLQkJaWYgKFNDVFBfQlVGX05FWFQobSkg
PT0gTlVMTCkgewotCQkJbV9sYXN0ID0gbTsKLQkJfQotCX0KLQlTQ1RQX0JVRl9MRU4obV9hYm9y
dCkgPSBzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmspOwotCWNodW5rX2xlbiA9ICh1aW50
MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmspICsgY2F1c2VfbGVuOwotCXBhZGRp
bmdfbGVuID0gU0NUUF9TSVpFMzIoY2h1bmtfbGVuKSAtIGNodW5rX2xlbjsKLQlpZiAobV9vdXQg
PT0gTlVMTCkgewotCQkvKiBOTyBBdXRoIGNodW5rIHByZXBlbmRlZCwgc28gcmVzZXJ2ZSBzcGFj
ZSBpbiBmcm9udCAqLwotCQlTQ1RQX0JVRl9SRVNWX1VGKG1fYWJvcnQsIFNDVFBfTUlOX09WRVJI
RUFEKTsKLQkJbV9vdXQgPSBtX2Fib3J0OwotCX0gZWxzZSB7Ci0JCS8qIFB1dCBBVVRIIGNodW5r
IGF0IHRoZSBmcm9udCBvZiB0aGUgY2hhaW4gKi8KLQkJU0NUUF9CVUZfTkVYVChtX2VuZCkgPSBt
X2Fib3J0OwotCX0KLQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJbmV0ID0gc3RjYi0+
YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNlIHsKLQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uOwotCX0KLQkvKiBGaWxsIGluIHRoZSBBQk9SVCBjaHVuayBoZWFkZXIuICovCi0J
YWJvcnQgPSBtdG9kKG1fYWJvcnQsIHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICopOwotCWFib3J0
LT5jaC5jaHVua190eXBlID0gU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjsKLQlpZiAoc3RjYi0+YXNv
Yy5wZWVyX3Z0YWcgPT0gMCkgewotCQkvKiBUaGlzIGhhcHBlbnMgaWZmIHRoZSBhc3NvYyBpcyBp
biBDT09LSUUtV0FJVCBzdGF0ZS4gKi8KLQkJdnRhZyA9IHN0Y2ItPmFzb2MubXlfdnRhZzsKLQkJ
YWJvcnQtPmNoLmNodW5rX2ZsYWdzID0gU0NUUF9IQURfTk9fVENCOwotCX0gZWxzZSB7Ci0JCXZ0
YWcgPSBzdGNiLT5hc29jLnBlZXJfdnRhZzsKLQkJYWJvcnQtPmNoLmNodW5rX2ZsYWdzID0gMDsK
LQl9Ci0JYWJvcnQtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNodW5rX2xlbik7Ci0JLyogQWRk
IHBhZGRpbmcsIGlmIG5lY2Vzc2FyeS4gKi8KLQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCWlm
ICgobV9sYXN0ID09IE5VTEwpIHx8Ci0JCSAgICAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3Qs
IHBhZGRpbmdfbGVuKSA9PSBOVUxMKSkgewotCQkJc2N0cF9tX2ZyZWVtKG1fb3V0KTsKLQkJCXJl
dHVybjsKLQkJfQotCX0KLQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQo
c3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQsIGF1dGhfb2Zmc2V0LCBhdXRo
LCBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwgMSwgMCwgMCwKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwg
c3RjYi0+cnBvcnQsIGh0b25sKHZ0YWcpLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnBvcnQsIE5VTEwsCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzb19sb2NrZWQpKSkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdh
ayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7Ci0JCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7Ci0J
CQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2xvd2xldmVsZXJyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0Y2ItPmFzb2MuaWZwX2hhZF9lbm9i
dWYgPSAwOwotCX0KLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNo
dW5rcyk7Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0
cyAqbmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZWZsZWN0X3Z0YWcpCi17
Ci0JLyogZm9ybXVsYXRlIGFuZCBTRU5EIGEgU0hVVERPV04tQ09NUExFVEUgKi8KLQlzdHJ1Y3Qg
bWJ1ZiAqbV9zaHV0ZG93bl9jb21wOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2No
dW5rICpzaHV0ZG93bl9jb21wbGV0ZTsKLQl1aW50MzJfdCB2dGFnOwotCWludCBlcnJvcjsKLQl1
aW50OF90IGZsYWdzOwotCi0JbV9zaHV0ZG93bl9jb21wID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIp
OwotCWlmIChtX3NodXRkb3duX2NvbXAgPT0gTlVMTCkgewotCQkvKiBubyBtYnVmJ3MgKi8KLQkJ
cmV0dXJuOwotCX0KLQlpZiAocmVmbGVjdF92dGFnKSB7Ci0JCWZsYWdzID0gU0NUUF9IQURfTk9f
VENCOwotCQl2dGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCX0gZWxzZSB7Ci0JCWZsYWdzID0g
MDsKLQkJdnRhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOwotCX0KLQlzaHV0ZG93bl9jb21wbGV0
ZSA9IG10b2QobV9zaHV0ZG93bl9jb21wLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9j
aHVuayAqKTsKLQlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfU0hVVERP
V05fQ09NUExFVEU7Ci0Jc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5rX2ZsYWdzID0gZmxhZ3M7
Ci0Jc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1
Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuaykpOwotCVNDVFBfQlVGX0xFTihtX3NodXRk
b3duX2NvbXApID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rKTsK
LQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwg
c3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ry
dWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV9zaHV0ZG93bl9jb21wLCAwLCBOVUxMLCAwLCAxLCAwLCAwLAot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLT5z
Y3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaHRvbmwodnRhZyksCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU09fTk9UX0xPQ0tFRCkpKSB7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVy
cm9yKTsKLQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCXN0Y2ItPmFzb2MuaWZwX2hhZF9l
bm9idWYgPSAxOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOwotCQl9Ci0J
fSBlbHNlIHsKLQkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7Ci0JfQotCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKLQlyZXR1cm47Ci19Ci0K
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotc3RhdGljIHZvaWQKLXNjdHBfc2VuZF9yZXNwX21z
ZyhzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCB1aW50MzJfdCB2dGFnLAotICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgdHlwZSwgc3RydWN0IG1idWYgKmNhdXNlLAotICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0s
Ci0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQotI2Vs
c2UKLXN0YXRpYyB2b2lkCi1zY3RwX3NlbmRfcmVzcF9tc2coc3RydWN0IHNvY2thZGRyICpzcmMs
IHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRy
ICpzaCwgdWludDMyX3QgdnRhZywKLSAgICAgICAgICAgICAgICAgICB1aW50OF90IHR5cGUsIHN0
cnVjdCBtYnVmICpjYXVzZSwKLSAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQgU0NU
UF9VTlVTRUQsIHVpbnQxNl90IHBvcnQpCi0jZW5kaWYKLXsKLSNpZmRlZiBfX1BhbmRhX18KLQlw
YWtoYW5kbGVfdHlwZSBvX3BhazsKLSNlbHNlCi0Jc3RydWN0IG1idWYgKm9fcGFrOwotI2VuZGlm
Ci0Jc3RydWN0IG1idWYgKm1vdXQ7Ci0Jc3RydWN0IHNjdHBoZHIgKnNob3V0OwotCXN0cnVjdCBz
Y3RwX2NodW5raGRyICpjaDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0J
c3RydWN0IHVkcGhkciAqdWRwOwotCWludCByZXQ7Ci0jZW5kaWYKLQlpbnQgbGVuLCBjYXVzZV9s
ZW4sIHBhZGRpbmdfbGVuOwotI2lmZGVmIElORVQKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChfX1BhbmRhX18pCi0Jc2N0cF9yb3V0ZV90IHJvOwotI2VuZGlmCi0Jc3RydWN0IHNv
Y2thZGRyX2luICpzcmNfc2luLCAqZHN0X3NpbjsKLQlzdHJ1Y3QgaXAgKmlwOwotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmNfc2luNiwgKmRzdF9zaW42Owot
CXN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKLQotCS8qIENvbXB1dGUgdGhlIGxlbmd0aCBv
ZiB0aGUgY2F1c2UgYW5kIGFkZCBmaW5hbCBwYWRkaW5nLiAqLwotCWNhdXNlX2xlbiA9IDA7Ci0J
aWYgKGNhdXNlICE9IE5VTEwpIHsKLQkJc3RydWN0IG1idWYgKm1fYXQsICptX2xhc3QgPSBOVUxM
OwotCi0JCWZvciAobV9hdCA9IGNhdXNlOyBtX2F0OyBtX2F0ID0gU0NUUF9CVUZfTkVYVChtX2F0
KSkgewotCQkJaWYgKFNDVFBfQlVGX05FWFQobV9hdCkgPT0gTlVMTCkKLQkJCQltX2xhc3QgPSBt
X2F0OwotCQkJY2F1c2VfbGVuICs9IFNDVFBfQlVGX0xFTihtX2F0KTsKLQkJfQotCQlwYWRkaW5n
X2xlbiA9IGNhdXNlX2xlbiAlIDQ7Ci0JCWlmIChwYWRkaW5nX2xlbiAhPSAwKSB7Ci0JCQlwYWRk
aW5nX2xlbiA9IDQgLSBwYWRkaW5nX2xlbjsKLQkJfQotCQlpZiAocGFkZGluZ19sZW4gIT0gMCkg
ewotCQkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0LCBwYWRkaW5nX2xlbikgPT0gTlVM
TCkgewotCQkJCXNjdHBfbV9mcmVlbShjYXVzZSk7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0J
fSBlbHNlIHsKLQkJcGFkZGluZ19sZW4gPSAwOwotCX0KLQkvKiBHZXQgYW4gbWJ1ZiBmb3IgdGhl
IGhlYWRlci4gKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2NodW5raGRyKTsKLQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQkJbGVuICs9IHNpemVvZihzdHJ1Y3QgaXApOwotCQlicmVhazsK
LSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJbGVuICs9IHNpemVvZihz
dHJ1Y3QgaXA2X2hkcik7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0J
fQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlpZiAocG9ydCkgewotCQls
ZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9X
TEVPUEFSRCkKLQltb3V0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiArIG1heF9saW5raGRy
LCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0jZWxzZQotCW1vdXQgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2cobGVuICsgU0NUUF9NQVhfTElOS0hEUiwgMSwgTV9OT1dBSVQsIDEsIE1UX0RBVEEp
OwotI2VuZGlmCi0jZWxzZQotCW1vdXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuICsgbWF4
X2xpbmtoZHIsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLSNlbmRpZgotCWlmIChtb3V0ID09
IE5VTEwpIHsKLQkJaWYgKGNhdXNlKSB7Ci0JCQlzY3RwX21fZnJlZW0oY2F1c2UpOwotCQl9Ci0J
CXJldHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9M
RU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQotCVNDVFBfQlVGX1JFU1ZfVUYo
bW91dCwgbWF4X2xpbmtoZHIpOwotI2Vsc2UKLQlTQ1RQX0JVRl9SRVNWX1VGKG1vdXQsIFNDVFBf
TUFYX0xJTktIRFIpOwotI2VuZGlmCi0jZWxzZQotCVNDVFBfQlVGX1JFU1ZfVUYobW91dCwgbWF4
X2xpbmtoZHIpOwotI2VuZGlmCi0JU0NUUF9CVUZfTEVOKG1vdXQpID0gbGVuOwotCVNDVFBfQlVG
X05FWFQobW91dCkgPSBjYXVzZTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCU1fU0VURklC
KG1vdXQsIGZpYm51bSk7Ci0JbW91dC0+bV9wa3RoZHIuZmxvd2lkID0gbWZsb3dpZDsKLQlNX0hB
U0hUWVBFX1NFVChtb3V0LCBtZmxvd3R5cGUpOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWlwID0g
TlVMTDsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JaXA2ID0gTlVMTDsKLSNlbmRpZgotCXN3aXRj
aCAoZHN0LT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlzcmNf
c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNyYzsKLQkJZHN0X3NpbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKilkc3Q7Ci0JCWlwID0gbXRvZChtb3V0LCBzdHJ1Y3QgaXAgKik7Ci0JCWlwLT5p
cF92ID0gSVBWRVJTSU9OOwotCQlpcC0+aXBfaGwgPSAoc2l6ZW9mKHN0cnVjdCBpcCkgPj4gMik7
Ci0JCWlwLT5pcF90b3MgPSAwOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gMTAwMDAwMAotCQlpcC0+aXBfb2ZmID0gaHRvbnMoSVBfREYpOwotI2Vs
c2UKLQkJaXAtPmlwX29mZiA9IElQX0RGOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFdJVEhfQ09O
VkVSVF9JUF9PRkYpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JCWlwLT5pcF9vZmYgPSBJUF9ERjsKLSNlbHNlCi0JCWlwLT5pcF9vZmYgPSBodG9ucyhJ
UF9ERik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpcF9maWxsaWQoaXAp
OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgUkFORE9NX0lQX0lECi0JCWlwLT5pcF9p
ZCA9IGlwX3JhbmRvbWlkKCk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBodG9ucyhpcF9pZCsrKTsK
LSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpcC0+aXBfaWQgPSBodG9u
cyhpcF9pZCsrKTsKLSNlbHNlCi0JCWlwLT5pcF9pZCA9IGlwX2lkKys7Ci0jZW5kaWYKLQkJaXAt
PmlwX3R0bCA9IE1PRFVMRV9HTE9CQUwoaXBfZGVmdHRsKTsKLQkJaWYgKHBvcnQpIHsKLQkJCWlw
LT5pcF9wID0gSVBQUk9UT19VRFA7Ci0JCX0gZWxzZSB7Ci0JCQlpcC0+aXBfcCA9IElQUFJPVE9f
U0NUUDsKLQkJfQotCQlpcC0+aXBfc3JjLnNfYWRkciA9IGRzdF9zaW4tPnNpbl9hZGRyLnNfYWRk
cjsKLQkJaXAtPmlwX2RzdC5zX2FkZHIgPSBzcmNfc2luLT5zaW5fYWRkci5zX2FkZHI7Ci0JCWlw
LT5pcF9zdW0gPSAwOwotCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwKTsKLQkJc2hvdXQgPSAoc3Ry
dWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBsZW4pOwotCQlicmVhazsKLSNlbmRpZgotI2lm
ZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc3JjX3NpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKXNyYzsKLQkJZHN0X3NpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWRzdDsKLQkJ
aXA2ID0gbXRvZChtb3V0LCBzdHJ1Y3QgaXA2X2hkciAqKTsKLQkJaXA2LT5pcDZfZmxvdyA9IGh0
b25sKDB4NjAwMDAwMDApOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCWlmIChWX2lwNl9h
dXRvX2Zsb3dsYWJlbCkgewotCQkJaXA2LT5pcDZfZmxvdyB8PSAoaHRvbmwoaXA2X3JhbmRvbWZs
b3dsYWJlbCgpKSAmIElQVjZfRkxPV0xBQkVMX01BU0spOwotCQl9Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0JCWlwNi0+aXA2X2hsaW0gPSBJUHY2X0hPUF9MSU1JVDsKLSNl
bHNlCi0JCWlwNi0+aXA2X2hsaW0gPSBNT0RVTEVfR0xPQkFMKGlwNl9kZWZobGltKTsKLSNlbmRp
ZgotCQlpZiAocG9ydCkgewotCQkJaXA2LT5pcDZfbnh0ID0gSVBQUk9UT19VRFA7Ci0JCX0gZWxz
ZSB7Ci0JCQlpcDYtPmlwNl9ueHQgPSBJUFBST1RPX1NDVFA7Ci0JCX0KLQkJaXA2LT5pcDZfc3Jj
ID0gZHN0X3NpbjYtPnNpbjZfYWRkcjsKLQkJaXA2LT5pcDZfZHN0ID0gc3JjX3NpbjYtPnNpbjZf
YWRkcjsKLQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKTsKLQkJc2hvdXQgPSAoc3RydWN0
IHNjdHBoZHIgKikoKGNhZGRyX3QpaXA2ICsgbGVuKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZh
dWx0OgotCQlsZW4gPSAwOwotCQlzaG91dCA9IG10b2QobW91dCwgc3RydWN0IHNjdHBoZHIgKik7
Ci0JCWJyZWFrOwotCX0KLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JaWYg
KHBvcnQpIHsKLQkJaWYgKGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5n
X3BvcnQpKSA9PSAwKSB7Ci0JCQlzY3RwX21fZnJlZW0obW91dCk7Ci0JCQlyZXR1cm47Ci0JCX0K
LQkJdWRwID0gKHN0cnVjdCB1ZHBoZHIgKilzaG91dDsKLQkJdWRwLT51aF9zcG9ydCA9IGh0b25z
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKTsKLQkJdWRwLT51aF9k
cG9ydCA9IHBvcnQ7Ci0JCXVkcC0+dWhfc3VtID0gMDsKLQkJdWRwLT51aF91bGVuID0gaHRvbnMo
KHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHVkcGhkcikgKwotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKwotCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlX2xlbiArIHBhZGRpbmdfbGVuKSk7Ci0JCWxl
biArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCXNob3V0ID0gKHN0cnVjdCBzY3RwaGRyICop
KChjYWRkcl90KXNob3V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQl9IGVsc2UgewotCQl1
ZHAgPSBOVUxMOwotCX0KLSNlbmRpZgotCXNob3V0LT5zcmNfcG9ydCA9IHNoLT5kZXN0X3BvcnQ7
Ci0Jc2hvdXQtPmRlc3RfcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQlzaG91dC0+Y2hlY2tzdW0gPSAw
OwotCWlmICh2dGFnKSB7Ci0JCXNob3V0LT52X3RhZyA9IGh0b25sKHZ0YWcpOwotCX0gZWxzZSB7
Ci0JCXNob3V0LT52X3RhZyA9IHNoLT52X3RhZzsKLQl9Ci0JbGVuICs9IHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcik7Ci0JY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2hvdXQg
KyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQljaC0+Y2h1bmtfdHlwZSA9IHR5cGU7Ci0JaWYg
KHZ0YWcpIHsKLQkJY2gtPmNodW5rX2ZsYWdzID0gMDsKLQl9IGVsc2UgewotCQljaC0+Y2h1bmtf
ZmxhZ3MgPSBTQ1RQX0hBRF9OT19UQ0I7Ci0JfQotCWNoLT5jaHVua19sZW5ndGggPSBodG9ucygo
dWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBjYXVzZV9sZW4pKTsKLQls
ZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQlsZW4gKz0gY2F1c2VfbGVuICsg
cGFkZGluZ19sZW47Ci0KLQlpZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7
Ci0JCXNjdHBfbV9mcmVlbShtb3V0KTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0FUVEFDSF9DSEFJ
TihvX3BhaywgbW91dCwgbGVuKTsKLQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYg
SU5FVAotCWNhc2UgQUZfSU5FVDoKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1BhbmRhX18pCi0JCS8qIHphcCB0aGUgc3RhY2sgcG9pbnRlciB0byB0aGUgcm91dGUgKi8KLQkJ
bWVtc2V0KCZybywgMCwgc2l6ZW9mKHNjdHBfcm91dGVfdCkpOwotI2lmIGRlZmluZWQoX19QYW5k
YV9fKQotCQlyby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7Ci0jZW5kaWYKLSNlbmRp
ZgotCQlpZiAocG9ydCkgewotI2lmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoX19GcmVlQlNEX3Zl
cnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAwMDApIHx8IF9fRnJlZUJT
RF92ZXJzaW9uID4gOTAwMDAwKQotCQkJaWYgKFZfdWRwX2Nrc3VtKSB7Ci0JCQkJdWRwLT51aF9z
dW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAt
PnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOwotCQkJfSBlbHNlIHsKLQkJCQl1ZHAtPnVo
X3N1bSA9IDA7Ci0JCQl9Ci0jZWxzZQotCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlw
X3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBS
T1RPX1VEUCkpOwotI2VuZGlmCi0jZWxzZQotCQkJdWRwLT51aF9zdW0gPSAwOwotI2VuZGlmCi0J
CX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEw
MDAwMDAKLQkJaXAtPmlwX2xlbiA9IGh0b25zKGxlbik7Ci0jZWxzZQotCQlpcC0+aXBfbGVuID0g
bGVuOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotCQlpcC0+aXBfbGVuID0gbGVuOwotI2Vsc2UKLQkJaXAtPmlwX2xlbiA9IGh0b25z
KGxlbik7Ci0jZW5kaWYKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19D
U1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0JCQlzaG91
dC0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCBzaXplb2Yoc3RydWN0IGlw
KSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5k
c3djcmMpOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgKChfX0ZyZWVCU0RfdmVy
c2lvbiA+IDgwMzAwMCAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMCkgfHwgX19GcmVlQlNE
X3ZlcnNpb24gPiA5MDAwMDApCi0JCQlpZiAoVl91ZHBfY2tzdW0pIHsKLQkJCQlTQ1RQX0VOQUJM
RV9VRFBfQ1NVTShvX3Bhayk7Ci0JCQl9Ci0jZWxzZQotCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0o
b19wYWspOwotI2VuZGlmCi0jZW5kaWYKLQkJfSBlbHNlIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lU
SF9OT19DU1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0J
CQltb3V0LT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOwotCQkJbW91dC0+bV9wa3Ro
ZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKLQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7Ci0jZWxzZQotCQkJc2hvdXQtPmNoZWNrc3Vt
ID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVjdCBpcCkpOwotCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLSNlbmRpZgotI2VuZGlmCi0JCX0KLSNpZmRl
ZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcpIHsKLQkJCXNjdHBfcGFja2V0X2xv
ZyhvX3Bhayk7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fUGFuZGFfXykKLQkJU0NUUF9JUF9PVVRQVVQocmV0LCBvX3BhaywgJnJvLCBOVUxMLCB2cmZf
aWQpOwotCQkvKiBGcmVlIHRoZSByb3V0ZSBpZiB3ZSBnb3Qgb25lIGJhY2sgKi8KLQkJaWYgKHJv
LnJvX3J0KSB7Ci0JCQlSVEZSRUUocm8ucm9fcnQpOwotCQkJcm8ucm9fcnQgPSBOVUxMOwotCQl9
Ci0jZWxzZQotCQlTQ1RQX0lQX09VVFBVVChyZXQsIG9fcGFrLCBOVUxMLCBOVUxMLCB2cmZfaWQp
OwotI2VuZGlmCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2
OgotCQlpcDYtPmlwNl9wbGVuID0gKHVpbnQxNl90KShsZW4gLSBzaXplb2Yoc3RydWN0IGlwNl9o
ZHIpKTsKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0JCQlzaG91dC0+Y2hlY2tz
dW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpICsg
c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2Ny
Yyk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCQkJdWRwLT51aF9zdW0gPSAw
OwotI2VsaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmICgodWRwLT51aF9zdW0gPSBp
bjZfY2tzdW0ob19wYWssIElQUFJPVE9fVURQLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpLCBsZW4g
LSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgewotCQkJCXVkcC0+dWhfc3VtID0gMHhm
ZmZmOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChTQ1RQX1dJVEhfTk9f
Q1NVTSkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2NyYyk7Ci0jZWxzZQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDkwMDAwMAotI2lmIF9f
RnJlZUJTRF92ZXJzaW9uID4gOTAxMDAwCi0JCQltb3V0LT5tX3BrdGhkci5jc3VtX2ZsYWdzID0g
Q1NVTV9TQ1RQX0lQVjY7Ci0jZWxzZQotCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9mbGFncyA9IENT
VU1fU0NUUDsKLSNlbmRpZgotCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yo
c3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRo
d2NyYyk7Ci0jZWxzZQotCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0o
bW91dCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19z
ZW5kc3djcmMpOwotI2VuZGlmCi0jZW5kaWYKLQkJfQotI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJ
TkcKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFT
VF9QQUNLRVRfVFJBQ0lORykgewotCQkJc2N0cF9wYWNrZXRfbG9nKG9fcGFrKTsKLQkJfQotI2Vu
ZGlmCi0JCVNDVFBfSVA2X09VVFBVVChyZXQsIG9fcGFrLCBOVUxMLCBOVUxMLCBOVUxMLCB2cmZf
aWQpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNl
IEFGX0NPTk46Ci0JewotCQljaGFyICpidWZmZXI7Ci0JCXN0cnVjdCBzb2NrYWRkcl9jb25uICpz
Y29ubjsKLQotCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNyYzsKLSNpZiBkZWZp
bmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kbm9jcmMp
OwotI2Vsc2UKLQkJaWYgKFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0gMCkgewot
CQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgMCk7Ci0JCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwotCQl9IGVsc2UgewotCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLQkJfQotI2VuZGlmCi0jaWZkZWYgU0NUUF9QQUNLRVRf
TE9HR0lORwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7Ci0JCQlzY3RwX3BhY2tldF9sb2cobW91dCk7Ci0JCX0K
LSNlbmRpZgotCQkvKiBEb24ndCBhbGxvYy9mcmVlIGZvciBlYWNoIHBhY2tldCAqLwotCQlpZiAo
KGJ1ZmZlciA9IG1hbGxvYyhsZW4pKSAhPSBOVUxMKSB7Ci0JCQltX2NvcHlkYXRhKG1vdXQsIDAs
IGxlbiwgYnVmZmVyKTsKLQkJCVNDVFBfQkFTRV9WQVIoY29ubl9vdXRwdXQpKHNjb25uLT5zY29u
bl9hZGRyLCBidWZmZXIsIGxlbiwgMCwgMCk7Ci0JCQlmcmVlKGJ1ZmZlcik7Ci0JCX0KLQkJc2N0
cF9tX2ZyZWVtKG1vdXQpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVua25vd24gcHJvdG9jb2wgKFRTTkgpIHR5cGUgJWRc
biIsCi0JCSAgICAgICAgZHN0LT5zYV9mYW1pbHkpOwotCQlzY3RwX21fZnJlZW0obW91dCk7Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG1vdXQsIE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kcGFja2V0cyk7Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dHBh
Y2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtz
KTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZTIoc3Ry
dWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQz
Ml90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51bSwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17Ci0Jc2N0cF9zZW5k
X3Jlc3BfbXNnKHNyYywgZHN0LCBzaCwgMCwgU0NUUF9TSFVURE9XTl9DT01QTEVURSwgTlVMTCwK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUs
IG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBv
cnQpOwotfQotCi12b2lkCi1zY3RwX3NlbmRfaGIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQsaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JU0NUUF9VTlVTRUQKLSNlbmRpZgot
KQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9oZWFydGJl
YXRfY2h1bmsgKmhiOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQotCVNDVFBfVENCX0xPQ0tfQVNT
RVJUKHN0Y2IpOwotCWlmIChuZXQgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCSh2b2lkKVND
VFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNh
X2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWJyZWFrOwotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlicmVhazsKLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWJyZWFrOwotI2VuZGlmCi0J
ZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsK
LQlpZiAoY2hrID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJHYWss
IGNhbid0IGdldCBhIGNodW5rIGZvciBoYlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQljaGstPmNv
cHlfYnlfcmVmID0gMDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfSEVBUlRCRUFUX1JF
UVVFU1Q7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7Ci0JY2hrLT5mbGFn
cyA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7Ci0JY2hrLT5zZW5kX3NpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKTsKLQotCWNoay0+ZGF0YSA9IHNjdHBfZ2V0
X21idWZfZm9yX21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7
Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNo
aywgc29fbG9ja2VkKTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0
YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5z
ZW5kX3NpemU7Ci0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRf
Y291bnQgPSAwOwotCWNoay0+d2hvVG8gPSBuZXQ7Ci0JYXRvbWljX2FkZF9pbnQoJmNoay0+d2hv
VG8tPnJlZl9jb3VudCwgMSk7Ci0JLyogTm93IHdlIGhhdmUgYSBtYnVmIHRoYXQgd2UgY2FuIGZp
bGwgaW4gd2l0aCB0aGUgZGV0YWlscyAqLwotCWhiID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBz
Y3RwX2hlYXJ0YmVhdF9jaHVuayAqKTsKLQltZW1zZXQoaGIsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9oZWFydGJlYXRfY2h1bmspKTsKLQkvKiBmaWxsIG91dCBjaHVuayBoZWFkZXIgKi8KLQloYi0+
Y2guY2h1bmtfdHlwZSA9IFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q7Ci0JaGItPmNoLmNodW5rX2Zs
YWdzID0gMDsKLQloYi0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOwot
CS8qIEZpbGwgb3V0IGhiIHBhcmFtZXRlciAqLwotCWhiLT5oZWFydGJlYXQuaGJfaW5mby5waC5w
YXJhbV90eXBlID0gaHRvbnMoU0NUUF9IRUFSVEJFQVRfSU5GTyk7Ci0JaGItPmhlYXJ0YmVhdC5o
Yl9pbmZvLnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9oZWFydGJl
YXRfaW5mb19wYXJhbSkpOwotCWhiLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzEgPSBu
b3cudHZfc2VjOwotCWhiLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzIgPSBub3cudHZf
dXNlYzsKLQkvKiBEaWQgb3VyIHVzZXIgcmVxdWVzdCB0aGlzIG9uZSwgcHV0IGl0IGluICovCi0J
aGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5ID0gKHVpbnQ4X3QpbmV0LT5yby5fbF9h
ZGRyLnNhLnNhX2ZhbWlseTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCWhiLT5oZWFydGJlYXQuaGJf
aW5mby5hZGRyX2xlbiA9IG5ldC0+cm8uX2xfYWRkci5zYS5zYV9sZW47Ci0jZWxzZQotCXN3aXRj
aCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFG
X0lORVQ6Ci0JCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9J
TkVUNjoKLQkJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQljYXNlIEFGX0NPTk46Ci0JCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoK
LQkJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0gMDsKLQkJYnJlYWs7Ci0JfQotI2Vu
ZGlmCi0JaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgewotCQkv
KgotCQkgKiB3ZSBvbmx5IHRha2UgZnJvbSB0aGUgZW50cm9weSBwb29sIGlmIHRoZSBhZGRyZXNz
IGlzIG5vdAotCQkgKiBjb25maXJtZWQuCi0JCSAqLwotCQluZXQtPmhlYXJ0YmVhdF9yYW5kb20x
ID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTEgPSBzY3RwX3NlbGVjdF9pbml0
aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcCk7Ci0JCW5ldC0+aGVhcnRiZWF0X3JhbmRv
bTIgPSBoYi0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMiA9IHNjdHBfc2VsZWN0X2lu
aXRpYWxfVFNOKCZzdGNiLT5zY3RwX2VwLT5zY3RwX2VwKTsKLQl9IGVsc2UgewotCQluZXQtPmhl
YXJ0YmVhdF9yYW5kb20xID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTEgPSAw
OwotCQluZXQtPmhlYXJ0YmVhdF9yYW5kb20yID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRv
bV92YWx1ZTIgPSAwOwotCX0KLQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkp
IHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQltZW1jcHkoaGItPmhlYXJ0YmVhdC5o
Yl9pbmZvLmFkZHJlc3MsCi0JCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLnNpbi5zaW5fYWRkciwK
LQkJICAgICAgIHNpemVvZihuZXQtPnJvLl9sX2FkZHIuc2luLnNpbl9hZGRyKSk7Ci0JCWJyZWFr
OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQltZW1jcHkoaGItPmhl
YXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsCi0JCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLnNpbjYu
c2luNl9hZGRyLAotCQkgICAgICAgc2l6ZW9mKG5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRk
cikpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNl
IEFGX0NPTk46Ci0JCW1lbWNweShoYi0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywKLQkJICAg
ICAgICZuZXQtPnJvLl9sX2FkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKLQkJICAgICAgIHNpemVvZihu
ZXQtPnJvLl9sX2FkZHIuc2Nvbm4uc2Nvbm5fYWRkcikpOwotCQlicmVhazsKLSNlbmRpZgotCWRl
ZmF1bHQ6Ci0JCWlmIChjaGstPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOwot
CQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJfQotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGss
IHNvX2xvY2tlZCk7Ci0JCXJldHVybjsKLQkJYnJlYWs7Ci0JfQotCW5ldC0+aGJfcmVzcG9uZGVk
ID0gMDsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUs
IGNoaywgc2N0cF9uZXh0KTsKLQlzdGNiLT5hc29jLmN0cmxfcXVldWVfY250Kys7Ci0JU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfc2VuZGhlYXJ0YmVhdCk7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1zY3Rw
X3NlbmRfZWNuX2VjaG8oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsCi0JCSAgIHVpbnQzMl90IGhpZ2hfdHNuKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOwotCXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKmVjbmU7Ci0Jc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrOwotCi0JaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JYXNv
YyA9ICZzdGNiLT5hc29jOwotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCVRBSUxRX0ZP
UkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYg
KChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSAmJiAobmV0ID09IGNoay0+
d2hvVG8pKSB7Ci0JCQkvKiBmb3VuZCBhIHByZXZpb3VzIEVDTl9FQ0hPIHVwZGF0ZSBpdCBpZiBu
ZWVkZWQgKi8KLQkJCXVpbnQzMl90IGNudCwgY3RzbjsKLQkJCWVjbmUgPSBtdG9kKGNoay0+ZGF0
YSwgc3RydWN0IHNjdHBfZWNuZV9jaHVuayAqKTsKLQkJCWN0c24gPSBudG9obChlY25lLT50c24p
OwotCQkJaWYgKFNDVFBfVFNOX0dUKGhpZ2hfdHNuLCBjdHNuKSkgewotCQkJCWVjbmUtPnRzbiA9
IGh0b25sKGhpZ2hfdHNuKTsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19xdWV1ZV91cGRfZWNu
ZSk7Ci0JCQl9Ci0JCQljbnQgPSBudG9obChlY25lLT5udW1fcGt0c19zaW5jZV9jd3IpOwotCQkJ
Y250Kys7Ci0JCQllY25lLT5udW1fcGt0c19zaW5jZV9jd3IgPSBodG9ubChjbnQpOwotCQkJcmV0
dXJuOwotCQl9Ci0JfQotCS8qIG5vcGUgY291bGQgbm90IGZpbmQgb25lIHRvIHVwZGF0ZSBzbyB3
ZSBtdXN0IGJ1aWxkIG9uZSAqLwotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlm
IChjaGsgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3F1
ZXVlX3VwZF9lY25lKTsKLQljaGstPmNvcHlfYnlfcmVmID0gMDsKLQljaGstPnJlYy5jaHVua19p
ZC5pZCA9IFNDVFBfRUNOX0VDSE87Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9
IDA7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7Ci0JY2hrLT5z
ZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuayk7Ci0JY2hrLT5kYXRhID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGNoay0+c2VuZF9zaXplLCAwLCBNX05PV0FJVCwgMSwgTVRf
SEVBREVSKTsKLQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQkJc2N0cF9mcmVlX2FfY2h1bmso
c3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVG
X1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0JU0NUUF9CVUZfTEVOKGNo
ay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVDsKLQljaGstPnNuZF9jb3VudCA9IDA7Ci0JY2hrLT53aG9UbyA9IG5ldDsKLQlhdG9taWNf
YWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQotCXN0Y2ItPmFzb2MuZWNuX2Vj
aG9fY250X29ucSsrOwotCWVjbmUgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfZWNuZV9j
aHVuayAqKTsKLQllY25lLT5jaC5jaHVua190eXBlID0gU0NUUF9FQ05fRUNITzsKLQllY25lLT5j
aC5jaHVua19mbGFncyA9IDA7Ci0JZWNuZS0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6ZW9m
KHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspKTsKLQllY25lLT50c24gPSBodG9ubChoaWdoX3Rzbik7
Ci0JZWNuZS0+bnVtX3BrdHNfc2luY2VfY3dyID0gaHRvbmwoMSk7Ci0JVEFJTFFfSU5TRVJUX0hF
QUQoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JYXNv
Yy0+Y3RybF9xdWV1ZV9jbnQrKzsKLX0KLQotdm9pZAotc2N0cF9zZW5kX3BhY2tldF9kcm9wcGVk
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgIHN0cnVj
dCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaXBobGVuLCBpbnQgYmFkX2NyYykKLXsKLQlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpkcnA7
Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXVpbnQ4X3QgKmRhdGFwOwotCWludCB3
YXNfdHJ1bmMgPSAwOwotCWludCBmdWxsc3ogPSAwOwotCWxvbmcgc3BjOwotCWludCBvZmZzZXQ7
Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoLCBjaHVua19idWY7Ci0JdW5zaWduZWQgaW50IGNo
a19sZW5ndGg7Ci0KLSAgICAgICAgaWYgKCFzdGNiKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIH0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3Rj
Yik7Ci0JaWYgKGFzb2MtPnBrdGRyb3Bfc3VwcG9ydGVkID09IDApIHsKLQkJLyotCi0JCSAqIHBl
ZXIgbXVzdCBkZWNsYXJlIHN1cHBvcnQgYmVmb3JlIEkgc2VuZCBvbmUuCi0JCSAqLwotCQlyZXR1
cm47Ci0JfQotCWlmIChzdGNiLT5zY3RwX3NvY2tldCA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9
Ci0Jc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0J
CXJldHVybjsKLQl9Ci0JY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hrLT5yZWMuY2h1bmtfaWQu
aWQgPSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2Rh
dGEgPSAxOwotCWNoay0+ZmxhZ3MgPSAwOwotCWxlbiAtPSBpcGhsZW47Ci0JY2hrLT5zZW5kX3Np
emUgPSBsZW47Ci0gICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgd2UgZG8gbm90IGhhdmUgYW4gQUJP
UlQgaW4gaGVyZS4gKi8KLQlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIp
OwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQs
Ci0JCQkJCQkgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYpOwotCXdoaWxl
IChjaCAhPSBOVUxMKSB7Ci0JCWNoa19sZW5ndGggPSBudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKTsK
LQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkgewotCQkJLyogYnJlYWsgdG8gYWJvcnQg
bGFuZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgewotCQlj
YXNlIFNDVFBfUEFDS0VUX0RST1BQRUQ6Ci0JCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjoK
LQkJY2FzZSBTQ1RQX0lOSVRJQVRJT05fQUNLOgotCQkJLyoqCi0JCQkgKiBXZSBkb24ndCByZXNw
b25kIHdpdGggYW4gUEtULURST1AgdG8gYW4gQUJPUlQKLQkJCSAqIG9yIFBLVC1EUk9QLiBXZSBh
bHNvIGRvIG5vdCByZXNwb25kIHRvIGFuCi0JCQkgKiBJTklULUFDSywgYmVjYXVzZSB3ZSBjYW4n
dCBrbm93IGlmIHRoZSBpbml0aWF0aW9uCi0JCQkgKiB0YWcgaXMgY29ycmVjdCBvciBub3QuCi0J
CQkgKi8KLQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JCW9mZnNldCArPSBT
Q1RQX1NJWkUzMihjaGtfbGVuZ3RoKTsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkJICAgIHNpemVvZigqY2gpLCAodWludDhfdCAqKSAm
IGNodW5rX2J1Zik7Ci0JfQotCi0JaWYgKChsZW4gKyBTQ1RQX01BWF9PVkVSSEVBRCArIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgPgotCSAgICBtaW4oc3RjYi0+YXNvYy5zbWFs
bGVzdF9tdHUsIE1DTEJZVEVTKSkgewotCQkvKiBvbmx5IHNlbmQgMSBtdHUgd29ydGgsIHRyaW0g
b2ZmIHRoZQotCQkgKiBleGNlc3Mgb24gdGhlIGVuZC4KLQkJICovCi0JCWZ1bGxzeiA9IGxlbjsK
LQkJbGVuID0gbWluKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1LCBNQ0xCWVRFUykgLSBTQ1RQX01B
WF9PVkVSSEVBRDsKLQkJd2FzX3RydW5jID0gMTsKLQl9Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFz
b2M7Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05P
V0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci1qdW1wX291dDoK
LQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQly
ZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVB
RCk7Ci0JZHJwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmsgKik7
Ci0JaWYgKGRycCA9PSBOVUxMKSB7Ci0JCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOwotCQljaGst
PmRhdGEgPSBOVUxMOwotCQlnb3RvIGp1bXBfb3V0OwotCX0KLQljaGstPmJvb2tfc2l6ZSA9IFND
VFBfU0laRTMyKChjaGstPnNlbmRfc2l6ZSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2No
dW5rKSArCi0JICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBTQ1RQX01FRF9PVkVSSEVBRCkp
OwotCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKLQlpZiAod2FzX3RydW5jKSB7Ci0JCWRycC0+
Y2guY2h1bmtfZmxhZ3MgPSBTQ1RQX1BBQ0tFVF9UUlVOQ0FURUQ7Ci0JCWRycC0+dHJ1bmNfbGVu
ID0gaHRvbnMoZnVsbHN6KTsKLQkJLyogTGVuIGlzIGFscmVhZHkgYWRqdXN0ZWQgdG8gc2l6ZSBt
aW51cyBvdmVyaGVhZCBhYm92ZQotCQkgKiB0YWtlIG91dCB0aGUgcGt0X2Ryb3AgY2h1bmsgaXRz
ZWxmIGZyb20gaXQuCi0JCSAqLwotCQljaGstPnNlbmRfc2l6ZSA9ICh1aW50MTZfdCkobGVuIC0g
c2l6ZW9mKHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmspKTsKLQkJbGVuID0gY2hrLT5zZW5kX3Np
emU7Ci0JfSBlbHNlIHsKLQkJLyogbm8gdHJ1bmNhdGlvbiBuZWVkZWQgKi8KLQkJZHJwLT5jaC5j
aHVua19mbGFncyA9IDA7Ci0JCWRycC0+dHJ1bmNfbGVuID0gaHRvbnMoMCk7Ci0JfQotCWlmIChi
YWRfY3JjKSB7Ci0JCWRycC0+Y2guY2h1bmtfZmxhZ3MgfD0gU0NUUF9CQURDUkM7Ci0JfQotCWNo
ay0+c2VuZF9zaXplICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKTsKLQlTQ1RQ
X0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOwotCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQlpZiAobmV0KSB7Ci0JCS8q
IHdlIHNob3VsZCBoaXQgaGVyZSAqLwotCQljaGstPndob1RvID0gbmV0OwotCQlhdG9taWNfYWRk
X2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQl9IGVsc2UgewotCQljaGstPndob1Rv
ID0gTlVMTDsKLQl9Ci0JZHJwLT5jaC5jaHVua190eXBlID0gU0NUUF9QQUNLRVRfRFJPUFBFRDsK
LQlkcnAtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKLQlzcGMgPSBT
Q1RQX1NCX0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCk7Ci0JaWYgKHNwYyA8IDApIHsKLQkJ
c3BjID0gMDsKLQl9Ci0JZHJwLT5ib3R0bGVfYncgPSBodG9ubChzcGMpOwotCWlmIChhc29jLT5t
eV9yd25kKSB7Ci0JCWRycC0+Y3VycmVudF9vbnEgPSBodG9ubChhc29jLT5zaXplX29uX3JlYXNt
X3F1ZXVlICsKLQkJICAgIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKwotCQkgICAgYXNvYy0+
bXlfcnduZF9jb250cm9sX2xlbiArCi0JCSAgICBzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LnNi
X2NjKTsKLQl9IGVsc2UgewotCQkvKi0KLQkJICogSWYgbXkgcnduZCBpcyAwLCBwb3NzaWJseSBm
cm9tIG1idWYgZGVwbGV0aW9uIGFzIHdlbGwgYXMKLQkJICogc3BhY2UgdXNlZCwgdGVsbCB0aGUg
cGVlciB0aGVyZSBpcyBOTyBzcGFjZSBha2Egb25xID09IGJ3Ci0JCSAqLwotCQlkcnAtPmN1cnJl
bnRfb25xID0gaHRvbmwoc3BjKTsKLQl9Ci0JZHJwLT5yZXNlcnZlZCA9IDA7Ci0JZGF0YXAgPSBk
cnAtPmRhdGE7Ci0JbV9jb3B5ZGF0YShtLCBpcGhsZW4sIGxlbiwgKGNhZGRyX3QpZGF0YXApOwot
CVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBz
Y3RwX25leHQpOwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci19Ci0KLXZvaWQKLXNjdHBfc2Vu
ZF9jd3Ioc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQz
Ml90IGhpZ2hfdHNuLCB1aW50OF90IG92ZXJyaWRlKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOwotCXN0cnVjdCBzY3RwX2N3cl9jaHVuayAqY3dyOwotCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoazsKLQotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWlmIChuZXQg
PT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlUQUlMUV9G
T1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlm
ICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fQ1dSKSAmJiAobmV0ID09IGNoay0+
d2hvVG8pKSB7Ci0JCQkvKiBmb3VuZCBhIHByZXZpb3VzIENXUiBxdWV1ZWQgdG8gc2FtZSBkZXN0
aW5hdGlvbiB1cGRhdGUgaXQgaWYgbmVlZGVkICovCi0JCQl1aW50MzJfdCBjdHNuOwotCQkJY3dy
ID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqKTsKLQkJCWN0c24gPSBu
dG9obChjd3ItPnRzbik7Ci0JCQlpZiAoU0NUUF9UU05fR1QoaGlnaF90c24sIGN0c24pKSB7Ci0J
CQkJY3dyLT50c24gPSBodG9ubChoaWdoX3Rzbik7Ci0JCQl9Ci0JCQlpZiAob3ZlcnJpZGUgJiBT
Q1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpIHsKLQkJCQkvKiBNYWtlIHN1cmUgb3ZlcnJpZGUgaXMg
Y2FycmllZCAqLwotCQkJCWN3ci0+Y2guY2h1bmtfZmxhZ3MgfD0gU0NUUF9DV1JfUkVEVUNFX09W
RVJSSURFOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXNjdHBfYWxsb2NfYV9jaHVuayhz
dGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWNoay0+Y29w
eV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9FQ05fQ1dSOwotCWNo
ay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOwotCWNoay0+ZmxhZ3MgPSAwOwotCWNo
ay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2N3cl9jaHVuayk7Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGNoay0+
c2VuZF9zaXplLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAoY2hrLT5kYXRhID09
IE5VTEwpIHsKLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01J
Tl9PVkVSSEVBRCk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsK
LQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQljaGstPnNuZF9jb3VudCA9IDA7
Ci0JY2hrLT53aG9UbyA9IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2Nv
dW50LCAxKTsKLQljd3IgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY3dyX2NodW5rICop
OwotCWN3ci0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfRUNOX0NXUjsKLQljd3ItPmNoLmNodW5rX2Zs
YWdzID0gb3ZlcnJpZGU7Ci0JY3dyLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhzaXplb2Yoc3Ry
dWN0IHNjdHBfY3dyX2NodW5rKSk7Ci0JY3dyLT50c24gPSBodG9ubChoaWdoX3Rzbik7Ci0JVEFJ
TFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBf
bmV4dCk7Ci0JYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLX0KLQotc3RhdGljIGludAotc2N0cF9h
ZGRfc3RyZWFtX3Jlc2V0X291dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2VxLCB1
aW50MzJfdCByZXNwX3NlcSwgdWludDMyX3QgbGFzdF9zZW50KQotewotCXVpbnQxNl90IGxlbiwg
b2xkX2xlbiwgaTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKnJlcV9v
dXQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCWludCBhdDsKLQlpbnQgbnVtYmVyX2Vu
dHJpZXM9MDsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICop
OwotCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7
Ci0JLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8KLQlyZXFfb3V0ID0gKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAqKSgoY2FkZHJfdCljaCArIGxlbik7
Ci0JLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KLQlmb3IgKGkgPSAwOyBp
IDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlpZiAoKHN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkgICAgKHN0
Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCi0JCSAgICBUQUlM
UV9FTVBUWSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKSkgewotCQkJbnVtYmVyX2Vu
dHJpZXMrKzsKLQkJfQotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPT0gMCkgewotCQlyZXR1cm4g
KDApOwotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPT0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQp
IHsKLQkJbnVtYmVyX2VudHJpZXMgPSAwOwotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPiBTQ1RQ
X01BWF9TVFJFQU1TX0FUX09OQ0VfUkVTRVQpIHsKLQkJbnVtYmVyX2VudHJpZXMgPSBTQ1RQX01B
WF9TVFJFQU1TX0FUX09OQ0VfUkVTRVQ7Ci0JfQotCWxlbiA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkgKyAoc2l6ZW9mKHVpbnQxNl90KSAq
IG51bWJlcl9lbnRyaWVzKSk7Ci0JcmVxX291dC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBf
U1RSX1JFU0VUX09VVF9SRVFVRVNUKTsKLQlyZXFfb3V0LT5waC5wYXJhbV9sZW5ndGggPSBodG9u
cyhsZW4pOwotCXJlcV9vdXQtPnJlcXVlc3Rfc2VxID0gaHRvbmwoc2VxKTsKLQlyZXFfb3V0LT5y
ZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3NlcSk7Ci0JcmVxX291dC0+c2VuZF9yZXNldF9hdF90
c24gPSBodG9ubChsYXN0X3NlbnQpOwotCWF0ID0gMDsKLQlpZiAobnVtYmVyX2VudHJpZXMpIHsK
LQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJCWlm
ICgoc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJ
TkcpICYmCi0JCQkgICAgKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID09
IDApICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1
ZSkpIHsKLQkJCQlyZXFfb3V0LT5saXN0X29mX3N0cmVhbXNbYXRdID0gaHRvbnMoaSk7Ci0JCQkJ
YXQrKzsKLQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNF
VF9JTl9GTElHSFQ7Ci0JCQkJaWYgKGF0ID49IG51bWJlcl9lbnRyaWVzKSB7Ci0JCQkJCWJyZWFr
OwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5h
c29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUg
PSBTQ1RQX1NUUkVBTV9SRVNFVF9JTl9GTElHSFQ7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfU0laRTMy
KGxlbikgPiBsZW4pIHsKLQkJLyotCi0JCSAqIE5lZWQgdG8gd29ycnkgYWJvdXQgdGhlIHBhZCB3
ZSBtYXkgZW5kIHVwIGFkZGluZyB0byB0aGUKLQkJICogZW5kLiBUaGlzIGlzIGVhc3kgc2luY2Ug
dGhlIHN0cnVjdCBpcyBlaXRoZXIgYWxpZ25lZCB0byA0Ci0JCSAqIGJ5dGVzIG9yIDIgYnl0ZXMg
b2ZmLgotCQkgKi8KLQkJcmVxX291dC0+bGlzdF9vZl9zdHJlYW1zW251bWJlcl9lbnRyaWVzXSA9
IDA7Ci0JfQotCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5n
dGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9sZF9s
ZW47Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+c2VuZF9zaXplID0gU0NUUF9T
SVpFMzIoY2hrLT5ib29rX3NpemUpOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5z
ZW5kX3NpemU7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfYWRkX3N0cmVh
bV9yZXNldF9pbihzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IG51bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqbGlzdCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBzZXEpCi17Ci0JdWludDE2X3QgbGVuLCBvbGRfbGVuLCBp
OwotCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICpyZXFfaW47Ci0Jc3RydWN0
IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9IFNDVFBfU0laRTMyKG50b2hzKGNoLT5jaHVu
a19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0aGUgcGFyYW0uICovCi0J
cmVxX2luID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICopKChjYWRkcl90
KWNoICsgbGVuKTsKLQkvKiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBhcmFtIGJlPyAqLwotCWxl
biA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0
KSArIChzaXplb2YodWludDE2X3QpICogbnVtYmVyX2VudHJpZXMpKTsKLQlyZXFfaW4tPnBoLnBh
cmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9JTl9SRVFVRVNUKTsKLQlyZXFfaW4tPnBo
LnBhcmFtX2xlbmd0aCA9IGh0b25zKGxlbik7Ci0JcmVxX2luLT5yZXF1ZXN0X3NlcSA9IGh0b25s
KHNlcSk7Ci0JaWYgKG51bWJlcl9lbnRyaWVzKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1iZXJf
ZW50cmllczsgaSsrKSB7Ci0JCQlyZXFfaW4tPmxpc3Rfb2Zfc3RyZWFtc1tpXSA9IGh0b25zKGxp
c3RbaV0pOwotCQl9Ci0JfQotCWlmIChTQ1RQX1NJWkUzMihsZW4pID4gbGVuKSB7Ci0JCS8qLQot
CQkgKiBOZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBwYWQgd2UgbWF5IGVuZCB1cCBhZGRpbmcgdG8g
dGhlCi0JCSAqIGVuZC4gVGhpcyBpcyBlYXN5IHNpbmNlIHRoZSBzdHJ1Y3QgaXMgZWl0aGVyIGFs
aWduZWQgdG8gNAotCQkgKiBieXRlcyBvciAyIGJ5dGVzIG9mZi4KLQkJICovCi0JCXJlcV9pbi0+
bGlzdF9vZl9zdHJlYW1zW251bWJlcl9lbnRyaWVzXSA9IDA7Ci0JfQotCS8qIG5vdyBmaXggdGhl
IGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVu
KTsKLQljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9sZF9sZW47Ci0JY2hrLT5ib29rX3NpemVfc2Nh
bGUgPSAwOwotCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOwot
CVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7Ci0JcmV0dXJuOwotfQot
Ci1zdGF0aWMgdm9pZAotc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3RzbihzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNlcSkKLXsK
LQl1aW50MTZfdCBsZW4sIG9sZF9sZW47Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9y
ZXF1ZXN0ICpyZXFfdHNuOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQotCWNoID0gbXRv
ZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOwotCW9sZF9sZW4gPSBsZW4gPSBT
Q1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7Ci0KLQkvKiBnZXQgdG8gbmV3IG9m
ZnNldCBmb3IgdGhlIHBhcmFtLiAqLwotCXJlcV90c24gPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X3Rzbl9yZXF1ZXN0ICopKChjYWRkcl90KWNoICsgbGVuKTsKLQkvKiBub3cgaG93IGxvbmcg
d2lsbCB0aGlzIHBhcmFtIGJlPyAqLwotCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cmVzZXRfdHNuX3JlcXVlc3QpOwotCXJlcV90c24tPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQ
X1NUUl9SRVNFVF9UU05fUkVRVUVTVCk7Ci0JcmVxX3Rzbi0+cGgucGFyYW1fbGVuZ3RoID0gaHRv
bnMobGVuKTsKLQlyZXFfdHNuLT5yZXF1ZXN0X3NlcSA9IGh0b25sKHNlcSk7Ci0KLQkvKiBub3cg
Zml4IHRoZSBjaHVuayBsZW5ndGggKi8KLQljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsg
b2xkX2xlbik7Ci0JY2hrLT5zZW5kX3NpemUgPSBsZW4gKyBvbGRfbGVuOwotCWNoay0+Ym9va19z
aXplID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOwotCWNoay0+Ym9va19zaXplX3NjYWxl
ID0gMDsKLQlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9z
aXplKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQo
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCByZXNwX3NlcSwgdWludDMyX3QgcmVzdWx0KQotewotCXVpbnQxNl90IGxlbiwg
b2xkX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKnJlc3A7Ci0Jc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNj
dHBfY2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9IFNDVFBfU0laRTMyKG50b2hzKGNoLT5j
aHVua19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0aGUgcGFyYW0uICov
Ci0JcmVzcCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKikoKGNhZGRyX3Qp
Y2ggKyBsZW4pOwotCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCi0JbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZSk7Ci0JcmVzcC0+cGgu
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFKTsKLQlyZXNwLT5waC5w
YXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOwotCXJlc3AtPnJlc3BvbnNlX3NlcSA9IGh0b25sKHJl
c3Bfc2VxKTsKLQlyZXNwLT5yZXN1bHQgPSBudG9obChyZXN1bHQpOwotCi0JLyogbm93IGZpeCB0
aGUgY2h1bmsgbGVuZ3RoICovCi0JY2gtPmNodW5rX2xlbmd0aCA9IGh0b25zKGxlbiArIG9sZF9s
ZW4pOwotCWNoay0+Ym9va19zaXplID0gbGVuICsgb2xkX2xlbjsKLQljaGstPmJvb2tfc2l6ZV9z
Y2FsZSA9IDA7Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6ZSk7
Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKLQlyZXR1cm47Ci19
Ci0KLXZvaWQKLXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25zZShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCi0JCQkJIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICplbnQsCi0JCQkJ
IGludCByZXNwb25zZSkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0J
YXNvYyA9ICZzdGNiLT5hc29jOwotCi0JLyoKLQkgKiBSZXNldCBvdXIgbGFzdCByZXNldCBhY3Rp
b24gdG8gdGhlIG5ldyBvbmUgSVAgLT4gcmVzcG9uc2UKLQkgKiAoUEVSRk9STUVEIHByb2JhYmx5
KS4gVGhpcyBhc3N1cmVzIHRoYXQgaWYgd2UgZmFpbCB0byBzZW5kLCBhCi0JICogcmV0cmFuIGZy
b20gdGhlIHBlZXIgd2lsbCBnZXQgdGhlIG5ldyByZXNwb25zZS4KLQkgKi8KLQlhc29jLT5sYXN0
X3Jlc2V0X2FjdGlvblswXSA9IHJlc3BvbnNlOwotCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0
c3RhbmRpbmcpIHsKLQkJcmV0dXJuOwotCX0KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hr
KTsKLQlpZiAoY2hrID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNi
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybjsKLQl9Ci0J
Y2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX1NUUkVB
TV9SRVNFVDsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKLQljaGstPmZs
YWdzID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmJvb2tfc2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUz
MihjaGstPmJvb2tfc2l6ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+ZGF0
YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOwotCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIFNDVFBfU09fTE9DS0VEKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNi
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybjsKLQl9Ci0J
U0NUUF9CVUZfUkVTVl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKLQkvKiBzZXR1
cCBjaHVuayBwYXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7
Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgewotCQlj
aGstPndob1RvID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNlIHsKLQkJY2hrLT53aG9U
byA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQl9Ci0JY2ggPSBtdG9kKGNoay0+
ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNodW5rX3R5cGUgPSBTQ1RQX1NU
UkVBTV9SRVNFVDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNoLT5jaHVua19sZW5ndGggPSBo
dG9ucyhjaGstPmJvb2tfc2l6ZSk7Ci0JYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9j
b3VudCwgMSk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKLQlz
Y3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgZW50LT5zZXEsIHJlc3BvbnNlKTsKLQkv
KiBpbnNlcnQgdGhlIGNodW5rIGZvciBzZW5kaW5nICovCi0JVEFJTFFfSU5TRVJUX1RBSUwoJmFz
b2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkJCSAgY2hrLAotCQkJICBzY3RwX25leHQpOwotCWFz
b2MtPmN0cmxfcXVldWVfY250Kys7Ci19Ci0KLXZvaWQKLXNjdHBfYWRkX3N0cmVhbV9yZXNldF9y
ZXN1bHRfdHNuKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlc3Bfc2VxLCB1aW50MzJfdCByZXN1bHQsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzZW5kX3VuYSwgdWludDMyX3Qg
cmVjdl9uZXh0KQotewotCXVpbnQxNl90IGxlbiwgb2xkX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfcmVzcG9uc2VfdHNuICpyZXNwOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsK
LQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOwotCW9sZF9s
ZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7Ci0KLQkvKiBn
ZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLwotCXJlc3AgPSAoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqKSgoY2FkZHJfdCljaCArIGxlbik7Ci0JLyogbm93
IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3Rzbik7Ci0JcmVzcC0+cGgucGFyYW1fdHlwZSA9IGh0
b25zKFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFKTsKLQlyZXNwLT5waC5wYXJhbV9sZW5ndGggPSBo
dG9ucyhsZW4pOwotCXJlc3AtPnJlc3BvbnNlX3NlcSA9IGh0b25sKHJlc3Bfc2VxKTsKLQlyZXNw
LT5yZXN1bHQgPSBodG9ubChyZXN1bHQpOwotCXJlc3AtPnNlbmRlcnNfbmV4dF90c24gPSBodG9u
bChzZW5kX3VuYSk7Ci0JcmVzcC0+cmVjZWl2ZXJzX25leHRfdHNuID0gaHRvbmwocmVjdl9uZXh0
KTsKLQotCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5ndGgg
PSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9sZF9sZW47
Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6ZSk7Ci0JY2hrLT5i
b29rX3NpemVfc2NhbGUgPSAwOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5k
X3NpemU7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9hZGRfYW5fb3V0X3N0cmVh
bShzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0JCSAgICAgICB1aW50MzJfdCBzZXEsCi0J
CSAgICAgICB1aW50MTZfdCBhZGRpbmcpCi17Ci0JdWludDE2X3QgbGVuLCBvbGRfbGVuOwotCXN0
cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0
cm0gKmFkZHN0cjsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRy
ICopOwotCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3Ro
KSk7Ci0KLQkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLwotCWFkZHN0ciA9
IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKikoKGNhZGRyX3QpY2ggKyBsZW4p
OwotCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCi0JbGVuID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSk7Ci0KLQkvKiBGaWxsIGl0IG91dC4g
Ki8KLQlhZGRzdHItPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9BRERfT1VU
X1NUUkVBTVMpOwotCWFkZHN0ci0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKLQlhZGRz
dHItPnJlcXVlc3Rfc2VxID0gaHRvbmwoc2VxKTsKLQlhZGRzdHItPm51bWJlcl9vZl9zdHJlYW1z
ID0gaHRvbnMoYWRkaW5nKTsKLQlhZGRzdHItPnJlc2VydmVkID0gMDsKLQotCS8qIG5vdyBmaXgg
dGhlIGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRf
bGVuKTsKLQljaGstPnNlbmRfc2l6ZSA9IGxlbiArIG9sZF9sZW47Ci0JY2hrLT5ib29rX3NpemUg
PSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAw
OwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUp
OwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfYWRkX2FuX2luX3N0cmVhbShzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qg
c2VxLAotICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZykKLXsKLQl1aW50MTZf
dCBsZW4sIG9sZF9sZW47Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCXN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9hZGRfc3RybSAqYWRkc3RyOwotCi0JY2ggPSBtdG9kKGNoay0+ZGF0YSwg
c3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9IFNDVFBfU0laRTMyKG50
b2hzKGNoLT5jaHVua19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0aGUg
cGFyYW0uICovCi0JYWRkc3RyID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSAq
KSgoY2FkZHJfdCljaCArIGxlbik7Ci0JLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBi
ZT8gKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtKTsK
LQkvKiBGaWxsIGl0IG91dC4gKi8KLQlhZGRzdHItPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQ
X1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUyk7Ci0JYWRkc3RyLT5waC5wYXJhbV9sZW5ndGggPSBo
dG9ucyhsZW4pOwotCWFkZHN0ci0+cmVxdWVzdF9zZXEgPSBodG9ubChzZXEpOwotCWFkZHN0ci0+
bnVtYmVyX29mX3N0cmVhbXMgPSBodG9ucyhhZGRpbmcpOwotCWFkZHN0ci0+cmVzZXJ2ZWQgPSAw
OwotCi0JLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3RoICovCi0JY2gtPmNodW5rX2xlbmd0aCA9
IGh0b25zKGxlbiArIG9sZF9sZW4pOwotCWNoay0+c2VuZF9zaXplID0gbGVuICsgb2xkX2xlbjsK
LQljaGstPmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9zaXplKTsKLQljaGstPmJv
b2tfc2l6ZV9zY2FsZSA9IDA7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBTQ1RQX1NJWkUz
MihjaGstPnNlbmRfc2l6ZSk7Ci0JcmV0dXJuOwotfQotCi1pbnQKLXNjdHBfc2VuZF9zdHJlYW1f
cmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IHNvX2xvY2tl
ZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICpjaGs7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCXVpbnQzMl90IHNlcTsK
LQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlhc29jLT50cmlnZ2VyX3Jlc2V0ID0gMDsKLQlpZiAo
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7Ci0JCXJldHVybiAoRUFMUkVBRFkpOwot
CX0KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKLQlpZiAoY2hrID09IE5VTEwpIHsK
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0JY2hrLT5jb3B5X2J5X3Jl
ZiA9IDA7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaGst
PnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKLQljaGstPmZsYWdzID0gMDsKLQljaGst
PmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmJvb2tfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9jaHVua2hkcik7Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6
ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21i
dWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChjaGst
PmRhdGEgPT0gTlVMTCkgewotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tl
ZCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCVNDVFBfQlVGX1JF
U1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0KLQkvKiBzZXR1cCBjaHVuayBw
YXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5z
bmRfY291bnQgPSAwOwotCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgewotCQljaGstPndob1Rv
ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNlIHsKLQkJY2hrLT53aG9UbyA9IHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQl9Ci0JY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNodW5rX3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNF
VDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhjaGst
PmJvb2tfc2l6ZSk7Ci0JYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7
Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKLQlzZXEgPSBzdGNi
LT5hc29jLnN0cl9yZXNldF9zZXFfb3V0OwotCWlmIChzY3RwX2FkZF9zdHJlYW1fcmVzZXRfb3V0
KHN0Y2IsIGNoaywgc2VxLCAoc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX2luIC0gMSksIChzdGNi
LT5hc29jLnNlbmRpbmdfc2VxIC0gMSkpKSB7Ci0JCXNlcSsrOwotCQlhc29jLT5zdHJlYW1fcmVz
ZXRfb3V0c3RhbmRpbmcrKzsKLQl9IGVsc2UgewotCQltX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCWNo
ay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2Vk
KTsKLQkJcmV0dXJuIChFTk9FTlQpOwotCX0KLQlhc29jLT5zdHJfcmVzZXQgPSBjaGs7Ci0JLyog
aW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAqLwotCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29j
LT5jb250cm9sX3NlbmRfcXVldWUsCi0JCQkgIGNoaywKLQkJCSAgc2N0cF9uZXh0KTsKLQlhc29j
LT5jdHJsX3F1ZXVlX2NudCsrOwotCi0JaWYgKHN0Y2ItPmFzb2Muc2VuZF9zYWNrKSB7Ci0JCXNj
dHBfc2VuZF9zYWNrKHN0Y2IsIHNvX2xvY2tlZCk7Ci0JfQotCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsK
LQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG51bWJlcl9l
bnRyaWVzLCB1aW50MTZfdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
c2VuZF9pbl9yZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IHNlbmRfdHNuX3Jl
cSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkX3N0cmVhbSwKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZ19vLAotICAgICAgICAgICAgICAgICAgICAg
ICAgdWludDE2X3QgYWRkaW5nX2ksIHVpbnQ4X3QgcGVlcl9hc2tlZCkKLXsKLQlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0Jc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCWludCBjYW5fc2VuZF9vdXRfcmVxPTA7Ci0JdWludDMy
X3Qgc2VxOwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmIChhc29jLT5zdHJlYW1fcmVzZXRf
b3V0c3RhbmRpbmcpIHsKLQkJLyotCi0JCSAqIEFscmVhZHkgb25lIHBlbmRpbmcsIG11c3QgZ2V0
IEFDSyBiYWNrIHRvIGNsZWFyIHRoZSBmbGFnLgotCQkgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVCVVNZKTsKLQkJcmV0
dXJuIChFQlVTWSk7Ci0JfQotCWlmICgoc2VuZF9pbl9yZXEgPT0gMCkgJiYgKHNlbmRfdHNuX3Jl
cSA9PSAwKSAmJgotCSAgICAoYWRkX3N0cmVhbSA9PSAwKSkgewotCQkvKiBub3RoaW5nIHRvIGRv
ICovCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmIChzZW5kX3Rz
bl9yZXEgJiYgc2VuZF9pbl9yZXEpIHsKLQkJLyogZXJyb3IsIGNhbid0IGRvIHRoYXQgKi8KLQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9IGVsc2UgaWYgKHNlbmRfaW5fcmVx
KSB7Ci0JCWNhbl9zZW5kX291dF9yZXEgPSAxOwotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPiAo
TUNMQllURVMgLQotCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01JTl9PVkVSSEVBRCAtCi0J
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgLQotCSAg
ICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9y
ZXF1ZXN0KSkgLwotCSAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MTZfdCkpIHsKLQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVOT01FTSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0Jc2N0cF9hbGxvY19hX2NodW5r
KHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQlyZXR1
cm4gKEVOT01FTSk7Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5r
X2lkLmlkID0gU0NUUF9TVFJFQU1fUkVTRVQ7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2Vf
ZGF0YSA9IDA7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7Ci0J
Y2hrLT5ib29rX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCWNoay0+c2Vu
ZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOwotCWNoay0+Ym9va19zaXplX3Nj
YWxlID0gMDsKLQotCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQlz
Y3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTE9DS0VEKTsKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01F
TSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0JU0NUUF9CVUZfUkVTVl9VRihjaGstPmRhdGEs
IFNDVFBfTUlOX09WRVJIRUFEKTsKLQotCS8qIHNldHVwIGNodW5rIHBhcmFtZXRlcnMgKi8KLQlj
aGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQljaGstPnNuZF9jb3VudCA9IDA7Ci0J
aWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLmFs
dGVybmF0ZTsKLQl9IGVsc2UgewotCQljaGstPndob1RvID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uOwotCX0KLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAx
KTsKLQljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQljaC0+
Y2h1bmtfdHlwZSA9IFNDVFBfU1RSRUFNX1JFU0VUOwotCWNoLT5jaHVua19mbGFncyA9IDA7Ci0J
Y2gtPmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+Ym9va19zaXplKTsKLQlTQ1RQX0JVRl9MRU4o
Y2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOwotCi0Jc2VxID0gc3RjYi0+YXNvYy5zdHJfcmVz
ZXRfc2VxX291dDsKLQlpZiAoY2FuX3NlbmRfb3V0X3JlcSkgewotCQlpbnQgcmV0OwotCSAgICAg
ICAgcmV0ID0gc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X291dChzdGNiLCBjaGssIHNlcSwgKHN0Y2It
PmFzb2Muc3RyX3Jlc2V0X3NlcV9pbiAtIDEpLCAoc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDEp
KTsKLQkJaWYgKHJldCkgewotCQkJc2VxKys7Ci0JCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3Rh
bmRpbmcrKzsKLQkJfQotCX0KLQlpZiAoKGFkZF9zdHJlYW0gJiAxKSAmJgotCSAgICAoKHN0Y2It
PmFzb2Muc3RybV9yZWFsb3V0c2l6ZSAtIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSA8IGFkZGlu
Z19vKSkgewotCQkvKiBOZWVkIHRvIGFsbG9jYXRlIG1vcmUgKi8KLQkJc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqb2xkc3RyZWFtOwotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAq
c3AsICpuc3A7Ci0JCWludCBpOwotI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMp
Ci0JCWludCBqOwotI2VuZGlmCi0KLQkJb2xkc3RyZWFtID0gc3RjYi0+YXNvYy5zdHJtb3V0Owot
CQkvKiBnZXQgc29tZSBtb3JlICovCi0JCVNDVFBfTUFMTE9DKHN0Y2ItPmFzb2Muc3RybW91dCwg
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAotCQkJICAgIChzdGNiLT5hc29jLnN0cmVhbW91dGNu
dCArIGFkZGluZ19vKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0KSwKLQkJCSAgICBT
Q1RQX01fU1RSTU8pOwotCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0ID09IE5VTEwpIHsKLQkJCXVp
bnQ4X3QgeDsKLQkJCXN0Y2ItPmFzb2Muc3RybW91dCA9IG9sZHN0cmVhbTsKLQkJCS8qIFR1cm4g
b2ZmIHRoZSBiaXQgKi8KLQkJCXggPSBhZGRfc3RyZWFtICYgMHhmZTsKLQkJCWFkZF9zdHJlYW0g
PSB4OwotCQkJZ290byBza2lwX3N0dWZmOwotCQl9Ci0JCS8qIE9rIG5vdyB3ZSBwcm9jZWVkIHdp
dGggY29weWluZyB0aGUgb2xkIG91dCBzdHVmZiBhbmQKLQkJICogaW5pdGlhbGl6aW5nIHRoZSBu
ZXcgc3R1ZmYuCi0JCSAqLwotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JCXN0Y2ItPmFz
b2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2ItPmFzb2MsIDAsIDEpOwot
CQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQkJVEFJ
TFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKLQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gb2xkc3RyZWFtW2ldLmNodW5rc19vbl9xdWV1
ZXM7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IG9sZHN0cmVh
bVtpXS5uZXh0X21pZF9vcmRlcmVkOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlk
X3Vub3JkZXJlZCA9IG9sZHN0cmVhbVtpXS5uZXh0X21pZF91bm9yZGVyZWQ7Ci0JCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IG9sZHN0cmVhbVtpXS5sYXN0X21z
Z19pbmNvbXBsZXRlOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnNpZCA9IGk7Ci0JCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBvbGRzdHJlYW1baV0uc3RhdGU7Ci0JCQkvKiBGSVgg
TUUgRklYIE1FICovCi0JCQkvKiBUaGlzIHNob3VsZCBiZSBhIFNTX0NPUFkgb3BlcmF0aW9uIEZJ
WCBNRSBTVFJFQU0gU0NIRURVTEVSIEVYUEVSVCAqLwotCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlv
bnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLCAmb2xk
c3RyZWFtW2ldKTsKLQkJCS8qIG5vdyBhbnl0aGluZyBvbiB0aG9zZSBxdWV1ZXM/ICovCi0JCQlU
QUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvbGRzdHJlYW1baV0ub3V0cXVldWUsIG5leHQsIG5zcCkg
ewotCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RyZWFtW2ldLm91dHF1ZXVlLCBzcCwgbmV4dCk7Ci0J
CQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgc3As
IG5leHQpOwotCQkJfQotCi0JCX0KLQkJLyogbm93IHRoZSBuZXcgc3RyZWFtcyAqLwotCQlzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgJnN0Y2ItPmFzb2MsIDEpOwot
CQlmb3IgKGkgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSA8IChzdGNiLT5hc29jLnN0cmVh
bW91dGNudCArIGFkZGluZ19vKTsgaSsrKSB7Ci0JCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0
cm1vdXRbaV0ub3V0cXVldWUpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9x
dWV1ZXMgPSAwOwotI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCi0JCQlmb3Ig
KGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgewotCQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLmFiYW5kb25lZF91bnNlbnRbal0gPSAwOwotCQkJfQotI2Vsc2UKLQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRb
aV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7Ci0jZW5kaWYKLQkJCXN0Y2ItPmFzb2Muc3RybW91
dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKLQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0
X21pZF91bm9yZGVyZWQgPSAwOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnNpZCA9IGk7Ci0J
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0JCQlzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29j
LnN0cm1vdXRbaV0sIE5VTEwpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NU
UF9TVFJFQU1fQ0xPU0VEOwotCQl9Ci0JCXN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSA9IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250ICsgYWRkaW5nX287Ci0JCVNDVFBfRlJFRShvbGRzdHJlYW0s
IFNDVFBfTV9TVFJNTyk7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLXNraXBf
c3R1ZmY6Ci0JaWYgKChhZGRfc3RyZWFtICYgMSkgJiYgKGFkZGluZ19vID4gMCkpIHsKLQkJYXNv
Yy0+c3RybV9wZW5kaW5nX2FkZF9zaXplID0gYWRkaW5nX287Ci0JCWFzb2MtPnBlZXJfcmVxX291
dCA9IHBlZXJfYXNrZWQ7Ci0JCXNjdHBfYWRkX2FuX291dF9zdHJlYW0oY2hrLCBzZXEsIGFkZGlu
Z19vKTsKLQkJc2VxKys7Ci0JCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOwotCX0K
LQlpZiAoKGFkZF9zdHJlYW0gJiAyKSAmJiAoYWRkaW5nX2kgPiAwKSkgewotCQlzY3RwX2FkZF9h
bl9pbl9zdHJlYW0oY2hrLCBzZXEsIGFkZGluZ19pKTsKLQkJc2VxKys7Ci0JCWFzb2MtPnN0cmVh
bV9yZXNldF9vdXRzdGFuZGluZysrOwotCX0KLQlpZiAoc2VuZF9pbl9yZXEpIHsKLQkJc2N0cF9h
ZGRfc3RyZWFtX3Jlc2V0X2luKGNoaywgbnVtYmVyX2VudHJpZXMsIGxpc3QsIHNlcSk7Ci0JCXNl
cSsrOwotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKLQl9Ci0JaWYgKHNlbmRf
dHNuX3JlcSkgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfdHNuKGNoaywgc2VxKTsKLQkJYXNv
Yy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7Ci0JfQotCWFzb2MtPnN0cl9yZXNldCA9IGNo
azsKLQkvKiBpbnNlcnQgdGhlIGNodW5rIGZvciBzZW5kaW5nICovCi0JVEFJTFFfSU5TRVJUX1RB
SUwoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkJCSAgY2hrLAotCQkJICBzY3RwX25leHQp
OwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci0JaWYgKHN0Y2ItPmFzb2Muc2VuZF9zYWNrKSB7
Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKLQl9Ci0Jc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNo
ay0+d2hvVG8pOwotCXJldHVybiAoMCk7Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9hYm9ydChzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2Nr
YWRkciAqZHN0LAotICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgdWludDMyX3Qg
dnRhZywgc3RydWN0IG1idWYgKmNhdXNlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAg
ICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90
IGZpYm51bSwKLSNlbmRpZgotICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2
X3QgcG9ydCkKLXsKLQkvKiBEb24ndCByZXNwb25kIHRvIGFuIEFCT1JUIHdpdGggYW4gQUJPUlQu
ICovCi0JaWYgKHNjdHBfaXNfdGhlcmVfYW5fYWJvcnRfaGVyZShtLCBpcGhsZW4sICZ2dGFnKSkg
ewotCQlpZiAoY2F1c2UpCi0JCQlzY3RwX21fZnJlZW0oY2F1c2UpOwotCQlyZXR1cm47Ci0JfQot
CXNjdHBfc2VuZF9yZXNwX21zZyhzcmMsIGRzdCwgc2gsIHZ0YWcsIFNDVFBfQUJPUlRfQVNTT0NJ
QVRJT04sIGNhdXNlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JICAgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JICAgICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1zY3RwX3NlbmRfb3BlcnJf
dG8oc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgdWludDMyX3QgdnRhZywgc3RydWN0IG1idWYg
KmNhdXNlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgICAgICAgICAgICAgICAgdWlu
dDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51bSwKLSNlbmRp
ZgotICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKLXsK
LQlzY3RwX3NlbmRfcmVzcF9tc2coc3JjLCBkc3QsIHNoLCB2dGFnLCBTQ1RQX09QRVJBVElPTl9F
UlJPUiwgY2F1c2UsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAgICAg
ICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCi0jZW5kaWYKLQkgICAgICAgICAgICAgICAg
ICAgdnJmX2lkLCBwb3J0KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1z
Y3RwX2NvcHlfcmVzdW1lKHN0cnVjdCB1aW8gKnVpbywKLQkJIGludCBtYXhfc2VuZF9sZW4sCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAKLQkJ
IGludCB1c2VyX21hcmtzX2VvciwKLSNlbmRpZgotCQkgaW50ICplcnJvciwKLQkJIHVpbnQzMl90
ICpzbmRvdXQsCi0JCSBzdHJ1Y3QgbWJ1ZiAqKm5ld190YWlsKQotewotI2lmIGRlZmluZWQoX19Q
YW5kYV9fKQotCXN0cnVjdCBtYnVmICptOwotCi0JbSA9IG1fdWlvdG9tYnVmKHVpbywgTV9XQUlU
T0ssIG1heF9zZW5kX2xlbiwgMCwKLQkJCSh1c2VyX21hcmtzX2VvciA/IE1fRU9SIDogMCkpOwot
CWlmIChtID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQkqZXJyb3IgPSBFTk9CVUZTOwot
CX0gZWxzZSB7Ci0JCSpzbmRvdXQgPSBtX2xlbmd0aChtLCBOVUxMKTsKLQkJKm5ld190YWlsID0g
bV9sYXN0KG0pOwotCX0KLQlyZXR1cm4gKG0pOwotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQotCW0gPSBt
X3Vpb3RvbWJ1Zih1aW8sIE1fV0FJVE9LLCBtYXhfc2VuZF9sZW4sIDAsCi0JCShNX1BLVEhEUiB8
ICh1c2VyX21hcmtzX2VvciA/IE1fRU9SIDogMCkpKTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0JCVND
VFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVU
LCBFTk9CVUZTKTsKLQkJKmVycm9yID0gRU5PQlVGUzsKLQl9IGVsc2UgewotCQkqc25kb3V0ID0g
bV9sZW5ndGgobSwgTlVMTCk7Ci0JCSpuZXdfdGFpbCA9IG1fbGFzdChtKTsKLQl9Ci0JcmV0dXJu
IChtKTsKLSNlbHNlCi0JaW50IGxlZnQsIGNhbmNweSwgd2lsbGNweTsKLQlzdHJ1Y3QgbWJ1ZiAq
bSwgKmhlYWQ7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xF
T1BBUkQpCi0JbGVmdCA9IChpbnQpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOwot
I2Vsc2UKLQlsZWZ0ID0gKGludCltaW4odWlvX3Jlc2lkKHVpbyksIG1heF9zZW5kX2xlbik7Ci0j
ZW5kaWYKLSNlbHNlCi0JbGVmdCA9IChpbnQpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9s
ZW4pOwotI2VuZGlmCi0JLyogQWx3YXlzIGdldCBhIGhlYWRlciBqdXN0IGluIGNhc2UgKi8KLQlo
ZWFkID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRB
KTsKLQlpZiAoaGVhZCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKLQkJKmVycm9yID0gRU5P
QlVGUzsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BB
Q0UoaGVhZCk7Ci0Jd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOwotCSplcnJvciA9IHVpb21v
dmUobXRvZChoZWFkLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsKLQlpZiAoKmVycm9yKSB7Ci0J
CXNjdHBfbV9mcmVlbShoZWFkKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JKnNuZG91dCArPSB3
aWxsY3B5OwotCWxlZnQgLT0gd2lsbGNweTsKLQlTQ1RQX0JVRl9MRU4oaGVhZCkgPSB3aWxsY3B5
OwotCW0gPSBoZWFkOwotCSpuZXdfdGFpbCA9IGhlYWQ7Ci0Jd2hpbGUgKGxlZnQgPiAwKSB7Ci0J
CS8qIG1vdmUgaW4gdXNlciBkYXRhICovCi0JCVNDVFBfQlVGX05FWFQobSkgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDAsIE1UX0RBVEEpOwotCQlpZiAoU0NUUF9C
VUZfTkVYVChtKSA9PSBOVUxMKSB7Ci0JCQlzY3RwX21fZnJlZW0oaGVhZCk7Ci0JCQkqbmV3X3Rh
aWwgPSBOVUxMOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQkJKmVycm9yID0gRU5PQlVGUzsKLQkJCXJl
dHVybiAoTlVMTCk7Ci0JCX0KLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCWNhbmNweSA9IChp
bnQpTV9UUkFJTElOR1NQQUNFKG0pOwotCQl3aWxsY3B5ID0gbWluKGNhbmNweSwgbGVmdCk7Ci0J
CSplcnJvciA9IHVpb21vdmUobXRvZChtLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsKLQkJaWYg
KCplcnJvcikgewotCQkJc2N0cF9tX2ZyZWVtKGhlYWQpOwotCQkJKm5ld190YWlsID0gTlVMTDsK
LQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFRkFVTFQpOwotCQkJKmVycm9yID0gRUZBVUxUOwotCQkJcmV0dXJuIChOVUxMKTsK
LQkJfQotCQlTQ1RQX0JVRl9MRU4obSkgPSB3aWxsY3B5OwotCQlsZWZ0IC09IHdpbGxjcHk7Ci0J
CSpzbmRvdXQgKz0gd2lsbGNweTsKLQkJKm5ld190YWlsID0gbTsKLQkJaWYgKGxlZnQgPT0gMCkg
ewotCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7Ci0JCX0KLQl9Ci0JcmV0dXJuIChoZWFkKTsK
LSNlbmRpZgotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2NvcHlfb25lKHN0cnVjdCBzY3RwX3N0cmVh
bV9xdWV1ZV9wZW5kaW5nICpzcCwKLSAgICAgICAgICAgICAgc3RydWN0IHVpbyAqdWlvLAotICAg
ICAgICAgICAgICBpbnQgcmVzdl91cGZyb250KQotewotI2lmIGRlZmluZWQoX19QYW5kYV9fKQot
CXNwLT5kYXRhID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgc3AtPmxlbmd0aCwKLQkgICAg
ICAgICAgICAgICAgICAgICAgIHJlc3ZfdXBmcm9udCwgMCk7Ci0JaWYgKHNwLT5kYXRhID09IE5V
TEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQotCXNwLT50
YWlsX21idWYgPSBtX2xhc3Qoc3AtPmRhdGEpOwotCXJldHVybiAoMCk7Ci0jZWxpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAotCXNwLT5kYXRhID0g
bV91aW90b21idWYodWlvLCBNX1dBSVRPSywgc3AtPmxlbmd0aCwKLQkgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3ZfdXBmcm9udCwgMCk7Ci0JaWYgKHNwLT5kYXRhID09IE5VTEwpIHsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQotCXNwLT50YWlsX21idWYgPSBt
X2xhc3Qoc3AtPmRhdGEpOwotCXJldHVybiAoMCk7Ci0jZWxzZQotCWludCBsZWZ0OwotCWludCBj
YW5jcHksIHdpbGxjcHksIGVycm9yOwotCXN0cnVjdCBtYnVmICptLCAqaGVhZDsKLQlpbnQgY3Bz
eiA9IDA7Ci0KLQkvKiBGaXJzdCBvbmUgZ2V0cyBhIGhlYWRlciAqLwotCWxlZnQgPSBzcC0+bGVu
Z3RoOwotCWhlYWQgPSBtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKChsZWZ0ICsgcmVzdl91cGZy
b250KSwgMCwgTV9XQUlUT0ssIDAsIE1UX0RBVEEpOwotCWlmIChtID09IE5VTEwpIHsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQkvKi0KLQkgKiBBZGQgdGhpcyBv
bmUgZm9yIG0gaW4gbm93LCB0aGF0IHdheSBpZiB0aGUgYWxsb2MgZmFpbHMgd2Ugd29uJ3QKLQkg
KiBoYXZlIGEgYmFkIGNudC4KLQkgKi8KLQlTQ1RQX0JVRl9SRVNWX1VGKG0sIHJlc3ZfdXBmcm9u
dCk7Ci0JY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UobSk7Ci0Jd2lsbGNweSA9IG1pbihj
YW5jcHksIGxlZnQpOwotCXdoaWxlIChsZWZ0ID4gMCkgewotCQkvKiBtb3ZlIGluIHVzZXIgZGF0
YSAqLwotCQllcnJvciA9IHVpb21vdmUobXRvZChtLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsK
LQkJaWYgKGVycm9yKSB7Ci0JCQlzY3RwX21fZnJlZW0oaGVhZCk7Ci0JCQlyZXR1cm4gKGVycm9y
KTsKLQkJfQotCQlTQ1RQX0JVRl9MRU4obSkgPSB3aWxsY3B5OwotCQlsZWZ0IC09IHdpbGxjcHk7
Ci0JCWNwc3ogKz0gd2lsbGNweTsKLQkJaWYgKGxlZnQgPiAwKSB7Ci0JCQlTQ1RQX0JVRl9ORVhU
KG0pID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRB
KTsKLQkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKLQkJCQkvKgotCQkJCSAqIHRo
ZSBoZWFkIGdvZXMgYmFjayB0byBjYWxsZXIsIGhlIGNhbiBmcmVlCi0JCQkJICogdGhlIHJlc3QK
LQkJCQkgKi8KLQkJCQlzY3RwX21fZnJlZW0oaGVhZCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQkJ
CXJldHVybiAoRU5PQlVGUyk7Ci0JCQl9Ci0JCQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQkJCWNh
bmNweSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKG0pOwotCQkJd2lsbGNweSA9IG1pbihjYW5jcHks
IGxlZnQpOwotCQl9IGVsc2UgewotCQkJc3AtPnRhaWxfbWJ1ZiA9IG07Ci0JCQlTQ1RQX0JVRl9O
RVhUKG0pID0gTlVMTDsKLQkJfQotCX0KLQlzcC0+ZGF0YSA9IGhlYWQ7Ci0Jc3AtPmxlbmd0aCA9
IGNwc3o7Ci0JcmV0dXJuICgwKTsKLSNlbmRpZgotfQotCi0KLQotc3RhdGljIHN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICoKLXNjdHBfY29weV9pdF9pbihzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0gICAgc3RydWN0IHNj
dHBfc25kcmN2aW5mbyAqc3JjdiwKLSAgICBzdHJ1Y3QgdWlvICp1aW8sCi0gICAgc3RydWN0IHNj
dHBfbmV0cyAqbmV0LAotICAgIGludCBtYXhfc2VuZF9sZW4sCi0gICAgaW50IHVzZXJfbWFya3Nf
ZW9yLAotICAgIGludCAqZXJyb3IpCi0KLXsKLQkvKi0KLQkgKiBUaGlzIHJvdXRpbmUgbXVzdCBi
ZSB2ZXJ5IGNhcmVmdWwgaW4gaXRzIHdvcmsuIFByb3RvY29sCi0JICogcHJvY2Vzc2luZyBpcyB1
cCBhbmQgcnVubmluZyBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gc3BsLi4uKCkKLQkgKiB3aGVu
IHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyB0aGF0IG1heSBlZmZlY3QgdGhlIHN0Y2IvYXNvYy4g
VGhlCi0JICogc2IgaXMgbG9ja2VkIGhvd2V2ZXIuIFdoZW4gZGF0YSBpcyBjb3BpZWQgdGhlIHBy
b3RvY29sIHByb2Nlc3NpbmcKLQkgKiBzaG91bGQgYmUgZW5hYmxlZCBzaW5jZSB0aGlzIGlzIGEg
c2xvd2VyIG9wZXJhdGlvbi4uLgotCSAqLwotCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICpzcCA9IE5VTEw7Ci0JaW50IHJlc3ZfaW5fZmlyc3Q7Ci0KLQkqZXJyb3IgPSAwOwotCS8q
IE5vdyBjYW4gd2Ugc2VuZCB0aGlzPyAqLwotCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpIHx8Ci0JICAgIChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKLQkJLyogZ290IGRhdGEgd2hp
bGUgc2h1dHRpbmcgZG93biAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7Ci0JCSplcnJvciA9IEVDT05O
UkVTRVQ7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc2N0cF9hbGxvY19hX3N0cm1vcShzdGNiLCBz
cCk7Ci0JaWYgKHNwID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNi
LCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKLQkJKmVycm9yID0gRU5PTUVN
OwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCXNwLT5hY3RfZmxhZ3MgPSAwOwotCXNwLT5zZW5kZXJf
YWxsX2RvbmUgPSAwOwotCXNwLT5zaW5mb19mbGFncyA9IHNyY3YtPnNpbmZvX2ZsYWdzOwotCXNw
LT50aW1ldG9saXZlID0gc3Jjdi0+c2luZm9fdGltZXRvbGl2ZTsKLQlzcC0+cHBpZCA9IHNyY3Yt
PnNpbmZvX3BwaWQ7Ci0Jc3AtPmNvbnRleHQgPSBzcmN2LT5zaW5mb19jb250ZXh0OwotCXNwLT5m
c24gPSAwOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOwotCi0Jc3AtPnNp
ZCA9IHNyY3YtPnNpbmZvX3N0cmVhbTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpCi0Jc3AtPmxlbmd0aCA9ICh1aW50MzJfdCltaW4odWlvLT51aW9f
cmVzaWQsIG1heF9zZW5kX2xlbik7Ci0jZWxzZQotCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWlu
KHVpb19yZXNpZCh1aW8pLCBtYXhfc2VuZF9sZW4pOwotI2VuZGlmCi0jZWxzZQotCXNwLT5sZW5n
dGggPSAodWludDMyX3QpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCWlm
ICgoc3AtPmxlbmd0aCA9PSAodWludDMyX3QpdWlvLT51aW9fcmVzaWQpICYmCi0jZWxzZQotCWlm
ICgoc3AtPmxlbmd0aCA9PSAodWludDMyX3QpdWlvX3Jlc2lkKHVpbykpICYmCi0jZW5kaWYKLSNl
bHNlCi0JaWYgKChzcC0+bGVuZ3RoID09ICh1aW50MzJfdCl1aW8tPnVpb19yZXNpZCkgJiYKLSNl
bmRpZgotCSAgICAoKHVzZXJfbWFya3NfZW9yID09IDApIHx8Ci0JICAgICAoc3Jjdi0+c2luZm9f
ZmxhZ3MgJiBTQ1RQX0VPRikgfHwKLQkgICAgICh1c2VyX21hcmtzX2VvciAmJiAoc3Jjdi0+c2lu
Zm9fZmxhZ3MgJiBTQ1RQX0VPUikpKSkgewotCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMTsKLQl9
IGVsc2UgewotCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMDsKLQl9Ci0Jc3AtPnNlbmRlcl9hbGxf
ZG9uZSA9IDA7Ci0Jc3AtPnNvbWVfdGFrZW4gPSAwOwotCXNwLT5wdXRfbGFzdF9vdXQgPSAwOwot
ICAgICAgICByZXN2X2luX2ZpcnN0ID0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpOwot
CXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0JaWYgKHNwLT5sZW5ndGggPT0gMCkg
ewotCQkqZXJyb3IgPSAwOwotCQlnb3RvIHNraXBfY29weTsKLQl9Ci0JaWYgKHNyY3YtPnNpbmZv
X2tleW51bWJlcl92YWxpZCkgewotCQlzcC0+YXV0aF9rZXlpZCA9IHNyY3YtPnNpbmZvX2tleW51
bWJlcjsKLQl9IGVsc2UgewotCQlzcC0+YXV0aF9rZXlpZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8u
YWN0aXZlX2tleWlkOwotCX0KLQlpZiAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBf
REFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgewotCQlzY3RwX2F1dGhfa2V5X2Fj
cXVpcmUoc3RjYiwgc3AtPmF1dGhfa2V5aWQpOwotCQlzcC0+aG9sZHNfa2V5X3JlZiA9IDE7Ci0J
fQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lOUF9T
TyhzdGNiLT5zY3RwX2VwKSwgMCk7Ci0jZW5kaWYKLQkqZXJyb3IgPSBzY3RwX2NvcHlfb25lKHNw
LCB1aW8sIHJlc3ZfaW5fZmlyc3QpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09D
S0VUX0xPQ0soU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCksIDApOwotI2VuZGlmCi0gc2tpcF9j
b3B5OgotCWlmICgqZXJyb3IpIHsKLQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBTQ1RQ
X1NPX0xPQ0tFRCk7Ci0JCXNwID0gTlVMTDsKLQl9IGVsc2UgewotCQlpZiAoc3AtPnNpbmZvX2Zs
YWdzICYgU0NUUF9BRERSX09WRVIpIHsKLQkJCXNwLT5uZXQgPSBuZXQ7Ci0JCQlhdG9taWNfYWRk
X2ludCgmc3AtPm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJfSBlbHNlIHsKLQkJCXNwLT5uZXQgPSBO
VUxMOwotCQl9Ci0JCXNjdHBfc2V0X3Byc2N0cF9wb2xpY3koc3ApOwotCX0KLW91dF9ub3c6Ci0J
cmV0dXJuIChzcCk7Ci19Ci0KLQotaW50Ci1zY3RwX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywK
LSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLSAgICAgICAgICAgIHN0cnVjdCB1
aW8gKnVpbywKLSNpZmRlZiBfX1BhbmRhX18KLSAgICAgICAgICAgIHBha2hhbmRsZV90eXBlIHRv
cCwKLSAgICAgICAgICAgIHBha2hhbmRsZV90eXBlIGljb250cm9sLAotI2Vsc2UKLSAgICAgICAg
ICAgIHN0cnVjdCBtYnVmICp0b3AsCi0gICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKLSAg
ICAgICAgICAgIGludCBmbGFncwotI2Vsc2UKLSAgICAgICAgICAgIGludCBmbGFncywKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLSAgICAg
ICAgICAgIHN0cnVjdCB0aHJlYWQgKnAKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0gICAg
ICAgICAgICBQS1RIUkVBRCBwCi0jZWxzZQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAg
ICAgICAgICAgIC8qCi0JICAgICAqIHByb2MgaXMgYSBkdW1teSBpbiBfX1VzZXJzcGFjZV9fIGFu
ZCB3aWxsIG5vdCBiZSBwYXNzZWQKLQkgICAgICogdG8gc2N0cF9sb3dlcl9zb3NlbmQKLQkgICAg
ICovCi0jZW5kaWYKLSAgICAgICAgICAgIHN0cnVjdCBwcm9jICpwCi0jZW5kaWYKLSNlbmRpZgot
KQotewotI2lmZGVmIF9fUGFuZGFfXwotCXN0cnVjdCBtYnVmICpjb250cm9sID0gTlVMTDsKLSNl
bmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXN0cnVjdCBwcm9jICpwID0gY3VycmVudF9w
cm9jKCk7Ci0jZW5kaWYKLQlpbnQgZXJyb3IsIHVzZV9zbmRpbmZvID0gMDsKLQlzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvIHNuZHJjdm5pbmZvOwotCXN0cnVjdCBzb2NrYWRkciAqYWRkcl90b191c2U7
Ci0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCXN0cnVjdCBzb2NrYWRkcl9p
biBzaW47Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09DS0VUX0xP
Q0soc28sIDEpOwotI2VuZGlmCi0jaWZkZWYgX19QYW5kYV9fCi0JY29udHJvbCA9IFNDVFBfSEVB
REVSX1RPX0NIQUlOKGljb250cm9sKTsKLSNlbmRpZgotCWlmIChjb250cm9sKSB7Ci0JCS8qIHBy
b2Nlc3MgY21zZyBzbmQvcmN2IGluZm8gKG1heWJlIGEgYXNzb2MtaWQpICovCi0JCWlmIChzY3Rw
X2ZpbmRfY21zZyhTQ1RQX1NORFJDViwgKHZvaWQgKikmc25kcmN2bmluZm8sIGNvbnRyb2wsCi0J
CSAgICBzaXplb2Yoc25kcmN2bmluZm8pKSkgewotCQkJLyogZ290IG9uZSAqLwotCQkJdXNlX3Nu
ZGluZm8gPSAxOwotCQl9Ci0JfQotCWFkZHJfdG9fdXNlID0gYWRkcjsKLSNpZiBkZWZpbmVkKElO
RVQpICYmIGRlZmluZWQoSU5FVDYpCi0JaWYgKChhZGRyKSAmJiAoYWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQ2KSkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgm
c2luNi0+c2luNl9hZGRyKSkgewotCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNik7Ci0JCQlh
ZGRyX3RvX3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQl9Ci0JfQotI2VuZGlmCi0J
ZXJyb3IgPSBzY3RwX2xvd2VyX3Nvc2VuZChzbywgYWRkcl90b191c2UsIHVpbywgdG9wLAotI2lm
ZGVmIF9fUGFuZGFfXwotCQkJCSAgaWNvbnRyb2wsCi0jZWxzZQotCQkJCSAgY29udHJvbCwKLSNl
bmRpZgotCQkJCSAgZmxhZ3MsCi0JCQkJICB1c2Vfc25kaW5mbyA/ICZzbmRyY3ZuaW5mbzogTlVM
TAotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0J
CQkJICAsIHAKLSNlbmRpZgotCQkpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotCi1pbnQK
LXNjdHBfbG93ZXJfc29zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgICAg
c3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgICAgICAgc3RydWN0IHVpbyAqdWlv
LAotI2lmZGVmIF9fUGFuZGFfXwotICAgICAgICAgICAgICAgICAgcGFraGFuZGxlX3R5cGUgaV9w
YWssCi0gICAgICAgICAgICAgICAgICBwYWtoYW5kbGVfdHlwZSBpX2NvbnRyb2wsCi0jZWxzZQot
ICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKmlfcGFrLAotICAgICAgICAgICAgICAgICAg
c3RydWN0IG1idWYgKmNvbnRyb2wsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgIGludCBmbGFn
cywKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNyY3YKLSNpZiAh
KGRlZmluZWQoIF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKLSAgICAgICAg
ICAgICAgICAgICwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA1MDAwMDAKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aHJlYWQgKnAKLSNlbGlmIGRl
ZmluZWQoX19XaW5kb3dzX18pCi0gICAgICAgICAgICAgICAgICBQS1RIUkVBRCBwCi0jZWxzZQot
ICAgICAgICAgICAgICAgICAgc3RydWN0IHByb2MgKnAKLSNlbmRpZgotI2VuZGlmCi0JKQotewot
CXVuc2lnbmVkIGludCBzbmRsZW4gPSAwLCBtYXhfbGVuOwotCWludCBlcnJvciwgbGVuOwotCXN0
cnVjdCBtYnVmICp0b3AgPSBOVUxMOwotI2lmZGVmIF9fUGFuZGFfXwotCXN0cnVjdCBtYnVmICpj
b250cm9sID0gTlVMTDsKLSNlbmRpZgotCWludCBxdWV1ZV9vbmx5ID0gMCwgcXVldWVfb25seV9m
b3JfaW5pdCA9IDA7Ci0JaW50IGZyZWVfY250X2FwcGxpZWQgPSAwOwotCWludCB1bl9zZW50Owot
CWludCBub3dfZmlsbGVkID0gMDsKLQl1bnNpZ25lZCBpbnQgaW5xdWV1ZV9ieXRlcyA9IDA7Ci0J
c3RydWN0IHNjdHBfYmxvY2tfZW50cnkgYmU7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3Ry
dWN0IHNjdHBfaW5wY2IgKnRfaW5wOwotCWludCB1c2VyX21hcmtzX2VvcjsKLQlpbnQgY3JlYXRl
X2xvY2tfYXBwbGllZCA9IDA7Ci0JaW50IG5hZ2xlX2FwcGxpZXMgPSAwOwotCWludCBzb21lX29u
X2NvbnRyb2wgPSAwOwotCWludCBnb3RfYWxsX29mX3RoZV9zZW5kID0gMDsKLQlpbnQgaG9sZF90
Y2Jsb2NrID0gMDsKLQlpbnQgbm9uX2Jsb2NraW5nID0gMDsKLQl1aW50MzJfdCBsb2NhbF9hZGRf
bW9yZSwgbG9jYWxfc29yZXN2ID0gMDsKLQl1aW50MTZfdCBwb3J0OwotCXVpbnQxNl90IHNpbmZv
X2ZsYWdzOwotCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19pZDsKLQotCWVycm9yID0gMDsKLQlu
ZXQgPSBOVUxMOwotCXN0Y2IgPSBOVUxMOwotCWFzb2MgPSBOVUxMOwotCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0Jc2N0cF9sb2NrX2Fzc2VydChzbyk7Ci0jZW5kaWYKLQl0X2lucCA9IGlucCA9
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFSU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJaWYgKGlfcGFrKSB7Ci0JCQlTQ1RQ
X1JFTEVBU0VfUEtUKGlfcGFrKTsKLQkJfQotCQlyZXR1cm4gKGVycm9yKTsKLQl9Ci0JaWYgKCh1
aW8gPT0gTlVMTCkgJiYgKGlfcGFrID09IE5VTEwpKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJcmV0dXJu
IChFSU5WQUwpOwotCX0KLQl1c2VyX21hcmtzX2VvciA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUik7Ci0JYXRvbWljX2FkZF9pbnQoJmlucC0+dG90
YWxfc2VuZHMsIDEpOwotCWlmICh1aW8pIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBk
ZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JCWlmICh1aW8tPnVpb19yZXNpZCA8IDApIHsKLSNlbHNl
Ci0JCWlmICh1aW9fcmVzaWQodWlvKSA8IDApIHsKLSNlbmRpZgotI2Vsc2UKLQkJaWYgKHVpby0+
dWlvX3Jlc2lkIDwgMCkgewotI2VuZGlmCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZB
TCk7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpCi0JCXNuZGxlbiA9ICh1bnNpZ25lZCBpbnQpdWlvLT51aW9fcmVzaWQ7Ci0jZWxzZQotCQlz
bmRsZW4gPSAodW5zaWduZWQgaW50KXVpb19yZXNpZCh1aW8pOwotI2VuZGlmCi0jZWxzZQotCQlz
bmRsZW4gPSAodW5zaWduZWQgaW50KXVpby0+dWlvX3Jlc2lkOwotI2VuZGlmCi0JfSBlbHNlIHsK
LQkJdG9wID0gU0NUUF9IRUFERVJfVE9fQ0hBSU4oaV9wYWspOwotI2lmZGVmIF9fUGFuZGFfXwot
CQkvKi0KLQkJICogYXBwIGxlbiBpbmRpY2F0ZXMgdGhlIGRhdGFsZW4sIGRnc2l6ZSBmb3IgY2Fz
ZXMKLQkJICogb2YgU0NUUF9FT0YvQUJPUlQgd2lsbCBub3QgaGF2ZSB0aGUgcmlnaHQgbGVuCi0J
CSAqLwotCQlzbmRsZW4gPSBTQ1RQX0FQUF9EQVRBX0xFTihpX3Bhayk7Ci0JCS8qLQotCQkgKiBT
ZXQgdGhlIHBhcnRpY2xlIGxlbiBhbHNvIHRvIHplcm8gdG8gbWF0Y2gKLQkJICogdXAgd2l0aCBh
cHAgbGVuLiBXZSBvbmx5IGhhdmUgb25lIHBhcnRpY2xlCi0JCSAqIGlmIGFwcCBsZW4gaXMgemVy
byBmb3IgUGFuZGEuIFRoaXMgaXMgZW5zdXJlZAotCQkgKiBpbiB0aGUgc29ja2V0IGxpYgotCQkg
Ki8KLQkJaWYgKHNuZGxlbiA9PSAwKSB7Ci0JCQlTQ1RQX0JVRl9MRU4odG9wKSAgPSAwOwotCQl9
Ci0JCS8qLQotCQkgKiBXZSBkZWxpbmsgdGhlIGNoYWluIGZyb20gaGVhZGVyLCBidXQga2VlcAot
CQkgKiB0aGUgaGVhZGVyIGFyb3VuZCBhcyB3ZSB3aWxsIG5lZWQgaXQgaW4KLQkJICogRUFHQUlO
IGNhc2UKLQkJICovCi0JCVNDVFBfREVUQUNIX0hFQURFUl9GUk9NX0NIQUlOKGlfcGFrKTsKLSNl
bHNlCi0JCXNuZGxlbiA9IFNDVFBfSEVBREVSX0xFTihpX3Bhayk7Ci0jZW5kaWYKLQl9Ci0JU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJTZW5kIGNhbGxlZCBhZGRyOiVwIHNlbmQgbGVuZ3Ro
ICVkXG4iLAotCQkodm9pZCAqKWFkZHIsCi0JICAgICAgICBzbmRsZW4pOwotI2lmZGVmIF9fUGFu
ZGFfXwotCWlmIChpX2NvbnRyb2wpIHsKLQkJY29udHJvbCA9IFNDVFBfSEVBREVSX1RPX0NIQUlO
KGlfY29udHJvbCk7Ci0JfQotI2VuZGlmCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSAmJgotCSAgICBTQ1RQX0lTX0xJU1RFTklORyhpbnApKSB7Ci0JCS8q
IFRoZSBsaXN0ZW5lciBjYW4gTk9UIHNlbmQgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT1RDT05OKTsKLQkJZXJyb3Ig
PSBFTk9UQ09OTjsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCS8qKgotCSAqIFByZS1zY3Jl
ZW4gYWRkcmVzcywgaWYgb25lIGlzIGdpdmVuIHRoZSBzaW4tbGVuCi0JICogbXVzdCBiZSBzZXQg
Y29ycmVjdGx5IQotCSAqLwotCWlmIChhZGRyKSB7Ci0JCXVuaW9uIHNjdHBfc29ja3N0b3JlICpy
YWRkciA9ICh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqKWFkZHI7Ci0JCXN3aXRjaCAocmFkZHItPnNh
LnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotI2lmZGVmIEhBVkVf
U0lOX0xFTgotCQkJaWYgKHJhZGRyLT5zaW4uc2luX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBf
RlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlnb3Rv
IG91dF91bmxvY2tlZDsKLQkJCX0KLSNlbmRpZgotCQkJcG9ydCA9IHJhZGRyLT5zaW4uc2luX3Bv
cnQ7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0j
aWZkZWYgSEFWRV9TSU42X0xFTgotCQkJaWYgKHJhZGRyLT5zaW42LnNpbjZfbGVuICE9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBz
dGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJ
TlZBTDsKLQkJCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJCX0KLSNlbmRpZgotCQkJcG9ydCA9IHJh
ZGRyLT5zaW42LnNpbjZfcG9ydDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJCWlm
IChyYWRkci0+c2Nvbm4uc2Nvbm5fbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikp
IHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJZ290byBvdXRfdW5s
b2NrZWQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCXBvcnQgPSByYWRkci0+c2Nvbm4uc2Nvbm5fcG9ydDsK
LQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVBRk5PU1VQUE9SVCk7Ci0JCQll
cnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9Ci0JfSBlbHNl
Ci0JCXBvcnQgPSAwOwotCi0JaWYgKHNyY3YpIHsKLQkJc2luZm9fZmxhZ3MgPSBzcmN2LT5zaW5m
b19mbGFnczsKLQkJc2luZm9fYXNzb2NfaWQgPSBzcmN2LT5zaW5mb19hc3NvY19pZDsKLQkJaWYg
KElOVkFMSURfU0lORk9fRkxBRyhzaW5mb19mbGFncykgfHwKLQkJICAgIFBSX1NDVFBfSU5WQUxJ
RF9QT0xJQ1koc2luZm9fZmxhZ3MpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZB
TDsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9Ci0JCWlmIChzcmN2LT5zaW5mb19mbGFncykK
LQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfZmxhZ3MpOwotCX0gZWxzZSB7Ci0J
CXNpbmZvX2ZsYWdzID0gaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFnczsKLQkJc2luZm9fYXNzb2Nf
aWQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2Fzc29jX2lkOwotCX0KLQlpZiAoc2luZm9fZmxhZ3Mg
JiBTQ1RQX1NFTkRBTEwpIHsKLQkJLyogaXRzIGEgc2VuZGFsbCAqLwotCQllcnJvciA9IHNjdHBf
c2VuZGFsbChpbnAsIHVpbywgdG9wLCBzcmN2KTsKLQkJdG9wID0gTlVMTDsKLQkJZ290byBvdXRf
dW5sb2NrZWQ7Ci0JfQotCWlmICgoc2luZm9fZmxhZ3MgJiBTQ1RQX0FERFJfT1ZFUikgJiYgKGFk
ZHIgPT0gTlVMTCkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJZ290byBv
dXRfdW5sb2NrZWQ7Ci0JfQotCS8qIG5vdyB3ZSBtdXN0IGZpbmQgdGhlIGFzc29jICovCi0JaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHx8Ci0JICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgewotCQlTQ1RQX0lO
UF9STE9DSyhpbnApOwotCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7
Ci0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJaG9sZF90Y2Jsb2Nr
ID0gMTsKLQkJfQotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfSBlbHNlIGlmIChzaW5mb19h
c3NvY19pZCkgewotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwg
c2luZm9fYXNzb2NfaWQsIDEpOwotCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlob2xkX3RjYmxv
Y2sgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChhZGRyKSB7Ci0JCS8qLQotCQkgKiBTaW5jZSB3ZSBk
aWQgbm90IHVzZSBmaW5kZXAgd2UgbXVzdAotCQkgKiBpbmNyZW1lbnQgaXQsIGFuZCBpZiB3ZSBk
b24ndCBmaW5kIGEgdGNiCi0JCSAqIGRlY3JlbWVudCBpdC4KLQkJICovCi0JCVNDVFBfSU5QX1dM
T0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJnRfaW5wLCBhZGRy
LCAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQlTQ1RQX0lOUF9XVU5M
T0NLKGlucCk7Ci0JCX0gZWxzZSB7Ci0JCQlob2xkX3RjYmxvY2sgPSAxOwotCQl9Ci0JfQotCWlm
ICgoc3RjYiA9PSBOVUxMKSAmJiAoYWRkcikpIHsKLQkJLyogUG9zc2libGUgaW1wbGljaXQgc2Vu
ZD8gKi8KLQkJU0NUUF9BU09DX0NSRUFURV9MT0NLKGlucCk7Ci0JCWNyZWF0ZV9sb2NrX2FwcGxp
ZWQgPSAxOwotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSB8fAotCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9B
TExHT05FKSkgewotCQkJLyogU2hvdWxkIEkgcmVhbGx5IHVubG9jayA/ICovCi0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlO
VkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0KLQkJfQot
CQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkg
JiYKLQkJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7
Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9Ci0JCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKLQkJLyogV2l0aCB0aGUgbG9jayBhcHBsaWVkIGxvb2sgYWdhaW4gKi8KLQkJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJnRfaW5wLCBhZGRyLCAmbmV0LCBO
VUxMLCBOVUxMKTsKLQkJaWYgKChzdGNiID09IE5VTEwpICYmIChjb250cm9sICE9IE5VTEwpICYm
IChwb3J0ID4gMCkpIHsKLQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9jbXNncygmdF9p
bnAsIHBvcnQsIGNvbnRyb2wsICZuZXQsICZlcnJvcik7Ci0JCX0KLQkJaWYgKHN0Y2IgPT0gTlVM
TCkgewotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCX0gZWxzZSB7Ci0JCQlob2xkX3RjYmxvY2sg
PSAxOwotCQl9Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQkJ
aWYgKHRfaW5wICE9IGlucCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5l
dCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05O
OwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQl9Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewot
CQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0VOVCk7Ci0JCQllcnJvciA9IEVOT0VOVDsK
LQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9IGVsc2UgewotCQkJLyogV2UgbXVzdCBnbyBhaGVh
ZCBhbmQgc3RhcnQgdGhlIElOSVQgcHJvY2VzcyAqLwotCQkJdWludDMyX3QgdnJmX2lkOwotCi0J
CQlpZiAoKHNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgfHwKLQkJCSAgICAoKHNpbmZvX2ZsYWdz
ICYgU0NUUF9FT0YpICYmIChzbmRsZW4gPT0gMCkpKSB7Ci0JCQkJLyotCi0JCQkJICogVXNlciBh
c2tzIHRvIGFib3J0IGEgbm9uLWV4aXN0YW50IGFzc29jLAotCQkJCSAqIG9yIEVPRiBhIG5vbi1l
eGlzdGFudCBhc3NvYyB3aXRoIG5vIGRhdGEKLQkJCQkgKi8KLQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0VOVCk7Ci0JCQkJ
ZXJyb3IgPSBFTk9FTlQ7Ci0JCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCQl9Ci0JCQkvKiBnZXQg
YW4gYXNvYy9zdGNiIHN0cnVjdCAqLwotCQkJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOwotI2lm
ZGVmIElOVkFSSUFOVFMKLQkJCWlmIChjcmVhdGVfbG9ja19hcHBsaWVkID09IDApIHsKLQkJCQlw
YW5pYygiRXJyb3IsIHNob3VsZCBob2xkIGNyZWF0ZSBsb2NrIGFuZCBJIGRvbid0PyIpOwotCQkJ
fQotI2VuZGlmCi0JCQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgYWRkciwgJmVycm9yLCAw
LCB2cmZfaWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Bl
bl9zdHJlYW1fY291bnQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5w
b3J0LAotI2lmICEoZGVmaW5lZCggX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
KQotCQkJICAgICAgICAgICAgICAgICAgICAgICBwKTsKLSNlbHNlCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3QgcHJvYyAqKU5VTEwpOwotI2VuZGlmCi0JCQlpZiAoc3RjYiA9PSBO
VUxMKSB7Ci0JCQkJLyogRXJyb3IgaXMgc2V0dXAgZm9yIHVzIGluIHRoZSBjYWxsICovCi0JCQkJ
Z290byBvdXRfdW5sb2NrZWQ7Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKLQkJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLQkJCQkvKiBTZXQgdGhlIGNvbm5lY3Rl
ZCBmbGFnIHNvIHdlIGNhbiBxdWV1ZSBkYXRhICovCi0JCQkJc29pc2Nvbm5lY3Rpbmcoc28pOwot
CQkJfQotCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCWlmIChjcmVhdGVfbG9ja19hcHBsaWVkKSB7
Ci0JCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCQljcmVhdGVfbG9ja19hcHBs
aWVkID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9QUklOVEYoIkh1aC0zPyBjcmVhdGUgbG9j
ayBzaG91bGQgaGF2ZSBiZWVuIG9uPz9cbiIpOwotCQkJfQotCQkJLyogVHVybiBvbiBxdWV1ZSBv
bmx5IGZsYWcgdG8gcHJldmVudCBkYXRhIGZyb20gYmVpbmcgc2VudCAqLwotCQkJcXVldWVfb25s
eSA9IDE7Ci0JCQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JCQlTQ1RQX1NFVF9TVEFURShhc29jLCBT
Q1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKLQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZh
c29jLT50aW1lX2VudGVyZWQpOwotCi0JCQkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBh
cmFtcyBmb3IgdGhlIGFzc29jICovCi0JCQlzY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMoaW5w
LCBzdGNiKTsKLQotCQkJaWYgKGNvbnRyb2wpIHsKLQkJCQlpZiAoc2N0cF9wcm9jZXNzX2Ntc2dz
X2Zvcl9pbml0KHN0Y2IsIGNvbnRyb2wsICZlcnJvcikpIHsKLQkJCQkJc2N0cF9mcmVlX2Fzc29j
KGlucCwgc3RjYiwgU0NUUF9QQ0JGUkVFX0ZPUkNFLAotCQkJCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBfT1VUUFVUICsgU0NUUF9MT0NfNSk7Ci0JCQkJCWhvbGRfdGNibG9jayA9IDA7
Ci0JCQkJCXN0Y2IgPSBOVUxMOwotCQkJCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJCQl9Ci0JCQl9
Ci0JCQkvKiBvdXQgd2l0aCB0aGUgSU5JVCAqLwotCQkJcXVldWVfb25seV9mb3JfaW5pdCA9IDE7
Ci0JCQkvKi0KLQkJCSAqIHdlIG1heSB3YW50IHRvIGRpZyBpbiBhZnRlciB0aGlzIGNhbGwgYW5k
IGFkanVzdCB0aGUgTVRVCi0JCQkgKiB2YWx1ZS4gSXQgZGVmYXVsdGVkIHRvIDE1MDAgKGNvbnN0
YW50KSBidXQgdGhlIHJvCi0JCQkgKiBzdHJ1Y3R1cmUgbWF5IG5vdyBoYXZlIGFuIHVwZGF0ZSBh
bmQgdGh1cyB3ZSBtYXkgbmVlZCB0bwotCQkJICogY2hhbmdlIGl0IEJFRk9SRSB3ZSBhcHBlbmQg
dGhlIG1lc3NhZ2UuCi0JCQkgKi8KLQkJfQotCX0gZWxzZQotCQlhc29jID0gJnN0Y2ItPmFzb2M7
Ci0JaWYgKHNyY3YgPT0gTlVMTCkKLQkJc3JjdiA9IChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICop
JmFzb2MtPmRlZl9zZW5kOwotCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVS
KSB7Ci0JCWlmIChhZGRyKQotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQll
bHNlCi0JCQluZXQgPSBOVUxMOwotCQlpZiAoKG5ldCA9PSBOVUxMKSB8fAotCQkgICAgKChwb3J0
ICE9IDApICYmIChwb3J0ICE9IHN0Y2ItPnJwb3J0KSkpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQl9IGVsc2UgewotCQlp
ZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCW5ldCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
OwotCQl9IGVsc2UgewotCQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwot
CQl9Ci0JfQotCWF0b21pY19hZGRfaW50KCZzdGNiLT50b3RhbF9zZW5kcywgMSk7Ci0JLyogS2Vl
cCB0aGUgc3RjYiBmcm9tIGJlaW5nIGZyZWVkIHVuZGVyIG91ciBmZWV0ICovCi0JYXRvbWljX2Fk
ZF9pbnQoJmFzb2MtPnJlZmNudCwgMSk7Ci0JZnJlZV9jbnRfYXBwbGllZCA9IDE7Ci0KLQlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9fRlJBR01FTlQpKSB7Ci0J
CWlmIChzbmRsZW4gPiBhc29jLT5zbWFsbGVzdF9tdHUpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU1TR1NJWkUpOwotCQkJ
ZXJyb3IgPSBFTVNHU0laRTsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9Ci0JfQotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoaW5wLT5yZWN2X2NhbGxiYWNrKSB7Ci0JCW5vbl9i
bG9ja2luZyA9IDE7Ci0JfQotI2VuZGlmCi0JaWYgKFNDVFBfU09fSVNfTkJJTyhzbykKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLQkgICAg
IHx8IChmbGFncyAmIE1TR19OQklPKQotI2VuZGlmCi0JICAgICkgewotCQlub25fYmxvY2tpbmcg
PSAxOwotCX0KLQkvKiB3b3VsZCB3ZSBibG9jaz8gKi8KLQlpZiAobm9uX2Jsb2NraW5nKSB7Ci0J
CXVpbnQzMl90IGFtb3VudDsKLQotCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKLQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCQlob2xkX3RjYmxvY2sgPSAxOwotCQl9Ci0JCWlucXVldWVfYnl0
ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1
bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7Ci0JCWlm
ICh1c2VyX21hcmtzX2VvciA9PSAwKSB7Ci0JCQlhbW91bnQgPSBzbmRsZW47Ci0JCX0gZWxzZSB7
Ci0JCQlhbW91bnQgPSAxOwotCQl9Ci0JCWlmICgoU0NUUF9TQl9MSU1JVF9TTkQoc28pIDwgIChh
bW91bnQgKyBpbnF1ZXVlX2J5dGVzICsgc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YpKSB8fAotCQkg
ICAgKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
c3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVXT1VMREJMT0NLKTsKLQkJCWlmIChz
bmRsZW4gPiBTQ1RQX1NCX0xJTUlUX1NORChzbykpCi0JCQkJZXJyb3IgPSBFTVNHU0laRTsKLQkJ
CWVsc2UKLQkJCQllcnJvciA9IEVXT1VMREJMT0NLOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0J
CX0KLQkJc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YgKz0gc25kbGVuOwotCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCWhvbGRfdGNibG9jayA9IDA7Ci0JfSBlbHNlIHsKLQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2LCBzbmRsZW4pOwotCX0KLQlsb2NhbF9zb3Jlc3Yg
PSBzbmRsZW47Ci0JaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JF
X0ZSRUVEKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFQ09OTlJFU0VUKTsKLQkJZXJyb3IgPSBFQ09OTlJFU0VUOwotCQln
b3RvIG91dF91bmxvY2tlZDsKLQl9Ci0JaWYgKGNyZWF0ZV9sb2NrX2FwcGxpZWQpIHsKLQkJU0NU
UF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJY3JlYXRlX2xvY2tfYXBwbGllZCA9IDA7Ci0J
fQotCS8qIElzIHRoZSBzdHJlYW0gbm8uIHZhbGlkPyAqLwotCWlmIChzcmN2LT5zaW5mb19zdHJl
YW0gPj0gYXNvYy0+c3RyZWFtb3V0Y250KSB7Ci0JCS8qIEludmFsaWQgc3RyZWFtIG51bWJlciAq
LwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF91bmxvY2tlZDsK
LQl9Ci0JaWYgKChhc29jLT5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0cmVhbV0uc3RhdGUgIT0gU0NU
UF9TVFJFQU1fT1BFTikgJiYKLQkgICAgKGFzb2MtPnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFt
XS5zdGF0ZSAhPSBTQ1RQX1NUUkVBTV9PUEVOSU5HKSkgewotCQkvKgotCQkgKiBDYW4ndCBxdWV1
ZSBhbnkgZGF0YSB3aGlsZSBzdHJlYW0gcmVzZXQgaXMgdW5kZXJ3YXkuCi0JCSAqLwotCQlpZiAo
YXNvYy0+c3RybW91dFtzcmN2LT5zaW5mb19zdHJlYW1dLnN0YXRlID4gU0NUUF9TVFJFQU1fT1BF
TikgewotCQkJZXJyb3IgPSBFQUdBSU47Ci0JCX0gZWxzZSB7Ci0JCQllcnJvciA9IEVJTlZBTDsK
LQkJfQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIGVycm9yKTsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCWlmICgoU0NUUF9H
RVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKLQkgICAgKFNDVFBf
R0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKLQkJcXVldWVf
b25seSA9IDE7Ci0JfQotCS8qIHdlIGFyZSBub3cgZG9uZSB3aXRoIGFsbCBjb250cm9sICovCi0J
aWYgKGNvbnRyb2wpIHsKLQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQljb250cm9sID0gTlVM
TDsKLQl9Ci0JaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dO
X1NFTlQpIHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1JFQ0VJVkVEKSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9T
SFVURE9XTl9QRU5ESU5HKSkgewotCQlpZiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0FCT1JU
KSB7Ci0JCQk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7Ci0JCQllcnJvciA9IEVD
T05OUkVTRVQ7Ci0JCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJfQotCX0KLQkvKiBPaywgd2Ugd2ls
bCBhdHRlbXB0IGEgbXNnc25kIDo+ICovCi0jaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVm
aW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKLQlpZiAocCkgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDYwMzAwMAot
CQlwLT50ZF9ydS5ydV9tc2dzbmQrKzsKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQlwLT50ZF9wcm9jLT5wX3N0YXRzLT5wX3J1LnJ1
X21zZ3NuZCsrOwotI2Vsc2UKLQkJcC0+cF9zdGF0cy0+cF9ydS5ydV9tc2dzbmQrKzsKLSNlbmRp
ZgotCX0KLSNlbmRpZgotCS8qIEFyZSB3ZSBhYm9ydGluZz8gKi8KLQlpZiAoc3Jjdi0+c2luZm9f
ZmxhZ3MgJiBTQ1RQX0FCT1JUKSB7Ci0JCXN0cnVjdCBtYnVmICptbTsKLQkJaW50IHRvdF9kZW1h
bmQsIHRvdF9vdXQgPSAwLCBtYXhfb3V0OwotCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRz
X3dpdGhfYWJvcnQpOwotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVf
Q09PS0lFX1dBSVQpIHx8Ci0JCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSkgewotCQkJLyogSXQgaGFzIHRvIGJlIHVwIGJlZm9yZSB3ZSBhYm9y
dCAqLwotCQkJLyogaG93IGJpZyBpcyB0aGUgdXNlciBpbml0aWF0ZWQgYWJvcnQ/ICovCi0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWlmICho
b2xkX3RjYmxvY2spIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCWhvbGRfdGNibG9j
ayA9IDA7Ci0JCX0KLQkJaWYgKHRvcCkgewotCQkJc3RydWN0IG1idWYgKmNudG0gPSBOVUxMOwot
Ci0JCQltbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1o
ZHIpLCAwLCBNX1dBSVRPSywgMSwgTVRfREFUQSk7Ci0JCQlpZiAoc25kbGVuICE9IDApIHsKLQkJ
CQlmb3IgKGNudG0gPSB0b3A7IGNudG07IGNudG0gPSBTQ1RQX0JVRl9ORVhUKGNudG0pKSB7Ci0J
CQkJCXRvdF9vdXQgKz0gU0NUUF9CVUZfTEVOKGNudG0pOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNl
IHsKLQkJCS8qIE11c3QgZml0IGluIGEgTVRVICovCi0JCQl0b3Rfb3V0ID0gc25kbGVuOwotCQkJ
dG90X2RlbWFuZCA9ICh0b3Rfb3V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7Ci0J
CQlpZiAodG90X2RlbWFuZCA+IFNDVFBfREVGQVVMVF9BRERfTU9SRSkgewotCQkJCS8qIFRvIGJp
ZyAqLwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVNU0dTSVpFKTsKLQkJCQllcnJvciA9IEVNU0dTSVpFOwotCQkJCWdvdG8g
b3V0OwotCQkJfQotCQkJbW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2codG90X2RlbWFuZCwgMCwg
TV9XQUlUT0ssIDEsIE1UX0RBVEEpOwotCQl9Ci0JCWlmIChtbSA9PSBOVUxMKSB7Ci0JCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOwotCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQlnb3RvIG91dDsKLQkJfQotCQltYXhfb3V0
ID0gYXNvYy0+c21hbGxlc3RfbXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQkJ
bWF4X291dCAtPSBzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfbXNnKTsKLQkJaWYgKHRvdF9vdXQg
PiBtYXhfb3V0KSB7Ci0JCQl0b3Rfb3V0ID0gbWF4X291dDsKLQkJfQotCQlpZiAobW0pIHsKLQkJ
CXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQotCQkJLyogbm93IG1vdmUgZm9yd2FyZCB0aGUg
ZGF0YSBwb2ludGVyICovCi0JCQlwaCA9IG10b2QobW0sIHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
OwotCQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FC
VCk7Ci0JCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMoKHVpbnQxNl90KShzaXplb2Yoc3RydWN0
IHNjdHBfcGFyYW1oZHIpICsgdG90X291dCkpOwotCQkJcGgrKzsKLQkJCVNDVFBfQlVGX0xFTiht
bSkgPSB0b3Rfb3V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQkJCWlmICh0b3Ag
PT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkJCVNDVFBfU09DS0VUX1VOTE9D
SyhzbywgMCk7Ci0jZW5kaWYKLQkJCQllcnJvciA9IHVpb21vdmUoKGNhZGRyX3QpcGgsIChpbnQp
dG90X291dCwgdWlvKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAwKTsKLSNlbmRpZgotCQkJCWlmIChlcnJvcikgewotCQkJCQkvKi0KLQkJCQkJICog
SGVyZSBpZiB3ZSBjYW4ndCBnZXQgaGlzIGRhdGEgd2UKLQkJCQkJICogc3RpbGwgYWJvcnQgd2Ug
anVzdCBkb24ndCBnZXQgdG8KLQkJCQkJICogc2VuZCB0aGUgdXNlcnMgbm90ZSA6LTAKLQkJCQkJ
ICovCi0JCQkJCXNjdHBfbV9mcmVlbShtbSk7Ci0JCQkJCW1tID0gTlVMTDsKLQkJCQl9Ci0JCQl9
IGVsc2UgewotCQkJCWlmIChzbmRsZW4gIT0gMCkgewotCQkJCQlTQ1RQX0JVRl9ORVhUKG1tKSA9
IHRvcDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOwotCQl9Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgLTEpOwotCQlmcmVlX2NudF9hcHBsaWVkID0gMDsKLQkJLyogcmVsZWFzZSB0aGlzIGxv
Y2ssIG90aGVyd2lzZSB3ZSBoYW5nIG9uIG91cnNlbHZlcyAqLwotCQlzY3RwX2Fib3J0X2FuX2Fz
c29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG1tLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCS8q
IG5vdyByZWxvY2sgdGhlIHN0Y2Igc28gZXZlcnl0aGluZyBpcyBzYW5lICovCi0JCWhvbGRfdGNi
bG9jayA9IDA7Ci0JCXN0Y2IgPSBOVUxMOwotCQkvKiBJbiB0aGlzIGNhc2UgdG9wIGlzIGFscmVh
ZHkgY2hhaW5lZCB0byBtbQotCQkgKiBhdm9pZCBkb3VibGUgZnJlZSwgc2luY2Ugd2UgZnJlZSBp
dCBiZWxvdyBpZgotCQkgKiB0b3AgIT0gTlVMTCBhbmQgZHJpdmVyIHdvdWxkIGZyZWUgaXQgYWZ0
ZXIgc2VuZGluZwotCQkgKiB0aGUgcGFja2V0IG91dAotCQkgKi8KLQkJaWYgKHNuZGxlbiAhPSAw
KSB7Ci0JCQl0b3AgPSBOVUxMOwotCQl9Ci0JCWdvdG8gb3V0X3VubG9ja2VkOwotCX0KLQkvKiBD
YWxjdWxhdGUgdGhlIG1heGltdW0gd2UgY2FuIHNlbmQgKi8KLQlpbnF1ZXVlX2J5dGVzID0gc3Rj
Yi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9v
dXRfcXVldWUgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOwotCWlmIChTQ1RQX1NC
X0xJTUlUX1NORChzbykgPiBpbnF1ZXVlX2J5dGVzKSB7Ci0JCWlmIChub25fYmxvY2tpbmcpIHsK
LQkJCS8qIHdlIGFscmVhZHkgY2hlY2tlZCBmb3Igbm9uLWJsb2NraW5nIGFib3ZlLiAqLwotCQkJ
bWF4X2xlbiA9IHNuZGxlbjsKLQkJfSBlbHNlIHsKLQkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJTUlU
X1NORChzbykgLSBpbnF1ZXVlX2J5dGVzOwotCQl9Ci0JfSBlbHNlIHsKLQkJbWF4X2xlbiA9IDA7
Ci0JfQotCWlmIChob2xkX3RjYmxvY2spIHsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlo
b2xkX3RjYmxvY2sgPSAwOwotCX0KLQlpZiAoYXNvYy0+c3RybW91dCA9PSBOVUxMKSB7Ci0JCS8q
IGh1aD8gc29mdHdhcmUgZXJyb3IgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2Is
IG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOwotCQllcnJvciA9IEVGQVVMVDsK
LQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCi0JLyogVW5sZXNzIEVfRU9SIG1vZGUgaXMgb24s
IHdlIG11c3QgbWFrZSBhIHNlbmQgRklUIGluIG9uZSBjYWxsLiAqLwotCWlmICgodXNlcl9tYXJr
c19lb3IgPT0gMCkgJiYKLQkgICAgKHNuZGxlbiA+IFNDVFBfU0JfTElNSVRfU05EKHN0Y2ItPnNj
dHBfc29ja2V0KSkpIHsKLQkJLyogSXQgd2lsbCBORVZFUiBmaXQgKi8KLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU1TR1NJWkUp
OwotCQllcnJvciA9IEVNU0dTSVpFOwotCQlnb3RvIG91dF91bmxvY2tlZDsKLQl9Ci0JaWYgKCh1
aW8gPT0gTlVMTCkgJiYgdXNlcl9tYXJrc19lb3IpIHsKLQkJLyotCi0JCSAqIFdlIGRvIG5vdCBz
dXBwb3J0IGVlb3IgbW9kZSBmb3IKLQkJICogc2VuZGluZyB3aXRoIG1idWYgY2hhaW5zIChsaWtl
IHNlbmRmaWxlKS4KLQkJICovCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQln
b3RvIG91dF91bmxvY2tlZDsKLQl9Ci0KLQlpZiAodXNlcl9tYXJrc19lb3IpIHsKLQkJbG9jYWxf
YWRkX21vcmUgPSBtaW4oU0NUUF9TQl9MSU1JVF9TTkQoc28pLCBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYWRkX21vcmVfdGhyZXNob2xkKSk7Ci0JfSBlbHNlIHsKLQkJLyotCi0JCSAqIEZvciBub24t
ZWVvciB0aGUgd2hvbGUgbWVzc2FnZSBtdXN0IGZpdCBpbgotCQkgKiB0aGUgc29ja2V0IHNlbmQg
YnVmZmVyLgotCQkgKi8KLQkJbG9jYWxfYWRkX21vcmUgPSBzbmRsZW47Ci0JfQotCWxlbiA9IDA7
Ci0JaWYgKG5vbl9ibG9ja2luZykgewotCQlnb3RvIHNraXBfcHJlYmxvY2s7Ci0JfQotCWlmICgo
KG1heF9sZW4gPD0gbG9jYWxfYWRkX21vcmUpICYmCi0JICAgICAoU0NUUF9TQl9MSU1JVF9TTkQo
c28pID49IGxvY2FsX2FkZF9tb3JlKSkgfHwKLQkgICAgKG1heF9sZW4gPT0gMCkgfHwKLQkgICAg
KChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUrc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVf
Y250KSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpKSB7Ci0J
CS8qIE5vIHJvb20gcmlnaHQgbm93ICEgKi8KLQkJU09DS0JVRl9MT0NLKCZzby0+c29fc25kKTsK
LQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAo
c3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFE
KHN0Y2IpKTsKLQkJd2hpbGUgKChTQ1RQX1NCX0xJTUlUX1NORChzbykgPCAoaW5xdWV1ZV9ieXRl
cyArIGxvY2FsX2FkZF9tb3JlKSkgfHwKLQkJICAgICAgICgoc3RjYi0+YXNvYy5zdHJlYW1fcXVl
dWVfY250K3N0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSkgPj0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDEsInByZV9ibG9jayBsaW1pdDoldSA8KGlucTolZCArICVkKSB8fCAoJWQrJWQgPiAlZClc
biIsCi0JCQkgICAgICAgICh1bnNpZ25lZCBpbnQpU0NUUF9TQl9MSU1JVF9TTkQoc28pLAotCQkJ
ICAgICAgICBpbnF1ZXVlX2J5dGVzLAotCQkJICAgICAgICBsb2NhbF9hZGRfbW9yZSwKLQkJCSAg
ICAgICAgc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LAotCQkJICAgICAgICBzdGNiLT5hc29j
LmNodW5rc19vbl9vdXRfcXVldWUsCi0JCQkgICAgICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9t
YXhfY2h1bmtzX29uX3F1ZXVlKSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19ibG9j
ayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMS0EsIGFzb2MsIHNuZGxlbik7Ci0JCQl9Ci0JCQliZS5l
cnJvciA9IDA7Ci0jaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1dpbmRvd3Nf
XykKLQkJCXN0Y2ItPmJsb2NrX2VudHJ5ID0gJmJlOwotI2VuZGlmCi0JCQllcnJvciA9IHNid2Fp
dCgmc28tPnNvX3NuZCk7Ci0JCQlzdGNiLT5ibG9ja19lbnRyeSA9IE5VTEw7Ci0JCQlpZiAoZXJy
b3IgfHwgc28tPnNvX2Vycm9yIHx8IGJlLmVycm9yKSB7Ci0JCQkJaWYgKGVycm9yID09IDApIHsK
LQkJCQkJaWYgKHNvLT5zb19lcnJvcikKLQkJCQkJCWVycm9yID0gc28tPnNvX2Vycm9yOwotCQkJ
CQlpZiAoYmUuZXJyb3IpIHsKLQkJCQkJCWVycm9yID0gYmUuZXJyb3I7Ci0JCQkJCX0KLQkJCQl9
Ci0JCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCQkJCWdvdG8gb3V0X3VubG9ja2Vk
OwotCQkJfQotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQkxLX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfYmxvY2soU0NUUF9CTE9DS19M
T0dfT1VUT0ZfQkxLLAotCQkJCSAgICAgICAgICAgICAgIGFzb2MsIHN0Y2ItPmFzb2MudG90YWxf
b3V0cHV0X3F1ZXVlX3NpemUpOwotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQ
X1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19z
bmQpOwotCQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQkJfQotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKLQkJfQotCQlpZiAo
U0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykgewotCQkJbWF4X2xlbiA9IFND
VFBfU0JfTElNSVRfU05EKHNvKSAtICBpbnF1ZXVlX2J5dGVzOwotCQl9IGVsc2UgewotCQkJbWF4
X2xlbiA9IDA7Ci0JCX0KLQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCX0KLQotc2tp
cF9wcmVibG9jazoKLQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9f
QkVfRlJFRUQpIHsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCWVycm9yID0gc2Jsb2NrKCZzby0+c29fc25kLCBTQkxPQ0tXQUlUKGZsYWdzKSk7Ci0j
ZW5kaWYKLQkvKiBzbmRsZW4gY292ZXJzIGZvciBtYnVmIGNhc2UKLQkgKiB1aW9fcmVzaWQgY292
ZXJzIGZvciB0aGUgbm9uLW1idWYgY2FzZQotCSAqIE5PVEU6IHVpbyB3aWxsIGJlIG51bGwgd2hl
biB0b3AvbWJ1ZiBpcyBwYXNzZWQKLQkgKi8KLQlpZiAoc25kbGVuID09IDApIHsKLQkJaWYgKHNy
Y3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsKLQkJCWdvdF9hbGxfb2ZfdGhlX3NlbmQgPSAx
OwotCQkJZ290byBkYXRhbGVzc19lb2Y7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQll
cnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmICh0b3AgPT0gTlVMTCkg
ewotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0JCXN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKnN0cm07Ci0JCXVpbnQzMl90IHNuZG91dDsKLQotCQlTQ1RQX1RDQl9TRU5E
X0xPQ0soc3RjYik7Ci0JCWlmICgoYXNvYy0+c3RyZWFtX2xvY2tlZCkgJiYKLQkJICAgIChhc29j
LT5zdHJlYW1fbG9ja2VkX29uICAhPSBzcmN2LT5zaW5mb19zdHJlYW0pKSB7Ci0JCQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBu
ZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwot
CQkJZ290byBvdXQ7Ci0JCX0KLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0KLQkJc3Ry
bSA9ICZzdGNiLT5hc29jLnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFtXTsKLQkJaWYgKHN0cm0t
Pmxhc3RfbXNnX2luY29tcGxldGUgPT0gMCkgewotCQlkb19hX2NvcHlfaW46Ci0JCQlzcCA9IHNj
dHBfY29weV9pdF9pbihzdGNiLCBhc29jLCBzcmN2LCB1aW8sIG5ldCwgbWF4X2xlbiwgdXNlcl9t
YXJrc19lb3IsICZlcnJvcik7Ci0JCQlpZiAoKHNwID09IE5VTEwpIHx8IChlcnJvcikpIHsKLQkJ
CQlnb3RvIG91dDsKLQkJCX0KLQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQkJCWlmIChz
cC0+bXNnX2lzX2NvbXBsZXRlKSB7Ci0JCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7
Ci0JCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEp1c3Qg
Z290IGxvY2tlZCB0byB0aGlzIGd1eSBpbgotCQkJCSAqIGNhc2Ugb2YgYW4gaW50ZXJydXB0Lgot
CQkJCSAqLwotCQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAxOwotCQkJCWlmIChzdGNi
LT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWFzb2MtPnN0cmVhbV9sb2NrZWQg
PSAxOwotCQkJCQlhc29jLT5zdHJlYW1fbG9ja2VkX29uICA9IHNyY3YtPnNpbmZvX3N0cmVhbTsK
LQkJCQl9Ci0JCQkJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7Ci0JCQl9Ci0JCQlzY3RwX3NuZF9z
Yl9hbGxvYyhzdGNiLCBzcC0+bGVuZ3RoKTsKLQkJCWF0b21pY19hZGRfaW50KCZhc29jLT5zdHJl
YW1fcXVldWVfY250LCAxKTsKLQkJCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfVU5PUkRF
UkVEKSB7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHNfd2l0aF91bm9yZCk7Ci0JCQl9
Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RybS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKLQkJCXN0
Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfYWRkX3RvX3N0cmVhbShzdGNiLCBhc29jLCBz
dHJtLCBzcCwgMSk7Ci0JCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsK
LQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQkJCXNwID0gVEFJTFFfTEFTVCgmc3RybS0+
b3V0cXVldWUsIHNjdHBfc3RyZWFtaGVhZCk7Ci0JCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNi
KTsKLQkJCWlmIChzcCA9PSBOVUxMKSB7Ci0JCQkJLyogPz8/PyBIdWggPz8/IGxhc3QgbXNnIGlz
IGdvbmUgKi8KLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJcGFuaWMoIldhcm5pbmc6IExhc3QgbXNn
IG1hcmtlZCBpbmNvbXBsZXRlLCB5ZXQgbm90aGluZyBsZWZ0PyIpOwotI2Vsc2UKLQkJCQlTQ1RQ
X1BSSU5URigiV2FybmluZzogTGFzdCBtc2cgbWFya2VkIGluY29tcGxldGUsIHlldCBub3RoaW5n
IGxlZnQ/XG4iKTsKLQkJCQlzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKLSNlbmRpZgot
CQkJCWdvdG8gZG9fYV9jb3B5X2luOwotCi0JCQl9Ci0JCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+
IDApIHsKLSNlbHNlCi0JCXdoaWxlICh1aW9fcmVzaWQodWlvKSA+IDApIHsKLSNlbmRpZgotI2Vs
c2UKLQkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCkgewotI2VuZGlmCi0JCQkvKiBIb3cgbXVj
aCByb29tIGRvIHdlIGhhdmU/ICovCi0JCQlzdHJ1Y3QgbWJ1ZiAqbmV3X3RhaWwsICptbTsKLQot
CQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAo
c3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFE
KHN0Y2IpKTsKLQkJCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzbykgPiBpbnF1ZXVlX2J5dGVzKQot
CQkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSBpbnF1ZXVlX2J5dGVzOwotCQkJ
ZWxzZQotCQkJCW1heF9sZW4gPSAwOwotCi0JCQlpZiAoKG1heF9sZW4gPiBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSkgfHwKLQkJCSAgICAobWF4X2xlbiAmJiAoU0NU
UF9TQl9MSU1JVF9TTkQoc28pIDwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVz
aG9sZCkpKSB8fAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVP
UEFSRCkKLQkJCSAgICAodWlvLT51aW9fcmVzaWQgJiYgKHVpby0+dWlvX3Jlc2lkIDw9IChpbnQp
bWF4X2xlbikpKSB7Ci0jZWxzZQotCQkJICAgICh1aW9fcmVzaWQodWlvKSAmJiAodWlvX3Jlc2lk
KHVpbykgPD0gKGludCltYXhfbGVuKSkpIHsKLSNlbmRpZgotI2Vsc2UKLQkJCSAgICAodWlvLT51
aW9fcmVzaWQgJiYgKHVpby0+dWlvX3Jlc2lkIDw9IChpbnQpbWF4X2xlbikpKSB7Ci0jZW5kaWYK
LQkJCQlzbmRvdXQgPSAwOwotCQkJCW5ld190YWlsID0gTlVMTDsKLQkJCQlpZiAoaG9sZF90Y2Js
b2NrKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJaG9sZF90Y2Jsb2NrID0g
MDsKLQkJCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJU0NUUF9TT0NLRVRfVU5MT0NL
KHNvLCAwKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID4gNjAyMDAwCi0JCQkJICAgIG1tID0gc2N0cF9jb3B5X3Jlc3VtZSh1aW8sIG1heF9s
ZW4sIHVzZXJfbWFya3NfZW9yLCAmZXJyb3IsICZzbmRvdXQsICZuZXdfdGFpbCk7Ci0jZWxzZQot
CQkJCSAgICBtbSA9IHNjdHBfY29weV9yZXN1bWUodWlvLCBtYXhfbGVuLCAmZXJyb3IsICZzbmRv
dXQsICZuZXdfdGFpbCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCQlTQ1RQ
X1NPQ0tFVF9MT0NLKHNvLCAwKTsKLSNlbmRpZgotCQkJCWlmICgobW0gPT0gTlVMTCkgfHwgZXJy
b3IpIHsKLQkJCQkJaWYgKG1tKSB7Ci0JCQkJCQlzY3RwX21fZnJlZW0obW0pOwotCQkJCQl9Ci0J
CQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQkvKiBVcGRhdGUgdGhlIG1idWYgYW5kIGNvdW50ICov
Ci0JCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJCWlmIChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewotCQkJCQkvKiB3ZSBuZWVkIHRvIGdl
dCBvdXQuCi0JCQkJCSAqIFBlZXIgcHJvYmFibHkgYWJvcnRlZC4KLQkJCQkJICovCi0JCQkJCXNj
dHBfbV9mcmVlbShtbSk7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9QQ0JfRkxB
R1NfV0FTX0FCT1JURUQpIHsKLQkJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQ09OTlJFU0VUKTsKLQkJCQkJCWVycm9yID0g
RUNPTk5SRVNFVDsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJ
CQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCWlmIChzcC0+dGFpbF9tYnVmKSB7Ci0JCQkJCS8qIHRh
Y2sgaXQgdG8gdGhlIGVuZCAqLwotCQkJCQlTQ1RQX0JVRl9ORVhUKHNwLT50YWlsX21idWYpID0g
bW07Ci0JCQkJCXNwLT50YWlsX21idWYgPSBuZXdfdGFpbDsKLQkJCQl9IGVsc2UgewotCQkJCQkv
KiBBIHN0b2xlbiBtYnVmICovCi0JCQkJCXNwLT5kYXRhID0gbW07Ci0JCQkJCXNwLT50YWlsX21i
dWYgPSBuZXdfdGFpbDsKLQkJCQl9Ci0JCQkJc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwgc25kb3V0
KTsKLQkJCQlhdG9taWNfYWRkX2ludCgmc3AtPmxlbmd0aCwgc25kb3V0KTsKLQkJCQlsZW4gKz0g
c25kb3V0OwotCQkJCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfU0FDS19JTU1FRElBVEVM
WSkgewotCQkJCQlzcC0+c2luZm9fZmxhZ3MgfD0gU0NUUF9TQUNLX0lNTUVESUFURUxZOwotCQkJ
CX0KLQotCQkJCS8qIERpZCB3ZSByZWFjaCBFT1I/ICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18p
Ci0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJCWlmICgodWlvLT51aW9fcmVzaWQgPT0g
MCkgJiYKLSNlbHNlCi0JCQkJaWYgKCh1aW9fcmVzaWQodWlvKSA9PSAwKSAmJgotI2VuZGlmCi0j
ZWxzZQotCQkJCWlmICgodWlvLT51aW9fcmVzaWQgPT0gMCkgJiYKLSNlbmRpZgotCQkJCSAgICAo
KHVzZXJfbWFya3NfZW9yID09IDApIHx8Ci0JCQkJICAgICAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBT
Q1RQX0VPRikgfHwKLQkJCQkgICAgICh1c2VyX21hcmtzX2VvciAmJiAoc3Jjdi0+c2luZm9fZmxh
Z3MgJiBTQ1RQX0VPUikpKSkgewotCQkJCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMTsKLQkJCQl9
IGVsc2UgewotCQkJCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMDsKLQkJCQl9Ci0JCQkJU0NUUF9U
Q0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJaWYgKHVpby0+dWlvX3Jlc2lkID09IDApIHsKLSNl
bHNlCi0JCQlpZiAodWlvX3Jlc2lkKHVpbykgPT0gMCkgewotI2VuZGlmCi0jZWxzZQotCQkJaWYg
KHVpby0+dWlvX3Jlc2lkID09IDApIHsKLSNlbmRpZgotCQkJCS8qIGdvdCBpdCBhbGw/ICovCi0J
CQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBQUi1TQ1RQPyAqLwotCQkJaWYgKChhc29jLT5wcnNj
dHBfc3VwcG9ydGVkKSAmJiAoYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZSA+IDApKSB7
Ci0JCQkJLyogVGhpcyBpcyB1Z2x5IGJ1dCB3ZSBtdXN0IGFzc3VyZSBsb2NraW5nIG9yZGVyICov
Ci0JCQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7
Ci0JCQkJCWhvbGRfdGNibG9jayA9IDE7Ci0JCQkJfQotCQkJCXNjdHBfcHJ1bmVfcHJzY3RwKHN0
Y2IsIGFzb2MsIHNyY3YsIHNuZGxlbik7Ci0JCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2Mu
dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVl
ICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKLQkJCQlpZiAoU0NUUF9TQl9MSU1J
VF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykKLQkJCQkJbWF4X2xlbiA9IFNDVFBfU0JfTElNSVRf
U05EKHNvKSAtIGlucXVldWVfYnl0ZXM7Ci0JCQkJZWxzZQotCQkJCQltYXhfbGVuID0gMDsKLQkJ
CQlpZiAobWF4X2xlbiA+IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJCQlob2xkX3RjYmxvY2sgPSAwOwotCQkJfQotCQkJLyogd2FpdCBm
b3Igc3BhY2Ugbm93ICovCi0JCQlpZiAobm9uX2Jsb2NraW5nKSB7Ci0JCQkJLyogTm9uLWJsb2Nr
aW5nIGlvIGluIHBsYWNlIG91dCAqLwotCQkJCWdvdG8gc2tpcF9vdXRfZW9mOwotCQkJfQotCQkJ
LyogV2hhdCBhYm91dCB0aGUgSU5JVCwgc2VuZCBpdCBtYXliZSAqLwotCQkJaWYgKHF1ZXVlX29u
bHlfZm9yX2luaXQpIHsKLQkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKLQkJCQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKLQkJCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCQl9Ci0JCQkJaWYgKFND
VFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsKLQkJCQkJLyog
YSBjb2xsaXNpb24gdG9vayB1cyBmb3J3YXJkPyAqLwotCQkJCQlxdWV1ZV9vbmx5ID0gMDsKLQkJ
CQl9IGVsc2UgewotCQkJCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xP
Q0tFRCk7Ci0JCQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQp
OwotCQkJCQlxdWV1ZV9vbmx5ID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKG5ldC0+ZmxpZ2h0
X3NpemUgPiBuZXQtPmN3bmQpICYmCi0JCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAw
KSkgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRfY3duZF9hdm9pZCk7Ci0JCQkJcXVl
dWVfb25seSA9IDE7Ci0JCQl9IGVsc2UgaWYgKGFzb2MtPmlmcF9oYWRfZW5vYnVmKSB7Ci0JCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaWZub21lbXF1ZXVlZCk7Ci0JCQkJaWYgKG5ldC0+ZmxpZ2h0
X3NpemUgPiAoMiAqIG5ldC0+bXR1KSkgewotCQkJCQlxdWV1ZV9vbmx5ID0gMTsKLQkJCQl9Ci0J
CQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOwotCQkJfQotCQkJdW5fc2VudCA9IHN0Y2ItPmFz
b2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsKLQkJ
CWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAm
JgotCQkJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApICYmCi0JCQkgICAgKHN0Y2It
PmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA8IFNDVFBfTUFYX0RBVEFfQlVORExJTkcpICYmCi0JCQkg
ICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210dSAtIFNDVFBfTUlOX09W
RVJIRUFEKSkpIHsKLQotCQkJCS8qLQotCQkJCSAqIE9rLCBOYWdsZSBpcyBzZXQgb24gYW5kIHdl
IGhhdmUgZGF0YSBvdXRzdGFuZGluZy4KLQkJCQkgKiBEb24ndCBzZW5kIGFueXRoaW5nIGFuZCBs
ZXQgU0FDS3MgZHJpdmUgb3V0IHRoZQotCQkJCSAqIGRhdGEgdW5sZXNzIHdlIGhhdmUgYSAiZnVs
bCIgc2VnbWVudCB0byBzZW5kLgotCQkJCSAqLwotCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX05BR0xFX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNj
dHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfQVBQTElFRCk7Ci0JCQkJfQotCQkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX25hZ2xlcXVldWVkKTsKLQkJCQluYWdsZV9hcHBsaWVzID0g
MTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJaWYgKHNjdHBfaXNfZmVh
dHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkKLQkJCQkJCXNjdHBfbG9nX25h
Z2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfU0tJUFBFRCk7Ci0JCQkJfQotCQkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX25hZ2xlc2VudCk7Ci0JCQkJbmFnbGVfYXBwbGllcyA9IDA7Ci0JCQl9Ci0J
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9H
R0lOR19FTkFCTEUpIHsKLQotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfQ1dORExPR19QUkVTRU5E
LCBxdWV1ZV9vbmx5X2Zvcl9pbml0LCBxdWV1ZV9vbmx5LAotCQkJCQkgICAgICAgbmFnbGVfYXBw
bGllcywgdW5fc2VudCk7Ci0JCQkJc2N0cF9taXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQs
IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsCi0JCQkJCSAgICAgICBzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodCwKLQkJCQkJICAgICAgIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9x
dWV1ZSwgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQpOwotCQkJfQotCQkJaWYgKHF1ZXVl
X29ubHlfZm9yX2luaXQpCi0JCQkJcXVldWVfb25seV9mb3JfaW5pdCA9IDA7Ci0JCQlpZiAoKHF1
ZXVlX29ubHkgPT0gMCkgJiYgKG5hZ2xlX2FwcGxpZXMgPT0gMCkpIHsKLQkJCQkvKi0KLQkJCQkg
KiBuZWVkIHRvIHN0YXJ0IGNodW5rIG91dHB1dAotCQkJCSAqIGJlZm9yZSBibG9ja2luZy4uIG5v
dGUgdGhhdCBpZgotCQkJCSAqIGEgbG9jayBpcyBhbHJlYWR5IGFwcGxpZWQsIHRoZW4KLQkJCQkg
KiB0aGUgaW5wdXQgdmlhIHRoZSBuZXQgaXMgaGFwcGVuaW5nCi0JCQkJICogYW5kIEkgZG9uJ3Qg
bmVlZCB0byBzdGFydCBvdXRwdXQgOi1ECi0JCQkJICovCi0JCQkJaWYgKGhvbGRfdGNibG9jayA9
PSAwKSB7Ci0JCQkJCWlmIChTQ1RQX1RDQl9UUllMT0NLKHN0Y2IpKSB7Ci0JCQkJCQlob2xkX3Rj
YmxvY2sgPSAxOwotCQkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLAotCQkJCQkJCQkgIHN0Y2Is
Ci0JCQkJCQkJCSAgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOwot
CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLAotCQkJCQkJ
CSAgc3RjYiwKLQkJCQkJCQkgIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTE9D
S0VEKTsKLQkJCQl9Ci0JCQkJaWYgKGhvbGRfdGNibG9jayA9PSAxKSB7Ci0JCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJCQkJaG9sZF90Y2Jsb2NrID0gMDsKLQkJCQl9Ci0JCQl9Ci0JCQlT
T0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOwotCQkJLyotCi0JCQkgKiBUaGlzIGlzIGEgYml0IHN0
cmFuZ2UsIGJ1dCBJIHRoaW5rIGl0IHdpbGwKLQkJCSAqIHdvcmsuIFRoZSB0b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSBpcyBsb2NrZWQgYW5kCi0JCQkgKiBwcm90ZWN0ZWQgYnkgdGhlIFRDQl9MT0NL
LCB3aGljaCB3ZSBqdXN0IHJlbGVhc2VkLgotCQkJICogVGhlcmUgaXMgYSByYWNlIHRoYXQgY2Fu
IG9jY3VyIGJldHdlZW4gcmVsZWFzaW5nIGl0Ci0JCQkgKiBhYm92ZSwgYW5kIG1lIGdldHRpbmcg
dGhlIHNvY2tldCBsb2NrLCB3aGVyZSBzYWNrcwotCQkJICogY29tZSBpbiBidXQgd2UgaGF2ZSBu
b3QgcHV0IHRoZSBTQl9XQUlUIG9uIHRoZQotCQkJICogc29fc25kIGJ1ZmZlciB0byBnZXQgdGhl
IHdha2V1cC4gQWZ0ZXIgdGhlIExPQ0sKLQkJCSAqIGlzIGFwcGxpZWQgdGhlIHNhY2tfcHJvY2Vz
c2luZyB3aWxsIGFsc28gbmVlZCB0bwotCQkJICogTE9DSyB0aGUgc28tPnNvX3NuZCB0byBkbyB0
aGUgYWN0dWFsIHNvd3dha2V1cCgpLiBTbwotCQkJICogb25jZSB3ZSBoYXZlIHRoZSBzb2NrZXQg
YnVmZmVyIGxvY2sgaWYgd2UgcmVjaGVjayB0aGUKLQkJCSAqIHNpemUgd2UgS05PVyB3ZSB3aWxs
IGdldCB0byBzbGVlcCBzYWZlbHkgd2l0aCB0aGUKLQkJCSAqIHdha2V1cCBmbGFnIGluIHBsYWNl
LgotCQkJICovCi0JCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFfQ0hV
TktfT1ZFUkhFQUQoc3RjYikpOwotCQkJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA8PSAoaW5x
dWV1ZV9ieXRlcyArCi0JCQkJCQkgICAgICBtaW4oU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9t
b3JlX3RocmVzaG9sZCksIFNDVFBfU0JfTElNSVRfU05EKHNvKSkpKSB7Ci0JCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdfRU5BQkxF
KSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQot
CQkJCQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMSywKLQkJCQkJCSAgICAg
ICBhc29jLCB1aW8tPnVpb19yZXNpZCk7Ci0jZWxzZQotCQkJCQlzY3RwX2xvZ19ibG9jayhTQ1RQ
X0JMT0NLX0xPR19JTlRPX0JMSywKLQkJCQkJCSAgICAgICBhc29jLCB1aW9fcmVzaWQodWlvKSk7
Ci0jZW5kaWYKLSNlbHNlCi0JCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX0lOVE9f
QkxLLAotCQkJCQkJICAgICAgIGFzb2MsIChzaXplX3QpdWlvLT51aW9fcmVzaWQpOwotI2VuZGlm
Ci0JCQkJfQotCQkJCWJlLmVycm9yID0gMDsKLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFk
ZWZpbmVkKF9fV2luZG93c19fKQotCQkJCXN0Y2ItPmJsb2NrX2VudHJ5ID0gJmJlOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJc2J1bmxvY2soJnNvLT5zb19zbmQsIDEpOwot
I2VuZGlmCi0JCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19zbmQpOwotCQkJCXN0Y2ItPmJsb2Nr
X2VudHJ5ID0gTlVMTDsKLQotCQkJCWlmIChlcnJvciB8fCBzby0+c29fZXJyb3IgfHwgYmUuZXJy
b3IpIHsKLQkJCQkJaWYgKGVycm9yID09IDApIHsKLQkJCQkJCWlmIChzby0+c29fZXJyb3IpCi0J
CQkJCQkJZXJyb3IgPSBzby0+c29fZXJyb3I7Ci0JCQkJCQlpZiAoYmUuZXJyb3IpIHsKLQkJCQkJ
CQllcnJvciA9IGJlLmVycm9yOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCVNPQ0tCVUZfVU5MT0NL
KCZzby0+c29fc25kKTsKLQkJCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCQkJfQotCi0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0JCQkJZXJyb3IgPSBzYmxvY2soJnNvLT5zb19zbmQsIFNCTE9DS1dB
SVQoZmxhZ3MpKTsKLSNlbmRpZgotCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19ibG9j
ayhTQ1RQX0JMT0NLX0xPR19PVVRPRl9CTEssCi0JCQkJCQkgICAgICAgYXNvYywgc3RjYi0+YXNv
Yy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSk7Ci0JCQkJfQotCQkJfQotCQkJU09DS0JVRl9VTkxP
Q0soJnNvLT5zb19zbmQpOwotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FC
T1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCQl9Ci0JCX0KLQkJ
U0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2Ip
OwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQkJaWYgKHNwKSB7Ci0JCQlpZiAoc3AtPm1z
Z19pc19jb21wbGV0ZSA9PSAwKSB7Ci0JCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDE7
Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJCQkJYXNvYy0+
c3RyZWFtX2xvY2tlZCA9IDE7Ci0JCQkJCWFzb2MtPnN0cmVhbV9sb2NrZWRfb24gID0gc3Jjdi0+
c2luZm9fc3RyZWFtOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3AtPnNlbmRlcl9hbGxfZG9u
ZSA9IDE7Ci0JCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0JCQkJYXNvYy0+c3Ry
ZWFtX2xvY2tlZCA9IDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1BSSU5URigiSHVoIG5v
IHNwIFRTTkg/XG4iKTsKLQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAwOwotCQkJYXNv
Yy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0JCX0KLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQlp
ZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgewotI2Vsc2UKLQkJaWYgKHVpb19yZXNpZCh1aW8pID09
IDApIHsKLSNlbmRpZgotI2Vsc2UKLQkJaWYgKHVpby0+dWlvX3Jlc2lkID09IDApIHsKLSNlbmRp
ZgotCQkJZ290X2FsbF9vZl90aGVfc2VuZCA9IDE7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBXZSBz
ZW5kIGluIGEgMCwgc2luY2Ugd2UgZG8gTk9UIGhhdmUgYW55IGxvY2tzICovCi0JCWVycm9yID0g
c2N0cF9tc2dfYXBwZW5kKHN0Y2IsIG5ldCwgdG9wLCBzcmN2LCAwKTsKLQkJdG9wID0gTlVMTDsK
LQkJaWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsKLQkJCS8qCi0JCQkgKiBUaGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBmb3IgUGFuZGEgZm9yIHRoZSBtYnVmCi0JCQkgKiBzZW5kIGNh
c2UsIHdoaWNoIGRvZXMgTk9UIHlldCBzdXBwb3J0IEVFT1IgbW9kZS4KLQkJCSAqIFRodXMsIHdl
IGNhbiBqdXN0IHNldCB0aGlzIGZsYWcgdG8gZG8gdGhlIHByb3BlcgotCQkJICogRU9GIGhhbmRs
aW5nLgotCQkJICovCi0JCQlnb3RfYWxsX29mX3RoZV9zZW5kID0gMTsKLQkJfQotCX0KLQlpZiAo
ZXJyb3IpIHsKLQkJZ290byBvdXQ7Ci0JfQotZGF0YWxlc3NfZW9mOgotCS8qIEVPRiB0aGluZyA/
ICovCi0JaWYgKChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSAmJgotCSAgICAoZ290X2Fs
bF9vZl90aGVfc2VuZCA9PSAxKSkgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc193aXRo
X2VvZik7Ci0JCWVycm9yID0gMDsKLQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJfQotCQlpZiAoVEFJTFFf
RU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2Vu
dF9xdWV1ZSkgJiYKLQkJICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RjYiwgU0NUUF9T
T19MT0NLRUQpID09IDApIHsKLQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJCWdvdG8gYWJvcnRfYW55
d2F5OwotCQkJfQotCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdt
IGRvbmUuLi4gKi8KLQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9T
SFVURE9XTl9TRU5UKSAmJgotCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NU
QVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAh
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgewotCQkJCXN0cnVjdCBzY3RwX25ldHMg
Km5ldHA7Ci0KLQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gdGhlIGZpcnN0IHRpbWUgdGhyb3Vn
aCAqLwotCQkJCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsK
LQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQkJCX0KLQkJ
CQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOwotCQkJCVND
VFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJ
CQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCQlpZiAoc3RjYi0+YXNv
Yy5hbHRlcm5hdGUpIHsKLQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOwotCQkJCX0g
ZWxzZSB7Ci0JCQkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247Ci0JCQkJ
fQotCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsKLQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkg
ICAgICAgICAgICAgICAgIG5ldHApOwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOR1VBUkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJICAgICAgICAgICAg
ICAgICBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8q
LQotCQkJICogd2Ugc3RpbGwgZ290IChvciBqdXN0IGdvdCkgZGF0YSB0byBzZW5kLCBzbyBzZXQK
LQkJCSAqIFNIVVRET1dOX1BFTkRJTkcKLQkJCSAqLwotCQkJLyotCi0JCQkgKiBYWFggc29ja2V0
cyBkcmFmdCBzYXlzIHRoYXQgU0NUUF9FT0Ygc2hvdWxkIGJlCi0JCQkgKiBzZW50IHdpdGggbm8g
ZGF0YS4gIGN1cnJlbnRseSwgd2Ugd2lsbCBhbGxvdyB1c2VyCi0JCQkgKiBkYXRhIHRvIGJlIHNl
bnQgZmlyc3QgYW5kIG1vdmUgdG8KLQkJCSAqIFNIVVRET1dOLVBFTkRJTkcKLQkJCSAqLwotCQkJ
aWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYm
Ci0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpICYmCi0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hV
VERPV05fQUNLX1NFTlQpKSB7Ci0JCQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWhvbGRfdGNibG9jayA9IDE7Ci0JCQkJfQotCQkJCWlm
ICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShz
dGNiLCBhc29jKSkgewotCQkJCQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNH
X0xFRlQ7Ci0JCQkJfQotCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfU0hVVERPV05fUEVO
RElORzsKLQkJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCQkJICAg
IFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgotCQkJCSAgICAoYXNvYy0+c3RhdGUg
JiBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpKSB7Ci0JCQkJCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0JCQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJCQlhYm9ydF9hbnl3
YXk6Ci0JCQkJCWlmIChmcmVlX2NudF9hcHBsaWVkKSB7Ci0JCQkJCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQkJCWZyZWVfY250X2FwcGxpZWQgPSAwOwotCQkJ
CQl9Ci0JCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCi0JCQkJCSAgICAgICAgICIlczol
ZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQkJCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSks
Ci0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKLQkJCQkJc2N0cF9hYm9y
dF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQkvKiBub3cgcmVsb2Nr
IHRoZSBzdGNiIHNvIGV2ZXJ5dGhpbmcgaXMgc2FuZSAqLwotCQkJCQlob2xkX3RjYmxvY2sgPSAw
OwotCQkJCQlzdGNiID0gTlVMTDsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsCi0JCQkJICAgICAgICAgICAgICAgICBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJ
CQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSk7Ci0JCQl9Ci0J
CX0KLQl9Ci1za2lwX291dF9lb2Y6Ci0JaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5jb250
cm9sX3NlbmRfcXVldWUpKSB7Ci0JCXNvbWVfb25fY29udHJvbCA9IDE7Ci0JfQotCWlmIChxdWV1
ZV9vbmx5X2Zvcl9pbml0KSB7Ci0JCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgewotCQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKLQkJCWhvbGRfdGNibG9jayA9IDE7Ci0JCX0KLQkJaWYgKFNDVFBfR0VU
X1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsKLQkJCS8qIGEgY29sbGlz
aW9uIHRvb2sgdXMgZm9yd2FyZD8gKi8KLQkJCXF1ZXVlX29ubHkgPSAwOwotCQl9IGVsc2Ugewot
CQkJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NLRUQpOwotCQkJU0NU
UF9TRVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOwotCQkJcXVl
dWVfb25seSA9IDE7Ci0JCX0KLQl9Ci0JaWYgKChuZXQtPmZsaWdodF9zaXplID4gbmV0LT5jd25k
KSAmJgotCSAgICAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gMCkpIHsKLQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfc2VuZF9jd25kX2F2b2lkKTsKLQkJcXVldWVfb25seSA9IDE7Ci0JfSBl
bHNlIGlmIChhc29jLT5pZnBfaGFkX2Vub2J1ZikgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19p
Zm5vbWVtcXVldWVkKTsKLQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPiAoMiAqIG5ldC0+bXR1KSkg
ewotCQkJcXVldWVfb25seSA9IDE7Ci0JCX0KLQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOwot
CX0KLQl1bl9zZW50ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2It
PmFzb2MudG90YWxfZmxpZ2h0OwotCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX05PREVMQVkpKSAmJgotCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPiAw
KSAmJgotCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250IDwgU0NUUF9NQVhfREFUQV9C
VU5ETElORykgJiYKLQkgICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210
dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkpIHsKLQkJLyotCi0JCSAqIE9rLCBOYWdsZSBpcyBzZXQg
b24gYW5kIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZy4KLQkJICogRG9uJ3Qgc2VuZCBhbnl0aGlu
ZyBhbmQgbGV0IFNBQ0tzIGRyaXZlIG91dCB0aGUKLQkJICogZGF0YSB1bmxlc3Mgd2VuIGhhdmUg
YSAiZnVsbCIgc2VnbWVudCB0byBzZW5kLgotCQkgKi8KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNj
dHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfQVBQTElFRCk7Ci0JCX0KLQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVxdWV1ZWQpOwotCQluYWdsZV9hcHBsaWVzID0gMTsKLQl9
IGVsc2UgewotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9OQUdMRV9MT0dHSU5HX0VOQUJMRSkgewotCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5w
LCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkKLQkJCQlzY3RwX2xvZ19uYWdsZV9ldmVudChzdGNi
LCBTQ1RQX05BR0xFX1NLSVBQRUQpOwotCQl9Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX25hZ2xl
c2VudCk7Ci0JCW5hZ2xlX2FwcGxpZXMgPSAwOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQsIHF1ZXVlX29ubHlfZm9yX2luaXQsIHF1ZXVl
X29ubHksCi0JCSAgICAgICAgICAgICAgIG5hZ2xlX2FwcGxpZXMsIHVuX3NlbnQpOwotCQlzY3Rw
X21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VORCwgc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSwKLQkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsCi0J
CSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSwgc3RjYi0+YXNv
Yy50b3RhbF9mbGlnaHRfY291bnQpOwotCX0KLQlpZiAoKHF1ZXVlX29ubHkgPT0gMCkgJiYgKG5h
Z2xlX2FwcGxpZXMgPT0gMCkgJiYgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCAmJiB1bl9zZW50KSkg
ewotCQkvKiB3ZSBjYW4gYXR0ZW1wdCB0byBzZW5kIHRvby4gKi8KLQkJaWYgKGhvbGRfdGNibG9j
ayA9PSAwKSB7Ci0JCQkvKiBJZiB0aGVyZSBpcyBhY3Rpdml0eSByZWN2J2luZyBzYWNrcyBubyBu
ZWVkIHRvIHNlbmQgKi8KLQkJCWlmIChTQ1RQX1RDQl9UUllMT0NLKHN0Y2IpKSB7Ci0JCQkJc2N0
cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5ELCBTQ1RQ
X1NPX0xPQ0tFRCk7Ci0JCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwg
U0NUUF9TT19MT0NLRUQpOwotCQl9Ci0JfSBlbHNlIGlmICgocXVldWVfb25seSA9PSAwKSAmJgot
CSAgICAgICAgICAgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAmJgotCSAgICAgICAgICAg
KHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDApKSB7Ci0JCS8qIFdlIGdldCB0byBoYXZlIGEg
cHJvYmUgb3V0c3RhbmRpbmcgKi8KLQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQlob2xk
X3RjYmxvY2sgPSAxOwotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJfQotCQlzY3RwX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTE9D
S0VEKTsKLQl9IGVsc2UgaWYgKHNvbWVfb25fY29udHJvbCkgewotCQlpbnQgbnVtX291dCwgcmVh
c29uLCBmcmFnX3BvaW50OwotCi0JCS8qIEhlcmUgd2UgZG8gY29udHJvbCBvbmx5ICovCi0JCWlm
IChob2xkX3RjYmxvY2sgPT0gMCkgewotCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7Ci0JCX0KLQkJZnJhZ19wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3Rj
YiwgJnN0Y2ItPmFzb2MpOwotCQkodm9pZClzY3RwX21lZF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCAmc3RjYi0+YXNvYywgJm51bV9vdXQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAm
cmVhc29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgU0NUUF9TT19MT0NL
RUQpOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVTUiBTZW5kIGNvbXBsZXRl
IHFvOiVkIHBydzolZCB1bnNlbnQ6JWQgdGY6JWQgY29vcTolZCB0b3FzOiVkIGVycjolZFxuIiwK
LQkgICAgICAgIHF1ZXVlX29ubHksIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwgdW5fc2VudCwKLQkJ
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSwK
LQkgICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsIGVycm9yKTsKLQot
b3V0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXNidW5sb2NrKCZzby0+c29fc25kLCAxKTsK
LSNlbmRpZgotb3V0X3VubG9ja2VkOgotCi0JaWYgKGxvY2FsX3NvcmVzdiAmJiBzdGNiKSB7Ci0J
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2LCBzbmRsZW4pOwot
CX0KLQlpZiAoY3JlYXRlX2xvY2tfYXBwbGllZCkgewotCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9D
SyhpbnApOwotCX0KLQlpZiAoKHN0Y2IpICYmIGhvbGRfdGNibG9jaykgewotCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JfQotCWlmIChzdGNiICYmIGZyZWVfY250X2FwcGxpZWQpIHsKLQkJYXRv
bWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7Ci0JfQotI2lmZGVmIElOVkFSSUFO
VFMKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCWlmIChzdGNiKSB7Ci0JCWlmIChtdHhfb3du
ZWQoJnN0Y2ItPnRjYl9tdHgpKSB7Ci0JCQlwYW5pYygiTGVhdmluZyB3aXRoIHRjYiBtdHggb3du
ZWQ/Iik7Ci0JCX0KLQkJaWYgKG10eF9vd25lZCgmc3RjYi0+dGNiX3NlbmRfbXR4KSkgewotCQkJ
cGFuaWMoIkxlYXZpbmcgd2l0aCB0Y2Igc2VuZCBtdHggb3duZWQ/Iik7Ci0JCX0KLQl9Ci0jZW5k
aWYKLSNlbmRpZgotI2lmZGVmIF9fUGFuZGFfXwotCS8qCi0JICogSGFuZGxlIHRoZSBFQUdBSU4v
RU5PTUVNIGNhc2VzIHRvIHJlYXR0YWNoIHRoZSBwYWsgaGVhZGVyCi0JICogdG8gcGFydGljbGUg
d2hlbiBwYWsgaXMgcGFzc2VkIGluLCBzbyB0aGF0IGNhbGxlcgotCSAqIGNhbiB0cnkgYWdhaW4g
d2l0aCB0aGlzIHBhawotCSAqCi0JICogTk9URTogRm9yIG90aGVyIGNhc2VzLCBpbmNsdWRpbmcg
c3VjY2VzcyBjYXNlLAotCSAqIHdlIHNpbXBseSB3YW50IHRvIHJldHVybiB0aGUgaGVhZGVyIGJh
Y2sgdG8gZnJlZQotCSAqIHBvb2wKLQkgKi8KLQlpZiAodG9wKSB7Ci0JCWlmICgoZXJyb3IgPT0g
RUFHQUlOKSB8fCAoZXJyb3IgPT0gRU5PTUVNKSkgewotCQkJU0NUUF9BVFRBQ0hfQ0hBSU4oaV9w
YWssIHRvcCwgc25kbGVuKTsKLQkJCXRvcCA9IE5VTEw7Ci0JCX0gZWxzZSB7Ci0JCQkodm9pZClT
Q1RQX1JFTEVBU0VfSEVBREVSKGlfcGFrKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIFRoaXMgaXMg
dG8gaGFuZGxlIGNhc2VzIHdoZW4gdG9wIGhhcwotCQkgKiBiZWVuIHJlc2V0IHRvIE5VTEwgYnV0
IHBhayBtaWdodCBub3QKLQkJICogYmUgZnJlZWQKLQkJICovCi0JCWlmIChpX3BhaykgewotCQkJ
KHZvaWQpU0NUUF9SRUxFQVNFX0hFQURFUihpX3Bhayk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlpZiAo
dG9wKSB7Ci0JCXNjdHBfbV9mcmVlbSh0b3ApOwotCX0KLQlpZiAoY29udHJvbCkgewotCQlzY3Rw
X21fZnJlZW0oY29udHJvbCk7Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCi0KLS8qCi0gKiBn
ZW5lcmF0ZSBhbiBBVVRIZW50aWNhdGlvbiBjaHVuaywgaWYgcmVxdWlyZWQKLSAqLwotc3RydWN0
IG1idWYgKgotc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYg
KiptX2VuZCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0aF9yZXQsIHVpbnQzMl90
ICogb2Zmc2V0LAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDhfdCBjaHVuaykKLXsK
LQlzdHJ1Y3QgbWJ1ZiAqbV9hdXRoOwotCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGg7Ci0J
aW50IGNodW5rX2xlbjsKLQlzdHJ1Y3QgbWJ1ZiAqY247Ci0KLQlpZiAoKG1fZW5kID09IE5VTEwp
IHx8IChhdXRoX3JldCA9PSBOVUxMKSB8fCAob2Zmc2V0ID09IE5VTEwpIHx8Ci0JICAgIChzdGNi
ID09IE5VTEwpKQotCQlyZXR1cm4gKG0pOwotCi0JaWYgKHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0
ZWQgPT0gMCkgewotCQlyZXR1cm4gKG0pOwotCX0KLQkvKiBkb2VzIHRoZSByZXF1ZXN0ZWQgY2h1
bmsgcmVxdWlyZSBhdXRoPyAqLwotCWlmICghc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNo
dW5rLCBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7Ci0JCXJldHVybiAobSk7Ci0JfQot
CW1fYXV0aCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2YoKmF1dGgpLCAwLCBNX05PV0FJ
VCwgMSwgTVRfSEVBREVSKTsKLQlpZiAobV9hdXRoID09IE5VTEwpIHsKLQkJLyogbm8gbWJ1Zidz
ICovCi0JCXJldHVybiAobSk7Ci0JfQotCS8qIHJlc2VydmUgc29tZSBzcGFjZSBpZiB0aGlzIHdp
bGwgYmUgdGhlIGZpcnN0IG1idWYgKi8KLQlpZiAobSA9PSBOVUxMKQotCQlTQ1RQX0JVRl9SRVNW
X1VGKG1fYXV0aCwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCS8qIGZpbGwgaW4gdGhlIEFVVEggY2h1
bmsgZGV0YWlscyAqLwotCWF1dGggPSBtdG9kKG1fYXV0aCwgc3RydWN0IHNjdHBfYXV0aF9jaHVu
ayAqKTsKLQltZW1zZXQoYXV0aCwgMCwgc2l6ZW9mKCphdXRoKSk7Ci0JYXV0aC0+Y2guY2h1bmtf
dHlwZSA9IFNDVFBfQVVUSEVOVElDQVRJT047Ci0JYXV0aC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwot
CWNodW5rX2xlbiA9IHNpemVvZigqYXV0aCkgKwotCSAgICBzY3RwX2dldF9obWFjX2RpZ2VzdF9s
ZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOwotCWF1dGgtPmNoLmNodW5rX2xlbmd0aCA9IGh0
b25zKGNodW5rX2xlbik7Ci0JYXV0aC0+aG1hY19pZCA9IGh0b25zKHN0Y2ItPmFzb2MucGVlcl9o
bWFjX2lkKTsKLQkvKiBrZXkgaWQgYW5kIGhtYWMgZGlnZXN0IHdpbGwgYmUgY29tcHV0ZWQgYW5k
IGZpbGxlZCBpbiB1cG9uIHNlbmQgKi8KLQotCS8qIHNhdmUgdGhlIG9mZnNldCB3aGVyZSB0aGUg
YXV0aCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgY2hhaW4gKi8KLQkqb2Zmc2V0ID0gMDsKLQlmb3Ig
KGNuID0gbTsgY247IGNuID0gU0NUUF9CVUZfTkVYVChjbikpIHsKLQkJKm9mZnNldCArPSBTQ1RQ
X0JVRl9MRU4oY24pOwotCX0KLQotCS8qIHVwZGF0ZSBsZW5ndGggYW5kIHJldHVybiBwb2ludGVy
IHRvIHRoZSBhdXRoIGNodW5rICovCi0JU0NUUF9CVUZfTEVOKG1fYXV0aCkgPSBjaHVua19sZW47
Ci0JbSA9IHNjdHBfY29weV9tYnVmY2hhaW4obV9hdXRoLCBtLCBtX2VuZCwgMSwgY2h1bmtfbGVu
LCAwKTsKLQlpZiAoYXV0aF9yZXQgIT0gTlVMTCkKLQkJKmF1dGhfcmV0ID0gYXV0aDsKLQotCXJl
dHVybiAobSk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAgfHwgZGVmaW5lZChfX0FQ
UExFX18pCi0jaWZkZWYgSU5FVDYKLWludAotc2N0cF92NnNyY19tYXRjaF9uZXh0aG9wKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAqcm8pCi17Ci0Jc3RydWN0IG5kX3By
ZWZpeCAqcGZ4ID0gTlVMTDsKLQlzdHJ1Y3QgbmRfcGZ4cm91dGVyICpwZnhydHIgPSBOVUxMOwot
CXN0cnVjdCBzb2NrYWRkcl9pbjYgZ3c2OwotCi0JaWYgKHJvID09IE5VTEwgfHwgcm8tPnJvX3J0
ID09IE5VTEwgfHwgc3JjNi0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpCi0JCXJldHVybiAoMCk7
Ci0KLQkvKiBnZXQgcHJlZml4IGVudHJ5IG9mIGFkZHJlc3MgKi8KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCU5ENl9STE9DSygpOwotI2VuZGlmCi0JTElTVF9GT1JFQUNIKHBmeCwgJk1PRFVM
RV9HTE9CQUwobmRfcHJlZml4KSwgbmRwcl9lbnRyeSkgewotCQlpZiAocGZ4LT5uZHByX3N0YXRl
ZmxhZ3MgJiBORFBSRl9ERVRBQ0hFRCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoSU42X0FSRV9NQVNL
RURfQUREUl9FUVVBTCgmcGZ4LT5uZHByX3ByZWZpeC5zaW42X2FkZHIsCi0JCSAgICAmc3JjNi0+
c2luNl9hZGRyLCAmcGZ4LT5uZHByX21hc2spKQotCQkJYnJlYWs7Ci0JfQotCS8qIG5vIHByZWZp
eCBlbnRyeSBpbiB0aGUgcHJlZml4IGxpc3QgKi8KLQlpZiAocGZ4ID09IE5VTEwpIHsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlORDZfUlVOTE9DSygpOwotI2VuZGlmCi0JCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQyLCAiTm8gcHJlZml4IGVudHJ5IGZvciAiKTsKLQkJU0NUUERCR19B
RERSKFNDVFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAqKXNyYzYpOwotCQlyZXR1
cm4gKDApOwotCX0KLQotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAidjZzcmNfbWF0Y2hf
bmV4dGhvcCgpLCBQcmVmaXggZW50cnkgaXMgIik7Ci0JU0NUUERCR19BRERSKFNDVFBfREVCVUdf
T1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAqKXNyYzYpOwotCi0JLyogc2VhcmNoIGluc3RhbGxl
ZCBnYXRld2F5IGZyb20gcHJlZml4IGVudHJ5ICovCi0JTElTVF9GT1JFQUNIKHBmeHJ0ciwgJnBm
eC0+bmRwcl9hZHZydHJzLCBwZnJfZW50cnkpIHsKLQkJbWVtc2V0KCZndzYsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCWd3Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lm
ZGVmIEhBVkVfU0lONl9MRU4KLQkJZ3c2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOwotI2VuZGlmCi0JCW1lbWNweSgmZ3c2LnNpbjZfYWRkciwgJnBmeHJ0ci0+cm91dGVy
LT5ydGFkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQyLCAicHJlZml4IHJvdXRlciBpcyAiKTsKLQkJU0NUUERCR19BRERSKFND
VFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAqKSZndzYpOwotCQlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMiwgImluc3RhbGxlZCByb3V0ZXIgaXMgIik7Ci0JCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX09VVFBVVDIsIHJvLT5yb19ydC0+cnRfZ2F0ZXdheSk7Ci0JCWlmIChzY3Rw
X2NtcGFkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZndzYsIHJvLT5yb19ydC0+cnRfZ2F0ZXdheSkp
IHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJTkQ2X1JVTkxPQ0soKTsKLSNlbmRpZgot
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJwZnhyb3V0ZXIgaXMgaW5zdGFsbGVkXG4i
KTsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlO
RDZfUlVOTE9DSygpOwotI2VuZGlmCi0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJwZnhy
b3V0ZXIgaXMgbm90IGluc3RhbGxlZFxuIik7Ci0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgotCi1p
bnQKLXNjdHBfdjRzcmNfbWF0Y2hfbmV4dGhvcChzdHJ1Y3Qgc2N0cF9pZmEgKnNpZmEsIHNjdHBf
cm91dGVfdCAqcm8pCi17Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAq
bWFzazsKLQlzdHJ1Y3QgaWZhZGRyICppZmE7Ci0Jc3RydWN0IGluX2FkZHIgc3JjbmV0YWRkciwg
Z3duZXRhZGRyOwotCi0JaWYgKHJvID09IE5VTEwgfHwgcm8tPnJvX3J0ID09IE5VTEwgfHwKLQkg
ICAgc2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewotCQlyZXR1cm4gKDAp
OwotCX0KLQlpZmEgPSAoc3RydWN0IGlmYWRkciAqKXNpZmEtPmlmYTsKLQltYXNrID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKShpZmEtPmlmYV9uZXRtYXNrKTsKLQlzaW4gPSAmc2lmYS0+YWRkcmVz
cy5zaW47Ci0Jc3JjbmV0YWRkci5zX2FkZHIgPSAoc2luLT5zaW5fYWRkci5zX2FkZHIgJiBtYXNr
LT5zaW5fYWRkci5zX2FkZHIpOwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAibWF0Y2hf
bmV4dGhvcDQ6IHNyYyBhZGRyZXNzIGlzICIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09V
VFBVVDIsICZzaWZhLT5hZGRyZXNzLnNhKTsKLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwg
Im5ldHdvcmsgYWRkcmVzcyBpcyAleFxuIiwgc3JjbmV0YWRkci5zX2FkZHIpOwotCi0Jc2luID0g
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJvLT5yb19ydC0+cnRfZ2F0ZXdheTsKLQlnd25ldGFkZHIu
c19hZGRyID0gKHNpbi0+c2luX2FkZHIuc19hZGRyICYgbWFzay0+c2luX2FkZHIuc19hZGRyKTsK
LQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm1hdGNoX25leHRob3A0OiBuZXh0aG9wIGlz
ICIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsIHJvLT5yb19ydC0+cnRfZ2F0
ZXdheSk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJuZXR3b3JrIGFkZHJlc3MgaXMg
JXhcbiIsIGd3bmV0YWRkci5zX2FkZHIpOwotCWlmIChzcmNuZXRhZGRyLnNfYWRkciA9PSBnd25l
dGFkZHIuc19hZGRyKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuICgwKTsK
LX0KLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLS8qIFRPRE8gX19Vc2Vyc3BhY2VfXyB2
ZXJzaW9ucyBvZiBzY3RwX3ZYc3JjX21hdGNoX25leHRob3AoKS4gKi8KLWludAotc2N0cF92NnNy
Y19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAq
cm8pCi17Ci0gICAgcmV0dXJuICgwKTsKLX0KLWludAotc2N0cF92NHNyY19tYXRjaF9uZXh0aG9w
KHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybykKLXsKLSAgICByZXR1cm4g
KDApOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRw
dXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZGZhZTQ0NzEyY2U4MzMxZDFkNzMwNTg5NDcwMTM3MjljZjBlYjY4Yy4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfb3V0cHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEgKzAsMCBAQAotLyotCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rl
d2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBi
eSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgot
ICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0g
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBf
X0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBo
ZWFkL3N5cy9uZXRpbmV0L3NjdHBfb3V0cHV0LmggMzIxMDM0IDIwMTctMDctMTUgMTk6NTQ6MDNa
IHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX09VVFBVVF9IXwot
I2RlZmluZSBfTkVUSU5FVF9TQ1RQX09VVFBVVF9IXwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2hlYWRlci5oPgotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0KLQotc3RydWN0IG1idWYgKgotc2N0cF9hZGRfYWRkcmVzc2VzX3RvX2lfaWEoc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLQkJCSAgIHN0cnVjdCBzY3RwX3Njb3BpbmcgKnNjb3BlLAotCQkJICAgc3Ry
dWN0IG1idWYgKm1fYXQsCi0JCQkgICBpbnQgY250X2luaXRzX3RvLAotCQkJICAgdWludDE2X3Qg
KnBhZGRpbmdfbGVuLCB1aW50MTZfdCAqY2h1bmtfbGVuKTsKLQotCi1pbnQgc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKLQotCi1p
bnQKLXNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpzY29wZSwKLQkJCSBpbnQg
ZG9fdXBkYXRlKTsKLQotaW50Ci1zY3RwX2lzX2FkZHJfaW5fZXAoc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwgc3RydWN0IHNjdHBfaWZhICppZmEpOwotCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0cF9z
b3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLQkJCSAgICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgIHNjdHBfcm91dGVfdCAqcm8sIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwKLQkJCSAgICAgIGludCBub25fYXNvY19hZGRyX29rLCB1aW50MzJf
dCB2cmZfaWQpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotc2N0cF92NnNyY19tYXRjaF9uZXh0
aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAqcm8pOwotaW50Ci1z
Y3RwX3Y0c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNjdHBfaWZhICpzaWZhLCBzY3RwX3JvdXRl
X3QgKnJvKTsKLSNlbmRpZgotCi12b2lkIHNjdHBfc2VuZF9pbml0aWF0ZShzdHJ1Y3Qgc2N0cF9p
bnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlm
Ci0gICAgKTsKLQotdm9pZAotc2N0cF9zZW5kX2luaXRpYXRlX2FjayhzdHJ1Y3Qgc2N0cF9pbnBj
YiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfbmV0cyAqLCBzdHJ1Y3QgbWJ1ZiAqLAotICAgICAgICAgICAgICAgICAgICAgICBpbnQsIGlu
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2Nr
YWRkciAqLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCBzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rICosCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3QsIHVpbnQxNl90LCBpbnQpOwotCi1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2Fy
ZXRoZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKHN0cnVjdCBtYnVmICosIGludCwgaW50ICos
Ci0JCQkJICAgICAgc3RydWN0IHNjdHBfY2h1bmtoZHIgKiwgaW50ICopOwotdm9pZCBzY3RwX3F1
ZXVlX29wX2VycihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYgKik7Ci0KLWludAotc2N0
cF9zZW5kX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICosIGludCwgc3RydWN0IHNjdHBfdGNiICos
Ci0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLQotdm9pZCBzY3RwX3NlbmRfY29va2llX2Fjayhz
dHJ1Y3Qgc2N0cF90Y2IgKik7Ci0KLXZvaWQKLXNjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0cnVj
dCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKLSAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICopOwotCi12b2lkCi1zY3RwX3JlbW92ZV9mcm9tX3doZWVsKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQkJCQkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJCSAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIGludCBob2xkc19sb2NrKTsKLQotCi12b2lkIHNj
dHBfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsK
LQotdm9pZCBzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qg
c2N0cF9uZXRzICopOwotCi12b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qg
c2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQpOwotCi12b2lkIHNjdHBfc2VuZF9z
aHV0ZG93bl9jb21wbGV0ZTIoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OF90LCB1aW50MzJfdCwgdWludDE2X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOwotCi12b2lkIHNjdHBfc2VuZF9hc2Nv
bmYoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50IGFkZHJfbG9ja2Vk
KTsKLQotdm9pZCBzY3RwX3NlbmRfYXNjb25mX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKik7Ci0KLWlu
dCBzY3RwX2dldF9mcmFnX3BvaW50KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqKTsKLQotdm9pZCBzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RydWN0IHNjdHBfdGNi
ICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwotCi12b2lkIHNjdHBfdG9zc19vbGRfYXNj
b25mKHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotdm9pZCBzY3RwX2ZpeF9lY25fZWNobyhzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZCBzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQotCi0jZGVmaW5l
IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSAoKHN0Y2IpLT5hc29jLmlkYXRhX3N1cHBv
cnRlZCA/IFwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX2lkYXRhX2NodW5rKSA6IFwKLQkJCQkJ
c2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1pbnQKLXNjdHBfb3V0cHV0KHN0cnVj
dCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2NrYWRkciAqLAotICAgIHN0
cnVjdCBtYnVmICosIHN0cnVjdCB0aHJlYWQgKiwgaW50KTsKLSNlbGlmIGRlZmluZWQoX19XaW5k
b3dzX18pCi1zY3RwX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3QgbWJ1ZiAqLCBQS1RIUkVBRCwgaW50KTsKLSNl
bHNlCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotLyogc2N0cF9vdXRwdXQgaXMgY2FsbGVk
IGJ1IHNjdHBfc2VuZG0uIE5vdCB1c2luZyBzY3RwX3NlbmRtIGZvciBfX1VzZXJzcGFjZV9fICov
Ci0jZW5kaWYKLWludAotc2N0cF9vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwKLSNpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLSAgICBwYWtoYW5kbGVfdHlwZSwKLSNlbHNlCi0gICAgc3RydWN0IG1i
dWYgKiwKLSNlbmRpZgotICAgIHN0cnVjdCBzb2NrYWRkciAqLAotI2lmIGRlZmluZWQoX19QYW5k
YV9fKQotICAgIHBha2hhbmRsZV90eXBlLAotI2Vsc2UKLSAgICBzdHJ1Y3QgbWJ1ZiAqLAotI2Vu
ZGlmCi0gICAgc3RydWN0IHByb2MgKiwgaW50KTsKLSNlbmRpZgotCi12b2lkIHNjdHBfY2h1bmtf
b3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQsIGludAot
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICk7Ci12b2lkIHNjdHBfc2VuZF9hYm9ydF90
Y2Ioc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBtYnVmICosIGludAotI2lmICFkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVT
RUQKLSNlbmRpZgotICAgICk7Ci0KLXZvaWQgc2VuZF9mb3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90
Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Ci0KLXZvaWQgc2N0cF9zZW5kX3NhY2so
c3RydWN0IHNjdHBfdGNiICosIGludCk7Ci0KLXZvaWQgc2N0cF9zZW5kX2hiKHN0cnVjdCBzY3Rw
X3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCk7Ci0KLXZvaWQgc2N0cF9zZW5kX2Vjbl9l
Y2hvKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIHVpbnQzMl90KTsKLQot
Ci12b2lkCi1zY3RwX3NlbmRfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVj
dCBzY3RwX25ldHMgKiwgc3RydWN0IG1idWYgKiwKLSAgICBpbnQsIGludCwgaW50KTsKLQotCi0K
LXZvaWQgc2N0cF9zZW5kX2N3cihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAq
LCB1aW50MzJfdCwgdWludDhfdCk7Ci0KLQotdm9pZAotc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jl
c3VsdChzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICosIHVpbnQzMl90LCB1aW50MzJfdCk7Ci0KLXZv
aWQKLXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25zZShzdHJ1Y3Qgc2N0cF90Y2IgKiwK
LQkJCQkgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICosCi0JCQkJICBpbnQpOwotCi12
b2lkCi1zY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDMy
X3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci1pbnQKLXNjdHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0
X2lmX3Bvc3NpYmxlKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOwotCi1pbnQKLXNjdHBfc2VuZF9z
dHJfcmVzZXRfcmVxKHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50MTZfdCAsIHVpbnQxNl90ICosCi0g
ICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50OF90LCB1aW50OF90LCB1aW50MTZf
dCwgdWludDE2X3QsIHVpbnQ4X3QpOwotCi12b2lkCi1zY3RwX3NlbmRfYWJvcnQoc3RydWN0IG1i
dWYgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgdWludDMyX3QsIHN0cnVjdCBtYnVmICosCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50MzJfdCwg
dWludDE2X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOwot
Ci12b2lkIHNjdHBfc2VuZF9vcGVycl90byhzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2th
ZGRyICosCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCB1aW50MzJf
dCwgc3RydWN0IG1idWYgKiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsIHVpbnQxNl90LAotI2VuZGlmCi0gICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOwotCi0jZW5kaWYgLyogX0tFUk5F
TCB8fCBfX1VzZXJzcGFjZV9fICovCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLWludAotc2N0cF9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sCi0gICAg
c3RydWN0IHNvY2thZGRyICphZGRyLAotICAgIHN0cnVjdCB1aW8gKnVpbywKLSNpZmRlZiBfX1Bh
bmRhX18KLSAgICBwYWtoYW5kbGVfdHlwZSB0b3AsCi0gICAgcGFraGFuZGxlX3R5cGUgY29udHJv
bCwKLSNlbHNlCi0gICAgc3RydWN0IG1idWYgKnRvcCwKLSAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJv
bCwKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykK
LSAgICBpbnQgZmxhZ3MKLSNlbHNlCi0gICAgaW50IGZsYWdzLAotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotICAgIHN0cnVjdCB0aHJlYWQg
KnAKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0gICAgUEtUSFJFQUQgcAotI2Vsc2UKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0gICAgLyogcHJvYyBpcyBhIGR1bW15IGluIF9fVXNl
cnNwYWNlX18gYW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0byBzY3RwX2xvd2VyX3Nvc2VuZCAqLwot
I2VuZGlmCi0gICAgc3RydWN0IHByb2MgKnAKLSNlbmRpZgotI2VuZGlmCi0pOwotCi0jZW5kaWYK
LSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQw
Yzc3MGUzMDc4ZDk3MDdjOGUzY2RkOTc0YWE2ODIyMzcyMDRkZDIuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5j
CisrKyAvZGV2L251bGwKQEAgLTEsODE4MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cF9wY2IuYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNp
bmNsdWRlIDxzeXMvcHJvYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfcGNiLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9i
c2RfYWRkci5oPgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDEwMDAwMDAKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfZHRyYWNlX2RlZmluZS5oPgotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaW5jbHVk
ZSAidXNlcl9pcDZfdmFyLmgiCi0jZWxzZQotI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4K
LSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpbmNsdWRlIDxzeXMv
c2NoZWQuaD4KLSNpbmNsdWRlIDxzeXMvc21wLmg+Ci0jaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2luY2x1ZGUgPHVzZXJfc29ja2V0
dmFyLmg+Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxu
ZXRkYi5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmlu
ZSBBUFBMRV9GSUxFX05PIDQKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi1WTkVUX0RFRklORShzdHJ1Y3Qgc2N0cF9iYXNl
X2luZm8sIHN5c3RlbV9iYXNlX2luZm8pOwotI2Vsc2UKLXN0cnVjdCBzY3RwX2Jhc2VfaW5mbyBz
eXN0ZW1fYmFzZV9pbmZvOwotI2VuZGlmCi0KLS8qIEZJWDogd2UgZG9uJ3QgaGFuZGxlIG11bHRp
cGxlIGxpbmsgbG9jYWwgc2NvcGVzICovCi0vKiAic2NvcGVsZXNzIiByZXBsYWNlbWVudCBJTjZf
QVJFX0FERFJfRVFVQUwgKi8KLSNpZmRlZiBJTkVUNgotaW50Ci1TQ1RQNl9BUkVfQUREUl9FUVVB
TChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpiKQotewotI2lm
ZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlzdHJ1
Y3QgaW42X2FkZHIgdG1wX2EsIHRtcF9iOwotCi0JdG1wX2EgPSBhLT5zaW42X2FkZHI7Ci0jaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQotCWlm
IChpbjZfZW1iZWRzY29wZSgmdG1wX2EsIGEsIE5VTEwsIE5VTEwpICE9IDApIHsKLSNlbHNlCi0J
aWYgKGluNl9lbWJlZHNjb3BlKCZ0bXBfYSwgYSwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkgewot
I2VuZGlmCi0JCXJldHVybiAoMCk7Ci0JfQotCXRtcF9iID0gYi0+c2luNl9hZGRyOwotI2lmIGRl
ZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKLQlpZiAo
aW42X2VtYmVkc2NvcGUoJnRtcF9iLCBiLCBOVUxMLCBOVUxMKSAhPSAwKSB7Ci0jZWxzZQotCWlm
IChpbjZfZW1iZWRzY29wZSgmdG1wX2IsIGIsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApIHsKLSNl
bmRpZgotCQlyZXR1cm4gKDApOwotCX0KLQlyZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgmdG1w
X2EsICZ0bXBfYikpOwotI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCi0Jc3RydWN0IHNvY2thZGRy
X2luNiB0bXBfYSwgdG1wX2I7Ci0KLQltZW1jcHkoJnRtcF9hLCBhLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpOwotCWlmIChzYTZfZW1iZWRzY29wZSgmdG1wX2EsIE1PRFVMRV9HTE9CQUwo
aXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkgewotCQlyZXR1cm4gKDApOwotCX0KLQltZW1jcHkoJnRt
cF9iLCBiLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCWlmIChzYTZfZW1iZWRzY29w
ZSgmdG1wX2IsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkgewotCQlyZXR1
cm4gKDApOwotCX0KLQlyZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgmdG1wX2Euc2luNl9hZGRy
LCAmdG1wX2Iuc2luNl9hZGRyKSk7Ci0jZWxzZQotCXN0cnVjdCBpbjZfYWRkciB0bXBfYSwgdG1w
X2I7Ci0KLQl0bXBfYSA9IGEtPnNpbjZfYWRkcjsKLQlpZiAoaW42X2VtYmVkc2NvcGUoJnRtcF9h
LCBhKSAhPSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXRtcF9iID0gYi0+c2luNl9hZGRyOwot
CWlmIChpbjZfZW1iZWRzY29wZSgmdG1wX2IsIGIpICE9IDApIHsKLQkJcmV0dXJuICgwKTsKLQl9
Ci0JcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9hLCAmdG1wX2IpKTsKLSNlbmRpZgot
I2Vsc2UKLQlyZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgmKGEtPnNpbjZfYWRkciksICYoYi0+
c2luNl9hZGRyKSkpOwotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLX0KLSNl
bmRpZgotCi12b2lkCi1zY3RwX2ZpbGxfcGNiaW5mbyhzdHJ1Y3Qgc2N0cF9wY2JpbmZvICpzcGNi
KQotewotCS8qCi0JICogV2UgcmVhbGx5IGRvbid0IG5lZWQgdG8gbG9jayB0aGlzLCBidXQgSSB3
aWxsIGp1c3QgYmVjYXVzZSBpdAotCSAqIGRvZXMgbm90IGh1cnQuCi0JICovCi0JU0NUUF9JTlBf
SU5GT19STE9DSygpOwotCXNwY2ItPmVwX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2VwKTsKLQlzcGNiLT5hc29jX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2Mp
OwotCXNwY2ItPmxhZGRyX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2xhZGRyKTsK
LQlzcGNiLT5yYWRkcl9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9yYWRkcik7Ci0J
c3BjYi0+Y2hrX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2NodW5rKTsKLQlzcGNi
LT5yZWFkcV9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9yZWFkcSk7Ci0Jc3BjYi0+
c3RyZWFtX29xdWUgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfc3RybW9xKTsKLQlzcGNiLT5m
cmVlX2NodW5rcyA9IFNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5rcyk7Ci0JU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7Ci19Ci0KLS8qLQotICogQWRkcmVzc2VzIGFyZSBhZGRlZCB0byBWUkYn
cyAoVmlydHVhbCBSb3V0ZXIncykuIEZvciBCU0Qgd2UKLSAqIGhhdmUgb25seSB0aGUgZGVmYXVs
dCBWUkYgMC4gV2UgbWFpbnRhaW4gYSBoYXNoIGxpc3Qgb2YKLSAqIFZSRidzLiBFYWNoIFZSRiBo
YXMgaXRzIG93biBsaXN0IG9mIHNjdHBfaWZuJ3MuIEVhY2ggb2YKLSAqIHRoZXNlIGhhcyBhIGxp
c3Qgb2YgYWRkcmVzc2VzLiBXaGVuIHdlIGFkZCBhIG5ldyBhZGRyZXNzCi0gKiB0byBhIFZSRiB3
ZSBsb29rdXAgdGhlIGlmbi9pZm5faW5kZXgsIGlmIHRoZSBpZm4gZG9lcwotICogbm90IGV4aXN0
IHdlIGNyZWF0ZSBpdCBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIElGTidzCi0gKiB3aXRoaW4g
dGhlIFZSRi4gT25jZSB3ZSBoYXZlIHRoZSBzY3RwX2lmbiwgd2UgYWRkIHRoZQotICogYWRkcmVz
cyB0byB0aGUgbGlzdC4gU28gd2UgbG9vayBzb21ldGhpbmcgbGlrZToKLSAqCi0gKiBoYXNoLXZy
Zi10YWJsZQotICogICB2cmYtPiBpZm4tPiBpZm4gLT4gaWZuCi0gKiAgIHZyZiAgICB8Ci0gKiAg
ICAuLi4gICArLS1pZmEtPiBpZmEgLT4gaWZhCi0gKiAgIHZyZgotICoKLSAqIFdlIGtlZXAgdGhl
c2Ugc2VwYXJhdGUgbGlzdHMgc2luY2UgdGhlIFNDVFAgc3Vic3lzdGVtIHdpbGwKLSAqIHBvaW50
IHRvIHRoZXNlIGZyb20gaXRzIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbiBuZXRzIHN0cnVjdHVy
ZS4KLSAqIFdoZW4gYW4gYWRkcmVzcyBpcyBkZWxldGVkIGl0IGRvZXMgbm90IGhhcHBlbiByaWdo
dCBhd2F5IG9uCi0gKiB0aGUgU0NUUCBzaWRlLCBpdCBnZXRzIHNjaGVkdWxlZC4gV2hhdCB3ZSBk
byB3aGVuIGEKLSAqIGRlbGV0ZSBoYXBwZW5zIGlzIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgYWRk
cmVzcyBmcm9tCi0gKiB0aGUgbWFzdGVyIGxpc3QgYW5kIGRlY3JlbWVudCB0aGUgcmVmY291bnQu
IEFzIG91cgotICogYWRkaXAgaXRlcmF0b3Igd29ya3MgdGhyb3VnaCBhbmQgZnJlZXMgdGhlIHNy
YyBhZGRyZXNzCi0gKiBzZWxlY3Rpb24gcG9pbnRpbmcgdG8gdGhlIHNjdHBfaWZhLCBldmVudHVh
bGx5IHRoZSByZWZjb3VudAotICogd2lsbCByZWFjaCAwIGFuZCB3ZSB3aWxsIGRlbGV0ZSBpdC4g
Tm90ZSB0aGF0IGl0IGlzIGFzc3VtZWQKLSAqIHRoYXQgYW55IGxvY2tpbmcgb24gc3lzdGVtIGxl
dmVsIGlmbi9pZmEgaXMgZG9uZSBhdCB0aGUKLSAqIGNhbGxlciBvZiB0aGVzZSBmdW5jdGlvbnMg
YW5kIHRoZXNlIHJvdXRpbmVzIHdpbGwgb25seQotICogbG9jayB0aGUgU0NUUCBzdHJ1Y3R1cmVz
IGFzIHRoZXkgYWRkIG9yIGRlbGV0ZSB0aGluZ3MuCi0gKgotICogT3RoZXIgbm90ZXMgb24gVlJG
IGNvbmNlcHRzLgotICogIC0gQW4gZW5kcG9pbnQgY2FuIGJlIGluIG11bHRpcGxlIFZSRidzCi0g
KiAgLSBBbiBhc3NvY2lhdGlvbiBsaXZlcyB3aXRoaW4gYSBWUkYgYW5kIG9ubHkgb25lIFZSRi4K
LSAqICAtIEFueSBpbmNvbWluZyBwYWNrZXQgd2UgY2FuIGRlZHVjZSB0aGUgVlJGIGZvciBieQot
ICogICAgbG9va2luZyBhdCB0aGUgbWJ1Zi9wYWsgaW5ib3VuZCAoZm9yIEJTRCBpdHMgVlJGPTAg
OkQpCi0gKiAgLSBBbnkgZG93bndhcmQgc2VuZCBjYWxsIG9yIGNvbm5lY3QgY2FsbCBtdXN0IHN1
cHBseSB0aGUKLSAqICAgIFZSRiB2aWEgYW5jaWxsYXJ5IGRhdGEgb3IgdmlhIHNvbWUgc29ydCBv
ZiBzZXQgZGVmYXVsdAotICogICAgVlJGIHNvY2tldCBvcHRpb24gY2FsbCAoYWdhaW4gZm9yIEJT
RCBubyBicmFpbmVyIHNpbmNlCi0gKiAgICB0aGUgVlJGIGlzIGFsd2F5cyAwKS4KLSAqICAtIEFu
IGVuZHBvaW50IG1heSBhZGQgbXVsdGlwbGUgVlJGJ3MgdG8gaXQuCi0gKiAgLSBMaXN0ZW5pbmcg
c29ja2V0cyBjYW4gYWNjZXB0IGFzc29jaWF0aW9ucyBpbiBhbnkKLSAqICAgIG9mIHRoZSBWUkYn
cyB0aGV5IGFyZSBpbiBidXQgdGhlIGFzc29jIHdpbGwgZW5kIHVwCi0gKiAgICBpbiBvbmx5IG9u
ZSBWUkYgKGdvdHRlbiBmcm9tIHRoZSBwYWNrZXQgb3IgY29ubmVjdC9zZW5kKS4KLSAqCi0gKi8K
LQotc3RydWN0IHNjdHBfdnJmICoKLXNjdHBfYWxsb2NhdGVfdnJmKGludCB2cmZfaWQpCi17Ci0J
c3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOwotCXN0cnVjdCBzY3RwX3ZyZmxpc3QgKmJ1Y2tl
dDsKLQotCS8qIEZpcnN0IGFsbG9jYXRlIHRoZSBWUkYgc3RydWN0dXJlICovCi0JdnJmID0gc2N0
cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYpIHsKLQkJLyogQWxyZWFkeSBhbGxvY2F0ZWQg
Ki8KLQkJcmV0dXJuICh2cmYpOwotCX0KLQlTQ1RQX01BTExPQyh2cmYsIHN0cnVjdCBzY3RwX3Zy
ZiAqLCBzaXplb2Yoc3RydWN0IHNjdHBfdnJmKSwKLQkJICAgIFNDVFBfTV9WUkYpOwotCWlmICh2
cmYgPT0gTlVMTCkgewotCQkvKiBObyBtZW1vcnkgKi8KLSNpZmRlZiBJTlZBUklBTlRTCi0JCXBh
bmljKCJObyBtZW1vcnkgZm9yIFZSRjolZCIsIHZyZl9pZCk7Ci0jZW5kaWYKLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JLyogc2V0dXAgdGhlIFZSRiAqLwotCW1lbXNldCh2cmYsIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF92cmYpKTsKLQl2cmYtPnZyZl9pZCA9IHZyZl9pZDsKLQlMSVNUX0lOSVQoJnZy
Zi0+aWZubGlzdCk7Ci0JdnJmLT50b3RhbF9pZmFfY291bnQgPSAwOwotCXZyZi0+cmVmY291bnQg
PSAwOwotCS8qIG5vdyBhbHNvIHNldHVwIHRhYmxlIGlkcyAqLwotCVNDVFBfSU5JVF9WUkZfVEFC
TEVJRCh2cmYpOwotCS8qIEluaXQgdGhlIEhBU0ggb2YgYWRkcmVzc2VzICovCi0JdnJmLT52cmZf
YWRkcl9oYXNoID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9WUkZfQUREUl9IQVNIX1NJWkUsCi0JCQkJ
CSAgICAmdnJmLT52cmZfYWRkcl9oYXNobWFyayk7Ci0JaWYgKHZyZi0+dnJmX2FkZHJfaGFzaCA9
PSBOVUxMKSB7Ci0JCS8qIE5vIG1lbW9yeSAqLwotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMo
Ik5vIG1lbW9yeSBmb3IgVlJGOiVkIiwgdnJmX2lkKTsKLSNlbmRpZgotCQlTQ1RQX0ZSRUUodnJm
LCBTQ1RQX01fVlJGKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQkvKiBBZGQgaXQgdG8gdGhl
IGhhc2ggdGFibGUgKi8KLQlidWNrZXQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF92cmZoYXNoKVso
dnJmX2lkICYgU0NUUF9CQVNFX0lORk8oaGFzaHZyZm1hcmspKV07Ci0JTElTVF9JTlNFUlRfSEVB
RChidWNrZXQsIHZyZiwgbmV4dF92cmYpOwotCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5G
TyhpcGlfY291bnRfdnJmcyksIDEpOwotCXJldHVybiAodnJmKTsKLX0KLQotCi1zdHJ1Y3Qgc2N0
cF9pZm4gKgotc2N0cF9maW5kX2lmbih2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCkKLXsK
LQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKLQlzdHJ1Y3Qgc2N0cF9pZm5saXN0ICpoYXNo
X2lmbl9oZWFkOwotCi0JLyogV2UgYXNzdW1lIHRoZSBsb2NrIGlzIGhlbGQgZm9yIHRoZSBhZGRy
ZXNzZXMKLQkgKiBpZiB0aGF0J3Mgd3JvbmcgcHJvYmxlbXMgY291bGQgb2NjdXIgOi0pCi0JICov
Ci0JaGFzaF9pZm5faGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2gpWyhpZm5faW5k
ZXggJiBTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSldOwotCUxJU1RfRk9SRUFDSChz
Y3RwX2lmbnAsIGhhc2hfaWZuX2hlYWQsIG5leHRfYnVja2V0KSB7Ci0JCWlmIChzY3RwX2lmbnAt
Pmlmbl9pbmRleCA9PSBpZm5faW5kZXgpIHsKLQkJCXJldHVybiAoc2N0cF9pZm5wKTsKLQkJfQot
CQlpZiAoc2N0cF9pZm5wLT5pZm5fcCAmJiBpZm4gJiYgKHNjdHBfaWZucC0+aWZuX3AgPT0gaWZu
KSkgewotCQkJcmV0dXJuIChzY3RwX2lmbnApOwotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19
Ci0KLQotc3RydWN0IHNjdHBfdnJmICoKLXNjdHBfZmluZF92cmYodWludDMyX3QgdnJmX2lkKQot
ewotCXN0cnVjdCBzY3RwX3ZyZmxpc3QgKmJ1Y2tldDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKmxpc3Rl
OwotCi0JYnVja2V0ID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdnJmaGFzaClbKHZyZl9pZCAmIFND
VFBfQkFTRV9JTkZPKGhhc2h2cmZtYXJrKSldOwotCUxJU1RfRk9SRUFDSChsaXN0ZSwgYnVja2V0
LCBuZXh0X3ZyZikgewotCQlpZiAodnJmX2lkID09IGxpc3RlLT52cmZfaWQpIHsKLQkJCXJldHVy
biAobGlzdGUpOwotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotdm9pZAotc2N0cF9m
cmVlX3ZyZihzdHJ1Y3Qgc2N0cF92cmYgKnZyZikKLXsKLQlpZiAoU0NUUF9ERUNSRU1FTlRfQU5E
X0NIRUNLX1JFRkNPVU5UKCZ2cmYtPnJlZmNvdW50KSkgewotICAgICAgICAgICAgICAgIGlmICh2
cmYtPnZyZl9hZGRyX2hhc2gpIHsKLSAgICAgICAgICAgICAgICAgICAgU0NUUF9IQVNIX0ZSRUUo
dnJmLT52cmZfYWRkcl9oYXNoLCB2cmYtPnZyZl9hZGRyX2hhc2htYXJrKTsKLSAgICAgICAgICAg
ICAgICAgICAgdnJmLT52cmZfYWRkcl9oYXNoID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9Ci0J
CS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KLQkJTElTVF9SRU1PVkUodnJmLCBuZXh0X3ZyZik7
Ci0JCVNDVFBfRlJFRSh2cmYsIFNDVFBfTV9WUkYpOwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZT
Q1RQX0JBU0VfSU5GTyhpcGlfY291bnRfdnJmcyksIDEpOwotCX0KLX0KLQotCi12b2lkCi1zY3Rw
X2ZyZWVfaWZuKHN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wKQotewotCWlmIChTQ1RQX0RFQ1JF
TUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoJnNjdHBfaWZucC0+cmVmY291bnQpKSB7Ci0JCS8qIFdl
IHplcm8nZCB0aGUgY291bnQgKi8KLQkJaWYgKHNjdHBfaWZucC0+dnJmKSB7Ci0JCQlzY3RwX2Zy
ZWVfdnJmKHNjdHBfaWZucC0+dnJmKTsKLQkJfQotCQlTQ1RQX0ZSRUUoc2N0cF9pZm5wLCBTQ1RQ
X01fSUZOKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2lmbnMpLCAxKTsKLQl9Ci19Ci0KLQotdm9pZAotc2N0cF91cGRhdGVfaWZuX210dSh1aW50MzJf
dCBpZm5faW5kZXgsIHVpbnQzMl90IG10dSkKLXsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZu
cDsKLQotCXNjdHBfaWZucCA9IHNjdHBfZmluZF9pZm4oKHZvaWQgKilOVUxMLCBpZm5faW5kZXgp
OwotCWlmIChzY3RwX2lmbnAgIT0gTlVMTCkgewotCQlzY3RwX2lmbnAtPmlmbl9tdHUgPSBtdHU7
Ci0JfQotfQotCi0KLXZvaWQKLXNjdHBfZnJlZV9pZmEoc3RydWN0IHNjdHBfaWZhICpzY3RwX2lm
YXApCi17Ci0JaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmc2N0cF9pZmFw
LT5yZWZjb3VudCkpIHsKLQkJLyogV2UgemVybydkIHRoZSBjb3VudCAqLwotCQlpZiAoc2N0cF9p
ZmFwLT5pZm5fcCkgewotCQkJc2N0cF9mcmVlX2lmbihzY3RwX2lmYXAtPmlmbl9wKTsKLQkJfQot
CQlTQ1RQX0ZSRUUoc2N0cF9pZmFwLCBTQ1RQX01fSUZBKTsKLQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2lmYXMpLCAxKTsKLQl9Ci19Ci0KLQotc3RhdGlj
IHZvaWQKLXNjdHBfZGVsZXRlX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCwgaW50IGhv
bGRfYWRkcl9sb2NrKQotewotCXN0cnVjdCBzY3RwX2lmbiAqZm91bmQ7Ci0KLQlmb3VuZCA9IHNj
dHBfZmluZF9pZm4oc2N0cF9pZm5wLT5pZm5fcCwgc2N0cF9pZm5wLT5pZm5faW5kZXgpOwotCWlm
IChmb3VuZCA9PSBOVUxMKSB7Ci0JCS8qIE5vdCBpbiB0aGUgbGlzdC4uIHNvcnJ5ICovCi0JCXJl
dHVybjsKLQl9Ci0JaWYgKGhvbGRfYWRkcl9sb2NrID09IDApCi0JCVNDVFBfSVBJX0FERFJfV0xP
Q0soKTsKLQlMSVNUX1JFTU9WRShzY3RwX2lmbnAsIG5leHRfYnVja2V0KTsKLQlMSVNUX1JFTU9W
RShzY3RwX2lmbnAsIG5leHRfaWZuKTsKLQlTQ1RQX0RFUkVHSVNURVJfSU5URVJGQUNFKHNjdHBf
aWZucC0+aWZuX2luZGV4LAotCQkJCSAgc2N0cF9pZm5wLT5yZWdpc3RlcmVkX2FmKTsKLQlpZiAo
aG9sZF9hZGRyX2xvY2sgPT0gMCkKLQkJU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7Ci0JLyogVGFr
ZSBhd2F5IHRoZSByZWZlcmVuY2UsIGFuZCBwb3NzaWJseSBmcmVlIGl0ICovCi0Jc2N0cF9mcmVl
X2lmbihzY3RwX2lmbnApOwotfQotCi0KLXZvaWQKLXNjdHBfbWFya19pZmFfYWRkcl9kb3duKHVp
bnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJY29uc3QgY2hhciAqaWZf
bmFtZSwgdWludDMyX3QgaWZuX2luZGV4KQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXN0
cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOwotCi0JU0NUUF9JUElfQUREUl9STE9DSygpOwotCXZy
ZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHZyZl9pZCAweCV4XG4iLCB2cmZfaWQpOwot
CQlnb3RvIG91dDsKLQotCX0KLQlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRk
ciwgdnJmLT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOwotCWlmIChzY3RwX2lmYXAgPT0gTlVM
TCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNhbid0IGZpbmQgc2N0cF9pZmFwIGZv
ciBhZGRyZXNzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChzY3RwX2lmYXAtPmlmbl9wID09
IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEgaGFzIG5vIElGTiAtIGNh
bid0IG1hcmsgdW51c2FibGVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGlmX25hbWUpIHsK
LQkJaWYgKHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsIFNDVFBf
SUZOQU1TSVopICE9IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZOICVzIG9m
IElGQSBub3QgdGhlIHNhbWUgYXMgJXNcbiIsCi0JCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25h
bWUsIGlmX25hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoc2N0cF9p
ZmFwLT5pZm5fcC0+aWZuX2luZGV4ICE9IGlmbl9pbmRleCkgewotCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1BDQjQsICJJRkEgb3duZWQgYnkgaWZuX2luZGV4OiVkIGRvd24gY29tbWFuZCBmb3IgaWZu
X2luZGV4OiVkIC0gaWdub3JlZFxuIiwKLQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgs
IGlmbl9pbmRleCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXNjdHBfaWZhcC0+bG9jYWxp
ZmFfZmxhZ3MgJj0gKH5TQ1RQX0FERFJfVkFMSUQpOwotCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxh
Z3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0gb3V0OgotCVNDVFBfSVBJX0FERFJfUlVO
TE9DSygpOwotfQotCi0KLXZvaWQKLXNjdHBfbWFya19pZmFfYWRkcl91cCh1aW50MzJfdCB2cmZf
aWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJICAgICAgY29uc3QgY2hhciAqaWZfbmFtZSwg
dWludDMyX3QgaWZuX2luZGV4KQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmFwOwotCi0JU0NUUF9JUElfQUREUl9STE9DSygpOwotCXZyZiA9IHNj
dHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHZyZl9pZCAweCV4XG4iLCB2cmZfaWQpOwotCQlnb3Rv
IG91dDsKLQotCX0KLQlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJm
LT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOwotCWlmIChzY3RwX2lmYXAgPT0gTlVMTCkgewot
CQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNhbid0IGZpbmQgc2N0cF9pZmFwIGZvciBhZGRy
ZXNzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChzY3RwX2lmYXAtPmlmbl9wID09IE5VTEwp
IHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEgaGFzIG5vIElGTiAtIGNhbid0IG1h
cmsgdW51c2FibGVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGlmX25hbWUpIHsKLQkJaWYg
KHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsIFNDVFBfSUZOQU1T
SVopICE9IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZOICVzIG9mIElGQSBu
b3QgdGhlIHNhbWUgYXMgJXNcbiIsCi0JCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsIGlm
X25hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlpZiAoc2N0cF9pZmFwLT5p
Zm5fcC0+aWZuX2luZGV4ICE9IGlmbl9pbmRleCkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BD
QjQsICJJRkEgb3duZWQgYnkgaWZuX2luZGV4OiVkIGRvd24gY29tbWFuZCBmb3IgaWZuX2luZGV4
OiVkIC0gaWdub3JlZFxuIiwKLQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIGlmbl9p
bmRleCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxh
Z3MgJj0gKH5TQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSk7Ci0Jc2N0cF9pZmFwLT5sb2NhbGlmYV9m
bGFncyB8PSBTQ1RQX0FERFJfVkFMSUQ7Ci0gb3V0OgotCVNDVFBfSVBJX0FERFJfUlVOTE9DSygp
OwotfQotCi0KLS8qLQotICogQWRkIGFuIGlmYSB0byBhbiBpZm4uCi0gKiBSZWdpc3RlciB0aGUg
aW50ZXJmYWNlIGFzIG5lY2Vzc2FyeS4KLSAqIE5PVEU6IEFERFIgd3JpdGUgbG9jayBNVVNUIGJl
IGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX2FkZF9pZmFfdG9faWZuKHN0cnVjdCBzY3Rw
X2lmbiAqc2N0cF9pZm5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCkKLXsKLQlpbnQgaWZh
X2FmOwotCi0JTElTVF9JTlNFUlRfSEVBRCgmc2N0cF9pZm5wLT5pZmFsaXN0LCBzY3RwX2lmYXAs
IG5leHRfaWZhKTsKLQlzY3RwX2lmYXAtPmlmbl9wID0gc2N0cF9pZm5wOwotCWF0b21pY19hZGRf
aW50KCZzY3RwX2lmYXAtPmlmbl9wLT5yZWZjb3VudCwgMSk7Ci0JLyogdXBkYXRlIGFkZHJlc3Mg
Y291bnRzICovCi0Jc2N0cF9pZm5wLT5pZmFfY291bnQrKzsKLQlpZmFfYWYgPSBzY3RwX2lmYXAt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5OwotCXN3aXRjaCAoaWZhX2FmKSB7Ci0jaWZkZWYgSU5FVAot
CWNhc2UgQUZfSU5FVDoKLQkJc2N0cF9pZm5wLT5udW1fdjQrKzsKLQkJYnJlYWs7Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCXNjdHBfaWZucC0+bnVtX3Y2Kys7Ci0J
CWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCWlmIChzY3RwX2lmbnAt
PmlmYV9jb3VudCA9PSAxKSB7Ci0JCS8qIHJlZ2lzdGVyIHRoZSBuZXcgaW50ZXJmYWNlICovCi0J
CVNDVFBfUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZucC0+aWZuX2luZGV4LCBpZmFfYWYpOwot
CQlzY3RwX2lmbnAtPnJlZ2lzdGVyZWRfYWYgPSBpZmFfYWY7Ci0JfQotfQotCi0KLS8qLQotICog
UmVtb3ZlIGFuIGlmYSBmcm9tIGl0cyBpZm4uCi0gKiBJZiBubyBtb3JlIGFkZHJlc3NlcyBleGlz
dCwgcmVtb3ZlIHRoZSBpZm4gdG9vLiBPdGhlcndpc2UsIHJlLXJlZ2lzdGVyCi0gKiB0aGUgaW50
ZXJmYWNlIGJhc2VkIG9uIHRoZSByZW1haW5pbmcgYWRkcmVzcyBmYW1pbGllcyBsZWZ0LgotICog
Tk9URTogQUREUiB3cml0ZSBsb2NrIE1VU1QgYmUgaGVsZC4KLSAqLwotc3RhdGljIHZvaWQKLXNj
dHBfcmVtb3ZlX2lmYV9mcm9tX2lmbihzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCkKLXsKLQlM
SVNUX1JFTU9WRShzY3RwX2lmYXAsIG5leHRfaWZhKTsKLQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkg
ewotCQkvKiB1cGRhdGUgYWRkcmVzcyBjb3VudHMgKi8KLQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZh
X2NvdW50LS07Ci0JCXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotCQkJc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y0
LS07Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0J
CQlzY3RwX2lmYXAtPmlmbl9wLT5udW1fdjYtLTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1
bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChMSVNUX0VNUFRZKCZzY3RwX2lmYXAtPmlmbl9w
LT5pZmFsaXN0KSkgewotCQkJLyogcmVtb3ZlIHRoZSBpZm4sIHBvc3NpYmx5IGZyZWVpbmcgaXQg
Ki8KLQkJCXNjdHBfZGVsZXRlX2lmbihzY3RwX2lmYXAtPmlmbl9wLCBTQ1RQX0FERFJfTE9DS0VE
KTsKLQkJfSBlbHNlIHsKLQkJCS8qIHJlLXJlZ2lzdGVyIGFkZHJlc3MgZmFtaWx5IHR5cGUsIGlm
IG5lZWRlZCAqLwotCQkJaWYgKChzY3RwX2lmYXAtPmlmbl9wLT5udW1fdjYgPT0gMCkgJiYKLQkJ
CSAgICAoc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJlZF9hZiA9PSBBRl9JTkVUNikpIHsKLQkJ
CQlTQ1RQX0RFUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwg
QUZfSU5FVDYpOwotCQkJCVNDVFBfUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZhcC0+aWZuX3At
Pmlmbl9pbmRleCwgQUZfSU5FVCk7Ci0JCQkJc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJlZF9h
ZiA9IEFGX0lORVQ7Ci0JCQl9IGVsc2UgaWYgKChzY3RwX2lmYXAtPmlmbl9wLT5udW1fdjQgPT0g
MCkgJiYKLQkJCQkgICAoc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJlZF9hZiA9PSBBRl9JTkVU
KSkgewotCQkJCVNDVFBfREVSRUdJU1RFUl9JTlRFUkZBQ0Uoc2N0cF9pZmFwLT5pZm5fcC0+aWZu
X2luZGV4LCBBRl9JTkVUKTsKLQkJCQlTQ1RQX1JFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmYXAt
Pmlmbl9wLT5pZm5faW5kZXgsIEFGX0lORVQ2KTsKLQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5yZWdp
c3RlcmVkX2FmID0gQUZfSU5FVDY7Ci0JCQl9Ci0JCQkvKiBmcmVlIHRoZSBpZm4gcmVmY291bnQg
Ki8KLQkJCXNjdHBfZnJlZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCk7Ci0JCX0KLQkJc2N0cF9pZmFw
LT5pZm5fcCA9IE5VTEw7Ci0JfQotfQotCi0KLXN0cnVjdCBzY3RwX2lmYSAqCi1zY3RwX2FkZF9h
ZGRyX3RvX3ZyZih1aW50MzJfdCB2cmZfaWQsIHZvaWQgKmlmbiwgdWludDMyX3QgaWZuX2luZGV4
LAotCQkgICAgIHVpbnQzMl90IGlmbl90eXBlLCBjb25zdCBjaGFyICppZl9uYW1lLCB2b2lkICpp
ZmEsCi0JCSAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCBpZmFfZmxhZ3MsCi0J
CSAgICAgaW50IGR5bmFtaWNfYWRkKQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXN0cnVj
dCBzY3RwX2lmbiAqc2N0cF9pZm5wID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZh
cCA9IE5VTEw7Ci0Jc3RydWN0IHNjdHBfaWZhbGlzdCAqaGFzaF9hZGRyX2hlYWQ7Ci0Jc3RydWN0
IHNjdHBfaWZubGlzdCAqaGFzaF9pZm5faGVhZDsKLQl1aW50MzJfdCBoYXNoX29mX2FkZHI7Ci0J
aW50IG5ld19pZm5fYWYgPSAwOwotCi0jaWZkZWYgU0NUUF9ERUJVRwotCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0I0LCAidnJmX2lkIDB4JXg6IGFkZGluZyBhZGRyZXNzOiAiLCB2cmZfaWQpOwotCVND
VFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjQsIGFkZHIpOwotI2VuZGlmCi0JU0NUUF9JUElfQURE
Ul9XTE9DSygpOwotCXNjdHBfaWZucCA9IHNjdHBfZmluZF9pZm4oaWZuLCBpZm5faW5kZXgpOwot
CWlmIChzY3RwX2lmbnApIHsKLQkJdnJmID0gc2N0cF9pZm5wLT52cmY7Ci0JfSBlbHNlIHsKLQkJ
dnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCQlpZiAodnJmID09IE5VTEwpIHsKLQkJCXZy
ZiA9IHNjdHBfYWxsb2NhdGVfdnJmKHZyZl9pZCk7Ci0JCQlpZiAodnJmID09IE5VTEwpIHsKLQkJ
CQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQl9
Ci0JfQotCWlmIChzY3RwX2lmbnAgPT0gTlVMTCkgewotCQkvKiBidWlsZCBvbmUgYW5kIGFkZCBp
dCwgY2FuJ3QgaG9sZCBsb2NrCi0JCSAqIHVudGlsIGFmdGVyIG1hbGxvYyBkb25lIHRob3VnaC4K
LQkJICovCi0JCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOwotCQlTQ1RQX01BTExPQyhzY3RwX2lm
bnAsIHN0cnVjdCBzY3RwX2lmbiAqLAotCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZm4pLCBT
Q1RQX01fSUZOKTsKLQkJaWYgKHNjdHBfaWZucCA9PSBOVUxMKSB7Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCQkJcGFuaWMoIk5vIG1lbW9yeSBmb3IgSUZOIik7Ci0jZW5kaWYKLQkJCXJldHVybiAoTlVM
TCk7Ci0JCX0KLQkJbWVtc2V0KHNjdHBfaWZucCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmbikp
OwotCQlzY3RwX2lmbnAtPmlmbl9pbmRleCA9IGlmbl9pbmRleDsKLQkJc2N0cF9pZm5wLT5pZm5f
cCA9IGlmbjsKLQkJc2N0cF9pZm5wLT5pZm5fdHlwZSA9IGlmbl90eXBlOwotCQlzY3RwX2lmbnAt
PnJlZmNvdW50ID0gMDsKLQkJc2N0cF9pZm5wLT52cmYgPSB2cmY7Ci0JCWF0b21pY19hZGRfaW50
KCZ2cmYtPnJlZmNvdW50LCAxKTsKLQkJc2N0cF9pZm5wLT5pZm5fbXR1ID0gU0NUUF9HQVRIRVJf
TVRVX0ZST01fSUZOX0lORk8oaWZuLCBpZm5faW5kZXgsIGFkZHItPnNhX2ZhbWlseSk7Ci0JCWlm
IChpZl9uYW1lICE9IE5VTEwpIHsKLQkJCXNucHJpbnRmKHNjdHBfaWZucC0+aWZuX25hbWUsIFND
VFBfSUZOQU1TSVosICIlcyIsIGlmX25hbWUpOwotCQl9IGVsc2UgewotCQkJc25wcmludGYoc2N0
cF9pZm5wLT5pZm5fbmFtZSwgU0NUUF9JRk5BTVNJWiwgIiVzIiwgInVua25vd24iKTsKLQkJfQot
CQloYXNoX2lmbl9oZWFkID0gJlNDVFBfQkFTRV9JTkZPKHZyZl9pZm5faGFzaClbKGlmbl9pbmRl
eCAmIFNDVFBfQkFTRV9JTkZPKHZyZl9pZm5faGFzaG1hcmspKV07Ci0JCUxJU1RfSU5JVCgmc2N0
cF9pZm5wLT5pZmFsaXN0KTsKLQkJU0NUUF9JUElfQUREUl9XTE9DSygpOwotCQlMSVNUX0lOU0VS
VF9IRUFEKGhhc2hfaWZuX2hlYWQsIHNjdHBfaWZucCwgbmV4dF9idWNrZXQpOwotCQlMSVNUX0lO
U0VSVF9IRUFEKCZ2cmYtPmlmbmxpc3QsIHNjdHBfaWZucCwgbmV4dF9pZm4pOwotCQlhdG9taWNf
YWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2lmbnMpLCAxKTsKLQkJbmV3X2lmbl9h
ZiA9IDE7Ci0JfQotCXNjdHBfaWZhcCA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihhZGRyLCB2cmYt
PnZyZl9pZCwgU0NUUF9BRERSX0xPQ0tFRCk7Ci0JaWYgKHNjdHBfaWZhcCkgewotCQkvKiBIbW0s
IGl0IGFscmVhZHkgZXhpc3RzPyAqLwotCQlpZiAoKHNjdHBfaWZhcC0+aWZuX3ApICYmCi0JCSAg
ICAoc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4ID09IGlmbl9pbmRleCkpIHsKLQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19QQ0I0LCAiVXNpbmcgZXhpc3RpbmcgaWZuICVzICgweCV4KSBmb3IgaWZh
ICVwXG4iLAotCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBpZm5faW5kZXgsCi0JCQkJ
KHZvaWQgKilzY3RwX2lmYXApOwotCQkJaWYgKG5ld19pZm5fYWYpIHsKLQkJCQkvKiBSZW1vdmUg
dGhlIGNyZWF0ZWQgb25lIHRoYXQgd2UgZG9uJ3Qgd2FudCAqLwotCQkJCXNjdHBfZGVsZXRlX2lm
bihzY3RwX2lmbnAsIFNDVFBfQUREUl9MT0NLRUQpOwotCQkJfQotCQkJaWYgKHNjdHBfaWZhcC0+
bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpIHsKLQkJCQkvKiBlYXN5IHRvIHNv
bHZlLCBqdXN0IHN3aXRjaCBiYWNrIHRvIGFjdGl2ZSAqLwotCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19QQ0I0LCAiQ2xlYXJpbmcgZGVsZXRlZCBpZmEgZmxhZ1xuIik7Ci0JCQkJc2N0cF9pZmFwLT5s
b2NhbGlmYV9mbGFncyA9IFNDVFBfQUREUl9WQUxJRDsKLQkJCQlzY3RwX2lmYXAtPmlmbl9wID0g
c2N0cF9pZm5wOwotCQkJCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAtPmlmbl9wLT5yZWZjb3Vu
dCwgMSk7Ci0JCQl9Ci0JCWV4aXRfc3RhZ2VfbGVmdDoKLQkJCVNDVFBfSVBJX0FERFJfV1VOTE9D
SygpOwotCQkJcmV0dXJuIChzY3RwX2lmYXApOwotCQl9IGVsc2UgewotCQkJaWYgKHNjdHBfaWZh
cC0+aWZuX3ApIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBsYXN0IElGTiBnZXRzIHRoZSBhZGRyZXNz
LCByZW1vdmUgdGhlCi0JCQkJICogb2xkIG9uZQotCQkJCSAqLwotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0I0LCAiTW92aW5nIGlmYSAlcCBmcm9tICVzICgweCV4KSB0byAlcyAoMHgleClcbiIs
Ci0JCQkJCSh2b2lkICopc2N0cF9pZmFwLCBzY3RwX2lmYXAtPmlmbl9wLT5pZm5fbmFtZSwKLQkJ
CQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZl9uYW1lLAotCQkJCQlpZm5faW5kZXgp
OwotCQkJCS8qIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBvbGQgaWZuICovCi0JCQkJc2N0
cF9yZW1vdmVfaWZhX2Zyb21faWZuKHNjdHBfaWZhcCk7Ci0JCQkJLyogbW92ZSB0aGUgYWRkcmVz
cyBvdmVyIHRvIHRoZSBuZXcgaWZuICovCi0JCQkJc2N0cF9hZGRfaWZhX3RvX2lmbihzY3RwX2lm
bnAsIHNjdHBfaWZhcCk7Ci0JCQkJZ290byBleGl0X3N0YWdlX2xlZnQ7Ci0JCQl9IGVsc2Ugewot
CQkJCS8qIHJlcGFpciBpZm5wIHdoaWNoIHdhcyBOVUxMID8gKi8KLQkJCQlzY3RwX2lmYXAtPmxv
Y2FsaWZhX2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEOwotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19Q
Q0I0LCAiUmVwYWlyaW5nIGlmbiAlcCBmb3IgaWZhICVwXG4iLAotCQkJCQkodm9pZCAqKXNjdHBf
aWZucCwgKHZvaWQgKilzY3RwX2lmYXApOwotCQkJCXNjdHBfYWRkX2lmYV90b19pZm4oc2N0cF9p
Zm5wLCBzY3RwX2lmYXApOwotCQkJfQotCQkJZ290byBleGl0X3N0YWdlX2xlZnQ7Ci0JCX0KLQl9
Ci0JU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7Ci0JU0NUUF9NQUxMT0Moc2N0cF9pZmFwLCBzdHJ1
Y3Qgc2N0cF9pZmEgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmYSksIFNDVFBfTV9JRkEpOwotCWlm
IChzY3RwX2lmYXAgPT0gTlVMTCkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoIk5vIG1l
bW9yeSBmb3IgSUZBIik7Ci0jZW5kaWYKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbWVtc2V0KHNj
dHBfaWZhcCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmYSkpOwotCXNjdHBfaWZhcC0+aWZuX3Ag
PSBzY3RwX2lmbnA7Ci0JYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZucC0+cmVmY291bnQsIDEpOwot
CXNjdHBfaWZhcC0+dnJmX2lkID0gdnJmX2lkOwotCXNjdHBfaWZhcC0+aWZhID0gaWZhOwotI2lm
ZGVmIEhBVkVfU0FfTEVOCi0JbWVtY3B5KCZzY3RwX2lmYXAtPmFkZHJlc3MsIGFkZHIsIGFkZHIt
PnNhX2xlbik7Ci0jZWxzZQotCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQkJbWVtY3B5KCZzY3RwX2lmYXAtPmFkZHJlc3MsIGFkZHIsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVU
NgotCWNhc2UgQUZfSU5FVDY6Ci0JCW1lbWNweSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCW1lbWNweSgmc2N0cF9pZmFwLT5h
ZGRyZXNzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJYnJlYWs7Ci0j
ZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBUU05IICovCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotCXNj
dHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgPSBTQ1RQX0FERFJfVkFMSUQgfCBTQ1RQX0FERFJfREVG
RVJfVVNFOwotCXNjdHBfaWZhcC0+ZmxhZ3MgPSBpZmFfZmxhZ3M7Ci0JLyogU2V0IHNjb3BlICov
Ci0Jc3dpdGNoIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCXNp
biA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luOwotCQlpZiAoU0NUUF9JRk5fSVNfSUZUX0xPT1Ao
c2N0cF9pZmFwLT5pZm5fcCkgfHwKLQkJICAgIChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZzaW4t
PnNpbl9hZGRyKSkpIHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lzX2xvb3AgPSAxOwotCQl9Ci0JCWlm
ICgoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkpIHsKLQkJCXNjdHBfaWZh
cC0+c3JjX2lzX3ByaXYgPSAxOwotCQl9Ci0JCXNjdHBfaWZucC0+bnVtX3Y0Kys7Ci0JCWlmIChu
ZXdfaWZuX2FmKQotCQkgICAgbmV3X2lmbl9hZiA9IEFGX0lORVQ7Ci0JCWJyZWFrOwotCX0KLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCS8qIG9rIHRvIHVzZSBk
ZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQot
CQlzaW42ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42OwotCQlpZiAoU0NUUF9JRk5fSVNfSUZU
X0xPT1Aoc2N0cF9pZmFwLT5pZm5fcCkgfHwKLQkJICAgIChJTjZfSVNfQUREUl9MT09QQkFDSygm
c2luNi0+c2luNl9hZGRyKSkpIHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lzX2xvb3AgPSAxOwotCQl9
Ci0JCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCXNj
dHBfaWZhcC0+c3JjX2lzX3ByaXYgPSAxOwotCQl9Ci0JCXNjdHBfaWZucC0+bnVtX3Y2Kys7Ci0J
CWlmIChuZXdfaWZuX2FmKQotCQkJbmV3X2lmbl9hZiA9IEFGX0lORVQ2OwotCQlicmVhazsKLQl9
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCQlp
ZiAobmV3X2lmbl9hZikKLQkJCW5ld19pZm5fYWYgPSBBRl9DT05OOwotCQlicmVhazsKLSNlbmRp
ZgotCWRlZmF1bHQ6Ci0JCW5ld19pZm5fYWYgPSAwOwotCQlicmVhazsKLQl9Ci0JaGFzaF9vZl9h
ZGRyID0gc2N0cF9nZXRfaWZhX2hhc2hfdmFsKCZzY3RwX2lmYXAtPmFkZHJlc3Muc2EpOwotCi0J
aWYgKChzY3RwX2lmYXAtPnNyY19pc19wcml2ID09IDApICYmCi0JICAgIChzY3RwX2lmYXAtPnNy
Y19pc19sb29wID09IDApKSB7Ci0JCXNjdHBfaWZhcC0+c3JjX2lzX2dsb2IgPSAxOwotCX0KLQlT
Q1RQX0lQSV9BRERSX1dMT0NLKCk7Ci0JaGFzaF9hZGRyX2hlYWQgPSAmdnJmLT52cmZfYWRkcl9o
YXNoWyhoYXNoX29mX2FkZHIgJiB2cmYtPnZyZl9hZGRyX2hhc2htYXJrKV07Ci0JTElTVF9JTlNF
UlRfSEVBRChoYXNoX2FkZHJfaGVhZCwgc2N0cF9pZmFwLCBuZXh0X2J1Y2tldCk7Ci0Jc2N0cF9p
ZmFwLT5yZWZjb3VudCA9IDE7Ci0JTElTVF9JTlNFUlRfSEVBRCgmc2N0cF9pZm5wLT5pZmFsaXN0
LCBzY3RwX2lmYXAsIG5leHRfaWZhKTsKLQlzY3RwX2lmbnAtPmlmYV9jb3VudCsrOwotCXZyZi0+
dG90YWxfaWZhX2NvdW50Kys7Ci0JYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9j
b3VudF9pZmFzKSwgMSk7Ci0JaWYgKG5ld19pZm5fYWYpIHsKLQkJU0NUUF9SRUdJU1RFUl9JTlRF
UkZBQ0UoaWZuX2luZGV4LCBuZXdfaWZuX2FmKTsKLQkJc2N0cF9pZm5wLT5yZWdpc3RlcmVkX2Fm
ID0gbmV3X2lmbl9hZjsKLQl9Ci0JU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7Ci0JaWYgKGR5bmFt
aWNfYWRkKSB7Ci0JCS8qIEJ1bXAgdXAgdGhlIHJlZmNvdW50IHNvIHRoYXQgd2hlbiB0aGUgdGlt
ZXIKLQkJICogY29tcGxldGVzIGl0IHdpbGwgZHJvcCBiYWNrIGRvd24uCi0JCSAqLwotCQlzdHJ1
Y3Qgc2N0cF9sYWRkciAqd2k7Ci0KLQkJYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZhcC0+cmVmY291
bnQsIDEpOwotCQl3aSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFk
ZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7Ci0JCWlmICh3aSA9PSBOVUxMKSB7Ci0JCQkvKgotCQkJ
ICogR2FrLCB3aGF0IGNhbiB3ZSBkbz8gV2UgaGF2ZSBsb3N0IGFuIGFkZHJlc3MKLQkJCSAqIGNo
YW5nZSBjYW4geW91IHNheSBIT1NFRD8KLQkJCSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BD
QjQsICJMb3N0IGFuIGFkZHJlc3MgY2hhbmdlP1xuIik7Ci0JCQkvKiBPcHBzLCBtdXN0IGRlY3Jl
bWVudCB0aGUgY291bnQgKi8KLQkJCXNjdHBfZGVsX2FkZHJfZnJvbV92cmYodnJmX2lkLCBhZGRy
LCBpZm5faW5kZXgsCi0JCQkJCSAgICAgICBpZl9uYW1lKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0J
CX0KLQkJU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7Ci0JCW1lbXNldCh3aSwgMCwgc2l6ZW9mKCp3
aSkpOwotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmd2ktPnN0YXJ0X3RpbWUpOwotCQl3
aS0+aWZhID0gc2N0cF9pZmFwOwotCQl3aS0+YWN0aW9uID0gU0NUUF9BRERfSVBfQUREUkVTUzsK
LQotCQlTQ1RQX1dRX0FERFJfTE9DSygpOwotCQlMSVNUX0lOU0VSVF9IRUFEKCZTQ1RQX0JBU0Vf
SU5GTyhhZGRyX3dxKSwgd2ksIHNjdHBfbnh0X2FkZHIpOwotCQlTQ1RQX1dRX0FERFJfVU5MT0NL
KCk7Ci0KLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSwKLQkJCQkg
KHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKLQkJCQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEws
Ci0JCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7Ci0JfSBlbHNlIHsKLQkJLyogaXQncyBy
ZWFkeSBmb3IgdXNlICovCi0JCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQURE
Ul9ERUZFUl9VU0U7Ci0JfQotCXJldHVybiAoc2N0cF9pZmFwKTsKLX0KLQotdm9pZAotc2N0cF9k
ZWxfYWRkcl9mcm9tX3ZyZih1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwK
LQkJICAgICAgIHVpbnQzMl90IGlmbl9pbmRleCwgY29uc3QgY2hhciAqaWZfbmFtZSkKLXsKLQlz
dHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCA9IE5VTEw7
Ci0KLQlTQ1RQX0lQSV9BRERSX1dMT0NLKCk7Ci0JdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQp
OwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNhbid0
IGZpbmQgdnJmX2lkIDB4JXhcbiIsIHZyZl9pZCk7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0KLSNp
ZmRlZiBTQ1RQX0RFQlVHCi0JU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJ2cmZfaWQgMHgleDog
ZGVsZXRpbmcgYWRkcmVzczoiLCB2cmZfaWQpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BD
QjQsIGFkZHIpOwotI2VuZGlmCi0Jc2N0cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFk
ZHIsIHZyZi0+dnJmX2lkLCBTQ1RQX0FERFJfTE9DS0VEKTsKLQlpZiAoc2N0cF9pZmFwKSB7Ci0J
CS8qIFZhbGlkYXRlIHRoZSBkZWxldGUgKi8KLQkJaWYgKHNjdHBfaWZhcC0+aWZuX3ApIHsKLQkJ
CWludCB2YWxpZCA9IDA7Ci0JCQkvKi0KLQkJCSAqIFRoZSBuYW1lIGhhcyBwcmlvcml0eSBvdmVy
IHRoZSBpZm5faW5kZXgKLQkJCSAqIGlmIGl0cyBnaXZlbi4gV2UgZG8gdGhpcyBlc3BlY2lhbGx5
IGZvcgotCQkJICogcGFuZGEgd2hvIG1pZ2h0IHJlY3ljbGUgaW5kZXhlcyBmYXN0LgotCQkJICov
Ci0JCQlpZiAoaWZfbmFtZSkgewotCQkJCWlmIChzdHJuY21wKGlmX25hbWUsIHNjdHBfaWZhcC0+
aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laKSA9PSAwKSB7Ci0JCQkJCS8qIFRoZXkgbWF0
Y2ggaXRzIGEgY29ycmVjdCBkZWxldGUgKi8KLQkJCQkJdmFsaWQgPSAxOwotCQkJCX0KLQkJCX0K
LQkJCWlmICghdmFsaWQpIHsKLQkJCQkvKiBsYXN0IGRpdGNoIGNoZWNrIGlmbl9pbmRleCAqLwot
CQkJCWlmIChpZm5faW5kZXggPT0gc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4KSB7Ci0JCQkJ
CXZhbGlkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoIXZhbGlkKSB7Ci0JCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjQsICJpZm46JWQgaWZuYW1lOiVzIGRvZXMgbm90IG1hdGNoIGFkZHJlc3Nl
c1xuIiwKLQkJCQkJaWZuX2luZGV4LCAoKGlmX25hbWUgPT0gTlVMTCkgPyAiTlVMTCIgOiBpZl9u
YW1lKSk7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJpZm46JWQgaWZuYW1lOiVzIC0g
aWdub3JpbmcgZGVsZXRlXG4iLAotCQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIHNj
dHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lKTsKLQkJCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsK
LQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJEZWxl
dGluZyBpZmEgJXBcbiIsICh2b2lkICopc2N0cF9pZmFwKTsKLQkJc2N0cF9pZmFwLT5sb2NhbGlm
YV9mbGFncyAmPSBTQ1RQX0FERFJfVkFMSUQ7Ci0gICAgICAgICAgICAgICAgLyoKLQkJICogV2Ug
ZG9uJ3Qgc2V0IHRoZSBmbGFnLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0cnVjdHVyZSB3aWxsCi0J
CSAqIGhhbmcgYXJvdW5kIGluIEVQJ3MgdGhhdCBoYXZlIGJvdW5kIHNwZWNpZmljIHRvIGl0IHVu
dGlsCi0JCSAqIHRoZXkgY2xvc2UuIFRoaXMgZ2l2ZXMgdXMgVENQIGxpa2UgYmVoYXZpb3IgaWYg
c29tZW9uZQotCQkgKiByZW1vdmVzIGFuIGFkZHJlc3MgKG9yIGZvciB0aGF0IG1hdHRlciBhZGRz
IGl0IHJpZ2h0IGJhY2spLgotCQkgKi8KLQkJLyogc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyB8
PSBTQ1RQX0JFSU5HX0RFTEVURUQ7ICovCi0JCXZyZi0+dG90YWxfaWZhX2NvdW50LS07Ci0JCUxJ
U1RfUkVNT1ZFKHNjdHBfaWZhcCwgbmV4dF9idWNrZXQpOwotCQlzY3RwX3JlbW92ZV9pZmFfZnJv
bV9pZm4oc2N0cF9pZmFwKTsKLQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwotCWVsc2UgewotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfUENCNCwgIkRlbCBBZGRyLWlmbjolZCBDb3VsZCBub3QgZmluZCBhZGRy
ZXNzOiIsCi0JCQlpZm5faW5kZXgpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19QQ0IxLCBh
ZGRyKTsKLQl9Ci0jZW5kaWYKLQotIG91dF9ub3c6Ci0JU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7
Ci0JaWYgKHNjdHBfaWZhcCkgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqd2k7Ci0KLQkJd2kgPSBT
Q1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRyKSwgc3RydWN0IHNjdHBf
bGFkZHIpOwotCQlpZiAod2kgPT0gTlVMTCkgewotCQkJLyoKLQkJCSAqIEdhaywgd2hhdCBjYW4g
d2UgZG8/IFdlIGhhdmUgbG9zdCBhbiBhZGRyZXNzCi0JCQkgKiBjaGFuZ2UgY2FuIHlvdSBzYXkg
SE9TRUQ/Ci0JCQkgKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiTG9zdCBhbiBhZGRy
ZXNzIGNoYW5nZT9cbiIpOwotCi0JCQkvKiBPb3BzLCBtdXN0IGRlY3JlbWVudCB0aGUgY291bnQg
Ki8KLQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmFwKTsKLQkJCXJldHVybjsKLQkJfQotCQlTQ1RQ
X0lOQ1JfTEFERFJfQ09VTlQoKTsKLQkJbWVtc2V0KHdpLCAwLCBzaXplb2YoKndpKSk7Ci0JCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ3aS0+c3RhcnRfdGltZSk7Ci0JCXdpLT5pZmEgPSBz
Y3RwX2lmYXA7Ci0JCXdpLT5hY3Rpb24gPSBTQ1RQX0RFTF9JUF9BRERSRVNTOwotCQlTQ1RQX1dR
X0FERFJfTE9DSygpOwotCQkvKgotCQkgKiBTaG91bGQgdGhpcyByZWFsbHkgYmUgYSB0YWlscT8g
QXMgaXQgaXMgd2Ugd2lsbCBwcm9jZXNzIHRoZQotCQkgKiBuZXdlc3QgZmlyc3QgOi0wCi0JCSAq
LwotCQlMSVNUX0lOU0VSVF9IRUFEKCZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSwgd2ksIHNjdHBf
bnh0X2FkZHIpOwotCQlTQ1RQX1dRX0FERFJfVU5MT0NLKCk7Ci0KLQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSwKLQkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVM
TCwKLQkJCQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCi0JCQkJIChzdHJ1Y3Qgc2N0cF9uZXRz
ICopTlVMTCk7Ci0JfQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgaW50Ci1zY3RwX2RvZXNfc3Rj
Yl9vd25fdGhpc19hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICp0
bykKLXsKLQlpbnQgbG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVUKQotCWludCBpcHY0
X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2
KQotCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWludCBjb25uX2FkZHJfbGVnYWw7Ci0jZW5k
aWYKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwot
CXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFz
b2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVUKQotCWlwdjRfbG9jYWxf
c2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7Ci0JaXB2NF9hZGRyX2xl
Z2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKElORVQ2KQotCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsK
LQlzaXRlX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOwotCWlwdjZfYWRkcl9s
ZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUu
Y29ubl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0KLQlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7Ci0JdnJm
ID0gc2N0cF9maW5kX3ZyZihzdGNiLT5hc29jLnZyZl9pZCk7Ci0JaWYgKHZyZiA9PSBOVUxMKSB7
Ci0JCS8qIG5vIHZyZiwgbm8gYWRkcmVzc2VzICovCi0JCVNDVFBfSVBJX0FERFJfUlVOTE9DSygp
OwotCQlyZXR1cm4gKDApOwotCX0KLQotCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJm
LT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgot
CQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgewotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRf
aWZhKSB7Ci0JCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAm
JgotCQkJCSAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNjdHBfaWZhKSkpIHsKLQkJ
CQkJLyogV2UgYWxsb3cgcGVuZGluZyBhZGRyZXNzZXMsIHdoZXJlIHdlCi0JCQkJCSAqIGhhdmUg
c2VudCBhbiBhc2NvbmYtYWRkIHRvIGJlIGNvbnNpZGVyZWQKLQkJCQkJICogdmFsaWQuCi0JCQkJ
CSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKHNjdHBfaWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSAhPSB0by0+c2FfZmFtaWx5KSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJ
CQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQK
LQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJCWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKLQkJCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKLQotCQkJCQkJc2luID0gJnNjdHBfaWZhLT5h
ZGRyZXNzLnNpbjsKLQkJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdG87Ci0JCQkJ
CQlpZiAoKGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAgICBJTjRfSVNQUklWQVRF
X0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2It
PnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAmc2luLT5zaW5fYWRkcikgIT0gMCkgewotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotI2Vu
ZGlmCi0JCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gcnNpbi0+c2luX2FkZHIuc19h
ZGRyKSB7Ci0JCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJCQkJcmV0dXJuICgx
KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
CQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgewotCQkJCQkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42OwotI2lmIGRlZmluZWQoU0NUUF9FTUJFRERF
RF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQotCQkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiBsc2E2OwotI2VuZGlmCi0JCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7
Ci0JCQkJCQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2lu
Nl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJ
CWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCQlp
ZiAobG9jYWxfc2NvcGUgPT0gMCkKLQkJCQkJCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFKQotCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDAp
IHsKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikg
IT0gMCkKLQkJCQkJCQkJCWNvbnRpbnVlOwotI2Vsc2UKLQkJCQkJCQkJbHNhNiA9ICpzaW42Owot
CQkJCQkJCQlpZiAoaW42X3JlY292ZXJzY29wZSgmbHNhNiwKLQkJCQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgJmxzYTYuc2luNl9hZGRyLAotCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICBO
VUxMKSkKLQkJCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJCQlzaW42ID0gJmxzYTY7Ci0jZW5kaWYg
LyogU0NUUF9LQU1FICovCi0JCQkJCQkJfQotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NP
UEUgKi8KLQkJCQkJCX0KLQkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJgotCQkJCQkJICAg
IChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7Ci0JCQkJCQkJY29u
dGludWU7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2luNiwgcnNp
bjYpKSB7Ci0JCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJCQkJcmV0dXJuICgx
KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJCWlmIChjb25uX2FkZHJfbGVnYWwp
IHsKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKLQotCQkJCQkJ
c2Nvbm4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm47Ci0JCQkJCQlyc2Nvbm4gPSAoc3RydWN0
IHNvY2thZGRyX2Nvbm4gKil0bzsKLQkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nv
bm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQkJCQkJ
CQlyZXR1cm4gKDEpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJ
ZGVmYXVsdDoKLQkJCQkJLyogVFNOSCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0K
LQl9IGVsc2UgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQkJTElTVF9GT1JFQUNI
KGxhZGRyLCAmc3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsK
LQkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkg
ewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOwot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IGxhZGRyLT5pZmEpICYmCi0JCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBsYWRk
ci0+aWZhKSkpIHsKLQkJCQkvKiBXZSBhbGxvdyBwZW5kaW5nIGFkZHJlc3Nlcywgd2hlcmUgd2UK
LQkJCQkgKiBoYXZlIHNlbnQgYW4gYXNjb25mLWFkZCB0byBiZSBjb25zaWRlcmVkCi0JCQkJICog
dmFsaWQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAobGFkZHItPmlmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gdG8tPnNhX2ZhbWlseSkgewotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBB
Rl9JTkVUOgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKLQotCQkJ
CXNpbiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKLQkJCQlyc2luID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKXRvOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSByc2luLT5zaW5f
YWRkci5zX2FkZHIpIHsKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJCXJldHVy
biAoMSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
CWNhc2UgQUZfSU5FVDY6Ci0JCQl7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJz
aW42OwotCi0JCQkJc2luNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJcnNpbjYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOwotCQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVB
TChzaW42LCByc2luNikpIHsKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJCXJl
dHVybiAoMSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JCQljYXNlIEFGX0NPTk46Ci0JCQl7Ci0JCQkJc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKnNjb25uLCAqcnNjb25uOwotCi0JCQkJc2Nvbm4gPSAmbGFkZHItPmlmYS0+YWRk
cmVzcy5zY29ubjsKLQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKLQkJ
CQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7Ci0JCQkJCVND
VFBfSVBJX0FERFJfUlVOTE9DSygpOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCQlicmVh
azsKLQkJCX0KLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJYnJlYWs7
Ci0JCQl9Ci0KLQkJfQotCX0KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKDAp
OwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF90Y2Jfc3BlY2lhbF9sb2Nh
dGUoc3RydWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNvY2thZGRyICpmcm9tLAotICAg
IHN0cnVjdCBzb2NrYWRkciAqdG8sIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MzJfdCB2
cmZfaWQpCi17Ci0JLyoqKiogQVNTVU1FUyBUSEUgQ0FMTEVSIGhvbGRzIHRoZSBJTlBfSU5GT19S
TE9DSyAqLwotCS8qCi0JICogSWYgd2Ugc3VwcG9ydCB0aGUgVENQIG1vZGVsLCB0aGVuIHdlIG11
c3Qgbm93IGRpZyB0aHJvdWdoIHRvIHNlZQotCSAqIGlmIHdlIGNhbiBmaW5kIG91ciBlbmRwb2lu
dCBpbiB0aGUgbGlzdCBvZiB0Y3AgZXAncy4KLQkgKi8KLQl1aW50MTZfdCBscG9ydCwgcnBvcnQ7
Ci0Jc3RydWN0IHNjdHBwY2JoZWFkICplcGhlYWQ7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
LQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKLSNpZmRlZiBTQ1RQX01WUkYKLQlpbnQgZm5kLCBpOwotI2Vu
ZGlmCi0KLQlpZiAoKHRvID09IE5VTEwpIHx8IChmcm9tID09IE5VTEwpKSB7Ci0JCXJldHVybiAo
TlVMTCk7Ci0JfQotCi0Jc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCWNh
c2UgQUZfSU5FVDoKLQkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlscG9y
dCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopdG8pLT5zaW5fcG9ydDsKLQkJCXJwb3J0ID0gKChz
dHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tKS0+c2luX3BvcnQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1
cm4gKE5VTEwpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFG
X0lORVQ2OgotCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlscG9ydCA9
ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvKS0+c2luNl9wb3J0OwotCQkJcnBvcnQgPSAoKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilmcm9tKS0+c2luNl9wb3J0OwotCQl9IGVsc2UgewotCQkJcmV0
dXJuIChOVUxMKTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikg
ewotCQkJbHBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG8pLT5zY29ubl9wb3J0Owot
CQkJcnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZnJvbSktPnNjb25uX3BvcnQ7Ci0J
CX0gZWxzZSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVm
YXVsdDoKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JZXBoZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNj
dHBfdGNwZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUigobHBvcnQgfCBycG9ydCksIFNDVFBf
QkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSldOwotCS8qCi0JICogT2sgbm93IGZvciBlYWNoIG9mIHRo
ZSBndXlzIGluIHRoaXMgYnVja2V0IHdlIG11c3QgbG9vayBhbmQgc2VlOgotCSAqIC0gRG9lcyB0
aGUgcmVtb3RlIHBvcnQgbWF0Y2guIC0gRG9lcyB0aGVyZSBzaW5nbGUgYXNzb2NpYXRpb24ncwot
CSAqIGFkZHJlc3NlcyBtYXRjaCB0aGlzIGFkZHJlc3MgKHRvKS4gSWYgc28gd2UgdXBkYXRlIHBf
ZXAgdG8gcG9pbnQKLQkgKiB0byB0aGlzIGVwIGFuZCByZXR1cm4gdGhlIHRjYiBmcm9tIGl0Lgot
CSAqLwotCUxJU1RfRk9SRUFDSChpbnAsIGVwaGVhZCwgc2N0cF9oYXNoKSB7Ci0JCVNDVFBfSU5Q
X1JMT0NLKGlucCk7Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJY29udGludWU7Ci0J
CX0KLQkJaWYgKGxwb3J0ICE9IGlucC0+c2N0cF9scG9ydCkgewotCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOwotCQkJY29udGludWU7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlz
d2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJ
ewotCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKil0bzsKLQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7Ci0J
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnJlYWs7
Ci0JCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKXRvOwotCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVk
LAotCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgewotCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWJyZWFrOwot
CQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNv
bnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX01WUkYKLQkJZm5kID0gMDsKLQkJZm9y
IChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewotCQkJaWYgKGlucC0+bV92cmZfaWRz
W2ldID09IHZyZl9pZCkgewotCQkJCWZuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJ
aWYgKGZuZCA9PSAwKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsK
LQkJfQotI2Vsc2UKLQkJaWYgKGlucC0+ZGVmX3ZyZl9pZCAhPSB2cmZfaWQpIHsKLQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLQkJLyogY2hlY2sg
dG8gc2VlIGlmIHRoZSBlcCBoYXMgb25lIG9mIHRoZSBhZGRyZXNzZXMgKi8KLQkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgewotCQkJLyogV2Ug
YXJlIE5PVCBib3VuZCBhbGwsIHNvIGxvb2sgZnVydGhlciAqLwotCQkJaW50IG1hdGNoID0gMDsK
LQotCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRf
YWRkcikgewotCi0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwgX19mdW5jX18pOwotCQkJCQljb250aW51
ZTsKLQkJCQl9Ci0JCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlO
R19ERUxFVEVEKSB7Ci0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRl
bGV0ZWRcbiIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKGxhZGRyLT5pZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5ID09Ci0JCQkJICAgIHRvLT5zYV9mYW1pbHkpIHsKLQkJCQkJLyog
c2VlIGlmIGl0IG1hdGNoZXMgKi8KLSNpZmRlZiBJTkVUCi0JCQkJCWlmIChmcm9tLT5zYV9mYW1p
bHkgPT0gQUZfSU5FVCkgewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICppbnRmX2FkZHIsICpz
aW47Ci0KLQkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKLQkJCQkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKLQkJCQkJCWlmIChzaW4tPnNpbl9hZGRy
LnNfYWRkciA9PQotCQkJCQkJICAgIGludGZfYWRkci0+c2luX2FkZHIuc19hZGRyKSB7Ci0JCQkJ
CQkJbWF0Y2ggPSAxOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCQkJCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbnRmX2FkZHI2OwotCQkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKLQotCQkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCi0JCQkJ
CQkgICAgdG87Ci0JCQkJCQlpbnRmX2FkZHI2ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luNjsK
LQotCQkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCi0JCQkJCQkgICAgaW50Zl9h
ZGRyNikpIHsKLQkJCQkJCQltYXRjaCA9IDE7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJ
CX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQkJaWYgKGZyb20tPnNh
X2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqaW50Zl9h
ZGRyLCAqc2Nvbm47Ci0KLQkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNj
b25uOwotCQkJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKLQkJCQkJCWlm
IChzY29ubi0+c2Nvbm5fYWRkciA9PQotCQkJCQkJICAgIGludGZfYWRkci0+c2Nvbm5fYWRkcikg
ewotCQkJCQkJCW1hdGNoID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotI2Vu
ZGlmCi0JCQkJfQotCQkJfQotCQkJaWYgKG1hdGNoID09IDApIHsKLQkJCQkvKiBUaGlzIGVuZHBv
aW50IGRvZXMgbm90IGhhdmUgdGhpcyBhZGRyZXNzICovCi0JCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAqIE9rIGlmIHdlIGhpdCBo
ZXJlIHRoZSBlcCBoYXMgdGhlIGFkZHJlc3MsIGRvZXMgaXQgaG9sZAotCQkgKiB0aGUgdGNiPwot
CQkgKi8KLQkJLyogWFhYOiBXaHkgZG9uJ3Qgd2UgVEFJTFFfRk9SRUFDSCB0aHJvdWdoIHNjdHBf
YXNvY19saXN0PyAqLwotCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7
Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNv
bnRpbnVlOwotCQl9Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWlmICghc2N0cF9kb2VzX3N0
Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0bykpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzdGNi
LT5ycG9ydCAhPSBycG9ydCkgewotCQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2guICov
Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0J
CQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJP
VVRfVE9fQkVfRlJFRUQpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICghc2N0cF9kb2VzX3N0Y2Jf
b3duX3RoaXNfYWRkcihzdGNiLCB0bykpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIERvZXMgdGhp
cyBUQ0IgaGF2ZSBhIG1hdGNoaW5nIGFkZHJlc3M/ICovCi0JCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
c3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQotCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkgIT0gZnJvbS0+c2FfZmFtaWx5KSB7Ci0JCQkJLyogbm90IHRoZSBzYW1lIGZh
bWlseSwgY2FuJ3QgYmUgYSBtYXRjaCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3dpdGNo
IChmcm9tLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6Ci0JCQl7
Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpyc2luOwotCi0JCQkJc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJcnNpbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKilmcm9tOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQotCQkJCSAg
ICByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJLyogZm91bmQgaXQgKi8KLQkJCQkJaWYg
KG5ldHAgIT0gTlVMTCkgewotCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCX0KLQkJCQkJLyogVXBk
YXRlIHRoZSBlbmRwb2ludCBwb2ludGVyICovCi0JCQkJCSppbnBfcCA9IGlucDsKLQkJCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJCX0KLQkJCQlicmVh
azsKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJewot
CQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsICpyc2luNjsKLQotCQkJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJcnNpbjYgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWZyb207Ci0JCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYs
Ci0JCQkJICAgIHJzaW42KSkgewotCQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJCQlpZiAobmV0cCAh
PSBOVUxMKSB7Ci0JCQkJCQkqbmV0cCA9IG5ldDsKLQkJCQkJfQotCQkJCQkvKiBVcGRhdGUgdGhl
IGVuZHBvaW50IHBvaW50ZXIgKi8KLQkJCQkJKmlucF9wID0gaW5wOwotCQkJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCQkJCXJldHVybiAoc3RjYik7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJ
fQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJY2FzZSBBRl9DT05OOgot
CQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKLQotCQkJCXNj
b25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQlyc2Nv
bm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilmcm9tOwotCQkJCWlmIChzY29ubi0+c2Nvbm5f
YWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJLyogZm91bmQgaXQgKi8KLQkJCQkJ
aWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCX0KLQkJCQkJLyog
VXBkYXRlIHRoZSBlbmRwb2ludCBwb2ludGVyICovCi0JCQkJCSppbnBfcCA9IGlucDsKLQkJCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJCX0KLQkJCQli
cmVhazsKLQkJCX0KLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotLyoKLSAqIHJ1bGVzIGZvciB1
c2UKLSAqCi0gKiAxKSBJZiBJIHJldHVybiBhIE5VTEwgeW91IG11c3QgZGVjcmVtZW50IGFueSBJ
TlAgcmVmIGNudC4gMikgSWYgSSBmaW5kIGFuCi0gKiBzdGNiLCBib3RoIHdpbGwgYmUgbG9ja2Vk
IChsb2NrZWRfdGNiIGFuZCBzdGNiKSBidXQgZGVjcmVtZW50IHdpbGwgYmUgZG9uZQotICogKGlm
IGxvY2tlZCA9PSBOVUxMKS4gMykgRGVjcmVtZW50IGhhcHBlbnMgb24gcmV0dXJuIE9OTFkgaWYg
bG9ja2VkID09Ci0gKiBOVUxMLgotICovCi0KLXN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRh
c3NvY2lhdGlvbl9lcF9hZGRyKHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzb2Nr
YWRkciAqcmVtb3RlLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmxvY2FsLCBzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2tlZF90Y2IpCi17Ci0Jc3RydWN0IHNjdHBh
c29jaGVhZCAqaGVhZDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiA9IE5VTEw7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXVpbnQxNl90IHJwb3J0
OwotCi0JaW5wID0gKmlucF9wOwotCXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKLSNpZmRl
ZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlycG9ydCA9ICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KXJlbW90ZSktPnNpbl9wb3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNh
c2UgQUZfSU5FVDY6Ci0JCXJwb3J0ID0gKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlbW90ZSkt
PnNpbjZfcG9ydCk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotCWNhc2UgQUZfQ09OTjoKLQkJcnBvcnQgPSAoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVt
b3RlKS0+c2luNl9wb3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4g
KE5VTEwpOwotCX0KLQlpZiAobG9ja2VkX3RjYikgewotCQkvKgotCQkgKiBVTi1sb2NrIHNvIHdl
IGNhbiBkbyBwcm9wZXIgbG9ja2luZyBoZXJlIHRoaXMgb2NjdXJzIHdoZW4KLQkJICogY2FsbGVk
IGZyb20gbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0LgotCQkgKi8KLQkJYXRvbWljX2FkZF9pbnQo
JmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90
Y2IpOwotCX0KLQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJLyotCi0JCSAqIE5vdyBlaXRoZXIgdGhpcyBn
dXkgaXMgb3VyIGxpc3RlbmVyIG9yIGl0J3MgdGhlCi0JCSAqIGNvbm5lY3Rvci4gSWYgaXQgaXMg
dGhlIG9uZSB0aGF0IGlzc3VlZCB0aGUgY29ubmVjdCwgdGhlbgotCQkgKiBpdCdzIG9ubHkgY2hh
bmNlIGlzIHRvIGJlIHRoZSBmaXJzdCBUQ0IgaW4gdGhlIGxpc3QuIElmCi0JCSAqIGl0IGlzIHRo
ZSBhY2NlcHRvciwgdGhlbiBkbyB0aGUgc3BlY2lhbF9sb29rdXAgdG8gaGFzaAotCQkgKiBhbmQg
ZmluZCB0aGUgcmVhbCBpbnAuCi0JCSAqLwotCQlpZiAoKGlucC0+c2N0cF9zb2NrZXQpICYmIFND
VFBfSVNfTElTVEVOSU5HKGlucCkpIHsKLQkJCS8qIHRvIGlzIHBlZXIgYWRkciwgZnJvbSBpcyBt
eSBhZGRyICovCi0jaWZuZGVmIFNDVFBfTVZSRgotCQkJc3RjYiA9IHNjdHBfdGNiX3NwZWNpYWxf
bG9jYXRlKGlucF9wLCByZW1vdGUsIGxvY2FsLAotCQkJICAgIG5ldHAsIGlucC0+ZGVmX3ZyZl9p
ZCk7Ci0JCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKGxvY2tlZF90Y2IgPT0gTlVMTCkpIHsKLQkJ
CQkvKiB3ZSBoYXZlIGEgbG9ja2VkIHRjYiwgbG93ZXIgcmVmY291bnQgKi8KLQkJCQlTQ1RQX0lO
UF9ERUNSX1JFRihpbnApOwotCQkJfQotCQkJaWYgKChsb2NrZWRfdGNiICE9IE5VTEwpICYmIChs
b2NrZWRfdGNiICE9IHN0Y2IpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0sobG9ja2VkX3RjYi0+c2N0
cF9lcCk7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9JTlBfUlVOTE9D
Syhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKLQkJCX0KLSNlbHNlCi0JCQkvKi0KLQkJCSAqIE1WUkYg
aXMgdHJpY2t5LCB3ZSBtdXN0IGxvb2sgaW4gZXZlcnkgVlJGCi0JCQkgKiB0aGUgZW5kcG9pbnQg
aGFzLgotCQkJICovCi0JCQlpbnQgaTsKLQotCQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3Zy
ZnM7IGkrKykgewotCQkJCXN0Y2IgPSBzY3RwX3RjYl9zcGVjaWFsX2xvY2F0ZShpbnBfcCwgcmVt
b3RlLCBsb2NhbCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0cCwgaW5w
LT5tX3ZyZl9pZHNbaV0pOwotCQkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiA9
PSBOVUxMKSkgewotCQkJCQkvKiB3ZSBoYXZlIGEgbG9ja2VkIHRjYiwgbG93ZXIgcmVmY291bnQg
Ki8KLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ
CWlmICgobG9ja2VkX3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiAhPSBzdGNiKSkgewotCQkJ
CQlTQ1RQX0lOUF9STE9DSyhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKLQkJCQkJU0NUUF9UQ0JfTE9D
Syhsb2NrZWRfdGNiKTsKLQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGxvY2tlZF90Y2ItPnNjdHBfZXAp
OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJCVNDVFBfSU5QX0lORk9fUlVO
TE9DSygpOwotCQkJcmV0dXJuIChzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FM
TEdPTkUpIHsKLQkJCQlnb3RvIG51bGxfcmV0dXJuOwotCQkJfQotCQkJc3RjYiA9IExJU1RfRklS
U1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCWdv
dG8gbnVsbF9yZXR1cm47Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCi0JCQlpZiAo
c3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsKLQkJCQkvKiByZW1vdGUgcG9ydCBkb2VzIG5vdCBtYXRj
aC4gKi8KLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJZ290byBudWxsX3JldHVybjsK
LQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9G
UkVFRCkgewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlnb3RvIG51bGxfcmV0dXJu
OwotCQkJfQotCQkJaWYgKGxvY2FsICYmICFzY3RwX2RvZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0
Y2IsIGxvY2FsKSkgewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlnb3RvIG51bGxf
cmV0dXJuOwotCQkJfQotCQkJLyogbm93IGxvb2sgYXQgdGhlIGxpc3Qgb2YgcmVtb3RlIGFkZHJl
c3NlcyAqLwotCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQlpZiAobmV0ID09IChUQUlMUV9ORVhUKG5ldCwg
c2N0cF9uZXh0KSkpIHsKLQkJCQkJcGFuaWMoIkNvcnJ1cHQgbmV0IGxpc3QiKTsKLQkJCQl9Ci0j
ZW5kaWYKLQkJCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSAhPQotCQkJCSAgICBy
ZW1vdGUtPnNhX2ZhbWlseSkgewotCQkJCQkvKiBub3QgdGhlIHNhbWUgZmFtaWx5ICovCi0JCQkJ
CWNvbnRpbnVlOwotCQkJCX0KLQkJCQlzd2l0Y2ggKHJlbW90ZS0+c2FfZmFtaWx5KSB7Ci0jaWZk
ZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQl7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luLCAqcnNpbjsKLQotCQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopCi0JCQkJ
CSAgICAmbmV0LT5yby5fbF9hZGRyOwotCQkJCQlyc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KXJlbW90ZTsKLQkJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09Ci0JCQkJCSAgICByc2lu
LT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0JCQkJCQlpZiAobmV0
cCAhPSBOVUxMKSB7Ci0JCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9j
a2VkX3RjYiA9PSBOVUxMKSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJ
CX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJU0NUUF9UQ0JfTE9DSyhs
b2NrZWRfdGNiKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCQkJYXRv
bWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJfQot
Ci0JCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxP
Q0soKTsKLQkJCQkJCXJldHVybiAoc3RjYik7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotCQkJCXsKLQkJCQkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42OwotCi0JCQkJCXNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJCXJzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilyZW1vdGU7Ci0JCQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42LAot
CQkJCQkgICAgcnNpbjYpKSB7Ci0JCQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJCQkJaWYgKG5ldHAg
IT0gTlVMTCkgewotCQkJCQkJCSpuZXRwID0gbmV0OwotCQkJCQkJfQotCQkJCQkJaWYgKGxvY2tl
ZF90Y2IgPT0gTlVMTCkgewotCQkJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJCQl9
IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikgewotCQkJCQkJCVNDVFBfVENCX0xPQ0sobG9j
a2VkX3RjYik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQkJCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCQkJCX0KLQkJ
CQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OwotCQkJCQkJcmV0dXJuIChzdGNiKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJY2FzZSBBRl9DT05OOgotCQkJCXsK
LQkJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAqcnNjb25uOwotCi0JCQkJCXNjb25u
ID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQkJcnNjb25u
ID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopcmVtb3RlOwotCQkJCQlpZiAoc2Nvbm4tPnNjb25u
X2FkZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7Ci0JCQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJ
CQkJaWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJCSpuZXRwID0gbmV0OwotCQkJCQkJfQotCQkJ
CQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgewotCQkJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlu
cCk7Ci0JCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikgewotCQkJCQkJCVNDVFBf
VENCX0xPQ0sobG9ja2VkX3RjYik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9ja2VkX3RjYikgewot
CQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsK
LQkJCQkJCX0KLQkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQkJCVNDVFBfSU5QX0lO
Rk9fUlVOTE9DSygpOwotCQkJCQkJcmV0dXJuIChzdGNiKTsKLQkJCQkJfQotCQkJCQlicmVhazsK
LQkJCQl9Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBUU05IICovCi0JCQkJCWJyZWFr
OwotCQkJCX0KLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQotCX0gZWxzZSB7
Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJZ290byBudWxsX3JldHVybjsKLQkJfQotCQlo
ZWFkID0gJmlucC0+c2N0cF90Y2JoYXNoW1NDVFBfUENCSEFTSF9BTExBRERSKHJwb3J0LAotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9o
YXNobWFyayldOwotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF90Y2JoYXNoKSB7Ci0J
CQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsKLQkJCQkvKiByZW1vdGUgcG9ydCBkb2VzIG5v
dCBtYXRjaCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsK
LQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkg
ewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlm
IChsb2NhbCAmJiAhc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCBsb2NhbCkpIHsK
LQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBu
b3cgbG9vayBhdCB0aGUgbGlzdCBvZiByZW1vdGUgYWRkcmVzc2VzICovCi0JCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCQkJCWlmIChuZXQgPT0gKFRBSUxRX05FWFQobmV0LCBzY3RwX25leHQpKSkgewotCQkJCQlw
YW5pYygiQ29ycnVwdCBuZXQgbGlzdCIpOwotCQkJCX0KLSNlbmRpZgotCQkJCWlmIChuZXQtPnJv
Ll9sX2FkZHIuc2Euc2FfZmFtaWx5ICE9Ci0JCQkJICAgIHJlbW90ZS0+c2FfZmFtaWx5KSB7Ci0J
CQkJCS8qIG5vdCB0aGUgc2FtZSBmYW1pbHkgKi8KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJ
CXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9J
TkVUOgotCQkJCXsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpyc2luOwotCi0JCQkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKLQkJCQkJICAgICZuZXQtPnJvLl9sX2FkZHI7
Ci0JCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVtb3RlOwotCQkJCQlpZiAoc2lu
LT5zaW5fYWRkci5zX2FkZHIgPT0KLQkJCQkJICAgIHJzaW4tPnNpbl9hZGRyLnNfYWRkcikgewot
CQkJCQkJLyogZm91bmQgaXQgKi8KLQkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKLQkJCQkJCQkq
bmV0cCA9IG5ldDsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsKLQkJ
CQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRfdGNi
ICE9IHN0Y2IpIHsKLQkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOwotCQkJCQkJfQot
CQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2Nr
ZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJCQl9Ci0JCQkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCQkJCXJldHVybiAoc3Rj
Yik7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
CQljYXNlIEFGX0lORVQ2OgotCQkJCXsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwg
KnJzaW42OwotCi0JCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKQotCQkJCQkgICAg
Jm5ldC0+cm8uX2xfYWRkcjsKLQkJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXJl
bW90ZTsKLQkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCi0JCQkJCSAgICByc2lu
NikpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0JCQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7Ci0J
CQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9ja2VkX3RjYiA9PSBOVUxM
KSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJCX0gZWxzZSBpZiAobG9j
a2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJ
CQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJfQotCQkJCQkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOwotCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCQkJCQlyZXR1
cm4gKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJewotCQkJCQlzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqc2Nvbm4sICpyc2Nvbm47Ci0KLQkJCQkJc2Nvbm4gPSAoc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyOwotCQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKilyZW1vdGU7Ci0JCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nv
bm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0JCQkJCQlpZiAobmV0cCAh
PSBOVUxMKSB7Ci0JCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9ja2Vk
X3RjYiA9PSBOVUxMKSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJCX0g
ZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJU0NUUF9UQ0JfTE9DSyhsb2Nr
ZWRfdGNiKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCQkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJfQotCQkJ
CQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7
Ci0JCQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLSNlbmRp
ZgotCQkJCWRlZmF1bHQ6Ci0JCQkJCS8qIFRTTkggKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJ
fQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JfQotbnVsbF9yZXR1cm46Ci0JLyog
Y2xlYW4gdXAgZm9yIHJldHVybmluZyBudWxsICovCi0JaWYgKGxvY2tlZF90Y2IpIHsKLQkJU0NU
UF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOwotCX0KLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JU0NUUF9J
TlBfSU5GT19SVU5MT0NLKCk7Ci0JLyogbm90IGZvdW5kICovCi0JcmV0dXJuIChOVUxMKTsKLX0K
LQotCi0vKgotICogRmluZCBhbiBhc3NvY2lhdGlvbiBmb3IgYSBzcGVjaWZpYyBlbmRwb2ludCB1
c2luZyB0aGUgYXNzb2NpYXRpb24gaWQgZ2l2ZW4KLSAqIG91dCBpbiB0aGUgQ09NTV9VUCBub3Rp
ZmljYXRpb24KLSAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzb2NfZXBfYXNvY2lk
X2xvY2tlZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzY3RwX2Fzc29jX3QgYXNvY19pZCwgaW50
IHdhbnRfbG9jaykKLXsKLQkvKgotCSAqIFVzZSBteSB0aGUgYXNzb2NfaWQgdG8gZmluZCBhIGVu
ZHBvaW50Ci0JICovCi0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQlzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2I7Ci0JdWludDMyX3QgaWQ7Ci0KLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9Q
UklOVEYoIlRTTkggZXBfYXNzb2NpZFxuIik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQlTQ1RQ
X1BSSU5URigiVFNOSCBlcF9hc3NvY2lkMFxuIik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlk
ID0gKHVpbnQzMl90KWFzb2NfaWQ7Ci0JaGVhZCA9ICZpbnAtPnNjdHBfYXNvY2lkaGFzaFtTQ1RQ
X1BDQkhBU0hfQVNPQyhpZCwgaW5wLT5oYXNoYXNvY2lkbWFyayldOwotCWlmIChoZWFkID09IE5V
TEwpIHsKLQkJLyogaW52YWxpZCBpZCBUU05IICovCi0JCVNDVFBfUFJJTlRGKCJUU05IIGVwX2Fz
c29jaWQxXG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JTElTVF9GT1JFQUNIKHN0Y2IsIGhl
YWQsIHNjdHBfdGNiYXNvY2lkaGFzaCkgewotCQlpZiAoc3RjYi0+YXNvYy5hc3NvY19pZCA9PSBp
ZCkgewotCQkJaWYgKGlucCAhPSBzdGNiLT5zY3RwX2VwKSB7Ci0JCQkJLyoKLQkJCQkgKiBzb21l
IG90aGVyIGd1eSBoYXMgdGhlIHNhbWUgaWQgYWN0aXZlIChpZAotCQkJCSAqIGNvbGxpc2lvbiA/
PykuCi0JCQkJICovCi0JCQkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNzb2NpZDJcbiIpOwotCQkJ
CWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FC
T1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAod2FudF9sb2Nr
KSB7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCX0KLQkJCXJldHVybiAoc3RjYik7Ci0J
CX0KLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotCi1zdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9m
aW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHNjdHBfYXNz
b2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2NrKQotewotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
LQotCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0Jc3RjYiA9IHNjdHBfZmluZGFzb2NfZXBfYXNvY2lk
X2xvY2tlZChpbnAsIGFzb2NfaWQsIHdhbnRfbG9jayk7Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCXJldHVybiAoc3RjYik7Ci19Ci0KLQotLyoKLSAqIEVuZHBvaW50IHByb2JlIGV4cGVjdHMg
dGhhdCB0aGUgSU5QX0lORk8gaXMgbG9ja2VkLgotICovCi1zdGF0aWMgc3RydWN0IHNjdHBfaW5w
Y2IgKgotc2N0cF9lbmRwb2ludF9wcm9iZShzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwgc3RydWN0IHNj
dHBwY2JoZWFkICpoZWFkLAotCQkgICAgdWludDE2X3QgbHBvcnQsIHVpbnQzMl90IHZyZl9pZCkK
LXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsK
LSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAq
aW50Zl9hZGRyNjsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqc2Nvbm47Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX01WUkYKLQlpbnQgaTsK
LSNlbmRpZgotCWludCAgZm5kOwotCi0jaWZkZWYgSU5FVAotCXNpbiA9IE5VTEw7Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCXNpbjYgPSBOVUxMOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotCXNjb25uID0gTlVMTDsKLSNlbmRpZgotCXN3aXRjaCAobmFtLT5zYV9mYW1pbHkp
IHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopbmFtOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVU
NjoKLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmFtOwotCQlicmVhazsKLSNlbmRp
ZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCXNjb25uID0g
KHN0cnVjdCBzb2NrYWRkcl9jb25uICopbmFtOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6
Ci0JCS8qIHVuc3VwcG9ydGVkIGZhbWlseSAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWlm
IChoZWFkID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlMSVNUX0ZPUkVBQ0goaW5wLCBo
ZWFkLCBzY3RwX2hhc2gpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJaWYgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7Ci0JCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSAmJgotCQkgICAgKGlucC0+c2N0cF9scG9ydCA9PSBs
cG9ydCkpIHsKLQkJCS8qIGdvdCBpdCAqLwotCQkJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoKLQkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlu
cCkpIHsKLQkJCQkJLyogSVB2NCBvbiBhIElQdjYgc29ja2V0IHdpdGggT05MWSBJUHY2IHNldCAq
LwotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBf
aW5wLmlucC5pbnBfY3JlZCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRk
cikgIT0gMCkgewotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCWNvbnRpbnVlOwot
CQkJCX0KLSNlbmRpZgotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCWNhc2Ug
QUZfSU5FVDY6Ci0JCQkJLyogQSBWNiBhZGRyZXNzIGFuZCB0aGUgZW5kcG9pbnQgaXMgTk9UIGJv
dW5kIFY2ICovCi0JCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
RF9WNikgPT0gMCkgewotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCWNvbnRpbnVl
OwotCQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tf
aXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAm
c2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0JCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1
bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBkb2VzIGEgVlJGIGlkIG1hdGNoPyAqLwotCQkJ
Zm5kID0gMDsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92
cmZzOyBpKyspIHsKLQkJCQlpZiAoaW5wLT5tX3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7Ci0JCQkJ
CWZuZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLSNlbHNlCi0JCQlpZiAoaW5wLT5k
ZWZfdnJmX2lkID09IHZyZl9pZCkKLQkJCQlmbmQgPSAxOwotI2VuZGlmCi0KLQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKLQkJCWlmICghZm5kKQotCQkJCWNvbnRpbnVlOwotCQkJcmV0dXJuIChp
bnApOwotCQl9Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0Jc3dpdGNoIChuYW0tPnNh
X2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWlmIChzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7Ci0JCQkvKiBDYW4ndCBodW50IGZvciBvbmUgdGhh
dCBoYXMgbm8gYWRkcmVzcyBzcGVjaWZpZWQgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCWlmIChJTjZf
SVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJLyogQ2FuJ3QgaHVu
dCBmb3Igb25lIHRoYXQgaGFzIG5vIGFkZHJlc3Mgc3BlY2lmaWVkICovCi0JCQlyZXR1cm4gKE5V
TEwpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CWNhc2UgQUZfQ09OTjoKLQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IE5VTEwpIHsKLQkJCXJl
dHVybiAoTlVMTCk7Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlicmVhazsK
LQl9Ci0JLyoKLQkgKiBvaywgbm90IGJvdW5kIHRvIGFsbCBzbyBzZWUgaWYgd2UgY2FuIGZpbmQg
YSBFUCBib3VuZCB0byB0aGlzCi0JICogYWRkcmVzcy4KLQkgKi8KLQlMSVNUX0ZPUkVBQ0goaW5w
LCBoZWFkLCBzY3RwX2hhc2gpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7Ci0JCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJY29udGludWU7Ci0JCX0KLQkJLyoKLQkJICogT2sgdGhpcyBjb3VsZCBiZSBhIGxpa2Vs
eSBjYW5kaWRhdGUsIGxvb2sgYXQgYWxsIG9mIGl0cwotCQkgKiBhZGRyZXNzZXMKLQkJICovCi0J
CWlmIChpbnAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGRvZXMgYSBWUkYgaWQgbWF0Y2g/ICovCi0JCWZu
ZCA9IDA7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZz
OyBpKyspIHsKLQkJCWlmIChpbnAtPm1fdnJmX2lkc1tpXSA9PSB2cmZfaWQpIHsKLQkJCQlmbmQg
PSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZWxzZQotCQlpZiAoaW5wLT5kZWZfdnJmX2lk
ID09IHZyZl9pZCkKLQkJCWZuZCA9IDE7Ci0KLSNlbmRpZgotCQlpZiAoIWZuZCkgewotCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJY29udGludWU7Ci0JCX0KLQkJTElTVF9GT1JFQUNIKGxh
ZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJaWYgKGxhZGRy
LT5pZmEgPT0gTlVMTCkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiJXM6IE5VTEwg
aWZhXG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlTQ1RQREJH
KFNDVFBfREVCVUdfUENCMSwgIk9rIGxhZGRyLT5pZmE6JXAgaXMgcG9zc2libGUsICIsCi0JCQkJ
KHZvaWQgKilsYWRkci0+aWZhKTsKLQkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAm
IFNDVFBfQkVJTkdfREVMRVRFRCkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiSHVo
IElGQSBiZWluZyBkZWxldGVkXG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChsYWRk
ci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBuYW0tPnNhX2ZhbWlseSkgewotCQkJCS8q
IHBvc3NpYmxlLCBzZWUgaWYgaXQgbWF0Y2hlcyAqLwotCQkJCXN3aXRjaCAobmFtLT5zYV9mYW1p
bHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCQkJCQlpZiAoc2luID09IE5VTEwpIHsKLQkJCQkJCS8qIFRTTkggKi8KLQkJCQkJCWJy
ZWFrOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09Ci0J
CQkJCSAgICBsYWRkci0+aWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQkJCXJldHVybiAoaW5wKTsKLQkJCQkJfQotCQkJ
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJ
aW50Zl9hZGRyNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJCWlmIChTQ1RQNl9B
UkVfQUREUl9FUVVBTChzaW42LAotCQkJCQkgICAgaW50Zl9hZGRyNikpIHsKLQkJCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJCQkJCXJldHVybiAoaW5wKTsKLQkJCQkJfQotCQkJCQlicmVh
azsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46
Ci0JCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSBsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25u
LnNjb25uX2FkZHIpIHsKLQkJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQkJCXJldHVy
biAoaW5wKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotCQkJCX0KLQkJCX0KLQkJfQot
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotc3Rh
dGljIHN0cnVjdCBzY3RwX2lucGNiICoKLXNjdHBfaXNwb3J0X2ludXNlKHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1aW50MzJfdCB2cmZfaWQpCi17Ci0Jc3RydWN0IHNj
dHBwY2JoZWFkICpoZWFkOwotCXN0cnVjdCBzY3RwX2lucGNiICp0X2lucDsKLSNpZmRlZiBTQ1RQ
X01WUkYKLQlpbnQgaTsKLSNlbmRpZgotCWludCBmbmQ7Ci0KLQloZWFkID0gJlNDVFBfQkFTRV9J
TkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9ydCwKLQkgICAgU0NUUF9C
QVNFX0lORk8oaGFzaG1hcmspKV07Ci0JTElTVF9GT1JFQUNIKHRfaW5wLCBoZWFkLCBzY3RwX2hh
c2gpIHsKLQkJaWYgKHRfaW5wLT5zY3RwX2xwb3J0ICE9IGxwb3J0KSB7Ci0JCQljb250aW51ZTsK
LQkJfQotCQkvKiBpcyBpdCBpbiB0aGUgVlJGIGluIHF1ZXN0aW9uICovCi0JCWZuZCA9IDA7Ci0j
aWZkZWYgU0NUUF9NVlJGCi0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsK
LQkJCWlmICh0X2lucC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgewotCQkJCWZuZCA9IDE7Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbHNlCi0JCWlmICh0X2lucC0+ZGVmX3ZyZl9pZCA9PSB2
cmZfaWQpCi0JCQlmbmQgPSAxOwotI2VuZGlmCi0JCWlmICghZm5kKQotCQkJY29udGludWU7Ci0K
LQkJLyogVGhpcyBvbmUgaXMgaW4gdXNlLiAqLwotCQkvKiBjaGVjayB0aGUgdjYvdjQgYmluZGlu
ZyBpc3N1ZSAqLwotCQlpZiAoKHRfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRfVjYpICYmCi0JCSAgICBTQ1RQX0lQVjZfVjZPTkxZKHRfaW5wKSkgewotCQkJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7Ci0JCQkJLyogY29sbGlzaW9u
IGluIFY2IHNwYWNlICovCi0JCQkJcmV0dXJuICh0X2lucCk7Ci0JCQl9IGVsc2UgewotCQkJCS8q
IGlucCBpcyBCT1VORF9WNCBubyBjb25mbGljdCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9
IGVsc2UgaWYgKHRfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsK
LQkJCS8qIHRfaW5wIGlzIGJvdW5kIHY0IGFuZCB2NiwgY29uZmxpY3QgYWx3YXlzICovCi0JCQly
ZXR1cm4gKHRfaW5wKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHRfaW5wIGlzIGJvdW5kIG9ubHkgVjQg
Ki8KLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYm
Ci0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7Ci0JCQkJLyogbm8gY29uZmxpY3QgKi8K
LQkJCQljb250aW51ZTsKLQkJCX0KLQkJCS8qIGVsc2UgZmFsbCB0aHJvdWdoIHRvIGNvbmZsaWN0
ICovCi0JCX0KLQkJcmV0dXJuICh0X2lucCk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQot
aW50Ci1zY3RwX3N3YXBfaW5wY2JfZm9yX2xpc3RlbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKQot
ewotCS8qIEZvciAxLTItMSB3aXRoIHBvcnQgcmV1c2UgKi8KLQlzdHJ1Y3Qgc2N0cHBjYmhlYWQg
KmhlYWQ7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKnRpbnAsICpuaW5wOwotCi0JaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSB7Ci0JCS8qIG9ubHkg
d29ya3Mgd2l0aCBwb3J0IHJldXNlIG9uICovCi0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpID09IDApIHsKLQkJcmV0
dXJuICgwKTsKLQl9Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCVNDVFBfSU5QX0lORk9fV0xP
Q0soKTsKLQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hf
QUxMQUREUihpbnAtPnNjdHBfbHBvcnQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0JLyogS2ljayBvdXQgYWxsIG5vbi1s
aXN0ZW5lcnMgdG8gdGhlIFRDUCBoYXNoICovCi0JTElTVF9GT1JFQUNIX1NBRkUodGlucCwgaGVh
ZCwgc2N0cF9oYXNoLCBuaW5wKSB7Ci0JCWlmICh0aW5wLT5zY3RwX2xwb3J0ICE9IGlucC0+c2N0
cF9scG9ydCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYg
KHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgewotCQkJY29u
dGludWU7Ci0JCX0KLQkJaWYgKFNDVFBfSVNfTElTVEVOSU5HKHRpbnApKSB7Ci0JCQljb250aW51
ZTsKLQkJfQotCQlTQ1RQX0lOUF9XTE9DSyh0aW5wKTsKLQkJTElTVF9SRU1PVkUodGlucCwgc2N0
cF9oYXNoKTsKLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9Q
Q0JIQVNIX0FMTEFERFIodGlucC0+c2N0cF9scG9ydCwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1h
cmspKV07Ci0JCXRpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTDsK
LQkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCB0aW5wLCBzY3RwX2hhc2gpOwotCQlTQ1RQX0lOUF9X
VU5MT0NLKHRpbnApOwotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCS8qIFB1bGwgZnJvbSB3
aGVyZSBoZSB3YXMgKi8KLQlMSVNUX1JFTU9WRShpbnAsIHNjdHBfaGFzaCk7Ci0JaW5wLT5zY3Rw
X2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MOwotCWhlYWQgPSAmU0NUUF9CQVNF
X0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGlucC0+c2N0cF9scG9ydCwg
U0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0JTElTVF9JTlNFUlRfSEVBRChoZWFkLCBpbnAs
IHNjdHBfaGFzaCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotCi1zdHJ1
Y3Qgc2N0cF9pbnBjYiAqCi1zY3RwX3BjYl9maW5kZXAoc3RydWN0IHNvY2thZGRyICpuYW0sIGlu
dCBmaW5kX3RjcF9wb29sLCBpbnQgaGF2ZV9sb2NrLAotCQl1aW50MzJfdCB2cmZfaWQpCi17Ci0J
LyoKLQkgKiBGaXJzdCB3ZSBjaGVjayB0aGUgaGFzaCB0YWJsZSB0byBzZWUgaWYgc29tZW9uZSBo
YXMgdGhpcyBwb3J0Ci0JICogYm91bmQgd2l0aCBqdXN0IHRoZSBwb3J0LgotCSAqLwotCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBwY2JoZWFkICpoZWFkOwotCWludCBscG9y
dDsKLQl1bnNpZ25lZCBpbnQgaTsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpz
aW47Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jc3RydWN0IHNvY2thZGRyX2Nvbm4g
KnNjb25uOwotI2VuZGlmCi0KLQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5hbTsKLQkJ
bHBvcnQgPSBzaW4tPnNpbl9wb3J0OwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
Y2FzZSBBRl9JTkVUNjoKLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmFtOwotCQls
cG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJf
Y29ubiAqKW5hbTsKLQkJbHBvcnQgPSBzY29ubi0+c2Nvbm5fcG9ydDsKLQkJYnJlYWs7Ci0jZW5k
aWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIEkgY291bGQgY2hl
YXQgaGVyZSBhbmQganVzdCBjYXN0IHRvIG9uZSBvZiB0aGUgdHlwZXMgYnV0IHdlIHdpbGwKLQkg
KiBkbyBpdCByaWdodC4gSXQgYWxzbyBwcm92aWRlcyB0aGUgY2hlY2sgYWdhaW5zdCBhbiBVbnN1
cHBvcnRlZAotCSAqIHR5cGUgdG9vLgotCSAqLwotCS8qIEZpbmQgdGhlIGhlYWQgb2YgdGhlIEFM
TEFERFIgY2hhaW4gKi8KLQlpZiAoaGF2ZV9sb2NrID09IDApIHsKLQkJU0NUUF9JTlBfSU5GT19S
TE9DSygpOwotCX0KLQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BD
QkhBU0hfQUxMQUREUihscG9ydCwKLQkgICAgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0J
aW5wID0gc2N0cF9lbmRwb2ludF9wcm9iZShuYW0sIGhlYWQsIGxwb3J0LCB2cmZfaWQpOwotCi0J
LyoKLQkgKiBJZiB0aGUgVENQIG1vZGVsIGV4aXN0cyBpdCBjb3VsZCBiZSB0aGF0IHRoZSBtYWlu
IGxpc3RlbmluZwotCSAqIGVuZHBvaW50IGlzIGdvbmUgYnV0IHRoZXJlIHN0aWxsIGV4aXN0cyBh
IGNvbm5lY3RlZCBzb2NrZXQgZm9yIHRoaXMKLQkgKiBndXkuIElmIHNvIHdlIGNhbiByZXR1cm4g
dGhlIGZpcnN0IG9uZSB0aGF0IHdlIGZpbmQuIFRoaXMgbWF5IE5PVAotCSAqIGJlIHRoZSBjb3Jy
ZWN0IG9uZSBzbyB0aGUgY2FsbGVyIHNob3VsZCBiZSB3YXJ5IG9uIHRoZSByZXR1cm5lZCBJTlAu
Ci0JICogQ3VycmVudGx5IHRoZSBvbmx5IGNhbGxlciB0aGF0IHNldHMgZmluZF90Y3BfcG9vbCBp
cyBpbiBiaW5keCB3aGVyZQotCSAqIHdlIGFyZSB2ZXJpZnlpbmcgdGhhdCBhIHVzZXIgQ0FOIGJp
bmQgdGhlIGFkZHJlc3MuIEhlIGVpdGhlcgotCSAqIGhhcyBib3VuZCBpdCBhbHJlYWR5LCBvciBz
b21lb25lIGVsc2UgaGFzLCBvciBpdHMgb3BlbiB0byBiaW5kLAotCSAqIHNvIHRoaXMgaXMgZ29v
ZCBlbm91Z2guCi0JICovCi0JaWYgKGlucCA9PSBOVUxMICYmIGZpbmRfdGNwX3Bvb2wpIHsKLQkJ
Zm9yIChpID0gMDsgaSA8IFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSArIDE7IGkrKykgewot
CQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbaV07Ci0JCQlpbnAgPSBz
Y3RwX2VuZHBvaW50X3Byb2JlKG5hbSwgaGVhZCwgbHBvcnQsIHZyZl9pZCk7Ci0JCQlpZiAoaW5w
KSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGlucCkgewotCQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOwotCX0KLQlpZiAoaGF2ZV9sb2NrID09IDApIHsKLQkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7Ci0JfQotCXJldHVybiAoaW5wKTsKLX0KLQotCi0vKgotICogRmluZCBhbiBh
c3NvY2lhdGlvbiBmb3IgYW4gZW5kcG9pbnQgd2l0aCB0aGUgcG9pbnRlciB0byB3aG9tIHlvdSB3
YW50IHRvCi0gKiBzZW5kIHRvIGFuZCB0aGUgZW5kcG9pbnQgcG9pbnRlci4gVGhlIGFkZHJlc3Mg
Y2FuIGJlIElQdjQgb3IgSVB2Ni4gV2UgbWF5Ci0gKiBuZWVkIHRvIGNoYW5nZSB0aGUgKnRvIHRv
IHNvbWUgb3RoZXIgc3RydWN0IGxpa2UgYSBtYnVmLi4uCi0gKi8KLXN0cnVjdCBzY3RwX3RjYiAq
Ci1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHN0cnVjdCBzb2NrYWRkciAqZnJvbSwgc3Ry
dWN0IHNvY2thZGRyICp0bywKLSAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qg
c2N0cF9uZXRzICoqbmV0cCwgaW50IGZpbmRfdGNwX3Bvb2wsCi0gICAgdWludDMyX3QgdnJmX2lk
KQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnAgPSBOVUxMOwotCXN0cnVjdCBzY3RwX3RjYiAq
c3RjYjsKLQotCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLQlpZiAoZmluZF90Y3BfcG9vbCkgewot
CQlpZiAoaW5wX3AgIT0gTlVMTCkgewotCQkJc3RjYiA9IHNjdHBfdGNiX3NwZWNpYWxfbG9jYXRl
KGlucF9wLCBmcm9tLCB0bywgbmV0cCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB2cmZfaWQpOwotCQl9IGVsc2UgewotCQkJc3RjYiA9IHNjdHBfdGNiX3NwZWNpYWxfbG9jYXRl
KCZpbnAsIGZyb20sIHRvLCBuZXRwLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZyZl9pZCk7Ci0JCX0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJU0NUUF9JTlBfSU5GT19S
VU5MT0NLKCk7Ci0JCQlyZXR1cm4gKHN0Y2IpOwotCQl9Ci0JfQotCWlucCA9IHNjdHBfcGNiX2Zp
bmRlcCh0bywgMCwgMSwgdnJmX2lkKTsKLQlpZiAoaW5wX3AgIT0gTlVMTCkgewotCQkqaW5wX3Ag
PSBpbnA7Ci0JfQotCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCWlmIChpbnAgPT0gTlVMTCkg
ewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIG9rLCB3ZSBoYXZlIGFuIGVuZHBvaW50
LCBub3cgbGV0cyBmaW5kIHRoZSBhc3NvYyBmb3IgaXQgKGlmIGFueSkKLQkgKiB3ZSBub3cgcGxh
Y2UgdGhlIHNvdXJjZSBhZGRyZXNzIG9yIGZyb20gaW4gdGhlIHRvIG9mIHRoZSBmaW5kCi0JICog
ZW5kcG9pbnQgY2FsbC4gU2luY2UgaW4gcmVhbGl0eSB0aGlzIGNoYWluIGlzIHVzZWQgZnJvbSB0
aGUKLQkgKiBpbmJvdW5kIHBhY2tldCBzaWRlLgotCSAqLwotCWlmIChpbnBfcCAhPSBOVUxMKSB7
Ci0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLCBmcm9tLCBuZXRw
LCB0bywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0JfSBl
bHNlIHsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgZnJvbSwg
bmV0cCwgdG8sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwot
CX0KLQlyZXR1cm4gKHN0Y2IpOwotfQotCi0KLS8qCi0gKiBUaGlzIHJvdXRpbmUgd2lsbCBncnVi
IHRocm91Z2ggdGhlIG1idWYgdGhhdCBpcyBhIElOSVQgb3IgSU5JVC1BQ0sgYW5kCi0gKiBmaW5k
IGFsbCBhZGRyZXNzZXMgdGhhdCB0aGUgc2VuZGVyIGhhcyBzcGVjaWZpZWQgaW4gYW55IGFkZHJl
c3MgbGlzdC4gRWFjaAotICogYWRkcmVzcyB3aWxsIGJlIHVzZWQgdG8gbG9va3VwIHRoZSBUQ0Ig
YW5kIHNlZSBpZiBvbmUgZXhpdHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0
cF9maW5kYXNzb2NpYXRpb25fc3BlY2lhbF9hZGRyKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0
LAotICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3Ry
dWN0IHNjdHBfbmV0cyAqKm5ldHAsCi0gICAgc3RydWN0IHNvY2thZGRyICpkc3QpCi17Ci0Jc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKnBoZHIsIHBhcmFtX2J1ZjsKLSNpZiBkZWZpbmVkKElORVQpIHx8
IGRlZmluZWQoSU5FVDYpCi0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXVpbnQxNl90IHB0eXBl
OwotI2VuZGlmCi0JdWludDE2X3QgcGxlbjsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRy
X2luIHNpbjQ7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2lu
NjsKLSNlbmRpZgotCi0jaWZkZWYgSU5FVAotCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQp
KTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW40LnNpbl9sZW4gPSBzaXplb2Yoc2luNCk7Ci0j
ZW5kaWYKLQlzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCXNpbjQuc2luX3BvcnQgPSBzaC0+
c3JjX3BvcnQ7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9m
KHNpbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi5zaW42X2xlbiA9IHNpemVvZihz
aW42KTsKLSNlbmRpZgotCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQlzaW42LnNpbjZf
cG9ydCA9IHNoLT5zcmNfcG9ydDsKLSNlbmRpZgotCi0Jb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rKTsKLQotCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNl
dCwgJnBhcmFtX2J1Ziwgc2l6ZW9mKHBhcmFtX2J1ZikpOwotCXdoaWxlIChwaGRyICE9IE5VTEwp
IHsKLQkJLyogbm93IHdlIG11c3Qgc2VlIGlmIHdlIHdhbnQgdGhlIHBhcmFtZXRlciAqLwotI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQkJcHR5cGUgPSBudG9ocyhwaGRyLT5w
YXJhbV90eXBlKTsKLSNlbmRpZgotCQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsK
LQkJaWYgKHBsZW4gPT0gMCkgewotCQkJYnJlYWs7Ci0JCX0KLSNpZmRlZiBJTkVUCi0JCWlmIChw
dHlwZSA9PSBTQ1RQX0lQVjRfQUREUkVTUyAmJgotCQkgICAgcGxlbiA9PSBzaXplb2Yoc3RydWN0
IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7Ci0JCQkvKiBHZXQgdGhlIHJlc3Qgb2YgdGhlIGFkZHJl
c3MgKi8KLQkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtIGlwNF9wYXJhbSwgKnA0OwotCi0J
CQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCi0JCQkgICAgKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopJmlwNF9wYXJhbSwgc2l6ZW9mKGlwNF9wYXJhbSkpOwotCQkJaWYgKHBo
ZHIgPT0gTlVMTCkgewotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlwNCA9IChzdHJ1Y3Qg
c2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7Ci0JCQltZW1jcHkoJnNpbjQuc2luX2FkZHIsICZw
NC0+YWRkciwgc2l6ZW9mKHA0LT5hZGRyKSk7Ci0JCQkvKiBsb29rIGl0IHVwICovCi0JCQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKLQkJCSAgICAoc3RydWN0IHNv
Y2thZGRyICopJnNpbjQsIG5ldHAsIGRzdCwgTlVMTCk7Ci0JCQlpZiAoc3RjYiAhPSBOVUxMKSB7
Ci0JCQkJcmV0dXJuIChzdGNiKTsKLQkJCX0KLQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
aWYgKHB0eXBlID09IFNDVFBfSVBWNl9BRERSRVNTICYmCi0JCSAgICBwbGVuID09IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKLQkJCS8qIEdldCB0aGUgcmVzdCBvZiB0aGUg
YWRkcmVzcyAqLwotCQkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gaXA2X3BhcmFtLCAqcDY7
Ci0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKikmaXA2X3BhcmFtLCBzaXplb2YoaXA2X3BhcmFtKSk7Ci0JCQlp
ZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCXA2ID0gKHN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGhkcjsKLQkJCW1lbWNweSgmc2luNi5zaW42X2Fk
ZHIsICZwNi0+YWRkciwgc2l6ZW9mKHA2LT5hZGRyKSk7Ci0JCQkvKiBsb29rIGl0IHVwICovCi0J
CQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKLQkJCSAgICAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbjYsIG5ldHAsIGRzdCwgTlVMTCk7Ci0JCQlpZiAoc3RjYiAhPSBO
VUxMKSB7Ci0JCQkJcmV0dXJuIChzdGNiKTsKLQkJCX0KLQkJfQotI2VuZGlmCi0JCW9mZnNldCAr
PSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zm
c2V0LCAmcGFyYW1fYnVmLAotCQkJCQkgICBzaXplb2YocGFyYW1fYnVmKSk7Ci0JfQotCXJldHVy
biAoTlVMTCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9maW5kYXNzb2Nf
YnlfdnRhZyhzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHN0cnVjdCBzb2NrYWRkciAqdG8sIHVpbnQz
Ml90IHZ0YWcsCi0JCSAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0
cF9uZXRzICoqbmV0cCwgdWludDE2X3QgcnBvcnQsCi0JCSAgICAgICB1aW50MTZfdCBscG9ydCwg
aW50IHNraXBfc3JjX2NoZWNrLCB1aW50MzJfdCB2cmZfaWQsIHVpbnQzMl90IHJlbW90ZV90YWcp
Ci17Ci0JLyoKLQkgKiBVc2UgbXkgdnRhZyB0byBoYXNoLiBJZiB3ZSBmaW5kIGl0IHdlIHRoZW4g
dmVyaWZ5IHRoZSBzb3VyY2UgYWRkcgotCSAqIGlzIGluIHRoZSBhc3NvYy4gSWYgYWxsIGdvZXMg
d2VsbCB3ZSBzYXZlIGEgYml0IG9uIHJlYyBvZiBhCi0JICogcGFja2V0LgotCSAqLwotCXN0cnVj
dCBzY3RwYXNvY2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYjsKLSNpZmRlZiBTQ1RQX01WUkYKLQl1bnNpZ25lZCBpbnQgaTsKLSNlbmRp
ZgotCi0JU0NUUF9JTlBfSU5GT19STE9DSygpOwotCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0
cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0ModnRhZywKLQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQkFTRV9JTkZPKGhhc2hh
c29jbWFyaykpXTsKLQlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF9hc29jcykgewotCQlT
Q1RQX0lOUF9STE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJU0NUUF9JTlBfUlVO
TE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jaWZkZWYgU0NUUF9NVlJG
Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5zY3RwX2VwLT5udW1fdnJmczsgaSsrKSB7Ci0JCQlp
ZiAoc3RjYi0+c2N0cF9lcC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgewotCQkJCWJyZWFrOwot
CQkJfQotCQl9Ci0JCWlmIChpID09IHN0Y2ItPnNjdHBfZXAtPm51bV92cmZzKSB7Ci0JCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotI2Vsc2UKLQkJaWYgKHN0Y2It
PnNjdHBfZXAtPmRlZl92cmZfaWQgIT0gdnJmX2lkKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKHN0
Y2ItPnNjdHBfZXApOwotCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgotCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOwotCQlTQ1RQX0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwotCQlpZiAoc3RjYi0+
YXNvYy5teV92dGFnID09IHZ0YWcpIHsKLQkJCS8qIGNhbmRpZGF0ZSAqLwotCQkJaWYgKHN0Y2It
PnJwb3J0ICE9IHJwb3J0KSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCWNvbnRp
bnVlOwotCQkJfQotCQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsK
LQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBSUlM6TmVl
ZCB0b2FkZHIgY2hlY2sgaGVyZSAqLwotCQkJaWYgKHNjdHBfZG9lc19zdGNiX293bl90aGlzX2Fk
ZHIoc3RjYiwgdG8pID09IDApIHsKLQkJCSAgICAgICAgLyogRW5kcG9pbnQgZG9lcyBub3Qgb3du
IHRoaXMgYWRkcmVzcyAqLwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCWlmIChyZW1vdGVfdGFnKSB7Ci0JCQkJLyogSWYgd2UgaGF2ZSBib3RoIHZ0
YWdzIHRoYXQncyBhbGwgd2UgbWF0Y2ggb24gKi8KLQkJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX3Z0
YWcgPT0gcmVtb3RlX3RhZykgewotCQkJCQkvKiBJZiBib3RoIHRhZ3MgbWF0Y2ggd2UgY29uc2lk
ZXIgaXQgY29uY2x1c2l2ZQotCQkJCQkgKiBhbmQgY2hlY2sgTk8gc291cmNlL2Rlc3RpbmF0aW9u
IGFkZHJlc3NlcwotCQkJCQkgKi8KLQkJCQkJZ290byBjb25jbHVzaXZlOwotCQkJCX0KLQkJCX0K
LQkJCWlmIChza2lwX3NyY19jaGVjaykgewotCQkJY29uY2x1c2l2ZToKLQkJCSAgICAgICAgaWYg
KGZyb20pIHsKLQkJCQkJKm5ldHAgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgZnJvbSk7Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJKm5ldHAgPSBOVUxMOwkvKiB1bmtub3duICovCi0JCQkJfQotCQkJCWlmIChp
bnBfcCkKLQkJCQkJKmlucF9wID0gc3RjYi0+c2N0cF9lcDsKLQkJCQlTQ1RQX0lOUF9JTkZPX1JV
TkxPQ0soKTsKLQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJfQotCQkJbmV0ID0gc2N0cF9maW5kbmV0
KHN0Y2IsIGZyb20pOwotCQkJaWYgKG5ldCkgewotCQkJCS8qIHllcCBpdHMgaGltLiAqLwotCQkJ
CSpuZXRwID0gbmV0OwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0YWdleHByZXNzKTsKLQkJ
CQkqaW5wX3AgPSBzdGNiLT5zY3RwX2VwOwotCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwot
CQkJCXJldHVybiAoc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogbm90IGhpbSwg
dGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW4gcmFyZQotCQkJCSAqIGNhc2VzIHNvIEkgcGVnIGl0
LgotCQkJCSAqLwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0YWdib2d1cyk7Ci0JCQl9Ci0J
CX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCX0KLQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0so
KTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi0KLS8qCi0gKiBGaW5kIGFuIGFzc29jaWF0aW9uIHdp
dGggdGhlIHBvaW50ZXIgdG8gdGhlIGluYm91bmQgSVAgcGFja2V0LiBUaGlzIGNhbiBiZQotICog
YSBJUHY0IG9yIElQdjYgcGFja2V0LgotICovCi1zdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9maW5k
YXNzb2NpYXRpb25fYWRkcihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwKLSAgICBzdHJ1Y3Qg
c29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIg
KnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsCi0gICAgc3RydWN0IHNjdHBfaW5wY2IgKipp
bnBfcCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsIHVpbnQzMl90IHZyZl9pZCkKLXsKLQlzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlmIChzaC0+
dl90YWcpIHsKLQkJLyogd2Ugb25seSBnbyBkb3duIHRoaXMgcGF0aCBpZiB2dGFnIGlzIG5vbi16
ZXJvICovCi0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY19ieV92dGFnKHNyYywgZHN0LCBudG9obChz
aC0+dl90YWcpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnBfcCwgbmV0cCwg
c2gtPnNyY19wb3J0LCBzaC0+ZGVzdF9wb3J0LCAwLCB2cmZfaWQsIDApOwotCQlpZiAoc3RjYikg
ewotCQkJcmV0dXJuIChzdGNiKTsKLQkJfQotCX0KLQotCWlmIChpbnBfcCkgewotCQlzdGNiID0g
c2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYShzcmMsIGRzdCwgaW5wX3AsIG5ldHAsCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHZyZl9pZCk7Ci0JCWlucCA9ICpp
bnBfcDsKLQl9IGVsc2UgewotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYShz
cmMsIGRzdCwgJmlucCwgbmV0cCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMSwgdnJmX2lkKTsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJzdGNiOiVwIGlu
cDolcFxuIiwgKHZvaWQgKilzdGNiLCAodm9pZCAqKWlucCk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCAm
JiBpbnApIHsKLQkJLyogRm91bmQgYSBFUCBidXQgbm90IHRoaXMgYWRkcmVzcyAqLwotCQlpZiAo
KGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElBVElPTikgfHwKLQkJICAgIChjaC0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0lOSVRJQVRJT05fQUNLKSkgewotCQkJLyotCi0JCQkgKiBzcGVjaWFsIGhv
b2ssIHdlIGRvIE5PVCByZXR1cm4gbGlucCBvciBhbgotCQkJICogYXNzb2NpYXRpb24gdGhhdCBp
cyBsaW5rZWQgdG8gYW4gZXhpc3RpbmcKLQkJCSAqIGFzc29jaWF0aW9uIHRoYXQgaXMgdW5kZXIg
dGhlIFRDUCBwb29sIChpLmUuIG5vCi0JCQkgKiBsaXN0ZW5lciBleGlzdHMpLiBUaGUgZW5kcG9p
bnQgZmluZGluZyByb3V0aW5lCi0JCQkgKiB3aWxsIGFsd2F5cyBmaW5kIGEgbGlzdGVuZXIgYmVm
b3JlIGV4YW1pbmluZyB0aGUKLQkJCSAqIFRDUCBwb29sLgotCQkJICovCi0JCQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgewotCQkJCWlmIChpbnBfcCkg
ewotCQkJCQkqaW5wX3AgPSBOVUxMOwotCQkJCX0KLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQot
CQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX3NwZWNpYWxfYWRkcihtLAotCQkJICAgIG9m
ZnNldCwgc2gsICZpbnAsIG5ldHAsIGRzdCk7Ci0JCQlpZiAoaW5wX3AgIT0gTlVMTCkgewotCQkJ
CSppbnBfcCA9IGlucDsKLQkJCX0KLQkJfQotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwg
InN0Y2IgaXMgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JcmV0dXJuIChzdGNiKTsKLX0KLQotLyoK
LSAqIGxvb2t1cCBhbiBhc3NvY2lhdGlvbiBieSBhbiBBU0NPTkYgbG9va3VwIGFkZHJlc3MuCi0g
KiBpZiB0aGUgbG9va3VwIGFkZHJlc3MgaXMgMC4wLjAuMCBvciA6OjAsIHVzZSB0aGUgdnRhZyB0
byBkbyB0aGUgbG9va3VwCi0gKi8KLXN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hc2NvbmYoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCi0JCQkgICAgICAgc3Ry
dWN0IHNvY2thZGRyICpkc3QsIHN0cnVjdCBzY3RwaGRyICpzaCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICoqbmV0cCwgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQl1
bmlvbiBzY3RwX3NvY2tzdG9yZSByZW1vdGVfc3RvcmU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIg
cGFyYW1fYnVmLCAqcGhkcjsKLQlpbnQgcHR5cGU7Ci0JaW50IHplcm9fYWRkcmVzcyA9IDA7Ci0j
aWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmCi0KLQltZW1zZXQoJnJlbW90
ZV9zdG9yZSwgMCwgc2l6ZW9mKHJlbW90ZV9zdG9yZSkpOwotCXBoZHIgPSBzY3RwX2dldF9uZXh0
X3BhcmFtKG0sIG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmspLAotCQkJ
CSAgICZwYXJhbV9idWYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpOwotCWlmIChwaGRy
ID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzOiBmYWlsZWQgdG8g
Z2V0IGFzY29uZiBsb29rdXAgYWRkclxuIiwKLQkJCV9fZnVuY19fKTsKLQkJcmV0dXJuIE5VTEw7
Ci0JfQotCXB0eXBlID0gKGludCkoKHVpbnQzMl90KSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKSk7
Ci0JLyogZ2V0IHRoZSBjb3JyZWxhdGlvbiBhZGRyZXNzICovCi0Jc3dpdGNoIChwdHlwZSkgewot
I2lmZGVmIElORVQ2Ci0JY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKLQl7Ci0JCS8qIGlwdjYgYWRk
cmVzcyBwYXJhbSAqLwotCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqcDYsIHA2X2J1ZjsK
LQotCQlpZiAobnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKSAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
aXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQotCQlwNiA9IChzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSAqKXNjdHBfZ2V0X25leHRfcGFyYW0obSwKLQkJCQkJCQkJICAg
ICAgIG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmspLAotCQkJCQkJCQkg
ICAgICAgJnA2X2J1Zi5waCwgc2l6ZW9mKHA2X2J1ZikpOwotCQlpZiAocDYgPT0gTlVMTCkgewot
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzOiBmYWlsZWQgdG8gZ2V0IGFzY29uZiB2
NiBsb29rdXAgYWRkclxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9
Ci0JCXNpbjYgPSAmcmVtb3RlX3N0b3JlLnNpbjY7Ci0JCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZf
SU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZigq
c2luNik7Ci0jZW5kaWYKLQkJc2luNi0+c2luNl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQltZW1j
cHkoJnNpbjYtPnNpbjZfYWRkciwgJnA2LT5hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCXpl
cm9fYWRkcmVzcyA9IDE7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQljYXNl
IFNDVFBfSVBWNF9BRERSRVNTOgotCXsKLQkJLyogaXB2NCBhZGRyZXNzIHBhcmFtICovCi0JCXN0
cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICpwNCwgcDRfYnVmOwotCi0JCWlmIChudG9ocyhwaGRy
LT5wYXJhbV9sZW5ndGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsK
LQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXA0ID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFt
ICopc2N0cF9nZXRfbmV4dF9wYXJhbShtLAotCQkJCQkJCQkgICAgICAgb2Zmc2V0ICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCi0JCQkJCQkJCSAgICAgICAmcDRfYnVmLnBoLCBz
aXplb2YocDRfYnVmKSk7Ci0JCWlmIChwNCA9PSBOVUxMKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQgYXNjb25mIHY0IGxvb2t1cCBhZGRyXG4iLAot
CQkJCV9fZnVuY19fKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJc2luID0gJnJlbW90ZV9z
dG9yZS5zaW47Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5f
TEVOCi0JCXNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKLSNlbmRpZgotCQlzaW4tPnNpbl9w
b3J0ID0gc2gtPnNyY19wb3J0OwotCQltZW1jcHkoJnNpbi0+c2luX2FkZHIsICZwNC0+YWRkciwg
c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJ
TkFERFJfQU5ZKQotCQkJemVyb19hZGRyZXNzID0gMTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0J
ZGVmYXVsdDoKLQkJLyogaW52YWxpZCBhZGRyZXNzIHBhcmFtIHR5cGUgKi8KLQkJcmV0dXJuIE5V
TEw7Ci0JfQotCi0JaWYgKHplcm9fYWRkcmVzcykgewotCSAgICAgICAgc3RjYiA9IHNjdHBfZmlu
ZGFzc29jX2J5X3Z0YWcoTlVMTCwgZHN0LCBudG9obChzaC0+dl90YWcpLCBpbnBfcCwKLQkJCQkJ
ICAgICAgbmV0cCwgc2gtPnNyY19wb3J0LCBzaC0+ZGVzdF9wb3J0LCAxLCB2cmZfaWQsIDApOwot
CQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRigqaW5wX3ApOwotCQl9
Ci0JfSBlbHNlIHsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3As
Ci0JCSAgICAmcmVtb3RlX3N0b3JlLnNhLCBuZXRwLAotCQkgICAgZHN0LCBOVUxMKTsKLQl9Ci0J
cmV0dXJuIChzdGNiKTsKLX0KLQotCi0vKgotICogYWxsb2NhdGUgYSBzY3RwX2lucGNiIGFuZCBz
ZXR1cCBhIHRlbXBvcmFyeSBiaW5kaW5nIHRvIGEgcG9ydC9hbGwKLSAqIGFkZHJlc3Nlcy4gVGhp
cyB3YXkgaWYgd2UgZG9uJ3QgZ2V0IGEgYmluZCB3ZSBieSBkZWZhdWx0IHBpY2sgYSBlcGhlbWVy
YWwKLSAqIHBvcnQgd2l0aCBhbGwgYWRkcmVzc2VzIGJvdW5kLgotICovCi1pbnQKLXNjdHBfaW5w
Y2JfYWxsb2Moc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90IHZyZl9pZCkKLXsKLQkvKgotCSAq
IHdlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBlbmRwb2ludCBzdGFydHMgdXAuIFdlIG5lZWQgdG8g
YWxsb2NhdGUKLQkgKiB0aGUgc2N0cF9pbnBjYiBzdHJ1Y3R1cmUgZnJvbSB0aGUgem9uZSBhbmQg
aW5pdCBpdC4gTWFyayBpdCBhcwotCSAqIHVuYm91bmQgYW5kIGZpbmQgYSBwb3J0IHRoYXQgd2Ug
Y2FuIHVzZSBhcyBhbiBlcGhlbWVyYWwgd2l0aAotCSAqIElOQUREUl9BTlkuIElmIHRoZSB1c2Vy
IGJpbmRzIGxhdGVyIG5vIHByb2JsZW0gd2UgY2FuIHRoZW4gYWRkIGluCi0JICogdGhlIHNwZWNp
ZmljIGFkZHJlc3Nlcy4gQW5kIHNldHVwIHRoZSBkZWZhdWx0IHBhcmFtZXRlcnMgZm9yIHRoZQot
CSAqIEVQLgotCSAqLwotCWludCBpLCBlcnJvcjsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwot
CXN0cnVjdCBzY3RwX3BjYiAqbTsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1lOwotCXNjdHBfc2hhcmVk
a2V5X3QgKm51bGxfa2V5OwotCi0JZXJyb3IgPSAwOwotCi0JU0NUUF9JTlBfSU5GT19XTE9DSygp
OwotCWlucCA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBzdHJ1
Y3Qgc2N0cF9pbnBjYik7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfUFJJTlRGKCJPdXQg
b2YgU0NUUC1JTlBDQiBzdHJ1Y3R1cmVzIC0gbm8gcmVzb3VyY2VzXG4iKTsKLQkJU0NUUF9JTlBf
SU5GT19XVU5MT0NLKCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QQ0IsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQkv
KiB6YXAgaXQgKi8KLQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkpOwotCi0JLyogYnVtcCBn
ZW5lcmF0aW9ucyAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlucC0+aXBfaW5wLmlucC5p
bnBfc3RhdGUgPSBJTlBDQl9TVEFURV9JTlVTRTsKLSNlbmRpZgotCS8qIHNldHVwIHNvY2tldCBw
b2ludGVycyAqLwotCWlucC0+c2N0cF9zb2NrZXQgPSBzbzsKLQlpbnAtPmlwX2lucC5pbnAuaW5w
X3NvY2tldCA9IHNvOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkID0gY3Job2xkKHNvLT5zb19jcmVkKTsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0JaWYg
KElOUF9TT0NLQUYoc28pID09IEFGX0lORVQ2KSB7Ci0JCWlmIChNT0RVTEVfR0xPQkFMKGlwNl9h
dXRvX2Zsb3dsYWJlbCkpIHsKLQkJCWlucC0+aXBfaW5wLmlucC5pbnBfZmxhZ3MgfD0gSU42UF9B
VVRPRkxPV0xBQkVMOwotCQl9Ci0JCWlmIChNT0RVTEVfR0xPQkFMKGlwNl92Nm9ubHkpKSB7Ci0J
CQlpbnAtPmlwX2lucC5pbnAuaW5wX2ZsYWdzIHw9IElONlBfSVBWNl9WNk9OTFk7Ci0JCX0KLQl9
Ci0jZW5kaWYKLSNlbmRpZgotCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIgPSAxOwotCWlucC0+
cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IFNDVFBfU0JfTElNSVRfUkNWKHNvKSA+PiBTQ1RQX1BB
UlRJQUxfREVMSVZFUllfU0hJRlQ7Ci0JaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSBTQ1RQX0RFRkFV
TFRfTUFYU0VHTUVOVDsKLQlpbnAtPm1heF9jd25kID0gMDsKLQlpbnAtPnNjdHBfY210X29uX29m
ZiA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKTsKLQlpbnAtPmVjbl9zdXBwb3J0
ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZWNuX2VuYWJsZSk7Ci0JaW5wLT5w
cnNjdHBfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX3ByX2VuYWJs
ZSk7Ci0JaW5wLT5hdXRoX3N1cHBvcnRlZCA9ICh1aW50OF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9hdXRoX2VuYWJsZSk7Ci0JaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpOwotCWlucC0+cmVjb25maWdfc3VwcG9ydGVk
ID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmlnX2VuYWJsZSk7Ci0JaW5w
LT5ucnNhY2tfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fj
a19lbmFibGUpOwotCWlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcGt0ZHJvcF9lbmFibGUpOwotCWlucC0+aWRhdGFfc3VwcG9ydGVkID0gMDsK
LQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JaW5wLT5maWJudW0gPSBzby0+c29fZmlibnVt
OwotI2Vsc2UKLQlpbnAtPmZpYm51bSA9IDA7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JaW5wLT51bHBfaW5mbyA9IE5VTEw7Ci0JaW5wLT5yZWN2X2NhbGxiYWNrID0gTlVM
TDsKLQlpbnAtPnNlbmRfY2FsbGJhY2sgPSBOVUxMOwotCWlucC0+c2VuZF9zYl90aHJlc2hvbGQg
PSAwOwotI2VuZGlmCi0JLyogaW5pdCB0aGUgc21hbGwgaGFzaCB0YWJsZSB3ZSB1c2UgdG8gdHJh
Y2sgYXNvY2lkIDwtPiB0Y2IgKi8KLQlpbnAtPnNjdHBfYXNvY2lkaGFzaCA9IFNDVFBfSEFTSF9J
TklUKFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUsICZpbnAtPmhhc2hhc29jaWRtYXJrKTsKLQlp
ZiAoaW5wLT5zY3RwX2Fzb2NpZGhhc2ggPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCi0JCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOwotI2VuZGlmCi0JCVNDVFBf
Wk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5wKTsKLQkJU0NUUF9JTlBf
SU5GT19XVU5MT0NLKCk7Ci0JCXJldHVybiAoRU5PQlVGUyk7Ci0JfQotCVNDVFBfSU5DUl9FUF9D
T1VOVCgpOwotCWlucC0+aXBfaW5wLmlucC5pbnBfaXBfdHRsID0gTU9EVUxFX0dMT0JBTChpcF9k
ZWZ0dGwpOwotCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCi0Jc28tPnNvX3BjYiA9IChjYWRk
cl90KWlucDsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
IDwgODAzMDAwCi0JaWYgKChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfREdSQU0pIHx8Ci0JICAg
IChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfU0VRUEFDS0VUKSkgewotI2Vsc2UKLQlpZiAoU0NU
UF9TT19UWVBFKHNvKSA9PSBTT0NLX1NFUVBBQ0tFVCkgewotI2VuZGlmCi0JCS8qIFVEUCBzdHls
ZSBzb2NrZXQgKi8KLQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUg
fAotCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCk7Ci0JCS8qIEJlIHN1cmUgaXQgaXMgTk9O
LUJMT0NLSU5HIElPIGZvciBVRFAgKi8KLQkJLyogU0NUUF9TRVRfU09fTkJJTyhzbyk7ICovCi0J
fSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfU1RSRUFNKSB7Ci0JCS8qIFRDUCBz
dHlsZSBzb2NrZXQgKi8KLQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUgfAotCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCk7Ci0JCS8qIEJlIHN1cmUgd2UgaGF2
ZSBibG9ja2luZyBJTyBieSBkZWZhdWx0ICovCi0JCVNDVFBfQ0xFQVJfU09fTkJJTyhzbyk7Ci0j
aWYgZGVmaW5lZChfX1BhbmRhX18pCi0JfSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNP
Q0tfRkFTVFNFUVBBQ0tFVCkgewotCQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1Nf
VURQVFlQRSB8Ci0JCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKTsKLQkJc2N0cF9mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSk7Ci0JfSBlbHNlIGlmIChT
Q1RQX1NPX1RZUEUoc28pID09IFNPQ0tfRkFTVFNUUkVBTSkgewotCQlpbnAtPnNjdHBfZmxhZ3Mg
PSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8Ci0JCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5E
KTsKLQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElW
RSk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvKgotCQkgKiB1bnN1cHBvcnRlZCBzb2NrZXQgdHlw
ZSAoUkFXLCBldGMpLSBpbiBjYXNlIHdlIG1pc3NlZCBpdAotCQkgKiBpbiBwcm90b3N3Ci0JCSAq
LwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
UENCLCBFT1BOT1RTVVBQKTsKLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQkJY3JmcmVlKGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCk7Ci0jZW5kaWYKLQkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBpbnApOwotCQlyZXR1
cm4gKEVPUE5PVFNVUFApOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRf
ZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQX0ZSQUdfTEVWRUxfMSkgewotCQlzY3RwX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOwotCQlzY3RwX2ZlYXR1cmVf
b2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7Ci0JfSBlbHNlIGlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBfRlJB
R19MRVZFTF8yKSB7Ci0JCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdf
SU5URVJMRUFWRSk7Ci0JCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVS
TEVBVkVfU1RSTVMpOwotCX0gZWxzZSBpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRf
ZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQX0ZSQUdfTEVWRUxfMCkgewotCQlzY3RwX2ZlYXR1cmVf
b2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKTsKLQkJc2N0cF9mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOwotCX0KLQlpbnAtPnNj
dHBfdGNiaGFzaCA9IFNDVFBfSEFTSF9JTklUKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0Ymxz
aXplKSwKLQkJCQkJICAgJmlucC0+c2N0cF9oYXNobWFyayk7Ci0JaWYgKGlucC0+c2N0cF90Y2Jo
YXNoID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIk91dCBvZiBTQ1RQLUlOUENCLT5oYXNoaW5p
dCAtIG5vIHJlc291cmNlc1xuIik7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT0JVRlMpOwotCQlzby0+c29fcGNiID0gTlVMTDsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5wLmlucF9j
cmVkKTsKLSNlbmRpZgotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9l
cCksIGlucCk7Ci0JCXJldHVybiAoRU5PQlVGUyk7Ci0JfQotI2lmZGVmIFNDVFBfTVZSRgotCWlu
cC0+dnJmX3NpemUgPSBTQ1RQX0RFRkFVTFRfVlJGX1NJWkU7Ci0JU0NUUF9NQUxMT0MoaW5wLT5t
X3ZyZl9pZHMsIHVpbnQzMl90ICosCi0JCSAgICAoc2l6ZW9mKHVpbnQzMl90KSAqIGlucC0+dnJm
X3NpemUpLCBTQ1RQX01fTVZSRik7Ci0JaWYgKGlucC0+bV92cmZfaWRzID09IE5VTEwpIHsKLQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RU5PQlVGUyk7Ci0JCXNvLT5zb19wY2IgPSBOVUxMOwotCQlTQ1RQX0hBU0hfRlJFRShpbnAtPnNj
dHBfdGNiaGFzaCwgaW5wLT5zY3RwX2hhc2htYXJrKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkKTsKLSNlbmRpZgotCQlTQ1RQX1pP
TkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIGlucCk7Ci0JCXJldHVybiAoRU5P
QlVGUyk7Ci0JfQotCWlucC0+bV92cmZfaWRzWzBdID0gdnJmX2lkOwotCWlucC0+bnVtX3ZyZnMg
PSAxOwotI2VuZGlmCi0JaW5wLT5kZWZfdnJmX2lkID0gdnJmX2lkOwotCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NO
T1dMRU9QQVJEKQotCWlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHggPSBsY2tfbXR4X2FsbG9jX2lu
aXQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9ncnAsIFNDVFBfQkFTRV9JTkZPKHNjdGJp
bmZvKS5tdHhfYXR0cik7Ci0JaWYgKGlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHggPT0gTlVMTCkg
ewotCQlTQ1RQX1BSSU5URigiaW5fcGNiYWxsb2M6IGNhbid0IGFsbG9jIG11dGV4ISBzbz0lcFxu
IiwgKHZvaWQgKilzbyk7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCVNDVFBfRlJFRShpbnAtPm1fdnJm
X2lkcywgU0NUUF9NX01WUkYpOwotI2VuZGlmCi0JCVNDVFBfSEFTSF9GUkVFKGlucC0+c2N0cF90
Y2JoYXNoLCBpbnAtPnNjdHBfaGFzaG1hcmspOwotCQlzby0+c29fcGNiID0gTlVMTDsKLQkJU0NU
UF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBpbnApOwotCQlTQ1RQX1VO
TE9DS19FWEMoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrKTsKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PTUVNKTsK
LQkJcmV0dXJuIChFTk9NRU0pOwotCX0KLSNlbGlmIGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVm
aW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCi0JbGNrX210eF9pbml0KCZpbnAtPmlwX2lucC5pbnAu
aW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCwgU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLm10eF9hdHRyKTsKLSNlbHNlCi0JbGNrX210eF9pbml0KCZpbnAtPmlwX2lu
cC5pbnAuaW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwLCBT
Q1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfYXR0cik7Ci0jZW5kaWYKLSNlbmRpZgot
CVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQlTQ1RQX0lOUF9MT0NLX0lOSVQoaW5wKTsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotCUlOUF9MT0NLX0lOSVQoJmlucC0+aXBfaW5wLmlucCwgImlu
cCIsICJzY3RwaW5wIik7Ci0jZW5kaWYKLQlTQ1RQX0lOUF9SRUFEX0lOSVQoaW5wKTsKLQlTQ1RQ
X0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChpbnApOwotCS8qIGxvY2sgdGhlIG5ldyBlcCAqLwotCVND
VFBfSU5QX1dMT0NLKGlucCk7Ci0KLQkvKiBhZGQgaXQgdG8gdGhlIGluZm8gYXJlYSAqLwotCUxJ
U1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGxpc3RoZWFkKSwgaW5wLCBzY3RwX2xpc3Qp
OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlucC0+aXBfaW5wLmlucC5pbnBfcGNiaW5mbyA9
ICZTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbyk7Ci0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8
fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX0xJT04pIHx8IGRl
ZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQotCUxJU1RfSU5TRVJUX0hFQUQoU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLmxpc3RoZWFkLCAmaW5wLT5pcF9pbnAuaW5wLCBpbnBfbGlzdCk7Ci0jZWxz
ZQotCUxJU1RfSU5TRVJUX0hFQUQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9saXN0aGVh
ZCwgJmlucC0+aXBfaW5wLmlucCwgaW5wX2xpc3QpOwotI2VuZGlmCi0jZW5kaWYKLQlTQ1RQX0lO
UF9JTkZPX1dVTkxPQ0soKTsKLQotCVRBSUxRX0lOSVQoJmlucC0+cmVhZF9xdWV1ZSk7Ci0JTElT
VF9JTklUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKLQotCUxJU1RfSU5JVCgmaW5wLT5zY3RwX2Fz
b2NfbGlzdCk7Ci0KLSNpZmRlZiBTQ1RQX1RSQUNLX0ZSRUVEX0FTT0NTCi0JLyogVEVNUCBDT0RF
ICovCi0JTElTVF9JTklUKCZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QpOwotI2VuZGlmCi0JLyog
SW5pdCB0aGUgdGltZXIgc3RydWN0dXJlIGZvciBzaWduYXR1cmUgY2hhbmdlICovCi0JU0NUUF9P
U19USU1FUl9JTklUKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7Ci0JaW5w
LT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudHlwZSA9IFNDVFBfVElNRVJfVFlQRV9ORVdDT09L
SUU7Ci0KLQkvKiBub3cgaW5pdCB0aGUgYWN0dWFsIGVuZHBvaW50IGRlZmF1bHQgZGF0YSAqLwot
CW0gPSAmaW5wLT5zY3RwX2VwOwotCi0JLyogc2V0dXAgdGhlIGJhc2UgdGltZW91dCBpbmZvcm1h
dGlvbiAqLwotCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfU0VORF0gPSBTRUNfVE9f
VElDS1MoU0NUUF9TRU5EX1NFQyk7CS8qIG5lZWRlZCA/ICovCi0JbS0+c2N0cF90aW1lb3V0dGlj
a3NbU0NUUF9USU1FUl9JTklUXSA9IFNFQ19UT19USUNLUyhTQ1RQX0lOSVRfU0VDKTsJLyogbmVl
ZGVkID8gKi8KLQltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1ZdID0gTVNFQ19U
T19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCkp
OwotCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IE1TRUNfVE9f
VElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KSk7
Ci0JbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9QTVRVXSA9IFNFQ19UT19USUNLUyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQpKTsKLQltLT5zY3Rw
X3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dOXSA9IFNFQ19UT19USUNLUyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KSk7Ci0JbS0+c2N0
cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9TSUdOQVRVUkVdID0gU0VDX1RPX1RJQ0tTKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCkpOwotCS8qIGFsbCBtYXgv
bWluIG1heCBhcmUgaW4gbXMgKi8KLQltLT5zY3RwX21heHJ0byA9IFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9ydG9fbWF4X2RlZmF1bHQpOwotCW0tPnNjdHBfbWlucnRvID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3J0b19taW5fZGVmYXVsdCk7Ci0JbS0+aW5pdGlhbF9ydG8gPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCk7Ci0JbS0+aW5pdGlhbF9pbml0X3J0b19tYXgg
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpOwotCW0tPnNjdHBf
c2Fja19mcmVxID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KTsKLQlt
LT5tYXhfaW5pdF90aW1lcyA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0eF9tYXhfZGVm
YXVsdCk7Ci0JbS0+bWF4X3NlbmRfdGltZXMgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2Nf
cnR4X21heF9kZWZhdWx0KTsKLQltLT5kZWZfbmV0X2ZhaWx1cmUgPSBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQpOwotCW0tPmRlZl9uZXRfcGZfdGhyZXNob2xkID0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKTsKLQltLT5zY3RwX3N3c19z
ZW5kZXIgPSBTQ1RQX1NXU19TRU5ERVJfREVGOwotCW0tPnNjdHBfc3dzX3JlY2VpdmVyID0gU0NU
UF9TV1NfUkVDRUlWRVJfREVGOwotCW0tPm1heF9idXJzdCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9tYXhfYnVyc3RfZGVmYXVsdCk7Ci0JbS0+ZnJfbWF4X2J1cnN0ID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KTsKLQotCW0tPnNjdHBfZGVmYXVsdF9jY19tb2R1
bGUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpOwotCW0tPnNjdHBf
ZGVmYXVsdF9zc19tb2R1bGUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1
bGUpOwotCW0tPm1heF9vcGVuX3N0cmVhbXNfaW50b21lID0gU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCk7Ci0JLyogbnVtYmVyIG9mIHN0cmVhbXMgdG8g
cHJlLW9wZW4gb24gYSBhc3NvY2lhdGlvbiAqLwotCW0tPnByZV9vcGVuX3N0cmVhbV9jb3VudCA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQpOwotCi0J
LyogQWRkIGFkYXB0YXRpb24gY29va2llICovCi0JbS0+YWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0
b3IgPSAwOwotCW0tPmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMDsKLQot
CS8qIHNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KLQltLT5yYW5kb21fY291bnRlciA9
IDE7Ci0JbS0+c3RvcmVfYXQgPSBTQ1RQX1NJR05BVFVSRV9TSVpFOwotCVNDVFBfUkVBRF9SQU5E
T00obS0+cmFuZG9tX251bWJlcnMsIHNpemVvZihtLT5yYW5kb21fbnVtYmVycykpOwotCXNjdHBf
ZmlsbF9yYW5kb21fc3RvcmUobSk7Ci0KLQkvKiBNaW5pbXVtIGNvb2tpZSBzaXplICovCi0JbS0+
c2l6ZV9vZl9hX2Nvb2tpZSA9IChzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9tc2cpICogMikgKwot
CSAgICBzaXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKTsKLQltLT5zaXplX29mX2FfY29v
a2llICs9IFNDVFBfU0lHTkFUVVJFX1NJWkU7Ci0KLQkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzZWNy
ZXQgKi8KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdGltZSk7Ci0JbS0+dGltZV9vZl9z
ZWNyZXRfY2hhbmdlID0gdGltZS50dl9zZWM7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1C
RVJfT0ZfU0VDUkVUUzsgaSsrKSB7Ci0JCW0tPnNlY3JldF9rZXlbMF1baV0gPSBzY3RwX3NlbGVj
dF9pbml0aWFsX1RTTihtKTsKLQl9Ci0Jc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
TkVXQ09PS0lFLCBpbnAsIE5VTEwsIE5VTEwpOwotCi0JLyogSG93IGxvbmcgaXMgYSBjb29raWUg
Z29vZCBmb3IgPyAqLwotCW0tPmRlZl9jb29raWVfbGlmZSA9IE1TRUNfVE9fVElDS1MoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpKTsKLQkvKgotCSAqIElu
aXRpYWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycwotCSAqLwotCW0tPmxvY2FsX2htYWNz
ID0gc2N0cF9kZWZhdWx0X3N1cHBvcnRlZF9obWFjbGlzdCgpOwotCW0tPmxvY2FsX2F1dGhfY2h1
bmtzID0gc2N0cF9hbGxvY19jaHVua2xpc3QoKTsKLQlpZiAoaW5wLT5hc2NvbmZfc3VwcG9ydGVk
KSB7Ci0JCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkYsIG0tPmxvY2FsX2F1dGhfY2h1
bmtzKTsKLQkJc2N0cF9hdXRoX2FkZF9jaHVuayhTQ1RQX0FTQ09ORl9BQ0ssIG0tPmxvY2FsX2F1
dGhfY2h1bmtzKTsKLQl9Ci0JbS0+ZGVmYXVsdF9kc2NwID0gMDsKLSNpZmRlZiBJTkVUNgotCW0t
PmRlZmF1bHRfZmxvd2xhYmVsID0gMDsKLSNlbmRpZgotCW0tPnBvcnQgPSAwOyAvKiBlbmNhcHN1
bGF0aW9uIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLQlMSVNUX0lOSVQoJm0tPnNoYXJlZF9rZXlz
KTsKLQkvKiBhZGQgZGVmYXVsdCBOVUxMIGtleSBhcyBrZXkgaWQgMCAqLwotCW51bGxfa2V5ID0g
c2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQlzY3RwX2luc2VydF9zaGFyZWRrZXkoJm0tPnNoYXJl
ZF9rZXlzLCBudWxsX2tleSk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotI2lmZGVmIFNDVFBf
TE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTIpOwotI2VuZGlmCi0J
cmV0dXJuIChlcnJvcik7Ci19Ci0KLQotdm9pZAotc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2Moc3Ry
dWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsIHN0cnVjdCBzY3RwX2lucGNiICpuZXdfaW5wLAotICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JdWlu
dDE2X3QgbHBvcnQsIHJwb3J0OwotCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZDsKLQlzdHJ1Y3Qg
c2N0cF9sYWRkciAqbGFkZHIsICpvbGFkZHI7Ci0KLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlTQ1RQX0lOUF9JTkZPX1dM
T0NLKCk7Ci0JU0NUUF9JTlBfV0xPQ0sob2xkX2lucCk7Ci0JU0NUUF9JTlBfV0xPQ0sobmV3X2lu
cCk7Ci0JU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7Ci0KLQluZXdfaW5wLT5zY3RwX2VwLnRpbWVfb2Zfc2VjcmV0X2NoYW5n
ZSA9Ci0JICAgIG9sZF9pbnAtPnNjdHBfZXAudGltZV9vZl9zZWNyZXRfY2hhbmdlOwotCW1lbWNw
eShuZXdfaW5wLT5zY3RwX2VwLnNlY3JldF9rZXksIG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tl
eSwKLQkgICAgc2l6ZW9mKG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSkpOwotCW5ld19pbnAt
PnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID0KLQkgICAgb2xkX2lucC0+c2N0cF9lcC5j
dXJyZW50X3NlY3JldF9udW1iZXI7Ci0JbmV3X2lucC0+c2N0cF9lcC5sYXN0X3NlY3JldF9udW1i
ZXIgPQotCSAgICBvbGRfaW5wLT5zY3RwX2VwLmxhc3Rfc2VjcmV0X251bWJlcjsKLQluZXdfaW5w
LT5zY3RwX2VwLnNpemVfb2ZfYV9jb29raWUgPSBvbGRfaW5wLT5zY3RwX2VwLnNpemVfb2ZfYV9j
b29raWU7Ci0KLQkvKiBtYWtlIGl0IHNvIG5ldyBkYXRhIHBvdXJzIGludG8gdGhlIG5ldyBzb2Nr
ZXQgKi8KLQlzdGNiLT5zY3RwX3NvY2tldCA9IG5ld19pbnAtPnNjdHBfc29ja2V0OwotCXN0Y2It
PnNjdHBfZXAgPSBuZXdfaW5wOwotCi0JLyogQ29weSB0aGUgcG9ydCBhY3Jvc3MgKi8KLQlscG9y
dCA9IG5ld19pbnAtPnNjdHBfbHBvcnQgPSBvbGRfaW5wLT5zY3RwX2xwb3J0OwotCXJwb3J0ID0g
c3RjYi0+cnBvcnQ7Ci0JLyogUHVsbCB0aGUgdGNiIGZyb20gdGhlIG9sZCBhc3NvY2lhdGlvbiAq
LwotCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiaGFzaCk7Ci0JTElTVF9SRU1PVkUoc3RjYiwg
c2N0cF90Y2JsaXN0KTsKLQlpZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgewotCQlMSVNU
X1JFTU9WRShzdGNiLCBzY3RwX3RjYmFzb2NpZGhhc2gpOwotCX0KLQkvKiBOb3cgaW5zZXJ0IHRo
ZSBuZXdfaW5wIGludG8gdGhlIFRDUCBjb25uZWN0ZWQgaGFzaCAqLwotCWhlYWQgPSAmU0NUUF9C
QVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKChscG9ydCB8IHJw
b3J0KSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKV07Ci0KLQlMSVNUX0lOU0VSVF9IRUFE
KGhlYWQsIG5ld19pbnAsIHNjdHBfaGFzaCk7Ci0JLyogSXRzIHNhZmUgdG8gYWNjZXNzICovCi0J
bmV3X2lucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfVU5CT1VORDsKLQotCS8qIE5v
dyBtb3ZlIHRoZSB0Y2IgaW50byB0aGUgZW5kcG9pbnQgbGlzdCAqLwotCUxJU1RfSU5TRVJUX0hF
QUQoJm5ld19pbnAtPnNjdHBfYXNvY19saXN0LCBzdGNiLCBzY3RwX3RjYmxpc3QpOwotCS8qCi0J
ICogUXVlc3Rpb24sIGRvIHdlIGV2ZW4gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgZXAtaGFzaCBz
aW5jZSB3ZQotCSAqIG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbj8gUHJvYmFibHkgbm90IDo+IHNv
IGxldHMgZ2V0IHJpZCBvZiBpdAotCSAqIGFuZCBub3Qgc3VjayB1cCBhbnkga2VybmVsIG1lbW9y
eSBpbiB0aGF0LgotCSAqLwotCWlmIChzdGNiLT5hc29jLmluX2Fzb2NpZF9oYXNoKSB7Ci0JCXN0
cnVjdCBzY3RwYXNvY2hlYWQgKmxoZDsKLQkJbGhkID0gJm5ld19pbnAtPnNjdHBfYXNvY2lkaGFz
aFtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLmFzc29jX2lkLAotCQkJbmV3X2lucC0+aGFz
aGFzb2NpZG1hcmspXTsKLQkJTElTVF9JTlNFUlRfSEVBRChsaGQsIHN0Y2IsIHNjdHBfdGNiYXNv
Y2lkaGFzaCk7Ci0JfQotCS8qIE9rLiBMZXQncyByZXN0YXJ0IHRpbWVyLiAqLwotCVRBSUxRX0ZP
UkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBuZXdfaW5wLAotCQkgICAgc3RjYiwg
bmV0KTsKLQl9Ci0KLQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQlpZiAobmV3X2lucC0+c2N0
cF90Y2JoYXNoICE9IE5VTEwpIHsKLQkJU0NUUF9IQVNIX0ZSRUUobmV3X2lucC0+c2N0cF90Y2Jo
YXNoLCBuZXdfaW5wLT5zY3RwX2hhc2htYXJrKTsKLQkJbmV3X2lucC0+c2N0cF90Y2JoYXNoID0g
TlVMTDsKLQl9Ci0JaWYgKChuZXdfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRBTEwpID09IDApIHsKLQkJLyogU3Vic2V0IGJvdW5kLCBzbyBjb3B5IGluIHRoZSBsYWRkciBs
aXN0IGZyb20gdGhlIG9sZF9pbnAgKi8KLQkJTElTVF9GT1JFQUNIKG9sYWRkciwgJm9sZF9pbnAt
PnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQlsYWRkciA9IFNDVFBfWk9ORV9H
RVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7Ci0J
CQlpZiAobGFkZHIgPT0gTlVMTCkgewotCQkJCS8qCi0JCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBk
bz8gVGhpcyBhc3NvYyBpcyByZWFsbHkKLQkJCQkgKiBIT1NFRC4gV2UgcHJvYmFibHkgc2hvdWxk
IHNlbmQgYW4gYWJvcnQKLQkJCQkgKiBoZXJlLgotCQkJCSAqLwotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0IxLCAiQXNzb2NpYXRpb24gaG9zZWQgaW4gVENQIG1vZGVsLCBvdXQgb2YgbGFkZHIg
bWVtb3J5XG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCVNDVFBfSU5DUl9MQUREUl9DT1VO
VCgpOwotCQkJbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxhZGRyKSk7Ci0JCQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmbGFkZHItPnN0YXJ0X3RpbWUpOwotCQkJbGFkZHItPmlmYSA9IG9s
YWRkci0+aWZhOwotCQkJYXRvbWljX2FkZF9pbnQoJmxhZGRyLT5pZmEtPnJlZmNvdW50LCAxKTsK
LQkJCUxJU1RfSU5TRVJUX0hFQUQoJm5ld19pbnAtPnNjdHBfYWRkcl9saXN0LCBsYWRkciwKLQkJ
CSAgICBzY3RwX254dF9hZGRyKTsKLQkJCW5ld19pbnAtPmxhZGRyX2NvdW50Kys7Ci0JCQlpZiAo
b2xhZGRyID09IHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MpIHsKLQkJCQlzdGNiLT5hc29j
Lmxhc3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogTm93IGFueSBy
dW5uaW5nIHRpbWVycyBuZWVkIHRvIGJlIGFkanVzdGVkCi0JICogc2luY2Ugd2UgcmVhbGx5IGRv
bid0IGNhcmUgaWYgdGhleSBhcmUgcnVubmluZwotCSAqIG9yIG5vdCBqdXN0IGJsYXN0IGluIHRo
ZSBuZXdfaW5wIGludG8gYWxsIG9mCi0JICogdGhlbS4KLQkgKi8KLQotCXN0Y2ItPmFzb2MuZGFj
a190aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29jLmFzY29uZl90aW1lci5l
cCA9ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyLmVwID0gKHZv
aWQgKiluZXdfaW5wOwotCXN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lci5lcCA9ICh2b2lkICop
bmV3X2lucDsKLQlzdGNiLT5hc29jLmF1dG9jbG9zZV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lu
cDsKLQlzdGNiLT5hc29jLmRlbGF5ZWRfZXZlbnRfdGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7
Ci0Jc3RjYi0+YXNvYy5kZWxldGVfcHJpbV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQkv
KiBub3cgd2hhdCBhYm91dCB0aGUgbmV0cz8gKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCW5ldC0+cG10dV90aW1lci5lcCA9ICh2b2lkICop
bmV3X2lucDsKLQkJbmV0LT5oYl90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQkJbmV0LT5y
eHRfdGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7Ci0JfQotCVNDVFBfSU5QX1dVTkxPQ0sobmV3
X2lucCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhvbGRfaW5wKTsKLX0KLQotLyoKLSAqIGluc2VydCBh
biBsYWRkciBlbnRyeSB3aXRoIHRoZSBnaXZlbiBpZmEgZm9yIHRoZSBkZXNpcmVkIGxpc3QKLSAq
Lwotc3RhdGljIGludAotc2N0cF9pbnNlcnRfbGFkZHIoc3RydWN0IHNjdHBsYWRkciAqbGlzdCwg
c3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQzMl90IGFjdCkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbGFkZHI7Ci0KLQlsYWRkciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7Ci0JaWYgKGxhZGRyID09IE5VTEwpIHsKLQkJ
Lyogb3V0IG9mIG1lbW9yeT8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9
Ci0JU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7Ci0JbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxh
ZGRyKSk7Ci0JKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmxhZGRyLT5zdGFydF90aW1lKTsK
LQlsYWRkci0+aWZhID0gaWZhOwotCWxhZGRyLT5hY3Rpb24gPSBhY3Q7Ci0JYXRvbWljX2FkZF9p
bnQoJmlmYS0+cmVmY291bnQsIDEpOwotCS8qIGluc2VydCBpdCAqLwotCUxJU1RfSU5TRVJUX0hF
QUQobGlzdCwgbGFkZHIsIHNjdHBfbnh0X2FkZHIpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyoK
LSAqIFJlbW92ZSBhbiBsYWRkciBlbnRyeSBmcm9tIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QgKG9u
IGFuIGFzc29jKQotICovCi1zdGF0aWMgdm9pZAotc2N0cF9yZW1vdmVfbGFkZHIoc3RydWN0IHNj
dHBfbGFkZHIgKmxhZGRyKQotewotCi0JLyogcmVtb3ZlIGZyb20gdGhlIGxpc3QgKi8KLQlMSVNU
X1JFTU9WRShsYWRkciwgc2N0cF9ueHRfYWRkcik7Ci0Jc2N0cF9mcmVlX2lmYShsYWRkci0+aWZh
KTsKLQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIGxhZGRy
KTsKLQlTQ1RQX0RFQ1JfTEFERFJfQ09VTlQoKTsKLX0KLQotI2lmICEoZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0v
KgotICogRG9uJ3Qga25vdyB3aHksIGJ1dCB3aXRob3V0IHRoaXMgdGhlcmUgaXMgYW4gdW5rbm93
biByZWZlcmVuY2Ugd2hlbgotICogY29tcGlsaW5nIE5ldEJTRC4uLiBobW0KLSAqLwotZXh0ZXJu
IHZvaWQgaW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjYpOwotI2VuZGlmCi0KLQotLyogc2N0cF9pZmFwIGlzIHVzZWQgdG8gYnlwYXNz
IG5vcm1hbCBsb2NhbCBhZGRyZXNzIHZhbGlkYXRpb24gY2hlY2tzICovCi1pbnQKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLXNjdHBfaW5w
Y2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgdGhyZWFkICpwKQot
I2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X2lmYSAqc2N0cF9pZmFwLCBQS1RIUkVBRCBwKQotI2Vsc2UKLXNjdHBfaW5wY2JfYmluZChzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgcHJvYyAqcCkKLSNlbmRpZgotewotCS8q
IGJpbmQgYSBlcCB0byBhIHNvY2tldCBhZGRyZXNzICovCi0Jc3RydWN0IHNjdHBwY2JoZWFkICpo
ZWFkOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnAsICppbnBfdG1wOwotI2lmIGRlZmluZWQoSU5F
VCkgfHwgKGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0Jc3RydWN0IGlucGNiICppcF9pbnA7
Ci0jZW5kaWYKLQlpbnQgcG9ydF9yZXVzZV9hY3RpdmUgPSAwOwotCWludCBiaW5kYWxsOwotI2lm
ZGVmIFNDVFBfTVZSRgotCWludCBpOwotI2VuZGlmCi0JdWludDE2X3QgbHBvcnQ7Ci0JaW50IGVy
cm9yOwotCXVpbnQzMl90IHZyZl9pZDsKLQotCWxwb3J0ID0gMDsKLQliaW5kYWxsID0gMTsKLQlp
bnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotI2lmIGRlZmluZWQoSU5FVCkg
fHwgKGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0JaXBfaW5wID0gKHN0cnVjdCBpbnBjYiAq
KXNvLT5zb19wY2I7Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JaWYgKGFkZHIpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJCaW5kIGNhbGxlZCBwb3J0OiAlZFxuIiwKLQkJCW50
b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9wb3J0KSk7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0IxLCAiQWRkcjogIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BD
QjEsIGFkZHIpOwotCX0KLSNlbmRpZgotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVU5CT1VORCkgPT0gMCkgewotCQkvKiBhbHJlYWR5IGRpZCBhIGJpbmQsIHN1YnNlcXVl
bnQgYmluZHMgTk9UIGFsbG93ZWQgISAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7
Ci0JfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUw
MDAwMAotI2lmZGVmIElOVkFSSUFOVFMKLQlpZiAocCA9PSBOVUxMKQotCQlwYW5pYygibnVsbCBw
cm9jL3RocmVhZCIpOwotI2VuZGlmCi0jZW5kaWYKLQlpZiAoYWRkciAhPSBOVUxMKSB7Ci0JCXN3
aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0J
CXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCQkvKiBJUFY2X1Y2T05MWSBzb2Nr
ZXQ/ICovCi0JCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpcF9pbnApKSB7Ci0JCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsK
LQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQl9Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJCWlmIChh
ZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKCpzaW4pKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JCQl9Ci0jZW5kaWYKLQotCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KWFkZHI7Ci0JCQlscG9ydCA9IHNpbi0+c2luX3BvcnQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQkvKgotCQkJICogRm9yIExPT1BC
QUNLIHRoZSBwcmlzb25fbG9jYWxfaXA0KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXAgYWRk
cmVzcwotCQkJICogdG8gdGhlIHByb3BlciB2YWx1ZS4KLQkJCSAqLwotCQkJaWYgKHAgJiYgKGVy
cm9yID0gcHJpc29uX2xvY2FsX2lwNChwLT50ZF91Y3JlZCwgJnNpbi0+c2luX2FkZHIpKSAhPSAw
KSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1BDQiwgZXJyb3IpOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfQotI2VuZGlmCi0JCQlp
ZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewotCQkJCWJpbmRhbGwgPSAw
OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZf
SU5FVDY6Ci0JCXsKLQkJCS8qIE9ubHkgZm9yIHB1cmUgSVB2NiBBZGRyZXNzLiAoTm8gSVB2NCBN
YXBwZWQhKSAqLwotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLQotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAo
YWRkci0+c2FfbGVuICE9IHNpemVvZigqc2luNikpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJCXJldHVy
biAoRUlOVkFMKTsKLQkJCX0KLSNlbmRpZgotCQkJbHBvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0J
CQkvKgotCQkJICogRm9yIExPT1BCQUNLIHRoZSBwcmlzb25fbG9jYWxfaXA2KCkgY2FsbCB3aWxs
IHRyYW5zbXV0ZSB0aGUgaXB2NiBhZGRyZXNzCi0JCQkgKiB0byB0aGUgcHJvcGVyIHZhbHVlLgot
CQkJICovCi0JCQlpZiAocCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHAtPnRkX3VjcmVk
LCAmc2luNi0+c2luNl9hZGRyLAotCQkJICAgIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkgIT0gMCkp
KSAhPSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgZXJyb3IpOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfQotI2VuZGlm
Ci0JCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0J
CQkJYmluZGFsbCA9IDA7Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCQkJCS8qIEtB
TUUgaGFjazogZW1iZWQgc2NvcGVpZCAqLwotI2lmIGRlZmluZWQoU0NUUF9LQU1FKQotCQkJCWlm
IChzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9
IDApIHsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJCX0KLSNlbGlm
IGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5l
ZChBUFBMRV9TTk9XTEVPUEFSRCkKLQkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNiwgaXBfaW5wLCBOVUxMKSAhPSAwKSB7Ci0jZWxzZQotCQkJCWlmIChpbjZfZW1i
ZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBpcF9pbnAsIE5VTEwsIE5VTEwpICE9IDAp
IHsKLSNlbmRpZgotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQkJfQot
I2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQllcnJvciA9IHNjb3BlNl9jaGVja19pZChz
aW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOwotCQkJCWlmIChlcnJvciAhPSAw
KSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9QQ0IsIGVycm9yKTsKLQkJCQkJcmV0dXJuIChlcnJvcik7Ci0JCQkJfQotI2Vsc2UKLQkJ
CQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNikgIT0gMCkgewotCQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENC
LCBFSU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQkJfQotI2VuZGlmCi0jZW5kaWYg
LyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotCQkJfQotI2lmbmRlZiBTQ09QRURST1VUSU5H
Ci0JCQkvKiB0aGlzIG11c3QgYmUgY2xlYXJlZCBmb3IgaWZhX2lmd2l0aGFkZHIoKSAqLwotCQkJ
c2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0jZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLwotCQkJ
YnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJY2FzZSBB
Rl9DT05OOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLSNpZmRlZiBI
QVZFX1NBX0xFTgotCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2Nvbm4pKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQl9Ci0jZW5k
aWYKLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCWxwb3J0ID0g
c2Nvbm4tPnNjb25uX3BvcnQ7Ci0JCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgewot
CQkJCWJpbmRhbGwgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlkZWZhdWx0
OgotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRUFGTk9TVVBQT1JUKTsKLQkJCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKLQkJfQotCX0K
LQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkvKiBTZXR1
cCBhIHZyZl9pZCB0byBiZSB0aGUgZGVmYXVsdCBmb3IgdGhlIG5vbi1iaW5kLWFsbCBjYXNlLiAq
LwotCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLQotCS8qIGluY3JlYXNlIG91ciBjb3VudCBk
dWUgdG8gdGhlIHVubG9jayB3ZSBkbyAqLwotCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JaWYg
KGxwb3J0KSB7Ci0JCS8qCi0JCSAqIERpZCB0aGUgY2FsbGVyIHNwZWNpZnkgYSBwb3J0PyBpZiBz
byB3ZSBtdXN0IHNlZSBpZiBhbiBlcAotCQkgKiBhbHJlYWR5IGhhcyB0aGlzIG9uZSBib3VuZC4K
LQkJICovCi0JCS8qIGdvdCB0byBiZSByb290IHRvIGdldCBhdCBsb3cgcG9ydHMgKi8KLSNpZiAh
ZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJaWYgKG50b2hzKGxwb3J0KSA8IElQUE9SVF9SRVNFUlZF
RCkgewotCQkJaWYgKHAgJiYgKGVycm9yID0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2lmIF9fRnJl
ZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0JCQkJICBwcml2X2NoZWNrKHAsIFBSSVZfTkVUSU5FVF9S
RVNFUlZFRFBPUlQpCi0jZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLQkJCQkgIHN1
c2VyX2NyZWQocC0+dGRfdWNyZWQsIDApCi0jZWxzZQotCQkJCSAgc3VzZXIocCkKLSNlbmRpZgot
I2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJICBzdXNlcihwLT5wX3VjcmVkLCAmcC0+cF9h
Y2ZsYWcpCi0jZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pIC8qIG11c3QgYmUgdHJ1ZSB0byB1
c2UgcmF3IHNvY2tldCAqLwotCQkJCSAgMQotI2Vsc2UKLQkJCQkgIHN1c2VyKHAsIDApCi0jZW5k
aWYKLQkJCQkgICAgKSkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQkJCXJldHVy
biAoZXJyb3IpOwotCQkJfQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQotCQkJaWYgKCFTQ1RQX0lT
X1BSSVZJTEVER0VEKHNvKSkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVB
Q0NFUyk7Ci0JCQkJcmV0dXJuIChFQUNDRVMpOwotCQkJfQotI2VuZGlmCi0JCX0KLSNlbmRpZiAv
KiBfX1dpbmRvd3NfXyAqLwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCWlmIChiaW5kYWxs
KSB7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsg
aSsrKSB7Ci0JCQkJdnJmX2lkID0gaW5wLT5tX3ZyZl9pZHNbaV07Ci0jZWxzZQotCQkJCXZyZl9p
ZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLSNlbmRpZgotCQkJCWlucF90bXAgPSBzY3RwX3BjYl9maW5k
ZXAoYWRkciwgMCwgMSwgdnJmX2lkKTsKLQkJCQlpZiAoaW5wX3RtcCAhPSBOVUxMKSB7Ci0JCQkJ
CS8qCi0JCQkJCSAqIGxvY2sgZ3V5IHJldHVybmVkIGFuZCBsb3dlciBjb3VudAotCQkJCQkgKiBu
b3RlIHRoYXQgd2UgYXJlIG5vdCBib3VuZCBzbwotCQkJCQkgKiBpbnBfdG1wIHNob3VsZCBORVZF
UiBiZSBpbnAuIEFuZAotCQkJCQkgKiBpdCBpcyB0aGlzIGlucCAoaW5wX3RtcCkgdGhhdCBnZXRz
Ci0JCQkJCSAqIHRoZSByZWZlcmVuY2UgYnVtcCwgc28gd2UgbXVzdAotCQkJCQkgKiBsb3dlciBp
dC4KLQkJCQkJICovCi0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF90bXApOwotCQkJCQkvKiB1
bmxvY2sgaW5mbyAqLwotCQkJCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX1BPUlRSRVVTRSkpICYmCi0JCQkJCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucF90
bXAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpKSB7Ci0JCQkJCQkvKiBPaywgbXVzdCBiZSBv
bmUtMi1vbmUgYW5kIGFsbG93aW5nIHBvcnQgcmUtdXNlICovCi0JCQkJCQlwb3J0X3JldXNlX2Fj
dGl2ZSA9IDE7Ci0JCQkJCQlnb3RvIGNvbnRpbnVlX2FueXdheTsKLQkJCQkJfQotCQkJCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpbnApOwotCQkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RUFERFJJTlVTRSk7Ci0JCQkJCXJldHVybiAoRUFERFJJTlVTRSk7Ci0JCQkJfQotI2lmZGVmIFND
VFBfTVZSRgotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpbnBfdG1wID0gc2N0cF9wY2Jf
ZmluZGVwKGFkZHIsIDAsIDEsIHZyZl9pZCk7Ci0JCQlpZiAoaW5wX3RtcCAhPSBOVUxMKSB7Ci0J
CQkJLyoKLQkJCQkgKiBsb2NrIGd1eSByZXR1cm5lZCBhbmQgbG93ZXIgY291bnQgbm90ZQotCQkJ
CSAqIHRoYXQgd2UgYXJlIG5vdCBib3VuZCBzbyBpbnBfdG1wIHNob3VsZAotCQkJCSAqIE5FVkVS
IGJlIGlucC4gQW5kIGl0IGlzIHRoaXMgaW5wIChpbnBfdG1wKQotCQkJCSAqIHRoYXQgZ2V0cyB0
aGUgcmVmZXJlbmNlIGJ1bXAsIHNvIHdlIG11c3QKLQkJCQkgKiBsb3dlciBpdC4KLQkJCQkgKi8K
LQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnBfdG1wKTsKLQkJCQkvKiB1bmxvY2sgaW5mbyAqLwot
CQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNF
KSkgJiYKLQkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnBfdG1wLCBTQ1RQX1BDQl9GTEFH
U19QT1JUUkVVU0UpKSkgewotCQkJCQkvKiBPaywgbXVzdCBiZSBvbmUtMi1vbmUgYW5kIGFsbG93
aW5nIHBvcnQgcmUtdXNlICovCi0JCQkJCXBvcnRfcmV1c2VfYWN0aXZlID0gMTsKLQkJCQkJZ290
byBjb250aW51ZV9hbnl3YXk7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0J
CQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJJTlVTRSk7Ci0JCQkJcmV0dXJu
IChFQUREUklOVVNFKTsKLQkJCX0KLQkJfQotCWNvbnRpbnVlX2FueXdheToKLQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJaWYgKGJpbmRhbGwpIHsKLQkJCS8qIHZlcmlmeSB0aGF0IG5vIGxwb3J0
IGlzIG5vdCB1c2VkIGJ5IGEgc2luZ2xldG9uICovCi0JCQlpZiAoKHBvcnRfcmV1c2VfYWN0aXZl
ID09IDApICYmCi0JCQkgICAgKGlucF90bXAgPSBzY3RwX2lzcG9ydF9pbnVzZShpbnAsIGxwb3J0
LCB2cmZfaWQpKSkgewotCQkJCS8qIFNvcnJ5IHNvbWVvbmUgYWxyZWFkeSBoYXMgdGhpcyBvbmUg
Ym91bmQgKi8KLQkJCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X1BPUlRSRVVTRSkpICYmCi0JCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wX3RtcCwgU0NU
UF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKLQkJCQkJcG9ydF9yZXVzZV9hY3RpdmUgPSAxOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKLQkJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVBRERS
SU5VU0UpOwotCQkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOwotCQkJCX0KLQkJCX0KLQkJfQotCX0g
ZWxzZSB7Ci0JCXVpbnQxNl90IGZpcnN0LCBsYXN0LCBjYW5kaWRhdGU7Ci0JCXVpbnQxNl90IGNv
dW50OwotCQlpbnQgZG9uZTsKLQotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0JCWZpcnN0ID0g
MTsKLQkJbGFzdCA9IDB4ZmZmZjsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CQkvKiBUT0RPIGVuc3VyZSB1aWQgaXMgMCwgZXRjLi4uICovCi0jZWxpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLQkJaWYgKGlwX2lucC0+aW5wX2ZsYWdzICYg
SU5QX0hJR0hQT1JUKSB7Ci0JCQlmaXJzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2hpZmlyc3Rh
dXRvKTsKLQkJCWxhc3QgPSBNT0RVTEVfR0xPQkFMKGlwcG9ydF9oaWxhc3RhdXRvKTsKLQkJfSBl
bHNlIGlmIChpcF9pbnAtPmlucF9mbGFncyAmIElOUF9MT1dQT1JUKSB7Ci0JCQlpZiAocCAmJiAo
ZXJyb3IgPQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIw
MDAKLQkJCQkgIHByaXZfY2hlY2socCwgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9SVCkKLSNlbGlm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQkJCSAgc3VzZXJfY3JlZChwLT50ZF91Y3Jl
ZCwgMCkKLSNlbHNlCi0JCQkJICBzdXNlcihwKQotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLQkJCQkgIHN1c2VyKHAtPnBfdWNyZWQsICZwLT5wX2FjZmxhZykKLSNlbHNlCi0JCQkJ
ICBzdXNlcihwLCAwKQotI2VuZGlmCi0JCQkJICAgICkpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JF
RihpbnApOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQlTQ1RQX0lOUF9JTkZPX1dV
TkxPQ0soKTsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBlcnJvcik7Ci0JCQkJcmV0dXJuIChlcnJvcik7Ci0JCQl9Ci0JCQlmaXJz
dCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2xvd2ZpcnN0YXV0byk7Ci0JCQlsYXN0ID0gTU9EVUxF
X0dMT0JBTChpcHBvcnRfbG93bGFzdGF1dG8pOwotCQl9IGVsc2UgewotI2VuZGlmCi0JCQlmaXJz
dCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2ZpcnN0YXV0byk7Ci0JCQlsYXN0ID0gTU9EVUxFX0dM
T0JBTChpcHBvcnRfbGFzdGF1dG8pOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKQotCQl9Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX1dpbmRvd3NfXyAqLwotCQlp
ZiAoZmlyc3QgPiBsYXN0KSB7Ci0JCQl1aW50MTZfdCB0ZW1wOwotCi0JCQl0ZW1wID0gZmlyc3Q7
Ci0JCQlmaXJzdCA9IGxhc3Q7Ci0JCQlsYXN0ID0gdGVtcDsKLQkJfQotCQljb3VudCA9IGxhc3Qg
LSBmaXJzdCArIDE7IC8qIG51bWJlciBvZiBjYW5kaWRhdGVzICovCi0JCWNhbmRpZGF0ZSA9IGZp
cnN0ICsgc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCkgJSAoY291bnQpOwot
Ci0JCWRvbmUgPSAwOwotCQl3aGlsZSAoIWRvbmUpIHsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJCWZv
ciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCQlpZiAoc2N0cF9pc3BvcnRf
aW51c2UoaW5wLCBodG9ucyhjYW5kaWRhdGUpLCBpbnAtPm1fdnJmX2lkc1tpXSkgIT0gTlVMTCkg
ewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaSA9PSBpbnAtPm51bV92cmZzKSB7
Ci0JCQkJZG9uZSA9IDE7Ci0JCQl9Ci0jZWxzZQotCQkJaWYgKHNjdHBfaXNwb3J0X2ludXNlKGlu
cCwgaHRvbnMoY2FuZGlkYXRlKSwgaW5wLT5kZWZfdnJmX2lkKSA9PSBOVUxMKSB7Ci0JCQkJZG9u
ZSA9IDE7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmICghZG9uZSkgewotCQkJCWlmICgtLWNvdW50ID09
IDApIHsKLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOwotCQkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJJTlVTRSk7
Ci0JCQkJCXJldHVybiAoRUFERFJJTlVTRSk7Ci0JCQkJfQotCQkJCWlmIChjYW5kaWRhdGUgPT0g
bGFzdCkKLQkJCQkJY2FuZGlkYXRlID0gZmlyc3Q7Ci0JCQkJZWxzZQotCQkJCQljYW5kaWRhdGUg
PSBjYW5kaWRhdGUgKyAxOwotCQkJfQotCQl9Ci0JCWxwb3J0ID0gaHRvbnMoY2FuZGlkYXRlKTsK
LQl9Ci0JU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgKFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FIHwKLQkJCSAgICAgICBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkpIHsKLQkJLyoKLQkJICogdGhpcyByZWFsbHkgc2hvdWxkIG5vdCBoYXBwZW4u
IFRoZSBndXkgZGlkIGEgbm9uLWJsb2NraW5nCi0JCSAqIGJpbmQgYW5kIHRoZW4gZGlkIGEgY2xv
c2UgYXQgdGhlIHNhbWUgdGltZS4KLQkJICovCi0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJ
U0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsK
LQl9Ci0JLyogb2sgd2UgbG9vayBjbGVhciB0byBnaXZlIG91dCB0aGlzIHBvcnQsIHNvIGxldHMg
c2V0dXAgdGhlIGJpbmRpbmcgKi8KLQlpZiAoYmluZGFsbCkgewotCQkvKiBiaW5kaW5nIHRvIGFs
bCBhZGRyZXNzZXMsIHNvIGp1c3Qgc2V0IGluIHRoZSBwcm9wZXIgZmxhZ3MgKi8KLQkJaW5wLT5z
Y3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMOwotCQkvKiBzZXQgdGhlIGF1dG9t
YXRpYyBhZGRyIGNoYW5nZXMgZnJvbSBrZXJuZWwgZmxhZyAqLwotCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2F1dG9fYXNjb25mKSA9PSAwKSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKTsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19BVVRPX0FTQ09ORik7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYpOwotCQkJc2N0cF9mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYpOwotCQl9Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbXVsdGlwbGVfYXNjb25mcykgPT0gMCkgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX01VTFRJUExFX0FTQ09ORlMpOwotCQl9IGVsc2UgewotCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTVVMVElQTEVfQVNDT05GUyk7Ci0JCX0KLQkJ
Lyogc2V0IHRoZSBhdXRvbWF0aWMgbW9iaWxpdHlfYmFzZSBmcm9tIGtlcm5lbAotCQkgICBmbGFn
IChieSBtaWNjaGllKQotCQkqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21vYmlsaXR5
X2Jhc2UpID09IDApIHsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01P
QklMSVRZX0JBU0UpOwotCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9C
SUxJVFlfUFJJTV9ERUxFVEVEKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfTU9CSUxJVFlfQkFTRSk7Ci0JCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVf
b2ZmKGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOwotCQl9Ci0JCS8qIHNldCB0aGUg
YXV0b21hdGljIG1vYmlsaXR5X2Zhc3RoYW5kb2ZmIGZyb20ga2VybmVsCi0JCSAgIGZsYWcgKGJ5
IG1pY2NoaWUpCi0JCSovCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFz
dGhhbmRvZmYpID09IDApIHsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X01PQklMSVRZX0ZBU1RIQU5ET0ZGKTsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5w
LCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX21vYmls
aXR5X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKTsKLQkJCXNjdHBf
bW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7Ci0J
CX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBiaW5kIHNwZWNpZmljLCBtYWtlIHN1cmUgZmxhZ3Mg
aXMgb2ZmIGFuZCBhZGQgYSBuZXcKLQkJICogYWRkcmVzcyBzdHJ1Y3R1cmUgdG8gdGhlIHNjdHBf
YWRkcl9saXN0IGluc2lkZSB0aGUgZXAKLQkJICogc3RydWN0dXJlLgotCQkgKgotCQkgKiBXZSB3
aWxsIG5lZWQgdG8gYWxsb2NhdGUgb25lIGFuZCBpbnNlcnQgaXQgYXQgdGhlIGhlYWQuIFRoZQot
CQkgKiBzb2NrZXRvcHQgY2FsbCBjYW4ganVzdCBpbnNlcnQgbmV3IGFkZHJlc3NlcyBpbiB0aGVy
ZSBhcwotCQkgKiB3ZWxsLiBJdCB3aWxsIGFsc28gaGF2ZSB0byBkbyB0aGUgZW1iZWQgc2NvcGUg
a2FtZSBoYWNrCi0JCSAqIHRvbyAoYmVmb3JlIGFkZGluZykuCi0JCSAqLwotCQlzdHJ1Y3Qgc2N0
cF9pZmEgKmlmYTsKLQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7Ci0KLQkJbWVtc2V0KCZz
dG9yZSwgMCwgc2l6ZW9mKHN0b3JlKSk7Ci0JCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQltZW1jcHkoJnN0b3JlLnNpbiwgYWRkciwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gMDsK
LQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCW1l
bWNweSgmc3RvcmUuc2luNiwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJ
CXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46Ci0JCQltZW1jcHkoJnN0b3JlLnNjb25u
LCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJCXN0b3JlLnNjb25uLnNj
b25uX3BvcnQgPSAwOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwot
CQl9Ci0JCS8qCi0JCSAqIGZpcnN0IGZpbmQgdGhlIGludGVyZmFjZSB3aXRoIHRoZSBib3VuZCBh
ZGRyZXNzIG5lZWQgdG8KLQkJICogemVybyBvdXQgdGhlIHBvcnQgdG8gZmluZCB0aGUgYWRkcmVz
cyEgeXVjayEgY2FuJ3QgZG8KLQkJICogdGhpcyBlYXJsaWVyIHNpbmNlIG5lZWQgcG9ydCBmb3Ig
c2N0cF9wY2JfZmluZGVwKCkKLQkJICovCi0JCWlmIChzY3RwX2lmYXAgIT0gTlVMTCkgewotCQkJ
aWZhID0gc2N0cF9pZmFwOwotCQl9IGVsc2UgewotCQkJLyogTm90ZSBmb3IgQlNEIHdlIGhpdCBo
ZXJlIGFsd2F5cyBvdGhlcgotCQkJICogTy9TJ3Mgd2lsbCBwYXNzIHRoaW5ncyBpbiB2aWEgdGhl
Ci0JCQkgKiBzY3RwX2lmYXAgYXJndW1lbnQgKFBhbmRhKS4KLQkJCSAqLwotCQkJaWZhID0gc2N0
cF9maW5kX2lmYV9ieV9hZGRyKCZzdG9yZS5zYSwKLQkJCQkJCSAgICB2cmZfaWQsIFNDVFBfQURE
Ul9OT1RfTE9DS0VEKTsKLQkJfQotCQlpZiAoaWZhID09IE5VTEwpIHsKLQkJCS8qIENhbid0IGZp
bmQgYW4gaW50ZXJmYWNlIHdpdGggdGhhdCBhZGRyZXNzICovCi0JCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVBRERSTk9UQVZBSUwpOwot
CQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKLQkJfQotI2lmZGVmIElORVQ2Ci0JCWlmIChhZGRy
LT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCS8qIEdBSywgbW9yZSBGSVhNRSBJRkEgbG9j
az8gKi8KLQkJCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFC
TEUpIHsKLQkJCQkvKiBDYW4ndCBiaW5kIGEgbm9uLWV4aXN0ZW50IGFkZHIuICovCi0JCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJ
TlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJLyogd2Un
cmUgbm90IGJvdW5kIGFsbCAqLwotCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMOwotCQkvKiBhbGxvdyBiaW5keCgpIHRvIHNlbmQgQVNDT05GJ3MgZm9yIGJpbmRp
bmcgY2hhbmdlcyAqLwotCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19B
U0NPTkYpOwotCQkvKiBjbGVhciBhdXRvbWF0aWMgYWRkciBjaGFuZ2VzIGZyb20ga2VybmVsIGZs
YWcgKi8KLQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05G
KTsKLQotCQkvKiBhZGQgdGhpcyBhZGRyZXNzIHRvIHRoZSBlbmRwb2ludCBsaXN0ICovCi0JCWVy
cm9yID0gc2N0cF9pbnNlcnRfbGFkZHIoJmlucC0+c2N0cF9hZGRyX2xpc3QsIGlmYSwgMCk7Ci0J
CWlmIChlcnJvciAhPSAwKSB7Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0lO
UF9JTkZPX1dVTkxPQ0soKTsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9Ci0JCWlucC0+bGFkZHJf
Y291bnQrKzsKLQl9Ci0JLyogZmluZCB0aGUgYnVja2V0ICovCi0JaWYgKHBvcnRfcmV1c2VfYWN0
aXZlKSB7Ci0JCS8qIFB1dCBpdCBpbnRvIHRjcCAxLTItMSBoYXNoICovCi0JCWhlYWQgPSAmU0NU
UF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGxwb3J0LCBT
Q1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykpXTsKLQkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0w7Ci0JfSBlbHNlIHsKLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5G
TyhzY3RwX2VwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIobHBvcnQsIFNDVFBfQkFTRV9JTkZP
KGhhc2htYXJrKSldOwotCX0KLQkvKiBwdXQgaXQgaW4gdGhlIGJ1Y2tldCAqLwotCUxJU1RfSU5T
RVJUX0hFQUQoaGVhZCwgaW5wLCBzY3RwX2hhc2gpOwotCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0Ix
LCAiTWFpbiBoYXNoIHRvIGJpbmQgYXQgaGVhZDolcCwgYm91bmQgcG9ydDolZCAtIGluIHRjcF9w
b29sPSVkXG4iLAotCQkodm9pZCAqKWhlYWQsIG50b2hzKGxwb3J0KSwgcG9ydF9yZXVzZV9hY3Rp
dmUpOwotCS8qIHNldCBpbiB0aGUgcG9ydCAqLwotCWlucC0+c2N0cF9scG9ydCA9IGxwb3J0Owot
Ci0JLyogdHVybiBvZmYganVzdCB0aGUgdW5ib3VuZCBmbGFnICovCi0JaW5wLT5zY3RwX2ZsYWdz
ICY9IH5TQ1RQX1BDQl9GTEFHU19VTkJPVU5EOwotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlT
Q1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19mcmVlZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKQot
ewotCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwgKm5pdDsKLQotCS8qCi0JICogV2UgZW50ZXIg
d2l0aCB0aGUgb25seSB0aGUgSVRFUkFUT1JfTE9DSyBpbiBwbGFjZSBhbmQgYSB3cml0ZQotCSAq
IGxvY2sgb24gdGhlIGlucF9pbmZvIHN0dWZmLgotCSAqLwotCWl0ID0gc2N0cF9pdF9jdGwuY3Vy
X2l0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MTAwMAotCWlmIChpdCAmJiAoaXQtPnZuICE9IGN1cnZuZXQpKSB7Ci0JCS8qIEl0cyBub3QgbG9v
a2luZyBhdCBvdXIgVk5FVCAqLwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JaWYgKGl0ICYmIChp
dC0+aW5wID09IGlucCkpIHsKLQkJLyoKLQkJICogVGhpcyBpcyB0cmlja3kgYW5kIHdlIGhvbGQg
dGhlIGl0ZXJhdG9yIGxvY2ssCi0JCSAqIGJ1dCB3aGVuIGl0IHJldHVybnMgYW5kIGdldHMgdGhl
IGxvY2sgKHdoZW4gd2UKLQkJICogcmVsZWFzZSBpdCkgdGhlIGl0ZXJhdG9yIHdpbGwgdHJ5IHRv
IG9wZXJhdGUgb24KLQkJICogaW5wLiBXZSBuZWVkIHRvIHN0b3AgdGhhdCBmcm9tIGhhcHBlbmlu
Zy4gQnV0Ci0JCSAqIG9mIGNvdXJzZSB0aGUgaXRlcmF0b3IgaGFzIGEgcmVmZXJlbmNlIG9uIHRo
ZQotCQkgKiBzdGNiIGFuZCBpbnAuIFdlIGNhbiBtYXJrIGl0IGFuZCBpdCB3aWxsIHN0b3AuCi0J
CSAqCi0JCSAqIElmIGl0cyBhIHNpbmdsZSBpdGVyYXRvciBzaXR1YXRpb24sIHdlCi0JCSAqIHNl
dCB0aGUgZW5kIGl0ZXJhdG9yIGZsYWcuIE90aGVyd2lzZQotCQkgKiB3ZSBzZXQgdGhlIGl0ZXJh
dG9yIHRvIGdvIHRvIHRoZSBuZXh0IGlucC4KLQkJICoKLQkJICovCi0JCWlmIChpdC0+aXRlcmF0
b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlApIHsKLQkJCXNjdHBfaXRfY3Rs
Lml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJfSVQ7Ci0JCX0gZWxzZSB7
Ci0JCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VS
X0lOUDsKLQkJfQotCX0KLQkvKiBOb3cgZ28gdGhyb3VnaCBhbmQgcmVtb3ZlIGFueSBzaW5nbGUg
cmVmZXJlbmNlIHRvCi0JICogb3VyIGlucCB0aGF0IG1heSBiZSBzdGlsbCBwZW5kaW5nIG9uIHRo
ZSBsaXN0Ci0JICovCi0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpOwotCVRBSUxRX0ZPUkVB
Q0hfU0FGRShpdCwgJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgc2N0cF9ueHRfaXRyLCBuaXQp
IHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEw
MDAKLQkJaWYgKGl0LT52biAhPSBjdXJ2bmV0KSB7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlm
Ci0JCWlmIChpdC0+aW5wID09IGlucCkgewotCQkJLyogVGhpcyBvbmUgcG9pbnRzIHRvIG1lIGlz
IGl0IGlucCBzcGVjaWZpYz8gKi8KLQkJCWlmIChpdC0+aXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lU
RVJBVE9SX0RPX1NJTkdMRV9JTlApIHsKLQkJCQkvKiBSZW1vdmUgYW5kIGZyZWUgdGhpcyBvbmUg
Ki8KLQkJCQlUQUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwKLQkJCQkgICAg
aXQsIHNjdHBfbnh0X2l0cik7Ci0JCQkJaWYgKGl0LT5mdW5jdGlvbl9hdGVuZCAhPSBOVUxMKSB7
Ci0JCQkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQtPnBvaW50ZXIsIGl0LT52YWwpOwotCQkJ
CX0KLQkJCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaXQt
PmlucCA9IExJU1RfTkVYVChpdC0+aW5wLCBzY3RwX2xpc3QpOwotCQkJCWlmIChpdC0+aW5wKSB7
Ci0JCQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQkJCX0KLQkJCX0KLQkJCS8qIFdo
ZW4gaXRzIHB1dCBpbiB0aGUgcmVmY250IGlzIGluY3JlbWVudGVkIHNvIGRlY3IgaXQgKi8KLQkJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0KLQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1Ff
VU5MT0NLKCk7Ci19Ci0KLS8qIHJlbGVhc2Ugc2N0cF9pbnBjYiB1bmJpbmQgdGhlIHBvcnQgKi8K
LXZvaWQKLXNjdHBfaW5wY2JfZnJlZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBpbnQgaW1tZWRp
YXRlLCBpbnQgZnJvbSkKLXsKLQkvKgotCSAqIEhlcmUgd2UgZnJlZSBhIGVuZHBvaW50LiBXZSBt
dXN0IGZpbmQgaXQgKGlmIGl0IGlzIGluIHRoZSBIYXNoCi0JICogdGFibGUpIGFuZCByZW1vdmUg
aXQgZnJvbSB0aGVyZS4gVGhlbiB3ZSBtdXN0IGFsc28gZmluZCBpdCBpbiB0aGUKLQkgKiBvdmVy
YWxsIGxpc3QgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZXJlLiBBZnRlciBhbGwgcmVtb3ZhbHMgYXJl
Ci0JICogY29tcGxldGUgdGhlbiBhbnkgdGltZXIgaGFzIHRvIGJlIHN0b3BwZWQuIFRoZW4gc3Rh
cnQgdGhlIGFjdHVhbAotCSAqIGZyZWVpbmcuIGEpIEFueSBsb2NhbCBsaXN0cy4gYikgQW55IGFz
c29jaWF0aW9ucy4gYykgVGhlIGhhc2ggb2YKLQkgKiBhbGwgYXNzb2NpYXRpb25zLiBkKSBmaW5h
bGx5IHRoZSBlcCBpdHNlbGYuCi0JICovCi0Jc3RydWN0IHNjdHBfdGNiICphc29jLCAqbmFzb2M7
Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxhZGRyOwotCXN0cnVjdCBpbnBjYiAqaXBf
cGNiOwotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCBiZWluZ19yZWZlZCA9IDA7Ci0Jc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKnNxLCAqbnNxOwotI2lmICFkZWZpbmVkKF9fUGFuZGFfXykg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
X19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMDAKLQlzY3RwX3J0ZW50cnlfdCAqcnQ7Ci0jZW5kaWYK
LSNlbmRpZgotCWludCBjbnQ7Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2hhcmVkX2tleSwgKm5zaGFy
ZWRfa2V5OwotCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlzY3RwX2xvY2tfYXNzZXJ0KFND
VFBfSU5QX1NPKGlucCkpOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCXNjdHBf
bG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAwKTsKLSNlbmRpZgotCVNDVFBfSVRFUkFUT1JfTE9DSygp
OwotCS8qIG1hcmsgYW55IGl0ZXJhdG9ycyBvbiB0aGUgbGlzdCBvciBiZWluZyBwcm9jZXNzZWQg
Ki8KLQlzY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19mcmVlZChpbnApOwotCVNDVFBfSVRFUkFUT1Jf
VU5MT0NLKCk7Ci0Jc28gPSBpbnAtPnNjdHBfc29ja2V0OwotCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkvKiBiZWVuIGhlcmUgYmVmb3Jl
Li4gZWVrcy4uIGdldCBvdXQgb2YgaGVyZSAqLwotCQlTQ1RQX1BSSU5URigiVGhpcyBjb25mbGlj
dCBpbiBmcmVlIFNIT1VMRCBub3QgYmUgaGFwcGVuaW5nISBmcm9tICVkLCBpbW0gJWRcbiIsIGZy
b20sIGltbWVkaWF0ZSk7Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCQlzY3RwX2xvZ19jbG9z
aW5nKGlucCwgTlVMTCwgMSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0FTT0NfQ1JF
QVRFX0xPQ0soaW5wKTsKLQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0KLQlTQ1RQX0lOUF9XTE9D
SyhpbnApOwotCWlmIChmcm9tID09IFNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFKSB7
Ci0JCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVA7Ci0JCS8qIHNv
Y2tldCBpcyBnb25lLCBzbyBubyBtb3JlIHdha2V1cHMgYWxsb3dlZCAqLwotCQlpbnAtPnNjdHBf
ZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFOwotCQlpbnAtPnNjdHBfZmxhZ3MgJj0g
flNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKLQkJaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BD
Ql9GTEFHU19XQUtFT1VUUFVUOwotCi0JfQotCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCB3ZSBoYXZl
IHRoZSBzb2NrZXQgbG9jaywgYWZ0ZXIgdGhhdCBubyBtb3JlLiAqLwotCXNjdHBfdGltZXJfc3Rv
cChTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFLCBpbnAsIE5VTEwsIE5VTEwsCi0JCQlTQ1RQX0ZS
T01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ18xKTsKLQotCWlmIChpbnAtPmNvbnRyb2wpIHsKLQkJc2N0
cF9tX2ZyZWVtKGlucC0+Y29udHJvbCk7Ci0JCWlucC0+Y29udHJvbCA9IE5VTEw7Ci0JfQotCWlm
IChpbnAtPnBrdCkgewotCQlzY3RwX21fZnJlZW0oaW5wLT5wa3QpOwotCQlpbnAtPnBrdCA9IE5V
TEw7Ci0JfQotCWlwX3BjYiA9ICZpbnAtPmlwX2lucC5pbnA7CS8qIHdlIGNvdWxkIGp1c3QgY2Fz
dCB0aGUgbWFpbiBwb2ludGVyCi0JCQkJCSAqIGhlcmUgYnV0IEkgd2lsbCBiZSBuaWNlIDo+IChp
LmUuCi0JCQkJCSAqIGlwX3BjYiA9IGVwOykgKi8KLQlpZiAoaW1tZWRpYXRlID09IFNDVFBfRlJF
RV9TSE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFKSB7Ci0JCWludCBjbnRfaW5fc2Q7Ci0KLQkJY250
X2luX3NkID0gMDsKLQkJTElTVF9GT1JFQUNIX1NBRkUoYXNvYywgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCwgbmFzb2MpIHsKLQkJCVNDVFBfVENCX0xPQ0soYXNvYyk7Ci0JCQlp
ZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJ
CQkvKiBTa2lwIGd1eXMgYmVpbmcgZnJlZWQgKi8KLQkJCQljbnRfaW5fc2QrKzsKLQkJCQlpZiAo
YXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFKSB7Ci0JCQkJCS8q
Ci0JCQkJCSAqIFNwZWNpYWwgY2FzZSAtIHdlIGRpZCBub3Qgc3RhcnQgYSBraWxsCi0JCQkJCSAq
IHRpbWVyIG9uIHRoZSBhc29jIGR1ZSB0byBpdCB3YXMgbm90Ci0JCQkJCSAqIGNsb3NlZC4gU28g
Z28gYWhlYWQgYW5kIHN0YXJ0IGl0IG5vdy4KLQkJCQkJICovCi0JCQkJCWFzb2MtPmFzb2Muc3Rh
dGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBhc29jLCBOVUxMKTsKLQkJCQl9Ci0JCQkJ
U0NUUF9UQ0JfVU5MT0NLKGFzb2MpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKCgoU0NU
UF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8Ci0J
CQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpKSAmJgotCQkJICAgIChhc29jLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID09
IDApKSB7Ci0JCQkJLyogSWYgd2UgaGF2ZSBkYXRhIGluIHF1ZXVlLCB3ZSBkb24ndCB3YW50IHRv
IGp1c3QKLQkJCQkgKiBmcmVlIHNpbmNlIHRoZSBhcHAgbWF5IGhhdmUgZG9uZSwgc2VuZCgpL2Ns
b3NlCi0JCQkJICogb3IgY29ubmVjdC9zZW5kL2Nsb3NlLiBBbmQgaXQgd2FudHMgdGhlIGRhdGEK
LQkJCQkgKiB0byBnZXQgYWNyb3NzIGZpcnN0LgotCQkJCSAqLwotCQkJCS8qIEp1c3QgYWJhbmRv
biB0aGluZ3MgaW4gdGhlIGZyb250IHN0YXRlcyAqLwotCQkJCWlmIChzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBhc29jLCBTQ1RQX1BDQkZSRUVfTk9GT1JDRSwKLQkJCQkJCSAgIFNDVFBfRlJPTV9TQ1RQ
X1BDQiArIFNDVFBfTE9DXzIpID09IDApIHsKLQkJCQkJY250X2luX3NkKys7Ci0JCQkJfQotCQkJ
CWNvbnRpbnVlOwotCQkJfQotCQkJLyogRGlzY29ubmVjdCB0aGUgc29ja2V0IHBsZWFzZSAqLwot
CQkJYXNvYy0+c2N0cF9zb2NrZXQgPSBOVUxMOwotCQkJYXNvYy0+YXNvYy5zdGF0ZSB8PSBTQ1RQ
X1NUQVRFX0NMT1NFRF9TT0NLRVQ7Ci0JCQlpZiAoKGFzb2MtPmFzb2Muc2l6ZV9vbl9yZWFzbV9x
dWV1ZSA+IDApIHx8Ci0JCQkgICAgKGFzb2MtPmFzb2MuY29udHJvbF9wZGFwaSkgfHwKLQkJCSAg
ICAoYXNvYy0+YXNvYy5zaXplX29uX2FsbF9zdHJlYW1zID4gMCkgfHwKLQkJCSAgICAoc28gJiYg
KHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkpIHsKLQkJCQkvKiBMZWZ0IHdpdGggRGF0YSB1bnJlYWQg
Ki8KLQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCi0JCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCWFzb2MtPnNj
dHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzM7
Ci0JCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihhc29jLCBvcF9lcnIsIFNDVFBfU09fTE9DS0VEKTsK
LQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCQkJaWYgKChT
Q1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkJCSAg
ICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpKSB7Ci0JCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsK
LQkJCQl9Ci0JCQkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFzb2MsCi0JCQkJCQkgICAgU0NU
UF9QQ0JGUkVFX05PRk9SQ0UsIFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzQpID09IDAp
IHsKLQkJCQkJY250X2luX3NkKys7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlm
IChUQUlMUV9FTVBUWSgmYXNvYy0+YXNvYy5zZW5kX3F1ZXVlKSAmJgotCQkJICAgICAgICAgICBU
QUlMUV9FTVBUWSgmYXNvYy0+YXNvYy5zZW50X3F1ZXVlKSAmJgotCQkJICAgICAgICAgICAoYXNv
Yy0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJaWYgKCgqYXNvYy0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoYXNvYywgJmFzb2Mt
PmFzb2MpKSB7Ci0JCQkJCWdvdG8gYWJvcnRfYW55d2F5OwotCQkJCX0KLQkJCQlpZiAoKFNDVFBf
R0VUX1NUQVRFKCZhc29jLT5hc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYmCi0J
CQkJICAgIChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9X
Tl9BQ0tfU0VOVCkpIHsKLQkJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQotCQkJCQkvKgot
CQkJCQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLAotCQkJCQkgKiBzbyBJIHNl
bmQgc2h1dGRvd24KLQkJCQkJICovCi0JCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFz
b2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChTQ1RQX0dFVF9TVEFURSgmYXNv
Yy0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCQkJCVNDVFBf
U1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCQkJfQotCQkJCQlTQ1RQX1NF
VF9TVEFURSgmYXNvYy0+YXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCQkJU0NU
UF9DTEVBUl9TVUJTVEFURSgmYXNvYy0+YXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5H
KTsKLQkJCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oYXNvYyk7Ci0JCQkJCWlmIChh
c29jLT5hc29jLmFsdGVybmF0ZSkgewotCQkJCQkJbmV0cCA9IGFzb2MtPmFzb2MuYWx0ZXJuYXRl
OwotCQkJCQl9IGVsc2UgewotCQkJCQkJbmV0cCA9IGFzb2MtPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbjsKLQkJCQkJfQotCQkJCQlzY3RwX3NlbmRfc2h1dGRvd24oYXNvYywgbmV0cCk7Ci0JCQkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLCBhc29jLT5zY3RwX2Vw
LCBhc29jLAotCQkJCQkgICAgbmV0cCk7Ci0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQsIGFzb2MtPnNjdHBfZXAsIGFzb2MsCi0JCQkJCSAgICBhc29j
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOwotCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAs
IGFzb2MsIFNDVFBfT1VUUFVUX0ZST01fU0hVVF9UTVIsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQl9
Ci0JCQl9IGVsc2UgewotCQkJCS8qIG1hcmsgaW50byBzaHV0ZG93biBwZW5kaW5nICovCi0JCQkJ
YXNvYy0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkc7Ci0JCQkJc2N0
cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgYXNvYy0+c2N0cF9l
cCwgYXNvYywKLQkJCQkJCSBhc29jLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOwotCQkJCWlm
ICgoKmFzb2MtPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxl
dGUpKGFzb2MsICZhc29jLT5hc29jKSkgewotCQkJCQlhc29jLT5hc29jLnN0YXRlIHw9IFNDVFBf
U1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKLQkJCQl9Ci0JCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29j
LT5hc29jLnNlbmRfcXVldWUpICYmCi0JCQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNl
bnRfcXVldWUpICYmCi0JCQkJICAgIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9QQVJU
SUFMX01TR19MRUZUKSkgewotCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCQkJCWFib3J0X2Fu
eXdheToKLQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJf
SU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCQlhc29jLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUg
PSBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ181OwotCQkJCQlzY3RwX3NlbmRfYWJvcnRf
dGNiKGFzb2MsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJmFzb2Mt
PmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChTQ1RQX0dFVF9TVEFURSgm
YXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCQkJCVND
VFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCQkJfQotCQkJCQlpZiAo
c2N0cF9mcmVlX2Fzc29jKGlucCwgYXNvYywKLQkJCQkJCQkgICAgU0NUUF9QQ0JGUkVFX05PRk9S
Q0UsCi0JCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzYpID09IDApIHsK
LQkJCQkJCWNudF9pbl9zZCsrOwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7
Ci0JCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgYXNvYywgU0NUUF9PVVRQVVRfRlJPTV9DTE9T
SU5HLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJfQotCQkJfQotCQkJY250X2luX3NkKys7Ci0JCQlT
Q1RQX1RDQl9VTkxPQ0soYXNvYyk7Ci0JCX0KLQkJLyogbm93IGlzIHRoZXJlIHNvbWUgbGVmdCBp
biBvdXIgU0hVVERPV04gc3RhdGU/ICovCi0JCWlmIChjbnRfaW5fc2QpIHsKLSNpZmRlZiBTQ1RQ
X0xPR19DTE9TSU5HCi0JCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMik7Ci0jZW5kaWYK
LQkJCWlucC0+c2N0cF9zb2NrZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwot
CQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0lORk9fV1VOTE9D
SygpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlucC0+c2N0cF9zb2NrZXQgPSBOVUxMOwotCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgIT0KLQkgICAgU0NU
UF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKgotCQkgKiBvaywgdGhpcyBndXkgaGFzIGJlZW4g
Ym91bmQuIEl0J3MgcG9ydCBpcwotCQkgKiBzb21ld2hlcmUgaW4gdGhlIFNDVFBfQkFTRV9JTkZP
KGhhc2ggdGFibGUpLiBSZW1vdmUKLQkJICogaXQhCi0JCSAqLwotCQlMSVNUX1JFTU9WRShpbnAs
IHNjdHBfaGFzaCk7Ci0JCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19VTkJPVU5E
OwotCX0KLQotCS8qIElmIHRoZXJlIGlzIGEgdGltZXIgcnVubmluZyB0byBraWxsIHVzLAotCSAq
IGZvcmdldCBpdCwgc2luY2UgaXQgbWF5IGhhdmUgYSBjb250ZXN0Ci0JICogb24gdGhlIElOUCBs
b2NrLi4gd2hpY2ggd291bGQgY2F1c2UgdXMKLQkgKiB0byBkaWUgLi4uCi0JICovCi0JY250ID0g
MDsKLQlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90
Y2JsaXN0LCBuYXNvYykgewotCQlTQ1RQX1RDQl9MT0NLKGFzb2MpOwotCQlpZiAoYXNvYy0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCWlmIChhc29jLT5h
c29jLnN0YXRlICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUUpIHsKLQkJCQlhc29jLT5hc29j
LnN0YXRlICY9IH5TQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRTsKLQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBhc29jLCBOVUxMKTsKLQkJCX0KLQkJ
ICAgICAgICBjbnQrKzsKLQkJCVNDVFBfVENCX1VOTE9DSyhhc29jKTsKLQkJCWNvbnRpbnVlOwot
CQl9Ci0JCS8qIEZyZWUgYXNzb2NpYXRpb25zIHRoYXQgYXJlIE5PVCBraWxsaW5nIHVzICovCi0J
CWlmICgoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpICE9IFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpICYmCi0JCSAgICAoKGFzb2MtPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JF
X0ZSRUVEKSA9PSAwKSkgewotCQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQotCQkJb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwot
CQkJYXNvYy0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfUENCICsg
U0NUUF9MT0NfNzsKLQkJCXNjdHBfc2VuZF9hYm9ydF90Y2IoYXNvYywgb3BfZXJyLCBTQ1RQX1NP
X0xPQ0tFRCk7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0J
CX0gZWxzZSBpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJF
RUQpIHsKLQkJCWNudCsrOwotCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2MpOwotCQkJY29udGludWU7
Ci0JCX0KLQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9P
UEVOKSB8fAotCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRF
X1NIVVRET1dOX1JFQ0VJVkVEKSkgewotCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19j
dXJyZXN0YWIpOwotCQl9Ci0JCWlmIChzY3RwX2ZyZWVfYXNzb2MoaW5wLCBhc29jLCBTQ1RQX1BD
QkZSRUVfRk9SQ0UsCi0JCSAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfUENCICsg
U0NUUF9MT0NfOCkgPT0gMCkgewotCQkJY250Kys7Ci0JCX0KLQl9Ci0JaWYgKGNudCkgewotCQkv
KiBPayB3ZSBoYXZlIHNvbWVvbmUgb3V0IHRoZXJlIHRoYXQgd2lsbCBraWxsIHVzICovCi0JCSh2
b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudGlt
ZXIpOwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5V
TEwsIDMpOwotI2VuZGlmCi0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJU0NUUF9BU09DX0NS
RUFURV9VTkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCXJldHVybjsK
LQl9Ci0JaWYgKFNDVFBfSU5QX0xPQ0tfQ09OVEVOREVEKGlucCkpCi0JCWJlaW5nX3JlZmVkKys7
Ci0JaWYgKFNDVFBfSU5QX1JFQURfQ09OVEVOREVEKGlucCkpCi0JCWJlaW5nX3JlZmVkKys7Ci0J
aWYgKFNDVFBfQVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoaW5wKSkKLQkJYmVpbmdfcmVmZWQr
KzsKLQotCWlmICgoaW5wLT5yZWZjb3VudCkgfHwKLQkgICAgKGJlaW5nX3JlZmVkKSB8fAotCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVApKSB7Ci0JCSh2b2lk
KVNDVFBfT1NfVElNRVJfU1RPUCgmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudGltZXIp
OwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEws
IDQpOwotI2VuZGlmCi0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0lOUEtJTEws
IGlucCwgTlVMTCwgTlVMTCk7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJU0NUUF9BU09D
X0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCXJldHVy
bjsKLQl9Ci0JaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudHlwZSA9IDA7Ci0JaW5wLT5z
Y3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FOwotCS8qIFJlbW92ZSBp
dCBmcm9tIHRoZSBsaXN0IC4uIGxhc3QgdGhpbmcgd2UgbmVlZCBhCi0JICogbG9jayBmb3IuCi0J
ICovCi0JTElTVF9SRU1PVkUoaW5wLCBzY3RwX2xpc3QpOwotCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCVNDVFBfSU5QX0lORk9fV1VOTE9D
SygpOwotCS8qIE5vdyB3ZSByZWxlYXNlIGFsbCBsb2Nrcy4gU2luY2UgdGhpcyBJTlAKLQkgKiBj
YW5ub3QgYmUgZm91bmQgYW55bW9yZSBleGNlcHQgcG9zc2libHkgYnkgdGhlCi0JICoga2lsbCB0
aW1lciB0aGF0IG1pZ2h0IGJlIHJ1bm5pbmcuIFdlIGNhbGwKLQkgKiB0aGUgZHJhaW4gZnVuY3Rp
b24gaGVyZS4gSXQgc2hvdWxkIGhpdCB0aGUgY2FzZQotCSAqIHdlcmUgaXQgc2VlcyB0aGUgQUNU
SVZFIGZsYWcgY2xlYXJlZCBhbmQgZXhpdAotCSAqIG91dCBmcmVlaW5nIHVzIHRvIHByb2NlZWQg
YW5kIGRlc3Ryb3kgZXZlcnl0aGluZy4KLQkgKi8KLQlpZiAoZnJvbSAhPSBTQ1RQX0NBTExFRF9G
Uk9NX0lOUEtJTExfVElNRVIpIHsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QX0RSQUlOKCZp
bnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7Ci0JfSBlbHNlIHsKLQkJLyogUHJv
YmFibHkgdW4tbmVlZGVkICovCi0JCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmaW5wLT5zY3Rw
X2VwLnNpZ25hdHVyZV9jaGFuZ2UudGltZXIpOwotCX0KLQotI2lmZGVmIFNDVFBfTE9HX0NMT1NJ
TkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgNSk7Ci0jZW5kaWYKLQotI2lmICEoZGVm
aW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykpCi0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pIHx8IF9fRnJlZUJTRF92ZXJzaW9u
IDwgNTAwMDAwCi0JcnQgPSBpcF9wY2ItPmlucF9yb3V0ZS5yb19ydDsKLSNlbmRpZgotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQlpZiAoaW5wLT5wYWtfdG9fcmVhZCkgewotCQko
dm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmlucC0+c2N0cF9lcC56ZXJvX2NvcHlfdGltZXIudGlt
ZXIpOwotCQlTQ1RQX1JFTEVBU0VfUEtUKGlucC0+cGFrX3RvX3JlYWQpOwotCQlpbnAtPnBha190
b19yZWFkID0gTlVMTDsKLQl9Ci0JaWYgKGlucC0+cGFrX3RvX3JlYWRfc2VuZHEpIHsKLQkJKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuemVyb19jb3B5X3NlbmRxX3RpbWVy
LnRpbWVyKTsKLQkJU0NUUF9SRUxFQVNFX1BLVChpbnAtPnBha190b19yZWFkX3NlbmRxKTsKLQkJ
aW5wLT5wYWtfdG9fcmVhZF9zZW5kcSA9IE5VTEw7Ci0JfQotI2VuZGlmCi0JaWYgKChpbnAtPnNj
dHBfYXNvY2lkaGFzaCkgIT0gTlVMTCkgewotCQlTQ1RQX0hBU0hfRlJFRShpbnAtPnNjdHBfYXNv
Y2lkaGFzaCwgaW5wLT5oYXNoYXNvY2lkbWFyayk7Ci0JCWlucC0+c2N0cF9hc29jaWRoYXNoID0g
TlVMTDsKLQl9Ci0JLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQlUQUlMUV9GT1JFQUNIX1NB
RkUoc3EsICZpbnAtPnJlYWRfcXVldWUsIG5leHQsIG5zcSkgewotCQkvKiBJdHMgb25seSBhYmFu
ZG9uZWQgaWYgaXQgaGFkIGRhdGEgbGVmdCAqLwotCQlpZiAoc3EtPmxlbmd0aCkKLQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX2xlZnRfYWJhbmRvbik7Ci0KLQkJVEFJTFFfUkVNT1ZFKCZpbnAtPnJl
YWRfcXVldWUsIHNxLCBuZXh0KTsKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNxLT53aG9Gcm9t
KTsKLQkJaWYgKHNvKQotCQkJc28tPnNvX3Jjdi5zYl9jYyAtPSBzcS0+bGVuZ3RoOwotCQlpZiAo
c3EtPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShzcS0+ZGF0YSk7Ci0JCQlzcS0+ZGF0YSA9IE5V
TEw7Ci0JCX0KLQkJLyoKLQkJICogbm8gbmVlZCB0byBmcmVlIHRoZSBuZXQgY291bnQsIHNpbmNl
IGF0IHRoaXMgcG9pbnQgYWxsCi0JCSAqIGFzc29jJ3MgYXJlIGdvbmUuCi0JCSAqLwotCQlzY3Rw
X2ZyZWVfYV9yZWFkcShOVUxMLCBzcSk7Ci0JfQotCS8qIE5vdyB0aGUgc2N0cF9wY2IgdGhpbmdz
ICovCi0JLyoKLQkgKiBmcmVlIGVhY2ggYXNvYyBpZiBpdCBpcyBub3QgYWxyZWFkeSBjbG9zZWQv
ZnJlZS4gd2UgY2FuJ3QgdXNlIHRoZQotCSAqIG1hY3JvIGhlcmUgc2luY2UgbGVfbmV4dCB3aWxs
IGdldCBmcmVlZCBhcyBwYXJ0IG9mIHRoZQotCSAqIHNjdHBfZnJlZV9hc3NvYygpIGNhbGwuCi0J
ICovCi0jaWZuZGVmIF9fUGFuZGFfXwotCWlmIChpcF9wY2ItPmlucF9vcHRpb25zKSB7Ci0JCSh2
b2lkKXNjdHBfbV9mcmVlKGlwX3BjYi0+aW5wX29wdGlvbnMpOwotCQlpcF9wY2ItPmlucF9vcHRp
b25zID0gMDsKLQl9Ci0jZW5kaWYKLQotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0jaWYgIWRlZmluZWQo
X19GcmVlQlNEX18pIHx8IF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCi0JaWYgKHJ0KSB7Ci0J
CVJURlJFRShydCk7Ci0JCWlwX3BjYi0+aW5wX3JvdXRlLnJvX3J0ID0gMDsKLQl9Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDgwMzAwMAot
I2lmZGVmIElORVQKLQlpZiAoaXBfcGNiLT5pbnBfbW9wdGlvbnMpIHsKLQkJaW5wX2ZyZWVtb3B0
aW9ucyhpcF9wY2ItPmlucF9tb3B0aW9ucyk7Ci0JCWlwX3BjYi0+aW5wX21vcHRpb25zID0gMDsK
LQl9Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBJTkVUNgotI2lmICEoZGVmaW5l
ZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykpCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0J
aWYgKGlwX3BjYi0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKLSNlbHNlCi0JaWYgKGlucC0+aW5w
X3ZmbGFnICYgSU5QX0lQVjYpIHsKLSNlbmRpZgotCQlzdHJ1Y3QgaW42cGNiICppbjZwOwotCi0J
CWluNnAgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKLQkJaXA2X2ZyZWVwY2JvcHRzKGluNnAtPmlu
NnBfb3V0cHV0b3B0cyk7Ci0JfQotI2VuZGlmCi0jZW5kaWYJCQkJLyogSU5FVDYgKi8KLSNpZiAh
KGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCWlucC0+aW5wX3ZmbGFnID0g
MDsKLSNlbHNlCi0JaXBfcGNiLT5pbnBfdmZsYWcgPSAwOwotI2VuZGlmCi0JLyogZnJlZSB1cCBh
dXRoZW50aWNhdGlvbiBmaWVsZHMgKi8KLQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1
bmtzICE9IE5VTEwpCi0JCXNjdHBfZnJlZV9jaHVua2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2F1
dGhfY2h1bmtzKTsKLQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzICE9IE5VTEwpCi0JCXNj
dHBfZnJlZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOwotCi0JTElTVF9GT1JF
QUNIX1NBRkUoc2hhcmVkX2tleSwgJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywgbmV4dCwgbnNo
YXJlZF9rZXkpIHsKLQkJTElTVF9SRU1PVkUoc2hhcmVkX2tleSwgbmV4dCk7Ci0JCXNjdHBfZnJl
ZV9zaGFyZWRrZXkoc2hhcmVkX2tleSk7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0J
fQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaW5wLT5pcF9pbnAuaW5wLmlucF9zdGF0ZSA9
IElOUENCX1NUQVRFX0RFQUQ7Ci0JaWYgKGluX3BjYl9jaGVja3N0YXRlKCZpbnAtPmlwX2lucC5p
bnAsIFdOVF9TVE9QVVNJTkcsIDEpICE9IFdOVF9TVE9QVVNJTkcpIHsKLSNpZmRlZiBJTlZBUklB
TlRTCi0JCXBhbmljKCJzY3RwX2lucGNiX2ZyZWUgaW5wID0gJXAgY291bGRuJ3Qgc2V0IHRvIFNU
T1BVU0lOR1xuIiwgKHZvaWQgKilpbnApOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYoInNjdHBfaW5w
Y2JfZnJlZSBpbnAgPSAlcCBjb3VsZG4ndCBzZXQgdG8gU1RPUFVTSU5HXG4iLCAodm9pZCAqKWlu
cCk7Ci0jZW5kaWYKLQl9Ci0JaW5wLT5pcF9pbnAuaW5wLmlucF9zb2NrZXQtPnNvX2ZsYWdzIHw9
IFNPRl9QQ0JDTEVBUklORzsKLSNlbmRpZgotCS8qCi0JICogaWYgd2UgaGF2ZSBhbiBhZGRyZXNz
IGxpc3QgdGhlIGZvbGxvd2luZyB3aWxsIGZyZWUgdGhlIGxpc3Qgb2YKLQkgKiBpZmFkZHIncyB0
aGF0IGFyZSBzZXQgaW50byB0aGlzIGVwLiBBZ2FpbiBtYWNybyBsaW1pdGF0aW9ucyBoZXJlLAot
CSAqIHNpbmNlIHRoZSBMSVNUX0ZPUkVBQ0ggY291bGQgYmUgYSBiYWQgaWRlYS4KLQkgKi8KLQlM
SVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2Fk
ZHIsIG5sYWRkcikgewotCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7Ci0JfQotCi0jaWZkZWYg
U0NUUF9UUkFDS19GUkVFRF9BU09DUwotCS8qIFRFTVAgQ09ERSAqLwotCUxJU1RfRk9SRUFDSF9T
QUZFKGFzb2MsICZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QsIHNjdHBfdGNibGlzdCwgbmFzb2Mp
IHsKLQkJTElTVF9SRU1PVkUoYXNvYywgc2N0cF90Y2JsaXN0KTsKLQkJU0NUUF9aT05FX0ZSRUUo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIGFzb2MpOwotCQlTQ1RQX0RFQ1JfQVNPQ19D
T1VOVCgpOwotCX0KLQkvKiAqKiogRU5EIFRFTVAgQ09ERSAqKioqLwotI2VuZGlmCi0jaWZkZWYg
U0NUUF9NVlJGCi0JU0NUUF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQX01fTVZSRik7Ci0jZW5k
aWYKLQkvKiBOb3cgbGV0cyBzZWUgYWJvdXQgZnJlZWluZyB0aGUgRVAgaGFzaCB0YWJsZS4gKi8K
LQlpZiAoaW5wLT5zY3RwX3RjYmhhc2ggIT0gTlVMTCkgewotCQlTQ1RQX0hBU0hfRlJFRShpbnAt
PnNjdHBfdGNiaGFzaCwgaW5wLT5zY3RwX2hhc2htYXJrKTsKLQkJaW5wLT5zY3RwX3RjYmhhc2gg
PSBOVUxMOwotCX0KLQkvKiBOb3cgd2UgbXVzdCBwdXQgdGhlIGVwIG1lbW9yeSBiYWNrIGludG8g
dGhlIHpvbmUgcG9vbCAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JY3JmcmVlKGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCk7Ci0JSU5QX0xPQ0tfREVTVFJPWSgmaW5wLT5pcF9pbnAuaW5w
KTsKLSNlbmRpZgotCVNDVFBfSU5QX0xPQ0tfREVTVFJPWShpbnApOwotCVNDVFBfSU5QX1JFQURf
REVTVFJPWShpbnApOwotCVNDVFBfQVNPQ19DUkVBVEVfTE9DS19ERVNUUk9ZKGlucCk7Ci0jaWYg
IWRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX2VwKSwgaW5wKTsKLQlTQ1RQX0RFQ1JfRVBfQ09VTlQoKTsKLSNlbHNlCi0JLyogRm9yIFRp
Z2VyLCB3ZSB3aWxsIGRvIHRoaXMgbGF0ZXIuLi4gKi8KLSNlbmRpZgotfQotCi0KLXN0cnVjdCBz
Y3RwX25ldHMgKgotc2N0cF9maW5kbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNv
Y2thZGRyICphZGRyKQotewotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkvKiBsb2NhdGUgdGhl
IGFkZHJlc3MgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7Ci0JCWlmIChzY3RwX2NtcGFkZHIoYWRkciwgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQt
PnJvLl9sX2FkZHIpKQotCQkJcmV0dXJuIChuZXQpOwotCX0KLQlyZXR1cm4gKE5VTEwpOwotfQot
Ci0KLWludAotc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3Qoc3RydWN0IHNvY2thZGRyICph
ZGRyLCB1aW50MzJfdCB2cmZfaWQpCi17Ci0jaWZkZWYgX19QYW5kYV9fCi0JcmV0dXJuICgwKTsK
LSNlbHNlCi0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQlzY3RwX2lmYSA9IHNjdHBfZmlu
ZF9pZmFfYnlfYWRkcihhZGRyLCB2cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQlpZiAo
c2N0cF9pZmEpIHsKLQkJcmV0dXJuICgxKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0K
LSNlbmRpZgotfQotCi0vKgotICogYWRkJ3MgYSByZW1vdGUgZW5kcG9pbnQgYWRkcmVzcywgZG9u
ZSB3aXRoIHRoZSBJTklUL0lOSVQtQUNLIGFzIHdlbGwgYXMKLSAqIHdoZW4gYSBBU0NPTkYgYXJy
aXZlcyB0aGF0IGFkZHMgaXQuIEl0IHdpbGwgYWxzbyBpbml0aWFsaXplIGFsbCB0aGUgY3duZAot
ICogc3RhdHMgb2Ygc3R1ZmYuCi0gKi8KLWludAotc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKm5ld2FkZHIsCi0gICAgc3RydWN0IHNj
dHBfbmV0cyAqKm5ldHAsIHVpbnQxNl90IHBvcnQsIGludCBzZXRfc2NvcGUsIGludCBmcm9tKQot
ewotCS8qCi0JICogVGhlIGZvbGxvd2luZyBpcyByZWR1bmRhbnQgdG8gdGhlIHNhbWUgbGluZXMg
aW4gdGhlCi0JICogc2N0cF9hbG9jX2Fzc29jKCkgYnV0IGlzIG5lZWRlZCBzaW5jZSBvdGhlcnMg
Y2FsbCB0aGUgYWRkCi0JICogYWRkcmVzcyBmdW5jdGlvbgotCSAqLwotCXN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgKm5ldGZpcnN0OwotCWludCBhZGRyX2luc2NvcGU7Ci0KLQlTQ1RQREJHKFNDVFBf
REVCVUdfUENCMSwgIkFkZGluZyBhbiBhZGRyZXNzIChmcm9tOiVkKSB0byB0aGUgcGVlcjogIiwK
LQkJZnJvbSk7Ci0JU0NUUERCR19BRERSKFNDVFBfREVCVUdfUENCMSwgbmV3YWRkcik7Ci0KLQlu
ZXRmaXJzdCA9IHNjdHBfZmluZG5ldChzdGNiLCBuZXdhZGRyKTsKLQlpZiAobmV0Zmlyc3QpIHsK
LQkJLyoKLQkJICogTGllIGFuZCByZXR1cm4gb2ssIHdlIGRvbid0IHdhbnQgdG8gbWFrZSB0aGUg
YXNzb2NpYXRpb24KLQkJICogZ28gYXdheSBmb3IgdGhpcyBiZWhhdmlvci4gSXQgd2lsbCBoYXBw
ZW4gaW4gdGhlIFRDUAotCQkgKiBtb2RlbCBpbiBhIGNvbm5lY3RlZCBzb2NrZXQuIEl0IGRvZXMg
bm90IHJlYWNoIHRoZSBoYXNoCi0JCSAqIHRhYmxlIHVudGlsIGFmdGVyIHRoZSBhc3NvY2lhdGlv
biBpcyBidWlsdCBzbyBpdCBjYW4ndCBiZQotCQkgKiBmb3VuZC4gTWFyayBhcyByZWFjaGFibGUs
IHNpbmNlIHRoZSBpbml0aWFsIGNyZWF0aW9uIHdpbGwKLQkJICogaGF2ZSBiZWVuIGNsZWFyZWQg
YW5kIHRoZSBOT1RfSU5fQVNTT0MgZmxhZyB3aWxsIGhhdmUKLQkJICogYmVlbiBhZGRlZC4uLiBh
bmQgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAgcmVtb3ZpbmcgaXQKLQkJICogYmFjayBvdXQuCi0J
CSAqLwotCQlpZiAobmV0Zmlyc3QtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQp
IHsKLQkJCW5ldGZpcnN0LT5kZXN0X3N0YXRlID0gKFNDVFBfQUREUl9SRUFDSEFCTEUgfAotCQkJ
ICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRCk7Ci0JCX0gZWxzZSB7Ci0JCQluZXRmaXJzdC0+ZGVz
dF9zdGF0ZSA9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCX0KLQotCQlyZXR1cm4gKDApOwotCX0K
LQlhZGRyX2luc2NvcGUgPSAxOwotCXN3aXRjaCAobmV3YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZk
ZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwot
Ci0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluZXdhZGRyOwotCQlpZiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgPT0gMCkgewotCQkJLyogSW52YWxpZCBhZGRyZXNzICovCi0JCQlyZXR1cm4g
KC0xKTsKLQkJfQotCQkvKiB6ZXJvIG91dCB0aGUgemVybyBhcmVhICovCi0JCW1lbXNldCgmc2lu
LT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQotCQkvKiBhc3N1cmUgbGVu
IGlzIHNldCAqLwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzaW4tPnNpbl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQlpZiAoc2V0X3Njb3BlKSB7Ci0JCQlpZiAo
SU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgewotCQkJCXN0Y2ItPmFzb2Mu
c2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBWYWxp
ZGF0ZSB0aGUgYWRkcmVzcyBpcyBpbiBzY29wZSAqLwotCQkJaWYgKChJTjRfSVNQUklWQVRFX0FE
RFJFU1MoJnNpbi0+c2luX2FkZHIpKSAmJgotCQkJICAgIChzdGNiLT5hc29jLnNjb3BlLmlwdjRf
bG9jYWxfc2NvcGUgPT0gMCkpIHsKLQkJCQlhZGRyX2luc2NvcGUgPSAwOwotCQkJfQotCQl9Ci0J
CWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0J
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopbmV3YWRkcjsKLQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42
X2FkZHIpKSB7Ci0JCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KLQkJCXJldHVybiAoLTEpOwotCQl9
Ci0JCS8qIGFzc3VyZSBsZW4gaXMgc2V0ICovCi0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlzaW42
LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQlpZiAo
c2V0X3Njb3BlKSB7Ci0JCQlpZiAoc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3QobmV3YWRk
ciwgc3RjYi0+YXNvYy52cmZfaWQpKSB7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19z
Y29wZSA9IDE7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9IDA7Ci0JCQkJc3Rj
Yi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID0gMTsKLQkJCQlzdGNiLT5hc29jLnNjb3Bl
LnNpdGVfc2NvcGUgPSAxOwotCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZSBuZXcgZGVzdGluYXRpb24g
aXMgYSBMSU5LX0xPQ0FMIHdlCi0JCQkJICogbXVzdCBoYXZlIGNvbW1vbiBzaXRlIHNjb3BlLiBE
b24ndCBzZXQKLQkJCQkgKiB0aGUgbG9jYWwgc2NvcGUgc2luY2Ugd2UgbWF5IG5vdCBzaGFyZQot
CQkJCSAqIGFsbCBsaW5rcywgb25seSBsb29wYmFjayBjYW4gZG8gdGhpcy4KLQkJCQkgKiBMaW5r
cyBvbiB0aGUgbG9jYWwgbmV0d29yayB3b3VsZCBhbHNvIGJlCi0JCQkJICogb24gb3VyIHByaXZh
dGUgbmV0d29yayBmb3IgdjQgdG9vLgotCQkJCSAqLwotCQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2
NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsK
LQkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7
Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIGlzIFNJVEVfTE9DQUwgdGhl
bgotCQkJCSAqIHdlIG11c3QgaGF2ZSBzaXRlIHNjb3BlIGluIGNvbW1vbi4KLQkJCQkgKi8KLQkJ
CQlzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPSAxOwotCQkJfQotCQl9IGVsc2UgewotCQkJ
LyogVmFsaWRhdGUgdGhlIGFkZHJlc3MgaXMgaW4gc2NvcGUgKi8KLQkJCWlmIChJTjZfSVNfQURE
Ul9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSAmJgotCQkJICAgIChzdGNiLT5hc29jLnNjb3Bl
Lmxvb3BiYWNrX3Njb3BlID09IDApKSB7Ci0JCQkJYWRkcl9pbnNjb3BlID0gMDsKLQkJCX0gZWxz
ZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpICYmCi0JCQkgICAg
KHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGUgPT0gMCkpIHsKLQkJCQlhZGRyX2luc2NvcGUg
PSAwOwotCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikgJiYKLQkJCSAgICAoc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID09IDApKSB7Ci0JCQkJ
YWRkcl9pbnNjb3BlID0gMDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCXsKLQkJc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKnNjb25uOwotCi0JCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopbmV3
YWRkcjsKLQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IE5VTEwpIHsKLQkJCS8qIEludmFsaWQg
YWRkcmVzcyAqLwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLSNpZmRlZiBIQVZFX1NDT05OX0xFTgot
CQlzY29ubi0+c2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRp
ZgotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBub3Qgc3VwcG9ydGVkIGZh
bWlseSB0eXBlICovCi0JCXJldHVybiAoLTEpOwotCX0KLQluZXQgPSBTQ1RQX1pPTkVfR0VUKFND
VFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCksIHN0cnVjdCBzY3RwX25ldHMpOwotCWlmIChuZXQg
PT0gTlVMTCkgewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JU0NUUF9JTkNSX1JBRERSX0NPVU5UKCk7
Ci0JbWVtc2V0KG5ldCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX25ldHMpKTsKLQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmbmV0LT5zdGFydF90aW1lKTsKLSNpZmRlZiBIQVZFX1NBX0xFTgot
CW1lbWNweSgmbmV0LT5yby5fbF9hZGRyLCBuZXdhZGRyLCBuZXdhZGRyLT5zYV9sZW4pOwotI2Vu
ZGlmCi0Jc3dpdGNoIChuZXdhZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBB
Rl9JTkVUOgotI2lmbmRlZiBIQVZFX1NBX0xFTgotCQltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwg
bmV3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotI2VuZGlmCi0JCSgoc3RydWN0
IHNvY2thZGRyX2luICopJm5ldC0+cm8uX2xfYWRkciktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7
Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotI2lmbmRl
ZiBIQVZFX1NBX0xFTgotCQltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwgbmV3YWRkciwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNlbmRpZgotCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KikmbmV0LT5yby5fbF9hZGRyKS0+c2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCWJyZWFrOwot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLSNpZm5k
ZWYgSEFWRV9TQV9MRU4KLQkJbWVtY3B5KCZuZXQtPnJvLl9sX2FkZHIsIG5ld2FkZHIsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotI2VuZGlmCi0JCSgoc3RydWN0IHNvY2thZGRyX2Nv
bm4gKikmbmV0LT5yby5fbF9hZGRyKS0+c2Nvbm5fcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQlicmVh
azsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQluZXQtPmFkZHJfaXNfbG9jYWwg
PSBzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChuZXdhZGRyLCBzdGNiLT5hc29jLnZyZl9p
ZCk7Ci0JaWYgKG5ldC0+YWRkcl9pc19sb2NhbCAmJiAoKHNldF9zY29wZSB8fCAoZnJvbSA9PSBT
Q1RQX0FERFJfSVNfQ09ORklSTUVEKSkpKSB7Ci0JCXN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tf
c2NvcGUgPSAxOwotCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAxOwotCQlz
dGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlID0gMDsKLQkJc3RjYi0+YXNvYy5zY29wZS5zaXRl
X3Njb3BlID0gMTsKLQkJYWRkcl9pbnNjb3BlID0gMTsKLQl9Ci0JbmV0LT5mYWlsdXJlX3RocmVz
aG9sZCA9IHN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlOwotCW5ldC0+cGZfdGhyZXNob2xkID0g
c3RjYi0+YXNvYy5kZWZfbmV0X3BmX3RocmVzaG9sZDsKLQlpZiAoYWRkcl9pbnNjb3BlID09IDAp
IHsKLQkJbmV0LT5kZXN0X3N0YXRlID0gKFNDVFBfQUREUl9SRUFDSEFCTEUgfAotCQkgICAgU0NU
UF9BRERSX09VVF9PRl9TQ09QRSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGZyb20gPT0gU0NUUF9BRERS
X0lTX0NPTkZJUk1FRCkKLQkJCS8qIFNDVFBfQUREUl9JU19DT05GSVJNRUQgaXMgcGFzc2VkIGJ5
IGNvbm5lY3RfeCAqLwotCQkJbmV0LT5kZXN0X3N0YXRlID0gU0NUUF9BRERSX1JFQUNIQUJMRTsK
LQkJZWxzZQotCQkJbmV0LT5kZXN0X3N0YXRlID0gU0NUUF9BRERSX1JFQUNIQUJMRSB8Ci0JCQkg
ICAgU0NUUF9BRERSX1VOQ09ORklSTUVEOwotCX0KLQkvKiBXZSBzZXQgdGhpcyB0byAwLCB0aGUg
dGltZXIgY29kZSBrbm93cyB0aGF0Ci0JICogdGhpcyBtZWFucyBpdHMgYW4gaW5pdGlhbCB2YWx1
ZQotCSAqLwotCW5ldC0+cnRvX25lZWRlZCA9IDE7Ci0JbmV0LT5SVE8gPSAwOwotCW5ldC0+UlRP
X21lYXN1cmVkID0gMDsKLQlzdGNiLT5hc29jLm51bW5ldHMrKzsKLQluZXQtPnJlZl9jb3VudCA9
IDE7Ci0JbmV0LT5jd3Jfd2luZG93X3RzbiA9IG5ldC0+bGFzdF9jd3JfdHNuID0gc3RjYi0+YXNv
Yy5zZW5kaW5nX3NlcSAtIDE7Ci0JbmV0LT5wb3J0ID0gcG9ydDsKLQluZXQtPmRzY3AgPSBzdGNi
LT5hc29jLmRlZmF1bHRfZHNjcDsKLSNpZmRlZiBJTkVUNgotCW5ldC0+Zmxvd2xhYmVsID0gc3Rj
Yi0+YXNvYy5kZWZhdWx0X2Zsb3dsYWJlbDsKLSNlbmRpZgotCWlmIChzY3RwX3N0Y2JfaXNfZmVh
dHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJF
QVQpKSB7Ci0JCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9IQjsKLQl9IGVsc2Ugewot
CQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT0hCOwotCX0KLQlpZiAoc2N0cF9zdGNi
X2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9U
X1BNVFVEKSkgewotCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOwotCX0g
ZWxzZSB7Ci0JCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PX1BNVFVEOwotCX0KLQlu
ZXQtPmhlYXJ0X2JlYXRfZGVsYXkgPSBzdGNiLT5hc29jLmhlYXJ0X2JlYXRfZGVsYXk7Ci0JLyog
SW5pdCB0aGUgdGltZXIgc3RydWN0dXJlICovCi0JU0NUUF9PU19USU1FUl9JTklUKCZuZXQtPnJ4
dF90aW1lci50aW1lcik7Ci0JU0NUUF9PU19USU1FUl9JTklUKCZuZXQtPnBtdHVfdGltZXIudGlt
ZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmbmV0LT5oYl90aW1lci50aW1lcik7Ci0KLQkvKiBO
b3cgZ2VuZXJhdGUgYSByb3V0ZSBmb3IgdGhpcyBndXkgKi8KLSNpZmRlZiBJTkVUNgotI2lmZGVm
IFNDVFBfRU1CRURERURfVjZfU0NPUEUKLQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8K
LQlpZiAobmV3YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8u
X2xfYWRkcjsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCi0JCSh2b2lkKWluNl9lbWJlZHNjb3Bl
KCZzaW42LT5zaW42X2FkZHIsIHNpbjYsICZzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLCBOVUxM
KTsKLSNlbHNlCi0JCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYs
ICZzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLCBOVUxMLCBOVUxMKTsKLSNlbmRpZgotI2VsaWYg
ZGVmaW5lZChTQ1RQX0tBTUUpCi0JCSh2b2lkKXNhNl9lbWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9H
TE9CQUwoaXA2X3VzZV9kZWZ6b25lKSk7Ci0jZWxzZQotCQkodm9pZClpbjZfZW1iZWRzY29wZSgm
c2luNi0+c2luNl9hZGRyLCBzaW42KTsKLSNlbmRpZgotI2lmbmRlZiBTQ09QRURST1VUSU5HCi0J
CXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotI2VuZGlmCi0JfQotI2VuZGlmIC8qIFNDVFBfRU1C
RURERURfVjZfU0NPUEUgKi8KLSNlbmRpZgotCVNDVFBfUlRBTExPQygoc2N0cF9yb3V0ZV90ICop
Jm5ldC0+cm8sCi0JICAgICAgICAgICAgIHN0Y2ItPmFzb2MudnJmX2lkLAotCSAgICAgICAgICAg
ICBzdGNiLT5zY3RwX2VwLT5maWJudW0pOwotCi0JbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7
Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoU0NUUF9ST1VURV9IQVNfVkFMSURf
SUZOKCZuZXQtPnJvKSkgewotCQkvKiBHZXQgc291cmNlIGFkZHJlc3MgKi8KLQkJbmV0LT5yby5f
c19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RjYi0+c2N0cF9lcCwKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYiwKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNjdHBfcm91
dGVfdCAqKSZuZXQtPnJvLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0Y2ItPmFzb2MudnJmX2lkKTsKLQkJaWYgKG5ldC0+cm8uX3NfYWRkciAhPSBOVUxM
KSB7Ci0JCQl1aW50MzJfdCBpbXR1LCBybXR1LCBoY210dTsKLQotCQkJbmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCA9IDE7Ci0JCQkvKiBOb3cgZ2V0IHRoZSBpbnRlcmZhY2UgTVRVICovCi0JCQlpZiAo
bmV0LT5yby5fc19hZGRyLT5pZm5fcCAhPSBOVUxMKSB7Ci0JCQkJaW10dSA9IFNDVFBfR0FUSEVS
X01UVV9GUk9NX0lOVEZDKG5ldC0+cm8uX3NfYWRkci0+aWZuX3ApOwotCQkJfSBlbHNlIHsKLQkJ
CQlpbXR1ID0gMDsKLQkJCX0KLQkJCXJtdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShu
ZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIG5ldC0+cm8ucm9fcnQpOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQloY210dSA9IHNjdHBfaGNfZ2V0X210dSgmbmV0LT5y
by5fbF9hZGRyLCBzdGNiLT5zY3RwX2VwLT5maWJudW0pOwotI2Vsc2UKLQkJCWhjbXR1ID0gMDsK
LSNlbmRpZgotCQkJbmV0LT5tdHUgPSBzY3RwX21pbl9tdHUoaGNtdHUsIHJtdHUsIGltdHUpOwot
CQkJaWYgKHJtdHUgPT0gMCkgewotCQkJCS8qIFN0YXJ0IHRoaW5ncyBvZmYgdG8gbWF0Y2ggbXR1
IG9mIGludGVyZmFjZSBwbGVhc2UuICovCi0JCQkJU0NUUF9TRVRfTVRVX09GX1JPVVRFKCZuZXQt
PnJvLl9sX2FkZHIuc2EsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cm8ucm9fcnQs
IG5ldC0+bXR1KTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotCWlmIChuZXQtPm10dSA9PSAwKSB7
Ci0JCXN3aXRjaCAobmV3YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFG
X0lORVQ6Ci0JCQluZXQtPm10dSA9IFNDVFBfREVGQVVMVF9NVFU7Ci0JCQlicmVhazsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQluZXQtPm10dSA9IDEyODA7Ci0J
CQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJY2FzZSBBRl9D
T05OOgotCQkJbmV0LT5tdHUgPSAxMjgwOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoK
LQkJCWJyZWFrOwotCQl9Ci0JfQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikK
LQlpZiAobmV0LT5wb3J0KSB7Ci0JCW5ldC0+bXR1IC09ICh1aW50MzJfdClzaXplb2Yoc3RydWN0
IHVkcGhkcik7Ci0JfQotI2VuZGlmCi0JaWYgKGZyb20gPT0gU0NUUF9BTExPQ19BU09DKSB7Ci0J
CXN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID0gbmV0LT5tdHU7Ci0JfQotCWlmIChzdGNiLT5hc29j
LnNtYWxsZXN0X210dSA+IG5ldC0+bXR1KSB7Ci0JCXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0
Y2IsIG5ldC0+bXR1KTsKLQl9Ci0jaWZkZWYgSU5FVDYKLSNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2
X1NDT1BFCi0JaWYgKG5ld2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42OwotCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZu
ZXQtPnJvLl9sX2FkZHI7Ci0jaWZkZWYgU0NUUF9LQU1FCi0JCSh2b2lkKXNhNl9yZWNvdmVyc2Nv
cGUoc2luNik7Ci0jZWxzZQotCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZzaW42LT5z
aW42X2FkZHIsIE5VTEwpOwotI2VuZGlmIC8qIFNDVFBfS0FNRSAqLwotCX0KLSNlbmRpZiAvKiBT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jZW5kaWYKLQotCS8qIEpSUyAtIFVzZSB0aGUgY29u
Z2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KLQlpZiAoc3RjYi0+YXNv
Yy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSAhPSBOVUxMKQotCQkoKnN0
Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0pKHN0Y2IsIG5l
dCk7Ci0KLQkvKgotCSAqIENNVDogQ1VDIGFsZ28gLSBzZXQgZmluZF9wc2V1ZG9fY3VtYWNrIHRv
IFRSVUUgKDEpIGF0IGJlZ2lubmluZwotCSAqIG9mIGFzc29jICgyMDA1LzA2LzI3LCBpeWVuZ2Fy
QGNpcy51ZGVsLmVkdSkKLQkgKi8KLQluZXQtPmZpbmRfcHNldWRvX2N1bWFjayA9IDE7Ci0JbmV0
LT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CS8qIENob29zZSBhbiBpbml0aWFsIGZsb3dpZC4gKi8KLQluZXQtPmZsb3dpZCA9IHN0Y2ItPmFz
b2MubXlfdnRhZyBeCi0JICAgICAgICAgICAgICBudG9ocyhzdGNiLT5ycG9ydCkgXgotCSAgICAg
ICAgICAgICAgbnRvaHMoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCk7Ci0JbmV0LT5mbG93dHlw
ZSA9IE1fSEFTSFRZUEVfT1BBUVVFX0hBU0g7Ci0jZW5kaWYKLQlpZiAobmV0cCkgewotCQkqbmV0
cCA9IG5ldDsKLQl9Ci0JbmV0Zmlyc3QgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsK
LQlpZiAobmV0LT5yby5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qIFNpbmNlIHdlIGhhdmUgbm8gcm91
dGUgcHV0IGl0IGF0IHRoZSBiYWNrICovCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29j
Lm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKLQl9IGVsc2UgaWYgKG5ldGZpcnN0ID09IE5VTEwpIHsK
LQkJLyogV2UgYXJlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIHBvb2wuICovCi0JCVRBSUxRX0lOU0VS
VF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKLQl9IGVsc2UgaWYgKG5l
dGZpcnN0LT5yby5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIEZpcnN0IG9uZSBoYXMgTk8g
cm91dGUuIFBsYWNlIHRoaXMgb25lIGFoZWFkIG9mIHRoZSBmaXJzdAotCQkgKiBvbmUuCi0JCSAq
LwotCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7
Ci0jaWZuZGVmIF9fUGFuZGFfXwotCX0gZWxzZSBpZiAobmV0LT5yby5yb19ydC0+cnRfaWZwICE9
IG5ldGZpcnN0LT5yby5yb19ydC0+cnRfaWZwKSB7Ci0JCS8qCi0JCSAqIFRoaXMgb25lIGhhcyBh
IGRpZmZlcmVudCBpbnRlcmZhY2UgdGhhbiB0aGUgb25lIGF0IHRoZQotCQkgKiB0b3Agb2YgdGhl
IGxpc3QuIFBsYWNlIGl0IGFoZWFkLgotCQkgKi8KLQkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2It
PmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJLyoKLQkJ
ICogT2sgd2UgaGF2ZSB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIGZpcnN0IG9uZS4gTW92ZQot
CQkgKiBmb3J3YXJkIHVudGlsIHdlIGZpbmQgZWl0aGVyIGEpIG9uZSB3aXRoIGEgTlVMTCByb3V0
ZS4uLgotCQkgKiBpbnNlcnQgYWhlYWQgb2YgdGhhdCBiKSBvbmUgd2l0aCBhIGRpZmZlcmVudCBp
ZnAuLiBpbnNlcnQKLQkJICogYWZ0ZXIgdGhhdC4gYykgZW5kIG9mIHRoZSBsaXN0Li4gaW5zZXJ0
IGF0IHRoZSB0YWlsLgotCQkgKi8KLQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0bG9vazsKLQotCQlk
byB7Ci0JCQluZXRsb29rID0gVEFJTFFfTkVYVChuZXRmaXJzdCwgc2N0cF9uZXh0KTsKLQkJCWlm
IChuZXRsb29rID09IE5VTEwpIHsKLQkJCQkvKiBFbmQgb2YgdGhlIGxpc3QgKi8KLQkJCQlUQUlM
UV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7Ci0JCQkJYnJl
YWs7Ci0JCQl9IGVsc2UgaWYgKG5ldGxvb2stPnJvLnJvX3J0ID09IE5VTEwpIHsKLQkJCQkvKiBu
ZXh0IG9uZSBoYXMgTk8gcm91dGUgKi8KLQkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKG5ldGZpcnN0
LCBuZXQsIHNjdHBfbmV4dCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZuZGVmIF9fUGFuZGFfXwot
CQkJZWxzZSBpZiAobmV0bG9vay0+cm8ucm9fcnQtPnJ0X2lmcCAhPSBuZXQtPnJvLnJvX3J0LT5y
dF9pZnApCi0jZWxzZQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJVEFJTFFfSU5TRVJUX0FG
VEVSKCZzdGNiLT5hc29jLm5ldHMsIG5ldGxvb2ssCi0JCQkJCQkgICBuZXQsIHNjdHBfbmV4dCk7
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZuZGVmIF9fUGFuZGFfXwotCQkJLyogU2hpZnQgZm9yd2Fy
ZCAqLwotCQkJbmV0Zmlyc3QgPSBuZXRsb29rOwotI2VuZGlmCi0JCX0gd2hpbGUgKG5ldGxvb2sg
IT0gTlVMTCk7Ci0JfQotCi0JLyogZ290IHRvIGhhdmUgYSBwcmltYXJ5IHNldCAqLwotCWlmIChz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPT0gMCkgewotCQlzdGNiLT5hc29jLnByaW1h
cnlfZGVzdGluYXRpb24gPSBuZXQ7Ci0JfSBlbHNlIGlmICgoc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uLT5yby5yb19ydCA9PSBOVUxMKSAmJgotCQkgICAgKG5ldC0+cm8ucm9fcnQpICYm
Ci0JICAgICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKSkg
ewotCQkvKiBObyByb3V0ZSB0byBjdXJyZW50IHByaW1hcnkgYWRvcHQgbmV3IHByaW1hcnkgKi8K
LQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gbmV0OwotCX0KLQkvKiBWYWxpZGF0
ZSBwcmltYXJ5IGlzIGZpcnN0ICovCi0JbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0
cyk7Ci0JaWYgKChuZXQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSAmJgotCSAg
ICAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSkgewotCQkvKiBmaXJzdCBvbmUgb24g
dGhlIGxpc3QgaXMgTk9UIHRoZSBwcmltYXJ5Ci0JCSAqIHNjdHBfY21wYWRkcigpIGlzIG11Y2gg
bW9yZSBlZmZpY2llbnQgaWYKLQkJICogdGhlIHByaW1hcnkgaXMgdGhlIGZpcnN0IG9uIHRoZSBs
aXN0LCBtYWtlIGl0Ci0JCSAqIHNvLgotCQkgKi8KLQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29j
Lm5ldHMsCi0JCQkgICAgIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0
KTsKLQkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2ItPmFzb2MubmV0cywKLQkJCQkgIHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKLQl9Ci0JcmV0dXJuICgwKTsKLX0K
LQotCi1zdGF0aWMgdWludDMyX3QKLXNjdHBfYWxvY19hX2Fzc29jX2lkKHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQl1aW50MzJfdCBpZDsKLQlzdHJ1
Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOwotCXN0cnVjdCBzY3RwX3RjYiAqbHN0Y2I7Ci0KLQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOwotIHRyeV9hZ2FpbjoKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKLQkJLyogVFNOSCAqLwotCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qCi0JICogV2UgZG9uJ3QgYWxsb3cg
YXNzb2MgaWQgdG8gYmUgb25lIG9mIFNDVFBfRlVUVVJFX0FTU09DLAotCSAqIFNDVFBfQ1VSUkVO
VF9BU1NPQyBhbmQgU0NUUF9BTExfQVNTT0MuCi0JICovCi0JaWYgKGlucC0+c2N0cF9hc3NvY2lk
X2NvdW50ZXIgPD0gU0NUUF9BTExfQVNTT0MpIHsKLQkJaW5wLT5zY3RwX2Fzc29jaWRfY291bnRl
ciA9IFNDVFBfQUxMX0FTU09DICsgMTsKLQl9Ci0JaWQgPSBpbnAtPnNjdHBfYXNzb2NpZF9jb3Vu
dGVyOwotCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIrKzsKLQlsc3RjYiA9IHNjdHBfZmluZGFz
b2NfZXBfYXNvY2lkX2xvY2tlZChpbnAsIChzY3RwX2Fzc29jX3QpaWQsIDApOwotCWlmIChsc3Rj
YikgewotCQlnb3RvIHRyeV9hZ2FpbjsKLQl9Ci0JaGVhZCA9ICZpbnAtPnNjdHBfYXNvY2lkaGFz
aFtTQ1RQX1BDQkhBU0hfQVNPQyhpZCwgaW5wLT5oYXNoYXNvY2lkbWFyayldOwotCUxJU1RfSU5T
RVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKLQlzdGNiLT5hc29jLmlu
X2Fzb2NpZF9oYXNoID0gMTsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JcmV0dXJuIGlkOwot
fQotCi0vKgotICogYWxsb2NhdGUgYW4gYXNzb2NpYXRpb24gYW5kIGFkZCBpdCB0byB0aGUgZW5k
cG9pbnQuIFRoZSBjYWxsZXIgbXVzdCBiZQotICogY2FyZWZ1bCB0byBhZGQgYWxsIGFkZGl0aW9u
YWwgYWRkcmVzc2VzIG9uY2UgdGhleSBhcmUga25vdyByaWdodCBhd2F5IG9yCi0gKiBlbHNlIHRo
ZSBhc3NvYyB3aWxsIGJlIG1heSBleHBlcmllbmNlIGEgYmxhY2tvdXQgc2NlbmFyaW8uCi0gKi8K
LXN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgc3RydWN0IHNvY2thZGRyICpmaXJzdGFkZHIsCi0gICAgICAgICAgICAgICAgaW50ICplcnJv
ciwgdWludDMyX3Qgb3ZlcnJpZGVfdGFnLCB1aW50MzJfdCB2cmZfaWQsCi0gICAgICAgICAgICAg
ICAgdWludDE2X3Qgb19zdHJlYW1zLCB1aW50MTZfdCBwb3J0LAotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQlzdHJ1Y3QgdGhyZWFkICpw
Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCQlQS1RIUkVBRCBwCi0jZWxzZQotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAgICAgICAgICAgICAvKiAgX19Vc2Vyc3BhY2VfXyBO
VUxMIHByb2MgaXMgZ29pbmcgdG8gYmUgcGFzc2VkIGhlcmUuIFNlZSBzY3RwX2xvd2VyX3Nvc2Vu
ZCAqLwotI2VuZGlmCi0JCXN0cnVjdCBwcm9jICpwCi0jZW5kaWYKLSkKLXsKLQkvKiBub3RlIHRo
ZSBwIGFyZ3VtZW50IGlzIG9ubHkgdmFsaWQgaW4gdW5ib3VuZCBzb2NrZXRzICovCi0KLQlzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3Ry
dWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQl1aW50MTZfdCBycG9ydDsKLQlpbnQgZXJyOwotCi0J
LyoKLQkgKiBBc3N1bXB0aW9uIG1hZGUgaGVyZTogQ2FsbGVyIGhhcyBkb25lIGEKLQkgKiBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGVwLCBhZGRyJ3MpOyB0byBtYWtlIHN1cmUgdGhlCi0J
ICogYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBhbHJlYWR5LgotCSAqLwotCWlmIChTQ1RQX0JBU0Vf
SU5GTyhpcGlfY291bnRfYXNvYykgPj0gU0NUUF9NQVhfTlVNX09GX0FTT0MpIHsKLQkJLyogSGl0
IG1heCBhc3NvYywgc29ycnkgbm8gbW9yZSAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9CVUZTKTsKLQkJKmVycm9yID0gRU5P
QlVGUzsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGZpcnN0YWRkciA9PSBOVUxMKSB7Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0Is
IEVJTlZBTCk7Ci0JCSplcnJvciA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JU0NU
UF9JTlBfUkxPQ0soaW5wKTsKLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpICYmCi0JICAgICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENC
X0ZMQUdTX1BPUlRSRVVTRSkpIHx8Ci0JICAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQ09OTkVDVEVEKSkpIHsKLQkJLyoKLQkJICogSWYgaXRzIGluIHRoZSBUQ1AgcG9vbCwg
aXRzIE5PVCBhbGxvd2VkIHRvIGNyZWF0ZSBhbgotCQkgKiBhc3NvY2lhdGlvbi4gVGhlIHBhcmVu
dCBsaXN0ZW5lciBuZWVkcyB0byBjYWxsCi0JCSAqIHNjdHBfYWxvY19hc3NvYy4uIG9yIHRoZSBv
bmUtMi1tYW55IHNvY2tldC4gSWYgYSBwZWVsZWQKLQkJICogb2ZmLCBvciBjb25uZWN0ZWQgb25l
IGRvZXMgdGhpcy4uIGl0cyBhbiBlcnJvci4KLQkJICovCi0JCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRUlOVkFMKTsKLQkJKmVycm9yID0gRUlOVkFMOwotCQlyZXR1cm4gKE5VTEwpOwotCX0K
LQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0J
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSkgewotCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19DT05ORUNURUQpIHx8Ci0JCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQpKSB7Ci0JCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwot
CQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywgIkFs
bG9jYXRlIGFuIGFzc29jaWF0aW9uIGZvciBwZWVyOiIpOwotI2lmZGVmIFNDVFBfREVCVUcKLQlp
ZiAoZmlyc3RhZGRyKSB7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjMsIGZpcnN0YWRk
cik7Ci0JCXN3aXRjaCAoZmlyc3RhZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNh
c2UgQUZfSU5FVDoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IzLCAiUG9ydDolZFxuIiwKLQkJ
CSAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmaXJzdGFkZHIpLT5zaW5fcG9y
dCkpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2Ogot
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjMsICJQb3J0OiVkXG4iLAotCQkJICAgICAgICBudG9o
cygoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilmaXJzdGFkZHIpLT5zaW42X3BvcnQpKTsKLQkJCWJy
ZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46
Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywgIlBvcnQ6JWRcbiIsCi0JCQkgICAgICAgIG50
b2hzKCgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilmaXJzdGFkZHIpLT5zY29ubl9wb3J0KSk7Ci0J
CQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2Ugewot
CQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywiTm9uZVxuIik7Ci0JfQotI2VuZGlmCQkJCS8qIFND
VFBfREVCVUcgKi8KLQlzd2l0Y2ggKGZpcnN0YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCXNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmaXJzdGFkZHI7Ci0JCWlmICgobnRvaHMoc2luLT5z
aW5fcG9ydCkgPT0gMCkgfHwKLQkJICAgIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJf
QU5ZKSB8fAotCQkgICAgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1Qp
IHx8Ci0JCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLT5zaW5fYWRkci5zX2FkZHIpKSkgewot
CQkJLyogSW52YWxpZCBhZGRyZXNzICovCi0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQly
cG9ydCA9IHNpbi0+c2luX3BvcnQ7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZmlyc3RhZGRyOwotCQlpZiAoKG50b2hzKHNp
bjYtPnNpbjZfcG9ydCkgPT0gMCkgfHwKLQkJICAgIElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZz
aW42LT5zaW42X2FkZHIpIHx8Ci0JCSAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNpbjYtPnNp
bjZfYWRkcikpIHsKLQkJCS8qIEludmFsaWQgYWRkcmVzcyAqLwotCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybiAoTlVM
TCk7Ci0JCX0KLQkJcnBvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCWJyZWFrOwotCX0KLSNlbmRp
ZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JewotCQlzdHJ1
Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nv
bm4gKilmaXJzdGFkZHI7Ci0JCWlmICgobnRvaHMoc2Nvbm4tPnNjb25uX3BvcnQpID09IDApIHx8
Ci0JCSAgICAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gTlVMTCkpIHsKLQkJCS8qIEludmFsaWQgYWRk
cmVzcyAqLwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCSplcnJv
ciA9IEVJTlZBTDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJcnBvcnQgPSBzY29ubi0+c2Nv
bm5fcG9ydDsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogbm90IHN1cHBv
cnRlZCBmYW1pbHkgdHlwZSAqLwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7
Ci0JCSplcnJvciA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5E
KSB7Ci0JCS8qCi0JCSAqIElmIHlvdSBoYXZlIG5vdCBwZXJmb3JtZWQgYSBiaW5kLCB0aGVuIHdl
IG5lZWQgdG8gZG8gdGhlCi0JCSAqIGVwaGVtZXJhbCBiaW5kIGZvciB5b3UuCi0JCSAqLwotCQlp
ZiAoKGVyciA9IHNjdHBfaW5wY2JfYmluZChpbnAtPnNjdHBfc29ja2V0LAotCQkgICAgKHN0cnVj
dCBzb2NrYWRkciAqKU5VTEwsCi0JCSAgICAoc3RydWN0IHNjdHBfaWZhICopTlVMTCwKLSNpZm5k
ZWYgX19QYW5kYV9fCi0JCQkJCSAgIHAKLSNlbHNlCi0JCQkJCSAgIChzdHJ1Y3QgcHJvYyAqKU5V
TEwKLSNlbmRpZgotCQkgICAgKSkpIHsKLQkJCS8qIGJpbmQgZXJyb3IsIHByb2JhYmx5IHBlcm0g
Ki8KLQkJCSplcnJvciA9IGVycjsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQl9Ci0Jc3RjYiA9
IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0cnVjdCBzY3Rw
X3RjYik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkvKiBvdXQgb2YgbWVtb3J5PyAqLwotCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
Tk9NRU0pOwotCQkqZXJyb3IgPSBFTk9NRU07Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCVNDVFBf
SU5DUl9BU09DX0NPVU5UKCk7Ci0KLQltZW1zZXQoc3RjYiwgMCwgc2l6ZW9mKCpzdGNiKSk7Ci0J
YXNvYyA9ICZzdGNiLT5hc29jOwotCi0JYXNvYy0+YXNzb2NfaWQgPSBzY3RwX2Fsb2NfYV9hc3Nv
Y19pZChpbnAsIHN0Y2IpOwotCVNDVFBfVENCX0xPQ0tfSU5JVChzdGNiKTsKLQlTQ1RQX1RDQl9T
RU5EX0xPQ0tfSU5JVChzdGNiKTsKLQlzdGNiLT5ycG9ydCA9IHJwb3J0OwotCS8qIHNldHVwIGJh
Y2sgcG9pbnRlcidzICovCi0Jc3RjYi0+c2N0cF9lcCA9IGlucDsKLQlzdGNiLT5zY3RwX3NvY2tl
dCA9IGlucC0+c2N0cF9zb2NrZXQ7Ci0JaWYgKChlcnIgPSBzY3RwX2luaXRfYXNvYyhpbnAsIHN0
Y2IsIG92ZXJyaWRlX3RhZywgdnJmX2lkLCBvX3N0cmVhbXMpKSkgewotCQkvKiBmYWlsZWQgKi8K
LQkJU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2IpOwotCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVT
VFJPWShzdGNiKTsKLQkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKLQkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOwotCQlT
Q1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotCQkqZXJyb3IgPSBlcnI7Ci0JCXJldHVybiAoTlVMTCk7
Ci0JfQotCS8qIGFuZCB0aGUgcG9ydCAqLwotCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiAoU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKLQkJLyogaW5w
Y2IgZnJlZWQgd2hpbGUgYWxsb2MgZ29pbmcgb24gKi8KLQkJU0NUUF9UQ0JfTE9DS19ERVNUUk9Z
KHN0Y2IpOwotCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShzdGNiKTsKLQkJTElTVF9SRU1P
VkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0J
CVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOwotCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0KLQkvKiBub3cgdGhhdCBteV92dGFnIGlzIHNldCwgYWRkIGl0IHRv
IHRoZSBoYXNoICovCi0JaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQ
X1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29j
bWFyaykpXTsKLQkvKiBwdXQgaXQgaW4gdGhlIGJ1Y2tldCBpbiB0aGUgdnRhZyBoYXNoIG9mIGFz
c29jJ3MgZm9yIHRoZSBzeXN0ZW0gKi8KLQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNj
dHBfYXNvY3MpOwotCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCi0JaWYgKChlcnIgPSBzY3Rw
X2FkZF9yZW1vdGVfYWRkcihzdGNiLCBmaXJzdGFkZHIsIE5VTEwsIHBvcnQsIFNDVFBfRE9fU0VU
U0NPUEUsIFNDVFBfQUxMT0NfQVNPQykpKSB7Ci0JCS8qIGZhaWx1cmUuLiBtZW1vcnkgZXJyb3I/
ICovCi0JCWlmIChhc29jLT5zdHJtb3V0KSB7Ci0JCQlTQ1RQX0ZSRUUoYXNvYy0+c3RybW91dCwg
U0NUUF9NX1NUUk1PKTsKLQkJCWFzb2MtPnN0cm1vdXQgPSBOVUxMOwotCQl9Ci0JCWlmIChhc29j
LT5tYXBwaW5nX2FycmF5KSB7Ci0JCQlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NU
UF9NX01BUCk7Ci0JCQlhc29jLT5tYXBwaW5nX2FycmF5ID0gTlVMTDsKLQkJfQotCQlpZiAoYXNv
Yy0+bnJfbWFwcGluZ19hcnJheSkgewotCQkJU0NUUF9GUkVFKGFzb2MtPm5yX21hcHBpbmdfYXJy
YXksIFNDVFBfTV9NQVApOwotCQkJYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9IE5VTEw7Ci0JCX0K
LQkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlT
Q1RQX1RDQl9MT0NLX0RFU1RST1koc3RjYik7Ci0JCVNDVFBfVENCX1NFTkRfTE9DS19ERVNUUk9Z
KHN0Y2IpOwotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmFzb2NpZGhhc2gpOwotCQlTQ1RQ
X1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSwgc3RjYik7Ci0JCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7Ci0JCSplcnJvciA9IEVOT0JVRlM7Ci0JCXJl
dHVybiAoTlVMTCk7Ci0JfQotCS8qIEluaXQgYWxsIHRoZSB0aW1lcnMgKi8KLQlTQ1RQX09TX1RJ
TUVSX0lOSVQoJmFzb2MtPmRhY2tfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgm
YXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNvYy0+
YXNjb25mX3RpbWVyLnRpbWVyKTsKLQlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPnNodXRfZ3Vh
cmRfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNvYy0+YXV0b2Nsb3NlX3Rp
bWVyLnRpbWVyKTsKLQlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmRlbGF5ZWRfZXZlbnRfdGlt
ZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNvYy0+ZGVsZXRlX3ByaW1fdGltZXIu
dGltZXIpOwotCi0JTElTVF9JTlNFUlRfSEVBRCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc3RjYiwg
c2N0cF90Y2JsaXN0KTsKLQkvKiBub3cgZmlsZSB0aGUgcG9ydCB1bmRlciB0aGUgaGFzaCBhcyB3
ZWxsICovCi0JaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwpIHsKLQkJaGVhZCA9ICZpbnAt
PnNjdHBfdGNiaGFzaFtTQ1RQX1BDQkhBU0hfQUxMQUREUihzdGNiLT5ycG9ydCwKLQkJICAgIGlu
cC0+c2N0cF9oYXNobWFyayldOwotCQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNjdHBf
dGNiaGFzaCk7Ci0JfQotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlTQ1RQREJHKFNDVFBfREVC
VUdfUENCMSwgIkFzc29jaWF0aW9uICVwIG5vdyBhbGxvY2F0ZWRcbiIsICh2b2lkICopc3RjYik7
Ci0JcmV0dXJuIChzdGNiKTsKLX0KLQotCi12b2lkCi1zY3RwX3JlbW92ZV9uZXQoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2M7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JYXNvYy0+bnVtbmV0cy0t
OwotCVRBSUxRX1JFTU9WRSgmYXNvYy0+bmV0cywgbmV0LCBzY3RwX25leHQpOwotCWlmIChuZXQg
PT0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbikgewotCQkvKiBSZXNldCBwcmltYXJ5ICovCi0J
CXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7Ci0KLQkJbG5ldCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5u
ZXRzKTsKLQkJLyogTW9iaWxpdHkgYWRhcHRhdGlvbgotCQkgICBJZGVhbGx5LCBpZiBkZWxldGVk
IGRlc3RpbmF0aW9uIGlzIHRoZSBwcmltYXJ5LCBpdCBiZWNvbWVzCi0JCSAgIGEgZmFzdCByZXRy
YW5zbWlzc2lvbiB0cmlnZ2VyIGJ5IHRoZSBzdWJzZXF1ZW50IFNFVCBQUklNQVJZLgotCQkgICAo
YnkgbWljY2hpZSkKLQkJICovCi0JCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3Rj
Yi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklM
SVRZX0JBU0UpIHx8Ci0JCSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0
cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZB
U1RIQU5ET0ZGKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJyZW1vdmVfbmV0
OiBwcmltYXJ5IGRzdCBpcyBkZWxldGluZ1xuIik7Ci0JCQlpZiAoYXNvYy0+ZGVsZXRlZF9wcmlt
YXJ5ICE9IE5VTEwpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInJlbW92ZV9u
ZXQ6IGRlbGV0ZWQgcHJpbWFyeSBtYXkgYmUgYWxyZWFkeSBzdG9yZWRcbiIpOwotCQkJCWdvdG8g
b3V0OwotCQkJfQotCQkJYXNvYy0+ZGVsZXRlZF9wcmltYXJ5ID0gbmV0OwotCQkJYXRvbWljX2Fk
ZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJCW1lbXNldCgmbmV0LT5sYXN0c2EsIDAsIHNp
emVvZihuZXQtPmxhc3RzYSkpOwotCQkJbWVtc2V0KCZuZXQtPmxhc3RzdiwgMCwgc2l6ZW9mKG5l
dC0+bGFzdHN2KSk7Ci0JCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwK
LQkJCQkJCSBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQsCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBOVUxMKTsKLQkJfQotb3V0OgotCQkvKiBUcnkgdG8gZmluZCBhIGNvbmZpcm1lZCBwcmltYXJ5
ICovCi0JCWFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24gPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25l
dChzdGNiLCBsbmV0LCAwKTsKLQl9Ci0JaWYgKG5ldCA9PSBhc29jLT5sYXN0X2RhdGFfY2h1bmtf
ZnJvbSkgewotCQkvKiBSZXNldCBwcmltYXJ5ICovCi0JCWFzb2MtPmxhc3RfZGF0YV9jaHVua19m
cm9tID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMpOwotCX0KLQlpZiAobmV0ID09IGFzb2MtPmxh
c3RfY29udHJvbF9jaHVua19mcm9tKSB7Ci0JCS8qIENsZWFyIG5ldCAqLwotCQlhc29jLT5sYXN0
X2NvbnRyb2xfY2h1bmtfZnJvbSA9IE5VTEw7Ci0JfQotCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5h
bHRlcm5hdGUpIHsKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
KTsKLQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOwotCX0KLQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIobmV0KTsKLX0KLQotLyoKLSAqIHJlbW92ZSBhIHJlbW90ZSBlbmRwb2ludCBhZGRyZXNz
IGZyb20gYW4gYXNzb2NpYXRpb24sIGl0IHdpbGwgZmFpbCBpZiB0aGUKLSAqIGFkZHJlc3MgZG9l
cyBub3QgZXhpc3QuCi0gKi8KLWludAotc2N0cF9kZWxfcmVtb3RlX2FkZHIoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnJlbWFkZHIpCi17Ci0JLyoKLQkgKiBIZXJlIHdl
IG5lZWQgdG8gcmVtb3ZlIGEgcmVtb3RlIGFkZHJlc3MuIFRoaXMgaXMgcXVpdGUgc2ltcGxlLCB3
ZQotCSAqIGZpcnN0IGZpbmQgaXQgaW4gdGhlIGxpc3Qgb2YgYWRkcmVzcyBmb3IgdGhlIGFzc29j
aWF0aW9uCi0JICogKHRhc29jLT5hc29jLm5ldHMpIGFuZCB0aGVuIGlmIGl0IGlzIHRoZXJlLCB3
ZSBkbyBhIExJU1RfUkVNT1ZFCi0JICogb24gdGhhdCBpdGVtLiBOb3RlIHdlIGRvIG5vdCBhbGxv
dyBpdCB0byBiZSByZW1vdmVkIGlmIHRoZXJlIGFyZQotCSAqIG5vIG90aGVyIGFkZHJlc3Nlcy4K
LQkgKi8KLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsICpubmV0OwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCi0JLyogbG9jYXRlIHRoZSBh
ZGRyZXNzICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4
dCwgbm5ldCkgewotCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSAhPSByZW1hZGRy
LT5zYV9mYW1pbHkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChzY3RwX2NtcGFkZHIoKHN0
cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsCi0JCSAgICByZW1hZGRyKSkgewotCQkJ
Lyogd2UgZm91bmQgdGhlIGd1eSAqLwotCQkJaWYgKGFzb2MtPm51bW5ldHMgPCAyKSB7Ci0JCQkJ
LyogTXVzdCBoYXZlIGF0IExFQVNUIHR3byByZW1vdGUgYWRkcmVzc2VzICovCi0JCQkJcmV0dXJu
ICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfcmVtb3ZlX25ldChzdGNiLCBuZXQpOwotCQkJ
CXJldHVybiAoMCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogbm90IGZvdW5kLiAqLwotCXJldHVybiAo
LTIpOwotfQotCi12b2lkCi1zY3RwX2RlbGV0ZV9mcm9tX3RpbWV3YWl0KHVpbnQzMl90IHRhZywg
dWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0KQotewotCXN0cnVjdCBzY3RwdnRhZ2hlYWQg
KmNoYWluOwotCXN0cnVjdCBzY3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9jazsKLQlpbnQgZm91bmQg
PSAwOwotCWludCBpOwotCi0JY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2FpdClb
KHRhZyAlIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKLQlMSVNUX0ZPUkVBQ0godHdhaXRf
YmxvY2ssIGNoYWluLCBzY3RwX254dF90YWdibG9jaykgewotCQlmb3IgKGkgPSAwOyBpIDwgU0NU
UF9OVU1CRVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7Ci0JCSAgaWYgKCh0d2FpdF9ibG9jay0+dnRh
Z19ibG9ja1tpXS52X3RhZyA9PSB0YWcpICYmCi0JCSAgICAgICh0d2FpdF9ibG9jay0+dnRhZ19i
bG9ja1tpXS5scG9ydCA9PSBscG9ydCkgJiYKLQkJICAgICAgKHR3YWl0X2Jsb2NrLT52dGFnX2Js
b2NrW2ldLnJwb3J0ID09IHJwb3J0KSkgewotCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnR2X3NlY19hdF9leHBpcmUgPSAwOwotCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZf
dGFnID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9IDA7Ci0JCQkJ
dHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSAwOwotCQkJCWZvdW5kID0gMTsKLQkJ
CQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZm91bmQpCi0JCQlicmVhazsKLQl9Ci19Ci0KLWlu
dAotc2N0cF9pc19pbl90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQxNl90IGxwb3J0LCB1aW50
MTZfdCBycG9ydCkKLXsKLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKLQlzdHJ1Y3Qgc2N0
cF90YWdibG9jayAqdHdhaXRfYmxvY2s7Ci0JaW50IGZvdW5kID0gMDsKLQlpbnQgaTsKLQotCVND
VFBfSU5QX0lORk9fV0xPQ0soKTsKLQljaGFpbiA9ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3
YWl0KVsodGFnICUgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRSldOwotCUxJU1RfRk9SRUFDSCh0
d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7Ci0JCWZvciAoaSA9IDA7IGkg
PCBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLOyBpKyspIHsKLQkJCWlmICgodHdhaXRfYmxvY2st
PnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gdGFnKSAgJiYKLQkJCSAgICAodHdhaXRfYmxvY2stPnZ0
YWdfYmxvY2tbaV0ubHBvcnQgPT0gbHBvcnQpICAmJgotCQkJICAgICh0d2FpdF9ibG9jay0+dnRh
Z19ibG9ja1tpXS5ycG9ydCA9PSBycG9ydCkpIHsKLQkJCQlmb3VuZCA9IDE7Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCX0KLQkJaWYgKGZvdW5kKQotCQkJYnJlYWs7Ci0JfQotCVNDVFBfSU5QX0lORk9f
V1VOTE9DSygpOwotCXJldHVybiAoZm91bmQpOwotfQotCi0KLXZvaWQKLXNjdHBfYWRkX3Z0YWdf
dG9fdGltZXdhaXQodWludDMyX3QgdGFnLCB1aW50MzJfdCB0aW1lLCB1aW50MTZfdCBscG9ydCwg
dWludDE2X3QgcnBvcnQpCi17Ci0Jc3RydWN0IHNjdHB2dGFnaGVhZCAqY2hhaW47Ci0Jc3RydWN0
IHNjdHBfdGFnYmxvY2sgKnR3YWl0X2Jsb2NrOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQlpbnQg
c2V0LCBpOwotCi0JaWYgKHRpbWUgPT0gMCkgewotCQkvKiBJdHMgZGlzYWJsZWQgKi8KLQkJcmV0
dXJuOwotCX0KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQljaGFpbiA9ICZT
Q1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVsodGFnICUgU0NUUF9TVEFDS19WVEFHX0hBU0hf
U0laRSldOwotCXNldCA9IDA7Ci0JTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFpbiwgc2N0
cF9ueHRfdGFnYmxvY2spIHsKLQkJLyogQmxvY2socykgcHJlc2VudCwgbGV0cyBmaW5kIHNwYWNl
LCBhbmQgZXhwaXJlIG9uIHRoZSBmbHkgKi8KLQkJZm9yIChpID0gMDsgaSA8IFNDVFBfTlVNQkVS
X0lOX1ZUQUdfQkxPQ0s7IGkrKykgewotCQkJaWYgKCh0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tp
XS52X3RhZyA9PSAwKSAmJgotCQkJICAgICFzZXQpIHsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19i
bG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0KLQkJCQkJbm93LnR2X3NlYyArIHRpbWU7Ci0JCQkJ
dHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPSB0YWc7Ci0JCQkJdHdhaXRfYmxvY2st
PnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSBscG9ydDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1tpXS5ycG9ydCA9IHJwb3J0OwotCQkJCXNldCA9IDE7Ci0JCQl9IGVsc2UgaWYgKCh0d2FpdF9i
bG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZykgJiYKLQkJCQkgICAgKChsb25nKXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9leHBpcmUgPCBub3cudHZfc2VjKSkgewotCQkJCS8q
IEF1ZGl0IGV4cGlyZXMgdGhpcyBndXkgKi8KLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tp
XS50dl9zZWNfYXRfZXhwaXJlID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52
X3RhZyA9IDA7Ci0JCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOwotCQkJ
CXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gMDsKLQkJCQlpZiAoc2V0ID09IDAp
IHsKLQkJCQkJLyogUmV1c2UgaXQgZm9yIG15IG5ldyB0YWcgKi8KLQkJCQkJdHdhaXRfYmxvY2st
PnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0X2V4cGlyZSA9IG5vdy50dl9zZWMgKyB0aW1lOwotCQkJ
CQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IHRhZzsKLQkJCQkJdHdhaXRfYmxv
Y2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSBscG9ydDsKLQkJCQkJdHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0ucnBvcnQgPSBycG9ydDsKLQkJCQkJc2V0ID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0K
LQkJaWYgKHNldCkgewotCQkJLyoKLQkJCSAqIFdlIG9ubHkgZG8gdXAgdG8gdGhlIGJsb2NrIHdo
ZXJlIHdlIGNhbgotCQkJICogcGxhY2Ugb3VyIHRhZyBmb3IgYXVkaXRzCi0JCQkgKi8KLQkJCWJy
ZWFrOwotCQl9Ci0JfQotCS8qIE5lZWQgdG8gYWRkIGEgbmV3IGJsb2NrIHRvIGNoYWluICovCi0J
aWYgKCFzZXQpIHsKLQkJU0NUUF9NQUxMT0ModHdhaXRfYmxvY2ssIHN0cnVjdCBzY3RwX3RhZ2Js
b2NrICosCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfdGFnYmxvY2spLCBTQ1RQX01fVElNVyk7
Ci0JCWlmICh0d2FpdF9ibG9jayA9PSBOVUxMKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJcGFu
aWMoIkNhbiBub3QgYWxsb2MgdGFnYmxvY2siKTsKLSNlbmRpZgotCQkJcmV0dXJuOwotCQl9Ci0J
CW1lbXNldCh0d2FpdF9ibG9jaywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3RhZ2Jsb2NrKSk7Ci0J
CUxJU1RfSU5TRVJUX0hFQUQoY2hhaW4sIHR3YWl0X2Jsb2NrLCBzY3RwX254dF90YWdibG9jayk7
Ci0JCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLnR2X3NlY19hdF9leHBpcmUgPSBub3cudHZf
c2VjICsgdGltZTsKLQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbMF0udl90YWcgPSB0YWc7Ci0J
CXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLmxwb3J0ID0gbHBvcnQ7Ci0JCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrWzBdLnJwb3J0ID0gcnBvcnQ7Ci0JfQotfQotCi12b2lkCi1zY3RwX2NsZWFu
X3VwX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3JlYWRoZWFkICpy
aCkKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOwotCXN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7Ci0KLQlUQUlMUV9GT1JFQUNIX1NB
RkUoY29udHJvbCwgcmgsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgewotCQlUQUlMUV9SRU1PVkUo
cmgsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKLQkJ
aWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
Y29udHJvbC0+d2hvRnJvbSk7Ci0JCQlpZiAoY29udHJvbC0+ZGF0YSkgewotCQkJCXNjdHBfbV9m
cmVlbShjb250cm9sLT5kYXRhKTsKLQkJCQljb250cm9sLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJ
fQotCQkvKiBSZWFzc2VtYmx5IGZyZWU/ICovCi0JCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZj
b250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQlUQUlMUV9SRU1PVkUoJmNvbnRy
b2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJc2N0
cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJCWlm
IChjaGstPmhvbGRzX2tleV9yZWYpCi0JCQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIGNo
ay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOwotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KGNoay0+d2hvVG8pOwotCQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
Y2h1bmspLCBjaGspOwotCQkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOwotCQkJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KLQkJfQotCQkvKgotCQkgKiBXZSBkb24ndCBmcmVlIHRoZSBhZGRyZXNz
IGhlcmUKLQkJICogc2luY2UgYWxsIHRoZSBuZXQncyB3ZXJlIGZyZWVkCi0JCSAqIGFib3ZlLgot
CQkgKi8KLQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0JCQlzY3RwX2ZyZWVfYV9y
ZWFkcShzdGNiLCBjb250cm9sKTsKLQkJfQotCX0KLX0KLQotI2lmZGVmIF9fUGFuZGFfXwotdm9p
ZCBwYW5kYV93YWtldXBfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvKTsKLSNlbmRpZgotCi0vKi0K
LSAqIEZyZWUgdGhlIGFzc29jaWF0aW9uIGFmdGVyIHVuLWhhc2hpbmcgdGhlIHJlbW90ZSBwb3J0
LiBUaGlzCi0gKiBmdW5jdGlvbiBBTFdBWVMgcmV0dXJucyBob2xkaW5nIE5PIExPQ0sgb24gdGhl
IHN0Y2IuIEl0IERPRVMKLSAqIGV4cGVjdCB0aGF0IHRoZSBpbnB1dCB0byB0aGlzIGZ1bmN0aW9u
IElTIGEgbG9ja2VkIFRDQi4KLSAqIEl0IHdpbGwgcmV0dXJuIDAsIGlmIGl0IGRpZCBOT1QgZGVz
dHJveSB0aGUgYXNzb2NpYXRpb24gKGluc3RlYWQKLSAqIGl0IHVubG9ja3MgaXQuIEl0IHdpbGwg
cmV0dXJuIE5PTi16ZXJvIGlmIGl0IGVpdGhlciBkZXN0cm95ZWQgdGhlCi0gKiBhc3NvY2lhdGlv
biBPUiB0aGUgYXNzb2NpYXRpb24gaXMgYWxyZWFkeSBkZXN0cm95ZWQuCi0gKi8KLWludAotc2N0
cF9mcmVlX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgaW50IGZyb21faW5wY2JmcmVlLCBpbnQgZnJvbV9sb2NhdGlvbikKLXsKLQlpbnQgaTsKLQlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpu
bmV0OwotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkciwgKm5hZGRyOwotCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoaywgKm5jaGs7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKmFwYXJhbSwg
Km5hcGFyYW07Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FjayAqYWFjaywgKm5hYWNrOwotCXN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICpzdHJyc3QsICpuc3RycnN0OwotCXN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkICpzcSwgKm5zcTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVu
ZGluZyAqc3AsICpuc3A7Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2hhcmVkX2tleSwgKm5zaGFyZWRf
a2V5OwotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JLyogZmlyc3QsIGxldHMgcHVyZ2UgdGhlIGVu
dHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2N0
cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLSNlbmRpZgotCi0jaWZkZWYgU0NUUF9M
T0dfQ0xPU0lORwotCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBzdGNiLCA2KTsKLSNlbmRpZgotCWlm
IChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0JCXNj
dHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCA3KTsKLSNlbmRpZgotCQkvKiB0aGVyZSBpcyBubyBh
c29jLCByZWFsbHkgVFNOSCA6LTAgKi8KLQkJcmV0dXJuICgxKTsKLQl9Ci0JaWYgKHN0Y2ItPmFz
b2MuYWx0ZXJuYXRlKSB7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVy
bmF0ZSk7Ci0JCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKLQl9Ci0jaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAvKiBURU1QOiBtb3ZlZCB0byBiZWxvdyAqLwotICAgICAgICAvKiBURU1QIENP
REUgKi8KLQlpZiAoc3RjYi0+ZnJlZWRfZnJvbV93aGVyZSA9PSAwKSB7Ci0JCS8qIE9ubHkgcmVj
b3JkIHRoZSBmaXJzdCBwbGFjZSBmcmVlIGhhcHBlbmVkIGZyb20gKi8KLQkJc3RjYi0+ZnJlZWRf
ZnJvbV93aGVyZSA9IGZyb21fbG9jYXRpb247Ci0JfQotICAgICAgICAvKiBURU1QIENPREUgKi8K
LSNlbmRpZgotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8Ci0JICAgIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpCi0JCS8qIG5vdGhpbmcgYXJvdW5kICovCi0J
CXNvID0gTlVMTDsKLQllbHNlCi0JCXNvID0gaW5wLT5zY3RwX3NvY2tldDsKLQotCS8qCi0JICog
V2UgdXNlZCB0aW1lciBiYXNlZCBmcmVlaW5nIGlmIGEgcmVhZGVyIG9yIHdyaXRlciBpcyBpbiB0
aGUgd2F5LgotCSAqIFNvIHdlIGZpcnN0IGNoZWNrIGlmIHdlIGFyZSBhY3R1YWxseSBiZWluZyBj
YWxsZWQgZnJvbSBhIHRpbWVyLAotCSAqIGlmIHNvIHdlIGFib3J0IGVhcmx5IGlmIGEgcmVhZGVy
IG9yIHdyaXRlciBpcyBzdGlsbCBpbiB0aGUgd2F5LgotCSAqLwotCWlmICgoc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpICYmCi0JICAgIChmcm9tX2lucGNi
ZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSkgewotCQkvKgotCQkgKiBpcyBpdCB0aGUgdGltZXIg
ZHJpdmluZyB1cz8gaWYgc28gYXJlIHRoZSByZWFkZXIvd3JpdGVycwotCQkgKiBnb25lPwotCQkg
Ki8KLQkJaWYgKHN0Y2ItPmFzb2MucmVmY250KSB7Ci0JCQkvKiBub3BlLCByZWFkZXIgb3Igd3Jp
dGVyIGluIHRoZSB3YXkgKi8KLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FT
T0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwpOwotCQkJLyogbm8gYXNvYyBkZXN0cm95ZWQgKi8KLQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0JCQlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgc3RjYiwgOCk7Ci0jZW5kaWYKLQkJCXJldHVybiAoMCk7Ci0JCX0K
LQl9Ci0JLyogbm93IGNsZWFuIHVwIGFueSBvdGhlciB0aW1lcnMgKi8KLQkodm9pZClTQ1RQX09T
X1RJTUVSX1NUT1AoJmFzb2MtPmRhY2tfdGltZXIudGltZXIpOwotCWFzb2MtPmRhY2tfdGltZXIu
c2VsZiA9IE5VTEw7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5zdHJyZXNldF90
aW1lci50aW1lcik7Ci0JLyotCi0JICogRm9yIHN0cmVhbSByZXNldCB3ZSBkb24ndCBibGFzdCB0
aGlzIHVubGVzcwotCSAqIGl0IGlzIGEgc3RyLXJlc2V0IHRpbWVyLCBpdCBtaWdodCBiZSB0aGUK
LQkgKiBmcmVlLWFzb2MgdGltZXIgd2hpY2ggd2UgRE9OJ1Qgd2FudCB0bwotCSAqIGRpc3R1cmIu
Ci0JICovCi0JaWYgKGFzb2MtPnN0cnJlc2V0X3RpbWVyLnR5cGUgPT0gU0NUUF9USU1FUl9UWVBF
X1NUUlJFU0VUKQotCQlhc29jLT5zdHJyZXNldF90aW1lci5zZWxmID0gTlVMTDsKLQkodm9pZClT
Q1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmFzY29uZl90aW1lci50aW1lcik7Ci0JYXNvYy0+YXNj
b25mX3RpbWVyLnNlbGYgPSBOVUxMOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+
YXV0b2Nsb3NlX3RpbWVyLnRpbWVyKTsKLQlhc29jLT5hdXRvY2xvc2VfdGltZXIuc2VsZiA9IE5V
TEw7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5zaHV0X2d1YXJkX3RpbWVyLnRp
bWVyKTsKLQlhc29jLT5zaHV0X2d1YXJkX3RpbWVyLnNlbGYgPSBOVUxMOwotCSh2b2lkKVNDVFBf
T1NfVElNRVJfU1RPUCgmYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50aW1lcik7Ci0JYXNvYy0+
ZGVsYXllZF9ldmVudF90aW1lci5zZWxmID0gTlVMTDsKLQkvKiBNb2JpbGl0eSBhZGFwdGF0aW9u
ICovCi0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kZWxldGVfcHJpbV90aW1lci50
aW1lcik7Ci0JYXNvYy0+ZGVsZXRlX3ByaW1fdGltZXIuc2VsZiA9IE5VTEw7Ci0JVEFJTFFfRk9S
RUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJKHZvaWQpU0NUUF9PU19USU1F
Ul9TVE9QKCZuZXQtPnJ4dF90aW1lci50aW1lcik7Ci0JCW5ldC0+cnh0X3RpbWVyLnNlbGYgPSBO
VUxMOwotCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+cG10dV90aW1lci50aW1lcik7
Ci0JCW5ldC0+cG10dV90aW1lci5zZWxmID0gTlVMTDsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9T
VE9QKCZuZXQtPmhiX3RpbWVyLnRpbWVyKTsKLQkJbmV0LT5oYl90aW1lci5zZWxmID0gTlVMTDsK
LQl9Ci0JLyogTm93IHRoZSByZWFkIHF1ZXVlIG5lZWRzIHRvIGJlIGNsZWFuZWQgdXAgKG9ubHkg
b25jZSkgKi8KLQlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JF
X0ZSRUVEKSA9PSAwKSB7Ci0JCXN0Y2ItPmFzb2Muc3RhdGUgfD0gU0NUUF9TVEFURV9BQk9VVF9U
T19CRV9GUkVFRDsKLQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0JCVRBSUxRX0ZPUkVBQ0go
c3EsICZpbnAtPnJlYWRfcXVldWUsIG5leHQpIHsKLQkJCWlmIChzcS0+c3RjYiA9PSBzdGNiKSB7
Ci0JCQkJc3EtPmRvX25vdF9yZWZfc3RjYiA9IDE7Ci0JCQkJc3EtPnNpbmZvX2N1bXRzbiA9IHN0
Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c247Ci0JCQkJLyogSWYgdGhlcmUgaXMgbm8gZW5kLCB0aGVy
ZSBuZXZlcgotCQkJCSAqIHdpbGwgYmUgbm93LgotCQkJCSAqLwotCQkJCWlmIChzcS0+ZW5kX2Fk
ZGVkID09IDApIHsKLQkJCQkJLyogSGVsZCBmb3IgUEQtQVBJIGNsZWFyIHRoYXQuICovCi0JCQkJ
CXNxLT5wZGFwaV9hYm9ydGVkID0gMTsKLQkJCQkJc3EtPmhlbGRfbGVuZ3RoID0gMDsKLQkJCQkJ
aWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUERB
UElFVk5UKSAmJiAoc28gIT0gTlVMTCkpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBOZWVkIHRvIGFk
ZCBhIFBELUFQSSBhYm9ydGVkIGluZGljYXRpb24uCi0JCQkJCQkgKiBTZXR0aW5nIHRoZSBjb250
cm9sX3BkYXBpIGFzc3VyZXMgdGhhdCBpdCB3aWxsCi0JCQkJCQkgKiBiZSBhZGRlZCByaWdodCBh
ZnRlciB0aGlzIG1zZy4KLQkJCQkJCSAqLwotCQkJCQkJdWludDMyX3Qgc3Ryc2VxOwotCQkJCQkJ
c3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3E7Ci0JCQkJCQlzdHJzZXEgPSAoc3EtPnNpbmZv
X3N0cmVhbSA8PCAxNikgfCAoc3EtPm1pZCAmIDB4MDAwMGZmZmYpOwotCQkJCQkJc2N0cF91bHBf
bm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTiwKLQkJCQkJCSAg
ICAgICAgICAgICAgICBzdGNiLAotCQkJCQkJICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9E
RUxJVkVSWV9BQk9SVEVELAotCQkJCQkJICAgICAgICAgICAgICAgICh2b2lkICopJnN0cnNlcSwK
LQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQlzdGNiLT5hc29j
LmNvbnRyb2xfcGRhcGkgPSBOVUxMOwotCQkJCQl9Ci0JCQkJfQotCQkJCS8qIEFkZCBhbiBlbmQg
dG8gd2FrZSB0aGVtICovCi0JCQkJc3EtPmVuZF9hZGRlZCA9IDE7Ci0JCQl9Ci0JCX0KLQkJU0NU
UF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJaWYgKHN0Y2ItPmJsb2NrX2VudHJ5KSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
Q09OTlJFU0VUKTsKLQkJCXN0Y2ItPmJsb2NrX2VudHJ5LT5lcnJvciA9IEVDT05OUkVTRVQ7Ci0J
CQlzdGNiLT5ibG9ja19lbnRyeSA9IE5VTEw7Ci0JCX0KLQl9Ci0JaWYgKChzdGNiLT5hc29jLnJl
ZmNudCkgfHwgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRSkp
IHsKLQkJLyogU29tZW9uZSBob2xkcyBhIHJlZmVyZW5jZSBPUiB0aGUgc29ja2V0IGlzIHVuYWNj
ZXB0ZWQgeWV0LgotCQkqLwotCQlpZiAoKHN0Y2ItPmFzb2MucmVmY250KSAgfHwKLQkJICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpIHsKLQkJCXN0
Y2ItPmFzb2Muc3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwgTlVMTCk7Ci0J
CX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAotCQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkKLQkJCS8qIG5vdGhpbmcgYXJvdW5kICovCi0J
CQlzbyA9IE5VTEw7Ci0JCWlmIChzbykgewotCQkJLyogV2FrZSBhbnkgcmVhZGVyL3dyaXRlcnMg
Ki8KLQkJCXNjdHBfc29yd2FrZXVwKGlucCwgc28pOwotCQkJc2N0cF9zb3d3YWtldXAoaW5wLCBz
byk7Ci0JCX0KLQotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0cF9sb2dfY2xvc2luZyhp
bnAsIHN0Y2IsIDkpOwotI2VuZGlmCi0JCS8qIG5vIGFzb2MgZGVzdHJveWVkICovCi0JCXJldHVy
biAoMCk7Ci0JfQotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlu
cCwgc3RjYiwgMTApOwotI2VuZGlmCi0JLyogV2hlbiBJIHJlYWNoIGhlcmUsIG5vIG90aGVycyB3
YW50Ci0JICogdG8ga2lsbCB0aGUgYXNzb2MgeWV0Li4gYW5kIEkgb3duCi0JICogdGhlIGxvY2su
IE5vdyBpdHMgcG9zc2libGUgYW4gYWJvcnQKLQkgKiBjb21lcyBpbiB3aGVuIEkgZG8gdGhlIGxv
Y2sgZXhjaGFuZ2UKLQkgKiBiZWxvdyB0byBncmFiIGFsbCB0aGUgbG9ja3MgdG8gZG8KLQkgKiB0
aGUgZmluYWwgdGFrZSBvdXQuIHRvIHByZXZlbnQgdGhpcwotCSAqIHdlIGluY3JlbWVudCB0aGUg
Y291bnQsIHdoaWNoIHdpbGwKLQkgKiBzdGFydCBhIHRpbWVyIGFuZCBibG93IG91dCBhYm92ZSB0
aHVzCi0JICogYXNzdXJpbmcgdXMgdGhhdCB3ZSBob2xkIGV4Y2x1c2l2ZQotCSAqIGtpbGxpbmcg
b2YgdGhlIGFzb2MuIE5vdGUgdGhhdAotCSAqIGFmdGVyIGdldHRpbmcgYmFjayB0aGUgVENCIGxv
Y2sKLQkgKiB3ZSB3aWxsIGdvIGFoZWFkIGFuZCBpbmNyZW1lbnQgdGhlCi0JICogY291bnRlciBi
YWNrIHVwIGFuZCBzdG9wIGFueSB0aW1lcgotCSAqIGEgcGFzc2luZyBzdHJhbmdlciBtYXkgaGF2
ZSBzdGFydGVkIDotUwotCSAqLwotCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9Q
Uk9DKSB7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0KLQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0JCVNDVFBfSU5Q
X1dMT0NLKGlucCk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JfQotCS8qIERvdWJsZSBjaGVj
ayB0aGUgR09ORSBmbGFnICovCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9HT05FKSkKLQkJLyogbm90aGluZyBhcm91bmQgKi8KLQkJc28gPSBOVUxMOwot
Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJLyoK
LQkJICogRm9yIFRDUCB0eXBlIHdlIG5lZWQgc3BlY2lhbCBoYW5kbGluZyB3aGVuIHdlIGFyZQot
CQkgKiBjb25uZWN0ZWQuIFdlIGFsc28gaW5jbHVkZSB0aGUgcGVlbCdlZCBvZmYgb25lcyB0by4K
LQkJICovCi0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQp
IHsKLQkJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotCQkJ
aW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dBU19DT05ORUNURUQ7Ci0JCQlpZiAo
c28pIHsKLQkJCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwotCQkJCWlmIChzby0+c29fcmN2
LnNiX2NjID09IDApIHsKLQkJCQkJc28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05ORUNUSU5HIHwK
LQkJCQkJCQkgIFNTX0lTRElTQ09OTkVDVElORyB8Ci0JCQkJCQkJICBTU19JU0NPTkZJUk1JTkcg
fAotCQkJCQkJCSAgU1NfSVNDT05ORUNURUQpOwotCQkJCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLQkJCQlzb2NhbnRyY3Ztb3JlKHNvKTsKLSNlbHNlCi0JCQkJc29jYW50cmN2bW9yZV9sb2Nr
ZWQoc28pOwotI2VuZGlmCi0JCQkJc29jYW50c2VuZG1vcmUoc28pOwotCQkJCXNjdHBfc293d2Fr
ZXVwKGlucCwgc28pOwotCQkJCXNjdHBfc29yd2FrZXVwKGlucCwgc28pOwotCQkJCVNDVFBfU09X
QUtFVVAoc28pOwotCQkJfQotCQl9Ci0JfQotCi0JLyogTWFrZSBpdCBpbnZhbGlkIHRvbywgdGhh
dCB3YXkgaWYgaXRzCi0JICogYWJvdXQgdG8gcnVuIGl0IHdpbGwgYWJvcnQgYW5kIHJldHVybi4K
LQkgKi8KLQkvKiByZS1pbmNyZW1lbnQgdGhlIGxvY2sgKi8KLQlpZiAoZnJvbV9pbnBjYmZyZWUg
PT0gU0NUUF9OT1JNQUxfUFJPQykgewotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIC0xKTsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MucmVmY250KSB7Ci0JCXN0Y2ItPmFzb2Muc3Rh
dGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQlzY3RwX3RpbWVyX3N0YXJ0KFND
VFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBzdGNiLCBOVUxMKTsKLQkJaWYgKGZyb21faW5w
Y2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKLQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygp
OwotCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQl9Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JYXNvYy0+c3RhdGUgPSAwOwotCWlmIChpbnAtPnNjdHBf
dGNiaGFzaCkgewotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmhhc2gpOwotCX0KLQlpZiAo
c3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgewotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3Rj
YmFzb2NpZGhhc2gpOwotCX0KLQkvKiBOb3cgbGV0cyByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdCBv
ZiBBTEwgYXNzb2NpYXRpb25zIGluIHRoZSBFUCAqLwotCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBf
dGNibGlzdCk7Ci0JaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKLQkJ
U0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCX0KLQkv
KiBwdWxsIGZyb20gdnRhZyBoYXNoICovCi0JTElTVF9SRU1PVkUoc3RjYiwgc2N0cF9hc29jcyk7
Ci0Jc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdChhc29jLT5teV92dGFnLCBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfdnRhZ190aW1lX3dhaXQpLAotCQkJCSAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5y
cG9ydCk7Ci0KLQkvKiBOb3cgcmVzdG9wIHRoZSB0aW1lcnMgdG8gYmUgc3VyZQotCSAqIHRoaXMg
aXMgcGFyYW5vaWEgYXQgaXMgZmluZXN0IQotCSAqLwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RP
UCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RP
UCgmYXNvYy0+ZGFja190aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZh
c29jLT5zdHJyZXNldF90aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZh
c29jLT5hc2NvbmZfdGltZXIudGltZXIpOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNv
Yy0+c2h1dF9ndWFyZF90aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZh
c29jLT5hdXRvY2xvc2VfdGltZXIudGltZXIpOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgm
YXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50aW1lcik7Ci0JVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZuZXQt
PnJ4dF90aW1lci50aW1lcik7Ci0JCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5wbXR1
X3RpbWVyLnRpbWVyKTsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZuZXQtPmhiX3RpbWVy
LnRpbWVyKTsKLQl9Ci0KLQlhc29jLT5zdHJyZXNldF90aW1lci50eXBlID0gU0NUUF9USU1FUl9U
WVBFX05PTkU7Ci0JLyoKLQkgKiBUaGUgY2h1bmsgbGlzdHMgYW5kIHN1Y2ggU0hPVUxEIGJlIGVt
cHR5IGJ1dCB3ZSBjaGVjayB0aGVtIGp1c3QKLQkgKiBpbiBjYXNlLgotCSAqLwotCS8qIGFueXRo
aW5nIG9uIHRoZSB3aGVlbCBuZWVkcyB0byBiZSByZW1vdmVkICovCi0JZm9yIChpID0gMDsgaSA8
IGFzb2MtPnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91
dHM7Ci0KLQkJb3V0cyA9ICZhc29jLT5zdHJtb3V0W2ldOwotCQkvKiBub3cgY2xlYW4gdXAgYW55
IGNodW5rcyBoZXJlICovCi0JCVRBSUxRX0ZPUkVBQ0hfU0FGRShzcCwgJm91dHMtPm91dHF1ZXVl
LCBuZXh0LCBuc3ApIHsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFzb2MtPnN0cmVhbV9xdWV1
ZV9jbnQsIDEpOwotCQkJVEFJTFFfUkVNT1ZFKCZvdXRzLT5vdXRxdWV1ZSwgc3AsIG5leHQpOwot
CQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0oc3Rj
YiwgYXNvYywgb3V0cywgc3AsIDApOwotCQkJc2N0cF9mcmVlX3NwYnVmc3BhY2Uoc3RjYiwgYXNv
Yywgc3ApOwotCQkJaWYgKHNwLT5kYXRhKSB7Ci0JCQkJaWYgKHNvKSB7Ci0JCQkJCS8qIFN0aWxs
IGFuIG9wZW4gc29ja2V0IC0gcmVwb3J0ICovCi0JCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9TUEVDSUFMX1NQX0ZBSUwsIHN0Y2IsCi0JCQkJCSAgICAgICAgICAgICAgICAwLCAodm9p
ZCAqKXNwLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJfQotCQkJCWlmIChzcC0+ZGF0YSkgewotCQkJ
CQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOwotCQkJCQlzcC0+ZGF0YSA9IE5VTEw7Ci0JCQkJCXNw
LT50YWlsX21idWYgPSBOVUxMOwotCQkJCQlzcC0+bGVuZ3RoID0gMDsKLQkJCQl9Ci0JCQl9Ci0J
CQlpZiAoc3AtPm5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcC0+bmV0KTsKLQkJ
CQlzcC0+bmV0ID0gTlVMTDsKLQkJCX0KLQkJCXNjdHBfZnJlZV9hX3N0cm1vcShzdGNiLCBzcCwg
U0NUUF9TT19MT0NLRUQpOwotCQl9Ci0JfQotCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0J
VEFJTFFfRk9SRUFDSF9TQUZFKHN0cnJzdCwgJmFzb2MtPnJlc2V0SGVhZCwgbmV4dF9yZXNwLCBu
c3RycnN0KSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+cmVzZXRIZWFkLCBzdHJyc3QsIG5leHRf
cmVzcCk7Ci0JCVNDVFBfRlJFRShzdHJyc3QsIFNDVFBfTV9TVFJFU0VUKTsKLQl9Ci0JVEFJTFFf
Rk9SRUFDSF9TQUZFKHNxLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4dCwgbnNxKSB7
Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgc3EsIG5leHQpOwot
CQlpZiAoc3EtPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShzcS0+ZGF0YSk7Ci0JCQlzcS0+ZGF0
YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNxLT53aG9Gcm9tKTsKLQkJ
c3EtPndob0Zyb20gPSBOVUxMOwotCQlzcS0+c3RjYiA9IE5VTEw7Ci0JCS8qIEZyZWUgdGhlIGN0
bCBlbnRyeSAqLwotCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBzcSk7Ci0JCS8qc2FfaWdub3Jl
IEZSRUVEX01FTU9SWSovCi0JfQotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5mcmVl
X2NodW5rcywgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+ZnJlZV9j
aHVua3MsIGNoaywgc2N0cF9uZXh0KTsKLQkJaWYgKGNoay0+ZGF0YSkgewotCQkJc2N0cF9tX2Zy
ZWVtKGNoay0+ZGF0YSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQl9Ci0JCWlmIChjaGstPmhv
bGRzX2tleV9yZWYpCi0JCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tl
eWlkLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlw
aV96b25lX2NodW5rKSwgY2hrKTsKLQkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOwotCQlhdG9taWNf
c3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpLCAxKTsKLQkJYXNv
Yy0+ZnJlZV9jaHVua19jbnQtLTsKLQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9Ci0J
LyogcGVuZGluZyBzZW5kIHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLwotCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJaWYgKGFz
b2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7Ci0J
CQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07Ci0j
aWZkZWYgSU5WQVJJQU5UUwotCQl9IGVsc2UgewotCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUg
cXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQpOwotI2VuZGlmCi0JCX0KLQkJ
VEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCWlmIChj
aGstPmRhdGEpIHsKLQkJCWlmIChzbykgewotCQkJCS8qIFN0aWxsIGEgc29ja2V0PyAqLwotCQkJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCwgc3RjYiwKLQkJCQkg
ICAgICAgICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQl9Ci0JCQlpZiAoY2hr
LT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0g
TlVMTDsKLQkJCX0KLQkJfQotCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQotCQkJc2N0cF9hdXRo
X2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOwotCQlp
ZiAoY2hrLT53aG9UbykgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwot
CQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0JCX0KLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7Ci0JCS8q
c2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQotCS8qIHNlbnQgcXVldWUgU0hPVUxEIGJlIGVt
cHR5ICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBf
bmV4dCwgbmNoaykgewotCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQp
IHsKLQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID4gMCkgewotCQkJCWFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19v
bl9xdWV1ZXMtLTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQl9IGVsc2UgewotCQkJCXBhbmljKCJO
byBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsK
LSNlbmRpZgotCQkJfQotCQl9Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwgY2hr
LCBzY3RwX25leHQpOwotCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQlpZiAoc28pIHsKLQkJCQkvKiBT
dGlsbCBhIHNvY2tldD8gKi8KLQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOVF9E
R19GQUlMLCBzdGNiLAotCQkJCSAgICAgICAgICAgICAgICAwLCBjaGssIFNDVFBfU09fTE9DS0VE
KTsKLQkJCX0KLQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRh
KTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJfQotCQl9Ci0JCWlmIChjaGstPmhvbGRzX2tl
eV9yZWYpCi0JCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBT
Q1RQX1NPX0xPQ0tFRCk7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQlT
Q1RQX0RFQ1JfQ0hLX0NPVU5UKCk7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQot
I2lmZGVmIElOVkFSSUFOVFMKLQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQ7IGkrKykgewotCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9xdWV1ZXMg
PiAwKSB7Ci0JCQlwYW5pYygiJXUgY2h1bmtzIGxlZnQgZm9yIHN0cmVhbSAldS4iLCBzdGNiLT5h
c29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcywgaSk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQkv
KiBjb250cm9sIHF1ZXVlIE1BWSBub3QgYmUgZW1wdHkgKi8KLQlUQUlMUV9GT1JFQUNIX1NBRkUo
Y2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJ
TFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQkJ
aWYgKGNoay0+ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQljaGstPmRh
dGEgPSBOVUxMOwotCQl9Ci0JCWlmIChjaGstPmhvbGRzX2tleV9yZWYpCi0JCQlzY3RwX2F1dGhf
a2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCXNj
dHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9C
QVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7
Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQotCS8qIEFTQ09ORiBxdWV1ZSBNQVkg
bm90IGJlIGVtcHR5ICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9z
ZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2Nv
bmZfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQlz
Y3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJaWYg
KGNoay0+aG9sZHNfa2V5X3JlZikKLQkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGst
PmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNo
ay0+d2hvVG8pOwotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVu
ayksIGNoayk7Ci0JCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKLQkJLypzYV9pZ25vcmUgRlJFRURf
TUVNT1JZKi8KLQl9Ci0JaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXkpIHsKLQkJU0NUUF9GUkVFKGFz
b2MtPm1hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCQlhc29jLT5tYXBwaW5nX2FycmF5ID0g
TlVMTDsKLQl9Ci0JaWYgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXkpIHsKLQkJU0NUUF9GUkVFKGFz
b2MtPm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCQlhc29jLT5ucl9tYXBwaW5nX2Fy
cmF5ID0gTlVMTDsKLQl9Ci0JLyogdGhlIHN0cmVhbSBvdXRzICovCi0JaWYgKGFzb2MtPnN0cm1v
dXQpIHsKLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJNTyk7Ci0JCWFzb2Mt
PnN0cm1vdXQgPSBOVUxMOwotCX0KLQlhc29jLT5zdHJtX3JlYWxvdXRzaXplID0gYXNvYy0+c3Ry
ZWFtb3V0Y250ID0gMDsKLQlpZiAoYXNvYy0+c3RybWluKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBh
c29jLT5zdHJlYW1pbmNudDsgaSsrKSB7Ci0JCQlzY3RwX2NsZWFuX3VwX3N0cmVhbShzdGNiLCAm
YXNvYy0+c3RybWluW2ldLmlucXVldWUpOwotCQkJc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwg
JmFzb2MtPnN0cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0JCX0KLQkJU0NUUF9GUkVFKGFzb2MtPnN0
cm1pbiwgU0NUUF9NX1NUUk1JKTsKLQkJYXNvYy0+c3RybWluID0gTlVMTDsKLQl9Ci0JYXNvYy0+
c3RyZWFtaW5jbnQgPSAwOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShuZXQsICZhc29jLT5uZXRzLCBz
Y3RwX25leHQsIG5uZXQpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCWlmIChTQ1RQX0JBU0VfSU5G
TyhpcGlfY291bnRfcmFkZHIpID09IDApIHsKLQkJCXBhbmljKCJubyBuZXQncyBsZWZ0IGFsbG9j
J2VkLCBvciBsaXN0IHBvaW50cyB0byBpdHNlbGYiKTsKLQkJfQotI2VuZGlmCi0JCVRBSUxRX1JF
TU9WRSgmYXNvYy0+bmV0cywgbmV0LCBzY3RwX25leHQpOwotCQlzY3RwX2ZyZWVfcmVtb3RlX2Fk
ZHIobmV0KTsKLQl9Ci0JTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZhc29jLT5zY3RwX3Jlc3Ry
aWN0ZWRfYWRkcnMsIHNjdHBfbnh0X2FkZHIsIG5hZGRyKSB7Ci0JCS8qc2FfaWdub3JlIEZSRUVE
X01FTU9SWSovCi0JCXNjdHBfcmVtb3ZlX2xhZGRyKGxhZGRyKTsKLQl9Ci0KLQkvKiBwZW5kaW5n
IGFzY29uZiAoYWRkcmVzcykgcGFyYW1ldGVycyAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShhcGFy
YW0sICZhc29jLT5hc2NvbmZfcXVldWUsIG5leHQsIG5hcGFyYW0pIHsKLQkJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2NvbmZfcXVldWUsIGFwYXJh
bSwgbmV4dCk7Ci0JCVNDVFBfRlJFRShhcGFyYW0sU0NUUF9NX0FTQ19BRERSKTsKLQl9Ci0JVEFJ
TFFfRk9SRUFDSF9TQUZFKGFhY2ssICZhc29jLT5hc2NvbmZfYWNrX3NlbnQsIG5leHQsIG5hYWNr
KSB7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+
YXNjb25mX2Fja19zZW50LCBhYWNrLCBuZXh0KTsKLQkJaWYgKGFhY2stPmRhdGEgIT0gTlVMTCkg
ewotCQkJc2N0cF9tX2ZyZWVtKGFhY2stPmRhdGEpOwotCQl9Ci0JCVNDVFBfWk9ORV9GUkVFKFND
VFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZl9hY2spLCBhYWNrKTsKLQl9Ci0JLyogY2xlYW4g
dXAgYXV0aCBzdHVmZiAqLwotCWlmIChhc29jLT5sb2NhbF9obWFjcykKLQkJc2N0cF9mcmVlX2ht
YWNsaXN0KGFzb2MtPmxvY2FsX2htYWNzKTsKLQlpZiAoYXNvYy0+cGVlcl9obWFjcykKLQkJc2N0
cF9mcmVlX2htYWNsaXN0KGFzb2MtPnBlZXJfaG1hY3MpOwotCi0JaWYgKGFzb2MtPmxvY2FsX2F1
dGhfY2h1bmtzKQotCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGFzb2MtPmxvY2FsX2F1dGhfY2h1bmtz
KTsKLQlpZiAoYXNvYy0+cGVlcl9hdXRoX2NodW5rcykKLQkJc2N0cF9mcmVlX2NodW5rbGlzdChh
c29jLT5wZWVyX2F1dGhfY2h1bmtzKTsKLQotCXNjdHBfZnJlZV9hdXRoaW5mbygmYXNvYy0+YXV0
aGluZm8pOwotCi0JTElTVF9GT1JFQUNIX1NBRkUoc2hhcmVkX2tleSwgJmFzb2MtPnNoYXJlZF9r
ZXlzLCBuZXh0LCBuc2hhcmVkX2tleSkgewotCQlMSVNUX1JFTU9WRShzaGFyZWRfa2V5LCBuZXh0
KTsKLQkJc2N0cF9mcmVlX3NoYXJlZGtleShzaGFyZWRfa2V5KTsKLQkJLypzYV9pZ25vcmUgRlJF
RURfTUVNT1JZKi8KLQl9Ci0KLQkvKiBJbnNlcnQgbmV3IGl0ZW1zIGhlcmUgOj4gKi8KLQotCS8q
IEdldCByaWQgb2YgTE9DSyAqLwotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlTQ1RQX1RDQl9M
T0NLX0RFU1RST1koc3RjYik7Ci0JU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koc3RjYik7Ci0J
aWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKLQkJU0NUUF9JTlBfSU5G
T19XVU5MT0NLKCk7Ci0JCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JfQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKSAvKiBURU1QIENPREUgKi8KLQlzdGNiLT5mcmVlZF9mcm9tX3doZXJlID0gZnJvbV9s
b2NhdGlvbjsKLSNlbmRpZgotI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNPQ1MKLQlpZiAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKLQkJLyogbm93IGNs
ZWFuIHVwIHRoZSB0YXNvYyBpdHNlbGYgKi8KLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOwotCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotCX0g
ZWxzZSB7Ci0JCUxJU1RfSU5TRVJUX0hFQUQoJmlucC0+c2N0cF9hc29jX2ZyZWVfbGlzdCwgc3Rj
Yiwgc2N0cF90Y2JsaXN0KTsKLQl9Ci0jZWxzZQotCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsKLQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotI2Vu
ZGlmCi0JaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKLQkJaWYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkvKiBJZiBp
dHMgTk9UIHRoZSBpbnBfZnJlZSBjYWxsaW5nIHVzIEFORAotCQkJICogc2N0cF9jbG9zZSBhcyBi
ZWVuIGNhbGxlZCwgd2UKLQkJCSAqIGNhbGwgYmFjay4uLgotCQkJICovCi0JCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCQkvKiBUaGlzIHdpbGwgc3RhcnQgdGhlIGtpbGwgdGltZXIgKGlmIHdl
IGFyZQotCQkJICogdGhlIGxhc3Qgb25lKSBzaW5jZSB3ZSBob2xkIGFuIGluY3JlbWVudCB5ZXQu
IEJ1dAotCQkJICogdGhpcyBpcyB0aGUgb25seSBzYWZlIHdheSB0byBkbyB0aGlzCi0JCQkgKiBz
aW5jZSBvdGhlcndpc2UgaWYgdGhlIHNvY2tldCBjbG9zZXMKLQkJCSAqIGF0IHRoZSBzYW1lIHRp
bWUgd2UgYXJlIGhlcmUgd2UgbWlnaHQKLQkJCSAqIGNvbGxpZGUgaW4gdGhlIGNsZWFudXAuCi0J
CQkgKi8KLQkJCXNjdHBfaW5wY2JfZnJlZShpbnAsCi0JCQkJCVNDVFBfRlJFRV9TSE9VTERfVVNF
X0dSQUNFRlVMX0NMT1NFLAotCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7Ci0J
CQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJZ290byBvdXRfb2Y7Ci0JCX0gZWxzZSB7Ci0J
CQkvKiBUaGUgc29ja2V0IGlzIHN0aWxsIG9wZW4uICovCi0JCQlTQ1RQX0lOUF9ERUNSX1JFRihp
bnApOwotCQl9Ci0JfQotCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7
Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0gb3V0X29mOgotCS8qIGRlc3Ryb3llZCB0
aGUgYXNvYyAqLwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlu
cCwgTlVMTCwgMTEpOwotI2VuZGlmCi0JcmV0dXJuICgxKTsKLX0KLQotCi0KLS8qCi0gKiBkZXRl
cm1pbmUgaWYgYSBkZXN0aW5hdGlvbiBpcyAicmVhY2hhYmxlIiBiYXNlZCB1cG9uIHRoZSBhZGRy
ZXNzZXMgYm91bmQKLSAqIHRvIHRoZSBjdXJyZW50IGVuZHBvaW50IChlLmcuIG9ubHkgdjQgb3Ig
djYgY3VycmVudGx5IGJvdW5kKQotICovCi0vKgotICogRklYOiBpZiB3ZSBhbGxvdyBhc3NvYy1s
ZXZlbCBiaW5keCgpLCB0aGVuIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgdG8gdXNlCi0gKiBhc3Nv
YyBsZXZlbCB2NC92NiBmbGFncywgYXMgdGhlIGFzc29jICptYXkqIG5vdCBoYXZlIHRoZSBzYW1l
IGFkZHJlc3MKLSAqIHR5cGVzIGJvdW5kIGFzIGl0cyBlbmRwb2ludAotICovCi1pbnQKLXNjdHBf
ZGVzdGluYXRpb25faXNfcmVhY2hhYmxlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNv
Y2thZGRyICpkZXN0YWRkcikKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCWludCBhbnN3
ZXI7Ci0KLQkvKgotCSAqIE5vIGxvY2tzIGhlcmUsIHRoZSBUQ0IsIGluIGFsbCBjYXNlcyBpcyBh
bHJlYWR5IGxvY2tlZCBhbmQgYW4KLQkgKiBhc3NvYyBpcyB1cC4gVGhlcmUgaXMgZWl0aGVyIGEg
SU5QIGxvY2sgYnkgdGhlIGNhbGxlciBhcHBsaWVkIChpbgotCSAqIGFzY29uZiBjYXNlIHdoZW4g
ZGVsZXRpbmcgYW4gYWRkcmVzcykgb3IgTk9UIGluIHRoZSBIQiBjYXNlLAotCSAqIGhvd2V2ZXIg
aWYgSEIgdGhlbiB0aGUgSU5QIGluY3JlbWVudCBpcyB1cCBhbmQgdGhlIElOUCB3aWxsIG5vdAot
CSAqIGJlIHJlbW92ZWQgKG9uIHRvcCBvZiB0aGUgZmFjdCB0aGF0IHdlIGhhdmUgYSBUQ0IgbG9j
aykuIFNvIHdlCi0JICogb25seSB3YW50IHRvIHJlYWQgdGhlIHNjdHBfZmxhZ3MsIHdoaWNoIGlz
IGVpdGhlciBib3VuZC1hbGwgb3IKLQkgKiBub3QuLiBubyBwcm90ZWN0aW9uIG5lZWRlZCBzaW5j
ZSBvbmNlIGFuIGFzc29jIGlzIHVwIHlvdSBjYW4ndCBiZQotCSAqIGNoYW5naW5nIHlvdXIgYmlu
ZGluZy4KLQkgKi8KLQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKiBpZiBib3VuZCBhbGwsIGRlc3RpbmF0
aW9uIGlzIG5vdCByZXN0cmljdGVkICovCi0JCS8qCi0JCSAqIFJSUzogUXVlc3Rpb24gZHVyaW5n
IGxvY2sgd29yazogSXMgdGhpcyBjb3JyZWN0PyBJZiB5b3UKLQkJICogYXJlIGJvdW5kLWFsbCB5
b3Ugc3RpbGwgbWlnaHQgbmVlZCB0byBvYmV5IHRoZSBWNC0tVjYKLQkJICogZmxhZ3M/Pz8gSU1P
IHRoaXMgYm91bmQtYWxsIHN0dWZmIG5lZWRzIHRvIGJlIHJlbW92ZWQhCi0JCSAqLwotCQlyZXR1
cm4gKDEpOwotCX0KLQkvKiBOT1RFOiBhbGwgInNjb3BlIiBjaGVja3MgYXJlIGRvbmUgd2hlbiBs
b2NhbCBhZGRyZXNzZXMgYXJlIGFkZGVkICovCi0Jc3dpdGNoIChkZXN0YWRkci0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotI2lmICEoZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCWFuc3dlciA9IGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQ
VjY7Ci0jZWxzZQotCQlhbnN3ZXIgPSBpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICYgSU5QX0lQ
VjY7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVU
OgotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCWFuc3dlciA9
IGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjQ7Ci0jZWxzZQotCQlhbnN3ZXIgPSBpbnAtPmlwX2lu
cC5pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjQ7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCQlhbnN3ZXIgPSBpbnAt
PmlwX2lucC5pbnAuaW5wX3ZmbGFnICYgSU5QX0NPTk47Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVm
YXVsdDoKLQkJLyogaW52YWxpZCBmYW1pbHksIHNvIGl0J3MgdW5yZWFjaGFibGUgKi8KLQkJYW5z
d2VyID0gMDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoYW5zd2VyKTsKLX0KLQotLyoKLSAqIHVw
ZGF0ZSB0aGUgaW5wX3ZmbGFncyBvbiBhbiBlbmRwb2ludAotICovCi1zdGF0aWMgdm9pZAotc2N0
cF91cGRhdGVfZXBfdmZsYWcoc3RydWN0IHNjdHBfaW5wY2IgKmlucCkKLXsKLQlzdHJ1Y3Qgc2N0
cF9sYWRkciAqbGFkZHI7Ci0KLQkvKiBmaXJzdCBjbGVhciB0aGUgZmxhZyAqLwotI2lmICEoZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JaW5wLT5pbnBfdmZsYWcgPSAwOwot
I2Vsc2UKLQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnID0gMDsKLSNlbmRpZgotCS8qIHNldCB0
aGUgZmxhZyBiYXNlZCBvbiBhZGRyZXNzZXMgb24gdGhlIGVwIGxpc3QgKi8KLQlMSVNUX0ZPUkVB
Q0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCWlmIChs
YWRkci0+aWZhID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiJXM6IE5V
TEwgaWZhXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKGxh
ZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7Ci0JCQljb250
aW51ZTsKLQkJfQotCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7
Ci0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLSNpZiAhKGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pKQotCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7Ci0jZWxz
ZQotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNjsKLSNlbmRpZgotCQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLSNpZiAhKGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5Q
X0lQVjQ7Ci0jZWxzZQotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNDsK
LSNlbmRpZgotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
CWNhc2UgQUZfQ09OTjoKLQkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0NPTk47
Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0K
LS8qCi0gKiBBZGQgdGhlIGFkZHJlc3MgdG8gdGhlIGVuZHBvaW50IGxvY2FsIGFkZHJlc3MgbGlz
dCBUaGVyZSBpcyBub3RoaW5nIHRvIGJlCi0gKiBkb25lIGlmIHdlIGFyZSBib3VuZCB0byBhbGwg
YWRkcmVzc2VzCi0gKi8KLXZvaWQKLXNjdHBfYWRkX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgc3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQzMl90IGFjdGlvbikKLXsKLQlz
dHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCWludCBm
bmQsIGVycm9yID0gMDsKLQotCWZuZCA9IDA7Ci0KLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJLyogWW91IGFyZSBhbHJlYWR5IGJvdW5kIHRvIGFs
bC4gWW91IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlyZXR1cm47Ci0JfQotI2lmZGVmIElORVQ2Ci0J
aWYgKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJaWYgKGlmYS0+
bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJLyogQ2FuJ3Qg
YmluZCBhIG5vbi11c2VhYmxlIGFkZHIuICovCi0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0jZW5kaWYK
LQkvKiBmaXJzdCwgaXMgaXQgYWxyZWFkeSBwcmVzZW50PyAqLwotCUxJU1RfRk9SRUFDSChsYWRk
ciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKLQkJaWYgKGxhZGRyLT5p
ZmEgPT0gaWZhKSB7Ci0JCQlmbmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZm5k
ID09IDApIHsKLQkJLyogTm90IGluIHRoZSBlcCBsaXN0ICovCi0JCWVycm9yID0gc2N0cF9pbnNl
cnRfbGFkZHIoJmlucC0+c2N0cF9hZGRyX2xpc3QsIGlmYSwgYWN0aW9uKTsKLQkJaWYgKGVycm9y
ICE9IDApCi0JCQlyZXR1cm47Ci0JCWlucC0+bGFkZHJfY291bnQrKzsKLQkJLyogdXBkYXRlIGlu
cF92ZmxhZyBmbGFncyAqLwotCQlzd2l0Y2ggKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsK
LSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykpCi0JCQlpbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNjsKLSNlbHNl
Ci0JCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9JUFY2OwotI2VuZGlmCi0JCQli
cmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotI2lmICEoZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCQlpbnAtPmlucF92ZmxhZyB8PSBJTlBf
SVBWNDsKLSNlbHNlCi0JCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9JUFY0Owot
I2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
Y2FzZSBBRl9DT05OOgotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfQ09OTjsK
LQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlMSVNUX0ZP
UkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQkJc2N0
cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGlmYSk7Ci0JCX0KLQl9Ci0JcmV0dXJu
OwotfQotCi0KLS8qCi0gKiBzZWxlY3QgYSBuZXcgKGhvcGVmdWxseSByZWFjaGFibGUpIGRlc3Rp
bmF0aW9uIG5ldCAoc2hvdWxkIG9ubHkgYmUgdXNlZAotICogd2hlbiB3ZSBkZWxldGVkIGFuIGVw
IGFkZHIgdGhhdCBpcyB0aGUgb25seSB1c2FibGUgc291cmNlIGFkZHJlc3MgdG8gcmVhY2gKLSAq
IHRoZSBkZXN0aW5hdGlvbiBuZXQpCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX3NlbGVjdF9wcmlt
YXJ5X2Rlc3RpbmF0aW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7Ci0KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7Ci0JCS8qIGZvciBub3csIHdlJ2xsIGp1c3QgcGljayB0aGUgZmlyc3QgcmVhY2hhYmxl
IG9uZSB3ZSBmaW5kICovCi0JCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQpCi0JCQljb250aW51ZTsKLQkJaWYgKHNjdHBfZGVzdGluYXRpb25faXNfcmVhY2hhYmxl
KHN0Y2IsCi0JCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcikpIHsKLQkJ
CS8qIGZvdW5kIGEgcmVhY2hhYmxlIGRlc3RpbmF0aW9uICovCi0JCQlzdGNiLT5hc29jLnByaW1h
cnlfZGVzdGluYXRpb24gPSBuZXQ7Ci0JCX0KLQl9Ci0JLyogSSBjYW4ndCB0aGVyZSBmcm9tIGhl
cmUhIC4uLndlJ3JlIGdvbm5hIGRpZSBzaG9ydGx5Li4uICovCi19Ci0KLQotLyoKLSAqIERlbGV0
ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBlbmRwb2ludCBsb2NhbCBhZGRyZXNzIGxpc3QuIFRoZXJl
IGlzIG5vdGhpbmcKLSAqIHRvIGJlIGRvbmUgaWYgd2UgYXJlIGJvdW5kIHRvIGFsbCBhZGRyZXNz
ZXMKLSAqLwotdm9pZAotc2N0cF9kZWxfbG9jYWxfYWRkcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7
Ci0JaW50IGZuZDsKLQotCWZuZCA9IDA7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCS8qIFlvdSBhcmUgYWxyZWFkeSBib3VuZCB0byBhbGwuIFlv
dSBoYXZlIGl0IGFscmVhZHkgKi8KLQkJcmV0dXJuOwotCX0KLQlMSVNUX0ZPUkVBQ0gobGFkZHIs
ICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCWlmIChsYWRkci0+aWZh
ID09IGlmYSkgewotCQkJZm5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChmbmQgJiYg
KGlucC0+bGFkZHJfY291bnQgPCAyKSkgewotCQkvKiBjYW4ndCBkZWxldGUgdW5sZXNzIHRoZXJl
IGFyZSBhdCBMRUFTVCAyIGFkZHJlc3NlcyAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChmbmQpIHsK
LQkJLyoKLQkJICogY2xlYW4gdXAgYW55IHVzZSBvZiB0aGlzIGFkZHJlc3MgZ28gdGhyb3VnaCBv
dXIKLQkJICogYXNzb2NpYXRpb25zIGFuZCBjbGVhciBhbnkgbGFzdF91c2VkX2FkZHJlc3MgdGhh
dCBtYXRjaAotCQkgKiB0aGlzIG9uZSBmb3IgZWFjaCBhc3NvYywgc2VlIGlmIGEgbmV3IHByaW1h
cnlfZGVzdGluYXRpb24KLQkJICogaXMgbmVlZGVkCi0JCSAqLwotCQlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7Ci0KLQkJLyogY2xlYW4gdXAgIm5leHRfYWRkcl90b3VzZSIgKi8KLQkJaWYgKGlucC0+
bmV4dF9hZGRyX3RvdXNlID09IGxhZGRyKQotCQkJLyogZGVsZXRlIHRoaXMgYWRkcmVzcyAqLwot
CQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOwotCi0JCS8qIGNsZWFuIHVwICJsYXN0X3Vz
ZWRfYWRkcmVzcyIgKi8KLQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQotCQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKLQkJCWlmIChzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID09IGxh
ZGRyKQotCQkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KLQkJCQlzdGNiLT5hc29jLmxhc3Rf
dXNlZF9hZGRyZXNzID0gTlVMTDsKLQkJCS8qIE5vdyBzcGluIHRocm91Z2ggYWxsIHRoZSBuZXRz
IGFuZCBwdXJnZSBhbnkgcmVmIHRvIGxhZGRyICovCi0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0
Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKG5ldC0+cm8uX3NfYWRkciA9PSBs
YWRkci0+aWZhKSB7Ci0JCQkJCS8qIFllcCwgcHVyZ2Ugc3JjIGFkZHJlc3Mgc2VsZWN0ZWQgKi8K
LQkJCQkJc2N0cF9ydGVudHJ5X3QgKnJ0OwotCi0JCQkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3Mg
aWYgY2FjaGVkICovCi0JCQkJCXJ0ID0gbmV0LT5yby5yb19ydDsKLQkJCQkJaWYgKHJ0ICE9IE5V
TEwpIHsKLQkJCQkJCVJURlJFRShydCk7Ci0JCQkJCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJ
CQkJfQotCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJCW5ldC0+cm8u
X3NfYWRkciA9IE5VTEw7Ci0JCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJCX0K
LQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQkJLyogZm9yIGVhY2ggdGNiICov
Ci0JCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBlcCBsaXN0ICovCi0JCXNjdHBfcmVtb3ZlX2xhZGRy
KGxhZGRyKTsKLQkJaW5wLT5sYWRkcl9jb3VudC0tOwotCQkvKiB1cGRhdGUgaW5wX3ZmbGFnIGZs
YWdzICovCi0JCXNjdHBfdXBkYXRlX2VwX3ZmbGFnKGlucCk7Ci0JfQotCXJldHVybjsKLX0KLQot
LyoKLSAqIEFkZCB0aGUgYWRkcmVzcyB0byB0aGUgVENCIGxvY2FsIGFkZHJlc3MgcmVzdHJpY3Rl
ZCBsaXN0LgotICogVGhpcyBpcyBhICJwZW5kaW5nIiBhZGRyZXNzIGxpc3QgKGVnLiBhZGRyZXNz
ZXMgd2FpdGluZyBmb3IgYW4KLSAqIEFTQ09ORi1BQ0sgcmVzcG9uc2UpIGFuZCBjYW5ub3QgYmUg
dXNlZCBhcyBhIHZhbGlkIHNvdXJjZSBhZGRyZXNzLgotICovCi12b2lkCi1zY3RwX2FkZF9sb2Nh
bF9hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEg
KmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3RydWN0IHNjdHBsYWRkciAq
bGlzdDsKLQotCS8qCi0JICogQXNzdW1lcyBUQ0IgaXMgbG9ja2VkLi4gYW5kIHBvc3NpYmx5IHRo
ZSBJTlAuIE1heSBuZWVkIHRvCi0JICogY29uZmlybS9maXggdGhhdCBpZiB3ZSBuZWVkIGl0IGFu
ZCBpcyBub3QgdGhlIGNhc2UuCi0JICovCi0JbGlzdCA9ICZzdGNiLT5hc29jLnNjdHBfcmVzdHJp
Y3RlZF9hZGRyczsKLQotI2lmZGVmIElORVQ2Ci0JaWYgKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkgPT0gQUZfSU5FVDYpIHsKLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJf
SUZBX1VOVVNFQUJMRSkgewotCQkJLyogQ2FuJ3QgYmluZCBhIG5vbi1leGlzdGVudCBhZGRyLiAq
LwotCQkJcmV0dXJuOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogZG9lcyB0aGUgYWRkcmVzcyBhbHJl
YWR5IGV4aXN0PyAqLwotCUxJU1RfRk9SRUFDSChsYWRkciwgbGlzdCwgc2N0cF9ueHRfYWRkcikg
ewotCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCS8q
IGFkZCB0byB0aGUgbGlzdCAqLwotCSh2b2lkKXNjdHBfaW5zZXJ0X2xhZGRyKGxpc3QsIGlmYSwg
MCk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogUmVtb3ZlIGEgbG9jYWwgYWRkcmVzcyBmcm9tIHRo
ZSBUQ0IgbG9jYWwgYWRkcmVzcyByZXN0cmljdGVkIGxpc3QKLSAqLwotdm9pZAotc2N0cF9kZWxf
bG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
aWZhICppZmEpCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbGFkZHI7Ci0KLQkvKgotCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGFzY29uZiB3b3JrLiBJdCBp
cyBhc3N1bWVkIHRoYXQgYSkgVGhlIFRDQiBpcwotCSAqIGxvY2tlZCBhbmQgYikgVGhlIElOUCBp
cyBsb2NrZWQuIFRoaXMgaXMgdHJ1ZSBpbiBhcyBtdWNoIGFzIEkgY2FuCi0JICogdHJhY2UgdGhy
b3VnaCB0aGUgZW50cnkgYXNjb25mIGNvZGUgd2hlcmUgSSBkaWQgdGhlc2UgbG9ja3MuCi0JICog
QWdhaW4sIHRoZSBBU0NPTkYgY29kZSBpcyBhIGJpdCBkaWZmZXJlbnQgaW4gdGhhdCBpdCBkb2Vz
IGxvY2sKLQkgKiB0aGUgSU5QIGR1cmluZyBpdHMgd29yayBvZnRlbiB0aW1lcy4gVGhpcyBtdXN0
IGJlIHNpbmNlIHdlIGRvbid0Ci0JICogd2FudCBvdGhlciBwcm9jJ3MgbG9va2luZyB1cCB0aGlu
Z3Mgd2hpbGUgd2hhdCB0aGV5IGFyZSBsb29raW5nCi0JICogdXAgaXMgY2hhbmdpbmcgOi1ECi0J
ICovCi0KLQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCS8qIGlmIHN1YnNldCBib3VuZCBhbmQgZG9u
J3QgYWxsb3cgQVNDT05GJ3MsIGNhbid0IGRlbGV0ZSBsYXN0ICovCi0JaWYgKCgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApICYmCi0JICAgIHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYpKSB7Ci0JCWlmIChzdGNi
LT5zY3RwX2VwLT5sYWRkcl9jb3VudCA8IDIpIHsKLQkJCS8qIGNhbid0IGRlbGV0ZSBsYXN0IGFk
ZHJlc3MgKi8KLQkJCXJldHVybjsKLQkJfQotCX0KLQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNi
LT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRfYWRkcikgewotCQkvKiByZW1v
dmUgdGhlIGFkZHJlc3MgaWYgaXQgZXhpc3RzICovCi0JCWlmIChsYWRkci0+aWZhID09IE5VTEwp
Ci0JCQljb250aW51ZTsKLQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQlzY3RwX3JlbW92
ZV9sYWRkcihsYWRkcik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkvKiBhZGRyZXNzIG5vdCBm
b3VuZCEgKi8KLQlyZXR1cm47Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotLyoKLSAq
IFRlbXBvcmFyaWx5IHJlbW92ZSBmb3IgX19BUFBMRV9fIHVudGlsIHdlIHVzZSB0aGUgVGlnZXIg
ZXF1aXZhbGVudHMKLSAqLwotLyogc3lzY3RsICovCi1zdGF0aWMgaW50IHNjdHBfbWF4X251bWJl
cl9vZl9hc3NvYyA9IFNDVFBfTUFYX05VTV9PRl9BU09DOwotc3RhdGljIGludCBzY3RwX3NjYWxl
X3VwX2Zvcl9hZGRyZXNzID0gU0NUUF9TQ0FMRV9GT1JfQUREUjsKLSNlbmRpZgkJCQkvKiBGcmVl
QlNEIHx8IEFQUExFICovCi0KLQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5l
ZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNNUCkKLXN0cnVjdCBzY3RwX21jb3JlX2N0
cmwgKnNjdHBfbWNvcmVfd29ya2VycyA9IE5VTEw7Ci1pbnQgKnNjdHBfY3B1YXJyeSA9IE5VTEw7
Ci12b2lkCi1zY3RwX3F1ZXVlX3RvX21jb3JlKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQg
Y3B1X3RvX3VzZSkKLXsKLQkvKiBRdWV1ZSBhIHBhY2tldCB0byBhIHByb2Nlc3NvciBmb3IgdGhl
IHNwZWNpZmllZCBjb3JlICovCi0Jc3RydWN0IHNjdHBfbWNvcmVfcXVldWUgKnFlbnQ7Ci0Jc3Ry
dWN0IHNjdHBfbWNvcmVfY3RybCAqd2txOwotCWludCBuZWVkX3dha2UgPSAwOwotCWlmIChzY3Rw
X21jb3JlX3dvcmtlcnMgPT0gTlVMTCkgewotCQkvKiBTb21ldGhpbmcgd2VudCB3YXkgYmFkIGR1
cmluZyBzZXR1cCAqLwotCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOwotCQlyZXR1
cm47Ci0JfQotCVNDVFBfTUFMTE9DKHFlbnQsIHN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlICosCi0J
CSAgICAoc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlKSksCi0JCSAgICBTQ1RQX01fTUNP
UkUpOwotCWlmIChxZW50ID09IE5VTEwpIHsKLQkJLyogVGhpcyBpcyB0cm91YmxlICAqLwotCQlz
Y3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOwotCQlyZXR1cm47Ci0JfQotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCXFlbnQtPnZu
ID0gY3Vydm5ldDsKLSNlbmRpZgotCXFlbnQtPm0gPSBtOwotCXFlbnQtPm9mZiA9IG9mZjsKLQlx
ZW50LT52NiA9IDA7Ci0Jd2txID0gJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVfdG9fdXNlXTsKLQlT
Q1RQX01DT1JFX1FMT0NLKHdrcSk7Ci0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmd2txLT5xdWUsIHFl
bnQsIG5leHQpOwotCWlmICh3a3EtPnJ1bm5pbmcgPT0gMCkgewotCQluZWVkX3dha2UgPSAxOwot
CX0KLQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKLQlpZiAobmVlZF93YWtlKSB7Ci0JCXdha2V1
cCgmd2txLT5ydW5uaW5nKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX21jb3JlX3RocmVh
ZCh2b2lkICphcmcpCi17Ci0KLQlzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsICp3a3E7Ci0Jc3RydWN0
IHNjdHBfbWNvcmVfcXVldWUgKnFlbnQ7Ci0KLQl3a3EgPSAoc3RydWN0IHNjdHBfbWNvcmVfY3Ry
bCAqKWFyZzsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgb2ZmLCB2NjsKLQotCS8qIFdhaXQgZm9y
IGZpcnN0IHRpY2tsZSAqLwotCVNDVFBfTUNPUkVfTE9DSyh3a3EpOwotCXdrcS0+cnVubmluZyA9
IDA7Ci0JbXNsZWVwKCZ3a3EtPnJ1bm5pbmcsCi0JICAgICAgICZ3a3EtPmNvcmVfbXR4LAotCSAg
ICAgICAwLCAid2FpdCBmb3IgcGt0IiwgMCk7Ci0JU0NUUF9NQ09SRV9VTkxPQ0sod2txKTsKLQot
CS8qIEJpbmQgdG8gb3VyIGNwdSAqLwotCXRocmVhZF9sb2NrKGN1cnRocmVhZCk7Ci0Jc2NoZWRf
YmluZChjdXJ0aHJlYWQsIHdrcS0+Y3B1aWQpOwotCXRocmVhZF91bmxvY2soY3VydGhyZWFkKTsK
LQotCS8qIE5vdyBsZXRzIHN0YXJ0IHdvcmtpbmcgKi8KLQlTQ1RQX01DT1JFX0xPQ0sod2txKTsK
LQkvKiBOb3cgZ3JhYiBsb2NrIGFuZCBnbyAqLwotCWZvciAoOzspIHsKLQkJU0NUUF9NQ09SRV9R
TE9DSyh3a3EpOwotCXNraXBfc2xlZXA6Ci0JCXdrcS0+cnVubmluZyA9IDE7Ci0JCXFlbnQgPSBU
QUlMUV9GSVJTVCgmd2txLT5xdWUpOwotCQlpZiAocWVudCkgewotCQkJVEFJTFFfUkVNT1ZFKCZ3
a3EtPnF1ZSwgcWVudCwgbmV4dCk7Ci0JCQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKLQkJCUNV
UlZORVRfU0VUKHFlbnQtPnZuKTsKLSNlbmRpZgotCQkJbSA9IHFlbnQtPm07Ci0JCQlvZmYgPSBx
ZW50LT5vZmY7Ci0JCQl2NiA9IHFlbnQtPnY2OwotCQkJU0NUUF9GUkVFKHFlbnQsIFNDVFBfTV9N
Q09SRSk7Ci0JCQlpZiAodjYgPT0gMCkgewotCQkJCXNjdHBfaW5wdXRfd2l0aF9wb3J0KG0sIG9m
ZiwgMCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfUFJJTlRGKCJWNiBub3QgeWV0IHN1cHBvcnRl
ZFxuIik7Ci0JCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQkJQ1VSVk5FVF9SRVNUT1JFKCk7
Ci0jZW5kaWYKLQkJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsKLQkJfQotCQl3a3EtPnJ1bm5pbmcg
PSAwOwotCQlpZiAoIVRBSUxRX0VNUFRZKCZ3a3EtPnF1ZSkpIHsKLQkJCWdvdG8gc2tpcF9zbGVl
cDsKLQkJfQotCQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKLQkJbXNsZWVwKCZ3a3EtPnJ1bm5p
bmcsCi0JCSAgICAgICAmd2txLT5jb3JlX210eCwKLQkJICAgICAgIDAsICJ3YWl0IGZvciBwa3Qi
LCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3N0YXJ0dXBfbWNvcmVfdGhyZWFkcyh2
b2lkKQotewotCWludCBpLCBjcHU7Ci0KLQlpZiAobXBfbmNwdXMgPT0gMSkKLQkJcmV0dXJuOwot
Ci0JaWYgKHNjdHBfbWNvcmVfd29ya2VycyAhPSBOVUxMKSB7Ci0JCS8qIEFscmVhZHkgYmVlbiBo
ZXJlIGluIHNvbWUgcHJldmlvdXMKLQkJICogdm5ldD8KLQkJICovCi0JCXJldHVybjsKLQl9Ci0J
U0NUUF9NQUxMT0Moc2N0cF9tY29yZV93b3JrZXJzLCBzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsICos
Ci0JCSAgICAoKG1wX21heGlkKzEpICogc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwpKSwK
LQkJICAgIFNDVFBfTV9NQ09SRSk7Ci0JaWYgKHNjdHBfbWNvcmVfd29ya2VycyA9PSBOVUxMKSB7
Ci0JCS8qIFRTTkggSSBob3BlICovCi0JCXJldHVybjsKLQl9Ci0JbWVtc2V0KHNjdHBfbWNvcmVf
d29ya2VycywgMCAsICgobXBfbWF4aWQrMSkgKgotCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfbWNv
cmVfY3RybCkpKTsKLQkvKiBJbml0IHRoZSBzdHJ1Y3R1cmVzICovCi0JZm9yIChpID0gMDsgaTw9
bXBfbWF4aWQ7IGkrKykgewotCQlUQUlMUV9JTklUKCZzY3RwX21jb3JlX3dvcmtlcnNbaV0ucXVl
KTsKLQkJU0NUUF9NQ09SRV9MT0NLX0lOSVQoJnNjdHBfbWNvcmVfd29ya2Vyc1tpXSk7Ci0JCVND
VFBfTUNPUkVfUUxPQ0tfSU5JVCgmc2N0cF9tY29yZV93b3JrZXJzW2ldKTsKLQkJc2N0cF9tY29y
ZV93b3JrZXJzW2ldLmNwdWlkID0gaTsKLQl9Ci0JaWYgKHNjdHBfY3B1YXJyeSA9PSBOVUxMKSB7
Ci0JCVNDVFBfTUFMTE9DKHNjdHBfY3B1YXJyeSwgaW50ICosCi0JCQkgICAgKG1wX25jcHVzICog
c2l6ZW9mKGludCkpLAotCQkJICAgIFNDVFBfTV9NQ09SRSk7Ci0JCWkgPSAwOwotCQlDUFVfRk9S
RUFDSChjcHUpIHsKLQkJCXNjdHBfY3B1YXJyeVtpXSA9IGNwdTsKLQkJCWkrKzsKLQkJfQotCX0K
LQotCS8qIE5vdyBzdGFydCB0aGVtIGFsbCAqLwotCUNQVV9GT1JFQUNIKGNwdSkgewotI2lmIF9f
RnJlZUJTRF92ZXJzaW9uIDw9IDcwMTAwMAotCQkodm9pZClrdGhyZWFkX2NyZWF0ZShzY3RwX21j
b3JlX3RocmVhZCwKLQkJCQkgICAgICh2b2lkICopJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVdLAot
CQkJCSAgICAgJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVdLnRocmVhZF9wcm9jLAotCQkJCSAgICAg
UkZQUk9DLAotCQkJCSAgICAgU0NUUF9LVEhSRUFEX1BBR0VTLAotCQkJCSAgICAgU0NUUF9NQ09S
RV9OQU1FKTsKLQotI2Vsc2UKLQkJKHZvaWQpa3Byb2NfY3JlYXRlKHNjdHBfbWNvcmVfdGhyZWFk
LAotCQkJCSAgICh2b2lkICopJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVdLAotCQkJCSAgICZzY3Rw
X21jb3JlX3dvcmtlcnNbY3B1XS50aHJlYWRfcHJvYywKLQkJCQkgICBSRlBST0MsCi0JCQkJICAg
U0NUUF9LVEhSRUFEX1BBR0VTLAotCQkJCSAgIFNDVFBfTUNPUkVfTkFNRSk7Ci0jZW5kaWYKLQot
CX0KLX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF9jY192
ZXJzaW9uID49IDEzMDAwMDAKLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX25ldGlzcl9oZGxy
KHN0cnVjdCBtYnVmICptLCB1aW50cHRyX3Qgc291cmNlKQotewotCXN0cnVjdCBpcCAqaXA7Ci0J
c3RydWN0IHNjdHBoZHIgKnNoOwotCWludCBvZmZzZXQ7Ci0JdWludDMyX3QgZmxvd2lkLCB0YWc7
Ci0KLQkvKgotCSAqIE5vIGZsb3cgaWQgYnVpbHQgYnkgbG93ZXIgbGF5ZXJzIGZpeCBpdCBzbyB3
ZQotCSAqIGNyZWF0ZSBvbmUuCi0JICovCi0JaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKLQlv
ZmZzZXQgPSAoaXAtPmlwX2hsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQlpZiAo
U0NUUF9CVUZfTEVOKG0pIDwgb2Zmc2V0KSB7Ci0JCWlmICgobSA9IG1fcHVsbHVwKG0sIG9mZnNl
dCkpID09IE5VTEwpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7Ci0JCQlyZXR1
cm4gKE5VTEwpOwotCQl9Ci0JCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7Ci0JfQotCXNoID0g
KHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsgKGlwLT5pcF9obCA8PCAyKSk7Ci0JdGFn
ID0gaHRvbmwoc2gtPnZfdGFnKTsKLQlmbG93aWQgPSB0YWcgXiBudG9ocyhzaC0+ZGVzdF9wb3J0
KSBeIG50b2hzKHNoLT5zcmNfcG9ydCk7Ci0JbS0+bV9wa3RoZHIuZmxvd2lkID0gZmxvd2lkOwot
LyogRklYIE1FICovCi0JbS0+bV9mbGFncyB8PSBNX0ZMT1dJRDsKLQlyZXR1cm4gKG0pOwotfQot
I2VuZGlmCi0KLXZvaWQKLXNjdHBfcGNiX2luaXQoKQotewotCS8qCi0JICogU0NUUCBpbml0aWFs
aXphdGlvbiBmb3IgdGhlIFBDQiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBjYWxsZWQgYnkKLQkgKiB0
aGUgc2N0cF9pbml0KCkgZnVuY3Rpb24uCi0JICovCi0JaW50IGk7Ci0Jc3RydWN0IHRpbWV2YWwg
dHY7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgIT0gMCkgewot
CQkvKiBlcnJvciBJIHdhcyBjYWxsZWQgdHdpY2UgKi8KLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JB
U0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9IDE7Ci0KLSNpZiBkZWZpbmVkKFNDVFBfUFJP
Q0VTU19MRVZFTF9MT0NLUykKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQot
CXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIpKTsKLSNpZmRl
ZiBJTlZBUklBTlRTCi0JcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmU0NUUF9CQVNFX1ZBUiht
dHhfYXR0ciksIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyk7Ci0jZW5kaWYKLSNlbmRpZgotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLSNpZiBkZWZpbmVkKF9fV2lu
ZG93c19fKQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSAhPSBOVUxMKSB7Ci0JCW1l
bXNldChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xv
ZykpOwotCX0KLSNlbHNlCi0JbWVtc2V0KCZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgMCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RB
VCkKLQlTQ1RQX01BTExPQyhTQ1RQX0JBU0VfU1RBVFMsIHN0cnVjdCBzY3Rwc3RhdCAqLAotCQkg
ICAgKChtcF9tYXhpZCsxKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKSwKLQkJICAgIFNDVFBf
TV9NQ09SRSk7Ci0jZW5kaWYKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdHYpOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNF
X1BFUkNQVV9TVEFUKQotCW1lbXNldChTQ1RQX0JBU0VfU1RBVFMsIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cHN0YXQpICogKG1wX21heGlkKzEpKTsKLQlTQ1RQX0JBU0VfU1RBVFNbUENQVV9HRVQoY3B1
aWQpXS5zY3Rwc19kaXNjb250aW51aXR5dGltZS50dl9zZWMgPSAodWludDMyX3QpdHYudHZfc2Vj
OwotCVNDVFBfQkFTRV9TVEFUU1tQQ1BVX0dFVChjcHVpZCldLnNjdHBzX2Rpc2NvbnRpbnVpdHl0
aW1lLnR2X3VzZWMgPSAodWludDMyX3QpdHYudHZfdXNlYzsKLSNlbHNlCi0JbWVtc2V0KCZTQ1RQ
X0JBU0VfU1RBVFMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQlTQ1RQX0JBU0VfU1RB
VChzY3Rwc19kaXNjb250aW51aXR5dGltZSkudHZfc2VjID0gKHVpbnQzMl90KXR2LnR2X3NlYzsK
LQlTQ1RQX0JBU0VfU1RBVChzY3Rwc19kaXNjb250aW51aXR5dGltZSkudHZfdXNlYyA9ICh1aW50
MzJfdCl0di50dl91c2VjOwotI2VuZGlmCi0JLyogaW5pdCB0aGUgZW1wdHkgbGlzdCBvZiAoQWxs
KSBFbmRwb2ludHMgKi8KLQlMSVNUX0lOSVQoJlNDVFBfQkFTRV9JTkZPKGxpc3RoZWFkKSk7Ci0j
aWYgZGVmaW5lZChfX0FQUExFX18pCi0JTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyhpbnBsaXN0
aGVhZCkpOwotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9X
TEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlO
TElPTikKLQlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubGlzdGhlYWQgPSAmU0NUUF9CQVNFX0lO
Rk8oaW5wbGlzdGhlYWQpOwotCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIg
PSBsY2tfZ3JwX2F0dHJfYWxsb2NfaW5pdCgpOwotCWxja19ncnBfYXR0cl9zZXRkZWZhdWx0KFND
VFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIpOwotCVNDVFBfQkFTRV9JTkZPKHNj
dGJpbmZvKS5tdHhfZ3JwID0gbGNrX2dycF9hbGxvY19pbml0KCJzY3RwcGNiIiwgU0NUUF9CQVNF
X0lORk8oc2N0YmluZm8pLm10eF9ncnBfYXR0cik7Ci0JU0NUUF9CQVNFX0lORk8oc2N0YmluZm8p
Lm10eF9hdHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgpOwotCWxja19hdHRyX3NldGRlZmF1bHQo
U0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKLSNlbHNlCi0JU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLmlwaV9saXN0aGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhpbnBsaXN0aGVhZCk7
Ci0JU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycF9hdHRyID0gbGNrX2dycF9h
dHRyX2FsbG9jX2luaXQoKTsKLQlsY2tfZ3JwX2F0dHJfc2V0ZGVmYXVsdChTQ1RQX0JBU0VfSU5G
TyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOwotCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5pcGlfbG9ja19ncnAgPSBsY2tfZ3JwX2FsbG9jX2luaXQoInNjdHBwY2IiLCBTQ1RQX0JBU0Vf
SU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOwotCVNDVFBfQkFTRV9JTkZPKHNjdGJp
bmZvKS5pcGlfbG9ja19hdHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgpOwotCWxja19hdHRyX3Nl
dGRlZmF1bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2F0dHIpOwotI2VuZGlm
Ci0jaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BB
UkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElP
TikKLQlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2djID0gc2N0cF9nYzsKLQlpbl9wY2Jp
bmZvX2F0dGFjaCgmU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pKTsKLSNlbmRpZgotI2VuZGlmCi0K
LQotCS8qIGluaXQgdGhlIGhhc2ggdGFibGUgb2YgZW5kcG9pbnRzICovCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9jY192ZXJzaW9uKSAmJiBfX0ZyZWVC
U0RfY2NfdmVyc2lvbiA+PSA0NDAwMDAKLQlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0
cC50Y2JoYXNoc2l6ZSIsICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRibHNpemUpKTsKLQlU
VU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5wY2JoYXNoc2l6ZSIsICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSkpOwotCVRVTkFCTEVfSU5UX0ZFVENIKCJuZXQuaW5ldC5z
Y3RwLmNodW5rc2NhbGUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2NhbGUpKTsKLSNl
bHNlCi0JVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAudGNiaGFzaHNpemUiLCBTQ1RQ
X1RDQkhBU0hTSVpFLAotCQkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRibHNpemUpKTsK
LQlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5wY2JoYXNoc2l6ZSIsIFNDVFBfUENC
SEFTSFNJWkUsCi0JCQkgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSk7Ci0JVFVO
QUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAuY2h1bmtzY2FsZSIsIFNDVFBfQ0hVTktRVUVV
RV9TQ0FMRSwKLQkJCSAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2NhbGUpKTsKLSNlbmRp
ZgotI2VuZGlmCi0JU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaCkgPSBTQ1RQX0hBU0hfSU5J
VCgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSAqIDMxKSwKLQkJCQkJCSAgICAg
ICAmU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSk7Ci0JU0NUUF9CQVNFX0lORk8oc2N0cF9l
cGhhc2gpID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXpl
KSwKLQkJCQkJCSAgICAgJlNDVFBfQkFTRV9JTkZPKGhhc2htYXJrKSk7Ci0JU0NUUF9CQVNFX0lO
Rk8oc2N0cF90Y3BlcGhhc2gpID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2hhc2h0YmxzaXplKSwKLQkJCQkJCQkmU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKTsKLQlT
Q1RQX0JBU0VfSU5GTyhoYXNodGJsc2l6ZSkgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRi
bHNpemUpOwotCi0KLQlTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpID0gU0NUUF9IQVNIX0lO
SVQoU0NUUF9TSVpFX09GX1ZSRl9IQVNILAotCQkJCQkJICAgICAgJlNDVFBfQkFTRV9JTkZPKGhh
c2h2cmZtYXJrKSk7Ci0KLQlTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2gpID0gU0NUUF9IQVNI
X0lOSVQoU0NUUF9WUkZfSUZOX0hBU0hfU0laRSwKLQkJCQkJCSAgICAgICZTQ1RQX0JBU0VfSU5G
Tyh2cmZfaWZuX2hhc2htYXJrKSk7Ci0JLyogaW5pdCB0aGUgem9uZXMgKi8KLQkvKgotCSAqIEZJ
WCBNRTogU2hvdWxkIGNoZWNrIGZvciBOVUxMIHJldHVybnMsIGJ1dCBpZiBpdCBkb2VzIGZhaWwg
d2UgYXJlCi0JICogZG9vbWVkIHRvIHBhbmljIGFueXdheXMuLi4gYWRkIGxhdGVyIG1heWJlLgot
CSAqLwotCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgInNjdHBf
ZXAiLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lucGNiKSwgbWF4c29ja2V0cyk7Ci0K
LQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSwgInNjdHBfYXNv
YyIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfdGNiKSwgc2N0cF9tYXhfbnVtYmVyX29m
X2Fzc29jKTsKLQotCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRy
KSwgInNjdHBfbGFkZHIiLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2xhZGRyKSwKLQkJ
ICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBzY3RwX3NjYWxlX3VwX2Zvcl9hZGRy
ZXNzKSk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQpLCAi
c2N0cF9yYWRkciIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfbmV0cyksCi0JCSAgICAg
ICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogc2N0cF9zY2FsZV91cF9mb3JfYWRkcmVzcykp
OwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCAic2N0
cF9jaHVuayIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfdG1pdF9jaHVuayksCi0JCSAg
ICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX2No
dW5rc2NhbGUpKSk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9y
ZWFkcSksICJzY3RwX3JlYWRxIiwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCksCi0JCSAgICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2NodW5rc2NhbGUpKSk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0Vf
SU5GTyhpcGlfem9uZV9zdHJtb3EpLCAic2N0cF9zdHJlYW1fbXNnX291dCIsCi0JCSAgICAgICBz
aXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpLAotCQkgICAgICAgKHNjdHBf
bWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkp
OwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mKSwgInNj
dHBfYXNjb25mIiwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmYpLAotCQkgICAg
ICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVu
a3NjYWxlKSkpOwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNj
b25mX2FjayksICJzY3RwX2FzY29uZl9hY2siLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FzY29uZl9hY2spLAotCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkpOwotCi0KLQkvKiBNYXN0ZXIgTG9jayBJTklU
IGZvciBpbmZvIHN0cnVjdHVyZSAqLwotCVNDVFBfSU5QX0lORk9fTE9DS19JTklUKCk7Ci0JU0NU
UF9TVEFUTE9HX0lOSVRfTE9DSygpOwotCi0JU0NUUF9JUElfQ09VTlRfSU5JVCgpOwotCVNDVFBf
SVBJX0FERFJfSU5JVCgpOwotI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKLQlTQ1RQX0lQX1BL
VExPR19JTklUKCk7Ci0jZW5kaWYKLQlMSVNUX0lOSVQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3Ep
KTsKLQotCVNDVFBfV1FfQUREUl9JTklUKCk7Ci0JLyogbm90IHN1cmUgaWYgd2UgbmVlZCBhbGwg
dGhlIGNvdW50cyAqLwotCVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9lcCkgPSAwOwotCS8qIGFz
c29jL3RjYiB6b25lIGluZm8gKi8KLQlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfYXNvYykgPSAw
OwotCS8qIGxvY2FsIGFkZHJsaXN0IHpvbmUgaW5mbyAqLwotCVNDVFBfQkFTRV9JTkZPKGlwaV9j
b3VudF9sYWRkcikgPSAwOwotCS8qIHJlbW90ZSBhZGRybGlzdCB6b25lIGluZm8gKi8KLQlTQ1RQ
X0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpID0gMDsKLQkvKiBjaHVuayBpbmZvICovCi0JU0NU
UF9CQVNFX0lORk8oaXBpX2NvdW50X2NodW5rKSA9IDA7Ci0KLQkvKiBzb2NrZXQgcXVldWUgem9u
ZSBpbmZvICovCi0JU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKSA9IDA7Ci0KLQkvKiBz
dHJlYW0gb3V0IHF1ZXVlIGNvbnQgKi8KLQlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfc3RybW9x
KSA9IDA7Ci0KLQlTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9zdHJtb3EpID0gMDsKLQlTQ1RQX0JB
U0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpID0gMDsKLQotCVNDVFBfT1NfVElNRVJfSU5JVCgmU0NU
UF9CQVNFX0lORk8oYWRkcl93cV90aW1lci50aW1lcikpOwotCi0JLyogSW5pdCB0aGUgVElNRVdB
SVQgbGlzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBTQ1RQX1NUQUNLX1ZUQUdfSEFTSF9TSVpFOyBp
KyspIHsKLQkJTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVtpXSk7Ci0J
fQotI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLQlJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoJnNjdHBf
aXRfY3RsLml0ZXJhdG9yX3dha2V1cCk7Ci0jZWxzZQotCSh2b2lkKXB0aHJlYWRfY29uZF9pbml0
KCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXAsIE5VTEwpOwotI2VuZGlmCi0jZW5kaWYKLQlz
Y3RwX3N0YXJ0dXBfaXRlcmF0b3IoKTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRl
ZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi0Jc2N0cF9zdGFydHVwX21j
b3JlX3RocmVhZHMoKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9fUGFuZGFfXwotCS8qCi0JICogSU5J
VCB0aGUgZGVmYXVsdCBWUkYgd2hpY2ggZm9yIEJTRCBpcyB0aGUgb25seSBvbmUsIG90aGVyIE8v
UydzCi0JICogbWF5IGhhdmUgbW9yZS4gQnV0IGluaXRpYWxseSB0aGV5IG11c3Qgc3RhcnQgd2l0
aCBvbmUgYW5kIHRoZW4KLQkgKiBhZGQgdGhlIFZSRidzIGFzIGFkZHJlc3NlcyBhcmUgYWRkZWQu
Ci0JICovCi0Jc2N0cF9pbml0X3ZyZl9saXN0KFNDVFBfREVGQVVMVF9WUkYpOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX2NjX3ZlcnNpb24gPj0gMTMwMDAw
MAotCWlmIChpcF9yZWdpc3Rlcl9mbG93X2hhbmRsZXIoc2N0cF9uZXRpc3JfaGRsciwgSVBQUk9U
T19TQ1RQKSkgewotCQlTQ1RQX1BSSU5URigiKioqU0NUUC0gRXJyb3IgY2FuJ3QgcmVnaXN0ZXIg
bmV0aXNyIGhhbmRsZXIqKipcbiIpOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX1NDVFBfTkVF
RFNfQ0FMTE9VVF8pIHx8IGRlZmluZWQoX1VTRVJfU0NUUF9ORUVEU19DQUxMT1VUXykKLQkvKiBh
bGxvY2F0ZSB0aGUgbG9jayBmb3IgdGhlIGNhbGxvdXQvdGltZXIgcXVldWUgKi8KLQlTQ1RQX1RJ
TUVSUV9MT0NLX0lOSVQoKTsKLQlUQUlMUV9JTklUKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUp
KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQltYnVmX2luaXRpYWxpemUo
TlVMTCk7Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCXJlY3ZfdGhyZWFk
X2luaXQoKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLS8qCi0gKiBBc3N1bWVzIHRoYXQgdGhlIFND
VFBfQkFTRV9JTkZPKCkgbG9jayBpcyBOT1QgaGVsZC4KLSAqLwotdm9pZAotc2N0cF9wY2JfZmlu
aXNoKHZvaWQpCi17Ci0Jc3RydWN0IHNjdHBfdnJmbGlzdCAqdnJmX2J1Y2tldDsKLQlzdHJ1Y3Qg
c2N0cF92cmYgKnZyZiwgKm52cmY7Ci0Jc3RydWN0IHNjdHBfaWZuICppZm4sICpuaWZuOwotCXN0
cnVjdCBzY3RwX2lmYSAqaWZhLCAqbmlmYTsKLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsK
LQlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2ssICpwcmV2X3R3YWl0X2Jsb2NrOwot
CXN0cnVjdCBzY3RwX2xhZGRyICp3aSwgKm53aTsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2N0cF9pdGVy
YXRvciAqaXQsICpuaXQ7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXpl
ZCkgPT0gMCkgewotCQlTQ1RQX1BSSU5URigiJXM6IHJhY2UgY29uZGl0aW9uIG9uIHRlYXJkb3du
LlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQkFTRV9WQVIoc2N0cF9wY2Jf
aW5pdGlhbGl6ZWQpID0gMDsKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkvKiBOb3RpZnkg
dGhlIGl0ZXJhdG9yIHRvIGV4aXQuICovCi0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpOwot
CXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfTVVTVF9FWElUOwot
CXNjdHBfd2FrZXVwX2l0ZXJhdG9yKCk7Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiAhZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElP
TikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQotCWluX3BjYmluZm9fZGV0YWNoKCZT
Q1RQX0JBU0VfSU5GTyhzY3RiaW5mbykpOwotI2VuZGlmCi0JU0NUUF9JUElfSVRFUkFUT1JfV1Ff
TE9DSygpOwotCWRvIHsKLQkJbXNsZWVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncywKLQkJ
ICAgICAgIHNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgsCi0JCSAgICAgICAwLCAid2Fp
dGluZ19mb3Jfd29yayIsIDApOwotCX0gd2hpbGUgKChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFn
cyAmIFNDVFBfSVRFUkFUT1JfRVhJVEVEKSA9PSAwKTsKLQl0aHJlYWRfZGVhbGxvY2F0ZShzY3Rw
X2l0X2N0bC50aHJlYWRfcHJvYyk7Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRv
cl90aHJlYWRfb2JqICE9IE5VTEwpIHsKLQkJTlRTVEFUVVMgc3RhdHVzID0gU1RBVFVTX1NVQ0NF
U1M7Ci0KLQkJS2VTZXRFdmVudCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwWzFdLCBJT19O
T19JTkNSRU1FTlQsIEZBTFNFKTsKLQkJc3RhdHVzID0gS2VXYWl0Rm9yU2luZ2xlT2JqZWN0KHNj
dHBfaXRfY3RsLml0ZXJhdG9yX3RocmVhZF9vYmosCi0JCQkJCSAgICAgICBFeGVjdXRpdmUsCi0J
CQkJCSAgICAgICBLZXJuZWxNb2RlLAotCQkJCQkgICAgICAgRkFMU0UsCi0JCQkJCSAgICAgICBO
VUxMKTsKLQkJT2JEZXJlZmVyZW5jZU9iamVjdChzY3RwX2l0X2N0bC5pdGVyYXRvcl90aHJlYWRf
b2JqKTsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaWYgKHNjdHBf
aXRfY3RsLnRocmVhZF9wcm9jKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCBJTkZJTklU
RSk7Ci0JCUNsb3NlSGFuZGxlKHNjdHBfaXRfY3RsLnRocmVhZF9wcm9jKTsKLQkJc2N0cF9pdF9j
dGwudGhyZWFkX3Byb2MgPSBOVUxMOwotI2Vsc2UKLQkJcHRocmVhZF9qb2luKHNjdHBfaXRfY3Rs
LnRocmVhZF9wcm9jLCBOVUxMKTsKLQkJc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MgPSAwOwotI2Vu
ZGlmCi0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCURlbGV0ZUNvbmRpdGlvblZhcmlh
YmxlKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXApOwotI2Vsc2UKLQlwdGhyZWFkX2NvbmRf
ZGVzdHJveSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKLQlwdGhyZWFkX211dGV4YXR0
cl9kZXN0cm95KCZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7Ci0jZW5kaWYKLSNlbmRpZgotCS8q
IEluIEZyZWVCU0QgdGhlIGl0ZXJhdG9yIHRocmVhZCBuZXZlciBleGl0cwotCSAqIGJ1dCB3ZSBk
byBjbGVhbiB1cC4KLQkgKiBUaGUgb25seSB3YXkgRnJlZUJTRCByZWFjaGVzIGhlcmUgaXMgaWYg
d2UgaGF2ZSBWUkYncwotCSAqIGJ1dCB3ZSBzdGlsbCBhZGQgdGhlIGlmZGVmIHRvIG1ha2UgaXQg
Y29tcGlsZSBvbiBvbGQgdmVyc2lvbnMuCi0JICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LXJldHJ5OgotI2VuZGlmCi0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpOwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JLyoKLQkgKiBzY3RwX2l0ZXJhdG9yX3dvcmtlcigpIG1pZ2h0IGJl
IHdvcmtpbmcgb24gYW4gaXQgZW50cnkgd2l0aG91dAotCSAqIGhvbGRpbmcgdGhlIGxvY2suICBX
ZSB3b24ndCBmaW5kIGl0IG9uIHRoZSBsaXN0IGVpdGhlciBhbmQKLQkgKiBjb250aW51ZSBhbmQg
ZnJlZS9kZXN0cm95IGl0LiAgV2hpbGUgaG9sZGluZyB0aGUgbG9jaywgc3BpbiwgdG8KLQkgKiBh
dm9pZCB0aGUgcmFjZSBjb25kaXRpb24gYXMgc2N0cF9pdGVyYXRvcl93b3JrZXIoKSB3aWxsIGhh
dmUgdG8KLQkgKiB3YWl0IHRvIHJlLWFxdWlyZSB0aGUgbG9jay4KLQkgKi8KLQlpZiAoc2N0cF9p
dF9jdGwuaXRlcmF0b3JfcnVubmluZyAhPSAwIHx8IHNjdHBfaXRfY3RsLmN1cl9pdCAhPSBOVUxM
KSB7Ci0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOwotCQlTQ1RQX1BSSU5URigiJXM6
IEl0ZXJhdG9yIHJ1bm5pbmcgd2hpbGUgd2UgaGVsZCB0aGUgbG9jay4gUmV0cnkuICIKLQkJICAg
ICAgICAgICAgImN1cl9pdD0lcFxuIiwgX19mdW5jX18sIHNjdHBfaXRfY3RsLmN1cl9pdCk7Ci0J
CURFTEFZKDEwKTsKLQkJZ290byByZXRyeTsKLQl9Ci0jZW5kaWYKLQlUQUlMUV9GT1JFQUNIX1NB
RkUoaXQsICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIHNjdHBfbnh0X2l0ciwgbml0KSB7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0J
CWlmIChpdC0+dm4gIT0gY3Vydm5ldCkgewotCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgotCQlU
QUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7
Ci0JCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgewotCQkJKCppdC0+ZnVuY3Rpb25f
YXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7Ci0JCX0KLQkJU0NUUF9GUkVFKGl0LFNDVFBf
TV9JVEVSKTsKLQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JU0NUUF9JVEVS
QVRPUl9MT0NLKCk7Ci0JaWYgKChzY3RwX2l0X2N0bC5jdXJfaXQpICYmCi0JICAgIChzY3RwX2l0
X2N0bC5jdXJfaXQtPnZuID09IGN1cnZuZXQpKSB7Ci0JCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2Zs
YWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJfSVQ7Ci0JfQotCVNDVFBfSVRFUkFUT1JfVU5M
T0NLKCk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlTQ1RQX0lQSV9JVEVS
QVRPUl9XUV9ERVNUUk9ZKCk7Ci0JU0NUUF9JVEVSQVRPUl9MT0NLX0RFU1RST1koKTsKLSNlbmRp
ZgotCVNDVFBfT1NfVElNRVJfU1RPUF9EUkFJTigmU0NUUF9CQVNFX0lORk8oYWRkcl93cV90aW1l
ci50aW1lcikpOwotCVNDVFBfV1FfQUREUl9MT0NLKCk7Ci0JTElTVF9GT1JFQUNIX1NBRkUod2ks
ICZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSwgc2N0cF9ueHRfYWRkciwgbndpKSB7Ci0JCUxJU1Rf
UkVNT1ZFKHdpLCBzY3RwX254dF9hZGRyKTsKLQkJU0NUUF9ERUNSX0xBRERSX0NPVU5UKCk7Ci0J
CWlmICh3aS0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKLQkJCVNDVFBfRlJFRSh3
aS0+aWZhLCBTQ1RQX01fSUZBKTsKLQkJfQotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9sYWRkciksIHdpKTsKLQl9Ci0JU0NUUF9XUV9BRERSX1VOTE9DSygpOwotCi0J
LyoKLQkgKiBmcmVlIHRoZSB2cmYvaWZuL2lmYSBsaXN0cyBhbmQgaGFzaGVzIChiZSBzdXJlIGFk
ZHJlc3MgbW9uaXRvcgotCSAqIGlzIGRlc3Ryb3llZCBmaXJzdCkuCi0JICovCi0JdnJmX2J1Y2tl
dCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpWyhTQ1RQX0RFRkFVTFRfVlJGSUQgJiBT
Q1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpXTsKLQlMSVNUX0ZPUkVBQ0hfU0FGRSh2cmYsIHZy
Zl9idWNrZXQsIG5leHRfdnJmLCBudnJmKSB7Ci0JCUxJU1RfRk9SRUFDSF9TQUZFKGlmbiwgJnZy
Zi0+aWZubGlzdCwgbmV4dF9pZm4sIG5pZm4pIHsKLQkJCUxJU1RfRk9SRUFDSF9TQUZFKGlmYSwg
Jmlmbi0+aWZhbGlzdCwgbmV4dF9pZmEsIG5pZmEpIHsKLQkJCQkvKiBmcmVlIHRoZSBpZmEgKi8K
LQkJCQlMSVNUX1JFTU9WRShpZmEsIG5leHRfYnVja2V0KTsKLQkJCQlMSVNUX1JFTU9WRShpZmEs
IG5leHRfaWZhKTsKLQkJCQlTQ1RQX0ZSRUUoaWZhLCBTQ1RQX01fSUZBKTsKLQkJCX0KLQkJCS8q
IGZyZWUgdGhlIGlmbiAqLwotCQkJTElTVF9SRU1PVkUoaWZuLCBuZXh0X2J1Y2tldCk7Ci0JCQlM
SVNUX1JFTU9WRShpZm4sIG5leHRfaWZuKTsKLQkJCVNDVFBfRlJFRShpZm4sIFNDVFBfTV9JRk4p
OwotCQl9Ci0JCVNDVFBfSEFTSF9GUkVFKHZyZi0+dnJmX2FkZHJfaGFzaCwgdnJmLT52cmZfYWRk
cl9oYXNobWFyayk7Ci0JCS8qIGZyZWUgdGhlIHZyZiAqLwotCQlMSVNUX1JFTU9WRSh2cmYsIG5l
eHRfdnJmKTsKLQkJU0NUUF9GUkVFKHZyZiwgU0NUUF9NX1ZSRik7Ci0JfQotCS8qIGZyZWUgdGhl
IHZyZiBoYXNoZXMgKi8KLQlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhh
c2gpLCBTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpOwotCVNDVFBfSEFTSF9GUkVFKFNDVFBf
QkFTRV9JTkZPKHZyZl9pZm5faGFzaCksIFNDVFBfQkFTRV9JTkZPKHZyZl9pZm5faGFzaG1hcmsp
KTsKLQotCS8qIGZyZWUgdGhlIFRJTUVXQUlUIGxpc3QgZWxlbWVudHMgbWFsbG9jJ2QgaW4gdGhl
IGZ1bmN0aW9uCi0JICogc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdCgpLi4uCi0JICovCi0JZm9y
IChpID0gMDsgaSA8IFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkU7IGkrKykgewotCQljaGFpbiA9
ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVtpXTsKLQkJaWYgKCFMSVNUX0VNUFRZKGNo
YWluKSkgewotCQkJcHJldl90d2FpdF9ibG9jayA9IE5VTEw7Ci0JCQlMSVNUX0ZPUkVBQ0godHdh
aXRfYmxvY2ssIGNoYWluLCBzY3RwX254dF90YWdibG9jaykgewotCQkJCWlmIChwcmV2X3R3YWl0
X2Jsb2NrKSB7Ci0JCQkJCVNDVFBfRlJFRShwcmV2X3R3YWl0X2Jsb2NrLCBTQ1RQX01fVElNVyk7
Ci0JCQkJfQotCQkJCXByZXZfdHdhaXRfYmxvY2sgPSB0d2FpdF9ibG9jazsKLQkJCX0KLQkJCVND
VFBfRlJFRShwcmV2X3R3YWl0X2Jsb2NrLCBTQ1RQX01fVElNVyk7Ci0JCX0KLQl9Ci0KLQkvKiBm
cmVlIHRoZSBsb2NrcyBhbmQgbXV0ZXhlcyAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVND
VFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9QQUNLRVRfTE9H
R0lORwotCVNDVFBfSVBfUEtUTE9HX0RFU1RST1koKTsKLSNlbmRpZgotCVNDVFBfSVBJX0FERFJf
REVTVFJPWSgpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfSVBJX0NPVU5UX0RFU1RS
T1koKTsKLSNlbmRpZgotCVNDVFBfU1RBVExPR19ERVNUUk9ZKCk7Ci0JU0NUUF9JTlBfSU5GT19M
T0NLX0RFU1RST1koKTsKLQotCVNDVFBfV1FfQUREUl9ERVNUUk9ZKCk7Ci0KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVf
U05PV0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VO
VEFJTkxJT04pCi0JbGNrX2dycF9hdHRyX2ZyZWUoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10
eF9ncnBfYXR0cik7Ci0JbGNrX2dycF9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhf
Z3JwKTsKLQlsY2tfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfYXR0cik7
Ci0jZWxzZQotCWxja19ncnBfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlf
bG9ja19ncnBfYXR0cik7Ci0JbGNrX2dycF9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5p
cGlfbG9ja19ncnApOwotCWxja19hdHRyX2ZyZWUoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlw
aV9sb2NrX2F0dHIpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCk7Ci0JU0NUUF9aT05FX0RFU1RST1koem9uZV9t
YnVmKTsKLQlTQ1RQX1pPTkVfREVTVFJPWSh6b25lX2NsdXN0KTsKLQlTQ1RQX1pPTkVfREVTVFJP
WSh6b25lX2V4dF9yZWZjbnQpOwotI2VuZGlmCi0JLyogR2V0IHJpZCBvZiBvdGhlciBzdHVmZiB0
b28uICovCi0JaWYgKFNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpICE9IE5VTEwpCi0JCVND
VFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpLCBTQ1RQX0JBU0VfSU5G
TyhoYXNoYXNvY21hcmspKTsKLQlpZiAoU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpICE9IE5V
TEwpCi0JCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKSwgU0NUUF9C
QVNFX0lORk8oaGFzaG1hcmspKTsKLQlpZiAoU0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gp
ICE9IE5VTEwpCi0JCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNo
KSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKTsKLQotI2lmIGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlT
Q1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCkpOwotCVNDVFBfWk9O
RV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpKTsKLQlTQ1RQX1pPTkVfREVT
VFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkcikpOwotCVNDVFBfWk9ORV9ERVNUUk9Z
KFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCkpOwotCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBf
QkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSk7Ci0JU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfcmVhZHEpKTsKLQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9zdHJtb3EpKTsKLQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhp
cGlfem9uZV9hc2NvbmYpKTsKLQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlf
em9uZV9hc2NvbmZfYWNrKSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBk
ZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RBVCkKLQlTQ1RQX0ZSRUUo
U0NUUF9CQVNFX1NUQVRTLCBTQ1RQX01fTUNPUkUpOwotI2VuZGlmCi19Ci0KLQotaW50Ci1zY3Rw
X2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBt
YnVmICptLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IGxp
bWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMs
IHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNvY2thZGRyICphbHRzYSwgdWludDE2X3QgcG9ydCkKLXsKLQkvKgotCSAqIGdydWIgdGhy
b3VnaCB0aGUgSU5JVCBwdWxsaW5nIGFkZHJlc3NlcyBhbmQgbG9hZGluZyB0aGVtIHRvIHRoZQot
CSAqIG5ldHMgc3RydWN0dXJlIGluIHRoZSBhc29jLiBUaGUgZnJvbSBhZGRyZXNzIGluIHRoZSBt
YnVmIHNob3VsZAotCSAqIGFsc28gYmUgbG9hZGVkIChpZiBpdCBpcyBub3QgYWxyZWFkeSkuIFRo
aXMgcm91dGluZSBjYW4gYmUgY2FsbGVkCi0JICogd2l0aCBlaXRoZXIgSU5JVCBvciBJTklULUFD
SydzIGFzIGxvbmcgYXMgdGhlIG0gcG9pbnRzIHRvIHRoZSBJUAotCSAqIHBhY2tldCBhbmQgdGhl
IG9mZnNldCBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFyYW1ldGVycy4KLQkgKi8K
LQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKm5uZXQs
ICpuZXRfdG1wOwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbV9idWY7Ci0Jc3Ry
dWN0IHNjdHBfdGNiICpzdGNiX3RtcDsKLQl1aW50MTZfdCBwdHlwZSwgcGxlbjsKLQlzdHJ1Y3Qg
c29ja2FkZHIgKnNhOwotCXVpbnQ4X3QgcmFuZG9tX3N0b3JlW1NDVFBfUEFSQU1fQlVGRkVSX1NJ
WkVdOwotCXN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICpwX3JhbmRvbSA9IE5VTEw7Ci0JdWludDE2
X3QgcmFuZG9tX2xlbiA9IDA7Ci0JdWludDhfdCBobWFjc19zdG9yZVtTQ1RQX1BBUkFNX0JVRkZF
Ul9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqaG1hY3MgPSBOVUxMOwotCXVp
bnQxNl90IGhtYWNzX2xlbiA9IDA7Ci0JdWludDhfdCBzYXdfYXNjb25mID0gMDsKLQl1aW50OF90
IHNhd19hc2NvbmZfYWNrID0gMDsKLQl1aW50OF90IGNodW5rc19zdG9yZVtTQ1RQX1BBUkFNX0JV
RkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rcyA9IE5VTEw7
Ci0JdWludDE2X3QgbnVtX2NodW5rcyA9IDA7Ci0Jc2N0cF9rZXlfdCAqbmV3X2tleTsKLQl1aW50
MzJfdCBrZXlsZW47Ci0JaW50IGdvdF9yYW5kb20gPSAwLCBnb3RfaG1hY3MgPSAwLCBnb3RfY2hr
bGlzdCA9IDA7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX2VjbjsKLQl1aW50OF90IHBlZXJfc3Vw
cG9ydHNfcHJzY3RwOwotCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19hdXRoOwotCXVpbnQ4X3QgcGVl
cl9zdXBwb3J0c19hc2NvbmY7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX2FzY29uZl9hY2s7Ci0J
dWludDhfdCBwZWVyX3N1cHBvcnRzX3JlY29uZmlnOwotCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19u
cnNhY2s7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX3BrdGRyb3A7Ci0JdWludDhfdCBwZWVyX3N1
cHBvcnRzX2lkYXRhOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2Vu
ZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQot
CS8qIEZpcnN0IGdldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBzZXR1cCB0b28uICovCi0jaWZk
ZWYgSU5FVAotCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7Ci0Jc2luLnNpbl9mYW1pbHkg
PSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHNp
bik7Ci0jZW5kaWYKLQlzaW4uc2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JbWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2luNikpOwotCXNpbjYuc2luNl9mYW1p
bHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi5zaW42X2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCXNpbjYuc2luNl9wb3J0ID0gc3Rj
Yi0+cnBvcnQ7Ci0jZW5kaWYKLQlpZiAoYWx0c2EpIHsKLQkJc2EgPSBhbHRzYTsKLQl9IGVsc2Ug
ewotCQlzYSA9IHNyYzsKLQl9Ci0JcGVlcl9zdXBwb3J0c19pZGF0YSA9IDA7Ci0JcGVlcl9zdXBw
b3J0c19lY24gPSAwOwotCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMDsKLQlwZWVyX3N1cHBvcnRz
X2F1dGggPSAwOwotCXBlZXJfc3VwcG9ydHNfYXNjb25mID0gMDsKLQlwZWVyX3N1cHBvcnRzX3Jl
Y29uZmlnID0gMDsKLQlwZWVyX3N1cHBvcnRzX25yc2FjayA9IDA7Ci0JcGVlcl9zdXBwb3J0c19w
a3Rkcm9wID0gMDsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7Ci0JCS8qIG1hcmsgYWxsIGFkZHJlc3NlcyB0aGF0IHdlIGhhdmUgY3VycmVudGx5IG9u
IHRoZSBsaXN0ICovCi0JCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9UX0lOX0FTU09D
OwotCX0KLQkvKiBkb2VzIHRoZSBzb3VyY2UgYWRkcmVzcyBhbHJlYWR5IGV4aXN0PyBpZiBzbyBz
a2lwIGl0ICovCi0JaW5wID0gc3RjYi0+c2N0cF9lcDsKLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotCXN0Y2JfdG1wID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRk
cigmaW5wLCBzYSwgJm5ldF90bXAsIGRzdCwgc3RjYik7Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAtMSk7Ci0KLQlpZiAoKHN0Y2JfdG1wID09IE5VTEwgJiYgaW5wID09IHN0
Y2ItPnNjdHBfZXApIHx8IGlucCA9PSBOVUxMKSB7Ci0JCS8qIHdlIG11c3QgYWRkIHRoZSBzb3Vy
Y2UgYWRkcmVzcyAqLwotCQkvKiBubyBzY29wZSBzZXQgaGVyZSBzaW5jZSB3ZSBoYXZlIGEgdGNi
IGFscmVhZHkuICovCi0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJ
Y2FzZSBBRl9JTkVUOgotCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7
Ci0JCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQ
X0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURfQUREUl8yKSkgewotCQkJCQlyZXR1cm4gKC0xKTsK
LQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZf
SU5FVDY6Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQlp
ZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBvcnQsIFNDVFBfRE9OT1Rf
U0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzMpKSB7Ci0JCQkJCXJldHVybiAoLTIpOwotCQkJCX0K
LQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlj
YXNlIEFGX0NPTk46Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5jb25uX2FkZHJfbGVnYWwpIHsK
LQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBvcnQsIFNDVFBf
RE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzMpKSB7Ci0JCQkJCXJldHVybiAoLTIpOwot
CQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJ
fQotCX0gZWxzZSB7Ci0JCWlmIChuZXRfdG1wICE9IE5VTEwgJiYgc3RjYl90bXAgPT0gc3RjYikg
ewotCQkJbmV0X3RtcC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PVF9JTl9BU1NPQzsKLQkJ
fSBlbHNlIGlmIChzdGNiX3RtcCAhPSBzdGNiKSB7Ci0JCQkvKiBJdCBiZWxvbmdzIHRvIGFub3Ro
ZXIgYXNzb2NpYXRpb24/ICovCi0JCQlpZiAoc3RjYl90bXApCi0JCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2JfdG1wKTsKLQkJCXJldHVybiAoLTMpOwotCQl9Ci0JfQotCWlmIChzdGNiLT5hc29jLnN0
YXRlID09IDApIHsKLQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KLQkJcmV0dXJuICgtNCk7
Ci0JfQotCS8qIG5vdyB3ZSBtdXN0IGdvIHRocm91Z2ggZWFjaCBvZiB0aGUgcGFyYW1zLiAqLwot
CXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1Ziwgc2l6ZW9m
KHBhcmFtX2J1ZikpOwotCXdoaWxlIChwaGRyKSB7Ci0JCXB0eXBlID0gbnRvaHMocGhkci0+cGFy
YW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOwotCQkvKgotCQkg
KiBTQ1RQX1BSSU5URigicHR5cGUgPT4gJTB4LCBwbGVuID0+ICVkXG4iLCAodWludDMyX3QpcHR5
cGUsCi0JCSAqIChpbnQpcGxlbik7Ci0JCSAqLwotCQlpZiAob2Zmc2V0ICsgcGxlbiA+IGxpbWl0
KSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocGxlbiA9PSAwKSB7Ci0JCQlicmVhazsKLQkJfQot
I2lmZGVmIElORVQKLQkJaWYgKHB0eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSB7Ci0JCQlpZiAo
c3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKLQkJCQlzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSAqcDQsIHA0X2J1ZjsKLQotCQkJCS8qIG9rIGdldCB0aGUgdjQgYWRkcmVzcyBh
bmQgY2hlY2svYWRkICovCi0JCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0
LAotCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNF9idWYsCi0JCQkJCQkJICAg
c2l6ZW9mKHA0X2J1ZikpOwotCQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSkgfHwKLQkJCQkgICAgcGhkciA9PSBOVUxMKSB7Ci0JCQkJCXJldHVybiAoLTUp
OwotCQkJCX0KLQkJCQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7Ci0J
CQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHA0LT5hZGRyOwotCQkJCWlmIChJTl9NVUxUSUNBU1Qo
bnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQkJCS8qIFNraXAgbXVsdGktY2FzdCBh
ZGRyZXNzZXMgKi8KLQkJCQkJZ290byBuZXh0X3BhcmFtOwotCQkJCX0KLQkJCQlpZiAoKHNpbi5z
aW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJCQkgICAgKHNpbi5zaW5f
YWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkpIHsKLQkJCQkJZ290byBuZXh0X3BhcmFtOwotCQkJ
CX0KLQkJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQkJCWlucCA9IHN0Y2ItPnNj
dHBfZXA7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCQlz
dGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZuZXQsCi0J
CQkJCQkJCQlkc3QsIHN0Y2IpOwotCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgLTEpOwotCi0JCQkJaWYgKChzdGNiX3RtcCA9PSBOVUxMICYmIGlucCA9PSBzdGNiLT5zY3Rw
X2VwKSB8fAotCQkJCSAgICBpbnAgPT0gTlVMTCkgewotCQkJCQkvKiB3ZSBtdXN0IGFkZCB0aGUg
c291cmNlIGFkZHJlc3MgKi8KLQkJCQkJLyoKLQkJCQkJICogbm8gc2NvcGUgc2V0IHNpbmNlIHdl
IGhhdmUgYSB0Y2IKLQkJCQkJICogYWxyZWFkeQotCQkJCQkgKi8KLQotCQkJCQkvKgotCQkJCQkg
KiB3ZSBtdXN0IHZhbGlkYXRlIHRoZSBzdGF0ZSBhZ2FpbgotCQkJCQkgKiBoZXJlCi0JCQkJCSAq
LwotCQkJCWFkZF9pdF9ub3c6Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKLQkJ
CQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCi0JCQkJCQlyZXR1cm4gKC03KTsKLQkJCQkJ
fQotCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBvcnQsIFND
VFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzQpKSB7Ci0JCQkJCQlyZXR1cm4gKC04
KTsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAoc3RjYl90bXAgPT0gc3RjYikgewotCQkJCQlpZiAo
c3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZyZWVkPyAq
LwotCQkJCQkJcmV0dXJuICgtMTApOwotCQkJCQl9Ci0JCQkJCWlmIChuZXQgIT0gTlVMTCkgewot
CQkJCQkJLyogY2xlYXIgZmxhZyAqLwotCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9Ci0JCQkJCQkJ
flNDVFBfQUREUl9OT1RfSU5fQVNTT0M7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvKgot
CQkJCQkgKiBzdHJhbmdlLCBhZGRyZXNzIGlzIGluIGFub3RoZXIKLQkJCQkJICogYXNzb2M/IHN0
cmFpZ2h0ZW4gb3V0IGxvY2tzLgotCQkJCQkgKi8KLQkJCQkJaWYgKHN0Y2JfdG1wKSB7Ci0JCQkJ
CQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2JfdG1wLT5hc29jKSAmIFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpIHsKLQkJCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCQkJCQkJCWNoYXIgbXNnW1ND
VFBfRElBR19JTkZPX0xFTl07Ci0KLQkJCQkJCQkvKiBpbiBzZXR1cCBzdGF0ZSB3ZSBhYm9ydCB0
aGlzIGd1eSAqLwotCQkJCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCi0JCQkJCQkJICAg
ICAgICAgIiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCQkJ
CQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlh
Z19pbmZvX2NvZGUpLAotCQkJCQkJCSAgICAgICAgIG1zZyk7Ci0JCQkJCQkJc2N0cF9hYm9ydF9h
bl9hc3NvY2lhdGlvbihzdGNiX3RtcC0+c2N0cF9lcCwKLQkJCQkJCQkJCQkgIHN0Y2JfdG1wLCBv
cF9lcnIsCi0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCQkJCQkJCWdvdG8gYWRkX2l0X25vdzsKLQkJCQkJCX0KLQkJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiX3RtcCk7Ci0JCQkJCX0KLQotCQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAw
KSB7Ci0JCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZyZWVkPyAqLwotCQkJCQkJcmV0dXJuICgtMTIp
OwotCQkJCQl9Ci0JCQkJCXJldHVybiAoLTEzKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZQotI2Vu
ZGlmCi0jaWZkZWYgSU5FVDYKLQkJaWYgKHB0eXBlID09IFNDVFBfSVBWNl9BRERSRVNTKSB7Ci0J
CQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQkvKiBvayBnZXQg
dGhlIHY2IGFkZHJlc3MgYW5kIGNoZWNrL2FkZCAqLwotCQkJCXN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtICpwNiwgcDZfYnVmOwotCi0JCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwg
b2Zmc2V0LAotCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNl9idWYsCi0JCQkJ
CQkJICAgc2l6ZW9mKHA2X2J1ZikpOwotCQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY2YWRkcl9wYXJhbSkgfHwKLQkJCQkgICAgcGhkciA9PSBOVUxMKSB7Ci0JCQkJCXJldHVy
biAoLTE0KTsKLQkJCQl9Ci0JCQkJcDYgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilw
aGRyOwotCQkJCW1lbWNweSgoY2FkZHJfdCkmc2luNi5zaW42X2FkZHIsIHA2LT5hZGRyLAotCQkJ
CSAgICAgICBzaXplb2YocDYtPmFkZHIpKTsKLQkJCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNU
KCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJLyogU2tpcCBtdWx0aS1jYXN0IGFkZHJlc3NlcyAq
LwotCQkJCQlnb3RvIG5leHRfcGFyYW07Ci0JCQkJfQotCQkJCWlmIChJTjZfSVNfQUREUl9MSU5L
TE9DQUwoJnNpbjYuc2luNl9hZGRyKSkgewotCQkJCQkvKiBMaW5rIGxvY2FsIG1ha2Ugbm8gc2Vu
c2Ugd2l0aG91dCBzY29wZSAqLwotCQkJCQlnb3RvIG5leHRfcGFyYW07Ci0JCQkJfQotCQkJCXNh
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OwotCQkJCWlucCA9IHN0Y2ItPnNjdHBfZXA7Ci0J
CQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCQlzdGNiX3RtcCA9
IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZuZXQsCi0JCQkJCQkJCQlk
c3QsIHN0Y2IpOwotCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwot
CQkJCWlmIChzdGNiX3RtcCA9PSBOVUxMICYmCi0JCQkJICAgIChpbnAgPT0gc3RjYi0+c2N0cF9l
cCB8fCBpbnAgPT0gTlVMTCkpIHsKLQkJCQkJLyoKLQkJCQkJICogd2UgbXVzdCB2YWxpZGF0ZSB0
aGUgc3RhdGUgYWdhaW4KLQkJCQkJICogaGVyZQotCQkJCQkgKi8KLQkJCQlhZGRfaXRfbm93NjoK
LQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgewotCQkJCQkJLyogdGhlIGFzc29jIHdh
cyBmcmVlZD8gKi8KLQkJCQkJCXJldHVybiAoLTE2KTsKLQkJCQkJfQotCQkJCQkvKgotCQkJCQkg
KiB3ZSBtdXN0IGFkZCB0aGUgYWRkcmVzcywgbm8gc2NvcGUKLQkJCQkJICogc2V0Ci0JCQkJCSAq
LwotCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBvcnQsIFND
VFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzUpKSB7Ci0JCQkJCQlyZXR1cm4gKC0x
Nyk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKHN0Y2JfdG1wID09IHN0Y2IpIHsKLQkJCQkJLyoK
LQkJCQkJICogd2UgbXVzdCB2YWxpZGF0ZSB0aGUgc3RhdGUgYWdhaW4KLQkJCQkJICogaGVyZQot
CQkJCQkgKi8KLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgewotCQkJCQkJLyogdGhl
IGFzc29jIHdhcyBmcmVlZD8gKi8KLQkJCQkJCXJldHVybiAoLTE5KTsKLQkJCQkJfQotCQkJCQlp
ZiAobmV0ICE9IE5VTEwpIHsKLQkJCQkJCS8qIGNsZWFyIGZsYWcgKi8KLQkJCQkJCW5ldC0+ZGVz
dF9zdGF0ZSAmPQotCQkJCQkJCX5TQ1RQX0FERFJfTk9UX0lOX0FTU09DOwotCQkJCQl9Ci0JCQkJ
fSBlbHNlIHsKLQkJCQkJLyoKLQkJCQkJICogc3RyYW5nZSwgYWRkcmVzcyBpcyBpbiBhbm90aGVy
Ci0JCQkJCSAqIGFzc29jPyBzdHJhaWdodGVuIG91dCBsb2Nrcy4KLQkJCQkJICovCi0JCQkJCWlm
IChzdGNiX3RtcCkgewotCQkJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiX3RtcC0+YXNvYykg
JiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB7Ci0JCQkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsK
LQkJCQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQkJCQkJLyogaW4gc2V0
dXAgc3RhdGUgd2UgYWJvcnQgdGhpcyBndXkgKi8KLQkJCQkJCQlzbnByaW50Zihtc2csIHNpemVv
Zihtc2cpLAotCQkJCQkJCSAgICAgICAgICIlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVf
XywgX19mdW5jX18pOwotCQkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkJCQkgICAgICAgICBtc2cpOwot
CQkJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYl90bXAtPnNjdHBfZXAsCi0JCQkJ
CQkJCQkJICBzdGNiX3RtcCwgb3BfZXJyLAotCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJCQlnb3RvIGFkZF9pdF9ub3c2OwotCQkJCQkJ
fQotCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2JfdG1wKTsKLQkJCQkJfQotCQkJCQlpZiAoc3Rj
Yi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZyZWVkPyAqLwot
CQkJCQkJcmV0dXJuICgtMjEpOwotCQkJCQl9Ci0JCQkJCXJldHVybiAoLTIyKTsKLQkJCQl9Ci0J
CQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCWlmIChwdHlwZSA9PSBTQ1RQX0VDTl9DQVBBQkxFKSB7
Ci0JCQlwZWVyX3N1cHBvcnRzX2VjbiA9IDE7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9V
TFBfQURBUFRBVElPTikgewotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgIT0gU0NUUF9TVEFURV9P
UEVOKSB7Ci0JCQkJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uIGFpLCAq
YWlwOwotCi0JCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJ
CSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZhaSwgc2l6ZW9mKGFpKSk7Ci0JCQkJYWlwID0g
KHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqKXBoZHI7Ci0JCQkJaWYg
KGFpcCkgewotCQkJCQlzdGNiLT5hc29jLnBlZXJzX2FkYXB0YXRpb24gPSBudG9obChhaXAtPmlu
ZGljYXRpb24pOwotCQkJCQlzdGNiLT5hc29jLmFkYXB0YXRpb25fbmVlZGVkID0gMTsKLQkJCQl9
Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TRVRfUFJJTV9BRERSKSB7Ci0JCQlz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSBsc3RvcmUsICpmZWU7Ci0JCQlpbnQgbHB0eXBl
OwotCQkJc3RydWN0IHNvY2thZGRyICpsc2EgPSBOVUxMOwotI2lmZGVmIElORVQKLQkJCXN0cnVj
dCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0gKmZpaTsKLSNlbmRpZgotCi0JCQlpZiAoc3RjYi0+
YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsKLQkJCQlyZXR1cm4gKC0xMDApOwotCQkJfQot
CQkJaWYgKHBsZW4gPiBzaXplb2YobHN0b3JlKSkgewotCQkJCXJldHVybiAoLTIzKTsKLQkJCX0K
LQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCQkJCSAgIChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKSZsc3RvcmUsCi0JCQkJCQkgICBwbGVuKTsKLQkJCWlmIChwaGRy
ID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKC0yNCk7Ci0JCQl9Ci0JCQlmZWUgPSAoc3RydWN0IHNj
dHBfYXNjb25mX2FkZHJfcGFyYW0gKilwaGRyOwotCQkJbHB0eXBlID0gbnRvaHMoZmVlLT5hZGRy
cC5waC5wYXJhbV90eXBlKTsKLQkJCXN3aXRjaCAobHB0eXBlKSB7Ci0jaWZkZWYgSU5FVAotCQkJ
Y2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJCQlpZiAocGxlbiAhPQotCQkJCSAgICBzaXplb2Yo
c3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSkpIHsKLQkJCQkJU0NUUF9QUklOVEYoIlNp
emVvZiBzZXRwcmltIGluIGluaXQvaW5pdCBhY2sgbm90ICVkIGJ1dCAlZCAtIGlnbm9yZWRcbiIs
Ci0JCQkJCQkgICAgKGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSks
Ci0JCQkJCQkgICAgcGxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmlpID0gKHN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRydjRfcGFyYW0gKilmZWU7Ci0JCQkJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBm
aWktPmFkZHJwLmFkZHI7Ci0JCQkJCWxzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQkJ
CX0KLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIFNDVFBfSVBWNl9B
RERSRVNTOgotCQkJCWlmIChwbGVuICE9Ci0JCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWRkcl9wYXJhbSkpIHsKLQkJCQkJU0NUUF9QUklOVEYoIlNpemVvZiBzZXRwcmltICh2Nikg
aW4gaW5pdC9pbml0IGFjayBub3QgJWQgYnV0ICVkIC0gaWdub3JlZFxuIiwKLQkJCQkJCSAgICAo
aW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSksCi0JCQkJCQkgICAgcGxl
bik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVtY3B5KHNpbjYuc2luNl9hZGRyLnM2X2FkZHIsCi0J
CQkJCSAgICAgICBmZWUtPmFkZHJwLmFkZHIsCi0JCQkJCSAgICAgICBzaXplb2YoZmVlLT5hZGRy
cC5hZGRyKSk7Ci0JCQkJCWxzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKLQkJCQl9Ci0J
CQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAo
bHNhKSB7Ci0JCQkJKHZvaWQpc2N0cF9zZXRfcHJpbWFyeV9hZGRyKHN0Y2IsIHNhLCBOVUxMKTsK
LQkJCX0KLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0hBU19OQVRfU1VQUE9SVCkgewotCQkJ
c3RjYi0+YXNvYy5wZWVyX3N1cHBvcnRzX25hdCA9IDE7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0g
U0NUUF9QUlNDVFBfU1VQUE9SVEVEKSB7Ci0JCQkvKiBQZWVyIHN1cHBvcnRzIHByLXNjdHAgKi8K
LQkJCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMTsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQ
X1NVUFBPUlRFRF9DSFVOS19FWFQpIHsKLQkJCS8qIEEgc3VwcG9ydGVkIGV4dGVuc2lvbiBjaHVu
ayAqLwotCQkJc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtICpwcl9zdXBw
b3J0ZWQ7Ci0JCQl1aW50OF90IGxvY2FsX3N0b3JlW1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOwot
CQkJaW50IG51bV9lbnQsIGk7Ci0KLQkJCWlmIChwbGVuID4gc2l6ZW9mKGxvY2FsX3N0b3JlKSkg
ewotCQkJCXJldHVybiAoLTM1KTsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFt
KG0sIG9mZnNldCwKLQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZsb2NhbF9zdG9y
ZSwgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuICgtMjUpOwotCQkJ
fQotCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19w
YXJhbSAqKXBoZHI7Ci0JCQludW1fZW50ID0gcGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkcik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7Ci0JCQkJc3dpdGNoIChw
cl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7Ci0JCQkJY2FzZSBTQ1RQX0FTQ09ORjoKLQkJ
CQkJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBf
QVNDT05GX0FDSzoKLQkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmZfYWNrID0gMTsKLQkJCQkJYnJl
YWs7Ci0JCQkJY2FzZSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjoKLQkJCQkJcGVlcl9zdXBwb3J0c19w
cnNjdHAgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBfUEFDS0VUX0RST1BQRUQ6Ci0J
CQkJCXBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NU
UF9OUl9TRUxFQ1RJVkVfQUNLOgotCQkJCQlwZWVyX3N1cHBvcnRzX25yc2FjayA9IDE7Ci0JCQkJ
CWJyZWFrOwotCQkJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6Ci0JCQkJCXBlZXJfc3VwcG9ydHNf
cmVjb25maWcgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBfQVVUSEVOVElDQVRJT046
Ci0JCQkJCXBlZXJfc3VwcG9ydHNfYXV0aCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NU
UF9JREFUQToKLQkJCQkJcGVlcl9zdXBwb3J0c19pZGF0YSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJ
CWRlZmF1bHQ6Ci0JCQkJCS8qIG9uZSBJIGhhdmUgbm90IGxlYXJuZWQgeWV0ICovCi0JCQkJCWJy
ZWFrOwotCi0JCQkJfQotCQkJfQotCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfUkFORE9NKSB7
Ci0JCQlpZiAocGxlbiA+IHNpemVvZihyYW5kb21fc3RvcmUpKQotCQkJCWJyZWFrOwotCQkJaWYg
KGdvdF9yYW5kb20pIHsKLQkJCQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBhIFJBTkRPTSAqLwotCQkJ
CWdvdG8gbmV4dF9wYXJhbTsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0s
IG9mZnNldCwKLQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXJhbmRvbV9zdG9yZSwK
LQkJCQkJCSAgIHBsZW4pOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkKLQkJCQlyZXR1cm4gKC0yNik7
Ci0JCQlwX3JhbmRvbSA9IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKXBoZHI7Ci0JCQlyYW5k
b21fbGVuID0gcGxlbiAtIHNpemVvZigqcF9yYW5kb20pOwotCQkJLyogZW5mb3JjZSB0aGUgcmFu
ZG9tIGxlbmd0aCAqLwotCQkJaWYgKHJhbmRvbV9sZW4gIT0gU0NUUF9BVVRIX1JBTkRPTV9TSVpF
X1JFUVVJUkVEKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAiU0NUUDogaW52YWxp
ZCBSQU5ET00gbGVuXG4iKTsKLQkJCQlyZXR1cm4gKC0yNyk7Ci0JCQl9Ci0JCQlnb3RfcmFuZG9t
ID0gMTsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0hNQUNfTElTVCkgewotCQkJdWludDE2
X3QgbnVtX2htYWNzOwotCQkJdWludDE2X3QgaTsKLQotCQkJaWYgKHBsZW4gPiBzaXplb2YoaG1h
Y3Nfc3RvcmUpKQotCQkJCWJyZWFrOwotCQkJaWYgKGdvdF9obWFjcykgewotCQkJCS8qIGFscmVh
ZHkgcHJvY2Vzc2VkIGEgSE1BQyBsaXN0ICovCi0JCQkJZ290byBuZXh0X3BhcmFtOwotCQkJfQot
CQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJICAgKHN0cnVj
dCBzY3RwX3BhcmFtaGRyICopaG1hY3Nfc3RvcmUsCi0JCQkJCQkgICBwbGVuKTsKLQkJCWlmIChw
aGRyID09IE5VTEwpCi0JCQkJcmV0dXJuICgtMjgpOwotCQkJaG1hY3MgPSAoc3RydWN0IHNjdHBf
YXV0aF9obWFjX2FsZ28gKilwaGRyOwotCQkJaG1hY3NfbGVuID0gcGxlbiAtIHNpemVvZigqaG1h
Y3MpOwotCQkJbnVtX2htYWNzID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGhtYWNzLT5obWFjX2lkc1sw
XSk7Ci0JCQkvKiB2YWxpZGF0ZSB0aGUgaG1hYyBsaXN0ICovCi0JCQlpZiAoc2N0cF92ZXJpZnlf
aG1hY19wYXJhbShobWFjcywgbnVtX2htYWNzKSkgewotCQkJCXJldHVybiAoLTI5KTsKLQkJCX0K
LQkJCWlmIChzdGNiLT5hc29jLnBlZXJfaG1hY3MgIT0gTlVMTCkKLQkJCQlzY3RwX2ZyZWVfaG1h
Y2xpc3Qoc3RjYi0+YXNvYy5wZWVyX2htYWNzKTsKLQkJCXN0Y2ItPmFzb2MucGVlcl9obWFjcyA9
IHNjdHBfYWxsb2NfaG1hY2xpc3QobnVtX2htYWNzKTsKLQkJCWlmIChzdGNiLT5hc29jLnBlZXJf
aG1hY3MgIT0gTlVMTCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBudW1faG1hY3M7IGkrKykgewot
CQkJCQkodm9pZClzY3RwX2F1dGhfYWRkX2htYWNpZChzdGNiLT5hc29jLnBlZXJfaG1hY3MsCi0J
CQkJCQkJCSAgIG50b2hzKGhtYWNzLT5obWFjX2lkc1tpXSkpOwotCQkJCX0KLQkJCX0KLQkJCWdv
dF9obWFjcyA9IDE7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9DSFVOS19MSVNUKSB7Ci0J
CQlpbnQgaTsKLQotCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkKLQkJCQlicmVh
azsKLQkJCWlmIChnb3RfY2hrbGlzdCkgewotCQkJCS8qIGFscmVhZHkgcHJvY2Vzc2VkIGEgQ2h1
bmtzIGxpc3QgKi8KLQkJCQlnb3RvIG5leHRfcGFyYW07Ci0JCQl9Ci0JCQlwaGRyID0gc2N0cF9n
ZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCi0JCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KiljaHVua3Nfc3RvcmUsCi0JCQkJCQkgICBwbGVuKTsKLQkJCWlmIChwaGRyID09IE5VTEwpCi0J
CQkJcmV0dXJuICgtMzApOwotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlz
dCAqKXBoZHI7Ci0JCQludW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtzKTsKLQkJCWlm
IChzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MgIT0gTlVMTCkKLQkJCQlzY3RwX2NsZWFyX2No
dW5rbGlzdChzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpOwotCQkJZWxzZQotCQkJCXN0Y2It
PmFzb2MucGVlcl9hdXRoX2NodW5rcyA9IHNjdHBfYWxsb2NfY2h1bmtsaXN0KCk7Ci0JCQlmb3Ig
KGkgPSAwOyBpIDwgbnVtX2NodW5rczsgaSsrKSB7Ci0JCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9j
aHVuayhjaHVua3MtPmNodW5rX3R5cGVzW2ldLAotCQkJCQkJCSAgc3RjYi0+YXNvYy5wZWVyX2F1
dGhfY2h1bmtzKTsKLQkJCQkvKiByZWNvcmQgYXNjb25mL2FzY29uZi1hY2sgaWYgbGlzdGVkICov
Ci0JCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9BU0NPTkYpCi0JCQkJCXNh
d19hc2NvbmYgPSAxOwotCQkJCWlmIChjaHVua3MtPmNodW5rX3R5cGVzW2ldID09IFNDVFBfQVND
T05GX0FDSykKLQkJCQkJc2F3X2FzY29uZl9hY2sgPSAxOwotCi0JCQl9Ci0JCQlnb3RfY2hrbGlz
dCA9IDE7Ci0JCX0gZWxzZSBpZiAoKHB0eXBlID09IFNDVFBfSEVBUlRCRUFUX0lORk8pIHx8Ci0J
CQkgICAocHR5cGUgPT0gU0NUUF9TVEFURV9DT09LSUUpIHx8Ci0JCQkgICAocHR5cGUgPT0gU0NU
UF9VTlJFQ09HX1BBUkFNKSB8fAotCQkJICAgKHB0eXBlID09IFNDVFBfQ09PS0lFX1BSRVNFUlZF
KSB8fAotCQkJICAgKHB0eXBlID09IFNDVFBfU1VQUE9SVEVEX0FERFJUWVBFKSB8fAotCQkJICAg
KHB0eXBlID09IFNDVFBfQUREX0lQX0FERFJFU1MpIHx8Ci0JCQkgICAocHR5cGUgPT0gU0NUUF9E
RUxfSVBfQUREUkVTUykgfHwKLQkJCSAgIChwdHlwZSA9PSBTQ1RQX0VSUk9SX0NBVVNFX0lORCkg
fHwKLQkJCSAgIChwdHlwZSA9PSBTQ1RQX1NVQ0NFU1NfUkVQT1JUKSkgewotCQkJLyogZG9uJ3Qg
Y2FyZSAqLyA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHB0eXBlICYgMHg4MDAwKSA9PSAweDAwMDAp
IHsKLQkJCQkvKgotCQkJCSAqIG11c3Qgc3RvcCBwcm9jZXNzaW5nIHRoZSByZXN0IG9mIHRoZQot
CQkJCSAqIHBhcmFtJ3MuIEFueSByZXBvcnQgYml0cyB3ZXJlIGhhbmRsZWQKLQkJCQkgKiB3aXRo
IHRoZSBjYWxsIHRvCi0JCQkJICogc2N0cF9hcmV0aGVyZV91bnJlY29nbml6ZWRfcGFyYW1ldGVy
cygpCi0JCQkJICogd2hlbiB0aGUgSU5JVCBvciBJTklULUFDSyB3YXMgZmlyc3Qgc2Vlbi4KLQkJ
CQkgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JbmV4dF9wYXJhbToKLQkJb2Zmc2V0ICs9
IFNDVFBfU0laRTMyKHBsZW4pOwotCQlpZiAob2Zmc2V0ID49IGxpbWl0KSB7Ci0JCQlicmVhazsK
LQkJfQotCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYs
Ci0JCQkJCSAgIHNpemVvZihwYXJhbV9idWYpKTsKLQl9Ci0JLyogTm93IGNoZWNrIHRvIHNlZSBp
ZiB3ZSBuZWVkIHRvIHB1cmdlIGFueSBhZGRyZXNzZXMgKi8KLQlUQUlMUV9GT1JFQUNIX1NBRkUo
bmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQsIG5uZXQpIHsKLQkJaWYgKChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9UX0lOX0FTU09DKSA9PQotCQkgICAgU0NUUF9BRERSX05P
VF9JTl9BU1NPQykgewotCQkJLyogVGhpcyBhZGRyZXNzIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0
aGUgYXNvYyAqLwotCQkJLyogcmVtb3ZlIGFuZCBmcmVlIGl0ICovCi0JCQlzdGNiLT5hc29jLm51
bW5ldHMtLTsKLQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4
dCk7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIobmV0KTsKLQkJCWlmIChuZXQgPT0gc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7Ci0JCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uID0gTlVMTDsKLQkJCQlzY3RwX3NlbGVjdF9wcmltYXJ5X2Rlc3RpbmF0aW9uKHN0Y2Ip
OwotCQkJfQotCQl9Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDEpICYm
Ci0JICAgIChwZWVyX3N1cHBvcnRzX2VjbiA9PSAwKSkgewotCQlzdGNiLT5hc29jLmVjbl9zdXBw
b3J0ZWQgPSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9PSAxKSAm
JgotCSAgICAocGVlcl9zdXBwb3J0c19wcnNjdHAgPT0gMCkpIHsKLQkJc3RjYi0+YXNvYy5wcnNj
dHBfc3VwcG9ydGVkID0gMDsKLQl9Ci0JaWYgKChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09
IDEpICYmCi0JICAgICgocGVlcl9zdXBwb3J0c19hdXRoID09IDApIHx8Ci0JICAgICAoZ290X3Jh
bmRvbSA9PSAwKSB8fCAoZ290X2htYWNzID09IDApKSkgewotCQlzdGNiLT5hc29jLmF1dGhfc3Vw
cG9ydGVkID0gMDsKLQl9Ci0JaWYgKChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkg
JiYKLQkgICAgKChwZWVyX3N1cHBvcnRzX2FzY29uZiA9PSAwKSB8fCAocGVlcl9zdXBwb3J0c19h
c2NvbmZfYWNrID09IDApIHx8Ci0JICAgICAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAw
KSB8fAotCSAgICAgKHNhd19hc2NvbmYgPT0gMCkgfHwgKHNhd19hc2NvbmZfYWNrID09IDApKSkg
ewotCQlzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFz
b2MucmVjb25maWdfc3VwcG9ydGVkID09IDEpICYmCi0JICAgIChwZWVyX3N1cHBvcnRzX3JlY29u
ZmlnID09IDApKSB7Ci0JCXN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID0gMDsKLQl9Ci0J
aWYgKChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAxKSAmJgotCSAgICAocGVlcl9zdXBw
b3J0c19pZGF0YSA9PSAwKSkgewotCQlzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9IDA7Ci0J
fQotCWlmICgoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEpICYmCi0JICAgIChwZWVy
X3N1cHBvcnRzX25yc2FjayA9PSAwKSkgewotCQlzdGNiLT5hc29jLm5yc2Fja19zdXBwb3J0ZWQg
PSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMSkgJiYKLQkg
ICAgKHBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9PSAwKSl7Ci0JCXN0Y2ItPmFzb2MucGt0ZHJvcF9z
dXBwb3J0ZWQgPSAwOwotCX0KLQkvKiB2YWxpZGF0ZSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCBw
YXJhbWV0ZXJzICovCi0JaWYgKChwZWVyX3N1cHBvcnRzX2F1dGggPT0gMCkgJiYgKGdvdF9jaGts
aXN0ID09IDEpKSB7Ci0JCS8qIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBhdXRoIGJ1dCBzZW50IGEg
Y2h1bmtzIGxpc3Q/ICovCi0JCXJldHVybiAoLTMxKTsKLQl9Ci0JaWYgKChwZWVyX3N1cHBvcnRz
X2FzY29uZiA9PSAxKSAmJiAocGVlcl9zdXBwb3J0c19hdXRoID09IDApKSB7Ci0JCS8qIHBlZXIg
c3VwcG9ydHMgYXNjb25mIGJ1dCBub3QgYXV0aD8gKi8KLQkJcmV0dXJuICgtMzIpOwotCX0gZWxz
ZSBpZiAoKHBlZXJfc3VwcG9ydHNfYXNjb25mID09IDEpICYmCi0JICAgICAgICAgICAocGVlcl9z
dXBwb3J0c19hdXRoID09IDEpICYmCi0JCSAgICgoc2F3X2FzY29uZiA9PSAwKSB8fCAoc2F3X2Fz
Y29uZl9hY2sgPT0gMCkpKSB7Ci0JCXJldHVybiAoLTMzKTsKLQl9Ci0JLyogY29uY2F0ZW5hdGUg
dGhlIGZ1bGwgcmFuZG9tIGtleSAqLwotCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsgcmFu
ZG9tX2xlbiArIHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuOwotCWlmIChjaHVua3MgIT0gTlVM
TCkgewotCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKLQl9Ci0JbmV3
X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JaWYgKG5ld19rZXkgIT0gTlVMTCkgewot
CQkvKiBjb3B5IGluIHRoZSBSQU5ET00gKi8KLQkJaWYgKHBfcmFuZG9tICE9IE5VTEwpIHsKLQkJ
CWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbjsKLQkJCW1lbWNweShuZXdf
a2V5LT5rZXksIHBfcmFuZG9tLCBrZXlsZW4pOwotCQl9Ci0JCS8qIGFwcGVuZCBpbiB0aGUgQVVU
SCBjaHVua3MgKi8KLQkJaWYgKGNodW5rcyAhPSBOVUxMKSB7Ci0JCQltZW1jcHkobmV3X2tleS0+
a2V5ICsga2V5bGVuLCBjaHVua3MsCi0JCQkgICAgICAgc2l6ZW9mKCpjaHVua3MpICsgbnVtX2No
dW5rcyk7Ci0JCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKLQkJfQot
CQkvKiBhcHBlbmQgaW4gdGhlIEhNQUNzICovCi0JCWlmIChobWFjcyAhPSBOVUxMKSB7Ci0JCQlt
ZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBobWFjcywKLQkJCSAgICAgICBzaXplb2YoKmht
YWNzKSArIGhtYWNzX2xlbik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBmYWlsZWQgdG8gZ2V0IG1l
bW9yeSBmb3IgdGhlIGtleSAqLwotCQlyZXR1cm4gKC0zNCk7Ci0JfQotCWlmIChzdGNiLT5hc29j
LmF1dGhpbmZvLnBlZXJfcmFuZG9tICE9IE5VTEwpCi0JCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNv
Yy5hdXRoaW5mby5wZWVyX3JhbmRvbSk7Ci0Jc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRv
bSA9IG5ld19rZXk7Ci0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0
aGluZm8uYXNzb2Nfa2V5aWQpOwotCXNjdHBfY2xlYXJfY2FjaGVka2V5cyhzdGNiLCBzdGNiLT5h
c29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1zY3Rw
X3NldF9wcmltYXJ5X2FkZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIg
KnNhLAotCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JLyogbWFrZSBzdXJlIHRo
ZSByZXF1ZXN0ZWQgcHJpbWFyeSBhZGRyZXNzIGV4aXN0cyBpbiB0aGUgYXNzb2MgKi8KLQlpZiAo
bmV0ID09IE5VTEwgJiYgc2EpCi0JCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBzYSk7Ci0KLQlp
ZiAobmV0ID09IE5VTEwpIHsKLQkJLyogZGlkbid0IGZpbmQgdGhlIHJlcXVlc3RlZCBwcmltYXJ5
IGFkZHJlc3MhICovCi0JCXJldHVybiAoLTEpOwotCX0gZWxzZSB7Ci0JCS8qIHNldCB0aGUgcHJp
bWFyeSBhZGRyZXNzICovCi0JCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQpIHsKLQkJCS8qIE11c3QgYmUgY29uZmlybWVkLCBzbyBxdWV1ZSB0byBzZXQgKi8KLQkJ
CW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVRX1BSSU1BUlk7Ci0JCQlyZXR1cm4gKDAp
OwotCQl9Ci0JCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IG5ldDsKLQkJaWYgKCEo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSAmJiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUp
KSB7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJ
c3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOwotCQl9Ci0JCW5ldCA9IFRBSUxRX0ZJUlNUKCZz
dGNiLT5hc29jLm5ldHMpOwotCQlpZiAobmV0ICE9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbikgewotCQkJLyogZmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlzIE5PVCB0aGUgcHJpbWFyeQot
CQkJICogc2N0cF9jbXBhZGRyKCkgaXMgbXVjaCBtb3JlIGVmZmljaWVudCBpZgotCQkJICogdGhl
IHByaW1hcnkgaXMgdGhlIGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0Ci0JCQkgKiBzby4KLQkJ
CSAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKLQkJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5h
c29jLm5ldHMsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKLQkJ
fQotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotaW50Ci1zY3RwX2lzX3Z0YWdfZ29vZCh1aW50MzJf
dCB0YWcsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgc3RydWN0IHRpbWV2YWwgKm5v
dykKLXsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gc2VydmVzIHR3byBwdXJwb3Nlcy4gSXQgd2ls
bCBzZWUgaWYgYSBUQUcgY2FuIGJlCi0JICogcmUtdXNlZCBhbmQgcmV0dXJuIDEgZm9yIHllcyBp
dCBpcyBvayBhbmQgMCBmb3IgZG9uJ3QgdXNlIHRoYXQKLQkgKiB0YWcuIEEgc2Vjb25kYXJ5IGZ1
bmN0aW9uIGl0IHdpbGwgZG8gaXMgcHVyZ2Ugb3V0IG9sZCB0YWdzIHRoYXQKLQkgKiBjYW4gYmUg
cmVtb3ZlZC4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKLQlzdHJ1Y3Qgc2N0
cF90YWdibG9jayAqdHdhaXRfYmxvY2s7Ci0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JaW50IGk7Ci0KLQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7
Ci0JaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNP
Qyh0YWcsCi0JCQkJCQkJCVNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQlMSVNUX0ZP
UkVBQ0goc3RjYiwgaGVhZCwgc2N0cF9hc29jcykgewotCQkvKiBXZSBjaG9vc2Ugbm90IHRvIGxv
Y2sgYW55dGhpbmcgaGVyZS4gVENCJ3MgY2FuJ3QgYmUKLQkJICogcmVtb3ZlZCBzaW5jZSB3ZSBo
YXZlIHRoZSByZWFkIGxvY2ssIHNvIHRoZXkgY2FuJ3QKLQkJICogYmUgZnJlZWQgb24gdXMsIHNh
bWUgdGhpbmcgZm9yIHRoZSBJTlAuIEkgbWF5Ci0JCSAqIGJlIHdyb25nIHdpdGggdGhpcyBhc3N1
bXB0aW9uLCBidXQgd2Ugd2lsbCBnbwotCQkgKiB3aXRoIGl0IGZvciBub3cgOi0pCi0JCSAqLwot
CQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9B
TExHT05FKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5teV92dGFnID09
IHRhZykgewotCQkJLyogY2FuZGlkYXRlICovCi0JCQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQp
IHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0
ICE9IGxwb3J0KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBJdHMgYSB1c2VkIHRhZyBz
ZXQgKi8KLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJcmV0dXJuICgwKTsKLQkJfQot
CX0KLQljaGFpbiA9ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVsodGFnICUgU0NUUF9T
VEFDS19WVEFHX0hBU0hfU0laRSldOwotCS8qIE5vdyB3aGF0IGFib3V0IHRpbWVkIHdhaXQgPyAq
LwotCUxJU1RfRk9SRUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7
Ci0JCS8qCi0JCSAqIEJsb2NrKHMpIGFyZSBwcmVzZW50LCBsZXRzIHNlZSBpZiB3ZSBoYXZlIHRo
aXMgdGFnIGluIHRoZQotCQkgKiBsaXN0Ci0JCSAqLwotCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9O
VU1CRVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7Ci0JCQlpZiAodHdhaXRfYmxvY2stPnZ0YWdfYmxv
Y2tbaV0udl90YWcgPT0gMCkgewotCQkJCS8qIG5vdCB1c2VkICovCi0JCQkJY29udGludWU7Ci0J
CQl9IGVsc2UgaWYgKChsb25nKXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9l
eHBpcmUgIDwKLQkJCQkgICBub3ctPnR2X3NlYykgewotCQkJCS8qIEF1ZGl0IGV4cGlyZXMgdGhp
cyBndXkgKi8KLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJl
ID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IDA7Ci0JCQkJdHdh
aXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOwotCQkJCXR3YWl0X2Jsb2NrLT52dGFn
X2Jsb2NrW2ldLnJwb3J0ID0gMDsKLQkJCX0gZWxzZSBpZiAoKHR3YWl0X2Jsb2NrLT52dGFnX2Js
b2NrW2ldLnZfdGFnID09IHRhZykgJiYKLQkJCQkgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tb
aV0ubHBvcnQgPT0gbHBvcnQpICYmCi0JCQkJICAgKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnJwb3J0ID09IHJwb3J0KSkgewotCQkJCS8qIEJhZCB0YWcsIHNvcnJ5IDo8ICovCi0JCQkJU0NU
UF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJfQotCX0KLQlT
Q1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgdm9pZAot
c2N0cF9kcmFpbl9tYnVmcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17Ci0JLyoKLQkgKiBXZSBt
dXN0IGh1bnQgdGhpcyBhc3NvY2lhdGlvbiBmb3IgTUJVRidzIHBhc3QgdGhlIGN1bWFjayAoaS5l
LgotCSAqIG91dCBvZiBvcmRlciBkYXRhIHRoYXQgd2UgY2FuIHJlbmVnZSBvbikuCi0JICovCi0J
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrLCAqbmNoazsKLQl1aW50MzJfdCBjdW11bGF0aXZlX3Rzbl9wMTsKLQlzdHJ1Y3Qgc2N0cF9x
dWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jb250cm9sOwotCWludCBjbnQsIHN0cm1hdDsKLQl1
aW50MzJfdCBnYXAsIGk7Ci0JaW50IGZuZCA9IDA7Ci0KLQkvKiBXZSBsb29rIGZvciBhbnl0aGlu
ZyBsYXJnZXIgdGhhbiB0aGUgY3VtLWFjayArIDEgKi8KLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsK
LQlpZiAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gPT0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21h
cCkgewotCQkvKiBub25lIHdlIGNhbiByZW5lZyBvbi4gKi8KLQkJcmV0dXJuOwotCX0KLQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZSk7Ci0JY3VtdWxhdGl2ZV90c25f
cDEgPSBhc29jLT5jdW11bGF0aXZlX3RzbiArIDE7Ci0JY250ID0gMDsKLQkvKiBPayB0aGF0IHdh
cyBmdW4sIG5vdyB3ZSB3aWxsIGRyYWluIGFsbCB0aGUgaW5ib3VuZCBzdHJlYW1zPyAqLwotCWZv
ciAoc3RybWF0ID0gMDsgc3RybWF0IDwgYXNvYy0+c3RyZWFtaW5jbnQ7IHN0cm1hdCsrKSB7Ci0J
CVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+c3RybWluW3N0cm1hdF0uaW5xdWV1
ZSwgbmV4dF9pbnN0cm0sIG5jb250cm9sKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJaWYgKGNv
bnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX09SREVSRUQgKSB7Ci0JCQkJcGFuaWMoIkh1aCBj
b250cm9sOiAlcCBvbl9xOiAlZCAtLSBub3Qgb3JkZXJlZD8iLAotCQkJCSAgICAgIGNvbnRyb2ws
IGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChTQ1RQX1RTTl9HVChj
b250cm9sLT5zaW5mb190c24sIGN1bXVsYXRpdmVfdHNuX3AxKSkgewotCQkJCS8qIFllcCBpdCBp
cyBhYm92ZSBjdW0tYWNrICovCi0JCQkJY250Kys7Ci0JCQkJU0NUUF9DQUxDX1RTTl9UT19HQVAo
Z2FwLCBjb250cm9sLT5zaW5mb190c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwot
CQkJCUtBU1NFUlQoY29udHJvbC0+bGVuZ3RoID4gMCwgKCJjb250cm9sIGhhcyB6ZXJvIGxlbmd0
aCIpKTsKLQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5n
dGgpIHsKLQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7
Ci0JCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCXBhbmljKCJzaXplX29uX2Fs
bF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0JCQkJCWFzb2MtPnNp
emVfb25fYWxsX3N0cmVhbXMgPSAwOwotI2VuZGlmCi0JCQkJfQotCQkJCXNjdHBfdWNvdW50X2Rl
Y3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQkJCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5U
KGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkg
ewotCQkJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPnNjdHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2ws
IG5leHQpOwotCQkJCQljb250cm9sLT5vbl9yZWFkX3EgPSAwOwotCQkJCX0KLQkJCQlUQUlMUV9S
RU1PVkUoJmFzb2MtPnN0cm1pbltzdHJtYXRdLmlucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJt
KTsKLQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotCQkJCWlmIChjb250cm9sLT5kYXRhKSB7
Ci0JCQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCQkJY29udHJvbC0+ZGF0YSA9
IE5VTEw7Ci0JCQkJfQotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9t
KTsKLQkJCQkvKiBOb3cgaXRzIHJlYXNtPyAqLwotCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGss
ICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQkJCWNudCsrOwotCQkJCQlT
Q1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGNoay0+cmVjLmRhdGEudHNuLCBhc29jLT5tYXBwaW5n
X2FycmF5X2Jhc2VfdHNuKTsKLQkJCQkJS0FTU0VSVChjaGstPnNlbmRfc2l6ZSA+IDAsICgiY2h1
bmsgaGFzIHplcm8gbGVuZ3RoIikpOwotCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1
ZSA+PSBjaGstPnNlbmRfc2l6ZSkgewotCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSAt
PSBjaGstPnNlbmRfc2l6ZTsKLQkJCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJ
CQlwYW5pYygic2l6ZV9vbl9yZWFzbV9xdWV1ZSA9ICV1IHNtYWxsZXIgdGhhbiBjaHVuayBsZW5n
dGggJXUiLCBhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlLCBjaGstPnNlbmRfc2l6ZSk7Ci0jZWxz
ZQotCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9IDA7Ci0jZW5kaWYKLQkJCQkJfQot
CQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7Ci0JCQkJCVND
VFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKLQkJCQkJVEFJ
TFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOwotCQkJCQlpZiAoY2hr
LT5kYXRhKSB7Ci0JCQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQkJCWNoay0+ZGF0
YSA9IE5VTEw7Ci0JCQkJCX0KLQkJCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOwotCQkJCX0KLQkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250
cm9sKTsKLQkJCX0KLQkJfQotCQlUQUlMUV9GT1JFQUNIX1NBRkUoY29udHJvbCwgJmFzb2MtPnN0
cm1pbltzdHJtYXRdLnVub19pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKLSNpZmRl
ZiBJTlZBUklBTlRTCi0JCQlpZiAoY29udHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fVU5PUkRF
UkVEICkgewotCQkJCXBhbmljKCJIdWggY29udHJvbDogJXAgb25fcTogJWQgLS0gbm90IHVub3Jk
ZXJlZD8iLAotCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0JCQl9Ci0j
ZW5kaWYKLQkJCWlmIChTQ1RQX1RTTl9HVChjb250cm9sLT5zaW5mb190c24sIGN1bXVsYXRpdmVf
dHNuX3AxKSkgewotCQkJCS8qIFllcCBpdCBpcyBhYm92ZSBjdW0tYWNrICovCi0JCQkJY250Kys7
Ci0JCQkJU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBjb250cm9sLT5zaW5mb190c24sIGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCQkJCUtBU1NFUlQoY29udHJvbC0+bGVuZ3RoID4g
MCwgKCJjb250cm9sIGhhcyB6ZXJvIGxlbmd0aCIpKTsKLQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9h
bGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxf
c3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7Ci0JCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklB
TlRTCi0JCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNv
bnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVu
Z3RoKTsKLSNlbHNlCi0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOwotI2VuZGlm
Ci0JCQkJfQotCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsK
LQkJCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0J
CQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgewotCQkJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPnNj
dHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCQljb250cm9sLT5vbl9yZWFk
X3EgPSAwOwotCQkJCX0KLQkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnN0cm1pbltzdHJtYXRdLnVu
b19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJY29udHJvbC0+b25fc3RybV9x
ID0gMDsKLQkJCQlpZiAoY29udHJvbC0+ZGF0YSkgewotCQkJCQlzY3RwX21fZnJlZW0oY29udHJv
bC0+ZGF0YSk7Ci0JCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOwotCQkJCX0KLQkJCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+d2hvRnJvbSk7Ci0JCQkJLyogTm93IGl0cyByZWFzbT8g
Ki8KLQkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4
dCwgbmNoaykgewotCQkJCQljbnQrKzsKLQkJCQkJU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBj
aGstPnJlYy5kYXRhLnRzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7Ci0JCQkJCUtB
U1NFUlQoY2hrLT5zZW5kX3NpemUgPiAwLCAoImNodW5rIGhhcyB6ZXJvIGxlbmd0aCIpKTsKLQkJ
CQkJaWYgKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0gY2hrLT5zZW5kX3NpemUpIHsKLQkJ
CQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5zZW5kX3NpemU7Ci0JCQkJCX0g
ZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQkJcGFuaWMoInNpemVfb25fcmVhc21fcXVl
dWUgPSAldSBzbWFsbGVyIHRoYW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9yZWFz
bV9xdWV1ZSwgY2hrLT5zZW5kX3NpemUpOwotI2Vsc2UKLQkJCQkJCWFzb2MtPnNpemVfb25fcmVh
c21fcXVldWUgPSAwOwotI2VuZGlmCi0JCQkJCX0KLQkJCQkJc2N0cF91Y291bnRfZGVjcihhc29j
LT5jbnRfb25fcmVhc21fcXVldWUpOwotCQkJCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFzb2Mt
Pm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20s
IGNoaywgc2N0cF9uZXh0KTsKLQkJCQkJaWYgKGNoay0+ZGF0YSkgewotCQkJCQkJc2N0cF9tX2Zy
ZWVtKGNoay0+ZGF0YSk7Ci0JCQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCXNj
dHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9Ci0J
CQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYg
KGNudCkgewotCQkvKiBXZSBtdXN0IGJhY2sgZG93biB0byBzZWUgd2hhdCB0aGUgbmV3IGhpZ2hl
c3QgaXMgKi8KLQkJZm9yIChpID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsgU0NUUF9U
U05fR0UoaSwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7IGktLSkgewotCQkJU0NUUF9D
QUxDX1RTTl9UT19HQVAoZ2FwLCBpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKLQkJ
CWlmIChTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCkpIHsKLQkJ
CQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gaTsKLQkJCQlmbmQgPSAxOwotCQkJCWJy
ZWFrOwotCQkJfQotCQl9Ci0JCWlmICghZm5kKSB7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbWFwID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIDE7Ci0JCX0KLQotCQkvKgot
CQkgKiBRdWVzdGlvbiwgc2hvdWxkIHdlIGdvIHRocm91Z2ggdGhlIGRlbGl2ZXJ5IHF1ZXVlPyBU
aGUgb25seQotCQkgKiByZWFzb24gdGhpbmdzIGFyZSBvbiBoZXJlIGlzIHRoZSBhcHAgbm90IHJl
YWRpbmcgT1IgYSBwLWQtYXBpIHVwLgotCQkgKiBBbiBhdHRhY2tlciBDT1VMRCBzZW5kIGVub3Vn
aCBpbiB0byBpbml0aWF0ZSB0aGUgUEQtQVBJIGFuZCB0aGVuCi0JCSAqIHNlbmQgYSBidW5jaCBv
ZiBzdHVmZiB0byBvdGhlciBzdHJlYW1zLi4uIHRoZXNlIHdvdWxkIHdpbmQgdXAgb24KLQkJICog
dGhlIGRlbGl2ZXJ5IHF1ZXVlLi4gYW5kIHRoZW4gd2Ugd291bGQgbm90IGdldCB0byB0aGVtLiBC
dXQgaW4KLQkJICogb3JkZXIgdG8gZG8gdGhpcyBJIHRoZW4gaGF2ZSB0byBiYWNrLXRyYWNrIGFu
ZCB1bi1kZWxpdmVyCi0JCSAqIHNlcXVlbmNlIG51bWJlcnMgaW4gc3RyZWFtcy4uIGVsLXl1Y2tv
LiBJIHRoaW5rIGZvciBub3cgd2Ugd2lsbAotCQkgKiBOT1QgbG9vayBhdCB0aGUgZGVsaXZlcnkg
cXVldWUgYW5kIGxlYXZlIGl0IHRvIGJlIHNvbWV0aGluZyB0bwotCQkgKiBjb25zaWRlciBsYXRl
ci4gQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gYWJvcnQgdGhlIFAtRC1BUEkgd2l0aAotCQkg
KiBhIG5vdGlmaWNhdGlvbiBhbmQgdGhlbiBkZWxpdmVyIHRoZSBkYXRhLi4uLiBPciBhbm90aGVy
IG1ldGhvZAotCQkgKiBtaWdodCBiZSB0byBrZWVwIHRyYWNrIG9mIGhvdyBtYW55IHRpbWVzIHRo
ZSBzaXR1YXRpb24gb2NjdXJzIGFuZAotCQkgKiBpZiB3ZSBzZWUgYSBwb3NzaWJsZSBhdHRhY2sg
dW5kZXJ3YXkganVzdCBhYm9ydCB0aGUgYXNzb2NpYXRpb24uCi0JCSAqLwotI2lmZGVmIFNDVFBf
REVCVUcKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJGcmVlZCAlZCBjaHVua3MgZnJvbSBy
ZW5lZyBoYXJ2ZXN0XG4iLCBjbnQpOwotI2VuZGlmCi0JCS8qCi0JCSAqIE5vdyBkbyB3ZSBuZWVk
IHRvIGZpbmQgYSBuZXcKLQkJICogYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcD8KLQkJICov
Ci0JCWFzb2MtPmxhc3RfcmV2b2tlX2NvdW50ID0gY250OwotCQkodm9pZClTQ1RQX09TX1RJTUVS
X1NUT1AoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1lcik7Ci0JCS8qc2FfaWdub3JlIE5PX05V
TExfQ0hLKi8KLQkJc2N0cF9zZW5kX3NhY2soc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJ
c2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9E
UkFJTiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0JLyoKLQkgKiBBbm90aGVyIGlzc3VlLCBp
biB1bi1zZXR0aW5nIHRoZSBUU04ncyBpbiB0aGUgbWFwcGluZyBhcnJheSB3ZQotCSAqIERJRCBO
T1QgYWRqdXN0IHRoZSBoaWdoZXN0X3RzbiBtYXJrZXIuICBUaGlzIHdpbGwgY2F1c2Ugb25lIG9m
IHR3bwotCSAqIHRoaW5ncyB0byBvY2N1ci4gSXQgbWF5IGNhdXNlIHVzIHRvIGRvIGV4dHJhIHdv
cmsgaW4gY2hlY2tpbmcgZm9yCi0JICogb3VyIG1hcHBpbmcgYXJyYXkgbW92ZW1lbnQuIE1vcmUg
aW1wb3J0YW50bHkgaXQgbWF5IGNhdXNlIHVzIHRvCi0JICogU0FDSyBldmVyeSBkYXRhZ3JhbS4g
VGhpcyBtYXkgbm90IGJlIGEgYmFkIHRoaW5nIHRob3VnaCBzaW5jZSB3ZQotCSAqIHdpbGwgcmVj
b3ZlciBvbmNlIHdlIGdldCBvdXIgY3VtLWFjayBhYm92ZSBhbmQgYWxsIHRoaXMgc3R1ZmYgd2UK
LQkgKiBkdW1wZWQgcmVjb3ZlcmVkLgotCSAqLwotfQotCi12b2lkCi1zY3RwX2RyYWluKCkKLXsK
LQkvKgotCSAqIFdlIG11c3Qgd2FsayB0aGUgUENCIGxpc3RzIGZvciBBTEwgYXNzb2NpYXRpb25z
IGhlcmUuIFRoZSBzeXN0ZW0KLQkgKiBpcyBMT1cgb24gTUJVRidzIGFuZCBuZWVkcyBoZWxwLiBU
aGlzIGlzIHdoZXJlIHJlbmVnaW5nIHdpbGwKLQkgKiBvY2N1ci4gV2UgcmVhbGx5IGhvcGUgdGhp
cyBkb2VzIE5PVCBoYXBwZW4hCi0JICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JVk5FVF9JVEVSQVRPUl9ERUNMKHZuZXRfaXRlcik7
Ci0jZWxzZQotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNi
OwotCi0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHMpOwotCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsKLQkJcmV0dXJuOwotCX0KLSNl
bmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MTAwMAotCVZORVRfTElTVF9STE9DS19OT1NMRUVQKCk7Ci0JVk5FVF9GT1JFQUNIKHZuZXRfaXRl
cikgewotCQlDVVJWTkVUX1NFVCh2bmV0X2l0ZXIpOwotCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
OwotCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19wcm90b2NvbF9kcmFpbl9jYWxscyk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZG9fZHJhaW4pID09IDApIHsKLSNpZmRlZiBWSU1BR0UKLQkJCWNvbnRpbnVlOwotI2Vsc2UKLQkJ
CXJldHVybjsKLSNlbmRpZgotCQl9Ci0jZW5kaWYKLQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwot
CQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9CQVNFX0lORk8obGlzdGhlYWQpLCBzY3RwX2xpc3Qp
IHsKLQkJCS8qIEZvciBlYWNoIGVuZHBvaW50ICovCi0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwot
CQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3Qp
IHsKLQkJCQkvKiBGb3IgZWFjaCBhc3NvY2lhdGlvbiAqLwotCQkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7Ci0JCQkJc2N0cF9kcmFpbl9tYnVmcyhzdGNiKTsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAxMDAwCi0JCUNVUlZORVRfUkVTVE9SRSgpOwotCX0KLQlWTkVUX0xJU1RfUlVOTE9D
S19OT1NMRUVQKCk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIHN0YXJ0IGEgbmV3IGl0ZXJhdG9yCi0g
KiBpdGVyYXRlcyB0aHJvdWdoIGFsbCBlbmRwb2ludHMgYW5kIGFzc29jaWF0aW9ucyBiYXNlZCBv
biB0aGUgcGNiX3N0YXRlCi0gKiBmbGFncyBhbmQgYXNvY19zdGF0ZS4gICJhZiIgKG1hbmRhdG9y
eSkgaXMgZXhlY3V0ZWQgZm9yIGFsbCBtYXRjaGluZwotICogYXNzb2NzIGFuZCAiZWYiIChvcHRp
b25hbCkgaXMgZXhlY3V0ZWQgd2hlbiB0aGUgaXRlcmF0b3IgY29tcGxldGVzLgotICogImlucGYi
IChvcHRpb25hbCkgaXMgZXhlY3V0ZWQgZm9yIGVhY2ggbmV3IGVuZHBvaW50IGFzIGl0IGlzIGJl
aW5nCi0gKiBpdGVyYXRlZCB0aHJvdWdoLiBpbnBlIChvcHRpb25hbCkgaXMgY2FsbGVkIHdoZW4g
dGhlIGlucCBjb21wbGV0ZXMKLSAqIGl0cyB3YXkgdGhyb3VnaCBhbGwgdGhlIHN0Y2JzLgotICov
Ci1pbnQKLXNjdHBfaW5pdGlhdGVfaXRlcmF0b3IoaW5wX2Z1bmMgaW5wZiwKLQkJICAgICAgIGFz
b2NfZnVuYyBhZiwKLQkJICAgICAgIGlucF9mdW5jIGlucGUsCi0JCSAgICAgICB1aW50MzJfdCBw
Y2Jfc3RhdGUsCi0JCSAgICAgICB1aW50MzJfdCBwY2JfZmVhdHVyZXMsCi0JCSAgICAgICB1aW50
MzJfdCBhc29jX3N0YXRlLAotCQkgICAgICAgdm9pZCAqYXJncCwKLQkJICAgICAgIHVpbnQzMl90
IGFyZ2ksCi0JCSAgICAgICBlbmRfZnVuYyBlZiwKLQkJICAgICAgIHN0cnVjdCBzY3RwX2lucGNi
ICpzX2lucCwKLQkJICAgICAgIHVpbnQ4X3QgY2h1bmtfb3V0cHV0X29mZikKLXsKLQlzdHJ1Y3Qg
c2N0cF9pdGVyYXRvciAqaXQgPSBOVUxMOwotCi0JaWYgKGFmID09IE5VTEwpIHsKLQkJcmV0dXJu
ICgtMSk7Ci0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAw
KSB7Ci0JCVNDVFBfUFJJTlRGKCIlczogYWJvcnQgb24gaW5pdGlhbGl6ZSBiZWluZyAlZFxuIiwg
X19mdW5jX18sCi0JCSAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6
ZWQpKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCVNDVFBfTUFMTE9DKGl0LCBzdHJ1Y3Qgc2N0cF9p
dGVyYXRvciAqLCBzaXplb2Yoc3RydWN0IHNjdHBfaXRlcmF0b3IpLAotCQkgICAgU0NUUF9NX0lU
RVIpOwotCWlmIChpdCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7
Ci0JfQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKCppdCkpOwotCWl0LT5mdW5jdGlvbl9hc3NvYyA9
IGFmOwotCWl0LT5mdW5jdGlvbl9pbnAgPSBpbnBmOwotCWlmIChpbnBmKQotCQlpdC0+ZG9uZV9j
dXJyZW50X2VwID0gMDsKLQllbHNlCi0JCWl0LT5kb25lX2N1cnJlbnRfZXAgPSAxOwotCWl0LT5m
dW5jdGlvbl9hdGVuZCA9IGVmOwotCWl0LT5wb2ludGVyID0gYXJncDsKLQlpdC0+dmFsID0gYXJn
aTsKLQlpdC0+cGNiX2ZsYWdzID0gcGNiX3N0YXRlOwotCWl0LT5wY2JfZmVhdHVyZXMgPSBwY2Jf
ZmVhdHVyZXM7Ci0JaXQtPmFzb2Nfc3RhdGUgPSBhc29jX3N0YXRlOwotCWl0LT5mdW5jdGlvbl9p
bnBfZW5kID0gaW5wZTsKLQlpdC0+bm9fY2h1bmtfb3V0cHV0ID0gY2h1bmtfb3V0cHV0X29mZjsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAK
LQlpdC0+dm4gPSBjdXJ2bmV0OwotI2VuZGlmCi0JaWYgKHNfaW5wKSB7Ci0JCS8qIEFzc3VtZSBs
b2NrIGlzIGhlbGQgaGVyZSAqLwotCQlpdC0+aW5wID0gc19pbnA7Ci0JCVNDVFBfSU5QX0lOQ1Jf
UkVGKGl0LT5pbnApOwotCQlpdC0+aXRlcmF0b3JfZmxhZ3MgPSBTQ1RQX0lURVJBVE9SX0RPX1NJ
TkdMRV9JTlA7Ci0JfSBlbHNlIHsKLQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwotCQlpdC0+aW5w
ID0gTElTVF9GSVJTVCgmU0NUUF9CQVNFX0lORk8obGlzdGhlYWQpKTsKLQkJaWYgKGl0LT5pbnAp
IHsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQl9Ci0JCVNDVFBfSU5QX0lORk9f
UlVOTE9DSygpOwotCQlpdC0+aXRlcmF0b3JfZmxhZ3MgPSBTQ1RQX0lURVJBVE9SX0RPX0FMTF9J
TlA7Ci0KLQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpOwotCWlmIChTQ1RQX0JBU0Vf
VkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7Ci0JCVNDVFBfSVBJX0lURVJBVE9SX1dR
X1VOTE9DSygpOwotCQlTQ1RQX1BSSU5URigiJXM6IHJvbGxiYWNrIG9uIGluaXRpYWxpemUgYmVp
bmcgJWQgaXQ9JXBcbiIsIF9fZnVuY19fLAotCQkgICAgICAgICAgICBTQ1RQX0JBU0VfVkFSKHNj
dHBfcGNiX2luaXRpYWxpemVkKSwgaXQpOwotCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsK
LQkJcmV0dXJuICgtMSk7Ci0JfQotCVRBSUxRX0lOU0VSVF9UQUlMKCZzY3RwX2l0X2N0bC5pdGVy
YXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOwotCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9y
dW5uaW5nID09IDApIHsKLQkJc2N0cF93YWtldXBfaXRlcmF0b3IoKTsKLQl9Ci0JU0NUUF9JUElf
SVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci0JLyogc2FfaWdub3JlIE1FTUxFQUsge21lbW9yeSBpcyBw
dXQgb24gdGhlIHRhaWxxIGZvciB0aGUgaXRlcmF0b3J9ICovCi0JcmV0dXJuICgwKTsKLX0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9wY2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjkzODYyNWI1YjRkZmRj
NGI3OTQxZjg0YjBmZDMwYWNlYTU5YWYxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmgKKysrIC9kZXYvbnVs
bApAQCAtMSw4ODggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGNiLmggMzEw
NTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBf
TkVUSU5FVF9TQ1RQX1BDQl9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1BDQl9IXwotCi0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9z
eXNjdGwuaD4KLQotTElTVF9IRUFEKHNjdHBwY2JoZWFkLCBzY3RwX2lucGNiKTsKLUxJU1RfSEVB
RChzY3RwYXNvY2hlYWQsIHNjdHBfdGNiKTsKLUxJU1RfSEVBRChzY3RwbGFkZHIsIHNjdHBfbGFk
ZHIpOwotTElTVF9IRUFEKHNjdHB2dGFnaGVhZCwgc2N0cF90YWdibG9jayk7Ci1MSVNUX0hFQUQo
c2N0cF92cmZsaXN0LCBzY3RwX3ZyZik7Ci1MSVNUX0hFQUQoc2N0cF9pZm5saXN0LCBzY3RwX2lm
bik7Ci1MSVNUX0hFQUQoc2N0cF9pZmFsaXN0LCBzY3RwX2lmYSk7Ci1UQUlMUV9IRUFEKHNjdHBf
cmVhZGhlYWQsIHNjdHBfcXVldWVkX3RvX3JlYWQpOwotVEFJTFFfSEVBRChzY3RwX3N0cmVhbWhl
YWQsIHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpOwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3N0cnVjdHMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotCi0jZGVmaW5lIFND
VFBfUENCSEFTSF9BTExBRERSKHBvcnQsIG1hc2spIChwb3J0ICYgbWFzaykKLSNkZWZpbmUgU0NU
UF9QQ0JIQVNIX0FTT0ModGFnLCBtYXNrKSAodGFnICYgbWFzaykKLQotc3RydWN0IHNjdHBfdnJm
IHsKLQlMSVNUX0VOVFJZIChzY3RwX3ZyZikgbmV4dF92cmY7Ci0Jc3RydWN0IHNjdHBfaWZhbGlz
dCAqdnJmX2FkZHJfaGFzaDsKLQlzdHJ1Y3Qgc2N0cF9pZm5saXN0IGlmbmxpc3Q7Ci0JdWludDMy
X3QgdnJmX2lkOwotCXVpbnQzMl90IHRibF9pZF92NDsJCS8qIGRlZmF1bHQgdjQgdGFibGUgaWQg
Ki8KLQl1aW50MzJfdCB0YmxfaWRfdjY7CQkvKiBkZWZhdWx0IHY2IHRhYmxlIGlkICovCi0JdWlu
dDMyX3QgdG90YWxfaWZhX2NvdW50OwotCXVfbG9uZyAgIHZyZl9hZGRyX2hhc2htYXJrOwotCXVp
bnQzMl90IHJlZmNvdW50OwotfTsKLQotc3RydWN0IHNjdHBfaWZuIHsKLQlzdHJ1Y3Qgc2N0cF9p
ZmFsaXN0IGlmYWxpc3Q7Ci0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0JTElTVF9FTlRSWShzY3Rw
X2lmbikgbmV4dF9pZm47Ci0JTElTVF9FTlRSWShzY3RwX2lmbikgbmV4dF9idWNrZXQ7Ci0Jdm9p
ZCAgICAgKmlmbl9wOwkvKiBuZXZlciBhY2Nlc3Mgd2l0aG91dCBhcHByb3ByaWF0ZSBsb2NrICov
Ci0JdWludDMyX3QgaWZuX210dTsKLQl1aW50MzJfdCBpZm5fdHlwZTsKLQl1aW50MzJfdCBpZm5f
aW5kZXg7CS8qIHNob3J0aGFuZCB3YXkgdG8gbG9vayBhdCBpZm4gZm9yIHJlZmVyZW5jZSAqLwot
CXVpbnQzMl90IHJlZmNvdW50OwkvKiBudW1iZXIgb2YgcmVmZXJlbmNlIGhlbGQgc2hvdWxkIGJl
ID49IGlmYV9jb3VudCAqLwotCXVpbnQzMl90IGlmYV9jb3VudDsJLyogSUZBJ3Mgd2UgaG9sZCAo
aW4gb3VyIGxpc3QgLSBpZmFsaXN0KSovCi0JdWludDMyX3QgbnVtX3Y2OwkvKiBudW1iZXIgb2Yg
djYgYWRkcmVzc2VzICovCi0JdWludDMyX3QgbnVtX3Y0OwkvKiBudW1iZXIgb2YgdjQgYWRkcmVz
c2VzICovCi0JdWludDMyX3QgcmVnaXN0ZXJlZF9hZjsJLyogcmVnaXN0ZXJlZCBhZGRyZXNzIGZh
bWlseSBmb3IgaS9mIGV2ZW50cyAqLwotCWNoYXIgICAgIGlmbl9uYW1lW1NDVFBfSUZOQU1TSVpd
OwotfTsKLQotLyogU0NUUCBsb2NhbCBJRkEgZmxhZ3MgKi8KLSNkZWZpbmUgU0NUUF9BRERSX1ZB
TElEICAgICAgICAgMHgwMDAwMDAwMQkvKiBpdHMgdXAgYW5kIGFjdGl2ZSAqLwotI2RlZmluZSBT
Q1RQX0JFSU5HX0RFTEVURUQgICAgICAweDAwMDAwMDAyCS8qIGJlaW5nIGRlbGV0ZWQsCi0JCQkJ
CQkgKiB3aGVuIHJlZmNvdW50ID0gMC4gTm90ZQotCQkJCQkJICogdGhhdCBpdCBpcyBwdWxsZWQg
ZnJvbSB0aGUgaWZuIGxpc3QKLQkJCQkJCSAqIGFuZCBpZmFfcCBpcyBudWxsZWQgcmlnaHQgYXdh
eSBidXQKLQkJCQkJCSAqIGl0IGNhbm5vdCBiZSBmcmVlZCB1bnRpbCB0aGUgbGFzdCAqbmV0Ci0J
CQkJCQkgKiBwb2ludGluZyB0byBpdCBpcyBkZWxldGVkLgotCQkJCQkJICovCi0jZGVmaW5lIFND
VFBfQUREUl9ERUZFUl9VU0UgICAgIDB4MDAwMDAwMDQJLyogSG9sZCBvZmYgdXNpbmcgdGhpcyBv
bmUgKi8KLSNkZWZpbmUgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUgMHgwMDAwMDAwOAotCi1zdHJ1
Y3Qgc2N0cF9pZmEgewotCUxJU1RfRU5UUlkoc2N0cF9pZmEpIG5leHRfaWZhOwotCUxJU1RfRU5U
Ulkoc2N0cF9pZmEpIG5leHRfYnVja2V0OwotCXN0cnVjdCBzY3RwX2lmbiAqaWZuX3A7CS8qIGJh
Y2sgcG9pbnRlciB0byBwYXJlbnQgaWZuICovCi0Jdm9pZCAgICAqaWZhOwkJLyogcG9pbnRlciB0
byBpZmEsIG5lZWRlZCBmb3IgZmxhZwotCQkJCSAqIHVwZGF0ZSBmb3IgdGhhdCB3ZSBNVVNUIGxv
Y2sKLQkJCQkgKiBhcHByb3ByaWF0ZSBsb2Nrcy4gVGhpcyBpcyBmb3IgVjYuCi0JCQkJICovCi0J
dW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcmVzczsKLQl1aW50MzJfdCByZWZjb3VudDsJLyogbnVt
YmVyIG9mIGZvbGtzIHJlZmVycmluZyB0byB0aGlzICovCi0JdWludDMyX3QgZmxhZ3M7Ci0JdWlu
dDMyX3QgbG9jYWxpZmFfZmxhZ3M7Ci0JdWludDMyX3QgdnJmX2lkOwkvKiB2cmZfaWQgb2YgdGhp
cyBhZGRyIChmb3IgZGVsZXRpbmcpICovCi0JdWludDhfdCBzcmNfaXNfbG9vcDsKLQl1aW50OF90
IHNyY19pc19wcml2OwotCXVpbnQ4X3Qgc3JjX2lzX2dsb2I7Ci0JdWludDhfdCByZXN2OwotfTsK
LQotc3RydWN0IHNjdHBfbGFkZHIgewotCUxJU1RfRU5UUlkoc2N0cF9sYWRkcikgc2N0cF9ueHRf
YWRkcjsJLyogbmV4dCBpbiBsaXN0ICovCi0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0JdWludDMy
X3QgYWN0aW9uOwkJLyogVXNlZCBkdXJpbmcgYXNjb25mIGFuZCBhZGRpbmcKLQkJCQkJICogaWYg
bm8temVybyBzcmMtYWRkciBzZWxlY3Rpb24gd2lsbAotCQkJCQkgKiBub3QgY29uc2lkZXIgdGhp
cyBhZGRyZXNzLgotCQkJCQkgKi8KLQlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOyAgICAgIC8q
IHRpbWUgd2hlbiB0aGlzIGFkZHJlc3Mgd2FzIGNyZWF0ZWQgKi8KLX07Ci0KLXN0cnVjdCBzY3Rw
X2Jsb2NrX2VudHJ5IHsKLQlpbnQgZXJyb3I7Ci19OwotCi1zdHJ1Y3Qgc2N0cF90aW1ld2FpdCB7
Ci0JdWludDMyX3QgdHZfc2VjX2F0X2V4cGlyZTsJLyogdGhlIHNlY29uZHMgZnJvbSBib290IHRv
IGV4cGlyZSAqLwotICAgICAgICB1aW50MzJfdCB2X3RhZzsJCSAgICAgICAgLyogdGhlIHZ0YWcg
dGhhdCBjYW4gbm90IGJlIHJldXNlZCAqLwotICAgICAgICB1aW50MTZfdCBscG9ydDsgICAgICAg
ICAgICAgICAgIC8qIHRoZSBsb2NhbCBwb3J0IHVzZWQgaW4gdnRhZyAqLwotICAgICAgICB1aW50
MTZfdCBycG9ydDsgICAgICAgICAgICAgICAgIC8qIHRoZSByZW1vdGUgcG9ydCB1c2VkIGluIHZ0
YWcgKi8KLX07Ci0KLXN0cnVjdCBzY3RwX3RhZ2Jsb2NrIHsKLQlMSVNUX0VOVFJZKHNjdHBfdGFn
YmxvY2spIHNjdHBfbnh0X3RhZ2Jsb2NrOwotCXN0cnVjdCBzY3RwX3RpbWV3YWl0IHZ0YWdfYmxv
Y2tbU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DS107Ci19OwotCi0KLXN0cnVjdCBzY3RwX2VwaW5m
byB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2tl
dCAqdWRwNF90dW5fc29ja2V0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2V0
ICp1ZHA2X3R1bl9zb2NrZXQ7Ci0jZW5kaWYKLSNlbmRpZgotCXN0cnVjdCBzY3RwYXNvY2hlYWQg
KnNjdHBfYXNvY2hhc2g7Ci0JdV9sb25nIGhhc2hhc29jbWFyazsKLQotCXN0cnVjdCBzY3RwcGNi
aGVhZCAqc2N0cF9lcGhhc2g7Ci0JdV9sb25nIGhhc2htYXJrOwotCi0JLyotCi0JICogVGhlIFRD
UCBtb2RlbCByZXByZXNlbnRzIGEgc3Vic3RhbnRpYWwgb3ZlcmhlYWQgaW4gdGhhdCB3ZSBnZXQg
YW4KLQkgKiBhZGRpdGlvbmFsIGhhc2ggdGFibGUgdG8ga2VlcCBleHBsaWNpdCBjb25uZWN0aW9u
cyBpbi4gVGhlCi0JICogbGlzdGVuaW5nIFRDUCBlbmRwb2ludCB3aWxsIGV4aXN0IGluIHRoZSB1
c3VhbCBlcGhhc2ggYWJvdmUgYW5kCi0JICogYWNjZXB0IG9ubHkgSU5JVCdzLiBJdCB3aWxsIGJl
IGluY2FwYWJsZSBvZiBzZW5kaW5nIG9mZiBhbiBJTklULgotCSAqIFdoZW4gYSBkZyBhcnJpdmVz
IHdlIG11c3QgbG9vayBpbiB0aGUgbm9ybWFsIGVwaGFzaC4gSWYgd2UgZmluZCBhCi0JICogVENQ
IGVuZHBvaW50IHRoYXQgd2lsbCB0ZWxsIHVzIHRvIGdvIHRvIHRoZSBzcGVjaWZpYyBlbmRwb2lu
dAotCSAqIGhhc2ggYW5kIHJlLWhhc2ggdG8gZmluZCB0aGUgcmlnaHQgYXNzb2Mvc29ja2V0LiBJ
ZiB3ZSBmaW5kIGEgVURQCi0JICogbW9kZWwgc29ja2V0IHdlIHRoZW4gbXVzdCBjb21wbGV0ZSB0
aGUgbG9va3VwLiBJZiB0aGlzIGZhaWxzLAotCSAqIGkuZS4gbm8gYXNzb2NpYXRpb24gY2FuIGJl
IGZvdW5kIHRoZW4gd2UgbXVzdCBjb250aW51ZSB0byBzZWUgaWYKLQkgKiBhIHNjdHBfcGVlbG9m
ZigpJ2Qgc29ja2V0IGlzIGluIHRoZSB0Y3BlcGhhc2ggKGEgc3B1biBvZmYgc29ja2V0Ci0JICog
YWN0cyBsaWtlIGEgVENQIG1vZGVsIGNvbm5lY3RlZCBzb2NrZXQpLgotCSAqLwotCXN0cnVjdCBz
Y3RwcGNiaGVhZCAqc2N0cF90Y3BlcGhhc2g7Ci0JdV9sb25nIGhhc2h0Y3BtYXJrOwotCXVpbnQz
Ml90IGhhc2h0YmxzaXplOwotCi0Jc3RydWN0IHNjdHBfdnJmbGlzdCAqc2N0cF92cmZoYXNoOwot
CXVfbG9uZyBoYXNodnJmbWFyazsKLQotCXN0cnVjdCBzY3RwX2lmbmxpc3QgKnZyZl9pZm5faGFz
aDsKLQl1X2xvbmcgICB2cmZfaWZuX2hhc2htYXJrOwotCi0Jc3RydWN0IHNjdHBwY2JoZWFkIGxp
c3RoZWFkOwotCXN0cnVjdCBzY3RwbGFkZHIgYWRkcl93cTsKLQotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCXN0cnVjdCBpbnBjYmhlYWQgaW5wbGlzdGhlYWQ7Ci0Jc3RydWN0IGlucGNiaW5mbyBz
Y3RiaW5mbzsKLSNlbmRpZgotCS8qIGVwIHpvbmUgaW5mbyAqLwotCXNjdHBfem9uZV90IGlwaV96
b25lX2VwOwotCXNjdHBfem9uZV90IGlwaV96b25lX2Fzb2M7Ci0Jc2N0cF96b25lX3QgaXBpX3pv
bmVfbGFkZHI7Ci0Jc2N0cF96b25lX3QgaXBpX3pvbmVfbmV0OwotCXNjdHBfem9uZV90IGlwaV96
b25lX2NodW5rOwotCXNjdHBfem9uZV90IGlwaV96b25lX3JlYWRxOwotCXNjdHBfem9uZV90IGlw
aV96b25lX3N0cm1vcTsKLQlzY3RwX3pvbmVfdCBpcGlfem9uZV9hc2NvbmY7Ci0Jc2N0cF96b25l
X3QgaXBpX3pvbmVfYXNjb25mX2FjazsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMzAwMAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDw9IDYwMjAw
MAotCXN0cnVjdCBtdHggaXBpX2VwX210eDsKLSNlbHNlCi0Jc3RydWN0IHJ3bG9jayBpcGlfZXBf
bXR4OwotI2VuZGlmCi0Jc3RydWN0IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OwotI2lmIF9fRnJl
ZUJTRF92ZXJzaW9uIDw9IDYwMjAwMAotCXN0cnVjdCBtdHggaXBpX2FkZHJfbXR4OwotI2Vsc2UK
LQlzdHJ1Y3Qgcndsb2NrIGlwaV9hZGRyX210eDsKLSNlbmRpZgotCXN0cnVjdCBtdHggaXBpX3Br
dGxvZ19tdHg7Ci0Jc3RydWN0IG10eCB3cV9hZGRyX210eDsKLSNlbGlmIGRlZmluZWQoU0NUUF9Q
Uk9DRVNTX0xFVkVMX0xPQ0tTKQotCXVzZXJsYW5kX211dGV4X3QgaXBpX2VwX210eDsKLQl1c2Vy
bGFuZF9tdXRleF90IGlwaV9hZGRyX210eDsKLQl1c2VybGFuZF9tdXRleF90IGlwaV9jb3VudF9t
dHg7Ci0JdXNlcmxhbmRfbXV0ZXhfdCBpcGlfcGt0bG9nX210eDsKLQl1c2VybGFuZF9tdXRleF90
IHdxX2FkZHJfbXR4OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWZkZWYgX0tFUk5fTE9D
S1NfSF8KLQlsY2tfbXR4X3QgKmlwaV9hZGRyX210eDsKLQlsY2tfbXR4X3QgKmlwaV9jb3VudF9t
dHg7Ci0JbGNrX210eF90ICppcGlfcGt0bG9nX210eDsKLQlsY2tfbXR4X3QgKmxvZ2dpbmdfbXR4
OwotCWxja19tdHhfdCAqd3FfYWRkcl9tdHg7Ci0jZWxzZQotCXZvaWQgKmlwaV9jb3VudF9tdHg7
Ci0Jdm9pZCAqbG9nZ2luZ19tdHg7Ci0jZW5kaWYgLyogX0tFUk5fTE9DS1NfSF8gKi8KLSNlbGlm
IGRlZmluZWQoX19XaW5kb3dzX18pCi0Jc3RydWN0IHJ3bG9jayBpcGlfZXBfbG9jazsKLQlzdHJ1
Y3Qgcndsb2NrIGlwaV9hZGRyX2xvY2s7Ci0Jc3RydWN0IHNwaW5sb2NrIGlwaV9wa3Rsb2dfbXR4
OwotCXN0cnVjdCByd2xvY2sgd3FfYWRkcl9tdHg7Ci0jZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0gICAgLyogVE9ETyBkZWNpZGUgb24gX19Vc2Vyc3BhY2VfXyBsb2NrcyAqLwotI2VuZGlm
Ci0JdWludDMyX3QgaXBpX2NvdW50X2VwOwotCi0JLyogYXNzb2MvdGNiIHpvbmUgaW5mbyAqLwot
CXVpbnQzMl90IGlwaV9jb3VudF9hc29jOwotCi0JLyogbG9jYWwgYWRkcmxpc3Qgem9uZSBpbmZv
ICovCi0JdWludDMyX3QgaXBpX2NvdW50X2xhZGRyOwotCi0JLyogcmVtb3RlIGFkZHJsaXN0IHpv
bmUgaW5mbyAqLwotCXVpbnQzMl90IGlwaV9jb3VudF9yYWRkcjsKLQotCS8qIGNodW5rIHN0cnVj
dHVyZSBsaXN0IGZvciBvdXRwdXQgKi8KLQl1aW50MzJfdCBpcGlfY291bnRfY2h1bms7Ci0KLQkv
KiBzb2NrZXQgcXVldWUgem9uZSBpbmZvICovCi0JdWludDMyX3QgaXBpX2NvdW50X3JlYWRxOwot
Ci0JLyogc29ja2V0IHF1ZXVlIHpvbmUgaW5mbyAqLwotCXVpbnQzMl90IGlwaV9jb3VudF9zdHJt
b3E7Ci0KLQkvKiBOdW1iZXIgb2YgdnJmcyAqLwotCXVpbnQzMl90IGlwaV9jb3VudF92cmZzOwot
Ci0gICAgICAgIC8qIE51bWJlciBvZiBpZm5zICovCi0JdWludDMyX3QgaXBpX2NvdW50X2lmbnM7
Ci0KLSAgICAgICAgLyogTnVtYmVyIG9mIGlmYXMgKi8KLQl1aW50MzJfdCBpcGlfY291bnRfaWZh
czsKLQotCS8qIHN5c3RlbSB3aWRlIG51bWJlciBvZiBmcmVlIGNodW5rcyBoYW5naW5nIGFyb3Vu
ZCAqLwotCXVpbnQzMl90IGlwaV9mcmVlX2NodW5rczsKLQl1aW50MzJfdCBpcGlfZnJlZV9zdHJt
b3E7Ci0KLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkIHZ0YWdfdGltZXdhaXRbU0NUUF9TVEFDS19WVEFH
X0hBU0hfU0laRV07Ci0KLQkvKiBhZGRyZXNzIHdvcmsgcXVldWUgaGFuZGxpbmcgKi8KLQlzdHJ1
Y3Qgc2N0cF90aW1lciBhZGRyX3dxX3RpbWVyOwotCi0jaWYgZGVmaW5lZChfU0NUUF9ORUVEU19D
QUxMT1VUXykgfHwgZGVmaW5lZChfVVNFUl9TQ1RQX05FRURTX0NBTExPVVRfKQotCXN0cnVjdCBj
YWxsb3V0bGlzdCBjYWxscXVldWU7Ci0jZW5kaWYKLX07Ci0KLQotc3RydWN0IHNjdHBfYmFzZV9p
bmZvIHsKLQkvKiBBbGwgc3RhdGljIHN0cnVjdHVyZXMgdGhhdAotCSAqIGFuY2hvciB0aGUgc3lz
dGVtIG11c3QgYmUgaGVyZS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9lcGluZm8gc2N0cHBjYmluZm87
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NU
UF9VU0VfUEVSQ1BVX1NUQVQpCi0Jc3RydWN0IHNjdHBzdGF0ICAgICpzY3Rwc3RhdDsKLSNlbHNl
Ci0Jc3RydWN0IHNjdHBzdGF0ICAgIHNjdHBzdGF0OwotI2VuZGlmCi0Jc3RydWN0IHNjdHBfc3lz
Y3RsIHNjdHBzeXNjdGw7Ci0JdWludDhfdCBmaXJzdF90aW1lOwotCWNoYXIgc2N0cF9wY2JfaW5p
dGlhbGl6ZWQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1BBQ0tFVF9MT0dHSU5HKQotCWludCBwYWNrZXRf
bG9nX3dyaXRlcnM7Ci0JaW50IHBhY2tldF9sb2dfZW5kOwotCXVpbnQ4X3QgcGFja2V0X2xvZ19i
dWZmZXJbU0NUUF9QQUNLRVRfTE9HX1NJWkVdOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExF
X18pCi0JaW50IHNjdHBfbWFpbl90aW1lcl90aWNrczsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQl1c2VybGFuZF9tdXRleF90IHRpbWVyX210eDsKLQl1c2VybGFuZF90aHJl
YWRfdCB0aW1lcl90aHJlYWQ7Ci0JdWludDhfdCB0aW1lcl90aHJlYWRfc2hvdWxkX2V4aXQ7Ci0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlwdGhyZWFkX211dGV4YXR0cl90
IG10eF9hdHRyOwotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlpbnQgdXNl
cnNwYWNlX3JvdXRlOwotCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJlYWRyb3V0ZTsKLSNlbmRp
ZgotI2VuZGlmCi0jaWZkZWYgSU5FVAotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLQlTT0NLRVQgdXNlcnNwYWNlX3Jhd3NjdHA7Ci0JU09DS0VUIHVzZXJzcGFjZV91ZHBzY3Rw
OwotI2Vsc2UKLQlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA7Ci0JaW50IHVzZXJzcGFjZV91ZHBzY3Rw
OwotI2VuZGlmCi0JdXNlcmxhbmRfdGhyZWFkX3QgcmVjdnRocmVhZHJhdzsKLQl1c2VybGFuZF90
aHJlYWRfdCByZWN2dGhyZWFkdWRwOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JU09DS0VUIHVzZXJzcGFjZV9yYXdzY3RwNjsKLQlT
T0NLRVQgdXNlcnNwYWNlX3VkcHNjdHA2OwotI2Vsc2UKLQlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA2
OwotCWludCB1c2Vyc3BhY2VfdWRwc2N0cDY7Ci0jZW5kaWYKLQl1c2VybGFuZF90aHJlYWRfdCBy
ZWN2dGhyZWFkcmF3NjsKLQl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFkdWRwNjsKLSNlbmRp
ZgotCWludCAoKmNvbm5fb3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZik7Ci0Jdm9pZCAoKmRlYnVnX3ByaW50
ZikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwotCWludCBjcmMzMmNfb2ZmbG9hZGVkOwotI2Vu
ZGlmCi19OwotCi0vKi0KLSAqIEhlcmUgd2UgaGF2ZSBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0
aW9uIGZvciBlYWNoIFNDVFAgZW50aXR5IGNyZWF0ZWQuIFdlCi0gKiB3aWxsIG5lZWQgdG8gbW9k
aWZ5IHRoaXMgYXMgYXBwcm9wcmF0ZS4gV2UgYWxzbyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRv
Ci0gKiBhY2Nlc3MgL2Rldi9yYW5kb20uCi0gKi8KLXN0cnVjdCBzY3RwX3BjYiB7Ci0JdW5zaWdu
ZWQgaW50IHRpbWVfb2Zfc2VjcmV0X2NoYW5nZTsJLyogbnVtYmVyIG9mIHNlY29uZHMgZnJvbQot
CQkJCQkJICogdGltZXZhbC50dl9zZWMgKi8KLQl1aW50MzJfdCBzZWNyZXRfa2V5W1NDVFBfSE9X
X01BTllfU0VDUkVUU11bU0NUUF9OVU1CRVJfT0ZfU0VDUkVUU107Ci0JdW5zaWduZWQgaW50IHNp
emVfb2ZfYV9jb29raWU7Ci0KLQl1bnNpZ25lZCBpbnQgc2N0cF90aW1lb3V0dGlja3NbU0NUUF9O
VU1fVE1SU107Ci0JdW5zaWduZWQgaW50IHNjdHBfbWlucnRvOwotCXVuc2lnbmVkIGludCBzY3Rw
X21heHJ0bzsKLQl1bnNpZ25lZCBpbnQgaW5pdGlhbF9ydG87Ci0JaW50IGluaXRpYWxfaW5pdF9y
dG9fbWF4OwotCi0JdW5zaWduZWQgaW50IHNjdHBfc2Fja19mcmVxOwotCXVpbnQzMl90IHNjdHBf
c3dzX3NlbmRlcjsKLQl1aW50MzJfdCBzY3RwX3N3c19yZWNlaXZlcjsKLQotCXVpbnQzMl90IHNj
dHBfZGVmYXVsdF9jY19tb2R1bGU7Ci0JdWludDMyX3Qgc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsK
LQkvKiBhdXRoZW50aWNhdGlvbiByZWxhdGVkIGZpZWxkcyAqLwotCXN0cnVjdCBzY3RwX2tleWhl
YWQgc2hhcmVkX2tleXM7Ci0Jc2N0cF9hdXRoX2Noa2xpc3RfdCAqbG9jYWxfYXV0aF9jaHVua3M7
Ci0Jc2N0cF9obWFjbGlzdF90ICpsb2NhbF9obWFjczsKLQl1aW50MTZfdCBkZWZhdWx0X2tleWlk
OwotCi0JLyogdmFyaW91cyB0aHJlc2hvbGRzICovCi0JLyogTWF4IHRpbWVzIEkgd2lsbCBpbml0
IGF0IGEgZ3V5ICovCi0JdWludDE2X3QgbWF4X2luaXRfdGltZXM7Ci0KLQkvKiBNYXggdGltZXMg
SSB3aWxsIHNlbmQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWVvbmUgZGVhZCAqLwotCXVpbnQxNl90
IG1heF9zZW5kX3RpbWVzOwotCi0JdWludDE2X3QgZGVmX25ldF9mYWlsdXJlOwotCi0JdWludDE2
X3QgZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0KLQkvKiBudW1iZXIgb2Ygc3RyZWFtcyB0byBwcmUt
b3BlbiBvbiBhIGFzc29jaWF0aW9uICovCi0JdWludDE2X3QgcHJlX29wZW5fc3RyZWFtX2NvdW50
OwotCXVpbnQxNl90IG1heF9vcGVuX3N0cmVhbXNfaW50b21lOwotCi0JLyogcmFuZG9tIG51bWJl
ciBnZW5lcmF0b3IgKi8KLQl1aW50MzJfdCByYW5kb21fY291bnRlcjsKLQl1aW50OF90IHJhbmRv
bV9udW1iZXJzW1NDVFBfU0lHTkFUVVJFX0FMT0NfU0laRV07Ci0JdWludDhfdCByYW5kb21fc3Rv
cmVbU0NUUF9TSUdOQVRVUkVfQUxPQ19TSVpFXTsKLQotCS8qCi0JICogVGhpcyB0aW1lciBpcyBr
ZXB0IHJ1bm5pbmcgcGVyIGVuZHBvaW50LiAgV2hlbiBpdCBmaXJlcyBpdCB3aWxsCi0JICogY2hh
bmdlIHRoZSBzZWNyZXQga2V5LiAgVGhlIGRlZmF1bHQgaXMgb25jZSBhIGhvdXIKLQkgKi8KLQlz
dHJ1Y3Qgc2N0cF90aW1lciBzaWduYXR1cmVfY2hhbmdlOwotCi0JLyogWmVybyBjb3B5IGZ1bGwg
YnVmZmVyIHRpbWVyICovCi0Jc3RydWN0IHNjdHBfdGltZXIgemVyb19jb3B5X3RpbWVyOwotICAg
ICAgICAvKiBaZXJvIGNvcHkgYXBwIHRvIHRyYW5zcG9ydCAoc2VuZHEpIHJlYWQgcmVwdWxzZSB0
aW1lciAqLwotCXN0cnVjdCBzY3RwX3RpbWVyIHplcm9fY29weV9zZW5kcV90aW1lcjsKLQl1aW50
MzJfdCBkZWZfY29va2llX2xpZmU7Ci0JLyogZGVmYXVsdHMgdG8gMCAqLwotCWludCBhdXRvX2Ns
b3NlX3RpbWU7Ci0JdWludDMyX3QgaW5pdGlhbF9zZXF1ZW5jZV9kZWJ1ZzsKLQl1aW50MzJfdCBh
ZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcjsKLQl1aW50OF90IGFkYXB0YXRpb25fbGF5ZXJfaW5k
aWNhdG9yX3Byb3ZpZGVkOwotCXVpbnQzMl90IHN0b3JlX2F0OwotCXVpbnQzMl90IG1heF9idXJz
dDsKLQl1aW50MzJfdCBmcl9tYXhfYnVyc3Q7Ci0jaWZkZWYgSU5FVDYKLQl1aW50MzJfdCBkZWZh
dWx0X2Zsb3dsYWJlbDsKLSNlbmRpZgotCXVpbnQ4X3QgZGVmYXVsdF9kc2NwOwotCWNoYXIgY3Vy
cmVudF9zZWNyZXRfbnVtYmVyOwotCWNoYXIgbGFzdF9zZWNyZXRfbnVtYmVyOwotCXVpbnQxNl90
IHBvcnQ7IC8qIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0ICovCi19OwotCi0jaWZuZGVm
IFNDVFBfQUxJR05NRU5UCi0jZGVmaW5lIFNDVFBfQUxJR05NRU5UIDMyCi0jZW5kaWYKLQotI2lm
bmRlZiBTQ1RQX0FMSUdOTTEKLSNkZWZpbmUgU0NUUF9BTElHTk0xIChTQ1RQX0FMSUdOTUVOVC0x
KQotI2VuZGlmCi0KLSNkZWZpbmUgc2N0cF9scG9ydCBpcF9pbnAuaW5wLmlucF9scG9ydAotCi1z
dHJ1Y3Qgc2N0cF9wY2J0c25fcmxvZyB7Ci0JdWludDMyX3QgdnRhZzsKLQl1aW50MTZfdCBzdHJt
OwotCXVpbnQxNl90IHNlcTsKLQl1aW50MTZfdCBzejsKLQl1aW50MTZfdCBmbGdzOwotfTsKLSNk
ZWZpbmUgU0NUUF9SRUFEX0xPR19TSVpFIDEzNQkvKiB3ZSBjaG9vc2UgdGhlIG51bWJlciB0byBt
YWtlIGEgcGNiIGEgcGFnZSAqLwotCi0KLXN0cnVjdCBzY3RwX2lucGNiIHsKLQkvKi0KLQkgKiBw
dXQgYW4gaW5wY2IgaW4gZnJvbnQgb2YgaXQgYWxsLCBraW5kIG9mIGEgd2FzdGUgYnV0IHdlIG5l
ZWQgdG8KLQkgKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFsbCB0aGUgb3RoZXIgc3R1ZmYuCi0J
ICovCi0JdW5pb24gewotCQlzdHJ1Y3QgaW5wY2IgaW5wOwotCQljaGFyIGFsaWduWyhzaXplb2Yo
c3RydWN0IGluNnBjYikgKyBTQ1RQX0FMSUdOTTEpICYKLQkJICAgICAgICB+U0NUUF9BTElHTk0x
XTsKLQl9ICAgICBpcF9pbnA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkvKiBsZWF2ZSBz
b21lIHNwYWNlIGluIGNhc2UgaTM4NiBpbnBjYiBpcyBiaWdnZXIgdGhhbiBwcGMgKi8KLQl1aW50
OF90CQlwYWRkaW5nWzEyOF07Ci0jZW5kaWYKLQotCS8qIFNvY2tldCBidWZmZXIgbG9jayBwcm90
ZWN0cyByZWFkX3F1ZXVlIGFuZCBvZiBjb3Vyc2Ugc2JfY2MgKi8KLQlzdHJ1Y3Qgc2N0cF9yZWFk
aGVhZCByZWFkX3F1ZXVlOwotCi0JTElTVF9FTlRSWShzY3RwX2lucGNiKSBzY3RwX2xpc3Q7CS8q
IGxpc3RzIGFsbCBlbmRwb2ludHMgKi8KLSAgICAgICAgLyogaGFzaCBvZiBhbGwgZW5kcG9pbnRz
IGZvciBtb2RlbCAqLwotCUxJU1RfRU5UUlkoc2N0cF9pbnBjYikgc2N0cF9oYXNoOwotCS8qIGNv
dW50IG9mIGxvY2FsIGFkZHJlc3NlcyBib3VuZCwgMCBpZiBib3VuZCBhbGwgKi8KLQlpbnQgbGFk
ZHJfY291bnQ7Ci0KLQkvKiBsaXN0IG9mIGFkZHJzIGluIHVzZSBieSB0aGUgRVAsIE5VTEwgaWYg
Ym91bmQtYWxsICovCi0Jc3RydWN0IHNjdHBsYWRkciBzY3RwX2FkZHJfbGlzdDsKLQkvKiB1c2Vk
IGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gcm90YXRpb24gd2hlbiB3ZSBhcmUgc3Vic2V0
IGJvdW5kICovCi0Jc3RydWN0IHNjdHBfbGFkZHIgKm5leHRfYWRkcl90b3VzZTsKLQotCS8qIGJh
Y2sgcG9pbnRlciB0byBvdXIgc29ja2V0ICovCi0Jc3RydWN0IHNvY2tldCAqc2N0cF9zb2NrZXQ7
Ci0JdWludDY0X3Qgc2N0cF9mZWF0dXJlczsJLyogRmVhdHVyZSBmbGFncyAqLwotCXVpbnQzMl90
IHNjdHBfZmxhZ3M7CS8qIElOUCBzdGF0ZSBmbGFnIHNldCAqLwotCXVpbnQzMl90IHNjdHBfbW9i
aWxpdHlfZmVhdHVyZXM7IC8qIE1vYmlsaXR5ICBGZWF0dXJlIGZsYWdzICovCi0Jc3RydWN0IHNj
dHBfcGNiIHNjdHBfZXA7LyogU0NUUCBlcCBkYXRhICovCi0JLyogaGVhZCBvZiB0aGUgaGFzaCBv
ZiBhbGwgYXNzb2NpYXRpb25zICovCi0Jc3RydWN0IHNjdHBhc29jaGVhZCAqc2N0cF90Y2JoYXNo
OwotCXVfbG9uZyBzY3RwX2hhc2htYXJrOwotCS8qIGhlYWQgb2YgdGhlIGxpc3Qgb2YgYWxsIGFz
c29jaWF0aW9ucyAqLwotCXN0cnVjdCBzY3RwYXNvY2hlYWQgc2N0cF9hc29jX2xpc3Q7Ci0jaWZk
ZWYgU0NUUF9UUkFDS19GUkVFRF9BU09DUwotCXN0cnVjdCBzY3RwYXNvY2hlYWQgc2N0cF9hc29j
X2ZyZWVfbGlzdDsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppbnBfc3RhcnRpbmdf
cG9pbnRfZm9yX2l0ZXJhdG9yOwotCXVpbnQzMl90IHNjdHBfZnJhZ19wb2ludDsKLQl1aW50MzJf
dCBwYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OwotCXVpbnQzMl90IHNjdHBfY29udGV4dDsKLQl1aW50
MzJfdCBtYXhfY3duZDsKLQl1aW50OF90IGxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7Ci0JdWludDMy
X3Qgc2N0cF9jbXRfb25fb2ZmOwotCXVpbnQ4X3QgZWNuX3N1cHBvcnRlZDsKLQl1aW50OF90IHBy
c2N0cF9zdXBwb3J0ZWQ7Ci0JdWludDhfdCBhdXRoX3N1cHBvcnRlZDsKLQl1aW50OF90IGlkYXRh
X3N1cHBvcnRlZDsKLQl1aW50OF90IGFzY29uZl9zdXBwb3J0ZWQ7Ci0JdWludDhfdCByZWNvbmZp
Z19zdXBwb3J0ZWQ7Ci0JdWludDhfdCBucnNhY2tfc3VwcG9ydGVkOwotCXVpbnQ4X3QgcGt0ZHJv
cF9zdXBwb3J0ZWQ7Ci0Jc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmluZm8gZGVmX3NlbmQ7Ci0J
LyotCi0JICogVGhlc2UgdGhyZWUgYXJlIGhlcmUgZm9yIHRoZSBzb3NlbmRfZGdyYW0KLQkgKiAo
cGt0LCBwa3RfbGFzdCBhbmQgY29udHJvbCkuCi0JICogcm91dGluZS4gSG93ZXZlciwgSSBkb24n
dCB0aGluayBhbnlvbmUgaW4KLQkgKiB0aGUgY3VycmVudCBGcmVlQlNEIGtlcm5lbCBjYWxscyB0
aGlzLiBTbwotCSAqIHRoZXkgYXJlIGNhbmRpZGF0ZXMgd2l0aCBzY3RwX3NlbmRtIGZvcgotCSAq
IGRlLXN1cHBvcnRpbmcuCi0JICovCi0jaWZkZWYgX19QYW5kYV9fCi0JcGFraGFuZGxlX3R5cGUg
cGFrX3RvX3JlYWQ7Ci0JcGFraGFuZGxlX3R5cGUgcGFrX3RvX3JlYWRfc2VuZHE7Ci0jZW5kaWYK
LQlzdHJ1Y3QgbWJ1ZiAqcGt0LCAqcGt0X2xhc3Q7Ci0Jc3RydWN0IG1idWYgKmNvbnRyb2w7Ci0j
aWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKLSNpZm5kZWYgSU5QX0lQ
VjYKLSNkZWZpbmUgSU5QX0lQVjYJMHgxCi0jZW5kaWYKLSNpZm5kZWYgSU5QX0lQVjQKLSNkZWZp
bmUgSU5QX0lQVjQJMHgyCi0jZW5kaWYKLQl1aW50OF90IGlucF92ZmxhZzsKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBUT0RPIF9fVXNlcnNwYWNlX18gd2hlcmUgaXMgb3VyIGlu
cF92bGFnIGdvaW5nIHRvIGJlPyAqLwotCXVpbnQ4X3QgaW5wX2lwX3R0bDsKLSAgICAgICAgdWlu
dDhfdCBpbnBfaXBfdG9zOyAgICAvKiBkZWZpbmVkIGFzIG1hY3JvIGluIHVzZXJfaW5wY2IuaCAq
LwotCXVpbnQ4X3QgaW5wX2lwX3Jlc3Y7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKLQlzdHJ1Y3QgbXR4IGlucF9tdHg7Ci0J
c3RydWN0IG10eCBpbnBfY3JlYXRlX210eDsKLQlzdHJ1Y3QgbXR4IGlucF9yZGF0YV9tdHg7Ci0J
aW50MzJfdCByZWZjb3VudDsKLSNlbGlmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tT
KQotCXVzZXJsYW5kX211dGV4X3QgaW5wX210eDsKLQl1c2VybGFuZF9tdXRleF90IGlucF9jcmVh
dGVfbXR4OwotCXVzZXJsYW5kX211dGV4X3QgaW5wX3JkYXRhX210eDsKLQlpbnQzMl90IHJlZmNv
dW50OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChTQ1RQX0FQUExFX1JX
TE9DSykKLQlsY2tfcndfdCAqaW5wX210eDsKLSNlbHNlCi0JbGNrX210eF90ICppbnBfbXR4Owot
I2VuZGlmCi0JbGNrX210eF90ICppbnBfY3JlYXRlX210eDsKLQlsY2tfbXR4X3QgKmlucF9yZGF0
YV9tdHg7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCXN0cnVjdCByd2xvY2sgaW5wX2xv
Y2s7Ci0Jc3RydWN0IHNwaW5sb2NrIGlucF9jcmVhdGVfbG9jazsKLQlzdHJ1Y3Qgc3BpbmxvY2sg
aW5wX3JkYXRhX2xvY2s7Ci0JaW50MzJfdCByZWZjb3VudDsKLSNlbGlmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLSAgICAvKiBUT0RPIGRlY2lkZSBvbiBfX1VzZXJzcGFjZV9fIGxvY2tzICovCi0J
aW50MzJfdCByZWZjb3VudDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWludDMy
X3QgcmVmY291bnQ7Ci0KLQl1aW50MzJfdCBsb2NrX2NhbGxlcjE7Ci0JdWludDMyX3QgbG9ja19j
YWxsZXIyOwotCXVpbnQzMl90IGxvY2tfY2FsbGVyMzsKLQl1aW50MzJfdCB1bmxvY2tfY2FsbGVy
MTsKLQl1aW50MzJfdCB1bmxvY2tfY2FsbGVyMjsKLQl1aW50MzJfdCB1bmxvY2tfY2FsbGVyMzsK
LQl1aW50MzJfdCBnZXRsb2NrX2NhbGxlcjE7Ci0JdWludDMyX3QgZ2V0bG9ja19jYWxsZXIyOwot
CXVpbnQzMl90IGdldGxvY2tfY2FsbGVyMzsKLQl1aW50MzJfdCBnZW5fY291bnQ7Ci0JdWludDMy
X3QgbG9ja19nZW5fY291bnQ7Ci0JdWludDMyX3QgdW5sb2NrX2dlbl9jb3VudDsKLQl1aW50MzJf
dCBnZXRsb2NrX2dlbl9jb3VudDsKLQotCXVpbnQzMl90IGlfYW1faGVyZV9maWxlOwotCXVpbnQz
Ml90IGlfYW1faGVyZV9saW5lOwotI2VuZGlmCi0JdWludDMyX3QgZGVmX3ZyZl9pZDsKLQl1aW50
MTZfdCBmaWJudW07Ci0jaWZkZWYgU0NUUF9NVlJGCi0JdWludDMyX3QgKm1fdnJmX2lkczsKLQl1
aW50MzJfdCBudW1fdnJmczsKLQl1aW50MzJfdCB2cmZfc2l6ZTsKLSNlbmRpZgotCXVpbnQzMl90
IHRvdGFsX3NlbmRzOwotCXVpbnQzMl90IHRvdGFsX3JlY3ZzOwotCXVpbnQzMl90IGxhc3RfYWJv
cnRfY29kZTsKLQl1aW50MzJfdCB0b3RhbF9ub3NwYWNlczsKLQlzdHJ1Y3Qgc2N0cGFzb2NoZWFk
ICpzY3RwX2Fzb2NpZGhhc2g7Ci0JdV9sb25nIGhhc2hhc29jaWRtYXJrOwotICAgICAgICB1aW50
MzJfdCBzY3RwX2Fzc29jaWRfY291bnRlcjsKLQotI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05T
Ci0Jc3RydWN0IHNjdHBfcGNidHNuX3Jsb2cgcmVhZGxvZ1tTQ1RQX1JFQURfTE9HX1NJWkVdOwot
CXVpbnQzMl90IHJlYWRsb2dfaW5kZXg7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0Jdm9pZCAqdWxwX2luZm87Ci0JaW50ICgqcmVjdl9jYWxsYmFjaykoc3RydWN0IHNvY2tl
dCAqLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSwgdm9pZCAqLCBzaXplX3QsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCwgdm9pZCAqKTsKLQl1aW50
MzJfdCBzZW5kX3NiX3RocmVzaG9sZDsKLQlpbnQgKCpzZW5kX2NhbGxiYWNrKShzdHJ1Y3Qgc29j
a2V0ICosIHVpbnQzMl90KTsKLSNlbmRpZgotfTsKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLWludCByZWdpc3Rlcl9yZWN2X2NiIChzdHJ1Y3Qgc29ja2V0ICosCi0gICAgICAgICAgICAg
ICAgICAgICAgaW50ICgqKShzdHJ1Y3Qgc29ja2V0ICosIHVuaW9uIHNjdHBfc29ja3N0b3JlLCB2
b2lkICosIHNpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X3JjdmluZm8sIGludCwgdm9pZCAqKSk7Ci1pbnQgcmVnaXN0ZXJfc2VuZF9jYiAoc3RydWN0IHNv
Y2tldCAqLCB1aW50MzJfdCwgaW50ICgqKShzdHJ1Y3Qgc29ja2V0ICosIHVpbnQzMl90KSk7Ci1p
bnQgcmVnaXN0ZXJfdWxwX2luZm8gKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAqKTsKLQotI2VuZGlm
Ci1zdHJ1Y3Qgc2N0cF90Y2IgewotCXN0cnVjdCBzb2NrZXQgKnNjdHBfc29ja2V0OwkvKiBiYWNr
IHBvaW50ZXIgdG8gc29ja2V0ICovCi0Jc3RydWN0IHNjdHBfaW5wY2IgKnNjdHBfZXA7CS8qIGJh
Y2sgcG9pbnRlciB0byBlcCAqLwotCUxJU1RfRU5UUlkoc2N0cF90Y2IpIHNjdHBfdGNiaGFzaDsJ
LyogbmV4dCBsaW5rIGluIGhhc2gKLQkJCQkJCSAqIHRhYmxlICovCi0gICAgICAgIExJU1RfRU5U
Ulkoc2N0cF90Y2IpIHNjdHBfdGNibGlzdDsJLyogbGlzdCBvZiBhbGwgb2YgdGhlCi0JCQkJCQkg
KiBUQ0IncyAqLwotICAgICAgICBMSVNUX0VOVFJZKHNjdHBfdGNiKSBzY3RwX3RjYmFzb2NpZGhh
c2g7CS8qIG5leHQgbGluayBpbiBhc29jaWQKLQkJCQkJCQkgKiBoYXNoIHRhYmxlCi0JCQkJCQkJ
ICovCi0gICAgICAgIExJU1RfRU5UUlkoc2N0cF90Y2IpIHNjdHBfYXNvY3M7CS8qIHZ0YWcgaGFz
aCBsaXN0ICovCi0Jc3RydWN0IHNjdHBfYmxvY2tfZW50cnkgKmJsb2NrX2VudHJ5OwkvKiBwb2lu
dGVyIGxvY2tlZCBieSAgc29ja2V0Ci0JCQkJCQkgKiBzZW5kIGJ1ZmZlciAqLwotCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uIGFzb2M7Ci0JLyotCi0JICogZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0
IGlzIHByb3RlY3RlZCBieSB0aGUgc29ja2J1Zl9sb2NrIE5PVCB0aGUKLQkgKiB0Y2JfbG9jay4g
SXRzIHNwZWNpYWwgaW4gdGhpcyB3YXkgdG8gaGVscCBhdm9pZCBleHRyYSBtdXRleCBjYWxscwot
CSAqIGluIHRoZSByZWFkaW5nIG9mIGRhdGEuCi0JICovCi0JdWludDMyX3QgZnJlZWRfYnlfc29y
Y3Zfc2luY2VsYXN0OwotCXVpbnQzMl90IHRvdGFsX3NlbmRzOwotCXVpbnQzMl90IHRvdGFsX3Jl
Y3ZzOwotCWludCBmcmVlZF9mcm9tX3doZXJlOwotCXVpbnQxNl90IHJwb3J0OwkJLyogcmVtb3Rl
IHBvcnQgaW4gbmV0d29yayBmb3JtYXQgKi8KLQl1aW50MTZfdCByZXN2OwotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMzAwMAotCXN0cnVjdCBtdHgg
dGNiX210eDsKLQlzdHJ1Y3QgbXR4IHRjYl9zZW5kX210eDsKLSNlbGlmIGRlZmluZWQoU0NUUF9Q
Uk9DRVNTX0xFVkVMX0xPQ0tTKQotCXVzZXJsYW5kX211dGV4X3QgdGNiX210eDsKLQl1c2VybGFu
ZF9tdXRleF90IHRjYl9zZW5kX210eDsKLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQotCWxja19t
dHhfdCogdGNiX210eDsKLQlsY2tfbXR4X3QqIHRjYl9zZW5kX210eDsKLSNlbGlmIGRlZmluZWQo
X19XaW5kb3dzX18pCi0Jc3RydWN0IHNwaW5sb2NrIHRjYl9sb2NrOwotCXN0cnVjdCBzcGlubG9j
ayB0Y2Jfc2VuZF9sb2NrOwotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotICAgIC8qIFRP
RE8gZGVjaWRlIG9uIF9fVXNlcnNwYWNlX18gbG9ja3MgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQo
X19BUFBMRV9fKQotCXVpbnQzMl90IGNhbGxlcjE7Ci0JdWludDMyX3QgY2FsbGVyMjsKLQl1aW50
MzJfdCBjYWxsZXIzOwotI2VuZGlmCi19OwotCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9s
b2NrX2JzZC5oPgotCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLS8qCi0gKiBBcHBsZSBNYWNP
UyBYIDEwLjQgIlRpZ2VyIgotICovCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfbG9ja19hcHBs
ZV9mZy5oPgotCi0jZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKLQotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaD4KLQotI2VsaWYgZGVmaW5lZChfX1dp
bmRvd3NfXykKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2NrX3dpbmRvd3MuaD4KLQotI2Vs
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tf
dXNlcnNwYWNlLmg+Ci0KLSNlbHNlCi0vKgotICogUHJlLTUueCBGcmVlQlNELCBhbmQgb3RoZXJz
LgotICovCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfZW1wdHkuaD4KLSNlbmRpZgotCi0v
KiBUT0RPIHdoZXJlIHRvIHB1dCBub24tX0tFUk5FTCB0aGluZ3MgZm9yIF9fVXNlcnNwYWNlX18/
ICovCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0KLS8q
IEF0dGVudGlvbiBKdWxpYW4sIHRoaXMgaXMgdGhlIGV4dGVybiB0aGF0Ci0gKiBnb2VzIHdpdGgg
dGhlIGJhc2UgaW5mby4gc2N0cF9wY2IuYyBoYXMKLSAqIHRoZSByZWFsIGRlZmluaXRpb24uCi0g
Ki8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEw
MDAKLVZORVRfREVDTEFSRShzdHJ1Y3Qgc2N0cF9iYXNlX2luZm8sIHN5c3RlbV9iYXNlX2luZm8p
IDsKLSNlbHNlCi1leHRlcm4gc3RydWN0IHNjdHBfYmFzZV9pbmZvIHN5c3RlbV9iYXNlX2luZm87
Ci0jZW5kaWYKLQotI2lmZGVmIElORVQ2Ci1pbnQgU0NUUDZfQVJFX0FERFJfRVFVQUwoc3RydWN0
IHNvY2thZGRyX2luNiAqYSwgc3RydWN0IHNvY2thZGRyX2luNiAqYik7Ci0jZW5kaWYKLQotdm9p
ZCBzY3RwX2ZpbGxfcGNiaW5mbyhzdHJ1Y3Qgc2N0cF9wY2JpbmZvICopOwotCi1zdHJ1Y3Qgc2N0
cF9pZm4gKgotc2N0cF9maW5kX2lmbih2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCk7Ci0K
LXN0cnVjdCBzY3RwX3ZyZiAqc2N0cF9hbGxvY2F0ZV92cmYoaW50IHZyZmlkKTsKLXN0cnVjdCBz
Y3RwX3ZyZiAqc2N0cF9maW5kX3ZyZih1aW50MzJfdCB2cmZpZCk7Ci12b2lkIHNjdHBfZnJlZV92
cmYoc3RydWN0IHNjdHBfdnJmICp2cmYpOwotCi0vKi0KLSAqIENoYW5nZSBhZGRyZXNzIHN0YXRl
LCBjYW4gYmUgdXNlZCBpZgotICogTy9TIHN1cHBvcnRzIHRlbGxpbmcgdHJhbnNwb3J0cyBhYm91
dAotICogY2hhbmdlcyB0byBJRkEvSUZOJ3MgKGxpbmsgbGF5ZXIgdHJpZ2dlcnMpLgotICogSWYg
YSBpZm4gZ29lcyBkb3duLCB3ZSB3aWxsIGRvIHNyYy1hZGRyLXNlbGVjdGlvbgotICogYW5kIE5P
VCB1c2UgdGhhdCwgYXMgYSBzb3VyY2UgYWRkcmVzcy4gVGhpcyBkb2VzCi0gKiBub3Qgc3RvcCB0
aGUgcm91dGluZyBzeXN0ZW0gZnJvbSByb3V0aW5nIG91dAotICogdGhhdCBpbnRlcmZhY2UsIGJ1
dCB3ZSB3b24ndCBwdXQgaXQgYXMgYSBzb3VyY2UuCi0gKi8KLXZvaWQgc2N0cF9tYXJrX2lmYV9h
ZGRyX2Rvd24odWludDMyX3QgdnJmX2lkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGNvbnN0IGNo
YXIgKmlmX25hbWUsIHVpbnQzMl90IGlmbl9pbmRleCk7Ci12b2lkIHNjdHBfbWFya19pZmFfYWRk
cl91cCh1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgY29uc3QgY2hhciAq
aWZfbmFtZSwgdWludDMyX3QgaWZuX2luZGV4KTsKLQotc3RydWN0IHNjdHBfaWZhICoKLXNjdHBf
YWRkX2FkZHJfdG9fdnJmKHVpbnQzMl90IHZyZmlkLAotCQkgICAgIHZvaWQgKmlmbiwgdWludDMy
X3QgaWZuX2luZGV4LCB1aW50MzJfdCBpZm5fdHlwZSwKLQkJICAgICBjb25zdCBjaGFyICppZl9u
YW1lLAotCQkgICAgIHZvaWQgKmlmYSwgc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCBp
ZmFfZmxhZ3MsCi0JCSAgICAgaW50IGR5bmFtaWNfYWRkKTsKLQotdm9pZCBzY3RwX3VwZGF0ZV9p
Zm5fbXR1KHVpbnQzMl90IGlmbl9pbmRleCwgdWludDMyX3QgbXR1KTsKLQotdm9pZCBzY3RwX2Zy
ZWVfaWZuKHN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wKTsKLXZvaWQgc2N0cF9mcmVlX2lmYShz
dHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCk7Ci0KLQotdm9pZCBzY3RwX2RlbF9hZGRyX2Zyb21f
dnJmKHVpbnQzMl90IHZyZmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JCQkgICAgdWludDMy
X3QgaWZuX2luZGV4LCBjb25zdCBjaGFyICppZl9uYW1lKTsKLQotCi0KLXN0cnVjdCBzY3RwX25l
dHMgKnNjdHBfZmluZG5ldChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRyICopOwot
Ci1zdHJ1Y3Qgc2N0cF9pbnBjYiAqc2N0cF9wY2JfZmluZGVwKHN0cnVjdCBzb2NrYWRkciAqLCBp
bnQsIGludCwgdWludDMyX3QpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1pbnQgc2N0cF9pbnBjYl9iaW5kKHN0cnVjdCBzb2NrZXQg
Kiwgc3RydWN0IHNvY2thZGRyICosCi0JCSAgICBzdHJ1Y3Qgc2N0cF9pZmEgKixzdHJ1Y3QgdGhy
ZWFkICopOwotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLWludCBzY3RwX2lucGNiX2JpbmQo
c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLQkJICAgIHN0cnVjdCBzY3RwX2lm
YSAqLFBLVEhSRUFEKTsKLSNlbHNlCi0vKiBzdHJ1Y3QgcHJvYyBpcyBhIGR1bW15IGZvciBfX1Vz
ZXJzcGFjZV9fICovCi1pbnQgc2N0cF9pbnBjYl9iaW5kKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IHNvY2thZGRyICosCi0JCSAgICBzdHJ1Y3Qgc2N0cF9pZmEgKiwgc3RydWN0IHByb2MgKik7Ci0j
ZW5kaWYKLQotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHIoc3Ry
dWN0IG1idWYgKiwgaW50LAotICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIg
KiwKLSAgICBzdHJ1Y3Qgc2N0cGhkciAqLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqLCBzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCB1aW50MzJfdCB2cmZfaWQp
OwotCi1zdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYShzdHJ1
Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNjdHBfaW5wY2Ig
KiosIHN0cnVjdCBzY3RwX25ldHMgKiosIGludCwgdWludDMyX3QpOwotCi12b2lkCi1zY3RwX21v
dmVfcGNiX2FuZF9hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
LAotICAgIHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotLyotCi0gKiBGb3IgdGhpcyBjYWxsIGVwX2Fk
ZHIsIHRoZSB0byBpcyB0aGUgZGVzdGluYXRpb24gZW5kcG9pbnQgYWRkcmVzcyBvZiB0aGUKLSAq
IHBlZXIgKHJlbGF0aXZlIHRvIG91dGJvdW5kKS4gVGhlIGZyb20gZmllbGQgaXMgb25seSB1c2Vk
IGlmIHRoZSBUQ1AgbW9kZWwKLSAqIGlzIGVuYWJsZWQgYW5kIGhlbHBzIGRpc3Rpbmd1c2ggYW1v
bmdzdCB0aGUgc3Vic2V0IGJvdW5kIChub24tYm91bmRhbGwpLgotICogVGhlIFRDUCBtb2RlbCBN
QVkgY2hhbmdlIHRoZSBhY3R1YWwgZXAgZmllbGQsIHRoaXMgaXMgd2h5IGl0IGlzIHBhc3NlZC4K
LSAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoc3Ry
dWN0IHNjdHBfaW5wY2IgKiosCi0gICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzY3RwX25l
dHMgKiosIHN0cnVjdCBzb2NrYWRkciAqLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotc3Ry
dWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzb2NfZXBfYXNvY2lkX2xvY2tlZChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wLCBzY3RwX2Fzc29jX3QgYXNvY19pZCwgaW50IHdhbnRfbG9jayk7Ci0KLXN0
cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hc29jaWQoc3RydWN0IHNj
dHBfaW5wY2IgKiwKLSAgICBzY3RwX2Fzc29jX3QsIGludCk7Ci0KLXN0cnVjdCBzY3RwX3RjYiAq
Ci1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hc2NvbmYoc3RydWN0IG1idWYgKiwgaW50LCBzdHJ1
Y3Qgc29ja2FkZHIgKiwKLQkJCSAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCBzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKiwgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDMyX3QgdnJmX2lkKTsKLQotaW50IHNj
dHBfaW5wY2JfYWxsb2Moc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90IHZyZl9pZCk7Ci0KLWlu
dCBzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVp
bnQzMl90IHZyZl9pZCk7Ci0KLXZvaWQgc2N0cF9pbnBjYl9mcmVlKHN0cnVjdCBzY3RwX2lucGNi
ICosIGludCwgaW50KTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDUwMDAwMAotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfYWxvY19hc3NvYyhzdHJ1
Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAgICAgICAgICAgICBpbnQg
KiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIHN0cnVjdCB0aHJlYWQg
Kik7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBf
YWxvY19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAg
ICAgICAgICAgICBpbnQgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3Qs
IFBLVEhSRUFEKTsKLSNlbHNlCi0vKiBwcm9jIHdpbGwgYmUgTlVMTCBmb3IgX19Vc2Vyc3BhY2Vf
XyAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfYWxvY19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBj
YiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAgICAgICAgICAgICBpbnQgKiwgdWludDMyX3Qs
IHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIHN0cnVjdCBwcm9jICopOwotI2VuZGlmCi0K
LWludCBzY3RwX2ZyZWVfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNi
ICosIGludCwgaW50KTsKLQotCi12b2lkIHNjdHBfZGVsZXRlX2Zyb21fdGltZXdhaXQodWludDMy
X3QsIHVpbnQxNl90LCB1aW50MTZfdCk7Ci0KLWludCBzY3RwX2lzX2luX3RpbWV3YWl0KHVpbnQz
Ml90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0KTsKLQotdm9pZAotc2N0cF9h
ZGRfdnRhZ190b190aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQzMl90IHRpbWUsIHVpbnQxNl90
IGxwb3J0LCB1aW50MTZfdCBycG9ydCk7Ci0KLXZvaWQgc2N0cF9hZGRfbG9jYWxfYWRkcl9lcChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgdWludDMyX3QpOwotCi12b2lk
IHNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBf
aWZhICopOwotCi1pbnQgc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RydWN0IHNjdHBfdGNiICosIHN0
cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCB1aW50MTZfdCwgaW50LCBpbnQp
OwotCi12b2lkIHNjdHBfcmVtb3ZlX25ldChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBf
bmV0cyAqKTsKLQotaW50IHNjdHBfZGVsX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLXZvaWQgc2N0cF9wY2JfaW5pdCh2b2lkKTsKLQotdm9pZCBz
Y3RwX3BjYl9maW5pc2godm9pZCk7Ci0KLXZvaWQgc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmlj
dGVkKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKik7Ci12b2lkIHNjdHBfZGVs
X2xvY2FsX2FkZHJfcmVzdHJpY3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfaWZh
ICopOwotCi1pbnQKLXNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0cnVjdCBzY3RwX3Rj
YiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3Ry
dWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLCB1aW50MTZfdCk7Ci0KLWludAotc2N0
cF9zZXRfcHJpbWFyeV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwK
LSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1pbnQgc2N0cF9pc192dGFnX2dvb2QodWludDMy
X3QsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgc3RydWN0IHRpbWV2YWwgKik7Ci0K
LS8qIHZvaWQgc2N0cF9kcmFpbih2b2lkKTsgKi8KLQotaW50IHNjdHBfZGVzdGluYXRpb25faXNf
cmVhY2hhYmxlKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLWludCBz
Y3RwX3N3YXBfaW5wY2JfZm9yX2xpc3RlbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wKTsKLQotdm9p
ZCBzY3RwX2NsZWFuX3VwX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X3JlYWRoZWFkICpyaCk7Ci0KLS8qLQotICogTnVsbCBpbiBsYXN0IGFyZyBpbnBjYiBpbmRpY2F0
ZSBydW4gb24gQUxMIGVwJ3MuIFNwZWNpZmljIGlucCBpbiBsYXN0IGFyZwotICogaW5kaWNhdGVz
IHJ1biBvbiBPTkxZIGFzc29jJ3Mgb2YgdGhlIHNwZWNpZmllZCBlbmRwb2ludC4KLSAqLwotaW50
Ci1zY3RwX2luaXRpYXRlX2l0ZXJhdG9yKGlucF9mdW5jIGlucGYsCi0JCSAgICAgICBhc29jX2Z1
bmMgYWYsCi0JCSAgICAgICBpbnBfZnVuYyBpbnBlLAotCQkgICAgICAgdWludDMyX3QsIHVpbnQz
Ml90LAotCQkgICAgICAgdWludDMyX3QsIHZvaWQgKiwKLQkJICAgICAgIHVpbnQzMl90LAotCQkg
ICAgICAgZW5kX2Z1bmMgZWYsCi0JCSAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqLAotCQkgICAg
ICAgdWludDhfdCBjb19vZmYpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQo
U0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi12b2lkCi1zY3RwX3F1ZXVlX3RvX21j
b3JlKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgY3B1X3RvX3VzZSk7Ci0KLSNlbmRpZgot
Ci0jZW5kaWYJCQkJLyogX0tFUk5FTCAqLwotI2VuZGlmCQkJCS8qICFfX3NjdHBfcGNiX2hfXyAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9wZWVsb2ZmLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdj
NTVhYTMyY2QzZmI0YWRjMmU4NTNjNTEwM2RlMDkxODk3MGUzMzcuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxv
ZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAo
YykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVl
eGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVy
IHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQot
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0j
aW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGlu
ZXQvc2N0cF9wZWVsb2ZmLmMgMjc5ODU5IDIwMTUtMDMtMTAgMTk6NDk6MjVaIHR1ZXhlbiAkIik7
Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+Ci0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wZWVs
b2ZmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9hdXRoLmg+Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNkZWZpbmUgQVBQTEVfRklM
RV9OTyA1Ci0jZW5kaWYKLQotaW50Ci1zY3RwX2Nhbl9wZWVsX29mZihzdHJ1Y3Qgc29ja2V0ICpo
ZWFkLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQpCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
LQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JdWludDMyX3Qgc3RhdGU7Ci0KLQlpZiAoaGVhZCA9
PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUEVFTE9GRiwgRUJBREYpOwotCQlyZXR1cm4gKEVCQURGKTsKLQl9Ci0JaW5wID0g
KHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewot
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BF
RUxPRkYsIEVGQVVMVCk7Ci0JCXJldHVybiAoRUZBVUxUKTsKLQl9Ci0JaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVPUE5PVFNVUFApOwotCQly
ZXR1cm4gKEVPUE5PVFNVUFApOwotCX0KLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBf
YXNvY2lkKGlucCwgYXNzb2NfaWQsIDEpOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVO
T0VOVCk7Ci0JCXJldHVybiAoRU5PRU5UKTsKLQl9Ci0Jc3RhdGUgPSBTQ1RQX0dFVF9TVEFURSgo
JnN0Y2ItPmFzb2MpKTsKLQlpZiAoKHN0YXRlID09IFNDVFBfU1RBVEVfRU1QVFkpIHx8Ci0JICAg
IChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0lOVVNFKSkgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
RUVMT0ZGLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JLyogV2UgYXJlIGNsZWFyIHRvIHBlZWwgdGhpcyBvbmUgb2ZmICovCi0J
cmV0dXJuICgwKTsKLX0KLQotaW50Ci1zY3RwX2RvX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVh
ZCwgc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBhc3NvY19pZCkKLXsKLQlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCAqbl9pbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXVpbnQz
Ml90IHN0YXRlOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwot
CWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRUZBVUxUKTsKLQkJcmV0dXJuIChFRkFVTFQpOwot
CX0KLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNzb2NfaWQs
IDEpOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05OKTsKLQkJcmV0dXJuIChF
Tk9UQ09OTik7Ci0JfQotCi0Jc3RhdGUgPSBTQ1RQX0dFVF9TVEFURSgoJnN0Y2ItPmFzb2MpKTsK
LQlpZiAoKHN0YXRlID09IFNDVFBfU1RBVEVfRU1QVFkpIHx8Ci0JICAgIChzdGF0ZSA9PSBTQ1RQ
X1NUQVRFX0lOVVNFKSkgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09O
Tik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQotCW5faW5wID0gKHN0cnVjdCBzY3RwX2lu
cGNiICopc28tPnNvX3BjYjsKLQluX2lucC0+c2N0cF9mbGFncyA9IChTQ1RQX1BDQl9GTEFHU19V
RFBUWVBFIHwKLQkgICAgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEIHwKLQkgICAgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCB8CS8qIFR1cm4gb24gQmxvY2tpbmcgSU8gKi8KLQkgICAgKFNDVFBf
UENCX0NPUFlfRkxBR1MgJiBpbnAtPnNjdHBfZmxhZ3MpKTsKLQluX2lucC0+c2N0cF9zb2NrZXQg
PSBzbzsKLQluX2lucC0+c2N0cF9mZWF0dXJlcyA9IGlucC0+c2N0cF9mZWF0dXJlczsKLQluX2lu
cC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyA9IGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlczsK
LQluX2lucC0+c2N0cF9mcmFnX3BvaW50ID0gaW5wLT5zY3RwX2ZyYWdfcG9pbnQ7Ci0Jbl9pbnAt
PnNjdHBfY210X29uX29mZiA9IGlucC0+c2N0cF9jbXRfb25fb2ZmOwotCW5faW5wLT5lY25fc3Vw
cG9ydGVkID0gaW5wLT5lY25fc3VwcG9ydGVkOwotCW5faW5wLT5wcnNjdHBfc3VwcG9ydGVkID0g
aW5wLT5wcnNjdHBfc3VwcG9ydGVkOwotCW5faW5wLT5hdXRoX3N1cHBvcnRlZCA9IGlucC0+YXV0
aF9zdXBwb3J0ZWQ7Ci0Jbl9pbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSBpbnAtPmFzY29uZl9zdXBw
b3J0ZWQ7Ci0Jbl9pbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3VwcG9y
dGVkOwotCW5faW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gaW5wLT5ucnNhY2tfc3VwcG9ydGVkOwot
CW5faW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9IGlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQ7Ci0Jbl9p
bnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQgPSBpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQ7
Ci0Jbl9pbnAtPnNjdHBfY29udGV4dCA9IGlucC0+c2N0cF9jb250ZXh0OwotCW5faW5wLT5tYXhf
Y3duZCA9IGlucC0+bWF4X2N3bmQ7Ci0Jbl9pbnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgPSBp
bnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7Ci0Jbl9pbnAtPmlucF9zdGFydGluZ19wb2ludF9m
b3JfaXRlcmF0b3IgPSBOVUxMOwotCS8qIGNvcHkgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIHBhcmFt
ZXRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgZW5kcG9pbnQgKi8KLQlpZiAobl9pbnAtPnNjdHBfZXAu
bG9jYWxfaG1hY3MpCi0JCXNjdHBfZnJlZV9obWFjbGlzdChuX2lucC0+c2N0cF9lcC5sb2NhbF9o
bWFjcyk7Ci0Jbl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MgPQotCSAgICBzY3RwX2NvcHlfaG1h
Y2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKLQlpZiAobl9pbnAtPnNjdHBfZXAubG9j
YWxfYXV0aF9jaHVua3MpCi0JCXNjdHBfZnJlZV9jaHVua2xpc3Qobl9pbnAtPnNjdHBfZXAubG9j
YWxfYXV0aF9jaHVua3MpOwotCW5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzID0KLQkg
ICAgc2N0cF9jb3B5X2NodW5rbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwot
CSh2b2lkKXNjdHBfY29weV9za2V5bGlzdCgmaW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlzLAotCSAg
ICAmbl9pbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQluX2lucC0+dWxwX2luZm8gPSBpbnAtPnVscF9pbmZvOwotCW5faW5wLT5yZWN2X2NhbGxi
YWNrID0gaW5wLT5yZWN2X2NhbGxiYWNrOwotCW5faW5wLT5zZW5kX2NhbGxiYWNrID0gaW5wLT5z
ZW5kX2NhbGxiYWNrOwotCW5faW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IGlucC0+c2VuZF9zYl90
aHJlc2hvbGQ7Ci0jZW5kaWYKLQkvKgotCSAqIE5vdyB3ZSBtdXN0IG1vdmUgaXQgZnJvbSBvbmUg
aGFzaCB0YWJsZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCi0JICogc3RjYiBpbiB0aGUgcmlnaHQg
cGxhY2UuCi0JICovCi0Jc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoaW5wLCBuX2lucCwgc3RjYik7
Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXNjdHBfcHVsbF9vZmZfY29u
dHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0Y2IsIFNCTF9XQUlUKTsKLSNlbHNlCi0Jc2N0
cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoaW5wLCBuX2lucCwgc3RjYiwgTV9XQUlUT0sp
OwotI2VuZGlmCi0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwot
Ci0JcmV0dXJuICgwKTsKLX0KLQotI2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09Q
VCkKLXN0cnVjdCBzb2NrZXQgKgotc2N0cF9nZXRfcGVlbG9mZihzdHJ1Y3Qgc29ja2V0ICpoZWFk
LCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsIGludCAqZXJyb3IpCi17Ci0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotICAgIC8qIGlmIF9fVXNlcnNwYWNlX18gY2hvb3NlcyB0byBvcmlnaW5hbGx5
IG5vdCBzdXBwb3J0IHBlZWxvZmYsIHB1dCBpdCBoZXJlLi4uICovCi0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVJTlZBTCk7Ci0JKmVycm9yID0gRUlOVkFMOwotCXJldHVy
biAoTlVMTCk7Ci0jZWxzZQotCXN0cnVjdCBzb2NrZXQgKm5ld3NvOwotCXN0cnVjdCBzY3RwX2lu
cGNiICppbnAsICpuX2lucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0KLQlTQ1RQREJHKFND
VFBfREVCVUdfUEVFTDEsICJTQ1RQIHBlZWwtb2ZmIGNhbGxlZFxuIik7Ci0JaW5wID0gKHN0cnVj
dCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwg
RUZBVUxUKTsKLQkJKmVycm9yID0gRUZBVUxUOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNzb2NfaWQsIDEpOwotCWlm
IChzdGNiID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05OKTsKLQkJKmVycm9yID0gRU5PVENPTk47
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCUNVUlZORVRfU0VUKGhlYWQtPnNvX3Zu
ZXQpOwotI2VuZGlmCi0JbmV3c28gPSBzb25ld2Nvbm4oaGVhZCwgU1NfSVNDT05ORUNURUQKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkgICAgLCBOVUxMCi0jZWxpZiBkZWZpbmVkKF9fUGFuZGFf
XykKLQkgICAgLyogcGxhY2UgdGhpcyBzb2NrZXQgaW4gdGhlIGFzc29jJ3MgdnJmIGlkICovCi0J
ICAgICwgTlVMTCwgc3RjYi0+YXNvYy52cmZfaWQKLSNlbmRpZgotCQkpOwotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCUNVUlZORVRfUkVT
VE9SRSgpOwotI2VuZGlmCi0JaWYgKG5ld3NvID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1BFRUwxLCAic2N0cF9wZWVsb2ZmOnNvbmV3Y29ubiBmYWlsZWRcbiIpOwotCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVO
T01FTSk7Ci0JCSplcnJvciA9IEVOT01FTTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotCQlyZXR1cm4gKE5VTEwpOwotCi0JfQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotCSAgZWxzZSB7Ci0JCVNDVFBfU09DS0VUX0xPQ0sobmV3c28sIDEpOwotCX0KLSNl
bmRpZgotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOwotCW5faW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopbmV3c28tPnNv
X3BjYjsKLQlTT0NLX0xPQ0soaGVhZCk7Ci0Jbl9pbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0Jf
RkxBR1NfVURQVFlQRSB8Ci0JICAgIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCB8Ci0JICAgIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wgfAkvKiBUdXJuIG9uIEJsb2NraW5nIElPICovCi0JICAg
IChTQ1RQX1BDQl9DT1BZX0ZMQUdTICYgaW5wLT5zY3RwX2ZsYWdzKSk7Ci0Jbl9pbnAtPnNjdHBf
ZmVhdHVyZXMgPSBpbnAtPnNjdHBfZmVhdHVyZXM7Ci0Jbl9pbnAtPnNjdHBfZnJhZ19wb2ludCA9
IGlucC0+c2N0cF9mcmFnX3BvaW50OwotCW5faW5wLT5zY3RwX2NtdF9vbl9vZmYgPSBpbnAtPnNj
dHBfY210X29uX29mZjsKLQluX2lucC0+ZWNuX3N1cHBvcnRlZCA9IGlucC0+ZWNuX3N1cHBvcnRl
ZDsKLQluX2lucC0+cHJzY3RwX3N1cHBvcnRlZCA9IGlucC0+cHJzY3RwX3N1cHBvcnRlZDsKLQlu
X2lucC0+YXV0aF9zdXBwb3J0ZWQgPSBpbnAtPmF1dGhfc3VwcG9ydGVkOwotCW5faW5wLT5hc2Nv
bmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOwotCW5faW5wLT5yZWNvbmZpZ19z
dXBwb3J0ZWQgPSBpbnAtPnJlY29uZmlnX3N1cHBvcnRlZDsKLQluX2lucC0+bnJzYWNrX3N1cHBv
cnRlZCA9IGlucC0+bnJzYWNrX3N1cHBvcnRlZDsKLQluX2lucC0+cGt0ZHJvcF9zdXBwb3J0ZWQg
PSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOwotCW5faW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50
ID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OwotCW5faW5wLT5zY3RwX2NvbnRleHQgPSBp
bnAtPnNjdHBfY29udGV4dDsKLQluX2lucC0+bWF4X2N3bmQgPSBpbnAtPm1heF9jd25kOwotCW5f
aW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0
OwotCW5faW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yID0gTlVMTDsKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jbl9pbnAtPnVscF9pbmZvID0gaW5wLT51bHBfaW5mbzsK
LQluX2lucC0+cmVjdl9jYWxsYmFjayA9IGlucC0+cmVjdl9jYWxsYmFjazsKLQluX2lucC0+c2Vu
ZF9jYWxsYmFjayA9IGlucC0+c2VuZF9jYWxsYmFjazsKLQluX2lucC0+c2VuZF9zYl90aHJlc2hv
bGQgPSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkOwotI2VuZGlmCi0KLQkvKiBjb3B5IGluIHRoZSBh
dXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIG9yaWdpbmFsIGVuZHBvaW50ICovCi0J
aWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQotCQlzY3RwX2ZyZWVfaG1hY2xpc3Qobl9p
bnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOwotCW5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzID0K
LQkgICAgc2N0cF9jb3B5X2htYWNsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9obWFjcyk7Ci0JaWYg
KG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKQotCQlzY3RwX2ZyZWVfY2h1bmtsaXN0
KG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQluX2lucC0+c2N0cF9lcC5sb2Nh
bF9hdXRoX2NodW5rcyA9Ci0JICAgIHNjdHBfY29weV9jaHVua2xpc3QoaW5wLT5zY3RwX2VwLmxv
Y2FsX2F1dGhfY2h1bmtzKTsKLQkodm9pZClzY3RwX2NvcHlfc2tleWxpc3QoJmlucC0+c2N0cF9l
cC5zaGFyZWRfa2V5cywKLQkgICAgJm5faW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlzKTsKLQotCW5f
aW5wLT5zY3RwX3NvY2tldCA9IG5ld3NvOwotCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7Ci0JCXNjdHBfZmVhdHVyZV9vZmYobl9pbnAsIFND
VFBfUENCX0ZMQUdTX0FVVE9DTE9TRSk7Ci0JCW5faW5wLT5zY3RwX2VwLmF1dG9fY2xvc2VfdGlt
ZSA9IDA7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBuX2lu
cCwgc3RjYiwgTlVMTCwKLQkJCQlTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGICsgU0NUUF9MT0NfMSk7
Ci0JfQotCS8qIFR1cm4gb2ZmIGFueSBub24tYmxvY2tpbmcgc2VtYW50aWMuICovCi0JU0NUUF9D
TEVBUl9TT19OQklPKG5ld3NvKTsKLSAgICAgICAgbmV3c28tPnNvX3N0YXRlIHw9IFNTX0lTQ09O
TkVDVEVEOwotCS8qIFdlIHJlbW92ZSBpdCByaWdodCBhd2F5ICovCi0KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykg
fHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCi0JaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5H
X0VOQUJMRSkgewotCQlzY3RwX2xvZ19sb2NrKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEws
IFNDVFBfTE9HX0xPQ0tfU09DSyk7Ci0JfQotI2VuZGlmCi0JVEFJTFFfUkVNT1ZFKCZoZWFkLT5z
b19jb21wLCBuZXdzbywgc29fbGlzdCk7Ci0JaGVhZC0+c29fcWxlbi0tOwotCVNPQ0tfVU5MT0NL
KGhlYWQpOwotI2Vsc2UKLSAgICAgICAgbmV3c28gPSBUQUlMUV9GSVJTVCgmaGVhZC0+c29fcSk7
Ci0JaWYgKHNvcXJlbXF1ZShuZXdzbywgMSkgPT0gMCkgewotCQlTQ1RQX1BSSU5URigic29yZW1x
dWUgZmFpbGVkLCBwZWVsb2ZmLWZhaWxzIChpbnZhcmllbnRzIHdvdWxkIHBhbmljKVxuIik7Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVM
T0ZGLCBFTk9UQ09OTik7Ci0JCSplcnJvciA9IEVOT1RDT05OOwotCQlyZXR1cm4gKE5VTEwpOwot
Ci0JfQotI2VuZGlmCi0JLyoKLQkgKiBOb3cgd2UgbXVzdCBtb3ZlIGl0IGZyb20gb25lIGhhc2gg
dGFibGUgdG8gYW5vdGhlciBhbmQgZ2V0IHRoZQotCSAqIHN0Y2IgaW4gdGhlIHJpZ2h0IHBsYWNl
LgotCSAqLwotICAgICAgICBzY3RwX21vdmVfcGNiX2FuZF9hc3NvYyhpbnAsIG5faW5wLCBzdGNi
KTsKLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkvKgotCSAqIEFuZCBub3cgdGhlIGZpbmFsIGhhY2suIFdlIG1vdmUgZGF0
YSBpbiB0aGUgcGVuZGluZyBzaWRlIGkuZS4KLQkgKiBoZWFkIHRvIHRoZSBuZXcgc29ja2V0IGJ1
ZmZlci4gTGV0IHRoZSBHUlVCQklORyBiZWdpbiA6LTAKLQkgKi8KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0
Y2IsIFNCTF9XQUlUKTsKLSNlbHNlCi0Jc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAo
aW5wLCBuX2lucCwgc3RjYiwgTV9XQUlUT0spOwotI2VuZGlmCi0JYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCXJldHVybiAobmV3c28pOwotI2VuZGlmCi19Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAyMjM3NWUzZDMwYWY4YjJlMTZiNmEzNTRhYzczNmNjZDYwZGM2NGNiLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9w
ZWVsb2ZmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdo
dCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwg
VHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0
aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9f
Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQvc2N0cF9wZWVsb2ZmLmggMzA5NjA3IDIwMTYtMTItMDYgMTA6MjE6MjVaIHR1ZXhlbiAk
Iik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1BFRUxPRkZfSF8KLSNkZWZpbmUg
X05FVElORVRfU0NUUF9QRUVMT0ZGX0hfCi0jaWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9T
T0NLT1BUKQotLyogc29ja2V0IG9wdGlvbiBwZWVsb2ZmICovCi1zdHJ1Y3Qgc2N0cF9wZWVsb2Zm
X29wdCB7Ci0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0JaW50IHM7Ci0jZWxzZQotCUhBTkRM
RSBzOwotI2VuZGlmCi0Jc2N0cF9hc3NvY190IGFzc29jX2lkOwotI2lmICFkZWZpbmVkKF9fV2lu
ZG93c19fKQotCWludCBuZXdfc2Q7Ci0jZWxzZQotCUhBTkRMRSBuZXdfc2Q7Ci0jZW5kaWYKLX07
Ci0jZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCAqLwotI2lmIGRlZmluZWQoX0tF
Uk5FTCkKLWludCBzY3RwX2Nhbl9wZWVsX29mZihzdHJ1Y3Qgc29ja2V0ICosIHNjdHBfYXNzb2Nf
dCk7Ci1pbnQgc2N0cF9kb19wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tldCAq
LCBzY3RwX2Fzc29jX3QpOwotI2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCkK
LXN0cnVjdCBzb2NrZXQgKnNjdHBfZ2V0X3BlZWxvZmYoc3RydWN0IHNvY2tldCAqLCBzY3RwX2Fz
c29jX3QsIGludCAqKTsKLWludCBzY3RwX3BlZWxvZmZfb3B0aW9uKHN0cnVjdCBwcm9jICpwLCBz
dHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCAqcGVlbG9mZik7Ci0jZW5kaWYgLyogSEFWRV9TQ1RQX1BF
RUxPRkZfU09DS09QVCAqLwotI2VuZGlmIC8qIF9LRVJORUwgKi8KLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi1pbnQgc2N0cF9jYW5fcGVlbF9vZmYoc3RydWN0IHNvY2tldCAqLCBzY3RwX2Fz
c29jX3QpOwotaW50IHNjdHBfZG9fcGVlbG9mZihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2Nr
ZXQgKiwgc2N0cF9hc3NvY190KTsKLSNlbmRpZiAvKiBfX1VzZXJzcGFjZV9fICovCi0jZW5kaWYg
LyogX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcHJvY2Vzc19s
b2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTA5ODU3YTIyN2JkMWFkODk3
NjdlOTlmN2ZhMzJkNTc5YzM2MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjQyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcs
IGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAq
Ci0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
bgotICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENp
c2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX19zY3RwX3Byb2Nlc3NfbG9ja19oX18KLSNkZWZp
bmUgX19zY3RwX3Byb2Nlc3NfbG9ja19oX18KLQotLyoKLSAqIE5lZWQgdG8geWV0IGRlZmluZSBm
aXZlIGF0b21pYyBmdWN0aW9ucyBvcgotICogdGhlaXIgZXF1aXZhbGFudC4KLSAqIC0gYXRvbWlj
X2FkZF9pbnQoJmZvbywgdmFsKSAtIGFkZCBhdG9taWNhbGx5IHRoZSB2YWx1ZQotICogLSBhdG9t
aWNfZmV0Y2hhZGRfaW50KCZmb28sIHZhbCkgLSBkb2VzIHNhbWUgYXMgYXRvbWljX2FkZF9pbnQK
LSAqCQkJCSAgICAgIGJ1dCB2YWx1ZSBpdCB3YXMgaXMgcmV0dXJuZWQuCi0gKiAtIGF0b21pY19z
dWJ0cmFjdF9pbnQoJmZvbywgdmFsKSAtIGNhbiBiZSBtYWRlIGZyb20gYXRvbWljX2FkZF9pbnQo
KQotICoKLSAqIC0gYXRvbWljX2NtcHNldF9pbnQoJmZvbywgdmFsdWUsIG5ld3ZhbHVlKSAtIERv
ZXMgYSBzZXQgb2YgbmV3dmFsdWUKLSAqCQkJCQkgICAgICAgIGluIGZvbyBpZiBhbmQgb25seSBp
ZgotICoJCQkJCSAgICAgICAgZm9vIGlzIHZhbHVlLiBSZXR1cm5zIDAKLSAqCQkJCQkgICAgICAg
IG9uIHN1Y2Nlc3MuCi0gKi8KLQotI2lmZGVmIFNDVFBfUEVSX1NPQ0tFVF9MT0NLSU5HCi0vKgot
ICogcGVyIHNvY2tldCBsZXZlbCBsb2NraW5nCi0gKi8KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLS8qIExvY2sgZm9yIElORk8gc3R1ZmYgKi8KLSNkZWZpbmUgU0NUUF9J
TlBfSU5GT19MT0NLX0lOSVQoKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkKLSNkZWZp
bmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19XTE9DSygp
Ci0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9f
TE9DS19ERVNUUk9ZKCkKLSNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5JVCgpCi0jZGVmaW5lIFND
VFBfSVBJX0NPVU5UX0RFU1RST1koKQotI2Vsc2UKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NL
X0lOSVQoKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkKLSNkZWZpbmUgU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19XTE9DSygpCi0jZGVmaW5lIFND
VFBfSU5QX0lORk9fV1VOTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9Z
KCkKLSNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5JVCgpCi0jZGVmaW5lIFNDVFBfSVBJX0NPVU5U
X0RFU1RST1koKQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0lOSVQoX3Rj
YikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3RjYikKLSNkZWZpbmUgU0NU
UF9UQ0JfU0VORF9MT0NLKF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfVU5MT0NLKF90Y2Ip
Ci0KLS8qIExvY2sgZm9yIElOUCAqLwotI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0lOSVQoX2lucCkK
LSNkZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNUUk9ZKF9pbnApCi0KLSNkZWZpbmUgU0NUUF9JTlBf
UkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfUlVOTE9DSyhfaW5wKQotI2RlZmluZSBTQ1RQ
X0lOUF9XTE9DSyhfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NLKF9pbmVwKQotI2RlZmlu
ZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JFRihfaW5w
KQotCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApCi0jZGVmaW5lIFND
VFBfQVNPQ19DUkVBVEVfTE9DS19ERVNUUk9ZKF9pbnApCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVB
VEVfTE9DSyhfaW5wKQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhfaW5wKQotCi0j
ZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RF
U1RST1koX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9pbnApCi0jZGVmaW5lIFND
VFBfSU5QX1JFQURfVU5MT0NLKF9pbnApCi0KLS8qIExvY2sgZm9yIFRDQiAqLwotI2RlZmluZSBT
Q1RQX1RDQl9MT0NLX0lOSVQoX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90
Y2IpCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfVFJZTE9D
SyhfdGNiKSAxCi0jZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKQotI2RlZmluZSBTQ1RQX1RD
Ql9VTkxPQ0tfSUZPV05FRChfdGNiKQotI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0FTU0VSVChfdGNi
KQotCi0jZWxzZQotLyoKLSAqIHBlciB0Y2IgbGV2ZWwgbG9ja2luZwotICovCi0jZGVmaW5lIFND
VFBfSVBJX0NPVU5UX0lOSVQoKQotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotI2RlZmluZSBTQ1RQX1dRX0FERFJfSU5JVCgpIFwKLSAgICAgICAgSW5pdGlhbGl6ZUNyaXRp
Y2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQotI2RlZmluZSBTQ1RQX1dR
X0FERFJfREVTVFJPWSgpIFwKLQlEZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZP
KHdxX2FkZHJfbXR4KSkKLSNkZWZpbmUgU0NUUF9XUV9BRERSX0xPQ0soKSBcCi0gICAgICAgIEVu
dGVyQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCi0jZGVmaW5l
IFNDVFBfV1FfQUREUl9VTkxPQ0soKSBcCi0gICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZT
Q1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCi0KLQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX0xP
Q0tfSU5JVCgpIFwKLQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhp
cGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1koKSBcCi0JRGVs
ZXRlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUg
U0NUUF9JTlBfSU5GT19STE9DSygpIFwKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNF
X0lORk8oaXBpX2VwX210eCkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fVFJZTE9DSygpCVwKLSAg
ICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgp
KQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAotCUVudGVyQ3JpdGljYWxTZWN0aW9u
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5M
T0NLKCkgXAotIAlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210
eCkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCVwKLQlMZWF2ZUNyaXRpY2FsU2Vj
dGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCi0KLSNkZWZpbmUgU0NUUF9JUF9QS1RM
T0dfSU5JVCgpIFwKLSAgICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNF
X0lORk8oaXBpX3BrdGxvZ19tdHgpKQotI2RlZmluZSBTQ1RQX0lQX1BLVExPR19ERVNUUk9ZICgp
IFwKLQlEZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4
KSkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygpIFwKLSAgICAJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKLSNkZWZpbmUgU0NUUF9JUF9Q
S1RMT0dfVU5MT0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhp
cGlfcGt0bG9nX210eCkpCi0KLS8qCi0gKiBUaGUgSU5QIGxvY2tzIHdlIHdpbGwgdXNlIGZvciBs
b2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFtcGxlIGlmCi0gKiB3ZSB3YW50IHRv
IGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxldmVsIGZvciBleGFtcGxlIHJhbmRv
bV9zdG9yZQotICogb3IgY29va2llIHNlY3JldHMgd2UgbG9jayB0aGUgSU5QIGxldmVsLgotICov
Ci0jZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBcCi0JSW5pdGlhbGl6ZUNyaXRpY2Fs
U2VjdGlvbigmKF9pbnApLT5pbnBfcmRhdGFfbXR4KQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RF
U1RST1koX2lucCkgXAotCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfcmRhdGFf
bXR4KQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lucCkgXAotCUVudGVyQ3JpdGljYWxT
ZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5M
T0NLKF9pbnApIFwKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfcmRhdGFfbXR4
KQotCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfSU5JVChfaW5wKSBcCi0JSW5pdGlhbGl6ZUNyaXRp
Y2FsU2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KQotCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVf
TE9DS19JTklUKF9pbnApIFwKLQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlu
cF9jcmVhdGVfbXR4KQotCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShfaW5wKSBcCi0J
RGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCi0KLSNkZWZpbmUgU0NUUF9B
U09DX0NSRUFURV9MT0NLX0RFU1RST1koX2lucCkgXAotCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigm
KF9pbnApLT5pbnBfY3JlYXRlX210eCkKLQotI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCi0jZGVm
aW5lIFNDVFBfSU5QX1JMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0JaWYoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSBzY3RwX2xv
Z19sb2NrKF9pbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7
XAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUg
KDApCi0KLSNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkJZG8geyAJCQkJCVwKLQlzY3RwX2xv
Z19sb2NrKF9pbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7
XAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUg
KDApCi0jZWxzZQotCi0jZGVmaW5lIFNDVFBfSU5QX1JMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0J
RW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCk7CQkJXAotfSB3aGlsZSAoMCkK
LQotI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQlkbyB7IAkJCQkJXAotCUVudGVyQ3JpdGlj
YWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQot
Ci0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwKLQlJbml0aWFsaXplQ3Jp
dGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKLQotI2RlZmluZSBTQ1RQX1RDQl9T
RU5EX0xPQ0tfREVTVFJPWShfdGNiKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYikt
PnRjYl9zZW5kX210eCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0soX3RjYikgZG8geyBc
Ci0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3NlbmRfbXR4KTsgXAotfSB3aGls
ZSAoMCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX1VOTE9DSyhfdGNiKSBcCi0JTGVhdmVDcml0
aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3NlbmRfbXR4KQotCi0jZGVmaW5lIFNDVFBfSU5QX0lO
Q1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIDEpCi0jZGVm
aW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZj
b3VudCksIC0xKQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLSNkZWZpbmUgU0NUUF9BU09D
X0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJXAotCWlmKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgc2N0cF9sb2dfbG9jayhf
aW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9DS19DUkVBVEUpOyBcCi0J
RW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpOwkJXAotfSB3aGls
ZSAoMCkKLSNlbHNlCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKSBkbyB7CQkJ
CVwKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCk7CQlcCi19
IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9JTlBfUlVOTE9DSyhfaW5wKSBcCi0J
TGVhdmVDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCkKLSNkZWZpbmUgU0NUUF9JTlBf
V1VOTE9DSyhfaW5wKSBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCkK
LSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkgXAotCUxlYXZlQ3JpdGljYWxT
ZWN0aW9uKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KQotCi0vKgotICogRm9yIHRoZSBtYWpvcml0
eSBvZiB0aGluZ3MgKG9uY2Ugd2UgaGF2ZSBmb3VuZCB0aGUgYXNzb2NpYXRpb24pIHdlIHdpbGwK
LSAqIGxvY2sgdGhlIGFjdHVhbCBhc3NvY2lhdGlvbiBtdXRleC4gVGhpcyB3aWxsIHByb3RlY3Qg
YWxsIHRoZSBhc3NvaWNpYXRpb24KLSAqIGxldmVsIHF1ZXVlcyBhbmQgc3RyZWFtcyBhbmQgc3Vj
aC4gV2Ugd2lsbCBuZWVkIHRvIGxvY2sgdGhlIHNvY2tldCBsYXllcgotICogd2hlbiB3ZSBzdHVm
ZiBkYXRhIHVwIGludG8gdGhlIHJlY2VpdmluZyBzYl9tYi4gSS5lLiB3ZSB3aWxsIG5lZWQgdG8g
ZG8gYW4KLSAqIGV4dHJhIFNPQ0tCVUZfTE9DSygmc28tPnNvX3JjdikgZXZlbiB0aG91Z2ggdGhl
IGFzc29jaWF0aW9uIGlzIGxvY2tlZC4KLSAqLwotCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5J
VChfdGNiKSBcCi0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KQot
Ci0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfREVTVFJPWShfdGNiKSBcCi0JRGVsZXRlQ3JpdGljYWxT
ZWN0aW9uKCYoX3RjYiktPnRjYl9tdHgpCi0KLSNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORwotI2Rl
ZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpICBkbyB7CQkJCQlcCi0JaWYoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSBzY3RwX2xv
Z19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tfVENCKTsJCVwKLQlFbnRl
ckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KTsJCQlcCi19IHdoaWxlICgwKQotCi0j
ZWxzZQotI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpICBkbyB7CQkJCQlcCi0JRW50ZXJDcml0
aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCk7CQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgot
Ci0jZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgCSgoVHJ5RW50ZXJDcml0aWNhbFNlY3Rp
b24oJihfdGNiKS0+dGNiX210eCkpKQotCi0jZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKQlk
byB7ICBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCk7ICBcCi19IHdo
aWxlICgwKQotCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNTRVJUKF90Y2IpCi0KLSNlbHNlIC8q
IGFsbCBVc2Vyc3BhY2VzIGV4Y2VwdCBXaW5kb3dzICovCi0jZGVmaW5lIFNDVFBfV1FfQUREUl9J
TklUKCkgXAotICAgICAgICAodm9pZClwdGhyZWFkX211dGV4X2luaXQoJlNDVFBfQkFTRV9JTkZP
KHdxX2FkZHJfbXR4KSwgTlVMTCkKLSNkZWZpbmUgU0NUUF9XUV9BRERSX0RFU1RST1koKSBcCi0J
KHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkp
Ci0jZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NLKCkgXAotICAgICAgICAodm9pZClwdGhyZWFkX211
dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkKLSNkZWZpbmUgU0NUUF9XUV9B
RERSX1VOTE9DSygpIFwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBf
QkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkKLQotCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19J
TklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lORk8oaXBpX2Vw
X210eCksIE5VTEwpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkgXAotCSh2
b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCi0j
ZGVmaW5lIFNDVFBfSU5QX0lORk9fUkxPQ0soKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2Nr
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19UUllM
T0NLKCkJXAotICAgICAgICAoIShwdGhyZWFkX211dGV4X3RyeWxvY2soJlNDVFBfQkFTRV9JTkZP
KGlwaV9lcF9tdHgpKSkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV0xPQ0soKSBcCi0JKHZvaWQp
cHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUg
U0NUUF9JTlBfSU5GT19SVU5MT0NLKCkJXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCkJXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSkKLQotI2RlZmluZSBTQ1RQX0lQX1BLVExPR19JTklUKCkgXAotICAgICAgICAodm9pZClw
dGhyZWFkX211dGV4X2luaXQoJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSwgTlVMTCkK
LSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJPWSgpIFwKLQkodm9pZClwdGhyZWFkX211dGV4
X2Rlc3Ryb3koJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKLSNkZWZpbmUgU0NUUF9J
UF9QS1RMT0dfTE9DSygpIFwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCi0jZGVmaW5lIFNDVFBfSVBfUEtUTE9HX1VOTE9D
SygpCVwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZP
KGlwaV9wa3Rsb2dfbXR4KSkKLQotCi0KLS8qCi0gKiBUaGUgSU5QIGxvY2tzIHdlIHdpbGwgdXNl
IGZvciBsb2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFtcGxlIGlmCi0gKiB3ZSB3
YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxldmVsIGZvciBleGFtcGxl
IHJhbmRvbV9zdG9yZQotICogb3IgY29va2llIHNlY3JldHMgd2UgbG9jayB0aGUgSU5QIGxldmVs
LgotICovCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBcCi0JKHZvaWQpcHRocmVh
ZF9tdXRleF9pbml0KCYoX2lucCktPmlucF9yZGF0YV9tdHgsIE5VTEwpCi0KLSNkZWZpbmUgU0NU
UF9JTlBfUkVBRF9ERVNUUk9ZKF9pbnApIFwKLQkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3ko
JihfaW5wKS0+aW5wX3JkYXRhX210eCkKLQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lu
cCkJZG8geyBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9yZGF0YV9t
dHgpOyAgICBcCi19IHdoaWxlICgwKQotCi0KLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9VTkxPQ0so
X2lucCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9yZGF0YV9t
dHgpCi0KLSNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApIFwKLQkodm9pZClwdGhyZWFk
X211dGV4X2luaXQoJihfaW5wKS0+aW5wX210eCwgTlVMTCkKLQotI2RlZmluZSBTQ1RQX0FTT0Nf
Q1JFQVRFX0xPQ0tfSU5JVChfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCYoX2lu
cCktPmlucF9jcmVhdGVfbXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJP
WShfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCYoX2lucCktPmlucF9tdHgp
Ci0KLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1koX2lucCkgXAotCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKLQotI2lmZGVm
IFNDVFBfTE9DS19MT0dHSU5HCi0jZGVmaW5lIFNDVFBfSU5QX1JMT0NLKF9pbnApCWRvIHsgCQkJ
CQlcCi0JaWYoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NL
X0xPR0dJTkdfRU5BQkxFKSBzY3RwX2xvZ19sb2NrKF9pbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilO
VUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7XAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmKF9p
bnApLT5pbnBfbXR4KTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5QX1dMT0NL
KF9pbnApCWRvIHsgCQkJCQlcCi0Jc2N0cF9sb2dfbG9jayhfaW5wLCAoc3RydWN0IHNjdHBfdGNi
ICopTlVMTCwgU0NUUF9MT0dfTE9DS19JTlApO1wKLQkodm9pZClwdGhyZWFkX211dGV4X2xvY2so
JihfaW5wKS0+aW5wX210eCk7CQkJXAotfSB3aGlsZSAoMCkKLQotI2Vsc2UKLQotI2RlZmluZSBT
Q1RQX0lOUF9STE9DSyhfaW5wKQlkbyB7IAkJCQkJXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9j
aygmKF9pbnApLT5pbnBfbXR4KTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5Q
X1dMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lu
cCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotCi0jZGVmaW5lIFNDVFBf
VENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwKLQkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihf
dGNiKS0+dGNiX3NlbmRfbXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19E
RVNUUk9ZKF90Y2IpIFwKLQkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJihfdGNiKS0+dGNi
X3NlbmRfbXR4KQotCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DSyhfdGNiKSBkbyB7IFwKLQko
dm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX3NlbmRfbXR4KTsgXAotfSB3aGls
ZSAoMCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX1VOTE9DSyhfdGNiKSBcCi0JKHZvaWQpcHRo
cmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNiX3NlbmRfbXR4KQotCi0jZGVmaW5lIFNDVFBf
SU5QX0lOQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIDEp
Ci0jZGVmaW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnAp
LT5yZWZjb3VudCksIC0xKQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLSNkZWZpbmUgU0NU
UF9BU09DX0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJXAotCWlmKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgc2N0cF9sb2df
bG9jayhfaW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9DS19DUkVBVEUp
OyBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KTsJ
CVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soX2lu
cCkgZG8gewkJCQlcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9jcmVh
dGVfbXR4KTsJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2RlZmluZSBTQ1RQX0lOUF9SVU5M
T0NLKF9pbnApIFwKLQkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4
KQotI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NLKF9pbnApIFwKLQkodm9pZClwdGhyZWFkX211dGV4
X3VubG9jaygmKF9pbnApLT5pbnBfbXR4KQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9D
SyhfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJihfaW5wKS0+aW5wX2NyZWF0
ZV9tdHgpCi0KLS8qCi0gKiBGb3IgdGhlIG1ham9yaXR5IG9mIHRoaW5ncyAob25jZSB3ZSBoYXZl
IGZvdW5kIHRoZSBhc3NvY2lhdGlvbikgd2Ugd2lsbAotICogbG9jayB0aGUgYWN0dWFsIGFzc29j
aWF0aW9uIG11dGV4LiBUaGlzIHdpbGwgcHJvdGVjdCBhbGwgdGhlIGFzc29pY2lhdGlvbgotICog
bGV2ZWwgcXVldWVzIGFuZCBzdHJlYW1zIGFuZCBzdWNoLiBXZSB3aWxsIG5lZWQgdG8gbG9jayB0
aGUgc29ja2V0IGxheWVyCi0gKiB3aGVuIHdlIHN0dWZmIGRhdGEgdXAgaW50byB0aGUgcmVjZWl2
aW5nIHNiX21iLiBJLmUuIHdlIHdpbGwgbmVlZCB0byBkbyBhbgotICogZXh0cmEgU09DS0JVRl9M
T0NLKCZzby0+c29fcmN2KSBldmVuIHRob3VnaCB0aGUgYXNzb2NpYXRpb24gaXMgbG9ja2VkLgot
ICovCi0KLSNkZWZpbmUgU0NUUF9UQ0JfTE9DS19JTklUKF90Y2IpIFwKLQkodm9pZClwdGhyZWFk
X211dGV4X2luaXQoJihfdGNiKS0+dGNiX210eCwgTlVMTCkKLQotI2RlZmluZSBTQ1RQX1RDQl9M
T0NLX0RFU1RST1koX3RjYikgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF90Y2Ip
LT50Y2JfbXR4KQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLSNkZWZpbmUgU0NUUF9UQ0Jf
TE9DSyhfdGNiKSAgZG8gewkJCQkJXAotCWlmKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgc2N0cF9sb2dfbG9jayhfdGNiLT5z
Y3RwX2VwLCBfdGNiLCBTQ1RQX0xPR19MT0NLX1RDQik7CQlcCi0JKHZvaWQpcHRocmVhZF9tdXRl
eF9sb2NrKCYoX3RjYiktPnRjYl9tdHgpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbHNlCi0jZGVm
aW5lIFNDVFBfVENCX0xPQ0soX3RjYikgIGRvIHsJCQkJCVwKLQkodm9pZClwdGhyZWFkX211dGV4
X2xvY2soJihfdGNiKS0+dGNiX210eCk7CQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVm
aW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgCSghKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmKF90
Y2IpLT50Y2JfbXR4KSkpCi0KLSNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NLKF90Y2IpCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX3RjYiktPnRjYl9tdHgpCi0KLSNkZWZpbmUgU0NUUF9UQ0Jf
TE9DS19BU1NFUlQoX3RjYikKLSNlbmRpZgotCi0jZW5kaWYgLyogU0NUUF9QRVJfU09DS0VUX0xP
Q0tJTkcgKi8KLQotCi0vKgotICogY29tbW9uIGxvY2tzCi0gKi8KLQotLyogY29waWVkIG92ZXIg
dG8gY29tcGlsZSAqLwotI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkg
LyogRG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0jZGVmaW5lIFNDVFBfSU5QX1JF
QURfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRoaXMgaXMgcG9zc2libGUg
Ki8KLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkgLyog
RG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0KLQotLyogc29ja2V0IGxvY2tzICov
Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQotI2RlZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpCi0jZGVmaW5l
IFNPQ0tCVUZfTE9DSyhfc29fYnVmKSBFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9zb19idWYpLT5z
Yl9tdHgpCi0jZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpIExlYXZlQ3JpdGljYWxTZWN0
aW9uKCYoX3NvX2J1ZiktPnNiX210eCkKLSNkZWZpbmUgU09DS19MT0NLKF9zbykgIFNPQ0tCVUZf
TE9DSygmKF9zbyktPnNvX3JjdikKLSNkZWZpbmUgU09DS19VTkxPQ0soX3NvKSAgU09DS0JVRl9V
TkxPQ0soJihfc28pLT5zb19yY3YpCi0jZWxzZQotI2RlZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJU
KF9zb19idWYpIEtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKFNPQ0tCVUZfTVRYKF9zb19i
dWYpKSA9PSBFQlVTWSwgKCIlczogc29ja2V0IGJ1ZmZlciBub3QgbG9ja2VkIiwgX19mdW5jX18p
KQotI2RlZmluZSBTT0NLQlVGX0xPQ0soX3NvX2J1ZikgICBwdGhyZWFkX211dGV4X2xvY2soU09D
S0JVRl9NVFgoX3NvX2J1ZikpCi0jZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpIHB0aHJl
YWRfbXV0ZXhfdW5sb2NrKFNPQ0tCVUZfTVRYKF9zb19idWYpKQotI2RlZmluZQlTT0NLX0xPQ0so
X3NvKQkJU09DS0JVRl9MT0NLKCYoX3NvKS0+c29fcmN2KQotI2RlZmluZQlTT0NLX1VOTE9DSyhf
c28pCVNPQ0tCVUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQotI2VuZGlmCi0jZWxzZQotI2RlZmlu
ZSBTT0NLX0xPQ0soX3NvKQotI2RlZmluZSBTT0NLX1VOTE9DSyhfc28pCi0jZGVmaW5lIFNPQ0tC
VUZfTE9DSyhfc29fYnVmKQotI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKQotI2RlZmlu
ZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpCi0jZW5kaWYKLQotI2RlZmluZSBTQ1RQX1NU
QVRMT0dfSU5JVF9MT0NLKCkKLSNkZWZpbmUgU0NUUF9TVEFUTE9HX0xPQ0soKQotI2RlZmluZSBT
Q1RQX1NUQVRMT0dfVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9TVEFUTE9HX0RFU1RST1koKQotCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotLyogYWRkcmVzcyBsaXN0IGxvY2tz
ICovCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfSU5JVCgpIFwKLQlJbml0aWFsaXplQ3JpdGljYWxT
ZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQotI2RlZmluZSBTQ1RQX0lQSV9B
RERSX0RFU1RST1koKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhp
cGlfYWRkcl9tdHgpKQotCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfUkxPQ0soKSAJCQkJCQlcCi0J
ZG8geyAJCQkJCQkJCVwKLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlw
aV9hZGRyX210eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9SVU5M
T0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9t
dHgpKQotCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfV0xPQ0soKSAJCQkJCQlcCi0JZG8geyAJCQkJ
CQkJCVwKLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210
eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkgXAot
CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQotCi0K
LS8qIGl0ZXJhdG9yIGxvY2tzICovCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkg
XAotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLml0X210eCkKLQotI2Rl
ZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0soKSAJCQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlFbnRl
ckNyaXRpY2FsU2VjdGlvbigmc2N0cF9pdF9jdGwuaXRfbXR4KTsJCVwKLQl9IHdoaWxlICgwKQot
Ci0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfVU5MT0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9u
KCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLSNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLX0RFU1RS
T1koKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLQot
I2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9JTklUKCkgXAotCUluaXRpYWxpemVDcml0aWNh
bFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0KLSNkZWZpbmUgU0NU
UF9JUElfSVRFUkFUT1JfV1FfREVTVFJPWSgpIFwKLQlEZWxldGVDcml0aWNhbFNlY3Rpb24oJnNj
dHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0KLSNkZWZpbmUgU0NUUF9JUElfSVRFUkFU
T1JfV1FfTE9DSygpIFwKLQlkbyB7IFwKLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRf
Y3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQ
X0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJnNjdHBf
aXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0KLSNlbHNlIC8qIGVuZCBvZiBfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzICovCi0vKiBhZGRyZXNzIGxpc3QgbG9ja3MgKi8KLSNkZWZpbmUgU0NUUF9J
UElfQUREUl9JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lO
Rk8oaXBpX2FkZHJfbXR4KSwgTlVMTCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9ERVNUUk9ZKCkg
XAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJf
bXR4KSkKLQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgCQkJCQkJXAotCWRvIHsgCQkJ
CQkJCQlcCi0JCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2Fk
ZHJfbXR4KSk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JVTkxPQ0so
KSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRy
X210eCkpCi0KLSNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DSygpIAkJCQkJCVwKLQlkbyB7IAkJ
CQkJCQkJXAotCQkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9h
ZGRyX210eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NL
KCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRk
cl9tdHgpKQotCi0KLS8qIGl0ZXJhdG9yIGxvY2tzICovCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1Jf
TE9DS19JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2N0cF9pdF9jdGwuaXRf
bXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DSygpIAkJCQkJCVwKLQlkbyB7
CQkJCQkJCQlcCi0JCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmc2N0cF9pdF9jdGwuaXRfbXR4
KTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfVU5MT0NLKCkgXAot
CSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLSNkZWZp
bmUgU0NUUF9JVEVSQVRPUl9MT0NLX0RFU1RST1koKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9k
ZXN0cm95KCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRP
Ul9XUV9JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2N0cF9pdF9jdGwuaXBp
X2l0ZXJhdG9yX3dxX210eCwgTlVMTCkKLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9E
RVNUUk9ZKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2N0cF9pdF9jdGwuaXBp
X2l0ZXJhdG9yX3dxX210eCkKLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCkg
XAotCWRvIHsgXAotCQkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJnNjdHBfaXRfY3RsLmlwaV9p
dGVyYXRvcl93cV9tdHgpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVS
QVRPUl9XUV9VTkxPQ0soKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRf
Y3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0jZW5kaWYKLQotI2RlZmluZSBTQ1RQX0lOQ1JfRVBf
Q09VTlQoKSBcCi0JZG8geyBcCi0JCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlf
Y291bnRfZXApLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0VQX0NP
VU5UKCkgXAotCWRvIHsgXAotCSAgICAgICBhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfY291bnRfZXApLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9J
TkNSX0FTT0NfQ09VTlQoKSBcCi0JZG8geyBcCi0JICAgICAgIGF0b21pY19hZGRfaW50KCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfY291bnRfYXNvYyksIDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmlu
ZSBTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpIFwKLQlkbyB7IFwKLQkgICAgICAgYXRvbWljX3N1YnRy
YWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpLCAxKTsgXAotCX0gd2hpbGUg
KDApCi0KLSNkZWZpbmUgU0NUUF9JTkNSX0xBRERSX0NPVU5UKCkgXAotCWRvIHsgXAotCSAgICAg
ICBhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2xhZGRyKSwgMSk7IFwK
LQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfREVDUl9MQUREUl9DT1VOVCgpIFwKLQlkbyB7
IFwKLQkgICAgICAgYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2xhZGRyKSwgMSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9SQUREUl9D
T1VOVCgpIFwKLQlkbyB7IFwKLSAJICAgICAgIGF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5G
TyhpcGlfY291bnRfcmFkZHIpLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9E
RUNSX1JBRERSX0NPVU5UKCkgXAotCWRvIHsgXAotIAkgICAgICAgYXRvbWljX3N1YnRyYWN0X2lu
dCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JhZGRyKSwgMSk7IFwKLQl9IHdoaWxlICgwKQot
Ci0jZGVmaW5lIFNDVFBfSU5DUl9DSEtfQ09VTlQoKSBcCi0JZG8geyBcCi0gIAkgICAgICAgYXRv
bWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVuayksIDEpOyBcCi0JfSB3
aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCkgXAotCWRvIHsgXAotICAJ
ICAgICAgIGF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVu
ayksIDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lOQ1JfUkVBRFFfQ09VTlQo
KSBcCi0JZG8geyBcCi0JICAgICAgIGF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlf
Y291bnRfcmVhZHEpLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1JF
QURRX0NPVU5UKCkgXAotCWRvIHsgXAotCSAgICAgICBhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZp
bmUgU0NUUF9JTkNSX1NUUk1PUV9DT1VOVCgpIFwKLQlkbyB7IFwKLQkgICAgICAgYXRvbWljX2Fk
ZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpLCAxKTsgXAotCX0gd2hpbGUg
KDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpIFwKLQlkbyB7IFwKLQkgICAg
ICAgYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3N0cm1vcSks
IDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfc2hhMS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2NTE3ZjkxY2M3NTczMjc4NTI2NzIzZDIyMjRhYmMwMGU2
YzVhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzI3ICswLDAgQEAK
LS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMywgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMTMsICAgICAgYnkgTGFsbHkgU2luZ2guIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
LSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
Ci0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zaGExLmg+Ci0KLSNpZiBkZWZpbmVkKFNDVFBf
VVNFX05TU19TSEExKQotLyogQSBTSEEtMSBEaWdlc3QgaXMgMTYwIGJpdHMsIG9yIDIwIGJ5dGVz
ICovCi0jZGVmaW5lIFNIQV9ESUdFU1RfTEVOR1RIICgyMCkKLQotdm9pZAotc2N0cF9zaGExX2lu
aXQoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCi17Ci0JY3R4LT5wazExX2N0eCA9IFBL
MTFfQ3JlYXRlRGlnZXN0Q29udGV4dChTRUNfT0lEX1NIQTEpOwotCVBLMTFfRGlnZXN0QmVnaW4o
Y3R4LT5wazExX2N0eCk7Ci19Ci0KLXZvaWQKLXNjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBf
c2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50
IHNpeikKLXsKLQlQSzExX0RpZ2VzdE9wKGN0eC0+cGsxMV9jdHgsIHB0ciwgc2l6KTsKLX0KLQot
dm9pZAotc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBf
c2hhMV9jb250ZXh0ICpjdHgpCi17Ci0JdW5zaWduZWQgaW50IG91dHB1dF9sZW4gPSAwOwotCi0J
UEsxMV9EaWdlc3RGaW5hbChjdHgtPnBrMTFfY3R4LCBkaWdlc3QsICZvdXRwdXRfbGVuLCBTSEFf
RElHRVNUX0xFTkdUSCk7Ci0JUEsxMV9EZXN0cm95Q29udGV4dChjdHgtPnBrMTFfY3R4LCBQUl9U
UlVFKTsKLX0KLQotI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NMX1NIQTEpCi0KLXZvaWQK
LXNjdHBfc2hhMV9pbml0KHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4KQotewotCVNIQTFf
SW5pdCgmY3R4LT5zaGFfY3R4KTsKLX0KLQotdm9pZAotc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qg
c2N0cF9zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25l
ZCBpbnQgc2l6KQotewotCVNIQTFfVXBkYXRlKCZjdHgtPnNoYV9jdHgsIHB0ciwgKHVuc2lnbmVk
IGxvbmcpc2l6KTsKLX0KLQotdm9pZAotc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRp
Z2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCi17Ci0JU0hBMV9GaW5hbChkaWdl
c3QsICZjdHgtPnNoYV9jdHgpOwotfQotCi0jZWxzZQotCi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHdpbnNvY2syLmg+
Ci0jZWxpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNl
bmRpZgotCi0jZGVmaW5lIEYxKEIsQyxEKSAoKChCICYgQykgfCAoKH5CKSAmIEQpKSkJLyogMCAg
PD0gdCA8PSAxOSAqLwotI2RlZmluZSBGMihCLEMsRCkgKEIgXiBDIF4gRCkJLyogMjAgPD0gdCA8
PSAzOSAqLwotI2RlZmluZSBGMyhCLEMsRCkgKChCICYgQykgfCAoQiAmIEQpIHwgKEMgJiBEKSkJ
LyogNDAgPD0gdCA8PSA1OSAqLwotI2RlZmluZSBGNChCLEMsRCkgKEIgXiBDIF4gRCkJLyogNjAw
IDw9IHQgPD0gNzkgKi8KLQotLyogY2lyY3VsYXIgc2hpZnQgKi8KLSNkZWZpbmUgQ1NISUZUKEEs
QikgKChCIDw8IEEpIHwgKEIgPj4gKDMyLUEpKSkKLQotI2RlZmluZSBLMSAweDVhODI3OTk5CQkv
KiAwICA8PSB0IDw9IDE5ICovCi0jZGVmaW5lIEsyIDB4NmVkOWViYTEJCS8qIDIwIDw9IHQgPD0g
MzkgKi8KLSNkZWZpbmUgSzMgMHg4ZjFiYmNkYwkJLyogNDAgPD0gdCA8PSA1OSAqLwotI2RlZmlu
ZSBLNCAweGNhNjJjMWQ2CQkvKiA2MCA8PSB0IDw9IDc5ICovCi0KLSNkZWZpbmUgSDBJTklUIDB4
Njc0NTIzMDEKLSNkZWZpbmUgSDFJTklUIDB4ZWZjZGFiODkKLSNkZWZpbmUgSDJJTklUIDB4OThi
YWRjZmUKLSNkZWZpbmUgSDNJTklUIDB4MTAzMjU0NzYKLSNkZWZpbmUgSDRJTklUIDB4YzNkMmUx
ZjAKLQotdm9pZAotc2N0cF9zaGExX2luaXQoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgp
Ci17Ci0JLyogSW5pdCB0aGUgU0hBLTEgY29udGV4dCBzdHJ1Y3R1cmUgKi8KLQljdHgtPkEgPSAw
OwotCWN0eC0+QiA9IDA7Ci0JY3R4LT5DID0gMDsKLQljdHgtPkQgPSAwOwotCWN0eC0+RSA9IDA7
Ci0JY3R4LT5IMCA9IEgwSU5JVDsKLQljdHgtPkgxID0gSDFJTklUOwotCWN0eC0+SDIgPSBIMklO
SVQ7Ci0JY3R4LT5IMyA9IEgzSU5JVDsKLQljdHgtPkg0ID0gSDRJTklUOwotCWN0eC0+VEVNUCA9
IDA7Ci0JbWVtc2V0KGN0eC0+d29yZHMsIDAsIHNpemVvZihjdHgtPndvcmRzKSk7Ci0JY3R4LT5o
b3dfbWFueV9pbl9ibG9jayA9IDA7Ci0JY3R4LT5ydW5uaW5nX3RvdGFsID0gMDsKLX0KLQotc3Rh
dGljIHZvaWQKLXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soc3RydWN0IHNjdHBfc2hhMV9jb250
ZXh0ICpjdHgsIHVuc2lnbmVkIGludCAqYmxvY2spCi17Ci0JaW50IGk7Ci0KLQkvKiBpbml0IHRo
ZSBXMC1XMTUgdG8gdGhlIGJsb2NrIG9mIHdvcmRzIGJlaW5nIGhhc2hlZC4gKi8KLQkvKiBzdGVw
IGEpICovCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJY3R4LT53b3Jkc1tpXSA9IG50
b2hsKGJsb2NrW2ldKTsKLQl9Ci0JLyogbm93IGluaXQgdGhlIHJlc3QgYmFzZWQgb24gdGhlIFNI
QS0xIGZvcm11bGEsIHN0ZXAgYikgKi8KLQlmb3IgKGkgPSAxNjsgaSA8IDgwOyBpKyspIHsKLQkJ
Y3R4LT53b3Jkc1tpXSA9IENTSElGVCgxLCAoKGN0eC0+d29yZHNbKGkgLSAzKV0pIF4KLQkJICAg
IChjdHgtPndvcmRzWyhpIC0gOCldKSBeCi0JCSAgICAoY3R4LT53b3Jkc1soaSAtIDE0KV0pIF4K
LQkJICAgIChjdHgtPndvcmRzWyhpIC0gMTYpXSkpKTsKLQl9Ci0JLyogc3RlcCBjKSAqLwotCWN0
eC0+QSA9IGN0eC0+SDA7Ci0JY3R4LT5CID0gY3R4LT5IMTsKLQljdHgtPkMgPSBjdHgtPkgyOwot
CWN0eC0+RCA9IGN0eC0+SDM7Ci0JY3R4LT5FID0gY3R4LT5INDsKLQotCS8qIHN0ZXAgZCkgKi8K
LQlmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykgewotCQlpZiAoaSA8IDIwKSB7Ci0JCQljdHgtPlRF
TVAgPSAoKENTSElGVCg1LCBjdHgtPkEpKSArCi0JCQkgICAgKEYxKGN0eC0+QiwgY3R4LT5DLCBj
dHgtPkQpKSArCi0JCQkgICAgKGN0eC0+RSkgKwotCQkJICAgIGN0eC0+d29yZHNbaV0gKwotCQkJ
ICAgIEsxKTsKLQkJfSBlbHNlIGlmIChpIDwgNDApIHsKLQkJCWN0eC0+VEVNUCA9ICgoQ1NISUZU
KDUsIGN0eC0+QSkpICsKLQkJCSAgICAoRjIoY3R4LT5CLCBjdHgtPkMsIGN0eC0+RCkpICsKLQkJ
CSAgICAoY3R4LT5FKSArCi0JCQkgICAgKGN0eC0+d29yZHNbaV0pICsKLQkJCSAgICBLMik7Ci0J
CX0gZWxzZSBpZiAoaSA8IDYwKSB7Ci0JCQljdHgtPlRFTVAgPSAoKENTSElGVCg1LCBjdHgtPkEp
KSArCi0JCQkgICAgKEYzKGN0eC0+QiwgY3R4LT5DLCBjdHgtPkQpKSArCi0JCQkgICAgKGN0eC0+
RSkgKwotCQkJICAgIChjdHgtPndvcmRzW2ldKSArCi0JCQkgICAgSzMpOwotCQl9IGVsc2Ugewot
CQkJY3R4LT5URU1QID0gKChDU0hJRlQoNSwgY3R4LT5BKSkgKwotCQkJICAgIChGNChjdHgtPkIs
IGN0eC0+QywgY3R4LT5EKSkgKwotCQkJICAgIChjdHgtPkUpICsKLQkJCSAgICAoY3R4LT53b3Jk
c1tpXSkgKwotCQkJICAgIEs0KTsKLQkJfQotCQljdHgtPkUgPSBjdHgtPkQ7Ci0JCWN0eC0+RCA9
IGN0eC0+QzsKLQkJY3R4LT5DID0gQ1NISUZUKDMwLCBjdHgtPkIpOwotCQljdHgtPkIgPSBjdHgt
PkE7Ci0JCWN0eC0+QSA9IGN0eC0+VEVNUDsKLQl9Ci0JLyogc3RlcCBlKSAqLwotCWN0eC0+SDAg
PSAoY3R4LT5IMCkgKyAoY3R4LT5BKTsKLQljdHgtPkgxID0gKGN0eC0+SDEpICsgKGN0eC0+Qik7
Ci0JY3R4LT5IMiA9IChjdHgtPkgyKSArIChjdHgtPkMpOwotCWN0eC0+SDMgPSAoY3R4LT5IMykg
KyAoY3R4LT5EKTsKLQljdHgtPkg0ID0gKGN0eC0+SDQpICsgKGN0eC0+RSk7Ci19Ci0KLXZvaWQK
LXNjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVu
c2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50IHNpeikKLXsKLQl1bnNpZ25lZCBpbnQgbnVt
YmVyX2xlZnQsIGxlZnRfdG9fZmlsbDsKLQotCW51bWJlcl9sZWZ0ID0gc2l6OwotCXdoaWxlIChu
dW1iZXJfbGVmdCA+IDApIHsKLQkJbGVmdF90b19maWxsID0gc2l6ZW9mKGN0eC0+c2hhX2Jsb2Nr
KSAtIGN0eC0+aG93X21hbnlfaW5fYmxvY2s7Ci0JCWlmIChsZWZ0X3RvX2ZpbGwgPiBudW1iZXJf
bGVmdCkgewotCQkJLyogY2FuIG9ubHkgcGFydGlhbGx5IGZpbGwgdXAgdGhpcyBvbmUgKi8KLQkJ
CW1lbWNweSgmY3R4LT5zaGFfYmxvY2tbY3R4LT5ob3dfbWFueV9pbl9ibG9ja10sCi0JCQkgICAg
cHRyLCBudW1iZXJfbGVmdCk7Ci0JCQljdHgtPmhvd19tYW55X2luX2Jsb2NrICs9IG51bWJlcl9s
ZWZ0OwotCQkJY3R4LT5ydW5uaW5nX3RvdGFsICs9IG51bWJlcl9sZWZ0OwotCQkJYnJlYWs7Ci0J
CX0gZWxzZSB7Ci0JCQkvKiBibG9jayBpcyBub3cgZnVsbCwgcHJvY2VzcyBpdCAqLwotCQkJbWVt
Y3B5KCZjdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2NrXSwKLQkJCSAgICBwdHIs
IGxlZnRfdG9fZmlsbCk7Ci0JCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2NrKGN0eCwKLQkJCSAg
ICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOwotCQkJbnVtYmVyX2xlZnQgLT0gbGVm
dF90b19maWxsOwotCQkJY3R4LT5ydW5uaW5nX3RvdGFsICs9IGxlZnRfdG9fZmlsbDsKLQkJCWN0
eC0+aG93X21hbnlfaW5fYmxvY2sgPSAwOwotCQkJcHRyID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIg
KikocHRyICsgbGVmdF90b19maWxsKTsKLQkJfQotCX0KLX0KLQotdm9pZAotc2N0cF9zaGExX2Zp
bmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgp
Ci17Ci0JLyoKLQkgKiBpZiBhbnkgbGVmdCBpbiBibG9jayBmaWxsIHdpdGggcGFkZGluZyBhbmQg
cHJvY2Vzcy4gVGhlbiB0cmFuc2ZlcgotCSAqIHRoZSBkaWdlc3QgdG8gdGhlIHBvaW50ZXIuIEF0
IHRoZSBsYXN0IGJsb2NrIHNvbWUgc3BlY2lhbCBydWxlcwotCSAqIG5lZWQgdG8gYXBwbHkuIFdl
IG11c3QgYWRkIGEgMSBiaXQgZm9sbG93aW5nIHRoZSBtZXNzYWdlLCB0aGVuIHdlCi0JICogcGFk
IHdpdGggMCdzLiBUaGUgdG90YWwgc2l6ZSBpcyBlbmNvZGVkIGFzIGEgNjQgYml0IG51bWJlciBh
dCB0aGUKLQkgKiBlbmQuIE5vdyBpZiB0aGUgbGFzdCBidWZmZXIgaGFzIG1vcmUgdGhhbiA1NSBv
Y3RldHMgaW4gaXQgd2UKLQkgKiBjYW5ub3QgZml0IHRoZSA2NCBiaXQgbnVtYmVyICsgMTAwMDAw
MDAgcGFkIG9uIHRoZSBlbmQgYW5kIG11c3QKLQkgKiBhZGQgdGhlIDEwMDAwMDAwIHBhZCwgcGFk
IHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlIHdpdGggMCdzIGFuZAotCSAqIHRoZW4gY3JlYXRlIGFu
IGFsbCAwIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSA2NCBiaXQgc2l6ZSBhdCB0aGUgZW5kCi0JICog
YW5kIHJ1biB0aGlzIGJsb2NrIHRocm91Z2ggYnkgaXRzZWxmLiAgQWxzbyB0aGUgNjQgYml0IGlu
dCBtdXN0Ci0JICogYmUgaW4gbmV0d29yayBieXRlIG9yZGVyLgotCSAqLwotCWludCBsZWZ0X3Rv
X2ZpbGw7Ci0JdW5zaWduZWQgaW50IGksICpwdHI7Ci0KLQlpZiAoY3R4LT5ob3dfbWFueV9pbl9i
bG9jayA+IDU1KSB7Ci0JCS8qCi0JCSAqIHNwZWNpYWwgY2FzZSwgd2UgbmVlZCB0byBwcm9jZXNz
IHR3byBibG9ja3MgaGVyZS4gT25lIGZvcgotCQkgKiB0aGUgY3VycmVudCBzdHVmZiBwbHVzIHBv
c3NpYmx5IHRoZSBwYWQuIFRoZSBvdGhlciBmb3IKLQkJICogdGhlIHNpemUuCi0JCSAqLwotCQls
ZWZ0X3RvX2ZpbGwgPSBzaXplb2YoY3R4LT5zaGFfYmxvY2spIC0gY3R4LT5ob3dfbWFueV9pbl9i
bG9jazsKLQkJaWYgKGxlZnRfdG9fZmlsbCA9PSAwKSB7Ci0JCQkvKiBTaG91bGQgbm90IHJlYWxs
eSBoYXBwZW4gYnV0IEkgYW0gcGFyYW5vaWQgKi8KLQkJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxv
Y2soY3R4LAotCQkJICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7Ci0JCQkvKiBp
bml0IGxhc3QgYmxvY2ssIGEgYml0IGRpZmZlcmVudCB0aGFuIHRoZSByZXN0ICovCi0JCQljdHgt
PnNoYV9ibG9ja1swXSA9ICdceDgwJzsKLQkJCWZvciAoaSA9IDE7IGkgPCBzaXplb2YoY3R4LT5z
aGFfYmxvY2spOyBpKyspIHsKLQkJCQljdHgtPnNoYV9ibG9ja1tpXSA9IDB4MDsKLQkJCX0KLQkJ
fSBlbHNlIGlmIChsZWZ0X3RvX2ZpbGwgPT0gMSkgewotCQkJY3R4LT5zaGFfYmxvY2tbY3R4LT5o
b3dfbWFueV9pbl9ibG9ja10gPSAnXHg4MCc7Ci0JCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2Nr
KGN0eCwKLQkJCSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOwotCQkJLyogaW5p
dCBsYXN0IGJsb2NrICovCi0JCQltZW1zZXQoY3R4LT5zaGFfYmxvY2ssIDAsIHNpemVvZihjdHgt
PnNoYV9ibG9jaykpOwotCQl9IGVsc2UgewotCQkJY3R4LT5zaGFfYmxvY2tbY3R4LT5ob3dfbWFu
eV9pbl9ibG9ja10gPSAnXHg4MCc7Ci0JCQlmb3IgKGkgPSAoY3R4LT5ob3dfbWFueV9pbl9ibG9j
ayArIDEpOwotCQkJICAgIGkgPCBzaXplb2YoY3R4LT5zaGFfYmxvY2spOwotCQkJICAgIGkrKykg
ewotCQkJCWN0eC0+c2hhX2Jsb2NrW2ldID0gMHgwOwotCQkJfQotCQkJc2N0cF9zaGExX3Byb2Nl
c3NfYV9ibG9jayhjdHgsCi0JCQkgICAgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsK
LQkJCS8qIGluaXQgbGFzdCBibG9jayAqLwotCQkJbWVtc2V0KGN0eC0+c2hhX2Jsb2NrLCAwLCBz
aXplb2YoY3R4LT5zaGFfYmxvY2spKTsKLQkJfQotCQkvKiBUaGlzIGlzIGluIGJpdHMgc28gbXVs
dGlwbHkgYnkgOCAqLwotCQljdHgtPnJ1bm5pbmdfdG90YWwgKj0gODsKLQkJcHRyID0gKHVuc2ln
bmVkIGludCAqKSZjdHgtPnNoYV9ibG9ja1s2MF07Ci0JCSpwdHIgPSBodG9ubChjdHgtPnJ1bm5p
bmdfdG90YWwpOwotCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2NrKGN0eCwgKHVuc2lnbmVkIGlu
dCAqKWN0eC0+c2hhX2Jsb2NrKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBlYXN5IGNhc2UsIHdl
IGp1c3QgcGFkIHRoaXMgbWVzc2FnZSB0byBzaXplIC0gZW5kIHdpdGggMAotCQkgKiBhZGQgdGhl
IG1hZ2ljIDB4ODAgdG8gdGhlIG5leHQgd29yZCBhbmQgdGhlbiBwdXQgdGhlCi0JCSAqIG5ldHdv
cmsgYnl0ZSBvcmRlciBzaXplIGluIHRoZSBsYXN0IHNwb3QgYW5kIHByb2Nlc3MgdGhlCi0JCSAq
IGJsb2NrLgotCQkgKi8KLQkJY3R4LT5zaGFfYmxvY2tbY3R4LT5ob3dfbWFueV9pbl9ibG9ja10g
PSAnXHg4MCc7Ci0JCWZvciAoaSA9IChjdHgtPmhvd19tYW55X2luX2Jsb2NrICsgMSk7Ci0JCSAg
ICBpIDwgc2l6ZW9mKGN0eC0+c2hhX2Jsb2NrKTsKLQkJICAgIGkrKykgewotCQkJY3R4LT5zaGFf
YmxvY2tbaV0gPSAweDA7Ci0JCX0KLQkJLyogZ2V0IGxhc3QgaW50IHNwb3QgKi8KLQkJY3R4LT5y
dW5uaW5nX3RvdGFsICo9IDg7Ci0JCXB0ciA9ICh1bnNpZ25lZCBpbnQgKikmY3R4LT5zaGFfYmxv
Y2tbNjBdOwotCQkqcHRyID0gaHRvbmwoY3R4LT5ydW5uaW5nX3RvdGFsKTsKLQkJc2N0cF9zaGEx
X3Byb2Nlc3NfYV9ibG9jayhjdHgsICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7Ci0J
fQotCS8qIHRyYW5zZmVyIHRoZSBkaWdlc3QgYmFjayB0byB0aGUgdXNlciAqLwotCWRpZ2VzdFsz
XSA9IChjdHgtPkgwICYgMHhmZik7Ci0JZGlnZXN0WzJdID0gKChjdHgtPkgwID4+IDgpICYgMHhm
Zik7Ci0JZGlnZXN0WzFdID0gKChjdHgtPkgwID4+IDE2KSAmIDB4ZmYpOwotCWRpZ2VzdFswXSA9
ICgoY3R4LT5IMCA+PiAyNCkgJiAweGZmKTsKLQotCWRpZ2VzdFs3XSA9IChjdHgtPkgxICYgMHhm
Zik7Ci0JZGlnZXN0WzZdID0gKChjdHgtPkgxID4+IDgpICYgMHhmZik7Ci0JZGlnZXN0WzVdID0g
KChjdHgtPkgxID4+IDE2KSAmIDB4ZmYpOwotCWRpZ2VzdFs0XSA9ICgoY3R4LT5IMSA+PiAyNCkg
JiAweGZmKTsKLQotCWRpZ2VzdFsxMV0gPSAoY3R4LT5IMiAmIDB4ZmYpOwotCWRpZ2VzdFsxMF0g
PSAoKGN0eC0+SDIgPj4gOCkgJiAweGZmKTsKLQlkaWdlc3RbOV0gPSAoKGN0eC0+SDIgPj4gMTYp
ICYgMHhmZik7Ci0JZGlnZXN0WzhdID0gKChjdHgtPkgyID4+IDI0KSAmIDB4ZmYpOwotCi0JZGln
ZXN0WzE1XSA9IChjdHgtPkgzICYgMHhmZik7Ci0JZGlnZXN0WzE0XSA9ICgoY3R4LT5IMyA+PiA4
KSAmIDB4ZmYpOwotCWRpZ2VzdFsxM10gPSAoKGN0eC0+SDMgPj4gMTYpICYgMHhmZik7Ci0JZGln
ZXN0WzEyXSA9ICgoY3R4LT5IMyA+PiAyNCkgJiAweGZmKTsKLQotCWRpZ2VzdFsxOV0gPSAoY3R4
LT5INCAmIDB4ZmYpOwotCWRpZ2VzdFsxOF0gPSAoKGN0eC0+SDQgPj4gOCkgJiAweGZmKTsKLQlk
aWdlc3RbMTddID0gKChjdHgtPkg0ID4+IDE2KSAmIDB4ZmYpOwotCWRpZ2VzdFsxNl0gPSAoKGN0
eC0+SDQgPj4gMjQpICYgMHhmZik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3NoYTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTNjMmVkYzQ5ODlkMmYyNmM4M2Q5ZDJiMmY4YWRk
N2ZlOTMwMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAg
QEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
Ci0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZy
ZWVCU0QkIik7Ci0jZW5kaWYKLQotCi0jaWZuZGVmIF9fTkVUSU5FVF9TQ1RQX1NIQTFfSF9fCi0j
ZGVmaW5lIF9fTkVUSU5FVF9TQ1RQX1NIQTFfSF9fCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
LSNpZiBkZWZpbmVkKFNDVFBfVVNFX05TU19TSEExKQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfRGFyd2luKQotLyogVGhlIE5TUyBzb3VyY2VzIHJlcXVpcmUgX19BUFBMRV9fIHRvIGJlIGRl
ZmluZWQuCi0gKiBYWFg6IFJlbW92ZSB0aGlzIHVnbHkgaGFjayBvbmNlIHRoZSBwbGF0Zm9ybSBk
ZWZpbmVzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgotICovCi0jZGVmaW5lIF9fQVBQTEVfXwotI2Vu
ZGlmCi0jaW5jbHVkZSA8cGsxMXB1Yi5oPgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFy
d2luKQotI3VuZGVmIF9fQVBQTEVfXwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFNDVFBfVVNFX09Q
RU5TU0xfU0hBMSkKLSNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotI2VuZGlmCi0KLXN0cnVjdCBz
Y3RwX3NoYTFfY29udGV4dCB7Ci0jaWYgZGVmaW5lZChTQ1RQX1VTRV9OU1NfU0hBMSkKLQlzdHJ1
Y3QgUEsxMUNvbnRleHQgKnBrMTFfY3R4OwotI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NM
X1NIQTEpCi0JU0hBX0NUWCBzaGFfY3R4OwotI2Vsc2UKLQl1bnNpZ25lZCBpbnQgQTsKLQl1bnNp
Z25lZCBpbnQgQjsKLQl1bnNpZ25lZCBpbnQgQzsKLQl1bnNpZ25lZCBpbnQgRDsKLQl1bnNpZ25l
ZCBpbnQgRTsKLQl1bnNpZ25lZCBpbnQgSDA7Ci0JdW5zaWduZWQgaW50IEgxOwotCXVuc2lnbmVk
IGludCBIMjsKLQl1bnNpZ25lZCBpbnQgSDM7Ci0JdW5zaWduZWQgaW50IEg0OwotCXVuc2lnbmVk
IGludCB3b3Jkc1s4MF07Ci0JdW5zaWduZWQgaW50IFRFTVA7Ci0JLyogYmxvY2sgSSBhbSBjb2xs
ZWN0aW5nIHRvIHByb2Nlc3MgKi8KLQljaGFyIHNoYV9ibG9ja1s2NF07Ci0JLyogY29sbGVjdGVk
IHNvIGZhciAqLwotCWludCBob3dfbWFueV9pbl9ibG9jazsKLQl1bnNpZ25lZCBpbnQgcnVubmlu
Z190b3RhbDsKLSNlbmRpZgotfTsKLQotI2lmIChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5l
ZChLRVJORUwpKQotI2lmbmRlZiBfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwKLSNlbmRpZgotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQot
dm9pZCBzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKik7Ci12b2lkIHNj
dHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICosIGNvbnN0IHVuc2lnbmVk
IGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNo
YXIgKiwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICopOwotCi0jZW5kaWYKLSNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCBiNjA5Y2E1NzBmMjJmNTJkMTg0NjJjNDY3MzE2YTE2NmI5NzgzMTM4Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9z
c19mdW5jdGlvbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTIgKzAsMCBAQAotLyotCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIsIGJ5IFJvYmlu
IFNlZ2dlbG1hbm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIp
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0g
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgi
JEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyAzMjEyODkgMjAx
Ny0wNy0yMCAxMTowOTozM1ogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3BjYi5oPgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfb3NfdXNlcnNwYWNlLmg+Ci0jZW5kaWYKLQotLyoKLSAqIERlZmF1bHQgc2ltcGxl
IHJvdW5kLXJvYmluIGFsZ29yaXRobS4KLSAqIEp1c3QgaW50ZXJhdGVzIHRoZSBzdHJlYW1zIGlu
IHRoZSBvcmRlciB0aGV5IGFwcGVhci4KLSAqLwotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19kZWZh
dWx0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKLSAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAotICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQpOwotCi1zdGF0
aWMgdm9pZAotc2N0cF9zc19kZWZhdWx0X3JlbW92ZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKiwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cXVldWVfcGVuZGluZyAqLCBpbnQpOwotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19kZWZhdWx0X2lu
aXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
LSAgICAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQotewotCXVpbnQxNl90IGk7Ci0K
LQlhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gTlVMTDsKLQlhc29jLT5zc19kYXRh
Lmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+c3NfZGF0YS5vdXQu
d2hlZWwpOwotCS8qCi0JICogSWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgc3RyZWFtIHF1ZXVlcyBh
bHJlYWR5LAotCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gaGFz
Ci0JICogYmVlbiBjaGFuZ2VkLiBXZSBuZWVkIHRvIGFkZCBhbGwgc3RyZWFtIHF1ZXVlcwotCSAq
IHRvIHRoZSB3aGVlbC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1v
dXRjbnQ7IGkrKykgewotCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2FkZF90b19z
dHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2MsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgaG9sZHNfbG9jayk7Ci0JfQot
CXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZGVmYXVsdF9jbGVhcihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAg
ICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMgU0NUUF9VTlVTRUQsIGludCBob2xkc19sb2Nr
KQotewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2Ip
OwotCX0KLQl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsK
LQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCk7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWws
IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCksIHNzX3BhcmFtcy5yci5uZXh0
X3Nwb2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxM
OwotCQlzdHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7Ci0JfQot
CWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQlpZiAoaG9sZHNfbG9jayA9
PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0oc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0ICp3aXRoX3N0cnEpCi17Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7Ci0JCWlmIChzdGNi
LT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0gd2l0aF9zdHJxKSB7Ci0JCQlzdGNi
LT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOwotCQl9Ci0JCWlmIChzdGNi
LT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdpdGhfc3RycSkgewotCQkJc3RjYi0+
YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7Ci0JCX0KLQl9Ci0Jc3RycS0+c3Nf
cGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOwotCXN0cnEtPnNzX3BhcmFtcy5y
ci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX3NzX2RlZmF1bHRfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9vdXQgKnN0cnEsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRzX2xvY2spCi17Ci0JaWYgKGhvbGRz
X2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCS8qIEFkZCB0
byB3aGVlbCBpZiBub3QgYWxyZWFkeSBvbiBpdCBhbmQgc3RyZWFtIHF1ZXVlIG5vdCBlbXB0eSAq
LwotCWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgotCSAgICAoc3RycS0+c3Nf
cGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYKLQkgICAgKHN0cnEtPnNz
X3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5VTEwpKSB7Ci0JCVRBSUxRX0lOU0VS
VF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwKLQkJICAgICAgICAgICAgICAgICAgc3Ry
cSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7
Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRp
YyBpbnQKLXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NU
UF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCWlmIChUQUlMUV9F
TVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7Ci0JCXJldHVybiAoMSk7Ci0JfSBlbHNl
IHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2RlZmF1bHRf
cmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5n
ICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRzX2xvY2spCi17Ci0JaWYgKGhvbGRzX2xvY2sgPT0g
MCkgewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCS8qIFJlbW92ZSBmcm9tIHdo
ZWVsIGlmIHN0cmVhbSBxdWV1ZSBpcyBlbXB0eSBhbmQgYWN0dWFsbHkgaXMgb24gdGhlIHdoZWVs
ICovCi0JaWYgKFRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkgICAgKHN0cnEtPnNz
X3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9uZXh0ICE9IE5VTEwgfHwKLQkgICAgc3RycS0+c3Nf
cGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX3ByZXYgIT0gTlVMTCkpIHsKLQkJaWYgKGFzb2MtPnNz
X2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKLQkJCWFzb2MtPnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFkLAot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc19wYXJhbXMucnIubmV4dF9z
cG9rZSk7Ci0JCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCkgewot
CQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfTEFTVCgmYXNvYy0+c3Nf
ZGF0YS5vdXQud2hlZWwsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3Rwd2hlZWxfbGlzdGhlYWQpOwotCQkJfQotCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRf
c3RyZWFtID09IHN0cnEpIHsKLQkJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5V
TEw7Ci0JCQl9Ci0JCX0KLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwg
c3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCQlzdHJxLT5zc19wYXJhbXMucnIubmV4
dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0JCXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tl
LnRxZV9wcmV2ID0gTlVMTDsKLQl9Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICoKLXNjdHBfc3NfZGVmYXVsdF9zZWxlY3Qoc3RydWN0IHNjdHBfdGNi
ICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKLQotCWlmIChhc29jLT5zc19kYXRhLmxvY2tlZF9v
bl9zZW5kaW5nKSB7Ci0JCXJldHVybiAoYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyk7
Ci0JfQotCXN0cnF0ID0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW07Ci1kZWZhdWx0X2Fn
YWluOgotCS8qIEZpbmQgdGhlIG5leHQgc3RyZWFtIHRvIHVzZSAqLwotCWlmIChzdHJxdCA9PSBO
VUxMKSB7Ci0JCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOwot
CX0gZWxzZSB7Ci0JCXN0cnEgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMucnIubmV4dF9z
cG9rZSk7Ci0JCWlmIChzdHJxID09IE5VTEwpIHsKLQkJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNv
Yy0+c3NfZGF0YS5vdXQud2hlZWwpOwotCQl9Ci0JfQotCi0JLyogSWYgQ01UIGlzIG9mZiwgd2Ug
bXVzdCB2YWxpZGF0ZSB0aGF0Ci0JICogdGhlIHN0cmVhbSBpbiBxdWVzdGlvbiBoYXMgdGhlIGZp
cnN0Ci0JICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5ldHdvcmsgZGVzdGluYXRpb24KLQkg
KiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0IGlmIHdlCi0JICogdHVybiBvdXQg
dG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcKLQkgKiBUU04ncyB0aGVuIHdlIG11
c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90Ci0JICogbG9vayBmb3IgYW5vdGhlciBzdHJlYW0gd2l0
aCBkYXRhIHRvIHNlbmQKLQkgKiB0byB0aGF0IGRlc3RpbmF0aW9uKS4gSW4gQ01UJ3MgY2FzZSwg
YnkKLQkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxsIHNlbmQgb25lCi0JICogZGF0YSBw
YWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KLQkgKi8KLQlpZiAobmV0ICE9IE5VTEwg
JiYgc3RycSAhPSBOVUxMICYmCi0JICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2Zm
KSA9PSAwKSB7Ci0JCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpICYmCi0JCSAgICBU
QUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAmJgotCQkgICAgVEFJTFFf
RklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkgewotCQkJaWYgKHN0cnEgPT0gYXNv
Yy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0pIHsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfSBl
bHNlIHsKLQkJCQlzdHJxdCA9IHN0cnE7Ci0JCQkJZ290byBkZWZhdWx0X2FnYWluOwotCQkJfQot
CQl9Ci0JfQotCXJldHVybiAoc3RycSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2RlZmF1
bHRfc2NoZWR1bGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0IFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IG1vdmVkX2hvd19tdWNoIFNDVFBfVU5VU0VEKQotewotCXN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKLQotCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRf
c3RyZWFtID0gc3RycTsKLQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgewot
CQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7Ci0JCWlmICgoc3AgIT0gTlVMTCkg
JiYgKHNwLT5zb21lX3Rha2VuID09IDEpKSB7Ci0JCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2Vk
X29uX3NlbmRpbmcgPSBzdHJxOwotCQl9IGVsc2UgewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxv
Y2tlZF9vbl9zZW5kaW5nID0gTlVMTDsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0Y2ItPmFzb2Muc3Nf
ZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGlj
IHZvaWQKLXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ig
U0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQX1VOVVNFRCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyBTQ1RQX1VO
VVNFRCkKLXsKLQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgaGVyZSAqLwotCXJldHVybjsKLX0KLQot
c3RhdGljIGludAotc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VE
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJx
IFNDVFBfVU5VU0VELCB1aW50MTZfdCAqdmFsdWUgU0NUUF9VTlVTRUQpCi17Ci0JLyogTm90aGlu
ZyB0byBiZSBkb25lIGhlcmUgKi8KLQlyZXR1cm4gKC0xKTsKLX0KLQotc3RhdGljIGludAotc2N0
cF9zc19kZWZhdWx0X3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQs
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VELAotICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELCB1
aW50MTZfdCB2YWx1ZSBTQ1RQX1VOVVNFRCkKLXsKLQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgaGVy
ZSAqLwotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3NzX2RlZmF1bHRfaXNf
dXNlcl9tc2dzX2luY29tcGxldGUoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICpzdHJxOwotCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKLQotCWlmIChh
c29jLT5zdHJlYW1fcXVldWVfY250ICE9IDEpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0Jc3RycSA9
IGFzb2MtPnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmc7Ci0JaWYgKHN0cnEgPT0gTlVMTCkgewot
CQlyZXR1cm4gKDApOwotCX0KLQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7Ci0J
aWYgKHNwID09IE5VTEwpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JcmV0dXJuICghc3AtPm1zZ19p
c19jb21wbGV0ZSk7Ci19Ci0KLS8qCi0gKiBSZWFsIHJvdW5kLXJvYmluIGFsZ29yaXRobS4KLSAq
IEFsd2F5cyBpbnRlcmF0ZXMgdGhlIHN0cmVhbXMgaW4gYXNjZW5kaW5nIG9yZGVyLgotICovCi1z
dGF0aWMgdm9pZAotc2N0cF9zc19ycl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9vdXQgKnN0cnEsCi0gICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVu
ZGluZyAqc3AgU0NUUF9VTlVTRUQsIGludCBob2xkc19sb2NrKQotewotCXN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQgKnN0cnF0OwotCi0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9T
RU5EX0xPQ0soc3RjYik7Ci0JfQotCWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAm
JgotCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkg
JiYKLQkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5VTEwp
KSB7Ci0JCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7Ci0JCQlU
QUlMUV9JTlNFUlRfSEVBRCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFt
cy5yci5uZXh0X3Nwb2tlKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFz
b2MtPnNzX2RhdGEub3V0LndoZWVsKTsKLQkJCXdoaWxlIChzdHJxdCAhPSBOVUxMICYmIChzdHJx
dC0+c2lkIDwgc3RycS0+c2lkKSkgewotCQkJCXN0cnF0ID0gVEFJTFFfTkVYVChzdHJxdCwgc3Nf
cGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCQkJfQotCQkJaWYgKHN0cnF0ICE9IE5VTEwpIHsKLQkJ
CQlUQUlMUV9JTlNFUlRfQkVGT1JFKHN0cnF0LCBzdHJxLCBzc19wYXJhbXMucnIubmV4dF9zcG9r
ZSk7Ci0JCQl9IGVsc2UgewotCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRhLm91
dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCQkJfQotCQl9Ci0JfQot
CWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0J
fQotCXJldHVybjsKLX0KLQotLyoKLSAqIFJlYWwgcm91bmQtcm9iaW4gcGVyIHBhY2tldCBhbGdv
cml0aG0uCi0gKiBBbHdheXMgaW50ZXJhdGVzIHRoZSBzdHJlYW1zIGluIGFzY2VuZGluZyBvcmRl
ciBhbmQKLSAqIG9ubHkgZmlsbHMgbWVzc2FnZXMgb2YgdGhlIHNhbWUgc3RyZWFtIGluIGEgcGFj
a2V0LgotICovCi1zdGF0aWMgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqCi1zY3RwX3NzX3JycF9z
ZWxlY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQgU0NUUF9VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MpCi17Ci0JcmV0dXJuIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX3JycF9wYWNrZXRfZG9uZShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKLQotCXN0cnF0ID0gYXNvYy0+c3NfZGF0YS5s
YXN0X291dF9zdHJlYW07Ci1ycnBfYWdhaW46Ci0JLyogRmluZCB0aGUgbmV4dCBzdHJlYW0gdG8g
dXNlICovCi0JaWYgKHN0cnF0ID09IE5VTEwpIHsKLQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29j
LT5zc19kYXRhLm91dC53aGVlbCk7Ci0JfSBlbHNlIHsKLQkJc3RycSA9IFRBSUxRX05FWFQoc3Ry
cXQsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKLQkJaWYgKHN0cnEgPT0gTlVMTCkgewotCQkJ
c3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JCX0KLQl9Ci0K
LQkvKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQKLQkgKiB0aGUgc3RyZWFt
IGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKLQkgKiBpdGVtIHBvaW50ZWQgdG93YXJkcyBhcmUg
bmV0d29yayBkZXN0aW5hdGlvbgotCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBOb3RlIHRo
YXQgaWYgd2UKLQkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFzc2lnbmlu
ZwotCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKLQkgKiBsb29r
IGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAotCSAqIHRvIHRoYXQgZGVzdGlu
YXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQotCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ssIHdlIHdp
bGwgc2VuZCBvbmUKLQkgKiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0Lgot
CSAqLwotCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYKLQkgICAgU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDApIHsKLQkJaWYgKFRBSUxRX0ZJUlNUKCZzdHJx
LT5vdXRxdWV1ZSkgJiYKLQkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAh
PSBOVUxMICYmCi0JCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gbmV0
KSB7Ci0JCQlpZiAoc3RycSA9PSBhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSkgewotCQkJ
CXN0cnEgPSBOVUxMOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJxdCA9IHN0cnE7Ci0JCQkJZ290byBy
cnBfYWdhaW47Ci0JCQl9Ci0JCX0KLQl9Ci0JYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0g
PSBzdHJxOwotCXJldHVybjsKLX0KLQotCi0vKgotICogUHJpb3JpdHkgYWxnb3JpdGhtLgotICog
QWx3YXlzIHByZWZlcnMgc3RyZWFtcyBiYXNlZCBvbiB0aGVpciBwcmlvcml0eSBpZC4KLSAqLwot
c3RhdGljIHZvaWQKLXNjdHBfc3NfcHJpb19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAgICAgICAgIGludCBjbGVh
cl92YWx1ZXMsIGludCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJ
U0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29j
LT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JCWlmIChjbGVhcl92YWx1
ZXMpIHsKLQkJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0gMDsKLQkJfQotCQlUQUlM
UV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBUQUlMUV9GSVJTVCgmYXNvYy0+c3Nf
ZGF0YS5vdXQud2hlZWwpLCBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKLQkJc3RycS0+c3Nf
cGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0JCXN0cnEtPnNzX3BhcmFt
cy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwotCi0JfQotCWFzb2MtPnNzX2RhdGEu
bGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBf
VENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1z
Y3RwX3NzX3ByaW9faW5pdF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCi17
Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7Ci0JCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9j
a2VkX29uX3NlbmRpbmcgPT0gd2l0aF9zdHJxKSB7Ci0JCQlzdGNiLT5hc29jLnNzX2RhdGEubG9j
a2VkX29uX3NlbmRpbmcgPSBzdHJxOwotCQl9Ci0JCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFz
dF9vdXRfc3RyZWFtID09IHdpdGhfc3RycSkgewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rf
b3V0X3N0cmVhbSA9IHN0cnE7Ci0JCX0KLQl9Ci0Jc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9z
cG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0Jc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50
cWVfcHJldiA9IE5VTEw7Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7Ci0JCXN0cnEtPnNzX3Bh
cmFtcy5wcmlvLnByaW9yaXR5ID0gd2l0aF9zdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eTsK
LQl9IGVsc2UgewotCQlzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSA9IDA7Ci0JfQotCXJl
dHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfcHJpb19hZGQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3Bl
bmRpbmcgKnNwIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykK
LXsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxdDsKLQotCWlmIChob2xkc19sb2NrID09
IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQkvKiBBZGQgdG8gd2hlZWwg
aWYgbm90IGFscmVhZHkgb24gaXQgYW5kIHN0cmVhbSBxdWV1ZSBub3QgZW1wdHkgKi8KLQlpZiAo
IVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkgICAgKHN0cnEtPnNzX3BhcmFtcy5w
cmlvLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYKLQkgICAgKHN0cnEtPnNzX3BhcmFt
cy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPT0gTlVMTCkpIHsKLQkJaWYgKFRBSUxRX0VNUFRZ
KCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJCVRBSUxRX0lOU0VSVF9IRUFEKCZhc29j
LT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7Ci0J
CX0gZWxzZSB7Ci0JCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCk7Ci0JCQl3aGlsZSAoc3RycXQgIT0gTlVMTCAmJiBzdHJxdC0+c3NfcGFyYW1zLnByaW8ucHJp
b3JpdHkgPCBzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSkgewotCQkJCXN0cnF0ID0gVEFJ
TFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7Ci0JCQl9Ci0JCQlpZiAo
c3RycXQgIT0gTlVMTCkgewotCQkJCVRBSUxRX0lOU0VSVF9CRUZPUkUoc3RycXQsIHN0cnEsIHNz
X3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOwotCQkJfSBlbHNlIHsKLQkJCQlUQUlMUV9JTlNFUlRf
VEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRf
c3Bva2UpOwotCQkJfQotCQl9Ci0JfQotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9U
Q0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNj
dHBfc3NfcHJpb19yZW1vdmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VE
LAotICAgICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykKLXsKLQlpZiAoaG9sZHNfbG9j
ayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQl9Ci0JLyogUmVtb3ZlIGZy
b20gd2hlZWwgaWYgc3RyZWFtIHF1ZXVlIGlzIGVtcHR5IGFuZCBhY3R1YWxseSBpcyBvbiB0aGUg
d2hlZWwgKi8KLQlpZiAoVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgotCSAgICAoc3Ry
cS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCAhPSBOVUxMIHx8Ci0JICAgIHN0
cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgIT0gTlVMTCkpIHsKLQkJaWYg
KGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKLQkJCWFzb2MtPnNzX2Rh
dGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0
cmVhbSwgc2N0cHdoZWVsX2xpc3RoZWFkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKLQkJCWlmIChhc29jLT5zc19kYXRh
Lmxhc3Rfb3V0X3N0cmVhbSA9PSBOVUxMKSB7Ci0JCQkJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9z
dHJlYW0gPSBUQUlMUV9MQVNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwKLQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHB3aGVlbF9saXN0aGVhZCk7Ci0JCQl9Ci0J
CQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gc3RycSkgewotCQkJCWFzb2Mt
PnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQkJCX0KLQkJfQotCQlUQUlMUV9SRU1P
VkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzdHJxLCBzc19wYXJhbXMucHJpby5uZXh0X3Nw
b2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7
Ci0JCXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwotCX0K
LQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwot
CX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0Kgotc2N0cF9z
c19wcmlvX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgKnN0cnF0LCAqc3Ry
cW47Ci0KLQlzdHJxdCA9IGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtOwotcHJpb19hZ2Fp
bjoKLQkvKiBGaW5kIHRoZSBuZXh0IHN0cmVhbSB0byB1c2UgKi8KLQlpZiAoc3RycXQgPT0gTlVM
TCkgewotCQlzdHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKLQl9
IGVsc2UgewotCQlzdHJxbiA9IFRBSUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5wcmlvLm5leHRf
c3Bva2UpOwotCQlpZiAoc3RycW4gIT0gTlVMTCAmJgotCQkgICAgc3RycW4tPnNzX3BhcmFtcy5w
cmlvLnByaW9yaXR5ID09IHN0cnF0LT5zc19wYXJhbXMucHJpby5wcmlvcml0eSkgewotCQkJc3Ry
cSA9IHN0cnFuOwotCQl9IGVsc2UgewotCQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCk7Ci0JCX0KLQl9Ci0KLQkvKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZh
bGlkYXRlIHRoYXQKLQkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKLQkg
KiBpdGVtIHBvaW50ZWQgdG93YXJkcyBhcmUgbmV0d29yayBkZXN0aW5hdGlvbgotCSAqIHJlcXVl
c3RlZCBieSB0aGUgY2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UKLQkgKiB0dXJuIG91dCB0byBiZSBs
b2NrZWQgdG8gYSBzdHJlYW0gKGFzc2lnbmluZwotCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9w
LCBzaW5jZSB3ZSBjYW5ub3QKLQkgKiBsb29rIGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEg
dG8gc2VuZAotCSAqIHRvIHRoYXQgZGVzdGluYXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQotCSAq
IHNraXBwaW5nIHRoaXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBvbmUKLQkgKiBkYXRhIHBhY2tldCB0
b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0LgotCSAqLwotCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJx
ICE9IE5VTEwgJiYKLQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDAp
IHsKLQkJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkJICAgIFRBSUxRX0ZJ
UlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAhPSBOVUxMICYmCi0JCSAgICBUQUlMUV9GSVJTVCgm
c3RycS0+b3V0cXVldWUpLT5uZXQgIT0gbmV0KSB7Ci0JCQlpZiAoc3RycSA9PSBhc29jLT5zc19k
YXRhLmxhc3Rfb3V0X3N0cmVhbSkgewotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9IGVsc2Ugewot
CQkJCXN0cnF0ID0gc3RycTsKLQkJCQlnb3RvIHByaW9fYWdhaW47Ci0JCQl9Ci0JCX0KLQl9Ci0J
cmV0dXJuIChzdHJxKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9zc19wcmlvX2dldF92YWx1ZShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCAqdmFsdWUpCi17Ci0JaWYgKHN0cnEgPT0gTlVMTCkg
ewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JKnZhbHVlID0gc3RycS0+c3NfcGFyYW1zLnByaW8ucHJp
b3JpdHk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9zc19wcmlvX3NldF92
YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1
aW50MTZfdCB2YWx1ZSkKLXsKLQlpZiAoc3RycSA9PSBOVUxMKSB7Ci0JCXJldHVybiAoLTEpOwot
CX0KLQlzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSA9IHZhbHVlOwotCXNjdHBfc3NfcHJp
b19yZW1vdmUoc3RjYiwgYXNvYywgc3RycSwgTlVMTCwgMSk7Ci0Jc2N0cF9zc19wcmlvX2FkZChz
dGNiLCBhc29jLCBzdHJxLCBOVUxMLCAxKTsKLQlyZXR1cm4gKDEpOwotfQotCi0vKgotICogRmFp
ciBiYW5kd2lkdGggYWxnb3JpdGhtLgotICogTWFpbnRhaW5zIGFuIGVxdWFsIHRyb3VnaHB1dCBw
ZXIgc3RyZWFtLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9jbGVhcihzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAg
ICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19s
b2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQl3aGlsZSAoIVRB
SUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0J
CWlmIChjbGVhcl92YWx1ZXMpIHsKLQkJCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAtMTsK
LQkJfQotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBUQUlMUV9GSVJT
VCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSk7Ci0J
CXN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID0gTlVMTDsKLQkJc3RycS0+
c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwotCX0KLQlhc29jLT5zc19k
YXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlT
Q1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9p
ZAotc2N0cF9zc19mYl9pbml0X3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKndpdGhfc3RycSkK
LXsKLQlpZiAod2l0aF9zdHJxICE9IE5VTEwpIHsKLQkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5s
b2NrZWRfb25fc2VuZGluZyA9PSB3aXRoX3N0cnEpIHsKLQkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5s
b2NrZWRfb25fc2VuZGluZyA9IHN0cnE7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5s
YXN0X291dF9zdHJlYW0gPT0gd2l0aF9zdHJxKSB7Ci0JCQlzdGNiLT5hc29jLnNzX2RhdGEubGFz
dF9vdXRfc3RyZWFtID0gc3RycTsKLQkJfQotCX0KLQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9z
cG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0Jc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFl
X3ByZXYgPSBOVUxMOwotCWlmICh3aXRoX3N0cnEgIT0gTlVMTCkgewotCQlzdHJxLT5zc19wYXJh
bXMuZmIucm91bmRzID0gd2l0aF9zdHJxLT5zc19wYXJhbXMuZmIucm91bmRzOwotCX0gZWxzZSB7
Ci0JCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAtMTsKLQl9Ci0JcmV0dXJuOwotfQotCi1z
dGF0aWMgdm9pZAotc2N0cF9zc19mYl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VO
VVNFRCwKLSAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19sb2Nr
ID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQlpZiAoIVRBSUxRX0VN
UFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkgICAgKHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nw
b2tlLnRxZV9uZXh0ID09IE5VTEwpICYmCi0JICAgIChzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9z
cG9rZS50cWVfcHJldiA9PSBOVUxMKSkgewotCQlpZiAoc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5k
cyA8IDApCi0JCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gVEFJTFFfRklSU1QoJnN0cnEt
Pm91dHF1ZXVlKS0+bGVuZ3RoOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5v
dXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKLQl9Ci0JaWYgKGhvbGRz
X2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJu
OwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9yZW1vdmUoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICpzcCBTQ1RQX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQot
ewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwot
CX0KLQkvKiBSZW1vdmUgZnJvbSB3aGVlbCBpZiBzdHJlYW0gcXVldWUgaXMgZW1wdHkgYW5kIGFj
dHVhbGx5IGlzIG9uIHRoZSB3aGVlbCAqLwotCWlmIChUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVl
dWUpICYmCi0JICAgIChzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCAhPSBO
VUxMIHx8Ci0JICAgIHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9wcmV2ICE9IE5V
TEwpKSB7Ci0JCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBzdHJxKSB7Ci0J
CQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRBSUxRX1BSRVYoYXNvYy0+c3NfZGF0
YS5sYXN0X291dF9zdHJlYW0sIHNjdHB3aGVlbF9saXN0aGVhZCwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3NfcGFyYW1zLmZiLm5leHRfc3Bva2UpOwotCQkJaWYgKGFz
b2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IE5VTEwpIHsKLQkJCQlhc29jLT5zc19kYXRh
Lmxhc3Rfb3V0X3N0cmVhbSA9IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLAot
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFk
KTsKLQkJCX0KLQkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBzdHJxKSB7
Ci0JCQkJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBOVUxMOwotCQkJfQotCQl9Ci0J
CVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5m
Yi5uZXh0X3Nwb2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX25leHQg
PSBOVUxMOwotCQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7
Ci0JfQotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3Rj
Yik7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQqCi1z
Y3RwX3NzX2ZiX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jKQotewotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEgPSBOVUxMLCAqc3Ry
cXQ7Ci0KLQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCB8fAotCSAg
ICBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpID09IFRBSUxRX0xBU1QoJmFz
b2MtPnNzX2RhdGEub3V0LndoZWVsLCBzY3Rwd2hlZWxfbGlzdGhlYWQpKSB7Ci0JCXN0cnF0ID0g
VEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKLQl9IGVsc2UgewotCQlzdHJx
dCA9IFRBSUxRX05FWFQoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0sIHNzX3BhcmFtcy5m
Yi5uZXh0X3Nwb2tlKTsKLQl9Ci0JZG8gewotCQlpZiAoKHN0cnF0ICE9IE5VTEwpICYmCi0JCSAg
ICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA+IDApIHx8Ci0JCSAgICAgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwICYmCi0JCSAgICAgIChuZXQgPT0g
TlVMTCB8fCAoVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSkgJiYgVEFJTFFfRklSU1QoJnN0
cnF0LT5vdXRxdWV1ZSktPm5ldCA9PSBOVUxMKSB8fAotCQkgICAgICAgKG5ldCAhPSBOVUxMICYm
IFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpICYmIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0
cXVldWUpLT5uZXQgIT0gTlVMTCAmJgotCQkgICAgICAgIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0
cXVldWUpLT5uZXQgPT0gbmV0KSkpKSkgewotCQkJaWYgKChzdHJxdC0+c3NfcGFyYW1zLmZiLnJv
dW5kcyA+PSAwKSAmJiAoc3RycSA9PSBOVUxMIHx8Ci0JCQkJc3RycXQtPnNzX3BhcmFtcy5mYi5y
b3VuZHMgPCBzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzKSkgewotCQkJCXN0cnEgPSBzdHJxdDsK
LQkJCX0KLQkJfQotCQlpZiAoc3RycXQgIT0gTlVMTCkgewotCQkJc3RycXQgPSBUQUlMUV9ORVhU
KHN0cnF0LCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJxdCA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JCX0KLQl9IHdoaWxlIChz
dHJxdCAhPSBzdHJxKTsKLQlyZXR1cm4gKHN0cnEpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9z
c19mYl9zY2hlZHVsZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQgU0NUUF9VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwKLSAgICAgICAgICAgICAg
ICAgICAgIGludCBtb3ZlZF9ob3dfbXVjaCBTQ1RQX1VOVVNFRCkKLXsKLQlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycXQ7
Ci0JaW50IHN1YnRyYWN0OwotCi0JaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDAp
IHsKLQkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOwotCQlpZiAoKHNwICE9IE5V
TEwpICYmIChzcC0+c29tZV90YWtlbiA9PSAxKSkgewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxv
Y2tlZF9vbl9zZW5kaW5nID0gc3RycTsKLQkJfSBlbHNlIHsKLQkJCXN0Y2ItPmFzb2Muc3NfZGF0
YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7Ci0JCX0KLQl9IGVsc2UgewotCQlzdGNiLT5hc29j
LnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBOVUxMOwotCX0KLQlzdWJ0cmFjdCA9IHN0cnEt
PnNzX3BhcmFtcy5mYi5yb3VuZHM7Ci0JVEFJTFFfRk9SRUFDSChzdHJxdCwgJmFzb2MtPnNzX2Rh
dGEub3V0LndoZWVsLCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSkgewotCQlzdHJxdC0+c3NfcGFy
YW1zLmZiLnJvdW5kcyAtPSBzdWJ0cmFjdDsKLQkJaWYgKHN0cnF0LT5zc19wYXJhbXMuZmIucm91
bmRzIDwgMCkKLQkJCXN0cnF0LT5zc19wYXJhbXMuZmIucm91bmRzID0gMDsKLQl9Ci0JaWYgKFRB
SUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkpIHsKLQkJc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5k
cyA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPmxlbmd0aDsKLQl9IGVsc2UgewotCQlz
dHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gLTE7Ci0JfQotCWFzb2MtPnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtID0gc3RycTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBGaXJzdC1jb21lLCBmaXJz
dC1zZXJ2ZSBhbGdvcml0aG0uCi0gKiBNYWludGFpbnMgdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IHRo
ZSBhcHBsaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfc3NfZmNmc19hZGQoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFt
X3F1ZXVlX3BlbmRpbmcgKnNwLAotICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jayk7Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX3NzX2ZjZnNfaW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAgICAgICAgaW50IGhvbGRz
X2xvY2spCi17Ci0JdWludDMyX3QgeCwgbiA9IDAsIGFkZF9tb3JlID0gMTsKLQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0JdWludDE2X3QgaTsKLQotCVRBSUxRX0lOSVQo
JmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpOwotCS8qCi0JICogSWYgdGhlcmUgaXMgZGF0YSBpbiB0
aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAotCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhpc3Rp
bmcgYXNzb2NpYXRpb24gaGFzCi0JICogYmVlbiBjaGFuZ2VkLiBXZSBjYW4gb25seSBjeWNsZSB0
aHJvdWdoIHRoZQotCSAqIHN0cmVhbSBxdWV1ZXMgYW5kIGFkZCBldmVyeXRoaW5nIHRvIHRoZSBG
Q0ZTCi0JICogcXVldWUuCi0JICovCi0Jd2hpbGUgKGFkZF9tb3JlKSB7Ci0JCWFkZF9tb3JlID0g
MDsKLQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJ
CXNwID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7Ci0JCQl4
ID0gMDsKLQkJCS8qIEZpbmQgbi4gbWVzc2FnZSBpbiBjdXJyZW50IHN0cmVhbSBxdWV1ZSAqLwot
CQkJd2hpbGUgKHNwICE9IE5VTEwgJiYgeCA8IG4pIHsKLQkJCQlzcCA9IFRBSUxRX05FWFQoc3As
IG5leHQpOwotCQkJCXgrKzsKLQkJCX0KLQkJCWlmIChzcCAhPSBOVUxMKSB7Ci0JCQkJc2N0cF9z
c19mY2ZzX2FkZChzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwgc3As
IGhvbGRzX2xvY2spOwotCQkJCWFkZF9tb3JlID0gMTsKLQkJCX0KLQkJfQotCQluKys7Ci0JfQot
CXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZmNmc19jbGVhcihzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAg
ICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQotewotCWlmIChjbGVhcl92
YWx1ZXMpIHsKLQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQkJU0NUUF9UQ0JfU0VORF9MT0NL
KHN0Y2IpOwotCQl9Ci0JCXdoaWxlICghVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxp
c3QpKSB7Ci0JCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QsIFRBSUxRX0ZJ
UlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KSwgc3NfbmV4dCk7Ci0JCX0KLQkJaWYgKGhvbGRz
X2xvY2sgPT0gMCkgewotCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JCX0KLQl9Ci0J
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mY2ZzX2luaXRfc3RyZWFtKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqd2l0aF9zdHJxKQotewotCWlmICh3aXRoX3N0cnEgIT0gTlVMTCkgewot
CQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID09IHdpdGhfc3RycSkg
ewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKLQkJfQot
CQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSB3aXRoX3N0cnEpIHsK
LQkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBzdHJxOwotCQl9Ci0JfQot
CXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZmNmc19hZGQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBf
c3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAotICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9j
aykKLXsKLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNi
KTsKLQl9Ci0JaWYgKHNwICYmIChzcC0+c3NfbmV4dC50cWVfbmV4dCA9PSBOVUxMKSAmJgotCSAg
ICAoc3AtPnNzX25leHQudHFlX3ByZXYgPT0gTlVMTCkpIHsKLQkJVEFJTFFfSU5TRVJUX1RBSUwo
JmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QsIHNwLCBzc19uZXh0KTsKLQl9Ci0JaWYgKGhvbGRzX2xv
Y2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuOwot
fQotCi1zdGF0aWMgaW50Ci1zY3RwX3NzX2ZjZnNfaXNfZW1wdHkoc3RydWN0IHNjdHBfdGNiICpz
dGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlpZiAo
VEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7Ci0JCXJldHVybiAoMSk7Ci0J
fSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2Zj
ZnNfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEg
U0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwKLSAgICAg
ICAgICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCi17Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkg
ewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCWlmIChzcCAmJgotCSAgICAoKHNw
LT5zc19uZXh0LnRxZV9uZXh0ICE9IE5VTEwpIHx8Ci0JICAgICAoc3AtPnNzX25leHQudHFlX3By
ZXYgIT0gTlVMTCkpKSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQubGlzdCwg
c3AsIHNzX25leHQpOwotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NF
TkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKgotc2N0cF9zc19mY2ZzX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ig
U0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqc3RycTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0KLQlzcCA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KTsKLWRlZmF1bHRfYWdhaW46Ci0J
aWYgKHNwICE9IE5VTEwpIHsKLQkJc3RycSA9ICZhc29jLT5zdHJtb3V0W3NwLT5zaWRdOwotCX0g
ZWxzZSB7Ci0JCXN0cnEgPSBOVUxMOwotCX0KLQotCS8qCi0JICogSWYgQ01UIGlzIG9mZiwgd2Ug
bXVzdCB2YWxpZGF0ZSB0aGF0Ci0JICogdGhlIHN0cmVhbSBpbiBxdWVzdGlvbiBoYXMgdGhlIGZp
cnN0Ci0JICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5ldHdvcmsgZGVzdGluYXRpb24KLQkg
KiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0IGlmIHdlCi0JICogdHVybiBvdXQg
dG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcKLQkgKiBUU04ncyB0aGVuIHdlIG11
c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90Ci0JICogbG9vayBmb3IgYW5vdGhlciBzdHJlYW0gd2l0
aCBkYXRhIHRvIHNlbmQKLQkgKiB0byB0aGF0IGRlc3RpbmF0aW9uKS4gSW4gQ01UJ3MgY2FzZSwg
YnkKLQkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxsIHNlbmQgb25lCi0JICogZGF0YSBw
YWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KLQkgKi8KLQlpZiAobmV0ICE9IE5VTEwg
JiYgc3RycSAhPSBOVUxMICYmCi0JICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2Zm
KSA9PSAwKSB7Ci0JCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpICYmCi0JCSAgICBU
QUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAmJgotCQkgICAgVEFJTFFf
RklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkgewotCQkJc3AgPSBUQUlMUV9ORVhU
KHNwLCBzc19uZXh0KTsKLQkJCWdvdG8gZGVmYXVsdF9hZ2FpbjsKLQkJfQotCX0KLQlyZXR1cm4g
KHN0cnEpOwotfQotCi1jb25zdCBzdHJ1Y3Qgc2N0cF9zc19mdW5jdGlvbnMgc2N0cF9zc19mdW5j
dGlvbnNbXSA9IHsKLS8qIFNDVFBfU1NfREVGQVVMVCAqLwotewotI2lmIGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlzY3RwX3NzX2RlZmF1
bHRfaW5pdCwKLQlzY3RwX3NzX2RlZmF1bHRfY2xlYXIsCi0Jc2N0cF9zc19kZWZhdWx0X2luaXRf
c3RyZWFtLAotCXNjdHBfc3NfZGVmYXVsdF9hZGQsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5
LAotCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCi0Jc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKLQlz
Y3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAotCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwK
LQlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUs
Ci0Jc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZWxzZQotCS5zY3Rw
X3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKLQkuc2N0cF9zc19jbGVhciA9IHNjdHBf
c3NfZGVmYXVsdF9jbGVhciwKLQkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVs
dF9pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0
X2FkZCwKLQkuc2N0cF9zc19pc19lbXB0eSA9IHNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKLQku
c2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlLAotCS5z
Y3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfc2VsZWN0LAotCS5zY3RwX3Nz
X3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCi0JLnNjdHBfc3NfcGFja2V0
X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0JLnNjdHBfc3NfZ2V0X3ZhbHVl
ID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKLQkuc2N0cF9zc19zZXRfdmFsdWUgPSBzY3Rw
X3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAotCS5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRl
ID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZW5kaWYKLX0sCi0v
KiBTQ1RQX1NTX1JPVU5EX1JPQklOICovCi17Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXNjdHBfc3NfZGVmYXVsdF9pbml0LAot
CXNjdHBfc3NfZGVmYXVsdF9jbGVhciwKLQlzY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0sCi0J
c2N0cF9zc19ycl9hZGQsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAotCXNjdHBfc3NfZGVm
YXVsdF9yZW1vdmUsCi0Jc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKLQlzY3RwX3NzX2RlZmF1bHRf
c2NoZWR1bGVkLAotCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1
bHRfZ2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZh
dWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3Rw
X3NzX2RlZmF1bHRfaW5pdCwKLQkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVh
ciwKLQkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwK
LQkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQsCi0JLnNjdHBfc3NfaXNf
ZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0JLnNjdHBfc3NfcmVtb3ZlX2Zyb21f
c3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKLQkuc2N0cF9zc19zZWxlY3Rfc3RyZWFt
ID0gc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKLQkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3Nz
X2RlZmF1bHRfc2NoZWR1bGVkLAotCS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19kZWZh
dWx0X3BhY2tldF9kb25lLAotCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9n
ZXRfdmFsdWUsCi0JLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X3NldF92YWx1
ZSwKLQkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9p
c191c2VyX21zZ3NfaW5jb21wbGV0ZQotI2VuZGlmCi19LAotLyogU0NUUF9TU19ST1VORF9ST0JJ
Tl9QQUNLRVQgKi8KLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9zc19kZWZhdWx0X2luaXQsCi0Jc2N0cF9zc19kZWZh
dWx0X2NsZWFyLAotCXNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKLQlzY3RwX3NzX3JyX2Fk
ZCwKLQlzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0Jc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwK
LQlzY3RwX3NzX3JycF9zZWxlY3QsCi0Jc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwKLQlzY3Rw
X3NzX3JycF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCXNjdHBf
c3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNv
bXBsZXRlCi0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKLQku
c2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKLQkuc2N0cF9zc19pbml0X3N0
cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19hZGRfdG9fc3Ry
ZWFtID0gc2N0cF9zc19ycl9hZGQsCi0JLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1
bHRfaXNfZW1wdHksCi0JLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZh
dWx0X3JlbW92ZSwKLQkuc2N0cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19ycnBfc2VsZWN0
LAotCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCi0JLnNj
dHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX3JycF9wYWNrZXRfZG9uZSwKLQkuc2N0cF9zc19n
ZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCS5zY3RwX3NzX3NldF92YWx1
ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0JLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2lu
Y29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKLSNlbmRp
ZgotfSwKLS8qIFNDVFBfU1NfUFJJT1JJVFkgKi8KLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9zc19kZWZhdWx0X2lu
aXQsCi0Jc2N0cF9zc19wcmlvX2NsZWFyLAotCXNjdHBfc3NfcHJpb19pbml0X3N0cmVhbSwKLQlz
Y3RwX3NzX3ByaW9fYWRkLAotCXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKLQlzY3RwX3NzX3By
aW9fcmVtb3ZlLAotCXNjdHBfc3NfcHJpb19zZWxlY3QsCi0Jc2N0cF9zc19kZWZhdWx0X3NjaGVk
dWxlZCwKLQlzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0Jc2N0cF9zc19wcmlvX2dldF92
YWx1ZSwKLQlzY3RwX3NzX3ByaW9fc2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9pc191c2Vy
X21zZ3NfaW5jb21wbGV0ZQotI2Vsc2UKLQkuc2N0cF9zc19pbml0ID0gc2N0cF9zc19kZWZhdWx0
X2luaXQsCi0JLnNjdHBfc3NfY2xlYXIgPSBzY3RwX3NzX3ByaW9fY2xlYXIsCi0JLnNjdHBfc3Nf
aW5pdF9zdHJlYW0gPSBzY3RwX3NzX3ByaW9faW5pdF9zdHJlYW0sCi0JLnNjdHBfc3NfYWRkX3Rv
X3N0cmVhbSA9IHNjdHBfc3NfcHJpb19hZGQsCi0JLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3Nz
X2RlZmF1bHRfaXNfZW1wdHksCi0JLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9z
c19wcmlvX3JlbW92ZSwKLQkuc2N0cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19wcmlvX3Nl
bGVjdCwKLQkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAot
CS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAotCS5z
Y3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfcHJpb19nZXRfdmFsdWUsCi0JLnNjdHBfc3Nfc2V0
X3ZhbHVlID0gc2N0cF9zc19wcmlvX3NldF92YWx1ZSwKLQkuc2N0cF9zc19pc191c2VyX21zZ3Nf
aW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQotI2Vu
ZGlmCi19LAotLyogU0NUUF9TU19GQUlSX0JBTkRXSVRIICovCi17Ci0jaWYgZGVmaW5lZChfX1dp
bmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXNjdHBfc3NfZGVm
YXVsdF9pbml0LAotCXNjdHBfc3NfZmJfY2xlYXIsCi0Jc2N0cF9zc19mYl9pbml0X3N0cmVhbSwK
LQlzY3RwX3NzX2ZiX2FkZCwKLQlzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0Jc2N0cF9zc19m
Yl9yZW1vdmUsCi0Jc2N0cF9zc19mYl9zZWxlY3QsCi0Jc2N0cF9zc19mYl9zY2hlZHVsZWQsCi0J
c2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAotCXNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUs
Ci0Jc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKLQlzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9t
c2dzX2luY29tcGxldGUKLSNlbHNlCi0JLnNjdHBfc3NfaW5pdCA9IHNjdHBfc3NfZGVmYXVsdF9p
bml0LAotCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19mYl9jbGVhciwKLQkuc2N0cF9zc19pbml0
X3N0cmVhbSA9IHNjdHBfc3NfZmJfaW5pdF9zdHJlYW0sCi0JLnNjdHBfc3NfYWRkX3RvX3N0cmVh
bSA9IHNjdHBfc3NfZmJfYWRkLAotCS5zY3RwX3NzX2lzX2VtcHR5ID0gc2N0cF9zc19kZWZhdWx0
X2lzX2VtcHR5LAotCS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbSA9IHNjdHBfc3NfZmJfcmVt
b3ZlLAotCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2ZiX3NlbGVjdCwKLQkuc2N0
cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2ZiX3NjaGVkdWxlZCwKLQkuc2N0cF9zc19wYWNrZXRf
ZG9uZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKLQkuc2N0cF9zc19nZXRfdmFsdWUg
PSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBf
c3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0JLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUg
PSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKLSNlbmRpZgotfSwKLS8q
IFNDVFBfU1NfRklSU1RfQ09NRSAqLwotewotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlzY3RwX3NzX2ZjZnNfaW5pdCwKLQlzY3Rw
X3NzX2ZjZnNfY2xlYXIsCi0Jc2N0cF9zc19mY2ZzX2luaXRfc3RyZWFtLAotCXNjdHBfc3NfZmNm
c19hZGQsCi0Jc2N0cF9zc19mY2ZzX2lzX2VtcHR5LAotCXNjdHBfc3NfZmNmc19yZW1vdmUsCi0J
c2N0cF9zc19mY2ZzX3NlbGVjdCwKLQlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAotCXNjdHBf
c3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCXNj
dHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19p
bmNvbXBsZXRlCi0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2ZjZnNfaW5pdCwKLQku
c2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZmNmc19jbGVhciwKLQkuc2N0cF9zc19pbml0X3N0cmVh
bSA9IHNjdHBfc3NfZmNmc19pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0g
c2N0cF9zc19mY2ZzX2FkZCwKLQkuc2N0cF9zc19pc19lbXB0eSA9IHNjdHBfc3NfZmNmc19pc19l
bXB0eSwKLQkuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0gPSBzY3RwX3NzX2ZjZnNfcmVtb3Zl
LAotCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2ZjZnNfc2VsZWN0LAotCS5zY3Rw
X3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCi0JLnNjdHBfc3NfcGFj
a2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0JLnNjdHBfc3NfZ2V0X3Zh
bHVlID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKLQkuc2N0cF9zc19zZXRfdmFsdWUgPSBz
Y3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAotCS5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBs
ZXRlID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZW5kaWYKLX0K
LX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3N0cnVjdHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjVmM2VmMjVmZmFiODBhNzIwMjg1ZTEwYTAyOGFkYTc4ZWIzNGY3OS4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3Ry
dWN0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMwNCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdo
dCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwg
VHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0
aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9f
Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQvc2N0cF9zdHJ1Y3RzLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAk
Iik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NUUlVDVFNfSF8KLSNkZWZpbmUg
X05FVElORVRfU0NUUF9TVFJVQ1RTX0hfCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2F1dGguaD4KLQotc3RydWN0IHNjdHBfdGltZXIgewotCXNjdHBfb3NfdGltZXJfdCB0aW1lcjsK
LQotCWludCB0eXBlOwotCS8qCi0JICogRGVwZW5kaW5nIG9uIHRoZSB0aW1lciB0eXBlIHRoZXNl
IHdpbGwgYmUgc2V0dXAgYW5kIGNhc3Qgd2l0aCB0aGUKLQkgKiBhcHByb3ByaWF0ZSBlbnRpdHku
Ci0JICovCi0Jdm9pZCAqZXA7Ci0Jdm9pZCAqdGNiOwotCXZvaWQgKm5ldDsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQl2b2lkICp2bmV0
OwotI2VuZGlmCi0KLQkvKiBmb3Igc2FuaXR5IGNoZWNraW5nICovCi0Jdm9pZCAqc2VsZjsKLQl1
aW50MzJfdCB0aWNrczsKLQl1aW50MzJfdCBzdG9wcGVkX2Zyb207Ci19OwotCi0KLXN0cnVjdCBz
Y3RwX2Zvb19zdHVmZiB7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQl1aW50MzJfdCAgICAg
ICAgbGluZW5vOwotCXVpbnQzMl90ICAgICAgICB0aWNrczsKLQlpbnQgICAgICAgICAgICAgdXBk
b3duOwotfTsKLQotCi0vKgotICogVGhpcyBpcyB0aGUgaW5mb3JtYXRpb24gd2UgdHJhY2sgb24g
ZWFjaCBpbnRlcmZhY2UgdGhhdCB3ZSBrbm93IGFib3V0IGZyb20KLSAqIHRoZSBkaXN0YW50IGVu
ZC4KLSAqLwotVEFJTFFfSEVBRChzY3RwbmV0bGlzdGhlYWQsIHNjdHBfbmV0cyk7Ci0KLXN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9saXN0IHsKLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9yZXNl
dF9saXN0KSBuZXh0X3Jlc3A7Ci0JdWludDMyX3Qgc2VxOwotCXVpbnQzMl90IHRzbjsKLQl1aW50
MzJfdCBudW1iZXJfZW50cmllczsKLQl1aW50MTZfdCBsaXN0X29mX3N0cmVhbXNbXTsKLX07Ci0K
LVRBSUxRX0hFQUQoc2N0cF9yZXNldGhlYWQsIHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QpOwotCi0v
KgotICogVXNlcnMgb2YgdGhlIGl0ZXJhdG9yIG5lZWQgdG8gbWFsbG9jIGEgaXRlcmF0b3Igd2l0
aCBhIGNhbGwgdG8KLSAqIHNjdHBfaW5pdGlhdGVfaXRlcmF0b3IoaW5wX2Z1bmMsIGFzc29jX2Z1
bmMsIGlucF9mdW5jLCAgcGNiX2ZsYWdzLCBwY2JfZmVhdHVyZXMsCi0gKiAgICAgYXNvY19zdGF0
ZSwgdm9pZC1wdHItYXJnLCB1aW50MzItYXJnLCBlbmRfZnVuYywgaW5wKTsKLSAqCi0gKiBVc2Ug
dGhlIGZvbGxvd2luZyB0d28gZGVmaW5lcyBpZiB5b3UgZG9uJ3QgY2FyZSB3aGF0IHBjYiBmbGFn
cyBhcmUgb24gdGhlIEVQCi0gKiBhbmQvb3IgeW91IGRvbid0IGNhcmUgd2hhdCBzdGF0ZSB0aGUg
YXNzb2NpYXRpb24gaXMgaW4uCi0gKgotICogTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGFuIElO
UCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0aGVuIE9OTFkgZWFjaAotICogYXNzb2NpYXRpb24gb2Yg
dGhhdCBzaW5nbGUgSU5QIHdpbGwgYmUgZXhlY3V0ZWQgdXBvbi4gTm90ZSB0aGF0IHRoZSBwY2IK
LSAqIGZsYWdzIFNUSUxMIGFwcGx5IHNvIGlmIHRoZSBpbnAgeW91IHNwZWNpZnkgaGFzIGRpZmZl
cmVudCBwY2JfZmxhZ3MgdGhlbgotICogd2hhdCB5b3UgcHV0IGluIHBjYl9mbGFncyBub3RoaW5n
IHdpbGwgaGFwcGVuLiB1c2UgU0NUUF9QQ0JfQU5ZX0ZMQUdTIHRvCi0gKiBhc3N1cmUgdGhlIGlu
cCB5b3Ugc3BlY2lmeSBnZXRzIHRyZWF0ZWQuCi0gKi8KLSNkZWZpbmUgU0NUUF9QQ0JfQU5ZX0ZM
QUdTCTB4MDAwMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTCTB4MDAwMDAwMDAK
LSNkZWZpbmUgU0NUUF9BU09DX0FOWV9TVEFURQkweDAwMDAwMDAwCi0KLXR5cGVkZWYgdm9pZCAo
KmFzb2NfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCB2b2lk
ICpwdHIsCi0gICAgICAgICB1aW50MzJfdCB2YWwpOwotdHlwZWRlZiBpbnQgKCppbnBfZnVuYykg
KHN0cnVjdCBzY3RwX2lucGNiICosIHZvaWQgKnB0ciwgdWludDMyX3QgdmFsKTsKLXR5cGVkZWYg
dm9pZCAoKmVuZF9mdW5jKSAodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwpOwotCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNN
UCkKLS8qIHdoYXRzIG9uIHRoZSBtY29yZSBjb250cm9sIHN0cnVjdCAqLwotc3RydWN0IHNjdHBf
bWNvcmVfcXVldWUgewotCVRBSUxRX0VOVFJZKHNjdHBfbWNvcmVfcXVldWUpIG5leHQ7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0Jc3Ry
dWN0IHZuZXQgKnZuOwotI2VuZGlmCi0Jc3RydWN0IG1idWYgKm07Ci0JaW50IG9mZjsKLQlpbnQg
djY7Ci19OwotCi1UQUlMUV9IRUFEKHNjdHBfbWNvcmVfcWhlYWQsIHNjdHBfbWNvcmVfcXVldWUp
OwotCi1zdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsIHsKLQlTQ1RQX1BST0NFU1NfU1RSVUNUIHRocmVh
ZF9wcm9jOwotCXN0cnVjdCBzY3RwX21jb3JlX3FoZWFkIHF1ZTsKLQlzdHJ1Y3QgbXR4IGNvcmVf
bXR4OwotCXN0cnVjdCBtdHggcXVlX210eDsKLQlpbnQgcnVubmluZzsKLQlpbnQgY3B1aWQ7Ci19
OwotCi0KLSNlbmRpZgotCi0KLXN0cnVjdCBzY3RwX2l0ZXJhdG9yIHsKLQlUQUlMUV9FTlRSWShz
Y3RwX2l0ZXJhdG9yKSBzY3RwX254dF9pdHI7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0Jc3RydWN0IHZuZXQgKnZuOwotI2VuZGlmCi0J
c3RydWN0IHNjdHBfdGltZXIgdG1yOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CQkvKiBjdXJy
ZW50IGVuZHBvaW50ICovCi0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwkJLyogY3VycmVudCogYXNz
b2MgKi8KLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV4dF9pbnA7ICAgIC8qIHNwZWNpYWwgaG9vayB0
byBza2lwIHRvICovCi0JYXNvY19mdW5jIGZ1bmN0aW9uX2Fzc29jOwkvKiBwZXIgYXNzb2MgZnVu
Y3Rpb24gKi8KLQlpbnBfZnVuYyBmdW5jdGlvbl9pbnA7CQkvKiBwZXIgZW5kcG9pbnQgZnVuY3Rp
b24gKi8KLQlpbnBfZnVuYyBmdW5jdGlvbl9pbnBfZW5kOwkvKiBlbmQgSU5QIGZ1bmN0aW9uICov
Ci0JZW5kX2Z1bmMgZnVuY3Rpb25fYXRlbmQ7CS8qIGl0ZXJhdG9yIGNvbXBsZXRpb24gZnVuY3Rp
b24gKi8KLQl2b2lkICpwb2ludGVyOwkJCS8qIHBvaW50ZXIgZm9yIGFwcGx5IGZ1bmMgdG8gdXNl
ICovCi0JdWludDMyX3QgdmFsOwkJCS8qIHZhbHVlIGZvciBhcHBseSBmdW5jIHRvIHVzZSAqLwot
CXVpbnQzMl90IHBjYl9mbGFnczsJCS8qIGVuZHBvaW50IGZsYWdzIGJlaW5nIGNoZWNrZWQgKi8K
LQl1aW50MzJfdCBwY2JfZmVhdHVyZXM7CQkvKiBlbmRwb2ludCBmZWF0dXJlcyBiZWluZyBjaGVj
a2VkICovCi0JdWludDMyX3QgYXNvY19zdGF0ZTsJCS8qIGFzc29jIHN0YXRlIGJlaW5nIGNoZWNr
ZWQgKi8KLQl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKLQl1aW50OF90ICBub19jaHVua19vdXRw
dXQ7Ci0JdWludDhfdCAgZG9uZV9jdXJyZW50X2VwOwotfTsKLS8qIGl0ZXJhdG9yX2ZsYWdzIHZh
bHVlcyAqLwotI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX0FMTF9JTlAJMHgwMDAwMDAwMQotI2Rl
ZmluZSBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlAJMHgwMDAwMDAwMgotCi0KLVRBSUxRX0hF
QUQoc2N0cGl0ZXJhdG9ycywgc2N0cF9pdGVyYXRvcik7Ci0KLXN0cnVjdCBzY3RwX2NvcHlfYWxs
IHsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwkvKiBlcCAqLwotCXN0cnVjdCBtYnVmICptOwot
CXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2OwotCWludCBzbmRsZW47Ci0JaW50IGNudF9z
ZW50OwotCWludCBjbnRfZmFpbGVkOwotfTsKLQotc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9y
IHsKLQlzdHJ1Y3Qgc2N0cGxhZGRyIGxpc3Rfb2Zfd29yazsKLQlpbnQgY250OwotfTsKLQotc3Ry
dWN0IGl0ZXJhdG9yX2NvbnRyb2wgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0Jc3RydWN0
IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OwotCXN0cnVjdCBtdHggaXRfbXR4OwotI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pCi0JbGNrX210eF90ICppcGlfaXRlcmF0b3Jfd3FfbXR4OwotCWxja19t
dHhfdCAqaXRfbXR4OwotI2VsaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCXVzZXJsYW5kX211dGV4X3QgaXBpX2l0ZXJhdG9y
X3dxX210eDsKLQl1c2VybGFuZF9tdXRleF90IGl0X210eDsKLQl1c2VybGFuZF9jb25kX3QgaXRl
cmF0b3Jfd2FrZXVwOwotI2Vsc2UKLQlwdGhyZWFkX211dGV4X3QgaXBpX2l0ZXJhdG9yX3dxX210
eDsKLQlwdGhyZWFkX211dGV4X3QgaXRfbXR4OwotCXB0aHJlYWRfY29uZF90IGl0ZXJhdG9yX3dh
a2V1cDsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlzdHJ1Y3Qgc3Bpbmxv
Y2sgaXRfbG9jazsKLQlzdHJ1Y3Qgc3BpbmxvY2sgaXBpX2l0ZXJhdG9yX3dxX2xvY2s7Ci0JS0VW
RU5UIGl0ZXJhdG9yX3dha2V1cFsyXTsKLQlQRklMRV9PQkpFQ1QgaXRlcmF0b3JfdGhyZWFkX29i
ajsKLSNlbHNlCi0Jdm9pZCAqaXRfbXR4OwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19XaW5kb3dz
X18pCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlTQ1RQX1BST0NFU1NfU1RSVUNUIHRo
cmVhZF9wcm9jOwotI2Vsc2UKLQl1c2VybGFuZF90aHJlYWRfdCB0aHJlYWRfcHJvYzsKLSNlbmRp
ZgotI2VuZGlmCi0Jc3RydWN0IHNjdHBpdGVyYXRvcnMgaXRlcmF0b3JoZWFkOwotCXN0cnVjdCBz
Y3RwX2l0ZXJhdG9yICpjdXJfaXQ7Ci0JdWludDMyX3QgaXRlcmF0b3JfcnVubmluZzsKLQl1aW50
MzJfdCBpdGVyYXRvcl9mbGFnczsKLX07Ci0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCi0jZGVm
aW5lIFNDVFBfSVRFUkFUT1JfTVVTVF9FWElUCQkweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfSVRF
UkFUT1JfRVhJVEVECQkweDAwMDAwMDAyCi0jZW5kaWYKLSNkZWZpbmUgU0NUUF9JVEVSQVRPUl9T
VE9QX0NVUl9JVAkweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJfSU5Q
CTB4MDAwMDAwMDgKLQotc3RydWN0IHNjdHBfbmV0X3JvdXRlIHsKLQlzY3RwX3J0ZW50cnlfdCAq
cm9fcnQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8
IDExMDAwOTMKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQl2b2lkICpyb19sbGU7
Ci0jZW5kaWYKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA5MDAwMDAKLQl2b2lkICpyb19pYTsK
LQlpbnQgcm9fZmxhZ3M7Ci0jZW5kaWYKLSNlbHNlCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
MTEwMDExNgotCXN0cnVjdCBsbGVudHJ5ICpyb19sbGU7Ci0jZW5kaWYKLQljaGFyCQkqcm9fcHJl
cGVuZDsKLQl1aW50MTZfdAlyb19wbGVuOwotCXVpbnQxNl90CXJvX2ZsYWdzOwotCXVpbnQxNl90
CXJvX210dTsKLQl1aW50MTZfdAlzcGFyZTsKLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVf
U05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01P
VU5UQUlOTElPTikKLQlzdHJ1Y3QgaWZhZGRyICpyb19zcmNpYTsKLSNlbmRpZgotI2lmICFkZWZp
bmVkKEFQUExFX0xFT1BBUkQpCi0JdWludDMyX3Qgcm9fZmxhZ3M7Ci0jZW5kaWYKLSNlbmRpZgot
CXVuaW9uIHNjdHBfc29ja3N0b3JlIF9sX2FkZHI7CS8qIHJlbW90ZSBwZWVyIGFkZHIgKi8KLQlz
dHJ1Y3Qgc2N0cF9pZmEgKl9zX2FkZHI7CS8qIG91ciBzZWxlY3RlZCBzcmMgYWRkciAqLwotfTsK
LQotc3RydWN0IGh0Y3AgewotCXVpbnQxNl90CWFscGhhOwkJLyogRml4ZWQgcG9pbnQgYXJpdGgs
IDw8IDcgKi8KLQl1aW50OF90CQliZXRhOyAgICAgICAgICAgLyogRml4ZWQgcG9pbnQgYXJpdGgs
IDw8IDcgKi8KLQl1aW50OF90CQltb2Rlc3dpdGNoOyAgICAgLyogRGVsYXkgbW9kZXN3aXRjaCB1
bnRpbCB3ZSBoYWQgYXQgbGVhc3Qgb25lIGNvbmdlc3Rpb24gZXZlbnQgKi8KLQl1aW50MzJfdAls
YXN0X2Nvbmc7CS8qIFRpbWUgc2luY2UgbGFzdCBjb25nZXN0aW9uIGV2ZW50IGVuZCAqLwotCXVp
bnQzMl90CXVuZG9fbGFzdF9jb25nOwotCXVpbnQxNl90CWJ5dGVzX2Fja2VkOwotCXVpbnQzMl90
CWJ5dGVjb3VudDsKLQl1aW50MzJfdAltaW5SVFQ7Ci0JdWludDMyX3QJbWF4UlRUOwotCi0JdWlu
dDMyX3QJdW5kb19tYXhSVFQ7Ci0JdWludDMyX3QJdW5kb19vbGRfbWF4QjsKLQotCS8qIEJhbmR3
aWR0aCBlc3RpbWF0aW9uICovCi0JdWludDMyX3QJbWluQjsKLQl1aW50MzJfdAltYXhCOwotCXVp
bnQzMl90CW9sZF9tYXhCOwotCXVpbnQzMl90CUJpOwotCXVpbnQzMl90CWxhc3R0aW1lOwotfTsK
LQotc3RydWN0IHJ0Y2NfY2MgewotCXN0cnVjdCB0aW1ldmFsIHRsczsgICAvKiBUaGUgdGltZSB3
ZSBzdGFydGVkIHRoZSBzZW5kaW5nICAqLwotCXVpbnQ2NF90IGxidzsgICAgICAgICAvKiBPdXIg
bGFzdCBlc3RpbWF0ZWQgYncgKi8KLQl1aW50NjRfdCBsYndfcnR0OyAgICAgLyogUlRUIGF0IGJ3
IGVzdGltYXRlICovCi0JdWludDY0X3QgYndfYnl0ZXM7ICAgIC8qIFRoZSB0b3RhbCBieXRlcyBz
aW5jZSB0aGlzIHNlbmRpbmcgYmVnYW4gKi8KLQl1aW50NjRfdCBid190b3RfdGltZTsgLyogVGhl
IHRvdGFsIHRpbWUgc2luY2Ugc2VuZGluZyBiZWdhbiAqLwotCXVpbnQ2NF90IG5ld190b3RfdGlt
ZTsgIC8qIHRlbXAgaG9sZGluZyB0aGUgbmV3IHZhbHVlICovCi0JdWludDY0X3QgYndfYnl0ZXNf
YXRfbGFzdF9ydHRjOyAvKiBXaGF0IGJ3X2J5dGVzIHdhcyBhdCBsYXN0IHJ0dCBjYWxjICovCi0J
dWludDMyX3QgY3duZF9hdF9id19zZXQ7IC8qIEN3bmQgYXQgbGFzdCBidyBzYXZlZCAtIGxidyAq
LwotCXVpbnQzMl90IHZvbF9yZWR1Y2U7ICAvKiBjbnQgb2Ygdm9sdW50YXJ5IHJlZHVjdGlvbnMg
Ki8KLQl1aW50MTZfdCBzdGVhZHlfc3RlcDsgLyogVGhlIG51bWJlciByZXF1aXJlZCB0byBiZSBp
biBzdGVhZHkgc3RhdGUqLwotCXVpbnQxNl90IHN0ZXBfY250OyAgICAvKiBUaGUgY3VycmVudCBu
dW1iZXIgKi8KLQl1aW50OF90ICByZXRfZnJvbV9lcTsgIC8qIFdoZW4gYWxsIHRoaW5ncyBhcmUg
ZXF1YWwgd2hhdCBkbyBJIHJldHVybiAwLzEgLSAxIG5vIGNjIGFkdmFuY2UgKi8KLQl1aW50OF90
ICB1c2VfZGNjY19lY247ICAvKiBGbGFnIHRvIGVuYWJsZSBEQ0NDIEVDTiAqLwotCXVpbnQ4X3Qg
IHRsc19uZWVkc19zZXQ7IC8qIEZsYWcgdG8gaW5kaWNhdGUgd2UgbmVlZCB0byBzZXQgdGxzIDAg
b3IgMSBtZWFucyBzZXQgYXQgc2VuZCAyIG5vdCAqLwotCXVpbnQ4X3QgIGxhc3Rfc3RlcF9zdGF0
ZTsgLyogTGFzdCBzdGF0ZSBpZiBzdGVhZHkgc3RhdGUgc3RlcGRvd24gaXMgb24gKi8KLQl1aW50
OF90ICBydHRfc2V0X3RoaXNfc2FjazsgLyogRmxhZyBzYXlpbmcgdGhpcyBzYWNrIGhhZCBSVFQg
Y2FsYyBvbiBpdCAqLwotCXVpbnQ4X3QgIGxhc3RfaW5zdF9pbmQ7IC8qIExhc3Qgc2F2ZWQgaW5z
dCBpbmRpY2F0aW9uICovCi19OwotCi0KLXN0cnVjdCBzY3RwX25ldHMgewotCVRBSUxRX0VOVFJZ
KHNjdHBfbmV0cykgc2N0cF9uZXh0OwkvKiBuZXh0IGxpbmsgKi8KLQotCS8qCi0JICogVGhpbmdz
IG9uIHRoZSB0b3AgaGFsZiBtYXkgYmUgYWJsZSB0byBiZSBzcGxpdCBpbnRvIGEgY29tbW9uCi0J
ICogc3RydWN0dXJlIHNoYXJlZCBieSBhbGwuCi0JICovCi0Jc3RydWN0IHNjdHBfdGltZXIgcG10
dV90aW1lcjsKLQlzdHJ1Y3Qgc2N0cF90aW1lciBoYl90aW1lcjsKLQotCS8qCi0JICogVGhlIGZv
bGxvd2luZyB0d28gaW4gY29tYmluYXRpb24gZXF1YXRlIHRvIGEgcm91dGUgZW50cnkgZm9yIHY2
Ci0JICogb3IgdjQuCi0JICovCi0Jc3RydWN0IHNjdHBfbmV0X3JvdXRlIHJvOwotCi0JLyogbXR1
IGRpc2NvdmVyZWQgc28gZmFyICovCi0JdWludDMyX3QgbXR1OwotCXVpbnQzMl90IHNzdGhyZXNo
OwkvKiBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBmb3Igc3BsaXQgKi8KLQl1aW50MzJfdCBsYXN0
X2N3cl90c247Ci0JdWludDMyX3QgY3dyX3dpbmRvd190c247Ci0JdWludDMyX3QgZWNuX2NlX3Br
dF9jbnQ7Ci0JdWludDMyX3QgbG9zdF9jbnQ7Ci0JLyogc21vb3RoZWQgYXZlcmFnZSB0aGluZ3Mg
Zm9yIFJUVCBhbmQgUlRPIGl0c2VsZiAqLwotCWludCBsYXN0c2E7Ci0JaW50IGxhc3RzdjsKLQl1
aW50NjRfdCBydHQ7IC8qIGxhc3QgbWVhc3VyZWQgcnR0IHZhbHVlIGluIHVzICovCi0JdW5zaWdu
ZWQgaW50IFJUTzsKLQotCS8qIFRoaXMgaXMgdXNlZCBmb3IgU0hVVERPV04vU0hVVERPV04tQUNL
L1NFTkQgb3IgSU5JVCB0aW1lcnMgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciByeHRfdGltZXI7Ci0K
LQkvKiBsYXN0IHRpbWUgaW4gc2Vjb25kcyBJIHNlbnQgdG8gaXQgKi8KLQlzdHJ1Y3QgdGltZXZh
bCBsYXN0X3NlbnRfdGltZTsKLQl1bmlvbiBjY19jb250cm9sX2RhdGEgewotCQlzdHJ1Y3QgaHRj
cCBodGNwX2NhOyAJLyogSlJTIC0gc3RydWN0IHVzZWQgaW4gSFRDUCBhbGdvcml0aG0gKi8KLQkJ
c3RydWN0IHJ0Y2NfY2MgcnRjYzsgICAgLyogcnRjYyBtb2R1bGUgY2Mgc3R1ZmYgICovCi0JfSBj
Y19tb2Q7Ci0JaW50IHJlZl9jb3VudDsKLQotCS8qIENvbmdlc3Rpb24gc3RhdHMgcGVyIGRlc3Rp
bmF0aW9uICovCi0JLyoKLQkgKiBmbGlnaHQgc2l6ZSB2YXJpYWJsZXMgYW5kIHN1Y2gsIHNvcnJ5
IFZlcm4sIEkgY291bGQgbm90IGF2b2lkCi0JICogdGhpcyBpZiBJIHdhbnRlZCBwZXJmb3JtYW5j
ZSA6PgotCSAqLwotCXVpbnQzMl90IGZsaWdodF9zaXplOwotCXVpbnQzMl90IGN3bmQ7CQkvKiBh
Y3R1YWwgY3duZCAqLwotCXVpbnQzMl90IHByZXZfY3duZDsJLyogY3duZCBiZWZvcmUgYW55IHBy
b2Nlc3NpbmcgKi8KLQl1aW50MzJfdCBlY25fcHJldl9jd25kOwkvKiBFQ04gcHJldiBjd25kIGF0
IGZpcnN0IGVjbl9lY2hvIHNlZW4gaW4gbmV3IHdpbmRvdyAqLwotCXVpbnQzMl90IHBhcnRpYWxf
Ynl0ZXNfYWNrZWQ7CS8qIGluIENBIHRyYWNrcyB3aGVuIHRvIGluY3IgYSBNVFUgKi8KLQkvKiB0
cmFja2luZyB2YXJpYWJsZXMgdG8gYXZvaWQgdGhlIGFsb2MvZnJlZSBpbiBzYWNrIHByb2Nlc3Np
bmcgKi8KLQl1bnNpZ25lZCBpbnQgbmV0X2FjazsKLQl1bnNpZ25lZCBpbnQgbmV0X2FjazI7Ci0K
LQkvKgotCSAqIEpSUyAtIDUvOC8wNyAtIFZhcmlhYmxlIHRvIHRyYWNrIGxhc3QgdGltZQotCSAq
ICBhIGRlc3RpbmF0aW9uIHdhcyBhY3RpdmUgZm9yIENNVCBQRgotCSAqLwotCXVpbnQzMl90IGxh
c3RfYWN0aXZlOwotCi0JLyoKLQkgKiBDTVQgdmFyaWFibGVzIChpeWVuZ2FyQGNpcy51ZGVsLmVk
dSkKLQkgKi8KLQl1aW50MzJfdCB0aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2s7CS8qIHRyYWNrcyBo
aWdoZXN0IFRTTiBuZXdseQotCQkJCQkJICogYWNrZWQgZm9yIGEgZ2l2ZW4gZGVzdCBpbgotCQkJ
CQkJICogdGhlIGN1cnJlbnQgU0FDSy4gVXNlZCBpbgotCQkJCQkJICogU0ZSIGFuZCBIVE5BIGFs
Z29zICovCi0JdWludDMyX3QgcHNldWRvX2N1bWFjazsJLyogQ01UIENVQyBhbGdvcml0aG0uIE1h
aW50YWlucyBuZXh0IGV4cGVjdGVkCi0JCQkJICogcHNldWRvLWN1bWFjayBmb3IgdGhpcyBkZXN0
aW5hdGlvbiAqLwotCXVpbnQzMl90IHJ0eF9wc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VDIGFsZ29y
aXRobS4gTWFpbnRhaW5zIG5leHQKLQkJCQkJICogZXhwZWN0ZWQgcHNldWRvLWN1bWFjayBmb3Ig
dGhpcwotCQkJCQkgKiBkZXN0aW5hdGlvbiAqLwotCi0JLyogQ01UIGZhc3QgcmVjb3ZlcnkgdmFy
aWFibGVzICovCi0JdWludDMyX3QgZmFzdF9yZWNvdmVyeV90c247Ci0JdWludDMyX3QgaGVhcnRi
ZWF0X3JhbmRvbTE7Ci0JdWludDMyX3QgaGVhcnRiZWF0X3JhbmRvbTI7Ci0jaWZkZWYgSU5FVDYK
LQl1aW50MzJfdCBmbG93bGFiZWw7Ci0jZW5kaWYKLQl1aW50OF90IGRzY3A7Ci0KLQlzdHJ1Y3Qg
dGltZXZhbCBzdGFydF90aW1lOyAgICAgIC8qIHRpbWUgd2hlbiB0aGlzIG5ldCB3YXMgY3JlYXRl
ZCAqLwotCXVpbnQzMl90IG1hcmtlZF9yZXRyYW5zOyAgICAgICAgLyogbnVtYmVyIG9yIERBVEEg
Y2h1bmtzIG1hcmtlZCBmb3IKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRp
bWVyIGJhc2VkIHJldHJhbnNtaXNzaW9ucyAqLwotCXVpbnQzMl90IG1hcmtlZF9mYXN0cmV0cmFu
czsKLQl1aW50MzJfdCBoZWFydF9iZWF0X2RlbGF5OyAgICAgIC8qIEhlYXJ0IEJlYXQgZGVsYXkg
aW4gbXMgKi8KLQotCS8qIGlmIHRoaXMgZ3V5IGlzIG9rIG9yIG5vdCAuLi4gc3RhdHVzICovCi0J
dWludDE2X3QgZGVzdF9zdGF0ZTsKLQkvKiBudW1iZXIgb2YgdGltZW91dHMgdG8gY29uc2lkZXIg
dGhlIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlICovCi0JdWludDE2X3QgZmFpbHVyZV90aHJlc2hv
bGQ7Ci0JLyogbnVtYmVyIG9mIHRpbWVvdXRzIHRvIGNvbnNpZGVyIHRoZSBkZXN0aW5hdGlvbiBw
b3RlbnRpYWxseSBmYWlsZWQgKi8KLQl1aW50MTZfdCBwZl90aHJlc2hvbGQ7Ci0JLyogZXJyb3Ig
c3RhdHMgb24gdGhlIGRlc3RpbmF0aW9uICovCi0JdWludDE2X3QgZXJyb3JfY291bnQ7Ci0JLyog
VURQIHBvcnQgbnVtYmVyIGluIGNhc2Ugb2YgVURQIHR1bm5lbGluZyAqLwotCXVpbnQxNl90IHBv
cnQ7Ci0KLQl1aW50OF90IGZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnk7Ci0JdWludDhfdCB3aWxs
X2V4aXRfZmFzdF9yZWNvdmVyeTsKLQkvKiBGbGFncyB0aGF0IHByb2JhYmx5IGNhbiBiZSBjb21i
aW5lZCBpbnRvIGRlc3Rfc3RhdGUgKi8KLQl1aW50OF90IGZhc3RfcmV0cmFuX2lwOwkvKiBmYXN0
IHJldHJhbnNtaXQgaW4gcHJvZ3Jlc3MgKi8KLQl1aW50OF90IGhiX3Jlc3BvbmRlZDsKLQl1aW50
OF90IHNhd19uZXdhY2s7CS8qIENNVCdzIFNGUiBhbGdvcml0aG0gZmxhZyAqLwotCXVpbnQ4X3Qg
c3JjX2FkZHJfc2VsZWN0ZWQ7CS8qIGlmIHdlIHNwbGl0IHdlIG1vdmUgKi8KLQl1aW50OF90IGlu
ZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2U7Ci0JdWludDhfdCBhZGRyX2lzX2xvY2FsOwkvKiBp
dHMgYSBsb2NhbCBhZGRyZXNzIChpZiBrbm93bikgY291bGQgbW92ZQotCQkJCSAqIGluIHNwbGl0
ICovCi0KLQkvKgotCSAqIENNVCB2YXJpYWJsZXMgKGl5ZW5nYXJAY2lzLnVkZWwuZWR1KQotCSAq
LwotCXVpbnQ4X3QgZmluZF9wc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VDIGFsZ29yaXRobS4gRmxh
ZyB1c2VkIHRvCi0JCQkJCSAqIGZpbmQgYSBuZXcgcHNldWRvY3VtYWNrLiBUaGlzIGZsYWcKLQkJ
CQkJICogaXMgc2V0IGFmdGVyIGEgbmV3IHBzZXVkby1jdW1hY2sKLQkJCQkJICogaGFzIGJlZW4g
cmVjZWl2ZWQgYW5kIGluZGljYXRlcwotCQkJCQkgKiB0aGF0IHRoZSBzZW5kZXIgc2hvdWxkIGZp
bmQgdGhlCi0JCQkJCSAqIG5leHQgcHNldWRvLWN1bWFjayBleHBlY3RlZCBmb3IKLQkJCQkJICog
dGhpcyBkZXN0aW5hdGlvbiAqLwotCXVpbnQ4X3QgZmluZF9ydHhfcHNldWRvX2N1bWFjazsJLyog
Q01UIENVQ3YyIGFsZ29yaXRobS4gRmxhZyB1c2VkIHRvCi0JCQkJCSAqIGZpbmQgYSBuZXcgcnR4
LXBzZXVkb2N1bWFjay4gVGhpcwotCQkJCQkgKiBmbGFnIGlzIHNldCBhZnRlciBhIG5ldwotCQkJ
CQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNlaXZlZAotCQkJCQkgKiBhbmQgaW5k
aWNhdGVzIHRoYXQgdGhlIHNlbmRlcgotCQkJCQkgKiBzaG91bGQgZmluZCB0aGUgbmV4dAotCQkJ
CQkgKiBydHgtcHNldWRvLWN1bWFjayBleHBlY3RlZCBmb3IgdGhpcwotCQkJCQkgKiBkZXN0aW5h
dGlvbiAqLwotCXVpbnQ4X3QgbmV3X3BzZXVkb19jdW1hY2s7CS8qIENNVCBDVUMgYWxnb3JpdGht
LiBGbGFnIHVzZWQgdG8KLQkJCQkJICogaW5kaWNhdGUgaWYgYSBuZXcgcHNldWRvLWN1bWFjayBv
cgotCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNlaXZlZCAqLwotCXVpbnQ4
X3Qgd2luZG93X3Byb2JlOwkJLyogRG9pbmcgYSB3aW5kb3cgcHJvYmU/ICovCi0JdWludDhfdCBS
VE9fbWVhc3VyZWQ7CQkvKiBIYXZlIHdlIGRvbmUgdGhlIGZpcnN0IG1lYXN1cmUgKi8KLQl1aW50
OF90IGxhc3RfaHNfdXNlZDsJLyogaW5kZXggaW50byB0aGUgbGFzdCBIUyB0YWJsZSBlbnRyeSB3
ZSB1c2VkICovCi0JdWludDhfdCBsYW5fdHlwZTsKLQl1aW50OF90IHJ0b19uZWVkZWQ7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQl1aW50MzJfdCBmbG93aWQ7Ci0JdWludDhfdCBmbG93dHlw
ZTsKLSNlbmRpZgotfTsKLQotCi1zdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rcmVjIHsKLQl1aW50MzJf
dCB0c247CQkvKiB0aGUgVFNOIG9mIHRoaXMgdHJhbnNtaXQgKi8KLQl1aW50MzJfdCBtaWQ7CQkv
KiB0aGUgbWVzc2FnZSBpZGVudGlmaWVyIG9mIHRoaXMgdHJhbnNtaXQgKi8KLQl1aW50MTZfdCBz
aWQ7CQkvKiB0aGUgc3RyZWFtIG51bWJlciBvZiB0aGlzIGd1eSAqLwotCXVpbnQzMl90IHBwaWQ7
Ci0JdWludDMyX3QgY29udGV4dDsJLyogZnJvbSBzZW5kICovCi0JdWludDMyX3QgY3duZF9hdF9z
ZW5kOwotCS8qCi0JICogcGFydCBvZiB0aGUgSGlnaGVzdCBzYWNrZWQgYWxnb3JpdGhtIHRvIGJl
IGFibGUgdG8gc3Ryb2tlIGNvdW50cwotCSAqIG9uIG9uZXMgdGhhdCBhcmUgRlInZC4KLQkgKi8K
LQl1aW50MzJfdCBmYXN0X3JldHJhbl90c247CS8qIHNlbmRpbmdfc2VxIGF0IHRoZSB0aW1lIG9m
IEZSICovCi0Jc3RydWN0IHRpbWV2YWwgdGltZXRvZHJvcDsJLyogdGltZSB3ZSBkcm9wIGl0IGZy
b20gcXVldWUgKi8KLQl1aW50MzJfdCBmc247CQkJLyogRnJhZ21lbnQgU2VxdWVuY2UgTnVtYmVy
ICovCi0JdWludDhfdCBkb2luZ19mYXN0X3JldHJhbnNtaXQ7Ci0JdWludDhfdCByY3ZfZmxhZ3M7
CS8qIGZsYWdzIHB1bGxlZCBmcm9tIGRhdGEgY2h1bmsgb24gaW5ib3VuZCBmb3IKLQkJCQkgKiBv
dXRib3VuZCBob2xkcyBzZW5kaW5nIGZsYWdzIGZvciBQUi1TQ1RQLgotCQkJCSAqLwotCXVpbnQ4
X3Qgc3RhdGVfZmxhZ3M7Ci0JdWludDhfdCBjaHVua193YXNfcmV2b2tlZDsKLQl1aW50OF90IGZ3
ZF90c25fY250OwotfTsKLQotVEFJTFFfSEVBRChzY3RwY2h1bmtfbGlzdGhlYWQsIHNjdHBfdG1p
dF9jaHVuayk7Ci0KLS8qIFRoZSBsb3dlciBieXRlIGlzIHVzZWQgdG8gZW51bWVyYXRlIFBSX1ND
VFAgcG9saWNpZXMgKi8KLSNkZWZpbmUgQ0hVTktfRkxBR1NfUFJfU0NUUF9UVEwJICAgICAgICBT
Q1RQX1BSX1NDVFBfVFRMCi0jZGVmaW5lIENIVU5LX0ZMQUdTX1BSX1NDVFBfQlVGCSAgICAgICAg
U0NUUF9QUl9TQ1RQX0JVRgotI2RlZmluZSBDSFVOS19GTEFHU19QUl9TQ1RQX1JUWCAgICAgICAg
IFNDVFBfUFJfU0NUUF9SVFgKLQotLyogVGhlIHVwcGVyIGJ5dGUgaXMgdXNlZCBhcyBhIGJpdCBt
YXNrICovCi0jZGVmaW5lIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LCSAgICAgICAgMHgwMTAwCi0K
LXN0cnVjdCBjaGtfaWQgewotCXVpbnQ4X3QgaWQ7Ci0JdWludDhfdCBjYW5fdGFrZV9kYXRhOwot
fTsKLQotCi1zdHJ1Y3Qgc2N0cF90bWl0X2NodW5rIHsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzY3Rw
X2RhdGFfY2h1bmtyZWMgZGF0YTsKLQkJc3RydWN0IGNoa19pZCBjaHVua19pZDsKLQl9ICAgICBy
ZWM7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CS8qIGJwIHRvIGFzb2MgdGhpcyBi
ZWxvbmdzIHRvICovCi0Jc3RydWN0IHRpbWV2YWwgc2VudF9yY3ZfdGltZTsJLyogZmlsbGVkIGlu
IGlmIFJUVCBiZWluZyBjYWxjdWxhdGVkICovCi0Jc3RydWN0IG1idWYgKmRhdGE7CS8qIHBvaW50
ZXIgdG8gbWJ1ZiBjaGFpbiBvZiBkYXRhICovCi0Jc3RydWN0IG1idWYgKmxhc3RfbWJ1ZjsJLyog
cG9pbnRlciB0byBsYXN0IG1idWYgaW4gY2hhaW4gKi8KLQlzdHJ1Y3Qgc2N0cF9uZXRzICp3aG9U
bzsKLQlUQUlMUV9FTlRSWShzY3RwX3RtaXRfY2h1bmspIHNjdHBfbmV4dDsJLyogbmV4dCBsaW5r
ICovCi0JaW50MzJfdCBzZW50OwkJLyogdGhlIHNlbmQgc3RhdHVzICovCi0JdWludDE2X3Qgc25k
X2NvdW50OwkvKiBudW1iZXIgb2YgdGltZXMgSSBzZW50ICovCi0JdWludDE2X3QgZmxhZ3M7CQkv
KiBmbGFncywgc3VjaCBhcyBGUkFHTUVOVF9PSyAqLwotCXVpbnQxNl90IHNlbmRfc2l6ZTsKLQl1
aW50MTZfdCBib29rX3NpemU7Ci0JdWludDE2X3QgbWJjbnQ7Ci0JdWludDE2X3QgYXV0aF9rZXlp
ZDsKLQl1aW50OF90IGhvbGRzX2tleV9yZWY7CS8qIGZsYWcgaWYgYXV0aCBrZXlpZCByZWZjb3Vu
dCBpcyBoZWxkICovCi0JdWludDhfdCBwYWRfaW5wbGFjZTsKLQl1aW50OF90IGRvX3J0dDsKLQl1
aW50OF90IGJvb2tfc2l6ZV9zY2FsZTsKLQl1aW50OF90IG5vX2ZyX2FsbG93ZWQ7Ci0JdWludDhf
dCBjb3B5X2J5X3JlZjsKLQl1aW50OF90IHdpbmRvd19wcm9iZTsKLX07Ci0KLXN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkIHsJLyogc2luZm8gc3RydWN0dXJlIFBsdXNlIG1vcmUgKi8KLQl1aW50
MTZfdCBzaW5mb19zdHJlYW07CS8qIG9mZiB0aGUgd2lyZSAqLwotCXVpbnQxNl90IHNpbmZvX2Zs
YWdzOwkvKiBTQ1RQX1VOT1JERVJFRCBmcm9tIHdpcmUgdXNlIFNDVFBfRU9GIGZvcgotCQkJCSAq
IEVPUiAqLwotCXVpbnQzMl90IHNpbmZvX3BwaWQ7CS8qIG9mZiB0aGUgd2lyZSAqLwotCXVpbnQz
Ml90IHNpbmZvX2NvbnRleHQ7CS8qIHBpY2sgdGhpcyB1cCBmcm9tIGFzc29jIGRlZiBjb250ZXh0
PyAqLwotCXVpbnQzMl90IHNpbmZvX3RpbWV0b2xpdmU7CS8qIG5vdCB1c2VkIGJ5IGtlcm5lbCAq
LwotCXVpbnQzMl90IHNpbmZvX3RzbjsJLyogVXNlIHRoaXMgaW4gcmVhc3NlbWJseSBhcyBmaXJz
dCBUU04gKi8KLQl1aW50MzJfdCBzaW5mb19jdW10c247CS8qIFVzZSB0aGlzIGluIHJlYXNzZW1i
bHkgYXMgbGFzdCBUU04gKi8KLQlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7CS8qIG91ciBh
c3NvYyBpZCAqLwotCS8qIE5vbiBzaW5mbyBzdHVmZiAqLwotCXVpbnQzMl90IG1pZDsJCS8qIEZy
YWdtZW50IEluZGV4ICovCi0JdWludDMyX3QgbGVuZ3RoOwkvKiBsZW5ndGggb2YgZGF0YSAqLwot
CXVpbnQzMl90IGhlbGRfbGVuZ3RoOwkvKiBsZW5ndGggaGVsZCBpbiBzYiAqLwotCXVpbnQzMl90
IHRvcF9mc247CS8qIEhpZ2hlc3QgRlNOIGluIHF1ZXVlICovCi0JdWludDMyX3QgZnNuX2luY2x1
ZGVkOyAgLyogSGlnaGVzdCBGU04gaW4gKmRhdGEgcG9ydGlvbiAqLwotCXN0cnVjdCBzY3RwX25l
dHMgKndob0Zyb207CS8qIHdoZXJlIGl0IGNhbWUgZnJvbSAqLwotCXN0cnVjdCBtYnVmICpkYXRh
OwkvKiBmcm9udCBvZiB0aGUgbWJ1ZiBjaGFpbiBvZiBkYXRhIHdpdGgKLQkJCQkgKiBQS1RfSERS
ICovCi0Jc3RydWN0IG1idWYgKnRhaWxfbWJ1ZjsJLyogdXNlZCBmb3IgbXVsdGktcGFydCBkYXRh
ICovCi0Jc3RydWN0IG1idWYgKmF1eF9kYXRhOyAgLyogdXNlZCB0byBob2xkL2NhY2hlICBjb250
cm9sIGlmIG8vcyBkb2VzIG5vdCB0YWtlIGl0IGZyb20gdXMgKi8KLQlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7CS8qIGFzc29jLCB1c2VkIGZvciB3aW5kb3cgdXBkYXRlICovCi0JVEFJTFFfRU5UUlko
c2N0cF9xdWV1ZWRfdG9fcmVhZCkgbmV4dDsKLQlUQUlMUV9FTlRSWShzY3RwX3F1ZXVlZF90b19y
ZWFkKSBuZXh0X2luc3RybTsKLQlzdHJ1Y3Qgc2N0cGNodW5rX2xpc3RoZWFkIHJlYXNtOwotCXVp
bnQxNl90IHBvcnRfZnJvbTsKLQl1aW50MTZfdCBzcGVjX2ZsYWdzOwkvKiBGbGFncyB0byBob2xk
IHRoZSBub3RpZmljYXRpb24gZmllbGQgKi8KLQl1aW50OF90ICBkb19ub3RfcmVmX3N0Y2I7Ci0J
dWludDhfdCAgZW5kX2FkZGVkOwotCXVpbnQ4X3QgIHBkYXBpX2Fib3J0ZWQ7Ci0JdWludDhfdCAg
cGRhcGlfc3RhcnRlZDsKLQl1aW50OF90ICBzb21lX3Rha2VuOwotCXVpbnQ4X3QgIGxhc3RfZnJh
Z19zZWVuOwotCXVpbnQ4X3QgIGZpcnN0X2ZyYWdfc2VlbjsKLQl1aW50OF90ICBvbl9yZWFkX3E7
Ci0JdWludDhfdCAgb25fc3RybV9xOwotfTsKLQotI2RlZmluZSBTQ1RQX09OX09SREVSRUQgMQot
I2RlZmluZSBTQ1RQX09OX1VOT1JERVJFRCAyCi0KLS8qIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgd2ls
bCBiZSBvbiB0aGUgb3V0Ym91bmQKLSAqIHN0cmVhbSBxdWV1ZXMuIERhdGEgd2lsbCBiZSBwdWxs
ZWQgb2ZmIGZyb20KLSAqIHRoZSBmcm9udCBvZiB0aGUgbWJ1ZiBkYXRhIGFuZCBjaHVuay1pZmll
ZAotICogYnkgdGhlIG91dHB1dCByb3V0aW5lcy4gV2Ugd2lsbCBjdXN0b20KLSAqIGZpdCBldmVy
eSBjaHVuayB3ZSBwdWxsIHRvIHRoZSBzZW5kL3NlbnQKLSAqIHF1ZXVlIHRvIG1ha2UgdXAgdGhl
IG5leHQgZnVsbCBwYWNrZXQKLSAqIGlmIHdlIGNhbi4gQW4gZW50cnkgY2Fubm90IGJlIHJlbW92
ZWQKLSAqIGZyb20gdGhlIHN0cmVhbV9vdXQgcXVldWUgdW50aWwKLSAqIHRoZSBtc2dfaXNfY29t
cGxldGUgZmxhZyBpcyBzZXQuIFRoaXMKLSAqIG1lYW5zIGF0IHRpbWVzIGRhdGEvdGFpbF9tYnVm
IE1JR0hUCi0gKiBiZSBOVUxMLi4gSWYgdGhhdCBvY2N1cnMgaXQgaGFwcGVucwotICogZm9yIG9u
ZSBvZiB0d28gcmVhc29ucy4gRWl0aGVyIHRoZSB1c2VyCi0gKiBpcyBibG9ja2VkIG9uIGEgc2Vu
ZCgpIGNhbGwgYW5kIGhhcyBub3QKLSAqIGF3b2tlbiB0byBjb3B5IG1vcmUgZGF0YSBkb3duLi4u
IE9SCi0gKiB0aGUgdXNlciBpcyBpbiB0aGUgZXhwbGljdCBNU0dfRU9SIG1vZGUKLSAqIGFuZCB3
cm90ZSBzb21lIGRhdGEsIGJ1dCBoYXMgbm90IGNvbXBsZXRlZAotICogc2VuZGluZy4KLSAqLwot
c3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgewotCXN0cnVjdCBtYnVmICpkYXRhOwot
CXN0cnVjdCBtYnVmICp0YWlsX21idWY7Ci0Jc3RydWN0IHRpbWV2YWwgdHM7Ci0Jc3RydWN0IHNj
dHBfbmV0cyAqbmV0OwotCVRBSUxRX0VOVFJZIChzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKSBu
ZXh0OwotCVRBSUxRX0VOVFJZIChzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKSBzc19uZXh0Owot
CXVpbnQzMl90IGZzbjsKLQl1aW50MzJfdCBsZW5ndGg7Ci0JdWludDMyX3QgdGltZXRvbGl2ZTsK
LQl1aW50MzJfdCBwcGlkOwotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWludDE2X3Qgc2luZm9fZmxh
Z3M7Ci0JdWludDE2X3Qgc2lkOwotCXVpbnQxNl90IGFjdF9mbGFnczsKLQl1aW50MTZfdCBhdXRo
X2tleWlkOwotCXVpbnQ4X3QgIGhvbGRzX2tleV9yZWY7Ci0JdWludDhfdCAgbXNnX2lzX2NvbXBs
ZXRlOwotCXVpbnQ4X3QgIHNvbWVfdGFrZW47Ci0JdWludDhfdCAgc2VuZGVyX2FsbF9kb25lOwot
CXVpbnQ4X3QgIHB1dF9sYXN0X291dDsKLQl1aW50OF90ICBkaXNjYXJkX3Jlc3Q7Ci19OwotCi0v
KgotICogdGhpcyBzdHJ1Y3QgY29udGFpbnMgaW5mbyB0aGF0IGlzIHVzZWQgdG8gdHJhY2sgaW5i
b3VuZCBzdHJlYW0gZGF0YSBhbmQKLSAqIGhlbHAgd2l0aCBvcmRlcmluZy4KLSAqLwotVEFJTFFf
SEVBRChzY3Rwd2hlZWx1bnJlbF9saXN0aGVhZCwgc2N0cF9zdHJlYW1faW4pOwotc3RydWN0IHNj
dHBfc3RyZWFtX2luIHsKLQlzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCBpbnF1ZXVlOwotCXN0cnVjdCBz
Y3RwX3JlYWRoZWFkIHVub19pbnF1ZXVlOwotCXVpbnQzMl90IGxhc3RfbWlkX2RlbGl2ZXJlZDsJ
LyogdXNlZCBmb3IgcmUtb3JkZXIgKi8KLQl1aW50MTZfdCBzaWQ7Ci0JdWludDhfdCAgZGVsaXZl
cnlfc3RhcnRlZDsKLQl1aW50OF90ICBwZF9hcGlfc3RhcnRlZDsKLX07Ci0KLVRBSUxRX0hFQUQo
c2N0cHdoZWVsX2xpc3RoZWFkLCBzY3RwX3N0cmVhbV9vdXQpOwotVEFJTFFfSEVBRChzY3RwbGlz
dF9saXN0aGVhZCwgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyk7Ci0KLQotLyogUm91bmQtcm9i
aW4gc2NoZWR1bGVycyAqLwotc3RydWN0IHNzX3JyIHsKLQkvKiBuZXh0IGxpbmsgaW4gd2hlZWwg
Ki8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5leHRfc3Bva2U7Ci19OwotCi0vKiBQ
cmlvcml0eSBzY2hlZHVsZXIgKi8KLXN0cnVjdCBzc19wcmlvIHsKLQkvKiBuZXh0IGxpbmsgaW4g
d2hlZWwgKi8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5leHRfc3Bva2U7Ci0JLyog
cHJpb3JpdHkgaWQgKi8KLQl1aW50MTZfdCBwcmlvcml0eTsKLX07Ci0KLS8qIEZhaXIgQmFuZHdp
ZHRoIHNjaGVkdWxlciAqLwotc3RydWN0IHNzX2ZiIHsKLQkvKiBuZXh0IGxpbmsgaW4gd2hlZWwg
Ki8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5leHRfc3Bva2U7Ci0JLyogc3RvcmVz
IG1lc3NhZ2Ugc2l6ZSAqLwotCWludDMyX3Qgcm91bmRzOwotfTsKLQotLyoKLSAqIFRoaXMgdW5p
b24gaG9sZHMgYWxsIGRhdGEgbmVjZXNzYXJ5IGZvcgotICogZGlmZmVyZW50IHN0cmVhbSBzY2hl
ZHVsZXJzLgotICovCi1zdHJ1Y3Qgc2NoZWR1bGluZ19kYXRhIHsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpsb2NrZWRfb25fc2VuZGluZzsKLQkvKiBjaXJjdWxhciBsb29raW5nIGZvciBvdXRw
dXQgc2VsZWN0aW9uICovCi0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqbGFzdF9vdXRfc3RyZWFt
OwotCXVuaW9uIHsKLQkJc3RydWN0IHNjdHB3aGVlbF9saXN0aGVhZCB3aGVlbDsKLQkJc3RydWN0
IHNjdHBsaXN0X2xpc3RoZWFkIGxpc3Q7Ci0JfSBvdXQ7Ci19OwotCi0vKgotICogVGhpcyB1bmlv
biBob2xkcyBhbGwgcGFyYW1ldGVycyBwZXIgc3RyZWFtCi0gKiBuZWNlc3NhcnkgZm9yIGRpZmZl
cmVudCBzdHJlYW0gc2NoZWR1bGVycy4KLSAqLwotdW5pb24gc2NoZWR1bGluZ19wYXJhbWV0ZXJz
IHsKLQlzdHJ1Y3Qgc3NfcnIgcnI7Ci0Jc3RydWN0IHNzX3ByaW8gcHJpbzsKLQlzdHJ1Y3Qgc3Nf
ZmIgZmI7Ci19OwotCi0vKiBTdGF0ZXMgZm9yIG91dGdvaW5nIHN0cmVhbXMgKi8KLSNkZWZpbmUg
U0NUUF9TVFJFQU1fQ0xPU0VEICAgICAgICAgICAweDAwCi0jZGVmaW5lIFNDVFBfU1RSRUFNX09Q
RU5JTkcgICAgICAgICAgMHgwMQotI2RlZmluZSBTQ1RQX1NUUkVBTV9PUEVOICAgICAgICAgICAg
IDB4MDIKLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORyAgICAweDAzCi0jZGVmaW5l
IFNDVFBfU1RSRUFNX1JFU0VUX0lOX0ZMSUdIVCAgMHgwNAotCi0jZGVmaW5lIFNDVFBfTUFYX1NU
UkVBTVNfQVRfT05DRV9SRVNFVCAyMDAKLQotLyogVGhpcyBzdHJ1Y3QgaXMgdXNlZCB0byB0cmFj
ayB0aGUgdHJhZmZpYyBvbiBvdXRib3VuZCBzdHJlYW1zICovCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0IHsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1oZWFkIG91dHF1ZXVlOwotCXVuaW9uIHNjaGVkdWxp
bmdfcGFyYW1ldGVycyBzc19wYXJhbXM7Ci0JdWludDMyX3QgY2h1bmtzX29uX3F1ZXVlczsgICAg
ICAvKiBzZW5kIHF1ZXVlIGFuZCBzZW50IHF1ZXVlICovCi0jaWYgZGVmaW5lZChTQ1RQX0RFVEFJ
TEVEX1NUUl9TVEFUUykKLQl1aW50MzJfdCBhYmFuZG9uZWRfdW5zZW50W1NDVFBfUFJfU0NUUF9N
QVggKyAxXTsKLQl1aW50MzJfdCBhYmFuZG9uZWRfc2VudFtTQ1RQX1BSX1NDVFBfTUFYICsgMV07
Ci0jZWxzZQotCS8qIE9ubHkgdGhlIGFnZ3JlZ2F0aW9uICovCi0JdWludDMyX3QgYWJhbmRvbmVk
X3Vuc2VudFsxXTsKLQl1aW50MzJfdCBhYmFuZG9uZWRfc2VudFsxXTsKLSNlbmRpZgotCS8qIEZv
ciBhc3NvY2lhdGlvbnMgdXNpbmcgREFUQSBjaHVua3MsIHRoZSBsb3dlciAxNi1iaXQgb2YKLQkg
KiBuZXh0X21pZF9vcmRlcmVkIGFyZSB1c2VkIGFzIHRoZSBuZXh0IFNTTi4KLQkgKi8KLQl1aW50
MzJfdCBuZXh0X21pZF9vcmRlcmVkOwotCXVpbnQzMl90IG5leHRfbWlkX3Vub3JkZXJlZDsKLQl1
aW50MTZfdCBzaWQ7Ci0JdWludDhfdCBsYXN0X21zZ19pbmNvbXBsZXRlOwotCXVpbnQ4X3Qgc3Rh
dGU7Ci19OwotCi0vKiB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFkZHJlc3NlcyB5ZXQgdG8g
dHJ5IHRvIGFkZC9kZWxldGUgKi8KLVRBSUxRX0hFQUQoc2N0cF9hc2NvbmZfYWRkcmhlYWQsIHNj
dHBfYXNjb25mX2FkZHIpOwotc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgewotCVRBSUxRX0VOVFJZ
KHNjdHBfYXNjb25mX2FkZHIpIG5leHQ7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0g
YXA7Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7CS8qIHNhdmUgdGhlIGlmYSBmb3IgYWRkL2RlbCBp
cCAqLwotCXVpbnQ4X3Qgc2VudDsJCS8qIGhhcyB0aGlzIGJlZW4gc2VudCB5ZXQ/ICovCi0JdWlu
dDhfdCBzcGVjaWFsX2RlbDsJLyogbm90IHRvIGJlIHVzZWQgaW4gbG9va3VwICovCi19OwotCi1z
dHJ1Y3Qgc2N0cF9zY29waW5nIHsKLQl1aW50OF90IGlwdjRfYWRkcl9sZWdhbDsKLQl1aW50OF90
IGlwdjZfYWRkcl9sZWdhbDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JdWludDhfdCBj
b25uX2FkZHJfbGVnYWw7Ci0jZW5kaWYKLQl1aW50OF90IGxvb3BiYWNrX3Njb3BlOwotCXVpbnQ4
X3QgaXB2NF9sb2NhbF9zY29wZTsKLQl1aW50OF90IGxvY2FsX3Njb3BlOwotCXVpbnQ4X3Qgc2l0
ZV9zY29wZTsKLX07Ci0KLSNkZWZpbmUgU0NUUF9UU05fTE9HX1NJWkUgNDAKLQotc3RydWN0IHNj
dHBfdHNuX2xvZyB7Ci0Jdm9pZCAgICAgKnN0Y2I7Ci0JdWludDMyX3QgdHNuOwotCXVpbnQzMl90
IHNlcTsKLQl1aW50MTZfdCBzdHJtOwotCXVpbnQxNl90IHN6OwotCXVpbnQxNl90IGZsZ3M7Ci0J
dWludDE2X3QgaW5fcG9zOwotCXVpbnQxNl90IGluX291dDsKLQl1aW50MTZfdCByZXN2OwotfTsK
LQotI2RlZmluZSBTQ1RQX0ZTX1NQRUNfTE9HX1NJWkUgMjAwCi1zdHJ1Y3Qgc2N0cF9mc19zcGVj
X2xvZyB7Ci0JdWludDMyX3Qgc2VudDsKLQl1aW50MzJfdCB0b3RhbF9mbGlnaHQ7Ci0JdWludDMy
X3QgdHNuOwotCXVpbnQxNl90IGJvb2s7Ci0JdWludDhfdCBpbmNyOwotCXVpbnQ4X3QgZGVjcjsK
LX07Ci0KLS8qIFRoaXMgc3RydWN0IGlzIGhlcmUgdG8gY3V0IG91dCB0aGUgY29tcGF0aWFiaWx0
eQotICogcGFkIHRoYXQgYnVsa3MgdXAgYm90aCB0aGUgaW5wIGFuZCBzdGNiLiBUaGUgbm9uCi0g
KiBwYWQgcG9ydGlvbiBNVVNUIHN0YXkgaW4gY29tcGxldGUgc3luYyB3aXRoCi0gKiBzY3RwX3Nu
ZHJjdmluZm8uLi4gaS5lLiBpZiBzaW5mb194eHh4IGlzIGFkZGVkCi0gKiB0aGlzIG11c3QgYmUg
ZG9uZSBoZXJlIHRvby4KLSAqLwotc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmluZm8gewotCXVp
bnQxNl90IHNpbmZvX3N0cmVhbTsKLQl1aW50MTZfdCBzaW5mb19zc247Ci0JdWludDE2X3Qgc2lu
Zm9fZmxhZ3M7Ci0JdWludDMyX3Qgc2luZm9fcHBpZDsKLQl1aW50MzJfdCBzaW5mb19jb250ZXh0
OwotCXVpbnQzMl90IHNpbmZvX3RpbWV0b2xpdmU7Ci0JdWludDMyX3Qgc2luZm9fdHNuOwotCXVp
bnQzMl90IHNpbmZvX2N1bXRzbjsKLQlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7Ci0JdWlu
dDE2X3Qgc2luZm9fa2V5bnVtYmVyOwotCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92YWxpZDsK
LX07Ci0KLS8qCi0gKiBKUlMgLSBTdHJ1Y3R1cmUgdG8gaG9sZCBmdW5jdGlvbiBwb2ludGVycyB0
byB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlCi0gKiBmb3IgY29uZ2VzdGlvbiBjb250cm9sLgot
ICovCi0KLXN0cnVjdCBzY3RwX2NjX2Z1bmN0aW9ucyB7Ci0Jdm9pZCAoKnNjdHBfc2V0X2luaXRp
YWxfY2NfcGFyYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0
KTsKLQl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrKShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGFjY3VtX21vdmVkICxpbnQgcmVuZWdlZF9hbGwsIGludCB3aWxsX2V4aXQpOwotCXZvaWQg
KCpzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYpKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KTsKLQl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mcikoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAotCQkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwot
CXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQpKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCk7Ci0Jdm9pZCAoKnNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfZWNuX2VjaG8pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9zdCk7Ci0Jdm9pZCAoKnNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQpKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayAq
Y3AsCi0JCQl1aW50MzJfdCAqYm90dGxlX2J3LCB1aW50MzJfdCAqb25fcXVldWUpOwotCXZvaWQg
KCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgYnVyc3RfbGltaXQpOwotCXZvaWQgKCpzY3Rw
X2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV90c25f
YWNrbm93bGVkZ2VkKShzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0JCQlzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICopOwotCXZvaWQgKCpzY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMpKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCk7Ci0Jdm9pZCAo
KnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jfc2Fjaykoc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQlpbnQgKCpzY3RwX2N3bmRfc29ja2V0X29wdGlv
bikoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc2V0LCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24g
Kik7Ci0Jdm9pZCAoKnNjdHBfcnR0X2NhbGN1bGF0ZWQpKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc2N0cF9uZXRzICosIHN0cnVjdCB0aW1ldmFsICopOwotfTsKLQotLyoKLSAqIFJTIC0gU3Ry
dWN0dXJlIHRvIGhvbGQgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIGZ1bmN0aW9ucyByZXNwb25z
aWJsZQotICogZm9yIHN0cmVhbSBzY2hlZHVsaW5nLgotICovCi1zdHJ1Y3Qgc2N0cF9zc19mdW5j
dGlvbnMgewotCXZvaWQgKCpzY3RwX3NzX2luaXQpKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCWludCBob2xkc19sb2NrKTsKLQl2b2lkICgq
c2N0cF9zc19jbGVhcikoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKLQkJaW50IGNsZWFyX3ZhbHVlcywgaW50IGhvbGRzX2xvY2spOwotCXZvaWQg
KCpzY3RwX3NzX2luaXRfc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKndpdGhfc3RycSk7Ci0J
dm9pZCAoKnNjdHBfc3NfYWRkX3RvX3N0cmVhbSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3Ry
cSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCBpbnQgaG9sZHNfbG9jayk7
Ci0JaW50ICgqc2N0cF9zc19pc19lbXB0eSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7Ci0Jdm9pZCAoKnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3Ry
ZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVl
dWVfcGVuZGluZyAqc3AsIGludCBob2xkc19sb2NrKTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
KiAoKnNjdHBfc3Nfc2VsZWN0X3N0cmVhbSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKLQl2b2lk
ICgqc2N0cF9zc19zY2hlZHVsZWQpKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0LAotCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqc3RycSwgaW50IG1vdmVkX2hvd19tdWNoKTsKLQl2b2lkICgqc2N0cF9zc19w
YWNrZXRfZG9uZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
Ci0JCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKLQlpbnQgKCpzY3RwX3NzX2dldF92
YWx1ZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgdWludDE2X3QgKnZhbHVlKTsKLQlp
bnQgKCpzY3RwX3NzX3NldF92YWx1ZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgdWlu
dDE2X3QgdmFsdWUpOwotCWludCAoKnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOwotfTsK
LQotLyogdXNlZCB0byBzYXZlIEFTQ09ORiBjaHVua3MgZm9yIHJldHJhbnNtaXNzaW9uICovCi1U
QUlMUV9IRUFEKHNjdHBfYXNjb25mX2hlYWQsIHNjdHBfYXNjb25mKTsKLXN0cnVjdCBzY3RwX2Fz
Y29uZiB7Ci0JVEFJTFFfRU5UUlkoc2N0cF9hc2NvbmYpIG5leHQ7Ci0JdWludDMyX3Qgc2VyaWFs
X251bWJlcjsKLQl1aW50MTZfdCBzbmRfY291bnQ7Ci0Jc3RydWN0IG1idWYgKmRhdGE7Ci0JdWlu
dDE2X3QgbGVuOwotfTsKLQotLyogdXNlZCB0byBzYXZlIEFTQ09ORi1BQ0sgY2h1bmtzIGZvciBy
ZXRyYW5zbWlzc2lvbiAqLwotVEFJTFFfSEVBRChzY3RwX2FzY29uZl9hY2toZWFkLCBzY3RwX2Fz
Y29uZl9hY2spOwotc3RydWN0IHNjdHBfYXNjb25mX2FjayB7Ci0JVEFJTFFfRU5UUlkoc2N0cF9h
c2NvbmZfYWNrKSBuZXh0OwotCXVpbnQzMl90IHNlcmlhbF9udW1iZXI7Ci0Jc3RydWN0IHNjdHBf
bmV0cyAqbGFzdF9zZW50X3RvOwotCXN0cnVjdCBtYnVmICpkYXRhOwotCXVpbnQxNl90IGxlbjsK
LX07Ci0KLS8qCi0gKiBIZXJlIHdlIGhhdmUgaW5mb3JtYXRpb24gYWJvdXQgZWFjaCBpbmRpdmlk
dWFsIGFzc29jaWF0aW9uIHRoYXQgd2UgdHJhY2suCi0gKiBXZSBwcm9iYWJseSBpbiBwcm9kdWN0
aW9uIHdvdWxkIGJlIG1vcmUgZHluYW1pYy4gQnV0IGZvciBlYXNlIG9mCi0gKiBpbXBsZW1lbnRh
dGlvbiB3ZSB3aWxsIGhhdmUgYSBmaXhlZCBhcnJheSB0aGF0IHdlIGh1bnQgZm9yIGluIGEgbGlu
ZWFyCi0gKiBmYXNoaW9uLgotICovCi1zdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiB7Ci0JLyogYXNz
b2NpYXRpb24gc3RhdGUgKi8KLQlpbnQgc3RhdGU7Ci0KLQkvKiBxdWV1ZSBvZiBwZW5kaW5nIGFk
ZHJzIHRvIGFkZC9kZWxldGUgKi8KLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcmhlYWQgYXNjb25m
X3F1ZXVlOwotCi0Jc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwkvKiB0aW1lIHdlIGVudGVy
ZWQgc3RhdGUgKi8KLQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2xhc3RfcmN2ZDsKLQlzdHJ1Y3QgdGlt
ZXZhbCB0aW1lX2xhc3Rfc2VudDsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2xhc3Rfc2F0X2FkdmFu
Y2U7Ci0Jc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmluZm8gZGVmX3NlbmQ7Ci0KLQkvKiB0aW1l
cnMgYW5kIHN1Y2ggKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBkYWNrX3RpbWVyOwkJLyogRGVsYXll
ZCBhY2sgdGltZXIgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBhc2NvbmZfdGltZXI7CQkvKiBhc2Nv
bmYgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBzdHJyZXNldF90aW1lcjsJLyogc3RyZWFtIHJlc2V0
ICovCi0Jc3RydWN0IHNjdHBfdGltZXIgc2h1dF9ndWFyZF90aW1lcjsJLyogc2h1dGRvd24gZ3Vh
cmQgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBhdXRvY2xvc2VfdGltZXI7CS8qIGF1dG9tYXRpYyBj
bG9zZSB0aW1lciAqLwotCXN0cnVjdCBzY3RwX3RpbWVyIGRlbGF5ZWRfZXZlbnRfdGltZXI7CS8q
IHRpbWVyIGZvciBkZWxheWVkIGV2ZW50cyAqLwotCXN0cnVjdCBzY3RwX3RpbWVyIGRlbGV0ZV9w
cmltX3RpbWVyOwkvKiBkZWxldGluZyBwcmltYXJ5IGRzdCAqLwotCi0JLyogbGlzdCBvZiByZXN0
cmljdGVkIGxvY2FsIGFkZHJlc3NlcyAqLwotCXN0cnVjdCBzY3RwbGFkZHIgc2N0cF9yZXN0cmlj
dGVkX2FkZHJzOwotCi0JLyogbGFzdCBsb2NhbCBhZGRyZXNzIHBlbmRpbmcgZGVsZXRpb24gKHdh
aXRpbmcgZm9yIGFuIGFkZHJlc3MgYWRkKSAqLwotCXN0cnVjdCBzY3RwX2lmYSAqYXNjb25mX2Fk
ZHJfZGVsX3BlbmRpbmc7Ci0JLyogRGVsZXRlZCBwcmltYXJ5IGRlc3RpbmF0aW9uICh1c2VkIHRv
IHN0b3AgdGltZXIpICovCi0Jc3RydWN0IHNjdHBfbmV0cyAqZGVsZXRlZF9wcmltYXJ5OwotCi0J
c3RydWN0IHNjdHBuZXRsaXN0aGVhZCBuZXRzOwkJLyogcmVtb3RlIGFkZHJlc3MgbGlzdCAqLwot
Ci0JLyogRnJlZSBjaHVuayBsaXN0ICovCi0Jc3RydWN0IHNjdHBjaHVua19saXN0aGVhZCBmcmVl
X2NodW5rczsKLQotCS8qIENvbnRyb2wgY2h1bmsgcXVldWUgKi8KLQlzdHJ1Y3Qgc2N0cGNodW5r
X2xpc3RoZWFkIGNvbnRyb2xfc2VuZF9xdWV1ZTsKLQotCS8qIEFTQ09ORiBjaHVuayBxdWV1ZSAq
LwotCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgYXNjb25mX3NlbmRfcXVldWU7Ci0KLQkvKgot
CSAqIE9uY2UgYSBUU04gaGl0cyB0aGUgd2lyZSBpdCBpcyBtb3ZlZCB0byB0aGUgc2VudF9xdWV1
ZS4gV2UKLQkgKiBtYWludGFpbiB0d28gY291bnRzIGhlcmUgKGRvbid0IGtub3cgaWYgYW55IGJ1
dCByZXRyYW5fY250IGlzCi0JICogbmVlZGVkKS4gVGhlIGlkZWEgaXMgdGhhdCB0aGUgc2VudF9x
dWV1ZV9yZXRyYW5fY250IHJlZmxlY3RzIGhvdwotCSAqIG1hbnkgY2h1bmtzIGhhdmUgYmVlbiBt
YXJrZWQgZm9yIHJldHJhbm1pc3Npb24gYnkgZWl0aGVyIFQzLXJ4dAotCSAqIG9yIEZSLgotCSAq
LwotCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgc2VudF9xdWV1ZTsKLQlzdHJ1Y3Qgc2N0cGNo
dW5rX2xpc3RoZWFkIHNlbmRfcXVldWU7Ci0KLQkvKiBTY2hlZHVsaW5nIHF1ZXVlcyAqLwotCXN0
cnVjdCBzY2hlZHVsaW5nX2RhdGEgc3NfZGF0YTsKLQotCS8qIElmIGFuIGl0ZXJhdG9yIGlzIGxv
b2tpbmcgYXQgbWUsIHRoaXMgaXMgaXQgKi8KLQlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqc3RjYl9z
dGFydGluZ19wb2ludF9mb3JfaXRlcmF0b3I7Ci0KLQkvKiBBU0NPTkYgc2F2ZSB0aGUgbGFzdCBB
U0NPTkYtQUNLIHNvIHdlIGNhbiByZXNlbmQgaXQgaWYgbmVjZXNzYXJ5ICovCi0Jc3RydWN0IHNj
dHBfYXNjb25mX2Fja2hlYWQgYXNjb25mX2Fja19zZW50OwotCi0JLyoKLQkgKiBwb2ludGVyIHRv
IGxhc3Qgc3RyZWFtIHJlc2V0IHF1ZXVlZCB0byBjb250cm9sIHF1ZXVlIGJ5IHVzIHdpdGgKLQkg
KiByZXF1ZXN0cy4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpzdHJfcmVzZXQ7Ci0J
LyoKLQkgKiBpZiBTb3VyY2UgQWRkcmVzcyBTZWxlY3Rpb24gaGFwcGVuaW5nLCB0aGlzIHdpbGwg
cm90YXRlIHRocm91Z2gKLQkgKiB0aGUgbGluayBsaXN0LgotCSAqLwotCXN0cnVjdCBzY3RwX2xh
ZGRyICpsYXN0X3VzZWRfYWRkcmVzczsKLQotCS8qIHN0cmVhbSBhcnJheXMgKi8KLQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1faW4gKnN0cm1pbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtb3V0
OwotCXVpbnQ4X3QgKm1hcHBpbmdfYXJyYXk7Ci0JLyogcHJpbWFyeSBkZXN0aW5hdGlvbiB0byB1
c2UgKi8KLQlzdHJ1Y3Qgc2N0cF9uZXRzICpwcmltYXJ5X2Rlc3RpbmF0aW9uOwotCXN0cnVjdCBz
Y3RwX25ldHMgKmFsdGVybmF0ZTsgLyogSWYgcHJpbWFyeSBpcyBkb3duIG9yIFBGICovCi0JLyog
Rm9yIENNVCAqLwotCXN0cnVjdCBzY3RwX25ldHMgKmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQ7
Ci0JLyogbGFzdCBwbGFjZSBJIGdvdCBhIGRhdGEgY2h1bmsgZnJvbSAqLwotCXN0cnVjdCBzY3Rw
X25ldHMgKmxhc3RfZGF0YV9jaHVua19mcm9tOwotCS8qIGxhc3QgcGxhY2UgSSBnb3QgYSBjb250
cm9sIGZyb20gKi8KLQlzdHJ1Y3Qgc2N0cF9uZXRzICpsYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsK
LQotCi0JLyoKLQkgKiB3YWl0IHRvIHRoZSBwb2ludCB0aGUgY3VtLWFjayBwYXNzZXMgcmVxLT5z
ZW5kX3Jlc2V0X2F0X3RzbiBmb3IKLQkgKiBhbnkgcmVxIG9uIHRoZSBsaXN0LgotCSAqLwotCXN0
cnVjdCBzY3RwX3Jlc2V0aGVhZCByZXNldEhlYWQ7Ci0KLQkvKiBxdWV1ZSBvZiBjaHVua3Mgd2Fp
dGluZyB0byBiZSBzZW50IGludG8gdGhlIGxvY2FsIHN0YWNrICovCi0Jc3RydWN0IHNjdHBfcmVh
ZGhlYWQgcGVuZGluZ19yZXBseV9xdWV1ZTsKLQotCS8qIEpSUyAtIHRoZSBjb25nZXN0aW9uIGNv
bnRyb2wgZnVuY3Rpb25zIGFyZSBpbiB0aGlzIHN0cnVjdCAqLwotCXN0cnVjdCBzY3RwX2NjX2Z1
bmN0aW9ucyBjY19mdW5jdGlvbnM7Ci0JLyogSlJTIC0gdmFsdWUgdG8gc3RvcmUgdGhlIGN1cnJl
bnRseSBsb2FkZWQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSAqLwotCXVpbnQzMl90IGNvbmdl
c3Rpb25fY29udHJvbF9tb2R1bGU7Ci0JLyogUlMgLSB0aGUgc3RyZWFtIHNjaGVkdWxpbmcgZnVu
Y3Rpb25zIGFyZSBpbiB0aGlzIHN0cnVjdCAqLwotCXN0cnVjdCBzY3RwX3NzX2Z1bmN0aW9ucyBz
c19mdW5jdGlvbnM7Ci0JLyogUlMgLSB2YWx1ZSB0byBzdG9yZSB0aGUgY3VycmVudGx5IGxvYWRl
ZCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUgKi8KLQl1aW50MzJfdCBzdHJlYW1fc2NoZWR1bGlu
Z19tb2R1bGU7Ci0KLQl1aW50MzJfdCB2cmZfaWQ7Ci0JdWludDMyX3QgY29va2llX3ByZXNlcnZl
X3JlcTsKLQkvKiBBU0NPTkYgbmV4dCBzZXEgSSBhbSBzZW5kaW5nIG91dCwgaW5pdHMgYXQgaW5p
dC10c24gKi8KLQl1aW50MzJfdCBhc2NvbmZfc2VxX291dDsKLQl1aW50MzJfdCBhc2NvbmZfc2Vx
X291dF9hY2tlZDsKLQkvKiBBU0NPTkYgbGFzdCByZWNlaXZlZCBBU0NPTkYgZnJvbSBwZWVyLCBz
dGFydHMgYXQgcGVlcidzIFRTTi0xICovCi0JdWludDMyX3QgYXNjb25mX3NlcV9pbjsKLQotCS8q
IG5leHQgc2VxIEkgYW0gc2VuZGluZyBpbiBzdHIgcmVzZXQgbWVzc2FnZXMgKi8KLQl1aW50MzJf
dCBzdHJfcmVzZXRfc2VxX291dDsKLQkvKiBuZXh0IHNlcSBJIGFtIGV4cGVjdGluZyBpbiBzdHIg
cmVzZXQgbWVzc2FnZXMgKi8KLQl1aW50MzJfdCBzdHJfcmVzZXRfc2VxX2luOwotCi0JLyogdmFy
aW91cyB2ZXJpZmljYXRpb24gdGFnIGluZm9ybWF0aW9uICovCi0JdWludDMyX3QgbXlfdnRhZzsJ
LyogVGhlIHRhZyB0byBiZSB1c2VkLiBpZiBhc3NvYyBpcyByZS1pbml0aXRlZAotCQkJCSAqIGJ5
IHJlbW90ZSBlbmQsIGFuZCBJIGhhdmUgdW5sb2NrZWQgdGhpcwotCQkJCSAqIHdpbGwgYmUgcmVn
ZW5lcmF0ZWQgdG8gYSBuZXcgcmFuZG9tIHZhbHVlLiAqLwotCXVpbnQzMl90IHBlZXJfdnRhZzsJ
LyogVGhlIHBlZXJzIGxhc3QgdGFnICovCi0KLQl1aW50MzJfdCBteV92dGFnX25vbmNlOwotCXVp
bnQzMl90IHBlZXJfdnRhZ19ub25jZTsKLQotCXVpbnQzMl90IGFzc29jX2lkOwotCi0JLyogVGhp
cyBpcyB0aGUgU0NUUCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLwotCXVpbnQzMl90IHNtYWxs
ZXN0X210dTsKLQotCS8qCi0JICogU3BlY2lhbCBob29rIGZvciBGYXN0IHJldHJhbnNtaXQsIGFs
bG93cyB1cyB0byB0cmFjayB0aGUgaGlnaGVzdAotCSAqIFRTTiB0aGF0IGlzIE5FVyBpbiB0aGlz
IFNBQ0sgaWYgZ2FwIGFjayBibG9ja3MgYXJlIHByZXNlbnQuCi0JICovCi0JdWludDMyX3QgdGhp
c19zYWNrX2hpZ2hlc3RfZ2FwOwotCi0JLyoKLQkgKiBUaGUgaGlnaGVzdCBjb25zZWN1dGl2ZSBU
U04gdGhhdCBoYXMgYmVlbiBhY2tlZCBieSBwZWVyIG9uIG15Ci0JICogc2VuZHMKLQkgKi8KLQl1
aW50MzJfdCBsYXN0X2Fja2VkX3NlcTsKLQotCS8qIFRoZSBuZXh0IFRTTiB0aGF0IEkgd2lsbCB1
c2UgaW4gc2VuZGluZy4gKi8KLQl1aW50MzJfdCBzZW5kaW5nX3NlcTsKLQotCS8qIE9yaWdpbmFs
IHNlcSBudW1iZXIgSSB1c2VkID8/cXVlc3Rpb25hYmxlIHRvIGtlZXA/PyAqLwotCXVpbnQzMl90
IGluaXRfc2VxX251bWJlcjsKLQotCi0JLyogVGhlIEFkdmFuY2VkIFBlZXIgQWNrIFBvaW50LCBh
cyByZXF1aXJlZCBieSB0aGUgUFItU0NUUCAqLwotCS8qIChBMSBpbiBTZWN0aW9uIDQuMikgKi8K
LQl1aW50MzJfdCBhZHZhbmNlZF9wZWVyX2Fja19wb2ludDsKLQotCS8qCi0JICogVGhlIGhpZ2hl
c3QgY29uc2VxdWV0aXZlIFRTTiBhdCB0aGUgYm90dG9tIG9mIHRoZSBtYXBwaW5nIGFycmF5Ci0J
ICogKGZvciBoaXMgc2VuZHMpLgotCSAqLwotCXVpbnQzMl90IGN1bXVsYXRpdmVfdHNuOwotCS8q
Ci0JICogVXNlZCB0byB0cmFjayB0aGUgbWFwcGluZyBhcnJheSBhbmQgaXRzIG9mZnNldCBiaXRz
LiBUaGlzIE1BWSBiZQotCSAqIGxvd2VyIHRoZW4gY3VtdWxhdGl2ZV90c24uCi0JICovCi0JdWlu
dDMyX3QgbWFwcGluZ19hcnJheV9iYXNlX3RzbjsKLQkvKgotCSAqIHVzZWQgdG8gdHJhY2sgaGln
aGVzdCBUU04gd2UgaGF2ZSByZWNlaXZlZCBhbmQgaXMgbGlzdGVkIGluIHRoZQotCSAqIG1hcHBp
bmcgYXJyYXkuCi0JICovCi0JdWludDMyX3QgaGlnaGVzdF90c25faW5zaWRlX21hcDsKLQotCS8q
IEVZIC0gbmV3IE5SIHZhcmlhYmxlcyB1c2VkIGZvciBucl9zYWNrIGJhc2VkIG9uIG1hcHBpbmdf
YXJyYXkqLwotCXVpbnQ4X3QgKm5yX21hcHBpbmdfYXJyYXk7Ci0JdWludDMyX3QgaGlnaGVzdF90
c25faW5zaWRlX25yX21hcDsKLQotCXVpbnQzMl90IGZhc3RfcmVjb3ZlcnlfdHNuOwotCXVpbnQz
Ml90IHNhdF90M19yZWNvdmVyeV90c247Ci0JdWludDMyX3QgdHNuX2xhc3RfZGVsaXZlcmVkOwot
CS8qCi0JICogRm9yIHRoZSBwZC1hcGkgd2Ugc2hvdWxkIHJlLXdyaXRlIHRoaXMgYSBiaXQgbW9y
ZSBlZmZpY2llbnQuIFdlCi0JICogY291bGQgaGF2ZSBtdWx0aXBsZSBzY3RwX3F1ZXVlZF90b19y
ZWFkJ3MgdGhhdCB3ZSBhcmUgYnVpbGRpbmcgYXQKLQkgKiBvbmNlLiBOb3cgd2Ugb25seSBkbyB0
aGlzIHdoZW4gd2UgZ2V0IHJlYWR5IHRvIGRlbGl2ZXIgdG8gdGhlCi0JICogc29ja2V0IGJ1ZmZl
ci4gTm90ZSB0aGF0IHdlIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IHRoZSBzdHJ1Y3QgaXMKLQkg
KiAic3R1Y2siIG9uIHRoZSByZWFkIHF1ZXVlIHVudGlsIHdlIGZpbmlzaCBhbGwgdGhlIHBkLWFw
aS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbF9wZGFwaTsKLQot
CXVpbnQzMl90IHRzbl9vZl9wZGFwaV9sYXN0X2RlbGl2ZXJlZDsKLQl1aW50MzJfdCBwZGFwaV9w
cGlkOwotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWludDMyX3QgbGFzdF9yZXNldF9hY3Rpb25bU0NU
UF9NQVhfUkVTRVRfUEFSQU1TXTsKLQl1aW50MzJfdCBsYXN0X3NlbmRpbmdfc2VxW1NDVFBfTUFY
X1JFU0VUX1BBUkFNU107Ci0JdWludDMyX3QgbGFzdF9iYXNlX3RzbnNlbnRbU0NUUF9NQVhfUkVT
RVRfUEFSQU1TXTsKLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCS8qCi0JICogc3BlY2lh
bCBsb2cgIC0gVGhpcyBhZGRzIGNvbnNpZGVyYWJsZSBzaXplCi0JICogdG8gdGhlIGFzb2MsIGJ1
dCBwcm92aWRlcyBhIGxvZyB0aGF0IHlvdQotCSAqIGNhbiB1c2UgdG8gZGV0ZWN0IHByb2JsZW1z
IHZpYSBrZ2RiLgotCSAqLwotCXN0cnVjdCBzY3RwX3Rzbl9sb2cgIGluX3RzbmxvZ1tTQ1RQX1RT
Tl9MT0dfU0laRV07Ci0Jc3RydWN0IHNjdHBfdHNuX2xvZyAgb3V0X3RzbmxvZ1tTQ1RQX1RTTl9M
T0dfU0laRV07Ci0JdWludDMyX3QgY3VtYWNrX2xvZ1tTQ1RQX1RTTl9MT0dfU0laRV07Ci0JdWlu
dDMyX3QgY3VtYWNrX2xvZ3NudFtTQ1RQX1RTTl9MT0dfU0laRV07Ci0JdWludDE2X3QgdHNuX2lu
X2F0OwotCXVpbnQxNl90IHRzbl9vdXRfYXQ7Ci0JdWludDE2X3QgdHNuX2luX3dyYXBwZWQ7Ci0J
dWludDE2X3QgdHNuX291dF93cmFwcGVkOwotCXVpbnQxNl90IGN1bWFja19sb2dfYXQ7Ci0JdWlu
dDE2X3QgY3VtYWNrX2xvZ19hdHNudDsKLSNlbmRpZiAvKiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUyAq
LwotI2lmZGVmIFNDVFBfRlNfU1BFQ19MT0cKLQlzdHJ1Y3Qgc2N0cF9mc19zcGVjX2xvZyBmc2xv
Z1tTQ1RQX0ZTX1NQRUNfTE9HX1NJWkVdOwotCXVpbnQxNl90IGZzX2luZGV4OwotI2VuZGlmCi0K
LQkvKgotCSAqIHdpbmRvdyBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgc21hbGxlc3QgTVRVIHRoYXQg
SSB1c2UgdG8gYm91bmQKLQkgKiBzZWdtZW50YXRpb24KLQkgKi8KLQl1aW50MzJfdCBwZWVyc19y
d25kOwotCXVpbnQzMl90IG15X3J3bmQ7Ci0JdWludDMyX3QgbXlfbGFzdF9yZXBvcnRlZF9yd25k
OwotCXVpbnQzMl90IHNjdHBfZnJhZ19wb2ludDsKLQotCXVpbnQzMl90IHRvdGFsX291dHB1dF9x
dWV1ZV9zaXplOwotCi0JdWludDMyX3Qgc2JfY2M7CQkgICAgICAgLyogc2hhZG93IG9mIHNiX2Nj
ICovCi0JdWludDMyX3Qgc2Jfc2VuZF9yZXN2OyAgICAgLyogYW1vdW50IHJlc2VydmVkIG9uIGEg
c2VuZCAqLwotCXVpbnQzMl90IG15X3J3bmRfY29udHJvbF9sZW47IC8qIHNoYWRvdyBvZiBzYl9t
YmNudCB1c2VkIGZvciByd25kIGNvbnRyb2wgKi8KLSNpZmRlZiBJTkVUNgotCXVpbnQzMl90IGRl
ZmF1bHRfZmxvd2xhYmVsOwotI2VuZGlmCi0JdWludDMyX3QgcHJfc2N0cF9jbnQ7Ci0JaW50IGN0
cmxfcXVldWVfY250OwkvKiBjb3VsZCBiZSByZW1vdmVkICBSRU0gLSBOTyBJVCBDQU4nVCEhIFJS
UyAqLwotCS8qCi0JICogQWxsIG91dGJvdW5kIGRhdGFncmFtcyBxdWV1ZSBpbnRvIHRoaXMgbGlz
dCBmcm9tIHRoZSBpbmRpdmlkdWFsCi0JICogc3RyZWFtIHF1ZXVlLiBIZXJlIHRoZXkgZ2V0IGFz
c2lnbmVkIGEgVFNOIGFuZCB0aGVuIGF3YWl0Ci0JICogc2VuZGluZy4gVGhlIHN0cmVhbSBzZXEg
Y29tZXMgd2hlbiBpdCBpcyBmaXJzdCBwdXQgaW4gdGhlCi0JICogaW5kaXZpZHVhbCBzdHIgcXVl
dWUKLQkgKi8KLQl1bnNpZ25lZCBpbnQgc3RyZWFtX3F1ZXVlX2NudDsKLQl1bnNpZ25lZCBpbnQg
c2VuZF9xdWV1ZV9jbnQ7Ci0JdW5zaWduZWQgaW50IHNlbnRfcXVldWVfY250OwotCXVuc2lnbmVk
IGludCBzZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlOwotCS8qCi0JICogTnVtYmVyIG9uIHNlbnQg
cXVldWUgdGhhdCBhcmUgbWFya2VkIGZvciByZXRyYW4gdW50aWwgdGhpcyB2YWx1ZQotCSAqIGlz
IDAgd2Ugb25seSBzZW5kIG9uZSBwYWNrZXQgb2YgcmV0cmFuJ2VkIGRhdGEuCi0JICovCi0JdW5z
aWduZWQgaW50IHNlbnRfcXVldWVfcmV0cmFuX2NudDsKLQotCXVuc2lnbmVkIGludCBzaXplX29u
X3JlYXNtX3F1ZXVlOwotCXVuc2lnbmVkIGludCBjbnRfb25fcmVhc21fcXVldWU7Ci0JdW5zaWdu
ZWQgaW50IGZ3ZF90c25fY250OwotCS8qIGFtb3VudCBvZiBkYXRhIChieXRlcykgY3VycmVudGx5
IGluIGZsaWdodCAob24gYWxsIGRlc3RpbmF0aW9ucykgKi8KLQl1bnNpZ25lZCBpbnQgdG90YWxf
ZmxpZ2h0OwotCS8qIFRvdGFsIGJvb2sgc2l6ZSBpbiBmbGlnaHQgKi8KLQl1bnNpZ25lZCBpbnQg
dG90YWxfZmxpZ2h0X2NvdW50OwkvKiBjb3VudCBvZiBjaHVua3MgdXNlZCB3aXRoCi0JCQkJCQkg
KiBib29rIHRvdGFsICovCi0JLyogY291bnQgb2YgZGVzdGluYXRvbiBuZXRzIGFuZCBsaXN0IG9m
IGRlc3RpbmF0aW9uIG5ldHMgKi8KLQl1bnNpZ25lZCBpbnQgbnVtbmV0czsKLQotCS8qIFRvdGFs
IGVycm9yIGNvdW50IG9uIHRoaXMgYXNzb2NpYXRpb24gKi8KLQl1bnNpZ25lZCBpbnQgb3ZlcmFs
bF9lcnJvcl9jb3VudDsKLQotCXVuc2lnbmVkIGludCBjbnRfbXNnX29uX3NiOwotCi0JLyogQWxs
IHN0cmVhbSBjb3VudCBvZiBjaHVua3MgZm9yIGRlbGl2ZXJ5ICovCi0JdW5zaWduZWQgaW50IHNp
emVfb25fYWxsX3N0cmVhbXM7Ci0JdW5zaWduZWQgaW50IGNudF9vbl9hbGxfc3RyZWFtczsKLQot
CS8qIEhlYXJ0IEJlYXQgZGVsYXkgaW4gbXMgKi8KLQl1aW50MzJfdCBoZWFydF9iZWF0X2RlbGF5
OwotCi0JLyogYXV0b2Nsb3NlICovCi0JdW5zaWduZWQgaW50IHNjdHBfYXV0b2Nsb3NlX3RpY2tz
OwotCi0JLyogaG93IG1hbnkgcHJlb3BlbiBzdHJlYW1zIHdlIGhhdmUgKi8KLQl1bnNpZ25lZCBp
bnQgcHJlX29wZW5fc3RyZWFtczsKLQotCS8qIEhvdyBtYW55IHN0cmVhbXMgSSBzdXBwb3J0IGNv
bWluZyBpbnRvIG1lICovCi0JdW5zaWduZWQgaW50IG1heF9pbmJvdW5kX3N0cmVhbXM7Ci0KLQkv
KiB0aGUgY29va2llIGxpZmUgSSBhd2FyZCBmb3IgYW55IGNvb2tpZSwgaW4gc2Vjb25kcyAqLwot
CXVuc2lnbmVkIGludCBjb29raWVfbGlmZTsKLQkvKiB0aW1lIHRvIGRlbGF5IGFja3MgZm9yICov
Ci0JdW5zaWduZWQgaW50IGRlbGF5ZWRfYWNrOwotCXVuc2lnbmVkIGludCBvbGRfZGVsYXllZF9h
Y2s7Ci0JdW5zaWduZWQgaW50IHNhY2tfZnJlcTsKLQl1bnNpZ25lZCBpbnQgZGF0YV9wa3RzX3Nl
ZW47Ci0KLQl1bnNpZ25lZCBpbnQgbnVtZHVwdHNuczsKLQlpbnQgZHVwX3RzbnNbU0NUUF9NQVhf
RFVQX1RTTlNdOwotCXVuc2lnbmVkIGludCBpbml0aWFsX2luaXRfcnRvX21heDsJLyogaW5pdGlh
bCBSVE8gZm9yIElOSVQncyAqLwotCXVuc2lnbmVkIGludCBpbml0aWFsX3J0bzsJLyogaW5pdGlh
bCBzZW5kIFJUTyAqLwotCXVuc2lnbmVkIGludCBtaW5ydG87CS8qIHBlciBhc3NvYyBSVE8tTUlO
ICovCi0JdW5zaWduZWQgaW50IG1heHJ0bzsJLyogcGVyIGFzc29jIFJUTy1NQVggKi8KLQotCS8q
IGF1dGhlbnRpY2F0aW9uIGZpZWxkcyAqLwotCXNjdHBfYXV0aF9jaGtsaXN0X3QgKmxvY2FsX2F1
dGhfY2h1bmtzOwotCXNjdHBfYXV0aF9jaGtsaXN0X3QgKnBlZXJfYXV0aF9jaHVua3M7Ci0Jc2N0
cF9obWFjbGlzdF90ICpsb2NhbF9obWFjczsJLyogbG9jYWwgSE1BQ3Mgc3VwcG9ydGVkICovCi0J
c2N0cF9obWFjbGlzdF90ICpwZWVyX2htYWNzOwkvKiBwZWVyIEhNQUNzIHN1cHBvcnRlZCAqLwot
CXN0cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVkX2tleXM7CS8qIGFzc29jJ3Mgc2hhcmVkIGtleXMg
Ki8KLQlzY3RwX2F1dGhpbmZvX3QgYXV0aGluZm87CS8qIHJhbmRvbXMsIGNhY2hlZCBrZXlzICov
Ci0JLyoKLQkgKiByZWZjbnQgdG8gYmxvY2sgZnJlZWluZyB3aGVuIGEgc2VuZGVyIG9yIHJlY2Vp
dmVyIGlzIG9mZiBjb3BpbmcKLQkgKiB1c2VyIGRhdGEgaW4uCi0JICovCi0JdWludDMyX3QgcmVm
Y250OwotCXVpbnQzMl90IGNodW5rc19vbl9vdXRfcXVldWU7CS8qIHRvdGFsIGNodW5rcyBmbG9h
dGluZyBhcm91bmQsCi0JCQkJCSAqIGxvY2tlZCBieSBzZW5kIHNvY2tldCBidWZmZXIgKi8KLQl1
aW50MzJfdCBwZWVyc19hZGFwdGF0aW9uOwotCXVpbnQxNl90IHBlZXJfaG1hY19pZDsJLyogcGVl
ciBITUFDIGlkIHRvIHNlbmQgKi8KLQotCS8qCi0JICogQmVpbmcgdGhhdCB3ZSBoYXZlIG5vIGJh
ZyB0byBjb2xsZWN0IHN0YWxlIGNvb2tpZXMsIGFuZCB0aGF0IHdlCi0JICogcmVhbGx5IHdvdWxk
IG5vdCB3YW50IHRvIGFueXdheS4uIHdlIHdpbGwgY291bnQgdGhlbSBpbiB0aGlzCi0JICogY291
bnRlci4gV2Ugb2YgY291cnNlIGZlZWQgdGhlbSB0byB0aGUgcGlnZW9ucyByaWdodCBhd2F5IChJ
IGhhdmUKLQkgKiBhbHdheXMgdGhvdWdodCBvZiBwaWdlb25zIGFzIGZseWluZyByYXRzKS4KLQkg
Ki8KLQl1aW50MTZfdCBzdGFsZV9jb29raWVfY291bnQ7Ci0KLQkvKgotCSAqIEZvciB0aGUgcGFy
dGlhbCBkZWxpdmVyeSBBUEksIGlmIHVwLCBpbnZva2VkIHRoaXMgaXMgd2hhdCBsYXN0Ci0JICog
VFNOIEkgZGVsaXZlcmVkCi0JICovCi0JdWludDE2X3Qgc3RyX29mX3BkYXBpOwotCXVpbnQxNl90
IHNzbl9vZl9wZGFwaTsKLQotCS8qIGNvdW50cyBvZiBhY3R1YWwgYnVpbHQgc3RyZWFtcy4gQWxs
b2NhdGlvbiBtYXkgYmUgbW9yZSBob3dldmVyICovCi0JLyogY291bGQgcmUtYXJyYW5nZSB0byBv
cHRpbWl6ZSBzcGFjZSBoZXJlLiAqLwotCXVpbnQxNl90IHN0cmVhbWluY250OwotCXVpbnQxNl90
IHN0cmVhbW91dGNudDsKLQl1aW50MTZfdCBzdHJtX3JlYWxvdXRzaXplOwotCXVpbnQxNl90IHN0
cm1fcGVuZGluZ19hZGRfc2l6ZTsKLQkvKiBteSBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zIG9m
IElOSVQgYW5kIFNFTkQgKi8KLQkvKiBjb3BpZWQgZnJvbSBTQ1RQIGJ1dCBzaG91bGQgYmUgaW5k
aXZpZHVhbGx5IHNldGFibGUgKi8KLQl1aW50MTZfdCBtYXhfaW5pdF90aW1lczsKLQl1aW50MTZf
dCBtYXhfc2VuZF90aW1lczsKLQotCXVpbnQxNl90IGRlZl9uZXRfZmFpbHVyZTsKLQotCXVpbnQx
Nl90IGRlZl9uZXRfcGZfdGhyZXNob2xkOwotCi0JLyoKLQkgKiBsb2NrIGZsYWc6IDAgaXMgb2sg
dG8gc2VuZCwgMSsgKGR1YWxzIGFzIGEgcmV0cmFuIGNvdW50KSBpcwotCSAqIGF3YWl0aW5nIEFD
SwotCSAqLwotCXVpbnQxNl90IG1hcHBpbmdfYXJyYXlfc2l6ZTsKLQotCXVpbnQxNl90IGxhc3Rf
c3RybV9zZXFfZGVsaXZlcmVkOwotCXVpbnQxNl90IGxhc3Rfc3RybV9ub19kZWxpdmVyZWQ7Ci0K
LQl1aW50MTZfdCBsYXN0X3Jldm9rZV9jb3VudDsKLQlpbnQxNl90IG51bV9zZW5kX3RpbWVyc191
cDsKLQotCXVpbnQxNl90IHN0cmVhbV9sb2NrZWRfb247Ci0JdWludDE2X3QgZWNuX2VjaG9fY250
X29ucTsKLQotCXVpbnQxNl90IGZyZWVfY2h1bmtfY250OwotCXVpbnQ4X3Qgc3RyZWFtX2xvY2tl
ZDsKLQl1aW50OF90IGF1dGhlbnRpY2F0ZWQ7CS8qIHBhY2tldCBhdXRoZW50aWNhdGVkIG9rICov
Ci0JLyoKLQkgKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgYSBTQUNLIG5lZWQgdG8gYmUgc2Vu
dC4KLQkgKiBJbml0aWFsbHkgdGhpcyBpcyAxIHRvIHNlbmQgdGhlIGZpcnN0IHNBQ0sgaW1tZWRp
YXRlbHkuCi0JICovCi0JdWludDhfdCBzZW5kX3NhY2s7Ci0KLQkvKiBtYXggYnVyc3Qgb2YgbmV3
IHBhY2tldHMgaW50byB0aGUgbmV0d29yayAqLwotCXVpbnQzMl90IG1heF9idXJzdDsKLQkvKiBt
YXggYnVyc3Qgb2YgZmFzdCByZXRyYW5zbWl0IHBhY2tldHMgKi8KLQl1aW50MzJfdCBmcl9tYXhf
YnVyc3Q7Ci0KLQl1aW50OF90IHNhdF9uZXR3b3JrOwkvKiBSVFQgaXMgaW4gcmFuZ2Ugb2Ygc2F0
IG5ldCBvciBncmVhdGVyICovCi0JdWludDhfdCBzYXRfbmV0d29ya19sb2Nrb3V0OwkvKiBsb2Nr
b3V0IGNvZGUgKi8KLQl1aW50OF90IGJ1cnN0X2xpbWl0X2FwcGxpZWQ7CS8qIEJ1cnN0IGxpbWl0
IGluIGVmZmVjdCBhdCBsYXN0IHNlbmQ/ICovCi0JLyogZmxhZyBnb2VzIG9uIHdoZW4gd2UgYXJl
IGRvaW5nIGEgcGFydGlhbCBkZWxpdmVyeSBhcGkgKi8KLQl1aW50OF90IGhiX3JhbmRvbV92YWx1
ZXNbNF07Ci0JdWludDhfdCBmcmFnbWVudGVkX2RlbGl2ZXJ5X2lucHJvZ3Jlc3M7Ci0JdWludDhf
dCBmcmFnbWVudF9mbGFnczsKLQl1aW50OF90IGxhc3RfZmxhZ3NfZGVsaXZlcmVkOwotCXVpbnQ4
X3QgaGJfZWN0X3JhbmRvbWJpdDsKLQl1aW50OF90IGhiX3JhbmRvbV9pZHg7Ci0JdWludDhfdCBk
ZWZhdWx0X2RzY3A7Ci0JdWludDhfdCBhc2NvbmZfZGVsX3BlbmRpbmc7CS8qIGFzY29uZiBkZWxl
dGUgbGFzdCBhZGRyIHBlbmRpbmcgKi8KLQl1aW50OF90IHRyaWdnZXJfcmVzZXQ7Ci0JLyoKLQkg
KiBUaGlzIHZhbHVlLCBwbHVzIGFsbCBvdGhlciBhY2snZCBidXQgYWJvdmUgY3VtLWFjayBpcyBh
ZGRlZAotCSAqIHRvZ2V0aGVyIHRvIGNyb3NzIGNoZWNrIGFnYWluc3QgdGhlIGJpdCB0aGF0IHdl
IGhhdmUgeWV0IHRvCi0JICogZGVmaW5lIChwcm9iYWJseSBpbiB0aGUgU0FDSykuIFdoZW4gdGhl
IGN1bS1hY2sgaXMgdXBkYXRlZCwgdGhpcwotCSAqIHN1bSBpcyB1cGRhdGVkIGFzIHdlbGwuCi0J
ICovCi0KLQkvKiBGbGFncyB3aGV0aGVyIGFuIGV4dGVuc2lvbiBpcyBzdXBwb3J0ZWQgb3Igbm90
ICovCi0JdWludDhfdCBlY25fc3VwcG9ydGVkOwotCXVpbnQ4X3QgcHJzY3RwX3N1cHBvcnRlZDsK
LQl1aW50OF90IGF1dGhfc3VwcG9ydGVkOwotCXVpbnQ4X3QgYXNjb25mX3N1cHBvcnRlZDsKLQl1
aW50OF90IHJlY29uZmlnX3N1cHBvcnRlZDsKLQl1aW50OF90IG5yc2Fja19zdXBwb3J0ZWQ7Ci0J
dWludDhfdCBwa3Rkcm9wX3N1cHBvcnRlZDsKLQl1aW50OF90IGlkYXRhX3N1cHBvcnRlZDsKLQot
CS8qIERpZCB0aGUgcGVlciBtYWtlIHRoZSBzdHJlYW0gY29uZmlnIChhZGQgb3V0KSByZXF1ZXN0
ICovCi0JdWludDhfdCBwZWVyX3JlcV9vdXQ7Ci0KLQl1aW50OF90IGxvY2FsX3N0cnJlc2V0X3N1
cHBvcnQ7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX25hdDsKLQotCXN0cnVjdCBzY3RwX3Njb3Bp
bmcgc2NvcGU7Ci0JLyogZmxhZ3MgdG8gaGFuZGxlIHNlbmQgYWx0ZXJuYXRlIG5ldCB0cmFja2lu
ZyAqLwotCXVpbnQ4X3QgdXNlZF9hbHRfYXNjb25mYWNrOwotCXVpbnQ4X3QgZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeTsKLQl1aW50OF90IHNhdF90M19sb3NzX3JlY292ZXJ5OwotCXVpbnQ4X3Qg
ZHJvcHBlZF9zcGVjaWFsX2NudDsKLQl1aW50OF90IHNlZW5fYV9zYWNrX3RoaXNfcGt0OwotCXVp
bnQ4X3Qgc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nOwotCXVpbnQ4X3Qgc3RyZWFtX3Jlc2V0X291
dF9pc19vdXRzdGFuZGluZzsKLQl1aW50OF90IGRlbGF5ZWRfY29ubmVjdGlvbjsKLQl1aW50OF90
IGlmcF9oYWRfZW5vYnVmOwotCXVpbnQ4X3Qgc2F3X3NhY2tfd2l0aF9mcmFnczsKLQl1aW50OF90
IHNhd19zYWNrX3dpdGhfbnJfZnJhZ3M7Ci0JdWludDhfdCBpbl9hc29jaWRfaGFzaDsKLQl1aW50
OF90IGFzc29jX3VwX3NlbnQ7Ci0JdWludDhfdCBhZGFwdGF0aW9uX25lZWRlZDsKLQl1aW50OF90
IGFkYXB0YXRpb25fc2VudDsKLQkvKiBDTVQgdmFyaWFibGVzICovCi0JdWludDhfdCBjbXRfZGFj
X3BrdHNfcmN2ZDsKLQl1aW50OF90IHNjdHBfY210X29uX29mZjsKLQl1aW50OF90IGlhbV9ibG9j
a2luZzsKLQl1aW50OF90IGNvb2tpZV9ob3dbOF07Ci0JLyogSlJTIDUvMjEvMDcgLSBDTVQgUEYg
dmFyaWFibGUgKi8KLQl1aW50OF90IHNjdHBfY210X3BmOwotCXVpbnQ4X3QgdXNlX3ByZWNpc2Vf
dGltZTsKLQl1aW50NjRfdCBzY3RwX2ZlYXR1cmVzOwotCXVpbnQzMl90IG1heF9jd25kOwotCXVp
bnQxNl90IHBvcnQ7IC8qIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0ICovCi0JLyoKLQkg
KiBUaGUgbWFwcGluZyBhcnJheSBpcyB1c2VkIHRvIHRyYWNrIG91dCBvZiBvcmRlciBzZXF1ZW5j
ZXMgYWJvdmUKLQkgKiBsYXN0X2Fja2VkX3NlcS4gMCBpbmRpY2F0ZXMgcGFja2V0IG1pc3Npbmcg
MSBpbmRpY2F0ZXMgcGFja2V0Ci0JICogcmVjJ2QuIFdlIHNsaWRlIGl0IHVwIGV2ZXJ5IHRpbWUg
d2UgcmFpc2UgbGFzdF9hY2tlZF9zZXEgYW5kIDAKLQkgKiB0cmFpbGluZyBsb2NhY3Rpb25zIG91
dC4gIElmIEkgZ2V0IGEgVFNOIGFib3ZlIHRoZSBhcnJheQotCSAqIG1hcHBpbmdBcnJheVN6LCBJ
IGRpc2NhcmQgdGhlIGRhdGFncmFtIGFuZCBsZXQgcmV0cmFuc21pdCBoYXBwZW4uCi0JICovCi0J
dWludDMyX3QgbWFya2VkX3JldHJhbnM7Ci0JdWludDMyX3QgdGltb2luaXQ7Ci0JdWludDMyX3Qg
dGltb2RhdGE7Ci0JdWludDMyX3QgdGltb3NhY2s7Ci0JdWludDMyX3QgdGltb3NodXRkb3duOwot
CXVpbnQzMl90IHRpbW9oZWFydGJlYXQ7Ci0JdWludDMyX3QgdGltb2Nvb2tpZTsKLQl1aW50MzJf
dCB0aW1vc2h1dGRvd25hY2s7Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZTsKLQlzdHJ1Y3Qg
dGltZXZhbCBkaXNjb250aW51aXR5X3RpbWU7Ci0JdWludDY0X3QgYWJhbmRvbmVkX3Vuc2VudFtT
Q1RQX1BSX1NDVFBfTUFYICsgMV07Ci0JdWludDY0X3QgYWJhbmRvbmVkX3NlbnRbU0NUUF9QUl9T
Q1RQX01BWCArIDFdOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfc3lzY3RsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NDY0NzUzNTkzMTQwNDdhM2I0MTJhNmZhZmUxNGQ3ZDUz
NTg0YzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTcwNiArMCww
IEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRh
bGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAq
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNp
ZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVl
QlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmMgMzE4OTU4IDIwMTctMDUtMjYgMTY6
Mjk6MDBaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25z
dGFudHMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxz
eXMvc21wLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+Ci0jZW5kaWYKLQot
I2lmZGVmIF9fRnJlZUJTRF9fCi1GRUFUVVJFKHNjdHAsICJTdHJlYW0gQ29udHJvbCBUcmFuc21p
c3Npb24gUHJvdG9jb2wiKTsKLSNlbmRpZgotCi0vKgotICogc3lzY3RsIHR1bmFibGUgdmFyaWFi
bGVzCi0gKi8KLQotdm9pZAotc2N0cF9pbml0X3N5c2N0bHMoKQotewotCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9zZW5kc3BhY2UpID0gU0NUUENUTF9NQVhER1JBTV9ERUZBVUxUOwotCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpID0gU0NUUENUTF9SRUNWU1BBQ0VfREVGQVVMVDsKLQlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2NvbmYpID0gU0NUUENUTF9BVVRPQVNDT05GX0RF
RkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX211bHRpcGxlX2FzY29uZnMpID0gU0NUUENU
TF9NVUxUSVBMRUFTQ09ORlNfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZWNuX2Vu
YWJsZSkgPSBTQ1RQQ1RMX0VDTl9FTkFCTEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcHJfZW5hYmxlKSA9IFNDVFBDVExfUFJfRU5BQkxFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IFNDVFBDVExfQVVUSF9FTkFCTEVfREVGQVVMVDsKLQlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPSBTQ1RQQ1RMX0FTQ09ORl9FTkFC
TEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjb25maWdfZW5hYmxlKSA9IFND
VFBDVExfUkVDT05GSUdfRU5BQkxFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX25y
c2Fja19lbmFibGUpID0gU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSA9IFNDVFBDVExfUEtURFJPUF9FTkFCTEVfREVG
QVVMVDsKLSNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDgwMDAwMCkKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgPSBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9E
RUZBVUxUOwotI2VuZGlmCi0jZW5kaWYKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVu
a19vaCkgPSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbWF4X2J1cnN0X2RlZmF1bHQpID0gU0NUUENUTF9NQVhCVVJTVF9ERUZBVUxUOwotCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkgPSBTQ1RQQ1RMX0ZSTUFYQlVS
U1RfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkg
PSBTQ1RQQ1RMX01BWENIVU5LU19ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNo
dGJsc2l6ZSkgPSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3BjYnRibHNpemUpID0gU0NUUENUTF9QQ0JIQVNIU0laRV9ERUZBVUxUOwotCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRfcG9pbnQpID0gU0NUUENUTF9NSU5fU1BMSVRfUE9J
TlRfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkgPSBTQ1RQQ1RM
X0NIVU5LU0NBTEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNr
X3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX0RFRkFVTFQ7Ci0JU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KSA9IFNDVFBDVExfU0FDS19GUkVR
X0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQp
ID0gU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
YXNvY19mcmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9BU09DX1JFU09VUkNFX0RFRkFVTFQ7Ci0J
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KSA9IFNDVFBD
VExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Bt
dHVfcmFpc2VfdGltZV9kZWZhdWx0KSA9IFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX0RFRkFVTFQ7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCkgPSBT
Q1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpID0gU0NUUENUTF9TRUNSRVRfTElGRVRJTUVfREVG
QVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZhdWx0KSA9IFNDVFBDVExf
UlRPX01BWF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWluX2RlZmF1bHQp
ID0gU0NUUENUTF9SVE9fTUlOX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19p
bml0aWFsX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fSU5JVElBTF9ERUZBVUxUOwotCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX0lOSVRfUlRPX01B
WF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZh
dWx0KSA9IFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpID0gU0NUUENUTF9JTklUX1JUWF9NQVhfREVG
QVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KSA9IFND
VFBDVExfQVNTT0NfUlRYX01BWF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRo
X3J0eF9tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9ERUZBVUxUOwotCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkgPSBTQ1RQQ1RMX1BBVEhfUEZfVEhS
RVNIT0xEX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9s
ZCkgPSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpID0gU0NUUENUTF9JTkNPTUlOR19T
VFJFQU1TX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX291dGdvaW5nX3N0cmVh
bXNfZGVmYXVsdCkgPSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVGQVVMVDsKLQlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPSBTQ1RQQ1RMX0NNVF9PTl9PRkZfREVGQVVMVDsK
LQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpID0gU0NUUENUTF9DTVRfVVNFX0RB
Q19ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJz
dCkgPSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbmF0X2ZyaWVuZGx5KSA9IFNDVFBDVExfTkFUX0ZSSUVORExZX0RFRkFVTFQ7Ci0JU0NUUF9C
QVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkgPSBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERUZB
VUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkgPSBTQ1RQ
Q1RMX01BWF9DSEFJTkVEX01CVUZTX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Rv
X2RyYWluKSA9IFNDVFBDVExfRE9fU0NUUF9EUkFJTl9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9oYl9tYXhidXJzdCkgPSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9ERUZBVUxUOwotCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkgPSBTQ1RQ
Q1RMX0FCT1JUX0FUX0xJTUlUX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX21pbl9y
ZXNpZHVhbCkgPSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSA9IFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19ERUZB
VUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSA9IFNDVFBDVExfTE9H
R0lOR19MRVZFTF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2NjX21v
ZHVsZSkgPSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2RlZmF1bHRfc3NfbW9kdWxlKSA9IFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVf
REVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUp
ID0gU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxUOwotCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSA9IFNDVFBDVExfTU9CSUxJVFlfQkFTRV9ERUZBVUxU
OwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZikgPSBTQ1RQQ1RM
X01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0
YWdfdGltZV93YWl0KSA9IFNDVFBDVExfVElNRV9XQUlUX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpID0gU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX0RF
RkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCkgPSBTQ1RQQ1RMX0lO
SVRJQUxfQ1dORF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpID0g
U0NUUENUTF9SVFRWQVJfQldfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFy
X3J0dCkgPSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcnR0dmFyX2VxcmV0KSA9IFNDVFBDVExfUlRUVkFSX0VRUkVUX0RFRkFVTFQ7Ci0JU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVwKSA9IFNDVFBDVExfUlRUVkFSX1NURUFEWVNfREVG
QVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2RjY2NfZWNuKSA9IFNDVFBDVExfUlRU
VkFSX0RDQ0NFQ05fREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9
IFNDVFBDVExfQkxBQ0tIT0xFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdf
aW5mb19jb2RlKSA9IFNDVFBDVExfRElBR19JTkZPX0NPREVfREVGQVVMVDsKLSNpZiBkZWZpbmVk
KFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0JLyogT24g
V2luZG93cywgdGhlIHJlc291cmNlIGZvciBnbG9iYWwgdmFyaWFibGVzIGlzIGxpbWl0ZWQuICov
Ci0JTUFMTE9DKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzdHJ1Y3Qgc2N0cF9sb2cgKiwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2xvZyksIE1fU1lTQ1RMLCBNX1pFUk8pOwotI2Vsc2UKLQltZW1z
ZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9n
KSk7Ci0jZW5kaWYKLSNlbmRpZgotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5n
X3BvcnQpID0gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVGQVVMVDsKLQlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpID0gU0NUUENUTF9TQUNLX0lNTUVE
SUFURUxZX0VOQUJMRV9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0c19pbmNs
dWRlX25hdF9mcmllbmRseSkgPSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19ERUZBVUxUOwot
I2lmIGRlZmluZWQoU0NUUF9ERUJVRykKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24p
ID0gU0NUUENUTF9ERUJVR19ERUZBVUxUOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18p
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2lnbm9yZV92bXdhcmVfaW50ZXJmYWNlcykgPSBTQ1RQ
Q1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tYWluX3RpbWVyKSA9IFNDVFBDVExfTUFJTl9USU1FUl9ERUZBVUxUOwotCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0KSA9IFNDVFBDVExfQUREUl9XQVRDSERP
R19MSU1JVF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92dGFnX3dhdGNoZG9nX2xp
bWl0KSA9IFNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9ERUZBVUxUOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JU0NU
UF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkgPSBTQ1RQQ1RMX09VVFBVVF9VTkxP
Q0tFRF9ERUZBVUxUOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotdm9p
ZAotc2N0cF9maW5pc2hfc3lzY3RscygpCi17Ci0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNF
X0JVRikKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykgIT0gTlVMTCkgewotCQlGUkVF
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBNX1NZU0NUTCk7Ci0JCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2cpID0gTlVMTDsKLQl9Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pCi0vKiBJdCByZXR1cm5zIGFuIHVwcGVyIGxpbWl0LiBObyBmaWx0ZXJpbmcgaXMgZG9uZSBo
ZXJlICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zY3RwX3N5c2N0bF9udW1iZXJfb2ZfYWRkcmVz
c2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnApCi17Ci0JdW5zaWduZWQgaW50IGNudDsKLQlzdHJ1
Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwotCXN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCi0JY250ID0g
MDsKLQkvKiBuZWl0aGVyIE1hYyBPUyBYIG5vciBGcmVlQlNEIHN1cHBvcnQgbXVsaXRwbGUgcm91
dGluZyBmdW5jdGlvbnMgKi8KLQlpZiAoKHZyZiA9IHNjdHBfZmluZF92cmYoaW5wLT5kZWZfdnJm
X2lkKSkgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAm
dnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0
cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotI2VuZGlmCi0JCQkJCWNudCsrOwot
CQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0K
LQl9IGVsc2UgewotCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBz
Y3RwX254dF9hZGRyKSB7Ci0JCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0jZW5kaWYKLQkJCQljbnQrKzsKLQkJCQlicmVhazsKLQkJ
CWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjbnQpOwotfQot
Ci1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc3lzY3RsX3Jl
cSAqcmVxKQotewotCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47Ci0Jc3RydWN0IHNjdHBfaWZh
ICpzY3RwX2lmYTsKLQlpbnQgbG9vcGJhY2tfc2NvcGUsIGlwdjRfbG9jYWxfc2NvcGUsIGxvY2Fs
X3Njb3BlLCBzaXRlX3Njb3BlOwotCWludCBpcHY0X2FkZHJfbGVnYWwsIGlwdjZfYWRkcl9sZWdh
bDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaW50IGNvbm5fYWRkcl9sZWdhbDsKLSNl
bmRpZgotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXN0cnVjdCB4c2N0cF9sYWRkciB4bGFkZHI7
Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCWludCBlcnJvcjsKLQotCS8qIFR1cm4gb24g
YWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLwotCWlmIChzdGNiKSB7Ci0JCS8qIHVzZSBhc3Nv
Y2lhdGlvbiBzcGVjaWZpYyB2YWx1ZXMgKi8KLQkJbG9vcGJhY2tfc2NvcGUgPSBzdGNiLT5hc29j
LnNjb3BlLmxvb3BiYWNrX3Njb3BlOwotCQlpcHY0X2xvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5z
Y29wZS5pcHY0X2xvY2FsX3Njb3BlOwotCQlsb2NhbF9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUu
bG9jYWxfc2NvcGU7Ci0JCXNpdGVfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGU7
Ci0JCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsOwot
CQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbDsKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Mu
c2NvcGUuY29ubl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJLyogVXNlIGdlbmVy
aWMgdmFsdWVzIGZvciBlbmRwb2ludHMuICovCi0JCWxvb3BiYWNrX3Njb3BlID0gMTsKLQkJaXB2
NF9sb2NhbF9zY29wZSA9IDE7Ci0JCWxvY2FsX3Njb3BlID0gMTsKLQkJc2l0ZV9zY29wZSA9IDE7
Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQkJ
aXB2Nl9hZGRyX2xlZ2FsID0gMTsKLQkJCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKLQkJ
CQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlpcHY0X2FkZHJfbGVnYWwg
PSAxOwotCQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWNvbm5fYWRkcl9sZWdh
bCA9IDA7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWlwdjZfYWRkcl9sZWdhbCA9IDA7Ci0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EX0NPTk4pIHsKLQkJCQljb25uX2FkZHJfbGVnYWwgPSAxOwotCQkJCWlwdjRf
YWRkcl9sZWdhbCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDA7Ci0J
CQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKLQkJCX0KLSNlbHNlCi0JCQlpcHY0X2FkZHJfbGVnYWwg
PSAxOwotI2VuZGlmCi0JCX0KLQl9Ci0KLQkvKiBuZWl0aGVyIE1hYyBPUyBYIG5vciBGcmVlQlNE
IHN1cHBvcnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KLQlpZiAoKHZyZiA9IHNjdHBf
ZmluZF92cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgewotCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7Ci0JCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0J
aWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCUxJU1Rf
Rk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKLQkJCWlmICgobG9v
cGJhY2tfc2NvcGUgPT0gMCkgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKQotCQkJ
CS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2NvcGUgbm90IHNldCAqLwotCQkJCWNvbnRp
bnVlOwotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRf
aWZhKSB7Ci0JCQkJaWYgKHN0Y2IpIHsKLQkJCQkJLyoKLQkJCQkJICogaWdub3JlIGlmIGJsYWNr
bGlzdGVkIGF0Ci0JCQkJCSAqIGFzc29jaWF0aW9uIGxldmVsCi0JCQkJCSAqLwotCQkJCQlpZiAo
c2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpKQotCQkJCQkJY29udGludWU7
Ci0JCQkJfQotCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJaWYgKGlwdjRfYWRkcl9sZWdhbCkg
ewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCQkJCXNpbiA9ICZzY3RwX2lm
YS0+YWRkcmVzcy5zaW47Ci0JCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkKLQkJ
CQkJCQljb250aW51ZTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCQkJaWYgKHByaXNv
bl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJ
CX0KLSNlbmRpZgotCQkJCQkJaWYgKChpcHY0X2xvY2FsX3Njb3BlID09IDApICYmIChJTjRfSVNQ
UklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJ
fSBlbHNlIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotCQkJCQlpZiAoaXB2Nl9hZGRyX2xlZ2Fs
KSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQkJCQlzaW42ID0gJnNj
dHBfaWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQo
JnNpbjYtPnNpbjZfYWRkcikpCi0JCQkJCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3Jl
ZCwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsK
LQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJCQkJaWYgKElONl9JU19BRERS
X0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCQkJCWlmIChsb2NhbF9zY29wZSA9
PSAwKQotCQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJCWlmICgoc2l0ZV9zY29wZSA9
PSAwKSAmJiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkKLQkJCQkJ
CQljb250aW51ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJ
CWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCWNhc2UgQUZf
Q09OTjoKLQkJCQkJaWYgKCFjb25uX2FkZHJfbGVnYWwpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJ
CQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJY29udGludWU7Ci0J
CQkJfQotCQkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBf
bGFkZHIpKTsKLQkJCQltZW1jcHkoKHZvaWQgKikmeGxhZGRyLmFkZHJlc3MsIChjb25zdCB2b2lk
ICopJnNjdHBfaWZhLT5hZGRyZXNzLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKLQkJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0J
CQkJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9s
YWRkcikpOwotCQkJCWlmIChlcnJvcikgewotCQkJCQlyZXR1cm4gKGVycm9yKTsKLQkJCQl9IGVs
c2UgewotCQkJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJTElTVF9GT1JFQUNIKGxhZGRyLCAm
aW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJLyogaWdub3JlIGlmIGJs
YWNrbGlzdGVkIGF0IGFzc29jaWF0aW9uIGxldmVsICovCi0JCQlpZiAoc3RjYiAmJiBzY3RwX2lz
X2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkKLQkJCQljb250aW51ZTsKLQkJCW1l
bXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpKTsKLQkJ
CW1lbWNweSgodm9pZCAqKSZ4bGFkZHIuYWRkcmVzcywgKGNvbnN0IHZvaWQgKikmbGFkZHItPmlm
YS0+YWRkcmVzcywgc2l6ZW9mKHVuaW9uIHNjdHBfc29ja3N0b3JlKSk7Ci0JCQl4bGFkZHIuc3Rh
cnRfdGltZS50dl9zZWMgPSAodWludDMyX3QpbGFkZHItPnN0YXJ0X3RpbWUudHZfc2VjOwotCQkJ
eGxhZGRyLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50MzJfdClsYWRkci0+c3RhcnRfdGltZS50
dl91c2VjOwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NUUF9JTlBfSU5GT19SVU5M
T0NLKCk7Ci0JCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGxhZGRyLCBzaXplb2Yoc3RydWN0
IHhzY3RwX2xhZGRyKSk7Ci0JCQlpZiAoZXJyb3IpIHsKLQkJCQlyZXR1cm4gKGVycm9yKTsKLQkJ
CX0gZWxzZSB7Ci0JCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwotCQkJCVNDVFBfSU5QX1JMT0NL
KGlucCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JbWVtc2V0KCh2b2lkICopJnhsYWRkciwgMCwgc2l6ZW9m
KHN0cnVjdCB4c2N0cF9sYWRkcikpOwotCXhsYWRkci5sYXN0ID0gMTsKLQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JZXJyb3IgPSBTWVNDVExfT1VU
KHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOwotCi0JaWYgKGVycm9y
KSB7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0gZWxzZSB7Ci0JCVNDVFBfSU5QX0lORk9fUkxPQ0so
KTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLS8qCi0g
KiBzeXNjdGwgZnVuY3Rpb25zCi0gKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBp
bnQKLXNjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QgU1lTQ1RMX0hBTkRMRVJfQVJHUwotewot
I3ByYWdtYSB1bnVzZWQob2lkcCwgYXJnMSwgYXJnMikKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3Rw
X3N5c2N0bF9oYW5kbGVfYXNzb2NsaXN0KFNZU0NUTF9IQU5ETEVSX0FSR1MpCi17Ci0jZW5kaWYK
LQl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2VuZHBvaW50czsKLQl1bnNpZ25lZCBpbnQgbnVtYmVy
X29mX2xvY2FsX2FkZHJlc3NlczsKLQl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2Fzc29jaWF0aW9u
czsKLQl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXM7Ci0JdW5zaWduZWQg
aW50IG47Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNj
dHBfdGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3QgeHNjdHBfaW5w
Y2IgeGlucGNiOwotCXN0cnVjdCB4c2N0cF90Y2IgeHN0Y2I7Ci0Jc3RydWN0IHhzY3RwX3JhZGRy
IHhyYWRkcjsKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQotCW51bWJlcl9vZl9lbmRwb2ludHMgPSAw
OwotCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgPSAwOwotCW51bWJlcl9vZl9hc3NvY2lhdGlv
bnMgPSAwOwotCW51bWJlcl9vZl9yZW1vdGVfYWRkcmVzc2VzID0gMDsKLQotCVNDVFBfSU5QX0lO
Rk9fUkxPQ0soKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAocmVxLT5vbGRwdHIgPT0g
VVNFUl9BRERSX05VTEwpIHsKLSNlbHNlCi0JaWYgKHJlcS0+b2xkcHRyID09IE5VTEwpIHsKLSNl
bmRpZgotCQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9CQVNFX0lORk8obGlzdGhlYWQpLCBzY3Rw
X2xpc3QpIHsKLQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQludW1iZXJfb2ZfZW5kcG9pbnRz
Kys7Ci0JCQludW1iZXJfb2ZfbG9jYWxfYWRkcmVzc2VzICs9IHNjdHBfc3lzY3RsX251bWJlcl9v
Zl9hZGRyZXNzZXMoaW5wKTsKLQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJbnVtYmVyX29mX2Fzc29jaWF0aW9ucysrOwotCQkJ
CW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKz0gc2N0cF9zeXNjdGxfbnVtYmVyX29mX2FkZHJl
c3NlcyhpbnApOwotCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQpIHsKLQkJCQkJbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXMrKzsKLQkJCQl9Ci0JCQl9
Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJU0NUUF9JTlBfSU5GT19SVU5MT0NL
KCk7Ci0JCW4gPSAobnVtYmVyX29mX2VuZHBvaW50cyArIDEpICogc2l6ZW9mKHN0cnVjdCB4c2N0
cF9pbnBjYikgKwotCQkgICAgKG51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKyBudW1iZXJfb2Zf
ZW5kcG9pbnRzICsgbnVtYmVyX29mX2Fzc29jaWF0aW9ucykgKiBzaXplb2Yoc3RydWN0IHhzY3Rw
X2xhZGRyKSArCi0JCSAgICAobnVtYmVyX29mX2Fzc29jaWF0aW9ucyArIG51bWJlcl9vZl9lbmRw
b2ludHMpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpICsKLQkJICAgIChudW1iZXJfb2ZfcmVt
b3RlX2FkZHJlc3NlcyArIG51bWJlcl9vZl9hc3NvY2lhdGlvbnMpICogc2l6ZW9mKHN0cnVjdCB4
c2N0cF9yYWRkcik7Ci0KLQkJLyogcmVxdWVzdCBzb21lIG1vcmUgbWVtb3J5IHRoYW4gbmVlZGVk
ICovCi0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0JCXJlcS0+b2xkaWR4ID0gKG4gKyBuIC8g
OCk7Ci0jZWxzZQotCQlyZXEtPmRhdGFpZHggPSAobiArIG4gLyA4KTsKLSNlbmRpZgotCQlyZXR1
cm4gKDApOwotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAocmVxLT5uZXdwdHIgIT0g
VVNFUl9BRERSX05VTEwpIHsKLSNlbHNlCi0JaWYgKHJlcS0+bmV3cHRyICE9IE5VTEwpIHsKLSNl
bmRpZgotCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChO
VUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9TWVNDVEwsIEVQRVJNKTsKLQkJcmV0dXJu
IChFUEVSTSk7Ci0JfQotCUxJU1RfRk9SRUFDSChpbnAsICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVh
ZCksIHNjdHBfbGlzdCkgewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKLQkJCS8qIGlmIGl0cyBh
bGxnb25lIGl0IGlzIGJlaW5nIGZyZWVkIC0gc2tpcCBpdCAgKi8KLQkJCWdvdG8gc2tpcDsKLQkJ
fQotCQl4aW5wY2IubGFzdCA9IDA7Ci0JCXhpbnBjYi5sb2NhbF9wb3J0ID0gbnRvaHMoaW5wLT5z
Y3RwX2xwb3J0KTsKLQkJeGlucGNiLmZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDA0OAotCQl4aW5wY2Iu
ZmVhdHVyZXMgPSAodWludDMyX3QpaW5wLT5zY3RwX2ZlYXR1cmVzOwotI2Vsc2UKLQkJeGlucGNi
LmZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwotI2VuZGlmCi0JCXhpbnBjYi50b3RhbF9z
ZW5kcyA9IGlucC0+dG90YWxfc2VuZHM7Ci0JCXhpbnBjYi50b3RhbF9yZWN2cyA9IGlucC0+dG90
YWxfcmVjdnM7Ci0JCXhpbnBjYi50b3RhbF9ub3NwYWNlcyA9IGlucC0+dG90YWxfbm9zcGFjZXM7
Ci0JCXhpbnBjYi5mcmFnbWVudGF0aW9uX3BvaW50ID0gaW5wLT5zY3RwX2ZyYWdfcG9pbnQ7Ci0j
aWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24gPCAxMDAxNTE3
KSkKLQkJeGlucGNiLnNvY2tldCA9IGlucC0+c2N0cF9zb2NrZXQ7Ci0jZW5kaWYKLQkJc28gPSBp
bnAtPnNjdHBfc29ja2V0OwotCQlpZiAoKHNvID09IE5VTEwpIHx8Ci0JCSAgICAoIVNDVFBfSVNf
TElTVEVOSU5HKGlucCkpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUpKSB7Ci0JCQl4aW5wY2IucWxlbiA9IDA7Ci0JCQl4aW5wY2IubWF4cWxl
biA9IDA7Ci0JCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gMTIwMDAzNAotCQkJeGlucGNiLnFsZW4gPSBzby0+c29sX3FsZW47Ci0jZWxz
ZQotCQkJeGlucGNiLnFsZW4gPSBzby0+c29fcWxlbjsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgotI2lmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDEyMDAwMzQKLQkJCXhpbnBjYi5xbGVuX29sZCA9IHNvLT5zb2xfcWxlbiA+IFVT
SFJUX01BWCA/Ci0JCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+c29sX3FsZW47Ci0j
ZWxzZQotCQkJeGlucGNiLnFsZW5fb2xkID0gc28tPnNvX3FsZW4gPiBVU0hSVF9NQVggPwotCQkJ
ICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvX3FsZW47Ci0jZW5kaWYKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQK
LQkJCXhpbnBjYi5tYXhxbGVuID0gc28tPnNvbF9xbGltaXQ7Ci0jZWxzZQotCQkJeGlucGNiLm1h
eHFsZW4gPSBzby0+c29fcWxpbWl0OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Ci0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
MTIwMDAzNAotCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvbF9xbGltaXQgPiBVU0hSVF9N
QVggPwotCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvbF9xbGltaXQ7Ci0jZWxz
ZQotCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvX3FsaW1pdCA+IFVTSFJUX01BWCA/Ci0J
CQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+c29fcWxpbWl0OwotI2VuZGlmCi0jZW5k
aWYKLQkJfQotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7Ci0JCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQllcnJvciA9IFNZU0NUTF9PVVQocmVx
LCAmeGlucGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX2lucGNiKSk7Ci0JCWlmIChlcnJvcikgewot
CQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9Ci0JCVND
VFBfSU5QX0lORk9fUkxPQ0soKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJZXJyb3IgPSBz
Y3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBOVUxMLCByZXEpOwotCQlp
ZiAoZXJyb3IpIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQlyZXR1cm4gKGVycm9y
KTsKLQkJfQotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBf
dGNibGlzdCkgewotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl4c3Rj
Yi5sYXN0ID0gMDsKLQkJCXhzdGNiLmxvY2FsX3BvcnQgPSBudG9ocyhpbnAtPnNjdHBfbHBvcnQp
OwotCQkJeHN0Y2IucmVtb3RlX3BvcnQgPSBudG9ocyhzdGNiLT5ycG9ydCk7Ci0JCQlpZiAoc3Rj
Yi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uICE9IE5VTEwpCi0JCQkJeHN0Y2IucHJpbWFyeV9h
ZGRyID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyOwotCQkJeHN0
Y2IuaGVhcnRiZWF0X2ludGVydmFsID0gc3RjYi0+YXNvYy5oZWFydF9iZWF0X2RlbGF5OwotCQkJ
eHN0Y2Iuc3RhdGUgPSAodWludDMyX3Qpc2N0cF9tYXBfYXNzb2Nfc3RhdGUoc3RjYi0+YXNvYy5z
dGF0ZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDAwMDAKLQkJCS8qIDcuMCBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlICovCi0JCQl4c3RjYi5h
c3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JCQl4c3RjYi5wZWVyc19yd25kID0g
c3RjYi0+YXNvYy5wZWVyc19yd25kOwotI2VuZGlmCi0jZWxzZQotCQkJeHN0Y2IuYXNzb2NfaWQg
PSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQkJeHN0Y2IucGVlcnNfcnduZCA9IHN0Y2ItPmFz
b2MucGVlcnNfcnduZDsKLSNlbmRpZgotCQkJeHN0Y2IuaW5fc3RyZWFtcyA9IHN0Y2ItPmFzb2Mu
c3RyZWFtaW5jbnQ7Ci0JCQl4c3RjYi5vdXRfc3RyZWFtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0
Y250OwotCQkJeHN0Y2IubWF4X25yX3JldHJhbnMgPSBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3Jf
Y291bnQ7Ci0JCQl4c3RjYi5wcmltYXJ5X3Byb2Nlc3MgPSAwOyAvKiBub3QgcmVhbGx5IHN1cHBv
cnRlZCB5ZXQgKi8KLQkJCXhzdGNiLlQxX2V4cGlyZXJpZXMgPSBzdGNiLT5hc29jLnRpbW9pbml0
ICsgc3RjYi0+YXNvYy50aW1vY29va2llOwotCQkJeHN0Y2IuVDJfZXhwaXJlcmllcyA9IHN0Y2It
PmFzb2MudGltb3NodXRkb3duICsgc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2s7Ci0JCQl4c3Rj
Yi5yZXRyYW5zbWl0dGVkX3RzbnMgPSBzdGNiLT5hc29jLm1hcmtlZF9yZXRyYW5zOwotCQkJeHN0
Y2Iuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5zdGFydF90aW1lLnR2
X3NlYzsKLQkJCXhzdGNiLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50MzJfdClzdGNiLT5hc29j
LnN0YXJ0X3RpbWUudHZfdXNlYzsKLQkJCXhzdGNiLmRpc2NvbnRpbnVpdHlfdGltZS50dl9zZWMg
PSAodWludDMyX3Qpc3RjYi0+YXNvYy5kaXNjb250aW51aXR5X3RpbWUudHZfc2VjOwotCQkJeHN0
Y2IuZGlzY29udGludWl0eV90aW1lLnR2X3VzZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5kaXNj
b250aW51aXR5X3RpbWUudHZfdXNlYzsKLQkJCXhzdGNiLnRvdGFsX3NlbmRzID0gc3RjYi0+dG90
YWxfc2VuZHM7Ci0JCQl4c3RjYi50b3RhbF9yZWN2cyA9IHN0Y2ItPnRvdGFsX3JlY3ZzOwotCQkJ
eHN0Y2IubG9jYWxfdGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCQkJeHN0Y2IucmVtb3RlX3Rh
ZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOwotCQkJeHN0Y2IuaW5pdGlhbF90c24gPSBzdGNiLT5h
c29jLmluaXRfc2VxX251bWJlcjsKLQkJCXhzdGNiLmhpZ2hlc3RfdHNuID0gc3RjYi0+YXNvYy5z
ZW5kaW5nX3NlcSAtIDE7Ci0JCQl4c3RjYi5jdW11bGF0aXZlX3RzbiA9IHN0Y2ItPmFzb2MubGFz
dF9hY2tlZF9zZXE7Ci0JCQl4c3RjYi5jdW11bGF0aXZlX3Rzbl9hY2sgPSBzdGNiLT5hc29jLmN1
bXVsYXRpdmVfdHNuOwotCQkJeHN0Y2IubXR1ID0gc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHU7Ci0J
CQl4c3RjYi5yZWZjbnQgPSBzdGNiLT5hc29jLnJlZmNudDsKLQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJZXJyb3IgPSBTWVNDVExfT1VU
KHJlcSwgJnhzdGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX3RjYikpOwotCQkJaWYgKGVycm9yKSB7
Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJcmV0dXJuIChlcnJvcik7Ci0JCQl9Ci0JCQlTQ1RQ
X0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJZXJyb3IgPSBz
Y3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBzdGNiLCByZXEpOwotCQkJ
aWYgKGVycm9yKSB7Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJcmV0dXJuIChlcnJvcik7Ci0J
CQl9Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
Ci0JCQkJeHJhZGRyLmxhc3QgPSAwOwotCQkJCXhyYWRkci5hZGRyZXNzID0gbmV0LT5yby5fbF9h
ZGRyOwotCQkJCXhyYWRkci5hY3RpdmUgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9S
RUFDSEFCTEUpID09IFNDVFBfQUREUl9SRUFDSEFCTEUpOwotCQkJCXhyYWRkci5jb25maXJtZWQg
PSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgPT0gMCk7Ci0JCQkJ
eHJhZGRyLmhlYXJ0YmVhdF9lbmFibGVkID0gKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
Tk9IQikgPT0gMCk7Ci0JCQkJeHJhZGRyLnBvdGVudGlhbGx5X2ZhaWxlZCA9ICgobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1BGKSA9PSBTQ1RQX0FERFJfUEYpOwotCQkJCXhyYWRkci5ydG8g
PSBuZXQtPlJUTzsKLQkJCQl4cmFkZHIubWF4X3BhdGhfcnR4ID0gbmV0LT5mYWlsdXJlX3RocmVz
aG9sZDsKLQkJCQl4cmFkZHIucnR4ID0gbmV0LT5tYXJrZWRfcmV0cmFuczsKLQkJCQl4cmFkZHIu
ZXJyb3JfY291bnRlciA9IG5ldC0+ZXJyb3JfY291bnQ7Ci0JCQkJeHJhZGRyLmN3bmQgPSBuZXQt
PmN3bmQ7Ci0JCQkJeHJhZGRyLmZsaWdodF9zaXplID0gbmV0LT5mbGlnaHRfc2l6ZTsKLQkJCQl4
cmFkZHIubXR1ID0gbmV0LT5tdHU7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAw
OwotCQkJCXhyYWRkci5oZWFydGJlYXRfaW50ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7
Ci0JCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0LT5zc3RocmVzaDsKLSNlbmRpZgotI2Vsc2UKLQkJ
CQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOwotCQkJCXhyYWRkci5oZWFydGJlYXRfaW50
ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7Ci0JCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0
LT5zc3RocmVzaDsKLSNlbmRpZgotCQkJCXhyYWRkci5zdGFydF90aW1lLnR2X3NlYyA9ICh1aW50
MzJfdCluZXQtPnN0YXJ0X3RpbWUudHZfc2VjOwotCQkJCXhyYWRkci5zdGFydF90aW1lLnR2X3Vz
ZWMgPSAodWludDMyX3QpbmV0LT5zdGFydF90aW1lLnR2X3VzZWM7Ci0JCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJCWVycm9yID0gU1lT
Q1RMX09VVChyZXEsICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKLQkJCQlp
ZiAoZXJyb3IpIHsKLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlyZXR1cm4gKGVycm9yKTsK
LQkJCQl9Ci0JCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwotCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQl9Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
Ci0JCQltZW1zZXQoKHZvaWQgKikmeHJhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRy
KSk7Ci0JCQl4cmFkZHIubGFzdCA9IDE7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlT
Q1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4cmFk
ZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKLQkJCWlmIChlcnJvcikgewotCQkJCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJcmV0dXJuIChlcnJvcik7Ci0JCQl9Ci0JCQlTQ1RQ
X0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQl9Ci0JCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7Ci0JCW1lbXNldCgodm9pZCAqKSZ4c3RjYiwgMCwgc2l6ZW9mKHN0cnVj
dCB4c2N0cF90Y2IpKTsKLQkJeHN0Y2IubGFzdCA9IDE7Ci0JCWVycm9yID0gU1lTQ1RMX09VVChy
ZXEsICZ4c3RjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpKTsKLQkJaWYgKGVycm9yKSB7Ci0J
CQlyZXR1cm4gKGVycm9yKTsKLQkJfQotc2tpcDoKLQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwot
CX0KLQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQotCW1lbXNldCgodm9pZCAqKSZ4aW5wY2Is
IDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2IpKTsKLQl4aW5wY2IubGFzdCA9IDE7Ci0JZXJy
b3IgPSBTWVNDVExfT1VUKHJlcSwgJnhpbnBjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9pbnBjYikp
OwotCXJldHVybiAoZXJyb3IpOwotfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMg
aW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZyBTWVNDVExfSEFORExFUl9BUkdT
Ci17Ci0jcHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQotI2Vsc2UKLXN0YXRpYyBpbnQKLXNjdHBf
c3lzY3RsX2hhbmRsZV91ZHBfdHVubmVsaW5nKFNZU0NUTF9IQU5ETEVSX0FSR1MpCi17Ci0jZW5k
aWYKLQlpbnQgZXJyb3I7Ci0JdWludDMyX3Qgb2xkLCBuZXc7Ci0KLQlTQ1RQX0lOUF9JTkZPX1JM
T0NLKCk7Ci0Jb2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCk7
Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JbmV3ID0gb2xkOwotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA8IDEwMDAxMDAKLSNpZmRlZiBWSU1BR0UKLQllcnJvciA9IHZuZXRfc3lzY3RsX2hhbmRs
ZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbHNlCi0JZXJyb3IgPSBzeXNjdGxfaGFuZGxl
X2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotI2VuZGlmCi0jZWxzZQotCWVycm9yID0gc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbmRpZgotCWlmICgoZXJyb3IgPT0g
MCkgJiYKLSNpZiBkZWZpbmVkIChfX0FQUExFX18pCi0JICAgIChyZXEtPm5ld3B0ciAhPSBVU0VS
X0FERFJfTlVMTCkpIHsKLSNlbHNlCi0JICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9JTlBfSU5GT19XTE9DSygpOwot
CQlzY3RwX292ZXJfdWRwX3Jlc3RhcnQoKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0j
ZWxzZQotI2lmIChTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4gPT0gMCkKLQkJaWYgKG5l
dyA+IFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01BWCkgewotI2Vsc2UKLQkJaWYgKChuZXcg
PCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4pIHx8Ci0JCSAgICAobmV3ID4gU0NUUENU
TF9VRFBfVFVOTkVMSU5HX1BPUlRfTUFYKSkgewotI2VuZGlmCi0JCQllcnJvciA9IEVJTlZBTDsK
LQkJfSBlbHNlIHsKLQkJCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQkJCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpID0gbmV3OwotCQkJaWYgKG9sZCAhPSAwKSB7Ci0J
CQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCQl9Ci0JCQlpZiAobmV3ICE9IDApIHsKLQkJCQll
cnJvciA9IHNjdHBfb3Zlcl91ZHBfc3RhcnQoKTsKLQkJCX0KLQkJCVNDVFBfSU5QX0lORk9fV1VO
TE9DSygpOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKLWludCBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2Uoc3RydWN0IGlmbmV0
ICopOwotCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdm13YXJlX2ludGVyZmFjZXMg
U1lTQ1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMikKLQlpbnQg
ZXJyb3I7Ci0JdWludDMyX3Qgb2xkLCBuZXc7Ci0KLQlvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKTsKLQluZXcgPSBvbGQ7Ci0JZXJyb3IgPSBzeXNj
dGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotCWlmICgoZXJyb3IgPT0gMCkgJiYg
KHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewotCQlpZiAoKG5ldyA8IFNDVFBDVExf
SUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX01JTikgfHwKLQkJICAgIChuZXcgPiBTQ1RQQ1RMX0lH
Tk9SRV9WTVdBUkVfSU5URVJGQUNFU19NQVgpKSB7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJfSBl
bHNlIHsKLQkJCWlmICgob2xkID09IDEpICYmIChuZXcgPT0gMCkpIHsKLQkJCQlzY3RwX2FkZF9v
cl9kZWxfaW50ZXJmYWNlcyhzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2UsIDEpOwotCQkJfQotCQkJ
aWYgKChvbGQgPT0gMCkgJiYgKG5ldyA9PSAxKSkgewotCQkJCXNjdHBfYWRkX29yX2RlbF9pbnRl
cmZhY2VzKHNjdHBfaXNfdm13YXJlX2ludGVyZmFjZSwgMCk7Ci0JCQl9Ci0JCQlpZiAob2xkICE9
IG5ldykgewotCQkJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVfdm13YXJlX2ludGVyZmFj
ZXMpID0gbmV3OwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlmCi0K
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV9h
dXRoIFNZU0NUTF9IQU5ETEVSX0FSR1MKLXsKLSNwcmFnbWEgdW51c2VkKGFyZzEsIGFyZzIpCi0j
ZWxzZQotc3RhdGljIGludAotc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgoU1lTQ1RMX0hBTkRMRVJf
QVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJvcjsKLQl1aW50MzJfdCBuZXc7Ci0KLQluZXcgPSBT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUpOwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8
IDEwMDAxMDAKLSNpZmRlZiBWSU1BR0UKLQllcnJvciA9IHZuZXRfc3lzY3RsX2hhbmRsZV9pbnQo
b2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbHNlCi0JZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChv
aWRwLCAmbmV3LCAwLCByZXEpOwotI2VuZGlmCi0jZWxzZQotCWVycm9yID0gc3lzY3RsX2hhbmRs
ZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbmRpZgotCWlmICgoZXJyb3IgPT0gMCkgJiYK
LSNpZiBkZWZpbmVkIChfX0FQUExFX18pCi0JICAgIChyZXEtPm5ld3B0ciAhPSBVU0VSX0FERFJf
TlVMTCkpIHsKLSNlbHNlCi0JICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewotI2VuZGlmCi0j
aWYgKFNDVFBDVExfQVVUSF9FTkFCTEVfTUlOID09IDApCi0JCWlmICgobmV3ID4gU0NUUENUTF9B
VVRIX0VOQUJMRV9NQVgpIHx8Ci0JCSAgICAoKG5ldyA9PSAwKSAmJiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2FzY29uZl9lbmFibGUpID09IDEpKSkgewotI2Vsc2UKLQkJaWYgKChuZXcgPCBTQ1RQ
Q1RMX0FVVEhfRU5BQkxFX01JTikgfHwKLQkJICAgIChuZXcgPiBTQ1RQQ1RMX0FVVEhfRU5BQkxF
X01BWCkgfHwKLQkJICAgICgobmV3ID09IDApICYmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNj
b25mX2VuYWJsZSkgPT0gMSkpKSB7Ci0jZW5kaWYKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVs
c2UgewotCQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IG5ldzsKLQkJfQot
CX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotc3RhdGlj
IGludAotc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiBTWVNDVExfSEFORExFUl9BUkdTCi17Ci0j
cHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQotI2Vsc2UKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3Rs
X2hhbmRsZV9hc2NvbmYoU1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJv
cjsKLQl1aW50MzJfdCBuZXc7Ci0KLQluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25m
X2VuYWJsZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAwMDU2ICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDEwMAotI2lmZGVmIFZJTUFHRQot
CWVycm9yID0gdm5ldF9zeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotI2Vs
c2UKLQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7Ci0jZW5k
aWYKLSNlbHNlCi0JZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEp
OwotI2VuZGlmCi0JaWYgKChlcnJvciA9PSAwKSAmJgotI2lmIGRlZmluZWQgKF9fQVBQTEVfXykK
LQkgICAgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewotI2Vsc2UKLQkgICAgKHJl
cS0+bmV3cHRyICE9IE5VTEwpKSB7Ci0jZW5kaWYKLSNpZiAoU0NUUENUTF9BU0NPTkZfRU5BQkxF
X01JTiA9PSAwKQotCQlpZiAoKG5ldyA+IFNDVFBDVExfQVNDT05GX0VOQUJMRV9NQVgpIHx8Ci0J
CSAgICAoKG5ldyA9PSAxKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9
PSAwKSkpIHsKLSNlbHNlCi0JCWlmICgobmV3IDwgU0NUUENUTF9BU0NPTkZfRU5BQkxFX01JTikg
fHwKLQkJICAgIChuZXcgPiBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYKSB8fAotCQkgICAgKChu
ZXcgPT0gMSkgJiYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSkgPT0gMCkpKSB7
Ci0jZW5kaWYKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgewotCQkJU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2FzY29uZl9lbmFibGUpID0gbmV3OwotCQl9Ci0JfQotCXJldHVybiAoZXJyb3Ip
OwotfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9o
YW5kbGVfc3RhdHMgU1lTQ1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQob2lkcCwg
YXJnMSwgYXJnMikKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfc3RhdHMo
U1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJvcjsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQ
VV9TVEFUKQotCXN0cnVjdCBzY3Rwc3RhdCAqc2Fycnk7Ci0Jc3RydWN0IHNjdHBzdGF0IHNiOwot
CWludCBjcHU7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cHN0YXQgc2JfdGVtcDsKLSNlbmRpZgotCi0j
aWYgZGVmaW5lZCAoX19BUFBMRV9fKQotCWlmICgocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05V
TEwpICYmCi0jZWxzZQotCWlmICgocmVxLT5uZXdwdHIgIT0gTlVMTCkgJiYKLSNlbmRpZgotCSAg
ICAocmVxLT5uZXdsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpKSB7Ci0JCXJldHVybiAo
RUlOVkFMKTsKLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQltZW1zZXQoJnNiX3RlbXAs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQotCWlmIChyZXEtPm5ld3B0ciAhPSBOVUxM
KSB7Ci0JCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgJnNiX3RlbXAsIHNpemVvZihzdHJ1Y3Qgc2N0
cHN0YXQpKTsKLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9Ci0J
fQotI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQotCW1l
bXNldCgmc2IsIDAsIHNpemVvZihzYikpOwotCWZvciAoY3B1ID0gMDsgY3B1IDwgbXBfbWF4aWQ7
IGNwdSsrKSB7Ci0JCXNhcnJ5ID0gJlNDVFBfQkFTRV9TVEFUU1tjcHVdOwotCQlpZiAoc2Fycnkt
PnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYyA+IHNiLnNjdHBzX2Rpc2NvbnRpbnVpdHl0
aW1lLnR2X3NlYykgewotCQkJc2Iuc2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfc2VjID0gc2Fy
cnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYzsKLQkJCXNiLnNjdHBzX2Rpc2NvbnRp
bnVpdHl0aW1lLnR2X3VzZWMgPSBzYXJyeS0+c2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfdXNl
YzsKLQkJfQotCQlzYi5zY3Rwc19jdXJyZXN0YWIgKz0gc2FycnktPnNjdHBzX2N1cnJlc3RhYjsK
LQkJc2Iuc2N0cHNfYWN0aXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX2FjdGl2ZWVzdGFiOwotCQlz
Yi5zY3Rwc19yZXN0YXJ0ZXN0YWIgKz0gc2FycnktPnNjdHBzX3Jlc3RhcnRlc3RhYjsKLQkJc2Iu
c2N0cHNfY29sbGlzaW9uZXN0YWIgKz0gc2FycnktPnNjdHBzX2NvbGxpc2lvbmVzdGFiOwotCQlz
Yi5zY3Rwc19wYXNzaXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX3Bhc3NpdmVlc3RhYjsKLQkJc2Iu
c2N0cHNfYWJvcnRlZCArPSBzYXJyeS0+c2N0cHNfYWJvcnRlZDsKLQkJc2Iuc2N0cHNfc2h1dGRv
d24gKz0gc2FycnktPnNjdHBzX3NodXRkb3duOwotCQlzYi5zY3Rwc19vdXRvZnRoZWJsdWUgKz0g
c2FycnktPnNjdHBzX291dG9mdGhlYmx1ZTsKLQkJc2Iuc2N0cHNfY2hlY2tzdW1lcnJvcnMgKz0g
c2FycnktPnNjdHBzX2NoZWNrc3VtZXJyb3JzOwotCQlzYi5zY3Rwc19vdXRjb250cm9sY2h1bmtz
ICs9IHNhcnJ5LT5zY3Rwc19vdXRjb250cm9sY2h1bmtzOwotCQlzYi5zY3Rwc19vdXRvcmRlcmNo
dW5rcyArPSBzYXJyeS0+c2N0cHNfb3V0b3JkZXJjaHVua3M7Ci0JCXNiLnNjdHBzX291dHVub3Jk
ZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX291dHVub3JkZXJjaHVua3M7Ci0JCXNiLnNjdHBzX2lu
Y29udHJvbGNodW5rcyArPSBzYXJyeS0+c2N0cHNfaW5jb250cm9sY2h1bmtzOwotCQlzYi5zY3Rw
c19pbm9yZGVyY2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19pbm9yZGVyY2h1bmtzOwotCQlzYi5zY3Rw
c19pbnVub3JkZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX2ludW5vcmRlcmNodW5rczsKLQkJc2Iu
c2N0cHNfZnJhZ3Vzcm1zZ3MgKz0gc2FycnktPnNjdHBzX2ZyYWd1c3Jtc2dzOwotCQlzYi5zY3Rw
c19yZWFzbXVzcm1zZ3MgKz0gc2FycnktPnNjdHBzX3JlYXNtdXNybXNnczsKLQkJc2Iuc2N0cHNf
b3V0cGFja2V0cyArPSBzYXJyeS0+c2N0cHNfb3V0cGFja2V0czsKLQkJc2Iuc2N0cHNfaW5wYWNr
ZXRzICs9IHNhcnJ5LT5zY3Rwc19pbnBhY2tldHM7Ci0JCXNiLnNjdHBzX3JlY3ZwYWNrZXRzICs9
IHNhcnJ5LT5zY3Rwc19yZWN2cGFja2V0czsKLQkJc2Iuc2N0cHNfcmVjdmRhdGFncmFtcyArPSBz
YXJyeS0+c2N0cHNfcmVjdmRhdGFncmFtczsKLQkJc2Iuc2N0cHNfcmVjdnBrdHdpdGhkYXRhICs9
IHNhcnJ5LT5zY3Rwc19yZWN2cGt0d2l0aGRhdGE7Ci0JCXNiLnNjdHBzX3JlY3ZzYWNrcyArPSBz
YXJyeS0+c2N0cHNfcmVjdnNhY2tzOwotCQlzYi5zY3Rwc19yZWN2ZGF0YSArPSBzYXJyeS0+c2N0
cHNfcmVjdmRhdGE7Ci0JCXNiLnNjdHBzX3JlY3ZkdXBkYXRhICs9IHNhcnJ5LT5zY3Rwc19yZWN2
ZHVwZGF0YTsKLQkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdCArPSBzYXJyeS0+c2N0cHNfcmVjdmhl
YXJ0YmVhdDsKLQkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdGFjayArPSBzYXJyeS0+c2N0cHNfcmVj
dmhlYXJ0YmVhdGFjazsKLQkJc2Iuc2N0cHNfcmVjdmVjbmUgKz0gc2FycnktPnNjdHBzX3JlY3Zl
Y25lOwotCQlzYi5zY3Rwc19yZWN2YXV0aCArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGg7Ci0JCXNi
LnNjdHBzX3JlY3ZhdXRobWlzc2luZyArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGhtaXNzaW5nOwot
CQlzYi5zY3Rwc19yZWN2aXZhbGhtYWNpZCArPSBzYXJyeS0+c2N0cHNfcmVjdml2YWxobWFjaWQ7
Ci0JCXNiLnNjdHBzX3JlY3ZpdmFsa2V5aWQgKz0gc2FycnktPnNjdHBzX3JlY3ZpdmFsa2V5aWQ7
Ci0JCXNiLnNjdHBzX3JlY3ZhdXRoZmFpbGVkICs9IHNhcnJ5LT5zY3Rwc19yZWN2YXV0aGZhaWxl
ZDsKLQkJc2Iuc2N0cHNfcmVjdmV4cHJlc3MgKz0gc2FycnktPnNjdHBzX3JlY3ZleHByZXNzOwot
CQlzYi5zY3Rwc19yZWN2ZXhwcmVzc20gKz0gc2FycnktPnNjdHBzX3JlY3ZleHByZXNzbTsKLQkJ
c2Iuc2N0cHNfcmVjdm5vY3JjICs9IHNhcnJ5LT5zY3Rwc19yZWN2bm9jcmM7Ci0JCXNiLnNjdHBz
X3JlY3Zzd2NyYyArPSBzYXJyeS0+c2N0cHNfcmVjdnN3Y3JjOwotCQlzYi5zY3Rwc19yZWN2aHdj
cmMgKz0gc2FycnktPnNjdHBzX3JlY3Zod2NyYzsKLQkJc2Iuc2N0cHNfc2VuZHBhY2tldHMgKz0g
c2FycnktPnNjdHBzX3NlbmRwYWNrZXRzOwotCQlzYi5zY3Rwc19zZW5kc2Fja3MgKz0gc2Fycnkt
PnNjdHBzX3NlbmRzYWNrczsKLQkJc2Iuc2N0cHNfc2VuZGRhdGEgKz0gc2FycnktPnNjdHBzX3Nl
bmRkYXRhOwotCQlzYi5zY3Rwc19zZW5kcmV0cmFuc2RhdGEgKz0gc2FycnktPnNjdHBzX3NlbmRy
ZXRyYW5zZGF0YTsKLQkJc2Iuc2N0cHNfc2VuZGZhc3RyZXRyYW5zICs9IHNhcnJ5LT5zY3Rwc19z
ZW5kZmFzdHJldHJhbnM7Ci0JCXNiLnNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnMgKz0gc2Fycnkt
PnNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnM7Ci0JCXNiLnNjdHBzX3NlbmRoZWFydGJlYXQgKz0g
c2FycnktPnNjdHBzX3NlbmRoZWFydGJlYXQ7Ci0JCXNiLnNjdHBzX3NlbmRlY25lICs9IHNhcnJ5
LT5zY3Rwc19zZW5kZWNuZTsKLQkJc2Iuc2N0cHNfc2VuZGF1dGggKz0gc2FycnktPnNjdHBzX3Nl
bmRhdXRoOwotCQlzYi5zY3Rwc19zZW5kZXJyb3JzICs9IHNhcnJ5LT5zY3Rwc19zZW5kZXJyb3Jz
OwotCQlzYi5zY3Rwc19zZW5kbm9jcmMgKz0gc2FycnktPnNjdHBzX3NlbmRub2NyYzsKLQkJc2Iu
c2N0cHNfc2VuZHN3Y3JjICs9IHNhcnJ5LT5zY3Rwc19zZW5kc3djcmM7Ci0JCXNiLnNjdHBzX3Nl
bmRod2NyYyArPSBzYXJyeS0+c2N0cHNfc2VuZGh3Y3JjOwotCQlzYi5zY3Rwc19wZHJwZm1ib3gg
Kz0gc2FycnktPnNjdHBzX3BkcnBmbWJveDsKLQkJc2Iuc2N0cHNfcGRycGZlaG9zICs9IHNhcnJ5
LT5zY3Rwc19wZHJwZmVob3M7Ci0JCXNiLnNjdHBzX3BkcnBtYmRhICs9IHNhcnJ5LT5zY3Rwc19w
ZHJwbWJkYTsKLQkJc2Iuc2N0cHNfcGRycG1iY3QgKz0gc2FycnktPnNjdHBzX3BkcnBtYmN0Owot
CQlzYi5zY3Rwc19wZHJwYndycHQgKz0gc2FycnktPnNjdHBzX3BkcnBid3JwdDsKLQkJc2Iuc2N0
cHNfcGRycGNydXB0ICs9IHNhcnJ5LT5zY3Rwc19wZHJwY3J1cHQ7Ci0JCXNiLnNjdHBzX3BkcnBu
ZWRhdCArPSBzYXJyeS0+c2N0cHNfcGRycG5lZGF0OwotCQlzYi5zY3Rwc19wZHJwcGRicmsgKz0g
c2FycnktPnNjdHBzX3BkcnBwZGJyazsKLQkJc2Iuc2N0cHNfcGRycHRzbm5mICs9IHNhcnJ5LT5z
Y3Rwc19wZHJwdHNubmY7Ci0JCXNiLnNjdHBzX3BkcnBkbmZuZCArPSBzYXJyeS0+c2N0cHNfcGRy
cGRuZm5kOwotCQlzYi5zY3Rwc19wZHJwZGl3bnAgKz0gc2FycnktPnNjdHBzX3BkcnBkaXducDsK
LQkJc2Iuc2N0cHNfcGRycGRpenJ3ICs9IHNhcnJ5LT5zY3Rwc19wZHJwZGl6cnc7Ci0JCXNiLnNj
dHBzX3BkcnBiYWRkICs9IHNhcnJ5LT5zY3Rwc19wZHJwYmFkZDsKLQkJc2Iuc2N0cHNfcGRycG1h
cmsgKz0gc2FycnktPnNjdHBzX3BkcnBtYXJrOwotCQlzYi5zY3Rwc190aW1vaXRlcmF0b3IgKz0g
c2FycnktPnNjdHBzX3RpbW9pdGVyYXRvcjsKLQkJc2Iuc2N0cHNfdGltb2RhdGEgKz0gc2Fycnkt
PnNjdHBzX3RpbW9kYXRhOwotCQlzYi5zY3Rwc190aW1vd2luZG93cHJvYmUgKz0gc2FycnktPnNj
dHBzX3RpbW93aW5kb3dwcm9iZTsKLQkJc2Iuc2N0cHNfdGltb2luaXQgKz0gc2FycnktPnNjdHBz
X3RpbW9pbml0OwotCQlzYi5zY3Rwc190aW1vc2FjayArPSBzYXJyeS0+c2N0cHNfdGltb3NhY2s7
Ci0JCXNiLnNjdHBzX3RpbW9zaHV0ZG93biArPSBzYXJyeS0+c2N0cHNfdGltb3NodXRkb3duOwot
CQlzYi5zY3Rwc190aW1vaGVhcnRiZWF0ICs9IHNhcnJ5LT5zY3Rwc190aW1vaGVhcnRiZWF0Owot
CQlzYi5zY3Rwc190aW1vY29va2llICs9IHNhcnJ5LT5zY3Rwc190aW1vY29va2llOwotCQlzYi5z
Y3Rwc190aW1vc2VjcmV0ICs9IHNhcnJ5LT5zY3Rwc190aW1vc2VjcmV0OwotCQlzYi5zY3Rwc190
aW1vcGF0aG10dSArPSBzYXJyeS0+c2N0cHNfdGltb3BhdGhtdHU7Ci0JCXNiLnNjdHBzX3RpbW9z
aHV0ZG93bmFjayArPSBzYXJyeS0+c2N0cHNfdGltb3NodXRkb3duYWNrOwotCQlzYi5zY3Rwc190
aW1vc2h1dGRvd25ndWFyZCArPSBzYXJyeS0+c2N0cHNfdGltb3NodXRkb3duZ3VhcmQ7Ci0JCXNi
LnNjdHBzX3RpbW9zdHJtcnN0ICs9IHNhcnJ5LT5zY3Rwc190aW1vc3RybXJzdDsKLQkJc2Iuc2N0
cHNfdGltb2Vhcmx5ZnIgKz0gc2FycnktPnNjdHBzX3RpbW9lYXJseWZyOwotCQlzYi5zY3Rwc190
aW1vYXNjb25mICs9IHNhcnJ5LT5zY3Rwc190aW1vYXNjb25mOwotCQlzYi5zY3Rwc190aW1vZGVs
cHJpbSArPSBzYXJyeS0+c2N0cHNfdGltb2RlbHByaW07Ci0JCXNiLnNjdHBzX3RpbW9hdXRvY2xv
c2UgKz0gc2FycnktPnNjdHBzX3RpbW9hdXRvY2xvc2U7Ci0JCXNiLnNjdHBzX3RpbW9hc3NvY2tp
bGwgKz0gc2FycnktPnNjdHBzX3RpbW9hc3NvY2tpbGw7Ci0JCXNiLnNjdHBzX3RpbW9pbnBraWxs
ICs9IHNhcnJ5LT5zY3Rwc190aW1vaW5wa2lsbDsKLQkJc2Iuc2N0cHNfaGRyb3BzICs9IHNhcnJ5
LT5zY3Rwc19oZHJvcHM7Ci0JCXNiLnNjdHBzX2JhZHN1bSArPSBzYXJyeS0+c2N0cHNfYmFkc3Vt
OwotCQlzYi5zY3Rwc19ub3BvcnQgKz0gc2FycnktPnNjdHBzX25vcG9ydDsKLQkJc2Iuc2N0cHNf
YmFkdnRhZyArPSBzYXJyeS0+c2N0cHNfYmFkdnRhZzsKLQkJc2Iuc2N0cHNfYmFkc2lkICs9IHNh
cnJ5LT5zY3Rwc19iYWRzaWQ7Ci0JCXNiLnNjdHBzX25vbWVtICs9IHNhcnJ5LT5zY3Rwc19ub21l
bTsKLQkJc2Iuc2N0cHNfZmFzdHJldHJhbnNpbnJ0dCArPSBzYXJyeS0+c2N0cHNfZmFzdHJldHJh
bnNpbnJ0dDsKLQkJc2Iuc2N0cHNfbWFya2VkcmV0cmFucyArPSBzYXJyeS0+c2N0cHNfbWFya2Vk
cmV0cmFuczsKLQkJc2Iuc2N0cHNfbmFnbGVzZW50ICs9IHNhcnJ5LT5zY3Rwc19uYWdsZXNlbnQ7
Ci0JCXNiLnNjdHBzX25hZ2xlcXVldWVkICs9IHNhcnJ5LT5zY3Rwc19uYWdsZXF1ZXVlZDsKLQkJ
c2Iuc2N0cHNfbWF4YnVyc3RxdWV1ZWQgKz0gc2FycnktPnNjdHBzX21heGJ1cnN0cXVldWVkOwot
CQlzYi5zY3Rwc19pZm5vbWVtcXVldWVkICs9IHNhcnJ5LT5zY3Rwc19pZm5vbWVtcXVldWVkOwot
CQlzYi5zY3Rwc193aW5kb3dwcm9iZWQgKz0gc2FycnktPnNjdHBzX3dpbmRvd3Byb2JlZDsKLQkJ
c2Iuc2N0cHNfbG93bGV2ZWxlcnIgKz0gc2FycnktPnNjdHBzX2xvd2xldmVsZXJyOwotCQlzYi5z
Y3Rwc19sb3dsZXZlbGVycnVzciArPSBzYXJyeS0+c2N0cHNfbG93bGV2ZWxlcnJ1c3I7Ci0JCXNi
LnNjdHBzX2RhdGFkcm9wY2hrbG10ICs9IHNhcnJ5LT5zY3Rwc19kYXRhZHJvcGNoa2xtdDsKLQkJ
c2Iuc2N0cHNfZGF0YWRyb3Byd25kICs9IHNhcnJ5LT5zY3Rwc19kYXRhZHJvcHJ3bmQ7Ci0JCXNi
LnNjdHBzX2VjbmVyZWR1Y2VkY3duZCArPSBzYXJyeS0+c2N0cHNfZWNuZXJlZHVjZWRjd25kOwot
CQlzYi5zY3Rwc192dGFnZXhwcmVzcyArPSBzYXJyeS0+c2N0cHNfdnRhZ2V4cHJlc3M7Ci0JCXNi
LnNjdHBzX3Z0YWdib2d1cyArPSBzYXJyeS0+c2N0cHNfdnRhZ2JvZ3VzOwotCQlzYi5zY3Rwc19w
cmltYXJ5X3JhbmRyeSArPSBzYXJyeS0+c2N0cHNfcHJpbWFyeV9yYW5kcnk7Ci0JCXNiLnNjdHBz
X2NtdF9yYW5kcnkgKz0gc2FycnktPnNjdHBzX2NtdF9yYW5kcnk7Ci0JCXNiLnNjdHBzX3Nsb3dw
YXRoX3NhY2sgKz0gc2FycnktPnNjdHBzX3Nsb3dwYXRoX3NhY2s7Ci0JCXNiLnNjdHBzX3d1X3Nh
Y2tzX3NlbnQgKz0gc2FycnktPnNjdHBzX3d1X3NhY2tzX3NlbnQ7Ci0JCXNiLnNjdHBzX3NlbmRz
X3dpdGhfZmxhZ3MgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dpdGhfZmxhZ3M7Ci0JCXNiLnNjdHBz
X3NlbmRzX3dpdGhfdW5vcmQgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dpdGhfdW5vcmQ7Ci0JCXNi
LnNjdHBzX3NlbmRzX3dpdGhfZW9mICs9IHNhcnJ5LT5zY3Rwc19zZW5kc193aXRoX2VvZjsKLQkJ
c2Iuc2N0cHNfc2VuZHNfd2l0aF9hYm9ydCArPSBzYXJyeS0+c2N0cHNfc2VuZHNfd2l0aF9hYm9y
dDsKLQkJc2Iuc2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHMgKz0gc2FycnktPnNjdHBzX3Byb3Rv
Y29sX2RyYWluX2NhbGxzOwotCQlzYi5zY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZSArPSBzYXJy
eS0+c2N0cHNfcHJvdG9jb2xfZHJhaW5zX2RvbmU7Ci0JCXNiLnNjdHBzX3JlYWRfcGVla3MgKz0g
c2FycnktPnNjdHBzX3JlYWRfcGVla3M7Ci0JCXNiLnNjdHBzX2NhY2hlZF9jaGsgKz0gc2Fycnkt
PnNjdHBzX2NhY2hlZF9jaGs7Ci0JCXNiLnNjdHBzX2NhY2hlZF9zdHJtb3EgKz0gc2FycnktPnNj
dHBzX2NhY2hlZF9zdHJtb3E7Ci0JCXNiLnNjdHBzX2xlZnRfYWJhbmRvbiArPSBzYXJyeS0+c2N0
cHNfbGVmdF9hYmFuZG9uOwotCQlzYi5zY3Rwc19zZW5kX2J1cnN0X2F2b2lkICs9IHNhcnJ5LT5z
Y3Rwc19zZW5kX2J1cnN0X2F2b2lkOwotCQlzYi5zY3Rwc19zZW5kX2N3bmRfYXZvaWQgKz0gc2Fy
cnktPnNjdHBzX3NlbmRfY3duZF9hdm9pZDsKLQkJc2Iuc2N0cHNfZndkdHNuX21hcF9vdmVyICs9
IHNhcnJ5LT5zY3Rwc19md2R0c25fbWFwX292ZXI7Ci0JCWlmIChyZXEtPm5ld3B0ciAhPSBOVUxM
KSB7Ci0JCQltZW1jcHkoc2FycnksICZzYl90ZW1wLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7
Ci0JCX0KLQl9Ci0JZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnNiLCBzaXplb2Yoc3RydWN0IHNj
dHBzdGF0KSk7Ci0jZWxzZQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZTQ1RQX0JBU0VfU1RB
VFMsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQlpZiAoZXJyb3IgIT0gMCkgewotCQlyZXR1
cm4gKGVycm9yKTsKLQl9Ci0JaWYgKHJlcS0+bmV3cHRyICE9IE5VTEwpIHsKLQkJbWVtY3B5KCZT
Q1RQX0JBU0VfU1RBVFMsICZzYl90ZW1wLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7Ci0JfQot
I2VuZGlmCi0jZWxzZQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZTQ1RQX0JBU0VfU1RBVFMs
IHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLSNlbmRpZgotCXJldHVybiAoZXJyb3IpOwotfQot
Ci0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2cgU1lTQ1RMX0hBTkRM
RVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMiwgb2lkcCkKLSNlbHNlCi1zdGF0
aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nKFNZU0NUTF9IQU5ETEVSX0FSR1Mp
Ci17Ci0jZW5kaWYKLQlpbnQgZXJyb3I7Ci0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCWVy
cm9yID0gU1lTQ1RMX09VVChyZXEsIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzaXplb2Yo
c3RydWN0IHNjdHBfbG9nKSk7Ci0jZWxzZQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOwotI2VuZGlm
Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBp
bnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xlYXIgU1lTQ1RMX0hBTkRMRVJfQVJH
UwotewotI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMiwgcmVxLCBvaWRwKQotI2Vsc2UKLXN0YXRp
YyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xlYXIoU1lTQ1RMX0hBTkRMRVJf
QVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJvciA9IDA7Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKLQlpbnQgdmFsdWUgPSAwOwotCi0JaWYgKHJlcS0+bmV3X2RhdGEgPT0gTlVMTCkgewotCQly
ZXR1cm4gKGVycm9yKTsKLQl9Ci0JZXJyb3IgPSBTWVNDVExfSU4ocmVxLCAmdmFsdWUsIHNpemVv
ZihpbnQpKTsKLQlpZiAoZXJyb3IgPT0gMCAmJiB2YWx1ZSAhPSAwICYmIFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2cpICE9IE5VTEwpIHsKLQkJbWVtc2V0KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7Ci0JfQotI2Vsc2UKLQotCW1lbXNldCgm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsK
LSNlbmRpZgotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
I2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEw
MDAxMDAKLSNpZmRlZiBWSU1BR0UKLSNkZWZpbmUgU0NUUF9VSU5UX1NZU0NUTChuYW1lLCB2YXJf
bmFtZSwgcHJlZml4KQkJCVwKLQlzdGF0aWMgaW50CQkJCQkJCVwKLQlzY3RwX3N5c2N0bF9oYW5k
bGVfIyNtaWJfbmFtZShTWVNDVExfSEFORExFUl9BUkdTKQkJXAotCXsJCQkJCQkJCVwKLQkJaW50
IGVycm9yOwkJCQkJCVwKLQkJdWludDMyX3QgbmV3OwkJCQkJCVwKLQkJCQkJCQkJCVwKLQkJbmV3
ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAotCQllcnJvciA9IHZuZXRfc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsJXAotCQlpZiAoKGVycm9yID09IDApICYm
IChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewkJXAotCQkJaWYgKChuZXcgPCBwcmVmaXgjI19NSU4p
IHx8CQkJXAotCQkJICAgIChuZXcgPiBwcmVmaXgjI19NQVgpKSB7CQkJXAotCQkJCWVycm9yID0g
RUlOVkFMOwkJCQlcCi0JCQl9IGVsc2UgewkJCQkJXAotCQkJCVNDVFBfQkFTRV9TWVNDVEwodmFy
X25hbWUpID0gbmV3OwlcCi0JCQl9CQkJCQkJXAotCQl9CQkJCQkJCVwKLQkJcmV0dXJuIChlcnJv
cik7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlTWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lE
X0FVVE8sIG1pYl9uYW1lLAkJCVwKLQkgICAgICAgICAgICAgICAgIENUTFRZUEVfVUlOVHxDVExG
TEFHX1JXLCBOVUxMLCAwLAkJXAotCSAgICAgICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxl
XyMjbWliX25hbWUsICJVSSIsIHByZWZpeCMjX0RFU0MpOwotI2Vsc2UKLSNkZWZpbmUgU0NUUF9V
SU5UX1NZU0NUTChtaWJfbmFtZSwgdmFyX25hbWUsIHByZWZpeCkJCQlcCi0Jc3RhdGljIGludAkJ
CQkJCQlcCi0Jc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUoU1lTQ1RMX0hBTkRMRVJfQVJH
UykJCVwKLQl7CQkJCQkJCQlcCi0JCWludCBlcnJvcjsJCQkJCQlcCi0JCXVpbnQzMl90IG5ldzsJ
CQkJCQlcCi0JCQkJCQkJCQlcCi0JCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpOwkJ
CVwKLQkJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwkJXAot
CQlpZiAoKGVycm9yID09IDApICYmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewkJXAotCQkJaWYg
KChuZXcgPCBwcmVmaXgjI19NSU4pIHx8CQkJXAotCQkJICAgIChuZXcgPiBwcmVmaXgjI19NQVgp
KSB7CQkJXAotCQkJCWVycm9yID0gRUlOVkFMOwkJCQlcCi0JCQl9IGVsc2UgewkJCQkJXAotCQkJ
CVNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpID0gbmV3OwlcCi0JCQl9CQkJCQkJXAotCQl9CQkJ
CQkJCVwKLQkJcmV0dXJuIChlcnJvcik7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlTWVNDVExfUFJP
QyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIG1pYl9uYW1lLAkJCVwKLQkgICAgICAgICAgICAg
ICAgIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywgTlVMTCwgMCwJXAotCSAg
ICAgICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJVSSIsIHByZWZp
eCMjX0RFU0MpOwotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBTQ1RQX1VJTlRfU1lTQ1RMKG1pYl9u
YW1lLCB2YXJfbmFtZSwgcHJlZml4KQkJCVwKLQlzdGF0aWMgaW50CQkJCQkJCVwKLQlzY3RwX3N5
c2N0bF9oYW5kbGVfIyNtaWJfbmFtZShTWVNDVExfSEFORExFUl9BUkdTKQkJXAotCXsJCQkJCQkJ
CVwKLQkJaW50IGVycm9yOwkJCQkJCVwKLQkJdWludDMyX3QgbmV3OwkJCQkJCVwKLQkJCQkJCQkJ
CVwKLQkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAotCQllcnJvciA9IHN5
c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CQlcCi0JCWlmICgoZXJyb3IgPT0g
MCkgJiYgKHJlcS0+bmV3cHRyICE9IE5VTEwpKSB7CQlcCi0JCQlpZiAoKG5ldyA8IHByZWZpeCMj
X01JTikgfHwJCQlcCi0JCQkgICAgKG5ldyA+IHByZWZpeCMjX01BWCkpIHsJCQlcCi0JCQkJZXJy
b3IgPSBFSU5WQUw7CQkJCVwKLQkJCX0gZWxzZSB7CQkJCQlcCi0JCQkJU0NUUF9CQVNFX1NZU0NU
TCh2YXJfbmFtZSkgPSBuZXc7CVwKLQkJCX0JCQkJCQlcCi0JCX0JCQkJCQkJXAotCQlyZXR1cm4g
KGVycm9yKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3Rw
LCBPSURfQVVUTywgbWliX25hbWUsCQkJXAotCSAgICAgICAgICAgICAgICAgQ1RMRkxBR19WTkVU
fENUTFRZUEVfVUlOVHxDVExGTEFHX1JXLCBOVUxMLCAwLAlcCi0JICAgICAgICAgICAgICAgICBz
Y3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZSwgIlVJIiwgcHJlZml4IyNfREVTQyk7Ci0jZW5k
aWYKLSNlbHNlCi0jZGVmaW5lIFNDVFBfVUlOVF9TWVNDVEwobWliX25hbWUsIHZhcl9uYW1lLCBw
cmVmaXgpCQkJXAotCXN0YXRpYyBpbnQJCQkJCQkJXAotCXNjdHBfc3lzY3RsX2hhbmRsZV8jI21p
Yl9uYW1lKHN0cnVjdCBzeXNjdGxfb2lkICpvaWRwLAkJXAotCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqYXJnMSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwJXAotCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGFyZzIgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCVwKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzeXNjdGxfcmVxICpyZXEpCQlcCi0JewkJCQkJ
CQkJXAotCQlpbnQgZXJyb3I7CQkJCQkJXAotCQl1aW50MzJfdCBuZXc7CQkJCQkJXAotCQkJCQkJ
CQkJXAotCQluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKTsJCQlcCi0JCWVycm9yID0g
c3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsJCVwKLQkJaWYgKChlcnJvciA9
PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpKSB7CVwKLQkJCWlmICgobmV3
IDwgcHJlZml4IyNfTUlOKSB8fAkJCVwKLQkJCSAgICAobmV3ID4gcHJlZml4IyNfTUFYKSkgewkJ
CVwKLQkJCQllcnJvciA9IEVJTlZBTDsJCQkJXAotCQkJfSBlbHNlIHsJCQkJCVwKLQkJCQlTQ1RQ
X0JBU0VfU1lTQ1RMKHZhcl9uYW1lKSA9IG5ldzsJXAotCQkJfQkJCQkJCVwKLQkJfQkJCQkJCQlc
Ci0JCXJldHVybiAoZXJyb3IpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JU1lTQ1RMX1BST0MoX25l
dF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBtaWJfbmFtZSwJCQlcCi0JICAgICAgICAgICAgQ1RMVFlQ
RV9JTlQgfCBDVExGTEFHX1JXLCBOVUxMLCAwLAkJCVwKLQkgICAgICAgICAgICBzY3RwX3N5c2N0
bF9oYW5kbGVfIyNtaWJfbmFtZSwgIkkiLCBwcmVmaXgjI19ERVNDKTsKLSNkZWZpbmUgQ1RMVFlQ
RV9VSU5UIENUTFRZUEVfSU5UCi0jZGVmaW5lIENUTEZMQUdfVk5FVCAwCi0jZW5kaWYKLQotLyoK
LSAqIHN5c2N0bCBkZWZpbml0aW9ucwotICovCi0KLVNDVFBfVUlOVF9TWVNDVEwoc2VuZHNwYWNl
LCBzY3RwX3NlbmRzcGFjZSwgU0NUUENUTF9NQVhER1JBTSkKLVNDVFBfVUlOVF9TWVNDVEwocmVj
dnNwYWNlLCBzY3RwX3JlY3ZzcGFjZSwgU0NUUENUTF9SRUNWU1BBQ0UpCi1TQ1RQX1VJTlRfU1lT
Q1RMKGF1dG9fYXNjb25mLCBzY3RwX2F1dG9fYXNjb25mLCBTQ1RQQ1RMX0FVVE9BU0NPTkYpCi1T
Q1RQX1VJTlRfU1lTQ1RMKGVjbl9lbmFibGUsIHNjdHBfZWNuX2VuYWJsZSwgU0NUUENUTF9FQ05f
RU5BQkxFKQotU0NUUF9VSU5UX1NZU0NUTChwcl9lbmFibGUsIHNjdHBfcHJfZW5hYmxlLCBTQ1RQ
Q1RMX1BSX0VOQUJMRSkKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgYXV0
aF9lbmFibGUsIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywKLSAgICAgICAg
ICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hdXRoLCAiSVUiLCBTQ1RQQ1RMX0FVVEhf
RU5BQkxFX0RFU0MpOwotU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBhc2Nv
bmZfZW5hYmxlLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCi0gICAgICAg
ICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfYXNjb25mLCAiSVUiLCBTQ1RQQ1RMX0FT
Q09ORl9FTkFCTEVfREVTQyk7Ci1TQ1RQX1VJTlRfU1lTQ1RMKHJlY29uZmlnX2VuYWJsZSwgc2N0
cF9yZWNvbmZpZ19lbmFibGUsIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFKQotU0NUUF9VSU5UX1NZ
U0NUTChucnNhY2tfZW5hYmxlLCBzY3RwX25yc2Fja19lbmFibGUsIFNDVFBDVExfTlJTQUNLX0VO
QUJMRSkKLVNDVFBfVUlOVF9TWVNDVEwocGt0ZHJvcF9lbmFibGUsIHNjdHBfcGt0ZHJvcF9lbmFi
bGUsIFNDVFBDVExfUEtURFJPUF9FTkFCTEUpCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYg
IWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi1TQ1RQX1VJTlRfU1lTQ1RMKGxvb3BiYWNrX25v
Y3N1bSwgc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrLCBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTSkK
LSNlbmRpZgotI2VuZGlmCi1TQ1RQX1VJTlRfU1lTQ1RMKHBlZXJfY2hrb2gsIHNjdHBfcGVlcl9j
aHVua19vaCwgU0NUUENUTF9QRUVSX0NIS09IKQotU0NUUF9VSU5UX1NZU0NUTChtYXhidXJzdCwg
c2N0cF9tYXhfYnVyc3RfZGVmYXVsdCwgU0NUUENUTF9NQVhCVVJTVCkKLVNDVFBfVUlOVF9TWVND
VEwoZnJfbWF4YnVyc3QsIHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQsIFNDVFBDVExfRlJNQVhC
VVJTVCkKLVNDVFBfVUlOVF9TWVNDVEwobWF4Y2h1bmtzLCBzY3RwX21heF9jaHVua3Nfb25fcXVl
dWUsIFNDVFBDVExfTUFYQ0hVTktTKQotU0NUUF9VSU5UX1NZU0NUTCh0Y2JoYXNoc2l6ZSwgc2N0
cF9oYXNodGJsc2l6ZSwgU0NUUENUTF9UQ0JIQVNIU0laRSkKLVNDVFBfVUlOVF9TWVNDVEwocGNi
aGFzaHNpemUsIHNjdHBfcGNidGJsc2l6ZSwgU0NUUENUTF9QQ0JIQVNIU0laRSkKLVNDVFBfVUlO
VF9TWVNDVEwobWluX3NwbGl0X3BvaW50LCBzY3RwX21pbl9zcGxpdF9wb2ludCwgU0NUUENUTF9N
SU5fU1BMSVRfUE9JTlQpCi1TQ1RQX1VJTlRfU1lTQ1RMKGNodW5rc2NhbGUsIHNjdHBfY2h1bmtz
Y2FsZSwgU0NUUENUTF9DSFVOS1NDQUxFKQotU0NUUF9VSU5UX1NZU0NUTChkZWxheWVkX3NhY2tf
dGltZSwgc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX0RFTEFZRURfU0FD
S19USU1FKQotU0NUUF9VSU5UX1NZU0NUTChzYWNrX2ZyZXEsIHNjdHBfc2Fja19mcmVxX2RlZmF1
bHQsIFNDVFBDVExfU0FDS19GUkVRKQotU0NUUF9VSU5UX1NZU0NUTChzeXNfcmVzb3VyY2UsIHNj
dHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCwgU0NUUENUTF9TWVNfUkVTT1VSQ0UpCi1TQ1RQX1VJ
TlRfU1lTQ1RMKGFzb2NfcmVzb3VyY2UsIHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQsIFNDVFBD
VExfQVNPQ19SRVNPVVJDRSkKLVNDVFBfVUlOVF9TWVNDVEwoaGVhcnRiZWF0X2ludGVydmFsLCBz
Y3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0LCBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZB
TCkKLVNDVFBfVUlOVF9TWVNDVEwocG10dV9yYWlzZV90aW1lLCBzY3RwX3BtdHVfcmFpc2VfdGlt
ZV9kZWZhdWx0LCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRSkKLVNDVFBfVUlOVF9TWVNDVEwoc2h1
dGRvd25fZ3VhcmRfdGltZSwgc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQsIFNDVFBD
VExfU0hVVERPV05fR1VBUkRfVElNRSkKLVNDVFBfVUlOVF9TWVNDVEwoc2VjcmV0X2xpZmV0aW1l
LCBzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRSkK
LVNDVFBfVUlOVF9TWVNDVEwocnRvX21heCwgc2N0cF9ydG9fbWF4X2RlZmF1bHQsIFNDVFBDVExf
UlRPX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwocnRvX21pbiwgc2N0cF9ydG9fbWluX2RlZmF1bHQs
IFNDVFBDVExfUlRPX01JTikKLVNDVFBfVUlOVF9TWVNDVEwocnRvX2luaXRpYWwsIHNjdHBfcnRv
X2luaXRpYWxfZGVmYXVsdCwgU0NUUENUTF9SVE9fSU5JVElBTCkKLVNDVFBfVUlOVF9TWVNDVEwo
aW5pdF9ydG9fbWF4LCBzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0LCBTQ1RQQ1RMX0lOSVRfUlRP
X01BWCkKLVNDVFBfVUlOVF9TWVNDVEwodmFsaWRfY29va2llX2xpZmUsIHNjdHBfdmFsaWRfY29v
a2llX2xpZmVfZGVmYXVsdCwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRSkKLVNDVFBfVUlOVF9T
WVNDVEwoaW5pdF9ydHhfbWF4LCBzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0LCBTQ1RQQ1RMX0lO
SVRfUlRYX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwoYXNzb2NfcnR4X21heCwgc2N0cF9hc3NvY19y
dHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfQVNTT0NfUlRYX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwo
cGF0aF9ydHhfbWF4LCBzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0LCBTQ1RQQ1RMX1BBVEhfUlRY
X01BWCkKLVNDVFBfVUlOVF9TWVNDVEwocGF0aF9wZl90aHJlc2hvbGQsIHNjdHBfcGF0aF9wZl90
aHJlc2hvbGQsIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTEQpCi1TQ1RQX1VJTlRfU1lTQ1RMKGFk
ZF9tb3JlX29uX291dHB1dCwgc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQsIFNDVFBDVExfQUREX01P
UkVfT05fT1VUUFVUKQotU0NUUF9VSU5UX1NZU0NUTChpbmNvbWluZ19zdHJlYW1zLCBzY3RwX25y
X2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TKQotU0NU
UF9VSU5UX1NZU0NUTChvdXRnb2luZ19zdHJlYW1zLCBzY3RwX25yX291dGdvaW5nX3N0cmVhbXNf
ZGVmYXVsdCwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TKQotU0NUUF9VSU5UX1NZU0NUTChjbXRf
b25fb2ZmLCBzY3RwX2NtdF9vbl9vZmYsIFNDVFBDVExfQ01UX09OX09GRikKLVNDVFBfVUlOVF9T
WVNDVEwoY210X3VzZV9kYWMsIHNjdHBfY210X3VzZV9kYWMsIFNDVFBDVExfQ01UX1VTRV9EQUMp
Ci1TQ1RQX1VJTlRfU1lTQ1RMKGN3bmRfbWF4YnVyc3QsIHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4
YnVyc3QsIFNDVFBDVExfQ1dORF9NQVhCVVJTVCkKLVNDVFBfVUlOVF9TWVNDVEwobmF0X2ZyaWVu
ZGx5LCBzY3RwX25hdF9mcmllbmRseSwgU0NUUENUTF9OQVRfRlJJRU5ETFkpCi1TQ1RQX1VJTlRf
U1lTQ1RMKGFiY19sX3Zhciwgc2N0cF9MMl9hYmNfdmFyaWFibGUsIFNDVFBDVExfQUJDX0xfVkFS
KQotU0NUUF9VSU5UX1NZU0NUTChtYXhfY2hhaW5lZF9tYnVmcywgc2N0cF9tYnVmX3RocmVzaG9s
ZF9jb3VudCwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGUykKLVNDVFBfVUlOVF9TWVNDVEwoZG9f
c2N0cF9kcmFpbiwgc2N0cF9kb19kcmFpbiwgU0NUUENUTF9ET19TQ1RQX0RSQUlOKQotU0NUUF9V
SU5UX1NZU0NUTChoYl9tYXhfYnVyc3QsIHNjdHBfaGJfbWF4YnVyc3QsIFNDVFBDVExfSEJfTUFY
X0JVUlNUKQotU0NUUF9VSU5UX1NZU0NUTChhYm9ydF9hdF9saW1pdCwgc2N0cF9hYm9ydF9pZl9v
bmVfMl9vbmVfaGl0c19saW1pdCwgU0NUUENUTF9BQk9SVF9BVF9MSU1JVCkKLVNDVFBfVUlOVF9T
WVNDVEwobWluX3Jlc2lkdWFsLCBzY3RwX21pbl9yZXNpZHVhbCwgU0NUUENUTF9NSU5fUkVTSURV
QUwpCi1TQ1RQX1VJTlRfU1lTQ1RMKG1heF9yZXRyYW5fY2h1bmssIHNjdHBfbWF4X3JldHJhbl9j
aHVuaywgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LKQotU0NUUF9VSU5UX1NZU0NUTChsb2dfbGV2
ZWwsIHNjdHBfbG9nZ2luZ19sZXZlbCwgU0NUUENUTF9MT0dHSU5HX0xFVkVMKQotU0NUUF9VSU5U
X1NZU0NUTChkZWZhdWx0X2NjX21vZHVsZSwgc2N0cF9kZWZhdWx0X2NjX21vZHVsZSwgU0NUUENU
TF9ERUZBVUxUX0NDX01PRFVMRSkKLVNDVFBfVUlOVF9TWVNDVEwoZGVmYXVsdF9zc19tb2R1bGUs
IHNjdHBfZGVmYXVsdF9zc19tb2R1bGUsIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEUpCi1TQ1RQ
X1VJTlRfU1lTQ1RMKGRlZmF1bHRfZnJhZ19pbnRlcmxlYXZlLCBzY3RwX2RlZmF1bHRfZnJhZ19p
bnRlcmxlYXZlLCBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFKQotU0NUUF9VSU5UX1NZ
U0NUTChtb2JpbGl0eV9iYXNlLCBzY3RwX21vYmlsaXR5X2Jhc2UsIFNDVFBDVExfTU9CSUxJVFlf
QkFTRSkKLVNDVFBfVUlOVF9TWVNDVEwobW9iaWxpdHlfZmFzdGhhbmRvZmYsIHNjdHBfbW9iaWxp
dHlfZmFzdGhhbmRvZmYsIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkYpCi0jaWYgZGVmaW5l
ZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURf
QVVUTywgbG9nLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9TVFJVQ1R8Q1RMRkxBR19SRCwKLSAgICAg
ICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2csICJTLHNjdHBsb2ci
LCAiU0NUUCBsb2dnaW5nIChzdHJ1Y3Qgc2N0cF9sb2cpIik7Ci1TWVNDVExfUFJPQyhfbmV0X2lu
ZXRfc2N0cCwgT0lEX0FVVE8sIGNsZWFyX3RyYWNlLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5U
IHwgQ1RMRkxBR19SVywKLSAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV90
cmFjZV9sb2dfY2xlYXIsICJJVSIsICJDbGVhciBTQ1RQIExvZ2dpbmcgYnVmZmVyIik7Ci0jZW5k
aWYKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgdWRwX3R1bm5lbGluZ19w
b3J0LCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICBO
VUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZywgIklVIiwgU0NUUENUTF9V
RFBfVFVOTkVMSU5HX1BPUlRfREVTQyk7Ci1TQ1RQX1VJTlRfU1lTQ1RMKGVuYWJsZV9zYWNrX2lt
bWVkaWF0ZWx5LCBzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5LCBTQ1RQQ1RMX1NBQ0tfSU1N
RURJQVRFTFlfRU5BQkxFKQotU0NUUF9VSU5UX1NZU0NUTChuYXRfZnJpZW5kbHlfaW5pdCwgc2N0
cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSwgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFMp
Ci1TQ1RQX1VJTlRfU1lTQ1RMKHZ0YWdfdGltZV93YWl0LCBzY3RwX3Z0YWdfdGltZV93YWl0LCBT
Q1RQQ1RMX1RJTUVfV0FJVCkKLVNDVFBfVUlOVF9TWVNDVEwoYnVmZmVyX3NwbGl0dGluZywgc2N0
cF9idWZmZXJfc3BsaXR0aW5nLCBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkcpCi1TQ1RQX1VJTlRf
U1lTQ1RMKGluaXRpYWxfY3duZCwgc2N0cF9pbml0aWFsX2N3bmQsIFNDVFBDVExfSU5JVElBTF9D
V05EKQotU0NUUF9VSU5UX1NZU0NUTChydHR2YXJfYncsIHNjdHBfcnR0dmFyX2J3LCBTQ1RQQ1RM
X1JUVFZBUl9CVykKLVNDVFBfVUlOVF9TWVNDVEwocnR0dmFyX3J0dCwgc2N0cF9ydHR2YXJfcnR0
LCBTQ1RQQ1RMX1JUVFZBUl9SVFQpCi1TQ1RQX1VJTlRfU1lTQ1RMKHJ0dHZhcl9lcXJldCwgc2N0
cF9ydHR2YXJfZXFyZXQsIFNDVFBDVExfUlRUVkFSX0VRUkVUKQotU0NUUF9VSU5UX1NZU0NUTChy
dHR2YXJfc3RlYWR5X3N0ZXAsIHNjdHBfc3RlYWR5X3N0ZXAsIFNDVFBDVExfUlRUVkFSX1NURUFE
WVMpCi1TQ1RQX1VJTlRfU1lTQ1RMKHVzZV9kY2NjZWNuLCBzY3RwX3VzZV9kY2NjX2VjbiwgU0NU
UENUTF9SVFRWQVJfRENDQ0VDTikKLVNDVFBfVUlOVF9TWVNDVEwoYmxhY2tob2xlLCBzY3RwX2Js
YWNraG9sZSwgU0NUUENUTF9CTEFDS0hPTEUpCi1TQ1RQX1VJTlRfU1lTQ1RMKGRpYWdfaW5mb19j
b2RlLCBzY3RwX2RpYWdfaW5mb19jb2RlLCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFKQotI2lmZGVm
IFNDVFBfREVCVUcKLVNDVFBfVUlOVF9TWVNDVEwoZGVidWcsIHNjdHBfZGVidWdfb24sIFNDVFBD
VExfREVCVUcpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLVNDVFBfVUlOVF9TWVND
VEwobWFpbl90aW1lciwgc2N0cF9tYWluX3RpbWVyLCBTQ1RQQ1RMX01BSU5fVElNRVIpCi1TWVND
VExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGlnbm9yZV92bXdhcmVfaW50ZXJmYWNl
cywgQ1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfdm13YXJlX2ludGVyZmFjZXMsICJJVSIsIFNDVFBDVExfSUdOT1JFX1ZNV0FS
RV9JTlRFUkZBQ0VTX0RFU0MpOwotU0NUUF9VSU5UX1NZU0NUTChhZGRyX3dhdGNoZG9nX2xpbWl0
LCBzY3RwX2FkZHJfd2F0Y2hkb2dfbGltaXQsIFNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVCkK
LVNDVFBfVUlOVF9TWVNDVEwodnRhZ193YXRjaGRvZ19saW1pdCwgc2N0cF92dGFnX3dhdGNoZG9n
X2xpbWl0LCBTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVQpCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLVNDVFBfVUlOVF9T
WVNDVEwob3V0cHV0X3VubG9ja2VkLCBzY3RwX291dHB1dF91bmxvY2tlZCwgU0NUUENUTF9PVVRQ
VVRfVU5MT0NLRUQpCi0jZW5kaWYKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVU
Tywgc3RhdHMsIENUTEZMQUdfVk5FVHxDVExUWVBFX1NUUlVDVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3N0YXRzLCAiUyxzY3Rwc3RhdCIsICJT
Q1RQIHN0YXRpc3RpY3MgKHN0cnVjdCBzY3RwX3N0YXQpIik7Ci1TWVNDVExfUFJPQyhfbmV0X2lu
ZXRfc2N0cCwgT0lEX0FVVE8sIGFzc29jbGlzdCwgQ1RMRkxBR19WTkVUfENUTFRZUEVfT1BBUVVF
fENUTEZMQUdfUkQsCi0gICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfYXNz
b2NsaXN0LCAiUyx4YXNzb2MiLCAiTGlzdCBvZiBhY3RpdmUgU0NUUCBhc3NvY2lhdGlvbnMiKTsK
LQotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQotI2RlZmluZSBSQU5HRUNISyh2YXIsIG1p
biwgbWF4KSBcCi0JaWYgKCh2YXIpIDwgKG1pbikpIHsgKHZhcikgPSAobWluKTsgfSBcCi0JZWxz
ZSBpZiAoKHZhcikgPiAobWF4KSkgeyAodmFyKSA9IChtYXgpOyB9Ci0KLXN0YXRpYyBpbnQKLXNj
dHBfc3lzY3RsX2hhbmRsZV9pbnQoU1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLQlpbnQgZXJyb3I7
Ci0KLQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsIG9pZHAtPm9pZF9hcmcxLCBvaWRw
LT5vaWRfYXJnMiwgcmVxKTsKLQlpZiAoZXJyb3IgPT0gMCkgewotCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSwgU0NUUENUTF9NQVhER1JBTV9NSU4sIFNDVFBDVExf
TUFYREdSQU1fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY3ZzcGFj
ZSksIFNDVFBDVExfUkVDVlNQQUNFX01JTiwgU0NUUENUTF9SRUNWU1BBQ0VfTUFYKTsKLQkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNjb25mKSwgU0NUUENUTF9BVVRPQVND
T05GX01JTiwgU0NUUENUTF9BVVRPQVNDT05GX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9hdXRvX2FzY29uZiksIFNDVFBDVExfQVVUT0FTQ09ORl9NSU4sIFNDVFBDVExf
QVVUT0FTQ09ORl9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZWNuX2Vu
YWJsZSksIFNDVFBDVExfRUNOX0VOQUJMRV9NSU4sIFNDVFBDVExfRUNOX0VOQUJMRV9NQVgpOwot
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSwgU0NUUENUTF9QUl9F
TkFCTEVfTUlOLCBTQ1RQQ1RMX1BSX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcmVjb25maWdfZW5hYmxlKSwgU0NUUENUTF9SRUNPTkZJR19FTkFCTEVfTUlO
LCBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbnJzYWNrX2VuYWJsZSksIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NSU4sIFNDVFBD
VExfTlJTQUNLX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGt0ZHJvcF9lbmFibGUpLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01JTiwgU0NUUENUTF9QS1RE
Uk9QX0VOQUJMRV9NQVgpOwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjayksIFNDVFBDVExf
TE9PUEJBQ0tfTk9DU1VNX01JTiwgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUFYKTsKLSNlbmRp
ZgotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCksIFNDVFBD
VExfUEVFUl9DSEtPSF9NSU4sIFNDVFBDVExfUEVFUl9DSEtPSF9NQVgpOwotCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX01BWEJVUlNU
X01JTiwgU0NUUENUTF9NQVhCVVJTVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUlOLCBTQ1RQ
Q1RMX0ZSTUFYQlVSU1RfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21h
eF9jaHVua3Nfb25fcXVldWUpLCBTQ1RQQ1RMX01BWENIVU5LU19NSU4sIFNDVFBDVExfTUFYQ0hV
TktTX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSks
IFNDVFBDVExfVENCSEFTSFNJWkVfTUlOLCBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01BWCk7Ci0JCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSwgU0NUUENUTF9QQ0JIQVNI
U0laRV9NSU4sIFNDVFBDVExfUENCSEFTSFNJWkVfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX21pbl9zcGxpdF9wb2ludCksIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01J
TiwgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NodW5rc2NhbGUpLCBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUlOLCBTQ1RQQ1RMX0NI
VU5LU0NBTEVfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlbGF5ZWRf
c2Fja190aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX01JTiwgU0NUUENU
TF9ERUxBWUVEX1NBQ0tfVElNRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc2Fja19mcmVxX2RlZmF1bHQpLCBTQ1RQQ1RMX1NBQ0tfRlJFUV9NSU4sIFNDVFBDVExfU0FD
S19GUkVRX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJl
ZV9yZXNjX2xpbWl0KSwgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX1NZU19SRVNP
VVJDRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jl
c2NfbGltaXQpLCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX0FTT0NfUkVTT1VS
Q0VfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRl
cnZhbF9kZWZhdWx0KSwgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxfTUlOLCBTQ1RQQ1RMX0hF
QVJUQkVBVF9JTlRFUlZBTF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cG10dV9yYWlzZV90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9NSU4sIFND
VFBDVExfUE1UVV9SQUlTRV9USU1FX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJE
X1RJTUVfTUlOLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUFYKTsKLQkJUkFOR0VDSEso
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0KSwgU0NUUENUTF9T
RUNSRVRfTElGRVRJTUVfTUlOLCBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NQVgpOwotCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZhdWx0KSwgU0NUUENUTF9SVE9f
TUFYX01JTiwgU0NUUENUTF9SVE9fTUFYX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydG9fbWluX2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19NSU5fTUlOLCBTQ1RQQ1RMX1JU
T19NSU5fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19pbml0aWFs
X2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19JTklUSUFMX01JTiwgU0NUUENUTF9SVE9fSU5JVElBTF9N
QVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1
bHQpLCBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9NSU4sIFNDVFBDVExfSU5JVF9SVE9fTUFYX01BWCk7
Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZh
dWx0KSwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NSU4sIFNDVFBDVExfVkFMSURfQ09PS0lF
X0xJRkVfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRfcnR4X21h
eF9kZWZhdWx0KSwgU0NUUENUTF9JTklUX1JUWF9NQVhfTUlOLCBTQ1RQQ1RMX0lOSVRfUlRYX01B
WF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9k
ZWZhdWx0KSwgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01JTiwgU0NUUENUTF9BU1NPQ19SVFhfTUFY
X01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVm
YXVsdCksIFNDVFBDVExfUEFUSF9SVFhfTUFYX01JTiwgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUFY
KTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKSwg
U0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NSU4sIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERf
TUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9s
ZCksIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX01JTiwgU0NUUENUTF9BRERfTU9SRV9PTl9P
VVRQVVRfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX2luY29taW5n
X3N0cmVhbXNfZGVmYXVsdCksIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NSU4sIFNDVFBDVExf
SU5DT01JTkdfU1RSRUFNU19NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KSwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01J
TiwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jbXRfb25fb2ZmKSwgU0NUUENUTF9DTVRfT05fT0ZGX01JTiwgU0NUUENUTF9D
TVRfT05fT0ZGX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNl
X2RhYyksIFNDVFBDVExfQ01UX1VTRV9EQUNfTUlOLCBTQ1RQQ1RMX0NNVF9VU0VfREFDX01BWCk7
Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJz
dCksIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NSU4sIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NQVgp
OwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwgU0NUUENU
TF9OQVRfRlJJRU5ETFlfTUlOLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9NQVgpOwotCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKSwgU0NUUENUTF9BQkNfTF9W
QVJfTUlOLCBTQ1RQQ1RMX0FCQ19MX1ZBUl9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpLCBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZT
X01JTiwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGU19NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fTUlOLCBTQ1RQ
Q1RMX0RPX1NDVFBfRFJBSU5fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2hiX21heGJ1cnN0KSwgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUlOLCBTQ1RQQ1RMX0hCX01BWF9C
VVJTVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25l
XzJfb25lX2hpdHNfbGltaXQpLCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01JTiwgU0NUUENUTF9B
Qk9SVF9BVF9MSU1JVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWlu
X3Jlc2lkdWFsKSwgU0NUUENUTF9NSU5fUkVTSURVQUxfTUlOLCBTQ1RQQ1RMX01JTl9SRVNJRFVB
TF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVu
ayksIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4sIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVO
S19NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCks
IFNDVFBDVExfTE9HR0lOR19MRVZFTF9NSU4sIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NQVgpOwot
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpLCBTQ1RQ
Q1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NQVgp
OwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUpLCBT
Q1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9N
QVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVy
bGVhdmUpLCBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01JTiwgU0NUUENUTF9ERUZB
VUxUX0ZSQUdfSU5URVJMRUFWRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfdnRhZ190aW1lX3dhaXQpLCBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4sIFNDVFBDVExfVElNRV9X
QUlUX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0
aW5nKSwgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01JTiwgU0NUUENUTF9CVUZGRVJfU1BMSVRU
SU5HX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQp
LCBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9NSU4sIFNDVFBDVExfSU5JVElBTF9DV05EX01BWCk7Ci0J
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpLCBTQ1RQQ1RMX1JUVFZB
Ul9CV19NSU4sIFNDVFBDVExfUlRUVkFSX0JXX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9ydHR2YXJfcnR0KSwgU0NUUENUTF9SVFRWQVJfUlRUX01JTiwgU0NUUENUTF9S
VFRWQVJfUlRUX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJf
ZXFyZXQpLCBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9NSU4sIFNDVFBDVExfUlRUVkFSX0VRUkVUX01B
WCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zdGVhZHlfc3RlcCksIFNDVFBD
VExfUlRUVkFSX1NURUFEWVNfTUlOLCBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01BWCk7Ci0JCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfZGNjY19lY24pLCBTQ1RQQ1RMX1JUVFZB
Ul9EQ0NDRUNOX01JTiwgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9NQVgpOwotCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSksIFNDVFBDVExfTU9CSUxJVFlfQkFT
RV9NSU4sIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpLCBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RI
QU5ET0ZGX01JTiwgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9NQVgpOwotCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpLCBTQ1RQQ1RM
X1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX01JTiwgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VO
QUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdHNfaW5jbHVk
ZV9uYXRfZnJpZW5kbHkpLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4sIFNDVFBDVExf
TkFUX0ZSSUVORExZX0lOSVRTX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9ibGFja2hvbGUpLCBTQ1RQQ1RMX0JMQUNLSE9MRV9NSU4sIFNDVFBDVExfQkxBQ0tIT0xFX01B
WCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksIFND
VFBDVExfRElBR19JTkZPX0NPREVfTUlOLCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01BWCk7Ci0j
aWZkZWYgU0NUUF9ERUJVRwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdf
b24pLCBTQ1RQQ1RMX0RFQlVHX01JTiwgU0NUUENUTF9ERUJVR19NQVgpOwotI2VuZGlmCi0JfQot
CXJldHVybiAoZXJyb3IpOwotfQotCi12b2lkCi1zeXNjdGxfc2V0dXBfc2N0cCh2b2lkKQotewot
CXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNlbmRzcGFjZSIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFj
ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTUFYREdSQU1fREVT
Qyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJyZWN2c3BhY2UiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Jl
Y3ZzcGFjZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUkVDVlNQ
QUNFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXV0b19hc2Nv
bmYiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9hdXRvX2FzY29uZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFND
VFBDVExfQVVUT0FTQ09ORl9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgImVjbl9lbmFibGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlND
VFBfQkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dCwKLQkgICAgU0NUUENUTF9FQ05fRU5BQkxFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAicHJfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAg
ICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9QUl9FTkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRk
X29pZCgmc3lzY3RsX29pZF90b3AsICJhdXRoX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdf
UlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgsCi0JICAgIFNDVFBDVExfQVVUSF9FTkFCTEVfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc2NvbmZfZW5hYmxlIiwgQ1RM
VFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
YXNjb25mX2VuYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hc2NvbmYsCi0JICAgIFNDVFBD
VExfQVNDT05GX0VOQUJMRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgInJlY29uZmlnX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmlnX2VuYWJsZSksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibnJzYWNrX2VuYWJsZSIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19l
bmFibGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX05SU0FDS19F
TkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwa3Rkcm9w
X2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
LQkgICAgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9ERVNDKTsKLQotI2lmICFkZWZpbmVkKFNDVFBf
V0lUSF9OT19DU1VNKQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImxvb3BiYWNr
X25vY3N1bSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVf
aW50LAotCSAgICBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9ERVNDKTsKLSNlbmRpZgotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicGVlcl9jaGtvaCIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtf
b2gpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX1BFRVJfQ0hLT0hf
REVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtYXhidXJzdCIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X21heF9idXJzdF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NU
UENUTF9NQVhCVVJTVF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
ImZyX21heGJ1cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0ZSTUFYQlVSU1RfREVTQyk7Ci0KLQlzeXNjdGxfYWRk
X29pZCgmc3lzY3RsX29pZF90b3AsICJtYXhjaHVua3MiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVl
KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9NQVhDSFVOS1NfREVT
Qyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ0Y2JoYXNoc2l6ZSIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2hhc2h0YmxzaXplKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9U
Q0JIQVNIU0laRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBj
Ymhhc2hzaXplIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0J
ICAgIFNDVFBDVExfUENCSEFTSFNJWkVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJtaW5fc3BsaXRfcG9pbnQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAg
ICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRfcG9pbnQpLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVF9ERVNDKTsK
LQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImNodW5rc2NhbGUiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVu
a3NjYWxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9DSFVOS1ND
QUxFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGVsYXllZF9z
YWNrX3RpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElNRV9ERVNDKTsKLQotCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNhY2tfZnJlcSIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9k
ZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9TQUNLX0ZS
RVFfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzeXNfcmVzb3Vy
Y2UiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dCwKLQkgICAgU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgm
c3lzY3RsX29pZF90b3AsICJhc29jX3Jlc291cmNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
LSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0Vf
REVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJoZWFydGJlYXRfaW50
ZXJ2YWwiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCi0JICAgIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicG10dV9yYWlzZV90aW1lIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9y
YWlzZV90aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQ
Q1RMX1BNVFVfUkFJU0VfVElNRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgInNodXRkb3duX2d1YXJkX3RpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAg
ICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1
bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX1NIVVRET1dOX0dV
QVJEX1RJTUVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzZWNy
ZXRfbGlmZXRpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnRvX21heCIsIENUTFRZUEVfSU5UfENUTEZM
QUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19tYXhfZGVmYXVs
dCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUlRPX01BWF9ERVND
KTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0b19taW4iLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9f
bWluX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX1JU
T19NSU5fREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJydG9faW5p
dGlhbCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50
LAotCSAgICBTQ1RQQ1RMX1JUT19JTklUSUFMX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAiaW5pdF9ydG9fbWF4IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAg
ICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpLCAw
LCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9ERVND
KTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInZhbGlkX2Nvb2tpZV9saWZl
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCi0JICAgIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVTQyk7Ci0KLQlzeXNjdGxfYWRk
X29pZCgmc3lzY3RsX29pZF90b3AsICJpbml0X3J0eF9tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFH
X1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0eF9tYXhfZGVm
YXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfSU5JVF9SVFhf
TUFYX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXNzb2NfcnR4
X21heCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCi0JICAgIFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgInBhdGhfcnR4X21heCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcs
Ci0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0
KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9QQVRIX1JUWF9NQVhf
REVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwYXRoX3BmX3RocmVz
aG9sZCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0JICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcGF0aF9wZl90aHJlc2hvbGQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBT
Q1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAiYWRkX21vcmVfb25fb3V0cHV0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
LSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQ
VVRfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJpbmNvbWluZ19z
dHJlYW1zIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAib3V0Z29pbmdfc3RyZWFtcyIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX291
dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAg
IFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgImNtdF9vbl9vZmYiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9DTVRfT05fT0ZGX0RFU0MpOwotCi0Jc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY210X3VzZV9kYWMiLCBDVExUWVBFX0lOVHxDVExGTEFH
X1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNlX2RhYyksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQ01UX1VTRV9EQUNfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjd25kX21heGJ1cnN0IiwgQ1RM
VFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAg
ICBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJuYXRfZnJpZW5kbHkiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpLCAwLCBzY3RwX3N5c2N0
bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX05BVF9GUklFTkRMWV9ERVNDKTsKLQotCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFiY19sX3ZhciIsIENUTFRZUEVfSU5UfENUTEZM
QUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJs
ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQUJDX0xfVkFSX0RF
U0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4X2NoYWluZWRfbWJ1
ZnMiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQs
Ci0JICAgIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29p
ZCgmc3lzY3RsX29pZF90b3AsICJkb19zY3RwX2RyYWluIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fREVTQyk7Ci0K
LQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJoYl9tYXhfYnVyc3QiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYl9t
YXhidXJzdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfSEJfTUFY
X0JVUlNUX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYWJvcnRf
YXRfbGltaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQUJPUlRfQVRfTElNSVRfREVTQyk7Ci0KLQlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtaW5fcmVzaWR1YWwiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fcmVz
aWR1YWwpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX01JTl9SRVNJ
RFVBTF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1heF9yZXRy
YW5fY2h1bmsiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dCwKLQkgICAgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAibG9nX2xldmVsIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
LSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCksIDAsIHNj
dHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTE9HR0lOR19MRVZFTF9ERVNDKTsK
LQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRlZmF1bHRfY2NfbW9kdWxlIiwg
Q1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZGVmYXVsdF9jY19tb2R1bGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBT
Q1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAiZGVmYXVsdF9zc19tb2R1bGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAot
ICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVf
REVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkZWZhdWx0X2ZyYWdf
aW50ZXJsZWF2ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERVNDKTsK
LQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1vYmlsaXR5X2Jhc2UiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9t
b2JpbGl0eV9iYXNlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9N
T0JJTElUWV9CQVNFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
bW9iaWxpdHlfZmFzdGhhbmRvZmYiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAg
ICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZiksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkZfREVT
Qyk7Ci0KLSNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgInNjdHBfbG9nIiwgQ1RMVFlQRV9TVFJVQ1R8Q1RMRkxBR19SRCwK
LQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cp
LCBOVUxMLAotCSAgICAiU0NUUCBsb2dnaW5nIChzdHJ1Y3Qgc2N0cF9sb2cpIik7Ci0KLQlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjbGVhcl90cmFjZSIsIENUTFRZUEVfSU5UfENU
TEZMQUdfV1IsCi0JICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xl
YXIsCi0JICAgICJDbGVhciBTQ1RQIExvZ2dpbmcgYnVmZmVyIik7Ci0jZW5kaWYKLQotCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInVkcF90dW5uZWxpbmdfcG9ydCIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCi0JICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGlu
Z19wb3J0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3VkcF90dW5uZWxpbmcsCi0JICAgIFNDVFBD
VExfVURQX1RVTk5FTElOR19QT1JUX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAiZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fja19pbW1lZGlh
dGVseSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfU0FDS19JTU1F
RElBVEVMWV9FTkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJuYXRfZnJpZW5kbHlfaW5pdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ2dGFnX3RpbWVfd2FpdCIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3Z0YWdfdGltZV93YWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENU
TF9USU1FX1dBSVRfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJi
dWZmZXJfc3BsaXR0aW5nIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfYnVmZmVyX3NwbGl0dGluZyksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19ERVNDKTsKLQotCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImluaXRpYWxfY3duZCIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3du
ZCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfSU5JVElBTF9DV05E
X0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnR0dmFyX2J3Iiwg
Q1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcnR0dmFyX2J3KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9S
VFRWQVJfQldfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJydHR2
YXJfcnR0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAg
IFNDVFBDVExfUlRUVkFSX1JUVF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgInJ0dHZhcl9lcXJldCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZhcl9lcXJldCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUlRUVkFSX0VRUkVUX0RFU0MpOwotCi0Jc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnR0dmFyX3N0ZWFkeV9zdGVwIiwgQ1RMVFlQRV9JTlR8
Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc3RlYWR5X3N0
ZXApLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX1JUVFZBUl9TVEVB
RFlTX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidXNlX2RjY2Nl
Y24iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF91c2VfZGNjY19lY24pLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBT
Q1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAiYmxhY2tob2xlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKLSAgICAgICAgICAgIFNDVFBDVExfQkxBQ0tIT0xFX0RFU0MpOwotCi0Jc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGlhZ19pbmZvX2NvZGUiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29k
ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0gICAgICAgICAgICBTQ1RQQ1RMX0RJQUdf
SU5GT19DT0RFX0RFU0MpOwotCi0jaWZkZWYgU0NUUF9ERUJVRwotCXN5c2N0bF9hZGRfb2lkKCZz
eXNjdGxfb2lkX3RvcCwgImRlYnVnIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLQkgICAgJlND
VFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQs
Ci0JICAgIFNDVFBDVExfREVCVUdfREVTQyk7Ci0jZW5kaWYKLQotCXN5c2N0bF9hZGRfb2lkKCZz
eXNjdGxfb2lkX3RvcCwgInN0YXRzIiwgQ1RMVFlQRV9TVFJVQ1R8Q1RMRkxBR19SVywKLQkgICAg
JlNDVFBfQkFTRV9TVEFUUywgc2l6ZW9mKFNDVFBfQkFTRV9TVEFUUyksIE5VTEwsCi0JICAgICJT
Q1RQIHN0YXRpc3RpY3MgKHN0cnVjdCBzY3RwX3N0YXQpIik7Ci0KLQlzeXNjdGxfYWRkX29pZCgm
c3lzY3RsX29pZF90b3AsICJhc3NvY2xpc3QiLCBDVExUWVBFX1NUUlVDVHxDVExGTEFHX1JELAot
CSAgICBOVUxMLCAwLCBzY3RwX2Fzc29jbGlzdCwKLQkgICAgIkxpc3Qgb2YgYWN0aXZlIFNDVFAg
YXNzb2NpYXRpb25zIik7Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3N5c2N0bC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQyOWUzNzAyZDU5OWZkMWNjN2U3NTM2MDgz
ZDNhZmYyOGYxMGYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuaAorKysgL2Rldi9udWxsCkBAIC0xLDYy
NSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQo
IiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmggMjk5NTQzIDIwMTYtMDUt
MTIgMTY6MzQ6NTlaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQ
X1NZU0NUTF9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXwotCi0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgot
Ci1zdHJ1Y3Qgc2N0cF9zeXNjdGwgewotCXVpbnQzMl90IHNjdHBfc2VuZHNwYWNlOwotCXVpbnQz
Ml90IHNjdHBfcmVjdnNwYWNlOwotCXVpbnQzMl90IHNjdHBfYXV0b19hc2NvbmY7Ci0JdWludDMy
X3Qgc2N0cF9tdWx0aXBsZV9hc2NvbmZzOwotCXVpbnQzMl90IHNjdHBfZWNuX2VuYWJsZTsKLQl1
aW50MzJfdCBzY3RwX3ByX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX2F1dGhfZW5hYmxlOwotCXVp
bnQzMl90IHNjdHBfYXNjb25mX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX3JlY29uZmlnX2VuYWJs
ZTsKLQl1aW50MzJfdCBzY3RwX25yc2Fja19lbmFibGU7Ci0JdWludDMyX3Qgc2N0cF9wa3Rkcm9w
X2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0OwotI2lmICEoZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwKQotI2lmICFk
ZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCXVpbnQzMl90IHNjdHBfbm9fY3N1bV9vbl9sb29w
YmFjazsKLSNlbmRpZgotI2VuZGlmCi0JdWludDMyX3Qgc2N0cF9wZWVyX2NodW5rX29oOwotCXVp
bnQzMl90IHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9tYXhfY2h1bmtz
X29uX3F1ZXVlOwotCXVpbnQzMl90IHNjdHBfaGFzaHRibHNpemU7Ci0JdWludDMyX3Qgc2N0cF9w
Y2J0YmxzaXplOwotCXVpbnQzMl90IHNjdHBfbWluX3NwbGl0X3BvaW50OwotCXVpbnQzMl90IHNj
dHBfY2h1bmtzY2FsZTsKLQl1aW50MzJfdCBzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQ7
Ci0JdWludDMyX3Qgc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3N5c3Rl
bV9mcmVlX3Jlc2NfbGltaXQ7Ci0JdWludDMyX3Qgc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdDsK
LQl1aW50MzJfdCBzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0OwotCXVpbnQzMl90IHNj
dHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9zaHV0ZG93bl9ndWFy
ZF90aW1lX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdDsK
LQl1aW50MzJfdCBzY3RwX3J0b19tYXhfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3J0b19taW5f
ZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQ7Ci0JdWludDMyX3Qg
c2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3ZhbGlkX2Nvb2tpZV9s
aWZlX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdDsKLQl1aW50
MzJfdCBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3BhdGhfcnR4
X21heF9kZWZhdWx0OwotCXVpbnQzMl90IHNjdHBfcGF0aF9wZl90aHJlc2hvbGQ7Ci0JdWludDMy
X3Qgc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQ7Ci0JdWludDMyX3Qgc2N0cF9ucl9pbmNvbWluZ19z
dHJlYW1zX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1
bHQ7Ci0JdWludDMyX3Qgc2N0cF9jbXRfb25fb2ZmOwotCXVpbnQzMl90IHNjdHBfY210X3VzZV9k
YWM7Ci0JdWludDMyX3Qgc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdDsKLQl1aW50MzJfdCBz
Y3RwX25hdF9mcmllbmRseTsKLQl1aW50MzJfdCBzY3RwX0wyX2FiY192YXJpYWJsZTsKLQl1aW50
MzJfdCBzY3RwX21idWZfdGhyZXNob2xkX2NvdW50OwotCXVpbnQzMl90IHNjdHBfZG9fZHJhaW47
Ci0JdWludDMyX3Qgc2N0cF9oYl9tYXhidXJzdDsKLQl1aW50MzJfdCBzY3RwX2Fib3J0X2lmX29u
ZV8yX29uZV9oaXRzX2xpbWl0OwotCXVpbnQzMl90IHNjdHBfbWluX3Jlc2lkdWFsOwotCXVpbnQz
Ml90IHNjdHBfbWF4X3JldHJhbl9jaHVuazsKLQl1aW50MzJfdCBzY3RwX2xvZ2dpbmdfbGV2ZWw7
Ci0JLyogSlJTIC0gVmFyaWFibGUgZm9yIGRlZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVs
ZSAqLwotCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9jY19tb2R1bGU7Ci0JLyogUlMgLSBWYXJpYWJs
ZSBmb3IgZGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUgKi8KLQl1aW50MzJfdCBzY3Rw
X2RlZmF1bHRfc3NfbW9kdWxlOwotCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVh
dmU7Ci0JdWludDMyX3Qgc2N0cF9tb2JpbGl0eV9iYXNlOwotCXVpbnQzMl90IHNjdHBfbW9iaWxp
dHlfZmFzdGhhbmRvZmY7Ci0JdWludDMyX3Qgc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRs
eTsKLQl1aW50MzJfdCBzY3RwX3J0dHZhcl9idzsKLQl1aW50MzJfdCBzY3RwX3J0dHZhcl9ydHQ7
Ci0JdWludDMyX3Qgc2N0cF9ydHR2YXJfZXFyZXQ7Ci0JdWludDMyX3Qgc2N0cF9zdGVhZHlfc3Rl
cDsKLQl1aW50MzJfdCBzY3RwX3VzZV9kY2NjX2VjbjsKLQl1aW50MzJfdCBzY3RwX2RpYWdfaW5m
b19jb2RlOwotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0jaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKLQlzdHJ1Y3Qgc2N0cF9sb2cgKnNjdHBfbG9nOwotI2Vsc2UKLQlzdHJ1Y3Qg
c2N0cF9sb2cgc2N0cF9sb2c7Ci0jZW5kaWYKLSNlbmRpZgotCXVpbnQzMl90IHNjdHBfdWRwX3R1
bm5lbGluZ19wb3J0OwotCXVpbnQzMl90IHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHk7Ci0J
dWludDMyX3Qgc2N0cF92dGFnX3RpbWVfd2FpdDsKLQl1aW50MzJfdCBzY3RwX2J1ZmZlcl9zcGxp
dHRpbmc7Ci0JdWludDMyX3Qgc2N0cF9pbml0aWFsX2N3bmQ7Ci0JdWludDMyX3Qgc2N0cF9ibGFj
a2hvbGU7Ci0jaWYgZGVmaW5lZChTQ1RQX0RFQlVHKQotCXVpbnQzMl90IHNjdHBfZGVidWdfb247
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQl1aW50MzJfdCBzY3RwX2lnbm9yZV92
bXdhcmVfaW50ZXJmYWNlczsKLQl1aW50MzJfdCBzY3RwX21haW5fdGltZXI7Ci0JdWludDMyX3Qg
c2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0OwotCXVpbnQzMl90IHNjdHBfdnRhZ193YXRjaGRvZ19s
aW1pdDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQotCXVpbnQzMl90IHNjdHBfb3V0cHV0X3VubG9ja2VkOwotI2VuZGlmCi19
OwotCi0vKgotICogbGltaXRzIGZvciB0aGUgc3lzY3RsIHZhcmlhYmxlcwotICovCi0vKiBtYXhk
Z3JhbTogTWF4aW11bSBvdXRnb2luZyBTQ1RQIGJ1ZmZlciBzaXplICovCi0jZGVmaW5lIFNDVFBD
VExfTUFYREdSQU1fREVTQwkJIk1heGltdW0gb3V0Z29pbmcgU0NUUCBidWZmZXIgc2l6ZSIKLSNk
ZWZpbmUgU0NUUENUTF9NQVhER1JBTV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9NQVhER1JBTV9N
QVgJCTB4RkZGRkZGRkYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBD
VExfTUFYREdSQU1fREVGQVVMVAlTQl9NQVgKLSNlbHNlCi0jZGVmaW5lIFNDVFBDVExfTUFYREdS
QU1fREVGQVVMVAkyNjIxNDQJLyogMjU2ayAqLwotI2VuZGlmCi0KLS8qIHJlY3ZzcGFjZTogTWF4
aW11bSBpbmNvbWluZyBTQ1RQIGJ1ZmZlciBzaXplICovCi0jZGVmaW5lIFNDVFBDVExfUkVDVlNQ
QUNFX0RFU0MJCSJNYXhpbXVtIGluY29taW5nIFNDVFAgYnVmZmVyIHNpemUiCi0jZGVmaW5lIFND
VFBDVExfUkVDVlNQQUNFX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX1JFQ1ZTUEFDRV9NQVgJCTB4
RkZGRkZGRkYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBDVExfUkVD
VlNQQUNFX0RFRkFVTFQJU0JfUkFXCi0jZWxzZQotI2RlZmluZSBTQ1RQQ1RMX1JFQ1ZTUEFDRV9E
RUZBVUxUCTI2MjE0NAkvKiAyNTZrICovCi0jZW5kaWYKLQotLyogYXV0b2FzY29uZjogRW5hYmxl
IFNDVFAgQXV0by1BU0NPTkYgKi8KLSNkZWZpbmUgU0NUUENUTF9BVVRPQVNDT05GX0RFU0MJCSJF
bmFibGUgU0NUUCBBdXRvLUFTQ09ORiIKLSNkZWZpbmUgU0NUUENUTF9BVVRPQVNDT05GX01JTgkJ
MAotI2RlZmluZSBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUFYCQkxCi0jZGVmaW5lIFNDVFBDVExfQVVU
T0FTQ09ORl9ERUZBVUxUCTEKLQotLyogYXV0b2FzY29uZjogRW5hYmxlIFNDVFAgQXV0by1BU0NP
TkYgKi8KLSNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVTQwkiRW5hYmxlIFNDVFAg
TXVsaXBsZS1BU0NPTkZzIgotI2RlZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19NSU4JMAot
I2RlZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX01V
TFRJUExFQVNDT05GU19ERUZBVUxUCVNDVFBfREVGQVVMVF9NVUxUSVBMRV9BU0NPTkZTCi0KLS8q
IGVjbl9lbmFibGU6IEVuYWJsZSBTQ1RQIEVDTiAqLwotI2RlZmluZSBTQ1RQQ1RMX0VDTl9FTkFC
TEVfREVTQwkJIkVuYWJsZSBTQ1RQIEVDTiIKLSNkZWZpbmUgU0NUUENUTF9FQ05fRU5BQkxFX01J
TgkJMAotI2RlZmluZSBTQ1RQQ1RMX0VDTl9FTkFCTEVfTUFYCQkxCi0jZGVmaW5lIFNDVFBDVExf
RUNOX0VOQUJMRV9ERUZBVUxUCTEKLQotLyogcHJfZW5hYmxlOiBFbmFibGUgUFItU0NUUCAqLwot
I2RlZmluZSBTQ1RQQ1RMX1BSX0VOQUJMRV9ERVNDCQkiRW5hYmxlIFBSLVNDVFAiCi0jZGVmaW5l
IFNDVFBDVExfUFJfRU5BQkxFX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX1BSX0VOQUJMRV9NQVgJ
CTEKLSNkZWZpbmUgU0NUUENUTF9QUl9FTkFCTEVfREVGQVVMVAkxCi0KLS8qIGF1dGhfZW5hYmxl
OiBFbmFibGUgU0NUUCBBVVRIIGZ1bmN0aW9uICovCi0jZGVmaW5lIFNDVFBDVExfQVVUSF9FTkFC
TEVfREVTQwkiRW5hYmxlIFNDVFAgQVVUSCBmdW5jdGlvbiIKLSNkZWZpbmUgU0NUUENUTF9BVVRI
X0VOQUJMRV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9BVVRIX0VOQUJMRV9NQVgJCTEKLSNkZWZp
bmUgU0NUUENUTF9BVVRIX0VOQUJMRV9ERUZBVUxUCTEKLQotLyogYXNjb25mX2VuYWJsZTogRW5h
YmxlIFNDVFAgQVNDT05GICovCi0jZGVmaW5lIFNDVFBDVExfQVNDT05GX0VOQUJMRV9ERVNDCSJF
bmFibGUgU0NUUCBBU0NPTkYiCi0jZGVmaW5lIFNDVFBDVExfQVNDT05GX0VOQUJMRV9NSU4JMAot
I2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9BU0NP
TkZfRU5BQkxFX0RFRkFVTFQJMQotCi0vKiByZWNvbmZpZ19lbmFibGU6IEVuYWJsZSBTQ1RQIFJF
LUNPTkZJRyAqLwotI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9ERVNDCSJFbmFibGUg
U0NUUCBSRS1DT05GSUciCi0jZGVmaW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01JTgkwCi0j
ZGVmaW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01BWAkxCi0jZGVmaW5lIFNDVFBDVExfUkVD
T05GSUdfRU5BQkxFX0RFRkFVTFQJMQotCi0vKiBucnNhY2tfZW5hYmxlOiBFbmFibGUgTlJfU0FD
SyAqLwotI2RlZmluZSBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQwkiRW5hYmxlIFNDVFAgTlIt
U0FDSyIKLSNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01JTgkwCi0jZGVmaW5lIFNDVFBD
VExfTlJTQUNLX0VOQUJMRV9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVG
QVVMVAkwCi0KLS8qIHBrdGRyb3BfZW5hYmxlOiBFbmFibGUgU0NUUCBQYWNrZXQgRHJvcCBSZXBv
cnRzICovCi0jZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfREVTQwkiRW5hYmxlIFNDVFAg
UEtURFJPUCIKLSNkZWZpbmUgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9NSU4JMAotI2RlZmluZSBT
Q1RQQ1RMX1BLVERST1BfRU5BQkxFX01BWAkxCi0jZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFC
TEVfREVGQVVMVAkwCi0KLS8qIGxvb3BiYWNrX25vY3N1bTogRW5hYmxlIE5PIENzdW0gb24gcGFj
a2V0cyBzZW50IG9uIGxvb3BiYWNrICovCi0jZGVmaW5lIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VN
X0RFU0MJIkVuYWJsZSBOTyBDc3VtIG9uIHBhY2tldHMgc2VudCBvbiBsb29wYmFjayIKLSNkZWZp
bmUgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9MT09QQkFD
S19OT0NTVU1fTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fREVGQVVMVAkx
Ci0KLS8qIHBlZXJfY2hrb2g6IEFtb3VudCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBz
ZW50ICovCi0jZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9ERVNDCQkiQW1vdW50IHRvIGRlYml0
IHBlZXJzIHJ3bmQgcGVyIGNodW5rIHNlbnQiCi0jZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9N
SU4JCTAKLSNkZWZpbmUgU0NUUENUTF9QRUVSX0NIS09IX01BWAkJMHhGRkZGRkZGRgotI2RlZmlu
ZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVMVAkyNTYKLQotLyogbWF4YnVyc3Q6IERlZmF1bHQg
bWF4IGJ1cnN0IGZvciBzY3RwIGVuZHBvaW50cyAqLwotI2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNU
X0RFU0MJCSJEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2ludHMiCi0jZGVmaW5lIFND
VFBDVExfTUFYQlVSU1RfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfTUFYCQkweEZG
RkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfREVGQVVMVAlTQ1RQX0RFRl9NQVhfQlVS
U1QKLQotLyogZnJfbWF4YnVyc3Q6IERlZmF1bHQgbWF4IGJ1cnN0IGZvciBzY3RwIGVuZHBvaW50
cyB3aGVuIGZhc3QgcmV0cmFuc21pdHRpbmcgKi8KLSNkZWZpbmUgU0NUUENUTF9GUk1BWEJVUlNU
X0RFU0MJCSJEZWZhdWx0IGZyIG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2ludHMiCi0jZGVmaW5l
IFNDVFBDVExfRlJNQVhCVVJTVF9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9GUk1BWEJVUlNUX01B
WAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX0ZSTUFYQlVSU1RfREVGQVVMVAlTQ1RQX0RF
Rl9GUk1BWF9CVVJTVAotCi0KLS8qIG1heGNodW5rczogRGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1
ZXVlIHBlciBhc29jICovCi0jZGVmaW5lIFNDVFBDVExfTUFYQ0hVTktTX0RFU0MJCSJEZWZhdWx0
IG1heCBjaHVua3Mgb24gcXVldWUgcGVyIGFzb2MiCi0jZGVmaW5lIFNDVFBDVExfTUFYQ0hVTktT
X01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19NQVgJCTB4RkZGRkZGRkYKLSNkZWZp
bmUgU0NUUENUTF9NQVhDSFVOS1NfREVGQVVMVAlTQ1RQX0FTT0NfTUFYX0NIVU5LU19PTl9RVUVV
RQotCi0vKiB0Y2JoYXNoc2l6ZTogVHVuYWJsZSBmb3IgSGFzaCB0YWJsZSBzaXplcyAqLwotI2Rl
ZmluZSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX0RFU0MJIlR1bmFibGUgZm9yIFRDQiBoYXNoIHRhYmxl
IHNpemVzIgotI2RlZmluZSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01JTgkJMQotI2RlZmluZSBTQ1RQ
Q1RMX1RDQkhBU0hTSVpFX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX1RDQkhBU0hT
SVpFX0RFRkFVTFQJU0NUUF9UQ0JIQVNIU0laRQotCi0vKiBwY2JoYXNoc2l6ZTogVHVuYWJsZSBm
b3IgUENCIEhhc2ggdGFibGUgc2l6ZXMgKi8KLSNkZWZpbmUgU0NUUENUTF9QQ0JIQVNIU0laRV9E
RVNDCSJUdW5hYmxlIGZvciBQQ0IgaGFzaCB0YWJsZSBzaXplcyIKLSNkZWZpbmUgU0NUUENUTF9Q
Q0JIQVNIU0laRV9NSU4JCTEKLSNkZWZpbmUgU0NUUENUTF9QQ0JIQVNIU0laRV9NQVgJCTB4RkZG
RkZGRkYKLSNkZWZpbmUgU0NUUENUTF9QQ0JIQVNIU0laRV9ERUZBVUxUCVNDVFBfUENCSEFTSFNJ
WkUKLQotLyogbWluX3NwbGl0X3BvaW50OiBNaW5pbXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBj
aHVuayAqLwotI2RlZmluZSBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVF9ERVNDCSJNaW5pbXVtIHNp
emUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayIKLSNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9J
TlRfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfTUFYCTB4RkZGRkZGRkYK
LSNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVGQVVMVAlTQ1RQX0RFRkFVTFRfU1BM
SVRfUE9JTlRfTUlOCi0KLS8qIGNodW5rc2NhbGU6IFR1bmFibGUgZm9yIFNjYWxpbmcgb2YgbnVt
YmVyIG9mIGNodW5rcyBhbmQgbWVzc2FnZXMgKi8KLSNkZWZpbmUgU0NUUENUTF9DSFVOS1NDQUxF
X0RFU0MJCSJUdW5hYmxlIGZvciBTY2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3Nh
Z2VzIgotI2RlZmluZSBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUlOCQkxCi0jZGVmaW5lIFNDVFBDVExf
Q0hVTktTQ0FMRV9NQVgJCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9DSFVOS1NDQUxFX0RF
RkFVTFQJU0NUUF9DSFVOS1FVRVVFX1NDQUxFCi0KLS8qIGRlbGF5ZWRfc2Fja190aW1lOiBEZWZh
dWx0IGRlbGF5ZWQgU0FDSyB0aW1lciBpbiBtcyAqLwotI2RlZmluZSBTQ1RQQ1RMX0RFTEFZRURf
U0FDS19USU1FX0RFU0MJIkRlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVyIGluIG1zIgotI2RlZmlu
ZSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfREVMQVlF
RF9TQUNLX1RJTUVfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9ERUxBWUVEX1NBQ0tf
VElNRV9ERUZBVUxUCVNDVFBfUkVDVl9NU0VDCi0KLS8qIHNhY2tfZnJlcTogRGVmYXVsdCBTQUNL
IGZyZXF1ZW5jeSAqLwotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfRlJFUV9ERVNDCQkiRGVmYXVsdCBT
QUNLIGZyZXF1ZW5jeSIKLSNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFfTUlOCQkwCi0jZGVmaW5l
IFNDVFBDVExfU0FDS19GUkVRX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tf
RlJFUV9ERUZBVUxUCVNDVFBfREVGQVVMVF9TQUNLX0ZSRVEKLQotLyogc3lzX3Jlc291cmNlOiBN
YXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbSAqLwotI2RlZmluZSBT
Q1RQQ1RMX1NZU19SRVNPVVJDRV9ERVNDCSJNYXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMg
aW4gdGhlIHN5c3RlbSIKLSNkZWZpbmUgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUlOCTAKLSNkZWZp
bmUgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9T
WVNfUkVTT1VSQ0VfREVGQVVMVAlTQ1RQX0RFRl9TWVNURU1fUkVTQ19MSU1JVAotCi0vKiBhc29j
X3Jlc291cmNlOiBNYXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gYW4gYXNvYyAqLwot
I2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfREVTQwkiTWF4IG51bWJlciBvZiBjYWNoZWQg
cmVzb3VyY2VzIGluIGFuIGFzb2MiCi0jZGVmaW5lIFNDVFBDVExfQVNPQ19SRVNPVVJDRV9NSU4J
MAotI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUg
U0NUUENUTF9BU09DX1JFU09VUkNFX0RFRkFVTFQJU0NUUF9ERUZfQVNPQ19SRVNDX0xJTUlUCi0K
LS8qIGhlYXJ0YmVhdF9pbnRlcnZhbDogRGVmYXVsdCBoZWFydGJlYXQgaW50ZXJ2YWwgaW4gbXMg
Ki8KLSNkZWZpbmUgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxfREVTQwkiRGVmYXVsdCBoZWFy
dGJlYXQgaW50ZXJ2YWwgaW4gbXMiCi0jZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFM
X01JTgkwCi0jZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX01BWAkweEZGRkZGRkZG
Ci0jZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFVTFQJU0NUUF9IQl9ERUZB
VUxUX01TRUMKLQotLyogcG10dV9yYWlzZV90aW1lOiBEZWZhdWx0IFBNVFUgcmFpc2UgdGltZXIg
aW4gc2Vjb25kcyAqLwotI2RlZmluZSBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9ERVNDCSJEZWZh
dWx0IFBNVFUgcmFpc2UgdGltZXIgaW4gc2Vjb25kcyIKLSNkZWZpbmUgU0NUUENUTF9QTVRVX1JB
SVNFX1RJTUVfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfTUFYCTB4RkZG
RkZGRkYKLSNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfREVGQVVMVAlTQ1RQX0RFRl9Q
TVRVX1JBSVNFX1NFQwotCi0vKiBzaHV0ZG93bl9ndWFyZF90aW1lOiBEZWZhdWx0IHNodXRkb3du
IGd1YXJkIHRpbWVyIGluIHNlY29uZHMgKi8KLSNkZWZpbmUgU0NUUENUTF9TSFVURE9XTl9HVUFS
RF9USU1FX0RFU0MJIlNodXRkb3duIGd1YXJkIHRpbWVyIGluIHNlY29uZHMgKDAgbWVhbnMgNSB0
aW1lcyBSVE8uTWF4KSIKLSNkZWZpbmUgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FX01JTgkJ
MAotI2RlZmluZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUFYCQkweEZGRkZGRkZGCi0j
ZGVmaW5lIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElNRV9ERUZBVUxUCTAKLQotLyogc2VjcmV0
X2xpZmV0aW1lOiBEZWZhdWx0IHNlY3JldCBsaWZldGltZSBpbiBzZWNvbmRzICovCi0jZGVmaW5l
IFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX0RFU0MJIkRlZmF1bHQgc2VjcmV0IGxpZmV0aW1lIGlu
IHNlY29uZHMiCi0jZGVmaW5lIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX01JTgkwCi0jZGVmaW5l
IFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExf
U0VDUkVUX0xJRkVUSU1FX0RFRkFVTFQJU0NUUF9ERUZBVUxUX1NFQ1JFVF9MSUZFX1NFQwotCi0v
KiBydG9fbWF4OiBEZWZhdWx0IG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyAq
LwotI2RlZmluZSBTQ1RQQ1RMX1JUT19NQVhfREVTQwkJIkRlZmF1bHQgbWF4aW11bSByZXRyYW5z
bWlzc2lvbiB0aW1lb3V0IGluIG1zIgotI2RlZmluZSBTQ1RQQ1RMX1JUT19NQVhfTUlOCQkwCi0j
ZGVmaW5lIFNDVFBDVExfUlRPX01BWF9NQVgJCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9S
VE9fTUFYX0RFRkFVTFQJCVNDVFBfUlRPX1VQUEVSX0JPVU5ECi0KLS8qIHJ0b19taW46IERlZmF1
bHQgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNDVFBD
VExfUlRPX01JTl9ERVNDCQkiRGVmYXVsdCBtaW5pbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQg
aW4gbXMiCi0jZGVmaW5lIFNDVFBDVExfUlRPX01JTl9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9S
VE9fTUlOX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX1JUT19NSU5fREVGQVVMVAkJ
U0NUUF9SVE9fTE9XRVJfQk9VTkQKLQotLyogcnRvX2luaXRpYWw6IERlZmF1bHQgaW5pdGlhbCBy
ZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFNDVFBDVExfUlRPX0lOSVRJ
QUxfREVTQwkiRGVmYXVsdCBpbml0aWFsIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMiCi0j
ZGVmaW5lIFNDVFBDVExfUlRPX0lOSVRJQUxfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfUlRPX0lO
SVRJQUxfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfUlRPX0lOSVRJQUxfREVGQVVM
VAlTQ1RQX1JUT19JTklUSUFMCi0KLS8qIGluaXRfcnRvX21heDogRGVmYXVsdCBtYXhpbXVtIHJl
dHJhbnNtaXNzaW9uIHRpbWVvdXQgZHVyaW5nIGFzc29jaWF0aW9uIHNldHVwIGluIG1zICovCi0j
ZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX0RFU0MJIkRlZmF1bHQgbWF4aW11bSByZXRyYW5z
bWlzc2lvbiB0aW1lb3V0IGR1cmluZyBhc3NvY2lhdGlvbiBzZXR1cCBpbiBtcyIKLSNkZWZpbmUg
U0NUUENUTF9JTklUX1JUT19NQVhfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUT19NQVhf
TUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUT19NQVhfREVGQVVMVAlTQ1RQ
X1JUT19VUFBFUl9CT1VORAotCi0vKiB2YWxpZF9jb29raWVfbGlmZTogRGVmYXVsdCBjb29raWUg
bGlmZXRpbWUgaW4gc2VjICovCi0jZGVmaW5lIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVT
QwkiRGVmYXVsdCBjb29raWUgbGlmZXRpbWUgaW4gc2Vjb25kcyIKLSNkZWZpbmUgU0NUUENUTF9W
QUxJRF9DT09LSUVfTElGRV9NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZF
X01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVGQVVM
VAlTQ1RQX0RFRkFVTFRfQ09PS0lFX0xJRkUKLQotLyogaW5pdF9ydHhfbWF4OiBEZWZhdWx0IG1h
eGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGZvciBJTklUIGNodW5rcyAqLwotI2RlZmlu
ZSBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9ERVNDCSJEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJl
dHJhbnNtaXNzaW9uIGZvciBJTklUIGNodW5rcyIKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUWF9N
QVhfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfTUFYCTB4RkZGRkZGRkYKLSNk
ZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfREVGQVVMVAlTQ1RQX0RFRl9NQVhfSU5JVAotCi0v
KiBhc3NvY19ydHhfbWF4OiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9u
cyBwZXIgYXNzb2NpYXRpb24gKi8KLSNkZWZpbmUgU0NUUENUTF9BU1NPQ19SVFhfTUFYX0RFU0MJ
IkRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIHBlciBhc3NvY2lhdGlv
biIKLSNkZWZpbmUgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01JTgkwCi0jZGVmaW5lIFNDVFBDVExf
QVNTT0NfUlRYX01BWF9NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX0FTU09DX1JUWF9N
QVhfREVGQVVMVAlTQ1RQX0RFRl9NQVhfU0VORAotCi0vKiBwYXRoX3J0eF9tYXg6IERlZmF1bHQg
bWF4aW11bSBvZiByZXRyYW5zbWlzc2lvbnMgcGVyIHBhdGggKi8KLSNkZWZpbmUgU0NUUENUTF9Q
QVRIX1JUWF9NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIG9mIHJldHJhbnNtaXNzaW9ucyBwZXIg
cGF0aCIKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUlOCTAKLSNkZWZpbmUgU0NUUENU
TF9QQVRIX1JUWF9NQVhfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1JUWF9N
QVhfREVGQVVMVAlTQ1RQX0RFRl9NQVhfUEFUSF9SVFgKLQotLyogcGF0aF9wZl90aHJlc2hvbGQ6
IHRocmVzaG9sZCBmb3IgY29uc2lkZXJpbmcgdGhlIHBhdGggcG90ZW50aWFsbHkgZmFpbGVkICov
Ci0jZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfREVTQwkJIkRlZmF1bHQgcG90ZW50
aWFsbHkgZmFpbGVkIHRocmVzaG9sZCIKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9M
RF9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NQVgJCTB4RkZGRgot
I2RlZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFRkFVTFQJU0NUUENUTF9QQVRIX1BG
X1RIUkVTSE9MRF9NQVgKLQotLyogYWRkX21vcmVfb25fb3V0cHV0OiBXaGVuIHNwYWNlLXdpc2Ug
aXMgaXQgd29ydGh3aGlsZSB0byB0cnkgdG8gYWRkIG1vcmUgdG8gYSBzb2NrZXQgc2VuZCBidWZm
ZXIgKi8KLSNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfREVTQwkiV2hlbiBzcGFj
ZS13aXNlIGlzIGl0IHdvcnRod2hpbGUgdG8gdHJ5IHRvIGFkZCBtb3JlIHRvIGEgc29ja2V0IHNl
bmQgYnVmZmVyIgotI2RlZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9NSU4JMAotI2Rl
ZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBT
Q1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERUZBVUxUIFNDVFBfREVGQVVMVF9BRERfTU9SRQot
Ci0vKiBpbmNvbWluZ19zdHJlYW1zOiBEZWZhdWx0IG51bWJlciBvZiBpbmNvbWluZyBzdHJlYW1z
ICovCi0jZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19ERVNDCSJEZWZhdWx0IG51bWJl
ciBvZiBpbmNvbWluZyBzdHJlYW1zIgotI2RlZmluZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNf
TUlOCTEKLSNkZWZpbmUgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX01BWAk2NTUzNQotI2RlZmlu
ZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNfREVGQVVMVCBTQ1RQX0lTVFJFQU1fSU5JVElBTAot
Ci0vKiBvdXRnb2luZ19zdHJlYW1zOiBEZWZhdWx0IG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1z
ICovCi0jZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19ERVNDCSJEZWZhdWx0IG51bWJl
ciBvZiBvdXRnb2luZyBzdHJlYW1zIgotI2RlZmluZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNf
TUlOCTEKLSNkZWZpbmUgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01BWAk2NTUzNQotI2RlZmlu
ZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVGQVVMVCBTQ1RQX09TVFJFQU1fSU5JVElBTAot
Ci0vKiBjbXRfb25fb2ZmOiBDTVQgb24vb2ZmIGZsYWcgKi8KLSNkZWZpbmUgU0NUUENUTF9DTVRf
T05fT0ZGX0RFU0MJCSJDTVQgc2V0dGluZ3MiCi0jZGVmaW5lIFNDVFBDVExfQ01UX09OX09GRl9N
SU4JCVNDVFBfQ01UX09GRgotI2RlZmluZSBTQ1RQQ1RMX0NNVF9PTl9PRkZfTUFYCQlTQ1RQX0NN
VF9NQVgKLSNkZWZpbmUgU0NUUENUTF9DTVRfT05fT0ZGX0RFRkFVTFQJU0NUUF9DTVRfT0ZGCi0K
LS8qIGNtdF91c2VfZGFjOiBDTVQgREFDIG9uL29mZiBmbGFnICovCi0jZGVmaW5lIFNDVFBDVExf
Q01UX1VTRV9EQUNfREVTQwkiQ01UIERBQyBvbi9vZmYgZmxhZyIKLSNkZWZpbmUgU0NUUENUTF9D
TVRfVVNFX0RBQ19NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9DTVRfVVNFX0RBQ19NQVgJCTEKLSNk
ZWZpbmUgU0NUUENUTF9DTVRfVVNFX0RBQ19ERUZBVUxUICAgIAkwCi0KLS8qIGN3bmRfbWF4YnVy
c3Q6IFVzZSBhIENXTkQgYWRqdXN0aW5nIG1heGJ1cnN0ICovCi0jZGVmaW5lIFNDVFBDVExfQ1dO
RF9NQVhCVVJTVF9ERVNDCSJVc2UgYSBDV05EIGFkanVzdGluZyBtYXhidXJzdCIKLSNkZWZpbmUg
U0NUUENUTF9DV05EX01BWEJVUlNUX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfQ1dORF9NQVhCVVJT
VF9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVMVAkxCi0KLS8qIG5h
dF9mcmllbmRseTogU0NUUCBOQVQgZnJpZW5kbHkgb3BlcmF0aW9uICovCi0jZGVmaW5lIFNDVFBD
VExfTkFUX0ZSSUVORExZX0RFU0MJIlNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiIKLSNkZWZp
bmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5E
TFlfTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVGQVVMVAkxCi0KLS8qIGFi
Y19sX3ZhcjogU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChMKSAqLwotI2RlZmluZSBT
Q1RQQ1RMX0FCQ19MX1ZBUl9ERVNDCQkiU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChM
KSIKLSNkZWZpbmUgU0NUUENUTF9BQkNfTF9WQVJfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfQUJD
X0xfVkFSX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERUZBVUxU
CTIKLQotLyogbWF4X2NoYWluZWRfbWJ1ZnM6IERlZmF1bHQgbWF4IG51bWJlciBvZiBzbWFsbCBt
YnVmcyBvbiBhIGNoYWluICovCi0jZGVmaW5lIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfREVT
QwkiRGVmYXVsdCBtYXggbnVtYmVyIG9mIHNtYWxsIG1idWZzIG9uIGEgY2hhaW4iCi0jZGVmaW5l
IFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9NQVhfQ0hB
SU5FRF9NQlVGU19NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01C
VUZTX0RFRkFVTFQJU0NUUF9ERUZBVUxUX01CVUZTX0lOX0NIQUlOCi0KLS8qIGRvX3NjdHBfZHJh
aW46IFNob3VsZCBTQ1RQIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzICovCi0jZGVmaW5lIFND
VFBDVExfRE9fU0NUUF9EUkFJTl9ERVNDCSJTaG91bGQgU0NUUCByZXNwb25kIHRvIHRoZSBkcmFp
biBjYWxscyIKLSNkZWZpbmUgU0NUUENUTF9ET19TQ1RQX0RSQUlOX01JTgkwCi0jZGVmaW5lIFND
VFBDVExfRE9fU0NUUF9EUkFJTl9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5f
REVGQVVMVAkxCi0KLS8qIGhiX21heF9idXJzdDogQ29uZmlybWF0aW9uIEhlYXJ0YmVhdCBtYXgg
YnVyc3Q/ICovCi0jZGVmaW5lIFNDVFBDVExfSEJfTUFYX0JVUlNUX0RFU0MJIkNvbmZpcm1hdGlv
biBIZWFydGJlYXQgbWF4IGJ1cnN0IgotI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NSU4J
MQotI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBT
Q1RQQ1RMX0hCX01BWF9CVVJTVF9ERUZBVUxUCVNDVFBfREVGX0hCTUFYX0JVUlNUCi0KLS8qIGFi
b3J0X2F0X2xpbWl0OiBXaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBhYm9ydCAqLwotI2RlZmlu
ZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFU0MJIldoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0
IGFib3J0IgotI2RlZmluZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01JTgkwCi0jZGVmaW5lIFND
VFBDVExfQUJPUlRfQVRfTElNSVRfTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9BQk9SVF9BVF9MSU1J
VF9ERUZBVUxUCTAKLQotLyogbWluX3Jlc2lkdWFsOiBtaW4gcmVzaWR1YWwgaW4gYSBkYXRhIGZy
YWdtZW50IGxlZnRvdmVyICovCi0jZGVmaW5lIFNDVFBDVExfTUlOX1JFU0lEVUFMX0RFU0MJIk1p
bmltdW0gcmVzaWR1YWwgZGF0YSBjaHVuayBpbiBzZWNvbmQgcGFydCBvZiBzcGxpdCIKLSNkZWZp
bmUgU0NUUENUTF9NSU5fUkVTSURVQUxfTUlOCTIwCi0jZGVmaW5lIFNDVFBDVExfTUlOX1JFU0lE
VUFMX01BWAk2NTUzNQotI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERUZBVUxUCTE0NTIK
LQotLyogbWF4X3JldHJhbl9jaHVuazogbWF4IGNodW5rIHJldHJhbnNtaXNzaW9ucyAqLwotI2Rl
ZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTktfREVTQwkiTWF4aW11bSB0aW1lcyBhbiB1bmx1
Y2t5IGNodW5rIGNhbiBiZSByZXRyYW4nZCBiZWZvcmUgYXNzb2MgYWJvcnQiCi0jZGVmaW5lIFND
VFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5f
Q0hVTktfTUFYCTY1NTM1Ci0jZGVmaW5lIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19ERUZBVUxU
CTMwCi0KLS8qIHNjdHBfbG9nZ2luZzogVGhpcyBnaXZlcyB1cyBsb2dnaW5nIHdoZW4gdGhlIG9w
dGlvbnMgYXJlIGVuYWJsZWQgKi8KLSNkZWZpbmUgU0NUUENUTF9MT0dHSU5HX0xFVkVMX0RFU0MJ
Ikx0cmFjZS9LVFIgdHJhY2UgbG9nZ2luZyBsZXZlbCIKLSNkZWZpbmUgU0NUUENUTF9MT0dHSU5H
X0xFVkVMX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NQVgJMHhmZmZmZmZm
ZgotI2RlZmluZSBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfREVGQVVMVAkwCi0KLS8qIEpSUyAtIGRl
ZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSBzeXNjdGwgKi8KLSNkZWZpbmUgU0NUUENU
TF9ERUZBVUxUX0NDX01PRFVMRV9ERVNDCQkiRGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgbW9k
dWxlIgotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01JTgkJMAotI2RlZmluZSBT
Q1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01BWAkJMgotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRf
Q0NfTU9EVUxFX0RFRkFVTFQJMAotCi0vKiBSUyAtIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcg
bW9kdWxlIHN5c2N0bCAqLwotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxFX0RFU0MJ
CSJEZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSIKLSNkZWZpbmUgU0NUUENUTF9ERUZB
VUxUX1NTX01PRFVMRV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9N
QVgJCTUKLSNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9ERUZBVUxUCTAKLQotLyog
UlJTIC0gZGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlICovCi0jZGVmaW5lIFNDVFBDVExfREVG
QVVMVF9GUkFHX0lOVEVSTEVBVkVfREVTQwkiRGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlIGxl
dmVsIgotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01JTgkwCi0jZGVm
aW5lIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfTUFYCTIKLSNkZWZpbmUgU0NUUENU
TF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxUCTEKLQotLyogbW9iaWxpdHlfYmFzZTog
RW5hYmxlIFNDVFAgbW9iaWxpdHkgc3VwcG9ydCAqLwotI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZ
X0JBU0VfREVTQwkiRW5hYmxlIFNDVFAgYmFzZSBtb2JpbGl0eSIKLSNkZWZpbmUgU0NUUENUTF9N
T0JJTElUWV9CQVNFX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NQVgJMQot
I2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0JBU0VfREVGQVVMVAkwCi0KLS8qIG1vYmlsaXR5X2Zh
c3RoYW5kb2ZmOiBFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYgc3VwcG9ydCAqLwotI2RlZmluZSBT
Q1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFU0MJIkVuYWJsZSBTQ1RQIGZhc3QgaGFuZG9m
ZiIKLSNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9NSU4JMAotI2RlZmluZSBT
Q1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX01BWAkxCi0jZGVmaW5lIFNDVFBDVExfTU9CSUxJ
VFlfRkFTVEhBTkRPRkZfREVGQVVMVAkwCi0KLS8qIEVuYWJsZSBTQ1RQL1VEUCB0dW5uZWxpbmcg
cG9ydCAqLwotI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDCQkiU2V0IHRo
ZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydCIKLSNkZWZpbmUgU0NUUENUTF9VRFBfVFVOTkVMSU5H
X1BPUlRfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01BWAkJNjU1
MzUKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJ
TkdfUE9SVF9ERUZBVUxUCTAKLSNlbHNlCi0jZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElOR19Q
T1JUX0RFRkFVTFQJU0NUUF9PVkVSX1VEUF9UVU5ORUxJTkdfUE9SVAotI2VuZGlmCi0KLS8qIEVu
YWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJpdCAqLwotI2RlZmluZSBTQ1RQ
Q1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX0RFU0MJIkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBT
QUNLLUlNTUVESUFURUxZLWJpdC4iCi0jZGVmaW5lIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9F
TkFCTEVfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9NQVgJ
MQotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX0RFRkFVTFQJU0NUUENU
TF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9NQVgKLQotLyogRW5hYmxlIHNlbmRpbmcgb2YgdGhl
IE5BVC1GUklFTkRMWSBtZXNzYWdlICovCi0jZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX0lO
SVRTX0RFU0MJIkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBuYXQtZnJpZW5kbHkgU0NUUCBvcHRpb24g
b24gSU5JVHMuIgotI2RlZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4JMAotI2Rl
ZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX05B
VF9GUklFTkRMWV9JTklUU19ERUZBVUxUCVNDVFBDVExfTkFUX0ZSSUVORExZX0lOSVRTX01JTgot
Ci0vKiBWdGFnIHRpbWUgd2FpdCBpbiBzZWNvbmRzICovCi0jZGVmaW5lIFNDVFBDVExfVElNRV9X
QUlUX0RFU0MJIlZ0YWcgdGltZSB3YWl0IHRpbWUgaW4gc2Vjb25kcywgMCBkaXNhYmxlcyBpdC4i
Ci0jZGVmaW5lIFNDVFBDVExfVElNRV9XQUlUX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfVElNRV9X
QUlUX01BWAkweGZmZmZmZmZmCi0jZGVmaW5lIFNDVFBDVExfVElNRV9XQUlUX0RFRkFVTFQJU0NU
UF9USU1FX1dBSVQKLQotLyogRW5hYmxlIFNlbmQvUmVjZWl2ZSBidWZmZXIgc3BsaXR0aW5nICov
Ci0jZGVmaW5lIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19ERVNDCQkiRW5hYmxlIHNlbmQvcmVj
ZWl2ZSBidWZmZXIgc3BsaXR0aW5nLiIKLSNkZWZpbmUgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5H
X01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfTUFYCQkweDMKLSNkZWZp
bmUgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX0RFRkFVTFQJU0NUUENUTF9CVUZGRVJfU1BMSVRU
SU5HX01JTgotCi0vKiBJbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGluIE1UVSAqLwotI2RlZmlu
ZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERVNDCSJJbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGlu
IE1UVXMiCi0jZGVmaW5lIFNDVFBDVExfSU5JVElBTF9DV05EX01JTgkwCi0jZGVmaW5lIFNDVFBD
VExfSU5JVElBTF9DV05EX01BWAkweGZmZmZmZmZmCi0jZGVmaW5lIFNDVFBDVExfSU5JVElBTF9D
V05EX0RFRkFVTFQJMwotCi0vKiBydHR2YXIgc21vb3RoIGF2ZyBmb3IgYncgY2FsYyAgKi8KLSNk
ZWZpbmUgU0NUUENUTF9SVFRWQVJfQldfREVTQwkiU2hpZnQgYW1vdW50IGZvciBidyBzbW9vdGhp
bmcgb24gcnR0IGNhbGMiCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX0JXX01JTgkwCi0jZGVmaW5l
IFNDVFBDVExfUlRUVkFSX0JXX01BWAkzMgotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9CV19ERUZB
VUxUCTQKLQotLyogcnR0dmFyIHNtb290aCBhdmcgZm9yIGJ3IGNhbGMgICovCi0jZGVmaW5lIFND
VFBDVExfUlRUVkFSX1JUVF9ERVNDCSJTaGlmdCBhbW91bnQgZm9yIHJ0dCBzbW9vdGhpbmcgb24g
cnR0IGNhbGMiCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX1JUVF9NSU4JMAotI2RlZmluZSBTQ1RQ
Q1RMX1JUVFZBUl9SVFRfTUFYCTMyCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX1JUVF9ERUZBVUxU
CTUKLQotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9ERVNDCSJXaGF0IHRvIHJldHVybiB3
aGVuIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZCIKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFS
RVRfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfTUFYCTEKLSNkZWZpbmUgU0NU
UENUTF9SVFRWQVJfRVFSRVRfREVGQVVMVAkwCi0KLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RF
QURZU19ERVNDCSJIb3cgbWFueSB0aGUgc2FtZXMgaXQgdGFrZXMgdG8gdHJ5IHN0ZXAgZG93biBv
ZiBjd25kIgotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01JTgkwCi0jZGVmaW5lIFND
VFBDVExfUlRUVkFSX1NURUFEWVNfTUFYCTB4RkZGRgotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9T
VEVBRFlTX0RFRkFVTFQJMjAgLyogMCBtZWFucyBkaXNhYmxlIGZlYXR1cmUgKi8KLQotI2RlZmlu
ZSBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX0RFU0MJIkVuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2Vu
dGVyIEVDTiIKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9NSU4JMAotI2RlZmluZSBT
Q1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01BWAkxCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX0RDQ0NF
Q05fREVGQVVMVAkxIC8qIDAgbWVhbnMgZGlzYWJsZSBmZWF0dXJlICovCi0KLSNkZWZpbmUgU0NU
UENUTF9CTEFDS0hPTEVfREVTQwkJIkVuYWJsZSBTQ1RQIGJsYWNraG9saW5nLiBTZWUgYmxhY2to
b2xlKDQpIGZvciBtb3JlIGRldGFpbHMuIgotI2RlZmluZSBTQ1RQQ1RMX0JMQUNLSE9MRV9NSU4J
CTAKLSNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfTUFYCQkyCi0jZGVmaW5lIFNDVFBDVExfQkxB
Q0tIT0xFX0RFRkFVTFQJU0NUUENUTF9CTEFDS0hPTEVfTUlOCi0KLSNkZWZpbmUgU0NUUENUTF9E
SUFHX0lORk9fQ09ERV9ERVNDCSJEaWFnbm9zdGljIGluZm9ybWF0aW9uIGVycm9yIGNhdXNlIGNv
ZGUiCi0jZGVmaW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUlOCTAKLSNkZWZpbmUgU0NUUENU
TF9ESUFHX0lORk9fQ09ERV9NQVgJNjU1MzUKLSNkZWZpbmUgU0NUUENUTF9ESUFHX0lORk9fQ09E
RV9ERUZBVUxUCTAKLQotI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKLS8qIGRlYnVnOiBDb25maWd1
cmUgZGVidWcgb3V0cHV0ICovCi0jZGVmaW5lIFNDVFBDVExfREVCVUdfREVTQwkiQ29uZmlndXJl
IGRlYnVnIG91dHB1dCIKLSNkZWZpbmUgU0NUUENUTF9ERUJVR19NSU4JMAotI2RlZmluZSBTQ1RQ
Q1RMX0RFQlVHX01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfREVCVUdfREVGQVVMVAkw
Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmluZSBTQ1RQQ1RMX01BSU5f
VElNRVJfREVTQwkJIk1haW4gdGltZXIgaW50ZXJ2YWwgaW4gbXMiCi0jZGVmaW5lIFNDVFBDVExf
TUFJTl9USU1FUl9NSU4JCTEKLSNkZWZpbmUgU0NUUENUTF9NQUlOX1RJTUVSX01BWAkJMHhGRkZG
RkZGRgotI2RlZmluZSBTQ1RQQ1RMX01BSU5fVElNRVJfREVGQVVMVAkxMAotCi0jZGVmaW5lIFND
VFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFU0MJCSJJZ25vcmUgVk13YXJlIEludGVy
ZmFjZXMiCi0jZGVmaW5lIFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX01JTgkJMAot
I2RlZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NQVgJCTEKLSNkZWZpbmUg
U0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfREVGQVVMVAlTQ1RQQ1RMX0lHTk9SRV9W
TVdBUkVfSU5URVJGQUNFU19NQVgKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0jZGVmaW5lIFNDVFBDVExfT1VUUFVUX1VO
TE9DS0VEX0RFU0MJIlVubG9jayBzb2NrZXQgd2hlbiBzZW5kaW5nIHBhY2tldHMgZG93biB0byBJ
UC4iCi0jZGVmaW5lIFNDVFBDVExfT1VUUFVUX1VOTE9DS0VEX01JTgkwCi0jZGVmaW5lIFNDVFBD
VExfT1VUUFVUX1VOTE9DS0VEX01BWAkxCi0jZGVmaW5lIFNDVFBDVExfT1VUUFVUX1VOTE9DS0VE
X0RFRkFVTFQJU0NUUENUTF9PVVRQVVRfVU5MT0NLRURfTUlOCi0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hET0dfTElNSVRfREVTQwki
QWRkcmVzcyB3YXRjaGRvZyBsaW1pdCIKLSNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJ
TUlUX01JTgkJMAotI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hET0dfTElNSVRfTUFYCQkweEZG
RkZGRkZGCi0jZGVmaW5lCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9ERUZBVUxUCVNDVFBD
VExfQUREUl9XQVRDSERPR19MSU1JVF9NSU4KLQotI2RlZmluZQlTQ1RQQ1RMX1ZUQUdfV0FUQ0hE
T0dfTElNSVRfREVTQwkiVlRhZyB3YXRjaGRvZyBsaW1pdCIKLSNkZWZpbmUJU0NUUENUTF9WVEFH
X1dBVENIRE9HX0xJTUlUX01JTgkJMAotI2RlZmluZQlTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElN
SVRfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lCVNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9E
RUZBVUxUCVNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9NSU4KLSNlbmRpZgotCi0jaWYgZGVm
aW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LSNpZiBkZWZpbmVkKFNZU0NUTF9ERUNMKQotU1lTQ1RMX0RFQ0woX25ldF9pbmV0X3NjdHApOwot
I2VuZGlmCi0jZW5kaWYKLQotdm9pZCBzY3RwX2luaXRfc3lzY3Rscyh2b2lkKTsKLSNpZiBkZWZp
bmVkKF9fV2luZG93c19fKQotdm9pZCBzY3RwX2ZpbmlzaF9zeXNjdGxzKHZvaWQpOwotI2VuZGlm
Ci0KLSNlbmRpZiAvKiBfS0VSTkVMICovCi0jZW5kaWYgLyogX19zY3RwX3N5c2N0bF9oX18gKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk1MDdjNzE4
ZjZmMTc0MGQ5YTRhOWI1YTk0ZWJhY2VlMDg2YzkzODQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKKysr
IC9kZXYvbnVsbApAQCAtMSwxNjIwICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAx
LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X3RpbWVyLmMgMzE3NTkyIDIwMTctMDQtMjkgMDk6NTc6MjdaIHR1ZXhlbiAkIik7Ci0jZW5kaWYK
LQotI2RlZmluZSBfSVBfVkhMCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2lmZGVmIElORVQ2Ci0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19GcmVlQlNEKQotI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgotI2VuZGlm
Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9pbmRhdGEuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX2lucHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVU
NikKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPG5ldGlu
ZXQvdWRwLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jZGVm
aW5lIEFQUExFX0ZJTEVfTk8gNgotI2VuZGlmCi0KLXZvaWQKLXNjdHBfYXVkaXRfcmV0cmFubWlz
c2lvbl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGs7Ci0KLQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LCAiQXVkaXQg
aW52b2tlZCBvbiBzZW5kIHF1ZXVlIGNudDolZCBvbnF1ZXVlOiVkXG4iLAotCQkJYXNvYy0+c2Vu
dF9xdWV1ZV9yZXRyYW5fY250LAotCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnQpOwotCWFzb2MtPnNl
bnRfcXVldWVfcmV0cmFuX2NudCA9IDA7Ci0JYXNvYy0+c2VudF9xdWV1ZV9jbnQgPSAwOwotCVRB
SUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChj
aGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCXNjdHBfdWNvdW50X2luY3Io
YXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJfQotCQlhc29jLT5zZW50X3F1ZXVlX2Nu
dCsrOwotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7Ci0JCWlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsK
LQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJfQot
CX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25l
eHQpIHsKLQkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJc2N0
cF91Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQl9Ci0JfQotCVND
VFBEQkcoU0NUUF9ERUJVR19USU1FUjQsICJBdWRpdCBjb21wbGV0ZXMgcmV0cmFuOiVkIG9ucXVl
dWU6JWRcbiIsCi0JCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCwKLQkJYXNvYy0+c2VudF9x
dWV1ZV9jbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KHN0
cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsIHVpbnQxNl90IHRocmVzaG9sZCkKLXsKLQlpZiAobmV0KSB7Ci0JCW5l
dC0+ZXJyb3JfY291bnQrKzsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwgIkVycm9yIGNv
dW50IGZvciAlcCBub3cgJWQgdGhyZXNoOiVkXG4iLAotCQkJKHZvaWQgKiluZXQsIG5ldC0+ZXJy
b3JfY291bnQsCi0JCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkKTsKLQkJaWYgKG5ldC0+ZXJyb3Jf
Y291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7Ci0JCQkvKiBXZSBoYWQgYSB0aHJlc2hv
bGQgZmFpbHVyZSAqLwotCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFC
TEUpIHsKLQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJ
bmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVRX1BSSU1BUlk7Ci0JCQkJbmV0LT5kZXN0
X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7Ci0JCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZ
X0lOVEVSRkFDRV9ET1dOLAotCQkJCSAgICBzdGNiLCAwLAotCQkJCSAgICAodm9pZCAqKW5ldCwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0KLQkJfSBlbHNlIGlmICgobmV0LT5wZl90aHJlc2hv
bGQgPCBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSAmJgotCQkgICAgICAgICAgIChuZXQtPmVycm9y
X2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQpKSB7Ci0JCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUEYpKSB7Ci0JCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9QRjsK
LQkJCQluZXQtPmxhc3RfYWN0aXZlID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotCQkJCXNjdHBf
c2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJICAgICAgICAgICAgICAgIGlucCwg
c3RjYiwgbmV0LAotCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9USU1FUiArIFND
VFBfTE9DXzEpOwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVB
VCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJfQotCQl9Ci0JfQotCWlmIChzdGNiID09IE5VTEwpCi0J
CXJldHVybiAoMCk7Ci0KLQlpZiAobmV0KSB7Ci0JCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKSB7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCXNjdHBfbWlz
Y19pbnRzKFNDVFBfVEhSRVNIT0xEX0lOQ1IsCi0JCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJh
bGxfZXJyb3JfY291bnQsCi0JCQkJCSAgICAgICAoc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2Nv
dW50KzEpLAotCQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfVElNRVIsCi0JCQkJCSAgICAgICBf
X0xJTkVfXyk7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQrKzsKLQkJ
fQotCX0gZWxzZSB7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVT
SE9MRF9JTkNSLAotCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0J
CQkJICAgICAgIChzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQrMSksCi0JCQkJICAgICAg
IFNDVFBfRlJPTV9TQ1RQX1RJTUVSLAotCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCX0KLQkJc3Rj
Yi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50Kys7Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19U
SU1FUjQsICJPdmVyYWxsIGVycm9yIGNvdW50IGZvciAlcCBub3cgJWQgdGhyZXNoOiV1IHN0YXRl
OiV4XG4iLAotCQkodm9pZCAqKSZzdGNiLT5hc29jLCBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3Jf
Y291bnQsCi0JCSh1aW50MzJfdCl0aHJlc2hvbGQsCi0JCSgobmV0ID09IE5VTEwpID8gKHVpbnQz
Ml90KSAwIDogKHVpbnQzMl90KSBuZXQtPmRlc3Rfc3RhdGUpKTsKLQkvKgotCSAqIFdlIHNwZWNp
ZmljYWxseSBkbyBub3QgZG8gPj0gdG8gZ2l2ZSB0aGUgYXNzb2Mgb25lIG1vcmUgY2hhbmdlCi0J
ICogYmVmb3JlIHdlIGZhaWwgaXQuCi0JICovCi0JaWYgKHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJv
cl9jb3VudCA+IHRocmVzaG9sZCkgewotCQkvKiBBYm9ydCBub3RpZmljYXRpb24gc2VuZHMgYSBV
TFAgbm90aWZ5ICovCi0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQkJb3BfZXJyID0gc2N0cF9n
ZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NvY2lhdGlvbiBlcnJvciBjb3VudGVyIGV4
Y2VlZGVkIik7Ci0JCWlucC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfVElNRVIg
KyBTQ1RQX0xPQ18yOwotCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3Bf
ZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm4gKDEpOwotCX0KLQlyZXR1cm4gKDAp
OwotfQotCi0vKgotICogc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoKSByZXR1cm5zIGEgbm9uLU5V
TEwgcG9pbnRlciBhcyBsb25nCi0gKiB0aGUgYXJndW1lbnQgbmV0IGlzIG5vbi1OVUxMLgotICov
Ci1zdHJ1Y3Qgc2N0cF9uZXRzICoKLXNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0gICAgaW50IG1vZGUpCi17
Ci0JLyogRmluZCBhbmQgcmV0dXJuIGFuIGFsdGVybmF0ZSBuZXR3b3JrIGlmIHBvc3NpYmxlICov
Ci0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0LCAqbW5ldCwgKm1pbl9lcnJvcnNfbmV0ID0gTlVMTCAs
ICptYXhfY3duZF9uZXQgPSBOVUxMOwotCWludCBvbmNlOwotCS8qIEpSUyA1LzE0LzA3IC0gSW5p
dGlhbGl6ZSBtaW5fZXJyb3JzIHRvIGFuIGltcG9zc2libGUgdmFsdWUuICovCi0JaW50IG1pbl9l
cnJvcnMgPSAtMTsKLQl1aW50MzJfdCBtYXhfY3duZCA9IDA7Ci0KLQlpZiAoc3RjYi0+YXNvYy5u
dW1uZXRzID09IDEpIHsKLQkJLyogTm8gb3RoZXJzIGJ1dCBuZXQgKi8KLQkJcmV0dXJuIChUQUlM
UV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKSk7Ci0JfQotCS8qCi0JICogSlJTIDUvMTQvMDcgLSBJ
ZiBtb2RlIGlzIHNldCB0byAyLCB1c2UgdGhlIENNVCBQRiBmaW5kIGFsdGVybmF0ZSBuZXQgYWxn
b3JpdGhtLgotCSAqIFRoaXMgYWxnb3JpdGhtIGNob29zZXMgdGhlIGFjdGl2ZSBkZXN0aW5hdGlv
biAobm90IGluIFBGIHN0YXRlKSB3aXRoIHRoZSBsYXJnZXN0Ci0JICogY3duZCB2YWx1ZS4gSWYg
YWxsIGRlc3RpbmF0aW9ucyBhcmUgaW4gUEYgc3RhdGUsIHVucmVhY2hhYmxlLCBvciB1bmNvbmZp
cm1lZCwgY2hvb3NlCi0JICogdGhlIGRlc2luYXRpb24gdGhhdCBpcyBpbiBQRiBzdGF0ZSB3aXRo
IHRoZSBsb3dlc3QgZXJyb3IgY291bnQuIEluIGNhc2Ugb2YgYSB0aWUsCi0JICogY2hvb3NlIHRo
ZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IGFjdGl2ZS4KLQkgKi8KLQlpZiAo
bW9kZSA9PSAyKSB7Ci0JCVRBSUxRX0ZPUkVBQ0gobW5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7Ci0JCQkvKiBKUlMgNS8xNC8wNyAtIElmIHRoZSBkZXN0aW5hdGlvbiBpcyB1bnJl
YWNoYWJsZSBvciB1bmNvbmZpcm1lZCwgc2tpcCBpdC4gKi8KLQkJCWlmICgoKG1uZXQtPmRlc3Rf
c3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAhPSBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB8fAot
CQkJICAgIChtbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgewotCQkJ
CWNvbnRpbnVlOwotCQkJfQotCQkJLyoKLQkJCSAqIEpSUyA1LzE0LzA3IC0gIElmIHRoZSBkZXN0
aW5hdGlvbiBpcyByZWFjaGFibGUgYnV0IGluIFBGIHN0YXRlLCBjb21wYXJlCi0JCQkgKiAgdGhl
IGVycm9yIGNvdW50IG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgbWluaW11bSBlcnJvciBjb3Vu
dCBzZWVuIHRodXMgZmFyLgotCQkJICogIFN0b3JlIHRoZSBkZXN0aW5hdGlvbiB3aXRoIHRoZSBs
b3dlciBlcnJvciBjb3VudC4gIElmIHRoZSBlcnJvciBjb3VudHMgYXJlCi0JCQkgKiAgZXF1YWws
IHN0b3JlIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IGFjdGl2ZS4KLQkJ
CSAqLwotCQkJaWYgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKLQkJCQkvKgot
CQkJCSAqIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIHVuZGVyIGNvbnNpZGVyYXRp
b24gaXMgdGhlIGN1cnJlbnQKLQkJCQkgKiAgZGVzdGluYXRpb24sIHdvcmsgYXMgaWYgdGhlIGVy
cm9yIGNvdW50IGlzIG9uZSBoaWdoZXIuICBUaGUKLQkJCQkgKiAgYWN0dWFsIGVycm9yIGNvdW50
IHdpbGwgbm90IGJlIGluY3JlbWVudGVkIHVudGlsIGxhdGVyIGluIHRoZQotCQkJCSAqICB0MyBo
YW5kbGVyLgotCQkJCSAqLwotCQkJCWlmIChtbmV0ID09IG5ldCkgewotCQkJCQlpZiAobWluX2Vy
cm9ycyA9PSAtMSkgewotCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVycm9yX2NvdW50ICsgMTsK
LQkJCQkJCW1pbl9lcnJvcnNfbmV0ID0gbW5ldDsKLQkJCQkJfSBlbHNlIGlmIChtbmV0LT5lcnJv
cl9jb3VudCArIDEgPCBtaW5fZXJyb3JzKSB7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJy
b3JfY291bnQgKyAxOwotCQkJCQkJbWluX2Vycm9yc19uZXQgPSBtbmV0OwotCQkJCQl9IGVsc2Ug
aWYgKG1uZXQtPmVycm9yX2NvdW50ICsgMSA9PSBtaW5fZXJyb3JzCi0JCQkJCQkJCSYmIG1uZXQt
Pmxhc3RfYWN0aXZlID4gbWluX2Vycm9yc19uZXQtPmxhc3RfYWN0aXZlKSB7Ci0JCQkJCQltaW5f
ZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291bnQg
KyAxOwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChtaW5f
ZXJyb3JzID09IC0xKSB7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291bnQ7Ci0J
CQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCX0gZWxzZSBpZiAobW5ldC0+ZXJyb3Jf
Y291bnQgPCBtaW5fZXJyb3JzKSB7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291
bnQ7Ci0JCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCX0gZWxzZSBpZiAobW5ldC0+
ZXJyb3JfY291bnQgPT0gbWluX2Vycm9ycwotCQkJCQkJCQkmJiBtbmV0LT5sYXN0X2FjdGl2ZSA+
IG1pbl9lcnJvcnNfbmV0LT5sYXN0X2FjdGl2ZSkgewotCQkJCQkJbWluX2Vycm9yc19uZXQgPSBt
bmV0OwotCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVycm9yX2NvdW50OwotCQkJCQl9Ci0JCQkJ
CWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBKUlMgNS8xNC8wNyAtIElmIHRo
ZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUgYW5kIG5vdCBpbiBQRiBzdGF0ZSwgY29tcGFyZSB0
aGUKLQkJCSAqICBjd25kIG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgaGlnaGVzdCBjd25kIHNl
ZW4gdGh1cyBmYXIuICBTdG9yZSB0aGUKLQkJCSAqICBkZXN0aW5hdGlvbiB3aXRoIHRoZSBoaWdo
ZXIgY3duZCB2YWx1ZS4gIElmIHRoZSBjd25kIHZhbHVlcyBhcmUgZXF1YWwsCi0JCQkgKiAgcmFu
ZG9tbHkgY2hvb3NlIG9uZSBvZiB0aGUgdHdvIGRlc3RpbmF0aW9ucy4KLQkJCSAqLwotCQkJaWYg
KG1heF9jd25kIDwgbW5ldC0+Y3duZCkgewotCQkJCW1heF9jd25kX25ldCA9IG1uZXQ7Ci0JCQkJ
bWF4X2N3bmQgPSBtbmV0LT5jd25kOwotCQkJfSBlbHNlIGlmIChtYXhfY3duZCA9PSBtbmV0LT5j
d25kKSB7Ci0JCQkJdWludDMyX3Qgcm5kdmFsOwotCQkJCXVpbnQ4X3QgdGhpc19yYW5kb207Ci0K
LQkJCQlpZiAoc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4ID4gMykgewotCQkJCQlybmR2YWwgPSBz
Y3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcCk7Ci0JCQkJCW1l
bWNweShzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXMsICZybmR2YWwsIHNpemVvZihzdGNiLT5h
c29jLmhiX3JhbmRvbV92YWx1ZXMpKTsKLQkJCQkJdGhpc19yYW5kb20gPSBzdGNiLT5hc29jLmhi
X3JhbmRvbV92YWx1ZXNbMF07Ci0JCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsrOwotCQkJ
CQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXRo
aXNfcmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzW3N0Y2ItPmFzb2MuaGJfcmFu
ZG9tX2lkeF07Ci0JCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsrOwotCQkJCQlzdGNiLT5h
c29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOwotCQkJCX0KLQkJCQlpZiAodGhpc19yYW5kb20gJSAy
ID09IDEpIHsKLQkJCQkJbWF4X2N3bmRfbmV0ID0gbW5ldDsKLQkJCQkJbWF4X2N3bmQgPSBtbmV0
LT5jd25kOyAvKiBVc2VsZXNzPyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAobWF4X2N3bmRf
bmV0ID09IE5VTEwpIHsKLQkJCWlmIChtaW5fZXJyb3JzX25ldCA9PSBOVUxMKSB7Ci0JCQkJcmV0
dXJuIChuZXQpOwotCQkJfQotCQkJcmV0dXJuIChtaW5fZXJyb3JzX25ldCk7Ci0JCX0gZWxzZSB7
Ci0JCQlyZXR1cm4gKG1heF9jd25kX25ldCk7Ci0JCX0KLQl9IC8qIEpSUyA1LzE0LzA3IC0gSWYg
bW9kZSBpcyBzZXQgdG8gMSwgdXNlIHRoZSBDTVQgcG9saWN5IGZvciBjaG9vc2luZyBhbiBhbHRl
cm5hdGUgbmV0LiAqLwotCWVsc2UgaWYgKG1vZGUgPT0gMSkgewotCQlUQUlMUV9GT1JFQUNIKG1u
ZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJaWYgKCgobW5ldC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpICE9IFNDVFBfQUREUl9SRUFDSEFCTEUpIHx8Ci0J
CQkgICAgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7Ci0JCQkJ
LyoKLQkJCQkgKiB3aWxsIHNraXAgb25lcyB0aGF0IGFyZSBub3QtcmVhY2hhYmxlIG9yCi0JCQkJ
ICogdW5jb25maXJtZWQKLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChtYXhf
Y3duZCA8IG1uZXQtPmN3bmQpIHsKLQkJCQltYXhfY3duZF9uZXQgPSBtbmV0OwotCQkJCW1heF9j
d25kID0gbW5ldC0+Y3duZDsKLQkJCX0gZWxzZSBpZiAobWF4X2N3bmQgPT0gbW5ldC0+Y3duZCkg
ewotCQkJCXVpbnQzMl90IHJuZHZhbDsKLQkJCQl1aW50OF90IHRoaXNfcmFuZG9tOwotCi0JCQkJ
aWYgKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCA+IDMpIHsKLQkJCQkJcm5kdmFsID0gc2N0cF9z
ZWxlY3RfaW5pdGlhbF9UU04oJnN0Y2ItPnNjdHBfZXAtPnNjdHBfZXApOwotCQkJCQltZW1jcHko
c3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzLCAmcm5kdmFsLAotCQkJCQkgICAgc2l6ZW9mKHN0
Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlcykpOwotCQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFz
b2MuaGJfcmFuZG9tX3ZhbHVlc1swXTsKLQkJCQkJc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4ID0g
MDsKLQkJCQkJc3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsKLQkJCQl9IGVsc2Ugewot
CQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlc1tzdGNiLT5hc29j
LmhiX3JhbmRvbV9pZHhdOwotCQkJCQlzdGNiLT5hc29jLmhiX3JhbmRvbV9pZHgrKzsKLQkJCQkJ
c3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsKLQkJCQl9Ci0JCQkJaWYgKHRoaXNfcmFu
ZG9tICUgMikgewotCQkJCQltYXhfY3duZF9uZXQgPSBtbmV0OwotCQkJCQltYXhfY3duZCA9IG1u
ZXQtPmN3bmQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChtYXhfY3duZF9uZXQpIHsKLQkJCXJl
dHVybiAobWF4X2N3bmRfbmV0KTsKLQkJfQotCX0KLQltbmV0ID0gbmV0OwotCW9uY2UgPSAwOwot
Ci0JaWYgKG1uZXQgPT0gTlVMTCkgewotCQltbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Mu
bmV0cyk7Ci0JCWlmIChtbmV0ID09IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQl9
Ci0JZm9yICg7OykgewotCQlhbHQgPSBUQUlMUV9ORVhUKG1uZXQsIHNjdHBfbmV4dCk7Ci0JCWlm
IChhbHQgPT0gTlVMTCkgewotCQkJb25jZSsrOwotCQkJaWYgKG9uY2UgPiAxKSB7Ci0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKLQkJCWlm
IChhbHQgPT0gTlVMTCkgewotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGFs
dC0+cm8ucm9fcnQgPT0gTlVMTCkgewotCQkJaWYgKGFsdC0+cm8uX3NfYWRkcikgewotCQkJCXNj
dHBfZnJlZV9pZmEoYWx0LT5yby5fc19hZGRyKTsKLQkJCQlhbHQtPnJvLl9zX2FkZHIgPSBOVUxM
OwotCQkJfQotCQkJYWx0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCX0KLQkJaWYgKCgoYWx0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgPT0gU0NUUF9BRERSX1JFQUNIQUJM
RSkgJiYKLQkJICAgIChhbHQtPnJvLnJvX3J0ICE9IE5VTEwpICYmCi0JCSAgICAoIShhbHQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSkgewotCQkJLyogRm91bmQgYSByZWFj
aGFibGUgYWRkcmVzcyAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJbW5ldCA9IGFsdDsKLQl9Ci0KLQlp
ZiAoYWx0ID09IE5VTEwpIHsKLQkJLyogQ2FzZSB3aGVyZSBOTyBpbnN2IG5ldHdvcmsgZXhpc3Rz
IChkb3JtYW50IHN0YXRlKSAqLwotCQkvKiB3ZSByb3RhdGUgZGVzdGluYXRpb25zICovCi0JCW9u
Y2UgPSAwOwotCQltbmV0ID0gbmV0OwotCQlmb3IgKDs7KSB7Ci0JCQlpZiAobW5ldCA9PSBOVUxM
KSB7Ci0JCQkJcmV0dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKSk7Ci0JCQl9Ci0J
CQlhbHQgPSBUQUlMUV9ORVhUKG1uZXQsIHNjdHBfbmV4dCk7Ci0JCQlpZiAoYWx0ID09IE5VTEwp
IHsKLQkJCQlvbmNlKys7Ci0JCQkJaWYgKG9uY2UgPiAxKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0K
LQkJCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKLQkJCQlpZiAoYWx0ID09
IE5VTEwpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCghKGFsdC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpICYmCi0JCQkgICAgKGFsdCAhPSBuZXQpKSB7
Ci0JCQkJLyogRm91bmQgYW4gYWx0ZXJuYXRlIGFkZHJlc3MgKi8KLQkJCQlicmVhazsKLQkJCX0K
LQkJCW1uZXQgPSBhbHQ7Ci0JCX0KLQl9Ci0JaWYgKGFsdCA9PSBOVUxMKSB7Ci0JCXJldHVybiAo
bmV0KTsKLQl9Ci0JcmV0dXJuIChhbHQpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9iYWNrb2Zm
X29uX3RpbWVvdXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCwKLSAgICBpbnQgd2luX3Byb2JlLAotICAgIGludCBudW1fbWFya2VkLCBpbnQgbnVtX2Fi
YW5kb25lZCkKLXsKLQlpZiAobmV0LT5SVE8gPT0gMCkgewotCQlpZiAobmV0LT5SVE9fbWVhc3Vy
ZWQpIHsKLQkJCW5ldC0+UlRPID0gc3RjYi0+YXNvYy5taW5ydG87Ci0JCX0gZWxzZSB7Ci0JCQlu
ZXQtPlJUTyA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87Ci0JCX0KLQl9Ci0JbmV0LT5SVE8gPDw9
IDE7Ci0JaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKLQkJbmV0LT5SVE8gPSBz
dGNiLT5hc29jLm1heHJ0bzsKLQl9Ci0JaWYgKCh3aW5fcHJvYmUgPT0gMCkgJiYgKG51bV9tYXJr
ZWQgfHwgbnVtX2FiYW5kb25lZCkpIHsKLQkJLyogV2UgZG9uJ3QgYXBwbHkgcGVuYWx0eSB0byB3
aW5kb3cgcHJvYmUgc2NlbmFyaW9zICovCi0JCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBj
b250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KLQkJc3RjYi0+YXNvYy5jY19mdW5jdGlv
bnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0Y2IsIG5ldCk7Ci0JfQotfQotCi0j
aWZuZGVmIElOVkFSSUFOVFMKLXN0YXRpYyB2b2lkCi1zY3RwX3JlY292ZXJfc2VudF9saXN0KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpu
Y2hrOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCi0JYXNvYyA9ICZzdGNiLT5h
c29jOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25l
eHQsIG5jaGspIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBjaGst
PnJlYy5kYXRhLnRzbikpIHsKLQkJCVNDVFBfUFJJTlRGKCJGb3VuZCBjaGs6JXAgdHNuOiV4IDw9
IGxhc3RfYWNrZWRfc2VxOiV4XG4iLAotCQkJICAgICAgICAgICAgKHZvaWQgKiljaGssIGNoay0+
cmVjLmRhdGEudHNuLCBhc29jLT5sYXN0X2Fja2VkX3NlcSk7Ci0JCQlpZiAoY2hrLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKLQkJCQlpZiAoYXNvYy0+c3RybW91dFtjaGstPnJl
Yy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKLQkJCQkJYXNvYy0+c3RybW91dFtj
aGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotCQkJCX0KLQkJCX0KLQkJCWlm
ICgoYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA9PSAw
KSAmJgotCQkJICAgIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5zdGF0ZSA9PSBT
Q1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5z
dHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKLQkJCQlhc29jLT50cmlnZ2Vy
X3Jlc2V0ID0gMTsKLQkJCX0KLQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwgY2hr
LCBzY3RwX25leHQpOwotCQkJaWYgKFBSX1NDVFBfRU5BQkxFRChjaGstPmZsYWdzKSkgewotCQkJ
CWlmIChhc29jLT5wcl9zY3RwX2NudCAhPSAwKQotCQkJCQlhc29jLT5wcl9zY3RwX2NudC0tOwot
CQkJfQotCQkJaWYgKGNoay0+ZGF0YSkgewotCQkJCS8qc2FfaWdub3JlIE5PX05VTExfQ0hLKi8K
LQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKLQkJCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJCWlmIChhc29jLT5w
cnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBfQlVGX0VOQUJMRUQoY2hrLT5mbGFncykpIHsKLQkJ
CQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0tOwotCQkJCX0KLQkJCX0KLQkJCWFz
b2MtPnNlbnRfcXVldWVfY250LS07Ci0JCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFND
VFBfU09fTk9UX0xPQ0tFRCk7Ci0JCX0KLQl9Ci0JU0NUUF9QUklOVEYoImFmdGVyIHJlY292ZXIg
b3JkZXIgaXMgYXMgZm9sbG93c1xuIik7Ci0JVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50
X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJU0NUUF9QUklOVEYoImNoazolcCBUU046JXhcbiIsICh2
b2lkICopY2hrLCBjaGstPnJlYy5kYXRhLnRzbik7Ci0JfQotfQotI2VuZGlmCi0KLXN0YXRpYyBp
bnQKLXNjdHBfbWFya19hbGxfZm9yX3Jlc2VuZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgIHN0cnVjdCBzY3RwX25ldHMgKmFsdCwKLSAgICBp
bnQgd2luZG93X3Byb2JlLAotICAgIGludCAqbnVtX21hcmtlZCwKLSAgICBpbnQgKm51bV9hYmFu
ZG9uZWQpCi17Ci0KLQkvKgotCSAqIE1hcmsgYWxsIGNodW5rcyAod2VsbCBub3QgYWxsKSB0aGF0
IHdlcmUgc2VudCB0byAqbmV0IGZvcgotCSAqIHJldHJhbnNtaXNzaW9uLiBNb3ZlIHRoZW0gdG8g
YWx0IGZvciB0aGVyZSBkZXN0aW5hdGlvbiBhcyB3ZWxsLi4uCi0JICogV2Ugb25seSBtYXJrIGNo
dW5rcyB0aGF0IGhhdmUgYmVlbiBvdXRzdGFuZGluZyBsb25nIGVub3VnaCB0bwotCSAqIGhhdmUg
cmVjZWl2ZWQgZmVlZC1iYWNrLgotCSAqLwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywg
Km5jaGs7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbG5ldHM7Ci0Jc3RydWN0IHRpbWV2YWwgbm93LCBt
aW5fd2FpdCwgdHY7Ci0JaW50IGN1cl9ydG87Ci0JaW50IGNudF9hYmFuZG9uZWQ7Ci0JaW50IGF1
ZGl0X3RmLCBudW1fbWssIGZpcjsKLQl1bnNpZ25lZCBpbnQgY250X21rOwotCXVpbnQzMl90IG9y
aWdfZmxpZ2h0LCBvcmlnX3RmOwotCXVpbnQzMl90IHRzbmxhc3QsIHRzbmZpcnN0OwotCWludCBy
ZWNvdmVyeV9jbnQgPSAwOwotCi0KLQkvKiBub25lIGluIGZsaWdodCBub3cgKi8KLQlhdWRpdF90
ZiA9IDA7Ci0JZmlyID0gMDsKLQkvKgotCSAqIGZpZ3VyZSBvdXQgaG93IGxvbmcgYSBkYXRhIGNo
dW5rIG11c3QgYmUgcGVuZGluZyBiZWZvcmUgd2UgY2FuCi0JICogbWFyayBpdCAuLgotCSAqLwot
CSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCS8qIGdldCBjdXIgcnRvIGluIG1p
Y3JvLXNlY29uZHMgKi8KLQljdXJfcnRvID0gKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZU
KSArIG5ldC0+bGFzdHN2OwotCWN1cl9ydG8gKj0gMTAwMDsKLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3Rw
X2xvZ19mcihjdXJfcnRvLAotCQkJICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKLQkJCSAgICB3
aW5kb3dfcHJvYmUsCi0JCQkgICAgU0NUUF9GUl9UM19NQVJLX1RJTUUpOwotCQlzY3RwX2xvZ19m
cihuZXQtPmZsaWdodF9zaXplLCAwLCAwLCBTQ1RQX0ZSX0NXTkRfUkVQT1JUKTsKLQkJc2N0cF9s
b2dfZnIobmV0LT5mbGlnaHRfc2l6ZSwgbmV0LT5jd25kLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dCwgU0NUUF9GUl9DV05EX1JFUE9SVCk7Ci0JfQotCXR2LnR2X3NlYyA9IGN1cl9ydG8gLyAxMDAw
MDAwOwotCXR2LnR2X3VzZWMgPSBjdXJfcnRvICUgMTAwMDAwMDsKLSNpZm5kZWYgX19GcmVlQlNE
X18KLQl0aW1lcnN1Yigmbm93LCAmdHYsICZtaW5fd2FpdCk7Ci0jZWxzZQotCW1pbl93YWl0ID0g
bm93OwotCXRpbWV2YWxzdWIoJm1pbl93YWl0LCAmdHYpOwotI2VuZGlmCi0JaWYgKG1pbl93YWl0
LnR2X3NlYyA8IDAgfHwgbWluX3dhaXQudHZfdXNlYyA8IDApIHsKLQkJLyoKLQkJICogaWYgd2Ug
aGl0IGhlcmUsIHdlIGRvbid0IGhhdmUgZW5vdWdoIHNlY29uZHMgb24gdGhlIGNsb2NrCi0JCSAq
IHRvIGFjY291bnQgZm9yIHRoZSBSVE8uIFdlIGp1c3QgbGV0IHRoZSBsb3dlciBzZWNvbmRzIGJl
Ci0JCSAqIHRoZSBib3VuZHMgYW5kIGRvbid0IHdvcnJ5IGFib3V0IGl0LiBUaGlzIG1heSBtZWFu
IHdlCi0JCSAqIHdpbGwgbWFyayBhIGxvdCBtb3JlIHRoYW4gd2Ugc2hvdWxkLgotCQkgKi8KLQkJ
bWluX3dhaXQudHZfc2VjID0gbWluX3dhaXQudHZfdXNlYyA9IDA7Ci0JfQotCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7
Ci0JCXNjdHBfbG9nX2ZyKGN1cl9ydG8sIG5vdy50dl9zZWMsIG5vdy50dl91c2VjLCBTQ1RQX0ZS
X1QzX01BUktfVElNRSk7Ci0JCXNjdHBfbG9nX2ZyKDAsIG1pbl93YWl0LnR2X3NlYywgbWluX3dh
aXQudHZfdXNlYywgU0NUUF9GUl9UM19NQVJLX1RJTUUpOwotCX0KLQkvKgotCSAqIE91ciByd25k
IHdpbGwgYmUgaW5jb3JyZWN0IGhlcmUgc2luY2Ugd2UgYXJlIG5vdCBhZGRpbmcgYmFjayB0aGUK
LQkgKiBjbnQgKiBtYnVmIGJ1dCB3ZSB3aWxsIGZpeCB0aGF0IGRvd24gYmVsb3cuCi0JICovCi0J
b3JpZ19mbGlnaHQgPSBuZXQtPmZsaWdodF9zaXplOwotCW9yaWdfdGYgPSBzdGNiLT5hc29jLnRv
dGFsX2ZsaWdodDsKLQotCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOwotCS8qIE5vdyBvbiB0byBl
YWNoIGNodW5rICovCi0JY250X2FiYW5kb25lZCA9IDA7Ci0JbnVtX21rID0gY250X21rID0gMDsK
LQl0c25maXJzdCA9IHRzbmxhc3QgPSAwOwotI2lmbmRlZiBJTlZBUklBTlRTCi0gc3RhcnRfYWdh
aW46Ci0jZW5kaWYKLQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1
ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJaWYgKFNDVFBfVFNOX0dFKHN0Y2ItPmFzb2MubGFz
dF9hY2tlZF9zZXEsIGNoay0+cmVjLmRhdGEudHNuKSkgewotCQkJLyogU3RyYW5nZSBjYXNlIG91
ciBsaXN0IGdvdCBvdXQgb2Ygb3JkZXI/ICovCi0JCQlTQ1RQX1BSSU5URigiT3VyIGxpc3QgaXMg
b3V0IG9mIG9yZGVyPyBsYXN0X2Fja2VkOiV4IGNoazoleFxuIiwKLQkJCSAgICAgICAgICAgICh1
bnNpZ25lZCBpbnQpc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSwgKHVuc2lnbmVkIGludCljaGst
PnJlYy5kYXRhLnRzbik7Ci0JCQlyZWNvdmVyeV9jbnQrKzsKLSNpZmRlZiBJTlZBUklBTlRTCi0J
CQlwYW5pYygibGFzdCBhY2tlZCA+PSBjaGsgb24gc2VudC1RIik7Ci0jZWxzZQotCQkJU0NUUF9Q
UklOVEYoIlJlY292ZXIgYXR0ZW1wdHMgYSByZXN0YXJ0IGNudDolZFxuIiwgcmVjb3ZlcnlfY250
KTsKLQkJCXNjdHBfcmVjb3Zlcl9zZW50X2xpc3Qoc3RjYik7Ci0JCQlpZiAocmVjb3ZlcnlfY250
IDwgMTApIHsKLQkJCQlnb3RvIHN0YXJ0X2FnYWluOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX1BS
SU5URigiUmVjb3ZlcnkgZmFpbHMgJWQgdGltZXM/P1xuIiwgcmVjb3ZlcnlfY250KTsKLQkJCX0K
LSNlbmRpZgotCQl9Ci0JCWlmICgoY2hrLT53aG9UbyA9PSBuZXQpICYmIChjaGstPnNlbnQgPCBT
Q1RQX0RBVEFHUkFNX0FDS0VEKSkgewotCQkJLyoKLQkJCSAqIGZvdW5kIG9uZSB0byBtYXJrOiBJ
ZiBpdCBpcyBsZXNzIHRoYW4KLQkJCSAqIERBVEFHUkFNX0FDS0VEIGl0IE1VU1Qgbm90IGJlIGEg
c2tpcHBlZCBvciBtYXJrZWQKLQkJCSAqIFRTTiBidXQgaW5zdGVhZCBvbmUgdGhhdCBpcyBlaXRo
ZXIgYWxyZWFkeSBzZXQKLQkJCSAqIGZvciByZXRyYW5zbWlzc2lvbiBPUiBvbmUgdGhhdCBuZWVk
cwotCQkJICogcmV0cmFuc21pc3Npb24uCi0JCQkgKi8KLQotCQkJLyogdmFsaWRhdGUgaXRzIGJl
ZW4gb3V0c3RhbmRpbmcgbG9uZyBlbm91Z2ggKi8KLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9s
b2dfZnIoY2hrLT5yZWMuZGF0YS50c24sCi0JCQkJCSAgICBjaGstPnNlbnRfcmN2X3RpbWUudHZf
c2VjLAotCQkJCQkgICAgY2hrLT5zZW50X3Jjdl90aW1lLnR2X3VzZWMsCi0JCQkJCSAgICBTQ1RQ
X0ZSX1QzX01BUktfVElNRSk7Ci0JCQl9Ci0JCQlpZiAoKGNoay0+c2VudF9yY3ZfdGltZS50dl9z
ZWMgPiBtaW5fd2FpdC50dl9zZWMpICYmICh3aW5kb3dfcHJvYmUgPT0gMCkpIHsKLQkJCQkvKgot
CQkJCSAqIHdlIGhhdmUgcmVhY2hlZCBhIGNodW5rIHRoYXQgd2FzIHNlbnQKLQkJCQkgKiBzb21l
IHNlY29uZHMgcGFzdCBvdXIgbWluLi4gZm9yZ2V0IGl0IHdlCi0JCQkJICogd2lsbCBmaW5kIG5v
IG1vcmUgdG8gc2VuZC4KLQkJCQkgKi8KLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19m
cigwLAotCQkJCQkJICAgIGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMsCi0JCQkJCQkgICAgY2hr
LT5zZW50X3Jjdl90aW1lLnR2X3VzZWMsCi0JCQkJCQkgICAgU0NUUF9GUl9UM19TVE9QUEVEKTsK
LQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKChjaGstPnNlbnRfcmN2X3RpbWUu
dHZfc2VjID09IG1pbl93YWl0LnR2X3NlYykgJiYKLQkJCQkgICAod2luZG93X3Byb2JlID09IDAp
KSB7Ci0JCQkJLyoKLQkJCQkgKiB3ZSBtdXN0IGxvb2sgYXQgdGhlIG1pY3JvIHNlY29uZHMgdG8K
LQkJCQkgKiBrbm93LgotCQkJCSAqLwotCQkJCWlmIChjaGstPnNlbnRfcmN2X3RpbWUudHZfdXNl
YyA+PSBtaW5fd2FpdC50dl91c2VjKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIG9rIGl0IHdhcyBzZW50
IGFmdGVyIG91ciBib3VuZGFyeQotCQkJCQkgKiB0aW1lLgotCQkJCQkgKi8KLQkJCQkJY29udGlu
dWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCAmJiBQ
Ul9TQ1RQX1RUTF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7Ci0JCQkJLyogSXMgaXQgZXhwaXJlZD8g
Ki8KLSNpZm5kZWYgX19GcmVlQlNEX18KLQkJCQlpZiAodGltZXJjbXAoJm5vdywgJmNoay0+cmVj
LmRhdGEudGltZXRvZHJvcCwgPikpIHsKLSNlbHNlCi0JCQkJaWYgKHRpbWV2YWxjbXAoJm5vdywg
JmNoay0+cmVjLmRhdGEudGltZXRvZHJvcCwgPikpIHsKLSNlbmRpZgotCQkJCQkvKiBZZXMgc28g
ZHJvcCBpdCAqLwotCQkJCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQkodm9pZClzY3RwX3JlbGVh
c2VfcHJfc2N0cF9jaHVuayhzdGNiLAotCQkJCQkJCQkJCSBjaGssCi0JCQkJCQkJCQkJIDEsCi0J
CQkJCQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCQljbnRfYWJhbmRvbmVkKys7Ci0J
CQkJCX0KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2MucHJz
Y3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQX1JUWF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7Ci0JCQkJ
LyogSGFzIGl0IGJlZW4gcmV0cmFuc21pdHRlZCB0dl9zZWMgdGltZXM/ICovCi0JCQkJaWYgKGNo
ay0+c25kX2NvdW50ID4gY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYykgewotCQkJCQlp
ZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQkodm9pZClzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhz
dGNiLAotCQkJCQkJCQkJCSBjaGssCi0JCQkJCQkJCQkJIDEsCi0JCQkJCQkJCQkJIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7Ci0JCQkJCQljbnRfYWJhbmRvbmVkKys7Ci0JCQkJCX0KLQkJCQkJY29udGlu
dWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5E
KSB7Ci0JCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2Nu
dCk7Ci0JCQkJbnVtX21rKys7Ci0JCQkJaWYgKGZpciA9PSAwKSB7Ci0JCQkJCWZpciA9IDE7Ci0J
CQkJCXRzbmZpcnN0ID0gY2hrLT5yZWMuZGF0YS50c247Ci0JCQkJfQotCQkJCXRzbmxhc3QgPSBj
aGstPnJlYy5kYXRhLnRzbjsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19mcihjaGst
PnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQsCi0JCQkJCQkgICAgMCwgU0NUUF9GUl9UM19N
QVJLRUQpOwotCQkJCX0KLQotCQkJCWlmIChjaGstPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2Vk
KSB7Ci0JCQkJCS8qIGRlZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJY2hrLT53aG9Uby0+Y3duZCAt
PSBjaGstPmJvb2tfc2l6ZTsKLQkJCQkJY2hrLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9
IDA7Ci0JCQkJfQotCQkJCW5ldC0+bWFya2VkX3JldHJhbnMrKzsKLQkJCQlzdGNiLT5hc29jLm1h
cmtlZF9yZXRyYW5zKys7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRz
KFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkRfVE8sCi0JCQkJCQkgICAgICAgY2hrLT53aG9Uby0+
ZmxpZ2h0X3NpemUsCi0JCQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUsCi0JCQkJCQkgICAgICAg
KHVpbnQzMl90KSh1aW50cHRyX3QpY2hrLT53aG9UbywKLQkJCQkJCSAgICAgICBjaGstPnJlYy5k
YXRhLnRzbik7Ci0JCQkJfQotCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UoY2hrKTsKLQkJ
CQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCBjaGspOwotCQkJCXN0Y2ItPmFzb2Mu
cGVlcnNfcnduZCArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCQlzdGNiLT5hc29jLnBlZXJzX3J3bmQg
Kz0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpOwotCQkJfQotCQkJY2hrLT5z
ZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdT
X0ZSQUdNRU5UX09LOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbWFya2VkcmV0cmFucyk7Ci0K
LQkJCS8qIHJlc2V0IHRoZSBUU04gZm9yIHN0cmlraW5nIGFuZCBvdGhlciBGUiBzdHVmZiAqLwot
CQkJY2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOwotCQkJLyogQ2xlYXIg
YW55IHRpbWUgc28gTk8gUlRUIGlzIGJlaW5nIGRvbmUgKi8KLQotCQkJaWYgKGNoay0+ZG9fcnR0
KSB7Ci0JCQkJaWYgKGNoay0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgewotCQkJCQljaGstPndo
b1RvLT5ydG9fbmVlZGVkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQljaGstPmRvX3J0dCA9IDA7Ci0J
CQlpZiAoYWx0ICE9IG5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1Rv
KTsKLQkJCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAxOwotCQkJCWNoay0+d2hvVG8gPSBhbHQ7Ci0J
CQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
Y2hrLT5ub19mcl9hbGxvd2VkID0gMDsKLQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Mu
c2VuZF9xdWV1ZSkpIHsKLQkJCQkJY2hrLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90c24gPSBzdGNi
LT5hc29jLnNlbmRpbmdfc2VxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNoay0+cmVjLmRhdGEuZmFz
dF9yZXRyYW5fdHNuID0gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpKS0+cmVj
LmRhdGEudHNuOwotCQkJCX0KLQkJCX0KLQkJCS8qIENNVDogRG8gbm90IGFsbG93IEZScyBvbiBy
ZXRyYW5zbWl0dGVkIFRTTnMuCi0JCQkgKi8KLQkJCWlmIChzdGNiLT5hc29jLnNjdHBfY210X29u
X29mZiA+IDApIHsKLQkJCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAxOwotCQkJfQotI2lmZGVmIFRI
SVNfU0hPVUxEX05PVF9CRV9ET05FCi0JCX0gZWxzZSBpZiAoY2hrLT5zZW50ID09IFNDVFBfREFU
QUdSQU1fQUNLRUQpIHsKLQkJCS8qIHJlbWVtYmVyIGhpZ2hlc3QgYWNrZWQgb25lICovCi0JCQlj
b3VsZF9iZV9zZW50ID0gY2hrOwotI2VuZGlmCi0JCX0KLQkJaWYgKGNoay0+c2VudCA9PSBTQ1RQ
X0RBVEFHUkFNX1JFU0VORCkgewotCQkJY250X21rKys7Ci0JCX0KLQl9Ci0JaWYgKChvcmlnX2Zs
aWdodCAtIG5ldC0+ZmxpZ2h0X3NpemUpICE9IChvcmlnX3RmIC0gc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQpKSB7Ci0JCS8qIHdlIGRpZCBub3Qgc3VidHJhY3QgdGhlIHNhbWUgdGhpbmdzPyAqLwot
CQlhdWRpdF90ZiA9IDE7Ci0JfQotCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfZnIodHNuZmly
c3QsIHRzbmxhc3QsIG51bV9taywgU0NUUF9GUl9UM19USU1FT1VUKTsKLQl9Ci0jaWZkZWYgU0NU
UF9ERUJVRwotCWlmIChudW1fbWspIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwgIkxB
U1QgVFNOIG1hcmtlZCB3YXMgJXhcbiIsCi0JCQl0c25sYXN0KTsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1RJTUVSMSwgIk51bSBtYXJrZWQgZm9yIHJldHJhbnNtaXNzaW9uIHdhcyAlZCBwZWVyLXJ3
ZDoldVxuIiwKLQkJCW51bV9taywKLQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCk7Ci0JfQotI2Vu
ZGlmCi0JKm51bV9tYXJrZWQgPSBudW1fbWs7Ci0JKm51bV9hYmFuZG9uZWQgPSBjbnRfYWJhbmRv
bmVkOwotCS8qIE5vdyBjaGVjayBmb3IgYSBFQ04gRWNobyB0aGF0IG1heSBiZSBzdHJhbmRlZCBB
bmQKLQkgKiBpbmNsdWRlIHRoZSBjbnRfbWsnZCB0byBoYXZlIGFsbCByZXNlbmRzIGluIHRoZQot
CSAqIGNvbnRyb2wgcXVldWUuCi0JICovCi0JVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29j
LmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChjaGstPnNlbnQgPT0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCWNudF9taysrOwotCQl9Ci0JCWlmICgoY2hrLT53aG9U
byA9PSBuZXQpICYmCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNI
TykpIHsKLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJCWNoay0+d2hv
VG8gPSBhbHQ7Ci0JCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0J
CQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQkJY2hrLT5mbGFncyB8PSBD
SFVOS19GTEFHU19GUkFHTUVOVF9PSzsKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Mu
c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQljbnRfbWsrKzsKLQkJCX0KLQkJCWF0b21pY19h
ZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQl9Ci0jaWZkZWYgVEhJU19TSE9VTERf
Tk9UX0JFX0RPTkUKLQlpZiAoKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ID09IDAp
ICYmIChjb3VsZF9iZV9zZW50KSkgewotCQkvKiBmaXggaXQgc28gd2UgcmV0cmFuc21pdCB0aGUg
aGlnaGVzdCBhY2tlZCBhbnl3YXkgKi8KLQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNl
bnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCWNudF9taysrOwotCQljb3VsZF9iZV9zZW50LT5zZW50
ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JfQotI2VuZGlmCi0JaWYgKHN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZV9yZXRyYW5fY250ICE9IGNudF9taykgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJU0NU
UF9QUklOVEYoIkxvY2FsIEF1ZGl0IHNheXMgdGhlcmUgYXJlICVkIGZvciByZXRyYW4gYXNvYyBj
bnQ6JWQgd2UgbWFya2VkOiVkIHRoaXMgdGltZVxuIiwKLQkJCSAgICBjbnRfbWssIHN0Y2ItPmFz
b2Muc2VudF9xdWV1ZV9yZXRyYW5fY250LCBudW1fbWspOwotI2VuZGlmCi0jaWZuZGVmIFNDVFBf
QVVESVRJTkdfRU5BQkxFRAotCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IGNu
dF9tazsKLSNlbmRpZgotCX0KLQlpZiAoYXVkaXRfdGYpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1RJTUVSNCwKLQkJCSJBdWRpdCB0b3RhbCBmbGlnaHQgZHVlIHRvIG5lZ2F0aXZlIHZhbHVlIG5l
dDolcFxuIiwKLQkJCSh2b2lkICopbmV0KTsKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPSAw
OwotCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7Ci0JCS8qIENsZWFyIGFsbCBu
ZXR3b3JrcyBmbGlnaHQgc2l6ZSAqLwotCQlUQUlMUV9GT1JFQUNIKGxuZXRzLCAmc3RjYi0+YXNv
Yy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWxuZXRzLT5mbGlnaHRfc2l6ZSA9IDA7Ci0JCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVElNRVI0LAotCQkJCSJOZXQ6JXAgYy1mIGN3bmQ6JWQgc3N0aHJlc2g6
JWRcbiIsCi0JCQkJKHZvaWQgKilsbmV0cywgbG5ldHMtPmN3bmQsIGxuZXRzLT5zc3RocmVzaCk7
Ci0JCX0KLQkJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBf
bmV4dCkgewotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUCwK
LQkJCQkJCSAgICAgICBjaGstPndob1RvLT5mbGlnaHRfc2l6ZSwKLQkJCQkJCSAgICAgICBjaGst
PmJvb2tfc2l6ZSwKLQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCljaGstPndob1Rv
LAotCQkJCQkJICAgICAgIGNoay0+cmVjLmRhdGEudHNuKTsKLQkJCQl9Ci0KLQkJCQlzY3RwX2Zs
aWdodF9zaXplX2luY3JlYXNlKGNoayk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uo
c3RjYiwgY2hrKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBXZSByZXR1cm4gMSBpZiB3ZSBvbmx5IGhh
dmUgYSB3aW5kb3cgcHJvYmUgb3V0c3RhbmRpbmcgKi8KLQlyZXR1cm4gKDApOwotfQotCi0KLWlu
dAotc2N0cF90M3J4dF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotICAgIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNj
dHBfbmV0cyAqYWx0OwotCWludCB3aW5fcHJvYmUsIG51bV9taywgbnVtX2FiYW5kb25lZDsKLQot
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJ
TkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2ZyKDAsIDAsIDAsIFNDVFBfRlJfVDNfVElNRU9VVCk7
Ci0JfQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NX
TkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJc3RydWN0IHNjdHBfbmV0cyAqbG5ldDsKLQotCQlUQUlM
UV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJaWYgKG5l
dCA9PSBsbmV0KSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBsbmV0LCAxLCBTQ1RQX0NXTkRf
TE9HX0ZST01fVDMpOwotCQkJfSBlbHNlIHsKLQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQs
IDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9UMyk7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogRmluZCBhbiBh
bHRlcm5hdGUgYW5kIG1hcmsgdGhvc2UgZm9yIHJldHJhbnNtaXNzaW9uICovCi0JaWYgKChzdGNi
LT5hc29jLnBlZXJzX3J3bmQgPT0gMCkgJiYKLQkgICAgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
IDwgbmV0LT5tdHUpKSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW93aW5kb3dwcm9iZSk7
Ci0JCXdpbl9wcm9iZSA9IDE7Ci0JfSBlbHNlIHsKLQkJd2luX3Byb2JlID0gMDsKLQl9Ci0KLQlp
ZiAod2luX3Byb2JlID09IDApIHsKLQkJLyogV2UgZG9uJ3QgZG8gbm9ybWFsIHRocmVzaG9sZCBt
YW5hZ2VtZW50IG9uIHdpbmRvdyBwcm9iZXMgKi8KLQkJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFn
ZW1lbnQoaW5wLCBzdGNiLCBuZXQsCi0JCSAgICBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkg
ewotCQkJLyogQXNzb2NpYXRpb24gd2FzIGRlc3Ryb3llZCAqLwotCQkJcmV0dXJuICgxKTsKLQkJ
fSBlbHNlIHsKLQkJCWlmIChuZXQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7
Ci0JCQkJLyogc2VuZCBhIGltbWVkaWF0ZSBIQiBpZiBvdXIgUlRPIGlzIHN0YWxlICovCi0JCQkJ
c3RydWN0IHRpbWV2YWwgbm93OwotCQkJCXVuc2lnbmVkIGludCBtc19nb25lYnk7Ci0KLQkJCQko
dm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQkJCQlpZiAobmV0LT5sYXN0X3NlbnRf
dGltZS50dl9zZWMpIHsKLQkJCQkJbXNfZ29uZWJ5ID0gKG5vdy50dl9zZWMgLSBuZXQtPmxhc3Rf
c2VudF90aW1lLnR2X3NlYykgKiAxMDAwOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1zX2dvbmVieSA9
IDA7Ci0JCQkJfQotCQkJCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSA9PSAw
KSB7Ci0JCQkJCWlmICgobXNfZ29uZWJ5ID4gbmV0LT5SVE8pIHx8IChuZXQtPlJUTyA9PSAwKSkg
ewotCQkJCQkJLyoKLQkJCQkJCSAqIG5vIHJlY2VudCBmZWVkIGJhY2sgaW4gYW4gUlRPIG9yCi0J
CQkJCQkgKiBtb3JlLCByZXF1ZXN0IGEgUlRUIHVwZGF0ZQotCQkJCQkJICovCi0JCQkJCQlzY3Rw
X3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCQl9Ci0JCQkJfQot
CQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogRm9yIGEgd2luZG93IHByb2JlIHdlIGRv
bid0IHBlbmFsaXplIHRoZSBuZXQncyBidXQgb25seQotCQkgKiB0aGUgYXNzb2NpYXRpb24uIFRo
aXMgbWF5IGZhaWwgaXQgaWYgU0FDS3MgYXJlIG5vdCBjb21pbmcKLQkJICogYmFjay4gSWYgc2Fj
aydzIGFyZSBjb21pbmcgd2l0aCByd25kIGxvY2tlZCBhdCAwLCB3ZSB3aWxsCi0JCSAqIGNvbnRp
bnVlIHRvIGhvbGQgdGhpbmdzIHdhaXRpbmcgZm9yIHJ3bmQgdG8gcmFpc2UKLQkJICovCi0JCWlm
IChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgTlVMTCwKLQkJICAgIHN0Y2It
PmFzb2MubWF4X3NlbmRfdGltZXMpKSB7Ci0JCQkvKiBBc3NvY2lhdGlvbiB3YXMgZGVzdHJveWVk
ICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCWlmIChzdGNiLT5hc29jLnNjdHBfY210X29u
X29mZiA+IDApIHsKLQkJaWYgKG5ldC0+cGZfdGhyZXNob2xkIDwgbmV0LT5mYWlsdXJlX3RocmVz
aG9sZCkgewotCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbmV0LCAyKTsK
LQkJfSBlbHNlIHsKLQkJICAgICAgICAvKgotCQkJICogQ01UOiBVc2luZyBSVFhfU1NUSFJFU0gg
cG9saWN5IGZvciBDTVQuCi0JCQkgKiBJZiBDTVQgaXMgYmVpbmcgdXNlZCwgdGhlbiBwaWNrIGRl
c3Qgd2l0aAotCQkJICogbGFyZ2VzdCBzc3RocmVzaCBmb3IgYW55IHJldHJhbnNtaXNzaW9uLgot
CQkJICovCi0JCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDEpOwot
CQkJLyoKLQkJCSAqIENVQ3YyOiBJZiBhIGRpZmZlcmVudCBkZXN0IGlzIHBpY2tlZCBmb3IKLQkJ
CSAqIHRoZSByZXRyYW5zbWlzc2lvbiwgdGhlbiBuZXcKLQkJCSAqIChydHgtKXBzZXVkb19jdW1h
Y2sgbmVlZHMgdG8gYmUgdHJhY2tlZAotCQkJICogZm9yIG9yaWcgZGVzdC4gTGV0IENVQ3YyIHRy
YWNrIG5ldyAocnR4LSkKLQkJCSAqIHBzZXVkby1jdW1hY2sgYWx3YXlzLgotCQkJICovCi0JCQlu
ZXQtPmZpbmRfcHNldWRvX2N1bWFjayA9IDE7Ci0JCQluZXQtPmZpbmRfcnR4X3BzZXVkb19jdW1h
Y2sgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQo
c3RjYiwgbmV0LCAwKTsKLQl9Ci0KLQludW1fbWsgPSAwOwotCW51bV9hYmFuZG9uZWQgPSAwOwot
CSh2b2lkKXNjdHBfbWFya19hbGxfZm9yX3Jlc2VuZChzdGNiLCBuZXQsIGFsdCwgd2luX3Byb2Jl
LAotCQkJCSAgICAgICZudW1fbWssICZudW1fYWJhbmRvbmVkKTsKLQkvKiBGUiBMb3NzIHJlY292
ZXJ5IGp1c3QgZW5kZWQgd2l0aCB0aGUgVDMuICovCi0Jc3RjYi0+YXNvYy5mYXN0X3JldHJhbl9s
b3NzX3JlY292ZXJ5ID0gMDsKLQotCS8qIENNVCBGUiBsb3NzIHJlY292ZXJ5IGVuZGVkIHdpdGgg
dGhlIFQzICovCi0JbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMDsKLQlpZiAoKHN0
Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykg
JiYKLQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPT0gMCkpIHsKLQkJKCpzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMpKHN0Y2IsIG5ldCk7Ci0J
fQotCi0JLyoKLQkgKiBzZXR1cCB0aGUgc2F0IGxvc3MgcmVjb3ZlcnkgdGhhdCBwcmV2ZW50cyBz
YXRlbGxpdGUgY3duZCBhZHZhbmNlLgotCSAqLwotCXN0Y2ItPmFzb2Muc2F0X3QzX2xvc3NfcmVj
b3ZlcnkgPSAxOwotCXN0Y2ItPmFzb2Muc2F0X3QzX3JlY292ZXJ5X3RzbiA9IHN0Y2ItPmFzb2Mu
c2VuZGluZ19zZXE7Ci0KLQkvKiBCYWNrb2ZmIHRoZSB0aW1lciBhbmQgY3duZCAqLwotCXNjdHBf
YmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIG5ldCwgd2luX3Byb2JlLCBudW1fbWssIG51bV9hYmFu
ZG9uZWQpOwotCWlmICgoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkg
fHwKLQkgICAgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpIHsKLQkJLyogTW92ZSBh
bGwgcGVuZGluZyBvdmVyIHRvbyAqLwotCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2Is
IG5ldCk7Ci0KLQkJLyogR2V0IHRoZSBhZGRyZXNzIHRoYXQgZmFpbGVkLCB0bwotCQkgKiBmb3Jj
ZSBhIG5ldyBzcmMgYWRkcmVzcyBzZWxlY3RvbiBhbmQKLQkJICogYSByb3V0ZSBhbGxvY2F0aW9u
LgotCQkgKi8KLQkJaWYgKG5ldC0+cm8uX3NfYWRkcikgewotCQkJc2N0cF9mcmVlX2lmYShuZXQt
PnJvLl9zX2FkZHIpOwotCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKLQkJfQotCQluZXQtPnNy
Y19hZGRyX3NlbGVjdGVkID0gMDsKLQotCQkvKiBGb3JjZSBhIHJvdXRlIGFsbG9jYXRpb24gdG9v
ICovCi0JCWlmIChuZXQtPnJvLnJvX3J0KSB7Ci0JCQlSVEZSRUUobmV0LT5yby5yb19ydCk7Ci0J
CQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJfQotCi0JCS8qIFdhcyBpdCBvdXIgcHJpbWFyeT8g
Ki8KLQkJaWYgKChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPT0gbmV0KSAmJiAoYWx0
ICE9IG5ldCkpIHsKLQkJCS8qCi0JCQkgKiBZZXMsIG5vdGUgaXQgYXMgc3VjaCBhbmQgZmluZCBh
biBhbHRlcm5hdGUgbm90ZToKLQkJCSAqIHRoaXMgbWVhbnMgSEIgY29kZSBtdXN0IHVzZSB0aGlz
IHRvIHJlc2VudCB0aGUKLQkJCSAqIHByaW1hcnkgaWYgaXQgZ29lcyBhY3RpdmUgQU5EIGlmIHNv
bWVvbmUgZG9lcyBhCi0JCQkgKiBjaGFuZ2UtcHJpbWFyeSB0aGVuIHRoaXMgZmxhZyBtdXN0IGJl
IGNsZWFyZWQKLQkJCSAqIGZyb20gYW55IG5ldCBzdHJ1Y3R1cmVzLgotCQkJICovCi0JCQlpZiAo
c3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+
YXNvYy5hbHRlcm5hdGUpOwotCQkJfQotCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBhbHQ7Ci0J
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5hbHRlcm5hdGUtPnJlZl9jb3VudCwgMSk7Ci0J
CX0KLQl9Ci0JLyoKLQkgKiBTcGVjaWFsIGNhc2UgZm9yIGNvb2tpZS1lY2hvJ2VkIGNhc2UsIHdl
IGRvbid0IGRvIG91dHB1dCBidXQgbXVzdAotCSAqIGF3YWl0IHRoZSBDT09LSUUtQUNLIGJlZm9y
ZSByZXRyYW5zbWlzc2lvbgotCSAqLwotCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykg
PT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7Ci0JCS8qCi0JCSAqIEhlcmUgd2UganVzdCBy
ZXNldCB0aGUgdGltZXIgYW5kIHN0YXJ0IGFnYWluIHNpbmNlIHdlCi0JCSAqIGhhdmUgbm90IGVz
dGFibGlzaGVkIHRoZSBhc29jCi0JCSAqLwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9TRU5ELCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChzdGNi
LT5hc29jLnByc2N0cF9zdXBwb3J0ZWQpIHsKLQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNo
azsKLQotCQlsY2hrID0gc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2ludChzdGNiLCAmc3Rj
Yi0+YXNvYyk7Ci0JCS8qIEMzLiBTZWUgaWYgd2UgbmVlZCB0byBzZW5kIGEgRndkLVRTTiAqLwot
CQlpZiAoU0NUUF9UU05fR1Qoc3RjYi0+YXNvYy5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgc3Rj
Yi0+YXNvYy5sYXN0X2Fja2VkX3NlcSkpIHsKLQkJCXNlbmRfZm9yd2FyZF90c24oc3RjYiwgJnN0
Y2ItPmFzb2MpOwotCQkJaWYgKGxjaGspIHsKLQkJCQkvKiBBc3N1cmUgYSB0aW1lciBpcyB1cCAq
LwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIGxjaGstPndob1RvKTsKLQkJCX0KLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0J
CXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPmN3bmQsIFNDVFBfQ1dORF9MT0dfRlJPTV9S
VFgpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBfdDFpbml0X3RpbWVyKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKiBidW1wIHRoZSB0aHJlc2hvbGRzICovCi0JaWYgKHN0
Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uKSB7Ci0JCS8qCi0JCSAqIHNwZWNpYWwgaG9vayBm
b3IgZGVsYXllZCBjb25uZWN0aW9uLiBUaGUgbGlicmFyeSBkaWQgTk9UCi0JCSAqIGNvbXBsZXRl
IHRoZSByZXN0IG9mIGl0cyBzZW5kcy4KLQkJICovCi0JCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25u
ZWN0aW9uID0gMDsKLQkJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKFNDVFBfR0VUX1NUQVRFKCgmc3RjYi0+
YXNvYykpICE9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0J
aWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsCi0JICAgIHN0Y2It
PmFzb2MubWF4X2luaXRfdGltZXMpKSB7Ci0JCS8qIEFzc29jaWF0aW9uIHdhcyBkZXN0cm95ZWQg
Ki8KLQkJcmV0dXJuICgxKTsKLQl9Ci0Jc3RjYi0+YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250ID0g
MDsKLQlzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb24sIDEsIDAsIDApOwotCWlmIChzdGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9fbWF4
IDwgbmV0LT5SVE8pIHsKLQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9f
bWF4OwotCX0KLQlpZiAoc3RjYi0+YXNvYy5udW1uZXRzID4gMSkgewotCQkvKiBJZiB3ZSBoYXZl
IG1vcmUgdGhhbiBvbmUgYWRkciB1c2UgaXQgKi8KLQkJc3RydWN0IHNjdHBfbmV0cyAqYWx0Owot
Ci0JCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbiwgMCk7Ci0JCWlmIChhbHQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKSB7Ci0JCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0JCQlzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24g
PSBhbHQ7Ci0JCX0KLQl9Ci0JLyogU2VuZCBvdXQgYSBuZXcgaW5pdCAqLwotCXNjdHBfc2VuZF9p
bml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JcmV0dXJuICgwKTsKLX0K
LQotLyoKLSAqIEZvciBjb29raWUgYW5kIGFzY29uZiB3ZSBhY3R1YWxseSBuZWVkIHRvIGZpbmQg
YW5kIG1hcmsgZm9yIHJlc2VuZCwgdGhlbgotICogaW5jcmVtZW50IHRoZSByZXNlbmQgY291bnRl
ciAoYWZ0ZXIgYWxsIHRoZSB0aHJlc2hvbGQgbWFuYWdlbWVudCBzdHVmZiBvZgotICogY291cnNl
KS4KLSAqLwotaW50Ci1zY3RwX2Nvb2tpZV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAot
ICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NU
UF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0OwotCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNvb2tpZTsKLQotCS8qIGZpcnN0IGJlZm9yZSBhbGwgZWxzZSB3ZSBtdXN0IGZpbmQg
dGhlIGNvb2tpZSAqLwotCVRBSUxRX0ZPUkVBQ0goY29va2llLCAmc3RjYi0+YXNvYy5jb250cm9s
X3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY29va2llLT5yZWMuY2h1bmtfaWQuaWQg
PT0gU0NUUF9DT09LSUVfRUNITykgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGNvb2tpZSA9
PSBOVUxMKSB7Ci0JCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSB7Ci0JCQkvKiBGT09CQVIhICovCi0JCQlzdHJ1Y3QgbWJ1ZiAqb3Bf
ZXJyOwotCi0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9kaWFnX2luZm9fY29kZSksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJD
b29raWUgdGltZXIgZXhwaXJlZCwgYnV0IG5vIGNvb2tpZSIpOwotCQkJaW5wLT5sYXN0X2Fib3J0
X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9USU1FUiArIFNDVFBfTE9DXzM7Ci0JCQlzY3RwX2Fib3J0
X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCXBhbmljKCJDb29raWUgdGltZXIgZXhw
aXJlcyBpbiB3cm9uZyBzdGF0ZT8iKTsKLSNlbHNlCi0JCQlTQ1RQX1BSSU5URigiU3RyYW5nZSBp
biBzdGF0ZSAlZCBub3QgY29va2llLWVjaG9lZCB5ZXQgYy1lIHRpbWVyIGV4cGlyZXM/XG4iLCBT
Q1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykpOwotCQkJcmV0dXJuICgwKTsKLSNlbmRpZgotCQl9
Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qIE9rIHdlIGZvdW5kIHRoZSBjb29raWUsIHRocmVzaG9s
ZCBtYW5hZ2VtZW50IG5leHQgKi8KLQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAs
IHN0Y2IsIGNvb2tpZS0+d2hvVG8sCi0JICAgIHN0Y2ItPmFzb2MubWF4X2luaXRfdGltZXMpKSB7
Ci0JCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJcmV0dXJuICgxKTsKLQl9Ci0JLyoKLQkgKiBDbGVh
cmVkIHRocmVzaG9sZCBtYW5hZ2VtZW50LCBub3cgbGV0cyBiYWNrb2ZmIHRoZSBhZGRyZXNzCi0J
ICogYW5kIHNlbGVjdCBhbiBhbHRlcm5hdGUKLQkgKi8KLQlzdGNiLT5hc29jLmRyb3BwZWRfc3Bl
Y2lhbF9jbnQgPSAwOwotCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIGNvb2tpZS0+d2hv
VG8sIDEsIDAsIDApOwotCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIGNvb2tp
ZS0+d2hvVG8sIDApOwotCWlmIChhbHQgIT0gY29va2llLT53aG9UbykgewotCQlzY3RwX2ZyZWVf
cmVtb3RlX2FkZHIoY29va2llLT53aG9Ubyk7Ci0JCWNvb2tpZS0+d2hvVG8gPSBhbHQ7Ci0JCWF0
b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0JfQotCS8qIE5vdyBtYXJrIHRoZSBy
ZXRyYW4gaW5mbyAqLwotCWlmIChjb29raWUtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQp
IHsKLQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7
Ci0JfQotCWNvb2tpZS0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOwotCWNvb2tpZS0+Zmxh
Z3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JLyoKLQkgKiBOb3cgY2FsbCB0aGUgb3V0
cHV0IHJvdXRpbmUgdG8ga2ljayBvdXQgdGhlIGNvb2tpZSBhZ2FpbiwgTm90ZSB3ZQotCSAqIGRv
bid0IG1hcmsgYW55IGNodW5rcyBmb3IgcmV0cmFuIHNvIHRoYXQgRlIgd2lsbCBuZWVkIHRvIGtp
Y2sgaW4KLQkgKiB0byBtb3ZlIHRoZXNlIChvciBhIHNlbmQgdGltZXIpLgotCSAqLwotCXJldHVy
biAoMCk7Ci19Ci0KLWludAotc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCXN0cnVjdCBzY3RwX25ldHMgKmFsdDsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpzdHJy
c3QgPSBOVUxMLCAqY2hrID0gTlVMTDsKLQotCWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9v
dXRzdGFuZGluZyA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qIGZpbmQgdGhlIGV4aXN0
aW5nIFNUUlJFU0VULCB3ZSB1c2UgdGhlIHNlcSBudW1iZXIgd2Ugc2VudCBvdXQgb24gKi8KLQko
dm9pZClzY3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0Y2IsIHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3Nl
cV9vdXQsICZzdHJyc3QpOwotCWlmIChzdHJyc3QgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwot
CX0KLQkvKiBkbyB0aHJlc2hvbGQgbWFuYWdlbWVudCAqLwotCWlmIChzY3RwX3RocmVzaG9sZF9t
YW5hZ2VtZW50KGlucCwgc3RjYiwgc3RycnN0LT53aG9UbywKLQkgICAgc3RjYi0+YXNvYy5tYXhf
c2VuZF90aW1lcykpIHsKLQkJLyogQXNzb2MgaXMgb3ZlciAqLwotCQlyZXR1cm4gKDEpOwotCX0K
LQkvKgotCSAqIENsZWFyZWQgdGhyZXNob2xkIG1hbmFnZW1lbnQsIG5vdyBsZXRzIGJhY2tvZmYg
dGhlIGFkZHJlc3MKLQkgKiBhbmQgc2VsZWN0IGFuIGFsdGVybmF0ZQotCSAqLwotCXNjdHBfYmFj
a29mZl9vbl90aW1lb3V0KHN0Y2IsIHN0cnJzdC0+d2hvVG8sIDEsIDAsIDApOwotCWFsdCA9IHNj
dHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHN0cnJzdC0+d2hvVG8sIDApOwotCXNjdHBfZnJl
ZV9yZW1vdGVfYWRkcihzdHJyc3QtPndob1RvKTsKLQlzdHJyc3QtPndob1RvID0gYWx0OwotCWF0
b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0KLQkvKiBTZWUgaWYgYSBFQ04gRWNo
byBpcyBhbHNvIHN0cmFuZGVkICovCi0JVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLmNv
bnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmICgoY2hrLT53aG9UbyA9PSBuZXQp
ICYmCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNITykpIHsKLQkJ
CXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJCWlmIChjaGstPnNlbnQgIT0g
U0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JF
U0VORDsKLQkJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQkJCXNj
dHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQkJfQot
CQkJY2hrLT53aG9UbyA9IGFsdDsKLQkJCWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwg
MSk7Ci0JCX0KLQl9Ci0JaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJM
RSkpIHsKLQkJLyoKLQkJICogSWYgdGhlIGFkZHJlc3Mgd2VudCB1bi1yZWFjaGFibGUsIHdlIG5l
ZWQgdG8gbW92ZSB0bwotCQkgKiBhbHRlcm5hdGVzIGZvciBBTEwgY2hrJ3MgaW4gcXVldWUKLQkJ
ICovCi0JCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKLQl9Ci0JLyogbWFy
ayB0aGUgcmV0cmFuIGluZm8gKi8KLQlpZiAoc3RycnN0LT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
UkVTRU5EKQotCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5f
Y250KTsKLQlzdHJyc3QtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQlzdHJyc3QtPmZs
YWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCi0JLyogcmVzdGFydCB0aGUgdGltZXIg
Ki8KLQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCwgaW5wLCBzdGNi
LCBzdHJyc3QtPndob1RvKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBfYXNjb25mX3Rp
bWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0OwotCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmFzY29uZiwgKmNoazsKLQotCS8qIGlzIHRoaXMgYSBmaXJzdCBz
ZW5kLCBvciBhIHJldHJhbnNtaXNzaW9uPyAqLwotCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNv
Yy5hc2NvbmZfc2VuZF9xdWV1ZSkpIHsKLQkJLyogY29tcG9zZSBhIG5ldyBBU0NPTkYgY2h1bmsg
YW5kIHNlbmQgaXQgKi8KLQkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBuZXQsIFNDVFBfQUREUl9O
T1RfTE9DS0VEKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBSZXRyYW5zbWlzc2lvbiBvZiB0aGUg
ZXhpc3RpbmcgQVNDT05GIGlzIG5lZWRlZAotCQkgKi8KLQotCQkvKiBmaW5kIHRoZSBleGlzdGlu
ZyBBU0NPTkYgKi8KLQkJYXNjb25mID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MuYXNjb25mX3Nl
bmRfcXVldWUpOwotCQlpZiAoYXNjb25mID09IE5VTEwpIHsKLQkJCXJldHVybiAoMCk7Ci0JCX0K
LQkJLyogZG8gdGhyZXNob2xkIG1hbmFnZW1lbnQgKi8KLQkJaWYgKHNjdHBfdGhyZXNob2xkX21h
bmFnZW1lbnQoaW5wLCBzdGNiLCBhc2NvbmYtPndob1RvLAotCQkgICAgc3RjYi0+YXNvYy5tYXhf
c2VuZF90aW1lcykpIHsKLQkJCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJCXJldHVybiAoMSk7Ci0J
CX0KLQkJaWYgKGFzY29uZi0+c25kX2NvdW50ID4gc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykg
ewotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyBpcyByb3R0ZW46IG91ciBwZWVyIGlzIG5vdCByZXNw
b25kaW5nIHRvCi0JCQkgKiBBU0NPTkZzIGJ1dCBhcHBhcmVudGx5IGlzIHRvIG90aGVyIGNodW5r
cy4gIGkuZS4gaXQKLQkJCSAqIGlzIG5vdCBwcm9wZXJseSBoYW5kbGluZyB0aGUgY2h1bmsgdHlw
ZSB1cHBlciBiaXRzLgotCQkJICogTWFyayB0aGlzIHBlZXIgYXMgQVNDT05GIGluY2FwYWJsZSBh
bmQgY2xlYW51cC4KLQkJCSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwgImFzY29u
Zl90aW1lcjogUGVlciBoYXMgbm90IHJlc3BvbmRlZCB0byBvdXIgcmVwZWF0ZWQgQVNDT05Gc1xu
Iik7Ci0JCQlzY3RwX2FzY29uZl9jbGVhbnVwKHN0Y2IsIG5ldCk7Ci0JCQlyZXR1cm4gKDApOwot
CQl9Ci0JCS8qCi0JCSAqIGNsZWFyZWQgdGhyZXNob2xkIG1hbmFnZW1lbnQsIHNvIG5vdyBiYWNr
b2ZmIHRoZSBuZXQgYW5kCi0JCSAqIHNlbGVjdCBhbiBhbHRlcm5hdGUKLQkJICovCi0JCXNjdHBf
YmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIGFzY29uZi0+d2hvVG8sIDEsIDAsIDApOwotCQlhbHQg
PSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhc2NvbmYtPndob1RvLCAwKTsKLQkJaWYg
KGFzY29uZi0+d2hvVG8gIT0gYWx0KSB7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoYXNjb25m
LT53aG9Ubyk7Ci0JCQlhc2NvbmYtPndob1RvID0gYWx0OwotCQkJYXRvbWljX2FkZF9pbnQoJmFs
dC0+cmVmX2NvdW50LCAxKTsKLQkJfQotCi0JCS8qIFNlZSBpZiBhbiBFQ04gRWNobyBpcyBhbHNv
IHN0cmFuZGVkICovCi0JCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5jb250cm9sX3Nl
bmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJaWYgKChjaGstPndob1RvID09IG5ldCkgJiYKLQkJ
CSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNITykpIHsKLQkJCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7Ci0JCQkJY2hrLT53aG9UbyA9IGFsdDsKLQkJ
CQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOwotCQkJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdT
X0ZSQUdNRU5UX09LOwotCQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1
ZV9yZXRyYW5fY250KTsKLQkJCQl9Ci0JCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50
LCAxKTsKLQkJCX0KLQkJfQotCQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuYXNjb25m
X3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJaWYgKGNoay0+d2hvVG8gIT0gYWx0KSB7Ci0J
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwotCQkJCWNoay0+d2hvVG8gPSBh
bHQ7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKLQkJCX0KLQkJCWlm
IChhc2NvbmYtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQgJiYgY2hrLT5zZW50ICE9IFND
VFBfREFUQUdSQU1fVU5TRU5UKQotCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50
X3F1ZXVlX3JldHJhbl9jbnQpOwotCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7
Ci0JCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQl9Ci0JCWlmICgh
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7Ci0JCQkvKgotCQkJICog
SWYgdGhlIGFkZHJlc3Mgd2VudCB1bi1yZWFjaGFibGUsIHdlIG5lZWQgdG8gbW92ZQotCQkJICog
dG8gdGhlIGFsdGVybmF0ZSBmb3IgQUxMIGNodW5rcyBpbiBxdWV1ZQotCQkJICovCi0JCQlzY3Rw
X21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7Ci0JCX0KLQkJLyogbWFyayB0aGUgcmV0
cmFuIGluZm8gKi8KLQkJaWYgKGFzY29uZi0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkK
LQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwot
CQlhc2NvbmYtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJYXNjb25mLT5mbGFncyB8
PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKLQotCQkvKiBzZW5kIGFub3RoZXIgQVNDT05GIGlm
IGFueSBhbmQgd2UgY2FuIGRvICovCi0JCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgYWx0LCBTQ1RQ
X0FERFJfTk9UX0xPQ0tFRCk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qIE1vYmlsaXR5IGFk
YXB0YXRpb24gKi8KLXZvaWQKLXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQpCi17Ci0JaWYgKHN0Y2ItPmFzb2MuZGVs
ZXRlZF9wcmltYXJ5ID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJk
ZWxldGVfcHJpbV90aW1lcjogZGVsZXRlZF9wcmltYXJ5IGlzIG5vdCBzdG9yZWQuLi5cbiIpOwot
CQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVU
RUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiZGVsZXRl
X3ByaW1fdGltZXI6IGZpbmlzaGVkIHRvIGtlZXAgZGVsZXRlZCBwcmltYXJ5ICIpOwotCVNDVFBE
QkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsICZzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeS0+
cm8uX2xfYWRkci5zYSk7Ci0Jc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuZGVsZXRl
ZF9wcmltYXJ5KTsKLQlzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeSA9IE5VTEw7Ci0Jc2N0cF9t
b2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKLQly
ZXR1cm47Ci19Ci0KLS8qCi0gKiBGb3IgdGhlIHNodXRkb3duIGFuZCBzaHV0ZG93bi1hY2ssIHdl
IGRvIG5vdCBrZWVwIG9uZSBhcm91bmQgb24gdGhlCi0gKiBjb250cm9sIHF1ZXVlLiBUaGlzIG1l
YW5zIHdlIG11c3QgZ2VuZXJhdGUgYSBuZXcgb25lIGFuZCBjYWxsIHRoZSBnZW5lcmFsCi0gKiBj
aHVuayBvdXRwdXQgcm91dGluZSwgQUZURVIgaGF2aW5nIGRvbmUgdGhyZXNob2xkIG1hbmFnZW1l
bnQuCi0gKiBJdCBpcyBhc3N1bWVkIHRoYXQgbmV0IGlzIG5vbi1OVUxMLgotICovCi1pbnQKLXNj
dHBfc2h1dGRvd25fdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRz
ICphbHQ7Ci0KLQkvKiBmaXJzdCB0aHJlc2hvbGQgbWFuYWdlbWVudCAqLwotCWlmIChzY3RwX3Ro
cmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgbmV0LCBzdGNiLT5hc29jLm1heF9zZW5kX3Rp
bWVzKSkgewotCQkvKiBBc3NvYyBpcyBvdmVyICovCi0JCXJldHVybiAoMSk7Ci0JfQotCXNjdHBf
YmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIG5ldCwgMSwgMCwgMCk7Ci0JLyogc2Vjb25kIHNlbGVj
dCBhbiBhbHRlcm5hdGl2ZSAqLwotCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2Is
IG5ldCwgMCk7Ci0KLQkvKiB0aGlyZCBnZW5lcmF0ZSBhIHNodXRkb3duIGludG8gdGhlIHF1ZXVl
IGZvciBvdXQgbmV0ICovCi0Jc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIGFsdCk7Ci0KLQkvKiBm
b3VydGggcmVzdGFydCB0aW1lciAqLwotCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOLCBpbnAsIHN0Y2IsIGFsdCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1zY3Rw
X3NodXRkb3duYWNrX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0
cyAqYWx0OwotCi0JLyogZmlyc3QgdGhyZXNob2xkIG1hbmFnZW1lbnQgKi8KLQlpZiAoc2N0cF90
aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwgc3RjYi0+YXNvYy5tYXhfc2VuZF90
aW1lcykpIHsKLQkJLyogQXNzb2MgaXMgb3ZlciAqLwotCQlyZXR1cm4gKDEpOwotCX0KLQlzY3Rw
X2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEsIDAsIDApOwotCS8qIHNlY29uZCBzZWxl
Y3QgYW4gYWx0ZXJuYXRpdmUgKi8KLQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNi
LCBuZXQsIDApOwotCi0JLyogdGhpcmQgZ2VuZXJhdGUgYSBzaHV0ZG93biBpbnRvIHRoZSBxdWV1
ZSBmb3Igb3V0IG5ldCAqLwotCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgYWx0KTsKLQot
CS8qIGZvdXJ0aCByZXN0YXJ0IHRpbWVyICovCi0Jc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfU0hVVERPV05BQ0ssIGlucCwgc3RjYiwgYWx0KTsKLQlyZXR1cm4gKDApOwotfQotCi1z
dGF0aWMgdm9pZAotc2N0cF9hdWRpdF9zdHJlYW1fcXVldWVzX2Zvcl9zaXplKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKLQl1bnNpZ25lZCBpbnQgaSwgY2hrc19pbl9xdWV1
ZSA9IDA7Ci0JaW50IGJlaW5nX2ZpbGxlZCA9IDA7Ci0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGlz
IE9OTFkgY2FsbGVkIHdoZW4gdGhlIHNlbmQvc2VudCBxdWV1ZXMgYXJlIGVtcHR5LgotCSAqLwot
CWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKQotCQlyZXR1cm47Ci0KLQlpZiAo
c3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsKLQkJU0NUUF9QUklOVEYoIkhtbSwg
c2VudF9xdWV1ZV9yZXRyYW5fY250IGlzIG5vbi16ZXJvICVkXG4iLAotCQkJICAgIHN0Y2ItPmFz
b2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJh
bl9jbnQgPSAwOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc19l
bXB0eShzdGNiLCAmc3RjYi0+YXNvYykpIHsKLQkJLyogTm8gc3RyZWFtIHNjaGVkdWxlciBpbmZv
cm1hdGlvbiwgaW5pdGlhbGl6ZSBzY2hlZHVsZXIgKi8KLQkJc3RjYi0+YXNvYy5zc19mdW5jdGlv
bnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNiLT5hc29jLCAwKTsKLQkJaWYgKCFzdGNiLT5hc29j
LnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2IsICZzdGNiLT5hc29jKSkgewotCQkJ
LyogeWVwLCB3ZSBsb3N0IGEgc3RyZWFtIG9yIHR3byAqLwotCQkJU0NUUF9QUklOVEYoIkZvdW5k
IGFkZGl0aW9uYWwgc3RyZWFtcyBOT1QgbWFuYWdlZCBieSBzY2hlZHVsZXIsIGNvcnJlY3RlZFxu
Iik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBubyBzdHJlYW1zIGxvc3QgKi8KLQkJCXN0Y2ItPmFzb2Mu
dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOwotCQl9Ci0JfQotCS8qIENoZWNrIHRvIHNlZSBp
ZiBzb21lIGRhdGEgcXVldWVkLCBpZiBzbyByZXBvcnQgaXQgKi8KLQlmb3IgKGkgPSAwOyBpIDwg
c3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlpZiAoIVRBSUxRX0VNUFRZKCZzdGNi
LT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7Ci0JCQlUQUlMUV9GT1JFQUNIKHNwLCAmc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlLCBuZXh0KSB7Ci0JCQkJaWYgKHNwLT5tc2dfaXNf
Y29tcGxldGUpCi0JCQkJCWJlaW5nX2ZpbGxlZCsrOwotCQkJCWNoa3NfaW5fcXVldWUrKzsKLQkJ
CX0KLQkJfQotCX0KLQlpZiAoY2hrc19pbl9xdWV1ZSAhPSBzdGNiLT5hc29jLnN0cmVhbV9xdWV1
ZV9jbnQpIHsKLQkJU0NUUF9QUklOVEYoIkhtbSwgc3RyZWFtIHF1ZXVlIGNudCBhdCAlZCBJIGNv
dW50ZWQgJWQgaW4gc3RyZWFtIG91dCB3aGVlbFxuIiwKLQkJCSAgICBzdGNiLT5hc29jLnN0cmVh
bV9xdWV1ZV9jbnQsIGNoa3NfaW5fcXVldWUpOwotCX0KLQlpZiAoY2hrc19pbl9xdWV1ZSkgewot
CQkvKiBjYWxsIHRoZSBvdXRwdXQgcXVldWUgZnVuY3Rpb24gKi8KLQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQlpZiAoKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpKSAmJgotCQkgICAgKFRB
SUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSkgewotCQkJLyoKLQkJCSAqIFByb2Jh
Ymx5IHNob3VsZCBnbyBpbiBhbmQgbWFrZSBpdCBnbyBiYWNrIHRocm91Z2gKLQkJCSAqIGFuZCBh
ZGQgZnJhZ21lbnRzIGFsbG93ZWQKLQkJCSAqLwotCQkJaWYgKGJlaW5nX2ZpbGxlZCA9PSAwKSB7
Ci0JCQkJU0NUUF9QUklOVEYoIlN0aWxsIG5vdGhpbmcgbW92ZWQgJWQgY2h1bmtzIGFyZSBzdHVj
a1xuIiwKLQkJCQkJICAgIGNoa3NfaW5fcXVldWUpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJ
U0NUUF9QUklOVEYoIkZvdW5kIG5vIGNodW5rcyBvbiBhbnkgcXVldWUgdG90OiVsdVxuIiwKLQkJ
CSAgICAodV9sb25nKXN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCQlzdGNi
LT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKLQl9Ci19Ci0KLWludAotc2N0cF9o
ZWFydGJlYXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQl1aW50OF90IG5ldF93YXNfcGY7
Ci0KLQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7Ci0JCW5ldF93YXNfcGYg
PSAxOwotCX0gZWxzZSB7Ci0JCW5ldF93YXNfcGYgPSAwOwotCX0KLQlpZiAobmV0LT5oYl9yZXNw
b25kZWQgPT0gMCkgewotCQlpZiAobmV0LT5yby5fc19hZGRyKSB7Ci0JCQkvKiBJbnZhbGlkYXRl
IHRoZSBzcmMgYWRkcmVzcyBpZiB3ZSBkaWQgbm90IGdldAotCQkJICogYSByZXNwb25zZSBsYXN0
IHRpbWUuCi0JCQkgKi8KLQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCW5l
dC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQkJ
fQotCQlzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEsIDAsIDApOwotCQlpZiAo
c2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwgc3RjYi0+YXNvYy5tYXhf
c2VuZF90aW1lcykpIHsKLQkJCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJCXJldHVybiAoMSk7Ci0J
CX0KLQl9Ci0JLyogWmVybyBQQkEsIGlmIGl0IG5lZWRzIGl0ICovCi0JaWYgKG5ldC0+cGFydGlh
bF9ieXRlc19hY2tlZCkgewotCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwotCX0KLQlp
ZiAoKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPiAwKSAmJgotCSAgICAoVEFJ
TFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpICYmCi0JICAgIChUQUlMUV9FTVBUWSgm
c3RjYi0+YXNvYy5zZW50X3F1ZXVlKSkpIHsKLQkJc2N0cF9hdWRpdF9zdHJlYW1fcXVldWVzX2Zv
cl9zaXplKGlucCwgc3RjYik7Ci0JfQotCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQURE
Ul9OT0hCKSAmJgotCSAgICAhKChuZXRfd2FzX3BmID09IDApICYmIChuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUEYpKSkgewotCQkvKiB3aGVuIG1vdmUgdG8gUEYgZHVyaW5nIHRocmVzaG9s
ZCBtYW5nZW1lbnQsIGEgSEIgaGFzIGJlZW4KLQkJICAgcXVldWVkIGluIHRoYXQgcm91dGluZSAq
LwotCQl1aW50MzJfdCBtc19nb25lX2J5OwotCi0JCWlmICgobmV0LT5sYXN0X3NlbnRfdGltZS50
dl9zZWMgPiAwKSB8fAotCQkgICAgKG5ldC0+bGFzdF9zZW50X3RpbWUudHZfdXNlYyA+IDApKSB7
Ci0jaWZkZWYgX19GcmVlQlNEX18KLQkJCXN0cnVjdCB0aW1ldmFsIGRpZmY7Ci0KLQkJCVNDVFBf
R0VUVElNRV9USU1FVkFMKCZkaWZmKTsKLQkJCXRpbWV2YWxzdWIoJmRpZmYsICZuZXQtPmxhc3Rf
c2VudF90aW1lKTsKLSNlbHNlCi0JCQlzdHJ1Y3QgdGltZXZhbCBkaWZmLCBub3c7Ci0KLQkJCVND
VFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCQkJdGltZXJzdWIoJm5vdywgJm5ldC0+bGFzdF9z
ZW50X3RpbWUsICZkaWZmKTsKLSNlbmRpZgotCQkJbXNfZ29uZV9ieSA9ICh1aW50MzJfdCkoZGlm
Zi50dl9zZWMgKiAxMDAwKSArCi0JCQkgICAgICAgICAgICAgKHVpbnQzMl90KShkaWZmLnR2X3Vz
ZWMgLyAxMDAwKTsKLQkJfSBlbHNlIHsKLQkJCW1zX2dvbmVfYnkgPSAweGZmZmZmZmZmOwotCQl9
Ci0JCWlmICgobXNfZ29uZV9ieSA+PSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXkpIHx8Ci0JCSAgICAo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgewotCQkJc2N0cF9zZW5kX2hiKHN0Y2Is
IG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi12
b2lkCi1zY3RwX3BhdGhtdHVfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCXVpbnQz
Ml90IG5leHRfbXR1LCBtdHU7Ci0KLQluZXh0X210dSA9IHNjdHBfZ2V0X25leHRfbXR1KG5ldC0+
bXR1KTsKLQotCWlmICgobmV4dF9tdHUgPiBuZXQtPm10dSkgJiYgKG5ldC0+cG9ydCA9PSAwKSkg
ewotCQlpZiAoKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgfHwKLQkJICAgIChuZXQtPnJv
Ll9zX2FkZHIgPT0gTlVMTCkgfHwKLQkJICAgIChuZXQtPnJvLl9zX2FkZHItPmxvY2FsaWZhX2Zs
YWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSkgewotCQkJaWYgKChuZXQtPnJvLl9zX2FkZHIgIT0g
TlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RF
TEVURUQpKSB7Ci0JCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOwotCQkJCW5ldC0+
cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQl9
IGVsc2UgIGlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoSU5FVDYp
ICYmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKLQkJCQlpZiAobmV0LT5yby5fbF9h
ZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOwotCQkJCQkv
KiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNp
ZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCi0J
CQkJCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5V
TEwpOwotI2Vsc2UKLQkJCQkJKHZvaWQpaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwg
c2luNiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoU0NUUF9LQU1F
KQotCQkJCQkodm9pZClzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2Vf
ZGVmem9uZSkpOwotI2Vsc2UKLQkJCQkJKHZvaWQpaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNik7Ci0jZW5kaWYKLQkJCQl9Ci0jZW5kaWYKLQotCQkJCW5ldC0+cm8uX3NfYWRk
ciA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJCQkJCQkJCQlzdGNiLAot
CQkJCQkJCQkJCShzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKLQkJCQkJCQkJCQluZXQsIDAsIHN0
Y2ItPmFzb2MudnJmX2lkKTsKLSNpZiBkZWZpbmVkKElORVQ2KSAmJiBkZWZpbmVkKFNDVFBfRU1C
RURERURfVjZfU0NPUEUpCi0JCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0g
QUZfSU5FVDYpIHsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkJKHZv
aWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKLSNlbHNlCi0JCQkJCSh2b2lkKWluNl9yZWNvdmVy
c2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7Ci0jZW5kaWYJLyogU0NUUF9LQU1F
ICovCi0JCQkJfQotI2VuZGlmCS8qIElORVQ2ICovCi0JCQl9Ci0JCQlpZiAobmV0LT5yby5fc19h
ZGRyKQotCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOwotCQl9Ci0JCWlmIChuZXQtPnJv
Ll9zX2FkZHIpIHsKLQkJCW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX1JPVVRFKG5ldC0+cm8u
X3NfYWRkciwgJm5ldC0+cm8uX3NfYWRkci5zYSwgbmV0LT5yby5yb19ydCk7Ci0jaWYgZGVmaW5l
ZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCQkJaWYgKG5ldC0+cG9ydCkgewotCQkJCW10dSAt
PSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChtdHUgPiBuZXh0
X210dSkgewotCQkJCW5ldC0+bXR1ID0gbmV4dF9tdHU7Ci0JCQl9IGVsc2UgewotCQkJCW5ldC0+
bXR1ID0gbXR1OwotCQkJfQotCQl9Ci0JfQotCS8qIHJlc3RhcnQgdGhlIHRpbWVyICovCi0Jc2N0
cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5l
dCk7Ci19Ci0KLXZvaWQKLXNjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0biwgKnRpbV90b3VzZTsKLQlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKLQlpbnQgdGlja3NfZ29uZV9ieTsKLQotCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZ0bik7Ci0JaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYK
LQkgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFKSkg
ewotCQkvKiBBdXRvIGNsb3NlIGlzIG9uICovCi0JCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQkJLyog
cGljayB0aGUgdGltZSB0byB1c2UgKi8KLQkJaWYgKGFzb2MtPnRpbWVfbGFzdF9yY3ZkLnR2X3Nl
YyA+Ci0JCSAgICBhc29jLT50aW1lX2xhc3Rfc2VudC50dl9zZWMpIHsKLQkJCXRpbV90b3VzZSA9
ICZhc29jLT50aW1lX2xhc3RfcmN2ZDsKLQkJfSBlbHNlIHsKLQkJCXRpbV90b3VzZSA9ICZhc29j
LT50aW1lX2xhc3Rfc2VudDsKLQkJfQotCQkvKiBOb3cgaGFzIGxvbmcgZW5vdWdoIHRyYW5zcGly
ZWQgdG8gYXV0b2Nsb3NlPyAqLwotCQl0aWNrc19nb25lX2J5ID0gU0VDX1RPX1RJQ0tTKHRuLnR2
X3NlYyAtIHRpbV90b3VzZS0+dHZfc2VjKTsKLQkJaWYgKCh0aWNrc19nb25lX2J5ID4gMCkgJiYK
LQkJICAgICh0aWNrc19nb25lX2J5ID49IChpbnQpYXNvYy0+c2N0cF9hdXRvY2xvc2VfdGlja3Mp
KSB7Ci0JCQkvKgotCQkJICogYXV0b2Nsb3NlIHRpbWUgaGFzIGhpdCwgY2FsbCB0aGUgb3V0cHV0
IHJvdXRpbmUsCi0JCQkgKiB3aGljaCBzaG91bGQgZG8gbm90aGluZyBqdXN0IHRvIGJlIFNVUkUg
d2UgZG9uJ3QKLQkJCSAqIGhhdmUgaGFuZ2luZyBkYXRhLiBXZSBjYW4gdGhlbiBzYWZlbHkgY2hl
Y2sgdGhlCi0JCQkgKiBxdWV1ZXMgYW5kIGtub3cgdGhhdCB3ZSBhcmUgY2xlYXIgdG8gc2VuZAot
CQkJICogc2h1dGRvd24KLQkJCSAqLwotCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkv
KiBBcmUgd2UgY2xlYW4/ICovCi0JCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUp
ICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7Ci0JCQkJLyoKLQkJ
CQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJJ20KLQkJCQkgKiBkb25l
Li4uCi0JCQkJICovCi0JCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVf
U0hVVERPV05fU0VOVCkgewotCQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gMXN0IHRpbWUgdGhy
dSAqLwotCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwotCi0JCQkJCWlmICgoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkJCQkgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJCQlTQ1RQ
X1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQkJCX0KLQkJCQkJU0NUUF9T
RVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCQkJU0NUUF9DTEVB
Ul9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJCQlzY3Rw
X3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0
ZXJuYXRlKSB7Ci0JCQkJCQluZXRwID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JCQkJCX0gZWxz
ZSB7Ci0JCQkJCQluZXRwID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkJCQl9
Ci0JCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsKLQkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCi0JCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsCi0JCQkJCQkJIG5ldHApOwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9TSFVURE9XTkdVQVJELAotCQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSBu
ZXRwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJICogTm8gYXV0byBjbG9z
ZSBhdCB0aGlzIHRpbWUsIHJlc2V0IHQtbyB0byBjaGVjawotCQkJICogbGF0ZXIKLQkJCSAqLwot
CQkJaW50IHRtcDsKLQotCQkJLyogZm9vbCB0aGUgdGltZXIgc3RhcnR1cCB0byB1c2UgdGhlIHRp
bWUgbGVmdCAqLwotCQkJdG1wID0gYXNvYy0+c2N0cF9hdXRvY2xvc2VfdGlja3M7Ci0JCQlhc29j
LT5zY3RwX2F1dG9jbG9zZV90aWNrcyAtPSB0aWNrc19nb25lX2J5OwotCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAsIHN0Y2IsCi0JCQkgICAgbmV0KTsK
LQkJCS8qIHJlc3RvcmUgdGhlIHJlYWwgdGljayB2YWx1ZSAqLwotCQkJYXNvYy0+c2N0cF9hdXRv
Y2xvc2VfdGlja3MgPSB0bXA7Ci0JCX0KLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF90aW1lci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MTliYjZhYjY4ZmVjNjA3MGEzZmQxZmIzNjZmMjM0
ZTg5Yjk2M2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAs
MCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0g
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQo
IiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdGltZXIuaCAyOTU3MDkgMjAxNi0wMi0x
NyAxODowNDoyMlogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBf
VElNRVJfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9USU1FUl9IXwotCi0jaWYgZGVmaW5lZChf
S0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0KLSNkZWZpbmUgU0NUUF9SVFRfU0hJ
RlQgMwotI2RlZmluZSBTQ1RQX1JUVF9WQVJfU0hJRlQgMgotCi1zdHJ1Y3Qgc2N0cF9uZXRzICoK
LXNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVjdCBzY3RwX3RjYiAqLAotICAgIHN0cnVjdCBz
Y3RwX25ldHMgKiwgaW50IG1vZGUpOwotCi1pbnQKLXNjdHBfdDNyeHRfdGltZXIoc3RydWN0IHNj
dHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsK
LWludAotc2N0cF90MWluaXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBf
dGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLWludAotc2N0cF9zaHV0ZG93bl90aW1l
cihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICopOwotaW50Ci1zY3RwX2hlYXJ0YmVhdF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAq
LCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1pbnQKLXNj
dHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAot
ICAgIHN0cnVjdCBzY3RwX25ldHMgKik7Ci0KLXZvaWQKLXNjdHBfcGF0aG10dV90aW1lcihzdHJ1
Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICopOwotCi1pbnQKLXNjdHBfc2h1dGRvd25hY2tfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwg
c3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLWludAotc2N0cF9z
dHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQotaW50Ci1zY3RwX2FzY29uZl90aW1l
cihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICopOwotCi12b2lkCi1zY3RwX2RlbGV0ZV9wcmltX3RpbWVyKHN0cnVjdCBzY3RwX2lu
cGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKik7Ci0KLXZv
aWQKLXNjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3Rw
X3RjYiAqLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCk7Ci0KLXZvaWQgc2N0cF9hdWRpdF9y
ZXRyYW5taXNzaW9uX3F1ZXVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwotCi12b2lkIHNj
dHBfaXRlcmF0b3JfdGltZXIoc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0KTsKLQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBM
RV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01P
VU5UQUlOTElPTikKLXZvaWQgc2N0cF9zbG93dGltbyh2b2lkKTsKLSNlbHNlCi12b2lkIHNjdHBf
Z2Moc3RydWN0IGlucGNiaW5mbyAqKTsKLSNlbmRpZgotI2VuZGlmCi0KLSNlbmRpZgotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfdWlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM0Njk4OWIwMjlm
N2Q3M2Y0ZTkwNjRiMjg5ZTQ3NTk2YzQ5MmNkNGYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTQ2NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3
LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0g
KgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9m
IENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
LSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lz
L2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF91aW8u
aCAzMDk2MDcgMjAxNi0xMi0wNiAxMDoyMToyNVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZu
ZGVmIF9ORVRJTkVUX1NDVFBfVUlPX0hfCi0jZGVmaW5lIF9ORVRJTkVUX1NDVFBfVUlPX0hfCi0K
LSNpZiAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoS0VSTkVMKSkKLSNpZm5kZWYgX0tF
Uk5FTAotI2RlZmluZSBfS0VSTkVMCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYgIShkZWZpbmVkKF9f
V2luZG93c19fKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpZiAhIGRl
ZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2lu
Lmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotI3ByYWdtYSB3YXJuaW5nKHB1
c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkKLSNpZiBkZWZpbmVkKF9LRVJORUwp
Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1
ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2VuZGlmCi0KLXR5cGVkZWYgdWludDMyX3Qgc2N0
cF9hc3NvY190OwotCi0jZGVmaW5lIFNDVFBfRlVUVVJFX0FTU09DICAwCi0jZGVmaW5lIFNDVFBf
Q1VSUkVOVF9BU1NPQyAxCi0jZGVmaW5lIFNDVFBfQUxMX0FTU09DICAgICAyCi0KLXN0cnVjdCBz
Y3RwX2V2ZW50IHsKLQlzY3RwX2Fzc29jX3Qgc2VfYXNzb2NfaWQ7Ci0JdWludDE2X3QgICAgIHNl
X3R5cGU7Ci0JdWludDhfdCAgICAgIHNlX29uOwotfTsKLQotLyogQ29tcGF0aWJpbGl0eSB0byBw
cmV2aW91cyBkZWZpbmUncyAqLwotI2RlZmluZSBzY3RwX3N0cmVhbV9yZXNldF9ldmVudHMgc2N0
cF9zdHJlYW1fcmVzZXRfZXZlbnQKLQotLyogT24vT2ZmIHNldHVwIGZvciBzdWJzY3JpcHRpb24g
dG8gZXZlbnRzICovCi1zdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgewotCXVpbnQ4X3Qgc2N0
cF9kYXRhX2lvX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9hc3NvY2lhdGlvbl9ldmVudDsKLQl1aW50
OF90IHNjdHBfYWRkcmVzc19ldmVudDsKLQl1aW50OF90IHNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50
OwotCXVpbnQ4X3Qgc2N0cF9wZWVyX2Vycm9yX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9zaHV0ZG93
bl9ldmVudDsKLQl1aW50OF90IHNjdHBfcGFydGlhbF9kZWxpdmVyeV9ldmVudDsKLQl1aW50OF90
IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKLQl1aW50OF90IHNjdHBfYXV0aGVudGljYXRp
b25fZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQ7Ci0JdWludDhfdCBzY3Rw
X3N0cmVhbV9yZXNldF9ldmVudDsKLX07Ci0KLS8qIGFuY2lsbGFyeSBkYXRhIHR5cGVzICovCi0j
ZGVmaW5lIFNDVFBfSU5JVAkweDAwMDEKLSNkZWZpbmUgU0NUUF9TTkRSQ1YJMHgwMDAyCi0jZGVm
aW5lIFNDVFBfRVhUUkNWCTB4MDAwMwotI2RlZmluZSBTQ1RQX1NORElORk8gICAgMHgwMDA0Ci0j
ZGVmaW5lIFNDVFBfUkNWSU5GTyAgICAweDAwMDUKLSNkZWZpbmUgU0NUUF9OWFRJTkZPICAgIDB4
MDAwNgotI2RlZmluZSBTQ1RQX1BSSU5GTyAgICAgMHgwMDA3Ci0jZGVmaW5lIFNDVFBfQVVUSElO
Rk8gICAweDAwMDgKLSNkZWZpbmUgU0NUUF9EU1RBRERSVjQgIDB4MDAwOQotI2RlZmluZSBTQ1RQ
X0RTVEFERFJWNiAgMHgwMDBhCi0KLS8qCi0gKiBhbmNpbGxhcnkgZGF0YSBzdHJ1Y3R1cmVzCi0g
Ki8KLXN0cnVjdCBzY3RwX2luaXRtc2cgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uIDwgODAwMDAwCi0JLyogVGhpcyBpcyBhIGJ1Zy4gTm90IGZpeGVkIGZv
ciBBQkkgY29tcGF0aWJpbGl0eSAqLwotCXVpbnQzMl90IHNpbml0X251bV9vc3RyZWFtczsKLQl1
aW50MzJfdCBzaW5pdF9tYXhfaW5zdHJlYW1zOwotI2Vsc2UKLQl1aW50MTZfdCBzaW5pdF9udW1f
b3N0cmVhbXM7Ci0JdWludDE2X3Qgc2luaXRfbWF4X2luc3RyZWFtczsKLSNlbmRpZgotCXVpbnQx
Nl90IHNpbml0X21heF9hdHRlbXB0czsKLQl1aW50MTZfdCBzaW5pdF9tYXhfaW5pdF90aW1lbzsK
LX07Ci0KLS8qIFdlIGFkZCA5NiBieXRlcyB0byB0aGUgc2l6ZSBvZiBzY3RwX3NuZHJjdmluZm8u
Ci0gKiBUaGlzIG1ha2VzIHRoZSBjdXJyZW50IHN0cnVjdHVyZSAxMjggYnl0ZXMgbG9uZwotICog
d2hpY2ggaXMgbmljZWx5IDY0IGJpdCBhbGlnbmVkIGJ1dCBhbHNvIGhhcyByb29tCi0gKiBmb3Ig
dXMgdG8gYWRkIG1vcmUgYW5kIGtlZXAgQUJJIGNvbXBhdGliaWxpdHkuCi0gKiBGb3IgZXhhbXBs
ZSwgYWxyZWFkeSB3ZSBoYXZlIHRoZSBzY3RwX2V4dHJjdmluZm8KLSAqIHdoZW4gZW5hYmxlZCB3
aGljaCBpcyA0OCBieXRlcy4KLSAqLwotCi0vKgotICogVGhlIGFzc29jIHVwIG5lZWRzIGEgdmVy
ZmlkCi0gKiBhbGwgc2VuZHJjdmluZm8ncyBuZWVkIGEgdmVyZmlkIGZvciBTRU5ESU5HIG9ubHku
Ci0gKi8KLQotCi0jZGVmaW5lIFNDVFBfQUxJR05fUkVTVl9QQUQgOTIKLSNkZWZpbmUgU0NUUF9B
TElHTl9SRVNWX1BBRF9TSE9SVCA3NgotCi1zdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHsKLQl1aW50
MTZfdCBzaW5mb19zdHJlYW07Ci0JdWludDE2X3Qgc2luZm9fc3NuOwotCXVpbnQxNl90IHNpbmZv
X2ZsYWdzOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwg
ODAwMDAwCi0JdWludDE2X3Qgc2luZm9fcHJfcG9saWN5OwotI2VuZGlmCi0JdWludDMyX3Qgc2lu
Zm9fcHBpZDsKLQl1aW50MzJfdCBzaW5mb19jb250ZXh0OwotCXVpbnQzMl90IHNpbmZvX3RpbWV0
b2xpdmU7Ci0JdWludDMyX3Qgc2luZm9fdHNuOwotCXVpbnQzMl90IHNpbmZvX2N1bXRzbjsKLQlz
Y3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2luZm9fa2V5bnVtYmVyOwot
CXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92YWxpZDsKLQl1aW50OF90ICBfX3Jlc2VydmVfcGFk
W1NDVFBfQUxJR05fUkVTVl9QQURdOwotfTsKLQotc3RydWN0IHNjdHBfZXh0cmN2aW5mbyB7Ci0J
dWludDE2X3Qgc2luZm9fc3RyZWFtOwotCXVpbnQxNl90IHNpbmZvX3NzbjsKLQl1aW50MTZfdCBz
aW5mb19mbGFnczsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA8IDgwMDAwMAotCXVpbnQxNl90IHNpbmZvX3ByX3BvbGljeTsKLSNlbmRpZgotCXVpbnQzMl90
IHNpbmZvX3BwaWQ7Ci0JdWludDMyX3Qgc2luZm9fY29udGV4dDsKLQl1aW50MzJfdCBzaW5mb190
aW1ldG9saXZlOyAvKiBzaG91bGQgaGF2ZSBiZWVuIHNpbmZvX3ByX3ZhbHVlICovCi0JdWludDMy
X3Qgc2luZm9fdHNuOwotCXVpbnQzMl90IHNpbmZvX2N1bXRzbjsKLQlzY3RwX2Fzc29jX3Qgc2lu
Zm9fYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2VyaW5mb19uZXh0X2ZsYWdzOwotCXVpbnQxNl90IHNl
cmluZm9fbmV4dF9zdHJlYW07Ci0JdWludDMyX3Qgc2VyaW5mb19uZXh0X2FpZDsKLQl1aW50MzJf
dCBzZXJpbmZvX25leHRfbGVuZ3RoOwotCXVpbnQzMl90IHNlcmluZm9fbmV4dF9wcGlkOwotCXVp
bnQxNl90IHNpbmZvX2tleW51bWJlcjsKLQl1aW50MTZfdCBzaW5mb19rZXludW1iZXJfdmFsaWQ7
Ci0JdWludDhfdCAgX19yZXNlcnZlX3BhZFtTQ1RQX0FMSUdOX1JFU1ZfUEFEX1NIT1JUXTsKLX07
Ci0jZGVmaW5lIHNpbmZvX3ByX3ZhbHVlIHNpbmZvX3RpbWV0b2xpdmUKLSNkZWZpbmUgc3JlaW5m
b19uZXh0X2ZsYWdzIHNlcmluZm9fbmV4dF9mbGFncwotI2RlZmluZSBzcmVpbmZvX25leHRfc3Ry
ZWFtIHNlcmluZm9fbmV4dF9zdHJlYW0KLSNkZWZpbmUgc3JlaW5mb19uZXh0X2FpZCBzZXJpbmZv
X25leHRfYWlkCi0jZGVmaW5lIHNyZWluZm9fbmV4dF9sZW5ndGggc2VyaW5mb19uZXh0X2xlbmd0
aAotI2RlZmluZSBzcmVpbmZvX25leHRfcHBpZCBzZXJpbmZvX25leHRfcHBpZAotCi1zdHJ1Y3Qg
c2N0cF9zbmRpbmZvIHsKLQl1aW50MTZfdCBzbmRfc2lkOwotCXVpbnQxNl90IHNuZF9mbGFnczsK
LQl1aW50MzJfdCBzbmRfcHBpZDsKLQl1aW50MzJfdCBzbmRfY29udGV4dDsKLQlzY3RwX2Fzc29j
X3Qgc25kX2Fzc29jX2lkOwotfTsKLQotc3RydWN0IHNjdHBfcHJpbmZvIHsKLQl1aW50MTZfdCBw
cl9wb2xpY3k7Ci0JdWludDMyX3QgcHJfdmFsdWU7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9kZWZhdWx0
X3ByaW5mbyB7Ci0JdWludDE2X3QgcHJfcG9saWN5OwotCXVpbnQzMl90IHByX3ZhbHVlOwotCXNj
dHBfYXNzb2NfdCBwcl9hc3NvY19pZDsKLX07Ci0KLXN0cnVjdCBzY3RwX2F1dGhpbmZvIHsKLQl1
aW50MTZfdCBhdXRoX2tleW51bWJlcjsKLX07Ci0KLXN0cnVjdCBzY3RwX3JjdmluZm8gewotCXVp
bnQxNl90IHJjdl9zaWQ7Ci0JdWludDE2X3QgcmN2X3NzbjsKLQl1aW50MTZfdCByY3ZfZmxhZ3M7
Ci0JdWludDMyX3QgcmN2X3BwaWQ7Ci0JdWludDMyX3QgcmN2X3RzbjsKLQl1aW50MzJfdCByY3Zf
Y3VtdHNuOwotCXVpbnQzMl90IHJjdl9jb250ZXh0OwotCXNjdHBfYXNzb2NfdCByY3ZfYXNzb2Nf
aWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9ueHRpbmZvIHsKLQl1aW50MTZfdCBueHRfc2lkOwotCXVp
bnQxNl90IG54dF9mbGFnczsKLQl1aW50MzJfdCBueHRfcHBpZDsKLQl1aW50MzJfdCBueHRfbGVu
Z3RoOwotCXNjdHBfYXNzb2NfdCBueHRfYXNzb2NfaWQ7Ci19OwotCi0jZGVmaW5lIFNDVFBfTk9f
TkVYVF9NU0cgICAgICAgICAgIDB4MDAwMAotI2RlZmluZSBTQ1RQX05FWFRfTVNHX0FWQUlMICAg
ICAgICAweDAwMDEKLSNkZWZpbmUgU0NUUF9ORVhUX01TR19JU0NPTVBMRVRFICAgMHgwMDAyCi0j
ZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEIDB4MDAwNAotI2RlZmluZSBTQ1RQX05F
WFRfTVNHX0lTX05PVElGSUNBVElPTiAweDAwMDgKLQotc3RydWN0IHNjdHBfcmVjdnZfcm4gewot
CXN0cnVjdCBzY3RwX3JjdmluZm8gcmVjdnZfcmN2aW5mbzsKLQlzdHJ1Y3Qgc2N0cF9ueHRpbmZv
IHJlY3Z2X254dGluZm87Ci19OwotCi0jZGVmaW5lIFNDVFBfUkVDVlZfTk9JTkZPICAwCi0jZGVm
aW5lIFNDVFBfUkVDVlZfUkNWSU5GTyAxCi0jZGVmaW5lIFNDVFBfUkVDVlZfTlhUSU5GTyAyCi0j
ZGVmaW5lIFNDVFBfUkVDVlZfUk4gICAgICAzCi0KLSNkZWZpbmUgU0NUUF9TRU5EVl9OT0lORk8g
ICAwCi0jZGVmaW5lIFNDVFBfU0VORFZfU05ESU5GTyAgMQotI2RlZmluZSBTQ1RQX1NFTkRWX1BS
SU5GTyAgIDIKLSNkZWZpbmUgU0NUUF9TRU5EVl9BVVRISU5GTyAzCi0jZGVmaW5lIFNDVFBfU0VO
RFZfU1BBICAgICAgNAotCi1zdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgewotCXVpbnQzMl90IHNlbmR2
X2ZsYWdzOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc2VuZHZfc25kaW5mbzsKLQlzdHJ1Y3Qgc2N0
cF9wcmluZm8gc2VuZHZfcHJpbmZvOwotCXN0cnVjdCBzY3RwX2F1dGhpbmZvIHNlbmR2X2F1dGhp
bmZvOwotfTsKLQotI2RlZmluZSBTQ1RQX1NFTkRfU05ESU5GT19WQUxJRCAgMHgwMDAwMDAwMQot
I2RlZmluZSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEICAgMHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQ
X1NFTkRfQVVUSElORk9fVkFMSUQgMHgwMDAwMDAwNAotCi1zdHJ1Y3Qgc2N0cF9zbmRfYWxsX2Nv
bXBsZXRlcyB7Ci0JdWludDE2X3Qgc2FsbF9zdHJlYW07Ci0JdWludDE2X3Qgc2FsbF9mbGFnczsK
LQl1aW50MzJfdCBzYWxsX3BwaWQ7Ci0JdWludDMyX3Qgc2FsbF9jb250ZXh0OwotCXVpbnQzMl90
IHNhbGxfbnVtX3NlbnQ7Ci0JdWludDMyX3Qgc2FsbF9udW1fZmFpbGVkOwotfTsKLQotLyogRmxh
Z3MgdGhhdCBnbyBpbnRvIHRoZSBzaW5mby0+c2luZm9fZmxhZ3MgZmllbGQgKi8KLSNkZWZpbmUg
U0NUUF9OT1RJRklDQVRJT04gICAgIDB4MDAxMCAvKiBuZXh0IG1lc3NhZ2UgaXMgYSBub3RpZmlj
YXRpb24gKi8KLSNkZWZpbmUgU0NUUF9DT01QTEVURSAgICAgICAgIDB4MDAyMCAvKiBuZXh0IG1l
c3NhZ2UgaXMgY29tcGxldGUgKi8KLSNkZWZpbmUgU0NUUF9FT0YgICAgICAgICAgICAgIDB4MDEw
MCAvKiBTdGFydCBzaHV0ZG93biBwcm9jZWR1cmVzICovCi0jZGVmaW5lIFNDVFBfQUJPUlQgICAg
ICAgICAgICAweDAyMDAgLyogU2VuZCBhbiBBQk9SVCB0byBwZWVyICovCi0jZGVmaW5lIFNDVFBf
VU5PUkRFUkVEICAgICAgICAweDA0MDAgLyogTWVzc2FnZSBpcyB1bi1vcmRlcmVkICovCi0jZGVm
aW5lIFNDVFBfQUREUl9PVkVSICAgICAgICAweDA4MDAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnkt
YWRkcmVzcyAqLwotI2RlZmluZSBTQ1RQX1NFTkRBTEwgICAgICAgICAgMHgxMDAwIC8qIFNlbmQg
dGhpcyBvbiBhbGwgYXNzb2NpYXRpb25zICovCi0jZGVmaW5lIFNDVFBfRU9SICAgICAgICAgICAg
ICAweDIwMDAgLyogZW5kIG9mIG1lc3NhZ2Ugc2lnbmFsICovCi0jZGVmaW5lIFNDVFBfU0FDS19J
TU1FRElBVEVMWSAweDQwMDAgLyogU2V0IEktQml0ICovCi0KLSNkZWZpbmUgSU5WQUxJRF9TSU5G
T19GTEFHKHgpICgoKHgpICYgMHhmZmZmZmZmMCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmIH4oU0NUUF9FT0YgfCBTQ1RQX0FCT1JUIHwgU0NUUF9VTk9SREVSRUQgfFwK
LQkJCQkgICAgICAgIFNDVFBfQUREUl9PVkVSIHwgU0NUUF9TRU5EQUxMIHwgU0NUUF9FT1IgfFwK
LQkJCQkJU0NUUF9TQUNLX0lNTUVESUFURUxZKSkgIT0gMCkKLS8qIGZvciB0aGUgZW5kcG9pbnQg
Ki8KLQotLyogVGhlIGxvd2VyIGZvdXIgYml0cyBpcyBhbiBlbnVtZXJhdGlvbiBvZiBQUi1TQ1RQ
IHBvbGljaWVzICovCi0jZGVmaW5lIFNDVFBfUFJfU0NUUF9OT05FIDB4MDAwMCAvKiBSZWxpYWJs
ZSB0cmFuc2ZlciAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfVFRMICAweDAwMDEgLyogVGltZSBi
YXNlZCBQUi1TQ1RQICovCi0jZGVmaW5lIFNDVFBfUFJfU0NUUF9QUklPIDB4MDAwMiAvKiBCdWZm
ZXIgYmFzZWQgUFItU0NUUCAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfQlVGICBTQ1RQX1BSX1ND
VFBfUFJJTyAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8KLSNkZWZpbmUgU0NUUF9Q
Ul9TQ1RQX1JUWCAgMHgwMDAzIC8qIE51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgYmFzZWQgUFIt
U0NUUCAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfTUFYICBTQ1RQX1BSX1NDVFBfUlRYCi0jZGVm
aW5lIFNDVFBfUFJfU0NUUF9BTEwgIDB4MDAwZiAvKiBVc2VkIGZvciBhZ2dyZWdhdGVkIHN0YXRz
ICovCi0KLSNkZWZpbmUgUFJfU0NUUF9QT0xJQ1koeCkgICAgICAgICAoKHgpICYgMHgwZikKLSNk
ZWZpbmUgUFJfU0NUUF9FTkFCTEVEKHgpICAgICAgICAoKFBSX1NDVFBfUE9MSUNZKHgpICE9IFND
VFBfUFJfU0NUUF9OT05FKSAmJiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChQUl9TQ1RQX1BPTElDWSh4KSAhPSBTQ1RQX1BSX1NDVFBfQUxMKSkKLSNkZWZpbmUgUFJfU0NU
UF9UVExfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX1RU
TCkKLSNkZWZpbmUgUFJfU0NUUF9CVUZfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkg
PT0gU0NUUF9QUl9TQ1RQX0JVRikKLSNkZWZpbmUgUFJfU0NUUF9SVFhfRU5BQkxFRCh4KSAgICAo
UFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX1JUWCkKLSNkZWZpbmUgUFJfU0NUUF9J
TlZBTElEX1BPTElDWSh4KSAoUFJfU0NUUF9QT0xJQ1koeCkgPiBTQ1RQX1BSX1NDVFBfTUFYKQot
I2RlZmluZSBQUl9TQ1RQX1ZBTElEX1BPTElDWSh4KSAgIChQUl9TQ1RQX1BPTElDWSh4KSA8PSBT
Q1RQX1BSX1NDVFBfTUFYKQotCi0vKiBTdGF0J3MgKi8KLXN0cnVjdCBzY3RwX3BjYmluZm8gewot
CXVpbnQzMl90IGVwX2NvdW50OwotCXVpbnQzMl90IGFzb2NfY291bnQ7Ci0JdWludDMyX3QgbGFk
ZHJfY291bnQ7Ci0JdWludDMyX3QgcmFkZHJfY291bnQ7Ci0JdWludDMyX3QgY2hrX2NvdW50Owot
CXVpbnQzMl90IHJlYWRxX2NvdW50OwotCXVpbnQzMl90IGZyZWVfY2h1bmtzOwotCXVpbnQzMl90
IHN0cmVhbV9vcXVlOwotfTsKLQotc3RydWN0IHNjdHBfc29ja3N0YXQgewotCXNjdHBfYXNzb2Nf
dCBzc19hc3NvY19pZDsKLQl1aW50MzJfdCBzc190b3RhbF9zbmRidWY7Ci0JdWludDMyX3Qgc3Nf
dG90YWxfcmVjdl9idWY7Ci19OwotCi0vKgotICogbm90aWZpY2F0aW9uIGV2ZW50IHN0cnVjdHVy
ZXMKLSAqLwotCi0vKgotICogYXNzb2NpYXRpb24gY2hhbmdlIGV2ZW50Ci0gKi8KLXN0cnVjdCBz
Y3RwX2Fzc29jX2NoYW5nZSB7Ci0JdWludDE2X3Qgc2FjX3R5cGU7Ci0JdWludDE2X3Qgc2FjX2Zs
YWdzOwotCXVpbnQzMl90IHNhY19sZW5ndGg7Ci0JdWludDE2X3Qgc2FjX3N0YXRlOwotCXVpbnQx
Nl90IHNhY19lcnJvcjsKLQl1aW50MTZfdCBzYWNfb3V0Ym91bmRfc3RyZWFtczsKLQl1aW50MTZf
dCBzYWNfaW5ib3VuZF9zdHJlYW1zOwotCXNjdHBfYXNzb2NfdCBzYWNfYXNzb2NfaWQ7Ci0JdWlu
dDhfdCBzYWNfaW5mb1tdOwotfTsKLQotLyogc2FjX3N0YXRlIHZhbHVlcyAqLwotI2RlZmluZSBT
Q1RQX0NPTU1fVVAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgU0NUUF9DT01NX0xPU1QgICAg
ICAgICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfUkVTVEFSVCAgICAgICAgICAgIDB4MDAwMwotI2Rl
ZmluZSBTQ1RQX1NIVVRET1dOX0NPTVAgICAgICAweDAwMDQKLSNkZWZpbmUgU0NUUF9DQU5UX1NU
Ul9BU1NPQyAgICAgMHgwMDA1Ci0KLS8qIHNhY19pbmZvIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQ
X0FTU09DX1NVUFBPUlRTX1BSCQkJMHgwMQotI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FV
VEgJCTB4MDIKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19BU0NPTkYJCTB4MDMKLSNkZWZp
bmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRgkJMHgwNAotI2RlZmluZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX1JFX0NPTkZJRwkJMHgwNQotI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0lO
VEVSTEVBVklORwkweDA2Ci0jZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfTUFYCQkJMHgwNgot
LyoKLSAqIEFkZHJlc3MgZXZlbnQKLSAqLwotc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHsKLQl1
aW50MTZfdCBzcGNfdHlwZTsKLQl1aW50MTZfdCBzcGNfZmxhZ3M7Ci0JdWludDMyX3Qgc3BjX2xl
bmd0aDsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGNfYWFkZHI7Ci0JdWludDMyX3Qgc3Bj
X3N0YXRlOwotCXVpbnQzMl90IHNwY19lcnJvcjsKLQlzY3RwX2Fzc29jX3Qgc3BjX2Fzc29jX2lk
OwotfTsKLQotLyogcGFkZHIgc3RhdGUgdmFsdWVzICovCi0jZGVmaW5lIFNDVFBfQUREUl9BVkFJ
TEFCTEUJMHgwMDAxCi0jZGVmaW5lIFNDVFBfQUREUl9VTlJFQUNIQUJMRQkweDAwMDIKLSNkZWZp
bmUgU0NUUF9BRERSX1JFTU9WRUQJMHgwMDAzCi0jZGVmaW5lIFNDVFBfQUREUl9BRERFRAkJMHgw
MDA0Ci0jZGVmaW5lIFNDVFBfQUREUl9NQURFX1BSSU0JMHgwMDA1Ci0jZGVmaW5lIFNDVFBfQURE
Ul9DT05GSVJNRUQJMHgwMDA2Ci0KLSNkZWZpbmUgU0NUUF9BQ1RJVkUJCTB4MDAwMQkvKiBTQ1RQ
X0FERFJfUkVBQ0hBQkxFICovCi0jZGVmaW5lIFNDVFBfSU5BQ1RJVkUJCTB4MDAwMgkvKiBuZWl0
aGVyIFNDVFBfQUREUl9SRUFDSEFCTEUKLQkJCQkJICAgbm9yIFNDVFBfQUREUl9VTkNPTkZJUk1F
RCAqLwotI2RlZmluZSBTQ1RQX1VOQ09ORklSTUVECTB4MDIwMAkvKiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQgKi8KLQotLyogcmVtb3RlIGVycm9yIGV2ZW50cyAqLwotc3RydWN0IHNjdHBfcmVtb3Rl
X2Vycm9yIHsKLQl1aW50MTZfdCBzcmVfdHlwZTsKLQl1aW50MTZfdCBzcmVfZmxhZ3M7Ci0JdWlu
dDMyX3Qgc3JlX2xlbmd0aDsKLQl1aW50MTZfdCBzcmVfZXJyb3I7Ci0Jc2N0cF9hc3NvY190IHNy
ZV9hc3NvY19pZDsKLQl1aW50OF90IHNyZV9kYXRhW107Ci19OwotCi0vKiBkYXRhIHNlbmQgZmFp
bHVyZSBldmVudCAoZGVwcmVjYXRlZCkgKi8KLXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkIHsKLQl1
aW50MTZfdCBzc2ZfdHlwZTsKLQl1aW50MTZfdCBzc2ZfZmxhZ3M7Ci0JdWludDMyX3Qgc3NmX2xl
bmd0aDsKLQl1aW50MzJfdCBzc2ZfZXJyb3I7Ci0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzc2Zf
aW5mbzsKLQlzY3RwX2Fzc29jX3Qgc3NmX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NmX2RhdGFbXTsK
LX07Ci0KLS8qIGRhdGEgc2VuZCBmYWlsdXJlIGV2ZW50IChub3QgZGVwcmVjYXRlZCkgKi8KLXN0
cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHsKLQl1aW50MTZfdCBzc2ZlX3R5cGU7Ci0JdWlu
dDE2X3Qgc3NmZV9mbGFnczsKLQl1aW50MzJfdCBzc2ZlX2xlbmd0aDsKLQl1aW50MzJfdCBzc2Zl
X2Vycm9yOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc3NmZV9pbmZvOwotCXNjdHBfYXNzb2NfdCBz
c2ZlX2Fzc29jX2lkOwotCXVpbnQ4X3QgIHNzZmVfZGF0YVtdOwotfTsKLQotLyogZmxhZyB0aGF0
IGluZGljYXRlcyBzdGF0ZSBvZiBkYXRhICovCi0jZGVmaW5lIFNDVFBfREFUQV9VTlNFTlQJMHgw
MDAxCS8qIGlucXVldWUgbmV2ZXIgb24gd2lyZSAqLwotI2RlZmluZSBTQ1RQX0RBVEFfU0VOVAkJ
MHgwMDAyCS8qIG9uIHdpcmUgYXQgZmFpbHVyZSAqLwotCi0vKiBzaHV0ZG93biBldmVudCAqLwot
c3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgewotCXVpbnQxNl90IHNzZV90eXBlOwotCXVpbnQx
Nl90IHNzZV9mbGFnczsKLQl1aW50MzJfdCBzc2VfbGVuZ3RoOwotCXNjdHBfYXNzb2NfdCBzc2Vf
YXNzb2NfaWQ7Ci19OwotCi0vKiBBZGFwdGF0aW9uIGxheWVyIGluZGljYXRpb24gc3R1ZmYgKi8K
LXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgewotCXVpbnQxNl90IHNhaV90eXBlOwotCXVp
bnQxNl90IHNhaV9mbGFnczsKLQl1aW50MzJfdCBzYWlfbGVuZ3RoOwotCXVpbnQzMl90IHNhaV9h
ZGFwdGF0aW9uX2luZDsKLQlzY3RwX2Fzc29jX3Qgc2FpX2Fzc29jX2lkOwotfTsKLQotc3RydWN0
IHNjdHBfc2V0YWRhcHRhdGlvbiB7Ci0JdWludDMyX3Qgc3NiX2FkYXB0YXRpb25faW5kOwotfTsK
LQotLyogY29tcGF0aWJsZSBvbGQgc3BlbGxpbmcgKi8KLXN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2
ZW50IHsKLQl1aW50MTZfdCBzYWlfdHlwZTsKLQl1aW50MTZfdCBzYWlfZmxhZ3M7Ci0JdWludDMy
X3Qgc2FpX2xlbmd0aDsKLQl1aW50MzJfdCBzYWlfYWRhcHRpb25faW5kOwotCXNjdHBfYXNzb2Nf
dCBzYWlfYXNzb2NfaWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zZXRhZGFwdGlvbiB7Ci0JdWludDMy
X3Qgc3NiX2FkYXB0aW9uX2luZDsKLX07Ci0KLQotLyoKLSAqIFBhcnRpYWwgRGVsaXZlcnkgQVBJ
IGV2ZW50Ci0gKi8KLXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHsKLQl1aW50MTZfdCBwZGFwaV90
eXBlOwotCXVpbnQxNl90IHBkYXBpX2ZsYWdzOwotCXVpbnQzMl90IHBkYXBpX2xlbmd0aDsKLQl1
aW50MzJfdCBwZGFwaV9pbmRpY2F0aW9uOwotCXVpbnQxNl90IHBkYXBpX3N0cmVhbTsKLQl1aW50
MTZfdCBwZGFwaV9zZXE7Ci0Jc2N0cF9hc3NvY190IHBkYXBpX2Fzc29jX2lkOwotfTsKLQotLyog
aW5kaWNhdGlvbiB2YWx1ZXMgKi8KLSNkZWZpbmUgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0FCT1JU
RUQJMHgwMDAxCi0KLQotLyoKLSAqIGF1dGhlbnRpY2F0aW9uIGtleSBldmVudAotICovCi1zdHJ1
Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHsKLQl1aW50MTZfdCBhdXRoX3R5cGU7Ci0JdWludDE2X3Qg
YXV0aF9mbGFnczsKLQl1aW50MzJfdCBhdXRoX2xlbmd0aDsKLQl1aW50MTZfdCBhdXRoX2tleW51
bWJlcjsKLQl1aW50MTZfdCBhdXRoX2FsdGtleW51bWJlcjsKLQl1aW50MzJfdCBhdXRoX2luZGlj
YXRpb247Ci0Jc2N0cF9hc3NvY190IGF1dGhfYXNzb2NfaWQ7Ci19OwotCi0vKiBpbmRpY2F0aW9u
IHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0FVVEhfTkVXX0tFWQkweDAwMDEKLSNkZWZpbmUgU0NU
UF9BVVRIX05FV0tFWQlTQ1RQX0FVVEhfTkVXX0tFWQotI2RlZmluZSBTQ1RQX0FVVEhfTk9fQVVU
SAkweDAwMDIKLSNkZWZpbmUgU0NUUF9BVVRIX0ZSRUVfS0VZCTB4MDAwMwotCi0KLXN0cnVjdCBz
Y3RwX3NlbmRlcl9kcnlfZXZlbnQgewotCXVpbnQxNl90IHNlbmRlcl9kcnlfdHlwZTsKLQl1aW50
MTZfdCBzZW5kZXJfZHJ5X2ZsYWdzOwotCXVpbnQzMl90IHNlbmRlcl9kcnlfbGVuZ3RoOwotCXNj
dHBfYXNzb2NfdCBzZW5kZXJfZHJ5X2Fzc29jX2lkOwotfTsKLQotCi0vKgotICogU3RyZWFtIHJl
c2V0IGV2ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UCi0gKi8KLXN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCB7Ci0JdWludDE2X3Qgc3RycmVzZXRfdHlwZTsK
LQl1aW50MTZfdCBzdHJyZXNldF9mbGFnczsKLQl1aW50MzJfdCBzdHJyZXNldF9sZW5ndGg7Ci0J
c2N0cF9hc3NvY190IHN0cnJlc2V0X2Fzc29jX2lkOwotCXVpbnQxNl90IHN0cnJlc2V0X3N0cmVh
bV9saXN0W107Ci19OwotCi0vKiBmbGFncyBpbiBzdHJlYW1fcmVzZXRfZXZlbnQgKHN0cnJlc2V0
X2ZsYWdzKSAqLwotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR19TU04gIDB4MDAw
MQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04gIDB4MDAwMgotI2RlZmlu
ZSBTQ1RQX1NUUkVBTV9SRVNFVF9ERU5JRUQgICAgICAgIDB4MDAwNAotI2RlZmluZSBTQ1RQX1NU
UkVBTV9SRVNFVF9GQUlMRUQgICAgICAgIDB4MDAwOAotCi0vKgotICogQXNzb2MgcmVzZXQgZXZl
bnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9BU1NPQ19SRVNFVF9FVkVOVAotICovCi1zdHJ1Y3Qgc2N0
cF9hc3NvY19yZXNldF9ldmVudCB7Ci0JdWludDE2X3QgCWFzc29jcmVzZXRfdHlwZTsKLQl1aW50
MTZfdAlhc3NvY3Jlc2V0X2ZsYWdzOwotCXVpbnQzMl90CWFzc29jcmVzZXRfbGVuZ3RoOwotCXNj
dHBfYXNzb2NfdAlhc3NvY3Jlc2V0X2Fzc29jX2lkOwotCXVpbnQzMl90CWFzc29jcmVzZXRfbG9j
YWxfdHNuOwotCXVpbnQzMl90CWFzc29jcmVzZXRfcmVtb3RlX3RzbjsKLX07Ci0KLSNkZWZpbmUg
U0NUUF9BU1NPQ19SRVNFVF9ERU5JRUQJCTB4MDAwNAotI2RlZmluZSBTQ1RQX0FTU09DX1JFU0VU
X0ZBSUxFRAkJMHgwMDA4Ci0KLS8qCi0gKiBTdHJlYW0gY2hhbmdlIGV2ZW50IC0gc3Vic2NyaWJl
IHRvIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVAotICovCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hh
bmdlX2V2ZW50IHsKLQl1aW50MTZfdAlzdHJjaGFuZ2VfdHlwZTsKLQl1aW50MTZfdAlzdHJjaGFu
Z2VfZmxhZ3M7Ci0JdWludDMyX3QJc3RyY2hhbmdlX2xlbmd0aDsKLQlzY3RwX2Fzc29jX3QJc3Ry
Y2hhbmdlX2Fzc29jX2lkOwotCXVpbnQxNl90CXN0cmNoYW5nZV9pbnN0cm1zOwotCXVpbnQxNl90
CXN0cmNoYW5nZV9vdXRzdHJtczsKLX07Ci0KLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFX0RF
TklFRAkweDAwMDQKLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRAkweDAwMDgKLQot
Ci0vKiBTQ1RQIG5vdGlmaWNhdGlvbiBldmVudCAqLwotc3RydWN0IHNjdHBfdGx2IHsKLQl1aW50
MTZfdCBzbl90eXBlOwotCXVpbnQxNl90IHNuX2ZsYWdzOwotCXVpbnQzMl90IHNuX2xlbmd0aDsK
LX07Ci0KLXVuaW9uIHNjdHBfbm90aWZpY2F0aW9uIHsKLQlzdHJ1Y3Qgc2N0cF90bHYgc25faGVh
ZGVyOwotCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSBzbl9hc3NvY19jaGFuZ2U7Ci0Jc3RydWN0
IHNjdHBfcGFkZHJfY2hhbmdlIHNuX3BhZGRyX2NoYW5nZTsKLQlzdHJ1Y3Qgc2N0cF9yZW1vdGVf
ZXJyb3Igc25fcmVtb3RlX2Vycm9yOwotCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkIHNuX3NlbmRf
ZmFpbGVkOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50IHNuX3NodXRkb3duX2V2ZW50Owot
CXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlvbl9ldmVudDsKLQkvKiBj
b21wYXRpYmlsaXR5IHNhbWUgYXMgYWJvdmUgKi8KLQlzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVu
dCBzbl9hZGFwdGlvbl9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCBzbl9wZGFwaV9l
dmVudDsKLQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHNuX2F1dGhfZXZlbnQ7Ci0Jc3RydWN0
IHNjdHBfc2VuZGVyX2RyeV9ldmVudCBzbl9zZW5kZXJfZHJ5X2V2ZW50OwotCXN0cnVjdCBzY3Rw
X3NlbmRfZmFpbGVkX2V2ZW50IHNuX3NlbmRfZmFpbGVkX2V2ZW50OwotCXN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9ldmVudCBzbl9zdHJyZXNldF9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY19y
ZXNldF9ldmVudCAgc25fYXNzb2NyZXNldF9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hh
bmdlX2V2ZW50IHNuX3N0cmNoYW5nZV9ldmVudDsKLX07Ci0KLS8qIG5vdGlmaWNhdGlvbiB0eXBl
cyAqLwotI2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRSAgICAgICAgICAgICAgICAgICAgICAgMHgw
MDAxCi0jZGVmaW5lIFNDVFBfUEVFUl9BRERSX0NIQU5HRSAgICAgICAgICAgICAgICAgICAweDAw
MDIKLSNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw
MwotI2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0
Ci0jZGVmaW5lIFNDVFBfU0hVVERPV05fRVZFTlQgICAgICAgICAgICAgICAgICAgICAweDAwMDUK
LSNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04gICAgICAgICAgICAgIDB4MDAwNgot
Lyogc2FtZSBhcyBhYm92ZSAqLwotI2RlZmluZSBTQ1RQX0FEQVBUSU9OX0lORElDQVRJT04gICAg
ICAgICAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVCAg
ICAgICAgICAgICAweDAwMDcKLSNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVCAgICAg
ICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCAgICAgICAg
ICAgICAgICAgMHgwMDA5Ci0jZGVmaW5lIFNDVFBfU0VOREVSX0RSWV9FVkVOVCAgICAgICAgICAg
ICAgICAgICAweDAwMGEKLSNkZWZpbmUgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQg
ICAgICAgIDB4MDAwYiAvKiB3ZSBkb24ndCBzZW5kIHRoaXMqLwotI2RlZmluZSBTQ1RQX0FTU09D
X1JFU0VUX0VWRU5UICAgICAgICAgICAgICAgICAgMHgwMDBjCi0jZGVmaW5lIFNDVFBfU1RSRUFN
X0NIQU5HRV9FVkVOVCAgICAgICAgICAgICAgICAweDAwMGQKLSNkZWZpbmUgU0NUUF9TRU5EX0ZB
SUxFRF9FVkVOVCAgICAgICAgICAgICAgICAgIDB4MDAwZQotLyoKLSAqIHNvY2tldCBvcHRpb24g
c3RydWN0cwotICovCi0KLXN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHsKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsKLQlzY3RwX2Fzc29jX3Qgc3BwX2Fzc29jX2lkOwotCXVp
bnQzMl90IHNwcF9oYmludGVydmFsOwotCXVpbnQzMl90IHNwcF9wYXRobXR1OwotCXVpbnQzMl90
IHNwcF9mbGFnczsKLQl1aW50MzJfdCBzcHBfaXB2Nl9mbG93bGFiZWw7Ci0JdWludDE2X3Qgc3Bw
X3BhdGhtYXhyeHQ7Ci0JdWludDhfdCBzcHBfZHNjcDsKLX07Ci0jZGVmaW5lIHNwcF9pcHY0X3Rv
cyBzcHBfZHNjcAotCi0jZGVmaW5lIFNQUF9IQl9FTkFCTEUJCTB4MDAwMDAwMDEKLSNkZWZpbmUg
U1BQX0hCX0RJU0FCTEUJCTB4MDAwMDAwMDIKLSNkZWZpbmUgU1BQX0hCX0RFTUFORAkJMHgwMDAw
MDAwNAotI2RlZmluZSBTUFBfUE1UVURfRU5BQkxFCTB4MDAwMDAwMDgKLSNkZWZpbmUgU1BQX1BN
VFVEX0RJU0FCTEUJMHgwMDAwMDAxMAotI2RlZmluZSBTUFBfSEJfVElNRV9JU19aRVJPICAgICAw
eDAwMDAwMDgwCi0jZGVmaW5lIFNQUF9JUFY2X0ZMT1dMQUJFTCAgICAgIDB4MDAwMDAxMDAKLSNk
ZWZpbmUgU1BQX0RTQ1AgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAotI2RlZmluZSBTUFBfSVBW
NF9UT1MgICAgICAgICAgICBTUFBfRFNDUAotCi1zdHJ1Y3Qgc2N0cF9wYWRkcnRobGRzIHsKLQlz
dHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHRfYWRkcmVzczsKLQlzY3RwX2Fzc29jX3Qgc3B0X2Fz
c29jX2lkOwotCXVpbnQxNl90IHNwdF9wYXRobWF4cnh0OwotCXVpbnQxNl90IHNwdF9wYXRocGZ0
aGxkOwotCXVpbnQxNl90IHNwdF9wYXRoY3B0aGxkOwotfTsKLQotc3RydWN0IHNjdHBfcGFkZHJp
bmZvIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGluZm9fYWRkcmVzczsKLQlzY3RwX2Fz
c29jX3Qgc3BpbmZvX2Fzc29jX2lkOwotCWludDMyX3Qgc3BpbmZvX3N0YXRlOwotCXVpbnQzMl90
IHNwaW5mb19jd25kOwotCXVpbnQzMl90IHNwaW5mb19zcnR0OwotCXVpbnQzMl90IHNwaW5mb19y
dG87Ci0JdWludDMyX3Qgc3BpbmZvX210dTsKLX07Ci0KLXN0cnVjdCBzY3RwX3J0b2luZm8gewot
CXNjdHBfYXNzb2NfdCBzcnRvX2Fzc29jX2lkOwotCXVpbnQzMl90IHNydG9faW5pdGlhbDsKLQl1
aW50MzJfdCBzcnRvX21heDsKLQl1aW50MzJfdCBzcnRvX21pbjsKLX07Ci0KLXN0cnVjdCBzY3Rw
X2Fzc29jcGFyYW1zIHsKLQlzY3RwX2Fzc29jX3Qgc2Fzb2NfYXNzb2NfaWQ7Ci0JdWludDMyX3Qg
c2Fzb2NfcGVlcl9yd25kOwotCXVpbnQzMl90IHNhc29jX2xvY2FsX3J3bmQ7Ci0JdWludDMyX3Qg
c2Fzb2NfY29va2llX2xpZmU7Ci0JdWludDE2X3Qgc2Fzb2NfYXNvY21heHJ4dDsKLQl1aW50MTZf
dCBzYXNvY19udW1iZXJfcGVlcl9kZXN0aW5hdGlvbnM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zZXRw
cmltIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BfYWRkcjsKLQlzY3RwX2Fzc29jX3Qg
c3NwX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NwX3BhZGRpbmdbNF07Ci19OwotCi1zdHJ1Y3Qgc2N0
cF9zZXRwZWVycHJpbSB7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3NwcF9hZGRyOwotCXNj
dHBfYXNzb2NfdCBzc3BwX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NwcF9wYWRkaW5nWzRdOwotfTsK
LQotc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzIHsKLQlzY3RwX2Fzc29jX3Qgc2dldF9hc3NvY19p
ZDsKLQkvKiBhZGRyIGlzIGZpbGxlZCBpbiBmb3IgTiAqIHNvY2thZGRyX3N0b3JhZ2UgKi8KLQlz
dHJ1Y3Qgc29ja2FkZHIgYWRkclsxXTsKLX07Ci0KLXN0cnVjdCBzY3RwX3N0YXR1cyB7Ci0Jc2N0
cF9hc3NvY190IHNzdGF0X2Fzc29jX2lkOwotCWludDMyX3Qgc3N0YXRfc3RhdGU7Ci0JdWludDMy
X3Qgc3N0YXRfcnduZDsKLQl1aW50MTZfdCBzc3RhdF91bmFja2RhdGE7Ci0JdWludDE2X3Qgc3N0
YXRfcGVuZGRhdGE7Ci0JdWludDE2X3Qgc3N0YXRfaW5zdHJtczsKLQl1aW50MTZfdCBzc3RhdF9v
dXRzdHJtczsKLQl1aW50MzJfdCBzc3RhdF9mcmFnbWVudGF0aW9uX3BvaW50OwotCXN0cnVjdCBz
Y3RwX3BhZGRyaW5mbyBzc3RhdF9wcmltYXJ5OwotfTsKLQotLyoKLSAqIEFVVEhFTlRJQ0FUSU9O
IHN1cHBvcnQKLSAqLwotLyogU0NUUF9BVVRIX0NIVU5LICovCi1zdHJ1Y3Qgc2N0cF9hdXRoY2h1
bmsgewotCXVpbnQ4X3Qgc2F1dGhfY2h1bms7Ci19OwotCi0vKiBTQ1RQX0FVVEhfS0VZICovCi1z
dHJ1Y3Qgc2N0cF9hdXRoa2V5IHsKLQlzY3RwX2Fzc29jX3Qgc2NhX2Fzc29jX2lkOwotCXVpbnQx
Nl90IHNjYV9rZXludW1iZXI7Ci0JdWludDE2X3Qgc2NhX2tleWxlbmd0aDsKLQl1aW50OF90IHNj
YV9rZXlbXTsKLX07Ci0KLS8qIFNDVFBfSE1BQ19JREVOVCAqLwotc3RydWN0IHNjdHBfaG1hY2Fs
Z28gewotCXVpbnQzMl90IHNobWFjX251bWJlcl9vZl9pZGVudHM7Ci0JdWludDE2X3Qgc2htYWNf
aWRlbnRzW107Ci19OwotCi0vKiBBVVRIIGhtYWNfaWQgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0hN
QUNfSURfUlNWRAkJMHgwMDAwCi0jZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEJCTB4MDAw
MQkvKiBkZWZhdWx0LCBtYW5kYXRvcnkgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hB
MjU2CTB4MDAwMwotCi0vKiBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAvIFNDVFBfQVVUSF9ERUxFVEVf
S0VZICovCi1zdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgewotCXNjdHBfYXNzb2NfdCBzY2FjdF9hc3Nv
Y19pZDsKLQl1aW50MTZfdCBzY2FjdF9rZXludW1iZXI7Ci19OwotCi0vKiBTQ1RQX1BFRVJfQVVU
SF9DSFVOS1MgLyBTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktTICovCi1zdHJ1Y3Qgc2N0cF9hdXRoY2h1
bmtzIHsKLQlzY3RwX2Fzc29jX3QgZ2F1dGhfYXNzb2NfaWQ7Ci0JdWludDMyX3QgZ2F1dGhfbnVt
YmVyX29mX2NodW5rczsKLQl1aW50OF90IGdhdXRoX2NodW5rc1tdOwotfTsKLQotc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgewotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsKLQl1aW50MzJfdCBhc3Nv
Y192YWx1ZTsKLX07Ci0KLXN0cnVjdCBzY3RwX2NjX29wdGlvbiB7Ci0JaW50IG9wdGlvbjsKLQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhaWRfdmFsdWU7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zdHJl
YW1fdmFsdWUgewotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsKLQl1aW50MTZfdCBzdHJlYW1faWQ7
Ci0JdWludDE2X3Qgc3RyZWFtX3ZhbHVlOwotfTsKLQotc3RydWN0IHNjdHBfYXNzb2NfaWRzIHsK
LQl1aW50MzJfdCBnYWlkc19udW1iZXJfb2ZfaWRzOwotCXNjdHBfYXNzb2NfdCBnYWlkc19hc3Nv
Y19pZFtdOwotfTsKLQotc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKLQlzY3RwX2Fzc29jX3Qgc2Fj
a19hc3NvY19pZDsKLQl1aW50MzJfdCBzYWNrX2RlbGF5OwotCXVpbnQzMl90IHNhY2tfZnJlcTsK
LX07Ci0KLXN0cnVjdCBzY3RwX3RpbWVvdXRzIHsKLQlzY3RwX2Fzc29jX3Qgc3RpbW9fYXNzb2Nf
aWQ7Ci0JdWludDMyX3Qgc3RpbW9faW5pdDsKLQl1aW50MzJfdCBzdGltb19kYXRhOwotCXVpbnQz
Ml90IHN0aW1vX3NhY2s7Ci0JdWludDMyX3Qgc3RpbW9fc2h1dGRvd247Ci0JdWludDMyX3Qgc3Rp
bW9faGVhcnRiZWF0OwotCXVpbnQzMl90IHN0aW1vX2Nvb2tpZTsKLQl1aW50MzJfdCBzdGltb19z
aHV0ZG93bmFjazsKLX07Ci0KLXN0cnVjdCBzY3RwX3VkcGVuY2FwcyB7Ci0Jc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2Ugc3VlX2FkZHJlc3M7Ci0Jc2N0cF9hc3NvY190IHN1ZV9hc3NvY19pZDsKLQl1
aW50MTZfdCBzdWVfcG9ydDsKLX07Ci0KLXN0cnVjdCBzY3RwX3Byc3RhdHVzIHsKLQlzY3RwX2Fz
c29jX3Qgc3Byc3RhdF9hc3NvY19pZDsKLQl1aW50MTZfdCBzcHJzdGF0X3NpZDsKLQl1aW50MTZf
dCBzcHJzdGF0X3BvbGljeTsKLQl1aW50NjRfdCBzcHJzdGF0X2FiYW5kb25lZF91bnNlbnQ7Ci0J
dWludDY0X3Qgc3Byc3RhdF9hYmFuZG9uZWRfc2VudDsKLX07Ci0KLXN0cnVjdCBzY3RwX2N3bmRf
YXJncyB7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwkvKiBuZXR3b3JrIHRvICovIC8qIEZJWE1F
OiBMUDY0IGlzc3VlICovCi0JdWludDMyX3QgY3duZF9uZXdfdmFsdWU7LyogY3duZCBpbiBrICov
Ci0JdWludDMyX3QgcHNldWRvX2N1bWFjazsKLQl1aW50MTZfdCBpbmZsaWdodDsJLyogZmxpZ2h0
c2l6ZSBpbiBrICovCi0JdWludDE2X3QgY3duZF9hdWdtZW50OwkvKiBpbmNyZW1lbnQgdG8gaXQg
Ki8KLQl1aW50OF90IG1lZXRzX3BzZXVkb19jdW1hY2s7Ci0JdWludDhfdCBuZWVkX25ld19wc2V1
ZG9fY3VtYWNrOwotCXVpbnQ4X3QgY250X2luX3NlbmQ7Ci0JdWludDhfdCBjbnRfaW5fc3RyOwot
fTsKLQotc3RydWN0IHNjdHBfYmxrX2FyZ3MgewotCXVpbnQzMl90IG9uc2I7CQkvKiBpbiAxayBi
eXRlcyAqLwotCXVpbnQzMl90IHNuZGxlbjsJLyogbGVuIG9mIHNlbmQgYmVpbmcgYXR0ZW1wdGVk
ICovCi0JdWludDMyX3QgcGVlcl9yd25kOwkvKiByd25kIG9mIHBlZXIgKi8KLQl1aW50MTZfdCBz
ZW5kX3NlbnRfcWNudDsvKiBjaG5rIGNudCAqLwotCXVpbnQxNl90IHN0cmVhbV9xY250OwkvKiBj
aG5rIGNudCAqLwotCXVpbnQxNl90IGNodW5rc19vbl9vcXVlOy8qIGNodW5rcyBvdXQgKi8KLQl1
aW50MTZfdCBmbGlnaHRfc2l6ZTsgICAvKiBmbGlnaHQgc2l6ZSBpbiBrICovCi19OwotCi0vKgot
ICogTWF4IHdlIGNhbiByZXNldCBpbiBvbmUgc2V0dGluZywgbm90ZSB0aGlzIGlzIGRpY3RhdGVk
IG5vdCBieSB0aGUgZGVmaW5lCi0gKiBidXQgdGhlIHNpemUgb2YgYSBtYnVmIGNsdXN0ZXIgc28g
ZG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5lIGFuZCB0aGluayB5b3UKLSAqIGNhbiBzcGVjaWZ5IG1v
cmUuIFlvdSBtdXN0IGRvIG11bHRpcGxlIHJlc2V0cyBpZiB5b3Ugd2FudCB0byByZXNldCBtb3Jl
Ci0gKiB0aGFuIFNDVFBfTUFYX0VYUExJQ0lUX1NUUl9SRVNFVC4KLSAqLwotI2RlZmluZSBTQ1RQ
X01BWF9FWFBMSUNUX1NUUl9SRVNFVCAgIDEwMDAKLQotc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFt
cyB7Ci0Jc2N0cF9hc3NvY190IHNyc19hc3NvY19pZDsKLQl1aW50MTZfdCBzcnNfZmxhZ3M7Ci0J
dWludDE2X3Qgc3JzX251bWJlcl9zdHJlYW1zOwkvKiAwID09IEFMTCAqLwotCXVpbnQxNl90IHNy
c19zdHJlYW1fbGlzdFtdOy8qIGxpc3QgaWYgc3RycnN0X251bV9zdHJlYW1zIGlzIG5vdCAwICov
Ci19OwotCi1zdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB7Ci0Jc2N0cF9hc3NvY190CXNhc19hc3Nv
Y19pZDsKLQl1aW50MTZfdAlzYXNfaW5zdHJtczsKLQl1aW50MTZfdAlzYXNfb3V0c3RybXM7Ci19
OwotCi1zdHJ1Y3Qgc2N0cF9nZXRfbm9uY2VfdmFsdWVzIHsKLQlzY3RwX2Fzc29jX3QgZ25fYXNz
b2NfaWQ7Ci0JdWludDMyX3QgZ25fcGVlcnNfdGFnOwotCXVpbnQzMl90IGduX2xvY2FsX3RhZzsK
LX07Ci0KLS8qIERlYnVnZ2luZyBsb2dzICovCi1zdHJ1Y3Qgc2N0cF9zdHJfbG9nIHsKLQl2b2lk
ICpzdGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLwotCXVpbnQzMl90IG5fdHNuOwotCXVpbnQz
Ml90IGVfdHNuOwotCXVpbnQxNl90IG5fc3NlcTsKLQl1aW50MTZfdCBlX3NzZXE7Ci0JdWludDE2
X3Qgc3RybTsKLX07Ci0KLXN0cnVjdCBzY3RwX3NiX2xvZyB7Ci0Jdm9pZCAgKnN0Y2I7IC8qIEZJ
WE1FOiBMUDY0IGlzc3VlICovCi0JdWludDMyX3Qgc29fc2JjYzsKLQl1aW50MzJfdCBzdGNiX3Ni
Y2M7Ci0JdWludDMyX3QgaW5jcjsKLX07Ci0KLXN0cnVjdCBzY3RwX2ZyX2xvZyB7Ci0JdWludDMy
X3QgbGFyZ2VzdF90c247Ci0JdWludDMyX3QgbGFyZ2VzdF9uZXdfdHNuOwotCXVpbnQzMl90IHRz
bjsKLX07Ci0KLXN0cnVjdCBzY3RwX2ZyX21hcCB7Ci0JdWludDMyX3QgYmFzZTsKLQl1aW50MzJf
dCBjdW07Ci0JdWludDMyX3QgaGlnaDsKLX07Ci0KLXN0cnVjdCBzY3RwX3J3bmRfbG9nIHsKLQl1
aW50MzJfdCByd25kOwotCXVpbnQzMl90IHNlbmRfc2l6ZTsKLQl1aW50MzJfdCBvdmVyaGVhZDsK
LQl1aW50MzJfdCBuZXdfcnduZDsKLX07Ci0KLXN0cnVjdCBzY3RwX21iY250X2xvZyB7Ci0JdWlu
dDMyX3QgdG90YWxfcXVldWVfc2l6ZTsKLQl1aW50MzJfdCBzaXplX2NoYW5nZTsKLQl1aW50MzJf
dCB0b3RhbF9xdWV1ZV9tYl9zaXplOwotCXVpbnQzMl90IG1iY250X2NoYW5nZTsKLX07Ci0KLXN0
cnVjdCBzY3RwX3NhY2tfbG9nIHsKLQl1aW50MzJfdCBjdW1hY2s7Ci0JdWludDMyX3Qgb2xkY3Vt
YWNrOwotCXVpbnQzMl90IHRzbjsKLQl1aW50MTZfdCBudW1HYXBzOwotCXVpbnQxNl90IG51bUR1
cHM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9sb2NrX2xvZyB7Ci0Jdm9pZCAqc29jazsgIC8qIEZJWE1F
OiBMUDY0IGlzc3VlICovCi0Jdm9pZCAqaW5wOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLwotCXVp
bnQ4X3QgdGNiX2xvY2s7Ci0JdWludDhfdCBpbnBfbG9jazsKLQl1aW50OF90IGluZm9fbG9jazsK
LQl1aW50OF90IHNvY2tfbG9jazsKLQl1aW50OF90IHNvY2tyY3ZidWZfbG9jazsKLQl1aW50OF90
IHNvY2tzbmRidWZfbG9jazsKLQl1aW50OF90IGNyZWF0ZV9sb2NrOwotCXVpbnQ4X3QgcmVzdjsK
LX07Ci0KLXN0cnVjdCBzY3RwX3J0b19sb2cgewotCXZvaWQgKiBuZXQ7IC8qIEZJWE1FOiBMUDY0
IGlzc3VlICovCi0JdWludDMyX3QgcnR0OwotfTsKLQotc3RydWN0IHNjdHBfbmFnbGVfbG9nIHsK
LQl2b2lkICAqc3RjYjsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KLQl1aW50MzJfdCB0b3RhbF9m
bGlnaHQ7Ci0JdWludDMyX3QgdG90YWxfaW5fcXVldWU7Ci0JdWludDE2X3QgY291bnRfaW5fcXVl
dWU7Ci0JdWludDE2X3QgY291bnRfaW5fZmxpZ2h0OwotfTsKLQotc3RydWN0IHNjdHBfc2J3YWtl
X2xvZyB7Ci0Jdm9pZCAqc3RjYjsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KLQl1aW50MTZfdCBz
ZW5kX3E7Ci0JdWludDE2X3Qgc2VudF9xOwotCXVpbnQxNl90IGZsaWdodDsKLQl1aW50MTZfdCB3
YWtlX2NudDsKLQl1aW50OF90IHN0cmVhbV9xY250OwkvKiBjaG5rIGNudCAqLwotCXVpbnQ4X3Qg
Y2h1bmtzX29uX29xdWU7LyogY2h1bmtzIG91dCAqLwotCXVpbnQ4X3Qgc2JmbGFnczsKLQl1aW50
OF90IHNjdHBmbGFnczsKLX07Ci0KLXN0cnVjdCBzY3RwX21pc2NfaW5mbyB7Ci0JdWludDMyX3Qg
bG9nMTsKLQl1aW50MzJfdCBsb2cyOwotCXVpbnQzMl90IGxvZzM7Ci0JdWludDMyX3QgbG9nNDsK
LX07Ci0KLXN0cnVjdCBzY3RwX2xvZ19jbG9zaW5nIHsKLQl2b2lkICppbnA7IC8qIEZJWE1FOiBM
UDY0IGlzc3VlICovCi0Jdm9pZCAqc3RjYjsgIC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0JdWlu
dDMyX3Qgc2N0cF9mbGFnczsKLQl1aW50MTZfdCAgc3RhdGU7Ci0JaW50MTZfdCAgbG9jOwotfTsK
LQotc3RydWN0IHNjdHBfbWJ1Zl9sb2cgewotCXN0cnVjdCBtYnVmICptcDsgLyogRklYTUU6IExQ
NjQgaXNzdWUgKi8KLQljYWRkcl90ICBleHQ7Ci0JY2FkZHJfdCAgZGF0YTsKLQl1aW50MTZfdCBz
aXplOwotCXVpbnQ4X3QgIHJlZmNudDsKLQl1aW50OF90ICBtYnVmX2ZsYWdzOwotfTsKLQotc3Ry
dWN0IHNjdHBfY3duZF9sb2cgewotCXVpbnQ2NF90IHRpbWVfZXZlbnQ7Ci0JdWludDhfdCAgZnJv
bTsKLQl1aW50OF90ICBldmVudF90eXBlOwotCXVpbnQ4X3QgIHJlc3ZbMl07Ci0JdW5pb24gewot
CQlzdHJ1Y3Qgc2N0cF9sb2dfY2xvc2luZyBjbG9zZTsKLQkJc3RydWN0IHNjdHBfYmxrX2FyZ3Mg
YmxrOwotCQlzdHJ1Y3Qgc2N0cF9jd25kX2FyZ3MgY3duZDsKLQkJc3RydWN0IHNjdHBfc3RyX2xv
ZyBzdHJsb2c7Ci0JCXN0cnVjdCBzY3RwX2ZyX2xvZyBmcjsKLQkJc3RydWN0IHNjdHBfZnJfbWFw
IG1hcDsKLQkJc3RydWN0IHNjdHBfcnduZF9sb2cgcnduZDsKLQkJc3RydWN0IHNjdHBfbWJjbnRf
bG9nIG1iY250OwotCQlzdHJ1Y3Qgc2N0cF9zYWNrX2xvZyBzYWNrOwotCQlzdHJ1Y3Qgc2N0cF9s
b2NrX2xvZyBsb2NrOwotCQlzdHJ1Y3Qgc2N0cF9ydG9fbG9nIHJ0bzsKLQkJc3RydWN0IHNjdHBf
c2JfbG9nIHNiOwotCQlzdHJ1Y3Qgc2N0cF9uYWdsZV9sb2cgbmFnbGU7Ci0JCXN0cnVjdCBzY3Rw
X3Nid2FrZV9sb2cgd2FrZTsKLQkJc3RydWN0IHNjdHBfbWJ1Zl9sb2cgbWI7Ci0JCXN0cnVjdCBz
Y3RwX21pc2NfaW5mbyBtaXNjOwotCX0gICAgIHg7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9jd25kX2xv
Z19yZXEgewotCWludDMyX3QgbnVtX2luX2xvZzsJCS8qIE51bWJlciBpbiBsb2cgKi8KLQlpbnQz
Ml90IG51bV9yZXQ7CQkvKiBOdW1iZXIgcmV0dXJuZWQgKi8KLQlpbnQzMl90IHN0YXJ0X2F0OwkJ
Lyogc3RhcnQgYXQgdGhpcyBvbmUgKi8KLQlpbnQzMl90IGVuZF9hdDsJCSAgICAgICAgLyogZW5k
IGF0IHRoaXMgb25lICovCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgbG9nW107Ci19OwotCi1zdHJ1
Y3Qgc2N0cF90aW1ldmFsIHsKLQl1aW50MzJfdCB0dl9zZWM7Ci0JdWludDMyX3QgdHZfdXNlYzsK
LX07Ci0KLXN0cnVjdCBzY3Rwc3RhdCB7Ci0Jc3RydWN0IHNjdHBfdGltZXZhbCBzY3Rwc19kaXNj
b250aW51aXR5dGltZTsgLyogc2N0cFN0YXRzIDE4IChUaW1lU3RhbXApICovCi0JLyogTUlCIGFj
Y29yZGluZyB0byBSRkMgMzg3MyAqLwotCXVpbnQzMl90ICBzY3Rwc19jdXJyZXN0YWI7ICAgICAg
ICAgICAvKiBzY3RwU3RhdHMgIDEgICAoR2F1Z2UzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfYWN0
aXZlZXN0YWI7ICAgICAgICAgLyogc2N0cFN0YXRzICAyIChDb3VudGVyMzIpICovCi0JdWludDMy
X3QgIHNjdHBzX3Jlc3RhcnRlc3RhYjsKLQl1aW50MzJfdCAgc2N0cHNfY29sbGlzaW9uZXN0YWI7
Ci0JdWludDMyX3QgIHNjdHBzX3Bhc3NpdmVlc3RhYjsgICAgICAgIC8qIHNjdHBTdGF0cyAgMyAo
Q291bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19hYm9ydGVkOyAgICAgICAgICAgICAvKiBz
Y3RwU3RhdHMgIDQgKENvdW50ZXIzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2h1dGRvd247ICAg
ICAgICAgICAgLyogc2N0cFN0YXRzICA1IChDb3VudGVyMzIpICovCi0JdWludDMyX3QgIHNjdHBz
X291dG9mdGhlYmx1ZTsgICAgICAgIC8qIHNjdHBTdGF0cyAgNiAoQ291bnRlcjMyKSAqLwotCXVp
bnQzMl90ICBzY3Rwc19jaGVja3N1bWVycm9yczsgICAgICAvKiBzY3RwU3RhdHMgIDcgKENvdW50
ZXIzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfb3V0Y29udHJvbGNodW5rczsgICAgLyogc2N0cFN0
YXRzICA4IChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBzX291dG9yZGVyY2h1bmtzOyAg
ICAgIC8qIHNjdHBTdGF0cyAgOSAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19vdXR1
bm9yZGVyY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgMTAgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJf
dCAgc2N0cHNfaW5jb250cm9sY2h1bmtzOyAgICAgLyogc2N0cFN0YXRzIDExIChDb3VudGVyNjQp
ICovCi0JdWludDMyX3QgIHNjdHBzX2lub3JkZXJjaHVua3M7ICAgICAgIC8qIHNjdHBTdGF0cyAx
MiAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19pbnVub3JkZXJjaHVua3M7ICAgICAv
KiBzY3RwU3RhdHMgMTMgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfZnJhZ3Vzcm1z
Z3M7ICAgICAgICAgLyogc2N0cFN0YXRzIDE0IChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNj
dHBzX3JlYXNtdXNybXNnczsgICAgICAgIC8qIHNjdHBTdGF0cyAxNSAoQ291bnRlcjY0KSAqLwot
CXVpbnQzMl90ICBzY3Rwc19vdXRwYWNrZXRzOyAgICAgICAgICAvKiBzY3RwU3RhdHMgMTYgKENv
dW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5wYWNrZXRzOyAgICAgICAgICAgLyogc2N0
cFN0YXRzIDE3IChDb3VudGVyNjQpICovCi0KLQkvKiBpbnB1dCBzdGF0aXN0aWNzOiAqLwotCXVp
bnQzMl90ICBzY3Rwc19yZWN2cGFja2V0czsgICAgICAgICAvKiB0b3RhbCBpbnB1dCBwYWNrZXRz
ICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0YWdyYW1zOyAgICAgICAvKiB0b3Rh
bCBpbnB1dCBkYXRhZ3JhbXMgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2cGt0d2l0aGRh
dGE7ICAgICAvKiB0b3RhbCBwYWNrZXRzIHRoYXQgaGFkIGRhdGEgKi8KLQl1aW50MzJfdCAgc2N0
cHNfcmVjdnNhY2tzOyAgICAgICAgICAgLyogdG90YWwgaW5wdXQgU0FDSyBjaHVua3MgICAgKi8K
LQl1aW50MzJfdCAgc2N0cHNfcmVjdmRhdGE7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgREFU
QSBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmR1cGRhdGE7ICAgICAgICAgLyog
dG90YWwgaW5wdXQgZHVwbGljYXRlIERBVEEgY2h1bmtzICovCi0JdWludDMyX3QgIHNjdHBzX3Jl
Y3ZoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIGlucHV0IEhCIGNodW5rcyAgICAgICovCi0JdWlu
dDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXRhY2s7ICAgIC8qIHRvdGFsIGlucHV0IEhCLUFDSyBj
aHVua3MgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZlY25lOyAgICAgICAgICAgIC8qIHRvdGFs
IGlucHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRoOyAgICAg
ICAgICAgIC8qIHRvdGFsIGlucHV0IEFVVEggY2h1bmtzICAgICovCi0JdWludDMyX3QgIHNjdHBz
X3JlY3ZhdXRobWlzc2luZzsgICAgIC8qIHRvdGFsIGlucHV0IGNodW5rcyBtaXNzaW5nIEFVVEgg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxobWFjaWQ7ICAgICAgLyogdG90YWwgbnVtYmVy
IG9mIGludmFsaWQgSE1BQyBpZHMgcmVjZWl2ZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdml2
YWxrZXlpZDsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgc2VjcmV0IGlkcyByZWNl
aXZlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2YXV0aGZhaWxlZDsgICAgICAvKiB0b3RhbCBu
dW1iZXIgb2YgYXV0aCBmYWlsZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3M7ICAg
ICAgICAgLyogdG90YWwgZmFzdCBwYXRoIHJlY2VpdmVzIGFsbCBvbmUgY2h1bmsgKi8KLQl1aW50
MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3NtOyAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIG11bHRp
LXBhcnQgZGF0YSAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2bm9jcmM7Ci0JdWludDMyX3QgIHNj
dHBzX3JlY3Zzd2NyYzsKLQl1aW50MzJfdCAgc2N0cHNfcmVjdmh3Y3JjOwotCi0JLyogb3V0cHV0
IHN0YXRpc3RpY3M6ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRwYWNrZXRzOyAgICAgICAgIC8q
IHRvdGFsIG91dHB1dCBwYWNrZXRzICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzYWNr
czsgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBTQUNLcyAgICAgICAgICovCi0JdWludDMyX3Qg
IHNjdHBzX3NlbmRkYXRhOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBEQVRBIGNodW5rcyAg
ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRyZXRyYW5zZGF0YTsgICAgIC8qIHRvdGFsIG91dHB1
dCByZXRyYW5zbWl0dGVkIERBVEEgY2h1bmtzICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRmYXN0
cmV0cmFuczsgICAgIC8qIHRvdGFsIG91dHB1dCBmYXN0IHJldHJhbnNtaXR0ZWQgREFUQSBjaHVu
a3MgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZG11bHRmYXN0cmV0cmFuczsgLyogdG90YWwgRlIn
cyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhhbiBvbmNlCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiB0byBzYW1lIGNodW5rICh1LWRlbCBtdWx0aS1mciBhbGdv
KS4KLQkJCQkJICAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGhlYXJ0YmVhdDsgICAgICAg
LyogdG90YWwgb3V0cHV0IEhCIGNodW5rcyAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGVj
bmU7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMy
X3QgIHNjdHBzX3NlbmRhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBBVVRIIGNodW5r
cyBGSVhNRSAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRlcnJvcnM7CSAgICAgLyogaXBfb3V0
cHV0IGVycm9yIGNvdW50ZXIgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZG5vY3JjOwotCXVpbnQz
Ml90ICBzY3Rwc19zZW5kc3djcmM7Ci0JdWludDMyX3QgIHNjdHBzX3NlbmRod2NyYzsKLQkvKiBQ
Q0tEUk9QUkVQIHN0YXRpc3RpY3M6ICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBmbWJveDsgICAg
ICAgICAgIC8qIFBhY2tldCBkcm9wIGZyb20gbWlkZGxlIGJveCAqLwotCXVpbnQzMl90ICBzY3Rw
c19wZHJwZmVob3M7ICAgICAgICAgICAvKiBQLWRyb3AgZnJvbSBlbmQgaG9zdCAqLwotCXVpbnQz
Ml90ICBzY3Rwc19wZHJwbWJkYTsgICAgICAgICAgICAvKiBQLWRyb3BzIHdpdGggZGF0YSAqLwot
CXVpbnQzMl90ICBzY3Rwc19wZHJwbWJjdDsgICAgICAgICAgICAvKiBQLWRyb3BzLCBub24tZGF0
YSwgbm9uLWVuZGhvc3QgKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGJ3cnB0OyAgICAgICAgICAg
LyogUC1kcm9wLCBub24tZW5kaG9zdCwgYmFuZHdpZHRoIHJlcCBvbmx5ICovCi0JdWludDMyX3Qg
IHNjdHBzX3BkcnBjcnVwdDsgICAgICAgICAgIC8qIFAtZHJvcCwgbm90IGVub3VnaCBmb3IgY2h1
bmsgaGVhZGVyICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBuZWRhdDsgICAgICAgICAgIC8qIFAt
ZHJvcCwgbm90IGVub3VnaCBkYXRhIHRvIGNvbmZpcm0gKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRy
cHBkYnJrOyAgICAgICAgICAgLyogUC1kcm9wLCB3aGVyZSBwcm9jZXNzX2NodW5rX2Ryb3Agc2Fp
ZCBicmVhayAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwdHNubmY7ICAgICAgICAgICAvKiBQLWRy
b3AsIGNvdWxkIG5vdCBmaW5kIFRTTiAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwZG5mbmQ7ICAg
ICAgICAgICAvKiBQLWRyb3AsIGF0dGVtcHQgcmV2ZXJzZSBUU04gbG9va3VwICovCi0JdWludDMy
X3QgIHNjdHBzX3BkcnBkaXducDsgICAgICAgICAgIC8qIFAtZHJvcCwgZS1ob3N0IGNvbmZpcm1z
IHplcm8tcnduZCAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwZGl6cnc7ICAgICAgICAgICAvKiBQ
LWRyb3AsIG1pZGJveCBjb25maXJtcyBubyBzcGFjZSAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJw
YmFkZDsgICAgICAgICAgICAvKiBQLWRyb3AsIGRhdGEgZGlkIG5vdCBtYXRjaCBUU04gKi8KLQl1
aW50MzJfdCAgc2N0cHNfcGRycG1hcms7ICAgICAgICAgICAgLyogUC1kcm9wLCBUU04ncyBtYXJr
ZWQgZm9yIEZhc3QgUmV0cmFuICovCi0JLyogdGltZW91dHMgKi8KLQl1aW50MzJfdCAgc2N0cHNf
dGltb2l0ZXJhdG9yOyAgICAgICAgLyogTnVtYmVyIG9mIGl0ZXJhdG9yIHRpbWVycyB0aGF0IGZp
cmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9kYXRhOyAgICAgICAgICAgIC8qIE51bWJlciBv
ZiBUMyBkYXRhIHRpbWUgb3V0cyAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vd2luZG93cHJvYmU7
ICAgICAvKiBOdW1iZXIgb2Ygd2luZG93IHByb2JlIChUMykgdGltZXJzIHRoYXQgZmlyZWQgKi8K
LQl1aW50MzJfdCAgc2N0cHNfdGltb2luaXQ7ICAgICAgICAgICAgLyogTnVtYmVyIG9mIElOSVQg
dGltZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3NhY2s7ICAgICAgICAg
ICAgLyogTnVtYmVyIG9mIHNhY2sgdGltZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0
cHNfdGltb3NodXRkb3duOyAgICAgICAgLyogTnVtYmVyIG9mIHNodXRkb3duIHRpbWVycyB0aGF0
IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9oZWFydGJlYXQ7ICAgICAgIC8qIE51bWJl
ciBvZiBoZWFydGJlYXQgdGltZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGlt
b2Nvb2tpZTsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgY29va2llIHRpbWVvdXQgZmly
ZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3NlY3JldDsgICAgICAgICAgLyogTnVtYmVyIG9m
IHRpbWVzIGFuIGVuZHBvaW50IGNoYW5nZWQgaXRzIGNvb2tpZSBzZWNyZXQqLwotCXVpbnQzMl90
ICBzY3Rwc190aW1vcGF0aG10dTsgICAgICAgICAvKiBOdW1iZXIgb2YgUE1UVSB0aW1lcnMgdGhh
dCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd25hY2s7ICAgICAvKiBOdW1i
ZXIgb2Ygc2h1dGRvd24gYWNrIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBz
X3RpbW9zaHV0ZG93bmd1YXJkOyAgIC8qIE51bWJlciBvZiBzaHV0ZG93biBndWFyZCB0aW1lcnMg
dGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vc3RybXJzdDsgICAgICAgICAvKiBO
dW1iZXIgb2Ygc3RyZWFtIHJlc2V0IHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNj
dHBzX3RpbW9lYXJseWZyOyAgICAgICAgIC8qIE51bWJlciBvZiBlYXJseSBGUiB0aW1lcnMgdGhh
dCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vYXNjb25mOyAgICAgICAgICAvKiBOdW1i
ZXIgb2YgdGltZXMgYW4gYXNjb25mIHRpbWVyIGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3Rp
bW9kZWxwcmltOwkgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIHByaW1fZGVsZXRlZCB0aW1lciBm
aXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vYXV0b2Nsb3NlOyAgICAgICAvKiBOdW1iZXIg
b2YgdGltZXMgYXV0byBjbG9zZSB0aW1lciBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1v
YXNzb2NraWxsOyAgICAgICAvKiBOdW1iZXIgb2YgYXNvYyBmcmVlIHRpbWVycyBleHBpcmVkICov
Ci0JdWludDMyX3QgIHNjdHBzX3RpbW9pbnBraWxsOyAgICAgICAgIC8qIE51bWJlciBvZiBpbnAg
ZnJlZSB0aW1lcnMgZXhwaXJlZCAqLwotCS8qIGZvcm1lciBlYXJseSBGUiBjb3VudGVycyAqLwot
CXVpbnQzMl90ICBzY3Rwc19zcGFyZVsxMV07Ci0JLyogb3RoZXJzICovCi0JdWludDMyX3QgIHNj
dHBzX2hkcm9wczsJICAgICAgICAgIC8qIHBhY2tldCBzaG9ydGVyIHRoYW4gaGVhZGVyICovCi0J
dWludDMyX3QgIHNjdHBzX2JhZHN1bTsJICAgICAgICAgIC8qIGNoZWNrc3VtIGVycm9yICAgICAg
ICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX25vcG9ydDsgICAgICAgICAgIC8qIG5vIGVuZHBv
aW50IGZvciBwb3J0ICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX2JhZHZ0YWc7ICAgICAgICAg
IC8qIGJhZCB2LXRhZyAgICAgICAgICAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX2JhZHNp
ZDsgICAgICAgICAgIC8qIGJhZCBTSUQgICAgICAgICAgICAgICAgICAgICovCi0JdWludDMyX3Qg
IHNjdHBzX25vbWVtOyAgICAgICAgICAgIC8qIG5vIG1lbW9yeSAgICAgICAgICAgICAgICAgICov
Ci0JdWludDMyX3QgIHNjdHBzX2Zhc3RyZXRyYW5zaW5ydHQ7IC8qIG51bWJlciBvZiBtdWx0aXBs
ZSBGUiBpbiBhIFJUVCB3aW5kb3cgKi8KLQl1aW50MzJfdCAgc2N0cHNfbWFya2VkcmV0cmFuczsK
LQl1aW50MzJfdCAgc2N0cHNfbmFnbGVzZW50OyAgICAgICAgLyogbmFnbGUgYWxsb3dlZCBzZW5k
aW5nICAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfbmFnbGVxdWV1ZWQ7ICAgICAgLyogbmFnbGUg
ZG9lc24ndCBhbGxvdyBzZW5kaW5nICovCi0JdWludDMyX3QgIHNjdHBzX21heGJ1cnN0cXVldWVk
OyAgIC8qIG1heCBidXJzdCBkb2Vzbid0IGFsbG93IHNlbmRpbmcgKi8KLQl1aW50MzJfdCAgc2N0
cHNfaWZub21lbXF1ZXVlZDsgICAgLyogbG9vayBhaGVhZCB0ZWxscyB1cyBubyBtZW1vcnkgaW4K
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmZhY2Ugcmlu
ZyBidWZmZXIgT1Igd2UgaGFkIGEKLQkJCQkJICogc2VuZCBlcnJvciBhbmQgYXJlIHF1ZXVpbmcg
b25lIHNlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0J
dWludDMyX3QgIHNjdHBzX3dpbmRvd3Byb2JlZDsgICAgIC8qIHRvdGFsIG51bWJlciBvZiB3aW5k
b3cgcHJvYmVzIHNlbnQgKi8KLQl1aW50MzJfdCAgc2N0cHNfbG93bGV2ZWxlcnI7CS8qIHRvdGFs
IHRpbWVzIGFuIG91dHB1dCBlcnJvciBjYXVzZXMgdXMKLQkJCQkJICogdG8gY2xhbXAgZG93biBv
biBuZXh0IHVzZXIgc2VuZC4KLQkJCQkJICovCi0JdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJy
dXNyOwkvKiB0b3RhbCB0aW1lcyBzY3RwX3NlbmRlcnJvcnMgd2VyZSBjYXVzZWQgZnJvbQotCQkJ
CQkgKiBhIHVzZXIgc2VuZCBmcm9tIGEgdXNlciBpbnZva2VkIHNlbmQgbm90Ci0JCQkJCSAqIGEg
c2FjayByZXNwb25zZQotCQkJCQkgKi8KLQl1aW50MzJfdCAgc2N0cHNfZGF0YWRyb3BjaGtsbXQ7
CS8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byBjaHVuayBsaW1pdCByZWFjaGVkICov
Ci0JdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wcnduZDsJLyogTnVtYmVyIG9mIGluIGRhdGEgZHJv
cHMgZHVlIHRvIHJ3bmQgbGltaXQgcmVhY2hlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19lY25lcmVk
dWNlZGN3bmQ7ICAvKiBOdW1iZXIgb2YgdGltZXMgYSBFQ04gcmVkdWNlZCB0aGUgY3duZCAqLwot
CXVpbnQzMl90ICBzY3Rwc192dGFnZXhwcmVzczsJLyogVXNlZCBleHByZXNzIGxvb2t1cCB2aWEg
dnRhZyAqLwotCXVpbnQzMl90ICBzY3Rwc192dGFnYm9ndXM7CS8qIENvbGxpc2lvbiBpbiBleHBy
ZXNzIGxvb2t1cC4gKi8KLQl1aW50MzJfdCAgc2N0cHNfcHJpbWFyeV9yYW5kcnk7CS8qIE51bWJl
ciBvZiB0aW1lcyB0aGUgc2VuZGVyIHJhbiBkcnkgb2YgdXNlciBkYXRhIG9uIHByaW1hcnkgKi8K
LQl1aW50MzJfdCAgc2N0cHNfY210X3JhbmRyeTsgICAgICAgLyogU2FtZSBmb3IgYWJvdmUgKi8K
LQl1aW50MzJfdCAgc2N0cHNfc2xvd3BhdGhfc2FjazsgICAgLyogU2Fja3MgdGhlIHNsb3cgd2F5
ICovCi0JdWludDMyX3QgIHNjdHBzX3d1X3NhY2tzX3NlbnQ7CS8qIFdpbmRvdyBVcGRhdGUgb25s
eSBzYWNrcyBzZW50ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfZmxhZ3M7IC8qIG51
bWJlciBvZiBzZW5kcyB3aXRoIHNpbmZvX2ZsYWdzICE9MCAqLwotCXVpbnQzMl90ICBzY3Rwc19z
ZW5kc193aXRoX3Vub3JkOyAvKiBudW1iZXIgb2YgdW5vcmRlcmVkIHNlbmRzICovCi0JdWludDMy
X3QgIHNjdHBzX3NlbmRzX3dpdGhfZW9mOyAJLyogbnVtYmVyIG9mIHNlbmRzIHdpdGggRU9GIGZs
YWcgc2V0ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfYWJvcnQ7IC8qIG51bWJlciBv
ZiBzZW5kcyB3aXRoIEFCT1JUIGZsYWcgc2V0ICovCi0JdWludDMyX3QgIHNjdHBzX3Byb3RvY29s
X2RyYWluX2NhbGxzOwkvKiBudW1iZXIgb2YgdGltZXMgcHJvdG9jb2wgZHJhaW4gY2FsbGVkICov
Ci0JdWludDMyX3QgIHNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lOyAJLyogbnVtYmVyIG9mIHRp
bWVzIHdlIGRpZCBhIHByb3RvY29sIGRyYWluICovCi0JdWludDMyX3QgIHNjdHBzX3JlYWRfcGVl
a3M7CS8qIE51bWJlciBvZiB0aW1lcyByZWN2IHdhcyBjYWxsZWQgd2l0aCBwZWVrICovCi0JdWlu
dDMyX3QgIHNjdHBzX2NhY2hlZF9jaGs7ICAgICAgIC8qIE51bWJlciBvZiBjYWNoZWQgY2h1bmtz
IHVzZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfY2FjaGVkX3N0cm1vcTsgICAgLyogTnVtYmVyIG9m
IGNhY2hlZCBzdHJlYW0gb3EncyB1c2VkICovCi0JdWludDMyX3QgIHNjdHBzX2xlZnRfYWJhbmRv
bjsgICAgIC8qIE51bWJlciBvZiB1bnJlYWQgbWVzc2FnZXMgYWJhbmRvbmVkIGJ5IGNsb3NlICov
Ci0JdWludDMyX3QgIHNjdHBzX3NlbmRfYnVyc3RfYXZvaWQ7IC8qIFVudXNlZCAqLwotCXVpbnQz
Ml90ICBzY3Rwc19zZW5kX2N3bmRfYXZvaWQ7ICAvKiBTZW5kIGN3bmQgZnVsbCAgYXZvaWRhbmNl
LCBhbHJlYWR5IG1heCBidXJzdCBpbmZsaWdodCB0byBuZXQgKi8KLQl1aW50MzJfdCAgc2N0cHNf
ZndkdHNuX21hcF9vdmVyOyAgLyogbnVtYmVyIG9mIG1hcCBhcnJheSBvdmVyLXJ1bnMgdmlhIGZ3
ZC10c24ncyAqLwotCXVpbnQzMl90ICBzY3Rwc19xdWV1ZV91cGRfZWNuZTsgIC8qIE51bWJlciBv
ZiB0aW1lcyB3ZSBxdWV1ZWQgb3IgdXBkYXRlZCBhbiBFQ04gY2h1bmsgb24gc2VuZCBxdWV1ZSAq
LwotCXVpbnQzMl90ICBzY3Rwc19yZXNlcnZlZFszMV07ICAgICAvKiBGdXR1cmUgQUJJIGNvbXBh
dCAtIHJlbW92ZSBpbnQncyBmcm9tIGhlcmUgd2hlbiBhZGRpbmcgbmV3ICovCi19OwotCi0jZGVm
aW5lIFNDVFBfU1RBVF9JTkNSKF94KSBTQ1RQX1NUQVRfSU5DUl9CWShfeCwxKQotI2RlZmluZSBT
Q1RQX1NUQVRfREVDUihfeCkgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsMSkKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RB
VCkKLSNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfQlkoX3gsX2QpIChTQ1RQX0JBU0VfU1RBVFNbUENQ
VV9HRVQoY3B1aWQpXS5feCArPSBfZCkKLSNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsX2Qp
IChTQ1RQX0JBU0VfU1RBVFNbUENQVV9HRVQoY3B1aWQpXS5feCAtPSBfZCkKLSNlbHNlCi0jZGVm
aW5lIFNDVFBfU1RBVF9JTkNSX0JZKF94LF9kKSBhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX1NU
QVQoX3gpLCBfZCkKLSNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsX2QpIGF0b21pY19zdWJ0
cmFjdF9pbnQoJlNDVFBfQkFTRV9TVEFUKF94KSwgX2QpCi0jZW5kaWYKLS8qIFRoZSBmb2xsb3dp
bmcgbWFjcm9zIGFyZSBmb3IgaGFuZGxpbmcgTUlCIHZhbHVlcywgKi8KLSNkZWZpbmUgU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjMyKF94KSBTQ1RQX1NUQVRfSU5DUihfeCkKLSNkZWZpbmUgU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KF94KSBTQ1RQX1NUQVRfSU5DUihfeCkKLSNkZWZpbmUgU0NUUF9T
VEFUX0lOQ1JfR0FVR0UzMihfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCi0jZGVmaW5lIFNDVFBfU1RB
VF9ERUNSX0NPVU5URVIzMihfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCi0jZGVmaW5lIFNDVFBfU1RB
VF9ERUNSX0NPVU5URVI2NChfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCi0jZGVmaW5lIFNDVFBfU1RB
VF9ERUNSX0dBVUdFMzIoX3gpIFNDVFBfU1RBVF9ERUNSKF94KQotCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotdW5pb24gc2N0cF9zb2Nrc3RvcmUgewotI2lmIGRlZmluZWQoSU5FVCkKLQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29u
bjsKLQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotI2Vsc2UKLXVuaW9uIHNjdHBfc29ja3N0b3Jl
IHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsK
LQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotI2VuZGlmCi0KLQotLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotLyogQW5kIHNvbWV0aGluZyBmb3IgdXMgb2xkIHRpbWVycyAq
LwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0jaWZuZGVmIF9fQVBQ
TEVfXwotI2lmbmRlZiBfX1VzZXJzcGFjZV9fCi0jaWZuZGVmIG50b2hsbAotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfTGludXgpCi0jaWZuZGVmIF9CU0RfU09VUkNFCi0jZGVmaW5lIF9CU0Rf
U09VUkNFCi0jZW5kaWYKLSNpbmNsdWRlIDxlbmRpYW4uaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3lz
L2VuZGlhbi5oPgotI2VuZGlmCi0jZGVmaW5lIG50b2hsbCh4KSBiZTY0dG9oKHgpCi0jZW5kaWYK
LQotI2lmbmRlZiBodG9ubGwKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2lm
bmRlZiBfQlNEX1NPVVJDRQotI2RlZmluZSBfQlNEX1NPVVJDRQotI2VuZGlmCi0jaW5jbHVkZSA8
ZW5kaWFuLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KLSNlbmRpZgotI2RlZmlu
ZSBodG9ubGwoeCkgaHRvYmU2NCh4KQotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXN0cnVjdCB4c2N0cF9pbnBjYiB7Ci0J
dWludDMyX3QgbGFzdDsKLQl1aW50MzJfdCBmbGFnczsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDAwNDgKLQl1aW50MzJfdCBmZWF0dXJlczsKLSNl
bHNlCi0JdWludDY0X3QgZmVhdHVyZXM7Ci0jZW5kaWYKLQl1aW50MzJfdCB0b3RhbF9zZW5kczsK
LQl1aW50MzJfdCB0b3RhbF9yZWN2czsKLQl1aW50MzJfdCB0b3RhbF9ub3NwYWNlczsKLQl1aW50
MzJfdCBmcmFnbWVudGF0aW9uX3BvaW50OwotCXVpbnQxNl90IGxvY2FsX3BvcnQ7Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Ci0JdWludDE2
X3QgcWxlbl9vbGQ7Ci0JdWludDE2X3QgbWF4cWxlbl9vbGQ7Ci0jZWxzZQotCXVpbnQxNl90IHFs
ZW47Ci0JdWludDE2X3QgbWF4cWxlbjsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19XaW5kb3dzX18p
Ci0JdWludDE2X3QgcGFkZGluZzsKLSNlbmRpZgotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMTUxNykpCi0Jdm9pZCAqc29ja2V0OwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2
Ci0JdWludDMyX3QgcWxlbjsKLQl1aW50MzJfdCBtYXhxbGVuOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMDAwMDQ4Ci0JdWludDMyX3Qg
ZXh0cmFfcGFkZGluZ1szMl07IC8qIGZ1dHVyZSAqLwotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMTUxNykKLQl1aW50MzJfdCBleHRyYV9wYWRk
aW5nWzMxXTsgLyogZnV0dXJlICovCi0jZWxzZQotI2lmIGRlZmluZWQoX19MUDY0X18pCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Ci0JdWlu
dDMyX3QgZXh0cmFfcGFkZGluZ1syN107IC8qIGZ1dHVyZSAqLwotI2Vsc2UKLQl1aW50MzJfdCBl
eHRyYV9wYWRkaW5nWzI5XTsgLyogZnV0dXJlICovCi0jZW5kaWYKLSNlbHNlCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Ci0JdWludDMyX3Qg
ZXh0cmFfcGFkZGluZ1syOF07IC8qIGZ1dHVyZSAqLwotI2Vsc2UKLQl1aW50MzJfdCBleHRyYV9w
YWRkaW5nWzMwXTsgLyogZnV0dXJlICovCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi19OwotCi1z
dHJ1Y3QgeHNjdHBfdGNiIHsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBwcmltYXJ5X2FkZHI7ICAg
ICAgLyogc2N0cEFzc29jRW50cnkgNS82ICovCi0JdWludDMyX3QgbGFzdDsKLQl1aW50MzJfdCBo
ZWFydGJlYXRfaW50ZXJ2YWw7ICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgNyAgICovCi0J
dWludDMyX3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5
IDggICAqLwotCXVpbnQzMl90IGluX3N0cmVhbXM7ICAgICAgICAgICAgICAgICAgICAvKiBzY3Rw
QXNzb2NFbnRyeSA5ICAgKi8KLQl1aW50MzJfdCBvdXRfc3RyZWFtczsgICAgICAgICAgICAgICAg
ICAgLyogc2N0cEFzc29jRW50cnkgMTAgICovCi0JdWludDMyX3QgbWF4X25yX3JldHJhbnM7ICAg
ICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDExICAqLwotCXVpbnQzMl90IHByaW1hcnlf
cHJvY2VzczsgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxMiAgKi8KLQl1aW50MzJf
dCBUMV9leHBpcmVyaWVzOyAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTMgICov
Ci0JdWludDMyX3QgVDJfZXhwaXJlcmllczsgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0Vu
dHJ5IDE0ICAqLwotCXVpbnQzMl90IHJldHJhbnNtaXR0ZWRfdHNuczsgICAgICAgICAgICAvKiBz
Y3RwQXNzb2NFbnRyeSAxNSAgKi8KLQl1aW50MzJfdCB0b3RhbF9zZW5kczsKLQl1aW50MzJfdCB0
b3RhbF9yZWN2czsKLQl1aW50MzJfdCBsb2NhbF90YWc7Ci0JdWludDMyX3QgcmVtb3RlX3RhZzsK
LQl1aW50MzJfdCBpbml0aWFsX3RzbjsKLQl1aW50MzJfdCBoaWdoZXN0X3RzbjsKLQl1aW50MzJf
dCBjdW11bGF0aXZlX3RzbjsKLQl1aW50MzJfdCBjdW11bGF0aXZlX3Rzbl9hY2s7Ci0JdWludDMy
X3QgbXR1OwotCXVpbnQzMl90IHJlZmNudDsKLQl1aW50MTZfdCBsb2NhbF9wb3J0OyAgICAgICAg
ICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMyAgICovCi0JdWludDE2X3QgcmVtb3RlX3Bv
cnQ7ICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDQgICAqLwotCXN0cnVjdCBz
Y3RwX3RpbWV2YWwgc3RhcnRfdGltZTsgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxNiAgKi8K
LQlzdHJ1Y3Qgc2N0cF90aW1ldmFsIGRpc2NvbnRpbnVpdHlfdGltZTsgLyogc2N0cEFzc29jRW50
cnkgMTcgICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDAwMDAKLQl1aW50MzJfdCBwZWVyc19yd25kOwotCXNjdHBfYXNzb2NfdCBhc3NvY19p
ZDsgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxICAgKi8KLQl1aW50MzJfdCBl
eHRyYV9wYWRkaW5nWzMyXTsgICAgICAgICAgICAgIC8qIGZ1dHVyZSAqLwotI2Vsc2UKLSNlbmRp
ZgotI2Vsc2UKLQl1aW50MzJfdCBwZWVyc19yd25kOwotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsg
ICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxICAgKi8KLQl1aW50MzJfdCBleHRy
YV9wYWRkaW5nWzMyXTsgICAgICAgICAgICAgIC8qIGZ1dHVyZSAqLwotI2VuZGlmCi19OwotCi1z
dHJ1Y3QgeHNjdHBfbGFkZHIgewotCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHJlc3M7ICAgIC8q
IHNjdHBBc3NvY0xvY2FsQWRkckVudHJ5IDEvMiAqLwotCXVpbnQzMl90IGxhc3Q7Ci0Jc3RydWN0
IHNjdHBfdGltZXZhbCBzdGFydF90aW1lOyAgLyogc2N0cEFzc29jTG9jYWxBZGRyRW50cnkgMyAg
ICovCi0JdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMl07ICAgICAgIC8qIGZ1dHVyZSAqLwotfTsK
LQotc3RydWN0IHhzY3RwX3JhZGRyIHsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyZXNzOyAg
ICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50cnkgMS8yICovCi0JdWludDMyX3QgbGFzdDsKLQl1
aW50MzJfdCBydG87ICAgICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50
cnkgNSAgICovCi0JdWludDMyX3QgbWF4X3BhdGhfcnR4OyAgICAgICAgICAgICAvKiBzY3RwQXNz
b2NMb2NhbFJlbUVudHJ5IDYgICAqLwotCXVpbnQzMl90IHJ0eDsgICAgICAgICAgICAgICAgICAg
ICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA3ICAgKi8KLQl1aW50MzJfdCBlcnJvcl9jb3Vu
dGVyOyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDMy
X3QgY3duZDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLwotCXVpbnQzMl90IGZsaWdodF9zaXplOyAgICAgICAgICAgICAgLyogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KLQl1aW50MzJfdCBtdHU7ICAgICAgICAgICAgICAgICAgICAgIC8q
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDhfdCBhY3RpdmU7ICAgICAgICAg
ICAgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDMgICAqLwotCXVpbnQ4X3QgY29u
ZmlybWVkOyAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
LQl1aW50OF90IGhlYXJ0YmVhdF9lbmFibGVkOyAgICAgICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVt
RW50cnkgNCAgICovCi0JdWludDhfdCBwb3RlbnRpYWxseV9mYWlsZWQ7Ci0Jc3RydWN0IHNjdHBf
dGltZXZhbCBzdGFydF90aW1lOyAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDggICAqLwot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAw
Ci0JdWludDMyX3QgcnR0OwotCXVpbnQzMl90IGhlYXJ0YmVhdF9pbnRlcnZhbDsKLQl1aW50MzJf
dCBzc3RocmVzaDsKLQl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzMwXTsgICAgICAgICAgICAgIC8q
IGZ1dHVyZSAqLwotI2VuZGlmCi0jZWxzZQotCXVpbnQzMl90IHJ0dDsKLQl1aW50MzJfdCBoZWFy
dGJlYXRfaW50ZXJ2YWw7Ci0JdWludDMyX3Qgc3N0aHJlc2g7Ci0JdWludDMyX3QgZXh0cmFfcGFk
ZGluZ1szMF07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KLSNlbmRpZgotfTsKLQotI2RlZmlu
ZSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUgMzAwMDAKLSNkZWZpbmUgU0NUUF9UUkFDRV9QQVJBTVMg
NiAgICAgICAgICAgICAgICAvKiBUaGlzIG51bWJlciBNVVNUIGJlIGV2ZW4gICAqLwotCi1zdHJ1
Y3Qgc2N0cF9sb2dfZW50cnkgewotCXVpbnQ2NF90IHRpbWVzdGFtcDsKLQl1aW50MzJfdCBzdWJz
eXM7Ci0JdWludDMyX3QgcGFkZGluZzsKLQl1aW50MzJfdCBwYXJhbXNbU0NUUF9UUkFDRV9QQVJB
TVNdOwotfTsKLQotc3RydWN0IHNjdHBfbG9nIHsKLQlzdHJ1Y3Qgc2N0cF9sb2dfZW50cnkgZW50
cnlbU0NUUF9NQVhfTE9HR0lOR19TSVpFXTsKLQl1aW50MzJfdCBpbmRleDsKLQl1aW50MzJfdCBw
YWRkaW5nOwotfTsKLQotLyoKLSAqIEtlcm5lbCBkZWZpbmVkIGZvciBzY3RwX3NlbmQKLSAqLwot
I2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3Rw
X2xvd2VyX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsCi0gICAgc3RydWN0IHVpbyAqdWlvLAotI2lmIGRlZmluZWQoX19QYW5kYV9fKQotICAgIHBh
a2hhbmRsZV90eXBlIGlfcGFrLAotICAgIHBha2hhbmRsZV90eXBlIGlfY29udHJvbCwKLSNlbHNl
Ci0gICAgc3RydWN0IG1idWYgKmlfcGFrLAotICAgIHN0cnVjdCBtYnVmICpjb250cm9sLAotI2Vu
ZGlmCi0gICAgaW50IGZsYWdzLAotICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNyY3YKLSNp
ZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotICAgICxz
dHJ1Y3QgdGhyZWFkICpwCi0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotICAgICwgUEtUSFJF
QUQgcAotI2Vsc2UKLSAgICAsc3RydWN0IHByb2MgKnAKLSNlbmRpZgotI2VuZGlmCi0pOwotCi1p
bnQKLXNjdHBfc29yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvLAotICAgIHN0cnVjdCB1aW8gKnVp
bywKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSAgICBwYXJ0aWNsZXR5cGUgKiptcCwKLSNlbHNl
Ci0gICAgc3RydWN0IG1idWYgKiptcCwKLSNlbmRpZgotICAgIHN0cnVjdCBzb2NrYWRkciAqZnJv
bSwKLSAgICBpbnQgZnJvbWxlbiwKLSAgICBpbnQgKm1zZ19mbGFncywKLSAgICBzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvICpzaW5mbywKLSAgICBpbnQgZmlsbGluZ19zaW5mbyk7Ci0jZW5kaWYKLQot
LyoKLSAqIEFQSSBzeXN0ZW0gY2FsbHMKLSAqLwotI2lmICEoZGVmaW5lZChfS0VSTkVMKSkgJiYg
IShkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCi1fX0JFR0lOX0RFQ0xTCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKLWludAlzY3RwX3BlZWxv
ZmYgX19QKChpbnQsIHNjdHBfYXNzb2NfdCkpOwotaW50CXNjdHBfYmluZHggX19QKChpbnQsIHN0
cnVjdCBzb2NrYWRkciAqLCBpbnQsIGludCkpOwotaW50CXNjdHBfY29ubmVjdHggX19QKChpbnQs
IGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHNjdHBfYXNzb2NfdCAqKSk7Ci1pbnQJc2N0
cF9nZXRhZGRybGVuIF9fUCgoc2FfZmFtaWx5X3QpKTsKLWludAlzY3RwX2dldHBhZGRycyBfX1Ao
KGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopKTsKLXZvaWQJc2N0cF9mcmVl
cGFkZHJzIF9fUCgoc3RydWN0IHNvY2thZGRyICopKTsKLWludAlzY3RwX2dldGxhZGRycyBfX1Ao
KGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopKTsKLXZvaWQJc2N0cF9mcmVl
bGFkZHJzIF9fUCgoc3RydWN0IHNvY2thZGRyICopKTsKLWludAlzY3RwX29wdF9pbmZvIF9fUCgo
aW50LCBzY3RwX2Fzc29jX3QsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKikpOwotCi0vKiBkZXBy
ZWNhdGVkICovCi1zc2l6ZV90CXNjdHBfc2VuZG1zZyBfX1AoKGludCwgY29uc3Qgdm9pZCAqLCBz
aXplX3QsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QsIHVpbnQzMl90
LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50MzJfdCkpOwotCi0vKiBkZXByZWNh
dGVkICovCi1zc2l6ZV90CXNjdHBfc2VuZCBfX1AoKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3Qs
Ci0JICAgIGNvbnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50KSk7Ci0KLS8qIGRlcHJl
Y2F0ZWQgKi8KLXNzaXplX3QJc2N0cF9zZW5keCBfX1AoKGludCwgY29uc3Qgdm9pZCAqLCBzaXpl
X3QsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBpbnQsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8g
KiwgaW50KSk7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0cF9zZW5kbXNneCBfX1Ao
KGludCBzZCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBp
bnQsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50MzJfdCkpOwot
Ci1zY3RwX2Fzc29jX3QJc2N0cF9nZXRhc3NvY2lkIF9fUCgoaW50LCBzdHJ1Y3Qgc29ja2FkZHIg
KikpOwotCi0vKiBkZXByZWNhdGVkICovCi1zc2l6ZV90CXNjdHBfcmVjdm1zZyBfX1AoKGludCwg
dm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKiwKLQkgICAgc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbyAqLCBpbnQgKikpOwotCi1zc2l6ZV90CXNjdHBfc2VuZHYgX19Q
KChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAg
ICBpbnQsIHZvaWQgKiwgc29ja2xlbl90LCB1bnNpZ25lZCBpbnQsIGludCkpOwotCi1zc2l6ZV90
CXNjdHBfcmVjdnYgX19QKChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVjdCBz
b2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QgKiwgdm9pZCAqLCBzb2NrbGVuX3QgKiwgdW5zaWdu
ZWQgaW50ICosIGludCAqKSk7Ci0jZWxzZQotaW50CXNjdHBfcGVlbG9mZihpbnQsIHNjdHBfYXNz
b2NfdCk7Ci1pbnQJc2N0cF9iaW5keChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIGludCk7
Ci1pbnQJc2N0cF9jb25uZWN0eChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHNj
dHBfYXNzb2NfdCAqKTsKLWludAlzY3RwX2dldGFkZHJsZW4oc2FfZmFtaWx5X3QpOwotaW50CXNj
dHBfZ2V0cGFkZHJzKGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopOwotdm9p
ZAlzY3RwX2ZyZWVwYWRkcnMoc3RydWN0IHNvY2thZGRyICopOwotaW50CXNjdHBfZ2V0bGFkZHJz
KGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopOwotdm9pZAlzY3RwX2ZyZWVs
YWRkcnMoc3RydWN0IHNvY2thZGRyICopOwotaW50CXNjdHBfb3B0X2luZm8oaW50LCBzY3RwX2Fz
c29jX3QsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNz
aXplX3QJc2N0cF9zZW5kbXNnKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IHN0cnVj
dCBzb2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2
X3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0
cF9zZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsCi0JICAgIGNvbnN0IHN0cnVjdCBzY3Rw
X3NuZHJjdmluZm8gKiwgaW50KTsKLQotLyogZGVwcmVjYXRlZCAqLwotc3NpemVfdAlzY3RwX3Nl
bmR4KGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBp
bnQsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50KTsKLQotLyogZGVwcmVjYXRlZCAqLwot
c3NpemVfdAlzY3RwX3NlbmRtc2d4KGludCBzZCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVj
dCBzb2NrYWRkciAqLAotCSAgICBpbnQsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVp
bnQzMl90LCB1aW50MzJfdCk7Ci0KLXNjdHBfYXNzb2NfdAlzY3RwX2dldGFzc29jaWQoaW50LCBz
dHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0cF9yZWN2
bXNnKGludCwgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKiwK
LQkgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqLCBpbnQgKik7Ci0KLXNzaXplX3QJc2N0cF9z
ZW5kdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAot
CSAgICBpbnQsIHZvaWQgKiwgc29ja2xlbl90LCB1bnNpZ25lZCBpbnQsIGludCk7Ci0KLXNzaXpl
X3QJc2N0cF9yZWN2dihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVjdCBzb2Nr
YWRkciAqLAotCSAgICBzb2NrbGVuX3QgKiwgdm9pZCAqLCBzb2NrbGVuX3QgKiwgdW5zaWduZWQg
aW50ICosIGludCAqKTsKLSNlbmRpZgotX19FTkRfREVDTFMKLQotI2VuZGlmCQkJCS8qICFfS0VS
TkVMICovCi0jZW5kaWYJCQkJLyogIV9fc2N0cF91aW9faF9fICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNl
cnNwYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZmY2MwOGQxNmQzMzdkOTll
MTJiNDU3N2IyYTA4YjI3NTM0YmFiNjEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzZXJzcGFjZS5jCisrKyAvZGV2
L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIg
SXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhl
bgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
Ci0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotCi0jaWZkZWYgX1dJTjMyCi0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPHN5cy90aW1lYi5oPgotI2luY2x1
ZGUgPGlwaGxwYXBpLmg+Ci0jcHJhZ21hIGNvbW1lbnQobGliLCAiSVBITFBBUEkubGliIikKLSNl
bmRpZgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaD4KLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0jaW5jbHVkZSA8cHRocmVhZF9ucC5oPgotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2luY2x1ZGUgPHN5cy9wcmN0
bC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0vKiBB
ZGFwdGVyIHRvIHRyYW5zbGF0ZSBVbml4IHRocmVhZCBzdGFydCByb3V0aW5lcyB0byBXaW5kb3dz
IHRocmVhZCBzdGFydAotICogcm91dGluZXMuCi0gKi8KLXN0YXRpYyBEV09SRCBXSU5BUEkKLXNj
dHBfY3JlYXRlX3RocmVhZF9hZGFwdGVyKHZvaWQgKmFyZykgewotCXN0YXJ0X3JvdXRpbmVfdCBz
dGFydF9yb3V0aW5lID0gKHN0YXJ0X3JvdXRpbmVfdClhcmc7Ci0JcmV0dXJuIHN0YXJ0X3JvdXRp
bmUoTlVMTCkgPT0gTlVMTDsKLX0KLQotaW50Ci1zY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRl
KHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0aW5l
KQotewotCSp0aHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgc2N0cF9jcmVhdGVfdGhyZWFk
X2FkYXB0ZXIsCi0JCQkgICAgICAgKHZvaWQgKilzdGFydF9yb3V0aW5lLCAwLCBOVUxMKTsKLQlp
ZiAoKnRocmVhZCA9PSBOVUxMKQotCQlyZXR1cm4gR2V0TGFzdEVycm9yKCk7Ci0JcmV0dXJuIDA7
Ci19Ci0jZWxzZQotaW50Ci1zY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKHVzZXJsYW5kX3Ro
cmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0aW5lKQotewotCXJldHVy
biBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQsIE5VTEwsIHN0YXJ0X3JvdXRpbmUsIE5VTEwpOwotfQot
I2VuZGlmCi0KLXZvaWQKLXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRuYW1lKGNvbnN0IGNoYXIg
Km5hbWUpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCi0JcHRocmVhZF9z
ZXRuYW1lX25wKG5hbWUpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51
eCkKLQlwcmN0bChQUl9TRVRfTkFNRSwgbmFtZSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0ZyZWVCU0QpCi0JcHRocmVhZF9zZXRfbmFtZV9ucChwdGhyZWFkX3NlbGYoKSwg
bmFtZSk7Ci0jZW5kaWYKLX0KLQotI2lmICFkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfTmFDbCkKLWludAotc2N0cF91c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbih1
aW50MzJfdCBpZl9pbmRleCwgaW50IGFmKQotewotCXN0cnVjdCBpZnJlcSBpZnI7Ci0JaW50IGZk
OwotCi0JbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsKLQlpZiAoaWZfaW5k
ZXh0b25hbWUoaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkgIT0gTlVMTCkgewotCQkvKiBUT0RPIGNh
biBJIHVzZSB0aGUgcmF3IHNvY2tldCBoZXJlIGFuZCBub3QgaGF2ZSB0byBvcGVuIGEgbmV3IG9u
ZSB3aXRoIGVhY2ggcXVlcnk/ICovCi0JCWlmICgoZmQgPSBzb2NrZXQoYWYsIFNPQ0tfREdSQU0s
IDApKSA8IDApCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoaW9jdGwoZmQsIFNJT0NHSUZNVFUsICZp
ZnIpIDwgMCkgewotCQkJY2xvc2UoZmQpOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQljbG9zZShm
ZCk7Ci0JCXJldHVybiBpZnIuaWZyX210dTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0K
LX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQotaW50Ci1zY3Rw
X3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCi17
Ci0JcmV0dXJuIDEyODA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4zMgotaW50Ci1zY3RwX3Vz
ZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCi17Ci0J
UElQX0FEQVBURVJfQUREUkVTU0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFwdDsKLQlEV09SRCBBZGFw
dGVyQWRkcnNTaXplLCBFcnI7Ci0JaW50IHJldDsKLQotCXJldCA9IDA7Ci0JQWRhcHRlckFkZHJz
U2l6ZSA9IDA7Ci0JcEFkYXB0ZXJBZGRycyA9IE5VTEw7Ci0JaWYgKChFcnIgPSBHZXRBZGFwdGVy
c0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIE5VTEwsICZBZGFwdGVyQWRkcnNTaXplKSkg
IT0gMCkgewotCQlpZiAoKEVyciAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpICYmIChFcnIgIT0g
RVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1Is
ICJHZXRBZGFwdGVyc0FkZHJlc3NlcygpIHNpemluZyBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVk
LCBBZGFwdGVyQWRkcnNTaXplID0gJWRcbiIsIEVyciwgQWRhcHRlckFkZHJzU2l6ZSk7Ci0JCQly
ZXQgPSAtMTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCX0KLQlpZiAoKHBBZGFwdGVyQWRkcnMg
PSAoUElQX0FEQVBURVJfQUREUkVTU0VTKSBHbG9iYWxBbGxvYyhHUFRSLCBBZGFwdGVyQWRkcnNT
aXplKSkgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiTWVtb3J5IGFsbG9j
YXRpb24gZXJyb3IhXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gY2xlYW51cDsKLQl9Ci0JaWYg
KChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIHBBZGFwdGVy
QWRkcnMsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VTUykgewotCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSBmYWlsZWQgd2l0aCBlcnJv
ciBjb2RlICVkXG4iLCBFcnIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBjbGVhbnVwOwotCX0KLQlm
b3IgKHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0
KSB7Ci0JCWlmIChwQWRhcHQtPklmSW5kZXggPT0gaWZfaW5kZXgpIHsKLQkJCXJldCA9IHBBZGFw
dC0+TXR1OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci1jbGVhbnVwOgotCWlmIChwQWRhcHRlckFkZHJz
ICE9IE5VTEwpIHsKLQkJR2xvYmFsRnJlZShwQWRhcHRlckFkZHJzKTsKLQl9Ci0JcmV0dXJuIChy
ZXQpOwotfQotCi12b2lkCi1nZXR3aW50aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQotewot
CXN0cnVjdCB0aW1lYiB0YjsKLQotCWZ0aW1lKCZ0Yik7Ci0JdHYtPnR2X3NlYyA9IChsb25nKXRi
LnRpbWU7Ci0JdHYtPnR2X3VzZWMgPSAobG9uZykodGIubWlsbGl0bSkgKiAxMDAwTDsKLX0KLQot
aW50Ci13aW5faWZfbmFtZXRvaW5kZXgoY29uc3QgY2hhciAqaWZuYW1lKQotewotCUlQX0FEQVBU
RVJfQUREUkVTU0VTICphZGRyZXNzZXMsICphZGRyOwotCVVMT05HIHN0YXR1cywgc2l6ZTsKLQlp
bnQgaW5kZXggPSAwOwotCi0JaWYgKCFpZm5hbWUpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2l6
ZSA9IDA7Ci0Jc3RhdHVzID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfVU5TUEVDLCAwLCBOVUxM
LCBOVUxMLCAmc2l6ZSk7Ci0JaWYgKHN0YXR1cyAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZMT1cpIHsK
LQkJcmV0dXJuIDA7Ci0JfQotCWFkZHJlc3NlcyA9IG1hbGxvYyhzaXplKTsKLQlzdGF0dXMgPSBH
ZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIGFkZHJlc3NlcywgJnNpemUp
OwotCWlmIChzdGF0dXMgPT0gRVJST1JfU1VDQ0VTUykgewotCQlmb3IgKGFkZHIgPSBhZGRyZXNz
ZXM7IGFkZHI7IGFkZHIgPSBhZGRyLT5OZXh0KSB7Ci0JCQlpZiAoYWRkci0+QWRhcHRlck5hbWUg
JiYgIXN0cmNtcChpZm5hbWUsIGFkZHItPkFkYXB0ZXJOYW1lKSkgewotCQkJCWluZGV4ID0gYWRk
ci0+SWZJbmRleDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQotCWZyZWUoYWRkcmVzc2Vz
KTsKLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLSNpZiBXSU5WRVIgPCAweDA2MDAKLS8qIFRoZXNlIGZ1
bmN0aW9ucyBhcmUgd3JpdHRlbiBiYXNlZCBvbiB0aGUgY29kZSBhdAotICogaHR0cDovL3d3dy5j
cy53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sCi0gKiBUaGVyZWZvcmUsIGZvciB0
aGUgcmVzdCBvZiB0aGUgZmlsZSB0aGUgZm9sbG93aW5nIGFwcGxpZXM6Ci0gKgotICoKLSAqIENv
cHlyaWdodCBhbmQgTGljZW5zaW5nIEluZm9ybWF0aW9uIGZvciBBQ0UoVE0pLCBUQU8oVE0pLCBD
SUFPKFRNKSwKLSAqIERBbkNFKFRNKSwgYW5kIENvU01JQyhUTSkKLSAqCi0gKiBbMV1BQ0UoVE0p
LCBbMl1UQU8oVE0pLCBbM11DSUFPKFRNKSwgREFuQ0UoVE0pLCBhbmQgWzRdQ29TTUlDKFRNKQot
ICogKGhlbmNlZm9ydGggcmVmZXJyZWQgdG8gYXMgIkRPQyBzb2Z0d2FyZSIpIGFyZSBjb3B5cmln
aHRlZCBieQotICogWzVdRG91Z2xhcyBDLiBTY2htaWR0IGFuZCBoaXMgWzZdcmVzZWFyY2ggZ3Jv
dXAgYXQgWzddV2FzaGluZ3RvbgotICogVW5pdmVyc2l0eSwgWzhdVW5pdmVyc2l0eSBvZiBDYWxp
Zm9ybmlhLCBJcnZpbmUsIGFuZCBbOV1WYW5kZXJiaWx0Ci0gKiBVbml2ZXJzaXR5LCBDb3B5cmln
aHQgKGMpIDE5OTMtMjAxMiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4gU2luY2UgRE9DCi0gKiBzb2Z0
d2FyZSBpcyBvcGVuLXNvdXJjZSwgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0d2FyZSwgeW91IGFyZSBm
cmVlIHRvCi0gKiB1c2UsIG1vZGlmeSwgY29weSwgYW5kIGRpc3RyaWJ1dGUtLXBlcnBldHVhbGx5
IGFuZCBpcnJldm9jYWJseS0tdGhlCi0gKiBET0Mgc29mdHdhcmUgc291cmNlIGNvZGUgYW5kIG9i
amVjdCBjb2RlIHByb2R1Y2VkIGZyb20gdGhlIHNvdXJjZSwgYXMKLSAqIHdlbGwgYXMgY29weSBh
bmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvZnR3YXJlLiBZb3UKLSAq
IG11c3QsIGhvd2V2ZXIsIGluY2x1ZGUgdGhpcyBjb3B5cmlnaHQgc3RhdGVtZW50IGFsb25nIHdp
dGggYW55IGNvZGUKLSAqIGJ1aWx0IHVzaW5nIERPQyBzb2Z0d2FyZSB0aGF0IHlvdSByZWxlYXNl
LiBObyBjb3B5cmlnaHQgc3RhdGVtZW50Ci0gKiBuZWVkcyB0byBiZSBwcm92aWRlZCBpZiB5b3Ug
anVzdCBzaGlwIGJpbmFyeSBleGVjdXRhYmxlcyBvZiB5b3VyCi0gKiBzb2Z0d2FyZSBwcm9kdWN0
cy4KLSAqCi0gKiBZb3UgY2FuIHVzZSBET0Mgc29mdHdhcmUgaW4gY29tbWVyY2lhbCBhbmQvb3Ig
YmluYXJ5IHNvZnR3YXJlIHJlbGVhc2VzCi0gKiBhbmQgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24g
dG8gcmVkaXN0cmlidXRlIGFueSBvZiB5b3VyIHNvdXJjZSBjb2RlCi0gKiB0aGF0IGlzIGJ1aWx0
IHVzaW5nIERPQyBzb2Z0d2FyZS4gTm90ZSwgaG93ZXZlciwgdGhhdCB5b3UgbWF5IG5vdAotICog
bWlzYXBwcm9wcmlhdGUgdGhlIERPQyBzb2Z0d2FyZSBjb2RlLCBzdWNoIGFzIGNvcHlyaWdodGlu
ZyBpdCB5b3Vyc2VsZgotICogb3IgY2xhaW1pbmcgYXV0aG9yc2hpcCBvZiB0aGUgRE9DIHNvZnR3
YXJlIGNvZGUsIGluIGEgd2F5IHRoYXQgd2lsbAotICogcHJldmVudCBET0Mgc29mdHdhcmUgZnJv
bSBiZWluZyBkaXN0cmlidXRlZCBmcmVlbHkgdXNpbmcgYW4KLSAqIG9wZW4tc291cmNlIGRldmVs
b3BtZW50IG1vZGVsLiBZb3UgbmVlZG4ndCBpbmZvcm0gYW55b25lIHRoYXQgeW91J3JlCi0gKiB1
c2luZyBET0Mgc29mdHdhcmUgaW4geW91ciBzb2Z0d2FyZSwgdGhvdWdoIHdlIGVuY291cmFnZSB5
b3UgdG8gbGV0Ci0gKiBbMTBddXMga25vdyBzbyB3ZSBjYW4gcHJvbW90ZSB5b3VyIHByb2plY3Qg
aW4gdGhlIFsxMV1ET0Mgc29mdHdhcmUKLSAqIHN1Y2Nlc3Mgc3Rvcmllcy4KLSAqCi0gKiBUaGUg
WzEyXUFDRSwgWzEzXVRBTywgWzE0XUNJQU8sIFsxNV1EQW5DRSwgYW5kIFsxNl1Db1NNSUMgd2Vi
IHNpdGVzCi0gKiBhcmUgbWFpbnRhaW5lZCBieSB0aGUgWzE3XURPQyBHcm91cCBhdCB0aGUgWzE4
XUluc3RpdHV0ZSBmb3IgU29mdHdhcmUKLSAqIEludGVncmF0ZWQgU3lzdGVtcyAoSVNJUykgYW5k
IHRoZSBbMTldQ2VudGVyIGZvciBEaXN0cmlidXRlZCBPYmplY3QKLSAqIENvbXB1dGluZyBvZiBX
YXNoaW5ndG9uIFVuaXZlcnNpdHksIFN0LiBMb3VpcyBmb3IgdGhlIGRldmVsb3BtZW50IG9mCi0g
KiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBhcyBwYXJ0IG9mIHRoZSBvcGVuLXNvdXJjZSBzb2Z0d2Fy
ZSBjb21tdW5pdHkuCi0gKiBTdWJtaXNzaW9ucyBhcmUgcHJvdmlkZWQgYnkgdGhlIHN1Ym1pdHRl
ciBgYGFzIGlzJycgd2l0aCBubyB3YXJyYW50aWVzCi0gKiB3aGF0c29ldmVyLCBpbmNsdWRpbmcg
YW55IHdhcnJhbnR5IG9mIG1lcmNoYW50YWJpbGl0eSwgbm9uaW5mcmluZ2VtZW50Ci0gKiBvZiB0
aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHksIG9yIGZpdG5lc3MgZm9yIGFueSBwYXJ0
aWN1bGFyCi0gKiBwdXJwb3NlLiBJbiBubyBldmVudCBzaGFsbCB0aGUgc3VibWl0dGVyIGJlIGxp
YWJsZSBmb3IgYW55IGRpcmVjdCwKLSAqIGluZGlyZWN0LCBzcGVjaWFsLCBleGVtcGxhcnksIHB1
bml0aXZlLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCi0gKiBpbmNsdWRpbmcgd2l0aG91dCBs
aW1pdGF0aW9uLCBsb3N0IHByb2ZpdHMsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUKLSAqIHBvc3Np
YmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gTGlrZXdpc2UsIERPQyBzb2Z0d2FyZSBpcyBwcm92aWRl
ZCBhcyBpcwotICogd2l0aCBubyB3YXJyYW50aWVzIG9mIGFueSBraW5kLCBpbmNsdWRpbmcgdGhl
IHdhcnJhbnRpZXMgb2YgZGVzaWduLAotICogbWVyY2hhbnRhYmlsaXR5LCBhbmQgZml0bmVzcyBm
b3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCi0gKiBub25pbmZyaW5nZW1lbnQsIG9yIGFyaXNpbmcg
ZnJvbSBhIGNvdXJzZSBvZiBkZWFsaW5nLCB1c2FnZSBvciB0cmFkZQotICogcHJhY3RpY2UuIFdh
c2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksCi0g
KiB0aGVpciBlbXBsb3llZXMsIGFuZCBzdHVkZW50cyBzaGFsbCBoYXZlIG5vIGxpYWJpbGl0eSB3
aXRoIHJlc3BlY3QgdG8KLSAqIHRoZSBpbmZyaW5nZW1lbnQgb2YgY29weXJpZ2h0cywgdHJhZGUg
c2VjcmV0cyBvciBhbnkgcGF0ZW50cyBieSBET0MKLSAqIHNvZnR3YXJlIG9yIGFueSBwYXJ0IHRo
ZXJlb2YuIE1vcmVvdmVyLCBpbiBubyBldmVudCB3aWxsIFdhc2hpbmd0b24KLSAqIFVuaXZlcnNp
dHksIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCB0aGVpciBlbXBsb3llZXMs
IG9yCi0gKiBzdHVkZW50cyBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJldmVudWUgb3IgcHJvZml0
cyBvciBvdGhlciBzcGVjaWFsLAotICogaW5kaXJlY3QgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdl
cy4KLSAqCi0gKiBET0Mgc29mdHdhcmUgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3
aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uCi0gKiB0aGUgcGFydCBvZiBXYXNoaW5ndG9uIFVuaXZl
cnNpdHksIFVDIElydmluZSwgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LAotICogdGhlaXIgZW1wbG95
ZWVzLCBvciBzdHVkZW50cyB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKLSAqIG1v
ZGlmaWNhdGlvbiwgb3IgZW5oYW5jZW1lbnQuIEEgWzIwXW51bWJlciBvZiBjb21wYW5pZXMgYXJv
dW5kIHRoZQotICogd29ybGQgcHJvdmlkZSBjb21tZXJjaWFsIHN1cHBvcnQgZm9yIERPQyBzb2Z0
d2FyZSwgaG93ZXZlci4gRE9DCi0gKiBzb2Z0d2FyZSBpcyBZMkstY29tcGxpYW50LCBhcyBsb25n
IGFzIHRoZSB1bmRlcmx5aW5nIE9TIHBsYXRmb3JtIGlzCi0gKiBZMkstY29tcGxpYW50LiBMaWtl
d2lzZSwgRE9DIHNvZnR3YXJlIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBuZXcgVVMKLSAqIGRheWxp
Z2h0IHNhdmluZ3MgcnVsZSBwYXNzZWQgYnkgQ29uZ3Jlc3MgYXMgIlRoZSBFbmVyZ3kgUG9saWN5
IEFjdCBvZgotICogMjAwNSwiIHdoaWNoIGVzdGFibGlzaGVkIG5ldyBkYXlsaWdodCBzYXZpbmdz
IHRpbWVzIChEU1QpIHJ1bGVzIGZvcgotICogdGhlIFVuaXRlZCBTdGF0ZXMgdGhhdCBleHBhbmQg
RFNUIGFzIG9mIE1hcmNoIDIwMDcuIFNpbmNlIERPQyBzb2Z0d2FyZQotICogb2J0YWlucyB0aW1l
L2RhdGUgYW5kIGNhbGVuZGFyaW5nIGluZm9ybWF0aW9uIGZyb20gb3BlcmF0aW5nIHN5c3RlbXMK
LSAqIHVzZXJzIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBuZXcgRFNUIHJ1bGVzIGFzIGxv
bmcgYXMgdGhleQotICogdXBncmFkZSB0aGVpciBvcGVyYXRpbmcgc3lzdGVtcyBhY2NvcmRpbmds
eS4KLSAqCi0gKiBUaGUgbmFtZXMgQUNFKFRNKSwgVEFPKFRNKSwgQ0lBTyhUTSksIERBbkNFKFRN
KSwgQ29TTUlDKFRNKSwKLSAqIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBhbmQg
VmFuZGVyYmlsdCBVbml2ZXJzaXR5LCBtYXkgbm90Ci0gKiBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBkZXJpdmVkIGZyb20gdGhpcwotICogc291cmNl
IHdpdGhvdXQgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBXYXNoaW5ndG9uIFVuaXZl
cnNpdHksCi0gKiBVQyBJcnZpbmUsIG9yIFZhbmRlcmJpbHQgVW5pdmVyc2l0eS4gVGhpcyBsaWNl
bnNlIGdyYW50cyBubyBwZXJtaXNzaW9uCi0gKiB0byBjYWxsIHByb2R1Y3RzIG9yIHNlcnZpY2Vz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvdXJjZSBBQ0UoVE0pLAotICogVEFPKFRNKSwgQ0lBTyhUTSks
IERBbkNFKFRNKSwgb3IgQ29TTUlDKFRNKSwgbm9yIGRvZXMgaXQgZ3JhbnQKLSAqIHBlcm1pc3Np
b24gZm9yIHRoZSBuYW1lIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBvcgotICog
VmFuZGVyYmlsdCBVbml2ZXJzaXR5IHRvIGFwcGVhciBpbiB0aGVpciBuYW1lcy4KLSAqCi0gKiBJ
ZiB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMsIGFkZGl0aW9ucywgY29tbWVudHMsIG9yIHF1ZXN0
aW9ucywgcGxlYXNlCi0gKiBsZXQgWzIxXW1lIGtub3cuCi0gKgotICogWzIyXURvdWdsYXMgQy4g
U2NobWlkdAotICoKLSAqIFJlZmVyZW5jZXMKLSAqCi0gKiAgMS4gaHR0cDovL3d3dy5jcy53dXN0
bC5lZHUvfnNjaG1pZHQvQUNFLmh0bWwKLSAqICAyLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+
c2NobWlkdC9UQU8uaHRtbAotICogIDMuIGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L0NJ
QU8vCi0gKiAgNC4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvY29zbWljLwotICogIDUu
IGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L35zY2htaWR0LwotICogIDYuIGh0dHA6Ly93
d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L0FDRS1tZW1iZXJzLmh0bWwKLSAqICA3LiBodHRwOi8v
d3d3Lnd1c3RsLmVkdS8KLSAqICA4LiBodHRwOi8vd3d3LnVjaS5lZHUvCi0gKiAgOS4gaHR0cDov
L3d3dy52YW5kZXJiaWx0LmVkdS8KLSAqIDEwLiBtYWlsdG86ZG9jX2dyb3VwQGNzLnd1c3RsLmVk
dQotICogMTEuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L0FDRS11c2Vycy5odG1s
Ci0gKiAxMi4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLmh0bWwKLSAqIDEz
LiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9UQU8uaHRtbAotICogMTQuIGh0dHA6
Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L0NJQU8vCi0gKiAxNS4gaHR0cDovL3d3dy5kcmUudmFu
ZGVyYmlsdC5lZHUvfnNjaG1pZHQvRE9DX1JPT1QvREFuQ0UvCi0gKiAxNi4gaHR0cDovL3d3dy5k
cmUudmFuZGVyYmlsdC5lZHUvY29zbWljLwotICogMTcuIGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJp
bHQuZWR1LwotICogMTguIGh0dHA6Ly93d3cuaXNpcy52YW5kZXJiaWx0LmVkdS8KLSAqIDE5LiBo
dHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9kb2MtY2VudGVyLmh0bWwKLSAqIDIwLiBo
dHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9jb21tZXJjaWFsLXN1cHBvcnQuaHRtbAot
ICogMjEuIG1haWx0bzpkLnNjaG1pZHRAdmFuZGVyYmlsdC5lZHUKLSAqIDIyLiBodHRwOi8vd3d3
LmRyZS52YW5kZXJiaWx0LmVkdS9+c2NobWlkdC8KLSAqIDIzLiBodHRwOi8vd3d3LmNzLnd1c3Rs
LmVkdS9BQ0UuaHRtbAotICovCi0KLXZvaWQKLUluaXRpYWxpemVYUENvbmRpdGlvblZhcmlhYmxl
KHVzZXJsYW5kX2NvbmRfdCAqY3YpCi17Ci0JY3YtPndhaXRlcnNfY291bnQgPSAwOwotCUluaXRp
YWxpemVDcml0aWNhbFNlY3Rpb24oJihjdi0+d2FpdGVyc19jb3VudF9sb2NrKSk7Ci0JY3YtPmV2
ZW50c19bQ19TSUdOQUxdID0gQ3JlYXRlRXZlbnQgKE5VTEwsIEZBTFNFLCBGQUxTRSwgTlVMTCk7
Ci0JY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdID0gQ3JlYXRlRXZlbnQgKE5VTEwsIFRSVUUsIEZB
TFNFLCBOVUxMKTsKLX0KLQotdm9pZAotRGVsZXRlWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFu
ZF9jb25kX3QgKmN2KQotewotCUNsb3NlSGFuZGxlKGN2LT5ldmVudHNfW0NfQlJPQURDQVNUXSk7
Ci0JQ2xvc2VIYW5kbGUoY3YtPmV2ZW50c19bQ19TSUdOQUxdKTsKLQlEZWxldGVDcml0aWNhbFNl
Y3Rpb24oJihjdi0+d2FpdGVyc19jb3VudF9sb2NrKSk7Ci19Ci0KLWludAotU2xlZXBYUENvbmRp
dGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YsIHVzZXJsYW5kX211dGV4X3QgKm10eCkK
LXsKLQlpbnQgcmVzdWx0LCBsYXN0X3dhaXRlcjsKLQotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZj
di0+d2FpdGVyc19jb3VudF9sb2NrKTsKLQljdi0+d2FpdGVyc19jb3VudCsrOwotCUxlYXZlQ3Jp
dGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKLQlMZWF2ZUNyaXRpY2FsU2Vj
dGlvbiAobXR4KTsKLQlyZXN1bHQgPSBXYWl0Rm9yTXVsdGlwbGVPYmplY3RzKDIsIGN2LT5ldmVu
dHNfLCBGQUxTRSwgSU5GSU5JVEUpOwotCWlmIChyZXN1bHQ9PS0xKSB7Ci0JCXJlc3VsdCA9IEdl
dExhc3RFcnJvcigpOwotCX0KLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmY3YtPndhaXRlcnNfY291
bnRfbG9jayk7Ci0JY3YtPndhaXRlcnNfY291bnQtLTsKLQlsYXN0X3dhaXRlciA9IHJlc3VsdCA9
PSAoQ19TSUdOQUwgKyBDX0JST0FEQ0FTVCAmJiAoY3YtPndhaXRlcnNfY291bnQgPT0gMCkpOwot
CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKLQlpZiAobGFz
dF93YWl0ZXIpCi0JCVJlc2V0RXZlbnQoY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdKTsKLQlFbnRl
ckNyaXRpY2FsU2VjdGlvbiAobXR4KTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi12b2lkCi1XYWtl
QWxsWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKmN2KQotewotCWludCBoYXZl
X3dhaXRlcnM7Ci0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2sp
OwotCWhhdmVfd2FpdGVycyA9IGN2LT53YWl0ZXJzX2NvdW50ID4gMDsKLQlMZWF2ZUNyaXRpY2Fs
U2VjdGlvbigmY3YtPndhaXRlcnNfY291bnRfbG9jayk7Ci0JaWYgKGhhdmVfd2FpdGVycykKLQkJ
U2V0RXZlbnQgKGN2LT5ldmVudHNfW0NfQlJPQURDQVNUXSk7Ci19Ci0jZW5kaWYKLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3VzcnJlcS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MTllZWU1
YjJkOWRhZGQzNzA0NmIzYzExZjg2MTlkMjZkN2Y1NDBlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEuYwor
KysgL2Rldi9udWxsCkBAIC0xLDkwMDUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUg
bmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3Nj
dHBfdXNycmVxLmMgMzIxMjA0IDIwMTctMDctMTkgMTQ6Mjg6NThaIHR1ZXhlbiAkIik7Ci0jZW5k
aWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgotI2lmZGVmIF9fRnJlZUJTRF9fCi0j
aW5jbHVkZSA8c3lzL3Byb2MuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2Iu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX3Zhci5oPgotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+
Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdGltZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9ic2RfYWRkci5oPgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfY2FsbG91dC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxuZXRpbmV0L3Vk
cC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCi0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BlZWxvZmYuaD4KLSNlbmRpZgkJCQkvKiBIQVZFX1NDVFBf
UEVFTE9GRl9TT0NLT1BUICovCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNkZWZpbmUgQVBQ
TEVfRklMRV9OTyA3Ci0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY3RwX2NjX2Z1bmN0
aW9ucyBzY3RwX2NjX2Z1bmN0aW9uc1tdOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY3RwX3NzX2Z1
bmN0aW9ucyBzY3RwX3NzX2Z1bmN0aW9uc1tdOwotCi12b2lkCi0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotc2N0cF9pbml0KHVpbnQxNl90IHBvcnQsCi0gICAgICAgICAgaW50ICgqY29ubl9v
dXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0
b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKLSAgICAgICAgICB2b2lkICgqZGVidWdfcHJpbnRmKShjb25z
dCBjaGFyICpmb3JtYXQsIC4uLikpCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgKCFkZWZp
bmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiFkZWZp
bmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikpCi1zY3RwX2lu
aXQoc3RydWN0IHByb3Rvc3cgKnBwIFNDVFBfVU5VU0VELCBzdHJ1Y3QgZG9tYWluICpkcCBTQ1RQ
X1VOVVNFRCkKLSNlbHNlCi1zY3RwX2luaXQodm9pZCkKLSNlbmRpZgotewotI2lmICFkZWZpbmVk
KF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQl1X2xvbmcgc2JfbWF4X2Fk
ajsKLQotI2VuZGlmCi0JLyogSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRoZSBzeXNjdGxlZCB2YXJp
YWJsZXMgKi8KLQlzY3RwX2luaXRfc3lzY3RscygpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfTmFDbCkKLQlzcmFuZCgodW5zaWduZWQgaW50KXRpbWUoTlVMTCkpOwotI2Vsc2UK
LQlzcmFuZG9tKGdldHBpZCgpKTsgLyogc28gaW5wLT5zY3RwX2VwLnJhbmRvbV9udW1iZXJzIGFy
ZSB0cnVseSByYW5kb20uLi4gKi8KLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1BhbmRh
X18pCi0Jc2N0cF9zZW5kc3BhY2UgPSBTQl9NQVg7Ci0Jc2N0cF9yZWN2c3BhY2UgPSBTQl9NQVg7
Ci0KLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSA9IHBvcnQ7Ci0jZWxzZQotI2lmICFkZWZpbmVkKF9fQVBQTEVf
XykKLQlpZiAoKG5tYmNsdXN0ZXJzIC8gOCkgPiBTQ1RQX0FTT0NfTUFYX0NIVU5LU19PTl9RVUVV
RSkKLQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpID0gKG5tYmNs
dXN0ZXJzIC8gOCk7Ci0jZW5kaWYKLQkvKgotCSAqIEFsbG93IGEgdXNlciB0byB0YWtlIG5vIG1v
cmUgdGhhbiAxLzIgdGhlIG51bWJlciBvZiBjbHVzdGVycyBvcgotCSAqIHRoZSBTQl9NQVggd2hp
Y2hldmVyIGlzIHNtYWxsZXIgZm9yIHRoZSBzZW5kIHdpbmRvdy4KLQkgKi8KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLQlzYl9tYXhfYWRqID0gKHVfbG9uZykoKHVfcXVhZF90KSAoc2JfbWF4KSAq
IE1DTEJZVEVTIC8gKE1TSVpFICsgTUNMQllURVMpKTsKLSNlbHNlCi0Jc2JfbWF4X2FkaiA9ICh1
X2xvbmcpKCh1X3F1YWRfdCkgKFNCX01BWCkgKiBNQ0xCWVRFUyAvIChNU0laRSArIE1DTEJZVEVT
KSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc2VuZHNwYWNlKSA9IHNiX21heF9hZGo7Ci0jZWxzZQotCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9zZW5kc3BhY2UpID0gbWluKHNiX21heF9hZGosCi0JICAgICgoKHVpbnQzMl90KW5tYmNsdXN0
ZXJzIC8gMikgKiBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVCkpOwotI2VuZGlmCi0JLyoKLQkgKiBO
b3cgZm9yIHRoZSByZWN2IHdpbmRvdywgc2hvdWxkIHdlIHRha2UgdGhlIHNhbWUgYW1vdW50PyBv
cgotCSAqIHNob3VsZCBJIGRvIDEvMiB0aGUgU0JfTUFYIGluc3RlYWQgaW4gdGhlIFNCX01BWCBt
aW4gYWJvdmUuIEZvcgotCSAqIG5vdyBJIHdpbGwganVzdCBjb3B5LgotCSAqLwotCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFj
ZSk7Ci0jZW5kaWYKLQlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUpID0gMDsKLQlTQ1RQX0JBU0Vf
VkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZChJTkVU
KSB8fCBkZWZpbmVkKElORVQ2KQotCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSA9IC0x
OwotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cCkgPSAtMTsKLQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSA9IC0xOwot
I2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikg
PSAtMTsKLQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgPSAtMTsKLSNlbmRpZgot
CVNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkX3Nob3VsZF9leGl0KSA9IDA7Ci0JU0NUUF9CQVNF
X1ZBUihjb25uX291dHB1dCkgPSBjb25uX291dHB1dDsKLQlTQ1RQX0JBU0VfVkFSKGRlYnVnX3By
aW50ZikgPSBkZWJ1Z19wcmludGY7Ci0JU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9
IDA7Ci0jZW5kaWYKLQlzY3RwX3BjYl9pbml0KCk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotCXNjdHBfc3RhcnRfdGltZXIoKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoU0NUUF9QQUNLRVRf
TE9HR0lORykKLQlTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycykgPSAwOwotCVNDVFBf
QkFTRV9WQVIocGFja2V0X2xvZ19lbmQpID0gMDsKLQltZW1zZXQoJlNDVFBfQkFTRV9WQVIocGFj
a2V0X2xvZ19idWZmZXIpLCAwLCBTQ1RQX1BBQ0tFVF9MT0dfU0laRSk7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQX0JBU0VfVkFSKHNjdHBfbWFpbl90aW1lcl90aWNrcykg
PSAwOwotCXNjdHBfc3RhcnRfbWFpbl90aW1lcigpOwotCXRpbWVvdXQoc2N0cF9kZWxheWVkX3N0
YXJ0dXAsIE5VTEwsIDEpOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
I2lmZGVmIFZJTUFHRQotc3RhdGljIHZvaWQKLXNjdHBfZmluaXNoKHZvaWQgKnVudXNlZCBfX3Vu
dXNlZCkKLXsKLSAgICAgICAgIHNjdHBfcGNiX2ZpbmlzaCgpOwotfQotVk5FVF9TWVNVTklOSVQo
c2N0cCwgU0lfU1VCX1BST1RPX0RPTUFJTiwgU0lfT1JERVJfRk9VUlRILCBzY3RwX2ZpbmlzaCwg
TlVMTCk7Ci0jZW5kaWYKLSNlbHNlCi12b2lkCi1zY3RwX2ZpbmlzaCh2b2lkKQotewotI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQotCXVudGltZW91dChzY3RwX2RlbGF5ZWRfc3RhcnR1cCwgTlVMTCk7
Ci0Jc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0Jc2N0cF9hZGRyZXNzX21vbml0b3Jfc3RvcCgpOwot
CXNjdHBfc3RvcF9tYWluX3RpbWVyKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCXJlY3ZfdGhyZWFkX2Rl
c3Ryb3koKTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0j
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCWlmIChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV9yb3V0ZSkgIT0gLTEpIHsKLQkJcHRocmVhZF9qb2luKFNDVFBfQkFTRV9WQVIocmVj
dnRocmVhZHJvdXRlKSwgTlVMTCk7Ci0JfQotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBJTkVUCi0J
aWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFT
RV9WQVIocmVjdnRocmVhZHJhdyksIElORklOSVRFKTsKLQkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNF
X1ZBUihyZWN2dGhyZWFkcmF3KSk7Ci0jZWxzZQotCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZB
UihyZWN2dGhyZWFkcmF3KSwgTlVMTCk7Ci0jZW5kaWYKLQl9Ci0JaWYgKFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHVk
cCksIElORklOSVRFKTsKLQkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRw
KSk7Ci0jZWxzZQotCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwKSwg
TlVMTCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWlmIChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0JCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhy
ZWFkcmF3NiksIElORklOSVRFKTsKLQkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNFX1ZBUihyZWN2dGhy
ZWFkcmF3NikpOwotI2Vsc2UKLQkJcHRocmVhZF9qb2luKFNDVFBfQkFTRV9WQVIocmVjdnRocmVh
ZHJhdzYpLCBOVUxMKTsKLSNlbmRpZgotCX0KLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cDYpICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQot
CQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHVkcDYpLCBJTkZJ
TklURSk7Ci0JCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHVkcDYpKTsKLSNl
bHNlCi0JCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHA2KSwgTlVMTCk7
Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQlTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zaG91bGRf
ZXhpdCkgPSAxOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlXYWl0Rm9y
U2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwgSU5GSU5JVEUpOwotCUNs
b3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSk7Ci0jZWxzZQotCXB0aHJlYWRf
am9pbihTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCksIE5VTEwpOwotI2VuZGlmCi0jZW5kaWYK
LQlzY3RwX3BjYl9maW5pc2goKTsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCXNjdHBfZmlu
aXNoX3N5c2N0bHMoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQKLXNjdHBfcGF0aG10dV9h
ZGp1c3RtZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qgbnh0c3opCi17Ci0Jc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXVpbnQxNl90IG92ZXJoZWFkOwotCi0JLyogQWRq
dXN0IHRoYXQgdG9vICovCi0Jc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPSBueHRzejsKLQkvKiBu
b3cgb2ZmIHRvIHN1YnRyYWN0IElQX0RGIGZsYWcgaWYgbmVlZGVkICovCi0Jb3ZlcmhlYWQgPSBJ
UF9IRFJfU0laRSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JaWYgKHNjdHBfYXV0aF9pc19y
ZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykpIHsK
LQkJb3ZlcmhlYWQgKz0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2ht
YWNfaWQpOwotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7Ci0JCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikg
ewotCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKLQkJfQotCX0KLQlU
QUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0J
CWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikgewotCQkJLyoKLQkJCSAq
IEZvciB0aGlzIGd1eSB3ZSBhbHNvIG1hcmsgZm9yIGltbWVkaWF0ZSByZXNlbmQKLQkJCSAqIHNp
bmNlIHdlIHNlbnQgdG8gYmlnIG9mIGNodW5rCi0JCQkgKi8KLQkJCWNoay0+ZmxhZ3MgfD0gQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9S
RVNFTkQpIHsKLQkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNoayk7Ci0JCQkJc2N0cF90
b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKLQkJCQljaGstPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1JFU0VORDsKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1
ZV9yZXRyYW5fY250KTsKLQkJCQljaGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9
IDA7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
RkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hU
X0xPR19ET1dOX1BNVFUsCi0JCQkJCQkgICAgICAgY2hrLT53aG9Uby0+ZmxpZ2h0X3NpemUsCi0J
CQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUsCi0JCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50
cHRyX3QpY2hrLT53aG9UbywKLQkJCQkJCSAgICAgICBjaGstPnJlYy5kYXRhLnRzbik7Ci0JCQkJ
fQotCQkJCS8qIENsZWFyIGFueSB0aW1lIHNvIE5PIFJUVCBpcyBiZWluZyBkb25lICovCi0JCQkJ
Y2hrLT5kb19ydHQgPSAwOwotCQkJfQotCQl9Ci0JfQotfQotCi0jaWZkZWYgSU5FVAotI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi12b2lkCi1zY3RwX25vdGlmeShzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLAotICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgICAgICAgICAgdWludDhfdCBpY21wX3R5cGUsCi0g
ICAgICAgICAgICB1aW50OF90IGljbXBfY29kZSwKLSAgICAgICAgICAgIHVpbnQxNl90IGlwX2xl
biwKLSAgICAgICAgICAgIHVpbnQzMl90IG5leHRfbXR1KQotewotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNv
OwotI2VuZGlmCi0JaW50IHRpbWVyX3N0b3BwZWQ7Ci0KLQlpZiAoaWNtcF90eXBlICE9IElDTVBf
VU5SRUFDSCkgewotCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdW5yZWFjaGFibGUgKi8KLQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlyZXR1cm47Ci0JfQotCWlmICgoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORVQpIHx8Ci0JICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX0hPU1Qp
IHx8Ci0JICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOKSB8fAotCSAg
ICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9IT1NUX1VOS05PV04pIHx8Ci0JICAgIChpY21w
X2NvZGUgPT0gSUNNUF9VTlJFQUNIX0lTT0xBVEVEKSB8fAotCSAgICAoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORVRfUFJPSElCKSB8fAotCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFD
SF9IT1NUX1BST0hJQikgfHwKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQkgICAgKGljbXBfY29k
ZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU4pKSB7Ci0jZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X05ldEJTRCkKLQkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU5fUFJPSElCSVQp
KSB7Ci0jZWxzZQotCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9GSUxURVJfUFJPSElC
KSkgewotI2VuZGlmCi0JCS8qIE1hcmsgdGhlIG5ldCB1bnJlYWNoYWJsZS4gKi8KLQkJaWYgKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJCS8qIE9LLCB0aGF0IGRl
c3RpbmF0aW9uIGlzIE5PVCByZWFjaGFibGUuICovCi0JCQluZXQtPmRlc3Rfc3RhdGUgJj0gflND
VFBfQUREUl9SRUFDSEFCTEU7Ci0JCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsK
LQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwKLQkJCSAgICAg
ICAgICAgICAgICBzdGNiLCAwLAotCQkJICAgICAgICAgICAgICAgICh2b2lkICopbmV0LCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOwotCQl9Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQl9IGVsc2Ug
IGlmICgoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9QUk9UT0NPTCkgfHwKLQkJICAgIChpY21w
X2NvZGUgPT0gSUNNUF9VTlJFQUNIX1BPUlQpKSB7Ci0JCS8qIFRyZWF0IGl0IGxpa2UgYW4gQUJP
UlQuICovCi0JCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDEsIDAsIE5VTEwsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKLQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlT
Q1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0JCSh2b2lkKXNj
dHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCSAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18yKTsKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJLyogU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOyBNVDogSSB0
aGluayB0aGlzIGlzIG5vdCBuZWVkZWQuKi8KLSNlbmRpZgotCQkvKiBubyBuZWVkIHRvIHVubG9j
ayBoZXJlLCBzaW5jZSB0aGUgVENCIGlzIGdvbmUgKi8KLQl9IGVsc2UgaWYgKGljbXBfY29kZSA9
PSBJQ01QX1VOUkVBQ0hfTkVFREZSQUcpIHsKLQkJLyogRmluZCB0aGUgbmV4dCAoc21hbGxlcikg
TVRVICovCi0JCWlmIChuZXh0X210dSA9PSAwKSB7Ci0JCQkvKgotCQkJICogT2xkIHR5cGUgcm91
dGVyIHRoYXQgZG9lcyBub3QgdGVsbCB1cyB3aGF0IHRoZSBuZXh0Ci0JCQkgKiBNVFUgaXMuCi0J
CQkgKiBSYXRzIHdlIHdpbGwgaGF2ZSB0byBndWVzcyAoaW4gYSBlZHVjYXRlZCBmYXNoaW9uCi0J
CQkgKiBvZiBjb3Vyc2UpLgotCQkJICovCi0JCQluZXh0X210dSA9IHNjdHBfZ2V0X3ByZXZfbXR1
KGlwX2xlbik7Ci0JCX0KLQkJLyogU3RvcCB0aGUgUE1UVSB0aW1lci4gKi8KLQkJaWYgKFNDVFBf
T1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKSkgewotCQkJdGltZXJfc3Rv
cHBlZCA9IDE7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlT
RSwgaW5wLCBzdGNiLCBuZXQsCi0JCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRICsgU0NUUF9MT0NfMSk7Ci0JCX0gZWxzZSB7Ci0JCQl0aW1lcl9zdG9wcGVkID0gMDsKLQkJ
fQotCQkvKiBVcGRhdGUgdGhlIHBhdGggTVRVLiAqLwotCQlpZiAobmV0LT5wb3J0KSB7Ci0JCQlu
ZXh0X210dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCX0KLQkJaWYgKG5ldC0+bXR1ID4g
bmV4dF9tdHUpIHsKLQkJCW5ldC0+bXR1ID0gbmV4dF9tdHU7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQkJCWlmIChuZXQtPnBvcnQpIHsKLQkJCQlzY3RwX2hjX3NldF9tdHUoJm5ldC0+cm8u
X2xfYWRkciwgaW5wLT5maWJudW0sIG5leHRfbXR1ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
LQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIsIGlucC0+
ZmlibnVtLCBuZXh0X210dSk7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCQkvKiBVcGRhdGUgdGhlIGFz
c29jaWF0aW9uIE1UVSAqLwotCQlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXh0X210
dSkgewotCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV4dF9tdHUpOwotCQl9Ci0J
CS8qIEZpbmFsbHksIHN0YXJ0IHRoZSBQTVRVIHRpbWVyIGlmIGl0IHdhcyBydW5uaW5nIGJlZm9y
ZS4gKi8KLQkJaWYgKHRpbWVyX3N0b3BwZWQpIHsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOwotCQl9Ci0JCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQl9IGVsc2UgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JfQot
fQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19XaW5kb3dzX18pCi12b2lkCi0jZWxzZQotdm9pZCAqCi0jZW5kaWYKLXNjdHBf
Y3RsaW5wdXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpzYSwgdm9pZCAqdmlwKQotewotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0Jc3RydWN0IGlwICpvdXRlcl9pcDsKLSNlbmRpZgotCXN0
cnVjdCBpcCAqaW5uZXJfaXA7Ci0Jc3RydWN0IHNjdHBoZHIgKnNoOwotCXN0cnVjdCBpY21wICpp
Y21wOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwot
CXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXN0cnVj
dCBzY3RwX2luaXRfY2h1bmsgKmNoOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyX2luIHNyYywg
ZHN0OwotCi0JaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8fAotCSAgICAoKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKXNhKS0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKLQkJcmV0dXJuOwotI2Vsc2UKLQkJcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotCX0K
LQlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkpIHsKLQkJdmlwID0gTlVMTDsKLQl9IGVsc2UgaWYg
KCh1bnNpZ25lZCljbWQgPj0gUFJDX05DTURTIHx8IGluZXRjdGxlcnJtYXBbY21kXSA9PSAwKSB7
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pCi0JCXJldHVybjsKLSNlbHNlCi0JCXJldHVybiAoTlVMTCk7Ci0jZW5k
aWYKLQl9Ci0JaWYgKHZpcCAhPSBOVUxMKSB7Ci0JCWlubmVyX2lwID0gKHN0cnVjdCBpcCAqKXZp
cDsKLQkJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClpbm5lcl9pcCAtCi0JCSAgICAo
c2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNpemVvZihzdHJ1Y3QgaXApKSk7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLQkJb3V0ZXJfaXAgPSAoc3RydWN0IGlwICopKChjYWRkcl90KWljbXAgLSBz
aXplb2Yoc3RydWN0IGlwKSk7Ci0jZW5kaWYKLQkJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNh
ZGRyX3QpaW5uZXJfaXAgKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpKTsKLQkJbWVtc2V0KCZzcmMs
IDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJc3JjLnNpbl9mYW1pbHkgPSBBRl9J
TkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzcmMuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQkJ
c3JjLnNpbl9hZGRyID0gaW5uZXJfaXAtPmlwX3NyYzsKLQkJbWVtc2V0KCZkc3QsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lm
ZGVmIEhBVkVfU0lOX0xFTgotCQlkc3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOwotI2VuZGlmCi0JCWRzdC5zaW5fcG9ydCA9IHNoLT5kZXN0X3BvcnQ7Ci0JCWRzdC5zaW5f
YWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7Ci0JCS8qCi0JCSAqICdkc3QnIGhvbGRzIHRoZSBkZXN0
IG9mIHRoZSBwYWNrZXQgdGhhdCBmYWlsZWQgdG8gYmUgc2VudC4KLQkJICogJ3NyYycgaG9sZHMg
b3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2UgcmV2ZXJzZQotCQkgKiB0aGUgZHN0
IGFuZCB0aGUgc3JjIGluIHRoZSBsb29rdXAuCi0JCSAqLwotCQlpbnAgPSBOVUxMOwotCQluZXQg
PSBOVUxMOwotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYSgoc3RydWN0IHNv
Y2thZGRyICopJmRzdCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzb2NrYWRkciAqKSZzcmMsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZpbnAsICZuZXQsIDEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfREVGQVVMVF9WUkZJRCk7Ci0JCWlmICgoc3RjYiAhPSBOVUxMKSAmJgotCQkgICAgKG5l
dCAhPSBOVUxMKSAmJgotCQkgICAgKGlucCAhPSBOVUxMKSkgewotCQkJLyogQ2hlY2sgdGhlIHZl
cmlmaWNhdGlvbiB0YWcgKi8KLQkJCWlmIChudG9obChzaC0+dl90YWcpICE9IDApIHsKLQkJCQkv
KgotCQkJCSAqIFRoaXMgbXVzdCBiZSB0aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkIGZvcgotCQkJ
CSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRvbid0IGNvbnNpZGVyCi0JCQkJICogcGFja2V0
cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmljYXRpb24gdGFnLgotCQkJCSAqLwotCQkJCWlmIChudG9o
bChzaC0+dl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92dGFnKSB7Ci0JCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLQkJCQlpZiAobnRvaHMob3V0ZXJfaXAtPmlwX2xlbikgPj0KLQkJCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpcCkgKwotCQkJCSAgICA4ICsgKGlubmVyX2lwLT5pcF9obCA8PCAy
KSArIDIwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEluIHRoaXMgY2FzZSB3ZSBjYW4gY2hlY2sgaWYg
d2UKLQkJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQotCQkJCQkgKiBpbml0aWF0
ZSB0YWcgbWF0Y2hlcy4KLQkJCQkJICovCi0JCQkJCWNoID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1
bmsgKikoc2ggKyAxKTsKLQkJCQkJaWYgKChjaC0+Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJ
QVRJT04pIHx8Ci0JCQkJCSAgICAobnRvaGwoY2gtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBzdGNi
LT5hc29jLm15X3Z0YWcpKSB7Ci0JCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCQly
ZXR1cm47Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0jZWxzZQotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJCQlyZXR1cm47Ci0jZW5kaWYKLQkJCX0KLQkJCXNjdHBfbm90aWZ5KGlucCwgc3RjYiwgbmV0
LAotCQkJICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlLAotCQkJICAgICAgICAgICAgaWNtcC0+
aWNtcF9jb2RlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDEwMDAwMDAKLQkJCSAgICAgICAgICAgIG50b2hzKGlubmVyX2lwLT5pcF9sZW4pLAotI2Vs
c2UKLQkJCSAgICAgICAgICAgIGlubmVyX2lwLT5pcF9sZW4sCi0jZW5kaWYKLQkJCSAgICAgICAg
ICAgICh1aW50MzJfdCludG9ocyhpY21wLT5pY21wX25leHRtdHUpKTsKLQkJfSBlbHNlIHsKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAotCQkJ
LyoKLQkJCSAqIFhYWCBtdXN0IGJlIGZpeGVkIGZvciA1LnggYW5kIGhpZ2hlciwgbGVhdmUgZm9y
Ci0JCQkgKiA0LngKLQkJCSAqLwotCQkJaWYgKFBSQ19JU19SRURJUkVDVChjbWQpICYmIChpbnAg
IT0gTlVMTCkpIHsKLQkJCQlpbl9ydGNoYW5nZSgoc3RydWN0IGlucGNiICopaW5wLAotCQkJCSAg
ICBpbmV0Y3RsZXJybWFwW2NtZF0pOwotCQkJfQotI2VuZGlmCi0JCQlpZiAoKHN0Y2IgPT0gTlVM
TCkgJiYgKGlucCAhPSBOVUxMKSkgewotCQkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8KLQkJCQlT
Q1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJaWYgKHN0Y2IpIHsKLQkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JcmV0dXJuOwotI2Vs
c2UKLQlyZXR1cm4gKE5VTEwpOwotI2VuZGlmCi19Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKLXN0YXRpYyBpbnQKLXNjdHBfZ2V0Y3JlZChTWVNDVExfSEFORExF
Ul9BUkdTKQotewotCXN0cnVjdCB4dWNyZWQgeHVjOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRy
c1syXTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
LQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JaW50IGVycm9yOwotCXVpbnQzMl90IHZyZl9pZDsK
LQotCS8qIEZJWCwgZm9yIG5vbi1ic2QgaXMgdGhpcyByaWdodD8gKi8KLQl2cmZfaWQgPSBTQ1RQ
X0RFRkFVTFRfVlJGSUQ7Ci0KLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAotCWVycm9y
ID0gcHJpdl9jaGVjayhyZXEtPnRkLCBQUklWX05FVElORVRfR0VUQ1JFRCk7Ci0KLSNlbGlmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCWVycm9yID0gc3VzZXIocmVxLT50ZCk7Ci0jZWxz
ZQotCWVycm9yID0gc3VzZXIocmVxLT5wKTsKLSNlbmRpZgotCWlmIChlcnJvcikKLQkJcmV0dXJu
IChlcnJvcik7Ci0KLQllcnJvciA9IFNZU0NUTF9JTihyZXEsIGFkZHJzLCBzaXplb2YoYWRkcnMp
KTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJyb3IpOwotCi0Jc3RjYiA9IHNjdHBfZmluZGFz
c29jaWF0aW9uX2FkZHJfc2Eoc2ludG9zYSgmYWRkcnNbMV0pLAotCSAgICBzaW50b3NhKCZhZGRy
c1swXSksCi0JICAgICZpbnAsICZuZXQsIDEsIHZyZl9pZCk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCB8
fCBpbnAgPT0gTlVMTCB8fCBpbnAtPnNjdHBfc29ja2V0ID09IE5VTEwpIHsKLQkJaWYgKChpbnAg
IT0gTlVMTCkgJiYgKHN0Y2IgPT0gTlVMTCkpIHsKLQkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8K
LQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJ
Z290byBjcmVkX2Nhbl9jb250OwotCQl9Ci0KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJZXJyb3IgPSBFTk9F
TlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JLyogV2UgdXNl
IHRoZSB3cml0ZSBsb2NrIGhlcmUsIG9ubHkKLQkgKiBzaW5jZSBpbiB0aGUgZXJyb3IgbGVnIHdl
IG5lZWQgaXQuCi0JICogSWYgd2UgdXNlZCBSTE9DSywgdGhlbiB3ZSB3b3VsZCBoYXZlCi0JICog
dG8gd2xvY2svZGVjci91bmxvY2svcmxvY2suIFdoaWNoCi0JICogaW4gdGhlb3J5IGNvdWxkIGNy
ZWF0ZSBhIGhvbGUuIEJldHRlcgotCSAqIHRvIHVzZSBoaWdoZXIgd2xvY2suCi0JICovCi0JU0NU
UF9JTlBfV0xPQ0soaW5wKTsKLSBjcmVkX2Nhbl9jb250OgotCWVycm9yID0gY3JfY2Fuc2Vlc29j
a2V0KHJlcS0+dGQtPnRkX3VjcmVkLCBpbnAtPnNjdHBfc29ja2V0KTsKLQlpZiAoZXJyb3IpIHsK
LQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlnb3RvIG91dDsKLQl9Ci0JY3J1MngoaW5wLT5z
Y3RwX3NvY2tldC0+c29fY3JlZCwgJnh1Yyk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCWVy
cm9yID0gU1lTQ1RMX09VVChyZXEsICZ4dWMsIHNpemVvZihzdHJ1Y3QgeHVjcmVkKSk7Ci1vdXQ6
Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURf
QVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JXLAotICAgIDAsIDAsIHNj
dHBfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBvZiBhIFNDVFAgY29ubmVjdGlv
biIpOwotI2VuZGlmCQkJCS8qICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAqLwotCi0KLSNpZmRl
ZiBJTkVUCi0jaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKLXN0YXRpYyB2b2lkCi0jZWxzZQotc3RhdGlj
IGludAotI2VuZGlmCi1zY3RwX2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBz
Y3RwX2lucGNiICppbnA7Ci0JdWludDMyX3QgZmxhZ3M7Ci0KLQlpbnAgPSAoc3RydWN0IHNjdHBf
aW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwCi0JCXJldHVybjsKLSNlbHNl
Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0jZW5kaWYKLQl9Ci0KLSBzY3Rw
X211c3RfdHJ5X2FnYWluOgotCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwotI2lmZGVmIFNDVFBf
TE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTcpOwotI2VuZGlmCi0J
aWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKLQkgICAg
KGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBfZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBfUENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7Ci0j
aWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTYp
OwotI2VuZGlmCi0JCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FC
T1JULAotCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFKTsKLQkJU09DS19MT0NL
KHNvKTsKLQkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsKLQkJLyogc2FtZSBmb3IgdGhlIHJj
diBvbmVzLCB0aGV5IGFyZSBvbmx5Ci0JCSAqIGhlcmUgZm9yIHRoZSBhY2NvdW50aW5nL3NlbGVj
dC4KLQkJICovCi0JCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7Ci0KLSNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKLQkJc28tPnNvX3VzZWNvdW50LS07Ci0jZWxzZQotCQkvKiBOb3cgbnVsbCBvdXQg
dGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQuICovCi0JCXNvLT5zb19w
Y2IgPSBOVUxMOwotI2VuZGlmCi0JCVNPQ0tfVU5MT0NLKHNvKTsKLQl9IGVsc2UgewotCQlmbGFn
cyA9IGlucC0+c2N0cF9mbGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSA9PSAwKSB7Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47Ci0JCX0KLQl9Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKLQly
ZXR1cm47Ci0jZWxzZQotCXJldHVybiAoMCk7Ci0jZW5kaWYKLX0KLQotI2lmIGRlZmluZWQoX19Q
YW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLSNlbHNlCi1zdGF0aWMgaW50
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDAwMDAKLXNjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9V
TlVTRUQsIHN0cnVjdCB0aHJlYWQgKnAgU0NUUF9VTlVTRUQpCi0jZWxpZiBkZWZpbmVkKF9fUGFu
ZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotc2N0cF9hdHRhY2goc3RydWN0IHNvY2tl
dCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3QgdnJmX2lkKQotI2VsaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKLXNjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJv
dG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFEIHAgU0NUUF9VTlVTRUQpCi0jZWxzZQotc2N0cF9hdHRh
Y2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgc3RydWN0IHByb2Mg
KnAgU0NUUF9VTlVTRUQpCi0jZW5kaWYKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0
cnVjdCBpbnBjYiAqaXBfaW5wOwotCWludCBlcnJvcjsKLSNpZiAhZGVmaW5lZChfX1BhbmRhX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JdWludDMyX3QgdnJmX2lkID0gU0NUUF9ERUZB
VUxUX1ZSRklEOwotI2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29f
cGNiOwotCWlmIChpbnAgIT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZB
TCk7Ci0JfQotCWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09IDAgfHwgc28tPnNvX3Jjdi5zYl9o
aXdhdCA9PSAwKSB7Ci0JCWVycm9yID0gU0NUUF9TT1JFU0VSVkUoc28sIFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSk7Ci0J
CWlmIChlcnJvcikgewotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLQl9Ci0JZXJyb3IgPSBzY3Rw
X2lucGNiX2FsbG9jKHNvLCB2cmZfaWQpOwotCWlmIChlcnJvcikgewotCQlyZXR1cm4gKGVycm9y
KTsKLQl9Ci0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlTQ1RQX0lO
UF9XTE9DSyhpbnApOwotCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjY7CS8qIEknbSBub3QgdjYhICovCi0JaXBfaW5wID0gJmlucC0+aXBfaW5wLmlucDsKLQlpcF9p
bnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKLQlpcF9pbnAtPmlucF9pcF90dGwgPSBNT0RVTEVf
R0xPQkFMKGlwX2RlZnR0bCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCXJldHVybiAoMCk7
Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1
MDAwMDAKLXN0YXRpYyBpbnQKLXNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2thZGRyICphZGRyLCBzdHJ1Y3QgdGhyZWFkICpwKQotewotI2VsaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMgaW50Ci1zY3RwX2JpbmQoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHByb2MgKnApIHsKLSNl
bGlmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLXNj
dHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKSB7Ci0Jdm9p
ZCAqcCA9IE5VTEw7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RhdGljIGludAotc2N0
cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIFBLVEhSRUFE
IHApIHsKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRk
ciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik6IE5VTEw7Ci0KLSNlbmRpZgot
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JfQotCWlmIChhZGRyICE9IE5VTEwpIHsKLSNpZmRlZiBIQVZFX1NBX0xFTgot
CQlpZiAoKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB8fAotCQkgICAgKGFkZHItPnNhX2xl
biAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpIHsKLSNlbHNlCi0JCWlmIChhZGRyLT5z
YV9mYW1pbHkgIT0gQUZfSU5FVCkgewotI2VuZGlmCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJu
IChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoc2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBO
VUxMLCBwKSk7Ci19Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQotaW50
Ci1zY3RwY29ubl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNF
RCwgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0
IGlucGNiICppcF9pbnA7Ci0JaW50IGVycm9yOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNi
ICopc28tPnNvX3BjYjsKLQlpZiAoaW5wICE9IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0
dXJuIChFSU5WQUwpOwotCX0KLQlpZiAoc28tPnNvX3NuZC5zYl9oaXdhdCA9PSAwIHx8IHNvLT5z
b19yY3Yuc2JfaGl3YXQgPT0gMCkgewotCQllcnJvciA9IFNDVFBfU09SRVNFUlZFKHNvLCBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY3Zz
cGFjZSkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9Ci0JfQotCWVy
cm9yID0gc2N0cF9pbnBjYl9hbGxvYyhzbywgdnJmX2lkKTsKLQlpZiAoZXJyb3IpIHsKLQkJcmV0
dXJuIChlcnJvcik7Ci0JfQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7
Ci0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZM
QUdTX0JPVU5EX1Y2OwotCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19CT1VORF9D
T05OOwotCWlwX2lucCA9ICZpbnAtPmlwX2lucC5pbnA7Ci0JaXBfaW5wLT5pbnBfdmZsYWcgfD0g
SU5QX0NPTk47Ci0JaXBfaW5wLT5pbnBfaXBfdHRsID0gTU9EVUxFX0dMT0JBTChpcF9kZWZ0dGwp
OwotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBj
b25uX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChF
SU5WQUwpOwotCX0KLQlpZiAoYWRkciAhPSBOVUxMKSB7Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJ
aWYgKChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgfHwKLQkJICAgIChhZGRyLT5zYV9sZW4g
IT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkpIHsKLSNlbHNlCi0JCWlmIChhZGRyLT5z
YV9mYW1pbHkgIT0gQUZfQ09OTikgewotI2VuZGlmCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJu
IChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoc2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBO
VUxMLCBOVUxMKSk7Ci19Ci0KLSNlbmRpZgotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotdm9pZAotc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykK
LXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXVpbnQzMl90IGZsYWdzOwotCi0JaW5wID0g
KHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpCi0JCXJl
dHVybjsKLQotCS8qIEluZm9ybSBhbGwgdGhlIGxvd2VyIGxheWVyIGFzc29jIHRoYXQgd2UKLQkg
KiBhcmUgZG9uZS4KLQkgKi8KLSBzY3RwX211c3RfdHJ5X2FnYWluOgotCWZsYWdzID0gaW5wLT5z
Y3RwX2ZsYWdzOwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlu
cCwgTlVMTCwgMTcpOwotI2VuZGlmCi0JaWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgPT0gMCkgJiYKLQkgICAgKGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBfZmxh
Z3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBfUENC
X0ZMQUdTX0NMT1NFX0lQKSkpKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpZiAo
KChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fTElOR0VSKSAmJiAoc28tPnNvX2xpbmdlciA9PSAw
KSkgfHwKLQkJICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsKLSNlbHNlCi0JCWlmICgoKHNv
LT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJiAoc28tPnNvX2xpbmdlciA9PSAwKSkgfHwKLQkJ
ICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsKLSNlbmRpZgotI2lmZGVmIFNDVFBfTE9HX0NM
T1NJTkcKLQkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxMyk7Ci0jZW5kaWYKLQkJCXNj
dHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAotCQkJCQlTQ1RQ
X0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7Ci0JCX0gZWxzZSB7Ci0jaWZkZWYgU0NUUF9M
T0dfQ0xPU0lORwotCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE0KTsKLSNlbmRpZgot
CQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfR1JBQ0VGVUxfQ0xP
U0UsCi0JCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFKTsKLQkJfQotCQkvKiBU
aGUgc29ja2V0IGlzIG5vdyBkZXRhY2hlZCwgbm8gbWF0dGVyIHdoYXQKLQkJICogdGhlIHN0YXRl
IG9mIHRoZSBTQ1RQIGFzc29jaWF0aW9uLgotCQkgKi8KLQkJU09DS19MT0NLKHNvKTsKLQkJU0NU
UF9TQl9DTEVBUihzby0+c29fc25kKTsKLQkJLyogc2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5
IGFyZSBvbmx5Ci0JCSAqIGhlcmUgZm9yIHRoZSBhY2NvdW50aW5nL3NlbGVjdC4KLQkJICovCi0J
CVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7Ci0KLSNpZiAhZGVmaW5lZChfX0FQUExFX18pCi0J
CS8qIE5vdyBudWxsIG91dCB0aGUgcmVmZXJlbmNlLCB3ZSBhcmUgY29tcGxldGVseSBkZXRhY2hl
ZC4gKi8KLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0jZW5kaWYKLQkJU09DS19VTkxPQ0soc28pOwot
CX0gZWxzZSB7Ci0JCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwotCQlpZiAoKGZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApIHsKLQkJCWdvdG8gc2N0cF9tdXN0X3RyeV9h
Z2FpbjsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLSNlbHNlCi0KLQotaW50Ci1zY3RwX2RldGFj
aChzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXVpbnQz
Ml90IGZsYWdzOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlp
ZiAoaW5wID09IE5VTEwpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+IDY5MDAwMAotCQlyZXR1cm47Ci0jZWxzZQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1
cm4gKEVJTlZBTCk7Ci0jZW5kaWYKLQl9Ci0gc2N0cF9tdXN0X3RyeV9hZ2FpbjoKLQlmbGFncyA9
IGlucC0+c2N0cF9mbGFnczsKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0Jc2N0cF9sb2dfY2xv
c2luZyhpbnAsIE5VTEwsIDE3KTsKLSNlbmRpZgotCWlmICgoKGZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUpID09IDApICYmCi0JICAgIChhdG9taWNfY21wc2V0X2ludCgmaW5wLT5z
Y3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfCBT
Q1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgJiYgKHNvLT5zb19saW5n
ZXIgPT0gMCkpIHx8Ci0JCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Ci0jZWxzZQotCQlp
ZiAoKChzby0+c29fb3B0aW9ucyAmIFNPX0xJTkdFUikgJiYgKHNvLT5zb19saW5nZXIgPT0gMCkp
IHx8Ci0JCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQ
X0xPR19DTE9TSU5HCi0JCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTMpOwotI2VuZGlm
Ci0JCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9BQk9SVCwKLQkJ
CQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOwotCQl9IGVsc2UgewotI2lmZGVm
IFNDVFBfTE9HX0NMT1NJTkcKLQkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxMyk7Ci0j
ZW5kaWYKLQkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0dSQUNF
RlVMX0NMT1NFLAotCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7Ci0JCX0K
LQkJLyogVGhlIHNvY2tldCBpcyBub3cgZGV0YWNoZWQsIG5vIG1hdHRlciB3aGF0Ci0JCSAqIHRo
ZSBzdGF0ZSBvZiB0aGUgU0NUUCBhc3NvY2lhdGlvbi4KLQkJICovCi0JCVNDVFBfU0JfQ0xFQVIo
c28tPnNvX3NuZCk7Ci0JCS8qIHNhbWUgZm9yIHRoZSByY3Ygb25lcywgdGhleSBhcmUgb25seQot
CQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9zZWxlY3QuCi0JCSAqLwotCQlTQ1RQX1NCX0NM
RUFSKHNvLT5zb19yY3YpOwotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykKLQkJLyogTm93IGRpc2Nv
bm5lY3QgKi8KLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlmbGFn
cyA9IGlucC0+c2N0cF9mbGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSA9PSAwKSB7Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47Ci0JCX0KLQl9Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKLQly
ZXR1cm47Ci0jZWxzZQotCXJldHVybiAoMCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotLyogX19Vc2Vyc3BhY2VfXyBpcyBub3QgY2FsbGluZyBzY3Rw
X3NlbmRtICovCi0jZW5kaWYKLSNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKSkKLWludAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDUwMDAwMAotc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdz
LCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgIHN0cnVjdCBtYnVm
ICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKTsKLQotI2Vsc2UKLXNjdHBfc2VuZG0oc3RydWN0
IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAq
YWRkciwKLSAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHByb2MgKnApOwotCi0jZW5k
aWYKLQotaW50Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNTAwMDAwCi1zY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVj
dCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgc3RydWN0IG1idWYgKmNvbnRy
b2wsIHN0cnVjdCB0aHJlYWQgKnApCi17Ci0jZWxzZQotc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAot
ICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLSNlbmRpZgotCXN0
cnVjdCBzY3RwX2lucGNiICppbnA7Ci0JaW50IGVycm9yOwotCi0JaW5wID0gKHN0cnVjdCBzY3Rw
X2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJaWYgKGNvbnRyb2wp
IHsKLQkJCXNjdHBfbV9mcmVlbShjb250cm9sKTsKLQkJCWNvbnRyb2wgPSBOVUxMOwotCQl9Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOwotCQlzY3RwX21fZnJlZW0obSk7Ci0JCXJldHVybiAoRUlOVkFM
KTsKLQl9Ci0JLyogR290IHRvIGhhdmUgYW4gdG8gYWRkcmVzcyBpZiB3ZSBhcmUgTk9UIGEgY29u
bmVjdGVkIHNvY2tldCAqLwotCWlmICgoYWRkciA9PSBOVUxMKSAmJgotCSAgICAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgfHwKLQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpKSkgewotCQlnb3RvIGNvbm5lY3RlZF90eXBl
OwotCX0gZWxzZSBpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtU
KG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFREVTVEFERFJSRVEp
OwotCQllcnJvciA9IEVERVNUQUREUlJFUTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCQlpZiAoY29u
dHJvbCkgewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQkJY29udHJvbCA9IE5VTEw7Ci0J
CX0KLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotI2lmZGVmIElORVQ2Ci0JaWYgKGFkZHItPnNhX2Zh
bWlseSAhPSBBRl9JTkVUKSB7Ci0JCS8qIG11c3QgYmUgYSB2NCBhZGRyZXNzISAqLwotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRURFU1RBRERSUkVRKTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCQlpZiAoY29udHJvbCkg
ewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQkJY29udHJvbCA9IE5VTEw7Ci0JCX0KLQkJ
ZXJyb3IgPSBFREVTVEFERFJSRVE7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0KLSNlbmRpZgkJCQkv
KiBJTkVUNiAqLwotY29ubmVjdGVkX3R5cGU6Ci0JLyogbm93IHdoYXQgYWJvdXQgY29udHJvbCAq
LwotCWlmIChjb250cm9sKSB7Ci0JCWlmIChpbnAtPmNvbnRyb2wpIHsKLQkJCVNDVFBfUFJJTlRG
KCJodWg/IGNvbnRyb2wgc2V0P1xuIik7Ci0JCQlzY3RwX21fZnJlZW0oaW5wLT5jb250cm9sKTsK
LQkJCWlucC0+Y29udHJvbCA9IE5VTEw7Ci0JCX0KLQkJaW5wLT5jb250cm9sID0gY29udHJvbDsK
LQl9Ci0JLyogUGxhY2UgdGhlIGRhdGEgKi8KLQlpZiAoaW5wLT5wa3QpIHsKLQkJU0NUUF9CVUZf
TkVYVChpbnAtPnBrdF9sYXN0KSA9IG07Ci0JCWlucC0+cGt0X2xhc3QgPSBtOwotCX0gZWxzZSB7
Ci0JCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07Ci0JfQotCWlmICgKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLQkvKiBGcmVlQlNEIHVzZXMgYSBm
bGFnIHBhc3NlZCAqLwotCSAgICAoKGZsYWdzICYgUFJVU19NT1JFVE9DT01FKSA9PSAwKQotI2Vs
c2UKLQkgICAgMQkJCS8qIE9wZW4gQlNEIGRvZXMgbm90IGhhdmUgYW55ICJtb3JlIHRvIGNvbWUi
Ci0JCQkJICogaW5kaWNhdGlvbiAqLwotI2VuZGlmCi0JICAgICkgewotCQkvKgotCQkgKiBub3Rl
IHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGlzIGNvZGUgd2lsbCBvbmx5IGJlIHVzZWQKLQkJ
ICogYnkgT3BlbkJTRC0tIE5ldEJTRCwgRnJlZUJTRCwgYW5kIE1hY09TIGhhdmUgbWV0aG9kcyBm
b3IKLQkJICogcmUtZGVmaW5pbmcgc29zZW5kIHRvIHVzZSB0aGUgc2N0cF9zb3NlbmQuIE9uZSBj
YW4KLQkJICogb3B0aW9uYWxseSBzd2l0Y2ggYmFjayB0byB0aGlzIGNvZGUgKGJ5IGNoYW5naW5n
IGJhY2sgdGhlCi0JCSAqIGRlZmluaXRpb25zKSBidXQgdGhpcyBpcyBub3QgYWR2aXNhYmxlLiBU
aGlzIGNvZGUgaXMgdXNlZAotCQkgKiBieSBGcmVlQlNEIHdoZW4gc2VuZGluZyBhIGZpbGUgd2l0
aCBzZW5kZmlsZSgpIHRob3VnaC4KLQkJICovCi0JCWludCByZXQ7Ci0KLQkJcmV0ID0gc2N0cF9v
dXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9sLCBwLCBmbGFncyk7Ci0JCWlu
cC0+cGt0ID0gTlVMTDsKLQkJaW5wLT5jb250cm9sID0gTlVMTDsKLQkJcmV0dXJuIChyZXQpOwot
CX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotI2VuZGlmCi0KLWludAotc2N0cF9kaXNj
b25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0K
LQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVM
TCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQlTQ1RQX0lO
UF9STE9DSyhpbnApOwotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpKSB7Ci0JCWlmIChMSVNUX0VNUFRZKCZpbnAtPnNjdHBfYXNvY19saXN0KSkgewotCQkJLyog
Tm8gY29ubmVjdGlvbiAqLwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJcmV0dXJuICgw
KTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCQkJc3Ry
dWN0IHNjdHBfdGNiICpzdGNiOwotCi0JCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fz
b2NfbGlzdCk7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQkJCWlmIChzdGNiLT5h
c29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewotCQkJCS8qIFdlIGFy
ZSBhYm91dCB0byBiZSBmcmVlZCwgb3V0IG9mIGhlcmUgKi8KLQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBT
Q1RQX1NPX0xJTkdFUikgJiYKLQkJCSAgICAgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8Ci0JCQkg
ICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkgewotI2Vsc2UKLQkJCWlmICgoKHNvLT5zb19vcHRp
b25zICYgU09fTElOR0VSKSAmJgotCQkJICAgICAoc28tPnNvX2xpbmdlciA9PSAwKSkgfHwKLQkJ
CSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Ci0jZW5kaWYKLQkJCQlpZiAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgIT0KLQkJCQkgICAgU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgewotCQkJCQkv
KiBMZWZ0IHdpdGggRGF0YSB1bnJlYWQgKi8KLQkJCQkJc3RydWN0IG1idWYgKmVycjsKLQotCQkJ
CQllcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRy
KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQkJCQlpZiAoZXJyKSB7Ci0JCQkJCQkvKgot
CQkJCQkJICogRmlsbCBpbiB0aGUgdXNlcgotCQkJCQkJICogaW5pdGlhdGVkIGFib3J0Ci0JCQkJ
CQkgKi8KLQkJCQkJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQotCQkJCQkJcGggPSBtdG9k
KGVyciwgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7Ci0JCQkJCQlTQ1RQX0JVRl9MRU4oZXJyKSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQkJCQlwaC0+cGFyYW1fdHlwZSA9IGh0
b25zKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJUKTsKLQkJCQkJCXBoLT5wYXJhbV9sZW5n
dGggPSBodG9ucyhTQ1RQX0JVRl9MRU4oZXJyKSk7Ci0JCQkJCX0KLQkJCQkJc2N0cF9zZW5kX2Fi
b3J0X3RjYihzdGNiLCBlcnIsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJU0NUUF9TVEFUX0lOQ1Jf
Q09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7Ci0JCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9P
UEVOKSB8fAotCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0
cHNfY3VycmVzdGFiKTsKLQkJCQl9Ci0JCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3Rj
YiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMyk7Ci0JCQkJLyogTm8gdW5sb2NrIHRjYiBhc3NvYyBp
cyBnb25lICovCi0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWlmIChUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VuZF9xdWV1ZSkgJiYKLQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkg
JiYKLQkJCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgewotCQkJCS8qIHRoZXJl
IGlzIG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsIHNvIGRvbmUgKi8KLQkJCQlpZiAoKCphc29jLT5z
c19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3RjYiwgYXNvYykp
IHsKLQkJCQkJZ290byBhYm9ydF9hbnl3YXk7Ci0JCQkJfQotCQkJCWlmICgoU0NUUF9HRVRfU1RB
VEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSAmJgotCQkJCSAgICAoU0NUUF9H
RVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKLQkJCQkJ
Lyogb25seSBzZW5kIFNIVVRET1dOIDFzdCB0aW1lIHRocnUgKi8KLQkJCQkJc3RydWN0IHNjdHBf
bmV0cyAqbmV0cDsKLQotCQkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RB
VEVfT1BFTikgfHwKLQkJCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRF
X1NIVVRET1dOX1JFQ0VJVkVEKSkgewotCQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rw
c19jdXJyZXN0YWIpOwotCQkJCQl9Ci0JCQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RB
VEVfU0hVVERPV05fU0VOVCk7Ci0JCQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9T
VEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRv
d24oc3RjYik7Ci0JCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgewotCQkJCQkJbmV0cCA9
IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOwotCQkJCQl9IGVsc2UgewotCQkJCQkJbmV0cCA9IHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQkJCQkJfQotCQkJCQlzY3RwX3NlbmRfc2h1dGRv
d24oc3RjYixuZXRwKTsKLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hV
VERPV04sCi0JCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHApOwotCQkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAotCQkJCQkJCSBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCQkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9l
cCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9UMywgU0NUUF9TT19MT0NLRUQpOwotCQkJCX0KLQkJ
CX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiB3ZSBzdGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRh
IHRvIHNlbmQsCi0JCQkJICogc28gc2V0IFNIVVRET1dOX1BFTkRJTkcKLQkJCQkgKi8KLQkJCQkv
KgotCQkJCSAqIFhYWCBzb2NrZXRzIGRyYWZ0IHNheXMgdGhhdCBTQ1RQX0VPRgotCQkJCSAqIHNo
b3VsZCBiZSBzZW50IHdpdGggbm8gZGF0YS4gY3VycmVudGx5LAotCQkJCSAqIHdlIHdpbGwgYWxs
b3cgdXNlciBkYXRhIHRvIGJlIHNlbnQgZmlyc3QKLQkJCQkgKiBhbmQgbW92ZSB0byBTSFVURE9X
Ti1QRU5ESU5HCi0JCQkJICovCi0JCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQkJCQlpZiAo
c3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
OwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b247Ci0JCQkJfQotCi0JCQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5E
SU5HOwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQs
IHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkgbmV0cCk7Ci0JCQkJaWYgKCgqYXNvYy0+c3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7
Ci0JCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKLQkJCQl9
Ci0JCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJgotCQkJCSAgICBUQUlM
UV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkJCQkgICAgKGFzb2MtPnN0YXRlICYgU0NU
UF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwot
CQkJCWFib3J0X2FueXdheToKLQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCQlzdGNiLT5zY3RwX2VwLT5sYXN0
X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ180OwotCQkJCQlz
Y3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCQkJCWlmICgoU0NUUF9H
RVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChT
Q1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZF
RCkpIHsKLQkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJ
CQkJfQotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCSh2b2lkKXNjdHBfZnJlZV9h
c3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJCSAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ181KTsKLQkJCQkJcmV0dXJuICgw
KTsKLQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBf
T1VUUFVUX0ZST01fQ0xPU0lORywgU0NUUF9TT19MT0NLRUQpOwotCQkJCX0KLQkJCX0KLQkJCXNv
aXNkaXNjb25uZWN0aW5nKHNvKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJLyogbm90IHJlYWNoZWQg
Ki8KLQl9IGVsc2UgewotCQkvKiBVRFAgbW9kZWwgZG9lcyBub3Qgc3VwcG9ydCB0aGlzICovCi0J
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7Ci0JCXJldHVybiAoRU9Q
Tk9UU1VQUCk7Ci0JfQotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwX2ZsdXNoKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQotewotICAgICAgICAvKgotCSAqIFdlIHdpbGwganVz
dCBjbGVhciBvdXQgdGhlIHZhbHVlcyBhbmQgbGV0Ci0JICogc3Vic2VxdWVudCBjbG9zZSBjbGVh
ciBvdXQgdGhlIGRhdGEsIGlmIGFueS4KLQkgKiBOb3RlIGlmIHRoZSB1c2VyIGRpZCBhIHNodXRk
b3duKFNIVVRfUkQpIHRoZXkKLQkgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEs
IHRoZSBzb2NrZXQKLQkgKiB3aWxsIGJsb2NrIHRoYXQgZnJvbSBoYXBwZW5pbmcuCi0JICovCi0J
c3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNv
LT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJldHVybiAo
RUlOVkFMKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkvKiBGb3IgdGhlIDEgdG8gbWFu
eSBtb2RlbCB0aGlzIGRvZXMgbm90aGluZyAqLwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19VRFBUWVBFKSB7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJcmV0dXJu
ICgwKTsKLQl9Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotICAgICAgICBpZiAoKGhvdyA9PSBQ
UlVfRkxVU0hfUkQpIHx8IChob3cgPT0gUFJVX0ZMVVNIX1JEV1IpKSB7Ci0JCS8qIEZpcnN0IG1h
a2Ugc3VyZSB0aGUgc2Igd2lsbCBiZSBoYXBweSwgd2UgZG9uJ3QKLQkJICogdXNlIHRoZXNlIGV4
Y2VwdCBtYXliZSB0aGUgY291bnQKLQkJICovCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCVND
VFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0NBTlRfUkVBRDsKLQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQlzby0+c29fcmN2LnNiX2NjID0gMDsKLQkJc28tPnNvX3Jj
di5zYl9tYmNudCA9IDA7Ci0JCXNvLT5zb19yY3Yuc2JfbWIgPSBOVUxMOwotCX0KLSAgICAgICAg
aWYgKChob3cgPT0gUFJVX0ZMVVNIX1dSKSB8fCAoaG93ID09IFBSVV9GTFVTSF9SRFdSKSkgewot
CQkvKiBGaXJzdCBtYWtlIHN1cmUgdGhlIHNiIHdpbGwgYmUgaGFwcHksIHdlIGRvbid0Ci0JCSAq
IHVzZSB0aGVzZSBleGNlcHQgbWF5YmUgdGhlIGNvdW50Ci0JCSAqLwotCQlzby0+c29fc25kLnNi
X2NjID0gMDsKLQkJc28tPnNvX3NuZC5zYl9tYmNudCA9IDA7Ci0JCXNvLT5zb19zbmQuc2JfbWIg
PSBOVUxMOwotCi0JfQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYKLQotaW50Ci1zY3RwX3NodXRk
b3duKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0KLQlp
bnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkg
ewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCVNDVFBfSU5QX1JMT0NL
KGlucCk7Ci0JLyogRm9yIFVEUCBtb2RlbCB0aGlzIGlzIGEgaW52YWxpZCBjYWxsICovCi0JaWYg
KCEoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JICAgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSkgewotCQkvKiBS
ZXN0b3JlIHRoZSBmbGFncyB0aGF0IHRoZSBzb3NodXRkb3duIHRvb2sgYXdheS4gKi8KLSNpZiAo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAyMTE1KSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKQotCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwotCQlzby0+
c29fcmN2LnNiX3N0YXRlICY9IH5TQlNfQ0FOVFJDVk1PUkU7Ci0JCVNPQ0tCVUZfVU5MT0NLKCZz
by0+c29fcmN2KTsKLSNlbHNlCi0JCXNvLT5zb19zdGF0ZSAmPSB+U1NfQ0FOVFJDVk1PUkU7Ci0j
ZW5kaWYKLQkJLyogVGhpcyBwcm9jIHdpbGwgd2FrZXVwIGZvciByZWFkIGFuZCBkbyBub3RoaW5n
IChJIGhvcGUpICovCi0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7
Ci0JCXJldHVybiAoRU9QTk9UU1VQUCk7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogT2ssIGlmIHdl
IHJlYWNoIGhlcmUgaXRzIHRoZSBUQ1AgbW9kZWwgYW5kIGl0IGlzIGVpdGhlcgotCQkgKiBhIFNI
VVRfV1Igb3IgU0hVVF9SRFdSLgotCQkgKiBUaGlzIG1lYW5zIHdlIHB1dCB0aGUgc2h1dGRvd24g
ZmxhZyBhZ2FpbnN0IGl0LgotCQkgKi8KLQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCQlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQot
CQlpZiAoKHNvLT5zb19zdGF0ZSAmCi0JCSAgICAgKFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVD
VElOR3xTU19JU0RJU0NPTk5FQ1RJTkcpKSA9PSAwKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7Ci0JCQlyZXR1cm4gKEVOT1RDT05OKTsKLQkJfQotCQlzb2NhbnRzZW5kbW9yZShzbyk7Ci0K
LQkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwotCQlpZiAoc3RjYiA9
PSBOVUxMKSB7Ci0JCQkvKgotCQkJICogT2ssIHdlIGhpdCB0aGUgY2FzZSB0aGF0IHRoZSBzaHV0
ZG93biBjYWxsIHdhcwotCQkJICogbWFkZSBhZnRlciBhbiBhYm9ydCBvciBzb21ldGhpbmcuIE5v
dGhpbmcgdG8gZG8KLQkJCSAqIG5vdy4KLQkJCSAqLwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhc29jID0g
JnN0Y2ItPmFzb2M7Ci0JCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAh
PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSAmJgotCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2Mp
ICE9IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgJiYKLQkJICAgIChTQ1RQX0dFVF9TVEFURShh
c29jKSAhPSBTQ1RQX1NUQVRFX09QRU4pKSB7Ci0JCQkvKiBJZiB3ZSBhcmUgbm90IGluIG9yIGJl
Zm9yZSBFU1RBQkxJU0hFRCwgdGhlcmUgaXMKLQkJCSAqIG5vIHByb3RvY29sIGFjdGlvbiByZXF1
aXJlZC4KLQkJCSAqLwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5h
dGUpIHsKLQkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKLQkJfSBlbHNlIHsKLQkJCW5l
dHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247Ci0JCX0KLQkJaWYgKChTQ1RQX0dF
VF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pICYmCi0JCSAgICBUQUlMUV9FTVBUWSgm
YXNvYy0+c2VuZF9xdWV1ZSkgJiYKLQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVl
KSAmJgotCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKLQkJCWlmICgoKmFz
b2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBh
c29jKSkgewotCQkJCWdvdG8gYWJvcnRfYW55d2F5OwotCQkJfQotCQkJLyogdGhlcmUgaXMgbm90
aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KLQkJCVNDVFBfU1RBVF9ERUNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBf
U1RBVEVfU0hVVERPV05fU0VOVCk7Ci0JCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBf
U1RBVEVfU0hVVERPV05fUEVORElORyk7Ci0JCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93
bihzdGNiKTsKLQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsKLQkJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLAotCQkJICAgICAgICAgICAgICAgICBz
dGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBXZSBz
dGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRhIHRvIHNlbmQsIHNvIHNldAotCQkJICogU0hVVERP
V05fUEVORElORy4KLQkJCSAqLwotCQkJU0NUUF9BRERfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFU
RV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJCVNDVFBfQUREX1NV
QlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCk7Ci0JCQl9Ci0JCQlpZiAo
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJmFz
b2MtPnNlbnRfcXVldWUpICYmCi0JCQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9QQVJU
SUFMX01TR19MRUZUKSkgewotCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCQlhYm9ydF9hbnl3
YXk6Ci0JCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5J
VElBVEVEX0FCVCwgIiIpOwotCQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzY7Ci0JCQkJc2N0cF9hYm9ydF9hbl9hc3Nv
Y2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSAgb3BfZXJyLCBTQ1RQX1NPX0xP
Q0tFRCk7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9
Ci0JCX0KLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwg
c3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7Ci0JCS8qIFhYWDogV2h5IGRvIHRoaXMgaW4gdGhl
IGNhc2Ugd2hlcmUgd2UgaGF2ZSBzdGlsbCBkYXRhIHF1ZXVlZD8gKi8KLQkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VE
KTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0J
CXJldHVybiAoMCk7Ci0JfQotfQotCi0vKgotICogY29waWVzIGEgInVzZXIiIHByZXNlbnRhYmxl
IGFkZHJlc3MgYW5kIHJlbW92ZXMgZW1iZWRkZWQgc2NvcGUsIGV0Yy4KLSAqIHJldHVybnMgMCBv
biBzdWNjZXNzLCAxIG9uIGVycm9yCi0gKi8KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9maWxsX3Vz
ZXJfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsIHN0cnVjdCBzb2NrYWRkciAq
c2EpCi17Ci0jaWZkZWYgSU5FVDYKLSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUp
Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OwotCi0Jc2EgPSAoc3RydWN0IHNvY2thZGRyICop
c2N0cF9yZWNvdmVyX3Njb3BlKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EsCi0JICAgICZsc2E2
KTsKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQltZW1jcHkoc3MsIHNhLCBz
YS0+c2FfbGVuKTsKLSNlbHNlCi0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCWNhc2UgQUZfSU5FVDoKLQkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoK
LQkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJYnJlYWs7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCQlt
ZW1jcHkoc3MsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJYnJlYWs7Ci0j
ZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBUU05IICovCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotCXJl
dHVybiAoMCk7Ci19Ci0KLQotCi0vKgotICogTk9URTogYXNzdW1lcyBhZGRyIGxvY2sgaXMgaGVs
ZAotICovCi1zdGF0aWMgc2l6ZV90Ci1zY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLAotCQkJICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJICAgc2l6
ZV90IGxpbWl0LAotCQkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNhcywKLQkJCSAgIHVp
bnQzMl90IHZyZl9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwotCXN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmE7Ci0Jc2l6ZV90IGFjdHVhbDsKLQlpbnQgbG9vcGJhY2tfc2NvcGU7
Ci0jaWYgZGVmaW5lZChJTkVUKQotCWludCBpcHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVn
YWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCWludCBsb2NhbF9zY29wZSwgc2l0ZV9z
Y29wZSwgaXB2Nl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotCWludCBjb25uX2FkZHJfbGVnYWw7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsK
LQotCWFjdHVhbCA9IDA7Ci0JaWYgKGxpbWl0IDw9IDApCi0JCXJldHVybiAoYWN0dWFsKTsKLQot
CWlmIChzdGNiKSB7Ci0JCS8qIFR1cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLwot
CQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7Ci0jaWYg
ZGVmaW5lZChJTkVUKQotCQlpcHY0X2xvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0
X2xvY2FsX3Njb3BlOwotCQlpcHY0X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRf
YWRkcl9sZWdhbDsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVDYpCi0JCWxvY2FsX3Njb3BlID0g
c3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKLQkJc2l0ZV9zY29wZSA9IHN0Y2ItPmFzb2Mu
c2NvcGUuc2l0ZV9zY29wZTsKLQkJaXB2Nl9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5p
cHY2X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNv
bm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOwotI2VuZGlm
Ci0JfSBlbHNlIHsKLQkJLyogVXNlIGdlbmVyaWMgdmFsdWVzIGZvciBlbmRwb2ludHMuICovCi0J
CWxvb3BiYWNrX3Njb3BlID0gMTsKLSNpZiBkZWZpbmVkKElORVQpCi0JCWlwdjRfbG9jYWxfc2Nv
cGUgPSAxOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQkJbG9jYWxfc2NvcGUgPSAxOwot
CQlzaXRlX3Njb3BlID0gMTsKLSNlbmRpZgotCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpIHsKLSNpZiBkZWZpbmVkKElORVQ2KQotCQkJaXB2Nl9hZGRyX2xl
Z2FsID0gMTsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkKLQkJCWlmIChTQ1RQX0lQVjZfVjZP
TkxZKGlucCkpIHsKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlp
cHY0X2FkZHJfbGVnYWwgPSAxOwotCQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKLSNlbmRpZgotCQl9IGVsc2UgewotI2lmIGRl
ZmluZWQoSU5FVDYpCi0JCQlpcHY2X2FkZHJfbGVnYWwgPSAwOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX0NPTk4pIHsKLQkJCQljb25uX2FkZHJfbGVnYWwgPSAxOwotI2lmIGRlZmluZWQoSU5F
VCkKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotI2VuZGlmCi0JCQl9IGVsc2UgewotCQkJCWNv
bm5fYWRkcl9sZWdhbCA9IDA7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQkJCWlwdjRfYWRkcl9sZWdh
bCA9IDE7Ci0jZW5kaWYKLQkJCX0KLSNlbHNlCi0jaWYgZGVmaW5lZChJTkVUKQotCQkJaXB2NF9h
ZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotI2VuZGlmCi0JCX0KLQl9Ci0JdnJmID0gc2N0cF9maW5k
X3ZyZih2cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlp
ZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJTElTVF9G
T1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJaWYgKChsb29w
YmFja19zY29wZSA9PSAwKSAmJgotCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZu
KSkgewotCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2NvcGUgbm90IHNldCAqLwot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4t
PmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJaWYgKHN0Y2IpIHsKLQkJCQkJLyoKLQkJCQkJICog
Rm9yIHRoZSBCT1VORC1BTEwgY2FzZSwgdGhlIGxpc3QKLQkJCQkJICogYXNzb2NpYXRlZCB3aXRo
IGEgVENCIGlzIEFsd2F5cwotCQkJCQkgKiBjb25zaWRlcmVkIGEgcmV2ZXJzZSBsaXN0Li4gaS5l
LgotCQkJCQkgKiBpdCBsaXN0cyBhZGRyZXNzZXMgdGhhdCBhcmUgTk9UCi0JCQkJCSAqIHBhcnQg
b2YgdGhlIGFzc29jaWF0aW9uLiBJZiB0aGlzCi0JCQkJCSAqIGlzIG9uZSBvZiB0aG9zZSB3ZSBt
dXN0IHNraXAgaXQuCi0JCQkJCSAqLwotCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQo
c3RjYiwKLQkJCQkJCQkJICAgIHNjdHBfaWZhKSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0K
LQkJCQl9Ci0JCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNp
ZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotCQkJCQlpZiAoaXB2NF9hZGRyX2xlZ2FsKSB7
Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCQkJc2luID0gJnNjdHBfaWZh
LT5hZGRyZXNzLnNpbjsKLQkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7Ci0J
CQkJCQkJLyoKLQkJCQkJCQkgKiB3ZSBza2lwIHVuc3BlY2lmZWQKLQkJCQkJCQkgKiBhZGRyZXNz
ZXMKLQkJCQkJCQkgKi8KLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlu
cF9jcmVkLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDAp
IHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJCQkJaWYgKChpcHY0X2xv
Y2FsX3Njb3BlID09IDApICYmCi0JCQkJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmc2lu
LT5zaW5fYWRkcikpKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jaWZkZWYgSU5FVDYK
LQkJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19N
QVBQRURfVjQpKSB7Ci0JCQkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNihzaW4sIChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopc2FzKTsKLQkJCQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXMpLT5z
aW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJCQkJc2FzID0gKHN0cnVjdCBzb2NrYWRk
cl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
Ci0JCQkJCQkJYWN0dWFsICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCQkJCX0g
ZWxzZSB7Ci0jZW5kaWYKLQkJCQkJCQltZW1jcHkoc2FzLCBzaW4sIHNpemVvZigqc2luKSk7Ci0J
CQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9ydCA9IGlucC0+c2N0cF9s
cG9ydDsKLQkJCQkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qp
c2FzICsgc2l6ZW9mKCpzaW4pKTsKLQkJCQkJCQlhY3R1YWwgKz0gc2l6ZW9mKCpzaW4pOwotI2lm
ZGVmIElORVQ2Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsK
LQkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlj
b250aW51ZTsKLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJ
Y2FzZSBBRl9JTkVUNjoKLQkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgewotCQkJCQkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKLQotI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2
OwotI2VuZGlmCi0JCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJCQlp
ZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCQkv
KgotCQkJCQkJCSAqIHdlIHNraXAgdW5zcGVjaWZlZAotCQkJCQkJCSAqIGFkZHJlc3NlcwotCQkJ
CQkJCSAqLwotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCi0JCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQs
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0J
CQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlmIChJTjZfSVNfQUREUl9M
SU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0g
MCkKLQkJCQkJCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BF
KQotCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKLSNpZmRlZiBTQ1RQX0tB
TUUKLQkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkKLQkJCQkJCQkJCS8q
Ci0JCQkJCQkJCQkgKiBiYWQgbGluawotCQkJCQkJCQkJICogbG9jYWwKLQkJCQkJCQkJCSAqIGFk
ZHJlc3MKLQkJCQkJCQkJCSAqLwotCQkJCQkJCQkJY29udGludWU7Ci0jZWxzZQotCQkJCQkJCQls
c2E2ID0gKnNpbjY7Ci0JCQkJCQkJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZsc2E2LAotCQkJCQkJ
CQkJCSAgICAgJmxzYTYuc2luNl9hZGRyLAotCQkJCQkJCQkJCSAgICAgTlVMTCkpCi0JCQkJCQkJ
CQkvKgotCQkJCQkJCQkJICogYmFkIGxpbmsKLQkJCQkJCQkJCSAqIGxvY2FsCi0JCQkJCQkJCQkg
KiBhZGRyZXNzCi0JCQkJCQkJCQkgKi8KLQkJCQkJCQkJY29udGludWU7Ci0JCQkJCQkJCXNpbjYg
PSAmbHNhNjsKLSNlbmRpZgkJCQkvKiBTQ1RQX0tBTUUgKi8KLQkJCQkJCQl9Ci0jZW5kaWYgLyog
U0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotCQkJCQkJfQotCQkJCQkJaWYgKChzaXRlX3Njb3Bl
ID09IDApICYmCi0JCQkJCQkgICAgKElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9h
ZGRyKSkpIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJCW1lbWNweShzYXMsIHNp
bjYsIHNpemVvZigqc2luNikpOwotCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FzKS0+
c2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQkJCQkJc2FzID0gKHN0cnVjdCBzb2NrYWRk
cl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZigqc2luNikpOwotCQkJCQkJYWN0dWFs
ICs9IHNpemVvZigqc2luNik7Ci0JCQkJCQlpZiAoYWN0dWFsID49IGxpbWl0KSB7Ci0JCQkJCQkJ
cmV0dXJuIChhY3R1YWwpOwotCQkJCQkJfQotCQkJCQl9IGVsc2UgewotCQkJCQkJY29udGludWU7
Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQkJY2FzZSBBRl9DT05OOgotCQkJCQlpZiAoY29ubl9hZGRyX2xlZ2FsKSB7Ci0JCQkJCQlt
ZW1jcHkoc2FzLCAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubikpOwotCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhcyktPnNjb25uX3Bv
cnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3Jh
Z2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0JCQkJ
CQlhY3R1YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCQkJCWlmIChhY3R1
YWwgPj0gbGltaXQpIHsKLQkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7Ci0JCQkJCQl9Ci0JCQkJCX0g
ZWxzZSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJ
CQkJLyogVFNOSCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2Ugewot
CQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCXVpbnQz
Ml90IHNhX2xlbiA9IDA7Ci0jZW5kaWYKLQotCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQlpZiAoc3RjYikgewotCQkJCWlmIChz
Y3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkgewotCQkJCQljb250aW51
ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoc2N0cF9maWxsX3VzZXJfYWRkcmVzcyhzYXMsICZsYWRk
ci0+aWZhLT5hZGRyZXNzLnNhKSkKLQkJCQljb250aW51ZTsKLQkJCXN3aXRjaCAobGFkZHItPmlm
YS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6
Ci0JCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9ydCA9IGlucC0+c2N0cF9s
cG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2
OgotCQkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcyktPnNpbjZfcG9ydCA9IGlucC0+c2N0
cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2FzKS0+c2Nv
bm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVs
dDoKLQkJCQkvKiBUU05IICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZkZWYgSEFWRV9TQV9MRU4K
LQkJCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSgoY2FkZHJfdClzYXMgKwotCQkJ
CQkJCSAgbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9sZW4pOwotCQkJYWN0dWFsICs9IGxhZGRy
LT5pZmEtPmFkZHJlc3Muc2Euc2FfbGVuOwotI2Vsc2UKLQkJCXN3aXRjaCAobGFkZHItPmlmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6Ci0J
CQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQkJYnJlYWs7Ci0jZW5k
aWYKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlzYV9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0JCQljYXNlIEFGX0NPTk46Ci0JCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKTsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkv
KiBUU05IICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0
b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2FfbGVuKTsKLQkJCWFjdHVhbCArPSBzYV9sZW47Ci0j
ZW5kaWYKLQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKLQkJCQlyZXR1cm4gKGFjdHVhbCk7Ci0J
CQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChhY3R1YWwpOwotfQotCi1zdGF0aWMgc2l6ZV90Ci1zY3Rw
X2ZpbGxfdXBfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3Rv
cmFnZSAqc2FzKQotewotCXNpemVfdCBzaXplID0gMDsKLSNpZmRlZiBTQ1RQX01WUkYKLQl1aW50
MzJfdCBpZDsKLSNlbmRpZgotCi0JU0NUUF9JUElfQUREUl9STE9DSygpOwotI2lmZGVmIFNDVFBf
TVZSRgotLyoKLSAqIEZJWCBNRTogPz8gdGhpcyBXSUxMIHJlcG9ydCBkdXBsaWNhdGUgYWRkcmVz
c2VzIGlmIHRoZXkgYXBwZWFyCi0gKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4KLSAqLwotCS8qIGZp
bGwgdXAgYWRkcmVzc2VzIGZvciBhbGwgVlJGcyBvbiB0aGUgZW5kcG9pbnQgKi8KLQlmb3IgKGlk
ID0gMDsgKGlkIDwgaW5wLT5udW1fdnJmcykgJiYgKHNpemUgPCBsaW1pdCk7IGlkKyspIHsKLQkJ
c2l6ZSArPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihpbnAsIHN0Y2IsIGxpbWl0LCBzYXMs
Ci0JCQkJCQkgICBpbnAtPm1fdnJmX2lkc1tpZF0pOwotCQlzYXMgPSAoc3RydWN0IHNvY2thZGRy
X3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZSk7Ci0JfQotI2Vsc2UKLQkvKiBmaWxsIHVw
IGFkZHJlc3NlcyBmb3IgdGhlIGVuZHBvaW50J3MgZGVmYXVsdCB2cmYgKi8KLQlzaXplID0gc2N0
cF9maWxsX3VwX2FkZHJlc3Nlc192cmYoaW5wLCBzdGNiLCBsaW1pdCwgc2FzLAotCQkJCQkgIGlu
cC0+ZGVmX3ZyZl9pZCk7Ci0jZW5kaWYKLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1
cm4gKHNpemUpOwotfQotCi0vKgotICogTk9URTogYXNzdW1lcyBhZGRyIGxvY2sgaXMgaGVsZAot
ICovCi1zdGF0aWMgaW50Ci1zY3RwX2NvdW50X21heF9hZGRyZXNzZXNfdnJmKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHVpbnQzMl90IHZyZl9pZCkKLXsKLQlpbnQgY250ID0gMDsKLQlzdHJ1Y3Qg
c2N0cF92cmYgKnZyZiA9IE5VTEw7Ci0KLQkvKgotCSAqIEluIGJvdGggc3ViLXNldCBib3VuZCBh
biBib3VuZF9hbGwgY2FzZXMgd2UgcmV0dXJuIHRoZSBNQVhJTVVNCi0JICogbnVtYmVyIG9mIGFk
ZHJlc3NlcyB0aGF0IHlvdSBDT1VMRCBnZXQuIEluIHJlYWxpdHkgdGhlIHN1Yi1zZXQKLQkgKiBi
b3VuZCBtYXkgaGF2ZSBhbiBleGNsdXNpb24gbGlzdCBmb3IgYSBnaXZlbiBUQ0IgT1IgaW4gdGhl
Ci0JICogYm91bmQtYWxsIGNhc2UgYSBUQ0IgbWF5IE5PVCBpbmNsdWRlIHRoZSBsb29wYmFjayBv
ciBvdGhlcgotCSAqIGFkZHJlc3NlcyBhcyB3ZWxsLgotCSAqLwotCXZyZiA9IHNjdHBfZmluZF92
cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCXN0cnVjdCBz
Y3RwX2lmbiAqc2N0cF9pZm47Ci0JCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLQkJTElT
VF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJTElTVF9G
T1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJLyog
Q291bnQgdGhlbSBpZiB0aGV5IGFyZSB0aGUgcmlnaHQgdHlwZSAqLwotCQkJCXN3aXRjaCAoc2N0
cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZf
SU5FVDoKLSNpZmRlZiBJTkVUNgotCQkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkKLQkJCQkJCWNudCArPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7Ci0JCQkJCWVsc2UKLQkJCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKLSNlbHNlCi0JCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKLSNlbmRpZgotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBB
Rl9JTkVUNjoKLQkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJY2FzZSBBRl9D
T05OOgotCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCQkJYnJl
YWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0K
LQl9IGVsc2UgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQkJTElTVF9GT1JFQUNI
KGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJc3dpdGNo
IChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCWNh
c2UgQUZfSU5FVDoKLSNpZmRlZiBJTkVUNgotCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKQotCQkJCQljbnQgKz0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJCWVsc2UKLQkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOwotI2Vsc2UKLQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7Ci0jZW5kaWYKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFG
X0lORVQ2OgotCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJYnJl
YWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQljYXNlIEFGX0NPTk46
Ci0JCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0JCQkJYnJlYWs7Ci0j
ZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChj
bnQpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2NvdW50X21heF9hZGRyZXNzZXMoc3RydWN0IHNj
dHBfaW5wY2IgKmlucCkKLXsKLQlpbnQgY250ID0gMDsKLSNpZmRlZiBTQ1RQX01WUkYKLQlpbnQg
aWQ7Ci0jZW5kaWYKLQotCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLSNpZmRlZiBTQ1RQX01WUkYK
LS8qCi0gKiBGSVggTUU6ID8/IHRoaXMgV0lMTCBjb3VudCBkdXBsaWNhdGUgYWRkcmVzc2VzIGlm
IHRoZXkgYXBwZWFyCi0gKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4KLSAqLwotCS8qIGNvdW50IGFk
ZHJlc3NlcyBmb3IgYWxsIFZSRnMgb24gdGhlIGVuZHBvaW50ICovCi0JZm9yIChpZCA9IDA7IGlk
IDwgaW5wLT5udW1fdnJmczsgaWQrKykgewotCQljbnQgKz0gc2N0cF9jb3VudF9tYXhfYWRkcmVz
c2VzX3ZyZihpbnAsIGlucC0+bV92cmZfaWRzW2lkXSk7Ci0JfQotI2Vsc2UKLQkvKiBjb3VudCBh
ZGRyZXNzZXMgZm9yIHRoZSBlbmRwb2ludCdzIGRlZmF1bHQgVlJGICovCi0JY250ID0gc2N0cF9j
b3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+ZGVmX3ZyZl9pZCk7Ci0jZW5kaWYKLQlT
Q1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKGNudCk7Ci19Ci0KLXN0YXRpYyBpbnQK
LXNjdHBfZG9fY29ubmVjdF94KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCB2b2lkICpvcHR2YWwsCi0JCSAgc2l6ZV90IG9wdHNpemUsIHZvaWQgKnAsIGludCBkZWxh
eSkKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVhdF9sb2NrX29uID0gMDsKLQlzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCBzb2NrYWRkciAqc2E7Ci0JdW5zaWduZWQg
aW50IG51bV92NiA9IDAsIG51bV92NCA9IDAsICp0b3RhZGRycCwgdG90YWRkcjsKLQl1aW50MzJf
dCB2cmZfaWQ7Ci0JaW50IGJhZF9hZGRyZXNzZXMgPSAwOwotCXNjdHBfYXNzb2NfdCAqYV9pZDsK
LQotCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQ29ubmVjdHggY2FsbGVkXG4iKTsKLQotCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKLQkgICAgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsKLQkJLyogV2UgYXJl
IGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCi0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERSSU5VU0Up
OwotCQlyZXR1cm4gKEVBRERSSU5VU0UpOwotCX0KLQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYo
aW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1
cm4gKEVJTlZBTCk7Ci0JfQotCi0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkgewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlzdGNiID0gTElTVF9GSVJT
VCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0J
aWYgKHN0Y2IpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOwotCQlyZXR1cm4gKEVBTFJFQURZKTsKLQl9Ci0J
U0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsKLQlj
cmVhdF9sb2NrX29uID0gMTsKLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9BTExHT05FKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUpKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVMVCk7Ci0JCWVycm9yID0gRUZBVUxUOwotCQln
b3RvIG91dF9ub3c7Ci0JfQotCXRvdGFkZHJwID0gKHVuc2lnbmVkIGludCAqKW9wdHZhbDsKLQl0
b3RhZGRyID0gKnRvdGFkZHJwOwotCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSh0b3RhZGRycCAr
IDEpOwotCXN0Y2IgPSBzY3RwX2Nvbm5lY3R4X2hlbHBlcl9maW5kKGlucCwgc2EsICZ0b3RhZGRy
LCAmbnVtX3Y0LCAmbnVtX3Y2LCAmZXJyb3IsICh1bnNpZ25lZCBpbnQpKG9wdHNpemUgLSBzaXpl
b2YoaW50KSksICZiYWRfYWRkcmVzc2VzKTsKLQlpZiAoKHN0Y2IgIT0gTlVMTCkgfHwgYmFkX2Fk
ZHJlc3NlcykgewotCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcgdXAgYW4gYXNzb2NpYXRp
b24gKi8KLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJY3JlYXRfbG9ja19vbiA9
IDA7Ci0JCWlmIChzdGNiKQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlpZiAoYmFkX2Fk
ZHJlc3NlcyA9PSAwKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQllcnJvciA9IEVBTFJFQURZOwot
CQl9Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0jaWZkZWYgSU5FVDYKLQlpZiAoKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgJiYKLQkgICAgKG51bV92NiA+
IDApKSB7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCi0JICAgIChudW1fdjQg
PiAwKSkgewotCQlzdHJ1Y3QgaW42cGNiICppbnA2OwotCi0JCWlucDYgPSAoc3RydWN0IGluNnBj
YiAqKWlucDsKLQkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKLQkJCS8qCi0JCQkgKiBp
ZiBJUFY2X1Y2T05MWSBmbGFnLCBpZ25vcmUgY29ubmVjdGlvbnMgZGVzdGluZWQKLQkJCSAqIHRv
IGEgdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgotCQkJICovCi0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQlnb3RvIG91dF9ub3c7Ci0JCX0KLQl9Ci0jZW5kaWYJCQkJLyog
SU5FVDYgKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQp
ID09Ci0JICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpIHsKLQkJLyogQmluZCBhIGVwaGVtZXJh
bCBwb3J0ICovCi0JCWVycm9yID0gc2N0cF9pbnBjYl9iaW5kKHNvLCBOVUxMLCBOVUxMLCBwKTsK
LQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIG91dF9ub3c7Ci0JCX0KLQl9Ci0KLQkvKiBGSVggTUU6
IGRvIHdlIHdhbnQgdG8gcGFzcyBpbiBhIHZyZiBvbiB0aGUgY29ubmVjdCBjYWxsPyAqLwotCXZy
Zl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLQotCi0JLyogV2UgYXJlIEdPT0QgdG8gZ28gKi8KLQlz
dGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgc2EsICZlcnJvciwgMCwgdnJmX2lkLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnByZV9vcGVuX3N0cmVhbV9jb3VudCwKLQkg
ICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wb3J0LAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQkJICAgICAgIChzdHJ1
Y3QgdGhyZWFkICopcAotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJCSAgICAgICAoUEtU
SFJFQUQpcAotI2Vsc2UKLQkJCSAgICAgICAoc3RydWN0IHByb2MgKilwCi0jZW5kaWYKLQkJKTsK
LQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCS8qIEdhayEgbm8gbWVtb3J5ICovCi0JCWdvdG8gb3V0
X25vdzsKLQl9Ci0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19UQ1BUWVBFKSB7Ci0JCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxB
R1NfQ09OTkVDVEVEOwotCQkvKiBTZXQgdGhlIGNvbm5lY3RlZCBmbGFnIHNvIHdlIGNhbiBxdWV1
ZSBkYXRhICovCi0JCXNvaXNjb25uZWN0aW5nKHNvKTsKLQl9Ci0JU0NUUF9TRVRfU1RBVEUoJnN0
Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOwotCS8qIG1vdmUgdG8gc2Vjb25kIGFk
ZHJlc3MgKi8KLQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBB
Rl9JTkVUOgotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlj
YXNlIEFGX0lORVQ2OgotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6
Ci0JCWJyZWFrOwotCX0KLQotCWVycm9yID0gMDsKLQlzY3RwX2Nvbm5lY3R4X2hlbHBlcl9hZGQo
c3RjYiwgc2EsICh0b3RhZGRyLTEpLCAmZXJyb3IpOwotCS8qIEZpbGwgaW4gdGhlIHJldHVybiBp
ZCAqLwotCWlmIChlcnJvcikgewotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBT
Q1RQX1BDQkZSRUVfRk9SQ0UsCi0JCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEgKyBTQ1RQX0xPQ183KTsKLQkJZ290byBvdXRfbm93OwotCX0KLQlhX2lkID0gKHNj
dHBfYXNzb2NfdCAqKW9wdHZhbDsKLQkqYV9pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0K
LQkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRoZSBhc3NvYyAq
LwotCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhpbnAsIHN0Y2IpOwotCi0JaWYgKGRlbGF5
KSB7Ci0JCS8qIGRvaW5nIGRlbGF5ZWQgY29ubmVjdGlvbiAqLwotCQlzdGNiLT5hc29jLmRlbGF5
ZWRfY29ubmVjdGlvbiA9IDE7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0lO
SVQsIGlucCwgc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQl9IGVsc2Ug
ewotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQp
OwotCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JfQot
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLSBvdXRfbm93OgotCWlmIChjcmVhdF9sb2NrX29uKSB7
Ci0JCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7Ci0JfQotCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNkZWZpbmUgU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBhc3NvY19pZCkgeyBcCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fFwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7IFwKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsgXAotCQlzdGNiID0gTElT
VF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7IFwKLQkJaWYgKHN0Y2IpIHsgXAotCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsgXAotCQl9IFwKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOyBcCi0J
fSBlbHNlIGlmIChhc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DKSB7IFwKLQkJc3RjYiA9IHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsgXAotCQlpZiAoc3Rj
YiA9PSBOVUxMKSB7IFwKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7IFwKLQkJCWVycm9yID0gRU5PRU5UOyBcCi0J
CQlicmVhazsgXAotCQl9IFwKLQl9IGVsc2UgeyBcCi0JCXN0Y2IgPSBOVUxMOyBcCi0JfSBcCi19
Ci0KLQotI2RlZmluZSBTQ1RQX0NIRUNLX0FORF9DQVNUKGRlc3RwLCBzcmNwLCB0eXBlLCBzaXpl
KSB7XAotCWlmIChzaXplIDwgc2l6ZW9mKHR5cGUpKSB7IFwKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsgXAotCQll
cnJvciA9IEVJTlZBTDsgXAotCQlicmVhazsgXAotCX0gZWxzZSB7IFwKLQkJZGVzdHAgPSAodHlw
ZSAqKXNyY3A7IFwKLQl9IFwKLX0KLQotI2lmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi1pbnQKLSNlbHNlCi1zdGF0aWMgaW50Ci0jZW5kaWYKLXNjdHBfZ2V0
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qg
Km9wdHNpemUsCi0JICAgIHZvaWQgKnApIHsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVM
TDsKLQlpbnQgZXJyb3IsIHZhbCA9IDA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsK
LQotCWlmIChvcHR2YWwgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZB
TCk7Ci0JfQotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAo
aW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIEVJTlZBTDsKLQl9Ci0JZXJy
b3IgPSAwOwotCi0Jc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBTQ1RQX05PREVMQVk6Ci0JY2Fz
ZSBTQ1RQX0FVVE9DTE9TRToKLQljYXNlIFNDVFBfRVhQTElDSVRfRU9SOgotCWNhc2UgU0NUUF9B
VVRPX0FTQ09ORjoKLQljYXNlIFNDVFBfRElTQUJMRV9GUkFHTUVOVFM6Ci0JY2FzZSBTQ1RQX0lf
V0FOVF9NQVBQRURfVjRfQUREUjoKLQljYXNlIFNDVFBfVVNFX0VYVF9SQ1ZJTkZPOgotCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOwotCQlzd2l0Y2ggKG9wdG5hbWUpIHsKLQkJY2FzZSBTQ1RQX0RJU0FC
TEVfRlJBR01FTlRTOgotCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfTk9fRlJBR01FTlQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9JX1dBTlRfTUFQUEVE
X1Y0X0FERFI6Ci0JCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19ORUVEU19NQVBQRURfVjQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoK
LQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkJ
CS8qIG9ubHkgdmFsaWQgZm9yIGJvdW5kIGFsbCBzb2NrZXRzICovCi0JCQkJdmFsID0gc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYpOwotCQkJfSBlbHNl
IHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCWdvdG8gZmxhZ3Nf
b3V0OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FWFBMSUNJVF9FT1I6Ci0JCQl2YWwg
PSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJVF9FT1IpOwot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9OT0RFTEFZOgotCQkJdmFsID0gc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSk7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQ
X1VTRV9FWFRfUkNWSU5GTzoKLQkJCXZhbCA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKTsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfQVVUT0NMT1NF
OgotCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9T
RSkpCi0JCQkJdmFsID0gVElDS1NfVE9fU0VDKGlucC0+c2N0cF9lcC5hdXRvX2Nsb3NlX3RpbWUp
OwotCQkJZWxzZQotCQkJCXZhbCA9IDA7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RU5PUFJPVE9PUFQpOwotCQkJZXJyb3IgPSBFTk9QUk9UT09QVDsKLQkJfSAvKiBlbmQgc3dpdGNo
IChzb3B0LT5zb3B0X25hbWUpICovCi0JCWlmICgqb3B0c2l6ZSA8IHNpemVvZih2YWwpKSB7Ci0J
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQlmbGFnc19vdXQ6Ci0JCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJaWYgKGVycm9yID09IDApIHsKLQkJCS8qIHJldHVybiB0
aGUgb3B0aW9uIHZhbHVlICovCi0JCQkqKGludCAqKW9wdHZhbCA9IHZhbDsKLQkJCSpvcHRzaXpl
ID0gc2l6ZW9mKHZhbCk7Ci0JCX0KLQkJYnJlYWs7Ci0gICAgICAgIGNhc2UgU0NUUF9HRVRfUEFD
S0VUX0xPRzoKLQl7Ci0jaWZkZWYgIFNDVFBfUEFDS0VUX0xPR0dJTkcKLQkJdWludDhfdCAqdGFy
Z2V0OwotCQlpbnQgcmV0OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodGFyZ2V0LCBvcHR2YWws
IHVpbnQ4X3QsICpvcHRzaXplKTsKLQkJcmV0ID0gc2N0cF9jb3B5X291dF9wYWNrZXRfbG9nKHRh
cmdldCAsIChpbnQpKm9wdHNpemUpOwotCQkqb3B0c2l6ZSA9IHJldDsKLSNlbHNlCi0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVP
UE5PVFNVUFApOwotCQllcnJvciA9IEVPUE5PVFNVUFA7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9SRVVTRV9QT1JUOgotCXsKLQkJdWludDMyX3QgKnZhbHVlOwotCi0JCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkpIHsKLQkJCS8qIENhbid0
IGRvIHRoaXMgZm9yIGEgMS1tIHNvY2tldCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVh
azsKLQkJfQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAq
b3B0c2l6ZSk7Ci0JCSp2YWx1ZSA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX1BPUlRSRVVTRSk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UOgotCXsKLQkJdWludDMyX3Qg
KnZhbHVlOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3Qs
ICpvcHRzaXplKTsKLQkJKnZhbHVlID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OwotCQkq
b3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfRlJB
R01FTlRfSU5URVJMRUFWRToKLQl7Ci0JCXVpbnQzMl90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7Ci0JCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpKSB7Ci0J
CQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9T
VFJNUykpIHsKLQkJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMjsKLQkJCX0gZWxzZSB7Ci0J
CQkJKnZhbHVlID0gU0NUUF9GUkFHX0xFVkVMXzE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkqdmFs
dWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMDsKLQkJfQotCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJf
dCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfSU5URVJMRUFWSU5HX1NVUFBPUlRFRDoKLQl7
Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJ
YXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQ7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZV
VFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWlmIChpbnAtPmlk
YXRhX3N1cHBvcnRlZCkgewotCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSAxOwotCQkJCX0gZWxzZSB7
Ci0JCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQ01U
X09OX09GRjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6
ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQkJaWYgKHN0
Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmOwot
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQg
PT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlh
di0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfY210X29uX29mZjsKLQkJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQ
X1BMVUdHQUJMRV9DQzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAq
b3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQkJ
aWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9j
b250cm9sX21vZHVsZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJ
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAg
ICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JM
T0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVs
dF9jY19tb2R1bGU7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJv
ciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7
Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9DQ19PUFRJT046Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9jY19vcHRpb24gKmNjX29wdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGNjX29wdCwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24sICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCk7Ci0JCWlmIChzdGNiID09
IE5VTEwpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2UgewotCQkJaWYgKHN0Y2ItPmFz
b2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uID09IE5VTEwpIHsKLQkJCQll
cnJvciA9IEVOT1RTVVA7Ci0JCQl9IGVsc2UgewotCQkJCWVycm9yID0gKCpzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikoc3RjYiwgMCwgY2Nfb3B0KTsKLQkJ
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jY19vcHRpb24pOwotCQkJfQotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUExVR0dB
QkxFX1NTOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXpl
KTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCQlpZiAoc3Rj
YikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19t
b2R1bGU7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9k
dWxlOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkg
ewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfU1NfVkFMVUU6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0
IHNjdHBfc3RyZWFtX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCWlmICgoYXYtPnN0cmVhbV9pZCA+
PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgfHwKLQkJCSAgICAoc3RjYi0+YXNvYy5zc19mdW5j
dGlvbnMuc2N0cF9zc19nZXRfdmFsdWUoc3RjYiwgJnN0Y2ItPmFzb2MsICZzdGNiLT5hc29jLnN0
cm1vdXRbYXYtPnN0cmVhbV9pZF0sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZhdi0+c3RyZWFtX3ZhbHVlKSA8IDApKSB7Ci0JCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0gZWxzZSB7Ci0JCQkJKm9wdHNpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlKTsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJfSBlbHNlIHsKLQkJCS8qIENhbid0IGdldCBzdHJlYW0gdmFsdWUgd2l0aG91dCBh
c3NvY2lhdGlvbiAqLwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX0FERFJfTEVOOgotCXsKLQkJc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0jaWZk
ZWYgSU5FVAotCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IEFGX0lORVQpIHsKLQkJCWF2LT5hc3Nv
Y192YWx1ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJZXJyb3IgPSAwOwotCQl9
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IEFGX0lORVQ2
KSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0J
CQllcnJvciA9IDA7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
aWYgKGF2LT5hc3NvY192YWx1ZSA9PSBBRl9DT05OKSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0jZW5kaWYK
LQkJaWYgKGVycm9yKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCX0gZWxzZSB7Ci0JCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9HRVRfQVNTT0NfTlVNQkVSOgotCXsKLQkJdWludDMyX3QgKnZhbHVlLCBjbnQ7Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUp
OwotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCS8qIENhbid0IGRvIHRoaXMgZm9yIGEgMS0xIHNvY2tl
dCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQli
cmVhazsKLQkJfQotCQljbnQgPSAwOwotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9h
c29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQkJY250Kys7Ci0JCX0KLQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQkqdmFsdWUgPSBjbnQ7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90
KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfQVNTT0NfSURfTElTVDoKLQl7Ci0JCXN0
cnVjdCBzY3RwX2Fzc29jX2lkcyAqaWRzOwotCQl1aW50MzJfdCBhdDsKLQkJc2l6ZV90IGxpbWl0
OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaWRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29j
X2lkcywgKm9wdHNpemUpOwotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCS8qIENhbid0IGRvIHRoaXMg
Zm9yIGEgMS0xIHNvY2tldCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQlicmVhazsKLQkJfQotCQlhdCA9IDA7Ci0JCWxpbWl0ID0gKCpvcHRzaXpl
IC0gc2l6ZW9mKHVpbnQzMl90KSkgLyBzaXplb2Yoc2N0cF9hc3NvY190KTsKLQkJTElTVF9GT1JF
QUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCWlmIChh
dCA8IGxpbWl0KSB7Ci0JCQkJaWRzLT5nYWlkc19hc3NvY19pZFthdCsrXSA9IHNjdHBfZ2V0X2Fz
c29jaWQoc3RjYik7Ci0JCQkJaWYgKGF0ID09IDApIHsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQllcnJv
ciA9IEVJTlZBTDsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJaWRzLT5nYWlkc19u
dW1iZXJfb2ZfaWRzID0gYXQ7Ci0JCQkqb3B0c2l6ZSA9ICgoYXQgKiBzaXplb2Yoc2N0cF9hc3Nv
Y190KSkgKyBzaXplb2YodWludDMyX3QpKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQ
X0NPTlRFWFQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNp
emUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYg
KHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuY29udGV4dDsKLQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFz
c29jX3ZhbHVlID0gaW5wLT5zY3RwX2NvbnRleHQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJ
fQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9WUkZfSUQ6
Ci0JewotCQl1aW50MzJfdCAqZGVmYXVsdF92cmZpZDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGRlZmF1bHRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKLQkJKmRlZmF1bHRf
dnJmaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsK
LQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfQVNPQ19WUkY6Ci0JewotCQlzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqaWQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChpZCwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIGlkLT5hc3NvY19pZCk7Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCWVycm9yID0g
RUlOVkFMOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQl9IGVsc2UgewotCQkJaWQtPmFzc29jX3ZhbHVlID0g
c3RjYi0+YXNvYy52cmZfaWQ7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfVlJGX0lEUzoKLQl7
Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCWludCBzaXpfbmVlZGVkOwotCQl1aW50MzJfdCAqdnJmX2lk
czsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZyZl9pZHMsIG9wdHZhbCwgdWludDMyX3QsICpv
cHRzaXplKTsKLQkJc2l6X25lZWRlZCA9IGlucC0+bnVtX3ZyZnMgKiBzaXplb2YodWludDMyX3Qp
OwotCQlpZiAoKm9wdHNpemUgPCBzaXpfbmVlZGVkKSB7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIGVycm9yKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweSh2cmZfaWRzLCBpbnAtPm1fdnJmX2lk
cywgc2l6X25lZWRlZCk7Ci0JCQkqb3B0c2l6ZSA9IHNpel9uZWVkZWQ7Ci0JCX0KLSNlbHNlCi0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVPUE5PVFNVUFApOwotCQllcnJvciA9IEVPUE5PVFNVUFA7Ci0jZW5kaWYKLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9HRVRfTk9OQ0VfVkFMVUVTOgotCXsKLQkJc3RydWN0IHNjdHBfZ2V0
X25vbmNlX3ZhbHVlcyAqZ252OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZ252LCBvcHR2YWws
IHN0cnVjdCBzY3RwX2dldF9ub25jZV92YWx1ZXMsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBnbnYtPmduX2Fzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJZ252
LT5nbl9wZWVyc190YWcgPSBzdGNiLT5hc29jLnBlZXJfdnRhZzsKLQkJCWdudi0+Z25fbG9jYWxf
dGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJ
Km9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyk7Ci0JCX0gZWxz
ZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05OOwotCQl9Ci0JCWJyZWFr
OwotCX0KLQljYXNlIFNDVFBfREVMQVlFRF9TQUNLOgotCXsKLQkJc3RydWN0IHNjdHBfc2Fja19p
bmZvICpzYWNrOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9zYWNrX2luZm8sICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBz
YWNrLT5zYWNrX2Fzc29jX2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCXNhY2stPnNhY2tfZGVsYXkg
PSBzdGNiLT5hc29jLmRlbGF5ZWRfYWNrOwotCQkJc2Fjay0+c2Fja19mcmVxID0gc3RjYi0+YXNv
Yy5zYWNrX2ZyZXE7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAg
KHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJCQlzYWNrLT5zYWNrX2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAt
PnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSk7Ci0JCQkJc2Fjay0+
c2Fja19mcmVxID0gaW5wLT5zY3RwX2VwLnNjdHBfc2Fja19mcmVxOwotCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJ
TlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc2Fja19pbmZvKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQ
X0dFVF9TTkRCVUZfVVNFOgotCXsKLQkJc3RydWN0IHNjdHBfc29ja3N0YXQgKnNzOwotCi0JCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc3MsIG9wdHZhbCwgc3RydWN0IHNjdHBfc29ja3N0YXQsICpvcHRz
aXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcy0+c3NfYXNzb2NfaWQpOwotCi0J
CWlmIChzdGNiKSB7Ci0JCQlzcy0+c3NfdG90YWxfc25kYnVmID0gc3RjYi0+YXNvYy50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZTsKLQkJCXNzLT5zc190b3RhbF9yZWN2X2J1ZiA9IChzdGNiLT5hc29j
LnNpemVfb25fcmVhc21fcXVldWUgKwotCQkJCQkJIHN0Y2ItPmFzb2Muc2l6ZV9vbl9hbGxfc3Ry
ZWFtcyk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zb2Nrc3RhdCk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCQll
cnJvciA9IEVOT1RDT05OOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTUFYX0JVUlNU
OgotCXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkw
MDAwMAotCQl1aW50OF90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBv
cHR2YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKLQotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlp
ZiAoaW5wLT5zY3RwX2VwLm1heF9idXJzdCA8IDI1NikgewotCQkJKnZhbHVlID0gaW5wLT5zY3Rw
X2VwLm1heF9idXJzdDsKLQkJfSBlbHNlIHsKLQkJCSp2YWx1ZSA9IDI1NTsKLQkJfQotCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQ4X3QpOwotI2Vsc2UK
LQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlh
di0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKLQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0g
aW5wLT5zY3RwX2VwLm1heF9idXJzdDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0K
LQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlKTsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTUFYU0VH
OgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCQlpbnQgb3ZoOwotCi0JCVND
VFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpv
cHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0J
CWlmIChzdGNiKSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0
Y2IsICZzdGNiLT5hc29jKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsK
LQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJ
CSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JP
VU5EX1Y2KSB7Ci0JCQkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOwotCQkJCX0gZWxzZSB7Ci0J
CQkJCW92aCA9IFNDVFBfTUVEX1Y0X09WRVJIRUFEOwotCQkJCX0KLQkJCQlpZiAoaW5wLT5zY3Rw
X2ZyYWdfcG9pbnQgPj0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQpCi0JCQkJCWF2LT5hc3NvY192
YWx1ZSA9IDA7Ci0JCQkJZWxzZQotCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZnJh
Z19wb2ludCAtIG92aDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2Ugewot
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVy
cm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0dFVF9TVEFUX0xPRzoKLQkJZXJyb3Ig
PSBzY3RwX2ZpbGxfc3RhdF9sb2cob3B0dmFsLCBvcHRzaXplKTsKLQkJYnJlYWs7Ci0JY2FzZSBT
Q1RQX0VWRU5UUzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSAqZXZlbnRzOwot
Ci0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZlbnRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50
X3N1YnNjcmliZSwgKm9wdHNpemUpOwotCQltZW1zZXQoZXZlbnRzLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfZXZlbnRfc3Vic2NyaWJlKSk7Ci0JCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCWlmIChz
Y3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkpCi0J
CQlldmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKQotCQkJZXZlbnRzLT5zY3Rw
X2Fzc29jaWF0aW9uX2V2ZW50ID0gMTsKLQotCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVCkpCi0JCQlldmVudHMtPnNjdHBfYWRkcmVzc19l
dmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X1JFQ1ZTRU5ERkFJTEVWTlQpKQotCQkJZXZlbnRzLT5zY3RwX3NlbmRfZmFpbHVyZV9ldmVudCA9
IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQ
RUVSRVJSKSkKLQkJCWV2ZW50cy0+c2N0cF9wZWVyX2Vycm9yX2V2ZW50ID0gMTsKLQotCQlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCkp
Ci0JCQlldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQgPSAxOwotCi0JCWlmIChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpKQotCQkJZXZlbnRzLT5zY3Rw
X3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQgPSAxOwotCi0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCkpCi0JCQlldmVudHMtPnNjdHBfYWRh
cHRhdGlvbl9sYXllcl9ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5UKSkKLQkJCWV2ZW50cy0+c2N0cF9hdXRoZW50aWNhdGlv
bl9ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0RSWUVWTlQpKQotCQkJZXZlbnRzLT5zY3RwX3NlbmRlcl9kcnlfZXZlbnQgPSAxOwotCi0J
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRF
Vk5UKSkKLQkJCWV2ZW50cy0+c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgPSAxOwotCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1
YnNjcmliZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQURBUFRBVElPTl9MQVlFUjoKLQl7
Ci0JCXVpbnQzMl90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2
YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7Ci0KLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJKnZh
bHVlID0gaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yOwotCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdfU0VROgotCXsKLQkJdWludDMyX3QgKnZh
bHVlOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpv
cHRzaXplKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJKnZhbHVlID0gaW5wLT5zY3RwX2Vw
LmluaXRpYWxfc2VxdWVuY2VfZGVidWc7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJKm9w
dHNpemUgPSBzaXplb2YodWludDMyX3QpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0dFVF9M
T0NBTF9BRERSX1NJWkU6Ci0JewotCQl1aW50MzJfdCAqdmFsdWU7Ci0KLQkJU0NUUF9DSEVDS19B
TkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOwotCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOwotCQkqdmFsdWUgPSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXMoaW5wKTsKLQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX1JFTU9URV9BRERSX1NJWkU6Ci0JewotCQl1aW50
MzJfdCAqdmFsdWU7Ci0JCXNpemVfdCBzaXplOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUp
OwotCQkvKiBGSVhNRSBNVDogY2hhbmdlIHRvIHNjdHBfYXNzb2NfdmFsdWU/ICovCi0JCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgKHNjdHBfYXNzb2NfdCkgKnZhbHVlKTsKLQotCQlpZiAoc3Rj
YikgewotCQkJc2l6ZSA9IDA7Ci0JCQkvKiBDb3VudCB0aGUgc2l6ZXMgKi8KLQkJCVRBSUxRX0ZP
UkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQlzd2l0Y2ggKG5l
dC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9J
TkVUOgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJCQlzaXplICs9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNpemUgKz0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQkJCX0KLSNlbHNlCi0JCQkJCXNpemUgKz0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOwotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsK
LQkJCQl9Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqdmFsdWUgPSAodWlu
dDMyX3QpIHNpemU7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7Ci0JCX0gZWxzZSB7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFTk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05OOwotCQl9Ci0JCWJyZWFrOwot
CX0KLQljYXNlIFNDVFBfR0VUX1BFRVJfQUREUkVTU0VTOgotCQkvKgotCQkgKiBHZXQgdGhlIGFk
ZHJlc3MgaW5mb3JtYXRpb24sIGFuIGFycmF5IGlzIHBhc3NlZCBpbiB0bwotCQkgKiBmaWxsIHVw
IHdlIHBhY2sgaXQuCi0JCSAqLwotCXsKLQkJc2l6ZV90IGNwc3osIGxlZnQ7Ci0JCXN0cnVjdCBz
b2NrYWRkcl9zdG9yYWdlICpzYXM7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJc3RydWN0
IHNjdHBfZ2V0YWRkcmVzc2VzICpzYWRkcjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhZGRy
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHNhZGRyLT5zZ2V0X2Fzc29jX2lkKTsKLQotCQlpZiAoc3RjYikg
ewotCQkJbGVmdCA9ICgqb3B0c2l6ZSkgLSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2Vz
KTsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3Nlcyk7Ci0JCQlz
YXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikmc2FkZHItPmFkZHJbMF07Ci0KLQkJCVRB
SUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQlzd2l0
Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2Fz
ZSBBRl9JTkVUOgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJCQljcHN6ID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJY3BzeiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJCQl9Ci0jZWxzZQotCQkJCQljcHN6ID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRl
ZiBJTkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCWNwc3ogPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJY3BzeiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubik7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJY3BzeiA9
IDA7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoY3BzeiA9PSAwKSB7Ci0JCQkJCWJyZWFr
OwotCQkJCX0KLQkJCQlpZiAobGVmdCA8IGNwc3opIHsKLQkJCQkJLyogbm90IGVub3VnaCByb29t
LiAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElO
RVQ2KQotCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVF
RFNfTUFQUEVEX1Y0KSkgJiYKLQkJCQkgICAgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkg
PT0gQUZfSU5FVCkpIHsKLQkJCQkJLyogTXVzdCBtYXAgdGhlIGFkZHJlc3MgKi8KLQkJCQkJaW42
X3Npbl8yX3Y0bWFwc2luNigmbmV0LT5yby5fbF9hZGRyLnNpbiwKLQkJCQkJCQkgICAgKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilzYXMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW1lbWNweShzYXMsICZu
ZXQtPnJvLl9sX2FkZHIsIGNwc3opOwotCQkJCX0KLSNlbHNlCi0JCQkJbWVtY3B5KHNhcywgJm5l
dC0+cm8uX2xfYWRkciwgY3Bzeik7Ci0jZW5kaWYKLQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KXNhcyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0KLQkJCQlzYXMgPSAoc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgY3Bzeik7Ci0JCQkJbGVmdCAtPSBjcHN6Owot
CQkJCSpvcHRzaXplICs9IGNwc3o7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CX0gZWxzZSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9yID0gRU5PRU5UOwotCQl9
Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX0xPQ0FMX0FERFJFU1NFUzoKLQl7Ci0JCXNp
emVfdCBsaW1pdCwgYWN0dWFsOwotCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2FzOwotCQlz
dHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKnNhZGRyOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c2FkZHIsIG9wdHZhbCwgc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCAqb3B0c2l6ZSk7Ci0JCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgc2FkZHItPnNnZXRfYXNzb2NfaWQpOwotCi0JCXNhcyA9
IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSZzYWRkci0+YWRkclswXTsKLQkJbGltaXQgPSAq
b3B0c2l6ZSAtIHNpemVvZihzY3RwX2Fzc29jX3QpOwotCQlhY3R1YWwgPSBzY3RwX2ZpbGxfdXBf
YWRkcmVzc2VzKGlucCwgc3RjYiwgbGltaXQsIHNhcyk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0KLQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2UpICsgYWN0dWFsOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1BFRVJfQURE
Ul9QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFkZHJwOwotCQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKLSNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7
Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9wYWRkcnBhcmFtcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2Is
IHBhZGRycC0+c3BwX2Fzc29jX2lkKTsKLQotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJ
TkVUNikKLQkJaWYgKHBhZGRycC0+c3BwX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7
Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQlzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1B
UFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUs
IHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVz
czsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRy
cC0+c3BwX2FkZHJlc3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICop
JnBhZGRycC0+c3BwX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJ
bmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyogV2UgaW5j
cmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAotCQkJ
ICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9j
a2VkCi0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgot
CQkJICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCXN0
Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEws
IE5VTEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlu
cCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsK
LSNpZmRlZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KilhZGRyOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7Ci0J
CQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilh
ZGRyOwotCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgZXJyb3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09O
TikgewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJCXNjb25uID0gKHN0
cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0g
TlVMTCkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlm
Ci0JCQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChzdGNi
ICE9IE5VTEwpIHsKLQkJCS8qIEFwcGxpZXMgdG8gdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uICov
Ci0JCQlwYWRkcnAtPnNwcF9mbGFncyA9IDA7Ci0JCQlpZiAobmV0ICE9IE5VTEwpIHsKLQkJCQlw
YWRkcnAtPnNwcF9oYmludGVydmFsID0gbmV0LT5oZWFydF9iZWF0X2RlbGF5OwotCQkJCXBhZGRy
cC0+c3BwX3BhdGhtYXhyeHQgPSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkOwotCQkJCXBhZGRycC0+
c3BwX3BhdGhtdHUgPSBuZXQtPm10dTsKLQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5z
YV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotCQkJCQlwYWRkcnAt
PnNwcF9wYXRobXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotCQkJCQlicmVhazsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJcGFkZHJwLT5zcHBfcGF0
aG10dSAtPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlk
ZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogZ2V0IGZsYWdzIGZvciBIQiAqLwot
CQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgewotCQkJCQlwYWRkcnAt
PnNwcF9mbGFncyB8PSBTUFBfSEJfRElTQUJMRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwYWRkcnAt
PnNwcF9mbGFncyB8PSBTUFBfSEJfRU5BQkxFOwotCQkJCX0KLQkJCQkvKiBnZXQgZmxhZ3MgZm9y
IFBNVFUgKi8KLQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PX1BNVFVEKSB7
Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9ESVNBQkxFOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9FTkFCTEU7Ci0JCQkJfQot
CQkJCWlmIChuZXQtPmRzY3AgJiAweDAxKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2RzY3AgPSBuZXQt
PmRzY3AgJiAweGZjOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfRFNDUDsKLQkJCQl9
Ci0jaWZkZWYgSU5FVDYKLQkJCQlpZiAoKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0g
QUZfSU5FVDYpICYmCi0JCQkJICAgIChuZXQtPmZsb3dsYWJlbCAmIDB4ODAwMDAwMDApKSB7Ci0J
CQkJCXBhZGRycC0+c3BwX2lwdjZfZmxvd2xhYmVsID0gbmV0LT5mbG93bGFiZWwgJiAweDAwMGZm
ZmZmOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSVBWNl9GTE9XTEFCRUw7Ci0JCQkJ
fQotI2VuZGlmCi0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogTm8gZGVzdGluYXRpb24gc28g
cmV0dXJuIGRlZmF1bHQKLQkJCQkgKiB2YWx1ZQotCQkJCSAqLwotCQkJCXBhZGRycC0+c3BwX3Bh
dGhtYXhyeHQgPSBzdGNiLT5hc29jLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQlwYWRkcnAtPnNwcF9w
YXRobXR1ID0gMDsKLQkJCQlpZiAoc3RjYi0+YXNvYy5kZWZhdWx0X2RzY3AgJiAweDAxKSB7Ci0J
CQkJCXBhZGRycC0+c3BwX2RzY3AgPSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcCAmIDB4ZmM7Ci0J
CQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9EU0NQOwotCQkJCX0KLSNpZmRlZiBJTkVUNgot
CQkJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsICYgMHg4MDAwMDAwMCkgewotCQkJ
CQlwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFi
ZWwgJiAweDAwMGZmZmZmOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSVBWNl9GTE9X
TEFCRUw7Ci0JCQkJfQotI2VuZGlmCi0JCQkJLyogZGVmYXVsdCBzZXR0aW5ncyBzaG91bGQgYmUg
dGhlc2UgKi8KLQkJCQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQ
X1BDQl9GTEFHU19ET05PVF9IRUFSVEJFQVQpKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9
IFNQUF9IQl9ESVNBQkxFOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9
IFNQUF9IQl9FTkFCTEU7Ci0JCQkJfQotCQkJCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihp
bnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCkpIHsKLQkJCQkJcGFkZHJwLT5z
cHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0RJU0FCTEU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcGFkZHJw
LT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0VOQUJMRTsKLQkJCQl9Ci0JCQkJcGFkZHJwLT5zcHBf
aGJpbnRlcnZhbCA9IHN0Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheTsKLQkJCX0KLQkJCXBhZGRy
cC0+c3BwX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAocGFkZHJwLT5zcHBfYXNzb2NfaWQgPT0gU0NU
UF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJLyogVXNlIGVuZHBvaW50IGRlZmF1bHRzICovCi0JCQkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlwYWRkcnAtPnNwcF9wYXRobWF4cnh0ID0gaW5wLT5z
Y3RwX2VwLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQlwYWRkcnAtPnNwcF9oYmludGVydmFsID0gVElD
S1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFS
VEJFQVRdKTsKLQkJCQlwYWRkcnAtPnNwcF9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOwot
CQkJCS8qIGdldCBpbnAncyBkZWZhdWx0ICovCi0JCQkJaWYgKGlucC0+c2N0cF9lcC5kZWZhdWx0
X2RzY3AgJiAweDAxKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2RzY3AgPSBpbnAtPnNjdHBfZXAuZGVm
YXVsdF9kc2NwICYgMHhmYzsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0RTQ1A7Ci0J
CQkJfQotI2lmZGVmIElORVQ2Ci0JCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19CT1VORF9WNikgJiYKLQkJCQkgICAgKGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJl
bCAmIDB4ODAwMDAwMDApKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2lwdjZfZmxvd2xhYmVsID0gaW5w
LT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKLQkJCQkJcGFkZHJwLT5z
cHBfZmxhZ3MgfD0gU1BQX0lQVjZfRkxPV0xBQkVMOwotCQkJCX0KLSNlbmRpZgotCQkJCS8qIGNh
bid0IHJldHVybiB0aGlzICovCi0JCQkJcGFkZHJwLT5zcHBfcGF0aG10dSA9IDA7Ci0KLQkJCQlp
ZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVB
VCkpIHsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0VOQUJMRTsKLQkJCQl9IGVs
c2UgewotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRElTQUJMRTsKLQkJCQl9Ci0J
CQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1U
VUQpKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9FTkFCTEU7Ci0JCQkJ
fSBlbHNlIHsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0RJU0FCTEU7Ci0J
CQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkg
ewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMpOwotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPOgotCXsKLQkJc3RydWN0
IHNjdHBfcGFkZHJpbmZvICpwYWRkcmk7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJc3Ry
dWN0IHNvY2thZGRyICphZGRyOwotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikK
LQkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKLSNlbmRpZgotCi0JCVNDVFBfQ0hFQ0tf
QU5EX0NBU1QocGFkZHJpLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3BhZGRyaW5mbywgKm9wdHNpemUp
OwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHBhZGRyaS0+c3BpbmZvX2Fzc29jX2lkKTsK
LQotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJaWYgKHBhZGRyaS0+c3Bp
bmZvX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OwotCi0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcGFkZHJpLT5z
cGluZm9fYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9h
ZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOwotCQkJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJpLT5zcGluZm9fYWRkcmVzczsKLQkJCX0KLQkJfSBl
bHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRyaS0+c3BpbmZvX2FkZHJl
c3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRyaS0+c3Bp
bmZvX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJbmV0ID0gc2N0
cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyogV2UgaW5jcmVtZW50IGhl
cmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAotCQkJICogZG8gYSBk
ZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCi0JCQkg
KiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgotCQkJICovCi0J
CQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5VTEwpOwot
CQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQl9
Ci0JCX0KLQotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCAhPSBOVUxMKSkgewotCQkJaWYg
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgewotCQkJCS8qIEl0J3Mg
dW5jb25maXJtZWQgKi8KLQkJCQlwYWRkcmktPnNwaW5mb19zdGF0ZSA9IFNDVFBfVU5DT05GSVJN
RUQ7Ci0JCQl9IGVsc2UgaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUp
IHsKLQkJCQkvKiBJdCdzIGFjdGl2ZSAqLwotCQkJCXBhZGRyaS0+c3BpbmZvX3N0YXRlID0gU0NU
UF9BQ1RJVkU7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEl0J3MgaW5hY3RpdmUgKi8KLQkJCQlwYWRk
cmktPnNwaW5mb19zdGF0ZSA9IFNDVFBfSU5BQ1RJVkU7Ci0JCQl9Ci0JCQlwYWRkcmktPnNwaW5m
b19jd25kID0gbmV0LT5jd25kOwotCQkJcGFkZHJpLT5zcGluZm9fc3J0dCA9IG5ldC0+bGFzdHNh
ID4+IFNDVFBfUlRUX1NISUZUOwotCQkJcGFkZHJpLT5zcGluZm9fcnRvID0gbmV0LT5SVE87Ci0J
CQlwYWRkcmktPnNwaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JCQlw
YWRkcmktPnNwaW5mb19tdHUgPSBuZXQtPm10dTsKLQkJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5
KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQkJY2FzZSBBRl9JTkVUOgotCQkJCXBhZGRyaS0+c3Bp
bmZvX210dSAtPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lm
IGRlZmluZWQoSU5FVDYpCi0JCQljYXNlIEFGX0lORVQ2OgotCQkJCXBhZGRyaS0+c3BpbmZvX210
dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoK
LQkJCQlicmVhazsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCSpvcHRzaXpl
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRyaW5mbyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoc3Rj
YiAhPSBOVUxMKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJfQotCQkgICAgICAg
IFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVOT0VOVCk7Ci0JCQllcnJvciA9IEVOT0VOVDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2Fz
ZSBTQ1RQX1BDQl9TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wY2JpbmZvICpzcGNiOwotCi0J
CVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3BjYiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wY2JpbmZvLCAq
b3B0c2l6ZSk7Ci0JCXNjdHBfZmlsbF9wY2JpbmZvKHNwY2IpOwotCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wY2JpbmZvKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9TVEFUVVM6
Ci0JewotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzY3RwX3N0YXR1cyAqc3N0
YXQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9z
dGF0dXMsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzc3RhdC0+c3N0
YXRfYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNzdGF0LT5zc3RhdF9zdGF0ZSA9
IHNjdHBfbWFwX2Fzc29jX3N0YXRlKHN0Y2ItPmFzb2Muc3RhdGUpOwotCQlzc3RhdC0+c3N0YXRf
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlzc3RhdC0+c3N0YXRfcnduZCA9
IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLQkJc3N0YXQtPnNzdGF0X3VuYWNrZGF0YSA9IHN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9jbnQ7Ci0JCS8qCi0JCSAqIFdlIGNhbid0IGluY2x1ZGUgY2h1bmtz
IHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0bwotCQkgKiB0aGUgc29ja2V0IGxheWVyLiBPbmx5IHRo
aW5ncyBpbiBxdWV1ZS4KLQkJICovCi0JCXNzdGF0LT5zc3RhdF9wZW5kZGF0YSA9IChzdGNiLT5h
c29jLmNudF9vbl9yZWFzbV9xdWV1ZSArCi0JCQkJCSBzdGNiLT5hc29jLmNudF9vbl9hbGxfc3Ry
ZWFtcyk7Ci0KLQotCQlzc3RhdC0+c3N0YXRfaW5zdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5j
bnQ7Ci0JCXNzdGF0LT5zc3RhdF9vdXRzdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250Owot
CQlzc3RhdC0+c3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQo
c3RjYiwgJnN0Y2ItPmFzb2MpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCW1lbWNweSgmc3N0YXQt
PnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCi0JCSAgICAgICAmc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAotCQkgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHIg
KikoJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkcikpLT5zYV9sZW4p
OwotI2Vsc2UKLQkJaWYgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRk
ci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJbWVtY3B5KCZzc3RhdC0+c3N0YXRfcHJp
bWFyeS5zcGluZm9fYWRkcmVzcywKLQkJCSAgICAgICAmc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLT5yby5fbF9hZGRyLAotCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweSgmc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2Fk
ZHJlc3MsCi0JCQkgICAgICAgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xf
YWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQl9Ci0jZW5k
aWYKLQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkoKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKSZzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVzcyktPnNpbl9w
b3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCS8qCi0JCSAqIEFnYWluIHRoZSB1c2VyIGNhbiBnZXQgaW5m
byBmcm9tIHNjdHBfY29uc3RhbnRzLmgKLQkJICogZm9yIHdoYXQgdGhlIHN0YXRlIG9mIHRoZSBu
ZXR3b3JrIGlzLgotCQkgKi8KLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkgewotCQkJLyogSXQncyB1bmNvbmZpcm1lZCAqLwotCQkJc3N0YXQtPnNzdGF0X3By
aW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9VTkNPTkZJUk1FRDsKLQkJfSBlbHNlIGlmIChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7Ci0JCQkvKiBJdCdzIGFjdGl2ZSAq
LwotCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9BQ1RJVkU7Ci0J
CX0gZWxzZSB7Ci0JCQkvKiBJdCdzIGluYWN0aXZlICovCi0JCQlzc3RhdC0+c3N0YXRfcHJpbWFy
eS5zcGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOwotCQl9Ci0JCXNzdGF0LT5zc3RhdF9wcmlt
YXJ5LnNwaW5mb19jd25kID0gbmV0LT5jd25kOwotCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGlu
Zm9fc3J0dCA9IG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUOwotCQlzc3RhdC0+c3N0YXRf
cHJpbWFyeS5zcGluZm9fcnRvID0gbmV0LT5SVE87Ci0JCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNw
aW5mb19tdHUgPSBuZXQtPm10dTsKLQkJc3dpdGNoIChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb24tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQlj
YXNlIEFGX0lORVQ6Ci0JCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fbXR1IC09IFNDVFBf
TUlOX1Y0X09WRVJIRUFEOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQot
CQljYXNlIEFGX0lORVQ2OgotCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX210dSAtPSBT
Q1RQX01JTl9PVkVSSEVBRDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVh
azsKLQkJfQotCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYXNzb2NfaWQgPSBzY3RwX2dl
dF9hc3NvY2lkKHN0Y2IpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCSpvcHRzaXplID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUlRP
SU5GTzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3J0b2luZm8gKnNydG87Ci0KLQkJU0NUUF9DSEVDS19B
TkRfQ0FTVChzcnRvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3J0b2luZm8sICpvcHRzaXplKTsKLQkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcnRvLT5zcnRvX2Fzc29jX2lkKTsKLQotCQlpZiAo
c3RjYikgewotCQkJc3J0by0+c3J0b19pbml0aWFsID0gc3RjYi0+YXNvYy5pbml0aWFsX3J0bzsK
LQkJCXNydG8tPnNydG9fbWF4ID0gc3RjYi0+YXNvYy5tYXhydG87Ci0JCQlzcnRvLT5zcnRvX21p
biA9IHN0Y2ItPmFzb2MubWlucnRvOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVs
c2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8
fAotCQkJICAgIChzcnRvLT5zcnRvX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewot
CQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJc3J0by0+c3J0b19pbml0aWFsID0gaW5wLT5z
Y3RwX2VwLmluaXRpYWxfcnRvOwotCQkJCXNydG8tPnNydG9fbWF4ID0gaW5wLT5zY3RwX2VwLnNj
dHBfbWF4cnRvOwotCQkJCXNydG8tPnNydG9fbWluID0gaW5wLT5zY3RwX2VwLnNjdHBfbWlucnRv
OwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewot
CQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcnRvaW5mbyk7Ci0JCX0KLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9USU1FT1VUUzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3RpbWVvdXRzICpz
dGltbzsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHN0aW1vLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3RpbWVvdXRzLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3RpbW8t
PnN0aW1vX2Fzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJc3RpbW8tPnN0aW1vX2luaXQ9
IHN0Y2ItPmFzb2MudGltb2luaXQ7Ci0JCQlzdGltby0+c3RpbW9fZGF0YT0gc3RjYi0+YXNvYy50
aW1vZGF0YTsKLQkJCXN0aW1vLT5zdGltb19zYWNrPSBzdGNiLT5hc29jLnRpbW9zYWNrOwotCQkJ
c3RpbW8tPnN0aW1vX3NodXRkb3duPSBzdGNiLT5hc29jLnRpbW9zaHV0ZG93bjsKLQkJCXN0aW1v
LT5zdGltb19oZWFydGJlYXQ9IHN0Y2ItPmFzb2MudGltb2hlYXJ0YmVhdDsKLQkJCXN0aW1vLT5z
dGltb19jb29raWU9IHN0Y2ItPmFzb2MudGltb2Nvb2tpZTsKLQkJCXN0aW1vLT5zdGltb19zaHV0
ZG93bmFjaz0gc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2s7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF90aW1lb3V0cyk7Ci0JCX0g
ZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9BU1NPQ0lORk86Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFt
cyAqc2Fzb2M7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXNvYywgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9hc3NvY3BhcmFtcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2Is
IHNhc29jLT5zYXNvY19hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCXNhc29jLT5zYXNv
Y19jb29raWVfbGlmZSA9IFRJQ0tTX1RPX01TRUMoc3RjYi0+YXNvYy5jb29raWVfbGlmZSk7Ci0J
CQlzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCA9IHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXM7Ci0J
CQlzYXNvYy0+c2Fzb2NfbnVtYmVyX3BlZXJfZGVzdGluYXRpb25zID0gc3RjYi0+YXNvYy5udW1u
ZXRzOwotCQkJc2Fzb2MtPnNhc29jX3BlZXJfcnduZCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsK
LQkJCXNhc29jLT5zYXNvY19sb2NhbF9yd25kID0gc3RjYi0+YXNvYy5teV9yd25kOwotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChzYXNvYy0+c2Fzb2NfYXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJ
CQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBUSUNLU19UT19NU0VDKGlucC0+c2N0cF9lcC5k
ZWZfY29va2llX2xpZmUpOwotCQkJCXNhc29jLT5zYXNvY19hc29jbWF4cnh0ID0gaW5wLT5zY3Rw
X2VwLm1heF9zZW5kX3RpbWVzOwotCQkJCXNhc29jLT5zYXNvY19udW1iZXJfcGVlcl9kZXN0aW5h
dGlvbnMgPSAwOwotCQkJCXNhc29jLT5zYXNvY19wZWVyX3J3bmQgPSAwOwotCQkJCXNhc29jLT5z
YXNvY19sb2NhbF9yd25kID0gc2JzcGFjZSgmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKLQkJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpv
cHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jcGFyYW1zKTsKLQkJfQotCQlicmVhazsK
LQl9Ci0JY2FzZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTToKLQl7Ci0JCXN0cnVjdCBzY3RwX3Nu
ZHJjdmluZm8gKnNfaW5mbzsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNfaW5mbywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc19pbmZvLT5zaW5mb19hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCW1l
bWNweShzX2luZm8sICZzdGNiLT5hc29jLmRlZl9zZW5kLCBzaXplb2Yoc3RjYi0+YXNvYy5kZWZf
c2VuZCkpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChzX2lu
Zm8tPnNpbmZvX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7Ci0JCQkJbWVtY3B5KHNfaW5mbywgJmlucC0+ZGVmX3NlbmQsIHNpemVvZihp
bnAtPmRlZl9zZW5kKSk7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsK
LQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChl
cnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0lOSVRNU0c6Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9pbml0bXNnICpzaW5pdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNpbml0LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2luaXRtc2csICpvcHRzaXplKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQkJc2luaXQtPnNpbml0X251bV9vc3RyZWFtcyA9IGlucC0+c2N0cF9lcC5wcmVfb3Blbl9z
dHJlYW1fY291bnQ7Ci0JCXNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1zID0gaW5wLT5zY3RwX2Vw
Lm1heF9vcGVuX3N0cmVhbXNfaW50b21lOwotCQlzaW5pdC0+c2luaXRfbWF4X2F0dGVtcHRzID0g
aW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVzOwotCQlzaW5pdC0+c2luaXRfbWF4X2luaXRfdGlt
ZW8gPSBpbnAtPnNjdHBfZXAuaW5pdGlhbF9pbml0X3J0b19tYXg7Ci0JCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZyk7Ci0JCWJy
ZWFrOwotCX0KLQljYXNlIFNDVFBfUFJJTUFSWV9BRERSOgotCQkvKiB3ZSBhbGxvdyBhICJnZXQi
IG9wZXJhdGlvbiBvbiB0aGlzICovCi0JewotCQlzdHJ1Y3Qgc2N0cF9zZXRwcmltICpzc3A7Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3AsIG9wdHZhbCwgc3RydWN0IHNjdHBfc2V0cHJpbSwg
Km9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNzcC0+c3NwX2Fzc29jX2lk
KTsKLQotCQlpZiAoc3RjYikgewotCQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgKmFkZHI7Ci0KLQkJ
CWFkZHIgPSAmc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyOwotCQkJ
c3dpdGNoIChhZGRyLT5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lO
RVQ6Ci0jaWZkZWYgSU5FVDYKLQkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgewotCQkJCQlpbjZfc2luXzJfdjRtYXBzaW42KCZh
ZGRyLT5zaW4sCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kikmc3NwLT5zc3BfYWRkcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVtY3B5KCZzc3AtPnNzcF9h
ZGRyLCAmYWRkci0+c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JCQkJfQotI2Vs
c2UKLQkJCQltZW1jcHkoJnNzcC0+c3NwX2FkZHIsICZhZGRyLT5zaW4sIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKLSNlbmRpZgotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJbWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+c2lu
Niwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWNhc2UgQUZfQ09OTjoKLQkJCQltZW1jcHkoJnNz
cC0+c3NwX2FkZHIsICZhZGRyLT5zY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7
Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9z
ZXRwcmltKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsK
LQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0hNQUNfSURFTlQ6Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9obWFjYWxnbyAqc2htYWM7Ci0JCXNjdHBfaG1hY2xpc3RfdCAqaG1hY2xpc3Q7Ci0JCXVp
bnQzMl90IHNpemU7Ci0JCWludCBpOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2htYWMsIG9w
dHZhbCwgc3RydWN0IHNjdHBfaG1hY2FsZ28sICpvcHRzaXplKTsKLQotCQlTQ1RQX0lOUF9STE9D
SyhpbnApOwotCQlobWFjbGlzdCA9IGlucC0+c2N0cF9lcC5sb2NhbF9obWFjczsKLQkJaWYgKGht
YWNsaXN0ID09IE5VTEwpIHsKLQkJCS8qIG5vIEhNQUNzIHRvIHJldHVybiAqLwotCQkJKm9wdHNp
emUgPSBzaXplb2YoKnNobWFjKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWJyZWFr
OwotCQl9Ci0JCS8qIGlzIHRoZXJlIHJvb20gZm9yIGFsbCBvZiB0aGUgaG1hYyBpZHM/ICovCi0J
CXNpemUgPSBzaXplb2YoKnNobWFjKSArIChobWFjbGlzdC0+bnVtX2FsZ28gKgotCQkJCQkgc2l6
ZW9mKHNobWFjLT5zaG1hY19pZGVudHNbMF0pKTsKLQkJaWYgKChzaXplX3QpKCpvcHRzaXplKSA8
IHNpemUpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGNvcHkgaW4gdGhlIGxpc3QgKi8K
LQkJc2htYWMtPnNobWFjX251bWJlcl9vZl9pZGVudHMgPSBobWFjbGlzdC0+bnVtX2FsZ287Ci0J
CWZvciAoaSA9IDA7IGkgPCBobWFjbGlzdC0+bnVtX2FsZ287IGkrKykgewotCQkJc2htYWMtPnNo
bWFjX2lkZW50c1tpXSA9IGhtYWNsaXN0LT5obWFjW2ldOwotCQl9Ci0JCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJKm9wdHNpemUgPSBzaXplOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0FV
VEhfQUNUSVZFX0tFWToKLQl7Ci0JCXN0cnVjdCBzY3RwX2F1dGhrZXlpZCAqc2NhY3Q7Ci0KLQkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChzY2FjdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQs
ICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzY2FjdC0+c2NhY3RfYXNz
b2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBnZXQgdGhlIGFjdGl2ZSBrZXkgb24gdGhl
IGFzc29jICovCi0JCQlzY2FjdC0+c2NhY3Rfa2V5bnVtYmVyID0gc3RjYi0+YXNvYy5hdXRoaW5m
by5hY3RpdmVfa2V5aWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0J
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkg
ICAgKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQkv
KiBnZXQgdGhlIGVuZHBvaW50IGFjdGl2ZSBrZXkgKi8KLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJCXNjYWN0LT5zY2FjdF9rZXludW1iZXIgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9rZXlp
ZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsK
LQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCk7Ci0JCX0KLQkJYnJl
YWs7Ci0JfQotCWNhc2UgU0NUUF9MT0NBTF9BVVRIX0NIVU5LUzoKLQl7Ci0JCXN0cnVjdCBzY3Rw
X2F1dGhjaHVua3MgKnNhYzsKLQkJc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCA9IE5VTEw7
Ci0JCXNpemVfdCBzaXplID0gMDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhYywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc2FjLT5nYXV0aF9hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCS8qIGdl
dCBvZmYgdGhlIGFzc29jICovCi0JCQljaGtsaXN0ID0gc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2No
dW5rczsKLQkJCS8qIGlzIHRoZXJlIGVub3VnaCBzcGFjZT8gKi8KLQkJCXNpemUgPSBzY3RwX2F1
dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjaGtsaXN0KTsKLQkJCWlmICgqb3B0c2l6ZSA8IChzaXplb2Yo
c3RydWN0IHNjdHBfYXV0aGNodW5rcykgKyBzaXplKSkgewotCQkJCWVycm9yID0gRUlOVkFMOwot
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIGVycm9yKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogY29weSBpbiB0aGUgY2h1bmtzICov
Ci0JCQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hrbGlzdCwgc2FjLT5nYXV0
aF9jaHVua3MpOwotCQkJCXNhYy0+Z2F1dGhfbnVtYmVyX29mX2NodW5rcyA9ICh1aW50MzJfdClz
aXplOwotCQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6
ZTsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoc2Fj
LT5nYXV0aF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQkvKiBnZXQgb2Zm
IHRoZSBlbmRwb2ludCAqLwotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJY2hrbGlzdCA9
IGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rczsKLQkJCQkvKiBpcyB0aGVyZSBlbm91Z2gg
c3BhY2U/ICovCi0JCQkJc2l6ZSA9IHNjdHBfYXV0aF9nZXRfY2hrbGlzdF9zaXplKGNoa2xpc3Qp
OwotCQkJCWlmICgqb3B0c2l6ZSA8IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykgKyBz
aXplKSkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLwotCQkJCQkodm9pZClzY3RwX3Nlcmlh
bGl6ZV9hdXRoX2NodW5rcyhjaGtsaXN0LCBzYWMtPmdhdXRoX2NodW5rcyk7Ci0JCQkJCXNhYy0+
Z2F1dGhfbnVtYmVyX29mX2NodW5rcyA9ICh1aW50MzJfdClzaXplOwotCQkJCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7Ci0JCQkJfQotCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJv
ciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1BFRVJfQVVU
SF9DSFVOS1M6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICpzYWM7Ci0JCXNjdHBfYXV0
aF9jaGtsaXN0X3QgKmNoa2xpc3QgPSBOVUxMOwotCQlzaXplX3Qgc2l6ZSA9IDA7Ci0KLQkJU0NU
UF9DSEVDS19BTkRfQ0FTVChzYWMsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNodW5rcywgKm9w
dHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhYy0+Z2F1dGhfYXNzb2NfaWQp
OwotCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBnZXQgb2ZmIHRoZSBhc3NvYyAqLwotCQkJY2hrbGlz
dCA9IHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rczsKLQkJCS8qIGlzIHRoZXJlIGVub3VnaCBz
cGFjZT8gKi8KLQkJCXNpemUgPSBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjaGtsaXN0KTsK
LQkJCWlmICgqb3B0c2l6ZSA8IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykgKyBzaXpl
KSkgewotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCX0gZWxzZSB7Ci0J
CQkJLyogY29weSBpbiB0aGUgY2h1bmtzICovCi0JCQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfYXV0
aF9jaHVua3MoY2hrbGlzdCwgc2FjLT5nYXV0aF9jaHVua3MpOwotCQkJCXNhYy0+Z2F1dGhfbnVt
YmVyX29mX2NodW5rcyA9ICh1aW50MzJfdClzaXplOwotCQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZTsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJfSBlbHNlIHsKLQkJICAgICAgICBTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9FTlQpOwotCQkJZXJyb3IgPSBFTk9F
TlQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09D
S09QVCkKLQljYXNlIFNDVFBfUEVFTE9GRjoKLQl7Ci0JCXN0cnVjdCBzY3RwX3BlZWxvZmZfb3B0
ICpwZWVsb2ZmOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QocGVlbG9mZiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9wZWVsb2ZmX29wdCwgKm9wdHNpemUpOwotCQkvKiBkbyB0aGUgcGVlbG9mZiAqLwot
CQllcnJvciA9IHNjdHBfcGVlbG9mZl9vcHRpb24ocCwgcGVlbG9mZik7Ci0JCWlmIChlcnJvciA9
PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCk7Ci0J
CX0KLQl9Ci0JYnJlYWs7Ci0jZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCAqLwot
CWNhc2UgU0NUUF9FVkVOVDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2V2ZW50ICpldmVudDsKLQkJdWlu
dDMyX3QgZXZlbnRfdHlwZTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGV2ZW50LCBvcHR2YWws
IHN0cnVjdCBzY3RwX2V2ZW50LCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgZXZlbnQtPnNlX2Fzc29jX2lkKTsKLQotCQlzd2l0Y2ggKGV2ZW50LT5zZV90eXBlKSB7Ci0J
CWNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1Nf
UkVDVkFTU09DRVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUEVFUl9BRERSX0NIQU5HRToK
LQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UOwotCQkJYnJlYWs7
Ci0JCWNhc2UgU0NUUF9SRU1PVEVfRVJST1I6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxB
R1NfUkVDVlBFRVJFUlI7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEOgotCQkJ
ZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQ7Ci0JCQlicmVhazsK
LQkJY2FzZSBTQ1RQX1NIVVRET1dOX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZM
QUdTX1JFQ1ZTSFVURE9XTkVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0FEQVBUQVRJT05f
SU5ESUNBVElPTjoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZO
VDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVDoKLQkJCWV2
ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBT
Q1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdT
X0FVVEhFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ6Ci0J
CQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVDsKLQkJCWJyZWFr
OwotCQljYXNlIFNDVFBfU0VOREVSX0RSWV9FVkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BD
Ql9GTEFHU19EUllFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NU
T1BQRURfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gMDsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1RTVVApOwotCQkJZXJy
b3IgPSBFTk9UU1VQOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDoK
LQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BU1NPQ19SRVNFVEVWTlQ7Ci0JCQlicmVh
azsKLQkJY2FzZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfU1RSRUFNX0NIQU5HRUVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NF
TkRfRkFJTEVEX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VO
REZBSUxFVk5UOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlldmVudF90eXBlID0gMDsKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChl
dmVudF90eXBlID4gMCkgewotCQkJaWYgKHN0Y2IpIHsKLQkJCQlldmVudC0+c2Vfb24gPSBzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCQkgICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQkJ
ZXZlbnQtPnNlX29uID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgZXZlbnRfdHlwZSk7Ci0JCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQl9IGVsc2UgewotCQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDAp
IHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KTsKLQkJfQotCQlicmVh
azsKLQl9Ci0JY2FzZSBTQ1RQX1JFQ1ZSQ1ZJTkZPOgotCXsKLQkJaW50IG9ub2ZmOwotCi0JCWlm
ICgqb3B0c2l6ZSA8IHNpemVvZihpbnQpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJb25vZmYgPSBz
Y3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTyk7Ci0JCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCS8qIHJl
dHVybiB0aGUgb3B0aW9uIHZhbHVlICovCi0JCQkqKGludCAqKW9wdHZhbCA9IG9ub2ZmOwotCQkJ
Km9wdHNpemUgPSBzaXplb2YoaW50KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JF
Q1ZOWFRJTkZPOgotCXsKLQkJaW50IG9ub2ZmOwotCi0JCWlmICgqb3B0c2l6ZSA8IHNpemVvZihp
bnQpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0gZWxzZSB7Ci0J
CQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJb25vZmYgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTyk7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCS8qIHJldHVybiB0aGUgb3B0aW9uIHZhbHVl
ICovCi0JCQkqKGludCAqKW9wdHZhbCA9IG9ub2ZmOwotCQkJKm9wdHNpemUgPSBzaXplb2YoaW50
KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0RFRkFVTFRfU05ESU5GTzoKLQl7Ci0J
CXN0cnVjdCBzY3RwX3NuZGluZm8gKmluZm87Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChpbmZv
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZGluZm8sICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBpbmZvLT5zbmRfYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlp
bmZvLT5zbmRfc2lkID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19zdHJlYW07Ci0JCQlpbmZv
LT5zbmRfZmxhZ3MgPSBzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzOwotCQkJaW5mby0+
c25kX2ZsYWdzICY9IDB4ZmZmMDsKLQkJCWluZm8tPnNuZF9wcGlkID0gc3RjYi0+YXNvYy5kZWZf
c2VuZC5zaW5mb19wcGlkOwotCQkJaW5mby0+c25kX2NvbnRleHQgPSBzdGNiLT5hc29jLmRlZl9z
ZW5kLnNpbmZvX2NvbnRleHQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7
Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0J
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0J
CQkgICAgKGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlT
Q1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWluZm8tPnNuZF9zaWQgPSBpbnAtPmRlZl9zZW5kLnNp
bmZvX3N0cmVhbTsKLQkJCQlpbmZvLT5zbmRfZmxhZ3MgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2Zs
YWdzOwotCQkJCWluZm8tPnNuZF9mbGFncyAmPSAweGZmZjA7Ci0JCQkJaW5mby0+c25kX3BwaWQg
PSBpbnAtPmRlZl9zZW5kLnNpbmZvX3BwaWQ7Ci0JCQkJaW5mby0+c25kX2NvbnRleHQgPSBpbnAt
PmRlZl9zZW5kLnNpbmZvX2NvbnRleHQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJ
fSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9
Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9z
bmRpbmZvKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0RFRkFVTFRfUFJJTkZPOgot
CXsKLQkJc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gKmluZm87Ci0KLQkJU0NUUF9DSEVDS19B
TkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvLCAqb3B0c2l6
ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+cHJfYXNzb2NfaWQpOwotCi0J
CWlmIChzdGNiKSB7Ci0JCQlpbmZvLT5wcl9wb2xpY3kgPSBQUl9TQ1RQX1BPTElDWShzdGNiLT5h
c29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKLQkJCWluZm8tPnByX3ZhbHVlID0gc3RjYi0+YXNv
Yy5kZWZfc2VuZC5zaW5mb190aW1ldG9saXZlOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSB8fAotCQkJICAgIChpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykp
IHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWluZm8tPnByX3BvbGljeSA9IFBSX1ND
VFBfUE9MSUNZKGlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MpOwotCQkJCWluZm8tPnByX3ZhbHVl
ID0gaW5wLT5kZWZfc2VuZC5zaW5mb190aW1ldG9saXZlOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfZGVmYXVsdF9wcmluZm8pOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBf
UEVFUl9BRERSX1RITERTOgotCXsKLQkJc3RydWN0IHNjdHBfcGFkZHJ0aGxkcyAqdGhsZHM7Ci0J
CXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9z
dG9yZTsKLSNlbmRpZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodGhsZHMsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfcGFkZHJ0aGxkcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0
Y2IsIHRobGRzLT5zcHRfYXNzb2NfaWQpOwotCi0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVk
KElORVQ2KQotCQlpZiAodGhsZHMtPnNwdF9hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikg
ewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopJnRobGRzLT5zcHRfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1B
UFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUs
IHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNz
OwotCQkJfQotCQl9IGVsc2UgewotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMt
PnNwdF9hZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZ0
aGxkcy0+c3B0X2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJbmV0
ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyogV2UgaW5jcmVt
ZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAotCQkJICog
ZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2Vk
Ci0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgotCQkJ
ICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCXN0Y2Ig
PSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5V
TEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
Ci0JCQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKLSNp
ZmRlZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilh
ZGRyOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7Ci0JCQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVy
cm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZmRlZiBJTkVU
NgotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7Ci0KLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRy
OwotCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsK
LQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgZXJyb3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikg
ewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJCXNjb25uID0gKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVM
TCkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0J
CQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCWlmIChzdGNiICE9
IE5VTEwpIHsKLQkJCWlmIChuZXQgIT0gTlVMTCkgewotCQkJCXRobGRzLT5zcHRfcGF0aG1heHJ4
dCA9IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQ7Ci0JCQkJdGhsZHMtPnNwdF9wYXRocGZ0aGxkID0g
bmV0LT5wZl90aHJlc2hvbGQ7Ci0JCQkJdGhsZHMtPnNwdF9wYXRoY3B0aGxkID0gMHhmZmZmOwot
CQkJfSBlbHNlIHsKLQkJCQl0aGxkcy0+c3B0X3BhdGhtYXhyeHQgPSBzdGNiLT5hc29jLmRlZl9u
ZXRfZmFpbHVyZTsKLQkJCQl0aGxkcy0+c3B0X3BhdGhwZnRobGQgPSBzdGNiLT5hc29jLmRlZl9u
ZXRfcGZfdGhyZXNob2xkOwotCQkJCXRobGRzLT5zcHRfcGF0aGNwdGhsZCA9IDB4ZmZmZjsKLQkJ
CX0KLQkJCXRobGRzLT5zcHRfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgICh0aGxkcy0+c3B0X2Fzc29j
X2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCS8qIFVzZSBlbmRwb2ludCBkZWZhdWx0
cyAqLwotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJdGhsZHMtPnNwdF9wYXRobWF4cnh0
ID0gaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQl0aGxkcy0+c3B0X3BhdGhwZnRo
bGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0JCQkJdGhsZHMtPnNwdF9w
YXRoY3B0aGxkID0gMHhmZmZmOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlp
ZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJ0
aGxkcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19Q
T1JUOgotCXsKLQkJc3RydWN0IHNjdHBfdWRwZW5jYXBzICplbmNhcHM7Ci0JCXN0cnVjdCBzY3Rw
X25ldHMgKm5ldDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lmIGRlZmluZWQoSU5FVCkg
JiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKLSNlbmRp
ZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZW5jYXBzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3Vk
cGVuY2FwcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGVuY2Fwcy0+
c3VlX2Fzc29jX2lkKTsKLQotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJ
aWYgKGVuY2Fwcy0+c3VlX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KikmZW5jYXBzLT5zdWVfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2lu
Ni0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOwot
CQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0gZWxzZSB7Ci0J
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBzLT5zdWVfYWRkcmVzczsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmVuY2Fwcy0+c3VlX2Fk
ZHJlc3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmVuY2Fwcy0+
c3VlX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IpIHsKLQkJCW5ldCA9IHNjdHBfZmluZG5l
dChzdGNiLCBhZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNl
IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50
IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAotCQkJICogdGNiIChs
YXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJCSAqLwotCQkJbmV0ID0g
TlVMTDsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCQlzdGNiID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJCWlmIChz
dGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQotCQl9Ci0J
CWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7Ci0jaWZkZWYgSU5FVAotCQkJ
aWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47Ci0KLQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewotCQkJCQllcnJvciA9IEVJTlZB
TDsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJy
ZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCWlmIChhZGRy
LT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLQkJCQlpZiAoIUlO
Nl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkJCWVycm9yID0g
RUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJ
CQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKLQkJCQlzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqKWFkZHI7Ci0JCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsKLQkJCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3Ip
OwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJewotCQkJCWVycm9y
ID0gRUFGTk9TVVBQT1JUOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJv
cik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlp
ZiAobmV0KSB7Ci0JCQkJZW5jYXBzLT5zdWVfcG9ydCA9IG5ldC0+cG9ydDsKLQkJCX0gZWxzZSB7
Ci0JCQkJZW5jYXBzLT5zdWVfcG9ydCA9IHN0Y2ItPmFzb2MucG9ydDsKLQkJCX0KLQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoZW5jYXBzLT5zdWVfYXNzb2NfaWQg
PT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQll
bmNhcHMtPnN1ZV9wb3J0ID0gaW5wLT5zY3RwX2VwLnBvcnQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFM
OwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfRUNO
X1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlp
ZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVk
OwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJ
CQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmVjbl9zdXBwb3J0ZWQ7Ci0JCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlO
VkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NU
UF9QUl9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwg
Km9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0K
LQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MucHJzY3RwX3N1
cHBvcnRlZDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5wcnNjdHBfc3VwcG9ydGVkOwotCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfQVVUSF9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5h
c3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFz
b2MuYXV0aF9zdXBwb3J0ZWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7
Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0J
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0J
CQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lO
UF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+YXV0aF9zdXBwb3J0ZWQ7
Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0J
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJl
YWs7Ci0JfQotCWNhc2UgU0NUUF9BU0NPTkZfU1VQUE9SVEVEOgotCXsKLQkJc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUg
PSBzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsK
LQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+YXNj
b25mX3N1cHBvcnRlZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2Ugewot
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVy
cm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JFQ09ORklHX1NVUFBPUlRFRDoKLQl7
Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJ
YXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5yZWNvbmZpZ19zdXBwb3J0ZWQ7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3Nv
Y192YWx1ZSA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTlJT
QUNLX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAq
b3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQot
CQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5ucnNhY2tfc3Vw
cG9ydGVkOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+
YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7Ci0JCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6
ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9QS1REUk9QX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYt
PmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+
YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBl
bHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5wa3Rkcm9wX3N1
cHBvcnRlZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09
IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKLQkJ
fQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQ6Ci0JewotCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5h
c3NvY192YWx1ZSA9ICh1aW50MzJfdClzdGNiLT5hc29jLmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7
Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19p
ZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJ
CWF2LT5hc3NvY192YWx1ZSA9ICh1aW50MzJfdClpbnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7
Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0J
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJl
YWs7Ci0JfQotCWNhc2UgU0NUUF9QUl9TVFJFQU1fU1RBVFVTOgotCXsKLQkJc3RydWN0IHNjdHBf
cHJzdGF0dXMgKnNwcnN0YXQ7Ci0JCXVpbnQxNl90IHNpZDsKLQkJdWludDE2X3QgcG9saWN5Owot
Ci0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3Byc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wcnN0
YXR1cywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNwcnN0YXQtPnNw
cnN0YXRfYXNzb2NfaWQpOwotCi0JCXNpZCA9IHNwcnN0YXQtPnNwcnN0YXRfc2lkOwotCQlwb2xp
Y3kgPSBzcHJzdGF0LT5zcHJzdGF0X3BvbGljeTsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURf
U1RSX1NUQVRTKQotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYKLQkJICAgIChzaWQgPCBzdGNiLT5h
c29jLnN0cmVhbW91dGNudCkgJiYKLQkJICAgIChwb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUp
ICYmCi0JCSAgICAoKHBvbGljeSA8PSBTQ1RQX1BSX1NDVFBfTUFYKSB8fAotCQkgICAgIChwb2xp
Y3kgPT0gU0NUUF9QUl9TQ1RQX0FMTCkpKSB7Ci0JCQlpZiAocG9saWN5ID09IFNDVFBfUFJfU0NU
UF9BTEwpIHsKLQkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5h
c29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50WzBdOwotCQkJCXNwcnN0YXQtPnNwcnN0
YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfc2Vu
dFswXTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5zZW50
ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFtwb2xpY3ldOwotCQkJ
CXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lk
XS5hYmFuZG9uZWRfc2VudFtwb2xpY3ldOwotCQkJfQotI2Vsc2UKLQkJaWYgKChzdGNiICE9IE5V
TEwpICYmCi0JCSAgICAoc2lkIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpICYmCi0JCSAgICAo
cG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpKSB7Ci0JCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5k
b25lZF91bnNlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50WzBd
OwotCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfc2VudCA9IHN0Y2ItPmFzb2Muc3RybW91
dFtzaWRdLmFiYW5kb25lZF9zZW50WzBdOwotI2VuZGlmCi0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyk7Ci0JCX0gZWxz
ZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0J
fQotCWNhc2UgU0NUUF9QUl9BU1NPQ19TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wcnN0YXR1
cyAqc3Byc3RhdDsKLQkJdWludDE2X3QgcG9saWN5OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c3Byc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wcnN0YXR1cywgKm9wdHNpemUpOwotCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNwcnN0YXQtPnNwcnN0YXRfYXNzb2NfaWQpOwotCi0JCXBv
bGljeSA9IHNwcnN0YXQtPnNwcnN0YXRfcG9saWN5OwotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYK
LQkJICAgIChwb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCi0JCSAgICAoKHBvbGljeSA8
PSBTQ1RQX1BSX1NDVFBfTUFYKSB8fAotCQkgICAgIChwb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX0FM
TCkpKSB7Ci0JCQlpZiAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpIHsKLQkJCQlzcHJzdGF0
LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29jLmFiYW5kb25lZF91bnNlbnRb
MF07Ci0JCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfc2VudCA9IHN0Y2ItPmFzb2MuYWJh
bmRvbmVkX3NlbnRbMF07Ci0JCQl9IGVsc2UgewotCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRv
bmVkX3Vuc2VudCA9IHN0Y2ItPmFzb2MuYWJhbmRvbmVkX3Vuc2VudFtwb2xpY3ldOwotCQkJCXNw
cnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLmFiYW5kb25lZF9zZW50
W3BvbGljeV07Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9NQVhf
Q1dORDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7
Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3Rj
YikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5tYXhfY3duZDsKLQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBf
RlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29j
X3ZhbHVlID0gaW5wLT5tYXhfY3duZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0K
LQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9P
UFQpOwotCQllcnJvciA9IEVOT1BST1RPT1BUOwotCQlicmVhazsKLQl9IC8qIGVuZCBzd2l0Y2gg
KHNvcHQtPnNvcHRfbmFtZSkgKi8KLQlpZiAoZXJyb3IpIHsKLQkJKm9wdHNpemUgPSAwOwotCX0K
LQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi1pbnQKLSNlbHNlCi1zdGF0aWMgaW50Ci0jZW5kaWYKLXNjdHBfc2V0
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qg
b3B0c2l6ZSwKLQkgICAgdm9pZCAqcCkKLXsKLQlpbnQgZXJyb3IsIHNldF9vcHQ7Ci0JdWludDMy
X3QgKm1vcHQ7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wID0gTlVMTDsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0KLQlpZiAob3B0dmFsID09IE5V
TEwpIHsKLQkJU0NUUF9QUklOVEYoIm9wdHZhbCBpcyBOVUxMXG4iKTsKLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
LQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+
c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX1BSSU5URigiaW5wIGlzIE5VTEw/
XG4iKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQl2cmZfaWQgPSBp
bnAtPmRlZl92cmZfaWQ7Ci0KLQllcnJvciA9IDA7Ci0Jc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2Fz
ZSBTQ1RQX05PREVMQVk6Ci0JY2FzZSBTQ1RQX0FVVE9DTE9TRToKLQljYXNlIFNDVFBfQVVUT19B
U0NPTkY6Ci0JY2FzZSBTQ1RQX0VYUExJQ0lUX0VPUjoKLQljYXNlIFNDVFBfRElTQUJMRV9GUkFH
TUVOVFM6Ci0JY2FzZSBTQ1RQX1VTRV9FWFRfUkNWSU5GTzoKLQljYXNlIFNDVFBfSV9XQU5UX01B
UFBFRF9WNF9BRERSOgotCQkvKiBjb3B5IGluIHRoZSBvcHRpb24gdmFsdWUgKi8KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChtb3B0LCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJc2V0X29w
dCA9IDA7Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOwotCQlzd2l0Y2ggKG9wdG5hbWUpIHsKLQkJ
Y2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgotCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdT
X05PX0ZSQUdNRU5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoKLQkJCS8q
Ci0JCQkgKiBOT1RFOiB3ZSBkb24ndCByZWFsbHkgc3VwcG9ydCB0aGlzIGZsYWcKLQkJCSAqLwot
CQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCQkJ
Lyogb25seSB2YWxpZCBmb3IgYm91bmQgYWxsIHNvY2tldHMgKi8KLQkJCQlpZiAoKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZikgPT0gMCkgJiYKLQkJCQkgICAgKCptb3B0ICE9IDAp
KSB7Ci0JCQkJCS8qIGZvcmJpZGRlbiBieSBhZG1pbiAqLwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFUEVSTSk7Ci0JCQkJ
CXJldHVybiAoRVBFUk0pOwotCQkJCX0KLQkJCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfQVVU
T19BU0NPTkY7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5W
QUwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FWFBMSUNJVF9FT1I6Ci0JCQlzZXRf
b3B0ID0gU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9VU0VfRVhUX1JDVklORk86Ci0JCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfRVhUX1JDVklO
Rk87Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUjoKLQkJCWlm
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQkJCXNldF9v
cHQgPSBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQ7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9OT0RFTEFZOgotCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX05PREVMQVk7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX0FVVE9DTE9TRToKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCXJldHVybiAo
RUlOVkFMKTsKLQkJCX0KLQkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0U7Ci0J
CQkvKgotCQkJICogVGhlIHZhbHVlIGlzIGluIHRpY2tzLiBOb3RlIHRoaXMgZG9lcyBub3QgZWZm
ZWN0Ci0JCQkgKiBvbGQgYXNzb2NpYXRpb25zLCBvbmx5IG5ldyBvbmVzLgotCQkJICovCi0JCQlp
bnAtPnNjdHBfZXAuYXV0b19jbG9zZV90aW1lID0gU0VDX1RPX1RJQ0tTKCptb3B0KTsKLQkJCWJy
ZWFrOwotCQl9Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmICgqbW9wdCAhPSAwKSB7Ci0J
CQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBzZXRfb3B0KTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVh
dHVyZV9vZmYoaW5wLCBzZXRfb3B0KTsKLQkJfQotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9SRVVTRV9QT1JUOgotCXsKLQkJU0NUUF9DSEVDS19BTkRfQ0FT
VChtb3B0LCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSAgPT0gMCkgewotCQkJLyogQ2FuJ3Qgc2V0IGl0
IGFmdGVyIHdlIGFyZSBib3VuZCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJ
fQotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpKSB7Ci0J
CQkvKiBDYW4ndCBkbyB0aGlzIGZvciBhIDEtbSBzb2NrZXQgKi8KLQkJCWVycm9yID0gRUlOVkFM
OwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG9wdHZhbCkKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSk7Ci0JCWVsc2UKLQkJCXNjdHBfZmVhdHVyZV9vZmYo
aW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQ
X1BBUlRJQUxfREVMSVZFUllfUE9JTlQ6Ci0JewotCQl1aW50MzJfdCAqdmFsdWU7Ci0KLQkJU0NU
UF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCWlm
ICgqdmFsdWUgPiBTQ1RQX1NCX0xJTUlUX1JDVihzbykpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQll
cnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlucC0+cGFydGlhbF9kZWxpdmVyeV9w
b2ludCA9ICp2YWx1ZTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9GUkFHTUVOVF9JTlRFUkxF
QVZFOgotCQkvKiBub3QgeWV0IHVudGlsIHdlIHJlLXdyaXRlIHNjdHBfcmVjdm1zZygpICovCi0J
ewotCQl1aW50MzJfdCAqbGV2ZWw7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChsZXZlbCwgb3B0
dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCWlmICgqbGV2ZWwgPT0gU0NUUF9GUkFHX0xFVkVM
XzIpIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJM
RUFWRSk7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxFQVZF
X1NUUk1TKTsKLQkJfSBlbHNlIGlmICgqbGV2ZWwgPT0gU0NUUF9GUkFHX0xFVkVMXzEpIHsKLQkJ
CXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7Ci0J
CQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7
Ci0JCX0gZWxzZSBpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8wKSB7Ci0JCQlzY3RwX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKTsKLQkJCXNjdHBf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxFQVZFX1NUUk1TKTsKLQotCQl9
IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9Ci0JCWJyZWFr
OwotCX0KLQljYXNlIFNDVFBfSU5URVJMRUFWSU5HX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWws
IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7
Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0J
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0J
CQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lO
UF9XTE9DSyhpbnApOwotCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgewotCQkJCQlpbnAt
PmlkYXRhX3N1cHBvcnRlZCA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpKSAgJiYKLQkJCQkJ
ICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxFQVZFX1NU
Uk1TKSkpIHsKLQkJCQkJCWlucC0+aWRhdGFfc3VwcG9ydGVkID0gMTsKLQkJCQkJfSBlbHNlIHsK
LQkJCQkJCS8qIE11c3QgaGF2ZSBGcmFnIGludGVybGVhdmUgYW5kIHN0cmVhbSBpbnRlcmxlYXZl
IG9uICovCi0JCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCX0K
LQkJCQl9Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfQ01UX09OX09GRjoKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25f
b2ZmKSkgewotCQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsK
LQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPiBTQ1RQX0NNVF9NQVgpIHsKLQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQotCQkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCQkJaWYgKHN0Y2IpIHsKLQkJCQlzdGNiLT5h
c29jLnNjdHBfY210X29uX29mZiA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRV
UkVfQVNTT0MpIHx8Ci0JCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7
Ci0JCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJCWlucC0+c2N0cF9jbXRfb25fb2ZmID0g
YXYtPmFzc29jX3ZhbHVlOwotCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJfQotCQkJ
CWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCQkgICAgKGF2
LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQkJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QpIHsKLQkJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCQlzdGNiLT5hc29jLnNj
dHBfY210X29uX29mZiA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJCQkJfQotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJfQotCQkJfQot
CQl9IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOwotCQkJZXJyb3IgPSBFTk9QUk9UT09QVDsK
LQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfUExVR0dBQkxFX0NDOgotCXsKLQkJc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgKmF2OwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6
ZSk7Ci0JCWlmICgoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfQ0NfUkZDMjU4MSkgJiYKLQkJICAg
IChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9DQ19IU1RDUCkgJiYKLQkJICAgIChhdi0+YXNzb2Nf
dmFsdWUgIT0gU0NUUF9DQ19IVENQKSAmJgotCQkgICAgKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQ
X0NDX1JUQ0MpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVh
azsKLQkJfQotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0JCWlm
IChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucyA9IHNjdHBfY2NfZnVuY3Rpb25z
W2F2LT5hc3NvY192YWx1ZV07Ci0JCQlzdGNiLT5hc29jLmNvbmdlc3Rpb25fY29udHJvbF9tb2R1
bGUgPSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9zZXRfaW5pdGlhbF9jY19wYXJhbSAhPSBOVUxMKSB7Ci0JCQkJVEFJTFFfRk9SRUFDSChuZXQs
ICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQlzdGNiLT5hc29jLmNjX2Z1bmN0
aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7Ci0JCQkJfQotCQkJfQot
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQg
PT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FM
TF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlucC0+c2N0cF9lcC5z
Y3RwX2RlZmF1bHRfY2NfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9B
U1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJ
CVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBf
YXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJ
CQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMgPSBzY3RwX2NjX2Z1bmN0aW9uc1thdi0+YXNzb2Nf
dmFsdWVdOwotCQkJCQlzdGNiLT5hc29jLmNvbmdlc3Rpb25fY29udHJvbF9tb2R1bGUgPSBhdi0+
YXNzb2NfdmFsdWU7Ci0JCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9p
bml0aWFsX2NjX3BhcmFtICE9IE5VTEwpIHsKLQkJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3Rj
Yi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQkJCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9u
cy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7Ci0JCQkJCQl9Ci0JCQkJCX0K
LQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9DQ19PUFRJT046Ci0J
ewotCQlzdHJ1Y3Qgc2N0cF9jY19vcHRpb24gKmNjX29wdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKGNjX29wdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24sIG9wdHNpemUpOwotCQlT
Q1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX2lkKTsKLQkJ
aWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJaWYgKGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX2lkID09
IFNDVFBfQ1VSUkVOVF9BU1NPQykgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElT
VF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJ
CQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25z
LnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKSB7Ci0JCQkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdGNiLCAxLCBjY19vcHQpOwotCQkJCQl9Ci0J
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfSBlbHNlIHsK
LQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbiA9
PSBOVUxMKSB7Ci0JCQkJZXJyb3IgPSBFTk9UU1VQOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvciA9
ICgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3NvY2tldF9vcHRpb24pKHN0Y2Is
IDEsCi0JCQkJCQkJCQkJCSAgIGNjX29wdCk7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QTFVHR0FCTEVfU1M6Ci0JewotCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7Ci0JCWlmICgoYXYtPmFz
c29jX3ZhbHVlICE9IFNDVFBfU1NfREVGQVVMVCkgJiYKLQkJICAgIChhdi0+YXNzb2NfdmFsdWUg
IT0gU0NUUF9TU19ST1VORF9ST0JJTikgJiYKLQkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NU
UF9TU19ST1VORF9ST0JJTl9QQUNLRVQpICYmCi0JCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFND
VFBfU1NfUFJJT1JJVFkpICYmCi0JCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfRkFJ
Ul9CQU5EV0lUSCkgJiYKLQkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9TU19GSVJTVF9D
T01FKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0J
CX0KLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCQlpZiAoc3Rj
YikgewotCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19jbGVhcihzdGNiLCAmc3Rj
Yi0+YXNvYywgMSwgMSk7Ci0JCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucyA9IHNjdHBfc3NfZnVu
Y3Rpb25zW2F2LT5hc3NvY192YWx1ZV07Ci0JCQlzdGNiLT5hc29jLnN0cmVhbV9zY2hlZHVsaW5n
X21vZHVsZSA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNj
dHBfc3NfaW5pdChzdGNiLCAmc3RjYi0+YXNvYywgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9zc19tb2R1bGUg
PSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJ
aWYgKChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAotCQkJICAgIChhdi0+
YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2NsZWFyKHN0Y2IsICZzdGNiLT5hc29jLCAxLCAxKTsKLQkJCQkJc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+YXNzb2NfdmFsdWVdOwot
CQkJCQlzdGNiLT5hc29jLnN0cmVhbV9zY2hlZHVsaW5nX21vZHVsZSA9IGF2LT5hc3NvY192YWx1
ZTsKLQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNi
LT5hc29jLCAxKTsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9T
U19WQUxVRToKLQl7Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSAqYXY7Ci0KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUsIG9wdHNp
emUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0JCWlmIChz
dGNiKSB7Ci0JCQlpZiAoKGF2LT5zdHJlYW1faWQgPj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQp
IHx8Ci0JCQkgICAgKHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nfc2V0X3ZhbHVlKHN0
Y2IsICZzdGNiLT5hc29jLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2F2LT5zdHJlYW1faWRdLAotCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdi0+c3RyZWFt
X3ZhbHVlKSA8IDApKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJ
CX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChhdi0+YXNz
b2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAoYXYtPnN0cmVhbV9pZCA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9u
cy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2MsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5zdHJtb3V0W2F2LT5zdHJlYW1faWRd
LAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXYtPnN0
cmVhbV92YWx1ZSk7Ci0JCQkJCX0KLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0K
LQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIENhbid0IHNl
dCBzdHJlYW0gdmFsdWUgd2l0aG91dCBhc3NvY2lhdGlvbiAqLwotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9D
TFJfU1RBVF9MT0c6Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQllcnJvciA9IEVPUE5PVFNVUFA7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9DT05URVhUOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5h
c3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCXN0Y2ItPmFzb2MuY29udGV4dCA9IGF2LT5h
c3NvY192YWx1ZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlm
ICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAo
YXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlp
bnAtPnNjdHBfY29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JCQl9Ci0JCQlpZiAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0Mp
IHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOwotCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCXN0
Y2ItPmFzb2MuY29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQkJ
YnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9WUkZfSUQ6Ci0JewotCQl1aW50MzJfdCAqZGVmYXVsdF92
cmZpZDsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJaW50IGk7Ci0jZW5kaWYKLQkJU0NUUF9DSEVDS19B
TkRfQ0FTVChkZWZhdWx0X3ZyZmlkLCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJaWYg
KCpkZWZhdWx0X3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotI2lmZGVmIFNDVFBfTVZSRgotCQlmb3Ig
KGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7Ci0JCQkvKiBUaGUgVlJGIG11c3QgYmUg
aW4gdGhlIFZSRiBsaXN0ICovCi0JCQlpZiAoKmRlZmF1bHRfdnJmaWQgPT0gaW5wLT5tX3ZyZl9p
ZHNbaV0pIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlucC0+ZGVmX3ZyZl9pZCA9
ICpkZWZhdWx0X3ZyZmlkOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQlnb3RvIHNj
dHBfZG9uZTsKLQkJCX0KLQkJfQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLSNl
bHNlCi0JCWlucC0+ZGVmX3ZyZl9pZCA9ICpkZWZhdWx0X3ZyZmlkOwotI2VuZGlmCi0jaWZkZWYg
U0NUUF9NVlJGCi0Jc2N0cF9kb25lOgotI2VuZGlmCi0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBf
REVMX1ZSRl9JRDoKLQl7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCXVpbnQzMl90ICpkZWxfdnJmaWQ7
Ci0JCWludCBpLCBmbmQgPSAwOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZGVsX3ZyZmlkLCBv
cHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJaWYgKCpkZWxfdnJmaWQgPiBTQ1RQX01BWF9W
UkZfSUQpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwot
CQl9Ci0JCWlmIChpbnAtPm51bV92cmZzID09IDEpIHsKLQkJCS8qIENhbid0IGRlbGV0ZSBsYXN0
IG9uZSAqLwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0J
CX0KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSAw
KSB7Ci0JCQkvKiBDYW4ndCBhZGQgbW9yZSBvbmNlIHlvdSBhcmUgYm91bmQgKi8KLQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCVNDVFBfSU5QX1dM
T0NLKGlucCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCWlm
ICgqZGVsX3ZyZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQkJZm5kID0gMTsKLQkJCQli
cmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZuZCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9y
ID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgIT0gKGlucC0+bnVtX3ZyZnMgLSAx
KSkgewotCQkJLyogVGFrZSBib3R0b20gb25lIGFuZCBtb3ZlIHRvIHRoaXMgc2xvdCAqLwotCQkJ
aW5wLT5tX3ZyZl9pZHNbaV0gPSBpbnAtPm1fdnJmX2lkc1soaW5wLT5udW1fdnJmcy0xKV07Ci0J
CX0KLQkJaWYgKCpkZWxfdnJmaWQgPT0gaW5wLT5kZWZfdnJmX2lkKSB7Ci0JCQkvKiBUYWtlIHRo
ZSBmaXJzdCBvbmUgYXMgdGhlIG5ldyBkZWZhdWx0ICovCi0JCQlpbnAtPmRlZl92cmZfaWQgPSBp
bnAtPm1fdnJmX2lkc1swXTsKLQkJfQotCQkvKiBEcm9wIHRoZSBudW1iZXIgYnkgb25lIGtpbGxp
bmcgbGFzdCBvbmUgKi8KLQkJaW5wLT5udW1fdnJmcy0tOwotI2Vsc2UKLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQ
UCk7Ci0JCWVycm9yID0gRU9QTk9UU1VQUDsKLSNlbmRpZgotCQlicmVhazsKLQl9Ci0JY2FzZSBT
Q1RQX0FERF9WUkZfSUQ6Ci0JewotI2lmZGVmIFNDVFBfTVZSRgotCQl1aW50MzJfdCAqYWRkX3Zy
ZmlkOwotCQlpbnQgaTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGFkZF92cmZpZCwgb3B0dmFs
LCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCWlmICgqYWRkX3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lE
KSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQot
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpID09IDApIHsK
LQkJCS8qIENhbid0IGFkZCBtb3JlIG9uY2UgeW91IGFyZSBib3VuZCAqLwotCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKLQkJLyogVmVyaWZ5IGl0cyBub3QgYWxyZWFkeSBoZXJlICovCi0JCWZvciAoaSA9IDA7
IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCWlmICgqYWRkX3ZyZmlkID09IGlucC0+bV92
cmZfaWRzW2ldKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOwotCQkJCWVycm9yID0gRUFMUkVBRFk7Ci0J
CQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgo
aW5wLT5udW1fdnJmcyArIDEpID4gaW5wLT52cmZfc2l6ZSkgewotCQkJLyogbmVlZCB0byBncm93
IGFycmF5ICovCi0JCQl1aW50MzJfdCAqdGFycmF5OwotCQkJU0NUUF9NQUxMT0ModGFycmF5LCB1
aW50MzJfdCAqLAotCQkJCSAgICAoc2l6ZW9mKHVpbnQzMl90KSAqIChpbnAtPnZyZl9zaXplICsg
U0NUUF9ERUZBVUxUX1ZSRl9TSVpFKSksCi0JCQkJICAgIFNDVFBfTV9NVlJGKTsKLQkJCWlmICh0
YXJyYXkgPT0gTlVMTCkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT01FTSk7Ci0JCQkJZXJyb3IgPSBFTk9NRU07Ci0J
CQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCWJyZWFrOwotCQkJfQotCQkJbWVtY3B5KHRh
cnJheSwgaW5wLT5tX3ZyZl9pZHMsIChzaXplb2YodWludDMyX3QpICogaW5wLT52cmZfc2l6ZSkp
OwotCQkJU0NUUF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQX01fTVZSRik7Ci0JCQlpbnAtPm1f
dnJmX2lkcyA9IHRhcnJheTsKLQkJCWlucC0+dnJmX3NpemUgKz0gU0NUUF9ERUZBVUxUX1ZSRl9T
SVpFOwotCQl9Ci0JCWlucC0+bV92cmZfaWRzW2lucC0+bnVtX3ZyZnNdID0gKmFkZF92cmZpZDsK
LQkJaW5wLT5udW1fdnJmcysrOwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0jZWxzZQotCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFT1BOT1RTVVBQKTsKLQkJZXJyb3IgPSBFT1BOT1RTVVBQOwotI2VuZGlmCi0JCWJyZWFrOwot
CX0KLQljYXNlIFNDVFBfREVMQVlFRF9TQUNLOgotCXsKLQkJc3RydWN0IHNjdHBfc2Fja19pbmZv
ICpzYWNrOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9zYWNrX2luZm8sIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhY2st
PnNhY2tfYXNzb2NfaWQpOwotCQlpZiAoc2Fjay0+c2Fja19kZWxheSkgewotCQkJaWYgKHNhY2st
PnNhY2tfZGVsYXkgPiBTQ1RQX01BWF9TQUNLX0RFTEFZKQotCQkJCXNhY2stPnNhY2tfZGVsYXkg
PSBTQ1RQX01BWF9TQUNLX0RFTEFZOwotCQkJaWYgKE1TRUNfVE9fVElDS1Moc2Fjay0+c2Fja19k
ZWxheSkgPCAxKSB7Ci0JCQkJc2Fjay0+c2Fja19kZWxheSA9IFRJQ0tTX1RPX01TRUMoMSk7Ci0J
CQl9Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChzYWNrLT5zYWNrX2RlbGF5KSB7Ci0JCQkJ
c3RjYi0+YXNvYy5kZWxheWVkX2FjayA9IHNhY2stPnNhY2tfZGVsYXk7Ci0JCQl9Ci0JCQlpZiAo
c2Fjay0+c2Fja19mcmVxKSB7Ci0JCQkJc3RjYi0+YXNvYy5zYWNrX2ZyZXEgPSBzYWNrLT5zYWNr
X2ZyZXE7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAg
KHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8Ci0JCQkgICAgKHNh
Y2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKLQkJCQlpZiAoc2Fjay0+c2Fja19kZWxheSkgewotCQkJCQlpbnAtPnNjdHBfZXAu
c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSA9IE1TRUNfVE9fVElDS1Moc2Fjay0+
c2Fja19kZWxheSk7Ci0JCQkJfQotCQkJCWlmIChzYWNrLT5zYWNrX2ZyZXEpIHsKLQkJCQkJaW5w
LT5zY3RwX2VwLnNjdHBfc2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVxOwotCQkJCX0KLQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKHNhY2stPnNhY2tfYXNzb2NfaWQg
PT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAotCQkJICAgIChzYWNrLT5zYWNrX2Fzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJaWYgKHNhY2stPnNhY2tfZGVsYXkpIHsKLQkJCQkJ
CXN0Y2ItPmFzb2MuZGVsYXllZF9hY2sgPSBzYWNrLT5zYWNrX2RlbGF5OwotCQkJCQl9Ci0JCQkJ
CWlmIChzYWNrLT5zYWNrX2ZyZXEpIHsKLQkJCQkJCXN0Y2ItPmFzb2Muc2Fja19mcmVxID0gc2Fj
ay0+c2Fja19mcmVxOwotCQkJCQl9Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9
Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfQVVUSF9DSFVOSzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2F1dGhjaHVuayAqc2F1dGg7
Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXV0aCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hdXRo
Y2h1bmssIG9wdHNpemUpOwotCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmIChzY3RwX2F1
dGhfYWRkX2NodW5rKHNhdXRoLT5zYXV0aF9jaHVuaywgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhf
Y2h1bmtzKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9Ci0JCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BVVRIX0tFWToK
LQl7Ci0JCXN0cnVjdCBzY3RwX2F1dGhrZXkgKnNjYTsKLQkJc3RydWN0IHNjdHBfa2V5aGVhZCAq
c2hhcmVkX2tleXM7Ci0JCXNjdHBfc2hhcmVka2V5X3QgKnNoYXJlZF9rZXk7Ci0JCXNjdHBfa2V5
X3QgKmtleSA9IE5VTEw7Ci0JCXNpemVfdCBzaXplOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c2NhLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXksIG9wdHNpemUpOwotCQlpZiAoc2NhLT5z
Y2Ffa2V5bGVuZ3RoID09IDApIHsKLQkJCXNpemUgPSBvcHRzaXplIC0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2F1dGhrZXkpOwotCQl9IGVsc2UgewotCQkgICAgICAgIGlmIChzY2EtPnNjYV9rZXlsZW5n
dGggKyBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkgPD0gb3B0c2l6ZSkgewotCQkJCXNpemUg
PSBzY2EtPnNjYV9rZXlsZW5ndGg7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBzY2EtPnNjYV9hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCXNoYXJl
ZF9rZXlzID0gJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXM7Ci0JCQkvKiBjbGVhciB0aGUgY2FjaGVk
IGtleXMgZm9yIHRoaXMga2V5IGlkICovCi0JCQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwg
c2NhLT5zY2Ffa2V5bnVtYmVyKTsKLQkJCS8qCi0JCQkgKiBjcmVhdGUgdGhlIG5ldyBzaGFyZWQg
a2V5IGFuZAotCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQKLQkJCSAqLwotCQkJaWYgKHNpemUgPiAw
KSB7Ci0JCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXpl
KTsKLQkJCQlpZiAoa2V5ID09IE5VTEwpIHsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVNKTsKLQkJCQkJZXJyb3Ig
PSBFTk9NRU07Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJYnJlYWs7Ci0JCQkJ
fQotCQkJfQotCQkJc2hhcmVkX2tleSA9IHNjdHBfYWxsb2Nfc2hhcmVka2V5KCk7Ci0JCQlpZiAo
c2hhcmVkX2tleSA9PSBOVUxMKSB7Ci0JCQkJc2N0cF9mcmVlX2tleShrZXkpOwotCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVO
T01FTSk7Ci0JCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQkJCWJyZWFrOwotCQkJfQotCQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5OwotCQkJc2hhcmVkX2tl
eS0+a2V5aWQgPSBzY2EtPnNjYV9rZXludW1iZXI7Ci0JCQllcnJvciA9IHNjdHBfaW5zZXJ0X3No
YXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSB8fAotCQkJICAgIChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsK
LQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCXNoYXJlZF9rZXlzID0gJmlucC0+c2N0cF9l
cC5zaGFyZWRfa2V5czsKLQkJCQkvKgotCQkJCSAqIGNsZWFyIHRoZSBjYWNoZWQga2V5cyBvbiBh
bGwgYXNzb2NzIGZvcgotCQkJCSAqIHRoaXMga2V5IGlkCi0JCQkJICovCi0JCQkJc2N0cF9jbGVh
cl9jYWNoZWRrZXlzX2VwKGlucCwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKLQkJCQkvKgotCQkJCSAq
IGNyZWF0ZSB0aGUgbmV3IHNoYXJlZCBrZXkgYW5kCi0JCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQK
LQkJCQkgKi8KLQkJCQlpZiAoc2l6ZSA+IDApIHsKLQkJCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNj
YS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKLQkJCQkJaWYgKGtleSA9PSBOVUxMKSB7Ci0J
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFTk9NRU0pOwotCQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQkJCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlzaGFyZWRfa2V5
ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQkJCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7
Ci0JCQkJCXNjdHBfZnJlZV9rZXkoa2V5KTsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVNKTsKLQkJCQkJZXJyb3Ig
PSBFTk9NRU07Ci0JCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQkJYnJlYWs7Ci0JCQkJ
fQotCQkJCXNoYXJlZF9rZXktPmtleSA9IGtleTsKLQkJCQlzaGFyZWRfa2V5LT5rZXlpZCA9IHNj
YS0+c2NhX2tleW51bWJlcjsKLQkJCQllcnJvciA9IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzaGFy
ZWRfa2V5cywgc2hhcmVkX2tleSk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQot
CQkJaWYgKChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkg
ICAgKHNjYS0+c2NhX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc2hhcmVk
X2tleXMgPSAmc3RjYi0+YXNvYy5zaGFyZWRfa2V5czsKLQkJCQkJLyogY2xlYXIgdGhlIGNhY2hl
ZCBrZXlzIGZvciB0aGlzIGtleSBpZCAqLwotCQkJCQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3Rj
Yiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKLQkJCQkJLyoKLQkJCQkJICogY3JlYXRlIHRoZSBuZXcg
c2hhcmVkIGtleSBhbmQKLQkJCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQKLQkJCQkJICovCi0JCQkJ
CWlmIChzaXplID4gMCkgewotCQkJCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwg
KHVpbnQzMl90KSBzaXplKTsKLQkJCQkJCWlmIChrZXkgPT0gTlVMTCkgewotCQkJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJ
CQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQkJCQkJaWYgKHNoYXJlZF9r
ZXkgPT0gTlVMTCkgewotCQkJCQkJc2N0cF9mcmVlX2tleShrZXkpOwotCQkJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJc2hhcmVkX2tleS0+
a2V5ID0ga2V5OwotCQkJCQlzaGFyZWRfa2V5LT5rZXlpZCA9IHNjYS0+c2NhX2tleW51bWJlcjsK
LQkJCQkJZXJyb3IgPSBzY3RwX2luc2VydF9zaGFyZWRrZXkoc2hhcmVkX2tleXMsIHNoYXJlZF9r
ZXkpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0hNQUNfSURF
TlQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqc2htYWM7Ci0JCXNjdHBfaG1hY2xpc3Rf
dCAqaG1hY2xpc3Q7Ci0JCXVpbnQxNl90IGhtYWNpZDsKLQkJdWludDMyX3QgaTsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2htYWNhbGdvLCBvcHRz
aXplKTsKLQkJaWYgKChvcHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2htYWNhbGdvKSArIHNo
bWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRzICogc2l6ZW9mKHVpbnQxNl90KSkgfHwKLQkJICAg
IChzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50cyA+IDB4ZmZmZikpIHsKLQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaG1hY2xpc3QgPSBz
Y3RwX2FsbG9jX2htYWNsaXN0KCh1aW50MTZfdClzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50
cyk7Ci0JCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOwotCQkJZXJyb3Ig
PSBFTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgc2htYWMtPnNobWFj
X251bWJlcl9vZl9pZGVudHM7IGkrKykgewotCQkJaG1hY2lkID0gc2htYWMtPnNobWFjX2lkZW50
c1tpXTsKLQkJCWlmIChzY3RwX2F1dGhfYWRkX2htYWNpZChobWFjbGlzdCwgaG1hY2lkKSkgewot
CQkJCS8qIGludmFsaWQgSE1BQ3Mgd2VyZSBmb3VuZCAqLzsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJCXNjdHBfZnJlZV9obWFjbGlzdChobWFjbGlzdCk7Ci0JCQkJ
Z290byBzY3RwX3NldF9obWFjX2RvbmU7Ci0JCQl9Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IGht
YWNsaXN0LT5udW1fYWxnbzsgaSsrKSB7Ci0JCQlpZiAoaG1hY2xpc3QtPmhtYWNbaV0gPT0gU0NU
UF9BVVRIX0hNQUNfSURfU0hBMSkgewotCQkJCS8qIGFscmVhZHkgaW4gbGlzdCAqLwotCQkJCWJy
ZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpID09IGhtYWNsaXN0LT5udW1fYWxnbykgewotCQkJLyog
bm90IGZvdW5kIGluIGxpc3QgKi8KLQkJCXNjdHBfZnJlZV9obWFjbGlzdChobWFjbGlzdCk7Ci0J
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQkvKiBz
ZXQgaXQgb24gdGhlIGVuZHBvaW50ICovCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmIChp
bnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpCi0JCQlzY3RwX2ZyZWVfaG1hY2xpc3QoaW5wLT5zY3Rw
X2VwLmxvY2FsX2htYWNzKTsKLQkJaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzID0gaG1hY2xpc3Q7
Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlzY3RwX3NldF9obWFjX2RvbmU6Ci0JCWJyZWFr
OwotCX0KLQljYXNlIFNDVFBfQVVUSF9BQ1RJVkVfS0VZOgotCXsKLQkJc3RydWN0IHNjdHBfYXV0
aGtleWlkICpzY2FjdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNjYWN0LCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
Yiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsKLQotCQkvKiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24g
dGhlIHJpZ2h0IHBsYWNlICovCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBzZXQgdGhlIGFjdGl2ZSBr
ZXkgb24gdGhlIGFzc29jICovCi0JCQlpZiAoc2N0cF9hdXRoX3NldGFjdGl2ZWtleShzdGNiLAot
CQkJCQkJICAgc2NhY3QtPnNjYWN0X2tleW51bWJlcikpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwKLQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsCi0J
CQkJCQkgICAgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoc2NhY3QtPnNjYWN0X2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJICAgIChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0g
U0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpZiAoc2N0
cF9hdXRoX3NldGFjdGl2ZWtleV9lcChpbnAsIHNjYWN0LT5zY2FjdF9rZXludW1iZXIpKSB7Ci0J
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCX0KLQkJCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBT
Q1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAgKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBT
Q1RQX0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCUxJU1RfRk9S
RUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCXNjdHBfYXV0aF9zZXRhY3RpdmVrZXkoc3RjYiwgc2Nh
Y3QtPnNjYWN0X2tleW51bWJlcik7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9
Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfQVVUSF9ERUxFVEVfS0VZOgotCXsKLQkJc3RydWN0IHNjdHBfYXV0aGtleWlkICpz
Y2RlbDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNjZGVsLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2F1dGhrZXlpZCwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NkZWwt
PnNjYWN0X2Fzc29jX2lkKTsKLQotCQkvKiBkZWxldGUgdGhlIGtleSBmcm9tIHRoZSByaWdodCBw
bGFjZSAqLwotCQlpZiAoc3RjYikgewotCQkJaWYgKHNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNi
LCBzY2RlbC0+c2NhY3Rfa2V5bnVtYmVyKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3Ig
PSBFSU5WQUw7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0J
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkg
ICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAg
ICAoc2NkZWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYgKHNjdHBfZGVsZXRlX3NoYXJlZGtleV9lcChpbnAsIHNj
ZGVsLT5zY2FjdF9rZXludW1iZXIpKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCWVycm9yID0g
RUlOVkFMOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAo
KHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAg
KHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lO
UF9STE9DSyhpbnApOwotCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlz
dCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCXNjdHBf
ZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVtYmVyKTsKLQkJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0J
CQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BVVRIX0RFQUNUSVZBVEVfS0VZOgot
CXsKLQkJc3RydWN0IHNjdHBfYXV0aGtleWlkICprZXlpZDsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKGtleWlkLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7Ci0JCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwga2V5aWQtPnNjYWN0X2Fzc29jX2lkKTsKLQotCQkvKiBk
ZWFjdGl2YXRlIHRoZSBrZXkgZnJvbSB0aGUgcmlnaHQgcGxhY2UgKi8KLQkJaWYgKHN0Y2IpIHsK
LQkJCWlmIChzY3RwX2RlYWN0X3NoYXJlZGtleShzdGNiLCBrZXlpZC0+c2NhY3Rfa2V5bnVtYmVy
KSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGtleWlkLT5zY2FjdF9hc3NvY19p
ZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoa2V5aWQtPnNjYWN0X2Fzc29jX2lk
ID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYg
KHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKGlucCwga2V5aWQtPnNjYWN0X2tleW51bWJlcikpIHsK
LQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJfQotCQkJCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09
IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc2N0cF9kZWFjdF9zaGFyZWRrZXkoc3RjYiwga2V5
aWQtPnNjYWN0X2tleW51bWJlcik7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9
Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJaWYgKGF2LT5hc3NvY192YWx1ZSAmICh+U0NUUF9F
TkFCTEVfVkFMVUVfTUFTSykpIHsKLQkJICAgICAgICBTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5h
c3NvY19pZCk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLmxvY2FsX3N0cnJlc2V0X3N1
cHBvcnQgPSAodWludDhfdClhdi0+YXNzb2NfdmFsdWU7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4
X3QpYXYtPmFzc29jX3ZhbHVlOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJ
CWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxp
c3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc3RjYi0+YXNvYy5sb2NhbF9z
dHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVlOwotCQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0K
LQotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUkVTRVRfU1RSRUFNUzoKLQl7Ci0JCXN0
cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnN0cnJzdDsKLQkJaW50IGksIHNlbmRfb3V0ID0gMDsK
LQkJaW50IHNlbmRfaW4gPSAwOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3RycnN0LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIHN0cnJzdC0+c3JzX2Fzc29jX2lkKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkg
ewotCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7Ci0JCQllcnJvciA9IEVOT0VOVDsKLQkJCWJyZWFrOwot
CQl9Ci0JCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkvKgot
CQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBlLgotCQkJICovCi0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFT1BOT1RTVVBQKTsKLQkJCWVycm9yID0gRU9QTk9UU1VQUDsKLQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfcmVzZXRf
c3RyZWFtcykgKwotCQkgICAgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMgKiBzaXplb2YodWlu
dDE2X3QpID4gb3B0c2l6ZSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RycnN0LT5zcnNfZmxhZ3MgJiBTQ1RQ
X1NUUkVBTV9SRVNFVF9JTkNPTUlORykgewotCQkJc2VuZF9pbiA9IDE7Ci0JCQlpZiAoc3RjYi0+
YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQkJ
ZXJyb3IgPSBFQUxSRUFEWTsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0cnJzdC0+c3JzX2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRf
T1VUR09JTkcpIHsKLQkJCXNlbmRfb3V0ID0gMTsKLQkJfQotCQlpZiAoKHN0cnJzdC0+c3JzX251
bWJlcl9zdHJlYW1zID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUKSAmJiBzZW5kX2lu
KSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9NRU0pOwotCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoKHNlbmRfaW4gPT0gMCkgJiYgKHNlbmRf
b3V0ID09IDApKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlmb3IgKGkgPSAwOyBpIDwgc3Ry
cnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgewotCQkJaWYgKChzZW5kX2luKSAmJgotCQkJ
ICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlzdFtpXSA+IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQp
KSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJCWlmICgoc2VuZF9vdXQpICYmCi0JCQkgICAgKHN0cnJzdC0+c3JzX3N0cmVhbV9saXN0
W2ldID4gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IpIHsKLQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzZW5kX291dCkg
ewotCQkJaW50IGNudDsKLQkJCXVpbnQxNl90IHN0cm07Ci0JCQlpZiAoc3RycnN0LT5zcnNfbnVt
YmVyX3N0cmVhbXMpIHsKLQkJCQlmb3IgKGkgPSAwLCBjbnQgPSAwOyBpIDwgc3RycnN0LT5zcnNf
bnVtYmVyX3N0cmVhbXM7IGkrKykgewotCQkJCQlzdHJtID0gc3RycnN0LT5zcnNfc3RyZWFtX2xp
c3RbaV07Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0cm1vdXRbc3RybV0uc3RhdGUgPT0gU0NUUF9T
VFJFQU1fT1BFTikgewotCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3N0cm1dLnN0YXRlID0gU0NU
UF9TVFJFQU1fUkVTRVRfUEVORElORzsKLQkJCQkJCWNudCsrOwotCQkJCQl9Ci0JCQkJfQotCQkJ
fSBlbHNlIHsKLQkJCQkvKiBJdHMgYWxsICovCi0JCQkJZm9yIChpID0gMCwgY250ID0gMDsgaSA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKSB7Ci0JCQkJCQlzdGNiLT5hc29jLnN0
cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HOwotCQkJCQkJY250Kys7
Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHNlbmRfaW4pIHsKLQkJCWVycm9yID0g
c2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RjYiwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMs
Ci0JCQkJCQkJc3RycnN0LT5zcnNfc3RyZWFtX2xpc3QsCi0JCQkJCQkJc2VuZF9pbiwgMCwgMCwg
MCwgMCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQllcnJvciA9IHNjdHBfc2VuZF9zdHJlYW1fcmVzZXRf
b3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKLQkJfQotCQlpZiAoZXJyb3Ig
PT0gMCkgewotCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9N
X1NUUlJTVF9SRVEsIFNDVFBfU09fTE9DS0VEKTsKLQkJfSBlbHNlIHsKLQkJCSAvKgotCQkJICAq
IEZvciBvdXRnb2luZyBzdHJlYW1zIGRvbid0IHJlcG9ydCBhbnkgcHJvYmxlbXMgaW4KLQkJCSAg
KiBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHBsaWNhdGlvbi4KLQkJCSAgKiBYWFg6IERv
dWJsZSBjaGVjayByZXNldHRpbmcgaW5jb21pbmcgc3RyZWFtcy4KLQkJCSAgKi8KLQkJCWVycm9y
ID0gMDsKLQkJfQotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLQljYXNl
IFNDVFBfQUREX1NUUkVBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyAqc3RyYWRk
OwotCQl1aW50OF90IGFkZHN0cmVhbSA9IDA7Ci0JCXVpbnQxNl90IGFkZF9vX3N0cm1jbnQgPSAw
OwotCQl1aW50MTZfdCBhZGRfaV9zdHJtY250ID0gMDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KHN0cmFkZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcywgb3B0c2l6ZSk7Ci0JCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgc3RyYWRkLT5zYXNfYXNzb2NfaWQpOwotCQlpZiAoc3Rj
YiA9PSBOVUxMKSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9yID0gRU5PRU5UOwot
CQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDAp
IHsKLQkJCS8qCi0JCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNodW5rIHR5cGUuCi0J
CQkgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQkJZXJyb3IgPSBFT1BOT1RTVVBQOwotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc3Ry
ZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQllcnJvciA9IEVB
TFJFQURZOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYg
KChzdHJhZGQtPnNhc19vdXRzdHJtcyA9PSAwKSAmJgotCQkgICAgKHN0cmFkZC0+c2FzX2luc3Ry
bXMgPT0gMCkpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJZ290byBza2lwX3N0dWZmOwotCQl9
Ci0JCWlmIChzdHJhZGQtPnNhc19vdXRzdHJtcykgewotCQkJYWRkc3RyZWFtID0gMTsKLQkJCS8q
IFdlIGFsbG9jYXRlIGhlcmUgKi8KLQkJCWFkZF9vX3N0cm1jbnQgPSBzdHJhZGQtPnNhc19vdXRz
dHJtczsKLQkJCWlmICgoKChpbnQpYWRkX29fc3RybWNudCkgKyAoKGludClzdGNiLT5hc29jLnN0
cmVhbW91dGNudCkpID4gMHgwMDAwZmZmZikgewotCQkJCS8qIFlvdSBjYW4ndCBoYXZlIG1vcmUg
dGhhbiA2NGsgKi8KLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlnb3RvIHNraXBfc3R1ZmY7Ci0J
CQl9Ci0JCX0KLQkJaWYgKHN0cmFkZC0+c2FzX2luc3RybXMpIHsKLQkJCWludCBjbnQ7Ci0KLQkJ
CWFkZHN0cmVhbSB8PSAyOwotCQkJLyogV2UgYWxsb2NhdGUgaW5zaWRlIHNjdHBfc2VuZF9zdHJf
cmVzZXRfcmVxKCkgKi8KLQkJCWFkZF9pX3N0cm1jbnQgPSBzdHJhZGQtPnNhc19pbnN0cm1zOwot
CQkJY250ID0gYWRkX2lfc3RybWNudDsKLQkJCWNudCArPSBzdGNiLT5hc29jLnN0cmVhbWluY250
OwotCQkJaWYgKGNudCA+IDB4MDAwMGZmZmYpIHsKLQkJCQkvKiBZb3UgY2FuJ3QgaGF2ZSBtb3Jl
IHRoYW4gNjRrICovCi0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJZ290byBza2lwX3N0dWZmOwot
CQkJfQotCQkJaWYgKGNudCA+IChpbnQpc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zKSB7
Ci0JCQkJLyogTW9yZSB0aGFuIHlvdSBhcmUgYWxsb3dlZCAqLwotCQkJCWVycm9yID0gRUlOVkFM
OwotCQkJCWdvdG8gc2tpcF9zdHVmZjsKLQkJCX0KLQkJfQotCQllcnJvciA9IHNjdHBfc2VuZF9z
dHJfcmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDAsIGFkZHN0cmVhbSwgYWRkX29fc3RybWNu
dCwgYWRkX2lfc3RybWNudCwgMCk7Ci0JCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NU
UF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0Jc2tpcF9zdHVmZjoK
LQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JFU0VU
X0FTU09DOgotCXsKLQkJaW50IGk7Ci0JCXVpbnQzMl90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCAoc2N0cF9hc3NvY190KSAqdmFsdWUpOwotCQlpZiAoc3RjYiA9PSBO
VUxMKSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9yID0gRU5PRU5UOwotCQkJYnJl
YWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDApIHsKLQkJ
CS8qCi0JCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNodW5rIHR5cGUuCi0JCQkgKi8K
LQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVPUE5PVFNVUFApOwotCQkJZXJyb3IgPSBFT1BOT1RTVVBQOwotCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jl
c2V0X291dHN0YW5kaW5nKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQllcnJvciA9IEVBTFJFQURZ
OwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJLyogSXMgdGhl
cmUgYW55IGRhdGEgcGVuZGluZyBpbiB0aGUgc2VuZCBvciBzZW50IHF1ZXVlcz8gKi8KLQkJaWYg
KCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSB8fAotCQkgICAgIVRBSUxRX0VN
UFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7Ci0JCWJ1c3lfb3V0OgotCQkJZXJyb3IgPSBF
QlVTWTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCWJyZWFr
OwotCQl9Ci0JCS8qIERvIGFueSBzdHJlYW1zIGhhdmUgZGF0YSBxdWV1ZWQ/ICovCi0JCWZvciAo
IGkgPSAwOyBpPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlpZiAoIVRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7Ci0JCQkJZ290byBidXN5
X291dDsKLQkJCX0KLQkJfQotCQllcnJvciA9IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0Y2Is
IDAsIE5VTEwsIDAsIDEsIDAsIDAsIDAsIDApOwotCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1JFUSwgU0NUUF9TT19MT0NLRUQpOwotCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQ09OTkVDVF9YOgot
CQlpZiAob3B0c2l6ZSA8IChzaXplb2YoaW50KSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0K
LQkJZXJyb3IgPSBzY3RwX2RvX2Nvbm5lY3RfeChzbywgaW5wLCBvcHR2YWwsIG9wdHNpemUsIHAs
IDApOwotCQlicmVhazsKLQljYXNlIFNDVFBfQ09OTkVDVF9YX0RFTEFZRUQ6Ci0JCWlmIChvcHRz
aXplIDwgKHNpemVvZihpbnQpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpKSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQllcnJvciA9
IHNjdHBfZG9fY29ubmVjdF94KHNvLCBpbnAsIG9wdHZhbCwgb3B0c2l6ZSwgcCwgMSk7Ci0JCWJy
ZWFrOwotCWNhc2UgU0NUUF9DT05ORUNUX1hfQ09NUExFVEU6Ci0JewotCQlzdHJ1Y3Qgc29ja2Fk
ZHIgKnNhOwotCi0JCS8qIEZJWE1FIE1UOiBjaGVjayBjb3JyZWN0PyAqLwotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHNhLCBvcHR2YWwsIHN0cnVjdCBzb2NrYWRkciwgb3B0c2l6ZSk7Ci0KLQkJLyog
ZmluZCB0Y2IgKi8KLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5F
Q1RFRCkgewotCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZp
bnAtPnNjdHBfYXNvY19saXN0KTsKLQkJCWlmIChzdGNiKSB7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKLQkJCX0KLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJfSBlbHNlIHsKLQkJCS8q
IFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3
aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMg
dGhlIGxvY2tlZAotCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2Eg
TlVMTC4KLQkJCSAqLwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJ
CWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQot
CQl9Ci0KLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9yID0g
RU5PRU5UOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0
aW9uID09IDEpIHsKLQkJCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uID0gMDsKLQkJCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7Ci0JCQlz
Y3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwKLQkJCQkJc3Rj
Yi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCQkJCQlTQ1RQX0ZST01fU0NUUF9VU1JSRVEg
KyBTQ1RQX0xPQ184KTsKLQkJCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09f
TE9DS0VEKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBhbHJlYWR5IGV4cGlyZWQgb3IgZGlk
IG5vdCB1c2UgZGVsYXllZAotCQkJICogY29ubmVjdHgKLQkJCSAqLwotCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkp
OwotCQkJZXJyb3IgPSBFQUxSRUFEWTsKLQkJfQotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTUFYX0JVUlNUOgotCXsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMAotCQl1aW50OF90ICpidXJzdDsK
LQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGJ1cnN0LCBvcHR2YWwsIHVpbnQ4X3QsIG9wdHNpemUp
OwotCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlucC0+c2N0cF9lcC5tYXhfYnVyc3QgPSAq
YnVyc3Q7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLSNlbHNlCi0JCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLm1heF9idXJz
dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNl
IHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
LQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwK
LQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJICAgIChh
di0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKLQkJCQlpbnAtPnNjdHBfZXAubWF4X2J1cnN0ID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBf
Q1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZp
bnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKLQkJCQkJc3RjYi0+YXNvYy5tYXhfYnVyc3QgPSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9NQVhTRUc6Ci0J
ewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0JCWludCBvdmg7Ci0KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6
ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKLQkJCW92aCA9IFND
VFBfTUVEX09WRVJIRUFEOwotCQl9IGVsc2UgewotCQkJb3ZoID0gU0NUUF9NRURfVjRfT1ZFUkhF
QUQ7Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChhdi0+YXNzb2NfdmFsdWUpIHsKLQkJCQlz
dGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9IChhdi0+YXNzb2NfdmFsdWUgKyBvdmgpOwotCQkJ
fSBlbHNlIHsKLQkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVMVF9N
QVhTRUdNRU5UOwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2Ugewot
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJCQkvKiBGSVhNRSBNVDogSSB0aGluayB0aGlzIGlzIG5vdCBpbiB0dW5l
IHdpdGggdGhlIEFQSSBJRCAqLwotCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUpIHsKLQkJCQkJaW5w
LT5zY3RwX2ZyYWdfcG9pbnQgPSAoYXYtPmFzc29jX3ZhbHVlICsgb3ZoKTsKLQkJCQl9IGVsc2Ug
ewotCQkJCQlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOwot
CQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9FVkVOVFM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgKmV2ZW50
czsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGV2ZW50cywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9l
dmVudF9zdWJzY3JpYmUsIG9wdHNpemUpOwotCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlm
IChldmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCkgewotCQkJc2N0cF9mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpOwotCQl9IGVsc2UgewotCQkJc2N0cF9mZWF0
dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5UKTsKLQkJfQotCi0JCWlm
IChldmVudHMtPnNjdHBfYXNzb2NpYXRpb25fZXZlbnQpIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpOwotCQl9IGVsc2UgewotCQkJc2N0cF9m
ZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpOwotCQl9Ci0KLQkJ
aWYgKGV2ZW50cy0+c2N0cF9hZGRyZXNzX2V2ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVh
dHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKLQkJfQotCi0JCWlm
IChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKLQkJfSBlbHNlIHsKLQkJCXNj
dHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKLQkJ
fQotCi0JCWlmIChldmVudHMtPnNjdHBfcGVlcl9lcnJvcl9ldmVudCkgewotCQkJc2N0cF9mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOwotCQl9IGVsc2UgewotCQkJ
c2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKTsKLQkJfQot
Ci0JCWlmIChldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQpIHsKLQkJCXNjdHBfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOwotCQl9IGVsc2UgewotCQkJ
c2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOwot
CQl9Ci0KLQkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50KSB7Ci0JCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpOwotCQl9IGVsc2Ug
ewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCk7Ci0J
CX0KLQotCQlpZiAoZXZlbnRzLT5zY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQpIHsKLQkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKTsKLQkJfSBl
bHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9O
RVZOVCk7Ci0JCX0KLQotCQlpZiAoZXZlbnRzLT5zY3RwX2F1dGhlbnRpY2F0aW9uX2V2ZW50KSB7
Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCk7Ci0JCX0g
ZWxzZSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUSEVWTlQp
OwotCQl9Ci0KLQkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSB7Ci0JCQlzY3Rw
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsKLQkJfSBlbHNlIHsKLQkJ
CXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsKLQkJfQotCi0J
CWlmIChldmVudHMtPnNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsKLQkJfSBlbHNlIHsKLQkJ
CXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsK
LQkJfQotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0KLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3Qp
IHsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlpZiAoZXZlbnRzLT5zY3RwX2Fzc29jaWF0
aW9uX2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19SRUNWQVNTT0NFVk5UKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1
cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCk7Ci0JCQl9Ci0J
CQlpZiAoZXZlbnRzLT5zY3RwX2FkZHJlc3NfZXZlbnQpIHsKLQkJCQlzY3RwX3N0Y2JfZmVhdHVy
ZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQpOwotCQkJfSBlbHNl
IHsKLQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19S
RUNWUEFERFJFVk5UKTsKLQkJCX0KLQkJCWlmIChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJlX2V2
ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19SRUNWU0VOREZBSUxFVk5UKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVf
b2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVCk7Ci0JCQl9Ci0J
CQlpZiAoZXZlbnRzLT5zY3RwX3BlZXJfZXJyb3JfZXZlbnQpIHsKLQkJCQlzY3RwX3N0Y2JfZmVh
dHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBFRVJFUlIpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9zaHV0ZG93bl9ldmVudCkg
ewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVD
VlNIVVRET1dORVZOVCk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihp
bnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOwotCQkJfQotCQkJaWYg
KGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2Zl
YXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpOwotCQkJfSBlbHNl
IHsKLQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19Q
REFQSUVWTlQpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2
ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19BREFQVEFUSU9ORVZOVCk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29m
ZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKTsKLQkJCX0KLQkJCWlm
IChldmVudHMtPnNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQpIHsKLQkJCQlzY3RwX3N0Y2JfZmVh
dHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5UKTsKLQkJCX0gZWxzZSB7
Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfQVVU
SEVWTlQpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSB7Ci0J
CQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5U
KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfRFJZRVZOVCk7Ci0JCQl9Ci0JCQlpZiAoZXZlbnRzLT5zY3RwX3N0cmVhbV9y
ZXNldF9ldmVudCkgewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9Q
Q0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVCk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfc3RjYl9m
ZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQpOwot
CQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCS8qIFNlbmQgdXAgdGhlIHNl
bmRlciBkcnkgZXZlbnQgb25seSBmb3IgMS10by0xIHN0eWxlIHNvY2tldHMuICovCi0JCWlmIChl
dmVudHMtPnNjdHBfc2VuZGVyX2RyeV9ldmVudCkgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgewotCQkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAt
PnNjdHBfYXNvY19saXN0KTsKLQkJCQlpZiAoc3RjYikgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOwotCQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkgJiYKLQkJ
CQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpICYmCi0JCQkJCSAgICAo
c3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJCQlzY3RwX3VscF9ub3Rp
ZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5VTEwsIFNDVFBfU09fTE9DS0VE
KTsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJfQotCQl9
Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BREFQ
VEFUSU9OX0xBWUVSOgotCXsKLQkJc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbiAqYWRhcF9iaXRz
OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYWRhcF9iaXRzLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3NldGFkYXB0YXRpb24sIG9wdHNpemUpOwotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlpbnAt
PnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3IgPSBhZGFwX2JpdHMtPnNzYl9hZGFw
dGF0aW9uX2luZDsKLQkJaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3By
b3ZpZGVkID0gMTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlicmVhazsKLQl9Ci0jaWZk
ZWYgU0NUUF9ERUJVRwotCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdfU0VROgotCXsKLQkJdWlu
dDMyX3QgKnZ2djsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZ2diwgb3B0dmFsLCB1aW50MzJf
dCwgb3B0c2l6ZSk7Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlucC0+c2N0cF9lcC5pbml0
aWFsX3NlcXVlbmNlX2RlYnVnID0gKnZ2djsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQli
cmVhazsKLQl9Ci0jZW5kaWYKLQljYXNlIFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNOgotCXsKLQkJ
c3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc19pbmZvOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c19pbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8sIG9wdHNpemUpOwotCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2luZm9fYXNzb2NfaWQpOwotCi0JCWlmIChz
dGNiKSB7Ci0JCQlpZiAoc19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91
dGNudCkgewotCQkJCW1lbWNweSgmc3RjYi0+YXNvYy5kZWZfc2VuZCwgc19pbmZvLCBtaW4ob3B0
c2l6ZSwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVmX3NlbmQpKSk7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9G
VVRVUkVfQVNTT0MpIHx8Ci0JCQkgICAgKHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9B
TExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQltZW1jcHkoJmlucC0+
ZGVmX3NlbmQsIHNfaW5mbywgbWluKG9wdHNpemUsIHNpemVvZihpbnAtPmRlZl9zZW5kKSkpOwot
CQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoc19pbmZvLT5zaW5mb19h
c3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAgKHNfaW5mby0+c2luZm9f
YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAoc19pbmZvLT5zaW5mb19z
dHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgewotCQkJCQkJbWVtY3B5KCZzdGNiLT5h
c29jLmRlZl9zZW5kLCBzX2luZm8sIG1pbihvcHRzaXplLCBzaXplb2Yoc3RjYi0+YXNvYy5kZWZf
c2VuZCkpKTsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBT
Q1RQX1BFRVJfQUREUl9QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFk
ZHJwOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsK
LSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRkcl9p
biBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBhZGRycCwgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENC
KGlucCwgc3RjYiwgcGFkZHJwLT5zcHBfYXNzb2NfaWQpOwotCi0jaWYgZGVmaW5lZChJTkVUKSAm
JiBkZWZpbmVkKElORVQ2KQotCQlpZiAocGFkZHJwLT5zcHBfYWRkcmVzcy5zc19mYW1pbHkgPT0g
QUZfSU5FVDYpIHsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOwotCQkJaWYgKElONl9J
U19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkJaW42X3NpbjZfMl9zaW4o
JnNpbl9zdG9yZSwgc2luNik7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0
b3JlOwotCQkJfSBlbHNlIHsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcnAt
PnNwcF9hZGRyZXNzOwotCQkJfQotCQl9IGVsc2UgewotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLQkJfQotI2Vsc2UKLQkJYWRkciA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLSNlbmRpZgotCQlpZiAoc3RjYiAhPSBO
VUxMKSB7Ci0JCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7Ci0JCX0gZWxzZSB7Ci0J
CQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRy
KCkgd2lsCi0JCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBsb25n
IGFzIHRoZSBsb2NrZWQKLQkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4g
YWthIE5VTEwuCi0JCQkgKi8KLQkJCW5ldCA9IE5VTEw7Ci0JCQlTQ1RQX0lOUF9JTkNSX1JFRihp
bnApOwotCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwK
LQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXQsIE5VTEwsIE5VTEwp
OwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0J
CQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKLSNpZmRl
ZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQotCQkJCXN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luOwotCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRy
OwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7Ci0JCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsK
LQkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0J
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJZXJyb3Ig
PSBFSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7
Ci0JCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0JCQkJc2Nvbm4gPSAoc3RydWN0
IHNvY2thZGRyX2Nvbm4gKilhZGRyOwotCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciAhPSBOVUxM
KSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0J
CQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQkvKiBzYW5pdHkgY2hl
Y2tzICovCi0JCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRU5BQkxFKSAmJiAocGFk
ZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElTQUJMRSkpIHsKLQkJCWlmIChzdGNiKQotCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7
Ci0JCX0KLQotCQlpZiAoKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgJiYg
KHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpKSB7Ci0JCQlpZiAoc3RjYikK
LQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChF
SU5WQUwpOwotCQl9Ci0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJLyoqKioqKioqKioqKioq
KioqKioqKioqKlRDQiBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLwotCQkJaWYgKG5l
dCAhPSBOVUxMKSB7Ci0JCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKk5FVCBTUEVDSUZJQyBT
RVQgKioqKioqKioqKioqKioqKioqLwotCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9I
Ql9ESVNBQkxFKSB7Ci0JCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkgJiYKLQkJCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIp
KSB7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5w
LCBzdGNiLCBuZXQsCi0JCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzkp
OwotCQkJCQl9Ci0JCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9IQjsKLQkJCQl9
Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJMRSkgewotCQkJCQlpZiAo
cGFkZHJwLT5zcHBfaGJpbnRlcnZhbCkgewotCQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0g
cGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKLQkJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9mbGFn
cyAmIFNQUF9IQl9USU1FX0lTX1pFUk8pIHsKLQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9
IDA7Ci0JCQkJCX0KLQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJF
QVQsIGlucCwgc3RjYiwgbmV0LAotCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRICsgU0NUUF9MT0NfMTApOwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9
IH5TQ1RQX0FERFJfTk9IQjsKLQkJCQl9Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQ
X0hCX0RFTUFORCkgewotCQkJCQkvKiBvbiBkZW1hbmQgSEIgKi8KLQkJCQkJc2N0cF9zZW5kX2hi
KHN0Y2IsIG5ldCwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAs
IHN0Y2IsICBTQ1RQX09VVFBVVF9GUk9NX1NPQ0tPUFQsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5l
dCk7Ci0JCQkJfQotCQkJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRElTQUJM
RSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFMTEVTVF9QTVRVKSkgewotCQkJ
CQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGltZXIudGltZXIpKSB7Ci0J
CQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBz
dGNiLCBuZXQsCi0JCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzExKTsK
LQkJCQkJfQotCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOwotCQkJ
CQluZXQtPm10dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7Ci0JCQkJCXN3aXRjaCAobmV0LT5yby5f
bF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQkJY2FzZSBBRl9JTkVUOgot
CQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCQkJCQlicmVhazsKLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCQluZXQtPm10dSAr
PSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJCWRlZmF1bHQ6
Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlpZiAobmV0LT5tdHUgPCBzdGNiLT5hc29jLnNt
YWxsZXN0X210dSkgewotCQkJCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5t
dHUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9QTVRV
RF9FTkFCTEUpIHsKLQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90
aW1lci50aW1lcikpIHsKLQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BB
VEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOwotCQkJCQl9Ci0JCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX05PX1BNVFVEOwotCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0
aG1heHJ4dCkgewotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7Ci0J
CQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpIHsKLQkJ
CQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCQkJCX0KLQkJCQkJfSBl
bHNlIHsKLQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9wYXRobWF4
cnh0KSAmJgotCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQp
KSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9QRjsKLQkJCQkJCQlzY3Rw
X3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQkJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJCQkJICAgICAgICAgICAgICAgIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTIpOwotCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJCQkJ
CX0KLQkJCQkJfQotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJM
RSkgewotCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBwYWRkcnAtPnNwcF9wYXRobWF4cnh0
KSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOwotCQkJ
CQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwgMCwg
bmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlpZiAo
bmV0LT5lcnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7Ci0JCQkJCQkJbmV0
LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJCQkJc2N0cF91bHBfbm90
aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tF
RCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHBhZGRy
cC0+c3BwX3BhdGhtYXhyeHQ7Ci0JCQkJfQotCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQ
UF9EU0NQKSB7Ci0JCQkJCW5ldC0+ZHNjcCA9IHBhZGRycC0+c3BwX2RzY3AgJiAweGZjOwotCQkJ
CQluZXQtPmRzY3AgfD0gMHgwMTsKLQkJCQl9Ci0jaWZkZWYgSU5FVDYKLQkJCQlpZiAocGFkZHJw
LT5zcHBfZmxhZ3MgJiBTUFBfSVBWNl9GTE9XTEFCRUwpIHsKLQkJCQkJaWYgKG5ldC0+cm8uX2xf
YWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJCW5ldC0+Zmxvd2xhYmVsID0g
cGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAwMGZmZmZmOwotCQkJCQkJbmV0LT5mbG93
bGFiZWwgfD0gMHg4MDAwMDAwMDsKLQkJCQkJfQotCQkJCX0KLSNlbmRpZgotCQkJfSBlbHNlIHsK
LQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqQVNTT0MgT05MWSAtLSBOTyBORVQgU1BFQ0lG
SUMgU0VUICoqKioqKioqKioqKioqKioqKi8KLQkJCQlpZiAocGFkZHJwLT5zcHBfcGF0aG1heHJ4
dCAhPSAwKSB7Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlID0gcGFkZHJwLT5zcHBf
cGF0aG1heHJ4dDsKLQkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNj
dHBfbmV4dCkgewotCQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgewot
CQkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgewot
CQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCQkJCQl9Ci0JCQkJ
CQl9IGVsc2UgewotCQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9w
YXRobWF4cnh0KSAmJgotCQkJCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+cGZfdGhy
ZXNob2xkKSkgewotCQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1BGOwotCQkJ
CQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQkJCXNj
dHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAotCQkJCQkJCQkgICAgICAg
ICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkJCQkgICAgICAgICAgICAg
ICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTMpOwotCQkJCQkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG5ldCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IHBhZGRy
cC0+c3BwX3BhdGhtYXhyeHQpIHsKLQkJCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FE
RFJfUkVBQ0hBQkxFOwotCQkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJG
QUNFX0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQkJCX0KLQkJCQkJ
CX0gZWxzZSB7Ci0JCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPD0gcGFkZHJwLT5zcHBfcGF0
aG1heHJ4dCkgewotCQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JFQUNIQUJM
RTsKLQkJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3Rj
YiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJbmV0
LT5mYWlsdXJlX3RocmVzaG9sZCA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7Ci0JCQkJCX0KLQkJ
CQl9Ci0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRU5BQkxFKSB7Ci0JCQkJ
CWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsICE9IDApIHsKLQkJCQkJCXN0Y2ItPmFzb2MuaGVh
cnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50ZXJ2YWw7Ci0JCQkJCX0gZWxzZSBpZiAo
cGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7Ci0JCQkJCQlzdGNiLT5h
c29jLmhlYXJ0X2JlYXRfZGVsYXkgPSAwOwotCQkJCQl9Ci0JCQkJCS8qIFR1cm4gYmFjayBvbiB0
aGUgdGltZXIgKi8KLQkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNj
dHBfbmV4dCkgewotCQkJCQkJaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwgIT0gMCkgewotCQkJ
CQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50ZXJ2YWw7Ci0JCQkJ
CQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJTUVfSVNfWkVSTykgewot
CQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IDA7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpIHsKLQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUg
Jj0gflNDVFBfQUREUl9OT0hCOwotCQkJCQkJfQotCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQlTQ1RQX0ZST01f
U0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNCk7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJfQotCQkJCQlzY3Rw
X3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJF
QVQpOwotCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElTQUJMRSkg
ewotCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
Ci0JCQkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikpIHsKLQkJCQkJ
CQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PSEI7Ci0JCQkJCQkJaWYgKCEobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgewotCQkJCQkJCQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwKLQkJCQkJCQkJICAgICAgICAgICAgICAg
IGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRICsgU0NUUF9MT0NfMTUpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlz
Y3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJU
QkVBVCk7Ci0JCQkJfQotCQkJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRElT
QUJMRSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFMTEVTVF9QTVRVKSkgewot
CQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0J
CQkJCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGltZXIudGltZXIpKSB7
Ci0JCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlu
cCwgc3RjYiwgbmV0LAotCQkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0Nf
MTYpOwotCQkJCQkJfQotCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9OT19QTVRV
RDsKLQkJCQkJCW5ldC0+bXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsKLQkJCQkJCXN3aXRjaCAo
bmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQkJCWNhc2Ug
QUZfSU5FVDoKLQkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQkJ
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCQljYXNlIEFGX0lORVQ2OgotCQkJ
CQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJCWJyZWFrOwotI2VuZGlm
Ci0JCQkJCQlkZWZhdWx0OgotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQkJaWYgKG5ldC0+
bXR1IDwgc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHsKLQkJCQkJCQlzY3RwX3BhdGhtdHVfYWRq
dXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJc2N0cF9zdGNi
X2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpOwotCQkJ
CX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRU5BQkxFKSB7Ci0JCQkJ
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQkJ
CWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGltZXIudGltZXIpKSB7Ci0J
CQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAs
IHN0Y2IsIG5ldCk7Ci0JCQkJCQl9Ci0JCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQURE
Ul9OT19QTVRVRDsKLQkJCQkJfQotCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpOwotCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5z
cHBfZmxhZ3MgJiBTUFBfRFNDUCkgewotCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJCQluZXQtPmRzY3AgPSBwYWRkcnAtPnNwcF9kc2Nw
ICYgMHhmYzsKLQkJCQkJCW5ldC0+ZHNjcCB8PSAweDAxOwotCQkJCQl9Ci0JCQkJCXN0Y2ItPmFz
b2MuZGVmYXVsdF9kc2NwID0gcGFkZHJwLT5zcHBfZHNjcCAmIDB4ZmM7Ci0JCQkJCXN0Y2ItPmFz
b2MuZGVmYXVsdF9kc2NwIHw9IDB4MDE7Ci0JCQkJfQotI2lmZGVmIElORVQ2Ci0JCQkJaWYgKHBh
ZGRycC0+c3BwX2ZsYWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7Ci0JCQkJCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQkJCWlmIChuZXQtPnJv
Ll9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJCQkJbmV0LT5mbG93bGFi
ZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7Ci0JCQkJCQkJbmV0
LT5mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlzdGNiLT5h
c29jLmRlZmF1bHRfZmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAw
MGZmZmZmOwotCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsIHw9IDB4ODAwMDAwMDA7
Ci0JCQkJfQotI2VuZGlmCi0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxz
ZSB7Ci0JCQkvKioqKioqKioqKioqKioqKioqKioqKioqTk8gVENCLCBTRVQgVE8gZGVmYXVsdCBz
dHVmZiAqKioqKioqKioqKioqKioqKiovCi0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKHBhZGRycC0+c3BwX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJLyoKLQkJ
CQkgKiBGb3IgdGhlIFRPUy9GTE9XTEFCRUwgc3R1ZmYgeW91IHNldCBpdAotCQkJCSAqIHdpdGgg
dGhlIG9wdGlvbnMgb24gdGhlIHNvY2tldAotCQkJCSAqLwotCQkJCWlmIChwYWRkcnAtPnNwcF9w
YXRobWF4cnh0ICE9IDApIHsKLQkJCQkJaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZSA9IHBh
ZGRycC0+c3BwX3BhdGhtYXhyeHQ7Ci0JCQkJfQotCi0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdz
ICYgU1BQX0hCX1RJTUVfSVNfWkVSTykKLQkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRp
Y2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IDA7Ci0JCQkJZWxzZSBpZiAocGFkZHJwLT5zcHBf
aGJpbnRlcnZhbCAhPSAwKSB7Ci0JCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsID4gU0NU
UF9NQVhfSEJfSU5URVJWQUwpCi0JCQkJCQlwYWRkcnAtPnNwcF9oYmludGVydmFsPSBTQ1RQX01B
WF9IQl9JTlRFUlZBTDsKLQkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBf
VElNRVJfSEVBUlRCRUFUXSA9IE1TRUNfVE9fVElDS1MocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCk7
Ci0JCQkJfQotCi0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJMRSkgewot
CQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7Ci0JCQkJ
CQlpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdID0g
MDsKLQkJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsKSB7Ci0JCQkJCQlpbnAt
PnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdID0gTVNFQ19U
T19USUNLUyhwYWRkcnAtPnNwcF9oYmludGVydmFsKTsKLQkJCQkJfQotCQkJCQlzY3RwX2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKLQkJCQl9IGVsc2Ug
aWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0RJU0FCTEUpIHsKLQkJCQkJc2N0cF9mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKLQkJCQl9Ci0JCQkJ
aWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgewotCQkJCQlzY3RwX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKTsKLQkJCQl9IGVsc2Ug
aWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpIHsKLQkJCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKTsKLQkJCQl9Ci0JCQkJ
aWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0RTQ1ApIHsKLQkJCQkJaW5wLT5zY3RwX2VwLmRl
ZmF1bHRfZHNjcCA9IHBhZGRycC0+c3BwX2RzY3AgJiAweGZjOwotCQkJCQlpbnAtPnNjdHBfZXAu
ZGVmYXVsdF9kc2NwIHw9IDB4MDE7Ci0JCQkJfQotI2lmZGVmIElORVQ2Ci0JCQkJaWYgKHBhZGRy
cC0+c3BwX2ZsYWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7Ci0JCQkJCWlmIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQkJCQkJaW5wLT5zY3RwX2VwLmRl
ZmF1bHRfZmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAwMGZmZmZm
OwotCQkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsIHw9IDB4ODAwMDAwMDA7Ci0J
CQkJCX0KLQkJCQl9Ci0jZW5kaWYKLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVs
c2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJ
YnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SVE9JTkZPOgotCXsKLQkJc3RydWN0IHNjdHBfcnRvaW5m
byAqc3J0bzsKLQkJdWludDMyX3QgbmV3X2luaXQsIG5ld19taW4sIG5ld19tYXg7Ci0KLQkJU0NU
UF9DSEVDS19BTkRfQ0FTVChzcnRvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3J0b2luZm8sIG9wdHNp
emUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNydG8tPnNydG9fYXNzb2NfaWQpOwot
Ci0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoc3J0by0+c3J0b19pbml0aWFsKQotCQkJCW5ld19pbml0
ID0gc3J0by0+c3J0b19pbml0aWFsOwotCQkJZWxzZQotCQkJCW5ld19pbml0ID0gc3RjYi0+YXNv
Yy5pbml0aWFsX3J0bzsKLQkJCWlmIChzcnRvLT5zcnRvX21heCkKLQkJCQluZXdfbWF4ID0gc3J0
by0+c3J0b19tYXg7Ci0JCQllbHNlCi0JCQkJbmV3X21heCA9IHN0Y2ItPmFzb2MubWF4cnRvOwot
CQkJaWYgKHNydG8tPnNydG9fbWluKQotCQkJCW5ld19taW4gPSBzcnRvLT5zcnRvX21pbjsKLQkJ
CWVsc2UKLQkJCQluZXdfbWluID0gc3RjYi0+YXNvYy5taW5ydG87Ci0JCQlpZiAoKG5ld19taW4g
PD0gbmV3X2luaXQpICYmIChuZXdfaW5pdCA8PSBuZXdfbWF4KSkgewotCQkJCXN0Y2ItPmFzb2Mu
aW5pdGlhbF9ydG8gPSBuZXdfaW5pdDsKLQkJCQlzdGNiLT5hc29jLm1heHJ0byA9IG5ld19tYXg7
Ci0JCQkJc3RjYi0+YXNvYy5taW5ydG8gPSBuZXdfbWluOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19J
Tl9UQ1BQT09MKSB8fAotCQkJICAgIChzcnRvLT5zcnRvX2Fzc29jX2lkID09IFNDVFBfRlVUVVJF
X0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYgKHNydG8tPnNydG9f
aW5pdGlhbCkKLQkJCQkJbmV3X2luaXQgPSBzcnRvLT5zcnRvX2luaXRpYWw7Ci0JCQkJZWxzZQot
CQkJCQluZXdfaW5pdCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKLQkJCQlpZiAoc3J0by0+
c3J0b19tYXgpCi0JCQkJCW5ld19tYXggPSBzcnRvLT5zcnRvX21heDsKLQkJCQllbHNlCi0JCQkJ
CW5ld19tYXggPSBpbnAtPnNjdHBfZXAuc2N0cF9tYXhydG87Ci0JCQkJaWYgKHNydG8tPnNydG9f
bWluKQotCQkJCQluZXdfbWluID0gc3J0by0+c3J0b19taW47Ci0JCQkJZWxzZQotCQkJCQluZXdf
bWluID0gaW5wLT5zY3RwX2VwLnNjdHBfbWlucnRvOwotCQkJCWlmICgobmV3X21pbiA8PSBuZXdf
aW5pdCkgJiYgKG5ld19pbml0IDw9IG5ld19tYXgpKSB7Ci0JCQkJCWlucC0+c2N0cF9lcC5pbml0
aWFsX3J0byA9IG5ld19pbml0OwotCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF9tYXhydG8gPSBuZXdf
bWF4OwotCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG8gPSBuZXdfbWluOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCX0KLQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BU1NP
Q0lORk86Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqc2Fzb2M7Ci0KLQkJU0NUUF9D
SEVDS19BTkRfQ0FTVChzYXNvYywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcywgb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2Fzb2MtPnNhc29jX2Fzc29jX2lk
KTsKLQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSkgewotCQkJLyogYm91bmRhcnkgY2hl
Y2sgdGhlIGNvb2tpZSBsaWZlICovCi0JCQlpZiAoc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlIDwg
MTAwMCkKLQkJCQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSAxMDAwOwotCQkJaWYgKHNhc29j
LT5zYXNvY19jb29raWVfbGlmZSA+IFNDVFBfTUFYX0NPT0tJRV9MSUZFKSB7Ci0JCQkJc2Fzb2Mt
PnNhc29jX2Nvb2tpZV9saWZlID0gU0NUUF9NQVhfQ09PS0lFX0xJRkU7Ci0JCQl9Ci0JCX0KLQkJ
aWYgKHN0Y2IpIHsKLQkJCWlmIChzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCkKLQkJCQlzdGNiLT5h
c29jLm1heF9zZW5kX3RpbWVzID0gc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQ7Ci0JCQlpZiAoc2Fz
b2MtPnNhc29jX2Nvb2tpZV9saWZlKSB7Ci0JCQkJc3RjYi0+YXNvYy5jb29raWVfbGlmZSA9IE1T
RUNfVE9fVElDS1Moc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlKTsKLQkJCX0KLQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoc2Fzb2MtPnNhc29jX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYg
KHNhc29jLT5zYXNvY19hc29jbWF4cnh0KQotCQkJCQlpbnAtPnNjdHBfZXAubWF4X3NlbmRfdGlt
ZXMgPSBzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dDsKLQkJCQlpZiAoc2Fzb2MtPnNhc29jX2Nvb2tp
ZV9saWZlKSB7Ci0JCQkJCWlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmUgPSBNU0VDX1RPX1RJ
Q0tTKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSk7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1dVTkxP
Q0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZB
TDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0lOSVRNU0c6Ci0JewotCQlz
dHJ1Y3Qgc2N0cF9pbml0bXNnICpzaW5pdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNpbml0
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2luaXRtc2csIG9wdHNpemUpOwotCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOwotCQlpZiAoc2luaXQtPnNpbml0X251bV9vc3RyZWFtcykKLQkJCWlucC0+c2N0cF9l
cC5wcmVfb3Blbl9zdHJlYW1fY291bnQgPSBzaW5pdC0+c2luaXRfbnVtX29zdHJlYW1zOwotCi0J
CWlmIChzaW5pdC0+c2luaXRfbWF4X2luc3RyZWFtcykKLQkJCWlucC0+c2N0cF9lcC5tYXhfb3Bl
bl9zdHJlYW1zX2ludG9tZSA9IHNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1zOwotCi0JCWlmIChz
aW5pdC0+c2luaXRfbWF4X2F0dGVtcHRzKQotCQkJaW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVz
ID0gc2luaXQtPnNpbml0X21heF9hdHRlbXB0czsKLQotCQlpZiAoc2luaXQtPnNpbml0X21heF9p
bml0X3RpbWVvKQotCQkJaW5wLT5zY3RwX2VwLmluaXRpYWxfaW5pdF9ydG9fbWF4ID0gc2luaXQt
PnNpbml0X21heF9pbml0X3RpbWVvOwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCWJyZWFr
OwotCX0KLQljYXNlIFNDVFBfUFJJTUFSWV9BRERSOgotCXsKLQkJc3RydWN0IHNjdHBfc2V0cHJp
bSAqc3BhOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRk
cjsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNwYSwgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9zZXRwcmltLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBzcGEtPnNzcF9hc3NvY19pZCk7Ci0KLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmlu
ZWQoSU5FVDYpCi0JCWlmIChzcGEtPnNzcF9hZGRyLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgewot
CQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopJnNwYS0+c3NwX2FkZHI7Ci0JCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsK
LQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7Ci0JCQl9IGVsc2Ugewot
CQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNwYS0+c3NwX2FkZHI7Ci0JCQl9Ci0JCX0g
ZWxzZSB7Ci0JCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzcGEtPnNzcF9hZGRyOwotCQl9
Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzcGEtPnNzcF9hZGRyOwotI2Vu
ZGlmCi0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBh
ZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmlu
ZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZp
bmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAotCQkJICogdGNiIChsYXN0IGFyZ3Vt
ZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJCSAqLwotCQkJbmV0ID0gTlVMTDsKLQkJ
CVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
ZXBfYWRkcigmaW5wLCBhZGRyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJm5ldCwgTlVMTCwgTlVMTCk7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKLQkJCX0KLQkJfQotCi0JCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAo
bmV0ICE9IE5VTEwpKSB7Ci0JCQlpZiAobmV0ICE9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbikgewotCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1F
RCkpIHsKLQkJCQkJLyogT2sgd2UgbmVlZCB0byBzZXQgaXQgKi8KLQkJCQkJaWYgKHNjdHBfc2V0
X3ByaW1hcnlfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopTlVMTCwgbmV0KSA9PSAwKSB7
Ci0JCQkJCQlpZiAoKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSAmJgotCQkJCQkJICAgICghKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpICYmCi0JCQkJCQkgICAgKG5ldC0+ZGVzdF9zdGF0
ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7Ci0JCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKLQkJCQkJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5V
TEw7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
CQllcnJvciA9IEVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfU0VUX0RZ
TkFNSUNfUFJJTUFSWToKLQl7Ci0JCXVuaW9uIHNjdHBfc29ja3N0b3JlICpzczsKLSNpZmRlZiBT
Q1RQX01WUkYKLQkJaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1dpbmRv
d3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LQkJc3RydWN0IHByb2MgKnByb2M7Ci0jZW5kaWYKLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2lmIF9f
RnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0JCWVycm9yID0gcHJpdl9jaGVjayhjdXJ0aHJlYWQs
Ci0JCQkJICAgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9SVCk7Ci0jZWxpZiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA1MDAwMDAKLQkJZXJyb3IgPSBzdXNlcigoc3RydWN0IHRocmVhZCAqKXApOwotI2Vs
c2UKLQkJZXJyb3IgPSBzdXNlcihwKTsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX0FQUExFX18p
Ci0JCXByb2MgPSAoc3RydWN0IHByb2MgKilwOwotCQlpZiAocCkgewotCQkJZXJyb3IgPSBzdXNl
cihwcm9jLT5wX3VjcmVkLCAmcHJvYy0+cF9hY2ZsYWcpOwotCQl9IGVsc2UgewotCQkJYnJlYWs7
Ci0JCX0KLSNlbHNlCi0JCWVycm9yID0gc3VzZXIocCwgMCk7Ci0jZW5kaWYKLSNlbmRpZgotCQlp
ZiAoZXJyb3IpCi0JCQlicmVhazsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNzLCBvcHR2YWws
IHVuaW9uIHNjdHBfc29ja3N0b3JlLCBvcHRzaXplKTsKLQkJLyogU1VQRVIgVVNFUiBDSEVDSz8g
Ki8KLSNpZmRlZiBTQ1RQX01WUkYKLQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkr
KykgewotCQkJaWYgKHZyZl9pZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgewotCQkJCWZuZCA9IDE7
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmbmQpIHsKLQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZXJyb3IgPSBzY3Rw
X2R5bmFtaWNfc2V0X3ByaW1hcnkoJnNzLT5zYSwgdnJmX2lkKTsKLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFI6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9zZXRwZWVy
cHJpbSAqc3NwcDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lmIGRlZmluZWQoSU5FVCkg
JiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKLSNlbmRp
ZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3NwcCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zZXRw
ZWVycHJpbSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3NwcC0+c3Nw
cF9hc3NvY19pZCk7Ci0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3RwX2lmYSAq
aWZhOwotCi0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCQkJaWYgKHNzcHAt
PnNzcHBfYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNzcHAtPnNz
cHBfYWRkcjsKLQkJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKLQkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7Ci0JCQkJCWFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCQl9IGVsc2UgewotCQkJCQlhZGRyID0g
KHN0cnVjdCBzb2NrYWRkciAqKSZzc3BwLT5zc3BwX2FkZHI7Ci0JCQkJfQotCQkJfSBlbHNlIHsK
LQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzc3BwLT5zc3BwX2FkZHI7Ci0JCQl9Ci0j
ZWxzZQotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3NwcC0+c3NwcF9hZGRyOwotI2Vu
ZGlmCi0JCQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgc3RjYi0+YXNvYy52cmZf
aWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQkJCWlmIChpZmEgPT0gTlVMTCkgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJZ290byBvdXRfb2ZfaXQ7Ci0JCQl9
Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSA9PSAw
KSB7Ci0JCQkJLyogTXVzdCB2YWxpZGF0ZSB0aGUgaWZhIGZvdW5kIGlzIGluIG91ciBlcCAqLwot
CQkJCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQkJCQlpbnQgZm91bmQgPSAwOwotCi0JCQkJ
TElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikg
ewotCQkJCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7Ci0JCQkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKLQkJCQkJCQlfX2Z1bmNfXyk7Ci0JCQkJCQlj
b250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAoKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IGxhZGRyLT5pZmEpKSAmJgotCQkJCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBs
YWRkci0+aWZhKSkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWlmIChsYWRkci0+
aWZhID09IGlmYSkgewotCQkJCQkJZm91bmQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJ
CQl9Ci0JCQkJaWYgKCFmb3VuZCkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQllcnJvciA9IEVJ
TlZBTDsKLQkJCQkJZ290byBvdXRfb2ZfaXQ7Ci0JCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCi0JCQl9IGVsc2UgewotCQkJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYg
SU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQl7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAq
c2luOwotCi0JCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJCQlpZiAo
cHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCSAgICAgICAg
ICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCQlnb3RvIG91dF9vZl9pdDsKLQkJCQkJfQotCQkJ
CQlicmVhazsKLQkJCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6
Ci0JCQkJewotCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQkJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlu
cC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYt
PnNpbjZfYWRkcikgIT0gMCkgewotCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQkJCWVycm9yID0gRUlO
VkFMOwotCQkJCQkJZ290byBvdXRfb2ZfaXQ7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQot
I2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQkJCWdvdG8gb3V0X29mX2l0OwotCQkJCX0KLSNlbmRpZgotCQkJfQotCQkJaWYgKHNj
dHBfc2V0X3ByaW1hcnlfaXBfYWRkcmVzc19zYShzdGNiLCBhZGRyKSAhPSAwKSB7Ci0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgIFNDVFBfT1VUUFVUX0ZST01fU09DS09QVCwgU0NUUF9TT19MT0NLRUQpOwot
CQlvdXRfb2ZfaXQ6Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2Ug
U0NUUF9CSU5EWF9BRERfQUREUjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcyAqYWRk
cnM7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAw
MDAwCi0JCXN0cnVjdCB0aHJlYWQgKnRkOwotCi0JCXRkID0gKHN0cnVjdCB0aHJlYWQgKilwOwot
I2VuZGlmCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYWRkcnMsIG9wdHZhbCwgc3RydWN0IHNjdHBf
Z2V0YWRkcmVzc2VzLAotCQkJCSAgICBvcHRzaXplKTsKLSNpZmRlZiBJTkVUCi0JCWlmIChhZGRy
cy0+YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJCWlmIChvcHRzaXplIDwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9
IEVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCWlmICh0ZCAhPSBOVUxMICYmIChlcnJvciA9
IHByaXNvbl9sb2NhbF9pcDQodGQtPnRkX3VjcmVkLCAmKCgoc3RydWN0IHNvY2thZGRyX2luICop
KGFkZHJzLT5hZGRyKSktPnNpbl9hZGRyKSkpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCWJyZWFr
OwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJaWYgKGFk
ZHJzLT5hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChvcHRzaXplIDwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSAr
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQlpZiAodGQgIT0gTlVMTCAmJiAoZXJy
b3IgPSBwcmlzb25fbG9jYWxfaXA2KHRkLT50ZF91Y3JlZCwgJigoKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKikoYWRkcnMtPmFkZHIpKS0+c2luNl9hZGRyKSwKLQkJCQkJCQkJCQkJICAgKFNDVFBfSVBW
Nl9WNk9OTFkoaW5wKSAhPSAwKSkpICE9IDApIHsKLQkJCSAgU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJICBicmVh
azsKLQkJCX0KLSNlbmRpZgotCQl9IGVsc2UKLSNlbmRpZgotCQl7Ci0JCSAgICAgICBlcnJvciA9
IEVBRk5PU1VQUE9SVDsKLQkJICAgICAgIGJyZWFrOwotCQl9Ci0JCXNjdHBfYmluZHhfYWRkX2Fk
ZHJlc3Moc28sIGlucCwgYWRkcnMtPmFkZHIsCi0JCQkJICAgICAgIGFkZHJzLT5zZ2V0X2Fzc29j
X2lkLCB2cmZfaWQsCi0JCQkJICAgICAgICZlcnJvciwgcCk7Ci0JCWJyZWFrOwotCX0KLQljYXNl
IFNDVFBfQklORFhfUkVNX0FERFI6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKmFk
ZHJzOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUw
MDAwMAotCQlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQkJdGQgPSAoc3RydWN0IHRocmVhZCAqKXA7Ci0K
LSNlbmRpZgotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGFkZHJzLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2dldGFkZHJlc3Nlcywgb3B0c2l6ZSk7Ci0jaWZkZWYgSU5FVAotCQlpZiAoYWRkcnMtPmFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qg
c2N0cF9nZXRhZGRyZXNzZXMpIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAwMDAwCi0JCWlmICh0ZCAhPSBOVUxMICYmIChlcnJvciA9IHByaXNvbl9s
b2NhbF9pcDQodGQtPnRkX3VjcmVkLCAmKCgoc3RydWN0IHNvY2thZGRyX2luICopKGFkZHJzLT5h
ZGRyKSktPnNpbl9hZGRyKSkpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCWJyZWFrOwotCQkJfQot
I2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJaWYgKGFkZHJzLT5hZGRy
LT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChvcHRzaXplIDwgc2l6ZW9mKHN0cnVj
dCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSArIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQlpZiAodGQgIT0gTlVMTCAmJgotCQkJICAgIChlcnJv
ciA9IHByaXNvbl9sb2NhbF9pcDYodGQtPnRkX3VjcmVkLAotCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoYWRkcnMtPmFkZHIpKS0+c2lu
Nl9hZGRyKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ1RQX0lQVjZfVjZP
TkxZKGlucCkgIT0gMCkpKSAhPSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0
Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCWJyZWFrOwotCQkJ
fQotI2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0JCXsKLQkJCWVycm9yID0gRUFGTk9TVVBQT1JU
OwotCQkJYnJlYWs7Ci0JCX0KLQkJc2N0cF9iaW5keF9kZWxldGVfYWRkcmVzcyhpbnAsIGFkZHJz
LT5hZGRyLAotCQkJCQkgIGFkZHJzLT5zZ2V0X2Fzc29jX2lkLCB2cmZfaWQsCi0JCQkJCSAgJmVy
cm9yKTsKLQkJYnJlYWs7Ci0JfQotI2lmZGVmIF9fQVBQTEVfXwotCWNhc2UgU0NUUF9MSVNURU5f
RklYOgotCQkvKiBvbmx5IGFwcGxpZXMgdG8gb25lLXRvLW1hbnkgc29ja2V0cyAqLwotCQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgewotCQkJLyogbWFrZSBz
dXJlIHRoZSBBQ0NFUFRDT05OIGZsYWcgaXMgT0ZGICovCi0JCQlzby0+c29fb3B0aW9ucyAmPSB+
U09fQUNDRVBUQ09OTjsKLQkJfSBlbHNlIHsKLQkJCS8qIG90aGVyd2lzZSwgbm90IGFsbG93ZWQg
Ki8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJfQotCQlicmVhazsKLSNl
bmRpZgkJCQkvKiBfX0FQUExFX18gKi8KLQljYXNlIFNDVFBfRVZFTlQ6Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9ldmVudCAqZXZlbnQ7Ci0JCXVpbnQzMl90IGV2ZW50X3R5cGU7Ci0KLQkJU0NUUF9DSEVD
S19BTkRfQ0FTVChldmVudCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVudCwgb3B0c2l6ZSk7Ci0J
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgZXZlbnQtPnNlX2Fzc29jX2lkKTsKLQkJc3dpdGNo
IChldmVudC0+c2VfdHlwZSkgewotCQljYXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgotCQkJZXZlbnRf
dHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBT
Q1RQX1BFRVJfQUREUl9DSEFOR0U6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVD
VlBBRERSRVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUkVNT1RFX0VSUk9SOgotCQkJZXZl
bnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9TRU5EX0ZBSUxFRDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoKLQkJCWV2
ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UOwotCQkJYnJlYWs7Ci0J
CWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046Ci0JCQlldmVudF90eXBlID0gU0NUUF9Q
Q0JfRkxBR1NfQURBUFRBVElPTkVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1BBUlRJQUxf
REVMSVZFUllfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUERBUElFVk5U
OwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDoKLQkJCWV2ZW50
X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBf
U1RSRUFNX1JFU0VUX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVB
TV9SRVNFVEVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6Ci0J
CQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVDsKLQkJCWJyZWFrOwotCQljYXNl
IFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IDA7Ci0J
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFTk9UU1VQKTsKLQkJCWVycm9yID0gRU5PVFNVUDsKLQkJCWJyZWFrOwotCQljYXNlIFND
VFBfQVNTT0NfUkVTRVRfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQVNT
T0NfUkVTRVRFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5U
OgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBT
Q1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0Ogot
CQkJZXZlbnRfdHlwZSA9IDA7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlicmVhazsKLQkJfQotCQlpZiAoZXZlbnRfdHlwZSA+IDApIHsKLQkJCWlmIChzdGNiKSB7Ci0J
CQkJaWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0
Y2IsIGV2ZW50X3R5cGUpOwotCQkJCQlpZiAoZXZlbnRfdHlwZSA9PSBTQ1RQX1BDQl9GTEFHU19E
UllFVk5UKSB7Ci0JCQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkg
JiYKLQkJCQkJCSAgICBUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSAmJgotCQkJ
CQkJICAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKLQkJCQkJCQlzY3Rw
X3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5VTEwsIFNDVFBf
U09fTE9DS0VEKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCXNjdHBfc3Rj
Yl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJCX0KLQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogV2UgZG9uJ3Qgd2Fu
dCB0byBzZW5kIHVwIGEgc3Rvcm0gb2YgZXZlbnRzLAotCQkJCSAqIHNvIHJldHVybiBhbiBlcnJv
ciBmb3Igc2VuZGVyIGRyeSBldmVudHMKLQkJCQkgKi8KLQkJCQlpZiAoKGV2ZW50X3R5cGUgPT0g
U0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCkgJiYKLQkJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSA9PSAwKSAmJgotCQkJCSAgICAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpID09IDApICYmCi0JCQkJICAgICgoZXZlbnQt
PnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB8fAotCQkJCSAgICAgKGV2ZW50LT5zZV9h
c3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpKSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UU1VQKTsKLQkJ
CQkJZXJyb3IgPSBFTk9UU1VQOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCQkgICAgKGV2ZW50LT5z
ZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCQkgICAgKGV2ZW50LT5zZV9h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
LQkJCQkJaWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgZXZl
bnRfdHlwZSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgZXZl
bnRfdHlwZSk7Ci0JCQkJCX0KLQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCX0KLQkJ
CQlpZiAoKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkJ
ICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7Ci0JCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQkJ
aWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3Rj
YiwgZXZlbnRfdHlwZSk7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXNjdHBfc3RjYl9mZWF0dXJl
X29mZihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJCQkJfQotCQkJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQl9Ci0J
CQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SRUNWUkNWSU5GTzoKLQl7Ci0JCWlu
dCAqb25vZmY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChvbm9mZiwgb3B0dmFsLCBpbnQsIG9w
dHNpemUpOwotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlpZiAoKm9ub2ZmICE9IDApIHsKLQkJ
CXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKTsKLQkJfSBl
bHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5G
Tyk7Ci0JCX0KLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBT
Q1RQX1JFQ1ZOWFRJTkZPOgotCXsKLQkJaW50ICpvbm9mZjsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKG9ub2ZmLCBvcHR2YWwsIGludCwgb3B0c2l6ZSk7Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7
Ci0JCWlmICgqb25vZmYgIT0gMCkgewotCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUkVDVk5YVElORk8pOwotCQl9IGVsc2UgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKTsKLQkJfQotCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfREVGQVVMVF9TTkRJTkZPOgotCXsKLQkJc3Ry
dWN0IHNjdHBfc25kaW5mbyAqaW5mbzsKLQkJdWludDE2X3QgcG9saWN5OwotCi0JCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zbmRpbmZvLCBvcHRzaXplKTsK
LQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBpbmZvLT5zbmRfYXNzb2NfaWQpOwotCi0JCWlm
IChzdGNiKSB7Ci0JCQlpZiAoaW5mby0+c25kX3NpZCA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250
KSB7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19zdHJlYW0gPSBpbmZvLT5zbmRfc2lk
OwotCQkJCXBvbGljeSA9IFBSX1NDVFBfUE9MSUNZKHN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9f
ZmxhZ3MpOwotCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgPSBpbmZvLT5zbmRf
ZmxhZ3M7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBwb2xpY3k7Ci0J
CQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19wcGlkID0gaW5mby0+c25kX3BwaWQ7Ci0JCQkJ
c3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19jb250ZXh0ID0gaW5mby0+c25kX2NvbnRleHQ7Ci0J
CQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0J
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGluZm8tPnNuZF9hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoaW5mby0+c25kX2Fzc29jX2lk
ID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5w
LT5kZWZfc2VuZC5zaW5mb19zdHJlYW0gPSBpbmZvLT5zbmRfc2lkOwotCQkJCXBvbGljeSA9IFBS
X1NDVFBfUE9MSUNZKGlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MpOwotCQkJCWlucC0+ZGVmX3Nl
bmQuc2luZm9fZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5m
b19mbGFncyB8PSBwb2xpY3k7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19wcGlkID0gaW5mby0+
c25kX3BwaWQ7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19jb250ZXh0ID0gaW5mby0+c25kX2Nv
bnRleHQ7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJaWYgKChpbmZvLT5z
bmRfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAotCQkJICAgIChpbmZvLT5zbmRf
YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAoaW5mby0+c25kX3NpZCA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNp
bmZvX3N0cmVhbSA9IGluZm8tPnNuZF9zaWQ7Ci0JCQkJCQlwb2xpY3kgPSBQUl9TQ1RQX1BPTElD
WShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKLQkJCQkJCXN0Y2ItPmFzb2MuZGVm
X3NlbmQuc2luZm9fZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7Ci0JCQkJCQlzdGNiLT5hc29jLmRl
Zl9zZW5kLnNpbmZvX2ZsYWdzIHw9IHBvbGljeTsKLQkJCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQu
c2luZm9fcHBpZCA9IGluZm8tPnNuZF9wcGlkOwotCQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5z
aW5mb19jb250ZXh0ID0gaW5mby0+c25kX2NvbnRleHQ7Ci0JCQkJCX0KLQkJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9Ci0J
CX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9ERUZBVUxUX1BSSU5GTzoKLQl7Ci0JCXN0cnVj
dCBzY3RwX2RlZmF1bHRfcHJpbmZvICppbmZvOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaW5m
bywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbywgb3B0c2l6ZSk7Ci0JCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+cHJfYXNzb2NfaWQpOwotCi0JCWlmIChpbmZvLT5w
cl9wb2xpY3kgPiBTQ1RQX1BSX1NDVFBfTUFYKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3Ig
PSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RjYikgewotCQkJc3RjYi0+YXNvYy5k
ZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7Ci0JCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNp
bmZvX2ZsYWdzIHw9IGluZm8tPnByX3BvbGljeTsKLQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2lu
Zm9fdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAotCQkJICAgIChpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykgfHwKLQkJCSAgICAoaW5mby0+cHJfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0J
CQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzICY9
IDB4ZmZmMDsKLQkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzIHw9IGluZm8tPnByX3BvbGlj
eTsKLQkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsK
LQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKGluZm8tPnByX2Fzc29j
X2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoaW5mby0+cHJfYXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQkJ
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2Zs
YWdzICY9IDB4ZmZmMDsKLQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBp
bmZvLT5wcl9wb2xpY3k7Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fdGltZXRvbGl2
ZSA9IGluZm8tPnByX3ZhbHVlOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQot
CQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2Fz
ZSBTQ1RQX1BFRVJfQUREUl9USExEUzoKLQkJLyogQXBwbGllcyB0byB0aGUgc3BlY2lmaWMgYXNz
b2NpYXRpb24gKi8KLQl7Ci0JCXN0cnVjdCBzY3RwX3BhZGRydGhsZHMgKnRobGRzOwotCQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKLSNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7
Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHRobGRzLCBvcHR2YWwsIHN0cnVjdCBz
Y3RwX3BhZGRydGhsZHMsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHRo
bGRzLT5zcHRfYXNzb2NfaWQpOwotCi0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2
KQotCQlpZiAodGhsZHMtPnNwdF9hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJnRobGRzLT5zcHRfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgm
c2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYp
OwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0gZWxzZSB7
Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOwotCQkJ
fQotCQl9IGVsc2UgewotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9h
ZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZ0aGxkcy0+
c3B0X2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJbmV0ID0gc2N0
cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyogV2UgaW5jcmVtZW50IGhl
cmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAotCQkJICogZG8gYSBk
ZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCi0JCQkg
KiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgotCQkJICovCi0J
CQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJCWlmIChzdGNiID09IE5V
TEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQotCQl9Ci0JCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7Ci0jaWZkZWYgSU5FVAotCQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0KLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsK
LQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJCQlpZiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJaWYgKCFJTjZfSVNfQURE
Ul9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVh
azsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubjsKLQotCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRk
cjsKLQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgewotCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJ
CQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJewotCQkJCWVycm9yID0gRUFG
Tk9TVVBQT1JUOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHRobGRzLT5zcHRfcGF0aGNwdGhsZCAhPSAweGZm
ZmYpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJYnJlYWs7Ci0JCX0K
LQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCQkJbmV0LT5m
YWlsdXJlX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aG1heHJ4dDsKLQkJCQluZXQtPnBmX3Ro
cmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKLQkJCQlpZiAobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1BGKSB7Ci0JCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+ZmFp
bHVyZV90aHJlc2hvbGQpIHx8Ci0JCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPnBm
X3RocmVzaG9sZCkpIHsKLQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1BGOwot
CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5w
Zl90aHJlc2hvbGQpICYmCi0JCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1
cmVfdGhyZXNob2xkKSkgewotCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9QRjsK
LQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJCXNj
dHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAotCQkJCQkJICAgICAgICAg
ICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNyk7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7
Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFD
SEFCTEUpIHsKLQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNo
b2xkKSB7Ci0JCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7Ci0J
CQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sIHN0Y2IsIDAs
IG5ldCwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKG5l
dC0+ZXJyb3JfY291bnQgPD0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgewotCQkJCQkJbmV0LT5k
ZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsK
LQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNi
LT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkID0g
dGhsZHMtPnNwdF9wYXRobWF4cnh0OwotCQkJCQluZXQtPnBmX3RocmVzaG9sZCA9IHRobGRzLT5z
cHRfcGF0aHBmdGhsZDsKLQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikg
ewotCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkg
fHwKLQkJCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPnBmX3RocmVzaG9sZCkpIHsK
LQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCQkJCX0KLQkJCQkJ
fSBlbHNlIHsKLQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+cGZfdGhyZXNob2xk
KSAmJgotCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50IDw9IG5ldC0+ZmFpbHVyZV90aHJlc2hv
bGQpKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9QRjsKLQkJCQkJCQlz
Y3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJCQkJICAgICAgICAgICAgICAg
IHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTgpOwotCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJ
CQkJCX0KLQkJCQkJfQotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNI
QUJMRSkgewotCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNo
b2xkKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOwot
CQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwg
MCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlp
ZiAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7Ci0JCQkJCQkJ
bmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJCQkJc2N0cF91bHBf
bm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xP
Q0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJc3RjYi0+YXNvYy5kZWZfbmV0X2Zh
aWx1cmUgPSB0aGxkcy0+c3B0X3BhdGhtYXhyeHQ7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfbmV0X3Bm
X3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKLQkJCX0KLQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAodGhsZHMtPnNwdF9hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlucC0+c2N0
cF9lcC5kZWZfbmV0X2ZhaWx1cmUgPSB0aGxkcy0+c3B0X3BhdGhtYXhyeHQ7Ci0JCQkJaW5wLT5z
Y3RwX2VwLmRlZl9uZXRfcGZfdGhyZXNob2xkID0gdGhsZHMtPnNwdF9wYXRocGZ0aGxkOwotCQkJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJ
CQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JF
TU9URV9VRFBfRU5DQVBTX1BPUlQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgKmVuY2Fw
czsKLQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7Ci0j
aWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c2luX3N0b3JlOwotI2VuZGlmCi0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChlbmNhcHMsIG9wdHZh
bCwgc3RydWN0IHNjdHBfdWRwZW5jYXBzLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBlbmNhcHMtPnN1ZV9hc3NvY19pZCk7Ci0KLSNpZiBkZWZpbmVkKElORVQpICYmIGRl
ZmluZWQoSU5FVDYpCi0JCWlmIChlbmNhcHMtPnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9J
TkVUNikgewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7Ci0JCQlpZiAoSU42X0lTX0FE
RFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlpbjZfc2luNl8yX3Npbigmc2lu
X3N0b3JlLCBzaW42KTsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7
Ci0JCQl9IGVsc2UgewotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmVuY2Fwcy0+c3Vl
X2FkZHJlc3M7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAq
KSZlbmNhcHMtPnN1ZV9hZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOwotI2VuZGlmCi0JCWlmIChzdGNiICE9IE5VTEwp
IHsKLQkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8q
IFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3
aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMg
dGhlIGxvY2tlZAotCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2Eg
TlVMTC4KLQkJCSAqLwotCQkJbmV0ID0gTlVMTDsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7
Ci0JCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0
LCBOVUxMLCBOVUxMKTsKLQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOwotCQkJfQotCQl9Ci0JCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5V
TEwpKSB7Ci0jaWZkZWYgSU5FVAotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7
Ci0KLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJCQlzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopYWRkcjsKLQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FO
WSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKWFkZHI7Ci0JCQkJaWYgKCFJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2lu
Nl9hZGRyKSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNl
bmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkg
PT0gQUZfQ09OTikgewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJCXNj
b25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4tPnNjb25u
X2FkZHIgIT0gTlVMTCkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVs
c2UKLSNlbmRpZgotCQkJewotCQkJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
fQotCi0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCWlmIChuZXQgIT0gTlVMTCkgewotCQkJCW5l
dC0+cG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7Ci0JCQl9IGVsc2UgewotCQkJCXN0Y2ItPmFzb2Mu
cG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8Ci0JCQkgICAgKGVuY2Fwcy0+c3VlX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5wLT5zY3RwX2VwLnBvcnQg
PSBlbmNhcHMtPnN1ZV9wb3J0OwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQli
cmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0VDTl9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKLQkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKLQkJCQkJaW5wLT5lY25f
c3VwcG9ydGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPmVjbl9zdXBwb3J0ZWQgPSAx
OwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9QUl9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAq
YXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29j
X2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFM
OwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJ
CQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKLQkJCQkJaW5wLT5wcnNjdHBfc3VwcG9ydGVk
ID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPnByc2N0cF9zdXBwb3J0ZWQgPSAxOwotCQkJ
CX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2Ug
U0NUUF9BVVRIX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsK
LQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQp
OwotCi0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlpZiAoKGF2LT5hc3NvY192YWx1ZSA9PSAwKSAm
JgotCQkJCSAgICAoaW5wLT5hc2NvbmZfc3VwcG9ydGVkID09IDEpKSB7Ci0JCQkJICAgIAkvKiBB
VVRIIGlzIHJlcXVpcmVkIGZvciBBU0NPTkYgKi8KLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJ
CQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7Ci0JCQkJCQlpbnAtPmF1dGhfc3VwcG9ydGVk
ID0gMDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWlucC0+YXV0aF9zdXBwb3J0ZWQgPSAxOwotCQkJ
CQl9Ci0JCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0J
fQotCWNhc2UgU0NUUF9BU0NPTkZfU1VQUE9SVEVEOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2
LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9
IEVJTlZBTDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCWlmICgoYXYtPmFzc29jX3Zh
bHVlICE9IDApICYmCi0JCQkJICAgIChpbnAtPmF1dGhfc3VwcG9ydGVkID09IDApKSB7Ci0JCQkJ
ICAgIAkvKiBBVVRIIGlzIHJlcXVpcmVkIGZvciBBU0NPTkYgKi8KLQkJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
LQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKLQkJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7Ci0JCQkJCQlpbnAtPmFzY29u
Zl9zdXBwb3J0ZWQgPSAwOwotCQkJCQkJc2N0cF9hdXRoX2RlbGV0ZV9jaHVuayhTQ1RQX0FTQ09O
RiwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhf
Y2h1bmtzKTsKLQkJCQkJCXNjdHBfYXV0aF9kZWxldGVfY2h1bmsoU0NUUF9BU0NPTkZfQUNLLAot
CQkJCQkJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVu
a3MpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0gMTsKLQkJ
CQkJCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkYsCi0JCQkJCQkgICAgICAgICAgICAg
ICAgICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7Ci0JCQkJCQlzY3RwX2F1dGhf
YWRkX2NodW5rKFNDVFBfQVNDT05GX0FDSywKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgaW5w
LT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQkJCQkJfQotCQkJCQlTQ1RQX0lOUF9XVU5M
T0NLKGlucCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9y
ID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUkVDT05GSUdf
U1VQUE9SVEVEOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNp
emUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYg
KHN0Y2IpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYgKGF2LT5hc3Nv
Y192YWx1ZSA9PSAwKSB7Ci0JCQkJCWlucC0+cmVjb25maWdfc3VwcG9ydGVkID0gMDsKLQkJCQl9
IGVsc2UgewotCQkJCQlpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IDE7Ci0JCQkJfQotCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX05SU0FD
S19TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NU
UF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlp
ZiAoc3RjYikgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9G
VVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpZiAoYXYtPmFz
c29jX3ZhbHVlID09IDApIHsKLQkJCQkJaW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gMDsKLQkJCQl9
IGVsc2UgewotCQkJCQlpbnAtPm5yc2Fja19zdXBwb3J0ZWQgPSAxOwotCQkJCX0KLQkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QS1REUk9Q
X1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRz
aXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlm
IChzdGNiKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZV
VFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlmIChhdi0+YXNz
b2NfdmFsdWUgPT0gMCkgewotCQkJCQlpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gMDsKLQkJCQl9
IGVsc2UgewotCQkJCQlpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gMTsKLQkJCQl9Ci0JCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTUFYX0NX
TkQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0JCXN0cnVjdCBzY3RwX25l
dHMgKm5ldDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+
YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLm1heF9jd25kID0gYXYt
PmFzc29jX3ZhbHVlOwotCQkJaWYgKHN0Y2ItPmFzb2MubWF4X2N3bmQgPiAwKSB7Ci0JCQkJVEFJ
TFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQlpZiAo
KG5ldC0+Y3duZCA+IHN0Y2ItPmFzb2MubWF4X2N3bmQpICYmCi0JCQkJCSAgICAobmV0LT5jd25k
ID4gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpKSB7Ci0JCQkJCQluZXQtPmN3
bmQgPSBzdGNiLT5hc29jLm1heF9jd25kOwotCQkJCQkJaWYgKG5ldC0+Y3duZCA8IChuZXQtPm10
dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSB7Ci0JCQkJCQkJbmV0LT5jd25kID0gbmV0LT5t
dHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJ
fQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJ
CQlpbnAtPm1heF9jd25kID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOwot
CQllcnJvciA9IEVOT1BST1RPT1BUOwotCQlicmVhazsKLQl9IC8qIGVuZCBzd2l0Y2ggKG9wdCkg
Ki8KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotaW50Ci1zY3RwX2N0bG91
dHB1dChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpCi17Ci0Jdm9pZCAq
b3B0dmFsID0gTlVMTDsKLQlzaXplX3Qgb3B0c2l6ZSA9IDA7Ci0Jdm9pZCAqcDsKLQlpbnQgZXJy
b3IgPSAwOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0Jc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlpZiAoKHNvcHQtPnNvcHRf
bGV2ZWwgPT0gU09MX1NPQ0tFVCkgJiYKLQkgICAgKHNvcHQtPnNvcHRfbmFtZSA9PSBTT19TRVRG
SUIpKSB7Ci0JCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JCWlmIChp
bnAgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChzby0+c29fcGNiLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0JVRlMpOwotCQkJcmV0dXJuIChFSU5WQUwp
OwotCQl9Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlucC0+ZmlibnVtID0gc28tPnNvX2Zp
Ym51bTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlyZXR1cm4gKDApOwotCX0KLSNlbmRp
ZgotCWlmIChzb3B0LT5zb3B0X2xldmVsICE9IElQUFJPVE9fU0NUUCkgewotCQkvKiB3cm9uZyBw
cm90byBsZXZlbC4uLiBzZW5kIGJhY2sgdXAgdG8gSVAgKi8KLSNpZmRlZiBJTkVUNgotCQlpZiAo
SU5QX0NIRUNLX1NPQ0tBRihzbywgQUZfSU5FVDYpKQotCQkJZXJyb3IgPSBpcDZfY3Rsb3V0cHV0
KHNvLCBzb3B0KTsKLSNlbmRpZgkJCQkvKiBJTkVUNiAqLwotI2lmIGRlZmluZWQoSU5FVCkgJiYg
ZGVmaW5lZChJTkVUNikKLQkJZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQkJZXJyb3IgPSBp
cF9jdGxvdXRwdXQoc28sIHNvcHQpOwotI2VuZGlmCi0JCXJldHVybiAoZXJyb3IpOwotCX0KLQlv
cHRzaXplID0gc29wdC0+c29wdF92YWxzaXplOwotCWlmIChvcHRzaXplKSB7Ci0JCVNDVFBfTUFM
TE9DKG9wdHZhbCwgdm9pZCAqLCBvcHRzaXplLCBTQ1RQX01fU09DS09QVCk7Ci0JCWlmIChvcHR2
YWwgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChzby0+c29fcGNiLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0JVRlMpOwotCQkJcmV0dXJuIChFTk9CVUZT
KTsKLQkJfQotCQllcnJvciA9IHNvb3B0Y29weWluKHNvcHQsIG9wdHZhbCwgb3B0c2l6ZSwgb3B0
c2l6ZSk7Ci0JCWlmIChlcnJvcikgewotCQkJU0NUUF9GUkVFKG9wdHZhbCwgU0NUUF9NX1NPQ0tP
UFQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlw
ID0gKHZvaWQgKilzb3B0LT5zb3B0X3RkOwotI2Vsc2UKLQlwID0gKHZvaWQgKilzb3B0LT5zb3B0
X3A7Ci0jZW5kaWYKLQlpZiAoc29wdC0+c29wdF9kaXIgPT0gU09QVF9TRVQpIHsKLQkJZXJyb3Ig
PSBzY3RwX3NldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWwsIG9wdHNpemUsIHApOwot
CX0gZWxzZSBpZiAoc29wdC0+c29wdF9kaXIgPT0gU09QVF9HRVQpIHsKLQkJZXJyb3IgPSBzY3Rw
X2dldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWwsICZvcHRzaXplLCBwKTsKLQl9IGVs
c2UgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKHNvLT5zb19wY2IsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JfQotCWlmICgo
ZXJyb3IgPT0gMCkgJiYgKG9wdHZhbCAhPSBOVUxMKSkgewotCQllcnJvciA9IHNvb3B0Y29weW91
dChzb3B0LCBvcHR2YWwsIG9wdHNpemUpOwotCQlTQ1RQX0ZSRUUob3B0dmFsLCBTQ1RQX01fU09D
S09QVCk7Ci0JfSBlbHNlIGlmIChvcHR2YWwgIT0gTlVMTCkgewotCQlTQ1RQX0ZSRUUob3B0dmFs
LCBTQ1RQX01fU09DS09QVCk7Ci0JfQotb3V0OgotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlm
Ci0KLSNpZmRlZiBJTkVUCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gNTAwMDAwCi1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqcCkKLXsKLSNlbHNlCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMgaW50
Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwg
c3RydWN0IHByb2MgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqYWRkcikKLXsKLQl2b2lkICpwID0gTlVMTDsKLSNlbGlmIGRlZmluZWQoX19X
aW5kb3dzX18pCi1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgUEtUSFJFQUQgcCkKLXsKLSNlbHNlCi1zdGF0aWMgaW50Ci1z
Y3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBw
cm9jICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29j
a2FkZHIgKik7Ci0KLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgU0NUUF9NVlJGCi0JaW50IGksIGZu
ZCA9IDA7Ci0jZW5kaWYKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVhdGVfbG9ja19vbiA9IDA7
Ci0JdWludDMyX3QgdnJmX2lkOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNj
dHBfdGNiICpzdGNiID0gTlVMTDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5z
b19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Ag
c2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09O
TlJFU0VUKTsKLQl9Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1
cm4gRUlOVkFMOwotCX0KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAgICAgLyog
VE9ETyBfX1VzZXJzcGFjZV9fIGZhbGxzIGludG8gdGhpcyBjb2RlIGZvciBJUHY2IHN0dWZmIGF0
IHRoZSBtb21lbnQuLi4gKi8KLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQ2Ci0JY2Fz
ZSBBRl9JTkVUNjoKLQl7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAwMDAwCi0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZwOwotCi0jZW5kaWYK
LQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJc2luNnAgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCWlmIChwICE9IE5VTEwgJiYgKGVycm9yID0gcHJpc29u
X3JlbW90ZV9pcDYocC0+dGRfdWNyZWQsICZzaW42cC0+c2luNl9hZGRyKSkgIT0gMCkgewotCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgZXJyb3IpOwotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLSNlbmRpZgotCQlicmVhazsKLQl9
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCXsKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJc3RydWN0IHNvY2th
ZGRyX2luICpzaW5wOwotCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQotCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJc2lu
cCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQlpZiAocCAhPSBOVUxMICYmIChlcnJv
ciA9IHByaXNvbl9yZW1vdGVfaXA0KHAtPnRkX3VjcmVkLCAmc2lucC0+c2luX2FkZHIpKSAhPSAw
KSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBlcnJvcik7Ci0JCQlyZXR1cm4gKGVycm9yKTsKLQkJfQotI2VuZGlmCi0JCWJy
ZWFrOwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7Ci0JCXJldHVy
biAoRUFGTk9TVVBQT1JUKTsKLQl9Ci0jZW5kaWYKLQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwot
CVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwotCWNyZWF0ZV9sb2NrX29uID0gMTsKLQotCi0J
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwK
LQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgewot
CQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZBVUxUKTsKLQkgICAgICAg
IGVycm9yID0gRUZBVUxUOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2lmZGVmIElORVQ2Ci0JaWYg
KCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApICYmCi0J
ICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCWVy
cm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRfQ09OTikgJiYKLQkgICAgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9DT05OKSkgewotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJZ290byBvdXRfbm93OwotCX0KLSNlbmRpZgot
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0KLQkgICAg
U0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKiBCaW5kIGEgZXBoZW1lcmFsIHBvcnQgKi8K
LQkJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIE5VTEwsIE5VTEwsIHApOwotCQlpZiAoZXJy
b3IpIHsKLQkJCWdvdG8gb3V0X25vdzsKLQkJfQotCX0KLQkvKiBOb3cgZG8gd2UgY29ubmVjdD8g
Ki8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpICYm
Ci0JICAgIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNF
KSkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsK
LQl9Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSAmJgot
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSkgewotCQkv
KiBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgQU5EIHRoZSBUQ1AgbW9kZWwgKi8KLQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFE
RFJJTlVTRSk7Ci0JCWVycm9yID0gRUFERFJJTlVTRTsKLQkJZ290byBvdXRfbm93OwotCX0KLQlp
ZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB7Ci0JCVNDVFBf
SU5QX1JMT0NLKGlucCk7Ci0JCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0
KTsKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCX0gZWxzZSB7Ci0JCS8qIFdlIGluY3JlbWVu
dCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWxsCi0JCSAqIGRv
IGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAot
CQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgotCQkgKi8K
LQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2FkZHIoJmlucCwgYWRkciwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCWlmIChzdGNiID09IE5V
TEwpIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCX0KLQl9Ci0JaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkvKiBBbHJl
YWR5IGhhdmUgb3IgYW0gYnJpbmcgdXAgYW4gYXNzb2NpYXRpb24gKi8KLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkp
OwotCQllcnJvciA9IEVBTFJFQURZOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCi0JdnJmX2lkID0g
aW5wLT5kZWZfdnJmX2lkOwotI2lmZGVmIFNDVFBfTVZSRgotCWZvciAoaSA9IDA7IGkgPCBpbnAt
Pm51bV92cmZzOyBpKyspIHsKLQkJaWYgKHZyZl9pZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgewot
CQkJZm5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghZm5kKSB7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2VuZGlmCi0JLyog
V2UgYXJlIEdPT0QgdG8gZ28gKi8KLQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgYWRkciwg
JmVycm9yLCAwLCB2cmZfaWQsCi0JICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAu
cHJlX29wZW5fc3RyZWFtX2NvdW50LAotCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3Rw
X2VwLnBvcnQsIHApOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJLyogR2FrISBubyBtZW1vcnkg
Ki8KLQkJZ290byBvdXRfbm93OwotCX0KLQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKLQkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8
PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7Ci0JCS8qIFNldCB0aGUgY29ubmVjdGVkIGZsYWcg
c28gd2UgY2FuIHF1ZXVlIGRhdGEgKi8KLQkJc29pc2Nvbm5lY3Rpbmcoc28pOwotCX0KLQlTQ1RQ
X1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7Ci0JKHZvaWQp
U0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKLQotCS8qIGlu
aXRpYWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGFzc29jICovCi0Jc2N0
cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKGlucCwgc3RjYik7Ci0KLQlzY3RwX3NlbmRfaW5pdGlh
dGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
IG91dF9ub3c6Ci0JaWYgKGNyZWF0ZV9sb2NrX29uKSB7Ci0JCVNDVFBfQVNPQ19DUkVBVEVfVU5M
T0NLKGlucCk7Ci0JfQotCi0JU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQlyZXR1cm4gKGVycm9y
KTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwY29u
bl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0j
aWZkZWYgU0NUUF9NVlJGCi0JaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYKLQl2b2lkICpwID0gTlVM
TDsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVhdGVfbG9ja19vbiA9IDA7Ci0JdWludDMyX3Qg
dnJmX2lkOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNi
ID0gTlVMTDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYg
KGlucCA9PSBOVUxMKSB7Ci0JCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJl
IG5vdCBzZXR1cD8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9
Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gRUlOVkFMOwot
CX0KLQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lO
RVQ6Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJldHVybiAoRUlOVkFMKTsK
LQkJfQotI2VuZGlmCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lO
RVQ2OgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwp
OwotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEFGX0NPTk46Ci0jaWZkZWYg
SEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2Nvbm4pKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5k
aWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKLQkJcmV0dXJuIChF
QUZOT1NVUFBPUlQpOwotCX0KLQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCVNDVFBfQVNPQ19D
UkVBVEVfTE9DSyhpbnApOwotCWNyZWF0ZV9sb2NrX29uID0gMTsKLQotCi0JaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgewotCQkvKiBTaG91bGQg
SSByZWFsbHkgdW5sb2NrID8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZBVUxUKTsKLQkgICAgICAgIGVycm9yID0gRUZB
VUxUOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2lmZGVmIElORVQ2Ci0JaWYgKCgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApICYmCi0JICAgIChhZGRyLT5z
YV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFM
OwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2VuZGlmCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7Ci0JCS8q
IEJpbmQgYSBlcGhlbWVyYWwgcG9ydCAqLwotCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywg
TlVMTCwgTlVMTCwgcCk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBvdXRfbm93OwotCQl9Ci0J
fQotCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAqLwotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5w
LCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQllcnJvciA9
IEVJTlZBTDsKLQkJZ290byBvdXRfbm93OwotCX0KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCi0JICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19DT05ORUNURUQpKSB7Ci0JCS8qIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCBBTkQg
dGhlIFRDUCBtb2RlbCAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUREUklOVVNFKTsKLQkJZXJyb3IgPSBFQUREUklOVVNF
OwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19DT05ORUNURUQpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJc3RjYiA9IExJU1Rf
RklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0J
fSBlbHNlIHsKLQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRp
b25fZXBfYWRkcigpIHdpbGwKLQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0
Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCi0JCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9U
IGEgVENCLi4gYWthIE5VTEwuCi0JCSAqLwotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCQlz
dGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCBOVUxMLCBOVUxM
LCBOVUxMKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5w
KTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQotCX0KLQlpZiAo
c3RjYiAhPSBOVUxMKSB7Ci0JCS8qIEFscmVhZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3Nv
Y2lhdGlvbiAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCWVycm9yID0gRUFMUkVBRFk7Ci0JCWdvdG8g
b3V0X25vdzsKLQl9Ci0KLQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0jaWZkZWYgU0NUUF9N
VlJGCi0JZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewotCQlpZiAodnJmX2lk
ID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQlmbmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9
Ci0JaWYgKCFmbmQpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JCWdvdG8g
b3V0X25vdzsKLQl9Ci0jZW5kaWYKLQkvKiBXZSBhcmUgR09PRCB0byBnbyAqLwotCXN0Y2IgPSBz
Y3RwX2Fsb2NfYXNzb2MoaW5wLCBhZGRyLCAmZXJyb3IsIDAsIHZyZl9pZCwKLQkgICAgICAgICAg
ICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQsCi0JICAgICAg
ICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucG9ydCwgcCk7Ci0JaWYgKHN0Y2IgPT0gTlVM
TCkgewotCQkvKiBHYWshIG5vIG1lbW9yeSAqLwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCWlmIChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgewotCQlz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLQkJ
LyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLwotCQlzb2lz
Y29ubmVjdGluZyhzbyk7Ci0JfQotCVNDVFBfU0VUX1NUQVRFKCZzdGNiLT5hc29jLCBTQ1RQX1NU
QVRFX0NPT0tJRV9XQUlUKTsKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNv
Yy50aW1lX2VudGVyZWQpOwotCi0JLyogaW5pdGlhbGl6ZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0
ZXJzIGZvciB0aGUgYXNzb2MgKi8KLQlzY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMoaW5wLCBz
dGNiKTsKLQotCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsK
LQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0gb3V0X25vdzoKLQlpZiAoY3JlYXRlX2xvY2tfb24p
IHsKLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQl9Ci0KLQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOwotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlmCi1pbnQKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLSNpZiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA3MDAwMDAKLXNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
YmFja2xvZywgc3RydWN0IHRocmVhZCAqcCkKLSNlbHNlCi1zY3RwX2xpc3RlbihzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHRocmVhZCAqcCkKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1dpbmRv
d3NfXykKLXNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgUEtUSFJF
QUQgcCkKLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXNjdHBfbGlzdGVuKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHByb2MgKnApCi0jZWxzZQotc2N0cF9saXN0
ZW4oc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBwcm9jICpwKQotI2VuZGlmCi17Ci0JLyoKLQkg
KiBOb3RlIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIHByb3RvY29sIHByb2Nlc3NpbmcgYmVp
bmcgY2FsbGVkCi0JICogQUZURVIgYW55IHNvY2tldCBsZXZlbCBmbGFncyBhbmQgYmFja2xvZyBh
cmUgYXBwbGllZCB0byB0aGUKLQkgKiBzb2NrZXQuIFRoZSB0cmFkaXRpb25hbCB3YXkgdGhhdCB0
aGUgc29ja2V0IGZsYWdzIGFyZSBhcHBsaWVkIGlzCi0JICogQUZURVIgcHJvdG9jb2wgcHJvY2Vz
c2luZy4gV2UgaGF2ZSBtYWRlIGEgY2hhbmdlIHRvIHRoZQotCSAqIHN5cy9rZXJuL3VpcGNfc29j
a2V0LmMgbW9kdWxlIHRvIHJldmVyc2UgdGhpcyBidXQgdGhpcyBNVVNUIGJlIGluCi0JICogcGxh
Y2UgaWYgdGhlIHNvY2tldCBBUEkgZm9yIFNDVFAgaXMgdG8gd29yayBwcm9wZXJseS4KLQkgKi8K
LQotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCS8q
IEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JaWYgKHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpIHsKLQkJLyogU2VlIGlmIHdlIGhh
dmUgYSBsaXN0ZW5lciAqLwotCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqdGlucDsKLQkJdW5pb24gc2N0
cF9zb2Nrc3RvcmUgc3RvcmU7Ci0KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19CT1VOREFMTCkgPT0gMCkgewotCQkJLyogbm90IGJvdW5kIGFsbCAqLwotCQkJc3RydWN0
IHNjdHBfbGFkZHIgKmxhZGRyOwotCi0JCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBf
YWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQkJbWVtY3B5KCZzdG9yZSwgJmxhZGRyLT5p
ZmEtPmFkZHJlc3MsIHNpemVvZihzdG9yZSkpOwotCQkJCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFt
aWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJc3RvcmUuc2luLnNp
bl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJc3RvcmUuc2luNi5zaW42X3BvcnQgPSBpbnAt
PnNjdHBfbHBvcnQ7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IGlu
cC0+c2N0cF9scG9ydDsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQkJdGlucCA9IHNjdHBfcGNiX2ZpbmRlcCgmc3RvcmUuc2EsIDAsIDAs
IGlucC0+ZGVmX3ZyZl9pZCk7Ci0JCQkJaWYgKHRpbnAgJiYgKHRpbnAgIT0gaW5wKSAmJgotCQkJ
CSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkg
PT0gMCkgJiYKLQkJCQkgICAgKCh0aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUpID09IDApICYmCi0JCQkJICAgIChTQ1RQX0lTX0xJU1RFTklORyh0aW5wKSkpIHsK
LQkJCQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkgYW5kIGl0cyBub3QgdGhpcyBpbnAu
ICovCi0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnApOwotCQkJCQlyZXR1cm4gKEVBRERSSU5V
U0UpOwotCQkJCX0gZWxzZSBpZiAodGlucCkgewotCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRih0aW5w
KTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXR1cCBhIGxvY2FsIGFkZHIgYm91
bmQgYWxsICovCi0JCQltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2Yoc3RvcmUpKTsKLSNpZmRlZiBJ
TkVUNgotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7
Ci0JCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TQV9MRU4K
LQkJCQlzdG9yZS5zYS5zYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5k
aWYKLQkJCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKSB7Ci0JCQkJc3RvcmUuc2Eu
c2FfZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJCXN0b3JlLnNhLnNh
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQkJCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlpZiAoKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgJiYKLQkJCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pID09IDApKSB7Ci0j
ZWxzZQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikg
PT0gMCkgewotI2VuZGlmCi0JCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRl
ZiBIQVZFX1NBX0xFTgotCQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOwotI2VuZGlmCi0JCQl9Ci0jZW5kaWYKLQkJCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFt
aWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCXN0b3JlLnNpbi5zaW5f
cG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gaW5wLT5zY3Rw
X2xwb3J0OwotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CQkJY2FzZSBBRl9DT05OOgotCQkJCXN0b3JlLnNjb25uLnNjb25uX3BvcnQgPSBpbnAtPnNjdHBf
bHBvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9
Ci0JCQl0aW5wID0gc2N0cF9wY2JfZmluZGVwKCZzdG9yZS5zYSwgMCwgMCwgaW5wLT5kZWZfdnJm
X2lkKTsKLQkJCWlmICh0aW5wICYmICh0aW5wICE9IGlucCkgJiYKLQkJCSAgICAoKHRpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgPT0gMCkgJiYKLQkJCSAg
ICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkg
JiYKLQkJCSAgICAoU0NUUF9JU19MSVNURU5JTkcodGlucCkpKSB7Ci0JCQkJLyogd2UgaGF2ZSBh
IGxpc3RlbmVyIGFscmVhZHkgYW5kIGl0cyBub3QgdGhpcyBpbnAuICovCi0JCQkJU0NUUF9JTlBf
REVDUl9SRUYodGlucCk7Ci0JCQkJcmV0dXJuIChFQUREUklOVVNFKTsKLQkJCX0gZWxzZSBpZiAo
dGlucCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnApOwotCQkJfQotCQl9Ci0JfQotCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxF
KSB7Ci0JCXNjdHBfbG9nX2xvY2soaW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9M
T0dfTE9DS19TT0NLKTsKLQl9Ci0jZW5kaWYKLQlTT0NLX0xPQ0soc28pOwotI2lmIChkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCWVycm9yID0gc29saXN0ZW5fcHJvdG9fY2hlY2soc28pOwotCVNPQ0tf
VU5MT0NLKHNvKTsKLQlpZiAoZXJyb3IpIHsKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQly
ZXR1cm4gKGVycm9yKTsKLQl9Ci0jZW5kaWYKLQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpICYmCi0JICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgewotCQkvKiBUaGUgdW5sdWNreSBjYXNlCi0JCSAq
IC0gV2UgYXJlIGluIHRoZSB0Y3AgcG9vbCB3aXRoIHRoaXMgZ3V5LgotCQkgKiAtIFNvbWVvbmUg
ZWxzZSBpcyBpbiB0aGUgbWFpbiBpbnAgc2xvdC4KLQkJICogLSBXZSBtdXN0IG1vdmUgdGhpcyBn
dXkgKHRoZSBsaXN0ZW5lcikgdG8gdGhlIG1haW4gc2xvdAotCQkgKiAtIFdlIG11c3QgdGhlbiBt
b3ZlIHRoZSBndXkgdGhhdCB3YXMgbGlzdGVuZXIgdG8gdGhlIFRDUCBQb29sLgotCQkgKi8KLQkJ
aWYgKHNjdHBfc3dhcF9pbnBjYl9mb3JfbGlzdGVuKGlucCkpIHsKLQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVBRERSSU5VU0UpOwotCQkJcmV0dXJuIChFQUREUklOVVNFKTsKLQkJ
fQotCX0KLQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
JiYKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsK
LQkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCi0JCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFERFJJTlVTRSk7Ci0JCXJldHVybiAoRUFERFJJ
TlVTRSk7Ci0JfQotCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKiBXZSBtdXN0IGRvIGEgYmluZC4gKi8K
LQkJaWYgKChlcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCkpKSB7Ci0J
CQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICovCi0JCQlyZXR1cm4gKGVycm9yKTsKLQkJ
fQotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQK
LQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpID09IDApIHsK
LQkJU09DS19MT0NLKHNvKTsKLQkJc29saXN0ZW5fcHJvdG8oc28sIGJhY2tsb2cpOwotCQlTT0NL
X1VOTE9DSyhzbyk7Ci0JfQotI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkvKiBJdCBhcHBl
YXJzIGZvciA3LjAgYW5kIG9uLCB3ZSBtdXN0IGFsd2F5cyBjYWxsIHRoaXMuICovCi0JU09DS19M
T0NLKHNvKTsKLQlzb2xpc3Rlbl9wcm90byhzbywgYmFja2xvZyk7Ci0jZWxzZQotCVNPQ0tfTE9D
Syhzbyk7Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSA9
PSAwKSB7Ci0JCXNvbGlzdGVuX3Byb3RvKHNvKTsKLQl9Ci0jZW5kaWYKLSNlbmRpZgotI2lmICFk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEyMDAwMzQKLQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgewotCQkvKiByZW1vdmUg
dGhlIEFDQ0VQVENPTk4gZmxhZyBmb3Igb25lLXRvLW1hbnkgc29ja2V0cyAqLwotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJc28tPnNvX29wdGlvbnMgJj0gflNDVFBfU09fQUNDRVBUQ09O
TjsKLSNlbHNlCi0JCXNvLT5zb19vcHRpb25zICY9IH5TT19BQ0NFUFRDT05OOwotI2VuZGlmCi0J
fQotCVNPQ0tfVU5MT0NLKHNvKTsKLSNlbmRpZgotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoYmFja2xvZyA+IDApIHsKLQkJaW5wLT5zY3Rw
X2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORzsKLQl9IGVsc2UgewotCQlpbnAtPnNj
dHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORzsKLQl9Ci0jZWxzZQotCWlucC0+
c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19BQ0NFUFRJTkc7Ci0jZW5kaWYKLQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLXN0YXRpYyBpbnQgc2N0cF9k
ZWZlcmVkX3dha2V1cF9jbnQgPSAwOwotCi1pbnQKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqKmFkZHIpCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKLXNjdHBfYWNjZXB0KHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCAqbmFtZWxlbiwKLQkg
ICAgdm9pZCAqYWNjZXB0X2luZm8sIGludCAqYWNjZXB0X2luZm9fbGVuKQotewotI2Vsc2UKLXNj
dHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQotewotCXN0cnVj
dCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0jZW5kaWYK
LQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQl1bmlv
biBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLSNpZmRlZiBJTkVUNgotI2lmZGVmIFNDVFBfS0FNRQot
CWludCBlcnJvcjsKLSNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KLSNlbmRpZgotCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0KLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgewotCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQlyZXR1cm4gKEVPUE5P
VFNVUFApOwotCX0KLQlpZiAoc28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNURUQpIHsKLQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQ09OTkFCT1JURUQpOwotCQlyZXR1cm4gKEVD
T05OQUJPUlRFRCk7Ci0JfQotCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0
KTsKLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0Jc3RvcmUgPSBzdGNiLT5hc29jLnByaW1hcnlf
ZGVzdGluYXRpb24tPnJvLl9sX2FkZHI7Ci0Jc3RjYi0+YXNvYy5zdGF0ZSAmPSB+U0NUUF9TVEFU
RV9JTl9BQ0NFUFRfUVVFVUU7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCXN3aXRjaCAoc3Rv
cmUuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbiwgc3RydWN0IHNvY2thZGRyX2luICos
IHNpemVvZiAqc2luKTsKLQkJaWYgKHNpbiA9PSBOVUxMKQotCQkJcmV0dXJuIChFTk9NRU0pOwot
I2Vsc2UKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCW1lbXNldChzaW4s
IDAsIHNpemVvZigqc2luKSk7Ci0jZW5kaWYKLQkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
LSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOwotI2Vu
ZGlmCi0JCXNpbi0+c2luX3BvcnQgPSBzdG9yZS5zaW4uc2luX3BvcnQ7Ci0JCXNpbi0+c2luX2Fk
ZHIgPSBzdG9yZS5zaW4uc2luX2FkZHI7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luOwotI2VsaWYgIWRlZmlu
ZWQoX19QYW5kYV9fKQotCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKLSNlbmRp
ZgotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0J
ewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKLQkJaWYgKHNpbjYgPT0gTlVMTCkKLQkJCXJldHVy
biAoRU5PTUVNKTsKLSNlbHNlCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7
Ci0JCW1lbXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsKLSNlbmRpZgotCQlzaW42LT5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc2luNi0+c2luNl9s
ZW4gPSBzaXplb2YoKnNpbjYpOwotI2VuZGlmCi0JCXNpbjYtPnNpbjZfcG9ydCA9IHN0b3JlLnNp
bjYuc2luNl9wb3J0OwotCQlzaW42LT5zaW42X2FkZHIgPSBzdG9yZS5zaW42LnNpbjZfYWRkcjsK
LSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi0jaWZkZWYgU0NUUF9LQU1FCi0J
CWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpKSAhPSAwKSB7Ci0JCQlTQ1RQX0ZS
RUVfU09OQU1FKHNpbjYpOwotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLSNlbHNlCi0JCWlmIChJ
TjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQotCQkJLyoKLQkJCSAqIHNp
bjYtPnNpbjZfc2NvcGVfaWQgPQotCQkJICogbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIx
NlsxXSk7Ci0JCQkgKi8KLQkJCWluNl9yZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRk
ciwgTlVMTCk7CS8qIHNraXAgaWZwIGNoZWNrICovCi0JCWVsc2UKLQkJCXNpbjYtPnNpbjZfc2Nv
cGVfaWQgPSAwOwkvKiBYWFggKi8KLSNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KLSNlbmRpZiAvKiBT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKLSNlbGlmICFkZWZp
bmVkKF9fUGFuZGFfXykKLQkJU0NUUF9CVUZfTEVOKG5hbSkgPSBzaXplb2YoKnNpbjYpOwotI2Vu
ZGlmCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlj
YXNlIEFGX0NPTk46Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJU0NU
UF9NQUxMT0NfU09OQU1FKHNjb25uLCBzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJaWYgKHNjb25uID09IE5VTEwpIHsKLQkJCXJldHVybiAo
RU5PTUVNKTsKLQkJfQotCQlzY29ubi0+c2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBI
QVZFX1NDT05OX0xFTgotCQlzY29ubi0+c2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKLSNlbmRpZgotCQlzY29ubi0+c2Nvbm5fcG9ydCA9IHN0b3JlLnNjb25uLnNjb25u
X3BvcnQ7Ci0JCXNjb25uLT5zY29ubl9hZGRyID0gc3RvcmUuc2Nvbm4uc2Nvbm5fYWRkcjsKLQkJ
KmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2Nvbm47Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgot
CWRlZmF1bHQ6Ci0JCS8qIFRTTkggKi8KLQkJYnJlYWs7Ci0JfQotCS8qIFdha2UgYW55IGRlbGF5
ZWQgc2xlZXAgYWN0aW9uICovCi0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0RPTlRfV0FLRSkgewotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlpbnAtPnNjdHBfZmxhZ3Mg
Jj0gflNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRTsKLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQpIHsKLQkJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9Q
Q0JfRkxBR1NfV0FLRU9VVFBVVDsKLQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCVNPQ0tC
VUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fc25kKTsKLQkJCWlmIChzb3dyaXRlYWJsZShp
bnAtPnNjdHBfc29ja2V0KSkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAvKl9fVXNlcnNwYWNlX18gY2FsbGluZyBzb3d3YWt1cF9sb2Nr
ZWQgYmVjYXVzZSBvZiBTT0NLQlVGX0xPQ0sgYWJvdmUuICovCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JCQkJc293d2FrZXVwX2xvY2tlZChpbnAtPnNjdHBfc29ja2V0KTsKLSNlbHNlCi0j
aWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJLyogc29ja2V0IGlzIGxvY2tlZCAqLwotI2VuZGlm
Ci0JCQkJc293d2FrZXVwKGlucC0+c2N0cF9zb2NrZXQpOwotI2VuZGlmCi0JCQl9IGVsc2Ugewot
CQkJCVNPQ0tCVUZfVU5MT0NLKCZpbnAtPnNjdHBfc29ja2V0LT5zb19zbmQpOwotCQkJfQotCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJfQotCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfV0FLRUlOUFVUKSB7Ci0JCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZM
QUdTX1dBS0VJTlBVVDsKLQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCVNPQ0tCVUZfTE9D
SygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKLQkJCWlmIChzb3JlYWRhYmxlKGlucC0+c2N0
cF9zb2NrZXQpKSB7Ci0JCQkJc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQrKzsKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qX19Vc2Vy
c3BhY2VfXyBjYWxsaW5nIHNvcndha3VwX2xvY2tlZCBiZWNhdXNlIG9mIFNPQ0tCVUZfTE9DSyBh
Ym92ZSAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCXNvcndha2V1cF9sb2NrZWQo
aW5wLT5zY3RwX3NvY2tldCk7Ci0jZWxzZQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkJCS8q
IHNvY2tldCBpcyBsb2NrZWQgKi8KLSNlbmRpZgotCQkJCXNvcndha2V1cChpbnAtPnNjdHBfc29j
a2V0KTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlTT0NLQlVGX1VOTE9DSygmaW5wLT5zY3Rw
X3NvY2tldC0+c29fcmN2KTsKLQkJCX0KLQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCX0KLQkJ
U0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJc2N0
cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJICAgICAgICAgICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzE5KTsKLQl9Ci0JcmV0dXJuICgw
KTsKLX0KLQotI2lmZGVmIElORVQKLWludAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotc2N0cF9pbmdldGFkZHIo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKmFkZHIpCi17Ci0Jc3RydWN0IHNv
Y2thZGRyX2luICpzaW47Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKLXNjdHBfaW5nZXRhZGRy
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0Jc3RydWN0IHNv
Y2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLSNlbHNlCi1zY3Rw
X2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7Ci0j
ZW5kaWYKLQl1aW50MzJfdCB2cmZfaWQ7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQlzdHJ1
Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwotCi0JLyoKLQkgKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGlu
IGNhc2UgaXQgYmxvY2tzLgotCSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVNDVFBfTUFMTE9DX1NPTkFN
RShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2YgKnNpbik7Ci0JaWYgKHNpbiA9PSBO
VUxMKQotCQlyZXR1cm4gKEVOT01FTSk7Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQltZW1z
ZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2Vsc2UKLQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNp
emVvZigqc2luKTsKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2VuZGlmCi0Jc2lu
LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4tPnNpbl9s
ZW4gPSBzaXplb2YoKnNpbik7Ci0jZW5kaWYKLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOwotCWlmICghaW5wKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCVNDVFBfRlJFRV9TT05B
TUUoc2luKTsKLSNlbmRpZgotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVDT05OUkVTRVQpOwot
CX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCXNpbi0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBv
cnQ7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0J
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKLQkJCXN0
cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2E7Ci0JCQlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCQlpbnQgZm5kOwotCi0JCQlzdGNiID0gTElTVF9GSVJT
VCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJZ290
byBub3RDb25uOwotCQkJfQotCQkJZm5kID0gMDsKLQkJCXNpbl9hID0gTlVMTDsKLQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywg
c2N0cF9uZXh0KSB7Ci0JCQkJc2luX2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopJm5ldC0+cm8u
X2xfYWRkcjsKLQkJCQlpZiAoc2luX2EgPT0gTlVMTCkKLQkJCQkJLyogdGhpcyB3aWxsIG1ha2Ug
Y292ZXJpdHkgaGFwcHkgKi8KLQkJCQkJY29udGludWU7Ci0KLQkJCQlpZiAoc2luX2EtPnNpbl9m
YW1pbHkgPT0gQUZfSU5FVCkgewotCQkJCQlmbmQgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0J
CQl9Ci0JCQlpZiAoKCFmbmQpIHx8IChzaW5fYSA9PSBOVUxMKSkgewotCQkJCS8qIHB1bnQgKi8K
LQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJZ290byBub3RDb25uOwotCQkJfQotCi0J
CQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JCQlzY3RwX2lmYSA9IHNjdHBfc291cmNlX2Fk
ZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJCQkJCQkJIHN0Y2IsCi0JCQkJCQkJCSAoc2N0cF9yb3V0
ZV90ICopJm5ldC0+cm8sCi0JCQkJCQkJCSBuZXQsIDAsIHZyZl9pZCk7Ci0JCQlpZiAoc2N0cF9p
ZmEpIHsKLQkJCQlzaW4tPnNpbl9hZGRyID0gc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRy
OwotCQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmEpOwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIHRoZSBib3VuZCBhbGwgY2FzZSB5b3UgZ2V0
IGJhY2sgMCAqLwotCW5vdENvbm46Ci0JCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IDA7Ci0JCX0K
LQotCX0gZWxzZSB7Ci0JCS8qIFRha2UgdGhlIGZpcnN0IElQdjQgYWRkcmVzcyBpbiB0aGUgbGlz
dCAqLwotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0JCWludCBmbmQgPSAwOwotCi0JCUxJ
U1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsK
LQkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0J
CQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKLQotCQkJCXNpbl9hID0gJmxhZGRyLT5pZmEt
PmFkZHJlc3Muc2luOwotCQkJCXNpbi0+c2luX2FkZHIgPSBzaW5fYS0+c2luX2FkZHI7Ci0JCQkJ
Zm5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZuZCkgewotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKQotCQkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOwotI2VuZGlmCi0JCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFTk9FTlQpOwotCQkJcmV0dXJuIChFTk9FTlQpOwotCQl9Ci0JfQot
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkoKmFkZHIpID0gKHN0cnVj
dCBzb2NrYWRkciAqKXNpbjsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLWludAotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICoqYWRkcikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSNlbGlmIGRlZmluZWQoX19Q
YW5kYV9fKQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9p
biAqKWFkZHI7Ci0jZWxzZQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IG1idWYgKm5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1
Y3Qgc29ja2FkZHJfaW4gKik7Ci0KLSNlbmRpZgotCWludCBmbmQ7Ci0Jc3RydWN0IHNvY2thZGRy
X2luICpzaW5fYTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX3RjYiAq
c3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkvKiBEbyB0aGUgbWFsbG9jIGZpcnN0
IGluIGNhc2UgaXQgYmxvY2tzLiAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVNDVFBfTUFMTE9DX1NPTkFN
RShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2YgKnNpbik7Ci0JaWYgKHNpbiA9PSBO
VUxMKQotCQlyZXR1cm4gKEVOT01FTSk7Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQltZW1z
ZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2Vsc2UKLQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNp
emVvZigqc2luKTsKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2VuZGlmCi0Jc2lu
LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4tPnNpbl9s
ZW4gPSBzaXplb2YoKnNpbik7Ci0jZW5kaWYKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7Ci0JaWYgKChpbnAgPT0gTlVMTCkgfHwKLQkgICAgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDApKSB7Ci0JCS8qIFVEUCB0eXBlIGFu
ZCBsaXN0ZW5lcnMgd2lsbCBkcm9wIG91dCBoZXJlICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCVNDVFBf
RlJFRV9TT05BTUUoc2luKTsKLSNlbmRpZgotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5P
VENPTk4pOwotCX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCXN0Y2IgPSBMSVNUX0ZJUlNUKCZp
bnAtPnNjdHBfYXNvY19saXN0KTsKLQlpZiAoc3RjYikgewotCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OwotCX0KLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbik7Ci0jZW5kaWYKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JZm5kID0gMDsKLQlUQUlMUV9GT1JFQUNI
KG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCXNpbl9hID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCWlmIChzaW5fYS0+c2luX2ZhbWlseSA9
PSBBRl9JTkVUKSB7Ci0JCQlmbmQgPSAxOwotCQkJc2luLT5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0
OwotCQkJc2luLT5zaW5fYWRkciA9IHNpbl9hLT5zaW5fYWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0J
fQotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlpZiAoIWZuZCkgewotCQkvKiBObyBJUHY0IGFk
ZHJlc3MgKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOwotI2VuZGlm
Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVOT0VOVCk7Ci0JCXJldHVybiAoRU5PRU5UKTsKLQl9Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0J
KCphZGRyKSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW47Ci0jZW5kaWYKLQlyZXR1cm4gKDApOwot
fQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pCi1zdHJ1Y3QgcHJfdXNycmVxcyBzY3RwX3VzcnJlcXMgPSB7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkucHJ1X2Fib3J0ID0gc2N0cF9hYm9ydCwKLQkucHJ1
X2FjY2VwdCA9IHNjdHBfYWNjZXB0LAotCS5wcnVfYXR0YWNoID0gc2N0cF9hdHRhY2gsCi0JLnBy
dV9iaW5kID0gc2N0cF9iaW5kLAotCS5wcnVfY29ubmVjdCA9IHNjdHBfY29ubmVjdCwKLQkucHJ1
X2NvbnRyb2wgPSBpbl9jb250cm9sLAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDY5MDAwMAot
CS5wcnVfY2xvc2UgPSBzY3RwX2Nsb3NlLAotCS5wcnVfZGV0YWNoID0gc2N0cF9jbG9zZSwKLQku
cHJ1X3NvcG9sbCA9IHNvcG9sbF9nZW5lcmljLAotCS5wcnVfZmx1c2ggPSBzY3RwX2ZsdXNoLAot
I2Vsc2UKLQkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAotCS5wcnVfc29wb2xsID0gc29wb2xs
LAotI2VuZGlmCi0JLnBydV9kaXNjb25uZWN0ID0gc2N0cF9kaXNjb25uZWN0LAotCS5wcnVfbGlz
dGVuID0gc2N0cF9saXN0ZW4sCi0JLnBydV9wZWVyYWRkciA9IHNjdHBfcGVlcmFkZHIsCi0JLnBy
dV9zZW5kID0gc2N0cF9zZW5kbSwKLQkucHJ1X3NodXRkb3duID0gc2N0cF9zaHV0ZG93biwKLQku
cHJ1X3NvY2thZGRyID0gc2N0cF9pbmdldGFkZHIsCi0JLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2Vu
ZCwKLQkucHJ1X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlCi0jZWxpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLQkucHJ1X2Fib3J0ID0gc2N0cF9hYm9ydCwKLQkucHJ1X2FjY2VwdCA9IHNjdHBfYWNj
ZXB0LAotCS5wcnVfYXR0YWNoID0gc2N0cF9hdHRhY2gsCi0JLnBydV9iaW5kID0gc2N0cF9iaW5k
LAotCS5wcnVfY29ubmVjdCA9IHNjdHBfY29ubmVjdCwKLQkucHJ1X2Nvbm5lY3QyID0gcHJ1X2Nv
bm5lY3QyX25vdHN1cHAsCi0JLnBydV9jb250cm9sID0gaW5fY29udHJvbCwKLQkucHJ1X2RldGFj
aCA9IHNjdHBfZGV0YWNoLAotCS5wcnVfZGlzY29ubmVjdCA9IHNjdHBfZGlzY29ubmVjdCwKLQku
cHJ1X2xpc3RlbiA9IHNjdHBfbGlzdGVuLAotCS5wcnVfcGVlcmFkZHIgPSBzY3RwX3BlZXJhZGRy
LAotCS5wcnVfcmN2ZCA9IE5VTEwsCi0JLnBydV9yY3Zvb2IgPSBwcnVfcmN2b29iX25vdHN1cHAs
Ci0JLnBydV9zZW5kID0gc2N0cF9zZW5kbSwKLQkucHJ1X3NlbnNlID0gcHJ1X3NlbnNlX251bGws
Ci0JLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCi0JLnBydV9zb2NrYWRkciA9IHNjdHBf
aW5nZXRhZGRyLAotCS5wcnVfc29zZW5kID0gc2N0cF9zb3NlbmQsCi0JLnBydV9zb3JlY2VpdmUg
PSBzY3RwX3NvcmVjZWl2ZSwKLQkucHJ1X3NvcG9sbCA9IHNvcG9sbAotI2VsaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKLQlzY3RwX2Fib3J0LAotCXNjdHBfYWNjZXB0LAotCXNjdHBfYXR0YWNoLAot
CXNjdHBfYmluZCwKLQlzY3RwX2Nvbm5lY3QsCi0JcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCi0JTlVM
TCwKLQlOVUxMLAotCXNjdHBfZGlzY29ubmVjdCwKLQlzY3RwX2xpc3RlbiwKLQlzY3RwX3BlZXJh
ZGRyLAotCU5VTEwsCi0JcHJ1X3Jjdm9vYl9ub3RzdXBwLAotCU5VTEwsCi0JcHJ1X3NlbnNlX251
bGwsCi0Jc2N0cF9zaHV0ZG93biwKLQlzY3RwX2ZsdXNoLAotCXNjdHBfaW5nZXRhZGRyLAotCXNj
dHBfc29zZW5kLAotCXNjdHBfc29yZWNlaXZlLAotCXNvcG9sbF9nZW5lcmljLAotCU5VTEwsCi0J
c2N0cF9jbG9zZQotI2VuZGlmCi19OwotI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwX3VzcnJlcShzbywgcmVxLCBtLCBuYW0sIGNv
bnRyb2wpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0JaW50IHJlcTsKLQlzdHJ1Y3QgbWJ1ZiAqbSwg
Km5hbSwgKmNvbnRyb2w7Ci17Ci0Jc3RydWN0IHByb2MgKnAgPSBjdXJwcm9jOwotCXVpbnQzMl90
IHZyZl9pZDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlpbnQgZXJyb3I7Ci0JaW50IGZhbWls
eTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNv
X3BjYjsKLQotCWVycm9yID0gMDsKLQlmYW1pbHkgPSBzby0+c29fcHJvdG8tPnByX2RvbWFpbi0+
ZG9tX2ZhbWlseTsKLQlpZiAocmVxID09IFBSVV9DT05UUk9MKSB7Ci0JCXN3aXRjaCAoZmFtaWx5
KSB7Ci0JCWNhc2UgUEZfSU5FVDoKLQkJCWVycm9yID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwg
KGNhZGRyX3QpbmFtLAotCQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sKTsKLQkJCWJyZWFr
OwotI2lmZGVmIElORVQ2Ci0JCWNhc2UgUEZfSU5FVDY6Ci0JCQllcnJvciA9IGluNl9jb250cm9s
KHNvLCAobG9uZyltLCAoY2FkZHJfdCluYW0sCi0JCQkgICAgKHN0cnVjdCBpZm5ldCAqKWNvbnRy
b2wsIHApOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9S
VCk7Ci0JCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJfQotCQlyZXR1cm4gKGVycm9yKTsKLQl9
Ci0Jc3dpdGNoIChyZXEpIHsKLQljYXNlIFBSVV9BVFRBQ0g6Ci0JCWVycm9yID0gc2N0cF9hdHRh
Y2goc28sIGZhbWlseSwgcCk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0RFVEFDSDoKLQkJZXJyb3Ig
PSBzY3RwX2RldGFjaChzbyk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0JJTkQ6Ci0JCWlmIChuYW0g
PT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJldHVybiAoRUlOVkFMKTsKLQkJfQotCQll
cnJvciA9IHNjdHBfYmluZChzbywgbmFtLCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfTElTVEVO
OgotCQllcnJvciA9IHNjdHBfbGlzdGVuKHNvLCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfQ09O
TkVDVDoKLQkJaWYgKG5hbSA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChF
SU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cF9jb25uZWN0KHNvLCBuYW0sIHApOwotCQlicmVh
azsKLQljYXNlIFBSVV9ESVNDT05ORUNUOgotCQllcnJvciA9IHNjdHBfZGlzY29ubmVjdChzbyk7
Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0FDQ0VQVDoKLQkJaWYgKG5hbSA9PSBOVUxMKSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cF9hY2Nl
cHQoc28sIG5hbSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX1NIVVRET1dOOgotCQllcnJvciA9IHNj
dHBfc2h1dGRvd24oc28pOwotCQlicmVhazsKLQotCWNhc2UgUFJVX1JDVkQ6Ci0JCS8qCi0JCSAq
IEZvciBPcGVuIGFuZCBOZXQgQlNELCB0aGlzIGlzIHJlYWwgdWdseS4gVGhlIG1idWYgKm5hbQot
CQkgKiB0aGF0IGlzIHBhc3NlZCAoYnkgc29yZWNlaXZlKCkpIGlzIHRoZSBpbnQgZmxhZ3MgYyBh
c3QgYXMKLQkJICogYSAobWJ1ZiAqKSB5dWNrIQotCQkgKi8KLQkJYnJlYWs7Ci0KLQljYXNlIFBS
VV9TRU5EOgotCQkvKiBGbGFncyBhcmUgaWdub3JlZCAqLwotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHI7Ci0KLQkJCWlmIChuYW0gPT0gTlVMTCkKLQkJCQlhZGRyID0gTlVMTDsKLQkJCWVs
c2UKLQkJCQlhZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLQotCQkJZXJyb3Ig
PSBzY3RwX3NlbmRtKHNvLCAwLCBtLCBhZGRyLCBjb250cm9sLCBwKTsKLQkJfQotCQlicmVhazsK
LQljYXNlIFBSVV9BQk9SVDoKLQkJZXJyb3IgPSBzY3RwX2Fib3J0KHNvKTsKLQkJYnJlYWs7Ci0K
LQljYXNlIFBSVV9TRU5TRToKLQkJZXJyb3IgPSAwOwotCQlicmVhazsKLQljYXNlIFBSVV9SQ1ZP
T0I6Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7Ci0JCWVycm9yID0gRUFGTk9TVVBQT1JUOwotCQlicmVh
azsKLQljYXNlIFBSVV9TRU5ET09COgotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOwotCQllcnJvciA9IEVB
Rk5PU1VQUE9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfUEVFUkFERFI6Ci0JCWVycm9yID0gc2N0
cF9wZWVyYWRkcihzbywgbmFtKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfU09DS0FERFI6Ci0JCWVy
cm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX1NMT1dU
SU1POgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQly
ZXR1cm4gKGVycm9yKTsKLX0KLQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLWludAotcmVnaXN0ZXJfcmVjdl9jYihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAg
ICAgICAgICAgICAgaW50ICgqcmVjZWl2ZV9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24g
c2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgc2l6ZV90
IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8p
KQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKikgc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJcmV0dXJuICgwKTsKLQl9
Ci0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQlpbnAtPnJlY3ZfY2FsbGJhY2sgPSByZWNlaXZlX2Ni
OwotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlyZXR1cm4gKDEpOwotfQotCi1pbnQKLXJlZ2lz
dGVyX3NlbmRfY2Ioc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90IHNiX3RocmVzaG9sZCwgaW50
ICgqc2VuZF9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSkpCi17Ci0J
c3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKSBz
by0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOwotCWlucC0+c2VuZF9jYWxsYmFjayA9IHNlbmRfY2I7Ci0JaW5wLT5z
ZW5kX3NiX3RocmVzaG9sZCA9IHNiX3RocmVzaG9sZDsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JLyogRklYTUUgY2hhbmdlIHRvIGN1cnJlbnQgYW1vdW50IGZyZWUuIFRoaXMgd2lsbCBiZSB0
aGUgZnVsbCBidWZmZXIKLQkgKiB0aGUgZmlyc3QgdGltZSB0aGlzIGlzIHJlZ2lzdGVyZWQgYnV0
IGl0IGNvdWxkIGJlIG9ubHkgYSBwb3J0aW9uCi0JICogb2YgdGhlIHNlbmQgYnVmZmVyIGlmIHRo
aXMgaXMgY2FsbGVkIGEgc2Vjb25kIHRpbWUgZS5nLiBpZiB0aGUKLQkgKiB0aHJlc2hvbGQgY2hh
bmdlcy4KLQkgKi8KLQlyZXR1cm4gKDEpOwotfQotCi1pbnQKLXJlZ2lzdGVyX3VscF9pbmZvIChz
dHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2luZm8pCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2Ig
KmlucDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKSBzby0+c29fcGNiOwotCWlmIChp
bnAgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwot
CWlucC0+dWxwX2luZm8gPSB1bHBfaW5mbzsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JcmV0
dXJuICgxKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Zh
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Zhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA5OTIyNjg1NDU3NjUwZTY3MDA3MjRlMzg1NmJlYmUyYWQ4ODlkNmQwLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF92YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBACi0vKi0KLSAqIENvcHly
aWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hh
ZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBO
ZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJT
RF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lz
L25ldGluZXQvc2N0cF92YXIuaCAzMTc0NTcgMjAxNy0wNC0yNiAxOToyNjo0MFogdHVleGVuICQi
KTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfVkFSX0hfCi0jZGVmaW5lIF9ORVRJ
TkVUX1NDVFBfVkFSX0hfCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0KLSNpZiBk
ZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KQotZXh0ZXJuIHN0cnVjdCBwcl91c3JyZXFzIHNjdHBfdXNycmVxczsKLSNlbmRpZgotCi0KLSNk
ZWZpbmUgc2N0cF9mZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgIChpbnAtPnNjdHBfZmVhdHVyZXMg
fD0gZmVhdHVyZSkKLSNkZWZpbmUgc2N0cF9mZWF0dXJlX29mZihpbnAsIGZlYXR1cmUpIChpbnAt
PnNjdHBfZmVhdHVyZXMgJj0gfmZlYXR1cmUpCi0jZGVmaW5lIHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIGZlYXR1cmUpICgoaW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gZmVhdHVyZSkK
LSNkZWZpbmUgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIGZlYXR1cmUpICgoaW5wLT5zY3RwX2Zl
YXR1cmVzICYgZmVhdHVyZSkgPT0gMCkKLQotI2RlZmluZSBzY3RwX3N0Y2JfZmVhdHVyZV9vbihp
bnAsIHN0Y2IsIGZlYXR1cmUpIHtcCi0JaWYgKHN0Y2IpIHsgXAotCQlzdGNiLT5hc29jLnNjdHBf
ZmVhdHVyZXMgfD0gZmVhdHVyZTsgXAotCX0gZWxzZSBpZiAoaW5wKSB7IFwKLQkJaW5wLT5zY3Rw
X2ZlYXR1cmVzIHw9IGZlYXR1cmU7IFwKLQl9IFwKLX0KLSNkZWZpbmUgc2N0cF9zdGNiX2ZlYXR1
cmVfb2ZmKGlucCwgc3RjYiwgZmVhdHVyZSkge1wKLQlpZiAoc3RjYikgeyBcCi0JCXN0Y2ItPmFz
b2Muc2N0cF9mZWF0dXJlcyAmPSB+ZmVhdHVyZTsgXAotCX0gZWxzZSBpZiAoaW5wKSB7IFwKLQkJ
aW5wLT5zY3RwX2ZlYXR1cmVzICY9IH5mZWF0dXJlOyBcCi0JfSBcCi19Ci0jZGVmaW5lIHNjdHBf
c3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3RjYiwgZmVhdHVyZSkgXAotCSgoKHN0Y2IgIT0gTlVM
TCkgJiYgXAotCSAgKChzdGNiLT5hc29jLnNjdHBfZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSBmZWF0
dXJlKSkgfHwgXAotCSAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSAmJiBcCi0JICAo
KGlucC0+c2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IGZlYXR1cmUpKSkKLSNkZWZpbmUgc2N0
cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgZmVhdHVyZSkgXAotCSgoKHN0Y2IgIT0g
TlVMTCkgJiYgXAotCSAgKChzdGNiLT5hc29jLnNjdHBfZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSAw
KSkgfHwgXAotCSAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSAmJiBcCi0JICAoKGlu
cC0+c2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IDApKSB8fCBcCi0JICgoc3RjYiA9PSBOVUxM
KSAmJiAoaW5wID09IE5VTEwpKSkKLQotLyogbWFuYWdpbmcgbW9iaWxpdHlfZmVhdHVyZSBpbiBp
bnBjYiAoYnkgbWljY2hpZSkgKi8KLSNkZWZpbmUgc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29uKGlu
cCwgZmVhdHVyZSkgIChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgfD0gZmVhdHVyZSkKLSNk
ZWZpbmUgc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIGZlYXR1cmUpIChpbnAtPnNjdHBf
bW9iaWxpdHlfZmVhdHVyZXMgJj0gfmZlYXR1cmUpCi0jZGVmaW5lIHNjdHBfaXNfbW9iaWxpdHlf
ZmVhdHVyZV9vbihpbnAsIGZlYXR1cmUpIChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgJiBm
ZWF0dXJlKQotI2RlZmluZSBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVy
ZSkgKChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSAwKQotCi0jZGVm
aW5lIHNjdHBfbWF4c3BhY2Uoc2IpIChtYXgoKHNiKS0+c2JfaGl3YXQsU0NUUF9NSU5JTUFMX1JX
TkQpKQotCi0jZGVmaW5lCXNjdHBfc2JzcGFjZShhc29jLCBzYikgKChsb25nKSAoKHNjdHBfbWF4
c3BhY2Uoc2IpID4gKGFzb2MpLT5zYl9jYykgPyAoc2N0cF9tYXhzcGFjZShzYikgLSAoYXNvYykt
PnNiX2NjKSA6IDApKQotCi0jZGVmaW5lCXNjdHBfc2JzcGFjZV9mYWlsZWRtc2dzKHNiKSAoKGxv
bmcpICgoc2N0cF9tYXhzcGFjZShzYikgPiAoc2IpLT5zYl9jYykgPyAoc2N0cF9tYXhzcGFjZShz
YikgLSAoc2IpLT5zYl9jYykgOiAwKSkKLQotI2RlZmluZSBzY3RwX3Nic3BhY2Vfc3ViKGEsYikg
KCgoYSkgPiAoYikpID8gKChhKSAtIChiKSkgOiAwKQotCi0vKgotICogSSB0cmllZCB0byBjYWNo
ZSB0aGUgcmVhZHEgZW50cmllcyBhdCBvbmUgcG9pbnQuIEJ1dCB0aGUgcmVhbGl0eQotICogaXMg
dGhhdCBpdCBkaWQgbm90IGFkZCBhbnkgcGVyZm9ybWFuY2Ugc2luY2UgdGhpcyBtZWFudCB3ZSBo
YWQgdG8KLSAqIGxvY2sgdGhlIFNUQ0Igb24gcmVhZC4gQW5kIGF0IHRoYXQgcG9pbnQgb25jZSB5
b3UgaGF2ZSB0byBkbyBhbgotICogZXh0cmEgbG9jaywgaXQgcmVhbGx5IGRvZXMgbm90IG1hdHRl
ciBpZiB0aGUgbG9jayBpcyBpbiB0aGUgWk9ORQotICogc3R1ZmYgb3IgaW4gb3VyIGNvZGUuIE5v
dGUgdGhhdCB0aGlzIHNhbWUgcHJvYmxlbSB3b3VsZCBvY2N1ciB3aXRoCi0gKiBhbiBtYnVmIGNh
Y2hlIGFzIHdlbGwgc28gaXQgaXMgbm90IHJlYWxseSB3b3J0aCBkb2luZywgYXQgbGVhc3QKLSAq
IHJpZ2h0IG5vdyA6LUQKLSAqLwotI2lmZGVmIElOVkFSSUFOVFMKLSNkZWZpbmUgc2N0cF9mcmVl
X2FfcmVhZHEoX3N0Y2IsIF9yZWFkcSkgeyBcCi0JaWYgKChfcmVhZHEpLT5vbl9zdHJtX3EpIFwK
LQkJcGFuaWMoIk9uIHN0cm0gcSBzdGNiOiVwIHJlYWRxOiVwIiwgKF9zdGNiKSwgKF9yZWFkcSkp
OyBcCi0JU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCAoX3Jl
YWRxKSk7IFwKLQlTQ1RQX0RFQ1JfUkVBRFFfQ09VTlQoKTsgXAotfQotI2Vsc2UKLSNkZWZpbmUg
c2N0cF9mcmVlX2FfcmVhZHEoX3N0Y2IsIF9yZWFkcSkgeyBcCi0JU0NUUF9aT05FX0ZSRUUoU0NU
UF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCAoX3JlYWRxKSk7IFwKLQlTQ1RQX0RFQ1JfUkVB
RFFfQ09VTlQoKTsgXAotfQotI2VuZGlmCi0KLSNkZWZpbmUgc2N0cF9hbGxvY19hX3JlYWRxKF9z
dGNiLCBfcmVhZHEpIHsgXAotCShfcmVhZHEpID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9yZWFkcSksIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKTsgXAotCWlmICgo
X3JlYWRxKSkgeyBcCi0JICAgICBTQ1RQX0lOQ1JfUkVBRFFfQ09VTlQoKTsgXAotCX0gXAotfQot
Ci0jZGVmaW5lIHNjdHBfZnJlZV9hX3N0cm1vcShfc3RjYiwgX3N0cm1vcSwgX3NvX2xvY2tlZCkg
eyBcCi0JaWYgKChfc3RybW9xKS0+aG9sZHNfa2V5X3JlZikgeyBcCi0JCXNjdHBfYXV0aF9rZXlf
cmVsZWFzZShzdGNiLCBzcC0+YXV0aF9rZXlpZCwgX3NvX2xvY2tlZCk7IFwKLQkJKF9zdHJtb3Ep
LT5ob2xkc19rZXlfcmVmID0gMDsgXAotCX0gXAotCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX3N0cm1vcSksIChfc3RybW9xKSk7IFwKLQlTQ1RQX0RFQ1JfU1RSTU9RX0NP
VU5UKCk7IFwKLX0KLQotI2RlZmluZSBzY3RwX2FsbG9jX2Ffc3RybW9xKF9zdGNiLCBfc3RybW9x
KSB7IFwKLQkoX3N0cm1vcSkgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25l
X3N0cm1vcSksIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKTsgXAotCWlmICgoX3N0
cm1vcSkpIHsgXAotCQltZW1zZXQoX3N0cm1vcSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVh
bV9xdWV1ZV9wZW5kaW5nKSk7IFwKLQkJU0NUUF9JTkNSX1NUUk1PUV9DT1VOVCgpOyBcCi0JCShf
c3RybW9xKS0+aG9sZHNfa2V5X3JlZiA9IDA7IFwKLQl9IFwKLX0KLQotI2RlZmluZSBzY3RwX2Zy
ZWVfYV9jaHVuayhfc3RjYiwgX2NoaywgX3NvX2xvY2tlZCkgeyBcCi0JaWYgKChfY2hrKS0+aG9s
ZHNfa2V5X3JlZikge1wKLQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKChfc3RjYiksIChfY2hrKS0+
YXV0aF9rZXlpZCwgX3NvX2xvY2tlZCk7IFwKLQkJKF9jaGspLT5ob2xkc19rZXlfcmVmID0gMDsg
XAotCX0gXAotCWlmIChfc3RjYikgeyBcCi0JCVNDVFBfVENCX0xPQ0tfQVNTRVJUKChfc3RjYikp
OyBcCi0JCWlmICgoX2NoayktPndob1RvKSB7IFwKLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcigo
X2NoayktPndob1RvKTsgXAotCQkJKF9jaGspLT53aG9UbyA9IE5VTEw7IFwKLQkJfSBcCi0JCWlm
ICgoKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rX2NudCA+IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9h
c29jX2ZyZWVfcmVzY19saW1pdCkpIHx8IFwKLQkJICAgIChTQ1RQX0JBU0VfSU5GTyhpcGlfZnJl
ZV9jaHVua3MpID4gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQp
KSkgeyBcCi0JCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayks
IChfY2hrKSk7IFwKLQkJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsgXAotCQl9IGVsc2UgeyBcCi0J
CQlUQUlMUV9JTlNFUlRfVEFJTCgmKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rcywgKF9jaGspLCBz
Y3RwX25leHQpOyBcCi0JCQkoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtfY250Kys7IFwKLQkJCWF0
b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpLCAxKTsgXAotCQl9
IFwKLQl9IGVsc2UgeyBcCi0JCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25l
X2NodW5rKSwgKF9jaGspKTsgXAotCQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7IFwKLQl9IFwKLX0K
LQotI2RlZmluZSBzY3RwX2FsbG9jX2FfY2h1bmsoX3N0Y2IsIF9jaGspIHsgXAotCWlmIChUQUlM
UV9FTVBUWSgmKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rcykpIHsgXAotCQkoX2NoaykgPSBTQ1RQ
X1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgc3RydWN0IHNjdHBfdG1p
dF9jaHVuayk7IFwKLQkJaWYgKChfY2hrKSkgeyBcCi0JCQlTQ1RQX0lOQ1JfQ0hLX0NPVU5UKCk7
IFwKLQkJCShfY2hrKS0+d2hvVG8gPSBOVUxMOyBcCi0JCQkoX2NoayktPmhvbGRzX2tleV9yZWYg
PSAwOyBcCi0JCX0gXAotCX0gZWxzZSB7IFwKLQkJKF9jaGspID0gVEFJTFFfRklSU1QoJihfc3Rj
YiktPmFzb2MuZnJlZV9jaHVua3MpOyBcCi0JCVRBSUxRX1JFTU9WRSgmKF9zdGNiKS0+YXNvYy5m
cmVlX2NodW5rcywgKF9jaGspLCBzY3RwX25leHQpOyBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQo
JlNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5rcyksIDEpOyBcCi0JCShfY2hrKS0+aG9sZHNf
a2V5X3JlZiA9IDA7IFwKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfY2FjaGVkX2Noayk7IFwKLQkJ
KF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rX2NudC0tOyBcCi0JfSBcCi19Ci0KLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMAotCi0jZGVmaW5lIHNj
dHBfZnJlZV9yZW1vdGVfYWRkcihfX25ldCkgeyBcCi0JaWYgKChfX25ldCkpIHsgIFwKLQkJaWYg
KFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmKF9fbmV0KS0+cmVmX2NvdW50KSkg
eyBcCi0JCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJihfX25ldCktPnJ4dF90aW1lci50aW1l
cik7IFwKLQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+cG10dV90aW1lci50
aW1lcik7IFwKLQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+aGJfdGltZXIu
dGltZXIpOyBcCi0JCQlpZiAoKF9fbmV0KS0+cm8ucm9fcnQpIHsgXAotCQkJCVJURlJFRSgoX19u
ZXQpLT5yby5yb19ydCk7IFwKLQkJCQkoX19uZXQpLT5yby5yb19ydCA9IE5VTEw7IFwKLQkJCX0g
XAotCQkJaWYgKChfX25ldCktPnNyY19hZGRyX3NlbGVjdGVkKSB7IFwKLQkJCQlzY3RwX2ZyZWVf
aWZhKChfX25ldCktPnJvLl9zX2FkZHIpOyBcCi0JCQkJKF9fbmV0KS0+cm8uX3NfYWRkciA9IE5V
TEw7IFwKLQkJCX0gXAotCQkJKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOyBcCi0JCQko
X19uZXQpLT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOyBcCi0JCQlTQ1RQX1pP
TkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQpLCAoX19uZXQpKTsgXAotCQkJU0NU
UF9ERUNSX1JBRERSX0NPVU5UKCk7IFwKLQkJfSBcCi0JfSBcCi19Ci0KLSNkZWZpbmUgc2N0cF9z
YmZyZWUoY3RsLCBzdGNiLCBzYiwgbSkgeyBcCi0JU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQo
JihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQlTQ1RQX1NBVkVfQVRPTUlDX0RF
Q1JFTUVOVCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAotCWlmICgoKGN0bCktPmRvX25vdF9y
ZWZfc3RjYiA9PSAwKSAmJiBzdGNiKSB7XAotCQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgm
KHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQkJU0NUUF9TQVZFX0FU
T01JQ19ERUNSRU1FTlQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuLCBNU0laRSk7
IFwKLQl9IFwKLQlpZiAoU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9EQVRBICYmIFNDVFBfQlVGX1RZ
UEUobSkgIT0gTVRfSEVBREVSICYmIFwKLQkgICAgU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9PT0JE
QVRBKSBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJihzYiktPnNiX2N0bCxTQ1RQX0JVRl9MRU4o
KG0pKSk7IFwKLX0KLQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwgc2IsIG0pIHsgXAotCWF0
b21pY19hZGRfaW50KCYoc2IpLT5zYl9jYyxTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQlhdG9taWNf
YWRkX2ludCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAotCWlmIChzdGNiKSB7IFwKLQkJYXRv
bWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCi0J
CWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2MubXlfcnduZF9jb250cm9sX2xlbiwgTVNJWkUp
OyBcCi0JfSBcCi0JaWYgKFNDVFBfQlVGX1RZUEUobSkgIT0gTVRfREFUQSAmJiBTQ1RQX0JVRl9U
WVBFKG0pICE9IE1UX0hFQURFUiAmJiBcCi0JICAgIFNDVFBfQlVGX1RZUEUobSkgIT0gTVRfT09C
REFUQSkgXAotCQlhdG9taWNfYWRkX2ludCgmKHNiKS0+c2JfY3RsLFNDVFBfQlVGX0xFTigobSkp
KTsgXAotfQotCi0jZWxzZQkJCQkvKiBGcmVlQlNEIFZlcnNpb24gPD0gNTAwMDAwIG9yIG5vbi1G
cmVlQlNEICovCi0KLSNkZWZpbmUgc2N0cF9mcmVlX3JlbW90ZV9hZGRyKF9fbmV0KSB7IFwKLQlp
ZiAoKF9fbmV0KSkgeyBcCi0JCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQo
JihfX25ldCktPnJlZl9jb3VudCkpIHsgXAotCQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCYo
X19uZXQpLT5yeHRfdGltZXIudGltZXIpOyBcCi0JCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1Ao
JihfX25ldCktPnBtdHVfdGltZXIudGltZXIpOyBcCi0JCQkodm9pZClTQ1RQX09TX1RJTUVSX1NU
T1AoJihfX25ldCktPmhiX3RpbWVyLnRpbWVyKTsgXAotCQkJaWYgKChfX25ldCktPnJvLnJvX3J0
KSB7IFwKLQkJCQlSVEZSRUUoKF9fbmV0KS0+cm8ucm9fcnQpOyBcCi0JCQkJKF9fbmV0KS0+cm8u
cm9fcnQgPSBOVUxMOyBcCi0JCQl9IFwKLQkJCWlmICgoX19uZXQpLT5zcmNfYWRkcl9zZWxlY3Rl
ZCkgeyBcCi0JCQkJc2N0cF9mcmVlX2lmYSgoX19uZXQpLT5yby5fc19hZGRyKTsgXAotCQkJCShf
X25ldCktPnJvLl9zX2FkZHIgPSBOVUxMOyBcCi0JCQl9IFwKLQkJCShfX25ldCktPnNyY19hZGRy
X3NlbGVjdGVkID0gMDsgXAotCQkJKF9fbmV0KS0+ZGVzdF9zdGF0ZSAmPX5TQ1RQX0FERFJfUkVB
Q0hBQkxFOyBcCi0JCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQp
LCAoX19uZXQpKTsgXAotCQkJU0NUUF9ERUNSX1JBRERSX0NPVU5UKCk7IFwKLQkJfSBcCi0JfSBc
Ci19Ci0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSNkZWZpbmUgc2N0cF9zYmZyZWUoY3RsLCBz
dGNiLCBzYiwgbSkgeyBcCi0JaWYgKChzYiktPnNiX2NjID49ICh1aW50MzJfdClTQ1RQX0JVRl9M
RU4oKG0pKSkgeyBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJihzYiktPnNiX2NjLCBTQ1RQX0JV
Rl9MRU4oKG0pKSk7IFwKLQl9IGVsc2UgeyBcCi0JCShzYiktPnNiX2NjID0gMDsgXAotCX0gXAot
CWlmICgoKGN0bCktPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNiKSB7IFwKLQkJaWYgKChz
dGNiKS0+YXNvYy5zYl9jYyA+PSAodWludDMyX3QpU0NUUF9CVUZfTEVOKChtKSkpIHsgXAotCQkJ
YXRvbWljX3N1YnRyYWN0X2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0p
KSk7IFwKLQkJfSBlbHNlIHsgXAotCQkJKHN0Y2IpLT5hc29jLnNiX2NjID0gMDsgXAotCQl9IFwK
LQl9IFwKLX0KLQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwgc2IsIG0pIHsgXAotCWF0b21p
Y19hZGRfaW50KCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCi0JaWYgKHN0Y2Ip
IHsgXAotCQlhdG9taWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4o
KG0pKSk7IFwKLQl9IFwKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBzY3RwX3NiZnJlZShjdGwsIHN0
Y2IsIHNiLCBtKSB7IFwKLQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHNiKS0+c2JfY2Ms
IFNDVFBfQlVGX0xFTigobSkpKTsgXAotCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKCYoc2Ip
LT5zYl9tYmNudCwgTVNJWkUpOyBcCi0JaWYgKCgoY3RsKS0+ZG9fbm90X3JlZl9zdGNiID09IDAp
ICYmIHN0Y2IpIHsgXAotCQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29j
LnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQkJU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1F
TlQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuLCBNU0laRSk7IFwKLQl9IFwKLX0K
LQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwgc2IsIG0pIHsgXAotCWF0b21pY19hZGRfaW50
KCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCi0JYXRvbWljX2FkZF9pbnQoJihz
YiktPnNiX21iY250LCBNU0laRSk7IFwKLQlpZiAoc3RjYikgeyBcCi0JCWF0b21pY19hZGRfaW50
KCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAotCQlhdG9taWNfYWRk
X2ludCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1TSVpFKTsgXAotCX0gXAot
fQotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBzY3RwX3Vjb3VudF9pbmNyKHZhbCkgeyBcCi0J
dmFsKys7IFwKLX0KLQotI2RlZmluZSBzY3RwX3Vjb3VudF9kZWNyKHZhbCkgeyBcCi0JaWYgKHZh
bCA+IDApIHsgXAotCQl2YWwtLTsgXAotCX0gZWxzZSB7IFwKLQkJdmFsID0gMDsgXAotCX0gXAot
fQotCi0jZGVmaW5lIHNjdHBfbWJ1Zl9jcnVzaChkYXRhKSBkbyB7IFwKLQlzdHJ1Y3QgbWJ1ZiAq
X207IFwKLQlfbSA9IChkYXRhKTsgXAotCXdoaWxlIChfbSAmJiAoU0NUUF9CVUZfTEVOKF9tKSA9
PSAwKSkgeyBcCi0JCShkYXRhKSAgPSBTQ1RQX0JVRl9ORVhUKF9tKTsgXAotCQlTQ1RQX0JVRl9O
RVhUKF9tKSA9IE5VTEw7IFwKLQkJc2N0cF9tX2ZyZWUoX20pOyBcCi0JCV9tID0gKGRhdGEpOyBc
Ci0JfSBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2Uo
dHAxKSBkbyB7IFwKLQlpZiAodHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgPj0gdHAxLT5ib29rX3Np
emUpIFwKLQkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgLT0gdHAxLT5ib29rX3NpemU7IFwKLQll
bHNlIFwKLQkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgPSAwOyBcCi19IHdoaWxlICgwKQotCi0j
ZGVmaW5lIHNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKSBkbyB7IFwKLQkodHAxKS0+d2hv
VG8tPmZsaWdodF9zaXplICs9ICh0cDEpLT5ib29rX3NpemU7IFwKLX0gd2hpbGUgKDApCi0KLSNp
ZmRlZiBTQ1RQX0ZTX1NQRUNfTE9HCi0jZGVmaW5lIHNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNl
KHN0Y2IsIHRwMSkgZG8geyBcCi0JaWYgKHN0Y2ItPmFzb2MuZnNfaW5kZXggPiBTQ1RQX0ZTX1NQ
RUNfTE9HX1NJWkUpIFwKLQkJc3RjYi0+YXNvYy5mc19pbmRleCA9IDA7XAotCXN0Y2ItPmFzb2Mu
ZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0udG90YWxfZmxpZ2h0ID0gc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHQ7IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLnRzbiA9
IHRwMS0+cmVjLmRhdGEudHNuOyBcCi0Jc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2lu
ZGV4XS5ib29rID0gdHAxLT5ib29rX3NpemU7IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFz
b2MuZnNfaW5kZXhdLnNlbnQgPSB0cDEtPnNlbnQ7IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2It
PmFzb2MuZnNfaW5kZXhdLmluY3IgPSAwOyBcCi0Jc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29j
LmZzX2luZGV4XS5kZWNyID0gMTsgXAotCXN0Y2ItPmFzb2MuZnNfaW5kZXgrKzsgXAotCXRwMS0+
d2luZG93X3Byb2JlID0gMDsgXAotCWlmIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+PSB0cDEt
PmJvb2tfc2l6ZSkgeyBcCi0JCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0IC09IHRwMS0+Ym9va19z
aXplOyBcCi0JCWlmIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCA+IDApIFwKLQkJCXN0
Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50LS07IFwKLQl9IGVsc2UgeyBcCi0JCXN0Y2ItPmFz
b2MudG90YWxfZmxpZ2h0ID0gMDsgXAotCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCA9
IDA7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc2N0cF90b3RhbF9mbGlnaHRfaW5j
cmVhc2Uoc3RjYiwgdHAxKSBkbyB7IFwKLQlpZiAoc3RjYi0+YXNvYy5mc19pbmRleCA+IFNDVFBf
RlNfU1BFQ19MT0dfU0laRSkgXAotCQlzdGNiLT5hc29jLmZzX2luZGV4ID0gMDtcCi0Jc3RjYi0+
YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50b3RhbF9mbGlnaHQgPSBzdGNiLT5hc29j
LnRvdGFsX2ZsaWdodDsgXAotCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0u
dHNuID0gdHAxLT5yZWMuZGF0YS50c247IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2Mu
ZnNfaW5kZXhdLmJvb2sgPSB0cDEtPmJvb2tfc2l6ZTsgXAotCXN0Y2ItPmFzb2MuZnNsb2dbc3Rj
Yi0+YXNvYy5mc19pbmRleF0uc2VudCA9IHRwMS0+c2VudDsgXAotCXN0Y2ItPmFzb2MuZnNsb2db
c3RjYi0+YXNvYy5mc19pbmRleF0uaW5jciA9IDE7IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2It
PmFzb2MuZnNfaW5kZXhdLmRlY3IgPSAwOyBcCi0Jc3RjYi0+YXNvYy5mc19pbmRleCsrOyBcCi0J
KHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCsrOyBcCi0JKHN0Y2IpLT5hc29jLnRvdGFs
X2ZsaWdodCArPSAodHAxKS0+Ym9va19zaXplOyBcCi19IHdoaWxlICgwKQotCi0jZWxzZQotCi0j
ZGVmaW5lIHNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSkgZG8geyBcCi0JdHAx
LT53aW5kb3dfcHJvYmUgPSAwOyBcCi0JaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID49IHRw
MS0+Ym9va19zaXplKSB7IFwKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgLT0gdHAxLT5ib29r
X3NpemU7IFwKLQkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50ID4gMCkgXAotCQkJ
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQtLTsgXAotCX0gZWxzZSB7IFwKLQkJc3RjYi0+
YXNvYy50b3RhbF9mbGlnaHQgPSAwOyBcCi0JCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50
ID0gMDsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzY3RwX3RvdGFsX2ZsaWdodF9p
bmNyZWFzZShzdGNiLCB0cDEpIGRvIHsgXAotCShzdGNiKS0+YXNvYy50b3RhbF9mbGlnaHRfY291
bnQrKzsgXAotCShzdGNiKS0+YXNvYy50b3RhbF9mbGlnaHQgKz0gKHRwMSktPmJvb2tfc2l6ZTsg
XAotfSB3aGlsZSAoMCkKLQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9QRl9FTkFCTEVEKF9uZXQp
IChfbmV0LT5wZl90aHJlc2hvbGQgPCBfbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkKLSNkZWZpbmUg
U0NUUF9ORVRfSVNfUEYoX25ldCkgKF9uZXQtPnBmX3RocmVzaG9sZCA8IF9uZXQtPmVycm9yX2Nv
dW50KQotCi1zdHJ1Y3Qgc2N0cF9uZXRzOwotc3RydWN0IHNjdHBfaW5wY2I7Ci1zdHJ1Y3Qgc2N0
cF90Y2I7Ci1zdHJ1Y3Qgc2N0cGhkcjsKLQotCi0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi12b2lkIHNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28p
OwotI2Vsc2UKLWludCBzY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci0jZW5kaWYKLWlu
dCBzY3RwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pOwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAyMDAwCi12b2lk
IHNjdHBfY3RsaW5wdXQgX19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICopKTsKLWlu
dCBzY3RwX2N0bG91dHB1dCBfX1AoKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKikp
OwotI2lmZGVmIElORVQKLXZvaWQgc2N0cF9pbnB1dF93aXRoX3BvcnQgX19QKChzdHJ1Y3QgbWJ1
ZiAqLCBpbnQsIHVpbnQxNl90KSk7Ci12b2lkIHNjdHBfaW5wdXQgX19QKChzdHJ1Y3QgbWJ1ZiAq
LCBpbnQpKTsKLSNlbmRpZgotdm9pZCBzY3RwX3BhdGhtdHVfYWRqdXN0bWVudCBfX1AoKHN0cnVj
dCBzY3RwX3RjYiAqLCB1aW50MTZfdCkpOwotI2Vsc2UKLXZvaWQgc2N0cF9jdGxpbnB1dChpbnQs
IHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICopOwotaW50IHNjdHBfY3Rsb3V0cHV0KHN0cnVjdCBz
b2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7Ci0jaWZkZWYgSU5FVAotdm9pZCBzY3RwX2lucHV0
X3dpdGhfcG9ydChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQxNl90KTsKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDIwCi1pbnQgc2N0cF9pbnB1
dChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCk7Ci0jZWxzZQotdm9pZCBzY3RwX2lucHV0KHN0
cnVjdCBtYnVmICosIGludCk7Ci0jZW5kaWYKLSNlbmRpZgotdm9pZCBzY3RwX3BhdGhtdHVfYWRq
dXN0bWVudChzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDE2X3QpOwotI2VuZGlmCi0jZWxzZQotI2lm
IGRlZmluZWQoX19QYW5kYV9fKQotdm9pZCBzY3RwX2lucHV0KHBha2hhbmRsZV90eXBlIGlfcGFr
KTsKLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0cF9wYXRobXR1X2FkanVz
dG1lbnQoc3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90KTsKLSNlbHNlCi12b2lkIHNjdHBfaW5w
dXQoc3RydWN0IG1idWYgKiwuLi4pOwotI2VuZGlmCi12b2lkICpzY3RwX2N0bGlucHV0KGludCwg
c3RydWN0IHNvY2thZGRyICosIHZvaWQgKik7Ci1pbnQgc2N0cF9jdGxvdXRwdXQoaW50LCBzdHJ1
Y3Qgc29ja2V0ICosIGludCwgaW50LCBzdHJ1Y3QgbWJ1ZiAqKik7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMjAwMAotdm9pZCBzY3Rw
X2RyYWluIF9fUCgodm9pZCkpOwotI2Vsc2UKLXZvaWQgc2N0cF9kcmFpbih2b2lkKTsKLSNlbmRp
ZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0cF9pbml0KHVpbnQxNl90LAot
ICAgICAgICAgICAgICAgaW50ICgqKSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiksCi0gICAgICAgICAgICAgICB2b2lk
ICgqKShjb25zdCBjaGFyICosIC4uLikpOwotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKLXZvaWQgc2N0cF9pbml0IF9fUCgodm9pZCkpOwot
I2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYhZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVm
aW5lZChBUFBMRV9NT1VOVEFJTkxJT04pKQotdm9pZCBzY3RwX2luaXQoc3RydWN0IHByb3Rvc3cg
KnBwLCBzdHJ1Y3QgZG9tYWluICpkcCk7Ci0jZWxzZQotdm9pZCBzY3RwX2luaXQodm9pZCk7Ci12
b2lkIHNjdHBfbm90aWZ5KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc2N0cF9uZXRzICosCi0gICAgdWludDhfdCwgdWludDhfdCwgdWludDE2X3QsIHVpbnQz
Ml90KTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQotdm9pZCBzY3RwX2Zpbmlz
aCh2b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludCBzY3RwX2ZsdXNoKHN0cnVj
dCBzb2NrZXQgKiwgaW50KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uIDwgOTAyMDAwCi1pbnQgc2N0cF9zaHV0ZG93biBfX1AoKHN0cnVjdCBz
b2NrZXQgKikpOwotI2Vsc2UKLWludCBzY3RwX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKik7Ci0j
ZW5kaWYKLWludCBzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3Qgc29ja2Fk
ZHJfc3RvcmFnZSAqLAotCWludCwgaW50LCBzdHJ1Y3QgcHJvYyAqKTsKLS8qIGNhbid0IHVzZSBz
Y3RwX2Fzc29jX3QgaGVyZSAqLwotaW50IHNjdHBfcGVlbG9mZihzdHJ1Y3Qgc29ja2V0ICosIHN0
cnVjdCBzb2NrZXQgKiwgaW50LCBjYWRkcl90LCBpbnQgKik7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi1pbnQg
c2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiopOwotI2Vs
aWYgZGVmaW5lZChfX1BhbmRhX18pCi1pbnQgc2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAq
LCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0jZWxzZQotaW50IHNjdHBfaW5nZXRhZGRyKHN0cnVjdCBz
b2NrZXQgKiwgc3RydWN0IG1idWYgKik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLWludCBzY3Rw
X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKLSNlbGlmIGRl
ZmluZWQoX19QYW5kYV9fKQotaW50IHNjdHBfcGVlcmFkZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1
Y3Qgc29ja2FkZHIgKik7Ci0jZWxzZQotaW50IHNjdHBfcGVlcmFkZHIoc3RydWN0IHNvY2tldCAq
LCBzdHJ1Y3QgbWJ1ZiAqKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDcwMDAw
MAotaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3QgdGhyZWFkICop
OwotI2Vsc2UKLWludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCB0aHJlYWQg
Kik7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi1pbnQgc2N0cF9saXN0ZW4o
c3RydWN0IHNvY2tldCAqLCBpbnQsIFBLVEhSRUFEKTsKLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLWludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHByb2Mg
Kik7Ci0jZWxzZQotaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHByb2Mg
Kik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50
IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKLSNlbGlm
IGRlZmluZWQoX19QYW5kYV9fKQotaW50IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3Ry
dWN0IHNvY2thZGRyICosIGludCAqLCB2b2lkICosIGludCAqKTsKLSNlbHNlCi1pbnQgc2N0cF9h
Y2NlcHQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLSNlbmRpZgotCi0jZW5kaWYg
LyogX0tFUk5FTCAqLwotCi0jZW5kaWYgLyogIV9ORVRJTkVUX1NDVFBfVkFSX0hfICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHB1dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4Y2M2ZDQwYmNmOWU0NmI0
ZGRiZjAyNDg1NjQ3NWZjZTkwODRmNTMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCisrKyAvZGV2L251bGwK
QEAgLTEsODI2MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBD
aXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICog
YSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0g
KiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2Nv
IFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZz
Lmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cHV0aWwuYyAzMjEy
MDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2lmZGVmIElORVQ2Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2luY2x1ZGUgPG5ldGlu
ZXQ2L3NjdHA2X3Zhci5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF91aW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+LyogZm9yIHNjdHBfZGVsaXZlcl9kYXRhKCkgKi8K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9h
c2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVkKElORVQ2KSB8fCBkZWZp
bmVkKElORVQpCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDxuZXRpbmV0L3VkcC5oPgotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2luY2x1ZGUg
PHN5cy9wcm9jLmg+Ci0jaWZkZWYgSU5FVDYKLSNpbmNsdWRlIDxuZXRpbmV0L2ljbXA2Lmg+Ci0j
ZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jZGVmaW5lIEFQUExFX0ZJ
TEVfTk8gOAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotI2lmICFkZWZpbmVk
KFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotI2luY2x1ZGUgImV2ZW50cmFjZV9uZXRpbmV0LmgiCi0j
aW5jbHVkZSAic2N0cHV0aWwudG1oIiAvKiB0aGlzIGlzIHRoZSBmaWxlIHRoYXQgd2lsbCBiZSBh
dXRvIGdlbmVyYXRlZCAqLwotI2VuZGlmCi0jZWxzZQotI2lmbmRlZiBLVFJfU0NUUAotI2RlZmlu
ZSBLVFJfU0NUUCBLVFJfU1VCU1lTCi0jZW5kaWYKLSNlbmRpZgotCi1leHRlcm4gY29uc3Qgc3Ry
dWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2NfZnVuY3Rpb25zW107Ci1leHRlcm4gY29uc3Qg
c3RydWN0IHNjdHBfc3NfZnVuY3Rpb25zIHNjdHBfc3NfZnVuY3Rpb25zW107Ci0KLXZvaWQKLXNj
dHBfc2Jsb2coc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBm
cm9tLCBpbnQgaW5jcikKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFND
VFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQot
CXNjdHBfY2xvZy54LnNiLnN0Y2IgPSBzdGNiOwotCXNjdHBfY2xvZy54LnNiLnNvX3NiY2MgPSBz
Yi0+c2JfY2M7Ci0JaWYgKHN0Y2IpCi0JCXNjdHBfY2xvZy54LnNiLnN0Y2Jfc2JjYyA9IHN0Y2It
PmFzb2Muc2JfY2M7Ci0JZWxzZQotCQlzY3RwX2Nsb2cueC5zYi5zdGNiX3NiY2MgPSAwOwotCXNj
dHBfY2xvZy54LnNiLmluY3IgPSBpbmNyOwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRb
JWRdOiV4LSV4LSV4LSV4IiwKLQkgICAgIFNDVFBfTE9HX0VWRU5UX1NCLAotCSAgICAgZnJvbSwK
LQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
MiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nNCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9sb2dfY2xvc2luZyhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludDE2X3QgbG9jKQotewotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0Jc3Ry
dWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0cF9jbG9nLnguY2xvc2UuaW5wID0g
KHZvaWQgKilpbnA7Ci0Jc2N0cF9jbG9nLnguY2xvc2Uuc2N0cF9mbGFncyA9IGlucC0+c2N0cF9m
bGFnczsKLQlpZiAoc3RjYikgewotCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGNiID0gKHZvaWQgKilz
dGNiOwotCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGF0ZSA9ICh1aW50MTZfdClzdGNiLT5hc29jLnN0
YXRlOwotCX0gZWxzZSB7Ci0JCXNjdHBfY2xvZy54LmNsb3NlLnN0Y2IgPSAwOwotCQlzY3RwX2Ns
b2cueC5jbG9zZS5zdGF0ZSA9IDA7Ci0JfQotCXNjdHBfY2xvZy54LmNsb3NlLmxvYyA9IGxvYzsK
LQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBT
Q1RQX0xPR19FVkVOVF9DTE9TRSwKLQkgICAgIDAsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNj
LmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLXZvaWQK
LXJ0b19sb2dnaW5nKHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGZyb20pCi17Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1
Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6
ZW9mKHNjdHBfY2xvZykpOwotCXNjdHBfY2xvZy54LnJ0by5uZXQgPSAodm9pZCAqKSBuZXQ7Ci0J
c2N0cF9jbG9nLngucnRvLnJ0dCA9IG5ldC0+cnR0IC8gMTAwMDsKLQlTQ1RQX0NUUjYoS1RSX1ND
VFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9SVFQs
Ci0JICAgICBmcm9tLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2cyLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0
cF9jbG9nLngubWlzYy5sb2c0KTsKLSNlbmRpZgotfQotCi12b2lkCi1zY3RwX2xvZ19zdHJtX2Rl
bF9hbHQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCB0c24sIHVpbnQxNl90IHNzZXEs
IHVpbnQxNl90IHN0cmVhbSwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBz
Y3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC5zdHJsb2cuc3RjYiA9IHN0Y2I7Ci0Jc2N0cF9jbG9n
Lnguc3RybG9nLm5fdHNuID0gdHNuOwotCXNjdHBfY2xvZy54LnN0cmxvZy5uX3NzZXEgPSBzc2Vx
OwotCXNjdHBfY2xvZy54LnN0cmxvZy5lX3RzbiA9IDA7Ci0Jc2N0cF9jbG9nLnguc3RybG9nLmVf
c3NlcSA9IDA7Ci0Jc2N0cF9jbG9nLnguc3RybG9nLnN0cm0gPSBzdHJlYW07Ci0JU0NUUF9DVFI2
KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAotCSAgICAgU0NUUF9MT0dfRVZF
TlRfU1RSTSwKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAg
ICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0J
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLXZvaWQKLXNjdHBfbG9n
X25hZ2xlX2V2ZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFjdGlvbikKLXsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0
cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCXNjdHBfY2xvZy54Lm5hZ2xlLnN0Y2Ig
PSAodm9pZCAqKXN0Y2I7Ci0Jc2N0cF9jbG9nLngubmFnbGUudG90YWxfZmxpZ2h0ID0gc3RjYi0+
YXNvYy50b3RhbF9mbGlnaHQ7Ci0Jc2N0cF9jbG9nLngubmFnbGUudG90YWxfaW5fcXVldWUgPSBz
dGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwotCXNjdHBfY2xvZy54Lm5hZ2xlLmNv
dW50X2luX3F1ZXVlID0gc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlOwotCXNjdHBfY2xv
Zy54Lm5hZ2xlLmNvdW50X2luX2ZsaWdodCA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50
OwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKLQkgICAg
IFNDVFBfTE9HX0VWRU5UX05BR0xFLAotCSAgICAgYWN0aW9uLAotCSAgICAgc2N0cF9jbG9nLngu
bWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAotCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKLSNlbmRpZgotfQot
Ci12b2lkCi1zY3RwX2xvZ19zYWNrKHVpbnQzMl90IG9sZF9jdW1hY2ssIHVpbnQzMl90IGN1bWFj
aywgdWludDMyX3QgdHNuLCB1aW50MTZfdCBnYXBzLCB1aW50MTZfdCBkdXBzLCBpbnQgZnJvbSkK
LXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0Vf
QlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCXNjdHBfY2xvZy54LnNh
Y2suY3VtYWNrID0gY3VtYWNrOwotCXNjdHBfY2xvZy54LnNhY2sub2xkY3VtYWNrID0gb2xkX2N1
bWFjazsKLQlzY3RwX2Nsb2cueC5zYWNrLnRzbiA9IHRzbjsKLQlzY3RwX2Nsb2cueC5zYWNrLm51
bUdhcHMgPSBnYXBzOwotCXNjdHBfY2xvZy54LnNhY2subnVtRHVwcyA9IGR1cHM7Ci0JU0NUUF9D
VFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAotCSAgICAgU0NUUF9MT0df
RVZFTlRfU0FDSywKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0J
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMs
Ci0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLXZvaWQKLXNjdHBf
bG9nX21hcCh1aW50MzJfdCBtYXAsIHVpbnQzMl90IGN1bSwgdWludDMyX3QgaGlnaCwgaW50IGZy
b20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RS
QUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQltZW1zZXQoJnNj
dHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBfY2xvZykpOwotCXNjdHBfY2xvZy54Lm1hcC5iYXNlID0g
bWFwOwotCXNjdHBfY2xvZy54Lm1hcC5jdW0gPSBjdW07Ci0Jc2N0cF9jbG9nLngubWFwLmhpZ2gg
PSBoaWdoOwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwK
LQkgICAgIFNDVFBfTE9HX0VWRU5UX01BUCwKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19
Ci0KLXZvaWQKLXNjdHBfbG9nX2ZyKHVpbnQzMl90IGJpZ2dlc3RfdHNuLCB1aW50MzJfdCBiaWdn
ZXN0X25ld190c24sIHVpbnQzMl90IHRzbiwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9j
d25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBf
Y2xvZykpOwotCXNjdHBfY2xvZy54LmZyLmxhcmdlc3RfdHNuID0gYmlnZ2VzdF90c247Ci0Jc2N0
cF9jbG9nLnguZnIubGFyZ2VzdF9uZXdfdHNuID0gYmlnZ2VzdF9uZXdfdHNuOwotCXNjdHBfY2xv
Zy54LmZyLnRzbiA9IHRzbjsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0l
eC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9GUiwKLQkgICAgIGZyb20sCi0JICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAg
ICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwot
I2VuZGlmCi19Ci0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotdm9pZAotc2N0cF9sb2dfbWIo
c3RydWN0IG1idWYgKm0sIGludCBmcm9tKQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0
cF9jbG9nOwotCi0Jc2N0cF9jbG9nLngubWIubXAgPSBtOwotCXNjdHBfY2xvZy54Lm1iLm1idWZf
ZmxhZ3MgPSAodWludDhfdCkoU0NUUF9CVUZfR0VUX0ZMQUdTKG0pKTsKLQlzY3RwX2Nsb2cueC5t
Yi5zaXplID0gKHVpbnQxNl90KShTQ1RQX0JVRl9MRU4obSkpOwotCXNjdHBfY2xvZy54Lm1iLmRh
dGEgPSBTQ1RQX0JVRl9BVChtLCAwKTsKLQlpZiAoU0NUUF9CVUZfSVNfRVhURU5ERUQobSkpIHsK
LQkJc2N0cF9jbG9nLngubWIuZXh0ID0gU0NUUF9CVUZfRVhURU5EX0JBU0UobSk7Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0JCS8qIEFQUExFIGRvZXMgbm90IHVzZSBhIHJlZl9jbnQsIGJ1dCBh
IGZvcndhcmQvYmFja3dhcmQgcmVmIHF1ZXVlICovCi0jZWxzZQotCQlzY3RwX2Nsb2cueC5tYi5y
ZWZjbnQgPSAodWludDhfdCkoU0NUUF9CVUZfRVhURU5EX1JFRkNOVChtKSk7Ci0jZW5kaWYKLQl9
IGVsc2UgewotCQlzY3RwX2Nsb2cueC5tYi5leHQgPSAwOwotCQlzY3RwX2Nsb2cueC5tYi5yZWZj
bnQgPSAwOwotCX0KLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0l
eCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9NQlVGLAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5k
aWYKLX0KLQotdm9pZAotc2N0cF9sb2dfbWJjKHN0cnVjdCBtYnVmICptLCBpbnQgZnJvbSkKLXsK
LQlzdHJ1Y3QgbWJ1ZiAqbWF0OwotCi0JZm9yIChtYXQgPSBtOyBtYXQ7IG1hdCA9IFNDVFBfQlVG
X05FWFQobWF0KSkgewotCQlzY3RwX2xvZ19tYihtYXQsIGZyb20pOwotCX0KLX0KLSNlbmRpZgot
Ci12b2lkCi1zY3RwX2xvZ19zdHJtX2RlbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbCwgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnBvc2NoaywgaW50IGZyb20pCi17Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikK
LQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlpZiAoY29udHJvbCA9PSBOVUxM
KSB7Ci0JCVNDVFBfUFJJTlRGKCJHYWsgbG9nIG9mIE5VTEw/XG4iKTsKLQkJcmV0dXJuOwotCX0K
LQlzY3RwX2Nsb2cueC5zdHJsb2cuc3RjYiA9IGNvbnRyb2wtPnN0Y2I7Ci0Jc2N0cF9jbG9nLngu
c3RybG9nLm5fdHNuID0gY29udHJvbC0+c2luZm9fdHNuOwotCXNjdHBfY2xvZy54LnN0cmxvZy5u
X3NzZXEgPSAodWludDE2X3QpY29udHJvbC0+bWlkOwotCXNjdHBfY2xvZy54LnN0cmxvZy5zdHJt
ID0gY29udHJvbC0+c2luZm9fc3RyZWFtOwotCWlmIChwb3NjaGsgIT0gTlVMTCkgewotCQlzY3Rw
X2Nsb2cueC5zdHJsb2cuZV90c24gPSBwb3NjaGstPnNpbmZvX3RzbjsKLQkJc2N0cF9jbG9nLngu
c3RybG9nLmVfc3NlcSA9ICh1aW50MTZfdClwb3NjaGstPm1pZDsKLQl9IGVsc2UgewotCQlzY3Rw
X2Nsb2cueC5zdHJsb2cuZV90c24gPSAwOwotCQlzY3RwX2Nsb2cueC5zdHJsb2cuZV9zc2VxID0g
MDsKLQl9Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAot
CSAgICAgU0NUUF9MT0dfRVZFTlRfU1RSTSwKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19
Ci0KLXZvaWQKLXNjdHBfbG9nX2N3bmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsIGludCBhdWdtZW50LCB1aW50OF90IGZyb20pCi17Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0
cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC5jd25kLm5ldCA9IG5ldDsKLQlp
ZiAoc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudCA+IDI1NSkKLQkJc2N0cF9jbG9nLnguY3duZC5j
bnRfaW5fc2VuZCA9IDI1NTsKLQllbHNlCi0JCXNjdHBfY2xvZy54LmN3bmQuY250X2luX3NlbmQg
PSBzdGNiLT5hc29jLnNlbmRfcXVldWVfY250OwotCWlmIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1
ZV9jbnQgPiAyNTUpCi0JCXNjdHBfY2xvZy54LmN3bmQuY250X2luX3N0ciA9IDI1NTsKLQllbHNl
Ci0JCXNjdHBfY2xvZy54LmN3bmQuY250X2luX3N0ciA9IHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVl
X2NudDsKLQotCWlmIChuZXQpIHsKLQkJc2N0cF9jbG9nLnguY3duZC5jd25kX25ld192YWx1ZSA9
IG5ldC0+Y3duZDsKLQkJc2N0cF9jbG9nLnguY3duZC5pbmZsaWdodCA9IG5ldC0+ZmxpZ2h0X3Np
emU7Ci0JCXNjdHBfY2xvZy54LmN3bmQucHNldWRvX2N1bWFjayA9IG5ldC0+cHNldWRvX2N1bWFj
azsKLQkJc2N0cF9jbG9nLnguY3duZC5tZWV0c19wc2V1ZG9fY3VtYWNrID0gbmV0LT5uZXdfcHNl
dWRvX2N1bWFjazsKLQkJc2N0cF9jbG9nLnguY3duZC5uZWVkX25ld19wc2V1ZG9fY3VtYWNrID0g
bmV0LT5maW5kX3BzZXVkb19jdW1hY2s7Ci0JfQotCWlmIChTQ1RQX0NXTkRMT0dfUFJFU0VORCA9
PSBmcm9tKSB7Ci0JCXNjdHBfY2xvZy54LmN3bmQubWVldHNfcHNldWRvX2N1bWFjayA9IHN0Y2It
PmFzb2MucGVlcnNfcnduZDsKLQl9Ci0Jc2N0cF9jbG9nLnguY3duZC5jd25kX2F1Z21lbnQgPSBh
dWdtZW50OwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwK
LQkgICAgIFNDVFBfTE9HX0VWRU5UX0NXTkQsCi0JICAgICBmcm9tLAotCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAotCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKLSNlbmRpZgot
fQotCi0jaWZuZGVmIF9fQVBQTEVfXwotdm9pZAotc2N0cF9sb2dfbG9jayhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgZnJvbSkKLXsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0
cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCW1lbXNldCgmc2N0cF9jbG9nLCAwLCBz
aXplb2Yoc2N0cF9jbG9nKSk7Ci0JaWYgKGlucCkgewotCQlzY3RwX2Nsb2cueC5sb2NrLnNvY2sg
PSAodm9pZCAqKSBpbnAtPnNjdHBfc29ja2V0OwotCi0JfSBlbHNlIHsKLQkJc2N0cF9jbG9nLngu
bG9jay5zb2NrID0gKHZvaWQgKikgTlVMTDsKLQl9Ci0Jc2N0cF9jbG9nLngubG9jay5pbnAgPSAo
dm9pZCAqKSBpbnA7Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDUwMzAwMCkgfHwgKGRlZmluZWQoX19BUFBMRV9fKSkKLQlpZiAoc3RjYikgewotCQlz
Y3RwX2Nsb2cueC5sb2NrLnRjYl9sb2NrID0gbXR4X293bmVkKCZzdGNiLT50Y2JfbXR4KTsKLQl9
IGVsc2UgewotCQlzY3RwX2Nsb2cueC5sb2NrLnRjYl9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047
Ci0JfQotCWlmIChpbnApIHsKLQkJc2N0cF9jbG9nLngubG9jay5pbnBfbG9jayA9IG10eF9vd25l
ZCgmaW5wLT5pbnBfbXR4KTsKLQkJc2N0cF9jbG9nLngubG9jay5jcmVhdGVfbG9jayA9IG10eF9v
d25lZCgmaW5wLT5pbnBfY3JlYXRlX210eCk7Ci0JfSBlbHNlIHsKLQkJc2N0cF9jbG9nLngubG9j
ay5pbnBfbG9jayA9IFNDVFBfTE9DS19VTktOT1dOOwotCQlzY3RwX2Nsb2cueC5sb2NrLmNyZWF0
ZV9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047Ci0JfQotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA2MDIwMDApCi0Jc2N0cF9jbG9nLngubG9jay5pbmZv
X2xvY2sgPSBtdHhfb3duZWQoJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKTsKLSNlbHNlCi0J
c2N0cF9jbG9nLngubG9jay5pbmZvX2xvY2sgPSByd193b3duZWQoJlNDVFBfQkFTRV9JTkZPKGlw
aV9lcF9tdHgpKTsKLSNlbmRpZgotCWlmIChpbnAgJiYgKGlucC0+c2N0cF9zb2NrZXQpKSB7Ci0J
CXNjdHBfY2xvZy54LmxvY2suc29ja19sb2NrID0gbXR4X293bmVkKCYoaW5wLT5zY3RwX3NvY2tl
dC0+c29fcmN2LnNiX210eCkpOwotCQlzY3RwX2Nsb2cueC5sb2NrLnNvY2tyY3ZidWZfbG9jayA9
IG10eF9vd25lZCgmKGlucC0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9tdHgpKTsKLQkJc2N0cF9j
bG9nLngubG9jay5zb2Nrc25kYnVmX2xvY2sgPSBtdHhfb3duZWQoJihpbnAtPnNjdHBfc29ja2V0
LT5zb19zbmQuc2JfbXR4KSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF9jbG9nLngubG9jay5zb2NrX2xv
Y2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQkJc2N0cF9jbG9nLngubG9jay5zb2NrcmN2YnVmX2xv
Y2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQkJc2N0cF9jbG9nLngubG9jay5zb2Nrc25kYnVmX2xv
Y2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQl9Ci0jZW5kaWYKLQlTQ1RQX0NUUjYoS1RSX1NDVFAs
ICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19MT0NLX0VWRU5ULAot
CSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xv
Zy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwX2xvZ19t
YXhidXJzdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50
IGVycm9yLCBpbnQgYnVyc3QsIHVpbnQ4X3QgZnJvbSkKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRf
bG9nIHNjdHBfY2xvZzsKLQotCW1lbXNldCgmc2N0cF9jbG9nLCAwLCBzaXplb2Yoc2N0cF9jbG9n
KSk7Ci0Jc2N0cF9jbG9nLnguY3duZC5uZXQgPSBuZXQ7Ci0Jc2N0cF9jbG9nLnguY3duZC5jd25k
X25ld192YWx1ZSA9IGVycm9yOwotCXNjdHBfY2xvZy54LmN3bmQuaW5mbGlnaHQgPSBuZXQtPmZs
aWdodF9zaXplOwotCXNjdHBfY2xvZy54LmN3bmQuY3duZF9hdWdtZW50ID0gYnVyc3Q7Ci0JaWYg
KHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQgPiAyNTUpCi0JCXNjdHBfY2xvZy54LmN3bmQuY250
X2luX3NlbmQgPSAyNTU7Ci0JZWxzZQotCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zZW5kID0g
c3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKLQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVf
Y250ID4gMjU1KQotCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSAyNTU7Ci0JZWxzZQot
CQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSBzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9j
bnQ7Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAotCSAg
ICAgU0NUUF9MT0dfRVZFTlRfTUFYQlVSU1QsCi0JICAgICBmcm9tLAotCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAotCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKLSNlbmRpZgot
fQotCi12b2lkCi1zY3RwX2xvZ19yd25kKHVpbnQ4X3QgZnJvbSwgdWludDMyX3QgcGVlcnNfcndu
ZCwgdWludDMyX3Qgc25kX3NpemUsIHVpbnQzMl90IG92ZXJoZWFkKQotewotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0Jc3RydWN0IHNj
dHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0cF9jbG9nLngucnduZC5yd25kID0gcGVlcnNf
cnduZDsKLQlzY3RwX2Nsb2cueC5yd25kLnNlbmRfc2l6ZSA9IHNuZF9zaXplOwotCXNjdHBfY2xv
Zy54LnJ3bmQub3ZlcmhlYWQgPSBvdmVyaGVhZDsKLQlzY3RwX2Nsb2cueC5yd25kLm5ld19yd25k
ID0gMDsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0J
ICAgICBTQ1RQX0xPR19FVkVOVF9SV05ELAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54
Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xv
Zy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0K
LQotdm9pZAotc2N0cF9sb2dfcnduZF9zZXQodWludDhfdCBmcm9tLCB1aW50MzJfdCBwZWVyc19y
d25kLCB1aW50MzJfdCBmbGlnaHRfc2l6ZSwgdWludDMyX3Qgb3ZlcmhlYWQsIHVpbnQzMl90IGFf
cnduZHZhbCkKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9D
QUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCXNjdHBf
Y2xvZy54LnJ3bmQucnduZCA9IHBlZXJzX3J3bmQ7Ci0Jc2N0cF9jbG9nLngucnduZC5zZW5kX3Np
emUgPSBmbGlnaHRfc2l6ZTsKLQlzY3RwX2Nsb2cueC5yd25kLm92ZXJoZWFkID0gb3ZlcmhlYWQ7
Ci0Jc2N0cF9jbG9nLngucnduZC5uZXdfcnduZCA9IGFfcnduZHZhbDsKLQlTQ1RQX0NUUjYoS1RS
X1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9S
V05ELAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAg
IHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotI2lmZGVmIFNDVFBfTUJDTlRf
TE9HR0lORwotc3RhdGljIHZvaWQKLXNjdHBfbG9nX21iY250KHVpbnQ4X3QgZnJvbSwgdWludDMy
X3QgdG90YWxfb3EsIHVpbnQzMl90IGJvb2ssIHVpbnQzMl90IHRvdGFsX21iY250X3EsIHVpbnQz
Ml90IG1iY250KQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9M
T0NBTF9UUkFDRV9CVUYpCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0
cF9jbG9nLngubWJjbnQudG90YWxfcXVldWVfc2l6ZSA9IHRvdGFsX29xOwotCXNjdHBfY2xvZy54
Lm1iY250LnNpemVfY2hhbmdlID0gYm9vazsKLQlzY3RwX2Nsb2cueC5tYmNudC50b3RhbF9xdWV1
ZV9tYl9zaXplID0gdG90YWxfbWJjbnRfcTsKLQlzY3RwX2Nsb2cueC5tYmNudC5tYmNudF9jaGFu
Z2UgPSBtYmNudDsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0l
eCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9NQkNOVCwKLQkgICAgIGZyb20sCi0JICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2Vu
ZGlmCi19Ci0jZW5kaWYKLQotdm9pZAotc2N0cF9taXNjX2ludHModWludDhfdCBmcm9tLCB1aW50
MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBkKQotewotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0JU0NUUF9D
VFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAotCSAgICAgU0NUUF9MT0df
TUlTQ19FVkVOVCwKLQkgICAgIGZyb20sCi0JICAgICBhLCBiLCBjLCBkKTsKLSNlbmRpZgotfQot
Ci12b2lkCi1zY3RwX3dha2V1cF9sb2coc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCB3
YWtlX2NudCwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7
Ci0KLQlzY3RwX2Nsb2cueC53YWtlLnN0Y2IgPSAodm9pZCAqKXN0Y2I7Ci0Jc2N0cF9jbG9nLngu
d2FrZS53YWtlX2NudCA9IHdha2VfY250OwotCXNjdHBfY2xvZy54Lndha2UuZmxpZ2h0ID0gc3Rj
Yi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQ7Ci0Jc2N0cF9jbG9nLngud2FrZS5zZW5kX3EgPSBz
dGNiLT5hc29jLnNlbmRfcXVldWVfY250OwotCXNjdHBfY2xvZy54Lndha2Uuc2VudF9xID0gc3Rj
Yi0+YXNvYy5zZW50X3F1ZXVlX2NudDsKLQotCWlmIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9j
bnQgPCAweGZmKQotCQlzY3RwX2Nsb2cueC53YWtlLnN0cmVhbV9xY250ID0gKHVpbnQ4X3QpIHN0
Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudDsKLQllbHNlCi0JCXNjdHBfY2xvZy54Lndha2Uuc3Ry
ZWFtX3FjbnQgPSAweGZmOwotCi0JaWYgKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSA8
IDB4ZmYpCi0JCXNjdHBfY2xvZy54Lndha2UuY2h1bmtzX29uX29xdWUgPSAodWludDhfdCkgc3Rj
Yi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlOwotCWVsc2UKLQkJc2N0cF9jbG9nLngud2FrZS5j
aHVua3Nfb25fb3F1ZSA9IDB4ZmY7Ci0KLQlzY3RwX2Nsb2cueC53YWtlLnNjdHBmbGFncyA9IDA7
Ci0JLyogc2V0IGluIHRoZSBkZWZlcmVkIG1vZGUgc3R1ZmYgKi8KLQlpZiAoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkKLQkJc2N0cF9jbG9nLngu
d2FrZS5zY3RwZmxhZ3MgfD0gMTsKLQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQpCi0JCXNjdHBfY2xvZy54Lndha2Uuc2N0cGZsYWdzIHw9
IDI7Ci0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19XQUtF
SU5QVVQpCi0JCXNjdHBfY2xvZy54Lndha2Uuc2N0cGZsYWdzIHw9IDQ7Ci0JLyogd2hhdCBhYm91
dCB0aGUgc2IgKi8KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLQkJc3RydWN0IHNvY2tldCAq
c28gPSBzdGNiLT5zY3RwX3NvY2tldDsKLQotCQlzY3RwX2Nsb2cueC53YWtlLnNiZmxhZ3MgPSAo
dWludDhfdCkoKHNvLT5zb19zbmQuc2JfZmxhZ3MgJiAweDAwZmYpKTsKLQl9IGVsc2UgewotCQlz
Y3RwX2Nsb2cueC53YWtlLnNiZmxhZ3MgPSAweGZmOwotCX0KLQlTQ1RQX0NUUjYoS1RSX1NDVFAs
ICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9XQUtFLAot
CSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xv
Zy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9sb2dfYmxvY2sodWlu
dDhfdCBmcm9tLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc2l6ZV90IHNlbmRsZW4p
Ci17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNF
X0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC5i
bGsub25zYiA9IGFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwotCXNjdHBfY2xvZy54LmJs
ay5zZW5kX3NlbnRfcWNudCA9ICh1aW50MTZfdCkgKGFzb2MtPnNlbmRfcXVldWVfY250ICsgYXNv
Yy0+c2VudF9xdWV1ZV9jbnQpOwotCXNjdHBfY2xvZy54LmJsay5wZWVyX3J3bmQgPSBhc29jLT5w
ZWVyc19yd25kOwotCXNjdHBfY2xvZy54LmJsay5zdHJlYW1fcWNudCA9ICh1aW50MTZfdCkgYXNv
Yy0+c3RyZWFtX3F1ZXVlX2NudDsKLQlzY3RwX2Nsb2cueC5ibGsuY2h1bmtzX29uX29xdWUgPSAo
dWludDE2X3QpIGFzb2MtPmNodW5rc19vbl9vdXRfcXVldWU7Ci0Jc2N0cF9jbG9nLnguYmxrLmZs
aWdodF9zaXplID0gKHVpbnQxNl90KSAoYXNvYy0+dG90YWxfZmxpZ2h0LzEwMjQpOwotCXNjdHBf
Y2xvZy54LmJsay5zbmRsZW4gPSAodWludDMyX3Qpc2VuZGxlbjsKLQlTQ1RQX0NUUjYoS1RSX1ND
VFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9CTE9D
SywKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLWludAotc2N0cF9maWxsX3N0YXRf
bG9nKHZvaWQgKm9wdHZhbCBTQ1RQX1VOVVNFRCwgc2l6ZV90ICpvcHRzaXplIFNDVFBfVU5VU0VE
KQotewotCS8qIE1heSBuZWVkIHRvIGZpeCB0aGlzIGlmIGt0cmR1bXAgZG9lcyBub3Qgd29yayAq
LwotCXJldHVybiAoMCk7Ci19Ci0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLXVpbnQ4
X3Qgc2N0cF9hdWRpdF9kYXRhW1NDVFBfQVVESVRfU0laRV1bMl07Ci1zdGF0aWMgaW50IHNjdHBf
YXVkaXRfaW5keCA9IDA7Ci0KLXN0YXRpYwotdm9pZAotc2N0cF9wcmludF9hdWRpdF9yZXBvcnQo
dm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgY250OwotCi0JY250ID0gMDsKLQlmb3IgKGkgPSBzY3Rw
X2F1ZGl0X2luZHg7IGkgPCBTQ1RQX0FVRElUX1NJWkU7IGkrKykgewotCQlpZiAoKHNjdHBfYXVk
aXRfZGF0YVtpXVswXSA9PSAweGUwKSAmJgotCQkgICAgKHNjdHBfYXVkaXRfZGF0YVtpXVsxXSA9
PSAweDAxKSkgewotCQkJY250ID0gMDsKLQkJCVNDVFBfUFJJTlRGKCJcbiIpOwotCQl9IGVsc2Ug
aWYgKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGYwKSB7Ci0JCQljbnQgPSAwOwotCQkJU0NU
UF9QUklOVEYoIlxuIik7Ci0JCX0gZWxzZSBpZiAoKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAw
eGMwKSAmJgotCQkgICAgKHNjdHBfYXVkaXRfZGF0YVtpXVsxXSA9PSAweDAxKSkgewotCQkJU0NU
UF9QUklOVEYoIlxuIik7Ci0JCQljbnQgPSAwOwotCQl9Ci0JCVNDVFBfUFJJTlRGKCIlMi4yeCUy
LjJ4ICIsICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzBdLAotCQkJICAgICh1aW50MzJf
dCkgc2N0cF9hdWRpdF9kYXRhW2ldWzFdKTsKLQkJY250Kys7Ci0JCWlmICgoY250ICUgMTQpID09
IDApCi0JCQlTQ1RQX1BSSU5URigiXG4iKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IHNjdHBfYXVk
aXRfaW5keDsgaSsrKSB7Ci0JCWlmICgoc2N0cF9hdWRpdF9kYXRhW2ldWzBdID09IDB4ZTApICYm
Ci0JCSAgICAoc2N0cF9hdWRpdF9kYXRhW2ldWzFdID09IDB4MDEpKSB7Ci0JCQljbnQgPSAwOwot
CQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JCX0gZWxzZSBpZiAoc2N0cF9hdWRpdF9kYXRhW2ldWzBd
ID09IDB4ZjApIHsKLQkJCWNudCA9IDA7Ci0JCQlTQ1RQX1BSSU5URigiXG4iKTsKLQkJfSBlbHNl
IGlmICgoc2N0cF9hdWRpdF9kYXRhW2ldWzBdID09IDB4YzApICYmCi0JCSAgICAoc2N0cF9hdWRp
dF9kYXRhW2ldWzFdID09IDB4MDEpKSB7Ci0JCQlTQ1RQX1BSSU5URigiXG4iKTsKLQkJCWNudCA9
IDA7Ci0JCX0KLQkJU0NUUF9QUklOVEYoIiUyLjJ4JTIuMnggIiwgKHVpbnQzMl90KSBzY3RwX2F1
ZGl0X2RhdGFbaV1bMF0sCi0JCQkgICAgKHVpbnQzMl90KSBzY3RwX2F1ZGl0X2RhdGFbaV1bMV0p
OwotCQljbnQrKzsKLQkJaWYgKChjbnQgJSAxNCkgPT0gMCkKLQkJCVNDVFBfUFJJTlRGKCJcbiIp
OwotCX0KLQlTQ1RQX1BSSU5URigiXG4iKTsKLX0KLQotdm9pZAotc2N0cF9hdWRpdGluZyhpbnQg
ZnJvbSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAg
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlpbnQgcmVzZW5kX2NudCwgdG90X291dCwgcmVw
LCB0b3RfYm9va19jbnQ7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbG5ldDsKLQlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpjaGs7Ci0KLQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9
IDB4QUE7Ci0Jc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweDAwMDAwMGZm
ICYgZnJvbTsKLQlzY3RwX2F1ZGl0X2luZHgrKzsKLQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFND
VFBfQVVESVRfU0laRSkgewotCQlzY3RwX2F1ZGl0X2luZHggPSAwOwotCX0KLQlpZiAoaW5wID09
IE5VTEwpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOwot
CQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4MDE7Ci0JCXNjdHBfYXVk
aXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewot
CQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCWlmIChzdGNiID09
IE5VTEwpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOwot
CQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4MDI7Ci0JCXNjdHBfYXVk
aXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewot
CQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0JfQotCXNjdHBfYXVkaXRf
ZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBMTsKLQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9h
dWRpdF9pbmR4XVsxXSA9Ci0JICAgICgweDAwMDAwMGZmICYgc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQpOwotCXNjdHBfYXVkaXRfaW5keCsrOwotCWlmIChzY3RwX2F1ZGl0X2luZHgg
Pj0gU0NUUF9BVURJVF9TSVpFKSB7Ci0JCXNjdHBfYXVkaXRfaW5keCA9IDA7Ci0JfQotCXJlcCA9
IDA7Ci0JdG90X2Jvb2tfY250ID0gMDsKLQlyZXNlbmRfY250ID0gdG90X291dCA9IDA7Ci0JVEFJ
TFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgewotCQlp
ZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQlyZXNlbmRfY250Kys7
Ci0JCX0gZWxzZSBpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCXRv
dF9vdXQgKz0gY2hrLT5ib29rX3NpemU7Ci0JCQl0b3RfYm9va19jbnQrKzsKLQkJfQotCX0KLQlp
ZiAocmVzZW5kX2NudCAhPSBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCkgewotCQlz
Y3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7Ci0JCXNjdHBfYXVkaXRf
ZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHhBMTsKLQkJc2N0cF9hdWRpdF9pbmR4Kys7Ci0J
CWlmIChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7Ci0JCQlzY3RwX2F1ZGl0
X2luZHggPSAwOwotCQl9Ci0JCVNDVFBfUFJJTlRGKCJyZXNlbmRfY250OiVkIGFzb2MtdG90OiVk
XG4iLAotCQkJICAgIHJlc2VuZF9jbnQsIHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250
KTsKLQkJcmVwID0gMTsKLQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSByZXNl
bmRfY250OwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QTI7Ci0J
CXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0KLQkJICAgICgweDAwMDAwMGZm
ICYgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQlzY3RwX2F1ZGl0X2luZHgr
KzsKLQkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKLQkJCXNjdHBf
YXVkaXRfaW5keCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKHRvdF9vdXQgIT0gc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHQpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFG
OwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4QTI7Ci0JCXNjdHBf
YXVkaXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkg
ewotCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXAgPSAxOwotCQlTQ1RQX1BSSU5U
RigidG90X2ZsdDolZCBhc29jX3RvdDolZFxuIiwgdG90X291dCwKLQkJCSAgICAoaW50KXN0Y2It
PmFzb2MudG90YWxfZmxpZ2h0KTsKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPSB0b3Rfb3V0
OwotCX0KLQlpZiAodG90X2Jvb2tfY250ICE9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50
KSB7Ci0JCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKLQkJc2N0
cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweEE1OwotCQlzY3RwX2F1ZGl0X2lu
ZHgrKzsKLQkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKLQkJCXNj
dHBfYXVkaXRfaW5keCA9IDA7Ci0JCX0KLQkJcmVwID0gMTsKLQkJU0NUUF9QUklOVEYoInRvdF9m
bHRfYm9vazolZFxuIiwgdG90X2Jvb2tfY250KTsKLQotCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dF9jb3VudCA9IHRvdF9ib29rX2NudDsKLQl9Ci0JdG90X291dCA9IDA7Ci0JVEFJTFFfRk9SRUFD
SChsbmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJdG90X291dCArPSBsbmV0
LT5mbGlnaHRfc2l6ZTsKLQl9Ci0JaWYgKHRvdF9vdXQgIT0gc3RjYi0+YXNvYy50b3RhbF9mbGln
aHQpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOwotCQlz
Y3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4QTM7Ci0JCXNjdHBfYXVkaXRf
aW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewotCQkJ
c2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXAgPSAxOwotCQlTQ1RQX1BSSU5URigicmVh
bCBmbGlnaHQ6JWQgbmV0IHRvdGFsIHdhcyAlZFxuIiwKLQkJCSAgICBzdGNiLT5hc29jLnRvdGFs
X2ZsaWdodCwgdG90X291dCk7Ci0JCS8qIG5vdyBjb3JyZWN0aXZlIGFjdGlvbiAqLwotCQlUQUlM
UV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCi0JCQl0b3Rf
b3V0ID0gMDsKLQkJCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBz
Y3RwX25leHQpIHsKLQkJCQlpZiAoKGNoay0+d2hvVG8gPT0gbG5ldCkgJiYKLQkJCQkgICAgKGNo
ay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSkgewotCQkJCQl0b3Rfb3V0ICs9IGNoay0+
Ym9va19zaXplOwotCQkJCX0KLQkJCX0KLQkJCWlmIChsbmV0LT5mbGlnaHRfc2l6ZSAhPSB0b3Rf
b3V0KSB7Ci0JCQkJU0NUUF9QUklOVEYoIm5ldDolcCBmbGlnaHQgd2FzICVkIGNvcnJlY3RlZCB0
byAlZFxuIiwKLQkJCQkJICAgICh2b2lkICopbG5ldCwgbG5ldC0+ZmxpZ2h0X3NpemUsCi0JCQkJ
CSAgICB0b3Rfb3V0KTsKLQkJCQlsbmV0LT5mbGlnaHRfc2l6ZSA9IHRvdF9vdXQ7Ci0JCQl9Ci0J
CX0KLQl9Ci0JaWYgKHJlcCkgewotCQlzY3RwX3ByaW50X2F1ZGl0X3JlcG9ydCgpOwotCX0KLX0K
LQotdm9pZAotc2N0cF9hdWRpdF9sb2codWludDhfdCBldiwgdWludDhfdCBmZCkKLXsKLQotCXNj
dHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gZXY7Ci0Jc2N0cF9hdWRpdF9kYXRh
W3NjdHBfYXVkaXRfaW5keF1bMV0gPSBmZDsKLQlzY3RwX2F1ZGl0X2luZHgrKzsKLQlpZiAoc2N0
cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewotCQlzY3RwX2F1ZGl0X2luZHggPSAw
OwotCX0KLX0KLQotI2VuZGlmCi0KLS8qCi0gKiBzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93
bigpIHNob3VsZCBiZSBjYWxsZWQKLSAqIHdoZW4gZW50ZXJpbmcgdGhlIFNIVVRET1dOX1NFTlQg
b3IgU0hVVERPV05fQUNLX1NFTlQKLSAqIHN0YXRlIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCB0aW1l
cnMgYXJlIHN0b3BwZWQuCi0gKi8KLXZvaWQKLXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3du
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YzsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0KLQko
dm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRhY2tfdGltZXIudGltZXIpOwotCSh2b2lk
KVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOwotCSh2b2lk
KVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXNjb25mX3RpbWVyLnRpbWVyKTsKLQkodm9pZClT
Q1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmF1dG9jbG9zZV90aW1lci50aW1lcik7Ci0JKHZvaWQp
U0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kZWxheWVkX2V2ZW50X3RpbWVyLnRpbWVyKTsKLQlU
QUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkodm9pZClTQ1RQ
X09TX1RJTUVSX1NUT1AoJm5ldC0+cG10dV90aW1lci50aW1lcik7Ci0JCSh2b2lkKVNDVFBfT1Nf
VElNRVJfU1RPUCgmbmV0LT5oYl90aW1lci50aW1lcik7Ci0JfQotfQotCi0vKgotICogYSBsaXN0
IG9mIHNpemVzIGJhc2VkIG9uIHR5cGljYWwgbXR1J3MsIHVzZWQgb25seSBpZiBuZXh0IGhvcCBz
aXplIG5vdAotICogcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyB1aW50MzJfdCBzY3RwX210dV9zaXpl
c1tdID0gewotCTY4LAotCTI5NiwKLQk1MDgsCi0JNTEyLAotCTU0NCwKLQk1NzYsCi0JMTAwNiwK
LQkxNDkyLAotCTE1MDAsCi0JMTUzNiwKLQkyMDAyLAotCTIwNDgsCi0JNDM1MiwKLQk0NDY0LAot
CTgxNjYsCi0JMTc5MTQsCi0JMzIwMDAsCi0JNjU1MzUKLX07Ci0KLS8qCi0gKiBSZXR1cm4gdGhl
IGxhcmdlc3QgTVRVIHNtYWxsZXIgdGhhbiB2YWwuIElmIHRoZXJlIGlzIG5vCi0gKiBlbnRyeSwg
anVzdCByZXR1cm4gdmFsLgotICovCi11aW50MzJfdAotc2N0cF9nZXRfcHJldl9tdHUodWludDMy
X3QgdmFsKQotewotCXVpbnQzMl90IGk7Ci0KLQlpZiAodmFsIDw9IHNjdHBfbXR1X3NpemVzWzBd
KSB7Ci0JCXJldHVybiAodmFsKTsKLQl9Ci0JZm9yIChpID0gMTsgaSA8IChzaXplb2Yoc2N0cF9t
dHVfc2l6ZXMpIC8gc2l6ZW9mKHVpbnQzMl90KSk7IGkrKykgewotCQlpZiAodmFsIDw9IHNjdHBf
bXR1X3NpemVzW2ldKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gKHNjdHBfbXR1X3Np
emVzW2kgLSAxXSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIHNtYWxsZXN0IE1UVSBsYXJnZXIg
dGhhbiB2YWwuIElmIHRoZXJlIGlzIG5vCi0gKiBlbnRyeSwganVzdCByZXR1cm4gdmFsLgotICov
Ci11aW50MzJfdAotc2N0cF9nZXRfbmV4dF9tdHUodWludDMyX3QgdmFsKQotewotCS8qIHNlbGVj
dCBhbm90aGVyIE1UVSB0aGF0IGlzIGp1c3QgYmlnZ2VyIHRoYW4gdGhpcyBvbmUgKi8KLQl1aW50
MzJfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc2N0cF9tdHVfc2l6ZXMpIC8gc2l6
ZW9mKHVpbnQzMl90KSk7IGkrKykgewotCQlpZiAodmFsIDwgc2N0cF9tdHVfc2l6ZXNbaV0pIHsK
LQkJCXJldHVybiAoc2N0cF9tdHVfc2l6ZXNbaV0pOwotCQl9Ci0JfQotCXJldHVybiAodmFsKTsK
LX0KLQotdm9pZAotc2N0cF9maWxsX3JhbmRvbV9zdG9yZShzdHJ1Y3Qgc2N0cF9wY2IgKm0pCi17
Ci0JLyoKLQkgKiBIZXJlIHdlIHVzZSB0aGUgTUQ1L1NIQS0xIHRvIGhhc2ggd2l0aCBvdXIgZ29v
ZCByYW5kb21OdW1iZXJzIGFuZAotCSAqIG91ciBjb3VudGVyLiBUaGUgcmVzdWx0IGJlY29tZXMg
b3VyIGdvb2QgcmFuZG9tIG51bWJlcnMgYW5kIHdlCi0JICogdGhlbiBzZXR1cCB0byBnaXZlIHRo
ZXNlIG91dC4gTm90ZSB0aGF0IHdlIGRvIG5vIGxvY2tpbmcgdG8KLQkgKiBwcm90ZWN0IHRoaXMu
IFRoaXMgaXMgb2ssIHNpbmNlIGlmIGNvbXBldGluZyBmb2xrcyBjYWxsIHRoaXMgd2UKLQkgKiB3
aWxsIGdldCBtb3JlIGdvYmJsZWQgZ29vayBpbiB0aGUgcmFuZG9tIHN0b3JlIHdoaWNoIGlzIHdo
YXQgd2UKLQkgKiB3YW50LiBUaGVyZSBpcyBhIGRhbmdlciB0aGF0IHR3byBndXlzIHdpbGwgdXNl
IHRoZSBzYW1lIHJhbmRvbQotCSAqIG51bWJlcnMsIGJ1dCB0aGF0cyBvayB0b28gc2luY2UgdGhh
dCBpcyByYW5kb20gYXMgd2VsbCA6LT4KLQkgKi8KLQltLT5zdG9yZV9hdCA9IDA7Ci0JKHZvaWQp
c2N0cF9obWFjKFNDVFBfSE1BQywgKHVpbnQ4X3QgKiltLT5yYW5kb21fbnVtYmVycywKLQkgICAg
c2l6ZW9mKG0tPnJhbmRvbV9udW1iZXJzKSwgKHVpbnQ4X3QgKikmbS0+cmFuZG9tX2NvdW50ZXIs
Ci0JICAgIHNpemVvZihtLT5yYW5kb21fY291bnRlciksICh1aW50OF90ICopbS0+cmFuZG9tX3N0
b3JlKTsKLQltLT5yYW5kb21fY291bnRlcisrOwotfQotCi11aW50MzJfdAotc2N0cF9zZWxlY3Rf
aW5pdGlhbF9UU04oc3RydWN0IHNjdHBfcGNiICppbnApCi17Ci0JLyoKLQkgKiBBIHRydWUgaW1w
bGVtZW50YXRpb24gc2hvdWxkIHVzZSByYW5kb20gc2VsZWN0aW9uIHByb2Nlc3MgdG8gZ2V0Ci0J
ICogdGhlIGluaXRpYWwgc3RyZWFtIHNlcXVlbmNlIG51bWJlciwgdXNpbmcgUkZDMTc1MCBhcyBh
IGdvb2QKLQkgKiBndWlkZWxpbmUKLQkgKi8KLQl1aW50MzJfdCB4LCAqeHA7Ci0JdWludDhfdCAq
cDsKLQlpbnQgc3RvcmVfYXQsIG5ld19zdG9yZTsKLQotCWlmIChpbnAtPmluaXRpYWxfc2VxdWVu
Y2VfZGVidWcgIT0gMCkgewotCQl1aW50MzJfdCByZXQ7Ci0KLQkJcmV0ID0gaW5wLT5pbml0aWFs
X3NlcXVlbmNlX2RlYnVnOwotCQlpbnAtPmluaXRpYWxfc2VxdWVuY2VfZGVidWcrKzsKLQkJcmV0
dXJuIChyZXQpOwotCX0KLSByZXRyeToKLQlzdG9yZV9hdCA9IGlucC0+c3RvcmVfYXQ7Ci0JbmV3
X3N0b3JlID0gc3RvcmVfYXQgKyBzaXplb2YodWludDMyX3QpOwotCWlmIChuZXdfc3RvcmUgPj0g
KFNDVFBfU0lHTkFUVVJFX1NJWkUtMykpIHsKLQkJbmV3X3N0b3JlID0gMDsKLQl9Ci0JaWYgKCFh
dG9taWNfY21wc2V0X2ludCgmaW5wLT5zdG9yZV9hdCwgc3RvcmVfYXQsIG5ld19zdG9yZSkpIHsK
LQkJZ290byByZXRyeTsKLQl9Ci0JaWYgKG5ld19zdG9yZSA9PSAwKSB7Ci0JCS8qIFJlZmlsbCB0
aGUgcmFuZG9tIHN0b3JlICovCi0JCXNjdHBfZmlsbF9yYW5kb21fc3RvcmUoaW5wKTsKLQl9Ci0J
cCA9ICZpbnAtPnJhbmRvbV9zdG9yZVtzdG9yZV9hdF07Ci0JeHAgPSAodWludDMyX3QgKilwOwot
CXggPSAqeHA7Ci0JcmV0dXJuICh4KTsKLX0KLQotdWludDMyX3QKLXNjdHBfc2VsZWN0X2FfdGFn
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwg
aW50IGNoZWNrKQotewotCXVpbnQzMl90IHg7Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwotCi0JaWYg
KGNoZWNrKSB7Ci0JCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCX0KLQlmb3Ig
KDs7KSB7Ci0JCXggPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKLQkJ
aWYgKHggPT0gMCkgewotCQkJLyogd2UgbmV2ZXIgdXNlIDAgKi8KLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCWlmICghY2hlY2sgfHwgc2N0cF9pc192dGFnX2dvb2QoeCwgbHBvcnQsIHJwb3J0LCAmbm93
KSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuICh4KTsKLX0KLQotaW50MzJfdAotc2N0
cF9tYXBfYXNzb2Nfc3RhdGUoaW50IGtlcm5lbF9zdGF0ZSkKLXsKLQlpbnQzMl90IHVzZXJfc3Rh
dGU7Ci0KLQlpZiAoa2VybmVsX3N0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgewotCQl1
c2VyX3N0YXRlID0gU0NUUF9DTE9TRUQ7Ci0JfSBlbHNlIGlmIChrZXJuZWxfc3RhdGUgJiBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKLQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05f
UEVORElORzsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGtlcm5lbF9zdGF0ZSAmIFNDVFBfU1RBVEVf
TUFTSykgewotCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6Ci0JCQl1c2VyX3N0YXRlID0gU0NUUF9D
TE9TRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgotCQkJdXNlcl9zdGF0
ZSA9IFNDVFBfQ0xPU0VEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJ
VDoKLQkJCXVzZXJfc3RhdGUgPSBTQ1RQX0NPT0tJRV9XQUlUOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ09PS0lFX0VD
SE9FRDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfT1BFTjoKLQkJCXVzZXJfc3RhdGUg
PSBTQ1RQX0VTVEFCTElTSEVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVEFURV9TSFVURE9X
Tl9TRU5UOgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fU0VOVDsKLQkJCWJyZWFrOwot
CQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6Ci0JCQl1c2VyX3N0YXRlID0gU0NU
UF9TSFVURE9XTl9SRUNFSVZFRDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfU0hVVERP
V05fQUNLX1NFTlQ6Ci0JCQl1c2VyX3N0YXRlID0gU0NUUF9TSFVURE9XTl9BQ0tfU0VOVDsKLQkJ
CWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOwotCQkJYnJl
YWs7Ci0JCX0KLQl9Ci0JcmV0dXJuICh1c2VyX3N0YXRlKTsKLX0KLQotaW50Ci1zY3RwX2luaXRf
YXNvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAg
ICAgICAgICAgICB1aW50MzJfdCBvdmVycmlkZV90YWcsIHVpbnQzMl90IHZyZl9pZCwgdWludDE2
X3Qgb19zdHJtcykKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQkvKgotCSAq
IEFueXRoaW5nIHNldCB0byB6ZXJvIGlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGFsbG9jYXRpb24g
cm91dGluZSdzCi0JICogYnplcm8KLQkgKi8KLQotCS8qCi0JICogVXAgZnJvbnQgc2VsZWN0IHdo
YXQgc2NvcGluZyB0byBhcHBseSBvbiBhZGRyZXNzZXMgSSB0ZWxsIG15IHBlZXIKLQkgKiBOb3Qg
c3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2UgcmlnaHQgbm93LCB3ZSB3aWxsIG5lZWQgdG8gY29t
ZSB1cAotCSAqIHdpdGggYSB3YXkgdG8gc2V0IHRoZW0uIFdlIG1heSBuZWVkIHRvIHBhc3MgdGhl
bSB0aHJvdWdoIGZyb20gdGhlCi0JICogY2FsbGVyIGluIHRoZSBzY3RwX2Fsb2NfYXNzb2MoKSBm
dW5jdGlvbi4KLQkgKi8KLQlpbnQgaTsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NU
QVRTKQotCWludCBqOwotI2VuZGlmCi0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JLyogaW5pdCBh
bGwgdmFyaWFibGVzIHRvIGEga25vd24gdmFsdWUuICovCi0JU0NUUF9TRVRfU1RBVEUoJnN0Y2It
PmFzb2MsIFNDVFBfU1RBVEVfSU5VU0UpOwotCWFzb2MtPm1heF9idXJzdCA9IGlucC0+c2N0cF9l
cC5tYXhfYnVyc3Q7Ci0JYXNvYy0+ZnJfbWF4X2J1cnN0ID0gaW5wLT5zY3RwX2VwLmZyX21heF9i
dXJzdDsKLQlhc29jLT5oZWFydF9iZWF0X2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAtPnNjdHBf
ZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdKTsKLQlhc29jLT5jb29r
aWVfbGlmZSA9IGlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmU7Ci0JYXNvYy0+c2N0cF9jbXRf
b25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7Ci0JYXNvYy0+ZWNuX3N1cHBvcnRlZCA9IGlu
cC0+ZWNuX3N1cHBvcnRlZDsKLQlhc29jLT5wcnNjdHBfc3VwcG9ydGVkID0gaW5wLT5wcnNjdHBf
c3VwcG9ydGVkOwotCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9ydGVk
OwotCWFzb2MtPmF1dGhfc3VwcG9ydGVkID0gaW5wLT5hdXRoX3N1cHBvcnRlZDsKLQlhc29jLT5h
c2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOwotCWFzb2MtPnJlY29uZmln
X3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOwotCWFzb2MtPm5yc2Fja19zdXBw
b3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7Ci0JYXNvYy0+cGt0ZHJvcF9zdXBwb3J0ZWQg
PSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOwotCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+
aWRhdGFfc3VwcG9ydGVkOwotCWFzb2MtPnNjdHBfY210X3BmID0gKHVpbnQ4X3QpMDsKLQlhc29j
LT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKLQlhc29jLT5zY3RwX2Zl
YXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwotCWFzb2MtPmRlZmF1bHRfZHNjcCA9IGlucC0+
c2N0cF9lcC5kZWZhdWx0X2RzY3A7Ci0JYXNvYy0+bWF4X2N3bmQgPSBpbnAtPm1heF9jd25kOwot
I2lmZGVmIElORVQ2Ci0JaWYgKGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCkgewotCQlh
c29jLT5kZWZhdWx0X2Zsb3dsYWJlbCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbDsK
LQl9IGVsc2UgewotCQlpZiAoaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFncyAmIElONlBfQVVUT0ZM
T1dMQUJFTCkgewotCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSBzY3RwX3NlbGVjdF9pbml0
aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKLQkJCWFzb2MtPmRlZmF1bHRfZmxvd2xhYmVsICY9IDB4
MDAwZmZmZmY7Ci0JCQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCB8PSAweDgwMDAwMDAwOwotCQl9
IGVsc2UgewotCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSAwOwotCQl9Ci0JfQotI2VuZGlm
Ci0JYXNvYy0+c2Jfc2VuZF9yZXN2ID0gMDsKLQlpZiAob3ZlcnJpZGVfdGFnKSB7Ci0JCWFzb2Mt
Pm15X3Z0YWcgPSBvdmVycmlkZV90YWc7Ci0JfSBlbHNlIHsKLQkJYXNvYy0+bXlfdnRhZyA9IHNj
dHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBv
cnQsICAxKTsKLQl9Ci0JLyogR2V0IHRoZSBub25jZSB0YWdzICovCi0JYXNvYy0+bXlfdnRhZ19u
b25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwg
c3RjYi0+cnBvcnQsIDApOwotCWFzb2MtPnBlZXJfdnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0X2Ff
dGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIDApOwotCWFz
b2MtPnZyZl9pZCA9IHZyZl9pZDsKLQotI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCi0JYXNv
Yy0+dHNuX2luX2F0ID0gMDsKLQlhc29jLT50c25fb3V0X2F0ID0gMDsKLQlhc29jLT50c25faW5f
d3JhcHBlZCA9IDA7Ci0JYXNvYy0+dHNuX291dF93cmFwcGVkID0gMDsKLQlhc29jLT5jdW1hY2tf
bG9nX2F0ID0gMDsKLQlhc29jLT5jdW1hY2tfbG9nX2F0c250ID0gMDsKLSNlbmRpZgotI2lmZGVm
IFNDVFBfRlNfU1BFQ19MT0cKLQlhc29jLT5mc19pbmRleCA9IDA7Ci0jZW5kaWYKLQlhc29jLT5y
ZWZjbnQgPSAwOwotCWFzb2MtPmFzc29jX3VwX3NlbnQgPSAwOwotCWFzb2MtPmFzY29uZl9zZXFf
b3V0ID0gYXNvYy0+c3RyX3Jlc2V0X3NlcV9vdXQgPSBhc29jLT5pbml0X3NlcV9udW1iZXIgPSBh
c29jLT5zZW5kaW5nX3NlcSA9Ci0JICAgIHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNj
dHBfZXApOwotCWFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkID0gYXNvYy0+YXNjb25mX3NlcV9v
dXQgLSAxOwotCS8qIHdlIGFyZSBvcHRpbWlzaXRpYyBoZXJlICovCi0JYXNvYy0+cGVlcl9zdXBw
b3J0c19uYXQgPSAwOwotCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7Ci0KLQkvKiBm
b3IgQ01UICovCi0gICAgICAgIGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQgPSBOVUxM
OwotCi0JLyogVGhpcyB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQgKi8KLQlhc29jLT5sYXN0X2Fj
a2VkX3NlcSA9IGFzb2MtPmluaXRfc2VxX251bWJlciAtIDE7Ci0JYXNvYy0+YWR2YW5jZWRfcGVl
cl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKLQlhc29jLT5hc2NvbmZfc2VxX2lu
ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7Ci0KLQkvKiBoZXJlIHdlIGFyZSBkaWZmZXJlbnQsIHdl
IGhvbGQgdGhlIG5leHQgb25lIHdlIGV4cGVjdCAqLwotCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4g
PSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7Ci0KLQlhc29jLT5pbml0aWFsX2luaXRfcnRvX21h
eCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRfcnRvX21heDsKLQlhc29jLT5pbml0aWFsX3J0
byA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKLQotCWFzb2MtPm1heF9pbml0X3RpbWVzID0g
aW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVzOwotCWFzb2MtPm1heF9zZW5kX3RpbWVzID0gaW5w
LT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzOwotCWFzb2MtPmRlZl9uZXRfZmFpbHVyZSA9IGlucC0+
c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7Ci0JYXNvYy0+ZGVmX25ldF9wZl90aHJlc2hvbGQgPSBp
bnAtPnNjdHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0JYXNvYy0+ZnJlZV9jaHVua19jbnQg
PSAwOwotCi0JYXNvYy0+aWFtX2Jsb2NraW5nID0gMDsKLQlhc29jLT5jb250ZXh0ID0gaW5wLT5z
Y3RwX2NvbnRleHQ7Ci0JYXNvYy0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9IGlucC0+bG9jYWxf
c3RycmVzZXRfc3VwcG9ydDsKLQlhc29jLT5kZWZfc2VuZCA9IGlucC0+ZGVmX3NlbmQ7Ci0JYXNv
Yy0+ZGVsYXllZF9hY2sgPSBUSUNLU19UT19NU0VDKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0
aWNrc1tTQ1RQX1RJTUVSX1JFQ1ZdKTsKLQlhc29jLT5zYWNrX2ZyZXEgPSBpbnAtPnNjdHBfZXAu
c2N0cF9zYWNrX2ZyZXE7Ci0JYXNvYy0+cHJfc2N0cF9jbnQgPSAwOwotCWFzb2MtPnRvdGFsX291
dHB1dF9xdWV1ZV9zaXplID0gMDsKLQotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19CT1VORF9WNikgewotCQlhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwgPSAxOwotCQlp
ZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApID09IDApIHsKLQkJCWFzb2MtPnNjb3BlLmlwdjRfYWRk
cl9sZWdhbCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwg
PSAwOwotCQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJYXNvYy0+c2NvcGUuY29u
bl9hZGRyX2xlZ2FsID0gMDsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWFzb2MtPnNjb3BlLmlwdjZf
YWRkcl9sZWdhbCA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgewotCQkJYXNvYy0+c2NvcGUu
Y29ubl9hZGRyX2xlZ2FsID0gMTsKLQkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDA7
Ci0JCX0gZWxzZSB7Ci0JCQlhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwgPSAwOwotCQkJYXNv
Yy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKLQkJfQotI2Vsc2UKLQkJYXNvYy0+c2NvcGUu
aXB2NF9hZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotCX0KLQotCWFzb2MtPm15X3J3bmQgPSBtYXgo
U0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCksIFNDVFBfTUlOSU1BTF9SV05EKTsK
LQlhc29jLT5wZWVyc19yd25kID0gU0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCk7
Ci0KLQlhc29jLT5zbWFsbGVzdF9tdHUgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKLQlhc29jLT5t
aW5ydG8gPSBpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG87Ci0JYXNvYy0+bWF4cnRvID0gaW5wLT5z
Y3RwX2VwLnNjdHBfbWF4cnRvOwotCi0JYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiA9IDA7Ci0JYXNv
Yy0+ZWNuX2VjaG9fY250X29ucSA9IDA7Ci0JYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0KLQlh
c29jLT5zZW5kX3NhY2sgPSAxOwotCi0JTElTVF9JTklUKCZhc29jLT5zY3RwX3Jlc3RyaWN0ZWRf
YWRkcnMpOwotCi0JVEFJTFFfSU5JVCgmYXNvYy0+bmV0cyk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+
cGVuZGluZ19yZXBseV9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+YXNjb25mX2Fja19zZW50
KTsKLQkvKiBTZXR1cCB0byBmaWxsIHRoZSBoYiByYW5kb20gY2FjaGUgYXQgZmlyc3QgSEIgKi8K
LQlhc29jLT5oYl9yYW5kb21faWR4ID0gNDsKLQotCWFzb2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tz
ID0gaW5wLT5zY3RwX2VwLmF1dG9fY2xvc2VfdGltZTsKLQotCXN0Y2ItPmFzb2MuY29uZ2VzdGlv
bl9jb250cm9sX21vZHVsZSA9IGlucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfY2NfbW9kdWxlOwot
CXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zID0gc2N0cF9jY19mdW5jdGlvbnNbaW5wLT5zY3RwX2Vw
LnNjdHBfZGVmYXVsdF9jY19tb2R1bGVdOwotCi0Jc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGlu
Z19tb2R1bGUgPSBpbnAtPnNjdHBfZXAuc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKLQlzdGNiLT5h
c29jLnNzX2Z1bmN0aW9ucyA9IHNjdHBfc3NfZnVuY3Rpb25zW2lucC0+c2N0cF9lcC5zY3RwX2Rl
ZmF1bHRfc3NfbW9kdWxlXTsKLQotCS8qCi0JICogTm93IHRoZSBzdHJlYW0gcGFyYW1ldGVycywg
aGVyZSB3ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIHN0cmVhbXMKLQkgKiB0aGF0IHdlIHJlcXVl
c3QgYnkgZGVmYXVsdC4KLQkgKi8KLQlhc29jLT5zdHJtX3JlYWxvdXRzaXplID0gYXNvYy0+c3Ry
ZWFtb3V0Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9Ci0JICAgIG9fc3RybXM7Ci0JU0NU
UF9NQUxMT0MoYXNvYy0+c3RybW91dCwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAotCQkgICAg
YXNvYy0+c3RyZWFtb3V0Y250ICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQpLAotCQkg
ICAgU0NUUF9NX1NUUk1PKTsKLQlpZiAoYXNvYy0+c3RybW91dCA9PSBOVUxMKSB7Ci0JCS8qIGJp
ZyB0cm91YmxlIG5vIG1lbW9yeSAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKLQkJcmV0dXJuIChFTk9NRU0pOwot
CX0KLQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKLQkJLyoKLQkJ
ICogaW5ib3VuZCBzaWRlIG11c3QgYmUgc2V0IHRvIDB4ZmZmZiwgYWxzbyBOT1RFIHdoZW4gd2Ug
Z2V0Ci0JCSAqIHRoZSBJTklULUFDSyBiYWNrIChmb3IgSU5JVCBzZW5kZXIpIHdlIE1VU1QgcmVk
dWNlIHRoZQotCQkgKiBjb3VudCAoc3RyZWFtb3V0Y250KSBidXQgZmlyc3QgY2hlY2sgaWYgd2Ug
c2VudCB0byBhbnkgb2YKLQkJICogdGhlIHVwcGVyIHN0cmVhbXMgdGhhdCB3ZXJlIGRyb3BwZWQg
KGlmIHNvbWUgd2VyZSkuIFRob3NlCi0JCSAqIHRoYXQgd2VyZSBkcm9wcGVkIG11c3QgYmUgbm90
aWZpZWQgdG8gdGhlIHVwcGVyIGxheWVyIGFzCi0JCSAqIGZhaWxlZCB0byBzZW5kLgotCQkgKi8K
LQkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKLQkJYXNvYy0+c3RybW91
dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwotCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtb3V0
W2ldLm91dHF1ZXVlKTsKLQkJYXNvYy0+c3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gMDsK
LSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQotCQlmb3IgKGogPSAwOyBqIDwg
U0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgewotCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9u
ZWRfc2VudFtqXSA9IDA7Ci0JCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbal0g
PSAwOwotCQl9Ci0jZWxzZQotCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0g
MDsKLQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0gMDsKLSNlbmRpZgot
CQlhc29jLT5zdHJtb3V0W2ldLnNpZCA9IGk7Ci0JCWFzb2MtPnN0cm1vdXRbaV0ubGFzdF9tc2df
aW5jb21wbGV0ZSA9IDA7Ci0JCWFzb2MtPnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9P
UEVOSU5HOwotCQlhc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAm
YXNvYy0+c3RybW91dFtpXSwgTlVMTCk7Ci0JfQotCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2luaXQoc3RjYiwgYXNvYywgMCk7Ci0KLQkvKiBOb3cgdGhlIG1hcHBpbmcgYXJyYXkgKi8KLQlh
c29jLT5tYXBwaW5nX2FycmF5X3NpemUgPSBTQ1RQX0lOSVRJQUxfTUFQUElOR19BUlJBWTsKLQlT
Q1RQX01BTExPQyhhc29jLT5tYXBwaW5nX2FycmF5LCB1aW50OF90ICosIGFzb2MtPm1hcHBpbmdf
YXJyYXlfc2l6ZSwKLQkJICAgIFNDVFBfTV9NQVApOwotCWlmIChhc29jLT5tYXBwaW5nX2FycmF5
ID09IE5VTEwpIHsKLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJNTyk7Ci0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElM
LCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCW1lbXNldChhc29jLT5tYXBwaW5n
X2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwotCVNDVFBfTUFMTE9DKGFzb2Mt
Pm5yX21hcHBpbmdfYXJyYXksIHVpbnQ4X3QgKiwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAot
CSAgICBTQ1RQX01fTUFQKTsKLQlpZiAoYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9PSBOVUxMKSB7
Ci0JCVNDVFBfRlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOwotCQlTQ1RQX0ZSRUUo
YXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOwotCQlyZXR1cm4g
KEVOT01FTSk7Ci0JfQotCW1lbXNldChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5t
YXBwaW5nX2FycmF5X3NpemUpOwotCi0JLyogTm93IHRoZSBpbml0IG9mIHRoZSBvdGhlciBvdXRx
dWV1ZXMgKi8KLQlUQUlMUV9JTklUKCZhc29jLT5mcmVlX2NodW5rcyk7Ci0JVEFJTFFfSU5JVCgm
YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKTsKLQlUQUlMUV9JTklUKCZhc29jLT5hc2NvbmZfc2Vu
ZF9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+c2VuZF9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgm
YXNvYy0+c2VudF9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+cmVzZXRIZWFkKTsKLQlhc29j
LT5tYXhfaW5ib3VuZF9zdHJlYW1zID0gaW5wLT5zY3RwX2VwLm1heF9vcGVuX3N0cmVhbXNfaW50
b21lOwotCVRBSUxRX0lOSVQoJmFzb2MtPmFzY29uZl9xdWV1ZSk7Ci0JLyogYXV0aGVudGljYXRp
b24gZmllbGRzICovCi0JYXNvYy0+YXV0aGluZm8ucmFuZG9tID0gTlVMTDsKLQlhc29jLT5hdXRo
aW5mby5hY3RpdmVfa2V5aWQgPSAwOwotCWFzb2MtPmF1dGhpbmZvLmFzc29jX2tleSA9IE5VTEw7
Ci0JYXNvYy0+YXV0aGluZm8uYXNzb2Nfa2V5aWQgPSAwOwotCWFzb2MtPmF1dGhpbmZvLnJlY3Zf
a2V5ID0gTlVMTDsKLQlhc29jLT5hdXRoaW5mby5yZWN2X2tleWlkID0gMDsKLQlMSVNUX0lOSVQo
JmFzb2MtPnNoYXJlZF9rZXlzKTsKLQlhc29jLT5tYXJrZWRfcmV0cmFucyA9IDA7Ci0JYXNvYy0+
cG9ydCA9IGlucC0+c2N0cF9lcC5wb3J0OwotCWFzb2MtPnRpbW9pbml0ID0gMDsKLQlhc29jLT50
aW1vZGF0YSA9IDA7Ci0JYXNvYy0+dGltb3NhY2sgPSAwOwotCWFzb2MtPnRpbW9zaHV0ZG93biA9
IDA7Ci0JYXNvYy0+dGltb2hlYXJ0YmVhdCA9IDA7Ci0JYXNvYy0+dGltb2Nvb2tpZSA9IDA7Ci0J
YXNvYy0+dGltb3NodXRkb3duYWNrID0gMDsKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgm
YXNvYy0+c3RhcnRfdGltZSk7Ci0JYXNvYy0+ZGlzY29udGludWl0eV90aW1lID0gYXNvYy0+c3Rh
cnRfdGltZTsKLQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGkrKykgewot
CQlhc29jLT5hYmFuZG9uZWRfdW5zZW50W2ldID0gMDsKLQkJYXNvYy0+YWJhbmRvbmVkX3NlbnRb
aV0gPSAwOwotCX0KLQkvKiBzYV9pZ25vcmUgTUVNTEVBSyB7bWVtb3J5IGlzIHB1dCBpbiB0aGUg
YXNzb2MgbWFwcGluZyBhcnJheSBhbmQgZnJlZWQgbGF0ZXIgd2hlbgotCSAqIHRoZSBhc3NvY2lh
dGlvbiBpcyBmcmVlZC4KLQkgKi8KLQlyZXR1cm4gKDApOwotfQotCi12b2lkCi1zY3RwX3ByaW50
X21hcHBpbmdfYXJyYXkoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0JdW5zaWdu
ZWQgaW50IGksIGxpbWl0OwotCi0JU0NUUF9QUklOVEYoIk1hcHBpbmcgYXJyYXkgc2l6ZTogJWQs
IGJhc2VUU046ICU4Ljh4LCBjdW1BY2s6ICU4Ljh4LCBoaWdoZXN0VFNOOiAoJTguOHgsICU4Ljh4
KS5cbiIsCi0JICAgICAgICAgICAgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAotCSAgICAgICAg
ICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sCi0JICAgICAgICAgICAgYXNvYy0+Y3Vt
dWxhdGl2ZV90c24sCi0JICAgICAgICAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwK
LQkgICAgICAgICAgICBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKTsKLQlmb3IgKGxp
bWl0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBsaW1pdCA+IDE7IGxpbWl0LS0pIHsKLQkJ
aWYgKGFzb2MtPm1hcHBpbmdfYXJyYXlbbGltaXQgLSAxXSAhPSAwKSB7Ci0JCQlicmVhazsKLQkJ
fQotCX0KLQlTQ1RQX1BSSU5URigiUmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50
cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7Ci0J
Zm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBh
c29jLT5tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcgJyA6ICdcbicpOwotCX0K
LQlpZiAobGltaXQgJSAxNikKLQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JZm9yIChsaW1pdCA9IGFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgbGltaXQgPiAxOyBsaW1pdC0tKSB7Ci0JCWlmIChhc29j
LT5ucl9tYXBwaW5nX2FycmF5W2xpbWl0IC0gMV0pIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCVND
VFBfUFJJTlRGKCJOb24gcmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBh
cmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7Ci0JZm9yIChp
ID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5u
cl9tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcgJzogJ1xuJyk7Ci0JfQotCWlm
IChsaW1pdCAlIDE2KQotCQlTQ1RQX1BSSU5URigiXG4iKTsKLX0KLQotaW50Ci1zY3RwX2V4cGFu
ZF9tYXBwaW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1aW50MzJfdCBu
ZWVkZWQpCi17Ci0JLyogbWFwcGluZyBhcnJheSBuZWVkcyB0byBncm93ICovCi0JdWludDhfdCAq
bmV3X2FycmF5MSwgKm5ld19hcnJheTI7Ci0JdWludDMyX3QgbmV3X3NpemU7Ci0KLQluZXdfc2l6
ZSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSArICgobmVlZGVkKzcpLzggKyBTQ1RQX01BUFBJ
TkdfQVJSQVlfSU5DUik7Ci0JU0NUUF9NQUxMT0MobmV3X2FycmF5MSwgdWludDhfdCAqLCBuZXdf
c2l6ZSwgU0NUUF9NX01BUCk7Ci0JU0NUUF9NQUxMT0MobmV3X2FycmF5MiwgdWludDhfdCAqLCBu
ZXdfc2l6ZSwgU0NUUF9NX01BUCk7Ci0JaWYgKChuZXdfYXJyYXkxID09IE5VTEwpIHx8IChuZXdf
YXJyYXkyID09IE5VTEwpKSB7Ci0JCS8qIGNhbid0IGdldCBtb3JlLCBmb3JnZXQgaXQgKi8KLQkJ
U0NUUF9QUklOVEYoIk5vIG1lbW9yeSBmb3IgZXhwYW5zaW9uIG9mIFNDVFAgbWFwcGluZyBhcnJh
eSAlZFxuIiwgbmV3X3NpemUpOwotCQlpZiAobmV3X2FycmF5MSkgewotCQkJU0NUUF9GUkVFKG5l
d19hcnJheTEsIFNDVFBfTV9NQVApOwotCQl9Ci0JCWlmIChuZXdfYXJyYXkyKSB7Ci0JCQlTQ1RQ
X0ZSRUUobmV3X2FycmF5MiwgU0NUUF9NX01BUCk7Ci0JCX0KLQkJcmV0dXJuICgtMSk7Ci0JfQot
CW1lbXNldChuZXdfYXJyYXkxLCAwLCBuZXdfc2l6ZSk7Ci0JbWVtc2V0KG5ld19hcnJheTIsIDAs
IG5ld19zaXplKTsKLQltZW1jcHkobmV3X2FycmF5MSwgYXNvYy0+bWFwcGluZ19hcnJheSwgYXNv
Yy0+bWFwcGluZ19hcnJheV9zaXplKTsKLQltZW1jcHkobmV3X2FycmF5MiwgYXNvYy0+bnJfbWFw
cGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKLQlTQ1RQX0ZSRUUoYXNvYy0+
bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7Ci0JU0NUUF9GUkVFKGFzb2MtPm5yX21hcHBpbmdf
YXJyYXksIFNDVFBfTV9NQVApOwotCWFzb2MtPm1hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkxOwot
CWFzb2MtPm5yX21hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkyOwotCWFzb2MtPm1hcHBpbmdfYXJy
YXlfc2l6ZSA9IG5ld19zaXplOwotCXJldHVybiAoMCk7Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNj
dHBfaXRlcmF0b3Jfd29yayhzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQpCi17Ci0JaW50IGl0ZXJh
dGlvbl9jb3VudCA9IDA7Ci0JaW50IGlucF9za2lwID0gMDsKLQlpbnQgZmlyc3RfaW4gPSAxOwot
CXN0cnVjdCBzY3RwX2lucGNiICp0aW5wOwotCi0JU0NUUF9JTlBfSU5GT19STE9DSygpOwotCVND
VFBfSVRFUkFUT1JfTE9DSygpOwotCXNjdHBfaXRfY3RsLmN1cl9pdCA9IGl0OwotCWlmIChpdC0+
aW5wKSB7Ci0JCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOwotCQlTQ1RQX0lOUF9ERUNSX1JFRihp
dC0+aW5wKTsKLQl9Ci0JaWYgKGl0LT5pbnAgPT0gTlVMTCkgewotCQkvKiBpdGVyYXRvciBpcyBj
b21wbGV0ZSAqLwotZG9uZV93aXRoX2l0ZXJhdG9yOgotCQlzY3RwX2l0X2N0bC5jdXJfaXQgPSBO
VUxMOwotCQlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOwotCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0so
KTsKLQkJaWYgKGl0LT5mdW5jdGlvbl9hdGVuZCAhPSBOVUxMKSB7Ci0JCQkoKml0LT5mdW5jdGlv
bl9hdGVuZCkgKGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKLQkJfQotCQlTQ1RQX0ZSRUUoaXQsIFND
VFBfTV9JVEVSKTsKLQkJcmV0dXJuOwotCX0KLXNlbGVjdF9hX25ld19lcDoKLQlpZiAoZmlyc3Rf
aW4pIHsKLQkJZmlyc3RfaW4gPSAwOwotCX0gZWxzZSB7Ci0JCVNDVFBfSU5QX1JMT0NLKGl0LT5p
bnApOwotCX0KLQl3aGlsZSAoKChpdC0+cGNiX2ZsYWdzKSAmJgotCSAgICAgICAgKChpdC0+aW5w
LT5zY3RwX2ZsYWdzICYgaXQtPnBjYl9mbGFncykgIT0gaXQtPnBjYl9mbGFncykpIHx8Ci0JICAg
ICAgICgoaXQtPnBjYl9mZWF0dXJlcykgJiYKLQkJKChpdC0+aW5wLT5zY3RwX2ZlYXR1cmVzICYg
aXQtPnBjYl9mZWF0dXJlcykgIT0gaXQtPnBjYl9mZWF0dXJlcykpKSB7Ci0JCS8qIGVuZHBvaW50
IGZsYWdzIG9yIGZlYXR1cmVzIGRvbid0IG1hdGNoLCBzbyBrZWVwIGxvb2tpbmcgKi8KLQkJaWYg
KGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgewotCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKLQkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOwot
CQl9Ci0JCXRpbnAgPSBpdC0+aW5wOwotCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNj
dHBfbGlzdCk7Ci0JCVNDVFBfSU5QX1JVTkxPQ0sodGlucCk7Ci0JCWlmIChpdC0+aW5wID09IE5V
TEwpIHsKLQkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOwotCQl9Ci0JCVNDVFBfSU5QX1JMT0NL
KGl0LT5pbnApOwotCX0KLQkvKiBub3cgZ28gdGhyb3VnaCBlYWNoIGFzc29jIHdoaWNoIGlzIGlu
IHRoZSBkZXNpcmVkIHN0YXRlICovCi0JaWYgKGl0LT5kb25lX2N1cnJlbnRfZXAgPT0gMCkgewot
CQlpZiAoaXQtPmZ1bmN0aW9uX2lucCAhPSBOVUxMKQotCQkJaW5wX3NraXAgPSAoKml0LT5mdW5j
dGlvbl9pbnApKGl0LT5pbnAsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKLQkJaXQtPmRvbmVfY3Vy
cmVudF9lcCA9IDE7Ci0JfQotCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7Ci0JCS8qIHJ1biB0aGUg
cGVyIGluc3RhbmNlIGZ1bmN0aW9uICovCi0JCWl0LT5zdGNiID0gTElTVF9GSVJTVCgmaXQtPmlu
cC0+c2N0cF9hc29jX2xpc3QpOwotCX0KLQlpZiAoKGlucF9za2lwKSB8fCBpdC0+c3RjYiA9PSBO
VUxMKSB7Ci0JCWlmIChpdC0+ZnVuY3Rpb25faW5wX2VuZCAhPSBOVUxMKSB7Ci0JCQlpbnBfc2tp
cCA9ICgqaXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCi0JCQkJCQkJICAgaXQtPnBvaW50
ZXIsCi0JCQkJCQkJICAgaXQtPnZhbCk7Ci0JCX0KLQkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5w
KTsKLQkJZ290byBub19zdGNiOwotCX0KLQl3aGlsZSAoaXQtPnN0Y2IpIHsKLQkJU0NUUF9UQ0Jf
TE9DSyhpdC0+c3RjYik7Ci0JCWlmIChpdC0+YXNvY19zdGF0ZSAmJiAoKGl0LT5zdGNiLT5hc29j
LnN0YXRlICYgaXQtPmFzb2Nfc3RhdGUpICE9IGl0LT5hc29jX3N0YXRlKSkgewotCQkJLyogbm90
IGluIHRoZSByaWdodCBzdGF0ZS4uLiBrZWVwIGxvb2tpbmcgKi8KLQkJCVNDVFBfVENCX1VOTE9D
SyhpdC0+c3RjYik7Ci0JCQlnb3RvIG5leHRfYXNzb2M7Ci0JCX0KLQkJLyogc2VlIGlmIHdlIGhh
dmUgbGltaXRlZCBvdXQgdGhlIGl0ZXJhdG9yIGxvb3AgKi8KLQkJaXRlcmF0aW9uX2NvdW50Kys7
Ci0JCWlmIChpdGVyYXRpb25fY291bnQgPiBTQ1RQX0lURVJBVE9SX01BWF9BVF9PTkNFKSB7Ci0J
CQkvKiBQYXVzZSB0byBsZXQgb3RoZXJzIGdyYWIgdGhlIGxvY2sgKi8KLQkJCWF0b21pY19hZGRf
aW50KCZpdC0+c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKGl0LT5z
dGNiKTsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQkJU0NUUF9JTlBfUlVOTE9D
SyhpdC0+aW5wKTsKLQkJCVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7Ci0JCQlTQ1RQX0lOUF9JTkZP
X1JVTkxPQ0soKTsKLQkJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLQkJCVNDVFBfSVRFUkFUT1Jf
TE9DSygpOwotCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzKSB7Ci0JCQkJLyogV2Ug
d29uJ3QgYmUgc3RheWluZyBoZXJlICovCi0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaXQtPmlucCk7
Ci0JCQkJYXRvbWljX2FkZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOwotI2lmICFk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAm
Ci0JCQkJICAgU0NUUF9JVEVSQVRPUl9NVVNUX0VYSVQpIHsKLQkJCQkJZ290byBkb25lX3dpdGhf
aXRlcmF0b3I7Ci0JCQkJfQotI2VuZGlmCi0JCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2Zs
YWdzICYKLQkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUKSB7Ci0JCQkJCXNjdHBfaXRf
Y3RsLml0ZXJhdG9yX2ZsYWdzICY9IH5TQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUOwotCQkJCQln
b3RvIGRvbmVfd2l0aF9pdGVyYXRvcjsKLQkJCQl9Ci0JCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJh
dG9yX2ZsYWdzICYKLQkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lOUCkgewotCQkJCQlz
Y3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAmPSB+U0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JTlA7
Ci0JCQkJCWdvdG8gbm9fc3RjYjsKLQkJCQl9Ci0JCQkJLyogSWYgd2UgcmVhY2ggaGVyZSBodWg/
ICovCi0JCQkJU0NUUF9QUklOVEYoIlVua25vd24gaXQgY3RsIGZsYWcgJXhcbiIsCi0JCQkJCSAg
ICBzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyk7Ci0JCQkJc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
ZmxhZ3MgPSAwOwotCQkJfQotCQkJU0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7Ci0JCQlTQ1RQX0lO
UF9ERUNSX1JFRihpdC0+aW5wKTsKLQkJCVNDVFBfVENCX0xPQ0soaXQtPnN0Y2IpOwotCQkJYXRv
bWljX2FkZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOwotCQkJaXRlcmF0aW9uX2Nv
dW50ID0gMDsKLQkJfQotCi0JCS8qIHJ1biBmdW5jdGlvbiBvbiB0aGlzIG9uZSAqLwotCQkoKml0
LT5mdW5jdGlvbl9hc3NvYykoaXQtPmlucCwgaXQtPnN0Y2IsIGl0LT5wb2ludGVyLCBpdC0+dmFs
KTsKLQotCQkvKgotCQkgKiB3ZSBsaWUgaGVyZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGhhdmUgaXRz
IG93biB0eXBlIGJ1dAotCQkgKiBmaXJzdCBJIG11c3QgdmVyaWZ5IHRoYXQgdGhpcyB3b24ndCBl
ZmZlY3QgdGhpbmdzIDotMAotCQkgKi8KLQkJaWYgKGl0LT5ub19jaHVua19vdXRwdXQgPT0gMCkK
LQkJCXNjdHBfY2h1bmtfb3V0cHV0KGl0LT5pbnAsIGl0LT5zdGNiLCBTQ1RQX09VVFBVVF9GUk9N
X1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCi0JCVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7
Ci0JbmV4dF9hc3NvYzoKLQkJaXQtPnN0Y2IgPSBMSVNUX05FWFQoaXQtPnN0Y2IsIHNjdHBfdGNi
bGlzdCk7Ci0JCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7Ci0JCQkvKiBSdW4gbGFzdCBmdW5jdGlv
biAqLwotCQkJaWYgKGl0LT5mdW5jdGlvbl9pbnBfZW5kICE9IE5VTEwpIHsKLQkJCQlpbnBfc2tp
cCA9ICgqaXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCi0JCQkJCQkJCSAgIGl0LT5wb2lu
dGVyLAotCQkJCQkJCQkgICBpdC0+dmFsKTsKLQkJCX0KLQkJfQotCX0KLQlTQ1RQX0lOUF9SVU5M
T0NLKGl0LT5pbnApOwotIG5vX3N0Y2I6Ci0JLyogZG9uZSB3aXRoIGFsbCBhc3NvY3Mgb24gdGhp
cyBlbmRwb2ludCwgbW92ZSBvbiB0byBuZXh0IGVuZHBvaW50ICovCi0JaXQtPmRvbmVfY3VycmVu
dF9lcCA9IDA7Ci0JaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lO
R0xFX0lOUCkgewotCQlpdC0+aW5wID0gTlVMTDsKLQl9IGVsc2UgewotCQlpdC0+aW5wID0gTElT
VF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7Ci0JfQotCWlmIChpdC0+aW5wID09IE5VTEwpIHsK
LQkJZ290byBkb25lX3dpdGhfaXRlcmF0b3I7Ci0JfQotCWdvdG8gc2VsZWN0X2FfbmV3X2VwOwot
fQotCi12b2lkCi1zY3RwX2l0ZXJhdG9yX3dvcmtlcih2b2lkKQotewotCXN0cnVjdCBzY3RwX2l0
ZXJhdG9yICppdCwgKm5pdDsKLQotCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhl
IFdRIGxvY2sgaW4gcGxhY2UgKi8KLQotCXNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcgPSAx
OwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShpdCwgJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgc2N0
cF9ueHRfaXRyLCBuaXQpIHsKLQkJLyogbm93IGxldHMgd29yayBvbiB0aGlzIG9uZSAqLwotCQlU
QUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7
Ci0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQlDVVJWTkVUX1NFVChpdC0+dm4p
OwotI2VuZGlmCi0JCXNjdHBfaXRlcmF0b3Jfd29yayhpdCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNVUlZORVRfUkVTVE9SRSgp
OwotI2VuZGlmCi0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKLSNpZiAhZGVmaW5lZChf
X0ZyZWVCU0RfXykKLQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYgU0NUUF9JVEVS
QVRPUl9NVVNUX0VYSVQpIHsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KLQl9Ci0Jc2N0cF9pdF9jdGwuaXRlcmF0b3JfcnVubmluZyA9IDA7Ci0J
cmV0dXJuOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9hZGRyX3dxKHZvaWQpCi17
Ci0JLyogZGVhbCB3aXRoIHRoZSBBRERSIHdxIGZyb20gdGhlIHJ0c29jayBjYWxscyAqLwotCXN0
cnVjdCBzY3RwX2xhZGRyICp3aSwgKm53aTsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3Ig
KmFzYzsKLQotCVNDVFBfTUFMTE9DKGFzYywgc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICos
Ci0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yKSwgU0NUUF9NX0FTQ19J
VCk7Ci0JaWYgKGFzYyA9PSBOVUxMKSB7Ci0JCS8qIFRyeSBsYXRlciwgbm8gbWVtb3J5ICovCi0J
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCi0JCQkJIChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKU5VTEwsCi0JCQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLAotCQkJCSAo
c3RydWN0IHNjdHBfbmV0cyAqKU5VTEwpOwotCQlyZXR1cm47Ci0JfQotCUxJU1RfSU5JVCgmYXNj
LT5saXN0X29mX3dvcmspOwotCWFzYy0+Y250ID0gMDsKLQotCVNDVFBfV1FfQUREUl9MT0NLKCk7
Ci0JTElTVF9GT1JFQUNIX1NBRkUod2ksICZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSwgc2N0cF9u
eHRfYWRkciwgbndpKSB7Ci0JCUxJU1RfUkVNT1ZFKHdpLCBzY3RwX254dF9hZGRyKTsKLQkJTElT
VF9JTlNFUlRfSEVBRCgmYXNjLT5saXN0X29mX3dvcmssIHdpLCBzY3RwX254dF9hZGRyKTsKLQkJ
YXNjLT5jbnQrKzsKLQl9Ci0JU0NUUF9XUV9BRERSX1VOTE9DSygpOwotCi0JaWYgKGFzYy0+Y250
ID09IDApIHsKLQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7Ci0JfSBlbHNlIHsKLQkJ
aW50IHJldDsKLQotCQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKHNjdHBfYXNjb25mX2l0
ZXJhdG9yX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0
ZXJhdG9yX3N0Y2IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogTm8g
ZXAgZW5kIGZvciBib3VuZGFsbCAqLwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfUENCX0ZMQUdTX0JPVU5EQUxMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfUENCX0FOWV9GRUFUVVJFUywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQ
X0FTT0NfQU5ZX1NUQVRFLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICop
YXNjLCAwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJh
dG9yX2VuZCwgTlVMTCwgMCk7Ci0JCWlmIChyZXQpIHsKLQkJCVNDVFBfUFJJTlRGKCJGYWlsZWQg
dG8gaW5pdGlhdGUgaXRlcmF0b3IgZm9yIGhhbmRsZV9hZGRyX3dxXG4iKTsKLQkJCS8qIEZyZWVp
bmcgaWYgd2UgYXJlIHN0b3BwaW5nIG9yIHB1dCBiYWNrIG9uIHRoZSBhZGRyX3dxLiAqLwotCQkJ
aWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKLQkJCQlzY3Rw
X2FzY29uZl9pdGVyYXRvcl9lbmQoYXNjLCAwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9XUV9B
RERSX0xPQ0soKTsKLQkJCQlMSVNUX0ZPUkVBQ0god2ksICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0
cF9ueHRfYWRkcikgewotCQkJCQlMSVNUX0lOU0VSVF9IRUFEKCZTQ1RQX0JBU0VfSU5GTyhhZGRy
X3dxKSwgd2ksIHNjdHBfbnh0X2FkZHIpOwotCQkJCX0KLQkJCQlTQ1RQX1dRX0FERFJfVU5MT0NL
KCk7Ci0JCQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7Ci0JCQl9Ci0JCX0KLQl9Ci19
Ci0KLXZvaWQKLXNjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCi17Ci0Jc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfbmV0cyAq
bmV0OwotCXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7Ci0Jc3RydWN0IG1idWYgKm9wX2VycjsKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlz
dHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCWludCBkaWRfb3V0cHV0OwotCWludCB0eXBlOwot
Ci0JdG1yID0gKHN0cnVjdCBzY3RwX3RpbWVyICopdDsKLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKil0bXItPmVwOwotCXN0Y2IgPSAoc3RydWN0IHNjdHBfdGNiICopdG1yLT50Y2I7Ci0JbmV0
ID0gKHN0cnVjdCBzY3RwX25ldHMgKil0bXItPm5ldDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKLQlDVVJWTkVUX1NFVCgoc3RydWN0IHZu
ZXQgKil0bXItPnZuZXQpOwotI2VuZGlmCi0JZGlkX291dHB1dCA9IDE7Ci0KLSNpZmRlZiBTQ1RQ
X0FVRElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEYwLCAodWludDhfdCkgdG1yLT50
eXBlKTsKLQlzY3RwX2F1ZGl0aW5nKDMsIGlucCwgc3RjYiwgbmV0KTsKLSNlbmRpZgotCi0JLyog
c2FuaXR5IGNoZWNrcy4uLiAqLwotCWlmICh0bXItPnNlbGYgIT0gKHZvaWQgKil0bXIpIHsKLQkJ
LyoKLQkJICogU0NUUF9QUklOVEYoIlN0YWxlIFNDVFAgdGltZXIgZmlyZWQgKCVwKSwgaWdub3Jp
bmcuLi5cbiIsCi0JCSAqICAgICAgICAgICAgICh2b2lkICopdG1yKTsKLQkJICovCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNVUlZO
RVRfUkVTVE9SRSgpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JdG1yLT5zdG9wcGVkX2Zyb20g
PSAweGEwMDE7Ci0JaWYgKCFTQ1RQX0lTX1RJTUVSX1RZUEVfVkFMSUQodG1yLT50eXBlKSkgewot
CQkvKgotCQkgKiBTQ1RQX1BSSU5URigiU0NUUCB0aW1lciBmaXJlZCB3aXRoIGludmFsaWQgdHlw
ZTogMHgleFxuIiwKLQkJICogdG1yLT50eXBlKTsKLQkJICovCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNVUlZORVRfUkVTVE9SRSgp
OwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDI7Ci0J
aWYgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FERFJfV1EpICYmIChpbnAgPT0gTlVM
TCkpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDEwMDAKLQkJQ1VSVk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLQkvKiBp
ZiB0aGlzIGlzIGFuIGl0ZXJhdG9yIHRpbWVvdXQsIGdldCB0aGUgc3RydWN0IGFuZCBjbGVhciBp
bnAgKi8KLQl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwMzsKLQlpZiAoaW5wKSB7Ci0JCVNDVFBf
SU5QX0lOQ1JfUkVGKGlucCk7Ci0JCWlmICgoaW5wLT5zY3RwX3NvY2tldCA9PSBOVUxMKSAmJgot
CQkgICAgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0lOUEtJTEwpICYmCi0JCSAgICAg
KHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgJiYKLQkJICAgICAodG1yLT50eXBl
ICE9IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9U
SU1FUl9UWVBFX1JFQ1YpICYmCi0JCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVf
SEVBUlRCRUFUKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRE
T1dOKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNL
KSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQp
ICYmCi0JCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwpKQotCQkJ
KSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQkJQ1VSVk5FVF9SRVNUT1JFKCk7Ci0j
ZW5kaWYKLQkJCXJldHVybjsKLQkJfQotCX0KLQl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwNDsK
LQlpZiAoc3RjYikgewotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwot
CQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIC0xKTsKLQkJCWlmIChpbnApIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihp
bnApOwotCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMTAwMAotCQkJQ1VSVk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYKLQkJCXJldHVybjsKLQkJ
fQotCX0KLQl0eXBlID0gdG1yLT50eXBlOwotCXRtci0+c3RvcHBlZF9mcm9tID0gMHhhMDA1Owot
CVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICJUaW1lciB0eXBlICVkIGdvZXMgb2ZmXG4iLCB0
eXBlKTsKLQlpZiAoIVNDVFBfT1NfVElNRVJfQUNUSVZFKCZ0bXItPnRpbWVyKSkgewotCQlpZiAo
aW5wKSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQl9Ci0JCWlmIChzdGNiKSB7Ci0J
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJfQotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQlDVVJWTkVU
X1JFU1RPUkUoKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCXRtci0+c3RvcHBlZF9mcm9tID0g
MHhhMDA2OwotCi0JaWYgKHN0Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7Ci0JCWlmICgodHlwZSAhPSBTQ1RQX1RJ
TUVSX1RZUEVfQVNPQ0tJTEwpICYmCi0JCSAgICAoKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgfHwK
LQkJICAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQp
KSkgewotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJaWYgKGlucCkgewotCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVUX1JFU1RPUkUoKTsKLSNlbmRpZgot
CQkJcmV0dXJuOwotCQl9Ci0JfQotCS8qIHJlY29yZCBpbiBzdG9wcGVkIHdoYXQgdC1vIG9jY3Vy
cmVkICovCi0JdG1yLT5zdG9wcGVkX2Zyb20gPSB0eXBlOwotCi0JLyogbWFyayBhcyBiZWluZyBz
ZXJ2aWNlZCBub3cgKi8KLQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZ0bXItPnRpbWVyKSkg
ewotCQkvKgotCQkgKiBDYWxsb3V0IGhhcyBiZWVuIHJlc2NoZWR1bGVkLgotCQkgKi8KLQkJZ290
byBnZXRfb3V0OwotCX0KLQlpZiAoIVNDVFBfT1NfVElNRVJfQUNUSVZFKCZ0bXItPnRpbWVyKSkg
ewotCQkvKgotCQkgKiBOb3QgYWN0aXZlLCBzbyBubyBhY3Rpb24uCi0JCSAqLwotCQlnb3RvIGdl
dF9vdXQ7Ci0JfQotCVNDVFBfT1NfVElNRVJfREVBQ1RJVkFURSgmdG1yLT50aW1lcik7Ci0KLQkv
KiBjYWxsIHRoZSBoYW5kbGVyIGZvciB0aGUgYXBwcm9wcmlhdGUgdGltZXIgdHlwZSAqLwotCXN3
aXRjaCAodHlwZSkgewotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1pFUk9fQ09QWToKLQkJaWYgKGlu
cCA9PSBOVUxMKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSkpIHsKLQkJCVNDVFBfWkVST19DT1BZ
X0VWRU5UKGlucCwgaW5wLT5zY3RwX3NvY2tldCk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfWkNPUFlfU0VORFE6Ci0JCWlmIChpbnAgPT0gTlVMTCkgewotCQkJYnJlYWs7
Ci0JCX0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1pFUk9f
Q09QWV9BQ1RJVkUpKSB7Ci0JCSAgICBTQ1RQX1pFUk9fQ09QWV9TRU5EUV9FVkVOVChpbnAsIGlu
cC0+c2N0cF9zb2NrZXQpOwotCQl9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfQUREUl9XUToKLQkJc2N0cF9oYW5kbGVfYWRkcl93cSgpOwotCQlicmVhazsK
LQljYXNlIFNDVFBfVElNRVJfVFlQRV9TRU5EOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlu
cCA9PSBOVUxMKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGlt
b2RhdGEpOwotCQlzdGNiLT5hc29jLnRpbW9kYXRhKys7Ci0JCXN0Y2ItPmFzb2MubnVtX3NlbmRf
dGltZXJzX3VwLS07Ci0JCWlmIChzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA8IDApIHsK
LQkJCXN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID0gMDsKLQkJfQotCQlTQ1RQX1RDQl9M
T0NLX0FTU0VSVChzdGNiKTsKLQkJaWYgKHNjdHBfdDNyeHRfdGltZXIoaW5wLCBzdGNiLCBuZXQp
KSB7Ci0JCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KLQotCQkJZ290
byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLSNpZmRlZiBT
Q1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7
Ci0jZW5kaWYKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9N
X1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlpZiAoKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGlt
ZXJzX3VwID09IDApICYmCi0JCSAgICAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCA+IDApKSB7
Ci0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQkJCS8qCi0JCQkgKiBzYWZlZ3Vh
cmQuIElmIHRoZXJlIG9uIHNvbWUgb24gdGhlIHNlbnQgcXVldWUKLQkJCSAqIHNvbWV3aGVyZSBi
dXQgbm8gdGltZXJzIHJ1bm5pbmcgc29tZXRoaW5nIGlzCi0JCQkgKiB3cm9uZy4uLiBzbyB3ZSBz
dGFydCBhIHRpbWVyIG9uIHRoZSBmaXJzdCBjaHVuawotCQkJICogb24gdGhlIHNlbmQgcXVldWUg
b24gd2hhdGV2ZXIgbmV0IGl0IGlzIHNlbnQgdG8uCi0JCQkgKi8KLQkJCWNoayA9IFRBSUxRX0ZJ
UlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLAotCQkJICAgIGNoay0+d2hvVG8pOwotCQl9Ci0JCWJy
ZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOSVQ6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAoaW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c190aW1vaW5pdCk7Ci0JCXN0Y2ItPmFzb2MudGltb2luaXQrKzsKLQkJaWYgKHNjdHBfdDFpbml0
X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNi
IGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9Ci0JCS8qIFdlIGRvIG91dHB1dCBi
dXQgbm90IGhlcmUgKi8KLQkJZGlkX291dHB1dCA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9U
SU1FUl9UWVBFX1JFQ1Y6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7
Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vc2Fjayk7Ci0JCXN0
Y2ItPmFzb2MudGltb3NhY2srKzsKLQkJc2N0cF9zZW5kX3NhY2soc3RjYiwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJc2N0cF9hdWRpdGluZyg0
LCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX1NBQ0tfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlicmVh
azsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTjoKLQkJaWYgKChzdGNiID09IE5VTEwp
IHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzY3RwX3NodXRkb3du
X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNi
IGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9Ci0JCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3RpbW9zaHV0ZG93bik7Ci0JCXN0Y2ItPmFzb2MudGltb3NodXRkb3duKys7Ci0jaWZkZWYg
U0NUUF9BVURJVElOR19FTkFCTEVECi0JCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQp
OwotI2VuZGlmCi0JCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJP
TV9TSFVUX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfSEVBUlRCRUFUOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxM
KSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc190aW1vaGVhcnRiZWF0KTsKLQkJc3RjYi0+YXNvYy50aW1vaGVhcnRiZWF0Kys7Ci0JCWlm
IChzY3RwX2hlYXJ0YmVhdF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQg
dG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotI2lm
ZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwg
bmV0KTsKLSNlbmRpZgotCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikp
IHsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBz
dGNiLCBuZXQpOwotCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9G
Uk9NX0hCX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFND
VFBfVElNRVJfVFlQRV9DT09LSUU6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5V
TEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzY3RwX2Nvb2tpZV90aW1lcihpbnAsIHN0
Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLwot
CQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vY29va2ll
KTsKLQkJc3RjYi0+YXNvYy50aW1vY29va2llKys7Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFC
TEVECi0JCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQpOwotI2VuZGlmCi0JCS8qCi0J
CSAqIFdlIGNvbnNpZGVyIFQzIGFuZCBDb29raWUgdGltZXIgcHJldHR5IG11Y2ggdGhlIHNhbWUg
d2l0aAotCQkgKiByZXNwZWN0IHRvIHdoZXJlIGZyb20gaW4gY2h1bmtfb3V0cHV0LgotCQkgKi8K
LQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9ORVdDT09L
SUU6Ci0JCXsKLQkJCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkJaW50IGksIHNlY3JldDsKLQkJCWlm
IChpbnAgPT0gTlVMTCkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfdGltb3NlY3JldCk7Ci0JCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdHYpOwotCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCWlucC0+c2N0cF9lcC50aW1lX29mX3NlY3JldF9jaGFu
Z2UgPSB0di50dl9zZWM7Ci0JCQlpbnAtPnNjdHBfZXAubGFzdF9zZWNyZXRfbnVtYmVyID0KLQkJ
CSAgICBpbnAtPnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyOwotCQkJaW5wLT5zY3RwX2Vw
LmN1cnJlbnRfc2VjcmV0X251bWJlcisrOwotCQkJaWYgKGlucC0+c2N0cF9lcC5jdXJyZW50X3Nl
Y3JldF9udW1iZXIgPj0KLQkJCSAgICBTQ1RQX0hPV19NQU5ZX1NFQ1JFVFMpIHsKLQkJCQlpbnAt
PnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID0gMDsKLQkJCX0KLQkJCXNlY3JldCA9IChp
bnQpaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcjsKLQkJCWZvciAoaSA9IDA7IGkg
PCBTQ1RQX05VTUJFUl9PRl9TRUNSRVRTOyBpKyspIHsKLQkJCQlpbnAtPnNjdHBfZXAuc2VjcmV0
X2tleVtzZWNyZXRdW2ldID0KLQkJCQkgICAgc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+
c2N0cF9lcCk7Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUUsIGlucCwgc3RjYiwgbmV0KTsKLQkJfQot
CQlkaWRfb3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUEFUSE1U
VVJBSVNFOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkgewotCQkJYnJl
YWs7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3BhdGhtdHUpOwotCQlzY3RwX3Bh
dGhtdHVfdGltZXIoaW5wLCBzdGNiLCBuZXQpOwotCQlkaWRfb3V0cHV0ID0gMDsKLQkJYnJlYWs7
Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0s6Ci0JCWlmICgoc3RjYiA9PSBOVUxM
KSB8fCAoaW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2N0cF9zaHV0ZG93
bmFja190aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9u
IHRjYiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc190aW1vc2h1dGRvd25hY2spOwotCQlzdGNiLT5hc29jLnRpbW9zaHV0ZG93bmFjaysr
OwotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwg
c3RjYiwgbmV0KTsKLSNlbmRpZgotCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBf
T1VUUFVUX0ZST01fU0hVVF9BQ0tfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlicmVhazsK
LQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJEOgotCQlpZiAoKHN0Y2IgPT0gTlVM
TCkgfHwgKGlucCA9PSBOVUxMKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfdGltb3NodXRkb3duZ3VhcmQpOwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNl
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIlNodXRkb3duIGd1YXJkIHRpbWVyIGV4cGlyZWQiKTsKLQkJc2N0cF9h
Ym9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCi0JCWdvdG8gb3V0
X2RlY3I7Ci0KLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVDoKLQkJaWYgKChzdGNiID09
IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzY3RwX3N0
cnJlc2V0X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8gbmVlZCB0byB1bmxvY2sg
b24gdGNiIGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9Ci0JCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3RpbW9zdHJtcnN0KTsKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX1NUUlJTVF9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCWJyZWFr
OwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FTQ09ORjoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8
IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzY3RwX2FzY29uZl90aW1l
cihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMg
Z29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190
aW1vYXNjb25mKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJc2N0cF9hdWRpdGlu
Zyg0LCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBz
dGNiLCBTQ1RQX09VVFBVVF9GUk9NX0FTQ09ORl9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRDoKLQkJaWYgKChzdGNi
ID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjdHBfZGVs
ZXRlX3ByaW1fdGltZXIoaW5wLCBzdGNiLCBuZXQpOwotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190
aW1vZGVscHJpbSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NF
OgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkgewotCQkJYnJlYWs7Ci0J
CX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2F1dG9jbG9zZSk7Ci0JCXNjdHBfYXV0b2Ns
b3NlX3RpbWVyKGlucCwgc3RjYiwgbmV0KTsKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0J
CWRpZF9vdXRwdXQgPSAwOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lM
TDoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwot
CQl9Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9hc3NvY2tpbGwpOwotCQkvKiBDYW4gd2Ug
ZnJlZSBpdCB5ZXQ/ICovCi0JCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCXNjdHBfdGltZXJf
c3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwgTlVMTCwKLQkJICAgICAg
ICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzEpOwotI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzbyA9IFNDVFBf
SU5QX1NPKGlucCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLSNlbmRpZgotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQ
X05PUk1BTF9QUk9DLAotCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElM
ICsgU0NUUF9MT0NfMik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJ
LyoKLQkJICogZnJlZSBhc29jLCBhbHdheXMgdW5sb2NrcyAob3IgZGVzdHJveSdzKSBzbyBwcmV2
ZW50Ci0JCSAqIGR1cGxpY2F0ZSB1bmxvY2sgb3IgdW5sb2NrIG9mIGEgZnJlZSBtdHggOi0wCi0J
CSAqLwotCQlzdGNiID0gTlVMTDsKLQkJZ290byBvdXRfbm9fZGVjcjsKLQljYXNlIFNDVFBfVElN
RVJfVFlQRV9JTlBLSUxMOgotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vaW5wa2lsbCk7Ci0J
CWlmIChpbnAgPT0gTlVMTCkgewotCQkJYnJlYWs7Ci0JCX0KLQkJLyoKLQkJICogc3BlY2lhbCBj
YXNlLCB0YWtlIGF3YXkgb3VyIGluY3JlbWVudCBzaW5jZSBXRSBhcmUgdGhlCi0JCSAqIGtpbGxl
cgotCQkgKi8KLQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9JTlBLSUxMLCBpbnAsIE5VTEwsIE5VTEwsCi0JCSAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18zKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLQkJU0NUUF9TT0NLRVRfTE9DSyhTQ1RQX0lOUF9TTyhpbnApLCAxKTsKLSNlbmRpZgotCQlz
Y3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9BQk9SVCwKLQkJCQlTQ1RQ
X0NBTExFRF9GUk9NX0lOUEtJTExfVElNRVIpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0jZW5kaWYKLQkJaW5wID0g
TlVMTDsKLQkJZ290byBvdXRfbm9fZGVjcjsKLQlkZWZhdWx0OgotCQlTQ1RQREJHKFNDVFBfREVC
VUdfVElNRVIxLCAic2N0cF90aW1lb3V0X2hhbmRsZXI6dW5rbm93biB0aW1lciAlZFxuIiwKLQkJ
CXR5cGUpOwotCQlicmVhazsKLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0
cF9hdWRpdF9sb2coMHhGMSwgKHVpbnQ4X3QpIHR5cGUpOwotCWlmIChpbnApCi0JCXNjdHBfYXVk
aXRpbmcoNSwgaW5wLCBzdGNiLCBuZXQpOwotI2VuZGlmCi0JaWYgKChkaWRfb3V0cHV0KSAmJiBz
dGNiKSB7Ci0JCS8qCi0JCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBjb250cm9sIGNo
dW5rIGNoYWluIGlmIGFuCi0JCSAqIEVDTkUgaXMgb24gaXQuIEl0IG11c3QgYmUgbWFya2VkIGFz
IFVOU0VOVCBhZ2FpbiBzbyBuZXh0Ci0JCSAqIGNhbGwgd2lsbCBjb250aW51ZSB0byBzZW5kIGl0
IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldAotCQkgKiBhIENXUiwgdG8gcmVtb3ZlIGl0LiBJ
dCBpcywgaG93ZXZlciwgbGVzcyBsaWtlbHkgdGhhdCB3ZQotCQkgKiB3aWxsIGZpbmQgYSBlY24g
ZWNobyBvbiB0aGUgY2hhaW4gdGhvdWdoLgotCQkgKi8KLQkJc2N0cF9maXhfZWNuX2VjaG8oJnN0
Y2ItPmFzb2MpOwotCX0KLWdldF9vdXQ6Ci0JaWYgKHN0Y2IpIHsKLQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCX0KLQotb3V0X2RlY3I6Ci0JaWYgKGlucCkgewotCQlTQ1RQX0lOUF9ERUNSX1JF
RihpbnApOwotCX0KLQotb3V0X25vX2RlY3I6Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwg
IlRpbWVyIG5vdyBjb21wbGV0ZSAodHlwZSA9ICVkKVxuIiwgdHlwZSk7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JQ1VSVk5FVF9SRVNU
T1JFKCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF90aW1lcl9zdGFydChpbnQgdF90eXBlLCBz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KQotewotCXVpbnQzMl90IHRvX3RpY2tzOwotCXN0cnVjdCBzY3RwX3Rp
bWVyICp0bXI7Ci0KLQlpZiAoKHRfdHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSkgJiYg
KGlucCA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCi0JdG1yID0gTlVMTDsKLQlpZiAoc3RjYikgewot
CQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQl9Ci0Jc3dpdGNoICh0X3R5cGUpIHsKLQlj
YXNlIFNDVFBfVElNRVJfVFlQRV9aRVJPX0NPUFk6Ci0JCXRtciA9ICZpbnAtPnNjdHBfZXAuemVy
b19jb3B5X3RpbWVyOwotCQl0b190aWNrcyA9IFNDVFBfWkVST19DT1BZX1RJQ0tfREVMQVk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1pDT1BZX1NFTkRROgotCQl0bXIgPSAmaW5w
LT5zY3RwX2VwLnplcm9fY29weV9zZW5kcV90aW1lcjsKLQkJdG9fdGlja3MgPSBTQ1RQX1pFUk9f
Q09QWV9TRU5EUV9USUNLX0RFTEFZOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9B
RERSX1dROgotCQkvKiBPbmx5IDEgdGljayBhd2F5IDotKSAqLwotCQl0bXIgPSAmU0NUUF9CQVNF
X0lORk8oYWRkcl93cV90aW1lcik7Ci0JCXRvX3RpY2tzID0gU0NUUF9BRERSRVNTX1RJQ0tfREVM
QVk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6Ci0JCS8qIEhlcmUgd2Ug
dXNlIHRoZSBSVE8gdGltZXIgKi8KLQkJewotCQkJaW50IHJ0b192YWw7Ci0KLQkJCWlmICgoc3Rj
YiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJdG1y
ID0gJm5ldC0+cnh0X3RpbWVyOwotCQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJCQlydG9fdmFs
ID0gc3RjYi0+YXNvYy5pbml0aWFsX3J0bzsKLQkJCX0gZWxzZSB7Ci0JCQkJcnRvX3ZhbCA9IG5l
dC0+UlRPOwotCQkJfQotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHJ0b192YWwpOwotCQl9
Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOSVQ6Ci0JCS8qCi0JCSAqIEhlcmUg
d2UgdXNlIHRoZSBJTklUIHRpbWVyIGRlZmF1bHQgdXN1YWxseSBhYm91dCAxCi0JCSAqIG1pbnV0
ZS4KLQkJICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlpZiAobmV0LT5SVE8gPT0g
MCkgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8p
OwotCQl9IGVsc2UgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKLQkJ
fQotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9SRUNWOgotCQkvKgotCQkgKiBIZXJl
IHdlIHVzZSB0aGUgRGVsYXllZC1BY2sgdGltZXIgdmFsdWUgZnJvbSB0aGUgaW5wCi0JCSAqIHVz
dXN1YWxseSBhYm91dCAyMDBtcy4KLQkJICovCi0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCXJl
dHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5kYWNrX3RpbWVyOwotCQl0b190aWNrcyA9
IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5kZWxheWVkX2Fjayk7Ci0JCWJyZWFrOwotCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgotCQkvKiBIZXJlIHdlIHVzZSB0aGUgUlRPIG9mIHRo
ZSBkZXN0aW5hdGlvbi4gKi8KLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkp
IHsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAobmV0LT5SVE8gPT0gMCkgewotCQkJdG9fdGlja3Mg
PSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8pOwotCQl9IGVsc2UgewotCQkJ
dG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKLQkJfQotCQl0bXIgPSAmbmV0LT5y
eHRfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVDoKLQkJ
LyoKLQkJICogdGhlIG5ldCBpcyB1c2VkIGhlcmUgc28gdGhhdCB3ZSBjYW4gYWRkIGluIHRoZSBS
VE8uIEV2ZW4KLQkJICogdGhvdWdoIHdlIHVzZSBhIGRpZmZlcmVudCB0aW1lci4gV2UgYWxzbyBh
ZGQgdGhlIEhCIHRpbWVyCi0JCSAqIFBMVVMgYSByYW5kb20gaml0dGVyLgotCQkgKi8KLQkJaWYg
KChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJfSBlbHNl
IHsKLQkJCXVpbnQzMl90IHJuZHZhbDsKLQkJCXVpbnQzMl90IGppdHRlcjsKLQotCQkJaWYgKChu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgJiYKLQkJCSAgICAhKG5ldC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlp
ZiAobmV0LT5SVE8gPT0gMCkgewotCQkJCXRvX3RpY2tzID0gc3RjYi0+YXNvYy5pbml0aWFsX3J0
bzsKLQkJCX0gZWxzZSB7Ci0JCQkJdG9fdGlja3MgPSBuZXQtPlJUTzsKLQkJCX0KLQkJCXJuZHZh
bCA9IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOwotCQkJaml0dGVyID0g
cm5kdmFsICUgdG9fdGlja3M7Ci0JCQlpZiAoaml0dGVyID49ICh0b190aWNrcyA+PiAxKSkgewot
CQkJCXRvX3RpY2tzID0gdG9fdGlja3MgKyAoaml0dGVyIC0gKHRvX3RpY2tzID4+IDEpKTsKLQkJ
CX0gZWxzZSB7Ci0JCQkJdG9fdGlja3MgPSB0b190aWNrcyAtIGppdHRlcjsKLQkJCX0KLQkJCWlm
ICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKLQkJCSAgICAh
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpIHsKLQkJCQl0b190aWNrcyArPSBuZXQt
PmhlYXJ0X2JlYXRfZGVsYXk7Ci0JCQl9Ci0JCQkvKgotCQkJICogTm93IHdlIG11c3QgY29udmVy
dCB0aGUgdG9fdGlja3MgdGhhdCBhcmUgbm93IGluCi0JCQkgKiBtcyB0byB0aWNrcy4KLQkJCSAq
LwotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHRvX3RpY2tzKTsKLQkJCXRtciA9ICZuZXQt
PmhiX3RpbWVyOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0NPT0tJRToK
LQkJLyoKLQkJICogSGVyZSB3ZSBjYW4gdXNlIHRoZSBSVE8gdGltZXIgZnJvbSB0aGUgbmV0d29y
ayBzaW5jZSBvbmUKLQkJICogUlRUIHdhcyBjb21wZWxldGUuIElmIGEgcmV0cmFuIGhhcHBlbmVk
IHRoZW4gd2Ugd2lsbCBiZQotCQkgKiB1c2luZyB0aGUgUlRPIGluaXRpYWwgdmFsdWUuCi0JCSAq
LwotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewotCQkJcmV0dXJuOwot
CQl9Ci0JCWlmIChuZXQtPlJUTyA9PSAwKSB7Ci0JCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Mo
c3RjYi0+YXNvYy5pbml0aWFsX3J0byk7Ci0JCX0gZWxzZSB7Ci0JCQl0b190aWNrcyA9IE1TRUNf
VE9fVElDS1MobmV0LT5SVE8pOwotCQl9Ci0JCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFOgotCQkvKgotCQkgKiBub3RoaW5n
IG5lZWRlZCBidXQgdGhlIGVuZHBvaW50IGhlcmUgdXN1c3VhbGx5IGFib3V0IDYwCi0JCSAqIG1p
bnV0ZXMuCi0JCSAqLwotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7Ci0J
CXRvX3RpY2tzID0gaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfU0lH
TkFUVVJFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEw6Ci0JCWlm
IChzdGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5z
dHJyZXNldF90aW1lcjsKLQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKFNDVFBfQVNPQ19LSUxM
X1RJTUVPVVQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMOgotCQkv
KgotCQkgKiBUaGUgaW5wIGlzIHNldHVwIHRvIGRpZS4gV2UgcmUtdXNlIHRoZSBzaWduYXR1cmVf
Y2hhZ2UKLQkJICogdGltZXIgc2luY2UgdGhhdCBoYXMgc3RvcHBlZCBhbmQgd2UgYXJlIGluIHRo
ZSBHT05FCi0JCSAqIHN0YXRlLgotCQkgKi8KLQkJdG1yID0gJmlucC0+c2N0cF9lcC5zaWduYXR1
cmVfY2hhbmdlOwotCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1MoU0NUUF9JTlBfS0lMTF9USU1F
T1VUKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFOgotCQkv
KgotCQkgKiBIZXJlIHdlIHVzZSB0aGUgdmFsdWUgZm91bmQgaW4gdGhlIEVQIGZvciBQTVRVIHVz
dXN1YWxseQotCQkgKiBhYm91dCAxMCBtaW51dGVzLgotCQkgKi8KLQkJaWYgKChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX05PX1BNVFVEKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdG9fdGlj
a3MgPSBpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9QTVRVXTsKLQkJ
dG1yID0gJm5ldC0+cG10dV90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV05BQ0s6Ci0JCS8qIEhlcmUgd2UgdXNlIHRoZSBSVE8gb2YgdGhlIGRlc3RpbmF0aW9u
ICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47
Ci0JCX0KLQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNL
UyhzdGNiLT5hc29jLmluaXRpYWxfcnRvKTsKLQkJfSBlbHNlIHsKLQkJCXRvX3RpY2tzID0gTVNF
Q19UT19USUNLUyhuZXQtPlJUTyk7Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQli
cmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJEOgotCQkvKgotCQkgKiBI
ZXJlIHdlIHVzZSB0aGUgZW5kcG9pbnRzIHNodXRkb3duIGd1YXJkIHRpbWVyIHVzdWFsbHkKLQkJ
ICogYWJvdXQgMyBtaW51dGVzLgotCQkgKi8KLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJcmV0
dXJuOwotCQl9Ci0JCWlmIChpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1F
Ul9NQVhTSFVURE9XTl0gPT0gMCkgewotCQkJdG9fdGlja3MgPSA1ICogTVNFQ19UT19USUNLUyhz
dGNiLT5hc29jLm1heHJ0byk7Ci0JCX0gZWxzZSB7Ci0JCQl0b190aWNrcyA9IGlucC0+c2N0cF9l
cC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dOXTsKLQkJfQotCQl0bXIg
PSAmc3RjYi0+YXNvYy5zaHV0X2d1YXJkX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElN
RVJfVFlQRV9TVFJSRVNFVDoKLQkJLyoKLQkJICogSGVyZSB0aGUgdGltZXIgY29tZXMgZnJvbSB0
aGUgc3RjYiBidXQgaXRzIHZhbHVlIGlzIGZyb20KLQkJICogdGhlIG5ldCdzIFJUTy4KLQkJICov
Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0J
CX0KLQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhz
dGNiLT5hc29jLmluaXRpYWxfcnRvKTsKLQkJfSBlbHNlIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19U
T19USUNLUyhuZXQtPlJUTyk7Ci0JCX0KLQkJdG1yID0gJnN0Y2ItPmFzb2Muc3RycmVzZXRfdGlt
ZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FTQ09ORjoKLQkJLyoKLQkJICog
SGVyZSB0aGUgdGltZXIgY29tZXMgZnJvbSB0aGUgc3RjYiBidXQgaXRzIHZhbHVlIGlzIGZyb20K
LQkJICogdGhlIG5ldCdzIFJUTy4KLQkJICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0
ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJ
CXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhzdGNiLT5hc29jLmluaXRpYWxfcnRvKTsKLQkJfSBl
bHNlIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhuZXQtPlJUTyk7Ci0JCX0KLQkJdG1y
ID0gJnN0Y2ItPmFzb2MuYXNjb25mX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJf
VFlQRV9QUklNX0RFTEVURUQ6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ICE9IE5VTEwp
KSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFz
b2MuaW5pdGlhbF9ydG8pOwotCQl0bXIgPSAmc3RjYi0+YXNvYy5kZWxldGVfcHJpbV90aW1lcjsK
LQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFOgotCQlpZiAoc3RjYiA9
PSBOVUxMKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xv
c2VfdGlja3MgPT0gMCkgewotCQkJLyoKLQkJCSAqIFJlYWxseSBhbiBlcnJvciBzaW5jZSBzdGNi
IGlzIE5PVCBzZXQgdG8KLQkJCSAqIGF1dG9jbG9zZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCX0K
LQkJdG9fdGlja3MgPSBzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzOwotCQl0bXIgPSAm
c3RjYi0+YXNvYy5hdXRvY2xvc2VfdGltZXI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNDVFBE
QkcoU0NUUF9ERUJVR19USU1FUjEsICIlczogVW5rbm93biB0aW1lciB0eXBlICVkXG4iLAotCQkJ
X19mdW5jX18sIHRfdHlwZSk7Ci0JCXJldHVybjsKLQkJYnJlYWs7Ci0JfQotCWlmICgodG9fdGlj
a3MgPD0gMCkgfHwgKHRtciA9PSBOVUxMKSkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIx
LCAiJXM6ICVkOnNvZnR3YXJlIGVycm9yIHRvX3RpY2tzOiVkIHRtcjolcCBub3Qgc2V0ID8/XG4i
LAotCQkJX19mdW5jX18sIHRfdHlwZSwgdG9fdGlja3MsICh2b2lkICopdG1yKTsKLQkJcmV0dXJu
OwotCX0KLQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZ0bXItPnRpbWVyKSkgewotCQkvKgot
CQkgKiB3ZSBkbyBOT1QgYWxsb3cgeW91IHRvIGhhdmUgaXQgYWxyZWFkeSBydW5uaW5nLiBpZiBp
dCBpcwotCQkgKiB3ZSBsZWF2ZSB0aGUgY3VycmVudCBvbmUgdXAgdW5jaGFuZ2VkCi0JCSAqLwot
CQlyZXR1cm47Ci0JfQotCS8qIEF0IHRoaXMgcG9pbnQgd2UgY2FuIHByb2NlZWQgKi8KLQlpZiAo
dF90eXBlID09IFNDVFBfVElNRVJfVFlQRV9TRU5EKSB7Ci0JCXN0Y2ItPmFzb2MubnVtX3NlbmRf
dGltZXJzX3VwKys7Ci0JfQotCXRtci0+c3RvcHBlZF9mcm9tID0gMDsKLQl0bXItPnR5cGUgPSB0
X3R5cGU7Ci0JdG1yLT5lcCA9ICh2b2lkICopaW5wOwotCXRtci0+dGNiID0gKHZvaWQgKilzdGNi
OwotCXRtci0+bmV0ID0gKHZvaWQgKiluZXQ7Ci0JdG1yLT5zZWxmID0gKHZvaWQgKil0bXI7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0J
dG1yLT52bmV0ID0gKHZvaWQgKiljdXJ2bmV0OwotI2VuZGlmCi0jaWZuZGVmIF9fUGFuZGFfXwot
CXRtci0+dGlja3MgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7Ci0jZW5kaWYKLQkodm9pZClTQ1RQ
X09TX1RJTUVSX1NUQVJUKCZ0bXItPnRpbWVyLCB0b190aWNrcywgc2N0cF90aW1lb3V0X2hhbmRs
ZXIsIHRtcik7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1zY3RwX3RpbWVyX3N0b3AoaW50IHRfdHlw
ZSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDMyX3QgZnJvbSkKLXsKLQlzdHJ1Y3Qgc2N0cF90aW1l
ciAqdG1yOwotCi0JaWYgKCh0X3R5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FERFJfV1EpICYmCi0J
ICAgIChpbnAgPT0gTlVMTCkpCi0JCXJldHVybjsKLQotCXRtciA9IE5VTEw7Ci0JaWYgKHN0Y2Ip
IHsKLQkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JfQotCXN3aXRjaCAodF90eXBlKSB7
Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfWkVST19DT1BZOgotCQl0bXIgPSAmaW5wLT5zY3RwX2Vw
Lnplcm9fY29weV90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfWkNPUFlf
U0VORFE6Ci0JCXRtciA9ICZpbnAtPnNjdHBfZXAuemVyb19jb3B5X3NlbmRxX3RpbWVyOwotCQli
cmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BRERSX1dROgotCQl0bXIgPSAmU0NUUF9CQVNF
X0lORk8oYWRkcl93cV90aW1lcik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NF
TkQ6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47
Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElN
RVJfVFlQRV9JTklUOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewot
CQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX1RJTUVSX1RZUEVfUkVDVjoKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJcmV0dXJu
OwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLmRhY2tfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9
PSBOVUxMKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgotCQlpZiAoKHN0Y2IgPT0g
TlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZuZXQt
PmhiX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9DT09LSUU6Ci0JCWlm
ICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJ
dG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9O
RVdDT09LSUU6Ci0JCS8qIG5vdGhpbmcgbmVlZGVkIGJ1dCB0aGUgZW5kcG9pbnQgaGVyZSAqLwot
CQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7Ci0JCS8qCi0JCSAqIFdlIHJl
LXVzZSB0aGUgbmV3Y29va2llIHRpbWVyIGZvciB0aGUgSU5QIGtpbGwgdGltZXIuIFdlCi0JCSAq
IG11c3QgYXNzdXJlIHRoYXQgd2UgZG8gbm90IGtpbGwgaXQgYnkgYWNjaWRlbnQuCi0JCSAqLwot
CQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoKLQkJLyoKLQkJICogU3Rv
cCB0aGUgYXNvYyBraWxsIHRpbWVyLgotCQkgKi8KLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJ
cmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyOwotCQlicmVh
azsKLQotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOUEtJTEw6Ci0JCS8qCi0JCSAqIFRoZSBpbnAg
aXMgc2V0dXAgdG8gZGllLiBXZSByZS11c2UgdGhlIHNpZ25hdHVyZV9jaGFnZQotCQkgKiB0aW1l
ciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVkIGFuZCB3ZSBhcmUgaW4gdGhlIEdPTkUKLQkJICogc3Rh
dGUuCi0JCSAqLwotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7Ci0JCWJy
ZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRToKLQkJaWYgKChzdGNiID09
IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmbmV0
LT5wbXR1X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFD
SzoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsK
LQkJfQotCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQ6Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsK
LQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5zaHV0X2d1YXJkX3RpbWVyOwotCQlicmVhazsKLQlj
YXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVDoKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJ
cmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyOwotCQlicmVh
azsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BU0NPTkY6Ci0JCWlmIChzdGNiID09IE5VTEwpIHsK
LQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5hc2NvbmZfdGltZXI7Ci0JCWJy
ZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRDoKLQkJaWYgKHN0Y2IgPT0g
TlVMTCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmlt
X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0U6Ci0JCWlm
IChzdGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5h
dXRvY2xvc2VfdGltZXI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJV
R19USU1FUjEsICIlczogVW5rbm93biB0aW1lciB0eXBlICVkXG4iLAotCQkJX19mdW5jX18sIHRf
dHlwZSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAodG1yID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0K
LQlpZiAoKHRtci0+dHlwZSAhPSB0X3R5cGUpICYmIHRtci0+dHlwZSkgewotCQkvKgotCQkgKiBP
ayB3ZSBoYXZlIGEgdGltZXIgdGhhdCBpcyB1bmRlciBqb2ludCB1c2UuIENvb2tpZSB0aW1lcgot
CQkgKiBwZXIgY2hhbmNlIHdpdGggdGhlIFNFTkQgdGltZXIuIFdlIHRoZXJlZm9yZSBhcmUgTk9U
Ci0JCSAqIHJ1bm5pbmcgdGhlIHRpbWVyIHRoYXQgdGhlIGNhbGxlciB3YW50cyBzdG9wcGVkLiAg
U28ganVzdAotCQkgKiByZXR1cm4uCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCWlmICgodF90eXBl
ID09IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAmJiAoc3RjYiAhPSBOVUxMKSkgewotCQlzdGNiLT5h
c29jLm51bV9zZW5kX3RpbWVyc191cC0tOwotCQlpZiAoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1l
cnNfdXAgPCAwKSB7Ci0JCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA9IDA7Ci0JCX0K
LQl9Ci0JdG1yLT5zZWxmID0gTlVMTDsKLQl0bXItPnN0b3BwZWRfZnJvbSA9IGZyb207Ci0JKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZ0bXItPnRpbWVyKTsKLQlyZXR1cm47Ci19Ci0KLXVpbnQz
Ml90Ci1zY3RwX2NhbGN1bGF0ZV9sZW4oc3RydWN0IG1idWYgKm0pCi17Ci0JdWludDMyX3QgdGxl
biA9IDA7Ci0Jc3RydWN0IG1idWYgKmF0OwotCi0JYXQgPSBtOwotCXdoaWxlIChhdCkgewotCQl0
bGVuICs9IFNDVFBfQlVGX0xFTihhdCk7Ci0JCWF0ID0gU0NUUF9CVUZfTkVYVChhdCk7Ci0JfQot
CXJldHVybiAodGxlbik7Ci19Ci0KLXZvaWQKLXNjdHBfbXR1X3NpemVfcmVzZXQoc3RydWN0IHNj
dHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdWludDMy
X3QgbXR1KQotewotCS8qCi0JICogUmVzZXQgdGhlIFAtTVRVIHNpemUgb24gdGhpcyBhc3NvY2lh
dGlvbiwgdGhpcyBpbnZvbHZlcyBjaGFuZ2luZwotCSAqIHRoZSBhc29jIE1UVSwgZ29pbmcgdGhy
b3VnaCBBTlkgY2h1bmsrb3ZlcmhlYWQgbGFyZ2VyIHRoYW4gbXR1IHRvCi0JICogYWxsb3cgdGhl
IERGIGZsYWcgdG8gYmUgY2xlYXJlZC4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGs7Ci0JdW5zaWduZWQgaW50IGVmZl9tdHUsIG92aDsKLQotCWFzb2MtPnNtYWxsZXN0X210dSA9
IG10dTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsK
LQkJb3ZoID0gU0NUUF9NSU5fT1ZFUkhFQUQ7Ci0JfSBlbHNlIHsKLQkJb3ZoID0gU0NUUF9NSU5f
VjRfT1ZFUkhFQUQ7Ci0JfQotCWVmZl9tdHUgPSBtdHUgLSBvdmg7Ci0JVEFJTFFfRk9SRUFDSChj
aGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+c2VuZF9zaXpl
ID4gZWZmX210dSkgewotCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsK
LQkJfQotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4
dCkgewotCQlpZiAoY2hrLT5zZW5kX3NpemUgPiBlZmZfbXR1KSB7Ci0JCQljaGstPmZsYWdzIHw9
IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQl9Ci0JfQotfQotCi0KLS8qCi0gKiBnaXZlbiBh
biBhc3NvY2lhdGlvbiBhbmQgc3RhcnRpbmcgdGltZSBvZiB0aGUgY3VycmVudCBSVFQgcGVyaW9k
IHJldHVybgotICogUlRPIGluIG51bWJlciBvZiBtc2VjcyBuZXQgc2hvdWxkIHBvaW50IHRvIHRo
ZSBjdXJyZW50IG5ldHdvcmsKLSAqLwotCi11aW50MzJfdAotc2N0cF9jYWxjdWxhdGVfcnRvKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Ms
Ci0JCSAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJICAgc3RydWN0IHRpbWV2YWwgKnRvbGQs
Ci0JCSAgIGludCBzYWZlLCBpbnQgcnR0X2Zyb21fc2FjaykKLXsKLQkvKi0KLQkgKiBnaXZlbiBh
biBhc3NvY2lhdGlvbiBhbmQgdGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhlIGN1cnJlbnQgUlRUCi0J
ICogcGVyaW9kIChpbiB2YWx1ZTEvdmFsdWUyKSByZXR1cm4gUlRPIGluIG51bWJlciBvZiBtc2Vj
cy4KLQkgKi8KLQlpbnQzMl90IHJ0dDsgLyogUlRUIGluIG1zICovCi0JdWludDMyX3QgbmV3X3J0
bzsKLQlpbnQgZmlyc3RfbWVhc3VyZSA9IDA7Ci0Jc3RydWN0IHRpbWV2YWwgbm93LCB0aGVuLCAq
b2xkOwotCi0JLyogQ29weSBpdCBvdXQgZm9yIHNwYXJjNjQgKi8KLQlpZiAoc2FmZSA9PSBzY3Rw
X2FsaWduX3Vuc2FmZV9tYWtlY29weSkgewotCQlvbGQgPSAmdGhlbjsKLQkJbWVtY3B5KCZ0aGVu
LCB0b2xkLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLQl9IGVsc2UgaWYgKHNhZmUgPT0gc2N0
cF9hbGlnbl9zYWZlX25vY29weSkgewotCQlvbGQgPSB0b2xkOwotCX0gZWxzZSB7Ci0JCS8qIGVy
cm9yICovCi0JCVNDVFBfUFJJTlRGKCJIdWgsIGJhZCBydG8gY2FsYyBjYWxsXG4iKTsKLQkJcmV0
dXJuICgwKTsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiAxLiBjYWxjdWxh
dGUgbmV3IFJUVCAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogZ2V0IHRoZSBj
dXJyZW50IHRpbWUgKi8KLQlpZiAoc3RjYi0+YXNvYy51c2VfcHJlY2lzZV90aW1lKSB7Ci0JCSh2
b2lkKVNDVFBfR0VUUFRJTUVfVElNRVZBTCgmbm93KTsKLQl9IGVsc2UgewotCQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQl9Ci0JdGltZXZhbHN1Yigmbm93LCBvbGQpOwotCS8q
IHN0b3JlIHRoZSBjdXJyZW50IFJUVCBpbiB1cyAqLwotCW5ldC0+cnR0ID0gKHVpbnQ2NF90KTEw
MDAwMDAgKiAodWludDY0X3Qpbm93LnR2X3NlYyArCi0JICAgICAgICAgICAodWludDY0X3Qpbm93
LnR2X3VzZWM7Ci0JLyogY29tcHV0ZSBydHQgaW4gbXMgKi8KLQlydHQgPSAoaW50MzJfdCkobmV0
LT5ydHQgLyAxMDAwKTsKLQlpZiAoKGFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX3J0dF9jYWxjdWxh
dGVkKSAmJiAocnR0X2Zyb21fc2FjayA9PSBTQ1RQX1JUVF9GUk9NX0RBVEEpKSB7Ci0JCS8qIFRl
bGwgdGhlIENDIG1vZHVsZSB0aGF0IGEgbmV3IHVwZGF0ZSBoYXMganVzdCBvY2N1cnJlZCBmcm9t
IGEgc2FjayAqLwotCQkoKmFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX3J0dF9jYWxjdWxhdGVkKShz
dGNiLCBuZXQsICZub3cpOwotCX0KLQkvKiBEbyB3ZSBuZWVkIHRvIGRldGVybWluZSB0aGUgbGFu
PyBXZSBkbyB0aGlzIG9ubHkKLQkgKiBvbiBzYWNrcyBpLmUuIFJUVCBiZWluZyBkZXRlcm1pbmVk
IGZyb20gZGF0YSBub3QKLQkgKiBub24tZGF0YSAoSEIvSU5JVC0+SU5JVEFDSykuCi0JICovCi0J
aWYgKChydHRfZnJvbV9zYWNrID09IFNDVFBfUlRUX0ZST01fREFUQSkgJiYKLQkgICAgKG5ldC0+
bGFuX3R5cGUgPT0gU0NUUF9MQU5fVU5LTk9XTikpIHsKLQkJaWYgKG5ldC0+cnR0ID4gU0NUUF9M
T0NBTF9MQU5fUlRUKSB7Ci0JCQluZXQtPmxhbl90eXBlID0gU0NUUF9MQU5fSU5URVJORVQ7Ci0J
CX0gZWxzZSB7Ci0JCQluZXQtPmxhbl90eXBlID0gU0NUUF9MQU5fTE9DQUw7Ci0JCX0KLQl9Ci0K
LQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIDIuIHVwZGF0ZSBSVFRWQVIgJiBT
UlRUICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKi0KLQkgKiBDb21wdXRl
IHRoZSBzY2FsZWQgYXZlcmFnZSBsYXN0c2EgYW5kIHRoZQotCSAqIHNjYWxlZCB2YXJpYW5jZSBs
YXN0c3YgYXMgZGVzY3JpYmVkIGluIHZhbiBKYWNvYnNvbgotCSAqIFBhcGVyICJDb25nZXN0aW9u
IEF2b2lkYW5jZSBhbmQgQ29udHJvbCIsIEFubmV4IEEuCi0JICoKLQkgKiAobmV0LT5sYXN0c2Eg
Pj4gU0NUUF9SVFRfU0hJRlQpIGlzIHRoZSBzcnR0Ci0JICogKG5ldC0+bGFzdHNhID4+IFNDVFBf
UlRUX1ZBUl9TSElGVCkgaXMgdGhlIHJ0dHZhcgotCSAqLwotCWlmIChuZXQtPlJUT19tZWFzdXJl
ZCkgewotCQlydHQgLT0gKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUKTsKLQkJbmV0LT5s
YXN0c2EgKz0gcnR0OwotCQlpZiAocnR0IDwgMCkgewotCQkJcnR0ID0gLXJ0dDsKLQkJfQotCQly
dHQgLT0gKG5ldC0+bGFzdHN2ID4+IFNDVFBfUlRUX1ZBUl9TSElGVCk7Ci0JCW5ldC0+bGFzdHN2
ICs9IHJ0dDsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfUlRUVkFSX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlydG9fbG9nZ2luZyhuZXQsIFNDVFBfTE9H
X1JUVFZBUik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGaXJzdCBSVE8gbWVhc3VybWVudCAqLwot
CQluZXQtPlJUT19tZWFzdXJlZCA9IDE7Ci0JCWZpcnN0X21lYXN1cmUgPSAxOwotCQluZXQtPmxh
c3RzYSA9IHJ0dCA8PCBTQ1RQX1JUVF9TSElGVDsKLQkJbmV0LT5sYXN0c3YgPSAocnR0IC8gMikg
PDwgU0NUUF9SVFRfVkFSX1NISUZUOwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9SVFRWQVJfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXJ0b19sb2dnaW5n
KG5ldCwgU0NUUF9MT0dfSU5JVElBTF9SVFQpOwotCQl9Ci0JfQotCWlmIChuZXQtPmxhc3RzdiA9
PSAwKSB7Ci0JCW5ldC0+bGFzdHN2ID0gU0NUUF9DTE9DS19HUkFOVUxBUklUWTsKLQl9Ci0JbmV3
X3J0byA9IChuZXQtPmxhc3RzYSA+PiBTQ1RQX1JUVF9TSElGVCkgKyBuZXQtPmxhc3RzdjsKLQlp
ZiAoKG5ld19ydG8gPiBTQ1RQX1NBVF9ORVRXT1JLX01JTikgJiYKLQkgICAgKHN0Y2ItPmFzb2Mu
c2F0X25ldHdvcmtfbG9ja291dCA9PSAwKSkgewotCQlzdGNiLT5hc29jLnNhdF9uZXR3b3JrID0g
MTsKLQl9IGVsc2UgaWYgKCghZmlyc3RfbWVhc3VyZSkgJiYgc3RjYi0+YXNvYy5zYXRfbmV0d29y
aykgewotCQlzdGNiLT5hc29jLnNhdF9uZXR3b3JrID0gMDsKLQkJc3RjYi0+YXNvYy5zYXRfbmV0
d29ya19sb2Nrb3V0ID0gMTsKLQl9Ci0JLyogYm91bmQgaXQsIHBlciBDNi9DNyBpbiBTZWN0aW9u
IDUuMy4xICovCi0JaWYgKG5ld19ydG8gPCBzdGNiLT5hc29jLm1pbnJ0bykgewotCQluZXdfcnRv
ID0gc3RjYi0+YXNvYy5taW5ydG87Ci0JfQotCWlmIChuZXdfcnRvID4gc3RjYi0+YXNvYy5tYXhy
dG8pIHsKLQkJbmV3X3J0byA9IHN0Y2ItPmFzb2MubWF4cnRvOwotCX0KLQkvKiB3ZSBhcmUgbm93
IHJldHVybmluZyB0aGUgUlRPICovCi0JcmV0dXJuIChuZXdfcnRvKTsKLX0KLQotLyoKLSAqIHJl
dHVybiBhIHBvaW50ZXIgdG8gYSBjb250aWd1b3VzIHBpZWNlIG9mIGRhdGEgZnJvbSB0aGUgZ2l2
ZW4gbWJ1ZiBjaGFpbgotICogc3RhcnRpbmcgYXQgJ29mZicgZm9yICdsZW4nIGJ5dGVzLiAgSWYg
dGhlIGRlc2lyZWQgcGllY2Ugc3BhbnMgbW9yZSB0aGFuCi0gKiBvbmUgbWJ1ZiwgYSBjb3B5IGlz
IG1hZGUgYXQgJ3B0cicuIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRoZSBidWZmZXIgc2l6ZQot
ICogaXMgPj0gJ2xlbicgcmV0dXJucyBOVUxMIGlmIHRoZXJlIHRoZXJlIGlzbid0ICdsZW4nIGJ5
dGVzIGluIHRoZSBjaGFpbi4KLSAqLwotY2FkZHJfdAotc2N0cF9tX2dldHB0cihzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IG9mZiwgaW50IGxlbiwgdWludDhfdCAqIGluX3B0cikKLXsKLQl1aW50MzJfdCBj
b3VudDsKLQl1aW50OF90ICpwdHI7Ci0KLQlwdHIgPSBpbl9wdHI7Ci0JaWYgKChvZmYgPCAwKSB8
fCAobGVuIDw9IDApKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JLyogZmluZCB0aGUgZGVzaXJlZCBz
dGFydCBsb2NhdGlvbiAqLwotCXdoaWxlICgobSAhPSBOVUxMKSAmJiAob2ZmID4gMCkpIHsKLQkJ
aWYgKG9mZiA8IFNDVFBfQlVGX0xFTihtKSkKLQkJCWJyZWFrOwotCQlvZmYgLT0gU0NUUF9CVUZf
TEVOKG0pOwotCQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQl9Ci0JaWYgKG0gPT0gTlVMTCkKLQkJ
cmV0dXJuIChOVUxMKTsKLQotCS8qIGlzIHRoZSBjdXJyZW50IG1idWYgbGFyZ2UgZW5vdWdoIChl
Zy4gY29udGlndW91cyk/ICovCi0JaWYgKChTQ1RQX0JVRl9MRU4obSkgLSBvZmYpID49IGxlbikg
ewotCQlyZXR1cm4gKG10b2QobSwgY2FkZHJfdCkgKyBvZmYpOwotCX0gZWxzZSB7Ci0JCS8qIGVs
c2UsIGl0IHNwYW5zIG1vcmUgdGhhbiBvbmUgbWJ1Ziwgc28gc2F2ZSBhIHRlbXAgY29weS4uLiAq
LwotCQl3aGlsZSAoKG0gIT0gTlVMTCkgJiYgKGxlbiA+IDApKSB7Ci0JCQljb3VudCA9IG1pbihT
Q1RQX0JVRl9MRU4obSkgLSBvZmYsIGxlbik7Ci0JCQltZW1jcHkocHRyLCBtdG9kKG0sIGNhZGRy
X3QpICsgb2ZmLCBjb3VudCk7Ci0JCQlsZW4gLT0gY291bnQ7Ci0JCQlwdHIgKz0gY291bnQ7Ci0J
CQlvZmYgPSAwOwotCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCX0KLQkJaWYgKChtID09IE5V
TEwpICYmIChsZW4gPiAwKSkKLQkJCXJldHVybiAoTlVMTCk7Ci0JCWVsc2UKLQkJCXJldHVybiAo
KGNhZGRyX3QpaW5fcHRyKTsKLQl9Ci19Ci0KLQotCi1zdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqCi1z
Y3RwX2dldF9uZXh0X3BhcmFtKHN0cnVjdCBtYnVmICptLAotICAgIGludCBvZmZzZXQsCi0gICAg
c3RydWN0IHNjdHBfcGFyYW1oZHIgKnB1bGwsCi0gICAgaW50IHB1bGxfbGltaXQpCi17Ci0JLyog
VGhpcyBqdXN0IHByb3ZpZGVzIGEgdHlwZWQgc2lnbmF0dXJlIHRvIFBldGVyJ3MgUHVsbCByb3V0
aW5lICovCi0JcmV0dXJuICgoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0s
IG9mZnNldCwgcHVsbF9saW1pdCwKLQkgICAgKHVpbnQ4X3QgKikgcHVsbCkpOwotfQotCi0KLXN0
cnVjdCBtYnVmICoKLXNjdHBfYWRkX3BhZF90b21idWYoc3RydWN0IG1idWYgKm0sIGludCBwYWRs
ZW4pCi17Ci0Jc3RydWN0IG1idWYgKm1fbGFzdDsKLQljYWRkcl90IGRwOwotCi0JaWYgKHBhZGxl
biA+IDMpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKHBhZGxlbiA8PSBNX1RSQUlMSU5H
U1BBQ0UobSkpIHsKLQkJLyoKLQkJICogVGhlIGVhc3kgd2F5LiBXZSBob3BlIHRoZSBtYWpvcml0
eSBvZiB0aGUgdGltZSB3ZSBoaXQKLQkJICogaGVyZSA6KQotCQkgKi8KLQkJbV9sYXN0ID0gbTsK
LQl9IGVsc2UgewotCQkvKiBIYXJkIHdheSB3ZSBtdXN0IGdyb3cgdGhlIG1idWYgY2hhaW4gKi8K
LQkJbV9sYXN0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHBhZGxlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOwotCQlpZiAobV9sYXN0ID09IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0J
CX0KLQkJU0NUUF9CVUZfTEVOKG1fbGFzdCkgPSAwOwotCQlTQ1RQX0JVRl9ORVhUKG1fbGFzdCkg
PSBOVUxMOwotCQlTQ1RQX0JVRl9ORVhUKG0pID0gbV9sYXN0OwotCX0KLQlkcCA9IG10b2QobV9s
YXN0LCBjYWRkcl90KSArIFNDVFBfQlVGX0xFTihtX2xhc3QpOwotCVNDVFBfQlVGX0xFTihtX2xh
c3QpICs9IHBhZGxlbjsKLQltZW1zZXQoZHAsIDAsIHBhZGxlbik7Ci0JcmV0dXJuIChtX2xhc3Qp
OwotfQotCi1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX3BhZF9sYXN0bWJ1ZihzdHJ1Y3QgbWJ1ZiAqbSwg
aW50IHBhZHZhbCwgc3RydWN0IG1idWYgKmxhc3RfbWJ1ZikKLXsKLQkvKiBmaW5kIHRoZSBsYXN0
IG1idWYgaW4gY2hhaW4gYW5kIHBhZCBpdCAqLwotCXN0cnVjdCBtYnVmICptX2F0OwotCi0JaWYg
KGxhc3RfbWJ1ZiAhPSBOVUxMKSB7Ci0JCXJldHVybiAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihsYXN0
X21idWYsIHBhZHZhbCkpOwotCX0gZWxzZSB7Ci0JCWZvciAobV9hdCA9IG07IG1fYXQ7IG1fYXQg
PSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCQlpZiAoU0NUUF9CVUZfTkVYVChtX2F0KSA9PSBO
VUxMKSB7Ci0JCQkJcmV0dXJuIChzY3RwX2FkZF9wYWRfdG9tYnVmKG1fYXQsIHBhZHZhbCkpOwot
CQkJfQotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX25v
dGlmeV9hc3NvY19jaGFuZ2UodWludDE2X3Qgc3RhdGUsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
LSAgICB1aW50MTZfdCBlcnJvciwgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKmFib3J0LCB1aW50
OF90IGZyb21fcGVlciwgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgot
ICAgICkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfY2hh
bmdlICpzYWM7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0JdW5zaWdu
ZWQgaW50IG5vdGlmX2xlbjsKLQl1aW50MTZfdCBhYm9ydF9sZW47Ci0JdW5zaWduZWQgaW50IGk7
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0Jc3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYKLQotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJ
cmV0dXJuOwotCX0KLQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwg
c3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCkpIHsKLQkJbm90aWZfbGVuID0gKHVu
c2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKLQkJaWYgKGFib3J0
ICE9IE5VTEwpIHsKLQkJCWFib3J0X2xlbiA9IG50b2hzKGFib3J0LT5jaC5jaHVua19sZW5ndGgp
OwotCQl9IGVsc2UgewotCQkJYWJvcnRfbGVuID0gMDsKLQkJfQotCQlpZiAoKHN0YXRlID09IFND
VFBfQ09NTV9VUCkgfHwgKHN0YXRlID09IFNDVFBfUkVTVEFSVCkpIHsKLQkJCW5vdGlmX2xlbiAr
PSBTQ1RQX0FTU09DX1NVUFBPUlRTX01BWDsKLQkJfSBlbHNlIGlmICgoc3RhdGUgPT0gU0NUUF9D
T01NX0xPU1QpIHx8IChzdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgewotCQkJbm90aWZf
bGVuICs9IGFib3J0X2xlbjsKLQkJfQotCQltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21z
Zyhub3RpZl9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJaWYgKG1fbm90aWZ5ID09
IE5VTEwpIHsKLQkJCS8qIFJldHJ5IHdpdGggc21hbGxlciB2YWx1ZS4gKi8KLQkJCW5vdGlmX2xl
biA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7Ci0JCQlt
X25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhub3RpZl9sZW4sIDAsIE1fTk9XQUlULCAx
LCBNVF9EQVRBKTsKLQkJCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7Ci0JCQkJZ290byBzZXRfZXJy
b3I7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOwotCQlzYWMg
PSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKik7Ci0JCW1lbXNldChz
YWMsIDAsIG5vdGlmX2xlbik7Ci0JCXNhYy0+c2FjX3R5cGUgPSBTQ1RQX0FTU09DX0NIQU5HRTsK
LQkJc2FjLT5zYWNfZmxhZ3MgPSAwOwotCQlzYWMtPnNhY19sZW5ndGggPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNzb2NfY2hhbmdlKTsKLQkJc2FjLT5zYWNfc3RhdGUgPSBzdGF0ZTsKLQkJc2FjLT5z
YWNfZXJyb3IgPSBlcnJvcjsKLQkJLyogWFhYIHZlcmlmeSB0aGVzZSBzdHJlYW0gY291bnRzICov
Ci0JCXNhYy0+c2FjX291dGJvdW5kX3N0cmVhbXMgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsK
LQkJc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zID0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsKLQkJ
c2FjLT5zYWNfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlpZiAobm90aWZf
bGVuID4gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSkpIHsKLQkJCWlmICgoc3RhdGUg
PT0gU0NUUF9DT01NX1VQKSB8fCAoc3RhdGUgPT0gU0NUUF9SRVNUQVJUKSkgewotCQkJCWkgPSAw
OwotCQkJCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkgewotCQkJCQlzYWMt
PnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSOwotCQkJCX0KLQkJCQlpZiAo
c3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCQkJCXNhYy0+c2FjX2luZm9baSsr
XSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVUSDsKLQkJCQl9Ci0JCQkJaWYgKHN0Y2ItPmFzb2Mu
YXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCQkJCXNhYy0+c2FjX2luZm9baSsrXSA9IFNDVFBf
QVNTT0NfU1VQUE9SVFNfQVNDT05GOwotCQkJCX0KLQkJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9z
dXBwb3J0ZWQgPT0gMSkgewotCQkJCQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NV
UFBPUlRTX0lOVEVSTEVBVklORzsKLQkJCQl9Ci0JCQkJc2FjLT5zYWNfaW5mb1tpKytdID0gU0NU
UF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRjsKLQkJCQlpZiAoc3RjYi0+YXNvYy5yZWNvbmZpZ19z
dXBwb3J0ZWQgPT0gMSkgewotCQkJCQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NV
UFBPUlRTX1JFX0NPTkZJRzsKLQkJCQl9Ci0JCQkJc2FjLT5zYWNfbGVuZ3RoICs9IGk7Ci0JCQl9
IGVsc2UgaWYgKChzdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkgfHwgKHN0YXRlID09IFNDVFBfQ0FO
VF9TVFJfQVNTT0MpKSB7Ci0JCQkJbWVtY3B5KHNhYy0+c2FjX2luZm8sIGFib3J0LCBhYm9ydF9s
ZW4pOwotCQkJCXNhYy0+c2FjX2xlbmd0aCArPSBhYm9ydF9sZW47Ci0JCQl9Ci0JCX0KLQkJU0NU
UF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNhYy0+c2FjX2xlbmd0aDsKLQkJY29udHJvbCA9IHNjdHBf
YnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRl
eHQsIDAsIDAsIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5
KTsKLQkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgewotCQkJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9C
VUZfTEVOKG1fbm90aWZ5KTsKLQkJCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElP
TjsKLQkJCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwotCQkJY29udHJvbC0+dGFpbF9tYnVm
ID0gbV9ub3RpZnk7Ci0JCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAot
CQkJICAgICAgICAgICAgICAgICAgY29udHJvbCwKLQkJCSAgICAgICAgICAgICAgICAgICZzdGNi
LT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKLQkJCSAg
ICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX21fZnJlZW0o
bV9ub3RpZnkpOwotCQl9Ci0JfQotCS8qCi0JICogRm9yIDEtdG8tMSBzdHlsZSBzb2NrZXRzLCB3
ZSBzZW5kIHVwIGFuZCBlcnJvciB3aGVuIGFuIEFCT1JUCi0JICogY29tZXMgaW4uCi0JICovCi1z
ZXRfZXJyb3I6Ci0JaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8Ci0JICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgotCSAgICAoKHN0YXRlID09IFNDVFBfQ09NTV9MT1NU
KSB8fCAoc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpKSB7Ci0JCVNPQ0tfTE9DSyhzdGNi
LT5zY3RwX3NvY2tldCk7Ci0JCWlmIChmcm9tX3BlZXIpIHsKLQkJCWlmIChTQ1RQX0dFVF9TVEFU
RSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgewotCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQ09OTlJF
RlVTRUQpOwotCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19lcnJvciA9IEVDT05OUkVGVVNFRDsK
LQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUFVUSUwsIEVDT05OUkVTRVQpOwotCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5z
b19lcnJvciA9IEVDT05OUkVTRVQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKFNDVFBfR0VU
X1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAotCQkJICAg
IChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VE
KSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFVElNRURPVVQpOwotCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19lcnJvciA9
IEVUSU1FRE9VVDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBz
dGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVDT05OQUJPUlRFRCk7Ci0JCQkJc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX2Vycm9yID0gRUNPTk5BQk9SVEVEOwotCQkJfQotCQl9Ci0JCVNPQ0tf
VU5MT0NLKHN0Y2ItPnNjdHBfc29ja2V0KTsKLQl9Ci0JLyogV2FrZSBBTlkgc2xlZXBlcnMgKi8K
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
LQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCWlmICghc29fbG9ja2VkKSB7Ci0J
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3Rj
Yik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCVNDVFBf
U09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0jZW5kaWYKLQlpZiAo
KChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
LQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkpICYmCi0JICAgICgoc3RhdGUgPT0gU0NUUF9DT01NX0xPU1QpIHx8IChzdGF0ZSA9PSBT
Q1RQX0NBTlRfU1RSX0FTU09DKSkpIHsKLQkJc29jYW50cmN2bW9yZShzdGNiLT5zY3RwX3NvY2tl
dCk7Ci0JfQotCXNvcndha2V1cChzdGNiLT5zY3RwX3NvY2tldCk7Ci0Jc293d2FrZXVwKHN0Y2It
PnNjdHBfc29ja2V0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKLQlpZiAoIXNvX2xvY2tlZCkgewotCQlTQ1RQX1NPQ0tFVF9VTkxPQ0so
c28sIDEpOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9ub3RpZnlfcGVlcl9h
ZGRyX2NoYW5nZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHN0YXRlLAotICAgIHN0
cnVjdCBzb2NrYWRkciAqc2EsIHVpbnQzMl90IGVycm9yLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBT
Q1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0Jc3RydWN0IG1idWYgKm1fbm90aWZ5OwotCXN0cnVj
dCBzY3RwX3BhZGRyX2NoYW5nZSAqc3BjOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpj
b250cm9sOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgIHNjdHBfc3RjYl9pc19mZWF0
dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5U
KSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCW1fbm90aWZ5
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2Up
LCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKG1fbm90aWZ5ID09IE5VTEwpCi0JCXJl
dHVybjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlzcGMgPSBtdG9kKG1fbm90aWZ5
LCBzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKik7Ci0JbWVtc2V0KHNwYywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSkpOwotCXNwYy0+c3BjX3R5cGUgPSBTQ1RQX1BFRVJfQURE
Ul9DSEFOR0U7Ci0Jc3BjLT5zcGNfZmxhZ3MgPSAwOwotCXNwYy0+c3BjX2xlbmd0aCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpOwotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0jaWZkZWYgSU5FVDYKLQkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQp
KSB7Ci0JCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYSwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3BjLT5zcGNfYWFk
ZHIpOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KCZzcGMtPnNwY19hYWRkciwgc2EsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJfQotI2Vsc2UKLQkJbWVtY3B5KCZzcGMtPnNwY19hYWRk
ciwgc2EsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSNlbmRpZgotCQlicmVhazsKLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0jaWZkZWYgU0NUUF9FTUJF
RERFRF9WNl9TQ09QRQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmIC8qIFND
VFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJbWVtY3B5KCZzcGMtPnNwY19hYWRkciwgc2EsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0KLSNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1ND
T1BFCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGMtPnNwY19hYWRkcjsKLQkJ
aWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCWlmIChz
aW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKLQkJCQkvKiByZWNvdmVyIHNjb3BlX2lkIGZvciB1
c2VyICovCi0jaWZkZWYgU0NUUF9LQU1FCi0JCQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42
KTsKLSNlbHNlCi0JCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9h
ZGRyLAotCQkJCQkJICAgICAgIE5VTEwpOwotI2VuZGlmCi0JCQl9IGVsc2UgewotCQkJCS8qIGNs
ZWFyIGVtYmVkZGVkIHNjb3BlX2lkIGZvciB1c2VyICovCi0JCQkJaW42X2NsZWFyc2NvcGUoJnNp
bjYtPnNpbjZfYWRkcik7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1ND
T1BFICovCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQljYXNlIEFGX0NPTk46Ci0JCW1lbWNweSgmc3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBU
U05IICovCi0JCWJyZWFrOwotCX0KLQlzcGMtPnNwY19zdGF0ZSA9IHN0YXRlOwotCXNwYy0+c3Bj
X2Vycm9yID0gZXJyb3I7Ci0Jc3BjLT5zcGNfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0
Y2IpOwotCi0JU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRk
cl9jaGFuZ2UpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQotCS8qIGFwcGVu
ZCB0byBzb2NrZXQgKi8KLQljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAotCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKLQlpZiAoY29udHJvbCA9PSBOVUxMKSB7
Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOwotCQlyZXR1cm47
Ci0JfQotCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7Ci0JY29udHJv
bC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOwotCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhp
cyAqLwotCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OwotCXNjdHBfYWRkX3RvX3JlYWRx
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JICAgICAgICAgICAgICAgICAgY29udHJvbCwKLQkgICAg
ICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKLQkgICAgICAgICAg
ICAgICAgICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKLQkgICAgICAgICAgICAgICAgICBzb19s
b2NrZWQpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9zZW5kX2ZhaWxlZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3Qgc2VudCwgdWludDMyX3QgZXJyb3IsCi0gICAgc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNF
RAotI2VuZGlmCi0gICAgKQotewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZCAqc3NmOwotCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICpzc2Zl
OwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOwotCXN0cnVjdCBzY3RwX2No
dW5raGRyICpjaGtoZHI7Ci0JaW50IG5vdGlmaGRyX2xlbiwgY2hrX2xlbiwgY2hraGRyX2xlbiwg
cGFkZGluZ19sZW4sIHBheWxvYWRfbGVuOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAg
IChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0Jf
RkxBR1NfUkVDVlNFTkRGQUlMRVZOVCkgJiYKLQkgICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29m
ZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCkp
KSB7Ci0JCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCi0JCXJldHVybjsKLQl9Ci0KLQlpZiAoc2N0
cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVk5TRU5ERkFJTEVWTlQpKSB7Ci0JCW5vdGlmaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZF9ldmVudCk7Ci0JfSBlbHNlIHsKLQkJbm90aWZoZHJfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKTsKLQl9Ci0JbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2cobm90aWZoZHJfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKG1f
bm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJcmV0dXJuOwotCVNDVFBf
QlVGX0xFTihtX25vdGlmeSkgPSBub3RpZmhkcl9sZW47Ci0JaWYgKHN0Y2ItPmFzb2MuaWRhdGFf
c3VwcG9ydGVkKSB7Ci0JCWNoa2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1
bmspOwotCX0gZWxzZSB7Ci0JCWNoa2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9j
aHVuayk7Ci0JfQotCS8qIFVzZSBzb21lIGRlZmF1bHRzIGluIGNhc2Ugd2UgY2FuJ3QgYWNjZXNz
IHRoZSBjaHVuayBoZWFkZXIgKi8KLQlpZiAoY2hrLT5zZW5kX3NpemUgPj0gY2hraGRyX2xlbikg
ewotCQlwYXlsb2FkX2xlbiA9IGNoay0+c2VuZF9zaXplIC0gY2hraGRyX2xlbjsKLQl9IGVsc2Ug
ewotCQlwYXlsb2FkX2xlbiA9IDA7Ci0JfQotCXBhZGRpbmdfbGVuID0gMDsKLQlpZiAoY2hrLT5k
YXRhICE9IE5VTEwpIHsKLQkJY2hraGRyID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2No
dW5raGRyICopOwotCQlpZiAoY2hraGRyICE9IE5VTEwpIHsKLQkJCWNoa19sZW4gPSBudG9ocyhj
aGtoZHItPmNodW5rX2xlbmd0aCk7Ci0JCQlpZiAoKGNoa19sZW4gPj0gY2hraGRyX2xlbikgJiYK
LQkJCSAgICAoY2hrLT5zZW5kX3NpemUgPj0gY2hrX2xlbikgJiYKLQkJCSAgICAoY2hrLT5zZW5k
X3NpemUgLSBjaGtfbGVuIDwgNCkpIHsKLQkJCQlwYWRkaW5nX2xlbiA9IGNoay0+c2VuZF9zaXpl
IC0gY2hrX2xlbjsKLQkJCQlwYXlsb2FkX2xlbiA9IGNoay0+c2VuZF9zaXplIC0gY2hraGRyX2xl
biAtIHBhZGRpbmdfbGVuOwotCQkJfQotCQl9Ci0JfQotCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZO
VCkpIHsKLQkJc3NmZSA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2
ZW50ICopOwotCQltZW1zZXQoc3NmZSwgMCwgbm90aWZoZHJfbGVuKTsKLQkJc3NmZS0+c3NmZV90
eXBlID0gU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDsKLQkJaWYgKHNlbnQpIHsKLQkJCXNzZmUtPnNz
ZmVfZmxhZ3MgPSBTQ1RQX0RBVEFfU0VOVDsKLQkJfSBlbHNlIHsKLQkJCXNzZmUtPnNzZmVfZmxh
Z3MgPSBTQ1RQX0RBVEFfVU5TRU5UOwotCQl9Ci0JCXNzZmUtPnNzZmVfbGVuZ3RoID0gKHVpbnQz
Ml90KShub3RpZmhkcl9sZW4gKyBwYXlsb2FkX2xlbik7Ci0JCXNzZmUtPnNzZmVfZXJyb3IgPSBl
cnJvcjsKLQkJLyogbm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxk
IGJlIGNsb3NlIDopICovCi0JCXNzZmUtPnNzZmVfaW5mby5zbmRfc2lkID0gY2hrLT5yZWMuZGF0
YS5zaWQ7Ci0JCXNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJjdl9m
bGFnczsKLQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOwot
CQlzc2ZlLT5zc2ZlX2luZm8uc25kX2NvbnRleHQgPSBjaGstPnJlYy5kYXRhLmNvbnRleHQ7Ci0J
CXNzZmUtPnNzZmVfaW5mby5zbmRfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwot
CQlzc2ZlLT5zc2ZlX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQl9IGVsc2Ug
ewotCQlzc2YgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCAqKTsKLQkJ
bWVtc2V0KHNzZiwgMCwgbm90aWZoZHJfbGVuKTsKLQkJc3NmLT5zc2ZfdHlwZSA9IFNDVFBfU0VO
RF9GQUlMRUQ7Ci0JCWlmIChzZW50KSB7Ci0JCQlzc2YtPnNzZl9mbGFncyA9IFNDVFBfREFUQV9T
RU5UOwotCQl9IGVsc2UgewotCQkJc3NmLT5zc2ZfZmxhZ3MgPSBTQ1RQX0RBVEFfVU5TRU5UOwot
CQl9Ci0JCXNzZi0+c3NmX2xlbmd0aCA9ICh1aW50MzJfdCkobm90aWZoZHJfbGVuICsgcGF5bG9h
ZF9sZW4pOwotCQlzc2YtPnNzZl9lcnJvciA9IGVycm9yOwotCQkvKiBub3QgZXhhY3RseSB3aGF0
IHRoZSB1c2VyIHNlbnQgaW4sIGJ1dCBzaG91bGQgYmUgY2xvc2UgOikgKi8KLQkJc3NmLT5zc2Zf
aW5mby5zaW5mb19zdHJlYW0gPSBjaGstPnJlYy5kYXRhLnNpZDsKLQkJc3NmLT5zc2ZfaW5mby5z
aW5mb19zc24gPSAodWludDE2X3QpY2hrLT5yZWMuZGF0YS5taWQ7Ci0JCXNzZi0+c3NmX2luZm8u
c2luZm9fZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJjdl9mbGFnczsKLQkJc3NmLT5zc2ZfaW5mby5z
aW5mb19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOwotCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2Nv
bnRleHQgPSBjaGstPnJlYy5kYXRhLmNvbnRleHQ7Ci0JCXNzZi0+c3NmX2luZm8uc2luZm9fYXNz
b2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlzc2YtPnNzZl9hc3NvY19pZCA9IHNj
dHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JfQotCWlmIChjaGstPmRhdGEgIT0gTlVMTCkgewotCQkv
KiBUcmltIG9mZiB0aGUgc2N0cCBjaHVuayBoZWFkZXIgKGl0IHNob3VsZCBiZSB0aGVyZSkgKi8K
LQkJaWYgKGNoay0+c2VuZF9zaXplID09IGNoa2hkcl9sZW4gKyBwYXlsb2FkX2xlbiArIHBhZGRp
bmdfbGVuKSB7Ci0JCQltX2FkaihjaGstPmRhdGEsIGNoa2hkcl9sZW4pOwotCQkJbV9hZGooY2hr
LT5kYXRhLCAtcGFkZGluZ19sZW4pOwotCQkJc2N0cF9tYnVmX2NydXNoKGNoay0+ZGF0YSk7Ci0J
CQljaGstPnNlbmRfc2l6ZSAtPSAoY2hraGRyX2xlbiArIHBhZGRpbmdfbGVuKTsKLQkJfQotCX0K
LQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IGNoay0+ZGF0YTsKLQkvKiBTdGVhbCBvZmYgdGhl
IG1idWYgKi8KLQljaGstPmRhdGEgPSBOVUxMOwotCS8qCi0JICogRm9yIHRoaXMgY2FzZSwgd2Ug
Y2hlY2sgdGhlIGFjdHVhbCBzb2NrZXQgYnVmZmVyLCBzaW5jZSB0aGUgYXNzb2MKLQkgKiBpcyBn
b2luZyBhd2F5IHdlIGRvbid0IHdhbnQgdG8gb3ZlcmZpbGwgdGhlIHNvY2tldCBidWZmZXIgZm9y
IGEKLQkgKiBub24tcmVhZGVyCi0JICovCi0JaWYgKHNjdHBfc2JzcGFjZV9mYWlsZWRtc2dzKCZz
dGNiLT5zY3RwX3NvY2tldC0+c29fcmN2KSA8IFNDVFBfQlVGX0xFTihtX25vdGlmeSkpIHsKLQkJ
c2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQkvKiBhcHBlbmQgdG8gc29j
a2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0gTlVMTCkgewotCQkvKiBu
byBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQlj
b250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwotCWNvbnRyb2wtPnNwZWNf
ZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KLQlj
b250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5z
Y3RwX2VwLCBzdGNiLAotCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCi0JICAgICAgICAgICAg
ICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCi0JICAgICAgICAgICAgICAgICAg
U0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsCi0JICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKTsK
LX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQyKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDMyX3QgZXJyb3IsCi0JCQkgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVl
X3BlbmRpbmcgKnNwLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX1VOVVNFRAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgKQotewotCXN0cnVj
dCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCAqc3NmOwotCXN0cnVj
dCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICpzc2ZlOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkICpjb250cm9sOwotCWludCBub3RpZmhkcl9sZW47Ci0KLQlpZiAoKHN0Y2IgPT0gTlVMTCkg
fHwKLQkgICAgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKSAmJgotCSAgICAgc2N0cF9zdGNiX2lzX2Zl
YXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZB
SUxFVk5UKSkpIHsKLQkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KLQkJcmV0dXJuOwotCX0KLQlp
ZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0Jf
RkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQpKSB7Ci0JCW5vdGlmaGRyX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCk7Ci0JfSBlbHNlIHsKLQkJbm90aWZoZHJfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKTsKLQl9Ci0JbV9ub3RpZnkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2cobm90aWZoZHJfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0J
aWYgKG1fbm90aWZ5ID09IE5VTEwpIHsKLQkJLyogbm8gc3BhY2UgbGVmdCAqLwotCQlyZXR1cm47
Ci0JfQotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBub3RpZmhkcl9sZW47Ci0JaWYgKHNjdHBf
c3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JF
Q1ZOU0VOREZBSUxFVk5UKSkgewotCQlzc2ZlID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBf
c2VuZF9mYWlsZWRfZXZlbnQgKik7Ci0JCW1lbXNldChzc2ZlLCAwLCBub3RpZmhkcl9sZW4pOwot
CQlzc2ZlLT5zc2ZlX3R5cGUgPSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UOwotCQlzc2ZlLT5zc2Zl
X2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKLQkJc3NmZS0+c3NmZV9sZW5ndGggPSAodWludDMy
X3QpKG5vdGlmaGRyX2xlbiArIHNwLT5sZW5ndGgpOwotCQlzc2ZlLT5zc2ZlX2Vycm9yID0gZXJy
b3I7Ci0JCS8qIG5vdCBleGFjdGx5IHdoYXQgdGhlIHVzZXIgc2VudCBpbiwgYnV0IHNob3VsZCBi
ZSBjbG9zZSA6KSAqLwotCQlzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCA9IHNwLT5zaWQ7Ci0JCWlm
IChzcC0+c29tZV90YWtlbikgewotCQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncyA9IFNDVFBf
REFUQV9MQVNUX0ZSQUc7Ci0JCX0gZWxzZSB7Ci0JCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdz
ID0gU0NUUF9EQVRBX05PVF9GUkFHOwotCQl9Ci0JCXNzZmUtPnNzZmVfaW5mby5zbmRfcHBpZCA9
IHNwLT5wcGlkOwotCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2NvbnRleHQgPSBzcC0+Y29udGV4dDsK
LQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7
Ci0JCXNzZmUtPnNzZmVfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCX0gZWxz
ZSB7Ci0JCXNzZiA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkICopOwot
CQltZW1zZXQoc3NmLCAwLCBub3RpZmhkcl9sZW4pOwotCQlzc2YtPnNzZl90eXBlID0gU0NUUF9T
RU5EX0ZBSUxFRDsKLQkJc3NmLT5zc2ZfZmxhZ3MgPSBTQ1RQX0RBVEFfVU5TRU5UOwotCQlzc2Yt
PnNzZl9sZW5ndGggPSAodWludDMyX3QpKG5vdGlmaGRyX2xlbiArIHNwLT5sZW5ndGgpOwotCQlz
c2YtPnNzZl9lcnJvciA9IGVycm9yOwotCQkvKiBub3QgZXhhY3RseSB3aGF0IHRoZSB1c2VyIHNl
bnQgaW4sIGJ1dCBzaG91bGQgYmUgY2xvc2UgOikgKi8KLQkJc3NmLT5zc2ZfaW5mby5zaW5mb19z
dHJlYW0gPSBzcC0+c2lkOwotCQlzc2YtPnNzZl9pbmZvLnNpbmZvX3NzbiA9IDA7Ci0JCWlmIChz
cC0+c29tZV90YWtlbikgewotCQkJc3NmLT5zc2ZfaW5mby5zaW5mb19mbGFncyA9IFNDVFBfREFU
QV9MQVNUX0ZSQUc7Ci0JCX0gZWxzZSB7Ci0JCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0g
U0NUUF9EQVRBX05PVF9GUkFHOwotCQl9Ci0JCXNzZi0+c3NmX2luZm8uc2luZm9fcHBpZCA9IHNw
LT5wcGlkOwotCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2NvbnRleHQgPSBzcC0+Y29udGV4dDsKLQkJ
c3NmLT5zc2ZfaW5mby5zaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0J
CXNzZi0+c3NmX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQl9Ci0JU0NUUF9C
VUZfTkVYVChtX25vdGlmeSkgPSBzcC0+ZGF0YTsKLQotCS8qIFN0ZWFsIG9mZiB0aGUgbWJ1ZiAq
LwotCXNwLT5kYXRhID0gTlVMTDsKLQkvKgotCSAqIEZvciB0aGlzIGNhc2UsIHdlIGNoZWNrIHRo
ZSBhY3R1YWwgc29ja2V0IGJ1ZmZlciwgc2luY2UgdGhlIGFzc29jCi0JICogaXMgZ29pbmcgYXdh
eSB3ZSBkb24ndCB3YW50IHRvIG92ZXJmaWxsIHRoZSBzb2NrZXQgYnVmZmVyIGZvciBhCi0JICog
bm9uLXJlYWRlcgotCSAqLwotCWlmIChzY3RwX3Nic3BhY2VfZmFpbGVkbXNncygmc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpKSB7Ci0JCXNjdHBfbV9m
cmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogYXBwZW5kIHRvIHNvY2tldCAqLwot
CWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBz
dGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ub3RpZnkpOwotCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5
ICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+
bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0g
TV9OT1RJRklDQVRJT047Ci0JLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+
dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0Jc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwg
c3RjYiwKLQkgICAgY29udHJvbCwKLQkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEs
IFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBzb19sb2NrZWQpOwotfQotCi0KLQotc3RhdGljIHZv
aWQKLXNjdHBfbm90aWZ5X2FkYXB0YXRpb25fbGF5ZXIoc3RydWN0IHNjdHBfdGNiICpzdGNiKQot
ewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50
ICpzYWk7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0KLQlpZiAoKHN0
Y2IgPT0gTlVMTCkgfHwKLQkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKSkgewotCQkvKiBldmVudCBu
b3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50KSwgMCwgTV9OT1dBSVQs
IDEsIE1UX0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKQotCQkvKiBubyBzcGFjZSBsZWZ0
ICovCi0JCXJldHVybjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlzYWkgPSBtdG9k
KG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50ICopOwotCW1lbXNldChzYWks
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50KSk7Ci0Jc2FpLT5zYWlfdHlw
ZSA9IFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOwotCXNhaS0+c2FpX2ZsYWdzID0gMDsKLQlz
YWktPnNhaV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCk7Ci0J
c2FpLT5zYWlfYWRhcHRhdGlvbl9pbmQgPSBzdGNiLT5hc29jLnBlZXJzX2FkYXB0YXRpb247Ci0J
c2FpLT5zYWlfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCi0JU0NUUF9CVUZf
TEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50KTsKLQlT
Q1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0KLQkvKiBhcHBlbmQgdG8gc29ja2V0ICov
Ci0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
IHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0gTlVMTCkgewotCQkvKiBubyBtZW1v
cnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQljb250cm9s
LT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwotCWNvbnRyb2wtPnNwZWNfZmxhZ3Mg
PSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KLQljb250cm9s
LT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2Vw
LCBzdGNiLAotCSAgICBjb250cm9sLAotCSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdiwg
MSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci19Ci0KLS8q
IFRoaXMgYWx3YXlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHJlYWQtcXVldWUgTE9DS0VEIGlu
IHRoZSBJTlAgKi8KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9wYXJ0aWFsX2RlbGl2ZXJ5X2lu
ZGljYXRpb24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBlcnJvciwKLQkJCQkJdWlu
dDMyX3QgdmFsLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3RydWN0IHNjdHBfcGRhcGlfZXZl
bnQgKnBkYXBpOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOwotCXN0cnVj
dCBzb2NrYnVmICpzYjsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fAotCSAgICBzY3RwX3N0Y2Jf
aXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUERBUElF
Vk5UKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0NBTlRfUkVB
RCkgewotCQlyZXR1cm47Ci0JfQotCi0JbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
c2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEp
OwotCWlmIChtX25vdGlmeSA9PSBOVUxMKQotCQkvKiBubyBzcGFjZSBsZWZ0ICovCi0JCXJldHVy
bjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlwZGFwaSA9IG10b2QobV9ub3RpZnks
IHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50ICopOwotCW1lbXNldChwZGFwaSwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSk7Ci0JcGRhcGktPnBkYXBpX3R5cGUgPSBTQ1RQX1BBUlRJ
QUxfREVMSVZFUllfRVZFTlQ7Ci0JcGRhcGktPnBkYXBpX2ZsYWdzID0gMDsKLQlwZGFwaS0+cGRh
cGlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KTsKLQlwZGFwaS0+cGRh
cGlfaW5kaWNhdGlvbiA9IGVycm9yOwotCXBkYXBpLT5wZGFwaV9zdHJlYW0gPSAodmFsID4+IDE2
KTsKLQlwZGFwaS0+cGRhcGlfc2VxID0gKHZhbCAmIDB4MDAwMGZmZmYpOwotCXBkYXBpLT5wZGFw
aV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9u
b3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KTsKLQlTQ1RQX0JVRl9ORVhU
KG1fbm90aWZ5KSA9IE5VTEw7Ci0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3Rj
Yiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCQkJCQkgMCwgMCwgc3RjYi0+YXNv
Yy5jb250ZXh0LCAwLCAwLCAwLAotCQkJCQkgbV9ub3RpZnkpOwotCWlmIChjb250cm9sID09IE5V
TEwpIHsKLQkJLyogbm8gbWVtb3J5ICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJl
dHVybjsKLQl9Ci0JY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQlj
b250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047Ci0JLyogbm90IHRoYXQgd2UgbmVl
ZCB0aGlzICovCi0JY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0Jc2IgPSAmc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX3JjdjsKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX3NibG9nKHNiLCBjb250
cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFMTE9DLCBTQ1RQX0JV
Rl9MRU4obV9ub3RpZnkpKTsKLQl9Ci0Jc2N0cF9zYmFsbG9jKHN0Y2IsIHNiLCBtX25vdGlmeSk7
Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9H
R0lOR19FTkFCTEUpIHsKLQkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNi
P05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCX0KLQljb250cm9sLT5lbmRfYWRk
ZWQgPSAxOwotCWlmIChzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkpCi0JCVRBSUxRX0lOU0VSVF9B
RlRFUigmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgc3RjYi0+YXNvYy5jb250cm9sX3BkYXBp
LCAgY29udHJvbCwgbmV4dCk7Ci0JZWxzZSB7Ci0JCS8qIHdlIHJlYWxseSBzaG91bGQgbm90IHNl
ZSB0aGlzIGNhc2UgKi8KLQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPnNjdHBfZXAtPnJlYWRf
cXVldWUsIGNvbnRyb2wsIG5leHQpOwotCX0KLQlpZiAoc3RjYi0+c2N0cF9lcCAmJiBzdGNiLT5z
Y3RwX3NvY2tldCkgewotCQkvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgdGhlIGNhc2UgKi8KLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJ
c3RydWN0IHNvY2tldCAqc287Ci0KLQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsK
LQkJaWYgKCFzb19sb2NrZWQpIHsKLQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNv
LCAxKTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCAxKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlzY3RwX3Nvcndha2V1cChz
dGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWlmICghc29fbG9ja2VkKSB7Ci0J
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotCQl9Ci0jZW5kaWYKLQl9Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zY3RwX25vdGlmeV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ip
Ci17Ci0Jc3RydWN0IG1idWYgKm1fbm90aWZ5OwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50
ICpzc2U7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0KLQkvKgotCSAq
IEZvciBUQ1AgbW9kZWwgQU5EIFVEUCBjb25uZWN0ZWQgc29ja2V0cyB3ZSB3aWxsIHNlbmQgYW4g
ZXJyb3IgdXAKLQkgKiB3aGVuIGFuIFNIVVRET1dOIGNvbXBsZXRlcwotCSAqLwotCWlmICgoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JICAg
IChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkp
IHsKLQkJLyogbWFyayBzb2NrZXQgY2xvc2VkIGZvciByZWFkL3dyaXRlIGFuZCB3YWtldXAhICov
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0JCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9l
cCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xP
Q0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
LQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJ
CVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQlz
b2NhbnRzZW5kbW9yZShzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhz
bywgMSk7Ci0jZW5kaWYKLQl9Ci0JaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UKSkgewotCQkvKiBl
dmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JbV9ub3RpZnkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KSwgMCwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKQotCQkvKiBubyBzcGFj
ZSBsZWZ0ICovCi0JCXJldHVybjsKLQlzc2UgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9ldmVudCAqKTsKLQltZW1zZXQoc3NlLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc2h1
dGRvd25fZXZlbnQpKTsKLQlzc2UtPnNzZV90eXBlID0gU0NUUF9TSFVURE9XTl9FVkVOVDsKLQlz
c2UtPnNzZV9mbGFncyA9IDA7Ci0Jc3NlLT5zc2VfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NodXRkb3duX2V2ZW50KTsKLQlzc2UtPnNzZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
c3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3No
dXRkb3duX2V2ZW50KTsKLQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0KLQkvKiBh
cHBlbmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3Rj
Yiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0gTlVM
TCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0
dXJuOwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwotCWNv
bnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBuZWVk
IHRoaXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICBjb250cm9sLAotCSAgICAmc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9zZW5kZXJfZHJ5X2V2ZW50
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfVU5VU0VECi0j
ZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotewotCXN0cnVjdCBtYnVmICpt
X25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICpldmVudDsKLQlzdHJ1Y3Qg
c2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fAot
CSAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9Q
Q0JfRkxBR1NfRFJZRVZOVCkpIHsKLQkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KLQkJcmV0dXJu
OwotCX0KLQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qg
c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmICht
X25vdGlmeSA9PSBOVUxMKSB7Ci0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJcmV0dXJuOwotCX0K
LQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlldmVudCA9IG10b2QobV9ub3RpZnksIHN0
cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgKik7Ci0JbWVtc2V0KGV2ZW50LCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCkpOwotCWV2ZW50LT5zZW5kZXJfZHJ5X3R5cGUg
PSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ7Ci0JZXZlbnQtPnNlbmRlcl9kcnlfZmxhZ3MgPSAwOwot
CWV2ZW50LT5zZW5kZXJfZHJ5X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5
X2V2ZW50KTsKLQlldmVudC0+c2VuZGVyX2RyeV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
c3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3Nl
bmRlcl9kcnlfZXZlbnQpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQotCS8q
IGFwcGVuZCB0byBzb2NrZXQgKi8KLQljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShz
dGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKLQlpZiAoY29udHJvbCA9PSBO
VUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOwotCQly
ZXR1cm47Ci0JfQotCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7Ci0J
Y29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOwotCS8qIG5vdCB0aGF0IHdlIG5l
ZWQgdGhpcyAqLwotCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OwotCXNjdHBfYWRkX3Rv
X3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCi0JICAgICAgICAgICAgICAgICAg
JnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBz
b19sb2NrZWQpOwotfQotCi0KLXZvaWQKLXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBudW1iZXJpbiwgdWludDE2X3QgbnVtYmVyb3V0
LCBpbnQgZmxhZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3RydWN0IHNjdHBfcXVl
dWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCAq
c3RyYWRkOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgIChzY3RwX3N0Y2JfaXNfZmVh
dHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX0NIQU5H
RUVWTlQpKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCWlm
ICgoc3RjYi0+YXNvYy5wZWVyX3JlcV9vdXQpICYmIGZsYWcpIHsKLQkJLyogUGVlciBtYWRlIHRo
ZSByZXF1ZXN0LCBkb24ndCB0ZWxsIHRoZSBsb2NhbCB1c2VyICovCi0JCXN0Y2ItPmFzb2MucGVl
cl9yZXFfb3V0ID0gMDsKLQkJcmV0dXJuOwotCX0KLQlzdGNiLT5hc29jLnBlZXJfcmVxX291dCA9
IDA7Ci0JbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3Rw
X3N0cmVhbV9jaGFuZ2VfZXZlbnQpLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKG1f
bm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJcmV0dXJuOwotCVNDVFBf
QlVGX0xFTihtX25vdGlmeSkgPSAwOwotCXN0cmFkZCA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBz
Y3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgKik7Ci0JbWVtc2V0KHN0cmFkZCwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpKTsKLQlzdHJhZGQtPnN0cmNoYW5nZV90eXBl
ID0gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOwotCXN0cmFkZC0+c3RyY2hhbmdlX2ZsYWdzID0g
ZmxhZzsKLQlzdHJhZGQtPnN0cmNoYW5nZV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
ZWFtX2NoYW5nZV9ldmVudCk7Ci0Jc3RyYWRkLT5zdHJjaGFuZ2VfYXNzb2NfaWQgPSBzY3RwX2dl
dF9hc3NvY2lkKHN0Y2IpOwotCXN0cmFkZC0+c3RyY2hhbmdlX2luc3RybXMgPSBudW1iZXJpbjsK
LQlzdHJhZGQtPnN0cmNoYW5nZV9vdXRzdHJtcyA9IG51bWJlcm91dDsKLQlTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpOwotCVND
VFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQlpZiAoc2N0cF9zYnNwYWNlKCZzdGNiLT5h
c29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkp
KSB7Ci0JCS8qIG5vIHNwYWNlICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVy
bjsKLQl9Ci0JLyogYXBwZW5kIHRvIHNvY2tldCAqLwotCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3Jl
YWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAs
IDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOwotCWlmIChj
b250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5ICovCi0JCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1f
bm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047Ci0JLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0J
c2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkgICAgY29udHJvbCwKLQkg
ICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxE
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi12b2lkCi1zY3RwX25vdGlmeV9zdHJlYW1fcmVz
ZXRfdHNuKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgc2VuZGluZ190c24sIHVpbnQz
Ml90IHJlY3ZfdHNuLCBpbnQgZmxhZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3Ry
dWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfcmVz
ZXRfZXZlbnQgKnN0cmFzb2M7Ci0KLQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHNjdHBf
c3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19B
U1NPQ19SRVNFVEVWTlQpKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47
Ci0JfQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc3NvY19yZXNldF9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobV9u
b3RpZnkgPT0gTlVMTCkKLQkJLyogbm8gc3BhY2UgbGVmdCAqLwotCQlyZXR1cm47Ci0JU0NUUF9C
VUZfTEVOKG1fbm90aWZ5KSA9IDA7Ci0Jc3RyYXNvYyA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBz
Y3RwX2Fzc29jX3Jlc2V0X2V2ZW50ICAqKTsKLQltZW1zZXQoc3RyYXNvYywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50KSk7Ci0Jc3RyYXNvYy0+YXNzb2NyZXNldF90eXBl
ID0gU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDsKLQlzdHJhc29jLT5hc3NvY3Jlc2V0X2ZsYWdzID0g
ZmxhZzsKLQlzdHJhc29jLT5hc3NvY3Jlc2V0X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c3NvY19yZXNldF9ldmVudCk7Ci0Jc3RyYXNvYy0+YXNzb2NyZXNldF9hc3NvY19pZD0gc2N0cF9n
ZXRfYXNzb2NpZChzdGNiKTsKLQlzdHJhc29jLT5hc3NvY3Jlc2V0X2xvY2FsX3RzbiA9IHNlbmRp
bmdfdHNuOwotCXN0cmFzb2MtPmFzc29jcmVzZXRfcmVtb3RlX3RzbiA9IHJlY3ZfdHNuOwotCVND
VFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZl
bnQpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQlpZiAoc2N0cF9zYnNwYWNl
KCZzdGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpKSB7Ci0JCS8qIG5vIHNwYWNlICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7
Ci0JCXJldHVybjsKLQl9Ci0JLyogYXBwZW5kIHRvIHNvY2tldCAqLwotCWNvbnRyb2wgPSBzY3Rw
X2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwK
LQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRl
eHQsIDAsIDAsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkp
OwotCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5ICovCi0JCXNjdHBfbV9m
cmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+bGVuZ3RoID0gU0NUUF9C
VUZfTEVOKG1fbm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047
Ci0JLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+dGFpbF9tYnVmID0gbV9u
b3RpZnk7Ci0Jc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkgICAgY29u
dHJvbCwKLQkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NL
X05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi0KLQotc3RhdGljIHZvaWQKLXNj
dHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgaW50IG51
bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqIGxpc3QsIGludCBmbGFnKQotewotCXN0cnVjdCBtYnVm
ICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQlzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgKnN0cnJlc2V0OwotCWludCBsZW47Ci0KLQlpZiAo
KHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKSkpIHsKLQkJLyog
ZXZlbnQgbm90IGVuYWJsZWQgKi8KLQkJcmV0dXJuOwotCX0KLQotCW1fbm90aWZ5ID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYg
KG1fbm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJcmV0dXJuOwotCVND
VFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOwotCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfZXZlbnQpICsgKG51bWJlcl9lbnRyaWVzICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0J
aWYgKGxlbiA+IE1fVFJBSUxJTkdTUEFDRShtX25vdGlmeSkpIHsKLQkJLyogbmV2ZXIgZW5vdWdo
IHJvb20gKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQlzdHJy
ZXNldCA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCAqKTsK
LQltZW1zZXQoc3RycmVzZXQsIDAsIGxlbik7Ci0Jc3RycmVzZXQtPnN0cnJlc2V0X3R5cGUgPSBT
Q1RQX1NUUkVBTV9SRVNFVF9FVkVOVDsKLQlzdHJyZXNldC0+c3RycmVzZXRfZmxhZ3MgPSBmbGFn
OwotCXN0cnJlc2V0LT5zdHJyZXNldF9sZW5ndGggPSBsZW47Ci0Jc3RycmVzZXQtPnN0cnJlc2V0
X2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQlpZiAobnVtYmVyX2VudHJpZXMp
IHsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRyaWVzOyBpKyspIHsK
LQkJCXN0cnJlc2V0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSA9IG50b2hzKGxpc3RbaV0pOwot
CQl9Ci0JfQotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBsZW47Ci0JU0NUUF9CVUZfTkVYVCht
X25vdGlmeSkgPSBOVUxMOwotCWlmIChzY3RwX3Nic3BhY2UoJnN0Y2ItPmFzb2MsICZzdGNiLT5z
Y3RwX3NvY2tldC0+c29fcmN2KSA8IFNDVFBfQlVGX0xFTihtX25vdGlmeSkpIHsKLQkJLyogbm8g
c3BhY2UgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQkvKiBh
cHBlbmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3Rj
Yiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0gTlVM
TCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0
dXJuOwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwotCWNv
bnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBuZWVk
IHRoaXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCi0J
ICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi0KLXN0YXRpYyB2b2lk
Ci1zY3RwX25vdGlmeV9yZW1vdGVfZXJyb3Ioc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZf
dCBlcnJvciwgc3RydWN0IHNjdHBfZXJyb3JfY2h1bmsgKmNodW5rKQotewotCXN0cnVjdCBtYnVm
ICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgKnNyZTsKLQlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQl1bnNpZ25lZCBpbnQgbm90aWZfbGVuOwotCXVp
bnQxNl90IGNodW5rX2xlbjsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fAotCSAgICBzY3RwX3N0
Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVD
VlBFRVJFUlIpKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNodW5rICE9IE5VTEwpIHsKLQkJY2h1
bmtfbGVuID0gbnRvaHMoY2h1bmstPmNoLmNodW5rX2xlbmd0aCk7Ci0JfSBlbHNlIHsKLQkJY2h1
bmtfbGVuID0gMDsKLQl9Ci0Jbm90aWZfbGVuID0gKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVj
dCBzY3RwX3JlbW90ZV9lcnJvcikgKyBjaHVua19sZW4pOwotCW1fbm90aWZ5ID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKG5vdGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmICht
X25vdGlmeSA9PSBOVUxMKSB7Ci0JCS8qIFJldHJ5IHdpdGggc21hbGxlciB2YWx1ZS4gKi8KLQkJ
bm90aWZfbGVuID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9y
KTsKLQkJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90aWZfbGVuLCAwLCBNX05P
V0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7Ci0JCQlyZXR1cm47
Ci0JCX0KLQl9Ci0JU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOwotCXNyZSA9IG10b2Qo
bV9ub3RpZnksIHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqKTsKLQltZW1zZXQoc3JlLCAwLCBu
b3RpZl9sZW4pOwotCXNyZS0+c3JlX3R5cGUgPSBTQ1RQX1JFTU9URV9FUlJPUjsKLQlzcmUtPnNy
ZV9mbGFncyA9IDA7Ci0Jc3JlLT5zcmVfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90
ZV9lcnJvcik7Ci0Jc3JlLT5zcmVfZXJyb3IgPSBlcnJvcjsKLQlzcmUtPnNyZV9hc3NvY19pZCA9
IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JaWYgKG5vdGlmX2xlbiA+IHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZW1vdGVfZXJyb3IpKSB7Ci0JCW1lbWNweShzcmUtPnNyZV9kYXRhLCBjaHVuaywgY2h1
bmtfbGVuKTsKLQkJc3JlLT5zcmVfbGVuZ3RoICs9IGNodW5rX2xlbjsKLQl9Ci0JU0NUUF9CVUZf
TEVOKG1fbm90aWZ5KSA9IHNyZS0+c3JlX2xlbmd0aDsKLQljb250cm9sID0gc2N0cF9idWlsZF9y
ZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAw
LCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKLQlpZiAo
Y29udHJvbCAhPSBOVUxMKSB7Ci0JCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25v
dGlmeSk7Ci0JCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkJLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5Owot
CQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkgICAgICAgICAgICAg
ICAgICBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNv
X3JjdiwgMSwKLQkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCX0gZWxzZSB7Ci0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JfQotfQotCi0KLXZv
aWQKLXNjdHBfdWxwX25vdGlmeSh1aW50MzJfdCBub3RpZmljYXRpb24sIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKLSAgICB1aW50MzJfdCBlcnJvciwgdm9pZCAqZGF0YSwgaW50IHNvX2xvY2tlZAot
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlpZiAoKHN0Y2IgPT0gTlVMTCkg
fHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0NMT1NFRF9TT0NLRVQpKSB7Ci0JCS8qIElmIHRoZSBzb2NrZXQgaXMgZ29uZSB3ZSBhcmUg
b3V0IG9mIGhlcmUgKi8KLQkJcmV0dXJuOwotCX0KLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0J
aWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUp
IHsKLSNlbHNlCi0JaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zdGF0ZSAmIFNTX0NBTlRSQ1ZN
T1JFKSB7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlp
ZiAoc29fbG9ja2VkKSB7Ci0JCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNi
LT5zY3RwX2VwKSk7Ci0JfQotI2VuZGlmCi0JaWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9T
VEFURV9DT09LSUVfV0FJVCkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiAgU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSkgewotCQlpZiAoKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9J
TlRFUkZBQ0VfRE9XTikgfHwKLQkJICAgIChub3RpZmljYXRpb24gPT0gU0NUUF9OT1RJRllfSU5U
RVJGQUNFX1VQKSB8fAotCQkgICAgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9JTlRFUkZB
Q0VfQ09ORklSTUVEKSkgewotCQkJLyogRG9uJ3QgcmVwb3J0IHRoZXNlIGluIGZyb250IHN0YXRl
cyAqLwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXN3aXRjaCAobm90aWZpY2F0aW9uKSB7Ci0JY2Fz
ZSBTQ1RQX05PVElGWV9BU1NPQ19VUDoKLQkJaWYgKHN0Y2ItPmFzb2MuYXNzb2NfdXBfc2VudCA9
PSAwKSB7Ci0JCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DT01NX1VQLCBzdGNiLCBl
cnJvciwgTlVMTCwgMCwgc29fbG9ja2VkKTsKLQkJCXN0Y2ItPmFzb2MuYXNzb2NfdXBfc2VudCA9
IDE7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9uZWVkZWQgJiYgKHN0Y2ItPmFz
b2MuYWRhcHRhdGlvbl9zZW50ID09IDApKSB7Ci0JCQlzY3RwX25vdGlmeV9hZGFwdGF0aW9uX2xh
eWVyKHN0Y2IpOwotCQl9Ci0JCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsK
LQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVSX0FVVEgsIHN0Y2IsIDAsCi0J
CQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKLQkJfQotCQlicmVhazsKLQljYXNl
IFNDVFBfTk9USUZZX0FTU09DX0RPV046Ci0JCXNjdHBfbm90aWZ5X2Fzc29jX2NoYW5nZShTQ1RQ
X1NIVVRET1dOX0NPTVAsIHN0Y2IsIGVycm9yLCBOVUxMLCAwLCBzb19sb2NrZWQpOwotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2sp
IHsKLQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJCXVuaW9uIHNjdHBfc29ja3N0b3Jl
IGFkZHI7Ci0JCQkJc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7Ci0KLQkJCQltZW1zZXQoJmFkZHIs
IDAsIHNpemVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOwotCQkJCW1lbXNldCgmcmN2LCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOwotCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXN0Y2ItPnNj
dHBfZXAtPnJlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIGFkZHIsIE5VTEwsIDAsIHJj
diwgMCwgc3RjYi0+c2N0cF9lcC0+dWxwX2luZm8pOwotCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7
Ci0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJfQot
CQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTjoK
LQkJewotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JCQluZXQgPSAoc3RydWN0IHNjdHBf
bmV0cyAqKWRhdGE7Ci0JCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBf
QUREUl9VTlJFQUNIQUJMRSwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xf
YWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7Ci0JCQlicmVhazsKLQkJfQotCWNhc2UgU0NUUF9OT1RJ
RllfSU5URVJGQUNFX1VQOgotCQl7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkJCW5l
dCA9IChzdHJ1Y3Qgc2N0cF9uZXRzICopZGF0YTsKLQkJCXNjdHBfbm90aWZ5X3BlZXJfYWRkcl9j
aGFuZ2Uoc3RjYiwgU0NUUF9BRERSX0FWQUlMQUJMRSwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRy
ICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7Ci0JCQlicmVhazsKLQkJfQot
CWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRDoKLQkJewotCQkJc3RydWN0IHNj
dHBfbmV0cyAqbmV0OwotCi0JCQluZXQgPSAoc3RydWN0IHNjdHBfbmV0cyAqKWRhdGE7Ci0JCQlz
Y3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9DT05GSVJNRUQsCi0J
CQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsIGVycm9yLCBzb19sb2Nr
ZWQpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTDoK
LQkJc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQyKHN0Y2IsIGVycm9yLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICopZGF0YSwgc29f
bG9ja2VkKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUw6Ci0JCXNj
dHBfbm90aWZ5X3NlbmRfZmFpbGVkKHN0Y2IsIDEsIGVycm9yLAotCQkgICAgKHN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9U
SUZZX1VOU0VOVF9ER19GQUlMOgotCQlzY3RwX25vdGlmeV9zZW5kX2ZhaWxlZChzdGNiLCAwLCBl
cnJvciwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsg
KilkYXRhLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1BBUlRJQUxf
REVMVklFUllfSU5ESUNBVElPTjoKLQkJewotCQkJdWludDMyX3QgdmFsOwotCQkJdmFsID0gKigo
dWludDMyX3QgKilkYXRhKTsKLQotCQkJc2N0cF9ub3RpZnlfcGFydGlhbF9kZWxpdmVyeV9pbmRp
Y2F0aW9uKHN0Y2IsIGVycm9yLCB2YWwsIHNvX2xvY2tlZCk7Ci0JCWJyZWFrOwotCQl9Ci0JY2Fz
ZSBTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRDoKLQkJaWYgKCgoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKLQkJICAg
ICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9DT09L
SUVfRUNIT0VEKSkgewotCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ0FOVF9TVFJf
QVNTT0MsIHN0Y2IsIGVycm9yLCBkYXRhLCAwLCBzb19sb2NrZWQpOwotCQl9IGVsc2UgewotCQkJ
c2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ09NTV9MT1NULCBzdGNiLCBlcnJvciwgZGF0
YSwgMCwgc29fbG9ja2VkKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX0FTU09D
X1JFTV9BQk9SVEVEOgotCQlpZiAoKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9NQVNL
KSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAotCQkgICAgKChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7Ci0JCQlz
Y3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DQU5UX1NUUl9BU1NPQywgc3RjYiwgZXJyb3Is
IGRhdGEsIDEsIHNvX2xvY2tlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX25vdGlmeV9hc3NvY19j
aGFuZ2UoU0NUUF9DT01NX0xPU1QsIHN0Y2IsIGVycm9yLCBkYXRhLCAxLCBzb19sb2NrZWQpOwot
CQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfQVNTT0NfUkVTVEFSVDoKLQkJc2N0cF9u
b3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfUkVTVEFSVCwgc3RjYiwgZXJyb3IsIE5VTEwsIDAsIHNv
X2xvY2tlZCk7Ci0JCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsKLQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVSX0FVVEgsIHN0Y2IsIDAsCi0JCQkgICAg
ICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBf
Tk9USUZZX1NUUl9SRVNFVF9TRU5EOgotCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwg
ZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NT
Tik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfU1RSX1JFU0VUX1JFQ1Y6Ci0JCXNjdHBf
bm90aWZ5X3N0cmVhbV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50MTZfdCAqKSBkYXRhKSwgU0NU
UF9TVFJFQU1fUkVTRVRfSU5DT01JTkcpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1NU
Ul9SRVNFVF9GQUlMRURfT1VUOgotCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJy
b3IsICgodWludDE2X3QgKikgZGF0YSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NU
UF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFNX1JFU0VUX0ZBSUxFRCkpOwot
CQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5JRURfT1VUOgotCQlzY3Rw
X25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NO
fFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCkpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZ
X1NUUl9SRVNFVF9GQUlMRURfSU46Ci0JCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdGNiLCBl
cnJvciwgKCh1aW50MTZfdCAqKSBkYXRhKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgIChT
Q1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR3xTQ1RQX1NUUkVBTV9SRVNFVF9GQUlMRUQpKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVOSUVEX0lOOgotCQlzY3RwX25v
dGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCi0JCSAg
ICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkd8U0NUUF9T
VFJFQU1fUkVTRVRfREVOSUVEKSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfQVNDT05G
X0FERF9JUDoKLQkJc2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJf
QURERUQsIGRhdGEsCi0JCSAgICBlcnJvciwgc29fbG9ja2VkKTsKLQkJYnJlYWs7Ci0JY2FzZSBT
Q1RQX05PVElGWV9BU0NPTkZfREVMRVRFX0lQOgotCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hh
bmdlKHN0Y2IsIFNDVFBfQUREUl9SRU1PVkVELCBkYXRhLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZ
X0FTQ09ORl9TRVRfUFJJTUFSWToKLQkJc2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShzdGNi
LCBTQ1RQX0FERFJfTUFERV9QUklNLCBkYXRhLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVycm9yLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1BFRVJf
U0hVVERPV046Ci0JCXNjdHBfbm90aWZ5X3NodXRkb3duX2V2ZW50KHN0Y2IpOwotCQlicmVhazsK
LQljYXNlIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tFWToKLQkJc2N0cF9ub3RpZnlfYXV0aGVudGlj
YXRpb24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksIGVycm9yLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAodWludDE2X3QpKHVpbnRwdHJfdClkYXRhLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX0FVVEhf
RlJFRV9LRVk6Ci0JCXNjdHBfbm90aWZ5X2F1dGhlbnRpY2F0aW9uKHN0Y2IsIFNDVFBfQVVUSF9G
UkVFX0tFWSwgZXJyb3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCko
dWludHB0cl90KWRhdGEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7
Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRIOgotCQlzY3RwX25vdGlm
eV9hdXRoZW50aWNhdGlvbihzdGNiLCBTQ1RQX0FVVEhfTk9fQVVUSCwgZXJyb3IsCi0JCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkodWludHB0cl90KWRhdGEsCi0JCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9O
T1RJRllfU0VOREVSX0RSWToKLQkJc2N0cF9ub3RpZnlfc2VuZGVyX2RyeV9ldmVudChzdGNiLCBz
b19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1JFTU9URV9FUlJPUjoKLQkJ
c2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9yKHN0Y2IsIGVycm9yLCBkYXRhKTsKLQkJYnJlYWs7Ci0J
ZGVmYXVsdDoKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VUSUwxLCAiJXM6IHVua25vd24gbm90aWZp
Y2F0aW9uICV4aCAoJXUpXG4iLAotCQkJX19mdW5jX18sIG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0
aW9uKTsKLQkJYnJlYWs7Ci0JfQkJCS8qIGVuZCBzd2l0Y2ggKi8KLX0KLQotdm9pZAotc2N0cF9y
ZXBvcnRfYWxsX291dGJvdW5kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3QgZXJyb3Is
IGludCBob2xkc19sb2NrLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlm
Ci0gICAgKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKm91dHM7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsK
LQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsICpuc3A7Ci0JaW50IGk7Ci0K
LQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29j
OwotCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJ
LyogYWxyZWFkeSBiZWluZyBmcmVlZCAqLwotCQlyZXR1cm47Ci0JfQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9T
TyhzdGNiLT5zY3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBf
SU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYKLQlpZiAoKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkgICAgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwK
LQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSkgewotCQlyZXR1
cm47Ci0JfQotCS8qIG5vdyB0aHJvdWdoIGFsbCB0aGUgZ3VuayBmcmVlaW5nIGNodW5rcyAqLwot
CWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0K
LQkvKiBzZW50IHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShj
aGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZF
KCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCWFzb2MtPnNlbnRfcXVldWVf
Y250LS07Ci0JCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgewotCQkJ
aWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAw
KSB7Ci0JCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVl
cy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCX0gZWxzZSB7Ci0JCQkJcGFuaWMoIk5vIGNodW5r
cyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQpOwotI2VuZGlm
Ci0JCQl9Ci0JCX0KLQkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7Ci0JCQlzY3RwX2ZyZWVfYnVm
c3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKLQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElG
WV9TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkgICAgICAgICAgICAgICAgZXJyb3IsIGNoaywgc29f
bG9ja2VkKTsKLQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRh
KTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXNjdHBfZnJlZV9hX2NodW5r
KHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9
Ci0JLyogcGVuZGluZyBzZW5kIHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLwotCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJ
TFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCWFzb2MtPnNl
bmRfcXVldWVfY250LS07Ci0JCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5j
aHVua3Nfb25fcXVldWVzID4gMCkgewotCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNp
ZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJfSBlbHNlIHsKLQkJ
CXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIGNoay0+cmVjLmRh
dGEuc2lkKTsKLSNlbmRpZgotCQl9Ci0JCWlmIChjaGstPmRhdGEgIT0gTlVMTCkgewotCQkJc2N0
cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIGNoaywgMSk7Ci0JCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkgICAgICAgICAgICAgICAgZXJy
b3IsIGNoaywgc29fbG9ja2VkKTsKLQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJl
ZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXNjdHBf
ZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJLypzYV9pZ25vcmUgRlJFRURf
TUVNT1JZKi8KLQl9Ci0JZm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVhbW91dGNudDsgaSsrKSB7
Ci0JCS8qIEZvciBlYWNoIHN0cmVhbSAqLwotCQlvdXRzID0gJmFzb2MtPnN0cm1vdXRbaV07Ci0J
CS8qIGNsZWFuIHVwIGFueSBzZW5kcyB0aGVyZSAqLwotCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3As
ICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNwKSB7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZh
c29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJCVRBSUxRX1JFTU9WRSgmb3V0cy0+b3V0cXVl
dWUsIHNwLCBuZXh0KTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3Zl
X2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91dHMsIHNwLCBob2xkc19sb2NrKTsKLQkJCXNjdHBf
ZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2MsIHNwKTsKLQkJCWlmIChzcC0+ZGF0YSkgewotCQkJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQX0ZBSUwsIHN0Y2IsCi0JCQkJ
CQllcnJvciwgKHZvaWQgKilzcCwgc29fbG9ja2VkKTsKLQkJCQlpZiAoc3AtPmRhdGEpIHsKLQkJ
CQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKLQkJCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJCQlz
cC0+dGFpbF9tYnVmID0gTlVMTDsKLQkJCQkJc3AtPmxlbmd0aCA9IDA7Ci0JCQkJfQotCQkJfQot
CQkJaWYgKHNwLT5uZXQpIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7Ci0J
CQkJc3AtPm5ldCA9IE5VTEw7Ci0JCQl9Ci0JCQkvKiBGcmVlIHRoZSBjaHVuayAqLwotCQkJc2N0
cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOwotCQkJLypzYV9pZ25vcmUgRlJF
RURfTUVNT1JZKi8KLQkJfQotCX0KLQotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9U
Q0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQotfQotCi12b2lkCi1zY3RwX2Fib3J0X25vdGlmaWNh
dGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgZnJvbV9wZWVyLCB1aW50MTZfdCBl
cnJvciwKLQkJCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydCwgaW50IHNvX2xvY2tlZAot
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlpZiAoc3RjYiA9PSBOVUxMKSB7
Ci0JCXJldHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaWYgKHNvX2xvY2tlZCkg
ewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9IGVs
c2UgewotCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOwot
CX0KLSNlbmRpZgotCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0lOX1RDUFBPT0wpIHx8Ci0JICAgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCi0JICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpKSB7Ci0JCXN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQ7Ci0JfQotCWlmICgoc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCSAgICAo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05F
KSB8fAotCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkp
IHsKLQkJcmV0dXJuOwotCX0KLQkvKiBUZWxsIHRoZW0gd2UgbG9zdCB0aGUgYXNvYyAqLwotCXNj
dHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdGNiLCBlcnJvciwgMSwgc29fbG9ja2VkKTsKLQlpZiAo
ZnJvbV9wZWVyKSB7Ci0JCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19SRU1fQUJP
UlRFRCwgc3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOwotCX0gZWxzZSB7Ci0JCXNjdHBf
dWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRCwgc3RjYiwgZXJyb3IsIGFi
b3J0LCBzb19sb2NrZWQpOwotCX0KLX0KLQotdm9pZAotc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLAotICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IG1idWYgKm9wX2Vy
ciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKLSNlbmRpZgotICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17Ci0JdWludDMyX3QgdnRh
ZzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JdnRhZyA9IDA7Ci0JaWYgKHN0Y2Ig
IT0gTlVMTCkgewotCQl2dGFnID0gc3RjYi0+YXNvYy5wZWVyX3Z0YWc7Ci0JCXZyZl9pZCA9IHN0
Y2ItPmFzb2MudnJmX2lkOwotCX0KLQlzY3RwX3NlbmRfYWJvcnQobSwgaXBobGVuLCBzcmMsIGRz
dCwgc2gsIHZ0YWcsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCSAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JICAgICAg
ICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkvKiBXZSBo
YXZlIGEgVENCIHRvIGFib3J0LCBzZW5kIG5vdGlmaWNhdGlvbiB0b28gKi8KLQkJc2N0cF9hYm9y
dF9ub3RpZmljYXRpb24oc3RjYiwgMCwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJ
c3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOwotCQkvKiBPaywgbm93
IGxldHMgZnJlZSBpdCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCWF0b21pY19hZGRf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
U0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCWlmICgoU0NUUF9HRVRfU1RBVEUo
JnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJICAgIChTQ1RQX0dFVF9TVEFU
RSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCVND
VFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJfQotCQkodm9pZClzY3Rw
X2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNCk7Ci0jaWYgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci19Ci0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RT
TlMKLXZvaWQKLXNjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ip
Ci17Ci0jaWZkZWYgTk9TSVlfUFJJTlRTCi0JaW50IGk7Ci0JU0NUUF9QUklOVEYoIkxhc3QgZXAg
cmVhc29uOiV4XG4iLCBzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUpOwotCVNDVFBfUFJJ
TlRGKCJJTiBib3VuZCBUU04gbG9nLWFhYVxuIik7Ci0JaWYgKChzdGNiLT5hc29jLnRzbl9pbl9h
dCA9PSAwKSAmJiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCA9PSAwKSkgewotCQlTQ1RQX1BS
SU5URigiTm9uZSByY3ZkXG4iKTsKLQkJZ290byBub25lX2luOwotCX0KLQlpZiAoc3RjYi0+YXNv
Yy50c25faW5fd3JhcHBlZCkgewotCQlmb3IgKGkgPSBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSA8
IFNDVFBfVFNOX0xPR19TSVpFOyBpKyspIHsKLQkJCVNDVFBfUFJJTlRGKCJUU046JXggc3RybTol
ZCBzZXE6JWQgZmxhZ3M6JXggc3o6JWRcbiIsCi0JCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9n
W2ldLnRzbiwKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc3RybSwKLQkJCQkgICAg
c3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc2VxLAotCQkJCSAgICBzdGNiLT5hc29jLmluX3Rzbmxv
Z1tpXS5mbGdzLAotCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS5zeik7Ci0JCX0KLQl9
Ci0JaWYgKHN0Y2ItPmFzb2MudHNuX2luX2F0KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5h
c29jLnRzbl9pbl9hdDsgaSsrKSB7Ci0JCQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2Vx
OiVkIGZsYWdzOiV4IHN6OiVkXG4iLAotCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS50
c24sCi0JCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnN0cm0sCi0JCQkJICAgIHN0Y2It
PmFzb2MuaW5fdHNubG9nW2ldLnNlcSwKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0u
ZmxncywKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc3opOwotCQl9Ci0JfQotIG5v
bmVfaW46Ci0JU0NUUF9QUklOVEYoIk9VVCBib3VuZCBUU04gbG9nLWFhYVxuIik7Ci0JaWYgKChz
dGNiLT5hc29jLnRzbl9vdXRfYXQgPT0gMCkgJiYKLQkgICAgKHN0Y2ItPmFzb2MudHNuX291dF93
cmFwcGVkID09IDApKSB7Ci0JCVNDVFBfUFJJTlRGKCJOb25lIHNlbnRcbiIpOwotCX0KLQlpZiAo
c3RjYi0+YXNvYy50c25fb3V0X3dyYXBwZWQpIHsKLQkJZm9yIChpID0gc3RjYi0+YXNvYy50c25f
b3V0X2F0OyBpIDwgU0NUUF9UU05fTE9HX1NJWkU7IGkrKykgewotCQkJU0NUUF9QUklOVEYoIlRT
TjoleCBzdHJtOiVkIHNlcTolZCBmbGFnczoleCBzejolZFxuIiwKLQkJCQkgICAgc3RjYi0+YXNv
Yy5vdXRfdHNubG9nW2ldLnRzbiwKLQkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnN0
cm0sCi0JCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5zZXEsCi0JCQkJICAgIHN0Y2It
PmFzb2Mub3V0X3RzbmxvZ1tpXS5mbGdzLAotCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2db
aV0uc3opOwotCQl9Ci0JfQotCWlmIChzdGNiLT5hc29jLnRzbl9vdXRfYXQpIHsKLQkJZm9yIChp
ID0gMDsgaSA8IHN0Y2ItPmFzb2MudHNuX291dF9hdDsgaSsrKSB7Ci0JCQlTQ1RQX1BSSU5URigi
VFNOOiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAotCQkJCSAgICBzdGNiLT5h
c29jLm91dF90c25sb2dbaV0udHNuLAotCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0u
c3RybSwKLQkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnNlcSwKLQkJCQkgICAgc3Rj
Yi0+YXNvYy5vdXRfdHNubG9nW2ldLmZsZ3MsCi0JCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3Rzbmxv
Z1tpXS5zeik7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwX2Fib3J0
X2FuX2Fzc29jaWF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKm9wX2VyciwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSkKLXsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsK
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCi0Jc28gPSBTQ1RQX0lOUF9TTyhpbnApOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0JaWYgKHNvX2xvY2tlZCkgewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5Q
X1NPKGlucCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhp
bnApKTsKLQl9Ci0jZW5kaWYKLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCS8qIEdvdCB0byBoYXZl
IGEgVENCICovCi0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkgewotCQkJaWYgKExJU1RfRU1QVFkoJmlucC0+c2N0cF9hc29jX2xpc3QpKSB7Ci0jaWYg
ZGVmaW5lZChfX0FQUExFX18pCi0JCQkJaWYgKCFzb19sb2NrZWQpIHsKLQkJCQkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwg
U0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCi0JCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9O
T0NNUFNFVCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJaWYgKCFzb19sb2NrZWQpIHsK
LQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCX0KLQkJ
fQotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRF
X1dBU19BQk9SVEVEOwotCX0KLQkvKiBub3RpZnkgdGhlIHBlZXIgKi8KLQlzY3RwX3NlbmRfYWJv
cnRfdGNiKHN0Y2IsIG9wX2Vyciwgc29fbG9ja2VkKTsKLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
MzIoc2N0cHNfYWJvcnRlZCk7Ci0JaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0g
U0NUUF9TVEFURV9PUEVOKSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCVNDVFBfU1RBVF9ERUNSX0dBVUdF
MzIoc2N0cHNfY3VycmVzdGFiKTsKLQl9Ci0JLyogbm90aWZ5IHRoZSB1bHAgKi8KLQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7Ci0JCXNj
dHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIHNvX2xvY2tlZCk7Ci0JfQot
CS8qIG5vdyBmcmVlIHRoZSBhc29jICovCi0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLQlz
Y3RwX3ByaW50X291dF90cmFja19sb2coc3RjYik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlpZiAoIXNvX2xvY2tlZCkg
ewotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
fQotI2VuZGlmCi0JKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxf
UFJPQywKLQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9M
T0NfNSk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCi0JaWYgKCFzb19sb2NrZWQpIHsKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
LQl9Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1ZiAqbSwg
aW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy
ICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cGhkciAqc2gsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgICAgICAgICAgICAgIHN0cnVj
dCBtYnVmICpjYXVzZSwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAgICAg
ICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWludDE2X3QgZmlibnVtLAot
I2VuZGlmCi0gICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkK
LXsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsKLQl1bnNpZ25lZCBpbnQg
Y2hrX2xlbmd0aDsKLQlpbnQgY29udGFpbnNfaW5pdF9jaHVuazsKLQotCVNDVFBfU1RBVF9JTkNS
X0NPVU5URVIzMihzY3Rwc19vdXRvZnRoZWJsdWUpOwotCS8qIEdlbmVyYXRlIGEgVE8gYWRkcmVz
cyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLwotCWlmIChpbnAgJiYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgewotCQlpZiAoTElTVF9FTVBUWSgmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCkpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCVNDVFBfU09DS0VU
X0xPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0jZW5kaWYKLQkJCXNjdHBfaW5wY2JfZnJlZShp
bnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAotCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RM
WV9OT0NNUFNFVCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQlTQ1RQX1NPQ0tFVF9VTkxP
Q0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0jZW5kaWYKLQkJfQotCX0KLQljb250YWluc19pbml0
X2NodW5rID0gMDsKLQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAotCSAgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYpOwot
CXdoaWxlIChjaCAhPSBOVUxMKSB7Ci0JCWNoa19sZW5ndGggPSBudG9ocyhjaC0+Y2h1bmtfbGVu
Z3RoKTsKLQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkgewotCQkJLyogYnJlYWsgdG8g
YWJvcnQgbGFuZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkg
ewotCQljYXNlIFNDVFBfSU5JVDoKLQkJCWNvbnRhaW5zX2luaXRfY2h1bmsgPSAxOwotCQkJYnJl
YWs7Ci0JCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKLQkJCS8qIHdlIGRvbid0IHJlc3BvbmQg
dG8gcGt0LWRyb3BwZWQgKi8KLQkJCXJldHVybjsKLQkJY2FzZSBTQ1RQX0FCT1JUX0FTU09DSUFU
SU9OOgotCQkJLyogd2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIEFCT1JUIHRvIGFuIEFCT1JUICov
Ci0JCQlyZXR1cm47Ci0JCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QTEVURToKLQkJCS8qCi0JCQkg
KiB3ZSBpZ25vcmUgaXQgc2luY2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZvciBpdCBhbmQKLQkJCSAq
IHBlZXIgaXMgZ29uZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCWNhc2UgU0NUUF9TSFVURE9XTl9B
Q0s6Ci0JCQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUyKHNyYywgZHN0LCBzaCwKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxv
d3R5cGUsIG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgotCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJcmV0dXJuOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7
Ci0JCX0KLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5ndGgpOwotCQljaCA9IChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkgICAgc2l6ZW9m
KCpjaCksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKLQl9Ci0JaWYgKChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYmxhY2tob2xlKSA9PSAwKSB8fAotCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9ibGFja2hvbGUpID09IDEpICYmCi0JICAgICAoY29udGFpbnNfaW5pdF9jaHVuayA9PSAwKSkp
IHsKLQkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCAwLCBjYXVzZSwK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBt
Zmxvd2lkLCBmaWJudW0sCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7
Ci0JfQotfQotCi0vKgotICogY2hlY2sgdGhlIGluYm91bmQgZGF0YWdyYW0gdG8gbWFrZSBzdXJl
IHRoZXJlIGlzIG5vdCBhbiBhYm9ydCBpbnNpZGUgaXQsCi0gKiBpZiB0aGVyZSBpcyByZXR1cm4g
MSwgZWxzZSByZXR1cm4gMC4KLSAqLwotaW50Ci1zY3RwX2lzX3RoZXJlX2FuX2Fib3J0X2hlcmUo
c3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHVpbnQzMl90ICogdnRhZ2ZpbGwpCi17Ci0Jc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY2hr
LCBjaHVua19idWY7Ci0JaW50IG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKLQot
CW9mZnNldCA9IGlwaGxlbiArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JY2ggPSAoc3RydWN0
IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgc2l6ZW9mKCpjaCksCi0J
ICAgICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKLQl3aGlsZSAoY2ggIT0gTlVMTCkgewotCQlj
aGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7Ci0JCWlmIChjaGtfbGVuZ3RoIDwg
c2l6ZW9mKCpjaCkpIHsKLQkJCS8qIHBhY2tldCBpcyBwcm9iYWJseSBjb3JydXB0ICovCi0JCQli
cmVhazsKLQkJfQotCQkvKiB3ZSBzZWVtIHRvIGJlIG9rLCBpcyBpdCBhbiBhYm9ydD8gKi8KLQkJ
aWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQUJPUlRfQVNTT0NJQVRJT04pIHsKLQkJCS8qIHll
cCwgdGVsbCB0aGVtICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWlmIChjaC0+Y2h1bmtfdHlw
ZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKLQkJCS8qIG5lZWQgdG8gdXBkYXRlIHRoZSBWdGFnICov
Ci0JCQlpbml0X2NoayA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICopc2N0cF9tX2dldHB0ciht
LAotCQkJICAgIG9mZnNldCwgc2l6ZW9mKCppbml0X2NoayksICh1aW50OF90ICopICYgY2h1bmtf
YnVmKTsKLQkJCWlmIChpbml0X2NoayAhPSBOVUxMKSB7Ci0JCQkJKnZ0YWdmaWxsID0gbnRvaGwo
aW5pdF9jaGstPmluaXQuaW5pdGlhdGVfdGFnKTsKLQkJCX0KLQkJfQotCQkvKiBOb3BlLCBtb3Zl
IHRvIHRoZSBuZXh0IGNodW5rICovCi0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihjaGtfbGVuZ3Ro
KTsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNl
dCwKLQkJICAgIHNpemVvZigqY2gpLCAodWludDhfdCAqKSAmIGNodW5rX2J1Zik7Ci0JfQotCXJl
dHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBjdXJyZW50bHkgKDIvMDIpLCBpZmFfYWRkciBlbWJlZHMg
c2NvcGVfaWQncyBhbmQgZG9uJ3QgaGF2ZSBzaW42X3Njb3BlX2lkCi0gKiBzZXQgKGkuZS4gaXQn
cyAwKSBzbywgY3JlYXRlIHRoaXMgZnVuY3Rpb24gdG8gY29tcGFyZSBsaW5rIGxvY2FsIHNjb3Bl
cwotICovCi0jaWZkZWYgSU5FVDYKLXVpbnQzMl90Ci1zY3RwX2lzX3NhbWVfc2NvcGUoc3RydWN0
IHNvY2thZGRyX2luNiAqYWRkcjEsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIyKQotewotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAvKl9fVXNlcnNwYWNlX18gUmV0dXJuaW5nIDEg
aGVyZSBhbHdheXMgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RSkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGEsIGI7Ci0KLQkvKiBzYXZlIGNvcGllcyAqLwotCWEg
PSAqYWRkcjE7Ci0JYiA9ICphZGRyMjsKLQotCWlmIChhLnNpbjZfc2NvcGVfaWQgPT0gMCkKLSNp
ZmRlZiBTQ1RQX0tBTUUKLQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoJmEpKSB7Ci0jZWxzZQotCQlp
ZiAoaW42X3JlY292ZXJzY29wZSgmYSwgJmEuc2luNl9hZGRyLCBOVUxMKSkgewotI2VuZGlmCQkJ
CS8qIFNDVFBfS0FNRSAqLwotCQkJLyogY2FuJ3QgZ2V0IHNjb3BlLCBzbyBjYW4ndCBtYXRjaCAq
LwotCQkJcmV0dXJuICgwKTsKLQkJfQotCWlmIChiLnNpbjZfc2NvcGVfaWQgPT0gMCkKLSNpZmRl
ZiBTQ1RQX0tBTUUKLQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoJmIpKSB7Ci0jZWxzZQotCQlpZiAo
aW42X3JlY292ZXJzY29wZSgmYiwgJmIuc2luNl9hZGRyLCBOVUxMKSkgewotI2VuZGlmCQkJCS8q
IFNDVFBfS0FNRSAqLwotCQkJLyogY2FuJ3QgZ2V0IHNjb3BlLCBzbyBjYW4ndCBtYXRjaCAqLwot
CQkJcmV0dXJuICgwKTsKLQkJfQotCWlmIChhLnNpbjZfc2NvcGVfaWQgIT0gYi5zaW42X3Njb3Bl
X2lkKQotCQlyZXR1cm4gKDApOwotI2Vsc2UKLQlpZiAoYWRkcjEtPnNpbjZfc2NvcGVfaWQgIT0g
YWRkcjItPnNpbjZfc2NvcGVfaWQpCi0JCXJldHVybiAoMCk7Ci0jZW5kaWYgLyogU0NUUF9FTUJF
RERFRF9WNl9TQ09QRSAqLwotCi0JcmV0dXJuICgxKTsKLX0KLQotI2lmIGRlZmluZWQoU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSkKLS8qCi0gKiByZXR1cm5zIGEgc29ja2FkZHJfaW42IHdpdGggZW1i
ZWRkZWQgc2NvcGUgcmVjb3ZlcmVkIGFuZCByZW1vdmVkCi0gKi8KLXN0cnVjdCBzb2NrYWRkcl9p
bjYgKgotc2N0cF9yZWNvdmVyX3Njb3BlKHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIHN0cnVj
dCBzb2NrYWRkcl9pbjYgKnN0b3JlKQotewotCS8qIGNoZWNrIGFuZCBzdHJpcCBlbWJlZGRlZCBz
Y29wZSBqdW5rICovCi0JaWYgKGFkZHItPnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCWlm
IChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2FkZHIpKSB7Ci0JCQlpZiAoYWRk
ci0+c2luNl9zY29wZV9pZCA9PSAwKSB7Ci0JCQkJKnN0b3JlID0gKmFkZHI7Ci0jaWZkZWYgU0NU
UF9LQU1FCi0JCQkJaWYgKCFzYTZfcmVjb3ZlcnNjb3BlKHN0b3JlKSkgewotI2Vsc2UKLQkJCQlp
ZiAoIWluNl9yZWNvdmVyc2NvcGUoc3RvcmUsICZzdG9yZS0+c2luNl9hZGRyLAotCQkJCSAgICBO
VUxMKSkgewotI2VuZGlmIC8qIFNDVFBfS0FNRSAqLwotCQkJCQkvKiB1c2UgdGhlIHJlY292ZXJl
ZCBzY29wZSAqLwotCQkJCQlhZGRyID0gc3RvcmU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkv
KiBlbHNlLCByZXR1cm4gdGhlIG9yaWdpbmFsICJ0byIgYWRkciAqLwotCQkJCWluNl9jbGVhcnNj
b3BlKCZhZGRyLT5zaW42X2FkZHIpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAoYWRkcik7Ci19
Ci0jZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotI2VuZGlmCi0KLS8qCi0gKiBh
cmUgdGhlIHR3byBhZGRyZXNzZXMgdGhlIHNhbWU/ICBjdXJyZW50bHkgYSAic2NvcGVsZXNzIiBj
aGVjayByZXR1cm5zOiAxCi0gKiBpZiBzYW1lLCAwIGlmIG5vdAotICovCi1pbnQKLXNjdHBfY21w
YWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwgc3RydWN0IHNvY2thZGRyICpzYTIpCi17Ci0KLQkv
KiBtdXN0IGJlIHZhbGlkICovCi0JaWYgKHNhMSA9PSBOVUxMIHx8IHNhMiA9PSBOVUxMKQotCQly
ZXR1cm4gKDApOwotCi0JLyogbXVzdCBiZSB0aGUgc2FtZSBmYW1pbHkgKi8KLQlpZiAoc2ExLT5z
YV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCi0JCXJldHVybiAoMCk7Ci0KLQlzd2l0Y2ggKHNh
MS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJLyog
SVB2NiBhZGRyZXNzZXMgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNl8xLCAqc2luNl8y
OwotCi0JCXNpbjZfMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2ExOwotCQlzaW42XzIgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKLQkJcmV0dXJuIChTQ1RQNl9BUkVfQUREUl9FUVVB
TChzaW42XzEsCi0JCSAgICBzaW42XzIpKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2Fz
ZSBBRl9JTkVUOgotCXsKLQkJLyogSVB2NCBhZGRyZXNzZXMgKi8KLQkJc3RydWN0IHNvY2thZGRy
X2luICpzaW5fMSwgKnNpbl8yOwotCi0JCXNpbl8xID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNh
MTsKLQkJc2luXzIgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2EyOwotCQlyZXR1cm4gKHNpbl8x
LT5zaW5fYWRkci5zX2FkZHIgPT0gc2luXzItPnNpbl9hZGRyLnNfYWRkcik7Ci0JfQotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQl7Ci0JCXN0cnVj
dCBzb2NrYWRkcl9jb25uICpzY29ubl8xLCAqc2Nvbm5fMjsKLQotCQlzY29ubl8xID0gKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopc2ExOwotCQlzY29ubl8yID0gKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopc2EyOwotCQlyZXR1cm4gKHNjb25uXzEtPnNjb25uX2FkZHIgPT0gc2Nvbm5fMi0+c2Nvbm5f
YWRkcik7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogd2UgZG9uJ3QgZG8gdGhlc2UuLi4g
Ki8KLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXZvaWQKLXNjdHBfcHJpbnRfYWRkcmVzcyhzdHJ1
Y3Qgc29ja2FkZHIgKnNhKQotewotI2lmZGVmIElORVQ2Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCi0JY2hhciBpcDZidWZbSU5FVDZfQURE
UlNUUkxFTl07Ci0jZW5kaWYKLSNlbmRpZgotCi0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKLQotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJlc3M6ICV4OiV4OiV4OiV4
OiV4OiV4OiV4OiV4OnBvcnQ6JWQgc2NvcGU6JXVcbiIsCi0JCQkgICAgbnRvaHMoc2luNi0+c2lu
Nl9hZGRyLnM2X2FkZHIxNlswXSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2Fk
ZHIxNlsxXSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsyXSksCi0J
CQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlszXSksCi0JCQkgICAgbnRvaHMo
c2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls0XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9h
ZGRyLnM2X2FkZHIxNls1XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIx
Nls2XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls3XSksCi0JCQkg
ICAgbnRvaHMoc2luNi0+c2luNl9wb3J0KSwKLQkJCSAgICBzaW42LT5zaW42X3Njb3BlX2lkKTsK
LSNlbHNlCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
NzAwMDAwCi0JCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJlc3M6ICVzOnBvcnQ6JWQgc2NvcGU6JXVc
biIsCi0JCQkgICAgaXA2X3NwcmludGYoaXA2YnVmLCAmc2luNi0+c2luNl9hZGRyKSwKLQkJCSAg
ICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAotCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVfaWQpOwot
I2Vsc2UKLQkJU0NUUF9QUklOVEYoIklQdjYgYWRkcmVzczogJXM6cG9ydDolZCBzY29wZToldVxu
IiwKLQkJCSAgICBpcDZfc3ByaW50Zigmc2luNi0+c2luNl9hZGRyKSwKLQkJCSAgICBudG9ocyhz
aW42LT5zaW42X3BvcnQpLAotCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVfaWQpOwotI2VuZGlmCi0j
ZW5kaWYKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoK
LQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCQl1bnNpZ25lZCBjaGFyICpwOwotCi0J
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQkJcCA9ICh1bnNpZ25lZCBjaGFyICop
JnNpbi0+c2luX2FkZHI7Ci0JCVNDVFBfUFJJTlRGKCJJUHY0IGFkZHJlc3M6ICV1LiV1LiV1LiV1
OiVkXG4iLAotCQkJICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIG50b2hzKHNpbi0+c2luX3Bv
cnQpKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CWNhc2UgQUZfQ09OTjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQlz
Y29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOwotCQlTQ1RQX1BSSU5URigiQUZfQ09O
TiBhZGRyZXNzOiAlcFxuIiwgc2Nvbm4tPnNjb25uX2FkZHIpOwotCQlicmVhazsKLQl9Ci0jZW5k
aWYKLQlkZWZhdWx0OgotCQlTQ1RQX1BSSU5URigiP1xuIik7Ci0JCWJyZWFrOwotCX0KLX0KLQot
dm9pZAotc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoc3RydWN0IHNjdHBfaW5wY2Ig
Km9sZF9pbnAsCi0gICAgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19pbnAsCi0gICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotICAgIGludCB3YWl0ZmxhZ3MpCi17Ci0JLyoKLQkgKiBnbyB0aHJvdWdo
IG91ciBvbGQgSU5QIGFuZCBwdWxsIG9mZiBhbnkgY29udHJvbCBzdHJ1Y3R1cmVzIHRoYXQKLQkg
KiBiZWxvbmcgdG8gc3RjYiBhbmQgbW92ZSB0aGVuIHRvIHRoZSBuZXcgaW5wLgotCSAqLwotCXN0
cnVjdCBzb2NrZXQgKm9sZF9zbywgKm5ld19zbzsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCAqY29udHJvbCwgKm5jdGw7Ci0Jc3RydWN0IHNjdHBfcmVhZGhlYWQgdG1wX3F1ZXVlOwotCXN0
cnVjdCBtYnVmICptOwotCWludCBlcnJvciA9IDA7Ci0KLQlvbGRfc28gPSBvbGRfaW5wLT5zY3Rw
X3NvY2tldDsKLQluZXdfc28gPSBuZXdfaW5wLT5zY3RwX3NvY2tldDsKLQlUQUlMUV9JTklUKCZ0
bXBfcXVldWUpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
IDwgNzAwMDAwCi0JU09DS0JVRl9MT0NLKCYob2xkX3NvLT5zb19yY3YpKTsKLSNlbmRpZgotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotCWVycm9yID0gc2Js
b2NrKCZvbGRfc28tPnNvX3Jjdiwgd2FpdGZsYWdzKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwCi0JU09DS0JVRl9VTkxPQ0so
JihvbGRfc28tPnNvX3JjdikpOwotI2VuZGlmCi0JaWYgKGVycm9yKSB7Ci0JCS8qIEdhaywgY2Fu
J3QgZ2V0IHNibG9jaywgd2UgaGF2ZSBhIHByb2JsZW0uCi0JCSAqIGRhdGEgd2lsbCBiZSBsZWZ0
IHN0cmFuZGVkLi4gYW5kIHdlCi0JCSAqIGRvbid0IGRhcmUgbG9vayBhdCBpdCBzaW5jZSB0aGUK
LQkJICogb3RoZXIgdGhyZWFkIG1heSBiZSByZWFkaW5nIHNvbWV0aGluZy4KLQkJICogT2ggd2Vs
bCwgaXRzIGEgc2NyZXdlZCB1cCBhcHAgdGhhdCBkb2VzCi0JCSAqIGEgcGVlbG9mZiBPUiBhIGFj
Y2VwdCB3aGlsZSByZWFkaW5nCi0JCSAqIGZyb20gdGhlIG1haW4gc29ja2V0Li4uIGFjdHVhbGx5
IGl0cwotCQkgKiBvbmx5IHRoZSBwZWVsb2ZmKCkgY2FzZSwgc2luY2UgSSB0aGluawotCQkgKiBy
ZWFkIHdpbGwgZmFpbCBvbiBhIGxpc3RlbmluZyBzb2NrZXQuLgotCQkgKi8KLQkJcmV0dXJuOwot
CX0KLQkvKiBsb2NrIHRoZSBzb2NrZXQgYnVmZmVycyAqLwotCVNDVFBfSU5QX1JFQURfTE9DSyhv
bGRfaW5wKTsKLQlUQUlMUV9GT1JFQUNIX1NBRkUoY29udHJvbCwgJm9sZF9pbnAtPnJlYWRfcXVl
dWUsIG5leHQsIG5jdGwpIHsKLQkJLyogUHVsbCBvZmYgYWxsIGZvciBvdXQgdGFyZ2V0IHN0Y2Ig
Ki8KLQkJaWYgKGNvbnRyb2wtPnN0Y2IgPT0gc3RjYikgewotCQkJLyogcmVtb3ZlIGl0IHdlIHdh
bnQgaXQgKi8KLQkJCVRBSUxRX1JFTU9WRSgmb2xkX2lucC0+cmVhZF9xdWV1ZSwgY29udHJvbCwg
bmV4dCk7Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmdG1wX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsK
LQkJCW0gPSBjb250cm9sLT5kYXRhOwotCQkJd2hpbGUgKG0pIHsKLQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCQlzY3RwX3NibG9nKCZvbGRfc28tPnNvX3JjdiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNi
P05VTEw6c3RjYiwgU0NUUF9MT0dfU0JGUkVFLFNDVFBfQlVGX0xFTihtKSk7Ci0JCQkJfQotCQkJ
CXNjdHBfc2JmcmVlKGNvbnRyb2wsIHN0Y2IsICZvbGRfc28tPnNvX3JjdiwgbSk7Ci0JCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCQkJc2N0cF9zYmxvZygmb2xkX3NvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25v
dF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKLQkJCQl9Ci0JCQkJ
bSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JU0NUUF9JTlBfUkVBRF9VTkxP
Q0sob2xkX2lucCk7Ci0JLyogUmVtb3ZlIHRoZSBzYi1sb2NrIG9uIHRoZSBvbGQgc29ja2V0ICov
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAK
LQlTT0NLQlVGX0xPQ0soJihvbGRfc28tPnNvX3JjdikpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0Jc2J1bmxvY2soJm9sZF9zby0+c29fcmN2LCAxKTsKLSNlbmRpZgotCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlzYnVubG9jaygmb2xkX3NvLT5zb19yY3YpOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAK
LQlTT0NLQlVGX1VOTE9DSygmKG9sZF9zby0+c29fcmN2KSk7Ci0jZW5kaWYKLQkvKiBOb3cgd2Ug
bW92ZSB0aGVtIG92ZXIgdG8gdGhlIG5ldyBzb2NrZXQgYnVmZmVyICovCi0JU0NUUF9JTlBfUkVB
RF9MT0NLKG5ld19pbnApOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmdG1wX3F1ZXVl
LCBuZXh0LCBuY3RsKSB7Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZuZXdfaW5wLT5yZWFkX3F1ZXVl
LCBjb250cm9sLCBuZXh0KTsKLQkJbSA9IGNvbnRyb2wtPmRhdGE7Ci0JCXdoaWxlIChtKSB7Ci0J
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCXNjdHBfc2Jsb2coJm5ld19zby0+c29fcmN2LCBjb250cm9sLT5k
b19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFMTE9DLCBTQ1RQX0JVRl9MRU4o
bSkpOwotCQkJfQotCQkJc2N0cF9zYmFsbG9jKHN0Y2IsICZuZXdfc28tPnNvX3JjdiwgbSk7Ci0J
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCXNjdHBfc2Jsb2coJm5ld19zby0+c29fcmN2LCBjb250cm9sLT5k
b19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQlJFU1VMVCwgMCk7Ci0JCQl9Ci0J
CQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQkJfQotCX0KLQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhu
ZXdfaW5wKTsKLX0KLQotdm9pZAotc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIGludCBzb19s
b2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19U
RVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSkKLXsKLQlpZiAoKGlucCAhPSBOVUxM
KSAmJiAoaW5wLT5zY3RwX3NvY2tldCAhPSBOVUxMKSkgewotCQlpZiAoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSkpIHsKLQkJCVNDVFBfWkVS
T19DT1BZX0VWRU5UKGlucCwgaW5wLT5zY3RwX3NvY2tldCk7Ci0JCX0gZWxzZSB7Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQlzdHJ1
Y3Qgc29ja2V0ICpzbzsKLQotCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOwotCQkJaWYgKCFzb19s
b2NrZWQpIHsKLQkJCQlpZiAoc3RjYikgewotCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJCVND
VFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJCWlmIChzdGNiKSB7Ci0JCQkJCVNDVFBfVENCX0xP
Q0soc3RjYik7Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKLQkJCQl9Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSB7Ci0JCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQkJCXJldHVybjsK
LQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJCXNjdHBfc29yd2FrZXVwKGlucCwgaW5wLT5zY3RwX3Nv
Y2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCi0JCQlpZiAoIXNvX2xvY2tlZCkgewotCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywg
MSk7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCX0KLX0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0KLXZvaWQKLXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJv
bCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucF9yZWFkX2xvY2tfaGVsZCkKLXsK
LQl1aW50MzJfdCBwZF9wb2ludCwgbGVuZ3RoOwotCi0JaWYgKChpbnAtPnJlY3ZfY2FsbGJhY2sg
PT0gTlVMTCkgfHwKLQkgICAgKHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfc29j
a2V0ID09IE5VTEwpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlsZW5ndGggPSBjb250cm9sLT5sZW5n
dGg7Ci0JaWYgKHN0Y2IgIT0gTlVMTCAmJiBzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxMKSB7Ci0J
CXBkX3BvaW50ID0gbWluKFNDVFBfU0JfTElNSVRfUkNWKHN0Y2ItPnNjdHBfc29ja2V0KSA+PiBT
Q1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQsCi0JCQkgICAgICAgc3RjYi0+c2N0cF9lcC0+cGFy
dGlhbF9kZWxpdmVyeV9wb2ludCk7Ci0JfSBlbHNlIHsKLQkJcGRfcG9pbnQgPSBpbnAtPnBhcnRp
YWxfZGVsaXZlcnlfcG9pbnQ7Ci0JfQotCWlmICgoY29udHJvbC0+ZW5kX2FkZGVkID09IDEpIHx8
IChsZW5ndGggPj0gcGRfcG9pbnQpKSB7Ci0JCXN0cnVjdCBzb2NrZXQgKnNvOwotCQlzdHJ1Y3Qg
bWJ1ZiAqbTsKLQkJY2hhciAqYnVmZmVyOwotCQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdjsKLQkJ
dW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcjsKLQkJaW50IGZsYWdzOwotCi0JCWlmICgoYnVmZmVy
ID0gbWFsbG9jKGxlbmd0aCkpID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoaW5w
X3JlYWRfbG9ja19oZWxkID09IDApIHsKLQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQl9
Ci0JCXNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7Ci0JCWZvciAobSA9IGNvbnRyb2wtPmRhdGE7IG07
IG0gPSBTQ1RQX0JVRl9ORVhUKG0pKSB7Ci0JCQlzY3RwX3NiZnJlZShjb250cm9sLCBjb250cm9s
LT5zdGNiLCAmc28tPnNvX3JjdiwgbSk7Ci0JCX0KLQkJbV9jb3B5ZGF0YShjb250cm9sLT5kYXRh
LCAwLCBsZW5ndGgsIGJ1ZmZlcik7Ci0JCW1lbXNldCgmcmN2LCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfcmN2aW5mbykpOwotCQlyY3YucmN2X3NpZCA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKLQkJ
cmN2LnJjdl9zc24gPSAodWludDE2X3QpY29udHJvbC0+bWlkOwotCQlyY3YucmN2X2ZsYWdzID0g
Y29udHJvbC0+c2luZm9fZmxhZ3M7Ci0JCXJjdi5yY3ZfcHBpZCA9IGNvbnRyb2wtPnNpbmZvX3Bw
aWQ7Ci0JCXJjdi5yY3ZfdHNuID0gY29udHJvbC0+c2luZm9fdHNuOwotCQlyY3YucmN2X2N1bXRz
biA9IGNvbnRyb2wtPnNpbmZvX2N1bXRzbjsKLQkJcmN2LnJjdl9jb250ZXh0ID0gY29udHJvbC0+
c2luZm9fY29udGV4dDsKLQkJcmN2LnJjdl9hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZvX2Fzc29j
X2lkOwotCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOwot
CQlzd2l0Y2ggKGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlhZGRyLnNpbiA9IGNvbnRyb2wtPndob0Zy
b20tPnJvLl9sX2FkZHIuc2luOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlj
YXNlIEFGX0lORVQ2OgotCQkJYWRkci5zaW42ID0gY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRk
ci5zaW42OwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05OOgotCQkJYWRkci5zY29u
biA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2Nvbm47Ci0JCQlicmVhazsKLQkJZGVm
YXVsdDoKLQkJCWFkZHIuc2EgPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNhOwotCQkJ
YnJlYWs7Ci0JCX0KLQkJZmxhZ3MgPSAwOwotCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkID09IDEp
IHsKLQkJCWZsYWdzIHw9IE1TR19FT1I7Ci0JCX0KLQkJaWYgKGNvbnRyb2wtPnNwZWNfZmxhZ3Mg
JiBNX05PVElGSUNBVElPTikgewotCQkJZmxhZ3MgfD0gTVNHX05PVElGSUNBVElPTjsKLQkJfQot
CQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7Ci0JCWNvbnRyb2wtPmRhdGEgPSBOVUxMOwot
CQljb250cm9sLT50YWlsX21idWYgPSBOVUxMOwotCQljb250cm9sLT5sZW5ndGggPSAwOwotCQlp
ZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPnNjdHBfZXAt
PnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJY29udHJvbC0+b25fcmVhZF9xID0gMDsK
LQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKLQkJCWNvbnRyb2wt
Pndob0Zyb20gPSBOVUxMOwotCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0J
CX0KLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09IDApIHsKLQkJCVNDVFBf
SU5QX1JFQURfVU5MT0NLKGlucCk7Ci0JCX0KLQkJaW5wLT5yZWN2X2NhbGxiYWNrKHNvLCBhZGRy
LCBidWZmZXIsIGxlbmd0aCwgcmN2LCBmbGFncywgaW5wLT51bHBfaW5mbyk7Ci0JCVNDVFBfVENC
X0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKLQl9Ci19Ci0jZW5kaWYKLQotdm9pZAotc2N0cF9hZGRfdG9fcmVhZHEoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBf
cXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgc3RydWN0IHNvY2tidWYgKnNiLAotICAgIGlu
dCBlbmQsCi0gICAgaW50IGlucF9yZWFkX2xvY2tfaGVsZCwKLSAgICBpbnQgc29fbG9ja2VkCi0j
aWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
LSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgKQotewotCS8qCi0JICogSGVyZSB3ZSBtdXN0
IHBsYWNlIHRoZSBjb250cm9sIG9uIHRoZSBlbmQgb2YgdGhlIHNvY2tldCByZWFkCi0JICogcXVl
dWUgQU5EIGluY3JlbWVudCBzYl9jYyBzbyB0aGF0IHNlbGVjdCB3aWxsIHdvcmsgcHJvcGVybHkg
b24KLQkgKiByZWFkLgotCSAqLwotCXN0cnVjdCBtYnVmICptLCAqcHJldiA9IE5VTEw7Ci0KLQlp
ZiAoaW5wID09IE5VTEwpIHsKLQkJLyogR2FrLCBUU05IISEgKi8KLSNpZmRlZiBJTlZBUklBTlRT
Ci0JCXBhbmljKCJHYWssIGlucCBOVUxMIG9uIGFkZF90b19yZWFkcSIpOwotI2VuZGlmCi0JCXJl
dHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaWYgKHNvX2xvY2tlZCkgewotCQlz
Y3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5s
b2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9Ci0jZW5kaWYKLQlpZiAoaW5wX3JlYWRf
bG9ja19oZWxkID09IDApCi0JCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFEKSB7Ci0JCXNjdHBfZnJl
ZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKLQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsK
LQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxM
OwotCQl9Ci0JCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOwotCQlpZiAoaW5wX3Jl
YWRfbG9ja19oZWxkID09IDApCi0JCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCQlyZXR1
cm47Ci0JfQotCWlmICghKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikpIHsK
LQkJYXRvbWljX2FkZF9pbnQoJmlucC0+dG90YWxfcmVjdnMsIDEpOwotCQlpZiAoIWNvbnRyb2wt
PmRvX25vdF9yZWZfc3RjYikgewotCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPnRvdGFsX3JlY3Zz
LCAxKTsKLQkJfQotCX0KLQltID0gY29udHJvbC0+ZGF0YTsKLQljb250cm9sLT5oZWxkX2xlbmd0
aCA9IDA7Ci0JY29udHJvbC0+bGVuZ3RoID0gMDsKLQl3aGlsZSAobSkgewotCQlpZiAoU0NUUF9C
VUZfTEVOKG0pID09IDApIHsKLQkJCS8qIFNraXAgbWJ1ZnMgd2l0aCBOTyBsZW5ndGggKi8KLQkJ
CWlmIChwcmV2ID09IE5VTEwpIHsKLQkJCQkvKiBGaXJzdCBvbmUgKi8KLQkJCQljb250cm9sLT5k
YXRhID0gc2N0cF9tX2ZyZWUobSk7Ci0JCQkJbSA9IGNvbnRyb2wtPmRhdGE7Ci0JCQl9IGVsc2Ug
ewotCQkJCVNDVFBfQlVGX05FWFQocHJldikgPSBzY3RwX21fZnJlZShtKTsKLQkJCQltID0gU0NU
UF9CVUZfTkVYVChwcmV2KTsKLQkJCX0KLQkJCWlmIChtID09IE5VTEwpIHsKLQkJCQljb250cm9s
LT50YWlsX21idWYgPSBwcmV2OwotCQkJfQotCQkJY29udGludWU7Ci0JCX0KLQkJcHJldiA9IG07
Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX3NibG9nKHNiLCBjb250cm9sLT5kb19ub3RfcmVmX3N0
Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFMTE9DLCBTQ1RQX0JVRl9MRU4obSkpOwotCQl9Ci0J
CXNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX3NibG9n
KHNiLCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQlJFU1VM
VCwgMCk7Ci0JCX0KLQkJYXRvbWljX2FkZF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZf
TEVOKG0pKTsKLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JfQotCWlmIChwcmV2ICE9IE5VTEwp
IHsKLQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKLQl9IGVsc2UgewotCQkvKiBFdmVyeXRo
aW5nIGdvdCBjb2xsYXBzZWQgb3V0Pz8gKi8KLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRy
b2wtPndob0Zyb20pOwotCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKLQkJaWYg
KGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQotCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsK
LQkJcmV0dXJuOwotCX0KLQlpZiAoZW5kKSB7Ci0JCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7Ci0J
fQotCVRBSUxRX0lOU0VSVF9UQUlMKCZpbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwot
CWNvbnRyb2wtPm9uX3JlYWRfcSA9IDE7Ci0JaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQot
CQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQlzY3RwX2ludm9rZV9yZWN2X2NhbGxiYWNrKGlucCwgc3RjYiwgY29udHJvbCwgaW5wX3JlYWRf
bG9ja19oZWxkKTsKLSNlbmRpZgotCWlmIChpbnAgJiYgaW5wLT5zY3RwX3NvY2tldCkgewotCQlz
Y3RwX3dha2V1cF90aGVfcmVhZF9zb2NrZXQoaW5wLCBzdGNiLCBzb19sb2NrZWQpOwotCX0KLX0K
LQotLyoqKioqKioqKioqKipIT0xEIFRISVMgQ09NTUVOVCBGT1IgUEFUQ0ggRklMRSBPRgotICoq
KioqKioqKioqKipBTFRFUk5BVEUgUk9VVElORyBDT0RFCi0gKi8KLQotLyoqKioqKioqKioqKipI
T0xEIFRISVMgQ09NTUVOVCBGT1IgRU5EIE9GIFBBVENIIEZJTEUgT0YKLSAqKioqKioqKioqKioq
QUxURVJOQVRFIFJPVVRJTkcgQ09ERQotICovCi0KLXN0cnVjdCBtYnVmICoKLXNjdHBfZ2VuZXJh
dGVfY2F1c2UodWludDE2X3QgY29kZSwgY2hhciAqaW5mbykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsK
LQlzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKmNhdXNlOwotCXNpemVfdCBpbmZvX2xlbjsK
LQl1aW50MTZfdCBsZW47Ci0KLQlpZiAoKGNvZGUgPT0gMCkgfHwgKGluZm8gPT0gTlVMTCkpIHsK
LQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaW5mb19sZW4gPSBzdHJsZW4oaW5mbyk7Ci0JaWYgKGlu
Zm9fbGVuID4gKFNDVFBfTUFYX0NBVVNFX0xFTkdUSCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkcikpKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWxlbiA9ICh1aW50MTZfdCkoc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIGluZm9fbGVuKTsKLQltID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChtICE9IE5VTEwpIHsK
LQkJU0NUUF9CVUZfTEVOKG0pID0gbGVuOwotCQljYXVzZSA9IG10b2QobSwgc3RydWN0IHNjdHBf
Z2VuX2Vycm9yX2NhdXNlICopOwotCQljYXVzZS0+Y29kZSA9IGh0b25zKGNvZGUpOwotCQljYXVz
ZS0+bGVuZ3RoID0gaHRvbnMobGVuKTsKLQkJbWVtY3B5KGNhdXNlLT5pbmZvLCBpbmZvLCBpbmZv
X2xlbik7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0KLXN0cnVjdCBtYnVmICoKLXNjdHBfZ2VuZXJh
dGVfbm9fdXNlcl9kYXRhX2NhdXNlKHVpbnQzMl90IHRzbikKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsK
LQlzdHJ1Y3Qgc2N0cF9lcnJvcl9ub191c2VyX2RhdGEgKm5vX3VzZXJfZGF0YV9jYXVzZTsKLQl1
aW50MTZfdCBsZW47Ci0KLQlsZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9y
X25vX3VzZXJfZGF0YSk7Ci0JbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4sIDAsIE1fTk9X
QUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobSAhPSBOVUxMKSB7Ci0JCVNDVFBfQlVGX0xFTihtKSA9
IGxlbjsKLQkJbm9fdXNlcl9kYXRhX2NhdXNlID0gbXRvZChtLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9u
b191c2VyX2RhdGEgKik7Ci0JCW5vX3VzZXJfZGF0YV9jYXVzZS0+Y2F1c2UuY29kZSA9IGh0b25z
KFNDVFBfQ0FVU0VfTk9fVVNFUl9EQVRBKTsKLQkJbm9fdXNlcl9kYXRhX2NhdXNlLT5jYXVzZS5s
ZW5ndGggPSBodG9ucyhsZW4pOwotCQlub191c2VyX2RhdGFfY2F1c2UtPnRzbiA9IGh0b25sKHRz
bik7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0KLSNpZmRlZiBTQ1RQX01CQ05UX0xPR0dJTkcKLXZv
aWQKLXNjdHBfZnJlZV9idWZzcGFjZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAotICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSwgaW50
IGNoa19jbnQpCi17Ci0JaWYgKHRwMS0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0J
YXNvYy0+Y2h1bmtzX29uX291dF9xdWV1ZSAtPSBjaGtfY250OwotCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CQ05UX0xPR0dJTkdfRU5BQkxFKSB7Ci0J
CXNjdHBfbG9nX21iY250KFNDVFBfTE9HX01CQ05UX0RFQ1JFQVNFLAotCQkJICAgICAgIGFzb2Mt
PnRvdGFsX291dHB1dF9xdWV1ZV9zaXplLAotCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJ
ICAgICAgIDAsCi0JCQkgICAgICAgdHAxLT5tYmNudCk7Ci0JfQotCWlmIChhc29jLT50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSA+PSB0cDEtPmJvb2tfc2l6ZSkgewotCQlhdG9taWNfYWRkX2ludCgm
YXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsIC10cDEtPmJvb2tfc2l6ZSk7Ci0JfSBlbHNl
IHsKLQkJYXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOwotCX0KLQotCWlmIChzdGNi
LT5zY3RwX3NvY2tldCAmJiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkpIHx8Ci0JCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSkpKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldC0+
c29fc25kLnNiX2NjID49IHRwMS0+Ym9va19zaXplKSB7Ci0JCQlzdGNiLT5zY3RwX3NvY2tldC0+
c29fc25kLnNiX2NjIC09IHRwMS0+Ym9va19zaXplOwotCQl9IGVsc2UgewotCQkJc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7Ci0KLQkJfQotCX0KLX0KLQotI2VuZGlmCi0KLWlu
dAotc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsCi0JCQkgICB1aW50OF90IHNlbnQsIGludCBzb19sb2Nr
ZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQotCQkJICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotCSkKLXsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpzdHJxOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoayA9IE5VTEwsICp0cDI7
Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwOwotCXVpbnQzMl90IG1pZDsK
LQl1aW50MTZfdCBzaWQ7Ci0JdWludDhfdCBmb3VuZGVvbSA9IDA7Ci0JaW50IHJldF9zeiA9IDA7
Ci0JaW50IG5vdGRvbmU7Ci0JaW50IGRvX3dha2V1cF9yb3V0aW5lID0gMDsKLQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQ
X0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0
KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYKLQlzaWQgPSB0cDEtPnJl
Yy5kYXRhLnNpZDsKLQltaWQgPSB0cDEtPnJlYy5kYXRhLm1pZDsKLQlpZiAoc2VudCB8fCAhKHRw
MS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpKSB7Ci0JCXN0Y2It
PmFzb2MuYWJhbmRvbmVkX3NlbnRbMF0rKzsKLQkJc3RjYi0+YXNvYy5hYmFuZG9uZWRfc2VudFtQ
Ul9TQ1RQX1BPTElDWSh0cDEtPmZsYWdzKV0rKzsKLQkJc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0u
YWJhbmRvbmVkX3NlbnRbMF0rKzsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRT
KQotCQlzdGNiLT5hc29jLnN0cm1vdXRbc3RyZWFtXS5hYmFuZG9uZWRfc2VudFtQUl9TQ1RQX1BP
TElDWSh0cDEtPmZsYWdzKV0rKzsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXN0Y2ItPmFzb2MuYWJh
bmRvbmVkX3Vuc2VudFswXSsrOwotCQlzdGNiLT5hc29jLmFiYW5kb25lZF91bnNlbnRbUFJfU0NU
UF9QT0xJQ1kodHAxLT5mbGFncyldKys7Ci0JCXN0Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5k
b25lZF91bnNlbnRbMF0rKzsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQot
CQlzdGNiLT5hc29jLnN0cm1vdXRbc3RyZWFtXS5hYmFuZG9uZWRfdW5zZW50W1BSX1NDVFBfUE9M
SUNZKHRwMS0+ZmxhZ3MpXSsrOwotI2VuZGlmCi0JfQotCWRvIHsKLQkJcmV0X3N6ICs9IHRwMS0+
Ym9va19zaXplOwotCQlpZiAodHAxLT5kYXRhICE9IE5VTEwpIHsKLQkJCWlmICh0cDEtPnNlbnQg
PCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2Uo
dHAxKTsKLQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCQkJfQot
CQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCB0cDEsIDEpOwotCQkJc3Rj
Yi0+YXNvYy5wZWVyc19yd25kICs9IHRwMS0+c2VuZF9zaXplOwotCQkJc3RjYi0+YXNvYy5wZWVy
c19yd25kICs9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKTsKLQkJCWlmIChz
ZW50KSB7Ci0JCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NFTlRfREdfRkFJTCwgc3Rj
YiwgMCwgdHAxLCBzb19sb2NrZWQpOwotCQkJfSBlbHNlIHsKLQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsIDAsIHRwMSwgc29fbG9ja2VkKTsKLQkJ
CX0KLQkJCWlmICh0cDEtPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKLQkJ
CQl0cDEtPmRhdGEgPSBOVUxMOwotCQkJfQotCQkJZG9fd2FrZXVwX3JvdXRpbmUgPSAxOwotCQkJ
aWYgKFBSX1NDVFBfQlVGX0VOQUJMRUQodHAxLT5mbGFncykpIHsKLQkJCQlzdGNiLT5hc29jLnNl
bnRfcXVldWVfY250X3JlbW92ZWFibGUtLTsKLQkJCX0KLQkJfQotCQl0cDEtPnNlbnQgPSBTQ1RQ
X0ZPUldBUkRfVFNOX1NLSVA7Ci0JCWlmICgodHAxLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQ
X0RBVEFfTk9UX0ZSQUcpID09Ci0JCSAgICBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJCS8qIG5v
dCBmcmFnJ2VkIHdlIGFlIGRvbmUgICAqLwotCQkJbm90ZG9uZSA9IDA7Ci0JCQlmb3VuZGVvbSA9
IDE7Ci0JCX0gZWxzZSBpZiAodHAxLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFT
VF9GUkFHKSB7Ci0JCQkvKiBlbmQgb2YgZnJhZywgd2UgYXJlIGRvbmUgKi8KLQkJCW5vdGRvbmUg
PSAwOwotCQkJZm91bmRlb20gPSAxOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIEl0cyBhIGJl
Z2luIG9yIG1pZGRsZSBwaWVjZSwgd2UgbXVzdCBtYXJrIGFsbCBvZgotCQkJICogaXQKLQkJCSAq
LwotCQkJbm90ZG9uZSA9IDE7Ci0JCQl0cDEgPSBUQUlMUV9ORVhUKHRwMSwgc2N0cF9uZXh0KTsK
LQkJfQotCX0gd2hpbGUgKHRwMSAmJiBub3Rkb25lKTsKLQlpZiAoZm91bmRlb20gPT0gMCkgewot
CQkvKgotCQkgKiBUaGUgbXVsdGktcGFydCBtZXNzYWdlIHdhcyBzY2F0dGVyZWQgYWNyb3NzIHRo
ZSBzZW5kIGFuZAotCQkgKiBzZW50IHF1ZXVlLgotCQkgKi8KLQkJVEFJTFFfRk9SRUFDSF9TQUZF
KHRwMSwgJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCB0cDIpIHsKLQkJCWlmICgo
dHAxLT5yZWMuZGF0YS5zaWQgIT0gc2lkKSB8fAotCQkJICAgICghU0NUUF9NSURfRVEoc3RjYi0+
YXNvYy5pZGF0YV9zdXBwb3J0ZWQsIHRwMS0+cmVjLmRhdGEubWlkLCBtaWQpKSkgewotCQkJCWJy
ZWFrOwotCQkJfQotCQkJLyogc2F2ZSB0byBjaGsgaW4gY2FzZSB3ZSBoYXZlIHNvbWUgb24gc3Ry
ZWFtIG91dAotCQkJICogcXVldWUuIElmIHNvIGFuZCB3ZSBoYXZlIGFuIHVuLXRyYW5zbWl0dGVk
IG9uZQotCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBmdWRnZSB0aGUgVFNOLgotCQkJICovCi0JCQlj
aGsgPSB0cDE7Ci0JCQlyZXRfc3ogKz0gdHAxLT5ib29rX3NpemU7Ci0JCQlzY3RwX2ZyZWVfYnVm
c3BhY2Uoc3RjYiwgJnN0Y2ItPmFzb2MsIHRwMSwgMSk7Ci0JCQlpZiAoc2VudCkgewotCQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsIDAsIHRwMSwgc29f
bG9ja2VkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VO
U0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7Ci0JCQl9Ci0JCQlpZiAodHAx
LT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7Ci0JCQkJdHAxLT5kYXRhID0g
TlVMTDsKLQkJCX0KLQkJCS8qIE5vIGZsaWdodCBpbnZvbHZlZCBoZXJlIGJvb2sgdGhlIHNpemUg
dG8gMCAqLwotCQkJdHAxLT5ib29rX3NpemUgPSAwOwotCQkJaWYgKHRwMS0+cmVjLmRhdGEucmN2
X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCWZvdW5kZW9tID0gMTsKLQkJCX0K
LQkJCWRvX3dha2V1cF9yb3V0aW5lID0gMTsKLQkJCXRwMS0+c2VudCA9IFNDVFBfRk9SV0FSRF9U
U05fU0tJUDsKLQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlLCB0cDEsIHNj
dHBfbmV4dCk7Ci0JCQkvKiBvbiB0byB0aGUgc2VudCBxdWV1ZSBzbyB3ZSBjYW4gd2FpdCBmb3Ig
aXQgdG8gYmUgcGFzc2VkIGJ5LiAqLwotCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Mu
c2VudF9xdWV1ZSwgdHAxLAotCQkJCQkgIHNjdHBfbmV4dCk7Ci0JCQlzdGNiLT5hc29jLnNlbmRf
cXVldWVfY250LS07Ci0JCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfY250Kys7Ci0JCX0KLQl9Ci0J
aWYgKGZvdW5kZW9tID09IDApIHsKLQkJLyoKLQkJICogU3RpbGwgbm8gZW9tIGZvdW5kLiBUaGF0
IG1lYW5zIHRoZXJlCi0JCSAqIGlzIHN0dWZmIGxlZnQgb24gdGhlIHN0cmVhbSBvdXQgcXVldWUu
LiB5dWNrLgotCQkgKi8KLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQlzdHJxID0gJnN0
Y2ItPmFzb2Muc3RybW91dFtzaWRdOwotCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1
ZSk7Ci0JCWlmIChzcCAhPSBOVUxMKSB7Ci0JCQlzcC0+ZGlzY2FyZF9yZXN0ID0gMTsKLQkJCS8q
Ci0JCQkgKiBXZSBtYXkgbmVlZCB0byBwdXQgYSBjaHVuayBvbiB0aGUKLQkJCSAqIHF1ZXVlIHRo
YXQgaG9sZHMgdGhlIFRTTiB0aGF0Ci0JCQkgKiB3b3VsZCBoYXZlIGJlZW4gc2VudCB3aXRoIHRo
ZSBMQVNUCi0JCQkgKiBiaXQuCi0JCQkgKi8KLQkJCWlmIChjaGsgPT0gTlVMTCkgewotCQkJCS8q
IFllcCwgd2UgaGF2ZSB0byAqLwotCQkJCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwot
CQkJCWlmIChjaGsgPT0gTlVMTCkgewotCQkJCQkvKiB3ZSBhcmUgaG9zZWQuIEFsbCB3ZSBjYW4K
LQkJCQkJICogZG8gaXMgbm90aGluZy4uIHdoaWNoIHdpbGwKLQkJCQkJICogY2F1c2UgYW4gYWJv
cnQgaWYgdGhlIHBlZXIgaXMKLQkJCQkJICogcGF5aW5nIGF0dGVudGlvbi4KLQkJCQkJICovCi0J
CQkJCWdvdG8gb2hfd2VsbDsKLQkJCQl9Ci0JCQkJbWVtc2V0KGNoaywgMCwgc2l6ZW9mKCpjaGsp
KTsKLQkJCQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IDA7Ci0JCQkJY2hrLT5zZW50ID0gU0NU
UF9GT1JXQVJEX1RTTl9TS0lQOwotCQkJCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCQkJCWlm
IChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWlmIChzcC0+c2luZm9f
ZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgewotCQkJCQkJY2hrLT5yZWMuZGF0YS5taWQgPSAwOwot
CQkJCQl9IGVsc2UgewotCQkJCQkJY2hrLT5yZWMuZGF0YS5taWQgPSBzdHJxLT5uZXh0X21pZF9v
cmRlcmVkOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHNwLT5zaW5mb19mbGFncyAm
IFNDVFBfVU5PUkRFUkVEKSB7Ci0JCQkJCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRf
bWlkX3Vub3JkZXJlZDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNoay0+cmVjLmRhdGEubWlkID0g
c3RycS0+bmV4dF9taWRfb3JkZXJlZDsKLQkJCQkJfQotCQkJCX0KLQkJCQljaGstPnJlYy5kYXRh
LnNpZCA9IHNwLT5zaWQ7Ci0JCQkJY2hrLT5yZWMuZGF0YS5wcGlkID0gc3AtPnBwaWQ7Ci0JCQkJ
Y2hrLT5yZWMuZGF0YS5jb250ZXh0ID0gc3AtPmNvbnRleHQ7Ci0JCQkJY2hrLT5mbGFncyA9IHNw
LT5hY3RfZmxhZ3M7Ci0JCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX1BhbmRhX18pCi0JCQkJY2hrLT5yZWMuZGF0YS50c24gPSBhdG9t
aWNfZmV0Y2hhZGRfaW50KCZzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAxKTsKLSNlbHNlCi0JCQkJ
Y2hrLT5yZWMuZGF0YS50c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxKys7Ci0jZW5kaWYKLQkJ
CQlzdHJxLT5jaHVua3Nfb25fcXVldWVzKys7Ci0JCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2It
PmFzb2Muc2VudF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQkJCXN0Y2ItPmFzb2Muc2VudF9x
dWV1ZV9jbnQrKzsKLQkJCQlzdGNiLT5hc29jLnByX3NjdHBfY250Kys7Ci0JCQl9Ci0JCQljaGst
PnJlYy5kYXRhLnJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfTEFTVF9GUkFHOwotCQkJaWYgKHNwLT5z
aW5mb19mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7Ci0JCQkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxh
Z3MgfD0gU0NUUF9EQVRBX1VOT1JERVJFRDsKLQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLmlkYXRh
X3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJaWYgKChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JE
RVJFRCkgPT0gMCkgewotCQkJCQlzdHJxLT5uZXh0X21pZF9vcmRlcmVkKys7Ci0JCQkJfQotCQkJ
fSBlbHNlIHsKLQkJCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKLQkJ
CQkJc3RycS0+bmV4dF9taWRfdW5vcmRlcmVkKys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc3RycS0+
bmV4dF9taWRfb3JkZXJlZCsrOwotCQkJCX0KLQkJCX0KLQkJb2hfd2VsbDoKLQkJCWlmIChzcC0+
ZGF0YSkgewotCQkJCS8qIFB1bGwgYW55IGRhdGEgdG8gZnJlZSB1cCB0aGUgU0IgYW5kCi0JCQkJ
ICogYWxsb3cgc2VuZGVyIHRvICJhZGQgbW9yZSIgd2hpbGUgd2UKLQkJCQkgKiB3aWxsIHRocm93
IGF3YXkgOi0pCi0JCQkJICovCi0JCQkJc2N0cF9mcmVlX3NwYnVmc3BhY2Uoc3RjYiwgJnN0Y2It
PmFzb2MsIHNwKTsKLQkJCQlyZXRfc3ogKz0gc3AtPmxlbmd0aDsKLQkJCQlkb193YWtldXBfcm91
dGluZSA9IDE7Ci0JCQkJc3AtPnNvbWVfdGFrZW4gPSAxOwotCQkJCXNjdHBfbV9mcmVlbShzcC0+
ZGF0YSk7Ci0JCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJCXNwLT50YWlsX21idWYgPSBOVUxMOwot
CQkJCXNwLT5sZW5ndGggPSAwOwotCQkJfQotCQl9Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0
Y2IpOwotCX0KLQlpZiAoZG9fd2FrZXVwX3JvdXRpbmUpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJc3RydWN0IHNvY2tldCAqc287
Ci0KLQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKLQkJaWYgKCFzb19sb2NrZWQp
IHsKLQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkg
ewotCQkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCi0JCQkJ
U0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJCQlyZXR1cm4gKHJldF9zeik7Ci0JCQl9Ci0J
CX0KLSNlbmRpZgotCQlzY3RwX3Nvd3dha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3Nv
Y2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCi0JCWlmICghc29fbG9ja2VkKSB7Ci0JCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEp
OwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChyZXRfc3opOwotfQotCi0vKgotICogY2hlY2tz
IHRvIHNlZSBpZiB0aGUgZ2l2ZW4gYWRkcmVzcywgc2EsIGlzIG9uZSB0aGF0IGlzIGN1cnJlbnRs
eSBrbm93biBieQotICogdGhlIGtlcm5lbCBub3RlOiBjYW4ndCBkaXN0aW5ndWlzaCB0aGUgc2Ft
ZSBhZGRyZXNzIG9uIG11bHRpcGxlIGludGVyZmFjZXMKLSAqIGFuZCBkb2Vzbid0IGhhbmRsZSBt
dWx0aXBsZSBhZGRyZXNzZXMgd2l0aCBkaWZmZXJlbnQgem9uZS9zY29wZSBpZCdzIG5vdGU6Ci0g
KiBpZmFfaWZ3aXRoYWRkcigpIGNvbXBhcmVzIHRoZSBlbnRpcmUgc29ja2FkZHIgc3RydWN0Ci0g
Ki8KLXN0cnVjdCBzY3RwX2lmYSAqCi1zY3RwX2ZpbmRfaWZhX2luX2VwKHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJICAgIGludCBob2xkc19sb2NrKQot
ewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCWlmIChob2xkc19sb2NrID09IDApIHsK
LQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQl9Ci0KLQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAt
PnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCWlmIChsYWRkci0+aWZhID09IE5V
TEwpCi0JCQljb250aW51ZTsKLQkJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBsYWRkci0+aWZhLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIElORVQKLQkJaWYgKGFk
ZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KilhZGRyKS0+c2luX2FkZHIuc19hZGRyID09Ci0JCQkgICAgbGFkZHItPmlmYS0+YWRkcmVzcy5z
aW4uc2luX2FkZHIuc19hZGRyKSB7Ci0JCQkJLyogZm91bmQgaGltLiAqLwotCQkJCWlmIChob2xk
c19sb2NrID09IDApIHsKLQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCX0KLQkJCQly
ZXR1cm4gKGxhZGRyLT5pZmEpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZmRl
ZiBJTkVUNgotCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoU0NU
UDZfQVJFX0FERFJfRVFVQUwoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyLAotCQkJCQkJICZs
YWRkci0+aWZhLT5hZGRyZXNzLnNpbjYpKSB7Ci0JCQkJLyogZm91bmQgaGltLiAqLwotCQkJCWlm
IChob2xkc19sb2NrID09IDApIHsKLQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCX0K
LQkJCQlyZXR1cm4gKGxhZGRyLT5pZmEpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZf
Q09OTikgewotCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyKS0+c2Nvbm5fYWRk
ciA9PSBsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25uLnNjb25uX2FkZHIpIHsKLQkJCQkvKiBmb3Vu
ZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQkJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQkJfQotCQkJCXJldHVybiAobGFkZHItPmlmYSk7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotdWludDMyX3QKLXNjdHBf
Z2V0X2lmYV9oYXNoX3ZhbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0Jc3dpdGNoIChhZGRy
LT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCXsKLQkJc3RydWN0
IHNvY2thZGRyX2luICpzaW47Ci0KLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7
Ci0JCXJldHVybiAoc2luLT5zaW5fYWRkci5zX2FkZHIgXiAoc2luLT5zaW5fYWRkci5zX2FkZHIg
Pj4gMTYpKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0Jewot
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQl1aW50MzJfdCBoYXNoX29mX2FkZHI7Ci0K
LQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLSNpZiAhZGVmaW5lZChfX1dp
bmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCQloYXNoX29mX2FkZHIgPSAoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlswXSArCi0JCQkJ
c2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsxXSArCi0JCQkJc2luNi0+c2luNl9hZGRyLnM2X2Fk
ZHIzMlsyXSArCi0JCQkJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXSk7Ci0jZWxzZQotCQlo
YXNoX29mX2FkZHIgPSAoKCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIpWzBdICsKLQkJCQko
KHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMV0gKwotCQkJCSgodWludDMyX3QgKikmc2lu
Ni0+c2luNl9hZGRyKVsyXSArCi0JCQkJKCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIpWzNd
KTsKLSNlbmRpZgotCQloYXNoX29mX2FkZHIgPSAoaGFzaF9vZl9hZGRyIF4gKGhhc2hfb2ZfYWRk
ciA+PiAxNikpOwotCQlyZXR1cm4gKGhhc2hfb2ZfYWRkcik7Ci0JfQotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubjsKLQkJdWludHB0cl90IHRlbXA7Ci0KLQkJc2Nvbm4gPSAoc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKilhZGRyOwotCQl0ZW1wID0gKHVpbnRwdHJfdClzY29ubi0+c2Nvbm5fYWRk
cjsKLQkJcmV0dXJuICgodWludDMyX3QpKHRlbXAgXiAodGVtcCA+PiAxNikpKTsKLQl9Ci0jZW5k
aWYKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RydWN0IHNj
dHBfaWZhICoKLXNjdHBfZmluZF9pZmFfYnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVp
bnQzMl90IHZyZl9pZCwgaW50IGhvbGRzX2xvY2spCi17Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3Rw
X2lmYXA7Ci0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0Jc3RydWN0IHNjdHBfaWZhbGlzdCAqaGFz
aF9oZWFkOwotCXVpbnQzMl90IGhhc2hfb2ZfYWRkcjsKLQotCWlmIChob2xkc19sb2NrID09IDAp
Ci0JCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLQotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lk
KTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkKLQkJCVNDVFBf
SVBJX0FERFJfUlVOTE9DSygpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCWhhc2hfb2ZfYWRk
ciA9IHNjdHBfZ2V0X2lmYV9oYXNoX3ZhbChhZGRyKTsKLQotCWhhc2hfaGVhZCA9ICZ2cmYtPnZy
Zl9hZGRyX2hhc2hbKGhhc2hfb2ZfYWRkciAmIHZyZi0+dnJmX2FkZHJfaGFzaG1hcmspXTsKLQlp
ZiAoaGFzaF9oZWFkID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoImhhc2hfb2ZfYWRkcjoleCBt
YXNrOiV4IHRhYmxlOiV4IC0gIiwKLQkJCSAgICBoYXNoX29mX2FkZHIsICh1aW50MzJfdCl2cmYt
PnZyZl9hZGRyX2hhc2htYXJrLAotCQkJICAgICh1aW50MzJfdCkoaGFzaF9vZl9hZGRyICYgdnJm
LT52cmZfYWRkcl9oYXNobWFyaykpOwotCQlzY3RwX3ByaW50X2FkZHJlc3MoYWRkcik7Ci0JCVND
VFBfUFJJTlRGKCJObyBzdWNoIGJ1Y2tldCBmb3IgYWRkcmVzc1xuIik7Ci0JCWlmIChob2xkc19s
b2NrID09IDApCi0JCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmFwLCBoYXNoX2hlYWQsIG5leHRfYnVja2V0KSB7
Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIElORVQKLQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBB
Rl9JTkVUKSB7Ci0JCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX2FkZHIu
c19hZGRyID09Ci0JCQkgICAgc2N0cF9pZmFwLT5hZGRyZXNzLnNpbi5zaW5fYWRkci5zX2FkZHIp
IHsKLQkJCQkvKiBmb3VuZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkKLQkJCQkJ
U0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuIChzY3RwX2lmYXApOwotCQkJCWJy
ZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyLAotCQkJCQkJICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNikpIHsK
LQkJCQkvKiBmb3VuZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkKLQkJCQkJU0NU
UF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuIChzY3RwX2lmYXApOwotCQkJCWJyZWFr
OwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWlmIChh
ZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2Nv
bm4gKilhZGRyKS0+c2Nvbm5fYWRkciA9PSBzY3RwX2lmYXAtPmFkZHJlc3Muc2Nvbm4uc2Nvbm5f
YWRkcikgewotCQkJCS8qIGZvdW5kIGhpbS4gKi8KLQkJCQlpZiAoaG9sZHNfbG9jayA9PSAwKQot
CQkJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQkJCQlyZXR1cm4gKHNjdHBfaWZhcCk7Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKQot
CQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMg
dm9pZAotc2N0cF91c2VyX3JjdmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCAqZnJl
ZWRfc29fZmFyLCBpbnQgaG9sZF9ybG9jaywKLQkgICAgICAgdWludDMyX3QgcnduZF9yZXEpCi17
Ci0JLyogVXNlciBwdWxsZWQgc29tZSBkYXRhLCBkbyB3ZSBuZWVkIGEgcnduZCB1cGRhdGU/ICov
Ci0JaW50IHJfdW5sb2NrZWQgPSAwOwotCXVpbnQzMl90IGRpZiwgcnduZDsKLQlzdHJ1Y3Qgc29j
a2V0ICpzbyA9IE5VTEw7Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCi0JaWYgKHN0Y2ItPmFzb2Muc3Rh
dGUgJiAoU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCB8Ci0JCQkJU0NUUF9TVEFURV9TSFVU
RE9XTl9SRUNFSVZFRCB8Ci0JCQkJU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKLQkJ
LyogUHJlLWNoZWNrIElmIHdlIGFyZSBmcmVlaW5nIG5vIHVwZGF0ZSAqLwotCQlnb3RvIG5vX2xv
Y2s7Ci0JfQotCVNDVFBfSU5QX0lOQ1JfUkVGKHN0Y2ItPnNjdHBfZXApOwotCWlmICgoc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCSAg
ICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExH
T05FKSkgewotCQlnb3RvIG91dDsKLQl9Ci0Jc28gPSBzdGNiLT5zY3RwX3NvY2tldDsKLQlpZiAo
c28gPT0gTlVMTCkgewotCQlnb3RvIG91dDsKLQl9Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmZy
ZWVkX2J5X3NvcmN2X3NpbmNlbGFzdCwgKmZyZWVkX3NvX2Zhcik7Ci0JLyogSGF2ZSB5b3UgaGF2
ZSBmcmVlZCBlbm91Z2ggdG8gbG9vayAqLwotCSpmcmVlZF9zb19mYXIgPSAwOwotCS8qIFllcCwg
aXRzIHdvcnRoIGEgbG9vayBhbmQgdGhlIGxvY2sgb3ZlcmhlYWQgKi8KLQotCS8qIEZpZ3VyZSBv
dXQgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAqLwotCXJ3bmQgPSBzY3RwX2NhbGNfcnduZChzdGNi
LCAmc3RjYi0+YXNvYyk7Ci0JaWYgKHJ3bmQgPj0gc3RjYi0+YXNvYy5teV9sYXN0X3JlcG9ydGVk
X3J3bmQpIHsKLQkJZGlmID0gcnduZCAtIHN0Y2ItPmFzb2MubXlfbGFzdF9yZXBvcnRlZF9yd25k
OwotCX0gZWxzZSB7Ci0JCWRpZiA9IDA7Ci0JfQotCWlmIChkaWYgPj0gcnduZF9yZXEpIHsKLQkJ
aWYgKGhvbGRfcmxvY2spIHsKLQkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXAp
OwotCQkJcl91bmxvY2tlZCA9IDE7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQ
X1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkvKgotCQkJICogT25lIGxhc3QgY2hlY2sg
YmVmb3JlIHdlIGFsbG93IHRoZSBndXkgcG9zc2libHkKLQkJCSAqIHRvIGdldCBpbi4gVGhlcmUg
aXMgYSByYWNlLCB3aGVyZSB0aGUgZ3V5IGhhcyBub3QKLQkJCSAqIHJlYWNoZWQgdGhlIGdhdGUu
IEluIHRoYXQgY2FzZQotCQkJICovCi0JCQlnb3RvIG91dDsKLQkJfQotCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQpIHsKLQkJCS8qIE5vIHJlcG9ydHMgaGVyZSAqLwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfd3Vfc2Fja3Nf
c2VudCk7Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKLQotCQlzY3Rw
X2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCSAgU0NUUF9PVVRQVVRfRlJP
TV9VU1JfUkNWRCwgU0NUUF9TT19MT0NLRUQpOwotCQkvKiBtYWtlIHN1cmUgbm8gdGltZXIgaXMg
cnVubmluZyAqLwotCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIE5VTEwsCi0JCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVU
SUwgKyBTQ1RQX0xPQ182KTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCX0gZWxzZSB7Ci0J
CS8qIFVwZGF0ZSBob3cgbXVjaCB3ZSBoYXZlIHBlbmRpbmcgKi8KLQkJc3RjYi0+ZnJlZWRfYnlf
c29yY3Zfc2luY2VsYXN0ID0gZGlmOwotCX0KLSBvdXQ6Ci0JaWYgKHNvICYmIHJfdW5sb2NrZWQg
JiYgaG9sZF9ybG9jaykgewotCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7Ci0J
fQotCi0JU0NUUF9JTlBfREVDUl9SRUYoc3RjYi0+c2N0cF9lcCk7Ci0gbm9fbG9jazoKLQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQlyZXR1cm47Ci19Ci0KLWludAot
c2N0cF9zb3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc28sCi0gICAgc3RydWN0IHVpbyAqdWlvLAot
ICAgIHN0cnVjdCBtYnVmICoqbXAsCi0gICAgc3RydWN0IHNvY2thZGRyICpmcm9tLAotICAgIGlu
dCBmcm9tbGVuLAotICAgIGludCAqbXNnX2ZsYWdzLAotICAgIHN0cnVjdCBzY3RwX3NuZHJjdmlu
Zm8gKnNpbmZvLAotICAgIGludCBmaWxsaW5nX3NpbmZvKQotewotCS8qCi0JICogTVNHIGZsYWdz
IHdlIHdpbGwgbG9vayBhdCBNU0dfRE9OVFdBSVQgLSBub24tYmxvY2tpbmcgSU8uCi0JICogTVNH
X1BFRUsgLSBMb29rIGRvbid0IHRvdWNoIDotRCAob25seSB2YWxpZCB3aXRoIE9VVCBtYnVmIGNv
cHkKLQkgKiBtcD1OVUxMIHRodXMgdWlvIGlzIHRoZSBjb3B5IG1ldGhvZCB0byB1c2VybGFuZCkg
TVNHX1dBSVRBTEwgLSA/PwotCSAqIE9uIHRoZSB3YXkgb3V0IHdlIG1heSBzZW5kIG91dCBhbnkg
Y29tYmluYXRpb24gb2Y6Ci0JICogTVNHX05PVElGSUNBVElPTiBNU0dfRU9SCi0JICoKLQkgKi8K
LQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTDsKLQlpbnQgbXlfbGVuID0gMDsKLQlpbnQg
Y3BfbGVuID0gMCwgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sID0gTlVMTCwgKmN0bCA9IE5VTEwsICpueHQgPSBOVUxMOwotCXN0cnVjdCBtYnVmICptID0g
TlVMTDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCWludCB3YWtldXBfcmVhZF9z
b2NrZXQgPSAwOwotCWludCBmcmVlY250X2FwcGxpZWQgPSAwOwotCWludCBvdXRfZmxhZ3MgPSAw
LCBpbl9mbGFncyA9IDA7Ci0JaW50IGJsb2NrX2FsbG93ZWQgPSAxOwotCXVpbnQzMl90IGZyZWVk
X3NvX2ZhciA9IDA7Ci0JdWludDMyX3QgY29waWVkX3NvX2ZhciA9IDA7Ci0JaW50IGluX2Vlb3Jf
bW9kZSA9IDA7Ci0JaW50IG5vX3Jjdl9uZWVkZWQgPSAwOwotCXVpbnQzMl90IHJ3bmRfcmVxID0g
MDsKLQlpbnQgaG9sZF9zYmxvY2sgPSAwOwotCWludCBob2xkX3Jsb2NrID0gMDsKLQlzc2l6ZV90
IHNsZW4gPSAwOwotCXVpbnQzMl90IGhlbGRfbGVuZ3RoID0gMDsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKLQlpbnQgc29ja2J1Zl9sb2Nr
ID0gMDsKLSNlbmRpZgotCi0JaWYgKHVpbyA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCXJldHVy
biAoRUlOVkFMKTsKLQl9Ci0KLQlpZiAobXNnX2ZsYWdzKSB7Ci0JCWluX2ZsYWdzID0gKm1zZ19m
bGFnczsKLQkJaWYgKGluX2ZsYWdzICYgTVNHX1BFRUspCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19yZWFkX3BlZWtzKTsKLQl9IGVsc2UgewotCQlpbl9mbGFncyA9IDA7Ci0JfQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKLQlzbGVuID0gdWlvLT51
aW9fcmVzaWQ7Ci0jZWxzZQotCXNsZW4gPSB1aW9fcmVzaWQodWlvKTsKLSNlbmRpZgotI2Vsc2UK
LQlzbGVuID0gdWlvLT51aW9fcmVzaWQ7Ci0jZW5kaWYKLQotCS8qIFB1bGwgaW4gYW5kIHNldCB1
cCBvdXIgaW50IGZsYWdzICovCi0JaWYgKGluX2ZsYWdzICYgTVNHX09PQikgewotCQkvKiBPdXQg
b2YgYmFuZCdzIE5PVCBzdXBwb3J0ZWQgKi8KLQkJcmV0dXJuIChFT1BOT1RTVVBQKTsKLQl9Ci0J
aWYgKChpbl9mbGFncyAmIE1TR19QRUVLKSAmJiAobXAgIT0gTlVMTCkpIHsKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsK
LQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpZiAoKGluX2ZsYWdzICYgKE1TR19ET05UV0FJVAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAwCi0J
CQkgfCBNU0dfTkJJTwotI2VuZGlmCi0JCSAgICAgKSkgfHwKLQkgICAgU0NUUF9TT19JU19OQklP
KHNvKSkgewotCQlibG9ja19hbGxvd2VkID0gMDsKLQl9Ci0JLyogc2V0dXAgdGhlIGVuZHBvaW50
ICovCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wID09
IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUFVUSUwsIEVGQVVMVCk7Ci0JCXJldHVybiAoRUZBVUxUKTsKLQl9Ci0JcnduZF9yZXEg
PSAoU0NUUF9TQl9MSU1JVF9SQ1Yoc28pID4+IFNDVFBfUldORF9ISVdBVF9TSElGVCk7Ci0JLyog
TXVzdCBiZSBhdCBsZWFzdCBhIE1UVSdzIHdvcnRoICovCi0JaWYgKHJ3bmRfcmVxIDwgU0NUUF9N
SU5fUldORCkKLQkJcnduZF9yZXEgPSBTQ1RQX01JTl9SV05EOwotCWluX2Vlb3JfbW9kZSA9IHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUik7Ci0JaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfUkVDVl9SV05EX0xP
R0dJTkdfRU5BQkxFKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBM
RV9MRU9QQVJEKQotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRFUiwKLQkJCSAgICAg
ICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2NjLCB1aW8tPnVpb19yZXNp
ZCk7Ci0jZWxzZQotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRFUiwKLQkJCSAgICAg
ICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2NjLCB1aW9fcmVzaWQodWlv
KSk7Ci0jZW5kaWYKLSNlbHNlCi0JCXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSLAot
CQkJICAgICAgIHJ3bmRfcmVxLCBpbl9lZW9yX21vZGUsIHNvLT5zb19yY3Yuc2JfY2MsICh1aW50
MzJfdCl1aW8tPnVpb19yZXNpZCk7Ci0jZW5kaWYKLQl9Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKLQlob2xkX3NibG9jayA9IDE7Ci0jZW5k
aWYKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICZTQ1RQX1JFQ1Zf
UldORF9MT0dHSU5HX0VOQUJMRSkgewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmlu
ZWQoQVBQTEVfTEVPUEFSRCkKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVJQTCwK
LQkJCSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNvX3Jjdi5zYl9jYywgdWlv
LT51aW9fcmVzaWQpOwotI2Vsc2UKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVJQ
TCwKLQkJCSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNvX3Jjdi5zYl9jYywg
dWlvX3Jlc2lkKHVpbykpOwotI2VuZGlmCi0jZWxzZQotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NP
UkVDVl9FTlRFUlBMLAotCQkJICAgICAgIHJ3bmRfcmVxLCBibG9ja19hbGxvd2VkLCBzby0+c29f
cmN2LnNiX2NjLCAodWludDMyX3QpdWlvLT51aW9fcmVzaWQpOwotI2VuZGlmCi0JfQotCi0jaWYg
ZGVmaW5lZChfX0FQUExFX18pCi0JZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dB
SVQoaW5fZmxhZ3MpKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQllcnJv
ciA9IHNibG9jaygmc28tPnNvX3JjdiwgKGJsb2NrX2FsbG93ZWQgPyBTQkxfV0FJVCA6IDApKTsK
LSNlbmRpZgotCWlmIChlcnJvcikgewotCQlnb3RvIHJlbGVhc2VfdW5sb2NrZWQ7Ci0JfQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDcwMDAwMAotICAg
ICAgICBzb2NrYnVmX2xvY2sgPSAxOwotI2VuZGlmCi0gcmVzdGFydDoKLSNpZiAoZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDApIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQlpZiAoaG9sZF9zYmxvY2sgPT0gMCkgewotCQlTT0NLQlVGX0xPQ0soJnNv
LT5zb19yY3YpOwotCQlob2xkX3NibG9jayA9IDE7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0Jc2J1bmxvY2soJnNvLT5zb19yY3YsIDEpOwotI2VuZGlmCi0KLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAwMAotCXNidW5sb2Nr
KCZzby0+c29fcmN2KTsKLSNlbmRpZgotCi0gcmVzdGFydF9ub3NibG9ja3M6Ci0JaWYgKGhvbGRf
c2Jsb2NrID09IDApIHsKLQkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxv
Y2sgPSAxOwotCX0KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VU
X0FMTEdPTkUpKSB7Ci0JCWdvdG8gb3V0OwotCX0KLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0J
aWYgKChzby0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSAmJiAoc28tPnNvX3Jj
di5zYl9jYyA9PSAwKSkgewotI2Vsc2UKLQlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX0NBTlRSQ1ZN
T1JFKSAmJiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSkgewotI2VuZGlmCi0JCWlmIChzby0+c29f
ZXJyb3IpIHsKLQkJCWVycm9yID0gc28tPnNvX2Vycm9yOwotCQkJaWYgKChpbl9mbGFncyAmIE1T
R19QRUVLKSA9PSAwKQotCQkJCXNvLT5zb19lcnJvciA9IDA7Ci0JCQlnb3RvIG91dDsKLQkJfSBl
bHNlIHsKLQkJCWlmIChzby0+c29fcmN2LnNiX2NjID09IDApIHsKLQkJCQkvKiBpbmRpY2F0ZSBF
T0YgKi8KLQkJCQllcnJvciA9IDA7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYg
KHNvLT5zb19yY3Yuc2JfY2MgPD0gaGVsZF9sZW5ndGgpIHsKLQkJaWYgKHNvLT5zb19lcnJvcikg
ewotCQkJZXJyb3IgPSBzby0+c29fZXJyb3I7Ci0JCQlpZiAoKGluX2ZsYWdzICYgTVNHX1BFRUsp
ID09IDApIHsKLQkJCQlzby0+c29fZXJyb3IgPSAwOwotCQkJfQotCQkJZ290byBvdXQ7Ci0JCX0K
LQkJaWYgKChzby0+c29fcmN2LnNiX2NjID09IDApICYmCi0JCSAgICAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSkgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDApIHsKLQkJCQkvKiBGb3IgYWN0aXZlIG9w
ZW4gc2lkZSBjbGVhciBmbGFncyBmb3IgcmUtdXNlCi0JCQkJICogcGFzc2l2ZSBvcGVuIGlzIGJs
b2NrZWQgYnkgY29ubmVjdC4KLQkJCQkgKi8KLQkJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQpIHsKLQkJCQkJLyogWW91IHdlcmUgYWJvcnRlZCwgcGFz
c2l2ZSBzaWRlIGFsd2F5cyBoaXRzIGhlcmUgKi8KLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUNPTk5SRVNFVCk7Ci0JCQkJCWVy
cm9yID0gRUNPTk5SRVNFVDsKLQkJCQl9Ci0JCQkJc28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05O
RUNUSU5HIHwKLQkJCQkJCSAgU1NfSVNESVNDT05ORUNUSU5HIHwKLQkJCQkJCSAgU1NfSVNDT05G
SVJNSU5HIHwKLQkJCQkJCSAgU1NfSVNDT05ORUNURUQpOwotCQkJCWlmIChlcnJvciA9PSAwKSB7
Ci0JCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FTX0NPTk5FQ1RF
RCkgPT0gMCkgewotCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQVVRJTCwgRU5PVENPTk4pOwotCQkJCQkJZXJyb3IgPSBFTk9UQ09OTjsKLQkJ
CQkJfQotCQkJCX0KLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQlpZiAoYmxvY2tfYWxsb3dl
ZCkgewotCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19yY3YpOwotCQkJaWYgKGVycm9yKSB7Ci0J
CQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQloZWxkX2xlbmd0aCA9IDA7Ci0JCQlnb3RvIHJlc3RhcnRf
bm9zYmxvY2tzOwotCQl9IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRVdPVUxEQkxPQ0spOwotCQkJZXJyb3IgPSBFV09V
TERCTE9DSzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmIChob2xkX3NibG9jayA9PSAxKSB7
Ci0JCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxvY2sgPSAwOwotCX0K
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQllcnJvciA9IHNibG9jaygmc28tPnNvX3JjdiwgU0JM
T0NLV0FJVChpbl9mbGFncykpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAKLQllcnJvciA9IHNibG9jaygmc28tPnNvX3Jjdiwg
KGJsb2NrX2FsbG93ZWQgPyBNX1dBSVRPSyA6IDApKTsKLSNlbmRpZgotCS8qIHdlIHBvc3NpYmx5
IGhhdmUgZGF0YSB3ZSBjYW4gcmVhZCAqLwotCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0J
Y29udHJvbCA9IFRBSUxRX0ZJUlNUKCZpbnAtPnJlYWRfcXVldWUpOwotCWlmIChjb250cm9sID09
IE5VTEwpIHsKLQkJLyogVGhpcyBjb3VsZCBiZSBoYXBwZW5pbmcgc2luY2UKLQkJICogdGhlIGFw
cGVuZGVyIGRpZCB0aGUgaW5jcmVtZW50IGJ1dCBhcyBub3QKLQkJICogeWV0IGRpZCB0aGUgdGFp
bHEgaW5zZXJ0IG9udG8gdGhlIHJlYWRfcXVldWUKLQkJICovCi0JCWlmIChob2xkX3Jsb2NrID09
IDApIHsKLQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQl9Ci0JCWNvbnRyb2wgPSBUQUlM
UV9GSVJTVCgmaW5wLT5yZWFkX3F1ZXVlKTsKLQkJaWYgKChjb250cm9sID09IE5VTEwpICYmIChz
by0+c29fcmN2LnNiX2NjICE9IDApKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJcGFuaWMoIkh1
aCwgaXRzIG5vbiB6ZXJvIGFuZCBub3RoaW5nIG9uIGNvbnRyb2w/Iik7Ci0jZW5kaWYKLQkJCXNv
LT5zb19yY3Yuc2JfY2MgPSAwOwotCQl9Ci0JCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7Ci0J
CWhvbGRfcmxvY2sgPSAwOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0JaWYgKChjb250cm9sLT5s
ZW5ndGggPT0gMCkgJiYKLQkgICAgKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYikpIHsKLQkJLyog
Q2xlYW4gdXAgY29kZSBmb3IgZnJlZWluZyBhc3NvYyB0aGF0IGxlZnQgYmVoaW5kIGEgcGRhcGku
LgotCQkgKiBtYXliZSBhIHBlZXIgaW4gRUVPUiB0aGF0IGp1c3QgY2xvc2VkIGFmdGVyIHNlbmRp
bmcgYW5kCi0JCSAqIG5ldmVyIGluZGljYXRlZCBhIEVPUi4KLQkJICovCi0JCWlmIChob2xkX3Js
b2NrID09IDApIHsKLQkJCWhvbGRfcmxvY2sgPSAxOwotCQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlu
cCk7Ci0JCX0KLQkJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOwotCQlpZiAoY29udHJvbC0+ZGF0
YSkgewotCQkJLyogSG1tIHRoZXJlIGlzIGRhdGEgaGVyZSAuLiBmaXggKi8KLQkJCXN0cnVjdCBt
YnVmICptX3RtcDsKLQkJCWludCBjbnQgPSAwOwotCQkJbV90bXAgPSBjb250cm9sLT5kYXRhOwot
CQkJd2hpbGUgKG1fdG1wKSB7Ci0JCQkJY250ICs9IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCQkJ
aWYgKFNDVFBfQlVGX05FWFQobV90bXApID09IE5VTEwpIHsKLQkJCQkJY29udHJvbC0+dGFpbF9t
YnVmID0gbV90bXA7Ci0JCQkJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7Ci0JCQkJfQotCQkJCW1f
dG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JCQl9Ci0JCQljb250cm9sLT5sZW5ndGggPSBj
bnQ7Ci0JCX0gZWxzZSB7Ci0JCQkvKiByZW1vdmUgaXQgKi8KLQkJCVRBSUxRX1JFTU9WRSgmaW5w
LT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCS8qIEFkZCBiYWNrIGFueSBoaWRkZW5k
IGRhdGEgKi8KLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKLQkJ
CXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOwotCQl9Ci0JCWlmIChob2xkX3Jsb2Nr
KSB7Ci0JCQlob2xkX3Jsb2NrID0gMDsKLQkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7Ci0J
CX0KLQkJZ290byByZXN0YXJ0OwotCX0KLQlpZiAoKGNvbnRyb2wtPmxlbmd0aCA9PSAwKSAmJgot
CSAgICAoY29udHJvbC0+ZW5kX2FkZGVkID09IDEpKSB7Ci0JCS8qIERvIHdlIGFsc28gbmVlZCB0
byBjaGVjayBmb3IgKGNvbnRyb2wtPnBkYXBpX2Fib3J0ZWQgPT0gMSk/ICovCi0JCWlmIChob2xk
X3Jsb2NrID09IDApIHsKLQkJCWhvbGRfcmxvY2sgPSAxOwotCQkJU0NUUF9JTlBfUkVBRF9MT0NL
KGlucCk7Ci0JCX0KLQkJVEFJTFFfUkVNT1ZFKCZpbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5l
eHQpOwotCQlpZiAoY29udHJvbC0+ZGF0YSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCXBhbmlj
KCJjb250cm9sLT5kYXRhIG5vdCBudWxsIGJ1dCBjb250cm9sLT5sZW5ndGggPT0gMCIpOwotI2Vs
c2UKLQkJCVNDVFBfUFJJTlRGKCJTdHJhbmdlLCBkYXRhIGxlZnQgaW4gdGhlIGNvbnRyb2wgYnVm
ZmVyLiBDbGVhbmluZyB1cC5cbiIpOwotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOwot
CQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYKLQkJfQotCQlpZiAoY29udHJvbC0+YXV4
X2RhdGEpIHsKLQkJCXNjdHBfbV9mcmVlIChjb250cm9sLT5hdXhfZGF0YSk7Ci0JCQljb250cm9s
LT5hdXhfZGF0YSA9IE5VTEw7Ci0JCX0KLSNpZmRlZiBJTlZBUklBTlRTCi0JCWlmIChjb250cm9s
LT5vbl9zdHJtX3EpIHsKLQkJCXBhbmljKCJBYm91dCB0byBmcmVlIGN0bDolcCBzbzolcCBhbmQg
aXRzIGluICVkIiwKLQkJCSAgICAgIGNvbnRyb2wsIHNvLCBjb250cm9sLT5vbl9zdHJtX3EpOwot
CQl9Ci0jZW5kaWYKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOwot
CQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKLQkJaWYgKGhvbGRfcmxvY2spIHsK
LQkJCWhvbGRfcmxvY2sgPSAwOwotCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJfQot
CQlnb3RvIHJlc3RhcnQ7Ci0JfQotCWlmIChjb250cm9sLT5sZW5ndGggPT0gMCkgewotCQlpZiAo
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkp
ICYmCi0JCSAgICAoZmlsbGluZ19zaW5mbykpIHsKLQkJCS8qIGZpbmQgYSBtb3JlIHN1aXRhYmxl
IG9uZSB0aGVuIHRoaXMgKi8KLQkJCWN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4dCk7Ci0J
CQl3aGlsZSAoY3RsKSB7Ci0JCQkJaWYgKChjdGwtPnN0Y2IgIT0gY29udHJvbC0+c3RjYikgJiYg
KGN0bC0+bGVuZ3RoKSAmJgotCQkJCSAgICAoY3RsLT5zb21lX3Rha2VuIHx8Ci0JCQkJICAgICAo
Y3RsLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHx8Ci0JCQkJICAgICAoKGN0bC0+ZG9f
bm90X3JlZl9zdGNiID09IDApICYmCi0JCQkJICAgICAgKGN0bC0+c3RjYi0+YXNvYy5zdHJtaW5b
Y3RsLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPT0gMCkpKQotCQkJCQkpIHsKLQkJ
CQkJLyotCi0JCQkJCSAqIElmIHdlIGhhdmUgYSBkaWZmZXJlbnQgVENCIG5leHQsIGFuZCB0aGVy
ZSBpcyBkYXRhCi0JCQkJCSAqIHByZXNlbnQuIElmIHdlIGhhdmUgYWxyZWFkeSB0YWtlbiBzb21l
IChwZGFwaSksIE9SIHdlIGNhbgotCQkJCQkgKiByZWYgdGhlIHRjYiBhbmQgbm8gZGVsaXZlcnkg
YXMgc3RhcnRlZCBvbiB0aGlzIHN0cmVhbSwgd2UKLQkJCQkJICogdGFrZSBpdC4gTm90ZSB3ZSBh
bGxvdyBhIG5vdGlmaWNhdGlvbiBvbiBhIGRpZmZlcmVudAotCQkJCQkgKiBhc3NvYyB0byBiZSBk
ZWxpdmVyZWQuLgotCQkJCQkgKi8KLQkJCQkJY29udHJvbCA9IGN0bDsKLQkJCQkJZ290byBmb3Vu
ZF9vbmU7Ci0JCQkJfSBlbHNlIGlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfSU5URVJMRUFWRV9TVFJNUykpICYmCi0JCQkJCSAgIChjdGwtPmxlbmd0aCkgJiYKLQkJ
CQkJICAgKChjdGwtPnNvbWVfdGFrZW4pIHx8Ci0JCQkJCSAgICAoKGN0bC0+ZG9fbm90X3JlZl9z
dGNiID09IDApICYmCi0JCQkJCSAgICAgKChjdGwtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElP
TikgPT0gMCkgJiYKLQkJCQkJICAgICAoY3RsLT5zdGNiLT5hc29jLnN0cm1pbltjdGwtPnNpbmZv
X3N0cmVhbV0uZGVsaXZlcnlfc3RhcnRlZCA9PSAwKSkpKSB7Ci0JCQkJCS8qLQotCQkJCQkgKiBJ
ZiB3ZSBoYXZlIHRoZSBzYW1lIHRjYiwgYW5kIHRoZXJlIGlzIGRhdGEgcHJlc2VudCwgYW5kIHdl
Ci0JCQkJCSAqIGhhdmUgdGhlIHN0cm0gaW50ZXJsZWF2ZSBmZWF0dXJlIHByZXNlbnQuIFRoZW4g
aWYgd2UgaGF2ZQotCQkJCQkgKiB0YWtlbiBzb21lIChwZGFwaSkgb3Igd2UgY2FuIHJlZmVyIHRv
IHRodCB0Y2IgQU5EIHdlIGhhdmUKLQkJCQkJICogbm90IHN0YXJ0ZWQgYSBkZWxpdmVyeSBmb3Ig
dGhpcyBzdHJlYW0sIHdlIGNhbiB0YWtlIGl0LgotCQkJCQkgKiBOb3RlIHdlIGRvIE5PVCBhbGxv
dyBhIG5vdGlmaWNhaXRvbiBvbiB0aGUgc2FtZSBhc3NvYyB0bwotCQkJCQkgKiBiZSBkZWxpdmVy
ZWQuCi0JCQkJCSAqLwotCQkJCQljb250cm9sID0gY3RsOwotCQkJCQlnb3RvIGZvdW5kX29uZTsK
LQkJCQl9Ci0JCQkJY3RsID0gVEFJTFFfTkVYVChjdGwsIG5leHQpOwotCQkJfQotCQl9Ci0JCS8q
Ci0JCSAqIGlmIHdlIHJlYWNoIGhlcmUsIG5vdCBzdWl0YWJsZSByZXBsYWNlbWVudCBpcyBhdmFp
bGFibGUKLQkJICogPG9yPiBmcmFnbWVudCBpbnRlcmxlYXZlIGlzIE5PVCBvbi4gU28gc3R1ZmYg
dGhlIHNiX2NjCi0JCSAqIGludG8gdGhlIG91ciBoZWxkIGNvdW50LCBhbmQgaXRzIHRpbWUgdG8g
c2xlZXAgYWdhaW4uCi0JCSAqLwotCQloZWxkX2xlbmd0aCA9IHNvLT5zb19yY3Yuc2JfY2M7Ci0J
CWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gc28tPnNvX3Jjdi5zYl9jYzsKLQkJZ290byByZXN0YXJ0
OwotCX0KLQkvKiBDbGVhciB0aGUgaGVsZCBsZW5ndGggc2luY2UgdGhlcmUgaXMgc29tZXRoaW5n
IHRvIHJlYWQgKi8KLQljb250cm9sLT5oZWxkX2xlbmd0aCA9IDA7Ci0gZm91bmRfb25lOgotCS8q
Ci0JICogSWYgd2UgcmVhY2ggaGVyZSwgY29udHJvbCBoYXMgYSBzb21lIGRhdGEgZm9yIHVzIHRv
IHJlYWQgb2ZmLgotCSAqIE5vdGUgdGhhdCBzdGNiIENPVUxEIGJlIE5VTEwuCi0JICovCi0JaWYg
KGhvbGRfcmxvY2sgPT0gMCkgewotCQlob2xkX3Jsb2NrID0gMTsKLQkJU0NUUF9JTlBfUkVBRF9M
T0NLKGlucCk7Ci0JfQotCWNvbnRyb2wtPnNvbWVfdGFrZW4rKzsKLQlzdGNiID0gY29udHJvbC0+
c3RjYjsKLQlpZiAoc3RjYikgewotCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAw
KSAmJgotCQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZS
RUVEKSkgewotCQkJaWYgKGZyZWVjbnRfYXBwbGllZCA9PSAwKQotCQkJCXN0Y2IgPSBOVUxMOwot
CQl9IGVsc2UgaWYgKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSB7Ci0JCQkvKiB5b3Ug
Y2FuJ3QgZnJlZSBpdCBvbiBtZSBwbGVhc2UgKi8KLQkJCS8qCi0JCQkgKiBUaGUgbG9jayBvbiB0
aGUgc29ja2V0IGJ1ZmZlciBwcm90ZWN0cyB1cyBzbyB0aGUKLQkJCSAqIGZyZWUgY29kZSB3aWxs
IHN0b3AuIEJ1dCBzaW5jZSB3ZSB1c2VkIHRoZSBzb2NrZXRidWYKLQkJCSAqIGxvY2sgYW5kIHRo
ZSBzZW5kZXIgdXNlcyB0aGUgdGNiX2xvY2sgdG8gaW5jcmVtZW50LAotCQkJICogd2UgbmVlZCB0
byB1c2UgdGhlIGF0b21pYyBhZGQgdG8gdGhlIHJlZmNudAotCQkJICovCi0JCQlpZiAoZnJlZWNu
dF9hcHBsaWVkKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCXBhbmljKCJyZWZjbnQgYWxyZWFk
eSBpbmNyZW1lbnRlZCIpOwotI2Vsc2UKLQkJCQlTQ1RQX1BSSU5URigicmVmY250IGFscmVhZHkg
aW5jcmVtZW50ZWQ/XG4iKTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCWZyZWVjbnRfYXBwbGllZCA9IDE7Ci0JCQl9
Ci0JCQkvKgotCQkJICogU2V0dXAgdG8gcmVtZW1iZXIgaG93IG11Y2ggd2UgaGF2ZSBub3QgeWV0
IHRvbGQKLQkJCSAqIHRoZSBwZWVyIG91ciByd25kIGhhcyBvcGVuZWQgdXAuIE5vdGUgd2UgZ3Jh
YgotCQkJICogdGhlIHZhbHVlIGZyb20gdGhlIHRjYiBmcm9tIGxhc3QgdGltZS4KLQkJCSAqIE5v
dGUgdG9vIHRoYXQgc2FjayBzZW5kaW5nIGNsZWFycyB0aGlzIHdoZW4gYSBzYWNrCi0JCQkgKiBp
cyBzZW50LCB3aGljaCBpcyBmaW5lLiBPbmNlIHdlIGhpdCB0aGUgcnduZF9yZXEsCi0JCQkgKiB3
ZSB0aGVuIHdpbGwgZ28gdG8gdGhlIHNjdHBfdXNlcl9yY3ZkKCkgdGhhdCB3aWxsCi0JCQkgKiBu
b3QgbG9jayB1bnRpbCBpdCBLTk9XcyBpdCBNVVNUIHNlbmQgYSBXVVAtU0FDSy4KLQkJCSAqLwot
CQkJZnJlZWRfc29fZmFyID0gc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0OwotCQkJc3Rj
Yi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0gMDsKLQkJfQotCX0KLQlpZiAoc3RjYiAmJgot
CSAgICAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkgJiYKLQkg
ICAgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApIHsKLQkJc3RjYi0+YXNvYy5zdHJtaW5b
Y29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMTsKLQl9Ci0KLQkvKiBG
aXJzdCBsZXRzIGdldCBvZmYgdGhlIHNpbmZvIGFuZCBzb2NrYWRkciBpbmZvICovCi0JaWYgKChz
aW5mbyAhPSBOVUxMKSAmJiAoZmlsbGluZ19zaW5mbyAhPSAwKSkgewotCQlzaW5mby0+c2luZm9f
c3RyZWFtID0gY29udHJvbC0+c2luZm9fc3RyZWFtOwotCQlzaW5mby0+c2luZm9fc3NuID0gKHVp
bnQxNl90KWNvbnRyb2wtPm1pZDsKLQkJc2luZm8tPnNpbmZvX2ZsYWdzID0gY29udHJvbC0+c2lu
Zm9fZmxhZ3M7Ci0JCXNpbmZvLT5zaW5mb19wcGlkID0gY29udHJvbC0+c2luZm9fcHBpZDsKLQkJ
c2luZm8tPnNpbmZvX2NvbnRleHQgPWNvbnRyb2wtPnNpbmZvX2NvbnRleHQ7Ci0JCXNpbmZvLT5z
aW5mb190aW1ldG9saXZlID0gY29udHJvbC0+c2luZm9fdGltZXRvbGl2ZTsKLQkJc2luZm8tPnNp
bmZvX3RzbiA9IGNvbnRyb2wtPnNpbmZvX3RzbjsKLQkJc2luZm8tPnNpbmZvX2N1bXRzbiA9IGNv
bnRyb2wtPnNpbmZvX2N1bXRzbjsKLQkJc2luZm8tPnNpbmZvX2Fzc29jX2lkID0gY29udHJvbC0+
c2luZm9fYXNzb2NfaWQ7Ci0JCW54dCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4dCk7Ci0JCWlm
IChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykgfHwK
LQkJICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZP
KSkgewotCQkJc3RydWN0IHNjdHBfZXh0cmN2aW5mbyAqc19leHRyYTsKLQkJCXNfZXh0cmEgPSAo
c3RydWN0IHNjdHBfZXh0cmN2aW5mbyAqKXNpbmZvOwotCQkJaWYgKChueHQpICYmCi0JCQkgICAg
KG54dC0+bGVuZ3RoKSkgewotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9mbGFncyA9IFNDVFBf
TkVYVF9NU0dfQVZBSUw7Ci0JCQkJaWYgKG54dC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJF
RCkgewotCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgfD0gU0NUUF9ORVhUX01TR19J
U19VTk9SREVSRUQ7Ci0JCQkJfQotCQkJCWlmIChueHQtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNB
VElPTikgewotCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgfD0gU0NUUF9ORVhUX01T
R19JU19OT1RJRklDQVRJT047Ci0JCQkJfQotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9haWQg
PSBueHQtPnNpbmZvX2Fzc29jX2lkOwotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9sZW5ndGgg
PSBueHQtPmxlbmd0aDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfcHBpZCA9IG54dC0+c2lu
Zm9fcHBpZDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfc3RyZWFtID0gbnh0LT5zaW5mb19z
dHJlYW07Ci0JCQkJaWYgKG54dC0+dGFpbF9tYnVmICE9IE5VTEwpIHsKLQkJCQkJaWYgKG54dC0+
ZW5kX2FkZGVkKSB7Ci0JCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgfD0gU0NUUF9O
RVhUX01TR19JU0NPTVBMRVRFOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiB3
ZSBleHBsaWNpdGx5IDAgdGhpcywgc2luY2UgdGhlIG1lbWNweSBnb3QKLQkJCQkgKiBzb21lIG90
aGVyIHRoaW5ncyBiZXlvbmQgdGhlIG9sZGVyIHNpbmZvXwotCQkJCSAqIHRoYXQgaXMgb24gdGhl
IGNvbnRyb2wncyBzdHJ1Y3R1cmUgOi1ECi0JCQkJICovCi0JCQkJbnh0ID0gTlVMTDsKLQkJCQlz
X2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgPSBTQ1RQX05PX05FWFRfTVNHOwotCQkJCXNfZXh0
cmEtPnNlcmluZm9fbmV4dF9haWQgPSAwOwotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9sZW5n
dGggPSAwOwotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9wcGlkID0gMDsKLQkJCQlzX2V4dHJh
LT5zZXJpbmZvX25leHRfc3RyZWFtID0gMDsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiB1cGRhdGUg
b2ZmIHRoZSByZWFsIGN1cnJlbnQgY3VtLWFjaywgaWYgd2UgaGF2ZSBhbiBzdGNiLgotCQkgKi8K
LQkJaWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYgc3RjYikKLQkJCXNpbmZv
LT5zaW5mb19jdW10c24gPSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuOwotCQkvKgotCQkgKiBt
YXNrIG9mZiB0aGUgaGlnaCBiaXRzLCB3ZSBrZWVwIHRoZSBhY3R1YWwgY2h1bmsgYml0cyBpbgot
CQkgKiB0aGVyZS4KLQkJICovCi0JCXNpbmZvLT5zaW5mb19mbGFncyAmPSAweDAwZmY7Ci0JCWlm
ICgoY29udHJvbC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSB7Ci0J
CQlzaW5mby0+c2luZm9fZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7Ci0JCX0KLQl9Ci0jaWZkZWYg
U0NUUF9BU09DTE9HX09GX1RTTlMKLQl7Ci0JCWludCBpbmRleCwgbmV3aW5kZXg7Ci0JCXN0cnVj
dCBzY3RwX3BjYnRzbl9ybG9nICplbnRyeTsKLQkJZG8gewotCQkJaW5kZXggPSBpbnAtPnJlYWRs
b2dfaW5kZXg7Ci0JCQluZXdpbmRleCA9IGluZGV4ICsgMTsKLQkJCWlmIChuZXdpbmRleCA+PSBT
Q1RQX1JFQURfTE9HX1NJWkUpIHsKLQkJCQluZXdpbmRleCA9IDA7Ci0JCQl9Ci0JCX0gd2hpbGUg
KGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnJlYWRsb2dfaW5kZXgsIGluZGV4LCBuZXdpbmRleCkg
PT0gMCk7Ci0JCWVudHJ5ID0gJmlucC0+cmVhZGxvZ1tpbmRleF07Ci0JCWVudHJ5LT52dGFnID0g
Y29udHJvbC0+c2luZm9fYXNzb2NfaWQ7Ci0JCWVudHJ5LT5zdHJtID0gY29udHJvbC0+c2luZm9f
c3RyZWFtOwotCQllbnRyeS0+c2VxID0gKHVpbnQxNl90KWNvbnRyb2wtPm1pZDsKLQkJZW50cnkt
PnN6ID0gY29udHJvbC0+bGVuZ3RoOwotCQllbnRyeS0+ZmxncyA9IGNvbnRyb2wtPnNpbmZvX2Zs
YWdzOwotCX0KLSNlbmRpZgotCWlmICgoZnJvbWxlbiA+IDApICYmIChmcm9tICE9IE5VTEwpKSB7
Ci0JCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOwotCQlzaXplX3QgbGVuOwotCi0JCXN3aXRj
aCAoY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJ
TkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNik7Ci0JCQkJc3RvcmUuc2luNiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2lu
NjsKLQkJCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IGNvbnRyb2wtPnBvcnRfZnJvbTsKLQkJCQli
cmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoKLSNpZmRlZiBJTkVU
NgotCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19N
QVBQRURfVjQpKSB7Ci0JCQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJ
CQkJaW42X3Npbl8yX3Y0bWFwc2luNigmY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zaW4s
Ci0JCQkJCQkJICAgICZzdG9yZS5zaW42KTsKLQkJCQkJc3RvcmUuc2luNi5zaW42X3BvcnQgPSBj
b250cm9sLT5wb3J0X2Zyb207Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7Ci0JCQkJCXN0b3JlLnNpbiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9s
X2FkZHIuc2luOwotCQkJCQlzdG9yZS5zaW4uc2luX3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207
Ci0JCQkJfQotI2Vsc2UKLQkJCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJ
CQlzdG9yZS5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjsKLQkJCQlzdG9y
ZS5zaW4uc2luX3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207Ci0jZW5kaWYKLQkJCQlicmVhazsK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWNhc2UgQUZfQ09OTjoKLQkJ
CQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotCQkJCXN0b3JlLnNjb25uID0g
Y29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zY29ubjsKLQkJCQlzdG9yZS5zY29ubi5zY29u
bl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOwotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQlkZWZh
dWx0OgotCQkJCWxlbiA9IDA7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJbWVtY3B5KGZyb20sICZzdG9y
ZSwgbWluKChzaXplX3QpZnJvbWxlbiwgbGVuKSk7Ci0jaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFKQotI2lmZGVmIElORVQ2Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgbHNh
NiwgKmZyb202OwotCi0JCQlmcm9tNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZnJvbTsKLQkJ
CXNjdHBfcmVjb3Zlcl9zY29wZV9tYWMoZnJvbTYsICgmbHNhNikpOwotCQl9Ci0jZW5kaWYKLSNl
bmRpZgotCX0KLQlpZiAoaG9sZF9ybG9jaykgewotCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnAp
OwotCQlob2xkX3Jsb2NrID0gMDsKLQl9Ci0JaWYgKGhvbGRfc2Jsb2NrKSB7Ci0JCVNPQ0tCVUZf
VU5MT0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxvY2sgPSAwOwotCX0KLQkvKiBub3cgY29w
eSBvdXQgd2hhdCBkYXRhIHdlIGNhbiAqLwotCWlmIChtcCA9PSBOVUxMKSB7Ci0JCS8qIGNvcHkg
b3V0IGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gdXAgdG8gbGVuZ3RoICovCi0JZ2V0X21vcmVfZGF0
YToKLQkJbSA9IGNvbnRyb2wtPmRhdGE7Ci0JCXdoaWxlIChtKSB7Ci0JCQkvKiBNb3ZlIG91dCBh
bGwgd2UgY2FuICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9M
RU9QQVJEKQotCQkJY3BfbGVuID0gKGludCl1aW8tPnVpb19yZXNpZDsKLSNlbHNlCi0JCQljcF9s
ZW4gPSAoaW50KXVpb19yZXNpZCh1aW8pOwotI2VuZGlmCi0jZWxzZQotCQkJY3BfbGVuID0gKGlu
dCl1aW8tPnVpb19yZXNpZDsKLSNlbmRpZgotCQkJbXlfbGVuID0gKGludClTQ1RQX0JVRl9MRU4o
bSk7Ci0JCQlpZiAoY3BfbGVuID4gbXlfbGVuKSB7Ci0JCQkJLyogbm90IGVub3VnaCBpbiB0aGlz
IGJ1ZiAqLwotCQkJCWNwX2xlbiA9IG15X2xlbjsKLQkJCX0KLQkJCWlmIChob2xkX3Jsb2NrKSB7
Ci0JCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJCQlob2xkX3Jsb2NrID0gMDsKLQkJ
CX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMCk7
Ci0jZW5kaWYKLQkJCWlmIChjcF9sZW4gPiAwKQotCQkJCWVycm9yID0gdWlvbW92ZShtdG9kKG0s
IGNoYXIgKiksIGNwX2xlbiwgdWlvKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCVNDVFBf
U09DS0VUX0xPQ0soc28sIDApOwotI2VuZGlmCi0JCQkvKiByZS1yZWFkICovCi0JCQlpZiAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKLQkJCQlnb3RvIHJl
bGVhc2U7Ci0JCQl9Ci0KLQkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYm
IHN0Y2IgJiYKLQkJCSAgICBzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19C
RV9GUkVFRCkgewotCQkJCW5vX3Jjdl9uZWVkZWQgPSAxOwotCQkJfQotCQkJaWYgKGVycm9yKSB7
Ci0JCQkJLyogZXJyb3Igd2UgYXJlIG91dCBvZiBoZXJlICovCi0JCQkJZ290byByZWxlYXNlOwot
CQkJfQotCQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0JCQlob2xkX3Jsb2NrID0gMTsKLQkJ
CWlmIChjcF9sZW4gPT0gU0NUUF9CVUZfTEVOKG0pKSB7Ci0JCQkJaWYgKChTQ1RQX0JVRl9ORVhU
KG0pPT0gTlVMTCkgJiYKLQkJCQkgICAgKGNvbnRyb2wtPmVuZF9hZGRlZCkpIHsKLQkJCQkJb3V0
X2ZsYWdzIHw9IE1TR19FT1I7Ci0JCQkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09
IDApICAmJgotCQkJCQkgICAgKGNvbnRyb2wtPnN0Y2IgIT0gTlVMTCkgJiYKLQkJCQkJICAgICgo
Y29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSA9PSAwKSkKLQkJCQkJCWNvbnRy
b2wtPnN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0uZGVsaXZlcnlfc3Rh
cnRlZCA9IDA7Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklD
QVRJT04pIHsKLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047Ci0JCQkJfQotCQkJ
CS8qIHdlIGF0ZSB1cCB0aGUgbWJ1ZiAqLwotCQkJCWlmIChpbl9mbGFncyAmIE1TR19QRUVLKSB7
Ci0JCQkJCS8qIGp1c3QgbG9va2luZyAqLwotCQkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQkJ
CQkJY29waWVkX3NvX2ZhciArPSBjcF9sZW47Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogZGlzcG9z
ZSBvZiB0aGUgbWJ1ZiAqLwotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJc2N0cF9zYmxvZygmc28t
PnNvX3JjdiwKLQkJCQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFND
VFBfTE9HX1NCRlJFRSwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJCQkJfQotCQkJCQlzY3RwX3NiZnJl
ZShjb250cm9sLCBzdGNiLCAmc28tPnNvX3JjdiwgbSk7Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJ
CQlzY3RwX3NibG9nKCZzby0+c29fcmN2LAotCQkJCQkJICAgY29udHJvbC0+ZG9fbm90X3JlZl9z
dGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCQkJCQl9Ci0JCQkJCWNvcGll
ZF9zb19mYXIgKz0gY3BfbGVuOwotCQkJCQlmcmVlZF9zb19mYXIgKz0gY3BfbGVuOwotCQkJCQlm
cmVlZF9zb19mYXIgKz0gTVNJWkU7Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNvbnRyb2wt
Pmxlbmd0aCwgY3BfbGVuKTsKLQkJCQkJY29udHJvbC0+ZGF0YSA9IHNjdHBfbV9mcmVlKG0pOwot
CQkJCQltID0gY29udHJvbC0+ZGF0YTsKLQkJCQkJLyogYmVlbiB0aHJvdWdoIGl0IGFsbCwgbXVz
dCBob2xkIHNiIGxvY2sgb2sgdG8gbnVsbCB0YWlsICovCi0JCQkJCWlmIChjb250cm9sLT5kYXRh
ID09IE5VTEwpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkJCQkJCWlmICgoY29udHJvbC0+ZW5kX2FkZGVkID09IDApIHx8Ci0JCQkJCQkgICAgKFRBSUxR
X05FWFQoY29udHJvbCwgbmV4dCkgPT0gTlVMTCkpIHsKLQkJCQkJCQkvKiBJZiB0aGUgZW5kIGlz
IG5vdCBhZGRlZCwgT1IgdGhlCi0JCQkJCQkJICogbmV4dCBpcyBOT1QgbnVsbCB3ZSBNVVNUIGhh
dmUgdGhlIGxvY2suCi0JCQkJCQkJICovCi0JCQkJCQkJaWYgKG10eF9vd25lZCgmaW5wLT5pbnBf
cmRhdGFfbXR4KSA9PSAwKSB7Ci0JCQkJCQkJCXBhbmljKCJIbW0gd2UgZG9uJ3Qgb3duIHRoZSBs
b2NrPyIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLSNlbmRpZgotI2VuZGlmCi0JCQkJCQljb250cm9s
LT50YWlsX21idWYgPSBOVUxMOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJCWlmICgoY29udHJv
bC0+ZW5kX2FkZGVkKSAmJiAoKG91dF9mbGFncyAmIE1TR19FT1IpID09IDApKSB7Ci0JCQkJCQkJ
cGFuaWMoImVuZF9hZGRlZCwgbm90aGluZyBsZWZ0IGFuZCBubyBNU0dfRU9SIik7Ci0JCQkJCQl9
Ci0jZW5kaWYKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogRG8gd2UgbmVlZCB0
byB0cmltIHRoZSBtYnVmPyAqLwotCQkJCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJ
RklDQVRJT04pIHsKLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047Ci0JCQkJfQot
CQkJCWlmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgewotCQkJCQlTQ1RQX0JVRl9SRVNW
X1VGKG0sIGNwX2xlbik7Ci0JCQkJCVNDVFBfQlVGX0xFTihtKSAtPSBjcF9sZW47Ci0JCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LCBjb250cm9sLT5kb19ub3Rf
cmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsIGNwX2xlbik7Ci0JCQkJCX0KLQkJ
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc28tPnNvX3Jjdi5zYl9jYywgY3BfbGVuKTsKLQkJCQkJ
aWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKLQkJCQkJICAgIHN0Y2IpIHsK
LQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Muc2JfY2MsIGNwX2xlbik7Ci0J
CQkJCX0KLQkJCQkJY29waWVkX3NvX2ZhciArPSBjcF9sZW47Ci0JCQkJCWZyZWVkX3NvX2ZhciAr
PSBjcF9sZW47Ci0JCQkJCWZyZWVkX3NvX2ZhciArPSBNU0laRTsKLQkJCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCQkJCXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9O
VUxMOnN0Y2IsCi0JCQkJCQkJICAgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCQkJCQl9Ci0JCQkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgY3BfbGVuKTsKLQkJCQl9IGVs
c2UgewotCQkJCQljb3BpZWRfc29fZmFyICs9IGNwX2xlbjsKLQkJCQl9Ci0JCQl9Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJaWYgKChvdXRf
ZmxhZ3MgJiBNU0dfRU9SKSB8fCAodWlvLT51aW9fcmVzaWQgPT0gMCkpIHsKLSNlbHNlCi0JCQlp
ZiAoKG91dF9mbGFncyAmIE1TR19FT1IpIHx8ICh1aW9fcmVzaWQodWlvKSA9PSAwKSkgewotI2Vu
ZGlmCi0jZWxzZQotCQkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB8fCAodWlvLT51aW9fcmVz
aWQgPT0gMCkpIHsKLSNlbmRpZgotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKCgoc3RjYikgJiYg
KGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApICYmCi0JCQkgICAgKGNvbnRyb2wtPmRvX25vdF9y
ZWZfc3RjYiA9PSAwKSAmJgotCQkJICAgIChmcmVlZF9zb19mYXIgPj0gcnduZF9yZXEpKSB7Ci0J
CQkJc2N0cF91c2VyX3JjdmQoc3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9sZF9ybG9jaywgcnduZF9y
ZXEpOwotCQkJfQotCQl9IC8qIGVuZCB3aGlsZShtKSAqLwotCQkvKgotCQkgKiBBdCB0aGlzIHBv
aW50IHdlIGhhdmUgbG9va2VkIGF0IGl0IGFsbCBhbmQgd2UgZWl0aGVyIGhhdmUKLQkJICogYSBN
U0dfRU9SL29yIHJlYWQgYWxsIHRoZSB1c2VyIHdhbnRzLi4uIDxPUj4KLQkJICogY29udHJvbC0+
bGVuZ3RoID09IDAuCi0JCSAqLwotCQlpZiAoKG91dF9mbGFncyAmIE1TR19FT1IpICYmICgoaW5f
ZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkpIHsKLQkJCS8qIHdlIGFyZSBkb25lIHdpdGggdGhpcyBj
b250cm9sICovCi0JCQlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsKLQkJCQlpZiAoY29udHJv
bC0+ZGF0YSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJcGFuaWMoImNvbnRyb2wtPmRhdGEg
bm90IG51bGwgYXQgcmVhZCBlb3I/Iik7Ci0jZWxzZQotCQkJCQlTQ1RQX1BSSU5URigiU3RyYW5n
ZSwgZGF0YSBsZWZ0IGluIHRoZSBjb250cm9sIGJ1ZmZlciAuLiBpbnZhcmllbnRzIHdvdWxkIHBh
bmljP1xuIik7Ci0JCQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCQkJY29udHJv
bC0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYKLQkJCQl9Ci0JCQlkb25lX3dpdGhfY29udHJvbDoKLQkJ
CQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7Ci0JCQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwot
CQkJCQlob2xkX3Jsb2NrID0gMTsKLQkJCQl9Ci0JCQkJVEFJTFFfUkVNT1ZFKCZpbnAtPnJlYWRf
cXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCS8qIEFkZCBiYWNrIGFueSBoaWRkZW5kIGRhdGEg
Ki8KLQkJCQlpZiAoY29udHJvbC0+aGVsZF9sZW5ndGgpIHsKLQkJCQkJaGVsZF9sZW5ndGggPSAw
OwotCQkJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IDA7Ci0JCQkJCXdha2V1cF9yZWFkX3NvY2tl
dCA9IDE7Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5hdXhfZGF0YSkgewotCQkJCQlzY3RwX21f
ZnJlZSAoY29udHJvbC0+YXV4X2RhdGEpOwotCQkJCQljb250cm9sLT5hdXhfZGF0YSA9IE5VTEw7
Ci0JCQkJfQotCQkJCW5vX3Jjdl9uZWVkZWQgPSBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I7Ci0J
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOwotCQkJCWNvbnRyb2wt
PmRhdGEgPSBOVUxMOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQlpZiAoY29udHJvbC0+b25fc3Ry
bV9xKSB7Ci0JCQkJCXBhbmljKCJBYm91dCB0byBmcmVlIGN0bDolcCBzbzolcCBhbmQgaXRzIGlu
ICVkIiwKLQkJCQkJICAgICAgY29udHJvbCwgc28sIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0JCQkJ
fQotI2VuZGlmCi0JCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0JCQkJY29u
dHJvbCA9IE5VTEw7Ci0JCQkJaWYgKChmcmVlZF9zb19mYXIgPj0gcnduZF9yZXEpICYmCi0JCQkJ
ICAgIChub19yY3ZfbmVlZGVkID09IDApKQotCQkJCQlzY3RwX3VzZXJfcmN2ZChzdGNiLCAmZnJl
ZWRfc29fZmFyLCBob2xkX3Jsb2NrLCByd25kX3JlcSk7Ci0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoK
LQkJCQkgKiBUaGUgdXNlciBkaWQgbm90IHJlYWQgYWxsIG9mIHRoaXMKLQkJCQkgKiBtZXNzYWdl
LCB0dXJuIG9mZiB0aGUgcmV0dXJuZWQgTVNHX0VPUgotCQkJCSAqIHNpbmNlIHdlIGFyZSBsZWF2
aW5nIG1vcmUgYmVoaW5kIG9uIHRoZQotCQkJCSAqIGNvbnRyb2wgdG8gcmVhZC4KLQkJCQkgKi8K
LSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCAmJgotCQkJCSAg
ICAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSAmJgotCQkJCSAgICAoY29udHJvbC0+dGFpbF9tYnVm
ID09IE5VTEwpKSB7Ci0JCQkJCXBhbmljKCJHYWssIGNvbnRyb2wtPmxlbmd0aCBpcyBjb3JydXB0
PyIpOwotCQkJCX0KLSNlbmRpZgotCQkJCW5vX3Jjdl9uZWVkZWQgPSBjb250cm9sLT5kb19ub3Rf
cmVmX3N0Y2I7Ci0JCQkJb3V0X2ZsYWdzICY9IH5NU0dfRU9SOwotCQkJfQotCQl9Ci0JCWlmIChv
dXRfZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQlnb3RvIHJlbGVhc2U7Ci0JCX0KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JCWlmICgodWlvLT51aW9f
cmVzaWQgPT0gMCkgfHwKLSNlbHNlCi0JCWlmICgodWlvX3Jlc2lkKHVpbykgPT0gMCkgfHwKLSNl
bmRpZgotI2Vsc2UKLQkJaWYgKCh1aW8tPnVpb19yZXNpZCA9PSAwKSB8fAotI2VuZGlmCi0JCSAg
ICAoKGluX2Vlb3JfbW9kZSkgJiYKLQkJICAgICAoY29waWVkX3NvX2ZhciA+PSAodWludDMyX3Qp
bWF4KHNvLT5zb19yY3Yuc2JfbG93YXQsIDEpKSkpIHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQot
CQkvKgotCQkgKiBJZiBJIGhpdCBoZXJlIHRoZSByZWNlaXZlciB3YW50cyBtb3JlIGFuZCB0aGlz
IG1lc3NhZ2UgaXMKLQkJICogTk9UIGRvbmUgKHBkLWFwaSkuIFNvIHR3byBxdWVzdGlvbnMuIENh
biB3ZSBibG9jaz8gaWYgbm90Ci0JCSAqIHdlIGFyZSBkb25lLiBEaWQgdGhlIHVzZXIgTk9UIHNl
dCBNU0dfV0FJVEFMTD8KLQkJICovCi0JCWlmIChibG9ja19hbGxvd2VkID09IDApIHsKLQkJCWdv
dG8gcmVsZWFzZTsKLQkJfQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0
YSBhIGZldyB0aGluZ3M6IC0gV2UgZG9uJ3QKLQkJICogc2J1bmxvY2soKSBzbyB3ZSBkb24ndCBn
ZXQgc29tZW9uZSBlbHNlIHJlYWRpbmcuIC0gV2UKLQkJICogbXVzdCBiZSBzdXJlIHRvIGFjY291
bnQgZm9yIHRoZSBjYXNlIHdoZXJlIHdoYXQgaXMgYWRkZWQKLQkJICogaXMgTk9UIHRvIG91ciBj
b250cm9sIHdoZW4gd2Ugd2FrZXVwLgotCQkgKi8KLQotCQkvKiBEbyB3ZSBuZWVkIHRvIHRlbGwg
dGhlIHRyYW5zcG9ydCBhIHJ3bmQgdXBkYXRlIG1pZ2h0IGJlCi0JCSAqIG5lZWRlZCBiZWZvcmUg
d2UgZ28gdG8gc2xlZXA/Ci0JCSAqLwotCQlpZiAoKChzdGNiKSAmJiAoaW5fZmxhZ3MgJiBNU0df
UEVFSykgPT0gMCkgJiYKLQkJICAgICgoZnJlZWRfc29fZmFyID49IHJ3bmRfcmVxKSAmJgotCQkg
ICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKLQkJICAgICAobm9fcmN2X25l
ZWRlZCA9PSAwKSkpIHsKLQkJCXNjdHBfdXNlcl9yY3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhv
bGRfcmxvY2ssIHJ3bmRfcmVxKTsKLQkJfQotCXdhaXRfc29tZV9tb3JlOgotI2lmIChkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKLQkJaWYgKHNvLT5zb19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUp
IHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotI2Vsc2UKLQkJaWYgKHNvLT5zb19zdGF0ZSAmIFNT
X0NBTlRSQ1ZNT1JFKSB7Ci0JCQlnb3RvIHJlbGVhc2U7Ci0JCX0KLSNlbmRpZgotCi0JCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkKLQkJCWdvdG8gcmVs
ZWFzZTsKLQotCQlpZiAoaG9sZF9ybG9jayA9PSAxKSB7Ci0JCQlTQ1RQX0lOUF9SRUFEX1VOTE9D
SyhpbnApOwotCQkJaG9sZF9ybG9jayA9IDA7Ci0JCX0KLQkJaWYgKGhvbGRfc2Jsb2NrID09IDAp
IHsKLQkJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7Ci0JCQlob2xkX3NibG9jayA9IDE7Ci0J
CX0KLQkJaWYgKChjb3BpZWRfc29fZmFyKSAmJiAoY29udHJvbC0+bGVuZ3RoID09IDApICYmCi0J
CSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxF
QVZFKSkpIHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
CQlzYnVubG9jaygmc28tPnNvX3JjdiwgMSk7Ci0jZW5kaWYKLQkJaWYgKHNvLT5zb19yY3Yuc2Jf
Y2MgPD0gY29udHJvbC0+aGVsZF9sZW5ndGgpIHsKLQkJCWVycm9yID0gc2J3YWl0KCZzby0+c29f
cmN2KTsKLQkJCWlmIChlcnJvcikgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJZ290
byByZWxlYXNlOwotI2Vsc2UKLQkJCQlnb3RvIHJlbGVhc2VfdW5sb2NrZWQ7Ci0jZW5kaWYKLQkJ
CX0KLQkJCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gMDsKLQkJfQotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCQllcnJvciA9IHNibG9jaygmc28tPnNvX3JjdiwgU0JMT0NLV0FJVChpbl9mbGFncykp
OwotI2VuZGlmCi0JCWlmIChob2xkX3NibG9jaykgewotCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5z
b19yY3YpOwotCQkJaG9sZF9zYmxvY2sgPSAwOwotCQl9Ci0JCWlmIChjb250cm9sLT5sZW5ndGgg
PT0gMCkgewotCQkJLyogc3RpbGwgbm90aGluZyBoZXJlICovCi0JCQlpZiAoY29udHJvbC0+ZW5k
X2FkZGVkID09IDEpIHsKLQkJCQkvKiBoZSBhYm9ydGVkLCBvciBpcyBkb25lIGkuZS5kaWQgYSBz
aHV0ZG93biAqLwotCQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJCWlmIChjb250cm9sLT5w
ZGFwaV9hYm9ydGVkKSB7Ci0JCQkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDAp
ICYmICgoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSA9PSAwKSkKLQkJCQkJ
CWNvbnRyb2wtPnN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0uZGVsaXZl
cnlfc3RhcnRlZCA9IDA7Ci0KLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19UUlVOQzsKLQkJCQl9IGVs
c2UgewotCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiAoKGNvbnRy
b2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCi0JCQkJCQljb250cm9sLT5z
dGNiLT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQg
PSAwOwotCQkJCX0KLQkJCQlnb3RvIGRvbmVfd2l0aF9jb250cm9sOwotCQkJfQotCQkJaWYgKHNv
LT5zb19yY3Yuc2JfY2MgPiBoZWxkX2xlbmd0aCkgewotCQkJCWNvbnRyb2wtPmhlbGRfbGVuZ3Ro
ID0gc28tPnNvX3Jjdi5zYl9jYzsKLQkJCQloZWxkX2xlbmd0aCA9IDA7Ci0JCQl9Ci0JCQlnb3Rv
IHdhaXRfc29tZV9tb3JlOwotCQl9IGVsc2UgaWYgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkgewot
CQkJLyogd2UgbXVzdCByZS1zeW5jIHNpbmNlIGRhdGEKLQkJCSAqIGlzIHByb2JhYmx5IGJlaW5n
IGFkZGVkCi0JCQkgKi8KLQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQkJaWYgKChjb250
cm9sLT5sZW5ndGggPiAwKSAmJiAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSkgewotCQkJCS8qIGJp
ZyB0cm91YmxlLi4gd2UgaGF2ZSB0aGUgbG9jayBhbmQgaXRzIGNvcnJ1cHQ/ICovCi0jaWZkZWYg
SU5WQVJJQU5UUwotCQkJCXBhbmljICgiSW1wb3NzaWJsZSBkYXRhPT1OVUxMIGxlbmd0aCAhPTAi
KTsKLSNlbmRpZgotCQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJCW91dF9mbGFncyB8PSBN
U0dfVFJVTkM7Ci0JCQkJY29udHJvbC0+bGVuZ3RoID0gMDsKLQkJCQlTQ1RQX0lOUF9SRUFEX1VO
TE9DSyhpbnApOwotCQkJCWdvdG8gZG9uZV93aXRoX2NvbnRyb2w7Ci0JCQl9Ci0JCQlTQ1RQX0lO
UF9SRUFEX1VOTE9DSyhpbnApOwotCQkJLyogV2Ugd2lsbCBmYWxsIGFyb3VuZCB0byBnZXQgbW9y
ZSBkYXRhICovCi0JCX0KLQkJZ290byBnZXRfbW9yZV9kYXRhOwotCX0gZWxzZSB7Ci0JCS8qLQot
CQkgKiBHaXZlIGNhbGxlciBiYWNrIHRoZSBtYnVmIGNoYWluLAotCQkgKiBzdG9yZSBpbiB1aW9f
cmVzaWQgdGhlIGxlbmd0aAotCQkgKi8KLQkJd2FrZXVwX3JlYWRfc29ja2V0ID0gMDsKLQkJaWYg
KChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkgfHwKLQkJICAgIChUQUlMUV9ORVhUKGNvbnRyb2ws
IG5leHQpID09IE5VTEwpKSB7Ci0JCQkvKiBOZWVkIHRvIGdldCBybG9jayAqLwotCQkJaWYgKGhv
bGRfcmxvY2sgPT0gMCkgewotCQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQkJCWhvbGRf
cmxvY2sgPSAxOwotCQkJfQotCQl9Ci0JCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKLQkJCW91
dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJaWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0g
MCkgJiYKLQkJCSAgICAoY29udHJvbC0+c3RjYiAhPSBOVUxMKSAmJgotCQkJICAgICgoY29udHJv
bC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSA9PSAwKSkKLQkJCQljb250cm9sLT5zdGNi
LT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAw
OwotCQl9Ci0JCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKLQkJ
CW91dF9mbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOwotCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExF
X18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQl1aW8tPnVpb19yZXNpZCA9IGNvbnRy
b2wtPmxlbmd0aDsKLSNlbHNlCi0JCXVpb19zZXRyZXNpZCh1aW8sIGNvbnRyb2wtPmxlbmd0aCk7
Ci0jZW5kaWYKLSNlbHNlCi0JCXVpby0+dWlvX3Jlc2lkID0gY29udHJvbC0+bGVuZ3RoOwotI2Vu
ZGlmCi0JCSptcCA9IGNvbnRyb2wtPmRhdGE7Ci0JCW0gPSBjb250cm9sLT5kYXRhOwotCQl3aGls
ZSAobSkgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LAotCQkJ
CSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCRlJFRSwg
U0NUUF9CVUZfTEVOKG0pKTsKLQkJCX0KLQkJCXNjdHBfc2JmcmVlKGNvbnRyb2wsIHN0Y2IsICZz
by0+c29fcmN2LCBtKTsKLQkJCWZyZWVkX3NvX2ZhciArPSBTQ1RQX0JVRl9MRU4obSk7Ci0JCQlm
cmVlZF9zb19mYXIgKz0gTVNJWkU7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfc2Jsb2coJnNv
LT5zb19yY3YsCi0JCQkJICAgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NU
UF9MT0dfU0JSRVNVTFQsIDApOwotCQkJfQotCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCX0K
LQkJY29udHJvbC0+ZGF0YSA9IGNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0JCWNvbnRyb2wt
Pmxlbmd0aCA9IDA7Ci0JCWlmIChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQkvKiBEb25lIHdp
dGggdGhpcyBjb250cm9sICovCi0JCQlnb3RvIGRvbmVfd2l0aF9jb250cm9sOwotCQl9Ci0JfQot
IHJlbGVhc2U6Ci0JaWYgKGhvbGRfcmxvY2sgPT0gMSkgewotCQlTQ1RQX0lOUF9SRUFEX1VOTE9D
SyhpbnApOwotCQlob2xkX3Jsb2NrID0gMDsKLQl9Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JaWYgKGhvbGRfc2Jsb2NrID09IDApIHsKLQkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsK
LQkJaG9sZF9zYmxvY2sgPSAxOwotCX0KLSNlbHNlCi0JaWYgKGhvbGRfc2Jsb2NrID09IDEpIHsK
LQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3YpOwotCQlob2xkX3NibG9jayA9IDA7Ci0JfQot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2J1bmxvY2soJnNvLT5zb19yY3YsIDEp
OwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXNidW5sb2NrKCZzby0+c29f
cmN2KTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3
MDAwMDAKLQlzb2NrYnVmX2xvY2sgPSAwOwotI2VuZGlmCi0jZW5kaWYKLQotIHJlbGVhc2VfdW5s
b2NrZWQ6Ci0JaWYgKGhvbGRfc2Jsb2NrKSB7Ci0JCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2
KTsKLQkJaG9sZF9zYmxvY2sgPSAwOwotCX0KLQlpZiAoKHN0Y2IpICYmIChpbl9mbGFncyAmIE1T
R19QRUVLKSA9PSAwKSB7Ci0JCWlmICgoZnJlZWRfc29fZmFyID49IHJ3bmRfcmVxKSAmJgotCQkg
ICAgKGNvbnRyb2wgJiYgKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSkgJiYKLQkJICAg
IChub19yY3ZfbmVlZGVkID09IDApKQotCQkJc2N0cF91c2VyX3JjdmQoc3RjYiwgJmZyZWVkX3Nv
X2ZhciwgaG9sZF9ybG9jaywgcnduZF9yZXEpOwotCX0KLSBvdXQ6Ci0JaWYgKG1zZ19mbGFncykg
ewotCQkqbXNnX2ZsYWdzID0gb3V0X2ZsYWdzOwotCX0KLQlpZiAoKChvdXRfZmxhZ3MgJiBNU0df
RU9SKSA9PSAwKSAmJgotCSAgICAoKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApICYmCi0JICAg
IChzaW5mbykgJiYKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X0VYVF9SQ1ZJTkZPKSB8fAotCSAgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUkVDVk5YVElORk8pKSkgewotCQlzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICpzX2V4dHJh
OwotCQlzX2V4dHJhID0gKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKilzaW5mbzsKLQkJc19leHRy
YS0+c2VyaW5mb19uZXh0X2ZsYWdzID0gU0NUUF9OT19ORVhUX01TRzsKLQl9Ci0JaWYgKGhvbGRf
cmxvY2sgPT0gMSkgewotCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCX0KLQlpZiAoaG9s
ZF9zYmxvY2spIHsKLQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3YpOwotCX0KLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKLQlpZiAoc29j
a2J1Zl9sb2NrKSB7Ci0JCXNidW5sb2NrKCZzby0+c29fcmN2KTsKLQl9Ci0jZW5kaWYKLQotCWlm
IChmcmVlY250X2FwcGxpZWQpIHsKLQkJLyoKLQkJICogVGhlIGxvY2sgb24gdGhlIHNvY2tldCBi
dWZmZXIgcHJvdGVjdHMgdXMgc28gdGhlIGZyZWUKLQkJICogY29kZSB3aWxsIHN0b3AuIEJ1dCBz
aW5jZSB3ZSB1c2VkIHRoZSBzb2NrZXRidWYgbG9jayBhbmQKLQkJICogdGhlIHNlbmRlciB1c2Vz
IHRoZSB0Y2JfbG9jayB0byBpbmNyZW1lbnQsIHdlIG5lZWQgdG8gdXNlCi0JCSAqIHRoZSBhdG9t
aWMgYWRkIHRvIHRoZSByZWZjbnQuCi0JCSAqLwotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0jaWZk
ZWYgSU5WQVJJQU5UUwotCQkJcGFuaWMoInN0Y2IgZm9yIHJlZmNudCBoYXMgZ29uZSBOVUxMPyIp
OwotCQkJZ290byBzdGFnZV9sZWZ0OwotI2Vsc2UKLQkJCWdvdG8gc3RhZ2VfbGVmdDsKLSNlbmRp
ZgotCQl9Ci0JCS8qIFNhdmUgdGhlIHZhbHVlIGJhY2sgZm9yIG5leHQgdGltZSAqLwotCQlzdGNi
LT5mcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QgPSBmcmVlZF9zb19mYXI7Ci0JCWF0b21pY19hZGRf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICZTQ1RQX1JFQ1ZfUldORF9MT0dHSU5HX0VOQUJMRSkgewotCQlp
ZiAoc3RjYikgewotCQkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRE9ORSwKLQkJCQkgICAg
ICAgZnJlZWRfc29fZmFyLAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQ
TEVfTEVPUEFSRCkKLQkJCQkgICAgICAgKCh1aW8pID8gKHNsZW4gLSB1aW8tPnVpb19yZXNpZCkg
OiBzbGVuKSwKLSNlbHNlCi0JCQkJICAgICAgICgodWlvKSA/IChzbGVuIC0gdWlvX3Jlc2lkKHVp
bykpIDogc2xlbiksCi0jZW5kaWYKLSNlbHNlCi0JCQkJICAgICAgICh1aW50MzJfdCkoKHVpbykg
PyAoc2xlbiAtIHVpby0+dWlvX3Jlc2lkKSA6IHNsZW4pLAotI2VuZGlmCi0JCQkJICAgICAgIHN0
Y2ItPmFzb2MubXlfcnduZCwKLQkJCQkgICAgICAgc28tPnNvX3Jjdi5zYl9jYyk7Ci0JCX0gZWxz
ZSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9ET05FLAotCQkJCSAgICAgICBmcmVl
ZF9zb19mYXIsCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKQotCQkJCSAgICAgICAoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlvX3Jlc2lkKSA6IHNsZW4p
LAotI2Vsc2UKLQkJCQkgICAgICAgKCh1aW8pID8gKHNsZW4gLSB1aW9fcmVzaWQodWlvKSkgOiBz
bGVuKSwKLSNlbmRpZgotI2Vsc2UKLQkJCQkgICAgICAgKHVpbnQzMl90KSgodWlvKSA/IChzbGVu
IC0gdWlvLT51aW9fcmVzaWQpIDogc2xlbiksCi0jZW5kaWYKLQkJCQkgICAgICAgMCwKLQkJCQkg
ICAgICAgc28tPnNvX3Jjdi5zYl9jYyk7Ci0JCX0KLQl9Ci0gc3RhZ2VfbGVmdDoKLQlpZiAod2Fr
ZXVwX3JlYWRfc29ja2V0KSB7Ci0JCXNjdHBfc29yd2FrZXVwKGlucCwgc28pOwotCX0KLQlyZXR1
cm4gKGVycm9yKTsKLX0KLQotCi0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLXN0cnVjdCBtYnVm
ICoKLXNjdHBfbV9mcmVlKHN0cnVjdCBtYnVmICptKQotewotCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0
cF9sb2dfbWIobSwgU0NUUF9NQlVGX0lGUkVFKTsKLQl9Ci0JcmV0dXJuIChtX2ZyZWUobSkpOwot
fQotCi12b2lkIHNjdHBfbV9mcmVlbShzdHJ1Y3QgbWJ1ZiAqbWIpCi17Ci0Jd2hpbGUgKG1iICE9
IE5VTEwpCi0JCW1iID0gc2N0cF9tX2ZyZWUobWIpOwotfQotCi0jZW5kaWYKLQotaW50Ci1zY3Rw
X2R5bmFtaWNfc2V0X3ByaW1hcnkoc3RydWN0IHNvY2thZGRyICpzYSwgdWludDMyX3QgdnJmX2lk
KQotewotCS8qIEdpdmVuIGEgbG9jYWwgYWRkcmVzcy4gRm9yIGFsbCBhc3NvY2lhdGlvbnMKLQkg
KiB0aGF0IGhvbGRzIHRoZSBhZGRyZXNzLCByZXF1ZXN0IGEgcGVlci1zZXQtcHJpbWFyeS4KLQkg
Ki8KLQlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqd2k7Ci0KLQlp
ZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoc2EsIHZyZl9pZCwgMCk7Ci0JaWYgKGlmYSA9PSBO
VUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFQUREUk5PVEFWQUlMKTsKLQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKLQl9
Ci0JLyogTm93IHRoYXQgd2UgaGF2ZSB0aGUgaWZhIHdlIG11c3QgYXdha2VuIHRoZQotCSAqIGl0
ZXJhdG9yIHdpdGggdGhpcyBtZXNzYWdlLgotCSAqLwotCXdpID0gU0NUUF9aT05FX0dFVChTQ1RQ
X0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0cnVjdCBzY3RwX2xhZGRyKTsKLQlpZiAod2kg
PT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKLQkJcmV0dXJuIChFTk9NRU0pOwotCX0KLQkvKiBOb3cg
aW5jciB0aGUgY291bnQgYW5kIGludCB3aSBzdHJ1Y3R1cmUgKi8KLQlTQ1RQX0lOQ1JfTEFERFJf
Q09VTlQoKTsKLQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsKLQkodm9pZClTQ1RQX0dFVFRJ
TUVfVElNRVZBTCgmd2ktPnN0YXJ0X3RpbWUpOwotCXdpLT5pZmEgPSBpZmE7Ci0Jd2ktPmFjdGlv
biA9IFNDVFBfU0VUX1BSSU1fQUREUjsKLQlhdG9taWNfYWRkX2ludCgmaWZhLT5yZWZjb3VudCwg
MSk7Ci0KLQkvKiBOb3cgYWRkIGl0IHRvIHRoZSB3b3JrIHF1ZXVlICovCi0JU0NUUF9XUV9BRERS
X0xPQ0soKTsKLQkvKgotCSAqIFNob3VsZCB0aGlzIHJlYWxseSBiZSBhIHRhaWxxPyBBcyBpdCBp
cyB3ZSB3aWxsIHByb2Nlc3MgdGhlCi0JICogbmV3ZXN0IGZpcnN0IDotMAotCSAqLwotCUxJU1Rf
SU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3EpLCB3aSwgc2N0cF9ueHRfYWRkcik7
Ci0JU0NUUF9XUV9BRERSX1VOTE9DSygpOwotCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0FERFJfV1EsCi0JCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKLQkJCSAoc3RydWN0
IHNjdHBfdGNiICopTlVMTCwKLQkJCSAoc3RydWN0IHNjdHBfbmV0cyAqKU5VTEwpOwotCXJldHVy
biAoMCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0vKiBubyBzY3RwX3NvcmVj
ZWl2ZSBmb3IgX19Vc2Vyc3BhY2VfXyBub3cgKi8KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLWludAotc2N0cF9zb3JlY2VpdmUoCXN0cnVjdCBzb2NrZXQgKnNvLAotCQlz
dHJ1Y3Qgc29ja2FkZHIgKipwc2EsCi0JCXN0cnVjdCB1aW8gKnVpbywKLQkJc3RydWN0IG1idWYg
KiptcDAsCi0JCXN0cnVjdCBtYnVmICoqY29udHJvbHAsCi0JCWludCAqZmxhZ3NwKQotewotCWlu
dCBlcnJvciwgZnJvbWxlbjsKLQl1aW50OF90IHNvY2tidWZbMjU2XTsKLQlzdHJ1Y3Qgc29ja2Fk
ZHIgKmZyb207Ci0Jc3RydWN0IHNjdHBfZXh0cmN2aW5mbyBzaW5mbzsKLQlpbnQgZmlsbGluZ19z
aW5mbyA9IDE7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JLyogcGlja3VwIHRoZSBhc3NvYyB3ZSBhcmUgcmVhZGlu
ZyBmcm9tICovCi0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlO
VkFMKTsKLQl9Ci0JaWYgKChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVkRBVEFJT0VWTlQpICYmCi0JICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfUkVDVlJDVklORk8pICYmCi0JICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB8fAotCSAgICAoY29udHJvbHAgPT0gTlVMTCkp
IHsKLQkJLyogdXNlciBkb2VzIG5vdCB3YW50IHRoZSBzbmRyY3YgY3RsICovCi0JCWZpbGxpbmdf
c2luZm8gPSAwOwotCX0KLQlpZiAocHNhKSB7Ci0JCWZyb20gPSAoc3RydWN0IHNvY2thZGRyICop
c29ja2J1ZjsKLQkJZnJvbWxlbiA9IHNpemVvZihzb2NrYnVmKTsKLSNpZmRlZiBIQVZFX1NBX0xF
TgotCQlmcm9tLT5zYV9sZW4gPSAwOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJZnJvbSA9IE5VTEw7
Ci0JCWZyb21sZW4gPSAwOwotCX0KLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09D
S0VUX0xPQ0soc28sIDEpOwotI2VuZGlmCi0JaWYgKGZpbGxpbmdfc2luZm8pIHsKLQkJbWVtc2V0
KCZzaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsKLQl9Ci0JZXJyb3Ig
PSBzY3RwX3NvcmVjdm1zZyhzbywgdWlvLCBtcDAsIGZyb20sIGZyb21sZW4sIGZsYWdzcCwKLQkg
ICAgKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2luZm8sIGZpbGxpbmdfc2luZm8pOwotCWlm
IChjb250cm9scCAhPSBOVUxMKSB7Ci0JCS8qIGNvcHkgYmFjayB0aGUgc2luZm8gaW4gYSBDTVNH
IGZvcm1hdCAqLwotCQlpZiAoZmlsbGluZ19zaW5mbykKLQkJCSpjb250cm9scCA9IHNjdHBfYnVp
bGRfY3RsX25jaHVuayhpbnAsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2luZm8pOwotCQllbHNlCi0JCQkqY29udHJvbHAg
PSBOVUxMOwotCX0KLQlpZiAocHNhKSB7Ci0JCS8qIGNvcHkgYmFjayB0aGUgYWRkcmVzcyBpbmZv
ICovCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGZyb20gJiYgZnJvbS0+c2FfbGVuKSB7Ci0j
ZWxzZQotCQlpZiAoZnJvbSkgewotI2VuZGlmCi0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQkJ
KnBzYSA9IHNvZHVwc29ja2FkZHIoZnJvbSwgTV9OT1dBSVQpOwotI2Vsc2UKLQkJCSpwc2EgPSBk
dXBfc29ja2FkZHIoZnJvbSwgbXAwID09IDApOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQkqcHNh
ID0gTlVMTDsKLQkJfQotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOwotI2VuZGlmCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLQotI2lmIChkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDYwMzAwMCkgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykKLS8qCi0gKiBHZW5lcmFsIHJvdXRpbmUgdG8gYWxsb2NhdGUgYSBoYXNo
IHRhYmxlIHdpdGggY29udHJvbCBvZiBtZW1vcnkgZmxhZ3MuCi0gKiBpcyBpbiA3LjAgYW5kIGJl
eW9uZCBmb3Igc3VyZSA6LSkKLSAqLwotdm9pZCAqCi1zY3RwX2hhc2hpbml0X2ZsYWdzKGludCBl
bGVtZW50cywgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgICB1
X2xvbmcgKmhhc2htYXNrLCBpbnQgZmxhZ3MpCi17Ci0JbG9uZyBoYXNoc2l6ZTsKLQlMSVNUX0hF
QUQoZ2VuZXJpYywgZ2VuZXJpYykgKmhhc2h0Ymw7Ci0JaW50IGk7Ci0KLQotCWlmIChlbGVtZW50
cyA8PSAwKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQlwYW5pYygiaGFzaGluaXQ6IGJhZCBlbGVt
ZW50cyIpOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYoImhhc2hpbml0OiBiYWQgZWxlbWVudHM/Iik7
Ci0JCWVsZW1lbnRzID0gMTsKLSNlbmRpZgotCX0KLQlmb3IgKGhhc2hzaXplID0gMTsgaGFzaHNp
emUgPD0gZWxlbWVudHM7IGhhc2hzaXplIDw8PSAxKQotCQljb250aW51ZTsKLQloYXNoc2l6ZSA+
Pj0gMTsKLQlpZiAoZmxhZ3MgJiBIQVNIX1dBSVRPSykKLQkJaGFzaHRibCA9IG1hbGxvYygodV9s
b25nKWhhc2hzaXplICogc2l6ZW9mKCpoYXNodGJsKSwgdHlwZSwgTV9XQUlUT0spOwotCWVsc2Ug
aWYgKGZsYWdzICYgSEFTSF9OT1dBSVQpCi0JCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNo
c2l6ZSAqIHNpemVvZigqaGFzaHRibCksIHR5cGUsIE1fTk9XQUlUKTsKLQllbHNlIHsKLSNpZmRl
ZiBJTlZBUklBTlRTCi0JCXBhbmljKCJmbGFnIGluY29ycmVjdCBpbiBoYXNoaW5pdF9mbGFncyIp
OwotI2Vsc2UKLQkJcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotCX0KLQotCS8qIG5vIG1lbW9yeT8g
Ki8KLQlpZiAoaGFzaHRibCA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JZm9yIChpID0g
MDsgaSA8IGhhc2hzaXplOyBpKyspCi0JCUxJU1RfSU5JVCgmaGFzaHRibFtpXSk7Ci0JKmhhc2ht
YXNrID0gaGFzaHNpemUgLSAxOwotCXJldHVybiAoaGFzaHRibCk7Ci19Ci0jZW5kaWYKLQotI2Vs
c2UgLyogIF9fVXNlcnNwYWNlX18gaWZkZWYgYWJvdmUgc2N0cF9zb3JlY2VpdmUgKi8KLS8qCi0g
KiBfX1VzZXJzcGFjZV9fIERlZmluaW5nIHNjdHBfaGFzaGluaXRfZmxhZ3MoKSBhbmQgc2N0cF9o
YXNoZGVzdHJveSgpIGZvciB1c2VybGFuZC4KLSAqIE5PVEU6IFdlIGRvbid0IHdhbnQgbXVsdGlw
bGUgZGVmaW5pdGlvbnMgaGVyZS4gU28gc2N0cF9oYXNoaW5pdF9mbGFncygpIGFib3ZlIGZvcgot
ICpfX0ZyZWVCU0RfXyBtdXN0IGJlIGV4Y2x1ZGVkLgotICoKLSAqLwotCi12b2lkICoKLXNjdHBf
aGFzaGluaXRfZmxhZ3MoaW50IGVsZW1lbnRzLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsCi0g
ICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaGFzaG1hc2ssIGludCBmbGFncykKLXsKLQlsb25n
IGhhc2hzaXplOwotCUxJU1RfSEVBRChnZW5lcmljLCBnZW5lcmljKSAqaGFzaHRibDsKLQlpbnQg
aTsKLQotCWlmIChlbGVtZW50cyA8PSAwKSB7Ci0JCVNDVFBfUFJJTlRGKCJoYXNoaW5pdDogYmFk
IGVsZW1lbnRzPyIpOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJcmV0dXJuIChOVUxMKTsKLSNlbHNl
Ci0JCWVsZW1lbnRzID0gMTsKLSNlbmRpZgotCX0KLQlmb3IgKGhhc2hzaXplID0gMTsgaGFzaHNp
emUgPD0gZWxlbWVudHM7IGhhc2hzaXplIDw8PSAxKQotCQljb250aW51ZTsKLQloYXNoc2l6ZSA+
Pj0gMTsKLQkvKmNhbm5vdCB1c2UgTUFMTE9DIGhlcmUgYmVjYXVzZSBpdCBoYXMgdG8gYmUgZGVj
bGFyZWQgb3IgZGVmaW5lZAotCSAgdXNpbmcgTUFMTE9DX0RFQ0xBUkUgb3IgTUFMTE9DX0RFRklO
RSBmaXJzdC4gKi8KLQlpZiAoZmxhZ3MgJiBIQVNIX1dBSVRPSykKLQkJaGFzaHRibCA9IG1hbGxv
YygodV9sb25nKWhhc2hzaXplICogc2l6ZW9mKCpoYXNodGJsKSk7Ci0JZWxzZSBpZiAoZmxhZ3Mg
JiBIQVNIX05PV0FJVCkKLQkJaGFzaHRibCA9IG1hbGxvYygodV9sb25nKWhhc2hzaXplICogc2l6
ZW9mKCpoYXNodGJsKSk7Ci0JZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQlTQ1RQX1BSSU5U
RigiZmxhZyBpbmNvcnJlY3QgaW4gaGFzaGluaXRfZmxhZ3MuXG4iKTsKLSNlbmRpZgotCQlyZXR1
cm4gKE5VTEwpOwotCX0KLQotCS8qIG5vIG1lbW9yeT8gKi8KLQlpZiAoaGFzaHRibCA9PSBOVUxM
KQotCQlyZXR1cm4gKE5VTEwpOwotCi0JZm9yIChpID0gMDsgaSA8IGhhc2hzaXplOyBpKyspCi0J
CUxJU1RfSU5JVCgmaGFzaHRibFtpXSk7Ci0JKmhhc2htYXNrID0gaGFzaHNpemUgLSAxOwotCXJl
dHVybiAoaGFzaHRibCk7Ci19Ci0KLQotdm9pZAotc2N0cF9oYXNoZGVzdHJveSh2b2lkICp2aGFz
aHRibCwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2spCi17Ci0JTElT
VF9IRUFEKGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsLCAqaHA7Ci0KLQloYXNodGJsID0gdmhh
c2h0Ymw7Ci0JZm9yIChocCA9IGhhc2h0Ymw7IGhwIDw9ICZoYXNodGJsW2hhc2htYXNrXTsgaHAr
KykKLQkJaWYgKCFMSVNUX0VNUFRZKGhwKSkgewotCQkJU0NUUF9QUklOVEYoImhhc2hkZXN0cm95
OiBoYXNoIG5vdCBlbXB0eS5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JRlJFRShoYXNodGJsLCB0
eXBlKTsKLX0KLQotCi12b2lkCi1zY3RwX2hhc2hmcmVlZGVzdHJveSh2b2lkICp2aGFzaHRibCwg
c3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2spCi17Ci0JTElTVF9IRUFE
KGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsLyosICpocCovOwotCS8qCi0JTElTVF9FTlRSWSh0
eXBlKSAqc3RhcnQsICp0ZW1wOwotCSAqLwotCWhhc2h0YmwgPSB2aGFzaHRibDsKLQkvKiBBcHBh
cmVudGx5IHRlbXAgaXMgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwgc28gYXR0ZW1wdHMgdG8K
LQkgICBmcmVlIGl0IHJlc3VsdHMgaW4gZXJyb3IuCi0JZm9yIChocCA9IGhhc2h0Ymw7IGhwIDw9
ICZoYXNodGJsW2hhc2htYXNrXTsgaHArKykKLQkJaWYgKCFMSVNUX0VNUFRZKGhwKSkgewotCQkJ
c3RhcnQgPSBMSVNUX0ZJUlNUKGhwKTsKLQkJCXdoaWxlIChzdGFydCAhPSBOVUxMKSB7Ci0JCQkJ
dGVtcCA9IHN0YXJ0OwotCQkJCXN0YXJ0ID0gc3RhcnQtPmxlX25leHQ7Ci0JCQkJU0NUUF9QUklO
VEYoIiVzOiAlcCBcbiIsIF9fZnVuY19fLCAodm9pZCAqKXRlbXApOwotCQkJCUZSRUUodGVtcCwg
dHlwZSk7Ci0JCQl9Ci0JCX0KLQkgKi8KLQlGUkVFKGhhc2h0YmwsIHR5cGUpOwotfQotCi0KLSNl
bmRpZgotCi0KLWludAotc2N0cF9jb25uZWN0eF9oZWxwZXJfYWRkKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJIGludCB0b3RhZGRyLCBpbnQgKmVycm9y
KQotewotCWludCBhZGRlZCA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
LQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCXNpemVfdCBpbmNyID0gMDsKLSNpZmRlZiBJTkVUCi0J
c3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKLQotCXNhID0gYWRkcjsKLQlpbnAgPSBzdGNiLT5z
Y3RwX2VwOwotCSplcnJvciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHRvdGFkZHI7IGkrKykgewot
CQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoK
LQkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilzYTsKLQkJCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERS
X0FOWSkgfHwKLQkJCSAgICAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FT
VCkgfHwKLQkJCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLT5zaW5fYWRkci5zX2FkZHIpKSkg
ewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBVVElMLCBFSU5WQUwpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQ
VVRJTCArIFNDVFBfTE9DXzcpOwotCQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCQlnb3RvIG91dF9u
b3c7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHN0
Y2ItPmFzb2MucG9ydCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NF
VFNDT1BFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQUREUl9JU19DT05GSVJN
RUQpKSB7Ci0JCQkJLyogYXNzb2MgZ29uZSBubyB1bi1sb2NrICovCi0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVOT0JVRlMpOwot
CQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0J
CQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzgp
OwotCQkJCSplcnJvciA9IEVOT0JVRlM7Ci0JCQkJZ290byBvdXRfbm93OwotCQkJfQotCQkJYWRk
ZWQrKzsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoK
LQkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2lu
Ni0+c2luNl9hZGRyKSB8fAotCQkJICAgIElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2lu
Nl9hZGRyKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAs
IHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzkpOwotCQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCQln
b3RvIG91dF9ub3c7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2Es
IE5VTEwsIHN0Y2ItPmFzb2MucG9ydCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQ
X0RPTk9UX1NFVFNDT1BFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQUREUl9J
U19DT05GSVJNRUQpKSB7Ci0JCQkJLyogYXNzb2MgZ29uZSBubyB1bi1sb2NrICovCi0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVO
T0JVRlMpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFM
X1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFND
VFBfTE9DXzEwKTsKLQkJCQkqZXJyb3IgPSBFTk9CVUZTOwotCQkJCWdvdG8gb3V0X25vdzsKLQkJ
CX0KLQkJCWFkZGVkKys7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQkJaW5jciA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKLQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCBzYSwgTlVMTCwgc3RjYi0+
YXNvYy5wb3J0LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VUU0NP
UEUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkp
IHsKLQkJCQkvKiBhc3NvYyBnb25lIG5vIHVuLWxvY2sgKi8KLQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PQlVGUyk7Ci0JCQkJ
KHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMTEpOwot
CQkJCSplcnJvciA9IEVOT0JVRlM7Ci0JCQkJZ290byBvdXRfbm93OwotCQkJfQotCQkJYWRkZWQr
KzsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlzYSA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBpbmNyKTsKLQl9Ci0gb3V0X25vdzoK
LQlyZXR1cm4gKGFkZGVkKTsKLX0KLQotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfY29ubmVjdHhf
aGVscGVyX2ZpbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNvY2thZGRyICphZGRy
LAotCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFkZHIsCi0JCQkgIHVuc2lnbmVkIGludCAqbnVtX3Y0
LCB1bnNpZ25lZCBpbnQgKm51bV92NiwgaW50ICplcnJvciwKLQkJCSAgdW5zaWduZWQgaW50IGxp
bWl0LCBpbnQgKmJhZF9hZGRyKQotewotCXN0cnVjdCBzb2NrYWRkciAqc2E7Ci0Jc3RydWN0IHNj
dHBfdGNiICpzdGNiID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgaW5jciwgYXQsIGk7Ci0KLQlhdCA9
IDA7Ci0Jc2EgPSBhZGRyOwotCSplcnJvciA9ICpudW1fdjYgPSAqbnVtX3Y0ID0gMDsKLQkvKiBh
Y2NvdW50IGFuZCB2YWxpZGF0ZSBhZGRyZXNzZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgKnRvdGFk
ZHI7IGkrKykgewotCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNh
c2UgQUZfSU5FVDoKLQkJCWluY3IgPSAodW5zaWduZWQgaW50KXNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2EtPnNhX2xlbiAhPSBpbmNyKSB7
Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJKmJhZF9hZGRyID0gMTsK
LQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotI2VuZGlmCi0JCQkoKm51bV92NCkgKz0gMTsKLQkJ
CWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJewotCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopc2E7Ci0JCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKLQkJCQkvKiBNdXN0IGJlIG5vbi1tYXBwZWQgZm9yIGNvbm5lY3R4ICovCi0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFM
KTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJKmJhZF9hZGRyID0gMTsKLQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJfQotCQkJaW5jciA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2EtPnNhX2xlbiAhPSBpbmNy
KSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQVVRJTCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJKmJhZF9hZGRyID0g
MTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotI2VuZGlmCi0JCQkoKm51bV92NikgKz0gMTsK
LQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCSp0b3RhZGRyID0gaTsKLQkJ
CWluY3IgPSAwOwotCQkJLyogd2UgYXJlIGRvbmUgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChp
ID09ICp0b3RhZGRyKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnAp
OwotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBzYSwgTlVMTCwg
TlVMTCwgTlVMTCk7Ci0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCS8qIEFscmVhZHkgaGF2ZSBv
ciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLwotCQkJcmV0dXJuIChzdGNiKTsKLQkJfSBl
bHNlIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0KLQkJaWYgKChhdCArIGluY3Ip
ID4gbGltaXQpIHsKLQkJCSp0b3RhZGRyID0gaTsKLQkJCWJyZWFrOwotCQl9Ci0JCXNhID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIGluY3IpOwotCX0KLQlyZXR1cm4gKChzdHJ1
Y3Qgc2N0cF90Y2IgKilOVUxMKTsKLX0KLQotLyoKLSAqIHNjdHBfYmluZHgoQUREKSBmb3Igb25l
IGFkZHJlc3MuCi0gKiBhc3N1bWVzIGFsbCBhcmd1bWVudHMgYXJlIHZhbGlkL2NoZWNrZWQgYnkg
Y2FsbGVyLgotICovCi12b2lkCi1zY3RwX2JpbmR4X2FkZF9hZGRyZXNzKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkgICAgICAgc3RydWN0IHNvY2thZGRyICpz
YSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkgICAgICAgdWludDMyX3QgdnJmX2lkLCBpbnQg
KmVycm9yLCB2b2lkICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkcl90b3VzZTsKLSNpZiBk
ZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0Jc3RydWN0IHNvY2thZGRyX2luIHNpbjsK
LSNlbmRpZgotI2lmZGVmIFNDVFBfTVZSRgotCWludCBpLCBmbmQgPSAwOwotI2VuZGlmCi0KLQkv
KiBzZWUgaWYgd2UncmUgYm91bmQgYWxsIGFscmVhZHkhICovCi0JaWYgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCSplcnJvciA9IEVJ
TlZBTDsKLQkJcmV0dXJuOwotCX0KLSNpZmRlZiBTQ1RQX01WUkYKLQkvKiBJcyB0aGUgVlJGIG9u
ZSB3ZSBoYXZlICovCi0JZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewotCQlp
ZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQlmbmQgPSAxOwotCQkJYnJlYWs7
Ci0JCX0KLQl9Ci0JaWYgKCFmbmQpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJKmVycm9yID0gRUlOVkFMOwot
CQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JYWRkcl90b3VzZSA9IHNhOwotI2lmZGVmIElORVQ2Ci0J
aWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLSNpZmRlZiBJTkVUCi0JCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7Ci0KLSNlbmRpZgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCWlmIChz
YS0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsK
LQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmCi0JCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApIHsKLQkJCS8qIGNh
biBvbmx5IGJpbmQgdjYgb24gUEZfSU5FVDYgc29ja2V0cyAqLwotCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJCSpl
cnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotI2lmZGVmIElORVQKLQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcl90b3VzZTsKLQkJaWYgKElONl9JU19BRERSX1Y0TUFQ
UEVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkgewot
CQkJCS8qIGNhbid0IGJpbmQgdjQtbWFwcGVkIG9uIFBGX0lORVQgc29ja2V0cyAqLwotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJ
TlZBTCk7Ci0JCQkJKmVycm9yID0gRUlOVkFMOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWluNl9z
aW42XzJfc2luKCZzaW4sIHNpbjYpOwotCQkJYWRkcl90b3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luOwotCQl9Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JaWYgKHNhLT5z
YV9mYW1pbHkgPT0gQUZfSU5FVCkgewotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCWlmIChzYS0+c2Ff
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJKmVy
cm9yID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKLQkJICAgIFNDVFBfSVBWNl9WNk9O
TFkoaW5wKSkgewotCQkJLyogY2FuJ3QgYmluZCB2NCBvbiBQRl9JTkVUIHNvY2tldHMgKi8KLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUws
IEVJTlZBTCk7Ci0JCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0jZW5k
aWYKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotI2lm
ICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykpCi0JCWlmIChwID09IE5VTEwpIHsKLQkJCS8qIENhbid0IGdldCBwcm9j
IGZvciBOZXQvT3BlbiBCU0QgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCQkqZXJyb3IgPSBFSU5WQUw7Ci0J
CQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQkqZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIGFk
ZHJfdG91c2UsIE5VTEwsIHApOwotCQlyZXR1cm47Ci0JfQotCS8qCi0JICogTm8gbG9ja3MgcmVx
dWlyZWQgaGVyZSBzaW5jZSBiaW5kIGFuZCBtZ210X2VwX3NhCi0JICogYWxsIGRvIHRoZWlyIG93
biBsb2NraW5nLiBJZiB3ZSBkbyBzb21ldGhpbmcgZm9yCi0JICogdGhlIEZJWDogYmVsb3cgd2Ug
bWF5IG5lZWQgdG8gbG9jayBpbiB0aGF0IGNhc2UuCi0JICovCi0JaWYgKGFzc29jX2lkID09IDAp
IHsKLQkJLyogYWRkIHRoZSBhZGRyZXNzICovCi0JCXN0cnVjdCBzY3RwX2lucGNiICpsZXA7Ci0J
CXN0cnVjdCBzb2NrYWRkcl9pbiAqbHNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3Rv
dXNlOwotCi0JCS8qIHZhbGlkYXRlIHRoZSBpbmNvbWluZyBwb3J0ICovCi0JCWlmICgobHNpbi0+
c2luX3BvcnQgIT0gMCkgJiYKLQkJICAgIChsc2luLT5zaW5fcG9ydCAhPSBpbnAtPnNjdHBfbHBv
cnQpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFSU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9
IGVsc2UgewotCQkJLyogdXNlciBzcGVjaWZpZWQgMCBwb3J0LCBzZXQgaXQgdG8gZXhpc3Rpbmcg
cG9ydCAqLwotCQkJbHNpbi0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCX0KLQotCQls
ZXAgPSBzY3RwX3BjYl9maW5kZXAoYWRkcl90b3VzZSwgMSwgMCwgdnJmX2lkKTsKLQkJaWYgKGxl
cCAhPSBOVUxMKSB7Ci0JCQkvKgotCQkJICogV2UgbXVzdCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50
Ci0JCQkgKiBzaW5jZSB3ZSBoYXZlIHRoZSBlcCBhbHJlYWR5IGFuZAotCQkJICogYXJlIGJpbmRp
bmcuIE5vIHJlbW92ZSBnb2luZyBvbgotCQkJICogaGVyZS4KLQkJCSAqLwotCQkJU0NUUF9JTlBf
REVDUl9SRUYobGVwKTsKLQkJfQotCQlpZiAobGVwID09IGlucCkgewotCQkJLyogYWxyZWFkeSBi
b3VuZCB0byBpdC4uIG9rICovCi0JCQlyZXR1cm47Ci0JCX0gZWxzZSBpZiAobGVwID09IE5VTEwp
IHsKLQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl90b3VzZSktPnNpbl9wb3J0ID0gMDsK
LQkJCSplcnJvciA9IHNjdHBfYWRkcl9tZ210X2VwX3NhKGlucCwgYWRkcl90b3VzZSwKLQkJCQkJ
CSAgICAgIFNDVFBfQUREX0lQX0FERFJFU1MsCi0JCQkJCQkgICAgICB2cmZfaWQsIE5VTEwpOwot
CQl9IGVsc2UgewotCQkJKmVycm9yID0gRUFERFJJTlVTRTsKLQkJfQotCQlpZiAoKmVycm9yKQot
CQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEZJWDogZGVjaWRlIHdoZXRoZXIgd2Ug
YWxsb3cgYXNzb2MgYmFzZWQKLQkJICogYmluZHgKLQkJICovCi0JfQotfQotCi0vKgotICogc2N0
cF9iaW5keChERUxFVEUpIGZvciBvbmUgYWRkcmVzcy4KLSAqIGFzc3VtZXMgYWxsIGFyZ3VtZW50
cyBhcmUgdmFsaWQvY2hlY2tlZCBieSBjYWxsZXIuCi0gKi8KLXZvaWQKLXNjdHBfYmluZHhfZGVs
ZXRlX2FkZHJlc3Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLQkJCSAgc3RydWN0IHNvY2thZGRy
ICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkJICB1aW50MzJfdCB2cmZfaWQsIGludCAq
ZXJyb3IpCi17Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyX3RvdXNlOwotI2lmIGRlZmluZWQoSU5F
VCkgJiYgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0j
aWZkZWYgU0NUUF9NVlJGCi0JaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYKLQotCS8qIHNlZSBpZiB3
ZSdyZSBib3VuZCBhbGwgYWxyZWFkeSEgKi8KLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJKmVycm9yID0gRUlOVkFMOwotCQly
ZXR1cm47Ci0JfQotI2lmZGVmIFNDVFBfTVZSRgotCS8qIElzIHRoZSBWUkYgb25lIHdlIGhhdmUg
Ki8KLQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7Ci0JCWlmICh2cmZfaWQg
PT0gaW5wLT5tX3ZyZl9pZHNbaV0pIHsKLQkJCWZuZCA9IDE7Ci0JCQlicmVhazsKLQkJfQotCX0K
LQlpZiAoIWZuZCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCXJldHVybjsK
LQl9Ci0jZW5kaWYKLQlhZGRyX3RvdXNlID0gc2E7Ci0jaWZkZWYgSU5FVDYKLQlpZiAoc2EtPnNh
X2ZhbWlseSA9PSBBRl9JTkVUNikgewotI2lmZGVmIElORVQKLQkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNjsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKHNhLT5zYV9sZW4g
IT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJKmVycm9y
ID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgewotCQkJLyogY2FuIG9ubHkgYmlu
ZCB2NiBvbiBQRl9JTkVUNiBzb2NrZXRzICovCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJKmVycm9yID0gRUlO
VkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jaWZkZWYgSU5FVAotCQlzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilhZGRyX3RvdXNlOwotCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYt
PnNpbjZfYWRkcikpIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpICYmCi0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7Ci0JCQkJLyogY2Fu
J3QgYmluZCBtYXBwZWQtdjQgb24gUEZfSU5FVCBzb2NrZXRzICovCi0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJ
CQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJaW42X3NpbjZfMl9zaW4o
JnNpbiwgc2luNik7Ci0JCQlhZGRyX3RvdXNlID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47Ci0J
CX0KLSNlbmRpZgotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQlpZiAoc2EtPnNhX2ZhbWlseSA9
PSBBRl9JTkVUKSB7Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCQkqZXJyb3IgPSBFSU5W
QUw7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7
Ci0JCQkvKiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lORVQgc29ja2V0cyAqLwotCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsK
LQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotCX0KLSNlbmRpZgotCS8qCi0J
ICogTm8gbG9jayByZXF1aXJlZCBtZ210X2VwX3NhIGRvZXMgaXRzIG93biBsb2NraW5nLgotCSAq
IElmIHRoZSBGSVg6IGJlbG93IGlzIGV2ZXIgY2hhbmdlZCB3ZSBtYXkgbmVlZCB0bwotCSAqIGxv
Y2sgYmVmb3JlIGNhbGxpbmcgYXNzb2NpYXRpb24gbGV2ZWwgYmluZGluZy4KLQkgKi8KLQlpZiAo
YXNzb2NfaWQgPT0gMCkgewotCQkvKiBkZWxldGUgdGhlIGFkZHJlc3MgKi8KLQkJKmVycm9yID0g
c2N0cF9hZGRyX21nbXRfZXBfc2EoaW5wLCBhZGRyX3RvdXNlLAotCQkJCQkgICAgICBTQ1RQX0RF
TF9JUF9BRERSRVNTLAotCQkJCQkgICAgICB2cmZfaWQsIE5VTEwpOwotCX0gZWxzZSB7Ci0JCS8q
Ci0JCSAqIEZJWDogZGVjaWRlIHdoZXRoZXIgd2UgYWxsb3cgYXNzb2MgYmFzZWQKLQkJICogYmlu
ZHgKLQkJICovCi0JfQotfQotCi0vKgotICogcmV0dXJucyB0aGUgdmFsaWQgbG9jYWwgYWRkcmVz
cyBjb3VudCBmb3IgYW4gYXNzb2MsIHRha2luZyBpbnRvIGFjY291bnQKLSAqIGFsbCBzY29waW5n
IHJ1bGVzCi0gKi8KLWludAotc2N0cF9sb2NhbF9hZGRyX2NvdW50KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYikKLXsKLQlpbnQgbG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVUKQotCWludCBp
cHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkIChJ
TkVUNikKLQlpbnQgbG9jYWxfc2NvcGUsIHNpdGVfc2NvcGUsIGlwdjZfYWRkcl9sZWdhbDsKLSNl
bmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpbnQgY29ubl9hZGRyX2xlZ2FsOwot
I2VuZGlmCi0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0Jc3RydWN0IHNjdHBfaWZuICpzY3RwX2lm
bjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwotCWludCBjb3VudCA9IDA7Ci0KLQkvKiBU
dXJuIG9uIGFsbCB0aGUgYXBwcm9wcmlhdGUgc2NvcGVzICovCi0JbG9vcGJhY2tfc2NvcGUgPSBz
dGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlOwotI2lmIGRlZmluZWQoSU5FVCkKLQlpcHY0
X2xvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOwotCWlwdjRf
YWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChJTkVUNikKLQlsb2NhbF9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxf
c2NvcGU7Ci0Jc2l0ZV9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZTsKLQlpcHY2
X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbDsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljb25uX2FkZHJfbGVnYWwgPSBzdGNiLT5hc29j
LnNjb3BlLmNvbm5fYWRkcl9sZWdhbDsKLSNlbmRpZgotCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsK
LQl2cmYgPSBzY3RwX2ZpbmRfdnJmKHN0Y2ItPmFzb2MudnJmX2lkKTsKLQlpZiAodnJmID09IE5V
TEwpIHsKLQkJLyogbm8gdnJmLCBubyBhZGRyZXNzZXMgKi8KLQkJU0NUUF9JUElfQUREUl9SVU5M
T0NLKCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKgotCQkgKiBib3VuZCBhbGwgY2Fz
ZTogZ28gdGhyb3VnaCBhbGwgaWZucyBvbiB0aGUgdnJmCi0JCSAqLwotCQlMSVNUX0ZPUkVBQ0go
c2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCQlpZiAoKGxvb3BiYWNrX3Nj
b3BlID09IDApICYmCi0JCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7Ci0J
CQkJY29udGludWU7Ci0JCQl9Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+
aWZhbGlzdCwgbmV4dF9pZmEpIHsKLQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3Rj
Yiwgc2N0cF9pZmEpKQotCQkJCQljb250aW51ZTsKLQkJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJ
CWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwot
Ci0JCQkJCQlzaW4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luOwotCQkJCQkJaWYgKHNpbi0+c2lu
X2FkZHIuc19hZGRyID09IDApIHsKLQkJCQkJCQkvKiBza2lwIHVuc3BlY2lmaWVkIGFkZHJzICov
Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJ
CQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2Ny
ZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkgewot
CQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotI2VuZGlmCi0JCQkJCQlpZiAoKGlwdjRfbG9jYWxf
c2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAgICAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNp
bl9hZGRyKSkpIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJCS8qIGNvdW50IHRo
aXMgb25lICovCi0JCQkJCQljb3VudCsrOwotCQkJCQl9IGVsc2UgewotCQkJCQkJY29udGludWU7
Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZf
SU5FVDY6Ci0JCQkJCWlmIChpcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQkJCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0KLSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpICYmICFk
ZWZpbmVkKFNDVFBfS0FNRSkKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgbHNhNjsKLSNlbmRp
ZgotCQkJCQkJc2luNiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42OwotCQkJCQkJaWYgKElONl9J
U19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkJCQkJY29udGludWU7
Ci0JCQkJCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hl
Y2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQkJY29udGludWU7
Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYt
PnNpbjZfYWRkcikpIHsKLQkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0gMCkKLQkJCQkJCQkJY29u
dGludWU7Ci0jaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQotCQkJCQkJCWlmIChz
aW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkJCQkJaWYg
KHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkKLQkJCQkJCQkJCS8qCi0JCQkJCQkJCQkgKiBi
YWQgbGluawotCQkJCQkJCQkJICogbG9jYWwKLQkJCQkJCQkJCSAqIGFkZHJlc3MKLQkJCQkJCQkJ
CSAqLwotCQkJCQkJCQkJY29udGludWU7Ci0jZWxzZQotCQkJCQkJCQlsc2E2ID0gKnNpbjY7Ci0J
CQkJCQkJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZsc2E2LAotCQkJCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAmbHNhNi5zaW42X2FkZHIsCi0JCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgIE5V
TEwpKQotCQkJCQkJCQkJLyoKLQkJCQkJCQkJCSAqIGJhZCBsaW5rCi0JCQkJCQkJCQkgKiBsb2Nh
bAotCQkJCQkJCQkJICogYWRkcmVzcwotCQkJCQkJCQkJICovCi0JCQkJCQkJCQljb250aW51ZTsK
LQkJCQkJCQkJc2luNiA9ICZsc2E2OwotI2VuZGlmIC8qIFNDVFBfS0FNRSAqLwotCQkJCQkJCX0K
LSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0JCQkJCQl9Ci0JCQkJCQlpZiAo
KHNpdGVfc2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAgICAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZz
aW42LT5zaW42X2FkZHIpKSkgewotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotCQkJCQkJLyog
Y291bnQgdGhpcyBvbmUgKi8KLQkJCQkJCWNvdW50Kys7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJY2FzZSBBRl9DT05OOgotCQkJ
CQlpZiAoY29ubl9hZGRyX2xlZ2FsKSB7Ci0JCQkJCQljb3VudCsrOwotCQkJCQl9Ci0JCQkJCWJy
ZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJLyogVFNOSCAqLwotCQkJCQlicmVhazsK
LQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBzdWJzZXQgYm91bmQgY2Fz
ZQotCQkgKi8KLQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCQlMSVNUX0ZPUkVBQ0gobGFk
ZHIsICZzdGNiLT5zY3RwX2VwLT5zY3RwX2FkZHJfbGlzdCwKLQkJCSAgICAgc2N0cF9ueHRfYWRk
cikgewotCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEpKSB7
Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBjb3VudCB0aGlzIG9uZSAqLwotCQkJY291bnQr
KzsKLQkJfQotCX0KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKGNvdW50KTsK
LX0KLQotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0KLXZvaWQKLXNjdHBfbG9n
X3RyYWNlKHVpbnQzMl90IHN1YnN5cywgY29uc3QgY2hhciAqc3RyIFNDVFBfVU5VU0VELCB1aW50
MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBkLCB1aW50MzJfdCBlLCB1
aW50MzJfdCBmKQotewotCXVpbnQzMl90IHNhdmVpbmRleCwgbmV3aW5kZXg7Ci0KLSNpZiBkZWZp
bmVkKF9fV2luZG93c19fKQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSA9PSBOVUxM
KSB7Ci0JCXJldHVybjsKLQl9Ci0JZG8gewotCQlzYXZlaW5kZXggPSBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nKS0+aW5kZXg7Ci0JCWlmIChzYXZlaW5kZXggPj0gU0NUUF9NQVhfTE9HR0lOR19T
SVpFKSB7Ci0JCQluZXdpbmRleCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQluZXdpbmRleCA9IHNhdmVp
bmRleCArIDE7Ci0JCX0KLQl9IHdoaWxlIChhdG9taWNfY21wc2V0X2ludCgmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZyktPmluZGV4LCBzYXZlaW5kZXgsIG5ld2luZGV4KSA9PSAwKTsKLQlpZiAo
c2F2ZWluZGV4ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgewotCQlzYXZlaW5kZXggPSAwOwot
CX0KLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS50aW1lc3Rh
bXAgPSBTQ1RQX0dFVF9DWUNMRUNPVU5UOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5l
bnRyeVtzYXZlaW5kZXhdLnN1YnN5cyA9IHN1YnN5czsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMF0gPSBhOwotCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9IGI7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzJdID0gYzsKLQlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbM10gPSBkOwotCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s0XSA9IGU7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzVd
ID0gZjsKLSNlbHNlCi0JZG8gewotCQlzYXZlaW5kZXggPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nKS5pbmRleDsKLQkJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUpIHsK
LQkJCW5ld2luZGV4ID0gMTsKLQkJfSBlbHNlIHsKLQkJCW5ld2luZGV4ID0gc2F2ZWluZGV4ICsg
MTsKLQkJfQotCX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nKS5pbmRleCwgc2F2ZWluZGV4LCBuZXdpbmRleCkgPT0gMCk7Ci0JaWYgKHNhdmVpbmRl
eCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUpIHsKLQkJc2F2ZWluZGV4ID0gMDsKLQl9Ci0JU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS50aW1lc3RhbXAgPSBTQ1RQ
X0dFVF9DWUNMRUNPVU5UOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5W3NhdmVp
bmRleF0uc3Vic3lzID0gc3Vic3lzOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5
W3NhdmVpbmRleF0ucGFyYW1zWzBdID0gYTsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5l
bnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9IGI7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
ZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMl0gPSBjOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzNdID0gZDsKLQlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s0XSA9IGU7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbNV0gPSBmOwotI2VuZGlmCi19
Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDQ0Ci1zdGF0aWMgdm9pZAotc2N0cF9yZWN2X3VkcF90dW5uZWxlZF9wYWNrZXQo
c3RydWN0IG1idWYgKm0sIGludCBvZmYsIHN0cnVjdCBpbnBjYiAqaW5wLAotICAgIGNvbnN0IHN0
cnVjdCBzb2NrYWRkciAqc2EgU0NUUF9VTlVTRUQsIHZvaWQgKmN0eCBTQ1RQX1VOVVNFRCkKLXsK
LQlzdHJ1Y3QgaXAgKmlwaDsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBpcDZfaGRyICppcDY7Ci0j
ZW5kaWYKLQlzdHJ1Y3QgbWJ1ZiAqc3AsICpsYXN0OwotCXN0cnVjdCB1ZHBoZHIgKnVoZHI7Ci0J
dWludDE2X3QgcG9ydDsKLQotCWlmICgobS0+bV9mbGFncyAmIE1fUEtUSERSKSA9PSAwKSB7Ci0J
CS8qIENhbid0IGhhbmRsZSBvbmUgdGhhdCBpcyBub3QgYSBwa3QgaGRyICovCi0JCWdvdG8gb3V0
OwotCX0KLQkvKiBQdWxsIHRoZSBzcmMgcG9ydCAqLwotCWlwaCA9IG10b2QobSwgc3RydWN0IGlw
ICopOwotCXVoZHIgPSAoc3RydWN0IHVkcGhkciAqKSgoY2FkZHJfdClpcGggKyBvZmYpOwotCXBv
cnQgPSB1aGRyLT51aF9zcG9ydDsKLQkvKiBTcGxpdCBvdXQgdGhlIG1idWYgY2hhaW4uIExlYXZl
IHRoZQotCSAqIElQIGhlYWRlciBpbiBtLCBwbGFjZSB0aGUKLQkgKiByZXN0IGluIHRoZSBzcC4K
LQkgKi8KLQlzcCA9IG1fc3BsaXQobSwgb2ZmLCBNX05PV0FJVCk7Ci0JaWYgKHNwID09IE5VTEwp
IHsKLQkJLyogR2FrLCBkcm9wIHBhY2tldCwgd2UgY2FuJ3QgZG8gYSBzcGxpdCAqLwotCQlnb3Rv
IG91dDsKLQl9Ci0JaWYgKHNwLT5tX3BrdGhkci5sZW4gPCBzaXplb2Yoc3RydWN0IHVkcGhkcikg
KyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSB7Ci0JCS8qIEdhaywgcGFja2V0IGNhbid0IGhhdmUg
YW4gU0NUUCBoZWFkZXIgaW4gaXQgLSB0b28gc21hbGwgKi8KLQkJbV9mcmVlbShzcCk7Ci0JCWdv
dG8gb3V0OwotCX0KLQkvKiBOb3cgcHVsbCB1cCB0aGUgVURQIGhlYWRlciBhbmQgU0NUUCBoZWFk
ZXIgdG9nZXRoZXIgKi8KLQlzcCA9IG1fcHVsbHVwKHNwLCBzaXplb2Yoc3RydWN0IHVkcGhkcikg
KyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQlpZiAoc3AgPT0gTlVMTCkgewotCQkvKiBHYWsg
cHVsbHVwIGZhaWxlZCAqLwotCQlnb3RvIG91dDsKLQl9Ci0JLyogVHJpbSBvdXQgdGhlIFVEUCBo
ZWFkZXIgKi8KLQltX2FkaihzcCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQotCS8qIE5vdyBy
ZWNvbnN0cnVjdCB0aGUgbWJ1ZiBjaGFpbiAqLwotCWZvciAobGFzdCA9IG07IGxhc3QtPm1fbmV4
dDsgbGFzdCA9IGxhc3QtPm1fbmV4dCk7Ci0JbGFzdC0+bV9uZXh0ID0gc3A7Ci0JbS0+bV9wa3Ro
ZHIubGVuICs9IHNwLT5tX3BrdGhkci5sZW47Ci0JLyoKLQkgKiBUaGUgQ1NVTV9EQVRBX1ZBTElE
IGZsYWdzIGluZGljYXRlcyB0aGF0IHRoZSBIVyBjaGVja2VkIHRoZQotCSAqIFVEUCBjaGVja3N1
bSBhbmQgaXQgd2FzIHZhbGlkLgotCSAqIFNpbmNlIENTVU1fREFUQV9WQUxJRCA9PSBDU1VNX1ND
VFBfVkFMSUQgdGhpcyB3b3VsZCBpbXBseSB0aGF0Ci0JICogdGhlIEhXIGFsc28gdmVyaWZpZWQg
dGhlIFNDVFAgY2hlY2tzdW0uIFRoZXJlZm9yZSwgY2xlYXIgdGhlIGJpdC4KLQkgKi8KLSNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9B
RCwKLQkgICAgICAgICJzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tldCgpOiBQYWNrZXQgb2Yg
bGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCViLlxuIiwKLQkgICAg
ICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIGlmX25hbWUobS0+bV9wa3RoZHIucmN2aWYp
LAotCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCBDU1VNX0JJVFMpOwotI2Vs
c2UKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX3JlY3Zf
dWRwX3R1bm5lbGVkX3BhY2tldCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVz
IHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkg
ICAgICAgIGlmX25hbWUobS0+bV9wa3RoZHIucmN2aWYpLAotCSAgICAgICAgbS0+bV9wa3RoZHIu
Y3N1bV9mbGFncyk7Ci0jZW5kaWYKLQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzICY9IH5DU1VNX0RB
VEFfVkFMSUQ7Ci0JaXBoID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7Ci0Jc3dpdGNoIChpcGgtPmlw
X3YpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBJUFZFUlNJT046Ci0jaWYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gMTAwMDAwMAotCQlpcGgtPmlwX2xlbiA9IGh0b25zKG50b2hzKGlwaC0+aXBfbGVuKSAt
IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7Ci0jZWxzZQotCQlpcGgtPmlwX2xlbiAtPSBzaXplb2Yo
c3RydWN0IHVkcGhkcik7Ci0jZW5kaWYKLQkJc2N0cF9pbnB1dF93aXRoX3BvcnQobSwgb2ZmLCBw
b3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgSVBWNl9WRVJTSU9O
ID4+IDQ6Ci0JCWlwNiA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7Ci0JCWlwNi0+aXA2X3Bs
ZW4gPSBodG9ucyhudG9ocyhpcDYtPmlwNl9wbGVuKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7
Ci0JCXNjdHA2X2lucHV0X3dpdGhfcG9ydCgmbSwgJm9mZiwgcG9ydCk7Ci0JCWJyZWFrOwotI2Vu
ZGlmCi0JZGVmYXVsdDoKLQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm47Ci0gb3V0
OgotCW1fZnJlZW0obSk7Ci19Ci0jZW5kaWYKLQotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEx
MDAwMDAKLSNpZmRlZiBJTkVUCi1zdGF0aWMgdm9pZAotc2N0cF9yZWN2X2ljbXBfdHVubmVsZWRf
cGFja2V0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQgKnZpcCwgdm9pZCAqY3R4
IFNDVFBfVU5VU0VEKQotewotCXN0cnVjdCBpcCAqb3V0ZXJfaXAsICppbm5lcl9pcDsKLQlzdHJ1
Y3Qgc2N0cGhkciAqc2g7Ci0Jc3RydWN0IGljbXAgKmljbXA7Ci0Jc3RydWN0IHVkcGhkciAqdWRw
OwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjaDsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7Ci0JdWludDhfdCB0eXBlLCBjb2RlOwotCi0JaW5uZXJf
aXAgPSAoc3RydWN0IGlwICopdmlwOwotCWljbXAgPSAoc3RydWN0IGljbXAgKikoKGNhZGRyX3Qp
aW5uZXJfaXAgLQotCSAgICAoc2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNpemVvZihzdHJ1Y3QgaXAp
KSk7Ci0Jb3V0ZXJfaXAgPSAoc3RydWN0IGlwICopKChjYWRkcl90KWljbXAgLSBzaXplb2Yoc3Ry
dWN0IGlwKSk7Ci0JaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pIDwKLQkgICAgc2l6ZW9mKHN0
cnVjdCBpcCkgKyA4ICsgKGlubmVyX2lwLT5pcF9obCA8PCAyKSArIHNpemVvZihzdHJ1Y3QgdWRw
aGRyKSArIDgpIHsKLQkJcmV0dXJuOwotCX0KLQl1ZHAgPSAoc3RydWN0IHVkcGhkciAqKSgoY2Fk
ZHJfdClpbm5lcl9pcCArIChpbm5lcl9pcC0+aXBfaGwgPDwgMikpOwotCXNoID0gKHN0cnVjdCBz
Y3RwaGRyICopKHVkcCArIDEpOwotCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7Ci0Jc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xF
TgotCXNyYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQlz
cmMuc2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0Jc3JjLnNpbl9hZGRyID0gaW5uZXJfaXAtPmlw
X3NyYzsKLQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCWRz
dC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlkc3Quc2luX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JZHN0LnNpbl9wb3J0ID0g
c2gtPmRlc3RfcG9ydDsKLQlkc3Quc2luX2FkZHIgPSBpbm5lcl9pcC0+aXBfZHN0OwotCS8qCi0J
ICogJ2RzdCcgaG9sZHMgdGhlIGRlc3Qgb2YgdGhlIHBhY2tldCB0aGF0IGZhaWxlZCB0byBiZSBz
ZW50LgotCSAqICdzcmMnIGhvbGRzIG91ciBsb2NhbCBlbmRwb2ludCBhZGRyZXNzLiBUaHVzIHdl
IHJldmVyc2UKLQkgKiB0aGUgZHN0IGFuZCB0aGUgc3JjIGluIHRoZSBsb29rdXAuCi0JICovCi0J
aW5wID0gTlVMTDsKLQluZXQgPSBOVUxMOwotCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9h
ZGRyX3NhKChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQlpZiAoKHN0Y2IgIT0gTlVMTCkg
JiYKLQkgICAgKG5ldCAhPSBOVUxMKSAmJgotCSAgICAoaW5wICE9IE5VTEwpKSB7Ci0JCS8qIENo
ZWNrIHRoZSBVRFAgcG9ydCBudW1iZXJzICovCi0JCWlmICgodWRwLT51aF9kcG9ydCAhPSBuZXQt
PnBvcnQpIHx8Ci0JCSAgICAodWRwLT51aF9zcG9ydCAhPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSkpKSB7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0YWcgKi8KLQkJ
aWYgKG50b2hsKHNoLT52X3RhZykgIT0gMCkgewotCQkJLyoKLQkJCSAqIFRoaXMgbXVzdCBiZSB0
aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkCi0JCQkgKiBmb3Igc2VuZGluZyBvdXQgcGFja2V0cy4g
V2UgZG9uJ3QKLQkJCSAqIGNvbnNpZGVyIHBhY2tldHMgcmVmbGVjdGluZyB0aGUKLQkJCSAqIHZl
cmlmaWNhdGlvbiB0YWcuCi0JCQkgKi8KLQkJCWlmIChudG9obChzaC0+dl90YWcpICE9IHN0Y2It
PmFzb2MucGVlcl92dGFnKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVy
bjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChudG9ocyhvdXRlcl9pcC0+aXBfbGVuKSA+PQot
CQkJICAgIHNpemVvZihzdHJ1Y3QgaXApICsKLQkJCSAgICA4ICsgKGlubmVyX2lwLT5pcF9obCA8
PCAyKSArIDggKyAyMCkgewotCQkJCS8qCi0JCQkJICogSW4gdGhpcyBjYXNlIHdlIGNhbiBjaGVj
ayBpZiB3ZQotCQkJCSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0aGUKLQkJCQkgKiBpbml0
aWF0ZSB0YWcgbWF0Y2hlcy4KLQkJCQkgKi8KLQkJCQljaCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2No
dW5rICopKHNoICsgMSk7Ci0JCQkJaWYgKChjaC0+Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJ
QVRJT04pIHx8Ci0JCQkJICAgIChudG9obChjaC0+aW5pdC5pbml0aWF0ZV90YWcpICE9IHN0Y2It
PmFzb2MubXlfdnRhZykpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlyZXR1
cm47Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJ
cmV0dXJuOwotCQkJfQotCQl9Ci0JCXR5cGUgPSBpY21wLT5pY21wX3R5cGU7Ci0JCWNvZGUgPSBp
Y21wLT5pY21wX2NvZGU7Ci0JCWlmICgodHlwZSA9PSBJQ01QX1VOUkVBQ0gpICYmCi0JCSAgICAo
Y29kZSA9PSBJQ01QX1VOUkVBQ0hfUE9SVCkpIHsKLQkJCWNvZGUgPSBJQ01QX1VOUkVBQ0hfUFJP
VE9DT0w7Ci0JCX0KLQkJc2N0cF9ub3RpZnkoaW5wLCBzdGNiLCBuZXQsIHR5cGUsIGNvZGUsCi0J
CSAgICAgICAgICAgIG50b2hzKGlubmVyX2lwLT5pcF9sZW4pLAotCQkgICAgICAgICAgICAodWlu
dDMyX3QpbnRvaHMoaWNtcC0+aWNtcF9uZXh0bXR1KSk7Ci0JfSBlbHNlIHsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAotCQkvKgotCQkgKiBY
WFggbXVzdCBiZSBmaXhlZCBmb3IgNS54IGFuZCBoaWdoZXIsIGxlYXZlIGZvcgotCQkgKiA0LngK
LQkJICovCi0JCWlmIChQUkNfSVNfUkVESVJFQ1QoY21kKSAmJiAoaW5wICE9IE5VTEwpKSB7Ci0J
CQlpbl9ydGNoYW5nZSgoc3RydWN0IGlucGNiICopaW5wLAotCQkJICAgIGluZXRjdGxlcnJtYXBb
Y21kXSk7Ci0JCX0KLSNlbmRpZgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxM
KSkgewotCQkJLyogcmVkdWNlIHJlZi1jb3VudCAqLwotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
LQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0J
CX0KLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQotCX0KLQly
ZXR1cm47Ci19Ci0jZW5kaWYKLQotI2lmZGVmIElORVQ2Ci1zdGF0aWMgdm9pZAotc2N0cF9yZWN2
X2ljbXA2X3R1bm5lbGVkX3BhY2tldChpbnQgY21kLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB2b2lk
ICpkLCB2b2lkICpjdHggU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IGlwNmN0bHBhcmFtICppcDZj
cDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBoZHIgc2g7Ci0Jc3RydWN0IHVkcGhk
ciB1ZHA7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKLQl1aW50OF90IHR5cGUsIGNv
ZGU7Ci0KLQlpcDZjcCA9IChzdHJ1Y3QgaXA2Y3RscGFyYW0gKilkOwotCS8qCi0JICogWFhYOiBX
ZSBhc3N1bWUgdGhhdCB3aGVuIElQVjYgaXMgbm9uIE5VTEwsIE0gYW5kIE9GRiBhcmUKLQkgKiB2
YWxpZC4KLQkgKi8KLQlpZiAoaXA2Y3AtPmlwNmNfbSA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9
Ci0JLyogQ2hlY2sgaWYgd2UgY2FuIHNhZmVseSBleGFtaW5lIHRoZSBwb3J0cyBhbmQgdGhlCi0J
ICogdmVyaWZpY2F0aW9uIHRhZyBvZiB0aGUgU0NUUCBjb21tb24gaGVhZGVyLgotCSAqLwotCWlm
IChpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5sZW4gPAotCSAgICBpcDZjcC0+aXA2Y19vZmYgKyBz
aXplb2Yoc3RydWN0IHVkcGhkcikrIG9mZnNldG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSkp
IHsKLQkJcmV0dXJuOwotCX0KLQkvKiBDb3B5IG91dCB0aGUgVURQIGhlYWRlci4gKi8KLQltZW1z
ZXQoJnVkcCwgMCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQltX2NvcHlkYXRhKGlwNmNwLT5p
cDZjX20sCi0JCSAgIGlwNmNwLT5pcDZjX29mZiwKLQkJICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
LAotCQkgICAoY2FkZHJfdCkmdWRwKTsKLQkvKiBDb3B5IG91dCB0aGUgcG9ydCBudW1iZXJzIGFu
ZCB0aGUgdmVyaWZpY2F0aW9uIHRhZy4gKi8KLQltZW1zZXQoJnNoLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBoZHIpKTsKLQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCi0JCSAgIGlwNmNwLT5pcDZj
X29mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKLQkJICAgc2l6ZW9mKHVpbnQxNl90KSArIHNp
emVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpLAotCQkgICAoY2FkZHJfdCkmc2gpOwot
CW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCXNyYy5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQlzcmMuc2luNl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQlzcmMuc2luNl9wb3J0ID0g
c2guc3JjX3BvcnQ7Ci0Jc3JjLnNpbjZfYWRkciA9IGlwNmNwLT5pcDZjX2lwNi0+aXA2X3NyYzsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCWlmIChpbjZfc2V0c2NvcGUoJnNyYy5zaW42X2Fk
ZHIsIGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLnJjdmlmLCBOVUxMKSAhPSAwKSB7Ci0JCXJldHVy
bjsKLQl9Ci0jZW5kaWYKLQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKLQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVO
Ci0JZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0J
ZHN0LnNpbjZfcG9ydCA9IHNoLmRlc3RfcG9ydDsKLQlkc3Quc2luNl9hZGRyID0gaXA2Y3AtPmlw
NmNfaXA2LT5pcDZfZHN0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JaWYgKGluNl9zZXRz
Y29wZSgmZHN0LnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwp
ICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWlucCA9IE5VTEw7Ci0JbmV0ID0gTlVM
TDsKLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYSgoc3RydWN0IHNvY2thZGRy
ICopJmRzdCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNv
Y2thZGRyICopJnNyYywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5w
LCAmbmV0LCAxLCBTQ1RQX0RFRkFVTFRfVlJGSUQpOwotCWlmICgoc3RjYiAhPSBOVUxMKSAmJgot
CSAgICAobmV0ICE9IE5VTEwpICYmCi0JICAgIChpbnAgIT0gTlVMTCkpIHsKLQkJLyogQ2hlY2sg
dGhlIFVEUCBwb3J0IG51bWJlcnMgKi8KLQkJaWYgKCh1ZHAudWhfZHBvcnQgIT0gbmV0LT5wb3J0
KSB8fAotCQkgICAgKHVkcC51aF9zcG9ydCAhPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSkpKSB7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0YWcgKi8KLQkJaWYgKG50
b2hsKHNoLnZfdGFnKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogVGhpcyBtdXN0IGJlIHRoZSB2ZXJp
ZmljYXRpb24gdGFnIHVzZWQgZm9yCi0JCQkgKiBzZW5kaW5nIG91dCBwYWNrZXRzLiBXZSBkb24n
dCBjb25zaWRlcgotCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmljYXRpb24gdGFn
LgotCQkJICovCi0JCQlpZiAobnRvaGwoc2gudl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92dGFn
KSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBl
bHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJaWYgKGlwNmNwLT5pcDZjX20tPm1f
cGt0aGRyLmxlbiA+PQotCQkJICAgIGlwNmNwLT5pcDZjX29mZiArIHNpemVvZihzdHJ1Y3QgdWRw
aGRyKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSAr
Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSAr
Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0IHNjdHBfaW5pdCwgYV9y
d25kKSkgewotCQkJCS8qCi0JCQkJICogSW4gdGhpcyBjYXNlIHdlIGNhbiBjaGVjayBpZiB3ZQot
CQkJCSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0aGUKLQkJCQkgKiBpbml0aWF0ZSB0YWcg
bWF0Y2hlcy4KLQkJCQkgKi8KLQkJCQl1aW50MzJfdCBpbml0aWF0ZV90YWc7Ci0JCQkJdWludDhf
dCBjaHVua190eXBlOwotCi0JCQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAotCQkJCQkgICBp
cDZjcC0+aXA2Y19vZmYgKwotCQkJCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkcikgKwotCQkJCQkg
ICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpLAotCQkJCQkgICBzaXplb2YodWludDhfdCksCi0JCQkJ
CSAgIChjYWRkcl90KSZjaHVua190eXBlKTsKLQkJCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20s
Ci0JCQkJCSAgIGlwNmNwLT5pcDZjX29mZiArCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3QgdWRwaGRy
KSArCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkJCQkgICBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpLAotCQkJCQkgICBzaXplb2YodWludDMyX3QpLAotCQkJCQkgICAo
Y2FkZHJfdCkmaW5pdGlhdGVfdGFnKTsKLQkJCQlpZiAoKGNodW5rX3R5cGUgIT0gU0NUUF9JTklU
SUFUSU9OKSB8fAotCQkJCSAgICAobnRvaGwoaW5pdGlhdGVfdGFnKSAhPSBzdGNiLT5hc29jLm15
X3Z0YWcpKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwotCQkJ
CX0KLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVybjsK
LQkJCX0KLSNlbHNlCi0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlyZXR1cm47Ci0jZW5k
aWYKLQkJfQotCQl0eXBlID0gaXA2Y3AtPmlwNmNfaWNtcDYtPmljbXA2X3R5cGU7Ci0JCWNvZGUg
PSBpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfY29kZTsKLQkJaWYgKCh0eXBlID09IElDTVA2X0RT
VF9VTlJFQUNIKSAmJgotCQkgICAgKGNvZGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0hfTk9QT1JUKSkg
ewotCQkJdHlwZSA9IElDTVA2X1BBUkFNX1BST0I7Ci0JCQljb2RlID0gSUNNUDZfUEFSQU1QUk9C
X05FWFRIRUFERVI7Ci0JCX0KLQkJc2N0cDZfbm90aWZ5KGlucCwgc3RjYiwgbmV0LCB0eXBlLCBj
b2RlLAotCQkJICAgICBudG9obChpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfbXR1KSk7Ci0JfSBl
bHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUw
MDAwMAotCQlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkgJiYgKGlucCAhPSBOVUxMKSkgewotCQkJ
aW42X3J0Y2hhbmdlKChzdHJ1Y3QgaW42cGNiICopaW5wLAotCQkJICAgIGluZXQ2Y3RsZXJybWFw
W2NtZF0pOwotCQl9Ci0jZW5kaWYKLQkJaWYgKChzdGNiID09IE5VTEwpICYmIChpbnAgIT0gTlVM
TCkpIHsKLQkJCS8qIHJlZHVjZSBpbnAncyByZWYtY291bnQgKi8KLQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOwotCQl9Ci0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0K
LQl9Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi12b2lkCi1zY3RwX292ZXJfdWRwX3N0b3Aodm9pZCkK
LXsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBzeXNjdGwgY2FsbGVyIGhvbGRzIHNj
dHBfc3lzY3RsX2luZm9fbG9jaygpIGZvciB3cml0dGluZyEKLQkgKi8KLSNpZmRlZiBJTkVUCi0J
aWYgKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgIT0gTlVMTCkgewotCQlzb2Nsb3Nl
KFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkpOwotCQlTQ1RQX0JBU0VfSU5GTyh1ZHA0
X3R1bl9zb2NrZXQpID0gTlVMTDsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWlmIChTQ1RQ
X0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKLQkJc29jbG9zZShTQ1RQX0JB
U0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpKTsKLQkJU0NUUF9CQVNFX0lORk8odWRwNl90dW5fc29j
a2V0KSA9IE5VTEw7Ci0JfQotI2VuZGlmCi19Ci0KLWludAotc2N0cF9vdmVyX3VkcF9zdGFydCh2
b2lkKQotewotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA0NAotCXVpbnQxNl90IHBvcnQ7
Ci0JaW50IHJldDsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luIHNpbjsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwotI2VuZGlmCi0JLyoK
LQkgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgc3lzY3RsIGNhbGxlciBob2xkcyBzY3RwX3N5c2N0
bF9pbmZvX2xvY2soKSBmb3Igd3JpdHRpbmchCi0JICovCi0JcG9ydCA9IFNDVFBfQkFTRV9TWVND
VEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpOwotCWlmIChudG9ocyhwb3J0KSA9PSAwKSB7Ci0J
CS8qIE11c3QgaGF2ZSBhIHBvcnQgc2V0ICovCi0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0jaWZk
ZWYgSU5FVAotCWlmIChTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsK
LQkJLyogQWxyZWFkeSBydW5uaW5nIC0tIG11c3Qgc3RvcCBmaXJzdCAqLwotCQlyZXR1cm4gKEVB
TFJFQURZKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWlmIChTQ1RQX0JBU0VfSU5GTyh1
ZHA2X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKLQkJLyogQWxyZWFkeSBydW5uaW5nIC0tIG11c3Qg
c3RvcCBmaXJzdCAqLwotCQlyZXR1cm4gKEVBTFJFQURZKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUCi0JaWYgKChyZXQgPSBzb2NyZWF0ZShQRl9JTkVULCAmU0NUUF9CQVNFX0lORk8odWRwNF90
dW5fc29ja2V0KSwKLQkgICAgICAgICAgICAgICAgICAgIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQ
LAotCSAgICAgICAgICAgICAgICAgICAgY3VydGhyZWFkLT50ZF91Y3JlZCwgY3VydGhyZWFkKSkp
IHsKLQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0JLyogQ2Fs
bCB0aGUgc3BlY2lhbCBVRFAgaG9vay4gKi8KLQlpZiAoKHJldCA9IHVkcF9zZXRfa2VybmVsX3R1
bm5lbGluZyhTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFja2V0LAotI2lm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMDAKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzY3RwX3JlY3ZfaWNtcF90dW5uZWxlZF9wYWNrZXQsCi0jZW5kaWYKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkpIHsKLQkJc2N0cF9vdmVyX3Vk
cF9zdG9wKCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0JLyogT2ssIHdlIGhhdmUgYSBzb2NrZXQs
IGJpbmQgaXQgdG8gdGhlIHBvcnQuICovCi0JbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OwotCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlzaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0
KTsKLQlpZiAoKHJldCA9IHNvYmluZChTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAot
CSAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBjdXJ0aHJlYWQpKSkg
ewotCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKLQkJcmV0dXJuIChyZXQpOwotCX0KLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JaWYgKChyZXQgPSBzb2NyZWF0ZShQRl9JTkVUNiwgJlNDVFBfQkFTRV9J
TkZPKHVkcDZfdHVuX3NvY2tldCksCi0JICAgICAgICAgICAgICAgICAgICBTT0NLX0RHUkFNLCBJ
UFBST1RPX1VEUCwKLQkgICAgICAgICAgICAgICAgICAgIGN1cnRocmVhZC0+dGRfdWNyZWQsIGN1
cnRocmVhZCkpKSB7Ci0JCXNjdHBfb3Zlcl91ZHBfc3RvcCgpOwotCQlyZXR1cm4gKHJldCk7Ci0J
fQotCS8qIENhbGwgdGhlIHNwZWNpYWwgVURQIGhvb2suICovCi0JaWYgKChyZXQgPSB1ZHBfc2V0
X2tlcm5lbF90dW5uZWxpbmcoU0NUUF9CQVNFX0lORk8odWRwNl90dW5fc29ja2V0KSwKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3Bh
Y2tldCwKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCi0JICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2N0cF9yZWN2X2ljbXA2X3R1bm5lbGVkX3BhY2tldCwKLSNl
bmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSkgewotCQlz
Y3RwX292ZXJfdWRwX3N0b3AoKTsKLQkJcmV0dXJuIChyZXQpOwotCX0KLQkvKiBPaywgd2UgaGF2
ZSBhIHNvY2tldCwgYmluZCBpdCB0byB0aGUgcG9ydC4gKi8KLQltZW1zZXQoJnNpbjYsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0Jc2luNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKLQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0Jc2luNi5z
aW42X3BvcnQgPSBodG9ucyhwb3J0KTsKLQlpZiAoKHJldCA9IHNvYmluZChTQ1RQX0JBU0VfSU5G
Tyh1ZHA2X3R1bl9zb2NrZXQpLAotCSAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luNiwgY3VydGhyZWFkKSkpIHsKLQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCXJldHVy
biAocmV0KTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gKDApOwotI2Vsc2UKLQlyZXR1cm4gKEVOT1RT
VVApOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyoKLSAqIHNjdHBfbWluX210dSAoKXJldHVybnMg
dGhlIG1pbmltdW0gb2YgYWxsIG5vbi16ZXJvIGFyZ3VtZW50cy4KLSAqIElmIGFsbCBhcmd1bWVu
dHMgYXJlIHplcm8sIHplcm8gaXMgcmV0dXJuZWQuCi0gKi8KLXVpbnQzMl90Ci1zY3RwX21pbl9t
dHUodWludDMyX3QgbXR1MSwgdWludDMyX3QgbXR1MiwgdWludDMyX3QgbXR1MykKLXsKLQlpZiAo
bXR1MSA+IDApIHsKLQkJaWYgKG10dTIgPiAwKSB7Ci0JCQlpZiAobXR1MyA+IDApIHsKLQkJCQly
ZXR1cm4gKG1pbihtdHUxLCBtaW4obXR1MiwgbXR1MykpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0
dXJuIChtaW4obXR1MSwgbXR1MikpOwotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKG10dTMgPiAw
KSB7Ci0JCQkJcmV0dXJuIChtaW4obXR1MSwgbXR1MykpOwotCQkJfSBlbHNlIHsKLQkJCQlyZXR1
cm4gKG10dTEpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG10dTIgPiAwKSB7Ci0JCQlp
ZiAobXR1MyA+IDApIHsKLQkJCQlyZXR1cm4gKG1pbihtdHUyLCBtdHUzKSk7Ci0JCQl9IGVsc2Ug
ewotCQkJCXJldHVybiAobXR1Mik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKG10dTMp
OwotCQl9Ci0JfQotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLXZvaWQKLXNjdHBfaGNf
c2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqYWRkciwgdWludDE2X3QgZmlibnVtLCB1aW50
MzJfdCBtdHUpCi17Ci0Jc3RydWN0IGluX2Nvbm5pbmZvIGluYzsKLQotCW1lbXNldCgmaW5jLCAw
LCBzaXplb2Yoc3RydWN0IGluX2Nvbm5pbmZvKSk7Ci0JaW5jLmluY19maWJudW0gPSBmaWJudW07
Ci0Jc3dpdGNoIChhZGRyLT5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9J
TkVUOgotCQlpbmMuaW5jX2ZhZGRyID0gYWRkci0+c2luLnNpbl9hZGRyOwotCQlicmVhazsKLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaW5jLmluY19mbGFncyB8PSBJ
TkNfSVNJUFY2OwotCQlpbmMuaW5jNl9mYWRkciA9IGFkZHItPnNpbjYuc2luNl9hZGRyOwotCQli
cmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0JdGNwX2hjX3VwZGF0ZW10
dSgmaW5jLCAodV9sb25nKW10dSk7Ci19Ci0KLXVpbnQzMl90Ci1zY3RwX2hjX2dldF9tdHUodW5p
b24gc2N0cF9zb2Nrc3RvcmUgKmFkZHIsIHVpbnQxNl90IGZpYm51bSkKLXsKLQlzdHJ1Y3QgaW5f
Y29ubmluZm8gaW5jOwotCi0JbWVtc2V0KCZpbmMsIDAsIHNpemVvZihzdHJ1Y3QgaW5fY29ubmlu
Zm8pKTsKLQlpbmMuaW5jX2ZpYm51bSA9IGZpYm51bTsKLQlzd2l0Y2ggKGFkZHItPnNhLnNhX2Zh
bWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWluYy5pbmNfZmFkZHIgPSBh
ZGRyLT5zaW4uc2luX2FkZHI7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNl
IEFGX0lORVQ2OgotCQlpbmMuaW5jX2ZsYWdzIHw9IElOQ19JU0lQVjY7Ci0JCWluYy5pbmM2X2Zh
ZGRyID0gYWRkci0+c2luNi5zaW42X2FkZHI7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoK
LQkJcmV0dXJuICgwKTsKLQl9Ci0JcmV0dXJuICgodWludDMyX3QpdGNwX2hjX2dldG10dSgmaW5j
KSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggNTlkZDM2NDQyZjU0NjUxOTZlMWViYmUxY2M1ZDVlNTE0ZGU0Y2Q4MC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1
dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1
ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhl
ciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwot
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRp
bmV0L3NjdHB1dGlsLmggMzIwMjYwIDIwMTctMDYtMjMgMDg6MzQ6MDFaIHR1ZXhlbiAkIik7Ci0j
ZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1VUSUxfSF8KLSNkZWZpbmUgX05FVElORVRf
U0NUUF9VVElMX0hfCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQotI2RlZmluZSBTQ1RQX1JFQURfTE9DS19IRUxEIDEKLSNkZWZpbmUgU0NUUF9SRUFE
X0xPQ0tfTk9UX0hFTEQgMAotCi0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLXZvaWQgc2N0
cF9wcmludF9vdXRfdHJhY2tfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7Ci0jZW5kaWYKLQot
I2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi1zdHJ1Y3QgbWJ1ZiAqc2N0cF9tX2ZyZWUoc3RydWN0
IG1idWYgKm0pOwotdm9pZCBzY3RwX21fZnJlZW0oc3RydWN0IG1idWYgKm0pOwotI2Vsc2UKLSNk
ZWZpbmUgc2N0cF9tX2ZyZWUgbV9mcmVlCi0jZGVmaW5lIHNjdHBfbV9mcmVlbSBtX2ZyZWVtCi0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpIHx8IGRlZmluZWQoX19B
UFBMRV9fKQotdm9pZAotc2N0cF9sb2dfdHJhY2UodWludDMyX3QgZnIsIGNvbnN0IGNoYXIgKnN0
ciBTQ1RQX1VOVVNFRCwgdWludDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMy
X3QgZCwgdWludDMyX3QgZSwgdWludDMyX3QgZik7Ci0jZW5kaWYKLQotI2RlZmluZSBzY3RwX2dl
dF9hc3NvY2lkKHN0Y2IpICgoc2N0cF9hc3NvY190KXN0Y2ItPmFzb2MuYXNzb2NfaWQpCi0KLQot
LyoKLSAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotaW50MzJfdAotc2N0cF9tYXBfYXNzb2Nf
c3RhdGUoaW50KTsKLQotdWludDMyX3QKLXNjdHBfZ2V0X2lmYV9oYXNoX3ZhbChzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIpOwotCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0cF9maW5kX2lmYV9pbl9lcChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGludCBob2xkX2xv
Y2spOwotCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0cF9maW5kX2lmYV9ieV9hZGRyKHN0cnVjdCBz
b2NrYWRkciAqYWRkciwgdWludDMyX3QgdnJmX2lkLCBpbnQgaG9sZHNfbG9jayk7Ci0KLXVpbnQz
Ml90IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKHN0cnVjdCBzY3RwX3BjYiAqKTsKLQotdWludDMy
X3Qgc2N0cF9zZWxlY3RfYV90YWcoc3RydWN0IHNjdHBfaW5wY2IgKiwgdWludDE2X3QgbHBvcnQs
IHVpbnQxNl90IHJwb3J0LCBpbnQpOwotCi1pbnQgc2N0cF9pbml0X2Fzb2Moc3RydWN0IHNjdHBf
aW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3Qp
OwotCi12b2lkIHNjdHBfZmlsbF9yYW5kb21fc3RvcmUoc3RydWN0IHNjdHBfcGNiICopOwotCi12
b2lkCi1zY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDE2X3QgbnVtYmVyaW4sCi0JCQkgICAgIHVpbnQxNl90IG51bWJlcm91dCwgaW50IGZsYWcp
Owotdm9pZAotc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQzMl90IHNlbmRpbmdfdHNuLCB1aW50MzJfdCByZWN2X3RzbiwgaW50IGZsYWcpOwot
Ci12b2lkCi1zY3RwX3RpbWVyX3N0YXJ0KGludCwgc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0
IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLQotdm9pZAotc2N0cF90aW1l
cl9zdG9wKGludCwgc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAg
c3RydWN0IHNjdHBfbmV0cyAqLCB1aW50MzJfdCk7Ci0KLWludAotc2N0cF9keW5hbWljX3NldF9w
cmltYXJ5KHN0cnVjdCBzb2NrYWRkciAqc2EsIHVpbnQzMl90IHZyZl9pZCk7Ci0KLXZvaWQKLXNj
dHBfbXR1X3NpemVfcmVzZXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKiwgdWludDMyX3QpOwotCi12b2lkCi1zY3RwX3dha2V1cF90aGVfcmVhZF9zb2NrZXQo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIGludCBz
b19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSk7Ci0KLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi12b2lkIHNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RydWN0IHNjdHBf
aW5wY2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqLAotICAgIGludCk7Ci0KLSNlbmRpZgotdm9pZAotc2N0cF9hZGRfdG9fcmVhZHEo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAg
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgc3RydWN0IHNvY2tidWYg
KnNiLAotICAgIGludCBlbmQsCi0gICAgaW50IGlucHJlYWRfbG9ja2VkLAotICAgIGludCBzb19s
b2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19U
RVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICApOwotCi12b2lkIHNjdHBfaXRl
cmF0b3Jfd29ya2VyKHZvaWQpOwotCi11aW50MzJfdCBzY3RwX2dldF9wcmV2X210dSh1aW50MzJf
dCk7Ci11aW50MzJfdCBzY3RwX2dldF9uZXh0X210dSh1aW50MzJfdCk7Ci0KLXZvaWQKLXNjdHBf
dGltZW91dF9oYW5kbGVyKHZvaWQgKik7Ci0KLXVpbnQzMl90Ci1zY3RwX2NhbGN1bGF0ZV9ydG8o
c3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCi0gICAgc3RydWN0
IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQsIGludCk7Ci0KLXVpbnQzMl90IHNj
dHBfY2FsY3VsYXRlX2xlbihzdHJ1Y3QgbWJ1ZiAqKTsKLQotY2FkZHJfdCBzY3RwX21fZ2V0cHRy
KHN0cnVjdCBtYnVmICosIGludCwgaW50LCB1aW50OF90ICopOwotCi1zdHJ1Y3Qgc2N0cF9wYXJh
bWhkciAqCi1zY3RwX2dldF9uZXh0X3BhcmFtKHN0cnVjdCBtYnVmICosIGludCwKLSAgICBzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqLCBpbnQpOwotCi1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FkZF9wYWRf
dG9tYnVmKHN0cnVjdCBtYnVmICosIGludCk7Ci0KLXN0cnVjdCBtYnVmICoKLXNjdHBfcGFkX2xh
c3RtYnVmKHN0cnVjdCBtYnVmICosIGludCwgc3RydWN0IG1idWYgKik7Ci0KLXZvaWQgc2N0cF91
bHBfbm90aWZ5KHVpbnQzMl90LCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDMyX3QsIHZvaWQgKiwg
aW50Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgKTsKLQotdm9pZAotc2N0cF9wdWxs
X29mZl9jb250cm9sX3RvX25ld19pbnAoc3RydWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsCi0gICAg
c3RydWN0IHNjdHBfaW5wY2IgKm5ld19pbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBp
bnQgd2FpdGZsYWdzKTsKLQotCi12b2lkIHNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0
cnVjdCBzY3RwX3RjYiAqKTsKLQotdm9pZCBzY3RwX3JlcG9ydF9hbGxfb3V0Ym91bmQoc3RydWN0
IHNjdHBfdGNiICosIHVpbnQxNl90LCBpbnQsIGludAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRp
ZgotICAgICk7Ci0KLWludCBzY3RwX2V4cGFuZF9tYXBwaW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICosIHVpbnQzMl90KTsKLQotdm9pZCBzY3RwX2Fib3J0X25vdGlmaWNhdGlvbihz
dHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDhfdCwgdWludDE2X3QsCi0JCQkgICAgIHN0cnVjdCBzY3Rw
X2Fib3J0X2NodW5rICosIGludAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICk7Ci0K
LS8qIFdlIGFib3J0IHJlc3BvbmRpbmcgdG8gYW4gSVAgcGFja2V0IGZvciBzb21lIHJlYXNvbiAq
Lwotdm9pZAotc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50
LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBtYnVmICosCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsCi0jZW5k
aWYKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIHVpbnQxNl90KTsKLQotCi0vKiBX
ZSBjaG9vc2UgdG8gYWJvcnQgdmlhIHVzZXIgaW5wdXQgKi8KLXZvaWQKLXNjdHBfYWJvcnRfYW5f
YXNzb2NpYXRpb24oc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAg
c3RydWN0IG1idWYgKiwgaW50Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0pOwotCi12b2lk
IHNjdHBfaGFuZGxlX29vdGIoc3RydWN0IG1idWYgKiwgaW50LCBpbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLAotICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2lucGNiICosCi0gICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKLSNl
bmRpZgotICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7Ci0KLWludCBz
Y3RwX2Nvbm5lY3R4X2hlbHBlcl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsCi0gICAgaW50IHRvdGFkZHIsIGludCAqZXJyb3IpOwotCi1zdHJ1Y3Qgc2N0
cF90Y2IgKgotc2N0cF9jb25uZWN0eF9oZWxwZXJfZmluZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgdW5zaWduZWQgaW50ICp0b3RhZGRyLCB1bnNp
Z25lZCBpbnQgKm51bV92NCwgdW5zaWduZWQgaW50ICpudW1fdjYsCi0gICAgaW50ICplcnJvciwg
dW5zaWduZWQgaW50IGxpbWl0LCBpbnQgKmJhZF9hZGRyKTsKLQotaW50IHNjdHBfaXNfdGhlcmVf
YW5fYWJvcnRfaGVyZShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQzMl90ICopOwotI2lmZGVmIElO
RVQ2Ci11aW50MzJfdCBzY3RwX2lzX3NhbWVfc2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqLCBz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotCi0jaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1ND
T1BFKQotc3RydWN0IHNvY2thZGRyX2luNiAqCi1zY3RwX3JlY292ZXJfc2NvcGUoc3RydWN0IHNv
Y2thZGRyX2luNiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotCi0jaWZkZWYgU0NUUF9LQU1F
Ci0jZGVmaW5lIHNjdHBfcmVjb3Zlcl9zY29wZV9tYWMoYWRkciwgc3RvcmUpIGRvIHsgXAotCSBp
ZiAoKGFkZHItPnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSAmJiBcCi0JICAgICAoSU42X0lTX1ND
T1BFX0xJTktMT0NBTCgmYWRkci0+c2luNl9hZGRyKSkpIHsgXAotCQkqc3RvcmUgPSAqYWRkcjsg
XAotCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7IFwKLQkJCWlmICghc2E2X3JlY292
ZXJzY29wZShzdG9yZSkpIHsgXAotCQkJCWFkZHIgPSBzdG9yZTsgXAotCQkJfSBcCi0JCX0gZWxz
ZSB7IFwKLQkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIpOyBcCi0JCQlhZGRyID0g
c3RvcmU7IFwKLQkJfSBcCi0JIH0gXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIHNjdHBf
cmVjb3Zlcl9zY29wZV9tYWMoYWRkciwgc3RvcmUpIGRvIHsgXAotCWlmICgoYWRkci0+c2luNl9m
YW1pbHkgPT0gQUZfSU5FVDYpICYmIFwKLQkgICAgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJmFk
ZHItPnNpbjZfYWRkcikpKSB7IFwKLQkJKnN0b3JlID0gKmFkZHI7IFwKLQkJaWYgKGFkZHItPnNp
bjZfc2NvcGVfaWQgPT0gMCkgeyBcCi0JCQlpZiAoIWluNl9yZWNvdmVyc2NvcGUoc3RvcmUsICZz
dG9yZS0+c2luNl9hZGRyLCBcCi0JCQkJCSAgICAgIE5VTEwpKSB7IFwKLQkJCQlhZGRyID0gc3Rv
cmU7IFwKLQkJCX0gXAotCQl9IGVsc2UgeyBcCi0JCQlpbjZfY2xlYXJzY29wZSgmYWRkci0+c2lu
Nl9hZGRyKTsgXAotCQkJYWRkciA9IHN0b3JlOyBcCi0JCX0gXAotCX0gXAotfSB3aGlsZSAoMCkK
LSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotaW50IHNjdHBfY21wYWRkcihzdHJ1Y3Qgc29ja2Fk
ZHIgKiwgc3RydWN0IHNvY2thZGRyICopOwotCi12b2lkIHNjdHBfcHJpbnRfYWRkcmVzcyhzdHJ1
Y3Qgc29ja2FkZHIgKik7Ci0KLWludAotc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwKLSAgICB1aW50OF90LCBpbnQK
LSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSk7Ci0KLXN0cnVjdCBtYnVmICpzY3RwX2dlbmVy
YXRlX2NhdXNlKHVpbnQxNl90LCBjaGFyICopOwotc3RydWN0IG1idWYgKnNjdHBfZ2VuZXJhdGVf
bm9fdXNlcl9kYXRhX2NhdXNlKHVpbnQzMl90KTsKLQotdm9pZCBzY3RwX2JpbmR4X2FkZF9hZGRy
ZXNzKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkJICAgIHN0
cnVjdCBzb2NrYWRkciAqc2EsIHNjdHBfYXNzb2NfdCBhc3NvY19pZCwKLQkJCSAgICB1aW50MzJf
dCB2cmZfaWQsIGludCAqZXJyb3IsIHZvaWQgKnApOwotdm9pZCBzY3RwX2JpbmR4X2RlbGV0ZV9h
ZGRyZXNzKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCQkgICAgICAgc3RydWN0IHNvY2thZGRy
ICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkJICAgICAgIHVpbnQzMl90IHZyZl9pZCwg
aW50ICplcnJvcik7Ci0KLWludCBzY3RwX2xvY2FsX2FkZHJfY291bnQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiKTsKLQotI2lmZGVmIFNDVFBfTUJDTlRfTE9HR0lORwotdm9pZAotc2N0cF9mcmVlX2J1
ZnNwYWNlKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAotICAg
IHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwgaW50KTsKLQotI2Vsc2UKLSNkZWZpbmUgc2N0cF9m
cmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgY2hrX2NudCkgIFwKLWRvIHsgXAotCWlmICh0
cDEtPmRhdGEgIT0gTlVMTCkgeyBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJigoYXNvYyktPmNo
dW5rc19vbl9vdXRfcXVldWUpLCBjaGtfY250KTsgXAotCQlpZiAoKGFzb2MpLT50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSA+PSB0cDEtPmJvb2tfc2l6ZSkgeyBcCi0JCQlhdG9taWNfc3VidHJhY3Rf
aW50KCYoKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSksIHRwMS0+Ym9va19zaXplKTsg
XAotCQl9IGVsc2UgeyBcCi0JCQkoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsg
XAotCQl9IFwKLQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0ICYmICgoc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8IFwKLQkJICAgIChzdGNiLT5zY3Rw
X2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpKSB7IFwKLQkJCWlm
IChzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID49IHRwMS0+Ym9va19zaXplKSB7IFwK
LQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCYoKHN0Y2IpLT5zY3RwX3NvY2tldC0+c29fc25kLnNi
X2NjKSwgdHAxLT5ib29rX3NpemUpOyBcCi0JCQl9IGVsc2UgeyBcCi0JCQkJc3RjYi0+c2N0cF9z
b2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7IFwKLQkJCX0gXAotCQl9IFwKLQl9IFwKLX0gd2hpbGUg
KDApCi0KLSNlbmRpZgotCi0jZGVmaW5lIHNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2Ms
IHNwKSAgXAotZG8geyBcCi0JaWYgKHNwLT5kYXRhICE9IE5VTEwpIHsgXAotCQlpZiAoKGFzb2Mp
LT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA+PSBzcC0+bGVuZ3RoKSB7IFwKLQkJCWF0b21pY19z
dWJ0cmFjdF9pbnQoJihhc29jKS0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsIHNwLT5sZW5ndGgp
OyBcCi0JCX0gZWxzZSB7IFwKLQkJCShhc29jKS0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAw
OyBcCi0JCX0gXAotCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgJiYgKChzdGNiLT5zY3RwX2VwLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwgXAotCQkgICAgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkpIHsgXAotCQkJ
aWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPj0gc3AtPmxlbmd0aCkgeyBcCi0J
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyxz
cC0+bGVuZ3RoKTsgXAotCQkJfSBlbHNlIHsgXAotCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19z
bmQuc2JfY2MgPSAwOyBcCi0JCQl9IFwKLQkJfSBcCi0JfSBcCi19IHdoaWxlICgwKQotCi0jZGVm
aW5lIHNjdHBfc25kX3NiX2FsbG9jKHN0Y2IsIHN6KSAgXAotZG8geyBcCi0JYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsc3opOyBcCi0JaWYgKChzdGNi
LT5zY3RwX3NvY2tldCAhPSBOVUxMKSAmJiBcCi0JICAgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8IFwKLQkgICAgIChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpKSB7IFwKLQkJYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2Msc3opOyBcCi0JfSBcCi19
IHdoaWxlICgwKQotCi0vKiBmdW5jdGlvbnMgdG8gc3RhcnQvc3RvcCB1ZHAgdHVubmVsaW5nICov
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCi12b2lkIHNj
dHBfb3Zlcl91ZHBfc3RvcCh2b2lkKTsKLWludCBzY3RwX292ZXJfdWRwX3N0YXJ0KHZvaWQpOwot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXZvaWQgc2N0cF9vdmVyX3VkcF9yZXN0
YXJ0KHZvaWQpOwotI2VuZGlmCi0KLWludAotc2N0cF9zb3JlY2VpdmUoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqKnBzYSwKLSAgICBzdHJ1Y3QgdWlvICp1aW8sCi0gICAgc3Ry
dWN0IG1idWYgKiptcDAsCi0gICAgc3RydWN0IG1idWYgKipjb250cm9scCwKLSAgICBpbnQgKmZs
YWdzcCk7Ci0KLXZvaWQKLXNjdHBfbWlzY19pbnRzKHVpbnQ4X3QgZnJvbSwgdWludDMyX3QgYSwg
dWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCk7Ci0KLXZvaWQKLXNjdHBfd2FrZXVw
X2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgdWludDMyX3Qgd2FrZV9jbnQsIGludCBm
cm9tKTsKLQotdm9pZCBzY3RwX2xvZ19zdHJtX2RlbF9hbHQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBpbnQpOwotCi12b2lkIHNjdHBfbG9nX25h
Z2xlX2V2ZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFjdGlvbik7Ci0KLQotI2lmZGVm
IFNDVFBfTUJVRl9MT0dHSU5HCi12b2lkCi1zY3RwX2xvZ19tYihzdHJ1Y3QgbWJ1ZiAqbSwgaW50
IGZyb20pOwotCi12b2lkCi1zY3RwX2xvZ19tYmMoc3RydWN0IG1idWYgKm0sIGludCBmcm9tKTsK
LSNlbmRpZgotCi12b2lkCi1zY3RwX3NibG9nKHN0cnVjdCBzb2NrYnVmICpzYiwKLSAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBmcm9tLCBpbnQgaW5jcik7Ci0KLXZvaWQKLXNjdHBfbG9n
X3N0cm1fZGVsKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAotICAgIHN0cnVj
dCBzY3RwX3F1ZXVlZF90b19yZWFkICpwb3NjaGssCi0gICAgaW50IGZyb20pOwotdm9pZCBzY3Rw
X2xvZ19jd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQs
IHVpbnQ4X3QpOwotdm9pZCBydG9fbG9nZ2luZyhzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBm
cm9tKTsKLQotdm9pZCBzY3RwX2xvZ19jbG9zaW5nKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50MTZfdCBsb2MpOwotCi12b2lkIHNjdHBfbG9nX2xvY2so
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IGZy
b20pOwotdm9pZCBzY3RwX2xvZ19tYXhidXJzdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX25ldHMgKiwgaW50LCBpbnQsIHVpbnQ4X3QpOwotdm9pZCBzY3RwX2xvZ19ibG9jayh1
aW50OF90LCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzaXplX3QpOwotdm9pZCBzY3RwX2xv
Z19yd25kKHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QpOwotdm9pZCBzY3Rw
X2xvZ19yd25kX3NldCh1aW50OF90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50
MzJfdCk7Ci1pbnQgc2N0cF9maWxsX3N0YXRfbG9nKHZvaWQgKiwgc2l6ZV90ICopOwotdm9pZCBz
Y3RwX2xvZ19mcih1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBpbnQpOwotdm9pZCBzY3Rw
X2xvZ19zYWNrKHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MTZf
dCwgaW50KTsKLXZvaWQgc2N0cF9sb2dfbWFwKHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3Qs
IGludCk7Ci12b2lkIHNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYyk7Ci12b2lkIHNjdHBfY2xyX3N0YXRfbG9nKHZvaWQpOwotCi0KLSNpZmRlZiBT
Q1RQX0FVRElUSU5HX0VOQUJMRUQKLXZvaWQKLXNjdHBfYXVkaXRpbmcoaW50LCBzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwot
dm9pZCBzY3RwX2F1ZGl0X2xvZyh1aW50OF90LCB1aW50OF90KTsKLQotI2VuZGlmCi11aW50MzJf
dCBzY3RwX21pbl9tdHUodWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLXZvaWQgc2N0cF9oY19zZXRfbXR1KHVuaW9uIHNjdHBfc29ja3N0b3Jl
ICosIHVpbnQxNl90LCB1aW50MzJfdCk7Ci11aW50MzJfdCBzY3RwX2hjX2dldF9tdHUodW5pb24g
c2N0cF9zb2Nrc3RvcmUgKiwgdWludDE2X3QpOwotI2VuZGlmCi0jZW5kaWYJCQkJLyogX0tFUk5F
TCAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni8uZ2l0YXR0cmlidXRl
cyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQ2Ly5naXRhdHRyaWJ1dGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlMmJkNjhjMDM0ZjUxNTkzY2M5OTc5NTRjZjZlYzFjNWRhMjJhMzEzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQ2Ly5naXRhdHRyaWJ1dGVzCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotc2N0cDZfdXNy
cmVxLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
bmV0aW5ldDYvc2N0cDZfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5YmJkOWRhYTFkMzcxM2UyYjQwYmVm
MDJhYWI0Yzc5MDY4MGEyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYworKysgL2Rldi9udWxsCkBA
IC0xLDE4NjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lz
Y28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAy
MDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEp
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICog
ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBT
eXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYyAz
MjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYgSU5FVDYKLSNpZmRlZiBfX0ZyZWVCU0RfXwot
I2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNi
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF92YXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0Ni9zY3RwNl92YXIuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNj
b25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9pbmRhdGEuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
YnNkX2FkZHIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KLSNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KLSNp
bmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LSNkZWZpbmUgQVBQTEVfRklMRV9OTyA5Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotZXh0ZXJuIHN0cnVjdCBwcm90b3N3IGluZXRzd1tdOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludCBpcDZfdjZvbmx5PTA7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWZkZWYgSU5FVAotdm9pZAot
aW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICpzaW4sIHN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjYpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXVpbnQz
Ml90IHRlbXA7Ci0jZW5kaWYKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2lmZGVm
IEhBVkVfU0lOX0xFTgotCXNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OwotI2VuZGlmCi0Jc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlzaW4tPnNpbl9wb3J0ID0g
c2luNi0+c2luNl9wb3J0OwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQl0
ZW1wID0gc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls3XTsKLQl0ZW1wID0gdGVtcCA8PCAxNjsK
LQl0ZW1wID0gdGVtcCB8IHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZbNl07Ci0Jc2luLT5zaW5f
YWRkci5zX2FkZHIgPSB0ZW1wOwotI2Vsc2UKLQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHNpbjYt
PnNpbjZfYWRkci5zNl9hZGRyMzJbM107Ci0jZW5kaWYKLX0KLQotdm9pZAotaW42X3NpbjZfMl9z
aW5faW5fc29jayhzdHJ1Y3Qgc29ja2FkZHIgKm5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
KnNpbl9wOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKLQotCS8qIHNhdmUgb3JpZ2luYWwg
c29ja2FkZHJfaW42IGFkZHIgYW5kIGNvbnZlcnQgaXQgdG8gc29ja2FkZHJfaW4gICovCi0Jc2lu
NiA9ICooc3RydWN0IHNvY2thZGRyX2luNiAqKW5hbTsKLQlzaW5fcCA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKiluYW07Ci0JaW42X3NpbjZfMl9zaW4oc2luX3AsICZzaW42KTsKLX0KLQotdm9pZAot
aW42X3Npbl8yX3Y0bWFwc2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNikKLXsKLQltZW1zZXQoc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKLSAJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJ
TjZfTEVOCi0Jc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0j
ZW5kaWYKLQlzaW42LT5zaW42X3BvcnQgPSBzaW4tPnNpbl9wb3J0OwotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMF0g
PSAwOwotCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVsxXSA9IDA7Ci0JKCh1aW50MzJf
dCAqKSZzaW42LT5zaW42X2FkZHIpWzJdID0gaHRvbmwoMHhmZmZmKTsKLQkoKHVpbnQzMl90ICop
JnNpbjYtPnNpbjZfYWRkcilbM10gPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKLSNlbHNlCi0gCXNp
bjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMF0gPSAwOwotCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRy
MzJbMV0gPSAwOwotIAlzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzJdID0gaHRvbmwoMHhmZmZm
KTsKLQlzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzNdID0gc2luLT5zaW5fYWRkci5zX2FkZHI7
Ci0jZW5kaWYKLX0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotaW50Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCi1z
Y3RwNl9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZwLCB1aW50
MTZfdCBwb3J0KQotI2VsaWYgZGVmaW5lZCggX19QYW5kYV9fKQotc2N0cDZfaW5wdXQocGFraGFu
ZGxlX3R5cGUgKmlfcGFrKQotI2Vsc2UKLXNjdHA2X2lucHV0KHN0cnVjdCBtYnVmICoqaV9wYWss
IGludCAqb2ZmcCwgaW50IHByb3RvKQotI2VuZGlmCi17Ci0Jc3RydWN0IG1idWYgKm07Ci0JaW50
IGlwaGxlbjsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0JdWludDhfdCBlY25fYml0czsKLQlzdHJ1Y3Qg
c29ja2FkZHJfaW42IHNyYywgZHN0OwotCXN0cnVjdCBpcDZfaGRyICppcDY7Ci0Jc3RydWN0IHNj
dHBoZHIgKnNoOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlpbnQgbGVuZ3RoLCBvZmZz
ZXQ7Ci0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JdWludDhfdCBjb21wdXRlX2Ny
YzsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JdWludDMyX3QgbWZsb3dpZDsK
LQl1aW50OF90IG1mbG93dHlwZTsKLQl1aW50MTZfdCBmaWJudW07Ci0jZW5kaWYKLSNpZiAhKGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykpCi0JdWludDE2X3QgcG9y
dCA9IDA7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQotCS8qIFRoaXMgaXMgRXZp
bCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAqLwotCWlw
aGxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7Ci0jZWxzZQotCWlwaGxlbiA9ICpvZmZwOwot
I2VuZGlmCi0JaWYgKFNDVFBfR0VUX1BLVF9WUkZJRCgqaV9wYWssIHZyZl9pZCkpIHsKLQkJU0NU
UF9SRUxFQVNFX1BLVCgqaV9wYWspOwotCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0JfQotCW0g
PSBTQ1RQX0hFQURFUl9UT19DSEFJTigqaV9wYWspOwotI2lmZGVmIF9fUGFuZGFfXwotCVNDVFBf
REVUQUNIX0hFQURFUl9GUk9NX0NIQUlOKCppX3Bhayk7Ci0JKHZvaWQpU0NUUF9SRUxFQVNFX0hF
QURFUigqaV9wYWspOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQkvKiBMb2cg
aW4gYW55IGlucHV0IG1idWZzICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19tYmMobSwg
U0NUUF9NQlVGX0lOUFVUKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5H
Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9Q
QUNLRVRfVFJBQ0lORykgewotCQlzY3RwX3BhY2tldF9sb2cobSk7Ci0JfQotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkKLQlT
Q1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQ
YWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCViLlxu
IiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIGlmX25hbWUobS0+bV9wa3Ro
ZHIucmN2aWYpLAotCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCBDU1VNX0JJ
VFMpOwotI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JU0NUUERCRyhTQ1RQX0RF
QlVHX0NSQ09GRkxPQUQsCi0JICAgICAgICAic2N0cDZfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0
aCAlZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCi0JICAgICAgICBt
LT5tX3BrdGhkci5sZW4sCi0JICAgICAgICBpZl9uYW1lKG0tPm1fcGt0aGRyLnJjdmlmKSwKLQkg
ICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2Vsc2UKLQlTQ1RQREJHKFNDVFBfREVC
VUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0t
Pm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKLQkg
ICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAg
ICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzJWQgd2l0
aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAotCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAotCSAgICAg
ICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX25hbWUsCi0JICAgICAgICBtLT5tX3BrdGhkci5yY3Zp
Zi0+aWZfdW5pdCwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwK
LQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9u
ICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwK
LQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKLQkgICAgICAgIG0tPm1fcGt0
aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQltZmxv
d2lkID0gbS0+bV9wa3RoZHIuZmxvd2lkOwotCW1mbG93dHlwZSA9IE1fSEFTSFRZUEVfR0VUKG0p
OwotCWZpYm51bSA9IE1fR0VURklCKG0pOwotI2VuZGlmCi0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdnBhY2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMp
OwotCS8qIEdldCBJUCwgU0NUUCwgYW5kIGZpcnN0IGNodW5rIGhlYWRlciB0b2dldGhlciBpbiB0
aGUgZmlyc3QgbWJ1Zi4gKi8KLQlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQlpcDYgPSBtdG9kKG0sIHN0cnVj
dCBpcDZfaGRyICopOwotCUlQNl9FWFRIRFJfR0VUKHNoLCBzdHJ1Y3Qgc2N0cGhkciAqLCBtLCBp
cGhsZW4sCi0JCSAgICAgICAoaW50KShzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0
cnVjdCBzY3RwX2NodW5raGRyKSkpOwotCWlmIChzaCA9PSBOVUxMKSB7Ci0JCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX2hkcm9wcyk7Ci0JCXJldHVybiAoSVBQUk9UT19ET05FKTsKLQl9Ci0JY2ggPSAo
c3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpKTsKLQlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQltZW1zZXQo
JnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQlzcmMuc2luNl9mYW1pbHkg
PSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc3JjLnNpbjZfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0Jc3JjLnNpbjZfcG9ydCA9IHNoLT5zcmNf
cG9ydDsKLQlzcmMuc2luNl9hZGRyID0gaXA2LT5pcDZfc3JjOwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JLyogWFhYOiBUaGlzIGNvZGUgc2hvdWxk
IGFsc28gYmUgdXNlZCBvbiBBcHBsZSAqLwotI2VuZGlmCi0JaWYgKGluNl9zZXRzY29wZSgmc3Jj
LnNpbjZfYWRkciwgbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKLQkJZ290byBvdXQ7
Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KSk7Ci0JZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgot
CWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCWRz
dC5zaW42X3BvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCWRzdC5zaW42X2FkZHIgPSBpcDYtPmlwNl9k
c3Q7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkv
KiBYWFg6IFRoaXMgY29kZSBzaG91bGQgYWxzbyBiZSB1c2VkIG9uIEFwcGxlICovCi0jZW5kaWYK
LQlpZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBtLT5tX3BrdGhkci5yY3ZpZiwgTlVM
TCkgIT0gMCkgewotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLSNpZiBkZWZpbmVkKE5GQUlUSCkgJiYgMCA8IE5GQUlUSAotCWlmIChmYWl0aHByZWZpeCgm
ZHN0LnNpbjZfYWRkcikpIHsKLQkJZ290byBvdXQ7Ci0JfQotI2VuZGlmCi0jZW5kaWYKLQlsZW5n
dGggPSBudG9ocyhpcDYtPmlwNl9wbGVuKSArIGlwaGxlbjsKLQkvKiBWYWxpZGF0ZSBtYnVmIGNo
YWluIGxlbmd0aCB3aXRoIElQIHBheWxvYWQgbGVuZ3RoLiAqLwotCWlmIChTQ1RQX0hFQURFUl9M
RU4obSkgIT0gbGVuZ3RoKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCi0JCSAgICAg
ICAgInNjdHA2X2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwgbGVuZ3Ro
LCBTQ1RQX0hFQURFUl9MRU4obSkpOwotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOwot
CQlnb3RvIG91dDsKLQl9Ci0JaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmaXA2LT5pcDZfZHN0
KSkgewotCQlnb3RvIG91dDsKLQl9Ci0JZWNuX2JpdHMgPSAoKG50b2hsKGlwNi0+aXA2X2Zsb3cp
ID4+IDIwKSAmIDB4MDAwMDAwZmYpOwotI2lmIGRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0J
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdm5vY3JjKTsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JaWYgKG0tPm1fcGt0aGRy
LmNzdW1fZmxhZ3MgJiBDU1VNX1NDVFBfVkFMSUQpIHsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdmh3Y3JjKTsKLQkJY29tcHV0ZV9jcmMgPSAwOwotCX0gZWxzZSB7Ci0jZWxzZQotCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKLQkgICAgKElONl9B
UkVfQUREUl9FUVVBTCgmc3JjLnNpbjZfYWRkciwgJmRzdC5zaW42X2FkZHIpKSkgewotCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2bm9jcmMpOwotCQljb21wdXRlX2NyYyA9IDA7Ci0JfSBlbHNl
IHsKLSNlbmRpZgotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQljb21wdXRl
X2NyYyA9IDE7Ci0JfQotI2VuZGlmCi0Jc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmbSwg
aXBobGVuLCBvZmZzZXQsIGxlbmd0aCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzb2NrYWRkciAqKSZkc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwg
Y2gsCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWNuX2JpdHMsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotIG91dDoKLQlpZiAobSkg
ewotCQlzY3RwX21fZnJlZW0obSk7Ci0JfQotCXJldHVybiAoSVBQUk9UT19ET05FKTsKLX0KLQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotaW50Ci1zY3RwNl9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKmlf
cGFrLCBpbnQgKm9mZnApCi17Ci0JcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWss
IG9mZnAsIDApKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLWludAot
c2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8gU0NU
UF9VTlVTRUQpCi17Ci0JcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9mZnAs
IDApKTsKLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwKLSAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgICAgICAgICAgIHVpbnQ4X3QgaWNtcDZfdHlwZSwK
LSAgICAgICAgICAgICB1aW50OF90IGljbXA2X2NvZGUsCi0gICAgICAgICAgICAgdWludDMyX3Qg
bmV4dF9tdHUpCi17Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYKLQlpbnQgdGltZXJfc3Rv
cHBlZDsKLQotCXN3aXRjaCAoaWNtcDZfdHlwZSkgewotCWNhc2UgSUNNUDZfRFNUX1VOUkVBQ0g6
Ci0JCWlmICgoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFKSB8fAotCQkg
ICAgKGljbXA2X2NvZGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4pIHx8Ci0JCSAgICAoaWNt
cDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRSkgfHwKLQkJICAgIChpY21w
Nl9jb2RlID09IElDTVA2X0RTVF9VTlJFQUNIX0FERFIpKSB7Ci0JCQkvKiBNYXJrIHRoZSBuZXQg
dW5yZWFjaGFibGUuICovCi0JCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNI
QUJMRSkgewotCQkJCS8qIE9rIHRoYXQgZGVzdGluYXRpb24gaXMgbm90IHJlYWNoYWJsZSAqLwot
CQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKLQkJCQluZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJ
RllfSU5URVJGQUNFX0RPV04sCi0JCQkJICAgICAgICAgICAgICAgIHN0Y2IsIDAsICh2b2lkICop
bmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJfQotCQl9Ci0JCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJQ01QNl9QQVJBTV9QUk9COgotCQkvKiBUcmVhdCBpdCBs
aWtlIGFuIEFCT1JULiAqLwotCQlpZiAoaWNtcDZfY29kZSA9PSBJQ01QNl9QQVJBTVBST0JfTkVY
VEhFQURFUikgewotCQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMSwgMCwgTlVMTCwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKLQkJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7
Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYK
LQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0J
CQkJCSAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzIpOwotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSUNNUDZfUEFDS0VUX1RPT19CSUc6Ci0J
CWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKLQkJ
CXRpbWVyX3N0b3BwZWQgPSAxOwotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9Q
QVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAotCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzEpOwotCQl9IGVsc2UgewotCQkJdGltZXJfc3RvcHBl
ZCA9IDA7Ci0JCX0KLQkJLyogVXBkYXRlIHRoZSBwYXRoIE1UVS4gKi8KLQkJaWYgKG5ldC0+cG9y
dCkgewotCQkJbmV4dF9tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQl9Ci0JCWlmIChu
ZXQtPm10dSA+IG5leHRfbXR1KSB7Ci0JCQluZXQtPm10dSA9IG5leHRfbXR1OwotCQl9Ci0JCS8q
IFVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gTVRVICovCi0JCWlmIChzdGNiLT5hc29jLnNtYWxsZXN0
X210dSA+IG5leHRfbXR1KSB7Ci0JCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXh0
X210dSk7Ci0JCX0KLQkJLyogRmluYWxseSwgc3RhcnQgdGhlIFBNVFUgdGltZXIgaWYgaXQgd2Fz
IHJ1bm5pbmcgYmVmb3JlLiAqLwotCQlpZiAodGltZXJfc3RvcHBlZCkgewotCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7Ci0J
CX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9pZAotc2N0cDZfY3RsaW5w
dXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpwa3Rkc3QsIHZvaWQgKmQpCi17Ci0Jc3RydWN0
IGlwNmN0bHBhcmFtICppcDZjcDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBoZHIg
c2g7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKLQotI2lmZGVmIEhBVkVfU0FfTEVO
Ci0JaWYgKHBrdGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2IHx8Ci0JICAgIHBrdGRzdC0+c2Ff
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotI2Vsc2UKLQlpZiAocGt0ZHN0
LT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCi0JaWYg
KCh1bnNpZ25lZCljbWQgPj0gUFJDX05DTURTKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKFBSQ19J
U19SRURJUkVDVChjbWQpKSB7Ci0JCWQgPSBOVUxMOwotCX0gZWxzZSBpZiAoaW5ldDZjdGxlcnJt
YXBbY21kXSA9PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyogSWYgdGhlIHBhcmFtZXRlciBpcyBm
cm9tIGljbXA2LCBkZWNvZGUgaXQuICovCi0JaWYgKGQgIT0gTlVMTCkgewotCQlpcDZjcCA9IChz
dHJ1Y3QgaXA2Y3RscGFyYW0gKilkOwotCX0gZWxzZSB7Ci0JCWlwNmNwID0gKHN0cnVjdCBpcDZj
dGxwYXJhbSAqKU5VTEw7Ci0JfQotCi0JaWYgKGlwNmNwICE9IE5VTEwpIHsKLQkJLyoKLQkJICog
WFhYOiBXZSBhc3N1bWUgdGhhdCB3aGVuIElQVjYgaXMgbm9uIE5VTEwsIE0gYW5kIE9GRiBhcmUK
LQkJICogdmFsaWQuCi0JCSAqLwotCQlpZiAoaXA2Y3AtPmlwNmNfbSA9PSBOVUxMKSB7Ci0JCQly
ZXR1cm47Ci0JCX0KLQotCQkvKiBDaGVjayBpZiB3ZSBjYW4gc2FmZWx5IGV4YW1pbmUgdGhlIHBv
cnRzIGFuZCB0aGUKLQkJICogdmVyaWZpY2F0aW9uIHRhZyBvZiB0aGUgU0NUUCBjb21tb24gaGVh
ZGVyLgotCQkgKi8KLQkJaWYgKGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLmxlbiA8Ci0JCSAgICAo
aW50MzJfdCkoaXA2Y3AtPmlwNmNfb2ZmICsgb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNr
c3VtKSkpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIENvcHkgb3V0IHRoZSBwb3J0IG51bWJl
cnMgYW5kIHRoZSB2ZXJpZmljYXRpb24gdGFnLiAqLwotCQltZW1zZXQoJnNoLCAwLCBzaXplb2Yo
c2gpKTsKLQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAotCQkgICAgICAgICAgIGlwNmNwLT5p
cDZjX29mZiwKLQkJICAgICAgICAgICBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQxNl90
KSArIHNpemVvZih1aW50MzJfdCksCi0JCSAgICAgICAgICAgKGNhZGRyX3QpJnNoKTsKLQkJbWVt
c2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCXNyYy5zaW42X2Zh
bWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc3JjLnNpbjZfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCXNyYy5zaW42X3BvcnQgPSBz
aC5zcmNfcG9ydDsKLQkJc3JjLnNpbjZfYWRkciA9IGlwNmNwLT5pcDZjX2lwNi0+aXA2X3NyYzsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAoaW42X3NldHNjb3BlKCZzcmMuc2luNl9h
ZGRyLCBpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkgewotCQkJcmV0
dXJuOwotCQl9Ci0jZW5kaWYKLQkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7Ci0JCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KLQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2Vu
ZGlmCi0JCWRzdC5zaW42X3BvcnQgPSBzaC5kZXN0X3BvcnQ7Ci0JCWRzdC5zaW42X2FkZHIgPSBp
cDZjcC0+aXA2Y19pcDYtPmlwNl9kc3Q7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJaWYg
KGluNl9zZXRzY29wZSgmZHN0LnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIucmN2
aWYsIE5VTEwpICE9IDApIHsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlmCi0JCWlucCA9IE5VTEw7
Ci0JCW5ldCA9IE5VTEw7Ci0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKChz
dHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKLQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJmlucCwgJm5ldCwgMSwgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJaWYgKChz
dGNiICE9IE5VTEwpICYmCi0JCSAgICAobmV0ICE9IE5VTEwpICYmCi0JCSAgICAoaW5wICE9IE5V
TEwpKSB7Ci0JCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLwotCQkJaWYgKG50b2hs
KHNoLnZfdGFnKSAhPSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIG11c3QgYmUgdGhlIHZlcmlm
aWNhdGlvbiB0YWcgdXNlZCBmb3IKLQkJCQkgKiBzZW5kaW5nIG91dCBwYWNrZXRzLiBXZSBkb24n
dCBjb25zaWRlcgotCQkJCSAqIHBhY2tldHMgcmVmbGVjdGluZyB0aGUgdmVyaWZpY2F0aW9uIHRh
Zy4KLQkJCQkgKi8KLQkJCQlpZiAobnRvaGwoc2gudl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92
dGFnKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0K
LQkJCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQlpZiAoaXA2Y3AtPmlw
NmNfbS0+bV9wa3RoZHIubGVuID49Ci0JCQkJICAgIGlwNmNwLT5pcDZjX29mZiArIHNpemVvZihz
dHJ1Y3Qgc2N0cGhkcikgKwotCQkJCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0
IHNjdHBfY2h1bmtoZHIpICsKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3Ry
dWN0IHNjdHBfaW5pdCwgYV9yd25kKSkgewotCQkJCQkvKgotCQkJCQkgKiBJbiB0aGlzIGNhc2Ug
d2UgY2FuIGNoZWNrIGlmIHdlCi0JCQkJCSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0aGUK
LQkJCQkJICogaW5pdGlhdGUgdGFnIG1hdGNoZXMuCi0JCQkJCSAqLwotCQkJCQl1aW50MzJfdCBp
bml0aWF0ZV90YWc7Ci0JCQkJCXVpbnQ4X3QgY2h1bmtfdHlwZTsKLQotCQkJCQltX2NvcHlkYXRh
KGlwNmNwLT5pcDZjX20sCi0JCQkJCSAgICAgICAgICAgaXA2Y3AtPmlwNmNfb2ZmICsKLQkJCQkJ
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpLAotCQkJCQkgICAgICAgICAgIHNpemVv
Zih1aW50OF90KSwKLQkJCQkJICAgICAgICAgICAoY2FkZHJfdCkmY2h1bmtfdHlwZSk7Ci0JCQkJ
CW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKLQkJCQkJICAgICAgICAgICBpcDZjcC0+aXA2Y19v
ZmYgKwotCQkJCQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkJCQkgICAg
ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksCi0JCQkJCSAgICAgICAgICAgc2l6
ZW9mKHVpbnQzMl90KSwKLQkJCQkJICAgICAgICAgICAoY2FkZHJfdCkmaW5pdGlhdGVfdGFnKTsK
LQkJCQkJaWYgKChjaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgfHwKLQkJCQkJICAgIChu
dG9obChpbml0aWF0ZV90YWcpICE9IHN0Y2ItPmFzb2MubXlfdnRhZykpIHsKLQkJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJCXJldHVybjsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0J
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLSNlbHNlCi0J
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVybjsKLSNlbmRpZgotCQkJfQotCQkJ
c2N0cDZfbm90aWZ5KGlucCwgc3RjYiwgbmV0LAotCQkJICAgICAgICAgICAgIGlwNmNwLT5pcDZj
X2ljbXA2LT5pY21wNl90eXBlLAotCQkJICAgICAgICAgICAgIGlwNmNwLT5pcDZjX2ljbXA2LT5p
Y21wNl9jb2RlLAotCQkJICAgICAgICAgICAgIG50b2hsKGlwNmNwLT5pcDZjX2ljbXA2LT5pY21w
Nl9tdHUpKTsKLQkJfSBlbHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDUwMDAwMAotCQkJaWYgKFBSQ19JU19SRURJUkVDVChjbWQpICYmIChpbnAg
IT0gTlVMTCkpIHsKLQkJCQlpbjZfcnRjaGFuZ2UoKHN0cnVjdCBpbjZwY2IgKilpbnAsCi0JCQkJ
ICAgIGluZXQ2Y3RsZXJybWFwW2NtZF0pOwotCQkJfQotI2VuZGlmCi0JCQlpZiAoKHN0Y2IgPT0g
TlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgewotCQkJCS8qIHJlZHVjZSBpbnAncyByZWYtY291bnQg
Ki8KLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJaWYgKHN0Y2IpIHsKLQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLQotLyoKLSAq
IHRoaXMgcm91dGluZSBjYW4gcHJvYmFibHkgYmUgY29sbGFzcGVkIGludG8gdGhlIG9uZSBpbiBz
Y3RwX3VzZXJyZXEuYwotICogc2luY2UgdGhleSBkbyB0aGUgc2FtZSB0aGluZyBhbmQgbm93IHdl
IGxvb2t1cCB3aXRoIGEgc29ja2FkZHIKLSAqLwotI2lmZGVmIF9fRnJlZUJTRF9fCi1zdGF0aWMg
aW50Ci1zY3RwNl9nZXRjcmVkKFNZU0NUTF9IQU5ETEVSX0FSR1MpCi17Ci0Jc3RydWN0IHh1Y3Jl
ZCB4dWM7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBhZGRyc1syXTsKLQlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7
Ci0JaW50IGVycm9yOwotCXVpbnQzMl90IHZyZl9pZDsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotCXZyZl9pZCA9IFNDVFBfREVGQVVMVF9WUkZJRDsK
LSNlbHNlCi0JdnJmX2lkID0gcGFuZGFfZ2V0X3ZyZl9mcm9tX2NhbGwoKTsgLyogZnJvbSBjb25u
ZWN0eCBjYWxsPyAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAotCWVycm9yID0gcHJpdl9jaGVjayhyZXEtPnRkLCBQUklW
X05FVElORVRfR0VUQ1JFRCk7Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA1MDAwMDAKLQllcnJvciA9IHN1c2VyKHJlcS0+dGQpOwotI2Vsc2UKLQll
cnJvciA9IHN1c2VyKHJlcS0+cCk7Ci0jZW5kaWYKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJy
b3IpOwotCi0JaWYgKHJlcS0+bmV3bGVuICE9IHNpemVvZihhZGRycykpIHsKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5W
QUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmIChyZXEtPm9sZGxlbiAhPSBzaXplb2Yo
c3RydWN0IHVjcmVkKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9
Ci0JZXJyb3IgPSBTWVNDVExfSU4ocmVxLCBhZGRycywgc2l6ZW9mKGFkZHJzKSk7Ci0JaWYgKGVy
cm9yKQotCQlyZXR1cm4gKGVycm9yKTsKLQotCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9h
ZGRyX3NhKHNpbjZ0b3NhKCZhZGRyc1sxXSksCi0JICAgIHNpbjZ0b3NhKCZhZGRyc1swXSksCi0J
ICAgICZpbnAsICZuZXQsIDEsIHZyZl9pZCk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCB8fCBpbnAgPT0g
TlVMTCB8fCBpbnAtPnNjdHBfc29ja2V0ID09IE5VTEwpIHsKLQkJaWYgKChpbnAgIT0gTlVMTCkg
JiYgKHN0Y2IgPT0gTlVMTCkpIHsKLQkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8KLQkJCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJZ290byBjcmVk
X2Nhbl9jb250OwotCQl9Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOwotCQllcnJvciA9IEVOT0VOVDsKLQkJZ290
byBvdXQ7Ci0JfQotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkvKiBXZSB1c2UgdGhlIHdyaXRl
IGxvY2sgaGVyZSwgb25seQotCSAqIHNpbmNlIGluIHRoZSBlcnJvciBsZWcgd2UgbmVlZCBpdC4K
LQkgKiBJZiB3ZSB1c2VkIFJMT0NLLCB0aGVuIHdlIHdvdWxkIGhhdmUKLQkgKiB0byB3bG9jay9k
ZWNyL3VubG9jay9ybG9jay4gV2hpY2gKLQkgKiBpbiB0aGVvcnkgY291bGQgY3JlYXRlIGEgaG9s
ZS4gQmV0dGVyCi0JICogdG8gdXNlIGhpZ2hlciB3bG9jay4KLQkgKi8KLQlTQ1RQX0lOUF9XTE9D
SyhpbnApOwotIGNyZWRfY2FuX2NvbnQ6Ci0JZXJyb3IgPSBjcl9jYW5zZWVzb2NrZXQocmVxLT50
ZC0+dGRfdWNyZWQsIGlucC0+c2N0cF9zb2NrZXQpOwotCWlmIChlcnJvcikgewotCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7Ci0JCWdvdG8gb3V0OwotCX0KLQljcnUyeChpbnAtPnNjdHBfc29ja2V0
LT5zb19jcmVkLCAmeHVjKTsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JZXJyb3IgPSBTWVND
VExfT1VUKHJlcSwgJnh1Yywgc2l6ZW9mKHN0cnVjdCB4dWNyZWQpKTsKLW91dDoKLQlyZXR1cm4g
KGVycm9yKTsKLX0KLQotU1lTQ1RMX1BST0MoX25ldF9pbmV0Nl9zY3RwNiwgT0lEX0FVVE8sIGdl
dGNyZWQsIENUTFRZUEVfT1BBUVVFIHwgQ1RMRkxBR19SVywKLSAgICAwLCAwLAotICAgIHNjdHA2
X2dldGNyZWQsICJTLHVjcmVkIiwgIkdldCB0aGUgdWNyZWQgb2YgYSBTQ1RQNiBjb25uZWN0aW9u
Iik7Ci0KLSNlbmRpZgotCi0vKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZSBzY3RwX2Fib3J0KCkg
Y291bGQgYmUgbWFkZSBjb21tb24gKi8KLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi1zdGF0aWMg
dm9pZAotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LWludAotI2Vsc2UKLXN0YXRpYyBpbnQKLSNlbmRpZgotc2N0cDZfYWJvcnQoc3RydWN0IHNvY2tl
dCAqc28pCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQl1aW50MzJfdCBmbGFnczsKLQot
CWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxM
KSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UDZfVVNSUkVRLCBFSU5WQUwpOwotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJcmV0dXJuOwot
I2Vsc2UKLQkJcmV0dXJuIChFSU5WQUwpOwotI2VuZGlmCi0JfQotIHNjdHBfbXVzdF90cnlfYWdh
aW46Ci0JZmxhZ3MgPSBpbnAtPnNjdHBfZmxhZ3M7Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwot
CXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxNyk7Ci0jZW5kaWYKLQlpZiAoKChmbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSAmJgotCSAgICAoYXRvbWljX2NtcHNl
dF9pbnQoJmlucC0+c2N0cF9mbGFncywgZmxhZ3MsIChmbGFncyB8IFNDVFBfUENCX0ZMQUdTX1NP
Q0tFVF9HT05FIHwgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVApKSkpIHsKLSNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCi0JCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxNik7Ci0jZW5kaWYKLQkJ
c2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCi0JCQkJU0NU
UF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOwotCQlTT0NLX0xPQ0soc28pOwotCQlTQ1RQ
X1NCX0NMRUFSKHNvLT5zb19zbmQpOwotCQkvKiBzYW1lIGZvciB0aGUgcmN2IG9uZXMsIHRoZXkg
YXJlIG9ubHkKLQkJICogaGVyZSBmb3IgdGhlIGFjY291bnRpbmcvc2VsZWN0LgotCQkgKi8KLQkJ
U0NUUF9TQl9DTEVBUihzby0+c29fcmN2KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJc28t
PnNvX3VzZWNvdW50LS07Ci0jZWxzZQotCQkvKiBOb3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwg
d2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQuICovCi0JCXNvLT5zb19wY2IgPSBOVUxMOwotI2Vu
ZGlmCi0JCVNPQ0tfVU5MT0NLKHNvKTsKLQl9IGVsc2UgewotCQlmbGFncyA9IGlucC0+c2N0cF9m
bGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7
Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47Ci0JCX0KLQl9Ci0jaWYgKGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKQotCXJldHVybjsKLSNlbHNlCi0JcmV0dXJuICgwKTsKLSNlbmRpZgotfQotCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1zdGF0
aWMgaW50Ci1zY3RwNl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VO
VVNFRCwgc3RydWN0IHRocmVhZCAqcCBTQ1RQX1VOVVNFRCkKLSNlbGlmIGRlZmluZWQoX19QYW5k
YV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLXNjdHA2X2F0dGFjaChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5VU0VELCB1aW50MzJfdCB2cmZfaWQpCi0jZWxp
ZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RhdGljIGludAotc2N0cDZfYXR0YWNoKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFEIHAgU0NUUF9VTlVTRUQp
Ci0jZWxzZQotc3RhdGljIGludAotc2N0cDZfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
cHJvdG8gU0NUUF9VTlVTRUQsIHN0cnVjdCBwcm9jICpwIFNDVFBfVU5VU0VEKQotI2VuZGlmCi17
Ci0Jc3RydWN0IGluNnBjYiAqaW5wNjsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHNjdHBfaW5wY2Ig
KmlucDsKLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JdWludDMyX3QgdnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOwotI2VuZGlmCi0KLQlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgIT0gTlVMTCkgewot
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VT
UlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQotCWlmIChzby0+c29fc25k
LnNiX2hpd2F0ID09IDAgfHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7Ci0JCWVycm9yID0g
U0NUUF9TT1JFU0VSVkUoc28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSk7Ci0JCWlmIChlcnJvcikKLQkJCXJldHVybiAo
ZXJyb3IpOwotCX0KLQllcnJvciA9IHNjdHBfaW5wY2JfYWxsb2Moc28sIHZyZl9pZCk7Ci0JaWYg
KGVycm9yKQotCQlyZXR1cm4gKGVycm9yKTsKLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOwotCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JaW5wLT5zY3RwX2ZsYWdzIHw9IFND
VFBfUENCX0ZMQUdTX0JPVU5EX1Y2OwkvKiBJJ20gdjYhICovCi0JaW5wNiA9IChzdHJ1Y3QgaW42
cGNiICopaW5wOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlp
bnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7Ci0jZWxzZQotCWlucC0+aW5wX3ZmbGFnIHw9IElO
UF9JUFY2OwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQotCWlucDYtPmluNnBfaG9w
cyA9IC0xOwkvKiB1c2Uga2VybmVsIGRlZmF1bHQgKi8KLQlpbnA2LT5pbjZwX2Nrc3VtID0gLTE7
CS8qIGp1c3QgdG8gYmUgc3VyZSAqLwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCS8qCi0JICogWFhY
OiB1Z2x5ISEgSVB2NCBUVEwgaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNzYXJ5IGZvciBhbiBJUHY2
Ci0JICogc29ja2V0IGFzIHdlbGwsIGJlY2F1c2UgdGhlIHNvY2tldCBtYXkgYmUgYm91bmQgdG8g
YW4gSVB2NgotCSAqIHdpbGRjYXJkIGFkZHJlc3MsIHdoaWNoIG1heSBtYXRjaCBhbiBJUHY0LW1h
cHBlZCBJUHY2IGFkZHJlc3MuCi0JICovCi0JaW5wNi0+aW5wX2lwX3R0bCA9IE1PRFVMRV9HTE9C
QUwoaXBfZGVmdHRsKTsKLSNlbmRpZgotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlyZXR1cm4g
KDApOwotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNTAwMDAwCi1zdGF0aWMgaW50Ci1zY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCB0aHJlYWQgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBpbnQKLXNjdHA2X2JpbmQo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHByb2MgKnAp
Ci17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
aW50Ci1zY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
IHZvaWQgKiBwKQotewotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXN0YXRpYyBpbnQKLXNj
dHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgUEtUSFJF
QUQgcCkKLXsKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIgPSBuYW0gPyBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOiBOVUxMOwotCi0jZW5k
aWYKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBpbjZwY2IgKmlucDY7Ci0JaW50
IGVycm9yOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAo
aW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0K
LSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKLQlpZiAoYWRkcikgewotCQlzd2l0Y2ggKGFkZHIt
PnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotI2lmZGVmIEhBVkVf
U0FfTEVOCi0JCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotI2VuZGlm
Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0jaWZk
ZWYgSEFWRV9TQV9MRU4KLQkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJ
fQotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7
Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlpbnA2ID0gKHN0cnVjdCBp
bjZwY2IgKilpbnA7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlp
bnA2LT5pbnBfdmZsYWcgJj0gfklOUF9JUFY0OwotCWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBW
NjsKLSNlbHNlCi0JaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9JUFY0OwotCWlucC0+aW5wX3ZmbGFn
IHw9IElOUF9JUFY2OwotI2VuZGlmCi0JaWYgKChhZGRyICE9IE5VTEwpICYmIChTQ1RQX0lQVjZf
VjZPTkxZKGlucDYpID09IDApKSB7Ci0JCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZk
ZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQkvKiBiaW5kaW5nIHY0IGFkZHIgdG8gdjYgc29j
a2V0LCBzbyByZXNldCBmbGFncyAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JCQlpbnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7Ci0JCQlpbnA2LT5pbnBfdmZs
YWcgJj0gfklOUF9JUFY2OwotI2Vsc2UKLQkJCWlucC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY0Owot
CQkJaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OwotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjZfcDsKLQotCQkJc2luNl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRy
OwotCi0JCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjZfcC0+c2luNl9hZGRyKSkg
ewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJaW5wNi0+aW5w
X3ZmbGFnIHw9IElOUF9JUFY0OwotI2Vsc2UKLQkJCQlpbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBW
NDsKLSNlbmRpZgotCQkJfQotI2lmZGVmIElORVQKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBF
RCgmc2luNl9wLT5zaW42X2FkZHIpKSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKLQot
CQkJCWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjZfcCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQlpbnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7Ci0JCQkJ
aW5wNi0+aW5wX3ZmbGFnICY9IH5JTlBfSVBWNjsKLSNlbHNlCi0JCQkJaW5wLT5pbnBfdmZsYWcg
fD0gSU5QX0lQVjQ7Ci0JCQkJaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OwotI2VuZGlmCi0J
CQkJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBO
VUxMLCBwKTsKLQkJCQlyZXR1cm4gKGVycm9yKTsKLQkJCX0KLSNlbmRpZgotCQkJYnJlYWs7Ci0J
CX0KLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgaWYgKGFkZHIg
IT0gTlVMTCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X3A7Ci0KLQkJLyogSVBWNl9W
Nk9OTFkgc29ja2V0ICovCi0jaWZkZWYgSU5FVAotCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFG
X0lORVQpIHsKLQkJCS8qIGNhbid0IGJpbmQgdjQgYWRkciB0byB2NiBvbmx5IHNvY2tldCEgKi8K
LQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZf
VVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5kaWYKLQkJc2lu
Nl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCi0JCWlmIChJTjZfSVNfQUREUl9W
NE1BUFBFRCgmc2luNl9wLT5zaW42X2FkZHIpKSB7Ci0JCQkvKiBjYW4ndCBiaW5kIHY0LW1hcHBl
ZCBhZGRycyBlaXRoZXIhICovCi0JCQkvKiBOT1RFOiB3ZSBkb24ndCBzdXBwb3J0IFNJSVQgKi8K
LQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZf
VVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCWVycm9yID0g
c2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBwKTsKLQlyZXR1cm4gKGVycm9yKTsKLX0K
LQotCi0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkw
MDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXN0YXRpYyB2b2lkCi0jZWxzZQotdm9pZAotI2Vu
ZGlmCi1zY3RwNl9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlzY3RwX2Nsb3NlKHNvKTsK
LX0KLQotLyogVGhpcyBjb3VsZCBiZSBtYWRlIGNvbW1vbiB3aXRoIHNjdHBfZGV0YWNoKCkgc2lu
Y2UgdGhleSBhcmUgaWRlbnRpY2FsICovCi0jZWxzZQotCi0jaWYgIWRlZmluZWQoX19QYW5kYV9f
KQotc3RhdGljCi0jZW5kaWYKLWludAotc2N0cDZfZGV0YWNoKHN0cnVjdCBzb2NrZXQgKnNvKQot
ewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlzY3RwX2Nsb3NlKHNvKTsKLQlyZXR1cm4g
KDApOwotI2Vsc2UKLQlyZXR1cm4gKHNjdHBfZGV0YWNoKHNvKSk7Ci0jZW5kaWYKLX0KLQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci1zdGF0aWMKLSNlbmRpZgotaW50Ci1zY3RwNl9kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNv
KQotewotCXJldHVybiAoc2N0cF9kaXNjb25uZWN0KHNvKSk7Ci19Ci0KLQotaW50Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1zY3RwX3Nl
bmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsCi0gICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCB0aHJlYWQg
KnApOwotCi0jZWxzZQotc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBz
dHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgIHN0cnVjdCBtYnVmICpj
b250cm9sLCBzdHJ1Y3QgcHJvYyAqcCk7Ci0KLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19QYW5k
YV9fKSAmJiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAK
LXN0YXRpYyBpbnQKLXNjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3Ry
dWN0IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLSAgICBzdHJ1Y3QgbWJ1ZiAqY29u
dHJvbCwgc3RydWN0IHRocmVhZCAqcCkKLXsKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19BUFBMRV9fKQotc3RhdGljIGludAotc2N0cDZfc2VuZChzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAot
ICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLSNlbHNlCi1zdGF0
aWMgaW50Ci1zY3RwNl9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBt
YnVmICptLCBzdHJ1Y3QgbWJ1ZiAqbmFtLAotICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1
Y3QgcHJvYyAqcCkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBuYW0gPyBtdG9kKG5hbSwg
c3RydWN0IHNvY2thZGRyICopOiBOVUxMOwotI2VuZGlmCi0Jc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKLQlzdHJ1Y3QgaW42cGNiICppbnA2OwotCi0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0jZW5kaWYgLyogSU5FVCAqLwotCS8qIE5vIFNQTCBuZWVkZWQgc2luY2Ug
c2N0cF9vdXRwdXQgZG9lcyB0aGlzICovCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlpZiAoY29udHJvbCkgewotCQkJU0NU
UF9SRUxFQVNFX1BLVChjb250cm9sKTsKLQkJCWNvbnRyb2wgPSBOVUxMOwotCQl9Ci0JCVNDVFBf
UkVMRUFTRV9QS1QobSk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQot
CWlucDYgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKLQkvKgotCSAqIEZvciB0aGUgVENQIG1vZGVs
IHdlIG1heSBnZXQgYSBOVUxMIGFkZHIsIGlmIHdlIGFyZSBhIGNvbm5lY3RlZAotCSAqIHNvY2tl
dCB0aGF0cyBvay4KLQkgKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkgJiYKLQkgICAgKGFkZHIgPT0gTlVMTCkpIHsKLQkJZ290byBjb25uZWN0ZWRf
dHlwZTsKLQl9Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQX1JFTEVBU0VfUEtUKG0pOwot
CQlpZiAoY29udHJvbCkgewotCQkJU0NUUF9SRUxFQVNFX1BLVChjb250cm9sKTsKLQkJCWNvbnRy
b2wgPSBOVUxMOwotCQl9Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFREVTVEFERFJSRVEpOwotCQlyZXR1cm4gKEVERVNUQURE
UlJFUSk7Ci0JfQotI2lmZGVmIElORVQKLQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilh
ZGRyOwotCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7Ci0JCS8qCi0JCSAqIGlmIElQVjZf
VjZPTkxZIGZsYWcsIHdlIGRpc2NhcmQgZGF0YWdyYW1zIGRlc3RpbmVkIHRvIGEKLQkJICogdjQg
YWRkciBvciB2NC1tYXBwZWQgYWRkcgotCQkgKi8KLQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBB
Rl9JTkVUKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJldHVybiAoRUlOVkFMKTsKLQkJfQotCQlp
ZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5W
QUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCWlmIChJTjZfSVNfQUREUl9WNE1B
UFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCi0J
CS8qIGNvbnZlcnQgdjQtbWFwcGVkIGludG8gdjQgYWRkciBhbmQgc2VuZCAqLwotCQlpbjZfc2lu
Nl8yX3Npbigmc2luLCBzaW42KTsKLQkJcmV0dXJuIChzY3RwX3NlbmRtKHNvLCBmbGFncywgbSwg
KHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIGNvbnRyb2wsIHApKTsKLQl9Ci0jZW5kaWYJCQkJLyog
SU5FVCAqLwotY29ubmVjdGVkX3R5cGU6Ci0JLyogbm93IHdoYXQgYWJvdXQgY29udHJvbCAqLwot
CWlmIChjb250cm9sKSB7Ci0JCWlmIChpbnAtPmNvbnRyb2wpIHsKLQkJCVNDVFBfUFJJTlRGKCJo
dWg/IGNvbnRyb2wgc2V0P1xuIik7Ci0JCQlTQ1RQX1JFTEVBU0VfUEtUKGlucC0+Y29udHJvbCk7
Ci0JCQlpbnAtPmNvbnRyb2wgPSBOVUxMOwotCQl9Ci0JCWlucC0+Y29udHJvbCA9IGNvbnRyb2w7
Ci0JfQotCS8qIFBsYWNlIHRoZSBkYXRhICovCi0JaWYgKGlucC0+cGt0KSB7Ci0JCVNDVFBfQlVG
X05FWFQoaW5wLT5wa3RfbGFzdCkgPSBtOwotCQlpbnAtPnBrdF9sYXN0ID0gbTsKLQl9IGVsc2Ug
ewotCQlpbnAtPnBrdF9sYXN0ID0gaW5wLT5wa3QgPSBtOwotCX0KLQlpZiAoCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0JLyogRnJlZUJTRCBhbmQgTWFj
T1NYIHVzZXMgYSBmbGFnIHBhc3NlZCAqLwotCSAgICAoKGZsYWdzICYgUFJVU19NT1JFVE9DT01F
KSA9PSAwKQotI2Vsc2UKLQkgICAgMQkJCS8qIE9wZW4gQlNEIGRvZXMgbm90IGhhdmUgYW55ICJt
b3JlIHRvIGNvbWUiCi0JCQkJICogaW5kaWNhdGlvbiAqLwotI2VuZGlmCi0JICAgICkgewotCQkv
KgotCQkgKiBub3RlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGlzIGNvZGUgd2lsbCBvbmx5
IGJlIHVzZWQKLQkJICogYnkgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVlQlNEIGhhdmUgbWV0aG9k
cyBmb3IKLQkJICogcmUtZGVmaW5pbmcgc29zZW5kKCkgdG8gdXNlIHNjdHBfc29zZW5kKCkuICBP
bmUgY2FuCi0JCSAqIG9wdGlvbmFseSBzd2l0Y2ggYmFjayB0byB0aGlzIGNvZGUgKGJ5IGNoYW5n
aW5nIGJhY2sgdGhlCi0JCSAqIGRlZmluaW5pdGlvbnMgYnV0IHRoaXMgaXMgbm90IGFkdmlzYWJs
ZS4KLQkJICovCi0JCWludCByZXQ7Ci0KLQkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBr
dCwgYWRkciwgaW5wLT5jb250cm9sLCBwLCBmbGFncyk7Ci0JCWlucC0+cGt0ID0gTlVMTDsKLQkJ
aW5wLT5jb250cm9sID0gTlVMTDsKLQkJcmV0dXJuIChyZXQpOwotCX0gZWxzZSB7Ci0JCXJldHVy
biAoMCk7Ci0JfQotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLXN0YXRpYyBpbnQKLXNjdHA2X2Nvbm5lY3Qoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqcCkKLXsK
LSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotc3RhdGlj
IGludAotc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICph
ZGRyLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQotaW50Ci1z
Y3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHZv
aWQgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RhdGljIGludAotc2N0cDZf
Y29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBQS1RIUkVB
RCBwKQotewotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwNl9jb25uZWN0
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0Jdm9pZCAqcCA9
IE5VTEw7Ci0jZWxzZQotc3RhdGljIGludAotc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpz
bywgc3RydWN0IG1idWYgKm5hbSwgc3RydWN0IHByb2MgKnApCi17Ci0Jc3RydWN0IHNvY2thZGRy
ICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLSNlbmRpZgotCXVpbnQzMl90
IHZyZl9pZDsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3Ry
dWN0IHNjdHBfdGNiICpzdGNiOwotI2lmZGVmIElORVQKLQlzdHJ1Y3QgaW42cGNiICppbnA2Owot
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7
Ci0jZW5kaWYKLQotI2lmZGVmIElORVQKLQlpbnA2ID0gKHN0cnVjdCBpbjZwY2IgKilzby0+c29f
cGNiOwotI2VuZGlmCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlp
ZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVDT05OUkVTRVQpOwotCQlyZXR1cm4gKEVDT05OUkVT
RVQpOwkvKiBJIG1hZGUgdGhlIHNhbWUgYXMgVENQIHNpbmNlIHdlIGFyZQotCQkJCQkgKiBub3Qg
c2V0dXA/ICovCi0JfQotCWlmIChhZGRyID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJl
dHVybiAoRUlOVkFMKTsKLQl9Ci0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0Jc3dpdGNoIChh
ZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotI2lmZGVmIEhB
VkVfU0FfTEVOCi0JCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5kaWYK
LQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0jaWZkZWYg
SEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5k
aWYKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJu
IChFSU5WQUwpOwotCX0KLSNlbmRpZgotCi0JdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOwotCVND
VFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwotCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PQotCSAgICBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKSB7Ci0JCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9ydCAqLwotCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCWVycm9yID0gc2N0cDZfYmluZChzbywgTlVMTCwgcCk7Ci0J
CWlmIChlcnJvcikgewotCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQotCQkJcmV0
dXJuIChlcnJvcik7Ci0JCX0KLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQl9Ci0JaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSAmJgotCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSkgewotCQkvKiBXZSBhcmUgYWxyZWFk
eSBjb25uZWN0ZWQgQU5EIHRoZSBUQ1AgbW9kZWwgKi8KLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUFERFJJTlVTRSk7Ci0J
CXJldHVybiAoRUFERFJJTlVTRSk7Ci0JfQotI2lmZGVmIElORVQKLQlzaW42ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyOwotCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7Ci0JCS8q
Ci0JCSAqIGlmIElQVjZfVjZPTkxZIGZsYWcsIGlnbm9yZSBjb25uZWN0aW9ucyBkZXN0aW5lZCB0
byBhIHY0Ci0JCSAqIGFkZHIgb3IgdjQtbWFwcGVkIGFkZHIKLQkJICovCi0JCWlmIChhZGRyLT5z
YV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NU
UF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChF
SU5WQUwpOwotCQl9Ci0JCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRy
KSkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NUUF9BU09DX0NSRUFURV9VTkxP
Q0soaW5wKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQot
CWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkvKiBjb252
ZXJ0IHY0LW1hcHBlZCBpbnRvIHY0IGFkZHIgKi8KLQkJaW42X3NpbjZfMl9zaW4oJnN0b3JlLnNp
biwgc2luNik7Ci0JCWFkZHIgPSAmc3RvcmUuc2E7Ci0JfQotI2VuZGlmCQkJCS8qIElORVQgKi8K
LQkvKiBOb3cgZG8gd2UgY29ubmVjdD8gKi8KLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQ09OTkVDVEVEKSB7Ci0JCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNv
Y19saXN0KTsKLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQot
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfSBlbHNlIHsKLQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOwotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwot
CQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9l
cF9hZGRyKCZpbnAsIGFkZHIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlpZiAoc3RjYiA9PSBOVUxM
KSB7Ci0JCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
LQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJfQotCX0KLQotCWlmIChzdGNiICE9IE5VTEwp
IHsKLQkJLyogQWxyZWFkeSBoYXZlIG9yIGFtIGJyaW5nIHVwIGFuIGFzc29jaWF0aW9uICovCi0J
CVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9V
U1JSRVEsIEVBTFJFQURZKTsKLQkJcmV0dXJuIChFQUxSRUFEWSk7Ci0JfQotCS8qIFdlIGFyZSBH
T09EIHRvIGdvICovCi0Jc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhpbnAsIGFkZHIsICZlcnJvciwg
MCwgdnJmX2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnByZV9vcGVu
X3N0cmVhbV9jb3VudCwKLQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wb3J0
LCBwKTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCWlmIChzdGNiID09IE5VTEwp
IHsKLQkJLyogR2FrISBubyBtZW1vcnkgKi8KLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotCWlmIChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgewotCQlz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLQkJ
LyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLwotCQlzb2lz
Y29ubmVjdGluZyhzbyk7Ci0JfQotCXN0Y2ItPmFzb2Muc3RhdGUgPSBTQ1RQX1NUQVRFX0NPT0tJ
RV9XQUlUOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVfZW50
ZXJlZCk7Ci0KLQkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRo
ZSBhc3NvYyAqLwotCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhpbnAsIHN0Y2IpOwotCi0J
c2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NLRUQpOwotCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotc3RhdGljIGludAotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKQotc2N0cDZfZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICoqYWRkcikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VsaWYgZGVmaW5lZChf
X1BhbmRhX18pCi1zY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopYWRkcjsKLSNlbHNlCi1zY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3QgbWJ1ZiAqbmFtKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSBtdG9kKG5h
bSwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX2lucGNiICpp
bnA7Ci0JdWludDMyX3QgdnJmX2lkOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLSNp
ZmRlZiBTQ1RQX0tBTUUKLQlpbnQgZXJyb3I7Ci0jZW5kaWYgLyogU0NUUF9LQU1FICovCi0KLQkv
KgotCSAqIERvIHRoZSBtYWxsb2MgZmlyc3QgaW4gY2FzZSBpdCBibG9ja3MuCi0JICovCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pCi0JU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kiwgc2l6ZW9mKCpzaW42KSk7Ci0JaWYgKHNpbjYgPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9NRU0p
OwotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCi0JbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2lu
NikpOwotI2Vsc2UKLQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luNik7Ci0JbWVtc2V0
KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotI2VuZGlmCi0Jc2luNi0+c2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi0+c2luNl9sZW4gPSBzaXplb2Yo
KnNpbjYpOwotI2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNi
OwotCWlmIChpbnAgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1F
KHNpbjYpOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VU
KTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQlzaW42LT5zaW42X3BvcnQgPSBpbnAtPnNj
dHBfbHBvcnQ7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxM
KSB7Ci0JCS8qIEZvciB0aGUgYm91bmQgYWxsIGNhc2UgeW91IGdldCBiYWNrIDAgKi8KLQkJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgewotCQkJc3RydWN0
IHNjdHBfdGNiICpzdGNiOwotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luX2E2OwotCQkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OwotCQkJaW50IGZuZDsKLQkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZp
bnAtPnNjdHBfYXNvY19saXN0KTsKLQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQkJU0NUUF9GUkVFX1NPTkFNRShzaW42
KTsKLSNlbmRpZgotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOwotCQkJCXJldHVybiAoRU5PRU5UKTsKLQkJCX0K
LQkJCWZuZCA9IDA7Ci0JCQlzaW5fYTYgPSBOVUxMOwotCQkJVEFJTFFfRk9SRUFDSChuZXQsICZz
dGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQlpZiAoc2luX2E2ID09IE5VTEwpCi0JCQkJ
CS8qIHRoaXMgd2lsbCBtYWtlIGNvdmVyaXR5IGhhcHB5ICovCi0JCQkJCWNvbnRpbnVlOwotCi0J
CQkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJZm5kID0gMTsK
LQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCghZm5kKSB8fCAoc2luX2E2ID09IE5V
TEwpKSB7Ci0JCQkJLyogcHVudCAqLwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKLQkJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVO
T0VOVCk7Ci0JCQkJcmV0dXJuIChFTk9FTlQpOwotCQkJfQotCQkJdnJmX2lkID0gaW5wLT5kZWZf
dnJmX2lkOwotCQkJc2N0cF9pZmEgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAs
IHN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywgbmV0LCAwLCB2cmZfaWQpOwotCQkJaWYg
KHNjdHBfaWZhKSB7Ci0JCQkJc2luNi0+c2luNl9hZGRyID0gc2N0cF9pZmEtPmFkZHJlc3Muc2lu
Ni5zaW42X2FkZHI7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3IgdGhlIGJvdW5kIGFsbCBj
YXNlIHlvdSBnZXQgYmFjayAwICovCi0JCQltZW1zZXQoJnNpbjYtPnNpbjZfYWRkciwgMCwgc2l6
ZW9mKHNpbjYtPnNpbjZfYWRkcikpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogVGFrZSB0aGUgZmly
c3QgSVB2NiBhZGRyZXNzIGluIHRoZSBsaXN0ICovCi0JCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRk
cjsKLQkJaW50IGZuZCA9IDA7Ci0KLQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2Fk
ZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luX2E7
Ci0KLQkJCQlzaW5fYSA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJc2luNi0+c2lu
Nl9hZGRyID0gc2luX2EtPnNpbjZfYWRkcjsKLQkJCQlmbmQgPSAxOwotCQkJCWJyZWFrOwotCQkJ
fQotCQl9Ci0JCWlmICghZm5kKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQlTQ1RQX0ZSRUVfU09OQU1F
KHNpbjYpOwotI2VuZGlmCi0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRU5PRU5U
KTsKLQkJCXJldHVybiAoRU5PRU5UKTsKLQkJfQotCX0KLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JLyogU2NvcGluZyB0aGluZ3MgZm9yIHY2ICovCi0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9T
Q09QRQotI2lmZGVmIFNDVFBfS0FNRQotCWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNjb3BlKHNp
bjYpKSAhPSAwKSB7Ci0JCVNDVFBfRlJFRV9TT05BTUUoc2luNik7Ci0JCXJldHVybiAoZXJyb3Ip
OwotCX0KLSNlbHNlCi0JaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikpCi0JCS8qIHNraXAgaWZwIGNoZWNrIGJlbG93ICovCi0JCWluNl9yZWNvdmVyc2NvcGUoc2lu
NiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7Ci0JZWxzZQotCQlzaW42LT5zaW42X3Njb3BlX2lk
ID0gMDsJLyogWFhYICovCi0jZW5kaWYgLyogU0NUUF9LQU1FICovCi0jZW5kaWYgLyogU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCSgqYWRkcikgPSAoc3RydWN0IHNv
Y2thZGRyICopc2luNjsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKLXNjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKiphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLXNjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopYWRkcjsKLSNlbHNlCi1zY3RwNl9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0g
bXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7Ci0jZW5kaWYKLQlpbnQgZm5kOwotCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbl9hNjsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0
cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0jaWZkZWYgU0NU
UF9LQU1FCi0JaW50IGVycm9yOwotI2VuZGlmCi0KLQkvKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGlu
IGNhc2UgaXQgYmxvY2tzLiAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVNDVFBfTUFMTE9DX1NPTkFNRShz
aW42LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHNpemVvZiAqc2luNik7Ci0JaWYgKHNpbjYgPT0g
TlVMTCkKLQkJcmV0dXJuIChFTk9NRU0pOwotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCi0JbWVt
c2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotI2Vsc2UKLQlTQ1RQX0JVRl9MRU4obmFtKSA9
IHNpemVvZigqc2luNik7Ci0JbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotI2VuZGlm
Ci0Jc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0J
c2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOwotI2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmICgoaW5wID09IE5VTEwpIHx8Ci0JICAgICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSA9PSAwKSkgewotCQkv
KiBVRFAgdHlwZSBhbmQgbGlzdGVuZXJzIHdpbGwgZHJvcCBvdXQgaGVyZSAqLwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9UQ09OTik7
Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQlpZiAoc3RjYikgewotCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCX0KLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JaWYgKHN0Y2Ig
PT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2Vu
ZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JZm5k
ID0gMDsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
Ci0JCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJ
aWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWZuZCA9IDE7Ci0JCQlz
aW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJCXNpbjYtPnNpbjZfYWRkciA9IHNpbl9h
Ni0+c2luNl9hZGRyOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCWlmICghZm5kKSB7Ci0JCS8qIE5vIElQdjQgYWRkcmVzcyAqLwotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQot
CQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOwotCQlyZXR1
cm4gKEVOT0VOVCk7Ci0JfQotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLSNpZmRlZiBT
Q1RQX0tBTUUKLQlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZShzaW42KSkgIT0gMCkgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBl
cnJvcik7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0KLSNlbHNlCi0JaW42X3JlY292ZXJzY29wZShz
aW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKLSNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KLSNl
bmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JKmFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKLXN0YXRpYyBpbnQKLXNjdHA2X2luNmdldGFkZHIoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSkKLXsKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQot
aW50Ci1zY3RwNl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
Km5hbSwgdWludDMyX3QgKm5hbWVsZW4pCi17Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gbmFt
OwotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwNl9pbjZnZXRhZGRyKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQotewotI2lmZGVmIElORVQKLQlzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOwotI2VuZGlm
Ci0jZWxzZQotc3RhdGljIGludAotc2N0cDZfaW42Z2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IG1idWYgKm5hbSkKLXsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyICphZGRy
ID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLSNlbmRpZgotI2VuZGlmCi0Jc3RydWN0
IGluNnBjYiAqaW5wNiA9IHNvdG9pbjZwY2Ioc28pOwotCWludCBlcnJvcjsKLQotCWlmIChpbnA2
ID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCi0J
LyogYWxsb3cgdjYgYWRkcmVzc2VzIHByZWNlZGVuY2UgKi8KLQllcnJvciA9IHNjdHA2X2dldGFk
ZHIoc28sIG5hbSk7Ci0jaWZkZWYgSU5FVAotCWlmIChlcnJvcikgewotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQot
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2Vsc2UKLQkJc3RydWN0IHNvY2thZGRyX2lu
NiBzaW42OwotI2VuZGlmCi0KLQkJLyogdHJ5IHY0IG5leHQgaWYgdjYgZmFpbGVkICovCi0JCWVy
cm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7Ci0JCWlmIChlcnJvcikgewotCQkJcmV0dXJu
IChlcnJvcik7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYs
IHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKLQkJaWYgKHNpbjYgPT0gTlVM
TCkgewotCQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKLQkJCXJldHVybiAoRU5PTUVNKTsKLQkJ
fQotCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikqbmFtLCBzaW42
KTsKLQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKLQkJKm5hbSA9IChzdHJ1Y3Qgc29ja2FkZHIg
KilzaW42OwotI2Vsc2UKLQkJaW42X3Npbl8yX3Y0bWFwc2luNigoc3RydWN0IHNvY2thZGRyX2lu
ICopYWRkciwgJnNpbjYpOwotCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKLQkJbWVtY3B5KGFkZHIsICZzaW42LCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOwotI2VuZGlmCi0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1BhbmRhX18pCi0JKm5h
bWVsZW4gPSBuYW0tPnNhX2xlbjsKLSNlbmRpZgotCXJldHVybiAoZXJyb3IpOwotfQotCi0KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKLXN0YXRpYyBpbnQKLXNjdHA2X2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LWludAotc2N0cDZfZ2V0cGVlcmFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqbmFtLCB1aW50MzJfdCAqbmFtZWxlbikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopbmFtOwotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50
Ci1zY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkK
LXsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVj
dCBzb2NrYWRkciAqKTsKLSNlbmRpZgotI2Vsc2UKLXN0YXRpYwotaW50Ci1zY3RwNl9nZXRwZWVy
YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLSNpZmRlZiBJTkVU
Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsK
LSNlbmRpZgotCi0jZW5kaWYKLQlzdHJ1Y3QgaW42cGNiICppbnA2ID0gc290b2luNnBjYihzbyk7
Ci0JaW50IGVycm9yOwotCi0JaWYgKGlucDYgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0J
CXJldHVybiAoRUlOVkFMKTsKLQl9Ci0KLQkvKiBhbGxvdyB2NiBhZGRyZXNzZXMgcHJlY2VkZW5j
ZSAqLwotCWVycm9yID0gc2N0cDZfcGVlcmFkZHIoc28sIG5hbSk7Ci0jaWZkZWYgSU5FVAotCWlm
IChlcnJvcikgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owot
I2Vsc2UKLQkJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwotI2VuZGlmCi0KLQkJLyogdHJ5IHY0
IG5leHQgaWYgdjYgZmFpbGVkICovCi0JCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsK
LQkJaWYgKGVycm9yKSB7Ci0JCQlyZXR1cm4gKGVycm9yKTsKLQkJfQotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQot
CQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCBzaXplb2Yg
KnNpbjYpOwotCQlpZiAoc2luNiA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0ZSRUVfU09OQU1FKCpuYW0p
OwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCWluNl9zaW5fMl92NG1hcHNpbjYoKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOwotCQlTQ1RQX0ZSRUVfU09OQU1FKCpuYW0pOwot
CQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7Ci0jZWxzZQotCQlpbjZfc2luXzJfdjRt
YXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyLCAmc2luNik7Ci0JCVNDVFBfQlVGX0xF
TihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQltZW1jcHkoYWRkciwgJnNp
bjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fUGFuZGFfXykKLQkqbmFtZWxlbiA9IG5hbS0+c2FfbGVuOwotI2VuZGlmCi0J
cmV0dXJuIChlcnJvcik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXN0cnVjdCBwcl91c3JyZXFzIHNj
dHA2X3VzcnJlcXMgPSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkucHJ1X2Fib3J0ID0g
c2N0cDZfYWJvcnQsCi0JLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKLQkucHJ1X2F0dGFjaCA9
IHNjdHA2X2F0dGFjaCwKLQkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAotCS5wcnVfY29ubmVjdCA9
IHNjdHA2X2Nvbm5lY3QsCi0JLnBydV9jb250cm9sID0gaW42X2NvbnRyb2wsCi0jaWYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gNjkwMDAwCi0JLnBydV9jbG9zZSA9IHNjdHA2X2Nsb3NlLAotCS5wcnVf
ZGV0YWNoID0gc2N0cDZfY2xvc2UsCi0JLnBydV9zb3BvbGwgPSBzb3BvbGxfZ2VuZXJpYywKLQku
cHJ1X2ZsdXNoID0gc2N0cF9mbHVzaCwKLSNlbHNlCi0JLnBydV9kZXRhY2ggPSBzY3RwNl9kZXRh
Y2gsCi0JLnBydV9zb3BvbGwgPSBzb3BvbGwsCi0jZW5kaWYKLQkucHJ1X2Rpc2Nvbm5lY3QgPSBz
Y3RwNl9kaXNjb25uZWN0LAotCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCi0JLnBydV9wZWVy
YWRkciA9IHNjdHA2X2dldHBlZXJhZGRyLAotCS5wcnVfc2VuZCA9IHNjdHA2X3NlbmQsCi0JLnBy
dV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCi0JLnBydV9zb2NrYWRkciA9IHNjdHA2X2luNmdl
dGFkZHIsCi0JLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKLQkucHJ1X3NvcmVjZWl2ZSA9IHNj
dHBfc29yZWNlaXZlCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkucHJ1X2Fib3J0ID0gc2N0
cDZfYWJvcnQsCi0JLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKLQkucHJ1X2F0dGFjaCA9IHNj
dHA2X2F0dGFjaCwKLQkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAotCS5wcnVfY29ubmVjdCA9IHNj
dHA2X2Nvbm5lY3QsCi0JLnBydV9jb25uZWN0MiA9IHBydV9jb25uZWN0Ml9ub3RzdXBwLAotCS5w
cnVfY29udHJvbCA9IGluNl9jb250cm9sLAotCS5wcnVfZGV0YWNoID0gc2N0cDZfZGV0YWNoLAot
CS5wcnVfZGlzY29ubmVjdCA9IHNjdHA2X2Rpc2Nvbm5lY3QsCi0JLnBydV9saXN0ZW4gPSBzY3Rw
X2xpc3RlbiwKLQkucHJ1X3BlZXJhZGRyID0gc2N0cDZfZ2V0cGVlcmFkZHIsCi0JLnBydV9yY3Zk
ID0gTlVMTCwKLQkucHJ1X3Jjdm9vYiA9IHBydV9yY3Zvb2Jfbm90c3VwcCwKLQkucHJ1X3NlbmQg
PSBzY3RwNl9zZW5kLAotCS5wcnVfc2Vuc2UgPSBwcnVfc2Vuc2VfbnVsbCwKLQkucHJ1X3NodXRk
b3duID0gc2N0cF9zaHV0ZG93biwKLQkucHJ1X3NvY2thZGRyID0gc2N0cDZfaW42Z2V0YWRkciwK
LQkucHJ1X3Nvc2VuZCA9IHNjdHBfc29zZW5kLAotCS5wcnVfc29yZWNlaXZlID0gc2N0cF9zb3Jl
Y2VpdmUsCi0JLnBydV9zb3BvbGwgPSBzb3BvbGwKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18p
Ci0Jc2N0cDZfYWJvcnQsCi0Jc2N0cF9hY2NlcHQsCi0Jc2N0cDZfYXR0YWNoLAotCXNjdHA2X2Jp
bmQsCi0Jc2N0cDZfY29ubmVjdCwKLQlwcnVfY29ubmVjdDJfbm90c3VwcCwKLQlOVUxMLAotCU5V
TEwsCi0Jc2N0cDZfZGlzY29ubmVjdCwKLQlzY3RwX2xpc3RlbiwKLQlzY3RwNl9nZXRwZWVyYWRk
ciwKLQlOVUxMLAotCXBydV9yY3Zvb2Jfbm90c3VwcCwKLQlOVUxMLAotCXBydV9zZW5zZV9udWxs
LAotCXNjdHBfc2h1dGRvd24sCi0Jc2N0cF9mbHVzaCwKLQlzY3RwNl9pbjZnZXRhZGRyLAotCXNj
dHBfc29zZW5kLAotCXNjdHBfc29yZWNlaXZlLAotCXNvcG9sbF9nZW5lcmljLAotCU5VTEwsCi0J
c2N0cDZfY2xvc2UKLSNlbmRpZgotfTsKLQotI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwNl91c3JyZXEoc28sIHJlcSwgbSwgbmFt
LCBjb250cm9sLCBwKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCByZXE7Ci0Jc3RydWN0IG1i
dWYgKm0sICpuYW0sICpjb250cm9sOwotCXN0cnVjdCBwcm9jICpwOwotewotCWludCBzOwotCWlu
dCBlcnJvciA9IDA7Ci0JaW50IGZhbWlseTsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0JZmFtaWx5ID0g
c28tPnNvX3Byb3RvLT5wcl9kb21haW4tPmRvbV9mYW1pbHk7Ci0KLQlpZiAocmVxID09IFBSVV9D
T05UUk9MKSB7Ci0JCXN3aXRjaCAoZmFtaWx5KSB7Ci0JCWNhc2UgUEZfSU5FVDoKLQkJCWVycm9y
ID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAotCQkJICAgIChzdHJ1Y3Qg
aWZuZXQgKiljb250cm9sCi0JCQkgICAgKTsKLSNpZmRlZiBJTkVUNgotCQljYXNlIFBGX0lORVQ2
OgotCQkJZXJyb3IgPSBpbjZfY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAotCQkJ
ICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sLCBwKTsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNS
UkVRLCBFQUZOT1NVUFBPUlQpOwotCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCX0KLQkJcmV0
dXJuIChlcnJvcik7Ci0JfQotCXN3aXRjaCAocmVxKSB7Ci0JY2FzZSBQUlVfQVRUQUNIOgotCQll
cnJvciA9IHNjdHA2X2F0dGFjaChzbywgZmFtaWx5LCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVf
REVUQUNIOgotCQllcnJvciA9IHNjdHA2X2RldGFjaChzbyk7Ci0JCWJyZWFrOwotCWNhc2UgUFJV
X0JJTkQ6Ci0JCWlmIChuYW0gPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJu
IChFSU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cDZfYmluZChzbywgbmFtLCBwKTsKLQkJYnJl
YWs7Ci0JY2FzZSBQUlVfTElTVEVOOgotCQllcnJvciA9IHNjdHBfbGlzdGVuKHNvLCBwKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBQUlVfQ09OTkVDVDoKLQkJaWYgKG5hbSA9PSBOVUxMKSB7Ci0JCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQkJZXJyb3IgPSBzY3RwNl9jb25u
ZWN0KHNvLCBuYW0sIHApOwotCQlicmVhazsKLQljYXNlIFBSVV9ESVNDT05ORUNUOgotCQllcnJv
ciA9IHNjdHA2X2Rpc2Nvbm5lY3Qoc28pOwotCQlicmVhazsKLQljYXNlIFBSVV9BQ0NFUFQ6Ci0J
CWlmIChuYW0gPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwp
OwotCQl9Ci0JCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7Ci0JCWJyZWFrOwotCWNhc2Ug
UFJVX1NIVVRET1dOOgotCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOwotCQlicmVhazsKLQot
CWNhc2UgUFJVX1JDVkQ6Ci0JCS8qCi0JCSAqIEZvciBPcGVuQlNEIGFuZCBOZXRCU0QsIHRoaXMg
aXMgcmVhbCB1Z2x5LiBUaGUgKG1idWYgKikKLQkJICogbmFtIHRoYXQgaXMgcGFzc2VkIChieSBz
b3JlY2VpdmUoKSkgaXMgdGhlIGludCBmbGFncyBjYXN0Ci0JCSAqIGFzIGEgKG1idWYgKikgeXVj
ayEKLQkJICovCi0JCWVycm9yID0gc2N0cF91c3JfcmVjdmQoc28sIChpbnQpKChsb25nKW5hbSkp
OwotCQlicmVhazsKLQotCWNhc2UgUFJVX1NFTkQ6Ci0JCS8qIEZsYWdzIGFyZSBpZ25vcmVkICov
Ci0JCWVycm9yID0gc2N0cDZfc2VuZChzbywgMCwgbSwgbmFtLCBjb250cm9sLCBwKTsKLQkJYnJl
YWs7Ci0JY2FzZSBQUlVfQUJPUlQ6Ci0JCWVycm9yID0gc2N0cDZfYWJvcnQoc28pOwotCQlicmVh
azsKLQotCWNhc2UgUFJVX1NFTlNFOgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCWNhc2UgUFJV
X1JDVk9PQjoKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOwotCQllcnJvciA9IEVBRk5PU1VQUE9SVDsK
LQkJYnJlYWs7Ci0JY2FzZSBQUlVfU0VORE9PQjoKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOwotCQll
cnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfUEVFUkFERFI6Ci0JCWVy
cm9yID0gc2N0cDZfZ2V0cGVlcmFkZHIoc28sIG5hbSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX1NP
Q0tBRERSOgotCQllcnJvciA9IHNjdHA2X2luNmdldGFkZHIoc28sIG5hbSk7Ci0JCWJyZWFrOwot
CWNhc2UgUFJVX1NMT1dUSU1POgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J
CWJyZWFrOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQ2L3Nj
dHA2X3Zhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZGNhNjg0MTAzZGQ4NzA5
ZmQ5NjYxZTU3NWEzMjlhYjI5MjkwYzg4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zhci5oCisrKyAvZGV2L251
bGwKQEAgLTEsODcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0Ni9zY3RwNl92YXIuaCAz
MTc0NTcgMjAxNy0wNC0yNiAxOToyNjo0MFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVm
IF9ORVRJTkVUNl9TQ1RQNl9WQVJfSF8KLSNkZWZpbmUgX05FVElORVQ2X1NDVFA2X1ZBUl9IXwot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmZGVmIElORVQKLWV4dGVybiB2b2lkIGlu
Nl9zaW42XzJfc2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
OwotZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9zaW5faW5fc29jayhzdHJ1Y3Qgc29ja2FkZHIgKik7
Ci1leHRlcm4gdm9pZCBpbjZfc2luXzJfdjRtYXBzaW42KHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9LRVJO
RUwpCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCAoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQotU1lTQ1RMX0RFQ0woX25ldF9pbmV0Nl9zY3RwNik7Ci1leHRlcm4gc3Ry
dWN0IHByX3VzcnJlcXMgc2N0cDZfdXNycmVxczsKLSNlbHNlCi1pbnQgc2N0cDZfdXNycmVxKHN0
cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qg
bWJ1ZiAqKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi1pbnQgc2N0cDZfaW5w
dXQoc3RydWN0IG1idWYgKiosIGludCAqKTsKLWludCBzY3RwNl9pbnB1dF93aXRoX3BvcnQoc3Ry
dWN0IG1idWYgKiosIGludCAqLCB1aW50MTZfdCk7Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LWludCBzY3RwNl9pbnB1dCAocGFraGFuZGxlX3R5cGUgKik7Ci0jZWxpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMjAwMAotaW50IHNjdHA2X2lucHV0IF9f
UCgoc3RydWN0IG1idWYgKiosIGludCAqLCBpbnQpKTsKLWludCBzY3RwNl9pbnB1dF93aXRoX3Bv
cnQgX19QKChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIHVpbnQxNl90KSk7Ci0jZWxzZQotaW50IHNj
dHA2X2lucHV0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwgaW50KTsKLWludCBzY3RwNl9pbnB1dF93
aXRoX3BvcnQoc3RydWN0IG1idWYgKiosIGludCAqLCB1aW50MTZfdCk7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMjAwMAotaW50IHNj
dHA2X291dHB1dAotX19QKChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1
Y3Qgc29ja2FkZHIgKiwKLSAgICAgc3RydWN0IG1idWYgKiwgc3RydWN0IHByb2MgKikpOwotdm9p
ZCBzY3RwNl9jdGxpbnB1dCBfX1AoKGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKikpOwot
I2Vsc2UKLWludCBzY3RwNl9vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IG1idWYg
Kiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICosIHN0
cnVjdCBwcm9jICopOwotdm9pZCBzY3RwNl9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAq
LCB2b2lkICopOwotI2VuZGlmCi0jaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykpCi1leHRlcm4gdm9pZCBpbjZfc2luXzJfdjRtYXBzaW42KHN0cnVjdCBzb2Nr
YWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotZXh0ZXJuIHZvaWQgaW42X3NpbjZf
Ml9zaW4oc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7Ci1leHRl
cm4gdm9pZCBpbjZfc2luNl8yX3Npbl9pbl9zb2NrKHN0cnVjdCBzb2NrYWRkciAqKTsKLSNlbmRp
Zgotdm9pZCBzY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNi
ICosIHN0cnVjdCBzY3RwX25ldHMgKiwKLSAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQ4
X3QsIHVpbnQzMl90KTsKLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy8uZ2l0YXR0cmlidXRlcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk1YjViOWJhODkyMmQxNTRlZGUxMjg3MGJi
NDdmY2Q1YWMzODgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzCisrKyAvZGV2L251bGwKQEAgLTEs
MTAgKzAsMCBAQAotZGlzY2FyZF9zZXJ2ZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9u
Ci1lY2hvX3NlcnZlci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLWVrcl9jbGllbnQu
YyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1la3JfbG9vcC5jIHN2bi1wcm9wZXJ0aWVz
PWFsbG93LXRhYnM9b24KLWVrcl9sb29wX29mZmxvYWQuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10
YWJzPW9uCi1la3JfcGVlci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLWVrcl9zZXJ2
ZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1ydGN3ZWIuYyBzdm4tcHJvcGVydGll
cz1hbGxvdy10YWJzPW9uCi10ZXN0X3RpbWVyLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1v
bgotdHNjdHAuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL0NNYWtlTGlz
dHMudHh0CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmFi
NGM3ZmRhMzliNzEzZGM4Y2Q0MWVlMDFlNWM5N2QzZWVmMWIwNTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL0NNYWtl
TGlzdHMudHh0CkBAIC0wLDAgKzEsOTkgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTUg
T2xlZyBBbGV4ZWVua292CisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEZlbGl4IFdlaW5yYW5r
CisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisjICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisj
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisj
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisj
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKKworIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJTkNMVURFIE1PRFVMRVMKKyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZShD
aGVja0luY2x1ZGVGaWxlKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMKKyMgQ0hFQ0sgSU5DTFVERVMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtF
X1NPVVJDRV9ESVJ9L3VzcnNjdHBsaWIpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUyBERVBFTkRFTlQKKyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYgKCR7Q01BS0VfU1lTVEVNX05B
TUV9IE1BVENIRVMgIkxpbnV4IikKKwlhZGRfZGVmaW5pdGlvbnMoLURfR05VX1NPVVJDRSkKK2Vu
ZGlmICgpCisKK2lmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEYXJ3aW4iKQorCWFk
ZF9kZWZpbml0aW9ucygtRF9fQVBQTEVfVVNFX1JGQ18yMjkyKQorZW5kaWYgKCkKKworCisjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIE1JU0MKKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZmluZF9w
YWNrYWdlKFRocmVhZHMpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIworIyBQUk9HUkFNUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQoY2hlY2tfcHJvZ3JhbXMKKwljbGllbnQuYworCWRh
eXRpbWVfc2VydmVyLmMKKwlkaXNjYXJkX3NlcnZlci5jCisJZWNob19zZXJ2ZXIuYworCWVrcl9j
bGllbnQuYworCWVrcl9sb29wX29mZmxvYWQuYworCWVrcl9sb29wLmMKKwlla3JfcGVlci5jCisJ
ZWtyX3NlcnZlci5jCisJaHR0cF9jbGllbnQuYworCXJ0Y3dlYi5jCisJdGVzdF9saWJtZ210LmMK
Kwl0ZXN0X3RpbWVyLmMKKwl0c2N0cC5jCispCisKK2ZvcmVhY2ggKHNvdXJjZV9maWxlICR7Y2hl
Y2tfcHJvZ3JhbXN9KQorCWdldF9maWxlbmFtZV9jb21wb25lbnQoc291cmNlX2ZpbGVfd2UgJHtz
b3VyY2VfZmlsZX0gTkFNRV9XRSkKKwlhZGRfZXhlY3V0YWJsZSgKKwkJJHtzb3VyY2VfZmlsZV93
ZX0KKwkJJHtzb3VyY2VfZmlsZX0KKwkpCisKKwl0YXJnZXRfbGlua19saWJyYXJpZXMoJHtzb3Vy
Y2VfZmlsZV93ZX0KKwkJJHtwcm9ncmFtc19saW5rX2xpYnJhcnl9CisJCSR7Q01BS0VfVEhSRUFE
X0xJQlNfSU5JVH0KKwkpCitlbmRmb3JlYWNoICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9NYWtlZmlsZS5hbSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxlLmFtCmluZGV4IGU2
OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjQ1YzI0OGZiYTNlOWM4Njhj
Mzk2YjM3ZjM2MmYwMTFmNjI5MDNiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01h
a2VmaWxlLmFtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEs
NjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyMKKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVj
dCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyMgICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisj
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyMgQVJFIERJ
U0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworQU1fQ1BQRkxBR1MgPSAtSSQoc3JjZGlyKS8u
Li91c3JzY3RwbGliCitFWFRSQV9ESVNUID0gTWFrZWZpbGUubm1ha2UgdHNjdHAuYyBkYXl0aW1l
X3NlcnZlci5jIGRpc2NhcmRfc2VydmVyLmMgZWNob19zZXJ2ZXIuYyBjbGllbnQuYyBydGN3ZWIu
YyBla3JfY2xpZW50LmMgZWtyX3NlcnZlci5jIGVrcl9sb29wLmMgZWtyX2xvb3Bfb2ZmbG9hZC5j
IHRlc3RfbGlibWdtdC5jIGh0dHBfY2xpZW50LmMKKworbm9pbnN0X1BST0dSQU1TID0gdHNjdHAg
ZGF5dGltZV9zZXJ2ZXIgZGlzY2FyZF9zZXJ2ZXIgZWNob19zZXJ2ZXIgY2xpZW50IHJ0Y3dlYiBl
a3JfY2xpZW50IGVrcl9zZXJ2ZXIgZWtyX3BlZXIgZWtyX2xvb3AgZWtyX2xvb3Bfb2ZmbG9hZCB0
ZXN0X2xpYm1nbXQgdGVzdF90aW1lciBodHRwX2NsaWVudAordGVzdF9saWJtZ210X1NPVVJDRVMg
PSB0ZXN0X2xpYm1nbXQuYwordGVzdF9saWJtZ210X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1
c3JzY3RwLmxhCit0ZXN0X3RpbWVyX1NPVVJDRVMgPSB0ZXN0X3RpbWVyLmMKK3Rlc3RfdGltZXJf
TERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK3RzY3RwX1NPVVJDRVMgPSB0c2N0
cC5jCit0c2N0cF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZGF5dGltZV9z
ZXJ2ZXJfU09VUkNFUyA9IGRheXRpbWVfc2VydmVyLmMKK2RheXRpbWVfc2VydmVyX0xEQUREID0g
Li4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitkaXNjYXJkX3NlcnZlcl9TT1VSQ0VTID0gZGlz
Y2FyZF9zZXJ2ZXIuYworZGlzY2FyZF9zZXJ2ZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVz
cnNjdHAubGEKK2VjaG9fc2VydmVyX1NPVVJDRVMgPSBlY2hvX3NlcnZlci5jCitlY2hvX3NlcnZl
cl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorY2xpZW50X1NPVVJDRVMgPSBj
bGllbnQuYworY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitydGN3
ZWJfU09VUkNFUyA9IHJ0Y3dlYi5jCitydGN3ZWJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVz
cnNjdHAubGEKK2Vrcl9zZXJ2ZXJfU09VUkNFUyA9IGVrcl9zZXJ2ZXIuYworZWtyX3NlcnZlcl9M
REFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZWtyX2NsaWVudF9TT1VSQ0VTID0g
ZWtyX2NsaWVudC5jCitla3JfY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3Rw
LmxhCitla3JfcGVlcl9TT1VSQ0VTID0gZWtyX3BlZXIuYworZWtyX3BlZXJfTERBREQgPSAuLi91
c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Vrcl9sb29wX1NPVVJDRVMgPSBla3JfbG9vcC5jCitl
a3JfbG9vcF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZWtyX2xvb3Bfb2Zm
bG9hZF9TT1VSQ0VTID0gZWtyX2xvb3Bfb2ZmbG9hZC5jCitla3JfbG9vcF9vZmZsb2FkX0xEQURE
ID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitodHRwX2NsaWVudF9TT1VSQ0VTID0gaHR0
cF9jbGllbnQuYworaHR0cF9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAu
bGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxlLm5tYWtlIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvcHJvZ3JhbXMvTWFrZWZpbGUubm1ha2UKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFl
Nzc1YWQ4YzJlNDhjNTM5MS4uMDFjNDExY2VmNjg5ZWI4OGI5OGI0ZmY2OGZlYjQwZjliNGY4MzY0
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUubm1ha2UKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUubm1ha2UKQEAgLTAsMCArMSwxMjYgQEAKKyMNCisjIENv
cHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuDQorIw0KKyMgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4NCisjDQorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyMgYXJlIG1ldDoNCisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuDQorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0K
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4NCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorIyAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisj
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyMNCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5EDQorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorIyBB
UkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQ0KKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisjIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQor
IyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikNCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorIyBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
DQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GDQorIyBTVUNIIERBTUFHRS4NCisjDQorDQorQ0ZMQUdTPS9XMyAv
V1ggL0kuLlx1c3JzY3RwbGliDQorDQorQ1ZBUlNETEw9LURJTkVUIC1ESU5FVDYNCisNCitMSU5L
RkxBR1M9L0xJQlBBVEg6Li5cdXNyc2N0cGxpYiB1c3JzY3RwLmxpYg0KKw0KKy5jLm9iajo6DQor
CSQoQ0MpICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtRmQuXCAtYyAkPA0KKw0KK2FsbDogXA0KKwlj
bGllbnQgXA0KKwlkYXl0aW1lX3NlcnZlciBcDQorCWRpc2NhcmRfc2VydmVyIFwNCisJZWNob19z
ZXJ2ZXIgXA0KKwl0c2N0cCBcDQorCXJ0Y3dlYiBcDQorCWVrcl9jbGllbnQgXA0KKwlla3Jfc2Vy
dmVyIFwNCisJZWtyX3BlZXIgXA0KKwlla3JfbG9vcCBcDQorCXRlc3RfbGlibWdtdCBcDQorCWh0
dHBfY2xpZW50DQorDQorY2xpZW50Og0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMg
Y2xpZW50LmMNCisJbGluayAtb3V0OmNsaWVudC5leGUgY2xpZW50Lm9iaiAkKExJTktGTEFHUykN
CisNCitkYXl0aW1lX3NlcnZlcjoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGRh
eXRpbWVfc2VydmVyLmMNCisJbGluayAtb3V0OmRheXRpbWVfc2VydmVyLmV4ZSBkYXl0aW1lX3Nl
cnZlci5vYmogJChMSU5LRkxBR1MpDQorDQorZGlzY2FyZF9zZXJ2ZXI6DQorCSQoQ0MpICQoQ0ZM
QUdTKSAkKENWQVJTRExMKSAtYyBkaXNjYXJkX3NlcnZlci5jDQorCWxpbmsgLW91dDpkaXNjYXJk
X3NlcnZlci5leGUgZGlzY2FyZF9zZXJ2ZXIub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2VjaG9fc2Vy
dmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWNob19zZXJ2ZXIuYw0KKwls
aW5rIC1vdXQ6ZWNob19zZXJ2ZXIuZXhlIGVjaG9fc2VydmVyLm9iaiAkKExJTktGTEFHUykNCisN
Cit0c2N0cDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIHRzY3RwLmMNCisJbGlu
ayAtb3V0OnRzY3RwLmV4ZSB0c2N0cC5vYmogJChMSU5LRkxBR1MpDQorDQorcnRjd2ViOg0KKwkk
KENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgcnRjd2ViLmMNCisJbGluayAtb3V0OnJ0Y3dl
Yi5leGUgcnRjd2ViLm9iaiAkKExJTktGTEFHUykNCisNCitla3JfY2xpZW50Og0KKwkkKENDKSAk
KENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX2NsaWVudC5jDQorCWxpbmsgLW91dDpla3JfY2xp
ZW50LmV4ZSBla3JfY2xpZW50Lm9iaiAkKExJTktGTEFHUykNCisNCitla3Jfc2VydmVyOg0KKwkk
KENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX3NlcnZlci5jDQorCWxpbmsgLW91dDpl
a3Jfc2VydmVyLmV4ZSBla3Jfc2VydmVyLm9iaiAkKExJTktGTEFHUykNCisNCitla3JfcGVlcjoN
CisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9wZWVyLmMNCisJbGluayAtb3V0
OmVrcl9wZWVyLmV4ZSBla3JfcGVlci5vYmogJChMSU5LRkxBR1MpDQorDQorZWtyX2xvb3A6DQor
CSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBla3JfbG9vcC5jDQorCWxpbmsgLW91dDpl
a3JfbG9vcC5leGUgZWtyX2xvb3Aub2JqICQoTElOS0ZMQUdTKQ0KKw0KK3Rlc3RfbGlibWdtdDoN
CisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIHRlc3RfbGlibWdtdC5jDQorCWxpbmsg
LW91dDp0ZXN0X2xpYm1nbXQuZXhlIHRlc3RfbGlibWdtdC5vYmogJChMSU5LRkxBR1MpDQorDQor
aHR0cF9jbGllbnQ6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBodHRwX2NsaWVu
dC5jDQorCWxpbmsgLW91dDpodHRwX2NsaWVudC5leGUgaHR0cF9jbGllbnQub2JqICQoTElOS0ZM
QUdTKQ0KKw0KK2NsZWFuOg0KKwlkZWwgL0YgY2xpZW50LmV4ZQ0KKwlkZWwgL0YgY2xpZW50Lm9i
ag0KKwlkZWwgL0YgZGF5dGltZV9zZXJ2ZXIuZXhlDQorCWRlbCAvRiBkYXl0aW1lX3NlcnZlci5v
YmoNCisJZGVsIC9GIGRpc2NhcmRfc2VydmVyLmV4ZQ0KKwlkZWwgL0YgZGlzY2FyZF9zZXJ2ZXIu
b2JqDQorCWRlbCAvRiBlY2hvX3NlcnZlci5leGUNCisJZGVsIC9GIGVjaG9fc2VydmVyLm9iag0K
KwlkZWwgL0YgdHNjdHAuZXhlDQorCWRlbCAvRiB0c2N0cC5vYmoNCisJZGVsIC9GIHJ0Y3dlYi5l
eGUNCisJZGVsIC9GIHJ0Y3dlYi5vYmoNCisJZGVsIC9GIGVrcl9jbGllbnQuZXhlDQorCWRlbCAv
RiBla3JfY2xpZW50Lm9iag0KKwlkZWwgL0YgZWtyX3NlcnZlci5leGUNCisJZGVsIC9GIGVrcl9z
ZXJ2ZXIub2JqDQorCWRlbCAvRiBla3JfcGVlci5leGUNCisJZGVsIC9GIGVrcl9wZWVyLm9iag0K
KwlkZWwgL0YgZWtyX2xvb3AuZXhlDQorCWRlbCAvRiBla3JfbG9vcC5vYmoNCisJZGVsIC9GIHRl
c3RfbGlibWdtdC5leGUNCisJZGVsIC9GIHRlc3RfbGlibWdtdC5vYmoNCisJZGVsIC9GIGh0dHBf
Y2xpZW50LmV4ZQ0KKwlkZWwgL0YgaHR0cF9jbGllbnQub2JqDQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvcHJvZ3JhbXMvY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnQuYwppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4xZmU3NTc5MWRlMmZmYzdk
YmUyZmNkNTIyYTZjNTBiOGM3YThmYWFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9j
bGllbnQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnQuYwpAQCAtMCwwICsxLDUwMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisv
KgorICogVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0g
W2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQorICovCisKKyNpZmRlZiBf
V0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vu
ZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0
Lmg+CisjZWxzZQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+
CisKK2ludCBkb25lID0gMDsKKworI2lmZGVmIF9XSU4zMgordHlwZWRlZiBjaGFyKiBjYWRkcl90
OworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2ZW50
KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjKQoreworCXVuc2lnbmVkIGludCBpLCBuOwor
CisJcHJpbnRmKCJBc3NvY2lhdGlvbiBjaGFuZ2UgIik7CisJc3dpdGNoIChzYWMtPnNhY19zdGF0
ZSkgeworCWNhc2UgU0NUUF9DT01NX1VQOgorCQlwcmludGYoIlNDVFBfQ09NTV9VUCIpOworCQli
cmVhazsKKwljYXNlIFNDVFBfQ09NTV9MT1NUOgorCQlwcmludGYoIlNDVFBfQ09NTV9MT1NUIik7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9SRVNUQVJUOgorCQlwcmludGYoIlNDVFBfUkVTVEFSVCIp
OworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fQ09NUDoKKwkJcHJpbnRmKCJTQ1RQX1NI
VVRET1dOX0NPTVAiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NBTlRfU1RSX0FTU09DOgorCQlw
cmludGYoIlNDVFBfQ0FOVF9TVFJfQVNTT0MiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJp
bnRmKCJVTktOT1dOIik7CisJCWJyZWFrOworCX0KKwlwcmludGYoIiwgc3RyZWFtcyAoaW4vb3V0
KSA9ICgldS8ldSkiLAorCSAgICAgICBzYWMtPnNhY19pbmJvdW5kX3N0cmVhbXMsIHNhYy0+c2Fj
X291dGJvdW5kX3N0cmVhbXMpOworCW4gPSBzYWMtPnNhY19sZW5ndGggLSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNzb2NfY2hhbmdlKTsKKwlpZiAoKChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NPTU1f
VVApIHx8CisJICAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9SRVNUQVJUKSkgJiYgKG4gPiAw
KSkgeworCQlwcmludGYoIiwgc3VwcG9ydHMiKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykg
eworCQkJc3dpdGNoIChzYWMtPnNhY19pbmZvW2ldKSB7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQ
UE9SVFNfUFI6CisJCQkJcHJpbnRmKCIgUFIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9B
U1NPQ19TVVBQT1JUU19BVVRIOgorCQkJCXByaW50ZigiIEFVVEgiKTsKKwkJCQlicmVhazsKKwkJ
CWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19BU0NPTkY6CisJCQkJcHJpbnRmKCIgQVNDT05GIik7
CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfTVVMVElCVUY6CisJCQkJ
cHJpbnRmKCIgTVVMVElCVUYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQ
T1JUU19SRV9DT05GSUc6CisJCQkJcHJpbnRmKCIgUkUtQ09ORklHIik7CisJCQkJYnJlYWs7CisJ
CQlkZWZhdWx0OgorCQkJCXByaW50ZigiIFVOS05PV04oMHglMDJ4KSIsIHNhYy0+c2FjX2luZm9b
aV0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIGlmICgoKHNhYy0+c2FjX3N0YXRl
ID09IFNDVFBfQ09NTV9MT1NUKSB8fAorCSAgICAgICAgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBT
Q1RQX0NBTlRfU1RSX0FTU09DKSkgJiYgKG4gPiAwKSkgeworCQlwcmludGYoIiwgQUJPUlQgPSIp
OworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYoIiAweCUwMngiLCBzYWMt
PnNhY19pbmZvW2ldKTsKKwkJfQorCX0KKwlwcmludGYoIi5cbiIpOworCWlmICgoc2FjLT5zYWNf
c3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykgfHwKKwkgICAgKHNhYy0+c2FjX3N0YXRlID09
IFNDVFBfU0hVVERPV05fQ09NUCkgfHwKKwkgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09N
TV9MT1NUKSkgeworCQlleGl0KDApOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCito
YW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9ldmVudChzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2Ug
KnNwYykKK3sKKwljaGFyIGFkZHJfYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCWNvbnN0IGNoYXIg
KmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwlzd2l0Y2ggKHNwYy0+c3Bj
X2FhZGRyLnNzX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJc2luID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVULCAm
c2luLT5zaW5fYWRkciwgYWRkcl9idWYsIElORVRfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWNh
c2UgQUZfSU5FVDY6CisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGMtPnNwY19h
YWRkcjsKKwkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYWRk
cl9idWYsIElORVQ2X0FERFJTVFJMRU4pOworCQlicmVhazsKKwljYXNlIEFGX0NPTk46CisJCXNj
b25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJnNwYy0+c3BjX2FhZGRyOworI2lmZGVmIF9X
SU4zMgorCQlfc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIHNjb25u
LT5zY29ubl9hZGRyKTsKKyNlbHNlCisJCXNucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RS
TEVOLCAiJXAiLCBzY29ubi0+c2Nvbm5fYWRkcik7CisjZW5kaWYKKwkJYWRkciA9IGFkZHJfYnVm
OworCQlicmVhazsKKwlkZWZhdWx0OgorI2lmZGVmIF9XSU4zMgorCQlfc25wcmludGYoYWRkcl9i
dWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2FhZGRy
LnNzX2ZhbWlseSk7CisjZWxzZQorCQlzbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxF
TiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKKyNlbmRp
ZgorCQlhZGRyID0gYWRkcl9idWY7CisJCWJyZWFrOworCX0KKwlwcmludGYoIlBlZXIgYWRkcmVz
cyAlcyBpcyBub3cgIiwgYWRkcik7CisJc3dpdGNoIChzcGMtPnNwY19zdGF0ZSkgeworCWNhc2Ug
U0NUUF9BRERSX0FWQUlMQUJMRToKKwkJcHJpbnRmKCJTQ1RQX0FERFJfQVZBSUxBQkxFIik7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1VOUkVBQ0hBQkxFOgorCQlwcmludGYoIlNDVFBfQURE
Ul9VTlJFQUNIQUJMRSIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQUREUl9SRU1PVkVEOgorCQlw
cmludGYoIlNDVFBfQUREUl9SRU1PVkVEIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX0FE
REVEOgorCQlwcmludGYoIlNDVFBfQUREUl9BRERFRCIpOworCQlicmVhazsKKwljYXNlIFNDVFBf
QUREUl9NQURFX1BSSU06CisJCXByaW50ZigiU0NUUF9BRERSX01BREVfUFJJTSIpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQUREUl9DT05GSVJNRUQ6CisJCXByaW50ZigiU0NUUF9BRERSX0NPTkZJ
Uk1FRCIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV04iKTsKKwkJYnJl
YWs7CisJfQorCXByaW50ZigiIChlcnJvciA9IDB4JTA4eCkuXG4iLCBzcGMtPnNwY19lcnJvcik7
CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3NlbmRfZmFpbGVkX2V2ZW50KHN0
cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICpzc2ZlKQoreworCXNpemVfdCBpLCBuOworCisJ
aWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5TRU5UKSB7CisJCXByaW50ZigiVW5z
ZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9TRU5UKSB7CisJ
CXByaW50ZigiU2VudCAiKTsKKwl9CisJaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiB+KFNDVFBfREFU
QV9TRU5UIHwgU0NUUF9EQVRBX1VOU0VOVCkpIHsKKwkJcHJpbnRmKCIoZmxhZ3MgPSAleCkgIiwg
c3NmZS0+c3NmZV9mbGFncyk7CisJfQorCXByaW50ZigibWVzc2FnZSB3aXRoIFBQSUQgPSAldSwg
U0lEID0gJXUsIGZsYWdzOiAweCUwNHggZHVlIHRvIGVycm9yID0gMHglMDh4IiwKKwkgICAgICAg
bnRvaGwoc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkKSwgc3NmZS0+c3NmZV9pbmZvLnNuZF9zaWQs
CisJICAgICAgIHNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MsIHNzZmUtPnNzZmVfZXJyb3IpOwor
CW4gPSBzc2ZlLT5zc2ZlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9l
dmVudCk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlwcmludGYoIiAweCUwMngiLCBz
c2ZlLT5zc2ZlX2RhdGFbaV0pOworCX0KKwlwcmludGYoIi5cbiIpOworCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV9ub3RpZmljYXRpb24odW5pb24gc2N0cF9ub3RpZmljYXRpb24g
Km5vdGlmLCBzaXplX3QgbikKK3sKKwlpZiAobm90aWYtPnNuX2hlYWRlci5zbl9sZW5ndGggIT0g
KHVpbnQzMl90KW4pIHsKKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKG5vdGlmLT5zbl9oZWFkZXIu
c25fdHlwZSkgeworCWNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6CisJCWhhbmRsZV9hc3NvY2lhdGlv
bl9jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fYXNzb2NfY2hhbmdlKSk7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9QRUVSX0FERFJfQ0hBTkdFOgorCQloYW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9l
dmVudCgmKG5vdGlmLT5zbl9wYWRkcl9jaGFuZ2UpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JF
TU9URV9FUlJPUjoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOX0VWRU5UOgorCQlicmVh
azsKKwljYXNlIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQlicmVhazsKKwljYXNlIFND
VFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FVVEhFTlRJ
Q0FUSU9OX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfU0VOREVSX0RSWV9FVkVOVDoKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9FVkVOVDoKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UOgorCQloYW5kbGVfc2VuZF9mYWlsZWRfZXZl
bnQoJihub3RpZi0+c25fc2VuZF9mYWlsZWRfZXZlbnQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1NUUkVBTV9SRVNFVF9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FTU09DX1JFU0VUX0VW
RU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDoKKwkJYnJlYWs7
CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEs
CisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50
IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRvbmUg
PSAxOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0gZWxzZSB7CisJCWlmIChmbGFncyAmIE1T
R19OT1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24oKHVuaW9uIHNjdHBfbm90
aWZpY2F0aW9uICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJ
CQlfd3JpdGUoX2ZpbGVubyhzdGRvdXQpLCBkYXRhLCAodW5zaWduZWQgaW50KWRhdGFsZW4pOwor
I2Vsc2UKKwkJCWlmICh3cml0ZShmaWxlbm8oc3Rkb3V0KSwgZGF0YSwgZGF0YWxlbikgPCAwKSB7
CisJCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJfQorI2VuZGlmCisJCX0KKwkJZnJlZShkYXRhKTsK
Kwl9CisJcmV0dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZv
cm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2
cHJpbnRmKGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJn
YywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2th
ZGRyICphZGRyLCAqYWRkcnM7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVjdCBz
b2NrYWRkcl9pbjYgYWRkcjY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1
Y3Qgc2N0cHN0YXQgc3RhdDsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBl
dmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9TRU5EX0ZBSUxFRF9FVkVOVH07CisJY2hhciBidWZmZXJbODBdOworCXVuc2lnbmVkIGlu
dCBpOworCWludCBuOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50ZigiJXMiLCAiVXNhZ2U6
IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBsb2NhbF9wb3J0IGxvY2FsX2VuY2Fwc19w
b3J0IHJlbW90ZV9lbmNhcHNfcG9ydFxuIik7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoYXJn
YyA+IDQpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndls0XSksIE5VTEwsIGRlYnVnX3ByaW50
Zik7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zik7
CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19v
bihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxh
Y2tob2xlKDIpOworCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NU
UkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkg
eworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCW1lbXNldCgmZXZlbnQsIDAsIHNp
emVvZihldmVudCkpOworCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisJZXZl
bnQuc2Vfb24gPSAxOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVv
Zih1aW50MTZfdCk7IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJ
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAm
ZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBf
RVZFTlQiKTsKKwkJfQorCX0KKwlpZiAoYXJnYyA+IDMpIHsKKwkJbWVtc2V0KCh2b2lkICopJmFk
ZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9M
RU4KKwkJYWRkcjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwkJYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkJYWRkcjYuc2luNl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCWFkZHI2LnNpbjZfYWRkciA9IGluNmFkZHJfYW55Owor
CQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisJCQlwZXJyb3IoImJpbmQiKTsKKwkJfQor
CX0KKwlpZiAoYXJnYyA+IDUpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lO
RVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNV0pKTsKKwkJaWYgKHVz
cnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNB
UFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCX0KKwl9
CisJbWVtc2V0KCh2b2lkICopJmFkZHI0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisJbWVtc2V0KCh2b2lkICopJmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
OworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWFkZHI0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyNi5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCWFkZHI0LnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworCWFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJYWRkcjQuc2lu
X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlhZGRyNi5zaW42X3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBhcmd2WzFdLCAmYWRkcjYu
c2luNl9hZGRyKSA9PSAxKSB7CisJCWlmICh1c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBz
b2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJ
CXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCX0KKwl9IGVsc2UgaWYgKGluZXRfcHRvbihB
Rl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsKKwkJaWYgKHVzcnNjdHBf
Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0LCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCQl9CisJ
fSBlbHNlIHsKKwkJcHJpbnRmKCJJbGxlZ2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MuXG4iKTsKKwl9
CisJaWYgKChuID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFkZHJzKSkgPCAwKSB7CisJ
CXBlcnJvcigidXNyc2N0cF9nZXRsYWRkcnMiKTsKKwl9IGVsc2UgeworCQlhZGRyID0gYWRkcnM7
CisJCXByaW50ZigiTG9jYWwgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8ICh1bnNp
Z25lZCBpbnQpbjsgaSsrKSB7CisJCQlpZiAoaSA+IDApIHsKKwkJCQlwcmludGYoIiVzIiwgIiwg
Iik7CisJCQl9CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCQkJY2FzZSBBRl9JTkVU
OgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCWNoYXIgYnVmW0lORVRf
QUREUlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+
c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7
CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNh
ZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNlbmRpZgorCQkJCWJy
ZWFrOworCQkJfQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNo
YXIgKm5hbWU7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJ
CW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZf
QUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lmbmRlZiBIQVZFX1NBX0xF
TgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZh
dWx0OgorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKyNlbmRpZgor
CQl9CisJCXByaW50ZigiLlxuIik7CisJCXVzcnNjdHBfZnJlZWxhZGRycyhhZGRycyk7CisJfQor
CWlmICgobiA9IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ssIDAsICZhZGRycykpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfZ2V0cGFkZHJzIik7CisJfSBlbHNlIHsKKwkJYWRkciA9IGFkZHJzOwor
CQlwcmludGYoIlBlZXIgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChpID0gMDsgaSA8ICh1bnNpZ25l
ZCBpbnQpbjsgaSsrKSB7CisJCQlpZiAoaSA+IDApIHsKKwkJCQlwcmludGYoIiVzIiwgIiwgIik7
CisJCQl9CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCQkJY2FzZSBBRl9JTkVUOgor
CQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCWNoYXIgYnVmW0lORVRfQURE
UlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNpbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2lu
X2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYoIiVzIiwgbmFtZSk7Cisj
aWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRy
X3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNlbmRpZgorCQkJCWJyZWFr
OworCQkJfQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OworCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJCWNvbnN0IGNoYXIg
Km5hbWU7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJCW5h
bWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQURE
UlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lmbmRlZiBIQVZFX1NBX0xFTgor
CQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJCQkJYnJlYWs7CisJCQl9CisJCQlkZWZhdWx0
OgorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlhZGRyID0gKHN0cnVj
dCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKyNlbmRpZgorCQl9
CisJCXByaW50ZigiLlxuIik7CisJCXVzcnNjdHBfZnJlZXBhZGRycyhhZGRycyk7CisJfQorCXdo
aWxlICgoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pICE9IE5VTEwpICYmICFk
b25lKSB7CisJCXVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVM
TCwgMCwgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lORk8sIDApOworCX0KKwlpZiAoIWRvbmUpIHsK
KwkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9XUikgPCAwKSB7CisJCQlwZXJyb3Io
InVzcnNjdHBfc2h1dGRvd24iKTsKKwkJfQorCX0KKwl3aGlsZSAoIWRvbmUpIHsKKyNpZmRlZiBf
V0lOMzIKKwkJU2xlZXAoMSAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9
CisJdXNyc2N0cF9nZXRfc3RhdCgmc3RhdCk7CisJcHJpbnRmKCJOdW1iZXIgb2YgcGFja2V0cyAo
c2VudC9yZWNlaXZlZCk6ICgldS8ldSkuXG4iLAorCSAgICAgICBzdGF0LnNjdHBzX291dHBhY2tl
dHMsIHN0YXQuc2N0cHNfaW5wYWNrZXRzKTsKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAw
KSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEp
OworI2VuZGlmCisJfQorCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL2RhdGFjaGFuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXRhY2hhbi5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1
MzkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9kYXRhY2hhbl9zZXJ2LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9k
YXRhY2hhbl9zZXJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2RheXRpbWVfc2Vy
dmVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlci5jCmluZGV4IGU2OWRlMjli
YjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjM1Y2FkZjUzZDExOTAzZTFkOTRhZjgy
OTVjYTFmMjAyNzU2YjcyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2RheXRpbWVf
c2VydmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGF5dGltZV9zZXJ2ZXIuYwpAQCAtMCww
ICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1pY2hhZWwgVHVleGVu
CisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhl
IG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisg
KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pF
Q1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK
KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K
KyAqLworCisvKgorICogVXNhZ2U6IGRheXRpbWVfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydF0g
W3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqIAorICogRXhhbXBsZQorICogU2VydmVyOiAkIC4vZGF5
dGltZV9zZXJ2ZXIgMTExMTEgMjIyMjIKKyAqIENsaWVudDogJCAuL2NsaWVudCAxMjcuMC4wLjEg
MTMgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNV
UkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Rk
bGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0
cC5oPgorCisjZGVmaW5lIFBPUlQgMTMKKyNkZWZpbmUgREFZVElNRV9QUElEIDQwCisjZGVmaW5l
IFNMRUVQIDEKKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQor
eworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZvcm1h
dCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJn
dltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2ssICpjb25uX3NvY2s7CisJc3RydWN0IHNvY2th
ZGRyX2luIGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzb2NrbGVuX3Qg
YWRkcl9sZW47CisJY2hhciBidWZmZXJbODBdOworCXRpbWVfdCBub3c7CisJc3RydWN0IHNjdHBf
c25kaW5mbyBzbmRpbmZvOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5pdChhdG9p
KGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5p
dCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKKyNlbmRpZgor
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKworCWlmICgoc29jayA9IHVz
cnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIE5VTEwsIE5V
TEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9
CisJaWYgKGFyZ2MgPiAyKSB7CisJCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVU
OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNj
dHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNf
UE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCX0KKwl9CisJ
bWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNp
ZmRlZiBIQVZFX1NJTl9MRU4KKwlhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKKyNlbmRpZgorCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkci5zaW5fcG9y
dCA9IGh0b25zKFBPUlQpOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FO
WSk7CisJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQi
KTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQlwZXJyb3IoInVz
cnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7CisJCWFkZHJfbGVuID0gMDsKKwkJaWYg
KChjb25uX3NvY2sgPSB1c3JzY3RwX2FjY2VwdChzb2NrLCBOVUxMLCAmYWRkcl9sZW4pKSA9PSBO
VUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorCQl0aW1lKCZub3cpOworI2lmZGVmIF9XSU4zMgor
CQlfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwgY3RpbWUoJm5vdykpOwor
I2Vsc2UKKwkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwgY3RpbWUoJm5v
dykpOworI2VuZGlmCisJCXNuZGluZm8uc25kX3NpZCA9IDA7CisJCXNuZGluZm8uc25kX2ZsYWdz
ID0gMDsKKwkJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBWVRJTUVfUFBJRCk7CisJCXNuZGlu
Zm8uc25kX2NvbnRleHQgPSAwOworCQlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7CisJCWlmICh1
c3JzY3RwX3NlbmR2KGNvbm5fc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwg
KHZvaWQgKikmc25kaW5mbywKKwkJICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQlw
ZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJfQorCQl1c3JzY3RwX2Nsb3NlKGNvbm5fc29jayk7
CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0g
MCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDApOworI2Vsc2UKKwkJc2xl
ZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGlzY2Fy
ZF9zZXJ2ZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
Li4zOTg0NmRkZWQwNGI5OTA5YTE4YzM0MDNiNjhlYjZhYjY3ZGJkMDUzIDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1z
L2Rpc2NhcmRfc2VydmVyLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBkaXNjYXJkX3Nl
cnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKiAKKyAqIEV4
YW1wbGUKKyAqIFNlcnZlcjogJCAuL2Rpc2NhcmRfc2VydmVyIDExMTExIDIyMjIyCisgKiBDbGll
bnQ6ICQgLi9jbGllbnQgMTI3LjAuMC4xIDkgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRlZiBf
V0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j
bHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgor
I2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1
c3JzY3RwLmg+CisKKyNkZWZpbmUgUE9SVCA5CisjZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCisj
ZGVmaW5lIFNMRUVQIDEKKworY29uc3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQKK3Jl
Y2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwg
dm9pZCAqZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3Jjdmlu
Zm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWNoYXIgbmFtZWJ1ZltJTkVU
Nl9BRERSU1RSTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQxNl90IHBvcnQ7CisKKwlp
ZiAoZGF0YSkgeworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQlwcmludGYo
Ik5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4pOwor
CQl9IGVsc2UgeworCQkJc3dpdGNoIChhZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwkJCWNhc2UgQUZfSU5FVDoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLnNp
bi5zaW5fYWRkciwgbmFtZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwb3J0ID0gbnRvaHMo
YWRkci5zaW4uc2luX3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJ
CWNhc2UgQUZfSU5FVDY6CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2lu
Ni5zaW42X2FkZHIsIG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4pLAorCQkJCXBvcnQgPSBudG9o
cyhhZGRyLnNpbjYuc2luNl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBRl9D
T05OOgorI2lmZGVmIF9XSU4zMgorCQkJCV9zbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RS
TEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpOworI2Vsc2UKKwkJCQlzbnByaW50Zihu
YW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpOwor
I2VuZGlmCisJCQkJbmFtZSA9IG5hbWVidWY7CisJCQkJcG9ydCA9IG50b2hzKGFkZHIuc2Nvbm4u
c2Nvbm5fcG9ydCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSBOVUxMOwor
CQkJCXBvcnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04g
JXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpZGF0YWxlbiwKKwkJ
CSAgICAgICBuYW1lLAorCQkJICAgICAgIHBvcnQsCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJ
CQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAg
bnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9CisJ
CWZyZWUoZGF0YSk7CisJfQorCXJldHVybiAoMSk7Cit9CisKK3ZvaWQKK2RlYnVnX3ByaW50Zihj
b25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAs
IGZvcm1hdCk7CisJdnByaW50Zihmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCitpbnQK
K21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBz
OworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7
U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BFRVJf
QUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9FUlJP
UiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCisJICAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07CisJdW5z
aWduZWQgaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJY29uc3QgaW50IG9u
ID0gMTsKKwlzc2l6ZV90IG47CisJaW50IGZsYWdzOworCXNvY2tsZW5fdCBmcm9tX2xlbjsKKwlj
aGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07CisJY2hhciBuYW1lW0lORVQ2X0FERFJTVFJMRU5dOwor
CXNvY2tsZW5fdCBpbmZvbGVuOworCXN0cnVjdCBzY3RwX3JjdmluZm8gcmN2X2luZm87CisJdW5z
aWduZWQgaW50IGluZm90eXBlOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVzcnNjdHBfaW5pdChh
dG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0gZWxzZSB7CisJCXVzcnNjdHBf
aW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJ
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlm
CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCisJaWYgKChzb2NrID0g
dXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsIHVz
ZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAoY29uc3Qgdm9pZCopJm9u
LCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNv
Y2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIiKTsKKwl9CisJbWVtc2V0KCZhdiwgMCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSk7CisJYXYuYXNzb2NfaWQgPSBTQ1RQX0FM
TF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IDQ3OworCisJaWYgKHVzcnNjdHBfc2V0c29ja29w
dChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0IHZvaWQqKSZhdiwgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9DT05URVhUIik7CisJfQorCWlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZPLCAmb24sIHNpemVv
ZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRUNWUkNW
SU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWls
eSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsK
KwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RF
X1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNv
Y2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0KKwl9CisJbWVtc2V0KCZl
dmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVS
RV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8ICh1bnNpZ25lZCBp
bnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7IGkrKykgeworCQlldmVu
dC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9l
dmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9FVkVOVCIp
OworCQl9CisJfQorCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyLnNpbjZfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkci5zaW42X2ZhbWlseSA9IEFGX0lO
RVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJYWRkci5zaW42X2FkZHIgPSBp
bjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikm
YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7CisJCWlmICh1c2VfY2Ip
IHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKFNMRUVQICogMTAwMCk7CisjZWxzZQorCQkJc2xl
ZXAoU0xFRVApOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qp
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJZmxhZ3MgPSAwOworCQkJaW5mb2xlbiA9
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOworCQkJbiA9IHVzcnNjdHBf
cmVjdnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIg
KikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCisJCQkgICAgICAgICAgICAg
ICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworCQkJaWYgKG4gPiAwKSB7CisJCQkJ
aWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCQlwcmludGYoIk5vdGlmaWNhdGlv
biBvZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgewor
CQkJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBz
dHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29t
cGxldGUgJWQuXG4iLAorCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCisJCQkJ
CQkgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVU
Nl9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAorCQkJCQkJICAgICAgICByY3Zf
aW5mby5yY3Zfc2lkLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAorCQkJCQkJICAg
ICAgICByY3ZfaW5mby5yY3ZfdHNuLAorCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3Zf
cHBpZCksCisJCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAorCQkJCQkJICAgICAg
ICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByaW50
ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRlICVkLlxu
IiwKKwkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAorCQkJCQkJICAgICAgICBp
bmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNUUkxF
TiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKKwkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VP
UikgPyAxIDogMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUgKHVzcnNjdHBfZmluaXNo
KCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDApOworI2Vsc2UK
KwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWNo
b19zZXJ2ZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
Li42NGYxMmM1NmQ5OTEyYTQ4N2JkMGI2Zjc5ZTA4OGMzNzM5MTRhY2E4IDEwMDY0NAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vj
aG9fc2VydmVyLmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEt
MjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlO
IE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisg
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBlY2hvX3NlcnZlciBbbG9j
YWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKiAKKyAqIEV4YW1wbGUKKyAq
IFNlcnZlcjogJCAuL2VjaG9fc2VydmVyIDExMTExIDIyMjIyCisgKiBDbGllbnQ6ICQgLi9jbGll
bnQgMTI3LjAuMC4xIDcgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZp
bmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJn
Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVu
aXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+
CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisK
KyNkZWZpbmUgUE9SVCA3CisjZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCisjZGVmaW5lIFNMRUVQ
IDEKKworY29uc3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3Ry
dWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwK
KyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQg
ZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWNoYXIgbmFtZWJ1ZltJTkVUNl9BRERSU1RSTEVO
XTsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQxNl90IHBvcnQ7CisKKwlpZiAoZGF0YSkgewor
CQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQlwcmludGYoIk5vdGlmaWNhdGlv
biBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4pOworCQl9IGVsc2Ugewor
CQkJc3dpdGNoIChhZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZf
SU5FVDoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZhZGRyLnNpbi5zaW5fYWRkciwg
bmFtZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwb3J0ID0gbnRvaHMoYWRkci5zaW4uc2lu
X3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5F
VDY6CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNi5zaW42X2FkZHIs
IG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4pLAorCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNpbjYu
c2luNl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBBRl9DT05OOgorI2lmZGVm
IF9XSU4zMgorCQkJCV9zbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBh
ZGRyLnNjb25uLnNjb25uX2FkZHIpOworI2Vsc2UKKwkJCQlzbnByaW50ZihuYW1lYnVmLCBJTkVU
Nl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpOworI2VuZGlmCisJCQkJ
bmFtZSA9IG5hbWVidWY7CisJCQkJcG9ydCA9IG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCk7
CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSBOVUxMOworCQkJCXBvcnQgPSAw
OworCQkJCWJyZWFrOworCQkJfQorCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVk
IGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJXUs
IGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpZGF0YWxlbiwKKwkJCSAgICAgICBuYW1l
LAorCQkJICAgICAgIHBvcnQsCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2
LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAgbnRvaGwocmN2LnJj
dl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQkJaWYgKGZsYWdzICYgTVNH
X0VPUikgeworCQkJCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kX2luZm87CisKKwkJCQlzbmRfaW5m
by5zbmRfc2lkID0gcmN2LnJjdl9zaWQ7CisJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsKKwkJ
CQlpZiAocmN2LnJjdl9mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCXNuZF9pbmZvLnNu
ZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCQl9CisJCQkJc25kX2luZm8uc25kX3BwaWQg
PSByY3YucmN2X3BwaWQ7CisJCQkJc25kX2luZm8uc25kX2NvbnRleHQgPSAwOworCQkJCXNuZF9p
bmZvLnNuZF9hc3NvY19pZCA9IHJjdi5yY3ZfYXNzb2NfaWQ7CisJCQkJaWYgKHVzcnNjdHBfc2Vu
ZHYoc29jaywgZGF0YSwgZGF0YWxlbiwgTlVMTCwgMCwgJnNuZF9pbmZvLCBzaXplb2Yoc3RydWN0
IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJCXBlcnJv
cigic2N0cF9zZW5kdiIpOworCQkJCX0KKwkJCX0KKwkJfQorCQlmcmVlKGRhdGEpOworCX0KKwly
ZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYo
Zm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFy
ICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
IGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9ldmVu
dCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVfRVJST1IsCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9OworCXVuc2lnbmVkIGludCBpOworCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGludCBvbiA9IDE7CisJc3NpemVfdCBuOwor
CWludCBmbGFnczsKKwlzb2NrbGVuX3QgZnJvbV9sZW47CisJY2hhciBidWZmZXJbQlVGRkVSX1NJ
WkVdOworCWNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKKwlzb2NrbGVuX3QgaW5mb2xlbjsK
KwlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdl9pbmZvOworCXVuc2lnbmVkIGludCBpbmZvdHlwZTsK
KworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwg
ZGVidWdfcHJpbnRmKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVi
dWdfcHJpbnRmKTsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9ibGFja2hvbGUoMik7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9J
TkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgdXNlX2NiP3JlY2VpdmVfY2I6TlVM
TCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIp
OworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9J
X1dBTlRfTUFQUEVEX1Y0X0FERFIsIChjb25zdCB2b2lkKikmb24sIChzb2NrbGVuX3Qpc2l6ZW9m
KGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0lfV0FOVF9N
QVBQRURfVjRfQUREUiIpOworCX0KKwltZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUpKTsKKwlhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09DOworCWF2LmFzc29j
X3ZhbHVlID0gNDc7CisKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NU
UCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29w
dCBTQ1RQX0NPTlRFWFQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBS
T1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZPIik7CisJfQorCWlmIChh
cmdjID4gMikgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVu
Y2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVu
Y2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAo
Y29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5j
YXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFTU9URV9V
RFBfRU5DQVBTX1BPUlQiKTsKKwkJfQorCX0KKwltZW1zZXQoJmV2ZW50LCAwLCBzaXplb2YoZXZl
bnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09DOworCWV2ZW50LnNl
X29uID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCkoc2l6ZW9mKGV2ZW50X3R5
cGVzKS9zaXplb2YodWludDE2X3QpKTsgaSsrKSB7CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90
eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KSkgPCAwKSB7CisJCQlw
ZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0VWRU5UIik7CisJCX0KKwl9CisJbWVtc2V0
KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYg
SEFWRV9TSU42X0xFTgorCWFkZHIuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
Nik7CisjZW5kaWYKKwlhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJYWRkci5zaW42X3Bv
cnQgPSBodG9ucyhQT1JUKTsKKwlhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworCWlmICh1
c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKwlp
ZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9saXN0
ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzZV9jYikgeworI2lmZGVmIF9XSU4zMgor
CQlTbGVlcChTTEVFUCAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJ
CX0gZWxzZSB7CisJCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOworCQkJZmxhZ3MgPSAwOworCQkJaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX3JjdmluZm8pOworCQkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgKHZvaWQqKWJ1
ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwg
KHZvaWQgKikmcmN2X2luZm8sCisJCQkgICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90
eXBlLCAmZmxhZ3MpOworCQkJaWYgKG4gPiAwKSB7CisJCQkJaWYgKGZsYWdzICYgTVNHX05PVElG
SUNBVElPTikgeworCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWxsdSByZWNl
aXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYg
KGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgeworCQkJCQkJcHJpbnRmKCJNc2cgb2Yg
bGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUg
YW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxldGUgJWQuXG4iLAorCQkJCQkJ
ICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCisJCQkJCQkgICAgICAgIGluZXRfbnRvcChB
Rl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMo
YWRkci5zaW42X3BvcnQpLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc2lkLAorCQkJCQkJ
ICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3ZfdHNu
LAorCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3ZfcHBpZCksCisJCQkJCQkgICAgICAg
IHJjdl9pbmZvLnJjdl9jb250ZXh0LAorCQkJCQkJICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/
IDEgOiAwKTsKKwkJCQkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKKwkJCQkJCQlzdHJ1Y3Qgc2N0
cF9zbmRpbmZvIHNuZF9pbmZvOworCisJCQkJCQkJc25kX2luZm8uc25kX3NpZCA9IHJjdl9pbmZv
LnJjdl9zaWQ7CisJCQkJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsKKwkJCQkJCQlpZiAocmN2
X2luZm8ucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJCQkJc25kX2luZm8uc25k
X2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQkJCQkJCX0KKwkJCQkJCQlzbmRfaW5mby5zbmRf
cHBpZCA9IHJjdl9pbmZvLnJjdl9wcGlkOworCQkJCQkJCXNuZF9pbmZvLnNuZF9jb250ZXh0ID0g
MDsKKwkJCQkJCQlzbmRfaW5mby5zbmRfYXNzb2NfaWQgPSByY3ZfaW5mby5yY3ZfYXNzb2NfaWQ7
CisJCQkJCQkJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVyLCAoc2l6ZV90KW4sIE5VTEws
IDAsICZzbmRfaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFND
VFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJCQkJCXBlcnJvcigic2N0cF9zZW5kdiIp
OworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXByaW50ZigiTXNnIG9m
IGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRlICVkLlxuIiwKKwkJCQkJ
CSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAorCQkJCQkJICAgICAgICBpbmV0X250b3Ao
QUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNUUkxFTiksIG50b2hz
KGFkZHIuc2luNl9wb3J0KSwKKwkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VPUikgPyAxIDog
MCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ
fQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkg
eworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAo
U0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9wcm9ncmFtcy9la3JfY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfY2xpZW50LmMK
aW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMWU1ZTdlMzJl
ZDZjNWU3NTk0YjJiMThiNWFkYjY3MmFkZThjMTRiOCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJv
Z3JhbXMvZWtyX2NsaWVudC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9jbGllbnQuYwpA
QCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwg
VHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5J
TkdTCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2Vsc2UKKyNpbmNs
dWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyNpbmNsdWRl
IDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKKyNkZWZpbmUg
QlVGRkVSX1NJWkUgODAKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisKKyNpZmRlZiBfV0lOMzIK
K3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRs
ZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNl
bHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZjsKKwlzc2l6ZV90IGxlbmd0
aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYgX1dJTjMyCisJZmRwID0g
KFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgorCWZvciAo
OzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwor
I2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOwor
CQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tl
dChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKKwkJ
CQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOworCQkJCXVzcnNjdHBfZnJlZWR1bXBi
dWZmZXIoZHVtcF9idWYpOworCQkJfQorCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChz
aXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gMDsKKyNl
bHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW50Citjb25uX291dHB1
dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50
OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQg
KmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9
IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgorCWlm
ICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFNDVFBfRFVNUF9P
VVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmKTsK
KwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJfQorI2lmZGVmIF9XSU4zMgor
CWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikgewor
CQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZkcCwgYnVm
LCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgorCX0gZWxzZSB7
CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBz
b2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAg
ICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdz
LCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlmIChkYXRhKSB7CisJCWlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNl
aXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIk1zZyBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQg
VFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRhdGFsZW4s
CisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAgICAgIG50b2hzKGFkZHIu
c2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2
LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAgbnRvaGwocmN2LnJj
dl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9CisJCWZyZWUoZGF0YSk7
CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3ModWxwX2luZm8pOworCQl1
c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19w
cmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0
YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30K
KworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2thZGRy
X2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNpZmRlZiBfV0lOMzIKKwlT
T0NLRVQgZmQ7CisjZWxzZQorCWludCBmZDsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnM7Cisj
aWZkZWYgX1dJTjMyCisJSEFORExFIHRpZDsKKyNlbHNlCisJcHRocmVhZF90IHRpZDsKKyNlbmRp
ZgorCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKwljaGFyIGJ1ZmZlcltCVUZGRVJfU0la
RV07CisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FEYXRhOworI2VuZGlmCisKKwlpZiAoYXJn
YyA8IDQpIHsKKwkJcHJpbnRmKCJlcnJvcjogdGhpcyBwcm9ncmFtIHJlcXVpcmVzIDQgYXJndW1l
bnRzIVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKyNpZmRlZiBfV0lOMzIKKwlp
ZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0gMCkgeworCQlwcmludGYo
IldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5k
aWYKKwl1c3JzY3RwX2luaXQoMCwgY29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zik7CisJLyogc2V0
IHVwIGEgY29ubmVjdGVkIFVEUCBzb2NrZXQgKi8KKyNpZmRlZiBfV0lOMzIKKwlpZiAoKGZkID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NL
RVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKChm
ZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwgMCkgeworCQlw
ZXJyb3IoInNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVt
c2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWls
eSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2ko
YXJndlsyXSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2Fk
ZHIuc19hZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmQsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VU
X0VSUk9SKSB7CisJCXByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NB
R2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAo
YmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9
CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwor
CXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJc2luLnNpbl9wb3J0
ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsz
XSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRy
ZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAo
Y29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdp
dGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJF
KTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIFNDVFBfREVCVUcKKwl1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlm
CisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lz
dGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworI2lmZGVmIF9XSU4zMgorCXRpZCA9IENyZWF0ZVRo
cmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkLCAwLCBOVUxMKTsKKyNl
bHNlCisJcHRocmVhZF9jcmVhdGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAq
KSZmZCk7CisjZW5kaWYKKwlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NU
UkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmQpKSA9PSBOVUxMKSB7
CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisKKwltZW1zZXQoJnNjb25uLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9D
T05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucygw
KTsKKwlzY29ubi5zY29ubl9hZGRyID0gTlVMTDsKKwlpZiAodXNyc2N0cF9iaW5kKHMsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkg
eworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKworCW1lbXNldCgmc2Nvbm4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NP
Tk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUw
MDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmQ7CisJaWYgKHVzcnNjdHBfY29ubmVjdChzLCAo
c3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwl9CisJbWVtc2V0KGJ1ZmZlciwg
J0EnLCBCVUZGRVJfU0laRSk7CisJc25kaW5mby5zbmRfc2lkID0gMTsKKwlzbmRpbmZvLnNuZF9m
bGFncyA9IDA7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERJU0NBUkRfUFBJRCk7CisJc25k
aW5mby5zbmRfY29udGV4dCA9IDA7CisJc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOworCWlmICh1
c3JzY3RwX3NlbmR2KHMsIGJ1ZmZlciwgQlVGRkVSX1NJWkUsIE5VTEwsIDAsICh2b2lkICopJnNu
ZGluZm8sCisJICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0
cF9zZW5kdiIpOworCX0KKworCXVzcnNjdHBfc2h1dGRvd24ocywgU0hVVF9XUik7CisJd2hpbGUg
KHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsK
KyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorI2lmZGVmIF9XSU4zMgorCVRlcm1pbmF0
ZVRocmVhZCh0aWQsIDApOworCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkLCBJTkZJTklURSk7CisJ
aWYgKGNsb3Nlc29ja2V0KGZkKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjbG9zZXNv
Y2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCX0K
KwlXU0FDbGVhbnVwKCk7CisjZWxzZQorCXB0aHJlYWRfY2FuY2VsKHRpZCk7CisJcHRocmVhZF9q
b2luKHRpZCwgTlVMTCk7CisJaWYgKGNsb3NlKGZkKSA8IDApIHsKKwkJcGVycm9yKCJjbG9zZSIp
OworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9la3JfbG9vcC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2xvb3AuYwppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43N2U3MmM1Yjg0ZjY0MWRiZTk3
MTZlNDlkYWU3ZjRmYzk3N2QxNTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3Jf
bG9vcC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wLmMKQEAgLTAsMCArMSw1NDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNU
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYg
X1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4K
KyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0
aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIu
aD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgor
CisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisjZGVmaW5lIExJTkVfTEVOR1RIICgx
PDwyMCkKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBE
V09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRz
KHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50
ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZjsKKwlzc2l6ZV90IGxlbmd0aDsKKwljaGFy
IGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tFVCAq
KWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgorCWZvciAoOzspIHsKKyNp
ZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOworI2VuZGlmCisJ
CWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOworCQlpZiAobGVu
Z3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChz
aXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKKwkJCQkvL2Zwcmlu
dGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7CisJCQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihk
dW1wX2J1Zik7CisJCQl9CisJCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1ZiwgKHNpemVfdCls
ZW5ndGgsIDApOworCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOworI2Vsc2UKKwly
ZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2Nvbm5fb3V0cHV0KHZvaWQg
KmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0
X2RmKQoreworCWNoYXIgKmR1bXBfYnVmOworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCAqZmRwOwor
I2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tF
VCAqKWFkZHI7CisjZWxzZQorCWZkcCA9IChpbnQgKilhZGRyOworI2VuZGlmCisJaWYgKChkdW1w
X2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIGxlbmd0aCwgU0NUUF9EVU1QX09VVEJPVU5E
KSkgIT0gTlVMTCkgeworCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7CisJCXVz
cnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAo
c2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcmV0
dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVu
Z3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQly
ZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0
ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAg
ICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9p
ZCAqdWxwX2luZm8pCit7CisJcHJpbnRmKCJNZXNzYWdlICVwIHJlY2VpdmVkIG9uIHNvY2sgPSAl
cC5cbiIsIGRhdGEsICh2b2lkICopc29jayk7CisJaWYgKGRhdGEpIHsKKwkJaWYgKChmbGFncyAm
IE1TR19OT1RJRklDQVRJT04pID09IDApIHsKKwkJCXByaW50ZigiTWVzc3NhZ2Ugb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAl
dSwgUFBJRCAldSwgY29udGV4dCAldSwgZmxhZ3MgJXguXG4iLAorCQkJICAgICAgIChpbnQpZGF0
YWxlbiwKKwkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCisJCQkgICAgICAgbnRvaHMo
YWRkci5zY29ubi5zY29ubl9wb3J0KSwKKwkJCSAgICAgICByY3YucmN2X3NpZCwKKwkJCSAgICAg
ICByY3YucmN2X3NzbiwKKwkJCSAgICAgICByY3YucmN2X3RzbiwKKwkJCSAgICAgICBudG9obChy
Y3YucmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCwKKwkJCSAgICAgICBmbGFn
cyk7CisJCX0KKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2RlcmVnaXN0ZXJf
YWRkcmVzcyh1bHBfaW5mbyk7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJfQorCXJldHVybiAo
MSk7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZAorcHJpbnRfYWRkcmVzc2VzKHN0cnVjdCBzb2Nr
ZXQgKnNvY2spCit7CisJaW50IGksIG47CisJc3RydWN0IHNvY2thZGRyICphZGRycywgKmFkZHI7
CisKKwluID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFkZHJzKTsKKwlhZGRyID0gYWRk
cnM7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWls
eSkgeworCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwor
CQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRvcChB
Rl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOworCQkJcHJpbnRm
KCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJCWJyZWFrOworCQl9CisJ
CWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJCQlj
aGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCXNp
bjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFG
X0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4pOworCQkJcHJp
bnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkpOworCQkJYnJlYWs7CisJ
CX0KKwkJY2FzZSBBRl9DT05OOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47
CisKKwkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJCXByaW50Zigi
JXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNjb25uX3BvcnQpKTsKKwkJ
CWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlwcmludGYoIlVua25vd24gZmFtaWx5OiAlZCIs
IGFkZHItPnNhX2ZhbWlseSk7CisJCQlicmVhazsKKwkJfQorCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKwkJaWYgKGkgIT0gbiAtIDEp
IHsKKwkJCXByaW50ZigiLCIpOworCQl9CisJfQorCWlmIChuID4gMCkgeworCQl1c3JzY3RwX2Zy
ZWVsYWRkcnMoYWRkcnMpOworCX0KKwlwcmludGYoIjwtPiIpOworCW4gPSB1c3JzY3RwX2dldHBh
ZGRycyhzb2NrLCAwLCAmYWRkcnMpOworCWFkZHIgPSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwg
bjsgaSsrKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoK
KwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQljaGFyIGJ1ZltJTkVUX0FERFJT
VFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRy
LCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMo
c2luLT5zaW5fcG9ydCkpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBBRl9JTkVUNjoKKwkJewor
CQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJM
RU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2Fk
ZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRv
aHMoc2luNi0+c2luNl9wb3J0KSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0NPTk46CisJ
CXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJc2Nvbm4gPSAoc3RydWN0
IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJcHJpbnRmKCIlcDolZCIsIHNjb25uLT5zY29ubl9h
ZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVs
dDoKKwkJCXByaW50ZigiVW5rbm93biBmYW1pbHk6ICVkIiwgYWRkci0+c2FfZmFtaWx5KTsKKwkJ
CWJyZWFrOworCQl9CisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIg
KyBhZGRyLT5zYV9sZW4pOworCQlpZiAoaSAhPSBuIC0gMSkgeworCQkJcHJpbnRmKCIsIik7CisJ
CX0KKwl9CisJaWYgKG4gPiAwKSB7CisJCXVzcnNjdHBfZnJlZXBhZGRycyhhZGRycyk7CisJfQor
CXByaW50ZigiXG4iKTsKK30KKyNlbmRpZgorCit2b2lkCitkZWJ1Z19wcmludGYoY29uc3QgY2hh
ciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQp
OworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworaW50CittYWluKHZv
aWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zLCBzaW5fYzsKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiBzY29ubjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgZmRfYywgZmRfczsKKyNlbHNl
CisJaW50IGZkX2MsIGZkX3M7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzX2MsICpzX3MsICpz
X2w7CisjaWZkZWYgX1dJTjMyCisJSEFORExFIHRpZF9jLCB0aWRfczsKKyNlbHNlCisJcHRocmVh
ZF90IHRpZF9jLCB0aWRfczsKKyNlbmRpZgorCWludCBjdXJfYnVmX3NpemUsIHNuZF9idWZfc2l6
ZSwgcmN2X2J1Zl9zaXplOworCXNvY2tsZW5fdCBvcHRfbGVuOworCXN0cnVjdCBzY3RwX3NuZGlu
Zm8gc25kaW5mbzsKKwljaGFyICpsaW5lOworI2lmZGVmIF9XSU4zMgorCVdTQURBVEEgd3NhRGF0
YTsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwy
KSwgJndzYURhdGEpICE9IDApIHsKKwkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7CisJ
CWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAsIGNvbm5f
b3V0cHV0LCBkZWJ1Z19wcmludGYpOworCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0
ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdS
QU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQo
KSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JB
TSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlwcmludGYoInNvY2tldCgp
IGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkX2MgPSBzb2NrZXQoQUZfSU5FVCwgU09D
S19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19E
R1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luX2MsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW5fYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwlzaW5fYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwlzaW5fYy5zaW5fcG9ydCA9IGh0b25zKDk5MDApOworCXNpbl9jLnNpbl9hZGRy
LnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisJbWVtc2V0KCZzaW5fcywgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbl9zLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwor
I2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbl9zLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKKyNlbmRpZgorCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMoOTkwMSk7CisJc2luX3Mu
c2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKKyNpZmRlZiBfV0lOMzIK
KwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiYmluZCgpIGZhaWxl
ZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJi
aW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChiaW5kKGZkX2MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVy
cm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGJpbmQoZmRfcywg
KHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwg
MCkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRp
ZgorI2lmZGVmIF9XSU4zMgorCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJ
cHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJy
b3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNvbm5lY3QoZmRfcywgKHN0
cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNP
Q0tFVF9FUlJPUikgeworCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRc
biIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNl
CisJaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY29ubmVjdChmZF9zLCAoc3RydWN0IHNvY2thZGRyICop
JnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29u
bmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisjaWZkZWYgX1dJTjMy
CisJdGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAq
KSZmZF9jLCAwLCBOVUxMKTsKKwl0aWRfcyA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxl
X3BhY2tldHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwpOworI2Vsc2UKKwlpZiAocHRocmVhZF9j
cmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX2MpKSB7CisJ
CXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKworCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZoYW5kbGVfcGFja2V0cywg
KHZvaWQgKikmZmRfcykpIHsKKwkJcGVycm9yKCJwdGhyZWFkX2NyZWF0ZSB0aWRfcyIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfTsKKyNlbmRpZgorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJ
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lzdGVy
X2FkZHJlc3MoKHZvaWQgKikmZmRfYyk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lk
ICopJmZkX3MpOworCWlmICgoc19jID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJF
QU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZkX2MpKSA9PSBOVUxMKSB7
CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KwlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOwor
CWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJf
YnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQi
KTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlwcmludGYoIkNoYW5nZSBzZW5kIHNvY2tl
dCBidWZmZXIgc2l6ZSBmcm9tICVkICIsIGN1cl9idWZfc2l6ZSk7CisJc25kX2J1Zl9zaXplID0g
MTw8MjI7IC8qIDQgTUIgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tF
VCwgU09fU05EQlVGLCAmc25kX2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0
X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAo
dXNyc2N0cF9nZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmY3VyX2J1Zl9z
aXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6
ZSk7CisJaWYgKChzX2wgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQ
Uk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfcykpID09IE5VTEwpIHsKKwkJcGVy
cm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9s
ZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVz
cnNjdHBfZ2V0c29ja29wdChzX2wsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmN1cl9idWZfc2l6
ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCXByaW50ZigiQ2hhbmdlIHJlY2VpdmUgc29ja2V0IGJ1
ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwlyY3ZfYnVmX3NpemUgPSAxPDwx
NjsgLyogNjQgS0IgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwg
U09fUkNWQlVGLCAmcmN2X2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigi
dXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xl
biA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNy
c2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXpl
LCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7
CisJLyogQmluZCB0aGUgY2xpZW50IHNpZGUuICovCisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsK
KyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoNTAwMSk7
CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOworCWlmICh1c3JzY3RwX2JpbmQoc19jLCAoc3Ry
dWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDAp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KwkvKiBCaW5kIHRoZSBzZXJ2ZXIgc2lkZS4gKi8KKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwor
I2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsK
KwlzY29ubi5zY29ubl9hZGRyID0gJmZkX3M7CisJaWYgKHVzcnNjdHBfYmluZChzX2wsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkg
eworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
CS8qIE1ha2Ugc2VydmVyIHNpZGUgcGFzc2l2ZS4uLiAqLworCWlmICh1c3JzY3RwX2xpc3Rlbihz
X2wsIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJLyogSW5pdGlhdGUgdGhlIGhhbmRzaGFrZSAqLworCW1lbXNldCgmc2Nv
bm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWls
eSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9
IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfYzsKKwlpZiAodXNyc2N0cF9j
b25uZWN0KHNfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCWV4aXQo
RVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKChzX3MgPSB1c3JzY3RwX2FjY2VwdChzX2wsIE5VTEws
IE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKwl1c3JzY3RwX2Nsb3NlKHNfbCk7CisJaWYgKChsaW5lID0gbWFs
bG9jKExJTkVfTEVOR1RIKSkgPT0gTlVMTCkgeworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
CW1lbXNldChsaW5lLCAnQScsIExJTkVfTEVOR1RIKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSAxOwor
CXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FS
RF9QUElEKTsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNuZF9hc3NvY19p
ZCA9IDA7CisJLyogU2VuZCBhIDEgTUIgb3JkZXJlZCBtZXNzYWdlICovCisJaWYgKHVzcnNjdHBf
c2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywK
KwkgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8p
LCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYi
KTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBTZW5kIGEgMSBNQiBvcmRlcmVkIG1l
c3NhZ2UgKi8KKwlpZiAodXNyc2N0cF9zZW5kdihzX2MsIGxpbmUsIExJTkVfTEVOR1RILCBOVUxM
LCAwLCAodm9pZCAqKSZzbmRpbmZvLAorCSAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJ
CXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWZy
ZWUobGluZSk7CisJdXNyc2N0cF9zaHV0ZG93bihzX2MsIFNIVVRfV1IpOworCisJd2hpbGUgKHVz
cnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcCgxMDAwKTsKKyNl
bHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorI2lmZGVmIF9XSU4zMgorCVRlcm1pbmF0ZVRo
cmVhZCh0aWRfYywgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWRfYywgSU5GSU5JVEUpOwor
CVRlcm1pbmF0ZVRocmVhZCh0aWRfcywgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWRfcywg
SU5GSU5JVEUpOworCWlmIChjbG9zZXNvY2tldChmZF9jKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJ
cHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjbG9zZXNvY2tldChm
ZF9zKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3
aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorCVdTQUNsZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9jYW5jZWwodGlkX2MpOwor
CXB0aHJlYWRfam9pbih0aWRfYywgTlVMTCk7CisJcHRocmVhZF9jYW5jZWwodGlkX3MpOworCXB0
aHJlYWRfam9pbih0aWRfcywgTlVMTCk7CisJaWYgKGNsb3NlKGZkX2MpIDwgMCkgeworCQlwZXJy
b3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNsb3NlKGZkX3Mp
IDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9Cisj
ZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWty
X2xvb3Bfb2ZmbG9hZC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2xvb3Bfb2ZmbG9hZC5jCmlu
ZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjU1ZjdkN2ZjNjk0
NWI3NWEwNjA1ZDc4NWVhNTk1ZDc4ZDY2MTZjNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL2Vrcl9sb29wX29mZmxvYWQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfbG9vcF9v
ZmZsb2FkLmMKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAx
MyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRz
IGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5P
IEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VS
RV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRs
aWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRl
IDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNl
bHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlm
CisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYp
CisjZGVmaW5lIExJTkVfTEVOR1RIICgxPDwyMCkKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisK
KyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAq
CisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlT
T0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZmZl
cjsKKwlzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICpoZHI7CisJc3NpemVfdCBsZW5ndGg7CisJ
Y2hhciBidWZmZXJbTUFYX1BBQ0tFVF9TSVpFXTsKKwl1aW50MzJfdCByZWNlaXZlZF9jcmMzMmMs
IGNvbXB1dGVkX2NyYzMyYzsKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhcmc7
CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYKKwlmb3IgKDs7KSB7CisjaWYgZGVm
aW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKyNlbmRpZgorCQlsZW5n
dGggPSByZWN2KCpmZHAsIGJ1ZmZlciwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKKwkJaWYgKGxlbmd0
aCA+IDApIHsKKwkJCWlmICgoZHVtcF9idWZmZXIgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmZmVy
LCAoc2l6ZV90KWxlbmd0aCwgU0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBOVUxMKSB7CisJCQkJLy9m
cHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWZmZXIpOworCQkJCXVzcnNjdHBfZnJlZWR1bXBi
dWZmZXIoZHVtcF9idWZmZXIpOworCQkJfQorCQkJaWYgKChzaXplX3QpbGVuZ3RoID49IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyKSkgeworCQkJCWhkciA9IChzdHJ1Y3Qgc2N0cF9j
b21tb25faGVhZGVyICopYnVmZmVyOworCQkJCXJlY2VpdmVkX2NyYzMyYyA9IGhkci0+Y3JjMzJj
OworCQkJCWhkci0+Y3JjMzJjID0gaHRvbmwoMCk7CisJCQkJY29tcHV0ZWRfY3JjMzJjID0gdXNy
c2N0cF9jcmMzMmMoYnVmZmVyLCAoc2l6ZV90KWxlbmd0aCk7CisJCQkJaGRyLT5jcmMzMmMgPSBy
ZWNlaXZlZF9jcmMzMmM7CisJCQkJaWYgKHJlY2VpdmVkX2NyYzMyYyA9PSBjb21wdXRlZF9jcmMz
MmMpIHsKKwkJCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWZmZXIsIChzaXplX3QpbGVuZ3Ro
LCAwKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwgIldyb25nIENSQzMyYzog
ZXhwZWN0ZWQgJTA4eCByZWNlaXZlZCAlMDh4XG4iLAorCQkJCQkgICAgICAgIG50b2hsKGNvbXB1
dGVkX2NyYzMyYyksIG50b2hsKHJlY2VpdmVkX2NyYzMyYykpOworCQkJCX0KKwkJCX0gZWxzZSB7
CisJCQkJZnByaW50ZihzdGRlcnIsICJQYWNrZXQgdG9vIHNob3J0OiBsZW5ndGggJXp1IiwgKHNp
emVfdClsZW5ndGgpOworCQkJfQorCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOwor
I2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2Nvbm5fb3V0
cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3Ms
IHVpbnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVmZmVyOworCXN0cnVjdCBzY3RwX2Nv
bW1vbl9oZWFkZXIgKmhkcjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJ
aW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRy
OworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgorCWlmIChsZW5ndGggPj0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIpKSB7CisJCWhkciA9IChzdHJ1Y3Qgc2N0cF9j
b21tb25faGVhZGVyICopYnVmZmVyOworCQloZHItPmNyYzMyYyA9IHVzcnNjdHBfY3JjMzJjKGJ1
ZmZlciwgKHNpemVfdClsZW5ndGgpOworCX0KKwlpZiAoKGR1bXBfYnVmZmVyID0gdXNyc2N0cF9k
dW1wcGFja2V0KGJ1ZmZlciwgbGVuZ3RoLCBTQ1RQX0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7
CisJCS8vZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmZmVyKTsKKwkJdXNyc2N0cF9mcmVl
ZHVtcGJ1ZmZlcihkdW1wX2J1ZmZlcik7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpm
ZHAsIGJ1ZmZlciwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikgeworCQlyZXR1cm4g
KFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZkcCwgYnVmZmVyLCBsZW5n
dGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXJl
dHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQg
KnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAg
IHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lk
ICp1bHBfaW5mbykKK3sKKwlwcmludGYoIk1lc3NhZ2UgJXAgcmVjZWl2ZWQgb24gc29jayA9ICVw
LlxuIiwgZGF0YSwgKHZvaWQgKilzb2NrKTsKKwlpZiAoZGF0YSkgeworCQlpZiAoKGZsYWdzICYg
TVNHX05PVElGSUNBVElPTikgPT0gMCkgeworCQkJcHJpbnRmKCJNZXNzc2FnZSBvZiBsZW5ndGgg
JWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1
LCBQUElEICV1LCBjb250ZXh0ICV1LCBmbGFncyAleC5cbiIsCisJCQkgICAgICAgKGludClkYXRh
bGVuLAorCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJCSAgICAgICBudG9ocyhh
ZGRyLnNjb25uLnNjb25uX3BvcnQpLAorCQkJICAgICAgIHJjdi5yY3Zfc2lkLAorCQkJICAgICAg
IHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJICAgICAgIG50b2hsKHJj
di5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJjdl9jb250ZXh0LAorCQkJICAgICAgIGZsYWdz
KTsKKwkJfQorCQlmcmVlKGRhdGEpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfZGVyZWdpc3Rlcl9h
ZGRyZXNzKHVscF9pbmZvKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwl9CisJcmV0dXJuICgx
KTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkCitwcmludF9hZGRyZXNzZXMoc3RydWN0IHNvY2tl
dCAqc29jaykKK3sKKwlpbnQgaSwgbjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCAqYWRkcjsK
KworCW4gPSB1c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRkcnMpOworCWFkZHIgPSBhZGRy
czsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5
KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJ
CQljaGFyIGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJ
c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFG
X0lORVQsICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQlwcmludGYo
IiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCQkJYnJlYWs7CisJCX0KKwkJ
Y2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCWNo
YXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZf
SU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQlwcmlu
dGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7CisJCQlicmVhazsKKwkJ
fQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsK
KworCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJcHJpbnRmKCIl
cDolZCIsIHNjb25uLT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworCQkJ
YnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVW5rbm93biBmYW1pbHk6ICVkIiwg
YWRkci0+c2FfZmFtaWx5KTsKKwkJCWJyZWFrOworCQl9CisJCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworCQlpZiAoaSAhPSBuIC0gMSkg
eworCQkJcHJpbnRmKCIsIik7CisJCX0KKwl9CisJaWYgKG4gPiAwKSB7CisJCXVzcnNjdHBfZnJl
ZWxhZGRycyhhZGRycyk7CisJfQorCXByaW50ZigiPC0+Iik7CisJbiA9IHVzcnNjdHBfZ2V0cGFk
ZHJzKHNvY2ssIDAsICZhZGRycyk7CisJYWRkciA9IGFkZHJzOworCWZvciAoaSA9IDA7IGkgPCBu
OyBpKyspIHsKKwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgor
CQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCWNoYXIgYnVmW0lORVRfQUREUlNU
UkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIs
IGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCXByaW50ZigiJXM6JWQiLCBuYW1lLCBudG9ocyhz
aW4tPnNpbl9wb3J0KSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxF
Tl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRk
ciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCXByaW50ZigiJXM6JWQiLCBuYW1lLCBudG9o
cyhzaW42LT5zaW42X3BvcnQpKTsKKwkJCWJyZWFrOworCQl9CisJCWNhc2UgQUZfQ09OTjoKKwkJ
eworCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCQlzY29ubiA9IChzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQlwcmludGYoIiVwOiVkIiwgc2Nvbm4tPnNjb25uX2Fk
ZHIsIG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7CisJCQlicmVhazsKKwkJfQorCQlkZWZhdWx0
OgorCQkJcHJpbnRmKCJVbmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5zYV9mYW1pbHkpOworCQkJ
YnJlYWs7CisJCX0KKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciAr
IGFkZHItPnNhX2xlbik7CisJCWlmIChpICE9IG4gLSAxKSB7CisJCQlwcmludGYoIiwiKTsKKwkJ
fQorCX0KKwlpZiAobiA+IDApIHsKKwkJdXNyc2N0cF9mcmVlcGFkZHJzKGFkZHJzKTsKKwl9CisJ
cHJpbnRmKCJcbiIpOworfQorI2VuZGlmCisKK3ZvaWQKK2RlYnVnX3ByaW50Zihjb25zdCBjaGFy
ICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7
CisJdnByaW50Zihmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCitpbnQKK21haW4odm9p
ZCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3MsIHNpbl9jOworCXN0cnVjdCBzb2NrYWRk
cl9jb25uIHNjb25uOworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCBmZF9jLCBmZF9zOworI2Vsc2UK
KwlpbnQgZmRfYywgZmRfczsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnNfYywgKnNfcywgKnNf
bDsKKyNpZmRlZiBfV0lOMzIKKwlIQU5ETEUgdGlkX2MsIHRpZF9zOworI2Vsc2UKKwlwdGhyZWFk
X3QgdGlkX2MsIHRpZF9zOworI2VuZGlmCisJaW50IGN1cl9idWZfc2l6ZSwgc25kX2J1Zl9zaXpl
LCByY3ZfYnVmX3NpemU7CisJc29ja2xlbl90IG9wdF9sZW47CisJc3RydWN0IHNjdHBfc25kaW5m
byBzbmRpbmZvOworCWNoYXIgKmxpbmU7CisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FEYXRh
OworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIp
LCAmd3NhRGF0YSkgIT0gMCkgeworCQlwcmludGYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJ
ZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXQoMCwgY29ubl9v
dXRwdXQsIGRlYnVnX3ByaW50Zik7CisJdXNyc2N0cF9lbmFibGVfY3JjMzJjX29mZmxvYWQoKTsK
KwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAqLworI2lmZGVmIF9XSU4zMgorCWlm
ICgoZmRfYyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09IElO
VkFMSURfU09DS0VUKSB7CisJCXByaW50Zigic29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVk
XG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYg
KChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5W
QUxJRF9TT0NLRVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRc
biIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNl
CisJaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkg
PCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
aWYgKChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAw
KSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5k
aWYKKwltZW1zZXQoJnNpbl9jLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2lu
X2Muc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luX2Muc2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJc2luX2Muc2luX3Bv
cnQgPSBodG9ucyg5ODk5KTsKKwlzaW5fYy5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJf
TE9PUEJBQ0spOworCW1lbXNldCgmc2luX3MsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KTsKKwlzaW5fcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlz
aW5fcy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW5f
cy5zaW5fcG9ydCA9IGh0b25zKDk5MDEpOworCXNpbl9zLnNpbl9hZGRyLnNfYWRkciA9IGh0b25s
KElOQUREUl9MT09QQkFDSyk7CisjaWZkZWYgX1dJTjMyCisJaWYgKGJpbmQoZmRfYywgKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tF
VF9FUlJPUikgeworCQlwcmludGYoImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdT
QUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoYmluZChm
ZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9y
OiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
I2Vsc2UKKwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmluZCIpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu
X3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlpZiAo
Y29ubmVjdChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiY29ubmVjdCgpIGZhaWxl
ZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorCWlmIChjb25uZWN0KGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX2Ms
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRm
KCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkX2MsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDAp
IHsKKwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYg
KGNvbm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZB
SUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorCXRpZF9jID0gQ3JlYXRlVGhyZWFk
KE5VTEwsIDAsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfYywgMCwgTlVMTCk7CisJdGlk
X3MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9z
LCAwLCBOVUxMKTsKKyNlbHNlCisJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0aWRfYywgTlVMTCwgJmhh
bmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9jKSkgeworCQlwZXJyb3IoInB0aHJlYWRfY3JlYXRl
IHRpZF9jIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlpZiAocHRocmVhZF9jcmVh
dGUoJnRpZF9zLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MpKSB7CisJCXBl
cnJvcigicHRocmVhZF9jcmVhdGUgdGlkX3MiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX07
CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVi
dWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
ZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRfYyk7
CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkX3MpOworCWlmICgoc19jID0g
dXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2
ZV9jYiwgTlVMTCwgMCwgJmZkX2MpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2Nr
ZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlvcHRfbGVuID0gKHNvY2tsZW5fdClz
aXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQo
c19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDAp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUp
OworCX0KKwlwcmludGYoIkNoYW5nZSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSBmcm9tICVkICIs
IGN1cl9idWZfc2l6ZSk7CisJc25kX2J1Zl9zaXplID0gMTw8MjA7IC8qIDEgTUIgKi8KKwlpZiAo
dXNyc2N0cF9zZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc25kX2J1Zl9z
aXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9m
KGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfYywg
U09MX1NPQ0tFVCwgU09fU05EQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJ
CXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9
CisJcHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7CisJaWYgKChzX2wgPSB1c3JzY3Rw
X3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBO
VUxMLCAwLCAmZmRfcykpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihp
bnQpOworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2wsIFNP
TF9TT0NLRVQsIFNPX1JDVkJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlw
ZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQor
CXByaW50ZigiQ2hhbmdlIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3Vy
X2J1Zl9zaXplKTsKKwlyY3ZfYnVmX3NpemUgPSAxPDwxNjsgLyogNjQgS0IgKi8KKwlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmcmN2X2J1Zl9zaXpl
LCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGlu
dCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09M
X1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBl
cnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
cHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7CisJLyogQmluZCB0aGUgY2xpZW50IHNp
ZGUuICovCisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7
CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgor
CXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYK
KwlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZm
ZF9jOworCWlmICh1c3JzY3RwX2JpbmQoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Jp
bmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBCaW5kIHRoZSBzZXJ2ZXIgc2lk
ZS4gKi8KKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJ
c2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgor
CXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZk
X3M7CisJaWYgKHVzcnNjdHBfYmluZChzX2wsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmlu
ZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIE1ha2Ugc2VydmVyIHNpZGUgcGFz
c2l2ZS4uLiAqLworCWlmICh1c3JzY3RwX2xpc3RlbihzX2wsIDEpIDwgMCkgeworCQlwZXJyb3Io
InVzcnNjdHBfbGlzdGVuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogSW5pdGlh
dGUgdGhlIGhhbmRzaGFrZSAqLworCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFW
RV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNj
b25uX2FkZHIgPSAmZmRfYzsKKwlpZiAodXNyc2N0cF9jb25uZWN0KHNfYywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBl
cnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYg
KChzX3MgPSB1c3JzY3RwX2FjY2VwdChzX2wsIE5VTEwsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBl
cnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwl1c3Jz
Y3RwX2Nsb3NlKHNfbCk7CisJaWYgKChsaW5lID0gbWFsbG9jKExJTkVfTEVOR1RIKSkgPT0gTlVM
TCkgeworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW1lbXNldChsaW5lLCAnQScsIExJTkVf
TEVOR1RIKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSAxOworCXNuZGluZm8uc25kX2ZsYWdzID0gMDsK
KwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FSRF9QUElEKTsKKwlzbmRpbmZvLnNuZF9j
b250ZXh0ID0gMDsKKwlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7CisJLyogU2VuZCBhIDEgTUIg
bWVzc2FnZSAqLworCWlmICh1c3JzY3RwX3NlbmR2KHNfYywgbGluZSwgTElORV9MRU5HVEgsIE5V
TEwsIDAsICh2b2lkICopJnNuZGluZm8sCisJICAgICAgICAgICAgICAgICAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsK
KwkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
ZnJlZShsaW5lKTsKKwl1c3JzY3RwX3NodXRkb3duKHNfYywgU0hVVF9XUik7CisKKwl3aGlsZSAo
dXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOwor
I2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVybWluYXRl
VGhyZWFkKHRpZF9jLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZF9jLCBJTkZJTklURSk7
CisJVGVybWluYXRlVGhyZWFkKHRpZF9zLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZF9z
LCBJTkZJTklURSk7CisJaWYgKGNsb3Nlc29ja2V0KGZkX2MpID09IFNPQ0tFVF9FUlJPUikgewor
CQlwcmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNsb3Nlc29ja2V0
KGZkX3MpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVk
IHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vsc2UKKwlwdGhyZWFkX2NhbmNlbCh0aWRfYyk7
CisJcHRocmVhZF9qb2luKHRpZF9jLCBOVUxMKTsKKwlwdGhyZWFkX2NhbmNlbCh0aWRfcyk7CisJ
cHRocmVhZF9qb2luKHRpZF9zLCBOVUxMKTsKKwlpZiAoY2xvc2UoZmRfYykgPCAwKSB7CisJCXBl
cnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY2xvc2UoZmRf
cykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9l
a3JfcGVlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3BlZXIuYwppbmRleCBlNjlkZTI5YmIy
ZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5jYTBjNjRkNmRhZDE1ZTU2NmEyYWFmOWE0
Y2U4ODBmZDJjYzhmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfcGVlci5j
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9wZWVyLmMKQEAgLTAsMCArMSw1NDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVm
IF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVk
ZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5j
bHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisjZGVmaW5l
IExJTkVfTEVOR1RIIDgwCisjZGVmaW5lIERJU0NBUkRfUFBJRCAzOQorCisjaWZkZWYgX1dJTjMy
CitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQorc3RhdGljIHZvaWQgKgorI2VuZGlmCitoYW5k
bGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUICpmZHA7Cisj
ZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJc3NpemVfdCBsZW5ndGg7CisJY2hhciBidWZbTUFY
X1BBQ0tFVF9TSVpFXTsKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhcmc7Cisj
ZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYKKwlmb3IgKDs7KSB7CisjaWYgZGVmaW5l
ZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKyNlbmRpZgorCQlsZW5ndGgg
PSByZWN2KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKKwkJaWYgKGxlbmd0aCA+IDAp
IHsKKwkJCXVzcnNjdHBfY29ubmlucHV0KGZkcCwgYnVmLCAoc2l6ZV90KWxlbmd0aCwgMCk7CisJ
CX0KKwl9CisjaWZkZWYgX1dJTjMyCisJcmV0dXJuIDA7CisjZWxzZQorCXJldHVybiAoTlVMTCk7
CisjZW5kaWYKK30KKworc3RhdGljIGludAorY29ubl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAq
YnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpCit7Cisj
aWZkZWYgX1dJTjMyCisJU09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisK
KyNpZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VUICopYWRkcjsKKyNlbHNlCisJZmRwID0gKGlu
dCAqKWFkZHI7CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlpZiAoc2VuZCgqZmRwLCBidWZmZXIs
IChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0
RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5kKCpmZHAsIGJ1ZmZlciwgbGVuZ3RoLCAwKSA8IDAp
IHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOwor
CX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9hc3NvY2lhdGlvbl9jaGFuZ2VfZXZlbnQoc3Ry
dWN0IHNjdHBfYXNzb2NfY2hhbmdlICpzYWMpCit7CisJdW5zaWduZWQgaW50IGksIG47CisKKwlw
cmludGYoIkFzc29jaWF0aW9uIGNoYW5nZSAiKTsKKwlzd2l0Y2ggKHNhYy0+c2FjX3N0YXRlKSB7
CisJY2FzZSBTQ1RQX0NPTU1fVVA6CisJCXByaW50ZigiU0NUUF9DT01NX1VQIik7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9DT01NX0xPU1Q6CisJCXByaW50ZigiU0NUUF9DT01NX0xPU1QiKTsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1JFU1RBUlQ6CisJCXByaW50ZigiU0NUUF9SRVNUQVJUIik7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QOgorCQlwcmludGYoIlNDVFBfU0hVVERP
V05fQ09NUCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ0FOVF9TVFJfQVNTT0M6CisJCXByaW50
ZigiU0NUUF9DQU5UX1NUUl9BU1NPQyIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYo
IlVOS05PV04iKTsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiLCBzdHJlYW1zIChpbi9vdXQpID0g
KCV1LyV1KSIsCisJICAgICAgIHNhYy0+c2FjX2luYm91bmRfc3RyZWFtcywgc2FjLT5zYWNfb3V0
Ym91bmRfc3RyZWFtcyk7CisJbiA9IHNhYy0+c2FjX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc3NvY19jaGFuZ2UpOworCWlmICgoKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9VUCkg
fHwKKwkgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX1JFU1RBUlQpKSAmJiAobiA+IDApKSB7
CisJCXByaW50ZigiLCBzdXBwb3J0cyIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJ
CQlzd2l0Y2ggKHNhYy0+c2FjX2luZm9baV0pIHsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JU
U19QUjoKKwkJCQlwcmludGYoIiBQUiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX0FVVEg6CisJCQkJcHJpbnRmKCIgQVVUSCIpOworCQkJCWJyZWFrOworCQkJY2Fz
ZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORjoKKwkJCQlwcmludGYoIiBBU0NPTkYiKTsKKwkJ
CQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRjoKKwkJCQlwcmlu
dGYoIiBNVUxUSUJVRiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRT
X1JFX0NPTkZJRzoKKwkJCQlwcmludGYoIiBSRS1DT05GSUciKTsKKwkJCQlicmVhazsKKwkJCWRl
ZmF1bHQ6CisJCQkJcHJpbnRmKCIgVU5LTk9XTigweCUwMngpIiwgc2FjLT5zYWNfaW5mb1tpXSk7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0g
U0NUUF9DT01NX0xPU1QpIHx8CisJICAgICAgICAgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBf
Q0FOVF9TVFJfQVNTT0MpKSAmJiAobiA+IDApKSB7CisJCXByaW50ZigiLCBBQk9SVCA9Iik7CisJ
CWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXByaW50ZigiIDB4JTAyeCIsIHNhYy0+c2Fj
X2luZm9baV0pOworCQl9CisJfQorCXByaW50ZigiLlxuIik7CisJaWYgKChzYWMtPnNhY19zdGF0
ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSB8fAorCSAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NU
UF9TSFVURE9XTl9DT01QKSB8fAorCSAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX0xP
U1QpKSB7CisJCWV4aXQoMCk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRs
ZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSAqc3Bj
KQoreworCWNoYXIgYWRkcl9idWZbSU5FVDZfQUREUlNUUkxFTl07CisJY29uc3QgY2hhciAqYWRk
cjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OworCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCXN3aXRjaCAoc3BjLT5zcGNfYWFk
ZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4t
PnNpbl9hZGRyLCBhZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJYnJlYWs7CisJY2FzZSBB
Rl9JTkVUNjoKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNwYy0+c3BjX2FhZGRy
OworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBhZGRyX2J1
ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWNhc2UgQUZfQ09OTjoKKwkJc2Nvbm4g
PSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKikmc3BjLT5zcGNfYWFkZHI7CisjaWZkZWYgX1dJTjMy
CisJCV9zbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwgc2Nvbm4tPnNj
b25uX2FkZHIpOworI2Vsc2UKKwkJc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4s
ICIlcCIsIHNjb25uLT5zY29ubl9hZGRyKTsKKyNlbmRpZgorCQlhZGRyID0gYWRkcl9idWY7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisjaWZkZWYgX1dJTjMyCisJCV9zbnByaW50ZihhZGRyX2J1Ziwg
SU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3Nf
ZmFtaWx5KTsKKyNlbHNlCisJCXNucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAi
VW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNwY19hYWRkci5zc19mYW1pbHkpOworI2VuZGlmCisJ
CWFkZHIgPSBhZGRyX2J1ZjsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiUGVlciBhZGRyZXNzICVz
IGlzIG5vdyAiLCBhZGRyKTsKKwlzd2l0Y2ggKHNwYy0+c3BjX3N0YXRlKSB7CisJY2FzZSBTQ1RQ
X0FERFJfQVZBSUxBQkxFOgorCQlwcmludGYoIlNDVFBfQUREUl9BVkFJTEFCTEUiKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX0FERFJfVU5SRUFDSEFCTEU6CisJCXByaW50ZigiU0NUUF9BRERSX1VO
UkVBQ0hBQkxFIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1JFTU9WRUQ6CisJCXByaW50
ZigiU0NUUF9BRERSX1JFTU9WRUQiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfQURERUQ6
CisJCXByaW50ZigiU0NUUF9BRERSX0FEREVEIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERS
X01BREVfUFJJTToKKwkJcHJpbnRmKCJTQ1RQX0FERFJfTUFERV9QUklNIik7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9BRERSX0NPTkZJUk1FRDoKKwkJcHJpbnRmKCJTQ1RQX0FERFJfQ09ORklSTUVE
Iik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9XTiIpOworCQlicmVhazsK
Kwl9CisJcHJpbnRmKCIgKGVycm9yID0gMHglMDh4KS5cbiIsIHNwYy0+c3BjX2Vycm9yKTsKKwly
ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoc3RydWN0
IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmUpCit7CisJc2l6ZV90IGksIG47CisKKwlpZiAo
c3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9VTlNFTlQpIHsKKwkJcHJpbnRmKCJVbnNlbnQg
Iik7CisJfQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1NFTlQpIHsKKwkJcHJp
bnRmKCJTZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIH4oU0NUUF9EQVRBX1NF
TlQgfCBTQ1RQX0RBVEFfVU5TRU5UKSkgeworCQlwcmludGYoIihmbGFncyA9ICV4KSAiLCBzc2Zl
LT5zc2ZlX2ZsYWdzKTsKKwl9CisJcHJpbnRmKCJtZXNzYWdlIHdpdGggUFBJRCA9ICV1LCBTSUQg
PSAldSwgZmxhZ3M6IDB4JTA0eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgiLAorCSAgICAgICBudG9o
bChzc2ZlLT5zc2ZlX2luZm8uc25kX3BwaWQpLCBzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCwKKwkg
ICAgICAgc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncywgc3NmZS0+c3NmZV9lcnJvcik7CisJbiA9
IHNzZmUtPnNzZmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50
KTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXByaW50ZigiIDB4JTAyeCIsIHNzZmUt
PnNzZmVfZGF0YVtpXSk7CisJfQorCXByaW50ZigiLlxuIik7CisJcmV0dXJuOworfQorCitzdGF0
aWMgdm9pZAoraGFuZGxlX25vdGlmaWNhdGlvbih1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqbm90
aWYsIHNpemVfdCBuKQoreworCWlmIChub3RpZi0+c25faGVhZGVyLnNuX2xlbmd0aCAhPSAodWlu
dDMyX3QpbikgeworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobm90aWYtPnNuX2hlYWRlci5zbl90
eXBlKSB7CisJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJaGFuZGxlX2Fzc29jaWF0aW9uX2No
YW5nZV9ldmVudCgmKG5vdGlmLT5zbl9hc3NvY19jaGFuZ2UpKTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1BFRVJfQUREUl9DSEFOR0U6CisJCWhhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50
KCYobm90aWYtPnNuX3BhZGRyX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVNT1RF
X0VSUk9SOgorCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fRVZFTlQ6CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046CisJCWJyZWFrOworCWNhc2UgU0NUUF9Q
QVJUSUFMX0RFTElWRVJZX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfQVVUSEVOVElDQVRJ
T05fRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9TRU5ERVJfRFJZX0VWRU5UOgorCQlicmVh
azsKKwljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UOgorCQlicmVhazsKKwlj
YXNlIFNDVFBfU0VORF9GQUlMRURfRVZFTlQ6CisJCWhhbmRsZV9zZW5kX2ZhaWxlZF9ldmVudCgm
KG5vdGlmLT5zbl9zZW5kX2ZhaWxlZF9ldmVudCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfU1RS
RUFNX1JFU0VUX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6
CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOgorCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0
IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxh
Z3MsIHZvaWQgKnVscF9pbmZvKQoreworCWlmIChkYXRhKSB7CisJCWlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24oKHVuaW9uIHNjdHBfbm90aWZp
Y2F0aW9uICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlwcmludGYoIk1zZyBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQg
VFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAgICAoaW50KWRhdGFsZW4s
CisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAgICAgIG50b2hzKGFkZHIu
c2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2
LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAgICAgbnRvaGwocmN2LnJj
dl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9CisJCWZyZWUoZGF0YSk7
CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3ModWxwX2luZm8pOworCQl1
c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19w
cmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0
YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30K
KworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2thZGRy
X2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKwlzdHJ1Y3Qgc2N0cF9ldmVu
dCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVH07CisJdW5zaWduZWQg
aW50IGk7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUIGZkOworI2Vsc2UKKwlpbnQgZmQ7CisjZW5k
aWYKKwlzdHJ1Y3Qgc29ja2V0ICpzOworI2lmZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7CisjZWxz
ZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87
CisJY2hhciBsaW5lW0xJTkVfTEVOR1RIXTsKKyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRBIHdzYURh
dGE7CisjZW5kaWYKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYoImVycm9yOiB0aGlzIHBy
b2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKworI2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FE
YXRhKSAhPSAwKSB7CisJCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOworCQlleGl0KEVY
SVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBk
ZWJ1Z19wcmludGYpOworCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICovCisjaWZk
ZWYgX1dJTjMyCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RP
X1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCXByaW50Zigic29ja2V0KCkgZmFpbGVkIHdp
dGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJF
KTsKKwl9CisjZWxzZQorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQ
Uk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
CXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4u
c2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoIWluZXRfcHRvbihBRl9JTkVU
LCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlwcmludGYoImVycm9yOiBpbnZh
bGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2lmZGVmIF9XSU4z
MgorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImJpbmQoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbHNlCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmluZCIpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYg
SEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndls0XSkpOworCWlmICghaW5l
dF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJCXByaW50
ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9
CisjaWZkZWYgX1dJTjMyCisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50
ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkp
OworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoY29ubmVjdChmZCwgKHN0
cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsK
KwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYK
KyNpZmRlZiBfV0lOMzIKKwl0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNr
ZXRzLCAodm9pZCAqKSZmZCwgMCwgTlVMTCk7CisjZWxzZQorCXB0aHJlYWRfY3JlYXRlKCZ0aWQs
IE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpOworI2VuZGlmCisjaWZkZWYgU0NU
UF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9O
RSk7CisjZW5kaWYKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2Vjbl9lbmFibGUoMCk7CisJaWYgKChzID0gdXNyc2N0cF9z
b2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVM
TCwgMCwgJmZkKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQor
CS8qIEVuYWJsZSB0aGUgZXZlbnRzIG9mIGludGVyZXN0LiAqLworCWlmICh1c3JzY3RwX3NldF9u
b25fYmxvY2tpbmcocywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRfbm9uX2Jsb2Nr
aW5nIik7CisJfQorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOworCWV2ZW50LnNl
X2Fzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisJZXZlbnQuc2Vfb24gPSAxOworCWZvciAoaSA9
IDA7IGkgPCBzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCk7IGkrKykgeworCQll
dmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQo
cywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkg
eworCQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKKwkJfQorCX0KKwltZW1zZXQo
JnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9m
YW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3Bv
cnQgPSBodG9ucyhhdG9pKGFyZ3ZbNV0pKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkOworCWlm
ICh1c3JzY3RwX2JpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5kIik7CisJfQor
CW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25u
LnNjb25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5z
Y29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4u
c2Nvbm5fcG9ydCA9IGh0b25zKGF0b2koYXJndls2XSkpOworCXNjb25uLnNjb25uX2FkZHIgPSAm
ZmQ7CisJaWYgKHVzcnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Nv
bm5lY3QiKTsKKwl9CisJZm9yICg7OykgeworI2lmZGVmIF9XSU4zMgorCQlpZiAoZ2V0c19zKGxp
bmUsIExJTkVfTEVOR1RIKSA9PSBOVUxMKSB7CisjZWxzZQorCQlpZiAoZmdldHMobGluZSwgTElO
RV9MRU5HVEgsIHN0ZGluKSA9PSBOVUxMKSB7CisjZW5kaWYKKwkJCWlmICh1c3JzY3RwX3NodXRk
b3duKHMsIFNIVVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0cF9zaHV0ZG93biIpOwor
CQkJfQorCQkJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgor
CQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQkJfQorCQkJ
YnJlYWs7CisJCX0KKwkJc25kaW5mby5zbmRfc2lkID0gMTsKKwkJc25kaW5mby5zbmRfZmxhZ3Mg
PSAwOworCQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FSRF9QUElEKTsKKwkJc25kaW5m
by5zbmRfY29udGV4dCA9IDA7CisJCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKKwkJaWYgKHVz
cnNjdHBfc2VuZHYocywgbGluZSwgc3RybGVuKGxpbmUpLCBOVUxMLCAwLCAodm9pZCAqKSZzbmRp
bmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQlwZXJyb3Io
InVzcnNjdHBfc2VuZHYiKTsKKwkJfQorCX0KKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAw
KSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7Cisj
ZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVybWluYXRlVGhyZWFkKHRpZCwgMCk7CisJV2Fp
dEZvclNpbmdsZU9iamVjdCh0aWQsIElORklOSVRFKTsKKwlpZiAoY2xvc2Vzb2NrZXQoZmQpID09
IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJy
b3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJfQorCVdTQUNsZWFudXAoKTsKKyNlbHNl
CisJcHRocmVhZF9jYW5jZWwodGlkKTsKKwlwdGhyZWFkX2pvaW4odGlkLCBOVUxMKTsKKwlpZiAo
Y2xvc2UoZmQpIDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJfQorI2VuZGlmCisJcmV0dXJu
ICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5
YWU3NzVhZDhjMmU0OGM1MzkxLi41NTQ1YWJiMzI2NWRkMTIwOGI0NjY5MmJjMzdmNWU5YzYzOGM2
MjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3Jfc2VydmVyLmMKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvcHJvZ3JhbXMvZWtyX3NlcnZlci5jCkBAIC0wLDAgKzEsMzA2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfV0lOMzIK
KyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorCisjaW5jbHVkZSA8c3Rk
aW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxh
cnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRl
IDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIFBP
UlQgNTAwMQorI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQorI2RlZmluZSBTTEVFUCAx
CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9p
ZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIK
KwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyIGJ1ZltNQVhf
UEFDS0VUX1NJWkVdOworCWNoYXIgKmR1bXBfYnVmOworCXNzaXplX3QgbGVuZ3RoOworCisjaWZk
ZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFy
ZzsKKyNlbmRpZgorCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJl
YWRfdGVzdGNhbmNlbCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhf
UEFDS0VUX1NJWkUsIDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9
IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VO
RCkpICE9IE5VTEwpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOworCQkJ
CXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCQkJfQorCQkJdXNyc2N0cF9jb25u
aW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lO
MzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0
aWMgaW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgs
IHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNpZmRl
ZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lm
ZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICop
YWRkcjsKKyNlbmRpZgorCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBs
ZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIs
ICIlcyIsIGR1bXBfYnVmKTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJ
fQorI2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09
IFNPQ0tFVF9FUlJPUikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJ
aWYgKHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsK
KyNlbmRpZgorCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50City
ZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnMsIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZv
aWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZv
IHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlmIChkYXRhKSB7CisJCWlm
IChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9m
IGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlw
cmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3
aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAg
ICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAg
ICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQs
CisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAg
ICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9
CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9jbG9zZShzKTsKKwl9CisJcmV0
dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u
KQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZv
cm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAq
YXJndltdKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3RydWN0IHNvY2thZGRyX2Nv
bm4gc2Nvbm47CisjaWZkZWYgX1dJTjMyCisJU09DS0VUIGZkOworI2Vsc2UKKwlpbnQgZmQ7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzOworI2lmZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7Cisj
ZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlXU0FEQVRBIHdz
YURhdGE7CisjZW5kaWYKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYoImVycm9yOiB0aGlz
IHByb2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUp
OworCX0KKworI2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3
c2FEYXRhKSAhPSAwKSB7CisJCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOworCQlleGl0
IChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1
dCwgZGVidWdfcHJpbnRmKTsKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAqLwor
I2lmZGVmIF9XSU4zMgorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQ
Uk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlwcmludGYoInNvY2tldCgpIGZhaWxl
ZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0s
IElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9M
RU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJ
c2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJaWYgKCFpbmV0X3B0b24oQUZf
SU5FVCwgYXJndlsxXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJcHJpbnRmKCJlcnJvcjog
aW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNpZmRlZiBf
V0lOMzIKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJiaW5kKCkgZmFp
bGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNp
biwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImJpbmQiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lm
ZGVmIEhBVkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7CisjZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNF0pKTsKKwlpZiAo
IWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzNdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlw
cmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7
CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRyICop
JnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlw
cmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJv
cigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGNvbm5lY3QoZmQs
IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAw
KSB7CisJCXBlcnJvcigiY29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vu
ZGlmCisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29u
KFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25f
ZW5hYmxlKDApOworCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZCk7CisjaWZk
ZWYgX1dJTjMyCisJdGlkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfcGFja2V0cywg
KHZvaWQgKikmZmQsIDAsIE5VTEwpOworI2Vsc2UKKwlwdGhyZWFkX2NyZWF0ZSgmdGlkLCBOVUxM
LCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkKTsKKyNlbmRpZgorCWlmICgocyA9IHVzcnNj
dHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2Is
IE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsK
Kwl9CisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJ
c2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNj
b25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlz
Y29ubi5zY29ubl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICh2b2lk
ICopJmZkOworCWlmICh1c3JzY3RwX2JpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9i
aW5kIik7CisJfQorCWlmICh1c3JzY3RwX2xpc3RlbihzLCAxKSA8IDApIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX2xpc3RlbiIpOworCX0KKwl3aGlsZSAoMSkgeworCQlpZiAodXNyc2N0cF9hY2NlcHQo
cywgTlVMTCwgTlVMTCkgPT0gTlVMTCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwor
CQl9CisJfQorCXVzcnNjdHBfY2xvc2Uocyk7CisJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3Mo
KHZvaWQgKikmZmQpOworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBf
V0lOMzIKKwkJU2xlZXAoU0xFRVAgKiAxMDAwKTsKKyNlbHNlCisJCXNsZWVwKFNMRUVQKTsKKyNl
bmRpZgorCX0KKyNpZmRlZiBfV0lOMzIKKwlUZXJtaW5hdGVUaHJlYWQodGlkLCAwKTsKKwlXYWl0
Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUpOworCWlmIChjbG9zZXNvY2tldChmZCkgPT0g
U09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJv
cjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vsc2UK
KwlwdGhyZWFkX2NhbmNlbCh0aWQpOworCXB0aHJlYWRfam9pbih0aWQsIE5VTEwpOworCWlmIChj
bG9zZShmZCkgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4g
KDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL2h0dHBfY2xpZW50LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIy
OWFlNzc1YWQ4YzJlNDhjNTM5MS4uNGRjMTk3ZjAxMzdiZDJiYWRiOWZjZmFhNzZlMmM5NmJmMmEx
OTgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9wcm9ncmFtcy9odHRwX2NsaWVudC5jCkBAIC0wLDAgKzEsMjM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEZlbGl4IFdlaW5yYW5rCisgKgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAg
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGh0
dHBfY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9wb3J0XSBbbG9jYWxfZW5j
YXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdIFt1cmldCisgKiAKKyAqIEV4YW1wbGUKKyAq
IENsaWVudDogJCAuL2h0dHBfY2xpZW50IDIxMi4yMDEuMTIxLjEwMCA4MCAwIDk4OTkgOTg5OSAv
Y2dpLWJpbi9oZQorICogICAgICAgICAgIC4vaHR0cF9jbGllbnQgMmEwMjpjNmEwOjQwMTU6MTA6
OjEwMCA4MCAwIDk4OTkgOTg5OSAvY2dpLWJpbi9oZQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNk
ZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3Rk
YXJnLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHN5cy9zb2NrZXQu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZWxz
ZQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKK2ludCBk
b25lID0gMDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3ByZWZpeCA9ICJHRVQiOworc3Rh
dGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfcG9zdGZpeCA9ICJIVFRQLzEuMFxyXG5Vc2VyLWFnZW50
OiBsaWJ1c3JzY3RwXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4iOworY2hhciByZXF1ZXN0
WzUxMl07CisKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgY2hhciogY2FkZHJfdDsKKyNlbmRpZgor
CitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBf
c29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBz
dHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlp
ZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRvbmUgPSAxOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwor
CX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGRhdGEs
ICh1bnNpZ25lZCBpbnQpZGF0YWxlbik7CisjZWxzZQorCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91
dCksIGRhdGEsIGRhdGFsZW4pIDwgMCkgeworCQkJcGVycm9yKCJ3cml0ZSIpOworCQl9CisjZW5k
aWYKKwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJp
bnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFy
dChhcCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisK
K2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNv
Y2s7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRk
cjY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZv
IHNuZGluZm87CisJaW50IHJlc3VsdDsKKworICAgIGlmIChhcmdjIDwgMykgeworICAgICAgICBw
cmludGYoIlVzYWdlOiBodHRwX2NsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxf
cG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XSBbdXJpXVxuIik7
CisgICAgICAgIHJldHVybihFWElUX0ZBSUxVUkUpOworICAgIH0KKworCXJlc3VsdCA9IDA7CisJ
aWYgKGFyZ2MgPiA0KSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1
Z19wcmludGYpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19w
cmludGYpOworCX0KKworI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7CisjZW5kaWYKKworCXVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2JsYWNraG9sZSgyKTsKKworCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lO
RVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxM
KSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJCXJlc3VsdCA9IDE7
CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhcmdjID4gMykgeworCQltZW1zZXQoKHZvaWQgKikm
YWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU42
X0xFTgorCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNl
bmRpZgorCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlhZGRyNi5zaW42X3BvcnQg
PSBodG9ucyhhdG9pKGFyZ3ZbM10pKTsKKwkJYWRkcjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7
CisJCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJCXBlcnJvcigiYmluZCIpOworCQkJ
dXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJCXJlc3VsdCA9IDI7CisJCQlnb3RvIG91dDsKKwkJfQor
CX0KKworCWlmIChhcmdjID4gNSkgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZf
SU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOworCQlpZiAo
dXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VO
Q0FQU19QT1JULCAoY29uc3Qgdm9pZCAqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCQl1
c3JzY3RwX2Nsb3NlKHNvY2spOworCQkJcmVzdWx0ID0gMzsKKwkJCWdvdG8gb3V0OworCQl9CisJ
fQorCisJaWYgKGFyZ2MgPiA2KSB7CisjaWZkZWYgX1dJTjMyCisJCV9zbnByaW50ZihyZXF1ZXN0
LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCBhcmd2WzZdLCBy
ZXF1ZXN0X3Bvc3RmaXgpOworI2Vsc2UKKwkJc25wcmludGYocmVxdWVzdCwgc2l6ZW9mKHJlcXVl
c3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwgcmVxdWVzdF9wb3N0Zml4
KTsKKyNlbmRpZgorCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCV9zbnByaW50ZihyZXF1ZXN0
LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVl
c3RfcG9zdGZpeCk7CisjZWxzZQorCQlzbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCks
ICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCk7CisjZW5k
aWYKKwl9CisKKwlwcmludGYoIlxuSFRUUCByZXF1ZXN0OlxuJXNcbiIsIHJlcXVlc3QpOworCXBy
aW50ZigiXG5IVFRQIHJlc3BvbnNlOlxuIik7CisKKwltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJYWRk
cjQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisjaWZkZWYg
SEFWRV9TSU42X0xFTgorCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworI2VuZGlmCisJYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJYWRkcjYuc2luNl9m
YW1pbHkgPSBBRl9JTkVUNjsKKwlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkp
OworCWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlmIChpbmV0X3B0
b24oQUZfSU5FVDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKKwkJaWYgKHVz
cnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsK
KwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQlyZXN1bHQgPSA0OworCQkJZ290byBvdXQ7CisJ
CX0KKwl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2Fk
ZHIpID09IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRy
ICopJmFkZHI0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3Io
InVzcnNjdHBfY29ubmVjdCIpOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJCXJlc3VsdCA9
IDU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50ZigiSWxsZWdhbCBkZXN0
aW5hdGlvbiBhZGRyZXNzXG4iKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJcmVzdWx0ID0g
NjsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KCZzbmRpbmZvLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfc25kaW5mbykpOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubCg2Myk7IC8qIFBQSUQg
Zm9yIEhUVFAvU0NUUCAqLworCS8qIHNlbmQgR0VUIHJlcXVlc3QgKi8KKwlpZiAodXNyc2N0cF9z
ZW5kdihzb2NrLCByZXF1ZXN0LCBzdHJsZW4ocmVxdWVzdCksIE5VTEwsIDAsICZzbmRpbmZvLCBz
aXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7
CisJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQly
ZXN1bHQgPSA2OworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoIWRvbmUpIHsKKyNpZmRlZiBf
V0lOMzIKKwkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQor
b3V0OgorCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJ
U2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKHJl
c3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9ydGN3ZWIuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL3J0Y3dlYi5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFk
OGMyZTQ4YzUzOTEuLjVjNTkwOGQ4NTU2NjkwMmEwZGRkNDg3ZjhhYWY5MzdiYTVjMDI5NDAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jCisrKyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL3J0Y3dlYi5jCkBAIC0wLDAgKzEsMTUyNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTItMjAxMyBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgSXJlbmUg
UnVlbmdlbGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJp
YnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNI
IERBTUFHRS4KKyAqCisgKiAkSWQ6IHJ0Y3dlYi5jLHYgMS4yNiAyMDEyLTA3LTE3IDEzOjUwOjAy
IHR1ZXhlbiBFeHAgJAorICovCisKKy8qCisgKiBnY2MgLVdhbGwgLXN0ZD1jOTkgLXBlZGFudGlj
IC1vIHJ0Y3dlYiBydGN3ZWIuYyAtbHVzcnNjdHAKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisjaW5j
bHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2luY2x1ZGUgPGNydGRi
Zy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NlbGVj
dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNp
bmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW50
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+
CisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIExJTkVfTEVOR1RIICgxMDI0KQorI2Rl
ZmluZSBCVUZGRVJfU0laRSAoMTw8MTYpCisjZGVmaW5lIE5VTUJFUl9PRl9DSEFOTkVMUyAoMTAw
KQorI2RlZmluZSBOVU1CRVJfT0ZfU1RSRUFNUyAoMTAwKQorCisjZGVmaW5lIERBVEFfQ0hBTk5F
TF9QUElEX0NPTlRST0wgICA1MAorI2RlZmluZSBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkcg
NTEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX1BQSURfQklOQVJZICAgIDUyCisKKyNkZWZpbmUgREFU
QV9DSEFOTkVMX0NMT1NFRCAgICAgMAorI2RlZmluZSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORyAx
CisjZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVOICAgICAgIDIKKyNkZWZpbmUgREFUQV9DSEFOTkVM
X0NMT1NJTkcgICAgMworCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUSAweDAw
MDAwMDAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUCAweDAwMDAwMDAyCisj
ZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSyAweDAwMDAwMDA0CisKK3N0cnVjdCBj
aGFubmVsIHsKKwl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBwcl92YWx1ZTsKKwl1aW50MTZfdCBw
cl9wb2xpY3k7CisJdWludDE2X3QgaV9zdHJlYW07CisJdWludDE2X3Qgb19zdHJlYW07CisJdWlu
dDhfdCB1bm9yZGVyZWQ7CisJdWludDhfdCBzdGF0ZTsKKwl1aW50MzJfdCBmbGFnczsKK307CisK
K3N0cnVjdCBwZWVyX2Nvbm5lY3Rpb24geworCXN0cnVjdCBjaGFubmVsIGNoYW5uZWxzW05VTUJF
Ul9PRl9DSEFOTkVMU107CisJc3RydWN0IGNoYW5uZWwgKmlfc3RyZWFtX2NoYW5uZWxbTlVNQkVS
X09GX1NUUkVBTVNdOworCXN0cnVjdCBjaGFubmVsICpvX3N0cmVhbV9jaGFubmVsW05VTUJFUl9P
Rl9TVFJFQU1TXTsKKwl1aW50MTZfdCBvX3N0cmVhbV9idWZmZXJbTlVNQkVSX09GX1NUUkVBTVNd
OworCXVpbnQzMl90IG9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOworI2lmZGVmIF9XSU4zMgorCUNS
SVRJQ0FMX1NFQ1RJT04gbXV0ZXg7CisjZWxzZQorCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKKyNl
bmRpZgorCXN0cnVjdCBzb2NrZXQgKnNvY2s7Cit9IHBlZXJfY29ubmVjdGlvbjsKKworI2RlZmlu
ZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICAwCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVO
X1JFU1BPTlNFIDEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0FDSyAgICAgICAgICAgMgorCisjZGVm
aW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRSAgICAgICAgICAgICAgICAwCisjZGVmaW5lIERBVEFf
Q0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gICAgICAgICAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9V
TlJFTElBQkxFICAgICAgICAgICAgICAyCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JF
TElBQkxFX1JFWE1JVCAzCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJ
TUVEICA0CisKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9XRUQg
MHgwMDAxCisKKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRl
X18oKHBhY2tlZCkpCisjZWxzZQorI3ByYWdtYSBwYWNrIChwdXNoLCAxKQorI2RlZmluZSBTQ1RQ
X1BBQ0tFRAorI2VuZGlmCisKK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0
IHsKKwl1aW50OF90IG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICovCisJ
dWludDhfdCBjaGFubmVsX3R5cGU7CisJdWludDE2X3QgZmxhZ3M7CisJdWludDE2X3QgcmVsaWFi
aWxpdHlfcGFyYW1zOworCWludDE2X3QgcHJpb3JpdHk7CisJY2hhciBsYWJlbFtdOworfSBTQ1RQ
X1BBQ0tFRDsKKworc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlIHsKKwl1
aW50OF90ICBtc2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX09QRU5fUkVTUE9OU0UgKi8KKwl1aW50
OF90ICBlcnJvcjsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCByZXZlcnNlX3N0cmVhbTsK
K30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrIHsKKwl1aW50
OF90ICBtc2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX0FDSyAqLworfSBTQ1RQX1BBQ0tFRDsKKwor
I2lmZGVmIF9XSU4zMgorI3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgorCisjdW5kZWYgU0NUUF9Q
QUNLRUQKKworc3RhdGljIHZvaWQKK2xvY2tfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nv
bm5lY3Rpb24gKik7CisKK3N0YXRpYyB2b2lkCit1bmxvY2tfcGVlcl9jb25uZWN0aW9uKHN0cnVj
dCBwZWVyX2Nvbm5lY3Rpb24gKik7CisKK3N0YXRpYyB2b2lkCitpbml0X3BlZXJfY29ubmVjdGlv
bihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKwl1aW50MzJfdCBpOworCXN0cnVjdCBj
aGFubmVsICpjaGFubmVsOworCisjaWZkZWYgX1dJTjMyCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2Vj
dGlvbigmKHBjLT5tdXRleCkpOworI2Vsc2UKKwlwdGhyZWFkX211dGV4X2luaXQoJnBjLT5tdXRl
eCwgTlVMTCk7CisjZW5kaWYKKwlsb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7CisJZm9yIChpID0g
MDsgaSA8IE5VTUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmKHBjLT5jaGFu
bmVsc1tpXSk7CisJCWNoYW5uZWwtPmlkID0gaTsKKwkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NI
QU5ORUxfQ0xPU0VEOworCQljaGFubmVsLT5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsK
KwkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOworCQljaGFubmVsLT5pX3N0cmVhbSA9IDA7CisJCWNo
YW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJY2hhbm5l
bC0+ZmxhZ3MgPSAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX1NUUkVBTVM7IGkr
KykgeworCQlwYy0+aV9zdHJlYW1fY2hhbm5lbFtpXSA9IE5VTEw7CisJCXBjLT5vX3N0cmVhbV9j
aGFubmVsW2ldID0gTlVMTDsKKwkJcGMtPm9fc3RyZWFtX2J1ZmZlcltpXSA9IDA7CisJfQorCXBj
LT5vX3N0cmVhbV9idWZmZXJfY291bnRlciA9IDA7CisJcGMtPnNvY2sgPSBOVUxMOworCXVubG9j
a19wZWVyX2Nvbm5lY3Rpb24ocGMpOworfQorCitzdGF0aWMgdm9pZAorbG9ja19wZWVyX2Nvbm5l
Y3Rpb24oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisjaWZkZWYgX1dJTjMyCisJRW50
ZXJDcml0aWNhbFNlY3Rpb24oJihwYy0+bXV0ZXgpKTsKKyNlbHNlCisJcHRocmVhZF9tdXRleF9s
b2NrKCZwYy0+bXV0ZXgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkCit1bmxvY2tfcGVlcl9j
b25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworI2lmZGVmIF9XSU4zMgor
CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYocGMtPm11dGV4KSk7CisjZWxzZQorCXB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCZwYy0+bXV0ZXgpOworI2VuZGlmCit9CisKK3N0YXRpYyBzdHJ1Y3QgY2hhbm5l
bCAqCitmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMs
IHVpbnQxNl90IGlfc3RyZWFtKQoreworCWlmIChpX3N0cmVhbSA8IE5VTUJFUl9PRl9TVFJFQU1T
KSB7CisJCXJldHVybiAocGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJlYW1dKTsKKwl9IGVsc2Ug
eworCQlyZXR1cm4gKE5VTEwpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBjaGFubmVsICoKK2Zp
bmRfY2hhbm5lbF9ieV9vX3N0cmVhbShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdWludDE2
X3Qgb19zdHJlYW0pCit7CisJaWYgKG9fc3RyZWFtIDwgTlVNQkVSX09GX1NUUkVBTVMpIHsKKwkJ
cmV0dXJuIChwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0pOworCX0gZWxzZSB7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNoYW5uZWwgKgorZmluZF9mcmVl
X2NoYW5uZWwoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJdWludDMyX3QgaTsKKwor
CWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAocGMtPmNo
YW5uZWxzW2ldLnN0YXRlID09IERBVEFfQ0hBTk5FTF9DTE9TRUQpIHsKKwkJCWJyZWFrOworCQl9
CisJfQorCWlmIChpID09IE5VTUJFUl9PRl9DSEFOTkVMUykgeworCQlyZXR1cm4gKE5VTEwpOwor
CX0gZWxzZSB7CisJCXJldHVybiAoJihwYy0+Y2hhbm5lbHNbaV0pKTsKKwl9Cit9CisKK3N0YXRp
YyB1aW50MTZfdAorZmluZF9mcmVlX29fc3RyZWFtKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBj
KQoreworCXN0cnVjdCBzY3RwX3N0YXR1cyBzdGF0dXM7CisJdWludDMyX3QgaSwgbGltaXQ7CisJ
c29ja2xlbl90IGxlbjsKKworCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3N0
YXR1cyk7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwYy0+c29jaywgSVBQUk9UT19TQ1RQLCBT
Q1RQX1NUQVRVUywgJnN0YXR1cywgJmxlbikgPCAwKSB7CisJCXBlcnJvcigiZ2V0c29ja29wdCIp
OworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc3RhdHVzLnNzdGF0X291dHN0cm1zIDwgTlVNQkVS
X09GX1NUUkVBTVMpIHsKKwkJbGltaXQgPSBzdGF0dXMuc3N0YXRfb3V0c3RybXM7CisJfSBlbHNl
IHsKKwkJbGltaXQgPSBOVU1CRVJfT0ZfU1RSRUFNUzsKKwl9CisJLyogc3RyZWFtIGlkIDAgaXMg
cmVzZXJ2ZWQgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGltaXQ7IGkrKykgeworCQlpZiAocGMtPm9f
c3RyZWFtX2NoYW5uZWxbaV0gPT0gTlVMTCkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGkg
PT0gbGltaXQpIHsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKCh1aW50MTZf
dClpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X21vcmVfb19zdHJlYW1zKHN0cnVj
dCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworCXN0cnVjdCBzY3RwX3N0YXR1cyBzdGF0dXM7CisJ
c3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgc2FzOworCXVpbnQzMl90IGksIG9fc3RyZWFtc19uZWVk
ZWQ7CisJc29ja2xlbl90IGxlbjsKKworCW9fc3RyZWFtc19uZWVkZWQgPSAwOworCWZvciAoaSA9
IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoKHBjLT5jaGFubmVsc1tp
XS5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgJiYKKwkJICAgIChwYy0+Y2hhbm5l
bHNbaV0ub19zdHJlYW0gPT0gMCkpIHsKKwkJCW9fc3RyZWFtc19uZWVkZWQrKzsKKwkJfQorCX0K
KwlsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCWlmICh1c3Jz
Y3RwX2dldHNvY2tvcHQocGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0
dXMsICZsZW4pIDwgMCkgeworCQlwZXJyb3IoImdldHNvY2tvcHQiKTsKKwkJcmV0dXJuOworCX0K
KwlpZiAoc3RhdHVzLnNzdGF0X291dHN0cm1zICsgb19zdHJlYW1zX25lZWRlZCA+IE5VTUJFUl9P
Rl9TVFJFQU1TKSB7CisJCW9fc3RyZWFtc19uZWVkZWQgPSBOVU1CRVJfT0ZfU1RSRUFNUyAtIHN0
YXR1cy5zc3RhdF9vdXRzdHJtczsKKwl9CisJaWYgKG9fc3RyZWFtc19uZWVkZWQgPT0gMCkgewor
CQlyZXR1cm47CisJfQorCW1lbXNldCgmc2FzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYWRkX3N0
cmVhbXMpKTsKKwlzYXMuc2FzX2luc3RybXMgPSAwOworCXNhcy5zYXNfb3V0c3RybXMgPSAodWlu
dDE2X3Qpb19zdHJlYW1zX25lZWRlZDsgLyogWFhYIGVyb3IgaGFuZGxpbmcgKi8KKwlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQUREX1NUUkVBTVMs
ICZzYXMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zKSkgPCAwKSB7
CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQK
K3NlbmRfb3Blbl9yZXF1ZXN0X21lc3NhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgdWludDE2X3Qg
b19zdHJlYW0sIHVpbnQ4X3QgdW5vcmRlcmVkLCB1aW50MTZfdCBwcl9wb2xpY3ksIHVpbnQzMl90
IHByX3ZhbHVlKQoreworCS8qIFhYWDogVGhpcyBzaG91bGQgYmUgZW5jb2RlZCBpbiBhIGJldHRl
ciB3YXkgKi8KKwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCByZXE7CisJ
c3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCisJbWVtc2V0KCZyZXEsIDAsIHNpemVvZihz
dHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCkpOworCXJlcS5tc2dfdHlwZSA9
IERBVEFfQ0hBTk5FTF9PUEVOX1JFUVVFU1Q7CisJc3dpdGNoIChwcl9wb2xpY3kpIHsKKwljYXNl
IFNDVFBfUFJfU0NUUF9OT05FOgorCQkvKiBYWFg6IFdoYXQgYWJvdXQgREFUQV9DSEFOTkVMX1JF
TElBQkxFX1NUUkVBTSAqLworCQlyZXEuY2hhbm5lbF90eXBlID0gREFUQV9DSEFOTkVMX1JFTElB
QkxFOworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU0NUUF9UVEw6CisJCS8qIFhYWDogV2hhdCBh
Ym91dCBEQVRBX0NIQU5ORUxfVU5SRUxJQUJMRSAqLworCQlyZXEuY2hhbm5lbF90eXBlID0gREFU
QV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFCTEVfVElNRUQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9Q
Ul9TQ1RQX1JUWDoKKwkJcmVxLmNoYW5uZWxfdHlwZSA9IERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JF
TElBQkxFX1JFWE1JVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuICgwKTsKKwl9CisJ
cmVxLmZsYWdzID0gaHRvbnMoMCk7CisJaWYgKHVub3JkZXJlZCkgeworCQlyZXEuZmxhZ3MgfD0g
aHRvbnMoREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9XRUQpOworCX0KKwlyZXEu
cmVsaWFiaWxpdHlfcGFyYW1zID0gaHRvbnMoKHVpbnQxNl90KXByX3ZhbHVlKTsgLyogWFhYIFdo
eSAxNi1iaXQgKi8KKwlyZXEucHJpb3JpdHkgPSBodG9ucygwKTsgLyogWFhYOiBhZGQgc3VwcG9y
dCAqLworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pKTsK
KwlzbmRpbmZvLnNuZF9zaWQgPSBvX3N0cmVhbTsKKwlzbmRpbmZvLnNuZF9mbGFncyA9IFNDVFBf
RU9SOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NIQU5ORUxfUFBJRF9DT05UUk9M
KTsKKwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLAorCSAgICAgICAgICAgICAgICAgICZyZXEsIHNp
emVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCksCisJICAgICAgICAg
ICAgICAgICAgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICAgICAmc25kaW5mbywgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksCisJICAgICAgICAgICAgICAgICAgU0NUUF9T
RU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJcGVycm9yKCJzY3RwX3NlbmR2Iik7CisJCXJldHVy
biAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgxKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3Nl
bmRfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQxNl90IG9f
c3RyZWFtLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwkvKiBYWFg6IFRoaXMgc2hvdWxkIGJlIGVu
Y29kZWQgaW4gYSBiZXR0ZXIgd2F5ICovCisJc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVu
X3Jlc3BvbnNlIHJzcDsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisKKwltZW1zZXQo
JnJzcCwgMCwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSkp
OworCXJzcC5tc2dfdHlwZSA9IERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BPTlNFOworCXJzcC5lcnJv
ciA9IDA7CisJcnNwLmZsYWdzID0gaHRvbnMoMCk7CisJcnNwLnJldmVyc2Vfc3RyZWFtID0gaHRv
bnMoaV9zdHJlYW0pOworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3Nu
ZGluZm8pKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSBvX3N0cmVhbTsKKwlzbmRpbmZvLnNuZF9mbGFn
cyA9IFNDVFBfRU9SOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NIQU5ORUxfUFBJ
RF9DT05UUk9MKTsKKwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLAorCSAgICAgICAgICAgICAgICAg
ICZyc3AsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UpLAor
CSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisJICAgICAgICAgICAgICAgICAgJnNuZGluZm8s
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLAorCSAgICAgICAgICAgICAg
ICAgIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCXBlcnJvcigic2N0cF9zZW5kdiIp
OworCQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitzdGF0
aWMgaW50CitzZW5kX29wZW5fYWNrX21lc3NhZ2Uoc3RydWN0IHNvY2tldCAqc29jaywgdWludDE2
X3Qgb19zdHJlYW0pCit7CisJLyogWFhYOiBUaGlzIHNob3VsZCBiZSBlbmNvZGVkIGluIGEgYmV0
dGVyIHdheSAqLworCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrIGFjazsKKwlzdHJ1Y3Qg
c2N0cF9zbmRpbmZvIHNuZGluZm87CisKKwltZW1zZXQoJmFjaywgMCwgc2l6ZW9mKHN0cnVjdCBy
dGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSk7CisJYWNrLm1zZ190eXBlID0gREFUQV9DSEFOTkVMX0FD
SzsKKwltZW1zZXQoJnNuZGluZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7CisJ
c25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07CisJc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VP
UjsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTCk7
CisJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywKKwkgICAgICAgICAgICAgICAgICAmYWNrLCBzaXpl
b2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spLAorCSAgICAgICAgICAgICAgICAgIE5V
TEwsIDAsCisJICAgICAgICAgICAgICAgICAgJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX3NuZGluZm8pLAorCSAgICAgICAgICAgICAgICAgIFNDVFBfU0VORFZfU05ESU5G
TywgMCkgPCAwKSB7CisJCXBlcnJvcigic2N0cF9zZW5kdiIpOworCQlyZXR1cm4gKDApOworCX0g
ZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2VuZF9kZWZlcnJl
ZF9tZXNzYWdlcyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKwl1aW50MzJfdCBpOwor
CXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9D
SEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmKHBjLT5jaGFubmVsc1tpXSk7CisJCWlmIChj
aGFubmVsLT5mbGFncyAmIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUSkgeworCQkJaWYgKHNl
bmRfb3Blbl9yZXF1ZXN0X21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwtPm9fc3RyZWFtLCBjaGFu
bmVsLT51bm9yZGVyZWQsIGNoYW5uZWwtPnByX3BvbGljeSwgY2hhbm5lbC0+cHJfdmFsdWUpKSB7
CisJCQkJY2hhbm5lbC0+ZmxhZ3MgJj0gfkRBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUTsKKwkJ
CX0gZWxzZSB7CisJCQkJaWYgKGVycm5vICE9IEVBR0FJTikgeworCQkJCQkvKiBYWFg6IGVycm9y
IGhhbmRsaW5nICovCisJCQkJfQorCQkJfQorCQl9CisJCWlmIChjaGFubmVsLT5mbGFncyAmIERB
VEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUCkgeworCQkJaWYgKHNlbmRfb3Blbl9yZXNwb25zZV9t
ZXNzYWdlKHBjLT5zb2NrLCBjaGFubmVsLT5vX3N0cmVhbSwgY2hhbm5lbC0+aV9zdHJlYW0pKSB7
CisJCQkJY2hhbm5lbC0+ZmxhZ3MgJj0gfkRBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUDsKKwkJ
CX0gZWxzZSB7CisJCQkJaWYgKGVycm5vICE9IEVBR0FJTikgeworCQkJCQkvKiBYWFg6IGVycm9y
IGhhbmRsaW5nICovCisJCQkJfQorCQkJfQorCQl9CisJCWlmIChjaGFubmVsLT5mbGFncyAmIERB
VEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSykgeworCQkJaWYgKHNlbmRfb3Blbl9hY2tfbWVzc2Fn
ZShwYy0+c29jaywgY2hhbm5lbC0+b19zdHJlYW0pKSB7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgJj0g
fkRBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGVycm5v
ICE9IEVBR0FJTikgeworCQkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nICovCisJCQkJfQorCQkJ
fQorCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBjaGFubmVsICoKK29wZW5f
Y2hhbm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdWludDhfdCB1bm9yZGVyZWQsIHVp
bnQxNl90IHByX3BvbGljeSwgdWludDMyX3QgcHJfdmFsdWUpCit7CisJc3RydWN0IGNoYW5uZWwg
KmNoYW5uZWw7CisJdWludDE2X3Qgb19zdHJlYW07CisKKwlpZiAoKHByX3BvbGljeSAhPSBTQ1RQ
X1BSX1NDVFBfTk9ORSkgJiYKKwkgICAgKHByX3BvbGljeSAhPSBTQ1RQX1BSX1NDVFBfVFRMKSAm
JgorCSAgICAocHJfcG9saWN5ICE9IFNDVFBfUFJfU0NUUF9SVFgpKSB7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCWlmICgodW5vcmRlcmVkICE9IDApICYmICh1bm9yZGVyZWQgIT0gMSkpIHsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChwcl9wb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX05PTkUp
ICYmIChwcl92YWx1ZSAhPSAwKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKGNoYW5u
ZWwgPSBmaW5kX2ZyZWVfY2hhbm5lbChwYykpID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0ocGMpOworCWNoYW5uZWwtPnN0YXRl
ID0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkc7CisJY2hhbm5lbC0+dW5vcmRlcmVkID0gdW5vcmRl
cmVkOworCWNoYW5uZWwtPnByX3BvbGljeSA9IHByX3BvbGljeTsKKwljaGFubmVsLT5wcl92YWx1
ZSA9IHByX3ZhbHVlOworCWNoYW5uZWwtPm9fc3RyZWFtID0gb19zdHJlYW07CisJY2hhbm5lbC0+
ZmxhZ3MgPSAwOworCWlmIChvX3N0cmVhbSA9PSAwKSB7CisJCXJlcXVlc3RfbW9yZV9vX3N0cmVh
bXMocGMpOworCX0gZWxzZSB7CisJCWlmIChzZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLT5z
b2NrLCBvX3N0cmVhbSwgdW5vcmRlcmVkLCBwcl9wb2xpY3ksIHByX3ZhbHVlKSkgeworCQkJcGMt
Pm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJfSBlbHNlIHsKKwkJCWlm
IChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQlwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0g
PSBjaGFubmVsOworCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5E
X1JFUTsKKwkJCX0gZWxzZSB7CisJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xP
U0VEOworCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJY2hhbm5lbC0+cHJfcG9saWN5
ID0gMDsKKwkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJY2hhbm5lbC0+b19zdHJlYW0g
PSAwOworCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwkJCQljaGFubmVsID0gTlVMTDsKKwkJCX0K
KwkJfQorCX0KKwlyZXR1cm4gKGNoYW5uZWwpOworfQorCitzdGF0aWMgaW50CitzZW5kX3VzZXJf
bWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IGNoYW5uZWwgKmNoYW5u
ZWwsIGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpCit7CisJc3RydWN0IHNjdHBfc2VuZHZf
c3BhIHNwYTsKKworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJ
aWYgKChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BFTikgJiYKKwkgICAgKGNoYW5u
ZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSkgeworCQkvKiBYWFg6IFdoYXQg
dG8gZG8gaW4gb3RoZXIgc3RhdGVzICovCisJCXJldHVybiAoMCk7CisJfQorCisJbWVtc2V0KCZz
cGEsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpKTsKKwlzcGEuc2VuZHZfc25kaW5m
by5zbmRfc2lkID0gY2hhbm5lbC0+b19zdHJlYW07CisJaWYgKChjaGFubmVsLT5zdGF0ZSA9PSBE
QVRBX0NIQU5ORUxfT1BFTikgJiYKKwkgICAgKGNoYW5uZWwtPnVub3JkZXJlZCkpIHsKKwkJc3Bh
LnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzID0gU0NUUF9FT1IgfCBTQ1RQX1VOT1JERVJFRDsKKwl9
IGVsc2UgeworCQlzcGEuc2VuZHZfc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKKwl9CisJ
c3BhLnNlbmR2X3NuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NIQU5ORUxfUFBJRF9ET01T
VFJJTkcpOworCXNwYS5zZW5kdl9mbGFncyA9IFNDVFBfU0VORF9TTkRJTkZPX1ZBTElEOworCWlm
ICgoY2hhbm5lbC0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9UVEwpIHx8CisJICAgIChjaGFu
bmVsLT5wcl9wb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX1JUWCkpIHsKKwkJc3BhLnNlbmR2X3ByaW5m
by5wcl9wb2xpY3kgPSBjaGFubmVsLT5wcl9wb2xpY3k7CisJCXNwYS5zZW5kdl9wcmluZm8ucHJf
dmFsdWUgPSBjaGFubmVsLT5wcl92YWx1ZTsKKwkJc3BhLnNlbmR2X2ZsYWdzIHw9IFNDVFBfU0VO
RF9QUklORk9fVkFMSUQ7CisJfQorCWlmICh1c3JzY3RwX3NlbmR2KHBjLT5zb2NrLAorCSAgICAg
ICAgICAgICAgICAgIG1lc3NhZ2UsIGxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICBOVUxMLCAw
LAorCSAgICAgICAgICAgICAgICAgICZzcGEsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NlbmR2X3NwYSksCisJICAgICAgICAgICAgICAgICAgU0NUUF9TRU5EVl9TUEEsIDApIDwgMCkg
eworCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQly
ZXR1cm4gKDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X291dGdvaW5nX3N0cmVhbShz
dHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdWludDE2X3Qgb19zdHJlYW0pCit7CisJdWludDMy
X3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXI7IGkr
KykgeworCQlpZiAocGMtPm9fc3RyZWFtX2J1ZmZlcltpXSA9PSBvX3N0cmVhbSkgeworCQkJcmV0
dXJuOworCQl9CisJfQorCXBjLT5vX3N0cmVhbV9idWZmZXJbcGMtPm9fc3RyZWFtX2J1ZmZlcl9j
b3VudGVyKytdID0gb19zdHJlYW07CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2VuZF9v
dXRnb2luZ19zdHJlYW1fcmVzZXQoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJc3Ry
dWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqc3JzOworCXVpbnQzMl90IGk7CisJc2l6ZV90IGxlbjsK
KworCWlmIChwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXIgPT0gMCkgeworCQlyZXR1cm47CisJ
fQorCWxlbiA9IHNpemVvZihzY3RwX2Fzc29jX3QpICsgKDIgKyBwYy0+b19zdHJlYW1fYnVmZmVy
X2NvdW50ZXIpICogc2l6ZW9mKHVpbnQxNl90KTsKKwlzcnMgPSAoc3RydWN0IHNjdHBfcmVzZXRf
c3RyZWFtcyAqKW1hbGxvYyhsZW4pOworCWlmIChzcnMgPT0gTlVMTCkgeworCQlyZXR1cm47CisJ
fQorCW1lbXNldChzcnMsIDAsIGxlbik7CisJc3JzLT5zcnNfZmxhZ3MgPSBTQ1RQX1NUUkVBTV9S
RVNFVF9PVVRHT0lORzsKKwlzcnMtPnNyc19udW1iZXJfc3RyZWFtcyA9IHBjLT5vX3N0cmVhbV9i
dWZmZXJfY291bnRlcjsKKwlmb3IgKGkgPSAwOyBpIDwgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3Vu
dGVyOyBpKyspIHsKKwkJc3JzLT5zcnNfc3RyZWFtX2xpc3RbaV0gPSBwYy0+b19zdHJlYW1fYnVm
ZmVyW2ldOworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfUkVTRVRfU1RSRUFNUywgc3JzLCAoc29ja2xlbl90KWxlbikgPCAwKSB7CisJCXBl
cnJvcigic2V0c29ja29wdCIpOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBwYy0+b19z
dHJlYW1fYnVmZmVyX2NvdW50ZXI7IGkrKykgeworCQkJc3JzLT5zcnNfc3RyZWFtX2xpc3RbaV0g
PSAwOworCQl9CisJCXBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlciA9IDA7CisJfQorCWZyZWUo
c3JzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZV9jaGFubmVsKHN0cnVjdCBw
ZWVyX2Nvbm5lY3Rpb24gKnBjLCBzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbCkKK3sKKwlpZiAoY2hh
bm5lbCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0YXRlICE9IERB
VEFfQ0hBTk5FTF9PUEVOKSB7CisJCXJldHVybjsKKwl9CisJcmVzZXRfb3V0Z29pbmdfc3RyZWFt
KHBjLCBjaGFubmVsLT5vX3N0cmVhbSk7CisJc2VuZF9vdXRnb2luZ19zdHJlYW1fcmVzZXQocGMp
OworCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NJTkc7CisJcmV0dXJuOworfQor
CitzdGF0aWMgdm9pZAoraGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nv
bm5lY3Rpb24gKnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGN3ZWJf
ZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICpyZXEsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBp
X3N0cmVhbSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKwl1aW50MzJfdCBwcl92YWx1
ZTsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDE2X3Qgb19zdHJlYW07CisJdWludDhfdCB1
bm9yZGVyZWQ7CisKKwlpZiAoKGNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMs
IGlfc3RyZWFtKSkpIHsKKwkJcHJpbnRmKCJoYW5kbGVfb3Blbl9yZXF1ZXN0X21lc3NhZ2U6IGNo
YW5uZWwgJWQgaXMgaW4gc3RhdGUgJWQgaW5zdGVhZCBvZiBDTE9TRUQuXG4iLAorCQkgICAgICAg
Y2hhbm5lbC0+aWQsIGNoYW5uZWwtPnN0YXRlKTsKKwkJLyogWFhYOiBzb21lIGVycm9yIGhhbmRs
aW5nICovCisJCXJldHVybjsKKwl9CisJaWYgKChjaGFubmVsID0gZmluZF9mcmVlX2NoYW5uZWwo
cGMpKSA9PSBOVUxMKSB7CisJCS8qIFhYWDogc29tZSBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1
cm47CisJfQorCXN3aXRjaCAocmVxLT5jaGFubmVsX3R5cGUpIHsKKwljYXNlIERBVEFfQ0hBTk5F
TF9SRUxJQUJMRToKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCWJyZWFrOwor
CS8qIFhYWCBEb2Vzbid0IG1ha2Ugc2Vuc2UgKi8KKwljYXNlIERBVEFfQ0hBTk5FTF9SRUxJQUJM
RV9TVFJFQU06CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOworCQlicmVhazsKKwkv
KiBYWFggRG9lc24ndCBtYWtlIHNlbnNlICovCisJY2FzZSBEQVRBX0NIQU5ORUxfVU5SRUxJQUJM
RToKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX1RUTDsKKwkJYnJlYWs7CisJY2FzZSBEQVRB
X0NIQU5ORUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQ6CisJCXByX3BvbGljeSA9IFNDVFBfUFJf
U0NUUF9SVFg7CisJCWJyZWFrOworCWNhc2UgREFUQV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFCTEVf
VElNRUQ6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9UVEw7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOworCQkvKiBYWFggZXJyb3IgaGFu
ZGxpbmcgKi8KKwkJYnJlYWs7CisJfQorCXByX3ZhbHVlID0gbnRvaHMocmVxLT5yZWxpYWJpbGl0
eV9wYXJhbXMpOworCWlmIChudG9ocyhyZXEtPmZsYWdzKSAmIERBVEFfQ0hBTk5FTF9GTEFHX09V
VF9PRl9PUkRFUl9BTExPV0VEKSB7CisJCXVub3JkZXJlZCA9IDE7CisJfSBlbHNlIHsKKwkJdW5v
cmRlcmVkID0gMDsKKwl9CisJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0ocGMpOworCWNo
YW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkc7CisJY2hhbm5lbC0+dW5vcmRl
cmVkID0gdW5vcmRlcmVkOworCWNoYW5uZWwtPnByX3BvbGljeSA9IHByX3BvbGljeTsKKwljaGFu
bmVsLT5wcl92YWx1ZSA9IHByX3ZhbHVlOworCWNoYW5uZWwtPmlfc3RyZWFtID0gaV9zdHJlYW07
CisJY2hhbm5lbC0+b19zdHJlYW0gPSBvX3N0cmVhbTsKKwljaGFubmVsLT5mbGFncyA9IDA7CisJ
cGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJlYW1dID0gY2hhbm5lbDsKKwlpZiAob19zdHJlYW0g
PT0gMCkgeworCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKKwl9IGVsc2UgeworCQlpZiAo
c2VuZF9vcGVuX3Jlc3BvbnNlX21lc3NhZ2UocGMtPnNvY2ssIG9fc3RyZWFtLCBpX3N0cmVhbSkp
IHsKKwkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7CisJCX0gZWxz
ZSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgfD0gREFU
QV9DSEFOTkVMX0ZMQUdTX1NFTkRfUlNQOworCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3Ry
ZWFtXSA9IGNoYW5uZWw7CisJCQl9IGVsc2UgeworCQkJCS8qIFhYWDogU2lnbmFsIGVycm9yIHRv
IHRoZSBvdGhlciBlbmQuICovCisJCQkJcGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJlYW1dID0g
TlVMTDsKKwkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TRUQ7CisJCQkJY2hh
bm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQljaGFubmVsLT5wcl9wb2xpY3kgPSAwOworCQkJCWNo
YW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJCQljaGFubmVsLT5pX3N0cmVhbSA9IDA7CisJCQkJY2hh
bm5lbC0+b19zdHJlYW0gPSAwOworCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwkJCX0KKwkJfQor
CX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2Uoc3RydWN0
IHBlZXJfY29ubmVjdGlvbiAqcGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSAqcnNwLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwl1aW50
MTZfdCBvX3N0cmVhbTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCW9fc3RyZWFtID0g
bnRvaHMocnNwLT5yZXZlcnNlX3N0cmVhbSk7CisJY2hhbm5lbCA9IGZpbmRfY2hhbm5lbF9ieV9v
X3N0cmVhbShwYywgb19zdHJlYW0pOworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJLyogWFhY
OiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICovCisJCXByaW50ZigiaGFuZGxlX29wZW5fcmVzcG9u
c2VfbWVzc2FnZTogQ2FuJ3QgZmluZCBjaGFubmVsIGZvciBvdXRnb2luZyBzdGVhbSAlZC5cbiIs
IG9fc3RyZWFtKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9D
SEFOTkVMX0NPTk5FQ1RJTkcpIHsKKwkJLyogWFhYOiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICov
CisJCXByaW50ZigiaGFuZGxlX29wZW5fcmVzcG9uc2VfbWVzc2FnZTogQ2hhbm5lbCB3aXRoIGlk
ICVkIGZvciBvdXRnb2luZyBzdGVhbSAlZCBpcyBpbiBzdGF0ZSAlZC5cbiIsIGNoYW5uZWwtPmlk
LCBvX3N0cmVhbSwgY2hhbm5lbC0+c3RhdGUpOworCQlyZXR1cm47CisJfQorCWlmIChmaW5kX2No
YW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKSkgeworCQkvKiBYWFg6IGltcHJvdmUgZXJy
b3IgaGFuZGxpbmcgKi8KKwkJcHJpbnRmKCJoYW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlOiBD
aGFubmVsIGNvbGxpc2lvbiBmb3IgY2hhbm5lbCB3aXRoIGlkICVkIGFuZCBzdHJlYW1zIChpbi9v
dXQpID0gKCVkLyVkKS5cbiIsIGNoYW5uZWwtPmlkLCBpX3N0cmVhbSwgb19zdHJlYW0pOworCQly
ZXR1cm47CisJfQorCWNoYW5uZWwtPmlfc3RyZWFtID0gaV9zdHJlYW07CisJY2hhbm5lbC0+c3Rh
dGUgPSBEQVRBX0NIQU5ORUxfT1BFTjsKKwlwYy0+aV9zdHJlYW1fY2hhbm5lbFtpX3N0cmVhbV0g
PSBjaGFubmVsOworCWlmIChzZW5kX29wZW5fYWNrX21lc3NhZ2UocGMtPnNvY2ssIG9fc3RyZWFt
KSkgeworCQljaGFubmVsLT5mbGFncyA9IDA7CisJfSBlbHNlIHsKKwkJY2hhbm5lbC0+ZmxhZ3Mg
fD0gREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfQUNLOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRp
YyB2b2lkCitoYW5kbGVfb3Blbl9hY2tfbWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpw
YywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNr
ICphY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCB1aW50MTZfdCBp
X3N0cmVhbSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKworCWNoYW5uZWwgPSBmaW5k
X2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKTsKKwlpZiAoY2hhbm5lbCA9PSBOVUxM
KSB7CisJCS8qIFhYWDogc29tZSBlcnJvciBoYW5kbGluZyAqLworCQlyZXR1cm47CisJfQorCWlm
IChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfT1BFTikgeworCQlyZXR1cm47CisJfQor
CWlmIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgeworCQkvKiBY
WFg6IGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybjsKKwl9CisJY2hhbm5lbC0+c3RhdGUgPSBE
QVRBX0NIQU5ORUxfT1BFTjsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfdW5r
bm93bl9tZXNzYWdlKGNoYXIgKm1zZywgc2l6ZV90IGxlbmd0aCwgdWludDE2X3QgaV9zdHJlYW0p
Cit7CisJLyogWFhYOiBTZW5kIGFuIGVycm9yIG1lc3NhZ2UgKi8KKwlyZXR1cm47Cit9CisKK3N0
YXRpYyB2b2lkCitoYW5kbGVfZGF0YV9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBj
LAorICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQx
Nl90IGlfc3RyZWFtKQoreworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCisJY2hhbm5lbCA9
IGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgaV9zdHJlYW0pOworCWlmIChjaGFubmVsID09
IE5VTEwpIHsKKwkJLyogWFhYOiBTb21lIGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybjsKKwl9
CisJaWYgKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSB7CisJCS8q
IEltcGxpY2l0IEFDSyAqLworCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9PUEVOOwor
CX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX09QRU4pIHsKKwkJLyogWFhY
OiBXaGF0IGFib3V0IG90aGVyIHN0YXRlcz8gKi8KKwkJLyogWFhYOiBTb21lIGVycm9yIGhhbmRs
aW5nICovCisJCXJldHVybjsKKwl9IGVsc2UgeworCQkvKiBBc3N1bWluZyBEQVRBX0NIQU5ORUxf
UFBJRF9ET01TVFJJTkcgKi8KKwkJLyogWFhYOiBQcm90ZWN0IGZvciBub24gMCB0ZXJtaW5hdGVk
IGJ1ZmZlciAqLworCQlwcmludGYoIk1lc3NhZ2UgcmVjZWl2ZWQgb2YgbGVuZ3RoICV6dSBvbiBj
aGFubmVsIHdpdGggaWQgJWQ6ICUuKnNcbiIsCisJCSAgICAgICBsZW5ndGgsIGNoYW5uZWwtPmlk
LCAoaW50KWxlbmd0aCwgYnVmZmVyKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAor
aGFuZGxlX21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIGNoYXIgKmJ1ZmZlciwg
c2l6ZV90IGxlbmd0aCwgdWludDMyX3QgcHBpZCwgdWludDE2X3QgaV9zdHJlYW0pCit7CisJc3Ry
dWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgKnJlcTsKKwlzdHJ1Y3QgcnRjd2Vi
X2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKnJzcDsKKwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFu
bmVsX2FjayAqYWNrLCAqbXNnOworCisJc3dpdGNoIChwcGlkKSB7CisJY2FzZSBEQVRBX0NIQU5O
RUxfUFBJRF9DT05UUk9MOgorCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0
YWNoYW5uZWxfYWNrKSkgeworCQkJcmV0dXJuOworCQl9CisJCW1zZyA9IChzdHJ1Y3QgcnRjd2Vi
X2RhdGFjaGFubmVsX2FjayAqKWJ1ZmZlcjsKKwkJc3dpdGNoIChtc2ctPm1zZ190eXBlKSB7CisJ
CWNhc2UgREFUQV9DSEFOTkVMX09QRU5fUkVRVUVTVDoKKwkJCWlmIChsZW5ndGggPCBzaXplb2Yo
c3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QpKSB7CisJCQkJLyogWFhYOiBl
cnJvciBoYW5kbGluZz8gKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQlyZXEgPSAoc3RydWN0IHJ0
Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgKilidWZmZXI7CisJCQloYW5kbGVfb3Blbl9y
ZXF1ZXN0X21lc3NhZ2UocGMsIHJlcSwgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCQlicmVhazsKKwkJ
Y2FzZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVNQT05TRToKKwkJCWlmIChsZW5ndGggPCBzaXplb2Yo
c3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlKSkgeworCQkJCS8qIFhYWDog
ZXJyb3IgaGFuZGxpbmc/ICovCisJCQkJcmV0dXJuOworCQkJfQorCQkJcnNwID0gKHN0cnVjdCBy
dGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSAqKWJ1ZmZlcjsKKwkJCWhhbmRsZV9vcGVu
X3Jlc3BvbnNlX21lc3NhZ2UocGMsIHJzcCwgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCQlicmVhazsK
KwkJY2FzZSBEQVRBX0NIQU5ORUxfQUNLOgorCQkJaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1Y3Qg
cnRjd2ViX2RhdGFjaGFubmVsX2FjaykpIHsKKwkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nPyAq
LworCQkJCXJldHVybjsKKwkJCX0KKwkJCWFjayA9IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVs
X2FjayAqKWJ1ZmZlcjsKKwkJCWhhbmRsZV9vcGVuX2Fja19tZXNzYWdlKHBjLCBhY2ssIGxlbmd0
aCwgaV9zdHJlYW0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQloYW5kbGVfdW5rbm93bl9t
ZXNzYWdlKGJ1ZmZlciwgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCQlicmVhazsKKwkJfQorCQlicmVh
azsKKwljYXNlIERBVEFfQ0hBTk5FTF9QUElEX0RPTVNUUklORzoKKwljYXNlIERBVEFfQ0hBTk5F
TF9QUElEX0JJTkFSWToKKwkJaGFuZGxlX2RhdGFfbWVzc2FnZShwYywgYnVmZmVyLCBsZW5ndGgs
IGlfc3RyZWFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJNZXNzYWdlIG9mIGxl
bmd0aCAlenUsIFBQSUQgJXUgb24gc3RyZWFtICV1IHJlY2VpdmVkLlxuIiwKKwkJICAgICAgIGxl
bmd0aCwgcHBpZCwgaV9zdHJlYW0pOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCito
YW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAq
c2FjKQoreworCXVuc2lnbmVkIGludCBpLCBuOworCisJcHJpbnRmKCJBc3NvY2lhdGlvbiBjaGFu
Z2UgIik7CisJc3dpdGNoIChzYWMtPnNhY19zdGF0ZSkgeworCWNhc2UgU0NUUF9DT01NX1VQOgor
CQlwcmludGYoIlNDVFBfQ09NTV9VUCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09NTV9MT1NU
OgorCQlwcmludGYoIlNDVFBfQ09NTV9MT1NUIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9SRVNU
QVJUOgorCQlwcmludGYoIlNDVFBfUkVTVEFSVCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hV
VERPV05fQ09NUDoKKwkJcHJpbnRmKCJTQ1RQX1NIVVRET1dOX0NPTVAiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX0NBTlRfU1RSX0FTU09DOgorCQlwcmludGYoIlNDVFBfQ0FOVF9TVFJfQVNTT0Mi
KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJVTktOT1dOIik7CisJCWJyZWFrOwor
CX0KKwlwcmludGYoIiwgc3RyZWFtcyAoaW4vb3V0KSA9ICgldS8ldSkiLAorCSAgICAgICBzYWMt
PnNhY19pbmJvdW5kX3N0cmVhbXMsIHNhYy0+c2FjX291dGJvdW5kX3N0cmVhbXMpOworCW4gPSBz
YWMtPnNhY19sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKKwlpZiAo
KChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NPTU1fVVApIHx8CisJICAgICAoc2FjLT5zYWNfc3Rh
dGUgPT0gU0NUUF9SRVNUQVJUKSkgJiYgKG4gPiAwKSkgeworCQlwcmludGYoIiwgc3VwcG9ydHMi
KTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJc3dpdGNoIChzYWMtPnNhY19pbmZv
W2ldKSB7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUFI6CisJCQkJcHJpbnRmKCIgUFIi
KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19BVVRIOgorCQkJCXBy
aW50ZigiIEFVVEgiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19B
U0NPTkY6CisJCQkJcHJpbnRmKCIgQVNDT05GIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBf
QVNTT0NfU1VQUE9SVFNfTVVMVElCVUY6CisJCQkJcHJpbnRmKCIgTVVMVElCVUYiKTsKKwkJCQli
cmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05GSUc6CisJCQkJcHJpbnRm
KCIgUkUtQ09ORklHIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigiIFVO
S05PV04oMHglMDJ4KSIsIHNhYy0+c2FjX2luZm9baV0pOworCQkJCWJyZWFrOworCQkJfQorCQl9
CisJfSBlbHNlIGlmICgoKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fAorCSAg
ICAgICAgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgJiYgKG4g
PiAwKSkgeworCQlwcmludGYoIiwgQUJPUlQgPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsr
KSB7CisJCQlwcmludGYoIiAweCUwMngiLCBzYWMtPnNhY19pbmZvW2ldKTsKKwkJfQorCX0KKwlw
cmludGYoIi5cbiIpOworCWlmICgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NP
QykgfHwKKwkgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfU0hVVERPV05fQ09NUCkgfHwKKwkg
ICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9MT1NUKSkgeworCQlleGl0KDApOworCX0K
KwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9l
dmVudChzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYykKK3sKKwljaGFyIGFkZHJfYnVmW0lO
RVQ2X0FERFJTVFJMRU5dOworCWNvbnN0IGNoYXIgKmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCXN3aXRjaCAoc3BjLT5zcGNf
YWFkZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQsICZz
aW4tPnNpbl9hZGRyLCBhZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJYnJlYWs7CisJY2Fz
ZSBBRl9JTkVUNjoKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNwYy0+c3BjX2Fh
ZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBhZGRy
X2J1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisjaWZkZWYgX1dJ
TjMyCisJCV9zbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFt
aWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKKyNlbHNlCisJCXNucHJpbnRmKGFk
ZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNwY19h
YWRkci5zc19mYW1pbHkpOworI2VuZGlmCisJCWFkZHIgPSBhZGRyX2J1ZjsKKwkJYnJlYWs7CisJ
fQorCXByaW50ZigiUGVlciBhZGRyZXNzICVzIGlzIG5vdyAiLCBhZGRyKTsKKwlzd2l0Y2ggKHNw
Yy0+c3BjX3N0YXRlKSB7CisJY2FzZSBTQ1RQX0FERFJfQVZBSUxBQkxFOgorCQlwcmludGYoIlND
VFBfQUREUl9BVkFJTEFCTEUiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfVU5SRUFDSEFC
TEU6CisJCXByaW50ZigiU0NUUF9BRERSX1VOUkVBQ0hBQkxFIik7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9BRERSX1JFTU9WRUQ6CisJCXByaW50ZigiU0NUUF9BRERSX1JFTU9WRUQiKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX0FERFJfQURERUQ6CisJCXByaW50ZigiU0NUUF9BRERSX0FEREVEIik7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX01BREVfUFJJTToKKwkJcHJpbnRmKCJTQ1RQX0FE
RFJfTUFERV9QUklNIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX0NPTkZJUk1FRDoKKwkJ
cHJpbnRmKCJTQ1RQX0FERFJfQ09ORklSTUVEIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXBy
aW50ZigiVU5LTk9XTiIpOworCQlicmVhazsKKwl9CisJcHJpbnRmKCIgKGVycm9yID0gMHglMDh4
KS5cbiIsIHNwYy0+c3BjX2Vycm9yKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5k
bGVfYWRhcHRhdGlvbl9pbmRpY2F0aW9uKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgKnNh
aSkKK3sKKwlwcmludGYoIkFkYXB0YXRpb24gaW5kaWNhdGlvbjogJXguXG4iLCBzYWktPiBzYWlf
YWRhcHRhdGlvbl9pbmQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zaHV0
ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCAqc3NlKQoreworCXByaW50Zigi
U2h1dGRvd24gZXZlbnQuXG4iKTsKKwkvKiBYWFg6IG5vdGlmeSBhbGwgY2hhbm5lbHMuICovCisJ
cmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3N0cmVhbV9yZXNldF9ldmVudChzdHJ1
Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50ICpz
dHJyc3QpCit7CisJdWludDMyX3QgbiwgaTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKwor
CW4gPSAoc3RycnN0LT5zdHJyZXNldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFt
X3Jlc2V0X2V2ZW50KSkgLyBzaXplb2YodWludDE2X3QpOworCXByaW50ZigiU3RyZWFtIHJlc2V0
IGV2ZW50OiBmbGFncyA9ICV4LCAiLCBzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzKTsKKwlpZiAoc3Ry
cnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTikgewor
CQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5H
X1NTTikgeworCQkJcHJpbnRmKCJpbmNvbWluZy8iKTsKKwkJfQorCQlwcmludGYoImluY29taW5n
ICIpOworCX0KKwlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VU
X09VVEdPSU5HX1NTTikgeworCQlwcmludGYoIm91dGdvaW5nICIpOworCX0KKwlwcmludGYoInN0
cmVhbSBpZHMgPSAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCWlmIChpID4gMCkg
eworCQkJcHJpbnRmKCIsICIpOworCQl9CisJCXByaW50ZigiJWQiLCBzdHJyc3QtPnN0cnJlc2V0
X3N0cmVhbV9saXN0W2ldKTsKKwl9CisJcHJpbnRmKCIuXG4iKTsKKwlpZiAoIShzdHJyc3QtPnN0
cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfREVOSUVEKSAmJgorCSAgICAhKHN0cnJz
dC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9GQUlMRUQpKSB7CisJCWZvciAo
aSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmIChzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NU
UF9TVFJFQU1fUkVTRVRfSU5DT01JTkdfU1NOKSB7CisJCQkJY2hhbm5lbCA9IGZpbmRfY2hhbm5l
bF9ieV9pX3N0cmVhbShwYywgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7CisJCQkJ
aWYgKGNoYW5uZWwgIT0gTlVMTCkgeworCQkJCQlwYy0+aV9zdHJlYW1fY2hhbm5lbFtjaGFubmVs
LT5pX3N0cmVhbV0gPSBOVUxMOworCQkJCQljaGFubmVsLT5pX3N0cmVhbSA9IDA7CisJCQkJCWlm
IChjaGFubmVsLT5vX3N0cmVhbSA9PSAwKSB7CisJCQkJCQljaGFubmVsLT5wcl9wb2xpY3kgPSBT
Q1RQX1BSX1NDVFBfTk9ORTsKKwkJCQkJCWNoYW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJCQkJCWNo
YW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJCQljaGFubmVsLT5mbGFncyA9IDA7CisJCQkJCQlj
aGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TRUQ7CisJCQkJCX0gZWxzZSB7CisJCQkJ
CQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4pIHsKKwkJCQkJCQlyZXNl
dF9vdXRnb2luZ19zdHJlYW0ocGMsIGNoYW5uZWwtPm9fc3RyZWFtKTsKKwkJCQkJCQljaGFubmVs
LT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TSU5HOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQkv
KiBYWFg6IFdoYXQgdG8gZG8/ICovCisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlp
ZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NT
TikgeworCQkJCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfb19zdHJlYW0ocGMsIHN0cnJzdC0+
c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0pOworCQkJCWlmIChjaGFubmVsICE9IE5VTEwpIHsKKwkJ
CQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+b19zdHJlYW1dID0gTlVMTDsKKwkJCQkJ
Y2hhbm5lbC0+b19zdHJlYW0gPSAwOworCQkJCQlpZiAoY2hhbm5lbC0+aV9zdHJlYW0gPT0gMCkg
eworCQkJCQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7CisJCQkJCQlj
aGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOworCQkJ
CQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5O
RUxfQ0xPU0VEOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybjsKK30KKwor
c3RhdGljIHZvaWQKK2hhbmRsZV9zdHJlYW1fY2hhbmdlX2V2ZW50KHN0cnVjdCBwZWVyX2Nvbm5l
Y3Rpb24gKnBjLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50ICpzdHJjaGcpCit7CisJ
dWludDE2X3Qgb19zdHJlYW07CisJdWludDMyX3QgaTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5l
bDsKKworCXByaW50ZigiU3RyZWFtIGNoYW5nZSBldmVudDogc3RyZWFtcyAoaW4vb3V0KSA9ICgl
dS8ldSksIGZsYWdzID0gJXguXG4iLAorCSAgICAgICBzdHJjaGctPnN0cmNoYW5nZV9pbnN0cm1z
LCBzdHJjaGctPnN0cmNoYW5nZV9vdXRzdHJtcywgc3RyY2hnLT5zdHJjaGFuZ2VfZmxhZ3MpOwor
CWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVsID0g
JihwYy0+Y2hhbm5lbHNbaV0pOworCQlpZiAoKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5F
TF9DT05ORUNUSU5HKSAmJgorCQkgICAgKGNoYW5uZWwtPm9fc3RyZWFtID09IDApKSB7CisJCQlp
ZiAoKHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzICYgU0NUUF9TVFJFQU1fQ0hBTkdFX0RFTklFRCkg
fHwKKwkJCSAgICAoc3RyY2hnLT5zdHJjaGFuZ2VfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9DSEFOR0Vf
RkFJTEVEKSkgeworCQkJCS8qIFhYWDogU2lnbmFsIHRvIHRoZSBvdGhlciBlbmQuICovCisJCQkJ
aWYgKGNoYW5uZWwtPmlfc3RyZWFtICE9IDApIHsKKwkJCQkJcGMtPmlfc3RyZWFtX2NoYW5uZWxb
Y2hhbm5lbC0+aV9zdHJlYW1dID0gTlVMTDsKKwkJCQl9CisJCQkJY2hhbm5lbC0+dW5vcmRlcmVk
ID0gMDsKKwkJCQljaGFubmVsLT5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJCQlj
aGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJY2hhbm5lbC0+aV9zdHJlYW0gPSAwOworCQkJCWNo
YW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJCQljaGFubmVsLT5mbGFncyA9IDA7CisJCQkJY2hhbm5l
bC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOworCQkJfSBlbHNlIHsKKwkJCQlvX3N0cmVh
bSA9IGZpbmRfZnJlZV9vX3N0cmVhbShwYyk7CisJCQkJaWYgKG9fc3RyZWFtICE9IDApIHsKKwkJ
CQkJY2hhbm5lbC0+b19zdHJlYW0gPSBvX3N0cmVhbTsKKwkJCQkJcGMtPm9fc3RyZWFtX2NoYW5u
ZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtID09IDAp
IHsKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUTsK
KwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFH
U19TRU5EX1JTUDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIFdlIHdpbGwgbm90IGZp
bmQgbW9yZSAuLi4gKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVy
bjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9yZW1vdGVfZXJyb3JfZXZlbnQoc3RydWN0IHNj
dHBfcmVtb3RlX2Vycm9yICpzcmUpCit7CisJc2l6ZV90IGksIG47CisKKwluID0gc3JlLT5zcmVf
bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7CisJcHJpbnRmKCJSZW1v
dGUgRXJyb3IgKGVycm9yID0gMHglMDR4KTogIiwgc3JlLT5zcmVfZXJyb3IpOworCWZvciAoaSA9
IDA7IGkgPCBuOyBpKyspIHsKKwkJcHJpbnRmKCIgMHglMDJ4Iiwgc3JlLT4gc3JlX2RhdGFbaV0p
OworCX0KKwlwcmludGYoIi5cbiIpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRs
ZV9zZW5kX2ZhaWxlZF9ldmVudChzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZSkK
K3sKKwlzaXplX3QgaSwgbjsKKworCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1VO
U0VOVCkgeworCQlwcmludGYoIlVuc2VudCAiKTsKKwl9CisJaWYgKHNzZmUtPnNzZmVfZmxhZ3Mg
JiBTQ1RQX0RBVEFfU0VOVCkgeworCQlwcmludGYoIlNlbnQgIik7CisJfQorCWlmIChzc2ZlLT5z
c2ZlX2ZsYWdzICYgfihTQ1RQX0RBVEFfU0VOVCB8IFNDVFBfREFUQV9VTlNFTlQpKSB7CisJCXBy
aW50ZigiKGZsYWdzID0gJXgpICIsIHNzZmUtPnNzZmVfZmxhZ3MpOworCX0KKwlwcmludGYoIm1l
c3NhZ2Ugd2l0aCBQUElEID0gJXUsIFNJRCA9ICV1LCBmbGFnczogMHglMDR4IGR1ZSB0byBlcnJv
ciA9IDB4JTA4eCIsCisJICAgICAgIG50b2hsKHNzZmUtPnNzZmVfaW5mby5zbmRfcHBpZCksIHNz
ZmUtPnNzZmVfaW5mby5zbmRfc2lkLAorCSAgICAgICBzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdz
LCBzc2ZlLT5zc2ZlX2Vycm9yKTsKKwluID0gc3NmZS0+c3NmZV9sZW5ndGggLSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsK
KwkJcHJpbnRmKCIgMHglMDJ4Iiwgc3NmZS0+c3NmZV9kYXRhW2ldKTsKKwl9CisJcHJpbnRmKCIu
XG4iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfbm90aWZpY2F0aW9uKHN0
cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCB1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqbm90aWYs
IHNpemVfdCBuKQoreworCWlmIChub3RpZi0+c25faGVhZGVyLnNuX2xlbmd0aCAhPSAodWludDMy
X3QpbikgeworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobm90aWYtPnNuX2hlYWRlci5zbl90eXBl
KSB7CisJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5n
ZV9ldmVudCgmKG5vdGlmLT5zbl9hc3NvY19jaGFuZ2UpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1BFRVJfQUREUl9DSEFOR0U6CisJCWhhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KCYo
bm90aWYtPnNuX3BhZGRyX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVNT1RFX0VS
Uk9SOgorCQloYW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KCYobm90aWYtPnNuX3JlbW90ZV9lcnJv
cikpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fRVZFTlQ6CisJCWhhbmRsZV9zaHV0
ZG93bl9ldmVudCgmKG5vdGlmLT5zbl9zaHV0ZG93bl9ldmVudCkpOworCQlicmVhazsKKwljYXNl
IFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQloYW5kbGVfYWRhcHRhdGlvbl9pbmRpY2F0
aW9uKCYobm90aWYtPnNuX2FkYXB0YXRpb25fZXZlbnQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9BVVRIRU5USUNB
VElPTl9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQ6CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJaGFuZGxlX3NlbmRfZmFpbGVkX2V2ZW50
KCYobm90aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9T
VFJFQU1fUkVTRVRfRVZFTlQ6CisJCWhhbmRsZV9zdHJlYW1fcmVzZXRfZXZlbnQocGMsICYobm90
aWYtPnNuX3N0cnJlc2V0X2V2ZW50KSk7CisJCXNlbmRfZGVmZXJyZWRfbWVzc2FnZXMocGMpOwor
CQlzZW5kX291dGdvaW5nX3N0cmVhbV9yZXNldChwYyk7CisJCXJlcXVlc3RfbW9yZV9vX3N0cmVh
bXMocGMpOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6CisJCWJyZWFr
OworCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOgorCQloYW5kbGVfc3RyZWFtX2NoYW5n
ZV9ldmVudChwYywgJihub3RpZi0+c25fc3RyY2hhbmdlX2V2ZW50KSk7CisJCXNlbmRfZGVmZXJy
ZWRfbWVzc2FnZXMocGMpOworCQlzZW5kX291dGdvaW5nX3N0cmVhbV9yZXNldChwYyk7CisJCXJl
cXVlc3RfbW9yZV9vX3N0cmVhbXMocGMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9zdGF0dXMoc3RydWN0IHBlZXJfY29ubmVjdGlv
biAqcGMpCit7CisJc3RydWN0IHNjdHBfc3RhdHVzIHN0YXR1czsKKwlzb2NrbGVuX3QgbGVuOwor
CXVpbnQzMl90IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisKKwlsZW4gPSAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQo
cGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsICZsZW4pIDwgMCkg
eworCQlwZXJyb3IoImdldHNvY2tvcHQiKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGYoIkFzc29j
aWF0aW9uIHN0YXRlOiAiKTsKKwlzd2l0Y2ggKHN0YXR1cy5zc3RhdF9zdGF0ZSkgeworCWNhc2Ug
U0NUUF9DTE9TRUQ6CisJCXByaW50ZigiQ0xPU0VEXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0JPVU5EOgorCQlwcmludGYoIkJPVU5EXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0xJU1RF
TjoKKwkJcHJpbnRmKCJMSVNURU5cbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09PS0lFX1dB
SVQ6CisJCXByaW50ZigiQ09PS0lFX1dBSVRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09P
S0lFX0VDSE9FRDoKKwkJcHJpbnRmKCJDT09LSUVfRUNIT0VEXG4iKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0VTVEFCTElTSEVEOgorCQlwcmludGYoIkVTVEFCTElTSEVEXG4iKTsKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX1NIVVRET1dOX1BFTkRJTkc6CisJCXByaW50ZigiU0hVVERPV05fUEVORElO
R1xuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9TRU5UOgorCQlwcmludGYoIlNI
VVRET1dOX1NFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fUkVDRUlWRUQ6
CisJCXByaW50ZigiU0hVVERPV05fUkVDRUlWRURcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBf
U0hVVERPV05fQUNLX1NFTlQ6CisJCXByaW50ZigiU0hVVERPV05fQUNLX1NFTlRcbiIpOworCQli
cmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV05cbiIpOworCQlicmVhazsKKwl9CisJ
cHJpbnRmKCJOdW1iZXIgb2Ygc3RyZWFtcyAoaS9vKSA9ICgldS8ldSlcbiIsCisJICAgICAgIHN0
YXR1cy5zc3RhdF9pbnN0cm1zLCBzdGF0dXMuc3N0YXRfb3V0c3RybXMpOworCWZvciAoaSA9IDA7
IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVsID0gJihwYy0+Y2hhbm5l
bHNbaV0pOworCQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX0NMT1NFRCkgewor
CQkJY29udGludWU7CisJCX0KKwkJcHJpbnRmKCJDaGFubmVsIHdpdGggaWQgPSAldTogc3RhdGUg
IiwgY2hhbm5lbC0+aWQpOworCQlzd2l0Y2ggKGNoYW5uZWwtPnN0YXRlKSB7CisJCWNhc2UgREFU
QV9DSEFOTkVMX0NMT1NFRDoKKwkJCXByaW50ZigiQ0xPU0VEIik7CisJCQlicmVhazsKKwkJY2Fz
ZSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORzoKKwkJCXByaW50ZigiQ09OTkVDVElORyIpOworCQkJ
YnJlYWs7CisJCWNhc2UgREFUQV9DSEFOTkVMX09QRU46CisJCQlwcmludGYoIk9QRU4iKTsKKwkJ
CWJyZWFrOworCQljYXNlIERBVEFfQ0hBTk5FTF9DTE9TSU5HOgorCQkJcHJpbnRmKCJDTE9TSU5H
Iik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVU5LTk9XTiglZCkiLCBjaGFu
bmVsLT5zdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoIiwgZmxhZ3MgPSAweCUwOHgs
IHN0cmVhbSBpZCAoaW4vb3V0KTogKCV1LyV1KSwgIiwKKwkJICAgICAgIGNoYW5uZWwtPmZsYWdz
LAorCQkgICAgICAgY2hhbm5lbC0+aV9zdHJlYW0sCisJCSAgICAgICBjaGFubmVsLT5vX3N0cmVh
bSk7CisJCWlmIChjaGFubmVsLT51bm9yZGVyZWQpIHsKKwkJCXByaW50ZigidW5vcmRlcmVkLCAi
KTsKKwkJfSBlbHNlIHsKKwkJCXByaW50Zigib3JkZXJlZCwgIik7CisJCX0KKwkJc3dpdGNoIChj
aGFubmVsLT5wcl9wb2xpY3kpIHsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBfTk9ORToKKwkJCXByaW50
ZigicmVsaWFibGUuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUFJfU0NUUF9UVEw6CisJ
CQlwcmludGYoInVucmVsaWFibGUgKHRpbWVvdXQgJXVtcykuXG4iLCBjaGFubmVsLT5wcl92YWx1
ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBfUlRYOgorCQkJcHJpbnRmKCJ1bnJl
bGlhYmxlIChtYXguICV1IHJ0eCkuXG4iLCBjaGFubmVsLT5wcl92YWx1ZSk7CisJCQlicmVhazsK
KwkJZGVmYXVsdDoKKwkJCXByaW50ZigidW5rb3duIHBvbGljeSAldS5cbiIsIGNoYW5uZWwtPnBy
X3BvbGljeSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9j
YihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpk
YXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Ys
IGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJc3RydWN0IHBlZXJfY29ubmVjdGlvbiAq
cGM7CisKKwlwYyA9IChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICopdWxwX2luZm87CisKKwlpZiAo
ZGF0YSkgeworCQlsb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7CisJCWlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24ocGMsICh1bmlvbiBzY3RwX25v
dGlmaWNhdGlvbiAqKWRhdGEsIGRhdGFsZW4pOworCQl9IGVsc2UgeworCQkJaGFuZGxlX21lc3Nh
Z2UocGMsIGRhdGEsIGRhdGFsZW4sIG50b2hsKHJjdi5yY3ZfcHBpZCksIHJjdi5yY3Zfc2lkKTsK
KwkJfQorCQl1bmxvY2tfcGVlcl9jb25uZWN0aW9uKHBjKTsKKwl9CisJcmV0dXJuICgxKTsKK30K
Kwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xp
c3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZvcm1hdCwgYXApOwor
CXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQorewor
CXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc29ja2xl
bl90IGFkZHJfbGVuOworCWNoYXIgbGluZVtMSU5FX0xFTkdUSCArIDFdOworCXVuc2lnbmVkIGlu
dCB1bm9yZGVyZWQsIHBvbGljeSwgdmFsdWUsIGlkLCBzZWNvbmRzOworCXVuc2lnbmVkIGludCBp
OworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCWNvbnN0IGludCBvbiA9IDE7CisJc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJc3RydWN0IHNjdHBfZXZlbnQgZXZlbnQ7CisJc3RydWN0
IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9pbml0bXNnIGluaXRtc2c7CisJ
dWludDE2X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5HRSwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfUkVNT1RFX0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9TSFVURE9XTl9FVkVOVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQURB
UFRBVElPTl9JTkRJQ0FUSU9OLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TRU5E
X0ZBSUxFRF9FVkVOVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU1RSRUFNX1JF
U0VUX0VWRU5ULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TVFJFQU1fQ0hBTkdF
X0VWRU5UfTsKKwljaGFyIGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsKKworCWlmIChhcmdjID4g
MSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsK
Kwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKKwl9
CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFND
VFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hv
bGUoMik7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NUUkVB
TSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmcGVlcl9jb25uZWN0aW9uKSkg
PT0gTlVMTCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCX0KKwlpbml0X3BlZXJfY29ubmVjdGlv
bigmcGVlcl9jb25uZWN0aW9uKTsKKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZlbmNhcHMs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNz
LnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFy
Z3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRz
b2Nrb3B0Iik7CisJCX0KKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RP
X1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJy
b3IoInNldHNvY2tvcHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FWFBMSUNJVF9FT1IsICZvbiwgc2l6ZW9m
KGludCkpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FWFBMSUNJVF9FT1IiKTsK
Kwl9CisJLyogQWxsb3cgcmVzZXR0aW5nIHN0cmVhbXMuICovCisJYXYuYXNzb2NfaWQgPSBTQ1RQ
X0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9S
RVEgfCBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVROworCWlmICh1c3JzY3RwX3NldHNvY2tv
cHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQsICZhdiwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29w
dCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQiKTsKKwl9CisJLyogRW5hYmxlIHRoZSBldmVudHMg
b2YgaW50ZXJlc3QuICovCisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZl
bnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9y
IChpID0gMDsgaSA8IHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KTsgaSsrKSB7
CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29j
a29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKGV2ZW50
KSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQor
CW1lbXNldCgmaW5pdG1zZywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRtc2cpKTsKKwlpbml0
bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IDU7CisJaW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1z
ID0gNjU1MzU7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfSU5JVE1TRywgJmluaXRtc2csIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKSkgPCAwKSB7
CisJCXBlcnJvcigic2V0c29ja29wdCBTQ1RQX0lOSVRNU0ciKTsKKwl9CisKKwlpZiAoYXJnYyA9
PSA1KSB7CisJCS8qIG9wZXJhdGluZyBhcyBjbGllbnQgKi8KKwkJbWVtc2V0KCZhZGRyLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOworI2VuZGlmCisJCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZh
ZGRyLnNpbl9hZGRyLnNfYWRkcikpeworCQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNz
XG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJn
dls0XSkpOworCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikm
YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJjb25u
ZWN0Iik7CisJCX0KKworCQlwcmludGYoIkNvbm5lY3RlZCB0byAlczolZC5cbiIsIGluZXRfbnRv
cChBRl9JTkVULCAmKGFkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBu
dG9ocyhhZGRyLnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChhcmdjID09IDQpIHsKKwkJc3RydWN0
IHNvY2tldCAqY29ubl9zb2NrOworCisJCS8qIG9wZXJhdGluZyBhcyBzZXJ2ZXIgKi8KKwkJbWVt
c2V0KCZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWFkZHIuc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHIuc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWFkZHIuc2luX2FkZHIuc19hZGRy
ID0gSU5BRERSX0FOWTsKKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlszXSkpOwor
CQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJiaW5kIik7CisJCX0KKwkJ
aWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQkJcGVycm9yKCJsaXN0ZW4iKTsK
KwkJfQorCQlhZGRyX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQlpZiAo
KGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRk
ciwgJmFkZHJfbGVuKSkgPT0gTlVMTCkgeworCQkJcGVycm9yKCJhY2NlcHQiKTsKKwkJfQorCQl1
c3JzY3RwX2Nsb3NlKHNvY2spOworCQlzb2NrID0gY29ubl9zb2NrOworCQlwcmludGYoIkNvbm5l
Y3RlZCB0byAlczolZC5cbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKGFkZHIuc2luX2FkZHIpLCBh
ZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbl9wb3J0KSk7CisJfSBlbHNl
IHsKKwkJcHJpbnRmKCJVc2FnZTogJXMgbG9jYWxfdWRwX3BvcnQgcmVtb3RlX3VkcF9wb3J0IGxv
Y2FsX3BvcnQgd2hlbiBvcGVyYXRpbmcgYXMgc2VydmVyXG4iCisJCSAgICAgICAiICAgICAgICVz
IGxvY2FsX3VkcF9wb3J0IHJlbW90ZV91ZHBfcG9ydCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCB3
aGVuIG9wZXJhdGluZyBhcyBjbGllbnRcbiIsCisJCSAgICAgICBhcmd2WzBdLCBhcmd2WzBdKTsK
KwkJcmV0dXJuICgwKTsKKwl9CisKKwlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0
aW9uKTsKKwlwZWVyX2Nvbm5lY3Rpb24uc29jayA9IHNvY2s7CisJdW5sb2NrX3BlZXJfY29ubmVj
dGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKworCWZvciAoOzspIHsKKyNpZmRlZiBfV0lOMzIKKwkJ
aWYgKGdldHNfcyhsaW5lLCBMSU5FX0xFTkdUSCkgPT0gTlVMTCkgeworI2Vsc2UKKwkJaWYgKGZn
ZXRzKGxpbmUsIExJTkVfTEVOR1RILCBzdGRpbikgPT0gTlVMTCkgeworI2VuZGlmCisJCQlpZiAo
dXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsKKwkJCQlwZXJyb3IoInVzcnNj
dHBfc2h1dGRvd24iKTsKKwkJCX0KKwkJCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsK
KyNpZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCQkJc2xlZXAoMSk7Cisj
ZW5kaWYKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChzdHJuY21wKGxpbmUsICI/Iiwgc3Ry
bGVuKCI/IikpID09IDAgfHwKKwkJICAgIHN0cm5jbXAobGluZSwgImhlbHAiLCBzdHJsZW4oImhl
bHAiKSkgPT0gMCkgeworCQkJcHJpbnRmKCJDb21tYW5kczpcbiIKKwkJCSAgICAgICAib3BlbiB1
bm9yZGVyZWQgcHJfcG9saWN5IHByX3ZhbHVlIC0gb3BlbnMgYSBjaGFubmVsXG4iCisJCQkgICAg
ICAgImNsb3NlIGNoYW5uZWwgLSBjbG9zZXMgdGhlIGNoYW5uZWxcbiIKKwkJCSAgICAgICAic2Vu
ZCBjaGFubmVsOnN0cmluZyAtIHNlbmRzIHN0cmluZyB1c2luZyBjaGFubmVsXG4iCisJCQkgICAg
ICAgInN0YXR1cyAtIHByaW50cyB0aGUgc3RhdHVzXG4iCisJCQkgICAgICAgInNsZWVwIG4gLSBz
bGVlcCBmb3IgbiBzZWNvbmRzXG4iCisJCQkgICAgICAgImhlbHAgLSB0aGlzIG1lc3NhZ2VcbiIp
OworCQl9IGVsc2UgaWYgKHN0cm5jbXAobGluZSwgInN0YXR1cyIsIHN0cmxlbigic3RhdHVzIikp
ID09IDApIHsKKwkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOworCQkJ
cHJpbnRfc3RhdHVzKCZwZWVyX2Nvbm5lY3Rpb24pOworCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlv
bigmcGVlcl9jb25uZWN0aW9uKTsKKwkJfSBlbHNlIGlmIChzdHJuY21wKGxpbmUsICJxdWl0Iiwg
c3RybGVuKCJxdWl0IikpID09IDApIHsKKwkJCWlmICh1c3JzY3RwX3NodXRkb3duKHNvY2ssIFNI
VVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0cF9zaHV0ZG93biIpOworCQkJfQorCQkJ
d2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQkJCVNsZWVw
KDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQkJfQorCQkJYnJlYWs7CisJ
CX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJvcGVuICV1ICV1ICV1IiwgJnVub3JkZXJlZCwgJnBv
bGljeSwgJnZhbHVlKSA9PSAzKSB7CisJCQlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25u
ZWN0aW9uKTsKKwkJCWNoYW5uZWwgPSBvcGVuX2NoYW5uZWwoJnBlZXJfY29ubmVjdGlvbiwgKHVp
bnQ4X3QpdW5vcmRlcmVkLCAodWludDE2X3QpcG9saWN5LCAodWludDMyX3QpdmFsdWUpOworCQkJ
dW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCWlmIChjaGFubmVs
ID09IE5VTEwpIHsKKwkJCQlwcmludGYoIkNyZWF0aW5nIGNoYW5uZWwgZmFpbGVkLlxuIik7CisJ
CQl9IGVsc2UgeworCQkJCXByaW50ZigiQ2hhbm5lbCB3aXRoIGlkICV1IGNyZWF0ZWQuXG4iLCBj
aGFubmVsLT5pZCk7CisJCQl9CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJjbG9zZSAldSIs
ICZpZCkgPT0gMSkgeworCQkJaWYgKGlkIDwgTlVNQkVSX09GX0NIQU5ORUxTKSB7CisJCQkJbG9j
a19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7CisJCQkJY2xvc2VfY2hhbm5lbCgm
cGVlcl9jb25uZWN0aW9uLCAmcGVlcl9jb25uZWN0aW9uLmNoYW5uZWxzW2lkXSk7CisJCQkJdW5s
b2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCX0KKwkJfSBlbHNlIGlm
IChzc2NhbmYobGluZSwgInNlbmQgJXUiLCAmaWQpID09IDEpIHsKKwkJCWlmIChpZCA8IE5VTUJF
Ul9PRl9DSEFOTkVMUykgeworCQkJCWNoYXIgKm1zZzsKKworCQkJCW1zZyA9IHN0cnN0cihsaW5l
LCAiOiIpOworCQkJCWlmIChtc2cpIHsKKwkJCQkJbXNnKys7CisJCQkJCWxvY2tfcGVlcl9jb25u
ZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOworI2lmZGVmIF9XSU4zMgorCQkJCQlpZiAoc2VuZF91
c2VyX21lc3NhZ2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlvbi5jaGFubmVsc1tp
ZF0sIG1zZywgc3RybGVuKG1zZykpKSB7CisjZWxzZQorCQkJCQlpZiAoc2VuZF91c2VyX21lc3Nh
Z2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlvbi5jaGFubmVsc1tpZF0sIG1zZywg
c3RybGVuKG1zZykgLSAxKSkgeworI2VuZGlmCisJCQkJCQlwcmludGYoIk1lc3NhZ2Ugc2VudC5c
biIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnRmKCJNZXNzYWdlIHNlbmRpbmcgZmFpbGVk
LlxuIik7CisJCQkJCX0KKwkJCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0
aW9uKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJzbGVlcCAldSIs
ICZzZWNvbmRzKSA9PSAxKSB7CisjaWZkZWYgX1dJTjMyCisJCQlTbGVlcChzZWNvbmRzICogMTAw
MCk7CisjZWxzZQorCQkJc2xlZXAoc2Vjb25kcyk7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXBy
aW50ZigiVW5rbm93biBjb21tYW5kOiAlcyIsIGxpbmUpOworCQl9CisJfQorCXJldHVybiAoMCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90ZXN0X2xpYm1nbXQuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlh
ZTc3NWFkOGMyZTQ4YzUzOTEuLmRlNWUwZjAyYTgwZGZiZDlkMTI0NDc1YTI2NWZiNmFkNDM4MzM0
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfV0lO
MzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgInVzcnNjdHAuaCIKKwor
aW50CittYWluKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkr
KykgeworCQl1c3JzY3RwX2luaXQoMCwgTlVMTCwgTlVMTCk7CisJCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJ
CXNsZWVwKDEpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfdGltZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3Rf
dGltZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi45
MGE5M2M4NDVhNWE0MDkzZDY1ZWY5Zjc0YjkzMDZkYzc2ZjcyOTg5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy90ZXN0X3RpbWVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdGVzdF90
aW1lci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWljaGFl
bCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp
dGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgor
I2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4K
KyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKworaW50CittYWluKHZvaWQpIAoreworCXVu
c2lnbmVkIGludCBpOworCisJdXNyc2N0cF9pbml0KDAsIE5VTEwsIE5VTEwpOworCXByaW50Zigi
RW50ZXJpbmcgdGhlIGxvb3BcbiIpOworCWZvciAoaSA9IDA7IGkgPCAxMDAwMDAwOyBpKyspIHsK
KwkJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKE5VTEwpOworCQl1c3JzY3RwX2RlcmVnaXN0ZXJf
YWRkcmVzcyhOVUxMKTsKKwl9CisJcHJpbnRmKCJFeGl0ZWQgdGhlIGxvb3BcbiIpOworCXdoaWxl
ICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7
CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHAuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3RzY3Rw
LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYzg1ZGEy
MmIxODhlZjNhOGUwNGQzNTE3YmZjODhmZGExMzA5MWNlMiAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
cHJvZ3JhbXMvdHNjdHAuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90c2N0cC5jCkBAIC0wLDAg
KzEsODI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMgTWljaGFlbCBUdWV4ZW4K
KyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIElyZW5lIFJ1ZW5nZWxlcgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUgPHdpbnNvY2syLmg+Cisj
aW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjcnRk
YmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNp
bmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB0aHJl
YWQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+Cisj
aW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c2lnbmFs
Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBMSU5VWAorI2luY2x1ZGUgPGdldG9wdC5o
PgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisvKiBnbG9iYWwgZm9yIHRoZSBzZW5k
IGNhbGxiYWNrLCBidXQgdXNlZCBpbiBrZXJuZWwgdmVyc2lvbiBhcyB3ZWxsICovCitzdGF0aWMg
dW5zaWduZWQgbG9uZyBudW1iZXJfb2ZfbWVzc2FnZXM7CitzdGF0aWMgY2hhciAqYnVmZmVyOwor
c3RhdGljIGludCBsZW5ndGg7CitzdGF0aWMgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRy
Oworc3RhdGljIGludCB1bm9yZGVyZWQ7Cit1aW50MzJfdCBvcHR2YWwgPSAxOworc3RydWN0IHNv
Y2tldCAqcHNvY2sgPSBOVUxMOworCitzdGF0aWMgc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZTsK
K3Vuc2lnbmVkIGludCBydW50aW1lID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1lc3NhZ2Vz
ID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZmlyc3RfbGVuZ3RoID0gMDsKK3N0YXRp
YyB1bnNpZ25lZCBsb25nIGxvbmcgc3VtID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdXNlX2Ni
ID0gMDsKKworI2lmbmRlZiB0aW1lcnN1YgorI2RlZmluZSB0aW1lcnN1Yih0dnAsIHV2cCwgdnZw
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSh2dnApLT50dl9z
ZWMgPSAodHZwKS0+dHZfc2VjIC0gKHV2cCktPnR2X3NlYzsgICAgXAorCQkodnZwKS0+dHZfdXNl
YyA9ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7IFwKKwkJaWYgKCh2dnApLT50dl91
c2VjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkodnZwKS0+dHZfc2VjLS07
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkodnZwKS0+dHZfdXNlYyArPSAxMDAwMDAw
OyAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKworCitjaGFyIFVzYWdlW10g
PQorIlVzYWdlOiB0c2N0cCBbb3B0aW9uc10gW2FkZHJlc3NdXG4iCisiT3B0aW9uczpcbiIKKyIg
ICAgICAgIC1hICAgICAgICAgICAgIHNldCBhZGFwdGF0aW9uIGxheWVyIGluZGljYXRpb25cbiIK
KyIgICAgICAgIC1jICAgICAgICAgICAgIHVzZSBjYWxsYmFjayBBUElcbiIKKyIgICAgICAgIC1F
ICAgICAgICAgICAgIGxvY2FsIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQgKGRlZmF1bHQgOTg5OSlc
biIKKyIgICAgICAgIC1mICAgICAgICAgICAgIGZyYWdtZW50YXRpb24gcG9pbnRcbiIKKyIgICAg
ICAgIC1sICAgICAgICAgICAgIHNpemUgb2Ygc2VuZC9yZWNlaXZlIGJ1ZmZlclxuIgorIiAgICAg
ICAgLUwgICAgICAgICAgICAgYmluZCB0byBsb2NhbCBJUCAoZGVmYXVsdCBJTkFERFJfQU5ZKVxu
IgorIiAgICAgICAgLW4gICAgICAgICAgICAgbnVtYmVyIG9mIG1lc3NhZ2VzIHNlbnQgKDAgbWVh
bnMgaW5maW5pdGUpL3JlY2VpdmVkXG4iCisiICAgICAgICAtRCAgICAgICAgICAgICB0dXJucyBO
YWdsZSBvZmZcbiIKKyIgICAgICAgIC1SICAgICAgICAgICAgIHNvY2tldCByZWN2IGJ1ZmZlclxu
IgorIiAgICAgICAgLVMgICAgICAgICAgICAgc29ja2V0IHNlbmQgYnVmZmVyXG4iCisiICAgICAg
ICAtVCAgICAgICAgICAgICB0aW1lIHRvIHNlbmQgbWVzc2FnZXNcbiIKKyIgICAgICAgIC11ICAg
ICAgICAgICAgIHVzZSB1bm9yZGVyZWQgdXNlciBtZXNzYWdlc1xuIgorIiAgICAgICAgLVUgICAg
ICAgICAgICAgcmVtb3RlIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnRcbiIKKyIgICAgICAgIC12ICAg
ICAgICAgICAgIHZlcmJvc2VcbiIKKyIgICAgICAgIC1WICAgICAgICAgICAgIHZlcnkgdmVyYm9z
ZVxuIgorOworCisjZGVmaW5lIERFRkFVTFRfTEVOR1RIICAgICAgICAgICAgIDEwMjQKKyNkZWZp
bmUgREVGQVVMVF9OVU1CRVJfT0ZfTUVTU0FHRVMgMTAyNAorI2RlZmluZSBERUZBVUxUX1BPUlQg
ICAgICAgICAgICAgICA1MDAxCisjZGVmaW5lIEJVRkZFUlNJWkUgICAgICAgICAgICAgICAgICgx
PDwxNikKKworc3RhdGljIGludCB2ZXJib3NlLCB2ZXJ5X3ZlcmJvc2U7CitzdGF0aWMgdW5zaWdu
ZWQgaW50IGRvbmU7CisKK3ZvaWQgc3RvcF9zZW5kZXIoaW50IHNpZykKK3sKKwlkb25lID0gMTsK
K30KKworI2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQKK2dldHRpbWVvZmRheShzdHJ1Y3QgdGlt
ZXZhbCAqdHYsIHZvaWQgKmlnbm9yZSkKK3sKKwlzdHJ1Y3QgdGltZWIgdGI7CisKKwlmdGltZSgm
dGIpOworCXR2LT50dl9zZWMgPSAobG9uZyl0Yi50aW1lOworIAl0di0+dHZfdXNlYyA9IHRiLm1p
bGxpdG0gKiAxMDAwOworfQorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBX
SU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9jb25uZWN0aW9uKHZv
aWQgKmFyZykKK3sKKwlzc2l6ZV90IG47CisJY2hhciAqYnVmOworI2lmZGVmIF9XSU4zMgorCUhB
TkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0
ICpjb25uX3NvY2s7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydCwgdGltZV9ub3csIHRpbWVf
ZGlmZjsKKwlkb3VibGUgc2Vjb25kczsKKwl1bnNpZ25lZCBsb25nIHJlY3ZfY2FsbHMgPSAwOwor
CXVuc2lnbmVkIGxvbmcgbm90aWZpY2F0aW9ucyA9IDA7CisJaW50IGZsYWdzOworCXN0cnVjdCBz
b2NrYWRkcl9pbiBhZGRyOworCXNvY2tsZW5fdCBsZW47CisJdW5pb24gc2N0cF9ub3RpZmljYXRp
b24gKnNucDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsKKwlzdHJ1Y3QgdGltZXZh
bCBub3RlX3RpbWU7CisJdW5zaWduZWQgaW50IGluZm90eXBlOworCXN0cnVjdCBzY3RwX3JlY3Z2
X3JuIHJuOworCXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3Ju
KTsKKworCWNvbm5fc29jayA9ICooc3RydWN0IHNvY2tldCAqKilhcmc7CisjaWZkZWYgX1dJTjMy
CisJdGlkID0gR2V0Q3VycmVudFRocmVhZCgpOworI2Vsc2UKKwl0aWQgPSBwdGhyZWFkX3NlbGYo
KTsKKwlwdGhyZWFkX2RldGFjaCh0aWQpOworI2VuZGlmCisKKwlidWYgPSBtYWxsb2MoQlVGRkVS
U0laRSk7CisJZmxhZ3MgPSAwOworCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7CisJaW5mb3R5cGUgPSAwOworCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZWN2dl9ybikpOworCW4gPSB1c3JzY3RwX3JlY3Z2KGNvbm5fc29jaywgYnVmLCBCVUZG
RVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkg
ICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7CisKKwlnZXR0aW1l
b2ZkYXkoJnRpbWVfc3RhcnQsIE5VTEwpOworCXdoaWxlIChuID4gMCkgeworCQlyZWN2X2NhbGxz
Kys7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCW5vdGlmaWNhdGlvbnMr
KzsKKwkJCWdldHRpbWVvZmRheSgmbm90ZV90aW1lLCBOVUxMKTsKKwkJCXByaW50Zigibm90aWZp
Y2F0aW9uIGFycml2ZWQgYXQgJWZcbiIsIG5vdGVfdGltZS50dl9zZWMrKGRvdWJsZSlub3RlX3Rp
bWUudHZfdXNlYy8xMDAwMDAwLjApOworCQkJc25wID0gKHVuaW9uIHNjdHBfbm90aWZpY2F0aW9u
ICopYnVmOworCQkJaWYgKHNucC0+c25faGVhZGVyLnNuX3R5cGU9PVNDVFBfUEVFUl9BRERSX0NI
QU5HRSkKKwkJCXsKKwkJCQlzcGMgPSAmc25wLT5zbl9wYWRkcl9jaGFuZ2U7CisJCQkJcHJpbnRm
KCJTQ1RQX1BFRVJfQUREUl9DSEFOR0U6IHN0YXRlPSVkLCBlcnJvcj0lZFxuIixzcGMtPnNwY19z
dGF0ZSwgc3BjLT5zcGNfZXJyb3IpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKHZlcnlfdmVy
Ym9zZSkgeworCQkJCXByaW50ZigiTWVzc2FnZSByZWNlaXZlZFxuIik7CisJCQl9CisJCQlzdW0g
Kz0gbjsKKwkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKKwkJCQltZXNzYWdlcysrOworCQkJCWlm
IChmaXJzdF9sZW5ndGggPT0gMCkKKwkJCQkJZmlyc3RfbGVuZ3RoID0gc3VtOworCQkJfQorCQl9
CisJCWZsYWdzID0gMDsKKwkJbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKKwkJaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7CisJCWluZm90
eXBlID0gMDsKKwkJbWVtc2V0KCZybiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSk7
CisJCW4gPSB1c3JzY3RwX3JlY3Z2KGNvbm5fc29jaywgKHZvaWQgKikgYnVmLCBCVUZGRVJTSVpF
LCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAodm9pZCAqKSZybiwKKwkJICAgICAg
ICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKwl9CisJaWYgKG4gPCAw
KQorCQlwZXJyb3IoInNjdHBfcmVjdnYiKTsKKwlnZXR0aW1lb2ZkYXkoJnRpbWVfbm93LCBOVUxM
KTsKKwl0aW1lcnN1YigmdGltZV9ub3csICZ0aW1lX3N0YXJ0LCAmdGltZV9kaWZmKTsKKwlzZWNv
bmRzID0gdGltZV9kaWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAw
MC4wOworCXByaW50ZigiJWxsdSwgJWx1LCAlbHUsICVsdSwgJWxsdSwgJWYsICVmXG4iLAorCSAg
ICAgICAgZmlyc3RfbGVuZ3RoLCBtZXNzYWdlcywgcmVjdl9jYWxscywgbm90aWZpY2F0aW9ucywg
c3VtLCBzZWNvbmRzLCAoZG91YmxlKWZpcnN0X2xlbmd0aCAqIChkb3VibGUpbWVzc2FnZXMgLyBz
ZWNvbmRzKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwl1c3JzY3RwX2Nsb3NlKGNvbm5fc29jayk7CisJ
ZnJlZShidWYpOworI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKE5V
TEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK3NlbmRfY2Ioc3RydWN0IHNvY2tldCAqc29j
aywgdWludDMyX3Qgc2JfZnJlZSkgeworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKwor
CWlmICgobWVzc2FnZXMgPT0gMCkgJiB2ZXJib3NlKSB7CisJCXByaW50ZigiU3RhcnQgc2VuZGlu
ZyAiKTsKKwkJaWYgKG51bWJlcl9vZl9tZXNzYWdlcyA+IDApIHsKKwkJCXByaW50ZigiJWxkIG1l
c3NhZ2VzICIsIChsb25nKW51bWJlcl9vZl9tZXNzYWdlcyk7CisJCX0KKwkJaWYgKHJ1bnRpbWUg
PiAwKSB7CisJCQlwcmludGYoImZvciAldSBzZWNvbmRzIC4uLiIsIHJ1bnRpbWUpOworCQl9CisJ
CXByaW50ZigiXG4iKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJc25kaW5mby5zbmRfc2lk
ID0gMDsKKwlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJaWYgKHVub3JkZXJlZCAhPSAwKSB7CisJ
CXNuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCX0KKwlzbmRpbmZvLnNuZF9w
cGlkID0gMDsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNuZF9hc3NvY19p
ZCA9IDA7CisKKwl3aGlsZSAoIWRvbmUgJiYgKChudW1iZXJfb2ZfbWVzc2FnZXMgPT0gMCkgfHwg
KG1lc3NhZ2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkpIHsKKwkJaWYgKHZlcnlfdmVy
Ym9zZSkgeworCQkJcHJpbnRmKCJTZW5kaW5nIG1lc3NhZ2UgbnVtYmVyICVsdS5cbiIsIG1lc3Nh
Z2VzICsgMSk7CisJCX0KKworCQlpZiAodXNyc2N0cF9zZW5kdihwc29jaywgYnVmZmVyLCBsZW5n
dGgsCisJCSAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRy
LCAxLAorCQkgICAgICAgICAgICAgICAgICAodm9pZCAqKSZzbmRpbmZvLCAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLAorCQkgICAgICAg
ICAgICAgICAgICAwKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFV09VTERCTE9DSyAmJiBlcnJu
byAhPSBFQUdBSU4pIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYgKGNiKSIpOworCQkJCWV4
aXQoMSk7CisJCQl9IGVsc2UgeworCQkJCWlmICh2ZXJ5X3ZlcmJvc2UpeworCQkJCQlwcmludGYo
IkVXT1VMREJMT0NLIG9yIEVBR0FJTiBmb3IgbWVzc2FnZSBudW1iZXIgJWx1IC0gd2lsbCByZXRy
eVxuIiwgbWVzc2FnZXMgKyAxKTsKKwkJCQl9CisJCQkJLyogc2VuZCB1bnRpbCBFV09VTERCTE9D
SyB0aGVuIGV4aXQgY2FsbGJhY2suICovCisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJfQorCQlt
ZXNzYWdlcysrOworCX0KKwlpZiAoKGRvbmUgPT0gMSkgfHwgKG1lc3NhZ2VzID09IChudW1iZXJf
b2ZfbWVzc2FnZXMgLSAxKSkpIHsKKwkJaWYgKHZlcnlfdmVyYm9zZSkKKwkJCXByaW50ZigiU2Vu
ZGluZyBmaW5hbCBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBtZXNzYWdlcyArIDEpOworCisJCXNu
ZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfRU9GOworCQlpZiAodXNyc2N0cF9zZW5kdihwc29jaywg
YnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAxLAorCQkg
ICAgICAgICAgICAgICAgICAodm9pZCAqKSZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLAorCQkgICAgICAgICAgICAgICAg
ICAwKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFV09VTERCTE9DSyAmJiBlcnJubyAhPSBFQUdB
SU4pIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYgKGNiKSIpOworCQkJCWV4aXQoMSk7CisJ
CQl9IGVsc2UgeworCQkJCWlmICh2ZXJ5X3ZlcmJvc2UpeworCQkJCQlwcmludGYoIkVXT1VMREJM
T0NLIG9yIEVBR0FJTiBmb3IgZmluYWwgbWVzc2FnZSBudW1iZXIgJWx1IC0gd2lsbCByZXRyeVxu
IiwgbWVzc2FnZXMgKyAxKTsKKwkJCQl9CisJCQkJLyogc2VuZCB1bnRpbCBFV09VTERCTE9DSyB0
aGVuIGV4aXQgY2FsbGJhY2suICovCisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJfQorCQltZXNz
YWdlcysrOworCQlkb25lID0gMjsKKwl9CisKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50
CitzZXJ2ZXJfcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tz
dG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0
IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJc3RydWN0
IHRpbWV2YWwgbm93LCBkaWZmX3RpbWU7CisJZG91YmxlIHNlY29uZHM7CisKKwlpZiAoZGF0YSA9
PSBOVUxMKSB7CisJCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwkJdGltZXJzdWIoJm5vdywg
JnN0YXJ0X3RpbWUsICZkaWZmX3RpbWUpOworCQlzZWNvbmRzID0gZGlmZl90aW1lLnR2X3NlYyAr
IChkb3VibGUpZGlmZl90aW1lLnR2X3VzZWMvMTAwMDAwMC4wOworCQlwcmludGYoIiVsbHUsICVs
dSwgJWxsdSwgJWYsICVmXG4iLAorCQkJZmlyc3RfbGVuZ3RoLCBtZXNzYWdlcywgc3VtLCBzZWNv
bmRzLCAoZG91YmxlKWZpcnN0X2xlbmd0aCAqIChkb3VibGUpbWVzc2FnZXMgLyBzZWNvbmRzKTsK
KwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJZmlyc3RfbGVuZ3RoID0gMDsKKwkJc3VtID0gMDsK
KwkJbWVzc2FnZXMgPSAwOworCQlyZXR1cm4gKDEpOworCX0KKwlpZiAoZmlyc3RfbGVuZ3RoID09
IDApIHsKKwkJZmlyc3RfbGVuZ3RoID0gKHVuc2lnbmVkIGludClkYXRhbGVuOworCQlnZXR0aW1l
b2ZkYXkoJnN0YXJ0X3RpbWUsIE5VTEwpOworCX0KKwlzdW0gKz0gZGF0YWxlbjsKKwltZXNzYWdl
cysrOworCisJZnJlZShkYXRhKTsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50CitjbGll
bnRfcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBh
ZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBf
cmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJZnJlZShkYXRhKTsK
KwlyZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19wcmludGYoY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZwcmlu
dGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIgKiphcmd2KQoreworI2lmbmRlZiBfV0lOMzIKKwlpbnQgYzsKKyNlbmRpZgorCXNvY2tsZW5f
dCBhZGRyX2xlbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxfYWRkcjsKKwlzdHJ1Y3QgdGlt
ZXZhbCB0aW1lX3N0YXJ0LCB0aW1lX25vdywgdGltZV9kaWZmOworCWludCBjbGllbnQ7CisJdWlu
dDE2X3QgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHBvcnQsIGxvY2FsX3VkcF9wb3J0LCByZW1v
dGVfdWRwX3BvcnQ7CisJaW50IHJjdmJ1ZnNpemU9MCwgc25kYnVmc2l6ZT0wLCBteXJjdmJ1ZnNp
emUsIG15c25kYnVmc2l6ZTsKKwlzb2NrbGVuX3QgaW50bGVuOworCWRvdWJsZSBzZWNvbmRzOwor
CWRvdWJsZSB0aHJvdWdocHV0OworCWludCBub2RlbGF5ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSBhdjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVjdCBzY3Rw
X3NuZGluZm8gc25kaW5mbzsKKyNpZmRlZiBfV0lOMzIKKwl1bnNpZ25lZCBsb25nIHNyY0FkZHI7
CisJSEFORExFIHRpZDsKKyNlbHNlCisJaW5fYWRkcl90IHNyY0FkZHI7CisJcHRocmVhZF90IHRp
ZDsKKyNlbmRpZgorCWludCBmcmFncG9pbnQgPSAwOworCXN0cnVjdCBzY3RwX3NldGFkYXB0YXRp
b24gaW5kID0gezB9OworI2lmZGVmIF9XSU4zMgorCWNoYXIgKm9wdDsKKwlpbnQgb3B0aW5kOwor
I2VuZGlmCisJdW5vcmRlcmVkID0gMDsKKworCWxlbmd0aCA9IERFRkFVTFRfTEVOR1RIOworCW51
bWJlcl9vZl9tZXNzYWdlcyA9IERFRkFVTFRfTlVNQkVSX09GX01FU1NBR0VTOworCXBvcnQgPSBE
RUZBVUxUX1BPUlQ7CisJcmVtb3RlX3VkcF9wb3J0ID0gMDsKKwlsb2NhbF91ZHBfcG9ydCA9IDk4
OTk7CisJdmVyYm9zZSA9IDA7CisJdmVyeV92ZXJib3NlID0gMDsKKwlzcmNBZGRyID0gaHRvbmwo
SU5BRERSX0FOWSk7CisKKwltZW1zZXQoKHZvaWQgKikgJnJlbW90ZV9hZGRyLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICopICZsb2NhbF9hZGRyLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisKKyNpZm5kZWYgX1dJTjMyCisJd2hpbGUgKChj
ID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOmNwOmw6RTpmOkw6bjpSOlM6VDp1VTp2VkQiKSkgIT0g
LTEpCisJCXN3aXRjaChjKSB7CisJCQljYXNlICdhJzoKKwkJCQlpbmQuc3NiX2FkYXB0YXRpb25f
aW5kID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnYyc6CisJCQkJdXNlX2Ni
ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJCWxlbmd0aCA9IGF0b2kob3B0YXJn
KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCW51bWJlcl9vZl9tZXNzYWdlcyA9IGF0
b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOgorCQkJCXBvcnQgPSBhdG9pKG9w
dGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdFJzoKKwkJCQlsb2NhbF91ZHBfcG9ydCA9IGF0
b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2YnOgorCQkJCWZyYWdwb2ludCA9IGF0
b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJCWlmIChpbmV0X3B0b24o
QUZfSU5FVCwgb3B0YXJnLCAmc3JjQWRkcikgIT0gMSkgeworCQkJCQlwcmludGYoIkNhbid0IHBh
cnNlICVzXG4iLCBvcHRhcmcpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgJ1InOgorCQkJ
CXJjdmJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdTJzoKKwkJ
CQlzbmRidWZzaXplID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAnVCc6CisJ
CQkJcnVudGltZSA9IGF0b2kob3B0YXJnKTsKKwkJCQludW1iZXJfb2ZfbWVzc2FnZXMgPSAwOwor
CQkJCWJyZWFrOworCQkJY2FzZSAndSc6CisJCQkJdW5vcmRlcmVkID0gMTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgJ1UnOgorCQkJCXJlbW90ZV91ZHBfcG9ydCA9IGF0b2kob3B0YXJnKTsKKwkJCQli
cmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UgPSAxOworCQkJCWJyZWFrOworCQkJY2Fz
ZSAnVic6CisJCQkJdmVyYm9zZSA9IDE7CisJCQkJdmVyeV92ZXJib3NlID0gMTsKKwkJCQlicmVh
azsKKwkJCWNhc2UgJ0QnOgorCQkJCW5vZGVsYXkgPSAxOworCQkJCWJyZWFrOworCQkJZGVmYXVs
dDoKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgVXNhZ2UpOworCQkJCWV4aXQoMSk7CisJCX0K
KyNlbHNlCisJZm9yIChvcHRpbmQgPSAxOyBvcHRpbmQgPCBhcmdjOyBvcHRpbmQrKykgeworCQlp
ZiAoYXJndltvcHRpbmRdWzBdID09ICctJykgeworCQkJc3dpdGNoIChhcmd2W29wdGluZF1bMV0p
IHsKKwkJCQljYXNlICdhJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXBy
aW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFy
Z3Zbb3B0aW5kXTsKKwkJCQkJaW5kLnNzYl9hZGFwdGF0aW9uX2luZCA9IGF0b2kob3B0KTsKKwkJ
CQkJYnJlYWs7CisJCQkJY2FzZSAnYyc6CisJCQkJCXVzZV9jYiA9IDE7CisJCQkJCWJyZWFrOwor
CQkJCWNhc2UgJ2wnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRm
KCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltv
cHRpbmRdOworCQkJCQlsZW5ndGggPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug
J3AnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVz
YWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwor
CQkJCQlwb3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICduJzoKKwkJCQkJ
aWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJ
CQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJbnVtYmVy
X29mX21lc3NhZ2VzID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdmJzoKKwkJ
CQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJ
CQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJZnJh
Z3BvaW50ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdMJzoKKwkJCQkJaWYg
KCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQll
eGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJaW5ldF9wdG9u
KEFGX0lORVQsIG9wdCwgJnNyY0FkZHIpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdVJzoKKwkJ
CQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJ
CQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJcmVt
b3RlX3VkcF9wb3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdFJzoKKwkJ
CQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJ
CQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJbG9j
YWxfdWRwX3BvcnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1InOgorCQkJ
CQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJ
CQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlyY3Zi
dWZzaXplID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNlICdTJzoKKwkJCQkJaWYg
KCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQll
eGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJc25kYnVmc2l6
ZSA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVCc6CisJCQkJCWlmICgrK29w
dGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQkJZXhpdCgx
KTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJCXJ1bnRpbWUgPSBhdG9p
KG9wdCk7CisJCQkJCW51bWJlcl9vZl9tZXNzYWdlcyA9IDA7CisJCQkJCWJyZWFrOworCQkJCWNh
c2UgJ3UnOgorCQkJCQl1bm9yZGVyZWQgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlICd2JzoK
KwkJCQkJdmVyYm9zZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ1YnOgorCQkJCQl2ZXJi
b3NlID0gMTsKKwkJCQkJdmVyeV92ZXJib3NlID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAn
RCc6CisJCQkJCW5vZGVsYXkgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlw
cmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJ
YnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAob3B0aW5kID09IGFyZ2MpIHsKKwkJY2xpZW50
ID0gMDsKKwkJbG9jYWxfcG9ydCA9IHBvcnQ7CisJCXJlbW90ZV9wb3J0ID0gMDsKKwl9IGVsc2Ug
eworCQljbGllbnQgPSAxOworCQlsb2NhbF9wb3J0ID0gMDsKKwkJcmVtb3RlX3BvcnQgPSBwb3J0
OworCX0KKwlsb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCWxvY2FsX2FkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
I2VuZGlmCisJbG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGxvY2FsX3BvcnQpOworCWxvY2Fs
X2FkZHIuc2luX2FkZHIuc19hZGRyID0gc3JjQWRkcjsKKworCXVzcnNjdHBfaW5pdChsb2NhbF91
ZHBfcG9ydCwgTlVMTCwgZGVidWdfcHJpbnRmKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisJdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5KDEpOworCisJaWYgKGNsaWVudCkgeworCQlpZiAo
dXNlX2NiKSB7CisJCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tf
U1RSRUFNLCBJUFBST1RPX1NDVFAsIGNsaWVudF9yZWNlaXZlX2NiLCBzZW5kX2NiLCBsZW5ndGgs
IE5VTEwpKSkgeworCQkJCXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJCQlleGl0KDEpOworCQkJ
fQorCQl9IGVsc2UgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkpIHsKKwkJCQlw
ZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0gZWxzZSB7
CisJCWlmICh1c2VfY2IpIHsKKwkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5F
VCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgc2VydmVyX3JlY2VpdmVfY2IsIE5VTEwsIDAs
IE5VTEwpKSkgeworCQkJCXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJCQlleGl0KDEpOworCQkJ
fQorCQl9IGVsc2UgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkpIHsKKwkJCQlw
ZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0KKwkJfQorCX0KKworCWlm
ICh1c3JzY3RwX2JpbmQocHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmbG9jYWxfYWRkciwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IC0xKSB7CisJCXBlcnJvcigidXNyc2N0cF9iaW5k
Iik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQ
Uk9UT19TQ1RQLCBTQ1RQX0FEQVBUQVRJT05fTEFZRVIsIChjb25zdCB2b2lkKikmaW5kLCAoc29j
a2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uKSkgPCAwKSB7CisJCXBlcnJv
cigic2V0c29ja29wdCIpOworCX0KKworCWlmICghY2xpZW50KSB7CisJCWlmIChyY3ZidWZzaXpl
KSB7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09DS0VULCBTT19SQ1ZC
VUYsICZyY3ZidWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJcGVycm9yKCJzZXRzb2Nr
b3B0OiByY3ZidWYiKTsKKwkJCX0KKwkJfQorCQlpZiAodmVyYm9zZSkgeworCQkJaW50bGVuID0g
c2l6ZW9mKGludCk7CisJCQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09DS0VU
LCBTT19SQ1ZCVUYsICZteXJjdmJ1ZnNpemUsIChzb2NrbGVuX3QgKikmaW50bGVuKSA8IDApIHsK
KwkJCQlwZXJyb3IoImdldHNvY2tvcHQ6IHJjdmJ1ZiIpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJp
bnRmKHN0ZG91dCwiUmVjZWl2ZSBidWZmZXIgc2l6ZTogJWQuXG4iLCBteXJjdmJ1ZnNpemUpOwor
CQkJfQorCQl9CisKKwkJaWYgKHVzcnNjdHBfbGlzdGVuKHBzb2NrLCAxKSA8IDApIHsKKwkJCXBl
cnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKworCQl3aGlsZSAoMSkg
eworCQkJbWVtc2V0KCZyZW1vdGVfYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
OworCQkJYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWlmICh1c2Vf
Y2IpIHsKKwkJCQlzdHJ1Y3Qgc29ja2V0ICpjb25uX3NvY2s7CisKKwkJCQlpZiAoKGNvbm5fc29j
ayA9IHVzcnNjdHBfYWNjZXB0KHBzb2NrLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRk
ciwgJmFkZHJfbGVuKSk9PSBOVUxMKSB7CisJCQkJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsK
KwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3Qgc29ja2V0ICoq
Y29ubl9zb2NrOworCisJCQkJY29ubl9zb2NrID0gKHN0cnVjdCBzb2NrZXQgKiopbWFsbG9jKHNp
emVvZihzdHJ1Y3Qgc29ja2V0ICopKTsKKwkJCQlpZiAoKCpjb25uX3NvY2sgPSB1c3JzY3RwX2Fj
Y2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsICZhZGRyX2xlbikp
PT0gTlVMTCkgeworCQkJCQlwZXJyb3IoInVzcnNjdHBfYWNjZXB0Iik7CisJCQkJCWNvbnRpbnVl
OworCQkJCX0KKyNpZmRlZiBfV0lOMzIKKwkJCQl0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwg
JmhhbmRsZV9jb25uZWN0aW9uLCAodm9pZCAqKWNvbm5fc29jaywgMCwgTlVMTCk7CisjZWxzZQor
CQkJCXB0aHJlYWRfY3JlYXRlKCZ0aWQsIE5VTEwsICZoYW5kbGVfY29ubmVjdGlvbiwgKHZvaWQg
Kiljb25uX3NvY2spOworI2VuZGlmCisJCQl9CisJCQlpZiAodmVyYm9zZSkgeworCQkJCS8vIGNv
bnN0IGNoYXIgKmluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBz
b2NrbGVuX3Qgc2l6ZSkKKwkJCQkvL2luZXRfbnRvYShyZW1vdGVfYWRkci5zaW5fYWRkcikKKwkJ
CQljaGFyIGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCQlwcmludGYoIkNvbm5lY3Rpb24g
YWNjZXB0ZWQgZnJvbSAlczolZFxuIiwgaW5ldF9udG9wKEFGX0lORVQsICYocmVtb3RlX2FkZHIu
c2luX2FkZHIpLCBhZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBudG9ocyhyZW1vdGVfYWRkci5z
aW5fcG9ydCkpOworCQkJfQorCQl9CisJCS8vdXNyc2N0cF9jbG9zZShwc29jayk7IC8vIHVucmVh
Y2hhYmxlCisJfSBlbHNlIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ7
CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKHJlbW90ZV91ZHBfcG9ydCk7CisJCWlmICh1c3Jz
Y3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQ
U19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNj
dHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKKwkJfQorCisJ
CXJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
CQlyZW1vdGVfYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5k
aWYKKwkJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndltvcHRpbmRdLCAmcmVtb3RlX2FkZHIu
c2luX2FkZHIuc19hZGRyKSl7CisJCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGRlc3RpbmF0aW9u
IGFkZHJlc3NcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlyZW1vdGVfYWRkci5zaW5fcG9ydCA9
IGh0b25zKHJlbW90ZV9wb3J0KTsKKworCQkvKiBUT0RPIGZyYWdwb2ludCBzdHVmZiAqLworCQlp
ZiAobm9kZWxheSA9PSAxKSB7CisJCQlvcHR2YWwgPSAxOworCQl9IGVsc2UgeworCQkJb3B0dmFs
ID0gMDsKKwkJfQorCQl1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9OT0RFTEFZLCAmb3B0dmFsLCBzaXplb2YoaW50KSk7CisKKwkJaWYgKGZyYWdwb2ludCkgewor
CQkJYXYuYXNzb2NfaWQgPSAwOworCQkJYXYuYXNzb2NfdmFsdWUgPSBmcmFncG9pbnQ7CisJCQlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfTUFYU0VHLCAm
YXYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgeworCQkJCXBlcnJvcigi
c2V0c29ja29wdDogU0NUUF9NQVhTRUciKTsKKwkJCX0KKwkJfQorCisJCWlmIChzbmRidWZzaXpl
KSB7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09DS0VULCBTT19TTkRC
VUYsICZzbmRidWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJcGVycm9yKCJzZXRzb2Nr
b3B0OiBzbmRidWYiKTsKKwkJCX0KKwkJfQorCQlpZiAodmVyYm9zZSkgeworCQkJaW50bGVuID0g
c2l6ZW9mKGludCk7CisJCQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBzb2NrLCBTT0xfU09DS0VU
LCBTT19TTkRCVUYsICZteXNuZGJ1ZnNpemUsIChzb2NrbGVuX3QgKikmaW50bGVuKSA8IDApIHsK
KwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNPX1NOREJVRiIpOworCQkJfSBlbHNlIHsKKwkJCQlm
cHJpbnRmKHN0ZG91dCwiU2VuZCBidWZmZXIgc2l6ZTogJWQuXG4iLCBteXNuZGJ1ZnNpemUpOwor
CQkJfQorCQl9CisKKwkJYnVmZmVyID0gbWFsbG9jKGxlbmd0aCk7CisJCW1lbXNldChidWZmZXIs
ICdiJywgbGVuZ3RoKTsKKworCQlpZiAodXNyc2N0cF9jb25uZWN0KHBzb2NrLCAoc3RydWN0IHNv
Y2thZGRyICopICZyZW1vdGVfYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IC0x
ICkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJCWV4aXQoMSk7CisJCX0KKwor
CQlnZXR0aW1lb2ZkYXkoJnRpbWVfc3RhcnQsIE5VTEwpOworCisJCWRvbmUgPSAwOworCisJCWlm
IChydW50aW1lID4gMCkgeworI2lmbmRlZiBfV0lOMzIKKwkJCXNpZ25hbChTSUdBTFJNLCBzdG9w
X3NlbmRlcik7CisJCQlhbGFybShydW50aW1lKTsKKyNlbHNlCisJCQlwcmludGYoIllvdSBjYW5u
b3Qgc2V0IHRoZSBydW50aW1lIGluIFdpbmRvd3MgeWV0XG4iKTsKKwkJCWV4aXQoLTEpOworI2Vu
ZGlmCisJCX0KKworCQlpZiAodXNlX2NiKSB7CisJCQl3aGlsZSAoZG9uZSA8IDIgJiYgKG1lc3Nh
Z2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkgeworI2lmZGVmIF9XSU4zMgorCQkJCVNs
ZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQkJfQorCQl9IGVsc2Ug
eworCQkJc25kaW5mby5zbmRfc2lkID0gMDsKKwkJCXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwkJ
CWlmICh1bm9yZGVyZWQgIT0gMCkgeworCQkJCXNuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5P
UkRFUkVEOworCQkJfQorCQkJc25kaW5mby5zbmRfcHBpZCA9IDA7CisJCQlzbmRpbmZvLnNuZF9j
b250ZXh0ID0gMDsKKwkJCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKKwkJCWlmICh2ZXJib3Nl
KSB7CisJCQkJcHJpbnRmKCJTdGFydCBzZW5kaW5nICIpOworCQkJCWlmIChudW1iZXJfb2ZfbWVz
c2FnZXMgPiAwKSB7CisJCQkJCXByaW50ZigiJWxkIG1lc3NhZ2VzICIsIChsb25nKW51bWJlcl9v
Zl9tZXNzYWdlcyk7CisJCQkJfQorCQkJCWlmIChydW50aW1lID4gMCkgeworCQkJCQlwcmludGYo
ImZvciAldSBzZWNvbmRzIC4uLiIsIHJ1bnRpbWUpOworCQkJCX0KKwkJCQlwcmludGYoIlxuIik7
CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl9CisJCQl3aGlsZSAoIWRvbmUgJiYgKChudW1iZXJf
b2ZfbWVzc2FnZXMgPT0gMCkgfHwgKG1lc3NhZ2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEp
KSkpIHsKKwkJCQlpZiAodmVyeV92ZXJib3NlKSB7CisJCQkJCXByaW50ZigiU2VuZGluZyBtZXNz
YWdlIG51bWJlciAlbHUuXG4iLCBtZXNzYWdlcyArIDEpOworCQkJCX0KKworCQkJCWlmICh1c3Jz
Y3RwX3NlbmR2KHBzb2NrLCBidWZmZXIsIGxlbmd0aCwgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVt
b3RlX2FkZHIsIDEsCisJCQkJICAgICAgICAgICAgICAgICAgKHZvaWQgKikmc25kaW5mbywgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywK
KwkJCQkgICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCQkJcGVycm9yKCJ1c3JzY3RwX3Nl
bmR2Iik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCW1lc3NhZ2VzKys7CisJCQl9CisJCQlp
ZiAodmVyeV92ZXJib3NlKSB7CisJCQkJcHJpbnRmKCJTZW5kaW5nIG1lc3NhZ2UgbnVtYmVyICVs
dS5cbiIsIG1lc3NhZ2VzICsgMSk7CisJCQl9CisKKwkJCXNuZGluZm8uc25kX2ZsYWdzIHw9IFND
VFBfRU9GOworCQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZlciwgbGVuZ3RoLCAoc3Ry
dWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKKwkJCSAgICAgICAgICAgICAgICAgICh2
b2lkICopJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBT
Q1RQX1NFTkRWX1NORElORk8sCisJCQkgICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCQlw
ZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJCQlleGl0KDEpOworCQkJfQorCQkJbWVzc2FnZXMr
KzsKKwkJfQorCQlmcmVlIChidWZmZXIpOworCisJCWlmICh2ZXJib3NlKSB7CisJCQlwcmludGYo
IkNsb3Npbmcgc29ja2V0LlxuIik7CisJCX0KKworCQl1c3JzY3RwX2Nsb3NlKHBzb2NrKTsKKwkJ
Z2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJCXRpbWVyc3ViKCZ0aW1lX25vdywgJnRp
bWVfc3RhcnQsICZ0aW1lX2RpZmYpOworCQlzZWNvbmRzID0gdGltZV9kaWZmLnR2X3NlYyArIChk
b3VibGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAwMDsKKwkJcHJpbnRmKCIlcyBvZiAlbGQgbWVz
c2FnZXMgb2YgbGVuZ3RoICV1IHRvb2sgJWYgc2Vjb25kcy5cbiIsCisJCSAgICAgICAiU2VuZGlu
ZyIsIG1lc3NhZ2VzLCBsZW5ndGgsIHNlY29uZHMpOworCQl0aHJvdWdocHV0ID0gKGRvdWJsZSlt
ZXNzYWdlcyAqIChkb3VibGUpbGVuZ3RoIC8gc2Vjb25kczsKKwkJcHJpbnRmKCJUaHJvdWdocHV0
IHdhcyAlZiBCeXRlL3NlYy5cbiIsIHRocm91Z2hwdXQpOworCX0KKworCXdoaWxlICh1c3JzY3Rw
X2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQor
CQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzZXJfYXRvbWljLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBmMzQ0MDU1ZGM1YmI4MTU3MmJlMjUyOGM1NzU5N2IwYjgyZDFlYjli
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzZXJfYXRvbWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAsMCBAQAotLyotCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5
LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVl
bmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAq
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0g
KiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9BVE9NSUNfSF8KLSNkZWZp
bmUgX1VTRVJfQVRPTUlDX0hfCi0KLS8qIF9fVXNlcnNwYWNlX18gdmVyc2lvbiBvZiBzeXMvaTM4
Ni9pbmNsdWRlL2F0b21pYy5oIGdvZXMgaGVyZSAqLwotCi0vKiBUT0RPIEluIHRoZSBmdXR1cmUs
IG1pZ2h0IHdhbnQgdG8gbm90IHVzZSBpMzg2IHNwZWNpZmljIGFzc2VtYmx5LgotICogICAgVGhl
IG9wdGlvbnMgaW5jbHVkZToKLSAqICAgICAgIC0gaW1wbGVtZW50IHRoZW0gZ2VuZXJpY2FsbHkg
KGJ1dCBtYXliZSBub3QgdHJ1bHkgYXRvbWljPykgaW4gdXNlcnNwYWNlCi0gKiAgICAgICAtIGhh
dmUgaWZkZWYncyBmb3IgX19Vc2Vyc3BhY2VfYXJjaF8gcGVyaGFwcyAoT1MgaXNuJ3QgZW5vdWdo
Li4uKQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQgKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNk
ZWZpbmUgYXRvbWljX2FkZF9pbnQoYWRkciwgdmFsKSBJbnRlcmxvY2tlZEV4Y2hhbmdlQWRkKChM
UExPTkcpYWRkciwgKExPTkcpdmFsKQotI2RlZmluZSBhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIs
IHZhbCkgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFkZHIsIChMT05HKXZhbCkKLSNk
ZWZpbmUgYXRvbWljX3N1YnRyYWN0X2ludChhZGRyLCB2YWwpICAgSW50ZXJsb2NrZWRFeGNoYW5n
ZUFkZCgoTFBMT05HKWFkZHIsLSgoTE9ORyl2YWwpKQotI2RlZmluZSBhdG9taWNfY21wc2V0X2lu
dChkc3QsIGV4cCwgc3JjKSBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZSgoTFBMT05HKWRzdCwg
c3JjLCBleHApCi0jZGVmaW5lIFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVChhZGRy
KSAoSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFkZHIsICgtMUwpKSA9PSAxKQotI2Vs
c2UKLSNpbmNsdWRlIDxsaWJrZXJuL09TQXRvbWljLmg+Ci0jZGVmaW5lIGF0b21pY19hZGRfaW50
KGFkZHIsIHZhbCkgT1NBdG9taWNBZGQzMkJhcnJpZXIodmFsLCAoaW50MzJfdCAqKWFkZHIpCi0j
ZGVmaW5lIGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgdmFsKSBPU0F0b21pY0FkZDMyQmFycmll
cih2YWwsIChpbnQzMl90ICopYWRkcikKLSNkZWZpbmUgYXRvbWljX3N1YnRyYWN0X2ludChhZGRy
LCB2YWwpIE9TQXRvbWljQWRkMzJCYXJyaWVyKC12YWwsIChpbnQzMl90ICopYWRkcikKLSNkZWZp
bmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgT1NBdG9taWNDb21wYXJlQW5kU3dh
cEludEJhcnJpZXIoZXhwLCBzcmMsIChpbnQgKilkc3QpCi0jZGVmaW5lIFNDVFBfREVDUkVNRU5U
X0FORF9DSEVDS19SRUZDT1VOVChhZGRyKSAoYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtMSkg
PT0gMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQotI2RlZmluZSBTQ1RQX1NB
VkVfQVRPTUlDX0RFQ1JFTUVOVChhZGRyLCB2YWwpIFwKLXsgXAotCWludDMyX3QgbmV3dmFsOyBc
Ci0JbmV3dmFsID0gYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtdmFsKTsgXAotCWlmIChuZXd2
YWwgPCAwKSB7IFwKLQkJcGFuaWMoIkNvdW50ZXIgZ29lcyBuZWdhdGl2ZSIpOyBcCi0JfSBcCi19
Ci0jZWxzZQotI2RlZmluZSBTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVChhZGRyLCB2YWwpIFwK
LXsgXAotCWludDMyX3QgbmV3dmFsOyBcCi0JbmV3dmFsID0gYXRvbWljX2ZldGNoYWRkX2ludChh
ZGRyLCAtdmFsKTsgXAotCWlmIChuZXd2YWwgPCAwKSB7IFwKLQkJKmFkZHIgPSAwOyBcCi0JfSBc
Ci19Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi1zdGF0aWMg
dm9pZCBhdG9taWNfaW5pdCgpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9t
aWNfbXR4ICovCi0jZWxzZQotLy8gV2ViS2l0IGNoYW5nZSwgdGhpcyBjb25mbGljdHMgd2l0aCBh
dG9taWNfaW5pdCBNYWNPUyBtYWNyby4KLS8vIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5p
dCgpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9taWNfbXR4ICovCi0jZW5k
aWYKLQotI2Vsc2UKLS8qIFVzaW5nIGdjYyBidWlsdC1pbiBmdW5jdGlvbnMgZm9yIGF0b21pYyBt
ZW1vcnkgb3BlcmF0aW9ucwotICAgUmVmZXJlbmNlOiBodHRwOi8vZ2NjLmdudS5vcmcvb25saW5l
ZG9jcy9nY2MtNC4xLjAvZ2NjL0F0b21pYy1CdWlsdGlucy5odG1sCi0gICBSZXF1aXJlcyBnY2Mg
dmVyc2lvbiA0LjEuMAotICAgY29tcGlsZSB3aXRoIC1tYXJjaD1pNDg2Ci0gKi8KLQotLypBdG9t
aWNhbGx5IGFkZCBWIHRvICpQLiovCi0jZGVmaW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSAodm9p
ZCkgX19zeW5jX2ZldGNoX2FuZF9hZGQoUCwgVikKLQotLypBdG9taWNhbGx5IHN1YnRyYWNlIFYg
ZnJvbSAqUC4qLwotI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpICh2b2lkKSBfX3N5
bmNfZmV0Y2hfYW5kX3N1YihQLCBWKQotCi0vKgotICogQXRvbWljYWxseSBhZGQgdGhlIHZhbHVl
IG9mIHYgdG8gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBwIGFuZCByZXR1cm4KLSAqIHRoZSBw
cmV2aW91cyB2YWx1ZSBvZiAqcC4KLSAqLwotI2RlZmluZSBhdG9taWNfZmV0Y2hhZGRfaW50KHAs
IHYpIF9fc3luY19mZXRjaF9hbmRfYWRkKHAsIHYpCi0KLS8qIEZvbGxvd2luZyBleHBsYW5hdGlv
biBmcm9tIHNyYy9zeXMvaTM4Ni9pbmNsdWRlL2F0b21pYy5oLAotICogZm9yIGF0b21pYyBjb21w
YXJlIGFuZCBzZXQKLSAqCi0gKiBpZiAoKmRzdCA9PSBleHApICpkc3QgPSBzcmMgKGFsbCAzMiBi
aXQgd29yZHMpCi0gKgotICogUmV0dXJucyAwIG9uIGZhaWx1cmUsIG5vbi16ZXJvIG9uIHN1Y2Nl
c3MKLSAqLwotCi0jZGVmaW5lIGF0b21pY19jbXBzZXRfaW50KGRzdCwgZXhwLCBzcmMpIF9fc3lu
Y19ib29sX2NvbXBhcmVfYW5kX3N3YXAoZHN0LCBleHAsIHNyYykKLQotI2RlZmluZSBTQ1RQX0RF
Q1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoYWRkcikgKGF0b21pY19mZXRjaGFkZF9pbnQoYWRk
ciwgLTEpID09IDEpCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQotI2RlZmluZSBTQ1RQX1NBVkVf
QVRPTUlDX0RFQ1JFTUVOVChhZGRyLCB2YWwpIFwKLXsgXAotCWludDMyX3Qgb2xkdmFsOyBcCi0J
b2xkdmFsID0gYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtdmFsKTsgXAotCWlmIChvbGR2YWwg
PCB2YWwpIHsgXAotCQlwYW5pYygiQ291bnRlciBnb2VzIG5lZ2F0aXZlIik7IFwKLQl9IFwKLX0K
LSNlbHNlCi0jZGVmaW5lIFNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKGFkZHIsIHZhbCkgXAot
eyBcCi0JaW50MzJfdCBvbGR2YWw7IFwKLQlvbGR2YWwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KGFk
ZHIsIC12YWwpOyBcCi0JaWYgKG9sZHZhbCA8IHZhbCkgeyBcCi0JCSphZGRyID0gMDsgXAotCX0g
XAotfQotI2VuZGlmCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7fSAvKiBlbXB0
eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwotI2VuZGlmCi0KLSNpZiAwIC8q
IHVzaW5nIGxpYmF0b21pY19vcHMgKi8KLSNpbmNsdWRlICJ1c2VyX2luY2x1ZGUvYXRvbWljX29w
cy5oIgotCi0vKkF0b21pY2FsbHkgYWRkIGluY3IgdG8gKlAsIGFuZCByZXR1cm4gdGhlIG9yaWdp
bmFsIHZhbHVlIG9mICpQLiovCi0jZGVmaW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSBBT19mZXRj
aF9hbmRfYWRkKChBT190KilQLCBWKQotCi0jZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoUCwg
VikgQU9fZmV0Y2hfYW5kX2FkZCgoQU9fdCopUCwgLShWKSkKLQotLyoKLSAqIEF0b21pY2FsbHkg
YWRkIHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0
dXJuCi0gKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCi0gKi8KLSNkZWZpbmUgYXRvbWljX2Zl
dGNoYWRkX2ludChwLCB2KSBBT19mZXRjaF9hbmRfYWRkKChBT190KilwLCB2KQotCi0vKiBBdG9t
aWNhbGx5IGNvbXBhcmUgKmFkZHIgdG8gb2xkX3ZhbCwgYW5kIHJlcGxhY2UgKmFkZHIgYnkgbmV3
X3ZhbAotICAgaWYgdGhlIGZpcnN0IGNvbXBhcmlzb24gc3VjY2VlZHMuICBSZXR1cm5zIG5vbnpl
cm8gaWYgdGhlIGNvbXBhcmlzb24KLSAgIHN1Y2NlZWRlZCBhbmQgKmFkZHIgd2FzIHVwZGF0ZWQu
Ci0qLwotLyogRm9sbG93aW5nIEV4cGxhbmF0aW9uIGZyb20gc3JjL3N5cy9pMzg2L2luY2x1ZGUv
YXRvbWljLmgsIHdoaWNoCi0gICBtYXRjaGVzIHRoYXQgb2YgQU9fY29tcGFyZV9hbmRfc3dhcCBh
Ym92ZS4KLSAqIEF0b21pYyBjb21wYXJlIGFuZCBzZXQsIHVzZWQgYnkgdGhlIG11dGV4IGZ1bmN0
aW9ucwotICoKLSAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAoYWxsIDMyIGJpdCB3b3Jk
cykKLSAqCi0gKiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3VjY2VzcwotICov
Ci0KLSNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgQU9fY29tcGFyZV9h
bmRfc3dhcCgoQU9fdCopZHN0LCBleHAsIHNyYykKLQotc3RhdGljIGlubGluZSB2b2lkIGF0b21p
Y19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8K
LSNlbmRpZiAvKiBjbG9zaW5nICNpZiBmb3IgbGliYXRvbWljICovCi0KLSNpZiAwIC8qIHVzaW5n
IGF0b21pY19tdHggKi8KLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQotZXh0ZXJuIHVzZXJsYW5k
X211dGV4X3QgYXRvbWljX210eDsKLQotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7Ci0JSW5pdGlhbGl6ZUNyaXRp
Y2FsU2VjdGlvbigmYXRvbWljX210eCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2Rl
c3Ryb3koKSB7Ci0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZhdG9taWNfbXR4KTsKLX0KLXN0YXRp
YyBpbmxpbmUgdm9pZCBhdG9taWNfbG9jaygpIHsKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmYXRv
bWljX210eCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3VubG9jaygpIHsKLQlMZWF2
ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7Ci19Ci0jZWxzZQotc3RhdGljIGlubGluZSB2
b2lkIGF0b21pY19pbml0KCkgewotCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0cjsKLQot
CXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOwotI2lmZGVmIElOVkFSSUFOVFMK
LQlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleF9hdHRyLCBQVEhSRUFEX01VVEVYX0VS
Uk9SQ0hFQ0spOwotI2VuZGlmCi0JcHRocmVhZF9tdXRleF9pbml0KCZhY2NlcHRfbXR4LCAmbXV0
ZXhfYXR0cik7Ci0JcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhfYXR0cik7Ci19Ci1z
dGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7Ci0JKHZvaWQpcHRocmVhZF9tdXRl
eF9kZXN0cm95KCZhdG9taWNfbXR4KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfbG9j
aygpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJmF0
b21pY19tdHgpID09IDAsICgiYXRvbWljX2xvY2s6IGF0b21pY19tdHggYWxyZWFkeSBsb2NrZWQi
KSkKLSNlbHNlCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZhdG9taWNfbXR4KTsKLSNlbmRp
ZgotfQotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY191bmxvY2soKSB7Ci0jaWZkZWYgSU5WQVJJ
QU5UUwotCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJmF0b21pY19tdHgpID09IDAsICgi
YXRvbWljX3VubG9jazogYXRvbWljX210eCBub3QgbG9ja2VkIikpCi0jZWxzZQotCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdG9taWNfbXR4KTsKLSNlbmRpZgotfQotI2VuZGlmCi0vKgot
ICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxvY2sgcHJlZml4ZXMgc28gdGhhdCB0aGUgYmlu
YXJpZXMgd2lsbCBydW4KLSAqIG9uIGJvdGggU01QIGFuZCAhU01QIHN5c3RlbXMuCi0gKi8KLQot
I2RlZmluZQlNUExPQ0tFRAkibG9jayA7ICIKLQotLyoKLSAqIEF0b21pY2FsbHkgYWRkIHRoZSB2
YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0dXJuCi0gKiB0
aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCi0gKi8KLXN0YXRpYyBfX2lubGluZSB1X2ludAotYXRv
bWljX2ZldGNoYWRkX2ludCh2b2xhdGlsZSB2b2lkICpuLCB1X2ludCB2KQotewotCWludCAqcCA9
IChpbnQgKikgbjsKLQlhdG9taWNfbG9jaygpOwotCV9fYXNtIF9fdm9sYXRpbGUoCi0JIgkiIE1Q
TE9DS0VEICIJCSIKLQkiCXhhZGRsCSUwLCAlMSA7CSIKLQkiIyBhdG9taWNfZmV0Y2hhZGRfaW50
IgotCTogIityIiAodiksCQkJLyogMCAocmVzdWx0KSAqLwotCSAgIj1tIiAoKnApCQkJLyogMSAq
LwotCTogIm0iICgqcCkpOwkJCS8qIDIgKi8KLQlhdG9taWNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4g
KHYpOwotfQotCi0KLSNpZmRlZiBDUFVfRElTQUJMRV9DTVBYQ0hHCi0KLXN0YXRpYyBfX2lubGlu
ZSBpbnQKLWF0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cCwg
dV9pbnQgc3JjKQotewotCXVfY2hhciByZXM7Ci0KLQlhdG9taWNfbG9jaygpOwotCV9fYXNtIF9f
dm9sYXRpbGUoCi0JIglwdXNoZmwgOwkJIgotCSIJY2xpIDsJCQkiCi0JIgljbXBsCSUzLCU0IDsJ
CSIKLQkiCWpuZQkxZiA7CQkiCi0JIgltb3ZsCSUyLCUxIDsJCSIKLQkiMToJCQkJIgotCSIgICAg
ICAgc2V0ZQklMCA7CQkiCi0JIglwb3BmbCA7CQkJIgotCSIjIGF0b21pY19jbXBzZXRfaW50Igot
CTogIj1xIiAocmVzKSwJCQkvKiAwICovCi0JICAiPW0iICgqZHN0KQkJCS8qIDEgKi8KLQk6ICJy
IiAoc3JjKSwJCQkvKiAyICovCi0JICAiciIgKGV4cCksCQkJLyogMyAqLwotCSAgIm0iICgqZHN0
KQkJCS8qIDQgKi8KLQk6ICJtZW1vcnkiKTsKLQlhdG9taWNfdW5sb2NrKCk7Ci0KLQlyZXR1cm4g
KHJlcyk7Ci19Ci0KLSNlbHNlIC8qICFDUFVfRElTQUJMRV9DTVBYQ0hHICovCi0KLXN0YXRpYyBf
X2lubGluZSBpbnQKLWF0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50
IGV4cCwgdV9pbnQgc3JjKQotewotCWF0b21pY19sb2NrKCk7Ci0JdV9jaGFyIHJlczsKLQotCV9f
YXNtIF9fdm9sYXRpbGUoCi0JIgkiIE1QTE9DS0VEICIJCSIKLQkiCWNtcHhjaGdsICUyLCUxIDsJ
IgotCSIJc2V0ZQklMCA7CQkiCi0JIjE6CQkJCSIKLQkiIyBhdG9taWNfY21wc2V0X2ludCIKLQk6
ICI9YSIgKHJlcyksCQkJLyogMCAqLwotCSAgIj1tIiAoKmRzdCkJCQkvKiAxICovCi0JOiAiciIg
KHNyYyksCQkJLyogMiAqLwotCSAgImEiIChleHApLAkJCS8qIDMgKi8KLQkgICJtIiAoKmRzdCkJ
CQkvKiA0ICovCi0JOiAibWVtb3J5Iik7Ci0JYXRvbWljX3VubG9jaygpOwotCi0JcmV0dXJuIChy
ZXMpOwotfQotCi0jZW5kaWYgLyogQ1BVX0RJU0FCTEVfQ01QWENIRyAqLwotCi0jZGVmaW5lIGF0
b21pY19hZGRfaW50KFAsIFYpCSBkbyB7ICAgXAotCQlhdG9taWNfbG9jaygpOyAgICAgICAgICBc
Ci0JCSgqKHVfaW50ICopKFApICs9IChWKSk7IFwKLQkJYXRvbWljX3VubG9jaygpOyAgICAgICAg
XAotfSB3aGlsZSgwKQotI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpICBkbyB7ICAg
XAotCQlhdG9taWNfbG9jaygpOyAgICAgICAgICAgIFwKLQkJKCoodV9pbnQgKikoUCkgLT0gKFYp
KTsgICBcCi0JCWF0b21pY191bmxvY2soKTsgICAgICAgICAgXAotfSB3aGlsZSgwKQotCi0jZW5k
aWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5jIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNlcl9lbnZpcm9ubWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
ODMwYTIzNjhiODdiNjY0MTdiZDBkMjZlNGQ3Yjc5MmE5Njk1MjNmLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQu
YworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAy
MDA5LTIwMTAgQnJhZCBQZW5vZmYKLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEg
S2FtYWwKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgotICogQ29w
eXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KLSAqCi0gKiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFN
QUdFLgotICovCi0KLS8qIF9fVXNlcnNwYWNlX18gKi8KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgot
I2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHN0ZGludC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaD4KLSNlbmRpZgotI2luY2x1
ZGUgPHVzZXJfZW52aXJvbm1lbnQuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLS8qICNpbmNs
dWRlIDxzeXMvcGFyYW0uaD4gZGVmaW5lcyBNSU4gKi8KLSNpZiAhZGVmaW5lZChNSU4pCi0jZGVm
aW5lIE1JTihhcmcxLGFyZzIpICgoYXJnMSkgPCAoYXJnMikgPyAoYXJnMSkgOiAoYXJnMikpCi0j
ZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSB1SFogMTAwMAotCi0vKiBTZWUg
dXNlcl9pbmNsdWRlL3VzZXJfZW52aXJvbm1lbnQuaCBmb3IgY29tbWVudHMgYWJvdXQgdGhlc2Ug
dmFyaWFibGVzICovCi1pbnQgbWF4c29ja2V0cyA9IDI1NjAwOwotaW50IGh6ID0gdUhaOwotaW50
IGlwX2RlZnR0bCA9IDY0OwotaW50IGlwcG9ydF9maXJzdGF1dG8gPSA0OTE1MiwgaXBwb3J0X2xh
c3RhdXRvID0gNjU1MzU7Ci1pbnQgbm1iY2x1c3RlcnMgPSA2NTUzNjsKLQotLyogU291cmNlIGlw
X291dHB1dC5jLiBleHRlcm4nZCBpbiBpcF92YXIuaCAqLwotdV9zaG9ydCBpcF9pZCA9IDA7IC8q
X19Vc2Vyc3BhY2VfXyBUT0RPIFNob3VsZCBpdCBiZSBpbml0aWFsaXplZCB0byB6ZXJvPyAqLwot
Ci0vKiB1c2VkIGluIHVzZXJfaW5jbHVkZS91c2VyX2F0b21pYy5oIGluIG9yZGVyIHRvIG1ha2Ug
dGhlIG9wZXJhdGlvbnMKLSAqIGRlZmluZWQgdGhlcmUgdHJ1bHkgYXRvbWljCi0gKi8KLXVzZXJs
YW5kX211dGV4X3QgYXRvbWljX210eDsKLQotLyogU291cmNlOiAvdXNyL3NyYy9zeXMvZGV2L3Jh
bmRvbS9oYXJ2ZXN0LmMgKi8KLXN0YXRpYyBpbnQgcmVhZF9yYW5kb21fcGhvbnkodm9pZCAqLCBp
bnQpOwotCi1zdGF0aWMgaW50ICgqcmVhZF9mdW5jKSh2b2lkICosIGludCkgPSByZWFkX3JhbmRv
bV9waG9ueTsKLQotLyogVXNlcmxhbmQtdmlzaWJsZSB2ZXJzaW9uIG9mIHJlYWRfcmFuZG9tICov
Ci1pbnQKLXJlYWRfcmFuZG9tKHZvaWQgKmJ1ZiwgaW50IGNvdW50KQotewotCXJldHVybiAoKCpy
ZWFkX2Z1bmMpKGJ1ZiwgY291bnQpKTsKLX0KLQotLyogSWYgdGhlIGVudHJvcHkgZGV2aWNlIGlz
IG5vdCBsb2FkZWQsIG1ha2UgYSB0b2tlbiBlZmZvcnQgdG8KLSAqIHByb3ZpZGUgX3NvbWVfIGtp
bmQgb2YgcmFuZG9tbmVzcy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkCi0gKiBpbnNpZGUgb3Ro
ZXIgUk5HJ3MsIGxpa2UgYXJjNHJhbmRvbSg5KS4KLSAqLwotc3RhdGljIGludAotcmVhZF9yYW5k
b21fcGhvbnkodm9pZCAqYnVmLCBpbnQgY291bnQpCi17Ci0JdWludDMyX3QgcmFuZHZhbDsKLQlp
bnQgc2l6ZSwgaTsKLQotCS8qIHNyYW5kb20oKSBpcyBjYWxsZWQgaW4ga2Vybi9pbml0X21haW4u
Yzpwcm9jMF9wb3N0KCkgKi8KLQotCS8qIEZpbGwgYnVmW10gd2l0aCByYW5kb20oOSkgb3V0cHV0
ICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKz0gKGludClzaXplb2YodWludDMyX3QpKSB7
Ci0JCXJhbmR2YWwgPSByYW5kb20oKTsKLQkJc2l6ZSA9IE1JTihjb3VudCAtIGksIChpbnQpc2l6
ZW9mKHVpbnQzMl90KSk7Ci0JCW1lbWNweSgmKChjaGFyICopYnVmKVtpXSwgJnJhbmR2YWwsIChz
aXplX3Qpc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIChjb3VudCk7Ci19Ci0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2ZmY2YjU1YjQ2M2M1MGI2ZGQ5MGM1MjAz
OTc1M2Y0ZTc2MjJjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYg
KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICog
Q29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAy
MDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNo
YWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwot
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVVNF
Ul9FTlZJUk9OTUVOVF9IXwotI2RlZmluZSBfVVNFUl9FTlZJUk9OTUVOVF9IXwotLyogX19Vc2Vy
c3BhY2VfXyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaWZkZWYgX19Vc2Vyc3BhY2Vf
b3NfRnJlZUJTRAotI2lmbmRlZiBfU1lTX01VVEVYX0hfCi0jaW5jbHVkZSA8c3lzL211dGV4Lmg+
Ci0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0j
aW5jbHVkZSAibmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oIgotI2VuZGlmCi0KLS8qIG1heHNv
Y2tldHMgaXMgdXNlZCBpbiBTQ1RQX1pPTkVfSU5JVCBjYWxsLiBJdCByZWZlcnMgdG8KLSAqIGtl
cm4uaXBjLm1heHNvY2tldHMga2VybmVsIGVudmlyb25tZW50IHZhcmlhYmxlLgotICovCi1leHRl
cm4gaW50IG1heHNvY2tldHM7Ci0KLS8qIGludCBoejsgaXMgZGVjbGFyZWQgaW4gc3lzL2tlcm4v
c3Vicl9wYXJhbS5jIGFuZCByZWZlcnMgdG8ga2VybmVsIHRpbWVyIGZyZXF1ZW5jeS4KLSAqIFNl
ZSBodHRwOi8vaXZvcmFzLnNoYXJhbmV0Lm9yZy9mcmVlYnNkL3Ztd2FyZS5odG1sIGZvciBhZGRp
dGlvbmFsIGluZm8gYWJvdXQga2Vybi5oegotICogaHogaXMgaW5pdGlhbGl6ZWQgaW4gdm9pZCBp
bml0X3BhcmFtMSh2b2lkKSBpbiB0aGF0IGZpbGUuCi0gKi8KLWV4dGVybiBpbnQgaHo7Ci0KLQot
LyogVGhlIGZvbGxvd2luZyB0d28gaW50cyBkZWZpbmUgYSByYW5nZSBvZiBhdmFpbGFibGUgZXBo
ZXJtYWwgcG9ydHMuICovCi1leHRlcm4gaW50IGlwcG9ydF9maXJzdGF1dG8sIGlwcG9ydF9sYXN0
YXV0bzsKLQotLyogbm1iY2x1c3RlcnMgaXMgdXNlZCBpbiBzY3RwX3VzcnJlcS5jIChlLmcuLCBz
Y3RwX2luaXQpLiBJbiB0aGUgRnJlZUJTRCBrZXJuZWwsCi0gKiAgdGhpcyBpcyAxMDI0ICsgbWF4
dXNlcnMgKiA2NC4KLSAqLwotZXh0ZXJuIGludCBubWJjbHVzdGVyczsKLQotI2lmICFkZWZpbmVk
IChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBtaW4oYSxiKSAoKGEpPihiKT8oYik6
KGEpKQotI2RlZmluZSBtYXgoYSxiKSAoKGEpPihiKT8oYSk6KGIpKQotI2VuZGlmCi0KLWV4dGVy
biBpbnQgcmVhZF9yYW5kb20odm9pZCAqYnVmLCBpbnQgY291bnQpOwotCi0vKiBlcnJubydzIG1h
eSBkaWZmZXIgcGVyIE9TLiAgZXJybm8uaCBub3cgaW5jbHVkZWQgaW4gc2N0cF9vc191c2Vyc3Bh
Y2UuaCAqLwotLyogU291cmNlOiAvdXNyL3NyYy9zeXMvc3lzL2Vycm5vLmggKi8KLS8qICNkZWZp
bmUJRU5PU1BDCQkyOCAqLwkJLyogTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UgKi8KLS8qICNkZWZp
bmUJRU5PQlVGUwkJNTUgKi8JCS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFpbGFibGUgKi8KLS8qICNk
ZWZpbmUJRU5PTUVNCQkxMiAqLwkJLyogQ2Fubm90IGFsbG9jYXRlIG1lbW9yeSAqLwotLyogI2Rl
ZmluZQlFQUNDRVMJCTEzICovCQkvKiBQZXJtaXNzaW9uIGRlbmllZCAqLwotLyogI2RlZmluZQlF
RkFVTFQJCTE0ICovCQkvKiBCYWQgYWRkcmVzcyAqLwotLyogI2RlZmluZQlFSE9TVERPV04JNjQg
Ki8JCS8qIEhvc3QgaXMgZG93biAqLwotLyogI2RlZmluZQlFSE9TVFVOUkVBQ0gJNjUgKi8JCS8q
IE5vIHJvdXRlIHRvIGhvc3QgKi8KLQotLyogU291cmNlIGlwX291dHB1dC5jLiBleHRlcm4nZCBp
biBpcF92YXIuaCAqLwotZXh0ZXJuIHVfc2hvcnQgaXBfaWQ7Ci0KLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0xpbnV4KQotI2RlZmluZSBJUFY2X1ZFUlNJT04gICAgICAgICAgICAweDYwCi0j
ZW5kaWYKLQotI2lmIGRlZmluZWQoSU5WQVJJQU5UUykKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQot
c3RhdGljIGlubGluZSB2b2lkCi10ZXJtaW5hdGVfbm9uX2dyYWNlZnVsKHZvaWQpIHsKLQlhYm9y
dCgpOwotfQotCi0jZGVmaW5lIHBhbmljKC4uLikgICAgICAgICAgICAgICAgICAgICAgIFwKLQlk
byB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCVNDVFBfUFJJTlRGKF9fVkFfQVJH
U19fKTtcCi0JCVNDVFBfUFJJTlRGKCJcbiIpOyAgICAgICBcCi0JCXRlcm1pbmF0ZV9ub25fZ3Jh
Y2VmdWwoKTtcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEtBU1NFUlQoY29uZCwgYXJncykgICAg
ICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAoIShjb25kKSkg
eyAgICAgICBcCi0JCQlwYW5pYyBhcmdzIDtcCi0JCX0gICAgICAgICAgICAgICAgICAgIFwKLQl9
IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgS0FTU0VSVChjb25kLCBhcmdzKQotI2VuZGlmCi0K
LS8qIG5lY2Vzc2FyeSBmb3Igc2N0cF9wY2IuYyAqLwotZXh0ZXJuIGludCBpcF9kZWZ0dGw7Ci0j
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfaW5wY2IuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJf
aW5wY2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1N2NkMGExM2MyZWE0NTdk
OGM5ZWRmMDQ1ZmNjOTNmOTgxOTEzZi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2lucGNiLmgKKysrIC9kZXYvbnVsbApAQCAtMSwz
NzggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTAsIDE5OTMK
LSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKglAKCMp
aW5fcGNiLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MwotICogJEZyZWVCU0Q6IHNyYy9zeXMvbmV0
aW5ldC9pbl9wY2IuaCx2IDEuMTAwLjIuMSAyMDA3LzEyLzA3IDA1OjQ2OjA4IGttYWN5IEV4cCAk
Ci0gKi8KLQotI2lmbmRlZiBfVVNFUl9JTlBDQl9IXwotI2RlZmluZSBfVVNFUl9JTlBDQl9IXwot
Ci0jaW5jbHVkZSA8dXNlcl9yb3V0ZS5oPiAvKiB3YXMgPG5ldC9yb3V0ZS5oPiAqLwotCi0jZGVm
aW5lCWluNnBjYgkJaW5wY2IJLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KLSNk
ZWZpbmUJaW42cF9zcAkJaW5wX3NwCS8qIGZvciBLQU1FIHNyYyBzeW5jIG92ZXIgQlNEKidzICov
Ci1zdHJ1Y3QgaW5wY2Jwb2xpY3k7Ci0KLS8qCi0gKiBTdHJ1Y3QgaW5wY2IgaXMgdGhlIG9tbW9u
IHN0cnVjdHVyZSBwY2IgZm9yIHRoZSBJbnRlcm5ldCBQcm90b2NvbAotICogaW1wbGVtZW50YXRp
b24uCi0gKgotICogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIGZvcmVpZ24gaG9zdCB0YWJsZSBlbnRy
aWVzLCBsb2NhbCBhbmQgZm9yZWlnbiBzb2NrZXQKLSAqIG51bWJlcnMsIGFuZCBwb2ludGVycyB1
cCAodG8gYSBzb2NrZXQgc3RydWN0dXJlKSBhbmQgZG93biAodG8gYQotICogcHJvdG9jb2wtc3Bl
Y2lmaWMgY29udHJvbCBibG9jaykgYXJlIHN0b3JlZCBoZXJlLgotICovCi1MSVNUX0hFQUQoaW5w
Y2JoZWFkLCBpbnBjYik7Ci1MSVNUX0hFQUQoaW5wY2Jwb3J0aGVhZCwgaW5wY2Jwb3J0KTsKLQot
LyoKLSAqIFBDQiB3aXRoIEFGX0lORVQ2IG51bGwgYmluZCdlZCBsYWRkciBjYW4gcmVjZWl2ZSBB
Rl9JTkVUIGlucHV0IHBhY2tldC4KLSAqIFNvLCBBRl9JTkVUNiBudWxsIGxhZGRyIGlzIGFsc28g
dXNlZCBhcyBBRl9JTkVUIG51bGwgbGFkZHIsIGJ5IHV0aWxpemluZwotICogdGhlIGZvbGxvd2lu
ZyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBpbl9hZGRyXzRpbjYgewotCXVfaW50MzJfdAlpYTQ2
X3BhZDMyWzNdOwotCXN0cnVjdAlpbl9hZGRyCWlhNDZfYWRkcjQ7Ci19OwotCi0vKgotICogTk9U
RTogaXB2NiBhZGRycyBzaG91bGQgYmUgNjQtYml0IGFsaWduZWQsIHBlciBSRkMgMjU1My4gIGlu
X2Nvbm5pbmZvIGhhcwotICogc29tZSBleHRyYSBwYWRkaW5nIHRvIGFjY29tcGxpc2ggdGhpcy4K
LSAqLwotc3RydWN0IGluX2VuZHBvaW50cyB7Ci0JdV9pbnQxNl90CWllX2Zwb3J0OwkJLyogZm9y
ZWlnbiBwb3J0ICovCi0JdV9pbnQxNl90CWllX2xwb3J0OwkJLyogbG9jYWwgcG9ydCAqLwotCS8q
IHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LCBsb2NhbCBhbmQgZm9yZWlnbiBhZGRyICovCi0JdW5p
b24gewotCQkvKiBmb3JlaWduIGhvc3QgdGFibGUgZW50cnkgKi8KLQkJc3RydWN0CWluX2FkZHJf
NGluNiBpZTQ2X2ZvcmVpZ247Ci0JCXN0cnVjdAlpbjZfYWRkciBpZTZfZm9yZWlnbjsKLQl9IGll
X2RlcGVuZGZhZGRyOwotCXVuaW9uIHsKLQkJLyogbG9jYWwgaG9zdCB0YWJsZSBlbnRyeSAqLwot
CQlzdHJ1Y3QJaW5fYWRkcl80aW42IGllNDZfbG9jYWw7Ci0JCXN0cnVjdAlpbjZfYWRkciBpZTZf
bG9jYWw7Ci0JfSBpZV9kZXBlbmRsYWRkcjsKLSNkZWZpbmUJaWVfZmFkZHIJaWVfZGVwZW5kZmFk
ZHIuaWU0Nl9mb3JlaWduLmlhNDZfYWRkcjQKLSNkZWZpbmUJaWVfbGFkZHIJaWVfZGVwZW5kbGFk
ZHIuaWU0Nl9sb2NhbC5pYTQ2X2FkZHI0Ci0jZGVmaW5lCWllNl9mYWRkcglpZV9kZXBlbmRmYWRk
ci5pZTZfZm9yZWlnbgotI2RlZmluZQlpZTZfbGFkZHIJaWVfZGVwZW5kbGFkZHIuaWU2X2xvY2Fs
Ci19OwotCi0vKgotICogWFhYIFRoZSBkZWZpbmVzIGZvciBpbmNfKiBhcmUgaGFja3MgYW5kIHNo
b3VsZCBiZSBjaGFuZ2VkIHRvIGRpcmVjdAotICogcmVmZXJlbmNlcy4KLSAqLwotc3RydWN0IGlu
X2Nvbm5pbmZvIHsKLQl1X2ludDhfdAlpbmNfZmxhZ3M7Ci0JdV9pbnQ4X3QJaW5jX2xlbjsKLQl1
X2ludDE2X3QJaW5jX3BhZDsJLyogWFhYIGFsaWdubWVudCBmb3IgaW5fZW5kcG9pbnRzICovCi0J
LyogcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQgKi8KLQlzdHJ1Y3QJaW5fZW5kcG9pbnRzIGluY19p
ZTsKLX07Ci0jZGVmaW5lIGluY19pc2lwdjYJaW5jX2ZsYWdzCS8qIHRlbXAgY29tcGF0YWJpbGl0
eSAqLwotI2RlZmluZQlpbmNfZnBvcnQJaW5jX2llLmllX2Zwb3J0Ci0jZGVmaW5lCWluY19scG9y
dAlpbmNfaWUuaWVfbHBvcnQKLSNkZWZpbmUJaW5jX2ZhZGRyCWluY19pZS5pZV9mYWRkcgotI2Rl
ZmluZQlpbmNfbGFkZHIJaW5jX2llLmllX2xhZGRyCi0jZGVmaW5lCWluYzZfZmFkZHIJaW5jX2ll
LmllNl9mYWRkcgotI2RlZmluZQlpbmM2X2xhZGRyCWluY19pZS5pZTZfbGFkZHIKLQotc3RydWN0
CWljbXA2X2ZpbHRlcjsKLQotc3RydWN0IGlucGNiIHsKLQlMSVNUX0VOVFJZKGlucGNiKSBpbnBf
aGFzaDsJLyogaGFzaCBsaXN0ICovCi0JTElTVF9FTlRSWShpbnBjYikgaW5wX2xpc3Q7CS8qIGxp
c3QgZm9yIGFsbCBQQ0JzIG9mIHRoaXMgcHJvdG8gKi8KLQl2b2lkCSppbnBfcHBjYjsJCS8qIHBv
aW50ZXIgdG8gcGVyLXByb3RvY29sIHBjYiAqLwotCXN0cnVjdAlpbnBjYmluZm8gKmlucF9wY2Jp
bmZvOwkvKiBQQ0IgbGlzdCBpbmZvICovCi0Jc3RydWN0CXNvY2tldCAqaW5wX3NvY2tldDsJLyog
YmFjayBwb2ludGVyIHRvIHNvY2tldCAqLwotCi0JdV9pbnQzMl90CWlucF9mbG93OwotCWludAlp
bnBfZmxhZ3M7CQkvKiBnZW5lcmljIElQL2RhdGFncmFtIGZsYWdzICovCi0KLQl1X2NoYXIJaW5w
X3ZmbGFnOwkJLyogSVAgdmVyc2lvbiBmbGFnICh2NC92NikgKi8KLSNkZWZpbmUJSU5QX0lQVjQJ
MHgxCi0jZGVmaW5lCUlOUF9JUFY2CTB4MgotI2RlZmluZQlJTlBfSVBWNlBST1RPCTB4NAkJLyog
b3BlbmVkIHVuZGVyIElQdjYgcHJvdG9jb2wgKi8KLSNkZWZpbmUJSU5QX1RJTUVXQUlUCTB4OAkJ
LyogLi4gcHJvYmFibHkgZG9lc24ndCBnbyBoZXJlICovCi0jZGVmaW5lCUlOUF9PTkVTQkNBU1QJ
MHgxMAkJLyogc2VuZCBhbGwtb25lcyBicm9hZGNhc3QgKi8KLSNkZWZpbmUJSU5QX0RST1BQRUQJ
MHgyMAkJLyogcHJvdG9jb2wgZHJvcCBmbGFnICovCi0jZGVmaW5lCUlOUF9TT0NLUkVGCTB4NDAJ
CS8qIHN0cm9uZyBzb2NrZXQgcmVmZXJlbmNlICovCi0jZGVmaW5lIElOUF9DT05OICAgICAgICAw
eDgwCi0JdV9jaGFyCWlucF9pcF90dGw7CQkvKiB0aW1lIHRvIGxpdmUgcHJvdG8gKi8KLQl1X2No
YXIJaW5wX2lwX3A7CQkvKiBwcm90b2NvbCBwcm90byAqLwotCXVfY2hhcglpbnBfaXBfbWludHRs
OwkJLyogbWluaW11bSBUVEwgb3IgZHJvcCAqLwotCXVpbnQzMl90IGlucF9pc3BhcmUxOwkJLyog
Y29ubmVjdGlvbiBpZCAvIHF1ZXVlIGlkICovCi0Jdm9pZAkqaW5wX3BzcGFyZVsyXTsJCS8qIHJ0
ZW50cnkgLyBnZW5lcmFsIHVzZSAqLwotCi0JLyogTG9jYWwgYW5kIGZvcmVpZ24gcG9ydHMsIGxv
Y2FsIGFuZCBmb3JlaWduIGFkZHIuICovCi0Jc3RydWN0CWluX2Nvbm5pbmZvIGlucF9pbmM7Ci0K
LQkJCQkJLyogbGlzdCBmb3IgdGhpcyBQQ0IncyBsb2NhbCBwb3J0ICovCi0Jc3RydWN0CWxhYmVs
ICppbnBfbGFiZWw7CS8qIE1BQyBsYWJlbCAqLwotCXN0cnVjdAlpbnBjYnBvbGljeSAqaW5wX3Nw
OyAgICAvKiBmb3IgSVBTRUMgKi8KLQotCS8qIFByb3RvY29sLWRlcGVuZGVudCBwYXJ0OyBvcHRp
b25zLiAqLwotCXN0cnVjdCB7Ci0JCXVfY2hhcglpbnA0X2lwX3RvczsJCS8qIHR5cGUgb2Ygc2Vy
dmljZSBwcm90byAqLwotCQlzdHJ1Y3QJbWJ1ZiAqaW5wNF9vcHRpb25zOwkvKiBJUCBvcHRpb25z
ICovCi0JCXN0cnVjdAlpcF9tb3B0aW9ucyAqaW5wNF9tb3B0aW9uczsgLyogSVAgbXVsdGljYXN0
IG9wdGlvbnMgKi8KLQl9IGlucF9kZXBlbmQ0OwotI2RlZmluZQlpbnBfZnBvcnQJaW5wX2luYy5p
bmNfZnBvcnQKLSNkZWZpbmUJaW5wX2xwb3J0CWlucF9pbmMuaW5jX2xwb3J0Ci0jZGVmaW5lCWlu
cF9mYWRkcglpbnBfaW5jLmluY19mYWRkcgotI2RlZmluZQlpbnBfbGFkZHIJaW5wX2luYy5pbmNf
bGFkZHIKLSNkZWZpbmUJaW5wX2lwX3RvcwlpbnBfZGVwZW5kNC5pbnA0X2lwX3RvcwotI2RlZmlu
ZQlpbnBfb3B0aW9ucwlpbnBfZGVwZW5kNC5pbnA0X29wdGlvbnMKLSNkZWZpbmUJaW5wX21vcHRp
b25zCWlucF9kZXBlbmQ0LmlucDRfbW9wdGlvbnMKLQlzdHJ1Y3QgewotCQkvKiBJUCBvcHRpb25z
ICovCi0JCXN0cnVjdAltYnVmICppbnA2X29wdGlvbnM7Ci0JCS8qIElQNiBvcHRpb25zIGZvciBv
dXRnb2luZyBwYWNrZXRzICovCi0JCXN0cnVjdAlpcDZfcGt0b3B0cyAqaW5wNl9vdXRwdXRvcHRz
OwotCQkvKiBJUCBtdWx0aWNhc3Qgb3B0aW9ucyAqLwotI2lmIDAKLQkJc3RydWN0CWlwNl9tb3B0
aW9ucyAqaW5wNl9tb3B0aW9uczsKLSNlbmRpZgotCQkvKiBJQ01QdjYgY29kZSB0eXBlIGZpbHRl
ciAqLwotCQlzdHJ1Y3QJaWNtcDZfZmlsdGVyICppbnA2X2ljbXA2ZmlsdDsKLQkJLyogSVBWNl9D
SEVDS1NVTSBzZXRzb2Nrb3B0ICovCi0JCWludAlpbnA2X2Nrc3VtOwotCQlzaG9ydAlpbnA2X2hv
cHM7Ci0JfSBpbnBfZGVwZW5kNjsKLQlMSVNUX0VOVFJZKGlucGNiKSBpbnBfcG9ydGxpc3Q7Ci0J
c3RydWN0CWlucGNicG9ydCAqaW5wX3BoZDsJLyogaGVhZCBvZiB0aGlzIGxpc3QgKi8KLSNkZWZp
bmUgaW5wX3plcm9fc2l6ZSBvZmZzZXRvZihzdHJ1Y3QgaW5wY2IsIGlucF9nZW5jbnQpCi0Jc3Ry
dWN0IG10eAlpbnBfbXR4OwotCi0jZGVmaW5lCWluNnBfZmFkZHIJaW5wX2luYy5pbmM2X2ZhZGRy
Ci0jZGVmaW5lCWluNnBfbGFkZHIJaW5wX2luYy5pbmM2X2xhZGRyCi0jZGVmaW5lCWluNnBfaG9w
cwlpbnBfZGVwZW5kNi5pbnA2X2hvcHMJLyogZGVmYXVsdCBob3AgbGltaXQgKi8KLSNkZWZpbmUJ
aW42cF9pcDZfbnh0CWlucF9pcF9wCi0jZGVmaW5lCWluNnBfZmxvd2luZm8JaW5wX2Zsb3cKLSNk
ZWZpbmUJaW42cF92ZmxhZwlpbnBfdmZsYWcKLSNkZWZpbmUJaW42cF9vcHRpb25zCWlucF9kZXBl
bmQ2LmlucDZfb3B0aW9ucwotI2RlZmluZQlpbjZwX291dHB1dG9wdHMJaW5wX2RlcGVuZDYuaW5w
Nl9vdXRwdXRvcHRzCi0jaWYgMAotI2RlZmluZQlpbjZwX21vcHRpb25zCWlucF9kZXBlbmQ2Lmlu
cDZfbW9wdGlvbnMKLSNlbmRpZgotI2RlZmluZQlpbjZwX2ljbXA2ZmlsdAlpbnBfZGVwZW5kNi5p
bnA2X2ljbXA2ZmlsdAotI2RlZmluZQlpbjZwX2Nrc3VtCWlucF9kZXBlbmQ2LmlucDZfY2tzdW0K
LSNkZWZpbmUJaW42cF9mbGFncwlpbnBfZmxhZ3MgIC8qIGZvciBLQU1FIHNyYyBzeW5jIG92ZXIg
QlNEKidzICovCi0jZGVmaW5lCWluNnBfc29ja2V0CWlucF9zb2NrZXQgIC8qIGZvciBLQU1FIHNy
YyBzeW5jIG92ZXIgQlNEKidzICovCi0jZGVmaW5lCWluNnBfbHBvcnQJaW5wX2xwb3J0ICAvKiBm
b3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLwotI2RlZmluZQlpbjZwX2Zwb3J0CWlucF9m
cG9ydCAgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KLSNkZWZpbmUJaW42cF9w
cGNiCWlucF9wcGNiICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLwotfTsKLS8q
Ci0gKiBUaGUgcmFuZ2Ugb2YgdGhlIGdlbmVyYXRpb24gY291bnQsIGFzIHVzZWQgaW4gdGhpcyBp
bXBsZW1lbnRhdGlvbiwgaXMgOWUxOS4KLSAqIFdlIHdvdWxkIGhhdmUgdG8gY3JlYXRlIDMwMCBi
aWxsaW9uIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgZm9yIHRoaXMgbnVtYmVyCi0gKiB0byByb2xs
IG92ZXIgaW4gYSB5ZWFyLiAgVGhpcyBzZWVtcyBzdWZmaWNpZW50bHkgdW5saWtlbHkgdGhhdCB3
ZSBzaW1wbHkKLSAqIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggdGhhdCBwb3NzaWJpbGl0
eS4KLSAqLwotCi1zdHJ1Y3QgaW5wY2Jwb3J0IHsKLQlMSVNUX0VOVFJZKGlucGNicG9ydCkgcGhk
X2hhc2g7Ci0Jc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsKLQl1X3Nob3J0IHBoZF9wb3J0
OwotfTsKLQotLyoKLSAqIEdsb2JhbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBoaWdoLWxldmVs
IHByb3RvY29sIChVRFAsIFRDUCwgLi4uKSBpbiBib3RoCi0gKiBJUHY0IGFuZCBJUHY2LiAgSG9s
ZHMgaW5wY2IgbGlzdHMgYW5kIGluZm9ybWF0aW9uIGZvciBtYW5hZ2luZyB0aGVtLgotICovCi1z
dHJ1Y3QgaW5wY2JpbmZvIHsKLQkvKgotCSAqIEdsb2JhbCBsaXN0IG9mIGlucGNicyBvbiB0aGUg
cHJvdG9jb2wuCi0JICovCi0Jc3RydWN0IGlucGNiaGVhZAkqaXBpX2xpc3RoZWFkOwotCXVfaW50
CQkJIGlwaV9jb3VudDsKLQotCS8qCi0JICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBoYXNoZWQg
YnkgbG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGFuZAotCSAqIHBvcnQgbnVtYmVycy4KLQkg
Ki8KLQlzdHJ1Y3QgaW5wY2JoZWFkCSppcGlfaGFzaGJhc2U7Ci0JdV9sb25nCQkJIGlwaV9oYXNo
bWFzazsKLQotCS8qCi0JICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBoYXNoZWQgYnkgb25seSBs
b2NhbCBwb3J0IG51bWJlci4KLQkgKi8KLQlzdHJ1Y3QgaW5wY2Jwb3J0aGVhZAkqaXBpX3BvcnRo
YXNoYmFzZTsKLQl1X2xvbmcJCQkgaXBpX3BvcnRoYXNobWFzazsKLQotCS8qCi0JICogRmllbGRz
IGFzc29jaWF0ZWQgd2l0aCBwb3J0IGxvb2t1cCBhbmQgYWxsb2NhdGlvbi4KLQkgKi8KLQl1X3No
b3J0CQkJIGlwaV9sYXN0cG9ydDsKLQl1X3Nob3J0CQkJIGlwaV9sYXN0bG93OwotCXVfc2hvcnQJ
CQkgaXBpX2xhc3RoaTsKLQotCS8qCi0JICogVU1BIHpvbmUgZnJvbSB3aGljaCBpbnBjYnMgYXJl
IGFsbG9jYXRlZCBmb3IgdGhpcyBwcm90b2NvbC4KLQkgKi8KLQlzdHJ1Y3QJdW1hX3pvbmUJKmlw
aV96b25lOwotCi0JLyoKLQkgKiBHZW5lcmF0aW9uIGNvdW50LS1pbmNyZW1lbnRlZCBlYWNoIHRp
bWUgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZAotCSAqIG9yIGZyZWVkLgotCSAqLwotCXN0cnVj
dCBtdHgJCSBpcGlfbXR4OwotCi0JLyoKLQkgKiB2aW1hZ2UgMQotCSAqIGdlbmVyYWwgdXNlIDEK
LQkgKi8KLQl2b2lkIAkJCSppcGlfcHNwYXJlWzJdOwotfTsKLQotI2RlZmluZSBJTlBfTE9DS19J
TklUKGlucCwgZCwgdCkgXAotCW10eF9pbml0KCYoaW5wKS0+aW5wX210eCwgKGQpLCAodCksIE1U
WF9ERUYgfCBNVFhfUkVDVVJTRSB8IE1UWF9EVVBPSykKLSNkZWZpbmUgSU5QX0xPQ0tfREVTVFJP
WShpbnApCW10eF9kZXN0cm95KCYoaW5wKS0+aW5wX210eCkKLSNkZWZpbmUgSU5QX0xPQ0soaW5w
KQkJbXR4X2xvY2soJihpbnApLT5pbnBfbXR4KQotI2RlZmluZSBJTlBfVU5MT0NLKGlucCkJCW10
eF91bmxvY2soJihpbnApLT5pbnBfbXR4KQotI2RlZmluZSBJTlBfTE9DS19BU1NFUlQoaW5wKQlt
dHhfYXNzZXJ0KCYoaW5wKS0+aW5wX210eCwgTUFfT1dORUQpCi0jZGVmaW5lCUlOUF9VTkxPQ0tf
QVNTRVJUKGlucCkJbXR4X2Fzc2VydCgmKGlucCktPmlucF9tdHgsIE1BX05PVE9XTkVEKQotCi0j
ZGVmaW5lIElOUF9JTkZPX0xPQ0tfSU5JVChpcGksIGQpIFwKLQltdHhfaW5pdCgmKGlwaSktPmlw
aV9tdHgsIChkKSwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNFKQotI2RlZmluZSBJTlBfSU5G
T19MT0NLX0RFU1RST1koaXBpKSAgbXR4X2Rlc3Ryb3koJihpcGkpLT5pcGlfbXR4KQotI2RlZmlu
ZSBJTlBfSU5GT19STE9DSyhpcGkpCW10eF9sb2NrKCYoaXBpKS0+aXBpX210eCkKLSNkZWZpbmUg
SU5QX0lORk9fV0xPQ0soaXBpKQltdHhfbG9jaygmKGlwaSktPmlwaV9tdHgpCi0jZGVmaW5lIElO
UF9JTkZPX1JVTkxPQ0soaXBpKQltdHhfdW5sb2NrKCYoaXBpKS0+aXBpX210eCkKLSNkZWZpbmUg
SU5QX0lORk9fV1VOTE9DSyhpcGkpCW10eF91bmxvY2soJihpcGkpLT5pcGlfbXR4KQotI2RlZmlu
ZSBJTlBfSU5GT19STE9DS19BU1NFUlQoaXBpKQltdHhfYXNzZXJ0KCYoaXBpKS0+aXBpX210eCwg
TUFfT1dORUQpCi0jZGVmaW5lIElOUF9JTkZPX1dMT0NLX0FTU0VSVChpcGkpCW10eF9hc3NlcnQo
JihpcGkpLT5pcGlfbXR4LCBNQV9PV05FRCkKLSNkZWZpbmUgSU5QX0lORk9fVU5MT0NLX0FTU0VS
VChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9OT1RPV05FRCkKLQotI2RlZmlu
ZSBJTlBfUENCSEFTSChmYWRkciwgbHBvcnQsIGZwb3J0LCBtYXNrKSBcCi0JKCgoZmFkZHIpIF4g
KChmYWRkcikgPj4gMTYpIF4gbnRvaHMoKGxwb3J0KSBeIChmcG9ydCkpKSAmIChtYXNrKSkKLSNk
ZWZpbmUgSU5QX1BDQlBPUlRIQVNIKGxwb3J0LCBtYXNrKSBcCi0JKG50b2hzKChscG9ydCkpICYg
KG1hc2spKQotCi0vKiBmbGFncyBpbiBpbnBfZmxhZ3M6ICovCi0jZGVmaW5lCUlOUF9SRUNWT1BU
UwkJMHgwMQkvKiByZWNlaXZlIGluY29taW5nIElQIG9wdGlvbnMgKi8KLSNkZWZpbmUJSU5QX1JF
Q1ZSRVRPUFRTCQkweDAyCS8qIHJlY2VpdmUgSVAgb3B0aW9ucyBmb3IgcmVwbHkgKi8KLSNkZWZp
bmUJSU5QX1JFQ1ZEU1RBRERSCQkweDA0CS8qIHJlY2VpdmUgSVAgZHN0IGFkZHJlc3MgKi8KLSNk
ZWZpbmUJSU5QX0hEUklOQ0wJCTB4MDgJLyogdXNlciBzdXBwbGllcyBlbnRpcmUgSVAgaGVhZGVy
ICovCi0jZGVmaW5lCUlOUF9ISUdIUE9SVAkJMHgxMAkvKiB1c2VyIHdhbnRzICJoaWdoIiBwb3J0
IGJpbmRpbmcgKi8KLSNkZWZpbmUJSU5QX0xPV1BPUlQJCTB4MjAJLyogdXNlciB3YW50cyAibG93
IiBwb3J0IGJpbmRpbmcgKi8KLSNkZWZpbmUJSU5QX0FOT05QT1JUCQkweDQwCS8qIHBvcnQgY2hv
c2VuIGZvciB1c2VyICovCi0jZGVmaW5lCUlOUF9SRUNWSUYJCTB4ODAJLyogcmVjZWl2ZSBpbmNv
bWluZyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUJSU5QX01UVURJU0MJCTB4MTAwCS8qIHVzZXIgY2Fu
IGRvIE1UVSBkaXNjb3ZlcnkgKi8KLSNkZWZpbmUJSU5QX0ZBSVRICQkweDIwMAkvKiBhY2NlcHQg
RkFJVEgnZWQgY29ubmVjdGlvbnMgKi8KLSNkZWZpbmUJSU5QX1JFQ1ZUVEwJCTB4NDAwCS8qIHJl
Y2VpdmUgaW5jb21pbmcgSVAgVFRMICovCi0jZGVmaW5lCUlOUF9ET05URlJBRwkJMHg4MDAJLyog
ZG9uJ3QgZnJhZ21lbnQgcGFja2V0ICovCi0KLSNkZWZpbmUgSU42UF9JUFY2X1Y2T05MWQkweDAw
ODAwMCAvKiByZXN0cmljdCBBRl9JTkVUNiBzb2NrZXQgZm9yIHY2ICovCi0KLSNkZWZpbmUJSU42
UF9QS1RJTkZPCQkweDAxMDAwMCAvKiByZWNlaXZlIElQNiBkc3QgYW5kIEkvRiAqLwotI2RlZmlu
ZQlJTjZQX0hPUExJTUlUCQkweDAyMDAwMCAvKiByZWNlaXZlIGhvcGxpbWl0ICovCi0jZGVmaW5l
CUlONlBfSE9QT1BUUwkJMHgwNDAwMDAgLyogcmVjZWl2ZSBob3AtYnktaG9wIG9wdGlvbnMgKi8K
LSNkZWZpbmUJSU42UF9EU1RPUFRTCQkweDA4MDAwMCAvKiByZWNlaXZlIGRzdCBvcHRpb25zIGFm
dGVyIHJ0aGRyICovCi0jZGVmaW5lCUlONlBfUlRIRFIJCTB4MTAwMDAwIC8qIHJlY2VpdmUgcm91
dGluZyBoZWFkZXIgKi8KLSNkZWZpbmUJSU42UF9SVEhEUkRTVE9QVFMJMHgyMDAwMDAgLyogcmVj
ZWl2ZSBkc3RvcHRpb25zIGJlZm9yZSBydGhkciAqLwotI2RlZmluZQlJTjZQX1RDTEFTUwkJMHg0
MDAwMDAgLyogcmVjZWl2ZSB0cmFmZmljIGNsYXNzIHZhbHVlICovCi0jZGVmaW5lCUlONlBfQVVU
T0ZMT1dMQUJFTAkweDgwMDAwMCAvKiBhdHRhY2ggZmxvd2xhYmVsIGF1dG9tYXRpY2FsbHkgKi8K
LSNkZWZpbmUJSU42UF9SRkMyMjkyCQkweDQwMDAwMDAwIC8qIHVzZWQgUkZDMjI5MiBBUEkgb24g
dGhlIHNvY2tldCAqLwotI2RlZmluZQlJTjZQX01UVQkJMHg4MDAwMDAwMCAvKiByZWNlaXZlIHBh
dGggTVRVICovCi0KLSNkZWZpbmUJSU5QX0NPTlRST0xPUFRTCQkoSU5QX1JFQ1ZPUFRTfElOUF9S
RUNWUkVUT1BUU3xJTlBfUkVDVkRTVEFERFJ8XAotCQkJCSBJTlBfUkVDVklGfElOUF9SRUNWVFRM
fFwKLQkJCQkgSU42UF9QS1RJTkZPfElONlBfSE9QTElNSVR8SU42UF9IT1BPUFRTfFwKLQkJCQkg
SU42UF9EU1RPUFRTfElONlBfUlRIRFJ8SU42UF9SVEhEUkRTVE9QVFN8XAotCQkJCSBJTjZQX1RD
TEFTU3xJTjZQX0FVVE9GTE9XTEFCRUx8SU42UF9SRkMyMjkyfFwKLQkJCQkgSU42UF9NVFUpCi0j
ZGVmaW5lCUlOUF9VTk1BUFBBQkxFT1BUUwkoSU42UF9IT1BPUFRTfElONlBfRFNUT1BUU3xJTjZQ
X1JUSERSfFwKLQkJCQkgSU42UF9UQ0xBU1N8SU42UF9BVVRPRkxPV0xBQkVMKQotCi0gLyogZm9y
IEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KLSNkZWZpbmUJSU42UF9ISUdIUE9SVAkJSU5Q
X0hJR0hQT1JUCi0jZGVmaW5lCUlONlBfTE9XUE9SVAkJSU5QX0xPV1BPUlQKLSNkZWZpbmUJSU42
UF9BTk9OUE9SVAkJSU5QX0FOT05QT1JUCi0jZGVmaW5lCUlONlBfUkVDVklGCQlJTlBfUkVDVklG
Ci0jZGVmaW5lCUlONlBfTVRVRElTQwkJSU5QX01UVURJU0MKLSNkZWZpbmUJSU42UF9GQUlUSAkJ
SU5QX0ZBSVRICi0jZGVmaW5lCUlONlBfQ09OVFJPTE9QVFMgSU5QX0NPTlRST0xPUFRTCi0JLyoK
LQkgKiBzb2NrZXQgQUYgdmVyc2lvbiBpcyB7bmV3ZXIgdGhhbixvciBpbmNsdWRlfQotCSAqIGFj
dHVhbCBkYXRhZ3JhbSBBRiB2ZXJzaW9uCi0JICovCi0KLSNkZWZpbmUJSU5QTE9PS1VQX1dJTERD
QVJECTEKLSNkZWZpbmUJc290b2lucGNiKHNvKQkoKHN0cnVjdCBpbnBjYiAqKShzbyktPnNvX3Bj
YikKLSNkZWZpbmUJc290b2luNnBjYihzbykJc290b2lucGNiKHNvKSAvKiBmb3IgS0FNRSBzcmMg
c3luYyBvdmVyIEJTRConcyAqLwotCi0jZGVmaW5lCUlOUF9TT0NLQUYoc28pIHNvLT5zb19wcm90
by0+cHJfZG9tYWluLT5kb21fZmFtaWx5Ci0KLSNkZWZpbmUJSU5QX0NIRUNLX1NPQ0tBRihzbywg
YWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKLQotLyogI2lmZGVmIF9LRVJORUwgKi8KLWV4dGVy
biBpbnQJaXBwb3J0X3Jlc2VydmVkaGlnaDsKLWV4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkbG93
OwotZXh0ZXJuIGludAlpcHBvcnRfbG93Zmlyc3RhdXRvOwotZXh0ZXJuIGludAlpcHBvcnRfbG93
bGFzdGF1dG87Ci1leHRlcm4gaW50CWlwcG9ydF9maXJzdGF1dG87Ci1leHRlcm4gaW50CWlwcG9y
dF9sYXN0YXV0bzsKLWV4dGVybiBpbnQJaXBwb3J0X2hpZmlyc3RhdXRvOwotZXh0ZXJuIGludAlp
cHBvcnRfaGlsYXN0YXV0bzsKLWV4dGVybiBzdHJ1Y3QgY2FsbG91dCBpcHBvcnRfdGlja19jYWxs
b3V0OwotCi12b2lkCWluX3BjYnB1cmdlaWYwKHN0cnVjdCBpbnBjYmluZm8gKiwgc3RydWN0IGlm
bmV0ICopOwotaW50CWluX3BjYmFsbG9jKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IGlucGNiaW5m
byAqKTsKLWludAlpbl9wY2JiaW5kKHN0cnVjdCBpbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwg
c3RydWN0IHVjcmVkICopOwotaW50CWluX3BjYmNvbm5lY3Qoc3RydWN0IGlucGNiICosIHN0cnVj
dCBzb2NrYWRkciAqLCBzdHJ1Y3QgdWNyZWQgKik7Ci12b2lkCWluX3BjYmRldGFjaChzdHJ1Y3Qg
aW5wY2IgKik7Ci12b2lkCWluX3BjYmRpc2Nvbm5lY3Qoc3RydWN0IGlucGNiICopOwotdm9pZAlp
bl9wY2Jkcm9wKHN0cnVjdCBpbnBjYiAqKTsKLXZvaWQJaW5fcGNiZnJlZShzdHJ1Y3QgaW5wY2Ig
Kik7Ci1pbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5wY2IgKik7Ci1zdHJ1Y3QgaW5wY2IgKgot
CWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2JpbmZvICosCi0JICAgIHN0cnVjdCBpbl9h
ZGRyLCB1X2ludCwgaW50KTsKLXN0cnVjdCBpbnBjYiAqCi0JaW5fcGNibG9va3VwX2hhc2goc3Ry
dWN0IGlucGNiaW5mbyAqLCBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQsCi0JICAgIHN0cnVjdCBpbl9h
ZGRyLCB1X2ludCwgaW50LCBzdHJ1Y3QgaWZuZXQgKik7Ci12b2lkCWluX3BjYm5vdGlmeWFsbChz
dHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRkciwKLQkgICAgaW50LCBzdHJ1
Y3QgaW5wY2IgKigqKShzdHJ1Y3QgaW5wY2IgKiwgaW50KSk7Ci12b2lkCWluX3BjYnJlaGFzaChz
dHJ1Y3QgaW5wY2IgKik7Ci12b2lkCWluX3BjYnNldHNvbGFiZWwoc3RydWN0IHNvY2tldCAqc28p
OwotaW50CWluX2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KipuYW0pOwotaW50CWluX2dldHNvY2thZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKipuYW0pOwotdm9pZAlpbl9wY2Jzb3NldGxhYmVsKHN0cnVjdCBzb2NrZXQgKnNvKTsK
LXZvaWQJaW5fcGNicmVtbGlzdHMoc3RydWN0IGlucGNiICppbnApOwotdm9pZAlpcHBvcnRfdGlj
ayh2b2lkICp4dHApOwotCi0vKgotICogRGVidWdnaW5nIHJvdXRpbmVzIGNvbXBpbGVkIGluIHdo
ZW4gRERCIGlzIHByZXNlbnQuCi0gKi8KLXZvaWQJZGJfcHJpbnRfaW5wY2Ioc3RydWN0IGlucGNi
ICppbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRlbnQpOwotCi0vKiAjZW5kaWYgIF9LRVJO
RUwgKi8KLQotI2VuZGlmIC8qICFfTkVUSU5FVF9JTl9QQ0JfSF8gKi8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfaXA2X3Zhci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTRhNjBlNGYyN2M1NmU2NmFiMTM5M2VjMGE2ODFjZWI3
OTFlYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNlcl9pcDZfdmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMjYgKzAsMCBAQAotLyot
Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVj
dC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNU
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
LSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICoKLSAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKLSAqICAgICAg
VGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJz
aXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
Ci0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWZu
ZGVmIF9VU0VSX0lQNl9WQVJfSF8KLSNkZWZpbmUgX1VTRVJfSVA2X1ZBUl9IXwotCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotc3RydWN0IGlwNl9oZHIgewotCXVuaW9uIHsK
LQkJc3RydWN0IGlwNl9oZHJjdGwgewotCQkJdV9pbnQzMl90IGlwNl91bjFfZmxvdzsJLyogMjAg
Yml0cyBvZiBmbG93LUlEICovCi0JCQl1X2ludDE2X3QgaXA2X3VuMV9wbGVuOwkvKiBwYXlsb2Fk
IGxlbmd0aCAqLwotCQkJdV9pbnQ4X3QgIGlwNl91bjFfbnh0OwkvKiBuZXh0IGhlYWRlciAqLwot
CQkJdV9pbnQ4X3QgIGlwNl91bjFfaGxpbTsJLyogaG9wIGxpbWl0ICovCi0JCX0gaXA2X3VuMTsK
LQkJdV9pbnQ4X3QgaXA2X3VuMl92ZmM7CS8qIDQgYml0cyB2ZXJzaW9uLCB0b3AgNCBiaXRzIGNs
YXNzICovCi0JfSBpcDZfY3RsdW47Ci0Jc3RydWN0IGluNl9hZGRyIGlwNl9zcmM7CS8qIHNvdXJj
ZSBhZGRyZXNzICovCi0Jc3RydWN0IGluNl9hZGRyIGlwNl9kc3Q7CS8qIGRlc3RpbmF0aW9uIGFk
ZHJlc3MgKi8KLX07Ci0jZGVmaW5lIGlwNl92ZmMJCWlwNl9jdGx1bi5pcDZfdW4yX3ZmYwotI2Rl
ZmluZSBpcDZfZmxvdwlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2Zsb3cKLSNkZWZpbmUgaXA2
X3BsZW4JaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9wbGVuCi0jZGVmaW5lIGlwNl9ueHQJCWlw
Nl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfbnh0Ci0jZGVmaW5lIGlwNl9obGltCWlwNl9jdGx1bi5p
cDZfdW4xLmlwNl91bjFfaGxpbQotI2RlZmluZSBpcDZfaG9wcwlpcDZfY3RsdW4uaXA2X3VuMS5p
cDZfdW4xX2hsaW0KLQotI2RlZmluZSBJUFY2X1ZFUlNJT04JCTB4NjAKLSNlbmRpZgotCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBzNl9hZGRyMTYgdS5Xb3Jk
Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2lmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2RlZmluZSBzNl9hZGRyOCAgX191Nl9hZGRyLl9f
dTZfYWRkcjgKLSNkZWZpbmUgczZfYWRkcjE2IF9fdTZfYWRkci5fX3U2X2FkZHIxNgotI2RlZmlu
ZSBzNl9hZGRyMzIgX191Nl9hZGRyLl9fdTZfYWRkcjMyCi0jZW5kaWYKLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfT3BlbkJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQotc3RydWN0
IHJvdXRlX2luNiB7Ci0Jc3RydWN0CXJ0ZW50cnkgKnJvX3J0OwotCXN0cnVjdAlsbGVudHJ5ICpy
b19sbGU7Ci0Jc3RydWN0CWluNl9hZGRyICpyb19pYTY7Ci0JaW50CQlyb19mbGFnczsKLQlzdHJ1
Y3QJc29ja2FkZHJfaW42IHJvX2RzdDsKLX07Ci0jZW5kaWYKLSNkZWZpbmUgSVA2X0VYVEhEUl9H
RVQodmFsLCB0eXAsIG0sIG9mZiwgbGVuKSBcCi1kbyB7CQkJCQkJCQkJXAotCXN0cnVjdCBtYnVm
ICp0OwkJCQkJCQlcCi0JaW50IHRtcDsJCQkJCQkJXAotCWlmICgobSktPm1fbGVuID49IChvZmYp
ICsgKGxlbikpCQkJCVwKLQkJKHZhbCkgPSAodHlwKShtdG9kKChtKSwgY2FkZHJfdCkgKyAob2Zm
KSk7CQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCXQgPSBtX3B1bGxkb3duKChtKSwgKG9mZiksIChs
ZW4pLCAmdG1wKTsJCVwKLQkJaWYgKHQpIHsJCQkJCQlcCi0JCQlLQVNTRVJUKHQtPm1fbGVuID49
IHRtcCArIChsZW4pLAkJXAotCQkJICAgICAgICAoIm1fcHVsbGRvd24gbWFsZnVuY3Rpb24iKSk7
CQlcCi0JCQkodmFsKSA9ICh0eXApKG10b2QodCwgY2FkZHJfdCkgKyB0bXApOwkJXAotCQl9IGVs
c2UgewkJCQkJCVwKLQkJCSh2YWwpID0gKHR5cClOVUxMOwkJCQlcCi0JCQkobSkgPSBOVUxMOwkJ
CQkJXAotCQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZW5kaWYgLyog
IV9VU0VSX0lQNl9WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfaXBfaWNtcC5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGY2ZmQ1NDg3ZTJiY2UzYzBhZWI4MThhNmFlNGNiZTEyM2ZhODU0NGQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmgK
KysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5
ODIsIDE5ODYsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVH
RU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9JUF9JQ01QX0hfCi0jZGVmaW5lIF9VU0VSX0lQ
X0lDTVBfSF8KLQotLyoKLSAqIEludGVyZmFjZSBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgRGVm
aW5pdGlvbnMuCi0gKiBQZXIgUkZDIDc5MiwgU2VwdGVtYmVyIDE5ODEuCi0gKi8KLQotLyoKLSAq
IEludGVybmFsIG9mIGFuIElDTVAgUm91dGVyIEFkdmVydGlzZW1lbnQKLSAqLwotc3RydWN0IGlj
bXBfcmFfYWRkciB7Ci0JdV9pbnQzMl90IGlyYV9hZGRyOwotCXVfaW50MzJfdCBpcmFfcHJlZmVy
ZW5jZTsKLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgb2YgYW4gaWNtcCBoZWFkZXIuCi0gKi8KLXN0
cnVjdCBpY21waGRyIHsKLQl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBz
ZWUgYmVsb3cgKi8KLQl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLwotCXVf
c2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8K
LX07Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jcHJhZ21hIHBhY2sg
KHB1c2gsIDEpCi1zdHJ1Y3QgaWNtcDZfaGRyIHsKLQl1X2ludDhfdCBpY21wNl90eXBlOwotCXVf
aW50OF90IGljbXA2X2NvZGU7Ci0JdV9pbnQxNl90IGljbXA2X2Nrc3VtOwotCXVuaW9uIHsKLQkJ
dV9pbnQzMl90IGljbXA2X3VuX2RhdGEzMlsxXTsKLQkJdV9pbnQxNl90IGljbXA2X3VuX2RhdGEx
NlsyXTsKLQkJdV9pbnQ4X3QgaWNtcDZfdW5fZGF0YThbNF07Ci0JfSBpY21wNl9kYXRhdW47Ci19
OwotI3ByYWdtYSBwYWNrKHBvcCkKLQotI2RlZmluZSBpY21wNl9kYXRhMzIgaWNtcDZfZGF0YXVu
LmljbXA2X3VuX2RhdGEzMgotI2RlZmluZSBpY21wNl9tdHUgaWNtcDZfZGF0YTMyWzBdCi0jZW5k
aWYKLQotLyoKLSAqIFN0cnVjdHVyZSBvZiBhbiBpY21wIHBhY2tldC4KLSAqCi0gKiBYWFg6IHNo
b3VsZCBzdGFydCB3aXRoIGEgc3RydWN0IGljbXBoZHIuCi0gKi8KLXN0cnVjdCBpY21wIHsKLQl1
X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KLQl1X2No
YXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLwotCXVfc2hvcnQJaWNtcF9ja3N1bTsJ
CS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KLQl1bmlvbiB7Ci0JCXVfY2hh
ciBpaF9wcHRyOwkJCS8qIElDTVBfUEFSQU1QUk9CICovCi0JCXN0cnVjdCBpbl9hZGRyIGloX2d3
YWRkcjsJLyogSUNNUF9SRURJUkVDVCAqLwotCQlzdHJ1Y3QgaWhfaWRzZXEgewotCQkJdWludDE2
X3QJaWNkX2lkOwkvKiBuZXR3b3JrIGZvcm1hdCAqLwotCQkJdWludDE2X3QJaWNkX3NlcTsgLyog
bmV0d29yayBmb3JtYXQgKi8KLQkJfSBpaF9pZHNlcTsKLQkJaW50IGloX3ZvaWQ7Ci0KLQkJLyog
SUNNUF9VTlJFQUNIX05FRURGUkFHIC0tIFBhdGggTVRVIERpc2NvdmVyeSAoUkZDMTE5MSkgKi8K
LQkJc3RydWN0IGloX3BtdHUgewotCQkJdWludDE2X3QgaXBtX3ZvaWQ7CS8qIG5ldHdvcmsgZm9y
bWF0ICovCi0JCQl1aW50MTZfdCBpcG1fbmV4dG10dTsJLyogbmV0d29yayBmb3JtYXQgKi8KLQkJ
fSBpaF9wbXR1OwotCi0JCXN0cnVjdCBpaF9ydHJhZHYgewotCQkJdV9jaGFyIGlydF9udW1fYWRk
cnM7Ci0JCQl1X2NoYXIgaXJ0X3dwYTsKLQkJCXVfaW50MTZfdCBpcnRfbGlmZXRpbWU7Ci0JCX0g
aWhfcnRyYWR2OwotCX0gaWNtcF9odW47Ci0jZGVmaW5lCWljbXBfcHB0cglpY21wX2h1bi5paF9w
cHRyCi0jZGVmaW5lCWljbXBfZ3dhZGRyCWljbXBfaHVuLmloX2d3YWRkcgotI2RlZmluZQlpY21w
X2lkCQlpY21wX2h1bi5paF9pZHNlcS5pY2RfaWQKLSNkZWZpbmUJaWNtcF9zZXEJaWNtcF9odW4u
aWhfaWRzZXEuaWNkX3NlcQotI2RlZmluZQlpY21wX3ZvaWQJaWNtcF9odW4uaWhfdm9pZAotI2Rl
ZmluZQlpY21wX3Btdm9pZAlpY21wX2h1bi5paF9wbXR1LmlwbV92b2lkCi0jZGVmaW5lCWljbXBf
bmV4dG10dQlpY21wX2h1bi5paF9wbXR1LmlwbV9uZXh0bXR1Ci0jZGVmaW5lCWljbXBfbnVtX2Fk
ZHJzCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCi0jZGVmaW5lCWljbXBfd3BhCWlj
bXBfaHVuLmloX3J0cmFkdi5pcnRfd3BhCi0jZGVmaW5lCWljbXBfbGlmZXRpbWUJaWNtcF9odW4u
aWhfcnRyYWR2LmlydF9saWZldGltZQotCXVuaW9uIHsKLQkJc3RydWN0IGlkX3RzIHsJCQkvKiBJ
Q01QIFRpbWVzdGFtcCAqLwotCQkJLyoKLQkJCSAqIFRoZSBuZXh0IDMgZmllbGRzIGFyZSBpbiBu
ZXR3b3JrIGZvcm1hdCwKLQkJCSAqIG1pbGxpc2Vjb25kcyBzaW5jZSAwMDowMCBHTVQKLQkJCSAq
LwotCQkJdWludDMyX3QgaXRzX290aW1lOwkvKiBPcmlnaW5hdGUgKi8KLQkJCXVpbnQzMl90IGl0
c19ydGltZTsJLyogUmVjZWl2ZSAqLwotCQkJdWludDMyX3QgaXRzX3R0aW1lOwkvKiBUcmFuc21p
dCAqLwotCQl9IGlkX3RzOwotCQlzdHJ1Y3QgaWRfaXAgIHsKLQkJCXN0cnVjdCBpcCBpZGlfaXA7
Ci0JCQkvKiBvcHRpb25zIGFuZCB0aGVuIDY0IGJpdHMgb2YgZGF0YSAqLwotCQl9IGlkX2lwOwot
CQlzdHJ1Y3QgaWNtcF9yYV9hZGRyIGlkX3JhZHY7Ci0JCXVfaW50MzJfdCBpZF9tYXNrOwotCQlj
aGFyCWlkX2RhdGFbMV07Ci0JfSBpY21wX2R1bjsKLSNkZWZpbmUJaWNtcF9vdGltZQlpY21wX2R1
bi5pZF90cy5pdHNfb3RpbWUKLSNkZWZpbmUJaWNtcF9ydGltZQlpY21wX2R1bi5pZF90cy5pdHNf
cnRpbWUKLSNkZWZpbmUJaWNtcF90dGltZQlpY21wX2R1bi5pZF90cy5pdHNfdHRpbWUKLSNkZWZp
bmUJaWNtcF9pcAkJaWNtcF9kdW4uaWRfaXAuaWRpX2lwCi0jZGVmaW5lCWljbXBfcmFkdglpY21w
X2R1bi5pZF9yYWR2Ci0jZGVmaW5lCWljbXBfbWFzawlpY21wX2R1bi5pZF9tYXNrCi0jZGVmaW5l
CWljbXBfZGF0YQlpY21wX2R1bi5pZF9kYXRhCi19OwotCi0vKgotICogTG93ZXIgYm91bmRzIG9u
IHBhY2tldCBsZW5ndGhzIGZvciB2YXJpb3VzIHR5cGVzLgotICogRm9yIHRoZSBlcnJvciBhZHZp
Y2UgcGFja2V0cyBtdXN0IGZpcnN0IGluc3VyZSB0aGF0IHRoZQotICogcGFja2V0IGlzIGxhcmdl
IGVub3VnaCB0byBjb250YWluIHRoZSByZXR1cm5lZCBpcCBoZWFkZXIuCi0gKiBPbmx5IHRoZW4g
Y2FuIHdlIGRvIHRoZSBjaGVjayB0byBzZWUgaWYgNjQgYml0cyBvZiBwYWNrZXQKLSAqIGRhdGEg
aGF2ZSBiZWVuIHJldHVybmVkLCBzaW5jZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm5lZAot
ICogaXAgaGVhZGVyIGxlbmd0aC4KLSAqLwotI2RlZmluZQlJQ01QX01JTkxFTgk4CQkJCS8qIGFi
cyBtaW5pbXVtICovCi0jZGVmaW5lCUlDTVBfVFNMRU4JKDggKyAzICogc2l6ZW9mICh1aW50MzJf
dCkpCS8qIHRpbWVzdGFtcCAqLwotI2RlZmluZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVz
cyBtYXNrICovCi0jZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXAp
ICsgOCkJLyogbWluICovCi0jZGVmaW5lCUlDTVBfQURWTEVOKHApCSg4ICsgKChwKS0+aWNtcF9p
cC5pcF9obCA8PCAyKSArIDgpCi0JLyogTi5CLjogbXVzdCBzZXBhcmF0ZWx5IGNoZWNrIHRoYXQg
aXBfaGwgPj0gNSAqLwotCi0vKgotICogRGVmaW5pdGlvbiBvZiB0eXBlIGFuZCBjb2RlIGZpZWxk
IHZhbHVlcy4KLSAqLwotI2RlZmluZQlJQ01QX0VDSE9SRVBMWQkJMAkJLyogZWNobyByZXBseSAq
LwotI2RlZmluZQlJQ01QX1VOUkVBQ0gJCTMJCS8qIGRlc3QgdW5yZWFjaGFibGUsIGNvZGVzOiAq
LwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX05FVAkwCQkvKiBiYWQgbmV0ICovCi0jZGVmaW5lCQlJ
Q01QX1VOUkVBQ0hfSE9TVAkxCQkvKiBiYWQgaG9zdCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNI
X1BST1RPQ09MCTIJCS8qIGJhZCBwcm90b2NvbCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX1BP
UlQJMwkJLyogYmFkIHBvcnQgKi8KLSNkZWZpbmUJCUlDTVBfVU5SRUFDSF9ORUVERlJBRwk0CQkv
KiBJUF9ERiBjYXVzZWQgZHJvcCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX1NSQ0ZBSUwJNQkJ
Lyogc3JjIHJvdXRlIGZhaWxlZCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX05FVF9VTktOT1dO
IDYJCS8qIHVua25vd24gbmV0ICovCi0jZGVmaW5lCQlJQ01QX1VOUkVBQ0hfSE9TVF9VTktOT1dO
IDcJCS8qIHVua25vd24gaG9zdCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX0lTT0xBVEVECTgJ
CS8qIHNyYyBob3N0IGlzb2xhdGVkICovCi0jZGVmaW5lCQlJQ01QX1VOUkVBQ0hfTkVUX1BST0hJ
Qgk5CQkvKiBwcm9oaWJpdGVkIGFjY2VzcyAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1Rf
UFJPSElCIDEwCQkvKiBkaXR0byAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX1RPU05FVAkxMQkJ
LyogYmFkIHRvcyBmb3IgbmV0ICovCi0jZGVmaW5lCQlJQ01QX1VOUkVBQ0hfVE9TSE9TVAkxMgkJ
LyogYmFkIHRvcyBmb3IgaG9zdCAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX0ZJTFRFUl9QUk9I
SUIgMTMJCS8qIGFkbWluIHByb2hpYiAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1RfUFJF
Q0VERU5DRSAxNAkJLyogaG9zdCBwcmVjIHZpby4gKi8KLSNkZWZpbmUJCUlDTVBfVU5SRUFDSF9Q
UkVDRURFTkNFX0NVVE9GRiAxNQkvKiBwcmVjIGN1dG9mZiAqLwotI2RlZmluZQlJQ01QX1NPVVJD
RVFVRU5DSAk0CQkvKiBwYWNrZXQgbG9zdCwgc2xvdyBkb3duICovCi0jZGVmaW5lCUlDTVBfUkVE
SVJFQ1QJCTUJCS8qIHNob3J0ZXIgcm91dGUsIGNvZGVzOiAqLwotI2RlZmluZQkJSUNNUF9SRURJ
UkVDVF9ORVQJMAkJLyogZm9yIG5ldHdvcmsgKi8KLSNkZWZpbmUJCUlDTVBfUkVESVJFQ1RfSE9T
VAkxCQkvKiBmb3IgaG9zdCAqLwotI2RlZmluZQkJSUNNUF9SRURJUkVDVF9UT1NORVQJMgkJLyog
Zm9yIHRvcyBhbmQgbmV0ICovCi0jZGVmaW5lCQlJQ01QX1JFRElSRUNUX1RPU0hPU1QJMwkJLyog
Zm9yIHRvcyBhbmQgaG9zdCAqLwotI2RlZmluZQlJQ01QX0FMVEhPU1RBRERSCTYJCS8qIGFsdGVy
bmF0ZSBob3N0IGFkZHJlc3MgKi8KLSNkZWZpbmUJSUNNUF9FQ0hPCQk4CQkvKiBlY2hvIHNlcnZp
Y2UgKi8KLSNkZWZpbmUJSUNNUF9ST1VURVJBRFZFUlQJOQkJLyogcm91dGVyIGFkdmVydGlzZW1l
bnQgKi8KLSNkZWZpbmUJCUlDTVBfUk9VVEVSQURWRVJUX05PUk1BTAkJMAkvKiBub3JtYWwgYWR2
ZXJ0aXNlbWVudCAqLwotI2RlZmluZQkJSUNNUF9ST1VURVJBRFZFUlRfTk9ST1VURV9DT01NT04J
MTYJLyogc2VsZWN0aXZlIHJvdXRpbmcgKi8KLSNkZWZpbmUJSUNNUF9ST1VURVJTT0xJQ0lUCTEw
CQkvKiByb3V0ZXIgc29saWNpdGF0aW9uICovCi0jZGVmaW5lCUlDTVBfVElNWENFRUQJCTExCQkv
KiB0aW1lIGV4Y2VlZGVkLCBjb2RlOiAqLwotI2RlZmluZQkJSUNNUF9USU1YQ0VFRF9JTlRSQU5T
CTAJCS8qIHR0bD09MCBpbiB0cmFuc2l0ICovCi0jZGVmaW5lCQlJQ01QX1RJTVhDRUVEX1JFQVNT
CTEJCS8qIHR0bD09MCBpbiByZWFzcyAqLwotI2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8q
IGlwIGhlYWRlciBiYWQgKi8KLSNkZWZpbmUJCUlDTVBfUEFSQU1QUk9CX0VSUkFUUFRSIDAJCS8q
IGVycm9yIGF0IHBhcmFtIHB0ciAqLwotI2RlZmluZQkJSUNNUF9QQVJBTVBST0JfT1BUQUJTRU5U
IDEJCS8qIHJlcS4gb3B0LiBhYnNlbnQgKi8KLSNkZWZpbmUJCUlDTVBfUEFSQU1QUk9CX0xFTkdU
SCAyCQkJLyogYmFkIGxlbmd0aCAqLwotI2RlZmluZQlJQ01QX1RTVEFNUAkJMTMJCS8qIHRpbWVz
dGFtcCByZXF1ZXN0ICovCi0jZGVmaW5lCUlDTVBfVFNUQU1QUkVQTFkJMTQJCS8qIHRpbWVzdGFt
cCByZXBseSAqLwotI2RlZmluZQlJQ01QX0lSRVEJCTE1CQkvKiBpbmZvcm1hdGlvbiByZXF1ZXN0
ICovCi0jZGVmaW5lCUlDTVBfSVJFUVJFUExZCQkxNgkJLyogaW5mb3JtYXRpb24gcmVwbHkgKi8K
LSNkZWZpbmUJSUNNUF9NQVNLUkVRCQkxNwkJLyogYWRkcmVzcyBtYXNrIHJlcXVlc3QgKi8KLSNk
ZWZpbmUJSUNNUF9NQVNLUkVQTFkJCTE4CQkvKiBhZGRyZXNzIG1hc2sgcmVwbHkgKi8KLSNkZWZp
bmUJSUNNUF9UUkFDRVJPVVRFCQkzMAkJLyogdHJhY2Vyb3V0ZSAqLwotI2RlZmluZQlJQ01QX0RB
VEFDT05WRVJSCTMxCQkvKiBkYXRhIGNvbnZlcnNpb24gZXJyb3IgKi8KLSNkZWZpbmUJSUNNUF9N
T0JJTEVfUkVESVJFQ1QJMzIJCS8qIG1vYmlsZSBob3N0IHJlZGlyZWN0ICovCi0jZGVmaW5lCUlD
TVBfSVBWNl9XSEVSRUFSRVlPVQkzMwkJLyogSVB2NiB3aGVyZS1hcmUteW91ICovCi0jZGVmaW5l
CUlDTVBfSVBWNl9JQU1IRVJFCTM0CQkvKiBJUHY2IGktYW0taGVyZSAqLwotI2RlZmluZQlJQ01Q
X01PQklMRV9SRUdSRVFVRVNUCTM1CQkvKiBtb2JpbGUgcmVnaXN0cmF0aW9uIHJlcSAqLwotI2Rl
ZmluZQlJQ01QX01PQklMRV9SRUdSRVBMWQkzNgkJLyogbW9iaWxlIHJlZ2lzdHJhdGlvbiByZXBs
eSAqLwotI2RlZmluZQlJQ01QX1NLSVAJCTM5CQkvKiBTS0lQICovCi0jZGVmaW5lCUlDTVBfUEhP
VFVSSVMJCTQwCQkvKiBQaG90dXJpcyAqLwotI2RlZmluZQkJSUNNUF9QSE9UVVJJU19VTktOT1dO
X0lOREVYCTEJLyogdW5rbm93biBzZWMgaW5kZXggKi8KLSNkZWZpbmUJCUlDTVBfUEhPVFVSSVNf
QVVUSF9GQUlMRUQJMgkvKiBhdXRoIGZhaWxlZCAqLwotI2RlZmluZQkJSUNNUF9QSE9UVVJJU19E
RUNSWVBUX0ZBSUxFRAkzCS8qIGRlY3J5cHQgZmFpbGVkICovCi0KLSNkZWZpbmUJSUNNUF9NQVhU
WVBFCQk0MAotCi0jZGVmaW5lCUlDTVBfSU5GT1RZUEUodHlwZSkgXAotCSgodHlwZSkgPT0gSUNN
UF9FQ0hPUkVQTFkgfHwgKHR5cGUpID09IElDTVBfRUNITyB8fCBcCi0JKHR5cGUpID09IElDTVBf
Uk9VVEVSQURWRVJUIHx8ICh0eXBlKSA9PSBJQ01QX1JPVVRFUlNPTElDSVQgfHwgXAotCSh0eXBl
KSA9PSBJQ01QX1RTVEFNUCB8fCAodHlwZSkgPT0gSUNNUF9UU1RBTVBSRVBMWSB8fCBcCi0JKHR5
cGUpID09IElDTVBfSVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQTFkgfHwgXAotCSh0eXBl
KSA9PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JFUExZKQotCi0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfbWFs
bG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOTA0Y2E1YjQ3YmJiNThiOGZi
NmI5ZjZiYmM0NDRmZDZkMjIxMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2
NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MwotICoJVGhlIFJlZ2Vu
dHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIENvcHlyaWdodCAoYykgMjAw
NSBSb2JlcnQgTi4gTS4gV2F0c29uCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
LSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotLyogVGhpcyBmaWxlIGhhcyBiZWVuIHJl
bmFtZWQgdXNlcl9tYWxsb2MuaCBmb3IgVXNlcnNwYWNlICovCi0jaWZuZGVmIF9VU0VSX01BTExP
Q19IXwotI2RlZmluZQlfVVNFUl9NQUxMT0NfSF8KLQotLypfX1VzZXJzcGFjZV9fKi8KLSNpbmNs
dWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZCAoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jaW5jbHVkZSA8c3Rk
aW50Lmg+Ci0jZWxzZQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2MDAK
LSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbGlmIGRlZmluZWQoU0NUUF9TVERJTlRfSU5DTFVERSkK
LSNpbmNsdWRlIFNDVFBfU1RESU5UX0lOQ0xVREUKLSNlbHNlCi0jZGVmaW5lIHVpbnQzMl90IHVu
c2lnbmVkIF9faW50MzIKLSNkZWZpbmUgdWludDY0X3QgdW5zaWduZWQgX19pbnQ2NAotI2VuZGlm
Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNlbmRpZgotCi0jZGVmaW5lCU1JTkFMTE9DU0laRQlV
TUFfU01BTExFU1RfVU5JVAotCi0vKgotICogZmxhZ3MgdG8gbWFsbG9jLgotICovCi0jZGVmaW5l
CU1fTk9XQUlUCTB4MDAwMQkJLyogZG8gbm90IGJsb2NrICovCi0jZGVmaW5lCU1fV0FJVE9LCTB4
MDAwMgkJLyogb2sgdG8gYmxvY2sgKi8KLSNkZWZpbmUJTV9aRVJPCQkweDAxMDAJCS8qIGJ6ZXJv
IHRoZSBhbGxvY2F0aW9uICovCi0jZGVmaW5lCU1fTk9WTQkJMHgwMjAwCQkvKiBkb24ndCBhc2sg
Vk0gZm9yIHBhZ2VzICovCi0jZGVmaW5lCU1fVVNFX1JFU0VSVkUJMHgwNDAwCQkvKiBjYW4gYWxs
b2Mgb3V0IG9mIHJlc2VydmUgbWVtb3J5ICovCi0KLSNkZWZpbmUJTV9NQUdJQwkJODc3OTgzOTc3
CS8qIHRpbWUgd2hlbiBmaXJzdCBkZWZpbmVkIDotKSAqLwotCi0vKgotICogVHdvIG1hbGxvYyB0
eXBlIHN0cnVjdHVyZXMgYXJlIHByZXNlbnQ6IG1hbGxvY190eXBlLCB3aGljaCBpcyB1c2VkIGJ5
IGEKLSAqIHR5cGUgb3duZXIgdG8gZGVjbGFyZSB0aGUgdHlwZSwgYW5kIG1hbGxvY190eXBlX2lu
dGVybmFsLCB3aGljaCBob2xkcwotICogbWFsbG9jLW93bmVkIHN0YXRpc3RpY3MgYW5kIG90aGVy
IEFCSS1zZW5zaXRpdmUgZmllbGRzLCBzdWNoIGFzIHRoZSBzZXQgb2YKLSAqIG1hbGxvYyBzdGF0
aXN0aWNzIGluZGV4ZWQgYnkgdGhlIGNvbXBpbGUtdGltZSBNQVhDUFUgY29uc3RhbnQuCi0gKiBB
cHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIGludHJvZHVjaW5nIGRlcGVuZGVuY2Ugb24gdGhlIGFs
bG9jYXRvciBwcml2YXRlCi0gKiBkYXRhIGxheW91dCBhbmQgc2l6ZS4KLSAqCi0gKiBUaGUgbWFs
bG9jX3R5cGUga3NfbmV4dCBmaWVsZCBpcyBwcm90ZWN0ZWQgYnkgbWFsbG9jX210eC4gIE90aGVy
IGZpZWxkcyBpbgotICogbWFsbG9jX3R5cGUgYXJlIHN0YXRpYyBhZnRlciBpbml0aWFsaXphdGlv
biBzbyB1bnN5bmNocm9uaXplZC4KLSAqCi0gKiBTdGF0aXN0aWNzIGluIG1hbGxvY190eXBlX3N0
YXRzIGFyZSB3cml0dGVuIG9ubHkgd2hlbiBob2xkaW5nIGEgY3JpdGljYWwKLSAqIHNlY3Rpb24g
YW5kIHJ1bm5pbmcgb24gdGhlIENQVSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IGludG8gdGhl
IHN0YXQKLSAqIGFycmF5LCBidXQgcmVhZCBsb2NrLWZyZWUgcmVzdWx0aW5nIGluIHBvc3NpYmxl
IChtaW5vcikgcmFjZXMsIHdoaWNoIHRoZQotICogbW9uaXRvcmluZyBhcHAgc2hvdWxkIHRha2Ug
aW50byBhY2NvdW50LgotICovCi1zdHJ1Y3QgbWFsbG9jX3R5cGVfc3RhdHMgewotCXVpbnQ2NF90
CW10c19tZW1hbGxvY2VkOwkvKiBCeXRlcyBhbGxvY2F0ZWQgb24gQ1BVLiAqLwotCXVpbnQ2NF90
CW10c19tZW1mcmVlZDsJLyogQnl0ZXMgZnJlZWQgb24gQ1BVLiAqLwotCXVpbnQ2NF90CW10c19u
dW1hbGxvY3M7CS8qIE51bWJlciBvZiBhbGxvY2F0ZXMgb24gQ1BVLiAqLwotCXVpbnQ2NF90CW10
c19udW1mcmVlczsJLyogbnVtYmVyIG9mIGZyZWVzIG9uIENQVS4gKi8KLQl1aW50NjRfdAltdHNf
c2l6ZTsJLyogQml0bWFzayBvZiBzaXplcyBhbGxvY2F0ZWQgb24gQ1BVLiAqLwotCXVpbnQ2NF90
CV9tdHNfcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmaWVsZC4gKi8KLQl1aW50NjRfdAlfbXRzX3Jl
c2VydmVkMjsJLyogUmVzZXJ2ZWQgZmllbGQuICovCi0JdWludDY0X3QJX210c19yZXNlcnZlZDM7
CS8qIFJlc2VydmVkIGZpZWxkLiAqLwotfTsKLQotI2lmbmRlZiBNQVhDUFUgLyogbmVjZXNzYXJ5
IG9uIExpbnV4ICovCi0jZGVmaW5lIE1BWENQVSA0IC8qIGFyYml0cmFyeT8gKi8KLSNlbmRpZgot
Ci1zdHJ1Y3QgbWFsbG9jX3R5cGVfaW50ZXJuYWwgewotCXN0cnVjdCBtYWxsb2NfdHlwZV9zdGF0
cwltdGlfc3RhdHNbTUFYQ1BVXTsKLX07Ci0KLS8qCi0gKiBBQkktY29tcGF0aWJsZSB2ZXJzaW9u
IG9mIHRoZSBvbGQgJ3N0cnVjdCBtYWxsb2NfdHlwZScsIG9ubHkgYWxsIHN0YXRzIGFyZQotICog
bm93IG1hbGxvYy1tYW5hZ2VkIGluIG1hbGxvYy1vd25lZCBtZW1vcnkgcmF0aGVyIHRoYW4gaW4g
Y2FsbGVyIG1lbW9yeSwgc28KLSAqIGFzIHRvIGF2b2lkIEFCSSBpc3N1ZXMuICBUaGUga3NfbmV4
dCBwb2ludGVyIGlzIHJldXNlZCBhcyBhIHBvaW50ZXIgdG8gdGhlCi0gKiBpbnRlcm5hbCBkYXRh
IGhhbmRsZS4KLSAqLwotc3RydWN0IG1hbGxvY190eXBlIHsKLQlzdHJ1Y3QgbWFsbG9jX3R5cGUg
KmtzX25leHQ7CS8qIE5leHQgaW4gZ2xvYmFsIGNoYWluLiAqLwotCXVfbG9uZwkJIF9rc19tZW11
c2U7CS8qIE5vIGxvbmdlciB1c2VkLiAqLwotCXVfbG9uZwkJIF9rc19zaXplOwkvKiBObyBsb25n
ZXIgdXNlZC4gKi8KLQl1X2xvbmcJCSBfa3NfaW51c2U7CS8qIE5vIGxvbmdlciB1c2VkLiAqLwot
CXVpbnQ2NF90CSBfa3NfY2FsbHM7CS8qIE5vIGxvbmdlciB1c2VkLiAqLwotCXVfbG9uZwkJIF9r
c19tYXh1c2VkOwkvKiBObyBsb25nZXIgdXNlZC4gKi8KLQl1X2xvbmcJCSBrc19tYWdpYzsJLyog
RGV0ZWN0IHByb2dyYW1tZXIgZXJyb3IuICovCi0JY29uc3QgY2hhcgkqa3Nfc2hvcnRkZXNjOwkv
KiBQcmludGFibGUgdHlwZSBuYW1lLiAqLwotCi0JLyoKLQkgKiBzdHJ1Y3QgbWFsbG9jX3R5cGUg
d2FzIHRlcm1pbmF0ZWQgd2l0aCBhIHN0cnVjdCBtdHgsIHdoaWNoIGlzIG5vCi0JICogbG9uZ2Vy
IHJlcXVpcmVkLiAgRm9yIEFCSSByZWFzb25zLCBjb250aW51ZSB0byBmbGVzaCBvdXQgdGhlIGZ1
bGwKLQkgKiBzaXplIG9mIHRoZSBvbGQgc3RydWN0dXJlLCBidXQgcmV1c2UgdGhlIF9sb19jbGFz
cyBmaWVsZCBmb3Igb3VyCi0JICogaW50ZXJuYWwgZGF0YSBoYW5kbGUuCi0JICovCi0Jdm9pZAkJ
KmtzX2hhbmRsZTsJLyogUHJpdi4gZGF0YSwgd2FzIGxvX2NsYXNzLiAqLwotCWNvbnN0IGNoYXIJ
Kl9sb19uYW1lOwotCWNvbnN0IGNoYXIJKl9sb190eXBlOwotCXVfaW50CQkgX2xvX2ZsYWdzOwot
CXZvaWQJCSpfbG9fbGlzdF9uZXh0OwotCXN0cnVjdCB3aXRuZXNzCSpfbG9fd2l0bmVzczsKLQl1
aW50cHRyX3QJIF9tdHhfbG9jazsKLQl1X2ludAkJIF9tdHhfcmVjdXJzZTsKLX07Ci0KLS8qCi0g
KiBTdGF0aXN0aWNzIHN0cnVjdHVyZSBoZWFkZXJzIGZvciB1c2VyIHNwYWNlLiAgVGhlIGtlcm4u
bWFsbG9jIHN5c2N0bAotICogZXhwb3NlcyBhIHN0cnVjdHVyZSBzdHJlYW0gY29uc2lzdGluZyBv
ZiBhIHN0cmVhbSBoZWFkZXIsIHRoZW4gYSBzZXJpZXMgb2YKLSAqIG1hbGxvYyB0eXBlIGhlYWRl
cnMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAocXVhbnRpdHkgbWF4Y3B1cykuICBGb3IKLSAq
IGNvbnZlbmllbmNlLCB0aGUga2VybmVsIHdpbGwgcHJvdmlkZSB0aGUgY3VycmVudCB2YWx1ZSBv
ZiBtYXhjcHVzIGF0IHRoZQotICogaGVhZCBvZiB0aGUgc3RyZWFtLgotICovCi0jZGVmaW5lCU1B
TExPQ19UWVBFX1NUUkVBTV9WRVJTSU9OCTB4MDAwMDAwMDEKLXN0cnVjdCBtYWxsb2NfdHlwZV9z
dHJlYW1faGVhZGVyIHsKLQl1aW50MzJfdAltdHNoX3ZlcnNpb247CS8qIFN0cmVhbSBmb3JtYXQg
dmVyc2lvbi4gKi8KLQl1aW50MzJfdAltdHNoX21heGNwdXM7CS8qIFZhbHVlIG9mIE1BWENQVSBm
b3Igc3RyZWFtLiAqLwotCXVpbnQzMl90CW10c2hfY291bnQ7CS8qIE51bWJlciBvZiByZWNvcmRz
LiAqLwotCXVpbnQzMl90CV9tdHNoX3BhZDsJLyogUGFkL3Jlc2VydmVkIGZpZWxkLiAqLwotfTsK
LQotI2RlZmluZQlNQUxMT0NfTUFYX05BTUUJMzIKLXN0cnVjdCBtYWxsb2NfdHlwZV9oZWFkZXIg
ewotCWNoYXIJCQkJbXRoX25hbWVbTUFMTE9DX01BWF9OQU1FXTsKLX07Ci0KLS8qIF9fVXNlcnNw
YWNlX18KLU5vdGljZSB0aGF0IGF0IHBsYWNlcyBpdCB1c2VzIGlmZGVmIF9LRVJORUwuIFRoYXQg
bGluZSBjYW5ub3QgYmUKLXJlbW92ZWQgYmVjYXVzZSBpdCBjYXVzZXMgY29uZmxpY3RzIHdpdGgg
bWFsbG9jIGRlZmluaXRpb24gaW4KLS91c3IvaW5jbHVkZS9tYWxsb2MuaCwgd2hpY2ggZXNzZW50
aWFsbHkgc2F5cyB0aGF0IG1hbGxvYy5oIGhhcwotYmVlbiBvdmVycmlkZGVuIGJ5IHN0ZGxpYi5o
LiBXZSB3aWxsIG5lZWQgdG8gdXNlIG5hbWVzIGxpa2UKLXVzZXJfbWFsbG9jLmggZm9yIGlzb2xh
dGluZyBrZXJuZWwgaW50ZXJmYWNlIGhlYWRlcnMuIHVzaW5nCi1vcmlnaW5hbCBuYW1lcyBsaWtl
IG1hbGxvYy5oIGluIGEgdXNlcl9pbmNsdWRlIGhlYWRlciBjYW4gYmUKLWNvbmZ1c2luZywgQWxs
IHVzZXJzcGFjZSBoZWFkZXIgZmlsZXMgYXJlIGJlaW5nIHBsYWNlZCBpbiAuL3VzZXJfaW5jbHVk
ZQotQmV0dGVyIHN0aWxsIHRvIHJlbW92ZSBmcm9tIHVzZXJfaW5jbHVkZS5oIGFsbCBpcnJlbGV2
YW50IGNvZGUgc3VjaAotYXMgdGhhdCBpbiB0aGUgYmxvY2sgc3RhcnRpbmcgd2l0aCAjaWZkZWYg
X0tFUk5FTC4gSSBhbSBvbmx5IGxlYXZpbmcKLWl0IGluIGZvciB0aGUgdGltZSBiZWluZyB0byBz
ZWUgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGluIHRoaXMgZmlsZQotdGhhdCBrZXJuZWwgdXNlcy4K
LQotU3RhcnQgY29weTogQ29waWVkIGNvZGUgZm9yIF9fVXNlcnNwYWNlX18gKi8KLSNkZWZpbmUJ
TUFMTE9DX0RFRklORSh0eXBlLCBzaG9ydGRlc2MsIGxvbmdkZXNjKQkJCVwKLQlzdHJ1Y3QgbWFs
bG9jX3R5cGUgdHlwZVsxXSA9IHsJCQkJCVwKLQkJeyBOVUxMLCAwLCAwLCAwLCAwLCAwLCBNX01B
R0lDLCBzaG9ydGRlc2MsIE5VTEwsIE5VTEwsCVwKLQkJICAgIE5VTEwsIDAsIE5VTEwsIE5VTEws
IDAsIDAgfQkJCQlcCi0JfQotCi0vKiBSZW1vdmVkICJleHRlcm4iIGluIF9fVXNlcnNwYWNlX18g
Y29kZSAqLwotLyogSWYgd2UgbmVlZCB0byB1c2UgTUFMTE9DX0RFQ0xBUkUgYmVmb3JlIHVzaW5n
IE1BTExPQyB0aGVuCi0gICB3ZSBoYXZlIHRvIHJlbW92ZSBleHRlcm4uCi0gICAgIEluIC91c3Iv
aW5jbHVkZS9zeXMvbWFsbG9jLmggdGhlcmUgaXMgdGhpcyBkZWZpbml0aW9uOgotICAgICAjZGVm
aW5lICAgIE1BTExPQ19ERUNMQVJFKHR5cGUpIFwKLSAgICAgICAgZXh0ZXJuIHN0cnVjdCBtYWxs
b2NfdHlwZSB0eXBlWzFdCi0gICAgIGFuZCBsb2FkZXIgaXMgdW5hYmxlIHRvIGZpbmQgdGhlIGV4
dGVybiBtYWxsb2NfdHlwZSBiZWNhdXNlCi0gICAgIGl0IG1heSBiZSBkZWZpbmVkIGluIG9uZSBv
ZiBrZXJuZWwgb2JqZWN0IGZpbGVzLgotICAgICBJdCBzZWVtcyB0aGF0IE1BTExPQ19ERUNMQVJF
IGFuZCBNQUxMT0NfREVGSU5FIGNhbm5vdCBiZSB1c2VkIGF0Ci0gICAgIHRoZSBzYW1lIHRpbWUg
Zm9yIHNhbWUgInR5cGUiIHZhcmlhYmxlLiBBbHNvLCBpbiBSYW5kYWxsJ3MgYXJjaGl0ZWN0dXJl
Ci0gICAgIGRvY3VtZW50LCB3aGVyZSBpdCBzcGVjaWZpZXMgTy9TIHNwZWNpZmljIG1hY3JvcyBh
bmQgZnVuY3Rpb25zLCBpdCBzYXlzCi0gICAgIHRoYXQgdGhlIG5hbWUgaW4gU0NUUF9NQUxMT0Mg
ZG9lcyBub3QgaGF2ZSB0byBiZSB1c2VkLgotKi8KLSNkZWZpbmUJTUFMTE9DX0RFQ0xBUkUodHlw
ZSkgXAotCWV4dGVybiBzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXQotCi0jZGVmaW5lCUZSRUUo
YWRkciwgdHlwZSkgZnJlZSgoYWRkcikpCi0KLS8qIGNoYW5nZWQgZGVmaW5pdGlvbnMgb2YgTUFM
TE9DIGFuZCBGUkVFICovCi0vKiBVc2luZyBtZW1zZXQgaWYgZmxhZyBNX1pFUk8gaXMgc3BlY2lm
aWVkLiBUb2RvOiBNX1dBSVRPSyBhbmQgTV9OT1dBSVQgKi8KLSNkZWZpbmUJTUFMTE9DKHNwYWNl
LCBjYXN0LCBzaXplLCB0eXBlLCBmbGFncykgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg
ICAoKHNwYWNlKSA9IChjYXN0KW1hbGxvYygodV9sb25nKShzaXplKSkpOyAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICAgIGlmIChmbGFncyAmIE1f
WkVSTykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAg
bWVtc2V0KHNwYWNlLDAsc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCi0JfQkJCQkJCQkJXAotICAgIH0gd2hpbGUgKDApOwotCi0KLS8qIEVuZCBjb3B5OiBD
b3BpZWQgY29kZSBmb3IgX19Vc2Vyc3BhY2VfXyAqLwotCi0jaWYgMAotI2lmZGVmIF9LRVJORUwK
LSNkZWZpbmUJTUFMTE9DX0RFRklORSh0eXBlLCBzaG9ydGRlc2MsIGxvbmdkZXNjKQkJCVwKLQlz
dHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXSA9IHsJCQkJCVwKLQkJeyBOVUxMLCAwLCAwLCAwLCAw
LCAwLCBNX01BR0lDLCBzaG9ydGRlc2MsIE5VTEwsIE5VTEwsCVwKLQkJICAgIE5VTEwsIDAsIE5V
TEwsIE5VTEwsIDAsIDAgfQkJCQlcCi0JfTsJCQkJCQkJCVwKLQlTWVNJTklUKHR5cGUjI19pbml0
LCBTSV9TVUJfS01FTSwgU0lfT1JERVJfU0VDT05ELCBtYWxsb2NfaW5pdCwJXAotCSAgICB0eXBl
KTsJCQkJCQkJXAotCVNZU1VOSU5JVCh0eXBlIyNfdW5pbml0LCBTSV9TVUJfS01FTSwgU0lfT1JE
RVJfQU5ZLAkJXAotCSAgICBtYWxsb2NfdW5pbml0LCB0eXBlKQotCi0KLSNkZWZpbmUJTUFMTE9D
X0RFQ0xBUkUodHlwZSkgXAotCWV4dGVybiBzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXQotCi1N
QUxMT0NfREVDTEFSRShNX0NBQ0hFKTsKLU1BTExPQ19ERUNMQVJFKE1fREVWQlVGKTsKLU1BTExP
Q19ERUNMQVJFKE1fVEVNUCk7Ci0KLU1BTExPQ19ERUNMQVJFKE1fSVA2T1BUKTsgLyogZm9yIElO
RVQ2ICovCi1NQUxMT0NfREVDTEFSRShNX0lQNk5EUCk7IC8qIGZvciBJTkVUNiAqLwotCi0vKgot
ICogRGVwcmVjYXRlZCBtYWNybyB2ZXJzaW9ucyBvZiBub3QtcXVpdGUtbWFsbG9jKCkgYW5kIGZy
ZWUoKS4KLSAqLwotI2RlZmluZQlNQUxMT0Moc3BhY2UsIGNhc3QsIHNpemUsIHR5cGUsIGZsYWdz
KSBcCi0JKChzcGFjZSkgPSAoY2FzdCltYWxsb2MoKHVfbG9uZykoc2l6ZSksICh0eXBlKSwgKGZs
YWdzKSkpCi0jZGVmaW5lCUZSRUUoYWRkciwgdHlwZSkgZnJlZSgoYWRkciksICh0eXBlKSkKLQot
LyoKLSAqIFhYWCB0aGlzIHNob3VsZCBiZSBkZWNsYXJlZCBpbiA8c3lzL3Vpby5oPiwgYnV0IHRo
YXQgdGVuZHMgdG8gZmFpbAotICogYmVjYXVzZSA8c3lzL3Vpby5oPiBpcyBpbmNsdWRlZCBpbiBh
IGhlYWRlciBiZWZvcmUgdGhlIHNvdXJjZSBmaWxlCi0gKiBoYXMgYSBjaGFuY2UgdG8gaW5jbHVk
ZSA8c3lzL21hbGxvYy5oPiB0byBnZXQgTUFMTE9DX0RFQ0xBUkUoKSBkZWZpbmVkLgotICovCi1N
QUxMT0NfREVDTEFSRShNX0lPVik7Ci0KLWV4dGVybiBzdHJ1Y3QgbXR4IG1hbGxvY19tdHg7Ci0K
LS8qIFhYWCBzdHJ1Y3QgbWFsbG9jX3R5cGUgaXMgdW51c2VkIGZvciBjb250aWcqKCkuICovCi12
b2lkCWNvbnRpZ2ZyZWUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgbWFs
bG9jX3R5cGUgKnR5cGUpOwotdm9pZAkqY29udGlnbWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwg
c3RydWN0IG1hbGxvY190eXBlICp0eXBlLCBpbnQgZmxhZ3MsCi0JICAgIHZtX3BhZGRyX3QgbG93
LCB2bV9wYWRkcl90IGhpZ2gsIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50LAotCSAgICB1bnNpZ25l
ZCBsb25nIGJvdW5kYXJ5KTsKLXZvaWQJZnJlZSh2b2lkICphZGRyLCBzdHJ1Y3QgbWFsbG9jX3R5
cGUgKnR5cGUpOwotdm9pZAkqbWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IG1hbGxv
Y190eXBlICp0eXBlLCBpbnQgZmxhZ3MpOwotdm9pZAltYWxsb2NfaW5pdCh2b2lkICopOwotaW50
CW1hbGxvY19sYXN0X2ZhaWwodm9pZCk7Ci12b2lkCW1hbGxvY190eXBlX2FsbG9jYXRlZChzdHJ1
Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7Ci12b2lkCW1hbGxvY190
eXBlX2ZyZWVkKHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplKTsK
LXZvaWQJbWFsbG9jX3VuaW5pdCh2b2lkICopOwotdm9pZAkqcmVhbGxvYyh2b2lkICphZGRyLCB1
bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKLQkgICAgaW50IGZs
YWdzKTsKLXZvaWQJKnJlYWxsb2NmKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3Ry
dWN0IG1hbGxvY190eXBlICp0eXBlLAotCSAgICBpbnQgZmxhZ3MpOwotCi0KLSNlbmRpZiAvKiBf
S0VSTkVMICovCi0jZW5kaWYKLQotI2VuZGlmIC8qICFfU1lTX01BTExPQ19IXyAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX21idWYuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViZDhhMjdiNmI3N2QwYWI1OGE2M2M5ZTc3ZDJiY2Rm
MTUzMTcyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c2VyX21idWYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0MjkgKzAsMCBAQAotLyot
Ci0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5ODgsIDE5OTMKLSAqICAgICAgVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0g
KiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMg
YGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICog
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0vKgotICog
IF9fVXNlcnNwYWNlX18gdmVyc2lvbiBvZiAvdXNyL3NyYy9zeXMva2Vybi9rZXJuX21idWYuYwot
ICogIFdlIGFyZSBpbml0aWFsaXppbmcgdHdvIHpvbmVzIGZvciBNYnVmcyBhbmQgQ2x1c3RlcnMu
Ci0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotLyog
I2luY2x1ZGUgPHN5cy9wYXJhbS5oPiBUaGlzIGRlZmluZXMgTVNJWkUgMjU2ICovCi0jaWYgIWRl
ZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotI2luY2x1ZGUgInVtZW0uaCIKLSNlbmRpZgot
I2luY2x1ZGUgInVzZXJfbWJ1Zi5oIgotI2luY2x1ZGUgInVzZXJfZW52aXJvbm1lbnQuaCIKLSNp
bmNsdWRlICJ1c2VyX2F0b21pYy5oIgotI2luY2x1ZGUgIm5ldGluZXQvc2N0cF9wY2IuaCIKLQot
c3RydWN0IG1ic3RhdCBtYnN0YXQ7Ci0jZGVmaW5lIEtJUENfTUFYX0xJTktIRFIgICAgICAgIDQg
ICAgICAgLyogaW50OiBtYXggbGVuZ3RoIG9mIGxpbmsgaGVhZGVyIChzZWUgc3lzL3N5c2NsdC5o
KSAqLwotI2RlZmluZSBLSVBDX01BWF9QUk9UT0hEUgk1CS8qIGludDogbWF4IGxlbmd0aCBvZiBu
ZXR3b3JrIGhlYWRlciAoc2VlIHN5cy9zeXNjbHQuaCkqLwotaW50IG1heF9saW5raGRyID0gS0lQ
Q19NQVhfTElOS0hEUjsKLWludCBtYXhfcHJvdG9oZHIgPSBLSVBDX01BWF9QUk9UT0hEUjsgLyog
U2l6ZSBvZiBsYXJnZXN0IHByb3RvY29sIGxheWVyIGhlYWRlci4gKi8KLQotLyoKLSAqIFpvbmVz
IGZyb20gd2hpY2ggd2UgYWxsb2NhdGUuCi0gKi8KLXNjdHBfem9uZV90CXpvbmVfbWJ1ZjsKLXNj
dHBfem9uZV90CXpvbmVfY2x1c3Q7Ci1zY3RwX3pvbmVfdAl6b25lX2V4dF9yZWZjbnQ7Ci0KLS8q
IF9fVXNlcnNwYWNlX18gY2x1c3RfbWJfYXJncyB3aWxsIGJlIHBhc3NlZCBhcyBjYWxsYmFjayBk
YXRhIHRvIG1iX2N0b3JfY2x1c3QKLSAqIGFuZCBtYl9kdG9yX2NsdXN0LgotICogTm90ZTogSSBo
YWQgdG8gdXNlIHN0cnVjdCBjbHVzdF9hcmdzIGFzIGFuIGVuY2Fwc3VsYXRpb24gZm9yIGFuIG1i
dWYgcG9pbnRlci4KLSAqIHN0cnVjdCBtYnVmICogY2x1c3RfbWJfYXJnczsgZG9lcyBub3Qgd29y
ay4KLSAqLwotc3RydWN0IGNsdXN0X2FyZ3MgY2x1c3RfbWJfYXJnczsKLQotCi0vKiBfX1VzZXJz
cGFjZV9fCi0gKiBMb2NhbCBwcm90b3R5cGVzLgotICovCi1zdGF0aWMgaW50CW1iX2N0b3JfbWJ1
Zih2b2lkICosIHZvaWQgKiwgaW50KTsKLXN0YXRpYyBpbnQgICAgICBtYl9jdG9yX2NsdXN0KHZv
aWQgKiwgdm9pZCAqLCBpbnQpOwotc3RhdGljIHZvaWQJbWJfZHRvcl9tYnVmKHZvaWQgKiwgIHZv
aWQgKik7Ci1zdGF0aWMgdm9pZAltYl9kdG9yX2NsdXN0KHZvaWQgKiwgdm9pZCAqKTsKLQotCi0v
KioqKioqKioqKioqKioqKiogRnVuY3Rpb25zIHRha2VuIGZyb20gdXNlcl9tYnVmLmggKioqKioq
KioqKioqKi8KLQotc3RhdGljIGludCBtYnVmX2NvbnN0cnVjdG9yX2R1cChzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IHBrdGhkciwgc2hvcnQgdHlwZSkKLXsKLQlpbnQgZmxhZ3MgPSBwa3RoZHI7Ci0JaWYg
KHR5cGUgPT0gTVRfTk9JTklUKQotCQlyZXR1cm4gKDApOwotCi0JbS0+bV9uZXh0ID0gTlVMTDsK
LQltLT5tX25leHRwa3QgPSBOVUxMOwotCW0tPm1fbGVuID0gMDsKLQltLT5tX2ZsYWdzID0gZmxh
Z3M7Ci0JbS0+bV90eXBlID0gdHlwZTsKLQlpZiAoZmxhZ3MgJiBNX1BLVEhEUikgewotCQltLT5t
X2RhdGEgPSBtLT5tX3BrdGRhdDsKLQkJbS0+bV9wa3RoZHIucmN2aWYgPSBOVUxMOwotCQltLT5t
X3BrdGhkci5sZW4gPSAwOwotCQltLT5tX3BrdGhkci5oZWFkZXIgPSBOVUxMOwotCQltLT5tX3Br
dGhkci5jc3VtX2ZsYWdzID0gMDsKLQkJbS0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMDsKLQkJbS0+
bV9wa3RoZHIudHNvX3NlZ3N6ID0gMDsKLQkJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IDA7Ci0J
CVNMSVNUX0lOSVQoJm0tPm1fcGt0aGRyLnRhZ3MpOwotCX0gZWxzZQotCQltLT5tX2RhdGEgPSBt
LT5tX2RhdDsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qIF9fVXNlcnNwYWNlX18gKi8KLXN0cnVj
dCBtYnVmICoKLW1fZ2V0KGludCBob3csIHNob3J0IHR5cGUpCi17Ci0Jc3RydWN0IG1idWYgKm1y
ZXQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0Jc3RydWN0IG1iX2FyZ3Mg
bWJ1Zl9tYl9hcmdzOwotCi0JLyogVGhlIGZvbGxvd2luZyBzZXR0ZXIgZnVuY3Rpb24gaXMgbm90
IHlldCBiZWluZyBlbmNsb3NlZCB3aXRoaW4KLQkgKiAjaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RP
UiAtICNlbmRpZiwgdW50aWwgSSBoYXZlIHRob3JvdWdobHkgdGVzdGVkCi0JICogbWJfZHRvcl9t
YnVmLiBTZWUgY29tbWVudCB0aGVyZQotCSAqLwotCW1idWZfbWJfYXJncy5mbGFncyA9IDA7Ci0J
bWJ1Zl9tYl9hcmdzLnR5cGUgPSB0eXBlOwotI2VuZGlmCi0JLyogTWJ1ZiBtYXN0ZXIgem9uZSwg
em9uZV9tYnVmLCBoYXMgYWxyZWFkeSBiZWVuCi0JICogY3JlYXRlZCBpbiBtYnVmX2luaXRpYWxp
emUoKSAqLwotCW1yZXQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfbWJ1Ziwgc3RydWN0IG1idWYpOwot
I2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotCW1iX2N0b3JfbWJ1ZihtcmV0LCAm
bWJ1Zl9tYl9hcmdzLCAwKTsKLSNlbmRpZgotCS8qbXJldCA9ICAoKHN0cnVjdCBtYnVmICopdW1l
bV9jYWNoZV9hbGxvYyh6b25lX21idWYsIFVNRU1fREVGQVVMVCkpOyovCi0KLQkvKiBUaGVyZSBh
cmUgY2FzZXMgd2hlbiBhbiBvYmplY3QgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IENQVSdzCi0J
ICogbG9hZGVkIG1hZ2F6aW5lIGFuZCBpbiB0aG9zZSBjYXNlcyB0aGUgb2JqZWN0J3MgY29uc3Ry
dWN0b3IgaXMgbm90IGFwcGxpZWQuCi0JICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhlbiB3ZSBh
cmUgZHVwbGljYXRpbmcgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gaGVyZSwKLQkgKiBzbyB0
aGF0IHRoZSBtYnVmIGlzIHByb3Blcmx5IGNvbnN0cnVjdGVkIGJlZm9yZSByZXR1cm5pbmcgaXQu
Ci0JICovCi0JaWYgKG1yZXQpIHsKLSNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCi0JCWlmICgh
IChtcmV0LT5tX3R5cGUgPT0gdHlwZSkgKSB7Ci0JCQltYnVmX2NvbnN0cnVjdG9yX2R1cChtcmV0
LCAwLCB0eXBlKTsKLQkJfQotI2Vsc2UKLQkJbWJ1Zl9jb25zdHJ1Y3Rvcl9kdXAobXJldCwgMCwg
dHlwZSk7Ci0jZW5kaWYKLQotCX0KLQlyZXR1cm4gbXJldDsKLX0KLQotCi0vKiBfX1VzZXJzcGFj
ZV9fICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX2dldGhkcihpbnQgaG93LCBzaG9ydCB0eXBlKQotewot
CXN0cnVjdCBtYnVmICptcmV0OwotI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQot
CXN0cnVjdCBtYl9hcmdzIG1idWZfbWJfYXJnczsKLQotCS8qIFRoZSBmb2xsb3dpbmcgc2V0dGVy
IGZ1bmN0aW9uIGlzIG5vdCB5ZXQgYmVpbmcgZW5jbG9zZWQgd2l0aGluCi0JICogI2lmIFVTSU5H
X01CVUZfQ09OU1RSVUNUT1IgLSAjZW5kaWYsIHVudGlsIEkgaGF2ZSB0aG9yb3VnaGx5IHRlc3Rl
ZAotCSAqIG1iX2R0b3JfbWJ1Zi4gU2VlIGNvbW1lbnQgdGhlcmUKLQkgKi8KLQltYnVmX21iX2Fy
Z3MuZmxhZ3MgPSBNX1BLVEhEUjsKLQltYnVmX21iX2FyZ3MudHlwZSA9IHR5cGU7Ci0jZW5kaWYK
LQltcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX21idWYsIHN0cnVjdCBtYnVmKTsKLSNpZiBkZWZp
bmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQltYl9jdG9yX21idWYobXJldCwgJm1idWZfbWJf
YXJncywgMCk7Ci0jZW5kaWYKLQkvKm1yZXQgPSAoKHN0cnVjdCBtYnVmICopdW1lbV9jYWNoZV9h
bGxvYyh6b25lX21idWYsIFVNRU1fREVGQVVMVCkpOyovCi0JLyogVGhlcmUgYXJlIGNhc2VzIHdo
ZW4gYW4gb2JqZWN0IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBDUFUncwotCSAqIGxvYWRlZCBt
YWdhemluZSBhbmQgaW4gdGhvc2UgY2FzZXMgdGhlIG9iamVjdCdzIGNvbnN0cnVjdG9yIGlzIG5v
dCBhcHBsaWVkLgotCSAqIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4gd2UgYXJlIGR1cGxpY2F0
aW5nIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uIGhlcmUsCi0JICogc28gdGhhdCB0aGUgbWJ1
ZiBpcyBwcm9wZXJseSBjb25zdHJ1Y3RlZCBiZWZvcmUgcmV0dXJuaW5nIGl0LgotCSAqLwotCWlm
IChtcmV0KSB7Ci0jaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RPUgotCQlpZiAoISAoKG1yZXQtPm1f
ZmxhZ3MgJiBNX1BLVEhEUikgJiYgKG1yZXQtPm1fdHlwZSA9PSB0eXBlKSkgKSB7Ci0JCQltYnVm
X2NvbnN0cnVjdG9yX2R1cChtcmV0LCBNX1BLVEhEUiwgdHlwZSk7Ci0JCX0KLSNlbHNlCi0JCW1i
dWZfY29uc3RydWN0b3JfZHVwKG1yZXQsIE1fUEtUSERSLCB0eXBlKTsKLSNlbmRpZgotCX0KLQly
ZXR1cm4gbXJldDsKLX0KLQotLyogX19Vc2Vyc3BhY2VfXyAqLwotc3RydWN0IG1idWYgKgotbV9m
cmVlKHN0cnVjdCBtYnVmICptKQotewotCi0Jc3RydWN0IG1idWYgKm4gPSBtLT5tX25leHQ7Ci0K
LQlpZiAobS0+bV9mbGFncyAmIE1fRVhUKQotCQltYl9mcmVlX2V4dChtKTsKLQllbHNlIGlmICgo
bS0+bV9mbGFncyAmIE1fTk9GUkVFKSA9PSAwKSB7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9B
TExPQ0FUT1IpCi0JCW1iX2R0b3JfbWJ1ZihtLCBOVUxMKTsKLSNlbmRpZgotCQlTQ1RQX1pPTkVf
RlJFRSh6b25lX21idWYsIG0pOwotCX0KLQkJLyp1bWVtX2NhY2hlX2ZyZWUoem9uZV9tYnVmLCBt
KTsqLwotCXJldHVybiAobik7Ci19Ci0KLQotc3RhdGljIGludCBjbHVzdF9jb25zdHJ1Y3Rvcl9k
dXAoY2FkZHJfdCBtX2NsdXN0LCBzdHJ1Y3QgbWJ1ZiogbSkKLXsKLQl1X2ludCAqcmVmY250Owot
CWludCB0eXBlLCBzaXplOwotCi0JLyogQXNzaWduaW5nIGNsdXN0ZXIgb2YgTUNMQllURVMuIFRP
RE86IEFkZCBqdW1ibyBmcmFtZSBmdW5jdGlvbmFsaXR5ICovCi0JdHlwZSA9IEVYVF9DTFVTVEVS
OwotCXNpemUgPSBNQ0xCWVRFUzsKLQotCXJlZmNudCA9IFNDVFBfWk9ORV9HRVQoem9uZV9leHRf
cmVmY250LCB1X2ludCk7Ci0JLypyZWZjbnQgPSAodV9pbnQgKil1bWVtX2NhY2hlX2FsbG9jKHpv
bmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLwotCWlmIChyZWZjbnQgPT0gTlVMTCkgewot
I2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQkJdW1lbV9yZWFwKCk7Ci0jZW5k
aWYKLQkJcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9yZWZjbnQsIHVfaW50KTsKLQkJ
LypyZWZjbnQgPSAodV9pbnQgKil1bWVtX2NhY2hlX2FsbG9jKHpvbmVfZXh0X3JlZmNudCwgVU1F
TV9ERUZBVUxUKTsqLwotCX0KLQkqcmVmY250ID0gMTsKLQlpZiAobSAhPSBOVUxMKSB7Ci0JCW0t
Pm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltX2NsdXN0OwotCQltLT5tX2RhdGEgPSBtLT5tX2V4
dC5leHRfYnVmOwotCQltLT5tX2ZsYWdzIHw9IE1fRVhUOwotCQltLT5tX2V4dC5leHRfZnJlZSA9
IE5VTEw7Ci0JCW0tPm1fZXh0LmV4dF9hcmdzID0gTlVMTDsKLQkJbS0+bV9leHQuZXh0X3NpemUg
PSBzaXplOwotCQltLT5tX2V4dC5leHRfdHlwZSA9IHR5cGU7Ci0JCW0tPm1fZXh0LnJlZl9jbnQg
PSByZWZjbnQ7Ci0JfSBlbHNlCi0JCVNDVFBfWk9ORV9GUkVFKHpvbmVfZXh0X3JlZmNudCwgcmVm
Y250KTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotCi0vKiBfX1VzZXJzcGFjZV9fICovCi12b2lk
Ci1tX2NsZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93KQotewotCWNhZGRyX3QgbWNsdXN0X3Jl
dDsKLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQlzdHJ1Y3QgY2x1c3RfYXJn
cyBjbHVzdF9tYl9hcmdzX2w7Ci0jZW5kaWYKLQlpZiAobS0+bV9mbGFncyAmIE1fRVhUKSB7Ci0J
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogJXAgbWJ1ZiBhbHJlYWR5IGhhcyBjbHVzdGVy
XG4iLCBfX2Z1bmNfXywgKHZvaWQgKiltKTsKLQl9Ci0JbS0+bV9leHQuZXh0X2J1ZiA9IChjaGFy
ICopTlVMTDsKLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQljbHVzdF9tYl9h
cmdzX2wucGFyZW50X21idWYgPSBtOwotI2VuZGlmCi0JbWNsdXN0X3JldCA9IFNDVFBfWk9ORV9H
RVQoem9uZV9jbHVzdCwgY2hhcik7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1Ip
Ci0JbWJfY3Rvcl9jbHVzdChtY2x1c3RfcmV0LCAmY2x1c3RfbWJfYXJnc19sLCAwKTsKLSNlbmRp
ZgotCS8qbWNsdXN0X3JldCA9IHVtZW1fY2FjaGVfYWxsb2Moem9uZV9jbHVzdCwgVU1FTV9ERUZB
VUxUKTsqLwotCS8qCi0JIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZhaWx1cmUsIGNhbGwgdW1l
bV9yZWFwKCkgYW5kIHJldHJ5LgotCSAqLwotCi0JaWYgKG1jbHVzdF9yZXQgPT0gTlVMTCkgewot
I2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQkvKgltY2x1c3RfcmV0ID0gU0NU
UF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKLQkJbWJfY3Rvcl9jbHVzdChtY2x1c3RfcmV0
LCAmY2x1c3RfbWJfYXJncywgMCk7Ci0jZWxzZSovCi0JCXVtZW1fcmVhcCgpOwotCQltY2x1c3Rf
cmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKLSNlbmRpZgotCQkvKm1jbHVz
dF9yZXQgPSB1bWVtX2NhY2hlX2FsbG9jKHpvbmVfY2x1c3QsIFVNRU1fREVGQVVMVCk7Ki8KLQkJ
aWYgKE5VTEwgPT0gbWNsdXN0X3JldCkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIk1l
bW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19fKTsKLQkJfQotCX0KLQot
I2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKLQlpZiAoKG0tPm1fZXh0LmV4dF9idWYgPT0gTlVM
TCkpIHsKLQkJY2x1c3RfY29uc3RydWN0b3JfZHVwKG1jbHVzdF9yZXQsIG0pOwotCX0KLSNlbHNl
Ci0JY2x1c3RfY29uc3RydWN0b3JfZHVwKG1jbHVzdF9yZXQsIG0pOwotI2VuZGlmCi19Ci0KLS8q
Ci0gKiBVbmxpbmsgYSB0YWcgZnJvbSB0aGUgbGlzdCBvZiB0YWdzIGFzc29jaWF0ZWQgd2l0aCBh
biBtYnVmLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotbV90YWdfdW5saW5rKHN0cnVjdCBt
YnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCi17Ci0KLQlTTElTVF9SRU1PVkUoJm0tPm1fcGt0aGRy
LnRhZ3MsIHQsIG1fdGFnLCBtX3RhZ19saW5rKTsKLX0KLQotLyoKLSAqIFJlY2xhaW0gcmVzb3Vy
Y2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRhZy4KLSAqLwotc3RhdGljIF9faW5saW5lIHZvaWQKLW1f
dGFnX2ZyZWUoc3RydWN0IG1fdGFnICp0KQotewotCi0JKCp0LT5tX3RhZ19mcmVlKSh0KTsKLX0K
LQotLyoKLSAqIFNldCB1cCB0aGUgY29udGVudHMgb2YgYSB0YWcuICBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBmaWxsIGluIHRoZSBmcmVlCi0gKiBtZXRob2Q7IHRoZSBjYWxsZXIgaXMgZXhwZWN0
ZWQgdG8gZG8gdGhhdC4KLSAqCi0gKiBYWFggcHJvYmFibHkgc2hvdWxkIGJlIGNhbGxlZCBtX3Rh
Z19pbml0LCBidXQgdGhhdCB3YXMgYWxyZWFkeSB0YWtlbi4KLSAqLwotc3RhdGljIF9faW5saW5l
IHZvaWQKLW1fdGFnX3NldHVwKHN0cnVjdCBtX3RhZyAqdCwgdV9pbnQzMl90IGNvb2tpZSwgaW50
IHR5cGUsIGludCBsZW4pCi17Ci0KLQl0LT5tX3RhZ19pZCA9IHR5cGU7Ci0JdC0+bV90YWdfbGVu
ID0gbGVuOwotCXQtPm1fdGFnX2Nvb2tpZSA9IGNvb2tpZTsKLX0KLQotLyoqKioqKioqKioqKiBF
bmQgZnVuY3Rpb25zIGZyb20gdXNlcl9tYnVmLmggICoqKioqKioqKioqKioqKioqKi8KLQotCi0K
LS8qKioqKioqKioqKiogRW5kIGZ1bmN0aW9ucyB0byBzdWJzdGl0dXRlIHVtZW1fY2FjaGVfYWxs
b2MgYW5kIHVtZW1fY2FjaGVfZnJlZSAqKioqKioqKioqKioqKi8KLQotdm9pZAotbWJ1Zl9pbml0
aWFsaXplKHZvaWQgKmR1bW15KQotewotCi0JLyoKLQkgKiBfX1VzZXJzcGFjZV9fQ29uZmlndXJl
IFVNQSB6b25lcyBmb3IgTWJ1ZnMgYW5kIENsdXN0ZXJzLgotCSAqIChUT0RPOiBtX2dldGNsKCkg
LSB1c2luZyBwYWNrZXQgc2Vjb25kYXJ5IHpvbmUpLgotCSAqIFRoZXJlIGlzIG5vIHByb3Zpc2lv
biBmb3IgdHJhc2hfaW5pdCBhbmQgdHJhc2hfZmluaSBpbiB1bWVtLgotCSAqCi0JICovCi0gLyog
em9uZV9tYnVmID0gdW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9NRU1fTkFNRSwgTVNJWkUsIDAsCi0J
CQkJbWJfY3Rvcl9tYnVmLCBtYl9kdG9yX21idWYsIE5VTEwsCi0JCQkJJm1idWZfbWJfYXJncywK
LQkJCQlOVUxMLCAwKTsKLQl6b25lX21idWYgPSB1bWVtX2NhY2hlX2NyZWF0ZShNQlVGX01FTV9O
QU1FLCBNU0laRSwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7Ki8KLSNpZiBk
ZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQlTQ1RQX1pPTkVfSU5JVCh6b25lX21idWYs
IE1CVUZfTUVNX05BTUUsIE1TSVpFLCAwKTsKLSNlbHNlCi0Jem9uZV9tYnVmID0gdW1lbV9jYWNo
ZV9jcmVhdGUoTUJVRl9NRU1fTkFNRSwgTVNJWkUsIDAsCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWJfY3Rvcl9tYnVmLCBtYl9kdG9yX21idWYsIE5VTEwsCi0JICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgTlVVTEwsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
TlVMTCwgMCk7Ci0jZW5kaWYKLQkvKnpvbmVfZXh0X3JlZmNudCA9IHVtZW1fY2FjaGVfY3JlYXRl
KE1CVUZfRVhUUkVGQ05UX01FTV9OQU1FLCBzaXplb2YodV9pbnQpLCAwLAotCQkJCU5VTEwsIE5V
TEwsIE5VTEwsCi0JCQkJTlVMTCwKLQkJCQlOVUxMLCAwKTsqLwotCVNDVFBfWk9ORV9JTklUKHpv
bmVfZXh0X3JlZmNudCwgTUJVRl9FWFRSRUZDTlRfTUVNX05BTUUsIHNpemVvZih1X2ludCksIDAp
OwotCi0gIC8qem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xVU1RFUl9NRU1f
TkFNRSwgTUNMQllURVMsIDAsCi0JCQkJIG1iX2N0b3JfY2x1c3QsIG1iX2R0b3JfY2x1c3QsIE5V
TEwsCi0JCQkJICZjbHVzdF9tYl9hcmdzLAotCQkJCSBOVUxMLCAwKTsKLQl6b25lX2NsdXN0ID0g
dW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9DTFVTVEVSX01FTV9OQU1FLCBNQ0xCWVRFUywgMCwgTlVM
TCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwwKTsqLwotI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVf
QUxMT0NBVE9SKQotCVNDVFBfWk9ORV9JTklUKHpvbmVfY2x1c3QsIE1CVUZfQ0xVU1RFUl9NRU1f
TkFNRSwgTUNMQllURVMsIDApOwotI2Vsc2UKLQl6b25lX2NsdXN0ID0gdW1lbV9jYWNoZV9jcmVh
dGUoTUJVRl9DTFVTVEVSX01FTV9OQU1FLCBNQ0xCWVRFUywgMCwKLQkJCQkJCQkJICAgbWJfY3Rv
cl9jbHVzdCwgbWJfZHRvcl9jbHVzdCwgTlVMTCwKLQkJCQkJCQkJICAgJmNsdXN0X21iX2FyZ3Ms
Ci0JCQkJCQkJCSAgIE5VTEwsIDApOwotI2VuZGlmCi0KLQkvKiB1bWFfcHJlYWxsb2MoKSBnb2Vz
IGhlcmUuLi4gKi8KLQotCS8qIF9fVXNlcnNwYWNlX18gQWRkIHVtZW1fcmVhcCBoZXJlIGZvciBs
b3cgbWVtb3J5IHNpdHVhdGlvbj8KLQkgKgotCSAqLwotCi0KLQkvKgotCSAqIFtSZV1zZXQgY291
bnRlcnMgYW5kIGxvY2FsIHN0YXRpc3RpY3Mga25vYnMuCi0JICoKLQkgKi8KLQotCW1ic3RhdC5t
X21idWZzID0gMDsKLQltYnN0YXQubV9tY2x1c3RzID0gMDsKLQltYnN0YXQubV9kcmFpbiA9IDA7
Ci0JbWJzdGF0Lm1fbXNpemUgPSBNU0laRTsKLQltYnN0YXQubV9tY2xieXRlcyA9IE1DTEJZVEVT
OwotCW1ic3RhdC5tX21pbmNsc2l6ZSA9IE1JTkNMU0laRTsKLQltYnN0YXQubV9tbGVuID0gTUxF
TjsKLQltYnN0YXQubV9taGxlbiA9IE1ITEVOOwotCW1ic3RhdC5tX251bXR5cGVzID0gTVRfTlRZ
UEVTOwotCi0JbWJzdGF0Lm1fbWNmYWlsID0gbWJzdGF0Lm1fbXBmYWlsID0gMDsKLQltYnN0YXQu
c2ZfaW9jbnQgPSAwOwotCW1ic3RhdC5zZl9hbGxvY3dhaXQgPSBtYnN0YXQuc2ZfYWxsb2NmYWls
ID0gMDsKLQotfQotCi0KLQotLyoKLSAqIF9fVXNlcnNwYWNlX18KLSAqCi0gKiBDb25zdHJ1Y3Rv
ciBmb3IgTWJ1ZiBtYXN0ZXIgem9uZS4gV2UgaGF2ZSBhIGRpZmZlcmVudCBjb25zdHJ1Y3Rvcgot
ICogZm9yIGFsbG9jYXRpbmcgdGhlIGNsdXN0ZXIuCi0gKgotICogVGhlICdhcmcnIHBvaW50ZXIg
cG9pbnRzIHRvIGEgbWJfYXJncyBzdHJ1Y3R1cmUgd2hpY2gKLSAqIGNvbnRhaW5zIGNhbGwtc3Bl
Y2lmaWMgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUKLSAqIG1idWYgYWxsb2Nh
dGlvbiBBUEkuICBTZWUgdXNlcl9tYnVmLmguCi0gKgotICogVGhlIGZsZ3MgcGFyYW1ldGVyIGJl
bG93IGNhbiBiZSBVTUVNX0RFRkFVTFQgb3IgVU1FTV9OT0ZBSUwgZGVwZW5kaW5nIG9uIHdoYXQK
LSAqIHdhcyBwYXNzZWQgd2hlbiB1bWVtX2NhY2hlX2FsbG9jIHdhcyBjYWxsZWQuCi0gKiBUT0RP
OiBVc2UgVU1FTV9OT0ZBSUwgaW4gdW1lbV9jYWNoZV9hbGxvYyBhbmQgYWxzbyBkZWZpbmUgYSBm
YWlsdXJlIGhhbmRsZXIKLSAqIGFuZCBjYWxsIHVtZW1fbm9mYWlsX2NhbGxiYWNrKG15X2ZhaWx1
cmVfaGFuZGxlcikgaW4gdGhlIHN0YWNrIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzCi0gKiBUaGUg
YWR2YW50YWdlIG9mIHVzaW5nIFVNRU1fTk9GQUlMIGlzIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBj
aGVjayBpZiB1bWVtX2NhY2hlX2FsbG9jCi0gKiB3YXMgc3VjY2Vzc2Z1bCBvciBub3QuIFRoZSBm
YWlsdXJlIGhhbmRsZXIgd291bGQgdGFrZSBjYXJlIG9mIGl0LCBpZiB3ZSB1c2UgdGhlIFVNRU1f
Tk9GQUlMCi0gKiBmbGFnLgotICoKLSAqIE5PVEUgUmVmOiBodHRwOi8vZG9jcy5zdW4uY29tL2Fw
cC9kb2NzL2RvYy84MTktMjI0My82bjRpMDk5cDI/bD1lbiZhPXZpZXcmcT11bWVtX3phbGxvYykK
LSAqIFRoZSB1bWVtX25vZmFpbF9jYWxsYmFjaygpIGZ1bmN0aW9uIHNldHMgdGhlICoqcHJvY2Vz
cy13aWRlKiogVU1FTV9OT0ZBSUwgY2FsbGJhY2suCi0gKiBJdCBhbHNvIG1lbnRpb25zIHRoYXQg
dW1lbV9ub2ZhaWxfY2FsbGJhY2sgaXMgRXZvbHZpbmcuCi0gKgotICovCi1zdGF0aWMgaW50Ci1t
Yl9jdG9yX21idWYodm9pZCAqbWVtLCB2b2lkICphcmcsIGludCBmbGdzKQotewotI2lmIFVTSU5H
X01CVUZfQ09OU1RSVUNUT1IKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3QgbWJfYXJncyAqYXJn
czsKLQotCWludCBmbGFnczsKLQlzaG9ydCB0eXBlOwotCi0JbSA9IChzdHJ1Y3QgbWJ1ZiAqKW1l
bTsKLQlhcmdzID0gKHN0cnVjdCBtYl9hcmdzICopYXJnOwotCWZsYWdzID0gYXJncy0+ZmxhZ3M7
Ci0JdHlwZSA9IGFyZ3MtPnR5cGU7Ci0KLQkvKgotCSAqIFRoZSBtYnVmIGlzIGluaXRpYWxpemVk
IGxhdGVyLgotCSAqCi0JICovCi0JaWYgKHR5cGUgPT0gTVRfTk9JTklUKQotCQlyZXR1cm4gKDAp
OwotCi0JbS0+bV9uZXh0ID0gTlVMTDsKLQltLT5tX25leHRwa3QgPSBOVUxMOwotCW0tPm1fbGVu
ID0gMDsKLQltLT5tX2ZsYWdzID0gZmxhZ3M7Ci0JbS0+bV90eXBlID0gdHlwZTsKLQlpZiAoZmxh
Z3MgJiBNX1BLVEhEUikgewotCQltLT5tX2RhdGEgPSBtLT5tX3BrdGRhdDsKLQkJbS0+bV9wa3Ro
ZHIucmN2aWYgPSBOVUxMOwotCQltLT5tX3BrdGhkci5sZW4gPSAwOwotCQltLT5tX3BrdGhkci5o
ZWFkZXIgPSBOVUxMOwotCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKLQkJbS0+bV9wa3Ro
ZHIuY3N1bV9kYXRhID0gMDsKLQkJbS0+bV9wa3RoZHIudHNvX3NlZ3N6ID0gMDsKLQkJbS0+bV9w
a3RoZHIuZXRoZXJfdnRhZyA9IDA7Ci0JCVNMSVNUX0lOSVQoJm0tPm1fcGt0aGRyLnRhZ3MpOwot
CX0gZWxzZQotCQltLT5tX2RhdGEgPSBtLT5tX2RhdDsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19
Ci0KLQotLyoKLSAqIF9fVXNlcnNwYWNlX18KLSAqIFRoZSBNYnVmIG1hc3RlciB6b25lIGRlc3Ry
dWN0b3IuCi0gKiBUaGlzIHdvdWxkIGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byB1bWVtX2NhY2hl
X2Rlc3Ryb3kKLSAqIFRPRE86IFJlY2hlY2sgaWYgdGhpcyBpcyB3aGF0IHdlIHdhbnQgdG8gZG8g
aW4gdGhpcyBkZXN0cnVjdG9yLgotICogKE5vdGU6IHRoZSBudW1iZXIgb2YgdGltZXMgbWJfZHRv
cl9tYnVmIGlzIGNhbGxlZCBpcyBlcXVhbCB0byB0aGUKLSAqIG51bWJlciBvZiBpbmRpdmlkdWFs
IG1idWZzIGFsbG9jYXRlZCBmcm9tIHpvbmVfbWJ1Zi4KLSAqLwotc3RhdGljIHZvaWQKLW1iX2R0
b3JfbWJ1Zih2b2lkICptZW0sIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQotCW0g
PSAoc3RydWN0IG1idWYgKiltZW07Ci0JaWYgKChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpICE9IDAp
IHsKLQkJbV90YWdfZGVsZXRlX2NoYWluKG0sIE5VTEwpOwotCX0KLX0KLQotCi0vKiBfX1VzZXJz
cGFjZV9fCi0gKiBUaGUgQ2x1c3RlciB6b25lIGNvbnN0cnVjdG9yLgotICoKLSAqIEhlcmUgdGhl
ICdhcmcnIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBNYnVmIHdoaWNoIHdlCi0gKiBhcmUgY29uZmln
dXJpbmcgY2x1c3RlciBzdG9yYWdlIGZvci4gIElmICdhcmcnIGlzCi0gKiBlbXB0eSB3ZSBhbGxv
Y2F0ZSBqdXN0IHRoZSBjbHVzdGVyIHdpdGhvdXQgc2V0dGluZwotICogdGhlIG1idWYgdG8gaXQu
ICBTZWUgbWJ1Zi5oLgotICovCi1zdGF0aWMgaW50Ci1tYl9jdG9yX2NsdXN0KHZvaWQgKm1lbSwg
dm9pZCAqYXJnLCBpbnQgZmxncykKLXsKLQotI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKLQlz
dHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3QgY2x1c3RfYXJncyAqIGNsYTsKLQl1X2ludCAqcmVmY250
OwotCWludCB0eXBlLCBzaXplOwotCXNjdHBfem9uZV90IHpvbmU7Ci0KLQkvKiBBc3NpZ25pbmcg
Y2x1c3RlciBvZiBNQ0xCWVRFUy4gVE9ETzogQWRkIGp1bWJvIGZyYW1lIGZ1bmN0aW9uYWxpdHkg
Ki8KLQl0eXBlID0gRVhUX0NMVVNURVI7Ci0Jem9uZSA9IHpvbmVfY2x1c3Q7Ci0Jc2l6ZSA9IE1D
TEJZVEVTOwotCi0JY2xhID0gKHN0cnVjdCBjbHVzdF9hcmdzICopYXJnOwotCW0gPSBjbGEtPnBh
cmVudF9tYnVmOwotCi0JcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9yZWZjbnQsIHVf
aW50KTsKLQkvKnJlZmNudCA9ICh1X2ludCAqKXVtZW1fY2FjaGVfYWxsb2Moem9uZV9leHRfcmVm
Y250LCBVTUVNX0RFRkFVTFQpOyovCi0JKnJlZmNudCA9IDE7Ci0KLQlpZiAobSAhPSBOVUxMKSB7
Ci0JCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltZW07Ci0JCW0tPm1fZGF0YSA9IG0tPm1f
ZXh0LmV4dF9idWY7Ci0JCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7Ci0JCW0tPm1fZXh0LmV4dF9mcmVl
ID0gTlVMTDsKLQkJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOwotCQltLT5tX2V4dC5leHRfc2l6
ZSA9IHNpemU7Ci0JCW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKLQkJbS0+bV9leHQucmVmX2Nu
dCA9IHJlZmNudDsKLQl9IGVsc2UKLQkJU0NUUF9aT05FX0ZSRUUoem9uZV9leHRfcmVmY250LCBy
ZWZjbnQpOwotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0KLQotLyogX19Vc2Vyc3BhY2VfXyAqLwot
c3RhdGljIHZvaWQKLW1iX2R0b3JfY2x1c3Qodm9pZCAqbWVtLCB2b2lkICphcmcpCi17Ci0KLSAg
LyogbWVtIGlzIG9mIHR5cGUgY2FkZHJfdC4gIEluIHN5cy90eXBlcy5oIHdlIGhhdmUgdHlwZWRl
ZiBjaGFyICogY2FkZHJfdDsgICovCi0gIC8qIG1iX2R0b3JfY2x1c3QgaXMgY2FsbGVkIGF0IHRp
bWUgb2YgdW1lbV9jYWNoZV9kZXN0cm95KCkgKHRoZSBudW1iZXIgb2YgdGltZXMKLSAgICogbWJf
ZHRvcl9jbHVzdCBpcyBjYWxsZWQgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBpbmRpdmlkdWFs
IG1idWZzIGFsbG9jYXRlZAotICAgKiBmcm9tIHpvbmVfY2x1c3QuIFNpbWlsYXJseSBmb3IgbWJf
ZHRvcl9tYnVmKS4KLSAgICogQXQgdGhpcyBwb2ludCB0aGUgZm9sbG93aW5nOgotICAgKiAgc3Ry
dWN0IG1idWYgKm07Ci0gICAqICAgbSA9IChzdHJ1Y3QgbWJ1ZiAqKWFyZzsKLSAgICogIGFzc2Vy
dCAoKihtLT5tX2V4dC5yZWZfY250KSA9PSAwKTsgaXMgbm90IG1lYW5pbmdmdWwgc2luY2UgIG0t
Pm1fZXh0LnJlZl9jbnQgPSBOVUxMOwotICAgKiAgaGFzIGJlZW4gZG9uZSBpbiBtYl9mcmVlX2V4
dCgpLgotICAgKi8KLQotfQotCi0KLQotCi0vKiBVbmxpbmsgYW5kIGZyZWUgYSBwYWNrZXQgdGFn
LiAqLwotdm9pZAotbV90YWdfZGVsZXRlKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQp
Ci17Ci0JS0FTU0VSVChtICYmIHQsICgibV90YWdfZGVsZXRlOiBudWxsIGFyZ3VtZW50LCBtICVw
IHQgJXAiLCAodm9pZCAqKW0sICh2b2lkICopdCkpOwotCW1fdGFnX3VubGluayhtLCB0KTsKLQlt
X3RhZ19mcmVlKHQpOwotfQotCi0KLS8qIFVubGluayBhbmQgZnJlZSBhIHBhY2tldCB0YWcgY2hh
aW4sIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gdGFnLiAqLwotdm9pZAotbV90YWdfZGVsZXRlX2NoYWlu
KHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCi17Ci0KLQlzdHJ1Y3QgbV90YWcgKnAs
ICpxOwotCi0JS0FTU0VSVChtLCAoIm1fdGFnX2RlbGV0ZV9jaGFpbjogbnVsbCBtYnVmIikpOwot
CWlmICh0ICE9IE5VTEwpCi0JCXAgPSB0OwotCWVsc2UKLQkJcCA9IFNMSVNUX0ZJUlNUKCZtLT5t
X3BrdGhkci50YWdzKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm47Ci0Jd2hpbGUgKChxID0g
U0xJU1RfTkVYVChwLCBtX3RhZ19saW5rKSkgIT0gTlVMTCkKLQkJbV90YWdfZGVsZXRlKG0sIHEp
OwotCW1fdGFnX2RlbGV0ZShtLCBwKTsKLX0KLQotI2lmIDAKLXN0YXRpYyB2b2lkCi1zY3RwX3By
aW50X21idWZfY2hhaW4oc3RydWN0IG1idWYgKm0pCi17Ci0JU0NUUF9ERUJVR19VU1IoU0NUUF9E
RUJVR19VU1IsICJQcmludGluZyBtYnVmIGNoYWluICVwLlxuIiwgKHZvaWQgKiltKTsKLQlmb3Io
OyBtOyBtPW0tPm1fbmV4dCkgewotCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiVw
OiBtX2xlbiA9ICVsZCwgbV90eXBlID0gJXgsIG1fbmV4dCA9ICVwLlxuIiwgKHZvaWQgKiltLCBt
LT5tX2xlbiwgbS0+bV90eXBlLCAodm9pZCAqKW0tPm1fbmV4dCk7Ci0JCWlmIChtLT5tX2ZsYWdz
ICYgTV9FWFQpCi0JCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiVwOiBleHRlbmRf
c2l6ZSA9ICVkLCBleHRlbmRfYnVmZmVyID0gJXAsIHJlZl9jbnQgPSAlZC5cbiIsICh2b2lkICop
bSwgbS0+bV9leHQuZXh0X3NpemUsICh2b2lkICopbS0+bV9leHQuZXh0X2J1ZiwgKihtLT5tX2V4
dC5yZWZfY250KSk7Ci0JfQotfQotI2VuZGlmCi0KLS8qCi0gKiBGcmVlIGFuIGVudGlyZSBjaGFp
biBvZiBtYnVmcyBhbmQgYXNzb2NpYXRlZCBleHRlcm5hbCBidWZmZXJzLCBpZgotICogYXBwbGlj
YWJsZS4KLSAqLwotdm9pZAotbV9mcmVlbShzdHJ1Y3QgbWJ1ZiAqbWIpCi17Ci0Jd2hpbGUgKG1i
ICE9IE5VTEwpCi0JCW1iID0gbV9mcmVlKG1iKTsKLX0KLQotLyoKLSAqIF9fVXNlcnNwYWNlX18K
LSAqIGNsZWFuIG1idWZzIHdpdGggTV9FWFQgc3RvcmFnZSBhdHRhY2hlZCB0byB0aGVtCi0gKiBp
ZiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgMS4KLSAqLwotdm9pZAotbWJfZnJlZV9leHQoc3Ry
dWN0IG1idWYgKm0pCi17Ci0KLQlpbnQgc2tpcG1idWY7Ci0KLQlLQVNTRVJUKChtLT5tX2ZsYWdz
ICYgTV9FWFQpID09IE1fRVhULCAoIiVzOiBNX0VYVCBub3Qgc2V0IiwgX19mdW5jX18pKTsKLQlL
QVNTRVJUKG0tPm1fZXh0LnJlZl9jbnQgIT0gTlVMTCwgKCIlczogcmVmX2NudCBub3Qgc2V0Iiwg
X19mdW5jX18pKTsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlIGhlYWRlciBpcyBlbWJlZGRlZCBp
biB0aGUgY2x1c3RlcgotCSAqLwotCXNraXBtYnVmID0gKG0tPm1fZmxhZ3MgJiBNX05PRlJFRSk7
Ci0KLQkvKiBGcmVlIHRoZSBleHRlcm5hbCBhdHRhY2hlZCBzdG9yYWdlIGlmIHRoaXMKLQkgKiBt
YnVmIGlzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdC4KLQkgKl9fVXNlcnNwYWNlX18gVE9ETzog
anVtYm8gZnJhbWVzCi0JICoKLQkqLwotCS8qIE5PVEU6IFdlIGhhZCB0aGUgc2FtZSBjb2RlIHRo
YXQgU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UCi0JICAgICAgICAgcmVkdWNlcyB0
byBoZXJlIGJlZm9yZSBidXQgdGhlIElQSE9ORSBtYWxsb2MgY29tbWl0IGhhZCBjaGFuZ2VkCi0J
ICAgICAgICAgdGhpcyB0byBjb21wYXJlIHRvIDAgaW5zdGVhZCBvZiAxIChzZWUgbmV4dCBsaW5l
KS4gIFdoeT8KLQkgICAgICAgIC4gLi4gdGhpcyBjYXVzZWQgYSBodWdlIG1lbW9yeSBsZWFrIGlu
IExpbnV4LgotCSovCi0jaWZkZWYgSVBIT05FCi0JaWYgKGF0b21pY19mZXRjaGFkZF9pbnQobS0+
bV9leHQucmVmX2NudCwgLTEpID09IDApCi0jZWxzZQotCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRf
Q0hFQ0tfUkVGQ09VTlQobS0+bV9leHQucmVmX2NudCkpCi0jZW5kaWYKLQl7Ci0JCWlmIChtLT5t
X2V4dC5leHRfdHlwZSA9PSBFWFRfQ0xVU1RFUil7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9B
TExPQ0FUT1IpCi0JCQltYl9kdG9yX2NsdXN0KG0tPm1fZXh0LmV4dF9idWYsICZjbHVzdF9tYl9h
cmdzKTsKLSNlbmRpZgotCQkJU0NUUF9aT05FX0ZSRUUoem9uZV9jbHVzdCwgbS0+bV9leHQuZXh0
X2J1Zik7Ci0JCQlTQ1RQX1pPTkVfRlJFRSh6b25lX2V4dF9yZWZjbnQsICh1X2ludCopbS0+bV9l
eHQucmVmX2NudCk7Ci0JCQltLT5tX2V4dC5yZWZfY250ID0gTlVMTDsKLQkJfQotCX0KLQotCWlm
IChza2lwbWJ1ZikKLQkJcmV0dXJuOwotCi0KLQkvKiBfX1VzZXJzcGFjZV9fIEFsc28gZnJlZWlu
ZyB0aGUgc3RvcmFnZSBmb3IgcmVmX2NudAotCSAqIEZyZWUgdGhpcyBtYnVmIGJhY2sgdG8gdGhl
IG1idWYgem9uZSB3aXRoIGFsbCBtX2V4dAotCSAqIGluZm9ybWF0aW9uIHB1cmdlZC4KLQkgKi8K
LQltLT5tX2V4dC5leHRfYnVmID0gTlVMTDsKLQltLT5tX2V4dC5leHRfZnJlZSA9IE5VTEw7Ci0J
bS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOwotCW0tPm1fZXh0LnJlZl9jbnQgPSBOVUxMOwotCW0t
Pm1fZXh0LmV4dF9zaXplID0gMDsKLQltLT5tX2V4dC5leHRfdHlwZSA9IDA7Ci0JbS0+bV9mbGFn
cyAmPSB+TV9FWFQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0JbWJfZHRv
cl9tYnVmKG0sIE5VTEwpOwotI2VuZGlmCi0JU0NUUF9aT05FX0ZSRUUoem9uZV9tYnVmLCBtKTsK
LQotCS8qdW1lbV9jYWNoZV9mcmVlKHpvbmVfbWJ1ZiwgbSk7Ki8KLX0KLQotLyoKLSAqICJNb3Zl
IiBtYnVmIHBrdGhkciBmcm9tICJmcm9tIiB0byAidG8iLgotICogImZyb20iIG11c3QgaGF2ZSBN
X1BLVEhEUiBzZXQsIGFuZCAidG8iIG11c3QgYmUgZW1wdHkuCi0gKi8KLXZvaWQKLW1fbW92ZV9w
a3RoZHIoc3RydWN0IG1idWYgKnRvLCBzdHJ1Y3QgbWJ1ZiAqZnJvbSkKLXsKLQotCXRvLT5tX2Zs
YWdzID0gKGZyb20tPm1fZmxhZ3MgJiBNX0NPUFlGTEFHUykgfCAodG8tPm1fZmxhZ3MgJiBNX0VY
VCk7Ci0JaWYgKCh0by0+bV9mbGFncyAmIE1fRVhUKSA9PSAwKQotCQl0by0+bV9kYXRhID0gdG8t
Pm1fcGt0ZGF0OwotCXRvLT5tX3BrdGhkciA9IGZyb20tPm1fcGt0aGRyOwkJLyogZXNwZWNpYWxs
eSB0YWdzICovCi0JU0xJU1RfSU5JVCgmZnJvbS0+bV9wa3RoZHIudGFncyk7CS8qIHB1cmdlIHRh
Z3MgZnJvbSBzcmMgKi8KLQlmcm9tLT5tX2ZsYWdzICY9IH5NX1BLVEhEUjsKLX0KLQotCi0vKgot
ICogUmVhcmFuZ2UgYW4gbWJ1ZiBjaGFpbiBzbyB0aGF0IGxlbiBieXRlcyBhcmUgY29udGlndW91
cwotICogYW5kIGluIHRoZSBkYXRhIGFyZWEgb2YgYW4gbWJ1ZiAoc28gdGhhdCBtdG9kIGFuZCBk
dG9tCi0gKiB3aWxsIHdvcmsgZm9yIGEgc3RydWN0dXJlIG9mIHNpemUgbGVuKS4gIFJldHVybnMg
dGhlIHJlc3VsdGluZwotICogbWJ1ZiBjaGFpbiBvbiBzdWNjZXNzLCBmcmVlcyBpdCBhbmQgcmV0
dXJucyBudWxsIG9uIGZhaWx1cmUuCi0gKiBJZiB0aGVyZSBpcyByb29tLCBpdCB3aWxsIGFkZCB1
cCB0byBtYXhfcHJvdG9oZHItbGVuIGV4dHJhIGJ5dGVzIHRvIHRoZQotICogY29udGlndW91cyBy
ZWdpb24gaW4gYW4gYXR0ZW1wdCB0byBhdm9pZCBiZWluZyBjYWxsZWQgbmV4dCB0aW1lLgotICov
Ci1zdHJ1Y3QgbWJ1ZiAqCi1tX3B1bGx1cChzdHJ1Y3QgbWJ1ZiAqbiwgaW50IGxlbikKLXsKLQlz
dHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgY291bnQ7Ci0JaW50IHNwYWNlOwotCi0JLyoKLQkgKiBJZiBm
aXJzdCBtYnVmIGhhcyBubyBjbHVzdGVyLCBhbmQgaGFzIHJvb20gZm9yIGxlbiBieXRlcwotCSAq
IHdpdGhvdXQgc2hpZnRpbmcgY3VycmVudCBkYXRhLCBwdWxsdXAgaW50byBpdCwKLQkgKiBvdGhl
cndpc2UgYWxsb2NhdGUgYSBuZXcgbWJ1ZiB0byBwcmVwZW5kIHRvIHRoZSBjaGFpbi4KLQkgKi8K
LQlpZiAoKG4tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCAmJgotCSAgICBuLT5tX2RhdGEgKyBsZW4g
PCAmbi0+bV9kYXRbTUxFTl0gJiYgbi0+bV9uZXh0KSB7Ci0JCWlmIChuLT5tX2xlbiA+PSBsZW4p
Ci0JCQlyZXR1cm4gKG4pOwotCQltID0gbjsKLQkJbiA9IG4tPm1fbmV4dDsKLQkJbGVuIC09IG0t
Pm1fbGVuOwotCX0gZWxzZSB7Ci0JCWlmIChsZW4gPiBNSExFTikKLQkJCWdvdG8gYmFkOwotCQlN
R0VUKG0sIE1fTk9XQUlULCBuLT5tX3R5cGUpOwotCQlpZiAobSA9PSBOVUxMKQotCQkJZ290byBi
YWQ7Ci0JCW0tPm1fbGVuID0gMDsKLQkJaWYgKG4tPm1fZmxhZ3MgJiBNX1BLVEhEUikKLQkJCU1f
TU9WRV9QS1RIRFIobSwgbik7Ci0JfQotCXNwYWNlID0gKGludCkoJm0tPm1fZGF0W01MRU5dIC0g
KG0tPm1fZGF0YSArIG0tPm1fbGVuKSk7Ci0JZG8gewotCQljb3VudCA9IG1pbihtaW4obWF4KGxl
biwgbWF4X3Byb3RvaGRyKSwgc3BhY2UpLCBuLT5tX2xlbik7Ci0JCW1lbWNweShtdG9kKG0sIGNh
ZGRyX3QpICsgbS0+bV9sZW4sbXRvZChuLCBjYWRkcl90KSwgKHVfaW50KWNvdW50KTsKLQkJbGVu
IC09IGNvdW50OwotCQltLT5tX2xlbiArPSBjb3VudDsKLQkJbi0+bV9sZW4gLT0gY291bnQ7Ci0J
CXNwYWNlIC09IGNvdW50OwotCQlpZiAobi0+bV9sZW4pCi0JCQluLT5tX2RhdGEgKz0gY291bnQ7
Ci0JCWVsc2UKLQkJCW4gPSBtX2ZyZWUobik7Ci0JfSB3aGlsZSAobGVuID4gMCAmJiBuKTsKLQlp
ZiAobGVuID4gMCkgewotCQkodm9pZCkgbV9mcmVlKG0pOwotCQlnb3RvIGJhZDsKLQl9Ci0JbS0+
bV9uZXh0ID0gbjsKLQlyZXR1cm4gKG0pOwotYmFkOgotCW1fZnJlZW0obik7Ci0JbWJzdGF0Lm1f
bXBmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVuY3kuICovCi0JcmV0dXJuIChOVUxMKTsKLX0K
LQotCi1zdGF0aWMgc3RydWN0IG1idWYgKgotbV9kdXAxKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zm
LCBpbnQgbGVuLCBpbnQgd2FpdCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbiA9IE5VTEw7Ci0JaW50IGNv
cHloZHI7Ci0KLQlpZiAobGVuID4gTUNMQllURVMpCi0JCXJldHVybiBOVUxMOwotCWlmIChvZmYg
PT0gMCAmJiAobS0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwKQotCQljb3B5aGRyID0gMTsKLQll
bHNlCi0JCWNvcHloZHIgPSAwOwotCWlmIChsZW4gPj0gTUlOQ0xTSVpFKSB7Ci0JCWlmIChjb3B5
aGRyID09IDEpIHsKLQkJCW1fY2xnZXQobiwgd2FpdCk7IC8qIFRPRE86IGluY2x1ZGUgY29kZSBm
b3IgY29weWluZyB0aGUgaGVhZGVyICovCi0JCQltX2R1cF9wa3RoZHIobiwgbSwgd2FpdCk7Ci0J
CX0gZWxzZQotCQkJbV9jbGdldChuLCB3YWl0KTsKLQl9IGVsc2UgewotCQlpZiAoY29weWhkciA9
PSAxKQotCQkJbiA9IG1fZ2V0aGRyKHdhaXQsIG0tPm1fdHlwZSk7Ci0JCWVsc2UKLQkJCW4gPSBt
X2dldCh3YWl0LCBtLT5tX3R5cGUpOwotCX0KLQlpZiAoIW4pCi0JCXJldHVybiBOVUxMOyAvKiBF
Tk9CVUZTICovCi0KLQlpZiAoY29weWhkciAmJiAhbV9kdXBfcGt0aGRyKG4sIG0sIHdhaXQpKSB7
Ci0JCW1fZnJlZShuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW1fY29weWRhdGEobSwgb2ZmLCBs
ZW4sIG10b2QobiwgY2FkZHJfdCkpOwotCW4tPm1fbGVuID0gbGVuOwotCXJldHVybiBuOwotfQot
Ci0KLS8qIFRha2VuIGZyb20gc3lzL2tlcm4vdWlwY19tYnVmMi5jICovCi1zdHJ1Y3QgbWJ1ZiAq
Ci1tX3B1bGxkb3duKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgKm9mZnAp
Ci17Ci0Jc3RydWN0IG1idWYgKm4sICpvOwotCWludCBobGVuLCB0bGVuLCBvbGVuOwotCWludCB3
cml0YWJsZTsKLQotCS8qIGNoZWNrIGludmFsaWQgYXJndW1lbnRzLiAqLwotCUtBU1NFUlQobSwg
KCJtID09IE5VTEwgaW4gbV9wdWxsZG93bigpIikpOwotCWlmIChsZW4gPiBNQ0xCWVRFUykgewot
CQltX2ZyZWVtKG0pOwotCQlyZXR1cm4gTlVMTDsgICAgLyogaW1wb3NzaWJsZSAqLwotCX0KLQot
I2lmZGVmIFBVTExET1dOX0RFQlVHCi0JewotCQlzdHJ1Y3QgbWJ1ZiAqdDsKLQkJU0NUUF9ERUJV
R19VU1IoU0NUUF9ERUJVR19VU1IsICJiZWZvcmU6Iik7Ci0JCWZvciAodCA9IG07IHQ7IHQgPSB0
LT5tX25leHQpCi0JCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiAlZCIsIHQtPm1f
bGVuKTsKLQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJcbiIpOwotCX0KLSNlbmRp
ZgotCW4gPSBtOwotCXdoaWxlIChuICE9IE5VTEwgJiYgb2ZmID4gMCkgewotCQlpZiAobi0+bV9s
ZW4gPiBvZmYpCi0JCQlicmVhazsKLQkJb2ZmIC09IG4tPm1fbGVuOwotCQluID0gbi0+bV9uZXh0
OwotCX0KLQkvKiBiZSBzdXJlIHRvIHBvaW50IG5vbi1lbXB0eSBtYnVmICovCi0Jd2hpbGUgKG4g
IT0gTlVMTCAmJiBuLT5tX2xlbiA9PSAwKQotCQluID0gbi0+bV9uZXh0OwotCWlmICghbikgewot
CQltX2ZyZWVtKG0pOwotCQlyZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBjaGFpbiB0b28gc2hvcnQg
Ki8KLQl9Ci0KLQl3cml0YWJsZSA9IDA7Ci0JaWYgKChuLT5tX2ZsYWdzICYgTV9FWFQpID09IDAg
fHwKLQkgICAgKG4tPm1fZXh0LmV4dF90eXBlID09IEVYVF9DTFVTVEVSICYmIE1fV1JJVEFCTEUo
bikpKQotCQl3cml0YWJsZSA9IDE7Ci0KLQkvKgotCSAqIHRoZSB0YXJnZXQgZGF0YSBpcyBvbiA8
biwgb2ZmPi4KLQkgKiBpZiB3ZSBnb3QgZW5vdWdoIGRhdGEgb24gdGhlIG1idWYgIm4iLCB3ZSdy
ZSBkb25lLgotCSAqLwotCWlmICgob2ZmID09IDAgfHwgb2ZmcCkgJiYgbGVuIDw9IG4tPm1fbGVu
IC0gb2ZmICYmIHdyaXRhYmxlKQotCQlnb3RvIG9rOwotCi0JLyoKLQkgKiB3aGVuIGxlbiA8PSBu
LT5tX2xlbiAtIG9mZiBhbmQgb2ZmICE9IDAsIGl0IGlzIGEgc3BlY2lhbCBjYXNlLgotCSAqIGxl
biBieXRlcyBmcm9tIDxuLCBvZmY+IHNpdHMgaW4gc2luZ2xlIG1idWYsIGJ1dCB0aGUgY2FsbGVy
IGRvZXMKLQkgKiBub3QgbGlrZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKG9mZikuCi0JICogY2hv
cCB0aGUgY3VycmVudCBtYnVmIGludG8gdHdvIHBpZWNlcywgc2V0IG9mZiB0byAwLgotCSAqLwot
CWlmIChsZW4gPD0gbi0+bV9sZW4gLSBvZmYpIHsKLQkJbyA9IG1fZHVwMShuLCBvZmYsIG4tPm1f
bGVuIC0gb2ZmLCBNX05PV0FJVCk7Ci0JCWlmIChvID09IE5VTEwpIHsKLQkJCW1fZnJlZW0obSk7
Ci0JCXJldHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICovCi0JCX0KLQkJbi0+bV9sZW4gPSBvZmY7
Ci0JCW8tPm1fbmV4dCA9IG4tPm1fbmV4dDsKLQkJbi0+bV9uZXh0ID0gbzsKLQkJbiA9IG4tPm1f
bmV4dDsKLQkJb2ZmID0gMDsKLQkJZ290byBvazsKLQl9Ci0JLyoKLQkgKiB3ZSBuZWVkIHRvIHRh
a2UgaGxlbiBmcm9tIDxuLCBvZmY+IGFuZCB0bGVuIGZyb20gPG4tPm1fbmV4dCwgMD4sCi0JICog
YW5kIGNvbnN0cnVjdCBjb250aWd1b3VzIG1idWYgd2l0aCBtX2xlbiA9PSBsZW4uCi0JICogbm90
ZSB0aGF0IGhsZW4gKyB0bGVuID09IGxlbiwgYW5kIHRsZW4gPiAwLgotCSAqLwotCWhsZW4gPSBu
LT5tX2xlbiAtIG9mZjsKLQl0bGVuID0gbGVuIC0gaGxlbjsKLQotCS8qCi0JICogZW5zdXJlIHRo
YXQgd2UgaGF2ZSBlbm91Z2ggdHJhaWxpbmcgZGF0YSBvbiBtYnVmIGNoYWluLgotCSAqIGlmIG5v
dCwgd2UgY2FuIGRvIG5vdGhpbmcgYWJvdXQgdGhlIGNoYWluLgotCSAqLwotCW9sZW4gPSAwOwot
CWZvciAobyA9IG4tPm1fbmV4dDsgbyAhPSBOVUxMOyBvID0gby0+bV9uZXh0KQotCQlvbGVuICs9
IG8tPm1fbGVuOwotCWlmIChobGVuICsgb2xlbiA8IGxlbikgewotCQltX2ZyZWVtKG0pOwotCQly
ZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBjaGFpbiB0b28gc2hvcnQgKi8KLQl9Ci0KLQkvKgotCSAq
IGVhc3kgY2FzZXMgZmlyc3QuCi0JICogd2UgbmVlZCB0byB1c2UgbV9jb3B5ZGF0YSgpIHRvIGdl
dCBkYXRhIGZyb20gPG4tPm1fbmV4dCwgMD4uCi0JICovCi0JaWYgKChvZmYgPT0gMCB8fCBvZmZw
KSAmJiBNX1RSQUlMSU5HU1BBQ0UobikgPj0gdGxlbgotCSAgICAmJiB3cml0YWJsZSkgewotCQlt
X2NvcHlkYXRhKG4tPm1fbmV4dCwgMCwgdGxlbiwgbXRvZChuLCBjYWRkcl90KSArIG4tPm1fbGVu
KTsKLQkJbi0+bV9sZW4gKz0gdGxlbjsKLQkJbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKLQkJZ290
byBvazsKLQl9Ci0KLQlpZiAoKG9mZiA9PSAwIHx8IG9mZnApICYmIE1fTEVBRElOR1NQQUNFKG4t
Pm1fbmV4dCkgPj0gaGxlbgotCSAgICAmJiB3cml0YWJsZSkgewotCQluLT5tX25leHQtPm1fZGF0
YSAtPSBobGVuOwotCQluLT5tX25leHQtPm1fbGVuICs9IGhsZW47Ci0JCW1lbWNweSggbXRvZChu
LT5tX25leHQsIGNhZGRyX3QpLCBtdG9kKG4sIGNhZGRyX3QpICsgb2ZmLGhsZW4pOwotCQluLT5t
X2xlbiAtPSBobGVuOwotCQluID0gbi0+bV9uZXh0OwotCQlvZmYgPSAwOwotCQlnb3RvIG9rOwot
CX0KLQotCS8qCi0JICogbm93LCB3ZSBuZWVkIHRvIGRvIHRoZSBoYXJkIHdheS4gIGRvbid0IG1f
Y29weSBhcyB0aGVyZSdzIG5vIHJvb20KLQkgKiBvbiBib3RoIGVuZC4KLQkgKi8KLQlpZiAobGVu
ID4gTUxFTikKLQkJbV9jbGdldChvLCBNX05PV0FJVCk7Ci0JCS8qIG8gPSBtX2dldGNsKE1fTk9X
QUlULCBtLT5tX3R5cGUsIDApOyovCi0JZWxzZQotCQlvID0gbV9nZXQoTV9OT1dBSVQsIG0tPm1f
dHlwZSk7Ci0JaWYgKCFvKSB7Ci0JCW1fZnJlZW0obSk7Ci0JCXJldHVybiBOVUxMOyAgICAvKiBF
Tk9CVUZTICovCi0JfQotCS8qIGdldCBobGVuIGZyb20gPG4sIG9mZj4gaW50byA8bywgMD4gKi8K
LQlvLT5tX2xlbiA9IGhsZW47Ci0JbWVtY3B5KG10b2QobywgY2FkZHJfdCksIG10b2QobiwgY2Fk
ZHJfdCkgKyBvZmYsIGhsZW4pOwotCW4tPm1fbGVuIC09IGhsZW47Ci0JLyogZ2V0IHRsZW4gZnJv
bSA8bi0+bV9uZXh0LCAwPiBpbnRvIDxvLCBobGVuPiAqLwotCW1fY29weWRhdGEobi0+bV9uZXh0
LCAwLCB0bGVuLCBtdG9kKG8sIGNhZGRyX3QpICsgby0+bV9sZW4pOwotCW8tPm1fbGVuICs9IHRs
ZW47Ci0JbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKLQlvLT5tX25leHQgPSBuLT5tX25leHQ7Ci0J
bi0+bV9uZXh0ID0gbzsKLQluID0gbzsKLQlvZmYgPSAwOwotb2s6Ci0jaWZkZWYgUFVMTERPV05f
REVCVUcKLQl7Ci0JCXN0cnVjdCBtYnVmICp0OwotCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVH
X1VTUiwgImFmdGVyOiIpOwotCQlmb3IgKHQgPSBtOyB0OyB0ID0gdC0+bV9uZXh0KQotCQkJU0NU
UF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICIlYyVkIiwgdCA9PSBuID8gJyonIDogJyAnLCB0
LT5tX2xlbik7Ci0JCVNDVFBfREVCVUdfVVNSKFNDVFBfREVCVUdfVVNSLCAiIChvZmY9JWQpXG4i
LCBvZmYpOwotCX0KLSNlbmRpZgotCWlmIChvZmZwKQotCQkqb2ZmcCA9IG9mZjsKLQlyZXR1cm4g
bjsKLX0KLQotLyoKLSAqIEF0dGFjaCB0aGUgdGhlIGNsdXN0ZXIgZnJvbSAqbSB0byAqbiwgc2V0
IHVwIG1fZXh0IGluICpuCi0gKiBhbmQgYnVtcCB0aGUgcmVmY291bnQgb2YgdGhlIGNsdXN0ZXIu
Ci0gKi8KLXN0YXRpYyB2b2lkCi1tYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAqbiwgc3RydWN0IG1idWYg
Km0pCi17Ci0JS0FTU0VSVCgobS0+bV9mbGFncyAmIE1fRVhUKSA9PSBNX0VYVCwgKCIlczogTV9F
WFQgbm90IHNldCIsIF9fZnVuY19fKSk7Ci0JS0FTU0VSVChtLT5tX2V4dC5yZWZfY250ICE9IE5V
TEwsICgiJXM6IHJlZl9jbnQgbm90IHNldCIsIF9fZnVuY19fKSk7Ci0JS0FTU0VSVCgobi0+bV9m
bGFncyAmIE1fRVhUKSA9PSAwLCAoIiVzOiBNX0VYVCBzZXQiLCBfX2Z1bmNfXykpOwotCi0JaWYg
KCoobS0+bV9leHQucmVmX2NudCkgPT0gMSkKLQkJKihtLT5tX2V4dC5yZWZfY250KSArPSAxOwot
CWVsc2UKLQkJYXRvbWljX2FkZF9pbnQobS0+bV9leHQucmVmX2NudCwgMSk7Ci0Jbi0+bV9leHQu
ZXh0X2J1ZiA9IG0tPm1fZXh0LmV4dF9idWY7Ci0Jbi0+bV9leHQuZXh0X2ZyZWUgPSBtLT5tX2V4
dC5leHRfZnJlZTsKLQluLT5tX2V4dC5leHRfYXJncyA9IG0tPm1fZXh0LmV4dF9hcmdzOwotCW4t
Pm1fZXh0LmV4dF9zaXplID0gbS0+bV9leHQuZXh0X3NpemU7Ci0Jbi0+bV9leHQucmVmX2NudCA9
IG0tPm1fZXh0LnJlZl9jbnQ7Ci0Jbi0+bV9leHQuZXh0X3R5cGUgPSBtLT5tX2V4dC5leHRfdHlw
ZTsKLQluLT5tX2ZsYWdzIHw9IE1fRVhUOwotfQotCi0KLS8qCi0gKiBNYWtlIGEgY29weSBvZiBh
biBtYnVmIGNoYWluIHN0YXJ0aW5nICJvZmYwIiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcsCi0g
KiBjb250aW51aW5nIGZvciAibGVuIiBieXRlcy4gIElmIGxlbiBpcyBNX0NPUFlBTEwsIGNvcHkg
dG8gZW5kIG9mIG1idWYuCi0gKiBUaGUgd2FpdCBwYXJhbWV0ZXIgaXMgYSBjaG9pY2Ugb2YgTV9U
UllXQUlUL01fTk9XQUlUIGZyb20gY2FsbGVyLgotICogTm90ZSB0aGF0IHRoZSBjb3B5IGlzIHJl
YWQtb25seSwgYmVjYXVzZSBjbHVzdGVycyBhcmUgbm90IGNvcGllZCwKLSAqIG9ubHkgdGhlaXIg
cmVmZXJlbmNlIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQuCi0gKi8KLQotc3RydWN0IG1idWYgKgot
bV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZjAsIGludCBsZW4sIGludCB3YWl0KQotewot
CXN0cnVjdCBtYnVmICpuLCAqKm5wOwotCWludCBvZmYgPSBvZmYwOwotCXN0cnVjdCBtYnVmICp0
b3A7Ci0JaW50IGNvcHloZHIgPSAwOwotCi0JS0FTU0VSVChvZmYgPj0gMCwgKCJtX2NvcHltLCBu
ZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKLQlLQVNTRVJUKGxlbiA+PSAwLCAoIm1fY29weW0sIG5l
Z2F0aXZlIGxlbiAlZCIsIGxlbikpOwotCi0JaWYgKG9mZiA9PSAwICYmIG0tPm1fZmxhZ3MgJiBN
X1BLVEhEUikKLQkJY29weWhkciA9IDE7Ci0Jd2hpbGUgKG9mZiA+IDApIHsKLQkJS0FTU0VSVCht
ICE9IE5VTEwsICgibV9jb3B5bSwgb2Zmc2V0ID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOwotCQlp
ZiAob2ZmIDwgbS0+bV9sZW4pCi0JCQlicmVhazsKLQkJb2ZmIC09IG0tPm1fbGVuOwotCQltID0g
bS0+bV9uZXh0OwotCX0KLQlucCA9ICZ0b3A7Ci0JdG9wID0gMDsKLQl3aGlsZSAobGVuID4gMCkg
ewotCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQlLQVNTRVJUKGxlbiA9PSBNX0NPUFlBTEwsICgibV9j
b3B5bSwgbGVuZ3RoID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOwotCQkJYnJlYWs7Ci0JCX0KLQkJ
aWYgKGNvcHloZHIpCi0JCQlNR0VUSERSKG4sIHdhaXQsIG0tPm1fdHlwZSk7Ci0JCWVsc2UKLQkJ
CU1HRVQobiwgd2FpdCwgbS0+bV90eXBlKTsKLQkJKm5wID0gbjsKLQkJaWYgKG4gPT0gTlVMTCkK
LQkJCWdvdG8gbm9zcGFjZTsKLQkJaWYgKGNvcHloZHIpIHsKLQkJCWlmICghbV9kdXBfcGt0aGRy
KG4sIG0sIHdhaXQpKQotCQkJCWdvdG8gbm9zcGFjZTsKLQkJCWlmIChsZW4gPT0gTV9DT1BZQUxM
KQotCQkJCW4tPm1fcGt0aGRyLmxlbiAtPSBvZmYwOwotCQkJZWxzZQotCQkJCW4tPm1fcGt0aGRy
LmxlbiA9IGxlbjsKLQkJCWNvcHloZHIgPSAwOwotCQl9Ci0JCW4tPm1fbGVuID0gbWluKGxlbiwg
bS0+bV9sZW4gLSBvZmYpOwotCQlpZiAobS0+bV9mbGFncyAmIE1fRVhUKSB7Ci0JCQluLT5tX2Rh
dGEgPSBtLT5tX2RhdGEgKyBvZmY7Ci0JCQltYl9kdXBjbChuLCBtKTsKLQkJfSBlbHNlCi0JCQlt
ZW1jcHkobXRvZChuLCBjYWRkcl90KSwgbXRvZChtLCBjYWRkcl90KSArIG9mZiwgKHVfaW50KW4t
Pm1fbGVuKTsKLQkJaWYgKGxlbiAhPSBNX0NPUFlBTEwpCi0JCQlsZW4gLT0gbi0+bV9sZW47Ci0J
CW9mZiA9IDA7Ci0JCW0gPSBtLT5tX25leHQ7Ci0JCW5wID0gJm4tPm1fbmV4dDsKLQl9Ci0JaWYg
KHRvcCA9PSBOVUxMKQotCQltYnN0YXQubV9tY2ZhaWwrKzsJLyogWFhYOiBObyBjb25zaXN0ZW5j
eS4gKi8KLQotCXJldHVybiAodG9wKTsKLW5vc3BhY2U6Ci0JbV9mcmVlbSh0b3ApOwotCW1ic3Rh
dC5tX21jZmFpbCsrOwkvKiBYWFg6IE5vIGNvbnNpc3RlbmN5LiAqLwotCXJldHVybiAoTlVMTCk7
Ci19Ci0KLQotaW50Ci1tX3RhZ19jb3B5X2NoYWluKHN0cnVjdCBtYnVmICp0bywgc3RydWN0IG1i
dWYgKmZyb20sIGludCBob3cpCi17Ci0Jc3RydWN0IG1fdGFnICpwLCAqdCwgKnRwcmV2ID0gTlVM
TDsKLQotCUtBU1NFUlQodG8gJiYgZnJvbSwgKCJtX3RhZ19jb3B5X2NoYWluOiBudWxsIGFyZ3Vt
ZW50LCB0byAlcCBmcm9tICVwIiwgKHZvaWQgKil0bywgKHZvaWQgKilmcm9tKSk7Ci0JbV90YWdf
ZGVsZXRlX2NoYWluKHRvLCBOVUxMKTsKLQlTTElTVF9GT1JFQUNIKHAsICZmcm9tLT5tX3BrdGhk
ci50YWdzLCBtX3RhZ19saW5rKSB7Ci0JCXQgPSBtX3RhZ19jb3B5KHAsIGhvdyk7Ci0JCWlmICh0
ID09IE5VTEwpIHsKLQkJCW1fdGFnX2RlbGV0ZV9jaGFpbih0bywgTlVMTCk7Ci0JCQlyZXR1cm4g
MDsKLQkJfQotCQlpZiAodHByZXYgPT0gTlVMTCkKLQkJCVNMSVNUX0lOU0VSVF9IRUFEKCZ0by0+
bV9wa3RoZHIudGFncywgdCwgbV90YWdfbGluayk7Ci0JCWVsc2UKLQkJCVNMSVNUX0lOU0VSVF9B
RlRFUih0cHJldiwgdCwgbV90YWdfbGluayk7Ci0JCXRwcmV2ID0gdDsKLQl9Ci0JcmV0dXJuIDE7
Ci19Ci0KLS8qCi0gKiBEdXBsaWNhdGUgImZyb20iJ3MgbWJ1ZiBwa3RoZHIgaW4gInRvIi4KLSAq
ICJmcm9tIiBtdXN0IGhhdmUgTV9QS1RIRFIgc2V0LCBhbmQgInRvIiBtdXN0IGJlIGVtcHR5Lgot
ICogSW4gcGFydGljdWxhciwgdGhpcyBkb2VzIGEgZGVlcCBjb3B5IG9mIHRoZSBwYWNrZXQgdGFn
cy4KLSAqLwotaW50Ci1tX2R1cF9wa3RoZHIoc3RydWN0IG1idWYgKnRvLCBzdHJ1Y3QgbWJ1ZiAq
ZnJvbSwgaW50IGhvdykKLXsKLQotCUtBU1NFUlQodG8sICgibV9kdXBfcGt0aGRyOiB0byBpcyBO
VUxMIikpOwotCUtBU1NFUlQoZnJvbSwgKCJtX2R1cF9wa3RoZHI6IGZyb20gaXMgTlVMTCIpKTsK
LQl0by0+bV9mbGFncyA9IChmcm9tLT5tX2ZsYWdzICYgTV9DT1BZRkxBR1MpIHwgKHRvLT5tX2Zs
YWdzICYgTV9FWFQpOwotCWlmICgodG8tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCkKLQkJdG8tPm1f
ZGF0YSA9IHRvLT5tX3BrdGRhdDsKLQl0by0+bV9wa3RoZHIgPSBmcm9tLT5tX3BrdGhkcjsKLQlT
TElTVF9JTklUKCZ0by0+bV9wa3RoZHIudGFncyk7Ci0JcmV0dXJuIChtX3RhZ19jb3B5X2NoYWlu
KHRvLCBmcm9tLCBNQlRPTShob3cpKSk7Ci19Ci0KLS8qIENvcHkgYSBzaW5nbGUgdGFnLiAqLwot
c3RydWN0IG1fdGFnICoKLW1fdGFnX2NvcHkoc3RydWN0IG1fdGFnICp0LCBpbnQgaG93KQotewot
CXN0cnVjdCBtX3RhZyAqcDsKLQotCUtBU1NFUlQodCwgKCJtX3RhZ19jb3B5OiBudWxsIHRhZyIp
KTsKLQlwID0gbV90YWdfYWxsb2ModC0+bV90YWdfY29va2llLCB0LT5tX3RhZ19pZCwgdC0+bV90
YWdfbGVuLCBob3cpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JbWVtY3B5
KHAgKyAxLCB0ICsgMSwgdC0+bV90YWdfbGVuKTsgLyogQ29weSB0aGUgZGF0YSAqLwotCXJldHVy
biBwOwotfQotCi0vKiBHZXQgYSBwYWNrZXQgdGFnIHN0cnVjdHVyZSBhbG9uZyB3aXRoIHNwZWNp
ZmllZCBkYXRhIGZvbGxvd2luZy4gKi8KLXN0cnVjdCBtX3RhZyAqCi1tX3RhZ19hbGxvYyh1X2lu
dDMyX3QgY29va2llLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IHdhaXQpCi17Ci0Jc3RydWN0IG1f
dGFnICp0OwotCi0JaWYgKGxlbiA8IDApCi0JCXJldHVybiBOVUxMOwotCXQgPSBtYWxsb2MobGVu
ICsgc2l6ZW9mKHN0cnVjdCBtX3RhZykpOwotCWlmICh0ID09IE5VTEwpCi0JCXJldHVybiBOVUxM
OwotCW1fdGFnX3NldHVwKHQsIGNvb2tpZSwgdHlwZSwgbGVuKTsKLQl0LT5tX3RhZ19mcmVlID0g
bV90YWdfZnJlZV9kZWZhdWx0OwotCXJldHVybiB0OwotfQotCi0vKiBGcmVlIGEgcGFja2V0IHRh
Zy4gKi8KLXZvaWQKLW1fdGFnX2ZyZWVfZGVmYXVsdChzdHJ1Y3QgbV90YWcgKnQpCi17Ci0gIGZy
ZWUodCk7Ci19Ci0KLS8qCi0gKiBDb3B5IGRhdGEgZnJvbSBhIGJ1ZmZlciBiYWNrIGludG8gdGhl
IGluZGljYXRlZCBtYnVmIGNoYWluLAotICogc3RhcnRpbmcgIm9mZiIgYnl0ZXMgZnJvbSB0aGUg
YmVnaW5uaW5nLCBleHRlbmRpbmcgdGhlIG1idWYKLSAqIGNoYWluIGlmIG5lY2Vzc2FyeS4KLSAq
Lwotdm9pZAotbV9jb3B5YmFjayhzdHJ1Y3QgbWJ1ZiAqbTAsIGludCBvZmYsIGludCBsZW4sIGNh
ZGRyX3QgY3ApCi17Ci0JaW50IG1sZW47Ci0Jc3RydWN0IG1idWYgKm0gPSBtMCwgKm47Ci0JaW50
IHRvdGxlbiA9IDA7Ci0KLQlpZiAobTAgPT0gTlVMTCkKLQkJcmV0dXJuOwotCXdoaWxlIChvZmYg
PiAobWxlbiA9IG0tPm1fbGVuKSkgewotCQlvZmYgLT0gbWxlbjsKLQkJdG90bGVuICs9IG1sZW47
Ci0JCWlmIChtLT5tX25leHQgPT0gTlVMTCkgewotCQkJbiA9IG1fZ2V0KE1fTk9XQUlULCBtLT5t
X3R5cGUpOwotCQkJaWYgKG4gPT0gTlVMTCkKLQkJCQlnb3RvIG91dDsKLQkJCW1lbXNldChtdG9k
KG4sIGNhZGRyX3QpLCAwLCBNTEVOKTsKLQkJCW4tPm1fbGVuID0gbWluKE1MRU4sIGxlbiArIG9m
Zik7Ci0JCQltLT5tX25leHQgPSBuOwotCQl9Ci0JCW0gPSBtLT5tX25leHQ7Ci0JfQotCXdoaWxl
IChsZW4gPiAwKSB7Ci0JCW1sZW4gPSBtaW4gKG0tPm1fbGVuIC0gb2ZmLCBsZW4pOwotCQltZW1j
cHkob2ZmICsgbXRvZChtLCBjYWRkcl90KSwgY3AsICh1X2ludCltbGVuKTsKLQkJY3AgKz0gbWxl
bjsKLQkJbGVuIC09IG1sZW47Ci0JCW1sZW4gKz0gb2ZmOwotCQlvZmYgPSAwOwotCQl0b3RsZW4g
Kz0gbWxlbjsKLQkJaWYgKGxlbiA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChtLT5tX25leHQgPT0g
TlVMTCkgewotCQkJbiA9IG1fZ2V0KE1fTk9XQUlULCBtLT5tX3R5cGUpOwotCQkJaWYgKG4gPT0g
TlVMTCkKLQkJCQlicmVhazsKLQkJCW4tPm1fbGVuID0gbWluKE1MRU4sIGxlbik7Ci0JCQltLT5t
X25leHQgPSBuOwotCQl9Ci0JCW0gPSBtLT5tX25leHQ7Ci0JfQotb3V0OglpZiAoKChtID0gbTAp
LT5tX2ZsYWdzICYgTV9QS1RIRFIpICYmIChtLT5tX3BrdGhkci5sZW4gPCB0b3RsZW4pKQotCQlt
LT5tX3BrdGhkci5sZW4gPSB0b3RsZW47Ci19Ci0KLQotLyoKLSAqIExlc3Nlci11c2VkIHBhdGgg
Zm9yIE1fUFJFUEVORDoKLSAqIGFsbG9jYXRlIG5ldyBtYnVmIHRvIHByZXBlbmQgdG8gY2hhaW4s
Ci0gKiBjb3B5IGp1bmsgYWxvbmcuCi0gKi8KLXN0cnVjdCBtYnVmICoKLW1fcHJlcGVuZChzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGhvdykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbW47Ci0KLQlp
ZiAobS0+bV9mbGFncyAmIE1fUEtUSERSKQotCQlNR0VUSERSKG1uLCBob3csIG0tPm1fdHlwZSk7
Ci0JZWxzZQotCQlNR0VUKG1uLCBob3csIG0tPm1fdHlwZSk7Ci0JaWYgKG1uID09IE5VTEwpIHsK
LQkJbV9mcmVlbShtKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKG0tPm1fZmxhZ3MgJiBN
X1BLVEhEUikKLQkJTV9NT1ZFX1BLVEhEUihtbiwgbSk7Ci0JbW4tPm1fbmV4dCA9IG07Ci0JbSA9
IG1uOwotCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpIHsKLQkJaWYgKGxlbiA8IE1ITEVOKQot
CQkJTUhfQUxJR04obSwgbGVuKTsKLQl9IGVsc2UgewotCQlpZiAobGVuIDwgTUxFTikKLQkJCU1f
QUxJR04obSwgbGVuKTsKLQl9Ci0JbS0+bV9sZW4gPSBsZW47Ci0JcmV0dXJuIChtKTsKLX0KLQot
LyoKLSAqIENvcHkgZGF0YSBmcm9tIGFuIG1idWYgY2hhaW4gc3RhcnRpbmcgIm9mZiIgYnl0ZXMg
ZnJvbSB0aGUgYmVnaW5uaW5nLAotICogY29udGludWluZyBmb3IgImxlbiIgYnl0ZXMsIGludG8g
dGhlIGluZGljYXRlZCBidWZmZXIuCi0gKi8KLXZvaWQKLW1fY29weWRhdGEoY29uc3Qgc3RydWN0
IG1idWYgKm0sIGludCBvZmYsIGludCBsZW4sIGNhZGRyX3QgY3ApCi17Ci0JdV9pbnQgY291bnQ7
Ci0KLQlLQVNTRVJUKG9mZiA+PSAwLCAoIm1fY29weWRhdGEsIG5lZ2F0aXZlIG9mZiAlZCIsIG9m
ZikpOwotCUtBU1NFUlQobGVuID49IDAsICgibV9jb3B5ZGF0YSwgbmVnYXRpdmUgbGVuICVkIiwg
bGVuKSk7Ci0Jd2hpbGUgKG9mZiA+IDApIHsKLQkJS0FTU0VSVChtICE9IE5VTEwsICgibV9jb3B5
ZGF0YSwgb2Zmc2V0ID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOwotCQlpZiAob2ZmIDwgbS0+bV9s
ZW4pCi0JCQlicmVhazsKLQkJb2ZmIC09IG0tPm1fbGVuOwotCQltID0gbS0+bV9uZXh0OwotCX0K
LQl3aGlsZSAobGVuID4gMCkgewotCQlLQVNTRVJUKG0gIT0gTlVMTCwgKCJtX2NvcHlkYXRhLCBs
ZW5ndGggPiBzaXplIG9mIG1idWYgY2hhaW4iKSk7Ci0JCWNvdW50ID0gbWluKG0tPm1fbGVuIC0g
b2ZmLCBsZW4pOwotCQltZW1jcHkoY3AsIG10b2QobSwgY2FkZHJfdCkgKyBvZmYsIGNvdW50KTsK
LQkJbGVuIC09IGNvdW50OwotCQljcCArPSBjb3VudDsKLQkJb2ZmID0gMDsKLQkJbSA9IG0tPm1f
bmV4dDsKLQl9Ci19Ci0KLQotLyoKLSAqIENvbmNhdGVuYXRlIG1idWYgY2hhaW4gbiB0byBtLgot
ICogQm90aCBjaGFpbnMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIChlLmcuIE1UX0RBVEEpLgot
ICogQW55IG1fcGt0aGRyIGlzIG5vdCB1cGRhdGVkLgotICovCi12b2lkCi1tX2NhdChzdHJ1Y3Qg
bWJ1ZiAqbSwgc3RydWN0IG1idWYgKm4pCi17Ci0Jd2hpbGUgKG0tPm1fbmV4dCkKLQkJbSA9IG0t
Pm1fbmV4dDsKLQl3aGlsZSAobikgewotCQlpZiAobS0+bV9mbGFncyAmIE1fRVhUIHx8Ci0JCSAg
ICBtLT5tX2RhdGEgKyBtLT5tX2xlbiArIG4tPm1fbGVuID49ICZtLT5tX2RhdFtNTEVOXSkgewot
CQkJLyoganVzdCBqb2luIHRoZSB0d28gY2hhaW5zICovCi0JCQltLT5tX25leHQgPSBuOwotCQkJ
cmV0dXJuOwotCQl9Ci0JCS8qIHNwbGF0IHRoZSBkYXRhIGZyb20gb25lIGludG8gdGhlIG90aGVy
ICovCi0JCW1lbWNweShtdG9kKG0sIGNhZGRyX3QpICsgbS0+bV9sZW4sIG10b2QobiwgY2FkZHJf
dCksICh1X2ludCluLT5tX2xlbik7Ci0JCW0tPm1fbGVuICs9IG4tPm1fbGVuOwotCQluID0gbV9m
cmVlKG4pOwotCX0KLX0KLQotCi12b2lkCi1tX2FkaihzdHJ1Y3QgbWJ1ZiAqbXAsIGludCByZXFf
bGVuKQotewotCWludCBsZW4gPSByZXFfbGVuOwotCXN0cnVjdCBtYnVmICptOwotCWludCBjb3Vu
dDsKLQotCWlmICgobSA9IG1wKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0JaWYgKGxlbiA+PSAwKSB7
Ci0JCS8qCi0JCSAqIFRyaW0gZnJvbSBoZWFkLgotCQkgKi8KLQkJd2hpbGUgKG0gIT0gTlVMTCAm
JiBsZW4gPiAwKSB7Ci0JCQlpZiAobS0+bV9sZW4gPD0gbGVuKSB7Ci0JCQkJbGVuIC09IG0tPm1f
bGVuOwotCQkJCW0tPm1fbGVuID0gMDsKLQkJCQltID0gbS0+bV9uZXh0OwotCQkJfSBlbHNlIHsK
LQkJCQltLT5tX2xlbiAtPSBsZW47Ci0JCQkJbS0+bV9kYXRhICs9IGxlbjsKLQkJCQlsZW4gPSAw
OwotCQkJfQotCQl9Ci0JCW0gPSBtcDsKLQkJaWYgKG1wLT5tX2ZsYWdzICYgTV9QS1RIRFIpCi0J
CQltLT5tX3BrdGhkci5sZW4gLT0gKHJlcV9sZW4gLSBsZW4pOwotCX0gZWxzZSB7Ci0JCS8qCi0J
CSAqIFRyaW0gZnJvbSB0YWlsLiAgU2NhbiB0aGUgbWJ1ZiBjaGFpbiwKLQkJICogY2FsY3VsYXRp
bmcgaXRzIGxlbmd0aCBhbmQgZmluZGluZyB0aGUgbGFzdCBtYnVmLgotCQkgKiBJZiB0aGUgYWRq
dXN0bWVudCBvbmx5IGFmZmVjdHMgdGhpcyBtYnVmLCB0aGVuIGp1c3QKLQkJICogYWRqdXN0IGFu
ZCByZXR1cm4uICBPdGhlcndpc2UsIHJlc2NhbiBhbmQgdHJ1bmNhdGUKLQkJICogYWZ0ZXIgdGhl
IHJlbWFpbmluZyBzaXplLgotCQkgKi8KLQkJbGVuID0gLWxlbjsKLQkJY291bnQgPSAwOwotCQlm
b3IgKDs7KSB7Ci0JCQljb3VudCArPSBtLT5tX2xlbjsKLQkJCWlmIChtLT5tX25leHQgPT0gKHN0
cnVjdCBtYnVmICopMCkKLQkJCQlicmVhazsKLQkJCW0gPSBtLT5tX25leHQ7Ci0JCX0KLQkJaWYg
KG0tPm1fbGVuID49IGxlbikgewotCQkJbS0+bV9sZW4gLT0gbGVuOwotCQkJaWYgKG1wLT5tX2Zs
YWdzICYgTV9QS1RIRFIpCi0JCQkJbXAtPm1fcGt0aGRyLmxlbiAtPSBsZW47Ci0JCQlyZXR1cm47
Ci0JCX0KLQkJY291bnQgLT0gbGVuOwotCQlpZiAoY291bnQgPCAwKQotCQkJY291bnQgPSAwOwot
CQkvKgotCQkgKiBDb3JyZWN0IGxlbmd0aCBmb3IgY2hhaW4gaXMgImNvdW50Ii4KLQkJICogRmlu
ZCB0aGUgbWJ1ZiB3aXRoIGxhc3QgZGF0YSwgYWRqdXN0IGl0cyBsZW5ndGgsCi0JCSAqIGFuZCB0
b3NzIGRhdGEgZnJvbSByZW1haW5pbmcgbWJ1ZnMgb24gY2hhaW4uCi0JCSAqLwotCQltID0gbXA7
Ci0JCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCi0JCQltLT5tX3BrdGhkci5sZW4gPSBjb3Vu
dDsKLQkJZm9yICg7IG07IG0gPSBtLT5tX25leHQpIHsKLQkJCWlmIChtLT5tX2xlbiA+PSBjb3Vu
dCkgewotCQkJCW0tPm1fbGVuID0gY291bnQ7Ci0JCQkJaWYgKG0tPm1fbmV4dCAhPSBOVUxMKSB7
Ci0JCQkJCW1fZnJlZW0obS0+bV9uZXh0KTsKLQkJCQkJbS0+bV9uZXh0ID0gTlVMTDsKLQkJCQl9
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb3VudCAtPSBtLT5tX2xlbjsKLQkJfQotCX0KLX0KLQot
Ci0vKiBtX3NwbGl0IGlzIHVzZWQgd2l0aGluIHNjdHBfaGFuZGxlX2Nvb2tpZV9lY2hvLiAqLwot
Ci0vKgotICogUGFydGl0aW9uIGFuIG1idWYgY2hhaW4gaW4gdHdvIHBpZWNlcywgcmV0dXJuaW5n
IHRoZSB0YWlsIC0tCi0gKiBhbGwgYnV0IHRoZSBmaXJzdCBsZW4wIGJ5dGVzLiAgSW4gY2FzZSBv
ZiBmYWlsdXJlLCBpdCByZXR1cm5zIE5VTEwgYW5kCi0gKiBhdHRlbXB0cyB0byByZXN0b3JlIHRo
ZSBjaGFpbiB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCi0gKgotICogTm90ZSB0aGF0IHRoZSByZXN1
bHRpbmcgbWJ1ZnMgbWlnaHQgYmUgcmVhZC1vbmx5LCBiZWNhdXNlIHRoZSBuZXcKLSAqIG1idWYg
Y2FuIGVuZCB1cCBzaGFyaW5nIGFuIG1idWYgY2x1c3RlciB3aXRoIHRoZSBvcmlnaW5hbCBtYnVm
IGlmCi0gKiB0aGUgImJyZWFraW5nIHBvaW50IiBoYXBwZW5zIHRvIGxpZSB3aXRoaW4gYSBjbHVz
dGVyIG1idWYuIFVzZSB0aGUKLSAqIE1fV1JJVEFCTEUoKSBtYWNybyB0byBjaGVjayBmb3IgdGhp
cyBjYXNlLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX3NwbGl0KHN0cnVjdCBtYnVmICptMCwgaW50
IGxlbjAsIGludCB3YWl0KQotewotCXN0cnVjdCBtYnVmICptLCAqbjsKLQl1X2ludCBsZW4gPSBs
ZW4wLCByZW1haW47Ci0KLQkvKiBNQlVGX0NIRUNLU0xFRVAod2FpdCk7ICovCi0JZm9yIChtID0g
bTA7IG0gJiYgKGludClsZW4gPiBtLT5tX2xlbjsgbSA9IG0tPm1fbmV4dCkKLQkJbGVuIC09IG0t
Pm1fbGVuOwotCWlmIChtID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JcmVtYWluID0gbS0+
bV9sZW4gLSBsZW47Ci0JaWYgKG0wLT5tX2ZsYWdzICYgTV9QS1RIRFIpIHsKLQkJTUdFVEhEUihu
LCB3YWl0LCBtMC0+bV90eXBlKTsKLQkJaWYgKG4gPT0gTlVMTCkKLQkJCXJldHVybiAoTlVMTCk7
Ci0JCW4tPm1fcGt0aGRyLnJjdmlmID0gbTAtPm1fcGt0aGRyLnJjdmlmOwotCQluLT5tX3BrdGhk
ci5sZW4gPSBtMC0+bV9wa3RoZHIubGVuIC0gbGVuMDsKLQkJbTAtPm1fcGt0aGRyLmxlbiA9IGxl
bjA7Ci0JCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCQlnb3RvIGV4dHBhY2tldDsKLQkJaWYg
KHJlbWFpbiA+IE1ITEVOKSB7Ci0JCQkvKiBtIGNhbid0IGJlIHRoZSBsZWFkIHBhY2tldCAqLwot
CQkJTUhfQUxJR04obiwgMCk7Ci0JCQluLT5tX25leHQgPSBtX3NwbGl0KG0sIGxlbiwgd2FpdCk7
Ci0JCQlpZiAobi0+bV9uZXh0ID09IE5VTEwpIHsKLQkJCQkodm9pZCkgbV9mcmVlKG4pOwotCQkJ
CXJldHVybiAoTlVMTCk7Ci0JCQl9IGVsc2UgewotCQkJCW4tPm1fbGVuID0gMDsKLQkJCQlyZXR1
cm4gKG4pOwotCQkJfQotCQl9IGVsc2UKLQkJCU1IX0FMSUdOKG4sIHJlbWFpbik7Ci0JfSBlbHNl
IGlmIChyZW1haW4gPT0gMCkgewotCQluID0gbS0+bV9uZXh0OwotCQltLT5tX25leHQgPSBOVUxM
OwotCQlyZXR1cm4gKG4pOwotCX0gZWxzZSB7Ci0JCU1HRVQobiwgd2FpdCwgbS0+bV90eXBlKTsK
LQkJaWYgKG4gPT0gTlVMTCkKLQkJCXJldHVybiAoTlVMTCk7Ci0JCU1fQUxJR04obiwgcmVtYWlu
KTsKLQl9Ci1leHRwYWNrZXQ6Ci0JaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkgewotCQluLT5tX2Rh
dGEgPSBtLT5tX2RhdGEgKyBsZW47Ci0JCW1iX2R1cGNsKG4sIG0pOwotCX0gZWxzZSB7Ci0JCW1l
bWNweShtdG9kKG4sIGNhZGRyX3QpLCBtdG9kKG0sIGNhZGRyX3QpICsgbGVuLCByZW1haW4pOwot
CX0KLQluLT5tX2xlbiA9IHJlbWFpbjsKLQltLT5tX2xlbiA9IGxlbjsKLQluLT5tX25leHQgPSBt
LT5tX25leHQ7Ci0JbS0+bV9uZXh0ID0gTlVMTDsKLQlyZXR1cm4gKG4pOwotfQotCi0KLQotCi1p
bnQKLXBhY2tfc2VuZF9idWZmZXIoY2FkZHJfdCBidWZmZXIsIHN0cnVjdCBtYnVmKiBtYil7Ci0K
LQlpbnQgY291bnRfdG9fY29weTsKLQlpbnQgdG90YWxfY291bnRfY29waWVkID0gMDsKLQlpbnQg
b2Zmc2V0ID0gMDsKLQotCWRvIHsKLQkJY291bnRfdG9fY29weSA9IG1iLT5tX2xlbjsKLQkJbWVt
Y3B5KGJ1ZmZlcitvZmZzZXQsIG10b2QobWIsIGNhZGRyX3QpLCBjb3VudF90b19jb3B5KTsKLQkJ
b2Zmc2V0ICs9IGNvdW50X3RvX2NvcHk7Ci0JCXRvdGFsX2NvdW50X2NvcGllZCArPSBjb3VudF90
b19jb3B5OwotCQltYiA9IG1iLT5tX25leHQ7Ci0JfSB3aGlsZShtYik7Ci0KLQlyZXR1cm4gKHRv
dGFsX2NvdW50X2NvcGllZCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX21idWYuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzZXJfbWJ1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNTQ3
ZWUzNGRiN2U3ZGNlZWE2OTQ4YzA5ODVhNjY0Y2Y1NGNlMDU2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfbWJ1Zi5oCisrKyAvZGV2
L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2
LCAxOTg4LCAxOTkzCi0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh
bGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhl
ciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmli
dXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNI
IERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9NQlVGX0hfCi0jZGVmaW5lIF9VU0VS
X01CVUZfSF8KLQotLyogX19Vc2Vyc3BhY2VfXyBoZWFkZXIgZmlsZSBmb3IgbWJ1ZnMgKi8KLSNp
bmNsdWRlIDxzdGRpby5oPgotI2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLSNp
bmNsdWRlICJ1bWVtLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJ1c2VyX21hbGxvYy5oIgotI2luY2x1
ZGUgIm5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCIKLQotI2RlZmluZSBVU0lOR19NQlVGX0NP
TlNUUlVDVE9SIDAKLQotLyogRm9yIExpbnV4ICovCi0jaWZuZGVmIE1TSVpFCi0jZGVmaW5lIE1T
SVpFIDI1NgotLyogI2RlZmluZSBNU0laRSAxMDI0ICovCi0jZW5kaWYKLSNpZm5kZWYgTUNMQllU
RVMKLSNkZWZpbmUgTUNMQllURVMgMjA0OAotI2VuZGlmCi0KLXN0cnVjdCBtYnVmICogbV9nZXRo
ZHIoaW50IGhvdywgc2hvcnQgdHlwZSk7Ci1zdHJ1Y3QgbWJ1ZiAqIG1fZ2V0KGludCBob3csIHNo
b3J0IHR5cGUpOwotc3RydWN0IG1idWYgKiBtX2ZyZWUoc3RydWN0IG1idWYgKm0pOwotdm9pZCBt
X2NsZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93KTsKLQotCi0vKiBtYnVmIGluaXRpYWxpemF0
aW9uIGZ1bmN0aW9uICovCi12b2lkIG1idWZfaW5pdGlhbGl6ZSh2b2lkICopOwotCi0jZGVmaW5l
CU1fTU9WRV9QS1RIRFIodG8sIGZyb20pCW1fbW92ZV9wa3RoZHIoKHRvKSwgKGZyb20pKQotI2Rl
ZmluZQlNR0VUKG0sIGhvdywgdHlwZSkJKChtKSA9IG1fZ2V0KChob3cpLCAodHlwZSkpKQotI2Rl
ZmluZQlNR0VUSERSKG0sIGhvdywgdHlwZSkJKChtKSA9IG1fZ2V0aGRyKChob3cpLCAodHlwZSkp
KQotI2RlZmluZQlNQ0xHRVQobSwgaG93KQkJbV9jbGdldCgobSksIChob3cpKQotCi0KLSNkZWZp
bmUgTV9IRFJfUEFEICgoc2l6ZW9mKGludHB0cl90KT09NCkgPyAyIDogNikgLyogbW9kaWZpZWQg
Zm9yIF9fVXNlcnNwYWNlX18gKi8KLQotLyogTGVuZ3RoIHRvIG1fY29weSB0byBjb3B5IGFsbC4g
Ki8KLSNkZWZpbmUJTV9DT1BZQUxMCTEwMDAwMDAwMDAKLQotLyogdW1lbV9jYWNoZV90IGlzIGRl
ZmluZWQgaW4gdXNlcl9pbmNsdWRlL3VtZW0uaCBhcwotICogdHlwZWRlZiBzdHJ1Y3QgdW1lbV9j
YWNoZSB1bWVtX2NhY2hlX3Q7Ci0gKiBOb3RlOnVtZW1fem9uZV90IGlzIGEgcG9pbnRlci4KLSAq
LwotI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotdHlwZWRlZiBzaXplX3Qgc2N0
cF96b25lX3Q7Ci0jZWxzZQotdHlwZWRlZiB1bWVtX2NhY2hlX3QgKnNjdHBfem9uZV90OwotI2Vu
ZGlmCi0KLWV4dGVybiBzY3RwX3pvbmVfdCB6b25lX21idWY7Ci1leHRlcm4gc2N0cF96b25lX3Qg
em9uZV9jbHVzdDsKLWV4dGVybiBzY3RwX3pvbmVfdCB6b25lX2V4dF9yZWZjbnQ7Ci0KLS8qLQot
ICogTWFjcm9zIGZvciB0eXBlIGNvbnZlcnNpb246Ci0gKiBtdG9kKG0sIHQpCS0tIENvbnZlcnQg
bWJ1ZiBwb2ludGVyIHRvIGRhdGEgcG9pbnRlciBvZiBjb3JyZWN0IHR5cGUuCi0gKiBkdG9tKHgp
CS0tIENvbnZlcnQgZGF0YSBwb2ludGVyIHdpdGhpbiBtYnVmIHRvIG1idWYgcG9pbnRlciAoWFhY
KS4KLSAqLwotI2RlZmluZQltdG9kKG0sIHQpCSgodCkoKG0pLT5tX2RhdGEpKQotI2RlZmluZQlk
dG9tKHgpCQkoKHN0cnVjdCBtYnVmICopKChpbnRwdHJfdCkoeCkgJiB+KE1TSVpFLTEpKSkKLQot
c3RydWN0IG1iX2FyZ3MgewotCWludAlmbGFnczsJLyogRmxhZ3MgZm9yIG1idWYgYmVpbmcgYWxs
b2NhdGVkICovCi0Jc2hvcnQJdHlwZTsJLyogVHlwZSBvZiBtYnVmIGJlaW5nIGFsbG9jYXRlZCAq
LwotfTsKLQotc3RydWN0IGNsdXN0X2FyZ3MgewotCXN0cnVjdCBtYnVmICogcGFyZW50X21idWY7
Ci19OwotCi1zdHJ1Y3QgbWJ1ZiAqICAgIG1fc3BsaXQoc3RydWN0IG1idWYgKiwgaW50LCBpbnQp
Owotdm9pZCAgICAgICAgICAgICBtX2NhdChzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKm4p
Owotdm9pZAkJIG1fYWRqKHN0cnVjdCBtYnVmICosIGludCk7Ci12b2lkICBtYl9mcmVlX2V4dChz
dHJ1Y3QgbWJ1ZiAqKTsKLXZvaWQgIG1fZnJlZW0oc3RydWN0IG1idWYgKik7Ci1zdHJ1Y3QgbV90
YWcJKm1fdGFnX2FsbG9jKHVfaW50MzJfdCwgaW50LCBpbnQsIGludCk7Ci1zdHJ1Y3QgbWJ1Zgkq
bV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgaW50KTsKLXZvaWQJCSBtX2NvcHliYWNr
KHN0cnVjdCBtYnVmICosIGludCwgaW50LCBjYWRkcl90KTsKLXN0cnVjdCBtYnVmCSptX3B1bGx1
cChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0IG1idWYJKm1fcHVsbGRvd24oc3RydWN0IG1i
dWYgKiwgaW50IG9mZiwgaW50IGxlbiwgaW50ICpvZmZwKTsKLWludAkJIG1fZHVwX3BrdGhkcihz
dHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0IG1fdGFnCSptX3RhZ19j
b3B5KHN0cnVjdCBtX3RhZyAqLCBpbnQpOwotaW50CQkgbV90YWdfY29weV9jaGFpbihzdHJ1Y3Qg
bWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0IG1idWYJKm1fcHJlcGVuZChzdHJ1
Y3QgbWJ1ZiAqLCBpbnQsIGludCk7Ci12b2lkCQkgbV9jb3B5ZGF0YShjb25zdCBzdHJ1Y3QgbWJ1
ZiAqLCBpbnQsIGludCwgY2FkZHJfdCk7Ci0KLSNkZWZpbmUgTUJVRl9NRU1fTkFNRSAibWJ1ZiIK
LSNkZWZpbmUgTUJVRl9DTFVTVEVSX01FTV9OQU1FICJtYnVmX2NsdXN0ZXIiCi0jZGVmaW5lCU1C
VUZfRVhUUkVGQ05UX01FTV9OQU1FCSJtYnVmX2V4dF9yZWZjbnQiCi0KLSNkZWZpbmUJTVRfTk9J
TklUCTI1NQkvKiBOb3QgYSB0eXBlIGJ1dCBhIGZsYWcgdG8gYWxsb2NhdGUKLQkJCQkgICBhIG5v
bi1pbml0aWFsaXplZCBtYnVmICovCi0KLS8qCi0gKiBHZW5lcmFsIG1idWYgYWxsb2NhdG9yIHN0
YXRpc3RpY3Mgc3RydWN0dXJlLgotICogX19Vc2Vyc3BhY2VfXyBtYnN0YXQgbWF5IGJlIHVzZWZ1
bCBmb3IgZ2F0aGVyaW5nIHN0YXRpc3RpY3MuCi0gKiBJbiB0aGUga2VybmVsIG1hbnkgb2YgdGhl
c2Ugc3RhdGlzdGljcyBhcmUgbm8gbG9uZ2VyIHVzZWQgYXMKLSAqIHRoZXkgdHJhY2sgYWxsb2Nh
dG9yIHN0YXRpc3RpY3MgdGhyb3VnaCBrZXJuZWwgVU1BJ3MgYnVpbHQgaW4gc3RhdGlzdGljcyBt
ZWNoYW5pc20uCi0gKi8KLXN0cnVjdCBtYnN0YXQgewotCXVfbG9uZwltX21idWZzOwkvKiBYWFgg
Ki8KLQl1X2xvbmcJbV9tY2x1c3RzOwkvKiBYWFggKi8KLQotCXVfbG9uZwltX2RyYWluOwkvKiB0
aW1lcyBkcmFpbmVkIHByb3RvY29scyBmb3Igc3BhY2UgKi8KLQl1X2xvbmcJbV9tY2ZhaWw7CS8q
IFhYWDogdGltZXMgbV9jb3B5bSBmYWlsZWQgKi8KLQl1X2xvbmcJbV9tcGZhaWw7CS8qIFhYWDog
dGltZXMgbV9wdWxsdXAgZmFpbGVkICovCi0JdV9sb25nCW1fbXNpemU7CS8qIGxlbmd0aCBvZiBh
biBtYnVmICovCi0JdV9sb25nCW1fbWNsYnl0ZXM7CS8qIGxlbmd0aCBvZiBhbiBtYnVmIGNsdXN0
ZXIgKi8KLQl1X2xvbmcJbV9taW5jbHNpemU7CS8qIG1pbiBsZW5ndGggb2YgZGF0YSB0byBhbGxv
Y2F0ZSBhIGNsdXN0ZXIgKi8KLQl1X2xvbmcJbV9tbGVuOwkJLyogbGVuZ3RoIG9mIGRhdGEgaW4g
YW4gbWJ1ZiAqLwotCXVfbG9uZwltX21obGVuOwkvKiBsZW5ndGggb2YgZGF0YSBpbiBhIGhlYWRl
ciBtYnVmICovCi0KLQkvKiBOdW1iZXIgb2YgbWJ0eXBlcyAoZ2l2ZXMgIyBlbGVtcyBpbiBtYnR5
cGVzW10gYXJyYXk6ICovCi0Jc2hvcnQJbV9udW10eXBlczsKLQotCS8qIFhYWDogU2VuZGZpbGUg
c3RhdHMgc2hvdWxkIGV2ZW50dWFsbHkgbW92ZSB0byB0aGVpciBvd24gc3RydWN0ICovCi0JdV9s
b25nCXNmX2lvY250OwkvKiB0aW1lcyBzZW5kZmlsZSBoYWQgdG8gZG8gZGlzayBJL08gKi8KLQl1
X2xvbmcJc2ZfYWxsb2NmYWlsOwkvKiB0aW1lcyBzZmJ1ZiBhbGxvY2F0aW9uIGZhaWxlZCAqLwot
CXVfbG9uZwlzZl9hbGxvY3dhaXQ7CS8qIHRpbWVzIHNmYnVmIGFsbG9jYXRpb24gaGFkIHRvIHdh
aXQgKi8KLX07Ci0KLQotLyoKLSAqIE1idWZzIGFyZSBvZiBhIHNpbmdsZSBzaXplLCBNU0laRSAo
c3lzL3BhcmFtLmgpLCB3aGljaCBpbmNsdWRlcyBvdmVyaGVhZC4KLSAqIEFuIG1idWYgbWF5IGFk
ZCBhIHNpbmdsZSAibWJ1ZiBjbHVzdGVyIiBvZiBzaXplIE1DTEJZVEVTIChhbHNvIGluCi0gKiBz
eXMvcGFyYW0uaCksIHdoaWNoIGhhcyBubyBhZGRpdGlvbmFsIG92ZXJoZWFkIGFuZCBpcyB1c2Vk
IGluc3RlYWQgb2YgdGhlCi0gKiBpbnRlcm5hbCBkYXRhIGFyZWE7IHRoaXMgaXMgZG9uZSB3aGVu
IGF0IGxlYXN0IE1JTkNMU0laRSBvZiBkYXRhIG11c3QgYmUKLSAqIHN0b3JlZC4gIEFkZGl0aW9u
YWxseSwgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYSBzZXBhcmF0ZSBidWZmZXIKLSAqIGV4
dGVybmFsbHkgYW5kIGF0dGFjaCBpdCB0byB0aGUgbWJ1ZiBpbiBhIHdheSBzaW1pbGFyIHRvIHRo
YXQgb2YgbWJ1ZgotICogY2x1c3RlcnMuCi0gKi8KLSNkZWZpbmUJTUxFTgkJKChpbnQpKE1TSVpF
IC0gc2l6ZW9mKHN0cnVjdCBtX2hkcikpKQkvKiBub3JtYWwgZGF0YSBsZW4gKi8KLSNkZWZpbmUJ
TUhMRU4JCSgoaW50KShNTEVOIC0gc2l6ZW9mKHN0cnVjdCBwa3RoZHIpKSkJLyogZGF0YSBsZW4g
dy9wa3RoZHIgKi8KLSNkZWZpbmUJTUlOQ0xTSVpFCSgoaW50KShNSExFTiArIDEpKQkvKiBzbWFs
bGVzdCBhbW91bnQgdG8gcHV0IGluIGNsdXN0ZXIgKi8KLSNkZWZpbmUJTV9NQVhDT01QUkVTUwko
TUhMRU4gLyAyKQkvKiBtYXggYW1vdW50IHRvIGNvcHkgZm9yIGNvbXByZXNzaW9uICovCi0KLQot
LyoKLSAqIEhlYWRlciBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YgZXZlcnkgbWJ1Zi4KLSAq
Lwotc3RydWN0IG1faGRyIHsKLQlzdHJ1Y3QgbWJ1ZgkqbWhfbmV4dDsJLyogbmV4dCBidWZmZXIg
aW4gY2hhaW4gKi8KLQlzdHJ1Y3QgbWJ1ZgkqbWhfbmV4dHBrdDsJLyogbmV4dCBjaGFpbiBpbiBx
dWV1ZS9yZWNvcmQgKi8KLQljYWRkcl90CQkgbWhfZGF0YTsJLyogbG9jYXRpb24gb2YgZGF0YSAq
LwotCWludAkJIG1oX2xlbjsJLyogYW1vdW50IG9mIGRhdGEgaW4gdGhpcyBtYnVmICovCi0JaW50
CQkgbWhfZmxhZ3M7CS8qIGZsYWdzOyBzZWUgYmVsb3cgKi8KLQlzaG9ydAkJIG1oX3R5cGU7CS8q
IHR5cGUgb2YgZGF0YSBpbiB0aGlzIG1idWYgKi8KLQl1aW50OF90ICAgICAgICAgIHBhZFtNX0hE
Ul9QQURdOy8qIHdvcmQgYWxpZ24gICAgICAgICAgICAgICAgICAqLwotfTsKLQotLyoKLSAqIFBh
Y2tldCB0YWcgc3RydWN0dXJlIChzZWUgYmVsb3cgZm9yIGRldGFpbHMpLgotICovCi1zdHJ1Y3Qg
bV90YWcgewotCVNMSVNUX0VOVFJZKG1fdGFnKQltX3RhZ19saW5rOwkvKiBMaXN0IG9mIHBhY2tl
dCB0YWdzICovCi0JdV9pbnQxNl90CQltX3RhZ19pZDsJLyogVGFnIElEICovCi0JdV9pbnQxNl90
CQltX3RhZ19sZW47CS8qIExlbmd0aCBvZiBkYXRhICovCi0JdV9pbnQzMl90CQltX3RhZ19jb29r
aWU7CS8qIEFCSS9Nb2R1bGUgSUQgKi8KLQl2b2lkCQkJKCptX3RhZ19mcmVlKShzdHJ1Y3QgbV90
YWcgKik7Ci19OwotCi0vKgotICogUmVjb3JkL3BhY2tldCBoZWFkZXIgaW4gZmlyc3QgbWJ1ZiBv
ZiBjaGFpbjsgdmFsaWQgb25seSBpZiBNX1BLVEhEUiBpcyBzZXQuCi0gKi8KLXN0cnVjdCBwa3Ro
ZHIgewotCXN0cnVjdCBpZm5ldAkqcmN2aWY7CQkvKiByY3YgaW50ZXJmYWNlICovCi0JLyogdmFy
aWFibGVzIGZvciBpcCBhbmQgdGNwIHJlYXNzZW1ibHkgKi8KLQl2b2lkCQkqaGVhZGVyOwkvKiBw
b2ludGVyIHRvIHBhY2tldCBoZWFkZXIgKi8KLQlpbnQJCSBsZW47CQkvKiB0b3RhbCBwYWNrZXQg
bGVuZ3RoICovCi0JLyogdmFyaWFibGVzIGZvciBoYXJkd2FyZSBjaGVja3N1bSAqLwotCWludAkJ
IGNzdW1fZmxhZ3M7CS8qIGZsYWdzIHJlZ2FyZGluZyBjaGVja3N1bSAqLwotCWludAkJIGNzdW1f
ZGF0YTsJLyogZGF0YSBmaWVsZCB1c2VkIGJ5IGNzdW0gcm91dGluZXMgKi8KLQl1X2ludDE2X3QJ
IHRzb19zZWdzejsJLyogVFNPIHNlZ21lbnQgc2l6ZSAqLwotCXVfaW50MTZfdAkgZXRoZXJfdnRh
ZzsJLyogRXRoZXJuZXQgODAyLjFwK3EgdmxhbiB0YWcgKi8KLQlTTElTVF9IRUFEKHBhY2tldF90
YWdzLCBtX3RhZykgdGFnczsgLyogbGlzdCBvZiBwYWNrZXQgdGFncyAqLwotfTsKLQotLyoKLSAq
IERlc2NyaXB0aW9uIG9mIGV4dGVybmFsIHN0b3JhZ2UgbWFwcGVkIGludG8gbWJ1ZjsgdmFsaWQg
b25seSBpZiBNX0VYVCBpcwotICogc2V0LgotICovCi1zdHJ1Y3QgbV9leHQgewotCWNhZGRyX3QJ
CSBleHRfYnVmOwkvKiBzdGFydCBvZiBidWZmZXIgKi8KLQl2b2lkCQkoKmV4dF9mcmVlKQkvKiBm
cmVlIHJvdXRpbmUgaWYgbm90IHRoZSB1c3VhbCAqLwotCQkJICAgICh2b2lkICosIHZvaWQgKik7
Ci0Jdm9pZAkJKmV4dF9hcmdzOwkvKiBvcHRpb25hbCBhcmd1bWVudCBwb2ludGVyICovCi0JdV9p
bnQJCSBleHRfc2l6ZTsJLyogc2l6ZSBvZiBidWZmZXIsIGZvciBleHRfZnJlZSAqLwotCXZvbGF0
aWxlIHVfaW50CSpyZWZfY250OwkvKiBwb2ludGVyIHRvIHJlZiBjb3VudCBpbmZvICovCi0JaW50
CQkgZXh0X3R5cGU7CS8qIHR5cGUgb2YgZXh0ZXJuYWwgc3RvcmFnZSAqLwotfTsKLQotCi0vKgot
ICogVGhlIGNvcmUgb2YgdGhlIG1idWYgb2JqZWN0IGFsb25nIHdpdGggc29tZSBzaG9ydGN1dCBk
ZWZpbmVkIGZvciBwcmFjdGljYWwKLSAqIHB1cnBvc2VzLgotICovCi1zdHJ1Y3QgbWJ1ZiB7Ci0J
c3RydWN0IG1faGRyCW1faGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IHsKLQkJCXN0cnVjdCBwa3Ro
ZHIJTUhfcGt0aGRyOwkvKiBNX1BLVEhEUiBzZXQgKi8KLQkJCXVuaW9uIHsKLQkJCQlzdHJ1Y3Qg
bV9leHQJTUhfZXh0OwkvKiBNX0VYVCBzZXQgKi8KLQkJCQljaGFyCQlNSF9kYXRhYnVmW01ITEVO
XTsKLQkJCX0gTUhfZGF0OwotCQl9IE1IOwotCQljaGFyCU1fZGF0YWJ1ZltNTEVOXTsJCS8qICFN
X1BLVEhEUiwgIU1fRVhUICovCi0JfSBNX2RhdDsKLX07Ci0KLSNkZWZpbmUJbV9uZXh0CQltX2hk
ci5taF9uZXh0Ci0jZGVmaW5lCW1fbGVuCQltX2hkci5taF9sZW4KLSNkZWZpbmUJbV9kYXRhCQlt
X2hkci5taF9kYXRhCi0jZGVmaW5lCW1fdHlwZQkJbV9oZHIubWhfdHlwZQotI2RlZmluZQltX2Zs
YWdzCQltX2hkci5taF9mbGFncwotI2RlZmluZQltX25leHRwa3QJbV9oZHIubWhfbmV4dHBrdAot
I2RlZmluZQltX2FjdAkJbV9uZXh0cGt0Ci0jZGVmaW5lCW1fcGt0aGRyCU1fZGF0Lk1ILk1IX3Br
dGhkcgotI2RlZmluZQltX2V4dAkJTV9kYXQuTUguTUhfZGF0Lk1IX2V4dAotI2RlZmluZQltX3Br
dGRhdAlNX2RhdC5NSC5NSF9kYXQuTUhfZGF0YWJ1ZgotI2RlZmluZQltX2RhdAkJTV9kYXQuTV9k
YXRhYnVmCi0KLQotLyoKLSAqIG1idWYgZmxhZ3MuCi0gKi8KLSNkZWZpbmUJTV9FWFQJCTB4MDAw
MQkvKiBoYXMgYXNzb2NpYXRlZCBleHRlcm5hbCBzdG9yYWdlICovCi0jZGVmaW5lCU1fUEtUSERS
CTB4MDAwMgkvKiBzdGFydCBvZiByZWNvcmQgKi8KLSNkZWZpbmUJTV9FT1IJCTB4MDAwNAkvKiBl
bmQgb2YgcmVjb3JkICovCi0jZGVmaW5lCU1fUkRPTkxZCTB4MDAwOAkvKiBhc3NvY2lhdGVkIGRh
dGEgaXMgbWFya2VkIHJlYWQtb25seSAqLwotI2RlZmluZQlNX1BST1RPMQkweDAwMTAJLyogcHJv
dG9jb2wtc3BlY2lmaWMgKi8KLSNkZWZpbmUJTV9QUk9UTzIJMHgwMDIwCS8qIHByb3RvY29sLXNw
ZWNpZmljICovCi0jZGVmaW5lCU1fUFJPVE8zCTB4MDA0MAkvKiBwcm90b2NvbC1zcGVjaWZpYyAq
LwotI2RlZmluZQlNX1BST1RPNAkweDAwODAJLyogcHJvdG9jb2wtc3BlY2lmaWMgKi8KLSNkZWZp
bmUJTV9QUk9UTzUJMHgwMTAwCS8qIHByb3RvY29sLXNwZWNpZmljICovCi0jZGVmaW5lCU1fRlJF
RUxJU1QJMHg4MDAwCS8qIG1idWYgaXMgb24gdGhlIGZyZWUgbGlzdCAqLwotCi0KLS8qCi0gKiBG
bGFncyBjb3BpZWQgd2hlbiBjb3B5aW5nIG1fcGt0aGRyLgotICovCi0jZGVmaW5lCU1fQ09QWUZM
QUdTCShNX1BLVEhEUnxNX0VPUnxNX1JET05MWXxNX1BST1RPMXxNX1BST1RPMXxNX1BST1RPMnxc
Ci0JCQkgICAgTV9QUk9UTzN8TV9QUk9UTzR8TV9QUk9UTzV8XAotCQkJICAgIE1fQkNBU1R8TV9N
Q0FTVHxNX0ZSQUd8TV9GSVJTVEZSQUd8TV9MQVNURlJBR3xcCi0JCQkgICAgTV9WTEFOVEFHfE1f
UFJPTUlTQykKLQotCi0vKgotICogbWJ1ZiBwa3RoZHIgZmxhZ3MgKGFsc28gc3RvcmVkIGluIG1f
ZmxhZ3MpLgotICovCi0jZGVmaW5lCU1fQkNBU1QJCTB4MDIwMAkvKiBzZW5kL3JlY2VpdmVkIGFz
IGxpbmstbGV2ZWwgYnJvYWRjYXN0ICovCi0jZGVmaW5lCU1fTUNBU1QJCTB4MDQwMAkvKiBzZW5k
L3JlY2VpdmVkIGFzIGxpbmstbGV2ZWwgbXVsdGljYXN0ICovCi0jZGVmaW5lCU1fRlJBRwkJMHgw
ODAwCS8qIHBhY2tldCBpcyBhIGZyYWdtZW50IG9mIGEgbGFyZ2VyIHBhY2tldCAqLwotI2RlZmlu
ZQlNX0ZJUlNURlJBRwkweDEwMDAJLyogcGFja2V0IGlzIGZpcnN0IGZyYWdtZW50ICovCi0jZGVm
aW5lCU1fTEFTVEZSQUcJMHgyMDAwCS8qIHBhY2tldCBpcyBsYXN0IGZyYWdtZW50ICovCi0jZGVm
aW5lCU1fVkxBTlRBRwkweDEwMDAwCS8qIGV0aGVyX3Z0YWcgaXMgdmFsaWQgKi8KLSNkZWZpbmUJ
TV9QUk9NSVNDCTB4MjAwMDAJLyogcGFja2V0IHdhcyBub3QgZm9yIHVzICovCi0jZGVmaW5lCU1f
Tk9GUkVFCTB4NDAwMDAJLyogZG8gbm90IGZyZWUgbWJ1ZiAtIGl0IGlzIGVtYmVkZGVkIGluIHRo
ZSBjbHVzdGVyICovCi0KLQotLyoKLSAqIEV4dGVybmFsIGJ1ZmZlciB0eXBlczogaWRlbnRpZnkg
ZXh0X2J1ZiB0eXBlLgotICovCi0jZGVmaW5lCUVYVF9DTFVTVEVSCTEJLyogbWJ1ZiBjbHVzdGVy
ICovCi0jZGVmaW5lCUVYVF9TRkJVRgkyCS8qIHNlbmRmaWxlKDIpJ3Mgc2ZfYnVmcyAqLwotI2Rl
ZmluZQlFWFRfSlVNQk9QCTMJLyoganVtYm8gY2x1c3RlciA0MDk2IGJ5dGVzICovCi0jZGVmaW5l
CUVYVF9KVU1CTzkJNAkvKiBqdW1ibyBjbHVzdGVyIDkyMTYgYnl0ZXMgKi8KLSNkZWZpbmUJRVhU
X0pVTUJPMTYJNQkvKiBqdW1ibyBjbHVzdGVyIDE2MTg0IGJ5dGVzICovCi0jZGVmaW5lCUVYVF9Q
QUNLRVQJNgkvKiBtYnVmK2NsdXN0ZXIgZnJvbSBwYWNrZXQgem9uZSAqLwotI2RlZmluZQlFWFRf
TUJVRgk3CS8qIGV4dGVybmFsIG1idWYgcmVmZXJlbmNlIChNX0lPVkVDKSAqLwotI2RlZmluZQlF
WFRfTkVUX0RSVgkxMDAJLyogY3VzdG9tIGV4dF9idWYgcHJvdmlkZWQgYnkgbmV0IGRyaXZlcihz
KSAqLwotI2RlZmluZQlFWFRfTU9EX1RZUEUJMjAwCS8qIGN1c3RvbSBtb2R1bGUncyBleHRfYnVm
IHR5cGUgKi8KLSNkZWZpbmUJRVhUX0RJU1BPU0FCTEUJMzAwCS8qIGNhbiB0aHJvdyB0aGlzIGJ1
ZmZlciBhd2F5IHcvcGFnZSBmbGlwcGluZyAqLwotI2RlZmluZQlFWFRfRVhUUkVGCTQwMAkvKiBo
YXMgZXh0ZXJuYWxseSBtYWludGFpbmVkIHJlZl9jbnQgcHRyICovCi0KLQotLyoKLSAqIG1idWYg
dHlwZXMuCi0gKi8KLSNkZWZpbmUJTVRfTk9UTUJVRgkwCS8qIFVTRUQgSU5URVJOQUxMWSBPTkxZ
ISBPYmplY3QgaXMgbm90IG1idWYgKi8KLSNkZWZpbmUJTVRfREFUQQkJMQkvKiBkeW5hbWljIChk
YXRhKSBhbGxvY2F0aW9uICovCi0jZGVmaW5lCU1UX0hFQURFUglNVF9EQVRBCS8qIHBhY2tldCBo
ZWFkZXIsIHVzZSBNX1BLVEhEUiBpbnN0ZWFkICovCi0jZGVmaW5lCU1UX1NPTkFNRQk4CS8qIHNv
Y2tldCBuYW1lICovCi0jZGVmaW5lCU1UX0NPTlRST0wJMTQJLyogZXh0cmEtZGF0YSBwcm90b2Nv
bCBtZXNzYWdlICovCi0jZGVmaW5lCU1UX09PQkRBVEEJMTUJLyogZXhwZWRpdGVkIGRhdGEgICov
Ci0jZGVmaW5lCU1UX05UWVBFUwkxNgkvKiBudW1iZXIgb2YgbWJ1ZiB0eXBlcyBmb3IgbWJ0eXBl
c1tdICovCi0KLSNkZWZpbmUJTVRfTk9JTklUCTI1NQkvKiBOb3QgYSB0eXBlIGJ1dCBhIGZsYWcg
dG8gYWxsb2NhdGUKLQkJCQkgICBhIG5vbi1pbml0aWFsaXplZCBtYnVmICovCi0KLS8qCi0gKiBf
X1VzZXJzcGFjZV9fIGZsYWdzIGxpa2UgTV9OT1dBSVQgYXJlIGRlZmluZWQgaW4gbWFsbG9jLmgK
LSAqIEZsYWdzIGxpa2UgdGhlc2UgYXJlIHVzZWQgaW4gZnVuY3Rpb25zIGxpa2UgdW1hX3phbGxv
YygpCi0gKiBidXQgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IGluIHVzZXJsYW5kIHVtZW0KLSAq
IEZsYWdzIHNwZWNpZnlpbmcgaG93IGFuIGFsbG9jYXRpb24gc2hvdWxkIGJlIG1hZGUuCi0gKgot
ICogVGhlIGZsYWcgdG8gdXNlIGlzIGFzIGZvbGxvd3M6Ci0gKiAtIE1fRE9OVFdBSVQgb3IgTV9O
T1dBSVQgZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byBub3QgYmxvY2sgYWxsb2NhdGlvbi4K
LSAqIC0gTV9XQUlUIG9yIE1fV0FJVE9LIG9yIE1fVFJZV0FJVCBmcm9tIHdoZXJldmVyIGl0IGlz
IHNhZmUgdG8gYmxvY2suCi0gKgotICogTV9ET05UV0FJVC9NX05PV0FJVCBtZWFucyB0aGF0IHdl
IHdpbGwgbm90IGJsb2NrIHRoZSB0aHJlYWQgZXhwbGljaXRseSBhbmQKLSAqIGlmIHdlIGNhbm5v
dCBhbGxvY2F0ZSBpbW1lZGlhdGVseSB3ZSBtYXkgcmV0dXJuIE5VTEwsIHdoZXJlYXMKLSAqIE1f
V0FJVC9NX1dBSVRPSy9NX1RSWVdBSVQgbWVhbnMgdGhhdCBpZiB3ZSBjYW5ub3QgYWxsb2NhdGUg
cmVzb3VyY2VzIHdlCi0gKiB3aWxsIGJsb2NrIHVudGlsIHRoZXkgYXJlIGF2YWlsYWJsZSwgYW5k
IHRodXMgbmV2ZXIgcmV0dXJuIE5VTEwuCi0gKgotICogWFhYIEV2ZW50dWFsbHkganVzdCBwaGFz
ZSB0aGlzIG91dCB0byB1c2UgTV9XQUlUT0svTV9OT1dBSVQuCi0gKi8KLSNkZWZpbmUJTUJUT00o
aG93KQkoaG93KQotCi12b2lkCQkgbV90YWdfZGVsZXRlKHN0cnVjdCBtYnVmICosIHN0cnVjdCBt
X3RhZyAqKTsKLXZvaWQJCSBtX3RhZ19kZWxldGVfY2hhaW4oc3RydWN0IG1idWYgKiwgc3RydWN0
IG1fdGFnICopOwotdm9pZAkJIG1fbW92ZV9wa3RoZHIoc3RydWN0IG1idWYgKiwgc3RydWN0IG1i
dWYgKik7Ci12b2lkCQkgbV90YWdfZnJlZV9kZWZhdWx0KHN0cnVjdCBtX3RhZyAqKTsKLQotZXh0
ZXJuIGludCBtYXhfbGlua2hkcjsgICAgLyogTGFyZ2VzdCBsaW5rLWxldmVsIGhlYWRlciAqLwot
ZXh0ZXJuIGludCBtYXhfcHJvdG9oZHI7IC8qIFNpemUgb2YgbGFyZ2VzdCBwcm90b2NvbCBsYXll
ciBoZWFkZXIuIFNlZSB1c2VyX21idWYuYyAqLwotCi1leHRlcm4gc3RydWN0IG1ic3RhdAltYnN0
YXQ7CQkvKiBHZW5lcmFsIG1idWYgc3RhdHMvaW5mb3MgKi8KLQotCi0vKgotICogRXZhbHVhdGUg
VFJVRSBpZiBpdCdzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIG1idWYgbSdzIGRhdGEgcmVnaW9uICh0
aGlzIGNhbgotICogYmUgYm90aCB0aGUgbG9jYWwgZGF0YSBwYXlsb2FkLCBvciBhbiBleHRlcm5h
bCBidWZmZXIgYXJlYSwgZGVwZW5kaW5nIG9uCi0gKiB3aGV0aGVyIE1fRVhUIGlzIHNldCkuCi0g
Ki8KLSNkZWZpbmUJTV9XUklUQUJMRShtKQkoISgobSktPm1fZmxhZ3MgJiBNX1JET05MWSkgJiYJ
CQlcCi0JCQkgKCEoKChtKS0+bV9mbGFncyAmIE1fRVhUKSkgfHwJCQlcCi0JCQkgKCooKG0pLT5t
X2V4dC5yZWZfY250KSA9PSAxKSkgKQkJXAotCi0KLS8qCi0gKiBDb21wdXRlIHRoZSBhbW91bnQg
b2Ygc3BhY2UgYXZhaWxhYmxlIGJlZm9yZSB0aGUgY3VycmVudCBzdGFydCBvZiBkYXRhIGluCi0g
KiBhbiBtYnVmLgotICoKLSAqIFRoZSBNX1dSSVRBQkxFKCkgaXMgYSB0ZW1wb3JhcnksIGNvbnNl
cnZhdGl2ZSBzYWZldHkgbWVhc3VyZTogdGhlIGJ1cmRlbgotICogb2YgY2hlY2tpbmcgd3JpdGFi
aWxpdHkgb2YgdGhlIG1idWYgZGF0YSBhcmVhIHJlc3RzIHNvbGVseSB3aXRoIHRoZSBjYWxsZXIu
Ci0gKi8KLSNkZWZpbmUJTV9MRUFESU5HU1BBQ0UobSkJCQkJCQlcCi0JKChtKS0+bV9mbGFncyAm
IE1fRVhUID8JCQkJCQlcCi0JICAgIChNX1dSSVRBQkxFKG0pID8gKG0pLT5tX2RhdGEgLSAobSkt
Pm1fZXh0LmV4dF9idWYgOiAwKToJXAotCSAgICAobSktPm1fZmxhZ3MgJiBNX1BLVEhEUiA/ICht
KS0+bV9kYXRhIC0gKG0pLT5tX3BrdGRhdCA6CVwKLQkgICAgKG0pLT5tX2RhdGEgLSAobSktPm1f
ZGF0KQotCi0vKgotICogQ29tcHV0ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBhZnRl
ciB0aGUgZW5kIG9mIGRhdGEgaW4gYW4gbWJ1Zi4KLSAqCi0gKiBUaGUgTV9XUklUQUJMRSgpIGlz
IGEgdGVtcG9yYXJ5LCBjb25zZXJ2YXRpdmUgc2FmZXR5IG1lYXN1cmU6IHRoZSBidXJkZW4KLSAq
IG9mIGNoZWNraW5nIHdyaXRhYmlsaXR5IG9mIHRoZSBtYnVmIGRhdGEgYXJlYSByZXN0cyBzb2xl
bHkgd2l0aCB0aGUgY2FsbGVyLgotICovCi0jZGVmaW5lCU1fVFJBSUxJTkdTUEFDRShtKQkJCQkJ
CVwKLQkoKG0pLT5tX2ZsYWdzICYgTV9FWFQgPwkJCQkJCVwKLQkgICAgKE1fV1JJVEFCTEUobSkg
PyAobSktPm1fZXh0LmV4dF9idWYgKyAobSktPm1fZXh0LmV4dF9zaXplCVwKLQkJLSAoKG0pLT5t
X2RhdGEgKyAobSktPm1fbGVuKSA6IDApIDoJCQlcCi0JICAgICYobSktPm1fZGF0W01MRU5dIC0g
KChtKS0+bV9kYXRhICsgKG0pLT5tX2xlbikpCi0KLQotCi0vKgotICogQXJyYW5nZSB0byBwcmVw
ZW5kIHNwYWNlIG9mIHNpemUgcGxlbiB0byBtYnVmIG0uICBJZiBhIG5ldyBtYnVmIG11c3QgYmUK
LSAqIGFsbG9jYXRlZCwgaG93IHNwZWNpZmllcyB3aGV0aGVyIHRvIHdhaXQuICBJZiB0aGUgYWxs
b2NhdGlvbiBmYWlscywgdGhlCi0gKiBvcmlnaW5hbCBtYnVmIGNoYWluIGlzIGZyZWVkIGFuZCBt
IGlzIHNldCB0byBOVUxMLgotICovCi0jZGVmaW5lCU1fUFJFUEVORChtLCBwbGVuLCBob3cpIGRv
IHsJCQkJCVwKLQlzdHJ1Y3QgbWJ1ZiAqKl9tbXAgPSAmKG0pOwkJCQkJXAotCXN0cnVjdCBtYnVm
ICpfbW0gPSAqX21tcDsJCQkJCVwKLQlpbnQgX21wbGVuID0gKHBsZW4pOwkJCQkJCVwKLQlpbnQg
X19taG93ID0gKGhvdyk7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChNX0xFQURJTkdTUEFDRShf
bW0pID49IF9tcGxlbikgewkJCQlcCi0JCV9tbS0+bV9kYXRhIC09IF9tcGxlbjsJCQkJCVwKLQkJ
X21tLT5tX2xlbiArPSBfbXBsZW47CQkJCQlcCi0JfSBlbHNlCQkJCQkJCQlcCi0JCV9tbSA9IG1f
cHJlcGVuZChfbW0sIF9tcGxlbiwgX19taG93KTsJCQlcCi0JaWYgKF9tbSAhPSBOVUxMICYmIF9t
bS0+bV9mbGFncyAmIE1fUEtUSERSKQkJCVwKLQkJX21tLT5tX3BrdGhkci5sZW4gKz0gX21wbGVu
OwkJCQlcCi0JKl9tbXAgPSBfbW07CQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLS8qCi0gKiBTZXQg
dGhlIG1fZGF0YSBwb2ludGVyIG9mIGEgbmV3bHktYWxsb2NhdGVkIG1idWYgKG1fZ2V0L01HRVQp
IHRvIHBsYWNlIGFuCi0gKiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBzaXplIGF0IHRoZSBlbmQg
b2YgdGhlIG1idWYsIGxvbmd3b3JkIGFsaWduZWQuCi0gKi8KLSNkZWZpbmUJTV9BTElHTihtLCBs
ZW4pIGRvIHsJCQkJCQlcCi0gICAgICAgIEtBU1NFUlQoISgobSktPm1fZmxhZ3MgJiAoTV9QS1RI
RFJ8TV9FWFQpKSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlczog
TV9BTElHTiBub3Qgbm9ybWFsIG1idWYiLCBfX2Z1bmNfXykpOyAgICAgICAgICAgICBcCi0gICAg
ICAgIEtBU1NFUlQoKG0pLT5tX2RhdGEgPT0gKG0pLT5tX2RhdCwgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlczogTV9BTElHTiBub3QgYSB2aXJnaW4g
bWJ1ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgICBcCi0JKG0pLT5tX2RhdGEgKz0gKE1MRU4gLSAo
bGVuKSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAqIEFz
IGFib3ZlLCBmb3IgbWJ1ZnMgYWxsb2NhdGVkIHdpdGggbV9nZXRoZHIvTUdFVEhEUiBvciBpbml0
aWFsaXplZCBieQotICogTV9EVVAvTU9WRV9QS1RIRFIuCi0gKi8KLSNkZWZpbmUJTUhfQUxJR04o
bSwgbGVuKSBkbyB7CQkJCQkJXAotICAgICAgICBLQVNTRVJUKChtKS0+bV9mbGFncyAmIE1fUEtU
SERSICYmICEoKG0pLT5tX2ZsYWdzICYgTV9FWFQpLCAgICAgXAotICAgICAgICAgICAgICAgICgi
JXM6IE1IX0FMSUdOIG5vdCBQS1RIRFIgbWJ1ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgICAgXAot
ICAgICAgICBLQVNTRVJUKChtKS0+bV9kYXRhID09IChtKS0+bV9wa3RkYXQsICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXM6IE1IX0FMSUdOIG5vdCBhIHZp
cmdpbiBtYnVmIiwgX19mdW5jX18pKTsgICAgICAgICAgXAotCShtKS0+bV9kYXRhICs9IChNSExF
TiAtIChsZW4pKSAmIH4oc2l6ZW9mKGxvbmcpIC0gMSk7CQlcCi19IHdoaWxlICgwKQotCi0jZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcXVldWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcXVl
dWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRmODk5NDkwMjY2MTkwYjhjNzg2
MWFiMDJiMjdmZjczMmIyMTdkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3F1ZXVlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2Mzkg
KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKLSAqCVRoZSBSZWdlbnRz
IG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhl
IG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9R
VUVVRV9IXwotI2RlZmluZQlfVVNFUl9RVUVVRV9IXwotCi0vKgotICogVGhpcyBmaWxlIGRlZmlu
ZXMgZm91ciB0eXBlcyBvZiBkYXRhIHN0cnVjdHVyZXM6IHNpbmdseS1saW5rZWQgbGlzdHMsCi0g
KiBzaW5nbHktbGlua2VkIHRhaWwgcXVldWVzLCBsaXN0cyBhbmQgdGFpbCBxdWV1ZXMuCi0gKgot
ICogQSBzaW5nbHktbGlua2VkIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2luZ2xlIGZvcndhcmQgcG9p
bnRlci4gVGhlIGVsZW1lbnRzCi0gKiBhcmUgc2luZ2x5IGxpbmtlZCBmb3IgbWluaW11bSBzcGFj
ZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQKLSAqIHRoZSBleHBlbnNlIG9m
IE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcgZWxlbWVudHMgY2FuIGJl
Ci0gKiBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50IG9yIGF0IHRo
ZSBoZWFkIG9mIHRoZSBsaXN0LgotICogRWxlbWVudHMgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBo
ZWFkIG9mIHRoZSBsaXN0IHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0Ci0gKiBtYWNybyBmb3IgdGhp
cyBwdXJwb3NlIGZvciBvcHRpbXVtIGVmZmljaWVuY3kuIEEgc2luZ2x5LWxpbmtlZCBsaXN0IG1h
eQotICogb25seSBiZSB0cmF2ZXJzZWQgaW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLiAgU2luZ2x5
LWxpbmtlZCBsaXN0cyBhcmUgaWRlYWwKLSAqIGZvciBhcHBsaWNhdGlvbnMgd2l0aCBsYXJnZSBk
YXRhc2V0cyBhbmQgZmV3IG9yIG5vIHJlbW92YWxzIG9yIGZvcgotICogaW1wbGVtZW50aW5nIGEg
TElGTyBxdWV1ZS4KLSAqCi0gKiBBIHNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZSBpcyBoZWFkZWQg
YnkgYSBwYWlyIG9mIHBvaW50ZXJzLCBvbmUgdG8gdGhlCi0gKiBoZWFkIG9mIHRoZSBsaXN0IGFu
ZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUKLSAq
IHNpbmdseSBsaW5rZWQgZm9yIG1pbmltdW0gc3BhY2UgYW5kIHBvaW50ZXIgbWFuaXB1bGF0aW9u
IG92ZXJoZWFkIGF0IHRoZQotICogZXhwZW5zZSBvZiBPKG4pIHJlbW92YWwgZm9yIGFyYml0cmFy
eSBlbGVtZW50cy4gTmV3IGVsZW1lbnRzIGNhbiBiZSBhZGRlZAotICogdG8gdGhlIGxpc3QgYWZ0
ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9yIGF0IHRo
ZQotICogZW5kIG9mIHRoZSBsaXN0LiBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhl
YWQgb2YgdGhlIHRhaWwgcXVldWUKLSAqIHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0IG1hY3JvIGZv
ciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5jeS4KLSAqIEEgc2luZ2x5LWxpbmtl
ZCB0YWlsIHF1ZXVlIG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rp
b24uCi0gKiBTaW5nbHktbGlua2VkIHRhaWwgcXVldWVzIGFyZSBpZGVhbCBmb3IgYXBwbGljYXRp
b25zIHdpdGggbGFyZ2UgZGF0YXNldHMKLSAqIGFuZCBmZXcgb3Igbm8gcmVtb3ZhbHMgb3IgZm9y
IGltcGxlbWVudGluZyBhIEZJRk8gcXVldWUuCi0gKgotICogQSBsaXN0IGlzIGhlYWRlZCBieSBh
IHNpbmdsZSBmb3J3YXJkIHBvaW50ZXIgKG9yIGFuIGFycmF5IG9mIGZvcndhcmQKLSAqIHBvaW50
ZXJzIGZvciBhIGhhc2ggdGFibGUgaGVhZGVyKS4gVGhlIGVsZW1lbnRzIGFyZSBkb3VibHkgbGlu
a2VkCi0gKiBzbyB0aGF0IGFuIGFyYml0cmFyeSBlbGVtZW50IGNhbiBiZSByZW1vdmVkIHdpdGhv
dXQgYSBuZWVkIHRvCi0gKiB0cmF2ZXJzZSB0aGUgbGlzdC4gTmV3IGVsZW1lbnRzIGNhbiBiZSBh
ZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUKLSAqIG9yIGFmdGVyIGFuIGV4aXN0aW5nIGVsZW1lbnQg
b3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIEEgbGlzdAotICogbWF5IG9ubHkgYmUgdHJhdmVy
c2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KLSAqCi0gKiBBIHRhaWwgcXVldWUgaXMgaGVh
ZGVkIGJ5IGEgcGFpciBvZiBwb2ludGVycywgb25lIHRvIHRoZSBoZWFkIG9mIHRoZQotICogbGlz
dCBhbmQgdGhlIG90aGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiBUaGUgZWxlbWVudHMgYXJl
IGRvdWJseQotICogbGlua2VkIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVsZW1lbnQgY2FuIGJlIHJl
bW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KLSAqIHRyYXZlcnNlIHRoZSBsaXN0LiBOZXcgZWxlbWVu
dHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBvcgotICogYWZ0ZXIgYW4gZXhpc3Rp
bmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9yIGF0IHRoZSBlbmQgb2YKLSAq
IHRoZSBsaXN0LiBBIHRhaWwgcXVldWUgbWF5IGJlIHRyYXZlcnNlZCBpbiBlaXRoZXIgZGlyZWN0
aW9uLgotICoKLSAqIEZvciBkZXRhaWxzIG9uIHRoZSB1c2Ugb2YgdGhlc2UgbWFjcm9zLCBzZWUg
dGhlIHF1ZXVlKDMpIG1hbnVhbCBwYWdlLgotICoKLSAqCi0gKgkJCQlTTElTVAlMSVNUCVNUQUlM
UQlUQUlMUQotICogX0hFQUQJCQkrCSsJKwkrCi0gKiBfSEVBRF9JTklUSUFMSVpFUgkJKwkrCSsJ
KwotICogX0VOVFJZCQkJKwkrCSsJKwotICogX0lOSVQJCQkrCSsJKwkrCi0gKiBfRU1QVFkJCQkr
CSsJKwkrCi0gKiBfRklSU1QJCQkrCSsJKwkrCi0gKiBfTkVYVAkJCSsJKwkrCSsKLSAqIF9QUkVW
CQkJLQktCS0JKwotICogX0xBU1QJCQktCS0JKwkrCi0gKiBfRk9SRUFDSAkJCSsJKwkrCSsKLSAq
IF9GT1JFQUNIX1NBRkUJCSsJKwkrCSsKLSAqIF9GT1JFQUNIX1JFVkVSU0UJCS0JLQktCSsKLSAq
IF9GT1JFQUNIX1JFVkVSU0VfU0FGRQktCS0JLQkrCi0gKiBfSU5TRVJUX0hFQUQJCQkrCSsJKwkr
Ci0gKiBfSU5TRVJUX0JFRk9SRQkJLQkrCS0JKwotICogX0lOU0VSVF9BRlRFUgkJKwkrCSsJKwot
ICogX0lOU0VSVF9UQUlMCQkJLQktCSsJKwotICogX0NPTkNBVAkJCS0JLQkrCSsKLSAqIF9SRU1P
VkVfQUZURVIJCSsJLQkrCS0KLSAqIF9SRU1PVkVfSEVBRAkJCSsJLQkrCS0KLSAqIF9SRU1PVkUJ
CQkrCSsJKwkrCi0gKiBfU1dBUAkJCSsJKwkrCSsKLSAqCi0gKi8KLSNpZmRlZiBRVUVVRV9NQUNS
T19ERUJVRwotLyogU3RvcmUgdGhlIGxhc3QgMiBwbGFjZXMgdGhlIHF1ZXVlIGVsZW1lbnQgb3Ig
aGVhZCB3YXMgYWx0ZXJlZCAqLwotc3RydWN0IHFtX3RyYWNlIHsKLQljaGFyICogbGFzdGZpbGU7
Ci0JaW50IGxhc3RsaW5lOwotCWNoYXIgKiBwcmV2ZmlsZTsKLQlpbnQgcHJldmxpbmU7Ci19Owot
Ci0jZGVmaW5lCVRSQUNFQlVGCXN0cnVjdCBxbV90cmFjZSB0cmFjZTsKLSNkZWZpbmUJVFJBU0hJ
VCh4KQlkbyB7KHgpID0gKHZvaWQgKiktMTt9IHdoaWxlICgwKQotI2RlZmluZQlRTURfU0FWRUxJ
TksobmFtZSwgbGluaykJdm9pZCAqKm5hbWUgPSAodm9pZCAqKSYobGluaykKLQotI2RlZmluZQlR
TURfVFJBQ0VfSEVBRChoZWFkKSBkbyB7CQkJCQlcCi0JKGhlYWQpLT50cmFjZS5wcmV2bGluZSA9
IChoZWFkKS0+dHJhY2UubGFzdGxpbmU7CQlcCi0JKGhlYWQpLT50cmFjZS5wcmV2ZmlsZSA9ICho
ZWFkKS0+dHJhY2UubGFzdGZpbGU7CQlcCi0JKGhlYWQpLT50cmFjZS5sYXN0bGluZSA9IF9fTElO
RV9fOwkJCQlcCi0JKGhlYWQpLT50cmFjZS5sYXN0ZmlsZSA9IF9fRklMRV9fOwkJCQlcCi19IHdo
aWxlICgwKQotCi0jZGVmaW5lCVFNRF9UUkFDRV9FTEVNKGVsZW0pIGRvIHsJCQkJCVwKLQkoZWxl
bSktPnRyYWNlLnByZXZsaW5lID0gKGVsZW0pLT50cmFjZS5sYXN0bGluZTsJCVwKLQkoZWxlbSkt
PnRyYWNlLnByZXZmaWxlID0gKGVsZW0pLT50cmFjZS5sYXN0ZmlsZTsJCVwKLQkoZWxlbSktPnRy
YWNlLmxhc3RsaW5lID0gX19MSU5FX187CQkJCVwKLQkoZWxlbSktPnRyYWNlLmxhc3RmaWxlID0g
X19GSUxFX187CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbHNlCi0jZGVmaW5lCVFNRF9UUkFDRV9F
TEVNKGVsZW0pCi0jZGVmaW5lCVFNRF9UUkFDRV9IRUFEKGhlYWQpCi0jZGVmaW5lCVFNRF9TQVZF
TElOSyhuYW1lLCBsaW5rKQotI2RlZmluZQlUUkFDRUJVRgotI2RlZmluZQlUUkFTSElUKHgpCi0j
ZW5kaWYJLyogUVVFVUVfTUFDUk9fREVCVUcgKi8KLQotLyoKLSAqIFNpbmdseS1saW5rZWQgTGlz
dCBkZWNsYXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUJU0xJU1RfSEVBRChuYW1lLCB0eXBlKQkJCQkJ
CVwKLXN0cnVjdCBuYW1lIHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdHlwZSAqc2xoX2ZpcnN0OwkvKiBm
aXJzdCBlbGVtZW50ICovCQkJXAotfQotCi0jZGVmaW5lCVNMSVNUX0hFQURfSU5JVElBTElaRVIo
aGVhZCkJCQkJCVwKLQl7IE5VTEwgfQotCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKLSNpZiBkZWZpbmVkIChTTElTVF9FTlRSWSkKLSN1bmRlZiBTTElTVF9FTlRSWQotI2Vu
ZGlmCi0jZW5kaWYKLQotI2RlZmluZQlTTElTVF9FTlRSWSh0eXBlKQkJCQkJCVwKLXN0cnVjdCB7
CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnNsZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlc
Ci19Ci0KLS8qCi0gKiBTaW5nbHktbGlua2VkIExpc3QgZnVuY3Rpb25zLgotICovCi0jZGVmaW5l
CVNMSVNUX0VNUFRZKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCA9PSBOVUxMKQotCi0jZGVmaW5l
CVNMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCkKLQotI2RlZmluZQlTTElTVF9G
T1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCi0JZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNU
KChoZWFkKSk7CQkJCVwKLQkgICAgKHZhcik7CQkJCQkJCVwKLQkgICAgKHZhcikgPSBTTElTVF9O
RVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJU0xJU1RfRk9SRUFDSF9TQUZFKHZhciwgaGVh
ZCwgZmllbGQsIHR2YXIpCQkJXAotCWZvciAoKHZhcikgPSBTTElTVF9GSVJTVCgoaGVhZCkpOwkJ
CQlcCi0JICAgICh2YXIpICYmICgodHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEp
OwkJXAotCSAgICAodmFyKSA9ICh0dmFyKSkKLQotI2RlZmluZQlTTElTVF9GT1JFQUNIX1BSRVZQ
VFIodmFyLCB2YXJwLCBoZWFkLCBmaWVsZCkJCQlcCi0JZm9yICgodmFycCkgPSAmU0xJU1RfRklS
U1QoKGhlYWQpKTsJCQkJXAotCSAgICAoKHZhcikgPSAqKHZhcnApKSAhPSBOVUxMOwkJCQkJXAot
CSAgICAodmFycCkgPSAmU0xJU1RfTkVYVCgodmFyKSwgZmllbGQpKQotCi0jZGVmaW5lCVNMSVNU
X0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKLQlTTElTVF9GSVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJ
CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU0xJU1RfSU5TRVJUX0FGVEVSKHNsaXN0ZWxtLCBl
bG0sIGZpZWxkKSBkbyB7CQkJXAotCVNMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IFNMSVNUX05F
WFQoKHNsaXN0ZWxtKSwgZmllbGQpOwlcCi0JU0xJU1RfTkVYVCgoc2xpc3RlbG0pLCBmaWVsZCkg
PSAoZWxtKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTTElTVF9JTlNFUlRfSEVBRCho
ZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCVNMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IFNM
SVNUX0ZJUlNUKChoZWFkKSk7CQkJXAotCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJ
CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU0xJU1RfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSkt
PmZpZWxkLnNsZV9uZXh0KQotCi0jZGVmaW5lCVNMSVNUX1JFTU9WRShoZWFkLCBlbG0sIHR5cGUs
IGZpZWxkKSBkbyB7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRuZXh0LCAoZWxtKS0+ZmllbGQuc2xl
X25leHQpOwkJCVwKLQlpZiAoU0xJU1RfRklSU1QoKGhlYWQpKSA9PSAoZWxtKSkgewkJCQlcCi0J
CVNMSVNUX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKLQl9CQkJCQkJCQlcCi0JZWxz
ZSB7CQkJCQkJCQlcCi0JCXN0cnVjdCB0eXBlICpjdXJlbG0gPSBTTElTVF9GSVJTVCgoaGVhZCkp
OwkJXAotCQl3aGlsZSAoU0xJU1RfTkVYVChjdXJlbG0sIGZpZWxkKSAhPSAoZWxtKSkJCVwKLQkJ
CWN1cmVsbSA9IFNMSVNUX05FWFQoY3VyZWxtLCBmaWVsZCk7CQlcCi0JCVNMSVNUX1JFTU9WRV9B
RlRFUihjdXJlbG0sIGZpZWxkKTsJCQlcCi0JfQkJCQkJCQkJXAotCVRSQVNISVQoKm9sZG5leHQp
OwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0xJU1RfUkVNT1ZFX0FGVEVSKGVsbSwg
ZmllbGQpIGRvIHsJCQkJXAotCVNMSVNUX05FWFQoZWxtLCBmaWVsZCkgPQkJCQkJXAotCSAgICBT
TElTVF9ORVhUKFNMSVNUX05FWFQoZWxtLCBmaWVsZCksIGZpZWxkKTsJCQlcCi19IHdoaWxlICgw
KQotCi0jZGVmaW5lCVNMSVNUX1JFTU9WRV9IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCVwKLQlT
TElTVF9GSVJTVCgoaGVhZCkpID0gU0xJU1RfTkVYVChTTElTVF9GSVJTVCgoaGVhZCkpLCBmaWVs
ZCk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0xJU1RfU1dBUChoZWFkMSwgaGVhZDIsIHR5
cGUpIGRvIHsJCQkJXAotCXN0cnVjdCB0eXBlICpzd2FwX2ZpcnN0ID0gU0xJU1RfRklSU1QoaGVh
ZDEpOwkJCVwKLQlTTElTVF9GSVJTVChoZWFkMSkgPSBTTElTVF9GSVJTVChoZWFkMik7CQkJXAot
CVNMSVNUX0ZJUlNUKGhlYWQyKSA9IHN3YXBfZmlyc3Q7CQkJCVwKLX0gd2hpbGUgKDApCi0KLS8q
Ci0gKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5l
CVNUQUlMUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAotc3RydWN0IG5hbWUgewkJCQkJCQkJXAot
CXN0cnVjdCB0eXBlICpzdHFoX2ZpcnN0Oy8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCi0Jc3RydWN0
IHR5cGUgKipzdHFoX2xhc3Q7LyogYWRkciBvZiBsYXN0IG5leHQgZWxlbWVudCAqLwkJXAotfQot
Ci0jZGVmaW5lCVNUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCi0JeyBOVUxMLCAm
KGhlYWQpLnN0cWhfZmlyc3QgfQotCi0jZGVmaW5lCVNUQUlMUV9FTlRSWSh0eXBlKQkJCQkJCVwK
LXN0cnVjdCB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnN0cWVfbmV4dDsJLyogbmV4dCBlbGVt
ZW50ICovCQkJXAotfQotCi0vKgotICogU2luZ2x5LWxpbmtlZCBUYWlsIHF1ZXVlIGZ1bmN0aW9u
cy4KLSAqLwotI2RlZmluZQlTVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMikgZG8gewkJCQlcCi0J
aWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKLQkJKihoZWFkMSktPnN0cWhfbGFz
dCA9IChoZWFkMiktPnN0cWhfZmlyc3Q7CQlcCi0JCShoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFk
MiktPnN0cWhfbGFzdDsJCVwKLQkJU1RBSUxRX0lOSVQoKGhlYWQyKSk7CQkJCQlcCi0JfQkJCQkJ
CQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTVEFJTFFfRU1QVFkoaGVhZCkJKChoZWFkKS0+
c3RxaF9maXJzdCA9PSBOVUxMKQotCi0jZGVmaW5lCVNUQUlMUV9GSVJTVChoZWFkKQkoKGhlYWQp
LT5zdHFoX2ZpcnN0KQotCi0jZGVmaW5lCVNUQUlMUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQp
CQkJCVwKLQlmb3IoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAotCSAgICh2YXIp
OwkJCQkJCQlcCi0JICAgKHZhcikgPSBTVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpKQotCi0KLSNk
ZWZpbmUJU1RBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKLQlm
b3IgKCh2YXIpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKLQkgICAgKHZhcikgJiYgKCh0
dmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAotCSAgICAodmFyKSA9ICh0
dmFyKSkKLQotI2RlZmluZQlTVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAotCVNUQUlMUV9G
SVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJCVwKLQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFf
RklSU1QoKGhlYWQpKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVNUQUlMUV9JTlNFUlRf
QUZURVIoaGVhZCwgdHFlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKLQlpZiAoKFNUQUlMUV9ORVhU
KChlbG0pLCBmaWVsZCkgPSBTVEFJTFFfTkVYVCgodHFlbG0pLCBmaWVsZCkpID09IE5VTEwpXAot
CQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAotCVNU
QUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSA9IChlbG0pOwkJCQlcCi19IHdoaWxlICgwKQotCi0j
ZGVmaW5lCVNUQUlMUV9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCWlm
ICgoU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpKSA9PSBO
VUxMKQlcCi0JCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7
CQlcCi0JU1RBSUxRX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0K
LSNkZWZpbmUJU1RBSUxRX0lOU0VSVF9UQUlMKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCi0J
U1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IE5VTEw7CQkJCVwKLQkqKGhlYWQpLT5zdHFoX2xh
c3QgPSAoZWxtKTsJCQkJCVwKLQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxt
KSwgZmllbGQpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU1RBSUxRX0xBU1QoaGVhZCwg
dHlwZSwgZmllbGQpCQkJCQlcCi0JKFNUQUlMUV9FTVBUWSgoaGVhZCkpID8JCQkJCQlcCi0JCU5V
TEwgOgkJCQkJCQlcCi0JICAgICAgICAoKHN0cnVjdCB0eXBlICopKHZvaWQgKikJCQkJXAotCQko
KGNoYXIgKikoKGhlYWQpLT5zdHFoX2xhc3QpIC0gX19vZmZzZXRvZihzdHJ1Y3QgdHlwZSwgZmll
bGQpKSkpCi0KLSNkZWZpbmUJU1RBSUxRX05FWFQoZWxtLCBmaWVsZCkJKChlbG0pLT5maWVsZC5z
dHFlX25leHQpCi0KLSNkZWZpbmUJU1RBSUxRX1JFTU9WRShoZWFkLCBlbG0sIHR5cGUsIGZpZWxk
KSBkbyB7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRuZXh0LCAoZWxtKS0+ZmllbGQuc3RxZV9uZXh0
KTsJCQlcCi0JaWYgKFNUQUlMUV9GSVJTVCgoaGVhZCkpID09IChlbG0pKSB7CQkJCVwKLQkJU1RB
SUxRX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKLQl9CQkJCQkJCQlcCi0JZWxzZSB7
CQkJCQkJCQlcCi0JCXN0cnVjdCB0eXBlICpjdXJlbG0gPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJ
CVwKLQkJd2hpbGUgKFNUQUlMUV9ORVhUKGN1cmVsbSwgZmllbGQpICE9IChlbG0pKQkJXAotCQkJ
Y3VyZWxtID0gU1RBSUxRX05FWFQoY3VyZWxtLCBmaWVsZCk7CQlcCi0JCVNUQUlMUV9SRU1PVkVf
QUZURVIoaGVhZCwgY3VyZWxtLCBmaWVsZCk7CQlcCi0JfQkJCQkJCQkJXAotCVRSQVNISVQoKm9s
ZG5leHQpOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU1RBSUxRX1JFTU9WRV9BRlRF
UihoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCWlmICgoU1RBSUxRX05FWFQoZWxtLCBmaWVs
ZCkgPQkJCQkJXAotCSAgICAgU1RBSUxRX05FWFQoU1RBSUxRX05FWFQoZWxtLCBmaWVsZCksIGZp
ZWxkKSkgPT0gTlVMTCkJXAotCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxt
KSwgZmllbGQpOwkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTVEFJTFFfUkVNT1ZFX0hFQUQo
aGVhZCwgZmllbGQpIGRvIHsJCQkJXAotCWlmICgoU1RBSUxRX0ZJUlNUKChoZWFkKSkgPQkJCQkJ
XAotCSAgICAgU1RBSUxRX05FWFQoU1RBSUxRX0ZJUlNUKChoZWFkKSksIGZpZWxkKSkgPT0gTlVM
TCkJCVwKLQkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQlcCi19
IHdoaWxlICgwKQotCi0jZGVmaW5lIFNUQUlMUV9TV0FQKGhlYWQxLCBoZWFkMiwgdHlwZSkgZG8g
ewkJCQlcCi0Jc3RydWN0IHR5cGUgKnN3YXBfZmlyc3QgPSBTVEFJTFFfRklSU1QoaGVhZDEpOwkJ
CVwKLQlzdHJ1Y3QgdHlwZSAqKnN3YXBfbGFzdCA9IChoZWFkMSktPnN0cWhfbGFzdDsJCQlcCi0J
U1RBSUxRX0ZJUlNUKGhlYWQxKSA9IFNUQUlMUV9GSVJTVChoZWFkMik7CQkJXAotCShoZWFkMSkt
PnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfbGFzdDsJCQlcCi0JU1RBSUxRX0ZJUlNUKGhlYWQy
KSA9IHN3YXBfZmlyc3Q7CQkJCVwKLQkoaGVhZDIpLT5zdHFoX2xhc3QgPSBzd2FwX2xhc3Q7CQkJ
CQlcCi0JaWYgKFNUQUlMUV9FTVBUWShoZWFkMSkpCQkJCQlcCi0JCShoZWFkMSktPnN0cWhfbGFz
dCA9ICZTVEFJTFFfRklSU1QoaGVhZDEpOwkJXAotCWlmIChTVEFJTFFfRU1QVFkoaGVhZDIpKQkJ
CQkJXAotCQkoaGVhZDIpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX0ZJUlNUKGhlYWQyKTsJCVwKLX0g
d2hpbGUgKDApCi0KLQotLyoKLSAqIExpc3QgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5lCUxJ
U1RfSEVBRChuYW1lLCB0eXBlKQkJCQkJCVwKLXN0cnVjdCBuYW1lIHsJCQkJCQkJCVwKLQlzdHJ1
Y3QgdHlwZSAqbGhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlcCi19Ci0KLSNkZWZpbmUJ
TElTVF9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCi0JeyBOVUxMIH0KLQotI2RlZmluZQlM
SVNUX0VOVFJZKHR5cGUpCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdHlwZSAq
bGVfbmV4dDsJLyogbmV4dCBlbGVtZW50ICovCQkJXAotCXN0cnVjdCB0eXBlICoqbGVfcHJldjsJ
LyogYWRkcmVzcyBvZiBwcmV2aW91cyBuZXh0IGVsZW1lbnQgKi8JXAotfQotCi0vKgotICogTGlz
dCBmdW5jdGlvbnMuCi0gKi8KLQotI2lmIGRlZmluZWQoSU5WQVJJQU5UUykKLSNkZWZpbmUJUU1E
X0xJU1RfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQkJXAotCWlmIChMSVNUX0ZJUlNU
KChoZWFkKSkgIT0gTlVMTCAmJgkJCQkJXAotCSAgICBMSVNUX0ZJUlNUKChoZWFkKSktPmZpZWxk
LmxlX3ByZXYgIT0JCQkJXAotCSAgICAgJkxJU1RfRklSU1QoKGhlYWQpKSkJCQkJCQlcCi0JCXBh
bmljKCJCYWQgbGlzdCBoZWFkICVwIGZpcnN0LT5wcmV2ICE9IGhlYWQiLCAodm9pZCAqKShoZWFk
KSk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfTkVYVChlbG0sIGZp
ZWxkKSBkbyB7CQkJCQlcCi0JaWYgKExJU1RfTkVYVCgoZWxtKSwgZmllbGQpICE9IE5VTEwgJiYJ
CQkJCVwKLQkgICAgTElTVF9ORVhUKChlbG0pLCBmaWVsZCktPmZpZWxkLmxlX3ByZXYgIT0JCQkJ
XAotCSAgICAgJigoZWxtKS0+ZmllbGQubGVfbmV4dCkpCQkJCQkJXAotCSAgICAgCXBhbmljKCJC
YWQgbGluayBlbG0gJXAgbmV4dC0+cHJldiAhPSBlbG0iLCAodm9pZCAqKShlbG0pKTsJXAotfSB3
aGlsZSAoMCkKLQotI2RlZmluZQlRTURfTElTVF9DSEVDS19QUkVWKGVsbSwgZmllbGQpIGRvIHsJ
CQkJCVwKLQlpZiAoKihlbG0pLT5maWVsZC5sZV9wcmV2ICE9IChlbG0pKQkJCQkJXAotCQlwYW5p
YygiQmFkIGxpbmsgZWxtICVwIHByZXYtPm5leHQgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7CVwK
LX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZQlRTURfTElTVF9DSEVDS19IRUFEKGhlYWQsIGZp
ZWxkKQotI2RlZmluZQlRTURfTElTVF9DSEVDS19ORVhUKGVsbSwgZmllbGQpCi0jZGVmaW5lCVFN
RF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkKLSNlbmRpZiAvKiAoSU5WQVJJQU5UUykgKi8K
LQotI2RlZmluZQlMSVNUX0VNUFRZKGhlYWQpCSgoaGVhZCktPmxoX2ZpcnN0ID09IE5VTEwpCi0K
LSNkZWZpbmUJTElTVF9GSVJTVChoZWFkKQkoKGhlYWQpLT5saF9maXJzdCkKLQotI2RlZmluZQlM
SVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKLQlmb3IgKCh2YXIpID0gTElTVF9G
SVJTVCgoaGVhZCkpOwkJCQlcCi0JICAgICh2YXIpOwkJCQkJCQlcCi0JICAgICh2YXIpID0gTElT
VF9ORVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJTElTVF9GT1JFQUNIX1NBRkUodmFyLCBo
ZWFkLCBmaWVsZCwgdHZhcikJCQlcCi0JZm9yICgodmFyKSA9IExJU1RfRklSU1QoKGhlYWQpKTsJ
CQkJXAotCSAgICAodmFyKSAmJiAoKHR2YXIpID0gTElTVF9ORVhUKCh2YXIpLCBmaWVsZCksIDEp
OwkJXAotCSAgICAodmFyKSA9ICh0dmFyKSkKLQotI2RlZmluZQlMSVNUX0lOSVQoaGVhZCkgZG8g
ewkJCQkJCVwKLQlMSVNUX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAotfSB3aGlsZSAoMCkK
LQotI2RlZmluZQlMSVNUX0lOU0VSVF9BRlRFUihsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJ
XAotCVFNRF9MSVNUX0NIRUNLX05FWFQobGlzdGVsbSwgZmllbGQpOwkJCQlcCi0JaWYgKChMSVNU
X05FWFQoKGVsbSksIGZpZWxkKSA9IExJU1RfTkVYVCgobGlzdGVsbSksIGZpZWxkKSkgIT0gTlVM
TClcCi0JCUxJU1RfTkVYVCgobGlzdGVsbSksIGZpZWxkKS0+ZmllbGQubGVfcHJldiA9CQlcCi0J
CSAgICAmTElTVF9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKLQlMSVNUX05FWFQoKGxpc3RlbG0p
LCBmaWVsZCkgPSAoZWxtKTsJCQkJXAotCShlbG0pLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfTkVY
VCgobGlzdGVsbSksIGZpZWxkKTsJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJTElTVF9JTlNF
UlRfQkVGT1JFKGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCi0JUU1EX0xJU1RfQ0hFQ0tf
UFJFVihsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKLQkoZWxtKS0+ZmllbGQubGVfcHJldiA9IChsaXN0
ZWxtKS0+ZmllbGQubGVfcHJldjsJCVwKLQlMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IChsaXN0
ZWxtKTsJCQkJXAotCSoobGlzdGVsbSktPmZpZWxkLmxlX3ByZXYgPSAoZWxtKTsJCQkJXAotCShs
aXN0ZWxtKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKLX0g
d2hpbGUgKDApCi0KLSNkZWZpbmUJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBk
byB7CQkJCVwKLQlRTURfTElTVF9DSEVDS19IRUFEKChoZWFkKSwgZmllbGQpOwkJCQlcCi0JaWYg
KChMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IExJU1RfRklSU1QoKGhlYWQpKSkgIT0gTlVMTCkJ
XAotCQlMSVNUX0ZJUlNUKChoZWFkKSktPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9ORVhUKChlbG0p
LCBmaWVsZCk7XAotCUxJU1RfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJCQkJXAotCShlbG0pLT5m
aWVsZC5sZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQpKTsJCQlcCi19IHdoaWxlICgwKQotCi0j
ZGVmaW5lCUxJU1RfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLmxlX25leHQpCi0KLSNk
ZWZpbmUJTElTVF9SRU1PVkUoZWxtLCBmaWVsZCkgZG8gewkJCQkJXAotCVFNRF9TQVZFTElOSyhv
bGRuZXh0LCAoZWxtKS0+ZmllbGQubGVfbmV4dCk7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRwcmV2
LCAoZWxtKS0+ZmllbGQubGVfcHJldik7CQkJXAotCVFNRF9MSVNUX0NIRUNLX05FWFQoZWxtLCBm
aWVsZCk7CQkJCVwKLQlRTURfTElTVF9DSEVDS19QUkVWKGVsbSwgZmllbGQpOwkJCQlcCi0JaWYg
KExJU1RfTkVYVCgoZWxtKSwgZmllbGQpICE9IE5VTEwpCQkJCVwKLQkJTElTVF9ORVhUKChlbG0p
LCBmaWVsZCktPmZpZWxkLmxlX3ByZXYgPSAJCVwKLQkJICAgIChlbG0pLT5maWVsZC5sZV9wcmV2
OwkJCQlcCi0JKihlbG0pLT5maWVsZC5sZV9wcmV2ID0gTElTVF9ORVhUKChlbG0pLCBmaWVsZCk7
CQlcCi0JVFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAotCVRSQVNISVQoKm9sZHByZXYpOwkJCQkJ
CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgTElTVF9TV0FQKGhlYWQxLCBoZWFkMiwgdHlwZSwg
ZmllbGQpIGRvIHsJCQlcCi0Jc3RydWN0IHR5cGUgKnN3YXBfdG1wID0gTElTVF9GSVJTVCgoaGVh
ZDEpKTsJCQlcCi0JTElTVF9GSVJTVCgoaGVhZDEpKSA9IExJU1RfRklSU1QoKGhlYWQyKSk7CQkJ
XAotCUxJU1RfRklSU1QoKGhlYWQyKSkgPSBzd2FwX3RtcDsJCQkJCVwKLQlpZiAoKHN3YXBfdG1w
ID0gTElTVF9GSVJTVCgoaGVhZDEpKSkgIT0gTlVMTCkJCQlcCi0JCXN3YXBfdG1wLT5maWVsZC5s
ZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQxKSk7CQlcCi0JaWYgKChzd2FwX3RtcCA9IExJU1Rf
RklSU1QoKGhlYWQyKSkpICE9IE5VTEwpCQkJXAotCQlzd2FwX3RtcC0+ZmllbGQubGVfcHJldiA9
ICZMSVNUX0ZJUlNUKChoZWFkMikpOwkJXAotfSB3aGlsZSAoMCkKLQotLyoKLSAqIFRhaWwgcXVl
dWUgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5lCVRBSUxRX0hFQUQobmFtZSwgdHlwZSkJCQkJ
CQlcCi1zdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnRxaF9maXJzdDsJLyog
Zmlyc3QgZWxlbWVudCAqLwkJCVwKLQlzdHJ1Y3QgdHlwZSAqKnRxaF9sYXN0OwkvKiBhZGRyIG9m
IGxhc3QgbmV4dCBlbGVtZW50ICovCQlcCi0JVFJBQ0VCVUYJCQkJCQkJXAotfQotCi0jZGVmaW5l
CVRBSUxRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKLQl7IE5VTEwsICYoaGVhZCkudHFo
X2ZpcnN0IH0KLQotI2RlZmluZQlUQUlMUV9FTlRSWSh0eXBlKQkJCQkJCVwKLXN0cnVjdCB7CQkJ
CQkJCQlcCi0Jc3RydWN0IHR5cGUgKnRxZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCi0J
c3RydWN0IHR5cGUgKip0cWVfcHJldjsJLyogYWRkcmVzcyBvZiBwcmV2aW91cyBuZXh0IGVsZW1l
bnQgKi8JXAotCVRSQUNFQlVGCQkJCQkJCVwKLX0KLQotLyoKLSAqIFRhaWwgcXVldWUgZnVuY3Rp
b25zLgotICovCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQotI2RlZmluZQlRTURfVEFJTFFfQ0hF
Q0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQkJXAotCWlmICghVEFJTFFfRU1QVFkoaGVhZCkg
JiYJCQkJCQlcCi0JICAgIFRBSUxRX0ZJUlNUKChoZWFkKSktPmZpZWxkLnRxZV9wcmV2ICE9CQkJ
CVwKLQkgICAgICZUQUlMUV9GSVJTVCgoaGVhZCkpKQkJCQkJCVwKLQkJcGFuaWMoIkJhZCB0YWls
cSBoZWFkICVwIGZpcnN0LT5wcmV2ICE9IGhlYWQiLCAodm9pZCAqKShoZWFkKSk7CVwKLX0gd2hp
bGUgKDApCi0KLSNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1RBSUwoaGVhZCwgZmllbGQpIGRvIHsJ
CQkJCVwKLQlpZiAoKihoZWFkKS0+dHFoX2xhc3QgIT0gTlVMTCkJCQkJCQlcCi0JICAgIAlwYW5p
YygiQmFkIHRhaWxxIE5FWFQoJXAtPnRxaF9sYXN0KSAhPSBOVUxMIiwgKHZvaWQgKikoaGVhZCkp
OyAJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfTkVYVChlbG0sIGZp
ZWxkKSBkbyB7CQkJCQlcCi0JaWYgKFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSAhPSBOVUxMICYm
CQkJCQlcCi0JICAgIFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQudHFlX3ByZXYgIT0J
CQkJXAotCSAgICAgJigoZWxtKS0+ZmllbGQudHFlX25leHQpKQkJCQkJCVwKLQkJcGFuaWMoIkJh
ZCBsaW5rIGVsbSAlcCBuZXh0LT5wcmV2ICE9IGVsbSIsICh2b2lkICopKGVsbSkpOwlcCi19IHdo
aWxlICgwKQotCi0jZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmllbGQpIGRvIHsJ
CQkJCVwKLQlpZiAoKihlbG0pLT5maWVsZC50cWVfcHJldiAhPSAoZWxtKSkJCQkJCVwKLQkJcGFu
aWMoIkJhZCBsaW5rIGVsbSAlcCBwcmV2LT5uZXh0ICE9IGVsbSIsICh2b2lkICopKGVsbSkpOwlc
Ci19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX0hFQUQoaGVhZCwg
ZmllbGQpCi0jZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19UQUlMKGhlYWQsIGhlYWRuYW1lKQotI2Rl
ZmluZQlRTURfVEFJTFFfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKQotI2RlZmluZQlRTURfVEFJTFFf
Q0hFQ0tfUFJFVihlbG0sIGZpZWxkKQotI2VuZGlmIC8qIChJTlZBUklBTlRTKSAqLwotCi0jZGVm
aW5lCVRBSUxRX0NPTkNBVChoZWFkMSwgaGVhZDIsIGZpZWxkKSBkbyB7CQkJCVwKLQlpZiAoIVRB
SUxRX0VNUFRZKGhlYWQyKSkgewkJCQkJXAotCQkqKGhlYWQxKS0+dHFoX2xhc3QgPSAoaGVhZDIp
LT50cWhfZmlyc3Q7CQlcCi0JCShoZWFkMiktPnRxaF9maXJzdC0+ZmllbGQudHFlX3ByZXYgPSAo
aGVhZDEpLT50cWhfbGFzdDsJXAotCQkoaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9s
YXN0OwkJCVwKLQkJVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwKLQkJUU1EX1RSQUNFX0hFQUQo
aGVhZDEpOwkJCQkJXAotCQlRTURfVFJBQ0VfSEVBRChoZWFkMik7CQkJCQlcCi0JfQkJCQkJCQkJ
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlUQUlMUV9FTVBUWShoZWFkKQkoKGhlYWQpLT50cWhf
Zmlyc3QgPT0gTlVMTCkKLQotI2RlZmluZQlUQUlMUV9GSVJTVChoZWFkKQkoKGhlYWQpLT50cWhf
Zmlyc3QpCi0KLSNkZWZpbmUJVEFJTFFfRk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAot
CWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCi0JICAgICh2YXIpOwkJCQkJ
CQlcCi0JICAgICh2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpKQotCi0jZGVmaW5lCVRB
SUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJCVwKLQlmb3IgKCh2YXIp
ID0gVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAotCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJ
TFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKLQkgICAgKHZhcikgPSAodHZhcikpCi0KLSNk
ZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkKQkJ
XAotCWZvciAoKHZhcikgPSBUQUlMUV9MQVNUKChoZWFkKSwgaGVhZG5hbWUpOwkJCVwKLQkgICAg
KHZhcik7CQkJCQkJCVwKLQkgICAgKHZhcikgPSBUQUlMUV9QUkVWKCh2YXIpLCBoZWFkbmFtZSwg
ZmllbGQpKQotCi0jZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRV9TQUZFKHZhciwgaGVhZCwg
aGVhZG5hbWUsIGZpZWxkLCB0dmFyKQlcCi0JZm9yICgodmFyKSA9IFRBSUxRX0xBU1QoKGhlYWQp
LCBoZWFkbmFtZSk7CQkJXAotCSAgICAodmFyKSAmJiAoKHR2YXIpID0gVEFJTFFfUFJFVigodmFy
KSwgaGVhZG5hbWUsIGZpZWxkKSwgMSk7CVwKLQkgICAgKHZhcikgPSAodHZhcikpCi0KLSNkZWZp
bmUJVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAotCVRBSUxRX0ZJUlNUKChoZWFkKSkgPSBO
VUxMOwkJCQkJXAotCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfRklSU1QoKGhlYWQpKTsJCQlc
Ci0JUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlU
QUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAotCVFN
RF9UQUlMUV9DSEVDS19ORVhUKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAotCWlmICgoVEFJTFFfTkVY
VCgoZWxtKSwgZmllbGQpID0gVEFJTFFfTkVYVCgobGlzdGVsbSksIGZpZWxkKSkgIT0gTlVMTClc
Ci0JCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQudHFlX3ByZXYgPSAJCVwKLQkJICAg
ICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKLQllbHNlIHsJCQkJCQkJCVwKLQkJKGhl
YWQpLT50cWhfbGFzdCA9ICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCi0JCVFNRF9UUkFD
RV9IRUFEKGhlYWQpOwkJCQkJXAotCX0JCQkJCQkJCVwKLQlUQUlMUV9ORVhUKChsaXN0ZWxtKSwg
ZmllbGQpID0gKGVsbSk7CQkJCVwKLQkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFfTkVY
VCgobGlzdGVsbSksIGZpZWxkKTsJCVwKLQlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJ
CQkJCVwKLQlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQpOwkJCQlcCi19IHdoaWxlICgw
KQotCi0jZGVmaW5lCVRBSUxRX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8g
ewkJCVwKLQlRTURfVEFJTFFfQ0hFQ0tfUFJFVihsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKLQkoZWxt
KS0+ZmllbGQudHFlX3ByZXYgPSAobGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2OwkJXAotCVRBSUxR
X05FWFQoKGVsbSksIGZpZWxkKSA9IChsaXN0ZWxtKTsJCQkJXAotCSoobGlzdGVsbSktPmZpZWxk
LnRxZV9wcmV2ID0gKGVsbSk7CQkJCVwKLQkobGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gJlRB
SUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKLQlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxk
KTsJCQkJCVwKLQlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQpOwkJCQlcCi19IHdoaWxl
ICgwKQotCi0jZGVmaW5lCVRBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJ
CQlcCi0JUU1EX1RBSUxRX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQpOwkJCQlcCi0JaWYgKChUQUlM
UV9ORVhUKChlbG0pLCBmaWVsZCkgPSBUQUlMUV9GSVJTVCgoaGVhZCkpKSAhPSBOVUxMKQlcCi0J
CVRBSUxRX0ZJUlNUKChoZWFkKSktPmZpZWxkLnRxZV9wcmV2ID0JCQlcCi0JCSAgICAmVEFJTFFf
TkVYVCgoZWxtKSwgZmllbGQpOwkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQkoaGVhZCktPnRxaF9s
YXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKLQlUQUlMUV9GSVJTVCgoaGVhZCkp
ID0gKGVsbSk7CQkJCQlcCi0JKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gJlRBSUxRX0ZJUlNUKCho
ZWFkKSk7CQkJXAotCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJCVwKLQlRTURfVFJBQ0VfRUxF
TSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJVEFJTFFfSU5T
RVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKLQlRTURfVEFJTFFfQ0hFQ0tfVEFJ
TChoZWFkLCBmaWVsZCk7CQkJCVwKLQlUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBOVUxMOwkJ
CQlcCi0JKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGhlYWQpLT50cWhfbGFzdDsJCQlcCi0JKiho
ZWFkKS0+dHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKLQkoaGVhZCktPnRxaF9sYXN0ID0gJlRBSUxR
X05FWFQoKGVsbSksIGZpZWxkKTsJCQlcCi0JUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAot
CVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2Rl
ZmluZQlUQUlMUV9MQVNUKGhlYWQsIGhlYWRuYW1lKQkJCQkJXAotCSgqKCgoc3RydWN0IGhlYWRu
YW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKQotCi0jZGVmaW5lCVRBSUxRX05F
WFQoZWxtLCBmaWVsZCkgKChlbG0pLT5maWVsZC50cWVfbmV4dCkKLQotI2RlZmluZQlUQUlMUV9Q
UkVWKGVsbSwgaGVhZG5hbWUsIGZpZWxkKQkJCQlcCi0JKCooKChzdHJ1Y3QgaGVhZG5hbWUgKiko
KGVsbSktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkKLQotI2RlZmluZQlUQUlMUV9SRU1P
VkUoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCi0JUU1EX1NBVkVMSU5LKG9sZG5leHQsIChl
bG0pLT5maWVsZC50cWVfbmV4dCk7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRwcmV2LCAoZWxtKS0+
ZmllbGQudHFlX3ByZXYpOwkJCVwKLQlRTURfVEFJTFFfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKTsJ
CQkJXAotCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmllbGQpOwkJCQlcCi0JaWYgKChUQUlM
UV9ORVhUKChlbG0pLCBmaWVsZCkpICE9IE5VTEwpCQkJCVwKLQkJVEFJTFFfTkVYVCgoZWxtKSwg
ZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJXAotCQkgICAgKGVsbSktPmZpZWxkLnRxZV9wcmV2
OwkJCQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCShoZWFkKS0+dHFoX2xhc3QgPSAoZWxtKS0+Zmll
bGQudHFlX3ByZXY7CQlcCi0JCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJXAotCX0JCQkJCQkJ
CVwKLQkqKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJ
XAotCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKLQlUUkFTSElUKCpvbGRwcmV2KTsJCQkJCQlc
Ci0JUU1EX1RSQUNFX0VMRU0oJihlbG0pLT5maWVsZCk7CQkJCQlcCi19IHdoaWxlICgwKQotCi0j
ZGVmaW5lIFRBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKLQlz
dHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IChoZWFkMSktPnRxaF9maXJzdDsJCQlcCi0Jc3RydWN0
IHR5cGUgKipzd2FwX2xhc3QgPSAoaGVhZDEpLT50cWhfbGFzdDsJCQlcCi0JKGhlYWQxKS0+dHFo
X2ZpcnN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0OwkJCVwKLQkoaGVhZDEpLT50cWhfbGFzdCA9ICho
ZWFkMiktPnRxaF9sYXN0OwkJCQlcCi0JKGhlYWQyKS0+dHFoX2ZpcnN0ID0gc3dhcF9maXJzdDsJ
CQkJXAotCShoZWFkMiktPnRxaF9sYXN0ID0gc3dhcF9sYXN0OwkJCQkJXAotCWlmICgoc3dhcF9m
aXJzdCA9IChoZWFkMSktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCi0JCXN3YXBfZmlyc3QtPmZp
ZWxkLnRxZV9wcmV2ID0gJihoZWFkMSktPnRxaF9maXJzdDsJXAotCWVsc2UJCQkJCQkJCVwKLQkJ
KGhlYWQxKS0+dHFoX2xhc3QgPSAmKGhlYWQxKS0+dHFoX2ZpcnN0OwkJXAotCWlmICgoc3dhcF9m
aXJzdCA9IChoZWFkMiktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCi0JCXN3YXBfZmlyc3QtPmZp
ZWxkLnRxZV9wcmV2ID0gJihoZWFkMiktPnRxaF9maXJzdDsJXAotCWVsc2UJCQkJCQkJCVwKLQkJ
KGhlYWQyKS0+dHFoX2xhc3QgPSAmKGhlYWQyKS0+dHFoX2ZpcnN0OwkJXAotfSB3aGlsZSAoMCkK
LQotI2VuZGlmIC8qICFfU1lTX1FVRVVFX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2Vy
X3JlY3ZfdGhyZWFkLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGIxYTlkMDExMmU0NGRhN2VkMzViNmVhOWY4MDA0OWViZmUxZjA1
OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNlcl9yZWN2X3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTUzMiArMCwwIEBACi0v
Ki0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEJyYWQgUGVub2ZmCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDktMjAxMCBIdW1haXJhIEthbWFsCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBJ
cmVuZSBSdWVuZ2VsZXIKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVu
Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
Ci0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBk
ZWZpbmVkKElORVQ2KQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxwdGhyZWFkLmg+Ci0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19GcmVlQlNEKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCi0jaW5j
bHVkZSA8c3lzL3Vpby5oPgotI2Vsc2UKLSNpbmNsdWRlIDx1c2VyX2lwNl92YXIuaD4KLSNlbmRp
ZgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfaW5wdXQuaD4KLSNpZiAwCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19M
aW51eCkKLSNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaWZkZWYgSEFWRV9MSU5VWF9JRl9B
RERSX0gKLSNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX0xJ
TlVYX1JUTkVUTElOS19ICi0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+Ci0jZW5kaWYKLSNl
bmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Zy
ZWVCU0QpCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0jZW5kaWYKLS8qIGxvY2FsIG1hY3JvcyBh
bmQgZGF0YXR5cGVzIHVzZWQgdG8gZ2V0IElQIGFkZHJlc3NlcyBzeXN0ZW0gaW5kZXBlbmRlbnRs
eSAqLwotI2lmICFkZWZpbmVkKElQX1BLVElORk8gKSAmJiAhIGRlZmluZWQoSVBfUkVDVkRTVEFE
RFIpCi0jIGVycm9yICJDYW4ndCBkZXRlcm1pbmUgc29ja2V0IG9wdGlvbiB0byB1c2UgdG8gZ2V0
IFVEUCBJUCIKLSNlbmRpZgotCi12b2lkIHJlY3ZfdGhyZWFkX2Rlc3Ryb3kodm9pZCk7Ci0jZGVm
aW5lIE1BWExFTl9NQlVGX0NIQUlOIDMyIC8qIFdoYXQgc2hvdWxkIHRoaXMgdmFsdWUgYmU/ICov
Ci0jZGVmaW5lIFJPVU5EVVAoYSwgc2l6ZSkgKCgoYSkgJiAoKHNpemUpLTEpKSA/ICgxICsgKChh
KSB8ICgoc2l6ZSktMSkpKSA6IChhKSkKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Rhcndp
bikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfRnJlZUJTRCkKLSNkZWZpbmUgTkVYVF9TQShhcCkgYXAgPSAoc3RydWN0IHNvY2th
ZGRyICopIFwKLQkoKGNhZGRyX3QpIGFwICsgKGFwLT5zYV9sZW4gPyBST1VORFVQKGFwLT5zYV9s
ZW4sIHNpemVvZiAodWludDMyX3QpKSA6IHNpemVvZih1aW50MzJfdCkpKQotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLXN0YXRpYyB2
b2lkCi1zY3RwX2dldF9ydGFkZHJzKGludCBhZGRycywgc3RydWN0IHNvY2thZGRyICpzYSwgc3Ry
dWN0IHNvY2thZGRyICoqcnRpX2luZm8pCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwg
UlRBWF9NQVg7IGkrKykgewotCQlpZiAoYWRkcnMgJiAoMSA8PCBpKSkgewotCQkJcnRpX2luZm9b
aV0gPSBzYTsKLQkJCU5FWFRfU0Eoc2EpOwotCQl9IGVsc2UgewotCQkJcnRpX2luZm9baV0gPSBO
VUxMOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5kbGVfaWZhbXNnKHVuc2ln
bmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsIHN0cnVjdCBzb2NrYWRkciAqc2Ep
Ci17Ci0JaW50IHJjOwotCXN0cnVjdCBpZmFkZHJzICppZmEsICppZmFzOwotCi0JLyogaGFuZGxl
IG9ubHkgdGhlIHR5cGVzIHdlIHdhbnQgKi8KLQlpZiAoKHR5cGUgIT0gUlRNX05FV0FERFIpICYm
ICh0eXBlICE9IFJUTV9ERUxBRERSKSkgewotCQlyZXR1cm47Ci0JfQotCi0JcmMgPSBnZXRpZmFk
ZHJzKCZpZmFzKTsKLQlpZiAocmMgIT0gMCkgewotCQlyZXR1cm47Ci0JfQotCWZvciAoaWZhID0g
aWZhczsgaWZhOyBpZmEgPSBpZmEtPmlmYV9uZXh0KSB7Ci0JCWlmIChpbmRleCA9PSBpZl9uYW1l
dG9pbmRleChpZmEtPmlmYV9uYW1lKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKGlmYSA9
PSBOVUxMKSB7Ci0JCWZyZWVpZmFkZHJzKGlmYXMpOwotCQlyZXR1cm47Ci0JfQotCi0JLyogcmVs
YXkgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgY2hhbmdlIHRvIHRoZSBiYXNlIGNvZGUgKi8KLQlp
ZiAodHlwZSA9PSBSVE1fTkVXQUREUikgewotCQkodm9pZClzY3RwX2FkZF9hZGRyX3RvX3ZyZihT
Q1RQX0RFRkFVTFRfVlJGSUQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4KGlmYS0+aWZhX25hbWUp
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZmEtPmlmYV9uYW1lLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzYSwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7Ci0JfSBlbHNlIHsK
LQkJc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsIGlmYS0+aWZhX2Fk
ZHIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZfbmFtZXRvaW5kZXgoaWZhLT5pZmFfbmFt
ZSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSk7Ci0JfQotCWZyZWVp
ZmFkZHJzKGlmYXMpOwotfQotCi1zdGF0aWMgdm9pZCAqCi1yZWN2X2Z1bmN0aW9uX3JvdXRlKHZv
aWQgKmFyZykKLXsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaWZhX21zZ2hkciAqaWZhOwotCWNo
YXIgcnRfYnVmZmVyWzEwMjRdOwotCXN0cnVjdCBzb2NrYWRkciAqc2EsICpydGlfaW5mb1tSVEFY
X01BWF07Ci0KLQlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUCBhZGRyIG1vbiIp
OwotCi0Jd2hpbGUgKDEpIHsKLQkJbWVtc2V0KHJ0X2J1ZmZlciwgMCwgc2l6ZW9mKHJ0X2J1ZmZl
cikpOwotCQlyZXQgPSByZWN2KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSwgcnRfYnVm
ZmVyLCBzaXplb2YocnRfYnVmZmVyKSwgMCk7Ci0KLQkJaWYgKHJldCA+IDApIHsKLQkJCWlmYSA9
IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBydF9idWZmZXI7Ci0JCQlpZiAoaWZhLT5pZmFtX3R5cGUg
IT0gUlRNX0RFTEFERFIgJiYgaWZhLT5pZmFtX3R5cGUgIT0gUlRNX05FV0FERFIpIHsKLQkJCQlj
b250aW51ZTsKLQkJCX0KLQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoaWZhICsgMSk7Ci0J
CQlzY3RwX2dldF9ydGFkZHJzKGlmYS0+aWZhbV9hZGRycywgc2EsIHJ0aV9pbmZvKTsKLQkJCXN3
aXRjaCAoaWZhLT5pZmFtX3R5cGUpIHsKLQkJCWNhc2UgUlRNX0RFTEFERFI6Ci0JCQljYXNlIFJU
TV9ORVdBRERSOgotCQkJCXNjdHBfaGFuZGxlX2lmYW1zZyhpZmEtPmlmYW1fdHlwZSwgaWZhLT5p
ZmFtX2luZGV4LCBydGlfaW5mb1tSVEFYX0lGQV0pOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoK
LQkJCQkvKiBpZ25vcmUgdGhpcyByb3V0aW5nIGV2ZW50ICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0J
CX0KLQkJaWYgKHJldCA8IDApIHsKLQkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKLQkJCQljb250
aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChO
VUxMKTsKLX0KLSNlbmRpZgotCi0jaWYgMAotLyogVGhpcyBkb2VzIG5vdCB5ZXQgd29yayBvbiBM
aW51eCAqLwotc3RhdGljIHZvaWQgKgotcmVjdl9mdW5jdGlvbl9yb3V0ZSh2b2lkICphcmcpCi17
Ci0JaW50IGxlbjsKLQljaGFyIGJ1Zls0MDk2XTsKLQlzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYs
IHNpemVvZihidWYpIH07Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IG5sbXNnaGRyICpu
aDsKLQlzdHJ1Y3QgaWZhZGRybXNnICpydG1zZzsKLQlzdHJ1Y3QgcnRhdHRyICpydGF0cDsKLQlz
dHJ1Y3QgaW5fYWRkciAqaW5wOwotCXN0cnVjdCBzb2NrYWRkcl9ubCBzYW5sOwotI2lmZGVmIElO
RVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzYTY7Ci0jZW5kaWYKLQotCWZvciAoOzspIHsKLQkJbWVtc2V0KCZz
YW5sLCAwLCBzaXplb2Yoc2FubCkpOwotCQlzYW5sLm5sX2ZhbWlseSA9IEFGX05FVExJTks7Ci0J
CXNhbmwubmxfZ3JvdXBzID0gUlRNR1JQX0lQVjZfSUZBRERSIHwgUlRNR1JQX0lQVjRfSUZBRERS
OwotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKLQkJbXNnLm1zZ19u
YW1lID0gKHZvaWQgKikmc2FubDsKLQkJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHNhbmwpOwot
CQltc2cubXNnX2lvdiA9ICZpb3Y7Ci0JCW1zZy5tc2dfaW92bGVuID0gMTsKLQkJbXNnLm1zZ19j
b250cm9sID0gTlVMTDsKLQkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQotCQlsZW4gPSByZWN2
bXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSwgJm1zZywgMCk7Ci0KLQkJaWYgKGxl
biA8IDApIHsKLQkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKLQkJCQljb250aW51ZTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJZm9yIChuaCA9IChzdHJ1Y3Qgbmxtc2do
ZHIgKikgYnVmOyBOTE1TR19PSyAobmgsIGxlbik7Ci0JCQluaCA9IE5MTVNHX05FWFQgKG5oLCBs
ZW4pKSB7Ci0JCQlpZiAobmgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKLQkJCQlicmVhazsK
LQotCQkJaWYgKG5oLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IG5oLT5ubG1zZ190eXBl
ID09IFJUTV9ERUxBRERSKSB7Ci0JCQkJcnRtc2cgPSAoc3RydWN0IGlmYWRkcm1zZyAqKU5MTVNH
X0RBVEEobmgpOwotCQkJCXJ0YXRwID0gKHN0cnVjdCBydGF0dHIgKilJRkFfUlRBKHJ0bXNnKTsK
LQkJCQlpZiAocnRhdHAtPnJ0YV90eXBlID09IElGQV9BRERSRVNTKSB7Ci0JCQkJCWlucCA9IChz
dHJ1Y3QgaW5fYWRkciAqKVJUQV9EQVRBKHJ0YXRwKTsKLQkJCQkJc3dpdGNoIChydG1zZy0+aWZh
X2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQkJY2FzZSBBRl9JTkVUOgotCQkJCQkJc2EgPSAo
c3RydWN0IHNvY2thZGRyX2luICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
LQkJCQkJCXNhLT5zaW5fZmFtaWx5ID0gcnRtc2ctPmlmYV9mYW1pbHk7Ci0JCQkJCQlzYS0+c2lu
X3BvcnQgPSAwOwotCQkJCQkJbWVtY3B5KCZzYS0+c2luX2FkZHIsIGlucCwgc2l6ZW9mKHN0cnVj
dCBpbl9hZGRyKSk7Ci0JCQkJCQlzY3RwX2hhbmRsZV9pZmFtc2cobmgtPm5sbXNnX3R5cGUsIHJ0
bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qgc29ja2FkZHIgKilzYSk7Ci0JCQkJCQlicmVhazsKLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCQlzYTYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwot
CQkJCQkJc2E2LT5zaW42X2ZhbWlseSA9IHJ0bXNnLT5pZmFfZmFtaWx5OwotCQkJCQkJc2E2LT5z
aW42X3BvcnQgPSAwOwotCQkJCQkJbWVtY3B5KCZzYTYtPnNpbjZfYWRkciwgaW5wLCBzaXplb2Yo
c3RydWN0IGluNl9hZGRyKSk7Ci0JCQkJCQlzY3RwX2hhbmRsZV9pZmFtc2cobmgtPm5sbXNnX3R5
cGUsIHJ0bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qgc29ja2FkZHIgKilzYTYpOwotCQkJCQkJYnJl
YWs7Ci0jZW5kaWYKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1Is
ICJBZGRyZXNzIGZhbWlseSAlZCBub3Qgc3VwcG9ydGVkLlxuIiwgcnRtc2ctPmlmYV9mYW1pbHkp
OwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChO
VUxMKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgSU5FVAotc3RhdGljIHZvaWQgKgotcmVjdl9mdW5j
dGlvbl9yYXcodm9pZCAqYXJnKQotewotCXN0cnVjdCBtYnVmICoqcmVjdm1idWY7Ci0Jc3RydWN0
IGlwICppcGhkcjsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0JdWludDE2X3QgcG9ydDsKLQlpbnQg
b2Zmc2V0LCBlY24gPSAwOwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCWludCBj
b21wdXRlX2NyYyA9IDE7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7Ci0Jc3Ry
dWN0IHNvY2thZGRyX2luIHNyYywgZHN0OwotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dp
bmRvd3MpCi0JdW5zaWduZWQgaW50IG5jb3VudGVyOwotCXN0cnVjdCBtc2doZHIgbXNnOwotCXN0
cnVjdCBpb3ZlYyByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKLSNlbHNlCi0JV1NBQlVG
IHJlY3ZfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOwotCWludCBuUmVzdWx0LCBtX0Vycm9yQ29k
ZTsKLQlEV09SRCBmbGFnczsKLQlEV09SRCBuY291bnRlcjsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
ZnJvbTsKLQlpbnQgZnJvbWxlbjsKLSNlbmRpZgotCS8qSW5pdGlhbGx5IHRoZSBlbnRpcmUgc2V0
IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRlZC4KLQkgIHRvX2ZpbGwgaW5kaWNhdGVzIHRoaXMg
YW1vdW50LiAqLwotCWludCB0b19maWxsID0gTUFYTEVOX01CVUZfQ0hBSU47Ci0JLyogaW92bGVu
IGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gKi8KLQlpbnQgaSwgbjsKLQl1
bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7Ci0JaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+
IE1MRU4pPyAxIDogMDsKLQlpbnQgd2FudF9oZWFkZXIgPSAwOwotCi0Jc2N0cF91c2Vyc3BhY2Vf
c2V0X3RocmVhZG5hbWUoIlNDVFAvSVA0IHJjdiIpOwotCi0JbWVtc2V0KCZzcmMsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOwotCi0JcmVjdm1idWYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYnVmICop
ICogTUFYTEVOX01CVUZfQ0hBSU4pOwotCi0Jd2hpbGUgKDEpIHsKLQkJZm9yIChpID0gMDsgaSA8
IHRvX2ZpbGw7IGkrKykgewotCQkJLyogTm90IGdldHRpbmcgdGhlIHBhY2tldCBoZWFkZXIuIFRl
c3RzIHdpdGggY2hhaW4gb2Ygb25lIHJ1bgotCQkJICAgYXMgdXN1YWwgd2l0aG91dCBoYXZpbmcg
dGhlIHBhY2tldCBoZWFkZXIuCi0JCQkgICBIYXZlIHRyaWVkIGJvdGggc2VuZGluZyBhbmQgcmVj
ZWl2aW5nCi0JCQkgKi8KLQkJCXJlY3ZtYnVmW2ldID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlv
dmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4dCwgTVRfREFUQSk7Ci0jaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCXJlY3ZfaW92ZWNbaV0uaW92X2Jhc2Ug
PSAoY2FkZHJfdClyZWN2bWJ1ZltpXS0+bV9kYXRhOwotCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfbGVu
ID0gaW92bGVuOwotI2Vsc2UKLQkJCXJlY3ZfaW92ZWNbaV0uYnVmID0gKGNhZGRyX3QpcmVjdm1i
dWZbaV0tPm1fZGF0YTsKLQkJCXJlY3ZfaW92ZWNbaV0ubGVuID0gaW92bGVuOwotI2VuZGlmCi0J
CX0KLQkJdG9fZmlsbCA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQot
CQlmbGFncyA9IDA7Ci0JCW5jb3VudGVyID0gMDsKLQkJZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOwotCQltZW1zZXQoJmZyb20sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKLQotCQluUmVzdWx0ID0gV1NBUmVjdkZyb20oU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cCksIHJlY3ZfaW92ZWMsIE1BWExFTl9NQlVGX0NIQUlOLCAmbmNvdW50ZXIsICZmbGFn
cywgKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCAmZnJvbWxlbiwgTlVMTCwgTlVMTCk7Ci0JCWlm
IChuUmVzdWx0ICE9IDApIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7Ci0J
CQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9
Ci0JCQlpZiAoKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLKSB8fCAobV9FcnJvckNvZGUgPT0g
V1NBRUlOVFIpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJbiA9IG5jb3VudGVyOwotI2Vs
c2UKLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3QgbXNnaGRyKSk7Ci0JCW1zZy5tc2df
bmFtZSA9IE5VTEw7Ci0JCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JCW1zZy5tc2dfaW92ID0gcmVj
dl9pb3ZlYzsKLQkJbXNnLm1zZ19pb3ZsZW4gPSBNQVhMRU5fTUJVRl9DSEFJTjsKLQkJbXNnLm1z
Z19jb250cm9sID0gTlVMTDsKLQkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKLQkJbmNvdW50ZXIg
PSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgJm1zZywgMCk7
Ci0JCWlmIChuIDwgMCkgewotCQkJaWYgKGVycm5vID09IEVBR0FJTikgewotCQkJCWNvbnRpbnVl
OwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2VuZGlmCi0JCVNDVFBfSEVB
REVSX0xFTihyZWN2bWJ1ZlswXSkgPSBuOyAvKiBsZW5ndGggb2YgdG90YWwgcGFja2V0ICovCi0J
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKLQkJU0NUUF9TVEFUX0lOQ1JfQ09V
TlRFUjY0KHNjdHBzX2lucGFja2V0cyk7Ci0KLQkJaWYgKCh1bnNpZ25lZCBpbnQpbiA8PSBpb3Zs
ZW4pIHsKLQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZlswXSkgPSBuOwotCQkJKHRvX2ZpbGwpKys7
Ci0JCX0gZWxzZSB7Ci0JCQlpID0gMDsKLQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZlswXSkgPSBp
b3ZsZW47Ci0KLQkJCW5jb3VudGVyIC09IGlvdmxlbjsKLQkJCSh0b19maWxsKSsrOwotCQkJZG8g
ewotCQkJCXJlY3ZtYnVmW2ldLT5tX25leHQgPSByZWN2bWJ1ZltpKzFdOwotCQkJCVNDVFBfQlVG
X0xFTihyZWN2bWJ1ZltpXS0+bV9uZXh0KSA9IG1pbihuY291bnRlciwgaW92bGVuKTsKLQkJCQlp
Kys7Ci0JCQkJbmNvdW50ZXIgLT0gaW92bGVuOwotCQkJCSh0b19maWxsKSsrOwotCQkJfSB3aGls
ZSAobmNvdW50ZXIgPiAwKTsKLQkJfQotCi0JCWlwaGRyID0gbXRvZChyZWN2bWJ1ZlswXSwgc3Ry
dWN0IGlwICopOwotCQlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdClpcGhkciArIHNp
emVvZihzdHJ1Y3QgaXApKTsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRy
X3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVj
dCBpcCkgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCWlmIChpcGhkci0+aXBfdG9zICE9
IDApIHsKLQkJCWVjbiA9IGlwaGRyLT5pcF90b3MgJiAweDAyOwotCQl9Ci0KLQkJZHN0LnNpbl9m
YW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlkc3Quc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCWRzdC5zaW5fYWRkciA9IGlwaGRy
LT5pcF9kc3Q7Ci0JCWRzdC5zaW5fcG9ydCA9IHNoLT5kZXN0X3BvcnQ7Ci0KLQkJc3JjLnNpbl9m
YW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzcmMuc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNyYy5zaW5fYWRkciA9IGlwaGRy
LT5pcF9zcmM7Ci0JCXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQotCQkvKiBTQ1RQIGRv
ZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLwotCQlpZiAoSU5fTVVMVElD
QVNUKG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkgewotCQkJbV9mcmVlbShyZWN2bWJ1Zlsw
XSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LnNp
bl9hZGRyLCByZWN2bWJ1ZlswXSkpIHsKLQkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOwotCQkJY29u
dGludWU7Ci0JCX0KLQotCQlwb3J0ID0gMDsKLQotI2lmIGRlZmluZWQoU0NUUF9XSVRIX05PX0NT
VU0pCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0jZWxzZQotCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYmCi0JCSAgICAoKElONF9J
U0xPT1BCQUNLX0FERFJFU1MoJnNyYy5zaW5fYWRkcikgJiYKLQkJICAgICAgSU40X0lTTE9PUEJB
Q0tfQUREUkVTUygmZHN0LnNpbl9hZGRyKSkgfHwKLQkJICAgICAoc3JjLnNpbl9hZGRyLnNfYWRk
ciA9PSBkc3Quc2luX2FkZHIuc19hZGRyKSkpIHsKLQkJCWNvbXB1dGVfY3JjID0gMDsKLQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQl9Ci0jZW5kaWYKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRlcy4iLCBfX2Z1bmNfXywgbik7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5nIHNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmcg
d2l0aCBvZmY9JWRcbiIsIG9mZnNldCk7Ci0JCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmco
JnJlY3ZtYnVmWzBdLCBzaXplb2Yoc3RydWN0IGlwKSwgb2Zmc2V0LCBuLAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NV
TSkKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjbiwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIHBvcnQpOwotCQlpZiAocmVjdm1idWZbMF0p
IHsKLQkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBN
QVhMRU5fTUJVRl9DSEFJTjsgaSsrKSB7Ci0JCW1fZnJlZShyZWN2bWJ1ZltpXSk7Ci0JfQotCS8q
IGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLwotCWZyZWUocmVjdm1idWYpOwotCXJldHVybiAoTlVM
TCk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoSU5FVDYpCi1zdGF0aWMgdm9pZCAqCi1yZWN2
X2Z1bmN0aW9uX3JhdzYodm9pZCAqYXJnKQotewotCXN0cnVjdCBtYnVmICoqcmVjdm1idWY2Owot
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JdW5zaWduZWQgaW50IG5jb3Vu
dGVyID0gMDsKLQlzdHJ1Y3QgaW92ZWMgcmVjdl9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07Ci0J
c3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGNtc2doZHIgKmNtc2dwdHI7Ci0JY2hhciBjbXNn
YnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKV07Ci0jZWxzZQotCVdT
QUJVRiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKLQlpbnQgblJlc3VsdCwgbV9FcnJv
ckNvZGU7Ci0JRFdPUkQgZmxhZ3M7Ci0JRFdPUkQgbmNvdW50ZXIgPSAwOwotCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgZnJvbTsKLQlpbnQgZnJvbWxlbjsKLQlHVUlEIFdTQVJlY3ZNc2dfR1VJRCA9IFdT
QUlEX1dTQVJFQ1ZNU0c7Ci0JTFBGTl9XU0FSRUNWTVNHIFdTQVJlY3ZNc2c7Ci0JV1NBQ01TR0hE
UiAqY21zZ3B0cjsKLQlXU0FNU0cgbXNnOwotCWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKLSNl
bmRpZgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7Ci0Jc3RydWN0IHNjdHBoZHIgKnNo
OwotCWludCBvZmZzZXQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCS8qSW5pdGlhbGx5
IHRoZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRlZC4KLQkgIHRvX2ZpbGwg
aW5kaWNhdGVzIHRoaXMgYW1vdW50LiAqLwotCWludCB0b19maWxsID0gTUFYTEVOX01CVUZfQ0hB
SU47Ci0JLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gKi8K
LQlpbnQgaSwgbjsKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQlpbnQgY29tcHV0
ZV9jcmMgPSAxOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IGlvdmxlbiA9IE1DTEJZVEVTOwotCWlu
dCB3YW50X2V4dCA9IChpb3ZsZW4gPiBNTEVOKT8gMSA6IDA7Ci0JaW50IHdhbnRfaGVhZGVyID0g
MDsKLQotCXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRuYW1lKCJTQ1RQL0lQNiByY3YiKTsKLQot
CXJlY3ZtYnVmNiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1idWYgKikgKiBNQVhMRU5fTUJVRl9D
SEFJTik7Ci0KLQlmb3IgKDs7KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0b19maWxsOyBpKyspIHsK
LQkJCS8qIE5vdCBnZXR0aW5nIHRoZSBwYWNrZXQgaGVhZGVyLiBUZXN0cyB3aXRoIGNoYWluIG9m
IG9uZSBydW4KLQkJCSAgIGFzIHVzdWFsIHdpdGhvdXQgaGF2aW5nIHRoZSBwYWNrZXQgaGVhZGVy
LgotCQkJICAgSGF2ZSB0cmllZCBib3RoIHNlbmRpbmcgYW5kIHJlY2VpdmluZwotCQkJICovCi0J
CQlyZWN2bWJ1ZjZbaV0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coaW92bGVuLCB3YW50X2hlYWRl
ciwgTV9OT1dBSVQsIHdhbnRfZXh0LCBNVF9EQVRBKTsKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXJlY3Zt
YnVmNltpXS0+bV9kYXRhOwotCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfbGVuID0gaW92bGVuOwotI2Vs
c2UKLQkJCXJlY3ZfaW92ZWNbaV0uYnVmID0gKGNhZGRyX3QpcmVjdm1idWY2W2ldLT5tX2RhdGE7
Ci0JCQlyZWN2X2lvdmVjW2ldLmxlbiA9IGlvdmxlbjsKLSNlbmRpZgotCQl9Ci0JCXRvX2ZpbGwg
PSAwOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJZmxhZ3MgPSAwOwot
CQluY291bnRlciA9IDA7Ci0JCWZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
Ci0JCW1lbXNldCgmZnJvbSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJblJl
c3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgU0lPX0dF
VF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKLQkJICAgICAgICAgICAgICAgICAgICZXU0FS
ZWN2TXNnX0dVSUQsIHNpemVvZiBXU0FSZWN2TXNnX0dVSUQsCi0JCSAgICAgICAgICAgICAgICAg
ICAmV1NBUmVjdk1zZywgc2l6ZW9mIFdTQVJlY3ZNc2csCi0JCSAgICAgICAgICAgICAgICAgICAm
bmNvdW50ZXIsIE5VTEwsIE5VTEwpOwotCQlpZiAoblJlc3VsdCA9PSAwKSB7Ci0JCQltc2cubmFt
ZSA9ICh2b2lkICopJnNyYzsKLQkJCW1zZy5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOwotCQkJbXNnLmxwQnVmZmVycyA9IHJlY3ZfaW92ZWM7Ci0JCQltc2cuZHdCdWZmZXJD
b3VudCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mIENv
bnRyb2xCdWZmZXI7Ci0JCQltc2cuQ29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOwotCQkJbXNn
LmR3RmxhZ3MgPSAwOwotCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cDYpLCAmbXNnLCAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOwotCQl9Ci0JCWlm
IChuUmVzdWx0ICE9IDApIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7Ci0J
CQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKQotCQkJCWNvbnRpbnVlOwotCQkJaWYg
KG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLIHx8IG1fRXJyb3JDb2RlID09IFdTQUVJTlRSKQot
CQkJCWJyZWFrOwotCQl9Ci0JCW4gPSBuY291bnRlcjsKLSNlbHNlCi0JCW1lbXNldCgmbXNnLCAw
LCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOwotCQltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKLQkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7Ci0JCW1lbXNldChjbXNnYnVmLCAwLCBDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0
IGluNl9wa3RpbmZvKSkpOwotCQltc2cubXNnX25hbWUgPSAodm9pZCAqKSZzcmM7Ci0JCW1zZy5t
c2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJbXNnLm1zZ19pb3Yg
PSByZWN2X2lvdmVjOwotCQltc2cubXNnX2lvdmxlbiA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQlt
c2cubXNnX2NvbnRyb2wgPSAodm9pZCAqKWNtc2didWY7Ci0JCW1zZy5tc2dfY29udHJvbGxlbiA9
IChzb2NrbGVuX3QpQ01TR19MRU4oc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKTsKLQkJbXNn
Lm1zZ19mbGFncyA9IDA7Ci0KLQkJbmNvdW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNiksICZtc2csIDApOwotCQlpZiAobiA8IDApIHsKLQkJCWlmIChl
cnJubyA9PSBFQUdBSU4pIHsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlTQ1RQX0hFQURFUl9MRU4ocmVjdm1idWY2WzBdKSA9IG47
IC8qIGxlbmd0aCBvZiB0b3RhbCBwYWNrZXQgKi8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVj
dnBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsK
LQotCQlpZiAoKHVuc2lnbmVkIGludCluIDw9IGlvdmxlbikgewotCQkJU0NUUF9CVUZfTEVOKHJl
Y3ZtYnVmNlswXSkgPSBuOwotCQkJKHRvX2ZpbGwpKys7Ci0JCX0gZWxzZSB7Ci0JCQlpID0gMDsK
LQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbMF0pID0gaW92bGVuOwotCi0JCQluY291bnRlciAt
PSBpb3ZsZW47Ci0JCQkodG9fZmlsbCkrKzsKLQkJCWRvIHsKLQkJCQlyZWN2bWJ1ZjZbaV0tPm1f
bmV4dCA9IHJlY3ZtYnVmNltpKzFdOwotCQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbaV0tPm1f
bmV4dCkgPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7Ci0JCQkJaSsrOwotCQkJCW5jb3VudGVyIC09
IGlvdmxlbjsKLQkJCQkodG9fZmlsbCkrKzsKLQkJCX0gd2hpbGUgKG5jb3VudGVyID4gMCk7Ci0J
CX0KLQotCQlmb3IgKGNtc2dwdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbXNncHRyICE9IE5V
TEw7IGNtc2dwdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNncHRyKSkgewotCQkJaWYgKChjbXNn
cHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNikgJiYgKGNtc2dwdHItPmNtc2dfdHlwZSA9
PSBJUFY2X1BLVElORk8pKSB7Ci0JCQkJc3RydWN0IGluNl9wa3RpbmZvICogaW5mbzsKLQotCQkJ
CWluZm8gPSAoc3RydWN0IGluNl9wa3RpbmZvICopQ01TR19EQVRBKGNtc2dwdHIpOwotCQkJCW1l
bWNweSgodm9pZCAqKSZkc3Quc2luNl9hZGRyLCAoY29uc3Qgdm9pZCAqKSAmKGluZm8tPmlwaTZf
YWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQot
Ci0JCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBtdWx0aWNhc3RzICovCi0J
CWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmRzdC5zaW42X2FkZHIpKSB7Ci0JCQltX2ZyZWVt
KHJlY3ZtYnVmNlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXNoID0gbXRvZChyZWN2bWJ1
ZjZbMF0sIHN0cnVjdCBzY3RwaGRyICopOwotCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
KSgoY2FkZHJfdClzaCArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwotCQlvZmZzZXQgPSBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lm
ZGVmIEhBVkVfU0lONl9MRU4KLQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOwotI2VuZGlmCi0JCWRzdC5zaW42X3BvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCi0JCXNy
Yy5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc3JjLnNp
bjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCXNyYy5zaW42
X3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdm5vY3JjKTsKLSNlbHNlCi0JCWlmIChtZW1jbXAoJnNy
Yy5zaW42X2FkZHIsICZkc3Quc2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0g
MCkgewotCQkJY29tcHV0ZV9jcmMgPSAwOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdm5v
Y3JjKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zzd2NyYyk7Ci0J
CX0KLSNlbmRpZgotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6IFJlY2VpdmVkICVkIGJ5
dGVzLiIsIF9fZnVuY19fLCBuKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiAtIGNhbGxp
bmcgc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZyB3aXRoIG9mZj0lZFxuIiwgb2Zmc2V0KTsK
LQkJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmcmVjdm1idWY2WzBdLCAwLCBvZmZzZXQs
IG4sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZz
cmMsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZk
c3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAotI2lmICFkZWZpbmVk
KFNDVFBfV0lUSF9OT19DU1VNKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1
dGVfY3JjLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIDApOwotCQlpZiAo
cmVjdm1idWY2WzBdKSB7Ci0JCQltX2ZyZWVtKHJlY3ZtYnVmNlswXSk7Ci0JCX0KLQl9Ci0JZm9y
IChpID0gMDsgaSA8IE1BWExFTl9NQlVGX0NIQUlOOyBpKyspIHsKLQkJbV9mcmVlKHJlY3ZtYnVm
NltpXSk7Ci0JfQotCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLwotCWZyZWUocmVjdm1idWY2
KTsKLQlyZXR1cm4gKE5VTEwpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBJTkVUCi1zdGF0aWMgdm9p
ZCAqCi1yZWN2X2Z1bmN0aW9uX3VkcCh2b2lkICphcmcpCi17Ci0Jc3RydWN0IG1idWYgKip1ZHBy
ZWN2bWJ1ZjsKLQkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBh
bGxvY2F0ZWQuCi0JICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KLQlpbnQgdG9f
ZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNo
IG1idWYgaW4gdGhlIGNoYWluICovCi0JaW50IGksIG4sIG9mZnNldDsKLQl1bnNpZ25lZCBpbnQg
aW92bGVuID0gTUNMQllURVM7Ci0JaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDog
MDsKLQlpbnQgd2FudF9oZWFkZXIgPSAwOwotCXN0cnVjdCBzY3RwaGRyICpzaDsKLQl1aW50MTZf
dCBwb3J0OwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c3JjLCBkc3Q7Ci0jaWYgZGVmaW5lZChJUF9QS1RJTkZPKQotCWNoYXIgY21zZ2J1ZltDTVNHX1NQ
QUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKLSNlbHNlCi0JY2hhciBjbXNnYnVmW0NN
U0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSldOwotI2VuZGlmCi0jaWYgIWRlZmluZWQo
U0NUUF9XSVRIX05PX0NTVU0pCi0JaW50IGNvbXB1dGVfY3JjID0gMTsKLSNlbmRpZgotI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JdW5zaWduZWQgaW50IG5jb3VudGVyOwot
CXN0cnVjdCBpb3ZlYyBpb3ZbTUFYTEVOX01CVUZfQ0hBSU5dOwotCXN0cnVjdCBtc2doZHIgbXNn
OwotCXN0cnVjdCBjbXNnaGRyICpjbXNncHRyOwotI2Vsc2UKLQlHVUlEIFdTQVJlY3ZNc2dfR1VJ
RCA9IFdTQUlEX1dTQVJFQ1ZNU0c7Ci0JTFBGTl9XU0FSRUNWTVNHIFdTQVJlY3ZNc2c7Ci0JY2hh
ciBDb250cm9sQnVmZmVyWzEwMjRdOwotCVdTQUJVRiBpb3ZbTUFYTEVOX01CVUZfQ0hBSU5dOwot
CVdTQU1TRyBtc2c7Ci0JaW50IG5SZXN1bHQsIG1fRXJyb3JDb2RlOwotCVdTQUNNU0dIRFIgKmNt
c2dwdHI7Ci0JRFdPUkQgbmNvdW50ZXI7Ci0jZW5kaWYKLQotCXNjdHBfdXNlcnNwYWNlX3NldF90
aHJlYWRuYW1lKCJTQ1RQL1VEUC9JUDQgcmN2Iik7Ci0KLQl1ZHByZWN2bWJ1ZiA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IG1idWYgKikgKiBNQVhMRU5fTUJVRl9DSEFJTik7Ci0KLQl3aGlsZSAoMSkg
ewotCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7Ci0JCQkvKiBOb3QgZ2V0dGluZyB0
aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUgcnVuCi0JCQkgICBhcyB1
c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4KLQkJCSAgIEhhdmUgdHJpZWQg
Ym90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKLQkJCSAqLwotCQkJdWRwcmVjdm1idWZbaV0gPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2coaW92bGVuLCB3YW50X2hlYWRlciwgTV9OT1dBSVQsIHdhbnRf
ZXh0LCBNVF9EQVRBKTsKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJ
aW92W2ldLmlvdl9iYXNlID0gKGNhZGRyX3QpdWRwcmVjdm1idWZbaV0tPm1fZGF0YTsKLQkJCWlv
dltpXS5pb3ZfbGVuID0gaW92bGVuOwotI2Vsc2UKLQkJCWlvdltpXS5idWYgPSAoY2FkZHJfdCl1
ZHByZWN2bWJ1ZltpXS0+bV9kYXRhOwotCQkJaW92W2ldLmxlbiA9IGlvdmxlbjsKLSNlbmRpZgot
CQl9Ci0JCXRvX2ZpbGwgPSAwOwotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
Ci0JCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOwotI2Vsc2UKLQkJbWVt
c2V0KCZtc2csIDAsIHNpemVvZihXU0FNU0cpKTsKLSNlbmRpZgotCQltZW1zZXQoJnNyYywgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotCQltZW1zZXQoY21zZ2J1ZiwgMCwgc2l6ZW9mKGNtc2didWYp
KTsKLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCW1zZy5tc2dfbmFt
ZSA9ICh2b2lkICopJnNyYzsKLQkJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7Ci0JCW1zZy5tc2dfaW92ID0gaW92OwotCQltc2cubXNnX2lvdmxlbiA9IE1BWExF
Tl9NQlVGX0NIQUlOOwotCQltc2cubXNnX2NvbnRyb2wgPSAodm9pZCAqKWNtc2didWY7Ci0JCW1z
Zy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnYnVmKTsKLQkJbXNnLm1zZ19mbGFncyA9IDA7
Ci0KLQkJbmNvdW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwKSwgJm1zZywgMCk7Ci0JCWlmIChuIDwgMCkgewotCQkJaWYgKGVycm5vID09IEVBR0FJTikg
ewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2Vs
c2UKLQkJblJlc3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHAp
LCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLAotCQkgJldTQVJlY3ZNc2dfR1VJ
RCwgc2l6ZW9mIFdTQVJlY3ZNc2dfR1VJRCwKLQkJICZXU0FSZWN2TXNnLCBzaXplb2YgV1NBUmVj
dk1zZywKLQkJICZuY291bnRlciwgTlVMTCwgTlVMTCk7Ci0JCWlmIChuUmVzdWx0ID09IDApIHsK
LQkJCW1zZy5uYW1lID0gKHZvaWQgKikmc3JjOwotCQkJbXNnLm5hbWVsZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKTsKLQkJCW1zZy5scEJ1ZmZlcnMgPSBpb3Y7Ci0JCQltc2cuZHdCdWZm
ZXJDb3VudCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9m
IENvbnRyb2xCdWZmZXI7Ci0JCQltc2cuQ29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOwotCQkJ
bXNnLmR3RmxhZ3MgPSAwOwotCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCksICZtc2csICZuY291bnRlciwgTlVMTCwgTlVMTCk7Ci0JCX0KLQkJ
aWYgKG5SZXN1bHQgIT0gMCkgewotCQkJbV9FcnJvckNvZGUgPSBXU0FHZXRMYXN0RXJyb3IoKTsK
LQkJCWlmIChtX0Vycm9yQ29kZSA9PSBXU0FFVElNRURPVVQpIHsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLQkJCWlmICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0spIHx8IChtX0Vycm9yQ29kZSA9
PSBXU0FFSU5UUikpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluID0gbmNvdW50ZXI7Ci0j
ZW5kaWYKLQkJU0NUUF9IRUFERVJfTEVOKHVkcHJlY3ZtYnVmWzBdKSA9IG47IC8qIGxlbmd0aCBv
ZiB0b3RhbCBwYWNrZXQgKi8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOwot
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsKLQotCQlpZiAoKHVu
c2lnbmVkIGludCluIDw9IGlvdmxlbikgewotCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmWzBd
KSA9IG47Ci0JCQkodG9fZmlsbCkrKzsKLQkJfSBlbHNlIHsKLQkJCWkgPSAwOwotCQkJU0NUUF9C
VUZfTEVOKHVkcHJlY3ZtYnVmWzBdKSA9IGlvdmxlbjsKLQotCQkJbmNvdW50ZXIgLT0gaW92bGVu
OwotCQkJKHRvX2ZpbGwpKys7Ci0JCQlkbyB7Ci0JCQkJdWRwcmVjdm1idWZbaV0tPm1fbmV4dCA9
IHVkcHJlY3ZtYnVmW2krMV07Ci0JCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmW2ldLT5tX25l
eHQpID0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOwotCQkJCWkrKzsKLQkJCQluY291bnRlciAtPSBp
b3ZsZW47Ci0JCQkJKHRvX2ZpbGwpKys7Ci0JCQl9IHdoaWxlIChuY291bnRlciA+IDApOwotCQl9
Ci0KLQkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZ3B0ciAhPSBOVUxM
OyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKLSNpZiBkZWZpbmVkKElQ
X1BLVElORk8pCi0JCQlpZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCkgJiYg
KGNtc2dwdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSkgewotCQkJCXN0cnVjdCBpbl9wa3Rp
bmZvICppbmZvOwotCi0JCQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVf
U0lOX0xFTgotCQkJCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0j
ZW5kaWYKLQkJCQlpbmZvID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtc2dwdHIp
OwotCQkJCW1lbWNweSgodm9pZCAqKSZkc3Quc2luX2FkZHIsIChjb25zdCB2b2lkICopJihpbmZv
LT5pcGlfYWRkciksIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotCQkJCWJyZWFrOwotCQkJfQot
I2Vsc2UKLQkJCWlmICgoY21zZ3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQKSAmJiAoY21z
Z3B0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKSkgewotCQkJCXN0cnVjdCBpbl9hZGRy
ICphZGRyOwotCi0JCQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lO
X0xFTgotCQkJCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5k
aWYKLQkJCQlhZGRyID0gKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtc2dwdHIpOwotCQkJ
CW1lbWNweSgodm9pZCAqKSZkc3Quc2luX2FkZHIsIChjb25zdCB2b2lkICopYWRkciwgc2l6ZW9m
KHN0cnVjdCBpbl9hZGRyKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCi0JCS8q
IFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBtdWx0aWNhc3RzICovCi0JCWlmIChJ
Tl9NVUxUSUNBU1QobnRvaGwoZHN0LnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQltX2ZyZWVtKHVk
cHJlY3ZtYnVmWzBdKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChTQ1RQX0lTX0lUX0JST0FE
Q0FTVChkc3Quc2luX2FkZHIsIHVkcHJlY3ZtYnVmWzBdKSkgewotCQkJbV9mcmVlbSh1ZHByZWN2
bWJ1ZlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qb2Zmc2V0ID0gc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ki8KLQkJc2ggPSBtdG9k
KHVkcHJlY3ZtYnVmWzBdLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKLQkJY2ggPSAoc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQkJb2Zm
c2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJcG9ydCA9IHNyYy5zaW5fcG9ydDsKLQkJ
c3JjLnNpbl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9w
b3J0OwotI2lmIGRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3JlY3Zub2NyYyk7Ci0jZWxzZQotCQlpZiAoc3JjLnNpbl9hZGRyLnNfYWRkciA9PSBkc3Qu
c2luX2FkZHIuc19hZGRyKSB7Ci0JCQljb21wdXRlX2NyYyA9IDA7Ci0JCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19yZWN2bm9jcmMpOwotCQl9IGVsc2UgewotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdnN3Y3JjKTsKLQkJfQotI2VuZGlmCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczog
UmVjZWl2ZWQgJWQgYnl0ZXMuIiwgX19mdW5jX18sIG4pOwotCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiIC0gY2FsbGluZyBzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nIHdpdGggb2ZmPSVk
XG4iLCBvZmZzZXQpOwotCQlzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKCZ1ZHByZWN2bWJ1
ZlswXSwgMCwgb2Zmc2V0LCBuLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc3JjLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1
Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBj
aCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZS
RklELCBwb3J0KTsKLQkJaWYgKHVkcHJlY3ZtYnVmWzBdKSB7Ci0JCQltX2ZyZWVtKHVkcHJlY3Zt
YnVmWzBdKTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYTEVOX01CVUZfQ0hBSU47IGkr
KykgewotCQltX2ZyZWUodWRwcmVjdm1idWZbaV0pOwotCX0KLQkvKiBmcmVlIHRoZSBhcnJheSBp
dHNlbGYgKi8KLQlmcmVlKHVkcHJlY3ZtYnVmKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotI2VuZGlm
Ci0KLSNpZiBkZWZpbmVkKElORVQ2KQotc3RhdGljIHZvaWQgKgotcmVjdl9mdW5jdGlvbl91ZHA2
KHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqKnVkcHJlY3ZtYnVmNjsKLQkvKkluaXRpYWxs
eSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCi0JICB0b19maWxs
IGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KLQlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NI
QUlOOwotCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICov
Ci0JaW50IGksIG4sIG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7Ci0J
aW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKLQlpbnQgd2FudF9oZWFkZXIg
PSAwOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7Ci0Jc3RydWN0IHNjdHBoZHIgKnNo
OwotCXVpbnQxNl90IHBvcnQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCWNoYXIgY21z
Z2J1ZltDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSldOwotI2lmICFkZWZp
bmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCWludCBjb21wdXRlX2NyYyA9IDE7Ci0jZW5kaWYKLSNp
ZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXVuc2lnbmVkIGludCBuY291bnRl
cjsKLQlzdHJ1Y3QgaW92ZWMgaW92W01BWExFTl9NQlVGX0NIQUlOXTsKLQlzdHJ1Y3QgbXNnaGRy
IG1zZzsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKLSNlbHNlCi0JR1VJRCBXU0FSZWN2TXNn
X0dVSUQgPSBXU0FJRF9XU0FSRUNWTVNHOwotCUxQRk5fV1NBUkVDVk1TRyBXU0FSZWN2TXNnOwot
CWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKLQlXU0FCVUYgaW92W01BWExFTl9NQlVGX0NIQUlO
XTsKLQlXU0FNU0cgbXNnOwotCWludCBuUmVzdWx0LCBtX0Vycm9yQ29kZTsKLQlEV09SRCBuY291
bnRlcjsKLQlXU0FDTVNHSERSICpjbXNncHRyOwotI2VuZGlmCi0KLQlzY3RwX3VzZXJzcGFjZV9z
ZXRfdGhyZWFkbmFtZSgiU0NUUC9VRFAvSVA2IHJjdiIpOwotCi0JdWRwcmVjdm1idWY2ID0gbWFs
bG9jKHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSAqIE1BWExFTl9NQlVGX0NIQUlOKTsKLQl3aGlsZSAo
MSkgewotCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7Ci0JCQkvKiBOb3QgZ2V0dGlu
ZyB0aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUgcnVuCi0JCQkgICBh
cyB1c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4KLQkJCSAgIEhhdmUgdHJp
ZWQgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKLQkJCSAqLwotCQkJdWRwcmVjdm1idWY2W2ld
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3
YW50X2V4dCwgTVRfREFUQSk7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LQkJCWlvdltpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXVkcHJlY3ZtYnVmNltpXS0+bV9kYXRhOwot
CQkJaW92W2ldLmlvdl9sZW4gPSBpb3ZsZW47Ci0jZWxzZQotCQkJaW92W2ldLmJ1ZiA9IChjYWRk
cl90KXVkcHJlY3ZtYnVmNltpXS0+bV9kYXRhOwotCQkJaW92W2ldLmxlbiA9IGlvdmxlbjsKLSNl
bmRpZgotCQl9Ci0JCXRvX2ZpbGwgPSAwOwotCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3QgbXNnaGRyKSk7Ci0jZWxz
ZQotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKFdTQU1TRykpOwotI2VuZGlmCi0JCW1lbXNldCgm
c3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQltZW1zZXQoJmRzdCwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJbWVtc2V0KGNtc2didWYsIDAsIENNU0df
U1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKSk7Ci0KLSNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQotCQltc2cubXNnX25hbWUgPSAodm9pZCAqKSZzcmM7Ci0JCW1z
Zy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJbXNnLm1zZ19p
b3YgPSBpb3Y7Ci0JCW1zZy5tc2dfaW92bGVuID0gTUFYTEVOX01CVUZfQ0hBSU47Ci0JCW1zZy5t
c2dfY29udHJvbCA9ICh2b2lkICopY21zZ2J1ZjsKLQkJbXNnLm1zZ19jb250cm9sbGVuID0gKHNv
Y2tsZW5fdClDTVNHX0xFTihzaXplb2YgKHN0cnVjdCBpbjZfcGt0aW5mbykpOwotCQltc2cubXNn
X2ZsYWdzID0gMDsKLQotCQluY291bnRlciA9IG4gPSByZWN2bXNnKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3VkcHNjdHA2KSwgJm1zZywgMCk7Ci0JCWlmIChuIDwgMCkgewotCQkJaWYgKGVycm5v
ID09IEVBR0FJTikgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJfQotI2Vsc2UKLQkJblJlc3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3VkcHNjdHA2KSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKLQkJICAg
ICAgICAgICAgICAgICAgICZXU0FSZWN2TXNnX0dVSUQsIHNpemVvZiBXU0FSZWN2TXNnX0dVSUQs
Ci0JCSAgICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZywgc2l6ZW9mIFdTQVJlY3ZNc2csCi0J
CSAgICAgICAgICAgICAgICAgICAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOwotCQlpZiAoblJlc3Vs
dCA9PSBTT0NLRVRfRVJST1IpIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7
Ci0JCQlXU0FSZWN2TXNnID0gTlVMTDsKLQkJfQotCQlpZiAoblJlc3VsdCA9PSAwKSB7Ci0JCQlt
c2cubmFtZSA9ICh2b2lkICopJnNyYzsKLQkJCW1zZy5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOwotCQkJbXNnLmxwQnVmZmVycyA9IGlvdjsKLQkJCW1zZy5kd0J1ZmZlckNv
dW50ID0gTUFYTEVOX01CVUZfQ0hBSU47Ci0JCQltc2cuQ29udHJvbC5sZW4gPSBzaXplb2YgQ29u
dHJvbEJ1ZmZlcjsKLQkJCW1zZy5Db250cm9sLmJ1ZiA9IENvbnRyb2xCdWZmZXI7Ci0JCQltc2cu
ZHdGbGFncyA9IDA7Ci0JCQluUmVzdWx0ID0gV1NBUmVjdk1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwNiksICZtc2csICZuY291bnRlciwgTlVMTCwgTlVMTCk7Ci0JCX0KLQkJaWYg
KG5SZXN1bHQgIT0gMCkgewotCQkJbV9FcnJvckNvZGUgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJ
CWlmIChtX0Vycm9yQ29kZSA9PSBXU0FFVElNRURPVVQpIHsKLQkJCQljb250aW51ZTsKLQkJCX0K
LQkJCWlmICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0spIHx8IChtX0Vycm9yQ29kZSA9PSBX
U0FFSU5UUikpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluID0gbmNvdW50ZXI7Ci0jZW5k
aWYKLQkJU0NUUF9IRUFERVJfTEVOKHVkcHJlY3ZtYnVmNlswXSkgPSBuOyAvKiBsZW5ndGggb2Yg
dG90YWwgcGFja2V0ICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKLQkJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7Ci0KLQkJaWYgKCh1bnNp
Z25lZCBpbnQpbiA8PSBpb3ZsZW4pIHsKLQkJCVNDVFBfQlVGX0xFTih1ZHByZWN2bWJ1ZjZbMF0p
ID0gbjsKLQkJCSh0b19maWxsKSsrOwotCQl9IGVsc2UgewotCQkJaSA9IDA7Ci0JCQlTQ1RQX0JV
Rl9MRU4odWRwcmVjdm1idWY2WzBdKSA9IGlvdmxlbjsKLQotCQkJbmNvdW50ZXIgLT0gaW92bGVu
OwotCQkJKHRvX2ZpbGwpKys7Ci0JCQlkbyB7Ci0JCQkJdWRwcmVjdm1idWY2W2ldLT5tX25leHQg
PSB1ZHByZWN2bWJ1ZjZbaSsxXTsKLQkJCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWY2W2ldLT5t
X25leHQpID0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOwotCQkJCWkrKzsKLQkJCQluY291bnRlciAt
PSBpb3ZsZW47Ci0JCQkJKHRvX2ZpbGwpKys7Ci0JCQl9IHdoaWxlIChuY291bnRlciA+IDApOwot
CQl9Ci0KLQkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZ3B0ciAhPSBO
VUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKLQkJCWlmICgoY21z
Z3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYpICYmIChjbXNncHRyLT5jbXNnX3R5cGUg
PT0gSVBWNl9QS1RJTkZPKSkgewotCQkJCXN0cnVjdCBpbjZfcGt0aW5mbyAqaW5mbzsKLQotCQkJ
CWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJCQlk
c3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJCQlp
bmZvID0gKHN0cnVjdCBpbjZfcGt0aW5mbyAqKUNNU0dfREFUQShjbXNncHRyKTsKLQkJCQkvKmRz
dC5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19w
b3J0KSk7Ki8KLQkJCQltZW1jcHkoKHZvaWQgKikmZHN0LnNpbjZfYWRkciwgKGNvbnN0IHZvaWQg
KikmKGluZm8tPmlwaTZfYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJCX0KLQkJ
fQotCi0JCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBtdWx0aWNhc3RzICov
Ci0JCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmRzdC5zaW42X2FkZHIpKSB7Ci0JCQltX2Zy
ZWVtKHVkcHJlY3ZtYnVmNlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXNoID0gbXRvZCh1
ZHByZWN2bWJ1ZjZbMF0sIHN0cnVjdCBzY3RwaGRyICopOwotCQljaCA9IChzdHJ1Y3Qgc2N0cF9j
aHVua2hkciAqKSgoY2FkZHJfdClzaCArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwotCQlvZmZz
ZXQgPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCXBvcnQgPSBzcmMuc2luNl9wb3J0Owot
CQlzcmMuc2luNl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQlkc3Quc2luNl9wb3J0ID0gc2gtPmRl
c3RfcG9ydDsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19yZWN2bm9jcmMpOwotI2Vsc2UKLQkJaWYgKChtZW1jbXAoJnNyYy5zaW42X2FkZHIs
ICZkc3Quc2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKLQkJCWNv
bXB1dGVfY3JjID0gMDsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0JCX0g
ZWxzZSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQl9Ci0jZW5kaWYK
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRlcy4iLCBfX2Z1
bmNfXywgbik7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5nIHNjdHBfY29t
bW9uX2lucHV0X3Byb2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIChpbnQpc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKSk7Ci0JCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJnVkcHJlY3ZtYnVmNlsw
XSwgMCwgb2Zmc2V0LCBuLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc3JjLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwK
LSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklE
LCBwb3J0KTsKLQkJaWYgKHVkcHJlY3ZtYnVmNlswXSkgewotCQkJbV9mcmVlbSh1ZHByZWN2bWJ1
ZjZbMF0pOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsr
KSB7Ci0JCW1fZnJlZSh1ZHByZWN2bWJ1ZjZbaV0pOwotCX0KLQkvKiBmcmVlIHRoZSBhcnJheSBp
dHNlbGYgKi8KLQlmcmVlKHVkcHJlY3ZtYnVmNik7Ci0JcmV0dXJuIChOVUxMKTsKLX0KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLXN0YXRpYyB2b2lkCi1z
ZXRSZWNlaXZlQnVmZmVyU2l6ZShTT0NLRVQgc2ZkLCBpbnQgbmV3X3NpemUpCi0jZWxzZQotc3Rh
dGljIHZvaWQKLXNldFJlY2VpdmVCdWZmZXJTaXplKGludCBzZmQsIGludCBuZXdfc2l6ZSkKLSNl
bmRpZgotewotCWludCBjaCA9IG5ld19zaXplOwotCi0JaWYgKHNldHNvY2tvcHQgKHNmZCwgU09M
X1NPQ0tFVCwgU09fUkNWQlVGLCAodm9pZCopJmNoLCBzaXplb2YoY2gpKSA8IDApIHsKLSNpZiBk
ZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNS
LCAiQ2FuJ3Qgc2V0IHJlY3YtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExh
c3RFcnJvcigpKTsKLSNlbHNlCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQg
cmVjdi1idWZmZXJzIHNpemUgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotI2VuZGlmCi0JfQot
CXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi1zdGF0
aWMgdm9pZAotc2V0U2VuZEJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50IG5ld19zaXplKQotI2Vs
c2UKLXN0YXRpYyB2b2lkCi1zZXRTZW5kQnVmZmVyU2l6ZShpbnQgc2ZkLCBpbnQgbmV3X3NpemUp
Ci0jZW5kaWYKLXsKLQlpbnQgY2ggPSBuZXdfc2l6ZTsKLQotCWlmIChzZXRzb2Nrb3B0IChzZmQs
IFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9mKGNoKSkgPCAwKSB7Ci0j
aWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIkNhbid0IHNldCBzZW5kLWJ1ZmZlcnMgc2l6ZSAoZXJybm8gPSAlZCkuXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
c2V0IHNlbmQtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgot
CX0KLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgU09DS0VUX1RJTUVPVVQgMTAwIC8qIGluIG1zICov
Ci12b2lkCi1yZWN2X3RocmVhZF9pbml0KHZvaWQpCi17Ci0jaWYgZGVmaW5lZChJTkVUKQotCXN0
cnVjdCBzb2NrYWRkcl9pbiBhZGRyX2lwdjQ7Ci0JY29uc3QgaW50IGhkcmluY2wgPSAxOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHJfaXB2NjsK
LSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQljb25zdCBpbnQg
b24gPSAxOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlz
dHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwotCi0JbWVtc2V0KCZ0aW1lb3V0LCAwLCBzaXplb2Yoc3Ry
dWN0IHRpbWV2YWwpKTsKLQl0aW1lb3V0LnR2X3NlYyAgPSAoU09DS0VUX1RJTUVPVVQgLyAxMDAw
KTsKLQl0aW1lb3V0LnR2X3VzZWMgPSAoU09DS0VUX1RJTUVPVVQgJSAxMDAwKSAqIDEwMDA7Ci0j
ZWxzZQotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU09DS0VUX1RJTUVPVVQ7IC8qIFRpbWVvdXQg
aW4gbWlsbGlzZWNvbmRzICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Rh
cndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUp
ID09IC0xKSB7Ci0JCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gc29ja2V0
KEFGX1JPVVRFLCBTT0NLX1JBVywgMCkpID09IC0xKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3QgY3JlYXRlIHJvdXRpbmcgc29ja2V0IChlcnJubyA9ICVkKS5cbiIsIGVycm5v
KTsKLQkJfQotI2lmIDAKLQkJc3RydWN0IHNvY2thZGRyX25sIHNhbmw7Ci0KLQkJaWYgKChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcs
IE5FVExJTktfUk9VVEUpKSA8IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4n
dCBjcmVhdGUgcm91dGluZyBzb2NrZXQgKGVycm5vID0gJWQuXG4iLCBlcnJubyk7Ci0JCX0KLQkJ
bWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOwotCQlzYW5sLm5sX2ZhbWlseSA9IEFGX05F
VExJTks7Ci0JCXNhbmwubmxfZ3JvdXBzID0gMDsKLSNpZmRlZiBJTkVUCi0JCXNhbmwubmxfZ3Jv
dXBzIHw9IFJUTUdSUF9JUFY0X0lGQUREUjsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCXNhbmwu
bmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKLSNlbmRpZgotCQlpZiAoYmluZChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhbmwsIHNp
emVvZihzYW5sKSkgPCAwKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmlu
ZCByb3V0aW5nIHNvY2tldCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQljbG9zZShTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOwotCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpID0gLTE7Ci0JCX0KLSNlbmRpZgotCQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpICE9IC0xKSB7Ci0JCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yb3V0ZSksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLChjb25zdCB2b2lkKikmdGltZW91dCwg
c2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSkgPCAwKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHJvdXRpbmcgc29ja2V0IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJY2xvc2Vz
b2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKLSNlbHNlCi0JCQkJY2xvc2Uo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKLSNlbmRpZgotCQkJCVNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3JvdXRlKSA9IC0xOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCi0jaWYgZGVm
aW5lZChJTkVUKQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9PSAtMSkg
ewotCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfUkFXLCBJUFBST1RPX1NDVFApKSA9PSAtMSkgewotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVh
dGUgcmF3IHNvY2tldCBmb3IgSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7Ci0jZWxzZQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSByYXcg
c29ja2V0IGZvciBJUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgotCQl9IGVs
c2UgewotCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFNDVFAgc29ja2V0ICovCi0J
CQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgSVBQUk9U
T19JUCwgSVBfSERSSU5DTCwoY29uc3Qgdm9pZCopJmhkcmluY2wsIHNpemVvZihpbnQpKSA8IDAp
IHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9IRFJJTkNMIChlcnJubyA9ICVkKS5cbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKLQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSk7Ci0jZWxzZQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQg
SVBfSERSSU5DTCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJY2xvc2UoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOwotI2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cCkgPSAtMTsKLQkJCX0gZWxzZSBpZiAoc2V0c29ja29wdChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjb25zdCB2
b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7Ci0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7Ci0JCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cCkpOwotI2Vsc2UKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0
IHRpbWVvdXQgb24gc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8p
OwotCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKLSNlbmRpZgot
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7Ci0JCQl9IGVsc2Ugewot
CQkJCW1lbXNldCgodm9pZCAqKSZhZGRyX2lwdjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCQlhZGRyX2lwdjQuc2luX2xlbiAgICAgICAg
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQlhZGRyX2lwdjQuc2lu
X2ZhbWlseSAgICAgID0gQUZfSU5FVDsKLQkJCQlhZGRyX2lwdjQuc2luX3BvcnQgICAgICAgID0g
aHRvbnMoMCk7Ci0JCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9B
TlkpOwotCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCAoY29u
c3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVy
cm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJCQljbG9zZXNvY2tldChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0jZWxzZQotCQkJCQlTQ1RQREJHKFNDVFBf
REVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8gPSAlZCku
XG4iLCBlcnJubyk7Ci0JCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
KTsKLSNlbmRpZgotCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9IC0xOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLICovCi0JCQkJCXNldFNlbmRCdWZmZXJT
aXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLIElz
IHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBz
ZXQgdG8gNjRLPyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCkgPT0gLTEpIHsKLQkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV91ZHBzY3RwKSA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09
IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVy
cm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotI2Vsc2UKLQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJDYW4ndCBjcmVhdGUgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJu
byA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgotCQl9IGVsc2UgewotI2lmIGRlZmluZWQoSVBf
UEtUSU5GTykKLQkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNj
dHApLCBJUFBST1RPX0lQLCBJUF9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXpl
b2YoaW50KSkgPCAwKSB7Ci0jZWxzZQotCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCksIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAoY29uc3Qgdm9p
ZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZChJUF9QS1RJTkZPKQotCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBfUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFND
VFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotI2Vsc2UK
LQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1JFQ1ZEU1RBRERSIG9u
IHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJy
b3IoKSk7Ci0jZW5kaWYKLQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSk7Ci0jZWxzZQotI2lmIGRlZmluZWQoSVBfUEtUSU5GTykKLQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL1VE
UC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbHNlCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9SRUNWRFNUQUREUiBvbiBzb2NrZXQgZm9yIFNDVFAv
VURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotI2VuZGlmCi0JCQkJY2xvc2UoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKLQkJCX0gZWxzZSBpZiAoc2V0c29ja29wdChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChj
b25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJD
YW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQp
LlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApKTsKLSNlbHNlCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAl
ZCkuXG4iLCBlcnJubyk7Ci0JCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cCkpOwotI2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsK
LQkJCX0gZWxzZSB7Ci0JCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NCwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQkJCWFkZHJfaXB2NC5z
aW5fbGVuICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQkJ
CWFkZHJfaXB2NC5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOwotCQkJCWFkZHJfaXB2NC5zaW5f
cG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19w
b3J0KSk7Ci0JCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkp
OwotCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCAoY29uc3Qg
c3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
IDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChl
cnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQkJY2xvc2Vzb2NrZXQoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2Vsc2UKLQkJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9
ICVkKS5cbiIsIGVycm5vKTsKLQkJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cCkpOwotI2VuZGlmCi0JCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApID0g
LTE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEyOEsgKi8KLQkJCQkJc2V0U2VuZEJ1
ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEy
OEsgSXMgdGhpcyBzZXR0aW5nIG5ldC5pbmV0LnJhdy5tYXhkZ3JhbSB2YWx1ZT8gU2hvdWxkIGl0
IGJlIHNldCB0byA2NEs/ICovCi0JCQkJfQotCQkJfQotCQl9Ci0JfQotI2VuZGlmCi0jaWYgZGVm
aW5lZChJTkVUNikKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID09IC0x
KSB7Ci0JCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gc29ja2V0KEFG
X0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19TQ1RQKSkgPT0gLTEpIHsKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
Y3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKLSNlbHNlCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRl
IHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgot
CQl9IGVsc2UgewotCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFNDVFAgc29ja2V0
ICovCi0jaWYgZGVmaW5lZChJUFY2X1JFQ1ZQS1RJTkZPKQotCQkJaWYgKHNldHNvY2tvcHQoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVlBL
VElORk8sIChjb25zdCB2b2lkICopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwotI2Vsc2UKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUkVDVlBLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYg
KGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHA2KSk7Ci0jZW5kaWYKLQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdz
Y3RwNikgPSAtMTsKLQkJCX0gZWxzZSB7Ci0jZWxzZQotCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfUEtUSU5GTywo
Y29uc3Qgdm9pZCopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJ
UFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NB
R2V0TGFzdEVycm9yKCkpOwotCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSk7Ci0jZWxzZQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgSVBWNl9QS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKLQkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwot
I2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7Ci0JCQl9
IGVsc2UgewotI2VuZGlmCi0JCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY29uc3Qgdm9pZCopJm9u
LCAoc29ja2xlbl90KXNpemVvZihvbikpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2
X1Y2T05MWSBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
c2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKLSNlbmRpZgotCQkJCX0KLQkJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNiksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAoY29uc3Qgdm9p
ZCAqKSZ0aW1lb3V0LCBzaXplb2YodGltZW91dCkpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNl
dCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKLQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpKTsKLSNlbHNlCi0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJu
byk7Ci0JCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7Ci0jZW5k
aWYKLQkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7Ci0JCQkJfSBl
bHNlIHsKLQkJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JCQkJCWFkZHJfaXB2Ni5zaW42
X2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCQkJ
CWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7Ci0JCQkJCWFkZHJfaXB2Ni5z
aW42X3BvcnQgICAgICAgID0gaHRvbnMoMCk7Ci0JCQkJCWFkZHJfaXB2Ni5zaW42X2FkZHIgICAg
ICAgID0gaW42YWRkcl9hbnk7Ci0JCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyX2lwdjYsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0
IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJ
CQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKLSNlbHNl
Ci0JCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFND
VFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwotI2VuZGlmCi0JCQkJCQlTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNldFJlY2VpdmVC
dWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgU0JfUkFXKTsgLyog
MTI4SyAqLwotCQkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcu
bWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAqLwotCQkJCQl9Ci0JCQkJ
fQotCQkJfQotCQl9Ci0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikg
PT0gLTEpIHsKLQkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgPSBzb2Nr
ZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gLTEpIHsKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAi
Q2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJy
bm8pOwotI2VuZGlmCi0JCX0KLSNpZiBkZWZpbmVkKElQVjZfUkVDVlBLVElORk8pCi0JCWlmIChz
ZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgSVBQUk9UT19JUFY2
LCBJUFY2X1JFQ1ZQS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkg
PCAwKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3Ig
U0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOwotI2Vsc2UKLQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9SRUNWUEtUSU5GTyBvbiBz
b2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotCQkJY2xv
c2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbmRpZgotCQkJU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0JCX0gZWxzZSB7Ci0jZWxzZQotCQlp
ZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9f
SVBWNiwgSVBWNl9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkg
PCAwKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQ
L1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCWNsb3Nl
c29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZWxzZQotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZv
ciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLQkJCWNsb3NlKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZW5kaWYKLQkJCVNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOwotCQl9IGVsc2UgewotI2VuZGlmCi0JCQlpZiAoc2V0
c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9fSVBWNiwg
SVBWNl9WNk9OTFksIChjb25zdCB2b2lkICopJm9uLCAoc29ja2xlbl90KXNpemVvZihvbikpIDwg
MCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9V
RFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9WNk9OTFkgb24gc29ja2V0
IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgotCQkJ
fQotCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCBT
T0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGltZW91dCwgc2l6ZW9mKHRp
bWVvdXQpKSA8IDApIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3Ig
U0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCQkJ
Y2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbHNlCi0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBm
b3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJY2xvc2UoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbmRpZgotCQkJCVNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOwotCQkJfSBlbHNlIHsKLQkJCQltZW1zZXQoKHZv
aWQgKikmYWRkcl9pcHY2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotI2lmZGVm
IEhBVkVfU0lONl9MRU4KLQkJCQlhZGRyX2lwdjYuc2luNl9sZW4gICAgICAgICA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAg
ICAgID0gQUZfSU5FVDY7Ci0JCQkJYWRkcl9pcHY2LnNpbjZfcG9ydCAgICAgICAgPSBodG9ucyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7Ci0JCQkJYWRkcl9pcHY2
LnNpbjZfYWRkciAgICAgICAgPSBpbjZhZGRyX2FueTsKLQkJCQlpZiAoYmluZChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcl9p
cHY2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgewotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0
IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExh
c3RFcnJvcigpKTsKLQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cDYpKTsKLSNlbHNlCi0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBiaW5k
IHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJ
CWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZW5kaWYKLQkJCQkJ
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0JCQkJfSBlbHNlIHsKLQkJ
CQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYp
LCBTQl9SQVcpOyAvKiAxMjhLICovCi0JCQkJCXNldFNlbmRCdWZmZXJTaXplKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgU0JfUkFXKTsgLyogMTI4SyBJcyB0aGlzIHNldHRpbmcg
bmV0LmluZXQucmF3Lm1heGRncmFtIHZhbHVlPyBTaG91bGQgaXQgYmUgc2V0IHRvIDY0Sz8gKi8K
LQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSAhPSAtMSkgewotCQlpbnQg
cmM7Ci0KLQkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUoJlNDVFBfQkFT
RV9WQVIocmVjdnRocmVhZHJvdXRlKSwgJnJlY3ZfZnVuY3Rpb25fcm91dGUpKSkgewotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IHJvdXRpbmcgdGhyZWFkICglZCkuXG4i
LCByYyk7Ci0JCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOwotCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7Ci0JCX0KLQl9Ci0jZW5kaWYKLSNlbmRp
ZgotI2lmIGRlZmluZWQoSU5FVCkKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cCkgIT0gLTEpIHsKLQkJaW50IHJjOwotCi0JCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJl
YWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCAmcmVjdl9mdW5jdGlvbl9y
YXcpKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IFNDVFAvSVB2
NCByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
KTsKLSNlbHNlCi0JCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0j
ZW5kaWYKLQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7Ci0JCX0KLQl9
Ci0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7Ci0JCWludCBy
YzsKLQotCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFkX2NyZWF0ZSgmU0NUUF9CQVNF
X1ZBUihyZWN2dGhyZWFkdWRwKSwgJnJlY3ZfZnVuY3Rpb25fdWRwKSkpIHsKLQkJCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL1VEUC9JUHY0IHJlY3YgdGhyZWFkICgl
ZCkuXG4iLCByYyk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJY2xv
c2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2Vsc2UKLQkJCWNs
b3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKLSNlbmRpZgotCQkJU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKLQkJfQotCX0KLSNlbmRpZgotI2lmIGRl
ZmluZWQoSU5FVDYpCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSAhPSAt
MSkgewotCQlpbnQgcmM7Ci0KLQkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVh
dGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJhdzYpLCAmcmVjdl9mdW5jdGlvbl9yYXc2KSkp
IHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL0lQdjYgcmVj
diB0aHJlYWQgKCVkKS5cbiIsIHJjKTsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi0JCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwot
I2Vsc2UKLQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7Ci0jZW5k
aWYKLQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9IC0xOwotCQl9Ci0JfQot
CWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpIHsKLQkJaW50IHJj
OwotCi0JCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0Vf
VkFSKHJlY3Z0aHJlYWR1ZHA2KSwgJnJlY3ZfZnVuY3Rpb25fdWRwNikpKSB7Ci0JCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc3RhcnQgU0NUUC9VRFAvSVB2NiByZWN2IHRocmVhZCAo
JWQpLlxuIiwgcmMpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCWNs
b3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZWxzZQotCQkJ
Y2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbmRpZgotCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0K
LQotdm9pZAotcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKQotewotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RyYWdvbkZseSkgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVm
aW5lZChJTkVUNikKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpICE9IC0xKSB7
Ci0JCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7Ci0JfQotI2VuZGlmCi0j
ZW5kaWYKLSNpZiBkZWZpbmVkKElORVQpCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0jZWxzZQotCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0jZW5kaWYKLQl9Ci0JaWYg
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwKSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCWlmIChT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHA2KSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwNikpOwotI2VuZGlmCi0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwNikgIT0gLTEpIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCWNs
b3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZWxzZQotCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOwotI2VuZGlmCi0JfQotI2Vu
ZGlmCi19Ci0jZWxzZQotaW50IGZvbzsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNl
cl9yZWN2X3RocmVhZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCA2MWNkZjE3MjExMmM1MWFjMGZlM2JjYWZmOGI0ODU1Y2Y3YTYw
YWNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzZXJfcmVjdl90aHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0xLDM0ICswLDAgQEAKLS8q
LQotICogQ29weXJpZ2h0IChjKSAyMDEyIE1pY2hhZWwgVHVleGVuCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5k
ZWYgX1VTRVJfUkVDVl9USFJFQURfSF8KLSNkZWZpbmUJX1VTRVJfUkVDVl9USFJFQURfSF8KLQot
dm9pZCByZWN2X3RocmVhZF9pbml0KHZvaWQpOwotdm9pZCByZWN2X3RocmVhZF9kZXN0cm95KHZv
aWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcm91dGUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzZXJfcm91dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODJiMDdkNzY5
YTljZWMzOWMwNDEzZjBmNTQ5YzRkMjA2MmQ3ZmU1YS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3JvdXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMzAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODAsIDE5ODYsIDE5
OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
Ci0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8K
LQotI2lmbmRlZiBfVVNFUl9ST1VURV9IXwotI2RlZmluZSBfVVNFUl9ST1VURV9IXwotCi0vKgot
ICogS2VybmVsIHJlc2lkZW50IHJvdXRpbmcgdGFibGVzLgotICoKLSAqIFRoZSByb3V0aW5nIHRh
YmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBpbnRlcmZhY2UgYWRkcmVzc2VzCi0gKiBhcmUgc2V0
IGJ5IG1ha2luZyBlbnRyaWVzIGZvciBhbGwgZGlyZWN0bHkgY29ubmVjdGVkIGludGVyZmFjZXMu
Ci0gKi8KLQotLyoKLSAqIEEgcm91dGUgY29uc2lzdHMgb2YgYSBkZXN0aW5hdGlvbiBhZGRyZXNz
IGFuZCBhIHJlZmVyZW5jZQotICogdG8gYSByb3V0aW5nIGVudHJ5LiAgVGhlc2UgYXJlIG9mdGVu
IGhlbGQgYnkgcHJvdG9jb2xzCi0gKiBpbiB0aGVpciBjb250cm9sIGJsb2NrcywgZS5nLiBpbnBj
Yi4KLSAqLwotCi1zdHJ1Y3Qgc2N0cF9yb3V0ZSB7Ci0Jc3RydWN0CXNjdHBfcnRlbnRyeSAqcm9f
cnQ7Ci0Jc3RydWN0CXNvY2thZGRyIHJvX2RzdDsKLX07Ci0KLS8qCi0gKiBUaGVzZSBudW1iZXJz
IGFyZSB1c2VkIGJ5IHJlbGlhYmxlIHByb3RvY29scyBmb3IgZGV0ZXJtaW5pbmcKLSAqIHJldHJh
bnNtaXNzaW9uIGJlaGF2aW9yIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhlIHJvdXRpbmcgc3RydWN0
dXJlLgotICovCi1zdHJ1Y3Qgc2N0cF9ydF9tZXRyaWNzX2xpdGUgewotCXVpbnQzMl90IHJteF9t
dHU7CS8qIE1UVSBmb3IgdGhpcyBwYXRoICovCi0jaWYgMAotCXVfbG9uZwlybXhfZXhwaXJlOwkv
KiBsaWZldGltZSBmb3Igcm91dGUsIGUuZy4gcmVkaXJlY3QgKi8KLQl1X2xvbmcJcm14X3Brc2Vu
dDsJLyogcGFja2V0cyBzZW50IHVzaW5nIHRoaXMgcm91dGUgKi8KLSNlbmRpZgotfTsKLQotLyoK
LSAqIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gcm91dGVzIHRvIGhvc3RzIGFuZCByb3V0ZXMgdG8g
bmV0d29ya3MsCi0gKiBwcmVmZXJyaW5nIHRoZSBmb3JtZXIgaWYgYXZhaWxhYmxlLiAgRm9yIGVh
Y2ggcm91dGUgd2UgaW5mZXIKLSAqIHRoZSBpbnRlcmZhY2UgdG8gdXNlIGZyb20gdGhlIGdhdGV3
YXkgYWRkcmVzcyBzdXBwbGllZCB3aGVuCi0gKiB0aGUgcm91dGUgd2FzIGVudGVyZWQuICBSb3V0
ZXMgdGhhdCBmb3J3YXJkIHBhY2tldHMgdGhyb3VnaAotICogZ2F0ZXdheXMgYXJlIG1hcmtlZCBz
byB0aGF0IHRoZSBvdXRwdXQgcm91dGluZXMga25vdyB0byBhZGRyZXNzIHRoZQotICogZ2F0ZXdh
eSByYXRoZXIgdGhhbiB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24uCi0gKi8KLXN0cnVjdCBzY3Rw
X3J0ZW50cnkgewotI2lmIDAKLQlzdHJ1Y3QJcmFkaXhfbm9kZSBydF9ub2Rlc1syXTsJLyogdHJl
ZSBnbHVlLCBhbmQgb3RoZXIgdmFsdWVzICovCi0JLyoKLQkgKiBYWFggc3RydWN0IHJ0ZW50cnkg
bXVzdCBiZWdpbiB3aXRoIGEgc3RydWN0IHJhZGl4X25vZGUgKG9yIHR3byEpCi0JICogYmVjYXVz
ZSB0aGUgY29kZSBkb2VzIHNvbWUgY2FzdHMgb2YgYSAnc3RydWN0IHJhZGl4X25vZGUgKicKLQkg
KiB0byBhICdzdHJ1Y3QgcnRlbnRyeSAqJwotCSAqLwotI2RlZmluZQlydF9rZXkocikJKCooKHN0
cnVjdCBzb2NrYWRkciAqKikoJihyKS0+cnRfbm9kZXMtPnJuX2tleSkpKQotI2RlZmluZQlydF9t
YXNrKHIpCSgqKChzdHJ1Y3Qgc29ja2FkZHIgKiopKCYociktPnJ0X25vZGVzLT5ybl9tYXNrKSkp
Ci0Jc3RydWN0CXNvY2thZGRyICpydF9nYXRld2F5OwkvKiB2YWx1ZSAqLwotCXVfbG9uZwlydF9m
bGFnczsJCS8qIHVwL2Rvd24/LCBob3N0L25ldCAqLwotI2VuZGlmCi0Jc3RydWN0CWlmbmV0ICpy
dF9pZnA7CQkvKiB0aGUgYW5zd2VyOiBpbnRlcmZhY2UgdG8gdXNlICovCi0Jc3RydWN0CWlmYWRk
ciAqcnRfaWZhOwkJLyogdGhlIGFuc3dlcjogaW50ZXJmYWNlIGFkZHJlc3MgdG8gdXNlICovCi0J
c3RydWN0CXNjdHBfcnRfbWV0cmljc19saXRlIHJ0X3JteDsJLyogbWV0cmljcyB1c2VkIGJ5IHJ4
J2luZyBwcm90b2NvbHMgKi8KLQlsb25nCXJ0X3JlZmNudDsJCS8qICMgaGVsZCByZWZlcmVuY2Vz
ICovCi0jaWYgMAotCXN0cnVjdAlzb2NrYWRkciAqcnRfZ2VubWFzazsJLyogZm9yIGdlbmVyYXRp
b24gb2YgY2xvbmVkIHJvdXRlcyAqLwotCWNhZGRyX3QJcnRfbGxpbmZvOwkJLyogcG9pbnRlciB0
byBsaW5rIGxldmVsIGluZm8gY2FjaGUgKi8KLQlzdHJ1Y3QJcnRlbnRyeSAqcnRfZ3dyb3V0ZTsJ
LyogaW1wbGllZCBlbnRyeSBmb3IgZ2F0ZXdheWVkIHJvdXRlcyAqLwotCXN0cnVjdAlydGVudHJ5
ICpydF9wYXJlbnQ7IAkvKiBjbG9uaW5nIHBhcmVudCBvZiB0aGlzIHJvdXRlICovCi0jZW5kaWYK
LQlzdHJ1Y3QJbXR4IHJ0X210eDsJCS8qIG11dGV4IGZvciByb3V0aW5nIGVudHJ5ICovCi19Owot
Ci0jZGVmaW5lCVJUX0xPQ0tfSU5JVChfcnQpCW10eF9pbml0KCYoX3J0KS0+cnRfbXR4LCAicnRl
bnRyeSIsIE5VTEwsIE1UWF9ERUYgfCBNVFhfRFVQT0spCi0jZGVmaW5lCVJUX0xPQ0soX3J0KQkJ
bXR4X2xvY2soJihfcnQpLT5ydF9tdHgpCi0jZGVmaW5lCVJUX1VOTE9DSyhfcnQpCQltdHhfdW5s
b2NrKCYoX3J0KS0+cnRfbXR4KQotI2RlZmluZQlSVF9MT0NLX0RFU1RST1koX3J0KQltdHhfZGVz
dHJveSgmKF9ydCktPnJ0X210eCkKLSNkZWZpbmUJUlRfTE9DS19BU1NFUlQoX3J0KQltdHhfYXNz
ZXJ0KCYoX3J0KS0+cnRfbXR4LCBNQV9PV05FRCkKLQotI2RlZmluZQlSVF9BRERSRUYoX3J0KQlk
byB7CQkJCQlcCi0JUlRfTE9DS19BU1NFUlQoX3J0KTsJCQkJCVwKLQlLQVNTRVJUKChfcnQpLT5y
dF9yZWZjbnQgPj0gMCwJCQkJXAotCQkoIm5lZ2F0aXZlIHJlZmNudCAlbGQiLCAoX3J0KS0+cnRf
cmVmY250KSk7CVwKLQkoX3J0KS0+cnRfcmVmY250Kys7CQkJCQlcCi19IHdoaWxlICgwKQotI2Rl
ZmluZQlSVF9SRU1SRUYoX3J0KQlkbyB7CQkJCQlcCi0JUlRfTE9DS19BU1NFUlQoX3J0KTsJCQkJ
CVwKLQlLQVNTRVJUKChfcnQpLT5ydF9yZWZjbnQgPiAwLAkJCQlcCi0JCSgiYm9ndXMgcmVmY250
ICVsZCIsIChfcnQpLT5ydF9yZWZjbnQpKTsJXAotCShfcnQpLT5ydF9yZWZjbnQtLTsJCQkJCVwK
LX0gd2hpbGUgKDApCi0jZGVmaW5lCVJURlJFRV9MT0NLRUQoX3J0KSBkbyB7CQkJCQlcCi0JCWlm
ICgoX3J0KS0+cnRfcmVmY250IDw9IDEpIHsJCQlcCi0JCQlydGZyZWUoX3J0KTsJCQkJXAotCQl9
IGVsc2UgewkJCQkJXAotCQkJUlRfUkVNUkVGKF9ydCk7CQkJCVwKLQkJCVJUX1VOTE9DSyhfcnQp
OwkJCQlcCi0JCX0JCQkJCQlcCi0JCS8qIGd1YXJkIGFnYWluc3QgaW52YWxpZCByZWZzICovCQlc
Ci0JCV9ydCA9IE5VTEw7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUJUlRGUkVFKF9ydCkg
ZG8gewkJCQkJXAotCQlSVF9MT0NLKF9ydCk7CQkJCQlcCi0JCVJURlJFRV9MT0NLRUQoX3J0KTsJ
CQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9zb2Nr
ZXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGI5NGUxZTVjMjRhZjMzMGVjNjc4NzYxZTkyMGE1NWU3ZmIxOTY4MWQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQu
YworKysgL2Rldi9udWxsCkBAIC0xLDM1NDkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMp
IDE5ODIsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTMKLSAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhl
IFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIENvcHlyaWdodCAoYykgMjAwNCBUaGUgRnJl
ZUJTRCBGb3VuZGF0aW9uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAwOCBSb2JlcnQgTi4gTS4g
V2F0c29uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29weXJp
Z2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDExLTIw
MTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1
ZXhlbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg
QU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHB1dGlsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGVlbG9mZi5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9jcmMzMi5oPgotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0jaW5jbHVkZSA8
c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQot
I2RlZmluZSBfX0ZBVk9SX0JTRCAgICAvKiAob24gVWJ1bnR1IGF0IGxlYXN0KSBlbmFibGVzIFVE
UCBoZWFkZXIgZmllbGQgbmFtZXMgbGlrZSBCU0QgaW4gUkZDIDc2OCAqLwotI2VuZGlmCi0jaWYg
IWRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZCBJTkVUIHx8IGRl
ZmluZWQgSU5FVDYKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8
YXJwYS9pbmV0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVzZXJfc29ja2V0dmFyLmg+Ci0jZW5kaWYK
LXVzZXJsYW5kX211dGV4X3QgYWNjZXB0X210eDsKLXVzZXJsYW5kX2NvbmRfdCBhY2NlcHRfY29u
ZDsKLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWVi
Lmg+Ci0jZW5kaWYKLQotTUFMTE9DX0RFRklORShNX1BDQiwgInNjdHBfcGNiIiwgInNjdHAgcGNi
Iik7Ci1NQUxMT0NfREVGSU5FKE1fU09OQU1FLCAic2N0cF9zb25hbWUiLCAic2N0cCBzb25hbWUi
KTsKLSNkZWZpbmUgTUFYTEVOX01CVUZfQ0hBSU4gIDMyCi0KLS8qIFByb3RvdHlwZXMgKi8KLWV4
dGVybiBpbnQgc2N0cF9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
YWRkciwgc3RydWN0IHVpbyAqdWlvLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1
ZiAqdG9wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgaW50IGZsYWdzLAotICAgICAgICAgICAgICAg
ICAgICAgICAvKiBwcm9jIGlzIGEgZHVtbXkgaW4gX19Vc2Vyc3BhY2VfXyBhbmQgd2lsbCBub3Qg
YmUgcGFzc2VkIHRvIHNjdHBfbG93ZXJfc29zZW5kICovCi0gICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBwcm9jICpwKTsKLQotZXh0ZXJuIGludCBzY3RwX2F0dGFjaChzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IHByb3RvLCB1aW50MzJfdCB2cmZfaWQpOwotZXh0ZXJuIGludCBzY3RwY29ubl9h
dHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3QgdnJmX2lkKTsKLQot
dm9pZAotdXNyc2N0cF9pbml0KHVpbnQxNl90IHBvcnQsCi0gICAgICAgICAgICAgaW50ICgqY29u
bl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhf
dCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKLSAgICAgICAgICAgICB2b2lkICgqZGVidWdfcHJpbnRm
KShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlXU0FEQVRB
IHdzYURhdGE7Ci0KLQlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0g
MCkgewotCQlTQ1RQX1BSSU5URigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOwotCQlleGl0ICgtMSk7
Ci0JfQotI2VuZGlmCi0JSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCZhY2NlcHRfY29uZCk7
Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmYWNjZXB0X210eCk7Ci0jZWxzZQotCXB0aHJl
YWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0cjsKLQotCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11
dGV4X2F0dHIpOwotI2lmZGVmIElOVkFSSUFOVFMKLQlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBl
KCZtdXRleF9hdHRyLCBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spOwotI2VuZGlmCi0JcHRocmVh
ZF9tdXRleF9pbml0KCZhY2NlcHRfbXR4LCAmbXV0ZXhfYXR0cik7Ci0JcHRocmVhZF9tdXRleGF0
dHJfZGVzdHJveSgmbXV0ZXhfYXR0cik7Ci0JcHRocmVhZF9jb25kX2luaXQoJmFjY2VwdF9jb25k
LCBOVUxMKTsKLSNlbmRpZgotCXNjdHBfaW5pdChwb3J0LCBjb25uX291dHB1dCwgZGVidWdfcHJp
bnRmKTsKLX0KLQotCi0vKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2J1
Zi5jIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXyovCi0vKgotICogU29jYW50c2VuZG1v
cmUgaW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBkYXRhIHdpbGwgYmUgc2VudCBvbiB0aGUgc29ja2V0
OyBpdAotICogd291bGQgbm9ybWFsbHkgYmUgYXBwbGllZCB0byBhIHNvY2tldCB3aGVuIHRoZSB1
c2VyIGluZm9ybXMgdGhlIHN5c3RlbQotICogdGhhdCBubyBtb3JlIGRhdGEgaXMgdG8gYmUgc2Vu
dCwgYnkgdGhlIHByb3RvY29sIGNvZGUgKGluIGNhc2UKLSAqIFBSVV9TSFVURE9XTikuICBTb2Nh
bnRyY3Ztb3JlIGluZGljYXRlcyB0aGF0IG5vIG1vcmUgZGF0YSB3aWxsIGJlCi0gKiByZWNlaXZl
ZCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXBwbGllZCB0byB0aGUgc29ja2V0IGJ5IGEgcHJvdG9j
b2wgd2hlbiBpdAotICogZGV0ZWN0cyB0aGF0IHRoZSBwZWVyIHdpbGwgc2VuZCBubyBtb3JlIGRh
dGEuICBEYXRhIHF1ZXVlZCBmb3IgcmVhZGluZyBpbgotICogdGhlIHNvY2tldCBtYXkgeWV0IGJl
IHJlYWQuCi0gKi8KLQotdm9pZCBzb2NhbnRyY3Ztb3JlX2xvY2tlZChzdHJ1Y3Qgc29ja2V0ICpz
bykKLXsKLQlTT0NLQlVGX0xPQ0tfQVNTRVJUKCZzby0+c29fcmN2KTsKLQlzby0+c29fcmN2LnNi
X3N0YXRlIHw9IFNCU19DQU5UUkNWTU9SRTsKLQlzb3J3YWtldXBfbG9ja2VkKHNvKTsKLX0KLQot
dm9pZCBzb2NhbnRyY3Ztb3JlKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCVNPQ0tCVUZfTE9DSygm
c28tPnNvX3Jjdik7Ci0Jc29jYW50cmN2bW9yZV9sb2NrZWQoc28pOwotfQotCi12b2lkCi1zb2Nh
bnRzZW5kbW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAqc28pCi17Ci0JU09DS0JVRl9MT0NLX0FT
U0VSVCgmc28tPnNvX3NuZCk7Ci0Jc28tPnNvX3NuZC5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFNFTkRN
T1JFOwotCXNvd3dha2V1cF9sb2NrZWQoc28pOwotfQotCi12b2lkCi1zb2NhbnRzZW5kbW9yZShz
dHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOwotCXNvY2Fu
dHNlbmRtb3JlX2xvY2tlZChzbyk7Ci19Ci0KLQotCi0vKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5
cy9rZXJuL3VpcGNfc29ja2J1Zi5jIGFuZCBjYWxsZWQgd2l0aGluIHNjdHBfbG93ZXJfc29zZW5k
LgotICovCi1pbnQKLXNid2FpdChzdHJ1Y3Qgc29ja2J1ZiAqc2IpCi17Ci0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKSAvKiBfX1VzZXJzcGFjZV9fICovCi0KLQlTT0NLQlVGX0xPQ0tfQVNTRVJU
KHNiKTsKLQotCXNiLT5zYl9mbGFncyB8PSBTQl9XQUlUOwotI2lmIGRlZmluZWQgKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0JaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFibGVDUygmKHNiLT5zYl9j
b25kKSwgJihzYi0+c2JfbXR4KSwgSU5GSU5JVEUpKQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJl
dHVybiAtMTsKLSNlbHNlCi0JcmV0dXJuIChwdGhyZWFkX2NvbmRfd2FpdCgmKHNiLT5zYl9jb25k
KSwgJihzYi0+c2JfbXR4KSkpOwotI2VuZGlmCi0KLSNlbHNlCi0JU09DS0JVRl9MT0NLX0FTU0VS
VChzYik7Ci0KLQlzYi0+c2JfZmxhZ3MgfD0gU0JfV0FJVDsKLQlyZXR1cm4gKG1zbGVlcCgmc2It
PnNiX2NjLCAmc2ItPnNiX210eCwKLQkgICAgKHNiLT5zYl9mbGFncyAmIFNCX05PSU5UUikgPyBQ
U09DSyA6IFBTT0NLIHwgUENBVENILCAic2J3YWl0IiwKLQkgICAgc2ItPnNiX3RpbWVvKSk7Ci0j
ZW5kaWYKLX0KLQotCi0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tl
dC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqLwotc3RhdGljIHN0cnVj
dCBzb2NrZXQgKgotc29hbGxvYyh2b2lkKQotewotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JLyoK
LQkgKiBzb2FsbG9jKCkgc2V0cyBvZiBzb2NrZXQgbGF5ZXIgc3RhdGUgZm9yIGEgc29ja2V0LAot
CSAqIGNhbGxlZCBvbmx5IGJ5IHNvY3JlYXRlKCkgYW5kIHNvbmV3Y29ubigpLgotCSAqCi0JICog
c29kZWFsbG9jKCkgdGVhcnMgZG93biBzb2NrZXQgbGF5ZXIgc3RhdGUgZm9yIGEgc29ja2V0LAot
CSAqIGNhbGxlZCBvbmx5IGJ5IHNvZnJlZSgpIGFuZCBzb25ld2Nvbm4oKS4KLQkgKiBfX1VzZXJz
cGFjZV9fIFRPRE8gOiBNYWtlIHN1cmUgc28gaXMgcHJvcGVybHkgZGVhbGxvY2F0ZWQKLQkgKiB3
aGVuIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4KLQkgKi8KLQotCXNvID0gKHN0cnVjdCBz
b2NrZXQgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrZXQpKTsKLQotCWlmIChzbyA9PSBOVUxM
KSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW1lbXNldChzbywgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrZXQpKTsKLQotCS8qIF9fVXNlcnNwYWNlX18gSW5pdGlhbGl6aW5nIHRoZSBzb2NrZXQgbG9j
a3MgaGVyZSAqLwotCVNPQ0tCVUZfTE9DS19JTklUKCZzby0+c29fc25kLCAic29fc25kIik7Ci0J
U09DS0JVRl9MT0NLX0lOSVQoJnNvLT5zb19yY3YsICJzb19yY3YiKTsKLQlTT0NLQlVGX0NPTkRf
SU5JVCgmc28tPnNvX3NuZCk7Ci0JU09DS0JVRl9DT05EX0lOSVQoJnNvLT5zb19yY3YpOwotCVNP
Q0tfQ09ORF9JTklUKHNvKTsgLyogdGltZW9fY29uZCAqLwotCi0JLyogX19Vc2Vyc3BhY2VfXyBB
bnkgcmVmIGNvdW50aW5nIHJlcXVpcmVkIGhlcmU/IFdpbGwgd2UgaGF2ZSBhbnkgdXNlIGZvciBh
aW9qb2JxPwotCSAgIFdoYXQgYWJvdXQgZ2VuY250IGFuZCBudW1vcGVuc29ja2V0cz8qLwotCVRB
SUxRX0lOSVQoJnNvLT5zb19haW9qb2JxKTsKLQlyZXR1cm4gKHNvKTsKLX0KLQotc3RhdGljIHZv
aWQKLXNvZGVhbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQotCUtBU1NFUlQoc28tPnNvX2Nv
dW50ID09IDAsICgic29kZWFsbG9jKCk6IHNvX2NvdW50ICVkIiwgc28tPnNvX2NvdW50KSk7Ci0J
S0FTU0VSVChzby0+c29fcGNiID09IE5VTEwsICgic29kZWFsbG9jKCk6IHNvX3BjYiAhPSBOVUxM
IikpOwotCi0JU09DS0JVRl9DT05EX0RFU1RST1koJnNvLT5zb19zbmQpOwotCVNPQ0tCVUZfQ09O
RF9ERVNUUk9ZKCZzby0+c29fcmN2KTsKLQotCVNPQ0tfQ09ORF9ERVNUUk9ZKHNvKTsKLQotCVNP
Q0tCVUZfTE9DS19ERVNUUk9ZKCZzby0+c29fc25kKTsKLQlTT0NLQlVGX0xPQ0tfREVTVFJPWSgm
c28tPnNvX3Jjdik7Ci0KLQlmcmVlKHNvKTsKLX0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMv
a2Vybi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAq
Lwotdm9pZAotc29mcmVlKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBzb2NrZXQgKmhl
YWQ7Ci0KLQlBQ0NFUFRfTE9DS19BU1NFUlQoKTsKLQlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsKLQkv
KiBTU19OT0ZEUkVGIHVuc2V0IGluIGFjY2VwdCBjYWxsLiAgdGhpcyBjb25kaXRpb24gc2VlbXMg
aXJyZWxldmVudAotCSAqICBmb3IgX19Vc2Vyc3BhY2VfXy4uLgotCSAqLwotCWlmIChzby0+c29f
Y291bnQgIT0gMCB8fAotCSAgICAoc28tPnNvX3N0YXRlICYgU1NfUFJPVE9SRUYpIHx8IChzby0+
c29fcXN0YXRlICYgU1FfQ09NUCkpIHsKLQkJU09DS19VTkxPQ0soc28pOwotCQlBQ0NFUFRfVU5M
T0NLKCk7Ci0JCXJldHVybjsKLQl9Ci0JaGVhZCA9IHNvLT5zb19oZWFkOwotCWlmIChoZWFkICE9
IE5VTEwpIHsKLQkJS0FTU0VSVCgoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVApICE9IDAgfHwKLQkJ
ICAgIChzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSAhPSAwLAotCQkgICAgKCJzb2ZyZWU6IHNv
X2hlYWQgIT0gTlVMTCwgYnV0IG5laXRoZXIgU1FfQ09NUCBub3IgIgotCQkgICAgIlNRX0lOQ09N
UCIpKTsKLQkJS0FTU0VSVCgoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVApID09IDAgfHwKLQkJICAg
IChzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSA9PSAwLAotCQkgICAgKCJzb2ZyZWU6IHNvLT5z
b19xc3RhdGUgaXMgU1FfQ09NUCBhbmQgYWxzbyBTUV9JTkNPTVAiKSk7Ci0JCVRBSUxRX1JFTU9W
RSgmaGVhZC0+c29faW5jb21wLCBzbywgc29fbGlzdCk7Ci0JCWhlYWQtPnNvX2luY3FsZW4tLTsK
LQkJc28tPnNvX3FzdGF0ZSAmPSB+U1FfSU5DT01QOwotCQlzby0+c29faGVhZCA9IE5VTEw7Ci0J
fQotCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUgJiBTUV9DT01QKSA9PSAwICYmCi0JICAgIChzby0+
c29fcXN0YXRlICYgU1FfSU5DT01QKSA9PSAwLAotCSAgICAoInNvZnJlZTogc29faGVhZCA9PSBO
VUxMLCBidXQgc3RpbGwgU1FfQ09NUCglZCkgb3IgU1FfSU5DT01QKCVkKSIsCi0JICAgIHNvLT5z
b19xc3RhdGUgJiBTUV9DT01QLCBzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSk7Ci0JaWYgKHNv
LT5zb19vcHRpb25zICYgU0NUUF9TT19BQ0NFUFRDT05OKSB7Ci0JCUtBU1NFUlQoKFRBSUxRX0VN
UFRZKCZzby0+c29fY29tcCkpLCAoInNvZnJlZTogc29fY29tcCBwb3B1bGF0ZWQiKSk7Ci0JCUtB
U1NFUlQoKFRBSUxRX0VNUFRZKCZzby0+c29faW5jb21wKSksICgic29mcmVlOiBzb19jb21wIHBv
cHVsYXRlZCIpKTsKLQl9Ci0JU09DS19VTkxPQ0soc28pOwotCUFDQ0VQVF9VTkxPQ0soKTsKLQlz
Y3RwX2Nsb3NlKHNvKTsgLyogd2FzLi4uICAgIHNjdHBfZGV0YWNoKHNvKTsgKi8KLQkvKgotCSAq
IEZyb20gdGhpcyBwb2ludCBvbiwgd2UgYXNzdW1lIHRoYXQgbm8gb3RoZXIgcmVmZXJlbmNlcyB0
byB0aGlzCi0JICogc29ja2V0IGV4aXN0IGFueXdoZXJlIGVsc2UgaW4gdGhlIHN0YWNrLiAgVGhl
cmVmb3JlLCBubyBsb2NrcyBuZWVkCi0JICogdG8gYmUgYWNxdWlyZWQgb3IgaGVsZC4KLQkgKgot
CSAqIFdlIHVzZWQgdG8gZG8gYSBsb3Qgb2Ygc29ja2V0IGJ1ZmZlciBhbmQgc29ja2V0IGxvY2tp
bmcgaGVyZSwgYXMKLQkgKiB3ZWxsIGFzIGludm9rZSBzb3JmbHVzaCgpIGFuZCBwZXJmb3JtIHdh
a2V1cHMuICBUaGUgZGlyZWN0IGNhbGwgdG8KLQkgKiBkb21fZGlzcG9zZSgpIGFuZCBzYnJlbGVh
c2VfaW50ZXJuYWwoKSBhcmUgYW4gaW5saW5pbmcgb2Ygd2hhdCB3YXMKLQkgKiBuZWNlc3Nhcnkg
ZnJvbSBzb3JmbHVzaCgpLgotCSAqCi0JICogTm90aWNlIHRoYXQgdGhlIHNvY2tldCBidWZmZXIg
YW5kIGtxdWV1ZSBzdGF0ZSBhcmUgdG9ybiBkb3duCi0JICogYmVmb3JlIGNhbGxpbmcgcHJ1X2Rl
dGFjaC4gIFRoaXMgbWVhbnMgdGhhdCBwcm90b2NvbHMgc2hvbGQgbm90Ci0JICogYXNzdW1lIHRo
ZXkgY2FuIHBlcmZvcm0gc29ja2V0IHdha2V1cHMsIGV0YywgaW4gdGhlaXIgZGV0YWNoIGNvZGUu
Ci0JICovCi0Jc29kZWFsbG9jKHNvKTsKLX0KLQotCi0KLS8qIFRha2VuIGZyb20gIC9zcmMvc3lz
L2tlcm4vdWlwY19zb2NrZXQuYyAqLwotdm9pZAotc29hYm9ydChzdHJ1Y3Qgc29ja2V0ICpzbykK
LXsKLSNpZiBkZWZpbmVkKElORVQ2KQotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0jZW5kaWYK
LQotI2lmIGRlZmluZWQoSU5FVDYpCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNv
X3BjYjsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsK
LQkJc2N0cDZfYWJvcnQoc28pOwotCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQlzY3Rw
X2Fib3J0KHNvKTsKLSNlbmRpZgotCX0KLSNlbGlmIGRlZmluZWQoSU5FVCkKLQlzY3RwX2Fib3J0
KHNvKTsKLSNlbmRpZgotCUFDQ0VQVF9MT0NLKCk7Ci0JU09DS19MT0NLKHNvKTsKLQlzb2ZyZWUo
c28pOwotfQotCi0KLS8qIFRha2VuIGZyb20gIHVzci9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQu
YyBhbmQgY2FsbGVkIHdpdGhpbiBzY3RwX2Nvbm5lY3QgKHNjdHBfdXNycmVxLmMpLgotICogIFdl
IHVzZSBzY3RwX2Nvbm5lY3QgZm9yIHNlbmRfb25lX2luaXRfcmVhbCBpbiBtczEuCi0gKi8KLXZv
aWQKLXNvaXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCi0JU09DS19MT0NLKHNv
KTsKLQlzby0+c29fc3RhdGUgJj0gfihTU19JU0NPTk5FQ1RFRHxTU19JU0RJU0NPTk5FQ1RJTkcp
OwotCXNvLT5zb19zdGF0ZSB8PSBTU19JU0NPTk5FQ1RJTkc7Ci0JU09DS19VTkxPQ0soc28pOwot
fQotCi0vKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgYW5kIGNh
bGxlZCB3aXRoaW4gc2N0cF9kaXNjb25uZWN0IChzY3RwX3VzcnJlcS5jKS4KLSAqICBUT0RPIERv
IHdlIHVzZSBzY3RwX2Rpc2Nvbm5lY3Q/Ci0gKi8KLXZvaWQKLXNvaXNkaXNjb25uZWN0aW5nKHN0
cnVjdCBzb2NrZXQgKnNvKQotewotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdGU6IFRoaXMg
Y29kZSBhc3N1bWVzIHRoYXQgU09DS19MT0NLKHNvKSBhbmQKLSAgICAgICAgICogU09DS0JVRl9M
T0NLKCZzby0+c29fcmN2KSBhcmUgdGhlIHNhbWUuCi0gICAgICAgICAqLwotICAgICAgICBTT0NL
QlVGX0xPQ0soJnNvLT5zb19yY3YpOwotICAgICAgICBzby0+c29fc3RhdGUgJj0gflNTX0lTQ09O
TkVDVElORzsKLSAgICAgICAgc28tPnNvX3N0YXRlIHw9IFNTX0lTRElTQ09OTkVDVElORzsKLSAg
ICAgICAgc28tPnNvX3Jjdi5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFJDVk1PUkU7Ci0gICAgICAgIHNv
cndha2V1cF9sb2NrZWQoc28pOwotICAgICAgICBTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOwot
ICAgICAgICBzby0+c29fc25kLnNiX3N0YXRlIHw9IFNCU19DQU5UU0VORE1PUkU7Ci0gICAgICAg
IHNvd3dha2V1cF9sb2NrZWQoc28pOwotICAgICAgICB3YWtldXAoImR1bW15Iixzbyk7Ci0gICAg
ICAgIC8qIHJlcXVpcmVzIDIgYXJncyBidXQgdGhpcyB3YXMgaW4gb3JpZyAqLwotICAgICAgICAv
KiB3YWtldXAoJnNvLT5zb190aW1lbyk7ICovCi19Ci0KLQotLyogVGFrZW4gZnJvbSBzeXMva2Vy
bi9rZXJuX3N5bmNoLmMgYW5kCi0gICBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXwotKi8KLQot
LyoKLSAqIE1ha2UgYWxsIHRocmVhZHMgc2xlZXBpbmcgb24gdGhlIHNwZWNpZmllZCBpZGVudGlm
aWVyIHJ1bm5hYmxlLgotICogQXNzb2NpYXRpbmcgd2FrZXVwIHdpdGggc29fdGltZW8gaWRlbnRp
ZmllciBhbmQgdGltZW9fY29uZAotICogY29uZGl0aW9uIHZhcmlhYmxlLiBUT0RPLiBJZiB3ZSB1
c2UgaXRlcmF0b3IgdGhyZWFkIHRoZW4gd2UgbmVlZCB0bwotICogbW9kaWZ5IHdha2V1cCBzbyBp
dCBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpdGVyYXRvciBpZGVudGlmaWVyIGFuZAotICogdGlt
ZW8gaWRlbnRpZmllci4KLSAqLwotdm9pZAotd2FrZXVwKGlkZW50LCBzbykKLQl2b2lkICppZGVu
dDsKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLXsKLQlTT0NLX0xPQ0soc28pOwotI2lmIGRlZmluZWQg
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JV2FrZUFsbENvbmRpdGlvblZhcmlhYmxlKCYoc28p
LT50aW1lb19jb25kKTsKLSNlbHNlCi0JcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmKHNvKS0+dGlt
ZW9fY29uZCk7Ci0jZW5kaWYKLQlTT0NLX1VOTE9DSyhzbyk7Ci19Ci0KLQotLyoKLSAqIE1ha2Ug
YSB0aHJlYWQgc2xlZXBpbmcgb24gdGhlIHNwZWNpZmllZCBpZGVudGlmaWVyIHJ1bm5hYmxlLgot
ICogTWF5IHdha2UgbW9yZSB0aGFuIG9uZSB0aHJlYWQgaWYgYSB0YXJnZXQgdGhyZWFkIGlzIGN1
cnJlbnRseQotICogc3dhcHBlZCBvdXQuCi0gKi8KLXZvaWQKLXdha2V1cF9vbmUodm9pZCAqaWRl
bnQpCi17Ci0JLyogX19Vc2Vyc3BhY2VfXyBDaGVjazogV2UgYXJlIHVzaW5nIGFjY2VwdF9jb25k
IGZvciB3YWtldXBfb25lLgotCSAgSXQgc2VlbXMgdGhhdCB3YWtldXBfb25lIGlzIG9ubHkgY2Fs
bGVkIHdpdGhpbgotCSAgc29pc2Nvbm5lY3RlZCgpIGFuZCBzb25ld2Nvbm4oKSB3aXRoIGlkZW50
ICZoZWFkLT5zb190aW1lbwotCSAgaGVhZCBpcyBzby0+c29faGVhZCwgd2hpY2ggaXMgYmFjayBw
b2ludGVyIHRvIGxpc3RlbiBzb2NrZXQKLQkgIFRoaXMgc2VlbXMgdG8gaW5kaWNhdGUgdGhhdCB0
aGUgdXNlIG9mIGFjY2VwdF9jb25kIGlzIGNvcnJlY3QKLQkgIHNpbmNlIHNvY2tldCB3aGVyZSBh
Y2NlcHRzIG9jY3VyIGlzIHNvX2hlYWQgaW4gYWxsCi0JICBzdWJzaWRpYXJ5IHNvY2tldHMuCi0J
ICovCi0JQUNDRVBUX0xPQ0soKTsKLSNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQpOwotI2Vsc2UKLQlwdGhy
ZWFkX2NvbmRfYnJvYWRjYXN0KCZhY2NlcHRfY29uZCk7Ci0jZW5kaWYKLQlBQ0NFUFRfVU5MT0NL
KCk7Ci19Ci0KLQotLyogQ2FsbGVkIHdpdGhpbiBzY3RwX3Byb2Nlc3NfY29va2llX1tleGlzdGlu
Zy9uZXddICovCi12b2lkCi1zb2lzY29ubmVjdGVkKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0
cnVjdCBzb2NrZXQgKmhlYWQ7Ci0KLQlBQ0NFUFRfTE9DSygpOwotCVNPQ0tfTE9DSyhzbyk7Ci0J
c28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05ORUNUSU5HfFNTX0lTRElTQ09OTkVDVElOR3xTU19J
U0NPTkZJUk1JTkcpOwotCXNvLT5zb19zdGF0ZSB8PSBTU19JU0NPTk5FQ1RFRDsKLQloZWFkID0g
c28tPnNvX2hlYWQ7Ci0JaWYgKGhlYWQgIT0gTlVMTCAmJiAoc28tPnNvX3FzdGF0ZSAmIFNRX0lO
Q09NUCkpIHsKLQkJU09DS19VTkxPQ0soc28pOwotCQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2lu
Y29tcCwgc28sIHNvX2xpc3QpOwotCQloZWFkLT5zb19pbmNxbGVuLS07Ci0JCXNvLT5zb19xc3Rh
dGUgJj0gflNRX0lOQ09NUDsKLQkJVEFJTFFfSU5TRVJUX1RBSUwoJmhlYWQtPnNvX2NvbXAsIHNv
LCBzb19saXN0KTsKLQkJaGVhZC0+c29fcWxlbisrOwotCQlzby0+c29fcXN0YXRlIHw9IFNRX0NP
TVA7Ci0JCUFDQ0VQVF9VTkxPQ0soKTsKLQkJc29yd2FrZXVwKGhlYWQpOwotCQl3YWtldXBfb25l
KCZoZWFkLT5zb190aW1lbyk7Ci0JCXJldHVybjsKLQl9Ci0JU09DS19VTkxPQ0soc28pOwotCUFD
Q0VQVF9VTkxPQ0soKTsKLQl3YWtldXAoJnNvLT5zb190aW1lbywgc28pOwotCXNvcndha2V1cChz
byk7Ci0Jc293d2FrZXVwKHNvKTsKLQotfQotCi0vKiBjYWxsZWQgd2l0aGluIHNjdHBfaGFuZGxl
X2Nvb2tpZV9lY2hvICovCi0KLXN0cnVjdCBzb2NrZXQgKgotc29uZXdjb25uKHN0cnVjdCBzb2Nr
ZXQgKmhlYWQsIGludCBjb25uc3RhdHVzKQotewotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCBv
dmVyOwotCi0JQUNDRVBUX0xPQ0soKTsKLQlvdmVyID0gKGhlYWQtPnNvX3FsZW4gPiAzICogaGVh
ZC0+c29fcWxpbWl0IC8gMik7Ci0JQUNDRVBUX1VOTE9DSygpOwotI2lmZGVmIFJFR1JFU1NJT04K
LQlpZiAocmVncmVzc2lvbl9zb25ld2Nvbm5fZWFybHl0ZXN0ICYmIG92ZXIpCi0jZWxzZQotCWlm
IChvdmVyKQotI2VuZGlmCi0JCXJldHVybiAoTlVMTCk7Ci0Jc28gPSBzb2FsbG9jKCk7Ci0JaWYg
KHNvID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0Jc28tPnNvX2hlYWQgPSBoZWFkOwotCXNv
LT5zb190eXBlID0gaGVhZC0+c29fdHlwZTsKLQlzby0+c29fb3B0aW9ucyA9IGhlYWQtPnNvX29w
dGlvbnMgJn4gU0NUUF9TT19BQ0NFUFRDT05OOwotCXNvLT5zb19saW5nZXIgPSBoZWFkLT5zb19s
aW5nZXI7Ci0Jc28tPnNvX3N0YXRlID0gaGVhZC0+c29fc3RhdGUgfCBTU19OT0ZEUkVGOwotCXNv
LT5zb19kb20gPSBoZWFkLT5zb19kb207Ci0jaWZkZWYgTUFDCi0JU09DS19MT0NLKGhlYWQpOwot
CW1hY19jcmVhdGVfc29ja2V0X2Zyb21fc29ja2V0KGhlYWQsIHNvKTsKLQlTT0NLX1VOTE9DSyho
ZWFkKTsKLSNlbmRpZgotCWlmIChzb3Jlc2VydmUoc28sIGhlYWQtPnNvX3NuZC5zYl9oaXdhdCwg
aGVhZC0+c29fcmN2LnNiX2hpd2F0KSkgewotCQlzb2RlYWxsb2Moc28pOwotCQlyZXR1cm4gKE5V
TEwpOwotCX0KLQlzd2l0Y2ggKGhlYWQtPnNvX2RvbSkgewotI2lmZGVmIElORVQKLQljYXNlIEFG
X0lORVQ6Ci0JCWlmIChzY3RwX2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRf
VlJGSUQpKSB7Ci0JCQlzb2RlYWxsb2Moc28pOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQli
cmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaWYgKHNjdHA2
X2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7Ci0JCQlzb2Rl
YWxsb2Moc28pOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotCWNh
c2UgQUZfQ09OTjoKLQkJaWYgKHNjdHBjb25uX2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQ
X0RFRkFVTFRfVlJGSUQpKSB7Ci0JCQlzb2RlYWxsb2Moc28pOwotCQkJcmV0dXJuIChOVUxMKTsK
LQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzb2RlYWxsb2Moc28pOwotCQlyZXR1cm4gKE5V
TEwpOwotCQlicmVhazsKLQl9Ci0Jc28tPnNvX3Jjdi5zYl9sb3dhdCA9IGhlYWQtPnNvX3Jjdi5z
Yl9sb3dhdDsKLQlzby0+c29fc25kLnNiX2xvd2F0ID0gaGVhZC0+c29fc25kLnNiX2xvd2F0Owot
CXNvLT5zb19yY3Yuc2JfdGltZW8gPSBoZWFkLT5zb19yY3Yuc2JfdGltZW87Ci0Jc28tPnNvX3Nu
ZC5zYl90aW1lbyA9IGhlYWQtPnNvX3NuZC5zYl90aW1lbzsKLQlzby0+c29fcmN2LnNiX2ZsYWdz
IHw9IGhlYWQtPnNvX3Jjdi5zYl9mbGFncyAmIFNCX0FVVE9TSVpFOwotCXNvLT5zb19zbmQuc2Jf
ZmxhZ3MgfD0gaGVhZC0+c29fc25kLnNiX2ZsYWdzICYgU0JfQVVUT1NJWkU7Ci0Jc28tPnNvX3N0
YXRlIHw9IGNvbm5zdGF0dXM7Ci0JQUNDRVBUX0xPQ0soKTsKLQlpZiAoY29ubnN0YXR1cykgewot
CQlUQUlMUV9JTlNFUlRfVEFJTCgmaGVhZC0+c29fY29tcCwgc28sIHNvX2xpc3QpOwotCQlzby0+
c29fcXN0YXRlIHw9IFNRX0NPTVA7Ci0JCWhlYWQtPnNvX3FsZW4rKzsKLQl9IGVsc2UgewotCQkv
KgotCQkgKiBLZWVwIHJlbW92aW5nIHNvY2tldHMgZnJvbSB0aGUgaGVhZCB1bnRpbCB0aGVyZSdz
IHJvb20gZm9yCi0JCSAqIHVzIHRvIGluc2VydCBvbiB0aGUgdGFpbC4gIEluIHByZS1sb2NraW5n
IHJldmlzaW9ucywgdGhpcwotCQkgKiB3YXMgYSBzaW1wbGUgaWYgKCksIGJ1dCBhcyB3ZSBjb3Vs
ZCBiZSByYWNpbmcgd2l0aCBvdGhlcgotCQkgKiB0aHJlYWRzIGFuZCBzb2Fib3J0KCkgcmVxdWly
ZXMgZHJvcHBpbmcgbG9ja3MsIHdlIG11c3QKLQkJICogbG9vcCB3YWl0aW5nIGZvciB0aGUgY29u
ZGl0aW9uIHRvIGJlIHRydWUuCi0JCSAqLwotCQl3aGlsZSAoaGVhZC0+c29faW5jcWxlbiA+IGhl
YWQtPnNvX3FsaW1pdCkgewotCQkJc3RydWN0IHNvY2tldCAqc3A7Ci0JCQlzcCA9IFRBSUxRX0ZJ
UlNUKCZoZWFkLT5zb19pbmNvbXApOwotCQkJVEFJTFFfUkVNT1ZFKCZoZWFkLT5zb19pbmNvbXAs
IHNwLCBzb19saXN0KTsKLQkJCWhlYWQtPnNvX2luY3FsZW4tLTsKLQkJCXNwLT5zb19xc3RhdGUg
Jj0gflNRX0lOQ09NUDsKLQkJCXNwLT5zb19oZWFkID0gTlVMTDsKLQkJCUFDQ0VQVF9VTkxPQ0so
KTsKLQkJCXNvYWJvcnQoc3ApOwotCQkJQUNDRVBUX0xPQ0soKTsKLQkJfQotCQlUQUlMUV9JTlNF
UlRfVEFJTCgmaGVhZC0+c29faW5jb21wLCBzbywgc29fbGlzdCk7Ci0JCXNvLT5zb19xc3RhdGUg
fD0gU1FfSU5DT01QOwotCQloZWFkLT5zb19pbmNxbGVuKys7Ci0JfQotCUFDQ0VQVF9VTkxPQ0so
KTsKLQlpZiAoY29ubnN0YXR1cykgewotCQlzb3J3YWtldXAoaGVhZCk7Ci0JCXdha2V1cF9vbmUo
JmhlYWQtPnNvX3RpbWVvKTsKLQl9Ci0JcmV0dXJuIChzbyk7Ci0KLX0KLQotLyogRnJvbSAvc3Jj
L3N5cy9zeXMvc3lzcHJvdG8uaCAqLwotc3RydWN0IHNjdHBfZ2VuZXJpY19zZW5kbXNnX2FyZ3Mg
ewotCWludCBzZDsKLQljYWRkcl90IG1zZzsKLQlpbnQgbWxlbjsKLQljYWRkcl90IHRvOwotCXNv
Y2tsZW5fdCB0b2xlbjsgIC8qIHdhcyBfX3NvY2tsZW5fdCAqLwotCXN0cnVjdCBzY3RwX3NuZHJj
dmluZm8gKiBzaW5mbzsKLQlpbnQgZmxhZ3M7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9nZW5lcmljX3Jl
Y3Ztc2dfYXJncyB7Ci0gICAgICAgIGludCBzZDsKLSAgICAgICAgc3RydWN0IGlvdmVjICppb3Y7
Ci0gICAgICAgIGludCBpb3ZsZW47Ci0gICAgICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbTsKLSAg
ICAgICAgc29ja2xlbl90ICpmcm9tbGVuYWRkcjsgLyogd2FzIF9fc29ja2xlbl90ICovCi0gICAg
ICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvOwotICAgICAgICBpbnQgKm1zZ19mbGFn
czsKLX07Ci0KLQotIC8qCi0gICBTb3VyY2U6IC9zcmMvc3lzL2dudS9mcy94ZnMvRnJlZUJTRC94
ZnNfaW9jdGwuYwotICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLWNvcHlfdG9fdXNlcih2b2lk
ICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgewotCW1lbWNweShkc3QsIHNyYywgbGVuKTsK
LQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50Ci1jb3B5X2Zyb21fdXNlcih2
b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgewotCW1lbWNweShkc3QsIHNyYywgbGVu
KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSBSZWZlcmVuY2VzOgotIHNyYy9zeXMvZGV2L2xtYy9p
Zl9sbWMuaDoKLSBzcmMvc3lzL3Bvd2VycGMvcG93ZXJwYy9jb3B5aW5vdXQuYwotIHNyYy9zeXMv
c3lzL3N5c3RtLmgKLSovCi0jIGRlZmluZSBjb3B5aW4odSwgaywgbGVuKQljb3B5X2Zyb21fdXNl
cihrLCB1LCBsZW4pCi0KLS8qIFJlZmVyZW5jZXM6Ci0gICBzcmMvc3lzL3Bvd2VycGMvcG93ZXJw
Yy9jb3B5aW5vdXQuYwotICAgc3JjL3N5cy9zeXMvc3lzdG0uaAotKi8KLSMgZGVmaW5lIGNvcHlv
dXQoaywgdSwgbGVuKQljb3B5X3RvX3VzZXIodSwgaywgbGVuKQotCi0KLS8qIGNvcHlpbmlvdiBk
ZWZpbml0aW9uIGNvcGllZC9tb2RpZmllZCBmcm9tIHNyYy9zeXMva2Vybi9rZXJuX3N1YnIuYyAq
LwotaW50Ci1jb3B5aW5pb3Yoc3RydWN0IGlvdmVjICppb3ZwLCB1X2ludCBpb3ZjbnQsIHN0cnVj
dCBpb3ZlYyAqKmlvdiwgaW50IGVycm9yKQotewotCXVfaW50IGlvdmxlbjsKLQotCSppb3YgPSBO
VUxMOwotCWlmIChpb3ZjbnQgPiBVSU9fTUFYSU9WKQotCQlyZXR1cm4gKGVycm9yKTsKLQlpb3Zs
ZW4gPSBpb3ZjbnQgKiBzaXplb2YgKHN0cnVjdCBpb3ZlYyk7Ci0JKmlvdiA9IG1hbGxvYyhpb3Zs
ZW4pOyAvKiwgTV9JT1YsIE1fV0FJVE9LKTsgKi8KLQllcnJvciA9IGNvcHlpbihpb3ZwLCAqaW92
LCBpb3ZsZW4pOwotCWlmIChlcnJvcikgewotCQlmcmVlKCppb3YpOyAvKiwgTV9JT1YpOyAqLwot
CQkqaW92ID0gTlVMTDsKLQl9Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLS8qIChfX1VzZXJzcGFj
ZV9fKSB2ZXJzaW9uIG9mIHVpb21vdmUgKi8KLWludAotdWlvbW92ZSh2b2lkICpjcCwgaW50IG4s
IHN0cnVjdCB1aW8gKnVpbykKLXsKLQlzdHJ1Y3QgaW92ZWMgKmlvdjsKLQlzaXplX3QgY250Owot
CWludCBlcnJvciA9IDA7Ci0KLQlpZiAoKHVpby0+dWlvX3J3ICE9IFVJT19SRUFEKSAmJgotCSAg
ICAodWlvLT51aW9fcncgIT0gVUlPX1dSSVRFKSkgewotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQot
Ci0Jd2hpbGUgKG4gPiAwICYmIHVpby0+dWlvX3Jlc2lkKSB7Ci0JCWlvdiA9IHVpby0+dWlvX2lv
djsKLQkJY250ID0gaW92LT5pb3ZfbGVuOwotCQlpZiAoY250ID09IDApIHsKLQkJCXVpby0+dWlv
X2lvdisrOwotCQkJdWlvLT51aW9faW92Y250LS07Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAo
Y250ID4gKHNpemVfdCluKQotCQkJY250ID0gbjsKLQotCQlzd2l0Y2ggKHVpby0+dWlvX3NlZ2Zs
ZykgewotCi0JCWNhc2UgVUlPX1VTRVJTUEFDRToKLQkJCWlmICh1aW8tPnVpb19ydyA9PSBVSU9f
UkVBRCkKLQkJCQllcnJvciA9IGNvcHlvdXQoY3AsIGlvdi0+aW92X2Jhc2UsIGNudCk7Ci0JCQll
bHNlCi0JCQkJZXJyb3IgPSBjb3B5aW4oaW92LT5pb3ZfYmFzZSwgY3AsIGNudCk7Ci0JCQlpZiAo
ZXJyb3IpCi0JCQkJZ290byBvdXQ7Ci0JCQlicmVhazsKLQotCQljYXNlIFVJT19TWVNTUEFDRToK
LQkJCWlmICh1aW8tPnVpb19ydyA9PSBVSU9fUkVBRCkKLQkJCQltZW1jcHkoaW92LT5pb3ZfYmFz
ZSwgY3AsIGNudCk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KGNwLCBpb3YtPmlvdl9iYXNlLCBjbnQp
OwotCQkJYnJlYWs7Ci0JCX0KLQkJaW92LT5pb3ZfYmFzZSA9IChjaGFyICopaW92LT5pb3ZfYmFz
ZSArIGNudDsKLQkJaW92LT5pb3ZfbGVuIC09IGNudDsKLQkJdWlvLT51aW9fcmVzaWQgLT0gY250
OwotCQl1aW8tPnVpb19vZmZzZXQgKz0gKG9mZl90KWNudDsKLQkJY3AgPSAoY2hhciAqKWNwICsg
Y250OwotCQluIC09IChpbnQpY250OwotCX0KLW91dDoKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQot
Ci0vKiBTb3VyY2U6IHNyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMgKi8KLWludAotZ2V0c29j
a2FkZHIoc3RydWN0IHNvY2thZGRyICoqbmFtcCwgY2FkZHJfdCB1YWRkciwgc2l6ZV90IGxlbikK
LXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCWludCBlcnJvcjsKLQotCWlmIChsZW4gPiBTT0NL
X01BWEFERFJMRU4pCi0JCXJldHVybiAoRU5BTUVUT09MT05HKTsKLQlpZiAobGVuIDwgb2Zmc2V0
b2Yoc3RydWN0IHNvY2thZGRyLCBzYV9kYXRhKSkKLQkJcmV0dXJuIChFSU5WQUwpOwotCU1BTExP
QyhzYSwgc3RydWN0IHNvY2thZGRyICosIGxlbiwgTV9TT05BTUUsIE1fV0FJVE9LKTsKLQllcnJv
ciA9IGNvcHlpbih1YWRkciwgc2EsIGxlbik7Ci0JaWYgKGVycm9yKSB7Ci0JCUZSRUUoc2EsIE1f
U09OQU1FKTsKLQl9IGVsc2UgewotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCXNhLT5zYV9sZW4gPSBs
ZW47Ci0jZW5kaWYKLQkJKm5hbXAgPSBzYTsKLQl9Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLWlu
dAotdXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBv
cHRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICB2b2lkICpvcHRpb25fdmFsdWUsIHNvY2ts
ZW5fdCAqb3B0aW9uX2xlbik7Ci0KLXNjdHBfYXNzb2NfdAotdXNyc2N0cF9nZXRhc3NvY2lkKHN0
cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17Ci0Jc3RydWN0IHNjdHBf
cGFkZHJpbmZvIHNwOwotCXNvY2tsZW5fdCBzaXo7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0Jc2l6
ZV90IHNhX2xlbjsKLSNlbmRpZgotCi0JLyogRmlyc3QgZ2V0IHRoZSBhc3NvYyBpZCAqLwotCXNp
eiA9IHNpemVvZihzcCk7Ci0JbWVtc2V0KCZzcCwgMCwgc2l6ZW9mKHNwKSk7Ci0jaWZkZWYgSEFW
RV9TQV9MRU4KLQltZW1jcHkoKGNhZGRyX3QpJnNwLnNwaW5mb19hZGRyZXNzLCBzYSwgc2EtPnNh
X2xlbik7Ci0jZWxzZQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQlj
YXNlIEFGX0lORVQ6Ci0JCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQli
cmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc2FfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgQUZf
Q09OTjoKLQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJYnJlYWs7
Ci0JZGVmYXVsdDoKLQkJc2FfbGVuID0gMDsKLQkJYnJlYWs7Ci0JfQotCW1lbWNweSgoY2FkZHJf
dCkmc3Auc3BpbmZvX2FkZHJlc3MsIHNhLCBzYV9sZW4pOwotI2VuZGlmCi0JaWYgKHVzcnNjdHBf
Z2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZPLCAm
c3AsICZzaXopICE9IDApIHsKLQkJLyogV2UgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgMCBjYW4g
bmV2ZXIgYmUgcmV0dXJuZWQgKi8KLQkJcmV0dXJuICgoc2N0cF9hc3NvY190KSAwKTsKLQl9Ci0J
cmV0dXJuIChzcC5zcGluZm9fYXNzb2NfaWQpOwotfQotCi0KLS8qIFRha2VuIGZyb20gIC9zcmMv
bGliL2xpYmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKLSAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vy
c3BhY2VfXwotICogY2FsbGluZyBzY3RwX2dlbmVyaWNfc2VuZG1zZyBmcm9tIHRoaXMgZnVuY3Rp
b24KLSAqLwotc3NpemVfdAotdXNlcnNwYWNlX3NjdHBfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICpz
bywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNv
Y2thZGRyICp0bywKLSAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90IHRvbGVuLAotICAg
ICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcHBpZCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgdV9pbnQzMl90IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICB1X2ludDE2X3Qgc3Ry
ZWFtX25vLAotICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgdGltZXRvbGl2ZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGNvbnRleHQpCi17Ci0Jc3RydWN0IHNjdHBf
c25kcmN2aW5mbyBzbmRyY3ZpbmZvLCAqc2luZm8gPSAmc25kcmN2aW5mbzsKLQlzdHJ1Y3QgdWlv
IGF1aW87Ci0Jc3RydWN0IGlvdmVjIGlvdlsxXTsKLQotCW1lbXNldChzaW5mbywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKLQlzaW5mby0+c2luZm9fcHBpZCA9IHBwaWQ7Ci0J
c2luZm8tPnNpbmZvX2ZsYWdzID0gZmxhZ3M7Ci0Jc2luZm8tPnNpbmZvX3N0cmVhbSA9IHN0cmVh
bV9ubzsKLQlzaW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IHRpbWV0b2xpdmU7Ci0Jc2luZm8tPnNp
bmZvX2NvbnRleHQgPSBjb250ZXh0OwotCXNpbmZvLT5zaW5mb19hc3NvY19pZCA9IDA7Ci0KLQot
CS8qIFBlcmZvcm0gZXJyb3IgY2hlY2tzIG9uIGRlc3RpbmF0aW9uICh0bykgKi8KLQlpZiAodG9s
ZW4gPiBTT0NLX01BWEFERFJMRU4pIHsKLQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7Ci0JCXJldHVy
biAoLTEpOwotCX0KLQlpZiAoKHRvbGVuID4gMCkgJiYKLQkgICAgKCh0byA9PSBOVUxMKSB8fCAo
dG9sZW4gPCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSkpIHsKLQkJZXJybm8g
PSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoZGF0YSA9PSBOVUxMKSB7Ci0JCWVy
cm5vID0gRUZBVUxUOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogQWRkaW5nIHRoZSBmb2xsb3dp
bmcgYXMgcGFydCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGluIGNhc2UgdGhlIGFwcGxpY2F0
aW9uCi0JICAgZG9lcyBub3QgZG8gaXQgd2hlbiBwcmVwYXJpbmcgdGhlIGRlc3RpbmF0aW9uIGFk
ZHJlc3MuKi8KLSNpZmRlZiBIQVZFX1NBX0xFTgotCWlmICh0byAhPSBOVUxMKSB7Ci0JCXRvLT5z
YV9sZW4gPSB0b2xlbjsKLQl9Ci0jZW5kaWYKLQotCWlvdlswXS5pb3ZfYmFzZSA9IChjYWRkcl90
KWRhdGE7Ci0JaW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVpb19pb3YgPSAgaW92Owot
CWF1aW8udWlvX2lvdmNudCA9IDE7Ci0JYXVpby51aW9fc2VnZmxnID0gVUlPX1VTRVJTUEFDRTsK
LQlhdWlvLnVpb19ydyA9IFVJT19XUklURTsKLQlhdWlvLnVpb19vZmZzZXQgPSAwOwkJCS8qIFhY
WCAqLwotCWF1aW8udWlvX3Jlc2lkID0gbGVuOwotCWVycm5vID0gc2N0cF9sb3dlcl9zb3NlbmQo
c28sIHRvLCAmYXVpbywgTlVMTCwgTlVMTCwgMCwgc2luZm8pOwotCWlmIChlcnJubyA9PSAwKSB7
Ci0JCXJldHVybiAobGVuIC0gYXVpby51aW9fcmVzaWQpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAo
LTEpOwotCX0KLX0KLQotCi1zc2l6ZV90Ci11c3JzY3RwX3NlbmR2KHN0cnVjdCBzb2NrZXQgKnNv
LAotICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAotICAgICAgICAgICAgICBzaXplX3Qg
bGVuLAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAotICAgICAgICAgICAgICBp
bnQgYWRkcmNudCwKLSAgICAgICAgICAgICAgdm9pZCAqaW5mbywKLSAgICAgICAgICAgICAgc29j
a2xlbl90IGluZm9sZW4sCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZvdHlwZSwKLSAg
ICAgICAgICAgICAgaW50IGZsYWdzKQotewotCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc2luZm87
Ci0Jc3RydWN0IHVpbyBhdWlvOwotCXN0cnVjdCBpb3ZlYyBpb3ZbMV07Ci0JaW50IHVzZV9zaW5m
bzsKLQlzY3RwX2Fzc29jX3QgKmFzc29jX2lkOwotCi0JaWYgKHNvID09IE5VTEwpIHsKLQkJZXJy
bm8gPSBFQkFERjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChkYXRhID09IE5VTEwpIHsKLQkJ
ZXJybm8gPSBFRkFVTFQ7Ci0JCXJldHVybiAoLTEpOwotCX0KLQltZW1zZXQoJnNpbmZvLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwotCWFzc29jX2lkID0gTlVMTDsKLQl1c2Vf
c2luZm8gPSAwOwotCXN3aXRjaCAoaW5mb3R5cGUpIHsKLQljYXNlIFNDVFBfU0VORFZfTk9JTkZP
OgotCQlpZiAoKGluZm9sZW4gIT0gMCkgfHwgKGluZm8gIT0gTlVMTCkpIHsKLQkJCWVycm5vID0g
RUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NFTkRW
X1NORElORk86Ci0JCWlmICgoaW5mbyA9PSBOVUxMKSB8fCAoaW5mb2xlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kaW5mbykpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAoLTEp
OwotCQl9Ci0JCXNpbmZvLnNpbmZvX3N0cmVhbSA9ICgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWlu
Zm8pLT5zbmRfc2lkOwotCQlzaW5mby5zaW5mb19mbGFncyA9ICgoc3RydWN0IHNjdHBfc25kaW5m
byAqKWluZm8pLT5zbmRfZmxhZ3M7Ci0JCXNpbmZvLnNpbmZvX3BwaWQgPSAoKHN0cnVjdCBzY3Rw
X3NuZGluZm8gKilpbmZvKS0+c25kX3BwaWQ7Ci0JCXNpbmZvLnNpbmZvX2NvbnRleHQgPSAoKHN0
cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25kX2NvbnRleHQ7Ci0JCXNpbmZvLnNpbmZvX2Fz
c29jX2lkID0gKChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9hc3NvY19pZDsKLQkJ
YXNzb2NfaWQgPSAmKCgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWluZm8pLT5zbmRfYXNzb2NfaWQp
OwotCQl1c2Vfc2luZm8gPSAxOwotCQlicmVhazsKLQljYXNlIFNDVFBfU0VORFZfUFJJTkZPOgot
CQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3By
aW5mbykpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCXNp
bmZvLnNpbmZvX3N0cmVhbSA9IDA7Ci0JCXNpbmZvLnNpbmZvX2ZsYWdzID0gUFJfU0NUUF9QT0xJ
Q1koKChzdHJ1Y3Qgc2N0cF9wcmluZm8gKilpbmZvKS0+cHJfcG9saWN5KTsKLQkJc2luZm8uc2lu
Zm9fdGltZXRvbGl2ZSA9ICgoc3RydWN0IHNjdHBfcHJpbmZvICopaW5mbyktPnByX3ZhbHVlOwot
CQl1c2Vfc2luZm8gPSAxOwotCQlicmVhazsKLQljYXNlIFNDVFBfU0VORFZfQVVUSElORk86Ci0J
CWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQljYXNlIFNDVFBfU0VORFZfU1BBOgot
CQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3Nl
bmR2X3NwYSkpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0J
CWlmICgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9mbGFncyAmIFNDVFBf
U0VORF9TTkRJTkZPX1ZBTElEKSB7Ci0JCQlzaW5mby5zaW5mb19zdHJlYW0gPSAoKHN0cnVjdCBz
Y3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9zbmRpbmZvLnNuZF9zaWQ7Ci0JCQlzaW5mby5z
aW5mb19mbGFncyA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGlu
Zm8uc25kX2ZsYWdzOwotCQkJc2luZm8uc2luZm9fcHBpZCA9ICgoc3RydWN0IHNjdHBfc2VuZHZf
c3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX3BwaWQ7Ci0JCQlzaW5mby5zaW5mb19jb250
ZXh0ID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRf
Y29udGV4dDsKLQkJCXNpbmZvLnNpbmZvX2Fzc29jX2lkID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9z
cGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfYXNzb2NfaWQ7Ci0JCQlhc3NvY19pZCA9ICYo
KChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfYXNzb2Nf
aWQpOwotCQl9IGVsc2UgewotCQkJc2luZm8uc2luZm9fZmxhZ3MgPSAwOwotCQkJc2luZm8uc2lu
Zm9fc3RyZWFtID0gMDsKLQkJfQotCQlpZiAoKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZv
KS0+c2VuZHZfZmxhZ3MgJiBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEKSB7Ci0JCQlzaW5mby5zaW5m
b19mbGFncyB8PSBQUl9TQ1RQX1BPTElDWSgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8p
LT5zZW5kdl9wcmluZm8ucHJfcG9saWN5KTsKLQkJCXNpbmZvLnNpbmZvX3RpbWV0b2xpdmUgPSAo
KHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9wcmluZm8ucHJfdmFsdWU7Ci0J
CX0KLQkJaWYgKCgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X2ZsYWdzICYg
U0NUUF9TRU5EX0FVVEhJTkZPX1ZBTElEKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVy
biAoLTEpOwotCQl9Ci0JCXVzZV9zaW5mbyA9IDE7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWVy
cm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQkvKiBQZXJmb3JtIGVycm9yIGNo
ZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8pICovCi0JaWYgKGFkZHJjbnQgPiAxKSB7Ci0JCWVycm5v
ID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlpb3ZbMF0uaW92X2Jhc2UgPSAoY2Fk
ZHJfdClkYXRhOwotCWlvdlswXS5pb3ZfbGVuID0gbGVuOwotCi0JYXVpby51aW9faW92ID0gIGlv
djsKLQlhdWlvLnVpb19pb3ZjbnQgPSAxOwotCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19VU0VSU1BB
Q0U7Ci0JYXVpby51aW9fcncgPSBVSU9fV1JJVEU7Ci0JYXVpby51aW9fb2Zmc2V0ID0gMDsJCQkv
KiBYWFggKi8KLQlhdWlvLnVpb19yZXNpZCA9IGxlbjsKLQllcnJubyA9IHNjdHBfbG93ZXJfc29z
ZW5kKHNvLCB0bywgJmF1aW8sIE5VTEwsIE5VTEwsIGZsYWdzLCB1c2Vfc2luZm8gPyAmc2luZm8g
OiBOVUxMKTsKLQlpZiAoZXJybm8gPT0gMCkgewotCQlpZiAoKHRvICE9IE5VTEwpICYmIChhc3Nv
Y19pZCAhPSBOVUxMKSkgewotCQkJKmFzc29jX2lkID0gdXNyc2N0cF9nZXRhc3NvY2lkKHNvLCB0
byk7Ci0JCX0KLQkJcmV0dXJuIChsZW4gLSBhdWlvLnVpb19yZXNpZCk7Ci0JfSBlbHNlIHsKLQkJ
cmV0dXJuICgtMSk7Ci0JfQotfQotCi0KLXNzaXplX3QKLXVzZXJzcGFjZV9zY3RwX3NlbmRtYnVm
KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgIHN0cnVjdCBtYnVmKiBtYnVmZGF0YSwKLSAgICBzaXpl
X3QgbGVuLAotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCi0gICAgc29ja2xlbl90IHRvbGVuLAot
ICAgIHVfaW50MzJfdCBwcGlkLAotICAgIHVfaW50MzJfdCBmbGFncywKLSAgICB1X2ludDE2X3Qg
c3RyZWFtX25vLAotICAgIHVfaW50MzJfdCB0aW1ldG9saXZlLAotICAgIHVfaW50MzJfdCBjb250
ZXh0KQotewotCi0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzbmRyY3ZpbmZvLCAqc2luZm8g
PSAmc25kcmN2aW5mbzsKLSAgICAvKiAgICBzdHJ1Y3QgdWlvIGF1aW87Ci0gICAgICAgICAgc3Ry
dWN0IGlvdmVjIGlvdlsxXTsgKi8KLSAgICBpbnQgZXJyb3IgPSAwOwotICAgIGludCB1ZmxhZ3Mg
PSAwOwotICAgIHNzaXplX3QgcmV0dmFsOwotCi0gICAgc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlk
OwotICAgIHNpbmZvLT5zaW5mb19mbGFncyA9IGZsYWdzOwotICAgIHNpbmZvLT5zaW5mb19zdHJl
YW0gPSBzdHJlYW1fbm87Ci0gICAgc2luZm8tPnNpbmZvX3RpbWV0b2xpdmUgPSB0aW1ldG9saXZl
OwotICAgIHNpbmZvLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsKLSAgICBzaW5mby0+c2luZm9f
YXNzb2NfaWQgPSAwOwotCi0gICAgLyogUGVyZm9ybSBlcnJvciBjaGVja3Mgb24gZGVzdGluYXRp
b24gKHRvKSAqLwotICAgIGlmICh0b2xlbiA+IFNPQ0tfTUFYQUREUkxFTil7Ci0gICAgICAgIGVy
cm9yID0gKEVOQU1FVE9PTE9ORyk7Ci0gICAgICAgIGdvdG8gc2VuZG1zZ19yZXR1cm47Ci0gICAg
fQotICAgIGlmICh0b2xlbiA8IChzb2NrbGVuX3Qpb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyLCBz
YV9kYXRhKSl7Ci0gICAgICAgIGVycm9yID0gKEVJTlZBTCk7Ci0gICAgICAgIGdvdG8gc2VuZG1z
Z19yZXR1cm47Ci0gICAgfQotICAgIC8qIEFkZGluZyB0aGUgZm9sbG93aW5nIGFzIHBhcnQgb2Yg
ZGVmZW5zaXZlIHByb2dyYW1taW5nLCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlvbgotICAgICAgIGRv
ZXMgbm90IGRvIGl0IHdoZW4gcHJlcGFyaW5nIHRoZSBkZXN0aW5hdGlvbiBhZGRyZXNzLiovCi0j
aWZkZWYgSEFWRV9TQV9MRU4KLSAgICB0by0+c2FfbGVuID0gdG9sZW47Ci0jZW5kaWYKLQotICAg
IGVycm9yID0gc2N0cF9sb3dlcl9zb3NlbmQoc28sIHRvLCBOVUxMLyp1aW8qLywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgbWJ1ZiAqKW1idWZkYXRhLCAoc3RydWN0IG1i
dWYgKilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZsYWdzLCBzaW5mbyk7
Ci1zZW5kbXNnX3JldHVybjoKLSAgICAvKiBUT0RPOiBOZWVkcyBhIGNvbmRpdGlvbiBmb3Igbm9u
LWJsb2NraW5nIHdoZW4gZXJyb3IgaXMgRVdPVUxEQkxPQ0sgKi8KLSAgICBpZiAoMCA9PSBlcnJv
cikKLSAgICAgICAgcmV0dmFsID0gbGVuOwotICAgIGVsc2UgaWYgKGVycm9yID09IEVXT1VMREJM
T0NLKSB7Ci0gICAgICAgIGVycm5vID0gRVdPVUxEQkxPQ0s7Ci0gICAgICAgIHJldHZhbCA9IC0x
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNDVFBfUFJJTlRGKCIlczogZXJyb3IgPSAlZFxuIiwg
X19mdW5jX18sIGVycm9yKTsKLSAgICAgICAgZXJybm8gPSBlcnJvcjsKLSAgICAgICAgcmV0dmFs
ID0gLTE7Ci0gICAgfQotICAgIHJldHVybiAocmV0dmFsKTsKLQotfQotCi0KLS8qIHRha2VuIGZy
b20gdXNyLmxpYi9zY3RwX3N5c19jYWxscy5jIGFuZCBuZWVkZWQgaGVyZSAqLwotI2RlZmluZSAg
ICAgICAgU0NUUF9TTUFMTF9JT1ZFQ19TSVpFIDIKLQotLyogVGFrZW4gZnJvbSAgL3NyYy9saWIv
bGliYy9uZXQvc2N0cF9zeXNfY2FsbHMuYwotICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFj
ZV9fCi0gKiBjYWxsaW5nIHNjdHBfZ2VuZXJpY19yZWN2bXNnIGZyb20gdGhpcyBmdW5jdGlvbgot
ICovCi1zc2l6ZV90Ci11c2Vyc3BhY2Vfc2N0cF9yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvLAot
ICAgIHZvaWQgKmRidWYsCi0gICAgc2l6ZV90IGxlbiwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZy
b20sCi0gICAgc29ja2xlbl90ICpmcm9tbGVucCwKLSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
ICpzaW5mbywKLSAgICBpbnQgKm1zZ19mbGFncykKLXsKLQlzdHJ1Y3QgdWlvIGF1aW87Ci0Jc3Ry
dWN0IGlvdmVjIGlvdltTQ1RQX1NNQUxMX0lPVkVDX1NJWkVdOwotCXN0cnVjdCBpb3ZlYyAqdGlv
djsKLQlpbnQgaW92bGVuID0gMTsKLQlpbnQgZXJyb3IgPSAwOwotCXNzaXplX3QgdWxlbjsKLQlp
bnQgaTsKLQlzb2NrbGVuX3QgZnJvbWxlbjsKLQotCWlvdlswXS5pb3ZfYmFzZSA9IGRidWY7Ci0J
aW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVpb19pb3YgPSBpb3Y7Ci0JYXVpby51aW9f
aW92Y250ID0gaW92bGVuOwotCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19VU0VSU1BBQ0U7Ci0JYXVp
by51aW9fcncgPSBVSU9fUkVBRDsKLQlhdWlvLnVpb19vZmZzZXQgPSAwOwkJCS8qIFhYWCAqLwot
CWF1aW8udWlvX3Jlc2lkID0gMDsKLQl0aW92ID0gaW92OwotCWZvciAoaSA9IDA7IGkgPGlvdmxl
bjsgaSsrLCB0aW92KyspIHsKLQkJaWYgKChhdWlvLnVpb19yZXNpZCArPSB0aW92LT5pb3ZfbGVu
KSA8IDApIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9QUklOVEYoIiVzOiBlcnJvciA9
ICVkXG4iLCBfX2Z1bmNfXywgZXJyb3IpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9Ci0JdWxl
biA9IGF1aW8udWlvX3Jlc2lkOwotCWlmIChmcm9tbGVucCAhPSBOVUxMKSB7Ci0JCWZyb21sZW4g
PSAqZnJvbWxlbnA7Ci0JfSBlbHNlIHsKLQkJZnJvbWxlbiA9IDA7Ci0JfQotCWVycm9yID0gc2N0
cF9zb3JlY3Ztc2coc28sICZhdWlvLCAoc3RydWN0IG1idWYgKiopTlVMTCwKLQkJICAgIGZyb20s
IGZyb21sZW4sIG1zZ19mbGFncywKLQkJICAgIChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopc2lu
Zm8sIDEpOwotCi0JaWYgKGVycm9yKSB7Ci0JCWlmICgoYXVpby51aW9fcmVzaWQgIT0gdWxlbikg
JiYKLQkJICAgIChlcnJvciA9PSBFSU5UUiB8fAotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X05ldEJTRCkKLQkJICAgICBlcnJvciA9PSBFUkVTVEFSVCB8fAotI2VuZGlmCi0JCSAgICAgZXJy
b3IgPT0gRVdPVUxEQkxPQ0spKSB7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLQl9Ci0JaWYgKChmcm9t
bGVucCAhPSBOVUxMKSAmJiAoZnJvbWxlbiA+IDApICYmIChmcm9tICE9IE5VTEwpKSB7Ci0JCXN3
aXRjaCAoZnJvbS0+c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQljYXNlIEFGX0lO
RVQ6Ci0JCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJCWJyZWFr
OwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCSpmcm9t
bGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCWJyZWFrOwotI2VuZGlmCi0J
CWNhc2UgQUZfQ09OTjoKLQkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCSpmcm9tbGVucCA9IDA7Ci0JCQlicmVhazsK
LQkJfQotCQlpZiAoKmZyb21sZW5wID4gZnJvbWxlbikgewotCQkJKmZyb21sZW5wID0gZnJvbWxl
bjsKLQkJfQotCX0KLQlpZiAoZXJyb3IgPT0gMCkgewotCQkvKiByZWFkeSByZXR1cm4gdmFsdWUg
Ki8KLQkJcmV0dXJuICh1bGVuIC0gYXVpby51aW9fcmVzaWQpOwotCX0gZWxzZSB7Ci0JCVNDVFBf
UFJJTlRGKCIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKLQkJcmV0dXJuICgt
MSk7Ci0JfQotfQotCi1zc2l6ZV90Ci11c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAot
ICAgIHZvaWQgKmRidWYsCi0gICAgc2l6ZV90IGxlbiwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZy
b20sCi0gICAgc29ja2xlbl90ICpmcm9tbGVucCwKLSAgICB2b2lkICppbmZvLAotICAgIHNvY2ts
ZW5fdCAqaW5mb2xlbiwKLSAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBlLAotICAgIGludCAqbXNn
X2ZsYWdzKQotewotCXN0cnVjdCB1aW8gYXVpbzsKLQlzdHJ1Y3QgaW92ZWMgaW92W1NDVFBfU01B
TExfSU9WRUNfU0laRV07Ci0Jc3RydWN0IGlvdmVjICp0aW92OwotCWludCBpb3ZsZW4gPSAxOwot
CXNzaXplX3QgdWxlbjsKLQlpbnQgaTsKLQlzb2NrbGVuX3QgZnJvbWxlbjsKLQlzdHJ1Y3Qgc2N0
cF9yY3ZpbmZvICpyY3Y7Ci0Jc3RydWN0IHNjdHBfcmVjdnZfcm4gKnJuOwotCXN0cnVjdCBzY3Rw
X2V4dHJjdmluZm8gc2VpbmZvOwotCi0JaWYgKHNvID09IE5VTEwpIHsKLQkJZXJybm8gPSBFQkFE
RjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlvdlswXS5pb3ZfYmFzZSA9IGRidWY7Ci0JaW92WzBd
Lmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVpb19pb3YgPSBpb3Y7Ci0JYXVpby51aW9faW92Y250
ID0gaW92bGVuOwotCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19VU0VSU1BBQ0U7Ci0JYXVpby51aW9f
cncgPSBVSU9fUkVBRDsKLQlhdWlvLnVpb19vZmZzZXQgPSAwOwkJCS8qIFhYWCAqLwotCWF1aW8u
dWlvX3Jlc2lkID0gMDsKLQl0aW92ID0gaW92OwotCWZvciAoaSA9IDA7IGkgPGlvdmxlbjsgaSsr
LCB0aW92KyspIHsKLQkJaWYgKChhdWlvLnVpb19yZXNpZCArPSB0aW92LT5pb3ZfbGVuKSA8IDAp
IHsKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9Ci0JdWxlbiA9
IGF1aW8udWlvX3Jlc2lkOwotCWlmIChmcm9tbGVucCAhPSBOVUxMKSB7Ci0JCWZyb21sZW4gPSAq
ZnJvbWxlbnA7Ci0JfSBlbHNlIHsKLQkJZnJvbWxlbiA9IDA7Ci0JfQotCWVycm5vID0gc2N0cF9z
b3JlY3Ztc2coc28sICZhdWlvLCAoc3RydWN0IG1idWYgKiopTlVMTCwKLQkJICAgIGZyb20sIGZy
b21sZW4sIG1zZ19mbGFncywKLQkJICAgIChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopJnNlaW5m
bywgMSk7Ci0JaWYgKGVycm5vKSB7Ci0JCWlmICgoYXVpby51aW9fcmVzaWQgIT0gdWxlbikgJiYK
LQkJICAgIChlcnJubyA9PSBFSU5UUiB8fAotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05l
dEJTRCkKLQkJICAgICBlcnJubyA9PSBFUkVTVEFSVCB8fAotI2VuZGlmCi0JCSAgICAgZXJybm8g
PT0gRVdPVUxEQkxPQ0spKSB7Ci0JCQllcnJubyA9IDA7Ci0JCX0KLQl9Ci0JaWYgKCgqbXNnX2Zs
YWdzICYgTVNHX05PVElGSUNBVElPTikgPT0gMCkgewotCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
OwotCi0JCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTykgJiYKLQkJICAg
IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgot
CQkgICAgKmluZm9sZW4gPj0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4p
ICYmCi0JCSAgICBzZWluZm8uc3JlaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhUX01TR19BVkFJ
TCkgewotCQkJcm4gPSAoc3RydWN0IHNjdHBfcmVjdnZfcm4gKilpbmZvOwotCQkJcm4tPnJlY3Z2
X3JjdmluZm8ucmN2X3NpZCA9IHNlaW5mby5zaW5mb19zdHJlYW07Ci0JCQlybi0+cmVjdnZfcmN2
aW5mby5yY3Zfc3NuID0gc2VpbmZvLnNpbmZvX3NzbjsKLQkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJj
dl9mbGFncyA9IHNlaW5mby5zaW5mb19mbGFnczsKLQkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl9w
cGlkID0gc2VpbmZvLnNpbmZvX3BwaWQ7Ci0JCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfY29udGV4
dCA9IHNlaW5mby5zaW5mb19jb250ZXh0OwotCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X3RzbiA9
IHNlaW5mby5zaW5mb190c247Ci0JCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfY3VtdHNuID0gc2Vp
bmZvLnNpbmZvX2N1bXRzbjsKLQkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl9hc3NvY19pZCA9IHNl
aW5mby5zaW5mb19hc3NvY19pZDsKLQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9zaWQgPSBzZWlu
Zm8uc3JlaW5mb19uZXh0X3N0cmVhbTsKLQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFncyA9
IDA7Ci0JCQlpZiAoc2VpbmZvLnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfSVNf
VU5PUkRFUkVEKSB7Ci0JCQkJcm4tPnJlY3Z2X254dGluZm8ubnh0X2ZsYWdzIHw9IFNDVFBfVU5P
UkRFUkVEOwotCQkJfQotCQkJaWYgKHNlaW5mby5zcmVpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05F
WFRfTVNHX0lTX05PVElGSUNBVElPTikgewotCQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFn
cyB8PSBTQ1RQX05PVElGSUNBVElPTjsKLQkJCX0KLQkJCWlmIChzZWluZm8uc3JlaW5mb19uZXh0
X2ZsYWdzICYgU0NUUF9ORVhUX01TR19JU0NPTVBMRVRFKSB7Ci0JCQkJcm4tPnJlY3Z2X254dGlu
Zm8ubnh0X2ZsYWdzIHw9IFNDVFBfQ09NUExFVEU7Ci0JCQl9Ci0JCQlybi0+cmVjdnZfbnh0aW5m
by5ueHRfcHBpZCA9IHNlaW5mby5zcmVpbmZvX25leHRfcHBpZDsKLQkJCXJuLT5yZWN2dl9ueHRp
bmZvLm54dF9sZW5ndGggPSBzZWluZm8uc3JlaW5mb19uZXh0X2xlbmd0aDsKLQkJCXJuLT5yZWN2
dl9ueHRpbmZvLm54dF9hc3NvY19pZCA9IHNlaW5mby5zcmVpbmZvX25leHRfYWlkOwotCQkJKmlu
Zm9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybik7Ci0JCQkqaW5m
b3R5cGUgPSBTQ1RQX1JFQ1ZWX1JOOwotCQl9IGVsc2UgaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgotCQkgICAgICAgICAgICppbmZvbGVu
ID49IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKSB7Ci0JCQlyY3YgPSAo
c3RydWN0IHNjdHBfcmN2aW5mbyAqKWluZm87Ci0JCQlyY3YtPnJjdl9zaWQgPSBzZWluZm8uc2lu
Zm9fc3RyZWFtOwotCQkJcmN2LT5yY3Zfc3NuID0gc2VpbmZvLnNpbmZvX3NzbjsKLQkJCXJjdi0+
cmN2X2ZsYWdzID0gc2VpbmZvLnNpbmZvX2ZsYWdzOwotCQkJcmN2LT5yY3ZfcHBpZCA9IHNlaW5m
by5zaW5mb19wcGlkOwotCQkJcmN2LT5yY3ZfY29udGV4dCA9IHNlaW5mby5zaW5mb19jb250ZXh0
OwotCQkJcmN2LT5yY3ZfdHNuID0gc2VpbmZvLnNpbmZvX3RzbjsKLQkJCXJjdi0+cmN2X2N1bXRz
biA9IHNlaW5mby5zaW5mb19jdW10c247Ci0JCQlyY3YtPnJjdl9hc3NvY19pZCA9IHNlaW5mby5z
aW5mb19hc3NvY19pZDsKLQkJCSppbmZvbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNj
dHBfcmN2aW5mbyk7Ci0JCQkqaW5mb3R5cGUgPSBTQ1RQX1JFQ1ZWX1JDVklORk87Ci0JCX0gZWxz
ZSB7Ci0JCQkqaW5mb3R5cGUgPSBTQ1RQX1JFQ1ZWX05PSU5GTzsKLQkJCSppbmZvbGVuID0gMDsK
LQkJfQotCX0KLQlpZiAoKGZyb21sZW5wICE9IE5VTEwpICYmIChmcm9tbGVuID4gMCkgJiYgKGZy
b20gIT0gTlVMTCkpIHsKLQkJc3dpdGNoIChmcm9tLT5zYV9mYW1pbHkpIHsKLSNpZiBkZWZpbmVk
KElORVQpCi0JCWNhc2UgQUZfSU5FVDoKLQkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCQljYXNl
IEFGX0lORVQ2OgotCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwot
CQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05OOgotCQkJKmZyb21sZW5wID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJKmZyb21s
ZW5wID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgqZnJvbWxlbnAgPiBmcm9tbGVuKSB7Ci0J
CQkqZnJvbWxlbnAgPSBmcm9tbGVuOwotCQl9Ci0JfQotCWlmIChlcnJubyA9PSAwKSB7Ci0JCS8q
IHJlYWR5IHJldHVybiB2YWx1ZSAqLwotCQlyZXR1cm4gKHVsZW4gLSBhdWlvLnVpb19yZXNpZCk7
Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotfQotCi0KLQotCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tldC5j
Ci0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqIHNvY3JlYXRlIHJldHVybnMg
YSBzb2NrZXQuICBUaGUgc29ja2V0IHNob3VsZCBiZQotICogY2xvc2VkIHdpdGggc29jbG9zZSgp
LgotICovCi1pbnQKLXNvY3JlYXRlKGludCBkb20sIHN0cnVjdCBzb2NrZXQgKiphc28sIGludCB0
eXBlLCBpbnQgcHJvdG8pCi17Ci0Jc3RydWN0IHNvY2tldCAqc287Ci0JaW50IGVycm9yOwotCi0J
aWYgKChkb20gIT0gQUZfQ09OTikgJiYgKGRvbSAhPSBBRl9JTkVUKSAmJiAoZG9tICE9IEFGX0lO
RVQ2KSkgewotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmICgodHlwZSAhPSBTT0NLX1NUUkVB
TSkgJiYgKHR5cGUgIT0gU09DS19TRVFQQUNLRVQpKSB7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9
Ci0JaWYgKHByb3RvICE9IElQUFJPVE9fU0NUUCkgewotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQot
Ci0Jc28gPSBzb2FsbG9jKCk7Ci0JaWYgKHNvID09IE5VTEwpIHsKLQkJcmV0dXJuIChFTk9CVUZT
KTsKLQl9Ci0KLQkvKgotCSAqIHNvX2luY29tcCByZXByZXNlbnRzIGEgcXVldWUgb2YgY29ubmVj
dGlvbnMgdGhhdAotCSAqIG11c3QgYmUgY29tcGxldGVkIGF0IHByb3RvY29sIGxldmVsIGJlZm9y
ZSBiZWluZwotCSAqIHJldHVybmVkLiBzb19jb21wIGZpZWxkIGhlYWRzIGEgbGlzdCBvZiBzb2Nr
ZXRzCi0JICogdGhhdCBhcmUgcmVhZHkgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGxpc3RlbmluZyBw
cm9jZXNzCi0JICpfX1VzZXJzcGFjZV9fIFRoZXNlIHF1ZXVlcyBhcmUgYmVpbmcgdXNlZCBhdCBh
IG51bWJlciBvZiBwbGFjZXMgbGlrZSBhY2NlcHQgZXRjLgotCSAqLwotCVRBSUxRX0lOSVQoJnNv
LT5zb19pbmNvbXApOwotCVRBSUxRX0lOSVQoJnNvLT5zb19jb21wKTsKLQlzby0+c29fdHlwZSA9
IHR5cGU7Ci0Jc28tPnNvX2NvdW50ID0gMTsKLQlzby0+c29fZG9tID0gZG9tOwotCS8qCi0JICog
QXV0by1zaXppbmcgb2Ygc29ja2V0IGJ1ZmZlcnMgaXMgbWFuYWdlZCBieSB0aGUgcHJvdG9jb2xz
IGFuZAotCSAqIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBtdXN0IGJlIHNldCBpbiB0aGUgcHJ1X2F0
dGFjaCBmdW5jdGlvbi4KLQkgKiBGb3IgX19Vc2Vyc3BhY2VfXyBUaGUgcHJ1X2F0dGFjaCBmdW5j
dGlvbiBpbiB0aGlzIGNhc2UgaXMgc2N0cF9hdHRhY2guCi0JICovCi0Jc3dpdGNoIChkb20pIHsK
LSNpZiBkZWZpbmVkKElORVQpCi0JY2FzZSBBRl9JTkVUOgotCQllcnJvciA9IHNjdHBfYXR0YWNo
KHNvLCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKElORVQ2KQotCWNhc2UgQUZfSU5FVDY6Ci0JCWVycm9yID0gc2N0cDZfYXR0YWNoKHNv
LCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEFG
X0NPTk46Ci0JCWVycm9yID0gc2N0cGNvbm5fYXR0YWNoKHNvLCBwcm90bywgU0NUUF9ERUZBVUxU
X1ZSRklEKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0J
CWJyZWFrOwotCX0KLQlpZiAoZXJyb3IpIHsKLQkJS0FTU0VSVChzby0+c29fY291bnQgPT0gMSwg
KCJzb2NyZWF0ZTogc29fY291bnQgJWQiLCBzby0+c29fY291bnQpKTsKLQkJc28tPnNvX2NvdW50
ID0gMDsKLQkJc29kZWFsbG9jKHNvKTsKLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotCSphc28gPSBz
bzsKLQlyZXR1cm4gKDApOwotfQotI2Vsc2UKLS8qIFRoZSBrZXJuZWwgdmVyc2lvbiBmb3IgcmVm
ZXJlbmNlIGlzIGJlbG93LiBUaGUgI2Vsc2UKLSAgIHNob3VsZCBiZSByZW1vdmVkIG9uY2UgdGhl
IF9fVXNlcnNwYWNlX18KLSAgIHZlcnNpb24gaXMgdGVzdGVkLgotICogc29jcmVhdGUgcmV0dXJu
cyBhIHNvY2tldCB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBUaGUgc29ja2V0IHNob3VsZCBiZQot
ICogY2xvc2VkIHdpdGggc29jbG9zZSgpLgotICovCi1pbnQKLXNvY3JlYXRlKGludCBkb20sIHN0
cnVjdCBzb2NrZXQgKiphc28sIGludCB0eXBlLCBpbnQgcHJvdG8sCi0gICAgc3RydWN0IHVjcmVk
ICpjcmVkLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKLXsKLQlzdHJ1Y3QgcHJvdG9zdyAqcHJwOwotCXN0
cnVjdCBzb2NrZXQgKnNvOwotCWludCBlcnJvcjsKLQotCWlmIChwcm90bykKLQkJcHJwID0gcGZm
aW5kcHJvdG8oZG9tLCBwcm90bywgdHlwZSk7Ci0JZWxzZQotCQlwcnAgPSBwZmZpbmR0eXBlKGRv
bSwgdHlwZSk7Ci0KLQlpZiAocHJwID09IE5VTEwgfHwgcHJwLT5wcl91c3JyZXFzLT5wcnVfYXR0
YWNoID09IE5VTEwgfHwKLQkgICAgcHJwLT5wcl91c3JyZXFzLT5wcnVfYXR0YWNoID09IHBydV9h
dHRhY2hfbm90c3VwcCkKLQkJcmV0dXJuIChFUFJPVE9OT1NVUFBPUlQpOwotCi0JaWYgKGphaWxl
ZChjcmVkKSAmJiBqYWlsX3NvY2tldF91bml4aXByb3V0ZV9vbmx5ICYmCi0JICAgIHBycC0+cHJf
ZG9tYWluLT5kb21fZmFtaWx5ICE9IFBGX0xPQ0FMICYmCi0JICAgIHBycC0+cHJfZG9tYWluLT5k
b21fZmFtaWx5ICE9IFBGX0lORVQgJiYKLQkgICAgcHJwLT5wcl9kb21haW4tPmRvbV9mYW1pbHkg
IT0gUEZfUk9VVEUpIHsKLQkJcmV0dXJuIChFUFJPVE9OT1NVUFBPUlQpOwotCX0KLQotCWlmIChw
cnAtPnByX3R5cGUgIT0gdHlwZSkKLQkJcmV0dXJuIChFUFJPVE9UWVBFKTsKLQlzbyA9IHNvYWxs
b2MoKTsKLQlpZiAoc28gPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9CVUZTKTsKLQotCVRBSUxRX0lO
SVQoJnNvLT5zb19pbmNvbXApOwotCVRBSUxRX0lOSVQoJnNvLT5zb19jb21wKTsKLQlzby0+c29f
dHlwZSA9IHR5cGU7Ci0Jc28tPnNvX2NyZWQgPSBjcmhvbGQoY3JlZCk7Ci0Jc28tPnNvX3Byb3Rv
ID0gcHJwOwotI2lmZGVmIE1BQwotCW1hY19jcmVhdGVfc29ja2V0KGNyZWQsIHNvKTsKLSNlbmRp
ZgotCWtubGlzdF9pbml0KCZzby0+c29fcmN2LnNiX3NlbC5zaV9ub3RlLCBTT0NLQlVGX01UWCgm
c28tPnNvX3JjdiksCi0JICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCWtubGlzdF9pbml0KCZzby0+
c29fc25kLnNiX3NlbC5zaV9ub3RlLCBTT0NLQlVGX01UWCgmc28tPnNvX3NuZCksCi0JICAgIE5V
TEwsIE5VTEwsIE5VTEwpOwotCXNvLT5zb19jb3VudCA9IDE7Ci0JLyoKLQkgKiBBdXRvLXNpemlu
ZyBvZiBzb2NrZXQgYnVmZmVycyBpcyBtYW5hZ2VkIGJ5IHRoZSBwcm90b2NvbHMgYW5kCi0JICog
dGhlIGFwcHJvcHJpYXRlIGZsYWdzIG11c3QgYmUgc2V0IGluIHRoZSBwcnVfYXR0YWNoIGZ1bmN0
aW9uLgotCSAqLwotCWVycm9yID0gKCpwcnAtPnByX3VzcnJlcXMtPnBydV9hdHRhY2gpKHNvLCBw
cm90bywgdGQpOwotCWlmIChlcnJvcikgewotCQlLQVNTRVJUKHNvLT5zb19jb3VudCA9PSAxLCAo
InNvY3JlYXRlOiBzb19jb3VudCAlZCIsCi0JCSAgICBzby0+c29fY291bnQpKTsKLQkJc28tPnNv
X2NvdW50ID0gMDsKLQkJc29kZWFsbG9jKHNvKTsKLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotCSph
c28gPSBzbzsKLQlyZXR1cm4gKDApOwotfQotI2VuZGlmCi0KLQotCi0KLS8qIFRha2VuIGZyb20g
IC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNl
cnNwYWNlX18KLSAqIFJlbW92aW5nIHN0cnVjdCB0aHJlYWQgdGQuCi0gKi8KLXN0cnVjdCBzb2Nr
ZXQgKgotdXNlcnNwYWNlX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29s
KQotewotCXN0cnVjdCBzb2NrZXQgKnNvID0gTlVMTDsKLQotCWVycm5vID0gc29jcmVhdGUoZG9t
YWluLCAmc28sIHR5cGUsIHByb3RvY29sKTsKLQlpZiAoZXJybm8pIHsKLQkJcmV0dXJuIChOVUxM
KTsKLQl9Ci0JLyoKLQkgKiBUaGUgb3JpZ2luYWwgc29ja2V0IGNhbGwgcmV0dXJucyB0aGUgZmls
ZSBkZXNjcmlwdG9yIGZkLgotCSAqIHRkLT50ZF9yZXR2YWxbMF0gPSBmZC4KLQkgKiBXZSBhcmUg
cmV0dXJuaW5nIHN0cnVjdCBzb2NrZXQgKnNvLgotCSAqLwotCXJldHVybiAoc28pOwotfQotCi1z
dHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfc29ja2V0KGludCBkb21haW4sIGludCB0eXBlLCBpbnQg
cHJvdG9jb2wsCi0JICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ss
IHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbywgaW50
IGZsYWdzLCB2b2lkICp1bHBfaW5mbyksCi0JICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBz
b2NrZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUpLAotCSAgICAgICB1aW50MzJfdCBzYl90aHJl
c2hvbGQsCi0JICAgICAgIHZvaWQgKnVscF9pbmZvKQotewotCXN0cnVjdCBzb2NrZXQgKnNvOwot
Ci0JaWYgKChwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApICYmIChTQ1RQX0JBU0VfVkFSKHNjdHBf
cGNiX2luaXRpYWxpemVkKSA9PSAwKSkgewotCQllcnJubyA9IEVQUk9UT05PU1VQUE9SVDsKLQkJ
cmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKChyZWNlaXZlX2NiID09IE5VTEwpICYmCi0JICAgICgo
c2VuZF9jYiAhPSBOVUxMKSB8fCAoc2JfdGhyZXNob2xkICE9IDApIHx8ICh1bHBfaW5mbyAhPSBO
VUxMKSkpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmICgo
ZG9tYWluID09IEFGX0NPTk4pICYmIChTQ1RQX0JBU0VfVkFSKGNvbm5fb3V0cHV0KSA9PSBOVUxM
KSkgewotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JZXJy
bm8gPSBzb2NyZWF0ZShkb21haW4sICZzbywgdHlwZSwgcHJvdG9jb2wpOwotCWlmIChlcnJubykg
ewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIFRoZSBvcmlnaW5hbCBzb2NrZXQgY2Fs
bCByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuCi0JICogdGQtPnRkX3JldHZhbFswXSA9
IGZkLgotCSAqIFdlIGFyZSByZXR1cm5pbmcgc3RydWN0IHNvY2tldCAqc28uCi0JICovCi0JcmVn
aXN0ZXJfcmVjdl9jYihzbywgcmVjZWl2ZV9jYik7Ci0JcmVnaXN0ZXJfc2VuZF9jYihzbywgc2Jf
dGhyZXNob2xkLCBzZW5kX2NiKTsKLQlyZWdpc3Rlcl91bHBfaW5mbyhzbywgdWxwX2luZm8pOwot
CXJldHVybiAoc28pOwotfQotCi0KLXVfbG9uZwlzYl9tYXggPSBTQl9NQVg7Ci11X2xvbmcgc2Jf
bWF4X2FkaiA9Ci0gICAgICAgU0JfTUFYICogTUNMQllURVMgLyAoTVNJWkUgKyBNQ0xCWVRFUyk7
IC8qIGFkanVzdGVkIHNiX21heCAqLwotCi1zdGF0aWMJdV9sb25nIHNiX2VmZmljaWVuY3kgPSA4
OwkvKiBwYXJhbWV0ZXIgZm9yIHNicmVzZXJ2ZSgpICovCi0KLS8qCi0gKiBBbGxvdCBtYnVmcyB0
byBhIHNvY2tidWYuICBBdHRlbXB0IHRvIHNjYWxlIG1ibWF4IHNvIHRoYXQgbWJjbnQgZG9lc24n
dAotICogYmVjb21lIGxpbWl0aW5nIGlmIGJ1ZmZlcmluZyBlZmZpY2llbmN5IGlzIG5lYXIgdGhl
IG5vcm1hbCBjYXNlLgotICovCi1pbnQKLXNicmVzZXJ2ZV9sb2NrZWQoc3RydWN0IHNvY2tidWYg
KnNiLCB1X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvKQotewotCVNPQ0tCVUZfTE9DS19BU1NF
UlQoc2IpOwotCXNiLT5zYl9tYm1heCA9ICh1X2ludCltaW4oY2MgKiBzYl9lZmZpY2llbmN5LCBz
Yl9tYXgpOwotCXNiLT5zYl9oaXdhdCA9ICh1X2ludCljYzsKLQlpZiAoc2ItPnNiX2xvd2F0ID4g
KGludClzYi0+c2JfaGl3YXQpCi0JCXNiLT5zYl9sb3dhdCA9IChpbnQpc2ItPnNiX2hpd2F0Owot
CXJldHVybiAoMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNicmVzZXJ2ZShzdHJ1Y3Qgc29ja2J1ZiAq
c2IsIHVfbG9uZyBjYywgc3RydWN0IHNvY2tldCAqc28pCi17Ci0JaW50IGVycm9yOwotCi0JU09D
S0JVRl9MT0NLKHNiKTsKLQllcnJvciA9IHNicmVzZXJ2ZV9sb2NrZWQoc2IsIGNjLCBzbyk7Ci0J
U09DS0JVRl9VTkxPQ0soc2IpOwotCXJldHVybiAoZXJyb3IpOwotfQotCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotaW50Ci1zb3Jlc2VydmUoc3RydWN0IHNvY2tldCAqc28sIHVfbG9uZyBz
bmRjYywgdV9sb25nIHJjdmNjKQotewotCVNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCk7Ci0JU09D
S0JVRl9MT0NLKCZzby0+c29fcmN2KTsKLQlzby0+c29fc25kLnNiX2hpd2F0ID0gKHVpbnQzMl90
KXNuZGNjOwotCXNvLT5zb19yY3Yuc2JfaGl3YXQgPSAodWludDMyX3QpcmN2Y2M7Ci0KLQlpZiAo
c2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3NuZCwgc25kY2MsIHNvKSA9PSAwKSB7Ci0JCWdvdG8g
YmFkOwotCX0KLQlpZiAoc2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3JjdiwgcmN2Y2MsIHNvKSA9
PSAwKSB7Ci0JCWdvdG8gYmFkOwotCX0KLQlpZiAoc28tPnNvX3Jjdi5zYl9sb3dhdCA9PSAwKQot
CQlzby0+c29fcmN2LnNiX2xvd2F0ID0gMTsKLQlpZiAoc28tPnNvX3NuZC5zYl9sb3dhdCA9PSAw
KQotCQlzby0+c29fc25kLnNiX2xvd2F0ID0gTUNMQllURVM7Ci0JaWYgKHNvLT5zb19zbmQuc2Jf
bG93YXQgPiAoaW50KXNvLT5zb19zbmQuc2JfaGl3YXQpCi0JCXNvLT5zb19zbmQuc2JfbG93YXQg
PSAoaW50KXNvLT5zb19zbmQuc2JfaGl3YXQ7Ci0JU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3Yp
OwotCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKLQlyZXR1cm4gKDApOwotCi0gYmFkOgot
CVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Nu
ZCk7Ci0JcmV0dXJuIChFTk9CVUZTKTsKLX0KLSNlbHNlIC8qIGtlcm5lbCB2ZXJzaW9uIGZvciBy
ZWZlcmVuY2UgKi8KLWludAotc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcgc25k
Y2MsIHVfbG9uZyByY3ZjYykKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0ZCA9IGN1cnRocmVhZDsKLQot
CVNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCk7Ci0JU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsK
LQlpZiAoc2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3NuZCwgc25kY2MsIHNvLCB0ZCkgPT0gMCkK
LQkJZ290byBiYWQ7Ci0JaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19yY3YsIHJjdmNjLCBz
bywgdGQpID09IDApCi0JCWdvdG8gYmFkMjsKLQlpZiAoc28tPnNvX3Jjdi5zYl9sb3dhdCA9PSAw
KQotCQlzby0+c29fcmN2LnNiX2xvd2F0ID0gMTsKLQlpZiAoc28tPnNvX3NuZC5zYl9sb3dhdCA9
PSAwKQotCQlzby0+c29fc25kLnNiX2xvd2F0ID0gTUNMQllURVM7Ci0JaWYgKHNvLT5zb19zbmQu
c2JfbG93YXQgPiBzby0+c29fc25kLnNiX2hpd2F0KQotCQlzby0+c29fc25kLnNiX2xvd2F0ID0g
c28tPnNvX3NuZC5zYl9oaXdhdDsKLQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7Ci0JU09D
S0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCXJldHVybiAoMCk7Ci1iYWQyOgotCXNicmVsZWFz
ZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNvKTsKLWJhZDoKLQlTT0NLQlVGX1VOTE9DSygmc28tPnNv
X3Jjdik7Ci0JU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCXJldHVybiAoRU5PQlVGUyk7
Ci19Ci0jZW5kaWYKLQotCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNf
c29ja2J1Zi5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqLwotCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotdm9pZAotc293YWtldXAoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYnVmICpzYikKLXsKLQotCVNPQ0tCVUZfTE9DS19BU1NFUlQoc2IpOwotCi0J
c2ItPnNiX2ZsYWdzICY9IH5TQl9TRUw7Ci0JaWYgKHNiLT5zYl9mbGFncyAmIFNCX1dBSVQpIHsK
LQkJc2ItPnNiX2ZsYWdzICY9IH5TQl9XQUlUOwotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCi0JCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmKHNiKS0+c2JfY29uZCk7Ci0j
ZWxzZQotCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCYoc2IpLT5zYl9jb25kKTsKLSNlbmRpZgot
CX0KLQlTT0NLQlVGX1VOTE9DSyhzYik7Ci0JLypfX1VzZXJzcGFjZV9fIHdoYXQgdG9kbyBhYm91
dCBzb191cGNhbGw/Ki8KLQotfQotI2Vsc2UgLyoga2VybmVsIHZlcnNpb24gZm9yIHJlZmVyZW5j
ZSAqLwotLyoKLSAqIFdha2V1cCBwcm9jZXNzZXMgd2FpdGluZyBvbiBhIHNvY2tldCBidWZmZXIu
ICBEbyBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uCi0gKiB2aWEgU0lHSU8gaWYgdGhlIHNvY2tl
dCBoYXMgdGhlIFNTX0FTWU5DIGZsYWcgc2V0LgotICoKLSAqIENhbGxlZCB3aXRoIHRoZSBzb2Nr
ZXQgYnVmZmVyIGxvY2sgaGVsZDsgd2lsbCByZWxlYXNlIHRoZSBsb2NrIGJ5IHRoZSBlbmQKLSAq
IG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIgdG8gYWNxdWlyZSB0aGUg
c29ja2V0IGJ1ZmZlciBsb2NrCi0gKiB3aGlsZSB0ZXN0aW5nIGZvciB0aGUgbmVlZCBmb3IgdmFy
aW91cyBzb3J0cyBvZiB3YWtldXAgYW5kIGhvbGQgaXQgdGhyb3VnaAotICogdG8gdGhlIHBvaW50
IHdoZXJlIGl0J3Mgbm8gbG9uZ2VyIHJlcXVpcmVkLiAgV2UgY3VycmVudGx5IGhvbGQgdGhlIGxv
Y2sKLSAqIHRocm91Z2ggY2FsbHMgb3V0IHRvIG90aGVyIHN1YnN5c3RlbXMgKHdpdGggdGhlIGV4
Y2VwdGlvbiBvZiBrcXVldWUpLCBhbmQKLSAqIHRoZW4gcmVsZWFzZSBpdCB0byBhdm9pZCBsb2Nr
IG9yZGVyIGlzc3Vlcy4gIEl0J3Mgbm90IGNsZWFyIHRoYXQncwotICogY29ycmVjdC4KLSAqLwot
dm9pZAotc293YWtldXAoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYnVmICpzYikKLXsK
LQotCVNPQ0tCVUZfTE9DS19BU1NFUlQoc2IpOwotCi0Jc2Vsd2FrZXVwcHJpKCZzYi0+c2Jfc2Vs
LCBQU09DSyk7Ci0Jc2ItPnNiX2ZsYWdzICY9IH5TQl9TRUw7Ci0JaWYgKHNiLT5zYl9mbGFncyAm
IFNCX1dBSVQpIHsKLQkJc2ItPnNiX2ZsYWdzICY9IH5TQl9XQUlUOwotCQl3YWtldXAoJnNiLT5z
Yl9jYyk7Ci0JfQotCUtOT1RFX0xPQ0tFRCgmc2ItPnNiX3NlbC5zaV9ub3RlLCAwKTsKLQlTT0NL
QlVGX1VOTE9DSyhzYik7Ci0JaWYgKChzby0+c29fc3RhdGUgJiBTU19BU1lOQykgJiYgc28tPnNv
X3NpZ2lvICE9IE5VTEwpCi0JCXBnc2lnaW8oJnNvLT5zb19zaWdpbywgU0lHSU8sIDApOwotCWlm
IChzYi0+c2JfZmxhZ3MgJiBTQl9VUENBTEwpCi0JCSgqc28tPnNvX3VwY2FsbCkoc28sIHNvLT5z
b191cGNhbGxhcmcsIE1fTk9XQUlUKTsKLQlpZiAoc2ItPnNiX2ZsYWdzICYgU0JfQUlPKQotCQlh
aW9fc3dha2Uoc28sIHNiKTsKLQltdHhfYXNzZXJ0KFNPQ0tCVUZfTVRYKHNiKSwgTUFfTk9UT1dO
RUQpOwotfQotI2VuZGlmCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNf
c29ja2V0LmMKLSAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXwotICovCi0KLWludAot
c29iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbSkKLXsKLQlzd2l0
Y2ggKG5hbS0+c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCWNhc2UgQUZfSU5FVDoK
LQkJcmV0dXJuIChzY3RwX2JpbmQoc28sIG5hbSkpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVU
NikKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gKHNjdHA2X2JpbmQoc28sIG5hbSwgTlVMTCkp
OwotI2VuZGlmCi0JY2FzZSBBRl9DT05OOgotCQlyZXR1cm4gKHNjdHBjb25uX2JpbmQoc28sIG5h
bSkpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBFQUZOT1NVUFBPUlQ7Ci0JfQotfQotCi0vKiBUYWtl
biBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYwotICogYW5kIG1vZGlmaWVkIGZv
ciBfX1VzZXJzcGFjZV9fCi0gKi8KLQotaW50Ci11c3JzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCi17Ci0Jc3RydWN0IHNvY2th
ZGRyICpzYTsKLQotCWlmIChzbyA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRUJBREY7Ci0JCXJldHVy
biAoLTEpOwotCX0KLQlpZiAoKGVycm5vID0gZ2V0c29ja2FkZHIoJnNhLCAoY2FkZHJfdCluYW1l
LCBuYW1lbGVuKSkgIT0gMCkKLQkJcmV0dXJuICgtMSk7Ci0KLQllcnJubyA9IHNvYmluZChzbywg
c2EpOwotCUZSRUUoc2EsIE1fU09OQU1FKTsKLQlpZiAoZXJybm8pIHsKLQkJcmV0dXJuICgtMSk7
Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLWludAotdXNlcnNwYWNlX2JpbmQo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCi17
Ci0JcmV0dXJuICh1c3JzY3RwX2JpbmQoc28sIG5hbWUsIG5hbWVsZW4pKTsKLX0KLQotLyogVGFr
ZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9y
IF9fVXNlcnNwYWNlX18KLSAqLwotCi1pbnQKLXNvbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgYmFja2xvZykKLXsKLQlpZiAoc28gPT0gTlVMTCkgewotCQlyZXR1cm4gKEVCQURGKTsKLQl9
IGVsc2UgewotCQlyZXR1cm4gKHNjdHBfbGlzdGVuKHNvLCBiYWNrbG9nLCBOVUxMKSk7Ci0JfQot
fQotCi0KLWludAotc29saXN0ZW5fcHJvdG9fY2hlY2soc3RydWN0IHNvY2tldCAqc28pCi17Ci0K
LQlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsKLQotCWlmIChzby0+c29fc3RhdGUgJiAoU1NfSVNDT05O
RUNURUQgfCBTU19JU0NPTk5FQ1RJTkcgfAotCSAgICBTU19JU0RJU0NPTk5FQ1RJTkcpKQotCQly
ZXR1cm4gKEVJTlZBTCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIGludCBzb21heGNvbm4g
PSBTT01BWENPTk47Ci0KLXZvaWQKLXNvbGlzdGVuX3Byb3RvKHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgYmFja2xvZykKLXsKLQotCVNPQ0tfTE9DS19BU1NFUlQoc28pOwotCi0JaWYgKGJhY2tsb2cg
PCAwIHx8IGJhY2tsb2cgPiBzb21heGNvbm4pCi0JCWJhY2tsb2cgPSBzb21heGNvbm47Ci0Jc28t
PnNvX3FsaW1pdCA9IGJhY2tsb2c7Ci0Jc28tPnNvX29wdGlvbnMgfD0gU0NUUF9TT19BQ0NFUFRD
T05OOwotfQotCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2Fs
bHMuYwotICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCi0gKi8KLQotaW50Ci11c3Jz
Y3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2cpCi17Ci0JZXJybm8gPSBz
b2xpc3RlbihzbywgYmFja2xvZyk7Ci0JaWYgKGVycm5vKSB7Ci0JCXJldHVybiAoLTEpOwotCX0g
ZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi1pbnQKLXVzZXJzcGFjZV9saXN0ZW4oc3Ry
dWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQotewotCXJldHVybiAodXNyc2N0cF9saXN0ZW4o
c28sIGJhY2tsb2cpKTsKLX0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3Nv
Y2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqLwotCi1pbnQKLXNv
YWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pCi17Ci0JaW50
IGVycm9yOwotCi0JU09DS19MT0NLKHNvKTsKLQlLQVNTRVJUKChzby0+c29fc3RhdGUgJiBTU19O
T0ZEUkVGKSAhPSAwLCAoInNvYWNjZXB0OiAhTk9GRFJFRiIpKTsKLQlzby0+c29fc3RhdGUgJj0g
flNTX05PRkRSRUY7Ci0JU09DS19VTkxPQ0soc28pOwotCWVycm9yID0gc2N0cF9hY2NlcHQoc28s
IG5hbSk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5
cy9rZXJuL3VpcGNfc3lzY2FsbHMuYwotICoga2Vybl9hY2NlcHQgbW9kaWZpZWQgZm9yIF9fVXNl
cnNwYWNlX18KLSAqLwotaW50Ci11c2VyX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpoZWFkLCAgc3Ry
dWN0IHNvY2thZGRyICoqbmFtZSwgc29ja2xlbl90ICpuYW1lbGVuLCBzdHJ1Y3Qgc29ja2V0ICoq
cHRyX2FjY2VwdF9yZXRfc29jaykKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gTlVMTDsKLQlp
bnQgZXJyb3I7Ci0Jc3RydWN0IHNvY2tldCAqc28gPSBOVUxMOwotCi0KLQlpZiAobmFtZSkgewot
CQkqbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKChoZWFkLT5zb19vcHRpb25zICYgU0NUUF9TT19B
Q0NFUFRDT05OKSA9PSAwKSB7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIGRvbmU7Ci0JfQot
Ci0JQUNDRVBUX0xPQ0soKTsKLQlpZiAoKGhlYWQtPnNvX3N0YXRlICYgU1NfTkJJTykgJiYgVEFJ
TFFfRU1QVFkoJmhlYWQtPnNvX2NvbXApKSB7Ci0JCUFDQ0VQVF9VTkxPQ0soKTsKLQkJZXJyb3Ig
PSBFV09VTERCTE9DSzsKLQkJZ290byBub2Nvbm5lY3Rpb247Ci0JfQotCXdoaWxlIChUQUlMUV9F
TVBUWSgmaGVhZC0+c29fY29tcCkgJiYgaGVhZC0+c29fZXJyb3IgPT0gMCkgewotCQlpZiAoaGVh
ZC0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB7Ci0JCQloZWFkLT5zb19lcnJv
ciA9IEVDT05OQUJPUlRFRDsKLQkJCWJyZWFrOwotCQl9Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLQkJaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFibGVDUygmYWNjZXB0X2Nv
bmQsICZhY2NlcHRfbXR4LCBJTkZJTklURSkpCi0JCQllcnJvciA9IDA7Ci0JCWVsc2UKLQkJCWVy
cm9yID0gR2V0TGFzdEVycm9yKCk7Ci0jZWxzZQotCQllcnJvciA9IHB0aHJlYWRfY29uZF93YWl0
KCZhY2NlcHRfY29uZCwgJmFjY2VwdF9tdHgpOwotI2VuZGlmCi0JCWlmIChlcnJvcikgewotCQkJ
QUNDRVBUX1VOTE9DSygpOwotCQkJZ290byBub2Nvbm5lY3Rpb247Ci0JCX0KLQl9Ci0JaWYgKGhl
YWQtPnNvX2Vycm9yKSB7Ci0JCWVycm9yID0gaGVhZC0+c29fZXJyb3I7Ci0JCWhlYWQtPnNvX2Vy
cm9yID0gMDsKLQkJQUNDRVBUX1VOTE9DSygpOwotCQlnb3RvIG5vY29ubmVjdGlvbjsKLQl9Ci0J
c28gPSBUQUlMUV9GSVJTVCgmaGVhZC0+c29fY29tcCk7Ci0JS0FTU0VSVCghKHNvLT5zb19xc3Rh
dGUgJiBTUV9JTkNPTVApLCAoImFjY2VwdDE6IHNvIFNRX0lOQ09NUCIpKTsKLQlLQVNTRVJUKHNv
LT5zb19xc3RhdGUgJiBTUV9DT01QLCAoImFjY2VwdDE6IHNvIG5vdCBTUV9DT01QIikpOwotCi0J
LyoKLQkgKiBCZWZvcmUgY2hhbmdpbmcgdGhlIGZsYWdzIG9uIHRoZSBzb2NrZXQsIHdlIGhhdmUg
dG8gYnVtcCB0aGUKLQkgKiByZWZlcmVuY2UgY291bnQuICBPdGhlcndpc2UsIGlmIHRoZSBwcm90
b2NvbCBjYWxscyBzb2ZyZWUoKSwKLQkgKiB0aGUgc29ja2V0IHdpbGwgYmUgcmVsZWFzZWQgZHVl
IHRvIGEgemVybyByZWZjb3VudC4KLQkgKi8KLQlTT0NLX0xPQ0soc28pOwkJCS8qIHNvcmVmKCkg
YW5kIHNvX3N0YXRlIHVwZGF0ZSAqLwotCXNvcmVmKHNvKTsJCQkvKiBmaWxlIGRlc2NyaXB0b3Ig
cmVmZXJlbmNlICovCi0KLQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0
KTsKLQloZWFkLT5zb19xbGVuLS07Ci0Jc28tPnNvX3N0YXRlIHw9IChoZWFkLT5zb19zdGF0ZSAm
IFNTX05CSU8pOwotCXNvLT5zb19xc3RhdGUgJj0gflNRX0NPTVA7Ci0Jc28tPnNvX2hlYWQgPSBO
VUxMOwotCVNPQ0tfVU5MT0NLKHNvKTsKLQlBQ0NFUFRfVU5MT0NLKCk7Ci0KLQotCS8qCi0JICog
VGhlIG9yaWdpbmFsIGFjY2VwdCByZXR1cm5zIGZkIHZhbHVlIHZpYSB0ZC0+dGRfcmV0dmFsWzBd
ID0gZmQ7Ci0JICogd2Ugd2lsbCByZXR1cm4gdGhlIHNvY2tldCBmb3IgYWNjZXB0ZWQgY29ubmVj
dGlvbi4KLQkgKi8KLQotCWVycm9yID0gc29hY2NlcHQoc28sICZzYSk7Ci0JaWYgKGVycm9yKSB7
Ci0JCS8qCi0JCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Igb2xkZXIgY29kZSB3aGlj
aCBtaWdodAotCQkgKiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFjY2VwdC4KLQkJICov
Ci0JCWlmIChuYW1lKQotCQkJKm5hbWVsZW4gPSAwOwotCQlnb3RvIG5vY29ubmVjdGlvbjsKLQl9
Ci0JaWYgKHNhID09IE5VTEwpIHsKLQkJaWYgKG5hbWUpCi0JCQkqbmFtZWxlbiA9IDA7Ci0JCWdv
dG8gZG9uZTsKLQl9Ci0JaWYgKG5hbWUpIHsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkvKiBjaGVj
ayBzYV9sZW4gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCAqLwotCQlpZiAoKm5hbWVsZW4gPiBzYS0+
c2FfbGVuKSB7Ci0JCQkqbmFtZWxlbiA9IHNhLT5zYV9sZW47Ci0JCX0KLSNlbHNlCi0JCXNvY2ts
ZW5fdCBzYV9sZW47Ci0KLQkJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAot
CQljYXNlIEFGX0lORVQ6Ci0JCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
LQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCXNh
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCWJyZWFrOwotI2VuZGlmCi0J
CWNhc2UgQUZfQ09OTjoKLQkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7
Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXNhX2xlbiA9IDA7Ci0JCQlicmVhazsKLQkJfQot
CQlpZiAoKm5hbWVsZW4gPiBzYV9sZW4pIHsKLQkJCSpuYW1lbGVuID0gc2FfbGVuOwotCQl9Ci0j
ZW5kaWYKLQkJKm5hbWUgPSBzYTsKLQkJc2EgPSBOVUxMOwotCX0KLW5vY29ubmVjdGlvbjoKLQlp
ZiAoc2EpIHsKLQkJRlJFRShzYSwgTV9TT05BTUUpOwotCX0KLQotZG9uZToKLQkqcHRyX2FjY2Vw
dF9yZXRfc29jayA9IHNvOwotCXJldHVybiAoZXJyb3IpOwotfQotCi0KLQotLyogVGFrZW4gZnJv
bSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKLSAqIGFuZCBtb2RpZmllZCBmb3IgX19V
c2Vyc3BhY2VfXwotICovCi0vKgotICogYWNjZXB0MSgpCi0gKi8KLXN0YXRpYyBpbnQKLWFjY2Vw
dDEoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYW5hbWUsIHNvY2tsZW5fdCAq
YW5hbWVsZW4sIHN0cnVjdCBzb2NrZXQgKipwdHJfYWNjZXB0X3JldF9zb2NrKQotewotCXN0cnVj
dCBzb2NrYWRkciAqbmFtZTsKLQlzb2NrbGVuX3QgbmFtZWxlbjsKLQlpbnQgZXJyb3I7Ci0KLQlp
ZiAoc28gPT0gTlVMTCkgewotCQlyZXR1cm4gKEVCQURGKTsKLQl9Ci0JaWYgKGFuYW1lID09IE5V
TEwpIHsKLQkJcmV0dXJuICh1c2VyX2FjY2VwdChzbywgTlVMTCwgTlVMTCwgcHRyX2FjY2VwdF9y
ZXRfc29jaykpOwotCX0KLQotCWVycm9yID0gY29weWluKGFuYW1lbGVuLCAmbmFtZWxlbiwgc2l6
ZW9mIChuYW1lbGVuKSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gKGVycm9yKTsKLQotCWVycm9y
ID0gdXNlcl9hY2NlcHQoc28sICZuYW1lLCAmbmFtZWxlbiwgcHRyX2FjY2VwdF9yZXRfc29jayk7
Ci0KLQkvKgotCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Igb2xkZXIgY29kZSB3aGlj
aCBtaWdodAotCSAqIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20gYWNjZXB0LgotCSAqLwot
CWlmIChlcnJvcikgewotCQkodm9pZCkgY29weW91dCgmbmFtZWxlbiwKLQkJICAgIGFuYW1lbGVu
LCBzaXplb2YoKmFuYW1lbGVuKSk7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0KLQotCWlmIChlcnJv
ciA9PSAwICYmIG5hbWUgIT0gTlVMTCkgewotCQllcnJvciA9IGNvcHlvdXQobmFtZSwgYW5hbWUs
IG5hbWVsZW4pOwotCX0KLQlpZiAoZXJyb3IgPT0gMCkgewotCQllcnJvciA9IGNvcHlvdXQoJm5h
bWVsZW4sIGFuYW1lbGVuLCBzaXplb2YobmFtZWxlbikpOwotCX0KLQotCWlmIChuYW1lKSB7Ci0J
CUZSRUUobmFtZSwgTV9TT05BTUUpOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotc3RydWN0
IHNvY2tldCAqCi11c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikKLXsKLQlzdHJ1Y3Qgc29ja2V0ICphY2Nl
cHRfcmV0dXJuX3NvY2sgPSBOVUxMOwotCi0JZXJybm8gPSBhY2NlcHQxKHNvLCBhbmFtZSwgYW5h
bWVsZW4sICZhY2NlcHRfcmV0dXJuX3NvY2spOwotCWlmIChlcnJubykgewotCQlyZXR1cm4gKE5V
TEwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoYWNjZXB0X3JldHVybl9zb2NrKTsKLQl9Ci19Ci0K
LXN0cnVjdCBzb2NrZXQgKgotdXNlcnNwYWNlX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikKLXsKLQlyZXR1cm4gKHVz
cnNjdHBfYWNjZXB0KHNvLCBhbmFtZSwgYW5hbWVsZW4pKTsKLX0KLQotc3RydWN0IHNvY2tldCAq
Ci11c3JzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190IGlkKQot
ewotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JaWYgKChlcnJubyA9IHNjdHBfY2FuX3BlZWxfb2Zm
KGhlYWQsIGlkKSkgIT0gMCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKHNvID0gc29u
ZXdjb25uKGhlYWQsIFNTX0lTQ09OTkVDVEVEKSkgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQlBQ0NFUFRfTE9DSygpOwotCVNPQ0tfTE9DSyhzbyk7Ci0Jc29yZWYoc28pOwotCVRB
SUxRX1JFTU9WRSgmaGVhZC0+c29fY29tcCwgc28sIHNvX2xpc3QpOwotCWhlYWQtPnNvX3FsZW4t
LTsKLQlzby0+c29fc3RhdGUgfD0gKGhlYWQtPnNvX3N0YXRlICYgU1NfTkJJTyk7Ci0Jc28tPnNv
X3FzdGF0ZSAmPSB+U1FfQ09NUDsKLQlzby0+c29faGVhZCA9IE5VTEw7Ci0JU09DS19VTkxPQ0so
c28pOwotCUFDQ0VQVF9VTkxPQ0soKTsKLQlpZiAoKGVycm5vID0gc2N0cF9kb19wZWVsb2ZmKGhl
YWQsIHNvLCBpZCkpICE9IDApIHsKLQkJc28tPnNvX2NvdW50ID0gMDsKLQkJc29kZWFsbG9jKHNv
KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JcmV0dXJuIChzbyk7Ci19Ci0KLWludAotc29kaXNj
b25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQotewotCWludCBlcnJvcjsKLQotCWlmICgoc28tPnNv
X3N0YXRlICYgU1NfSVNDT05ORUNURUQpID09IDApCi0JCXJldHVybiAoRU5PVENPTk4pOwotCWlm
IChzby0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RJTkcpCi0JCXJldHVybiAoRUFMUkVBRFkp
OwotCWVycm9yID0gc2N0cF9kaXNjb25uZWN0KHNvKTsKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQot
aW50Ci11c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc3RydWN0IHNvY2tldCAqc28sIGludCBvbm9m
ZikKLXsKLQlpZiAoc28gPT0gTlVMTCkgewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gKC0x
KTsKLQl9Ci0JU09DS19MT0NLKHNvKTsKLQlpZiAob25vZmYgIT0gMCkgewotCQlzby0+c29fc3Rh
dGUgfD0gU1NfTkJJTzsKLQl9IGVsc2UgewotCQlzby0+c29fc3RhdGUgJj0gflNTX05CSU87Ci0J
fQotCVNPQ0tfVU5MT0NLKHNvKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXVzcnNjdHBfZ2V0
X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlpbnQgcmVzdWx0OwotCi0JaWYg
KHNvID09IE5VTEwpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCVNP
Q0tfTE9DSyhzbyk7Ci0JaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pIHsKLQkJcmVzdWx0ID0g
MTsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSAwOwotCX0KLQlTT0NLX1VOTE9DSyhzbyk7Ci0JcmV0
dXJuIChyZXN1bHQpOwotfQotCi1pbnQKLXNvY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICpuYW0pCi17Ci0JaW50IGVycm9yOwotCi0JaWYgKHNvLT5zb19vcHRpb25z
ICYgU0NUUF9TT19BQ0NFUFRDT05OKQotCQlyZXR1cm4gKEVPUE5PVFNVUFApOwotCS8qCi0JICog
SWYgcHJvdG9jb2wgaXMgY29ubmVjdGlvbi1iYXNlZCwgY2FuIG9ubHkgY29ubmVjdCBvbmNlLgot
CSAqIE90aGVyd2lzZSwgaWYgY29ubmVjdGVkLCB0cnkgdG8gZGlzY29ubmVjdCBmaXJzdC4gIFRo
aXMgYWxsb3dzCi0JICogdXNlciB0byBkaXNjb25uZWN0IGJ5IGNvbm5lY3RpbmcgdG8sIGUuZy4s
IGEgbnVsbCBhZGRyZXNzLgotCSAqLwotCWlmIChzby0+c29fc3RhdGUgJiAoU1NfSVNDT05ORUNU
RUR8U1NfSVNDT05ORUNUSU5HKSAmJiAoZXJyb3IgPSBzb2Rpc2Nvbm5lY3Qoc28pKSkgewotCQll
cnJvciA9IEVJU0NPTk47Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUHJldmVudCBhY2N1bXVsYXRl
ZCBlcnJvciBmcm9tIHByZXZpb3VzIGNvbm5lY3Rpb24gZnJvbQotCQkgKiBiaXRpbmcgdXMuCi0J
CSAqLwotCQlzby0+c29fZXJyb3IgPSAwOwotCQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7Ci0j
aWYgZGVmaW5lZChJTkVUKQotCQljYXNlIEFGX0lORVQ6Ci0JCQllcnJvciA9IHNjdHBfY29ubmVj
dChzbywgbmFtKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQkJY2Fz
ZSBBRl9JTkVUNjoKLQkJCWVycm9yID0gc2N0cDZfY29ubmVjdChzbywgbmFtKTsKLQkJCWJyZWFr
OwotI2VuZGlmCi0JCWNhc2UgQUZfQ09OTjoKLQkJCWVycm9yID0gc2N0cGNvbm5fY29ubmVjdChz
bywgbmFtKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7
Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotCi0KLWludCB1c2VyX2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17Ci0JaW50IGVycm9yOwot
CWludCBpbnRlcnJ1cHRlZCA9IDA7Ci0KLQlpZiAoc28gPT0gTlVMTCkgewotCQllcnJvciA9IEVC
QURGOwotCQlnb3RvIGRvbmUxOwotCX0KLQlpZiAoc28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNU
SU5HKSB7Ci0JCWVycm9yID0gRUFMUkVBRFk7Ci0JCWdvdG8gZG9uZTE7Ci0JfQotCi0JZXJyb3Ig
PSBzb2Nvbm5lY3Qoc28sIHNhKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ290byBiYWQ7Ci0JfQotCWlm
ICgoc28tPnNvX3N0YXRlICYgU1NfTkJJTykgJiYgKHNvLT5zb19zdGF0ZSAmIFNTX0lTQ09OTkVD
VElORykpIHsKLQkJZXJyb3IgPSBFSU5QUk9HUkVTUzsKLQkJZ290byBkb25lMTsKLQl9Ci0KLQlT
T0NLX0xPQ0soc28pOwotCXdoaWxlICgoc28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNUSU5HKSAm
JiBzby0+c29fZXJyb3IgPT0gMCkgewotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi0JCWlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoU09DS19DT05EKHNvKSwgU09DS19N
VFgoc28pLCBJTkZJTklURSkpCi0JCQllcnJvciA9IDA7Ci0JCWVsc2UKLQkJCWVycm9yID0gLTE7
Ci0jZWxzZQotCQllcnJvciA9IHB0aHJlYWRfY29uZF93YWl0KFNPQ0tfQ09ORChzbyksIFNPQ0tf
TVRYKHNvKSk7Ci0jZW5kaWYKLQkJaWYgKGVycm9yKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19OZXRCU0QpCi0JCQlpZiAoZXJyb3IgPT0gRUlOVFIpIHsKLSNlbHNlCi0JCQlpZiAoZXJy
b3IgPT0gRUlOVFIgfHwgZXJyb3IgPT0gRVJFU1RBUlQpIHsKLSNlbmRpZgotCQkJCWludGVycnVw
dGVkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChlcnJvciA9PSAwKSB7Ci0J
CWVycm9yID0gc28tPnNvX2Vycm9yOwotCQlzby0+c29fZXJyb3IgPSAwOwotCX0KLQlTT0NLX1VO
TE9DSyhzbyk7Ci0KLWJhZDoKLQlpZiAoIWludGVycnVwdGVkKSB7Ci0JCXNvLT5zb19zdGF0ZSAm
PSB+U1NfSVNDT05ORUNUSU5HOwotCX0KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRC
U0QpCi0JaWYgKGVycm9yID09IEVSRVNUQVJUKSB7Ci0JCWVycm9yID0gRUlOVFI7Ci0JfQotI2Vu
ZGlmCi1kb25lMToKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotaW50IHVzcnNjdHBfY29ubmVjdChz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBpbnQgbmFtZWxlbikKLXsK
LQlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gTlVMTDsKLQotCWVycm5vID0gZ2V0c29ja2FkZHIoJnNh
LCAoY2FkZHJfdCluYW1lLCBuYW1lbGVuKTsKLQlpZiAoZXJybm8pIHsKLQkJaWYgKHNhKQotCQkJ
RlJFRShzYSwgTV9TT05BTUUpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQllcnJubyA9IHVzZXJf
Y29ubmVjdChzbywgc2EpOwotCUZSRUUoc2EsIE1fU09OQU1FKTsKLQlpZiAoZXJybm8pIHsKLQkJ
cmV0dXJuICgtMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLWludCB1c2Vy
c3BhY2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBp
bnQgbmFtZWxlbikKLXsKLQlyZXR1cm4gKHVzcnNjdHBfY29ubmVjdChzbywgbmFtZSwgbmFtZWxl
bikpOwotfQotCi0jZGVmaW5lIFNDVFBfU1RBQ0tfQlVGX1NJWkUgICAgICAgICAyMDQ4Ci0KLXZv
aWQKLXVzcnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pIHsKLQlpZiAoc28gIT0gTlVMTCkg
ewotCQlpZiAoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0FDQ0VQVENPTk4pIHsKLQkJCXN0cnVj
dCBzb2NrZXQgKnNwOwotCi0JCQlBQ0NFUFRfTE9DSygpOwotCQkJd2hpbGUgKChzcCA9IFRBSUxR
X0ZJUlNUKCZzby0+c29fY29tcCkpICE9IE5VTEwpIHsKLQkJCQlUQUlMUV9SRU1PVkUoJnNvLT5z
b19jb21wLCBzcCwgc29fbGlzdCk7Ci0JCQkJc28tPnNvX3FsZW4tLTsKLQkJCQlzcC0+c29fcXN0
YXRlICY9IH5TUV9DT01QOwotCQkJCXNwLT5zb19oZWFkID0gTlVMTDsKLQkJCQlBQ0NFUFRfVU5M
T0NLKCk7Ci0JCQkJc29hYm9ydChzcCk7Ci0JCQkJQUNDRVBUX0xPQ0soKTsKLQkJCX0KLQkJCUFD
Q0VQVF9VTkxPQ0soKTsKLQkJfQotCQlBQ0NFUFRfTE9DSygpOwotCQlTT0NLX0xPQ0soc28pOwot
CQlzb3JlbGUoc28pOwotCX0KLX0KLQotdm9pZAotdXNlcnNwYWNlX2Nsb3NlKHN0cnVjdCBzb2Nr
ZXQgKnNvKQotewotCXVzcnNjdHBfY2xvc2Uoc28pOwotfQotCi1pbnQKLXVzcnNjdHBfc2h1dGRv
d24oc3RydWN0IHNvY2tldCAqc28sIGludCBob3cpCi17Ci0JaWYgKCEoaG93ID09IFNIVVRfUkQg
fHwgaG93ID09IFNIVVRfV1IgfHwgaG93ID09IFNIVVRfUkRXUikpIHsKLQkJZXJybm8gPSBFSU5W
QUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoc28gPT0gTlVMTCkgewotCQllcnJubyA9IEVC
QURGOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jc2N0cF9mbHVzaChzbywgaG93KTsKLQlpZiAoaG93
ICE9IFNIVVRfV1IpCi0JCSBzb2NhbnRyY3Ztb3JlKHNvKTsKLQlpZiAoaG93ICE9IFNIVVRfUkQp
IHsKLQkJZXJybm8gPSBzY3RwX3NodXRkb3duKHNvKTsKLQkJaWYgKGVycm5vKSB7Ci0JCQlyZXR1
cm4gKC0xKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQl9Ci0JcmV0dXJuICgw
KTsKLX0KLQotaW50Ci11c2Vyc3BhY2Vfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc28sIGludCBo
b3cpCi17Ci0JcmV0dXJuICh1c3JzY3RwX3NodXRkb3duKHNvLCBob3cpKTsKLX0KLQotaW50Ci11
c3JzY3RwX2ZpbmlzaCh2b2lkKQotewotCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRp
YWxpemVkKSA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChTQ1RQX0lOUF9JTkZPX1RS
WUxPQ0soKSkgewotCQlpZiAoIUxJU1RfRU1QVFkoJlNDVFBfQkFTRV9JTkZPKGxpc3RoZWFkKSkp
IHsKLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJ
U0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQot
CXNjdHBfZmluaXNoKCk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCURl
bGV0ZUNvbmRpdGlvblZhcmlhYmxlKCZhY2NlcHRfY29uZCk7Ci0JRGVsZXRlQ3JpdGljYWxTZWN0
aW9uKCZhY2NlcHRfbXR4KTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0J
V1NBQ2xlYW51cCgpOwotI2VuZGlmCi0jZWxzZQotCXB0aHJlYWRfY29uZF9kZXN0cm95KCZhY2Nl
cHRfY29uZCk7Ci0JcHRocmVhZF9tdXRleF9kZXN0cm95KCZhY2NlcHRfbXR4KTsKLSNlbmRpZgot
CXJldHVybiAoMCk7Ci19Ci0KLWludAotdXNlcnNwYWNlX2ZpbmlzaCh2b2lkKQotewotCXJldHVy
biAodXNyc2N0cF9maW5pc2goKSk7Ci19Ci0KLS8qIG5lZWRlZCBmcm9tIHNjdHBfdXNycmVxLmMg
Ki8KLWludAotc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lk
ICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLCB2b2lkICpwKTsKLQotaW50Ci11c3JzY3RwX3NldHNv
Y2tvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBsZXZlbCwgaW50IG9wdGlvbl9uYW1lLAotICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92YWx1ZSwgc29ja2xlbl90IG9wdGlv
bl9sZW4pCi17Ci0JaWYgKHNvID09IE5VTEwpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJu
ICgtMSk7Ci0JfQotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNPTF9TT0NLRVQ6Ci0JewotCQlz
d2l0Y2ggKG9wdGlvbl9uYW1lKSB7Ci0JCWNhc2UgU09fUkNWQlVGOgotCQkJaWYgKG9wdGlvbl9s
ZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJ
cmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCWludCAqYnVmX3NpemU7Ci0KLQkJCQlidWZf
c2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7Ci0JCQkJaWYgKCpidWZfc2l6ZSA8IDEpIHsKLQkJ
CQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJCX0KLQkJCQlzYnJlc2Vy
dmUoJnNvLT5zb19yY3YsICh1X2xvbmcpKmJ1Zl9zaXplLCBzbyk7Ci0JCQkJcmV0dXJuICgwKTsK
LQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNPX1NOREJVRjoKLQkJCWlmIChvcHRpb25fbGVuIDwg
KHNvY2tsZW5fdClzaXplb2YoaW50KSkgewotCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCXJldHVy
biAoLTEpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgKmJ1Zl9zaXplOwotCi0JCQkJYnVmX3NpemUg
PSAoaW50ICopb3B0aW9uX3ZhbHVlOwotCQkJCWlmICgqYnVmX3NpemUgPCAxKSB7Ci0JCQkJCWVy
cm5vID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQkJc2JyZXNlcnZlKCZz
by0+c29fc25kLCAodV9sb25nKSpidWZfc2l6ZSwgc28pOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9
Ci0JCQlicmVhazsKLQkJY2FzZSBTT19MSU5HRVI6Ci0JCQlpZiAob3B0aW9uX2xlbiA8IChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJ
cmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBsaW5nZXIgKmw7Ci0KLQkJCQls
ID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFsdWU7Ci0JCQkJc28tPnNvX2xpbmdlciA9IGwt
PmxfbGluZ2VyOwotCQkJCWlmIChsLT5sX29ub2ZmKSB7Ci0JCQkJCXNvLT5zb19vcHRpb25zIHw9
IFNDVFBfU09fTElOR0VSOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNvLT5zb19vcHRpb25zICY9IH5T
Q1RQX1NPX0xJTkdFUjsKLQkJCQl9Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJZGVmYXVsdDoK
LQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9Ci0JY2FzZSBJUFBS
T1RPX1NDVFA6Ci0JCWVycm5vID0gc2N0cF9zZXRvcHQoc28sIG9wdGlvbl9uYW1lLCAodm9pZCAq
KSBvcHRpb25fdmFsdWUsIChzaXplX3Qpb3B0aW9uX2xlbiwgTlVMTCk7Ci0JCWlmIChlcnJubykg
ewotCQkJcmV0dXJuICgtMSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JZGVm
YXVsdDoKLQkJZXJybm8gPSBFTk9QUk9UT09QVDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotfQotCi1p
bnQKLXVzZXJzcGFjZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGlu
dCBvcHRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92
YWx1ZSwgc29ja2xlbl90IG9wdGlvbl9sZW4pCi17Ci0JcmV0dXJuICh1c3JzY3RwX3NldHNvY2tv
cHQoc28sIGxldmVsLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCBvcHRpb25fbGVuKSk7Ci19
Ci0KLS8qIG5lZWRlZCBmcm9tIHNjdHBfdXNycmVxLmMgKi8KLWludAotc2N0cF9nZXRvcHQoc3Ry
dWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCAqb3B0c2l6
ZSwKLQkgICAgdm9pZCAqcCk7Ci0KLWludAotdXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2Nr
ZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICB2
b2lkICpvcHRpb25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbikKLXsKLQlpZiAoc28gPT0g
TlVMTCkgewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JaWYgKG9wdGlv
bl9sZW4gPT0gTlVMTCkgewotCQllcnJubyA9IEVGQVVMVDsKLQkJcmV0dXJuICgtMSk7Ci0JfQot
CXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNPTF9TT0NLRVQ6Ci0JCXN3aXRjaCAob3B0aW9uX25h
bWUpIHsKLQkJY2FzZSBTT19SQ1ZCVUY6Ci0JCQlpZiAoKm9wdGlvbl9sZW4gPCAoc29ja2xlbl90
KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0J
CQl9IGVsc2UgewotCQkJCWludCAqYnVmX3NpemU7Ci0KLQkJCQlidWZfc2l6ZSA9IChpbnQgKilv
cHRpb25fdmFsdWU7Ci0JCQkJKmJ1Zl9zaXplID0gc28tPnNvX3Jjdi5zYl9oaXdhdDs7Ci0JCQkJ
Km9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOwotCQkJCXJldHVybiAoMCk7Ci0J
CQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTT19TTkRCVUY6Ci0JCQlpZiAoKm9wdGlvbl9sZW4gPCAo
c29ja2xlbl90KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJu
ICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCWludCAqYnVmX3NpemU7Ci0KLQkJCQlidWZfc2l6ZSA9
IChpbnQgKilvcHRpb25fdmFsdWU7Ci0JCQkJKmJ1Zl9zaXplID0gc28tPnNvX3NuZC5zYl9oaXdh
dDsKLQkJCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7Ci0JCQkJcmV0dXJu
ICgwKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNPX0xJTkdFUjoKLQkJCWlmICgqb3B0aW9u
X2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7Ci0JCQkJZXJybm8gPSBF
SU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBsaW5nZXIg
Kmw7Ci0KLQkJCQlsID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFsdWU7Ci0JCQkJbC0+bF9s
aW5nZXIgPSBzby0+c29fbGluZ2VyOwotCQkJCWlmIChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09f
TElOR0VSKSB7Ci0JCQkJCWwtPmxfb25vZmYgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWwtPmxf
b25vZmYgPSAwOwotCQkJCX0KLQkJCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0
cnVjdCBsaW5nZXIpOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCWRlZmF1bHQ6Ci0JCQllcnJu
byA9IEVJTlZBTDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JY2FzZSBJUFBST1RPX1NDVFA6Ci0J
ewotCQlzaXplX3QgbGVuOwotCi0JCWxlbiA9IChzaXplX3QpKm9wdGlvbl9sZW47Ci0JCWVycm5v
ID0gc2N0cF9nZXRvcHQoc28sIG9wdGlvbl9uYW1lLCBvcHRpb25fdmFsdWUsICZsZW4sIE5VTEwp
OwotCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3QpbGVuOwotCQlpZiAoZXJybm8pIHsKLQkJCXJl
dHVybiAoLTEpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuICgwKTsKLQkJfQotCX0KLQlkZWZhdWx0
OgotCQllcnJubyA9IEVOT1BST1RPT1BUOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci19Ci0KLWludAot
dXNlcnNwYWNlX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBsZXZlbCwgaW50IG9w
dGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9uX3ZhbHVlLCBzb2Nr
bGVuX3QgKm9wdGlvbl9sZW4pCi17Ci0JcmV0dXJuICh1c3JzY3RwX2dldHNvY2tvcHQoc28sIGxl
dmVsLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCBvcHRpb25fbGVuKSk7Ci19Ci0KLWludAot
dXNyc2N0cF9zZXRfdWxwaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2luZm8pCi17
Ci0JcmV0dXJuIChyZWdpc3Rlcl91bHBfaW5mbyhzbywgdWxwX2luZm8pKTsKLX0KLQotaW50Ci11
c3JzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBp
bnQgYWRkcmNudCwgaW50IGZsYWdzKQotewotCXN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcyAqZ2Fk
ZHJzOwotCXN0cnVjdCBzb2NrYWRkciAqc2E7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRk
cl9pbiAqc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42OwotI2VuZGlmCi0JaW50IGk7Ci0Jc2l6ZV90IGFyZ3N6OwotI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKLQl1aW50MTZfdCBzcG9ydCA9IDA7Ci0jZW5kaWYKLQotCS8qIHZh
bGlkYXRlIHRoZSBmbGFncyAqLwotCWlmICgoZmxhZ3MgIT0gU0NUUF9CSU5EWF9BRERfQUREUikg
JiYKLQkgICAgKGZsYWdzICE9IFNDVFBfQklORFhfUkVNX0FERFIpKSB7Ci0JCWVycm5vID0gRUZB
VUxUOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogdmFsaWRhdGUgdGhlIGFkZHJlc3MgY291bnQg
YW5kIGxpc3QgKi8KLQlpZiAoKGFkZHJjbnQgPD0gMCkgfHwgKGFkZHJzID09IE5VTEwpKSB7Ci0J
CWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogRmlyc3QgcHJlLXNjcmVl
biB0aGUgYWRkcmVzc2VzICovCi0Jc2EgPSBhZGRyczsKLQlmb3IgKGkgPSAwOyBpIDwgYWRkcmNu
dDsgaSsrKSB7Ci0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2Fz
ZSBBRl9JTkVUOgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2EtPnNhX2xlbiAhPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewotCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCXJldHVy
biAoLTEpOwotCQkJfQotI2VuZGlmCi0JCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7
Ci0JCQlpZiAoc2luLT5zaW5fcG9ydCkgewotCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9y
IHNhdmUgKi8KLQkJCQlpZiAoc3BvcnQpIHsKLQkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9y
dCAqLwotCQkJCQlpZiAoc3BvcnQgIT0gc2luLT5zaW5fcG9ydCkgewotCQkJCQkJZXJybm8gPSBF
SU5WQUw7Ci0JCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8q
IHNhdmUgb2ZmIHRoZSBwb3J0ICovCi0JCQkJCXNwb3J0ID0gc2luLT5zaW5fcG9ydDsKLQkJCQl9
Ci0JCQl9Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiko
KGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0jZW5kaWYKLQkJCWJy
ZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLSNpZmRlZiBIQVZF
X1NBX0xFTgotCQkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0jZW5kaWYK
LQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQkJaWYgKHNpbjYtPnNpbjZf
cG9ydCkgewotCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9yIHNhdmUgKi8KLQkJCQlpZiAo
c3BvcnQpIHsKLQkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9ydCAqLwotCQkJCQlpZiAoc3Bv
cnQgIT0gc2luNi0+c2luNl9wb3J0KSB7Ci0JCQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQkJCXJl
dHVybiAoLTEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyogc2F2ZSBvZmYgdGhlIHBv
cnQgKi8KLQkJCQkJc3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCQkJfQotCQkJfQotI2lmbmRl
ZiBIQVZFX1NBX0xFTgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0jZW5kaWYK
LQkJZGVmYXVsdDoKLQkJCS8qIEludmFsaWQgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWVkLiAqLwot
CQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotI2lmZGVmIEhB
VkVfU0FfTEVOCi0JCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5z
YV9sZW4pOwotI2VuZGlmCi0JfQotCWFyZ3N6ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJl
c3NlcykgKwotCSAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKLQlpZiAo
KGdhZGRycyA9IChzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKiltYWxsb2MoYXJnc3opKSA9PSBO
VUxMKSB7Ci0JCWVycm5vID0gRU5PTUVNOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jc2EgPSBhZGRy
czsKLQlmb3IgKGkgPSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7Ci0jaWZuZGVmIEhBVkVfU0FfTEVO
Ci0JCXNpemVfdCBzYV9sZW47Ci0jZW5kaWYKLQkJbWVtc2V0KGdhZGRycywgMCwgYXJnc3opOwot
CQlnYWRkcnMtPnNnZXRfYXNzb2NfaWQgPSAwOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCW1lbWNw
eShnYWRkcnMtPmFkZHIsIHNhLCBzYS0+c2FfbGVuKTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCi0JCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKLQkJCXN3aXRj
aCAoZ2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lO
RVQ6Ci0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsKLQkJCQlz
aW4tPnNpbl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgot
CQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilnYWRk
cnMtPmFkZHI7Ci0JCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5k
aWYKLQkJCX0KLQkJfQotI2VuZGlmCi0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJP
VE9fU0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgewotCQkJZnJl
ZShnYWRkcnMpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJc2EgPSAoc3RydWN0IHNvY2thZGRy
ICopKChjYWRkcl90KXNhICsgc2EtPnNhX2xlbik7Ci0jZWxzZQotCQlzd2l0Y2ggKHNhLT5zYV9m
YW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJCXNhX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgot
CQljYXNlIEFGX0lORVQ2OgotCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXNhX2xlbiA9IDA7Ci0JCQlicmVh
azsKLQkJfQotCQltZW1jcHkoZ2FkZHJzLT5hZGRyLCBzYSwgc2FfbGVuKTsKLQkJLyoKLQkJICog
Tm93LCBpZiB0aGVyZSB3YXMgYSBwb3J0IG1lbnRpb25lZCwgYXNzdXJlIHRoYXQgdGhlCi0JCSAq
IGZpcnN0IGFkZHJlc3MgaGFzIHRoYXQgcG9ydCB0byBtYWtlIHN1cmUgaXQgZmFpbHMgb3IKLQkJ
ICogc3VjY2VlZHMgY29ycmVjdGx5LgotCQkgKi8KLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmlu
ZWQoSU5FVDYpCi0JCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKLQkJCXN3aXRjaCAo
Z2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6
Ci0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsKLQkJCQlzaW4t
PnNpbl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJ
Y2FzZSBBRl9JTkVUNjoKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilnYWRkcnMt
PmFkZHI7Ci0JCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYK
LQkJCX0KLQkJfQotI2VuZGlmCi0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJPVE9f
U0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgewotCQkJZnJlZShn
YWRkcnMpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KXNhICsgc2FfbGVuKTsKLSNlbmRpZgotCX0KLQlmcmVlKGdhZGRycyk7Ci0JcmV0
dXJuICgwKTsKLX0KLQotaW50Ci11c3JzY3RwX2Nvbm5lY3R4KHN0cnVjdCBzb2NrZXQgKnNvLAot
ICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNu
dCwKLSAgICAgICAgICAgICAgICAgc2N0cF9hc3NvY190ICppZCkKLXsKLSNpZiBkZWZpbmVkKElO
RVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JY2hhciBidWZbU0NUUF9TVEFDS19CVUZfU0laRV07Ci0J
aW50IGksIHJldCwgY250LCAqYWE7Ci0JY2hhciAqY3B0bzsKLQljb25zdCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmF0OwotCXNjdHBfYXNzb2NfdCAqcF9pZDsKLQlzaXplX3QgbGVuID0gc2l6ZW9mKGludCk7
Ci0KLQkvKiB2YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlzdCAqLwotCWlmICgoYWRk
cnMgPT0gTlVMTCkgfHwgKGFkZHJjbnQgPD0gMCkpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJl
dHVybiAoLTEpOwotCX0KLQlhdCA9IGFkZHJzOwotCWNudCA9IDA7Ci0JY3B0byA9ICgoY2FkZHJf
dClidWYgKyBzaXplb2YoaW50KSk7Ci0JLyogdmFsaWRhdGUgYWxsIHRoZSBhZGRyZXNzZXMgYW5k
IGdldCB0aGUgc2l6ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsKLQkJc3dp
dGNoIChhdC0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0jaWZk
ZWYgSEFWRV9TQV9MRU4KLQkJCWlmIChhdC0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0j
ZW5kaWYKLQkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwot
CQkJY3B0byA9ICgoY2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwot
CQkJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJYXQgPSAoc3RydWN0IHNv
Y2thZGRyICopKChjYWRkcl90KWF0ICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotI2lmZGVmIEhB
VkVfU0FfTEVOCi0JCQlpZiAoYXQtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
NikpIHsKLQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmKChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopYXQpLT5zaW42X2FkZHIpKSB7Ci0JCQkJaW42X3NpbjZfMl9zaW4oKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKWNwdG8sIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYXQpOwotCQkJCWNw
dG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJCQls
ZW4gKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQl9IGVsc2UgewotCQkJCW1lbWNw
eShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCQljcHRvID0gKChj
YWRkcl90KWNwdG8gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQkJCWxlbiArPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQl9Ci0jZWxzZQotCQkJbWVtY3B5KGNwdG8s
IGF0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQkJY3B0byA9ICgoY2FkZHJfdClj
cHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCWxlbiArPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgo
Y2FkZHJfdClhdCArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCQlicmVhazsKLSNl
bmRpZgotCQlkZWZhdWx0OgotCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJ
fQotCQlpZiAobGVuID4gKHNpemVvZihidWYpIC0gc2l6ZW9mKGludCkpKSB7Ci0JCQkvKiBOZXZl
ciBlbm91Z2ggbWVtb3J5ICovCi0JCQllcnJubyA9IEUyQklHOwotCQkJcmV0dXJuICgtMSk7Ci0J
CX0KLQkJY250Kys7Ci0JfQotCS8qIGRvIHdlIGhhdmUgYW55PyAqLwotCWlmIChjbnQgPT0gMCkg
ewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWFhID0gKGludCAqKWJ1
ZjsKLQkqYWEgPSBjbnQ7Ci0JcmV0ID0gdXNyc2N0cF9zZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1ND
VFAsIFNDVFBfQ09OTkVDVF9YLCAodm9pZCAqKWJ1ZiwgKHNvY2tsZW5fdClsZW4pOwotCWlmICgo
cmV0ID09IDApICYmIGlkKSB7Ci0JCXBfaWQgPSAoc2N0cF9hc3NvY190ICopYnVmOwotCQkqaWQg
PSAqcF9pZDsKLQl9Ci0JcmV0dXJuIChyZXQpOwotI2Vsc2UKLQllcnJubyA9IEVJTlZBTDsKLQly
ZXR1cm4gKC0xKTsKLSNlbmRpZgotfQotCi1pbnQKLXVzcnNjdHBfZ2V0cGFkZHJzKHN0cnVjdCBz
b2NrZXQgKnNvLCBzY3RwX2Fzc29jX3QgaWQsIHN0cnVjdCBzb2NrYWRkciAqKnJhZGRycykKLXsK
LQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKmFkZHJzOwotCXN0cnVjdCBzb2NrYWRkciAqc2E7
Ci0Jc2N0cF9hc3NvY190IGFzb2M7Ci0JY2FkZHJfdCBsaW07Ci0Jc29ja2xlbl90IG9wdF9sZW47
Ci0JaW50IGNudDsKLQotCWlmIChyYWRkcnMgPT0gTlVMTCkgewotCQllcnJubyA9IEVGQVVMVDsK
LQkJcmV0dXJuICgtMSk7Ci0JfQotCWFzb2MgPSBpZDsKLQlvcHRfbGVuID0gKHNvY2tsZW5fdClz
aXplb2Yoc2N0cF9hc3NvY190KTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RP
X1NDVFAsIFNDVFBfR0VUX1JFTU9URV9BRERSX1NJWkUsICZhc29jLCAmb3B0X2xlbikgIT0gMCkg
ewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogc2l6ZSByZXF1aXJlZCBpcyByZXR1cm5lZCBpbiAn
YXNvYycgKi8KLQlvcHRfbGVuID0gKHNvY2tsZW5fdCkoKHNpemVfdClhc29jICsgc2l6ZW9mKHN0
cnVjdCBzY3RwX2dldGFkZHJlc3NlcykpOwotCWFkZHJzID0gY2FsbG9jKDEsIChzaXplX3Qpb3B0
X2xlbik7Ci0JaWYgKGFkZHJzID09IE5VTEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVy
biAoLTEpOwotCX0KLQlhZGRycy0+c2dldF9hc3NvY19pZCA9IGlkOwotCS8qIE5vdyBsZXRzIGdl
dCB0aGUgYXJyYXkgb2YgYWRkcmVzc2VzICovCi0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzbywg
SVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9QRUVSX0FERFJFU1NFUywgYWRkcnMsICZvcHRfbGVuKSAh
PSAwKSB7Ci0JCWZyZWUoYWRkcnMpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JKnJhZGRycyA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmYWRkcnMtPmFkZHJbMF07Ci0JY250ID0gMDsKLQlzYSA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikmYWRkcnMtPmFkZHJbMF07Ci0JbGltID0gKGNhZGRyX3QpYWRkcnMgKyBv
cHRfbGVuOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0Jd2hpbGUgKCgoY2FkZHJfdClzYSA8IGxpbSkg
JiYgKHNhLT5zYV9sZW4gPiAwKSkgewotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRy
X3Qpc2EgKyBzYS0+c2FfbGVuKTsKLSNlbHNlCi0Jd2hpbGUgKChjYWRkcl90KXNhIDwgbGltKSB7
Ci0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVU
OgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNl
IEFGX0lORVQ2OgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWNhc2UgQUZf
Q09OTjoKLQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4g
KGNudCk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0JCWNudCsrOwotCX0KLQlyZXR1cm4gKGNu
dCk7Ci19Ci0KLXZvaWQKLXVzcnNjdHBfZnJlZXBhZGRycyhzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJz
KQotewotCS8qIFRha2UgYXdheSB0aGUgaGlkZGVuIGFzc29jaWF0aW9uIGlkICovCi0Jdm9pZCAq
ZnJfYWRkcjsKLQotCWZyX2FkZHIgPSAodm9pZCAqKSgoY2FkZHJfdClhZGRycyAtIHNpemVvZihz
Y3RwX2Fzc29jX3QpKTsKLQkvKiBOb3cgZnJlZSBpdCAqLwotCWZyZWUoZnJfYWRkcik7Ci19Ci0K
LWludAotdXNyc2N0cF9nZXRsYWRkcnMoc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBp
ZCwgc3RydWN0IHNvY2thZGRyICoqcmFkZHJzKQotewotCXN0cnVjdCBzY3RwX2dldGFkZHJlc3Nl
cyAqYWRkcnM7Ci0JY2FkZHJfdCBsaW07Ci0Jc3RydWN0IHNvY2thZGRyICpzYTsKLQlzaXplX3Qg
c2l6ZV9vZl9hZGRyZXNzZXM7Ci0Jc29ja2xlbl90IG9wdF9sZW47Ci0JaW50IGNudDsKLQotCWlm
IChyYWRkcnMgPT0gTlVMTCkgewotCQllcnJubyA9IEVGQVVMVDsKLQkJcmV0dXJuICgtMSk7Ci0J
fQotCXNpemVfb2ZfYWRkcmVzc2VzID0gMDsKLQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2Yo
aW50KTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VU
X0xPQ0FMX0FERFJfU0laRSwgJnNpemVfb2ZfYWRkcmVzc2VzLCAmb3B0X2xlbikgIT0gMCkgewot
CQllcnJubyA9IEVOT01FTTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChzaXplX29mX2FkZHJl
c3NlcyA9PSAwKSB7Ci0JCWVycm5vID0gRU5PVENPTk47Ci0JCXJldHVybiAoLTEpOwotCX0KLQlv
cHRfbGVuID0gKHNvY2tsZW5fdCkoc2l6ZV9vZl9hZGRyZXNzZXMgKwotCSAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpICsKLQkgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykpOwotCWFkZHJzID0gY2Fs
bG9jKDEsIChzaXplX3Qpb3B0X2xlbik7Ci0JaWYgKGFkZHJzID09IE5VTEwpIHsKLQkJZXJybm8g
PSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQlhZGRycy0+c2dldF9hc3NvY19pZCA9IGlk
OwotCS8qIE5vdyBsZXRzIGdldCB0aGUgYXJyYXkgb2YgYWRkcmVzc2VzICovCi0JaWYgKHVzcnNj
dHBfZ2V0c29ja29wdChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9MT0NBTF9BRERSRVNTRVMs
IGFkZHJzLCAmb3B0X2xlbikgIT0gMCkgewotCQlmcmVlKGFkZHJzKTsKLQkJZXJybm8gPSBFTk9N
RU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqcmFkZHJzID0gKHN0cnVjdCBzb2NrYWRkciAqKSZh
ZGRycy0+YWRkclswXTsKLQljbnQgPSAwOwotCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy
cy0+YWRkclswXTsKLQlsaW0gPSAoY2FkZHJfdClhZGRycyArIG9wdF9sZW47Ci0jaWZkZWYgSEFW
RV9TQV9MRU4KLQl3aGlsZSAoKChjYWRkcl90KXNhIDwgbGltKSAmJiAoc2EtPnNhX2xlbiA+IDAp
KSB7Ci0JCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5zYV9sZW4p
OwotI2Vsc2UKLQl3aGlsZSAoKGNhZGRyX3Qpc2EgPCBsaW0pIHsKLQkJc3dpdGNoIChzYS0+c2Ff
ZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlzYSA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0J
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlzYSA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05OOgotCQkJc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoY250KTsKLQkJCWJyZWFrOwot
CQl9Ci0jZW5kaWYKLQkJY250Kys7Ci0JfQotCXJldHVybiAoY250KTsKLX0KLQotdm9pZAotdXNy
c2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMpCi17Ci0JLyogVGFrZSBhd2F5
IHRoZSBoaWRkZW4gYXNzb2NpYXRpb24gaWQgKi8KLQl2b2lkICpmcl9hZGRyOwotCi0JZnJfYWRk
ciA9ICh2b2lkICopKChjYWRkcl90KWFkZHJzIC0gc2l6ZW9mKHNjdHBfYXNzb2NfdCkpOwotCS8q
IE5vdyBmcmVlIGl0ICovCi0JZnJlZShmcl9hZGRyKTsKLX0KLQotI2lmZGVmIElORVQKLXZvaWQK
LXNjdHBfdXNlcnNwYWNlX2lwX291dHB1dChpbnQgKnJlc3VsdCwgc3RydWN0IG1idWYgKm9fcGFr
LAotICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcm91dGVfdCAqcm8sIHZvaWQgKnN0Y2Is
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBt
YnVmICptOwotCXN0cnVjdCBtYnVmICptX29yaWc7Ci0JaW50IGlvdmNudDsKLQlpbnQgc2VuZF9s
ZW47Ci0JaW50IGxlbjsKLQlpbnQgc2VuZF9jb3VudDsKLQlzdHJ1Y3QgaXAgKmlwOwotCXN0cnVj
dCB1ZHBoZHIgKnVkcDsKLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlp
bnQgcmVzOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyX2luIGRzdDsKLSNpZiBkZWZpbmVkIChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCVdTQU1TRyB3aW5fbXNnX2hkcjsKLQlEV09SRCB3aW5f
c2VudF9sZW47Ci0JV1NBQlVGIHNlbmRfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOwotCVdTQUJV
RiB3aW5idWY7Ci0jZWxzZQotCXN0cnVjdCBpb3ZlYyBzZW5kX2lvdmVjW01BWExFTl9NQlVGX0NI
QUlOXTsKLQlzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7Ci0jZW5kaWYKLQlpbnQgdXNlX3VkcF90dW5u
ZWxpbmc7Ci0KLQkqcmVzdWx0ID0gMDsKLQotCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTihvX3Bh
ayk7Ci0JbV9vcmlnID0gbTsKLQotCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXApOwotCWlmIChTQ1RQ
X0JVRl9MRU4obSkgPCBsZW4pIHsKLQkJaWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkgPT0gMCkg
ewotCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBJUCBoZWFkZXIgaW4gdGhlIGZpcnN0
IG1idWYuXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpcCA9IG10b2QobSwgc3RydWN0IGlw
ICopOwotCXVzZV91ZHBfdHVubmVsaW5nID0gKGlwLT5pcF9wID09IElQUFJPVE9fVURQKTsKLQot
CWlmICh1c2VfdWRwX3R1bm5lbGluZykgewotCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwKSArIHNp
emVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikgewotCQkJ
aWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkgPT0gMCkgewotCQkJCVNDVFBfUFJJTlRGKCJDYW4g
bm90IGdldCB0aGUgVURQL0lQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOwotCQkJCXJl
dHVybjsKLQkJCX0KLQkJCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7Ci0JCX0KLQkJdWRwID0g
KHN0cnVjdCB1ZHBoZHIgKikoaXAgKyAxKTsKLQl9IGVsc2UgewotCQl1ZHAgPSBOVUxMOwotCX0K
LQotCWlmICghdXNlX3VkcF90dW5uZWxpbmcpIHsKLQkJaWYgKGlwLT5pcF9zcmMuc19hZGRyID09
IElOQUREUl9BTlkpIHsKLQkJCS8qIFRPRE8gZ2V0IGFkZHIgb2Ygb3V0Z29pbmcgaW50ZXJmYWNl
ICovCi0JCQlTQ1RQX1BSSU5URigiV2h5IGRpZCB0aGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBkaWQg
bm90IGNob29zZSBhIHNvdXJjZSBhZGRyZXNzP1xuIik7Ci0JCX0KLQkJLyogVE9ETyBuZWVkIHRv
IHdvcnJ5IGFib3V0IHJvLT5yb19kc3QgYXMgaW4gaXBfb3V0cHV0PyAqLwotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
IHx8IChkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpICYmIChfX0ZyZWVCU0RfdmVyc2lv
biA+PSAxMTAwMDMwKSkKLQkJLyogbmVlZCB0byBwdXQgY2VydGFpbiBmaWVsZHMgaW50byBuZXR3
b3JrIG9yZGVyIGZvciBMaW51eCAqLwotCQlpcC0+aXBfbGVuID0gaHRvbnMoaXAtPmlwX2xlbik7
Ci0JCWlwLT5pcF9vZmYgPSAwOwotI2VuZGlmCi0JfQotCi0JbWVtc2V0KCh2b2lkICopJmRzdCwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKLQlkc3Quc2luX2FkZHIuc19hZGRyID0gaXAtPmlwX2RzdC5zX2FkZHI7Ci0jaWZkZWYgSEFW
RV9TSU5fTEVOCi0JZHN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNl
bmRpZgotCWlmICh1c2VfdWRwX3R1bm5lbGluZykgewotCQlkc3Quc2luX3BvcnQgPSB1ZHAtPnVo
X2Rwb3J0OwotCX0gZWxzZSB7Ci0JCWRzdC5zaW5fcG9ydCA9IDA7Ci0JfQotCi0JLyogdHdlYWsg
dGhlIG1idWYgY2hhaW4gKi8KLQlpZiAodXNlX3VkcF90dW5uZWxpbmcpIHsKLQkJbV9hZGoobSwg
c2l6ZW9mKHN0cnVjdCBpcCkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwotCX0KLQotCXNlbmRf
bGVuID0gU0NUUF9IRUFERVJfTEVOKG0pOyAvKiBsZW5ndGggb2YgZW50aXJlIHBhY2tldCAqLwot
CXNlbmRfY291bnQgPSAwOwotCWZvciAoaW92Y250ID0gMDsgbSAhPSBOVUxMICYmIGlvdmNudCA8
IE1BWExFTl9NQlVGX0NIQUlOOyBtID0gbS0+bV9uZXh0LCBpb3ZjbnQrKykgewotI2lmICFkZWZp
bmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlzZW5kX2lvdmVjW2lvdmNudF0uaW92X2Jh
c2UgPSAoY2FkZHJfdCltLT5tX2RhdGE7Ci0JCXNlbmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuID0g
U0NUUF9CVUZfTEVOKG0pOwotCQlzZW5kX2NvdW50ICs9IHNlbmRfaW92ZWNbaW92Y250XS5pb3Zf
bGVuOwotI2Vsc2UKLQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmJ1ZiA9IChjYWRkcl90KW0tPm1fZGF0
YTsKLQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbiA9IFNDVFBfQlVGX0xFTihtKTsKLQkJc2VuZF9j
b3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0ubGVuOwotI2VuZGlmCi0JfQotCi0JaWYgKG0gIT0g
TlVMTCkgewotCQlTQ1RQX1BSSU5URigibWJ1ZiBjaGFpbiBjb3VsZG4ndCBiZSBjb3BpZWQgY29t
cGxldGVseVxuIik7Ci0JCWdvdG8gZnJlZV9tYnVmOwotCX0KLQotI2lmICFkZWZpbmVkIChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQotCW1zZ19oZHIubXNnX25hbWUgPSAoc3RydWN0IHNvY2thZGRy
ICopICZkc3Q7Ci0JbXNnX2hkci5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOwotCW1zZ19oZHIubXNnX2lvdiA9IHNlbmRfaW92ZWM7Ci0JbXNnX2hkci5tc2dfaW92bGVu
ID0gaW92Y250OwotCW1zZ19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZ19oZHIubXNnX2Nv
bnRyb2xsZW4gPSAwOwotCW1zZ19oZHIubXNnX2ZsYWdzID0gMDsKLQotCWlmICgoIXVzZV91ZHBf
dHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgIT0gLTEpKSB7
Ci0JCWlmICgocmVzID0gc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwg
Jm1zZ19oZHIsIE1TR19ET05UV0FJVCkpICE9IHNlbmRfbGVuKSB7Ci0JCQkqcmVzdWx0ID0gZXJy
bm87Ci0JCX0KLQl9Ci0JaWYgKCh1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSkgewotCQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBz
ZW5kX2xlbikgewotCQkJKnJlc3VsdCA9IGVycm5vOwotCQl9Ci0JfQotI2Vsc2UKLQl3aW5fbXNn
X2hkci5uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmZHN0OwotCXdpbl9tc2dfaGRyLm5hbWVs
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQl3aW5fbXNnX2hkci5scEJ1ZmZlcnMg
PSAoTFBXU0FCVUYpc2VuZF9pb3ZlYzsKLQl3aW5fbXNnX2hkci5kd0J1ZmZlckNvdW50ID0gaW92
Y250OwotCXdpbmJ1Zi5sZW4gPSAwOwotCXdpbmJ1Zi5idWYgPSBOVUxMOwotCXdpbl9tc2dfaGRy
LkNvbnRyb2wgPSB3aW5idWY7Ci0Jd2luX21zZ19oZHIuZHdGbGFncyA9IDA7Ci0KLQlpZiAoKCF1
c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApICE9
IC0xKSkgewotCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
LCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9zZW50X2xlbiwgd2luX21zZ19o
ZHIuZHdGbGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2luX21zZ19oZHIubmFtZWxlbiwg
TlVMTCwgTlVMTCkgIT0gMCkgewotCQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOwotCQl9
IGVsc2UgaWYgKHdpbl9zZW50X2xlbiAhPSBzZW5kX2xlbikgewotCQkJKnJlc3VsdCA9IFdTQUdl
dExhc3RFcnJvcigpOwotCQl9Ci0JfQotCWlmICgodXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSAhPSAtMSkpIHsKLQkJaWYgKFdTQVNlbmRUbyhT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgKExQV1NBQlVGKSBzZW5kX2lvdmVjLCBp
b3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2dfaGRyLm5h
bWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsKLQkJCSpy
ZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfSBlbHNlIGlmICh3aW5fc2VudF9sZW4gIT0g
c2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfQotCX0KLSNl
bmRpZgotZnJlZV9tYnVmOgotCXNjdHBfbV9mcmVlbShtX29yaWcpOwotfQotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkIChJTkVUNikKLXZvaWQgc2N0cF91c2Vyc3BhY2VfaXA2X291dHB1dChpbnQgKnJl
c3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgcm91dGVfaW42ICpybywgdm9pZCAqc3RjYiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQotewot
CXN0cnVjdCBtYnVmICptOwotCXN0cnVjdCBtYnVmICptX29yaWc7Ci0JaW50IGlvdmNudDsKLQlp
bnQgc2VuZF9sZW47Ci0JaW50IGxlbjsKLQlpbnQgc2VuZF9jb3VudDsKLQlzdHJ1Y3QgaXA2X2hk
ciAqaXA2OwotCXN0cnVjdCB1ZHBoZHIgKnVkcDsKLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLQlpbnQgcmVzOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyX2luNiBkc3Q7
Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlXU0FNU0cgd2luX21zZ19o
ZHI7Ci0JRFdPUkQgd2luX3NlbnRfbGVuOwotCVdTQUJVRiBzZW5kX2lvdmVjW01BWExFTl9NQlVG
X0NIQUlOXTsKLQlXU0FCVUYgd2luYnVmOwotI2Vsc2UKLQlzdHJ1Y3QgaW92ZWMgc2VuZF9pb3Zl
Y1tNQVhMRU5fTUJVRl9DSEFJTl07Ci0Jc3RydWN0IG1zZ2hkciBtc2dfaGRyOwotI2VuZGlmCi0J
aW50IHVzZV91ZHBfdHVubmVsaW5nOwotCi0JKnJlc3VsdCA9IDA7Ci0KLQltID0gU0NUUF9IRUFE
RVJfVE9fQ0hBSU4ob19wYWspOwotCW1fb3JpZyA9IG07Ci0KLQlsZW4gPSBzaXplb2Yoc3RydWN0
IGlwNl9oZHIpOwotCi0JaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikgewotCQlpZiAoKG0gPSBt
X3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7Ci0JCQlTQ1RQX1BSSU5URigiQ2FuIG5vdCBnZXQgdGhl
IElQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQot
Ci0JaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKLQl1c2VfdWRwX3R1bm5lbGluZyA9
IChpcDYtPmlwNl9ueHQgPT0gSVBQUk9UT19VRFApOwotCi0JaWYgKHVzZV91ZHBfdHVubmVsaW5n
KSB7Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhk
cik7Ci0JCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsKLQkJCWlmICgobSA9IG1fcHVsbHVw
KG0sIGxlbikpID09IDApIHsKLQkJCQlTQ1RQX1BSSU5URigiQ2FuIG5vdCBnZXQgdGhlIFVEUC9J
UCBoZWFkZXIgaW4gdGhlIGZpcnN0IG1idWYuXG4iKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlp
cDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRyICopOwotCQl9Ci0JCXVkcCA9IChzdHJ1Y3QgdWRw
aGRyICopKGlwNiArIDEpOwotCX0gZWxzZSB7Ci0JCXVkcCA9IE5VTEw7Ci0JfQotCi0JaWYgKCF1
c2VfdWRwX3R1bm5lbGluZykgewotCQlpZiAoaXA2LT5pcDZfc3JjLnM2X2FkZHIgPT0gaW42YWRk
cl9hbnkuczZfYWRkcikgewotCQkJLyogVE9ETyBnZXQgYWRkciBvZiBvdXRnb2luZyBpbnRlcmZh
Y2UgKi8KLQkJCVNDVFBfUFJJTlRGKCJXaHkgZGlkIHRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGRp
ZCBub3QgY2hvb3NlIGEgc291cmNlIGFkZHJlc3M/XG4iKTsKLQkJfQotCQkvKiBUT0RPIG5lZWQg
dG8gd29ycnkgYWJvdXQgcm8tPnJvX2RzdCBhcyBpbiBpcF9vdXRwdXQ/ICovCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLQkJLyogbmVlZCB0byBwdXQgY2VydGFpbiBmaWVsZHMgaW50byBuZXR3b3JrIG9yZGVyIGZv
ciBMaW51eCAqLwotCQlpcDYtPmlwNl9wbGVuID0gaHRvbnMoaXA2LT5pcDZfcGxlbik7Ci0jZW5k
aWYKLQl9Ci0KLQltZW1zZXQoKHZvaWQgKikmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOwotCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCWRzdC5zaW42X2FkZHIgPSBp
cDYtPmlwNl9kc3Q7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCWRzdC5zaW42X2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCi0JaWYgKHVzZV91ZHBfdHVubmVsaW5n
KSB7Ci0JCWRzdC5zaW42X3BvcnQgPSB1ZHAtPnVoX2Rwb3J0OwotCX0gZWxzZSB7Ci0JCWRzdC5z
aW42X3BvcnQgPSAwOwotCX0KLQotCS8qIHR3ZWFrIHRoZSBtYnVmIGNoYWluICovCi0JaWYgKHVz
ZV91ZHBfdHVubmVsaW5nKSB7Ci0JCW1fYWRqKG0sIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikgKyBz
aXplb2Yoc3RydWN0IHVkcGhkcikpOwotCX0gZWxzZSB7Ci0JICBtX2FkaihtLCBzaXplb2Yoc3Ry
dWN0IGlwNl9oZHIpKTsKLQl9Ci0KLQlzZW5kX2xlbiA9IFNDVFBfSEVBREVSX0xFTihtKTsgLyog
bGVuZ3RoIG9mIGVudGlyZSBwYWNrZXQgKi8KLQlzZW5kX2NvdW50ID0gMDsKLQlmb3IgKGlvdmNu
dCA9IDA7IG0gIT0gTlVMTCAmJiBpb3ZjbnQgPCBNQVhMRU5fTUJVRl9DSEFJTjsgbSA9IG0tPm1f
bmV4dCwgaW92Y250KyspIHsKLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmlvdl9iYXNlID0gKGNhZGRyX3QpbS0+bV9kYXRhOwotCQlz
ZW5kX2lvdmVjW2lvdmNudF0uaW92X2xlbiA9IFNDVFBfQlVGX0xFTihtKTsKLQkJc2VuZF9jb3Vu
dCArPSBzZW5kX2lvdmVjW2lvdmNudF0uaW92X2xlbjsKLSNlbHNlCi0JCXNlbmRfaW92ZWNbaW92
Y250XS5idWYgPSAoY2FkZHJfdCltLT5tX2RhdGE7Ci0JCXNlbmRfaW92ZWNbaW92Y250XS5sZW4g
PSBTQ1RQX0JVRl9MRU4obSk7Ci0JCXNlbmRfY291bnQgKz0gc2VuZF9pb3ZlY1tpb3ZjbnRdLmxl
bjsKLSNlbmRpZgotCX0KLQlpZiAobSAhPSBOVUxMKSB7Ci0JCVNDVFBfUFJJTlRGKCJtYnVmIGNo
YWluIGNvdWxkbid0IGJlIGNvcGllZCBjb21wbGV0ZWx5XG4iKTsKLQkJZ290byBmcmVlX21idWY7
Ci0JfQotCi0jaWYgIWRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JbXNnX2hkci5t
c2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRzdDsKLQltc2dfaGRyLm1zZ19uYW1lbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCW1zZ19oZHIubXNnX2lvdiA9IHNlbmRf
aW92ZWM7Ci0JbXNnX2hkci5tc2dfaW92bGVuID0gaW92Y250OwotCW1zZ19oZHIubXNnX2NvbnRy
b2wgPSBOVUxMOwotCW1zZ19oZHIubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZ19oZHIubXNnX2Zs
YWdzID0gMDsKLQotCWlmICgoIXVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSkgewotCQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAmbXNnX2hkciwgTVNHX0RPTlRXQUlUKSkgIT0g
c2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBlcnJubzsKLQkJfQotCX0KLQlpZiAoKHVzZV91ZHBf
dHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpICE9IC0xKSkg
ewotCQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYp
LCAmbXNnX2hkciwgTVNHX0RPTlRXQUlUKSkgIT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBl
cnJubzsKLQkJfQotCX0KLSNlbHNlCi0Jd2luX21zZ19oZHIubmFtZSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikgJmRzdDsKLQl3aW5fbXNnX2hkci5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOwotCXdpbl9tc2dfaGRyLmxwQnVmZmVycyA9IChMUFdTQUJVRilzZW5kX2lvdmVjOwot
CXdpbl9tc2dfaGRyLmR3QnVmZmVyQ291bnQgPSBpb3ZjbnQ7Ci0Jd2luYnVmLmxlbiA9IDA7Ci0J
d2luYnVmLmJ1ZiA9IE5VTEw7Ci0Jd2luX21zZ19oZHIuQ29udHJvbCA9IHdpbmJ1ZjsKLQl3aW5f
bXNnX2hkci5kd0ZsYWdzID0gMDsKLQotCWlmICgoIXVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSkgewotCQlpZiAoV1NBU2VuZFRv
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKExQV1NBQlVGKSBzZW5kX2lvdmVj
LCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2dfaGRy
Lm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsKLQkJ
CSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfSBlbHNlIGlmICh3aW5fc2VudF9sZW4g
IT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfQotCX0K
LQlpZiAoKHVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cDYpICE9IC0xKSkgewotCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3VkcHNjdHA2KSwgKExQV1NBQlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4s
IHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRy
Lm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJy
b3IoKTsKLQkJfSBlbHNlIGlmICh3aW5fc2VudF9sZW4gIT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1
bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfQotCX0KLSNlbmRpZgotZnJlZV9tYnVmOgotCXNj
dHBfbV9mcmVlbShtX29yaWcpOwotfQotI2VuZGlmCi0KLXZvaWQKLXVzcnNjdHBfcmVnaXN0ZXJf
YWRkcmVzcyh2b2lkICphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotCi0J
bWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4u
c2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNj
b25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5z
Y29ubl9wb3J0ID0gMDsKLQlzY29ubi5zY29ubl9hZGRyID0gYWRkcjsKLQlzY3RwX2FkZF9hZGRy
X3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsCi0JICAgICAgICAgICAgICAgICAgICAgTlVMTCwK
LQkgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotCSAgICAgICAgICAgICAgICAgICAg
IDAsCi0JICAgICAgICAgICAgICAgICAgICAgImNvbm4iLAotCSAgICAgICAgICAgICAgICAgICAg
IE5VTEwsCi0JICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwK
LQkgICAgICAgICAgICAgICAgICAgICAwLAotCSAgICAgICAgICAgICAgICAgICAgIDApOwotfQot
Ci12b2lkCi11c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyh2b2lkICphZGRyKQotewotCXN0cnVj
dCBzb2NrYWRkcl9jb25uIHNjb25uOwotCi0JbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRl
ZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29ubl9wb3J0ID0gMDsKLQlzY29ubi5zY29ubl9h
ZGRyID0gYWRkcjsKLQlzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKFNDVFBfREVGQVVMVF9WUkZJRCwK
LQkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sCi0JICAg
ICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotCSAgICAgICAgICAgICAgICAgICAgICAg
ImNvbm4iKTsKLX0KLQotI2RlZmluZSBQUkVBTUJMRV9GT1JNQVQgIlxuJWMgJTAyZDolMDJkOiUw
MmQuJTA2bGQgIgotI2RlZmluZSBQUkVBTUJMRV9MRU5HVEggMTkKLSNkZWZpbmUgSEVBREVSICIw
MDAwICIKLSNkZWZpbmUgVFJBSUxFUiAiIyBTQ1RQX1BBQ0tFVFxuIgotCi1jaGFyICoKLXVzcnNj
dHBfZHVtcHBhY2tldChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4sIGludCBvdXRib3VuZCkK
LXsKLQlzaXplX3QgaSwgcG9zOwotCWNoYXIgKmR1bXBfYnVmLCAqcGFja2V0OwotI2lmZGVmIF9X
SU4zMgotCXN0cnVjdCB0aW1lYiB0YjsKLQlzdHJ1Y3QgdG0gdDsKLSNlbHNlCi0Jc3RydWN0IHRp
bWV2YWwgdHY7Ci0Jc3RydWN0IHRtICp0OwotCXRpbWVfdCBzZWM7Ci0jZW5kaWYKLQotCWlmICgo
bGVuID09IDApIHx8IChidWYgPT0gTlVMTCkpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYg
KChkdW1wX2J1ZiA9IG1hbGxvYyhQUkVBTUJMRV9MRU5HVEggKyBzdHJsZW4oSEVBREVSKSArIDMg
KiBsZW4gKyBzdHJsZW4oVFJBSUxFUikgKyAxKSkgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQlwb3MgPSAwOwotI2lmZGVmIF9XSU4zMgotCWZ0aW1lKCZ0Yik7Ci0JbG9jYWx0aW1l
X3MoJnQsICZ0Yi50aW1lKTsKLQlfc25wcmludGZfcyhkdW1wX2J1ZiwgUFJFQU1CTEVfTEVOR1RI
ICsgMSwgUFJFQU1CTEVfTEVOR1RILCBQUkVBTUJMRV9GT1JNQVQsCi0JICAgICAgICAgICAgb3V0
Ym91bmQgPyAnTycgOiAnSScsCi0JICAgICAgICAgICAgdC50bV9ob3VyLCB0LnRtX21pbiwgdC50
bV9zZWMsIChsb25nKSgxMDAwICogdGIubWlsbGl0bSkpOwotI2Vsc2UKLQlnZXR0aW1lb2ZkYXko
JnR2LCBOVUxMKTsKLQlzZWMgPSAodGltZV90KXR2LnR2X3NlYzsKLQl0ID0gbG9jYWx0aW1lKChj
b25zdCB0aW1lX3QgKikmc2VjKTsKLQlzbnByaW50ZihkdW1wX2J1ZiwgUFJFQU1CTEVfTEVOR1RI
ICsgMSwgUFJFQU1CTEVfRk9STUFULAotCSAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAot
CSAgICAgICAgIHQtPnRtX2hvdXIsIHQtPnRtX21pbiwgdC0+dG1fc2VjLCAobG9uZyl0di50dl91
c2VjKTsKLSNlbmRpZgotCXBvcyArPSBQUkVBTUJMRV9MRU5HVEg7Ci0jaWZkZWYgX1dJTjMyCi0J
c3RybmNweV9zKGR1bXBfYnVmICsgcG9zLCBzdHJsZW4oSEVBREVSKSArIDEsIEhFQURFUiwgc3Ry
bGVuKEhFQURFUikpOwotI2Vsc2UKLQlzdHJjcHkoZHVtcF9idWYgKyBwb3MsIEhFQURFUik7Ci0j
ZW5kaWYKLQlwb3MgKz0gc3RybGVuKEhFQURFUik7Ci0JcGFja2V0ID0gKGNoYXIgKilidWY7Ci0J
Zm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXVpbnQ4X3QgYnl0ZSwgbG93LCBoaWdoOwot
Ci0JCWJ5dGUgPSAodWludDhfdClwYWNrZXRbaV07Ci0JCWhpZ2ggPSBieXRlIC8gMTY7Ci0JCWxv
dyA9IGJ5dGUgJSAxNjsKLQkJZHVtcF9idWZbcG9zKytdID0gaGlnaCA8IDEwID8gJzAnICsgaGln
aCA6ICdhJyArIChoaWdoIC0gMTApOwotCQlkdW1wX2J1Zltwb3MrK10gPSBsb3cgPCAxMCA/ICcw
JyArIGxvdyA6ICdhJyArIChsb3cgLSAxMCk7Ci0JCWR1bXBfYnVmW3BvcysrXSA9ICcgJzsKLQl9
Ci0jaWZkZWYgX1dJTjMyCi0Jc3RybmNweV9zKGR1bXBfYnVmICsgcG9zLCBzdHJsZW4oVFJBSUxF
UikgKyAxLCBUUkFJTEVSLCBzdHJsZW4oVFJBSUxFUikpOwotI2Vsc2UKLQlzdHJjcHkoZHVtcF9i
dWYgKyBwb3MsIFRSQUlMRVIpOwotI2VuZGlmCi0JcG9zICs9IHN0cmxlbihUUkFJTEVSKTsKLQlk
dW1wX2J1Zltwb3MrK10gPSAnXDAnOwotCXJldHVybiAoZHVtcF9idWYpOwotfQotCi12b2lkCi11
c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGNoYXIgKmJ1ZikKLXsKLQlmcmVlKGJ1Zik7Ci19Ci0KLXZv
aWQKLXVzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKHZvaWQpCi17Ci0JU0NUUF9CQVNFX1ZB
UihjcmMzMmNfb2ZmbG9hZGVkKSA9IDE7Ci19Ci0KLXZvaWQKLXVzcnNjdHBfZGlzYWJsZV9jcmMz
MmNfb2ZmbG9hZCh2b2lkKQotewotCVNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPSAw
OwotfQotCi0vKiBDb21wdXRlIHRoZSBDUkMzMkMgaW4gbmV0d29yayBieXRlIG9yZGVyICovCi11
aW50MzJfdAotdXNyc2N0cF9jcmMzMmModm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQotewot
CXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOwotCi0JYmFzZSA9IGNhbGN1bGF0ZV9jcmMzMmMo
MHhmZmZmZmZmZiwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsICh1bnNpZ25lZCBpbnQpIGxlbmd0
aCk7Ci0JYmFzZSA9IHNjdHBfZmluYWxpemVfY3JjMzJjKGJhc2UpOwotCXJldHVybiAoYmFzZSk7
Ci19Ci0KLXZvaWQKLXVzcnNjdHBfY29ubmlucHV0KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKmJ1
ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCBlY25fYml0cykKLXsKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiBzcmMsIGRzdDsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2g7
Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVj
dnBhY2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMpOwot
CW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQlzcmMuc2Nv
bm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNyYy5zY29ubl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0Jc3JjLnNjb25uX2Fk
ZHIgPSBhZGRyOwotCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
KTsKLQlkc3Quc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgot
CWRzdC5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0J
ZHN0LnNjb25uX2FkZHIgPSBhZGRyOwotCWlmICgobSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZygo
dW5zaWduZWQgaW50KWxlbmd0aCwgMSwgTV9OT1dBSVQsIDAsIE1UX0RBVEEpKSA9PSBOVUxMKSB7
Ci0JCXJldHVybjsKLQl9Ci0JbV9jb3B5YmFjayhtLCAwLCAoaW50KWxlbmd0aCwgKGNhZGRyX3Qp
YnVmZmVyKTsKLQlpZiAoU0NUUF9CVUZfTEVOKG0pIDwgKGludCkoc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpKSB7Ci0JCWlmICgobSA9IG1fcHVs
bHVwKG0sIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmto
ZHIpKSkgPT0gTlVMTCkgewotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKLQkJCXJl
dHVybjsKLQkJfQotCX0KLQlzaCA9IG10b2QobSwgc3RydWN0IHNjdHBoZHIgKik7OwotCWNoID0g
KHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSk7Ci0Jc3JjLnNjb25uX3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0JZHN0LnNjb25uX3BvcnQg
PSBzaC0+ZGVzdF9wb3J0OwotCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJm0sIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cGhkciksIChpbnQpbGVuZ3RoLAotCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKLQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0g
MSA/IDAgOiAxLAotI2VuZGlmCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY25fYml0
cywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJRCwgMCk7
Ci0JaWYgKG0pIHsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCX0KLQlyZXR1cm47Ci19Ci0KLQotI2Rl
ZmluZSBVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKF9fZmllbGQpIFwKLXZvaWQgdXNyc2N0cF9zeXNj
dGxfc2V0XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKSB7IFwKLQlTQ1RQX0JBU0VfU1lTQ1RM
KF9fZmllbGQpID0gdmFsdWU7IFwKLX0KLQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3Nl
bmRzcGFjZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9yZWN2c3BhY2UpCi1VU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfYXV0b19hc2NvbmYpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVG
KHNjdHBfbXVsdGlwbGVfYXNjb25mcykKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9lY25f
ZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3ByX2VuYWJsZSkKLVVTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9hdXRoX2VuYWJsZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYo
c2N0cF9hc2NvbmZfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3JlY29uZmln
X2VuYWJsZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ucnNhY2tfZW5hYmxlKQotVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BrdGRyb3BfZW5hYmxlKQotI2lmICFkZWZpbmVkKFND
VFBfV0lUSF9OT19DU1VNKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25vX2NzdW1fb25f
bG9vcGJhY2spCi0jZW5kaWYKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wZWVyX2NodW5r
X29oKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21heF9idXJzdF9kZWZhdWx0KQotVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21heF9jaHVua3Nfb25fcXVldWUpCi1VU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfaGFzaHRibHNpemUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfcGNidGJsc2l6ZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9taW5fc3BsaXRfcG9p
bnQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfY2h1bmtzY2FsZSkKLVVTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0KQotVVNSU0NUUF9TWVND
VExfU0VUX0RFRihzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaGVh
cnRiZWF0X2ludGVydmFsX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcG10
dV9yYWlzZV90aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfc2h1dGRv
d25fZ3VhcmRfdGltZV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3NlY3Jl
dF9saWZldGltZV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0b19tYXhf
ZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ydG9fbWluX2RlZmF1bHQpCi1V
U1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCkKLVVTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0
cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hZGRf
bW9yZV90aHJlc2hvbGQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbnJfaW5jb21pbmdf
c3RyZWFtc19kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25yX291dGdvaW5n
X3N0cmVhbXNfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9jbXRfb25fb2Zm
KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2NtdF91c2VfZGFjKQotVVNSU0NUUF9TWVND
VExfU0VUX0RFRihzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KQotVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX25hdF9mcmllbmRseSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9M
Ml9hYmNfdmFyaWFibGUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWJ1Zl90aHJlc2hv
bGRfY291bnQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZG9fZHJhaW4pCi1VU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfaGJfbWF4YnVyc3QpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVG
KHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfbWluX3Jlc2lkdWFsKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21heF9y
ZXRyYW5fY2h1bmspCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbG9nZ2luZ19sZXZlbCkK
LVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X2NjX21vZHVsZSkKLVVTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSkKLVVTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9tb2JpbGl0eV9iYXNlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2lu
aXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3Vk
cF90dW5uZWxpbmdfcG9ydCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9lbmFibGVfc2Fj
a19pbW1lZGlhdGVseSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF92dGFnX3RpbWVfd2Fp
dCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ibGFja2hvbGUpCi1VU1JTQ1RQX1NZU0NU
TF9TRVRfREVGKHNjdHBfZGlhZ19pbmZvX2NvZGUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcGF0
aF9wZl90aHJlc2hvbGQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVmYXVsdF9zc19t
b2R1bGUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0dmFyX2J3KQotVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX3J0dHZhcl9ydHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfcnR0dmFyX2VxcmV0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3N0ZWFkeV9zdGVw
KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VzZV9kY2NjX2VjbikKLVVTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9idWZmZXJfc3BsaXR0aW5nKQotVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX2luaXRpYWxfY3duZCkKLSNpZmRlZiBTQ1RQX0RFQlVHCi1VU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfZGVidWdfb24pCi0jZW5kaWYKLQotI2RlZmluZSBVU1JTQ1RQX1NZU0NUTF9H
RVRfREVGKF9fZmllbGQpIFwKLXVpbnQzMl90IHVzcnNjdHBfc3lzY3RsX2dldF8gIyMgX19maWVs
ZCh2b2lkKSB7IFwKLQlyZXR1cm4gU0NUUF9CQVNFX1NZU0NUTChfX2ZpZWxkKTsgXAotfQotCi1V
U1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2VuZHNwYWNlKQotVVNSU0NUUF9TWVNDVExfR0VU
X0RFRihzY3RwX3JlY3ZzcGFjZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hdXRvX2Fz
Y29uZikKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tdWx0aXBsZV9hc2NvbmZzKQotVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2Vjbl9lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfcHJfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2F1dGhfZW5h
YmxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2FzY29uZl9lbmFibGUpCi1VU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfcmVjb25maWdfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfR0VU
X0RFRihzY3RwX25yc2Fja19lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcGt0
ZHJvcF9lbmFibGUpCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi1VU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykKLSNlbmRpZgotVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX3BlZXJfY2h1bmtfb2gpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4
X2NodW5rc19vbl9xdWV1ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oYXNodGJsc2l6
ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wY2J0YmxzaXplKQotVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX21pbl9zcGxpdF9wb2ludCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYo
c2N0cF9jaHVua3NjYWxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlbGF5ZWRfc2Fj
a190aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2Fja19mcmVxX2Rl
ZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1p
dCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCkKLVVT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkKLVVT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkKLVVTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpCi1VU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCi1VU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfcnRvX21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VU
X0RFRihzY3RwX3J0b19taW5fZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9y
dG9faW5pdGlhbF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2luaXRfcnRv
X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3ZhbGlkX2Nvb2tpZV9s
aWZlX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdF9ydHhfbWF4X2Rl
ZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0
KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0KQotVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkKLVVTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpCi1VU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KQotVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX2NtdF9vbl9vZmYpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNj
dHBfY210X3VzZV9kYWMpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdXNlX2N3bmRfYmFz
ZWRfbWF4YnVyc3QpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbmF0X2ZyaWVuZGx5KQot
VVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX0wyX2FiY192YXJpYWJsZSkKLVVTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKLVVTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9kb19kcmFpbikKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oYl9tYXhi
dXJzdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0
c19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9taW5fcmVzaWR1YWwpCi1VU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4X3JldHJhbl9jaHVuaykKLVVTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9sb2dnaW5nX2xldmVsKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X2RlZmF1bHRfY2NfbW9kdWxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlZmF1bHRf
ZnJhZ19pbnRlcmxlYXZlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX21vYmlsaXR5X2Jh
c2UpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpCi1V
U1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpCi1V
U1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KQotVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5KQotVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX3Z0YWdfdGltZV93YWl0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX2JsYWNraG9sZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kaWFnX2luZm9fY29k
ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkKLVVT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkKLVVTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9ydHR2YXJfYncpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcnR0dmFyX3J0
dCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfZXFyZXQpCi1VU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfc3RlYWR5X3N0ZXApCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNj
dHBfdXNlX2RjY2NfZWNuKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2J1ZmZlcl9zcGxp
dHRpbmcpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdGlhbF9jd25kKQotI2lmZGVm
IFNDVFBfREVCVUcKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kZWJ1Z19vbikKLSNlbmRp
ZgotCi12b2lkIHVzcnNjdHBfZ2V0X3N0YXQoc3RydWN0IHNjdHBzdGF0ICpzdGF0KQotewotCSpz
dGF0ID0gU0NUUF9CQVNFX1NUQVRTOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9zb2Nr
ZXR2YXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGZmYzgyNzBlZmRhNDZmOGJjYzk5ZTliNTE4NDI2NWYwNjhmMjljOTQuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9z
b2NrZXR2YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBACi0vKi0KLSAqIENvcHly
aWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MCwgMTk5MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVu
aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0g
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0vKiBfX1VzZXJzcGFjZV9fIHZlcnNpb24g
b2YgPHN5cy9zb2NrZXR2YXIuaD4gZ29lcyBoZXJlLiovCi0KLSNpZm5kZWYgX1VTRVJfU09DS0VU
VkFSX0hfCi0jZGVmaW5lIF9VU0VSX1NPQ0tFVFZBUl9IXwotCi0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19EYXJ3aW4pCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0jZW5kaWYKLQotLyogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+ICovIC8qX19Vc2Vyc3Bh
Y2VfXyBhbHRlcm5hdGl2ZT8qLwkvKiBmb3Igc3RydWN0IHNlbGluZm8gKi8KLS8qICNpbmNsdWRl
IDxzeXMvX2xvY2suaD4gIHdhcyAwIGJ5dGUgZmlsZSAqLwotLyogI2luY2x1ZGUgPHN5cy9fbXV0
ZXguaD4gd2FzIDAgYnl0ZSBmaWxlICovCi0vKiAjaW5jbHVkZSA8c3lzL19zeC5oPiAqLyAvKl9f
VXNlcnNwYWNlX18gYWx0ZXJuYXRpdmU/Ki8KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19E
cmFnb25GbHkpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX05ldEJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLSNpbmNsdWRlIDxzeXMvdWlvLmg+
Ci0jZW5kaWYKLSNkZWZpbmUgU09DS19NQVhBRERSTEVOIDI1NQotI2lmICFkZWZpbmVkKE1TR19O
T1RJRklDQVRJT04pCi0jZGVmaW5lIE1TR19OT1RJRklDQVRJT04gMHgyMDAwICAgICAgICAgLyog
U0NUUCBub3RpZmljYXRpb24gKi8KLSNlbmRpZgotI2RlZmluZSBTQ1RQX1NPX0xJTkdFUiAgICAg
MHgwMDAxCi0jZGVmaW5lIFNDVFBfU09fQUNDRVBUQ09OTiAweDAwMDIKLSNkZWZpbmUgU1NfQ0FO
VFJDVk1PUkUgMHgwMjAKLSNkZWZpbmUgU1NfQ0FOVFNFTkRNT1JFIDB4MDEwCi0KLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFn
b25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19PcGVuQlNEKSB8fCBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wpCi0jZGVmaW5lIFVJT19NQVhJT1YgMTAyNAot
I2RlZmluZSBFUkVTVEFSVCAoLTEpCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX0RhcndpbikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19PcGVuQlNEKQotZW51bQl1aW9fcncgeyBVSU9fUkVBRCwgVUlPX1dS
SVRFIH07Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05ldEJTRCkgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkKLS8qIFNlZ21lbnQgZmxhZyB2YWx1ZXMu
ICovCi1lbnVtIHVpb19zZWcgewotCVVJT19VU0VSU1BBQ0UsCQkvKiBmcm9tIHVzZXIgZGF0YSBz
cGFjZSAqLwotCVVJT19TWVNTUEFDRQkJLyogZnJvbSBzeXN0ZW0gc3BhY2UgKi8KLX07Ci0jZW5k
aWYKLQotc3RydWN0IHByb2MgewotICAgIGludCBzdHViOyAvKiBzdHJ1Y3QgcHJvYyBpcyBhIGR1
bW15IGZvciBfX1VzZXJzcGFjZV9fICovCi19OwotCi1NQUxMT0NfREVDTEFSRShNX0FDQ0YpOwot
TUFMTE9DX0RFQ0xBUkUoTV9QQ0IpOwotTUFMTE9DX0RFQ0xBUkUoTV9TT05BTUUpOwotCi0vKiBf
X1VzZXJzcGFjZV9fIEFyZSB0aGVzZSBhbGwgdGhlIGZpZWxkcyB3ZSBuZWVkPwotICogUmVtb3Zp
bmcgc3RydWN0IHRocmVhZCAqdWlvX3RkOyAgICBvd25lciBmaWVsZAotKi8KLXN0cnVjdCB1aW8g
ewotICAgIHN0cnVjdAlpb3ZlYyAqdWlvX2lvdjsJCS8qIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgKi8K
LSAgICBpbnQJCXVpb19pb3ZjbnQ7CQkvKiBsZW5ndGggb2Ygc2NhdHRlci9nYXRoZXIgbGlzdCAq
LwotICAgIG9mZl90CXVpb19vZmZzZXQ7CQkvKiBvZmZzZXQgaW4gdGFyZ2V0IG9iamVjdCAqLwot
ICAgIHNzaXplX3QgCXVpb19yZXNpZDsJCS8qIHJlbWFpbmluZyBieXRlcyB0byBwcm9jZXNzICov
Ci0gICAgZW51bQl1aW9fc2VnIHVpb19zZWdmbGc7CS8qIGFkZHJlc3Mgc3BhY2UgKi8KLSAgICBl
bnVtCXVpb19ydyB1aW9fcnc7CQkvKiBvcGVyYXRpb24gKi8KLX07Ci0KLQotLyogX19Vc2Vyc3Bh
Y2VfXyAqLwotCi0vKgotICogS2VybmVsIHN0cnVjdHVyZSBwZXIgc29ja2V0LgotICogQ29udGFp
bnMgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLAotICogaGFuZGxlIG9uIHByb3RvY29s
IGFuZCBwb2ludGVyIHRvIHByb3RvY29sCi0gKiBwcml2YXRlIGRhdGEgYW5kIGVycm9yIGluZm9y
bWF0aW9uLgotICovCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZp
bmUgQUZfUk9VVEUgIDE3Ci10eXBlZGVmIF9faW50MzIgcGlkX3Q7Ci10eXBlZGVmIHVuc2lnbmVk
IF9faW50MzIgdWlkX3Q7Ci1lbnVtIHNpZ1R5cGUgewotCVNJR05BTCA9IDAsCi0JQlJPQURDQVNU
ID0gMSwKLQlNQVhfRVZFTlRTID0gMgotfTsKLSNlbmRpZgotCi0vKi0KLSAqIExvY2tpbmcga2V5
IHRvIHN0cnVjdCBzb2NrZXQ6Ci0gKiAoYSkgY29uc3RhbnQgYWZ0ZXIgYWxsb2NhdGlvbiwgbm8g
bG9ja2luZyByZXF1aXJlZC4KLSAqIChiKSBsb2NrZWQgYnkgU09DS19MT0NLKHNvKS4KLSAqIChj
KSBsb2NrZWQgYnkgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KS4KLSAqIChkKSBsb2NrZWQgYnkg
U09DS0JVRl9MT0NLKCZzby0+c29fc25kKS4KLSAqIChlKSBsb2NrZWQgYnkgQUNDRVBUX0xPQ0so
KS4KLSAqIChmKSBub3QgbG9ja2VkIHNpbmNlIGludGVnZXIgcmVhZHMvd3JpdGVzIGFyZSBhdG9t
aWMuCi0gKiAoZykgdXNlZCBvbmx5IGFzIGEgc2xlZXAvd2FrZXVwIGFkZHJlc3MsIG5vIHZhbHVl
LgotICogKGgpIGxvY2tlZCBieSBnbG9iYWwgbXV0ZXggc29fZ2xvYmFsX210eC4KLSAqLwotc3Ry
dWN0IHNvY2tldCB7Ci0JaW50CXNvX2NvdW50OwkJLyogKGIpIHJlZmVyZW5jZSBjb3VudCAqLwot
CXNob3J0CXNvX3R5cGU7CQkvKiAoYSkgZ2VuZXJpYyB0eXBlLCBzZWUgc29ja2V0LmggKi8KLQlz
aG9ydAlzb19vcHRpb25zOwkJLyogZnJvbSBzb2NrZXQgY2FsbCwgc2VlIHNvY2tldC5oICovCi0J
c2hvcnQJc29fbGluZ2VyOwkJLyogdGltZSB0byBsaW5nZXIgd2hpbGUgY2xvc2luZyAqLwotCXNo
b3J0CXNvX3N0YXRlOwkJLyogKGIpIGludGVybmFsIHN0YXRlIGZsYWdzIFNTXyogKi8KLQlpbnQJ
c29fcXN0YXRlOwkJLyogKGUpIGludGVybmFsIHN0YXRlIGZsYWdzIFNRXyogKi8KLQl2b2lkCSpz
b19wY2I7CQkvKiBwcm90b2NvbCBjb250cm9sIGJsb2NrICovCi0JaW50CXNvX2RvbTsKLS8qCi0g
KiBWYXJpYWJsZXMgZm9yIGNvbm5lY3Rpb24gcXVldWluZy4KLSAqIFNvY2tldCB3aGVyZSBhY2Nl
cHRzIG9jY3VyIGlzIHNvX2hlYWQgaW4gYWxsIHN1YnNpZGlhcnkgc29ja2V0cy4KLSAqIElmIHNv
X2hlYWQgaXMgMCwgc29ja2V0IGlzIG5vdCByZWxhdGVkIHRvIGFuIGFjY2VwdC4KLSAqIEZvciBo
ZWFkIHNvY2tldCBzb19pbmNvbXAgcXVldWVzIHBhcnRpYWxseSBjb21wbGV0ZWQgY29ubmVjdGlv
bnMsCi0gKiB3aGlsZSBzb19jb21wIGlzIGEgcXVldWUgb2YgY29ubmVjdGlvbnMgcmVhZHkgdG8g
YmUgYWNjZXB0ZWQuCi0gKiBJZiBhIGNvbm5lY3Rpb24gaXMgYWJvcnRlZCBhbmQgaXQgaGFzIHNv
X2hlYWQgc2V0LCB0aGVuCi0gKiBpdCBoYXMgdG8gYmUgcHVsbGVkIG91dCBvZiBlaXRoZXIgc29f
aW5jb21wIG9yIHNvX2NvbXAuCi0gKiBXZSBhbGxvdyBjb25uZWN0aW9ucyB0byBxdWV1ZSB1cCBi
YXNlZCBvbiBjdXJyZW50IHF1ZXVlIGxlbmd0aHMKLSAqIGFuZCBsaW1pdCBvbiBudW1iZXIgb2Yg
cXVldWVkIGNvbm5lY3Rpb25zIGZvciB0aGlzIHNvY2tldC4KLSAqLwotCXN0cnVjdAlzb2NrZXQg
KnNvX2hlYWQ7CS8qIChlKSBiYWNrIHBvaW50ZXIgdG8gbGlzdGVuIHNvY2tldCAqLwotCVRBSUxR
X0hFQUQoLCBzb2NrZXQpIHNvX2luY29tcDsJLyogKGUpIHF1ZXVlIG9mIHBhcnRpYWwgdW5hY2Nl
cHRlZCBjb25uZWN0aW9ucyAqLwotCVRBSUxRX0hFQUQoLCBzb2NrZXQpIHNvX2NvbXA7CS8qIChl
KSBxdWV1ZSBvZiBjb21wbGV0ZSB1bmFjY2VwdGVkIGNvbm5lY3Rpb25zICovCi0JVEFJTFFfRU5U
Ulkoc29ja2V0KSBzb19saXN0OwkvKiAoZSkgbGlzdCBvZiB1bmFjY2VwdGVkIGNvbm5lY3Rpb25z
ICovCi0JdV9zaG9ydAlzb19xbGVuOwkJLyogKGUpIG51bWJlciBvZiB1bmFjY2VwdGVkIGNvbm5l
Y3Rpb25zICovCi0JdV9zaG9ydAlzb19pbmNxbGVuOwkJLyogKGUpIG51bWJlciBvZiB1bmFjY2Vw
dGVkIGluY29tcGxldGUKLQkJCQkJICAgY29ubmVjdGlvbnMgKi8KLQl1X3Nob3J0CXNvX3FsaW1p
dDsJCS8qIChlKSBtYXggbnVtYmVyIHF1ZXVlZCBjb25uZWN0aW9ucyAqLwotCXNob3J0CXNvX3Rp
bWVvOwkJLyogKGcpIGNvbm5lY3Rpb24gdGltZW91dCAqLwotCXVzZXJsYW5kX2NvbmRfdCB0aW1l
b19jb25kOyAgICAgIC8qIHRpbWVvX2NvbmQgY29uZGl0aW9uIHZhcmlhYmxlIGJlaW5nIHVzZWQg
aW4gd2FrZXVwICovCi0KLQl1X3Nob3J0CXNvX2Vycm9yOwkJLyogKGYpIGVycm9yIGFmZmVjdGlu
ZyBjb25uZWN0aW9uICovCi0Jc3RydWN0CXNpZ2lvICpzb19zaWdpbzsJLyogW3NnXSBpbmZvcm1h
dGlvbiBmb3IgYXN5bmMgSS9PIG9yCi0JCQkJCSAgIG91dCBvZiBiYW5kIGRhdGEgKFNJR1VSRykg
Ki8KLQl1X2xvbmcJc29fb29ibWFyazsJCS8qIChjKSBjaGFycyB0byBvb2IgbWFyayAqLwotCVRB
SUxRX0hFQUQoLCBhaW9jYmxpc3QpIHNvX2Fpb2pvYnE7IC8qIEFJTyBvcHMgd2FpdGluZyBvbiBz
b2NrZXQgKi8KLS8qCi0gKiBWYXJpYWJsZXMgZm9yIHNvY2tldCBidWZmZXJpbmcuCi0gKi8KLQlz
dHJ1Y3Qgc29ja2J1ZiB7Ci0JCS8qIF9fVXNlcnNwYWNlX18gTWFueSBvZiB0aGVzZSBmaWVsZHMg
bWF5Ci0JCSAqIG5vdCBiZSByZXF1aXJlZCBmb3IgdGhlIHNjdHAgc3RhY2suCi0JCSAqIENvbW1l
bnRpbmcgb3V0IHRoZSBmb2xsb3dpbmcuCi0JCSAqIEluY2x1ZGluZyBwdGhyZWFkIG11dGV4IGFu
ZCBjb25kaXRpb24gdmFyaWFibGUgdG8gYmUKLQkJICogdXNlZCBieSBzYndhaXQsIHNvcndha2V1
cCBhbmQgc293d2FrZXVwLgotCQkqLwotCQkvKiBzdHJ1Y3QJc2VsaW5mbyBzYl9zZWw7Ki8gLyog
cHJvY2VzcyBzZWxlY3RpbmcgcmVhZC93cml0ZSAqLwotCQkvKiBzdHJ1Y3QJbXR4IHNiX210eDsq
LwkvKiBzb2NrYnVmIGxvY2sgKi8KLQkJLyogc3RydWN0CXN4IHNiX3N4OyovCS8qIHByZXZlbnQg
SS9PIGludGVybGFjaW5nICovCi0JCXVzZXJsYW5kX2NvbmRfdCBzYl9jb25kOyAvKiBzb2NrYnVm
IGNvbmRpdGlvbiB2YXJpYWJsZSAqLwotCQl1c2VybGFuZF9tdXRleF90IHNiX210eDsgLyogc29j
a2J1ZiBsb2NrIGFzc29jaWF0ZWQgd2l0aCBzYl9jb25kICovCi0JCXNob3J0CXNiX3N0YXRlOwkv
KiAoYy9kKSBzb2NrZXQgc3RhdGUgb24gc29ja2J1ZiAqLwotI2RlZmluZQlzYl9zdGFydHplcm8J
c2JfbWIKLQkJc3RydWN0CW1idWYgKnNiX21iOwkvKiAoYy9kKSB0aGUgbWJ1ZiBjaGFpbiAqLwot
CQlzdHJ1Y3QJbWJ1ZiAqc2JfbWJ0YWlsOyAvKiAoYy9kKSB0aGUgbGFzdCBtYnVmIGluIHRoZSBj
aGFpbiAqLwotCQlzdHJ1Y3QJbWJ1ZiAqc2JfbGFzdHJlY29yZDsJLyogKGMvZCkgZmlyc3QgbWJ1
ZiBvZiBsYXN0Ci0JCQkJCQkgKiByZWNvcmQgaW4gc29ja2V0IGJ1ZmZlciAqLwotCQlzdHJ1Y3QJ
bWJ1ZiAqc2Jfc25kcHRyOyAvKiAoYy9kKSBwb2ludGVyIGludG8gbWJ1ZiBjaGFpbiAqLwotCQl1
X2ludAlzYl9zbmRwdHJvZmY7CS8qIChjL2QpIGJ5dGUgb2Zmc2V0IG9mIHB0ciBpbnRvIGNoYWlu
ICovCi0JCXVfaW50CXNiX2NjOwkJLyogKGMvZCkgYWN0dWFsIGNoYXJzIGluIGJ1ZmZlciAqLwot
CQl1X2ludAlzYl9oaXdhdDsJLyogKGMvZCkgbWF4IGFjdHVhbCBjaGFyIGNvdW50ICovCi0JCXVf
aW50CXNiX21iY250OwkvKiAoYy9kKSBjaGFycyBvZiBtYnVmcyB1c2VkICovCi0JCXVfaW50CXNi
X21ibWF4OwkvKiAoYy9kKSBtYXggY2hhcnMgb2YgbWJ1ZnMgdG8gdXNlICovCi0JCXVfaW50CXNi
X2N0bDsJCS8qIChjL2QpIG5vbi1kYXRhIGNoYXJzIGluIGJ1ZmZlciAqLwotCQlpbnQJc2JfbG93
YXQ7CS8qIChjL2QpIGxvdyB3YXRlciBtYXJrICovCi0JCWludAlzYl90aW1lbzsJLyogKGMvZCkg
dGltZW91dCBmb3IgcmVhZC93cml0ZSAqLwotCQlzaG9ydAlzYl9mbGFnczsJLyogKGMvZCkgZmxh
Z3MsIHNlZSBiZWxvdyAqLwotCX0gc29fcmN2LCBzb19zbmQ7Ci0vKgotICogQ29uc3RhbnRzIGZv
ciBzYl9mbGFncyBmaWVsZCBvZiBzdHJ1Y3Qgc29ja2J1Zi4KLSAqLwotI2RlZmluZQlTQl9NQVgJ
CSgyNTYqMTAyNCkJLyogZGVmYXVsdCBmb3IgbWF4IGNoYXJzIGluIHNvY2tidWYgKi8KLSNkZWZp
bmUgU0JfUkFXICAgICAgICAgICg2NCoxMDI0KjIpICAgIC8qQWxpZ25pbmcgc28tPnNvX3Jjdi5z
Yl9oaXdhdCB3aXRoIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIG9mIHJhdyBzb2NrZXQqLwotLyoK
LSAqIENvbnN0YW50cyBmb3Igc2JfZmxhZ3MgZmllbGQgb2Ygc3RydWN0IHNvY2tidWYuCi0gKi8K
LSNkZWZpbmUJU0JfV0FJVAkJMHgwNAkJLyogc29tZW9uZSBpcyB3YWl0aW5nIGZvciBkYXRhL3Nw
YWNlICovCi0jZGVmaW5lCVNCX1NFTAkJMHgwOAkJLyogc29tZW9uZSBpcyBzZWxlY3RpbmcgKi8K
LSNkZWZpbmUJU0JfQVNZTkMJMHgxMAkJLyogQVNZTkMgSS9PLCBuZWVkIHNpZ25hbHMgKi8KLSNk
ZWZpbmUJU0JfVVBDQUxMCTB4MjAJCS8qIHNvbWVvbmUgd2FudHMgYW4gdXBjYWxsICovCi0jZGVm
aW5lCVNCX05PSU5UUgkweDQwCQkvKiBvcGVyYXRpb25zIG5vdCBpbnRlcnJ1cHRpYmxlICovCi0j
ZGVmaW5lCVNCX0FJTwkJMHg4MAkJLyogQUlPIG9wZXJhdGlvbnMgcXVldWVkICovCi0jZGVmaW5l
CVNCX0tOT1RFCTB4MTAwCQkvKiBrZXJuZWwgbm90ZSBhdHRhY2hlZCAqLwotI2RlZmluZQlTQl9B
VVRPU0laRQkweDgwMAkJLyogYXV0b21hdGljYWxseSBzaXplIHNvY2tldCBidWZmZXIgKi8KLQot
CXZvaWQJKCpzb191cGNhbGwpKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAqLCBpbnQpOwotCXZvaWQJ
KnNvX3VwY2FsbGFyZzsKLQlzdHJ1Y3QJdWNyZWQgKnNvX2NyZWQ7CQkvKiAoYSkgdXNlciBjcmVk
ZW50aWFscyAqLwotCXN0cnVjdAlsYWJlbCAqc29fbGFiZWw7CS8qIChiKSBNQUMgbGFiZWwgZm9y
IHNvY2tldCAqLwotCXN0cnVjdAlsYWJlbCAqc29fcGVlcmxhYmVsOwkvKiAoYikgY2FjaGVkIE1B
QyBsYWJlbCBmb3IgcGVlciAqLwotCS8qIE5COiBnZW5lcmF0aW9uIGNvdW50IG11c3Qgbm90IGJl
IGZpcnN0LiAqLwotCXVpbnQzMl90IHNvX2dlbmNudDsJCS8qIChoKSBnZW5lcmF0aW9uIGNvdW50
ICovCi0Jdm9pZAkqc29fZW11bGRhdGE7CQkvKiAoYikgcHJpdmF0ZSBkYXRhIGZvciBlbXVsYXRv
cnMgKi8KLSAJc3RydWN0IHNvX2FjY2YgewotCQlzdHJ1Y3QJYWNjZXB0X2ZpbHRlciAqc29fYWNj
ZXB0X2ZpbHRlcjsKLQkJdm9pZAkqc29fYWNjZXB0X2ZpbHRlcl9hcmc7CS8qIHNhdmVkIGZpbHRl
ciBhcmdzICovCi0JCWNoYXIJKnNvX2FjY2VwdF9maWx0ZXJfc3RyOwkvKiBzYXZlZCB1c2VyIGFy
Z3MgKi8KLQl9ICpzb19hY2NmOwotfTsKLQotI2RlZmluZSBTQl9FTVBUWV9GSVhVUChzYikgZG8g
ewkJCQkJCVwKLQlpZiAoKHNiKS0+c2JfbWIgPT0gTlVMTCkgewkJCQkJXAotCQkoc2IpLT5zYl9t
YnRhaWwgPSBOVUxMOwkJCQkJXAotCQkoc2IpLT5zYl9sYXN0cmVjb3JkID0gTlVMTDsJCQkJXAot
CX0JCQkJCQkJCVwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0vKgotICogR2xvYmFsIGFj
Y2VwdCBtdXRleCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIGFjY2VwdCBxdWV1ZXMgYW5kCi0gKiBm
aWVsZHMgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIHNvY2tldHMuICBUaGlzIGFsbG93cyB1cyB0
bwotICogYXZvaWQgZGVmaW5pbmcgYSBsb2NrIG9yZGVyIGJldHdlZW4gbGlzdGVuIGFuZCBhY2Nl
cHQgc29ja2V0cwotICogdW50aWwgc3VjaCB0aW1lIGFzIGl0IHByb3ZlcyB0byBiZSBhIGdvb2Qg
aWRlYS4KLSAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLWV4dGVybiB1
c2VybGFuZF9tdXRleF90IGFjY2VwdF9tdHg7Ci1leHRlcm4gdXNlcmxhbmRfY29uZF90IGFjY2Vw
dF9jb25kOwotI2RlZmluZSBBQ0NFUFRfTE9DS19BU1NFUlQoKQotI2RlZmluZQlBQ0NFUFRfTE9D
SygpIGRvIHsgXAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZhY2NlcHRfbXR4KTsgXAotfSB3aGls
ZSAoMCkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DSygpCWRvIHsgXAotCUxlYXZlQ3JpdGljYWxTZWN0
aW9uKCZhY2NlcHRfbXR4KTsgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DS19B
U1NFUlQoKQotI2Vsc2UKLWV4dGVybiB1c2VybGFuZF9tdXRleF90IGFjY2VwdF9tdHg7Ci0KLWV4
dGVybiB1c2VybGFuZF9jb25kX3QgYWNjZXB0X2NvbmQ7Ci0jaWZkZWYgSU5WQVJJQU5UUwotI2Rl
ZmluZQlBQ0NFUFRfTE9DSygpCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZhY2NlcHRfbXR4
KSA9PSAwLCAoIiVzOiBhY2NlcHRfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQotI2Rl
ZmluZQlBQ0NFUFRfVU5MT0NLKCkJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmYWNjZXB0
X210eCkgPT0gMCwgKCIlczogYWNjZXB0X210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQotI2Vs
c2UKLSNkZWZpbmUJQUNDRVBUX0xPQ0soKSAgICh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmYWNj
ZXB0X210eCkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DSygpICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZhY2NlcHRfbXR4KQotI2VuZGlmCi0jZGVmaW5lCUFDQ0VQVF9MT0NLX0FTU0VSVCgpIFwK
LSAgICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygmYWNjZXB0X210eCkgPT0g
RUJVU1ksICgiJXM6IGFjY2VwdF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKLSNkZWZpbmUJ
QUNDRVBUX1VOTE9DS19BU1NFUlQoKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgS0FTU0VSVChwdGhyZWFkX211
dGV4X3RyeWxvY2soJmFjY2VwdF9tdHgpID09IDAsICgiJXM6IGFjY2VwdF9tdHggIGxvY2tlZCIs
IF9fZnVuY19fKSk7IFwKLQkgICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhY2NlcHRfbXR4
KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg
ICAgIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyoKLSAqIFBlci1zb2NrZXQgYnVmZmVyIG11dGV4
IHVzZWQgdG8gcHJvdGVjdCBtb3N0IGZpZWxkcyBpbiB0aGUgc29ja2V0Ci0gKiBidWZmZXIuCi0g
Ki8KLSNkZWZpbmUJU09DS0JVRl9NVFgoX3NiKSAoJihfc2IpLT5zYl9tdHgpCi0jaWYgZGVmaW5l
ZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU09DS0JVRl9MT0NLX0lOSVQoX3Ni
LCBfbmFtZSkgXAotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oU09DS0JVRl9NVFgoX3NiKSkK
LSNkZWZpbmUgU09DS0JVRl9MT0NLX0RFU1RST1koX3NiKSBEZWxldGVDcml0aWNhbFNlY3Rpb24o
U09DS0JVRl9NVFgoX3NiKSkKLSNkZWZpbmUgU09DS0JVRl9DT05EX0lOSVQoX3NiKSBJbml0aWFs
aXplQ29uZGl0aW9uVmFyaWFibGUoKCYoX3NiKS0+c2JfY29uZCkpCi0jZGVmaW5lIFNPQ0tCVUZf
Q09ORF9ERVNUUk9ZKF9zYikgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUoKCYoX3NiKS0+c2JfY29u
ZCkpCi0jZGVmaW5lIFNPQ0tfQ09ORF9JTklUKF9zbykgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlh
YmxlKCgmKF9zbyktPnRpbWVvX2NvbmQpKQotI2RlZmluZSBTT0NLX0NPTkRfREVTVFJPWShfc28p
IERlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zbyktPnRpbWVvX2NvbmQpKQotI2RlZmluZSBT
T0NLX0NPTkQoX3NvKSAoJihfc28pLT50aW1lb19jb25kKQotI2Vsc2UKLSNpZmRlZiBJTlZBUklB
TlRTCi0jZGVmaW5lIFNPQ0tCVUZfTE9DS19JTklUKF9zYiwgX25hbWUpIGRvIHsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0JcHRocmVhZF9tdXRleGF0dHJfdCBtdXRleF9hdHRy
OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXB0
aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0JcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVB
RF9NVVRFWF9FUlJPUkNIRUNLKTsgIFwKLQlwdGhyZWFkX211dGV4X2luaXQoU09DS0JVRl9NVFgo
X3NiKSwgJm11dGV4X2F0dHIpOyAgICAgICAgICAgICAgICAgXAotCXB0aHJlYWRfbXV0ZXhhdHRy
X2Rlc3Ryb3koJm11dGV4X2F0dHIpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19IHdo
aWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgU09DS0JVRl9MT0NLX0lOSVQoX3NiLCBfbmFtZSkgXAot
CXB0aHJlYWRfbXV0ZXhfaW5pdChTT0NLQlVGX01UWChfc2IpLCBOVUxMKQotI2VuZGlmCi0jZGVm
aW5lIFNPQ0tCVUZfTE9DS19ERVNUUk9ZKF9zYikgcHRocmVhZF9tdXRleF9kZXN0cm95KFNPQ0tC
VUZfTVRYKF9zYikpCi0jZGVmaW5lIFNPQ0tCVUZfQ09ORF9JTklUKF9zYikgcHRocmVhZF9jb25k
X2luaXQoKCYoX3NiKS0+c2JfY29uZCksIE5VTEwpCi0jZGVmaW5lIFNPQ0tCVUZfQ09ORF9ERVNU
Uk9ZKF9zYikgcHRocmVhZF9jb25kX2Rlc3Ryb3koKCYoX3NiKS0+c2JfY29uZCkpCi0jZGVmaW5l
IFNPQ0tfQ09ORF9JTklUKF9zbykgcHRocmVhZF9jb25kX2luaXQoKCYoX3NvKS0+dGltZW9fY29u
ZCksIE5VTEwpCi0jZGVmaW5lIFNPQ0tfQ09ORF9ERVNUUk9ZKF9zbykgcHRocmVhZF9jb25kX2Rl
c3Ryb3koKCYoX3NvKS0+dGltZW9fY29uZCkpCi0jZGVmaW5lIFNPQ0tfQ09ORChfc28pICgmKF9z
byktPnRpbWVvX2NvbmQpCi0jZW5kaWYKLS8qX19Vc2Vyc3BhY2VfXyBTT0NLQlVGX0xPQ0soX3Ni
KSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KLQotLyog
I2RlZmluZQlTT0NLQlVGX09XTkVEKF9zYikJCW10eF9vd25lZChTT0NLQlVGX01UWChfc2IpKSB1
bnVzZWQgKi8KLS8qX19Vc2Vyc3BhY2VfXyBTT0NLQlVGX1VOTE9DSyhfc2IpIGlzIG5vdyBkZWZp
bmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLwotCi0vKl9fVXNlcnNwYWNlX18g
U09DS0JVRl9MT0NLX0FTU0VSVChfc2IpIGlzIG5vdyBkZWZpbmVkIGluIG5ldGluZXQvc2N0cF9w
cm9jZXNzX2xvY2suaCAqLwotCi0vKiAjZGVmaW5lCVNPQ0tCVUZfVU5MT0NLX0FTU0VSVChfc2Ip
CW10eF9hc3NlcnQoU09DS0JVRl9NVFgoX3NiKSwgTUFfTk9UT1dORUQpICAgdW51c2VkICovCi0K
LS8qCi0gKiBQZXItc29ja2V0IG11dGV4OiB3ZSByZXVzZSB0aGUgcmVjZWl2ZSBzb2NrZXQgYnVm
ZmVyIG11dGV4IGZvciBzcGFjZQotICogZWZmaWNpZW5jeS4gIFRoaXMgZGVjaXNpb24gc2hvdWxk
IHByb2JhYmx5IGJlIHJldmlzaXRlZCBhcyB3ZSBvcHRpbWl6ZQotICogbG9ja2luZyBmb3IgdGhl
IHNvY2tldCBjb2RlLgotICovCi0jZGVmaW5lCVNPQ0tfTVRYKF9zbykJCQlTT0NLQlVGX01UWCgm
KF9zbyktPnNvX3JjdikKLS8qX19Vc2Vyc3BhY2VfXyBTT0NLX0xPQ0soX3NvKSBpcyBub3cgZGVm
aW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KLQotLyogI2RlZmluZQlTT0NL
X09XTkVEKF9zbykJCQlTT0NLQlVGX09XTkVEKCYoX3NvKS0+c29fcmN2KSB1bnVzZWQgKi8KLS8q
X19Vc2Vyc3BhY2VfXyBTT0NLX1VOTE9DSyhfc28pIGlzIG5vdyBkZWZpbmVkIGluIG5ldGluZXQv
c2N0cF9wcm9jZXNzX2xvY2suaCAqLwotCi0jZGVmaW5lCVNPQ0tfTE9DS19BU1NFUlQoX3NvKQkJ
U09DS0JVRl9MT0NLX0FTU0VSVCgmKF9zbyktPnNvX3JjdikKLQotLyoKLSAqIFNvY2tldCBzdGF0
ZSBiaXRzLgotICoKLSAqIEhpc3RvcmljYWxseSwgdGhpcyBiaXRzIHdlcmUgYWxsIGtlcHQgaW4g
dGhlIHNvX3N0YXRlIGZpZWxkLiAgRm9yCi0gKiBsb2NraW5nIHJlYXNvbnMsIHRoZXkgYXJlIG5v
dyBpbiBtdWx0aXBsZSBmaWVsZHMsIGFzIHRoZXkgYXJlCi0gKiBsb2NrZWQgZGlmZmVyZW50bHku
ICBzb19zdGF0ZSBtYWludGFpbnMgYmFzaWMgc29ja2V0IHN0YXRlIHByb3RlY3RlZAotICogYnkg
dGhlIHNvY2tldCBsb2NrLiAgc29fcXN0YXRlIGhvbGRzIGluZm9ybWF0aW9uIGFib3V0IHRoZSBz
b2NrZXQKLSAqIGFjY2VwdCBxdWV1ZXMuICBFYWNoIHNvY2tldCBidWZmZXIgYWxzbyBoYXMgYSBz
dGF0ZSBmaWVsZCBob2xkaW5nCi0gKiBpbmZvcm1hdGlvbiByZWxldmFudCB0byB0aGF0IHNvY2tl
dCBidWZmZXIgKGNhbid0IHNlbmQsIHJjdikuICBNYW55Ci0gKiBmaWVsZHMgd2lsbCBiZSByZWFk
IHdpdGhvdXQgbG9ja3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWQKLSAqIGxvY2sg
b3JkZXIgaXNzdWVzLiAgSG93ZXZlciwgdGhpcyBhcHByb2FjaCBtdXN0IGJlIHVzZWQgd2l0aCBj
YXV0aW9uLgotICovCi0jZGVmaW5lCVNTX05PRkRSRUYJCTB4MDAwMQkvKiBubyBmaWxlIHRhYmxl
IHJlZiBhbnkgbW9yZSAqLwotI2RlZmluZQlTU19JU0NPTk5FQ1RFRAkJMHgwMDAyCS8qIHNvY2tl
dCBjb25uZWN0ZWQgdG8gYSBwZWVyICovCi0jZGVmaW5lCVNTX0lTQ09OTkVDVElORwkJMHgwMDA0
CS8qIGluIHByb2Nlc3Mgb2YgY29ubmVjdGluZyB0byBwZWVyICovCi0jZGVmaW5lCVNTX0lTRElT
Q09OTkVDVElORwkweDAwMDgJLyogaW4gcHJvY2VzcyBvZiBkaXNjb25uZWN0aW5nICovCi0jZGVm
aW5lCVNTX05CSU8JCQkweDAxMDAJLyogbm9uLWJsb2NraW5nIG9wcyAqLwotI2RlZmluZQlTU19B
U1lOQwkJMHgwMjAwCS8qIGFzeW5jIGkvbyBub3RpZnkgKi8KLSNkZWZpbmUJU1NfSVNDT05GSVJN
SU5HCQkweDA0MDAJLyogZGVjaWRpbmcgdG8gYWNjZXB0IGNvbm5lY3Rpb24gcmVxICovCi0jZGVm
aW5lCVNTX0lTRElTQ09OTkVDVEVECTB4MjAwMAkvKiBzb2NrZXQgZGlzY29ubmVjdGVkIGZyb20g
cGVlciAqLwotLyoKLSAqIFByb3RvY29scyBjYW4gbWFyayBhIHNvY2tldCBhcyBTU19QUk9UT1JF
RiB0byBpbmRpY2F0ZSB0aGF0LCBmb2xsb3dpbmcKLSAqIHBydV9kZXRhY2gsIHRoZXkgc3RpbGwg
d2FudCB0aGUgc29ja2V0IHRvIHBlcnNpc3QsIGFuZCB3aWxsIGZyZWUgaXQKLSAqIHRoZW1zZWx2
ZXMgd2hlbiB0aGV5IGFyZSBkb25lLiAgUHJvdG9jb2xzIHNob3VsZCBvbmx5IGV2ZXIgY2FsbCBz
b2ZyZWUoKQotICogZm9sbG93aW5nIHNldHRpbmcgdGhpcyBmbGFnIGluIHBydV9kZXRhY2goKSwg
YW5kIG5ldmVyIG90aGVyd2lzZSwgYXMKLSAqIHNvZnJlZSgpIGJ5cGFzc2VzIHNvY2tldCByZWZl
cmVuY2UgY291bnRpbmcuCi0gKi8KLSNkZWZpbmUJU1NfUFJPVE9SRUYJCTB4NDAwMAkvKiBzdHJv
bmcgcHJvdG9jb2wgcmVmZXJlbmNlICovCi0KLS8qCi0gKiBTb2NrZXQgc3RhdGUgYml0cyBub3cg
c3RvcmVkIGluIHRoZSBzb2NrZXQgYnVmZmVyIHN0YXRlIGZpZWxkLgotICovCi0jZGVmaW5lCVNC
U19DQU5UU0VORE1PUkUJMHgwMDEwCS8qIGNhbid0IHNlbmQgbW9yZSBkYXRhIHRvIHBlZXIgKi8K
LSNkZWZpbmUJU0JTX0NBTlRSQ1ZNT1JFCQkweDAwMjAJLyogY2FuJ3QgcmVjZWl2ZSBtb3JlIGRh
dGEgZnJvbSBwZWVyICovCi0jZGVmaW5lCVNCU19SQ1ZBVE1BUksJCTB4MDA0MAkvKiBhdCBtYXJr
IG9uIGlucHV0ICovCi0KLS8qCi0gKiBTb2NrZXQgc3RhdGUgYml0cyBzdG9yZWQgaW4gc29fcXN0
YXRlLgotICovCi0jZGVmaW5lCVNRX0lOQ09NUAkJMHgwODAwCS8qIHVuYWNjZXB0ZWQsIGluY29t
cGxldGUgY29ubmVjdGlvbiAqLwotI2RlZmluZQlTUV9DT01QCQkJMHgxMDAwCS8qIHVuYWNjZXB0
ZWQsIGNvbXBsZXRlIGNvbm5lY3Rpb24gKi8KLQotLyoKLSAqIEV4dGVybmFsaXplZCBmb3JtIG9m
IHN0cnVjdCBzb2NrZXQgdXNlZCBieSB0aGUgc3lzY3RsKDMpIGludGVyZmFjZS4KLSAqLwotc3Ry
dWN0IHhzb2NrZXQgewotCXNpemVfdAl4c29fbGVuOwkvKiBsZW5ndGggb2YgdGhpcyBzdHJ1Y3R1
cmUgKi8KLQlzdHJ1Y3QJc29ja2V0ICp4c29fc287CS8qIG1ha2VzIGEgY29udmVuaWVudCBoYW5k
bGUgc29tZXRpbWVzICovCi0Jc2hvcnQJc29fdHlwZTsKLQlzaG9ydAlzb19vcHRpb25zOwotCXNo
b3J0CXNvX2xpbmdlcjsKLQlzaG9ydAlzb19zdGF0ZTsKLQljYWRkcl90CXNvX3BjYjsJCS8qIGFu
b3RoZXIgY29udmVuaWVudCBoYW5kbGUgKi8KLQlpbnQJeHNvX3Byb3RvY29sOwotCWludAl4c29f
ZmFtaWx5OwotCXVfc2hvcnQJc29fcWxlbjsKLQl1X3Nob3J0CXNvX2luY3FsZW47Ci0JdV9zaG9y
dAlzb19xbGltaXQ7Ci0Jc2hvcnQJc29fdGltZW87Ci0JdV9zaG9ydAlzb19lcnJvcjsKLQlwaWRf
dAlzb19wZ2lkOwotCXVfbG9uZwlzb19vb2JtYXJrOwotCXN0cnVjdCB4c29ja2J1ZiB7Ci0JCXVf
aW50CXNiX2NjOwotCQl1X2ludAlzYl9oaXdhdDsKLQkJdV9pbnQJc2JfbWJjbnQ7Ci0JCXVfaW50
CXNiX21ibWF4OwotCQlpbnQJc2JfbG93YXQ7Ci0JCWludAlzYl90aW1lbzsKLQkJc2hvcnQJc2Jf
ZmxhZ3M7Ci0JfSBzb19yY3YsIHNvX3NuZDsKLQl1aWRfdAlzb191aWQ7CQkvKiBYWFggKi8KLX07
Ci0KLSNpZiBkZWZpbmVkKF9LRVJORUwpCi0KLQotLyoKLSAqIE1hY3JvcyBmb3Igc29ja2V0cyBh
bmQgc29ja2V0IGJ1ZmZlcmluZy4KLSAqLwotCi0vKgotICogRG8gd2UgbmVlZCB0byBub3RpZnkg
dGhlIG90aGVyIHNpZGUgd2hlbiBJL08gaXMgcG9zc2libGU/Ci0gKi8KLSNkZWZpbmUJc2Jfbm90
aWZ5KHNiKQkoKChzYiktPnNiX2ZsYWdzICYgKFNCX1dBSVQgfCBTQl9TRUwgfCBTQl9BU1lOQyB8
IFwKLSAgICBTQl9VUENBTEwgfCBTQl9BSU8gfCBTQl9LTk9URSkpICE9IDApCi0KLS8qCi0gKiBI
b3cgbXVjaCBzcGFjZSBpcyB0aGVyZSBpbiBhIHNvY2tldCBidWZmZXIgKHNvLT5zb19zbmQgb3Ig
c28tPnNvX3Jjdik/Ci0gKiBUaGlzIGlzIHByb2JsZW1hdGljYWwgaWYgdGhlIGZpZWxkcyBhcmUg
dW5zaWduZWQsIGFzIHRoZSBzcGFjZSBtaWdodAotICogc3RpbGwgYmUgbmVnYXRpdmUgKGNjID4g
aGl3YXQgb3IgbWJjbnQgPiBtYm1heCkuICBTaG91bGQgZGV0ZWN0Ci0gKiBvdmVyZmxvdyBhbmQg
cmV0dXJuIDAuICBTaG91bGQgdXNlICJsbWluIiBidXQgaXQgZG9lc24ndCBleGlzdCBub3cuCi0g
Ki8KLSNkZWZpbmUJc2JzcGFjZShzYikgXAotICAgICgobG9uZykgaW1pbigoaW50KSgoc2IpLT5z
Yl9oaXdhdCAtIChzYiktPnNiX2NjKSwgXAotCSAoaW50KSgoc2IpLT5zYl9tYm1heCAtIChzYikt
PnNiX21iY250KSkpCi0KLS8qIGRvIHdlIGhhdmUgdG8gc2VuZCBhbGwgYXQgb25jZSBvbiBhIHNv
Y2tldD8gKi8KLSNkZWZpbmUJc29zZW5kYWxsYXRvbmNlKHNvKSBcCi0gICAgKChzbyktPnNvX3By
b3RvLT5wcl9mbGFncyAmIFBSX0FUT01JQykKLQotLyogY2FuIHdlIHJlYWQgc29tZXRoaW5nIGZy
b20gc28/ICovCi0jZGVmaW5lCXNvcmVhZGFibGUoc28pIFwKLSAgICAoKHNvKS0+c29fcmN2LnNi
X2NjID49IChzbyktPnNvX3Jjdi5zYl9sb3dhdCB8fCBcCi0JKChzbyktPnNvX3Jjdi5zYl9zdGF0
ZSAmIFNCU19DQU5UUkNWTU9SRSkgfHwgXAotCSFUQUlMUV9FTVBUWSgmKHNvKS0+c29fY29tcCkg
fHwgKHNvKS0+c29fZXJyb3IpCi0KLS8qIGNhbiB3ZSB3cml0ZSBzb21ldGhpbmcgdG8gc28/ICov
Ci0jZGVmaW5lCXNvd3JpdGVhYmxlKHNvKSBcCi0gICAgKChzYnNwYWNlKCYoc28pLT5zb19zbmQp
ID49IChzbyktPnNvX3NuZC5zYl9sb3dhdCAmJiBcCi0JKCgoc28pLT5zb19zdGF0ZSZTU19JU0NP
Tk5FQ1RFRCkgfHwgXAotCSAgKChzbyktPnNvX3Byb3RvLT5wcl9mbGFncyZQUl9DT05OUkVRVUlS
RUQpPT0wKSkgfHwgXAotICAgICAoKHNvKS0+c29fc25kLnNiX3N0YXRlICYgU0JTX0NBTlRTRU5E
TU9SRSkgfHwgXAotICAgICAoc28pLT5zb19lcnJvcikKLQotLyogYWRqdXN0IGNvdW50ZXJzIGlu
IHNiIHJlZmxlY3RpbmcgYWxsb2NhdGlvbiBvZiBtICovCi0jZGVmaW5lCXNiYWxsb2Moc2IsIG0p
IHsgXAotCShzYiktPnNiX2NjICs9IChtKS0+bV9sZW47IFwKLQlpZiAoKG0pLT5tX3R5cGUgIT0g
TVRfREFUQSAmJiAobSktPm1fdHlwZSAhPSBNVF9PT0JEQVRBKSBcCi0JCShzYiktPnNiX2N0bCAr
PSAobSktPm1fbGVuOyBcCi0JKHNiKS0+c2JfbWJjbnQgKz0gTVNJWkU7IFwKLQlpZiAoKG0pLT5t
X2ZsYWdzICYgTV9FWFQpIFwKLQkJKHNiKS0+c2JfbWJjbnQgKz0gKG0pLT5tX2V4dC5leHRfc2l6
ZTsgXAotfQotCi0vKiBhZGp1c3QgY291bnRlcnMgaW4gc2IgcmVmbGVjdGluZyBmcmVlaW5nIG9m
IG0gKi8KLSNkZWZpbmUJc2JmcmVlKHNiLCBtKSB7IFwKLQkoc2IpLT5zYl9jYyAtPSAobSktPm1f
bGVuOyBcCi0JaWYgKChtKS0+bV90eXBlICE9IE1UX0RBVEEgJiYgKG0pLT5tX3R5cGUgIT0gTVRf
T09CREFUQSkgXAotCQkoc2IpLT5zYl9jdGwgLT0gKG0pLT5tX2xlbjsgXAotCShzYiktPnNiX21i
Y250IC09IE1TSVpFOyBcCi0JaWYgKChtKS0+bV9mbGFncyAmIE1fRVhUKSBcCi0JCShzYiktPnNi
X21iY250IC09IChtKS0+bV9leHQuZXh0X3NpemU7IFwKLQlpZiAoKHNiKS0+c2Jfc25kcHRyID09
IChtKSkgeyBcCi0JCShzYiktPnNiX3NuZHB0ciA9IE5VTEw7IFwKLQkJKHNiKS0+c2Jfc25kcHRy
b2ZmID0gMDsgXAotCX0gXAotCWlmICgoc2IpLT5zYl9zbmRwdHJvZmYgIT0gMCkgXAotCQkoc2Ip
LT5zYl9zbmRwdHJvZmYgLT0gKG0pLT5tX2xlbjsgXAotfQotCi0vKgotICogc29yZWYoKS9zb3Jl
bGUoKSByZWYtY291bnQgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuICBOb3RlIHRoYXQgeW91IG11c3QK
LSAqIHN0aWxsIGV4cGxpY2l0bHkgY2xvc2UgdGhlIHNvY2tldCwgYnV0IHRoZSBsYXN0IHJlZiBj
b3VudCB3aWxsIGZyZWUKLSAqIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLSNkZWZpbmUJc29yZWYoc28p
IGRvIHsJCQkJCQkJXAotCVNPQ0tfTE9DS19BU1NFUlQoc28pOwkJCQkJCVwKLQkrKyhzbyktPnNv
X2NvdW50OwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc29yZWxlKHNvKSBkbyB7CQkJ
CQkJCVwKLQlBQ0NFUFRfTE9DS19BU1NFUlQoKTsJCQkJCQlcCi0JU09DS19MT0NLX0FTU0VSVChz
byk7CQkJCQkJXAotCUtBU1NFUlQoKHNvKS0+c29fY291bnQgPiAwLCAoInNvcmVsZSIpKTsJCQlc
Ci0JaWYgKC0tKHNvKS0+c29fY291bnQgPT0gMCkJCQkJCVwKLQkJc29mcmVlKHNvKTsJCQkJCQlc
Ci0JZWxzZSB7CQkJCQkJCQlcCi0JCVNPQ0tfVU5MT0NLKHNvKTsJCQkJCVwKLQkJQUNDRVBUX1VO
TE9DSygpOwkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc290cnlm
cmVlKHNvKSBkbyB7CQkJCQkJXAotCUFDQ0VQVF9MT0NLX0FTU0VSVCgpOwkJCQkJCVwKLQlTT0NL
X0xPQ0tfQVNTRVJUKHNvKTsJCQkJCQlcCi0JaWYgKChzbyktPnNvX2NvdW50ID09IDApCQkJCQlc
Ci0JCXNvZnJlZShzbyk7CQkJCQkJXAotCWVsc2UgewkJCQkJCQkJXAotCQlTT0NLX1VOTE9DSyhz
byk7CQkJCQlcCi0JCUFDQ0VQVF9VTkxPQ0soKTsJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxl
KDApCi0KLS8qCi0gKiBJbiBzb3J3YWtldXAoKSBhbmQgc293d2FrZXVwKCksIGFjcXVpcmUgdGhl
IHNvY2tldCBidWZmZXIgbG9jayB0bwotICogYXZvaWQgYSBub24tYXRvbWljIHRlc3QtYW5kLXdh
a2V1cC4gIEhvd2V2ZXIsIHNvd2FrZXVwIGlzCi0gKiByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5n
IHRoZSBsb2NrIGlmIGl0IGlzIGNhbGxlZC4gIFdlIHVubG9jayBvbmx5Ci0gKiBpZiB3ZSBkb24n
dCBjYWxsIGludG8gc293YWtldXAuICBJZiBhbnkgY29kZSBpcyBpbnRyb2R1Y2VkIHRoYXQKLSAq
IGRpcmVjdGx5IGludm9rZXMgdGhlIHVuZGVybHlpbmcgc293YWtldXAoKSBwcmltaXRpdmVzLCBp
dCBtdXN0Ci0gKiBtYWludGFpbiB0aGUgc2FtZSBzZW1hbnRpY3MuCi0gKi8KLSNkZWZpbmUJc29y
d2FrZXVwX2xvY2tlZChzbykgZG8gewkJCQkJXAotCVNPQ0tCVUZfTE9DS19BU1NFUlQoJihzbykt
PnNvX3Jjdik7CQkJCVwKLQlpZiAoc2Jfbm90aWZ5KCYoc28pLT5zb19yY3YpKQkJCQkJXAotCQlz
b3dha2V1cCgoc28pLCAmKHNvKS0+c29fcmN2KTsJIAkJCVwKLQllbHNlCQkJCQkJCQlcCi0JCVNP
Q0tCVUZfVU5MT0NLKCYoc28pLT5zb19yY3YpOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5l
CXNvcndha2V1cChzbykgZG8gewkJCQkJCVwKLQlTT0NLQlVGX0xPQ0soJihzbyktPnNvX3Jjdik7
CQkJCQlcCi0Jc29yd2FrZXVwX2xvY2tlZChzbyk7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2Rl
ZmluZQlzb3d3YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlcCi0JU09DS0JVRl9MT0NLX0FTU0VS
VCgmKHNvKS0+c29fc25kKTsJCQkJXAotCWlmIChzYl9ub3RpZnkoJihzbyktPnNvX3NuZCkpCQkJ
CQlcCi0JCXNvd2FrZXVwKChzbyksICYoc28pLT5zb19zbmQpOyAJCQkJXAotCWVsc2UJCQkJCQkJ
CVwKLQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CQkJCVwKLX0gd2hpbGUgKDApCi0K
LSNkZWZpbmUJc293d2FrZXVwKHNvKSBkbyB7CQkJCQkJXAotCVNPQ0tCVUZfTE9DSygmKHNvKS0+
c29fc25kKTsJCQkJCVwKLQlzb3d3YWtldXBfbG9ja2VkKHNvKTsJCQkJCQlcCi19IHdoaWxlICgw
KQotCi0vKgotICogQXJndW1lbnQgc3RydWN0dXJlIGZvciBzb3NldG9wdCBldCBzZXEuICBUaGlz
IGlzIGluIHRoZSBLRVJORUwKLSAqIHNlY3Rpb24gYmVjYXVzZSBpdCB3aWxsIG5ldmVyIGJlIHZp
c2libGUgdG8gdXNlciBjb2RlLgotICovCi1lbnVtIHNvcHRfZGlyIHsgU09QVF9HRVQsIFNPUFRf
U0VUIH07Ci1zdHJ1Y3Qgc29ja29wdCB7Ci0JZW51bQlzb3B0X2RpciBzb3B0X2RpcjsgLyogaXMg
dGhpcyBhIGdldCBvciBhIHNldD8gKi8KLQlpbnQJc29wdF9sZXZlbDsJLyogc2Vjb25kIGFyZyBv
ZiBbZ3NdZXRzb2Nrb3B0ICovCi0JaW50CXNvcHRfbmFtZTsJLyogdGhpcmQgYXJnIG9mIFtnc11l
dHNvY2tvcHQgKi8KLQl2b2lkICAgKnNvcHRfdmFsOwkvKiBmb3VydGggYXJnIG9mIFtnc11ldHNv
Y2tvcHQgKi8KLQlzaXplX3QJc29wdF92YWxzaXplOwkvKiAoYWxtb3N0KSBmaWZ0aCBhcmcgb2Yg
W2dzXWV0c29ja29wdCAqLwotCXN0cnVjdAl0aHJlYWQgKnNvcHRfdGQ7IC8qIGNhbGxpbmcgdGhy
ZWFkIG9yIG51bGwgaWYga2VybmVsICovCi19OwotCi1zdHJ1Y3QgYWNjZXB0X2ZpbHRlciB7Ci0J
Y2hhcglhY2NmX25hbWVbMTZdOwotCXZvaWQJKCphY2NmX2NhbGxiYWNrKQotCQkoc3RydWN0IHNv
Y2tldCAqc28sIHZvaWQgKmFyZywgaW50IHdhaXRmbGFnKTsKLQl2b2lkICoJKCphY2NmX2NyZWF0
ZSkKLQkJKHN0cnVjdCBzb2NrZXQgKnNvLCBjaGFyICphcmcpOwotCXZvaWQJKCphY2NmX2Rlc3Ry
b3kpCi0JCShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci0JU0xJU1RfRU5UUlkoYWNjZXB0X2ZpbHRlcikg
YWNjZl9uZXh0OwotfTsKLQotZXh0ZXJuIGludAltYXhzb2NrZXRzOwotZXh0ZXJuIHVfbG9uZwlz
Yl9tYXg7Ci1leHRlcm4gc3RydWN0IHVtYV96b25lICpzb2NrZXRfem9uZTsKLWV4dGVybiBzb19n
ZW5fdCBzb19nZW5jbnQ7Ci0KLXN0cnVjdCBtYnVmOwotc3RydWN0IHNvY2thZGRyOwotc3RydWN0
IHVjcmVkOwotc3RydWN0IHVpbzsKLQotLyoKLSAqIEZyb20gdWlwY19zb2NrZXQgYW5kIGZyaWVu
ZHMKLSAqLwotaW50CWRvX2dldG9wdF9hY2NlcHRfZmlsdGVyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja29wdCAqc29wdCk7Ci1pbnQJZG9fc2V0b3B0X2FjY2VwdF9maWx0ZXIoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KTsKLWludAlzb19zZXRzb2Nrb3B0KHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAotCSAgICB2b2lkICpvcHR2
YWwsIHNpemVfdCBvcHRsZW4pOwotaW50CXNvY2thcmdzKHN0cnVjdCBtYnVmICoqbXAsIGNhZGRy
X3QgYnVmLCBpbnQgYnVmbGVuLCBpbnQgdHlwZSk7Ci1pbnQJZ2V0c29ja2FkZHIoc3RydWN0IHNv
Y2thZGRyICoqbmFtcCwgY2FkZHJfdCB1YWRkciwgc2l6ZV90IGxlbik7Ci12b2lkCXNiYXBwZW5k
KHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0pOwotdm9pZAlzYmFwcGVuZF9sb2Nr
ZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSk7Ci12b2lkCXNiYXBwZW5kc3Ry
ZWFtKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0pOwotdm9pZAlzYmFwcGVuZHN0
cmVhbV9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSk7Ci1pbnQJc2Jh
cHBlbmRhZGRyKHN0cnVjdCBzb2NrYnVmICpzYiwgY29uc3Qgc3RydWN0IHNvY2thZGRyICphc2Es
Ci0JICAgIHN0cnVjdCBtYnVmICptMCwgc3RydWN0IG1idWYgKmNvbnRyb2wpOwotaW50CXNiYXBw
ZW5kYWRkcl9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIg
KmFzYSwKLQkgICAgc3RydWN0IG1idWYgKm0wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCk7Ci1pbnQJ
c2JhcHBlbmRjb250cm9sKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0wLAotCSAg
ICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCk7Ci1pbnQJc2JhcHBlbmRjb250cm9sX2xvY2tlZChzdHJ1
Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptMCwKLQkgICAgc3RydWN0IG1idWYgKmNvbnRy
b2wpOwotdm9pZAlzYmFwcGVuZHJlY29yZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVm
ICptMCk7Ci12b2lkCXNiYXBwZW5kcmVjb3JkX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0
cnVjdCBtYnVmICptMCk7Ci12b2lkCXNiY2hlY2soc3RydWN0IHNvY2tidWYgKnNiKTsKLXZvaWQJ
c2Jjb21wcmVzcyhzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1
ZiAqbik7Ci1zdHJ1Y3QgbWJ1ZiAqCi0Jc2JjcmVhdGVjb250cm9sKGNhZGRyX3QgcCwgaW50IHNp
emUsIGludCB0eXBlLCBpbnQgbGV2ZWwpOwotdm9pZAlzYmRlc3Ryb3koc3RydWN0IHNvY2tidWYg
KnNiLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNiZHJvcChzdHJ1Y3Qgc29ja2J1ZiAqc2Is
IGludCBsZW4pOwotdm9pZAlzYmRyb3BfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgaW50IGxl
bik7Ci12b2lkCXNiZHJvcHJlY29yZChzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwotdm9pZAlzYmRyb3By
ZWNvcmRfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYik7Ci12b2lkCXNiZmx1c2goc3RydWN0IHNv
Y2tidWYgKnNiKTsKLXZvaWQJc2JmbHVzaF9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiKTsKLXZv
aWQJc2JyZWxlYXNlKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNvY2tldCAqc28pOwotdm9p
ZAlzYnJlbGVhc2VfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNvY2tldCAqc28p
OwotaW50CXNicmVzZXJ2ZShzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfbG9uZyBjYywgc3RydWN0IHNv
Y2tldCAqc28sCi0JICAgIHN0cnVjdCB0aHJlYWQgKnRkKTsKLWludAlzYnJlc2VydmVfbG9ja2Vk
KHN0cnVjdCBzb2NrYnVmICpzYiwgdV9sb25nIGNjLCBzdHJ1Y3Qgc29ja2V0ICpzbywKLQkgICAg
c3RydWN0IHRocmVhZCAqdGQpOwotc3RydWN0IG1idWYgKgotCXNic25kcHRyKHN0cnVjdCBzb2Nr
YnVmICpzYiwgdV9pbnQgb2ZmLCB1X2ludCBsZW4sIHVfaW50ICptb2ZmKTsKLXZvaWQJc2J0b3hz
b2NrYnVmKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHhzb2NrYnVmICp4c2IpOwotaW50CXNi
d2FpdChzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwotaW50CXNibG9jayhzdHJ1Y3Qgc29ja2J1ZiAqc2Is
IGludCBmbGFncyk7Ci12b2lkCXNidW5sb2NrKHN0cnVjdCBzb2NrYnVmICpzYik7Ci12b2lkCXNv
YWJvcnQoc3RydWN0IHNvY2tldCAqc28pOwotaW50CXNvYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwotaW50CXNvY2hlY2t1aWQoc3RydWN0IHNvY2tldCAq
c28sIHVpZF90IHVpZCk7Ci1pbnQJc29iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKm5hbSwgc3RydWN0IHRocmVhZCAqdGQpOwotdm9pZAlzb2NhbnRyY3Ztb3JlKHN0cnVj
dCBzb2NrZXQgKnNvKTsKLXZvaWQJc29jYW50cmN2bW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAq
c28pOwotdm9pZAlzb2NhbnRzZW5kbW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvY2Fu
dHNlbmRtb3JlX2xvY2tlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1pbnQJc29jbG9zZShzdHJ1Y3Qg
c29ja2V0ICpzbyk7Ci1pbnQJc29jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKm5hbSwgc3RydWN0IHRocmVhZCAqdGQpOwotaW50CXNvY29ubmVjdDIoc3RydWN0IHNv
Y2tldCAqc28xLCBzdHJ1Y3Qgc29ja2V0ICpzbzIpOwotaW50CXNvY293X3NldHVwKHN0cnVjdCBt
YnVmICptMCwgc3RydWN0IHVpbyAqdWlvKTsKLWludAlzb2NyZWF0ZShpbnQgZG9tLCBzdHJ1Y3Qg
c29ja2V0ICoqYXNvLCBpbnQgdHlwZSwgaW50IHByb3RvLAotCSAgICBzdHJ1Y3QgdWNyZWQgKmNy
ZWQsIHN0cnVjdCB0aHJlYWQgKnRkKTsKLWludAlzb2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAq
c28pOwotc3RydWN0CXNvY2thZGRyICpzb2R1cHNvY2thZGRyKGNvbnN0IHN0cnVjdCBzb2NrYWRk
ciAqc2EsIGludCBtZmxhZ3MpOwotdm9pZAlzb2ZyZWUoc3RydWN0IHNvY2tldCAqc28pOwotaW50
CXNvZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCk7Ci12b2lk
CXNvaGFzb3V0b2ZiYW5kKHN0cnVjdCBzb2NrZXQgKnNvKTsKLXZvaWQJc29pc2Nvbm5lY3RlZChz
dHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvaXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNv
KTsKLXZvaWQJc29pc2Rpc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvaXNk
aXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKTsKLWludAlzb2xpc3RlbihzdHJ1Y3Qgc29j
a2V0ICpzbywgaW50IGJhY2tsb2csIHN0cnVjdCB0aHJlYWQgKnRkKTsKLXZvaWQJc29saXN0ZW5f
cHJvdG8oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKTsKLWludAlzb2xpc3Rlbl9wcm90
b19jaGVjayhzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1zdHJ1Y3Qgc29ja2V0ICoKLQlzb25ld2Nvbm4o
c3RydWN0IHNvY2tldCAqaGVhZCwgaW50IGNvbm5zdGF0dXMpOwotaW50CXNvb3B0Y29weWluKHN0
cnVjdCBzb2Nrb3B0ICpzb3B0LCB2b2lkICpidWYsIHNpemVfdCBsZW4sIHNpemVfdCBtaW5sZW4p
OwotaW50CXNvb3B0Y29weW91dChzdHJ1Y3Qgc29ja29wdCAqc29wdCwgY29uc3Qgdm9pZCAqYnVm
LCBzaXplX3QgbGVuKTsKLQotLyogWFhYOyBwcmVwYXJlIG1idWYgZm9yIChfX0ZyZWVCU0RfXyA8
IDMpIHJvdXRpbmVzLiAqLwotaW50CXNvb3B0X2dldG0oc3RydWN0IHNvY2tvcHQgKnNvcHQsIHN0
cnVjdCBtYnVmICoqbXApOwotaW50CXNvb3B0X21jb3B5aW4oc3RydWN0IHNvY2tvcHQgKnNvcHQs
IHN0cnVjdCBtYnVmICptKTsKLWludAlzb29wdF9tY29weW91dChzdHJ1Y3Qgc29ja29wdCAqc29w
dCwgc3RydWN0IG1idWYgKm0pOwotCi1pbnQJc29wb2xsKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
ZXZlbnRzLCBzdHJ1Y3QgdWNyZWQgKmFjdGl2ZV9jcmVkLAotCSAgICBzdHJ1Y3QgdGhyZWFkICp0
ZCk7Ci1pbnQJc29wb2xsX2dlbmVyaWMoc3RydWN0IHNvY2tldCAqc28sIGludCBldmVudHMsCi0J
ICAgIHN0cnVjdCB1Y3JlZCAqYWN0aXZlX2NyZWQsIHN0cnVjdCB0aHJlYWQgKnRkKTsKLWludAlz
b3JlY2VpdmUoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKnBhZGRyLCBzdHJ1
Y3QgdWlvICp1aW8sCi0JICAgIHN0cnVjdCBtYnVmICoqbXAwLCBzdHJ1Y3QgbWJ1ZiAqKmNvbnRy
b2xwLCBpbnQgKmZsYWdzcCk7Ci1pbnQJc29yZWNlaXZlX2dlbmVyaWMoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqKnBhZGRyLAotCSAgICBzdHJ1Y3QgdWlvICp1aW8sIHN0cnVj
dCBtYnVmICoqbXAwLCBzdHJ1Y3QgbWJ1ZiAqKmNvbnRyb2xwLAotCSAgICBpbnQgKmZsYWdzcCk7
Ci1pbnQJc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcgc25kY2MsIHVfbG9uZyBy
Y3ZjYyk7Ci12b2lkCXNvcmZsdXNoKHN0cnVjdCBzb2NrZXQgKnNvKTsKLWludAlzb3NlbmQoc3Ry
dWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHVpbyAqdWlvLAot
CSAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgaW50IGZsYWdzLAot
CSAgICBzdHJ1Y3QgdGhyZWFkICp0ZCk7Ci1pbnQJc29zZW5kX2RncmFtKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JICAgIHN0cnVjdCB1aW8gKnVpbywgc3RydWN0
IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0JICAgIGludCBmbGFncywgc3RydWN0
IHRocmVhZCAqdGQpOwotaW50CXNvc2VuZF9nZW5lcmljKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsCi0JICAgIHN0cnVjdCB1aW8gKnVpbywgc3RydWN0IG1idWYgKnRv
cCwgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0JICAgIGludCBmbGFncywgc3RydWN0IHRocmVhZCAq
dGQpOwotaW50CXNvc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29w
dCk7Ci1pbnQJc29zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdyk7Ci12b2lkCXNv
dG94c29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgeHNvY2tldCAqeHNvKTsKLXZvaWQJ
c293YWtldXAoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYnVmICpzYik7Ci0KLSNpZmRl
ZiBTT0NLQlVGX0RFQlVHCi12b2lkCXNibGFzdHJlY29yZGNoayhzdHJ1Y3Qgc29ja2J1ZiAqLCBj
b25zdCBjaGFyICosIGludCk7Ci0jZGVmaW5lCVNCTEFTVFJFQ09SRENISyhzYikJc2JsYXN0cmVj
b3JkY2hrKChzYiksIF9fRklMRV9fLCBfX0xJTkVfXykKLQotdm9pZAlzYmxhc3RtYnVmY2hrKHN0
cnVjdCBzb2NrYnVmICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLSNkZWZpbmUJU0JMQVNUTUJVRkNI
SyhzYikJc2JsYXN0bWJ1ZmNoaygoc2IpLCBfX0ZJTEVfXywgX19MSU5FX18pCi0jZWxzZQotI2Rl
ZmluZQlTQkxBU1RSRUNPUkRDSEsoc2IpICAgICAgLyogbm90aGluZyAqLwotI2RlZmluZQlTQkxB
U1RNQlVGQ0hLKHNiKSAgICAgICAgLyogbm90aGluZyAqLwotI2VuZGlmIC8qIFNPQ0tCVUZfREVC
VUcgKi8KLQotLyoKLSAqIEFjY2VwdCBmaWx0ZXIgZnVuY3Rpb25zIChkdWgpLgotICovCi1pbnQJ
YWNjZXB0X2ZpbHRfYWRkKHN0cnVjdCBhY2NlcHRfZmlsdGVyICpmaWx0KTsKLWludAlhY2NlcHRf
ZmlsdF9kZWwoY2hhciAqbmFtZSk7Ci1zdHJ1Y3QJYWNjZXB0X2ZpbHRlciAqYWNjZXB0X2ZpbHRf
Z2V0KGNoYXIgKm5hbWUpOwotI2lmZGVmIEFDQ0VQVF9GSUxURVJfTU9ECi0jaWZkZWYgU1lTQ1RM
X0RFQ0wKLVNZU0NUTF9ERUNMKF9uZXRfaW5ldF9hY2NmKTsKLSNlbmRpZgotaW50CWFjY2VwdF9m
aWx0X2dlbmVyaWNfbW9kX2V2ZW50KG1vZHVsZV90IG1vZCwgaW50IGV2ZW50LCB2b2lkICpkYXRh
KTsKLSNlbmRpZgotCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0KLS8qLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q
LwotLyogICAgICAgICAgICAgICAgICAgX19Vc2Vyc3BhY2VfXyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdGhpcyBuZXcgX19Vc2Vyc3BhY2Vf
XyBzZWN0aW9uIGlzIHRvIGNvcHkgcG9ydGlvbnMgb2YgdGhlIF9LRVJORUwgYmxvY2sKLSAqICBh
Ym92ZSBpbnRvLCBhdm9pZGluZyBoYXZpbmcgdG8gcG9ydCB0aGUgZW50aXJlIHRoaW5nIGF0IG9u
Y2UuLi4KLSAqICBGb3IgZnVuY3Rpb24gcHJvdG90eXBlcywgdGhlIGZ1bGwgYm9kaWVzIGFyZSBp
biB1c2VyX3NvY2tldC5jIC4KLSAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQotLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwotLyogLS0tIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGltcGxlbWVudGVkIGluIHVzZXJfc29j
a2V0LmMpIC0tLSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZAlzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0
ICpzbyk7Ci12b2lkCXNvaXNkaXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKTsKLXZvaWQJ
c29pc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1zdHJ1Y3Qgc29ja2V0ICogc29uZXdj
b25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGludCBjb25uc3RhdHVzKTsKLXZvaWQJc29jYW50cmN2
bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvY2FudHNlbmRtb3JlKHN0cnVjdCBzb2Nr
ZXQgKnNvKTsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tICovCi0vKiAtLS0gbWFjcm9zIC0tLSAq
LwotLyogLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZQlzb3JlZihzbykgZG8gewkJCQkJCQlc
Ci0JU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAotCSsrKHNvKS0+c29fY291bnQ7CQkJCQkJ
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlzb3JlbGUoc28pIGRvIHsJCQkJCQkJXAotCUFDQ0VQ
VF9MT0NLX0FTU0VSVCgpOwkJCQkJCVwKLQlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsJCQkJCQlcCi0J
S0FTU0VSVCgoc28pLT5zb19jb3VudCA+IDAsICgic29yZWxlIikpOwkJCVwKLQlpZiAoLS0oc28p
LT5zb19jb3VudCA9PSAwKQkJCQkJXAotCQlzb2ZyZWUoc28pOwkJCQkJCVwKLQllbHNlIHsJCQkJ
CQkJCVwKLQkJU09DS19VTkxPQ0soc28pOwkJCQkJXAotCQlBQ0NFUFRfVU5MT0NLKCk7CQkJCQlc
Ci0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi0vKiByZXBsYWNpbmcgaW1pbiB3aXRoIG1p
biAodXNlcl9lbnZpcm9ubWVudC5oKSAqLwotI2RlZmluZQlzYnNwYWNlKHNiKSBcCi0gICAgKChs
b25nKSBtaW4oKGludCkoKHNiKS0+c2JfaGl3YXQgLSAoc2IpLT5zYl9jYyksIFwKLQkgKGludCko
KHNiKS0+c2JfbWJtYXggLSAoc2IpLT5zYl9tYmNudCkpKQotCi0vKiBkbyB3ZSBoYXZlIHRvIHNl
bmQgYWxsIGF0IG9uY2Ugb24gYSBzb2NrZXQ/ICovCi0jZGVmaW5lCXNvc2VuZGFsbGF0b25jZShz
bykgXAotICAgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MgJiBQUl9BVE9NSUMpCi0KLS8qIGNh
biB3ZSByZWFkIHNvbWV0aGluZyBmcm9tIHNvPyAqLwotI2RlZmluZQlzb3JlYWRhYmxlKHNvKSBc
Ci0gICAgKChpbnQpKChzbyktPnNvX3Jjdi5zYl9jYykgPj0gKHNvKS0+c29fcmN2LnNiX2xvd2F0
IHx8IFwKLQkoKHNvKS0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB8fCBcCi0J
IVRBSUxRX0VNUFRZKCYoc28pLT5zb19jb21wKSB8fCAoc28pLT5zb19lcnJvcikKLQotI2lmIDAg
IC8qICBvcmlnaW5hbCAqLwotI2RlZmluZSBQUl9DT05OUkVRVUlSRUQgMHgwNCAgLyogZnJvbSBz
eXMvcHJvdG9zdy5oICJuZWVkZWQiIGZvciBzb3dyaXRlYWJsZSAqLwotI2RlZmluZQlzb3dyaXRl
YWJsZShzbykgXAotICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+PSAoc28pLT5zb19zbmQu
c2JfbG93YXQgJiYgXAotCSgoKHNvKS0+c29fc3RhdGUmU1NfSVNDT05ORUNURUQpIHx8IFwKLQkg
ICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MmUFJfQ09OTlJFUVVJUkVEKT09MCkpIHx8IFwKLSAg
ICAgKChzbyktPnNvX3NuZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8IFwKLSAgICAg
KHNvKS0+c29fZXJyb3IpCi0jZWxzZSAgLyogbGluZSB3aXRoIFBSX0NPTk5SRVFVSVJFRCByZW1v
dmVkICovCi0vKiBjYW4gd2Ugd3JpdGUgc29tZXRoaW5nIHRvIHNvPyAqLwotI2RlZmluZQlzb3dy
aXRlYWJsZShzbykgXAotICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+PSAoc28pLT5zb19z
bmQuc2JfbG93YXQgJiYgXAotICAgICAgKCgoc28pLT5zb19zdGF0ZSZTU19JU0NPTk5FQ1RFRCkp
KSB8fCAgICAgICAgICAgICAgXAotICAgICAoKHNvKS0+c29fc25kLnNiX3N0YXRlICYgU0JTX0NB
TlRTRU5ETU9SRSkgfHwgXAotICAgICAoc28pLT5zb19lcnJvcikKLSNlbmRpZgotCi1leHRlcm4g
dm9pZCBzb2xpc3Rlbl9wcm90byhzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2cpOwotZXh0
ZXJuIGludCBzb2xpc3Rlbl9wcm90b19jaGVjayhzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1leHRlcm4g
aW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHBy
b2MgKnApOwotZXh0ZXJuIHZvaWQgc29jYW50cmN2bW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAq
c28pOwotZXh0ZXJuIGludCBzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqYWRkcik7Ci1leHRlcm4gaW50IHNjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgdm9pZCAqcHJvYyk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotZXh0ZXJuIGludCBzY3RwY29ubl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIpOwotI2VuZGlmCi1leHRlcm4gaW50IHNjdHBfYWNjZXB0KHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyKTsKLWV4dGVybiBpbnQgc2N0cF9hdHRh
Y2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3QgdnJmX2lkKTsKLWV4dGVy
biBpbnQgc2N0cDZfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8sIHVpbnQzMl90
IHZyZl9pZCk7Ci1leHRlcm4gaW50IHNjdHBfYWJvcnQoc3RydWN0IHNvY2tldCAqc28pOwotZXh0
ZXJuIGludCBzY3RwNl9hYm9ydChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1leHRlcm4gdm9pZCBzY3Rw
X2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKTsKLWV4dGVybiBpbnQgc29hY2NlcHQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSk7Ci1leHRlcm4gaW50IHNvbGlzdGVuKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZyk7Ci1leHRlcm4gaW50ICBzb3Jlc2VydmUoc3Ry
dWN0IHNvY2tldCAqc28sIHVfbG9uZyBzbmRjYywgdV9sb25nIHJjdmNjKTsKLWV4dGVybiB2b2lk
IHNvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwotZXh0ZXJu
IHZvaWQgd2FrZXVwKHZvaWQgKmlkZW50LCBzdHJ1Y3Qgc29ja2V0ICpzbyk7IC8qX19Vc2Vyc3Bh
Y2VfXyAqLwotZXh0ZXJuIGludCB1aW9tb3ZlKHZvaWQgKmNwLCBpbnQgbiwgc3RydWN0IHVpbyAq
dWlvKTsKLWV4dGVybiBpbnQgc2J3YWl0KHN0cnVjdCBzb2NrYnVmICpzYik7Ci1leHRlcm4gaW50
IHNvZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1leHRlcm4gaW50IHNvY29ubmVjdChz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0pOwotZXh0ZXJuIGludCBzY3Rw
X2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pOwotZXh0ZXJuIGludCBzY3RwX2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7Ci1leHRlcm4gaW50IHNj
dHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7Ci0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotZXh0ZXJuIGludCBzY3RwY29ubl9jb25uZWN0KHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOwotI2VuZGlmCi1leHRlcm4g
dm9pZCBzY3RwX2ZpbmlzaCh2b2lkKTsKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAtLS0tLSAgbWFjcm9zIGNvcGllZCBmcm9tIGFi
b3ZlIC0tLS0gKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwotCi0vKgotICogRG8gd2UgbmVlZCB0byBub3RpZnkgdGhlIG90aGVyIHNpZGUg
d2hlbiBJL08gaXMgcG9zc2libGU/Ci0gKi8KLSNkZWZpbmUJc2Jfbm90aWZ5KHNiKQkoKChzYikt
PnNiX2ZsYWdzICYgKFNCX1dBSVQgfCBTQl9TRUwgfCBTQl9BU1lOQyB8IFwKLSAgICBTQl9VUENB
TEwgfCBTQl9BSU8gfCBTQl9LTk9URSkpICE9IDApCi0KLQotLyoKLSAqIEluIHNvcndha2V1cCgp
IGFuZCBzb3d3YWtldXAoKSwgYWNxdWlyZSB0aGUgc29ja2V0IGJ1ZmZlciBsb2NrIHRvCi0gKiBh
dm9pZCBhIG5vbi1hdG9taWMgdGVzdC1hbmQtd2FrZXVwLiAgSG93ZXZlciwgc293YWtldXAgaXMK
LSAqIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGxvY2sgaWYgaXQgaXMgY2FsbGVkLiAg
V2UgdW5sb2NrIG9ubHkKLSAqIGlmIHdlIGRvbid0IGNhbGwgaW50byBzb3dha2V1cC4gIElmIGFu
eSBjb2RlIGlzIGludHJvZHVjZWQgdGhhdAotICogZGlyZWN0bHkgaW52b2tlcyB0aGUgdW5kZXJs
eWluZyBzb3dha2V1cCgpIHByaW1pdGl2ZXMsIGl0IG11c3QKLSAqIG1haW50YWluIHRoZSBzYW1l
IHNlbWFudGljcy4KLSAqLwotI2RlZmluZQlzb3J3YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlc
Ci0JU09DS0JVRl9MT0NLX0FTU0VSVCgmKHNvKS0+c29fcmN2KTsJCQkJXAotCWlmIChzYl9ub3Rp
ZnkoJihzbyktPnNvX3JjdikpCQkJCQlcCi0JCXNvd2FrZXVwKChzbyksICYoc28pLT5zb19yY3Yp
OwkgCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3Jjdik7
CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc29yd2FrZXVwKHNvKSBkbyB7CQkJCQkJXAot
CVNPQ0tCVUZfTE9DSygmKHNvKS0+c29fcmN2KTsJCQkJCVwKLQlzb3J3YWtldXBfbG9ja2VkKHNv
KTsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCXNvd3dha2V1cF9sb2NrZWQoc28pIGRv
IHsJCQkJCVwKLQlTT0NLQlVGX0xPQ0tfQVNTRVJUKCYoc28pLT5zb19zbmQpOwkJCQlcCi0JaWYg
KHNiX25vdGlmeSgmKHNvKS0+c29fc25kKSkJCQkJCVwKLQkJc293YWtldXAoKHNvKSwgJihzbykt
PnNvX3NuZCk7IAkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQlTT0NLQlVGX1VOTE9DSygmKHNvKS0+
c29fc25kKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlzb3d3YWtldXAoc28pIGRvIHsJ
CQkJCQlcCi0JU09DS0JVRl9MT0NLKCYoc28pLT5zb19zbmQpOwkJCQkJXAotCXNvd3dha2V1cF9s
b2NrZWQoc28pOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotCi0jZW5kaWYgLyogX19Vc2Vyc3Bh
Y2VfXyAqLwotCi0jZW5kaWYgLyogIV9TWVNfU09DS0VUVkFSX0hfICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c2VyX3VtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl91bWEuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWJkZWZkYjgwOTY4YWU5YzQ5ZWY0ZWIwYTI1ZmExYTljZTlhNGI0Mi4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c2VyX3VtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAotLyotCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAg
SHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVy
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9VTUFfSF8KLSNkZWZpbmUgX1VTRVJf
VU1BX0hfCi0KLSNkZWZpbmUgVU1BX1pGTEFHX0ZVTEwJCTB4NDAwMDAwMDAJLyogUmVhY2hlZCB1
el9tYXhwYWdlcyAqLwotI2RlZmluZSBVTUFfQUxJR05fUFRSCShzaXplb2Yodm9pZCAqKSAtIDEp
CS8qIEFsaWdubWVudCBmaXQgZm9yIHB0ciAqLwotCi0vKiBfX1VzZXJzcGFjZV9fIEFsbCB0aGVz
ZSBkZWZpbml0aW9ucyB3aWxsIGNoYW5nZSBmb3IKLXVzZXJzcGFjZSBVbml2ZXJzYWwgTWVtb3J5
IEFsbG9jYXRvciAoVU1BKS4gVGhlc2UgYXJlIGluY2x1ZGVkCi1mb3IgcmVmZXJlbmNlIHB1cnBv
c2VzIGFuZCB0byBhdm9pZCBjb21waWxlIGVycm9ycyBmb3IgdGhlIHRpbWUgYmVpbmcuCi0qLwot
dHlwZWRlZiBpbnQgKCp1bWFfY3Rvcikodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9pZCAqYXJnLCBp
bnQgZmxhZ3MpOwotdHlwZWRlZiB2b2lkICgqdW1hX2R0b3IpKHZvaWQgKm1lbSwgaW50IHNpemUs
IHZvaWQgKmFyZyk7Ci10eXBlZGVmIGludCAoKnVtYV9pbml0KSh2b2lkICptZW0sIGludCBzaXpl
LCBpbnQgZmxhZ3MpOwotdHlwZWRlZiB2b2lkICgqdW1hX2ZpbmkpKHZvaWQgKm1lbSwgaW50IHNp
emUpOwotdHlwZWRlZiBzdHJ1Y3QgdW1hX3pvbmUgKiB1bWFfem9uZV90OwotdHlwZWRlZiBzdHJ1
Y3QgdW1hX2tlZyAqIHVtYV9rZWdfdDsKLQotc3RydWN0IHVtYV9jYWNoZSB7Ci0gICAgaW50IHN0
dWI7IC8qIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLwotfTsKLQotc3RydWN0IHVtYV9rZWcgewotICAg
IGludCBzdHViOyAvKiBUT0RPIF9fVXNlcnNwYWNlX18gKi8KLX07Ci0KLXN0cnVjdCB1bWFfem9u
ZSB7Ci0JY2hhcgkJKnV6X25hbWU7CS8qIFRleHQgbmFtZSBvZiB0aGUgem9uZSAqLwotCXN0cnVj
dCBtdHgJKnV6X2xvY2s7CS8qIExvY2sgZm9yIHRoZSB6b25lIChrZWcncyBsb2NrKSAqLwotCXVt
YV9rZWdfdAl1el9rZWc7CQkvKiBPdXIgdW5kZXJseWluZyBLZWcgKi8KLQotCUxJU1RfRU5UUlko
dW1hX3pvbmUpCXV6X2xpbms7CS8qIExpc3Qgb2YgYWxsIHpvbmVzIGluIGtlZyAqLwotCUxJU1Rf
SEVBRCgsdW1hX2J1Y2tldCkJdXpfZnVsbF9idWNrZXQ7CS8qIGZ1bGwgYnVja2V0cyAqLwotCUxJ
U1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnJlZV9idWNrZXQ7CS8qIEJ1Y2tldHMgZm9yIGZyZWVz
ICovCi0KLQl1bWFfY3Rvcgl1el9jdG9yOwkvKiBDb25zdHJ1Y3RvciBmb3IgZWFjaCBhbGxvY2F0
aW9uICovCi0JdW1hX2R0b3IJdXpfZHRvcjsJLyogRGVzdHJ1Y3RvciAqLwotCXVtYV9pbml0CXV6
X2luaXQ7CS8qIEluaXRpYWxpemVyIGZvciBlYWNoIGl0ZW0gKi8KLQl1bWFfZmluaQl1el9maW5p
OwkvKiBEaXNjYXJkcyBtZW1vcnkgKi8KLQotCXVfaW50NjRfdAl1el9hbGxvY3M7CS8qIFRvdGFs
IG51bWJlciBvZiBhbGxvY2F0aW9ucyAqLwotCXVfaW50NjRfdAl1el9mcmVlczsJLyogVG90YWwg
bnVtYmVyIG9mIGZyZWVzICovCi0JdV9pbnQ2NF90CXV6X2ZhaWxzOwkvKiBUb3RhbCBudW1iZXIg
b2YgYWxsb2MgZmFpbHVyZXMgKi8KLQl1aW50MTZfdAl1el9maWxsczsJLyogT3V0c3RhbmRpbmcg
YnVja2V0IGZpbGxzICovCi0JdWludDE2X3QJdXpfY291bnQ7CS8qIEhpZ2hlc3QgdmFsdWUgdWJf
cHRyIGNhbiBoYXZlICovCi0KLQkvKgotCSAqIFRoaXMgSEFTIHRvIGJlIHRoZSBsYXN0IGl0ZW0g
YmVjYXVzZSB3ZSBhZGp1c3QgdGhlIHpvbmUgc2l6ZQotCSAqIGJhc2VkIG9uIE5DUFUgYW5kIHRo
ZW4gYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgem9uZXMuCi0JICovCi0Jc3RydWN0IHVtYV9j
YWNoZQl1el9jcHVbMV07CS8qIFBlciBjcHUgY2FjaGVzICovCi19OwotCi0vKiBQcm90b3R5cGUg
Ki8KLXVtYV96b25lX3QKLXVtYV96Y3JlYXRlKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCB1bWFf
Y3RvciBjdG9yLCB1bWFfZHRvciBkdG9yLAotCSAgICB1bWFfaW5pdCB1bWluaXQsIHVtYV9maW5p
IGZpbmksIGludCBhbGlnbiwgdV9pbnQzMl90IGZsYWdzKTsKLQotCi0jZGVmaW5lIHVtYV96b25l
X3NldF9tYXgoem9uZSwgbnVtYmVyKSAvKiBzdHViIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLwotCi11
bWFfem9uZV90Ci11bWFfemNyZWF0ZShjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdW1hX2N0b3Ig
Y3RvciwgdW1hX2R0b3IgZHRvciwKLQkgICAgdW1hX2luaXQgdW1pbml0LCB1bWFfZmluaSBmaW5p
LCBpbnQgYWxpZ24sIHVfaW50MzJfdCBmbGFncykKLXsKLSAgICByZXR1cm4gTlVMTDsgLyogc3R1
YiBUT0RPIF9fVXNlcnNwYWNlX18uIEFsc28gcGxhY2UgaW1wbGVtZW50YXRpb24gaW4gYSBzZXBh
cmF0ZSAuYyBmaWxlICovCi0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2
Yzk4MDMzMDZhOTlkYmVmYTFlODUxZGVmMzAzYzI3ZDE1NzMzOWZhLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHAuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEyNzAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAx
MCBCcmFkIFBlbm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAot
ICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0g
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAot
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2lmbmRlZiBfX1VTUlNDVFBfSF9fCi0jZGVmaW5lIF9fVVNSU0NUUF9IX18KLQotI2lm
ZGVmICBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGVycm5v
Lmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgX1dJTjMyCi0jaWZkZWYgX01TQ19W
RVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKQotI2VuZGlmCi0jaW5jbHVkZSA8d2lu
c29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzeXMvc29j
a2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpZm5kZWYgTVNHX05P
VElGSUNBVElPTgotLyogVGhpcyBkZWZpbml0aW9uIE1VU1QgYmUgaW4gc3luYyB3aXRoIHVzcnNj
dHBsaWIvdXNlcl9zb2NrZXR2YXIuaCAqLwotI2RlZmluZSBNU0dfTk9USUZJQ0FUSU9OIDB4MjAw
MAotI2VuZGlmCi0KLSNpZm5kZWYgSVBQUk9UT19TQ1RQCi0vKiBUaGlzIGlzIHRoZSBJQU5BIGFz
c2lnbmVkIHByb3RvY29sIG51bWJlciBvZiBTQ1RQLiAqLwotI2RlZmluZSBJUFBST1RPX1NDVFAg
MTMyCi0jZW5kaWYKLQotI2lmZGVmIF9XSU4zMgotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9N
U0NfVkVSID49IDE2MDAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbGlmIGRlZmluZWQoU0NUUF9T
VERJTlRfSU5DTFVERSkKLSNpbmNsdWRlIFNDVFBfU1RESU5UX0lOQ0xVREUKLSNlbHNlCi0jZGVm
aW5lIHVpbnQ4X3QgICB1bnNpZ25lZCBfX2ludDgKLSNkZWZpbmUgdWludDE2X3QgIHVuc2lnbmVk
IF9faW50MTYKLSNkZWZpbmUgdWludDMyX3QgIHVuc2lnbmVkIF9faW50MzIKLSNkZWZpbmUgdWlu
dDY0X3QgIHVuc2lnbmVkIF9faW50NjQKLSNkZWZpbmUgaW50MTZfdCAgIF9faW50MTYKLSNkZWZp
bmUgaW50MzJfdCAgIF9faW50MzIKLSNlbmRpZgotCi0jZGVmaW5lIHNzaXplX3QgICBfX2ludDY0
Ci0jZGVmaW5lIE1TR19FT1IgICAweDgKLSNpZm5kZWYgRVdPVUxEQkxPQ0sKLSNkZWZpbmUgRVdP
VUxEQkxPQ0sgIFdTQUVXT1VMREJMT0NLCi0jZW5kaWYKLSNpZm5kZWYgRUlOUFJPR1JFU1MKLSNk
ZWZpbmUgRUlOUFJPR1JFU1MgIFdTQUVJTlBST0dSRVNTCi0jZW5kaWYKLSNkZWZpbmUgU0hVVF9S
RCAgICAxCi0jZGVmaW5lIFNIVVRfV1IgICAgMgotI2RlZmluZSBTSFVUX1JEV1IgIDMKLSNlbmRp
ZgotCi10eXBlZGVmIHVpbnQzMl90IHNjdHBfYXNzb2NfdDsKLQotI2lmIGRlZmluZWQoX1dJTjMy
KSAmJiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSBwYWNrIChwdXNoLCAxKQotI2RlZmluZSBT
Q1RQX1BBQ0tFRAotI2Vsc2UKLSNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFj
a2VkKSkKLSNlbmRpZgotCi1zdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyIHsKLQl1aW50MTZfdCBz
b3VyY2VfcG9ydDsKLQl1aW50MTZfdCBkZXN0aW5hdGlvbl9wb3J0OwotCXVpbnQzMl90IHZlcmlm
aWNhdGlvbl90YWc7Ci0JdWludDMyX3QgY3JjMzJjOwotfSBTQ1RQX1BBQ0tFRDsKLQotI2lmIGRl
ZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSBwYWNrKHBvcCkKLSNl
bmRpZgotI3VuZGVmIFNDVFBfUEFDS0VECi0KLSNkZWZpbmUgQUZfQ09OTiAxMjMKLS8qIFRoZSBk
ZWZpbml0aW9uIG9mIHN0cnVjdCBzb2NrYWRkcl9jb25uIE1VU1QgYmUgaW4KLSAqIHR1bmUgd2l0
aCBvdGhlciBzb2NrYWRkcl8qIHN0cnVjdHVyZXMuCi0gKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX0JpdHJpZ19fKSB8fCBkZWZpbmVkKF9fRHJhZ29uRmx5X18pIHx8IFwK
LSAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCBkZWZp
bmVkKF9fTmV0QlNEX18pCi1zdHJ1Y3Qgc29ja2FkZHJfY29ubiB7Ci0JdWludDhfdCBzY29ubl9s
ZW47Ci0JdWludDhfdCBzY29ubl9mYW1pbHk7Ci0JdWludDE2X3Qgc2Nvbm5fcG9ydDsKLQl2b2lk
ICpzY29ubl9hZGRyOwotfTsKLSNlbHNlCi1zdHJ1Y3Qgc29ja2FkZHJfY29ubiB7Ci0JdWludDE2
X3Qgc2Nvbm5fZmFtaWx5OwotCXVpbnQxNl90IHNjb25uX3BvcnQ7Ci0Jdm9pZCAqc2Nvbm5fYWRk
cjsKLX07Ci0jZW5kaWYKLQotdW5pb24gc2N0cF9zb2Nrc3RvcmUgewotI2lmIGRlZmluZWQoSU5F
VCkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikK
LQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2FkZHJfY29u
biBzY29ubjsKLQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotCi0jZGVmaW5lIFNDVFBfRlVUVVJF
X0FTU09DICAwCi0jZGVmaW5lIFNDVFBfQ1VSUkVOVF9BU1NPQyAxCi0jZGVmaW5lIFNDVFBfQUxM
X0FTU09DICAgICAyCi0KLS8qKiogIFN0cnVjdHVyZXMgYW5kIGRlZmluaXRpb25zIHRvIHVzZSB0
aGUgc29ja2V0IEFQSSAgKioqLwotCi0jZGVmaW5lIFNDVFBfQUxJR05fUkVTVl9QQUQgOTIKLSNk
ZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRF9TSE9SVCA3NgotCi1zdHJ1Y3Qgc2N0cF9yY3ZpbmZv
IHsKLQl1aW50MTZfdCByY3Zfc2lkOwotCXVpbnQxNl90IHJjdl9zc247Ci0JdWludDE2X3QgcmN2
X2ZsYWdzOwotCXVpbnQzMl90IHJjdl9wcGlkOwotCXVpbnQzMl90IHJjdl90c247Ci0JdWludDMy
X3QgcmN2X2N1bXRzbjsKLQl1aW50MzJfdCByY3ZfY29udGV4dDsKLQlzY3RwX2Fzc29jX3QgcmN2
X2Fzc29jX2lkOwotfTsKLQotc3RydWN0IHNjdHBfbnh0aW5mbyB7Ci0JdWludDE2X3Qgbnh0X3Np
ZDsKLQl1aW50MTZfdCBueHRfZmxhZ3M7Ci0JdWludDMyX3Qgbnh0X3BwaWQ7Ci0JdWludDMyX3Qg
bnh0X2xlbmd0aDsKLQlzY3RwX2Fzc29jX3Qgbnh0X2Fzc29jX2lkOwotfTsKLQotI2RlZmluZSBT
Q1RQX05PX05FWFRfTVNHICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgU0NUUF9ORVhUX01TR19B
VkFJTCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNDT01QTEVURSAgIDB4
MDAwMgotI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTX1VOT1JERVJFRCAweDAwMDQKLSNkZWZpbmUg
U0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04gMHgwMDA4Ci0KLXN0cnVjdCBzY3RwX3JlY3Z2
X3JuIHsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJlY3Z2X3JjdmluZm87Ci0Jc3RydWN0IHNjdHBf
bnh0aW5mbyByZWN2dl9ueHRpbmZvOwotfTsKLQotI2RlZmluZSBTQ1RQX1JFQ1ZWX05PSU5GTyAg
MAotI2RlZmluZSBTQ1RQX1JFQ1ZWX1JDVklORk8gMQotI2RlZmluZSBTQ1RQX1JFQ1ZWX05YVElO
Rk8gMgotI2RlZmluZSBTQ1RQX1JFQ1ZWX1JOICAgICAgMwotCi0jZGVmaW5lIFNDVFBfU0VORFZf
Tk9JTkZPICAgMAotI2RlZmluZSBTQ1RQX1NFTkRWX1NORElORk8gIDEKLSNkZWZpbmUgU0NUUF9T
RU5EVl9QUklORk8gICAyCi0jZGVmaW5lIFNDVFBfU0VORFZfQVVUSElORk8gMwotI2RlZmluZSBT
Q1RQX1NFTkRWX1NQQSAgICAgIDQKLQotI2RlZmluZSBTQ1RQX1NFTkRfU05ESU5GT19WQUxJRCAg
MHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEICAgMHgwMDAwMDAwMgot
I2RlZmluZSBTQ1RQX1NFTkRfQVVUSElORk9fVkFMSUQgMHgwMDAwMDAwNAotCi1zdHJ1Y3Qgc2N0
cF9zbmRfYWxsX2NvbXBsZXRlcyB7Ci0JdWludDE2X3Qgc2FsbF9zdHJlYW07Ci0JdWludDE2X3Qg
c2FsbF9mbGFnczsKLQl1aW50MzJfdCBzYWxsX3BwaWQ7Ci0JdWludDMyX3Qgc2FsbF9jb250ZXh0
OwotCXVpbnQzMl90IHNhbGxfbnVtX3NlbnQ7Ci0JdWludDMyX3Qgc2FsbF9udW1fZmFpbGVkOwot
fTsKLQotc3RydWN0IHNjdHBfc25kaW5mbyB7Ci0JdWludDE2X3Qgc25kX3NpZDsKLQl1aW50MTZf
dCBzbmRfZmxhZ3M7Ci0JdWludDMyX3Qgc25kX3BwaWQ7Ci0JdWludDMyX3Qgc25kX2NvbnRleHQ7
Ci0Jc2N0cF9hc3NvY190IHNuZF9hc3NvY19pZDsKLX07Ci0KLXN0cnVjdCBzY3RwX3ByaW5mbyB7
Ci0JdWludDE2X3QgcHJfcG9saWN5OwotCXVpbnQzMl90IHByX3ZhbHVlOwotfTsKLQotc3RydWN0
IHNjdHBfYXV0aGluZm8gewotCXVpbnQxNl90IGF1dGhfa2V5bnVtYmVyOwotfTsKLQotc3RydWN0
IHNjdHBfc2VuZHZfc3BhIHsKLQl1aW50MzJfdCBzZW5kdl9mbGFnczsKLQlzdHJ1Y3Qgc2N0cF9z
bmRpbmZvIHNlbmR2X3NuZGluZm87Ci0Jc3RydWN0IHNjdHBfcHJpbmZvIHNlbmR2X3ByaW5mbzsK
LQlzdHJ1Y3Qgc2N0cF9hdXRoaW5mbyBzZW5kdl9hdXRoaW5mbzsKLX07Ci0KLXN0cnVjdCBzY3Rw
X3VkcGVuY2FwcyB7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3VlX2FkZHJlc3M7Ci0JdWlu
dDMyX3Qgc3VlX2Fzc29jX2lkOwotCXVpbnQxNl90IHN1ZV9wb3J0OwotfTsKLQotLyoqKioqKioq
ICBOb3RpZmljYXRpb25zICAqKioqKioqKioqKioqKi8KLQotLyogbm90aWZpY2F0aW9uIHR5cGVz
ICovCi0jZGVmaW5lIFNDVFBfQVNTT0NfQ0hBTkdFICAgICAgICAgICAgICAgICAweDAwMDEKLSNk
ZWZpbmUgU0NUUF9QRUVSX0FERFJfQ0hBTkdFICAgICAgICAgICAgIDB4MDAwMgotI2RlZmluZSBT
Q1RQX1JFTU9URV9FUlJPUiAgICAgICAgICAgICAgICAgMHgwMDAzCi0jZGVmaW5lIFNDVFBfU0VO
RF9GQUlMRUQgICAgICAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9F
VkVOVCAgICAgICAgICAgICAgIDB4MDAwNQotI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNB
VElPTiAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVCAg
ICAgICAweDAwMDcKLSNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVCAgICAgICAgIDB4
MDAwOAotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCAgICAgICAgICAgMHgwMDA5Ci0j
ZGVmaW5lIFNDVFBfU0VOREVSX0RSWV9FVkVOVCAgICAgICAgICAgICAweDAwMGEKLSNkZWZpbmUg
U0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQgIDB4MDAwYgotI2RlZmluZSBTQ1RQX0FT
U09DX1JFU0VUX0VWRU5UICAgICAgICAgICAgMHgwMDBjCi0jZGVmaW5lIFNDVFBfU1RSRUFNX0NI
QU5HRV9FVkVOVCAgICAgICAgICAweDAwMGQKLSNkZWZpbmUgU0NUUF9TRU5EX0ZBSUxFRF9FVkVO
VCAgICAgICAgICAgIDB4MDAwZQotCi0vKiBub3RpZmljYXRpb24gZXZlbnQgc3RydWN0dXJlcyAq
LwotCi0KLS8qIGFzc29jaWF0aW9uIGNoYW5nZSBldmVudCAqLwotc3RydWN0IHNjdHBfYXNzb2Nf
Y2hhbmdlIHsKLQl1aW50MTZfdCBzYWNfdHlwZTsKLQl1aW50MTZfdCBzYWNfZmxhZ3M7Ci0JdWlu
dDMyX3Qgc2FjX2xlbmd0aDsKLQl1aW50MTZfdCBzYWNfc3RhdGU7Ci0JdWludDE2X3Qgc2FjX2Vy
cm9yOwotCXVpbnQxNl90IHNhY19vdXRib3VuZF9zdHJlYW1zOwotCXVpbnQxNl90IHNhY19pbmJv
dW5kX3N0cmVhbXM7Ci0Jc2N0cF9hc3NvY190IHNhY19hc3NvY19pZDsKLQl1aW50OF90IHNhY19p
bmZvW107IC8qIG5vdCBhdmFpbGFibGUgeWV0ICovCi19OwotCi0vKiBzYWNfc3RhdGUgdmFsdWVz
ICovCi0jZGVmaW5lIFNDVFBfQ09NTV9VUCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfQ09N
TV9MT1NUICAgICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfUkVTVEFSVCAgICAgICAgMHgwMDAzCi0j
ZGVmaW5lIFNDVFBfU0hVVERPV05fQ09NUCAgMHgwMDA0Ci0jZGVmaW5lIFNDVFBfQ0FOVF9TVFJf
QVNTT0MgMHgwMDA1Ci0KLS8qIHNhY19pbmZvIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX1BSICAgICAgICAweDAxCi0jZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVU
SCAgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19BU0NPTkYgICAgMHgwMwot
I2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGICAweDA0Ci0jZGVmaW5lIFNDVFBf
QVNTT0NfU1VQUE9SVFNfUkVfQ09ORklHIDB4MDUKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JU
U19NQVggICAgICAgMHgwNQotCi0vKiBBZGRyZXNzIGV2ZW50ICovCi1zdHJ1Y3Qgc2N0cF9wYWRk
cl9jaGFuZ2UgewotCXVpbnQxNl90IHNwY190eXBlOwotCXVpbnQxNl90IHNwY19mbGFnczsKLQl1
aW50MzJfdCBzcGNfbGVuZ3RoOwotCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwY19hYWRkcjsK
LQl1aW50MzJfdCBzcGNfc3RhdGU7Ci0JdWludDMyX3Qgc3BjX2Vycm9yOwotCXNjdHBfYXNzb2Nf
dCBzcGNfYXNzb2NfaWQ7Ci0JdWludDhfdCBzcGNfcGFkZGluZ1s0XTsKLX07Ci0KLS8qIHBhZGRy
IHN0YXRlIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0FERFJfQVZBSUxBQkxFICAgMHgwMDAxCi0j
ZGVmaW5lIFNDVFBfQUREUl9VTlJFQUNIQUJMRSAweDAwMDIKLSNkZWZpbmUgU0NUUF9BRERSX1JF
TU9WRUQgICAgIDB4MDAwMwotI2RlZmluZSBTQ1RQX0FERFJfQURERUQgICAgICAgMHgwMDA0Ci0j
ZGVmaW5lIFNDVFBfQUREUl9NQURFX1BSSU0gICAweDAwMDUKLSNkZWZpbmUgU0NUUF9BRERSX0NP
TkZJUk1FRCAgIDB4MDAwNgotCi0vKiByZW1vdGUgZXJyb3IgZXZlbnRzICovCi1zdHJ1Y3Qgc2N0
cF9yZW1vdGVfZXJyb3IgewotCXVpbnQxNl90IHNyZV90eXBlOwotCXVpbnQxNl90IHNyZV9mbGFn
czsKLQl1aW50MzJfdCBzcmVfbGVuZ3RoOwotCXVpbnQxNl90IHNyZV9lcnJvcjsKLQlzY3RwX2Fz
c29jX3Qgc3JlX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3JlX2RhdGFbNF07Ci19OwotCi0vKiBzaHV0
ZG93biBldmVudCAqLwotc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgewotCXVpbnQxNl90IHNz
ZV90eXBlOwotCXVpbnQxNl90IHNzZV9mbGFnczsKLQl1aW50MzJfdCBzc2VfbGVuZ3RoOwotCXNj
dHBfYXNzb2NfdCBzc2VfYXNzb2NfaWQ7Ci19OwotCi0vKiBBZGFwdGF0aW9uIGxheWVyIGluZGlj
YXRpb24gKi8KLXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgewotCXVpbnQxNl90IHNhaV90
eXBlOwotCXVpbnQxNl90IHNhaV9mbGFnczsKLQl1aW50MzJfdCBzYWlfbGVuZ3RoOwotCXVpbnQz
Ml90IHNhaV9hZGFwdGF0aW9uX2luZDsKLQlzY3RwX2Fzc29jX3Qgc2FpX2Fzc29jX2lkOwotfTsK
LQotLyogUGFydGlhbCBkZWxpdmVyeSBldmVudCAqLwotc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQg
ewotCXVpbnQxNl90IHBkYXBpX3R5cGU7Ci0JdWludDE2X3QgcGRhcGlfZmxhZ3M7Ci0JdWludDMy
X3QgcGRhcGlfbGVuZ3RoOwotCXVpbnQzMl90IHBkYXBpX2luZGljYXRpb247Ci0JdWludDMyX3Qg
cGRhcGlfc3RyZWFtOwotCXVpbnQzMl90IHBkYXBpX3NlcTsKLQlzY3RwX2Fzc29jX3QgcGRhcGlf
YXNzb2NfaWQ7Ci19OwotCi0vKiBpbmRpY2F0aW9uIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX1BB
UlRJQUxfREVMSVZFUllfQUJPUlRFRCAgMHgwMDAxCi0KLS8qIFNDVFAgYXV0aGVudGljYXRpb24g
ZXZlbnQgKi8KLXN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgewotCXVpbnQxNl90IGF1dGhfdHlw
ZTsKLQl1aW50MTZfdCBhdXRoX2ZsYWdzOwotCXVpbnQzMl90IGF1dGhfbGVuZ3RoOwotCXVpbnQx
Nl90IGF1dGhfa2V5bnVtYmVyOwotCXVpbnQzMl90IGF1dGhfaW5kaWNhdGlvbjsKLQlzY3RwX2Fz
c29jX3QgYXV0aF9hc3NvY19pZDsKLX07Ci0KLS8qIGluZGljYXRpb24gdmFsdWVzICovCi0jZGVm
aW5lIFNDVFBfQVVUSF9ORVdfS0VZICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfQVVUSF9OT19BVVRI
ICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfQVVUSF9GUkVFX0tFWSAgMHgwMDAzCi0KLS8qIFNDVFAg
c2VuZGVyIGRyeSBldmVudCAqLwotc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCB7Ci0JdWlu
dDE2X3Qgc2VuZGVyX2RyeV90eXBlOwotCXVpbnQxNl90IHNlbmRlcl9kcnlfZmxhZ3M7Ci0JdWlu
dDMyX3Qgc2VuZGVyX2RyeV9sZW5ndGg7Ci0Jc2N0cF9hc3NvY190IHNlbmRlcl9kcnlfYXNzb2Nf
aWQ7Ci19OwotCi0KLS8qIFN0cmVhbSByZXNldCBldmVudCAtIHN1YnNjcmliZSB0byBTQ1RQX1NU
UkVBTV9SRVNFVF9FVkVOVCAqLwotc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50IHsKLQl1
aW50MTZfdCBzdHJyZXNldF90eXBlOwotCXVpbnQxNl90IHN0cnJlc2V0X2ZsYWdzOwotCXVpbnQz
Ml90IHN0cnJlc2V0X2xlbmd0aDsKLQlzY3RwX2Fzc29jX3Qgc3RycmVzZXRfYXNzb2NfaWQ7Ci0J
dWludDE2X3Qgc3RycmVzZXRfc3RyZWFtX2xpc3RbXTsKLX07Ci0KLS8qIGZsYWdzIGluIHN0cmVh
bV9yZXNldF9ldmVudCAoc3RycmVzZXRfZmxhZ3MpICovCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JF
U0VUX0lOQ09NSU5HX1NTTiAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdP
SU5HX1NTTiAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCAgICAgICAg
MHgwMDA0IC8qIFNDVFBfU1RSUkVTRVRfRkFJTEVEICovCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JF
U0VUX0ZBSUxFRCAgICAgICAgMHgwMDA4IC8qIFNDVFBfU1RSUkVTRVRfRkFJTEVEICovCi0jZGVm
aW5lIFNDVFBfU1RSRUFNX0NIQU5HRURfREVOSUVEICAgICAgMHgwMDEwCi0KLSNkZWZpbmUgU0NU
UF9TVFJFQU1fUkVTRVRfSU5DT01JTkcgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfU1RS
RUFNX1JFU0VUX09VVEdPSU5HICAgICAgMHgwMDAwMDAwMgotCi0KLS8qIEFzc29jIHJlc2V0IGV2
ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQgKi8KLXN0cnVjdCBzY3Rw
X2Fzc29jX3Jlc2V0X2V2ZW50IHsKLQl1aW50MTZfdCBhc3NvY3Jlc2V0X3R5cGU7Ci0JdWludDE2
X3QgYXNzb2NyZXNldF9mbGFnczsKLQl1aW50MzJfdCBhc3NvY3Jlc2V0X2xlbmd0aDsKLQlzY3Rw
X2Fzc29jX3QgYXNzb2NyZXNldF9hc3NvY19pZDsKLQl1aW50MzJfdCBhc3NvY3Jlc2V0X2xvY2Fs
X3RzbjsKLQl1aW50MzJfdCBhc3NvY3Jlc2V0X3JlbW90ZV90c247Ci19OwotCi0jZGVmaW5lIFND
VFBfQVNTT0NfUkVTRVRfREVOSUVEICAgICAgICAweDAwMDQKLSNkZWZpbmUgU0NUUF9BU1NPQ19S
RVNFVF9GQUlMRUQgICAgICAgIDB4MDAwOAotCi0KLS8qIFN0cmVhbSBjaGFuZ2UgZXZlbnQgLSBz
dWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UICovCi1zdHJ1Y3Qgc2N0cF9zdHJl
YW1fY2hhbmdlX2V2ZW50IHsKLQl1aW50MTZfdCBzdHJjaGFuZ2VfdHlwZTsKLQl1aW50MTZfdCBz
dHJjaGFuZ2VfZmxhZ3M7Ci0JdWludDMyX3Qgc3RyY2hhbmdlX2xlbmd0aDsKLQlzY3RwX2Fzc29j
X3Qgc3RyY2hhbmdlX2Fzc29jX2lkOwotCXVpbnQxNl90IHN0cmNoYW5nZV9pbnN0cm1zOwotCXVp
bnQxNl90IHN0cmNoYW5nZV9vdXRzdHJtczsKLX07Ci0KLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hB
TkdFX0RFTklFRAkweDAwMDQKLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRAkweDAw
MDgKLQotCi0vKiBTQ1RQIHNlbmQgZmFpbGVkIGV2ZW50ICovCi1zdHJ1Y3Qgc2N0cF9zZW5kX2Zh
aWxlZF9ldmVudCB7Ci0JdWludDE2X3Qgc3NmZV90eXBlOwotCXVpbnQxNl90IHNzZmVfZmxhZ3M7
Ci0JdWludDMyX3Qgc3NmZV9sZW5ndGg7Ci0JdWludDMyX3Qgc3NmZV9lcnJvcjsKLQlzdHJ1Y3Qg
c2N0cF9zbmRpbmZvIHNzZmVfaW5mbzsKLQlzY3RwX2Fzc29jX3Qgc3NmZV9hc3NvY19pZDsKLQl1
aW50OF90ICBzc2ZlX2RhdGFbXTsKLX07Ci0KLS8qIGZsYWcgdGhhdCBpbmRpY2F0ZXMgc3RhdGUg
b2YgZGF0YSAqLwotI2RlZmluZSBTQ1RQX0RBVEFfVU5TRU5UICAweDAwMDEJLyogaW5xdWV1ZSBu
ZXZlciBvbiB3aXJlICovCi0jZGVmaW5lIFNDVFBfREFUQV9TRU5UICAgIDB4MDAwMgkvKiBvbiB3
aXJlIGF0IGZhaWx1cmUgKi8KLQotLyogU0NUUCBldmVudCBvcHRpb24gKi8KLXN0cnVjdCBzY3Rw
X2V2ZW50IHsKLQlzY3RwX2Fzc29jX3QgICBzZV9hc3NvY19pZDsKLQl1aW50MTZfdCAgICAgICBz
ZV90eXBlOwotCXVpbnQ4X3QgICAgICAgIHNlX29uOwotfTsKLQotdW5pb24gc2N0cF9ub3RpZmlj
YXRpb24gewotCXN0cnVjdCBzY3RwX3RsdiB7Ci0JCXVpbnQxNl90IHNuX3R5cGU7Ci0JCXVpbnQx
Nl90IHNuX2ZsYWdzOwotCQl1aW50MzJfdCBzbl9sZW5ndGg7Ci0JfSBzbl9oZWFkZXI7Ci0Jc3Ry
dWN0IHNjdHBfYXNzb2NfY2hhbmdlIHNuX2Fzc29jX2NoYW5nZTsKLQlzdHJ1Y3Qgc2N0cF9wYWRk
cl9jaGFuZ2Ugc25fcGFkZHJfY2hhbmdlOwotCXN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciBzbl9y
ZW1vdGVfZXJyb3I7Ci0Jc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgc25fc2h1dGRvd25fZXZl
bnQ7Ci0Jc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCBzbl9hZGFwdGF0aW9uX2V2ZW50Owot
CXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHNuX3BkYXBpX2V2ZW50OwotCXN0cnVjdCBzY3RwX2F1
dGhrZXlfZXZlbnQgc25fYXV0aF9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50
IHNuX3NlbmRlcl9kcnlfZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgc25f
c2VuZF9mYWlsZWRfZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50IHNuX3N0
cnJlc2V0X2V2ZW50OwotCXN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50ICBzbl9hc3NvY3Jl
c2V0X2V2ZW50OwotCXN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgc25fc3RyY2hhbmdl
X2V2ZW50OwotfTsKLQotc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlIHsKLQl1aW50OF90IHNj
dHBfZGF0YV9pb19ldmVudDsKLQl1aW50OF90IHNjdHBfYXNzb2NpYXRpb25fZXZlbnQ7Ci0JdWlu
dDhfdCBzY3RwX2FkZHJlc3NfZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3NlbmRfZmFpbHVyZV9ldmVu
dDsKLQl1aW50OF90IHNjdHBfcGVlcl9lcnJvcl9ldmVudDsKLQl1aW50OF90IHNjdHBfc2h1dGRv
d25fZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQ7Ci0JdWludDhf
dCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQ7Ci0JdWludDhfdCBzY3RwX2F1dGhlbnRpY2F0
aW9uX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50OwotCXVpbnQ4X3Qgc2N0
cF9zdHJlYW1fcmVzZXRfZXZlbnQ7Ci19OwotCi0KLQotLyogRmxhZ3MgdGhhdCBnbyBpbnRvIHRo
ZSBzaW5mby0+c2luZm9fZmxhZ3MgZmllbGQgKi8KLSNkZWZpbmUgU0NUUF9OT1RJRklDQVRJT04g
ICAgIDB4MDAxMCAvKiBuZXh0IG1lc3NhZ2UgaXMgYSBub3RpZmljYXRpb24gKi8KLSNkZWZpbmUg
U0NUUF9DT01QTEVURSAgICAgICAgIDB4MDAyMCAvKiBuZXh0IG1lc3NhZ2UgaXMgY29tcGxldGUg
Ki8KLSNkZWZpbmUgU0NUUF9FT0YgICAgICAgICAgICAgIDB4MDEwMCAvKiBTdGFydCBzaHV0ZG93
biBwcm9jZWR1cmVzICovCi0jZGVmaW5lIFNDVFBfQUJPUlQgICAgICAgICAgICAweDAyMDAgLyog
U2VuZCBhbiBBQk9SVCB0byBwZWVyICovCi0jZGVmaW5lIFNDVFBfVU5PUkRFUkVEICAgICAgICAw
eDA0MDAgLyogTWVzc2FnZSBpcyB1bi1vcmRlcmVkICovCi0jZGVmaW5lIFNDVFBfQUREUl9PVkVS
ICAgICAgICAweDA4MDAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnktYWRkcmVzcyAqLwotI2RlZmlu
ZSBTQ1RQX1NFTkRBTEwgICAgICAgICAgMHgxMDAwIC8qIFNlbmQgdGhpcyBvbiBhbGwgYXNzb2Np
YXRpb25zICovCi0jZGVmaW5lIFNDVFBfRU9SICAgICAgICAgICAgICAweDIwMDAgLyogZW5kIG9m
IG1lc3NhZ2Ugc2lnbmFsICovCi0jZGVmaW5lIFNDVFBfU0FDS19JTU1FRElBVEVMWSAweDQwMDAg
LyogU2V0IEktQml0ICovCi0KLSNkZWZpbmUgSU5WQUxJRF9TSU5GT19GTEFHKHgpICgoKHgpICYg
MHhmZmZmZmZmMCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIH4oU0NU
UF9FT0YgfCBTQ1RQX0FCT1JUIHwgU0NUUF9VTk9SREVSRUQgfFwKLQkJCQkgICAgICAgIFNDVFBf
QUREUl9PVkVSIHwgU0NUUF9TRU5EQUxMIHwgU0NUUF9FT1IgfFwKLQkJCQkJU0NUUF9TQUNLX0lN
TUVESUFURUxZKSkgIT0gMCkKLS8qIGZvciB0aGUgZW5kcG9pbnQgKi8KLQotLyogVGhlIGxvd2Vy
IGJ5dGUgaXMgYW4gZW51bWVyYXRpb24gb2YgUFItU0NUUCBwb2xpY2llcyAqLwotI2RlZmluZSBT
Q1RQX1BSX1NDVFBfTk9ORSAweDAwMDAgLyogUmVsaWFibGUgdHJhbnNmZXIgKi8KLSNkZWZpbmUg
U0NUUF9QUl9TQ1RQX1RUTCAgMHgwMDAxIC8qIFRpbWUgYmFzZWQgUFItU0NUUCAqLwotI2RlZmlu
ZSBTQ1RQX1BSX1NDVFBfQlVGICAweDAwMDIgLyogQnVmZmVyIGJhc2VkIFBSLVNDVFAgKi8KLSNk
ZWZpbmUgU0NUUF9QUl9TQ1RQX1JUWCAgMHgwMDAzIC8qIE51bWJlciBvZiByZXRyYW5zbWlzc2lv
bnMgYmFzZWQgUFItU0NUUCAqLwotCi0jZGVmaW5lIFBSX1NDVFBfUE9MSUNZKHgpICAgICAgICAg
KCh4KSAmIDB4MGYpCi0jZGVmaW5lIFBSX1NDVFBfRU5BQkxFRCh4KSAgICAgICAgKFBSX1NDVFBf
UE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9OT05FKQotI2RlZmluZSBQUl9TQ1RQX1RUTF9FTkFC
TEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfVFRMKQotI2RlZmlu
ZSBQUl9TQ1RQX0JVRl9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BS
X1NDVFBfQlVGKQotI2RlZmluZSBQUl9TQ1RQX1JUWF9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BP
TElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfUlRYKQotI2RlZmluZSBQUl9TQ1RQX0lOVkFMSURfUE9M
SUNZKHgpIChQUl9TQ1RQX1BPTElDWSh4KSA+IFNDVFBfUFJfU0NUUF9SVFgpCi0KLQotLyoKLSAq
IHVzZXIgc29ja2V0IG9wdGlvbnM6IHNvY2tldCBBUEkgZGVmaW5lZAotICovCi0vKgotICogcmVh
ZC13cml0ZSBvcHRpb25zCi0gKi8KLSNkZWZpbmUgU0NUUF9SVE9JTkZPICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfQVNTT0NJTkZPICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQX0lOSVRNU0cgICAgICAgICAgICAgICAgICAgIDB4MDAw
MDAwMDMKLSNkZWZpbmUgU0NUUF9OT0RFTEFZICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDA0
Ci0jZGVmaW5lIFNDVFBfQVVUT0NMT1NFICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNQotI2Rl
ZmluZSBTQ1RQX1BSSU1BUllfQUREUiAgICAgICAgICAgICAgIDB4MDAwMDAwMDcKLSNkZWZpbmUg
U0NUUF9BREFQVEFUSU9OX0xBWUVSICAgICAgICAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFNDVFBf
RElTQUJMRV9GUkFHTUVOVFMgICAgICAgICAgMHgwMDAwMDAwOQotI2RlZmluZSBTQ1RQX1BFRVJf
QUREUl9QQVJBTVMgICAgICAgICAgIDB4MDAwMDAwMGEKLS8qIGFuY2lsbGFyeSBkYXRhL25vdGlm
aWNhdGlvbiBpbnRlcmVzdCBvcHRpb25zICovCi0vKiBXaXRob3V0IHRoaXMgYXBwbGllZCB3ZSB3
aWxsIGdpdmUgVjQgYW5kIFY2IGFkZHJlc3NlcyBvbiBhIFY2IHNvY2tldCAqLwotI2RlZmluZSBT
Q1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiAgICAgIDB4MDAwMDAwMGQKLSNkZWZpbmUgU0NUUF9N
QVhTRUcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVmaW5lIFNDVFBfREVMQVlF
RF9TQUNLICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBTQ1RQX0ZSQUdNRU5UX0lO
VEVSTEVBVkUgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9QQVJUSUFMX0RFTElWRVJZ
X1BPSU5UICAgICAweDAwMDAwMDExCi0vKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ICovCi0jZGVm
aW5lIFNDVFBfSE1BQ19JREVOVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxNAotI2RlZmluZSBT
Q1RQX0FVVEhfQUNUSVZFX0tFWSAgICAgICAgICAgIDB4MDAwMDAwMTUKLSNkZWZpbmUgU0NUUF9B
VVRPX0FTQ09ORiAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVmaW5lIFNDVFBfTUFYX0JV
UlNUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQotLyogYXNzb2MgbGV2ZWwgY29udGV4dCAq
LwotI2RlZmluZSBTQ1RQX0NPTlRFWFQgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWEKLS8q
IGV4cGxpY2l0IEVPUiBzaWduYWxsaW5nICovCi0jZGVmaW5lIFNDVFBfRVhQTElDSVRfRU9SICAg
ICAgICAgICAgICAgMHgwMDAwMDAxYgotI2RlZmluZSBTQ1RQX1JFVVNFX1BPUlQgICAgICAgICAg
ICAgICAgIDB4MDAwMDAwMWMKLQotI2RlZmluZSBTQ1RQX0VWRU5UICAgICAgICAgICAgICAgICAg
ICAgIDB4MDAwMDAwMWUKLSNkZWZpbmUgU0NUUF9SRUNWUkNWSU5GTyAgICAgICAgICAgICAgICAw
eDAwMDAwMDFmCi0jZGVmaW5lIFNDVFBfUkVDVk5YVElORk8gICAgICAgICAgICAgICAgMHgwMDAw
MDAyMAotI2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5GTyAgICAgICAgICAgIDB4MDAwMDAwMjEK
LSNkZWZpbmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAgICAgICAgICAweDAwMDAwMDIyCi0jZGVm
aW5lIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCAgICAgMHgwMDAwMDAyNAotCi0jZGVmaW5l
IFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVCAgICAgICAgMHgwMDAwMDkwMCAvKiBzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqLwotCi0vKiBQbHVnZ2FibGUgU3RyZWFtIFNjaGVkdWxpbmcgU29ja2V0
IG9wdGlvbiAqLwotI2RlZmluZSBTQ1RQX1BMVUdHQUJMRV9TUyAgICAgICAgICAgICAgIDB4MDAw
MDEyMDMKLSNkZWZpbmUgU0NUUF9TU19WQUxVRSAgICAgICAgICAgICAgICAgICAweDAwMDAxMjA0
Ci0KLS8qCi0gKiByZWFkLW9ubHkgb3B0aW9ucwotICovCi0jZGVmaW5lIFNDVFBfU1RBVFVTICAg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJf
SU5GTyAgICAgICAgIDB4MDAwMDAxMDEKLS8qIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8KLSNk
ZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktTICAgICAgICAgICAweDAwMDAwMTAyCi0jZGVmaW5l
IFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MgICAgICAgICAgMHgwMDAwMDEwMwotI2RlZmluZSBTQ1RQ
X0dFVF9BU1NPQ19OVU1CRVIgICAgICAgICAgIDB4MDAwMDAxMDQKLSNkZWZpbmUgU0NUUF9HRVRf
QVNTT0NfSURfTElTVCAgICAgICAgICAweDAwMDAwMTA1Ci0jZGVmaW5lIFNDVFBfVElNRU9VVFMg
ICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNgotI2RlZmluZSBTQ1RQX1BSX1NUUkVBTV9TVEFU
VVMgICAgICAgICAgIDB4MDAwMDAxMDcKLSNkZWZpbmUgU0NUUF9QUl9BU1NPQ19TVEFUVVMgICAg
ICAgICAgICAweDAwMDAwMTA4Ci0KLS8qCi0gKiB3cml0ZS1vbmx5IG9wdGlvbnMKLSAqLwotI2Rl
ZmluZSBTQ1RQX1NFVF9QRUVSX1BSSU1BUllfQUREUiAgICAgIDB4MDAwMDAwMDYKLSNkZWZpbmUg
U0NUUF9BVVRIX0NIVU5LICAgICAgICAgICAgICAgICAweDAwMDAwMDEyCi0jZGVmaW5lIFNDVFBf
QVVUSF9LRVkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMwotI2RlZmluZSBTQ1RQX0FVVEhf
REVBQ1RJVkFURV9LRVkgICAgICAgIDB4MDAwMDAwMWQKLSNkZWZpbmUgU0NUUF9BVVRIX0RFTEVU
RV9LRVkgICAgICAgICAgICAweDAwMDAwMDE2Ci0jZGVmaW5lIFNDVFBfUkVTRVRfU1RSRUFNUyAg
ICAgICAgICAgICAgMHgwMDAwMDkwMSAvKiBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICovCi0j
ZGVmaW5lIFNDVFBfUkVTRVRfQVNTT0MgICAgICAgICAgICAgICAgMHgwMDAwMDkwMiAvKiBzY3Rw
X2Fzc29jX3QgKi8KLSNkZWZpbmUgU0NUUF9BRERfU1RSRUFNUyAgICAgICAgICAgICAgICAweDAw
MDAwOTAzIC8qIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICovCi0KLXN0cnVjdCBzY3RwX2luaXRt
c2cgewotCXVpbnQxNl90IHNpbml0X251bV9vc3RyZWFtczsKLQl1aW50MTZfdCBzaW5pdF9tYXhf
aW5zdHJlYW1zOwotCXVpbnQxNl90IHNpbml0X21heF9hdHRlbXB0czsKLQl1aW50MTZfdCBzaW5p
dF9tYXhfaW5pdF90aW1lbzsKLX07Ci0KLXN0cnVjdCBzY3RwX3J0b2luZm8gewotCXNjdHBfYXNz
b2NfdCBzcnRvX2Fzc29jX2lkOwotCXVpbnQzMl90IHNydG9faW5pdGlhbDsKLQl1aW50MzJfdCBz
cnRvX21heDsKLQl1aW50MzJfdCBzcnRvX21pbjsKLX07Ci0KLXN0cnVjdCBzY3RwX2Fzc29jcGFy
YW1zIHsKLQlzY3RwX2Fzc29jX3Qgc2Fzb2NfYXNzb2NfaWQ7Ci0JdWludDMyX3Qgc2Fzb2NfcGVl
cl9yd25kOwotCXVpbnQzMl90IHNhc29jX2xvY2FsX3J3bmQ7Ci0JdWludDMyX3Qgc2Fzb2NfY29v
a2llX2xpZmU7Ci0JdWludDE2X3Qgc2Fzb2NfYXNvY21heHJ4dDsKLQl1aW50MTZfdCBzYXNvY19u
dW1iZXJfcGVlcl9kZXN0aW5hdGlvbnM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zZXRwcmltIHsKLQlz
dHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BfYWRkcjsKLQlzY3RwX2Fzc29jX3Qgc3NwX2Fzc29j
X2lkOwotCXVpbnQ4X3Qgc3NwX3BhZGRpbmdbNF07Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zZXRhZGFw
dGF0aW9uIHsKLQl1aW50MzJfdCAgIHNzYl9hZGFwdGF0aW9uX2luZDsKLX07Ci0KLXN0cnVjdCBz
Y3RwX3BhZGRycGFyYW1zIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsK
LQlzY3RwX2Fzc29jX3Qgc3BwX2Fzc29jX2lkOwotCXVpbnQzMl90IHNwcF9oYmludGVydmFsOwot
CXVpbnQzMl90IHNwcF9wYXRobXR1OwotCXVpbnQzMl90IHNwcF9mbGFnczsKLQl1aW50MzJfdCBz
cHBfaXB2Nl9mbG93bGFiZWw7Ci0JdWludDE2X3Qgc3BwX3BhdGhtYXhyeHQ7Ci0JdWludDhfdCBz
cHBfZHNjcDsKLX07Ci0KLSNkZWZpbmUgU1BQX0hCX0VOQUJMRSAgICAgICAweDAwMDAwMDAxCi0j
ZGVmaW5lIFNQUF9IQl9ESVNBQkxFICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTUFBfSEJfREVN
QU5EICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1BQX1BNVFVEX0VOQUJMRSAgICAweDAwMDAw
MDA4Ci0jZGVmaW5lIFNQUF9QTVRVRF9ESVNBQkxFICAgMHgwMDAwMDAxMAotI2RlZmluZSBTUFBf
SEJfVElNRV9JU19aRVJPIDB4MDAwMDAwODAKLSNkZWZpbmUgU1BQX0lQVjZfRkxPV0xBQkVMICAw
eDAwMDAwMTAwCi0jZGVmaW5lIFNQUF9EU0NQICAgICAgICAgICAgMHgwMDAwMDIwMAotCi0vKiBV
c2VkIGZvciBTQ1RQX01BWFNFRywgU0NUUF9NQVhfQlVSU1QsIFNDVFBfRU5BQkxFX1NUUkVBTV9S
RVNFVCwgYW5kIFNDVFBfQ09OVEVYVCAqLwotc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgewotCXNj
dHBfYXNzb2NfdCBhc3NvY19pZDsKLQl1aW50MzJfdCBhc3NvY192YWx1ZTsKLX07Ci0KLS8qIFRv
IGVuYWJsZSBzdHJlYW0gcmVzZXQgKi8KLSNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFN
X1JFUSAgMHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX0VOQUJMRV9SRVNFVF9BU1NPQ19SRVEgICAw
eDAwMDAwMDAyCi0jZGVmaW5lIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEgIDB4MDAwMDAw
MDQKLSNkZWZpbmUgU0NUUF9FTkFCTEVfVkFMVUVfTUFTSyAgICAgICAgMHgwMDAwMDAwNwotCi1z
dHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zIHsKLQlzY3RwX2Fzc29jX3Qgc3JzX2Fzc29jX2lkOwot
CXVpbnQxNl90IHNyc19mbGFnczsKLQl1aW50MTZfdCBzcnNfbnVtYmVyX3N0cmVhbXM7ICAvKiAw
ID09IEFMTCAqLwotCXVpbnQxNl90IHNyc19zdHJlYW1fbGlzdFtdOyAgIC8qIGxpc3QgaWYgc3Ry
cnN0X251bV9zdHJlYW1zIGlzIG5vdCAwICovCi19OwotCi1zdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFt
cyB7Ci0Jc2N0cF9hc3NvY190CXNhc19hc3NvY19pZDsKLQl1aW50MTZfdAlzYXNfaW5zdHJtczsK
LQl1aW50MTZfdAlzYXNfb3V0c3RybXM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9obWFjYWxnbyB7Ci0J
dWludDMyX3Qgc2htYWNfbnVtYmVyX29mX2lkZW50czsKLQl1aW50MTZfdCBzaG1hY19pZGVudHNb
XTsKLX07Ci0KLS8qIEFVVEggaG1hY19pZCAqLwotI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9S
U1ZEICAgIDB4MDAwMAotI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExICAgIDB4MDAwMQkv
KiBkZWZhdWx0LCBtYW5kYXRvcnkgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2
ICAweDAwMDMKLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMjI0ICAweDAwMDQKLSNkZWZp
bmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMzg0ICAweDAwMDUKLSNkZWZpbmUgU0NUUF9BVVRIX0hN
QUNfSURfU0hBNTEyICAweDAwMDYKLQotCi1zdHJ1Y3Qgc2N0cF9zYWNrX2luZm8gewotCXNjdHBf
YXNzb2NfdCBzYWNrX2Fzc29jX2lkOwotCXVpbnQzMl90IHNhY2tfZGVsYXk7Ci0JdWludDMyX3Qg
c2Fja19mcmVxOwotfTsKLQotc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gewotCXVpbnQxNl90
IHByX3BvbGljeTsKLQl1aW50MzJfdCBwcl92YWx1ZTsKLQlzY3RwX2Fzc29jX3QgcHJfYXNzb2Nf
aWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gewotCXN0cnVjdCBzb2NrYWRkcl9zdG9y
YWdlIHNwaW5mb19hZGRyZXNzOwotCXNjdHBfYXNzb2NfdCBzcGluZm9fYXNzb2NfaWQ7Ci0JaW50
MzJfdCBzcGluZm9fc3RhdGU7Ci0JdWludDMyX3Qgc3BpbmZvX2N3bmQ7Ci0JdWludDMyX3Qgc3Bp
bmZvX3NydHQ7Ci0JdWludDMyX3Qgc3BpbmZvX3J0bzsKLQl1aW50MzJfdCBzcGluZm9fbXR1Owot
fTsKLQotc3RydWN0IHNjdHBfc3RhdHVzIHsKLQlzY3RwX2Fzc29jX3Qgc3N0YXRfYXNzb2NfaWQ7
Ci0JaW50MzJfdCAgc3N0YXRfc3RhdGU7Ci0JdWludDMyX3Qgc3N0YXRfcnduZDsKLQl1aW50MTZf
dCBzc3RhdF91bmFja2RhdGE7Ci0JdWludDE2X3Qgc3N0YXRfcGVuZGRhdGE7Ci0JdWludDE2X3Qg
c3N0YXRfaW5zdHJtczsKLQl1aW50MTZfdCBzc3RhdF9vdXRzdHJtczsKLQl1aW50MzJfdCBzc3Rh
dF9mcmFnbWVudGF0aW9uX3BvaW50OwotCXN0cnVjdCBzY3RwX3BhZGRyaW5mbyBzc3RhdF9wcmlt
YXJ5OwotfTsKLQotLyoKLSAqIHVzZXIgc3RhdGUgdmFsdWVzCi0gKi8KLSNkZWZpbmUgU0NUUF9D
TE9TRUQgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIFNDVFBfQk9VTkQgICAgICAgICAgICAg
IDB4MTAwMAotI2RlZmluZSBTQ1RQX0xJU1RFTiAgICAgICAgICAgICAweDIwMDAKLSNkZWZpbmUg
U0NUUF9DT09LSUVfV0FJVCAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfQ09PS0lFX0VDSE9F
RCAgICAgIDB4MDAwNAotI2RlZmluZSBTQ1RQX0VTVEFCTElTSEVEICAgICAgICAweDAwMDgKLSNk
ZWZpbmUgU0NUUF9TSFVURE9XTl9TRU5UICAgICAgMHgwMDEwCi0jZGVmaW5lIFNDVFBfU0hVVERP
V05fUkVDRUlWRUQgIDB4MDAyMAotI2RlZmluZSBTQ1RQX1NIVVRET1dOX0FDS19TRU5UICAweDAw
NDAKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9QRU5ESU5HICAgMHgwMDgwCi0KLQotI2RlZmluZSBT
Q1RQX0FDVElWRSAgICAgICAweDAwMDEgIC8qIFNDVFBfQUREUl9SRUFDSEFCTEUgKi8KLSNkZWZp
bmUgU0NUUF9JTkFDVElWRSAgICAgMHgwMDAyICAvKiBuZWl0aGVyIFNDVFBfQUREUl9SRUFDSEFC
TEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3IgU0NUUF9BRERSX1VO
Q09ORklSTUVEICovCi0jZGVmaW5lIFNDVFBfVU5DT05GSVJNRUQgIDB4MDIwMCAgLyogU0NUUF9B
RERSX1VOQ09ORklSTUVEICovCi0KLXN0cnVjdCBzY3RwX2F1dGhjaHVua3MgewotCXNjdHBfYXNz
b2NfdCBnYXV0aF9hc3NvY19pZDsKLS8qCXVpbnQzMl90IGdhdXRoX251bWJlcl9vZl9jaHVua3M7
IG5vdCBhdmFpbGFibGUgKi8KLQl1aW50OF90ICBnYXV0aF9jaHVua3NbXTsKLX07Ci0KLXN0cnVj
dCBzY3RwX2Fzc29jX2lkcyB7Ci0JdWludDMyX3QgZ2FpZHNfbnVtYmVyX29mX2lkczsKLQlzY3Rw
X2Fzc29jX3QgZ2FpZHNfYXNzb2NfaWRbXTsKLX07Ci0KLXN0cnVjdCBzY3RwX3NldHBlZXJwcmlt
IHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BwX2FkZHI7Ci0Jc2N0cF9hc3NvY190IHNz
cHBfYXNzb2NfaWQ7Ci0JdWludDhfdCBzc3BwX3BhZGRpbmdbNF07Ci19OwotCi1zdHJ1Y3Qgc2N0
cF9hdXRoY2h1bmsgewotCXVpbnQ4X3Qgc2F1dGhfY2h1bms7Ci19OwotCi0KLXN0cnVjdCBzY3Rw
X2dldF9ub25jZV92YWx1ZXMgewotCXNjdHBfYXNzb2NfdCBnbl9hc3NvY19pZDsKLQl1aW50MzJf
dCBnbl9wZWVyc190YWc7Ci0JdWludDMyX3QgZ25fbG9jYWxfdGFnOwotfTsKLQotCi0vKgotICog
TWFpbiBTQ1RQIGNodW5rIHR5cGVzCi0gKi8KLS8qKioqKioqKioqKioweDAwIHNlcmllcyAqKioq
KioqKioqKi8KLSNkZWZpbmUgU0NUUF9EQVRBICAgICAgICAgICAgICAgMHgwMAotI2RlZmluZSBT
Q1RQX0lOSVRJQVRJT04gICAgICAgICAweDAxCi0jZGVmaW5lIFNDVFBfSU5JVElBVElPTl9BQ0sg
ICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9TRUxFQ1RJVkVfQUNLICAgICAgMHgwMwotI2RlZmluZSBT
Q1RQX0hFQVJUQkVBVF9SRVFVRVNUICAweDA0Ci0jZGVmaW5lIFNDVFBfSEVBUlRCRUFUX0FDSyAg
ICAgIDB4MDUKLSNkZWZpbmUgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTiAgMHgwNgotI2RlZmluZSBT
Q1RQX1NIVVRET1dOICAgICAgICAgICAweDA3Ci0jZGVmaW5lIFNDVFBfU0hVVERPV05fQUNLICAg
ICAgIDB4MDgKLSNkZWZpbmUgU0NUUF9PUEVSQVRJT05fRVJST1IgICAgMHgwOQotI2RlZmluZSBT
Q1RQX0NPT0tJRV9FQ0hPICAgICAgICAweDBhCi0jZGVmaW5lIFNDVFBfQ09PS0lFX0FDSyAgICAg
ICAgIDB4MGIKLSNkZWZpbmUgU0NUUF9FQ05fRUNITyAgICAgICAgICAgMHgwYwotI2RlZmluZSBT
Q1RQX0VDTl9DV1IgICAgICAgICAgICAweDBkCi0jZGVmaW5lIFNDVFBfU0hVVERPV05fQ09NUExF
VEUgIDB4MGUKLS8qIFJGQzQ4OTUgKi8KLSNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElPTiAgICAg
MHgwZgotLyogRVkgbnJfc2FjayBjaHVuayBpZCovCi0jZGVmaW5lIFNDVFBfTlJfU0VMRUNUSVZF
X0FDSyAgIDB4MTAKLS8qKioqKioqKioqKioweDQwIHNlcmllcyAqKioqKioqKioqKi8KLS8qKioq
KioqKioqKioweDgwIHNlcmllcyAqKioqKioqKioqKi8KLS8qIFJGQzUwNjEgKi8KLSNkZWZpbmUJ
U0NUUF9BU0NPTkZfQUNLICAgICAgICAgMHg4MAotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXBrdGRy
cHNjdHAgKi8KLSNkZWZpbmUgU0NUUF9QQUNLRVRfRFJPUFBFRCAgICAgMHg4MQotLyogZHJhZnQt
aWV0Zi1zdGV3YXJ0LXN0cnJlc2V0LXh4eCAqLwotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVCAg
ICAgICAweDgyCi0KLS8qIFJGQzQ4MjAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZp
bmUgU0NUUF9QQURfQ0hVTksgICAgICAgICAgMHg4NAotLyoqKioqKioqKioqKjB4YzAgc2VyaWVz
ICoqKioqKioqKioqLwotLyogUkZDMzc1OCAqLwotI2RlZmluZSBTQ1RQX0ZPUldBUkRfQ1VNX1RT
TiAgICAweGMwCi0vKiBSRkM1MDYxICovCi0jZGVmaW5lIFNDVFBfQVNDT05GICAgICAgICAgICAg
IDB4YzEKLQotc3RydWN0IHNjdHBfYXV0aGtleSB7Ci0Jc2N0cF9hc3NvY190IHNjYV9hc3NvY19p
ZDsKLQl1aW50MTZfdCBzY2Ffa2V5bnVtYmVyOwotCXVpbnQxNl90IHNjYV9rZXlsZW5ndGg7Ci0J
dWludDhfdCAgc2NhX2tleVtdOwotfTsKLQotc3RydWN0IHNjdHBfYXV0aGtleWlkIHsKLQlzY3Rw
X2Fzc29jX3Qgc2NhY3RfYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2NhY3Rfa2V5bnVtYmVyOwotfTsK
LQotc3RydWN0IHNjdHBfY2Nfb3B0aW9uIHsKLQlpbnQgb3B0aW9uOwotCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlIGFpZF92YWx1ZTsKLX07Ci0KLXN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSB7Ci0J
c2N0cF9hc3NvY190IGFzc29jX2lkOwotCXVpbnQxNl90IHN0cmVhbV9pZDsKLQl1aW50MTZfdCBz
dHJlYW1fdmFsdWU7Ci19OwotCi1zdHJ1Y3Qgc2N0cF90aW1lb3V0cyB7Ci0Jc2N0cF9hc3NvY190
IHN0aW1vX2Fzc29jX2lkOwotCXVpbnQzMl90IHN0aW1vX2luaXQ7Ci0JdWludDMyX3Qgc3RpbW9f
ZGF0YTsKLQl1aW50MzJfdCBzdGltb19zYWNrOwotCXVpbnQzMl90IHN0aW1vX3NodXRkb3duOwot
CXVpbnQzMl90IHN0aW1vX2hlYXJ0YmVhdDsKLQl1aW50MzJfdCBzdGltb19jb29raWU7Ci0JdWlu
dDMyX3Qgc3RpbW9fc2h1dGRvd25hY2s7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9wcnN0YXR1cyB7Ci0J
c2N0cF9hc3NvY190IHNwcnN0YXRfYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc3Byc3RhdF9zaWQ7Ci0J
dWludDE2X3Qgc3Byc3RhdF9wb2xpY3k7Ci0JdWludDY0X3Qgc3Byc3RhdF9hYmFuZG9uZWRfdW5z
ZW50OwotCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3NlbnQ7Ci19OwotCi0vKiBTdGFuZGFy
ZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sICovCi0jZGVmaW5lIFNDVFBfQ0NfUkZDMjU4MSAgICAg
ICAgIDB4MDAwMDAwMDAKLS8qIEhpZ2ggU3BlZWQgVENQIENvbmdlc3Rpb24gQ29udHJvbCAoRmxv
eWQpICovCi0jZGVmaW5lIFNDVFBfQ0NfSFNUQ1AgICAgICAgICAgIDB4MDAwMDAwMDEKLS8qIEhU
Q1AgQ29uZ2VzdGlvbiBDb250cm9sICovCi0jZGVmaW5lIFNDVFBfQ0NfSFRDUCAgICAgICAgICAg
IDB4MDAwMDAwMDIKLS8qIFJUQ0MgQ29uZ2VzdGlvbiBDb250cm9sIC0gUkZDMjU4MSBwbHVzICov
Ci0jZGVmaW5lIFNDVFBfQ0NfUlRDQyAgICAgICAgICAgIDB4MDAwMDAwMDMKLQotI2RlZmluZSBT
Q1RQX0NDX09QVF9SVENDX1NFVE1PREUgMHgwMDAwMjAwMAotI2RlZmluZSBTQ1RQX0NDX09QVF9V
U0VfRENDQ19FQyAgMHgwMDAwMjAwMQotI2RlZmluZSBTQ1RQX0NDX09QVF9TVEVBRFlfU1RFUCAg
MHgwMDAwMjAwMgotCi0jZGVmaW5lIFNDVFBfQ01UX09GRiAgICAgICAgICAgIDAKLSNkZWZpbmUg
U0NUUF9DTVRfQkFTRSAgICAgICAgICAgMQotI2RlZmluZSBTQ1RQX0NNVF9SUFYxICAgICAgICAg
ICAyCi0jZGVmaW5lIFNDVFBfQ01UX1JQVjIgICAgICAgICAgIDMKLSNkZWZpbmUgU0NUUF9DTVRf
TVBUQ1AgICAgICAgICAgNAotI2RlZmluZSBTQ1RQX0NNVF9NQVggICAgICAgICAgICBTQ1RQX0NN
VF9NUFRDUAotCi0vKiBSUyAtIFN1cHBvcnRlZCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGVzIGZv
ciBwbHVnZ2FibGUKLSAqIHN0cmVhbSBzY2hlZHVsaW5nCi0gKi8KLS8qIERlZmF1bHQgc2ltcGxl
IHJvdW5kLXJvYmluICovCi0jZGVmaW5lIFNDVFBfU1NfREVGQVVMVCAgICAgICAgICAgICAweDAw
MDAwMDAwCi0vKiBSZWFsIHJvdW5kLXJvYmluICovCi0jZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9C
SU4gICAgICAgICAweDAwMDAwMDAxCi0vKiBSZWFsIHJvdW5kLXJvYmluIHBlciBwYWNrZXQgKi8K
LSNkZWZpbmUgU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQgIDB4MDAwMDAwMDIKLS8qIFByaW9y
aXR5ICovCi0jZGVmaW5lIFNDVFBfU1NfUFJJT1JJVFkgICAgICAgICAgICAweDAwMDAwMDAzCi0v
KiBGYWlyIEJhbmR3aWR0aCAqLwotI2RlZmluZSBTQ1RQX1NTX0ZBSVJfQkFORFdJVEggICAgICAg
MHgwMDAwMDAwNAotLyogRmlyc3QtY29tZSwgZmlyc3Qtc2VydmUgKi8KLSNkZWZpbmUgU0NUUF9T
U19GSVJTVF9DT01FICAgICAgICAgIDB4MDAwMDAwMDUKLQotLyoqKioqKioqKioqKioqKioqKioq
IFN5c3RlbSBjYWxscyAqKioqKioqKioqKioqLwotCi1zdHJ1Y3Qgc29ja2V0OwotCi12b2lkCi11
c3JzY3RwX2luaXQodWludDE2X3QsCi0gICAgICAgICAgICAgaW50ICgqKSh2b2lkICphZGRyLCB2
b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiks
Ci0gICAgICAgICAgICAgdm9pZCAoKikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKTsKLQotc3Ry
dWN0IHNvY2tldCAqCi11c3JzY3RwX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHBy
b3RvY29sLAotICAgICAgICAgICAgICAgaW50ICgqcmVjZWl2ZV9jYikoc3RydWN0IHNvY2tldCAq
c29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZv
LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKSwKLSAgICAgICAgICAgICAgIGludCAoKnNlbmRf
Y2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUpLAotICAgICAgICAgICAg
ICAgdWludDMyX3Qgc2JfdGhyZXNob2xkLAotICAgICAgICAgICAgICAgdm9pZCAqdWxwX2luZm8p
OwotCi1pbnQKLXVzcnNjdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAg
ICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgaW50IG9wdGlvbl9uYW1l
LAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92YWx1ZSwKLSAgICAgICAg
ICAgICAgICAgICBzb2NrbGVuX3Qgb3B0aW9uX2xlbik7Ci0KLWludAotdXNyc2N0cF9nZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKLSAg
ICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uX25hbWUsCi0gICAgICAgICAgICAgICAgICAgdm9p
ZCAqb3B0aW9uX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqb3B0aW9uX2xl
bik7Ci0KLWludAotdXNyc2N0cF9nZXRwYWRkcnMoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAg
ICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCi0gICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHIgKipyYWRkcnMpOwotCi12b2lkCi11c3JzY3RwX2ZyZWVwYWRkcnMoc3RydWN0IHNvY2th
ZGRyICphZGRycyk7Ci0KLWludAotdXNyc2N0cF9nZXRsYWRkcnMoc3RydWN0IHNvY2tldCAqc28s
Ci0gICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCi0gICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpOwotCi12b2lkCi11c3JzY3RwX2ZyZWVsYWRkcnMoc3Ry
dWN0IHNvY2thZGRyICphZGRycyk7Ci0KLXNzaXplX3QKLXVzcnNjdHBfc2VuZHYoc3RydWN0IHNv
Y2tldCAqc28sCi0gICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAg
IHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCi0gICAgICAg
ICAgICAgIGludCBhZGRyY250LAotICAgICAgICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAg
ICAgICBzb2NrbGVuX3QgaW5mb2xlbiwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90
eXBlLAotICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwotCi1zc2l6ZV90Ci11c3JzY3RwX3JlY3Z2
KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICB2b2lkICpkYnVmLAotICAgICAgICAg
ICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCi0g
ICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZyb21sZW4sCi0gICAgICAgICAgICAgIHZvaWQgKmlu
Zm8sCi0gICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKLSAgICAgICAgICAgICAgdW5z
aWduZWQgaW50ICppbmZvdHlwZSwKLSAgICAgICAgICAgICAgaW50ICptc2dfZmxhZ3MpOwotCi1p
bnQKLXVzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKm5hbWUsCi0gICAgICAgICAgICAgc29ja2xlbl90IG5hbWVsZW4pOwotCi0jZGVm
aW5lIFNDVFBfQklORFhfQUREX0FERFIgMHgwMDAwODAwMQotI2RlZmluZSBTQ1RQX0JJTkRYX1JF
TV9BRERSIDB4MDAwMDgwMDIKLQotaW50Ci11c3JzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKnNv
LAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLAotICAgICAgICAgICAgICBp
bnQgYWRkcmNudCwKLSAgICAgICAgICAgICAgaW50IGZsYWdzKTsKLQotaW50Ci11c3JzY3RwX2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgIGludCBiYWNrbG9nKTsKLQot
c3RydWN0IHNvY2tldCAqCi11c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGFuYW1lLAotICAgICAgICAgICAgICAgc29ja2xl
bl90ICogYW5hbWVsZW4pOwotCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfcGVlbG9mZihzdHJ1
Y3Qgc29ja2V0ICosIHNjdHBfYXNzb2NfdCk7Ci0KLWludAotdXNyc2N0cF9jb25uZWN0KHN0cnVj
dCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwKLSAg
ICAgICAgICAgICAgICBzb2NrbGVuX3QgbmFtZWxlbik7Ci0KLWludAotdXNyc2N0cF9jb25uZWN0
eChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNvY2th
ZGRyICphZGRycywgaW50IGFkZHJjbnQsCi0gICAgICAgICAgICAgICAgIHNjdHBfYXNzb2NfdCAq
aWQpOwotCi12b2lkCi11c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKTsKLQotc2N0cF9h
c3NvY190Ci11c3JzY3RwX2dldGFzc29jaWQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKik7Ci0KLWludAotdXNyc2N0cF9maW5pc2godm9pZCk7Ci0KLWludAotdXNyc2N0cF9zaHV0
ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdyk7Ci0KLXZvaWQKLXVzcnNjdHBfY29ubmlu
cHV0KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVpbnQ4X3QpOwotCi1pbnQKLXVzcnNj
dHBfc2V0X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICosIGludCk7Ci0KLWludAotdXNyc2N0
cF9nZXRfbm9uX2Jsb2NraW5nKHN0cnVjdCBzb2NrZXQgKik7Ci0KLXZvaWQKLXVzcnNjdHBfcmVn
aXN0ZXJfYWRkcmVzcyh2b2lkICopOwotCi12b2lkCi11c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVz
cyh2b2lkICopOwotCi1pbnQKLXVzcnNjdHBfc2V0X3VscGluZm8oc3RydWN0IHNvY2tldCAqLCB2
b2lkICopOwotCi0jZGVmaW5lIFNDVFBfRFVNUF9PVVRCT1VORCAxCi0jZGVmaW5lIFNDVFBfRFVN
UF9JTkJPVU5EICAwCi0KLWNoYXIgKgotdXNyc2N0cF9kdW1wcGFja2V0KGNvbnN0IHZvaWQgKiwg
c2l6ZV90LCBpbnQpOwotCi12b2lkCi11c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGNoYXIgKik7Ci0K
LXZvaWQKLXVzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKHZvaWQpOwotCi12b2lkCi11c3Jz
Y3RwX2Rpc2FibGVfY3JjMzJjX29mZmxvYWQodm9pZCk7Ci0KLXVpbnQzMl90Ci11c3JzY3RwX2Ny
YzMyYyh2b2lkICosIHNpemVfdCk7Ci0KLSNkZWZpbmUgVVNSU0NUUF9TWVNDVExfREVDTChfX2Zp
ZWxkKSAgICAgICAgICAgICAgICBcCi12b2lkIHVzcnNjdHBfc3lzY3RsX3NldF8gIyMgX19maWVs
ZCh1aW50MzJfdCB2YWx1ZSk7XAotdWludDMyX3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyBfX2Zp
ZWxkKHZvaWQpOwotCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2VuZHNwYWNlKQotVVNSU0NU
UF9TWVNDVExfREVDTChzY3RwX3JlY3ZzcGFjZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9h
dXRvX2FzY29uZikKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9tdWx0aXBsZV9hc2NvbmZzKQot
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2Vjbl9lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9ERUNM
KHNjdHBfcHJfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2F1dGhfZW5hYmxlKQot
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2FzY29uZl9lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfcmVjb25maWdfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX25yc2Fj
a19lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcGt0ZHJvcF9lbmFibGUpCi0jaWYg
IWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbm9f
Y3N1bV9vbl9sb29wYmFjaykKLSNlbmRpZgotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3BlZXJf
Y2h1bmtfb2gpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpCi1V
U1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkKLVVTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9oYXNodGJsc2l6ZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wY2J0
YmxzaXplKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21pbl9zcGxpdF9wb2ludCkKLVVTUlND
VFBfU1lTQ1RMX0RFQ0woc2N0cF9jaHVua3NjYWxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3Rw
X2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2Fj
a19mcmVxX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc3lzdGVtX2ZyZWVfcmVz
Y19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCkK
LVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkKLVVT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkKLVVTUlNDVFBf
U1lTQ1RMX0RFQ0woc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfcnRvX21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3J0b19t
aW5fZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0
KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0KQotVVNSU0NU
UF9TWVNDVExfREVDTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpCi1VU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNM
KHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3Bh
dGhfcnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2FkZF9tb3JlX3Ro
cmVzaG9sZCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2Rl
ZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZh
dWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2NtdF9vbl9vZmYpCi1VU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfY210X3VzZV9kYWMpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNlX2N3
bmRfYmFzZWRfbWF4YnVyc3QpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbmF0X2ZyaWVuZGx5
KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX0wyX2FiY192YXJpYWJsZSkKLVVTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9kb19kcmFpbikKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oYl9tYXhidXJzdCkKLVVT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkKLVVT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9taW5fcmVzaWR1YWwpCi1VU1JTQ1RQX1NZU0NUTF9ERUNM
KHNjdHBfbWF4X3JldHJhbl9jaHVuaykKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9sb2dnaW5n
X2xldmVsKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfY2NfbW9kdWxlKQotVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKQotVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX21vYmlsaXR5X2Jhc2UpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
bW9iaWxpdHlfZmFzdGhhbmRvZmYpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdHNfaW5j
bHVkZV9uYXRfZnJpZW5kbHkpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdWRwX3R1bm5lbGlu
Z19wb3J0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5
KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3Z0YWdfdGltZV93YWl0KQotVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX2JsYWNraG9sZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kaWFnX2lu
Zm9fY29kZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkK
LVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkKLVVTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0
cF9ydHR2YXJfYncpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnR0dmFyX3J0dCkKLVVTUlND
VFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfZXFyZXQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfc3RlYWR5X3N0ZXApCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNlX2RjY2NfZWNuKQot
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpCi1VU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfaW5pdGlhbF9jd25kKQotI2lmZGVmIFNDVFBfREVCVUcKLVVTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9kZWJ1Z19vbikKLS8qIE1vcmUgc3BlY2lmaWMgdmFsdWVzIGNhbiBiZSBm
b3VuZCBpbiBzY3RwX2NvbnN0YW50cywgYnV0Ci0gKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUg
cGFydCBvZiB0aGUgQVBJLgotICovCi0jZGVmaW5lIFNDVFBfREVCVUdfTk9ORSAweDAwMDAwMDAw
Ci0jZGVmaW5lIFNDVFBfREVCVUdfQUxMICAweGZmZmZmZmZmCi0jZW5kaWYKLSN1bmRlZiBVU1JT
Q1RQX1NZU0NUTF9ERUNMCi1zdHJ1Y3Qgc2N0cF90aW1ldmFsIHsKLQl1aW50MzJfdCB0dl9zZWM7
Ci0JdWludDMyX3QgdHZfdXNlYzsKLX07Ci0KLXN0cnVjdCBzY3Rwc3RhdCB7Ci0Jc3RydWN0IHNj
dHBfdGltZXZhbCBzY3Rwc19kaXNjb250aW51aXR5dGltZTsgLyogc2N0cFN0YXRzIDE4IChUaW1l
U3RhbXApICovCi0JLyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3MyAqLwotCXVpbnQzMl90ICBz
Y3Rwc19jdXJyZXN0YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDEgICAoR2F1Z2UzMikgKi8K
LQl1aW50MzJfdCAgc2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAgLyogc2N0cFN0YXRzICAyIChD
b3VudGVyMzIpICovCi0JdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRlc3RhYjsKLQl1aW50MzJfdCAg
c2N0cHNfY29sbGlzaW9uZXN0YWI7Ci0JdWludDMyX3QgIHNjdHBzX3Bhc3NpdmVlc3RhYjsgICAg
ICAgIC8qIHNjdHBTdGF0cyAgMyAoQ291bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19hYm9y
dGVkOyAgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50ZXIzMikgKi8KLQl1aW50MzJf
dCAgc2N0cHNfc2h1dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0YXRzICA1IChDb3VudGVyMzIp
ICovCi0JdWludDMyX3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAgICAgIC8qIHNjdHBTdGF0cyAg
NiAoQ291bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19jaGVja3N1bWVycm9yczsgICAgICAv
KiBzY3RwU3RhdHMgIDcgKENvdW50ZXIzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfb3V0Y29udHJv
bGNodW5rczsgICAgLyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNj
dHBzX291dG9yZGVyY2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAgOSAoQ291bnRlcjY0KSAqLwot
CXVpbnQzMl90ICBzY3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgMTAgKENv
dW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9sY2h1bmtzOyAgICAgLyogc2N0
cFN0YXRzIDExIChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBzX2lub3JkZXJjaHVua3M7
ICAgICAgIC8qIHNjdHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19p
bnVub3JkZXJjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENvdW50ZXI2NCkgKi8KLQl1aW50
MzJfdCAgc2N0cHNfZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0cFN0YXRzIDE0IChDb3VudGVy
NjQpICovCi0JdWludDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsgICAgICAgIC8qIHNjdHBTdGF0
cyAxNSAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19vdXRwYWNrZXRzOyAgICAgICAg
ICAvKiBzY3RwU3RhdHMgMTYgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5wYWNr
ZXRzOyAgICAgICAgICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVyNjQpICovCi0KLQkvKiBpbnB1
dCBzdGF0aXN0aWNzOiAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2cGFja2V0czsgICAgICAgICAv
KiB0b3RhbCBpbnB1dCBwYWNrZXRzICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0
YWdyYW1zOyAgICAgICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMgICAgICAqLwotCXVpbnQzMl90
ICBzY3Rwc19yZWN2cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBwYWNrZXRzIHRoYXQgaGFkIGRh
dGEgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAgICAgICAgLyogdG90YWwgaW5w
dXQgU0FDSyBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmRhdGE7ICAgICAgICAg
ICAgLyogdG90YWwgaW5wdXQgREFUQSBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVj
dmR1cGRhdGE7ICAgICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGljYXRlIERBVEEgY2h1bmtzICov
Ci0JdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIGlucHV0IEhC
IGNodW5rcyAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXRhY2s7ICAgIC8q
IHRvdGFsIGlucHV0IEhCLUFDSyBjaHVua3MgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZlY25l
OyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMyX3Qg
IHNjdHBzX3JlY3ZhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEFVVEggY2h1bmtzICAg
ICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsgICAgIC8qIHRvdGFsIGlucHV0
IGNodW5rcyBtaXNzaW5nIEFVVEggKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxobWFjaWQ7
ICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBpZHMgcmVjZWl2ZWQgKi8KLQl1
aW50MzJfdCAgc2N0cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGlu
dmFsaWQgc2VjcmV0IGlkcyByZWNlaXZlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2YXV0aGZh
aWxlZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWlsZWQgKi8KLQl1aW50MzJfdCAg
c2N0cHNfcmVjdmV4cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIHJlY2VpdmVzIGFs
bCBvbmUgY2h1bmsgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3NtOyAgICAgICAgLyog
dG90YWwgZmFzdCBwYXRoIG11bHRpLXBhcnQgZGF0YSAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2
bm9jcmM7Ci0JdWludDMyX3QgIHNjdHBzX3JlY3Zzd2NyYzsKLQl1aW50MzJfdCAgc2N0cHNfcmVj
dmh3Y3JjOwotCi0JLyogb3V0cHV0IHN0YXRpc3RpY3M6ICovCi0JdWludDMyX3QgIHNjdHBzX3Nl
bmRwYWNrZXRzOyAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBwYWNrZXRzICAgICAgICovCi0JdWlu
dDMyX3QgIHNjdHBzX3NlbmRzYWNrczsgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBTQUNLcyAg
ICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRkYXRhOyAgICAgICAgICAgIC8qIHRvdGFs
IG91dHB1dCBEQVRBIGNodW5rcyAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRyZXRyYW5zZGF0
YTsgICAgIC8qIHRvdGFsIG91dHB1dCByZXRyYW5zbWl0dGVkIERBVEEgY2h1bmtzICovCi0JdWlu
dDMyX3QgIHNjdHBzX3NlbmRmYXN0cmV0cmFuczsgICAgIC8qIHRvdGFsIG91dHB1dCBmYXN0IHJl
dHJhbnNtaXR0ZWQgREFUQSBjaHVua3MgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZG11bHRmYXN0
cmV0cmFuczsgLyogdG90YWwgRlIncyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhhbiBvbmNlCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHNhbWUgY2h1bmsgKHUtZGVs
IG11bHRpLWZyIGFsZ28pLgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGhlYXJ0YmVhdDsgICAgICAgLyogdG90YWwgb3V0cHV0
IEhCIGNodW5rcyAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGVjbmU7ICAgICAgICAgICAg
LyogdG90YWwgb3V0cHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRh
dXRoOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBBVVRIIGNodW5rcyBGSVhNRSAgICovCi0J
dWludDMyX3QgIHNjdHBzX3NlbmRlcnJvcnM7ICAgICAgICAgIC8qIGlwX291dHB1dCBlcnJvciBj
b3VudGVyICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRub2NyYzsKLQl1aW50MzJfdCAgc2N0cHNf
c2VuZHN3Y3JjOwotCXVpbnQzMl90ICBzY3Rwc19zZW5kaHdjcmM7Ci0JLyogUENLRFJPUFJFUCBz
dGF0aXN0aWNzOiAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwZm1ib3g7ICAgICAgICAgICAvKiBQ
YWNrZXQgZHJvcCBmcm9tIG1pZGRsZSBib3ggKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGZlaG9z
OyAgICAgICAgICAgLyogUC1kcm9wIGZyb20gZW5kIGhvc3QgKi8KLQl1aW50MzJfdCAgc2N0cHNf
cGRycG1iZGE7ICAgICAgICAgICAgLyogUC1kcm9wcyB3aXRoIGRhdGEgKi8KLQl1aW50MzJfdCAg
c2N0cHNfcGRycG1iY3Q7ICAgICAgICAgICAgLyogUC1kcm9wcywgbm9uLWRhdGEsIG5vbi1lbmRo
b3N0ICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBid3JwdDsgICAgICAgICAgIC8qIFAtZHJvcCwg
bm9uLWVuZGhvc3QsIGJhbmR3aWR0aCByZXAgb25seSAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJw
Y3J1cHQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2ggZm9yIGNodW5rIGhlYWRlciAq
LwotCXVpbnQzMl90ICBzY3Rwc19wZHJwbmVkYXQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBl
bm91Z2ggZGF0YSB0byBjb25maXJtICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBwZGJyazsgICAg
ICAgICAgIC8qIFAtZHJvcCwgd2hlcmUgcHJvY2Vzc19jaHVua19kcm9wIHNhaWQgYnJlYWsgKi8K
LQl1aW50MzJfdCAgc2N0cHNfcGRycHRzbm5mOyAgICAgICAgICAgLyogUC1kcm9wLCBjb3VsZCBu
b3QgZmluZCBUU04gKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGRuZm5kOyAgICAgICAgICAgLyog
UC1kcm9wLCBhdHRlbXB0IHJldmVyc2UgVFNOIGxvb2t1cCAqLwotCXVpbnQzMl90ICBzY3Rwc19w
ZHJwZGl3bnA7ICAgICAgICAgICAvKiBQLWRyb3AsIGUtaG9zdCBjb25maXJtcyB6ZXJvLXJ3bmQg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGRpenJ3OyAgICAgICAgICAgLyogUC1kcm9wLCBtaWRi
b3ggY29uZmlybXMgbm8gc3BhY2UgKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGJhZGQ7ICAgICAg
ICAgICAgLyogUC1kcm9wLCBkYXRhIGRpZCBub3QgbWF0Y2ggVFNOICovCi0JdWludDMyX3QgIHNj
dHBzX3BkcnBtYXJrOyAgICAgICAgICAgIC8qIFAtZHJvcCwgVFNOJ3MgbWFya2VkIGZvciBGYXN0
IFJldHJhbiAqLwotCS8qIHRpbWVvdXRzICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9pdGVyYXRv
cjsgICAgICAgIC8qIE51bWJlciBvZiBpdGVyYXRvciB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVp
bnQzMl90ICBzY3Rwc190aW1vZGF0YTsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgVDMgZGF0YSB0
aW1lIG91dHMgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3dpbmRvd3Byb2JlOyAgICAgLyogTnVt
YmVyIG9mIHdpbmRvdyBwcm9iZSAoVDMpIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3Qg
IHNjdHBzX3RpbW9pbml0OyAgICAgICAgICAgIC8qIE51bWJlciBvZiBJTklUIHRpbWVycyB0aGF0
IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9zYWNrOyAgICAgICAgICAgIC8qIE51bWJl
ciBvZiBzYWNrIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9zaHV0
ZG93bjsgICAgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biB0aW1lcnMgdGhhdCBmaXJlZCAqLwot
CXVpbnQzMl90ICBzY3Rwc190aW1vaGVhcnRiZWF0OyAgICAgICAvKiBOdW1iZXIgb2YgaGVhcnRi
ZWF0IHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9jb29raWU7ICAg
ICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIGNvb2tpZSB0aW1lb3V0IGZpcmVkICovCi0JdWlu
dDMyX3QgIHNjdHBzX3RpbW9zZWNyZXQ7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhbiBl
bmRwb2ludCBjaGFuZ2VkIGl0cyBjb29raWUgc2VjcmV0Ki8KLQl1aW50MzJfdCAgc2N0cHNfdGlt
b3BhdGhtdHU7ICAgICAgICAgLyogTnVtYmVyIG9mIFBNVFUgdGltZXJzIHRoYXQgZmlyZWQgKi8K
LQl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duYWNrOyAgICAgLyogTnVtYmVyIG9mIHNodXRk
b3duIGFjayB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRv
d25ndWFyZDsgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gZ3VhcmQgdGltZXJzIHRoYXQgZmlyZWQg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3N0cm1yc3Q7ICAgICAgICAgLyogTnVtYmVyIG9mIHN0
cmVhbSByZXNldCB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vZWFy
bHlmcjsgICAgICAgICAvKiBOdW1iZXIgb2YgZWFybHkgRlIgdGltZXJzIHRoYXQgZmlyZWQgKi8K
LQl1aW50MzJfdCAgc2N0cHNfdGltb2FzY29uZjsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVz
IGFuIGFzY29uZiB0aW1lciBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vZGVscHJpbTsJ
ICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYSBwcmltX2RlbGV0ZWQgdGltZXIgZmlyZWQgKi8KLQl1
aW50MzJfdCAgc2N0cHNfdGltb2F1dG9jbG9zZTsgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGF1
dG8gY2xvc2UgdGltZXIgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb2Fzc29ja2lsbDsg
ICAgICAgLyogTnVtYmVyIG9mIGFzb2MgZnJlZSB0aW1lcnMgZXhwaXJlZCAqLwotCXVpbnQzMl90
ICBzY3Rwc190aW1vaW5wa2lsbDsgICAgICAgICAvKiBOdW1iZXIgb2YgaW5wIGZyZWUgdGltZXJz
IGV4cGlyZWQgKi8KLQkvKiBmb3JtZXIgZWFybHkgRlIgY291bnRlcnMgKi8KLQl1aW50MzJfdCAg
c2N0cHNfc3BhcmVbMTFdOwotCS8qIG90aGVycyAqLwotCXVpbnQzMl90ICBzY3Rwc19oZHJvcHM7
ICAgICAgICAgICAgICAvKiBwYWNrZXQgc2hvcnRlciB0aGFuIGhlYWRlciAqLwotCXVpbnQzMl90
ICBzY3Rwc19iYWRzdW07ICAgICAgICAgICAgICAvKiBjaGVja3N1bSBlcnJvciAgICAgICAgICAg
ICAqLwotCXVpbnQzMl90ICBzY3Rwc19ub3BvcnQ7ICAgICAgICAgICAgICAvKiBubyBlbmRwb2lu
dCBmb3IgcG9ydCAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19iYWR2dGFnOyAgICAgICAgICAg
ICAvKiBiYWQgdi10YWcgICAgICAgICAgICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19iYWRz
aWQ7ICAgICAgICAgICAgICAvKiBiYWQgU0lEICAgICAgICAgICAgICAgICAgICAqLwotCXVpbnQz
Ml90ICBzY3Rwc19ub21lbTsgICAgICAgICAgICAgICAvKiBubyBtZW1vcnkgICAgICAgICAgICAg
ICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19mYXN0cmV0cmFuc2lucnR0OyAgICAvKiBudW1iZXIg
b2YgbXVsdGlwbGUgRlIgaW4gYSBSVFQgd2luZG93ICovCi0JdWludDMyX3QgIHNjdHBzX21hcmtl
ZHJldHJhbnM7Ci0JdWludDMyX3QgIHNjdHBzX25hZ2xlc2VudDsgICAgICAgICAgIC8qIG5hZ2xl
IGFsbG93ZWQgc2VuZGluZyAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX25hZ2xlcXVldWVkOyAg
ICAgICAgIC8qIG5hZ2xlIGRvZXNuJ3QgYWxsb3cgc2VuZGluZyAqLwotCXVpbnQzMl90ICBzY3Rw
c19tYXhidXJzdHF1ZXVlZDsgICAgICAvKiBtYXggYnVyc3QgZG9lc24ndCBhbGxvdyBzZW5kaW5n
ICovCi0JdWludDMyX3QgIHNjdHBzX2lmbm9tZW1xdWV1ZWQ7ICAgICAgIC8qIGxvb2sgYWhlYWQg
dGVsbHMgdXMgbm8gbWVtb3J5IGluCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIGludGVyZmFjZSByaW5nIGJ1ZmZlciBPUiB3ZSBoYWQgYQotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBzZW5kIGVycm9yIGFuZCBhcmUgcXVldWluZyBvbmUg
c2VuZC4KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDMy
X3QgIHNjdHBzX3dpbmRvd3Byb2JlZDsgICAgICAgIC8qIHRvdGFsIG51bWJlciBvZiB3aW5kb3cg
cHJvYmVzIHNlbnQgKi8KLQl1aW50MzJfdCAgc2N0cHNfbG93bGV2ZWxlcnI7ICAgICAgICAgLyog
dG90YWwgdGltZXMgYW4gb3V0cHV0IGVycm9yIGNhdXNlcyB1cwotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKiB0byBjbGFtcCBkb3duIG9uIG5leHQgdXNlciBzZW5kLgot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1aW50MzJfdCAgc2N0
cHNfbG93bGV2ZWxlcnJ1c3I7ICAgICAgLyogdG90YWwgdGltZXMgc2N0cF9zZW5kZXJyb3JzIHdl
cmUgY2F1c2VkIGZyb20KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog
YSB1c2VyIHNlbmQgZnJvbSBhIHVzZXIgaW52b2tlZCBzZW5kIG5vdAotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKiBhIHNhY2sgcmVzcG9uc2UKLQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wY2hr
bG10OyAgICAgIC8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byBjaHVuayBsaW1pdCBy
ZWFjaGVkICovCi0JdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wcnduZDsgICAgICAgIC8qIE51bWJl
ciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byByd25kIGxpbWl0IHJlYWNoZWQgKi8KLQl1aW50MzJf
dCAgc2N0cHNfZWNuZXJlZHVjZWRjd25kOyAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgRUNOIHJl
ZHVjZWQgdGhlIGN3bmQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdnRhZ2V4cHJlc3M7ICAgICAgICAg
LyogVXNlZCBleHByZXNzIGxvb2t1cCB2aWEgdnRhZyAqLwotCXVpbnQzMl90ICBzY3Rwc192dGFn
Ym9ndXM7ICAgICAgICAgICAvKiBDb2xsaXNpb24gaW4gZXhwcmVzcyBsb29rdXAuICovCi0JdWlu
dDMyX3QgIHNjdHBzX3ByaW1hcnlfcmFuZHJ5OyAgICAgIC8qIE51bWJlciBvZiB0aW1lcyB0aGUg
c2VuZGVyIHJhbiBkcnkgb2YgdXNlciBkYXRhIG9uIHByaW1hcnkgKi8KLQl1aW50MzJfdCAgc2N0
cHNfY210X3JhbmRyeTsgICAgICAgICAgLyogU2FtZSBmb3IgYWJvdmUgKi8KLQl1aW50MzJfdCAg
c2N0cHNfc2xvd3BhdGhfc2FjazsgICAgICAgLyogU2Fja3MgdGhlIHNsb3cgd2F5ICovCi0JdWlu
dDMyX3QgIHNjdHBzX3d1X3NhY2tzX3NlbnQ7ICAgICAgIC8qIFdpbmRvdyBVcGRhdGUgb25seSBz
YWNrcyBzZW50ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfZmxhZ3M7ICAgIC8qIG51
bWJlciBvZiBzZW5kcyB3aXRoIHNpbmZvX2ZsYWdzICE9MCAqLwotCXVpbnQzMl90ICBzY3Rwc19z
ZW5kc193aXRoX3Vub3JkOyAgICAvKiBudW1iZXIgb2YgdW5vcmRlcmVkIHNlbmRzICovCi0JdWlu
dDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfZW9mOyAgICAgIC8qIG51bWJlciBvZiBzZW5kcyB3aXRo
IEVPRiBmbGFnIHNldCAqLwotCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2Fib3J0OyAgICAv
KiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBBQk9SVCBmbGFnIHNldCAqLwotCXVpbnQzMl90ICBzY3Rw
c19wcm90b2NvbF9kcmFpbl9jYWxsczsvKiBudW1iZXIgb2YgdGltZXMgcHJvdG9jb2wgZHJhaW4g
Y2FsbGVkICovCi0JdWludDMyX3QgIHNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lOy8qIG51bWJl
ciBvZiB0aW1lcyB3ZSBkaWQgYSBwcm90b2NvbCBkcmFpbiAqLwotCXVpbnQzMl90ICBzY3Rwc19y
ZWFkX3BlZWtzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgcmVjdiB3YXMgY2FsbGVkIHdp
dGggcGVlayAqLwotCXVpbnQzMl90ICBzY3Rwc19jYWNoZWRfY2hrOyAgICAgICAgICAvKiBOdW1i
ZXIgb2YgY2FjaGVkIGNodW5rcyB1c2VkICovCi0JdWludDMyX3QgIHNjdHBzX2NhY2hlZF9zdHJt
b3E7ICAgICAgIC8qIE51bWJlciBvZiBjYWNoZWQgc3RyZWFtIG9xJ3MgdXNlZCAqLwotCXVpbnQz
Ml90ICBzY3Rwc19sZWZ0X2FiYW5kb247ICAgICAgICAvKiBOdW1iZXIgb2YgdW5yZWFkIG1lc3Nh
Z2VzIGFiYW5kb25lZCBieSBjbG9zZSAqLwotCXVpbnQzMl90ICBzY3Rwc19zZW5kX2J1cnN0X2F2
b2lkOyAgICAvKiBVbnVzZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZF9jd25kX2F2b2lkOyAg
ICAgLyogU2VuZCBjd25kIGZ1bGwgIGF2b2lkYW5jZSwgYWxyZWFkeSBtYXggYnVyc3QgaW5mbGln
aHQgdG8gbmV0ICovCi0JdWludDMyX3QgIHNjdHBzX2Z3ZHRzbl9tYXBfb3ZlcjsgICAgIC8qIG51
bWJlciBvZiBtYXAgYXJyYXkgb3Zlci1ydW5zIHZpYSBmd2QtdHNuJ3MgKi8KLQl1aW50MzJfdCAg
c2N0cHNfcXVldWVfdXBkX2VjbmU7ICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIHdlIHF1ZXVlZCBv
ciB1cGRhdGVkIGFuIEVDTiBjaHVuayBvbiBzZW5kIHF1ZXVlICovCi0JdWludDMyX3QgIHNjdHBz
X3Jlc2VydmVkWzMxXTsgICAgICAgIC8qIEZ1dHVyZSBBQkkgY29tcGF0IC0gcmVtb3ZlIGludCdz
IGZyb20gaGVyZSB3aGVuIGFkZGluZyBuZXcgKi8KLX07Ci0KLXZvaWQKLXVzcnNjdHBfZ2V0X3N0
YXQoc3RydWN0IHNjdHBzdGF0ICopOwotCi0jaWZkZWYgX1dJTjMyCi0jaWZkZWYgX01TQ19WRVIK
LSNwcmFnbWEgd2FybmluZyhkZWZhdWx0OiA0MjAwKQotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiAg
X19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwLnBjLmluIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cC5wYy5pbgppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5hMWVjZDJmNzRlYmY4YWUwMmIzMTQ5Y2E1MmU3Nzhh
NDdjMDY3NWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwLnBjLmluCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHAucGMuaW4KQEAgLTAsMCArMSwxMiBAQAorcHJlZml4PUBwcmVmaXhACitleGVj
X3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2luY2x1ZGVkaXI9QGluY2x1
ZGVkaXJACisKK05hbWU6IHVzcnNjdHAKK0Rlc2NyaXB0aW9uOiBTQ1RQIGltcGxlbWVudGF0aW9u
CitVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAKK1ZlcnNpb246IEBWRVJT
SU9OQAorUmVxdWlyZXM6IAorTGliczogLUwke2xpYmRpcn0gLWx1c3JzY3RwCitDZmxhZ3M6IC1J
JHtpbmNsdWRlZGlyfSBAQVBQQ0ZMQUdTQApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKaW5k
ZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYzViNzIyOTZiNjUx
MzM2NTYwNGY0MzVlM2U3MTk0MGVjZWQ0Yzg4NSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL0NNYWtlTGlzdHMu
dHh0CkBAIC0wLDAgKzEsMTk0IEBACisjCisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE1IE9sZWcg
QWxleGVlbmtvdgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBGZWxpeCBXZWlucmFuaworIwor
IyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK
KyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSU5DTFVERSBNT0RVTEVTIEFORCBTRVRUSU5H
UworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitz
ZXQoVkVSU0lPTiAiMS4wLjAiKQorCitzZXQocHJlZml4IAkJCQkJJHtDTUFLRV9JTlNUQUxMX1BS
RUZJWH0pCitzZXQoZXhlY19wcmVmaXggCQkJJHtwcmVmaXh9KQorc2V0KGxpYmRpciAJCQkJCSR7
ZXhlY19wcmVmaXh9L2xpYikKK3NldChpbmNsdWRlZGlyIAkJCQkke3ByZWZpeH0vaW5jbHVkZS91
c3JzY3RwKQorc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q01BS0VfQ1VSUkVOVF9TT1VS
Q0VfRElSfSkKK3NldChDTUFLRV9NQUNPU1hfUlBBVEggCQkxKQorCithZGRfZGVmaW5pdGlvbnMo
LURfX1VzZXJzcGFjZV9fKQorYWRkX2RlZmluaXRpb25zKC1EX19Vc2Vyc3BhY2Vfb3NfJHtDTUFL
RV9TWVNURU1fTkFNRX0pCithZGRfZGVmaW5pdGlvbnMoLURTQ1RQX1NJTVBMRV9BTExPQ0FUT1Ip
CithZGRfZGVmaW5pdGlvbnMoLURTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisKKworIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUyBERVBFTkRF
TlQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor
aWYgKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKKwlhZGRfZGVmaW5pdGlv
bnMoLURfR05VX1NPVVJDRSkKK2VuZGlmICgpCisKK2lmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBN
QVRDSEVTICJGcmVlQlNEIikKKwlhZGRfZGVmaW5pdGlvbnMoLVVfX0ZyZWVCU0RfXykKKwlzZXQo
Q01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAgICAgLVduby1hZGRyZXNzLW9mLXBhY2tl
ZC1tZW1iZXIiKQorCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25v
LWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIpCitlbmRpZiAoKQorCitpZiAoJHtDTUFLRV9TWVNU
RU1fTkFNRX0gTUFUQ0hFUyAiRGFyd2luIikKKwlhZGRfZGVmaW5pdGlvbnMoLVVfX0FQUExFX18p
CisJYWRkX2RlZmluaXRpb25zKC1EX19BUFBMRV9VU0VfUkZDXzIyOTIpCisJc2V0KENNQUtFX0Nf
RkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gICAgIC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVy
IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiKQorCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7
Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciAtV25vLWRlcHJl
Y2F0ZWQtZGVjbGFyYXRpb25zIikKK2VuZGlmICgpCisKK2lmICgke0NNQUtFX1NZU1RFTV9OQU1F
fSBNQVRDSEVTICJEcmFnb25GbHkiKQorCWFkZF9kZWZpbml0aW9ucygtVV9fRHJhZ29uRmx5X18p
CitlbmRpZiAoKQorCitpZiAoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiTmV0QlNEIikK
KwlhZGRfZGVmaW5pdGlvbnMoLVVfX05ldEJTRF9fKQorZW5kaWYgKCkKKworaWYgKCR7Q01BS0Vf
U1lTVEVNX05BTUV9IE1BVENIRVMgIk9wZW5CU0QiKQorCWFkZF9kZWZpbml0aW9ucygtVV9fT3Bl
bkJTRF9fKQorZW5kaWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCisjIExJQlJBUlkgRklMRVMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZV9kaXJlY3Rvcmllcygke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0pCisKK2xpc3QoQVBQRU5EIHVzcnNjdHBfcm9vdF9oZWFkZXJz
CisJdXNlcl9hdG9taWMuaAorCXVzZXJfZW52aXJvbm1lbnQuaAorCXVzZXJfaW5wY2IuaAorCXVz
ZXJfaXBfaWNtcC5oCisJdXNlcl9pcDZfdmFyLmgKKwl1c2VyX21hbGxvYy5oCisJdXNlcl9tYnVm
LmgKKwl1c2VyX3F1ZXVlLmgKKwl1c2VyX3JlY3ZfdGhyZWFkLmgKKwl1c2VyX3JvdXRlLmgKKwl1
c2VyX3NvY2tldHZhci5oCisJdXNlcl91bWEuaAorCXVzcnNjdHAuaAorKQorCitsaXN0KEFQUEVO
RCB1c3JzY3RwX25ldGluZXRfaGVhZGVycworCW5ldGluZXQvc2N0cF9hc2NvbmYuaAorCW5ldGlu
ZXQvc2N0cF9hdXRoLmgKKwluZXRpbmV0L3NjdHBfYnNkX2FkZHIuaAorCW5ldGluZXQvc2N0cF9j
YWxsb3V0LmgKKwluZXRpbmV0L3NjdHBfY29uc3RhbnRzLmgKKwluZXRpbmV0L3NjdHBfY3JjMzIu
aAorCW5ldGluZXQvc2N0cF9oZWFkZXIuaAorCW5ldGluZXQvc2N0cF9pbmRhdGEuaAorCW5ldGlu
ZXQvc2N0cF9pbnB1dC5oCisJbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmgKKwluZXRpbmV0
L3NjdHBfb3NfdXNlcnNwYWNlLmgKKwluZXRpbmV0L3NjdHBfb3MuaAorCW5ldGluZXQvc2N0cF9v
dXRwdXQuaAorCW5ldGluZXQvc2N0cF9wY2IuaAorCW5ldGluZXQvc2N0cF9wZWVsb2ZmLmgKKwlu
ZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmgKKwluZXRpbmV0L3NjdHBfc2hhMS5oCisJbmV0aW5l
dC9zY3RwX3N0cnVjdHMuaAorCW5ldGluZXQvc2N0cF9zeXNjdGwuaAorCW5ldGluZXQvc2N0cF90
aW1lci5oCisJbmV0aW5ldC9zY3RwX3Vpby5oCisJbmV0aW5ldC9zY3RwX3Zhci5oCisJbmV0aW5l
dC9zY3RwdXRpbC5oCisJbmV0aW5ldC9zY3RwLmgKKykKKworbGlzdChBUFBFTkQgdXNyc2N0cF9u
ZXRpbmV0Nl9oZWFkZXJzCisJbmV0aW5ldDYvc2N0cDZfdmFyLmgKKykKKworbGlzdChBUFBFTkQg
dXNyc2N0cF9oZWFkZXJzCisJJHt1c3JzY3RwX3Jvb3RfaGVhZGVyc30KKwkke3VzcnNjdHBfbmV0
aW5ldF9oZWFkZXJzfQorCSR7dXNyc2N0cF9uZXRpbmV0Nl9oZWFkZXJzfQorKQorCitsaXN0KEFQ
UEVORCB1c3JzY3RwX3NvdXJjZXMKKwluZXRpbmV0L3NjdHBfYXNjb25mLmMKKwluZXRpbmV0L3Nj
dHBfYXV0aC5jCisJbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKKwluZXRpbmV0L3NjdHBfY2FsbG91
dC5jCisJbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jCisJbmV0aW5ldC9zY3RwX2NyYzMyLmMK
KwluZXRpbmV0L3NjdHBfaW5kYXRhLmMKKwluZXRpbmV0L3NjdHBfaW5wdXQuYworCW5ldGluZXQv
c2N0cF9vdXRwdXQuYworCW5ldGluZXQvc2N0cF9wY2IuYworCW5ldGluZXQvc2N0cF9wZWVsb2Zm
LmMKKwluZXRpbmV0L3NjdHBfc2hhMS5jCisJbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCisJ
bmV0aW5ldC9zY3RwX3N5c2N0bC5jCisJbmV0aW5ldC9zY3RwX3RpbWVyLmMKKwluZXRpbmV0L3Nj
dHBfdXNlcnNwYWNlLmMKKwluZXRpbmV0L3NjdHBfdXNycmVxLmMKKwluZXRpbmV0L3NjdHB1dGls
LmMKKwluZXRpbmV0Ni9zY3RwNl91c3JyZXEuYworCXVzZXJfZW52aXJvbm1lbnQuYworCXVzZXJf
bWJ1Zi5jCisJdXNlcl9yZWN2X3RocmVhZC5jCisJdXNlcl9zb2NrZXQuYworKQorCithZGRfbGli
cmFyeSh1c3JzY3RwIFNIQVJFRCAke3VzcnNjdHBfc291cmNlc30gJHt1c3JzY3RwX2hlYWRlcnN9
KQorYWRkX2xpYnJhcnkodXNyc2N0cC1zdGF0aWMgU1RBVElDICR7dXNyc2N0cF9zb3VyY2VzfSAk
e3VzcnNjdHBfaGVhZGVyc30pCisKK2lmIChXSU4zMikKKwltZXNzYWdlKFNUQVRVUyAibGluayBs
aWJyYXJ5OiB3czJfMzIiKQorCXRhcmdldF9saW5rX2xpYnJhcmllcyh1c3JzY3RwIHdzMl8zMikK
Kwl0YXJnZXRfbGlua19saWJyYXJpZXModXNyc2N0cC1zdGF0aWMgd3MyXzMyKQorZW5kaWYgKCkK
Kworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHVzcnNjdHAtc3RhdGljIFBST1BFUlRJRVMgT1VUUFVU
X05BTUUgInVzcnNjdHAiKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHVzcnNjdHAgUFJPUEVSVElF
UyBJTVBPUlRfU1VGRklYICJfaW1wb3J0LmxpYiIpCitzZXRfdGFyZ2V0X3Byb3BlcnRpZXModXNy
c2N0cCBQUk9QRVJUSUVTIFNPVkVSU0lPTiAxIFZFUlNJT04gMS4wLjApCisKK2lmIChOT1QgREVG
SU5FRCBDTUFLRV9JTlNUQUxMX0xJQkRJUikKKwlTRVQoQ01BS0VfSU5TVEFMTF9MSUJESVIgbGli
KQorZW5kaWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjCisjIElOU1RBTEwgTElCUkFSWSBBTkQgSEVBREVSCisjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luc3RhbGwoVEFSR0VUUyB1c3Jz
Y3RwIHVzcnNjdHAtc3RhdGljIERFU1RJTkFUSU9OICR7Q01BS0VfSU5TVEFMTF9MSUJESVJ9KQor
aW5zdGFsbChGSUxFUyB1c3JzY3RwLmggREVTVElOQVRJT04gaW5jbHVkZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01h
a2VmaWxlLmFtCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEu
Ljg1MjQwYjdjZWE4ZjY2YjA5YjM1ZWQwN2I3ZDJmNmZlY2U5YzUxNzEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0KKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9N
YWtlZmlsZS5hbQpAQCAtMCwwICsxLDgxIEBACisjCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEy
IE1pY2hhZWwgVHVleGVuCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJP
SkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKK0FVVE9N
QUtFX09QVElPTlMgICAgICAgPSBzdWJkaXItb2JqZWN0cworRVhUUkFfRElTVCAgICAgICAgICAg
ICA9IE1ha2VmaWxlLm5tYWtlCitsaWJfTFRMSUJSQVJJRVMgICAgICAgID0gbGlidXNyc2N0cC5s
YQorbGlidXNyc2N0cF9sYV9TT1VSQ0VTICA9IHVzZXJfYXRvbWljLmggXAorICAgICAgICAgICAg
ICAgICAgICAgICAgIHVzZXJfZW52aXJvbm1lbnQuYyB1c2VyX2Vudmlyb25tZW50LmggXAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaW5wY2IuaCBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgdXNlcl9pcF9pY21wLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaXA2
X3Zhci5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21hbGxvYy5oIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyX21idWYuYyBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgdXNlcl9tYnVmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfcXVldWUuaCBc
CisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9yZWN2X3RocmVhZC5jIHVzZXJfcmVjdl90
aHJlYWQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9yb3V0ZS5oIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyX3NvY2tldC5jIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VyX3NvY2tldHZhci5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3Vt
YS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHAuaCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2FzY29uZi5jIG5ldGluZXQvc2N0cF9hc2Nv
bmYuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2F1dGguYyBuZXRp
bmV0L3NjdHBfYXV0aC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBf
YnNkX2FkZHIuYyBuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCBcCisgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV0aW5ldC9zY3RwX2NhbGxvdXQuYyBuZXRpbmV0L3NjdHBfY2FsbG91dC5oIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMgXAorICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9jb25zdGFudHMuaCBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NyYzMyLmMgbmV0aW5ldC9zY3RwX2NyYzMy
LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9oZWFkZXIuaCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2luZGF0YS5jIG5ldGluZXQvc2N0
cF9pbmRhdGEuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2lucHV0
LmMgbmV0aW5ldC9zY3RwX2lucHV0LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlu
ZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRp
bmV0L3NjdHBfb3MuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX29z
X3VzZXJzcGFjZS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfb3V0
cHV0LmMgbmV0aW5ldC9zY3RwX291dHB1dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXRpbmV0L3NjdHBfcGNiLmMgbmV0aW5ldC9zY3RwX3BjYi5oIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXRpbmV0L3NjdHBfcGVlbG9mZi5jIG5ldGluZXQvc2N0cF9wZWVsb2ZmLmggXAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3NoYTEuYyBuZXRpbmV0L3NjdHBf
c2hhMS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfc3NfZnVuY3Rp
b25zLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9zdHJ1Y3RzLmgg
XAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9zeXNjdGwuYyBuZXRpbmV0
L3NjdHBfc3lzY3RsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF91
c2Vyc3BhY2UuYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3RpbWVy
LmMgbmV0aW5ldC9zY3RwX3RpbWVyLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlu
ZXQvc2N0cF91aW8uaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3Vz
cnJlcS5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfdmFyLmggXAor
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cHV0aWwuYyBuZXRpbmV0L3NjdHB1
dGlsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L3NjdHA2X3Zhci5oIFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni9zY3RwNl91c3JyZXEuYworbGlidXNy
c2N0cF9sYV9DRkxBR1MgPSAkKExJQkNGTEFHUykKK2xpYnVzcnNjdHBfbGFfTERGTEFHUyA9IC12
ZXJzaW9uLWluZm8gMTowOjAKK2luY2x1ZGVfSEVBREVSUyA9IHVzcnNjdHAuaAorCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9NYWtlZmlsZS5ubWFrZQppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhj
MmU0OGM1MzkxLi40OGQyYmQxMTBjN2U1YmNmOGI5ZDRjOWI4ZTMwNzlhZTViY2ZmZDUwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtlCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UKQEAgLTAsMCArMSwxNzkgQEAKKyMNCisjIENvcHly
aWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuDQorIw0KKyMgQWxsIHJpZ2h0cyByZXNl
cnZlZC4NCisjDQorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyMgYXJlIG1ldDoNCisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuDQorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQ0KKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4NCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorIyAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCisjICAg
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KKyMNCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5EDQorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFDQorIyBBUkUg
RElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQ0KKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisjIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTDQorIyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikNCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorIyBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZDQor
IyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GDQorIyBTVUNIIERBTUFHRS4NCisjDQorDQorQ0ZMQUdTPS9JLiAvVzMg
L1dYDQorDQorQ1ZBUlNETEw9LURTQ1RQX0RFQlVHIC1EU0NUUF9TSU1QTEVfQUxMT0NBVE9SIC1E
U0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTDQorQ1ZBUlNETEw9JChDVkFSU0RMTCkgLURfX1VzZXJz
cGFjZV9fIC1EX19Vc2Vyc3BhY2Vfb3NfV2luZG93cw0KK0NWQVJTRExMPSQoQ1ZBUlNETEwpIC1E
SU5FVCAtRElORVQ2DQorQ1ZBUlNETEw9JChDVkFSU0RMTCkgLURfTElCDQorDQorTElOS0ZMQUdT
PS9MSUJQQVRIOi4gV3MyXzMyLmxpYg0KKw0KK3VzcnNjdHBfT0JKRUNUUyA9IFwNCisJdXNlcl9l
bnZpcm9ubWVudC5vYmogXA0KKwl1c2VyX21idWYub2JqIFwNCisJdXNlcl9yZWN2X3RocmVhZC5v
YmogXA0KKwl1c2VyX3NvY2tldC5vYmogXA0KKwlzY3RwX2FzY29uZi5vYmogXA0KKwlzY3RwX2F1
dGgub2JqIFwNCisJc2N0cF9ic2RfYWRkci5vYmogXA0KKwlzY3RwX2NhbGxvdXQub2JqIFwNCisJ
c2N0cF9jY19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9jcmMzMi5vYmogXA0KKwlzY3RwX2luZGF0
YS5vYmogXA0KKwlzY3RwX2lucHV0Lm9iaiBcDQorCXNjdHBfb3V0cHV0Lm9iaiBcDQorCXNjdHBf
cGNiLm9iaiBcDQorCXNjdHBfcGVlbG9mZi5vYmogXA0KKwlzY3RwX3NoYTEub2JqIFwNCisJc2N0
cF9zc19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9zeXNjdGwub2JqIFwNCisJc2N0cF90aW1lci5v
YmogXA0KKwlzY3RwX3VzZXJzcGFjZS5vYmogIFwNCisJc2N0cF91c3JyZXEub2JqIFwNCisJc2N0
cHV0aWwub2JqIFwNCisJc2N0cDZfdXNycmVxLm9iag0KKw0KK3VzcnNjdHBfSEVBREVSUyA9IFwN
CisJdXNlcl9hdG9taWMuaCBcDQorCXVzZXJfZW52aXJvbm1lbnQuaCBcDQorCXVzZXJfaW5wY2Iu
aCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJdXNlcl9tYWxsb2MuaCBcDQorCXVzZXJfbWJ1Zi5o
IFwNCisJdXNlcl9yZWN2X3RocmVhZC5oIFwNCisJdXNlcl9yb3V0ZS5oIFwNCisJdXNlcl9zb2Nr
ZXR2YXIuaCBcDQorCXVzZXJfdW1hLmggXA0KKwl1c2VyX3F1ZXVlLmggXA0KKwl1c2VyX2lwX2lj
bXAuaCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJbmV0aW5ldFxzY3RwLmggXA0KKwluZXRpbmV0
XHNjdHBfYXNjb25mLmggXA0KKwluZXRpbmV0XHNjdHBfYXV0aC5oIFwNCisJbmV0aW5ldFxzY3Rw
X2JzZF9hZGRyLmggXA0KKwluZXRpbmV0XHNjdHBfY2FsbG91dC5oIFwNCisJbmV0aW5ldFxzY3Rw
X2NvbnN0YW50cy5oIFwNCisJbmV0aW5ldFxzY3RwX2NyYzMyLmggXA0KKwluZXRpbmV0XHNjdHBf
aGVhZGVyLmggXA0KKwluZXRpbmV0XHNjdHBfaW5kYXRhLmggXA0KKwluZXRpbmV0XHNjdHBfaW5w
dXQuaCBcDQorCW5ldGluZXRcc2N0cF9sb2NrX3VzZXJzcGFjZS5oIFwNCisJbmV0aW5ldFxzY3Rw
X29zLmggXA0KKwluZXRpbmV0XHNjdHBfb3NfdXNlcnNwYWNlLmggXA0KKwluZXRpbmV0XHNjdHBf
b3V0cHV0LmggXA0KKwluZXRpbmV0XHNjdHBfcGNiLmggXA0KKwluZXRpbmV0XHNjdHBfcGVlbG9m
Zi5oIFwNCisJbmV0aW5ldFxzY3RwX3Byb2Nlc3NfbG9jay5oIFwNCisJbmV0aW5ldFxzY3RwX3No
YTEuaCBcDQorCW5ldGluZXRcc2N0cF9zdHJ1Y3RzLmggXA0KKwluZXRpbmV0XHNjdHBfc3lzY3Rs
LmggXA0KKwluZXRpbmV0XHNjdHBfdGltZXIuaCBcDQorCW5ldGluZXRcc2N0cF91aW8uaCBcDQor
CW5ldGluZXRcc2N0cF92YXIuaCBcDQorCW5ldGluZXRcc2N0cHV0aWwuaCBcDQorCW5ldGluZXQ2
XHNjdHA2X3Zhci5oDQorDQordXNyc2N0cC5saWIgOiAkKHVzcnNjdHBfT0JKRUNUUykNCisJbGli
IC9vdXQ6dXNyc2N0cC5saWIgJChMSU5LRkxBR1MpICQodXNyc2N0cF9PQkpFQ1RTKQ0KKw0KK3Vz
ZXJfZW52aXJvbm1lbnQub2JqIDogdXNlcl9lbnZpcm9ubWVudC5jICQodXNyc2N0cF9IRUFERVJT
KQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgdXNlcl9lbnZpcm9ubWVudC5jDQorDQor
dXNlcl9tYnVmLm9iaiAgOiB1c2VyX21idWYuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChD
VkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfbWJ1Zi5jDQorDQordXNlcl9yZWN2X3RocmVhZC5v
Ymo6IHVzZXJfcmVjdl90aHJlYWQuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RM
TCkgJChDRkxBR1MpIC1jIHVzZXJfcmVjdl90aHJlYWQuYw0KKw0KK3VzZXJfc29ja2V0Lm9iaiA6
IHVzZXJfc29ja2V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZM
QUdTKSAtYyB1c2VyX3NvY2tldC5jDQorDQorc2N0cF9hc2NvbmYub2JqIDogbmV0aW5ldFxzY3Rw
X2FzY29uZi5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykg
LWMgbmV0aW5ldFxzY3RwX2FzY29uZi5jDQorDQorc2N0cF9hdXRoLm9iaiA6IG5ldGluZXRcc2N0
cF9hdXRoLmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAt
YyBuZXRpbmV0XHNjdHBfYXV0aC5jDQorDQorc2N0cF9ic2RfYWRkci5vYmogOiBuZXRpbmV0XHNj
dHBfYnNkX2FkZHIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxB
R1MpIC1jIG5ldGluZXRcc2N0cF9ic2RfYWRkci5jDQorDQorc2N0cF9jYWxsb3V0Lm9iaiA6IG5l
dGluZXRcc2N0cF9jYWxsb3V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwp
ICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfY2FsbG91dC5jDQorDQorc2N0cF9jY19mdW5jdGlv
bnMub2JqIDogbmV0aW5ldFxzY3RwX2NjX2Z1bmN0aW9ucy5jICQodXNyc2N0cF9IRUFERVJTKQ0K
KwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2NjX2Z1bmN0aW9ucy5j
DQorDQorc2N0cF9jcmMzMi5vYmogOiBuZXRpbmV0XHNjdHBfY3JjMzIuYyAkKHVzcnNjdHBfSEVB
REVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9jcmMzMi5j
DQorDQorc2N0cF9pbmRhdGEub2JqIDogbmV0aW5ldFxzY3RwX2luZGF0YS5jICQodXNyc2N0cF9I
RUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2luZGF0
YS5jDQorDQorc2N0cF9pbnB1dC5vYmogOiBuZXRpbmV0XHNjdHBfaW5wdXQuYyAkKHVzcnNjdHBf
SEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9pbnB1
dC5jDQorDQorc2N0cF9vdXRwdXQub2JqIDogbmV0aW5ldFxzY3RwX291dHB1dC5jICQodXNyc2N0
cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX291
dHB1dC5jDQorDQorc2N0cF9wY2Iub2JqIDogbmV0aW5ldFxzY3RwX3BjYi5jICQodXNyc2N0cF9I
RUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3BjYi5j
DQorDQorc2N0cF9wZWVsb2ZmLm9iaiA6IG5ldGluZXRcc2N0cF9wZWVsb2ZmLmMgJCh1c3JzY3Rw
X0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfcGVl
bG9mZi5jDQorDQorc2N0cF9zaGExLm9iaiA6IG5ldGluZXRcc2N0cF9zaGExLmMgJCh1c3JzY3Rw
X0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfc2hh
MS5jDQorDQorc2N0cF9zc19mdW5jdGlvbnMub2JqIDogbmV0aW5ldFxzY3RwX3NzX2Z1bmN0aW9u
cy5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0
aW5ldFxzY3RwX3NzX2Z1bmN0aW9ucy5jDQorDQorc2N0cF9zeXNjdGwub2JqIDogbmV0aW5ldFxz
Y3RwX3N5c2N0bC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFH
UykgLWMgbmV0aW5ldFxzY3RwX3N5c2N0bC5jDQorDQorc2N0cF90aW1lci5vYmogOiBuZXRpbmV0
XHNjdHBfdGltZXIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxB
R1MpIC1jIG5ldGluZXRcc2N0cF90aW1lci5jDQorDQorc2N0cF91c2Vyc3BhY2Uub2JqIDogbmV0
aW5ldFxzY3RwX3VzZXJzcGFjZS5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExM
KSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzZXJzcGFjZS5jDQorDQorc2N0cF91c3JyZXEu
b2JqIDogbmV0aW5ldFxzY3RwX3VzcnJlcS5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENW
QVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzcnJlcS5jDQorDQorc2N0cHV0aWwu
b2JqIDogbmV0aW5ldFxzY3RwdXRpbC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJT
RExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwdXRpbC5jDQorDQorc2N0cDZfdXNycmVxLm9i
aiA6IG5ldGluZXQ2XHNjdHA2X3VzcnJlcS5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENW
QVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldDZcc2N0cDZfdXNycmVxLmMNCisNCitjbGVhbjoN
CisJZGVsICoub2JqDQorCWRlbCB1c3JzY3RwLmxpYg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cC5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmY1YjFk
ODI4OTAyMzhiZWI4NDhkNWZhMTlmM2RiY2YwMjlkNzA3MDQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHAuaApAQCAtMCwwICsxLDY2OCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENp
c2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBh
KSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAq
ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28g
U3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwLmggMzIzNjU3IDIw
MTctMDktMTYgMjE6MjY6MDZaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5F
VF9TQ1RQX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfSF8KKworI2lmIChkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19EYXJ3aW4pKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisKKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKworCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KyNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSkKKyNlbHNlCisjcHJh
Z21hIHBhY2sgKHB1c2gsIDEpCisjZGVmaW5lIFNDVFBfUEFDS0VECisjZW5kaWYKKworLyoKKyAq
IFNDVFAgcHJvdG9jb2wgLSBSRkM0OTYwLgorICovCitzdHJ1Y3Qgc2N0cGhkciB7CisJdWludDE2
X3Qgc3JjX3BvcnQ7CS8qIHNvdXJjZSBwb3J0ICovCisJdWludDE2X3QgZGVzdF9wb3J0OwkvKiBk
ZXN0aW5hdGlvbiBwb3J0ICovCisJdWludDMyX3Qgdl90YWc7CQkvKiB2ZXJpZmljYXRpb24gdGFn
IG9mIHBhY2tldCAqLworCXVpbnQzMl90IGNoZWNrc3VtOwkvKiBDUkMzMkMgY2hlY2tzdW0gKi8K
KwkvKiBjaHVua3MgZm9sbG93Li4uICovCit9IFNDVFBfUEFDS0VEOworCisvKgorICogU0NUUCBD
aHVua3MKKyAqLworc3RydWN0IHNjdHBfY2h1bmtoZHIgeworCXVpbnQ4X3QgY2h1bmtfdHlwZTsJ
LyogY2h1bmsgdHlwZSAqLworCXVpbnQ4X3QgY2h1bmtfZmxhZ3M7CS8qIGNodW5rIGZsYWdzICov
CisJdWludDE2X3QgY2h1bmtfbGVuZ3RoOwkvKiBjaHVuayBsZW5ndGggKi8KKwkvKiBvcHRpb25h
bCBwYXJhbXMgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCisvKgorICogU0NUUCBjaHVuayBw
YXJhbWV0ZXJzCisgKi8KK3N0cnVjdCBzY3RwX3BhcmFtaGRyIHsKKwl1aW50MTZfdCBwYXJhbV90
eXBlOwkvKiBwYXJhbWV0ZXIgdHlwZSAqLworCXVpbnQxNl90IHBhcmFtX2xlbmd0aDsJLyogcGFy
YW1ldGVyIGxlbmd0aCAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyoKKyAqIHVzZXIgc29ja2V0IG9w
dGlvbnM6IHNvY2tldCBBUEkgZGVmaW5lZAorICovCisvKgorICogcmVhZC13cml0ZSBvcHRpb25z
CisgKi8KKyNkZWZpbmUgU0NUUF9SVE9JTkZPCQkJMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0FT
U09DSU5GTwkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9JTklUTVNHCQkJMHgwMDAwMDAwMwor
I2RlZmluZSBTQ1RQX05PREVMQVkJCQkweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfQVVUT0NMT1NF
CQkJMHgwMDAwMDAwNQorI2RlZmluZSBTQ1RQX1NFVF9QRUVSX1BSSU1BUllfQUREUgkweDAwMDAw
MDA2CisjZGVmaW5lIFNDVFBfUFJJTUFSWV9BRERSCQkweDAwMDAwMDA3CisjZGVmaW5lIFNDVFBf
QURBUFRBVElPTl9MQVlFUgkJMHgwMDAwMDAwOAorLyogc2FtZSBhcyBhYm92ZSAqLworI2RlZmlu
ZSBTQ1RQX0FEQVBUSU9OX0xBWUVSCQkweDAwMDAwMDA4CisjZGVmaW5lIFNDVFBfRElTQUJMRV9G
UkFHTUVOVFMJCTB4MDAwMDAwMDkKKyNkZWZpbmUgU0NUUF9QRUVSX0FERFJfUEFSQU1TIAkJMHgw
MDAwMDAwYQorI2RlZmluZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTQkJMHgwMDAwMDAwYgorLyog
YW5jaWxsYXJ5IGRhdGEvbm90aWZpY2F0aW9uIGludGVyZXN0IG9wdGlvbnMgKi8KKyNkZWZpbmUg
U0NUUF9FVkVOVFMJCQkweDAwMDAwMDBjIC8qIGRlcHJlY2F0ZWQgKi8KKy8qIFdpdGhvdXQgdGhp
cyBhcHBsaWVkIHdlIHdpbGwgZ2l2ZSBWNCBhbmQgVjYgYWRkcmVzc2VzIG9uIGEgVjYgc29ja2V0
ICovCisjZGVmaW5lIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSCTB4MDAwMDAwMGQKKyNkZWZp
bmUgU0NUUF9NQVhTRUcgCQkJMHgwMDAwMDAwZQorI2RlZmluZSBTQ1RQX0RFTEFZRURfU0FDSyAg
ICAgICAgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgU0NUUF9GUkFHTUVOVF9JTlRFUkxFQVZF
ICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCAg
ICAgMHgwMDAwMDAxMQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQ
X0FVVEhfQ0hVTksgCQkweDAwMDAwMDEyCisjZGVmaW5lIFNDVFBfQVVUSF9LRVkgCQkJMHgwMDAw
MDAxMworI2RlZmluZSBTQ1RQX0hNQUNfSURFTlQgCQkweDAwMDAwMDE0CisjZGVmaW5lIFNDVFBf
QVVUSF9BQ1RJVkVfS0VZIAkJMHgwMDAwMDAxNQorI2RlZmluZSBTQ1RQX0FVVEhfREVMRVRFX0tF
WSAJCTB4MDAwMDAwMTYKKyNkZWZpbmUgU0NUUF9VU0VfRVhUX1JDVklORk8JCTB4MDAwMDAwMTcK
KyNkZWZpbmUgU0NUUF9BVVRPX0FTQ09ORgkJMHgwMDAwMDAxOCAvKiBydyAqLworI2RlZmluZSBT
Q1RQX01BWEJVUlNUCQkJMHgwMDAwMDAxOSAvKiBydyAqLworI2RlZmluZSBTQ1RQX01BWF9CVVJT
VAkJCTB4MDAwMDAwMTkgLyogcncgKi8KKy8qIGFzc29jIGxldmVsIGNvbnRleHQgKi8KKyNkZWZp
bmUgU0NUUF9DT05URVhUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFhIC8qIHJ3ICovCisv
KiBleHBsaWNpdCBFT1Igc2lnbmFsbGluZyAqLworI2RlZmluZSBTQ1RQX0VYUExJQ0lUX0VPUiAg
ICAgICAgICAgICAgIDB4MDAwMDAwMWIKKyNkZWZpbmUgU0NUUF9SRVVTRV9QT1JUICAgICAgICAg
ICAgICAgICAweDAwMDAwMDFjIC8qIHJ3ICovCisjZGVmaW5lIFNDVFBfQVVUSF9ERUFDVElWQVRF
X0tFWQkweDAwMDAwMDFkCisjZGVmaW5lIFNDVFBfRVZFTlQgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAxZQorI2RlZmluZSBTQ1RQX1JFQ1ZSQ1ZJTkZPICAgICAgICAgICAgICAgIDB4MDAw
MDAwMWYKKyNkZWZpbmUgU0NUUF9SRUNWTlhUSU5GTyAgICAgICAgICAgICAgICAweDAwMDAwMDIw
CisjZGVmaW5lIFNDVFBfREVGQVVMVF9TTkRJTkZPICAgICAgICAgICAgMHgwMDAwMDAyMQorI2Rl
ZmluZSBTQ1RQX0RFRkFVTFRfUFJJTkZPICAgICAgICAgICAgIDB4MDAwMDAwMjIKKyNkZWZpbmUg
U0NUUF9QRUVSX0FERFJfVEhMRFMgICAgICAgICAgICAweDAwMDAwMDIzCisjZGVmaW5lIFNDVFBf
UkVNT1RFX1VEUF9FTkNBUFNfUE9SVCAgICAgMHgwMDAwMDAyNAorI2RlZmluZSBTQ1RQX0VDTl9T
VVBQT1JURUQgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUgU0NUUF9QUl9TVVBQT1JU
RUQgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIFNDVFBfQVVUSF9TVVBQT1JURUQg
ICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBTQ1RQX0FTQ09ORl9TVVBQT1JURUQgICAg
ICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgU0NUUF9SRUNPTkZJR19TVVBQT1JURUQgICAgICAg
ICAweDAwMDAwMDI5CisjZGVmaW5lIFNDVFBfTlJTQUNLX1NVUFBPUlRFRCAgICAgICAgICAgMHgw
MDAwMDAzMAorI2RlZmluZSBTQ1RQX1BLVERST1BfU1VQUE9SVEVEICAgICAgICAgIDB4MDAwMDAw
MzEKKyNkZWZpbmUgU0NUUF9NQVhfQ1dORCAgICAgICAgICAgICAgICAgICAweDAwMDAwMDMyCisK
Ky8qCisgKiByZWFkLW9ubHkgb3B0aW9ucworICovCisjZGVmaW5lIFNDVFBfU1RBVFVTCQkJMHgw
MDAwMDEwMAorI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTwkJMHgwMDAwMDEwMQorLyog
YXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQX1BFRVJfQVVUSF9DSFVOS1Mg
CQkweDAwMDAwMTAyCisjZGVmaW5lIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MgCQkweDAwMDAwMTAz
CisjZGVmaW5lIFNDVFBfR0VUX0FTU09DX05VTUJFUiAgICAgICAgICAgMHgwMDAwMDEwNCAvKiBy
byAqLworI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19JRF9MSVNUICAgICAgICAgIDB4MDAwMDAxMDUg
Lyogcm8gKi8KKyNkZWZpbmUgU0NUUF9USU1FT1VUUyAgICAgICAgICAgICAgICAgICAweDAwMDAw
MTA2CisjZGVmaW5lIFNDVFBfUFJfU1RSRUFNX1NUQVRVUyAgICAgICAgICAgMHgwMDAwMDEwNwor
I2RlZmluZSBTQ1RQX1BSX0FTU09DX1NUQVRVUyAgICAgICAgICAgIDB4MDAwMDAxMDgKKworLyoK
KyAqIHVzZXIgc29ja2V0IG9wdGlvbnM6IEJTRCBpbXBsZW1lbnRhdGlvbiBzcGVjaWZpYworICov
CisvKgorICogQmxvY2tpbmcgSS9PIGlzIGVuYWJsZWQgb24gYW55IFRDUCB0eXBlIHNvY2tldCBi
eSBkZWZhdWx0LiBGb3IgdGhlIFVEUAorICogbW9kZWwgaWYgdGhpcyBpcyB0dXJuZWQgb24gdGhl
biB0aGUgc29ja2V0IGJ1ZmZlciBpcyBzaGFyZWQgZm9yIHNlbmQKKyAqIHJlc291cmNlcyBhbW9u
Z3N0IGFsbCBhc3NvY2lhdGlvbnMuICBUaGUgZGVmYXVsdCBmb3IgdGhlIFVEUCBtb2RlbCBpcyB0
aGF0CisgKiBpcyBTU19OQklPIGlzIHNldC4gIFdoaWNoIG1lYW5zIGFsbCBhc3NvY2lhdGlvbnMg
aGF2ZSBhIHNlcGFyYXRlIHNlbmQKKyAqIGxpbWl0IEJVVCB0aGV5IHdpbGwgTk9UIGV2ZXIgQkxP
Q0sgaW5zdGVhZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgYmFjaworICogRUFHQUlOIGlmIHlvdSB0
cnkgdG8gc2VuZCB0b28gbXVjaC4gSWYgeW91IHdhbnQgdGhlIGJsb2NraW5nIHNlbWFudGljcyB5
b3UKKyAqIHNldCB0aGlzIG9wdGlvbiBhdCB0aGUgY29zdCBvZiBzaGFyaW5nIG9uZSBzb2NrZXQg
c2VuZCBidWZmZXIgc2l6ZSBhbW9uZ3N0CisgKiBhbGwgYXNzb2NpYXRpb25zLiBQZWVsZWQgb2Zm
IHNvY2tldHMgdHVybiB0aGlzIG9wdGlvbiBvZmYgYW5kIGJsb2NrLiBCdXQKKyAqIHNpbmNlIGJv
dGggVENQIGFuZCBwZWVsZWQgb2ZmIHNvY2tldHMgaGF2ZSBvbmx5IG9uZSBhc3NvYyBwZXIgc29j
a2V0IHRoaXMKKyAqIGlzIGZpbmUuIEl0IHByb2JhYmx5IGRvZXMgTk9UIG1ha2Ugc2Vuc2UgdG8g
c2V0IHRoaXMgb24gU1NfTkJJTyBvbiBhIFRDUAorICogbW9kZWwgT1IgcGVlbGVkIG9mZiBVRFAg
bW9kZWwsIGJ1dCB3ZSBkbyBhbGxvdyB5b3UgdG8gZG8gc28uIFlvdSBqdXN0IHVzZQorICogdGhl
IG5vcm1hbCBzeXNjYWxsIHRvIHRvZ2dsZSBTU19OQklPIHRoZSB3YXkgeW91IHdhbnQuCisgKgor
ICogQmxvY2tpbmcgSS9PIGlzIGNvbnRyb2xsZWQgYnkgdGhlIFNTX05CSU8gZmxhZyBvbiB0aGUg
c29ja2V0IHN0YXRlIHNvX3N0YXRlCisgKiBmaWVsZC4KKyAqLworCisjZGVmaW5lIFNDVFBfRU5B
QkxFX1NUUkVBTV9SRVNFVAkweDAwMDAwOTAwIC8qIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICov
CisjZGVmaW5lIFNDVFBfUkVTRVRfU1RSRUFNUwkJMHgwMDAwMDkwMSAvKiBzdHJ1Y3Qgc2N0cF9y
ZXNldF9zdHJlYW1zICovCisjZGVmaW5lIFNDVFBfUkVTRVRfQVNTT0MJCTB4MDAwMDA5MDIgLyog
c2N0cF9hc3NvY190ICovCisjZGVmaW5lIFNDVFBfQUREX1NUUkVBTVMJCTB4MDAwMDA5MDMgLyog
c3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgKi8KKworLyogRm9yIGVuYWJsZSBzdHJlYW0gcmVzZXQg
Ki8KKyNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSAJMHgwMDAwMDAwMQorI2Rl
ZmluZSBTQ1RQX0VOQUJMRV9SRVNFVF9BU1NPQ19SRVEgCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NU
UF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSAJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0VOQUJM
RV9WQUxVRV9NQVNLCQkweDAwMDAwMDA3CisvKiBGb3IgcmVzZXQgc3RyZWFtcyAqLworI2RlZmlu
ZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORwkweDAwMDAwMDAxCisjZGVmaW5lIFNDVFBfU1RS
RUFNX1JFU0VUX09VVEdPSU5HCTB4MDAwMDAwMDIKKworCisvKiBoZXJlIG9uIGRvd24gYXJlIG1v
cmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgKi8KKyNkZWZpbmUgU0NUUF9TRVRfREVCVUdfTEVW
RUwJCTB4MDAwMDEwMDUKKyNkZWZpbmUgU0NUUF9DTFJfU1RBVF9MT0cgICAgICAgICAgICAgICAw
eDAwMDAxMDA3CisvKiBDTVQgT04vT0ZGIHNvY2tldCBvcHRpb24gKi8KKyNkZWZpbmUgU0NUUF9D
TVRfT05fT0ZGICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVmaW5lIFNDVFBfQ01UX1VT
RV9EQUMgICAgICAgICAgICAgICAgMHgwMDAwMTIwMQorLyogSlJTIC0gUGx1Z2dhYmxlIENvbmdl
c3Rpb24gQ29udHJvbCBTb2NrZXQgb3B0aW9uICovCisjZGVmaW5lIFNDVFBfUExVR0dBQkxFX0ND
ICAgICAgICAgICAgICAgMHgwMDAwMTIwMgorLyogUlMgLSBQbHVnZ2FibGUgU3RyZWFtIFNjaGVk
dWxpbmcgU29ja2V0IG9wdGlvbiAqLworI2RlZmluZSBTQ1RQX1BMVUdHQUJMRV9TUwkJMHgwMDAw
MTIwMworI2RlZmluZSBTQ1RQX1NTX1ZBTFVFCQkJMHgwMDAwMTIwNAorI2RlZmluZSBTQ1RQX0ND
X09QVElPTgkJCTB4MDAwMDEyMDUgLyogT3B0aW9ucyBmb3IgQ0MgbW9kdWxlcyAqLworLyogRm9y
IEktREFUQSAqLworI2RlZmluZSBTQ1RQX0lOVEVSTEVBVklOR19TVVBQT1JURUQJMHgwMDAwMTIw
NgorCisvKiByZWFkIG9ubHkgKi8KKyNkZWZpbmUgU0NUUF9HRVRfU05EQlVGX1VTRQkJMHgwMDAw
MTEwMQorI2RlZmluZSBTQ1RQX0dFVF9TVEFUX0xPRwkJMHgwMDAwMTEwMworI2RlZmluZSBTQ1RQ
X1BDQl9TVEFUVVMJCQkweDAwMDAxMTA0CisjZGVmaW5lIFNDVFBfR0VUX05PTkNFX1ZBTFVFUyAg
ICAgICAgICAgMHgwMDAwMTEwNQorCisKKy8qIFNwZWNpYWwgaG9vayBmb3IgZHluYW1pY2FsbHkg
c2V0dGluZyBwcmltYXJ5IGZvciBhbGwgYXNzb2MncywKKyAqIHRoaXMgaXMgYSB3cml0ZSBvbmx5
IG9wdGlvbiB0aGF0IHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlLgorICovCisjZGVmaW5lIFNDVFBf
U0VUX0RZTkFNSUNfUFJJTUFSWSAgICAgICAgMHgwMDAwMjAwMQorCisvKiBWUkYgKHZpcnR1YWwg
cm91dGVyIGZlYXR1cmUpIGFuZCBtdWx0aS1WUkYgc3VwcG9ydAorICogb3B0aW9ucy4gVlJGJ3Mg
cHJvdmlkZSBzcGxpdHMgd2l0aGluIGEgcm91dGVyCisgKiB0aGF0IGdpdmUgdGhlIHZpZXdzIG9m
IG11bHRpcGxlIHJvdXRlcnMuIEEKKyAqIHN0YW5kYXJkIGhvc3QsIHdpdGhvdXQgVlJGIHN1cHBv
cnQsIGlzIGp1c3QKKyAqIGEgc2luZ2xlIFZSRi4gSWYgVlJGJ3MgYXJlIHN1cHBvcnRlZCB0aGVu
CisgKiB0aGUgdHJhbnNwb3J0IG11c3QgYmUgVlJGIGF3YXJlLiBUaGlzIG1lYW5zCisgKiB0aGF0
IGV2ZXJ5IHNvY2tldCBjYWxsIGNvbWluZyBpbiBtdXN0IGJlIGRpcmVjdGVkCisgKiB3aXRoaW4g
dGhlIGVuZHBvaW50IHRvIG9uZSBvZiB0aGUgVlJGJ3MgaXQgYmVsb25ncworICogdG8uIFRoZSBl
bmRwb2ludCwgYmVmb3JlIGJpbmRpbmcsIG1heSBzZWxlY3QKKyAqIHRoZSAiZGVmYXVsdCIgVlJG
IGl0IGlzIGluIGJ5IHVzaW5nIGEgc2V0IHNvY2tldAorICogb3B0aW9uIHdpdGggU0NUUF9WUkZf
SUQuIFRoaXMgd2lsbCBhbHNvCisgKiBnZXQgcHJvcGFnYXRlZCB0byB0aGUgZGVmYXVsdCBWUkYu
IE9uY2UgdGhlCisgKiBlbmRwb2ludCBiaW5kcyBhbiBhZGRyZXNzIHRoZW4gaXQgQ0FOTk9UIGFk
ZAorICogYWRkaXRpb25hbCBWUkYncyB0byBiZWNvbWUgYSBNdWx0aS1WUkYgZW5kcG9pbnQuCisg
KgorICogQmVmb3JlIEJJTkRJTkcgYWRkaXRpb25hbCBWUkYncyBjYW4gYmUgYWRkZWQgd2l0aAor
ICogdGhlIFNDVFBfQUREX1ZSRl9JRCBjYWxsIG9yIGRlbGV0ZWQgd2l0aAorICogU0NUUF9ERUxf
VlJGX0lELgorICoKKyAqIEFzc29jaWF0aW9ucyBhcmUgQUxXQVlTIGNvbnRhaW5lZCBpbnNpZGUg
YSBzaW5nbGUKKyAqIFZSRi4gVGhleSBjYW5ub3QgcmVzaWRlIGluIHR3byAob3IgbW9yZSkgVlJG
J3MuIEluY29taW5nCisgKiBwYWNrZXRzLCBhc3N1bWluZyB0aGUgcm91dGVyIGlzIFZSRiBhd2Fy
ZSwgY2FuIGFsd2F5cworICogdGVsbCB1cyB3aGF0IFZSRiB0aGV5IGFycml2ZWQgb24uIEEgaG9z
dCBub3Qgc3VwcG9ydGluZworICogYW55IFZSRidzIHdpbGwgZmluZCB0aGF0IHRoZSBwYWNrZXRz
IGFsd2F5cyBhcnJpdmVkIG9uIHRoZQorICogc2luZ2xlIFZSRiB0aGF0IHRoZSBob3N0IGhhcy4K
KyAqCisgKi8KKworI2RlZmluZSBTQ1RQX1ZSRl9JRAkJCTB4MDAwMDMwMDEKKyNkZWZpbmUgU0NU
UF9BRERfVlJGX0lECQkJMHgwMDAwMzAwMgorI2RlZmluZSBTQ1RQX0dFVF9WUkZfSURTCQkweDAw
MDAzMDAzCisjZGVmaW5lIFNDVFBfR0VUX0FTT0NfVlJGICAgICAgICAgICAgICAgMHgwMDAwMzAw
NAorI2RlZmluZSBTQ1RQX0RFTF9WUkZfSUQgICAgICAgICAgICAgICAgIDB4MDAwMDMwMDUKKwor
LyoKKyAqIElmIHlvdSBlbmFibGUgcGFja2V0IGxvZ2dpbmcgeW91IGNhbiBnZXQKKyAqIGEgcG9v
ciBtYW5zIGV0aGVyZWFsIG91dHB1dCBpbiBiaW5hcnkKKyAqIGZvcm0uIE5vdGUgdGhpcyBpcyBh
IGNvbXBpbGUgb3B0aW9uIHRvCisgKiB0aGUga2VybmVsLCAgU0NUUF9QQUNLRVRfTE9HR0lORywg
YW5kCisgKiB3aXRob3V0IGl0IGluIHlvdXIga2VybmVsIHlvdQorICogd2lsbCBnZXQgYSBFT1BO
T1RTVVBQCisgKi8KKyNkZWZpbmUgU0NUUF9HRVRfUEFDS0VUX0xPRyAgICAgICAgICAgICAweDAw
MDA0MDAxCisKKy8qCisgKiBoaWRkZW4gaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgb3B0aW9ucyB0
aGVzZSBhcmUgTk9UIHVzZXIgdmlzaWJsZSAoc2hvdWxkCisgKiBtb3ZlIG91dCBvZiBzY3RwLmgp
CisgKi8KKy8qIHNjdHBfYmluZHgoKSBmbGFncyBhcyBoaWRkZW4gc29ja2V0IG9wdGlvbnMgKi8K
KyNkZWZpbmUgU0NUUF9CSU5EWF9BRERfQUREUgkJMHgwMDAwODAwMQorI2RlZmluZSBTQ1RQX0JJ
TkRYX1JFTV9BRERSCQkweDAwMDA4MDAyCisvKiBIaWRkZW4gc29ja2V0IG9wdGlvbiB0aGF0IGdl
dHMgdGhlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJFU1NFUwkJMHgw
MDAwODAwMworI2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9BRERSRVNTRVMJMHgwMDAwODAwNAorLyog
cmV0dXJuIHRoZSB0b3RhbCBjb3VudCBpbiBieXRlcyBuZWVkZWQgdG8gaG9sZCBhbGwgbG9jYWwg
YWRkcmVzc2VzIGJvdW5kICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FMX0FERFJfU0laRQkweDAw
MDA4MDA1CisvKiBSZXR1cm4gdGhlIHRvdGFsIGNvdW50IGluIGJ5dGVzIG5lZWRlZCB0byBob2xk
IHRoZSByZW1vdGUgYWRkcmVzcyAqLworI2RlZmluZSBTQ1RQX0dFVF9SRU1PVEVfQUREUl9TSVpF
CTB4MDAwMDgwMDYKKy8qIGhpZGRlbiBvcHRpb24gZm9yIGNvbm5lY3R4ICovCisjZGVmaW5lIFND
VFBfQ09OTkVDVF9YCQkJMHgwMDAwODAwNworLyogaGlkZGVuIG9wdGlvbiBmb3IgY29ubmVjdHhf
ZGVsYXllZCwgcGFydCBvZiBzZW5keCAqLworI2RlZmluZSBTQ1RQX0NPTk5FQ1RfWF9ERUxBWUVE
CQkweDAwMDA4MDA4CisjZGVmaW5lIFNDVFBfQ09OTkVDVF9YX0NPTVBMRVRFICAgICAgICAgMHgw
MDAwODAwOQorLyogaGlkZGVuIHNvY2tldCBvcHRpb24gYmFzZWQgc2N0cF9wZWVsb2ZmICovCisj
ZGVmaW5lIFNDVFBfUEVFTE9GRiAgICAgICAgICAgICAgICAgICAgMHgwMDAwODAwYQorLyogdGhl
IHJlYWwgd29ya2VyIGZvciBzY3RwX2dldGFkZHJsZW4oKSAqLworI2RlZmluZSBTQ1RQX0dFVF9B
RERSX0xFTiAgICAgICAgICAgICAgIDB4MDAwMDgwMGIKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
Ky8qIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBBcHBsZSBsaXN0ZW4oKSBpc3N1ZSwgbm8gYXJn
cyB1c2VkICovCisjZGVmaW5lIFNDVFBfTElTVEVOX0ZJWAkJCTB4MDAwMDgwMGMKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisvKiB3b3JrYXJvdW5kIGZvciBDeWd3aW4gb24gV2lu
ZG93czogcmV0dXJucyB0aGUgU09DS0VUIGhhbmRsZSAqLworI2RlZmluZSBTQ1RQX0dFVF9IQU5E
TEUJCQkweDAwMDA4MDBkCisjZW5kaWYKKy8qIERlYnVnIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUg
cHVyZ2VkICovCisjZGVmaW5lIFNDVFBfU0VUX0lOSVRJQUxfREJHX1NFUQkweDAwMDA5ZjAwCisK
Ky8qIEpSUyAtIFN1cHBvcnRlZCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlcyBmb3IgcGx1Z2dh
YmxlCisgKiBjb25nZXN0aW9uIGNvbnRyb2wKKyAqLworLyogU3RhbmRhcmQgVENQIENvbmdlc3Rp
b24gQ29udHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX1JGQzI1ODEJCTB4MDAwMDAwMDAKKy8qIEhp
Z2ggU3BlZWQgVENQIENvbmdlc3Rpb24gQ29udHJvbCAoRmxveWQpICovCisjZGVmaW5lIFNDVFBf
Q0NfSFNUQ1AJCTB4MDAwMDAwMDEKKy8qIEhUQ1AgQ29uZ2VzdGlvbiBDb250cm9sICovCisjZGVm
aW5lIFNDVFBfQ0NfSFRDUAkJMHgwMDAwMDAwMgorLyogUlRDQyBDb25nZXN0aW9uIENvbnRyb2wg
LSBSRkMyNTgxIHBsdXMgKi8KKyNkZWZpbmUgU0NUUF9DQ19SVENDICAgICAgICAgICAgMHgwMDAw
MDAwMworCisjZGVmaW5lIFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9ERQkweDAwMDAyMDAwCisjZGVm
aW5lIFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDTgkweDAwMDAyMDAxCisjZGVmaW5lIFNDVFBfQ0Nf
T1BUX1NURUFEWV9TVEVQICAgICAgICAgMHgwMDAwMjAwMgorCisjZGVmaW5lIFNDVFBfQ01UX09G
RiAgICAgICAgICAgIDAKKyNkZWZpbmUgU0NUUF9DTVRfQkFTRSAgICAgICAgICAgMQorI2RlZmlu
ZSBTQ1RQX0NNVF9SUFYxICAgICAgICAgICAyCisjZGVmaW5lIFNDVFBfQ01UX1JQVjIgICAgICAg
ICAgIDMKKyNkZWZpbmUgU0NUUF9DTVRfTVBUQ1AgICAgICAgICAgNAorI2RlZmluZSBTQ1RQX0NN
VF9NQVggICAgICAgICAgICBTQ1RQX0NNVF9NUFRDUAorCisvKiBSUyAtIFN1cHBvcnRlZCBzdHJl
YW0gc2NoZWR1bGluZyBtb2R1bGVzIGZvciBwbHVnZ2FibGUKKyAqIHN0cmVhbSBzY2hlZHVsaW5n
CisgKi8KKy8qIERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluICovCisjZGVmaW5lIFNDVFBfU1Nf
REVGQVVMVAkJCTB4MDAwMDAwMDAKKy8qIFJlYWwgcm91bmQtcm9iaW4gKi8KKyNkZWZpbmUgU0NU
UF9TU19ST1VORF9ST0JJTgkJMHgwMDAwMDAwMQorLyogUmVhbCByb3VuZC1yb2JpbiBwZXIgcGFj
a2V0ICovCisjZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9CSU5fUEFDS0VUCTB4MDAwMDAwMDIKKy8q
IFByaW9yaXR5ICovCisjZGVmaW5lIFNDVFBfU1NfUFJJT1JJVFkJCTB4MDAwMDAwMDMKKy8qIEZh
aXIgQmFuZHdpZHRoICovCisjZGVmaW5lIFNDVFBfU1NfRkFJUl9CQU5EV0lUSAkJMHgwMDAwMDAw
NAorLyogRmlyc3QtY29tZSwgZmlyc3Qtc2VydmUgKi8KKyNkZWZpbmUgU0NUUF9TU19GSVJTVF9D
T01FCQkweDAwMDAwMDA1CisKKworLyogZnJhZ21lbnQgaW50ZXJsZWF2ZSBjb25zdGFudHMKKyAq
IHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgdGhlc2Ugb3IKKyAqIEVJTlZBTCByZXR1cm5lZC4KKyAq
LworI2RlZmluZSBTQ1RQX0ZSQUdfTEVWRUxfMCAgICAweDAwMDAwMDAwCisjZGVmaW5lIFNDVFBf
RlJBR19MRVZFTF8xICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9GUkFHX0xFVkVMXzIgICAg
MHgwMDAwMDAwMgorCisvKgorICogdXNlciBzdGF0ZSB2YWx1ZXMKKyAqLworI2RlZmluZSBTQ1RQ
X0NMT1NFRAkJCTB4MDAwMAorI2RlZmluZSBTQ1RQX0JPVU5ECQkJMHgxMDAwCisjZGVmaW5lIFND
VFBfTElTVEVOCQkJMHgyMDAwCisjZGVmaW5lIFNDVFBfQ09PS0lFX1dBSVQJCTB4MDAwMgorI2Rl
ZmluZSBTQ1RQX0NPT0tJRV9FQ0hPRUQJCTB4MDAwNAorI2RlZmluZSBTQ1RQX0VTVEFCTElTSEVE
CQkweDAwMDgKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9TRU5UCQkweDAwMTAKKyNkZWZpbmUgU0NU
UF9TSFVURE9XTl9SRUNFSVZFRAkJMHgwMDIwCisjZGVmaW5lIFNDVFBfU0hVVERPV05fQUNLX1NF
TlQJCTB4MDA0MAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1BFTkRJTkcJCTB4MDA4MAorCisvKgor
ICogU0NUUCBvcGVyYXRpb25hbCBlcnJvciBjb2RlcyAodXNlciB2aXNpYmxlKQorICovCisjZGVm
aW5lIFNDVFBfQ0FVU0VfTk9fRVJST1IJCTB4MDAwMAorI2RlZmluZSBTQ1RQX0NBVVNFX0lOVkFM
SURfU1RSRUFNCTB4MDAwMQorI2RlZmluZSBTQ1RQX0NBVVNFX01JU1NJTkdfUEFSQU0JMHgwMDAy
CisjZGVmaW5lIFNDVFBfQ0FVU0VfU1RBTEVfQ09PS0lFCQkweDAwMDMKKyNkZWZpbmUgU0NUUF9D
QVVTRV9PVVRfT0ZfUkVTQwkJMHgwMDA0CisjZGVmaW5lIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxF
X0FERFIJMHgwMDA1CisjZGVmaW5lIFNDVFBfQ0FVU0VfVU5SRUNPR19DSFVOSwkweDAwMDYKKyNk
ZWZpbmUgU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNCTB4MDAwNworI2RlZmluZSBTQ1RQX0NBVVNF
X1VOUkVDT0dfUEFSQU0JMHgwMDA4CisjZGVmaW5lIFNDVFBfQ0FVU0VfTk9fVVNFUl9EQVRBCQkw
eDAwMDkKKyNkZWZpbmUgU0NUUF9DQVVTRV9DT09LSUVfSU5fU0hVVERPV04JMHgwMDBhCisjZGVm
aW5lIFNDVFBfQ0FVU0VfUkVTVEFSVF9XX05FV0FERFIJMHgwMDBiCisjZGVmaW5lIFNDVFBfQ0FV
U0VfVVNFUl9JTklUSUFURURfQUJUCTB4MDAwYworI2RlZmluZSBTQ1RQX0NBVVNFX1BST1RPQ09M
X1ZJT0xBVElPTgkweDAwMGQKKworLyogRXJyb3IgY2F1c2VzIGZyb20gUkZDNTA2MSAqLworI2Rl
ZmluZSBTQ1RQX0NBVVNFX0RFTEVUSU5HX0xBU1RfQUREUgkweDAwYTAKKyNkZWZpbmUgU0NUUF9D
QVVTRV9SRVNPVVJDRV9TSE9SVEFHRQkweDAwYTEKKyNkZWZpbmUgU0NUUF9DQVVTRV9ERUxFVElO
R19TUkNfQUREUgkweDAwYTIKKyNkZWZpbmUgU0NUUF9DQVVTRV9JTExFR0FMX0FTQ09ORl9BQ0sJ
MHgwMGEzCisjZGVmaW5lIFNDVFBfQ0FVU0VfUkVRVUVTVF9SRUZVU0VECTB4MDBhNAorCisvKiBF
cnJvciBjYXVzZXMgZnJvbSBuYXQtZHJhZnQgKi8KKyNkZWZpbmUgU0NUUF9DQVVTRV9OQVRfQ09M
TElESU5HX1NUQVRFICAweDAwYjAKKyNkZWZpbmUgU0NUUF9DQVVTRV9OQVRfTUlTU0lOR19TVEFU
RSAgICAweDAwYjEKKworLyogRXJyb3IgY2F1c2VzIGZyb20gUkZDNDg5NSAqLworI2RlZmluZSBT
Q1RQX0NBVVNFX1VOU1VQUE9SVEVEX0hNQUNJRAkweDAxMDUKKworLyoKKyAqIGVycm9yIGNhdXNl
IHBhcmFtZXRlcnMgKHVzZXIgdmlzaWJsZSkKKyAqLworc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2Nh
dXNlIHsKKwl1aW50MTZfdCBjb2RlOworCXVpbnQxNl90IGxlbmd0aDsKKwl1aW50OF90IGluZm9b
XTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIHsKKwl1aW50MTZf
dCBjb2RlOworCXVpbnQxNl90IGxlbmd0aDsKKwkvKiBvcHRpb25hbCBjYXVzZS1zcGVjaWZpYyBp
bmZvIG1heSBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX2lu
dmFsaWRfc3RyZWFtIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1T
Q1RQX0NBVVNFX0lOVkFMSURfU1RSRUFNICovCisJdWludDE2X3Qgc3RyZWFtX2lkOwkvKiBzdHJl
YW0gaWQgb2YgdGhlIERBVEEgaW4gZXJyb3IgKi8KKwl1aW50MTZfdCByZXNlcnZlZDsKK30gU0NU
UF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX21pc3NpbmdfcGFyYW0geworCXN0cnVjdCBz
Y3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfTUlTU0lOR19QQVJBTSAq
LworCXVpbnQzMl90IG51bV9taXNzaW5nX3BhcmFtczsJLyogbnVtYmVyIG9mIG1pc3NpbmcgcGFy
YW1ldGVycyAqLworCXVpbnQxNl90IHR5cGVbXTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBz
Y3RwX2Vycm9yX3N0YWxlX2Nvb2tpZSB7CisJc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1c2U7
CS8qIGNvZGU9U0NUUF9DQVVTRV9TVEFMRV9DT09LSUUgKi8KKwl1aW50MzJfdCBzdGFsZV90aW1l
OwkvKiB0aW1lIGluIHVzZWMgb2Ygc3RhbGVuZXNzICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1
Y3Qgc2N0cF9lcnJvcl9vdXRfb2ZfcmVzb3VyY2UgeworCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNl
IGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfT1VUX09GX1JFU09VUkNFUyAqLworfSBTQ1RQX1BB
Q0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfdW5yZXNvbHZfYWRkciB7CisJc3RydWN0IHNjdHBf
ZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQUREUiAq
LworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfdW5yZWNvZ25pemVkX2NodW5r
IHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX1VO
UkVDT0dfQ0hVTksgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsvKiBoZWFkZXIgZnJvbSBj
aHVuayBpbiBlcnJvciAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3Jfbm9f
dXNlcl9kYXRhIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQ
X0NBVVNFX05PX1VTRVJfREFUQSAqLworCXVpbnQzMl90IHRzbjsJCQkvKiBUU04gb2YgdGhlIGVt
cHR5IGRhdGEgY2h1bmsgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX2F1
dGhfaW52YWxpZF9obWFjIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29k
ZT1TQ1RQX0NBVVNFX1VOU1VQUE9SVEVEX0hNQUNJRCAqLworCXVpbnQxNl90IGhtYWNfaWQ7Cit9
IFNDVFBfUEFDS0VEOworCisvKgorICogTWFpbiBTQ1RQIGNodW5rIHR5cGVzIHdlIHBsYWNlIHRo
ZXNlIGhlcmUgc28gbmF0ZCBhbmQgZi93J3MgaW4gdXNlciBsYW5kCisgKiBjYW4gZmluZCB0aGVt
LgorICovCisvKioqKioqKioqKioqMHgwMCBzZXJpZXMgKioqKioqKioqKiovCisjZGVmaW5lIFND
VFBfREFUQQkJMHgwMAorI2RlZmluZSBTQ1RQX0lOSVRJQVRJT04JCTB4MDEKKyNkZWZpbmUgU0NU
UF9JTklUSUFUSU9OX0FDSwkweDAyCisjZGVmaW5lIFNDVFBfU0VMRUNUSVZFX0FDSwkweDAzCisj
ZGVmaW5lIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1QJMHgwNAorI2RlZmluZSBTQ1RQX0hFQVJUQkVB
VF9BQ0sJMHgwNQorI2RlZmluZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OCTB4MDYKKyNkZWZpbmUg
U0NUUF9TSFVURE9XTgkJMHgwNworI2RlZmluZSBTQ1RQX1NIVVRET1dOX0FDSwkweDA4CisjZGVm
aW5lIFNDVFBfT1BFUkFUSU9OX0VSUk9SCTB4MDkKKyNkZWZpbmUgU0NUUF9DT09LSUVfRUNITwkw
eDBhCisjZGVmaW5lIFNDVFBfQ09PS0lFX0FDSwkJMHgwYgorI2RlZmluZSBTQ1RQX0VDTl9FQ0hP
CQkweDBjCisjZGVmaW5lIFNDVFBfRUNOX0NXUgkJMHgwZAorI2RlZmluZSBTQ1RQX1NIVVRET1dO
X0NPTVBMRVRFCTB4MGUKKy8qIFJGQzQ4OTUgKi8KKyNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElP
TiAgICAgMHgwZgorLyogRVkgbnJfc2FjayBjaHVuayBpZCovCisjZGVmaW5lIFNDVFBfTlJfU0VM
RUNUSVZFX0FDSwkweDEwCisvKioqKioqKioqKioqMHg0MCBzZXJpZXMgKioqKioqKioqKiovCisj
ZGVmaW5lIFNDVFBfSURBVEEJCTB4NDAKKy8qKioqKioqKioqKioweDgwIHNlcmllcyAqKioqKioq
KioqKi8KKy8qIFJGQzUwNjEgKi8KKyNkZWZpbmUJU0NUUF9BU0NPTkZfQUNLCQkweDgwCisvKiBk
cmFmdC1pZXRmLXN0ZXdhcnQtcGt0ZHJwc2N0cCAqLworI2RlZmluZSBTQ1RQX1BBQ0tFVF9EUk9Q
UEVECTB4ODEKKy8qIGRyYWZ0LWlldGYtc3Rld2FydC1zdHJyZXNldC14eHggKi8KKyNkZWZpbmUg
U0NUUF9TVFJFQU1fUkVTRVQgICAgICAgMHg4MgorCisvKiBSRkM0ODIwICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisjZGVmaW5lIFNDVFBfUEFEX0NIVU5LICAgICAgICAgIDB4ODQKKy8qKioq
KioqKioqKioweGMwIHNlcmllcyAqKioqKioqKioqKi8KKy8qIFJGQzM3NTggKi8KKyNkZWZpbmUg
U0NUUF9GT1JXQVJEX0NVTV9UU04JMHhjMAorLyogUkZDNTA2MSAqLworI2RlZmluZSBTQ1RQX0FT
Q09ORgkJMHhjMQorI2RlZmluZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU04JMHhjMgorCisvKiBBQk9S
VCBhbmQgU0hVVERPV04gQ09NUExFVEUgRkxBRyAqLworI2RlZmluZSBTQ1RQX0hBRF9OT19UQ0IJ
CTB4MDEKKworLyogUGFja2V0IGRyb3BwZWQgZmxhZ3MgKi8KKyNkZWZpbmUgU0NUUF9GUk9NX01J
RERMRV9CT1gJU0NUUF9IQURfTk9fVENCCisjZGVmaW5lIFNDVFBfQkFEQ1JDCQkweDAyCisjZGVm
aW5lIFNDVFBfUEFDS0VUX1RSVU5DQVRFRAkweDA0CisKKy8qIEZsYWcgZm9yIEVDTiAtQ1dSICov
CisjZGVmaW5lIFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERSAweDAxCisjZGVmaW5lIFNDVFBfQ1dS
X0lOX1NBTUVfV0lORE9XICAweDAyCisKKyNkZWZpbmUgU0NUUF9TQVRfTkVUV09SS19NSU4JNDAw
CS8qIG1pbiBtcyBmb3IgUlRUIHRvIHNldCBzYXRlbGxpdGUKKwkJCQkJICogdGltZSAqLworI2Rl
ZmluZSBTQ1RQX1NBVF9ORVRXT1JLX0JVUlNUX0lOQ1IgIDIJLyogaG93IG1hbnkgdGltZXMgdG8g
bXVsdGlwbHkgbWF4YnVyc3QKKwkJCQkJICogaW4gc2F0ICovCisKKy8qIERhdGEgQ2h1Y2sgU3Bl
Y2lmaWMgRmxhZ3MgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX0ZSQUdfTUFTSyAgICAgICAgMHgwMwor
I2RlZmluZSBTQ1RQX0RBVEFfTUlERExFX0ZSQUcgICAgICAweDAwCisjZGVmaW5lIFNDVFBfREFU
QV9MQVNUX0ZSQUcgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcgICAg
ICAgMHgwMgorI2RlZmluZSBTQ1RQX0RBVEFfTk9UX0ZSQUcgICAgICAgICAweDAzCisjZGVmaW5l
IFNDVFBfREFUQV9VTk9SREVSRUQgICAgICAgIDB4MDQKKyNkZWZpbmUgU0NUUF9EQVRBX1NBQ0tf
SU1NRURJQVRFTFkgMHgwOAorLyogRUNOIE5vbmNlOiBTQUNLIENodW5rIFNwZWNpZmljIEZsYWdz
ICovCisjZGVmaW5lIFNDVFBfU0FDS19OT05DRV9TVU0gICAgICAgIDB4MDEKKworLyogQ01UIERB
QyBhbGdvcml0aG0gU0FDSyBmbGFnICovCisjZGVmaW5lIFNDVFBfU0FDS19DTVRfREFDICAgICAg
ICAgIDB4ODAKKworLyoKKyAqIFBDQiBmbGFncyAoaW4gc2N0cF9mbGFncyBiaXRtYXNrKS4KKyAq
IE5vdGUgdGhlIGZlYXR1cmVzIGFuZCBmbGFncyBhcmUgbWVhbnQKKyAqIGZvciB1c2UgYnkgbmV0
c3RhdC4KKyAqLworI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFCQkweDAwMDAwMDAxCisj
ZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEwJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQUND
RVBUSU5HCTB4MDAwMDAwMDgKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORAkJMHgwMDAw
MDAxMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCAgICAgICAgIDB4MDAwNDAwMDAK
KyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfV0FTX0NPTk5FQ1RFRCAgICAweDAwMDgwMDAwCisjZGVm
aW5lIFNDVFBfUENCX0ZMQUdTX1dBU19BQk9SVEVEICAgICAgMHgwMDEwMDAwMAorLyogVENQIG1v
ZGVsIHN1cHBvcnQgKi8KKworI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQJMHgwMDIw
MDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MCTB4MDA0MDAwMDAKKyNkZWZp
bmUgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFCTB4MDA4MDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0Jf
RkxBR1NfV0FLRU9VVFBVVAkweDAxMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBS0VJ
TlBVVAkweDAyMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2CQkweDA0MDAw
MDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JMT0NLSU5HX0lPCTB4MDgwMDAwMDAKKyNkZWZp
bmUgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUJMHgxMDAwMDAwMAorI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfQUxMR09ORQkweDIwMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9DQU5UX1JFQUQJMHg0MDAwMDAwMAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTiAgICAgICAweDgwMDAwMDAwCisKKy8q
IGZsYWdzIHRvIGNvcHkgdG8gbmV3IFBDQiAqLworI2RlZmluZSBTQ1RQX1BDQl9DT1BZX0ZMQUdT
CQkoU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEx8XAorCQkJCQkgU0NUUF9QQ0JfRkxBR1NfV0FLRUlO
UFVUfFwKKwkJCQkJIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2fFwKKwkJCQkJIFNDVFBfUENCX0ZM
QUdTX0JPVU5EX0NPTk4pCisjZWxzZQorCisvKiBmbGFncyB0byBjb3B5IHRvIG5ldyBQQ0IgKi8K
KyNkZWZpbmUgU0NUUF9QQ0JfQ09QWV9GTEFHUwkJKFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMfFwK
KwkJCQkJIFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVHxcCisJCQkJCSBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNikKKyNlbmRpZgorCisvKgorICogUENCIEZlYXR1cmVzIChpbiBzY3RwX2ZlYXR1cmVz
IGJpdG1hc2spCisgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEICAgICAg
MHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPICAg
ICAgIDB4MDAwMDAwMDAwMDAwMDAwMiAvKiBkZXByZWNhdGVkICovCisjZGVmaW5lIFNDVFBfUENC
X0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCAgIDB4MDAwMDAwMDAwMDAwMDAwNAorI2RlZmluZSBTQ1RQ
X1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUgICAweDAwMDAwMDAwMDAwMDAwMDgKKyNkZWZpbmUg
U0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyAgMHgwMDAwMDAwMDAwMDAwMDEwCisjZGVm
aW5lIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORiAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDAyMAor
I2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORiAgICAgICAweDAwMDAwMDAwMDAwMDAw
NDAKKy8qIHNvY2tldCBvcHRpb25zICovCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05PREVMQVkg
ICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDEwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRP
Q0xPU0UgICAgICAgICAweDAwMDAwMDAwMDAwMDAyMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
UkVDVkRBVEFJT0VWTlQgICAgMHgwMDAwMDAwMDAwMDAwNDAwIC8qIGRlcHJlY2F0ZWQgKi8KKyNk
ZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCAgICAgMHgwMDAwMDAwMDAwMDAwODAw
CisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQgICAgIDB4MDAwMDAwMDAwMDAw
MTAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWUEVFUkVSUiAgICAgICAweDAwMDAwMDAw
MDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVCAgMHgwMDAw
MDAwMDAwMDA0MDAwIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVD
VlNIVVRET1dORVZOVCAgMHgwMDAwMDAwMDAwMDA4MDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdT
X0FEQVBUQVRJT05FVk5UICAgIDB4MDAwMDAwMDAwMDAxMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9G
TEFHU19QREFQSUVWTlQgICAgICAgICAweDAwMDAwMDAwMDAwMjAwMDAKKyNkZWZpbmUgU0NUUF9Q
Q0JfRkxBR1NfQVVUSEVWTlQgICAgICAgICAgMHgwMDAwMDAwMDAwMDQwMDAwCisjZGVmaW5lIFND
VFBfUENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQgIDB4MDAwMDAwMDAwMDA4MDAwMAorI2RlZmlu
ZSBTQ1RQX1BDQl9GTEFHU19OT19GUkFHTUVOVCAgICAgICAweDAwMDAwMDAwMDAxMDAwMDAKKyNk
ZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SICAgICAgMHgwMDAwMDAwMDAwNDAwMDAw
CisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBFRF9WNCAgIDB4MDAwMDAwMDAwMDgw
MDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NPTkZTICAweDAwMDAwMDAw
MDEwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFICAgICAgICAgMHgwMDAw
MDAwMDAyMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQgICAgICAgICAgIDB4
MDAwMDAwMDAwNDAwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTyAgICAg
ICAweDAwMDAwMDAwMDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8g
ICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0FTU09DX1JF
U0VURVZOVCAgIDB4MDAwMDAwMDAyMDAwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19TVFJF
QU1fQ0hBTkdFRVZOVCAweDAwMDAwMDAwNDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
UkVDVk5TRU5ERkFJTEVWTlQgMHgwMDAwMDAwMDgwMDAwMDAwCisKKy8qLQorICogbW9iaWxpdHlf
ZmVhdHVyZXMgcGFyYW1ldGVycyAoYnkgbWljY2hpZSkuTm90ZQorICogdGhlc2UgZmVhdHVyZXMg
YXJlIGFwcGxpZWQgYWdhaW5zdCB0aGUKKyAqIHNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgZmxhZ3Mu
LiBub3QgdGhlIHNjdHBfZmVhdHVyZXMKKyAqIGZsYWdzLgorICovCisjZGVmaW5lIFNDVFBfTU9C
SUxJVFlfQkFTRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9NT0JJTElU
WV9GQVNUSEFORE9GRiAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBTQ1RQX01PQklMSVRZX1BS
SU1fREVMRVRFRCAgICAgICAweDAwMDAwMDA0CisKKworI2RlZmluZSBTQ1RQX1NNQUxMRVNUX1BN
VFUgNTEyCSAvKiBzbWFsbGVzdCBwbXR1IGFsbG93ZWQgd2hlbiBkaXNhYmxpbmcgUE1UVSBkaXNj
b3ZlcnkgKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNwcmFnbWEg
cGFjayhwb3ApCisjZW5kaWYKKyN1bmRlZiBTQ1RQX1BBQ0tFRAorCisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3Vpby5oPgorCisvKiBUaGlzIGRpY3RhdGVzIHRoZSBzaXplIG9mIHRoZSBwYWNrZXQK
KyAqIGNvbGxlY3Rpb24gYnVmZmVyLiBUaGlzIG9ubHkgYXBwbGllcworICogaWYgU0NUUF9QQUNL
RVRfTE9HR0lORyBpcyBlbmFibGVkIGluCisgKiB5b3VyIGNvbmZpZy4KKyAqLworI2RlZmluZSBT
Q1RQX1BBQ0tFVF9MT0dfU0laRSA2NTUzNgorCisvKiBNYXhpbXVtIGRlbGF5cyBhbmQgc3VjaCBh
IHVzZXIgY2FuIHNldCBmb3Igb3B0aW9ucyB0aGF0CisgKiB0YWtlIG1zLgorICovCisjZGVmaW5l
IFNDVFBfTUFYX1NBQ0tfREVMQVkgNTAwIC8qIHBlciBSRkM0OTYwICovCisjZGVmaW5lIFNDVFBf
TUFYX0hCX0lOVEVSVkFMIDE0NDAwMDAwIC8qIDQgaG91cnMgaW4gbXMgKi8KKyNkZWZpbmUgU0NU
UF9NQVhfQ09PS0lFX0xJRkUgIDM2MDAwMDAgLyogMSBob3VyIGluIG1zICovCisKKworLyogVHlw
ZXMgb2YgbG9nZ2luZy9LVFIgdHJhY2luZyAgdGhhdCBjYW4gYmUgZW5hYmxlZCB2aWEgdGhlCisg
KiBzeXNjdGwgbmV0LmluZXQuc2N0cC5zY3RwX2xvZ2dpbmcuIFlvdSBtdXN0IGFsc28gZW5hYmxl
CisgKiBTVUJTWVMgdHJhY2luZy4KKyAqIE5vdGUgdGhhdCB5b3UgbXVzdCBoYXZlIHRoZSBTQ1RQ
IG9wdGlvbiBpbiB0aGUga2VybmVsCisgKiB0byBlbmFibGUgdGhlc2UgYXMgd2VsbC4KKyAqLwor
I2RlZmluZSBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDAwMDAxCisjZGVmaW5lIFND
VFBfQ1dORF9NT05JVE9SX0VOQUJMRQkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9DV05EX0xP
R0dJTkdfRU5BQkxFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VO
QUJMRQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRQkJCQkweDAw
MDAwMDQwCisjZGVmaW5lIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDAwODAKKyNk
ZWZpbmUgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUJCQkJMHgwMDAwMDEwMAorI2RlZmluZSBTQ1RQ
X01CQ05UX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDIwMAorI2RlZmluZSBTQ1RQX01CVUZfTE9H
R0lOR19FTkFCTEUJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFC
TEUJCQkweDAwMDAwODAwCisjZGVmaW5lIFNDVFBfUkVDVl9SV05EX0xPR0dJTkdfRU5BQkxFCQkJ
MHgwMDAwMTAwMAorI2RlZmluZSBTQ1RQX1JUVFZBUl9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDIw
MDAKKyNkZWZpbmUgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwNDAwMAorI2RlZmlu
ZSBTQ1RQX1NBQ0tfUldORF9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDgwMDAKKyNkZWZpbmUgU0NU
UF9TQl9MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDEwMDAwCisjZGVmaW5lIFNDVFBfU1RSX0xPR0dJ
TkdfRU5BQkxFCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgU0NUUF9XQUtFX0xPR0dJTkdfRU5BQkxF
CQkJMHgwMDA0MDAwMAorI2RlZmluZSBTQ1RQX0xPR19NQVhCVVJTVF9FTkFCTEUJCQkweDAwMDgw
MDAwCisjZGVmaW5lIFNDVFBfTE9HX1JXTkRfRU5BQkxFICAgIAkJCTB4MDAxMDAwMDAKKyNkZWZp
bmUgU0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUJCQkweDAwMjAwMDAwCisjZGVmaW5lIFND
VFBfTFRSQUNFX0NIVU5LX0VOQUJMRQkJCTB4MDA0MDAwMDAKKyNkZWZpbmUgU0NUUF9MVFJBQ0Vf
RVJST1JfRU5BQkxFCQkJMHgwMDgwMDAwMAorI2RlZmluZSBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJ
TkcJCQkweDAxMDAwMDAwCisjZGVmaW5lIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcJCQkJMHgwMjAw
MDAwMAorI2RlZmluZSBTQ1RQX0xPR19BVF9TRU5EXzJfU0NUUAkJCQkweDA0MDAwMDAwCisjZGVm
aW5lIFNDVFBfTE9HX0FUX1NFTkRfMl9PVVRRCQkJCTB4MDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9M
T0dfVFJZX0FEVkFOQ0UJCQkJMHgxMDAwMDAwMAorCisjZW5kaWYJCQkJLyogIV9ORVRJTkVUX1ND
VFBfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2Fz
Y29uZi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKaW5kZXgg
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNzA0ZGZkZTAxMGMxNDZh
OTg0ZWY2MjU4NjVkNWUyYzg5NDk0NmZkYyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfYXNjb25mLmMKQEAgLTAsMCArMSwzNTE5IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywg
YnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoK
KyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
bgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBD
aXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYXNjb25m
LmMgMzI0MDU2IDIwMTctMDktMjcgMTM6MDU6MjNaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIu
aD4KKworLyoKKyAqIGRlYnVnIGZsYWdzOgorICogU0NUUF9ERUJVR19BU0NPTkYxOiBwcm90b2Nv
bCBpbmZvLCBnZW5lcmFsIGluZm8gYW5kIGVycm9ycworICogU0NUUF9ERUJVR19BU0NPTkYyOiBk
ZXRhaWxlZCBpbmZvCisgKi8KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBBUFBM
RV9GSUxFX05PIDEKKyNlbmRpZgorCisvKgorICogUkZDIDUwNjEKKyAqCisgKiBBbiBBU0NPTkYg
cGFyYW1ldGVyIHF1ZXVlIGV4aXN0cyBwZXIgYXNvYyB3aGljaCBob2xkcyB0aGUgcGVuZGluZyBh
ZGRyZXNzCisgKiBvcGVyYXRpb25zLiAgTGlzdHMgYXJlIHVwZGF0ZWQgdXBvbiByZWNlaXB0IG9m
IEFTQ09ORi1BQ0suCisgKgorICogQSByZXN0cmljdGVkX2FkZHJzIGxpc3QgZXhpc3RzIHBlciBh
c3NvYyB0byBob2xkIGxvY2FsIGFkZHJlc3NlcyB0aGF0IGFyZQorICogbm90ICh5ZXQpIHVzYWJs
ZSBieSB0aGUgYXNzb2MgYXMgYSBzb3VyY2UgYWRkcmVzcy4gIFRoZXNlIGFkZHJlc3NlcyBhcmUK
KyAqIGVpdGhlciBwZW5kaW5nIGFuIEFTQ09ORiBvcGVyYXRpb24gKGFuZCBleGlzdCBvbiB0aGUg
QVNDT05GIHBhcmFtZXRlcgorICogcXVldWUpLCBvciB0aGV5IGFyZSBwZXJtYW5lbnRseSByZXN0
cmljdGVkICh0aGUgcGVlciBoYXMgcmV0dXJuZWQgYW4KKyAqIEVSUk9SIGluZGljYXRpb24gdG8g
YW4gQVNDT05GKEFERCksIG9yIHRoZSBwZWVyIGRvZXMgbm90IHN1cHBvcnQgQVNDT05GKS4KKyAq
CisgKiBEZWxldGVkIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGltbWVkaWF0ZWx5IHJlbW92ZWQgZnJv
bSB0aGUgbGlzdHMgYXMgdGhleSB3aWxsCisgKiAoc2hvcnRseSkgbm8gbG9uZ2VyIGV4aXN0IGlu
IHRoZSBrZXJuZWwuICBXZSBzZW5kIEFTQ09ORnMgYXMgYSBjb3VydGVzeSwKKyAqIG9ubHkgaWYg
YWxsb3dlZC4KKyAqLworCisvKgorICogQVNDT05GIHBhcmFtZXRlciBwcm9jZXNzaW5nLgorICog
cmVzcG9uc2VfcmVxdWlyZWQ6IHNldCBpZiBhIHJlcGx5IGlzIHJlcXVpcmVkIChlZy4gU1VDQ0VT
U19SRVBPUlQpLgorICogcmV0dXJucyBhIG1idWYgdG8gYW4gImVycm9yIiByZXNwb25zZSBwYXJh
bWV0ZXIgb3IgTlVMTC8ic3VjY2VzcyIgaWYgb2suCisgKiBGSVg6IGFsbG9jYXRpbmcgdGhpcyBt
YW55IG1idWZzIG9uIHRoZSBmbHkgaXMgcHJldHR5IGluZWZmaWNpZW50Li4uCisgKi8KK3N0YXRp
YyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKHVpbnQzMl90IGlk
KQoreworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZf
cGFyYW1oZHIgKmFwaDsKKworCW1fcmVwbHkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksCisJCQkJCTAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKwlpZiAobV9yZXBseSA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NP
TkYxLAorCQkJImFzY29uZl9zdWNjZXNzX3Jlc3BvbnNlOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIp
OworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlhcGggPSBtdG9kKG1fcmVwbHksIHN0cnVjdCBzY3Rw
X2FzY29uZl9wYXJhbWhkciAqKTsKKwlhcGgtPmNvcnJlbGF0aW9uX2lkID0gaWQ7CisJYXBoLT5w
aC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVUNDRVNTX1JFUE9SVCk7CisJYXBoLT5waC5wYXJh
bV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKTsKKwlTQ1RQX0JV
Rl9MRU4obV9yZXBseSkgPSBhcGgtPnBoLnBhcmFtX2xlbmd0aDsKKwlhcGgtPnBoLnBhcmFtX2xl
bmd0aCA9IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKworCXJldHVybiAobV9yZXBseSk7
Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZSh1
aW50MzJfdCBpZCwgdWludDE2X3QgY2F1c2UsIHVpbnQ4X3QgKmVycm9yX3RsdiwKKwkJCSAgIHVp
bnQxNl90IHRsdl9sZW5ndGgpCit7CisJc3RydWN0IG1idWYgKm1fcmVwbHkgPSBOVUxMOworCXN0
cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOworCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNl
ICplcnJvcjsKKwl1aW50OF90ICp0bHY7CisKKwltX3JlcGx5ID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKChzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArCisJCQkJCSB0bHZfbGVu
Z3RoICsKKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkpLAorCQkJCQkwLCBN
X05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fcmVwbHkgPT0gTlVMTCkgeworCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJhc2NvbmZfZXJyb3JfcmVzcG9uc2U6IGNvdWxkbid0
IGdldCBtYnVmIVxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWFwaCA9IG10b2QobV9yZXBs
eSwgc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopOworCWVycm9yID0gKHN0cnVjdCBzY3Rw
X2Vycm9yX2NhdXNlICopKGFwaCArIDEpOworCisJYXBoLT5jb3JyZWxhdGlvbl9pZCA9IGlkOwor
CWFwaC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfRVJST1JfQ0FVU0VfSU5EKTsKKwllcnJv
ci0+Y29kZSA9IGh0b25zKGNhdXNlKTsKKwllcnJvci0+bGVuZ3RoID0gdGx2X2xlbmd0aCArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSk7CisJYXBoLT5waC5wYXJhbV9sZW5ndGggPSBl
cnJvci0+bGVuZ3RoICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcik7
CisKKwlpZiAoYXBoLT5waC5wYXJhbV9sZW5ndGggPiBNTEVOKSB7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLAorCQkJImFzY29uZl9lcnJvcl9yZXNwb25zZTogdGx2X2xlbmd0aCAoJXho
KSB0b28gYmlnXG4iLAorCQkJdGx2X2xlbmd0aCk7CisJCXNjdHBfbV9mcmVlbShtX3JlcGx5KTsJ
LyogZGlzY2FyZCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoZXJyb3JfdGx2ICE9IE5V
TEwpIHsKKwkJdGx2ID0gKHVpbnQ4X3QgKikgKGVycm9yICsgMSk7CisJCW1lbWNweSh0bHYsIGVy
cm9yX3RsdiwgdGx2X2xlbmd0aCk7CisJfQorCVNDVFBfQlVGX0xFTihtX3JlcGx5KSA9IGFwaC0+
cGgucGFyYW1fbGVuZ3RoOworCWVycm9yLT5sZW5ndGggPSBodG9ucyhlcnJvci0+bGVuZ3RoKTsK
KwlhcGgtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKwor
CXJldHVybiAobV9yZXBseSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX3Byb2Nl
c3NfYXNjb25mX2FkZF9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyICphcGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIGludCBzZW5kX2hiLCBpbnQgcmVzcG9uc2VfcmVxdWlyZWQpCit7CisJc3RydWN0
IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKKwl1bmlvbiBz
Y3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDE2
X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmlu
ZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1fbGVuZ3RoOworI2VuZGlmCisJc3RydWN0IHNvY2th
ZGRyICpzYTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKwlpbnQgYmFkX2FkZHJlc3MgPSAwOwor
I2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSAqdjRhZGRyOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7CisjZW5k
aWYKKworCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJcGgg
PSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7CisJcGFyYW1fdHlwZSA9IG50b2hz
KHBoLT5wYXJhbV90eXBlKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJ
cGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisjZW5kaWYKKwlzYSA9ICZz
dG9yZS5zYTsKKwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBTQ1RQ
X0lQVjRfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
aXB2NGFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KKwkJCXJldHVy
biAoTlVMTCk7CisJCX0KKwkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICop
cGg7CisJCXNpbiA9ICZzdG9yZS5zaW47CisJCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7
CisJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCXNp
bi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXNpbi0+
c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHIt
PmFkZHI7CisJCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkg
fHwKKwkJICAgIElOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7CisJ
CQliYWRfYWRkcmVzcyA9IDE7CisJCX0KKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElO
QUREUl9BTlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgInByb2Nlc3NfYXNjb25mX2FkZF9pcDogYWRkaW5nICIpOworCQlTQ1RQREJHX0FERFIo
U0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgorCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKKwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAq
LworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFk
ZHJfcGFyYW0gKilwaDsKKwkJc2luNiA9ICZzdG9yZS5zaW42OworCQltZW1zZXQoc2luNiwgMCwg
c2l6ZW9mKCpzaW42KSk7CisJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYg
SEFWRV9TSU42X0xFTgorCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKKyNlbmRpZgorCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJbWVtY3B5
KChjYWRkcl90KSZzaW42LT5zaW42X2FkZHIsIHY2YWRkci0+YWRkciwKKwkJICAgIHNpemVvZihz
dHJ1Y3QgaW42X2FkZHIpKTsKKwkJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2lu
Nl9hZGRyKSkgeworCQkJYmFkX2FkZHJlc3MgPSAxOworCQl9CisJCWlmIChJTjZfSVNfQUREUl9V
TlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCXplcm9fYWRkcmVzcyA9IDE7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBhZGRpbmcg
Iik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7Cisj
ZW5kaWYKKwlkZWZhdWx0OgorCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2Uo
YXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgKHVp
bnQ4X3QgKikgYXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJCXJldHVybiAobV9yZXBseSk7
CisJfQkJCS8qIGVuZCBzd2l0Y2ggKi8KKworCS8qIGlmIDAuMC4wLjAvOjowLCBhZGQgdGhlIHNv
dXJjZSBhZGRyZXNzIGluc3RlYWQgKi8KKwlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpKSB7CisJCXNhID0gc3JjOworCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMSwKKwkJICAgICAgICAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiB1c2luZyBz
b3VyY2UgYWRkciAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsK
Kwl9CisJLyogYWRkIHRoZSBhZGRyZXNzICovCisJaWYgKGJhZF9hZGRyZXNzKSB7CisJCW1fcmVw
bHkgPSBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAorCQkg
ICAgU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFy
YW1fbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCAm
bmV0LCBzdGNiLT5hc29jLnBvcnQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0RPTk9UX1NFVFNDT1BFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9BRERSX0RZTkFNSUNfQURERUQpICE9IDApIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsCisJCQkicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBlcnJvciBhZGRpbmcgYWRkcmVzc1xuIik7
CisJCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9u
X2lkLAorCQkgICAgU0NUUF9DQVVTRV9SRVNPVVJDRV9TSE9SVEFHRSwgKHVpbnQ4X3QgKikgYXBo
LAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJLyogbm90aWZ5IHVwcGVyIGxh
eWVyICovCisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQLCBzdGNi
LCAwLCBzYSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7
CisJCQltX3JlcGx5ID0KKwkJCSAgICBzY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKGFwaC0+
Y29ycmVsYXRpb25faWQpOworCQl9CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1BBVEhNVFVSQUlTRSwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLAorCQkgICAgICAg
ICAgICAgICAgIHN0Y2IsIG5ldCk7CisJCWlmIChzZW5kX2hiKSB7CisJCQlzY3RwX3NlbmRfaGIo
c3RjYiwgbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQl9CisJfQorCXJldHVybiAobV9yZXBs
eSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfYXNjb25mX2RlbF9yZW1vdGVfYWRkcnNfZXhjZXB0
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpzcmMpCit7CisJc3RydWN0
IHNjdHBfbmV0cyAqc3JjX25ldCwgKm5ldDsKKworCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFk
ZHJlc3MgZXhpc3RzIGFzIGEgZGVzdGluYXRpb24gbmV0ICovCisJc3JjX25ldCA9IHNjdHBfZmlu
ZG5ldChzdGNiLCBzcmMpOworCWlmIChzcmNfbmV0ID09IE5VTEwpIHsKKwkJLyogbm90IGZvdW5k
ICovCisJCXJldHVybiAoLTEpOworCX0KKworCS8qIGRlbGV0ZSBhbGwgZGVzdGluYXRpb24gYWRk
cmVzc2VzIGV4Y2VwdCB0aGUgc291cmNlICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5h
c29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAobmV0ICE9IHNyY19uZXQpIHsKKwkJCS8qIGRl
bGV0ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCXNjdHBfcmVtb3ZlX25ldChzdGNiLCBuZXQpOworCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImFzY29uZl9kZWxfcmVtb3RlX2FkZHJz
X2V4Y2VwdDogZGVsZXRpbmcgIik7CisJCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYx
LAorCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpOworCQkJLyog
bm90aWZ5IHVwcGVyIGxheWVyICovCisJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVND
T05GX0RFTEVURV9JUCwgc3RjYiwgMCwKKwkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+
cm8uX2xfYWRkciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgc3RydWN0IG1idWYgKgorc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAo
c3RydWN0IHNvY2thZGRyICpzcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKKwkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgaW50IHJlc3BvbnNlX3JlcXVpcmVkKQoreworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0g
TlVMTDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqcGg7CisJdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKKyNpZiBkZWZpbmVk
KElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1fbGVuZ3RoOworI2VuZGlm
CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKwlpbnQgcmVz
dWx0OworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7
CisjZW5kaWYKKworCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7
CisJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7CisJcGFyYW1fdHlwZSA9
IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJcGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisjZW5kaWYKKwlz
YSA9ICZzdG9yZS5zYTsKKwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKyNpZmRlZiBJTkVUCisJY2Fz
ZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0
IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KKwkJ
CXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3Bh
cmFtICopcGg7CisJCXNpbiA9ICZzdG9yZS5zaW47CisJCW1lbXNldChzaW4sIDAsIHNpemVvZigq
c2luKSk7CisJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVO
CisJCXNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJ
CXNpbi0+c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2
NGFkZHItPmFkZHI7CisJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQor
CQkJemVyb19hZGRyZXNzID0gMTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQki
cHJvY2Vzc19hc2NvbmZfZGVsZXRlX2lwOiBkZWxldGluZyAiKTsKKwkJU0NUUERCR19BRERSKFND
VFBfREVCVUdfQVNDT05GMSwgc2EpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8K
KwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjZhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtICopcGg7CisJCXNpbjYgPSAmc3RvcmUuc2luNjsKKwkJbWVtc2V0KHNpbjYsIDAsIHNp
emVvZigqc2luNikpOworCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhB
VkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
Nik7CisjZW5kaWYKKwkJc2luNi0+c2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCW1lbWNweSgm
c2luNi0+c2luNl9hZGRyLCB2NmFkZHItPmFkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9h
ZGRyKSk7CisJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkK
KwkJCXplcm9fYWRkcmVzcyA9IDE7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJ
InByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogZGVsZXRpbmcgIik7CisJCVNDVFBEQkdfQUREUihT
Q1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlt
X3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwK
KwkJICAgIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFwaCwKKwkJ
ICAgIGFwYXJhbV9sZW5ndGgpOworCQlyZXR1cm4gKG1fcmVwbHkpOworCX0KKworCS8qIG1ha2Ug
c3VyZSB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IGJlaW5nIGRlbGV0ZWQgKi8KKwlpZiAoc2N0
cF9jbXBhZGRyKHNhLCBzcmMpKSB7CisJCS8qIHRyeWluZyB0byBkZWxldGUgdGhlIHNvdXJjZSBh
ZGRyZXNzISAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25m
X2RlbGV0ZV9pcDogdHJpZWQgdG8gZGVsZXRlIHNvdXJjZSBhZGRyXG4iKTsKKwkJbV9yZXBseSA9
IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCisJCSAgICBT
Q1RQX0NBVVNFX0RFTEVUSU5HX1NSQ19BRERSLCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFy
YW1fbGVuZ3RoKTsKKwkJcmV0dXJuIChtX3JlcGx5KTsKKwl9CisKKwkvKiBpZiBkZWxldGluZyAw
LjAuMC4wLzo6MCwgZGVsZXRlIGFsbCBhZGRyZXNzZXMgZXhjZXB0IHNyYyBhZGRyICovCisJaWYg
KHplcm9fYWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSkgewor
CQlyZXN1bHQgPSBzY3RwX2FzY29uZl9kZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdChzdGNiLCBzcmMp
OworCisJCWlmIChyZXN1bHQpIHsKKwkJCS8qIHNyYyBhZGRyZXNzIGRpZCBub3QgZXhpc3Q/ICov
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9p
cDogc3JjIGFkZHIgZG9lcyBub3QgZXhpc3Q/XG4iKTsKKwkJCS8qIHdoYXQgZXJyb3IgdG8gcmVw
bHkgd2l0aD8/ICovCisJCQltX3JlcGx5ID0KKwkJCSAgICBzY3RwX2FzY29uZl9lcnJvcl9yZXNw
b25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAorCQkJICAgIFNDVFBfQ0FVU0VfUkVRVUVTVF9SRUZV
U0VELCAodWludDhfdCAqKSBhcGgsCisJCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJCX0gZWxzZSBp
ZiAocmVzcG9uc2VfcmVxdWlyZWQpIHsKKwkJCW1fcmVwbHkgPQorCQkJICAgIHNjdHBfYXNjb25m
X3N1Y2Nlc3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7CisJCX0KKwkJcmV0dXJuICht
X3JlcGx5KTsKKwl9CisKKwkvKiBkZWxldGUgdGhlIGFkZHJlc3MgKi8KKwlyZXN1bHQgPSBzY3Rw
X2RlbF9yZW1vdGVfYWRkcihzdGNiLCBzYSk7CisJLyoKKwkgKiBub3RlIGlmIHJlc3VsdCA9PSAt
MiwgdGhlIGFkZHJlc3MgZG9lc24ndCBleGlzdCBpbiB0aGUgYXNvYyBidXQKKwkgKiBzaW5jZSBp
dCdzIGJlaW5nIGRlbGV0ZWQgYW55d2F5cywgd2UganVzdCBhY2sgdGhlIGRlbGV0ZSAtLSBidXQK
KwkgKiB0aGlzIHByb2JhYmx5IG1lYW5zIHNvbWV0aGluZyBoYXMgYWxyZWFkeSBnb25lIGF3cnkK
KwkgKi8KKwlpZiAocmVzdWx0ID09IC0xKSB7CisJCS8qIG9ubHkgb25lIGFkZHJlc3MgaW4gdGhl
IGFzb2MgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2FzY29uZl9k
ZWxldGVfaXA6IHRyaWVkIHRvIGRlbGV0ZSBsYXN0IElQIGFkZHIhXG4iKTsKKwkJbV9yZXBseSA9
IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCisJCSAgICBT
Q1RQX0NBVVNFX0RFTEVUSU5HX0xBU1RfQUREUiwgKHVpbnQ4X3QgKikgYXBoLAorCQkgICAgYXBh
cmFtX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7CisJCQlt
X3JlcGx5ID0gc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lk
KTsKKwkJfQorCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX0FTQ09ORl9ERUxFVEVfSVAsIHN0Y2IsIDAsIHNhLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCX0KKwlyZXR1cm4gKG1fcmVwbHkpOworfQorCitzdGF0aWMgc3RydWN0IG1idWYgKgor
c2N0cF9wcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNyYywKKwkJ
CQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKKwkJCQlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIGludCByZXNwb25zZV9yZXF1aXJlZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9yZXBseSA9
IE5VTEw7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7CisJc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKnBoOworCXVpbnQxNl90IHBhcmFtX3R5cGUsIGFwYXJhbV9sZW5ndGg7CisjaWYgZGVmaW5l
ZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXVpbnQxNl90IHBhcmFtX2xlbmd0aDsKKyNlbmRp
ZgorCXN0cnVjdCBzb2NrYWRkciAqc2E7CisJaW50IHplcm9fYWRkcmVzcyA9IDA7CisjaWZkZWYg
SU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3Bh
cmFtICp2NGFkZHI7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYg
KnNpbjY7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2YWRkcjsKKyNlbmRpZgorCisJ
YXBhcmFtX2xlbmd0aCA9IG50b2hzKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKwlwaCA9IChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKShhcGggKyAxKTsKKwlwYXJhbV90eXBlID0gbnRvaHMocGgtPnBh
cmFtX3R5cGUpOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlwYXJhbV9s
ZW5ndGggPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKyNlbmRpZgorCXNhID0gJnN0b3JlLnNh
OworCXN3aXRjaCAocGFyYW1fdHlwZSkgeworI2lmZGVmIElORVQKKwljYXNlIFNDVFBfSVBWNF9B
RERSRVNTOgorCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRk
cl9wYXJhbSkpIHsKKwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLworCQkJcmV0dXJuIChOVUxM
KTsKKwkJfQorCQl2NGFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaDsKKwkJ
c2luID0gJnN0b3JlLnNpbjsKKwkJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKKwkJc2lu
LT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc2luLT5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJc2luLT5zaW5fYWRk
ci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7CisJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJ
TkFERFJfQU5ZKQorCQkJemVyb19hZGRyZXNzID0gMTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsICJwcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeTogIik7CisJCVNDVFBEQkdfQUREUihT
Q1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCWlmIChwYXJhbV9sZW5ndGggIT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgeworCQkJLyogaW52YWxpZCBwYXJhbSBzaXplICov
CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRk
cl9wYXJhbSAqKXBoOworCQlzaW42ID0gJnN0b3JlLnNpbjY7CisJCW1lbXNldChzaW42LCAwLCBz
aXplb2YoKnNpbjYpKTsKKwkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworI2VuZGlmCisJCW1lbWNweSgoY2FkZHJfdCkmc2luNi0+c2luNl9hZGRyLCB2NmFkZHIt
PmFkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCWlmIChJTjZfSVNfQURE
Ul9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCXplcm9fYWRkcmVzcyA9IDE7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6
ICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7CisJCWJyZWFrOwor
I2VuZGlmCisJZGVmYXVsdDoKKwkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNl
KGFwaC0+Y29ycmVsYXRpb25faWQsCisJCSAgICBTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERS
LCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsKKwkJcmV0dXJuIChtX3Jl
cGx5KTsKKwl9CisKKwkvKiBpZiAwLjAuMC4wLzo6MCwgdXNlIHRoZSBzb3VyY2UgYWRkcmVzcyBp
bnN0ZWFkICovCisJaWYgKHplcm9fYWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0
X2ZyaWVuZGx5KSkgeworCQlzYSA9IHNyYzsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
CisJCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHVzaW5nIHNvdXJjZSBhZGRyICIpOwor
CQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzcmMpOworCX0KKwkvKiBzZXQgdGhl
IHByaW1hcnkgYWRkcmVzcyAqLworCWlmIChzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgc2Es
IE5VTEwpID09IDApIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vz
c19hc2NvbmZfc2V0X3ByaW1hcnk6IHByaW1hcnkgYWRkcmVzcyBzZXRcbiIpOworCQkvKiBub3Rp
ZnkgdXBwZXIgbGF5ZXIgKi8KKwkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTQ09ORl9T
RVRfUFJJTUFSWSwgc3RjYiwgMCwgc2EsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWlmICgoc3Rj
Yi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNI
QUJMRSkgJiYKKwkJICAgICghKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9QRikpICYmCisJCSAgICAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpKSB7
CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQkJc3Rj
Yi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOworCQl9CisJCWlmIChyZXNwb25zZV9yZXF1aXJlZCkg
eworCQkJbV9yZXBseSA9IHNjdHBfYXNjb25mX3N1Y2Nlc3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxh
dGlvbl9pZCk7CisJCX0KKwkJLyogTW9iaWxpdHkgYWRhcHRhdGlvbi4KKwkJICAgSWRlYWxseSwg
d2hlbiB0aGUgcmVjZXB0aW9uIG9mIFNFVCBQUklNQVJZIHdpdGggREVMRVRFIElQCisJCSAgIEFE
RFJFU1Mgb2YgdGhlIHByZXZpb3VzIHByaW1hcnkgZGVzdGluYXRpb24sIHVuYWNrbm93bGVkZ2Vk
CisJCSAgIERBVEEgYXJlIHJldHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkgdG8gdGhlIG5ldyBwcmlt
YXJ5CisJCSAgIGRlc3RpbmF0aW9uIGZvciBzZWFtbGVzcyBoYW5kb3Zlci4KKwkJICAgSWYgdGhl
IGRlc3RpbmF0aW9uIGlzIFVOQ09ORklSTUVEIGFuZCBtYXJrZWQgdG8gUkVRX1BSSU0sCisJCSAg
IFRoZSByZXRyYW5zbWlzc2lvbiBvY2N1ciB3aGVuIHJlY2VwdGlvbiBvZiB0aGUKKwkJICAgSEVB
UlRCRUFULUFDSy4gIChTZWUgc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2FjayBpbgorCQkgICBzY3Rw
X2lucHV0LmMpCisJCSAgIEFsc28sIHdoZW4gY2hhbmdlIG9mIHRoZSBwcmltYXJ5IGRlc3RpbmF0
aW9uLCBpdCBpcyBiZXR0ZXIKKwkJICAgdGhhdCBhbGwgc3Vic2VxdWVudCBuZXcgREFUQSBjb250
YWluaW5nIGFscmVhZHkgcXVldWVkIERBVEEKKwkJICAgYXJlIHRyYW5zbWl0dGVkIHRvIHRoZSBu
ZXcgcHJpbWFyeSBkZXN0aW5hdGlvbi4gKGJ5IG1pY2NoaWUpCisJCSAqLworCQlpZiAoKHNjdHBf
aXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0JBU0UpIHx8CisJCSAgICBzY3RwX2lzX21v
YmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgJiYKKwkJICAgIHNjdHBfaXNf
bW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKSAmJgorCQkgICAgKHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmCisJCSAgICAgU0NUUF9BRERS
X1VOQ09ORklSTUVEKSA9PSAwKSB7CisKKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfUFJJTV9ERUxFVEVELAorCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9M
T0NfMSk7CisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAs
CisJCQkJCVNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7CisJCQkJc2N0cF9hc3NvY19pbW1l
ZGlhdGVfcmV0cmFucyhzdGNiLAorCQkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
KTsKKwkJCX0KKwkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9l
cCwKKwkJCQkJU0NUUF9NT0JJTElUWV9CQVNFKSkgeworCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJv
bV9uZXQoc3RjYiwKKwkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKwkJCX0KKwkJ
CXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCXN0Y2It
PmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGNvdWxkbid0IHNl
dCB0aGUgcmVxdWVzdGVkIHByaW1hcnkgYWRkcmVzcyEgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHNldCBwcmltYXJ5IGZh
aWxlZCFcbiIpOworCQkvKiBtdXN0IGhhdmUgYmVlbiBhbiBpbnZhbGlkIGFkZHJlc3MsIHNvIHJl
cG9ydCAqLworCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3Jy
ZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90
ICopIGFwaCwKKwkJICAgIGFwYXJhbV9sZW5ndGgpOworCX0KKworCXJldHVybiAobV9yZXBseSk7
Cit9CisKKy8qCisgKiBoYW5kbGVzIGFuIEFTQ09ORiBjaHVuay4KKyAqIGlmIGFsbCBwYXJhbWV0
ZXJzIGFyZSBwcm9jZXNzZWQgb2ssIHNlbmQgYSBwbGFpbiAoZW1wdHkpIEFTQ09ORi1BQ0sKKyAq
Lwordm9pZAorc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICptLCB1bnNpZ25lZCBpbnQg
b2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLAorCQkgICBz
dHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSAg
IGludCBmaXJzdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwl1aW50MzJf
dCBzZXJpYWxfbnVtOworCXN0cnVjdCBtYnVmICpuLCAqbV9hY2ssICptX3Jlc3VsdCwgKm1fdGFp
bDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICphY2tfY3A7CisJc3RydWN0IHNjdHBf
YXNjb25mX3BhcmFtaGRyICphcGg7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnBfYWRk
cjsKKwl1bnNpZ25lZCBpbnQgYXNjb25mX2xpbWl0LCBjbnQ7CisJaW50IGVycm9yID0gMDsJCS8q
IGRpZCBhbiBlcnJvciBvY2N1cj8gKi8KKworCS8qIGFzY29uZiBwYXJhbSBidWZmZXIgKi8KKwl1
aW50OF90IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJc3RydWN0IHNjdHBf
YXNjb25mX2FjayAqYWNrLCAqYWNrX25leHQ7CisKKwkvKiB2ZXJpZnkgbWluaW11bSBsZW5ndGgg
Ki8KKwlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBf
YXNjb25mX2NodW5rKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJoYW5k
bGVfYXNjb25mOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIsCisJCQludG9ocyhjcC0+Y2guY2h1
bmtfbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9CisJYXNvYyA9ICZzdGNiLT5hc29jOworCXNlcmlh
bF9udW0gPSBudG9obChjcC0+c2VyaWFsX251bWJlcik7CisKKwlpZiAoU0NUUF9UU05fR0UoYXNv
Yy0+YXNjb25mX3NlcV9pbiwgc2VyaWFsX251bSkpIHsKKwkJLyogZ290IGEgZHVwbGljYXRlIEFT
Q09ORiAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJoYW5kbGVfYXNjb25m
OiBnb3QgZHVwbGljYXRlIHNlcmlhbCBudW1iZXIgPSAleGhcbiIsCisJCQlzZXJpYWxfbnVtKTsK
KwkJcmV0dXJuOworCX0gZWxzZSBpZiAoc2VyaWFsX251bSAhPSAoYXNvYy0+YXNjb25mX3NlcV9p
biArIDEpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29uZjog
aW5jb3JyZWN0IHNlcmlhbCBudW1iZXIgPSAleGggKGV4cGVjdGVkIG5leHQgPSAleGgpXG4iLAor
CQkJc2VyaWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9pbiArIDEpOworCQlyZXR1cm47CisJfQor
CisJLyogaXQncyB0aGUgZXhwZWN0ZWQgIm5leHQiIHNlcXVlbmNlIG51bWJlciwgc28gcHJvY2Vz
cyBpdCAqLworCWFzb2MtPmFzY29uZl9zZXFfaW4gPSBzZXJpYWxfbnVtOwkvKiB1cGRhdGUgc2Vx
dWVuY2UgKi8KKwkvKiBnZXQgbGVuZ3RoIG9mIGFsbCB0aGUgcGFyYW0ncyBpbiB0aGUgQVNDT05G
ICovCisJYXNjb25mX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7
CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSJoYW5kbGVfYXNjb25mOiBhc2NvbmZf
bGltaXQ9JXUsIHNlcXVlbmNlPSV4aFxuIiwKKwkJYXNjb25mX2xpbWl0LCBzZXJpYWxfbnVtKTsK
KworCWlmIChmaXJzdCkgeworCQkvKiBkZWxldGUgb2xkIGNhY2hlICovCisJCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLCJoYW5kbGVfYXNjb25mOiBOb3cgcHJvY2Vzc2luZyBmaXJzdCBBU0NP
TkYuIFRyeSB0byBkZWxldGUgb2xkIGNhY2hlXG4iKTsKKworCQlUQUlMUV9GT1JFQUNIX1NBRkUo
YWNrLCAmYXNvYy0+YXNjb25mX2Fja19zZW50LCBuZXh0LCBhY2tfbmV4dCkgeworCQkJaWYgKGFj
ay0+c2VyaWFsX251bWJlciA9PSBzZXJpYWxfbnVtKQorCQkJCWJyZWFrOworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsImhhbmRsZV9hc2NvbmY6IGRlbGV0ZSBvbGQoJXUpIDwgZmlyc3Qo
JXUpXG4iLAorCQkJICAgIGFjay0+c2VyaWFsX251bWJlciwgc2VyaWFsX251bSk7CisJCQlUQUlM
UV9SRU1PVkUoJmFzb2MtPmFzY29uZl9hY2tfc2VudCwgYWNrLCBuZXh0KTsKKwkJCWlmIChhY2st
PmRhdGEgIT0gTlVMTCkgeworCQkJCXNjdHBfbV9mcmVlbShhY2stPmRhdGEpOworCQkJfQorCQkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjayksIGFjayk7
CisJCX0KKwl9CisKKwltX2FjayA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX2Fja19jaHVuayksIDAsCisJCQkJICAgICAgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOworCWlmIChtX2FjayA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYx
LAorCQkJImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBtYnVmIVxuIik7CisJCXJldHVybjsK
Kwl9CisJbV90YWlsID0gbV9hY2s7CQkvKiBjdXJyZW50IHJlcGx5IGNoYWluJ3MgdGFpbCAqLwor
CisJLyogZmlsbCBpbiBBU0NPTkYtQUNLIGhlYWRlciAqLworCWFja19jcCA9IG10b2QobV9hY2ss
IHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKik7CisJYWNrX2NwLT5jaC5jaHVua190eXBl
ID0gU0NUUF9BU0NPTkZfQUNLOworCWFja19jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWFja19j
cC0+c2VyaWFsX251bWJlciA9IGh0b25sKHNlcmlhbF9udW0pOworCS8qIHNldCBpbml0aWFsIGxl
bmd0aHMgKGVnLiBqdXN0IGFuIEFTQ09ORi1BQ0spLCBudG9oeCBhdCB0aGUgZW5kISAqLworCVND
VFBfQlVGX0xFTihtX2FjaykgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7
CisJYWNrX2NwLT5jaC5jaHVua19sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fj
a19jaHVuayk7CisKKwkvKiBza2lwIHRoZSBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKi8KKwlv
ZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayk7CisJcF9hZGRyID0gKHN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksICh1aW50OF90ICopJmFwYXJhbV9idWYpOworCWlmIChw
X2FkZHIgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJoYW5k
bGVfYXNjb25mOiBjb3VsZG4ndCBnZXQgbG9va3VwIGFkZHIhXG4iKTsKKwkJLyogcmVzcG9uZCB3
aXRoIGEgbWlzc2luZy9pbnZhbGlkIG1hbmRhdG9yeSBwYXJhbWV0ZXIgZXJyb3IgKi8KKwkJcmV0
dXJuOworCX0KKwkvKiBwYXJhbV9sZW5ndGggaXMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gcHJvY2Vz
c19jb250cm9sLi4uICovCisJb2Zmc2V0ICs9IG50b2hzKHBfYWRkci0+cGgucGFyYW1fbGVuZ3Ro
KTsJLyogc2tpcCBsb29rdXAgYWRkciAqLworCS8qIGdldCBwb2ludGVyIHRvIGZpcnN0IGFzY29u
ZiBwYXJhbSBpbiBBU0NPTkYgKi8KKwlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRy
ICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFy
YW1oZHIpLCAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKKwlpZiAoYXBoID09IE5VTEwpIHsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJFbXB0eSBBU0NPTkYgcmVjZWl2ZWQ/XG4iKTsK
KwkJZ290byBzZW5kX3JlcGx5OworCX0KKwkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRl
cnMgKi8KKwljbnQgPSAwOworCXdoaWxlIChhcGggIT0gTlVMTCkgeworCQl1bnNpZ25lZCBpbnQg
cGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBlOworCisJCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBo
LnBhcmFtX3R5cGUpOworCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0
aCk7CisJCWlmIChvZmZzZXQgKyBwYXJhbV9sZW5ndGggPiBhc2NvbmZfbGltaXQpIHsKKwkJCS8q
IHBhcmFtZXRlciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCisJCQlzY3RwX21fZnJlZW0o
bV9hY2spOworCQkJcmV0dXJuOworCQl9CisJCW1fcmVzdWx0ID0gTlVMTDsKKworCQlpZiAocGFy
YW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0aGFuIGJ1
ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKKwkJCXNjdHBfbV9mcmVlbShtX2Fjayk7CisJ
CQlyZXR1cm47CisJCX0KKwkJaWYgKHBhcmFtX2xlbmd0aCA8PSBzaXplb2Yoc3RydWN0IHNjdHBf
cGFyYW1oZHIpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmY6IHBhcmFtIGxlbmd0aCAoJXUpIHRvbyBzaG9ydFxuIiwgcGFyYW1fbGVuZ3RoKTsKKwkJCXNj
dHBfbV9mcmVlbShtX2Fjayk7CisJCX0KKwkJLyogZ2V0IHRoZSBlbnRpcmUgcGFyYW1ldGVyICov
CisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0s
IG9mZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKKwkJaWYgKGFwaCA9PSBOVUxMKSB7
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0
IGdldCBlbnRpcmUgcGFyYW1cbiIpOworCQkJc2N0cF9tX2ZyZWVtKG1fYWNrKTsKKwkJCXJldHVy
bjsKKwkJfQorCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKwkJY2FzZSBTQ1RQX0FERF9JUF9BRERS
RVNTOgorCQkJbV9yZXN1bHQgPSBzY3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzcmMsIGFwaCwg
c3RjYiwKKwkJCSAgICAoY250IDwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSks
IGVycm9yKTsKKwkJCWNudCsrOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVT
UzoKKwkJCW1fcmVzdWx0ID0gc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAoc3JjLCBhcGgs
IHN0Y2IsCisJCQkgICAgZXJyb3IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9FUlJPUl9DQVVT
RV9JTkQ6CisJCQkvKiBub3QgdmFsaWQgaW4gYW4gQVNDT05GIGNodW5rICovCisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6CisJCQltX3Jlc3VsdCA9IHNjdHBfcHJvY2Vzc19h
c2NvbmZfc2V0X3ByaW1hcnkoc3JjLCBhcGgsCisJCQkgICAgc3RjYiwgZXJyb3IpOworCQkJYnJl
YWs7CisJCWNhc2UgU0NUUF9OQVRfVlRBR1M6CisJCSAgICAgICAgU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsICJoYW5kbGVfYXNjb25mOiBzZWVzIGEgTkFUIFZUQUcgc3RhdGUgcGFyYW1ldGVy
XG4iKTsKKwkJICAgICAgICBicmVhazsKKwkJY2FzZSBTQ1RQX1NVQ0NFU1NfUkVQT1JUOgorCQkJ
Lyogbm90IHZhbGlkIGluIGFuIEFTQ09ORiBjaHVuayAqLworCQkJYnJlYWs7CisJCWNhc2UgU0NU
UF9VTFBfQURBUFRBVElPTjoKKwkJCS8qIEZJWCAqLworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlpZiAoKHBhcmFtX3R5cGUgJiAweDgwMDApID09IDApIHsKKwkJCQkvKiBCZWVuIHRvbGQgdG8g
U1RPUCBhdCB0aGlzIHBhcmFtICovCisJCQkJYXNjb25mX2xpbWl0ID0gb2Zmc2V0OworCQkJCS8q
CisJCQkJICogRklYIEZJWCAtIFdlIG5lZWQgdG8gY2FsbAorCQkJCSAqIHNjdHBfYXJldGhlcmVf
dW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoKQorCQkJCSAqIHRvIGdldCBhIG9wZXJyIGFuZCBzZW5k
IGl0IGZvciBhbnkKKwkJCQkgKiBwYXJhbSdzIHdpdGggdGhlIDB4NDAwMCBiaXQgc2V0IE9SIGRv
IGl0CisJCQkJICogaGVyZSBvdXJzZWx2ZXMuLi4gbm90ZSB3ZSBzdGlsbCBtdXN0IFNUT1AKKwkJ
CQkgKiBpZiB0aGUgMHg4MDAwIGJpdCBpcyBjbGVhci4KKwkJCQkgKi8KKwkJCX0KKwkJCS8qIHVu
a25vd24vaW52YWxpZCBwYXJhbSB0eXBlICovCisJCQlicmVhazsKKwkJfSAvKiBzd2l0Y2ggKi8K
KworCQkvKiBhZGQgYW55IChlcnJvcikgcmVzdWx0IHRvIHRoZSByZXBseSBtYnVmIGNoYWluICov
CisJCWlmIChtX3Jlc3VsdCAhPSBOVUxMKSB7CisJCQlTQ1RQX0JVRl9ORVhUKG1fdGFpbCkgPSBt
X3Jlc3VsdDsKKwkJCW1fdGFpbCA9IG1fcmVzdWx0OworCQkJLyogdXBkYXRlIGxlbmd0aHMsIG1h
a2Ugc3VyZSBpdCdzIGFsaWduZWQgdG9vICovCisJCQlTQ1RQX0JVRl9MRU4obV9yZXN1bHQpID0g
U0NUUF9TSVpFMzIoU0NUUF9CVUZfTEVOKG1fcmVzdWx0KSk7CisJCQlhY2tfY3AtPmNoLmNodW5r
X2xlbmd0aCArPSBTQ1RQX0JVRl9MRU4obV9yZXN1bHQpOworCQkJLyogc2V0IGZsYWcgdG8gZm9y
Y2Ugc3VjY2VzcyByZXBvcnRzICovCisJCQllcnJvciA9IDE7CisJCX0KKwkJb2Zmc2V0ICs9IFND
VFBfU0laRTMyKHBhcmFtX2xlbmd0aCk7CisJCS8qIHVwZGF0ZSByZW1haW5pbmcgQVNDT05GIG1l
c3NhZ2UgbGVuZ3RoIHRvIHByb2Nlc3MgKi8KKwkJaWYgKG9mZnNldCA+PSBhc2NvbmZfbGltaXQp
IHsKKwkJCS8qIG5vIG1vcmUgZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAqLworCQkJYnJlYWs7CisJ
CX0KKwkJLyogZ2V0IHBvaW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFyYW0gKi8KKwkJYXBoID0gKHN0
cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksCisJCSAgICAodWludDhfdCAq
KSZhcGFyYW1fYnVmKTsKKwkJaWYgKGFwaCA9PSBOVUxMKSB7CisJCQkvKiBjYW4ndCBnZXQgYW4g
YXNjb25mIHBhcmFtaGRyICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRs
ZV9hc2NvbmY6IGNhbid0IGdldCBhc2NvbmYgcGFyYW0gaGRyIVxuIik7CisJCQkvKiBGSVggTUUg
LSBhZGQgZXJyb3IgaGVyZS4uLiAqLworCQl9CisJfQorCisgc2VuZF9yZXBseToKKwlhY2tfY3At
PmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGFja19jcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwkvKiBz
YXZlIHRoZSBBU0NPTkYtQUNLIHJlcGx5ICovCisJYWNrID0gU0NUUF9aT05FX0dFVChTQ1RQX0JB
U0VfSU5GTyhpcGlfem9uZV9hc2NvbmZfYWNrKSwKKwkgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fj
ayk7CisJaWYgKGFjayA9PSBOVUxMKSB7CisJCXNjdHBfbV9mcmVlbShtX2Fjayk7CisJCXJldHVy
bjsKKwl9CisJYWNrLT5zZXJpYWxfbnVtYmVyID0gc2VyaWFsX251bTsKKwlhY2stPmxhc3Rfc2Vu
dF90byA9IE5VTEw7CisJYWNrLT5kYXRhID0gbV9hY2s7CisJYWNrLT5sZW4gPSAwOworCWZvciAo
biA9IG1fYWNrOyBuICE9IE5VTEw7IG4gPSBTQ1RQX0JVRl9ORVhUKG4pKSB7CisJCWFjay0+bGVu
ICs9IFNDVFBfQlVGX0xFTihuKTsKKwl9CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Mu
YXNjb25mX2Fja19zZW50LCBhY2ssIG5leHQpOworCisJLyogc2VlIGlmIGxhc3RfY29udHJvbF9j
aHVua19mcm9tIGlzIHNldCBwcm9wZXJseSAodXNlIElQIHNyYyBhZGRyKSAqLworCWlmIChzdGNi
LT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsKKwkJLyoKKwkJICogdGhp
cyBjb3VsZCBoYXBwZW4gaWYgdGhlIHNvdXJjZSBhZGRyZXNzIHdhcyBqdXN0IG5ld2x5CisJCSAq
IGFkZGVkCisJCSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmY6IGxvb2tpbmcgdXAgbmV0IGZvciBJUCBzb3VyY2UgYWRkcmVzc1xuIik7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLCAiTG9va2luZyBmb3IgSVAgc291cmNlOiAiKTsKKwkJU0NUUERC
R19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKKwkJLyogbG9vayB1cCB0aGUgZnJvbSBh
ZGRyZXNzICovCisJCXN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSBzY3RwX2Zp
bmRuZXQoc3RjYiwgc3JjKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJCWlmIChzdGNiLT5hc29jLmxh
c3RfY29udHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLCAiaGFuZGxlX2FzY29uZjogSVAgc291cmNlIGFkZHJlc3Mgbm90IGZvdW5kPyFcbiIp
OworCQl9CisjZW5kaWYKKwl9Cit9CisKKy8qCisgKiBkb2VzIHRoZSBhZGRyZXNzIG1hdGNoPyBy
ZXR1cm5zIDAgaWYgbm90LCAxIGlmIHNvCisgKi8KK3N0YXRpYyB1aW50MzJfdAorc2N0cF9hc2Nv
bmZfYWRkcl9tYXRjaChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWEsIHN0cnVjdCBzb2NrYWRk
ciAqc2EpCit7CisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNl
IEFGX0lORVQ2OgorCXsKKwkJLyogWFhYIHNjb3BlaWQgKi8KKwkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisKKwkJaWYgKChhYS0+YXAuYWRk
cnAucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgJiYKKwkJICAgIChtZW1jbXAo
JmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVj
dCBpbjZfYWRkcikpID09IDApKSB7CisJCQlyZXR1cm4gKDEpOworCQl9CisJCWJyZWFrOworCX0K
KyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKworCQlpZiAoKGFhLT5hcC5h
ZGRycC5waC5wYXJhbV90eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSAmJgorCQkgICAgKG1lbWNt
cCgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW4tPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVj
dCBpbl9hZGRyKSkgPT0gMCkpIHsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJfQor
I2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisg
KiBkb2VzIHRoZSBhZGRyZXNzIG1hdGNoPyByZXR1cm5zIDAgaWYgbm90LCAxIGlmIHNvCisgKi8K
K3N0YXRpYyB1aW50MzJfdAorc2N0cF9hZGRyX21hdGNoKHN0cnVjdCBzY3RwX3BhcmFtaGRyICpw
aCwgc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQo
SU5FVDYpCisJdWludDE2X3QgcGFyYW1fdHlwZSwgcGFyYW1fbGVuZ3RoOworCisJcGFyYW1fdHlw
ZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKwlwYXJhbV9sZW5ndGggPSBudG9ocyhwaC0+cGFy
YW1fbGVuZ3RoKTsKKyNlbmRpZgorCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElO
RVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCS8qIFhYWCBzY29wZWlkICovCisJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOworCQlzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSAqdjZhZGRyOworCisJCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9p
cHY2YWRkcl9wYXJhbSAqKXBoOworCQlpZiAoKHBhcmFtX3R5cGUgPT0gU0NUUF9JUFY2X0FERFJF
U1MpICYmCisJCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRk
cl9wYXJhbSkpICYmCisJCSAgICAobWVtY21wKCZ2NmFkZHItPmFkZHIsICZzaW42LT5zaW42X2Fk
ZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKKwkJCXJldHVybiAo
MSk7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5F
VDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KXNhOworCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOworCisJCXY0YWRkciA9
IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoOworCQlpZiAoKHBhcmFtX3R5cGUgPT0g
U0NUUF9JUFY0X0FERFJFU1MpICYmCisJCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpICYmCisJCSAgICAobWVtY21wKCZ2NGFkZHItPmFkZHIs
ICZzaW4tPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCkpIHsK
KwkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJ
YnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisvKgorICogQ2xlYW51cCBmb3Igbm9uLXJlc3Bv
bmRlZC9PUCBFUlInZCBBU0NPTkYKKyAqLwordm9pZAorc2N0cF9hc2NvbmZfY2xlYW51cChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAqIGNs
ZWFyIG91dCBhbnkgZXhpc3RpbmcgYXNjb25mcyBnb2luZyBvdXQKKwkgKi8KKwlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAor
CQkJU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMik7CisJc3RjYi0+YXNvYy5hc2Nv
bmZfc2VxX291dF9hY2tlZCA9IHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQ7CisJLyogcmVtb3Zl
IHRoZSBvbGQgQVNDT05GIG9uIG91ciBvdXRib3VuZCBxdWV1ZSAqLworCXNjdHBfdG9zc19vbGRf
YXNjb25mKHN0Y2IpOworfQorCisvKgorICogY2xlYW51cCBhbnkgY2FjaGVkIHNvdXJjZSBhZGRy
ZXNzZXMgdGhhdCBtYXkgYmUgdG9wb2xvZ2ljYWxseQorICogaW5jb3JyZWN0IGFmdGVyIGEgbmV3
IGFkZHJlc3MgaGFzIGJlZW4gYWRkZWQgdG8gdGhpcyBpbnRlcmZhY2UuCisgKi8KK3N0YXRpYyB2
b2lkCitzY3RwX2FzY29uZl9uZXRzX2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9pZm4gKmlmbikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkvKgorCSAq
IElkZWFsbHksIHdlIHdhbnQgdG8gb25seSBjbGVhciBjYWNoZWQgcm91dGVzIGFuZCBzb3VyY2Ug
YWRkcmVzc2VzCisJICogdGhhdCBhcmUgdG9wb2xvZ2ljYWxseSBpbmNvcnJlY3QuICBCdXQgc2lu
Y2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkKKwkgKiB0byBrbm93IHdoZXRoZXIgdGhlIG5ld2x5IGFk
ZGVkIGFkZHJlc3Mgb24gdGhlIGlmbiB3b3VsZCBjYXVzZSBhCisJICogcm91dGluZyBjaGFuZ2Ug
KGkuZS4gYSBuZXcgZWdyZXNzIGludGVyZmFjZSB3b3VsZCBiZSBjaG9zZW4pCisJICogd2l0aG91
dCBkb2luZyBhIG5ldyByb3V0aW5nIGxvb2t1cCBhbmQgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9u
LAorCSAqIHdlIHdpbGwgKGZvciBub3cpIGp1c3QgZmx1c2ggYW55IGNhY2hlZCByb3V0ZSB1c2lu
ZyBhIGRpZmZlcmVudAorCSAqIGlmbiAoYW5kIGNhY2hlZCBzb3VyY2UgYWRkcnMpIGFuZCBsZXQg
b3V0cHV0IHJlLWNob29zZSB0aGVtIGR1cmluZworCSAqIHRoZSBuZXh0IHNlbmQgb24gdGhhdCBu
ZXQuCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgeworCQkvKgorCQkgKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIChhbmQgY2FjaGVkIHNvdXJj
ZSBhZGRyZXNzKSBpZiB0aGUKKwkJICogcm91dGUncyBpbnRlcmZhY2UgaXMgTk9UIHRoZSBzYW1l
IGFzIHRoZSBhZGRyZXNzIGNoYW5nZS4KKwkJICogSWYgaXQncyB0aGUgc2FtZSBpbnRlcmZhY2Us
IGp1c3QgY2xlYXIgdGhlIGNhY2hlZCBzb3VyY2UKKwkJICogYWRkcmVzcy4KKwkJICovCisJCWlm
IChTQ1RQX1JPVVRFX0hBU19WQUxJRF9JRk4oJm5ldC0+cm8pICYmCisJCSAgICAoKGlmbiA9PSBO
VUxMKSB8fAorCQkgICAgIChTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKCZuZXQtPnJvKSAh
PSBpZm4tPmlmbl9pbmRleCkpKSB7CisJCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlICovCisJ
CQlSVEZSRUUobmV0LT5yby5yb19ydCk7CisJCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKKwkJfQor
CQkvKiBjbGVhciBhbnkgY2FjaGVkIHNvdXJjZSBhZGRyZXNzICovCisJCWlmIChuZXQtPnNyY19h
ZGRyX3NlbGVjdGVkKSB7CisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQlu
ZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJ
CX0KKwl9Cit9CisKKwordm9pZAorc2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKmRzdG5ldCkKK3sKKwlpbnQgZXJyb3I7
CisKKwlpZiAoZHN0bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJ
CXJldHVybjsKKwl9CisJaWYgKHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5ID09IE5VTEwpIHsK
KwkJcmV0dXJuOworCX0KKworCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1
ZSkpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJhc3NvY19pbW1lZGlhdGVfcmV0
cmFuczogRGVsZXRlZCBwcmltYXJ5IGlzICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19B
U0NPTkYxLCAmc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnktPnJvLl9sX2FkZHIuc2EpOworCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgIkN1cnJlbnQgUHJpbWFyeSBpcyAiKTsKKwkJU0NU
UERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbi0+cm8uX2xfYWRkci5zYSk7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVf
U0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQlzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFy
eSwKKwkJCQlTQ1RQX0ZST01fU0NUUF9BU0NPTkYgKyBTQ1RQX0xPQ18zKTsKKwkJc3RjYi0+YXNv
Yy5udW1fc2VuZF90aW1lcnNfdXAtLTsKKwkJaWYgKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJz
X3VwIDwgMCkgeworCQkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPSAwOworCQl9CisJ
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCQllcnJvciA9IHNjdHBfdDNyeHRfdGltZXIo
c3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOwor
CQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKHN0Y2ItPnNjdHBfZXApOworCQkJ
cmV0dXJuOworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworI2lmZGVmIFNDVFBf
QVVESVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKyNlbmRpZgorCQlzY3RwX2NodW5rX291dHB1
dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlpZiAoKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID09IDApICYmCisJ
CSAgICAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCA+IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpjaGs7CisKKwkJCWNoayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRf
cXVldWUpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+
c2N0cF9lcCwKKwkJCQkJIHN0Y2IsIGNoay0+d2hvVG8pOworCQl9CisJfQorCXJldHVybjsKK30K
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgaW50CitzY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0
cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgdWludDE2X3QpOworCit2b2lkCitz
Y3RwX25ldF9pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgIm5ldF9pbW1lZGlhdGVfcmV0cmFuczogUlRPIGlzICVk
XG4iLCBuZXQtPlJUTyk7CisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBz
dGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQ
X0FTQ09ORiArIFNDVFBfTE9DXzQpOworCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0
X2luaXRpYWxfY2NfcGFyYW0oc3RjYiwgbmV0KTsKKwluZXQtPmVycm9yX2NvdW50ID0gMDsKKwlU
QUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CWlmIChjaGstPndob1RvID09IG5ldCkgeworCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7CisJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQkJ
c2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQkJ
c2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZShjaGspOworCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2Rl
Y3JlYXNlKHN0Y2IsIGNoayk7CisJCQkJbmV0LT5tYXJrZWRfcmV0cmFucysrOworCQkJCXN0Y2It
PmFzb2MubWFya2VkX3JldHJhbnMrKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAobmV0LT5tYXJrZWRf
cmV0cmFucykgeworCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQ
X09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KK30KKworc3RhdGljIHZv
aWQKK3NjdHBfcGF0aF9jaGVja19hbmRfcmVhY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9pZmEgKm5ld2lmYSkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJaW50IGFk
ZHJudW0sIGNoYW5nZWQ7CisKKwkvKiAgIElmIG51bWJlciBvZiBsb2NhbCB2YWxpZCBhZGRyZXNz
ZXMgaXMgMSwgdGhlIHZhbGlkIGFkZHJlc3MgaXMKKwkgICAgIHByb2JhYmx5IG5ld2x5IGFkZGVk
IGFkZHJlc3MuCisJICAgICBTZXZlcmFsIHZhbGlkIGFkZHJlc3NlcyBpbiB0aGlzIGFzc29jaWF0
aW9uLiAgQSBzb3VyY2UgYWRkcmVzcworCSAgICAgbWF5IG5vdCBiZSBjaGFuZ2VkLiAgQWRkaXRp
b25hbGx5LCB0aGV5IGNhbiBiZSBjb25maWd1cmVkIG9uIGEKKwkgICAgIHNhbWUgaW50ZXJmYWNl
IGFzICJhbGlhcyIgYWRkcmVzc2VzLiAgKGJ5IG1pY2NoaWUpCisJICovCisJYWRkcm51bSA9IHNj
dHBfbG9jYWxfYWRkcl9jb3VudChzdGNiKTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
InBfY2hlY2tfcmVhY3QoKTogJWQgbG9jYWwgYWRkcmVzc2VzXG4iLAorCQlhZGRybnVtKTsKKwlp
ZiAoYWRkcm51bSA9PSAxKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRz
LCBzY3RwX25leHQpIHsKKwkJCS8qIGNsZWFyIGFueSBjYWNoZWQgcm91dGUgYW5kIHNvdXJjZSBh
ZGRyZXNzICovCisJCQlpZiAobmV0LT5yby5yb19ydCkgeworCQkJCVJURlJFRShuZXQtPnJvLnJv
X3J0KTsKKwkJCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKKwkJCX0KKwkJCWlmIChuZXQtPnNyY19h
ZGRyX3NlbGVjdGVkKSB7CisJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJ
CW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7
CisJCQl9CisJCQkvKiBSZXRyYW5zbWl0IHVuYWNrbm93bGVkZ2VkIERBVEEgY2h1bmtzIGltbWVk
aWF0ZWx5ICovCisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBf
ZXAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFT
VEhBTkRPRkYpKSB7CisJCQkJc2N0cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RjYiwgbmV0KTsK
KwkJCX0KKwkJCS8qIGFsc28sIFNFVCBQUklNQVJZIGlzIG1heWJlIGFscmVhZHkgc2VudCAqLwor
CQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBNdWx0aXBsZSBsb2NhbCBhZGRyZXNzZXMgZXhzaXN0
IGluIHRoZSBhc3NvY2lhdGlvbi4gICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIGFuZCBzb3Vy
Y2UgYWRkcmVzcyAqLworCQlpZiAobmV0LT5yby5yb19ydCkgeworCQkJUlRGUkVFKG5ldC0+cm8u
cm9fcnQpOworCQkJbmV0LT5yby5yb19ydCA9IE5VTEw7CisJCX0KKwkJaWYgKG5ldC0+c3JjX2Fk
ZHJfc2VsZWN0ZWQpIHsKKwkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCW5l
dC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJ
fQorCQkvKiBDaGVjayBpZiB0aGUgbmV4dGhvcCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcg
YWRkcmVzcy4KKwkJICAgSWYgdGhlIG5ldyBhZGRyZXNzIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhl
IGN1cnJlbnQgbmV4dGhvcCwKKwkJICAgdGhlIHBhdGggd2lsbCBiZSBjaGFuZ2VkLgorCQkgICBJ
ZiB0aGUgbmV3IGFkZHJlc3MgaXMgTk9UIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQKKwkJ
ICAgbmV4dGhvcCwgdGhlIHBhdGggd2lsbCBub3QgYmUgY2hhbmdlZC4KKwkJICovCisJCVNDVFBf
UlRBTExPQygoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkgICAgIHN0Y2ItPnNjdHBfZXAt
PmRlZl92cmZfaWQsCisJCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmZpYm51bSk7CisJCWlmIChuZXQt
PnJvLnJvX3J0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQljaGFuZ2VkID0gMDsKKwkJc3dp
dGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNl
IEFGX0lORVQ6CisJCQlpZiAoc2N0cF92NHNyY19tYXRjaF9uZXh0aG9wKG5ld2lmYSwgKHNjdHBf
cm91dGVfdCAqKSZuZXQtPnJvKSkgeworCQkJCWNoYW5nZWQgPSAxOworCQkJfQorCQkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJaWYgKHNjdHBfdjZz
cmNfbWF0Y2hfbmV4dGhvcCgKKwkJCSAgICAmbmV3aWZhLT5hZGRyZXNzLnNpbjYsIChzY3RwX3Jv
dXRlX3QgKikmbmV0LT5ybykpIHsKKwkJCQljaGFuZ2VkID0gMTsKKwkJCX0KKwkJCWJyZWFrOwor
I2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQkvKiBpZiB0aGUgbmV3bHkgYWRk
ZWQgYWRkcmVzcyBkb2VzIG5vdCByZWxhdGUgcm91dGluZworCQkgICBpbmZvcm1hdGlvbiwgd2Ug
c2tpcC4KKwkJICovCisJCWlmIChjaGFuZ2VkID09IDApCisJCQljb250aW51ZTsKKwkJLyogUmV0
cmFuc21pdCB1bmFja25vd2xlZGdlZCBEQVRBIGNodW5rcyBpbW1lZGlhdGVseSAqLworCQlpZiAo
c2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKKwkJCXNj
dHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsIG5ldCk7CisJCX0KKwkJLyogU2VuZCBTRVQg
UFJJTUFSWSBmb3IgdGhpcyBuZXcgYWRkcmVzcyAqLworCQlpZiAobmV0ID09IHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbikgeworCQkJKHZvaWQpc2N0cF9hc2NvbmZfcXVldWVfbWdtdChz
dGNiLCBuZXdpZmEsCisJCQkJCQkgICAgIFNDVFBfU0VUX1BSSU1fQUREUik7CisJCX0KKwl9Cit9
CisjZW5kaWYgLyogX19GcmVlQlNEX18gIF9fQVBQTEVfXyAgX19Vc2Vyc3BhY2VfXyAqLworCisv
KgorICogcHJvY2VzcyBhbiBBREQvREVMRVRFIElQIGFjayBmcm9tIHBlZXIuCisgKiBhZGRyOiBj
b3JyZXNwb25kaW5nIHNjdHBfaWZhIHRvIHRoZSBhZGRyZXNzIGJlaW5nIGFkZGVkL2RlbGV0ZWQu
CisgKiB0eXBlOiBTQ1RQX0FERF9JUF9BRERSRVNTIG9yIFNDVFBfREVMX0lQX0FERFJFU1MuCisg
KiBmbGFnOiAxPXN1Y2Nlc3MsIDA9ZmFpbHVyZS4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfYXNj
b25mX2FkZHJfbWdtdF9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEg
KmFkZHIsIHVpbnQzMl90IGZsYWcpCit7CisJLyoKKwkgKiBkbyB0aGUgbmVjZXNzYXJ5IGFzb2Mg
bGlzdCB3b3JrLSBpZiB3ZSBnZXQgYSBmYWlsdXJlIGluZGljYXRpb24sCisJICogbGVhdmUgdGhl
IGFkZHJlc3Mgb24gdGhlIGFzc29jJ3MgcmVzdHJpY3RlZCBsaXN0LiAgSWYgd2UgZ2V0IGEKKwkg
KiBzdWNjZXNzIGluZGljYXRpb24sIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSByZXN0cmlj
dGVkIGxpc3QuCisJICovCisJLyoKKwkgKiBOb3RlOiB0aGlzIHdpbGwgb25seSBvY2N1ciBmb3Ig
QUREX0lQX0FERFJFU1MsIHNpbmNlCisJICogREVMX0lQX0FERFJFU1MgaXMgbmV2ZXIgYWN0dWFs
bHkgYWRkZWQgdG8gdGhlIGxpc3QuLi4KKwkgKi8KKwlpZiAoZmxhZykgeworCQkvKiBzdWNjZXNz
IGNhc2UsIHNvIHJlbW92ZSBmcm9tIHRoZSByZXN0cmljdGVkIGxpc3QgKi8KKwkJc2N0cF9kZWxf
bG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFkZHIpOworCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
aWYgKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKKwkJICAgIHNj
dHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7CisJCQlzY3Rw
X3BhdGhfY2hlY2tfYW5kX3JlYWN0KHN0Y2IsIGFkZHIpOworCQkJcmV0dXJuOworCQl9CisjZW5k
aWYgLyogX19GcmVlQlNEX18gX19BUFBMRV9fIF9fVXNlcnNwYWNlX18gKi8KKwkJLyogY2xlYXIg
YW55IGNhY2hlZC90b3BvbG9naWNhbGx5IGluY29ycmVjdCBzb3VyY2UgYWRkcmVzc2VzICovCisJ
CXNjdHBfYXNjb25mX25ldHNfY2xlYW51cChzdGNiLCBhZGRyLT5pZm5fcCk7CisJfQorCS8qIGVs
c2UsIGxlYXZlIGl0IG9uIHRoZSBsaXN0ICovCit9CisKKy8qCisgKiBhZGQgYW4gYXNjb25mIGFk
ZC9kZWxldGUvc2V0IHByaW1hcnkgSVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlLgor
ICogdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBf
U0VUX1BSSU1fQUREUi4KKyAqIHJldHVybnMgMCBpZiBxdWV1ZWQsIC0xIGlmIG5vdCBxdWV1ZWQv
cmVtb3ZlZC4KKyAqIE5PVEU6IGlmIGFkZGluZywgYnV0IGEgZGVsZXRlIGZvciB0aGUgc2FtZSBh
ZGRyZXNzIGlzIGFscmVhZHkgc2NoZWR1bGVkCisgKiAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBz
aW1wbHkgcmVtb3ZlIGl0IGZyb20gcXVldWUuICBTYW1lIGZvciBkZWxldGluZworICogYW4gYWRk
cmVzcyBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgYWRkLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9u
IGlzIGZvdW5kLAorICogaWdub3JlIHRoZSBuZXcgb25lLgorICovCitzdGF0aWMgaW50CitzY3Rw
X2FzY29uZl9xdWV1ZV9tZ210KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZh
ICppZmEsCisJCSAgICAgICB1aW50MTZfdCB0eXBlKQoreworCXN0cnVjdCBzY3RwX2FzY29uZl9h
ZGRyICphYSwgKmFhX25leHQ7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXNuJ3QgYWxy
ZWFkeSBpbiB0aGUgcXVldWUgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoYWEsICZzdGNiLT5hc29j
LmFzY29uZl9xdWV1ZSwgbmV4dCwgYWFfbmV4dCkgeworCQkvKiBhZGRyZXNzIG1hdGNoPyAqLwor
CQlpZiAoc2N0cF9hc2NvbmZfYWRkcl9tYXRjaChhYSwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkK
KwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIGJ1dCBu
b3Qgc2VudD8KKwkJICogcGFzcyB0aGUgcmVxdWVzdCBhbHJlYWR5IHNlbnQgaW4gb3JkZXIgdG8g
cmVzb2x2ZSB0aGUgZm9sbG93aW5nIGNhc2U6CisJCSAqICAxLiBhcnJpdmFsIG9mIEFERCwgdGhl
biBzZW50CisJCSAqICAyLiBhcnJpdmFsIG9mIERFTC4gd2UgY2FuJ3QgcmVtb3ZlIHRoZSBBREQg
cmVxdWVzdCBhbHJlYWR5IHNlbnQKKwkJICogIDMuIGFycml2YWwgb2YgQURECisJCSAqLworCQlp
ZiAoYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID09IHR5cGUgJiYgYWEtPnNlbnQgPT0gMCkgewor
CQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogaXMgdGhlIG5lZ2F0aXZlIHJlcXVlc3QgYWxyZWFk
eSBpbiBxdWV1ZSwgYW5kIG5vdCBzZW50ICovCisJCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5
cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgJiYKKwkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFt
X3R5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykpIHsKKwkJCS8qIGFkZCByZXF1ZXN0ZWQsIGRl
bGV0ZSBhbHJlYWR5IHF1ZXVlZCAqLworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29u
Zl9xdWV1ZSwgYWEsIG5leHQpOworCQkJLyogcmVtb3ZlIHRoZSBpZmEgZnJvbSB0aGUgcmVzdHJp
Y3RlZCBsaXN0ICovCisJCQlzY3RwX2RlbF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZh
KTsKKwkJCS8qIGZyZWUgdGhlIGFzY29uZiBwYXJhbSAqLworCQkJU0NUUF9GUkVFKGFhLCBTQ1RQ
X01fQVNDX0FERFIpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJhc2NvbmZfcXVl
dWVfbWdtdDogYWRkIHJlbW92ZXMgcXVldWVkIGVudHJ5XG4iKTsKKwkJCXJldHVybiAoLTEpOwor
CQl9CisJCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVT
UykgJiYKKwkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQURE
UkVTUykpIHsKKwkJCS8qIGRlbGV0ZSByZXF1ZXN0ZWQsIGFkZCBhbHJlYWR5IHF1ZXVlZCAqLwor
CQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOworCQkJ
LyogcmVtb3ZlIHRoZSBhYS0+aWZhIGZyb20gdGhlIHJlc3RyaWN0ZWQgbGlzdCAqLworCQkJc2N0
cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEpOworCQkJLyogZnJlZSB0
aGUgYXNjb25mIHBhcmFtICovCisJCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7CisJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1ZV9tZ210OiBkZWxldGUg
cmVtb3ZlcyBxdWV1ZWQgZW50cnlcbiIpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9IC8qIGZv
ciBlYWNoIGFhICovCisKKwkvKiBhZGRpbmcgbmV3IHJlcXVlc3QgdG8gdGhlIHF1ZXVlICovCisJ
U0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAor
CQkgICAgU0NUUF9NX0FTQ19BRERSKTsKKwlpZiAoYWEgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3Qg
Z2V0IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImFzY29uZl9xdWV1
ZV9tZ210OiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJ
YWEtPnNwZWNpYWxfZGVsID0gMDsKKwkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBhcmFtZXRl
ciBmaWVsZHMgKi8KKwkvKiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQiIGR1cmlu
ZyBzZW5kICovCisJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gdHlwZTsKKwlhYS0+aWZhID0g
aWZhOworCWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKwkvKiBjb3JyZWxhdGlv
bl9pZCBmaWxsZWQgaW4gZHVyaW5nIHNlbmQgcm91dGluZSBsYXRlci4uLiAqLworCXN3aXRjaCAo
aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVU
NjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJc2luNiA9ICZpZmEtPmFk
ZHJlc3Muc2luNjsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQURE
UkVTUzsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNj
dHBfaXB2NmFkZHJfcGFyYW0pKTsKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArCisJCSAgICBzaXplb2Yoc3RydWN0IHNj
dHBfaXB2NmFkZHJfcGFyYW0pOworCQltZW1jcHkoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+
c2luNl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlicmVhazsK
Kwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJc3RydWN0IHNv
Y2thZGRyX2luICpzaW47CisKKwkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47CisJCWFhLT5hcC5h
ZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5w
aC5wYXJhbV9sZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSk7CisJ
CWFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9w
YXJhbWhkcikgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJ
bWVtY3B5KCZhYS0+YXAuYWRkcnAuYWRkciwgJnNpbi0+c2luX2FkZHIsCisJCSAgICAgICBzaXpl
b2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJ
LyogaW52YWxpZCBmYW1pbHkhICovCisJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsK
KwkJc2N0cF9mcmVlX2lmYShpZmEpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWEtPnNlbnQgPSAw
OwkJLyogY2xlYXIgc2VudCBmbGFnICovCisKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNv
Yy5hc2NvbmZfcXVldWUsIGFhLCBuZXh0KTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FTQ09ORjIpIHsKKwkJaWYg
KHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJU0NUUF9QUklOVEYoImFzY29uZl9x
dWV1ZV9tZ210OiBpbnNlcnRlZCBhc2NvbmYgQUREX0lQX0FERFJFU1M6ICIpOworCQkJU0NUUERC
R19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7CisJCX0gZWxzZSBp
ZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlTQ1RQX1BSSU5URigiYXNjb25m
X3F1ZXVlX21nbXQ6IGFwcGVuZGVkIGFzY29uZiBERUxfSVBfQUREUkVTUzogIik7CisJCQlTQ1RQ
REJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYyLCAmaWZhLT5hZGRyZXNzLnNhKTsKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfUFJJTlRGKCJhc2NvbmZfcXVldWVfbWdtdDogYXBwZW5kZWQgYXNjb25mIFNF
VF9QUklNX0FERFI6ICIpOworCQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlm
YS0+YWRkcmVzcy5zYSk7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVybiAoMCk7Cit9CisKKwor
LyoKKyAqIGFkZCBhbiBhc2NvbmYgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gaWZhIGFuZCB0eXBl
LgorICogdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFND
VFBfU0VUX1BSSU1fQUREUi4KKyAqIHJldHVybnMgMCBpZiBjb21wbGV0ZWQsIC0xIGlmIG5vdCBj
b21wbGV0ZWQsIDEgaWYgaW1tZWRpYXRlIHNlbmQgaXMKKyAqIGFkdmlzYWJsZS4KKyAqLworc3Rh
dGljIGludAorc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfaWZhICppZmEsCisJCSAgICAgIHVpbnQxNl90IHR5cGUpCit7CisJdWludDMyX3Qg
c3RhdHVzOworCWludCBwZW5kaW5nX2RlbGV0ZV9xdWV1ZWQgPSAwOworCWludCBsYXN0OworCisJ
Lyogc2VlIGlmIHBlZXIgc3VwcG9ydHMgQVNDT05GICovCisJaWYgKHN0Y2ItPmFzb2MuYXNjb25m
X3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKworCS8qCisJICogaWYgdGhp
cyBpcyBkZWxldGluZyB0aGUgbGFzdCBhZGRyZXNzIGZyb20gdGhlIGFzc29jLCBtYXJrIGl0IGFz
CisJICogcGVuZGluZy4KKwkgKi8KKwlpZiAoKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykg
JiYgIXN0Y2ItPmFzb2MuYXNjb25mX2RlbF9wZW5kaW5nKSB7CisJCWlmIChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJCWxhc3QgPSAoc2N0
cF9sb2NhbF9hZGRyX2NvdW50KHN0Y2IpID09IDApOworCQl9IGVsc2UgeworCQkJbGFzdCA9IChz
Y3RwX2xvY2FsX2FkZHJfY291bnQoc3RjYikgPT0gMSk7CisJCX0KKwkJaWYgKGxhc3QpIHsKKwkJ
CS8qIHNldCB0aGUgcGVuZGluZyBkZWxldGUgaW5mbyBvbmx5ICovCisJCQlzdGNiLT5hc29jLmFz
Y29uZl9kZWxfcGVuZGluZyA9IDE7CisJCQlzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9wZW5k
aW5nID0gaWZhOworCQkJYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsCisJCQkJImFzY29uZl9xdWV1ZV9hZGQ6IG1hcmsgZGVs
ZXRlIGxhc3QgYWRkcmVzcyBwZW5kaW5nXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQor
CisJLyogcXVldWUgYW4gYXNjb25mIHBhcmFtZXRlciAqLworCXN0YXR1cyA9IHNjdHBfYXNjb25m
X3F1ZXVlX21nbXQoc3RjYiwgaWZhLCB0eXBlKTsKKworCS8qCisJICogaWYgdGhpcyBpcyBhbiBh
ZGQsIGFuZCB0aGVyZSBpcyBhIGRlbGV0ZSBhbHNvIHBlbmRpbmcgKGkuZS4gdGhlCisJICogbGFz
dCBsb2NhbCBhZGRyZXNzIGlzIGJlaW5nIGNoYW5nZWQpLCBxdWV1ZSB0aGUgcGVuZGluZyBkZWxl
dGUgdG9vLgorCSAqLworCWlmICgodHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSAmJiBzdGNi
LT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyAmJiAoc3RhdHVzID09IDApKSB7CisJCS8qIHF1ZXVl
IGluIHRoZSBwZW5kaW5nIGRlbGV0ZSAqLworCQlpZiAoc2N0cF9hc2NvbmZfcXVldWVfbWdtdChz
dGNiLAorCQkJCQkgICBzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nLAorCQkJCQkg
ICBTQ1RQX0RFTF9JUF9BRERSRVNTKSA9PSAwKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMiwgImFzY29uZl9xdWV1ZV9hZGQ6IHF1ZWluZyBwZW5kaW5nIGRlbGV0ZVxuIik7CisJCQlw
ZW5kaW5nX2RlbGV0ZV9xdWV1ZWQgPSAxOworCQkJLyogY2xlYXIgb3V0IHRoZSBwZW5kaW5nIGRl
bGV0ZSBpbmZvICovCisJCQlzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyA9IDA7CisJCQlz
Y3RwX2ZyZWVfaWZhKHN0Y2ItPmFzb2MuYXNjb25mX2FkZHJfZGVsX3BlbmRpbmcpOworCQkJc3Rj
Yi0+YXNvYy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZyA9IE5VTEw7CisJCX0KKwl9CisKKwlpZiAo
cGVuZGluZ19kZWxldGVfcXVldWVkKSB7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJLyoK
KwkJICogc2luY2Ugd2Uga25vdyB0aGF0IHRoZSBvbmx5L2xhc3QgYWRkcmVzcyBpcyBub3cgYmVp
bmcKKwkJICogY2hhbmdlZCBpbiB0aGlzIGNhc2UsIHJlc2V0IHRoZSBjd25kL3J0byBvbiBhbGwg
bmV0cyB0bworCQkgKiBzdGFydCBhcyBhIG5ldyBhZGRyZXNzIGFuZCBwYXRoLiAgQWxzbyBjbGVh
ciB0aGUgZXJyb3IKKwkJICogY291bnRzIHRvIGdpdmUgdGhlIGFzc29jIHRoZSBiZXN0IGNoYW5j
ZSB0byBjb21wbGV0ZSB0aGUKKwkJICogYWRkcmVzcyBjaGFuZ2UuCisJCSAqLworCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlzdGNiLT5hc29j
LmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsCisJCQkJCQkJCQkg
IG5ldCk7CisJCQluZXQtPlJUTyA9IDA7CisJCQluZXQtPmVycm9yX2NvdW50ID0gMDsKKwkJfQor
CQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgeworCQkJ
c2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCQkJICAgICAgIHN0Y2ItPmFz
b2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkgICAgICAgMCwKKwkJCQkgICAgICAgU0NUUF9G
Uk9NX1NDVFBfQVNDT05GLAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJCX0KKworCQkvKiBxdWV1
ZSBpbiBhbiBhZHZpc29yeSBzZXQgcHJpbWFyeSB0b28gKi8KKwkJKHZvaWQpc2N0cF9hc2NvbmZf
cXVldWVfbWdtdChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUik7CisJCS8qIGxldCBjYWxs
ZXIga25vdyB3ZSBzaG91bGQgc2VuZCB0aGlzIG91dCBpbW1lZGlhdGVseSAqLworCQlzdGF0dXMg
PSAxOworCX0KKwlyZXR1cm4gKHN0YXR1cyk7Cit9CisKKy8qLQorICogYWRkIGFuIGFzY29uZiBk
ZWxldGUgSVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlIGJ5IHNvY2thZGRyIGFuZAor
ICogcG9zc2libHkgd2l0aCBubyBzY3RwX2lmYSBhdmFpbGFibGUuICBUaGlzIGlzIG9ubHkgY2Fs
bGVkIGJ5IHRoZSByb3V0aW5lCisgKiB0aGF0IGNoZWNrcyB0aGUgYWRkcmVzc2VzIGluIGFuIElO
SVQtQUNLIGFnYWluc3QgdGhlIGN1cnJlbnQgYWRkcmVzcyBsaXN0LgorICogcmV0dXJucyAwIGlm
IGNvbXBsZXRlZCwgbm9uLXplcm8gaWYgbm90IGNvbXBsZXRlZC4KKyAqIE5PVEU6IGlmIGFuIGFk
ZCBpcyBhbHJlYWR5IHNjaGVkdWxlZCAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkKKyAq
IHJlbW92ZSBpdCBmcm9tIHF1ZXVlLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5k
LCBpZ25vcmUgdGhlCisgKiBuZXcgb25lLgorICovCitzdGF0aWMgaW50CitzY3RwX2FzY29uZl9x
dWV1ZV9zYV9kZWxldGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnNh
KQoreworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICph
YSwgKmFhX25leHQ7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJldHVybiAoLTEpOworCX0K
KwkvKiBzZWUgaWYgcGVlciBzdXBwb3J0cyBBU0NPTkYgKi8KKwlpZiAoc3RjYi0+YXNvYy5hc2Nv
bmZfc3VwcG9ydGVkID09IDApIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIG1ha2Ugc3VyZSB0
aGUgcmVxdWVzdCBpc24ndCBhbHJlYWR5IGluIHRoZSBxdWV1ZSAqLworCVRBSUxRX0ZPUkVBQ0hf
U0FGRShhYSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7CisJCS8q
IGFkZHJlc3MgbWF0Y2g/ICovCisJCWlmIChzY3RwX2FzY29uZl9hZGRyX21hdGNoKGFhLCBzYSkg
PT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVl
IChzZW50IG9yIG5vdCkgKi8KKwkJaWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQ
X0RFTF9JUF9BRERSRVNTKSB7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkvKiBpcyB0aGUgbmVn
YXRpdmUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlLCBhbmQgbm90IHNlbnQgKi8KKwkJaWYgKGFh
LT5zZW50ID09IDEpCisJCQljb250aW51ZTsKKwkJaWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlw
ZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGQgYWxyZWFkeSBxdWV1ZWQsIHNv
IHJlbW92ZSBleGlzdGluZyBlbnRyeSAqLworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFz
Y29uZl9xdWV1ZSwgYWEsIG5leHQpOworCQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIGFhLT5pZmEpOworCQkJLyogZnJlZSB0aGUgZW50cnkgKi8KKwkJCVNDVFBfRlJFRShh
YSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfSAvKiBmb3IgZWFj
aCBhYSAqLworCisJLyogZmluZCBhbnkgZXhpc3RpbmcgaWZhLS0gTk9URSBpZmEgQ0FOIGJlIGFs
bG93ZWQgdG8gYmUgTlVMTCAqLworCWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihzYSwgc3Rj
Yi0+YXNvYy52cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKworCS8qIGFkZGluZyBuZXcg
cmVxdWVzdCB0byB0aGUgcXVldWUgKi8KKwlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBfYXNj
b25mX2FkZHIgKiwgc2l6ZW9mKCphYSksCisJCSAgICBTQ1RQX01fQVNDX0FERFIpOworCWlmIChh
YSA9PSBOVUxMKSB7CisJCS8qIGRpZG4ndCBnZXQgbWVtb3J5ICovCisJCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLAorCQkJInNjdHBfYXNjb25mX3F1ZXVlX3NhX2RlbGV0ZTogZmFpbGVkIHRv
IGdldCBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFhLT5zcGVjaWFsX2RlbCA9
IDA7CisJLyogZmlsbCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzICovCisJLyog
dG9wIGxldmVsIGVsZW1lbnRzIGFyZSAibmV0d29ya2VkIiBkdXJpbmcgc2VuZCAqLworCWFhLT5h
cC5hcGgucGgucGFyYW1fdHlwZSA9IFNDVFBfREVMX0lQX0FERFJFU1M7CisJYWEtPmlmYSA9IGlm
YTsKKwlpZiAoaWZhKQorCQlhdG9taWNfYWRkX2ludCgmaWZhLT5yZWZjb3VudCwgMSk7CisJLyog
Y29ycmVsYXRpb25faWQgZmlsbGVkIGluIGR1cmluZyBzZW5kIHJvdXRpbmUgbGF0ZXIuLi4gKi8K
Kwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6
CisJeworCQkvKiBJUHY2IGFkZHJlc3MgKi8KKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
KworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJYWEtPmFwLmFkZHJwLnBo
LnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFt
X2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKTsKKwkJYWEtPmFw
LmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRy
KSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7CisJCW1lbWNweSgmYWEtPmFw
LmFkZHJwLmFkZHIsICZzaW42LT5zaW42X2FkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9h
ZGRyKSk7CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6
CisJeworCQkvKiBJUHY0IGFkZHJlc3MgKi8KKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopc2E7CisKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUg
PSBTQ1RQX0lQVjRfQUREUkVTUzsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKTsKKwkJYWEtPmFwLmFwaC5waC5wYXJh
bV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7CisJCW1lbWNweSgmYWEtPmFwLmFkZHJwLmFkZHIs
ICZzaW4tPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJCWJyZWFr
OworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIGludmFsaWQgZmFtaWx5ISAqLworCQlTQ1RQ
X0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7CisJCWlmIChpZmEpCisJCQlzY3RwX2ZyZWVfaWZh
KGlmYSk7CisJCXJldHVybiAoLTEpOworCX0KKwlhYS0+c2VudCA9IDA7CQkvKiBjbGVhciBzZW50
IGZsYWcgKi8KKworCS8qIGRlbGV0ZSBnb2VzIHRvIHRoZSBiYWNrIG9mIHRoZSBxdWV1ZSAqLwor
CVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwor
CisJLyogc2FfaWdub3JlIE1FTUxFQUsge21lbW9yeSBpcyBwdXQgb24gdGhlIHRhaWxxfSAqLwor
CXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBmaW5kIGEgc3BlY2lmaWMgYXNjb25mIHBhcmFtIG9u
IG91ciAic2VudCIgcXVldWUKKyAqLworc3RhdGljIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICoK
K3NjdHBfYXNjb25mX2ZpbmRfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBj
b3JyZWxhdGlvbl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWE7CisKKwlUQUlM
UV9GT1JFQUNIKGFhLCAmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIG5leHQpIHsKKwkJaWYgKGFh
LT5hcC5hcGguY29ycmVsYXRpb25faWQgPT0gY29ycmVsYXRpb25faWQgJiYKKwkJICAgIGFhLT5z
ZW50ID09IDEpIHsKKwkJCS8qIGZvdW5kIGl0ICovCisJCQlyZXR1cm4gKGFhKTsKKwkJfQorCX0K
KwkvKiBkaWRuJ3QgZmluZCBpdCAqLworCXJldHVybiAoTlVMTCk7Cit9CisKKy8qCisgKiBwcm9j
ZXNzIGFuIFNDVFBfRVJST1JfQ0FVU0VfSU5EIGZvciBhIEFTQ09ORi1BQ0sgcGFyYW1ldGVyIGFu
ZCBkbworICogbm90aWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUgZXJyb3IgcmVzcG9uc2UKKyAqLwor
c3RhdGljIHZvaWQKK3NjdHBfYXNjb25mX3Byb2Nlc3NfZXJyb3Ioc3RydWN0IHNjdHBfdGNiICpz
dGNiIFNDVFBfVU5VU0VELAorCQkJICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCkK
K3sKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqZWg7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIg
KnBoOworCXVpbnQxNl90IHBhcmFtX3R5cGU7CisJdWludDE2X3QgZXJyb3JfY29kZTsKKworCWVo
ID0gKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKGFwaCArIDEpOworCXBoID0gKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopKGVoICsgMSk7CisJLyogdmFsaWRhdGUgbGVuZ3RocyAqLworCWlmICho
dG9ucyhlaC0+bGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkgPgorCSAg
ICBodG9ucyhhcGgtPnBoLnBhcmFtX2xlbmd0aCkpIHsKKwkJLyogaW52YWxpZCBlcnJvciBjYXVz
ZSBsZW5ndGggKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiYXNjb25mX3By
b2Nlc3NfZXJyb3I6IGNhdXNlIGVsZW1lbnQgdG9vIGxvbmdcbiIpOworCQlyZXR1cm47CisJfQor
CWlmIChodG9ucyhwaC0+cGFyYW1fbGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
cikgPgorCSAgICBodG9ucyhlaC0+bGVuZ3RoKSkgeworCQkvKiBpbnZhbGlkIGluY2x1ZGVkIFRM
ViBsZW5ndGggKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiYXNjb25mX3By
b2Nlc3NfZXJyb3I6IGluY2x1ZGVkIFRMViB0b28gbG9uZ1xuIik7CisJCXJldHVybjsKKwl9CisJ
Lyogd2hpY2ggZXJyb3IgY29kZSA/ICovCisJZXJyb3JfY29kZSA9IG50b2hzKGVoLT5jb2RlKTsK
KwlwYXJhbV90eXBlID0gbnRvaHMoYXBoLT5waC5wYXJhbV90eXBlKTsKKwkvKiBGSVg6IHRoaXMg
c2hvdWxkIGdvIGJhY2sgdXAgdGhlIFJFTU9URV9FUlJPUiBVTFAgbm90aWZ5ICovCisJc3dpdGNo
IChlcnJvcl9jb2RlKSB7CisJY2FzZSBTQ1RQX0NBVVNFX1JFU09VUkNFX1NIT1JUQUdFOgorCQkv
KiB3ZSBhbGxvdyBvdXJzZWx2ZXMgdG8gInRyeSBhZ2FpbiIgZm9yIHRoaXMgZXJyb3IgKi8KKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJLyogcGVlciBjYW4ndCBoYW5kbGUgaXQuLi4gKi8KKwkJc3dp
dGNoIChwYXJhbV90eXBlKSB7CisJCWNhc2UgU0NUUF9BRERfSVBfQUREUkVTUzoKKwkJY2FzZSBT
Q1RQX0RFTF9JUF9BRERSRVNTOgorCQljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKKwkJCWJyZWFr
OworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8qCisgKiBwcm9jZXNzIGFu
IGFzY29uZiBxdWV1ZSBwYXJhbS4KKyAqIGFwYXJhbTogcGFyYW1ldGVyIHRvIHByb2Nlc3MsIHdp
bGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KKyAqIGZsYWc6IDE9c3VjY2VzcyBjYXNlLCAw
PWZhaWx1cmUgY2FzZQorICovCitzdGF0aWMgdm9pZAorc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJh
bV9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgc3RydWN0IHNjdHBfYXNjb25m
X2FkZHIgKmFwYXJhbSwgdWludDMyX3QgZmxhZykKK3sKKwl1aW50MTZfdCBwYXJhbV90eXBlOwor
CisJLyogcHJvY2VzcyB0aGlzIHBhcmFtICovCisJcGFyYW1fdHlwZSA9IGFwYXJhbS0+YXAuYXBo
LnBoLnBhcmFtX3R5cGU7CisJc3dpdGNoIChwYXJhbV90eXBlKSB7CisJY2FzZSBTQ1RQX0FERF9J
UF9BRERSRVNTOgorCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJwcm9jZXNzX3Bh
cmFtX2FjazogYWRkZWQgSVAgYWRkcmVzc1xuIik7CisJCXNjdHBfYXNjb25mX2FkZHJfbWdtdF9h
Y2soc3RjYiwgYXBhcmFtLT5pZmEsIGZsYWcpOworCQlicmVhazsKKwljYXNlIFNDVFBfREVMX0lQ
X0FERFJFU1M6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJInByb2Nlc3NfcGFy
YW1fYWNrOiBkZWxldGVkIElQIGFkZHJlc3NcbiIpOworCQkvKiBub3RoaW5nIHJlYWxseSB0byBk
by4uLiBsaXN0cyBhbHJlYWR5IHVwZGF0ZWQgKi8KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFVF9Q
UklNX0FERFI6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJInByb2Nlc3NfcGFy
YW1fYWNrOiBzZXQgcHJpbWFyeSBJUCBhZGRyZXNzXG4iKTsKKwkJLyogbm90aGluZyB0byBkby4u
LiBwZWVyIG1heSBzdGFydCB1c2luZyB0aGlzIGFkZHIgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoK
KwkJLyogc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworCQlicmVhazsKKwl9CisKKwkvKiByZW1vdmUg
dGhlIHBhcmFtIGFuZCBmcmVlIGl0ICovCisJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29u
Zl9xdWV1ZSwgYXBhcmFtLCBuZXh0KTsKKwlpZiAoYXBhcmFtLT5pZmEpCisJCXNjdHBfZnJlZV9p
ZmEoYXBhcmFtLT5pZmEpOworCVNDVFBfRlJFRShhcGFyYW0sIFNDVFBfTV9BU0NfQUREUik7Cit9
CisKKy8qCisgKiBjbGVhbnVwIGZyb20gYSBiYWQgYXNjb25mIGFjayBwYXJhbWV0ZXIKKyAqLwor
c3RhdGljIHZvaWQKK3NjdHBfYXNjb25mX2Fja19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ig
U0NUUF9VTlVTRUQpCit7CisJLyogYXNzdW1lIHBlZXIgZG9lc24ndCByZWFsbHkga25vdyBob3cg
dG8gZG8gYXNjb25mcyAqLworCS8qIFhYWCB3ZSBjb3VsZCBmcmVlIHRoZSBwZW5kaW5nIHF1ZXVl
IGhlcmUgKi8KKworfQorCit2b2lkCitzY3RwX2hhbmRsZV9hc2NvbmZfYWNrKHN0cnVjdCBtYnVm
ICptLCBpbnQgb2Zmc2V0LAorCQkgICAgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayAq
Y3AsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwgaW50ICphYm9ydF9ub191bmxvY2spCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2M7CisJdWludDMyX3Qgc2VyaWFsX251bTsKKwl1aW50MTZfdCBhY2tfbGVuZ3RoOworCXN0cnVj
dCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICph
YSwgKmFhX25leHQ7CisJdWludDMyX3QgbGFzdF9lcnJvcl9pZCA9IDA7CS8qIGxhc3QgZXJyb3Ig
Y29ycmVsYXRpb24gaWQgKi8KKwl1aW50MzJfdCBpZDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRk
ciAqYXA7CisKKwkvKiBhc2NvbmYgcGFyYW0gYnVmZmVyICovCisJdWludDhfdCBhcGFyYW1fYnVm
W1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOworCisJLyogdmVyaWZ5IG1pbmltdW0gbGVuZ3RoICov
CisJaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
Y29uZl9hY2tfY2h1bmspKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJImhh
bmRsZV9hc2NvbmZfYWNrOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIsCisJCQludG9ocyhjcC0+
Y2guY2h1bmtfbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9CisJYXNvYyA9ICZzdGNiLT5hc29jOwor
CXNlcmlhbF9udW0gPSBudG9obChjcC0+c2VyaWFsX251bWJlcik7CisKKwkvKgorCSAqIE5PVEU6
IHdlIG1heSB3YW50IHRvIGhhbmRsZSB0aGlzIGRpZmZlcmVudGx5LSBjdXJyZW50bHksIHdlIHdp
bGwKKwkgKiBhYm9ydCB3aGVuIHdlIGdldCBhbiBhY2sgZm9yIHRoZSBleHBlY3RlZCBzZXJpYWwg
bnVtYmVyICsgMSAoZWcuCisJICogd2UgZGlkbid0IHNlbmQgaXQpLCBwcm9jZXNzIGFuIGFjayBu
b3JtYWxseSBpZiBpdCBpcyB0aGUgZXhwZWN0ZWQKKwkgKiBzZXJpYWwgbnVtYmVyLCBhbmQgcmUt
c2VuZCB0aGUgcHJldmlvdXMgYWNrIGZvciAqQUxMKiBvdGhlcgorCSAqIHNlcmlhbCBudW1iZXJz
CisJICovCisKKwkvKgorCSAqIGlmIHRoZSBzZXJpYWwgbnVtYmVyIGlzIHRoZSBuZXh0IGV4cGVj
dGVkLCBidXQgSSBkaWRuJ3Qgc2VuZCBpdCwKKwkgKiBhYm9ydCB0aGUgYXNvYywgc2luY2Ugc29t
ZW9uZSBwcm9iYWJseSBqdXN0IGhpamFja2VkIHVzLi4uCisJICovCisJaWYgKHNlcmlhbF9udW0g
PT0gKGFzb2MtPmFzY29uZl9zZXFfb3V0ICsgMSkpIHsKKwkJc3RydWN0IG1idWYgKm9wX2VycjsK
KwkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgdW5leHBlY3RlZCBuZXh0IHNlcmlhbCBu
dW1iZXIhIEFib3J0aW5nIGFzb2MhXG4iKTsKKwkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwg
Ik5ldmVyIHNlbnQgc2VyaWFsIG51bWJlciAlOC44eCIsCisJCQkgc2VyaWFsX251bSk7CisJCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04s
IG1zZyk7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
b3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKKwkJ
cmV0dXJuOworCX0KKwlpZiAoc2VyaWFsX251bSAhPSBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tl
ZCArIDEpIHsKKwkJLyogZ290IGEgZHVwbGljYXRlL3VuZXhwZWN0ZWQgQVNDT05GLUFDSyAqLwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgZHVw
bGljYXRlL3VuZXhwZWN0ZWQgc2VyaWFsIG51bWJlciA9ICV4aCAoZXhwZWN0ZWQgPSAleGgpXG4i
LAorCQkJc2VyaWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNrZWQgKyAxKTsKKwkJcmV0
dXJuOworCX0KKworCWlmIChzZXJpYWxfbnVtID09IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMSkg
eworCQkvKiBzdG9wIG91ciB0aW1lciAqLworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX0FTQ09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCVNDVFBfRlJPTV9TQ1RQ
X0FTQ09ORiArIFNDVFBfTE9DXzUpOworCX0KKworCS8qIHByb2Nlc3MgdGhlIEFTQ09ORi1BQ0sg
Y29udGVudHMgKi8KKwlhY2tfbGVuZ3RoID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgLQor
CSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7CisJb2Zmc2V0ICs9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKTsKKwkvKiBwcm9jZXNzIHRocm91Z2gg
YWxsIHBhcmFtZXRlcnMgKi8KKwl3aGlsZSAoYWNrX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNj
dHBfYXNjb25mX3BhcmFtaGRyKSkgeworCQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJh
bV90eXBlOworCisJCS8qIGdldCBwb2ludGVyIHRvIG5leHQgYXNjb25mIHBhcmFtZXRlciAqLwor
CQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBv
ZmZzZXQsCisJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFt
X2J1Zik7CisJCWlmIChhcGggPT0gTlVMTCkgeworCQkJLyogY2FuJ3QgZ2V0IGFuIGFzY29uZiBw
YXJhbWhkciAqLworCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOworCQkJcmV0dXJuOwor
CQl9CisJCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQlwYXJhbV9s
ZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCWlmIChwYXJhbV9sZW5ndGgg
PiBhY2tfbGVuZ3RoKSB7CisJCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7CisJCQlyZXR1
cm47CisJCX0KKwkJaWYgKHBhcmFtX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
cikpIHsKKwkJCXNjdHBfYXNjb25mX2Fja19jbGVhcihzdGNiKTsKKwkJCXJldHVybjsKKwkJfQor
CQkvKiBnZXQgdGhlIGNvbXBsZXRlIHBhcmFtZXRlci4uLiAqLworCQlpZiAocGFyYW1fbGVuZ3Ro
ID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwK
KwkJCQkicGFyYW0gbGVuZ3RoICgldSkgbGFyZ2VyIHRoYW4gYnVmZmVyIHNpemUhXG4iLCBwYXJh
bV9sZW5ndGgpOworCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOworCQkJcmV0dXJuOwor
CQl9CisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRy
KG0sIG9mZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKKwkJaWYgKGFwaCA9PSBOVUxM
KSB7CisJCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7CisJCQlyZXR1cm47CisJCX0KKwkJ
LyogY29ycmVsYXRpb25faWQgaXMgdHJhbnNwYXJlbnQgdG8gcGVlciwgbm8gbnRvaGwgbmVlZGVk
ICovCisJCWlkID0gYXBoLT5jb3JyZWxhdGlvbl9pZDsKKworCQlzd2l0Y2ggKHBhcmFtX3R5cGUp
IHsKKwkJY2FzZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKKwkJCWxhc3RfZXJyb3JfaWQgPSBpZDsK
KwkJCS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1ZSAq
LworCQkJYXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKKwkJCWlmIChhcCA9
PSBOVUxMKSB7CisJCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUhICov
CisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIGZhaWxlZCBm
bGFnICovCisJCQlzY3RwX2FzY29uZl9wcm9jZXNzX3BhcmFtX2FjayhzdGNiLCBhcCwgMCk7CisJ
CQkvKiBwcm9jZXNzIHRoZSBlcnJvciByZXNwb25zZSAqLworCQkJc2N0cF9hc2NvbmZfcHJvY2Vz
c19lcnJvcihzdGNiLCBhcGgpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9S
VDoKKwkJCS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1
ZSAqLworCQkJYXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKKwkJCWlmIChh
cCA9PSBOVUxMKSB7CisJCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUh
ICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIHN1Y2Nl
c3MgZmxhZyAqLworCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYXAsIDEp
OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQkJLyogc3dpdGNoICovCisK
KwkJLyogdXBkYXRlIHJlbWFpbmluZyBBU0NPTkYtQUNLIG1lc3NhZ2UgbGVuZ3RoIHRvIHByb2Nl
c3MgKi8KKwkJYWNrX2xlbmd0aCAtPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOworCQlpZiAo
YWNrX2xlbmd0aCA8PSAwKSB7CisJCQkvKiBubyBtb3JlIGRhdGEgaW4gdGhlIG1idWYgY2hhaW4g
Ki8KKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgp
OworCX0gLyogd2hpbGUgKi8KKworCS8qCisJICogaWYgdGhlcmUgYXJlIGFueSAic2VudCIgcGFy
YW1zIHN0aWxsIG9uIHRoZSBxdWV1ZSwgdGhlc2UgYXJlCisJICogaW1wbGljaXRseSAic3VjY2Vz
cyIsIG9yICJmYWlsZWQiIChpZiB3ZSBnb3QgYW4gZXJyb3IgYmFjaykgLi4uCisJICogc28gcHJv
Y2VzcyB0aGVzZSBhcHByb3ByaWF0ZWx5CisJICoKKwkgKiB3ZSBhc3N1bWUgdGhhdCB0aGUgY29y
cmVsYXRpb25faWQncyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCisJICogYmVnaW5uaW5n
IGZyb20gMSBhbmQgdGhhdCB3ZSBkb24ndCBoYXZlICp0aGF0KiBtYW55IG91dHN0YW5kaW5nCisJ
ICogYXQgYW55IGdpdmVuIHRpbWUKKwkgKi8KKwlpZiAobGFzdF9lcnJvcl9pZCA9PSAwKQorCQls
YXN0X2Vycm9yX2lkLS07CS8qIHNldCB0byAibWF4IiB2YWx1ZSAqLworCVRBSUxRX0ZPUkVBQ0hf
U0FGRShhYSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7CisJCWlm
IChhYS0+c2VudCA9PSAxKSB7CisJCQkvKgorCQkJICogaW1wbGljaXRseSBzdWNjZXNzZnVsIG9y
IGZhaWxlZCBpZiBjb3JyZWxhdGlvbl9pZAorCQkJICogPCBsYXN0X2Vycm9yX2lkLCB0aGVuIHN1
Y2Nlc3MgZWxzZSwgZmFpbHVyZQorCQkJICovCisJCQlpZiAoYWEtPmFwLmFwaC5jb3JyZWxhdGlv
bl9pZCA8IGxhc3RfZXJyb3JfaWQpCisJCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2so
c3RjYiwgYWEsIDEpOworCQkJZWxzZQorCQkJCXNjdHBfYXNjb25mX3Byb2Nlc3NfcGFyYW1fYWNr
KHN0Y2IsIGFhLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBzaW5jZSB3ZSBhbHdheXMg
cHJvY2VzcyBpbiBvcmRlciAoRklGTyBxdWV1ZSkgaWYKKwkJCSAqIHdlIHJlYWNoIG9uZSB0aGF0
IGhhc24ndCBiZWVuIHNlbnQsIHRoZSByZXN0CisJCQkgKiBzaG91bGQgbm90IGhhdmUgYmVlbiBz
ZW50IGVpdGhlci4gc28sIHdlJ3JlCisJCQkgKiBkb25lLi4uCisJCQkgKi8KKwkJCWJyZWFrOwor
CQl9CisJfQorCisJLyogdXBkYXRlIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0byB1c2UgKi8K
Kwlhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCsrOworCS8qIHJlbW92ZSB0aGUgb2xkIEFTQ09O
RiBvbiBvdXIgb3V0Ym91bmQgcXVldWUgKi8KKwlzY3RwX3Rvc3Nfb2xkX2FzY29uZihzdGNiKTsK
KwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSkpIHsKKyNpZmRlZiBT
Q1RQX1RJTUVSX0JBU0VEX0FTQ09ORgorCQkvKiB3ZSBoYXZlIG1vcmUgcGFyYW1zLCBzbyByZXN0
YXJ0IG91ciB0aW1lciAqLworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NP
TkYsIHN0Y2ItPnNjdHBfZXAsCisJCQkJIHN0Y2IsIG5ldCk7CisjZWxzZQorCQkvKiB3ZSBoYXZl
IG1vcmUgcGFyYW1zLCBzbyBzZW5kIG91dCBtb3JlICovCisJCXNjdHBfc2VuZF9hc2NvbmYoc3Rj
YiwgbmV0LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisjZW5kaWYKKwl9Cit9CisKKyNpZmRlZiBJ
TkVUNgorc3RhdGljIHVpbnQzMl90CitzY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNiwgKm5ldDY7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJaWYgKHNhLT5zYV9m
YW1pbHkgIT0gQUZfSU5FVDYpIHsKKwkJLyogd3JvbmcgZmFtaWx5ICovCisJCXJldHVybiAoMCk7
CisJfQorCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOworCWlmIChJTjZfSVNfQURE
Ul9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikgPT0gMCkgeworCQkvKiBub3QgbGluayBsb2Nh
bCBhZGRyZXNzICovCisJCXJldHVybiAoMCk7CisJfQorCS8qIGh1bnQgdGhyb3VnaCBvdXIgZGVz
dGluYXRpb24gbmV0cyBsaXN0IGZvciB0aGlzIHNjb3BlX2lkICovCisJVEFJTFFfRk9SRUFDSChu
ZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoKChzdHJ1Y3Qgc29ja2Fk
ZHIgKikoJm5ldC0+cm8uX2xfYWRkcikpLT5zYV9mYW1pbHkgIT0KKwkJICAgIEFGX0lORVQ2KQor
CQkJY29udGludWU7CisJCW5ldDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9s
X2FkZHI7CisJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ldDYtPnNpbjZfYWRkcikgPT0g
MCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2N0cF9pc19zYW1lX3Njb3BlKHNpbjYsIG5ldDYpKSB7
CisJCQkvKiBmb3VuZCBvbmUgKi8KKwkJCXJldHVybiAoMSk7CisJCX0KKwl9CisJLyogZGlkbid0
IGZpbmQgb25lICovCisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCisvKgorICogYWRkcmVzcyBt
YW5hZ2VtZW50IGZ1bmN0aW9ucworICovCitzdGF0aWMgdm9pZAorc2N0cF9hZGRyX21nbXRfYXNz
b2Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgICAg
IHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MTZfdCB0eXBlLCBpbnQgYWRkcl9sb2NrZWQpCit7
CisJaW50IHN0YXR1czsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRBTEwpID09IDAgfHwKKwkgICAgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENC
X0ZMQUdTX0RPX0FTQ09ORikpIHsKKwkJLyogc3Vic2V0IGJvdW5kLCBubyBBU0NPTkYgYWxsb3dl
ZCBjYXNlLCBzbyBpZ25vcmUgKi8KKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIG5vdGU6IHdlIGtu
b3cgdGhpcyBpcyBub3QgdGhlIHN1YnNldCBib3VuZCwgbm8gQVNDT05GIGNhc2UgZWcuCisJICog
dGhpcyBpcyBib3VuZGFsbCBvciBzdWJzZXQgYm91bmQgdy9BU0NPTkYgYWxsb3dlZAorCSAqLwor
CisJLyogZmlyc3QsIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIElQdjQgb3IgSVB2NiBh
bmQgbm90IGphaWxlZCAqLworCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
CQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAg
ICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApIHsKKwkJ
CXJldHVybjsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVAorCWNh
c2UgQUZfSU5FVDoKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlpZiAocHJpc29uX2NoZWNr
X2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICZp
ZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKyNlbmRp
ZgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisjaWZkZWYgSU5F
VDYKKwkvKiBtYWtlIHN1cmUgd2UncmUgImFsbG93ZWQiIHRvIGFkZCB0aGlzIHR5cGUgb2YgYWRk
ciAqLworCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCS8q
IGludmFsaWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkKKwkJCXJldHVybjsKKwkJLyog
aXMgdGhlIHY2IGFkZHIgcmVhbGx5IHZhbGlkID8gKi8KKwkJaWYgKGlmYS0+bG9jYWxpZmFfZmxh
Z3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgeworCQkJcmV0dXJuOworCQl9CisJfQorI2Vu
ZGlmCisJLyogcHV0IHRoaXMgYWRkcmVzcyBvbiB0aGUgInBlbmRpbmcvZG8gbm90IHVzZSB5ZXQi
IGxpc3QgKi8KKwlzY3RwX2FkZF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKKwkv
KgorCSAqIGNoZWNrIGFkZHJlc3Mgc2NvcGUgaWYgYWRkcmVzcyBpcyBvdXQgb2Ygc2NvcGUsIGRv
bid0IHF1ZXVlCisJICogYW55dGhpbmcuLi4gbm90ZTogdGhpcyB3b3VsZCBsZWF2ZSB0aGUgYWRk
cmVzcyBvbiBib3RoIGlucCBhbmQKKwkgKiBhc29jIGxpc3RzCisJICovCisJc3dpdGNoIChpZmEt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2Ogor
CXsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlzaW42ID0gJmlmYS0+YWRkcmVz
cy5zaW42OworCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKKwkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCXJldHVybjsKKwkJ
fQorCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlp
ZiAoc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwKSB7CisJCQkJcmV0dXJuOworCQkJ
fQorCQkJLyogaXMgaXQgdGhlIHJpZ2h0IGxpbmsgbG9jYWwgc2NvcGU/ICovCisJCQlpZiAoc2N0
cF9pc19zY29wZWlkX2luX25ldHMoc3RjYiwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkgeworCQkJ
CXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID09
IDAgJiYKKwkJICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNl
IEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJc3RydWN0IGluNnBj
YiAqaW5wNjsKKworCQlpbnA2ID0gKHN0cnVjdCBpbjZwY2IgKikmaW5wLT5pcF9pbnAuaW5wOwor
CQkvKiBpbnZhbGlkIGlmIHdlIGFyZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KKwkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJICAgIFNDVFBfSVBW
Nl9WNk9OTFkoaW5wNikpCisJCQlyZXR1cm47CisKKwkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47
CisJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkvKiB3ZSBza2lwIHVuc3Bl
Y2lmZWQgYWRkcmVzc2VzICovCisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Muc2Nv
cGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCisJCSAgICBJTjRfSVNQUklWQVRFX0FERFJFU1Mo
JnNpbi0+c2luX2FkZHIpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlm
CisJZGVmYXVsdDoKKwkJLyogZWxzZSwgbm90IEFGX0lORVQgb3IgQUZfSU5FVDYsIHNvIHNraXAg
Ki8KKwkJcmV0dXJuOworCX0KKworCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyZXNz
IGFkZC9kZWxldGUgKi8KKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfRE9fQVNDT05GKSkgeworCQkvKiBkb2VzIHRoZSBwZWVyIGRvIGFzY29uZj8gKi8KKwkJaWYg
KHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCkgeworCQkJLyogcXVldWUgYW4gYXNjb25mIGZv
ciB0aGlzIGFkZHIgKi8KKwkJCXN0YXR1cyA9IHNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNiLCBp
ZmEsIHR5cGUpOworCisJCQkvKgorCQkJICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4g
c3RhdGUsIHNlbmQgb3V0IHRoZQorCQkJICogQVNDT05GLiAgSWYgaW4gdGhlIG5vbi1vcGVuIHN0
YXRlLCB0aGVzZSB3aWxsIGJlCisJCQkgKiBzZW50IHdoZW4gdGhlIHN0YXRlIGdvZXMgb3Blbi4K
KwkJCSAqLworCQkJaWYgKHN0YXR1cyA9PSAwICYmCisJCQkgICAgKChTQ1RQX0dFVF9TVEFURSgm
c3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJICAgICAoU0NUUF9HRVRfU1RB
VEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSkgeworI2lm
ZGVmIFNDVFBfVElNRVJfQkFTRURfQVNDT05GCisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfQVNDT05GLCBpbnAsCisJCQkJICAgIHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9k
ZXN0aW5hdGlvbik7CisjZWxzZQorCQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgTlVMTCwgYWRk
cl9sb2NrZWQpOworI2VuZGlmCisJCQl9CisJCX0KKwl9Cit9CisKKworaW50CitzY3RwX2FzY29u
Zl9pdGVyYXRvcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpwdHIsIHVpbnQzMl90
IHZhbCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsK
KwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbDsKKwlpbnQgY250
X2ludmFsaWQgPSAwOworCisJYXNjID0gKHN0cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciAqKXB0
cjsKKwlMSVNUX0ZPUkVBQ0gobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyKSB7
CisJCWlmYSA9IGwtPmlmYTsKKwkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCS8qIGludmFsaWQgaWYgd2UncmUg
bm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRfVjYpID09IDApIHsKKwkJCQljbnRfaW52YWxpZCsrOworCQkJCWlmIChhc2Mt
PmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCS8qIGludmFsaWQg
aWYgd2UgYXJlIGEgdjYgb25seSBlbmRwb2ludCAqLworCQkJc3RydWN0IGluNnBjYiAqaW5wNjsK
KwkJCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7CisJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkJICAgIFNDVFBf
SVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJCQljbnRfaW52YWxpZCsrOworCQkJCWlmIChhc2MtPmNu
dCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9
CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgYWRkcmVzcyBmYW1pbHkgKi8KKwkJ
CWNudF9pbnZhbGlkKys7CisJCQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCisJCQkJcmV0
dXJuICgxKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzY3RwX2Fz
Y29uZl9pdGVyYXRvcl9lcF9lbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLCB1
aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisJc3Ry
dWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRy
LCAqbmxhZGRyLCAqbDsKKworCS8qIE9ubHkgZm9yIHNwZWNpZmljIGNhc2Ugbm90IGJvdW5kIGFs
bCAqLworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7CisJTElTVF9G
T1JFQUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRkcikgeworCQlpZmEgPSBs
LT5pZmE7CisJCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJTElT
VF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwKKwkJCQkgICAgIHNjdHBfbnh0
X2FkZHIpIHsKKwkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCQkJbGFkZHItPmFjdGlv
biA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJfQorCQl9IGVsc2UgaWYgKGwtPmFjdGlv
biA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwg
JmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIsIG5sYWRkcikgeworCQkJCS8qIHJl
bW92ZSBvbmx5IGFmdGVyIGFsbCBndXlzIGFyZSBkb25lICovCisJCQkJaWYgKGxhZGRyLT5pZmEg
PT0gaWZhKSB7CisJCQkJCXNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoaW5wLCBpZmEpOworCQkJCX0K
KwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX2FzY29uZl9pdGVy
YXRvcl9zdGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KwkJCSAgdm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNj
dHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisJc3RydWN0
IHNjdHBfbGFkZHIgKmw7CisJaW50IGNudF9pbnZhbGlkID0gMDsKKwlpbnQgdHlwZSwgc3RhdHVz
OworCWludCBudW1fcXVldWVkID0gMDsKKworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRl
cmF0b3IgKilwdHI7CisJTElTVF9GT1JFQUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9u
eHRfYWRkcikgeworCQlpZmEgPSBsLT5pZmE7CisJCXR5cGUgPSBsLT5hY3Rpb247CisKKwkJLyog
YWRkcmVzcydzIHZyZl9pZCBtdXN0IGJlIHRoZSB2cmZfaWQgb2YgdGhlIGFzc29jICovCisJCWlm
IChpZmEtPnZyZl9pZCAhPSBzdGNiLT5hc29jLnZyZl9pZCkgeworCQkJY29udGludWU7CisJCX0K
KworCQkvKiBTYW1lIGNoZWNrcyBhZ2FpbiBmb3IgYXNzb2MgKi8KKwkJc3dpdGNoIChpZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJ
eworCQkJLyogaW52YWxpZCBpZiB3ZSdyZSBub3QgYSB2NiBlbmRwb2ludCAqLworCQkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgPT0gMCkgeworCQkJCWNudF9pbnZhbGlkKys7CisJCQkJaWYgKGFz
Yy0+Y250ID09IGNudF9pbnZhbGlkKQorCQkJCQlyZXR1cm47CisJCQkJZWxzZQorCQkJCQljb250
aW51ZTsKKwkJCX0KKwkJCXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNpbjY7CisJCQlpZiAoSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkvKiB3ZSBza2lwIHVu
c3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQkJY29udGludWU7CisJCQl9CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKwkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsK
KwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NB
TCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Nj
b3BlID09IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8qIGlzIGl0IHRoZSByaWdo
dCBsaW5rIGxvY2FsIHNjb3BlPyAqLworCQkJCWlmIChzY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhz
dGNiLCAmaWZhLT5hZGRyZXNzLnNhKSA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ
CX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoK
KwkJeworCQkJLyogaW52YWxpZCBpZiB3ZSBhcmUgYSB2NiBvbmx5IGVuZHBvaW50ICovCisJCQlz
dHJ1Y3QgaW42cGNiICppbnA2OworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCWlu
cDYgPSAoc3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7CisJCQkvKiBpbnZhbGlkIGlm
IHdlIGFyZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnA2
KSkKKwkJCQljb250aW51ZTsKKworCQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47CisJCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBh
ZGRyZXNzZXMgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKKwkJCQljb250aW51
ZTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29w
ZSA9PSAwICYmCisJCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkg
eworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7CisJ
CQkJY250X2ludmFsaWQrKzsKKwkJCQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCisJCQkJ
CXJldHVybjsKKwkJCQllbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0K
KyNlbmRpZgorCQlkZWZhdWx0OgorCQkJLyogaW52YWxpZCBhZGRyZXNzIGZhbWlseSAqLworCQkJ
Y250X2ludmFsaWQrKzsKKwkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQlyZXR1
cm47CisJCQllbHNlCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJfQorCisJCWlmICh0eXBl
ID09IFNDVFBfQUREX0lQX0FERFJFU1MpIHsKKwkJCS8qIHByZXZlbnQgdGhpcyBhZGRyZXNzIGZy
b20gYmVpbmcgdXNlZCBhcyBhIHNvdXJjZSAqLworCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIGlmYSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERS
RVNTKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwg
JnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJc2N0cF9ydGVudHJ5X3QgKnJ0Owor
CisJCQkJLyogZGVsZXRlIHRoaXMgYWRkcmVzcyBpZiBjYWNoZWQgKi8KKwkJCQlpZiAobmV0LT5y
by5fc19hZGRyID09IGlmYSkgeworCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7
CisJCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0
ZWQgPSAwOworCQkJCQlydCA9IG5ldC0+cm8ucm9fcnQ7CisJCQkJCWlmIChydCkgeworCQkJCQkJ
UlRGUkVFKHJ0KTsKKwkJCQkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOworCQkJCQl9CisJCQkJCS8q
CisJCQkJCSAqIE5vdyB3ZSBkZWxldGVkIG91ciBzcmMgYWRkcmVzcywKKwkJCQkJICogc2hvdWxk
IHdlIG5vdCBhbHNvIG5vdyByZXNldCB0aGUKKwkJCQkJICogY3duZC9ydG8gdG8gc3RhcnQgYXMg
aWYgaXRzIGEgbmV3CisJCQkJCSAqIGFkZHJlc3M/CisJCQkJCSAqLworCQkJCQlzdGNiLT5hc29j
LmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7CisJCQkJ
CW5ldC0+UlRPID0gMDsKKworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBf
U0VUX1BSSU1fQUREUikgeworCQkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApIHsKKwkJCQkvKiBtdXN0IHZhbGlkYXRlIHRoZSBp
ZmEgaXMgaW4gdGhlIGVwICovCisJCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChzdGNiLT5zY3Rw
X2VwLCBpZmEpID09IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ
CQkvKiBOZWVkIHRvIGNoZWNrIHNjb3BlcyBmb3IgdGhpcyBndXkgKi8KKwkJCQlpZiAoc2N0cF9p
c19hZGRyZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKKwkJ
CQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3Ig
dGhpcyBhZGRyZXNzIGFkZC9kZWxldGUgKi8KKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikgJiYKKwkJICAgIHN0Y2ItPmFzb2MuYXNjb25mX3N1
cHBvcnRlZCA9PSAxKSB7CisJCQkvKiBxdWV1ZSBhbiBhc2NvbmYgZm9yIHRoaXMgYWRkciAqLwor
CQkJc3RhdHVzID0gc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0Y2IsIGlmYSwgdHlwZSk7CisJCQkv
KgorCQkJICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4gc3RhdGUsIHVwZGF0ZSB0aGUK
KwkJCSAqIGNvdW50IG9mIHF1ZXVlZCBwYXJhbXMuICBJZiBpbiB0aGUgbm9uLW9wZW4gc3RhdGUs
CisJCQkgKiB0aGVzZSBnZXQgc2VudCB3aGVuIHRoZSBhc3NvYyBnb2VzIG9wZW4uCisJCQkgKi8K
KwkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikg
fHwKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpKSB7CisJCQkJaWYgKHN0YXR1cyA+PSAwKSB7CisJCQkJCW51bV9xdWV1
ZWQrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJLyoKKwkgKiBJZiB3ZSBoYXZlIHF1ZXVlZCBw
YXJhbXMgaW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0IGFuIEFTQ09ORi4KKwkgKi8KKwlpZiAo
bnVtX3F1ZXVlZCA+IDApIHsKKwkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBOVUxMLCBTQ1RQX0FE
RFJfTk9UX0xPQ0tFRCk7CisJfQorfQorCit2b2lkCitzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQo
dm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBfYXNj
b25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisJc3RydWN0IHNjdHBf
bGFkZHIgKmwsICpubDsKKworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilw
dHI7CisJTElTVF9GT1JFQUNIX1NBRkUobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9h
ZGRyLCBubCkgeworCQlpZmEgPSBsLT5pZmE7CisJCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERf
SVBfQUREUkVTUykgeworCQkJLyogQ2xlYXIgdGhlIGRlZmVyIHVzZSBmbGFnICovCisJCQlpZmEt
PmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOworCQl9CisJCXNjdHBfZnJl
ZV9pZmEoaWZhKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFk
ZHIpLCBsKTsKKwkJU0NUUF9ERUNSX0xBRERSX0NPVU5UKCk7CisJfQorCVNDVFBfRlJFRShhc2Ms
IFNDVFBfTV9BU0NfSVQpOworfQorCisvKgorICogc2EgaXMgdGhlIHNvY2thZGRyIHRvIGFzayB0
aGUgcGVlciB0byBzZXQgcHJpbWFyeSB0by4KKyAqIHJldHVybnM6IDAgPSBjb21wbGV0ZWQsIC0x
ID0gZXJyb3IKKyAqLworaW50MzJfdAorc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKwl1aW50MzJfdCB2
cmZfaWQ7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisKKwkvKiBmaW5kIHRoZSBpZmEgZm9yIHRo
ZSBkZXNpcmVkIHNldCBwcmltYXJ5ICovCisJdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7CisJ
aWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCB2cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9D
S0VEKTsKKwlpZiAoaWZhID09IE5VTEwpIHsKKwkJLyogSW52YWxpZCBhZGRyZXNzICovCisJCXJl
dHVybiAoLTEpOworCX0KKworCS8qIHF1ZXVlIGFuIEFTQ09ORjpTRVRfUFJJTV9BRERSIHRvIGJl
IHNlbnQgKi8KKwlpZiAoIXNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsIFNDVFBfU0VU
X1BSSU1fQUREUikpIHsKKwkJLyogc2V0IHByaW1hcnkgcXVldWluZyBzdWNjZWVkZWQgKi8KKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkic2V0X3ByaW1hcnlfaXBfYWRkcmVzc19z
YTogcXVldWVkIG9uIHRjYj0lcCwgIiwKKwkJCSh2b2lkICopc3RjYik7CisJCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+
YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNi
LT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgeworI2lmZGVmIFNDVFBf
VElNRVJfQkFTRURfQVNDT05GCisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9B
U0NPTkYsCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uKTsKKyNlbHNlCisJCQlzY3RwX3NlbmRfYXNjb25mKHN0Y2IsIE5VTEws
IFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKyNlbmRpZgorCQl9CisJfSBlbHNlIHsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJzZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhOiBmYWlsZWQg
dG8gYWRkIHRvIHF1ZXVlIG9uIHRjYj0lcCwgIiwKKwkJCSh2b2lkICopc3RjYik7CisJCVNDVFBE
QkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJl
dHVybiAoMCk7Cit9CisKK2ludAorc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhKQoreworCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNoaywgKm5jaGs7CisJdW5zaWduZWQgaW50IG9mZnNldCwgYXNjb25mX2xpbWl0Owor
CXN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqYWNwOworCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJh
bWhkciAqYXBoOworCXVpbnQ4X3QgYXBhcmFtX2J1ZltTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsK
KwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJaW50IGFkZF9jbnQsIGRlbF9jbnQ7CisJdWlu
dDE2X3QgbGFzdF9wYXJhbV90eXBlOworCisJYWRkX2NudCA9IGRlbF9jbnQgPSAwOworCWxhc3Rf
cGFyYW1fdHlwZSA9IDA7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJnN0Y2ItPmFzb2MuYXNj
b25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBO
byBtYnVmIGRhdGE/XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW9mZnNldCA9IDA7CisJCWFj
cCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKik7CisJCW9mZnNl
dCArPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKTsKKwkJYXNjb25mX2xpbWl0ID0g
bnRvaHMoYWNwLT5jaC5jaHVua19sZW5ndGgpOworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKXNjdHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciksIGFwYXJhbV9idWYpOworCQlpZiAocGggPT0gTlVMTCkgeworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IGNvdWxkbid0IGdldCBsb29rdXAg
YWRkciFcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJb2Zmc2V0ICs9IG50b2hzKHBoLT5wYXJh
bV9sZW5ndGgpOworCisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3Rw
X21fZ2V0cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyKSwgYXBhcmFtX2J1Zik7CisJCWlmIChhcGggPT0gTlVMTCkgeworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IEVtcHR5IEFTQ09ORiB3aWxsIGJl
IHNlbnQ/XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXdoaWxlIChhcGggIT0gTlVMTCkgewor
CQkJdW5zaWduZWQgaW50IHBhcmFtX2xlbmd0aCwgcGFyYW1fdHlwZTsKKworCQkJcGFyYW1fdHlw
ZSA9IG50b2hzKGFwaC0+cGgucGFyYW1fdHlwZSk7CisJCQlwYXJhbV9sZW5ndGggPSBudG9ocyhh
cGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCQlpZiAob2Zmc2V0ICsgcGFyYW1fbGVuZ3RoID4gYXNj
b25mX2xpbWl0KSB7CisJCQkJLyogcGFyYW1ldGVyIGdvZXMgYmV5b25kIGVuZCBvZiBjaHVuayEg
Ki8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwYXJhbV9sZW5ndGggPiBzaXplb2YoYXBhcmFt
X2J1ZikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImlzX2FkZHJfcGVuZGlu
ZzogcGFyYW0gbGVuZ3RoICgldSkgbGFyZ2VyIHRoYW4gYnVmZmVyIHNpemUhXG4iLCBwYXJhbV9s
ZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHBhcmFtX2xlbmd0aCA8PSBzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
ICJpc19hZGRyX3BlbmRpbmc6IHBhcmFtIGxlbmd0aCgldSkgdG9vIHNob3J0XG4iLCBwYXJhbV9s
ZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihjaGstPmRhdGEsIG9mZnNldCwgcGFyYW1fbGVuZ3Ro
LCBhcGFyYW1fYnVmKTsKKwkJCWlmIChhcGggPT0gTlVMTCkgeworCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBjb3VsZG4ndCBnZXQgZW50aXJlIHBhcmFt
XG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KikoYXBoICsgMSk7CisJCQlpZiAoc2N0cF9hZGRyX21hdGNoKHBoLCAmc2N0cF9pZmEtPmFkZHJl
c3Muc2EpICE9IDApIHsKKwkJCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKwkJCQljYXNlIFNDVFBf
QUREX0lQX0FERFJFU1M6CisJCQkJCWFkZF9jbnQrKzsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBT
Q1RQX0RFTF9JUF9BRERSRVNTOgorCQkJCQlkZWxfY250Kys7CisJCQkJCWJyZWFrOworCQkJCWRl
ZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlsYXN0X3BhcmFtX3R5cGUgPSBwYXJhbV90
eXBlOworCQkJfQorCisJCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGFyYW1fbGVuZ3RoKTsKKwkJ
CWlmIChvZmZzZXQgPj0gYXNjb25mX2xpbWl0KSB7CisJCQkJLyogbm8gbW9yZSBkYXRhIGluIHRo
ZSBtYnVmIGNoYWluICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBnZXQgcG9pbnRlciB0byBu
ZXh0IGFzY29uZiBwYXJhbSAqLworCQkJYXBoID0gKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhk
ciAqKXNjdHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c2NvbmZfcGFyYW1oZHIpLCBhcGFyYW1fYnVmKTsKKwkJfQorCX0KKworCS8qIHdlIHdhbnQgdG8g
ZmluZCB0aGUgc2VxdWVuY2VzIHdoaWNoIGNvbnNpc3Qgb2YgQUREIC0+IERFTCAtPiBBREQgb3Ig
REVMIC0+IEFERCAqLworCWlmIChhZGRfY250ID4gZGVsX2NudCB8fAorCSAgICAoYWRkX2NudCA9
PSBkZWxfY250ICYmIGxhc3RfcGFyYW1fdHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSkgewor
CQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgc3RydWN0IHNvY2th
ZGRyICoKK3NjdHBfZmluZF92YWxpZF9sb2NhbGFkZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBp
bnQgYWRkcl9sb2NrZWQpCit7CisJc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCXN0cnVj
dCBzY3RwX2lmbiAqc2N0cF9pZm47CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKworCWlm
IChhZGRyX2xvY2tlZCA9PSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCkKKwkJU0NUUF9JUElfQUREUl9S
TE9DSygpOworCXZyZiA9IHNjdHBfZmluZF92cmYoc3RjYi0+YXNvYy52cmZfaWQpOworCWlmICh2
cmYgPT0gTlVMTCkgeworCQlpZiAoYWRkcl9sb2NrZWQgPT0gU0NUUF9BRERSX05PVF9MT0NLRUQp
CisJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJTElT
VF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQlpZiAoc3Rj
Yi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSA9PSAwICYmCisJCSAgICBTQ1RQX0lGTl9JU19J
RlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIFNraXAgaWYgbG9vcGJhY2tfc2NvcGUgbm90IHNl
dCAqLworCQkJY29udGludWU7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9p
Zm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlpZiAoc3Rj
Yi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47CisKKwkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJaWYgKHNp
bi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCQkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRy
ZXNzZXMgKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5p
bnBfY3JlZCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDAp
IHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJaWYgKHN0Y2ItPmFzb2Mu
c2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJTjRfSVNQUklWQVRFX0FE
RFJFU1MoJnNpbi0+c2luX2FkZHIpKQorCQkJCQkJY29udGludWU7CisKKwkJCQkJaWYgKHNjdHBf
aXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJCQkgICAgKCFzY3RwX2lz
X2FkZHJfcGVuZGluZyhzdGNiLCBzY3RwX2lmYSkpKQorCQkJCQkJY29udGludWU7CisJCQkJCS8q
IGZvdW5kIGEgdmFsaWQgbG9jYWwgdjQgYWRkcmVzcyB0byB1c2UgKi8KKwkJCQkJaWYgKGFkZHJf
bG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQorCQkJCQkJU0NUUF9JUElfQUREUl9SVU5M
T0NLKCk7CisJCQkJCXJldHVybiAoJnNjdHBfaWZhLT5hZGRyZXNzLnNhKTsKKwkJCQl9CisJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlpZiAo
c3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKworCQkJCQlpZiAoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9B
RERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisKKwkJCQkJc2lu
NiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42OworCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVD
SUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBh
ZGRyZXNzZXMgKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlu
cC5pbnBfY3JlZCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikg
IT0gMCkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlpZiAoc3RjYi0+
YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJTjZfSVNfQUREUl9MSU5L
TE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQljb250aW51ZTsKKwkJCQkJaWYgKHN0Y2It
PmFzb2Muc2NvcGUuc2l0ZV9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJTjZfSVNfQUREUl9TSVRF
TE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQljb250aW51ZTsKKworCQkJCQlpZiAoc2N0
cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpICYmCisJCQkJCSAgICAoIXNjdHBf
aXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNjdHBfaWZhKSkpCisJCQkJCQljb250aW51ZTsKKwkJCQkJ
LyogZm91bmQgYSB2YWxpZCBsb2NhbCB2NiBhZGRyZXNzIHRvIHVzZSAqLworCQkJCQlpZiAoYWRk
cl9sb2NrZWQgPT0gU0NUUF9BRERSX05PVF9MT0NLRUQpCisJCQkJCQlTQ1RQX0lQSV9BRERSX1JV
TkxPQ0soKTsKKwkJCQkJcmV0dXJuICgmc2N0cF9pZmEtPmFkZHJlc3Muc2EpOworCQkJCX0KKwkJ
CQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0K
KwkvKiBubyB2YWxpZCBhZGRyZXNzZXMgZm91bmQgKi8KKwlpZiAoYWRkcl9sb2NrZWQgPT0gU0NU
UF9BRERSX05PVF9MT0NLRUQpCisJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJldHVybiAo
TlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHIgKgorc2N0cF9maW5kX3ZhbGlkX2xv
Y2FsYWRkcl9lcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbGFkZHIg
KmxhZGRyOworCisJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRy
X2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJ
Y29udGludWU7CisJCX0KKwkJLyogaXMgdGhlIGFkZHJlc3MgcmVzdHJpY3RlZCA/ICovCisJCWlm
IChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSAmJgorCQkgICAgKCFz
Y3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpCisJCQljb250aW51ZTsKKwor
CQkvKiBmb3VuZCBhIHZhbGlkIGxvY2FsIGFkZHJlc3MgdG8gdXNlICovCisJCXJldHVybiAoJmxh
ZGRyLT5pZmEtPmFkZHJlc3Muc2EpOworCX0KKwkvKiBubyB2YWxpZCBhZGRyZXNzZXMgZm91bmQg
Ki8KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogYnVpbGRzIGFuIEFTQ09ORiBjaHVuayBm
cm9tIHF1ZXVlZCBBU0NPTkYgcGFyYW1zLgorICogcmV0dXJucyBOVUxMIG9uIGVycm9yIChubyBt
YnVmLCBubyBBU0NPTkYgcGFyYW1zIHF1ZXVlZCwgZXRjKS4KKyAqLworc3RydWN0IG1idWYgKgor
c2N0cF9jb21wb3NlX2FzY29uZihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCAqcmV0bGVuLCBp
bnQgYWRkcl9sb2NrZWQpCit7CisJc3RydWN0IG1idWYgKm1fYXNjb25mLCAqbV9hc2NvbmZfY2hr
OworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYTsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1
bmsgKmFjcDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKKwlzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWRkcl9wYXJhbSAqYWFwOworCXVpbnQzMl90IHBfbGVuZ3RoOworCXVpbnQzMl90
IGNvcnJlbGF0aW9uX2lkID0gMTsJLyogMCBpcyByZXNlcnZlZC4uLiAqLworCWNhZGRyX3QgcHRy
LCBsb29rdXBfcHRyOworCXVpbnQ4X3QgbG9va3VwX3VzZWQgPSAwOworCisJLyogYXJlIHRoZXJl
IGFueSBhc2NvbmYgcGFyYW1zIHRvIHNlbmQ/ICovCisJVEFJTFFfRk9SRUFDSChhYSwgJnN0Y2It
PmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0KSB7CisJCWlmIChhYS0+c2VudCA9PSAwKQorCQkJYnJl
YWs7CisJfQorCWlmIChhYSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJLyoKKwkgKiBn
ZXQgYSBjaHVuayBoZWFkZXIgbWJ1ZiBhbmQgYSBjbHVzdGVyIGZvciB0aGUgYXNjb25mIHBhcmFt
cyBzaW5jZQorCSAqIGl0J3Mgc2ltcGxlciB0byBmaWxsIGluIHRoZSBhc2NvbmYgY2h1bmsgaGVh
ZGVyIGxvb2t1cCBhZGRyZXNzIG9uCisJICogdGhlIGZseQorCSAqLworCW1fYXNjb25mX2NoayA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSwg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX2FzY29uZl9jaGsgPT0gTlVMTCkgewor
CQkvKiBubyBtYnVmJ3MgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiY29t
cG9zZV9hc2NvbmY6IGNvdWxkbid0IGdldCBjaHVuayBtYnVmIVxuIik7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCW1fYXNjb25mID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBN
X05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fYXNjb25mID09IE5VTEwpIHsKKwkJLyogbm8g
bWJ1ZidzICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJImNvbXBvc2VfYXNj
b25mOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOworCQlzY3RwX21fZnJlZW0obV9hc2NvbmZfY2hr
KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJU0NUUF9CVUZfTEVOKG1fYXNjb25mX2NoaykgPSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKTsKKwlTQ1RQX0JVRl9MRU4obV9hc2NvbmYp
ID0gMDsKKwlhY3AgPSBtdG9kKG1fYXNjb25mX2Noaywgc3RydWN0IHNjdHBfYXNjb25mX2NodW5r
ICopOworCW1lbXNldChhY3AsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmspKTsK
KwkvKiBzYXZlIHBvaW50ZXJzIHRvIGxvb2t1cCBhZGRyZXNzIGFuZCBhc2NvbmYgcGFyYW1zICov
CisJbG9va3VwX3B0ciA9IChjYWRkcl90KShhY3AgKyAxKTsJLyogYWZ0ZXIgdGhlIGhlYWRlciAq
LworCXB0ciA9IG10b2QobV9hc2NvbmYsIGNhZGRyX3QpOwkvKiBiZWdpbm5pbmcgb2YgY2x1c3Rl
ciAqLworCisJLyogZmlsbCBpbiBjaHVuayBoZWFkZXIgaW5mbyAqLworCWFjcC0+Y2guY2h1bmtf
dHlwZSA9IFNDVFBfQVNDT05GOworCWFjcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWFjcC0+c2Vy
aWFsX251bWJlciA9IGh0b25sKHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQpOworCXN0Y2ItPmFz
b2MuYXNjb25mX3NlcV9vdXQrKzsKKworCS8qIGFkZCBwYXJhbWV0ZXJzLi4uIHVwIHRvIHNtYWxs
ZXN0IE1UVSBhbGxvd2VkICovCisJVEFJTFFfRk9SRUFDSChhYSwgJnN0Y2ItPmFzb2MuYXNjb25m
X3F1ZXVlLCBuZXh0KSB7CisJCWlmIChhYS0+c2VudCkKKwkJCWNvbnRpbnVlOworCQkvKiBnZXQg
dGhlIHBhcmFtZXRlciBsZW5ndGggKi8KKwkJcF9sZW5ndGggPSBTQ1RQX1NJWkUzMihhYS0+YXAu
YXBoLnBoLnBhcmFtX2xlbmd0aCk7CisJCS8qIHdpbGwgaXQgZml0IGluIGN1cnJlbnQgY2h1bms/
ICovCisJCWlmICgoU0NUUF9CVUZfTEVOKG1fYXNjb25mKSArIHBfbGVuZ3RoID4gc3RjYi0+YXNv
Yy5zbWFsbGVzdF9tdHUpIHx8CisJCSAgICAoU0NUUF9CVUZfTEVOKG1fYXNjb25mKSArIHBfbGVu
Z3RoID4gTUNMQllURVMpKSB7CisJCQkvKiB3b24ndCBmaXQsIHNvIHdlJ3JlIGRvbmUgd2l0aCB0
aGlzIGNodW5rICovCisJCQlicmVhazsKKwkJfQorCQkvKiBhc3NpZ24gKGFuZCBzdG9yZSkgYSBj
b3JyZWxhdGlvbiBpZCAqLworCQlhYS0+YXAuYXBoLmNvcnJlbGF0aW9uX2lkID0gY29ycmVsYXRp
b25faWQrKzsKKworCQkvKgorCQkgKiBmaWxsIGluIGFkZHJlc3MgaWYgd2UncmUgZG9pbmcgYSBk
ZWxldGUgdGhpcyBpcyBhIHNpbXBsZQorCQkgKiB3YXkgZm9yIHVzIHRvIGZpbGwgaW4gdGhlIGNv
cnJlbGF0aW9uIGFkZHJlc3MsIHdoaWNoCisJCSAqIHNob3VsZCBvbmx5IGJlIHVzZWQgYnkgdGhl
IHBlZXIgaWYgd2UncmUgZGVsZXRpbmcgb3VyCisJCSAqIHNvdXJjZSBhZGRyZXNzIGFuZCBhZGRp
bmcgYSBuZXcgYWRkcmVzcyAoZS5nLiByZW51bWJlcmluZworCQkgKiBjYXNlKQorCQkgKi8KKwkJ
aWYgKGxvb2t1cF91c2VkID09IDAgJiYKKwkJICAgIChhYS0+c3BlY2lhbF9kZWwgPT0gMCkgJiYK
KwkJICAgIGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7
CisJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqbG9va3VwOworCQkJdWludDE2X3QgcF9z
aXplLCBhZGRyX3NpemU7CisKKwkJCWxvb2t1cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSAqKWxvb2t1cF9wdHI7CisJCQlsb29rdXAtPnBoLnBhcmFtX3R5cGUgPQorCQkJICAgIGh0b25z
KGFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlKTsKKwkJCWlmIChhYS0+YXAuYWRkcnAucGgucGFy
YW1fdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgeworCQkJCS8qIGNvcHkgSVB2NiBhZGRyZXNz
ICovCisJCQkJcF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJ
CQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKwkJCX0gZWxzZSB7CisJCQkJ
LyogY29weSBJUHY0IGFkZHJlc3MgKi8KKwkJCQlwX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
aXB2NGFkZHJfcGFyYW0pOworCQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7
CisJCQl9CisJCQlsb29rdXAtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKFNDVFBfU0laRTMyKHBf
c2l6ZSkpOworCQkJbWVtY3B5KGxvb2t1cC0+YWRkciwgJmFhLT5hcC5hZGRycC5hZGRyLCBhZGRy
X3NpemUpOworCQkJU0NUUF9CVUZfTEVOKG1fYXNjb25mX2NoaykgKz0gU0NUUF9TSVpFMzIocF9z
aXplKTsKKwkJCWxvb2t1cF91c2VkID0gMTsKKwkJfQorCQkvKiBjb3B5IGludG8gY3VycmVudCBz
cGFjZSAqLworCQltZW1jcHkocHRyLCAmYWEtPmFwLCBwX2xlbmd0aCk7CisKKwkJLyogbmV0d29y
ayBlbGVtZW50cyBhbmQgdXBkYXRlIGxlbmd0aHMgKi8KKwkJYXBoID0gKHN0cnVjdCBzY3RwX2Fz
Y29uZl9wYXJhbWhkciAqKXB0cjsKKwkJYWFwID0gKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3Bh
cmFtICopcHRyOworCQkvKiBjb3JyZWxhdGlvbl9pZCBpcyB0cmFuc3BhcmVudCB0byBwZWVyLCBu
byBodG9ubCBuZWVkZWQgKi8KKwkJYXBoLT5waC5wYXJhbV90eXBlID0gaHRvbnMoYXBoLT5waC5w
YXJhbV90eXBlKTsKKwkJYXBoLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhhcGgtPnBoLnBhcmFt
X2xlbmd0aCk7CisJCWFhcC0+YWRkcnAucGgucGFyYW1fdHlwZSA9IGh0b25zKGFhcC0+YWRkcnAu
cGgucGFyYW1fdHlwZSk7CisJCWFhcC0+YWRkcnAucGgucGFyYW1fbGVuZ3RoID0gaHRvbnMoYWFw
LT5hZGRycC5waC5wYXJhbV9sZW5ndGgpOworCisJCVNDVFBfQlVGX0xFTihtX2FzY29uZikgKz0g
U0NUUF9TSVpFMzIocF9sZW5ndGgpOworCQlwdHIgKz0gU0NUUF9TSVpFMzIocF9sZW5ndGgpOwor
CisJCS8qCisJCSAqIHRoZXNlIHBhcmFtcyBhcmUgcmVtb3ZlZCBvZmYgdGhlIHBlbmRpbmcgbGlz
dCB1cG9uCisJCSAqIGdldHRpbmcgYW4gQVNDT05GLUFDSyBiYWNrIGZyb20gdGhlIHBlZXIsIGp1
c3Qgc2V0IGZsYWcKKwkJICovCisJCWFhLT5zZW50ID0gMTsKKwl9CisJLyogY2hlY2sgdG8gc2Vl
IGlmIHRoZSBsb29rdXAgYWRkciBoYXMgYmVlbiBwb3B1bGF0ZWQgeWV0ICovCisJaWYgKGxvb2t1
cF91c2VkID09IDApIHsKKwkJLyogTk9URTogaWYgdGhlIGFkZHJlc3MgcGFyYW0gaXMgb3B0aW9u
YWwsIGNhbiBza2lwIHRoaXMuLi4gKi8KKwkJLyogYWRkIGFueSB2YWxpZCAoZXhpc3RpbmcpIGFk
ZHJlc3MuLi4gKi8KKwkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKmxvb2t1cDsKKwkJdWlu
dDE2X3QgcF9zaXplLCBhZGRyX3NpemU7CisJCXN0cnVjdCBzb2NrYWRkciAqZm91bmRfYWRkcjsK
KwkJY2FkZHJfdCBhZGRyX3B0cjsKKworCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKQorCQkJZm91bmRfYWRkciA9IHNjdHBfZmluZF92YWxp
ZF9sb2NhbGFkZHIoc3RjYiwKKwkJCQkJCQkgICAgICAgYWRkcl9sb2NrZWQpOworCQllbHNlCisJ
CQlmb3VuZF9hZGRyID0gc2N0cF9maW5kX3ZhbGlkX2xvY2FsYWRkcl9lcChzdGNiKTsKKworCQls
b29rdXAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilsb29rdXBfcHRyOworCQlpZiAo
Zm91bmRfYWRkciAhPSBOVUxMKSB7CisJCQlzd2l0Y2ggKGZvdW5kX2FkZHItPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCS8qIGNvcHkgSVB2NiBhZGRy
ZXNzICovCisJCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0KKwkJCQkgICAgaHRvbnMoU0NUUF9J
UFY2X0FERFJFU1MpOworCQkJCXBfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSk7CisJCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisJCQkJYWRk
cl9wdHIgPSAoY2FkZHJfdCkmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJICAgIGZvdW5k
X2FkZHIpLT5zaW42X2FkZHI7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCQlj
YXNlIEFGX0lORVQ6CisJCQkJLyogY29weSBJUHY0IGFkZHJlc3MgKi8KKwkJCQlsb29rdXAtPnBo
LnBhcmFtX3R5cGUgPQorCQkJCSAgICBodG9ucyhTQ1RQX0lQVjRfQUREUkVTUyk7CisJCQkJcF9z
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJCQlhZGRyX3NpemUg
PSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworCQkJCWFkZHJfcHRyID0gKGNhZGRyX3QpJigoc3Ry
dWN0IHNvY2thZGRyX2luICopCisJCQkJICAgIGZvdW5kX2FkZHIpLT5zaW5fYWRkcjsKKwkJCQli
cmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlwX3NpemUgPSAwOworCQkJCWFkZHJfc2l6
ZSA9IDA7CisJCQkJYWRkcl9wdHIgPSBOVUxMOworCQkJCWJyZWFrOworCQkJfQorCQkJbG9va3Vw
LT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihwX3NpemUpKTsKKwkJCW1lbWNw
eShsb29rdXAtPmFkZHIsIGFkZHJfcHRyLCBhZGRyX3NpemUpOworCQkJU0NUUF9CVUZfTEVOKG1f
YXNjb25mX2NoaykgKz0gU0NUUF9TSVpFMzIocF9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCS8qIHVo
IG9oLi4uIGRvbid0IGhhdmUgYW55IGFkZHJlc3M/PyAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsCisJCQkJImNvbXBvc2VfYXNjb25mOiBubyBsb29rdXAgYWRkciFcbiIpOworCQkJ
LyogWFhYIGZvciBub3csIHdlIHNlbmQgYSBJUHY0IGFkZHJlc3Mgb2YgMC4wLjAuMCAqLworCQkJ
bG9va3VwLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9JUFY0X0FERFJFU1MpOworCQkJbG9v
a3VwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihzaXplb2Yoc3RydWN0IHNj
dHBfaXB2NGFkZHJfcGFyYW0pKSk7CisJCQltZW1zZXQobG9va3VwLT5hZGRyLCAwLCBzaXplb2Yo
c3RydWN0IGluX2FkZHIpKTsKKwkJCVNDVFBfQlVGX0xFTihtX2FzY29uZl9jaGspICs9IFNDVFBf
U0laRTMyKHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpOworCQl9CisJfQorCS8q
IGNoYWluIGl0IGFsbCB0b2dldGhlciAqLworCVNDVFBfQlVGX05FWFQobV9hc2NvbmZfY2hrKSA9
IG1fYXNjb25mOworCSpyZXRsZW4gPSBTQ1RQX0JVRl9MRU4obV9hc2NvbmZfY2hrKSArIFNDVFBf
QlVGX0xFTihtX2FzY29uZik7CisJYWNwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucygqcmV0bGVu
KTsKKworCXJldHVybiAobV9hc2NvbmZfY2hrKTsKK30KKworLyoKKyAqIHNlY3Rpb24gdG8gaGFu
ZGxlIGFkZHJlc3MgY2hhbmdlcyBiZWZvcmUgYW4gYXNzb2NpYXRpb24gaXMgdXAgZWcuIGNoYW5n
ZXMKKyAqIGR1cmluZyBJTklUL0lOSVQtQUNLL0NPT0tJRS1FQ0hPIGhhbmRzaGFrZQorICovCisK
Ky8qCisgKiBwcm9jZXNzZXMgdGhlIChsb2NhbCkgYWRkcmVzc2VzIGluIHRoZSBJTklULUFDSyBj
aHVuaworICovCitzdGF0aWMgdm9pZAorc2N0cF9wcm9jZXNzX2luaXRhY2tfYWRkcmVzc2VzKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCisgICAgdW5zaWduZWQgaW50IG9m
ZnNldCwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB0bXBf
cGFyYW0sICpwaDsKKwl1aW50MTZfdCBwbGVuLCBwdHlwZTsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhOworCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOworI2lmZGVmIElORVQ2CisJc3Ry
dWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gYWRkcjZfc3RvcmU7CisjZW5kaWYKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gYWRkcjRfc3RvcmU7CisjZW5kaWYKKworCVND
VFBEQkcoU0NUUF9ERUJVR19BU0NPTkYyLCAicHJvY2Vzc2luZyBpbml0LWFjayBhZGRyZXNzZXNc
biIpOworCWlmIChzdGNiID09IE5VTEwpIC8qIFVuLW5lZWRlZCBjaGVjayBmb3IgU0EgKi8KKwkJ
cmV0dXJuOworCisJLyogY29udmVydCB0byB1cHBlciBib3VuZCAqLworCWxlbmd0aCArPSBvZmZz
ZXQ7CisKKwlpZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVu
Z3RoKSB7CisJCXJldHVybjsKKwl9CisJLyogZ28gdGhyb3VnaCB0aGUgYWRkcmVzc2VzIGluIHRo
ZSBpbml0LWFjayAqLworCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopCisJICAgICBzY3Rw
X21fZ2V0cHRyKG0sIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwKKwkgICAg
ICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKKwl3aGlsZSAocGggIT0gTlVM
TCkgeworCQlwdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBo
LT5wYXJhbV9sZW5ndGgpOworCQlzd2l0Y2ggKHB0eXBlKSB7CisjaWZkZWYgSU5FVDYKKwkJY2Fz
ZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJeworCQkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0g
KmE2cDsKKworCQkJLyogZ2V0IHRoZSBlbnRpcmUgSVB2NiBhZGRyZXNzIHBhcmFtICovCisJCQlh
NnAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKikKKwkJCSAgICBzY3RwX21fZ2V0cHRy
KG0sIG9mZnNldCwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pLAor
CQkJICAgICh1aW50OF90ICopJmFkZHI2X3N0b3JlKTsKKwkJCWlmIChwbGVuICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkgfHwKKwkJCSAgICBhNnAgPT0gTlVMTCkgeworCQkJ
CXJldHVybjsKKwkJCX0KKwkJCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZih1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSkpOworCQkJc3RvcmUuc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVm
IEhBVkVfU0lONl9MRU4KKwkJCXN0b3JlLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7CisjZW5kaWYKKwkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gc3RjYi0+cnBv
cnQ7CisJCQltZW1jcHkoJnN0b3JlLnNpbjYuc2luNl9hZGRyLCBhNnAtPmFkZHIsIHNpemVvZihz
dHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJ
CWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJCXsKKwkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3Bh
cmFtICphNHA7CisKKwkJCS8qIGdldCB0aGUgZW50aXJlIElQdjQgYWRkcmVzcyBwYXJhbSAqLwor
CQkJYTRwID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopc2N0cF9tX2dldHB0cihtLCBv
ZmZzZXQsCisJCQkJCQkJCQkgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSksCisJ
CQkJCQkJCQkgICh1aW50OF90ICopJmFkZHI0X3N0b3JlKTsKKwkJCWlmIChwbGVuICE9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkgfHwKKwkJCSAgICBhNHAgPT0gTlVMTCkgewor
CQkJCXJldHVybjsKKwkJCX0KKwkJCW1lbXNldCgmc3RvcmUsIDAsIHNpemVvZih1bmlvbiBzY3Rw
X3NvY2tzdG9yZSkpOworCQkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVm
IEhBVkVfU0lOX0xFTgorCQkJc3RvcmUuc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKKyNlbmRpZgorCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJ
CQlzdG9yZS5zaW4uc2luX2FkZHIuc19hZGRyID0gYTRwLT5hZGRyOworCQkJYnJlYWs7CisJCX0K
KyNlbmRpZgorCQlkZWZhdWx0OgorCQkJZ290byBuZXh0X2FkZHI7CisJCX0KKworCQkvKiBzZWUg
aWYgdGhpcyBhZGRyZXNzIHJlYWxseSAoc3RpbGwpIGV4aXN0cyAqLworCQlzY3RwX2lmYSA9IHNj
dHBfZmluZF9pZmFfYnlfYWRkcigmc3RvcmUuc2EsIHN0Y2ItPmFzb2MudnJmX2lkLAorCQkJCQkJ
IFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwkJaWYgKHNjdHBfaWZhID09IE5VTEwpIHsKKwkJCS8q
IGFkZHJlc3MgZG9lc24ndCBleGlzdCBhbnltb3JlICovCisJCQlpbnQgc3RhdHVzOworCisJCQkv
KiBhcmUgQVNDT05GcyBhbGxvd2VkID8gKi8KKwkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKHN0
Y2ItPnNjdHBfZXAsCisJCQkgICAgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgJiYKKwkJCSAg
ICBzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQpIHsKKwkJCQkvKiBxdWV1ZSBhbiBBU0NPTkYg
REVMX0lQX0FERFJFU1MgKi8KKwkJCQlzdGF0dXMgPSBzY3RwX2FzY29uZl9xdWV1ZV9zYV9kZWxl
dGUoc3RjYiwgJnN0b3JlLnNhKTsKKwkJCQkvKgorCQkJCSAqIGlmIHF1ZXVlZCBvaywgYW5kIGlu
IGNvcnJlY3Qgc3RhdGUsIHNlbmQKKwkJCQkgKiBvdXQgdGhlIEFTQ09ORi4KKwkJCQkgKi8KKwkJ
CQlpZiAoc3RhdHVzID09IDAgJiYKKwkJCQkgICAgU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2Mp
ID09CisJCQkJICAgIFNDVFBfU1RBVEVfT1BFTikgeworI2lmZGVmIFNDVFBfVElNRVJfQkFTRURf
QVNDT05GCisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwKKwkJ
CQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uKTsKKyNlbHNlCisJCQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgTlVMTCwgU0NU
UF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisKK25leHRfYWRk
cjoKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrOiAgTWFrZSBzdXJlIHRoZSBsZW5ndGggaXNuJ3Qg
MCwgb3RoZXJ3aXNlCisJCSAqIHdlJ2xsIGJlIHN0dWNrIGluIHRoaXMgbG9vcCBmb3IgYSBsb25n
IHRpbWUuLi4KKwkJICovCisJCWlmIChTQ1RQX1NJWkUzMihwbGVuKSA9PSAwKSB7CisJCQlTQ1RQ
X1BSSU5URigicHJvY2Vzc19pbml0YWNrX2FkZHJzOiBiYWQgbGVuICglZCkgdHlwZT0leGhcbiIs
CisJCQkJICAgIHBsZW4sIHB0eXBlKTsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBnZXQgbmV4dCBw
YXJhbWV0ZXIgKi8KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4pOworCQlpZiAoKG9mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVuZ3RoKQorCQkJcmV0dXJuOwor
CQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAor
CQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4X3QgKikmdG1wX3BhcmFt
KTsKKwl9IC8qIHdoaWxlICovCit9CisKKy8qIEZJWCBNRTogbmVlZCB0byB2ZXJpZnkgcmV0dXJu
IHJlc3VsdCBmb3IgdjYgYWRkcmVzcyB0eXBlIGlmIHY2IGRpc2FibGVkICovCisvKgorICogY2hl
Y2tzIHRvIHNlZSBpZiBhIHNwZWNpZmljIGFkZHJlc3MgaXMgaW4gdGhlIGluaXRhY2sgYWRkcmVz
cyBsaXN0IHJldHVybnMKKyAqIDEgaWYgZm91bmQsIDAgaWYgbm90CisgKi8KK3N0YXRpYyB1aW50
MzJfdAorc2N0cF9hZGRyX2luX2luaXRhY2soc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG9mZnNl
dCwgdWludDMyX3QgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCXN0cnVjdCBzY3Rw
X3BhcmFtaGRyIHRtcF9wYXJhbSwgKnBoOworCXVpbnQxNl90IHBsZW4sIHB0eXBlOworI2lmZGVm
IElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSAqYTRwOworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI0X3N0b3JlOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtICphNnA7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gYWRk
cjZfc3RvcmU7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCXN0cnVjdCBzb2NrYWRk
cl9pbjYgc2luNl90bXA7CisjZW5kaWYKKyNlbmRpZgorCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJ
cmV0dXJuICgwKTsKKwl9CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgImZpbmRfaW5p
dGFja19hZGRyOiBzdGFydGluZyBzZWFyY2ggZm9yICIpOworCVNDVFBEQkdfQUREUihTQ1RQX0RF
QlVHX0FTQ09ORjIsIHNhKTsKKwkvKiBjb252ZXJ0IHRvIHVwcGVyIGJvdW5kICovCisJbGVuZ3Ro
ICs9IG9mZnNldDsKKworCWlmICgob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRy
KSkgPiBsZW5ndGgpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkiZmluZF9p
bml0YWNrX2FkZHI6IGludmFsaWQgb2Zmc2V0P1xuIik7CisJCXJldHVybiAoMCk7CisJfQorCS8q
IGdvIHRocm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sgKi8KKwlwaCA9IChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCSAgICBzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpLCAodWludDhfdCAqKSAmIHRtcF9wYXJhbSk7CisJd2hpbGUg
KHBoICE9IE5VTEwpIHsKKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7CisJCXBsZW4g
PSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKwkJc3dpdGNoIChwdHlwZSkgeworI2lmZGVmIElO
RVQ2CisJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBB
Rl9JTkVUNikgeworCQkJCS8qIGdldCB0aGUgZW50aXJlIElQdjYgYWRkcmVzcyBwYXJhbSAqLwor
CQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIGdldCB0aGUgZW50aXJlIElQdjYgYWRkcmVzcyBwYXJh
bSAqLworCQkJCWE2cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKQorCQkJCSAgICAg
IHNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgc2l6ZW9m
KHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICh1
aW50OF90ICopJmFkZHI2X3N0b3JlKTsKKwkJCQlpZiAoYTZwID09IE5VTEwpIHsKKwkJCQkJcmV0
dXJuICgwKTsKKwkJCQl9CisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7Cisj
aWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xP
Q0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCS8qIGNyZWF0ZSBhIGNvcHkgYW5kIGNsZWFy
IHNjb3BlICovCisJCQkJCW1lbWNweSgmc2luNl90bXAsIHNpbjYsCisJCQkJCSAgICAgICBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQlzaW42ID0gJnNpbjZfdG1wOworCQkJCQlp
bjZfY2xlYXJzY29wZSgmc2luNi0+c2luNl9hZGRyKTsKKwkJCQl9CisjZW5kaWYgLyogU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSAqLworCQkJCWlmIChtZW1jbXAoJnNpbjYtPnNpbjZfYWRkciwgYTZw
LT5hZGRyLAorCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApIHsK
KwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJcmV0dXJuICgxKTsKKwkJCQl9CisJCQl9CisJCQli
cmVhazsKKyNlbmRpZiAvKiBJTkVUNiAqLworI2lmZGVmIElORVQKKwkJY2FzZSBTQ1RQX0lQVjRf
QUREUkVTUzoKKwkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlpZiAocGxl
biAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCQkvKiBnZXQgdGhlIGVudGlyZSBJUHY0IGFkZHJlc3MgcGFyYW0gKi8KKwkJCQlh
NHAgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKikKKwkJCQkgICAgICBzY3RwX21fZ2V0
cHRyKG0sIG9mZnNldCwKKwkJCQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSksCisJCQkJICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZh
ZGRyNF9zdG9yZSk7CisJCQkJaWYgKGE0cCA9PSBOVUxMKSB7CisJCQkJCXJldHVybiAoMCk7CisJ
CQkJfQorCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgPT0gYTRwLT5hZGRyKSB7CisJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJ
CXJldHVybiAoMSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoK
KwkJCWJyZWFrOworCQl9CisJCS8qIGdldCBuZXh0IHBhcmFtZXRlciAqLworCQlvZmZzZXQgKz0g
U0NUUF9TSVpFMzIocGxlbik7CisJCWlmIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGFy
YW1oZHIpID4gbGVuZ3RoKSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJCXBoID0gKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopCisJCSAgICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSwKKwkJICAgICh1aW50OF90ICopICYgdG1wX3BhcmFtKTsKKwl9
IC8qIHdoaWxlICovCisJLyogbm90IGZvdW5kISAqLworCXJldHVybiAoMCk7Cit9CisKKy8qCisg
KiBtYWtlcyBzdXJlIHRoYXQgdGhlIGN1cnJlbnQgZW5kcG9pbnQgbG9jYWwgYWRkciBsaXN0IGlz
IGNvbnNpc3RlbnQgd2l0aAorICogdGhlIG5ldyBhc3NvY2lhdGlvbiAoZWcuIHN1YnNldCBib3Vu
ZCwgYXNjb25mIGFsbG93ZWQpIGFkZHMgYWRkcmVzc2VzIGFzCisgKiBuZWNlc3NhcnkKKyAqLwor
c3RhdGljIHZvaWQKK3NjdHBfY2hlY2tfYWRkcmVzc19saXN0X2VwKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50IGxlbmd0aCwgc3RydWN0
IHNvY2thZGRyICppbml0X2FkZHIpCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJ
LyogZ28gdGhyb3VnaCB0aGUgZW5kcG9pbnQgbGlzdCAqLworCUxJU1RfRk9SRUFDSChsYWRkciwg
JnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCS8qIGJl
IHBhcmFub2lkIGFuZCB2YWxpZGF0ZSB0aGUgbGFkZHIgKi8KKwkJaWYgKGxhZGRyLT5pZmEgPT0g
TlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImNoZWNrX2FkZHJf
bGlzdF9lcDogbGFkZHItPmlmYSBpcyBOVUxMIik7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAo
bGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImNo
ZWNrX2FkZHJfbGlzdF9lcDogbGFkZHItPmlmYS0+aWZhX2FkZHIgaXMgTlVMTCIpOworCQkJY29u
dGludWU7CisJCX0KKwkJLyogZG8gaSBoYXZlIGl0IGltcGxpY2l0bHk/ICovCisJCWlmIChzY3Rw
X2NtcGFkZHIoJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2EsIGluaXRfYWRkcikpIHsKKwkJCWNvbnRp
bnVlOworCQl9CisJCS8qIGNoZWNrIHRvIHNlZSBpZiBpbiB0aGUgaW5pdC1hY2sgKi8KKwkJaWYg
KCFzY3RwX2FkZHJfaW5faW5pdGFjayhtLCBvZmZzZXQsIGxlbmd0aCwgJmxhZGRyLT5pZmEtPmFk
ZHJlc3Muc2EpKSB7CisJCQkvKiB0cnkgdG8gYWRkIGl0ICovCisJCQlzY3RwX2FkZHJfbWdtdF9h
c3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBsYWRkci0+aWZhLAorCQkJICAgIFNDVFBfQUREX0lQ
X0FERFJFU1MsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwkJfQorCX0KK30KKworLyoKKyAqIG1h
a2VzIHN1cmUgdGhhdCB0aGUgY3VycmVudCBrZXJuZWwgYWRkcmVzcyBsaXN0IGlzIGNvbnNpc3Rl
bnQgd2l0aCB0aGUgbmV3CisgKiBhc3NvY2lhdGlvbiAod2l0aCBhbGwgYWRkcnMgYm91bmQpIGFk
ZHMgYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeQorICovCitzdGF0aWMgdm9pZAorc2N0cF9jaGVja19h
ZGRyZXNzX2xpc3RfYWxsKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sIGlu
dCBvZmZzZXQsCisgICAgaW50IGxlbmd0aCwgc3RydWN0IHNvY2thZGRyICppbml0X2FkZHIsCisg
ICAgdWludDE2X3QgbG9jYWxfc2NvcGUsIHVpbnQxNl90IHNpdGVfc2NvcGUsCisgICAgdWludDE2
X3QgaXB2NF9zY29wZSwgdWludDE2X3QgbG9vcGJhY2tfc2NvcGUpCit7CisJc3RydWN0IHNjdHBf
dnJmICp2cmYgPSBOVUxMOworCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJc3RydWN0IHNj
dHBfaWZhICpzY3RwX2lmYTsKKwl1aW50MzJfdCB2cmZfaWQ7CisjaWZkZWYgSU5FVAorCXN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OworI2VuZGlmCisKKwlpZiAoc3RjYikgeworCQl2cmZfaWQgPSBzdGNiLT5h
c29jLnZyZl9pZDsKKwl9IGVsc2UgeworCQlyZXR1cm47CisJfQorCVNDVFBfSVBJX0FERFJfUkxP
Q0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7
CisJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQlyZXR1cm47CisJfQorCS8qIGdvIHRocm91
Z2ggYWxsIG91ciBrbm93biBpbnRlcmZhY2VzICovCisJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAm
dnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQlpZiAobG9vcGJhY2tfc2NvcGUgPT0gMCAmJiBT
Q1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIHNraXAgbG9vcGJhY2sgaW50
ZXJmYWNlICovCisJCQljb250aW51ZTsKKwkJfQorCQkvKiBnbyB0aHJvdWdoIGVhY2ggaW50ZXJm
YWNlIGFkZHJlc3MgKi8KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxp
c3QsIG5leHRfaWZhKSB7CisJCQkvKiBkbyBpIGhhdmUgaXQgaW1wbGljaXRseT8gKi8KKwkJCWlm
IChzY3RwX2NtcGFkZHIoJnNjdHBfaWZhLT5hZGRyZXNzLnNhLCBpbml0X2FkZHIpKSB7CisJCQkJ
Y29udGludWU7CisJCQl9CisJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlzaW4gPSAmc2N0cF9pZmEt
PmFkZHJlc3Muc2luOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJaWYgKHByaXNvbl9j
aGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkgICAgICAg
ICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkgeworCQkJCQljb250aW51ZTsKKwkJ
CQl9CisjZW5kaWYKKwkJCQlpZiAoKGlwdjRfc2NvcGUgPT0gMCkgJiYKKwkJCQkgICAgKElONF9J
U1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQkJCS8qIHByaXZhdGUgYWRk
cmVzcyBub3QgaW4gc2NvcGUgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJc2luNiA9ICZzY3Rw
X2lmYS0+YWRkcmVzcy5zaW42OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJaWYgKHBy
aXNvbl9jaGVja19pcDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkg
ICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJCWNvbnRp
bnVlOworCQkJCX0KKyNlbmRpZgorCQkJCWlmICgobG9jYWxfc2NvcGUgPT0gMCkgJiYKKwkJCQkg
ICAgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkpIHsKKwkJCQkJY29u
dGludWU7CisJCQkJfQorCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJCSAgICAoSU42
X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgeworCQkJCQljb250aW51ZTsK
KwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9
CisJCQkvKiBjaGVjayB0byBzZWUgaWYgaW4gdGhlIGluaXQtYWNrICovCisJCQlpZiAoIXNjdHBf
YWRkcl9pbl9pbml0YWNrKG0sIG9mZnNldCwgbGVuZ3RoLCAmc2N0cF9pZmEtPmFkZHJlc3Muc2Ep
KSB7CisJCQkJLyogdHJ5IHRvIGFkZCBpdCAqLworCQkJCXNjdHBfYWRkcl9tZ210X2Fzc29jKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJICAgIHNjdHBfaWZhLCBTQ1RQX0FERF9JUF9BRERSRVNT
LAorCQkJCSAgICBTQ1RQX0FERFJfTE9DS0VEKTsKKwkJCX0KKwkJfSAvKiBlbmQgZm9yZWFjaCBp
ZmEgKi8KKwl9IC8qIGVuZCBmb3JlYWNoIGlmbiAqLworCVNDVFBfSVBJX0FERFJfUlVOTE9DSygp
OworfQorCisvKgorICogdmFsaWRhdGVzIGFuIGluaXQtYWNrIGNodW5rIChmcm9tIGEgY29va2ll
LWVjaG8pIHdpdGggY3VycmVudCBhZGRyZXNzZXMKKyAqIGFkZHMgYWRkcmVzc2VzIGZyb20gdGhl
IGluaXQtYWNrIGludG8gb3VyIGxvY2FsIGFkZHJlc3MgbGlzdCwgaWYgbmVlZGVkCisgKiBxdWV1
ZXMgYXNjb25mIGFkZHMvZGVsZXRlcyBhZGRyZXNzZXMgYXMgbmVlZGVkIGFuZCBtYWtlcyBhcHBy
b3ByaWF0ZSBsaXN0CisgKiBjaGFuZ2VzIGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gbSwg
b2Zmc2V0OiBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICogYWRkcmVzcyBsaXN0IGluIGFu
IGluaXQtYWNrIGNodW5rIGxlbmd0aDogdG90YWwgbGVuZ3RoIG9mIHRoZSBhZGRyZXNzCisgKiBw
YXJhbXMgb25seSBpbml0X2FkZHI6IGFkZHJlc3Mgd2hlcmUgbXkgSU5JVC1BQ0sgd2FzIHNlbnQg
ZnJvbQorICovCit2b2lkCitzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorICAgIGludCBsZW5ndGgsIHN0cnVj
dCBzb2NrYWRkciAqaW5pdF9hZGRyLAorICAgIHVpbnQxNl90IGxvY2FsX3Njb3BlLCB1aW50MTZf
dCBzaXRlX3Njb3BlLAorICAgIHVpbnQxNl90IGlwdjRfc2NvcGUsIHVpbnQxNl90IGxvb3BiYWNr
X3Njb3BlKQoreworCS8qIHByb2Nlc3MgdGhlIGxvY2FsIGFkZHJlc3NlcyBpbiB0aGUgaW5pdGFj
ayAqLworCXNjdHBfcHJvY2Vzc19pbml0YWNrX2FkZHJlc3NlcyhzdGNiLCBtLCBvZmZzZXQsIGxl
bmd0aCk7CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMKSB7CisJCS8qIGJvdW5kIGFsbCBjYXNlICovCisJCXNjdHBfY2hlY2tfYWRkcmVz
c19saXN0X2FsbChzdGNiLCBtLCBvZmZzZXQsIGxlbmd0aCwgaW5pdF9hZGRyLAorCQkgICAgbG9j
YWxfc2NvcGUsIHNpdGVfc2NvcGUsIGlwdjRfc2NvcGUsIGxvb3BiYWNrX3Njb3BlKTsKKwl9IGVs
c2UgeworCQkvKiBzdWJzZXQgYm91bmQgY2FzZSAqLworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsCisJCSAgICBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYpKSB7CisJCQkv
KiBhc2NvbmYncyBhbGxvd2VkICovCisJCQlzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdF9lcChzdGNi
LCBtLCBvZmZzZXQsIGxlbmd0aCwKKwkJCSAgICBpbml0X2FkZHIpOworCQl9CisJCS8qIGVsc2Us
IG5vIGFzY29uZnMgYWxsb3dlZCwgc28gd2hhdCB3ZSBzZW50IGlzIHdoYXQgd2UgZ2V0ICovCisJ
fQorfQorCisvKgorICogc2N0cF9iaW5keCgpIHN1cHBvcnQKKyAqLwordWludDMyX3QKK3NjdHBf
YWRkcl9tZ210X2VwX3NhKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAq
c2EsCisgICAgdWludDMyX3QgdHlwZSwgdWludDMyX3QgdnJmX2lkLCBzdHJ1Y3Qgc2N0cF9pZmEg
KnNjdHBfaWZhcCkKK3sKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKwlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbGFkZHIsICpubGFkZHI7CisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCWlmIChzYS0+c2FfbGVu
ID09IDApIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX0FTQ09ORiwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNlbmRpZgor
CWlmIChzY3RwX2lmYXApIHsKKwkJaWZhID0gc2N0cF9pZmFwOworCX0gZWxzZSBpZiAodHlwZSA9
PSBTQ1RQX0FERF9JUF9BRERSRVNTKSB7CisJCS8qIEZvciBhbiBhZGQgdGhlIGFkZHJlc3MgTVVT
VCBiZSBvbiB0aGUgc3lzdGVtICovCisJCWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihzYSwg
dnJmX2lkLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJfSBlbHNlIGlmICh0eXBlID09IFNDVFBf
REVMX0lQX0FERFJFU1MpIHsKKwkJLyogRm9yIGEgZGVsZXRlIHdlIG5lZWQgdG8gZmluZCBpdCBp
biB0aGUgaW5wICovCisJCWlmYSA9IHNjdHBfZmluZF9pZmFfaW5fZXAoaW5wLCBzYSwgU0NUUF9B
RERSX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCWlmYSA9IE5VTEw7CisJfQorCWlmIChpZmEg
IT0gTlVMTCkgeworCQlpZiAodHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSB7CisJCQlzY3Rw
X2FkZF9sb2NhbF9hZGRyX2VwKGlucCwgaWZhLCB0eXBlKTsKKwkJfSBlbHNlIGlmICh0eXBlID09
IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCWlmIChpbnAtPmxhZGRyX2NvdW50IDwgMikgewor
CQkJCS8qIGNhbid0IGRlbGV0ZSB0aGUgbGFzdCBsb2NhbCBhZGRyZXNzICovCisJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiwgRUlO
VkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCQlMSVNUX0ZPUkVBQ0gobGFkZHIs
ICZpbnAtPnNjdHBfYWRkcl9saXN0LAorCQkJCSAgICAgc2N0cF9ueHRfYWRkcikgeworCQkJCWlm
IChpZmEgPT0gbGFkZHItPmlmYSkgeworCQkJCQkvKiBNYXJrIGluIHRoZSBkZWxldGUgKi8KKwkJ
CQkJbGFkZHItPmFjdGlvbiA9IHR5cGU7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChMSVNUX0VN
UFRZKCZpbnAtPnNjdHBfYXNvY19saXN0KSkgeworCQkJLyoKKwkJCSAqIFRoZXJlIGlzIG5vIG5l
ZWQgdG8gc3RhcnQgdGhlIGl0ZXJhdG9yIGlmCisJCQkgKiB0aGUgaW5wIGhhcyBubyBhc3NvY2lh
dGlvbnMuCisJCQkgKi8KKwkJCWlmICh0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJ
CQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0
X2FkZHIsIG5sYWRkcikgeworCQkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCQkJCXNj
dHBfZGVsX2xvY2FsX2FkZHJfZXAoaW5wLCBpZmEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9
IGVsc2UgeworCQkJc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJCQlzdHJ1Y3Qg
c2N0cF9sYWRkciAqd2k7CisJCQlpbnQgcmV0OworCisJCQlTQ1RQX01BTExPQyhhc2MsIHN0cnVj
dCBzY3RwX2FzY29uZl9pdGVyYXRvciAqLAorCQkJICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2FzY29uZl9pdGVyYXRvciksCisJCQkgICAgICAgICAgICBTQ1RQX01fQVNDX0lUKTsKKwkJ
CWlmIChhc2MgPT0gTlVMTCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVOT01FTSk7CisJCQkJcmV0dXJuIChFTk9NRU0p
OworCQkJfQorCQkJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xh
ZGRyKSwgc3RydWN0IHNjdHBfbGFkZHIpOworCQkJaWYgKHdpID09IE5VTEwpIHsKKwkJCQlTQ1RQ
X0ZSRUUoYXNjLCBTQ1RQX01fQVNDX0lUKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFTk9NRU0pOworCQkJCXJldHVybiAo
RU5PTUVNKTsKKwkJCX0KKwkJCUxJU1RfSU5JVCgmYXNjLT5saXN0X29mX3dvcmspOworCQkJYXNj
LT5jbnQgPSAxOworCQkJU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7CisJCQl3aS0+aWZhID0gaWZh
OworCQkJd2ktPmFjdGlvbiA9IHR5cGU7CisJCQlhdG9taWNfYWRkX2ludCgmaWZhLT5yZWZjb3Vu
dCwgMSk7CisJCQlMSVNUX0lOU0VSVF9IRUFEKCZhc2MtPmxpc3Rfb2Zfd29yaywgd2ksIHNjdHBf
bnh0X2FkZHIpOworCQkJcmV0ID0gc2N0cF9pbml0aWF0ZV9pdGVyYXRvcihzY3RwX2FzY29uZl9p
dGVyYXRvcl9lcCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9hc2NvbmZf
aXRlcmF0b3Jfc3RjYiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9hc2Nv
bmZfaXRlcmF0b3JfZXBfZW5kLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQ
X1BDQl9BTllfRkxBR1MsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUENC
X0FOWV9GRUFUVVJFUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BU09D
X0FOWV9TVEFURSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilhc2Ms
IDAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9y
X2VuZCwgaW5wLCAwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlTQ1RQX1BSSU5URigiRmFpbGVkIHRv
IGluaXRpYXRlIGl0ZXJhdG9yIGZvciBhZGRyX21nbXRfZXBfc2FcbiIpOworCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVGQVVM
VCk7CisJCQkJICAgICAgICAgICAgICAgICAgICBzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQoYXNj
LCAwKTsKKwkJCQlyZXR1cm4gKEVGQVVMVCk7CisJCQl9CisJCX0KKwkJcmV0dXJuICgwKTsKKwl9
IGVsc2UgeworCQkvKiBpbnZhbGlkIGFkZHJlc3MhICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFQUREUk5PVEFWQUlMKTsK
KwkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfYXNjb25mX3Nl
bmRfbmF0X3N0YXRlX3VwZGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKmFhOworCXN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCXN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0gKnZ0
YWc7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG87CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvNjsKKyNlbmRpZgorCWlmIChuZXQgPT0g
TlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInNjdHBfYXNjb25mX3NlbmRf
bmF0X3N0YXRlX3VwZGF0ZTogTWlzc2luZyBuZXRcbiIpOworCQlyZXR1cm47CisJfQorCWlmIChz
dGNiID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJzY3RwX2FzY29u
Zl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IE1pc3Npbmcgc3RjYlxuIik7CisJCXJldHVybjsKKwl9
CisgIC8qIE5lZWQgdG8gaGF2ZSBpbiB0aGUgYXNjb25mOgorICAgKiAtIHZ0YWdwYXJhbShteV92
dGFnL3BlZXJfdnRhZykKKyAgICogLSBhZGQoMC4wLjAuMCkKKyAgICogLSBkZWwoMC4wLjAuMCkK
KyAgICogLSBBbnkgZ2xvYmFsIGFkZHJlc3NlcyBhZGQoYWRkcikKKyAgICovCisJU0NUUF9NQUxM
T0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAorCSAgICAgICAg
ICAgIFNDVFBfTV9BU0NfQUREUik7CisJaWYgKGFhID09IE5VTEwpIHsKKwkJLyogZGlkbid0IGdl
dCBtZW1vcnkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSAgICAgICAgInNj
dHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4i
KTsKKwkJcmV0dXJuOworCX0KKwlhYS0+c3BlY2lhbF9kZWwgPSAwOworCS8qIGZpbGwgaW4gYXNj
b25mIGFkZHJlc3MgcGFyYW1ldGVyIGZpZWxkcyAqLworCS8qIHRvcCBsZXZlbCBlbGVtZW50cyBh
cmUgIm5ldHdvcmtlZCIgZHVyaW5nIHNlbmQgKi8KKwlhYS0+aWZhID0gTlVMTDsKKwlhYS0+c2Vu
dCA9IDA7CQkvKiBjbGVhciBzZW50IGZsYWcgKi8KKwl2dGFnID0gKHN0cnVjdCBzY3RwX2FzY29u
Zl90YWdfcGFyYW0gKikmYWEtPmFwLmFwaDsKKwl2dGFnLT5hcGgucGgucGFyYW1fdHlwZSA9IFND
VFBfTkFUX1ZUQUdTOworCXZ0YWctPmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX3RhZ19wYXJhbSk7CisJdnRhZy0+bG9jYWxfdnRhZyA9IGh0b25sKHN0Y2It
PmFzb2MubXlfdnRhZyk7CisJdnRhZy0+cmVtb3RlX3Z0YWcgPSBodG9ubChzdGNiLT5hc29jLnBl
ZXJfdnRhZyk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBh
YSwgbmV4dCk7CisKKwlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwg
c2l6ZW9mKCphYSksCisJICAgICAgICAgICAgU0NUUF9NX0FTQ19BRERSKTsKKwlpZiAoYWEgPT0g
TlVMTCkgeworCQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwKKwkJICAgICAgICAic2N0cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVfdXBkYXRlOiBm
YWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCW1lbXNldChhYSwgMCwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyKSk7CisJLyogZmlsbCBpbiBhc2NvbmYgYWRk
cmVzcyBwYXJhbWV0ZXIgZmllbGRzICovCisJLyogQUREKDAuMC4wLjApICovCisJc3dpdGNoIChu
ZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5F
VDoKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gU0NUUF9BRERfSVBfQUREUkVTUzsKKwkJ
YWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fk
ZHJ2NF9wYXJhbSk7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FE
RFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQgYW4gYWRkcmVzcywgd2Ug
YXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNj
b25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCQlhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0FERF9JUF9B
RERSRVNTOworCQlhYS0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWRkcl9wYXJhbSk7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NU
UF9JUFY2X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yg
KHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQgYW4gYWRk
cmVzcywgd2UgYXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2It
PmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVs
dDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSAgICAgICAgInNjdHBfYXNjb25m
X3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogdW5rbm93biBhZGRyZXNzIGZhbWlseVxuIik7CisJCVND
VFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX01BTExP
QyhhYSwgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwgc2l6ZW9mKCphYSksCisJICAgICAgICAg
ICAgU0NUUF9NX0FTQ19BRERSKTsKKwlpZiAoYWEgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3QgZ2V0
IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJICAgICAgICAic2N0
cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVfdXBkYXRlOiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIp
OworCQlyZXR1cm47CisJfQorCW1lbXNldChhYSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29u
Zl9hZGRyKSk7CisJLyogZmlsbCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzICov
CisJLyogQUREKDAuMC4wLjApICovCisJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYWEtPmFwLmFwaC5waC5wYXJh
bV90eXBlID0gU0NUUF9BRERfSVBfQUREUkVTUzsKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5n
dGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSk7CisJCWFhLT5hcC5h
ZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5w
aC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJ
LyogTm8gbmVlZCB0byBhZGQgYW4gYWRkcmVzcywgd2UgYXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJ
VEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlhYS0+YXAu
YXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0RFTF9JUF9BRERSRVNTOworCQlhYS0+YXAuYXBoLnBo
LnBhcmFtX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSk7CisJ
CWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7CisJCWFhLT5h
cC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3Bh
cmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQgYW4gYWRkcmVzcywgd2UgYXJlIHVzaW5nIDAuMC4w
LjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwg
bmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsCisJCSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTog
dW5rbm93biBhZGRyZXNzIGZhbWlseVxuIik7CisJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19B
RERSKTsKKwkJcmV0dXJuOworCX0KKwkvKiBOb3cgd2UgbXVzdCBodW50IHRoZSBhZGRyZXNzZXMg
YW5kIGFkZCBhbGwgZ2xvYmFsIGFkZHJlc3NlcyAqLworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJc3RydWN0IHNjdHBfdnJmICp2
cmYgPSBOVUxMOworCQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKKwkJdWludDMyX3QgdnJm
X2lkOworCisJCXZyZl9pZCA9IHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZfaWQ7CisJCXZyZiA9IHNj
dHBfZmluZF92cmYodnJmX2lkKTsKKwkJaWYgKHZyZiA9PSBOVUxMKSB7CisJCQlnb3RvIHNraXBf
cmVzdDsKKwkJfQorCisJCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwkJTElTVF9GT1JFQUNIKHNj
dHBfaWZucCwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCUxJU1RfRk9SRUFDSChzY3Rw
X2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJc3dpdGNoIChzY3Rw
X2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZf
SU5FVDoKKwkJCQkJdG8gPSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChzdGNiLT5zY3RwX2VwLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAmdG8tPnNpbl9hZGRy
KSAhPSAwKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlmCisJCQkJCWlmIChJTjRf
SVNQUklWQVRFX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQl9CisJCQkJCWlmIChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZ0by0+c2luX2FkZHIpKSB7CisJ
CQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJdG82ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0
Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICZ0bzYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNl
bmRpZgorCQkJCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnRvNi0+c2luNl9hZGRyKSkgewor
CQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgm
dG82LT5zaW42X2FkZHIpKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsK
KyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzY3RwX2Fz
Y29uZl9xdWV1ZV9tZ210KHN0Y2IsIHNjdHBfaWZhcCwgU0NUUF9BRERfSVBfQUREUkVTUyk7CisJ
CQl9CisJCX0KKwkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJfSBlbHNlIHsKKwkJc3RydWN0
IHNjdHBfbGFkZHIgKmxhZGRyOworCisJCUxJU1RfRk9SRUFDSChsYWRkciwgJnN0Y2ItPnNjdHBf
ZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlpZiAobGFkZHItPmlmYSA9
PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobGFkZHItPmlmYS0+bG9jYWxp
ZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpCisJCQkJLyogQWRkcmVzcyBiZWluZyBkZWxl
dGVkIGJ5IHRoZSBzeXN0ZW0sIGRvbnQKKwkJCQkgKiBsaXN0LgorCQkJCSAqLworCQkJCWNvbnRp
bnVlOworCQkJaWYgKGxhZGRyLT5hY3Rpb24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJ
CS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBvbiB0aGlzIGVwCisJCQkJICogZG9uJ3QgbGlzdC4K
KwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNjdHBfaWZhcCA9IGxhZGRyLT5pZmE7
CisJCQlzd2l0Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJdG8gPSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjsK
KwkJCQlpZiAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZ0by0+c2luX2FkZHIpKSB7CisJCQkJCWNv
bnRpbnVlOworCQkJCX0KKwkJCQlpZiAoSU40X0lTTE9PUEJBQ0tfQUREUkVTUygmdG8tPnNpbl9h
ZGRyKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQl0bzYgPSAmc2N0cF9pZmFwLT5hZGRyZXNz
LnNpbjY7CisJCQkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYtPnNpbjZfYWRkcikpIHsK
KwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnRv
Ni0+c2luNl9hZGRyKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5k
aWYKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlzY3RwX2FzY29uZl9xdWV1
ZV9tZ210KHN0Y2IsIHNjdHBfaWZhcCwgU0NUUF9BRERfSVBfQUREUkVTUyk7CisJCX0KKwl9Cisg
c2tpcF9yZXN0OgorCS8qIE5vdyB3ZSBtdXN0IHNlbmQgdGhlIGFzY29uZiBpbnRvIHRoZSBxdWV1
ZSAqLworCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgbmV0LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oCmluZGV4IGU2OWRl
MjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjI4MTMwZjNiMmY2MDBkODY5ODk0
NTk4M2RmNzA0ZWMzMjhhZWY2NjkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2FzY29uZi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2FzY29uZi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNj
byBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAg
ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5
c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9hc2NvbmYuaCAzMjQw
NTYgMjAxNy0wOS0yNyAxMzowNToyM1ogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9O
RVRJTkVUX1NDVFBfQVNDT05GX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfQVNDT05GX0hfCisK
KyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKworLyoKKyAq
IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworZXh0ZXJuIHZvaWQgc2N0cF9hc2NvbmZfY2xlYW51
cChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKKworZXh0ZXJuIHN0cnVj
dCBtYnVmICpzY3RwX2NvbXBvc2VfYXNjb25mKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQgKiwgaW50
KTsKKworZXh0ZXJuIHZvaWQKK3NjdHBfaGFuZGxlX2FzY29uZihzdHJ1Y3QgbWJ1ZiAqLCB1bnNp
Z25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX2FzY29uZl9jaHVuayAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50KTsKKworZXh0ZXJuIHZv
aWQKK3NjdHBfaGFuZGxlX2FzY29uZl9hY2soc3RydWN0IG1idWYgKiwgaW50LCBzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWNrX2NodW5rICosCisgICAgIHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0
cF9uZXRzICosIGludCAqKTsKKworZXh0ZXJuIHVpbnQzMl90CitzY3RwX2FkZHJfbWdtdF9lcF9z
YShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkJICAgICB1aW50MzJf
dCwgdWludDMyX3QsIHN0cnVjdCBzY3RwX2lmYSAqKTsKKworCitleHRlcm4gaW50IHNjdHBfYXNj
b25mX2l0ZXJhdG9yX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHZvaWQgKnB0ciwKKwkJCQkg
ICB1aW50MzJfdCB2YWwpOworZXh0ZXJuIHZvaWQgc2N0cF9hc2NvbmZfaXRlcmF0b3Jfc3RjYihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KwkJCQkgICAgICB2b2lkICpwdHIsIHVpbnQzMl90IHR5cGUpOworZXh0ZXJuIHZvaWQgc2N0cF9h
c2NvbmZfaXRlcmF0b3JfZW5kKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsKTsKKworCitleHRlcm4g
aW50MzJfdAorc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0cnVjdCBzY3RwX3RjYiAq
LAorICAgIHN0cnVjdCBzb2NrYWRkciAqKTsKKworZXh0ZXJuIHZvaWQKK3NjdHBfY2hlY2tfYWRk
cmVzc19saXN0KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKKyAg
ICBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDE2
X3QpOworCitleHRlcm4gdm9pZAorc2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qg
c2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorZXh0ZXJu
IHZvaWQKK3NjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc2N0cF9uZXRzICopOworI2VuZGlmCisKK2V4dGVybiB2b2lkCitzY3RwX2FzY29uZl9zZW5k
X25hdF9zdGF0ZV91cGRhdGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCSAgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KTsKKworZXh0ZXJuIGludAorc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKKyNlbmRpZgkJCQkvKiBfS0VSTkVMICov
CisKKyNlbmRpZgkJCQkvKiAhX05FVElORVRfU0NUUF9BU0NPTkZfSF8gKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi41ZTU4MTNiM2YxN2NmNjM4N2RiMDA0ZDNhYmUxZTUzMGQwMTg0MDhl
IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5jCkBAIC0wLDAgKzEsMjM1
MSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgor
ICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0
ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwg
YnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoK
KyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYg
X19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog
aGVhZC9zeXMvbmV0aW5ldC9zY3RwX2F1dGguYyAzMzQ1MzIgMjAxOC0wNi0wMiAxNjoyODoxMFog
dHVleGVuICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFy
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisK
KyNpZmRlZiBTQ1RQX0RFQlVHCisjZGVmaW5lIFNDVFBfQVVUSF9ERUJVRwkJKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FVVEgxKQorI2RlZmluZSBTQ1RQX0FV
VEhfREVCVUcyCShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pICYgU0NUUF9ERUJVR19B
VVRIMikKKyNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCisKKwordm9pZAorc2N0cF9jbGVhcl9jaHVu
a2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCkKK3sKKwltZW1zZXQoY2hrbGlzdCwg
MCwgc2l6ZW9mKCpjaGtsaXN0KSk7CisJLyogY2hrbGlzdC0+bnVtX2NodW5rcyA9IDA7ICovCit9
CisKK3NjdHBfYXV0aF9jaGtsaXN0X3QgKgorc2N0cF9hbGxvY19jaHVua2xpc3Qodm9pZCkKK3sK
KwlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0OworCisJU0NUUF9NQUxMT0MoY2hrbGlzdCwg
c2N0cF9hdXRoX2Noa2xpc3RfdCAqLCBzaXplb2YoKmNoa2xpc3QpLAorCQkgICAgU0NUUF9NX0FV
VEhfQ0wpOworCWlmIChjaGtsaXN0ID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FV
VEgxLCAic2N0cF9hbGxvY19jaHVua2xpc3Q6IGZhaWxlZCB0byBnZXQgbWVtb3J5IVxuIik7CisJ
fSBlbHNlIHsKKwkJc2N0cF9jbGVhcl9jaHVua2xpc3QoY2hrbGlzdCk7CisJfQorCXJldHVybiAo
Y2hrbGlzdCk7Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbGlzdCkKK3sKKwlpZiAobGlzdCAhPSBOVUxMKQorCQlTQ1RQX0ZSRUUobGlzdCwgU0NU
UF9NX0FVVEhfQ0wpOworfQorCitzY3RwX2F1dGhfY2hrbGlzdF90ICoKK3NjdHBfY29weV9jaHVu
a2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlzY3RwX2F1dGhfY2hrbGlzdF90
ICpuZXdfbGlzdDsKKworCWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwkv
KiBnZXQgYSBuZXcgbGlzdCAqLworCW5ld19saXN0ID0gc2N0cF9hbGxvY19jaHVua2xpc3QoKTsK
KwlpZiAobmV3X2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwkvKiBjb3B5IGl0ICov
CisJbWVtY3B5KG5ld19saXN0LCBsaXN0LCBzaXplb2YoKm5ld19saXN0KSk7CisKKwlyZXR1cm4g
KG5ld19saXN0KTsKK30KKworCisvKgorICogYWRkIGEgY2h1bmsgdG8gdGhlIHJlcXVpcmVkIGNo
dW5rcyBsaXN0CisgKi8KK2ludAorc2N0cF9hdXRoX2FkZF9jaHVuayh1aW50OF90IGNodW5rLCBz
Y3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KQoreworCWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVy
biAoLTEpOworCisJLyogaXMgY2h1bmsgcmVzdHJpY3RlZD8gKi8KKwlpZiAoKGNodW5rID09IFND
VFBfSU5JVElBVElPTikgfHwKKwkgICAgKGNodW5rID09IFNDVFBfSU5JVElBVElPTl9BQ0spIHx8
CisJICAgIChjaHVuayA9PSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFKSB8fAorCSAgICAoY2h1bmsg
PT0gU0NUUF9BVVRIRU5USUNBVElPTikpIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmIChsaXN0
LT5jaHVua3NbY2h1bmtdID09IDApIHsKKwkJbGlzdC0+Y2h1bmtzW2NodW5rXSA9IDE7CisJCWxp
c3QtPm51bV9jaHVua3MrKzsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFA6
IGFkZGVkIGNodW5rICV1ICgweCUwMngpIHRvIEF1dGggbGlzdFxuIiwKKwkJCWNodW5rLCBjaHVu
ayk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBkZWxldGUgYSBjaHVuayBmcm9tIHRo
ZSByZXF1aXJlZCBjaHVua3MgbGlzdAorICovCitpbnQKK3NjdHBfYXV0aF9kZWxldGVfY2h1bmso
dWludDhfdCBjaHVuaywgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlpZiAobGlzdCA9
PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCWlmIChsaXN0LT5jaHVua3NbY2h1bmtdID09IDEp
IHsKKwkJbGlzdC0+Y2h1bmtzW2NodW5rXSA9IDA7CisJCWxpc3QtPm51bV9jaHVua3MtLTsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFA6IGRlbGV0ZWQgY2h1bmsgJXUgKDB4
JTAyeCkgZnJvbSBBdXRoIGxpc3RcbiIsCisJCQljaHVuaywgY2h1bmspOworCX0KKwlyZXR1cm4g
KDApOworfQorCitzaXplX3QKK3NjdHBfYXV0aF9nZXRfY2hrbGlzdF9zaXplKGNvbnN0IHNjdHBf
YXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuICgw
KTsKKwllbHNlCisJCXJldHVybiAobGlzdC0+bnVtX2NodW5rcyk7Cit9CisKKy8qCisgKiByZXR1
cm4gdGhlIGN1cnJlbnQgbnVtYmVyIGFuZCBsaXN0IG9mIHJlcXVpcmVkIGNodW5rcyBjYWxsZXIg
bXVzdAorICogZ3VhcmFudGVlIHB0ciBoYXMgc3BhY2UgZm9yIHVwIHRvIDI1NiBieXRlcworICov
CitpbnQKK3NjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0
X3QgKmxpc3QsIHVpbnQ4X3QgKnB0cikKK3sKKwlpbnQgaSwgY291bnQgPSAwOworCisJaWYgKGxp
c3QgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKworCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykg
eworCQlpZiAobGlzdC0+Y2h1bmtzW2ldICE9IDApIHsKKwkJCSpwdHIrKyA9IGk7CisJCQljb3Vu
dCsrOworCQl9CisJfQorCXJldHVybiAoY291bnQpOworfQorCitpbnQKK3NjdHBfcGFja19hdXRo
X2NodW5rcyhjb25zdCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0LCB1aW50OF90ICpwdHIpCit7
CisJaW50IGksIHNpemUgPSAwOworCisJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsK
KworCWlmIChsaXN0LT5udW1fY2h1bmtzIDw9IDMyKSB7CisJCS8qIGp1c3QgbGlzdCB0aGVtLCBv
bmUgYnl0ZSBlYWNoICovCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJaWYgKGxp
c3QtPmNodW5rc1tpXSAhPSAwKSB7CisJCQkJKnB0cisrID0gaTsKKwkJCQlzaXplKys7CisJCQl9
CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaW5kZXgsIG9mZnNldDsKKworCQkvKiBwYWNrIGludG8g
YSAzMiBieXRlIGJpdGZpZWxkICovCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJ
aWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7CisJCQkJaW5kZXggPSBpIC8gODsKKwkJCQlvZmZz
ZXQgPSBpICUgODsKKwkJCQlwdHJbaW5kZXhdIHw9ICgxIDw8IG9mZnNldCk7CisJCQl9CisJCX0K
KwkJc2l6ZSA9IDMyOworCX0KKwlyZXR1cm4gKHNpemUpOworfQorCitpbnQKK3NjdHBfdW5wYWNr
X2F1dGhfY2h1bmtzKGNvbnN0IHVpbnQ4X3QgKnB0ciwgdWludDhfdCBudW1fY2h1bmtzLAorICAg
IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJaW50IGk7CisJaW50IHNpemU7CisKKwlp
ZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJaWYgKG51bV9jaHVua3MgPD0gMzIp
IHsKKwkJLyoganVzdCBwdWxsIHRoZW0sIG9uZSBieXRlIGVhY2ggKi8KKwkJZm9yIChpID0gMDsg
aSA8IG51bV9jaHVua3M7IGkrKykgeworCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9jaHVuaygqcHRy
KyssIGxpc3QpOworCQl9CisJCXNpemUgPSBudW1fY2h1bmtzOworCX0gZWxzZSB7CisJCWludCBp
bmRleCwgb2Zmc2V0OworCisJCS8qIHVucGFjayBmcm9tIGEgMzIgYnl0ZSBiaXRmaWVsZCAqLwor
CQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykgeworCQkJZm9yIChvZmZzZXQg
PSAwOyBvZmZzZXQgPCA4OyBvZmZzZXQrKykgeworCQkJCWlmIChwdHJbaW5kZXhdICYgKDEgPDwg
b2Zmc2V0KSkgeworCQkJCQkodm9pZClzY3RwX2F1dGhfYWRkX2NodW5rKChpbmRleCAqIDgpICsg
b2Zmc2V0LCBsaXN0KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJc2l6ZSA9IDMyOworCX0KKwlyZXR1
cm4gKHNpemUpOworfQorCisKKy8qCisgKiBhbGxvY2F0ZSBzdHJ1Y3R1cmUgc3BhY2UgZm9yIGEg
a2V5IG9mIGxlbmd0aCBrZXlsZW4KKyAqLworc2N0cF9rZXlfdCAqCitzY3RwX2FsbG9jX2tleSh1
aW50MzJfdCBrZXlsZW4pCit7CisJc2N0cF9rZXlfdCAqbmV3X2tleTsKKworCVNDVFBfTUFMTE9D
KG5ld19rZXksIHNjdHBfa2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSArIGtleWxlbiwKKwkJICAg
IFNDVFBfTV9BVVRIX0tZKTsKKwlpZiAobmV3X2tleSA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBt
ZW1vcnkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbmV3X2tleS0+a2V5bGVuID0ga2V5bGVu
OworCXJldHVybiAobmV3X2tleSk7Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9rZXkoc2N0cF9rZXlf
dCAqa2V5KQoreworCWlmIChrZXkgIT0gTlVMTCkKKwkJU0NUUF9GUkVFKGtleSxTQ1RQX01fQVVU
SF9LWSk7Cit9CisKK3ZvaWQKK3NjdHBfcHJpbnRfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3Qg
Y2hhciAqc3RyKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoa2V5ID09IE5VTEwpIHsKKwkJU0NU
UF9QUklOVEYoIiVzOiBbTnVsbCBrZXldXG4iLCBzdHIpOworCQlyZXR1cm47CisJfQorCVNDVFBf
UFJJTlRGKCIlczogbGVuICV1LCAiLCBzdHIsIGtleS0+a2V5bGVuKTsKKwlpZiAoa2V5LT5rZXls
ZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGtleS0+a2V5bGVuOyBpKyspCisJCQlTQ1RQX1BSSU5U
RigiJTAyeCIsIGtleS0+a2V5W2ldKTsKKwkJU0NUUF9QUklOVEYoIlxuIik7CisJfSBlbHNlIHsK
KwkJU0NUUF9QUklOVEYoIltOdWxsIGtleV1cbiIpOworCX0KK30KKwordm9pZAorc2N0cF9zaG93
X2tleShzY3RwX2tleV90ICprZXksIGNvbnN0IGNoYXIgKnN0cikKK3sKKwl1aW50MzJfdCBpOwor
CisJaWYgKGtleSA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCIlczogW051bGwga2V5XVxuIiwg
c3RyKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX1BSSU5URigiJXM6IGxlbiAldSwgIiwgc3RyLCBr
ZXktPmtleWxlbik7CisJaWYgKGtleS0+a2V5bGVuKSB7CisJCWZvciAoaSA9IDA7IGkgPCBrZXkt
PmtleWxlbjsgaSsrKQorCQkJU0NUUF9QUklOVEYoIiUwMngiLCBrZXktPmtleVtpXSk7CisJCVND
VFBfUFJJTlRGKCJcbiIpOworCX0gZWxzZSB7CisJCVNDVFBfUFJJTlRGKCJbTnVsbCBrZXldXG4i
KTsKKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9nZXRfa2V5bGVuKHNjdHBfa2V5X3Qg
KmtleSkKK3sKKwlpZiAoa2V5ICE9IE5VTEwpCisJCXJldHVybiAoa2V5LT5rZXlsZW4pOworCWVs
c2UKKwkJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkg
b2YgbGVuZ3RoICdrZXlsZW4nCisgKi8KK3NjdHBfa2V5X3QgKgorc2N0cF9nZW5lcmF0ZV9yYW5k
b21fa2V5KHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCisJbmV3
X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgPT0gTlVMTCkgewor
CQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfUkVBRF9S
QU5ET00obmV3X2tleS0+a2V5LCBrZXlsZW4pOworCW5ld19rZXktPmtleWxlbiA9IGtleWxlbjsK
KwlyZXR1cm4gKG5ld19rZXkpOworfQorCitzY3RwX2tleV90ICoKK3NjdHBfc2V0X2tleSh1aW50
OF90ICprZXksIHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCisJ
bmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgPT0gTlVMTCkg
eworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCW1lbWNweShu
ZXdfa2V5LT5rZXksIGtleSwga2V5bGVuKTsKKwlyZXR1cm4gKG5ld19rZXkpOworfQorCisvKi0K
KyAqIGdpdmVuIHR3byBrZXlzIG9mIHZhcmlhYmxlIHNpemUsIGNvbXB1dGUgd2hpY2gga2V5IGlz
ICJsYXJnZXIvc21hbGxlciIKKyAqIHJldHVybnM6ICAxIGlmIGtleTEgPiBrZXkyCisgKiAgICAg
ICAgICAtMSBpZiBrZXkxIDwga2V5MgorICogICAgICAgICAgIDAgaWYga2V5MSA9IGtleTIKKyAq
Lworc3RhdGljIGludAorc2N0cF9jb21wYXJlX2tleShzY3RwX2tleV90ICprZXkxLCBzY3RwX2tl
eV90ICprZXkyKQoreworCXVpbnQzMl90IG1heGxlbjsKKwl1aW50MzJfdCBpOworCXVpbnQzMl90
IGtleTFsZW4sIGtleTJsZW47CisJdWludDhfdCAqa2V5XzEsICprZXlfMjsKKwl1aW50OF90IHZh
bDEsIHZhbDI7CisKKwkvKiBzYW5pdHkvbGVuZ3RoIGNoZWNrICovCisJa2V5MWxlbiA9IHNjdHBf
Z2V0X2tleWxlbihrZXkxKTsKKwlrZXkybGVuID0gc2N0cF9nZXRfa2V5bGVuKGtleTIpOworCWlm
ICgoa2V5MWxlbiA9PSAwKSAmJiAoa2V5MmxlbiA9PSAwKSkKKwkJcmV0dXJuICgwKTsKKwllbHNl
IGlmIChrZXkxbGVuID09IDApCisJCXJldHVybiAoLTEpOworCWVsc2UgaWYgKGtleTJsZW4gPT0g
MCkKKwkJcmV0dXJuICgxKTsKKworCWlmIChrZXkxbGVuIDwga2V5MmxlbikgeworCQltYXhsZW4g
PSBrZXkybGVuOworCX0gZWxzZSB7CisJCW1heGxlbiA9IGtleTFsZW47CisJfQorCWtleV8xID0g
a2V5MS0+a2V5OworCWtleV8yID0ga2V5Mi0+a2V5OworCS8qIGNoZWNrIGZvciBudW1lcmljIGVx
dWFsaXR5ICovCisJZm9yIChpID0gMDsgaSA8IG1heGxlbjsgaSsrKSB7CisJCS8qIGxlZnQtcGFk
IHdpdGggemVyb3MgKi8KKwkJdmFsMSA9IChpIDwgKG1heGxlbiAtIGtleTFsZW4pKSA/IDAgOiAq
KGtleV8xKyspOworCQl2YWwyID0gKGkgPCAobWF4bGVuIC0ga2V5MmxlbikpID8gMCA6ICooa2V5
XzIrKyk7CisJCWlmICh2YWwxID4gdmFsMikgeworCQkJcmV0dXJuICgxKTsKKwkJfSBlbHNlIGlm
ICh2YWwxIDwgdmFsMikgeworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9CisJLyoga2V5cyBhcmUg
ZXF1YWwgdmFsdWUsIHNvIGNoZWNrIGxlbmd0aHMgKi8KKwlpZiAoa2V5MWxlbiA9PSBrZXkybGVu
KQorCQlyZXR1cm4gKDApOworCWVsc2UgaWYgKGtleTFsZW4gPCBrZXkybGVuKQorCQlyZXR1cm4g
KC0xKTsKKwllbHNlCisJCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBnZW5lcmF0ZSB0aGUgY29u
Y2F0ZW5hdGVkIGtleWluZyBtYXRlcmlhbCBiYXNlZCBvbiB0aGUgdHdvIGtleXMgYW5kIHRoZQor
ICogc2hhcmVkIGtleSAoaWYgYXZhaWxhYmxlKS4gZHJhZnQtaWV0Zi10c3Z3Zy1hdXRoIHNwZWNp
ZmllcyB0aGUgc3BlY2lmaWMKKyAqIG9yZGVyIGZvciBjb25jYXRlbmF0aW9uCisgKi8KK3NjdHBf
a2V5X3QgKgorc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlf
dCAqa2V5Miwgc2N0cF9rZXlfdCAqc2hhcmVkKQoreworCXVpbnQzMl90IGtleWxlbjsKKwlzY3Rw
X2tleV90ICpuZXdfa2V5OworCXVpbnQ4X3QgKmtleV9wdHI7CisKKwlrZXlsZW4gPSBzY3RwX2dl
dF9rZXlsZW4oa2V5MSkgKyBzY3RwX2dldF9rZXlsZW4oa2V5MikgKworCSAgICBzY3RwX2dldF9r
ZXlsZW4oc2hhcmVkKTsKKworCWlmIChrZXlsZW4gPiAwKSB7CisJCS8qIGdldCBzcGFjZSBmb3Ig
dGhlIG5ldyBrZXkgKi8KKwkJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJCWlm
IChuZXdfa2V5ID09IE5VTEwpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwkJbmV3X2tleS0+a2V5bGVuID0ga2V5bGVuOworCQlrZXlfcHRyID0gbmV3
X2tleS0+a2V5OworCX0gZWxzZSB7CisJCS8qIGFsbCBrZXlzIGVtcHR5L251bGw/ISAqLworCQly
ZXR1cm4gKE5VTEwpOworCX0KKworCS8qIGNvbmNhdGVuYXRlIHRoZSBrZXlzICovCisJaWYgKHNj
dHBfY29tcGFyZV9rZXkoa2V5MSwga2V5MikgPD0gMCkgeworCQkvKiBrZXkgaXMgc2hhcmVkICsg
a2V5MSArIGtleTIgKi8KKwkJaWYgKHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7CisJCQltZW1j
cHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0g
c2hhcmVkLT5rZXlsZW47CisJCX0KKwkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkxKSkgeworCQkJ
bWVtY3B5KGtleV9wdHIsIGtleTEtPmtleSwga2V5MS0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0g
a2V5MS0+a2V5bGVuOworCQl9CisJCWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MikpIHsKKwkJCW1l
bWNweShrZXlfcHRyLCBrZXkyLT5rZXksIGtleTItPmtleWxlbik7CisJCX0KKwl9IGVsc2Ugewor
CQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MiArIGtleTEgKi8KKwkJaWYgKHNjdHBfZ2V0X2tleWxl
bihzaGFyZWQpKSB7CisJCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5
bGVuKTsKKwkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47CisJCX0KKwkJaWYgKHNjdHBfZ2V0
X2tleWxlbihrZXkyKSkgeworCQkJbWVtY3B5KGtleV9wdHIsIGtleTItPmtleSwga2V5Mi0+a2V5
bGVuKTsKKwkJCWtleV9wdHIgKz0ga2V5Mi0+a2V5bGVuOworCQl9CisJCWlmIChzY3RwX2dldF9r
ZXlsZW4oa2V5MSkpIHsKKwkJCW1lbWNweShrZXlfcHRyLCBrZXkxLT5rZXksIGtleTEtPmtleWxl
bik7CisJCX0KKwl9CisJcmV0dXJuIChuZXdfa2V5KTsKK30KKworCitzY3RwX3NoYXJlZGtleV90
ICoKK3NjdHBfYWxsb2Nfc2hhcmVka2V5KHZvaWQpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqbmV3
X2tleTsKKworCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBfc2hhcmVka2V5X3QgKiwgc2l6ZW9m
KCpuZXdfa2V5KSwKKwkJICAgIFNDVFBfTV9BVVRIX0tZKTsKKwlpZiAobmV3X2tleSA9PSBOVUxM
KSB7CisJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbmV3X2tl
eS0+a2V5aWQgPSAwOworCW5ld19rZXktPmtleSA9IE5VTEw7CisJbmV3X2tleS0+cmVmY291bnQg
PSAxOworCW5ld19rZXktPmRlYWN0aXZhdGVkID0gMDsKKwlyZXR1cm4gKG5ld19rZXkpOworfQor
Cit2b2lkCitzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpCit7CisJ
aWYgKHNrZXkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9D
SEVDS19SRUZDT1VOVCgmc2tleS0+cmVmY291bnQpKSB7CisJCWlmIChza2V5LT5rZXkgIT0gTlVM
TCkKKwkJCXNjdHBfZnJlZV9rZXkoc2tleS0+a2V5KTsKKwkJU0NUUF9GUkVFKHNrZXksIFNDVFBf
TV9BVVRIX0tZKTsKKwl9Cit9CisKK3NjdHBfc2hhcmVka2V5X3QgKgorc2N0cF9maW5kX3NoYXJl
ZGtleShzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5cywgdWludDE2X3Qga2V5X2lkKQor
eworCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7CisKKwlMSVNUX0ZPUkVBQ0goc2tleSwgc2hhcmVk
X2tleXMsIG5leHQpIHsKKwkJaWYgKHNrZXktPmtleWlkID09IGtleV9pZCkKKwkJCXJldHVybiAo
c2tleSk7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKK2ludAorc2N0cF9pbnNlcnRfc2hhcmVk
a2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlzLAorCQkgICAgICBzY3RwX3NoYXJl
ZGtleV90ICpuZXdfc2tleSkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJaWYgKChz
aGFyZWRfa2V5cyA9PSBOVUxMKSB8fCAobmV3X3NrZXkgPT0gTlVMTCkpCisJCXJldHVybiAoRUlO
VkFMKTsKKworCS8qIGluc2VydCBpbnRvIGFuIGVtcHR5IGxpc3Q/ICovCisJaWYgKExJU1RfRU1Q
VFkoc2hhcmVkX2tleXMpKSB7CisJCUxJU1RfSU5TRVJUX0hFQUQoc2hhcmVkX2tleXMsIG5ld19z
a2V5LCBuZXh0KTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyogaW5zZXJ0IGludG8gdGhlIGV4aXN0
aW5nIGxpc3QsIG9yZGVyZWQgYnkga2V5IGlkICovCisJTElTVF9GT1JFQUNIKHNrZXksIHNoYXJl
ZF9rZXlzLCBuZXh0KSB7CisJCWlmIChuZXdfc2tleS0+a2V5aWQgPCBza2V5LT5rZXlpZCkgewor
CQkJLyogaW5zZXJ0IGl0IGJlZm9yZSBoZXJlICovCisJCQlMSVNUX0lOU0VSVF9CRUZPUkUoc2tl
eSwgbmV3X3NrZXksIG5leHQpOworCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIGlmIChuZXdfc2tl
eS0+a2V5aWQgPT0gc2tleS0+a2V5aWQpIHsKKwkJCS8qIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGtl
eSAqLworCQkJLyogdmVyaWZ5IHRoaXMga2V5ICpjYW4qIGJlIHJlcGxhY2VkICovCisJCQlpZiAo
KHNrZXktPmRlYWN0aXZhdGVkKSAmJiAoc2tleS0+cmVmY291bnQgPiAxKSkgeworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkJImNhbid0IHJlcGxhY2Ugc2hhcmVkIGtleSBpZCAl
dVxuIiwKKwkJCQkJbmV3X3NrZXktPmtleWlkKTsKKwkJCQlyZXR1cm4gKEVCVVNZKTsKKwkJCX0K
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkicmVwbGFjaW5nIHNoYXJlZCBrZXkg
aWQgJXVcbiIsCisJCQkJbmV3X3NrZXktPmtleWlkKTsKKwkJCUxJU1RfSU5TRVJUX0JFRk9SRShz
a2V5LCBuZXdfc2tleSwgbmV4dCk7CisJCQlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsKKwkJCXNj
dHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWlmIChMSVNU
X05FWFQoc2tleSwgbmV4dCkgPT0gTlVMTCkgeworCQkJLyogYmVsb25ncyBhdCB0aGUgZW5kIG9m
IHRoZSBsaXN0ICovCisJCQlMSVNUX0lOU0VSVF9BRlRFUihza2V5LCBuZXdfc2tleSwgbmV4dCk7
CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qIHNob3VsZG4ndCByZWFjaCBoZXJlICovCisJ
cmV0dXJuIChFSU5WQUwpOworfQorCit2b2lkCitzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlfaWQpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAq
c2tleTsKKworCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8KKwlza2V5ID0gc2N0cF9maW5kX3No
YXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5X2lkKTsKKworCS8qIGJ1bXAgdGhl
IHJlZiBjb3VudCAqLworCWlmIChza2V5KSB7CisJCWF0b21pY19hZGRfaW50KCZza2V5LT5yZWZj
b3VudCwgMSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMiwKKwkJCSIlczogc3RjYiAlcCBr
ZXkgJXUgcmVmY291bnQgYWNxdWlyZSB0byAlZFxuIiwKKwkJCV9fZnVuY19fLCAodm9pZCAqKXN0
Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQpOworCX0KK30KKwordm9pZAorc2N0cF9hdXRoX2tl
eV9yZWxlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lkLCBpbnQgc29f
bG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwlTQ1RQX1VOVVNFRAorI2VuZGlmCispCit7CisJc2N0cF9zaGFyZWRrZXlfdCAq
c2tleTsKKworCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8KKwlza2V5ID0gc2N0cF9maW5kX3No
YXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5X2lkKTsKKworCS8qIGRlY3JlbWVu
dCB0aGUgcmVmIGNvdW50ICovCisJaWYgKHNrZXkpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FV
VEgyLAorCQkJIiVzOiBzdGNiICVwIGtleSAldSByZWZjb3VudCByZWxlYXNlIHRvICVkXG4iLAor
CQkJX19mdW5jX18sICh2b2lkICopc3RjYiwga2V5X2lkLCBza2V5LT5yZWZjb3VudCk7CisKKwkJ
Lyogc2VlIGlmIGEgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBnZW5lcmF0ZWQgKi8KKwkJaWYgKChz
a2V5LT5yZWZjb3VudCA8PSAyKSAmJiAoc2tleS0+ZGVhY3RpdmF0ZWQpKSB7CisJCQkvKiBub3Rp
ZnkgVUxQIHRoYXQga2V5IGlzIG5vIGxvbmdlciB1c2VkICovCisJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwgc3RjYiwKKwkJCQkJa2V5X2lkLCAwLCBzb19sb2Nr
ZWQpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgyLAorCQkJCSIlczogc3RjYiAlcCBrZXkg
JXUgbm8gbG9uZ2VyIHVzZWQsICVkXG4iLAorCQkJCV9fZnVuY19fLCAodm9pZCAqKXN0Y2IsIGtl
eV9pZCwgc2tleS0+cmVmY291bnQpOworCQl9CisJCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7
CisJfQorfQorCitzdGF0aWMgc2N0cF9zaGFyZWRrZXlfdCAqCitzY3RwX2NvcHlfc2hhcmVka2V5
KGNvbnN0IHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqbmV3
X3NrZXk7CisKKwlpZiAoc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCW5ld19za2V5
ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKKwlpZiAobmV3X3NrZXkgPT0gTlVMTCkKKwkJcmV0
dXJuIChOVUxMKTsKKwlpZiAoc2tleS0+a2V5ICE9IE5VTEwpCisJCW5ld19za2V5LT5rZXkgPSBz
Y3RwX3NldF9rZXkoc2tleS0+a2V5LT5rZXksIHNrZXktPmtleS0+a2V5bGVuKTsKKwllbHNlCisJ
CW5ld19za2V5LT5rZXkgPSBOVUxMOworCW5ld19za2V5LT5rZXlpZCA9IHNrZXktPmtleWlkOwor
CXJldHVybiAobmV3X3NrZXkpOworfQorCitpbnQKK3NjdHBfY29weV9za2V5bGlzdChjb25zdCBz
dHJ1Y3Qgc2N0cF9rZXloZWFkICpzcmMsIHN0cnVjdCBzY3RwX2tleWhlYWQgKmRlc3QpCit7CisJ
c2N0cF9zaGFyZWRrZXlfdCAqc2tleSwgKm5ld19za2V5OworCWludCBjb3VudCA9IDA7CisKKwlp
ZiAoKHNyYyA9PSBOVUxMKSB8fCAoZGVzdCA9PSBOVUxMKSkKKwkJcmV0dXJuICgwKTsKKwlMSVNU
X0ZPUkVBQ0goc2tleSwgc3JjLCBuZXh0KSB7CisJCW5ld19za2V5ID0gc2N0cF9jb3B5X3NoYXJl
ZGtleShza2V5KTsKKwkJaWYgKG5ld19za2V5ICE9IE5VTEwpIHsKKwkJCWlmIChzY3RwX2luc2Vy
dF9zaGFyZWRrZXkoZGVzdCwgbmV3X3NrZXkpKSB7CisJCQkJc2N0cF9mcmVlX3NoYXJlZGtleShu
ZXdfc2tleSk7CisJCQl9IGVsc2UgeworCQkJCWNvdW50Kys7CisJCQl9CisJCX0KKwl9CisJcmV0
dXJuIChjb3VudCk7Cit9CisKKworc2N0cF9obWFjbGlzdF90ICoKK3NjdHBfYWxsb2NfaG1hY2xp
c3QodWludDE2X3QgbnVtX2htYWNzKQoreworCXNjdHBfaG1hY2xpc3RfdCAqbmV3X2xpc3Q7CisJ
aW50IGFsbG9jX3NpemU7CisKKwlhbGxvY19zaXplID0gc2l6ZW9mKCpuZXdfbGlzdCkgKyBudW1f
aG1hY3MgKiBzaXplb2YobmV3X2xpc3QtPmhtYWNbMF0pOworCVNDVFBfTUFMTE9DKG5ld19saXN0
LCBzY3RwX2htYWNsaXN0X3QgKiwgYWxsb2Nfc2l6ZSwKKwkJICAgIFNDVFBfTV9BVVRIX0hMKTsK
KwlpZiAobmV3X2xpc3QgPT0gTlVMTCkgeworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVy
biAoTlVMTCk7CisJfQorCW5ld19saXN0LT5tYXhfYWxnbyA9IG51bV9obWFjczsKKwluZXdfbGlz
dC0+bnVtX2FsZ28gPSAwOworCXJldHVybiAobmV3X2xpc3QpOworfQorCit2b2lkCitzY3RwX2Zy
ZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KQoreworCWlmIChsaXN0ICE9IE5VTEwp
IHsKKwkJU0NUUF9GUkVFKGxpc3QsU0NUUF9NX0FVVEhfSEwpOworCQlsaXN0ID0gTlVMTDsKKwl9
Cit9CisKK2ludAorc2N0cF9hdXRoX2FkZF9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1
aW50MTZfdCBobWFjX2lkKQoreworCWludCBpOworCWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVy
biAoLTEpOworCWlmIChsaXN0LT5udW1fYWxnbyA9PSBsaXN0LT5tYXhfYWxnbykgeworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogSE1BQyBpZCBsaXN0IGZ1bGwsIGlnbm9y
aW5nIGFkZCAldVxuIiwgaG1hY19pZCk7CisJCXJldHVybiAoLTEpOworCX0KKyNpZiBkZWZpbmVk
KFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwlpZiAoKGhtYWNfaWQgIT0gU0NUUF9BVVRIX0hN
QUNfSURfU0hBMSkgJiYKKwkgICAgKGhtYWNfaWQgIT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2
KSkgeworI2Vsc2UKKwlpZiAoaG1hY19pZCAhPSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKSB7Cisj
ZW5kaWYKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIE5vdyBpcyBpdCBhbHJlYWR5IGluIHRoZSBs
aXN0ICovCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBpKyspIHsKKwkJaWYgKGxp
c3QtPmhtYWNbaV0gPT0gaG1hY19pZCkgeworCQkJLyogYWxyZWFkeSBpbiBsaXN0ICovCisJCQly
ZXR1cm4gKC0xKTsKKwkJfQorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsICJTQ1RQOiBh
ZGQgSE1BQyBpZCAldSB0byBsaXN0XG4iLCBobWFjX2lkKTsKKwlsaXN0LT5obWFjW2xpc3QtPm51
bV9hbGdvKytdID0gaG1hY19pZDsKKwlyZXR1cm4gKDApOworfQorCitzY3RwX2htYWNsaXN0X3Qg
Kgorc2N0cF9jb3B5X2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCkKK3sKKwlzY3RwX2ht
YWNsaXN0X3QgKm5ld19saXN0OworCWludCBpOworCisJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmV0
dXJuIChOVUxMKTsKKwkvKiBnZXQgYSBuZXcgbGlzdCAqLworCW5ld19saXN0ID0gc2N0cF9hbGxv
Y19obWFjbGlzdChsaXN0LT5tYXhfYWxnbyk7CisJaWYgKG5ld19saXN0ID09IE5VTEwpCisJCXJl
dHVybiAoTlVMTCk7CisJLyogY29weSBpdCAqLworCW5ld19saXN0LT5tYXhfYWxnbyA9IGxpc3Qt
Pm1heF9hbGdvOworCW5ld19saXN0LT5udW1fYWxnbyA9IGxpc3QtPm51bV9hbGdvOworCWZvciAo
aSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsgaSsrKQorCQluZXdfbGlzdC0+aG1hY1tpXSA9IGxp
c3QtPmhtYWNbaV07CisJcmV0dXJuIChuZXdfbGlzdCk7Cit9CisKK3NjdHBfaG1hY2xpc3RfdCAq
CitzY3RwX2RlZmF1bHRfc3VwcG9ydGVkX2htYWNsaXN0KHZvaWQpCit7CisJc2N0cF9obWFjbGlz
dF90ICpuZXdfbGlzdDsKKworI2lmIGRlZmluZWQoU0NUUF9TVVBQT1JUX0hNQUNfU0hBMjU2KQor
CW5ld19saXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdCgyKTsKKyNlbHNlCisJbmV3X2xpc3QgPSBz
Y3RwX2FsbG9jX2htYWNsaXN0KDEpOworI2VuZGlmCisJaWYgKG5ld19saXN0ID09IE5VTEwpCisJ
CXJldHVybiAoTlVMTCk7CisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJ
LyogV2UgcHJlZmVyIFNIQTI1Niwgc28gbGlzdCBpdCBmaXJzdCAqLworCSh2b2lkKXNjdHBfYXV0
aF9hZGRfaG1hY2lkKG5ld19saXN0LCBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYpOworI2VuZGlm
CisJKHZvaWQpc2N0cF9hdXRoX2FkZF9obWFjaWQobmV3X2xpc3QsIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTEpOworCXJldHVybiAobmV3X2xpc3QpOworfQorCisvKi0KKyAqIEhNQUMgYWxnb3MgYXJl
IGxpc3RlZCBpbiBwcmlvcml0eS9wcmVmZXJlbmNlIG9yZGVyCisgKiBmaW5kIHRoZSBiZXN0IEhN
QUMgaWQgdG8gdXNlIGZvciB0aGUgcGVlciBiYXNlZCBvbiBsb2NhbCBzdXBwb3J0CisgKi8KK3Vp
bnQxNl90CitzY3RwX25lZ290aWF0ZV9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpwZWVyLCBzY3Rw
X2htYWNsaXN0X3QgKmxvY2FsKQoreworCWludCBpLCBqOworCisJaWYgKChsb2NhbCA9PSBOVUxM
KSB8fCAocGVlciA9PSBOVUxMKSkKKwkJcmV0dXJuIChTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEKTsK
KworCWZvciAoaSA9IDA7IGkgPCBwZWVyLT5udW1fYWxnbzsgaSsrKSB7CisJCWZvciAoaiA9IDA7
IGogPCBsb2NhbC0+bnVtX2FsZ287IGorKykgeworCQkJaWYgKHBlZXItPmhtYWNbaV0gPT0gbG9j
YWwtPmhtYWNbal0pIHsKKwkJCQkvKiBmb3VuZCB0aGUgImJlc3QiIG9uZSAqLworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkJIlNDVFA6IG5lZ290aWF0ZWQgcGVlciBITUFDIGlk
ICV1XG4iLAorCQkJCQlwZWVyLT5obWFjW2ldKTsKKwkJCQlyZXR1cm4gKHBlZXItPmhtYWNbaV0p
OworCQkJfQorCQl9CisJfQorCS8qIGRpZG4ndCBmaW5kIG9uZSEgKi8KKwlyZXR1cm4gKFNDVFBf
QVVUSF9ITUFDX0lEX1JTVkQpOworfQorCisvKi0KKyAqIHNlcmlhbGl6ZSB0aGUgSE1BQyBhbGdv
IGxpc3QgYW5kIHJldHVybiBzcGFjZSB1c2VkCisgKiBjYWxsZXIgbXVzdCBndWFyYW50ZWUgcHRy
IGhhcyBhcHByb3ByaWF0ZSBzcGFjZQorICovCitpbnQKK3NjdHBfc2VyaWFsaXplX2htYWNsaXN0
KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCwgdWludDhfdCAqcHRyKQoreworCWludCBpOworCXVpbnQx
Nl90IGhtYWNfaWQ7CisKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJZm9y
IChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBpKyspIHsKKwkJaG1hY19pZCA9IGh0b25zKGxp
c3QtPmhtYWNbaV0pOworCQltZW1jcHkocHRyLCAmaG1hY19pZCwgc2l6ZW9mKGhtYWNfaWQpKTsK
KwkJcHRyICs9IHNpemVvZihobWFjX2lkKTsKKwl9CisJcmV0dXJuIChsaXN0LT5udW1fYWxnbyAq
IHNpemVvZihobWFjX2lkKSk7Cit9CisKK2ludAorc2N0cF92ZXJpZnlfaG1hY19wYXJhbSAoc3Ry
dWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzLCB1aW50MzJfdCBudW1faG1hY3MpCit7CisJ
dWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1faG1hY3M7IGkrKykgeworCQlpZiAo
bnRvaHMoaG1hY3MtPmhtYWNfaWRzW2ldKSA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKSB7CisJ
CQlyZXR1cm4gKDApOworCQl9CisJfQorCXJldHVybiAoLTEpOworfQorCitzY3RwX2F1dGhpbmZv
X3QgKgorc2N0cF9hbGxvY19hdXRoaW5mbyh2b2lkKQoreworCXNjdHBfYXV0aGluZm9fdCAqbmV3
X2F1dGhpbmZvOworCisJU0NUUF9NQUxMT0MobmV3X2F1dGhpbmZvLCBzY3RwX2F1dGhpbmZvX3Qg
Kiwgc2l6ZW9mKCpuZXdfYXV0aGluZm8pLAorCQkgICAgU0NUUF9NX0FVVEhfSUYpOworCisJaWYg
KG5ld19hdXRoaW5mbyA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisJbWVtc2V0KG5ld19hdXRoaW5mbywgMCwgc2l6ZW9mKCpuZXdfYXV0aGlu
Zm8pKTsKKwlyZXR1cm4gKG5ld19hdXRoaW5mbyk7Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9hdXRo
aW5mbyhzY3RwX2F1dGhpbmZvX3QgKmF1dGhpbmZvKQoreworCWlmIChhdXRoaW5mbyA9PSBOVUxM
KQorCQlyZXR1cm47CisKKwlpZiAoYXV0aGluZm8tPnJhbmRvbSAhPSBOVUxMKQorCQlzY3RwX2Zy
ZWVfa2V5KGF1dGhpbmZvLT5yYW5kb20pOworCWlmIChhdXRoaW5mby0+cGVlcl9yYW5kb20gIT0g
TlVMTCkKKwkJc2N0cF9mcmVlX2tleShhdXRoaW5mby0+cGVlcl9yYW5kb20pOworCWlmIChhdXRo
aW5mby0+YXNzb2Nfa2V5ICE9IE5VTEwpCisJCXNjdHBfZnJlZV9rZXkoYXV0aGluZm8tPmFzc29j
X2tleSk7CisJaWYgKGF1dGhpbmZvLT5yZWN2X2tleSAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfa2V5
KGF1dGhpbmZvLT5yZWN2X2tleSk7CisKKwkvKiBXZSBhcmUgTk9UIGR5bmFtaWNhbGx5IGFsbG9j
YXRpbmcgYXV0aGluZm8ncyByaWdodCBub3cuLi4gKi8KKwkvKiBTQ1RQX0ZSRUUoYXV0aGluZm8s
IFNDVFBfTV9BVVRIXz8/KTsgKi8KK30KKworCit1aW50MzJfdAorc2N0cF9nZXRfYXV0aF9jaHVu
a19sZW4odWludDE2X3QgaG1hY19hbGdvKQoreworCWludCBzaXplOworCisJc2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSArIHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFj
X2FsZ28pOworCXJldHVybiAoU0NUUF9TSVpFMzIoc2l6ZSkpOworfQorCit1aW50MzJfdAorc2N0
cF9nZXRfaG1hY19kaWdlc3RfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKK3sKKwlzd2l0Y2ggKGht
YWNfYWxnbykgeworCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKKwkJcmV0dXJuIChTQ1RQ
X0FVVEhfRElHRVNUX0xFTl9TSEExKTsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NI
QTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJcmV0dXJuIChTQ1RQX0FV
VEhfRElHRVNUX0xFTl9TSEEyNTYpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogdW5rbm93biBI
TUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0dXJuICgwKTsKKwl9IC8q
IGVuZCBzd2l0Y2ggKi8KK30KKworc3RhdGljIGlubGluZSBpbnQKK3NjdHBfZ2V0X2htYWNfYmxv
Y2tfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKK3sKKwlzd2l0Y2ggKGhtYWNfYWxnbykgeworCWNh
c2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKKwkJcmV0dXJuICg2NCk7CisjaWYgZGVmaW5lZChT
Q1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTY6
CisJCXJldHVybiAoNjQpOworI2VuZGlmCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgor
CWRlZmF1bHQ6CisJCS8qIHVua25vd24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRoaW5n
ICovCisJCXJldHVybiAoMCk7CisJfSAvKiBlbmQgc3dpdGNoICovCit9CisKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisvKiBfX1VzZXJzcGFjZV9fIFNIQTFfSW5pdCBpcyBkZWZpbmVkIGlu
IGxpYmNyeXB0by5hIChsaWJzc2wtZGV2IG9uIFVidW50dSkgKi8KKyNlbmRpZgorc3RhdGljIHZv
aWQKK3NjdHBfaG1hY19pbml0KHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9oYXNoX2NvbnRleHRf
dCAqY3R4KQoreworCXN3aXRjaCAoaG1hY19hbGdvKSB7CisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19J
RF9TSEExOgorCQlTQ1RQX1NIQTFfSU5JVCgmY3R4LT5zaGExKTsKKwkJYnJlYWs7CisjaWYgZGVm
aW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9T
SEEyNTY6CisJCVNDVFBfU0hBMjU2X0lOSVQoJmN0eC0+c2hhMjU2KTsKKwkJYnJlYWs7CisjZW5k
aWYKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQ6CisJZGVmYXVsdDoKKwkJLyogdW5rbm93
biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0dXJuOworCX0gLyog
ZW5kIHN3aXRjaCAqLworfQorCitzdGF0aWMgdm9pZAorc2N0cF9obWFjX3VwZGF0ZSh1aW50MTZf
dCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAgICB1aW50OF90ICp0ZXh0
LCB1aW50MzJfdCB0ZXh0bGVuKQoreworCXN3aXRjaCAoaG1hY19hbGdvKSB7CisJY2FzZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9TSEExOgorCQlTQ1RQX1NIQTFfVVBEQVRFKCZjdHgtPnNoYTEsIHRleHQs
IHRleHRsZW4pOworCQlicmVhazsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1
NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJU0NUUF9TSEEyNTZfVVBEQVRF
KCZjdHgtPnNoYTI1NiwgdGV4dCwgdGV4dGxlbik7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBT
Q1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgorCWRlZmF1bHQ6CisJCS8qIHVua25vd24gSE1BQyBhbGdv
cml0aG06IGNhbid0IGRvIGFueXRoaW5nICovCisJCXJldHVybjsKKwl9IC8qIGVuZCBzd2l0Y2gg
Ki8KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaG1hY19maW5hbCh1aW50MTZfdCBobWFjX2FsZ28s
IHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAgICB1aW50OF90ICpkaWdlc3QpCit7CisJc3dp
dGNoIChobWFjX2FsZ28pIHsKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTE6CisJCVNDVFBf
U0hBMV9GSU5BTChkaWdlc3QsICZjdHgtPnNoYTEpOworCQlicmVhazsKKyNpZiBkZWZpbmVkKFND
VFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoK
KwkJU0NUUF9TSEEyNTZfRklOQUwoZGlnZXN0LCAmY3R4LT5zaGEyNTYpOworCQlicmVhazsKKyNl
bmRpZgorCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfUlNWRDoKKwlkZWZhdWx0OgorCQkvKiB1bmtu
b3duIEhNQUMgYWxnb3JpdGhtOiBjYW4ndCBkbyBhbnl0aGluZyAqLworCQlyZXR1cm47CisJfSAv
KiBlbmQgc3dpdGNoICovCit9CisKKy8qLQorICogS2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBB
dXRoZW50aWNhdGlvbjogRklQUyAxOTggKFJGQyAyMTA0KQorICoKKyAqIENvbXB1dGUgdGhlIEhN
QUMgZGlnZXN0IHVzaW5nIHRoZSBkZXNpcmVkIGhhc2gga2V5LCB0ZXh0LCBhbmQgSE1BQworICog
YWxnb3JpdGhtLiAgUmVzdWx0aW5nIGRpZ2VzdCBpcyBwbGFjZWQgaW4gJ2RpZ2VzdCcgYW5kIGRp
Z2VzdCBsZW5ndGgKKyAqIGlzIHJldHVybmVkLCBpZiB0aGUgSE1BQyB3YXMgcGVyZm9ybWVkLgor
ICoKKyAqIFdBUk5JTkc6IGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8gc3VwcGx5IHN1ZmZpY2ll
bnQgc3BhY2UgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdGFudCBkaWdlc3QuCisgKi8KK3VpbnQzMl90
CitzY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtl
eWxlbiwKKyAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdl
c3QpCit7CisJdWludDMyX3QgZGlnZXN0bGVuOworCXVpbnQzMl90IGJsb2NrbGVuOworCXNjdHBf
aGFzaF9jb250ZXh0X3QgY3R4OworCXVpbnQ4X3QgaXBhZFsxMjhdLCBvcGFkWzEyOF07CS8qIGtl
eWVkIGhhc2ggaW5uZXIvb3V0ZXIgcGFkcyAqLworCXVpbnQ4X3QgdGVtcFtTQ1RQX0FVVEhfRElH
RVNUX0xFTl9NQVhdOworCXVpbnQzMl90IGk7CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIG1hdGVy
aWFsIGFuZCBsZW5ndGggKi8KKwlpZiAoKGtleSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApIHx8
ICh0ZXh0ID09IE5VTEwpIHx8CisJICAgICh0ZXh0bGVuID09IDApIHx8IChkaWdlc3QgPT0gTlVM
TCkpIHsKKwkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0IG9yIGRpZ2Vz
dCBzdG9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwkvKiB2YWxpZGF0ZSB0aGUgaG1hYyBhbGdv
IGFuZCBnZXQgdGhlIGRpZ2VzdCBsZW5ndGggKi8KKwlkaWdlc3RsZW4gPSBzY3RwX2dldF9obWFj
X2RpZ2VzdF9sZW4oaG1hY19hbGdvKTsKKwlpZiAoZGlnZXN0bGVuID09IDApCisJCXJldHVybiAo
MCk7CisKKwkvKiBoYXNoIHRoZSBrZXkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGhhc2ggYmxv
Y2sgc2l6ZSAqLworCWJsb2NrbGVuID0gc2N0cF9nZXRfaG1hY19ibG9ja19sZW4oaG1hY19hbGdv
KTsKKwlpZiAoa2V5bGVuID4gYmxvY2tsZW4pIHsKKwkJc2N0cF9obWFjX2luaXQoaG1hY19hbGdv
LCAmY3R4KTsKKwkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtleSwga2V5bGVu
KTsKKwkJc2N0cF9obWFjX2ZpbmFsKGhtYWNfYWxnbywgJmN0eCwgdGVtcCk7CisJCS8qIHNldCB0
aGUgaGFzaGVkIGtleSBhcyB0aGUga2V5ICovCisJCWtleWxlbiA9IGRpZ2VzdGxlbjsKKwkJa2V5
ID0gdGVtcDsKKwl9CisJLyogaW5pdGlhbGl6ZSB0aGUgaW5uZXIvb3V0ZXIgcGFkcyB3aXRoIHRo
ZSBrZXkgYW5kICJhcHBlbmQiIHplcm9lcyAqLworCW1lbXNldChpcGFkLCAwLCBibG9ja2xlbik7
CisJbWVtc2V0KG9wYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1jcHkoaXBhZCwga2V5LCBrZXlsZW4p
OworCW1lbWNweShvcGFkLCBrZXksIGtleWxlbik7CisKKwkvKiBYT1IgdGhlIGtleSB3aXRoIGlw
YWQgYW5kIG9wYWQgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IGJsb2NrbGVuOyBpKyspIHsK
KwkJaXBhZFtpXSBePSAweDM2OworCQlvcGFkW2ldIF49IDB4NWM7CisJfQorCisJLyogcGVyZm9y
bSBpbm5lciBoYXNoICovCisJc2N0cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKKwlzY3Rw
X2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgaXBhZCwgYmxvY2tsZW4pOworCXNjdHBfaG1h
Y191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZXh0LCB0ZXh0bGVuKTsKKwlzY3RwX2htYWNfZmlu
YWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKworCS8qIHBlcmZvcm0gb3V0ZXIgaGFzaCAqLwor
CXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7CisJc2N0cF9obWFjX3VwZGF0ZShobWFj
X2FsZ28sICZjdHgsIG9wYWQsIGJsb2NrbGVuKTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxn
bywgJmN0eCwgdGVtcCwgZGlnZXN0bGVuKTsKKwlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAm
Y3R4LCBkaWdlc3QpOworCisJcmV0dXJuIChkaWdlc3RsZW4pOworfQorCisvKiBtYnVmIHZlcnNp
b24gKi8KK3VpbnQzMl90CitzY3RwX2htYWNfbSh1aW50MTZfdCBobWFjX2FsZ28sIHVpbnQ4X3Qg
KmtleSwgdWludDMyX3Qga2V5bGVuLAorICAgIHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBtX29m
ZnNldCwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCB0cmFpbGVyKQoreworCXVpbnQzMl90IGRp
Z2VzdGxlbjsKKwl1aW50MzJfdCBibG9ja2xlbjsKKwlzY3RwX2hhc2hfY29udGV4dF90IGN0eDsK
Kwl1aW50OF90IGlwYWRbMTI4XSwgb3BhZFsxMjhdOwkvKiBrZXllZCBoYXNoIGlubmVyL291dGVy
IHBhZHMgKi8KKwl1aW50OF90IHRlbXBbU0NUUF9BVVRIX0RJR0VTVF9MRU5fTUFYXTsKKwl1aW50
MzJfdCBpOworCXN0cnVjdCBtYnVmICptX3RtcDsKKworCS8qIHNhbml0eSBjaGVjayB0aGUgbWF0
ZXJpYWwgYW5kIGxlbmd0aCAqLworCWlmICgoa2V5ID09IE5VTEwpIHx8IChrZXlsZW4gPT0gMCkg
fHwgKG0gPT0gTlVMTCkgfHwgKGRpZ2VzdCA9PSBOVUxMKSkgeworCQkvKiBjYW4ndCBkbyBITUFD
IHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICovCisJCXJldHVybiAoMCk7
CisJfQorCS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0
aCAqLworCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOwor
CWlmIChkaWdlc3RsZW4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCS8qIGhhc2ggdGhlIGtleSBp
ZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICovCisJYmxvY2tsZW4gPSBz
Y3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOworCWlmIChrZXlsZW4gPiBibG9ja2xl
bikgeworCQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCQlzY3RwX2htYWNfdXBk
YXRlKGhtYWNfYWxnbywgJmN0eCwga2V5LCBrZXlsZW4pOworCQlzY3RwX2htYWNfZmluYWwoaG1h
Y19hbGdvLCAmY3R4LCB0ZW1wKTsKKwkJLyogc2V0IHRoZSBoYXNoZWQga2V5IGFzIHRoZSBrZXkg
Ki8KKwkJa2V5bGVuID0gZGlnZXN0bGVuOworCQlrZXkgPSB0ZW1wOworCX0KKwkvKiBpbml0aWFs
aXplIHRoZSBpbm5lci9vdXRlciBwYWRzIHdpdGggdGhlIGtleSBhbmQgImFwcGVuZCIgemVyb2Vz
ICovCisJbWVtc2V0KGlwYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1zZXQob3BhZCwgMCwgYmxvY2ts
ZW4pOworCW1lbWNweShpcGFkLCBrZXksIGtleWxlbik7CisJbWVtY3B5KG9wYWQsIGtleSwga2V5
bGVuKTsKKworCS8qIFhPUiB0aGUga2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KKwlm
b3IgKGkgPSAwOyBpIDwgYmxvY2tsZW47IGkrKykgeworCQlpcGFkW2ldIF49IDB4MzY7CisJCW9w
YWRbaV0gXj0gMHg1YzsKKwl9CisKKwkvKiBwZXJmb3JtIGlubmVyIGhhc2ggKi8KKwlzY3RwX2ht
YWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAm
Y3R4LCBpcGFkLCBibG9ja2xlbik7CisJLyogZmluZCB0aGUgY29ycmVjdCBzdGFydGluZyBtYnVm
IGFuZCBvZmZzZXQgKGdldCBzdGFydCBvZiB0ZXh0KSAqLworCW1fdG1wID0gbTsKKwl3aGlsZSAo
KG1fdG1wICE9IE5VTEwpICYmIChtX29mZnNldCA+PSAodWludDMyX3QpIFNDVFBfQlVGX0xFTiht
X3RtcCkpKSB7CisJCW1fb2Zmc2V0IC09IFNDVFBfQlVGX0xFTihtX3RtcCk7CisJCW1fdG1wID0g
U0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQorCS8qIG5vdyB1c2UgdGhlIHJlc3Qgb2YgdGhlIG1i
dWYgY2hhaW4gZm9yIHRoZSB0ZXh0ICovCisJd2hpbGUgKG1fdG1wICE9IE5VTEwpIHsKKwkJaWYg
KChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBOVUxMKSAmJiB0cmFpbGVyKSB7CisJCQlzY3RwX2ht
YWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zm
c2V0LAorCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtICh0cmFpbGVyK21fb2Zmc2V0KSk7CisJ
CX0gZWxzZSB7CisJCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3Rt
cCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAorCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtIG1f
b2Zmc2V0KTsKKwkJfQorCisJCS8qIGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZv
ciB0aGUgZmlyc3QgbWJ1ZiAqLworCQltX29mZnNldCA9IDA7CisJCW1fdG1wID0gU0NUUF9CVUZf
TkVYVChtX3RtcCk7CisJfQorCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIHRlbXAp
OworCisJLyogcGVyZm9ybSBvdXRlciBoYXNoICovCisJc2N0cF9obWFjX2luaXQoaG1hY19hbGdv
LCAmY3R4KTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgb3BhZCwgYmxvY2ts
ZW4pOworCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZW1wLCBkaWdlc3RsZW4p
OworCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIGRpZ2VzdCk7CisKKwlyZXR1cm4g
KGRpZ2VzdGxlbik7Cit9CisKKy8qLQorICogdmVyaWZ5IHRoZSBITUFDIGRpZ2VzdCB1c2luZyB0
aGUgZGVzaXJlZCBoYXNoIGtleSwgdGV4dCwgYW5kIEhNQUMKKyAqIGFsZ29yaXRobS4KKyAqIFJl
dHVybnMgLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAqLworaW50CitzY3RwX3ZlcmlmeV9o
bWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCisg
ICAgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwKKyAgICB1aW50OF90ICpkaWdlc3Qs
IHVpbnQzMl90IGRpZ2VzdGxlbikKK3sKKwl1aW50MzJfdCBsZW47CisJdWludDhfdCB0ZW1wW1ND
VFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBzYW5pdHkgY2hlY2sgdGhlIG1hdGVyaWFs
IGFuZCBsZW5ndGggKi8KKwlpZiAoKGtleSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApIHx8CisJ
ICAgICh0ZXh0ID09IE5VTEwpIHx8ICh0ZXh0bGVuID09IDApIHx8IChkaWdlc3QgPT0gTlVMTCkp
IHsKKwkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0IG9yIGRpZ2VzdCAq
LworCQlyZXR1cm4gKC0xKTsKKwl9CisJbGVuID0gc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKGht
YWNfYWxnbyk7CisJaWYgKChsZW4gPT0gMCkgfHwgKGRpZ2VzdGxlbiAhPSBsZW4pKQorCQlyZXR1
cm4gKC0xKTsKKworCS8qIGNvbXB1dGUgdGhlIGV4cGVjdGVkIGhhc2ggKi8KKwlpZiAoc2N0cF9o
bWFjKGhtYWNfYWxnbywga2V5LCBrZXlsZW4sIHRleHQsIHRleHRsZW4sIHRlbXApICE9IGxlbikK
KwkJcmV0dXJuICgtMSk7CisKKwlpZiAobWVtY21wKGRpZ2VzdCwgdGVtcCwgZGlnZXN0bGVuKSAh
PSAwKQorCQlyZXR1cm4gKC0xKTsKKwllbHNlCisJCXJldHVybiAoMCk7Cit9CisKKworLyoKKyAq
IGNvbXB1dGVzIHRoZSByZXF1ZXN0ZWQgSE1BQyB1c2luZyBhIGtleSBzdHJ1Y3QgKHdoaWNoIG1h
eSBiZSBtb2RpZmllZCBpZgorICogdGhlIGtleWxlbiBleGNlZWRzIHRoZSBITUFDIGJsb2NrIGxl
bikuCisgKi8KK3VpbnQzMl90CitzY3RwX2NvbXB1dGVfaG1hYyh1aW50MTZfdCBobWFjX2FsZ28s
IHNjdHBfa2V5X3QgKmtleSwgdWludDhfdCAqdGV4dCwKKyAgICB1aW50MzJfdCB0ZXh0bGVuLCB1
aW50OF90ICpkaWdlc3QpCit7CisJdWludDMyX3QgZGlnZXN0bGVuOworCXVpbnQzMl90IGJsb2Nr
bGVuOworCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OworCXVpbnQ4X3QgdGVtcFtTQ1RQX0FVVEhf
RElHRVNUX0xFTl9NQVhdOworCisJLyogc2FuaXR5IGNoZWNrICovCisJaWYgKChrZXkgPT0gTlVM
TCkgfHwgKHRleHQgPT0gTlVMTCkgfHwgKHRleHRsZW4gPT0gMCkgfHwKKwkgICAgKGRpZ2VzdCA9
PSBOVUxMKSkgeworCQkvKiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3Ig
ZGlnZXN0IHN0b3JlICovCisJCXJldHVybiAoMCk7CisJfQorCS8qIHZhbGlkYXRlIHRoZSBobWFj
IGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLworCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0
X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOworCWlmIChkaWdlc3RsZW4gPT0gMCkKKwkJcmV0
dXJuICgwKTsKKworCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFz
aCBibG9jayBzaXplICovCisJYmxvY2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFj
X2FsZ28pOworCWlmIChrZXktPmtleWxlbiA+IGJsb2NrbGVuKSB7CisJCXNjdHBfaG1hY19pbml0
KGhtYWNfYWxnbywgJmN0eCk7CisJCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCBr
ZXktPmtleSwga2V5LT5rZXlsZW4pOworCQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4
LCB0ZW1wKTsKKwkJLyogc2F2ZSB0aGUgaGFzaGVkIGtleSBhcyB0aGUgbmV3IGtleSAqLworCQlr
ZXktPmtleWxlbiA9IGRpZ2VzdGxlbjsKKwkJbWVtY3B5KGtleS0+a2V5LCB0ZW1wLCBrZXktPmtl
eWxlbik7CisJfQorCXJldHVybiAoc2N0cF9obWFjKGhtYWNfYWxnbywga2V5LT5rZXksIGtleS0+
a2V5bGVuLCB0ZXh0LCB0ZXh0bGVuLAorCSAgICBkaWdlc3QpKTsKK30KKworLyogbWJ1ZiB2ZXJz
aW9uICovCit1aW50MzJfdAorc2N0cF9jb21wdXRlX2htYWNfbSh1aW50MTZfdCBobWFjX2FsZ28s
IHNjdHBfa2V5X3QgKmtleSwgc3RydWN0IG1idWYgKm0sCisgICAgdWludDMyX3QgbV9vZmZzZXQs
IHVpbnQ4X3QgKmRpZ2VzdCkKK3sKKwl1aW50MzJfdCBkaWdlc3RsZW47CisJdWludDMyX3QgYmxv
Y2tsZW47CisJc2N0cF9oYXNoX2NvbnRleHRfdCBjdHg7CisJdWludDhfdCB0ZW1wW1NDVFBfQVVU
SF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8KKwlpZiAoKGtleSA9PSBO
VUxMKSB8fCAobSA9PSBOVUxMKSB8fCAoZGlnZXN0ID09IE5VTEwpKSB7CisJCS8qIGNhbid0IGRv
IEhNQUMgd2l0aCBlbXB0eSBrZXkgb3IgdGV4dCBvciBkaWdlc3Qgc3RvcmUgKi8KKwkJcmV0dXJu
ICgwKTsKKwl9CisJLyogdmFsaWRhdGUgdGhlIGhtYWMgYWxnbyBhbmQgZ2V0IHRoZSBkaWdlc3Qg
bGVuZ3RoICovCisJZGlnZXN0bGVuID0gc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKGhtYWNfYWxn
byk7CisJaWYgKGRpZ2VzdGxlbiA9PSAwKQorCQlyZXR1cm4gKDApOworCisJLyogaGFzaCB0aGUg
a2V5IGlmIGl0IGlzIGxvbmdlciB0aGFuIHRoZSBoYXNoIGJsb2NrIHNpemUgKi8KKwlibG9ja2xl
biA9IHNjdHBfZ2V0X2htYWNfYmxvY2tfbGVuKGhtYWNfYWxnbyk7CisJaWYgKGtleS0+a2V5bGVu
ID4gYmxvY2tsZW4pIHsKKwkJc2N0cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKKwkJc2N0
cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtleS0+a2V5LCBrZXktPmtleWxlbik7CisJ
CXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIHRlbXApOworCQkvKiBzYXZlIHRoZSBo
YXNoZWQga2V5IGFzIHRoZSBuZXcga2V5ICovCisJCWtleS0+a2V5bGVuID0gZGlnZXN0bGVuOwor
CQltZW1jcHkoa2V5LT5rZXksIHRlbXAsIGtleS0+a2V5bGVuKTsKKwl9CisJcmV0dXJuIChzY3Rw
X2htYWNfbShobWFjX2FsZ28sIGtleS0+a2V5LCBrZXktPmtleWxlbiwgbSwgbV9vZmZzZXQsIGRp
Z2VzdCwgMCkpOworfQorCitpbnQKK3NjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2ht
YWNsaXN0X3QgKmxpc3QsIHVpbnQxNl90IGlkKQoreworCWludCBpOworCisJaWYgKChsaXN0ID09
IE5VTEwpIHx8IChpZCA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEKSkKKwkJcmV0dXJuICgwKTsK
KworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsgaSsrKQorCQlpZiAobGlzdC0+aG1h
Y1tpXSA9PSBpZCkKKwkJCXJldHVybiAoMSk7CisKKwkvKiBub3QgaW4gdGhlIGxpc3QgKi8KKwly
ZXR1cm4gKDApOworfQorCisKKy8qLQorICogY2xlYXIgYW55IGNhY2hlZCBrZXkocykgaWYgdGhl
eSBtYXRjaCB0aGUgZ2l2ZW4ga2V5IGlkIG9uIGFuIGFzc29jaWF0aW9uLgorICogdGhlIGNhY2hl
ZCBrZXkocykgd2lsbCBiZSByZWNvbXB1dGVkIGFuZCByZS1jYWNoZWQgYXQgbmV4dCB1c2UuCisg
KiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkgaGVsZAorICovCit2b2lkCitzY3RwX2NsZWFy
X2NhY2hlZGtleXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKK3sKKwlp
ZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5h
dXRoaW5mby5hc3NvY19rZXlpZCkgeworCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGlu
Zm8uYXNzb2Nfa2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkgPSBOVUxMOwor
CX0KKwlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkKSB7CisJCXNj
dHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSk7CisJCXN0Y2ItPmFzb2Mu
YXV0aGluZm8ucmVjdl9rZXkgPSBOVUxMOworCX0KK30KKworLyotCisgKiBjbGVhciBhbnkgY2Fj
aGVkIGtleShzKSBpZiB0aGV5IG1hdGNoIHRoZSBnaXZlbiBrZXkgaWQgZm9yIGFsbCBhc3NvY3Mg
b24KKyAqIGFuIGVuZHBvaW50LgorICogQVNTVU1FUyBJTlBfV0xPQ0sgaXMgYWxyZWFkeSBoZWxk
CisgKi8KK3ZvaWQKK3NjdHBfY2xlYXJfY2FjaGVka2V5c19lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCB1aW50MTZfdCBrZXlpZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisKKwlpZiAo
aW5wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGNsZWFyIHRoZSBjYWNoZWQga2V5cyBvbiBh
bGwgYXNzb2NzIG9uIHRoaXMgaW5zdGFuY2UgKi8KKwlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+
c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwga2V5aWQpOworCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJfQorfQorCisvKi0KKyAqIGRlbGV0ZSBhIHNoYXJlZCBrZXkgZnJvbSBhbiBhc3Nv
Y2lhdGlvbgorICogQVNTVU1FUyBUQ0JfTE9DSyBpcyBhbHJlYWR5IGhlbGQKKyAqLworaW50Citz
Y3RwX2RlbGV0ZV9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlp
ZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJ
cmV0dXJuICgtMSk7CisKKwkvKiBpcyB0aGUga2V5aWQgdGhlIGFzc29jIGFjdGl2ZSBzZW5kaW5n
IGtleSAqLworCWlmIChrZXlpZCA9PSBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCkK
KwkJcmV0dXJuICgtMSk7CisKKwkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCisJc2tleSA9IHNj
dHBfZmluZF9zaGFyZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMsIGtleWlkKTsKKwlpZiAo
c2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGFyZSB0aGVyZSBvdGhlciByZWZj
b3VudCBob2xkZXJzIG9uIHRoZSBrZXk/ICovCisJaWYgKHNrZXktPnJlZmNvdW50ID4gMSkKKwkJ
cmV0dXJuICgtMSk7CisKKwkvKiByZW1vdmUgaXQgKi8KKwlMSVNUX1JFTU9WRShza2V5LCBuZXh0
KTsKKwlzY3RwX2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBmcmVlcyBza2V5LT5rZXkgYXMgd2Vs
bCAqLworCisJLyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICovCisJc2N0cF9jbGVhcl9jYWNoZWRr
ZXlzKHN0Y2IsIGtleWlkKTsKKwlyZXR1cm4gKDApOworfQorCisvKi0KKyAqIGRlbGV0ZXMgYSBz
aGFyZWQga2V5IGZyb20gdGhlIGVuZHBvaW50CisgKiBBU1NVTUVTIElOUF9XTE9DSyBpcyBhbHJl
YWR5IGhlbGQKKyAqLworaW50CitzY3RwX2RlbGV0ZV9zaGFyZWRrZXlfZXAoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsK
KworCWlmIChpbnAgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBpcyB0aGUga2V5aWQg
dGhlIGFjdGl2ZSBzZW5kaW5nIGtleSBvbiB0aGUgZW5kcG9pbnQgKi8KKwlpZiAoa2V5aWQgPT0g
aW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQpCisJCXJldHVybiAoLTEpOworCisJLyogZG9lcyB0
aGUga2V5IGV4aXN0PyAqLworCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZpbnAtPnNjdHBf
ZXAuc2hhcmVkX2tleXMsIGtleWlkKTsKKwlpZiAoc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKC0x
KTsKKworCS8qIGVuZHBvaW50IGtleXMgYXJlIG5vdCByZWZjb3VudGVkICovCisKKwkvKiByZW1v
dmUgaXQgKi8KKwlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsKKwlzY3RwX2ZyZWVfc2hhcmVka2V5
KHNrZXkpOwkvKiBmcmVlcyBza2V5LT5rZXkgYXMgd2VsbCAqLworCisJLyogY2xlYXIgYW55IGNh
Y2hlZCBrZXlzICovCisJc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKGlucCwga2V5aWQpOworCXJl
dHVybiAoMCk7Cit9CisKKy8qLQorICogc2V0IHRoZSBhY3RpdmUga2V5IG9uIGFuIGFzc29jaWF0
aW9uCisgKiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBf
YXV0aF9zZXRhY3RpdmVrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkK
K3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5ID0gTlVMTDsKKworCS8qIGZpbmQgdGhlIGtleSBv
biB0aGUgYXNzb2MgKi8KKwlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5z
aGFyZWRfa2V5cywga2V5aWQpOworCWlmIChza2V5ID09IE5VTEwpIHsKKwkJLyogdGhhdCBrZXkg
ZG9lc24ndCBleGlzdCAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKChza2V5LT5kZWFjdGl2
YXRlZCkgJiYgKHNrZXktPnJlZmNvdW50ID4gMSkpIHsKKwkJLyogY2FuJ3QgcmVhY3RpdmF0ZSBh
IGRlYWN0aXZhdGVkIGtleSB3aXRoIG90aGVyIHJlZmNvdW50cyAqLworCQlyZXR1cm4gKC0xKTsK
Kwl9CisKKwkvKiBzZXQgdGhlIChuZXcpIGFjdGl2ZSBrZXkgKi8KKwlzdGNiLT5hc29jLmF1dGhp
bmZvLmFjdGl2ZV9rZXlpZCA9IGtleWlkOworCS8qIHJlc2V0IHRoZSBkZWFjdGl2YXRlZCBmbGFn
ICovCisJc2tleS0+ZGVhY3RpdmF0ZWQgPSAwOworCisJcmV0dXJuICgwKTsKK30KKworLyotCisg
KiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24gYW4gZW5kcG9pbnQKKyAqIEFTU1VNRVMgSU5QX1dMT0NL
IGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBfYXV0aF9zZXRhY3RpdmVrZXlfZXAoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpCit7CisJc2N0cF9zaGFyZWRrZXlf
dCAqc2tleTsKKworCS8qIGZpbmQgdGhlIGtleSAqLworCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVk
a2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlkKTsKKwlpZiAoc2tleSA9PSBOVUxM
KSB7CisJCS8qIHRoYXQga2V5IGRvZXNuJ3QgZXhpc3QgKi8KKwkJcmV0dXJuICgtMSk7CisJfQor
CWlucC0+c2N0cF9lcC5kZWZhdWx0X2tleWlkID0ga2V5aWQ7CisJcmV0dXJuICgwKTsKK30KKwor
LyotCisgKiBkZWFjdGl2YXRlcyBhIHNoYXJlZCBrZXkgZnJvbSB0aGUgYXNzb2NpYXRpb24KKyAq
IEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBfZGVhY3Rf
c2hhcmVka2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpCit7CisJc2N0
cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCWlmIChzdGNiID09IE5VTEwpCisJCXJldHVybiAoLTEp
OworCisJLyogaXMgdGhlIGtleWlkIHRoZSBhc3NvYyBhY3RpdmUgc2VuZGluZyBrZXkgKi8KKwlp
ZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQpCisJCXJldHVybiAo
LTEpOworCisJLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLworCXNrZXkgPSBzY3RwX2ZpbmRfc2hh
cmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlpZCk7CisJaWYgKHNrZXkgPT0gTlVM
TCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBhcmUgdGhlcmUgb3RoZXIgcmVmY291bnQgaG9sZGVy
cyBvbiB0aGUga2V5PyAqLworCWlmIChza2V5LT5yZWZjb3VudCA9PSAxKSB7CisJCS8qIG5vIG90
aGVyIHVzZXJzLCBzZW5kIGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIGtleSAqLworCQlzY3RwX3Vs
cF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwgc3RjYiwga2V5aWQsIDAsCisJCQkJ
U0NUUF9TT19MT0NLRUQpOworCX0KKworCS8qIG1hcmsgdGhlIGtleSBhcyBkZWFjdGl2YXRlZCAq
LworCXNrZXktPmRlYWN0aXZhdGVkID0gMTsKKworCXJldHVybiAoMCk7Cit9CisKKy8qLQorICog
ZGVhY3RpdmF0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVuZHBvaW50CisgKiBBU1NVTUVTIElO
UF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKKyAqLworaW50CitzY3RwX2RlYWN0X3NoYXJlZGtleV9l
cChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCkKK3sKKwlzY3RwX3NoYXJl
ZGtleV90ICpza2V5OworCisJaWYgKGlucCA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8q
IGlzIHRoZSBrZXlpZCB0aGUgYWN0aXZlIHNlbmRpbmcga2V5IG9uIHRoZSBlbmRwb2ludCAqLwor
CWlmIChrZXlpZCA9PSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9rZXlpZCkKKwkJcmV0dXJuICgtMSk7
CisKKwkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCisJc2tleSA9IHNjdHBfZmluZF9zaGFyZWRr
ZXkoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywga2V5aWQpOworCWlmIChza2V5ID09IE5VTEwp
CisJCXJldHVybiAoLTEpOworCisJLyogZW5kcG9pbnQga2V5cyBhcmUgbm90IHJlZmNvdW50ZWQg
Ki8KKworCS8qIHJlbW92ZSBpdCAqLworCUxJU1RfUkVNT1ZFKHNrZXksIG5leHQpOworCXNjdHBf
ZnJlZV9zaGFyZWRrZXkoc2tleSk7CS8qIGZyZWVzIHNrZXktPmtleSBhcyB3ZWxsICovCisKKwly
ZXR1cm4gKDApOworfQorCisvKgorICogZ2V0IGxvY2FsIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRl
cnMgZnJvbSBjb29raWUgKGZyb20gSU5JVC1BQ0spCisgKi8KK3ZvaWQKK3NjdHBfYXV0aF9nZXRf
Y29va2llX3BhcmFtcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLAorICAg
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQoreworCXN0cnVjdCBzY3RwX3BhcmFt
aGRyICpwaGRyLCB0bXBfcGFyYW07CisJdWludDE2X3QgcGxlbiwgcHR5cGU7CisJdWludDhfdCBy
YW5kb21fc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJc3RydWN0IHNjdHBfYXV0aF9y
YW5kb20gKnBfcmFuZG9tID0gTlVMTDsKKwl1aW50MTZfdCByYW5kb21fbGVuID0gMDsKKwl1aW50
OF90IGhtYWNzX3N0b3JlW1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOworCXN0cnVjdCBzY3RwX2F1
dGhfaG1hY19hbGdvICpobWFjcyA9IE5VTEw7CisJdWludDE2X3QgaG1hY3NfbGVuID0gMDsKKwl1
aW50OF90IGNodW5rc19zdG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3Qgc2N0
cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rcyA9IE5VTEw7CisJdWludDE2X3QgbnVtX2NodW5rcyA9
IDA7CisJc2N0cF9rZXlfdCAqbmV3X2tleTsKKwl1aW50MzJfdCBrZXlsZW47CisKKwkvKiBjb252
ZXJ0IHRvIHVwcGVyIGJvdW5kICovCisJbGVuZ3RoICs9IG9mZnNldDsKKworCXBoZHIgPSAoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKKwkgICAgc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKKwl3aGlsZSAo
cGhkciAhPSBOVUxMKSB7CisJCXB0eXBlID0gbnRvaHMocGhkci0+cGFyYW1fdHlwZSk7CisJCXBs
ZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOworCisJCWlmICgocGxlbiA9PSAwKSB8fCAo
b2Zmc2V0ICsgcGxlbiA+IGxlbmd0aCkpCisJCQlicmVhazsKKworCQlpZiAocHR5cGUgPT0gU0NU
UF9SQU5ET00pIHsKKwkJCWlmIChwbGVuID4gc2l6ZW9mKHJhbmRvbV9zdG9yZSkpCisJCQkJYnJl
YWs7CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJCQkgICAgKHN0
cnVjdCBzY3RwX3BhcmFtaGRyICopcmFuZG9tX3N0b3JlLCBwbGVuKTsKKwkJCWlmIChwaGRyID09
IE5VTEwpCisJCQkJcmV0dXJuOworCQkJLyogc2F2ZSB0aGUgcmFuZG9tIGFuZCBsZW5ndGggZm9y
IHRoZSBrZXkgKi8KKwkJCXBfcmFuZG9tID0gKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICopcGhk
cjsKKwkJCXJhbmRvbV9sZW4gPSBwbGVuIC0gc2l6ZW9mKCpwX3JhbmRvbSk7CisJCX0gZWxzZSBp
ZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXVpbnQxNl90IG51bV9obWFjczsKKwkJ
CXVpbnQxNl90IGk7CisKKwkJCWlmIChwbGVuID4gc2l6ZW9mKGhtYWNzX3N0b3JlKSkKKwkJCQli
cmVhazsKKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAo
c3RydWN0IHNjdHBfcGFyYW1oZHIgKilobWFjc19zdG9yZSwgcGxlbik7CisJCQlpZiAocGhkciA9
PSBOVUxMKQorCQkJCXJldHVybjsKKwkJCS8qIHNhdmUgdGhlIGhtYWNzIGxpc3QgYW5kIG51bSBm
b3IgdGhlIGtleSAqLworCQkJaG1hY3MgPSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKilw
aGRyOworCQkJaG1hY3NfbGVuID0gcGxlbiAtIHNpemVvZigqaG1hY3MpOworCQkJbnVtX2htYWNz
ID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGhtYWNzLT5obWFjX2lkc1swXSk7CisJCQlpZiAoc3RjYi0+
YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKQorCQkJCXNjdHBfZnJlZV9obWFjbGlzdChzdGNiLT5h
c29jLmxvY2FsX2htYWNzKTsKKwkJCXN0Y2ItPmFzb2MubG9jYWxfaG1hY3MgPSBzY3RwX2FsbG9j
X2htYWNsaXN0KG51bV9obWFjcyk7CisJCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBO
VUxMKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG51bV9obWFjczsgaSsrKSB7CisJCQkJCSh2b2lk
KXNjdHBfYXV0aF9hZGRfaG1hY2lkKHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MsCisJCQkJCSAgICBu
dG9ocyhobWFjcy0+aG1hY19pZHNbaV0pKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAocHR5
cGUgPT0gU0NUUF9DSFVOS19MSVNUKSB7CisJCQlpbnQgaTsKKworCQkJaWYgKHBsZW4gPiBzaXpl
b2YoY2h1bmtzX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3Bh
cmFtKG0sIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiljaHVua3Nfc3Rv
cmUsIHBsZW4pOworCQkJaWYgKHBoZHIgPT0gTlVMTCkKKwkJCQlyZXR1cm47CisJCQljaHVua3Mg
PSAoc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICopcGhkcjsKKwkJCW51bV9jaHVua3MgPSBw
bGVuIC0gc2l6ZW9mKCpjaHVua3MpOworCQkJLyogc2F2ZSBjaHVua3MgbGlzdCBhbmQgbnVtIGZv
ciB0aGUga2V5ICovCisJCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxM
KQorCQkJCXNjdHBfY2xlYXJfY2h1bmtsaXN0KHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3Mp
OworCQkJZWxzZQorCQkJCXN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MgPSBzY3RwX2FsbG9j
X2NodW5rbGlzdCgpOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgeworCQkJ
CSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoY2h1bmtzLT5jaHVua190eXBlc1tpXSwKKwkJCQkg
ICAgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyk7CisJCQl9CisJCX0KKwkJLyogZ2V0IG5l
eHQgcGFyYW1ldGVyICovCisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwkJaWYgKG9m
ZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgPiBsZW5ndGgpCisJCQlicmVhazsK
KwkJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0
LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLAorCQkgICAgKHVpbnQ4X3QgKikmdG1wX3Bh
cmFtKTsKKwl9CisJLyogY29uY2F0ZW5hdGUgdGhlIGZ1bGwgcmFuZG9tIGtleSAqLworCWtleWxl
biA9IHNpemVvZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbiArIHNpemVvZigqaG1hY3MpICsgaG1h
Y3NfbGVuOworCWlmIChjaHVua3MgIT0gTlVMTCkgeworCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVu
a3MpICsgbnVtX2NodW5rczsKKwl9CisJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7
CisJaWYgKG5ld19rZXkgIT0gTlVMTCkgeworCQkvKiBjb3B5IGluIHRoZSBSQU5ET00gKi8KKwkJ
aWYgKHBfcmFuZG9tICE9IE5VTEwpIHsKKwkJCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsg
cmFuZG9tX2xlbjsKKwkJCW1lbWNweShuZXdfa2V5LT5rZXksIHBfcmFuZG9tLCBrZXlsZW4pOwor
CQl9IGVsc2UgeworCQkJa2V5bGVuID0gMDsKKwkJfQorCQkvKiBhcHBlbmQgaW4gdGhlIEFVVEgg
Y2h1bmtzICovCisJCWlmIChjaHVua3MgIT0gTlVMTCkgeworCQkJbWVtY3B5KG5ld19rZXktPmtl
eSArIGtleWxlbiwgY2h1bmtzLAorCQkJICAgICAgIHNpemVvZigqY2h1bmtzKSArIG51bV9jaHVu
a3MpOworCQkJa2V5bGVuICs9IHNpemVvZigqY2h1bmtzKSArIG51bV9jaHVua3M7CisJCX0KKwkJ
LyogYXBwZW5kIGluIHRoZSBITUFDcyAqLworCQlpZiAoaG1hY3MgIT0gTlVMTCkgeworCQkJbWVt
Y3B5KG5ld19rZXktPmtleSArIGtleWxlbiwgaG1hY3MsCisJCQkgICAgICAgc2l6ZW9mKCpobWFj
cykgKyBobWFjc19sZW4pOworCQl9CisJfQorCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRv
bSAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tKTsK
KwlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSA9IG5ld19rZXk7CisJc3RjYi0+YXNvYy5hdXRo
aW5mby5yYW5kb21fbGVuID0gcmFuZG9tX2xlbjsKKwlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3Rj
Yiwgc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCk7CisJc2N0cF9jbGVhcl9jYWNoZWRr
ZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCk7CisKKwkvKiBuZWdvdGlh
dGUgd2hhdCBITUFDIHRvIHVzZSBmb3IgdGhlIHBlZXIgKi8KKwlzdGNiLT5hc29jLnBlZXJfaG1h
Y19pZCA9IHNjdHBfbmVnb3RpYXRlX2htYWNpZChzdGNiLT5hc29jLnBlZXJfaG1hY3MsCisJICAg
IHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MpOworCisJLyogY29weSBkZWZhdWx0cyBmcm9tIHRoZSBl
bmRwb2ludCAqLworCS8qIEZJWCBNRTogcHV0IGluIGNvb2tpZT8gKi8KKwlzdGNiLT5hc29jLmF1
dGhpbmZvLmFjdGl2ZV9rZXlpZCA9IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuZGVmYXVsdF9rZXlp
ZDsKKwkvKiBjb3B5IG91dCB0aGUgc2hhcmVkIGtleSBsaXN0IChieSByZWZlcmVuY2UpIGZyb20g
dGhlIGVuZHBvaW50ICovCisJKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0KCZzdGNiLT5zY3RwX2Vw
LT5zY3RwX2VwLnNoYXJlZF9rZXlzLAorCQkJCSAmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cyk7Cit9
CisKKy8qCisgKiBjb21wdXRlIGFuZCBmaWxsIGluIHRoZSBITUFDIGRpZ2VzdCBmb3IgYSBwYWNr
ZXQKKyAqLwordm9pZAorc2N0cF9maWxsX2htYWNfZGlnZXN0X20oc3RydWN0IG1idWYgKm0sIHVp
bnQzMl90IGF1dGhfb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpCit7CisJdWludDMyX3QgZGlnZXN0
bGVuOworCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7CisJc2N0cF9rZXlfdCAqa2V5OworCisJaWYg
KChzdGNiID09IE5VTEwpIHx8IChhdXRoID09IE5VTEwpKQorCQlyZXR1cm47CisKKwkvKiB6ZXJv
IHRoZSBkaWdlc3QgKyBjaHVuayBwYWRkaW5nICovCisJZGlnZXN0bGVuID0gc2N0cF9nZXRfaG1h
Y19kaWdlc3RfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKKwltZW1zZXQoYXV0aC0+aG1h
YywgMCwgU0NUUF9TSVpFMzIoZGlnZXN0bGVuKSk7CisKKwkvKiBpcyB0aGUgZGVzaXJlZCBrZXkg
Y2FjaGVkPyAqLworCWlmICgoa2V5aWQgIT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlp
ZCkgfHwKKwkgICAgKHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5ID09IE5VTEwpKSB7CisJ
CWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleSAhPSBOVUxMKSB7CisJCQkvKiBmcmVl
IHRoZSBvbGQgY2FjaGVkIGtleSAqLworCQkJc2N0cF9mcmVlX2tleShzdGNiLT5hc29jLmF1dGhp
bmZvLmFzc29jX2tleSk7CisJCX0KKwkJc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJnN0Y2It
PmFzb2Muc2hhcmVkX2tleXMsIGtleWlkKTsKKwkJLyogdGhlIG9ubHkgd2F5IHNrZXkgaXMgTlVM
TCBpcyBpZiBudWxsIGtleSBpZCAwIGlzIHVzZWQgKi8KKwkJaWYgKHNrZXkgIT0gTlVMTCkKKwkJ
CWtleSA9IHNrZXktPmtleTsKKwkJZWxzZQorCQkJa2V5ID0gTlVMTDsKKwkJLyogY29tcHV0ZSBh
IG5ldyBhc3NvYyBrZXkgYW5kIGNhY2hlIGl0ICovCisJCXN0Y2ItPmFzb2MuYXV0aGluZm8uYXNz
b2Nfa2V5ID0KKwkJICAgIHNjdHBfY29tcHV0ZV9oYXNoa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8u
cmFuZG9tLAorCQkJCQkgc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSwga2V5KTsKKwkJ
c3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCA9IGtleWlkOworCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVVUSDEsICJjYWNoaW5nIGtleSBpZCAldVxuIiwKKwkJCXN0Y2ItPmFzb2MuYXV0aGlu
Zm8uYXNzb2Nfa2V5aWQpOworI2lmZGVmIFNDVFBfREVCVUcKKwkJaWYgKFNDVFBfQVVUSF9ERUJV
RykKKwkJCXNjdHBfcHJpbnRfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5LAorCQkJ
CSAgICAgICAiQXNzb2MgS2V5Iik7CisjZW5kaWYKKwl9CisKKwkvKiBzZXQgaW4gdGhlIGFjdGl2
ZSBrZXkgaWQgKi8KKwlhdXRoLT5zaGFyZWRfa2V5X2lkID0gaHRvbnMoa2V5aWQpOworCisJLyog
Y29tcHV0ZSBhbmQgZmlsbCBpbiB0aGUgZGlnZXN0ICovCisJKHZvaWQpc2N0cF9jb21wdXRlX2ht
YWNfbShzdGNiLT5hc29jLnBlZXJfaG1hY19pZCwgc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19r
ZXksCisJCQkJICBtLCBhdXRoX29mZnNldCwgYXV0aC0+aG1hYyk7Cit9CisKKworc3RhdGljIHZv
aWQKK3NjdHBfemVyb19tKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBtX29mZnNldCwgdWludDMy
X3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJdWludDhfdCAqZGF0YTsKKworCS8q
IHNhbml0eSBjaGVjayAqLworCWlmIChtID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGZpbmQg
dGhlIGNvcnJlY3Qgc3RhcnRpbmcgbWJ1ZiBhbmQgb2Zmc2V0IChnZXQgc3RhcnQgcG9zaXRpb24p
ICovCisJbV90bXAgPSBtOworCXdoaWxlICgobV90bXAgIT0gTlVMTCkgJiYgKG1fb2Zmc2V0ID49
ICh1aW50MzJfdCkgU0NUUF9CVUZfTEVOKG1fdG1wKSkpIHsKKwkJbV9vZmZzZXQgLT0gU0NUUF9C
VUZfTEVOKG1fdG1wKTsKKwkJbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1fdG1wKTsKKwl9CisJLyog
bm93IHVzZSB0aGUgcmVzdCBvZiB0aGUgbWJ1ZiBjaGFpbiAqLworCXdoaWxlICgobV90bXAgIT0g
TlVMTCkgJiYgKHNpemUgPiAwKSkgeworCQlkYXRhID0gbXRvZChtX3RtcCwgdWludDhfdCAqKSAr
IG1fb2Zmc2V0OworCQlpZiAoc2l6ZSA+ICh1aW50MzJfdCkoU0NUUF9CVUZfTEVOKG1fdG1wKSAt
IG1fb2Zmc2V0KSkgeworCQkJbWVtc2V0KGRhdGEsIDAsIFNDVFBfQlVGX0xFTihtX3RtcCkgLSBt
X29mZnNldCk7CisJCQlzaXplIC09IFNDVFBfQlVGX0xFTihtX3RtcCkgLSBtX29mZnNldDsKKwkJ
fSBlbHNlIHsKKwkJCW1lbXNldChkYXRhLCAwLCBzaXplKTsKKwkJCXNpemUgPSAwOworCQl9CisJ
CS8qIGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAq
LworCQltX29mZnNldCA9IDA7CisJCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQor
fQorCisvKi0KKyAqIHByb2Nlc3MgdGhlIGluY29taW5nIEF1dGhlbnRpY2F0aW9uIGNodW5rCisg
KiByZXR1cm4gY29kZXM6CisgKiAgIC0xIG9uIGFueSBhdXRoZW50aWNhdGlvbiBlcnJvcgorICog
ICAgMCBvbiBhdXRoZW50aWNhdGlvbiB2ZXJpZmljYXRpb24KKyAqLworaW50CitzY3RwX2hhbmRs
ZV9hdXRoKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0
aCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQoreworCXVpbnQxNl90IGNo
dW5rbGVuOworCXVpbnQxNl90IHNoYXJlZF9rZXlfaWQ7CisJdWludDE2X3QgaG1hY19pZDsKKwlz
Y3RwX3NoYXJlZGtleV90ICpza2V5OworCXVpbnQzMl90IGRpZ2VzdGxlbjsKKwl1aW50OF90IGRp
Z2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCXVpbnQ4X3QgY29tcHV0ZWRfZGlnZXN0
W1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBhdXRoIGlzIGNoZWNrZWQgZm9yIE5V
TEwgYnkgY2FsbGVyICovCisJY2h1bmtsZW4gPSBudG9ocyhhdXRoLT5jaC5jaHVua19sZW5ndGgp
OworCWlmIChjaHVua2xlbiA8IHNpemVvZigqYXV0aCkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfcmVjdmF1dGhmYWlsZWQpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcmVjdmF1dGgpOworCisJLyogZ2V0IHRoZSBhdXRoIHBhcmFtcyAqLworCXNoYXJlZF9r
ZXlfaWQgPSBudG9ocyhhdXRoLT5zaGFyZWRfa2V5X2lkKTsKKwlobWFjX2lkID0gbnRvaHMoYXV0
aC0+aG1hY19pZCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkiU0NUUCBBVVRIIENo
dW5rOiBzaGFyZWQga2V5ICV1LCBITUFDIGlkICV1XG4iLAorCQlzaGFyZWRfa2V5X2lkLCBobWFj
X2lkKTsKKworCS8qIGlzIHRoZSBpbmRpY2F0ZWQgSE1BQyBzdXBwb3J0ZWQ/ICovCisJaWYgKCFz
Y3RwX2F1dGhfaXNfc3VwcG9ydGVkX2htYWMoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywgaG1hY19p
ZCkpIHsKKwkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJc3RydWN0IHNjdHBfZXJyb3JfYXV0aF9p
bnZhbGlkX2htYWMgKmNhdXNlOworCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZpdmFsaG1h
Y2lkKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFAgQXV0aDogdW5zdXBw
b3J0ZWQgSE1BQyBpZCAldVxuIiwKKwkJCWhtYWNfaWQpOworCQkvKgorCQkgKiByZXBvcnQgdGhp
cyBpbiBhbiBFcnJvciBDaHVuazogVW5zdXBwb3J0ZWQgSE1BQworCQkgKiBJZGVudGlmaWVyCisJ
CSAqLworCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3Rw
X2Vycm9yX2F1dGhfaW52YWxpZF9obWFjKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCQlpZiAob3BfZXJyICE9IE5VTEwpIHsK
KwkJCS8qIHByZS1yZXNlcnZlIHNvbWUgc3BhY2UgKi8KKwkJCVNDVFBfQlVGX1JFU1ZfVUYob3Bf
ZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKKwkJCS8qIGZpbGwgaW4gdGhlIGVy
cm9yICovCisJCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2lu
dmFsaWRfaG1hYyAqKTsKKwkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9V
TlNVUFBPUlRFRF9ITUFDSUQpOworCQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYykpOworCQkJY2F1c2UtPmhtYWNf
aWQgPSBudG9ocyhobWFjX2lkKTsKKwkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2Vycm9yX2F1dGhfaW52YWxpZF9obWFjKTsKKwkJCS8qIHF1ZXVlIGl0ICovCisJ
CQlzY3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOworCQl9CisJCXJldHVybiAoLTEpOwor
CX0KKwkvKiBnZXQgdGhlIGluZGljYXRlZCBzaGFyZWQga2V5LCBpZiBhdmFpbGFibGUgKi8KKwlp
ZiAoKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPT0gTlVMTCkgfHwKKwkgICAgKHN0Y2It
PmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCAhPSBzaGFyZWRfa2V5X2lkKSkgeworCQkvKiBmaW5k
IHRoZSBzaGFyZWQga2V5IG9uIHRoZSBhc3NvYyBmaXJzdCAqLworCQlza2V5ID0gc2N0cF9maW5k
X3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywKKwkJCQkJICAgc2hhcmVkX2tleV9p
ZCk7CisJCS8qIGlmIHRoZSBzaGFyZWQga2V5IGlzbid0IGZvdW5kLCBkaXNjYXJkIHRoZSBjaHVu
ayAqLworCQlpZiAoc2tleSA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2
aXZhbGtleWlkKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkiU0NUUCBBdXRo
OiB1bmtub3duIGtleSBpZCAldVxuIiwKKwkJCQlzaGFyZWRfa2V5X2lkKTsKKwkJCXJldHVybiAo
LTEpOworCQl9CisJCS8qIGdlbmVyYXRlIGEgbm90aWZpY2F0aW9uIGlmIHRoaXMgaXMgYSBuZXcg
a2V5IGlkICovCisJCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQgIT0gc2hhcmVk
X2tleV9pZCkKKwkJCS8qCisJCQkgKiBzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9O
RVdfS0VZLCBzdGNiLAorCQkJICogc2hhcmVkX2tleV9pZCwgKHZvaWQKKwkJCSAqICopc3RjYi0+
YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkKTsKKwkJCSAqLworCQkJc2N0cF9ub3RpZnlfYXV0aGVu
dGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksCisJCQkgICAgc2hhcmVkX2tleV9pZCwg
c3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkLAorCQkJICAgIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisJCS8qIGNvbXB1dGUgYSBuZXcgcmVjdiBhc3NvYyBrZXkgYW5kIGNhY2hlIGl0ICovCisJ
CWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ICE9IE5VTEwpCisJCQlzY3RwX2ZyZWVf
a2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkpOworCQlzdGNiLT5hc29jLmF1dGhpbmZv
LnJlY3Zfa2V5ID0KKwkJICAgIHNjdHBfY29tcHV0ZV9oYXNoa2V5KHN0Y2ItPmFzb2MuYXV0aGlu
Zm8ucmFuZG9tLAorCQkgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSwgc2tleS0+
a2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkID0gc2hhcmVkX2tleV9pZDsK
KyNpZmRlZiBTQ1RQX0RFQlVHCisJCWlmIChTQ1RQX0FVVEhfREVCVUcpCisJCQlzY3RwX3ByaW50
X2tleShzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LCAiUmVjdiBLZXkiKTsKKyNlbmRpZgor
CX0KKwkvKiB2YWxpZGF0ZSB0aGUgZGlnZXN0IGxlbmd0aCAqLworCWRpZ2VzdGxlbiA9IHNjdHBf
Z2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2lkKTsKKwlpZiAoY2h1bmtsZW4gPCAoc2l6ZW9mKCph
dXRoKSArIGRpZ2VzdGxlbikpIHsKKwkJLyogaW52YWxpZCBkaWdlc3QgbGVuZ3RoICovCisJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRoZmFpbGVkKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FVVEgxLAorCQkJIlNDVFAgQXV0aDogY2h1bmsgdG9vIHNob3J0IGZvciBITUFDXG4iKTsKKwkJ
cmV0dXJuICgtMSk7CisJfQorCS8qIHNhdmUgYSBjb3B5IG9mIHRoZSBkaWdlc3QsIHplcm8gdGhl
IHBzZXVkbyBoZWFkZXIsIGFuZCB2YWxpZGF0ZSAqLworCW1lbWNweShkaWdlc3QsIGF1dGgtPmht
YWMsIGRpZ2VzdGxlbik7CisJc2N0cF96ZXJvX20obSwgb2Zmc2V0ICsgc2l6ZW9mKCphdXRoKSwg
U0NUUF9TSVpFMzIoZGlnZXN0bGVuKSk7CisJKHZvaWQpc2N0cF9jb21wdXRlX2htYWNfbShobWFj
X2lkLCBzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LAorCSAgICBtLCBvZmZzZXQsIGNvbXB1
dGVkX2RpZ2VzdCk7CisKKwkvKiBjb21wYXJlIHRoZSBjb21wdXRlZCBkaWdlc3Qgd2l0aCB0aGUg
b25lIGluIHRoZSBBVVRIIGNodW5rICovCisJaWYgKG1lbWNtcChkaWdlc3QsIGNvbXB1dGVkX2Rp
Z2VzdCwgZGlnZXN0bGVuKSAhPSAwKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRo
ZmFpbGVkKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFAgQXV0aDogSE1B
QyBkaWdlc3QgY2hlY2sgZmFpbGVkXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXJldHVybiAo
MCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBOT1RJRklDQVRJT04KKyAqLwordm9pZAorc2N0cF9u
b3RpZnlfYXV0aGVudGljYXRpb24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBpbmRp
Y2F0aW9uLAorCQkJICAgdWludDE2X3Qga2V5aWQsIHVpbnQxNl90IGFsdF9rZXlpZCwgaW50IHNv
X2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJU0NUUF9VTlVTRUQKKyNlbmRpZgorKQoreworCXN0cnVjdCBtYnVmICptX25v
dGlmeTsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50ICphdXRoOworCXN0cnVjdCBzY3RwX3F1
ZXVlZF90b19yZWFkICpjb250cm9sOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgKHN0
Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwK
KwkgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9B
TExHT05FKSB8fAorCSAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09D
S0VUKQorCQkpIHsKKwkJLyogSWYgdGhlIHNvY2tldCBpcyBnb25lIHdlIGFyZSBvdXQgb2YgaGVy
ZSAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNi
LT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCkpCisJCS8qIGV2ZW50IG5v
dCBlbmFibGVkICovCisJCXJldHVybjsKKworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50KSwKKwkJCQkJICAwLCBNX05PV0FJ
VCwgMSwgTVRfSEVBREVSKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJLyogbm8gc3BhY2Ug
bGVmdCAqLworCQlyZXR1cm47CisKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlhdXRo
ID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCAqKTsKKwltZW1zZXQo
YXV0aCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQpKTsKKwlhdXRoLT5hdXRo
X3R5cGUgPSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOworCWF1dGgtPmF1dGhfZmxhZ3MgPSAw
OworCWF1dGgtPmF1dGhfbGVuZ3RoID0gc2l6ZW9mKCphdXRoKTsKKwlhdXRoLT5hdXRoX2tleW51
bWJlciA9IGtleWlkOworCWF1dGgtPmF1dGhfYWx0a2V5bnVtYmVyID0gYWx0X2tleWlkOworCWF1
dGgtPmF1dGhfaW5kaWNhdGlvbiA9IGluZGljYXRpb247CisJYXV0aC0+YXV0aF9hc3NvY19pZCA9
IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6
ZW9mKCphdXRoKTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisKKwkvKiBhcHBl
bmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwg
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAwLCAwLCBzdGNiLT5hc29jLmNv
bnRleHQsIDAsIDAsIDAsIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8q
IG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQor
CWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3Bl
Y19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwor
CWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsKK30KKworCisvKi0KKyAq
IHZhbGlkYXRlcyB0aGUgQVVUSGVudGljYXRpb24gcmVsYXRlZCBwYXJhbWV0ZXJzIGluIGFuIElO
SVQvSU5JVC1BQ0sKKyAqIE5vdGU6IGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIElOSVQgYXMgSU5J
VC1BQ0sgaXMgaGFuZGxlZCBpbmxpbmUKKyAqIHdpdGggc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9t
X2luaXQoKQorICovCitpbnQKK3NjdHBfdmFsaWRhdGVfaW5pdF9hdXRoX3BhcmFtcyhzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IG9mZnNldCwgaW50IGxpbWl0KQoreworCXN0cnVjdCBzY3RwX3BhcmFtaGRy
ICpwaGRyLCBwYXJhbV9idWY7CisJdWludDE2X3QgcHR5cGUsIHBsZW47CisJaW50IHBlZXJfc3Vw
cG9ydHNfYXNjb25mID0gMDsKKwlpbnQgcGVlcl9zdXBwb3J0c19hdXRoID0gMDsKKwlpbnQgZ290
X3JhbmRvbSA9IDAsIGdvdF9obWFjcyA9IDAsIGdvdF9jaGtsaXN0ID0gMDsKKwl1aW50OF90IHNh
d19hc2NvbmYgPSAwOworCXVpbnQ4X3Qgc2F3X2FzY29uZl9hY2sgPSAwOworCisJLyogZ28gdGhy
b3VnaCBlYWNoIG9mIHRoZSBwYXJhbXMuICovCisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0o
bSwgb2Zmc2V0LCAmcGFyYW1fYnVmLCBzaXplb2YocGFyYW1fYnVmKSk7CisJd2hpbGUgKHBoZHIp
IHsKKwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBo
ZHItPnBhcmFtX2xlbmd0aCk7CisKKwkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgeworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7
CisJCQlicmVhazsKKwkJfQorCQlpZiAocHR5cGUgPT0gU0NUUF9TVVBQT1JURURfQ0hVTktfRVhU
KSB7CisJCQkvKiBBIHN1cHBvcnRlZCBleHRlbnNpb24gY2h1bmsgKi8KKwkJCXN0cnVjdCBzY3Rw
X3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOworCQkJdWludDhfdCBs
b2NhbF9zdG9yZVtTQ1RQX1NNQUxMX0NIVU5LX1NUT1JFXTsKKwkJCWludCBudW1fZW50LCBpOwor
CisJCQlpZiAocGxlbiA+IHNpemVvZihsb2NhbF9zdG9yZSkpIHsKKwkJCQlicmVhazsKKwkJCX0K
KwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZsb2NhbF9zdG9yZSwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsZW4pOworCQkJaWYgKHBoZHIgPT0gTlVMTCkg
eworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3Rw
X3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqKXBoZHI7CisJCQludW1fZW50ID0gcGxlbiAt
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2Vu
dDsgaSsrKSB7CisJCQkJc3dpdGNoIChwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7CisJ
CQkJY2FzZSBTQ1RQX0FTQ09ORjoKKwkJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJCQkJcGVl
cl9zdXBwb3J0c19hc2NvbmYgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkv
KiBvbmUgd2UgZG9uJ3QgY2FyZSBhYm91dCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ
CX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKKwkJCS8qIGVuZm9yY2UgdGhlIHJh
bmRvbSBsZW5ndGggKi8KKwkJCWlmIChwbGVuICE9IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9y
YW5kb20pICsKKwkJCQkgICAgIFNDVFBfQVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkpIHsKKwkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkJCSJTQ1RQOiBpbnZhbGlkIFJBTkRPTSBs
ZW5cbiIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ290X3JhbmRvbSA9IDE7CisJCX0g
ZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXN0cnVjdCBzY3RwX2F1dGhf
aG1hY19hbGdvICpobWFjczsKKwkJCXVpbnQ4X3Qgc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0la
RV07CisJCQlpbnQgbnVtX2htYWNzOworCisJCQlpZiAocGxlbiA+IHNpemVvZihzdG9yZSkpIHsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNl
dCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KXN0b3JlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxlbik7CisJCQlpZiAocGhk
ciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlobWFjcyA9IChzdHJ1Y3Qg
c2N0cF9hdXRoX2htYWNfYWxnbyAqKXBoZHI7CisJCQludW1faG1hY3MgPSAocGxlbiAtIHNpemVv
ZigqaG1hY3MpKSAvIHNpemVvZihobWFjcy0+aG1hY19pZHNbMF0pOworCQkJLyogdmFsaWRhdGUg
dGhlIGhtYWMgbGlzdCAqLworCQkJaWYgKHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oaG1hY3MsIG51
bV9obWFjcykpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkJCSJTQ1RQOiBp
bnZhbGlkIEhNQUMgcGFyYW1cbiIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ290X2ht
YWNzID0gMTsKKwkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0NIVU5LX0xJU1QpIHsKKwkJCXN0
cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOworCQkJdWludDhfdCBjaHVua3Nfc3Rv
cmVbU0NUUF9TTUFMTF9DSFVOS19TVE9SRV07CisJCQlpbnQgaSwgbnVtX2NodW5rczsKKworCQkJ
aWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJ
cGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJCQkJICAgKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopY2h1bmtzX3N0b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhk
ciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQkvKi0KKwkJCSAqIEZsaXAg
dGhyb3VnaCB0aGUgbGlzdCBhbmQgbWFyayB0aGF0IHRoZQorCQkJICogcGVlciBzdXBwb3J0cyBh
c2NvbmYvYXNjb25mX2Fjay4KKwkJCSAqLworCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhf
Y2h1bmtfbGlzdCAqKXBoZHI7CisJCQludW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtz
KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fY2h1bmtzOyBpKyspIHsKKwkJCQkvKiByZWNvcmQg
YXNjb25mL2FzY29uZi1hY2sgaWYgbGlzdGVkICovCisJCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlw
ZXNbaV0gPT0gU0NUUF9BU0NPTkYpCisJCQkJCXNhd19hc2NvbmYgPSAxOworCQkJCWlmIChjaHVu
a3MtPmNodW5rX3R5cGVzW2ldID09IFNDVFBfQVNDT05GX0FDSykKKwkJCQkJc2F3X2FzY29uZl9h
Y2sgPSAxOworCisJCQl9CisJCQlpZiAobnVtX2NodW5rcykKKwkJCQlnb3RfY2hrbGlzdCA9IDE7
CisJCX0KKworCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJCWlmIChvZmZzZXQgPj0g
bGltaXQpIHsKKwkJCWJyZWFrOworCQl9CisJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0s
IG9mZnNldCwgJnBhcmFtX2J1ZiwKKwkJICAgIHNpemVvZihwYXJhbV9idWYpKTsKKwl9CisJLyog
dmFsaWRhdGUgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgcGFyYW1ldGVycyAqLworCWlmIChnb3Rf
cmFuZG9tICYmIGdvdF9obWFjcykgeworCQlwZWVyX3N1cHBvcnRzX2F1dGggPSAxOworCX0gZWxz
ZSB7CisJCXBlZXJfc3VwcG9ydHNfYXV0aCA9IDA7CisJfQorCWlmICghcGVlcl9zdXBwb3J0c19h
dXRoICYmIGdvdF9jaGtsaXN0KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCSJT
Q1RQOiBwZWVyIHNlbnQgY2h1bmsgbGlzdCB3L28gQVVUSFxuIik7CisJCXJldHVybiAoLTEpOwor
CX0KKwlpZiAocGVlcl9zdXBwb3J0c19hc2NvbmYgJiYgIXBlZXJfc3VwcG9ydHNfYXV0aCkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogcGVlciBzdXBwb3J0cyBBU0NP
TkYgYnV0IG5vdCBBVVRIXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlIGlmICgocGVlcl9z
dXBwb3J0c19hc2NvbmYpICYmIChwZWVyX3N1cHBvcnRzX2F1dGgpICYmCisJCSAgICgoc2F3X2Fz
Y29uZiA9PSAwKSB8fCAoc2F3X2FzY29uZl9hY2sgPT0gMCkpKSB7CisJCXJldHVybiAoLTIpOwor
CX0KKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXVpbnQx
Nl90IGNodW5rc19sZW4gPSAwOworCXVpbnQxNl90IGhtYWNzX2xlbiA9IDA7CisJdWludDE2X3Qg
cmFuZG9tX2xlbiA9IFNDVFBfQVVUSF9SQU5ET01fU0laRV9ERUZBVUxUOworCXNjdHBfa2V5X3Qg
Km5ld19rZXk7CisJdWludDE2X3Qga2V5bGVuOworCisJLyogaW5pdGlhbGl6ZSBobWFjIGxpc3Qg
ZnJvbSBlbmRwb2ludCAqLworCXN0Y2ItPmFzb2MubG9jYWxfaG1hY3MgPSBzY3RwX2NvcHlfaG1h
Y2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwlpZiAoc3RjYi0+YXNvYy5sb2NhbF9o
bWFjcyAhPSBOVUxMKSB7CisJCWhtYWNzX2xlbiA9IHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MtPm51
bV9hbGdvICoKKwkJICAgIHNpemVvZihzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5obWFjWzBdKTsK
Kwl9CisJLyogaW5pdGlhbGl6ZSBhdXRoIGNodW5rcyBsaXN0IGZyb20gZW5kcG9pbnQgKi8KKwlz
dGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzID0KKwkgICAgc2N0cF9jb3B5X2NodW5rbGlzdChp
bnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1
dGhfY2h1bmtzICE9IE5VTEwpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkr
KykgeworCQkJaWYgKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MtPmNodW5rc1tpXSkKKwkJ
CQljaHVua3NfbGVuKys7CisJCX0KKwl9CisJLyogY29weSBkZWZhdWx0cyBmcm9tIHRoZSBlbmRw
b2ludCAqLworCXN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkID0gaW5wLT5zY3RwX2Vw
LmRlZmF1bHRfa2V5aWQ7CisKKwkvKiBjb3B5IG91dCB0aGUgc2hhcmVkIGtleSBsaXN0IChieSBy
ZWZlcmVuY2UpIGZyb20gdGhlIGVuZHBvaW50ICovCisJKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0
KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJCQkJICZzdGNiLT5hc29jLnNoYXJlZF9rZXlz
KTsKKworCS8qIG5vdyBzZXQgdGhlIGNvbmNhdGVuYXRlZCBrZXkgKHJhbmRvbSArIGNodW5rcyAr
IGhtYWNzKSAqLworCS8qIGtleSBpbmNsdWRlcyBwYXJhbWV0ZXIgaGVhZGVycyAqLworCWtleWxl
biA9ICgzICogc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgKyByYW5kb21fbGVuICsgY2h1
bmtzX2xlbiArCisJICAgIGhtYWNzX2xlbjsKKwluZXdfa2V5ID0gc2N0cF9hbGxvY19rZXkoa2V5
bGVuKTsKKwlpZiAobmV3X2tleSAhPSBOVUxMKSB7CisJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpw
aDsKKwkJaW50IHBsZW47CisJCS8qIGdlbmVyYXRlIGFuZCBjb3B5IGluIHRoZSBSQU5ET00gKi8K
KwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiluZXdfa2V5LT5rZXk7CisJCXBoLT5wYXJh
bV90eXBlID0gaHRvbnMoU0NUUF9SQU5ET00pOworCQlwbGVuID0gc2l6ZW9mKCpwaCkgKyByYW5k
b21fbGVuOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCVNDVFBfUkVBRF9S
QU5ET00obmV3X2tleS0+a2V5ICsgc2l6ZW9mKCpwaCksIHJhbmRvbV9sZW4pOworCQlrZXlsZW4g
PSBwbGVuOworCisJCS8qIGFwcGVuZCBpbiB0aGUgQVVUSCBjaHVua3MgKi8KKwkJLyogTk9URTog
Y3VycmVudGx5IHdlIGFsd2F5cyBoYXZlIGNodW5rcyB0byBsaXN0ICovCisJCXBoID0gKHN0cnVj
dCBzY3RwX3BhcmFtaGRyICopKG5ld19rZXktPmtleSArIGtleWxlbik7CisJCXBoLT5wYXJhbV90
eXBlID0gaHRvbnMoU0NUUF9DSFVOS19MSVNUKTsKKwkJcGxlbiA9IHNpemVvZigqcGgpICsgY2h1
bmtzX2xlbjsKKwkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBsZW4pOworCQlrZXlsZW4gKz0g
c2l6ZW9mKCpwaCk7CisJCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSB7CisJCQlp
bnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJCWlmIChzdGNiLT5hc29j
LmxvY2FsX2F1dGhfY2h1bmtzLT5jaHVua3NbaV0pCisJCQkJCW5ld19rZXktPmtleVtrZXlsZW4r
K10gPSBpOworCQkJfQorCQl9CisKKwkJLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLworCQlwaCA9
IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShuZXdfa2V5LT5rZXkgKyBrZXlsZW4pOworCQlwaC0+
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSE1BQ19MSVNUKTsKKwkJcGxlbiA9IHNpemVvZigqcGgp
ICsgaG1hY3NfbGVuOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCWtleWxl
biArPSBzaXplb2YoKnBoKTsKKwkJKHZvaWQpc2N0cF9zZXJpYWxpemVfaG1hY2xpc3Qoc3RjYi0+
YXNvYy5sb2NhbF9obWFjcywKKwkJCQkJbmV3X2tleS0+a2V5ICsga2V5bGVuKTsKKwl9CisJaWYg
KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tICE9IE5VTEwpCisJICAgIHNjdHBfZnJlZV9rZXko
c3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20pOworCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9t
ID0gbmV3X2tleTsKKwlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbV9sZW4gPSByYW5kb21fbGVu
OworfQorCisKKyNpZmRlZiBTQ1RQX0hNQUNfVEVTVAorLyoKKyAqIEhNQUMgYW5kIGtleSBjb25j
YXRlbmF0aW9uIHRlc3RzCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3ByaW50X2RpZ2VzdCh1aW50
OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbiwgY29uc3QgY2hhciAqc3RyKQoreworCXVp
bnQzMl90IGk7CisKKwlTQ1RQX1BSSU5URigiXG4lczogMHgiLCBzdHIpOworCWlmIChkaWdlc3Qg
PT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRpZ2VzdGxlbjsgaSsrKQor
CQlTQ1RQX1BSSU5URigiJTAyeCIsIGRpZ2VzdFtpXSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBf
dGVzdF9obWFjKGNvbnN0IGNoYXIgKnN0ciwgdWludDE2X3QgaG1hY19pZCwgdWludDhfdCAqa2V5
LAorICAgIHVpbnQzMl90IGtleWxlbiwgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwK
KyAgICB1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikKK3sKKwl1aW50OF90IGNv
bXB1dGVkX2RpZ2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCisJU0NUUF9QUklOVEYo
IlxuJXM6Iiwgc3RyKTsKKwlzY3RwX2htYWMoaG1hY19pZCwga2V5LCBrZXlsZW4sIHRleHQsIHRl
eHRsZW4sIGNvbXB1dGVkX2RpZ2VzdCk7CisJc2N0cF9wcmludF9kaWdlc3QoZGlnZXN0LCBkaWdl
c3RsZW4sICJFeHBlY3RlZCBkaWdlc3QiKTsKKwlzY3RwX3ByaW50X2RpZ2VzdChjb21wdXRlZF9k
aWdlc3QsIGRpZ2VzdGxlbiwgIkNvbXB1dGVkIGRpZ2VzdCIpOworCWlmIChtZW1jbXAoZGlnZXN0
LCBjb21wdXRlZF9kaWdlc3QsIGRpZ2VzdGxlbikgIT0gMCkgeworCQlTQ1RQX1BSSU5URigiXG5G
QUlMRUQiKTsKKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlIHsKKwkJU0NUUF9QUklOVEYoIlxuUEFT
U0VEIik7CisJCXJldHVybiAoMCk7CisJfQorfQorCisKKy8qCisgKiBSRkMgMjIwMjogSE1BQy1T
SEExIHRlc3QgY2FzZXMKKyAqLwordm9pZAorc2N0cF90ZXN0X2htYWNfc2hhMSh2b2lkKQorewor
CXVpbnQ4X3QgKmRpZ2VzdDsKKwl1aW50OF90IGtleVsxMjhdOworCXVpbnQzMl90IGtleWxlbjsK
Kwl1aW50OF90IHRleHRbMTI4XTsKKwl1aW50MzJfdCB0ZXh0bGVuOworCXVpbnQzMl90IGRpZ2Vz
dGxlbiA9IDIwOworCWludCBmYWlsZWQgPSAwOworCisJLyotCisJICogdGVzdF9jYXNlID0gICAg
IDEKKwkgKiBrZXkgPSAgICAgICAgICAgMHgwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIw
YjBiMGIwYjBiCisJICoga2V5X2xlbiA9ICAgICAgIDIwCisJICogZGF0YSA9ICAgICAgICAgICJI
aSBUaGVyZSIKKwkgKiBkYXRhX2xlbiA9ICAgICAgOAorCSAqIGRpZ2VzdCA9ICAgICAgICAweGI2
MTczMTg2NTUwNTcyNjRlMjhiYzBiNmZiMzc4YzhlZjE0NmJlMDAKKwkgKi8KKwlrZXlsZW4gPSAy
MDsKKwltZW1zZXQoa2V5LCAweDBiLCBrZXlsZW4pOworCXRleHRsZW4gPSA4OworCXN0cmNweSh0
ZXh0LCAiSGkgVGhlcmUiKTsKKwlkaWdlc3QgPSAiXHhiNlx4MTdceDMxXHg4Nlx4NTVceDA1XHg3
Mlx4NjRceGUyXHg4Ylx4YzBceGI2XHhmYlx4MzdceDhjXHg4ZVx4ZjFceDQ2XHhiZVx4MDAiOwor
CWlmIChzY3RwX3Rlc3RfaG1hYygiU0hBMSB0ZXN0IGNhc2UgMSIsIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTEsIGtleSwga2V5bGVuLAorCSAgICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxl
bikgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qLQorCSAqIHRlc3RfY2FzZSA9ICAgICAyCisJICog
a2V5ID0gICAgICAgICAgICJKZWZlIgorCSAqIGtleV9sZW4gPSAgICAgICA0CisJICogZGF0YSA9
ICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IgorCSAqIGRhdGFfbGVuID0g
ICAgICAyOAorCSAqIGRpZ2VzdCA9ICAgICAgICAweGVmZmNkZjZhZTVlYjJmYTJkMjc0MTZkNWYx
ODRkZjljMjU5YTdjNzkKKwkgKi8KKwlrZXlsZW4gPSA0OworCXN0cmNweShrZXksICJKZWZlIik7
CisJdGV4dGxlbiA9IDI4OworCXN0cmNweSh0ZXh0LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3Ro
aW5nPyIpOworCWRpZ2VzdCA9ICJceGVmXHhmY1x4ZGZceDZhXHhlNVx4ZWJceDJmXHhhMlx4ZDJc
eDc0XHgxNlx4ZDVceGYxXHg4NFx4ZGZceDljXHgyNVx4OWFceDdjXHg3OSI7CisJaWYgKHNjdHBf
dGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSAyIiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5
LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJ
CWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNlID0gICAgIDMKKwkgKiBrZXkgPSAgICAg
ICAgICAgMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCisJICoga2V5
X2xlbiA9ICAgICAgIDIwCisJICogZGF0YSA9ICAgICAgICAgIDB4ZGQgcmVwZWF0ZWQgNTAgdGlt
ZXMKKwkgKiBkYXRhX2xlbiA9ICAgICAgNTAKKwkgKiBkaWdlc3QgPSAgICAgICAgMHgxMjVkNzM0
MmI5YWMxMWNkOTFhMzlhZjQ4YWExN2I0ZjYzZjE3NWQzCisJICovCisJa2V5bGVuID0gMjA7CisJ
bWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKKwl0ZXh0bGVuID0gNTA7CisJbWVtc2V0KHRleHQs
IDB4ZGQsIHRleHRsZW4pOworCWRpZ2VzdCA9ICJceDEyXHg1ZFx4NzNceDQyXHhiOVx4YWNceDEx
XHhjZFx4OTFceGEzXHg5YVx4ZjRceDhhXHhhMVx4N2JceDRmXHg2M1x4ZjFceDc1XHhkMyI7CisJ
aWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSAzIiwgU0NUUF9BVVRIX0hNQUNfSURf
U0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVu
KSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNlID0gICAgIDQKKwkgKiBr
ZXkgPSAgICAgICAgICAgMHgwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0
MTUxNjE3MTgxOQorCSAqIGtleV9sZW4gPSAgICAgICAyNQorCSAqIGRhdGEgPSAgICAgICAgICAw
eGNkIHJlcGVhdGVkIDUwIHRpbWVzCisJICogZGF0YV9sZW4gPSAgICAgIDUwCisJICogZGlnZXN0
ID0gICAgICAgIDB4NGM5MDA3ZjQwMjYyNTBjNmJjODQxNGY5YmY1MGM4NmMyZDcyMzVkYQorCSAq
LworCWtleWxlbiA9IDI1OworCW1lbWNweShrZXksICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZc
eDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4
MTVceDE2XHgxN1x4MThceDE5Iiwga2V5bGVuKTsKKwl0ZXh0bGVuID0gNTA7CisJbWVtc2V0KHRl
eHQsIDB4Y2QsIHRleHRsZW4pOworCWRpZ2VzdCA9ICJceDRjXHg5MFx4MDdceGY0XHgwMlx4NjJc
eDUwXHhjNlx4YmNceDg0XHgxNFx4ZjlceGJmXHg1MFx4YzhceDZjXHgyZFx4NzJceDM1XHhkYSI7
CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA0IiwgU0NUUF9BVVRIX0hNQUNf
SURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0
bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNlID0gICAgIDUKKwkg
KiBrZXkgPSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMw
YzBjCisJICoga2V5X2xlbiA9ICAgICAgIDIwCisJICogZGF0YSA9ICAgICAgICAgICJUZXN0IFdp
dGggVHJ1bmNhdGlvbiIKKwkgKiBkYXRhX2xlbiA9ICAgICAgMjAKKwkgKiBkaWdlc3QgPSAgICAg
ICAgMHg0YzFhMDM0MjRiNTVlMDdmZTdmMjdiZTFkNThiYjkzMjRhOWE1YTA0CisJICogZGlnZXN0
LTk2ID0gICAgIDB4NGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3YmUxCisJICovCisJa2V5bGVuID0gMjA7
CisJbWVtc2V0KGtleSwgMHgwYywga2V5bGVuKTsKKwl0ZXh0bGVuID0gMjA7CisJc3RyY3B5KHRl
eHQsICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIpOworCWRpZ2VzdCA9ICJceDRjXHgxYVx4MDNceDQy
XHg0Ylx4NTVceGUwXHg3Zlx4ZTdceGYyXHg3Ylx4ZTFceGQ1XHg4Ylx4YjlceDMyXHg0YVx4OWFc
eDVhXHgwNCI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA1IiwgU0NUUF9B
VVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2Vz
dCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNlID0g
ICAgIDYKKwkgKiBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcworCSAqIGtl
eV9sZW4gPSAgICAgICA4MAorCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIg
VGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IgorCSAqIGRhdGFfbGVuID0gICAg
ICA1NAorCSAqIGRpZ2VzdCA9ICAgICAgICAweGFhNGFlNWUxNTI3MmQwMGU5NTcwNTYzN2NlOGEz
YjU1ZWQ0MDIxMTIKKwkgKi8KKwlrZXlsZW4gPSA4MDsKKwltZW1zZXQoa2V5LCAweGFhLCBrZXls
ZW4pOworCXRleHRsZW4gPSA1NDsKKwlzdHJjcHkodGV4dCwgIlRlc3QgVXNpbmcgTGFyZ2VyIFRo
YW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIpOworCWRpZ2VzdCA9ICJceGFhXHg0
YVx4ZTVceGUxXHg1Mlx4NzJceGQwXHgwZVx4OTVceDcwXHg1Nlx4MzdceGNlXHg4YVx4M2JceDU1
XHhlZFx4NDBceDIxXHgxMiI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA2
IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRs
ZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVz
dF9jYXNlID0gICAgIDcKKwkgKiBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1l
cworCSAqIGtleV9sZW4gPSAgICAgICA4MAorCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2lu
ZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNp
emUgRGF0YSIKKwkgKiBkYXRhX2xlbiA9ICAgICAgNzMKKwkgKiBkaWdlc3QgPSAgICAgICAgMHhl
OGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxCisJICovCisJa2V5bGVuID0g
ODA7CisJbWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKKwl0ZXh0bGVuID0gNzM7CisJc3RyY3B5
KHRleHQsICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IGFuZCBMYXJnZXIg
VGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIik7CisJZGlnZXN0ID0gIlx4ZThceGU5XHg5ZFx4MGZc
eDQ1XHgyM1x4N2RceDc4XHg2ZFx4NmJceGJhXHhhN1x4OTZceDVjXHg3OFx4MDhceGJiXHhmZlx4
MWFceDkxIjsKKwlpZiAoc2N0cF90ZXN0X2htYWMoIlNIQTEgdGVzdCBjYXNlIDciLCBTQ1RQX0FV
VEhfSE1BQ19JRF9TSEExLCBrZXksIGtleWxlbiwKKwkgICAgdGV4dCwgdGV4dGxlbiwgZGlnZXN0
LCBkaWdlc3RsZW4pIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiBkb25lIHdpdGggYWxsIHRlc3Rz
ICovCisJaWYgKGZhaWxlZCkKKwkJU0NUUF9QUklOVEYoIlxuU0hBMSB0ZXN0IHJlc3VsdHM6ICVk
IGNhc2VzIGZhaWxlZCIsIGZhaWxlZCk7CisJZWxzZQorCQlTQ1RQX1BSSU5URigiXG5TSEExIHRl
c3QgcmVzdWx0czogYWxsIHRlc3QgY2FzZXMgcGFzc2VkIik7Cit9CisKKy8qCisgKiB0ZXN0IGFz
c29jIGtleSBjb25jYXRlbmF0aW9uCisgKi8KK3N0YXRpYyBpbnQKK3NjdHBfdGVzdF9rZXlfY29u
Y2F0ZW5hdGlvbihzY3RwX2tleV90ICprZXkxLCBzY3RwX2tleV90ICprZXkyLAorICAgIHNjdHBf
a2V5X3QgKmV4cGVjdGVkX2tleSkKK3sKKwlzY3RwX2tleV90ICprZXk7CisJaW50IHJldF92YWw7
CisKKwlzY3RwX3Nob3dfa2V5KGtleTEsICJcbmtleTEiKTsKKwlzY3RwX3Nob3dfa2V5KGtleTIs
ICJcbmtleTIiKTsKKwlrZXkgPSBzY3RwX2NvbXB1dGVfaGFzaGtleShrZXkxLCBrZXkyLCBOVUxM
KTsKKwlzY3RwX3Nob3dfa2V5KGV4cGVjdGVkX2tleSwgIlxuRXhwZWN0ZWQiKTsKKwlzY3RwX3No
b3dfa2V5KGtleSwgIlxuQ29tcHV0ZWQiKTsKKwlpZiAobWVtY21wKGtleSwgZXhwZWN0ZWRfa2V5
LCBleHBlY3RlZF9rZXktPmtleWxlbikgIT0gMCkgeworCQlTQ1RQX1BSSU5URigiXG5GQUlMRUQi
KTsKKwkJcmV0X3ZhbCA9IC0xOworCX0gZWxzZSB7CisJCVNDVFBfUFJJTlRGKCJcblBBU1NFRCIp
OworCQlyZXRfdmFsID0gMDsKKwl9CisJc2N0cF9mcmVlX2tleShrZXkxKTsKKwlzY3RwX2ZyZWVf
a2V5KGtleTIpOworCXNjdHBfZnJlZV9rZXkoZXhwZWN0ZWRfa2V5KTsKKwlzY3RwX2ZyZWVfa2V5
KGtleSk7CisJcmV0dXJuIChyZXRfdmFsKTsKK30KKworCit2b2lkCitzY3RwX3Rlc3RfYXV0aGtl
eSh2b2lkKQoreworCXNjdHBfa2V5X3QgKmtleTEsICprZXkyLCAqZXhwZWN0ZWRfa2V5OworCWlu
dCBmYWlsZWQgPSAwOworCisJLyogdGVzdCBjYXNlIDEgKi8KKwlrZXkxID0gc2N0cF9zZXRfa2V5
KCJceDAxXHgwMVx4MDFceDAxIiwgNCk7CisJa2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDJc
eDAzXHgwNCIsIDQpOworCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDFceDAx
XHgwMVx4MDFceDAyXHgwM1x4MDQiLCA4KTsKKwlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0
aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qIHRl
c3QgY2FzZSAyICovCisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMSIsIDQp
OworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDIiLCAxKTsKKwlleHBlY3RlZF9rZXkgPSBzY3Rw
X3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDFceDAyIiwgNSk7CisJaWYgKHNjdHBfdGVzdF9rZXlf
Y29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKKwkJZmFpbGVkKys7
CisKKwkvKiB0ZXN0IGNhc2UgMyAqLworCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDEiLCAxKTsK
KwlrZXkyID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAyIiwgNCk7CisJZXhwZWN0ZWRf
a2V5ID0gc2N0cF9zZXRfa2V5KCJceDAxXHgwMFx4MDBceDAwXHgwMiIsIDUpOworCWlmIChzY3Rw
X3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCisJ
CWZhaWxlZCsrOworCisJLyogdGVzdCBjYXNlIDQgKi8KKwlrZXkxID0gc2N0cF9zZXRfa2V5KCJc
eDAwXHgwMFx4MDBceDAxIiwgNCk7CisJa2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMSIsIDEpOwor
CWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDBceDAwXHgwMFx4MDEiLCA1KTsK
KwlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tl
eSkgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qIHRlc3QgY2FzZSA1ICovCisJa2V5MSA9IHNjdHBf
c2V0X2tleSgiXHgwMSIsIDEpOworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4
MDEiLCA0KTsKKwlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4MDFceDAwXHgwMFx4MDBc
eDAxIiwgNSk7CisJaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBl
eHBlY3RlZF9rZXkpIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiB0ZXN0IGNhc2UgNiAqLworCWtl
eTEgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4
MDZceDA3IiwgMTEpOworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAx
XHgwMlx4MDNceDA0XHgwNVx4MDZceDA4IiwgMTEpOworCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0
X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDAwXHgw
MFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwOCIsIDIyKTsKKwlpZiAoc2N0cF90
ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQorCQlm
YWlsZWQrKzsKKworCS8qIHRlc3QgY2FzZSA3ICovCisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgw
MFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDgiLCAxMSk7CisJa2V5MiA9
IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4
MDciLCAxMSk7CisJZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAw
XHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNc
eDA0XHgwNVx4MDZceDA4IiwgMjIpOworCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24o
a2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCisJCWZhaWxlZCsrOworCisJLyogZG9uZSB3
aXRoIGFsbCB0ZXN0cyAqLworCWlmIChmYWlsZWQpCisJCVNDVFBfUFJJTlRGKCJcbktleSBjb25j
YXRlbmF0aW9uIHRlc3QgcmVzdWx0czogJWQgY2FzZXMgZmFpbGVkIiwgZmFpbGVkKTsKKwllbHNl
CisJCVNDVFBfUFJJTlRGKCJcbktleSBjb25jYXRlbmF0aW9uIHRlc3QgcmVzdWx0czogYWxsIHRl
c3QgY2FzZXMgcGFzc2VkIik7Cit9CisKKworI2lmIGRlZmluZWQoU1RBTkRBTE9ORV9ITUFDX1RF
U1QpCitpbnQKK21haW4odm9pZCkKK3sKKwlzY3RwX3Rlc3RfaG1hY19zaGExKCk7CisJc2N0cF90
ZXN0X2F1dGhrZXkoKTsKK30KKworI2VuZGlmIC8qIFNUQU5EQUxPTkVfSE1BQ19URVNUICovCisK
KyNlbmRpZiAvKiBTQ1RQX0hNQUNfVEVTVCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfYXV0aC5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEu
LmMxZjgyZDg4MjVhNGQ4MDIzZmU0YWRiMzAxZGY0OTc2NDZhYzgwOGMgMTAwNzU1Ci0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmgKQEAgLTAsMCArMSwyMTggQEAKKy8qLQorICogU1BE
WC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5j
bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cF9hdXRoLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAkIik7CisjZW5k
aWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0FVVEhfSF8KKyNkZWZpbmUgX05FVElORVRfU0NU
UF9BVVRIX0hfCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKworLyogZGlnZXN0IGxl
bmd0aHMgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9MRU5fU0hBMQkyMAorI2RlZmluZSBT
Q1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYJMzIKKyNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9M
RU5fTUFYCVNDVFBfQVVUSF9ESUdFU1RfTEVOX1NIQTI1NgorCisvKiByYW5kb20gc2l6ZXMgKi8K
KyNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX0RFRkFVTFQJMzIKKyNkZWZpbmUgU0NUUF9B
VVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVECTMyCisKKy8qIHVuaW9uIG9mIGFsbCBzdXBwb3J0ZWQg
SE1BQyBhbGdvcml0aG0gY29udGV4dHMgKi8KK3R5cGVkZWYgdW5pb24gc2N0cF9oYXNoX2NvbnRl
eHQgeworCVNDVFBfU0hBMV9DVFggc2hhMTsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFD
X1NIQTI1NikKKwlTQ1RQX1NIQTI1Nl9DVFggc2hhMjU2OworI2VuZGlmCit9IHNjdHBfaGFzaF9j
b250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHNjdHBfa2V5IHsKKwl1aW50MzJfdCBrZXlsZW47
CisJdWludDhfdCBrZXlbXTsKK30gc2N0cF9rZXlfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9z
aGFyZWRfa2V5IHsKKwlMSVNUX0VOVFJZKHNjdHBfc2hhcmVkX2tleSkgbmV4dDsKKwlzY3RwX2tl
eV90ICprZXk7CS8qIGtleSB0ZXh0ICovCisJdWludDMyX3QgcmVmY291bnQ7CS8qIHJlZmVyZW5j
ZSBjb3VudCAqLworCXVpbnQxNl90IGtleWlkOwkJLyogc2hhcmVkIGtleSBJRCAqLworCXVpbnQ4
X3QgZGVhY3RpdmF0ZWQ7CS8qIGtleSBpcyBkZWFjdGl2YXRlZCAqLworfSBzY3RwX3NoYXJlZGtl
eV90OworCitMSVNUX0hFQUQoc2N0cF9rZXloZWFkLCBzY3RwX3NoYXJlZF9rZXkpOworCisvKiBh
dXRoZW50aWNhdGlvbiBjaHVua3MgbGlzdCAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hdXRoX2No
a2xpc3QgeworCXVpbnQ4X3QgY2h1bmtzWzI1Nl07CisJdWludDhfdCBudW1fY2h1bmtzOworfSBz
Y3RwX2F1dGhfY2hrbGlzdF90OworCisvKiBobWFjIGFsZ29zIHN1cHBvcnRlZCBsaXN0ICovCit0
eXBlZGVmIHN0cnVjdCBzY3RwX2htYWNsaXN0IHsKKwl1aW50MTZfdCBtYXhfYWxnbzsJLyogbWF4
IGFsZ29yaXRobXMgYWxsb2NhdGVkICovCisJdWludDE2X3QgbnVtX2FsZ287CS8qIG51bSBhbGdv
cml0aG1zIHVzZWQgKi8KKwl1aW50MTZfdCBobWFjW107Cit9IHNjdHBfaG1hY2xpc3RfdDsKKwor
LyogYXV0aGVudGljYXRpb24gaW5mbyAqLwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9hdXRoaW5mb3Jt
YXRpb24geworCXNjdHBfa2V5X3QgKnJhbmRvbTsJLyogbG9jYWwgcmFuZG9tIGtleSAoY29uY2F0
ZW5hdGVkKSAqLworCXVpbnQzMl90IHJhbmRvbV9sZW47CS8qIGxvY2FsIHJhbmRvbSBudW1iZXIg
bGVuZ3RoIGZvciBwYXJhbSAqLworCXNjdHBfa2V5X3QgKnBlZXJfcmFuZG9tOy8qIHBlZXIncyBy
YW5kb20ga2V5IChjb25jYXRlbmF0ZWQpICovCisJc2N0cF9rZXlfdCAqYXNzb2Nfa2V5OwkvKiBj
YWNoZWQgY29uY2F0ZW5hdGVkIHNlbmQga2V5ICovCisJc2N0cF9rZXlfdCAqcmVjdl9rZXk7CS8q
IGNhY2hlZCBjb25jYXRlbmF0ZWQgcmVjdiBrZXkgKi8KKwl1aW50MTZfdCBhY3RpdmVfa2V5aWQ7
CS8qIGFjdGl2ZSBzZW5kIGtleWlkICovCisJdWludDE2X3QgYXNzb2Nfa2V5aWQ7CS8qIGN1cnJl
bnQgc2VuZCBrZXlpZCAoY2FjaGVkKSAqLworCXVpbnQxNl90IHJlY3Zfa2V5aWQ7CS8qIGxhc3Qg
cmVjdiBrZXlpZCAoY2FjaGVkKSAqLworfSBzY3RwX2F1dGhpbmZvX3Q7CisKKworCisvKgorICog
TWFjcm9zCisgKi8KKyNkZWZpbmUgc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNodW5rLCBs
aXN0KSAoKGxpc3QgPT0gTlVMTCkgPyAoMCkgOiAobGlzdC0+Y2h1bmtzW2NodW5rXSAhPSAwKSkK
KworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKiBzb2NrZXQgb3B0aW9uIGFw
aSBmdW5jdGlvbnMgKi8KK2V4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90ICpzY3RwX2FsbG9jX2No
dW5rbGlzdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9jaHVua2xpc3Qoc2N0cF9hdXRo
X2Noa2xpc3RfdCAqY2hrbGlzdCk7CitleHRlcm4gdm9pZCBzY3RwX2NsZWFyX2NodW5rbGlzdChz
Y3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0KTsKK2V4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90
ICpzY3RwX2NvcHlfY2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xpc3QpOworZXh0
ZXJuIGludCBzY3RwX2F1dGhfYWRkX2NodW5rKHVpbnQ4X3QgY2h1bmssIHNjdHBfYXV0aF9jaGts
aXN0X3QgKmxpc3QpOworZXh0ZXJuIGludCBzY3RwX2F1dGhfZGVsZXRlX2NodW5rKHVpbnQ4X3Qg
Y2h1bmssIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOworZXh0ZXJuIHNpemVfdCBzY3RwX2F1
dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjb25zdCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KTsKK2V4
dGVybiBpbnQgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbGlzdCwKKyAgICB1aW50OF90ICpwdHIpOworZXh0ZXJuIGludCBzY3RwX3BhY2tfYXV0
aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwKKyAgICB1aW50OF90ICpw
dHIpOworZXh0ZXJuIGludCBzY3RwX3VucGFja19hdXRoX2NodW5rcyhjb25zdCB1aW50OF90ICpw
dHIsIHVpbnQ4X3QgbnVtX2NodW5rcywKKyAgICBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KTsK
KworLyoga2V5IGhhbmRsaW5nICovCitleHRlcm4gc2N0cF9rZXlfdCAqc2N0cF9hbGxvY19rZXko
dWludDMyX3Qga2V5bGVuKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9rZXkoc2N0cF9rZXlfdCAq
a2V5KTsKK2V4dGVybiB2b2lkIHNjdHBfcHJpbnRfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3Qg
Y2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIHNjdHBfc2hvd19rZXkoc2N0cF9rZXlfdCAqa2V5LCBj
b25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfZ2VuZXJhdGVfcmFuZG9t
X2tleSh1aW50MzJfdCBrZXlsZW4pOworZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBfc2V0X2tleSh1
aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbik7CitleHRlcm4gc2N0cF9rZXlfdCAqc2N0cF9j
b21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlfdCAqa2V5MiwKKyAgICBz
Y3RwX2tleV90ICpzaGFyZWQpOworCisvKiBzaGFyZWQga2V5IGhhbmRsaW5nICovCitleHRlcm4g
c2N0cF9zaGFyZWRrZXlfdCAqc2N0cF9hbGxvY19zaGFyZWRrZXkodm9pZCk7CitleHRlcm4gdm9p
ZCBzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpOworZXh0ZXJuIHNj
dHBfc2hhcmVka2V5X3QgKnNjdHBfZmluZF9zaGFyZWRrZXkoc3RydWN0IHNjdHBfa2V5aGVhZCAq
c2hhcmVkX2tleXMsCisgICAgdWludDE2X3Qga2V5X2lkKTsKK2V4dGVybiBpbnQgc2N0cF9pbnNl
cnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlzLAorICAgIHNjdHBf
c2hhcmVka2V5X3QgKm5ld19za2V5KTsKK2V4dGVybiBpbnQgc2N0cF9jb3B5X3NrZXlsaXN0KGNv
bnN0IHN0cnVjdCBzY3RwX2tleWhlYWQgKnNyYywKKyAgICBzdHJ1Y3Qgc2N0cF9rZXloZWFkICpk
ZXN0KTsKKy8qIHJlZiBjb3VudHMgb24gc2hhcmVkIGtleXMsIGJ5IGtleSBpZCAqLworZXh0ZXJu
IHZvaWQgc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2
X3Qga2V5aWQpOworZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQsCisgICAgaW50IHNvX2xvY2tlZCk7CisKKworLyog
aG1hYyBsaXN0IGhhbmRsaW5nICovCitleHRlcm4gc2N0cF9obWFjbGlzdF90ICpzY3RwX2FsbG9j
X2htYWNsaXN0KHVpbnQxNl90IG51bV9obWFjcyk7CitleHRlcm4gdm9pZCBzY3RwX2ZyZWVfaG1h
Y2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KTsKK2V4dGVybiBpbnQgc2N0cF9hdXRoX2FkZF9o
bWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFjX2lkKTsKK2V4dGVybiBz
Y3RwX2htYWNsaXN0X3QgKnNjdHBfY29weV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxpc3Qp
OworZXh0ZXJuIHNjdHBfaG1hY2xpc3RfdCAqc2N0cF9kZWZhdWx0X3N1cHBvcnRlZF9obWFjbGlz
dCh2b2lkKTsKK2V4dGVybiB1aW50MTZfdCBzY3RwX25lZ290aWF0ZV9obWFjaWQoc2N0cF9obWFj
bGlzdF90ICpwZWVyLAorICAgIHNjdHBfaG1hY2xpc3RfdCAqbG9jYWwpOworZXh0ZXJuIGludCBz
Y3RwX3NlcmlhbGl6ZV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0
cik7CitleHRlcm4gaW50IHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oc3RydWN0IHNjdHBfYXV0aF9o
bWFjX2FsZ28gKmhtYWNzLAorICAgIHVpbnQzMl90IG51bV9obWFjcyk7CisKK2V4dGVybiBzY3Rw
X2F1dGhpbmZvX3QgKnNjdHBfYWxsb2NfYXV0aGluZm8odm9pZCk7CitleHRlcm4gdm9pZCBzY3Rw
X2ZyZWVfYXV0aGluZm8oc2N0cF9hdXRoaW5mb190ICphdXRoaW5mbyk7CisKKy8qIGtleWVkLUhN
QUMgZnVuY3Rpb25zICovCitleHRlcm4gdWludDMyX3Qgc2N0cF9nZXRfYXV0aF9jaHVua19sZW4o
dWludDE2X3QgaG1hY19hbGdvKTsKK2V4dGVybiB1aW50MzJfdCBzY3RwX2dldF9obWFjX2RpZ2Vz
dF9sZW4odWludDE2X3QgaG1hY19hbGdvKTsKK2V4dGVybiB1aW50MzJfdCBzY3RwX2htYWModWlu
dDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbiwKKyAgICB1aW50
OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpOworZXh0ZXJuIGlu
dCBzY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4sCisgICAgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwgdWludDhf
dCAqZGlnZXN0LCB1aW50MzJfdCBkaWdlc3RsZW4pOworZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29t
cHV0ZV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9rZXlfdCAqa2V5LAorICAgIHVpbnQ4
X3QgKnRleHQsIHVpbnQzMl90IHRleHRsZW4sIHVpbnQ4X3QgKmRpZ2VzdCk7CitleHRlcm4gaW50
IHNjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQx
Nl90IGlkKTsKKworLyogbWJ1ZiB2ZXJzaW9ucyAqLworZXh0ZXJuIHVpbnQzMl90IHNjdHBfaG1h
Y19tKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCisg
ICAgc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QsIHVp
bnQzMl90IHRyYWlsZXIpOworZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29tcHV0ZV9obWFjX20odWlu
dDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksCisgICAgc3RydWN0IG1idWYgKm0sIHVp
bnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QpOworCisvKgorICogYXV0aGVudGljYXRp
b24gcm91dGluZXMKKyAqLworZXh0ZXJuIHZvaWQgc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOworZXh0ZXJuIHZvaWQgc2N0cF9jbGVh
cl9jYWNoZWRrZXlzX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsK
K2V4dGVybiBpbnQgc2N0cF9kZWxldGVfc2hhcmVka2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDE2X3Qga2V5aWQpOworZXh0ZXJuIGludCBzY3RwX2RlbGV0ZV9zaGFyZWRrZXlfZXAoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOworZXh0ZXJuIGludCBzY3RwX2F1
dGhfc2V0YWN0aXZla2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwor
ZXh0ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsIHVpbnQxNl90IGtleWlkKTsKK2V4dGVybiBpbnQgc2N0cF9kZWFjdF9zaGFyZWRrZXkoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7CitleHRlcm4gaW50IHNjdHBfZGVh
Y3Rfc2hhcmVka2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsK
KworZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2dldF9jb29raWVfcGFyYW1zKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCisgICAgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCBs
ZW5ndGgpOworZXh0ZXJuIHZvaWQgc2N0cF9maWxsX2htYWNfZGlnZXN0X20oc3RydWN0IG1idWYg
Km0sIHVpbnQzMl90IGF1dGhfb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1
dGgsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lkKTsKK2V4dGVybiBzdHJ1
Y3QgbWJ1ZiAqc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYg
KiptX2VuZCwKKyAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0aF9yZXQsIHVpbnQzMl90
ICpvZmZzZXQsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IGNodW5rKTsKK2V4
dGVybiBpbnQgc2N0cF9oYW5kbGVfYXV0aChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2F1dGhfY2h1bmsgKmNoLAorICAgIHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZzZXQp
OworZXh0ZXJuIHZvaWQgc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorICAgIHVpbnQzMl90IGluZGljYXRpb24sIHVpbnQxNl90IGtleWlkLCB1aW50MTZf
dCBhbHRfa2V5aWQsIGludCBzb19sb2NrZWQpOworZXh0ZXJuIGludCBzY3RwX3ZhbGlkYXRlX2lu
aXRfYXV0aF9wYXJhbXMoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50IGxpbWl0
KTsKK2V4dGVybiB2b2lkIHNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7CisKKy8qIHRlc3QgZnVuY3Rp
b25zICovCisjaWZkZWYgU0NUUF9ITUFDX1RFU1QKK2V4dGVybiB2b2lkIHNjdHBfdGVzdF9obWFj
X3NoYTEodm9pZCk7CitleHRlcm4gdm9pZCBzY3RwX3Rlc3RfYXV0aGtleSh2b2lkKTsKKyNlbmRp
ZgorI2VuZGlmIC8qIF9fU0NUUF9BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2JzZF9hZGRyLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4
YzJlNDhjNTM5MS4uZTNiNmUxYjZkZTdlZGMwZjFiYWYyZTVlNWY0MzY4YmVkM2E4MDk0YiAxMDA3
NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYworKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jCkBAIC0wLDAgKzEs
MTAxMiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxs
IFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAg
ICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZk
ZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMgMzMzODEzIDIwMTgtMDUtMTggMjA6
MTM6MzRaIG1tYWN5ICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9w
Y2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90
aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2VuZGlmCisK
Ky8qIERlY2xhcmUgYWxsIG9mIG91ciBtYWxsb2MgbmFtZWQgdHlwZXMgKi8KKyNpZm5kZWYgX19Q
YW5kYV9fCitNQUxMT0NfREVGSU5FKFNDVFBfTV9NQVAsICJzY3RwX21hcCIsICJzY3RwIGFzb2Mg
bWFwIGRlc2NyaXB0b3IiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX1NUUk1JLCAic2N0cF9zdHJp
IiwgInNjdHAgc3RyZWFtIGluIGFycmF5Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9TVFJNTywg
InNjdHBfc3RybyIsICJzY3RwIHN0cmVhbSBvdXQgYXJyYXkiKTsKK01BTExPQ19ERUZJTkUoU0NU
UF9NX0FTQ19BRERSLCAic2N0cF9hYWRyIiwgInNjdHAgYXNjb25mIGFkZHJlc3MiKTsKK01BTExP
Q19ERUZJTkUoU0NUUF9NX0FTQ19JVCwgInNjdHBfYV9pdCIsICJzY3RwIGFzY29uZiBpdGVyYXRv
ciIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQVVUSF9DTCwgInNjdHBfYXRjbCIsICJzY3RwIGF1
dGggY2h1bmtsaXN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9BVVRIX0tZLCAic2N0cF9hdGt5
IiwgInNjdHAgYXV0aCBrZXkiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0FVVEhfSEwsICJzY3Rw
X2F0aG0iLCAic2N0cCBhdXRoIGhtYWMgbGlzdCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQVVU
SF9JRiwgInNjdHBfYXRoaSIsICJzY3RwIGF1dGggaW5mbyIpOworTUFMTE9DX0RFRklORShTQ1RQ
X01fU1RSRVNFVCwgInNjdHBfc3RyZSIsICJzY3RwIHN0cmVhbSByZXNldCIpOworTUFMTE9DX0RF
RklORShTQ1RQX01fQ01TRywgInNjdHBfY21zZyIsICJzY3RwIENNU0cgYnVmZmVyIik7CitNQUxM
T0NfREVGSU5FKFNDVFBfTV9DT1BZQUwsICJzY3RwX2NwYWwiLCAic2N0cCBjb3B5IGFsbCIpOwor
TUFMTE9DX0RFRklORShTQ1RQX01fVlJGLCAic2N0cF92cmYiLCAic2N0cCB2cmYgc3RydWN0Iik7
CitNQUxMT0NfREVGSU5FKFNDVFBfTV9JRkEsICJzY3RwX2lmYSIsICJzY3RwIGlmYSBzdHJ1Y3Qi
KTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0lGTiwgInNjdHBfaWZuIiwgInNjdHAgaWZuIHN0cnVj
dCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fVElNVywgInNjdHBfdGltdyIsICJzY3RwIHRpbWUg
YmxvY2siKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX01WUkYsICJzY3RwX212cmYiLCAic2N0cCBt
dnJmIHBjYiBsaXN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9JVEVSLCAic2N0cF9pdGVyIiwg
InNjdHAgaXRlcmF0b3IgY29udHJvbCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fU09DS09QVCwg
InNjdHBfc29ja28iLCAic2N0cCBzb2NrZXQgb3B0aW9uIik7CitNQUxMT0NfREVGSU5FKFNDVFBf
TV9NQ09SRSwgInNjdHBfbWNvcmUiLCAic2N0cCBtY29yZSBxdWV1ZSIpOworI2VuZGlmCisKKy8q
IEdsb2JhbCBOT04tVk5FVCBzdHJ1Y3R1cmUgdGhhdCBjb250cm9scyB0aGUgaXRlcmF0b3IgKi8K
K3N0cnVjdCBpdGVyYXRvcl9jb250cm9sIHNjdHBfaXRfY3RsOworCisjaWYgIWRlZmluZWQoX19G
cmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9jbGVhbnVwX2l0cXVldWUodm9pZCkKK3sKKwlz
dHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQsICpuaXQ7CisKKwlUQUlMUV9GT1JFQUNIX1NBRkUoaXQs
ICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIHNjdHBfbnh0X2l0ciwgbml0KSB7CisJCWlmIChp
dC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgeworCQkJKCppdC0+ZnVuY3Rpb25fYXRlbmQpIChp
dC0+cG9pbnRlciwgaXQtPnZhbCk7CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZzY3RwX2l0X2N0bC5p
dGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9J
VEVSKTsKKwl9Cit9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisvKl9fVXNl
cnNwYWNlX18gVE9ETyBpZiB3ZSB1c2UgdGhyZWFkIGJhc2VkIGl0ZXJhdG9yCisgKiB0aGVuIHRo
ZSBpbXBsZW1lbnRhdGlvbiBvZiB3YWtldXAgd2lsbCBuZWVkIHRvIGNoYW5nZS4KKyAqIEN1cnJl
bnRseSB3ZSBhcmUgdXNpbmcgdGltZW9fY29uZCBmb3IgaWRlbnQgc29fdGltZW8KKyAqIGJ1dCB0
aGF0IGlzIG5vdCBzdWZmaWNpZW50IGlmIHdlIG5lZWQgdG8gdXNlIGFub3RoZXIgaWRlbnQKKyAq
IGxpa2Ugd2FrZXVwKCZzY3RwcGNiaW5mby5pdGVyYXRvcl9ydW5uaW5nKTsKKyAqLworI2VuZGlm
CisKK3ZvaWQKK3NjdHBfd2FrZXVwX2l0ZXJhdG9yKHZvaWQpCit7CisjaWYgZGVmaW5lZChTQ1RQ
X1BST0NFU1NfTEVWRUxfTE9DS1MpCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVw
KTsKKyNlbHNlCisJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
d2FrZXVwKTsKKyNlbmRpZgorI2Vsc2UKKwl3YWtldXAoJnNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1
bm5pbmcpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMg
dm9pZCAqCisjZWxzZQorc3RhdGljIHZvaWQKKyNlbmRpZgorc2N0cF9pdGVyYXRvcl90aHJlYWQo
dm9pZCAqdiBTQ1RQX1VOVVNFRCkKK3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2N0
cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgaXRlcmF0b3IiKTsKKyNlbmRpZgorCVND
VFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwkvKiBJbiBGcmVlQlNEIHRoaXMgdGhyZWFkIG5l
dmVyIHRlcm1pbmF0ZXMuICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlmb3IgKDs7KSB7
CisjZWxzZQorCXdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJB
VE9SX01VU1RfRVhJVCkgPT0gMCkgeworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJbXNsZWVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5uaW5nLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisJCSAgICAgICAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCwK
KyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Rhcndp
bikKKwkJICAgICAgIHNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgsCisjZW5kaWYKKwkJ
ICAgICAgIDAsICJ3YWl0aW5nX2Zvcl93b3JrIiwgMCk7CisjZWxzZQorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKCZzY3RwX2l0
X2N0bC5pdGVyYXRvcl93YWtldXAsICZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LCBJ
TkZJTklURSk7CisjZWxzZQorCQlwdGhyZWFkX2NvbmRfd2FpdCgmc2N0cF9pdF9jdGwuaXRlcmF0
b3Jfd2FrZXVwLCAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCk7CisjZW5kaWYKKyNl
bmRpZgorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0
b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgeworCQkJYnJlYWs7CisJCX0KKyNl
bmRpZgorCQlzY3RwX2l0ZXJhdG9yX3dvcmtlcigpOworCX0KKyNpZiAhZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwkvKiBOb3cgdGhpcyB0aHJlYWQgbmVlZHMgdG8gYmUgdGVybWluYXRlZCAqLworCXNj
dHBfY2xlYW51cF9pdHF1ZXVlKCk7CisJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgfD0gU0NU
UF9JVEVSQVRPUl9FWElURUQ7CisJU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7CisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNjdHBfd2FrZXVwX2l0ZXJhdG9yKCk7CisJcmV0dXJu
IChOVUxMKTsKKyNlbHNlCisJd2FrZXVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyk7CisJ
dGhyZWFkX3Rlcm1pbmF0ZShjdXJyZW50X3RocmVhZCgpKTsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
cGFuaWMoIkhtbS4gdGhyZWFkX3Rlcm1pbmF0ZSgpIGNvbnRpbnVlcy4uLiIpOworI2VuZGlmCisj
ZW5kaWYKKyNlbmRpZgorfQorCit2b2lkCitzY3RwX3N0YXJ0dXBfaXRlcmF0b3Iodm9pZCkKK3sK
KwlpZiAoc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MpIHsKKwkJLyogWW91IG9ubHkgZ2V0IG9uZSAq
LworCQlyZXR1cm47CisJfQorCS8qIEluaXRpYWxpemUgZ2xvYmFsIGxvY2tzIGhlcmUsIHRodXMg
b25seSBvbmNlLiAqLworCVNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCk7CisJU0NUUF9JUElfSVRF
UkFUT1JfV1FfSU5JVCgpOworCVRBSUxRX0lOSVQoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCk7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA3MDEw
MDAKKwlrdGhyZWFkX2NyZWF0ZShzY3RwX2l0ZXJhdG9yX3RocmVhZCwKKyNlbHNlCisJa3Byb2Nf
Y3JlYXRlKHNjdHBfaXRlcmF0b3JfdGhyZWFkLAorI2VuZGlmCisJICAgICAgICAgICAgICh2b2lk
ICopTlVMTCwKKwkgICAgICAgICAgICAgJnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLAorCSAgICAg
ICAgICAgICBSRlBST0MsCisJICAgICAgICAgICAgIFNDVFBfS1RIUkVBRF9QQUdFUywKKwkgICAg
ICAgICAgICAgU0NUUF9LVFJIRUFEX05BTUUpOworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
a2VybmVsX3RocmVhZF9zdGFydCgodGhyZWFkX2NvbnRpbnVlX3Qpc2N0cF9pdGVyYXRvcl90aHJl
YWQsIE5VTEwsICZzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7CisjZWxpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJaWYgKHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUoJnNjdHBfaXRfY3Rs
LnRocmVhZF9wcm9jLCAmc2N0cF9pdGVyYXRvcl90aHJlYWQpKSB7CisJCVNDVFBfUFJJTlRGKCJF
UlJPUjogQ3JlYXRpbmcgc2N0cF9pdGVyYXRvcl90aHJlYWQgZmFpbGVkLlxuIik7CisJfQorI2Vu
ZGlmCit9CisKKyNpZmRlZiBJTkVUNgorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLyog
X19Vc2Vyc3BhY2VfXyBUT0RPLiBzdHJ1Y3QgaW42X2lmYWRkciBpcyBkZWZpbmVkIGluIHN5cy9u
ZXRpbmV0Ni9pbjZfdmFyLmgKKyAgIGlwNl91c2VfZGVwcmVjYXRlZCBpcyBkZWZpbmVkIGFzICBp
bnQgaXA2X3VzZV9kZXByZWNhdGVkID0gMTsgaW4gL3NyYy9zeXMvbmV0aW5ldDYvaW42X3Byb3Rv
LmMKKyAqLwordm9pZAorc2N0cF9nYXRoZXJfaW50ZXJuYWxfaWZhX2ZsYWdzKHN0cnVjdCBzY3Rw
X2lmYSAqaWZhKQoreworICAgIHJldHVybjsgLyogc3R1YiAqLworfQorI2Vsc2UKK3ZvaWQKK3Nj
dHBfZ2F0aGVyX2ludGVybmFsX2lmYV9mbGFncyhzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKK3sKKwlz
dHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKKworCWlmYTYgPSAoc3RydWN0IGluNl9pZmFkZHIgKilp
ZmEtPmlmYTsKKwlpZmEtPmZsYWdzID0gaWZhNi0+aWE2X2ZsYWdzOworCWlmICghTU9EVUxFX0dM
T0JBTChpcDZfdXNlX2RlcHJlY2F0ZWQpKSB7CisJCWlmIChpZmEtPmZsYWdzICYKKwkJICAgIElO
Nl9JRkZfREVQUkVDQVRFRCkgeworCQkJaWZhLT5sb2NhbGlmYV9mbGFncyB8PSBTQ1RQX0FERFJf
SUZBX1VOVVNFQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWlmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflND
VFBfQUREUl9JRkFfVU5VU0VBQkxFOworCQl9CisJfSBlbHNlIHsKKwkJaWZhLT5sb2NhbGlmYV9m
bGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7CisJfQorCWlmIChpZmEtPmZsYWdzICYK
KwkgICAgKElONl9JRkZfREVUQUNIRUQgfAorCSAgICAgSU42X0lGRl9BTllDQVNUIHwKKwkgICAg
IElONl9JRkZfTk9UUkVBRFkpKSB7CisJCWlmYS0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9BRERS
X0lGQV9VTlVTRUFCTEU7CisJfSBlbHNlIHsKKwkJaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NU
UF9BRERSX0lGQV9VTlVTRUFCTEU7CisJfQorfQorI2VuZGlmIC8qIF9fVXNlcnNwYWNlX18gKi8K
KyNlbmRpZiAvKiBJTkVUNiAqLworCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3Rh
dGljIHVpbnQzMl90CitzY3RwX2lzX2Rlc2lyZWRfaW50ZXJmYWNlX3R5cGUoc3RydWN0IGlmbmV0
ICppZm4pCit7CisJaW50IHJlc3VsdDsKKworCS8qIGNoZWNrIHRoZSBpbnRlcmZhY2UgdHlwZSB0
byBzZWUgaWYgaXQncyBvbmUgd2UgY2FyZSBhYm91dCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorCXN3aXRjaChpZm5ldF90eXBlKGlmbikpIHsKKyNlbHNlCisJc3dpdGNoIChpZm4tPmlmX3R5
cGUpIHsKKyNlbmRpZgorCWNhc2UgSUZUX0VUSEVSOgorCWNhc2UgSUZUX0lTTzg4MDIzOgorCWNh
c2UgSUZUX0lTTzg4MDI0OgorCWNhc2UgSUZUX0lTTzg4MDI1OgorCWNhc2UgSUZUX0lTTzg4MDI2
OgorCWNhc2UgSUZUX1NUQVJMQU46CisJY2FzZSBJRlRfUDEwOgorCWNhc2UgSUZUX1A4MDoKKwlj
YXNlIElGVF9IWToKKwljYXNlIElGVF9GRERJOgorCWNhc2UgSUZUX1hFVEhFUjoKKwljYXNlIElG
VF9JU0ROQkFTSUM6CisJY2FzZSBJRlRfSVNETlBSSU1BUlk6CisJY2FzZSBJRlRfUFRQU0VSSUFM
OgorCWNhc2UgSUZUX09USEVSOgorCWNhc2UgSUZUX1BQUDoKKwljYXNlIElGVF9MT09QOgorCWNh
c2UgSUZUX1NMSVA6CisJY2FzZSBJRlRfR0lGOgorCWNhc2UgSUZUX0wyVkxBTjoKKwljYXNlIElG
VF9TVEY6CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKQorCWNhc2UgSUZUX0lQOgorCWNhc2UgSUZU
X0lQT1ZFUkNETEM6CisJY2FzZSBJRlRfSVBPVkVSQ0xBVzoKKwljYXNlIElGVF9QUk9QVklSVFVB
TDogLyogTmV0R3JhcGggVmlydHVhbCB0b28gKi8KKwljYXNlIElGVF9WSVJUVUFMSVBBRERSRVNT
OgorI2VuZGlmCisJCXJlc3VsdCA9IDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlc3VsdCA9
IDA7CisJfQorCisJcmV0dXJuIChyZXN1bHQpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKK2ludAorc2N0cF9pc192bXdhcmVfaW50ZXJmYWNlKHN0cnVjdCBpZm5ldCAqaWZu
KQoreworCXJldHVybiAoc3RybmNtcChpZm5ldF9uYW1lKGlmbiksICJ2bW5ldCIsIDUpID09IDAp
OworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaWZk
ZWYgTUFMTE9DCisjdW5kZWYgTUFMTE9DCisjZGVmaW5lIE1BTExPQyh4KSBIZWFwQWxsb2MoR2V0
UHJvY2Vzc0hlYXAoKSwgMCwgKHgpKQorI2VuZGlmCisjaWZkZWYgRlJFRQorI3VuZGVmIEZSRUUK
KyNkZWZpbmUgRlJFRSh4KSBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgpLCAwLCAoeCkpCisjZW5k
aWYKK3N0YXRpYyB2b2lkCitzY3RwX2luaXRfaWZuc19mb3JfdnJmKGludCB2cmZpZCkKK3sKKyNp
ZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJc3RydWN0IHNjdHBfaWZhICpzY3Rw
X2lmYTsKKwlEV09SRCBFcnIsIEFkYXB0ZXJBZGRyc1NpemU7CisJUElQX0FEQVBURVJfQUREUkVT
U0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFwdDsKKwlQSVBfQURBUFRFUl9VTklDQVNUX0FERFJFU1Mg
cFVuaWNhc3Q7CisjZW5kaWYKKworI2lmZGVmIElORVQKKwlBZGFwdGVyQWRkcnNTaXplID0gMDsK
KworCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVCwgMCwgTlVMTCwgTlVM
TCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCWlmICgoRXJyICE9IEVSUk9SX0JVRkZF
Ul9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgeworCQkJ
U0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjRBZGRyZXNzZXMoKSBzaXppbmcgZmFpbGVkIHdpdGgg
ZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJCVNDVFBfUFJJTlRGKCJlcnIgPSAlZDsgQWRhcHRl
ckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1NpemUpOworCQkJcmV0dXJuOwor
CQl9CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZyb20gc2l6aW5nIGluZm9ybWF0aW9uICov
CisJaWYgKChwQWRhcHRlckFkZHJzID0gKFBJUF9BREFQVEVSX0FERFJFU1NFUykgR2xvYmFsQWxs
b2MoR1BUUiwgQWRhcHRlckFkZHJzU2l6ZSkpID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIk1l
bW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIik7CisJCXJldHVybjsKKwl9CisJLyogR2V0IGFjdHVh
bCBhZGFwdGVyIGluZm9ybWF0aW9uICovCisJaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3Nl
cyhBRl9JTkVULCAwLCBOVUxMLCBwQWRhcHRlckFkZHJzLCAmQWRhcHRlckFkZHJzU2l6ZSkpICE9
IEVSUk9SX1NVQ0NFU1MpIHsKKwkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjRBZGRyZXNzZXMo
KSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOworCQlGUkVFKHBBZGFwdGVyQWRk
cnMpOworCQlyZXR1cm47CisJfQorCS8qIEVudW1lcmF0ZSB0aHJvdWdoIGVhY2ggcmV0dXJuZWQg
YWRhcHRlciBhbmQgc2F2ZSBpdHMgaW5mb3JtYXRpb24gKi8KKwlmb3IgKHBBZGFwdCA9IHBBZGFw
dGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0KSB7CisJCWlmIChwQWRhcHQt
PklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSB8fCBwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBF
X0VUSEVSTkVUX0NTTUFDRCkgeworCQkJZm9yIChwVW5pY2FzdCA9IHBBZGFwdC0+Rmlyc3RVbmlj
YXN0QWRkcmVzczsgcFVuaWNhc3Q7IHBVbmljYXN0ID0gcFVuaWNhc3QtPk5leHQpIHsKKwkJCQlp
ZiAoSU40X0lTTElOS0xPQ0FMX0FERFJFU1MoJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShwVW5p
Y2FzdC0+QWRkcmVzcy5scFNvY2thZGRyKSktPnNpbl9hZGRyKSkpIHsKKwkJCQkJY29udGludWU7
CisJCQkJfQorCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYoMCwKKwkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwQWRhcHQtPklmSW5kZXgsCisJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocEFkYXB0LT5JZlR5cGUgPT0gSUZfVFlQRV9JRUVFODAyMTEpP01JQl9JRl9U
WVBFX0VUSEVSTkVUOnBBZGFwdC0+SWZUeXBlLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcEFkYXB0LT5BZGFwdGVyTmFtZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIE5VTEwsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVW5p
Y2FzdC0+QWRkcmVzcy5scFNvY2thZGRyLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcEFkYXB0LT5GbGFncywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDApOworCQkJCWlmIChzY3RwX2lmYSkgeworCQkJCQlzY3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3Mg
Jj0gflNDVFBfQUREUl9ERUZFUl9VU0U7CisJCQkJfQorCQkJfQorCQl9CisJfQorCUZSRUUocEFk
YXB0ZXJBZGRycyk7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCUFkYXB0ZXJBZGRyc1NpemUgPSAw
OworCisJaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVUNiwgMCwgTlVMTCwg
TlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCWlmICgoRXJyICE9IEVSUk9SX0JV
RkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgewor
CQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjZBZGRyZXNzZXMoKSBzaXppbmcgZmFpbGVkIHdp
dGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJCVNDVFBfUFJJTlRGKCJlcnIgPSAlZDsgQWRh
cHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1NpemUpOworCQkJcmV0dXJu
OworCQl9CisJfQorCS8qIEFsbG9jYXRlIG1lbW9yeSBmcm9tIHNpemluZyBpbmZvcm1hdGlvbiAq
LworCWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFs
bG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJN
ZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOworCQlyZXR1cm47CisJfQorCS8qIEdldCBhY3R1
YWwgYWRhcHRlciBpbmZvcm1hdGlvbiAqLworCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNz
ZXMoQUZfSU5FVDYsIDAsIE5VTEwsIHBBZGFwdGVyQWRkcnMsICZBZGFwdGVyQWRkcnNTaXplKSkg
IT0gRVJST1JfU1VDQ0VTUykgeworCQlTQ1RQX1BSSU5URigiR2V0QWRhcHRlcnNWNkFkZHJlc3Nl
cygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJCUZSRUUocEFkYXB0ZXJB
ZGRycyk7CisJCXJldHVybjsKKwl9CisJLyogRW51bWVyYXRlIHRocm91Z2ggZWFjaCByZXR1cm5l
ZCBhZGFwdGVyIGFuZCBzYXZlIGl0cyBpbmZvcm1hdGlvbiAqLworCWZvciAocEFkYXB0ID0gcEFk
YXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRhcHQtPk5leHQpIHsKKwkJaWYgKHBBZGFw
dC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExIHx8IHBBZGFwdC0+SWZUeXBlID09IElGX1RZ
UEVfRVRIRVJORVRfQ1NNQUNEKSB7CisJCQlmb3IgKHBVbmljYXN0ID0gcEFkYXB0LT5GaXJzdFVu
aWNhc3RBZGRyZXNzOyBwVW5pY2FzdDsgcFVuaWNhc3QgPSBwVW5pY2FzdC0+TmV4dCkgeworCQkJ
CXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYoMCwKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwQWRhcHQtPklwdjZJZkluZGV4LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExKT9NSUJfSUZfVFlQRV9FVEhF
Uk5FVDpwQWRhcHQtPklmVHlwZSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBBZGFwdC0+QWRhcHRlck5hbWUsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcFVuaWNhc3QtPkFk
ZHJlc3MubHBTb2NrYWRkciwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBB
ZGFwdC0+RmxhZ3MsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKwkJ
CQlpZiAoc2N0cF9pZmEpIHsKKwkJCQkJc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQ
X0FERFJfREVGRVJfVVNFOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlGUkVFKHBBZGFwdGVyQWRk
cnMpOworI2VuZGlmCit9CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgdm9p
ZAorc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJmaWQpCit7CisjaWYgZGVmaW5lZChJTkVU
KSB8fCBkZWZpbmVkKElORVQ2KQorCWludCByYzsKKwlzdHJ1Y3QgaWZhZGRycyAqaWZhLCAqaWZh
czsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXVpbnQzMl90IGlmYV9mbGFnczsKKwor
CXJjID0gZ2V0aWZhZGRycygmaWZhcyk7CisJaWYgKHJjICE9IDApIHsKKwkJcmV0dXJuOworCX0K
Kwlmb3IgKGlmYSA9IGlmYXM7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4dCkgeworCQlpZiAoaWZh
LT5pZmFfYWRkciA9PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorI2lmICFkZWZpbmVkKElO
RVQpCisJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKKwkJCS8q
IG5vbiBpbmV0NiBza2lwICovCisJCQljb250aW51ZTsKKwkJfQorI2VsaWYgIWRlZmluZWQoSU5F
VDYpCisJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJLyog
bm9uIGluZXQgc2tpcCAqLworCQkJY29udGludWU7CisJCX0KKyNlbHNlCisJCWlmICgoaWZhLT5p
ZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICYmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1p
bHkgIT0gQUZfSU5FVDYpKSB7CisJCQkvKiBub24gaW5ldC9pbmV0NiBza2lwICovCisJCQljb250
aW51ZTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJaWYgKChpZmEtPmlmYV9h
ZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCisJCSAgICBJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopaWZhLT5pZmFfYWRkciktPnNpbjZfYWRkcikp
IHsKKwkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCWNvbnRpbnVlOworCQl9
CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpCisJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1p
bHkgPT0gQUZfSU5FVCAmJgorCQkgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9h
ZGRyKS0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYK
KwkJaWZhX2ZsYWdzID0gMDsKKwkJc2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZp
ZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4KGlmYS0+aWZhX25hbWUpLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2Fk
ZHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhX2ZsYWdzLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCQlpZiAoc2N0cF9pZmEpIHsKKwkJCXNj
dHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVSX1VTRTsKKwkJfQorCX0K
KwlmcmVlaWZhZGRycyhpZmFzKTsKKyNlbmRpZgorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKK3N0YXRpYyB2b2lkCitzY3RwX2luaXRfaWZuc19mb3JfdnJmKGludCB2cmZpZCkK
K3sKKwkvKiBIZXJlIHdlIG11c3QgYXBwbHkgQU5ZIGxvY2tzIG5lZWRlZCBieSB0aGUKKwkgKiBJ
Rk4gd2UgYWNjZXNzIGFuZCBhbHNvIG1ha2Ugc3VyZSB3ZSBsb2NrCisJICogYW55IElGQSB0aGF0
IGV4aXN0cyBhcyB3ZSBmbG9hdCB0aHJvdWdoIHRoZQorCSAqIGxpc3Qgb2YgSUZBJ3MKKwkgKi8K
KwlzdHJ1Y3QgaWZuZXQgKippZm5ldGxpc3Q7CisJdWludDMyX3QgaSwgaiwgY291bnQ7CisJY2hh
ciBuYW1lW1NDVFBfSUZOQU1TSVpdOworCXN0cnVjdCBpZm5ldCAqaWZuOworCXN0cnVjdCBpZmFk
ZHIgKippZmFkZHJsaXN0OworCXN0cnVjdCBpZmFkZHIgKmlmYTsKKwlzdHJ1Y3QgaW42X2lmYWRk
ciAqaWZhNjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXVpbnQzMl90IGlmYV9mbGFn
czsKKworCWlmIChpZm5ldF9saXN0X2dldChJRk5FVF9GQU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAm
Y291bnQpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkr
KykgeworCQlpZm4gPSBpZm5ldGxpc3RbaV07CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
aWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKSAmJiBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2UoaWZu
KSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNjdHBfaXNfZGVzaXJlZF9pbnRlcmZhY2Vf
dHlwZShpZm4pID09IDApIHsKKwkJCS8qIG5vbiBkZXNpcmVkIHR5cGUgKi8KKwkJCWNvbnRpbnVl
OworCQl9CisJCWlmIChpZm5ldF9nZXRfYWRkcmVzc19saXN0KGlmbiwgJmlmYWRkcmxpc3QpICE9
IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaiA9IDA7IGlmYWRkcmxpc3Rbal0gIT0g
TlVMTDsgaisrKSB7CisJCQlpZmEgPSBpZmFkZHJsaXN0W2pdOworCQkJaWYgKGlmYS0+aWZhX2Fk
ZHIgPT0gTlVMTCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChpZmEtPmlmYV9hZGRy
LT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgJiYgKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBB
Rl9JTkVUNikpIHsKKwkJCQkvKiBub24gaW5ldC9pbmV0NiBza2lwICovCisJCQkJY29udGludWU7
CisJCQl9CisJCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJ
CQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilp
ZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRyKSkgeworCQkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRk
cmVzc2VzICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCgo
c3RydWN0IHNvY2thZGRyX2luICopaWZhLT5pZmFfYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PSBJ
TkFERFJfQU5ZKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmIChpZmEtPmlm
YV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlpZmE2ID0gKHN0cnVjdCBpbjZf
aWZhZGRyICopaWZhOworCQkJCWlmYV9mbGFncyA9IGlmYTYtPmlhNl9mbGFnczsKKwkJCX0gZWxz
ZSB7CisJCQkJaWZhX2ZsYWdzID0gMDsKKwkJCX0KKwkJCXNucHJpbnRmKG5hbWUsIFNDVFBfSUZO
QU1TSVosICIlcyVkIiwgaWZuZXRfbmFtZShpZm4pLCBpZm5ldF91bml0KGlmbikpOworCQkJc2N0
cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHZvaWQgKilpZm4sIC8qIFhYWCAqLworCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZm5ldF9pbmRleChpZm4pLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZm5ldF90eXBlKGlmbiksCisJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk
ICopaWZhLCAvKiBYWFggKi8KKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZh
LT5pZmFfYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhX2ZsYWdz
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKwkJCWlmIChzY3RwX2lm
YSkgeworCQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVSX1VT
RTsKKwkJCX0KKwkJfQorCQlpZm5ldF9mcmVlX2FkZHJlc3NfbGlzdChpZmFkZHJsaXN0KTsKKwl9
CisJaWZuZXRfbGlzdF9mcmVlKGlmbmV0bGlzdCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJm
aWQpCit7CisJLyogSGVyZSB3ZSBtdXN0IGFwcGx5IEFOWSBsb2NrcyBuZWVkZWQgYnkgdGhlCisJ
ICogSUZOIHdlIGFjY2VzcyBhbmQgYWxzbyBtYWtlIHN1cmUgd2UgbG9jaworCSAqIGFueSBJRkEg
dGhhdCBleGlzdHMgYXMgd2UgZmxvYXQgdGhyb3VnaCB0aGUKKwkgKiBsaXN0IG9mIElGQSdzCisJ
ICovCisJc3RydWN0IGlmbmV0ICppZm47CisJc3RydWN0IGlmYWRkciAqaWZhOworCXN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmE7CisJdWludDMyX3QgaWZhX2ZsYWdzOworI2lmZGVmIElORVQ2CisJ
c3RydWN0IGluNl9pZmFkZHIgKmlmYTY7CisjZW5kaWYKKworCUlGTkVUX1JMT0NLKCk7CisJVEFJ
TFFfRk9SRUFDSChpZm4sICZNT0RVTEVfR0xPQkFMKGlmbmV0KSwgaWZfbGluaykgeworCQlpZiAo
c2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90eXBlKGlmbikgPT0gMCkgeworCQkJLyogbm9uIGRl
c2lyZWQgdHlwZSAqLworCQkJY29udGludWU7CisJCX0KKwkJSUZfQUREUl9STE9DSyhpZm4pOwor
CQlDS19TVEFJTFFfRk9SRUFDSChpZmEsICZpZm4tPmlmX2FkZHJoZWFkLCBpZmFfbGluaykgewor
CQkJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJ
c3dpdGNoIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNl
IEFGX0lORVQ6CisJCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopaWZhLT5pZmFfYWRkcikt
PnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCWlmIChJTjZf
SVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopaWZhLT5pZmFfYWRk
ciktPnNpbjZfYWRkcikpIHsKKwkJCQkJLyogc2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLwor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJ
CQkJY29udGludWU7CisJCQl9CisJCQlzd2l0Y2ggKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlpZmFfZmxhZ3MgPSAwOworCQkJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJaWZh
NiA9IChzdHJ1Y3QgaW42X2lmYWRkciAqKWlmYTsKKwkJCQlpZmFfZmxhZ3MgPSBpZmE2LT5pYTZf
ZmxhZ3M7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJaWZhX2ZsYWdzID0g
MDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYo
dnJmaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZuLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm4tPmlmX2luZGV4LAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm4tPmlmX3R5cGUsCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmbi0+aWZfeG5hbWUsCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICh2b2lkICopaWZhLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZmEtPmlmYV9hZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZmFfZmxhZ3MsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCQkJ
aWYgKHNjdHBfaWZhKSB7CisJCQkJc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FE
RFJfREVGRVJfVVNFOworCQkJfQorCQl9CisJCUlGX0FERFJfUlVOTE9DSyhpZm4pOworCX0KKwlJ
Rk5FVF9SVU5MT0NLKCk7Cit9CisjZW5kaWYKKwordm9pZAorc2N0cF9pbml0X3ZyZl9saXN0KGlu
dCB2cmZpZCkKK3sKKwlpZiAodnJmaWQgPiBTQ1RQX01BWF9WUkZfSUQpCisJCS8qIGNhbid0IGRv
IHRoYXQgKi8KKwkJcmV0dXJuOworCisJLyogRG9uJ3QgY2FyZSBhYm91dCByZXR1cm4gaGVyZSAq
LworCSh2b2lkKXNjdHBfYWxsb2NhdGVfdnJmKHZyZmlkKTsKKworCS8qIE5vdyB3ZSBuZWVkIHRv
IGJ1aWxkIGFsbCB0aGUgaWZuJ3MKKwkgKiBmb3IgdGhpcyB2cmYgYW5kIHRoZXJlIGFkZHJlc3Nl
cworCSAqLworCXNjdHBfaW5pdF9pZm5zX2Zvcl92cmYodnJmaWQpOworfQorCit2b2lkCitzY3Rw
X2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlmYSwgaW50IGNtZCkKK3sKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisgICAgICAgIHJldHVybjsKKyNlbHNlCisJdWludDMyX3QgaWZhX2Zs
YWdzID0gMDsKKworCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAw
KSB7CisJCXJldHVybjsKKwl9CisJLyogQlNEIG9ubHkgaGFzIG9uZSBWUkYsIGlmIHRoaXMgY2hh
bmdlcworCSAqIHdlIHdpbGwgbmVlZCB0byBob29rIGluIHRoZSByaWdodAorCSAqIHRoaW5ncyBo
ZXJlIHRvIGdldCB0aGUgaWQgdG8gcGFzcyB0bworCSAqIHRoZSBhZGRyZXNzIG1hbmFnZW1lbnQg
cm91dGluZS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNFX1ZBUihmaXJzdF90aW1lKSA9PSAwKSB7CisJ
CS8qIFNwZWNpYWwgdGVzdCB0byBzZWUgaWYgbXkgOjoxIHdpbGwgc2hvd3VwIHdpdGggdGhpcyAq
LworCQlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUpID0gMTsKKwkJc2N0cF9pbml0X2lmbnNfZm9y
X3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQpOworCX0KKworCWlmICgoY21kICE9IFJUTV9BREQpICYm
IChjbWQgIT0gUlRNX0RFTEVURSkpIHsKKwkJLyogZG9uJ3Qga25vdyB3aGF0IHRvIGRvIHdpdGgg
dGhpcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgewor
CQlyZXR1cm47CisJfQorCWlmIChzY3RwX2lzX2Rlc2lyZWRfaW50ZXJmYWNlX3R5cGUoaWZhLT5p
ZmFfaWZwKSA9PSAwKSB7CisJCS8qIG5vbiBkZXNpcmVkIHR5cGUgKi8KKwkJcmV0dXJuOworCX0K
Kwlzd2l0Y2ggKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNl
IEFGX0lORVQ6CisJCWlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWlmYS0+aWZhX2FkZHIpLT5z
aW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpZmFfZmxhZ3MgPSAoKHN0cnVjdCBp
bjZfaWZhZGRyICopaWZhKS0+aWE2X2ZsYWdzOworCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJ
RUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWlmYS0+aWZhX2FkZHIpLT5zaW42X2FkZHIpKSB7
CisJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQlyZXR1cm47CisJCX0KKwkJ
YnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBub24gaW5ldC9pbmV0NiBza2lwICovCisJ
CXJldHVybjsKKwl9CisJaWYgKGNtZCA9PSBSVE1fQUREKSB7CisJCSh2b2lkKXNjdHBfYWRkX2Fk
ZHJfdG9fdnJmKFNDVFBfREVGQVVMVF9WUkZJRCwgKHZvaWQgKilpZmEtPmlmYV9pZnAsCisjaWYg
ZGVmaW5lZChfX0FQUExFX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmbmV0X2lu
ZGV4KGlmYS0+aWZhX2lmcCksIGlmbmV0X3R5cGUoaWZhLT5pZmFfaWZwKSwgaWZuZXRfbmFtZShp
ZmEtPmlmYV9pZnApLAorI2Vsc2UKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5p
ZmFfaWZwLT5pZl9pbmRleCwgaWZhLT5pZmFfaWZwLT5pZl90eXBlLCBpZmEtPmlmYV9pZnAtPmlm
X3huYW1lLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZh
LCBpZmEtPmlmYV9hZGRyLCBpZmFfZmxhZ3MsIDEpOworCX0gZWxzZSB7CisKKwkJc2N0cF9kZWxf
YWRkcl9mcm9tX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsIGlmYS0+aWZhX2FkZHIsCisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgaWZuZXRfaW5kZXgoaWZh
LT5pZmFfaWZwKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF9uYW1lKGlmYS0+aWZh
X2lmcCkpOworI2Vsc2UKKwkJICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9pZnAtPmlm
X2luZGV4LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2lmcC0+aWZfeG5hbWUp
OworI2VuZGlmCisKKwkJLyogV2UgZG9uJ3QgYnVtcCByZWZjb3VudCBoZXJlIHNvIHdoZW4gaXQg
Y29tcGxldGVzCisJCSAqIHRoZSBmaW5hbCBkZWxldGUgd2lsbCBoYXBwZW4uCisJCSAqLworCX0K
KyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3ZvaWQKK3NjdHBfYWRkX29y
X2RlbF9pbnRlcmZhY2VzKGludCAoKnByZWQpKHN0cnVjdCBpZm5ldCAqKSwgaW50IGFkZCkKK3sK
KwlzdHJ1Y3QgaWZuZXQgKmlmbjsKKwlzdHJ1Y3QgaWZhZGRyICppZmE7CisKKwlJRk5FVF9STE9D
SygpOworCVRBSUxRX0ZPUkVBQ0goaWZuLCAmTU9EVUxFX0dMT0JBTChpZm5ldCksIGlmX2xpbmsp
IHsKKwkJaWYgKCEoKnByZWQpKGlmbikpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCUNLX1NUQUlM
UV9GT1JFQUNIKGlmYSwgJmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5rKSB7CisJCQlzY3RwX2Fk
ZHJfY2hhbmdlKGlmYSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOworCQl9CisJfQorCUlG
TkVUX1JVTkxPQ0soKTsKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQordm9pZAor
c2N0cF9hZGRfb3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3RydWN0IGlmbmV0ICopLCBp
bnQgYWRkKQoreworCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKKwlzdHJ1Y3QgaWZhZGRyICoq
aWZhZGRybGlzdDsKKwl1aW50MzJfdCBpLCBqLCBjb3VudDsKKworCWlmIChpZm5ldF9saXN0X2dl
dChJRk5FVF9GQU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKKwkJcmV0dXJu
OworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlpZiAoISgqcHJlZCkoaWZu
ZXRsaXN0W2ldKSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlmbmV0X2dldF9hZGRyZXNz
X2xpc3QoaWZuZXRsaXN0W2ldLCAmaWZhZGRybGlzdCkgIT0gMCkgeworCQkJY29udGludWU7CisJ
CX0KKwkJZm9yIChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBqKyspIHsKKwkJCXNjdHBf
YWRkcl9jaGFuZ2UoaWZhZGRybGlzdFtqXSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOwor
CQl9CisJCWlmbmV0X2ZyZWVfYWRkcmVzc19saXN0KGlmYWRkcmxpc3QpOworCX0KKwlpZm5ldF9s
aXN0X2ZyZWUoaWZuZXRsaXN0KTsKKwlyZXR1cm47Cit9CisjZW5kaWYKKworc3RydWN0IG1idWYg
Kgorc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHVuc2lnbmVkIGludCBzcGFjZV9uZWVkZWQsIGludCB3
YW50X2hlYWRlciwKKwkJICAgICAgaW50IGhvdywgaW50IGFsbG9uZWJ1ZiwgaW50IHR5cGUpCit7
CisJc3RydWN0IG1idWYgKm0gPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID4gMTEwMDA1MiB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCW0gPSAgbV9nZXRtMihOVUxMLCBzcGFjZV9uZWVkZWQs
IGhvdywgdHlwZSwgd2FudF9oZWFkZXIgPyBNX1BLVEhEUiA6IDAsIGFsbG9uZWJ1Zik7CisjZWxz
ZQorCW0gPSAgbV9nZXRtMihOVUxMLCBzcGFjZV9uZWVkZWQsIGhvdywgdHlwZSwgd2FudF9oZWFk
ZXIgPyBNX1BLVEhEUiA6IDApOworI2VuZGlmCisJaWYgKG0gPT0gTlVMTCkgeworCQkvKiBiYWQs
IG5vIG1lbW9yeSAqLworCQlyZXR1cm4gKG0pOworCX0KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCWlmIChhbGxvbmVidWYpIHsKKwkJaWYgKFNDVFBfQlVGX1NJWkUobSkgPCBzcGFjZV9u
ZWVkZWQpIHsKKwkJCW1fZnJlZW0obSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCUtBU1NF
UlQoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMLCAoIiVzOiBubyBjaGFpbiBhbGxvd2VkIiwgX19G
VU5DVElPTl9fKSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdf
RU5BQkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JQUxMT0MpOworCX0KKyNlbmRp
ZgorI2Vsc2UKKwlpbnQgbWJ1Zl90aHJlc2hvbGQ7CisJdW5zaWduZWQgaW50IHNpemU7CisKKwlp
ZiAod2FudF9oZWFkZXIpIHsKKwkJTUdFVEhEUihtLCBob3csIHR5cGUpOworCQlzaXplID0gTUhM
RU47CisJfSBlbHNlIHsKKwkJTUdFVChtLCBob3csIHR5cGUpOworCQlzaXplID0gTUxFTjsKKwl9
CisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoYWxsb25lYnVm
ID09IDApIHsKKwkJbWJ1Zl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90
aHJlc2hvbGRfY291bnQpOworCX0gZWxzZSB7CisJCW1idWZfdGhyZXNob2xkID0gMTsKKwl9CisK
KwlpZiAoc3BhY2VfbmVlZGVkID4gKHVuc2lnbmVkIGludCkoKChtYnVmX3RocmVzaG9sZCAtIDEp
ICogTUxFTikgKyBNSExFTikpIHsKKwkJTUNMR0VUKG0sIGhvdyk7CisJCWlmIChtID09IE5VTEwp
IHsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJaWYgKFNDVFBfQlVGX0lTX0VYVEVOREVEKG0p
ID09IDApIHsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJ
c2l6ZSA9IFNDVFBfQlVGX0VYVEVORF9TSVpFKG0pOworCX0KKwlpZiAoYWxsb25lYnVmICE9IDAg
JiYgc2l6ZSA8IHNwYWNlX25lZWRlZCkgeworCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwlTQ1RQX0JVRl9MRU4obSkgPSAwOworCVNDVFBfQlVGX05FWFQobSkgPSBTQ1RQX0JV
Rl9ORVhUX1BLVChtKSA9IE5VTEw7CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5B
QkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JQUxMT0MpOworCX0KKyNlbmRpZgor
I2VuZGlmCisJcmV0dXJuIChtKTsKK30KKworCisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORwor
dm9pZAorc2N0cF9wYWNrZXRfbG9nKHN0cnVjdCBtYnVmICptKQoreworCWludCAqbGVuYXQsIHRo
aXNvbmU7CisJdm9pZCAqY29weXRvOworCXVpbnQzMl90ICp0aWNrX3RvY2s7CisJaW50IGxlbmd0
aDsKKwlpbnQgdG90YWxfbGVuOworCWludCBncmFiYmVkX2xvY2sgPSAwOworCWludCB2YWx1ZSwg
bmV3dmFsLCB0aGlzZW5kLCB0aGlzYmVnaW47CisJLyoKKwkgKiBCdWZmZXIgbGF5b3V0LgorCSAq
IC1zaXplb2YgdGhpcyBlbnRyeSAodG90YWxfbGVuKQorCSAqIC1wcmV2aW91cyBlbmQgICAgICAo
dmFsdWUpCisJICogLXRpY2tzIG9mIGxvZyAgICAgICh0aWNrcykKKwkgKiBvIC1pcCBwYWNrZXQK
KwkgKiBvIC1hcyBsb2dnZWQKKwkgKiAtIHdoZXJlIHRoaXMgc3RhcnRlZCAodGhpc2JlZ2luKQor
CSAqIHggPC0tZW5kIHBvaW50cyBoZXJlCisJICovCisJbGVuZ3RoID0gU0NUUF9IRUFERVJfTEVO
KG0pOworCXRvdGFsX2xlbiA9IFNDVFBfU0laRTMyKChsZW5ndGggKyAoNCAqIHNpemVvZihpbnQp
KSkpOworCS8qIExvZyBhIHBhY2tldCB0byB0aGUgYnVmZmVyLiAqLworCWlmICh0b3RhbF9sZW4+
IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCS8qIENhbid0IGxvZyB0aGlzIHBhY2tldCBJIGhh
dmUgbm90IGEgYnVmZmVyIGJpZyBlbm91Z2ggKi8KKwkJcmV0dXJuOworCX0KKwlpZiAobGVuZ3Ro
IDwgKGludCkoU0NUUF9NSU5fVjRfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IHNjdHBfY29va2ll
X2Fja19jaHVuaykpKSB7CisJCXJldHVybjsKKwl9CisJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFT
RV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgMSk7CisgdHJ5X2FnYWluOgorCWlmIChTQ1RQX0JB
U0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycykgPiBTQ1RQX1BLVExPR19XUklURVJTX05FRURfTE9D
SykgeworCQlTQ1RQX0lQX1BLVExPR19MT0NLKCk7CisJCWdyYWJiZWRfbG9jayA9IDE7CisJYWdh
aW5fbG9ja2VkOgorCQl2YWx1ZSA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpOworCQlu
ZXd2YWwgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSArIHRvdGFsX2xlbjsKKwkJaWYg
KG5ld3ZhbCA+PSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgeworCQkJLyogd2Ugd3JhcHBlZCAqLwor
CQkJdGhpc2JlZ2luID0gMDsKKwkJCXRoaXNlbmQgPSB0b3RhbF9sZW47CisJCX0gZWxzZSB7CisJ
CQl0aGlzYmVnaW4gPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKTsKKwkJCXRoaXNlbmQg
PSBuZXd2YWw7CisJCX0KKwkJaWYgKCEoYXRvbWljX2NtcHNldF9pbnQoJlNDVFBfQkFTRV9WQVIo
cGFja2V0X2xvZ19lbmQpLCB2YWx1ZSwgdGhpc2VuZCkpKSB7CisJCQlnb3RvIGFnYWluX2xvY2tl
ZDsKKwkJfQorCX0gZWxzZSB7CisJCXZhbHVlID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2Vu
ZCk7CisJCW5ld3ZhbCA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpICsgdG90YWxfbGVu
OworCQlpZiAobmV3dmFsID49IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCQkvKiB3ZSB3cmFw
cGVkICovCisJCQl0aGlzYmVnaW4gPSAwOworCQkJdGhpc2VuZCA9IHRvdGFsX2xlbjsKKwkJfSBl
bHNlIHsKKwkJCXRoaXNiZWdpbiA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpOworCQkJ
dGhpc2VuZCA9IG5ld3ZhbDsKKwkJfQorCQlpZiAoIShhdG9taWNfY21wc2V0X2ludCgmU0NUUF9C
QVNFX1ZBUihwYWNrZXRfbG9nX2VuZCksIHZhbHVlLCB0aGlzZW5kKSkpIHsKKwkJCWdvdG8gdHJ5
X2FnYWluOworCQl9CisJfQorCS8qIFNhbml0eSBjaGVjayAqLworCWlmICh0aGlzZW5kID49IFND
VFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCVNDVFBfUFJJTlRGKCJJbnNhbml0eSBzdG9wcyBhIGxv
ZyB0aGlzYmVnaW46JWQgdGhpc2VuZDolZCB3cml0ZXJzOiVkIGxvY2s6JWQgZW5kOiVkXG4iLAor
CQkgICAgICAgICAgICB0aGlzYmVnaW4sCisJCSAgICAgICAgICAgIHRoaXNlbmQsCisJCSAgICAg
ICAgICAgIFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwKKwkJICAgICAgICAgICAg
Z3JhYmJlZF9sb2NrLAorCQkgICAgICAgICAgICBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5k
KSk7CisJCVNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpID0gMDsKKwkJZ290byBub19sb2c7
CisKKwl9CisJbGVuYXQgPSAoaW50ICopJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19idWZmZXIp
W3RoaXNiZWdpbl07CisJKmxlbmF0ID0gdG90YWxfbGVuOworCWxlbmF0Kys7CisJKmxlbmF0ID0g
dmFsdWU7CisJbGVuYXQrKzsKKwl0aWNrX3RvY2sgPSAodWludDMyX3QgKilsZW5hdDsKKwlsZW5h
dCsrOworCSp0aWNrX3RvY2sgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7CisJY29weXRvID0gKHZv
aWQgKilsZW5hdDsKKwl0aGlzb25lID0gdGhpc2VuZCAtIHNpemVvZihpbnQpOworCWxlbmF0ID0g
KGludCAqKSZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKVt0aGlzb25lXTsKKwkqbGVu
YXQgPSB0aGlzYmVnaW47CisJaWYgKGdyYWJiZWRfbG9jaykgeworCQlTQ1RQX0lQX1BLVExPR19V
TkxPQ0soKTsKKwkJZ3JhYmJlZF9sb2NrID0gMDsKKwl9CisJbV9jb3B5ZGF0YShtLCAwLCBsZW5n
dGgsIChjYWRkcl90KWNvcHl0byk7Cisgbm9fbG9nOgorCWlmIChncmFiYmVkX2xvY2spIHsKKwkJ
U0NUUF9JUF9QS1RMT0dfVU5MT0NLKCk7CisJfQorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBf
QkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgMSk7Cit9CisKKworaW50CitzY3RwX2NvcHlf
b3V0X3BhY2tldF9sb2codWludDhfdCAqdGFyZ2V0LCBpbnQgbGVuZ3RoKQoreworCS8qIFdlIHdp
bmQgdGhyb3VnaCB0aGUgcGFja2V0IGxvZyBzdGFydGluZyBhdAorCSAqIHN0YXJ0IGNvcHlpbmcg
dXAgdG8gbGVuZ3RoIGJ5dGVzIG91dC4KKwkgKiBXZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRl
cyBjb3BpZWQuCisJICovCisJaW50IHRvY29weSwgdGhpc19jb3B5OworCWludCAqbGVuYXQ7CisJ
aW50IGRpZF9kZWxheSA9IDA7CisKKwl0b2NvcHkgPSBsZW5ndGg7CisJaWYgKGxlbmd0aCA8IChp
bnQpKDIgKiBzaXplb2YoaW50KSkpIHsKKwkJLyogbm90IGVub3VnaCByb29tICovCisJCXJldHVy
biAoMCk7CisJfQorCWlmIChTQ1RQX1BLVExPR19XUklURVJTX05FRURfTE9DSykgeworCQlhdG9t
aWNfYWRkX2ludCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpLCBTQ1RQX1BLVExP
R19XUklURVJTX05FRURfTE9DSyk7CisJYWdhaW46CisJCWlmICgoZGlkX2RlbGF5ID09IDApICYm
IChTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycykgIT0gU0NUUF9QS1RMT0dfV1JJVEVS
U19ORUVEX0xPQ0spKSB7CisJCQkvKiB3ZSBkZWxheSBoZXJlIGZvciBqdXN0IGEgbW9tZW50IGhv
cGluZyB0aGUgd3JpdGVyKHMpIHRoYXQgd2VyZQorCQkJICogcHJlc2VudCB3aGVuIHdlIGVudGVy
ZWQgd2lsbCBoYXZlIGxlZnQgYW5kIHdlIG9ubHkgaGF2ZQorCQkJICogbG9ja2luZyBvbmVzIHRo
YXQgd2lsbCBjb250ZW5kIHdpdGggdXMgZm9yIHRoZSBsb2NrLiBUaGlzCisJCQkgKiBkb2VzIG5v
dCBhc3N1cmUgMTAwJSBhY2Nlc3MsIGJ1dCBpdHMgZ29vZCBlbm91Z2ggZm9yCisJCQkgKiBhIGxv
Z2dpbmcgZmFjaWxpdHkgbGlrZSB0aGlzLgorCQkJICovCisJCQlkaWRfZGVsYXkgPSAxOworCQkJ
REVMQVkoMTApOworCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKwlTQ1RQX0lQX1BLVExPR19MT0NL
KCk7CisJbGVuYXQgPSAoaW50ICopdGFyZ2V0OworCSpsZW5hdCA9IFNDVFBfQkFTRV9WQVIocGFj
a2V0X2xvZ19lbmQpOworCWxlbmF0Kys7CisJdGhpc19jb3B5ID0gbWluKChsZW5ndGggLSBzaXpl
b2YoaW50KSksIFNDVFBfUEFDS0VUX0xPR19TSVpFKTsKKwltZW1jcHkoKHZvaWQgKilsZW5hdCwg
KHZvaWQgKilTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKSwgdGhpc19jb3B5KTsKKwlp
ZiAoU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spIHsKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpLAorCQkJCSAgICBTQ1RQX1BLVExP
R19XUklURVJTX05FRURfTE9DSyk7CisJfQorCVNDVFBfSVBfUEtUTE9HX1VOTE9DSygpOworCXJl
dHVybiAodGhpc19jb3B5ICsgc2l6ZW9mKGludCkpOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0
YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmE4M2MwZWM0Yzc2OTdkNTAyNjVhYTczOGFhMjVlNmU4
ZWE5OTU0NDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2Jz
ZF9hZGRyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIu
aApAQCAtMCwwICsxLDcxIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0Qt
My1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVt
cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNE
SUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCAzMTA1OTAgMjAx
Ni0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJTkVU
X1NDVFBfQlNEX0FERFJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9CU0RfQUREUl9IXworCisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKK2V4dGVybiBzdHJ1Y3QgaXRlcmF0b3JfY29udHJvbCBz
Y3RwX2l0X2N0bDsKK3ZvaWQgc2N0cF93YWtldXBfaXRlcmF0b3Iodm9pZCk7CisKK3ZvaWQgc2N0
cF9zdGFydHVwX2l0ZXJhdG9yKHZvaWQpOworCisKKyNpZmRlZiBJTkVUNgordm9pZCBzY3RwX2dh
dGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3Moc3RydWN0IHNjdHBfaWZhICppZmEpOworI2VuZGlmCisK
KyNpZmRlZiAgU0NUUF9QQUNLRVRfTE9HR0lORworCit2b2lkIHNjdHBfcGFja2V0X2xvZyhzdHJ1
Y3QgbWJ1ZiAqbSk7CitpbnQgc2N0cF9jb3B5X291dF9wYWNrZXRfbG9nKHVpbnQ4X3QgKnRhcmdl
dCwgaW50IGxlbmd0aCk7CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19QYW5kYV9fKQordm9p
ZCBzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlmYSwgaW50IGNtZCk7CisjZW5kaWYK
Kwordm9pZCBzY3RwX2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhpbnQgKCpwcmVkKShzdHJ1Y3QgaWZu
ZXQgKiksIGludCBhZGQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfY2FsbG91dC5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFk
OGMyZTQ4YzUzOTEuLjhmYzU3YzdhZmYwYmZmOGFkZGUwZDVkNzkyY2Q5NzY1MmE2ZGQ1ZTYgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYworKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmMKQEAgLTAsMCArMSwy
MjcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoK
KyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBT
dGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
CisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiAhZGVmaW5l
ZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorI2luY2x1
ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfTmFDbCkKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjZW5kaWYKKyNp
bmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5o
PgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dXNlcl9hdG9taWMuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgor
I2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfY2FsbG91dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNlbmRpZgorCisv
KgorICogQ2FsbG91dC9UaW1lciByb3V0aW5lcyBmb3IgT1MgdGhhdCBkb2Vzbid0IGhhdmUgdGhl
bQorICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K3N0YXRpYyBpbnQgdGlja3MgPSAwOworI2Vsc2UKK2V4dGVybiBpbnQgdGlja3M7CisjZW5kaWYK
KworaW50IHNjdHBfZ2V0X3RpY2tfY291bnQodm9pZCkgeworCWludCByZXQ7CisKKwlTQ1RQX1RJ
TUVSUV9MT0NLKCk7CisJcmV0ID0gdGlja3M7CisJU0NUUF9USU1FUlFfVU5MT0NLKCk7CisJcmV0
dXJuIHJldDsKK30KKworLyoKKyAqIFNDVFBfVElNRVJRX0xPQ0sgcHJvdGVjdHM6CisgKiAtIFND
VFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSkKKyAqIC0gc2N0cF9vc190aW1lcl9uZXh0OiBuZXh0IHRp
bWVyIHRvIGNoZWNrCisgKi8KK3N0YXRpYyBzY3RwX29zX3RpbWVyX3QgKnNjdHBfb3NfdGltZXJf
bmV4dCA9IE5VTEw7CisKK3ZvaWQKK3NjdHBfb3NfdGltZXJfaW5pdChzY3RwX29zX3RpbWVyX3Qg
KmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCit2b2lkCitzY3RwX29zX3Rp
bWVyX3N0YXJ0KHNjdHBfb3NfdGltZXJfdCAqYywgaW50IHRvX3RpY2tzLCB2b2lkICgqZnRuKSAo
dm9pZCAqKSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQoreworCS8qIHBhcmFub2lh
ICovCisJaWYgKChjID09IE5VTEwpIHx8IChmdG4gPT0gTlVMTCkpCisJICAgIHJldHVybjsKKwor
CVNDVFBfVElNRVJRX0xPQ0soKTsKKwkvKiBjaGVjayB0byBzZWUgaWYgd2UncmUgcmVzY2hlZHVs
aW5nIGEgdGltZXIgKi8KKwlpZiAoYy0+Y19mbGFncyAmIFNDVFBfQ0FMTE9VVF9QRU5ESU5HKSB7
CisJCWlmIChjID09IHNjdHBfb3NfdGltZXJfbmV4dCkgeworCQkJc2N0cF9vc190aW1lcl9uZXh0
ID0gVEFJTFFfTkVYVChjLCB0cWUpOworCQl9CisJCVRBSUxRX1JFTU9WRSgmU0NUUF9CQVNFX0lO
Rk8oY2FsbHF1ZXVlKSwgYywgdHFlKTsKKwkJLyoKKwkJICogcGFydCBvZiB0aGUgbm9ybWFsICJz
dG9wIGEgcGVuZGluZyBjYWxsb3V0IiBwcm9jZXNzCisJCSAqIGlzIHRvIGNsZWFyIHRoZSBDQUxM
T1VUX0FDVElWRSBhbmQgQ0FMTE9VVF9QRU5ESU5HCisJCSAqIGZsYWdzLiAgV2UgZG9uJ3QgYm90
aGVyIHNpbmNlIHdlIGFyZSBzZXR0aW5nIHRoZXNlCisJCSAqIGJlbG93IGFuZCB3ZSBzdGlsbCBo
b2xkIHRoZSBsb2NrLgorCQkgKi8KKwl9CisKKwkvKgorCSAqIFdlIGNvdWxkIHVubG9jay9zcGx4
IGhlcmUgYW5kIGxvY2svc3BsIGF0IHRoZSBUQUlMUV9JTlNFUlRfVEFJTCwKKwkgKiBidXQgdGhl
cmUncyBubyBwb2ludCBzaW5jZSBkb2luZyB0aGlzIHNldHVwIGRvZXNuJ3QgdGFrZSBtdWNoIHRp
bWUuCisJICovCisJaWYgKHRvX3RpY2tzIDw9IDApCisJCXRvX3RpY2tzID0gMTsKKworCWMtPmNf
YXJnID0gYXJnOworCWMtPmNfZmxhZ3MgPSAoU0NUUF9DQUxMT1VUX0FDVElWRSB8IFNDVFBfQ0FM
TE9VVF9QRU5ESU5HKTsKKwljLT5jX2Z1bmMgPSBmdG47CisJYy0+Y190aW1lID0gdGlja3MgKyB0
b190aWNrczsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSwg
YywgdHFlKTsKKwlTQ1RQX1RJTUVSUV9VTkxPQ0soKTsKK30KKworaW50CitzY3RwX29zX3RpbWVy
X3N0b3Aoc2N0cF9vc190aW1lcl90ICpjKQoreworCVNDVFBfVElNRVJRX0xPQ0soKTsKKwkvKgor
CSAqIERvbid0IGF0dGVtcHQgdG8gZGVsZXRlIGEgY2FsbG91dCB0aGF0J3Mgbm90IG9uIHRoZSBx
dWV1ZS4KKwkgKi8KKwlpZiAoIShjLT5jX2ZsYWdzICYgU0NUUF9DQUxMT1VUX1BFTkRJTkcpKSB7
CisJCWMtPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9BQ1RJVkU7CisJCVNDVFBfVElNRVJRX1VO
TE9DSygpOworCQlyZXR1cm4gKDApOworCX0KKwljLT5jX2ZsYWdzICY9IH4oU0NUUF9DQUxMT1VU
X0FDVElWRSB8IFNDVFBfQ0FMTE9VVF9QRU5ESU5HKTsKKwlpZiAoYyA9PSBzY3RwX29zX3RpbWVy
X25leHQpIHsKKwkJc2N0cF9vc190aW1lcl9uZXh0ID0gVEFJTFFfTkVYVChjLCB0cWUpOworCX0K
KwlUQUlMUV9SRU1PVkUoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSksIGMsIHRxZSk7CisJU0NU
UF9USU1FUlFfVU5MT0NLKCk7CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBf
aGFuZGxlX3RpY2soaW50IGRlbHRhKQoreworCXNjdHBfb3NfdGltZXJfdCAqYzsKKwl2b2lkICgq
Y19mdW5jKSh2b2lkICopOworCXZvaWQgKmNfYXJnOworCisJU0NUUF9USU1FUlFfTE9DSygpOwor
CS8qIHVwZGF0ZSBvdXIgdGljayBjb3VudCAqLworCXRpY2tzICs9IGRlbHRhOworCWMgPSBUQUlM
UV9GSVJTVCgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSk7CisJd2hpbGUgKGMpIHsKKwkJaWYg
KGMtPmNfdGltZSA8PSB0aWNrcykgeworCQkJc2N0cF9vc190aW1lcl9uZXh0ID0gVEFJTFFfTkVY
VChjLCB0cWUpOworCQkJVEFJTFFfUkVNT1ZFKCZTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpLCBj
LCB0cWUpOworCQkJY19mdW5jID0gYy0+Y19mdW5jOworCQkJY19hcmcgPSBjLT5jX2FyZzsKKwkJ
CWMtPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9QRU5ESU5HOworCQkJU0NUUF9USU1FUlFfVU5M
T0NLKCk7CisJCQljX2Z1bmMoY19hcmcpOworCQkJU0NUUF9USU1FUlFfTE9DSygpOworCQkJYyA9
IHNjdHBfb3NfdGltZXJfbmV4dDsKKwkJfSBlbHNlIHsKKwkJCWMgPSBUQUlMUV9ORVhUKGMsIHRx
ZSk7CisJCX0KKwl9CisJc2N0cF9vc190aW1lcl9uZXh0ID0gTlVMTDsKKwlTQ1RQX1RJTUVSUV9V
TkxPQ0soKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQordm9pZAorc2N0cF90aW1lb3V0
KHZvaWQgKmFyZyBTQ1RQX1VOVVNFRCkKK3sKKwlzY3RwX2hhbmRsZV90aWNrKFNDVFBfQkFTRV9W
QVIoc2N0cF9tYWluX3RpbWVyX3RpY2tzKSk7CisJc2N0cF9zdGFydF9tYWluX3RpbWVyKCk7Cit9
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgVElNRU9VVF9J
TlRFUlZBTCAxMAorCit2b2lkICoKK3VzZXJfc2N0cF90aW1lcl9pdGVyYXRlKHZvaWQgKmFyZykK
K3sKKwlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUCB0aW1lciIpOworCWZvciAo
OzspIHsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlTbGVlcChUSU1F
T1VUX0lOVEVSVkFMKTsKKyNlbHNlCisJCXN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisKKwkJdGlt
ZW91dC50dl9zZWMgID0gMDsKKwkJdGltZW91dC50dl91c2VjID0gMTAwMCAqIFRJTUVPVVRfSU5U
RVJWQUw7CisJCXNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdGltZW91dCk7CisjZW5kaWYK
KwkJaWYgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zaG91
bGRfZXhpdCksIDEsIDEpKSB7CisJCQlicmVhazsKKwkJfQorCQlzY3RwX2hhbmRsZV90aWNrKE1T
RUNfVE9fVElDS1MoVElNRU9VVF9JTlRFUlZBTCkpOworCX0KKwlyZXR1cm4gKE5VTEwpOworfQor
Cit2b2lkCitzY3RwX3N0YXJ0X3RpbWVyKHZvaWQpCit7CisJLyoKKwkgKiBObyBuZWVkIHRvIGRv
IFNDVFBfVElNRVJRX0xPQ0tfSU5JVCgpOworCSAqIGhlcmUsIGl0IGlzIGJlaW5nIGRvbmUgaW4g
c2N0cF9wY2JfaW5pdCgpCisJICovCisJaW50IHJjOworCisJcmMgPSBzY3RwX3VzZXJzcGFjZV90
aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCksIHVzZXJfc2N0cF90aW1l
cl9pdGVyYXRlKTsKKwlpZiAocmMpIHsKKwkJU0NUUF9QUklOVEYoIkVSUk9SOyByZXR1cm4gY29k
ZSBmcm9tIHNjdHBfdGhyZWFkX2NyZWF0ZSgpIGlzICVkXG4iLCByYyk7CisJfQorfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43NjVmOTY2YmQxYzMyMWE4MDAw
M2U3NTYyZWI1NTMzNTQ5MDYyYjY3IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9jYWxsb3V0LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY2FsbG91dC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJl
ZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7Cisj
ZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NBTExPVVRfCisjZGVmaW5lIF9ORVRJTkVU
X1NDVFBfQ0FMTE9VVF8KKworLyoKKyAqIE5PVEU6IHRoZSBmb2xsb3dpbmcgTUFDUk9TIGFyZSBy
ZXF1aXJlZCBmb3IgbG9ja2luZyB0aGUgY2FsbG91dAorICogcXVldWUgYWxvbmcgd2l0aCBhIGxv
Y2svbXV0ZXggaW4gdGhlIE9TIHNwZWNpZmljIGhlYWRlcnMgYW5kCisgKiBpbXBsZW1lbnRhdGlv
biBmaWxlczo6CisgKiAtIFNDVFBfVElNRVJRX0xPQ0soKQorICogLSBTQ1RQX1RJTUVSUV9VTkxP
Q0soKQorICogLSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKQorICogLSBTQ1RQX1RJTUVSUV9MT0NL
X0RFU1RST1koKQorICovCisKKyNkZWZpbmUgX1NDVFBfTkVFRFNfQ0FMTE9VVF8gMQorCisjZGVm
aW5lIFNDVFBfVElDS1NfUEVSX0ZBU1RUSU1PIDIwCS8qIGNhbGxlZCBhYm91dCBldmVyeSAyMG1z
ICovCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQorI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLKCkgICAgICAgICAgRW50ZXJD
cml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKKyNkZWZpbmUgU0NUUF9U
SU1FUlFfVU5MT0NLKCkgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfVkFS
KHRpbWVyX210eCkpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0tfSU5JVCgpICAgICBJbml0aWFs
aXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCkpCisjZGVmaW5lIFND
VFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpICBEZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFT
RV9WQVIodGltZXJfbXR4KSkKKyNlbHNlCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTQ1RQ
X1RJTUVSUV9MT0NLKCkgICAgICAgICAgS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBf
QkFTRV9WQVIodGltZXJfbXR4KSkgPT0gMCwgKCIlczogdGltZXJfbXR4IGFscmVhZHkgbG9ja2Vk
IiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX1RJTUVSUV9VTkxPQ0soKSAgICAgICAgS0FTU0VS
VChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKSA9PSAwLCAo
IiVzOiB0aW1lcl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFND
VFBfVElNRVJRX0xPQ0soKSAgICAgICAgICAodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBf
QkFTRV9WQVIodGltZXJfbXR4KSkKKyNkZWZpbmUgU0NUUF9USU1FUlFfVU5MT0NLKCkgICAgICAg
ICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCkpCisj
ZW5kaWYKKyNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19JTklUKCkgICAgICh2b2lkKXB0aHJlYWRf
bXV0ZXhfaW5pdCgmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhf
YXR0cikpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpICAodm9pZClwdGhyZWFk
X211dGV4X2Rlc3Ryb3koJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKKyNlbmRpZgorI2VuZGlm
CisKK2ludCBzY3RwX2dldF90aWNrX2NvdW50KHZvaWQpOworCitUQUlMUV9IRUFEKGNhbGxvdXRs
aXN0LCBzY3RwX2NhbGxvdXQpOworCitzdHJ1Y3Qgc2N0cF9jYWxsb3V0IHsKKwlUQUlMUV9FTlRS
WShzY3RwX2NhbGxvdXQpIHRxZTsKKwlpbnQgY190aW1lOwkJLyogdGlja3MgdG8gdGhlIGV2ZW50
ICovCisJdm9pZCAqY19hcmc7CQkvKiBmdW5jdGlvbiBhcmd1bWVudCAqLworCXZvaWQgKCpjX2Z1
bmMpKHZvaWQgKik7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgKi8KKwlpbnQgY19mbGFnczsJCS8qIHN0
YXRlIG9mIHRoaXMgZW50cnkgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBzY3RwX2NhbGxvdXQgc2N0
cF9vc190aW1lcl90OworCisjZGVmaW5lCVNDVFBfQ0FMTE9VVF9BQ1RJVkUJMHgwMDAyCS8qIGNh
bGxvdXQgaXMgY3VycmVudGx5IGFjdGl2ZSAqLworI2RlZmluZQlTQ1RQX0NBTExPVVRfUEVORElO
RwkweDAwMDQJLyogY2FsbG91dCBpcyB3YWl0aW5nIGZvciB0aW1lb3V0ICovCisKK3ZvaWQgc2N0
cF9vc190aW1lcl9pbml0KHNjdHBfb3NfdGltZXJfdCAqdG1yKTsKK3ZvaWQgc2N0cF9vc190aW1l
cl9zdGFydChzY3RwX29zX3RpbWVyX3QgKiwgaW50LCB2b2lkICgqKSh2b2lkICopLCB2b2lkICop
OworaW50IHNjdHBfb3NfdGltZXJfc3RvcChzY3RwX29zX3RpbWVyX3QgKik7CisKKyNkZWZpbmUg
U0NUUF9PU19USU1FUl9JTklUCXNjdHBfb3NfdGltZXJfaW5pdAorI2RlZmluZSBTQ1RQX09TX1RJ
TUVSX1NUQVJUCXNjdHBfb3NfdGltZXJfc3RhcnQKKyNkZWZpbmUgU0NUUF9PU19USU1FUl9TVE9Q
CXNjdHBfb3NfdGltZXJfc3RvcAorLyogTVQgRklYTUU6IElzIHRoZSBmb2xsb3dpbmcgY29ycmVj
dD8gKi8KKyNkZWZpbmUgU0NUUF9PU19USU1FUl9TVE9QX0RSQUlOIFNDVFBfT1NfVElNRVJfU1RP
UAorI2RlZmluZQlTQ1RQX09TX1RJTUVSX1BFTkRJTkcodG1yKSAoKHRtciktPmNfZmxhZ3MgJiBT
Q1RQX0NBTExPVVRfUEVORElORykKKyNkZWZpbmUJU0NUUF9PU19USU1FUl9BQ1RJVkUodG1yKSAo
KHRtciktPmNfZmxhZ3MgJiBTQ1RQX0NBTExPVVRfQUNUSVZFKQorI2RlZmluZQlTQ1RQX09TX1RJ
TUVSX0RFQUNUSVZBVEUodG1yKSAoKHRtciktPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9BQ1RJ
VkUpCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkIHNjdHBfc3RhcnRfdGltZXIo
dm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3ZvaWQgc2N0cF90aW1lb3V0
KHZvaWQgKik7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLmU1M2U0ZDc0N2YzMjE4OTA0YWFlZTUzYWY4YTJhYWNmMjc1N2M5ZTIg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9u
cy5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5j
CkBAIC0wLDAgKzEsMjUwOCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3Rl
bXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jIDMxMDU5
MCAyMDE2LTEyLTI2IDExOjA2OjQxWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
dXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfaW5wdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2FzY29uZi5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMzAwMAorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9kdHJhY2VfZGVjbGFyZS5oPgorI2Vu
ZGlmCisKKyNkZWZpbmUgU0hJRlRfTVBUQ1BfTVVMVElfTiA0MAorI2RlZmluZSBTSElGVF9NUFRD
UF9NVUxUSV9aIDE2CisjZGVmaW5lIFNISUZUX01QVENQX01VTFRJIDgKKworc3RhdGljIHZvaWQK
K3NjdHBfZW5mb3JjZV9jd25kX2xpbWl0KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYywg
c3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWlmICgoYXNzb2MtPm1heF9jd25kID4gMCkgJiYK
KwkgICAgKG5ldC0+Y3duZCA+IGFzc29jLT5tYXhfY3duZCkgJiYKKwkgICAgKG5ldC0+Y3duZCA+
IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSkgeworCQluZXQtPmN3bmQgPSBh
c3NvYy0+bWF4X2N3bmQgOworCQlpZiAobmV0LT5jd25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKSkpIHsKKwkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfc2V0X2luaXRpYWxf
Y2NfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7
CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jOworCXVpbnQzMl90IGN3bmRfaW5fbXR1
OworCisJYXNzb2MgPSAmc3RjYi0+YXNvYzsKKwljd25kX2luX210dSA9IFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9pbml0aWFsX2N3bmQpOworCWlmIChjd25kX2luX210dSA9PSAwKSB7CisJCS8qIFVz
aW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2YgUkZDIDQ5NjAgaXMgdXNlZC4gKi8KKwkJbmV0
LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5J
VElBTF9DV05EKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgdGFrZSB0aGUgbWluaW11bSBv
ZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQorCQkgKiBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93
LgorCQkgKi8KKwkJaWYgKChhc3NvYy0+bWF4X2J1cnN0ID4gMCkgJiYgKGN3bmRfaW5fbXR1ID4g
YXNzb2MtPm1heF9idXJzdCkpCisJCQljd25kX2luX210dSA9IGFzc29jLT5tYXhfYnVyc3Q7CisJ
CW5ldC0+Y3duZCA9IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpICogY3duZF9p
bl9tdHU7CisJfQorCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRf
UlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQ
VjIpKSB7CisJCS8qIEluIGNhc2Ugb2YgcmVzb3VyY2UgcG9vbGluZyBpbml0aWFsaXplIGFwcHJv
cHJpYXRlbHkgKi8KKwkJbmV0LT5jd25kIC89IGFzc29jLT5udW1uZXRzOworCQlpZiAobmV0LT5j
d25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpIHsKKwkJCW5ldC0+Y3du
ZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJfQorCX0KKwlzY3RwX2Vu
Zm9yY2VfY3duZF9saW1pdChhc3NvYywgbmV0KTsKKwluZXQtPnNzdGhyZXNoID0gYXNzb2MtPnBl
ZXJzX3J3bmQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAzMDAwCisJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGluaXQsCisJICAgICAgICAg
IHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8
IChzdGNiLT5ycG9ydCkpLCBuZXQsCisJICAgICAgICAgIDAsIG5ldC0+Y3duZCk7CisjZW5kaWYK
KwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYKKwkgICAgKFNDVFBf
Q1dORF9NT05JVE9SX0VOQUJMRXxTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpKSB7CisJCXNjdHBf
bG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfSU5JVElBTElaQVRJT04pOworCX0KK30K
Kworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJdWludDMyX3QgdF9zc3RocmVz
aCwgdF9jd25kOworCXVpbnQ2NF90IHRfdWN3bmRfc2J3OworCisJLyogTVQgRklYTUU6IERvbid0
IGNvbXB1dGUgdGhpcyBvdmVyIGFuZCBvdmVyIGFnYWluICovCisJdF9zc3RocmVzaCA9IDA7CisJ
dF9jd25kID0gMDsKKwl0X3Vjd25kX3NidyA9IDA7CisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9v
ZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBT
Q1RQX0NNVF9SUFYyKSkgeworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgeworCQkJdF9zc3RocmVzaCArPSBuZXQtPnNzdGhyZXNoOworCQkJdF9jd25kICs9IG5l
dC0+Y3duZDsKKwkJCWlmIChuZXQtPmxhc3RzYSA+IDApIHsKKwkJCQl0X3Vjd25kX3NidyArPSAo
dWludDY0X3QpbmV0LT5jd25kIC8gKHVpbnQ2NF90KW5ldC0+bGFzdHNhOworCQkJfQorCQl9CisJ
CWlmICh0X3Vjd25kX3NidyA9PSAwKSB7CisJCQl0X3Vjd25kX3NidyA9IDE7CisJCX0KKwl9CisK
KwkvKi0KKwkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLiAoKHNjdHBf
Y210X29uX29mZiA+IDApICYmCisJICogKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9
PSAwKSkpCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQp
IHsKKwkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09IDApIHx8CisJCSAg
ICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkpIHsKKwkJCS8qIG91dCBvZiBhIFJGQzI1ODIg
RmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCisJCQlpZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJ
CS8qCisJCQkJICogcGVyIHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBhbnkKKwkJCQkgKiBkZXN0
aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJhbnNtaXQKKwkJCQkgKiB0byB0aGVtLiBJZiBz
byB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKKwkJCQkgKiBhZGp1c3Qgc3N0aHJlc2ggYW5kIGN3bmQu
CisJCQkJICovCisJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKwkJCQlpbnQgb2xk
X2N3bmQgPSBuZXQtPmN3bmQ7CisKKwkJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBT
Q1RQX0NNVF9SUFYxKSB8fAorCQkJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID09IFNDVFBf
Q01UX1JQVjIpKSB7CisJCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRf
UlBWMSkgeworCQkJCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCk0ICoK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+
bXR1ICoKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90
KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50
NjRfdCl0X3NzdGhyZXNoKTsKKworCQkJCQl9CisJCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9v
ZmYgPT0gU0NUUF9DTVRfUlBWMikgeworCQkJCQkJdWludDMyX3Qgc3J0dDsKKworCQkJCQkJc3J0
dCA9IG5ldC0+bGFzdHNhOworCQkJCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBk
ZXZpZGUgLi4uKi8KKwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJ
CQkJCX0KKwkJCQkJCS8qIFNob3J0IFZlcnNpb24gPT4gRXF1YWwgdG8gQ29udGVsIFZlcnNpb24g
TUJlICovCisJCQkJCQluZXQtPnNzdGhyZXNoID0gKHVpbnQzMl90KSAoKCh1aW50NjRfdCk0ICoK
KwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+bXR1ICoK
KwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkg
LworCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfdWN3bmRfc2J3KSk7CisJCQkJCQkJ
CQkgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLzsKKwkJCQkJfQorCQkJCQlpZiAoKG5ldC0+Y3du
ZCA+IHRfY3duZCAvIDIpICYmCisJCQkJCSAgICAobmV0LT5zc3RocmVzaCA8IG5ldC0+Y3duZCAt
IHRfY3duZCAvIDIpKSB7CisJCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC0gdF9jd25k
IC8gMjsKKwkJCQkJfQorCQkJCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7CisJCQkJ
CQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsKKwkJCQkJaWYgKG5ldC0+c3N0aHJlc2ggPCAo
bmV0LT5tdHUgKiAyKSkgeworCQkJCQkJbmV0LT5zc3RocmVzaCA9IDIgKiBuZXQtPm10dTsKKwkJ
CQkJfQorCQkJCX0KKwkJCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOworCQkJCXNjdHBfZW5m
b3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBu
ZXQsIGZyLAorCQkJCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCisJCQkJCSAgb2xkX2N3bmQsIG5l
dC0+Y3duZCk7CisjZW5kaWYKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2N3bmQo
c3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAorCQkJCQkJU0NUUF9DV05EX0xPR19G
Uk9NX0ZSKTsKKwkJCQl9CisJCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVl
KTsKKworCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCQkJLyogVHVybiBvbiBm
YXN0IHJlY292ZXJ5IHdpbmRvdyAqLworCQkJCWFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkgPSAxOworCQkJCWlmIChsY2hrID09IE5VTEwpIHsKKwkJCQkJLyogTWFyayBlbmQgb2YgdGhl
IHdpbmRvdyAqLworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRpbmdf
c2VxIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxj
aGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDTVQgZmFzdCBy
ZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KKwkJCQkgKiByZWNvdmVyeSB2YXJpYWJsZS4KKwkJ
CQkgKi8KKwkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCisJCQkJaWYg
KGxjaGsgPT0gTlVMTCkgeworCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUgd2luZG93ICovCisJCQkJ
CW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJfSBl
bHNlIHsKKwkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAt
IDE7CisJCQkJfQorCisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELAor
CQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18xKTsKKwkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5l
dCk7CisJCQl9CisJCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJLyoKKwkJCSAq
IE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25kCisJCQkgKiByZWR1Y3Rp
b24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgorCQkJICovCisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKKwkJfQorCX0KK30KKworLyogRGVmaW5l
cyBmb3IgaW5zdGFudGFuZW91cyBidyBkZWNpc2lvbnMgKi8KKyNkZWZpbmUgU0NUUF9JTlNUX0xP
T1NJTkcgMSAvKiBMb3NpbmcgdG8gb3RoZXIgZmxvd3MgKi8KKyNkZWZpbmUgU0NUUF9JTlNUX05F
VVRSQUwgMiAvKiBOZXV0cmFsLCBubyBpbmRpY2F0aW9uICovCisjZGVmaW5lIFNDVFBfSU5TVF9H
QUlOSU5HIDMgLyogR2FpbmluZywgc3RlcCBkb3duIHBvc3NpYmxlICovCisKKworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorc3RhdGljIGlu
dAorY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwgdWludDY0X3QgbmJ3LAorCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQsIHVpbnQ2NF90IHZ0YWcs
IHVpbnQ4X3QgaW5zdF9pbmQpCisjZWxzZQorc3RhdGljIGludAorY2NfYndfc2FtZShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0
X3QgbmJ3LAorCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQsIHVpbnQ4X3QgaW5zdF9pbmQpCisjZW5k
aWYKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDMwMDAKKwl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7CisjZW5kaWYKKworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCXByb2JlcG9pbnQg
PSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKKyNlbmRpZgorCWlmIChuZXQtPnJ0dCA+
IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCArIHJ0dF9vZmZzZXQpIHsKKwkJLyoKKwkJICogcnR0
IGluY3JlYXNlZAorCQkgKiB3ZSBkb24ndCB1cGRhdGUgYncuLiBzbyB3ZSBkb24ndAorCQkgKiB1
cGRhdGUgdGhlIHJ0dCBlaXRoZXIuCisJCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkvKiBQcm9iZSBwb2ludCA1ICovCisJCXBy
b2JlcG9pbnQgfD0gICgoNSA8PCAxNikgfCAxKTsKKwkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBu
ZXQsIHJ0dHZhciwKKwkJCSAgdnRhZywKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAz
MikgfCBuYncpLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQt
PnJ0dCksCisJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkgIHByb2JlcG9pbnQpOworI2VuZGlm
CisJCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYgKGluc3RfaW5kICE9IFND
VFBfSU5TVF9MT09TSU5HKSkgeworCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0
YXRlID09IDUpCisJCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCsrOworCQkJZWxzZQorCQkJ
CW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAxOworCQkJbmV0LT5jY19tb2QucnRjYy5sYXN0
X3N0ZXBfc3RhdGUgPSA1OworCQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID09IG5l
dC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8CisJCQkgICAgKChuZXQtPmNjX21vZC5ydGNj
LnN0ZXBfY250ID4gbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYKKwkJCSAgICAgKChu
ZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ICUgbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkg
PT0gMCkpKSB7CisJCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkJb3RoID0gbmV0LT5jY19t
b2QucnRjYy52b2xfcmVkdWNlOworCQkJCW90aCA8PD0gMTY7CisJCQkJb3RoIHw9IG5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlcF9jbnQ7CisJCQkJb3RoIDw8PSAxNjsKKwkJCQlvdGggfD0gbmV0LT5jY19t
b2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7CisJCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQs
IHJ0dHN0ZXAsCisJCQkJCSAgdnRhZywKKwkJCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8
IDMyKSB8IG5idyksCisJCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwg
bmV0LT5ydHQpLAorCQkJCQkgIG90aCwKKwkJCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQkJ
CWlmIChuZXQtPmN3bmQgPiAoNCAqIG5ldC0+bXR1KSkgeworCQkJCQluZXQtPmN3bmQgLT0gbmV0
LT5tdHU7CisJCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSsrOworCQkJCX0gZWxzZSB7
CisJCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOworCQkJCX0KKwkJCX0KKwkJfQor
CQlyZXR1cm4gKDEpOworCX0KKwlpZiAobmV0LT5ydHQgPCBuZXQtPmNjX21vZC5ydGNjLmxid19y
dHQtcnR0X29mZnNldCkgeworCQkvKgorCQkgKiBydHQgZGVjcmVhc2VkLCB0aGVyZSBjb3VsZCBi
ZSBtb3JlIHJvb20uCisJCSAqIHdlIHVwZGF0ZSBib3RoIHRoZSBidyBhbmQgdGhlIHJ0dCBoZXJl
IHRvCisJCSAqIGxvY2sgdGhpcyBpbiBhcyBhIGdvb2Qgc3RlcCBkb3duLgorCQkgKi8KKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJLyog
UHJvYmUgcG9pbnQgNiAqLworCQlwcm9iZXBvaW50IHw9ICAoKDYgPDwgMTYpIHwgMCk7CisJCVNE
VF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkgIHZ0YWcsCisJCQkgICgobmV0
LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNj
Lmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJICBuZXQtPmZsaWdodF9zaXplLAorCQkJ
ICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3Rl
cCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MzAwMAorCQkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOworCQkJb3RoIDw8PSAx
NjsKKwkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OworCQkJb3RoIDw8PSAxNjsK
KwkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZTsKKwkJCVNEVF9QUk9C
RTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAorCQkJCSAgdnRhZywKKwkJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCQkgICgobmV0LT5jY19tb2QucnRjYy5s
YndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkgIG90aCwKKwkJCQkgIHByb2JlcG9pbnQp
OworI2VuZGlmCisJCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID09IDUp
ICYmCisJCQkgICAgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPiBuZXQtPmNjX21vZC5ydGNj
LnN0ZWFkeV9zdGVwKSkgeworCQkJCS8qIFN0ZXAgZG93biB3b3JrZWQgKi8KKwkJCQluZXQtPmNj
X21vZC5ydGNjLnN0ZXBfY250ID0gMDsKKwkJCQlyZXR1cm4gKDEpOworCQkJfSBlbHNlIHsKKwkJ
CQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDY7CisJCQkJbmV0LT5jY19tb2Qu
cnRjYy5zdGVwX2NudCA9IDA7CisJCQl9CisJCX0KKwkJbmV0LT5jY19tb2QucnRjYy5sYncgPSBu
Ync7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+cnR0OworCQluZXQtPmNjX21v
ZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOworCQlpZiAoaW5zdF9pbmQgPT0gU0NU
UF9JTlNUX0dBSU5JTkcpCisJCQlyZXR1cm4gKDEpOworCQllbHNlIGlmIChpbnN0X2luZCA9PSBT
Q1RQX0lOU1RfTkVVVFJBTCkKKwkJCXJldHVybiAoMSk7CisJCWVsc2UKKwkJCXJldHVybiAoMCk7
CisJfQorCS8qIE9rIGJ3IGFuZCBydHQgcmVtYWluZWQgdGhlIHNhbWUgLi4gbm8gdXBkYXRlIHRv
IGFueQorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMzAwMAorCS8qIFByb2JlIHBvaW50IDcgKi8KKwlwcm9iZXBvaW50IHw9ICAoKDcgPDwg
MTYpIHwgbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSk7CisJU0RUX1BST0JFNShzY3RwLCBj
d25kLCBuZXQsIHJ0dHZhciwKKwkJICB2dGFnLAorCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncg
PDwgMzIpIHwgbmJ3KSwKKwkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBu
ZXQtPnJ0dCksCisJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJICBwcm9iZXBvaW50KTsKKyNlbmRp
ZgorCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYgKGluc3RfaW5kICE9IFND
VFBfSU5TVF9MT09TSU5HKSkgeworCQlpZiAobmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3Rh
dGUgPT0gNSkKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQrKzsKKwkJZWxzZQorCQkJbmV0
LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDE7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVw
X3N0YXRlID0gNTsKKwkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID09IG5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8CisJCSAgICAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9j
bnQgPiBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSAmJgorCQkgICAgICgobmV0LT5jY19t
b2QucnRjYy5zdGVwX2NudCAlIG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApID09IDApKSkg
eworCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCisJCQlpZiAobmV0LT5jd25kID4gKDQgKiBuZXQt
Pm10dSkpIHsKKwkJCQluZXQtPmN3bmQgLT0gbmV0LT5tdHU7CisJCQkJbmV0LT5jY19tb2QucnRj
Yy52b2xfcmVkdWNlKys7CisJCQkJcmV0dXJuICgxKTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0LT5j
Y19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJCQl9CisJCX0KKwl9CisJaWYgKGluc3RfaW5kID09
IFNDVFBfSU5TVF9HQUlOSU5HKQorCQlyZXR1cm4gKDEpOworCWVsc2UgaWYgKGluc3RfaW5kID09
IFNDVFBfSU5TVF9ORVVUUkFMKQorCQlyZXR1cm4gKDEpOworCWVsc2UKKwkJcmV0dXJuICgoaW50
KW5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpOworfQorCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCitzdGF0aWMgaW50CitjY19id19k
ZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWlu
dDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0LAorCSAgICAgICB1aW50NjRfdCB2dGFnLCB1
aW50OF90IGluc3RfaW5kKQorI2Vsc2UKK3N0YXRpYyBpbnQKK2NjX2J3X2RlY3JlYXNlKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50
NjRfdCBuYncsIHVpbnQ2NF90IHJ0dF9vZmZzZXQsCisJICAgICAgIHVpbnQ4X3QgaW5zdF9pbmQp
CisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDMwMDAKKwl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7CisjZW5kaWYKKworCS8qIEJh
bmR3aWR0aCBkZWNyZWFzZWQuKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDMwMDAKKwlwcm9iZXBvaW50ID0gKCgodWludDY0X3QpbmV0LT5jd25k
KSA8PCAzMik7CisjZW5kaWYKKwlpZiAobmV0LT5ydHQgID4gbmV0LT5jY19tb2QucnRjYy5sYndf
cnR0K3J0dF9vZmZzZXQpIHsKKwkJLyogcnR0IGluY3JlYXNlZCAqLworCQkvKiBEaWQgd2UgYWRk
IG1vcmUgKi8KKwkJaWYgKChuZXQtPmN3bmQgPiBuZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndf
c2V0KSAmJgorCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgeworCQkJLyog
V2UgY2F1c2VkIGl0IG1heWJlLi4gYmFjayBvZmY/ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkvKiBQUk9CRSBQT0lOVCAxICov
CisJCQlwcm9iZXBvaW50IHw9ICAoKDEgPDwgMTYpIHwgMSk7CisJCQlTRFRfUFJPQkU1KHNjdHAs
IGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJCSAgdnRhZywKKwkJCQkgICgobmV0LT5jY19tb2QucnRj
Yy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8
IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkJICBwcm9iZXBv
aW50KTsKKyNlbmRpZgorCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpIHsKKwkJ
CQkvKiBTd2l0Y2ggb3ZlciB0byBDQSBpZiB3ZSBhcmUgbGVzcyBhZ2dyZXNzaXZlICovCisJCQkJ
bmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZC0xOworCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tl
ZCA9IDA7CisJCQl9CisJCQlyZXR1cm4gKDEpOworCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCS8qIFByb2JlIHBvaW50IDIgKi8K
KwkJcHJvYmVwb2ludCB8PSAgKCgyIDw8IDE2KSB8IDApOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3
bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8
IG5ldC0+cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7Cisj
ZW5kaWYKKwkJLyogU29tZW9uZSBlbHNlIC0gZmlnaHQgZm9yIG1vcmU/ICovCisJCWlmIChuZXQt
PmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZv
bF9yZWR1Y2U7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3Rl
cF9jbnQ7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9z
dGVwX3N0YXRlOworCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAsCisJCQkJ
ICB2dGFnLAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJ
CSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCSAg
b3RoLAorCQkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCS8qIERpZCB3ZSB2b2x1bnRhcmls
eSBnaXZlIHVwIHNvbWU/IGlmIHNvIHRha2UKKwkJCSAqIG9uZSBiYWNrIHBsZWFzZQorCQkJICov
CisJCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSkgJiYKKwkJCSAgICAoaW5zdF9p
bmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7CisJCQkJbmV0LT5jd25kICs9IG5ldC0+bXR1Owor
CQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCQkJCW5ldC0+
Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOworCQkJfQorCQkJbmV0LT5jY19tb2QucnRjYy5sYXN0
X3N0ZXBfc3RhdGUgPSAyOworCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJCX0K
KwkJZ290byBvdXRfZGVjaXNpb247CisJfSBlbHNlICBpZiAobmV0LT5ydHQgIDwgbmV0LT5jY19t
b2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsKKwkJLyogYncgJiBydHQgZGVjcmVhc2VkICov
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAw
CisJCS8qIFByb2JlIHBvaW50IDMgKi8KKwkJcHJvYmVwb2ludCB8PSAgKCgzIDw8IDE2KSB8IDAp
OworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAorCQkJ
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5jY19t
b2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRfc2l6
ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3Rl
YWR5X3N0ZXApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDMwMDAKKwkJCW90aCA9IG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZTsKKwkJCW90
aCA8PD0gMTY7CisJCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudDsKKwkJCW90aCA8
PD0gMTY7CisJCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7CisJCQlT
RFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKKwkJCQkgIHZ0YWcsCisJCQkJICAo
KG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkJICAoKG5ldC0+Y2NfbW9k
LnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkJICBvdGgsCisJCQkJICBwcm9i
ZXBvaW50KTsKKyNlbmRpZgorCQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UpICYm
CisJCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9HQUlOSU5HKSkgeworCQkJCW5ldC0+Y3du
ZCArPSBuZXQtPm10dTsKKwkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywg
bmV0KTsKKwkJCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UtLTsKKwkJCX0KKwkJCW5ldC0+
Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gMzsKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3Rl
cF9jbnQgPSAwOworCQl9CisJCWdvdG8gb3V0X2RlY2lzaW9uOworCX0KKwkvKiBUaGUgYncgZGVj
cmVhc2VkIGJ1dCBydHQgc3RheWVkIHRoZSBzYW1lICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJLyogUHJvYmUgcG9pbnQgNCAqLwor
CXByb2JlcG9pbnQgfD0gICgoNCA8PCAxNikgfCAwKTsKKwlTRFRfUFJPQkU1KHNjdHAsIGN3bmQs
IG5ldCwgcnR0dmFyLAorCQkgIHZ0YWcsCisJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAz
MikgfCBuYncpLAorCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+
cnR0KSwKKwkJICBuZXQtPmZsaWdodF9zaXplLAorCQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJ
aWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJb3RoID0gbmV0LT5jY19tb2Qu
cnRjYy52b2xfcmVkdWNlOworCQlvdGggPDw9IDE2OworCQlvdGggfD0gbmV0LT5jY19tb2QucnRj
Yy5zdGVwX2NudDsKKwkJb3RoIDw8PSAxNjsKKwkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFz
dF9zdGVwX3N0YXRlOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKKwkJ
CSAgdnRhZywKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJ
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkgIG90
aCwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnZv
bF9yZWR1Y2UpICYmCisJCSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7CisJ
CQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3Rj
Yi0+YXNvYywgbmV0KTsKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOworCQl9CisJ
CW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gNDsKKwkJbmV0LT5jY19tb2QucnRj
Yy5zdGVwX2NudCA9IDA7CisJfQorb3V0X2RlY2lzaW9uOgorCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
ID0gbmJ3OworCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+cnR0OworCW5ldC0+Y2Nf
bW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSBuZXQtPmN3bmQ7CisJaWYgKGluc3RfaW5kID09IFND
VFBfSU5TVF9HQUlOSU5HKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgw
KTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDMwMDAKK3N0YXRpYyBpbnQKK2NjX2J3X2luY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncsIHVpbnQ2NF90IHZ0YWcp
CisjZWxzZQorc3RhdGljIGludAorY2NfYndfaW5jcmVhc2Uoc3RydWN0IHNjdHBfdGNiICpzdGNi
IFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQ2NF90IG5idykKKyNlbmRp
ZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MzAwMAorCXVpbnQ2NF90IG90aCwgcHJvYmVwb2ludDsKKworI2VuZGlmCisJLyogQlcgaW5jcmVh
c2VkLCBzbyB1cGRhdGUgYW5kCisJICogcmV0dXJuIDAsIHNpbmNlIGFsbCBhY3Rpb25zIGluCisJ
ICogb3VyIHRhYmxlIHNheSB0byBkbyB0aGUgbm9ybWFsIENDCisJICogdXBkYXRlLiBOb3RlIHRo
YXQgd2UgcGF5IG5vIGF0dGVudGlvbiB0bworCSAqIHRoZSBpbnN0X2luZCBzaW5jZSBvdXIgb3Zl
cmFsbCBzdW0gaXMgaW5jcmVhc2luZy4KKwkgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkvKiBQUk9CRSBQT0lOVCAwICovCisJcHJv
YmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOworCVNEVF9QUk9CRTUoc2N0
cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCSAgdnRhZywKKwkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2Mu
bGJ3IDw8IDMyKSB8IG5idyksCisJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIp
IHwgbmV0LT5ydHQpLAorCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCSAgcHJvYmVwb2ludCk7Cisj
ZW5kaWYKKwlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQlvdGggPSBuZXQt
PmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7CisJCW90aCA8PD0gMTY7CisJCW90aCB8PSBuZXQtPmNj
X21vZC5ydGNjLnN0ZXBfY250OworCQlvdGggPDw9IDE2OworCQlvdGggfD0gbmV0LT5jY19tb2Qu
cnRjYy5sYXN0X3N0ZXBfc3RhdGU7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRz
dGVwLAorCQkJICB2dGFnLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5i
dyksCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwK
KwkJCSAgb3RoLAorCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQluZXQtPmNjX21vZC5ydGNj
Lmxhc3Rfc3RlcF9zdGF0ZSA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOwor
CQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAwOworCX0KKwluZXQtPmNjX21vZC5ydGNj
LmxidyA9IG5idzsKKwluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBuZXQtPnJ0dDsKKwluZXQt
PmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOworCXJldHVybiAoMCk7Cit9
CisKKy8qIFJUQ0MgQWxnb3JpdGhtIHRvIGxpbWl0IGdyb3d0aCBvZiBjd25kLCByZXR1cm4KKyAq
IHRydWUgaWYgeW91IHdhbnQgdG8gTk9UIGFsbG93IGN3bmQgZ3Jvd3RoCisgKi8KK3N0YXRpYyBp
bnQKK2NjX2J3X2xpbWl0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LCB1aW50NjRfdCBuYncpCit7CisJdWludDY0X3QgYndfb2Zmc2V0LCBydHRfb2Zmc2V0Owor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAor
CXVpbnQ2NF90IHByb2JlcG9pbnQsIHJ0dCwgdnRhZzsKKyNlbmRpZgorCXVpbnQ2NF90IGJ5dGVz
X2Zvcl90aGlzX3J0dCwgaW5zdF9idzsKKwl1aW50NjRfdCBkaXYsIGluc3Rfb2ZmOworCWludCBi
d19zaGlmdDsKKwl1aW50OF90IGluc3RfaW5kOworCWludCByZXQ7CisJLyotCisJICogSGVyZSB3
ZSBuZWVkIHRvIHNlZSBpZiB3ZSB3YW50CisJICogdG8gbGltaXQgY3duZCBncm93dGggZHVlIHRv
IGluY3JlYXNlCisJICogaW4gb3ZlcmFsbCBydHQgYnV0IG5vIGluY3JlYXNlIGluIGJ3LgorCSAq
IFdlIHVzZSB0aGUgZm9sbG93aW5nIHRhYmxlIHRvIGZpZ3VyZQorCSAqIG91dCB3aGF0IHdlIHNo
b3VsZCBkby4gV2hlbiB3ZSByZXR1cm4KKwkgKiAwLCBjYyB1cGRhdGUgZ29lcyBvbiBhcyBwbGFu
bmVkLiBJZiB3ZQorCSAqIHJldHVybiAxLCB0aGVuIG5vIGNjIHVwZGF0ZSBoYXBwZW5zIGFuZCBj
d25kCisJICogc3RheXMgd2hlcmUgaXQgaXMgYXQuCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCSAqICAgQlcgICAgfCAgICBSVFQgICB8IEFjdGlvbgorCSAqICoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqICAgSU5DICAgfCAgICBJTkMgICB8IHJl
dHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgSU5D
ICAgfCAgICBTQU1FICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorCSAqICAgSU5DICAgfCAgICBERUNSICB8IHJldHVybiAwCisJICogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAgfCAgICBJTkMgICB8IHJldHVy
biAxCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAg
fCAgICBTQU1FICB8IHJldHVybiAxCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCSAqICAgU0FNRSAgfCAgICBERUNSICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgREVDUiAgfCAgICBJTkMgICB8IHJldHVybiAw
IG9yIDEgYmFzZWQgb24gaWYgd2UgY2F1c2VkLgorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKwkgKiAgIERFQ1IgIHwgICAgU0FNRSAgfCByZXR1cm4gMAorCSAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIERFQ1IgIHwgICAgREVDUiAgfCBy
ZXR1cm4gMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKgorCSAq
IFdlIGFyZSBhIGJpdCBmdXp6IG9uIHdoYXQgYW4gaW5jcmVhc2Ugb3IKKwkgKiBkZWNyZWFzZSBp
cy4gRm9yIEJXIGl0IGlzIHRoZSBzYW1lIGlmCisJICogaXQgZGlkIG5vdCBjaGFuZ2Ugd2l0aGlu
IDEvNjR0aC4gRm9yCisJICogUlRUIGl0IHN0YXllZCB0aGUgc2FtZSBpZiBpdCBkaWQgbm90CisJ
ICogY2hhbmdlIHdpdGhpbiAxLzMybmQKKwkgKi8KKwlid19zaGlmdCA9IFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydHR2YXJfYncpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMzAwMAorCXJ0dCA9IHN0Y2ItPmFzb2MubXlfdnRhZzsKKwl2dGFnID0g
KHJ0dCA8PCAzMikgfCAoKCh1aW50MzJfdCkoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCkpIDw8
IDE2KSB8IChzdGNiLT5ycG9ydCk7CisJcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3du
ZCkgPDwgMzIpOworCXJ0dCA9IG5ldC0+cnR0OworI2VuZGlmCisJaWYgKG5ldC0+Y2NfbW9kLnJ0
Y2MucnR0X3NldF90aGlzX3NhY2spIHsKKwkJbmV0LT5jY19tb2QucnRjYy5ydHRfc2V0X3RoaXNf
c2FjayA9IDA7CisJCWJ5dGVzX2Zvcl90aGlzX3J0dCA9IG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0
ZXMgLSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzX2F0X2xhc3RfcnR0YzsKKwkJbmV0LT5jY19t
b2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVz
OworCQlpZiAobmV0LT5ydHQpIHsKKwkJCWRpdiA9IG5ldC0+cnR0IC8gMTAwMDsKKwkJCWlmIChk
aXYpIHsKKwkJCQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gZGl2OworCQkJCWluc3Rf
b2ZmID0gaW5zdF9idyA+PiBid19zaGlmdDsKKwkJCQlpZiAoaW5zdF9idyA+IG5idykKKwkJCQkJ
aW5zdF9pbmQgPSBTQ1RQX0lOU1RfR0FJTklORzsKKwkJCQllbHNlIGlmICgoaW5zdF9idytpbnN0
X29mZikgPCBuYncpCisJCQkJCWluc3RfaW5kID0gU0NUUF9JTlNUX0xPT1NJTkc7CisJCQkJZWxz
ZQorCQkJCQlpbnN0X2luZCA9IFNDVFBfSU5TVF9ORVVUUkFMOworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkJCXByb2JlcG9pbnQgfD0g
ICgoMHhiIDw8IDE2KSB8IGluc3RfaW5kKTsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQlpbnN0
X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCQlpbnN0X2J3ID0gYnl0
ZXNfZm9yX3RoaXNfcnR0IC8gKHVpbnQ2NF90KShuZXQtPnJ0dCk7CisJCQkJLyogQ2FuJ3QgZGV0
ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8KKwkJCQlwcm9iZXBvaW50IHw9ICAoKDB4YyA8PCAxNikg
fCBpbnN0X2luZCk7CisjZW5kaWYKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWluc3RfaW5kID0gbmV0
LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkJaW5zdF9idyA9IGJ5dGVzX2Zvcl90aGlz
X3J0dDsKKwkJCS8qIENhbid0IGRldGVybWluZSBkbyBub3QgY2hhbmdlICovCisJCQlwcm9iZXBv
aW50IHw9ICAoKDB4ZCA8PCAxNikgfCBpbnN0X2luZCk7CisjZW5kaWYKKwkJfQorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQlTRFRfUFJP
QkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAorCQkJICAoKG5idyA8PCAz
MikgfCBpbnN0X2J3KSwKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwg
cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYK
Kwl9IGVsc2UgeworCQkvKiBObyBydHQgbWVhc3VyZW1lbnQsIHVzZSBsYXN0IG9uZSAqLworCQlp
bnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsKKwl9CisJYndfb2Zmc2V0
ID0gbmV0LT5jY19tb2QucnRjYy5sYncgPj4gYndfc2hpZnQ7CisJaWYgKG5idyA+IG5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3ICsgYndfb2Zmc2V0KSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCXJldCA9IGNjX2J3X2luY3JlYXNlKHN0Y2Is
IG5ldCwgbmJ3LCB2dGFnKTsKKyNlbHNlCisJCXJldCA9IGNjX2J3X2luY3JlYXNlKHN0Y2IsIG5l
dCwgbmJ3KTsKKyNlbmRpZgorCQlnb3RvIG91dDsKKwl9CisJcnR0X29mZnNldCA9IG5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3X3J0dCA+PiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCk7CisJ
aWYgKG5idyA8IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IC0gYndfb2Zmc2V0KSB7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCXJldCA9IGNj
X2J3X2RlY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCBydHRfb2Zmc2V0LCB2dGFnLCBpbnN0X2luZCk7
CisjZWxzZQorCQlyZXQgPSBjY19id19kZWNyZWFzZShzdGNiLCBuZXQsIG5idywgcnR0X29mZnNl
dCwgaW5zdF9pbmQpOworI2VuZGlmCisJCWdvdG8gb3V0OworCX0KKwkvKiBJZiB3ZSByZWFjaCBo
ZXJlIHRoZW4KKwkgKiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUKKwkgKiB0aGUgYncgc3Rh
eWVkIHRoZSBzYW1lLgorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMzAwMAorCXJldCA9IGNjX2J3X3NhbWUoc3RjYiwgbmV0LCBuYncsIHJ0
dF9vZmZzZXQsIHZ0YWcsIGluc3RfaW5kKTsKKyNlbHNlCisJcmV0ID0gY2NfYndfc2FtZShzdGNi
LCBuZXQsIG5idywgcnR0X29mZnNldCwgaW5zdF9pbmQpOworI2VuZGlmCitvdXQ6CisJbmV0LT5j
Y19tb2QucnRjYy5sYXN0X2luc3RfaW5kID0gaW5zdF9pbmQ7CisJcmV0dXJuIChyZXQpOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1vbihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisJCQkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJ
CQkJICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVuZWdlZF9hbGwgU0NUUF9VTlVTRUQsIGludCB3
aWxsX2V4aXQsIGludCB1c2VfcnRjYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJaW50
IG9sZF9jd25kOworI2VuZGlmCisJdWludDMyX3QgdF9zc3RocmVzaCwgdF9jd25kLCBpbmNyOwor
CXVpbnQ2NF90IHRfdWN3bmRfc2J3OworCXVpbnQ2NF90IHRfcGF0aF9tcHRjcDsKKwl1aW50NjRf
dCBtcHRjcF9saWtlX2FscGhhOworCXVpbnQzMl90IHNydHQ7CisJdWludDY0X3QgbWF4X3BhdGg7
CisKKwkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4g
Ki8KKwl0X3NzdGhyZXNoID0gMDsKKwl0X2N3bmQgPSAwOworCXRfdWN3bmRfc2J3ID0gMDsKKwl0
X3BhdGhfbXB0Y3AgPSAwOworCW1wdGNwX2xpa2VfYWxwaGEgPSAxOworCWlmICgoc3RjYi0+YXNv
Yy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Mu
c2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpIHx8CisJICAgIChzdGNiLT5hc29jLnNj
dHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9NUFRDUCkpIHsKKwkJbWF4X3BhdGggPSAwOworCQlU
QUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQl0X3Nz
dGhyZXNoICs9IG5ldC0+c3N0aHJlc2g7CisJCQl0X2N3bmQgKz0gbmV0LT5jd25kOworCQkJLyog
bGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KKwkJCXNydHQgPSBuZXQt
Pmxhc3RzYTsKKwkJCWlmIChzcnR0ID4gMCkgeworCQkJCXVpbnQ2NF90IHRtcDsKKworCQkJCXRf
dWN3bmRfc2J3ICs9ICh1aW50NjRfdCluZXQtPmN3bmQgLyAodWludDY0X3Qpc3J0dDsKKwkJCQl0
X3BhdGhfbXB0Y3AgKz0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCBTSElGVF9NUFRDUF9NVUxU
SV9aKSAvCisJCQkJICAgICAgICAgICAgICAgICgoKHVpbnQ2NF90KW5ldC0+bXR1KSAqICh1aW50
NjRfdClzcnR0KTsKKwkJCQl0bXAgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IFNISUZUX01Q
VENQX01VTFRJX04pIC8KKwkJCQkgICAgICAoKHVpbnQ2NF90KW5ldC0+bXR1ICogKHVpbnQ2NF90
KShzcnR0ICogc3J0dCkpOworCQkJCWlmICh0bXAgPiBtYXhfcGF0aCkgeworCQkJCQltYXhfcGF0
aCA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHRfcGF0aF9tcHRjcCA+IDApIHsKKwkJ
CW1wdGNwX2xpa2VfYWxwaGEgPSBtYXhfcGF0aCAvICh0X3BhdGhfbXB0Y3AgKiB0X3BhdGhfbXB0
Y3ApOworCQl9IGVsc2UgeworCQkJbXB0Y3BfbGlrZV9hbHBoYSA9IDE7CisJCX0KKwl9CisJaWYg
KHRfc3N0aHJlc2ggPT0gMCkgeworCQl0X3NzdGhyZXNoID0gMTsKKwl9CisJaWYgKHRfdWN3bmRf
c2J3ID09IDApIHsKKwkJdF91Y3duZF9zYncgPSAxOworCX0KKwkvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCS8qIHVwZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAgICovCisJLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5l
dHMsIHNjdHBfbmV4dCkgeworCisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorCQkvKgor
CQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgorCQkgKi8KKwkJaWYg
KG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNr
KSB7CisJCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9y
ZWNvdmVyeV90c24pIHx8CisJCQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5l
dC0+ZmFzdF9yZWNvdmVyeV90c24pKSB7CisJCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVy
eSA9IDE7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0
aGlzIGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KKwkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7CisJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dO
RF9MT0dfRlJPTV9TQUNLKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgSkFOQV9D
TVRfRkFTVF9SRUNPVkVSWQorICAgICAgICAgICAgICAgIC8qIENNVCBmYXN0IHJlY292ZXJ5IGNv
ZGUKKwkJICovCisJCS8qCisJCSAgaWYgKHNjdHBfY210X29uX29mZiA+IDAgJiYgbmV0LT5mYXN0
X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIG5ldC0+d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPT0g
MCkgeworCQkgIEBAQCBEbyBzb21ldGhpbmcKKwkJICB9CisJCSAgZWxzZSBpZiAoc2N0cF9jbXRf
b25fb2ZmID09IDAgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiB3aWxsX2V4
aXQgPT0gMCkgeworCQkqLworI2VuZGlmCisKKwkJaWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3Nf
cmVjb3ZlcnkgJiYKKwkJICAgICh3aWxsX2V4aXQgPT0gMCkgJiYKKwkJICAgIChhc29jLT5zY3Rw
X2NtdF9vbl9vZmYgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgaW4gbG9zcyByZWNv
dmVyeSB3ZSBza2lwIGFueSBjd25kCisJCQkgKiB1cGRhdGUKKwkJCSAqLworCQkJcmV0dXJuOwor
CQl9CisJCS8qCisJCSAqIERpZCBhbnkgbWVhc3VyZW1lbnRzIGdvIG9uIGZvciB0aGlzIG5ldHdv
cms/CisJCSAqLworCQlpZiAodXNlX3J0Y2MgJiYgKG5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRz
X3NldCA+IDApKSB7CisJCQl1aW50NjRfdCBuYnc7CisJCQkvKgorCQkJICogQXQgdGhpcyBwb2lu
dCBvdXIgYndfYnl0ZXMgaGFzIGJlZW4gdXBkYXRlZAorCQkJICogYnkgaW5jb21pbmcgc2FjayBp
bmZvcm1hdGlvbi4KKwkJCSAqCisJCQkgKiBCdXQgb3VyIGJ3IG1heSBub3QgeWV0IGJlIHNldC4K
KwkJCSAqCisJCQkgKi8KKwkJCWlmICgobmV0LT5jY19tb2QucnRjYy5uZXdfdG90X3RpbWUvMTAw
MCkgPiAwKSB7CisJCQkJbmJ3ID0gbmV0LT5jY19tb2QucnRjYy5id19ieXRlcy8obmV0LT5jY19t
b2QucnRjYy5uZXdfdG90X3RpbWUvMTAwMCk7CisJCQl9IGVsc2UgeworCQkJCW5idyA9IG5ldC0+
Y2NfbW9kLnJ0Y2MuYndfYnl0ZXM7CisJCQl9CisJCQlpZiAobmV0LT5jY19tb2QucnRjYy5sYncp
IHsKKwkJCQlpZiAoY2NfYndfbGltaXQoc3RjYiwgbmV0LCBuYncpKSB7CisJCQkJCS8qIEhvbGQg
aGVyZSwgbm8gdXBkYXRlICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gZWxzZSB7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJ
CQkJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKKworCQkJCXByb2JlcG9pbnQgPSAoKCh1aW50
NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKKwkJCQlwcm9iZXBvaW50IHw9ICAoKDB4YSA8PCAxNikg
fCAwKTsKKwkJCQl2dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8CisJCQkJCSgoKHVpbnQzMl90KShz
dGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKKwkJCQkJKHN0Y2ItPnJwb3J0KTsK
KworCQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkJCSAgdnRhZywK
KwkJCQkJICBuYncsCisJCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwg
bmV0LT5ydHQpLAorCQkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkJCSAgcHJvYmVwb2ludCk7
CisjZW5kaWYKKwkJCQluZXQtPmNjX21vZC5ydGNjLmxidyA9IG5idzsKKwkJCQluZXQtPmNjX21v
ZC5ydGNjLmxid19ydHQgPSBuZXQtPnJ0dDsKKwkJCQlpZiAobmV0LT5jY19tb2QucnRjYy5ydHRf
c2V0X3RoaXNfc2FjaykgeworCQkJCQluZXQtPmNjX21vZC5ydGNjLnJ0dF9zZXRfdGhpc19zYWNr
ID0gMDsKKwkJCQkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSBuZXQt
PmNjX21vZC5ydGNjLmJ3X2J5dGVzOworCQkJCX0KKwkJCX0KKwkJfQorCQkvKgorCQkgKiBDTVQ6
IENVQyBhbGdvcml0aG0uIFVwZGF0ZSBjd25kIGlmIHBzZXVkby1jdW1hY2sgaGFzCisJCSAqIG1v
dmVkLgorCQkgKi8KKwkJaWYgKGFjY3VtX21vdmVkIHx8CisJCSAgICAoKGFzb2MtPnNjdHBfY210
X29uX29mZiA+IDApICYmIG5ldC0+bmV3X3BzZXVkb19jdW1hY2spKSB7CisJCQkvKiBJZiB0aGUg
Y3VtdWxhdGl2ZSBhY2sgbW92ZWQgd2UgY2FuIHByb2NlZWQgKi8KKwkJCWlmIChuZXQtPmN3bmQg
PD0gbmV0LT5zc3RocmVzaCkgeworCQkJCS8qIFdlIGFyZSBpbiBzbG93IHN0YXJ0ICovCisJCQkJ
aWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0LT5jd25kKSB7CisJCQkJ
CXVpbnQzMl90IGxpbWl0OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAzMDAwCisJCQkJCW9sZF9jd25kID0gbmV0LT5jd25kOworI2VuZGlmCisJ
CQkJCXN3aXRjaCAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmKSB7CisJCQkJCWNhc2UgU0NUUF9DTVRf
UlBWMToKKwkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9M
Ml9hYmNfdmFyaWFibGUpICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5l
dC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICAodWludDY0X3QpdF9zc3Ro
cmVzaCk7CisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAq
CisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJ
CQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKKwkJCQkJCWlmIChp
bmNyID4gbGltaXQpIHsKKwkJCQkJCQlpbmNyID0gbGltaXQ7CisJCQkJCQl9CisJCQkJCQlpZiAo
aW5jciA9PSAwKSB7CisJCQkJCQkJaW5jciA9IDE7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJ
CQkJY2FzZSBTQ1RQX0NNVF9SUFYyOgorCQkJCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVl
ZCB0byBkaXZpZGUgLi4uKi8KKwkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsKKwkJCQkJCWlmIChz
cnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJCQkJCX0KKwkJCQkJCWxpbWl0ID0gKHVp
bnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAg
KHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpICoKKwkJCQkJ
CSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLworCQkJCQkJICAgICAg
ICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqIHRfdWN3bmRfc2J3KSk7CisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgLyogSU5DUkVBU0UgRkFDVE9SICovCisJCQkJCQlpbmNyID0gKHVpbnQz
Ml90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAg
KHVpbnQ2NF90KW5ldC0+Y3duZCkgLworCQkJCQkJICAgICAgICAgICAgICAgICAgKCh1aW50NjRf
dClzcnR0ICogdF91Y3duZF9zYncpKTsKKwkJCQkJCSAgICAgICAgICAgICAgICAgIC8qIElOQ1JF
QVNFIEZBQ1RPUiAqLworCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkgeworCQkJCQkJCWluY3IgPSBs
aW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID09IDApIHsKKwkJCQkJCQlpbmNyID0gMTsK
KwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFNDVFBfQ01UX01QVENQOgorCQkJCQkJ
bGltaXQgPSAodWludDMyX3QpKCgodWludDY0X3QpbmV0LT5tdHUgKgorCQkJCQkJICAgICAgICAg
ICAgICAgICAgICBtcHRjcF9saWtlX2FscGhhICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAg
KHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpKSA+PgorCQkJ
CQkJICAgICAgICAgICAgICAgICAgIFNISUZUX01QVENQX01VTFRJKTsKKwkJCQkJCWluY3IgID0g
KHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJCQkJCQkgICAgICAgICAgICAg
ICAgICAgIG1wdGNwX2xpa2VfYWxwaGEpID4+CisJCQkJCQkgICAgICAgICAgICAgICAgICAgU0hJ
RlRfTVBUQ1BfTVVMVEkpOworCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkgeworCQkJCQkJCWluY3Ig
PSBsaW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID4gbmV0LT5uZXRfYWNrKSB7CisJCQkJ
CQkJaW5jciA9IG5ldC0+bmV0X2FjazsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID4gbmV0LT5t
dHUpIHsKKwkJCQkJCQlpbmNyID0gbmV0LT5tdHU7CisJCQkJCQl9CisJCQkJCQlicmVhazsKKwkJ
CQkJZGVmYXVsdDoKKwkJCQkJCWluY3IgPSBuZXQtPm5ldF9hY2s7CisJCQkJCQlpZiAoaW5jciA+
IG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkpIHsKKwkJ
CQkJCQlpbmNyID0gbmV0LT5tdHUgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3Zhcmlh
YmxlKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCW5ldC0+Y3duZCArPSBp
bmNyOworCQkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc29jLCBuZXQpOworCQkJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1Jf
RU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgaW5jciwKKwkJCQkJCSAg
ICAgICAgICAgICAgU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKKwkJCQkJfQorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkJCQlTRFRfUFJP
QkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAorCQkJCQkgICAgICAgICAgc3RjYi0+YXNvYy5teV92
dGFnLAorCQkJCQkgICAgICAgICAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8
IChzdGNiLT5ycG9ydCkpLAorCQkJCQkgICAgICAgICAgbmV0LAorCQkJCQkgICAgICAgICAgb2xk
X2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxF
KSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQkJ
CSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNl
IHsKKwkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8KKwkJCQkvKgorCQkJ
CSAqIEFkZCB0byBwYmEKKwkJCQkgKi8KKwkJCSAgICAgICAgbmV0LT5wYXJ0aWFsX2J5dGVzX2Fj
a2VkICs9IG5ldC0+bmV0X2FjazsKKworCQkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSArIG5ldC0+
bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID49IG5ldC0+Y3duZCkpIHsKKwkJCQkJbmV0
LT5wYXJ0aWFsX2J5dGVzX2Fja2VkIC09IG5ldC0+Y3duZDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCQkJb2xkX2N3bmQgPSBuZXQt
PmN3bmQ7CisjZW5kaWYKKwkJCQkJc3dpdGNoIChhc29jLT5zY3RwX2NtdF9vbl9vZmYpIHsKKwkJ
CQkJY2FzZSBTQ1RQX0NNVF9SUFYxOgorCQkJCQkJaW5jciA9ICh1aW50MzJfdCkoKCh1aW50NjRf
dCluZXQtPm10dSAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0
aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsK
KwkJCQkJCWlmIChpbmNyID09IDApIHsKKwkJCQkJCQlpbmNyID0gMTsKKwkJCQkJCX0KKwkJCQkJ
CWJyZWFrOworCQkJCQljYXNlIFNDVFBfQ01UX1JQVjI6CisJCQkJCQkvKiBsYXN0c2E+PjM7ICB3
ZSBkb24ndCBuZWVkIHRvIGRpdmlkZSAuLi4gKi8KKwkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsK
KwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJCQkJCX0KKwkJCQkJ
CWluY3IgPSAodWludDMyX3QpKCh1aW50NjRfdCluZXQtPm10dSAqCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAodWludDY0X3QpbmV0LT5jd25kIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICgo
dWludDY0X3Qpc3J0dCAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgdF91Y3duZF9zYncpKTsK
KwkJCQkJCSAgICAgICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLworCQkJCQkJaWYg
KGluY3IgPT0gMCkgeworCQkJCQkJCWluY3IgPSAxOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJ
CQkJCWNhc2UgU0NUUF9DTVRfTVBUQ1A6CisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgobXB0Y3Bf
bGlrZV9hbHBoYSAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KSBuZXQtPmN3
bmQpID4+CisJCQkJCQkgICAgICAgICAgICAgICAgICBTSElGVF9NUFRDUF9NVUxUSSk7CisJCQkJ
CQlpZiAoaW5jciA+IG5ldC0+bXR1KSB7CisJCQkJCQkJaW5jciA9IG5ldC0+bXR1OworCQkJCQkJ
fQorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlpbmNyID0gbmV0LT5tdHU7CisJ
CQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQluZXQtPmN3bmQgKz0gaW5jcjsKKwkJCQkJc2N0cF9l
bmZvcmNlX2N3bmRfbGltaXQoYXNvYywgbmV0KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCQkJU0RUX1BST0JFNShzY3RwLCBjd25k
LCBuZXQsIGFjaywKKwkJCQkJCSAgc3RjYi0+YXNvYy5teV92dGFnLAorCQkJCQkJICAoKHN0Y2It
PnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCisJCQkJCQkgIG5l
dCwKKwkJCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJM
RSkgeworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1LAorCQkJCQkJCSAg
ICAgIFNDVFBfQ1dORF9MT0dfRlJPTV9DQSk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJ
TkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNr
LAorCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EpOworCQkJCQl9CisJCQkJfQor
CQkJfQorCQl9IGVsc2UgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3Rj
YiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJICAgICAgU0NUUF9DV05EX0xPR19OT19DVU1BQ0spOwor
CQkJfQorCQl9CisJfQorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAzMDAwCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9leGl0X3Bm
X2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKKyNl
bHNlCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2NvbW1vbihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKKyNlbmRp
ZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MzAwMAorCWludCBvbGRfY3duZDsKKworCW9sZF9jd25kID0gbmV0LT5jd25kOworI2VuZGlmCisJ
bmV0LT5jd25kID0gbmV0LT5tdHU7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAzMDAwCisJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGFjaywK
KwkgICAgICAgICAgc3RjYi0+YXNvYy5teV92dGFnLCAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBv
cnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksIG5ldCwKKwkgICAgICAgICAgb2xkX2N3bmQsIG5l
dC0+Y3duZCk7CisjZW5kaWYKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkRlc3RpbmF0
aW9uICVwIG1vdmVkIGZyb20gUEYgdG8gcmVhY2hhYmxlIHdpdGggY3duZCAlZC5cbiIsCisJICAg
ICAgICAodm9pZCAqKW5ldCwgbmV0LT5jd25kKTsKK30KKworCitzdGF0aWMgdm9pZAorc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KQoreworCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKwl1aW50MzJfdCB0
X3NzdGhyZXNoLCB0X2N3bmQ7CisJdWludDY0X3QgdF91Y3duZF9zYnc7CisKKwkvKiBNVCBGSVhN
RTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4gKi8KKwl0X3NzdGhyZXNo
ID0gMDsKKwl0X2N3bmQgPSAwOworCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0g
U0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFND
VFBfQ01UX1JQVjIpKSB7CisJCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7CisJCXVpbnQzMl90IHNy
dHQ7CisKKwkJdF91Y3duZF9zYncgPSAwOworCQlUQUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5h
c29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJdF9zc3RocmVzaCArPSBsbmV0LT5zc3RocmVzaDsK
KwkJCXRfY3duZCArPSBsbmV0LT5jd25kOworCQkJc3J0dCA9IGxuZXQtPmxhc3RzYTsKKwkJCS8q
IGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8gZGl2aWRlIC4uLiAqLworCQkJaWYgKHNydHQg
PiAwKSB7CisJCQkJdF91Y3duZF9zYncgKz0gKHVpbnQ2NF90KWxuZXQtPmN3bmQgLyAodWludDY0
X3Qpc3J0dDsKKwkJCX0KKwkJfQorCQlpZiAodF9zc3RocmVzaCA8IDEpIHsKKwkJCXRfc3N0aHJl
c2ggPSAxOworCQl9CisJCWlmICh0X3Vjd25kX3NidyA8IDEpIHsKKwkJCXRfdWN3bmRfc2J3ID0g
MTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBW
MSkgeworCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCk0ICoKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5tdHUgKgorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCluZXQtPnNzdGhyZXNoKSAvCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpdF9zc3RocmVzaCk7CisJCX0gZWxzZSB7
CisJCQl1aW50NjRfdCBjY19kZWx0YTsKKworCQkJc3J0dCA9IG5ldC0+bGFzdHNhOworCQkJLyog
bGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uICovCisJCQlpZiAoc3J0dCA9
PSAwKSB7CisJCQkJc3J0dCA9IDE7CisJCQl9CisJCQljY19kZWx0YSA9IHRfdWN3bmRfc2J3ICog
KHVpbnQ2NF90KXNydHQgLyAyOworCQkJaWYgKGNjX2RlbHRhIDwgdF9jd25kKSB7CisJCQkJbmV0
LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKHVpbnQ2NF90KXRfY3duZCAtIGNjX2RlbHRhKTsKKwkJ
CX0gZWxzZSB7CisJCQkJbmV0LT5zc3RocmVzaCAgPSBuZXQtPm10dTsKKwkJCX0KKwkJfQorCQlp
ZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCisJCSAgICAobmV0LT5zc3RocmVzaCA8IG5l
dC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7CisJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC0g
dF9jd25kIC8gMjsKKwkJfQorCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7CisJCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCX0KKwl9IGVsc2UgeworCQluZXQtPnNzdGhyZXNo
ID0gbWF4KG5ldC0+Y3duZCAvIDIsIDQgKiBuZXQtPm10dSk7CisJfQorCW5ldC0+Y3duZCA9IG5l
dC0+bXR1OworCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJU0RUX1BST0JFNShzY3Rw
LCBjd25kLCBuZXQsIHRvLAorCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywKKwkJICAoKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCisJCSAgbmV0LAorCQkg
IG9sZF9jd25kLCBuZXQtPmN3bmQpOworI2VuZGlmCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIG5ldCwgbmV0LT5jd25kIC0gb2xkX2N3bmQsIFNDVFBfQ1dORF9MT0dfRlJP
TV9SVFgpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNu
X2VjaG9fY29tbW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0
LAorCQkJCQkgICAgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9zdCwgaW50IHVzZV9ydGNj
KQoreworCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKwlpZiAoKHVzZV9ydGNjKSAmJiAobmV0
LT5sYW5fdHlwZSA9PSBTQ1RQX0xBTl9MT0NBTCkgJiYgKG5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2Rj
Y2NfZWNuKSkgeworCQkvKiBEYXRhIGNlbnRlciBDb25nZXN0aW9uIENvbnRyb2wgKi8KKwkJaWYg
KGluX3dpbmRvdyA9PSAwKSB7CisJCQkvKiBHbyB0byBDQSB3aXRoIHRoZSBjd25kIGF0IHRoZSBw
b2ludCB3ZSBzZW50CisJCQkgKiB0aGUgVFNOIHRoYXQgd2FzIG1hcmtlZCB3aXRoIGEgQ0UuCisJ
CQkgKi8KKwkJCWlmIChuZXQtPmVjbl9wcmV2X2N3bmQgPCBuZXQtPmN3bmQpIHsKKwkJCQkvKiBS
ZXN0b3JlIHRvIHByZXYgY3duZCAqLworCQkJCW5ldC0+Y3duZCA9IG5ldC0+ZWNuX3ByZXZfY3du
ZCAtIChuZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7CisJCQl9IGVsc2UgeworCQkJCS8qIEp1c3Qg
Y3V0IGluIDEvMiAqLworCQkJCW5ldC0+Y3duZCAvPSAyOworCQkJfQorCQkJLyogRHJvcCB0byBD
QSAqLworCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIChudW1fcGt0X2xvc3QgKiBuZXQt
Pm10dSk7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIChu
ZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TQVQpOworCQkJfQorCQl9
IGVsc2UgeworCQkJLyogRnVydGhlciB0dW5pbmcgZG93biByZXF1aXJlZCBvdmVyIHRoZSBkcmFz
dGljIG9yaWdpbmFsIGN1dCAqLworCQkJbmV0LT5zc3RocmVzaCAtPSAobmV0LT5tdHUgKiBudW1f
cGt0X2xvc3QpOworCQkJbmV0LT5jd25kIC09IChuZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7CisJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01P
TklUT1JfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQg
LSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TQVQpOworCQkJfQorCisJCX0KKwkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKKwl9ICBlbHNlIHsKKwkJaWYgKGlu
X3dpbmRvdyA9PSAwKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19lY25lcmVkdWNlZGN3bmQp
OworCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7CisJCQlpZiAobmV0LT5zc3RocmVz
aCA8IG5ldC0+bXR1KSB7CisJCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+bXR1OworCQkJCS8qIGhl
cmUgYmFjayBvZmYgdGhlIHRpbWVyIGFzIHdlbGwsIHRvIHNsb3cgdXMgZG93biAqLworCQkJCW5l
dC0+UlRPIDw8PSAxOworCQkJfQorCQkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCVNE
VF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBlY24sCisJCQkJICBzdGNiLT5hc29jLm15X3Z0YWcs
CisJCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0
KSksCisJCQkJICBuZXQsCisJCQkJICBvbGRfY3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05J
VE9SX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0g
b2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKKwkJCX0KKwkJfQorCX0KKworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBzdHJ1Y3Qgc2N0cF9w
a3Rkcm9wX2NodW5rICpjcCwKKwl1aW50MzJfdCAqYm90dGxlX2J3LCB1aW50MzJfdCAqb25fcXVl
dWUpCit7CisJdWludDMyX3QgYndfYXZhaWw7CisJdW5zaWduZWQgaW50IGluY3I7CisJaW50IG9s
ZF9jd25kID0gbmV0LT5jd25kOworCisJLyogZ2V0IGJvdHRsZSBuZWNrIGJ3ICovCisJKmJvdHRs
ZV9idyA9IG50b2hsKGNwLT5ib3R0bGVfYncpOworCS8qIGFuZCB3aGF0cyBvbiBxdWV1ZSAqLwor
CSpvbl9xdWV1ZSA9IG50b2hsKGNwLT5jdXJyZW50X29ucSk7CisJLyoKKwkgKiBhZGp1c3QgdGhl
IG9uLXF1ZXVlIGlmIG91ciBmbGlnaHQgaXMgbW9yZSBpdCBjb3VsZCBiZQorCSAqIHRoYXQgdGhl
IHJvdXRlciBoYXMgbm90IHlldCBnb3R0ZW4gZGF0YSAiaW4tZmxpZ2h0IiB0byBpdAorCSAqLwor
CWlmICgqb25fcXVldWUgPCBuZXQtPmZsaWdodF9zaXplKSB7CisJCSpvbl9xdWV1ZSA9IG5ldC0+
ZmxpZ2h0X3NpemU7CisJfQorCS8qIHJ0dCBpcyBtZWFzdXJlZCBpbiBtaWNybyBzZWNvbmRzLCBi
b3R0bGVfYncgaW4gYnl0ZXMgcGVyIHNlY29uZCAqLworCWJ3X2F2YWlsID0gKHVpbnQzMl90KSgo
KHVpbnQ2NF90KSgqYm90dGxlX2J3KSAqIG5ldC0+cnR0KSAvICh1aW50NjRfdCkxMDAwMDAwKTsK
KwlpZiAoYndfYXZhaWwgPiAqYm90dGxlX2J3KSB7CisJCS8qCisJCSAqIENhcCB0aGUgZ3Jvd3Ro
IHRvIG5vIG1vcmUgdGhhbiB0aGUgYm90dGxlIG5lY2suCisJCSAqIFRoaXMgY2FuIGhhcHBlbiBh
cyBSVFQgc2xpZGVzIHVwIGR1ZSB0byBxdWV1ZXMuCisJCSAqIEl0IGFsc28gbWVhbnMgaWYgeW91
IGhhdmUgbW9yZSB0aGFuIGEgMSBzZWNvbmQKKwkJICogUlRUIHdpdGggYSBlbXB0eSBxdWV1ZSB5
b3Ugd2lsbCBiZSBsaW1pdGVkIHRvIHRoZQorCQkgKiBib3R0bGVfYncgcGVyIHNlY29uZCBubyBt
YXR0ZXIgaWYgb3RoZXIgcG9pbnRzCisJCSAqIGhhdmUgMS8yIHRoZSBSVFQgYW5kIHlvdSBjb3Vs
ZCBnZXQgbW9yZSBvdXQuLi4KKwkJICovCisJCWJ3X2F2YWlsID0gKmJvdHRsZV9idzsKKwl9CisJ
aWYgKCpvbl9xdWV1ZSA+IGJ3X2F2YWlsKSB7CisJCS8qCisJCSAqIE5vIHJvb20gZm9yIGFueXRo
aW5nIGVsc2UgZG9uJ3QgYWxsb3cgYW55dGhpbmcKKwkJICogZWxzZSB0byBiZSAiYWRkZWQgdG8g
dGhlIGZpcmUiLgorCQkgKi8KKwkJaW50IHNlZ19pbmZsaWdodCwgc2VnX29ucXVldWUsIG15X3Bv
cnRpb247CisKKwkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKKwkJLyogaG93IG11Y2gg
YXJlIHdlIG92ZXIgcXVldWUgc2l6ZT8gKi8KKwkJaW5jciA9ICpvbl9xdWV1ZSAtIGJ3X2F2YWls
OworCQlpZiAoc3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlzX3BrdCkgeworCQkJLyoKKwkJCSAq
IHVuZG8gYW55IGN3bmQgYWRqdXN0bWVudCB0aGF0IHRoZSBzYWNrCisJCQkgKiBtaWdodCBoYXZl
IG1hZGUKKwkJCSAqLworCQkJbmV0LT5jd25kID0gbmV0LT5wcmV2X2N3bmQ7CisJCX0KKwkJLyog
Tm93IGhvdyBtdWNoIG9mIHRoYXQgaXMgbWluZT8gKi8KKwkJc2VnX2luZmxpZ2h0ID0gbmV0LT5m
bGlnaHRfc2l6ZSAvIG5ldC0+bXR1OworCQlzZWdfb25xdWV1ZSA9ICpvbl9xdWV1ZSAvIG5ldC0+
bXR1OworCQlteV9wb3J0aW9uID0gKGluY3IgKiBzZWdfaW5mbGlnaHQpIC8gc2VnX29ucXVldWU7
CisKKwkJLyogSGF2ZSBJIG1hZGUgYW4gYWRqdXN0bWVudCBhbHJlYWR5ICovCisJCWlmIChuZXQt
PmN3bmQgPiBuZXQtPmZsaWdodF9zaXplKSB7CisJCQkvKgorCQkJICogZm9yIHRoaXMgZmxpZ2h0
IEkgbWFkZSBhbiBhZGp1c3RtZW50IHdlCisJCQkgKiBuZWVkIHRvIGRlY3JlYXNlIHRoZSBwb3J0
aW9uIGJ5IGEgc2hhcmUKKwkJCSAqIG91ciBwcmV2aW91cyBhZGp1c3RtZW50LgorCQkJICovCisJ
CQlpbnQgZGlmZl9hZGo7CisKKwkJCWRpZmZfYWRqID0gbmV0LT5jd25kIC0gbmV0LT5mbGlnaHRf
c2l6ZTsKKwkJCWlmIChkaWZmX2FkaiA+IG15X3BvcnRpb24pCisJCQkJbXlfcG9ydGlvbiA9IDA7
CisJCQllbHNlCisJCQkJbXlfcG9ydGlvbiAtPSBkaWZmX2FkajsKKwkJfQorCQkvKgorCQkgKiBi
YWNrIGRvd24gdG8gdGhlIHByZXZpb3VzIGN3bmQgKGFzc3VtZSB3ZSBoYXZlCisJCSAqIGhhZCBh
IHNhY2sgYmVmb3JlIHRoaXMgcGFja2V0KS4gbWludXMgd2hhdCBldmVyCisJCSAqIHBvcnRpb24g
b2YgdGhlIG92ZXJhZ2UgaXMgbXkgZmF1bHQuCisJCSAqLworCQluZXQtPmN3bmQgLT0gbXlfcG9y
dGlvbjsKKworCQkvKiB3ZSB3aWxsIE5PVCBiYWNrIGRvd24gbW9yZSB0aGFuIDEgTVRVICovCisJ
CWlmIChuZXQtPmN3bmQgPD0gbmV0LT5tdHUpIHsKKwkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1Owor
CQl9CisJCS8qIGZvcmNlIGludG8gQ0EgKi8KKwkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAt
IDE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGFrZSAxLzQgb2YgdGhlIHNwYWNlIGxlZnQgb3Ig
bWF4IGJ1cnN0IHVwIC4uCisJCSAqIHdoaWNoZXZlciBpcyBsZXNzLgorCQkgKi8KKwkJaW5jciA9
IChid19hdmFpbCAtICpvbl9xdWV1ZSkgPj4gMjsKKwkJaWYgKChzdGNiLT5hc29jLm1heF9idXJz
dCA+IDApICYmCisJCSAgICAoc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBuZXQtPm10dSA8IGluY3Ip
KSB7CisJCQlpbmNyID0gc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBuZXQtPm10dTsKKwkJfQorCQlu
ZXQtPmN3bmQgKz0gaW5jcjsKKwl9CisJaWYgKG5ldC0+Y3duZCA+IGJ3X2F2YWlsKSB7CisJCS8q
IFdlIGNhbid0IGV4Y2VlZCB0aGUgcGlwZSBzaXplICovCisJCW5ldC0+Y3duZCA9IGJ3X2F2YWls
OworCX0KKwlpZiAobmV0LT5jd25kIDwgbmV0LT5tdHUpIHsKKwkJLyogV2UgYWx3YXlzIGhhdmUg
MSBNVFUgKi8KKwkJbmV0LT5jd25kID0gbmV0LT5tdHU7CisJfQorCXNjdHBfZW5mb3JjZV9jd25k
X2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCWlmIChuZXQtPmN3bmQgLSBvbGRfY3duZCAhPSAw
KSB7CisJCS8qIGxvZyBvbmx5IGNoYW5nZXMgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBu
ZXQsIHBkLAorCQkJICBzdGNiLT5hc29jLm15X3Z0YWcsCisJCQkgICgoc3RjYi0+c2N0cF9lcC0+
c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+cnBvcnQpKSwKKwkJCSAgbmV0LAorCQkJICBvbGRf
Y3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19j
d25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9sZF9jd25kKSwKKwkJCQlTQ1RQX0NXTkRfTE9H
X0ZST01fU0FUKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfb3V0cHV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCSAgICAgIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwgaW50IGJ1cnN0X2xpbWl0KQoreworCWludCBvbGRfY3duZCA9IG5ldC0+Y3du
ZDsKKworCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5jd25kKQorCQluZXQtPnNzdGhyZXNoID0g
bmV0LT5jd25kOworCWlmIChidXJzdF9saW1pdCkgeworCQluZXQtPmN3bmQgPSAobmV0LT5mbGln
aHRfc2l6ZSArIChidXJzdF9saW1pdCAqIG5ldC0+bXR1KSk7CisJCXNjdHBfZW5mb3JjZV9jd25k
X2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwg
YmwsCisJCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywKKwkJCSAgKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAorCQkJICBuZXQsCisJCQkgIG9sZF9jd25k
LCBuZXQtPmN3bmQpOworI2VuZGlmCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX2N3bmQo
c3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fQlJT
VCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3Nh
Y2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAorCQkJICAgIGludCBhY2N1bV9tb3ZlZCwgaW50IHJlbmVnZWRfYWxsLCBpbnQgd2ls
bF9leGl0KQoreworCS8qIFBhc3NpbmcgYSB6ZXJvIGFyZ3VtZW50IGluIGxhc3QgZGlzYWJsZXMg
dGhlIHJ0Y2MgYWxnb3JpdGhtICovCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1v
bihzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdCwgMCk7Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorCWludCBpbl93aW5kb3csIGlu
dCBudW1fcGt0X2xvc3QpCit7CisJLyogUGFzc2luZyBhIHplcm8gYXJndW1lbnQgaW4gbGFzdCBk
aXNhYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8KKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vj
bl9lY2hvX2NvbW1vbihzdGNiLCBuZXQsIGluX3dpbmRvdywgbnVtX3BrdF9sb3N0LCAwKTsKK30K
KworLyogSGVyZSBzdGFydHMgdGhlIFJUQ0NWQVIgdHlwZSBDQyBpbnZlbnRlZCBieSBSUlMgd2hp
Y2gKKyAqIGlzIGEgc2xpZ2h0IG1vZCB0byBSRkMyNTgxLiBXZSByZXVzZSBhIGNvbW1vbiByb3V0
aW5lIG9yCisgKiB0d28gc2luY2UgdGhlc2UgYWxnb3JpdGhtcyBhcmUgc28gY2xvc2UgYW5kIG5l
ZWQgdG8KKyAqIHJlbWFpbiB0aGUgc2FtZS4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91
cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKKwkJCQkgICAgIGludCBpbl93aW5kb3csIGludCBudW1fcGt0X2xvc3Qp
Cit7CisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNob19jb21tb24oc3RjYiwgbmV0LCBp
bl93aW5kb3csIG51bV9wa3RfbG9zdCwgMSk7Cit9CisKKworc3RhdGljCit2b2lkIHNjdHBfY3du
ZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkKHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJ
CQkJICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSkKK3sKKwluZXQtPmNjX21vZC5ydGNj
LmJ3X2J5dGVzICs9IHRwMS0+c2VuZF9zaXplOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jd25k
X3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5V
U0VELAorCQkJCSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaWYgKG5ldC0+Y2NfbW9k
LnJ0Y2MudGxzX25lZWRzX3NldCA+IDApIHsKKwkJLyogV2UgaGFkIGEgYncgbWVhc3VybWVudCBn
b2luZyBvbiAqLworCQlzdHJ1Y3QgdGltZXZhbCBsdGxzOworCQlTQ1RQX0dFVFBUSU1FX1RJTUVW
QUwoJmx0bHMpOworCQl0aW1ldmFsc3ViKCZsdGxzLCAmbmV0LT5jY19tb2QucnRjYy50bHMpOwor
CQluZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGltZSA9IChsdGxzLnR2X3NlYyAqIDEwMDAwMDAp
ICsgbHRscy50dl91c2VjOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF9uZXdfcnRj
Y190cmFuc21pc3Npb25fYmVnaW5zKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCQkgICAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCXVpbnQ2NF90IHZ0YWcsIHByb2JlcG9pbnQ7CisK
KyNlbmRpZgorCWlmIChuZXQtPmNjX21vZC5ydGNjLmxidykgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkvKiBDbGVhciB0aGUgb2xk
IGJ3Li4gd2Ugd2VudCB0byAwIGluLWZsaWdodCAqLworCQl2dGFnID0gKG5ldC0+cnR0IDw8IDMy
KSB8ICgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKKwkJ
CShzdGNiLT5ycG9ydCk7CisJCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8
IDMyKTsKKwkJLyogUHJvYmUgcG9pbnQgOCAqLworCQlwcm9iZXBvaW50IHw9ICAoKDggPDwgMTYp
IHwgMCk7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkgIHZ0YWcs
CisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgMCksCisJCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRf
c2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJbmV0LT5jY19tb2QucnRjYy5sYndf
cnR0ID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5jd25kX2F0X2J3X3NldCA9IDA7CisJCW5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3ID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0
X3J0dGMgPSAwOworCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAwOworCQluZXQtPmNj
X21vZC5ydGNjLmJ3X3RvdF90aW1lID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlcyA9
IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7CisJCWlmIChuZXQtPmNj
X21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7CisJCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2Ug
PSAwOworCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJCQluZXQtPmNjX21vZC5y
dGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7CisJCX0KKwkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucmV0
X2Zyb21fZXEpIHsKKwkJCS8qIGxlc3MgYWdncmVzc2l2ZSBvbmUgLSByZXNldCBjd25kIHRvbyAq
LworCQkJdWludDMyX3QgY3duZF9pbl9tdHUsIGN3bmQ7CisKKwkJCWN3bmRfaW5fbXR1ID0gU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCk7CisJCQlpZiAoY3duZF9pbl9tdHUgPT0g
MCkgeworCQkJCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2YgUkZDIDQ5NjAgaXMg
dXNlZC4gKi8KKwkJCQljd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10
dSksIFNDVFBfSU5JVElBTF9DV05EKSk7CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogV2Ug
dGFrZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQorCQkJCSAqIGluaXRp
YWwgY29uZ2VzdGlvbiB3aW5kb3cuCisJCQkJICovCisJCQkJaWYgKChzdGNiLT5hc29jLm1heF9i
dXJzdCA+IDApICYmIChjd25kX2luX210dSA+IHN0Y2ItPmFzb2MubWF4X2J1cnN0KSkKKwkJCQkJ
Y3duZF9pbl9tdHUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKKwkJCQljd25kID0gKG5ldC0+bXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkgKiBjd25kX2luX210dTsKKwkJCX0KKwkJCWlmIChu
ZXQtPmN3bmQgPiBjd25kKSB7CisJCQkJLyogT25seSBzZXQgaWYgd2UgYXJlIG5vdCBhIHRpbWVv
dXQgKGkuZS4gZG93biB0byAxIG10dSkgKi8KKwkJCQluZXQtPmN3bmQgPSBjd25kOworCQkJfQor
CQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9zZXRfcnRjY19pbml0aWFsX2NjX3BhcmFt
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCSAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Cit7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCisJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKKworI2VuZGlmCisJc2N0cF9zZXRfaW5p
dGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCXN0Y2ItPmFzb2MudXNlX3ByZWNpc2VfdGltZSA9
IDE7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCisJcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOworCXByb2Jl
cG9pbnQgfD0gICgoOSA8PCAxNikgfCAwKTsKKwl2dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8CisJ
CSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKKwkJKHN0
Y2ItPnJwb3J0KTsKKwlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkgIHZ0
YWcsCisJCSAgMCwKKwkJICAwLAorCQkgIDAsCisJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwlu
ZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9i
d19zZXQgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSA9IDA7CisJbmV0LT5jY19t
b2QucnRjYy5sYncgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSA9IDA7CisJbmV0
LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSAwOworCW5ldC0+Y2NfbW9kLnJ0
Y2MuYndfdG90X3RpbWUgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXMgPSAwOworCW5l
dC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7CisJbmV0LT5jY19tb2QucnRjYy5yZXRf
ZnJvbV9lcSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQpOworCW5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlYWR5X3N0ZXAgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc3RlYWR5X3N0ZXAp
OworCW5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2RjY2NfZWNuID0gU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3VzZV9kY2NjX2Vjbik7CisJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJbmV0LT5j
Y19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAwOworCisKK30KKworc3RhdGljIGludAorc2N0
cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZXRv
cmdldCwKKwkJCSAgICAgc3RydWN0IHNjdHBfY2Nfb3B0aW9uICpjY19vcHQpCit7CisJc3RydWN0
IHNjdHBfbmV0cyAqbmV0OworCWlmIChzZXRvcmdldCA9PSAxKSB7CisJCS8qIGEgc2V0ICovCisJ
CWlmIChjY19vcHQtPm9wdGlvbiA9PSBTQ1RQX0NDX09QVF9SVENDX1NFVE1PREUpIHsKKwkJCWlm
ICgoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMCkgJiYKKwkJCSAgICAoY2Nfb3B0
LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMSkpIHsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CQl9CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCQkJbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IGNjX29wdC0+YWlkX3ZhbHVlLmFz
c29jX3ZhbHVlOworCQkJfQorCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0Nf
T1BUX1VTRV9EQ0NDX0VDTikgeworCQkJaWYgKChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1
ZSAhPSAwKSAmJgorCQkJICAgIChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSAhPSAxKSkg
eworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3Rj
Yi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQluZXQtPmNjX21vZC5ydGNjLnVzZV9kY2Nj
X2VjbiA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJfQorCQl9IGVsc2UgaWYg
KGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQKSB7CisJCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJbmV0LT5jY19t
b2QucnRjYy5zdGVhZHlfc3RlcCA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJ
fQorCQl9IGVsc2UgeworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfSBlbHNlIHsKKwkJLyog
YSBnZXQgKi8KKwkJaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9E
RSkgeworCQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCQlpZiAobmV0
ID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKEVGQVVMVCk7CisJCQl9CisJCQljY19vcHQtPmFpZF92
YWx1ZS5hc3NvY192YWx1ZSA9IG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXE7CisJCX0gZWxz
ZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfVVNFX0RDQ0NfRUNOKSB7CisJCQlu
ZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJCWlmIChuZXQgPT0gTlVMTCkg
eworCQkJCXJldHVybiAoRUZBVUxUKTsKKwkJCX0KKwkJCWNjX29wdC0+YWlkX3ZhbHVlLmFzc29j
X3ZhbHVlID0gbmV0LT5jY19tb2QucnRjYy51c2VfZGNjY19lY247CisJCX0gZWxzZSBpZiAoY2Nf
b3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfU1RFQURZX1NURVApIHsKKwkJCW5ldCA9IFRBSUxR
X0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKG5ldCA9PSBOVUxMKSB7CisJCQkJcmV0
dXJuIChFRkFVTFQpOworCQkJfQorCQkJY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgPSBu
ZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwOworCQl9IGVsc2UgeworCQkJcmV0dXJuIChFSU5W
QUwpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRf
dXBkYXRlX3J0Y2NfcGFja2V0X3RyYW5zbWl0dGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQ
X1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KQoreworCWlmIChuZXQtPmNjX21vZC5ydGNjLnRsc19uZWVkc19zZXQg
PT0gMCkgeworCQlTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5ldC0+Y2NfbW9kLnJ0Y2MudGxzKTsK
KwkJbmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNfc2V0ID0gMjsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisJCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJCSBpbnQgYWNjdW1f
bW92ZWQsIGludCByZW5lZ2VkX2FsbCwgaW50IHdpbGxfZXhpdCkKK3sKKwkvKiBQYXNzaW5nIGEg
b25lIGFyZ3VtZW50IGF0IHRoZSBsYXN0IGVuYWJsZXMgdGhlIHJ0Y2MgYWxnb3JpdGhtICovCisJ
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1vbihzdGNiLCBhc29jLCBhY2N1bV9tb3Zl
ZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdCwgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3J0
dF9ydGNjX2NhbGN1bGF0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELAorICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93IFNDVFBfVU5VU0VEKQoreworCW5ldC0+
Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2sgPSAxOworfQorCisvKiBIZXJlIHN0YXJ0cyBT
YWxseSBGbG95ZHMgSFMtVENQICovCisKK3N0cnVjdCBzY3RwX2hzX3JhaXNlX2Ryb3AgeworCWlu
dDMyX3QgY3duZDsKKwlpbnQ4X3QgaW5jcmVhc2U7CisJaW50OF90IGRyb3BfcGVyY2VudDsKK307
CisKKyNkZWZpbmUgU0NUUF9IU19UQUJMRV9TSVpFIDczCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qg
c2N0cF9oc19yYWlzZV9kcm9wIHNjdHBfY3duZF9hZGp1c3RbU0NUUF9IU19UQUJMRV9TSVpFXSA9
IHsKKwl7MzgsIDEsIDUwfSwJCS8qIDAgICAqLworCXsxMTgsIDIsIDQ0fSwJCS8qIDEgICAqLwor
CXsyMjEsIDMsIDQxfSwJCS8qIDIgICAqLworCXszNDcsIDQsIDM4fSwJCS8qIDMgICAqLworCXs0
OTUsIDUsIDM3fSwJCS8qIDQgICAqLworCXs2NjMsIDYsIDM1fSwJCS8qIDUgICAqLworCXs4NTEs
IDcsIDM0fSwJCS8qIDYgICAqLworCXsxMDU4LCA4LCAzM30sCQkvKiA3ICAgKi8KKwl7MTI4NCwg
OSwgMzJ9LAkJLyogOCAgICovCisJezE1MjksIDEwLCAzMX0sCQkvKiA5ICAgKi8KKwl7MTc5Mywg
MTEsIDMwfSwJCS8qIDEwICAqLworCXsyMDc2LCAxMiwgMjl9LAkJLyogMTEgICovCisJezIzNzgs
IDEzLCAyOH0sCQkvKiAxMiAgKi8KKwl7MjY5OSwgMTQsIDI4fSwJCS8qIDEzICAqLworCXszMDM5
LCAxNSwgMjd9LAkJLyogMTQgICovCisJezMzOTksIDE2LCAyN30sCQkvKiAxNSAgKi8KKwl7Mzc3
OCwgMTcsIDI2fSwJCS8qIDE2ICAqLworCXs0MTc3LCAxOCwgMjZ9LAkJLyogMTcgICovCisJezQ1
OTYsIDE5LCAyNX0sCQkvKiAxOCAgKi8KKwl7NTAzNiwgMjAsIDI1fSwJCS8qIDE5ICAqLworCXs1
NDk3LCAyMSwgMjR9LAkJLyogMjAgICovCisJezU5NzksIDIyLCAyNH0sCQkvKiAyMSAgKi8KKwl7
NjQ4MywgMjMsIDIzfSwJCS8qIDIyICAqLworCXs3MDA5LCAyNCwgMjN9LAkJLyogMjMgICovCisJ
ezc1NTgsIDI1LCAyMn0sCQkvKiAyNCAgKi8KKwl7ODEzMCwgMjYsIDIyfSwJCS8qIDI1ICAqLwor
CXs4NzI2LCAyNywgMjJ9LAkJLyogMjYgICovCisJezkzNDYsIDI4LCAyMX0sCQkvKiAyNyAgKi8K
Kwl7OTk5MSwgMjksIDIxfSwJCS8qIDI4ICAqLworCXsxMDY2MSwgMzAsIDIxfSwJLyogMjkgICov
CisJezExMzU4LCAzMSwgMjB9LAkvKiAzMCAgKi8KKwl7MTIwODIsIDMyLCAyMH0sCS8qIDMxICAq
LworCXsxMjgzNCwgMzMsIDIwfSwJLyogMzIgICovCisJezEzNjE0LCAzNCwgMTl9LAkvKiAzMyAg
Ki8KKwl7MTQ0MjQsIDM1LCAxOX0sCS8qIDM0ICAqLworCXsxNTI2NSwgMzYsIDE5fSwJLyogMzUg
ICovCisJezE2MTM3LCAzNywgMTl9LAkvKiAzNiAgKi8KKwl7MTcwNDIsIDM4LCAxOH0sCS8qIDM3
ICAqLworCXsxNzk4MSwgMzksIDE4fSwJLyogMzggICovCisJezE4OTU1LCA0MCwgMTh9LAkvKiAz
OSAgKi8KKwl7MTk5NjUsIDQxLCAxN30sCS8qIDQwICAqLworCXsyMTAxMywgNDIsIDE3fSwJLyog
NDEgICovCisJezIyMTAxLCA0MywgMTd9LAkvKiA0MiAgKi8KKwl7MjMyMzAsIDQ0LCAxN30sCS8q
IDQzICAqLworCXsyNDQwMiwgNDUsIDE2fSwJLyogNDQgICovCisJezI1NjE4LCA0NiwgMTZ9LAkv
KiA0NSAgKi8KKwl7MjY4ODEsIDQ3LCAxNn0sCS8qIDQ2ICAqLworCXsyODE5MywgNDgsIDE2fSwJ
LyogNDcgICovCisJezI5NTU3LCA0OSwgMTV9LAkvKiA0OCAgKi8KKwl7MzA5NzUsIDUwLCAxNX0s
CS8qIDQ5ICAqLworCXszMjQ1MCwgNTEsIDE1fSwJLyogNTAgICovCisJezMzOTg2LCA1MiwgMTV9
LAkvKiA1MSAgKi8KKwl7MzU1ODYsIDUzLCAxNH0sCS8qIDUyICAqLworCXszNzI1MywgNTQsIDE0
fSwJLyogNTMgICovCisJezM4OTkyLCA1NSwgMTR9LAkvKiA1NCAgKi8KKwl7NDA4MDgsIDU2LCAx
NH0sCS8qIDU1ICAqLworCXs0MjcwNywgNTcsIDEzfSwJLyogNTYgICovCisJezQ0Njk0LCA1OCwg
MTN9LAkvKiA1NyAgKi8KKwl7NDY3NzYsIDU5LCAxM30sCS8qIDU4ICAqLworCXs0ODk2MSwgNjAs
IDEzfSwJLyogNTkgICovCisJezUxMjU4LCA2MSwgMTN9LAkvKiA2MCAgKi8KKwl7NTM2NzcsIDYy
LCAxMn0sCS8qIDYxICAqLworCXs1NjIzMCwgNjMsIDEyfSwJLyogNjIgICovCisJezU4OTMyLCA2
NCwgMTJ9LAkvKiA2MyAgKi8KKwl7NjE3OTksIDY1LCAxMn0sCS8qIDY0ICAqLworCXs2NDg1MSwg
NjYsIDExfSwJLyogNjUgICovCisJezY4MTEzLCA2NywgMTF9LAkvKiA2NiAgKi8KKwl7NzE2MTcs
IDY4LCAxMX0sCS8qIDY3ICAqLworCXs3NTQwMSwgNjksIDEwfSwJLyogNjggICovCisJezc5NTE3
LCA3MCwgMTB9LAkvKiA2OSAgKi8KKwl7ODQwMzUsIDcxLCAxMH0sCS8qIDcwICAqLworCXs4OTA1
MywgNzIsIDEwfSwJLyogNzEgICovCisJezk0NzE3LCA3MywgOX0JCS8qIDcyICAqLworfTsKKwor
c3RhdGljIHZvaWQKK3NjdHBfaHNfY3duZF9pbmNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlpbnQgY3VyX3ZhbCwgaSwgaW5keCwgaW5jcjsK
KwlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwljdXJfdmFsID0gbmV0LT5jd25kID4+IDEw
OworCWluZHggPSBTQ1RQX0hTX1RBQkxFX1NJWkUgLSAxOworCisJaWYgKGN1cl92YWwgPCBzY3Rw
X2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsKKwkJLyogbm9ybWFsIG1vZGUgKi8KKwkJaWYgKG5ldC0+
bmV0X2FjayA+IG5ldC0+bXR1KSB7CisJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCX0gZWxz
ZSB7CisJCQluZXQtPmN3bmQgKz0gbmV0LT5uZXRfYWNrOworCQl9CisJfSBlbHNlIHsKKwkJZm9y
IChpID0gbmV0LT5sYXN0X2hzX3VzZWQ7IGkgPCBTQ1RQX0hTX1RBQkxFX1NJWkU7IGkrKykgewor
CQkJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0W2ldLmN3bmQpIHsKKwkJCQlpbmR4ID0g
aTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQluZXQtPmxhc3RfaHNfdXNlZCA9IGluZHg7CisJ
CWluY3IgPSAoKChpbnQzMl90KXNjdHBfY3duZF9hZGp1c3RbaW5keF0uaW5jcmVhc2UpIDw8IDEw
KTsKKwkJbmV0LT5jd25kICs9IGluY3I7CisJfQorCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZz
dGNiLT5hc29jLCBuZXQpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJc2N0cF9sb2dfY3duZChzdGNiLCBu
ZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TUyk7CisJfQor
fQorCitzdGF0aWMgdm9pZAorc2N0cF9oc19jd25kX2RlY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWludCBjdXJfdmFsLCBpLCBpbmR4Owor
CWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCWN1cl92YWwgPSBuZXQtPmN3bmQgPj4gMTA7
CisJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsKKwkJLyogbm9ybWFs
IG1vZGUgKi8KKwkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7CisJCWlmIChuZXQtPnNz
dGhyZXNoIDwgKG5ldC0+bXR1ICogMikpIHsKKwkJCW5ldC0+c3N0aHJlc2ggPSAyICogbmV0LT5t
dHU7CisJCX0KKwkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKKwl9IGVsc2UgeworCQkvKiBk
cm9wIGJ5IHRoZSBwcm9wZXIgYW1vdW50ICovCisJCW5ldC0+c3N0aHJlc2ggPSBuZXQtPmN3bmQg
LSAoaW50KSgobmV0LT5jd25kIC8gMTAwKSAqCisJCSAgICAoaW50MzJfdClzY3RwX2N3bmRfYWRq
dXN0W25ldC0+bGFzdF9oc191c2VkXS5kcm9wX3BlcmNlbnQpOworCQluZXQtPmN3bmQgPSBuZXQt
PnNzdGhyZXNoOworCQkvKiBub3cgd2hlcmUgYXJlIHdlICovCisJCWluZHggPSBuZXQtPmxhc3Rf
aHNfdXNlZDsKKwkJY3VyX3ZhbCA9IG5ldC0+Y3duZCA+PiAxMDsKKwkJLyogcmVzZXQgd2hlcmUg
d2UgYXJlIGluIHRoZSB0YWJsZSAqLworCQlpZiAoY3VyX3ZhbCA8IHNjdHBfY3duZF9hZGp1c3Rb
MF0uY3duZCkgeworCQkJLyogZmVlbCBvdXQgb2YgaHMgKi8KKwkJCW5ldC0+bGFzdF9oc191c2Vk
ID0gMDsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IGluZHg7IGkgPj0gMTsgaS0tKSB7CisJCQkJ
aWYgKGN1cl92YWwgPiBzY3RwX2N3bmRfYWRqdXN0W2kgLSAxXS5jd25kKSB7CisJCQkJCWJyZWFr
OworCQkJCX0KKwkJCX0KKwkJCW5ldC0+bGFzdF9oc191c2VkID0gaW5keDsKKwkJfQorCX0KKwlz
Y3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKKwlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7
CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQ
X0NXTkRfTE9HX0ZST01fRlIpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaHNfY3duZF91
cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQ7CisJCS8qCisJICogQ01UIGZhc3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0byBk
ZWJ1Zy4gKChzY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAqIChuZXQtPmZhc3RfcmV0cmFuX2xv
c3NfcmVjb3ZlcnkgPT0gMCkpKQorCSAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7CisJCWlmICgoYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9
PSAwKSB8fAorCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApKSB7CisJCQkvKiBvdXQg
b2YgYSBSRkMyNTgyIEZhc3QgcmVjb3Zlcnkgd2luZG93PyAqLworCQkJaWYgKG5ldC0+bmV0X2Fj
ayA+IDApIHsKKwkJCQkvKgorCQkJCSAqIHBlciBzZWN0aW9uIDcuMi4zLCBhcmUgdGhlcmUgYW55
CisJCQkJICogZGVzdGluYXRpb25zIHRoYXQgaGFkIGEgZmFzdCByZXRyYW5zbWl0CisJCQkJICog
dG8gdGhlbS4gSWYgc28gd2hhdCB3ZSBuZWVkIHRvIGRvIGlzCisJCQkJICogYWRqdXN0IHNzdGhy
ZXNoIGFuZCBjd25kLgorCQkJCSAqLworCQkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7
CisKKwkJCQlzY3RwX2hzX2N3bmRfZGVjcmVhc2Uoc3RjYiwgbmV0KTsKKworCQkJCWxjaGsgPSBU
QUlMUV9GSVJTVCgmYXNvYy0+c2VuZF9xdWV1ZSk7CisKKwkJCQluZXQtPnBhcnRpYWxfYnl0ZXNf
YWNrZWQgPSAwOworCQkJCS8qIFR1cm4gb24gZmFzdCByZWNvdmVyeSB3aW5kb3cgKi8KKwkJCQlh
c29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKKwkJCQlpZiAobGNoayA9PSBOVUxM
KSB7CisJCQkJCS8qIE1hcmsgZW5kIG9mIHRoZSB3aW5kb3cgKi8KKwkJCQkJYXNvYy0+ZmFzdF9y
ZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
YXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAxOworCQkJCX0K
KworCQkJCS8qCisJCQkJICogQ01UIGZhc3QgcmVjb3ZlcnkgLS0gcGVyIGRlc3RpbmF0aW9uCisJ
CQkJICogcmVjb3ZlcnkgdmFyaWFibGUuCisJCQkJICovCisJCQkJbmV0LT5mYXN0X3JldHJhbl9s
b3NzX3JlY292ZXJ5ID0gMTsKKworCQkJCWlmIChsY2hrID09IE5VTEwpIHsKKwkJCQkJLyogTWFy
ayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQluZXQtPmZhc3RfcmVjb3ZlcnlfdHNuID0gYXNv
Yy0+c2VuZGluZ19zZXEgLSAxOworCQkJCX0gZWxzZSB7CisJCQkJCW5ldC0+ZmFzdF9yZWNvdmVy
eV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAxOworCQkJCX0KKworCQkJCXNjdHBfdGltZXJf
c3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJCQkJCXN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5l
dCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfQ0NfRlVOQ1RJT05TICsgU0NU
UF9MT0NfMik7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJ
CQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJfQorCQl9IGVsc2UgaWYgKG5ldC0+
bmV0X2FjayA+IDApIHsKKwkJCS8qCisJCQkgKiBNYXJrIGEgcGVnIHRoYXQgd2UgV09VTEQgaGF2
ZSBkb25lIGEgY3duZAorCQkJICogcmVkdWN0aW9uIGJ1dCBSRkMyNTgyIHByZXZlbnRlZCB0aGlz
IGFjdGlvbi4KKwkJCSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZmFzdHJldHJhbnNpbnJ0
dCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVy
X3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsCisJCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCBTQ1RQX1VOVVNFRCwg
aW50IHdpbGxfZXhpdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKwkvKiB1cGRhdGUgY3duZCBhbmQgRWFybHkgRlIgICAqLwor
CS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKKworI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkK
KwkJLyoKKwkJICogQ01UIGZhc3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0byBkZWJ1Zy4KKwkJICov
CisJCWlmIChuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT5uZXdfcHNldWRv
X2N1bWFjaykgeworCQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBuZXQt
PmZhc3RfcmVjb3ZlcnlfdHNuKSB8fAorCQkJICAgIFNDVFBfVFNOX0dFKG5ldC0+cHNldWRvX2N1
bWFjayxuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSkgeworCQkJCW5ldC0+d2lsbF9leGl0X2Zhc3Rf
cmVjb3ZlcnkgPSAxOworCQkJfQorCQl9CisjZW5kaWYKKwkJLyogaWYgbm90aGluZyB3YXMgYWNr
ZWQgb24gdGhpcyBkZXN0aW5hdGlvbiBza2lwIGl0ICovCisJCWlmIChuZXQtPm5ldF9hY2sgPT0g
MCkgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
Q1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBT
Q1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7CisJCQl9CisJCQljb250aW51ZTsKKwkJfQorI2lmZGVm
IEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKKyAgICAgICAgICAgICAgICAvKiBDTVQgZmFzdCByZWNv
dmVyeSBjb2RlCisJCSAqLworCQkvKgorCQlpZiAoc2N0cF9jbXRfb25fb2ZmID4gMCAmJiBuZXQt
PmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVy
eSA9PSAwKSB7CisJCSAgICBAQEAgRG8gc29tZXRoaW5nCisJCSB9CisJCSBlbHNlIGlmIChzY3Rw
X2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIHdp
bGxfZXhpdCA9PSAwKSB7CisJCSovCisjZW5kaWYKKworCQkgaWYgKGFzb2MtPmZhc3RfcmV0cmFu
X2xvc3NfcmVjb3ZlcnkgJiYKKwkJICAgICAod2lsbF9leGl0ID09IDApICYmCisJCSAgICAgKGFz
b2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQkJLyoKKwkJCSAqIElmIHdlIGFyZSBpbiBs
b3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKKwkJCSAqIHVwZGF0ZQorCQkJICovCisJCQly
ZXR1cm47CisJCX0KKwkJLyoKKwkJICogQ01UOiBDVUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBp
ZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkgKiBtb3ZlZC4KKwkJICovCisJCWlmIChhY2N1bV9tb3Zl
ZCB8fAorCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1
ZG9fY3VtYWNrKSkgeworCQkJLyogSWYgdGhlIGN1bXVsYXRpdmUgYWNrIG1vdmVkIHdlIGNhbiBw
cm9jZWVkICovCisJCQlpZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKKwkJCQkvKiBX
ZSBhcmUgaW4gc2xvdyBzdGFydCAqLworCQkJCWlmIChuZXQtPmZsaWdodF9zaXplICsgbmV0LT5u
ZXRfYWNrID49IG5ldC0+Y3duZCkgeworCQkJCQlzY3RwX2hzX2N3bmRfaW5jcmVhc2Uoc3RjYiwg
bmV0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19j
d25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZf
U1MpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBXZSBhcmUgaW4gY29uZ2Vz
dGlvbiBhdm9pZGFuY2UgKi8KKwkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgKz0gbmV0LT5u
ZXRfYWNrOworCQkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQt
PmN3bmQpICYmCisJCQkJICAgIChuZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPj0gbmV0LT5jd25k
KSkgeworCQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgLT0gbmV0LT5jd25kOworCQkJCQlu
ZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2Ms
IG5ldCk7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0
LCBuZXQtPm10dSwKKwkJCQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fQ0EpOworCQkJCQl9CisJCQkJ
fSBlbHNlIHsKKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBu
ZXQsIG5ldC0+bmV0X2FjaywKKwkJCQkJCQlTQ1RQX0NXTkRfTE9HX05PQURWX0NBKTsKKwkJCQkJ
fQorCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCisJCQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNL
KTsKKwkJCX0KKwkJfQorCX0KK30KKworCisvKgorICogSC1UQ1AgY29uZ2VzdGlvbiBjb250cm9s
LiBUaGUgYWxnb3JpdGhtIGlzIGRldGFpbGVkIGluOgorICogUi5OLlNob3J0ZW4sIEQuSi5MZWl0
aDoKKyAqICAgIkgtVENQOiBUQ1AgZm9yIGhpZ2gtc3BlZWQgYW5kIGxvbmctZGlzdGFuY2UgbmV0
d29ya3MiCisgKiAgIFByb2MuIFBGTERuZXQsIEFyZ29ubmUsIDIwMDQuCisgKiBodHRwOi8vd3d3
LmhhbWlsdG9uLmllL25ldC9odGNwMy5wZGYKKyAqLworCisKK3N0YXRpYyBpbnQgdXNlX3J0dF9z
Y2FsaW5nID0gMTsKK3N0YXRpYyBpbnQgdXNlX2JhbmR3aWR0aF9zd2l0Y2ggPSAxOworCitzdGF0
aWMgaW5saW5lIGludAorYmV0d2Vlbih1aW50MzJfdCBzZXExLCB1aW50MzJfdCBzZXEyLCB1aW50
MzJfdCBzZXEzKQoreworCXJldHVybiAoc2VxMyAtIHNlcTIgPj0gc2VxMSAtIHNlcTIpOworfQor
CitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitodGNwX2NvbmdfdGltZShzdHJ1Y3QgaHRjcCAqY2Ep
Cit7CisJcmV0dXJuIChzY3RwX2dldF90aWNrX2NvdW50KCkgLSBjYS0+bGFzdF9jb25nKTsKK30K
Kworc3RhdGljIGlubGluZSB1aW50MzJfdAoraHRjcF9jY291bnQoc3RydWN0IGh0Y3AgKmNhKQor
eworCXJldHVybiAoaHRjcF9jb25nX3RpbWUoY2EpL2NhLT5taW5SVFQpOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQKK2h0Y3BfcmVzZXQoc3RydWN0IGh0Y3AgKmNhKQoreworCWNhLT51bmRvX2xh
c3RfY29uZyA9IGNhLT5sYXN0X2Nvbmc7CisJY2EtPnVuZG9fbWF4UlRUID0gY2EtPm1heFJUVDsK
KwljYS0+dW5kb19vbGRfbWF4QiA9IGNhLT5vbGRfbWF4QjsKKwljYS0+bGFzdF9jb25nID0gc2N0
cF9nZXRfdGlja19jb3VudCgpOworfQorCisjaWZkZWYgU0NUUF9OT1RfVVNFRAorCitzdGF0aWMg
dWludDMyX3QKK2h0Y3BfY3duZF91bmRvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KQoreworCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdF9jb25nID0gbmV0LT5j
Y19tb2QuaHRjcF9jYS51bmRvX2xhc3RfY29uZzsKKwluZXQtPmNjX21vZC5odGNwX2NhLm1heFJU
VCA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19tYXhSVFQ7CisJbmV0LT5jY19tb2QuaHRjcF9j
YS5vbGRfbWF4QiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19vbGRfbWF4QjsKKwlyZXR1cm4g
KG1heChuZXQtPmN3bmQsICgobmV0LT5zc3RocmVzaC9uZXQtPm10dTw8NykvbmV0LT5jY19tb2Qu
aHRjcF9jYS5iZXRhKSpuZXQtPm10dSkpOworfQorCisjZW5kaWYKKworc3RhdGljIGlubGluZSB2
b2lkCittZWFzdXJlX3J0dChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDMyX3Qgc3J0
dCA9IG5ldC0+bGFzdHNhPj5TQ1RQX1JUVF9TSElGVDsKKworCS8qIGtlZXAgdHJhY2sgb2YgbWlu
aW11bSBSVFQgc2VlbiBzbyBmYXIsIG1pblJUVCBpcyB6ZXJvIGF0IGZpcnN0ICovCisJaWYgKG5l
dC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID4gc3J0dCB8fCAhbmV0LT5jY19tb2QuaHRjcF9jYS5t
aW5SVFQpCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID0gc3J0dDsKKworCS8qIG1heCBS
VFQgKi8KKwlpZiAobmV0LT5mYXN0X3JldHJhbl9pcCA9PSAwICYmIG5ldC0+c3N0aHJlc2ggPCAw
eEZGRkYgJiYgaHRjcF9jY291bnQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EpID4gMykgeworCQlpZiAo
bmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPCBuZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVCkK
KwkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gbmV0LT5jY19tb2QuaHRjcF9jYS5taW5S
VFQ7CisJCWlmIChuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA8IHNydHQgJiYgc3J0dCA8PSBu
ZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCtNU0VDX1RPX1RJQ0tTKDIwKSkKKwkJCW5ldC0+Y2Nf
bW9kLmh0Y3BfY2EubWF4UlRUID0gc3J0dDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCittZWFzdXJl
X2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXVpbnQzMl90
IG5vdyA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsKKworCWlmIChuZXQtPmZhc3RfcmV0cmFuX2lw
ID09IDApCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQgPSBuZXQtPm5ldF9hY2s7
CisKKwlpZiAoIXVzZV9iYW5kd2lkdGhfc3dpdGNoKQorCQlyZXR1cm47CisKKwkvKiBhY2hpZXZl
ZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLworCS8qIEpSUyAtIG5vdCAxMDAlIHN1cmUgb2Yg
dGhpcyBzdGF0ZW1lbnQgKi8KKwlpZiAobmV0LT5mYXN0X3JldHJhbl9pcCA9PSAxKSB7CisJCW5l
dC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ID0gMDsKKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5s
YXN0dGltZSA9IG5vdzsKKwkJcmV0dXJuOworCX0KKworCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0
ZWNvdW50ICs9IG5ldC0+bmV0X2FjazsKKwlpZiAoKG5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNv
dW50ID49IG5ldC0+Y3duZCAtICgoKG5ldC0+Y2NfbW9kLmh0Y3BfY2EuYWxwaGEgPj4gNykgPyAo
bmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA+PiA3KSA6IDEpICogbmV0LT5tdHUpKSAmJgorCSAg
ICAobm93IC0gbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0dGltZSA+PSBuZXQtPmNjX21vZC5odGNw
X2NhLm1pblJUVCkgJiYKKwkgICAgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID4gMCkpIHsK
KwkJdWludDMyX3QgY3VyX0JpID0gbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlY291bnQvbmV0LT5t
dHUqaHovKG5vdyAtIG5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdHRpbWUpOworCisJCWlmIChodGNw
X2Njb3VudCgmbmV0LT5jY19tb2QuaHRjcF9jYSkgPD0gMykgeworCQkJLyoganVzdCBhZnRlciBi
YWNrb2ZmICovCisJCQluZXQtPmNjX21vZC5odGNwX2NhLm1pbkIgPSBuZXQtPmNjX21vZC5odGNw
X2NhLm1heEIgPSBuZXQtPmNjX21vZC5odGNwX2NhLkJpID0gY3VyX0JpOworCQl9IGVsc2Ugewor
CQkJbmV0LT5jY19tb2QuaHRjcF9jYS5CaSA9ICgzKm5ldC0+Y2NfbW9kLmh0Y3BfY2EuQmkgKyBj
dXJfQmkpLzQ7CisJCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5CaSA+IG5ldC0+Y2NfbW9kLmh0
Y3BfY2EubWF4QikKKwkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1heEIgPSBuZXQtPmNjX21vZC5o
dGNwX2NhLkJpOworCQkJaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluQiA+IG5ldC0+Y2NfbW9k
Lmh0Y3BfY2EubWF4QikKKwkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1pbkIgPSBuZXQtPmNjX21v
ZC5odGNwX2NhLm1heEI7CisJCX0KKwkJbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlY291bnQgPSAw
OworCQluZXQtPmNjX21vZC5odGNwX2NhLmxhc3R0aW1lID0gbm93OworCX0KK30KKworc3RhdGlj
IGlubGluZSB2b2lkCitodGNwX2JldGFfdXBkYXRlKHN0cnVjdCBodGNwICpjYSwgdWludDMyX3Qg
bWluUlRULCB1aW50MzJfdCBtYXhSVFQpCit7CisJaWYgKHVzZV9iYW5kd2lkdGhfc3dpdGNoKSB7
CisJCXVpbnQzMl90IG1heEIgPSBjYS0+bWF4QjsKKwkJdWludDMyX3Qgb2xkX21heEIgPSBjYS0+
b2xkX21heEI7CisJCWNhLT5vbGRfbWF4QiA9IGNhLT5tYXhCOworCisJCWlmICghYmV0d2Vlbig1
Km1heEIsIDQqb2xkX21heEIsIDYqb2xkX21heEIpKSB7CisJCQljYS0+YmV0YSA9IEJFVEFfTUlO
OworCQkJY2EtPm1vZGVzd2l0Y2ggPSAwOworCQkJcmV0dXJuOworCQl9CisJfQorCisJaWYgKGNh
LT5tb2Rlc3dpdGNoICYmIG1pblJUVCA+ICh1aW50MzJfdClNU0VDX1RPX1RJQ0tTKDEwKSAmJiBt
YXhSVFQpIHsKKwkJY2EtPmJldGEgPSAobWluUlRUPDw3KS9tYXhSVFQ7CisJCWlmIChjYS0+YmV0
YSA8IEJFVEFfTUlOKQorCQkJY2EtPmJldGEgPSBCRVRBX01JTjsKKwkJZWxzZSBpZiAoY2EtPmJl
dGEgPiBCRVRBX01BWCkKKwkJCWNhLT5iZXRhID0gQkVUQV9NQVg7CisJfSBlbHNlIHsKKwkJY2Et
PmJldGEgPSBCRVRBX01JTjsKKwkJY2EtPm1vZGVzd2l0Y2ggPSAxOworCX0KK30KKworc3RhdGlj
IGlubGluZSB2b2lkCitodGNwX2FscGhhX3VwZGF0ZShzdHJ1Y3QgaHRjcCAqY2EpCit7CisJdWlu
dDMyX3QgbWluUlRUID0gY2EtPm1pblJUVDsKKwl1aW50MzJfdCBmYWN0b3IgPSAxOworCXVpbnQz
Ml90IGRpZmYgPSBodGNwX2NvbmdfdGltZShjYSk7CisKKwlpZiAoZGlmZiA+ICh1aW50MzJfdClo
eikgeworCQlkaWZmIC09IGh6OworCQlmYWN0b3IgPSAxKyAoIDEwKmRpZmYgKyAoKGRpZmYvMikq
KGRpZmYvMikvaHopKS9oejsKKwl9CisKKwlpZiAodXNlX3J0dF9zY2FsaW5nICYmIG1pblJUVCkg
eworCQl1aW50MzJfdCBzY2FsZSA9IChoejw8MykvKDEwKm1pblJUVCk7CisJCXNjYWxlID0gbWlu
KG1heChzY2FsZSwgMVU8PDIpLCAxMFU8PDMpOyAvKiBjbGFtcGluZyByYXRpbyB0byBpbnRlcnZh
bCBbMC41LDEwXTw8MyAqLworCQlmYWN0b3IgPSAoZmFjdG9yPDwzKS9zY2FsZTsKKwkJaWYgKCFm
YWN0b3IpCisJCQlmYWN0b3IgPSAxOworCX0KKworCWNhLT5hbHBoYSA9IDIqZmFjdG9yKigoMTw8
NyktY2EtPmJldGEpOworCWlmICghY2EtPmFscGhhKQorCQljYS0+YWxwaGEgPSBBTFBIQV9CQVNF
OworfQorCisvKiBBZnRlciB3ZSBoYXZlIHRoZSBydHQgZGF0YSB0byBjYWxjdWxhdGUgYmV0YSwg
d2UnZCBzdGlsbCBwcmVmZXIgdG8gd2FpdCBvbmUKKyAqIHJ0dCBiZWZvcmUgd2UgYWRqdXN0IG91
ciBiZXRhIHRvIGVuc3VyZSB3ZSBhcmUgd29ya2luZyBmcm9tIGEgY29uc2lzdGVudAorICogZGF0
YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB3ZSBoaXQgYSBj
b25nZXN0aW9uIGV2ZW50IHNpbmNlIG9ubHkgYXQKKyAqIHRoYXQgcG9pbnQgZG8gd2UgcmVhbGx5
IGhhdmUgYSByZWFsIHNlbnNlIG9mIG1heFJUVCAodGhlIHF1ZXVlcyBlbiByb3V0ZQorICogd2Vy
ZSBnZXR0aW5nIGp1c3QgdG9vIGZ1bGwgbm93KS4KKyAqLworc3RhdGljIHZvaWQKK2h0Y3BfcGFy
YW1fdXBkYXRlKHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1aW50MzJfdCBtaW5SVFQgPSBu
ZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVDsKKwl1aW50MzJfdCBtYXhSVFQgPSBuZXQtPmNjX21v
ZC5odGNwX2NhLm1heFJUVDsKKworCWh0Y3BfYmV0YV91cGRhdGUoJm5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EsIG1pblJUVCwgbWF4UlRUKTsKKwlodGNwX2FscGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRj
cF9jYSk7CisKKwkvKiBhZGQgc2xvd2x5IGZhZGluZyBtZW1vcnkgZm9yIG1heFJUVCB0byBhY2Nv
bW1vZGF0ZSByb3V0aW5nIGNoYW5nZXMgZXRjICovCisJaWYgKG1pblJUVCA+IDAgJiYgbWF4UlRU
ID4gbWluUlRUKQorCQluZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA9IG1pblJUVCArICgobWF4
UlRULW1pblJUVCkqOTUpLzEwMDsKK30KKworc3RhdGljIHVpbnQzMl90CitodGNwX3JlY2FsY19z
c3RocmVzaChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaHRjcF9wYXJhbV91cGRhdGUobmV0
KTsKKwlyZXR1cm4gKG1heCgoKG5ldC0+Y3duZC9uZXQtPm10dSAqIG5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EuYmV0YSkgPj4gNykqbmV0LT5tdHUsIDJVKm5ldC0+bXR1KSk7Cit9CisKK3N0YXRpYyB2b2lk
CitodGNwX2NvbmdfYXZvaWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQpCit7CisJLyotCisJICogSG93IHRvIGhhbmRsZSB0aGVzZSBmdW5jdGlvbnM/CisgICAg
ICAgICAqCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxpZ2h0KSkgUlJTIC0gZ29v
ZCBxdWVzdGlvbi4KKwkgKgkJcmV0dXJuOworCSAqLworICAgICAgICBpZiAobmV0LT5jd25kIDw9
IG5ldC0+c3N0aHJlc2gpIHsKKwkJLyogV2UgYXJlIGluIHNsb3cgc3RhcnQgKi8KKwkJaWYgKG5l
dC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0LT5jd25kKSB7CisJCQlpZiAobmV0
LT5uZXRfYWNrID4gKG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJp
YWJsZSkpKSB7CisJCQkJbmV0LT5jd25kICs9IChuZXQtPm10dSAqIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9MMl9hYmNfdmFyaWFibGUpKTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9n
X2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJCVNDVFBfQ1dORF9MT0dfRlJPTV9TUyk7
CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCW5ldC0+Y3duZCArPSBuZXQtPm5ldF9hY2s7CisJ
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9N
T05JVE9SX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRf
YWNrLAorCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKKwkJCQl9CisKKwkJCX0KKwkJCXNj
dHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCQl9IGVsc2UgeworCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm5ldF9hY2ss
CisJCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJ
bWVhc3VyZV9ydHQobmV0KTsKKworCQkvKiBJbiBkYW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xv
d2x5LgorCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyBuZXQtPmN3bmQgKz0gYWxwaGEgLyBuZXQtPmN3
bmQKKwkJICovCisJCS8qIFdoYXQgaXMgc25kX2N3bmRfY250Pz8gKi8KKwkJaWYgKCgobmV0LT5w
YXJ0aWFsX2J5dGVzX2Fja2VkL25ldC0+bXR1ICogbmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSkg
Pj4gNykqbmV0LT5tdHUgPj0gbmV0LT5jd25kKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAv
Ki0KKwkJCSAqIERvZXMgU0NUUCBoYXZlIGEgY3duZCBjbGFtcD8KKwkJCSAqIGlmIChuZXQtPnNu
ZF9jd25kIDwgbmV0LT5zbmRfY3duZF9jbGFtcCkgLSBOb3BlIChSUlMpLgorCQkJICovCisJCQlu
ZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwor
CQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5ldCk7CisJCQlodGNwX2Fs
cGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9jYSk7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJ
c2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1LAorCQkJCQlTQ1RQX0NXTkRfTE9HX0ZS
T01fQ0EpOworCQkJfQorCQl9IGVsc2UgeworCQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkICs9
IG5ldC0+bmV0X2FjazsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQlTQ1RQX0NXTkRfTE9HX05PQURWX0NBKTsKKwkJCX0K
KwkJfQorCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQgPSBuZXQtPm10dTsKKwl9
Cit9CisKKyNpZmRlZiBTQ1RQX05PVF9VU0VECisvKiBMb3dlciBib3VuZCBvbiBjb25nZXN0aW9u
IHdpbmRvdy4gKi8KK3N0YXRpYyB1aW50MzJfdAoraHRjcF9taW5fY3duZChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlyZXR1cm4gKG5ldC0+c3N0aHJl
c2gpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitodGNwX2luaXQoc3RydWN0IHNjdHBfbmV0
cyAqbmV0KQoreworCW1lbXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSwgMCwgc2l6ZW9mKHN0cnVj
dCBodGNwKSk7CisJbmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA9IEFMUEhBX0JBU0U7CisJbmV0
LT5jY19tb2QuaHRjcF9jYS5iZXRhID0gQkVUQV9NSU47CisJbmV0LT5jY19tb2QuaHRjcF9jYS5i
eXRlc19hY2tlZCA9IG5ldC0+bXR1OworCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdF9jb25nID0g
c2N0cF9nZXRfdGlja19jb3VudCgpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9odGNwX3NldF9p
bml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAq
bmV0KQoreworCS8qCisJICogV2UgdGFrZSB0aGUgbWF4IG9mIHRoZSBidXJzdCBsaW1pdCB0aW1l
cyBhIE1UVSBvciB0aGUKKwkgKiBJTklUSUFMX0NXTkQuIFdlIHRoZW4gbGltaXQgdGhpcyB0byA0
IE1UVSdzIG9mIHNlbmRpbmcuCisJICovCisJbmV0LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQp
LCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7CisJbmV0LT5zc3RocmVz
aCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKKwlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3Rj
Yi0+YXNvYywgbmV0KTsKKwlodGNwX2luaXQobmV0KTsKKworCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiAoU0NUUF9DV05EX01PTklUT1JfRU5BQkxFfFNDVFBfQ1dO
RF9MT0dHSU5HX0VOQUJMRSkpIHsKKwkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBf
Q1dORF9JTklUSUFMSVpBVElPTik7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9odGNwX2N3
bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2Fs
bCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIHVwZGF0ZSBjd25kIGFu
ZCBFYXJseSBGUiAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlUQUlM
UV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCisjaWZkZWYgSkFOQV9D
TVRfRkFTVF9SRUNPVkVSWQorCQkvKgorCQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVk
IHRvIGRlYnVnLgorCQkgKi8KKwkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAm
JiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7CisJCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFz
dF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8CisJCQkgICAgU0NUUF9UU05f
R0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pKSB7CisJCQkJbmV0
LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvKiBp
ZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KKwkJaWYg
KG5ldC0+bmV0X2FjayA9PSAwKSB7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3du
ZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKKwkJCX0KKwkJCWNvbnRp
bnVlOworCQl9CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorICAgICAgICAgICAgICAg
IC8qIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUKKwkJICovCisJCS8qCisJCWlmIChzY3RwX2NtdF9v
bl9vZmYgPiAwICYmIG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPndpbGxf
ZXhpdF9mYXN0X3JlY292ZXJ5ID09IDApIHsKKwkJICAgIEBAQCBEbyBzb21ldGhpbmcKKwkJIH0K
KwkJIGVsc2UgaWYgKHNjdHBfY210X29uX29mZiA9PSAwICYmIGFzb2MtPmZhc3RfcmV0cmFuX2xv
c3NfcmVjb3ZlcnkgJiYgd2lsbF9leGl0ID09IDApIHsKKwkJKi8KKyNlbmRpZgorCisJCWlmIChh
c29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmCisJCSAgICB3aWxsX2V4aXQgPT0gMCAm
JgorCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQkJLyoKKwkJCSAqIElm
IHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKKwkJCSAqIHVwZGF0ZQor
CQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogQ01UOiBDVUMgYWxnb3JpdGhtLiBV
cGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkgKiBtb3ZlZC4KKwkJICovCisJCWlm
IChhY2N1bV9tb3ZlZCB8fAorCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJiBu
ZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgeworCQkJaHRjcF9jb25nX2F2b2lkKHN0Y2IsIG5ldCk7
CisJCQltZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQobmV0KTsKKwkJfSBlbHNlIHsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lO
R19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCisJCQkJ
CVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZv
aWQKK3NjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9mcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CisJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKKwkvKgorCSAqIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUuIE5lZWQgdG8gZGVidWcuICgo
c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKKwkgKiAobmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292
ZXJ5ID09IDApKSkKKwkgKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgeworCQlpZiAoKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPT0gMCkgfHwK
KwkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSkgeworCQkJLyogb3V0IG9mIGEgUkZD
MjU4MiBGYXN0IHJlY292ZXJ5IHdpbmRvdz8gKi8KKwkJCWlmIChuZXQtPm5ldF9hY2sgPiAwKSB7
CisJCQkJLyoKKwkJCQkgKiBwZXIgc2VjdGlvbiA3LjIuMywgYXJlIHRoZXJlIGFueQorCQkJCSAq
IGRlc3RpbmF0aW9ucyB0aGF0IGhhZCBhIGZhc3QgcmV0cmFuc21pdAorCQkJCSAqIHRvIHRoZW0u
IElmIHNvIHdoYXQgd2UgbmVlZCB0byBkbyBpcworCQkJCSAqIGFkanVzdCBzc3RocmVzaCBhbmQg
Y3duZC4KKwkJCQkgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpsY2hrOworCQkJCWlu
dCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCQkJCS8qIEpSUyAtIHJlc2V0IGFzIGlmIHN0YXRl
IHdlcmUgY2hhbmdlZCAqLworCQkJCWh0Y3BfcmVzZXQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EpOwor
CQkJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQpOworCQkJCW5ldC0+
Y3duZCA9IG5ldC0+c3N0aHJlc2g7CisJCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoYXNvYywg
bmV0KTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAo
bmV0LT5jd25kIC0gb2xkX2N3bmQpLAorCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX0ZSKTsKKwkJ
CQl9CisJCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVlKTsKKworCQkJCW5l
dC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5
IHdpbmRvdyAqLworCQkJCWFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCQkJ
CWlmIChsY2hrID09IE5VTEwpIHsKKwkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLwor
CQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKKwkJ
CQl9IGVsc2UgeworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRh
LnRzbiAtIDE7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBw
ZXIgZGVzdGluYXRpb24KKwkJCQkgKiByZWNvdmVyeSB2YXJpYWJsZS4KKwkJCQkgKi8KKwkJCQlu
ZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCisJCQkJaWYgKGxjaGsgPT0gTlVM
TCkgeworCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUgd2luZG93ICovCisJCQkJCW5ldC0+ZmFzdF9y
ZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
bmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQor
CisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9D
Q19GVU5DVElPTlMgKyBTQ1RQX0xPQ18zKTsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9TRU5ELAorCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQl9CisJ
CX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJLyoKKwkJCSAqIE1hcmsgYSBwZWcg
dGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25kCisJCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1
ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgorCQkJICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19mYXN0cmV0cmFuc2lucnR0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaHRj
cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCQkv
KiBKUlMgLSByZXNldCBhcyBpZiB0aGUgc3RhdGUgd2VyZSBiZWluZyBjaGFuZ2VkIHRvIHRpbWVv
dXQgKi8KKwkJaHRjcF9yZXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSk7CisJCW5ldC0+c3N0aHJl
c2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQpOworCQluZXQtPmN3bmQgPSBuZXQtPm10dTsK
KwkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJc2N0
cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+Y3duZCAtIG9sZF9jd25kLCBTQ1RQX0NXTkRfTE9H
X0ZST01fUlRYKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9odGNwX2N3bmRfdXBkYXRl
X2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJc3RydWN0IHNjdHBfbmV0
cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0IFNDVFBfVU5VU0VEKQorewor
CWludCBvbGRfY3duZDsKKwlvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCS8qIEpSUyAtIHJlc2V0
IGhjdHAgYXMgaWYgc3RhdGUgY2hhbmdlZCAqLworCWlmIChpbl93aW5kb3cgPT0gMCkgeworCQlo
dGNwX3Jlc2V0KCZuZXQtPmNjX21vZC5odGNwX2NhKTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
ZWNuZXJlZHVjZWRjd25kKTsKKwkJbmV0LT5zc3RocmVzaCA9IGh0Y3BfcmVjYWxjX3NzdGhyZXNo
KG5ldCk7CisJCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5tdHUpIHsKKwkJCW5ldC0+c3N0aHJl
c2ggPSBuZXQtPm10dTsKKwkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRpbWVyIGFzIHdlbGwsIHRv
IHNsb3cgdXMgZG93biAqLworCQkJbmV0LT5SVE8gPDw9IDE7CisJCX0KKwkJbmV0LT5jd25kID0g
bmV0LT5zc3RocmVzaDsKKwkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5l
dCk7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NX
TkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5j
d25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKKwkJfQorCX0KK30KKwor
Y29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2NfZnVuY3Rpb25zW10gPSB7Cit7
CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQorCXNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9zYWNrLAorCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl9mciwKKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCisJc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tl
dF9kcm9wcGVkLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAorI2Vsc2UKKwkuc2N0
cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0sCisJLnNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywK
Kwkuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmID0gc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2Nv
bW1vbiwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciA9IHNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfZnIsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfdGltZW91dCwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobyA9IHNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8sCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
cGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAor
CS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
b3V0cHV0LAorI2VuZGlmCit9LAoreworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAor
CXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKKwlzY3RwX2N3bmRfdXBkYXRlX2V4aXRf
cGZfY29tbW9uLAorCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIsCisJc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl90aW1lb3V0LAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8sCisJ
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwlzY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX291dHB1dCwKKyNlbHNlCisJLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0gPSBzY3Rw
X3NldF9pbml0aWFsX2NjX3BhcmFtLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2sgPSBz
Y3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCisJLnNjdHBfY3duZF91cGRhdGVfZXhpdF9w
ZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJLnNjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfZnIgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAorCS5zY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCisJLnNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vj
bl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkID0gc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKyNlbmRpZgorfSwKK3sK
KyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisJc2N0cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtLAorCXNjdHBfaHRjcF9jd25kX3Vw
ZGF0ZV9hZnRlcl9zYWNrLAorCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJc2N0
cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAorCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRl
cl90aW1lb3V0LAorCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKKwlzY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfb3V0cHV0LAorI2Vsc2UKKwkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfaHRj
cF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrID0g
c2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCisJLnNjdHBfY3duZF91cGRhdGVfZXhp
dF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJLnNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfZnIgPSBzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJfZnIsCisJLnNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1l
b3V0LAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvID0gc2N0cF9odGNwX2N3bmRf
dXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9k
cm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwkuc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwK
KyNlbmRpZgorfSwKK3sKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisJc2N0cF9zZXRfcnRjY19pbml0aWFsX2NjX3BhcmFtLAorCXNj
dHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9zYWNrLAorCXNjdHBfY3duZF91cGRhdGVfZXhpdF9w
Zl9jb21tb24sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKKwlzY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX3RpbWVvdXQsCisJc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVyX2Vjbl9lY2hvLAor
CXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQsCisJc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9vdXRwdXQsCisJc2N0cF9jd25kX3VwZGF0ZV9ydGNjX3BhY2tldF90cmFuc21pdHRl
ZCwKKwlzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfdHNuX2Fja25vd2xlZGdlZCwKKwlzY3RwX2N3bmRf
bmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2JlZ2lucywKKwlzY3RwX2N3bmRfcHJlcGFyZV9ydGNjX25l
dF9mb3Jfc2FjaywKKwlzY3RwX2N3bmRfcnRjY19zb2NrZXRfb3B0aW9uLAorCXNjdHBfcnR0X3J0
Y2NfY2FsY3VsYXRlZAorI2Vsc2UKKwkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBf
c2V0X3J0Y2NfaW5pdGlhbF9jY19wYXJhbSwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNr
ID0gc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVyX3NhY2ssCisJLnNjdHBfY3duZF91cGRhdGVf
ZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJLnNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAorCS5zY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCisJ
LnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRfdXBkYXRlX3J0Y2Nf
YWZ0ZXJfZWNuX2VjaG8sCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQg
PSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAorCS5zY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAorCS5zY3Rw
X2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCA9IHNjdHBfY3duZF91cGRhdGVfcnRjY19w
YWNrZXRfdHJhbnNtaXR0ZWQsCisJLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCA9
IHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkLAorCS5zY3RwX2N3bmRfbmV3
X3RyYW5zbWlzc2lvbl9iZWdpbnMgPSBzY3RwX2N3bmRfbmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2Jl
Z2lucywKKwkuc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrID0gc2N0cF9jd25kX3ByZXBh
cmVfcnRjY19uZXRfZm9yX3NhY2ssCisJLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uID0gc2N0cF9j
d25kX3J0Y2Nfc29ja2V0X29wdGlvbiwKKwkuc2N0cF9ydHRfY2FsY3VsYXRlZCA9IHNjdHBfcnR0
X3J0Y2NfY2FsY3VsYXRlZAorI2VuZGlmCit9Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfY29uc3RhbnRzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9jb25zdGFudHMuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVh
ZDhjMmU0OGM1MzkxLi5mOWE4N2E0N2IyYTE4YzFhOGIwNzI1ZDVjZmFhMDMzNzU3OWZjNzhkIDEw
MDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaApAQCAtMCww
ICsxLDEwODcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz
ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
ICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jb25zdGFudHMuaCAzMjg0NzggMjAxOC0wMS0y
NyAxMzo0Njo1NVogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBf
Q09OU1RBTlRTX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfQ09OU1RBTlRTX0hfCisKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCitleHRlcm4gdm9pZCBnZXR3aW50aW1lb2Zk
YXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKKyNlbmRpZgorCisvKiBJQU5BIGFzc2lnbmVkIHBvcnQg
bnVtYmVyIGZvciBTQ1RQIG92ZXIgVURQIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgU0NUUF9P
VkVSX1VEUF9UVU5ORUxJTkdfUE9SVCA5ODk5CisKKy8qIE51bWJlciBvZiBwYWNrZXRzIHRvIGdl
dCBiZWZvcmUgc2FjayBzZW50IGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxUX1NB
Q0tfRlJFUSAyCisKKy8qIEFkZHJlc3MgbGltaXQgLSBUaGlzIHZhcmlhYmxlIGlzIGNhbGN1bGF0
ZWQKKyAqIGJhc2VkIG9uIGFuIDY1NTM1IGJ5dGUgbWF4IGlwIHBhY2tldC4gV2UgdGFrZSBvdXQg
MTAwIGJ5dGVzCisgKiBmb3IgdGhlIGNvb2tpZSwgNDAgYnl0ZXMgZm9yIGEgdjYgaGVhZGVyIGFu
ZCAzMgorICogYnl0ZXMgZm9yIHRoZSBpbml0IHN0cnVjdHVyZS4gQSBzZWNvbmQgaW5pdCBzdHJ1
Y3R1cmUKKyAqIGZvciB0aGUgaW5pdC1hY2sgYW5kIHRoZW4gZmluYWxseSBhIHRoaXJkIG9uZSBm
b3IgdGhlCisgKiBpbWJlZGRlZCBpbml0LiBUaGlzIHllaWxkcyAxMDArNDArKDMgKiAzMikgPSAy
MzYgYnl0ZXMuCisgKiBUaGlzIGxlYXZlcyA2NTI5OSBieXRlcyBmb3IgYWRkcmVzc2VzLiBXZSB0
aHJvdyBvdXQgdGhlIDI5OSBieXRlcy4KKyAqIE5vdyB3aGF0ZXZlciB3ZSBzZW5kIGluIHRoZSBJ
TklUKCkgd2UgbmVlZCB0byBhbGxvdyB0byBnZXQgYmFjayBpbiB0aGUKKyAqIElOSVQtQUNLIHBs
dXMgYWxsIHRoZSB2YWx1ZXMgZnJvbSBJTklUIGFuZCBJTklULUFDSworICogbGlzdGVkIGluIHRo
ZSBjb29raWUuIFBsdXMgd2UgbmVlZCBzb21lIG92ZXJoZWFkIGZvcgorICogbWF5YmUgY29waWVk
IHBhcmFtZXRlcnMgaW4gdGhlIENPT0tJRS4gSWYgd2UKKyAqIGFsbG93IDEwODAgYWRkcmVzc2Vz
LCBhbmQgZWFjaCBzaWRlIGhhcyAxMDgwIFY2IGFkZHJlc3NlcworICogdGhhdCB3aWxsIGJlIDIx
NjAwIGJ5dGVzLiBJbiB0aGUgSU5JVC1BQ0sgd2Ugd2lsbAorICogc2VlIHRoZSBJTklULUFDSyAy
MTYwMCArIDQzMjAwIGluIHRoZSBjb29raWUuIFRoaXMgbGVhdmVzCisgKiBhYm91dCA1MDAgYnl0
ZXMgc2xhY2sgZm9yIG1pc2MgdGhpbmdzIGluIHRoZSBjb29raWUuCisgKi8KKyNkZWZpbmUgU0NU
UF9BRERSRVNTX0xJTUlUIDEwODAKKworLyogV2UgbmVlZCBhdCBsZWFzdCAyayBvZiBzcGFjZSBm
b3IgdXMsIGluaXRzCisgKiBsYXJnZXIgdGhhbiB0aGF0IGxldHMgYWJvcnQuCisgKi8KKyNkZWZp
bmUgU0NUUF9MQVJHRVNUX0lOSVRfQUNDRVBURUQgKDY1NTM1IC0gMjA0OCkKKworLyogTGFyZ2Vz
dCBsZW5ndGggb2YgYSBjaHVuayAqLworI2RlZmluZSBTQ1RQX01BWF9DSFVOS19MRU5HVEggMHhm
ZmZmCisvKiBMYXJnZXN0IGxlbmd0aCBvZiBhbiBlcnJvciBjYXVzZSAqLworI2RlZmluZSBTQ1RQ
X01BWF9DQVVTRV9MRU5HVEggMHhmZmZmCisvKiBOdW1iZXIgb2YgYWRkcmVzc2VzIHdoZXJlIHdl
IGp1c3Qgc2tpcCB0aGUgY291bnRpbmcgKi8KKyNkZWZpbmUgU0NUUF9DT1VOVF9MSU1JVCA0MAor
CisjZGVmaW5lIFNDVFBfWkVST19DT1BZX1RJQ0tfREVMQVkgKCgoMTAwICogaHopICsgOTk5KSAv
IDEwMDApCisjZGVmaW5lIFNDVFBfWkVST19DT1BZX1NFTkRRX1RJQ0tfREVMQVkgKCgoMTAwICog
aHopICsgOTk5KSAvIDEwMDApCisKKy8qIE51bWJlciBvZiB0aWNrcyB0byBkZWxheSBiZWZvcmUg
cnVubmluZworICogaXRlcmF0b3Igb24gYW4gYWRkcmVzcyBjaGFuZ2UuCisgKi8KKyNkZWZpbmUg
U0NUUF9BRERSRVNTX1RJQ0tfREVMQVkgMgorCisjZGVmaW5lIFNDVFBfVkVSU0lPTl9TVFJJTkcg
IktBTUUtQlNEIDEuMSIKKy8qICNkZWZpbmUgU0NUUF9BVURJVElOR19FTkFCTEVEIDEgdXNlZCBm
b3IgZGVidWcvYXVkaXRpbmcgKi8KKyNkZWZpbmUgU0NUUF9BVURJVF9TSVpFIDI1NgorCisKKyNk
ZWZpbmUgU0NUUF9LVFJIRUFEX05BTUUgInNjdHBfaXRlcmF0b3IiCisjZGVmaW5lIFNDVFBfS1RI
UkVBRF9QQUdFUyAwCisKKyNkZWZpbmUgU0NUUF9NQ09SRV9OQU1FICJzY3RwX2NvcmVfd29ya2Vy
IgorCisKKy8qIElmIHlvdSBzdXBwb3J0IE11bHRpLVZSRiBob3cgYmlnIHRvCisgKiBtYWtlIHRo
ZSBpbml0aWFsIGFycmF5IG9mIFZSRidzIHRvLgorICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9W
UkZfU0laRSA0CisKKy8qIEpSUyAtIFZhbHVlcyBkZWZpbmVkIGZvciB0aGUgSFRDUCBhbGdvcml0
aG0gKi8KKyNkZWZpbmUgQUxQSEFfQkFTRQkoMTw8NykgIC8qIDEuMCB3aXRoIHNoaWZ0IDw8IDcg
Ki8KKyNkZWZpbmUgQkVUQV9NSU4JKDE8PDYpICAvKiAwLjUgd2l0aCBzaGlmdCA8PCA3ICovCisj
ZGVmaW5lIEJFVEFfTUFYCTEwMgkvKiAwLjggd2l0aCBzaGlmdCA8PCA3ICovCisKKy8qIFBsYWNl
cyB0aGF0IENXTkQgbG9nIGNhbiBoYXBwZW4gZnJvbSAqLworI2RlZmluZSBTQ1RQX0NXTkRfTE9H
X0ZST01fRlIJMQorI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fUlRYCTIKKyNkZWZpbmUgU0NU
UF9DV05EX0xPR19GUk9NX0JSU1QJMworI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fU1MJNAor
I2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fQ0EJNQorI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZS
T01fU0FUCTYKKyNkZWZpbmUgU0NUUF9CTE9DS19MT0dfSU5UT19CTEsgNworI2RlZmluZSBTQ1RQ
X0JMT0NLX0xPR19PVVRPRl9CTEsgOAorI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19DSEVDSyAgICAg
OQorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlRPX1NUUkQgMTAKKyNkZWZpbmUgU0NUUF9T
VFJfTE9HX0ZST01fSU1NRURfREVMIDExCisjZGVmaW5lIFNDVFBfU1RSX0xPR19GUk9NX0lOU0VS
VF9IRCAxMgorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNFUlRfTUQgMTMKKyNkZWZpbmUg
U0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX1RMIDE0CisjZGVmaW5lIFNDVFBfU1RSX0xPR19GUk9N
X01BUktfVFNOICAxNQorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9FWFBSU19ERUwgMTYKKyNk
ZWZpbmUgU0NUUF9GUl9MT0dfQklHR0VTVF9UU05TICAgIDE3CisjZGVmaW5lIFNDVFBfRlJfTE9H
X1NUUklLRV9URVNUICAgICAxOAorI2RlZmluZSBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTksgICAg
MTkKKyNkZWZpbmUgU0NUUF9GUl9UM19USU1FT1VUICAgICAgICAgIDIwCisjZGVmaW5lIFNDVFBf
TUFQX1BSRVBBUkVfU0xJREUgICAgICAyMQorI2RlZmluZSBTQ1RQX01BUF9TTElERV9GUk9NICAg
ICAgICAgMjIKKyNkZWZpbmUgU0NUUF9NQVBfU0xJREVfUkVTVUxUICAgICAgIDIzCisjZGVmaW5l
IFNDVFBfTUFQX1NMSURFX0NMRUFSRUQJICAgIDI0CisjZGVmaW5lIFNDVFBfTUFQX1NMSURFX05P
TkUgICAgICAgICAyNQorI2RlZmluZSBTQ1RQX0ZSX1QzX01BUktfVElNRSAgICAgICAgMjYKKyNk
ZWZpbmUgU0NUUF9GUl9UM19NQVJLRUQgICAgICAgICAgIDI3CisjZGVmaW5lIFNDVFBfRlJfVDNf
U1RPUFBFRCAgICAgICAgICAyOAorI2RlZmluZSBTQ1RQX0ZSX01BUktFRCAgICAgICAgICAgICAg
MzAKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19OT0FEVl9TUyAgICAgIDMxCisjZGVmaW5lIFNDVFBf
Q1dORF9MT0dfTk9BRFZfQ0EgICAgICAzMgorI2RlZmluZSBTQ1RQX01BWF9CVVJTVF9BUFBMSUVE
ICAgICAgMzMKKyNkZWZpbmUgU0NUUF9NQVhfSUZQX0FQUExJRUQgICAgICAgIDM0CisjZGVmaW5l
IFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NUT1AgICAzNQorI2RlZmluZSBTQ1RQX0lOQ1JFQVNFX1BF
RVJfUldORCAgICAgMzYKKyNkZWZpbmUgU0NUUF9ERUNSRUFTRV9QRUVSX1JXTkQgICAgIDM3Cisj
ZGVmaW5lIFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSyAzOAorI2RlZmluZSBTQ1RQX0xPR19N
QkNOVF9JTkNSRUFTRSAgICAgMzkKKyNkZWZpbmUgU0NUUF9MT0dfTUJDTlRfREVDUkVBU0UgICAg
IDQwCisjZGVmaW5lIFNDVFBfTE9HX01CQ05UX0NIS1NFVCAgICAgICA0MQorI2RlZmluZSBTQ1RQ
X0xPR19ORVdfU0FDSyAgICAgICAgICAgNDIKKyNkZWZpbmUgU0NUUF9MT0dfVFNOX0FDS0VEICAg
ICAgICAgIDQzCisjZGVmaW5lIFNDVFBfTE9HX1RTTl9SRVZPS0VEICAgICAgICA0NAorI2RlZmlu
ZSBTQ1RQX0xPR19MT0NLX1RDQiAgICAgICAgICAgNDUKKyNkZWZpbmUgU0NUUF9MT0dfTE9DS19J
TlAgICAgICAgICAgIDQ2CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tfU09DSyAgICAgICAgICA0Nwor
I2RlZmluZSBTQ1RQX0xPR19MT0NLX1NPQ0tCVUZfUiAgICAgNDgKKyNkZWZpbmUgU0NUUF9MT0df
TE9DS19TT0NLQlVGX1MgICAgIDQ5CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tfQ1JFQVRFICAgICAg
ICA1MAorI2RlZmluZSBTQ1RQX0xPR19JTklUSUFMX1JUVCAgICAgICAgNTEKKyNkZWZpbmUgU0NU
UF9MT0dfUlRUVkFSICAgICAgICAgICAgIDUyCisjZGVmaW5lIFNDVFBfTE9HX1NCQUxMT0MgICAg
ICAgICAgICA1MworI2RlZmluZSBTQ1RQX0xPR19TQkZSRUUgICAgICAgICAgICAgNTQKKyNkZWZp
bmUgU0NUUF9MT0dfU0JSRVNVTFQgICAgICAgICAgIDU1CisjZGVmaW5lIFNDVFBfRlJfRFVQRUQg
ICAgICAgICAgICAgICA1NgorI2RlZmluZSBTQ1RQX0ZSX01BUktFRF9FQVJMWSAgICAgICAgNTcK
KyNkZWZpbmUgU0NUUF9GUl9DV05EX1JFUE9SVCAgICAgICAgIDU4CisjZGVmaW5lIFNDVFBfRlJf
Q1dORF9SRVBPUlRfU1RBUlQgICA1OQorI2RlZmluZSBTQ1RQX0ZSX0NXTkRfUkVQT1JUX1NUT1Ag
ICAgNjAKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NFTkQgICAgIDYxCisjZGVmaW5lIFND
VFBfQ1dORF9JTklUSUFMSVpBVElPTiAgICA2MgorI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01f
VDMgICAgICAgNjMKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NBQ0sgICAgIDY0CisjZGVm
aW5lIFNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLICAgICA2NQorI2RlZmluZSBTQ1RQX0NXTkRfTE9H
X0ZST01fUkVTRU5EICAgNjYKKyNkZWZpbmUgU0NUUF9GUl9MT0dfQ0hFQ0tfU1RSSUtFICAgIDY3
CisjZGVmaW5lIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTICAgICA2OAorI2RlZmluZSBTQ1RQX0NX
TkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQgNjkKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GSUxMX09V
VFFfRklMTFMgIDcwCisjZGVmaW5lIFNDVFBfTE9HX0ZSRUVfU0VOVCAgICAgICAgICAgICA3MQor
I2RlZmluZSBTQ1RQX05BR0xFX0FQUExJRUQgICAgICAgICAgNzIKKyNkZWZpbmUgU0NUUF9OQUdM
RV9TS0lQUEVEICAgICAgICAgIDczCisjZGVmaW5lIFNDVFBfV0FLRVNORF9GUk9NX1NBQ0sgICAg
ICA3NAorI2RlZmluZSBTQ1RQX1dBS0VTTkRfRlJPTV9GV0RUU04gICAgNzUKKyNkZWZpbmUgU0NU
UF9OT1dBS0VfRlJPTV9TQUNLICAgICAgIDc2CisjZGVmaW5lIFNDVFBfQ1dORExPR19QUkVTRU5E
ICAgICAgICA3NworI2RlZmluZSBTQ1RQX0NXTkRMT0dfRU5EU0VORCAgICAgICAgNzgKKyNkZWZp
bmUgU0NUUF9BVF9FTkRfT0ZfU0FDSyAgICAgICAgIDc5CisjZGVmaW5lIFNDVFBfUkVBU09OX0ZP
Ul9TQyAgICAgICAgICA4MAorI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19JTlRPX0JMS0EgICAgODEK
KyNkZWZpbmUgU0NUUF9FTlRFUl9VU0VSX1JFQ1YgICAgICAgIDgyCisjZGVmaW5lIFNDVFBfVVNF
Ul9SRUNWX1NBQ0tTICAgICAgICA4MworI2RlZmluZSBTQ1RQX1NPUkVDVl9CTE9DS1NBICAgICAg
ICAgODQKKyNkZWZpbmUgU0NUUF9TT1JFQ1ZfQkxPQ0tTQiAgICAgICAgIDg1CisjZGVmaW5lIFND
VFBfU09SRUNWX0RPTkUgICAgICAgICAgICA4NgorI2RlZmluZSBTQ1RQX1NBQ0tfUldORF9VUERB
VEUgICAgICAgODcKKyNkZWZpbmUgU0NUUF9TT1JFQ1ZfRU5URVIgICAgICAgICAgIDg4CisjZGVm
aW5lIFNDVFBfU09SRUNWX0VOVEVSUEwgICAgICAgICA4OQorI2RlZmluZSBTQ1RQX01CVUZfSU5Q
VVQgICAgICAgICAgICAgOTAKKyNkZWZpbmUgU0NUUF9NQlVGX0lBTExPQyAgICAgICAgICAgIDkx
CisjZGVmaW5lIFNDVFBfTUJVRl9JRlJFRSAgICAgICAgICAgICA5MgorI2RlZmluZSBTQ1RQX01C
VUZfSUNPUFkgICAgICAgICAgICAgOTMKKyNkZWZpbmUgU0NUUF9NQlVGX1NQTElUICAgICAgICAg
ICAgIDk0CisjZGVmaW5lIFNDVFBfU09SQ1ZfRlJFRUNUTCAgICAgICAgICA5NQorI2RlZmluZSBT
Q1RQX1NPUkNWX0RPRVNDUFkgICAgICAgICAgOTYKKyNkZWZpbmUgU0NUUF9TT1JDVl9ET0VTTENL
ICAgICAgICAgIDk3CisjZGVmaW5lIFNDVFBfU09SQ1ZfRE9FU0FESiAgICAgICAgICA5OAorI2Rl
ZmluZSBTQ1RQX1NPUkNWX0JPVFdISUxFICAgICAgICAgOTkKKyNkZWZpbmUgU0NUUF9TT1JDVl9Q
QVNTQkYgICAgICAgICAgMTAwCisjZGVmaW5lIFNDVFBfU09SQ1ZfQURKRCAgICAgICAgICAgIDEw
MQorI2RlZmluZSBTQ1RQX1VOS05PV05fTUFYICAgICAgICAgICAxMDIKKyNkZWZpbmUgU0NUUF9S
QU5EWV9TVFVGRiAgICAgICAgICAgMTAzCisjZGVmaW5lIFNDVFBfUkFORFlfU1RVRkYxICAgICAg
ICAgIDEwNAorI2RlZmluZSBTQ1RQX1NUUk1PVVRfTE9HX0FTU0lHTgkgICAxMDUKKyNkZWZpbmUg
U0NUUF9TVFJNT1VUX0xPR19TRU5ECSAgIDEwNgorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9X
Tl9DQSAgICAxMDcKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX1VQICAgICAgICAgMTA4CisjZGVm
aW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX0dBUCAgIDEwOQorI2RlZmluZSBTQ1RQX0ZMSUdIVF9M
T0dfRE9XTl9SU05EICAxMTAKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX1VQX1JTTkQgICAgMTEx
CisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkRfVE8gICAgMTEyCisjZGVmaW5lIFND
VFBfRkxJR0hUX0xPR19ET1dOX1dQICAgIDExMworI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfVVBf
UkVWT0tFICAxMTQKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX0RPV05fUERSUCAgMTE1CisjZGVm
aW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1BNVFUgIDExNgorI2RlZmluZSBTQ1RQX1NBQ0tfTE9H
X05PUk1BTAkgICAxMTcKKyNkZWZpbmUgU0NUUF9TQUNLX0xPR19FWFBSRVNTCSAgIDExOAorI2Rl
ZmluZSBTQ1RQX01BUF9UU05fRU5URVJTICAgICAgICAxMTkKKyNkZWZpbmUgU0NUUF9USFJFU0hP
TERfQ0xFQVIgICAgICAgMTIwCisjZGVmaW5lIFNDVFBfVEhSRVNIT0xEX0lOQ1IgICAgICAgIDEy
MQorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRFdOX1dQX0ZXRCAxMjIKKyNkZWZpbmUgU0NUUF9G
V0RfVFNOX0NIRUNLICAgICAgICAgMTIzCisjZGVmaW5lIFNDVFBfTE9HX01BWF9UWVBFUyAxMjQK
Ky8qCisgKiBUbyB0dXJuIG9uIHZhcmlvdXMgbG9nZ2luZywgeW91IG11c3QgZmlyc3QgZW5hYmxl
ICdvcHRpb25zIEtUUicgYW5kCisgKiB5b3UgbWlnaHQgd2FudCB0byBidW1wIHRoZSBlbnRpcmVz
ICdvcHRpb25zIEtUUl9FTlRSSUVTPTgwMDAwJy4KKyAqIFRvIGdldCBzb21ldGhpbmcgdG8gbG9n
IHlvdSBkZWZpbmUgb25lIG9mIHRoZSBsb2dnaW5nIGRlZmluZXMuCisgKiAoc2VlIExJTlQpLgor
ICoKKyAqIFRoaXMgZ2V0cyB0aGUgY29tcGlsZSBpbiBwbGFjZSwgYnV0IHlvdSBzdGlsbCBuZWVk
IHRvIHR1cm4gdGhlCisgKiBsb2dnaW5nIGZsYWcgb24gdG9vIGluIHRoZSBzeXNjdGwgKHNlZSBp
biBzY3RwLmgpLgorICovCisKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfVU5LTk9XTiAwCisjZGVm
aW5lIFNDVFBfTE9HX0VWRU5UX0NXTkQgIDEKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfQkxPQ0sg
MgorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TVFJNICAzCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5U
X0ZSICAgIDQKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUFQICAgNQorI2RlZmluZSBTQ1RQX0xP
R19FVkVOVF9NQVhCVVJTVCA2CisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX1JXTkQgIDcKKyNkZWZp
bmUgU0NUUF9MT0dfRVZFTlRfTUJDTlQgOAorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TQUNLICA5
CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tfRVZFTlQgMTAKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRf
UlRUICAxMQorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TQiAgIDEyCisjZGVmaW5lIFNDVFBfTE9H
X0VWRU5UX05BR0xFIDEzCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX1dBS0UgMTQKKyNkZWZpbmUg
U0NUUF9MT0dfTUlTQ19FVkVOVCAxNQorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9DTE9TRSAxNgor
I2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQlVGIDE3CisjZGVmaW5lIFNDVFBfTE9HX0NIVU5LX1BS
T0MgMTgKKyNkZWZpbmUgU0NUUF9MT0dfRVJST1JfUkVUICAxOQorCisjZGVmaW5lIFNDVFBfTE9H
X01BWF9FVkVOVCAyMAorCisjZGVmaW5lIFNDVFBfTE9DS19VTktOT1dOIDIKKworCisvKiBudW1i
ZXIgb2YgYXNzb2NpYXRpb25zIGJ5IGRlZmF1bHQgZm9yIHpvbmUgYWxsb2NhdGlvbiAqLworI2Rl
ZmluZSBTQ1RQX01BWF9OVU1fT0ZfQVNPQwk0MDAwMAorLyogaG93IG1hbnkgYWRkcmVzc2VzIHBl
ciBhc3NvYyByZW1vdGUgYW5kIGxvY2FsICovCisjZGVmaW5lIFNDVFBfU0NBTEVfRk9SX0FERFIJ
MgorCisvKiBkZWZhdWx0IE1VTFRJUExFX0FTQ09ORiBtb2RlIGVuYWJsZSgxKS9kaXNhYmxlKDAp
IHZhbHVlIChzeXNjdGwpICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NVUxUSVBMRV9BU0NPTkZT
CTAKKworLyoKKyAqIFRocmVzaG9sZCBmb3IgcnduZCB1cGRhdGVzLCB3ZSBoYXZlIHRvIHJlYWQg
KHNiX2hpd2F0ID4+CisgKiBTQ1RQX1JXTkRfSElXQVRfU0hJRlQpIGJlZm9yZSB3ZSB3aWxsIGxv
b2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhCisgKiB3aW5kb3cgdXBkYXRlIHNhY2suIFdo
ZW4gd2UgbG9vaywgd2UgY29tcGFyZSB0aGUgbGFzdCByd25kIHdlIHNlbnQgdnMgdGhlCisgKiBj
dXJyZW50IHJ3bmQuIEl0IHRvbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLiBVc2lu
ZyAzIGRpdmRlcyB0aGUKKyAqIGhpd2F0IGJ5IDgsIHNvIGZvciAyMDBrIHJ3bmQgd2UgbmVlZCB0
byByZWFkIDI0ay4gRm9yIGEgNjRrIHJ3bmQgd2UgbmVlZAorICogdG8gcmVhZCA4ay4gVGhpcyBz
ZWVtcyBhYm91dCByaWdodC4uIEkgaG9wZSA6LUQuLiB3ZSBkbyBzZXQgYQorICogbWluIG9mIGEg
TVRVIG9uIGl0IHNvIGlmIHRoZSByd25kIGlzIHJlYWwgc21hbGwgd2Ugd2lsbCBpbnNpc3QKKyAq
IG9uIGEgZnVsbCBNVFUgb2YgMTUwMCBieXRlcy4KKyAqLworI2RlZmluZSBTQ1RQX1JXTkRfSElX
QVRfU0hJRlQgMworCisvKiBIb3cgbXVjaCBvZiB0aGUgcnduZCBtdXN0IHRoZQorICogbWVzc2Fn
ZSBiZSB0YWtpbmcgdXAgdG8gc3RhcnQgcGFydGlhbCBkZWxpdmVyeS4KKyAqIFdlIGNhbGN1bGF0
ZSB0aGlzIGJ5IHNoaWZpbmcgdGhlIGhpX3dhdGVyIChyZWN2X3dpbikKKyAqIGxlZnQgdGhlIGZv
bGxvd2luZyAuLiBzZXQgdG8gMSwgd2hlbiBhIG1lc3NhZ2UgaG9sZHMKKyAqIDEvMiB0aGUgcndu
ZC4gSWYgd2Ugc2V0IGl0IHRvIDIgd2hlbiBhIG1lc3NhZ2UgaG9sZHMKKyAqIDEvNCB0aGUgcndu
ZC4uLmV0Yy4uCisgKi8KKworI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQgMQor
CisvKgorICogZGVmYXVsdCBITUFDIGZvciBjb29raWVzLCBldGMuLi4gdXNlIG9uZSBvZiB0aGUg
QVVUSCBITUFDIGlkJ3MKKyAqIFNDVFBfSE1BQyBpcyB0aGUgSE1BQ19JRCB0byB1c2UKKyAqIFND
VFBfU0lHTkFUVVJFX1NJWkUgaXMgdGhlIGRpZ2VzdCBsZW5ndGgKKyAqLworI2RlZmluZSBTQ1RQ
X0hNQUMJCVNDVFBfQVVUSF9ITUFDX0lEX1NIQTEKKyNkZWZpbmUgU0NUUF9TSUdOQVRVUkVfU0la
RQlTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExCisjZGVmaW5lIFNDVFBfU0lHTkFUVVJFX0FMT0Nf
U0laRSBTQ1RQX1NJR05BVFVSRV9TSVpFCisKKy8qCisgKiB0aGUgU0NUUCBwcm90b2NvbCBzaWdu
YXR1cmUgdGhpcyBpbmNsdWRlcyB0aGUgdmVyc2lvbiBudW1iZXIgZW5jb2RlZCBpbgorICogdGhl
IGxhc3QgNCBiaXRzIG9mIHRoZSBzaWduYXR1cmUuCisgKi8KKyNkZWZpbmUgUFJPVE9fU0lHTkFU
VVJFX0EJMHgzMDAwMDAwMAorI2RlZmluZSBTQ1RQX1ZFUlNJT05fTlVNQkVSCTB4MworCisjZGVm
aW5lIE1BWF9UU04JMHhmZmZmZmZmZgorCisvKiBob3cgbWFueSBleGVjdXRpb25zIGV2ZXJ5IE4g
dGljaydzICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTUFYX0FUX09OQ0UgMjAKKworLyogbnVt
YmVyIG9mIGNsb2NrIHRpY2tzIGJldHdlZW4gaXRlcmF0b3IgZXhlY3V0aW9ucyAqLworI2RlZmlu
ZSBTQ1RQX0lURVJBVE9SX1RJQ0tTIDEKKworLyoKKyAqIG9wdGlvbjogSWYgeW91IGNvbW1lbnQg
b3V0IHRoZSBmb2xsb3dpbmcgeW91IHdpbGwgcmVjZWl2ZSB0aGUgb2xkIGJlaGF2aW9yCisgKiBv
ZiBvYmV5aW5nIGN3bmQgZm9yIHRoZSBmYXN0IHJldHJhbnNtaXQgYWxnb3JpdGhtLiBXaXRoIHRo
aXMgZGVmaW5lZCBhIEZSCisgKiBoYXBwZW5zIHJpZ2h0IGF3YXkgd2l0aC1vdXQgd2FpdGluZyBm
b3IgdGhlIGZsaWdodHNpemUgdG8gZHJvcCBiZWxvdyB0aGUKKyAqIGN3bmQgdmFsdWUgKHdoaWNo
IGlzIHJlZHVjZWQgYnkgdGhlIEZSIHRvIDEvMiB0aGUgaW5mbGlnaHQgcGFja2V0cykuCisgKi8K
KyNkZWZpbmUgU0NUUF9JR05PUkVfQ1dORF9PTl9GUiAxCisKKy8qCisgKiBBZGRzIGltcGxlbWVu
dG9ycyBndWlkZSBiZWhhdmlvciB0byBvbmx5IHVzZSBuZXdlc3QgaGlnaGVzdCB1cGRhdGUgaW4g
U0FDSworICogZ2FwIGFjaydzIHRvIGZpZ3VyZSBvdXQgaWYgeW91IG5lZWQgdG8gc3Ryb2tlIGEg
Y2h1bmsgZm9yIEZSLgorICovCisjZGVmaW5lIFNDVFBfTk9fRlJfVU5MRVNTX1NFR01FTlRfU01B
TExFUiAxCisKKy8qIGRlZmF1bHQgbWF4IEkgY2FuIGJ1cnN0IG91dCBhZnRlciBhIGZhc3QgcmV0
cmFuc21pdCwgMCBkaXNhYmxlcyBpdCAqLworI2RlZmluZSBTQ1RQX0RFRl9NQVhfQlVSU1QgNAor
I2RlZmluZSBTQ1RQX0RFRl9IQk1BWF9CVVJTVCA0CisjZGVmaW5lIFNDVFBfREVGX0ZSTUFYX0JV
UlNUIDQKKworLyogUlRPIGNhbGN1bGF0aW9uIGZsYWcgdG8gc2F5IGlmIGl0CisgKiBpcyBzYWZl
IHRvIGRldGVybWluZSBsb2NhbCBsYW4gb3Igbm90LgorICovCisjZGVmaW5lIFNDVFBfUlRUX0ZS
T01fTk9OX0RBVEEgMAorI2RlZmluZSBTQ1RQX1JUVF9GUk9NX0RBVEEgICAgIDEKKworI2RlZmlu
ZSBQUl9TQ1RQX1VOT1JERVJFRF9GTEFHIDB4MDAwMQorCisvKiBJUCBoZHIgKDIwLzQwKSArIDEy
KzIrMiAoZW5ldCkgKyBzY3RwIGNvbW1vbiAxMiAqLworI2RlZmluZSBTQ1RQX0ZJUlNUX01CVUZf
UkVTViA2OAorLyogUGFja2V0IHRyYW5zbWl0IHN0YXRlcyBpbiB0aGUgc2VudCBmaWVsZCAqLwor
I2RlZmluZSBTQ1RQX0RBVEFHUkFNX1VOU0VOVAkJMAorI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1NF
TlQJCTEKKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQxCQkyCS8qIG5vdCB1c2VkIChpbiBj
b2RlLCBidXQgbWF5CisJCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkgKi8KKyNkZWZpbmUgU0NUUF9E
QVRBR1JBTV9SRVNFTkQyCQkzCS8qIG5vdCB1c2VkIChpbiBjb2RlLCBidXQgbWF5CisJCQkJCQkg
KiBoaXQgdGhpcyB2YWx1ZSkgKi8KKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQJCTQKKyNk
ZWZpbmUgU0NUUF9EQVRBR1JBTV9BQ0tFRAkJMTAwMTAKKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9N
QVJLRUQJCTIwMDEwCisjZGVmaW5lIFNDVFBfRk9SV0FSRF9UU05fU0tJUAkJMzAwMTAKKyNkZWZp
bmUgU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRAkJNDAwMTAKKworLyogY2h1bmsgb3V0cHV0IHNlbmQg
ZnJvbSBsb2NhdGlvbnMgKi8KKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCAgICAg
ICAwCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fVDMgICAgICAgCTEKKyNkZWZpbmUgU0NUUF9P
VVRQVVRfRlJPTV9JTlBVVF9FUlJPUiAgICAyCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ09O
VFJPTF9QUk9DICAgMworI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NBQ0tfVE1SICAgICAgIDQK
KyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiAgICAgICA1CisjZGVmaW5lIFNDVFBf
T1VUUFVUX0ZST01fSEJfVE1SICAgICAgICAgNgorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NI
VVRfQUNLX1RNUiAgIDcKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9BU0NPTkZfVE1SICAgICA4
CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1RNUiAgICAgOQorI2RlZmluZSBTQ1RQ
X09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIgIDEwCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01f
RUFSTFlfRlJfVE1SICAgMTEKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRICAg
ICAxMgorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1VTUl9SQ1ZEICAgICAgIDEzCisjZGVmaW5l
IFNDVFBfT1VUUFVUX0ZST01fQ09PS0lFX0FDSyAgICAgMTQKKyNkZWZpbmUgU0NUUF9PVVRQVVRf
RlJPTV9EUkFJTiAgICAgICAgICAxNQorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcg
ICAgICAgIDE2CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU09DS09QVCAgICAgICAgMTcKKwor
LyogU0NUUCBjaHVuayB0eXBlcyBhcmUgbW92ZWQgc2N0cC5oIGZvciBhcHBsaWNhdGlvbiAoTkFU
LCBGVykgdXNlICovCisKKy8qIGFsaWduIHRvIDMyLWJpdCBzaXplcyAqLworI2RlZmluZSBTQ1RQ
X1NJWkUzMih4KQkoKCgoeCkgKyAzKSA+PiAyKSA8PCAyKQorCisjZGVmaW5lIElTX1NDVFBfQ09O
VFJPTChhKSAoKChhKS0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0RBVEEpICYmICgoYSktPmNodW5rX3R5
cGUgIT0gU0NUUF9JREFUQSkpCisjZGVmaW5lIElTX1NDVFBfREFUQShhKSAoKChhKS0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0RBVEEpIHx8ICgoYSktPmNodW5rX3R5cGUgPT0gU0NUUF9JREFUQSkpCisK
KworLyogU0NUUCBwYXJhbWV0ZXIgdHlwZXMgKi8KKy8qKioqKioqKioqKioqMHgwMDAwIHNlcmll
cyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX0lORk8JCTB4MDAwMQorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUF9DT05OX0FERFJFU1MJCTB4MDAw
NAorI2VuZGlmCisjZGVmaW5lIFNDVFBfSVBWNF9BRERSRVNTCQkweDAwMDUKKyNkZWZpbmUgU0NU
UF9JUFY2X0FERFJFU1MJCTB4MDAwNgorI2RlZmluZSBTQ1RQX1NUQVRFX0NPT0tJRQkJMHgwMDA3
CisjZGVmaW5lIFNDVFBfVU5SRUNPR19QQVJBTQkJMHgwMDA4CisjZGVmaW5lIFNDVFBfQ09PS0lF
X1BSRVNFUlZFCQkweDAwMDkKKyNkZWZpbmUgU0NUUF9IT1NUTkFNRV9BRERSRVNTCQkweDAwMGIK
KyNkZWZpbmUgU0NUUF9TVVBQT1JURURfQUREUlRZUEUJCTB4MDAwYworCisvKiBSRkMgNjUyNSAq
LworI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVAkweDAwMGQKKyNkZWZpbmUgU0NU
UF9TVFJfUkVTRVRfSU5fUkVRVUVTVAkweDAwMGUKKyNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfVFNO
X1JFUVVFU1QJMHgwMDBmCisjZGVmaW5lIFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFCQkweDAwMTAK
KyNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TCTB4MDAxMQorI2RlZmluZSBT
Q1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUwkweDAwMTIKKworI2RlZmluZSBTQ1RQX01BWF9S
RVNFVF9QQVJBTVMgMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9UU05fREVMVEEJMHgxMDAw
CisKKy8qKioqKioqKioqKioqMHg0MDAwIHNlcmllcyoqKioqKioqKioqKiovCisKKy8qKioqKioq
KioqKioqMHg4MDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfRUNOX0NBUEFC
TEUJCTB4ODAwMAorCisvKiBSRkMgNDg5NSAqLworI2RlZmluZSBTQ1RQX1JBTkRPTQkJCTB4ODAw
MgorI2RlZmluZSBTQ1RQX0NIVU5LX0xJU1QJCQkweDgwMDMKKyNkZWZpbmUgU0NUUF9ITUFDX0xJ
U1QJCQkweDgwMDQKKy8qIFJGQyA0ODIwICovCisjZGVmaW5lIFNDVFBfUEFECQkJMHg4MDA1Cisv
KiBSRkMgNTA2MSAqLworI2RlZmluZSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQJMHg4MDA4CisK
Ky8qKioqKioqKioqKioqMHhDMDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBf
UFJTQ1RQX1NVUFBPUlRFRAkJMHhjMDAwCisvKiBSRkMgNTA2MSAqLworI2RlZmluZSBTQ1RQX0FE
RF9JUF9BRERSRVNTCQkweGMwMDEKKyNkZWZpbmUgU0NUUF9ERUxfSVBfQUREUkVTUwkJMHhjMDAy
CisjZGVmaW5lIFNDVFBfRVJST1JfQ0FVU0VfSU5ECQkweGMwMDMKKyNkZWZpbmUgU0NUUF9TRVRf
UFJJTV9BRERSCQkweGMwMDQKKyNkZWZpbmUgU0NUUF9TVUNDRVNTX1JFUE9SVAkJMHhjMDA1Cisj
ZGVmaW5lIFNDVFBfVUxQX0FEQVBUQVRJT04JCTB4YzAwNgorLyogYmVoYXZlLW5hdC1kcmFmdCAq
LworI2RlZmluZSBTQ1RQX0hBU19OQVRfU1VQUE9SVAkJMHhjMDA3CisjZGVmaW5lIFNDVFBfTkFU
X1ZUQUdTCQkJMHhjMDA4CisKKy8qIGJpdHMgZm9yIFRPUyBmaWVsZCAqLworI2RlZmluZSBTQ1RQ
X0VDVDBfQklUCQkweDAyCisjZGVmaW5lIFNDVFBfRUNUMV9CSVQJCTB4MDEKKyNkZWZpbmUgU0NU
UF9DRV9CSVRTCQkweDAzCisKKy8qIGJlbG93IHR1cm5zIG9mZiBhYm92ZSAqLworI2RlZmluZSBT
Q1RQX0ZMRVhJQkxFX0FERFJFU1MJMHgyMAorI2RlZmluZSBTQ1RQX05PX0hFQVJUQkVBVAkweDQw
CisKKy8qIG1hc2sgdG8gZ2V0IHN0aWNreSAqLworI2RlZmluZSBTQ1RQX1NUSUNLWV9PUFRJT05T
X01BU0sJMHgwYworCisKKy8qCisgKiBTQ1RQIHN0YXRlcyBmb3IgaW50ZXJuYWwgc3RhdGUgbWFj
aGluZQorICovCisjZGVmaW5lIFNDVFBfU1RBVEVfRU1QVFkJCTB4MDAwMAorI2RlZmluZSBTQ1RQ
X1NUQVRFX0lOVVNFCQkweDAwMDEKKyNkZWZpbmUgU0NUUF9TVEFURV9DT09LSUVfV0FJVAkJMHgw
MDAyCisjZGVmaW5lIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRAkweDAwMDQKKyNkZWZpbmUgU0NU
UF9TVEFURV9PUEVOCQkJMHgwMDA4CisjZGVmaW5lIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVAkw
eDAwMTAKKyNkZWZpbmUgU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRAkweDAwMjAKKyNkZWZp
bmUgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVAkweDAwNDAKKyNkZWZpbmUgU0NUUF9TVEFU
RV9TSFVURE9XTl9QRU5ESU5HCTB4MDA4MAorI2RlZmluZSBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NL
RVQJMHgwMTAwCisjZGVmaW5lIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQgICAgMHgwMjAw
CisjZGVmaW5lIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCAgICAgMHgwNDAwCisjZGVmaW5l
IFNDVFBfU1RBVEVfV0FTX0FCT1JURUQgICAgICAgICAgMHgwODAwCisjZGVmaW5lIFNDVFBfU1RB
VEVfSU5fQUNDRVBUX1FVRVVFICAgICAgMHgxMDAwCisjZGVmaW5lIFNDVFBfU1RBVEVfTUFTSwkJ
CTB4MDA3ZgorCisjZGVmaW5lIFNDVFBfR0VUX1NUQVRFKGFzb2MpCSgoYXNvYyktPnN0YXRlICYg
U0NUUF9TVEFURV9NQVNLKQorI2RlZmluZSBTQ1RQX1NFVF9TVEFURShhc29jLCBuZXdzdGF0ZSkg
ICgoYXNvYyktPnN0YXRlID0gKChhc29jKS0+c3RhdGUgJiB+U0NUUF9TVEFURV9NQVNLKSB8ICBu
ZXdzdGF0ZSkKKyNkZWZpbmUgU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBzdWJzdGF0ZSkgKChh
c29jKS0+c3RhdGUgJj0gfnN1YnN0YXRlKQorI2RlZmluZSBTQ1RQX0FERF9TVUJTVEFURShhc29j
LCBzdWJzdGF0ZSkgKChhc29jKS0+c3RhdGUgfD0gc3Vic3RhdGUpCisKKy8qIFNDVFAgcmVhY2hh
YmlsaXR5IHN0YXRlIGZvciBlYWNoIGFkZHJlc3MgKi8KKyNkZWZpbmUgU0NUUF9BRERSX1JFQUNI
QUJMRQkJMHgwMDEKKyNkZWZpbmUgU0NUUF9BRERSX05PX1BNVFVEICAgICAgICAgICAgICAweDAw
MgorI2RlZmluZSBTQ1RQX0FERFJfTk9IQgkJCTB4MDA0CisjZGVmaW5lIFNDVFBfQUREUl9CRUlO
R19ERUxFVEVECQkweDAwOAorI2RlZmluZSBTQ1RQX0FERFJfTk9UX0lOX0FTU09DCQkweDAxMAor
I2RlZmluZSBTQ1RQX0FERFJfT1VUX09GX1NDT1BFCQkweDA4MAorI2RlZmluZSBTQ1RQX0FERFJf
VU5DT05GSVJNRUQJCTB4MjAwCisjZGVmaW5lIFNDVFBfQUREUl9SRVFfUFJJTUFSWSAgICAgICAg
ICAgMHg0MDAKKy8qIEpSUyA1LzEzLzA3IC0gQWRkZWQgcG90ZW50aWFsbHkgZmFpbGVkIHN0YXRl
IGZvciBDTVQgUEYgKi8KKyNkZWZpbmUgU0NUUF9BRERSX1BGICAgICAgICAgICAgICAgICAgICAw
eDgwMAorCisvKiBib3VuZCBhZGRyZXNzIHR5cGVzIChlLmcuIHZhbGlkIGFkZHJlc3MgdHlwZXMg
dG8gYWxsb3cpICovCisjZGVmaW5lIFNDVFBfQk9VTkRfVjYJCTB4MDEKKyNkZWZpbmUgU0NUUF9C
T1VORF9WNAkJMHgwMgorCisvKgorICogd2hhdCBpcyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgbWJ1
ZnMgaW4gYSBjaGFpbiBJIGFsbG93IGJlZm9yZSBzd2l0Y2hpbmcgdG8KKyAqIGEgY2x1c3Rlcgor
ICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NQlVGU19JTl9DSEFJTiA1CisKKy8qIEhvdyBsb25n
IGEgY29va2llIGxpdmVzIGluIG1pbGxpLXNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUF9ERUZBVUxU
X0NPT0tJRV9MSUZFCTYwMDAwCisKKy8qIE1heGltdW0gdGhlIG1hcHBpbmcgYXJyYXkgd2lsbCAg
Z3JvdyB0byAoVFNOIG1hcHBpbmcgYXJyYXkpICovCisjZGVmaW5lIFNDVFBfTUFQUElOR19BUlJB
WQk1MTIKKworLyogc2l6ZSBvZiB0aGUgaW5pdGlhbCBtYWxsb2Mgb24gdGhlIG1hcHBpbmcgYXJy
YXkgKi8KKyNkZWZpbmUgU0NUUF9JTklUSUFMX01BUFBJTkdfQVJSQVkgIDE2CisvKiBob3cgbXVj
aCB3ZSBncm93IHRoZSBtYXBwaW5nIGFycmF5IGVhY2ggY2FsbCAqLworI2RlZmluZSBTQ1RQX01B
UFBJTkdfQVJSQVlfSU5DUiAgICAgMzIKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHRoZSB0aW1l
ciB0eXBlcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBhcmd1bWVudHMgaW4KKyAqIHRo
ZSBzZXQvZ2V0IHRpbWVyIHR5cGUgY2FsbHMuCisgKi8KKyNkZWZpbmUgU0NUUF9USU1FUl9JTklU
IAkwCisjZGVmaW5lIFNDVFBfVElNRVJfUkVDViAJMQorI2RlZmluZSBTQ1RQX1RJTUVSX1NFTkQg
CTIKKyNkZWZpbmUgU0NUUF9USU1FUl9IRUFSVEJFQVQJMworI2RlZmluZSBTQ1RQX1RJTUVSX1BN
VFUJCTQKKyNkZWZpbmUgU0NUUF9USU1FUl9NQVhTSFVURE9XTgk1CisjZGVmaW5lIFNDVFBfVElN
RVJfU0lHTkFUVVJFCTYKKy8qCisgKiBudW1iZXIgb2YgdGltZXIgdHlwZXMgaW4gdGhlIGJhc2Ug
U0NUUCBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgc2V0L2dldCBhbmQKKyAqIGhhcyB0aGUgYmFzZSBk
ZWZhdWx0LgorICovCisjZGVmaW5lIFNDVFBfTlVNX1RNUlMJNworCisvKiB0aW1lciB0eXBlcyAq
LworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTk9ORQkJMAorI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfU0VORAkJMQorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVAkJMgorI2RlZmluZSBTQ1RQ
X1RJTUVSX1RZUEVfUkVDVgkJMworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04JNAor
I2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUCTUKKyNkZWZpbmUgU0NUUF9USU1FUl9U
WVBFX0NPT0tJRQkJNgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFCTcKKyNkZWZp
bmUgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRQk4CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQ
RV9TSFVURE9XTkFDSwk5CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9BU0NPTkYJCTEwCisjZGVm
aW5lIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJECTExCisjZGVmaW5lIFNDVFBfVElNRVJf
VFlQRV9BVVRPQ0xPU0UJMTIKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0VWRU5UV0FLRQkxMwor
I2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQgICAgICAgIDE0CisjZGVmaW5lIFNDVFBf
VElNRVJfVFlQRV9JTlBLSUxMICAgICAgICAgMTUKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0FT
T0NLSUxMICAgICAgICAxNgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSAgICAgICAg
IDE3CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQgICAgMTgKKy8qIGFkZCBu
ZXcgdGltZXJzIGhlcmUgLSBhbmQgaW5jcmVtZW50IExBU1QgKi8KKyNkZWZpbmUgU0NUUF9USU1F
Ul9UWVBFX0xBU1QgICAgICAgICAgICAxOQorCisjZGVmaW5lIFNDVFBfSVNfVElNRVJfVFlQRV9W
QUxJRCh0KQkoKCh0KSA+IFNDVFBfVElNRVJfVFlQRV9OT05FKSAmJiBcCisJCQkJCSAoKHQpIDwg
U0NUUF9USU1FUl9UWVBFX0xBU1QpKQorCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKy8qIE51
bWJlciBvZiB0aWNrcyB0byBydW4gdGhlIG1haW4gdGltZXIgYXQgaW4gbXNlYyAqLworI2RlZmlu
ZSBTQ1RQX01BSU5fVElNRVJfREVGQVVMVAkJMTAKKyNlbmRpZgorCisvKiBtYXggbnVtYmVyIG9m
IFRTTidzIGR1cCdkIHRoYXQgSSB3aWxsIGhvbGQgKi8KKyNkZWZpbmUgU0NUUF9NQVhfRFVQX1RT
TlMJMjAKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHRoZSB0eXBlcyB1c2VkIHdoZW4gc2V0dGlu
ZyB0aGUgcmV0cnkgYW1vdW50cy4KKyAqLworLyogSG93IG1hbnkgZHJvcCByZS1hdHRlbXB0cyB3
ZSBtYWtlIG9uICBJTklUL0NPT0tJRS1FQ0hPICovCisjZGVmaW5lIFNDVFBfUkVUUllfRFJPUFBF
RF9USFJFU0ggNAorCisvKgorICogTWF4bWl1bSBudW1iZXIgb2YgY2h1bmtzIGEgc2luZ2xlIGFz
c29jaWF0aW9uIGNhbiBoYXZlIG9uIGl0LiBOb3RlIHRoYXQKKyAqIHRoaXMgaXMgYSBzcXVpc2h5
IG51bWJlciBzaW5jZSB0aGUgY291bnQgY2FuIHJ1biBvdmVyIHRoaXMgaWYgdGhlIHVzZXIKKyAq
IHNlbmRzIGEgbGFyZ2UgbWVzc2FnZSBkb3duIC4uIHRoZSBmcmFnbWVudGVkIGNodW5rcyBkb24n
dCBjb3VudCB1bnRpbAorICogQUZURVIgdGhlIG1lc3NhZ2UgaXMgb24gcXVldWUuLiBpdCB3b3Vs
ZCBiZSB0aGUgbmV4dCBzZW5kIHRoYXQgYmxvY2tzCisgKiB0aGluZ3MuIFRoaXMgbnVtYmVyIHdp
bGwgZ2V0IHR1bmVkIHVwIGF0IGJvb3QgaW4gdGhlIHNjdHBfaW5pdCBhbmQgdXNlIHRoZQorICog
bnVtYmVyIG9mIGNsdXN0ZXJzIGFzIGEgYmFzZS4gVGhpcyB3YXkgaGlnaCBiYW5kd2lkdGggZW52
aXJvbm1lbnRzIHdpbGwKKyAqIG5vdCBnZXQgaW1wYWN0ZWQgYnkgdGhlIGxvd2VyIGJhbmR3aWR0
aCBzZW5kaW5nIGEgYnVuY2ggb2YgMSBieXRlIGNodW5rcworICovCisjaWZkZWYgX19QYW5kYV9f
CisjZGVmaW5lIFNDVFBfQVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFIDEwMjQwCisjZWxzZQorI2Rl
ZmluZSBTQ1RQX0FTT0NfTUFYX0NIVU5LU19PTl9RVUVVRSA1MTIKKyNlbmRpZgorCisKKy8qIFRo
ZSBjb252ZXJzaW9uIGZyb20gdGltZSB0byB0aWNrcyBhbmQgdmljZSB2ZXJzYSBpcyBkb25lIGJ5
IHJvdW5kaW5nCisgKiB1cHdhcmRzLiBUaGlzIHdheSB3ZSBjYW4gdGVzdCBpbiB0aGUgY29kZSB0
aGUgdGltZSB0byBiZSBwb3NpdGl2ZSBhbmQKKyAqIGtub3cgdGhhdCB0aGlzIGNvcnJlc3BvbmRz
IHRvIGEgcG9zaXRpdmUgbnVtYmVyIG9mIHRpY2tzLgorICovCisjZGVmaW5lIE1TRUNfVE9fVElD
S1MoeCkgKChoeiA9PSAxMDAwKSA/IHggOiAoKCgoeCkgKiBoeikgKyA5OTkpIC8gMTAwMCkpCisj
ZGVmaW5lIFRJQ0tTX1RPX01TRUMoeCkgKChoeiA9PSAxMDAwKSA/IHggOiAoKCgoeCkgKiAxMDAw
KSArIChoeiAtIDEpKSAvIGh6KSkKKworI2RlZmluZSBTRUNfVE9fVElDS1MoeCkgKCh4KSAqIGh6
KQorI2RlZmluZSBUSUNLU19UT19TRUMoeCkgKCgoeCkgKyAoaHogLSAxKSkgLyBoeikKKworLyoK
KyAqIEJhc2ljYWxseSB0aGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBiZWZvcmUgSSBkbyBhIGVh
cmx5IEZSLiBNYWtpbmcgdGhpcworICogdmFsdWUgdG8gbG93IHdpbGwgY2F1c2UgZHVwbGljYXRl
IHJldHJhbnNtaXNzaW9ucy4KKyAqLworI2RlZmluZSBTQ1RQX01JTkZSX01TRUNfVElNRVIgMjUw
CisvKiBUaGUgZmxvb3IgdGhpcyB2YWx1ZSBpcyBhbGxvd2VkIHRvIGZhbGwgdG8gd2hlbiBzdGFy
dGluZyBhIHRpbWVyLiAqLworI2RlZmluZSBTQ1RQX01JTkZSX01TRUNfRkxPT1IgMjAKKworLyog
aW5pdCB0aW1lciBkZWYgPSAxIHNlYyAqLworI2RlZmluZSBTQ1RQX0lOSVRfU0VDCTEKKworLyog
c2VuZCB0aW1lciBkZWYgPSAxIHNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUF9TRU5EX1NFQwkxCisK
Ky8qIHJlY3YgdGltZXIgZGVmID0gMjAwbXMgICovCisjZGVmaW5lIFNDVFBfUkVDVl9NU0VDCTIw
MAorCisvKiAzMCBzZWNvbmRzICsgUlRPIChpbiBtcykgKi8KKyNkZWZpbmUgU0NUUF9IQl9ERUZB
VUxUX01TRUMJMzAwMDAKKworLyoKKyAqIFRoaXMgaXMgaG93IGxvbmcgYSBzZWNyZXQgbGl2ZXMs
IE5PVCBob3cgbG9uZyBhIGNvb2tpZSBsaXZlcyBob3cgbWFueQorICogdGlja3MgdGhlIGN1cnJl
bnQgc2VjcmV0IHdpbGwgbGl2ZS4KKyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfU0VDUkVUX0xJ
RkVfU0VDIDM2MDAKKworI2RlZmluZSBTQ1RQX1JUT19VUFBFUl9CT1VORAkoNjAwMDApCS8qIDYw
IHNlYyBpbiBtcyAqLworI2RlZmluZSBTQ1RQX1JUT19MT1dFUl9CT1VORAkoMTAwMCkJLyogMSBz
ZWMgaXMgbXMgKi8KKyNkZWZpbmUgU0NUUF9SVE9fSU5JVElBTAkoMzAwMCkJLyogMyBzZWMgaW4g
bXMgKi8KKworCisjZGVmaW5lIFNDVFBfSU5QX0tJTExfVElNRU9VVCAyMAkvKiBudW1iZXIgb2Yg
bXMgdG8gcmV0cnkga2lsbCBvZiBpbnBjYiAqLworI2RlZmluZSBTQ1RQX0FTT0NfS0lMTF9USU1F
T1VUIDEwCS8qIG51bWJlciBvZiBtcyB0byByZXRyeSBraWxsIG9mIGlucGNiICovCisKKyNkZWZp
bmUgU0NUUF9ERUZfTUFYX0lOSVQJCTgKKyNkZWZpbmUgU0NUUF9ERUZfTUFYX1NFTkQJCTEwCisj
ZGVmaW5lIFNDVFBfREVGX01BWF9QQVRIX1JUWAkJNQorI2RlZmluZSBTQ1RQX0RFRl9QQVRIX1BG
X1RIUkVTSE9MRAlTQ1RQX0RFRl9NQVhfUEFUSF9SVFgKKworI2RlZmluZSBTQ1RQX0RFRl9QTVRV
X1JBSVNFX1NFQwk2MDAJLyogMTAgbWluIGJldHdlZW4gcmFpc2UgYXR0ZW1wdHMgKi8KKworCisv
KiBIb3cgbWFueSBzdHJlYW1zIEkgcmVxdWVzdCBpbml0aWFsbHkgYnkgZGVmYXVsdCAqLworI2Rl
ZmluZSBTQ1RQX09TVFJFQU1fSU5JVElBTCAxMAorI2RlZmluZSBTQ1RQX0lTVFJFQU1fSU5JVElB
TCAyMDQ4CisKKy8qCisgKiBIb3cgbWFueSBzbWFsbGVzdF9tdHUncyBuZWVkIHRvIGluY3JlYXNl
IGJlZm9yZSBhIHdpbmRvdyB1cGRhdGUgc2FjayBpcworICogc2VudCAoc2hvdWxkIGJlIGEgcG93
ZXIgb2YgMikuCisgKi8KKy8qIFNlbmQgd2luZG93IHVwZGF0ZSAoaW5jciAqIHRoaXMgPiBoaXdh
dCkuIFNob3VsZCBiZSBhIHBvd2VyIG9mIDIgKi8KKyNkZWZpbmUgU0NUUF9NSU5JTUFMX1JXTkQJ
CSg0MDk2KQkvKiBtaW5pbWFsIHJ3bmQgKi8KKworI2RlZmluZSBTQ1RQX0FERFJNQVgJCTE2CisK
Ky8qIFNDVFAgREVCVUcgU3dpdGNoIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19U
SU1FUjEJMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSMgkweDAwMDAwMDAyCS8q
IHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSMwkweDAwMDAwMDA0CS8qIHVudXNl
ZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSNAkweDAwMDAwMDA4CisjZGVmaW5lIFNDVFBf
REVCVUdfT1VUUFVUMQkweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUMgkweDAw
MDAwMDIwCisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUMwkweDAwMDAwMDQwCisjZGVmaW5lIFND
VFBfREVCVUdfT1VUUFVUNAkweDAwMDAwMDgwCisjZGVmaW5lIFNDVFBfREVCVUdfVVRJTDEJMHgw
MDAwMDEwMAorI2RlZmluZSBTQ1RQX0RFQlVHX1VUSUwyCTB4MDAwMDAyMDAJLyogdW51c2VkICov
CisjZGVmaW5lIFNDVFBfREVCVUdfQVVUSDEJMHgwMDAwMDQwMAorI2RlZmluZSBTQ1RQX0RFQlVH
X0FVVEgyCTB4MDAwMDA4MDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfSU5QVVQx
CTB4MDAwMDEwMDAKKyNkZWZpbmUgU0NUUF9ERUJVR19JTlBVVDIJMHgwMDAwMjAwMAorI2RlZmlu
ZSBTQ1RQX0RFQlVHX0lOUFVUMwkweDAwMDA0MDAwCisjZGVmaW5lIFNDVFBfREVCVUdfSU5QVVQ0
CTB4MDAwMDgwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfQVNDT05GMQkweDAw
MDEwMDAwCisjZGVmaW5lIFNDVFBfREVCVUdfQVNDT05GMgkweDAwMDIwMDAwCisjZGVmaW5lIFND
VFBfREVCVUdfT1VUUFVUNQkweDAwMDQwMDAwCS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RF
QlVHX1hYWAkJMHgwMDA4MDAwMAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19QQ0Ix
CQkweDAwMTAwMDAwCisjZGVmaW5lIFNDVFBfREVCVUdfUENCMgkJMHgwMDIwMDAwMAkvKiB1bnVz
ZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19QQ0IzCQkweDAwNDAwMDAwCisjZGVmaW5lIFNDVFBf
REVCVUdfUENCNAkJMHgwMDgwMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX0lOREFUQTEJMHgwMTAw
MDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX0lOREFUQTIJMHgwMjAwMDAwMAkvKiB1bnVzZWQgKi8K
KyNkZWZpbmUgU0NUUF9ERUJVR19JTkRBVEEzCTB4MDQwMDAwMDAJLyogdW51c2VkICovCisjZGVm
aW5lIFNDVFBfREVCVUdfQ1JDT0ZGTE9BRAkweDA4MDAwMDAwCS8qIHVudXNlZCAqLworI2RlZmlu
ZSBTQ1RQX0RFQlVHX1VTUlJFUTEJMHgxMDAwMDAwMAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NU
UF9ERUJVR19VU1JSRVEyCTB4MjAwMDAwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVC
VUdfUEVFTDEJMHg0MDAwMDAwMAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUg
U0NUUF9ERUJVR19VU1IgCQkweDgwMDAwMDAwCisjZWxzZQorI2RlZmluZSBTQ1RQX0RFQlVHX1hY
WFhYCTB4ODAwMDAwMDAJLyogdW51c2VkICovCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9ERUJVR19B
TEwJCTB4N2ZmM2ZmZmYKKyNkZWZpbmUgU0NUUF9ERUJVR19OT0lTWQkweDAwMDQwMDAwCisKKy8q
IFdoYXQgc2VuZGVyIG5lZWRzIHRvIHNlZSB0byBhdm9pZCBTV1Mgb3Igd2UgY29uc2lkZXIgcGVl
cnMgcnduZCAwICovCisjZGVmaW5lIFNDVFBfU1dTX1NFTkRFUl9ERUYJMTQyMAorCisvKgorICog
U1dTIGlzIHNjYWxlZCB0byB0aGUgc2JfaGl3YXQgb2YgdGhlIHNvY2tldC4gQSB2YWx1ZSBvZiAy
IGlzIGhpd2F0LzQsIDEKKyAqIHdvdWxkIGJlIGhpd2F0LzIgZXRjLgorICovCisvKiBXaGF0IHJl
Y2VpdmVyIG5lZWRzIHRvIHNlZSBpbiBzb2NrYnVmIG9yIHdlIHRlbGwgcGVlciBpdHMgMSAqLwor
I2RlZmluZSBTQ1RQX1NXU19SRUNFSVZFUl9ERUYJMzAwMAorCisjZGVmaW5lIFNDVFBfSU5JVElB
TF9DV05EIDQzODAKKworI2RlZmluZSBTQ1RQX0RFRkFVTFRfTVRVIDE1MDAgLyogZW1lcmdlbmN5
IGRlZmF1bHQgTVRVICovCisvKiBhbW91bnQgcGVlciBpcyBvYmxpZ2F0ZWQgdG8gaGF2ZSBpbiBy
d25kIG9yIEkgd2lsbCBhYm9ydCAqLworI2RlZmluZSBTQ1RQX01JTl9SV05ECTE1MDAKKworI2Rl
ZmluZSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVCA2NTUzNQorCisjZGVmaW5lIFNDVFBfQ0hVTktf
QlVGRkVSX1NJWkUJNTEyCisjZGVmaW5lIFNDVFBfUEFSQU1fQlVGRkVSX1NJWkUJNTEyCisKKy8q
IHNtYWxsIGNodW5rIHN0b3JlIGZvciBsb29raW5nIGF0IGNodW5rX2xpc3QgaW4gYXV0aCAqLwor
I2RlZmluZSBTQ1RQX1NNQUxMX0NIVU5LX1NUT1JFIDI2MAorCisjZGVmaW5lIFNDVFBfSE9XX01B
TllfU0VDUkVUUwkyCS8qIGhvdyBtYW55IHNlY3JldHMgSSBrZWVwICovCisKKyNkZWZpbmUgU0NU
UF9OVU1CRVJfT0ZfU0VDUkVUUwk4CS8qIG9yIDggKiA0ID0gMzIgb2N0ZXRzICovCisjZGVmaW5l
IFNDVFBfU0VDUkVUX1NJWkUJMzIJLyogbnVtYmVyIG9mIG9jdGV0cyBpbiBhIDI1NiBiaXRzICov
CisKKworLyoKKyAqIFNDVFAgdXBwZXIgbGF5ZXIgbm90aWZpY2F0aW9ucworICovCisjZGVmaW5l
IFNDVFBfTk9USUZZX0FTU09DX1VQICAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBTQ1RQ
X05PVElGWV9BU1NPQ19ET1dOICAgICAgICAgICAgICAgICAgIDIKKyNkZWZpbmUgU0NUUF9OT1RJ
RllfSU5URVJGQUNFX0RPV04gICAgICAgICAgICAgICAzCisjZGVmaW5lIFNDVFBfTk9USUZZX0lO
VEVSRkFDRV9VUCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBTQ1RQX05PVElGWV9TRU5UX0RH
X0ZBSUwgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZB
SUwgICAgICAgICAgICAgICA2CisjZGVmaW5lIFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTCAg
ICAgICAgICAgICAgNworI2RlZmluZSBTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRCAgICAg
ICAgICAgIDgKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfUkVNX0FCT1JURUQgICAgICAgICAg
ICA5CisjZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX1JFU1RBUlQgICAgICAgICAgICAgICAxMAor
I2RlZmluZSBTQ1RQX05PVElGWV9QRUVSX1NIVVRET1dOICAgICAgICAgICAgICAgMTEKKyNkZWZp
bmUgU0NUUF9OT1RJRllfQVNDT05GX0FERF9JUCAgICAgICAgICAgICAgIDEyCisjZGVmaW5lIFND
VFBfTk9USUZZX0FTQ09ORl9ERUxFVEVfSVAgICAgICAgICAgICAxMworI2RlZmluZSBTQ1RQX05P
VElGWV9BU0NPTkZfU0VUX1BSSU1BUlkgICAgICAgICAgMTQKKyNkZWZpbmUgU0NUUF9OT1RJRllf
UEFSVElBTF9ERUxWSUVSWV9JTkRJQ0FUSU9OIDE1CisjZGVmaW5lIFNDVFBfTk9USUZZX0lOVEVS
RkFDRV9DT05GSVJNRUQgICAgICAgICAxNgorI2RlZmluZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRf
UkVDViAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JFU0VUX1NFTkQg
ICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VU
ICAgICAgICAxOQorI2RlZmluZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX0lOICAgICAg
ICAgMjAKKyNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklFRF9PVVQgICAgICAgIDIx
CisjZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5JRURfSU4gICAgICAgICAyMgorI2Rl
ZmluZSBTQ1RQX05PVElGWV9BVVRIX05FV19LRVkgICAgICAgICAgICAgICAgMjMKKyNkZWZpbmUg
U0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSAgICAgICAgICAgICAgIDI0CisjZGVmaW5lIFNDVFBf
Tk9USUZZX05PX1BFRVJfQVVUSCAgICAgICAgICAgICAgICAyNQorI2RlZmluZSBTQ1RQX05PVElG
WV9TRU5ERVJfRFJZICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUgU0NUUF9OT1RJRllfUkVN
T1RFX0VSUk9SICAgICAgICAgICAgICAgIDI3CisKKy8qIFRoaXMgaXMgdGhlIHZhbHVlIGZvciBt
ZXNzYWdlcyB0aGF0IGFyZSBOT1QgY29tcGxldGVseQorICogY29waWVkIGRvd24gd2hlcmUgd2Ug
d2lsbCBzdGFydCB0byBzcGxpdCB0aGUgbWVzc2FnZS4KKyAqIFNvLCB3aXRoIG91ciBkZWZhdWx0
LCB3ZSBzcGxpdCBvbmx5IGlmIHRoZSBwaWVjZSB3ZQorICogd2FudCB0byB0YWtlIHdpbGwgZmls
bCB1cCBhIGZ1bGwgTVRVIChhc3N1bWluZworICogYSAxNTAwIGJ5dGUgTVRVKS4KKyAqLworI2Rl
ZmluZSBTQ1RQX0RFRkFVTFRfU1BMSVRfUE9JTlRfTUlOIDI5MDQKKworLyogTWF4aW11bSBsZW5n
dGggb2YgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpbiBlcnJvciBjYXVzZXMgKi8KKyNkZWZpbmUg
U0NUUF9ESUFHX0lORk9fTEVOIDEyOAorCisvKiBBQk9SVCBDT0RFUyBhbmQgb3RoZXIgdGVsbC10
YWxlIGxvY2F0aW9uCisgKiBjb2RlcyBhcmUgZ2VuZXJhdGVkIGJ5IGFkZGluZyB0aGUgYmVsb3cK
KyAqIHRvIHRoZSBpbnN0YW5jZSBpZC4KKyAqLworCisvKiBGaWxlIGRlZmluZXMgKi8KKyNkZWZp
bmUgU0NUUF9GUk9NX1NDVFBfSU5QVVQgICAgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9G
Uk9NX1NDVFBfUENCICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfVElNRVIgICAg
ICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICAgICAgIDB4NTAw
MDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBVVElMICAgICAgICAgIDB4NjAwMDAwMDAKKyNk
ZWZpbmUgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSAgICAgIDB4NzAwMDAwMDAKKyNkZWZpbmUgU0NU
UF9GUk9NX1NDVFBfQVNDT05GICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1ND
VFBfT1VUUFVUICAgICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfUEVFTE9G
RiAgICAgIDB4YTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfUEFOREEgICAgICAgIDB4
YjAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfU1lTQ1RMICAgICAgIDB4YzAwMDAwMDAK
KyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfQ0NfRlVOQ1RJT05TIDB4ZDAwMDAwMDAKKworLyogTG9j
YXRpb24gSUQncyAqLworI2RlZmluZSBTQ1RQX0xPQ18xICAweDAwMDAwMDAxCisjZGVmaW5lIFND
VFBfTE9DXzIgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9MT0NfMyAgMHgwMDAwMDAwMworI2Rl
ZmluZSBTQ1RQX0xPQ180ICAweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfTE9DXzUgIDB4MDAwMDAw
MDUKKyNkZWZpbmUgU0NUUF9MT0NfNiAgMHgwMDAwMDAwNgorI2RlZmluZSBTQ1RQX0xPQ183ICAw
eDAwMDAwMDA3CisjZGVmaW5lIFNDVFBfTE9DXzggIDB4MDAwMDAwMDgKKyNkZWZpbmUgU0NUUF9M
T0NfOSAgMHgwMDAwMDAwOQorI2RlZmluZSBTQ1RQX0xPQ18xMCAweDAwMDAwMDBhCisjZGVmaW5l
IFNDVFBfTE9DXzExIDB4MDAwMDAwMGIKKyNkZWZpbmUgU0NUUF9MT0NfMTIgMHgwMDAwMDAwYwor
I2RlZmluZSBTQ1RQX0xPQ18xMyAweDAwMDAwMDBkCisjZGVmaW5lIFNDVFBfTE9DXzE0IDB4MDAw
MDAwMGUKKyNkZWZpbmUgU0NUUF9MT0NfMTUgMHgwMDAwMDAwZgorI2RlZmluZSBTQ1RQX0xPQ18x
NiAweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfTE9DXzE3IDB4MDAwMDAwMTEKKyNkZWZpbmUgU0NU
UF9MT0NfMTggMHgwMDAwMDAxMgorI2RlZmluZSBTQ1RQX0xPQ18xOSAweDAwMDAwMDEzCisjZGVm
aW5lIFNDVFBfTE9DXzIwIDB4MDAwMDAwMTQKKyNkZWZpbmUgU0NUUF9MT0NfMjEgMHgwMDAwMDAx
NQorI2RlZmluZSBTQ1RQX0xPQ18yMiAweDAwMDAwMDE2CisjZGVmaW5lIFNDVFBfTE9DXzIzIDB4
MDAwMDAwMTcKKyNkZWZpbmUgU0NUUF9MT0NfMjQgMHgwMDAwMDAxOAorI2RlZmluZSBTQ1RQX0xP
Q18yNSAweDAwMDAwMDE5CisjZGVmaW5lIFNDVFBfTE9DXzI2IDB4MDAwMDAwMWEKKyNkZWZpbmUg
U0NUUF9MT0NfMjcgMHgwMDAwMDAxYgorI2RlZmluZSBTQ1RQX0xPQ18yOCAweDAwMDAwMDFjCisj
ZGVmaW5lIFNDVFBfTE9DXzI5IDB4MDAwMDAwMWQKKyNkZWZpbmUgU0NUUF9MT0NfMzAgMHgwMDAw
MDAxZQorI2RlZmluZSBTQ1RQX0xPQ18zMSAweDAwMDAwMDFmCisjZGVmaW5lIFNDVFBfTE9DXzMy
IDB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9MT0NfMzMgMHgwMDAwMDAyMQorI2RlZmluZSBTQ1RQ
X0xPQ18zNCAweDAwMDAwMDIyCisjZGVmaW5lIFNDVFBfTE9DXzM1IDB4MDAwMDAwMjMKKworCisv
KiBGcmVlIGFzc29jIGNvZGVzICovCisjZGVmaW5lIFNDVFBfTk9STUFMX1BST0MgICAgICAwCisj
ZGVmaW5lIFNDVFBfUENCRlJFRV9OT0ZPUkNFICAxCisjZGVmaW5lIFNDVFBfUENCRlJFRV9GT1JD
RSAgICAyCisKKy8qIEZyb20gY29kZXMgZm9yIGFkZGluZyBhZGRyZXNzZXMgKi8KKyNkZWZpbmUg
U0NUUF9BRERSX0lTX0NPTkZJUk1FRCA4CisjZGVmaW5lIFNDVFBfQUREUl9EWU5BTUlDX0FEREVE
IDYKKyNkZWZpbmUgU0NUUF9JTl9DT09LSUVfUFJPQyAxMDAKKyNkZWZpbmUgU0NUUF9BTExPQ19B
U09DICAxCisjZGVmaW5lIFNDVFBfTE9BRF9BRERSXzIgMgorI2RlZmluZSBTQ1RQX0xPQURfQURE
Ul8zIDMKKyNkZWZpbmUgU0NUUF9MT0FEX0FERFJfNCA0CisjZGVmaW5lIFNDVFBfTE9BRF9BRERS
XzUgNQorCisjZGVmaW5lIFNDVFBfRE9OT1RfU0VUU0NPUEUgMAorI2RlZmluZSBTQ1RQX0RPX1NF
VFNDT1BFIDEKKworCisvKiBUaGlzIHZhbHVlIGRldGVybWluZXMgdGhlIGRlZmF1bHQgZm9yIHdo
ZW4KKyAqIHdlIHRyeSB0byBhZGQgbW9yZSBvbiB0aGUgc2VuZCBxdWV1ZS4sIGlmCisgKiB0aGVy
ZSBpcyByb29tLiBUaGlzIHByZXZlbnRzIHVzIGZyb20gY3ljbGluZworICogaW50byB0aGUgY29w
eV9yZXN1bWUgcm91dGluZSB0byBvZnRlbiBpZgorICogd2UgaGF2ZSBub3QgZ290IGVub3VnaCBz
cGFjZSB0byBhZGQgYSBkZWNlbnQKKyAqIGVub3VnaCBzaXplIG1lc3NhZ2UuIE5vdGUgdGhhdCBp
ZiB3ZSBoYXZlIGVub3VnaAorICogc3BhY2UgdG8gY29tcGxldGUgdGhlIG1lc3NhZ2UgY29weSB3
ZSB3aWxsIGFsd2F5cworICogYWRkIHRvIHRoZSBtZXNzYWdlLCBubyBtYXR0ZXIgd2hhdCB0aGUg
c2l6ZS4gSXRzCisgKiBvbmx5IHdoZW4gd2UgcmVhY2ggdGhlIHBvaW50IHRoYXQgd2UgaGF2ZSBz
b21lIGxlZnQKKyAqIHRvIGFkZCwgdGhlcmUgaXMgb25seSByb29tIGZvciBwYXJ0IG9mIGl0IHRo
YXQgd2UKKyAqIHdpbGwgdXNlIHRoaXMgdGhyZXNob2xkLiBJdHMgYWxzbyBhIHN5c2N0bC4KKyAq
LworI2RlZmluZSBTQ1RQX0RFRkFVTFRfQUREX01PUkUgMTQ1MgorCisjaWZuZGVmIFNDVFBfUENC
SEFTSFNJWkUKKy8qIGRlZmF1bHQgbnVtYmVyIG9mIGFzc29jaWF0aW9uIGhhc2ggYnVja2V0cyBp
biBlYWNoIGVuZHBvaW50ICovCisjZGVmaW5lIFNDVFBfUENCSEFTSFNJWkUgMjU2CisjZW5kaWYK
KyNpZm5kZWYgU0NUUF9UQ0JIQVNIU0laRQorI2RlZmluZSBTQ1RQX1RDQkhBU0hTSVpFIDEwMjQK
KyNlbmRpZgorCisjaWZuZGVmIFNDVFBfQ0hVTktRVUVVRV9TQ0FMRQorI2RlZmluZSBTQ1RQX0NI
VU5LUVVFVUVfU0NBTEUgMTAKKyNlbmRpZgorCisjaWZkZWYgX19GcmVlQlNEX18KKy8qIGNsb2Nr
IHZhcmlhbmNlIGlzIDEgbXMgKi8KKyNkZWZpbmUgU0NUUF9DTE9DS19HUkFOVUxBUklUWQkxCisj
ZWxzZQorLyogY2xvY2sgdmFyaWFuY2UgaXMgMTAgbXMgKi8KKyNkZWZpbmUgU0NUUF9DTE9DS19H
UkFOVUxBUklUWQkxMAorI2VuZGlmCisjZGVmaW5lIElQX0hEUl9TSVpFIDQwCQkvKiB3ZSB1c2Ug
dGhlIHNpemUgb2YgYSBJUDYgaGVhZGVyIGhlcmUgdGhpcworCQkJCSAqIGRldHJhY3RzIGEgc21h
bGwgYW1vdW50IGZvciBpcHY0IGJ1dCBpdAorCQkJCSAqIHNpbXBsaWZpZXMgdGhlIGlwdjYgYWRk
aXRpb24gKi8KKworLyogQXJndW1lbnQgbWFnaWMgbnVtYmVyIGZvciBzY3RwX2lucGNiX2ZyZWUo
KSAqLworCisvKiB0aGlyZCBhcmd1bWVudCAqLworI2RlZmluZSBTQ1RQX0NBTExFRF9ESVJFQ1RM
WV9OT0NNUFNFVCAgICAgMAorI2RlZmluZSBTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9T
RSAgMQorI2RlZmluZSBTQ1RQX0NBTExFRF9GUk9NX0lOUEtJTExfVElNRVIgICAgMgorLyogc2Vj
b25kIGFyZ3VtZW50ICovCisjZGVmaW5lIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JUICAgICAg
ICAgIDEKKyNkZWZpbmUgU0NUUF9GUkVFX1NIT1VMRF9VU0VfR1JBQ0VGVUxfQ0xPU0UgMAorCisj
aWZuZGVmIElQUFJPVE9fU0NUUAorI2RlZmluZSBJUFBST1RPX1NDVFAgMTMyCS8qIHRoZSBPZmZp
Y2lhbCBJQU5BIG51bWJlciA6LSkgKi8KKyNlbmRpZgkJCQkvKiAhSVBQUk9UT19TQ1RQICovCisK
KyNkZWZpbmUgU0NUUF9NQVhfREFUQV9CVU5ETElORwkJMjU2CisKKy8qIG1vZHVsYXIgY29tcGFy
aXNvbiAqLworLyogU2VlIFJGQyAxOTgyIGZvciBkZXRhaWxzLiAqLworI2RlZmluZSBTQ1RQX1VJ
TlQxNl9HVChhLCBiKSAoKChhIDwgYikgJiYgKCh1aW50MTZfdCkoYiAtIGEpID4gKDFVPDwxNSkp
KSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGEgPiBiKSAmJiAoKHVpbnQx
Nl90KShhIC0gYikgPCAoMVU8PDE1KSkpKQorI2RlZmluZSBTQ1RQX1VJTlQxNl9HRShhLCBiKSAo
U0NUUF9VSU5UMTZfR1QoYSwgYikgfHwgKGEgPT0gYikpCisjZGVmaW5lIFNDVFBfVUlOVDMyX0dU
KGEsIGIpICgoKGEgPCBiKSAmJiAoKHVpbnQzMl90KShiIC0gYSkgPiAoMVU8PDMxKSkpIHx8IFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYSA+IGIpICYmICgodWludDMyX3QpKGEg
LSBiKSA8ICgxVTw8MzEpKSkpCisjZGVmaW5lIFNDVFBfVUlOVDMyX0dFKGEsIGIpIChTQ1RQX1VJ
TlQzMl9HVChhLCBiKSB8fCAoYSA9PSBiKSkKKworI2RlZmluZSBTQ1RQX1NTTl9HVChhLCBiKSBT
Q1RQX1VJTlQxNl9HVChhLCBiKQorI2RlZmluZSBTQ1RQX1NTTl9HRShhLCBiKSBTQ1RQX1VJTlQx
Nl9HRShhLCBiKQorI2RlZmluZSBTQ1RQX1RTTl9HVChhLCBiKSBTQ1RQX1VJTlQzMl9HVChhLCBi
KQorI2RlZmluZSBTQ1RQX1RTTl9HRShhLCBiKSBTQ1RQX1VJTlQzMl9HRShhLCBiKQorI2RlZmlu
ZSBTQ1RQX01JRF9HVChpLCBhLCBiKSAoKChpKSA9PSAxKSA/IFNDVFBfVUlOVDMyX0dUKGEsIGIp
IDogU0NUUF9VSU5UMTZfR1QoKHVpbnQxNl90KWEsICh1aW50MTZfdCliKSkKKyNkZWZpbmUgU0NU
UF9NSURfR0UoaSwgYSwgYikgKCgoaSkgPT0gMSkgPyBTQ1RQX1VJTlQzMl9HRShhLCBiKSA6IFND
VFBfVUlOVDE2X0dFKCh1aW50MTZfdClhLCAodWludDE2X3QpYikpCisjZGVmaW5lIFNDVFBfTUlE
X0VRKGksIGEsIGIpICgoKGkpID09IDEpID8gYSA9PSBiIDogKHVpbnQxNl90KWEgPT0gKHVpbnQx
Nl90KWIpCisKKy8qIE1hcHBpbmcgYXJyYXkgbWFuaXB1bGF0aW9uIHJvdXRpbmVzICovCisjZGVm
aW5lIFNDVFBfSVNfVFNOX1BSRVNFTlQoYXJyeSwgZ2FwKSAoKGFycnlbKGdhcCA+PiAzKV0gPj4g
KGdhcCAmIDB4MDcpKSAmIDB4MDEpCisjZGVmaW5lIFNDVFBfU0VUX1RTTl9QUkVTRU5UKGFycnks
IGdhcCkgKGFycnlbKGdhcCA+PiAzKV0gfD0gKDB4MDEgPDwgKChnYXAgJiAweDA3KSkpKQorI2Rl
ZmluZSBTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFycnksIGdhcCkgKGFycnlbKGdhcCA+PiAzKV0g
Jj0gKCh+KDB4MDEgPDwgKChnYXAgJiAweDA3KSkpKSAmIDB4ZmYpKQorI2RlZmluZSBTQ1RQX0NB
TENfVFNOX1RPX0dBUChnYXAsIHRzbiwgbWFwcGluZ190c24pIGRvIHsgXAorCSAgICAgICAgICAg
ICAgICBpZiAodHNuID49IG1hcHBpbmdfdHNuKSB7IFwKKwkJCQkJCWdhcCA9IHRzbiAtIG1hcHBp
bmdfdHNuOyBcCisJCQkJCX0gZWxzZSB7IFwKKwkJCQkJCWdhcCA9IChNQVhfVFNOIC0gbWFwcGlu
Z190c24pICsgdHNuICsgMTsgXAorCQkJCQl9IFwKKyAgICAgICAgICAgICAgICAgIH0gd2hpbGUg
KDApCisKKworI2RlZmluZSBTQ1RQX1JFVFJBTl9ET05FIC0xCisjZGVmaW5lIFNDVFBfUkVUUkFO
X0VYSVQgLTIKKworLyoKKyAqIFRoaXMgdmFsdWUgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHZ0YWcg
YmxvY2sgdGltZSB3YWl0IGVudHJ5J3MgcGVyIGxpc3QKKyAqIGVsZW1lbnQuICBFYWNoIGVudHJ5
IHdpbGwgdGFrZSAyIDQgYnl0ZSBpbnRzIChhbmQgb2YgY291cnNlIHRoZSBvdmVyaGVhZAorICog
b2YgdGhlIG5leHQgcG9pbnRlciBhcyB3ZWxsKS4gVXNpbmcgMTUgYXMgYW4gZXhhbXBsZSB3aWxs
IHlpZWxkICogKCg4ICoKKyAqIDE1KSArIDgpIG9yIDEyOCBieXRlcyBvZiBvdmVyaGVhZCBmb3Ig
ZWFjaCB0aW1ld2FpdCBibG9jayB0aGF0IGdldHMKKyAqIGluaXRpYWxpemVkLiBJbmNyZWFzaW5n
IGl0IHRvIDMxIHdvdWxkIHlpZWxkIDI1NiBieXRlcyBwZXIgYmxvY2suCisgKi8KKyNkZWZpbmUg
U0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DSyAxNQorLyoKKyAqIElmIHdlIHVzZSB0aGUgU1RBQ0sg
b3B0aW9uLCB3ZSBoYXZlIGFuIGFycmF5IG9mIHRoaXMgc2l6ZSBoZWFkIHBvaW50ZXJzLgorICog
VGhpcyBhcnJheSBpcyBtb2QnZCB0aGUgd2l0aCB0aGUgc2l6ZSB0byBmaW5kIHdoaWNoIGJ1Y2tl
dCBhbmQgdGhlbiBhbGwKKyAqIGVudHJpZXMgbXVzdCBiZSBzZWFyY2hlZCB0byBzZWUgaWYgdGhl
IHRhZyBpcyBpbiB0aW1lZCB3YWl0LiBJZiBzbyB3ZQorICogcmVqZWN0IGl0LgorICovCisjZGVm
aW5lIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUgICAzMgorCisvKgorICogTnVtYmVyIG9mIHNl
Y29uZHMgb2YgdGltZSB3YWl0IGZvciBhIHZ0YWcuCisgKi8KKyNkZWZpbmUgU0NUUF9USU1FX1dB
SVQgNjAKKworLyogSG93IG1hbnkgbWljcm8gc2Vjb25kcyBpcyB0aGUgY3V0b2ZmIGZyb20KKyAq
IGxvY2FsIGxhbiB0eXBlIHJ0dCdzCisgKi8KKyAvKgorICAqIFdlIGFsbG93IDkwMHVzIGZvciB0
aGUgcnR0LgorICAqLworI2RlZmluZSBTQ1RQX0xPQ0FMX0xBTl9SVFQgOTAwCisjZGVmaW5lIFND
VFBfTEFOX1VOS05PV04gIDAKKyNkZWZpbmUgU0NUUF9MQU5fTE9DQUwgICAgMQorI2RlZmluZSBT
Q1RQX0xBTl9JTlRFUk5FVCAyCisKKyNkZWZpbmUgU0NUUF9TRU5EX0JVRkZFUl9TUExJVFRJTkcg
MHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1JFQ1ZfQlVGRkVSX1NQTElUVElORyAweDAwMDAwMDAy
CisKKy8qIFRoZSBzeXN0ZW0gcmV0YWlucyBhIGNhY2hlIG9mIGZyZWUgY2h1bmtzIHN1Y2ggdG8K
KyAqIGN1dCBkb3duIG9uIGNhbGxzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzeXN0ZW0uIFRoZXJl
CisgKiBpcyBhIHBlciBhc3NvY2lhdGlvbiBsaW1pdCBvZiBmcmVlIGl0ZW1zIGFuZCBhIG92ZXJh
bGwKKyAqIHN5c3RlbSBsaW1pdC4gSWYgZWl0aGVyIG9uZSBnZXRzIGhpdCB0aGVuIHRoZSByZXNv
dXJjZQorICogc3RvcHMgYmVpbmcgY2FjaGVkLgorICovCisKKyNkZWZpbmUgU0NUUF9ERUZfQVNP
Q19SRVNDX0xJTUlUIDEwCisjZGVmaW5lIFNDVFBfREVGX1NZU1RFTV9SRVNDX0xJTUlUIDEwMDAK
KworLyotCisgKiBkZWZpbmVzIGZvciBzb2NrZXQgbG9jayBzdGF0ZXMuCisgKiBVc2VkIGJ5IF9f
QVBQTEVfXyBhbmQgU0NUUF9TT19MT0NLX1RFU1RJTkcKKyAqLworI2RlZmluZSBTQ1RQX1NPX0xP
Q0tFRAkJMQorI2RlZmluZSBTQ1RQX1NPX05PVF9MT0NLRUQJMAorCisKKy8qLQorICogRm9yIGFk
ZHJlc3MgbG9ja3MsIGRvIHdlIGhvbGQgdGhlIGxvY2s/CisgKi8KKyNkZWZpbmUgU0NUUF9BRERS
X0xPQ0tFRCAxCisjZGVmaW5lIFNDVFBfQUREUl9OT1RfTE9DS0VEIDAKKworI2RlZmluZSBJTjRf
SVNQUklWQVRFX0FERFJFU1MoYSkgXAorICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBd
ID09IDEwKSB8fCBcCisgICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDE3Mikg
JiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA+PSAxNikgJiYgXAorICAg
ICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA8PSAzMikpIHx8IFwKKyAgICAoKCgodWlu
dDhfdCAqKSYoYSktPnNfYWRkcilbMF0gPT0gMTkyKSAmJiBcCisgICAgICgoKHVpbnQ4X3QgKikm
KGEpLT5zX2FkZHIpWzFdID09IDE2OCkpKQorCisjZGVmaW5lIElONF9JU0xPT1BCQUNLX0FERFJF
U1MoYSkgXAorICAgICgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDEyNykKKworI2Rl
ZmluZSBJTjRfSVNMSU5LTE9DQUxfQUREUkVTUyhhKSBcCisgICAgKCgoKHVpbnQ4X3QgKikmKGEp
LT5zX2FkZHIpWzBdID09IDE2OSkgJiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRy
KVsxXSA9PSAyNTQpKQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNkZWZpbmUgU0NUUF9HRVRUSU1FX1RJTUVWQUwoeCkJ
Z2V0d2ludGltZW9mZGF5KHgpCisjZGVmaW5lIFNDVFBfR0VUUFRJTUVfVElNRVZBTCh4KSBnZXR3
aW50aW1lb2ZkYXkoeCkgLyogdGhpcyBkb2Vzbid0IHNlZW0gdG8gZXZlciBiZSB1c2VkLi4gKi8K
KyNlbHNlCisjZGVmaW5lIFNDVFBfR0VUVElNRV9USU1FVkFMKHgpCWdldHRpbWVvZmRheSh4LCBO
VUxMKQorI2RlZmluZSBTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoeCkgZ2V0dGltZW9mZGF5KHgsIE5V
TEwpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfS0VSTkVMKQorI2RlZmluZSBTQ1RQ
X0dFVFRJTUVfVElNRVZBTCh4KSAoZ2V0bWljcm91cHRpbWUoeCkpCisjZGVmaW5lIFNDVFBfR0VU
UFRJTUVfVElNRVZBTCh4KSAobWljcm91cHRpbWUoeCkpCisjZW5kaWYKKworI2lmIGRlZmluZWQo
X0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBzY3RwX3Nvd3dha2V1
cChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfRE9OVF9XQUtFKSB7IFwKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dB
S0VPVVRQVVQ7IFwKKwl9IGVsc2UgeyBcCisJCXNvd3dha2V1cChzbyk7IFwKKwl9IFwKK30gd2hp
bGUgKDApCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVmaW5lIHNjdHBfc293d2FrZXVwX2xvY2tl
ZChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfRE9OVF9XQUtFKSB7IFwKKyAgICAgICAgICAgICAgICBTT0NLQlVGX1VOTE9DSygmKChzbykt
PnNvX3NuZCkpOyBcCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFT1VU
UFVUOyBcCisJfSBlbHNlIHsgXAorCQlzb3d3YWtldXBfbG9ja2VkKHNvKTsgXAorCX0gXAorfSB3
aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIHNjdHBfc293d2FrZXVwX2xvY2tlZChpbnAsIHNvKSBc
CitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtF
KSB7IFwKKyAgICAgICAgICAgICAgICBTT0NLQlVGX1VOTE9DSygmKChzbyktPnNvX3NuZCkpOyBc
CisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUOyBcCisJfSBl
bHNlIHsgXAorCQlzb3d3YWtldXAoc28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2VuZGlmCisK
KyNkZWZpbmUgc2N0cF9zb3J3YWtldXAoaW5wLCBzbykgXAorZG8geyBcCisJaWYgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJCWlucC0+c2N0cF9mbGFn
cyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKKwl9IGVsc2UgeyBcCisJCXNvcndha2V1
cChzbyk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVmaW5l
IHNjdHBfc29yd2FrZXVwX2xvY2tlZChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFKSB7IFwKKwkJaW5wLT5zY3RwX2ZsYWdz
IHw9IFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsgXAorICAgICAgICAgICAgICAgIFNPQ0tCVUZf
VU5MT0NLKCYoKHNvKS0+c29fcmN2KSk7IFwKKwl9IGVsc2UgeyBcCisJCXNvcndha2V1cF9sb2Nr
ZWQoc28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2Vsc2UKKworI2RlZmluZSBzY3RwX3Nvcndh
a2V1cF9sb2NrZWQoaW5wLCBzbykgXAorZG8geyBcCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19XQUtFSU5QVVQ7IFwKKyAgICAgICAgICAgICAgICBTT0NLQlVGX1VOTE9DSygmKChz
byktPnNvX3JjdikpOyBcCisJfSBlbHNlIHsgXAorCQlzb3J3YWtldXAoc28pOyBcCisJfSBcCit9
IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgkJCQkvKiBfS0VSTkVMIHx8IF9fVXNlcnNwYWNl
X18qLworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jcmMzMi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuYwppbmRl
eCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4wYmUwNzk1Y2YyYTZh
ODVhMDQ3YTRmODRlMzhkZjM3NjE5ZjBjNjViIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9jcmMzMi5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2NyYzMyLmMKQEAgLTAsMCArMSw4MjkgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlk
ZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBi
eSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgor
ICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K
KyAqICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfY3JjMzIuYyAz
MjcyMDAgMjAxNy0xMi0yNiAxMjozNTowMlogdHVleGVuICQiKTsKKworI2luY2x1ZGUgIm9wdF9z
Y3RwLmgiCisKKyNpZmRlZiBTQ1RQCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvcGFyYW0u
aD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CisjZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2NyYzMyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2VuZGlm
CisKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKKy8qKgorICoKKyAqIFJvdXRpbmUgRGVzY3Jp
cHRpb246CisgKgorICogQ29tcHV0ZXMgdGhlIENSQzMyYyBjaGVja3N1bSBmb3IgdGhlIHNwZWNp
ZmllZCBidWZmZXIgdXNpbmcgdGhlIHNsaWNpbmcgYnkgOAorICogYWxnb3JpdGhtIG92ZXIgNjQg
Yml0IHF1YW50aXRpZXMuCisgKgorICogQXJndW1lbnRzOgorICoKKyAqCQlwX3J1bm5pbmdfY3Jj
IC0gcG9pbnRlciB0byB0aGUgaW5pdGlhbCBvciBmaW5hbCByZW1haW5kZXIgdmFsdWUKKyAqCQkJ
CXVzZWQgaW4gQ1JDIGNvbXB1dGF0aW9ucy4gSXQgc2hvdWxkIGJlIHNldCB0bworICoJCQkJbm9u
LU5VTEwgaWYgdGhlIG1vZGUgYXJndW1lbnQgaXMgZXF1YWwgdG8gQ09OVCBvciBFTkQKKyAqCQlw
X2J1ZiAtIHRoZSBwYWNrZXQgYnVmZmVyIHdoZXJlIGNyYyBjb21wdXRhdGlvbnMgYXJlIGJlaW5n
IHBlcmZvcm1lZAorICoJCWxlbmd0aCAtIHRoZSBsZW5ndGggb2YgcF9idWYgaW4gYnl0ZXMKKyAq
CQlpbml0X2J5dGVzIC0gdGhlIG51bWJlciBvZiBpbml0aWFsIGJ5dGVzIHRoYXQgbmVlZCB0byBi
ZSBwcm9jZXNlZCBiZWZvcmUKKyAqCQkJCQkgYWxpZ25pbmcgcF9idWYgdG8gbXVsdGlwbGVzIG9m
IDQgYnl0ZXMKKyAqCQltb2RlIC0gY2FuIGJlIGFueSBvZiB0aGUgZm9sbG93aW5nOiBCRUdJTiwg
Q09OVCwgRU5ELCBCT0RZLCBBTElHTgorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCisgKgkJVGhl
IGNvbXB1dGVkIENSQzMyYyB2YWx1ZQorICovCisKKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAw
NC0yMDA2IEludGVsIENvcnBvcmF0aW9uIC0gQWxsIFJpZ2h0cyBSZXNlcnZlZAorICoKKyAqCisg
KiBUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgbGljZW5zZWQgc3ViamVjdCB0byB0aGUgQlNEIExp
Y2Vuc2UsIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNl
cy9ic2QtbGljZW5zZS5odG1sLgorICoKKyAqIEFic3RyYWN0OgorICoKKyAqIFRhYmxlcyBmb3Ig
c29mdHdhcmUgQ1JDIGdlbmVyYXRpb24KKyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBDUkMg
bG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKKyAqIGZv
bGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgorICoKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0g
Li4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQorICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVu
Z3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCisgKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIFRSVUUKKyAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4u
Li4uLi4gMzIgYml0cworICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4u
LiA4IHNsaWNlcworICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4
IDggOCA4IDggOCA4IDgKKyAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4gLlwKKyAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZf
dGFibGVzLmMKKyAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhf
bzMyWzI1Nl0gPQoreworCTB4MDAwMDAwMDAsIDB4RjI2QjgzMDMsIDB4RTEzQjcwRjcsIDB4MTM1
MEYzRjQsIDB4Qzc5QTk3MUYsIDB4MzVGMTE0MUMsIDB4MjZBMUU3RTgsIDB4RDRDQTY0RUIsCisJ
MHg4QUQ5NThDRiwgMHg3OEIyREJDQywgMHg2QkUyMjgzOCwgMHg5OTg5QUIzQiwgMHg0RDQzQ0ZE
MCwgMHhCRjI4NENEMywgMHhBQzc4QkYyNywgMHg1RTEzM0MyNCwKKwkweDEwNUVDNzZGLCAweEUy
MzU0NDZDLCAweEYxNjVCNzk4LCAweDAzMEUzNDlCLCAweEQ3QzQ1MDcwLCAweDI1QUZEMzczLCAw
eDM2RkYyMDg3LCAweEM0OTRBMzg0LAorCTB4OUE4NzlGQTAsIDB4NjhFQzFDQTMsIDB4N0JCQ0VG
NTcsIDB4ODlENzZDNTQsIDB4NUQxRDA4QkYsIDB4QUY3NjhCQkMsIDB4QkMyNjc4NDgsIDB4NEU0
REZCNEIsCisJMHgyMEJEOEVERSwgMHhEMkQ2MERERCwgMHhDMTg2RkUyOSwgMHgzM0VEN0QyQSwg
MHhFNzI3MTlDMSwgMHgxNTRDOUFDMiwgMHgwNjFDNjkzNiwgMHhGNDc3RUEzNSwKKwkweEFBNjRE
NjExLCAweDU4MEY1NTEyLCAweDRCNUZBNkU2LCAweEI5MzQyNUU1LCAweDZERkU0MTBFLCAweDlG
OTVDMjBELCAweDhDQzUzMUY5LCAweDdFQUVCMkZBLAorCTB4MzBFMzQ5QjEsIDB4QzI4OENBQjIs
IDB4RDFEODM5NDYsIDB4MjNCM0JBNDUsIDB4Rjc3OURFQUUsIDB4MDUxMjVEQUQsIDB4MTY0MkFF
NTksIDB4RTQyOTJENUEsCisJMHhCQTNBMTE3RSwgMHg0ODUxOTI3RCwgMHg1QjAxNjE4OSwgMHhB
OTZBRTI4QSwgMHg3REEwODY2MSwgMHg4RkNCMDU2MiwgMHg5QzlCRjY5NiwgMHg2RUYwNzU5NSwK
KwkweDQxN0IxREJDLCAweEIzMTA5RUJGLCAweEEwNDA2RDRCLCAweDUyMkJFRTQ4LCAweDg2RTE4
QUEzLCAweDc0OEEwOUEwLCAweDY3REFGQTU0LCAweDk1QjE3OTU3LAorCTB4Q0JBMjQ1NzMsIDB4
MzlDOUM2NzAsIDB4MkE5OTM1ODQsIDB4RDhGMkI2ODcsIDB4MEMzOEQyNkMsIDB4RkU1MzUxNkYs
IDB4RUQwM0EyOUIsIDB4MUY2ODIxOTgsCisJMHg1MTI1REFEMywgMHhBMzRFNTlEMCwgMHhCMDFF
QUEyNCwgMHg0Mjc1MjkyNywgMHg5NkJGNERDQywgMHg2NEQ0Q0VDRiwgMHg3Nzg0M0QzQiwgMHg4
NUVGQkUzOCwKKwkweERCRkM4MjFDLCAweDI5OTcwMTFGLCAweDNBQzdGMkVCLCAweEM4QUM3MUU4
LCAweDFDNjYxNTAzLCAweEVFMEQ5NjAwLCAweEZENUQ2NUY0LCAweDBGMzZFNkY3LAorCTB4NjFD
NjkzNjIsIDB4OTNBRDEwNjEsIDB4ODBGREUzOTUsIDB4NzI5NjYwOTYsIDB4QTY1QzA0N0QsIDB4
NTQzNzg3N0UsIDB4NDc2Nzc0OEEsIDB4QjUwQ0Y3ODksCisJMHhFQjFGQ0JBRCwgMHgxOTc0NDhB
RSwgMHgwQTI0QkI1QSwgMHhGODRGMzg1OSwgMHgyQzg1NUNCMiwgMHhERUVFREZCMSwgMHhDREJF
MkM0NSwgMHgzRkQ1QUY0NiwKKwkweDcxOTg1NDBELCAweDgzRjNENzBFLCAweDkwQTMyNEZBLCAw
eDYyQzhBN0Y5LCAweEI2MDJDMzEyLCAweDQ0Njk0MDExLCAweDU3MzlCM0U1LCAweEE1NTIzMEU2
LAorCTB4RkI0MTBDQzIsIDB4MDkyQThGQzEsIDB4MUE3QTdDMzUsIDB4RTgxMUZGMzYsIDB4M0NE
QjlCREQsIDB4Q0VCMDE4REUsIDB4RERFMEVCMkEsIDB4MkY4QjY4MjksCisJMHg4MkY2M0I3OCwg
MHg3MDlEQjg3QiwgMHg2M0NENEI4RiwgMHg5MUE2Qzg4QywgMHg0NTZDQUM2NywgMHhCNzA3MkY2
NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKKwkweDA4MkY2M0I3LCAweEZBNDRFMEI0LCAweEU5
MTQxMzQwLCAweDFCN0Y5MDQzLCAweENGQjVGNEE4LCAweDNEREU3N0FCLCAweDJFOEU4NDVGLCAw
eERDRTUwNzVDLAorCTB4OTJBOEZDMTcsIDB4NjBDMzdGMTQsIDB4NzM5MzhDRTAsIDB4ODFGODBG
RTMsIDB4NTUzMjZCMDgsIDB4QTc1OUU4MEIsIDB4QjQwOTFCRkYsIDB4NDY2Mjk4RkMsCisJMHgx
ODcxQTREOCwgMHhFQTFBMjdEQiwgMHhGOTRBRDQyRiwgMHgwQjIxNTcyQywgMHhERkVCMzNDNywg
MHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhDQ0JCQzAzMywKKwkweEEyNEJCNUE2LCAweDUwMjAz
NkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUyLCAweDY1RDEyMkI5LCAweDk3QkFBMUJBLCAweDg0
RUE1MjRFLCAweDc2ODFEMTRELAorCTB4Mjg5MkVENjksIDB4REFGOTZFNkEsIDB4QzlBOTlEOUUs
IDB4M0JDMjFFOUQsIDB4RUYwODdBNzYsIDB4MUQ2M0Y5NzUsIDB4MEUzMzBBODEsIDB4RkM1ODg5
ODIsCisJMHhCMjE1NzJDOSwgMHg0MDdFRjFDQSwgMHg1MzJFMDIzRSwgMHhBMTQ1ODEzRCwgMHg3
NThGRTVENiwgMHg4N0U0NjZENSwgMHg5NEI0OTUyMSwgMHg2NkRGMTYyMiwKKwkweDM4Q0MyQTA2
LCAweENBQTdBOTA1LCAweEQ5Rjc1QUYxLCAweDJCOUNEOUYyLCAweEZGNTZCRDE5LCAweDBEM0Qz
RTFBLCAweDFFNkRDREVFLCAweEVDMDY0RUVELAorCTB4QzM4RDI2QzQsIDB4MzFFNkE1QzcsIDB4
MjJCNjU2MzMsIDB4RDBEREQ1MzAsIDB4MDQxN0IxREIsIDB4RjY3QzMyRDgsIDB4RTUyQ0MxMkMs
IDB4MTc0NzQyMkYsCisJMHg0OTU0N0UwQiwgMHhCQjNGRkQwOCwgMHhBODZGMEVGQywgMHg1QTA0
OERGRiwgMHg4RUNFRTkxNCwgMHg3Q0E1NkExNywgMHg2RkY1OTlFMywgMHg5RDlFMUFFMCwKKwkw
eEQzRDNFMUFCLCAweDIxQjg2MkE4LCAweDMyRTg5MTVDLCAweEMwODMxMjVGLCAweDE0NDk3NkI0
LCAweEU2MjJGNUI3LCAweEY1NzIwNjQzLCAweDA3MTk4NTQwLAorCTB4NTkwQUI5NjQsIDB4QUI2
MTNBNjcsIDB4QjgzMUM5OTMsIDB4NEE1QTRBOTAsIDB4OUU5MDJFN0IsIDB4NkNGQkFENzgsIDB4
N0ZBQjVFOEMsIDB4OERDMEREOEYsCisJMHhFMzMwQTgxQSwgMHgxMTVCMkIxOSwgMHgwMjBCRDhF
RCwgMHhGMDYwNUJFRSwgMHgyNEFBM0YwNSwgMHhENkMxQkMwNiwgMHhDNTkxNEZGMiwgMHgzN0ZB
Q0NGMSwKKwkweDY5RTlGMEQ1LCAweDlCODI3M0Q2LCAweDg4RDI4MDIyLCAweDdBQjkwMzIxLCAw
eEFFNzM2N0NBLCAweDVDMThFNEM5LCAweDRGNDgxNzNELCAweEJEMjM5NDNFLAorCTB4RjM2RTZG
NzUsIDB4MDEwNUVDNzYsIDB4MTI1NTFGODIsIDB4RTAzRTlDODEsIDB4MzRGNEY4NkEsIDB4QzY5
RjdCNjksIDB4RDVDRjg4OUQsIDB4MjdBNDBCOUUsCisJMHg3OUI3MzdCQSwgMHg4QkRDQjRCOSwg
MHg5ODhDNDc0RCwgMHg2QUU3QzQ0RSwgMHhCRTJEQTBBNSwgMHg0QzQ2MjNBNiwgMHg1RjE2RDA1
MiwgMHhBRDdENTM1MQorfTsKKworLyoKKyAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBj
cmNfdGFibGVpbDhfbzMyCisgKi8KKworCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyBsb29r
dXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQorICogZm9sbG93
aW5nIG1vZGVsIHBhcmFtZXRlcnM6CisgKgorICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4u
Li4uLi4uLi4uLi4uLiAweDFFREM2RjQxCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGgg
PSAuLi4uLi4uLi4uIDMyIGJpdHMKKyAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4gVFJVRQorICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4u
LiAzMiBiaXRzCisgKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgg
c2xpY2VzCisgKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4
IDggOCA4IDggOAorICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAu
XAorICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJs
ZXMuYworICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNDBb
MjU2XSA9Cit7CisJMHgwMDAwMDAwMCwgMHgxM0EyOTg3NywgMHgyNzQ1MzBFRSwgMHgzNEU3QTg5
OSwgMHg0RThBNjFEQywgMHg1RDI4RjlBQiwgMHg2OUNGNTEzMiwgMHg3QTZEQzk0NSwKKwkweDlE
MTRDM0I4LCAweDhFQjY1QkNGLCAweEJBNTFGMzU2LCAweEE5RjM2QjIxLCAweEQzOUVBMjY0LCAw
eEMwM0MzQTEzLCAweEY0REI5MjhBLCAweEU3NzkwQUZELAorCTB4M0ZDNUYxODEsIDB4MkM2NzY5
RjYsIDB4MTg4MEMxNkYsIDB4MEIyMjU5MTgsIDB4NzE0RjkwNUQsIDB4NjJFRDA4MkEsIDB4NTYw
QUEwQjMsIDB4NDVBODM4QzQsCisJMHhBMkQxMzIzOSwgMHhCMTczQUE0RSwgMHg4NTk0MDJENywg
MHg5NjM2OUFBMCwgMHhFQzVCNTNFNSwgMHhGRkY5Q0I5MiwgMHhDQjFFNjMwQiwgMHhEOEJDRkI3
QywKKwkweDdGOEJFMzAyLCAweDZDMjk3Qjc1LCAweDU4Q0VEM0VDLCAweDRCNkM0QjlCLCAweDMx
MDE4MkRFLCAweDIyQTMxQUE5LCAweDE2NDRCMjMwLCAweDA1RTYyQTQ3LAorCTB4RTI5RjIwQkEs
IDB4RjEzREI4Q0QsIDB4QzVEQTEwNTQsIDB4RDY3ODg4MjMsIDB4QUMxNTQxNjYsIDB4QkZCN0Q5
MTEsIDB4OEI1MDcxODgsIDB4OThGMkU5RkYsCisJMHg0MDRFMTI4MywgMHg1M0VDOEFGNCwgMHg2
NzBCMjI2RCwgMHg3NEE5QkExQSwgMHgwRUM0NzM1RiwgMHgxRDY2RUIyOCwgMHgyOTgxNDNCMSwg
MHgzQTIzREJDNiwKKwkweERENUFEMTNCLCAweENFRjg0OTRDLCAweEZBMUZFMUQ1LCAweEU5QkQ3
OUEyLCAweDkzRDBCMEU3LCAweDgwNzIyODkwLCAweEI0OTU4MDA5LCAweEE3MzcxODdFLAorCTB4
RkYxN0M2MDQsIDB4RUNCNTVFNzMsIDB4RDg1MkY2RUEsIDB4Q0JGMDZFOUQsIDB4QjE5REE3RDgs
IDB4QTIzRjNGQUYsIDB4OTZEODk3MzYsIDB4ODU3QTBGNDEsCisJMHg2MjAzMDVCQywgMHg3MUEx
OURDQiwgMHg0NTQ2MzU1MiwgMHg1NkU0QUQyNSwgMHgyQzg5NjQ2MCwgMHgzRjJCRkMxNywgMHgw
QkNDNTQ4RSwgMHgxODZFQ0NGOSwKKwkweEMwRDIzNzg1LCAweEQzNzBBRkYyLCAweEU3OTcwNzZC
LCAweEY0MzU5RjFDLCAweDhFNTg1NjU5LCAweDlERkFDRTJFLCAweEE5MUQ2NkI3LCAweEJBQkZG
RUMwLAorCTB4NURDNkY0M0QsIDB4NEU2NDZDNEEsIDB4N0E4M0M0RDMsIDB4NjkyMTVDQTQsIDB4
MTM0Qzk1RTEsIDB4MDBFRTBEOTYsIDB4MzQwOUE1MEYsIDB4MjdBQjNENzgsCisJMHg4MDlDMjUw
NiwgMHg5MzNFQkQ3MSwgMHhBN0Q5MTVFOCwgMHhCNDdCOEQ5RiwgMHhDRTE2NDREQSwgMHhEREI0
RENBRCwgMHhFOTUzNzQzNCwgMHhGQUYxRUM0MywKKwkweDFEODhFNkJFLCAweDBFMkE3RUM5LCAw
eDNBQ0RENjUwLCAweDI5NkY0RTI3LCAweDUzMDI4NzYyLCAweDQwQTAxRjE1LCAweDc0NDdCNzhD
LCAweDY3RTUyRkZCLAorCTB4QkY1OUQ0ODcsIDB4QUNGQjRDRjAsIDB4OTgxQ0U0NjksIDB4OEJC
RTdDMUUsIDB4RjFEM0I1NUIsIDB4RTI3MTJEMkMsIDB4RDY5Njg1QjUsIDB4QzUzNDFEQzIsCisJ
MHgyMjREMTczRiwgMHgzMUVGOEY0OCwgMHgwNTA4MjdEMSwgMHgxNkFBQkZBNiwgMHg2Q0M3NzZF
MywgMHg3RjY1RUU5NCwgMHg0QjgyNDYwRCwgMHg1ODIwREU3QSwKKwkweEZCQzNGQUY5LCAweEU4
NjE2MjhFLCAweERDODZDQTE3LCAweENGMjQ1MjYwLCAweEI1NDk5QjI1LCAweEE2RUIwMzUyLCAw
eDkyMENBQkNCLCAweDgxQUUzM0JDLAorCTB4NjZENzM5NDEsIDB4NzU3NUExMzYsIDB4NDE5MjA5
QUYsIDB4NTIzMDkxRDgsIDB4Mjg1RDU4OUQsIDB4M0JGRkMwRUEsIDB4MEYxODY4NzMsIDB4MUNC
QUYwMDQsCisJMHhDNDA2MEI3OCwgMHhEN0E0OTMwRiwgMHhFMzQzM0I5NiwgMHhGMEUxQTNFMSwg
MHg4QThDNkFBNCwgMHg5OTJFRjJEMywgMHhBREM5NUE0QSwgMHhCRTZCQzIzRCwKKwkweDU5MTJD
OEMwLCAweDRBQjA1MEI3LCAweDdFNTdGODJFLCAweDZERjU2MDU5LCAweDE3OThBOTFDLCAweDA0
M0EzMTZCLCAweDMwREQ5OUYyLCAweDIzN0YwMTg1LAorCTB4ODQ0ODE5RkIsIDB4OTdFQTgxOEMs
IDB4QTMwRDI5MTUsIDB4QjBBRkIxNjIsIDB4Q0FDMjc4MjcsIDB4RDk2MEUwNTAsIDB4RUQ4NzQ4
QzksIDB4RkUyNUQwQkUsCisJMHgxOTVDREE0MywgMHgwQUZFNDIzNCwgMHgzRTE5RUFBRCwgMHgy
REJCNzJEQSwgMHg1N0Q2QkI5RiwgMHg0NDc0MjNFOCwgMHg3MDkzOEI3MSwgMHg2MzMxMTMwNiwK
KwkweEJCOERFODdBLCAweEE4MkY3MDBELCAweDlDQzhEODk0LCAweDhGNkE0MEUzLCAweEY1MDc4
OUE2LCAweEU2QTUxMUQxLCAweEQyNDJCOTQ4LCAweEMxRTAyMTNGLAorCTB4MjY5OTJCQzIsIDB4
MzUzQkIzQjUsIDB4MDFEQzFCMkMsIDB4MTI3RTgzNUIsIDB4NjgxMzRBMUUsIDB4N0JCMUQyNjks
IDB4NEY1NjdBRjAsIDB4NUNGNEUyODcsCisJMHgwNEQ0M0NGRCwgMHgxNzc2QTQ4QSwgMHgyMzkx
MEMxMywgMHgzMDMzOTQ2NCwgMHg0QTVFNUQyMSwgMHg1OUZDQzU1NiwgMHg2RDFCNkRDRiwgMHg3
RUI5RjVCOCwKKwkweDk5QzBGRjQ1LCAweDhBNjI2NzMyLCAweEJFODVDRkFCLCAweEFEMjc1N0RD
LCAweEQ3NEE5RTk5LCAweEM0RTgwNkVFLCAweEYwMEZBRTc3LCAweEUzQUQzNjAwLAorCTB4M0Ix
MUNEN0MsIDB4MjhCMzU1MEIsIDB4MUM1NEZEOTIsIDB4MEZGNjY1RTUsIDB4NzU5QkFDQTAsIDB4
NjYzOTM0RDcsIDB4NTJERTlDNEUsIDB4NDE3QzA0MzksCisJMHhBNjA1MEVDNCwgMHhCNUE3OTZC
MywgMHg4MTQwM0UyQSwgMHg5MkUyQTY1RCwgMHhFODhGNkYxOCwgMHhGQjJERjc2RiwgMHhDRkNB
NUZGNiwgMHhEQzY4Qzc4MSwKKwkweDdCNUZERkZGLCAweDY4RkQ0Nzg4LCAweDVDMUFFRjExLCAw
eDRGQjg3NzY2LCAweDM1RDVCRTIzLCAweDI2NzcyNjU0LCAweDEyOTA4RUNELCAweDAxMzIxNkJB
LAorCTB4RTY0QjFDNDcsIDB4RjVFOTg0MzAsIDB4QzEwRTJDQTksIDB4RDJBQ0I0REUsIDB4QThD
MTdEOUIsIDB4QkI2M0U1RUMsIDB4OEY4NDRENzUsIDB4OUMyNkQ1MDIsCisJMHg0NDlBMkU3RSwg
MHg1NzM4QjYwOSwgMHg2M0RGMUU5MCwgMHg3MDdEODZFNywgMHgwQTEwNEZBMiwgMHgxOUIyRDdE
NSwgMHgyRDU1N0Y0QywgMHgzRUY3RTczQiwKKwkweEQ5OEVFREM2LCAweENBMkM3NUIxLCAweEZF
Q0JERDI4LCAweEVENjk0NTVGLCAweDk3MDQ4QzFBLCAweDg0QTYxNDZELCAweEIwNDFCQ0Y0LCAw
eEEzRTMyNDgzCit9OworCisvKgorICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190
YWJsZWlsOF9vNDAKKyAqLworCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0
YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCisgKiBmb2xsb3dpbmcg
bW9kZWwgcGFyYW1ldGVyczoKKyAqCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4u
Li4uLi4uLi4uIDB4MUVEQzZGNDEKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4u
Li4uLi4uLi4gMzIgYml0cworICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiBUUlVFCisgKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMy
IGJpdHMKKyAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGlj
ZXMKKyAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4
IDggOCA4CisgKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCisg
KiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5j
CisgKi8KKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X280OFsyNTZd
ID0KK3sKKwkweDAwMDAwMDAwLCAweEE1NDE5MjdFLCAweDRGNkY1MjBELCAweEVBMkVDMDczLCAw
eDlFREVBNDFBLCAweDNCOUYzNjY0LCAweEQxQjFGNjE3LCAweDc0RjA2NDY5LAorCTB4Mzg1MTNF
QzUsIDB4OUQxMEFDQkIsIDB4NzczRTZDQzgsIDB4RDI3RkZFQjYsIDB4QTY4RjlBREYsIDB4MDND
RTA4QTEsIDB4RTlFMEM4RDIsIDB4NENBMTVBQUMsCisJMHg3MEEyN0Q4QSwgMHhENUUzRUZGNCwg
MHgzRkNEMkY4NywgMHg5QThDQkRGOSwgMHhFRTdDRDk5MCwgMHg0QjNENEJFRSwgMHhBMTEzOEI5
RCwgMHgwNDUyMTlFMywKKwkweDQ4RjM0MzRGLCAweEVEQjJEMTMxLCAweDA3OUMxMTQyLCAweEEy
REQ4MzNDLCAweEQ2MkRFNzU1LCAweDczNkM3NTJCLCAweDk5NDJCNTU4LCAweDNDMDMyNzI2LAor
CTB4RTE0NEZCMTQsIDB4NDQwNTY5NkEsIDB4QUUyQkE5MTksIDB4MEI2QTNCNjcsIDB4N0Y5QTVG
MEUsIDB4REFEQkNENzAsIDB4MzBGNTBEMDMsIDB4OTVCNDlGN0QsCisJMHhEOTE1QzVEMSwgMHg3
QzU0NTdBRiwgMHg5NjdBOTdEQywgMHgzMzNCMDVBMiwgMHg0N0NCNjFDQiwgMHhFMjhBRjNCNSwg
MHgwOEE0MzNDNiwgMHhBREU1QTFCOCwKKwkweDkxRTY4NjlFLCAweDM0QTcxNEUwLCAweERFODlE
NDkzLCAweDdCQzg0NkVELCAweDBGMzgyMjg0LCAweEFBNzlCMEZBLCAweDQwNTc3MDg5LCAweEU1
MTZFMkY3LAorCTB4QTlCN0I4NUIsIDB4MENGNjJBMjUsIDB4RTZEOEVBNTYsIDB4NDM5OTc4Mjgs
IDB4Mzc2OTFDNDEsIDB4OTIyODhFM0YsIDB4NzgwNjRFNEMsIDB4REQ0N0RDMzIsCisJMHhDNzY1
ODBEOSwgMHg2MjI0MTJBNywgMHg4ODBBRDJENCwgMHgyRDRCNDBBQSwgMHg1OUJCMjRDMywgMHhG
Q0ZBQjZCRCwgMHgxNkQ0NzZDRSwgMHhCMzk1RTRCMCwKKwkweEZGMzRCRTFDLCAweDVBNzUyQzYy
LCAweEIwNUJFQzExLCAweDE1MUE3RTZGLCAweDYxRUExQTA2LCAweEM0QUI4ODc4LCAweDJFODU0
ODBCLCAweDhCQzREQTc1LAorCTB4QjdDN0ZENTMsIDB4MTI4NjZGMkQsIDB4RjhBOEFGNUUsIDB4
NURFOTNEMjAsIDB4MjkxOTU5NDksIDB4OEM1OENCMzcsIDB4NjY3NjBCNDQsIDB4QzMzNzk5M0Es
CisJMHg4Rjk2QzM5NiwgMHgyQUQ3NTFFOCwgMHhDMEY5OTE5QiwgMHg2NUI4MDNFNSwgMHgxMTQ4
Njc4QywgMHhCNDA5RjVGMiwgMHg1RTI3MzU4MSwgMHhGQjY2QTdGRiwKKwkweDI2MjE3QkNELCAw
eDgzNjBFOUIzLCAweDY5NEUyOUMwLCAweENDMEZCQkJFLCAweEI4RkZERkQ3LCAweDFEQkU0REE5
LCAweEY3OTA4RERBLCAweDUyRDExRkE0LAorCTB4MUU3MDQ1MDgsIDB4QkIzMUQ3NzYsIDB4NTEx
RjE3MDUsIDB4RjQ1RTg1N0IsIDB4ODBBRUUxMTIsIDB4MjVFRjczNkMsIDB4Q0ZDMUIzMUYsIDB4
NkE4MDIxNjEsCisJMHg1NjgzMDY0NywgMHhGM0MyOTQzOSwgMHgxOUVDNTQ0QSwgMHhCQ0FEQzYz
NCwgMHhDODVEQTI1RCwgMHg2RDFDMzAyMywgMHg4NzMyRjA1MCwgMHgyMjczNjIyRSwKKwkweDZF
RDIzODgyLCAweENCOTNBQUZDLCAweDIxQkQ2QThGLCAweDg0RkNGOEYxLCAweEYwMEM5Qzk4LCAw
eDU1NEQwRUU2LCAweEJGNjNDRTk1LCAweDFBMjI1Q0VCLAorCTB4OEIyNzc3NDMsIDB4MkU2NkU1
M0QsIDB4QzQ0ODI1NEUsIDB4NjEwOUI3MzAsIDB4MTVGOUQzNTksIDB4QjBCODQxMjcsIDB4NUE5
NjgxNTQsIDB4RkZENzEzMkEsCisJMHhCMzc2NDk4NiwgMHgxNjM3REJGOCwgMHhGQzE5MUI4Qiwg
MHg1OTU4ODlGNSwgMHgyREE4RUQ5QywgMHg4OEU5N0ZFMiwgMHg2MkM3QkY5MSwgMHhDNzg2MkRF
RiwKKwkweEZCODUwQUM5LCAweDVFQzQ5OEI3LCAweEI0RUE1OEM0LCAweDExQUJDQUJBLCAweDY1
NUJBRUQzLCAweEMwMUEzQ0FELCAweDJBMzRGQ0RFLCAweDhGNzU2RUEwLAorCTB4QzNENDM0MEMs
IDB4NjY5NUE2NzIsIDB4OENCQjY2MDEsIDB4MjlGQUY0N0YsIDB4NUQwQTkwMTYsIDB4Rjg0QjAy
NjgsIDB4MTI2NUMyMUIsIDB4QjcyNDUwNjUsCisJMHg2QTYzOEM1NywgMHhDRjIyMUUyOSwgMHgy
NTBDREU1QSwgMHg4MDRENEMyNCwgMHhGNEJEMjg0RCwgMHg1MUZDQkEzMywgMHhCQkQyN0E0MCwg
MHgxRTkzRTgzRSwKKwkweDUyMzJCMjkyLCAweEY3NzMyMEVDLCAweDFENURFMDlGLCAweEI4MUM3
MkUxLCAweENDRUMxNjg4LCAweDY5QUQ4NEY2LCAweDgzODM0NDg1LCAweDI2QzJENkZCLAorCTB4
MUFDMUYxREQsIDB4QkY4MDYzQTMsIDB4NTVBRUEzRDAsIDB4RjBFRjMxQUUsIDB4ODQxRjU1Qzcs
IDB4MjE1RUM3QjksIDB4Q0I3MDA3Q0EsIDB4NkUzMTk1QjQsCisJMHgyMjkwQ0YxOCwgMHg4N0Qx
NUQ2NiwgMHg2REZGOUQxNSwgMHhDOEJFMEY2QiwgMHhCQzRFNkIwMiwgMHgxOTBGRjk3QywgMHhG
MzIxMzkwRiwgMHg1NjYwQUI3MSwKKwkweDRDNDJGNzlBLCAweEU5MDM2NUU0LCAweDAzMkRBNTk3
LCAweEE2NkMzN0U5LCAweEQyOUM1MzgwLCAweDc3RERDMUZFLCAweDlERjMwMThELCAweDM4QjI5
M0YzLAorCTB4NzQxM0M5NUYsIDB4RDE1MjVCMjEsIDB4M0I3QzlCNTIsIDB4OUUzRDA5MkMsIDB4
RUFDRDZENDUsIDB4NEY4Q0ZGM0IsIDB4QTVBMjNGNDgsIDB4MDBFM0FEMzYsCisJMHgzQ0UwOEEx
MCwgMHg5OUExMTg2RSwgMHg3MzhGRDgxRCwgMHhENkNFNEE2MywgMHhBMjNFMkUwQSwgMHgwNzdG
QkM3NCwgMHhFRDUxN0MwNywgMHg0ODEwRUU3OSwKKwkweDA0QjFCNEQ1LCAweEExRjAyNkFCLCAw
eDRCREVFNkQ4LCAweEVFOUY3NEE2LCAweDlBNkYxMENGLCAweDNGMkU4MkIxLCAweEQ1MDA0MkMy
LCAweDcwNDFEMEJDLAorCTB4QUQwNjBDOEUsIDB4MDg0NzlFRjAsIDB4RTI2OTVFODMsIDB4NDcy
OENDRkQsIDB4MzNEOEE4OTQsIDB4OTY5OTNBRUEsIDB4N0NCN0ZBOTksIDB4RDlGNjY4RTcsCisJ
MHg5NTU3MzI0QiwgMHgzMDE2QTAzNSwgMHhEQTM4NjA0NiwgMHg3Rjc5RjIzOCwgMHgwQjg5OTY1
MSwgMHhBRUM4MDQyRiwgMHg0NEU2QzQ1QywgMHhFMUE3NTYyMiwKKwkweEREQTQ3MTA0LCAweDc4
RTVFMzdBLCAweDkyQ0IyMzA5LCAweDM3OEFCMTc3LCAweDQzN0FENTFFLCAweEU2M0I0NzYwLCAw
eDBDMTU4NzEzLCAweEE5NTQxNTZELAorCTB4RTVGNTRGQzEsIDB4NDBCNEREQkYsIDB4QUE5QTFE
Q0MsIDB4MEZEQjhGQjIsIDB4N0IyQkVCREIsIDB4REU2QTc5QTUsIDB4MzQ0NEI5RDYsIDB4OTEw
NTJCQTgKK307CisKKy8qCisgKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxl
aWw4X280OAorICovCisKKworCisvKgorICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxl
IHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKKyAqIGZvbGxvd2luZyBtb2Rl
bCBwYXJhbWV0ZXJzOgorICoKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4u
Li4uLi4gMHgxRURDNkY0MQorICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4u
Li4uLiAzMiBiaXRzCisgKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IFRSVUUKKyAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0
cworICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwor
ICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4
IDgKKyAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKKyAqIEZp
bGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKKyAq
LworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzU2WzI1Nl0gPQor
eworCTB4MDAwMDAwMDAsIDB4REQ0NUFBQjgsIDB4QkY2NzIzODEsIDB4NjIyMjg5MzksIDB4N0Iy
MjMxRjMsIDB4QTY2NzlCNEIsIDB4QzQ0NTEyNzIsIDB4MTkwMEI4Q0EsCisJMHhGNjQ0NjNFNiwg
MHgyQjAxQzk1RSwgMHg0OTIzNDA2NywgMHg5NDY2RUFERiwgMHg4RDY2NTIxNSwgMHg1MDIzRjhB
RCwgMHgzMjAxNzE5NCwgMHhFRjQ0REIyQywKKwkweEU5NjRCMTNELCAweDM0MjExQjg1LCAweDU2
MDM5MkJDLCAweDhCNDYzODA0LCAweDkyNDY4MENFLCAweDRGMDMyQTc2LCAweDJEMjFBMzRGLCAw
eEYwNjQwOUY3LAorCTB4MUYyMEQyREIsIDB4QzI2NTc4NjMsIDB4QTA0N0YxNUEsIDB4N0QwMjVC
RTIsIDB4NjQwMkUzMjgsIDB4Qjk0NzQ5OTAsIDB4REI2NUMwQTksIDB4MDYyMDZBMTEsCisJMHhE
NzI1MTQ4QiwgMHgwQTYwQkUzMywgMHg2ODQyMzcwQSwgMHhCNTA3OURCMiwgMHhBQzA3MjU3OCwg
MHg3MTQyOEZDMCwgMHgxMzYwMDZGOSwgMHhDRTI1QUM0MSwKKwkweDIxNjE3NzZELCAweEZDMjRE
REQ1LCAweDlFMDY1NEVDLCAweDQzNDNGRTU0LCAweDVBNDM0NjlFLCAweDg3MDZFQzI2LCAweEU1
MjQ2NTFGLCAweDM4NjFDRkE3LAorCTB4M0U0MUE1QjYsIDB4RTMwNDBGMEUsIDB4ODEyNjg2Mzcs
IDB4NUM2MzJDOEYsIDB4NDU2Mzk0NDUsIDB4OTgyNjNFRkQsIDB4RkEwNEI3QzQsIDB4Mjc0MTFE
N0MsCisJMHhDODA1QzY1MCwgMHgxNTQwNkNFOCwgMHg3NzYyRTVEMSwgMHhBQTI3NEY2OSwgMHhC
MzI3RjdBMywgMHg2RTYyNUQxQiwgMHgwQzQwRDQyMiwgMHhEMTA1N0U5QSwKKwkweEFCQTY1RkU3
LCAweDc2RTNGNTVGLCAweDE0QzE3QzY2LCAweEM5ODRENkRFLCAweEQwODQ2RTE0LCAweDBEQzFD
NEFDLCAweDZGRTM0RDk1LCAweEIyQTZFNzJELAorCTB4NURFMjNDMDEsIDB4ODBBNzk2QjksIDB4
RTI4NTFGODAsIDB4M0ZDMEI1MzgsIDB4MjZDMDBERjIsIDB4RkI4NUE3NEEsIDB4OTlBNzJFNzMs
IDB4NDRFMjg0Q0IsCisJMHg0MkMyRUVEQSwgMHg5Rjg3NDQ2MiwgMHhGREE1Q0Q1QiwgMHgyMEUw
NjdFMywgMHgzOUUwREYyOSwgMHhFNEE1NzU5MSwgMHg4Njg3RkNBOCwgMHg1QkMyNTYxMCwKKwkw
eEI0ODY4RDNDLCAweDY5QzMyNzg0LCAweDBCRTFBRUJELCAweEQ2QTQwNDA1LCAweENGQTRCQ0NG
LCAweDEyRTExNjc3LCAweDcwQzM5RjRFLCAweEFEODYzNUY2LAorCTB4N0M4MzRCNkMsIDB4QTFD
NkUxRDQsIDB4QzNFNDY4RUQsIDB4MUVBMUMyNTUsIDB4MDdBMTdBOUYsIDB4REFFNEQwMjcsIDB4
QjhDNjU5MUUsIDB4NjU4M0YzQTYsCisJMHg4QUM3Mjg4QSwgMHg1NzgyODIzMiwgMHgzNUEwMEIw
QiwgMHhFOEU1QTFCMywgMHhGMUU1MTk3OSwgMHgyQ0EwQjNDMSwgMHg0RTgyM0FGOCwgMHg5M0M3
OTA0MCwKKwkweDk1RTdGQTUxLCAweDQ4QTI1MEU5LCAweDJBODBEOUQwLCAweEY3QzU3MzY4LCAw
eEVFQzVDQkEyLCAweDMzODA2MTFBLCAweDUxQTJFODIzLCAweDhDRTc0MjlCLAorCTB4NjNBMzk5
QjcsIDB4QkVFNjMzMEYsIDB4RENDNEJBMzYsIDB4MDE4MTEwOEUsIDB4MTg4MUE4NDQsIDB4QzVD
NDAyRkMsIDB4QTdFNjhCQzUsIDB4N0FBMzIxN0QsCisJMHg1MkEwQzkzRiwgMHg4RkU1NjM4Nywg
MHhFREM3RUFCRSwgMHgzMDgyNDAwNiwgMHgyOTgyRjhDQywgMHhGNEM3NTI3NCwgMHg5NkU1REI0
RCwgMHg0QkEwNzFGNSwKKwkweEE0RTRBQUQ5LCAweDc5QTEwMDYxLCAweDFCODM4OTU4LCAweEM2
QzYyM0UwLCAweERGQzY5QjJBLCAweDAyODMzMTkyLCAweDYwQTFCOEFCLCAweEJERTQxMjEzLAor
CTB4QkJDNDc4MDIsIDB4NjY4MUQyQkEsIDB4MDRBMzVCODMsIDB4RDlFNkYxM0IsIDB4QzBFNjQ5
RjEsIDB4MURBM0UzNDksIDB4N0Y4MTZBNzAsIDB4QTJDNEMwQzgsCisJMHg0RDgwMUJFNCwgMHg5
MEM1QjE1QywgMHhGMkU3Mzg2NSwgMHgyRkEyOTJERCwgMHgzNkEyMkExNywgMHhFQkU3ODBBRiwg
MHg4OUM1MDk5NiwgMHg1NDgwQTMyRSwKKwkweDg1ODVEREI0LCAweDU4QzA3NzBDLCAweDNBRTJG
RTM1LCAweEU3QTc1NDhELCAweEZFQTdFQzQ3LCAweDIzRTI0NkZGLCAweDQxQzBDRkM2LCAweDlD
ODU2NTdFLAorCTB4NzNDMUJFNTIsIDB4QUU4NDE0RUEsIDB4Q0NBNjlERDMsIDB4MTFFMzM3NkIs
IDB4MDhFMzhGQTEsIDB4RDVBNjI1MTksIDB4Qjc4NEFDMjAsIDB4NkFDMTA2OTgsCisJMHg2Q0Ux
NkM4OSwgMHhCMUE0QzYzMSwgMHhEMzg2NEYwOCwgMHgwRUMzRTVCMCwgMHgxN0MzNUQ3QSwgMHhD
QTg2RjdDMiwgMHhBOEE0N0VGQiwgMHg3NUUxRDQ0MywKKwkweDlBQTUwRjZGLCAweDQ3RTBBNUQ3
LCAweDI1QzIyQ0VFLCAweEY4ODc4NjU2LCAweEUxODczRTlDLCAweDNDQzI5NDI0LCAweDVFRTAx
RDFELCAweDgzQTVCN0E1LAorCTB4RjkwNjk2RDgsIDB4MjQ0MzNDNjAsIDB4NDY2MUI1NTksIDB4
OUIyNDFGRTEsIDB4ODIyNEE3MkIsIDB4NUY2MTBEOTMsIDB4M0Q0Mzg0QUEsIDB4RTAwNjJFMTIs
CisJMHgwRjQyRjUzRSwgMHhEMjA3NUY4NiwgMHhCMDI1RDZCRiwgMHg2RDYwN0MwNywgMHg3NDYw
QzRDRCwgMHhBOTI1NkU3NSwgMHhDQjA3RTc0QywgMHgxNjQyNERGNCwKKwkweDEwNjIyN0U1LCAw
eENEMjc4RDVELCAweEFGMDUwNDY0LCAweDcyNDBBRURDLCAweDZCNDAxNjE2LCAweEI2MDVCQ0FF
LCAweEQ0MjczNTk3LCAweDA5NjI5RjJGLAorCTB4RTYyNjQ0MDMsIDB4M0I2M0VFQkIsIDB4NTk0
MTY3ODIsIDB4ODQwNENEM0EsIDB4OUQwNDc1RjAsIDB4NDA0MURGNDgsIDB4MjI2MzU2NzEsIDB4
RkYyNkZDQzksCisJMHgyRTIzODI1MywgMHhGMzY2MjhFQiwgMHg5MTQ0QTFEMiwgMHg0QzAxMEI2
QSwgMHg1NTAxQjNBMCwgMHg4ODQ0MTkxOCwgMHhFQTY2OTAyMSwgMHgzNzIzM0E5OSwKKwkweEQ4
NjdFMUI1LCAweDA1MjI0QjBELCAweDY3MDBDMjM0LCAweEJBNDU2ODhDLCAweEEzNDVEMDQ2LCAw
eDdFMDA3QUZFLCAweDFDMjJGM0M3LCAweEMxNjc1OTdGLAorCTB4Qzc0NzMzNkUsIDB4MUEwMjk5
RDYsIDB4NzgyMDEwRUYsIDB4QTU2NUJBNTcsIDB4QkM2NTAyOUQsIDB4NjEyMEE4MjUsIDB4MDMw
MjIxMUMsIDB4REU0NzhCQTQsCisJMHgzMTAzNTA4OCwgMHhFQzQ2RkEzMCwgMHg4RTY0NzMwOSwg
MHg1MzIxRDlCMSwgMHg0QTIxNjE3QiwgMHg5NzY0Q0JDMywgMHhGNTQ2NDJGQSwgMHgyODAzRTg0
MgorfTsKKworLyoKKyAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhf
bzU2CisgKi8KKworCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2Fz
IGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQorICogZm9sbG93aW5nIG1vZGVsIHBh
cmFtZXRlcnM6CisgKgorICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4u
LiAweDFFREM2RjQxCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4u
IDMyIGJpdHMKKyAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJV
RQorICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCisg
KiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCisgKiBT
bGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAor
ICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAorICogRmlsZSBO
YW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYworICovCisK
K3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNjRbMjU2XSA9Cit7CisJ
MHgwMDAwMDAwMCwgMHgzODExNkZBQywgMHg3MDIyREY1OCwgMHg0ODMzQjBGNCwgMHhFMDQ1QkVC
MCwgMHhEODU0RDExQywgMHg5MDY3NjFFOCwgMHhBODc2MEU0NCwKKwkweEM1NjcwQjkxLCAweEZE
NzY2NDNELCAweEI1NDVENEM5LCAweDhENTRCQjY1LCAweDI1MjJCNTIxLCAweDFEMzNEQThELCAw
eDU1MDA2QTc5LCAweDZEMTEwNUQ1LAorCTB4OEYyMjYxRDMsIDB4QjczMzBFN0YsIDB4RkYwMEJF
OEIsIDB4QzcxMUQxMjcsIDB4NkY2N0RGNjMsIDB4NTc3NkIwQ0YsIDB4MUY0NTAwM0IsIDB4Mjc1
NDZGOTcsCisJMHg0QTQ1NkE0MiwgMHg3MjU0MDVFRSwgMHgzQTY3QjUxQSwgMHgwMjc2REFCNiwg
MHhBQTAwRDRGMiwgMHg5MjExQkI1RSwgMHhEQTIyMEJBQSwgMHhFMjMzNjQwNiwKKwkweDFCQThC
NTU3LCAweDIzQjlEQUZCLCAweDZCOEE2QTBGLCAweDUzOUIwNUEzLCAweEZCRUQwQkU3LCAweEMz
RkM2NDRCLCAweDhCQ0ZENEJGLCAweEIzREVCQjEzLAorCTB4REVDRkJFQzYsIDB4RTZERUQxNkEs
IDB4QUVFRDYxOUUsIDB4OTZGQzBFMzIsIDB4M0U4QTAwNzYsIDB4MDY5QjZGREEsIDB4NEVBOERG
MkUsIDB4NzZCOUIwODIsCisJMHg5NDhBRDQ4NCwgMHhBQzlCQkIyOCwgMHhFNEE4MEJEQywgMHhE
Q0I5NjQ3MCwgMHg3NENGNkEzNCwgMHg0Q0RFMDU5OCwgMHgwNEVEQjU2QywgMHgzQ0ZDREFDMCwK
KwkweDUxRURERjE1LCAweDY5RkNCMEI5LCAweDIxQ0YwMDRELCAweDE5REU2RkUxLCAweEIxQTg2
MUE1LCAweDg5QjkwRTA5LCAweEMxOEFCRUZELCAweEY5OUJEMTUxLAorCTB4Mzc1MTZBQUUsIDB4
MEY0MDA1MDIsIDB4NDc3M0I1RjYsIDB4N0Y2MkRBNUEsIDB4RDcxNEQ0MUUsIDB4RUYwNUJCQjIs
IDB4QTczNjBCNDYsIDB4OUYyNzY0RUEsCisJMHhGMjM2NjEzRiwgMHhDQTI3MEU5MywgMHg4MjE0
QkU2NywgMHhCQTA1RDFDQiwgMHgxMjczREY4RiwgMHgyQTYyQjAyMywgMHg2MjUxMDBENywgMHg1
QTQwNkY3QiwKKwkweEI4NzMwQjdELCAweDgwNjI2NEQxLCAweEM4NTFENDI1LCAweEYwNDBCQjg5
LCAweDU4MzZCNUNELCAweDYwMjdEQTYxLCAweDI4MTQ2QTk1LCAweDEwMDUwNTM5LAorCTB4N0Qx
NDAwRUMsIDB4NDUwNTZGNDAsIDB4MEQzNkRGQjQsIDB4MzUyN0IwMTgsIDB4OUQ1MUJFNUMsIDB4
QTU0MEQxRjAsIDB4RUQ3MzYxMDQsIDB4RDU2MjBFQTgsCisJMHgyQ0Y5REZGOSwgMHgxNEU4QjA1
NSwgMHg1Q0RCMDBBMSwgMHg2NENBNkYwRCwgMHhDQ0JDNjE0OSwgMHhGNEFEMEVFNSwgMHhCQzlF
QkUxMSwgMHg4NDhGRDFCRCwKKwkweEU5OUVENDY4LCAweEQxOEZCQkM0LCAweDk5QkMwQjMwLCAw
eEExQUQ2NDlDLCAweDA5REI2QUQ4LCAweDMxQ0EwNTc0LCAweDc5RjlCNTgwLCAweDQxRThEQTJD
LAorCTB4QTNEQkJFMkEsIDB4OUJDQUQxODYsIDB4RDNGOTYxNzIsIDB4RUJFODBFREUsIDB4NDM5
RTAwOUEsIDB4N0I4RjZGMzYsIDB4MzNCQ0RGQzIsIDB4MEJBREIwNkUsCisJMHg2NkJDQjVCQiwg
MHg1RUFEREExNywgMHgxNjlFNkFFMywgMHgyRThGMDU0RiwgMHg4NkY5MEIwQiwgMHhCRUU4NjRB
NywgMHhGNkRCRDQ1MywgMHhDRUNBQkJGRiwKKwkweDZFQTJENTVDLCAweDU2QjNCQUYwLCAweDFF
ODAwQTA0LCAweDI2OTE2NUE4LCAweDhFRTc2QkVDLCAweEI2RjYwNDQwLCAweEZFQzVCNEI0LCAw
eEM2RDREQjE4LAorCTB4QUJDNURFQ0QsIDB4OTNENEIxNjEsIDB4REJFNzAxOTUsIDB4RTNGNjZF
MzksIDB4NEI4MDYwN0QsIDB4NzM5MTBGRDEsIDB4M0JBMkJGMjUsIDB4MDNCM0QwODksCisJMHhF
MTgwQjQ4RiwgMHhEOTkxREIyMywgMHg5MUEyNkJENywgMHhBOUIzMDQ3QiwgMHgwMUM1MEEzRiwg
MHgzOUQ0NjU5MywgMHg3MUU3RDU2NywgMHg0OUY2QkFDQiwKKwkweDI0RTdCRjFFLCAweDFDRjZE
MEIyLCAweDU0QzU2MDQ2LCAweDZDRDQwRkVBLCAweEM0QTIwMUFFLCAweEZDQjM2RTAyLCAweEI0
ODBERUY2LCAweDhDOTFCMTVBLAorCTB4NzUwQTYwMEIsIDB4NEQxQjBGQTcsIDB4MDUyOEJGNTMs
IDB4M0QzOUQwRkYsIDB4OTU0RkRFQkIsIDB4QUQ1RUIxMTcsIDB4RTU2RDAxRTMsIDB4REQ3QzZF
NEYsCisJMHhCMDZENkI5QSwgMHg4ODdDMDQzNiwgMHhDMDRGQjRDMiwgMHhGODVFREI2RSwgMHg1
MDI4RDUyQSwgMHg2ODM5QkE4NiwgMHgyMDBBMEE3MiwgMHgxODFCNjVERSwKKwkweEZBMjgwMUQ4
LCAweEMyMzk2RTc0LCAweDhBMEFERTgwLCAweEIyMUJCMTJDLCAweDFBNkRCRjY4LCAweDIyN0NE
MEM0LCAweDZBNEY2MDMwLCAweDUyNUUwRjlDLAorCTB4M0Y0RjBBNDksIDB4MDc1RTY1RTUsIDB4
NEY2REQ1MTEsIDB4Nzc3Q0JBQkQsIDB4REYwQUI0RjksIDB4RTcxQkRCNTUsIDB4QUYyODZCQTEs
IDB4OTczOTA0MEQsCisJMHg1OUYzQkZGMiwgMHg2MUUyRDA1RSwgMHgyOUQxNjBBQSwgMHgxMUMw
MEYwNiwgMHhCOUI2MDE0MiwgMHg4MUE3NkVFRSwgMHhDOTk0REUxQSwgMHhGMTg1QjFCNiwKKwkw
eDlDOTRCNDYzLCAweEE0ODVEQkNGLCAweEVDQjY2QjNCLCAweEQ0QTcwNDk3LCAweDdDRDEwQUQz
LCAweDQ0QzA2NTdGLCAweDBDRjNENThCLCAweDM0RTJCQTI3LAorCTB4RDZEMURFMjEsIDB4RUVD
MEIxOEQsIDB4QTZGMzAxNzksIDB4OUVFMjZFRDUsIDB4MzY5NDYwOTEsIDB4MEU4NTBGM0QsIDB4
NDZCNkJGQzksIDB4N0VBN0QwNjUsCisJMHgxM0I2RDVCMCwgMHgyQkE3QkExQywgMHg2Mzk0MEFF
OCwgMHg1Qjg1NjU0NCwgMHhGM0YzNkIwMCwgMHhDQkUyMDRBQywgMHg4M0QxQjQ1OCwgMHhCQkMw
REJGNCwKKwkweDQyNUIwQUE1LCAweDdBNEE2NTA5LCAweDMyNzlENUZELCAweDBBNjhCQTUxLCAw
eEEyMUVCNDE1LCAweDlBMEZEQkI5LCAweEQyM0M2QjRELCAweEVBMkQwNEUxLAorCTB4ODczQzAx
MzQsIDB4QkYyRDZFOTgsIDB4RjcxRURFNkMsIDB4Q0YwRkIxQzAsIDB4Njc3OUJGODQsIDB4NUY2
OEQwMjgsIDB4MTc1QjYwREMsIDB4MkY0QTBGNzAsCisJMHhDRDc5NkI3NiwgMHhGNTY4MDREQSwg
MHhCRDVCQjQyRSwgMHg4NTRBREI4MiwgMHgyRDNDRDVDNiwgMHgxNTJEQkE2QSwgMHg1RDFFMEE5
RSwgMHg2NTBGNjUzMiwKKwkweDA4MUU2MEU3LCAweDMwMEYwRjRCLCAweDc4M0NCRkJGLCAweDQw
MkREMDEzLCAweEU4NUJERTU3LCAweEQwNEFCMUZCLCAweDk4NzkwMTBGLCAweEEwNjg2RUEzCit9
OworCisvKgorICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNjQK
KyAqLworCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2Vu
ZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCisgKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1l
dGVyczoKKyAqCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4
MUVEQzZGNDEKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIg
Yml0cworICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCisg
KiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJpdHMKKyAqIE51
bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMKKyAqIFNsaWNl
IExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDggOCA4CisgKiBE
aXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCisgKiBGaWxlIE5hbWUg
PSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCisgKi8KKworc3Rh
dGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X283MlsyNTZdID0KK3sKKwkweDAw
MDAwMDAwLCAweEVGMzA2QjE5LCAweERCOENBMEMzLCAweDM0QkNDQkRBLCAweEIyRjUzNzc3LCAw
eDVEQzU1QzZFLCAweDY5Nzk5N0I0LCAweDg2NDlGQ0FELAorCTB4NjAwNjE4MUYsIDB4OEYzNjcz
MDYsIDB4QkI4QUI4REMsIDB4NTRCQUQzQzUsIDB4RDJGMzJGNjgsIDB4M0RDMzQ0NzEsIDB4MDk3
RjhGQUIsIDB4RTY0RkU0QjIsCisJMHhDMDBDMzAzRSwgMHgyRjNDNUIyNywgMHgxQjgwOTBGRCwg
MHhGNEIwRkJFNCwgMHg3MkY5MDc0OSwgMHg5REM5NkM1MCwgMHhBOTc1QTc4QSwgMHg0NjQ1Q0M5
MywKKwkweEEwMEEyODIxLCAweDRGM0E0MzM4LCAweDdCODY4OEUyLCAweDk0QjZFM0ZCLCAweDEy
RkYxRjU2LCAweEZEQ0Y3NDRGLCAweEM5NzNCRjk1LCAweDI2NDNENDhDLAorCTB4ODVGNDE2OEQs
IDB4NkFDNDdEOTQsIDB4NUU3OEI2NEUsIDB4QjE0OERENTcsIDB4MzcwMTIxRkEsIDB4RDgzMTRB
RTMsIDB4RUM4RDgxMzksIDB4MDNCREVBMjAsCisJMHhFNUYyMEU5MiwgMHgwQUMyNjU4QiwgMHgz
RTdFQUU1MSwgMHhEMTRFQzU0OCwgMHg1NzA3MzlFNSwgMHhCODM3NTJGQywgMHg4QzhCOTkyNiwg
MHg2M0JCRjIzRiwKKwkweDQ1RjgyNkIzLCAweEFBQzg0REFBLCAweDlFNzQ4NjcwLCAweDcxNDRF
RDY5LCAweEY3MEQxMUM0LCAweDE4M0Q3QURELCAweDJDODFCMTA3LCAweEMzQjFEQTFFLAorCTB4
MjVGRTNFQUMsIDB4Q0FDRTU1QjUsIDB4RkU3MjlFNkYsIDB4MTE0MkY1NzYsIDB4OTcwQjA5REIs
IDB4NzgzQjYyQzIsIDB4NEM4N0E5MTgsIDB4QTNCN0MyMDEsCisJMHgwRTA0NUJFQiwgMHhFMTM0
MzBGMiwgMHhENTg4RkIyOCwgMHgzQUI4OTAzMSwgMHhCQ0YxNkM5QywgMHg1M0MxMDc4NSwgMHg2
NzdEQ0M1RiwgMHg4ODREQTc0NiwKKwkweDZFMDI0M0Y0LCAweDgxMzIyOEVELCAweEI1OEVFMzM3
LCAweDVBQkU4ODJFLCAweERDRjc3NDgzLCAweDMzQzcxRjlBLCAweDA3N0JENDQwLCAweEU4NEJC
RjU5LAorCTB4Q0UwODZCRDUsIDB4MjEzODAwQ0MsIDB4MTU4NENCMTYsIDB4RkFCNEEwMEYsIDB4
N0NGRDVDQTIsIDB4OTNDRDM3QkIsIDB4QTc3MUZDNjEsIDB4NDg0MTk3NzgsCisJMHhBRTBFNzND
QSwgMHg0MTNFMThEMywgMHg3NTgyRDMwOSwgMHg5QUIyQjgxMCwgMHgxQ0ZCNDRCRCwgMHhGM0NC
MkZBNCwgMHhDNzc3RTQ3RSwgMHgyODQ3OEY2NywKKwkweDhCRjA0RDY2LCAweDY0QzAyNjdGLCAw
eDUwN0NFREE1LCAweEJGNEM4NkJDLCAweDM5MDU3QTExLCAweEQ2MzUxMTA4LCAweEUyODlEQUQy
LCAweDBEQjlCMUNCLAorCTB4RUJGNjU1NzksIDB4MDRDNjNFNjAsIDB4MzA3QUY1QkEsIDB4REY0
QTlFQTMsIDB4NTkwMzYyMEUsIDB4QjYzMzA5MTcsIDB4ODI4RkMyQ0QsIDB4NkRCRkE5RDQsCisJ
MHg0QkZDN0Q1OCwgMHhBNENDMTY0MSwgMHg5MDcwREQ5QiwgMHg3RjQwQjY4MiwgMHhGOTA5NEEy
RiwgMHgxNjM5MjEzNiwgMHgyMjg1RUFFQywgMHhDREI1ODFGNSwKKwkweDJCRkE2NTQ3LCAweEM0
Q0EwRTVFLCAweEYwNzZDNTg0LCAweDFGNDZBRTlELCAweDk5MEY1MjMwLCAweDc2M0YzOTI5LCAw
eDQyODNGMkYzLCAweEFEQjM5OUVBLAorCTB4MUMwOEI3RDYsIDB4RjMzOERDQ0YsIDB4Qzc4NDE3
MTUsIDB4MjhCNDdDMEMsIDB4QUVGRDgwQTEsIDB4NDFDREVCQjgsIDB4NzU3MTIwNjIsIDB4OUE0
MTRCN0IsCisJMHg3QzBFQUZDOSwgMHg5MzNFQzREMCwgMHhBNzgyMEYwQSwgMHg0OEIyNjQxMywg
MHhDRUZCOThCRSwgMHgyMUNCRjNBNywgMHgxNTc3Mzg3RCwgMHhGQTQ3NTM2NCwKKwkweERDMDQ4
N0U4LCAweDMzMzRFQ0YxLCAweDA3ODgyNzJCLCAweEU4Qjg0QzMyLCAweDZFRjFCMDlGLCAweDgx
QzFEQjg2LCAweEI1N0QxMDVDLCAweDVBNEQ3QjQ1LAorCTB4QkMwMjlGRjcsIDB4NTMzMkY0RUUs
IDB4Njc4RTNGMzQsIDB4ODhCRTU0MkQsIDB4MEVGN0E4ODAsIDB4RTFDN0MzOTksIDB4RDU3QjA4
NDMsIDB4M0E0QjYzNUEsCisJMHg5OUZDQTE1QiwgMHg3NkNDQ0E0MiwgMHg0MjcwMDE5OCwgMHhB
RDQwNkE4MSwgMHgyQjA5OTYyQywgMHhDNDM5RkQzNSwgMHhGMDg1MzZFRiwgMHgxRkI1NURGNiwK
KwkweEY5RkFCOTQ0LCAweDE2Q0FEMjVELCAweDIyNzYxOTg3LCAweENENDY3MjlFLCAweDRCMEY4
RTMzLCAweEE0M0ZFNTJBLCAweDkwODMyRUYwLCAweDdGQjM0NUU5LAorCTB4NTlGMDkxNjUsIDB4
QjZDMEZBN0MsIDB4ODI3QzMxQTYsIDB4NkQ0QzVBQkYsIDB4RUIwNUE2MTIsIDB4MDQzNUNEMEIs
IDB4MzA4OTA2RDEsIDB4REZCOTZEQzgsCisJMHgzOUY2ODk3QSwgMHhENkM2RTI2MywgMHhFMjdB
MjlCOSwgMHgwRDRBNDJBMCwgMHg4QjAzQkUwRCwgMHg2NDMzRDUxNCwgMHg1MDhGMUVDRSwgMHhC
RkJGNzVENywKKwkweDEyMENFQzNELCAweEZEM0M4NzI0LCAweEM5ODA0Q0ZFLCAweDI2QjAyN0U3
LCAweEEwRjlEQjRBLCAweDRGQzlCMDUzLCAweDdCNzU3Qjg5LCAweDk0NDUxMDkwLAorCTB4NzIw
QUY0MjIsIDB4OUQzQTlGM0IsIDB4QTk4NjU0RTEsIDB4NDZCNjNGRjgsIDB4QzBGRkMzNTUsIDB4
MkZDRkE4NEMsIDB4MUI3MzYzOTYsIDB4RjQ0MzA4OEYsCisJMHhEMjAwREMwMywgMHgzRDMwQjcx
QSwgMHgwOThDN0NDMCwgMHhFNkJDMTdEOSwgMHg2MEY1RUI3NCwgMHg4RkM1ODA2RCwgMHhCQjc5
NEJCNywgMHg1NDQ5MjBBRSwKKwkweEIyMDZDNDFDLCAweDVEMzZBRjA1LCAweDY5OEE2NERGLCAw
eDg2QkEwRkM2LCAweDAwRjNGMzZCLCAweEVGQzM5ODcyLCAweERCN0Y1M0E4LCAweDM0NEYzOEIx
LAorCTB4OTdGOEZBQjAsIDB4NzhDODkxQTksIDB4NEM3NDVBNzMsIDB4QTM0NDMxNkEsIDB4MjUw
RENEQzcsIDB4Q0EzREE2REUsIDB4RkU4MTZEMDQsIDB4MTFCMTA2MUQsCisJMHhGN0ZFRTJBRiwg
MHgxOENFODlCNiwgMHgyQzcyNDI2QywgMHhDMzQyMjk3NSwgMHg0NTBCRDVEOCwgMHhBQTNCQkVD
MSwgMHg5RTg3NzUxQiwgMHg3MUI3MUUwMiwKKwkweDU3RjRDQThFLCAweEI4QzRBMTk3LCAweDhD
Nzg2QTRELCAweDYzNDgwMTU0LCAweEU1MDFGREY5LCAweDBBMzE5NkUwLCAweDNFOEQ1RDNBLCAw
eEQxQkQzNjIzLAorCTB4MzdGMkQyOTEsIDB4RDhDMkI5ODgsIDB4RUM3RTcyNTIsIDB4MDM0RTE5
NEIsIDB4ODUwN0U1RTYsIDB4NkEzNzhFRkYsIDB4NUU4QjQ1MjUsIDB4QjFCQjJFM0MKK307CisK
Ky8qCisgKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4X283MgorICov
CisKKworCisvKgorICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0
ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKKyAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJz
OgorICoKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURD
NkY0MQorICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRz
CisgKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKKyAqIFRh
YmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cworICogTnVtYmVy
IG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcworICogU2xpY2UgTGVu
Z3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKKyAqIERpcmVj
dG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKKyAqIEZpbGUgTmFtZSA9IC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKKyAqLworCitzdGF0aWMg
Y29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzgwWzI1Nl0gPQoreworCTB4MDAwMDAw
MDAsIDB4NjgwMzJDQzgsIDB4RDAwNjU5OTAsIDB4QjgwNTc1NTgsIDB4QTVFMEM1RDEsIDB4Q0RF
M0U5MTksIDB4NzVFNjlDNDEsIDB4MURFNUIwODksCisJMHg0RTJERkQ1MywgMHgyNjJFRDE5Qiwg
MHg5RTJCQTRDMywgMHhGNjI4ODgwQiwgMHhFQkNEMzg4MiwgMHg4M0NFMTQ0QSwgMHgzQkNCNjEx
MiwgMHg1M0M4NEREQSwKKwkweDlDNUJGQUE2LCAweEY0NThENjZFLCAweDRDNURBMzM2LCAweDI0
NUU4RkZFLCAweDM5QkIzRjc3LCAweDUxQjgxM0JGLCAweEU5QkQ2NkU3LCAweDgxQkU0QTJGLAor
CTB4RDI3NjA3RjUsIDB4QkE3NTJCM0QsIDB4MDI3MDVFNjUsIDB4NkE3MzcyQUQsIDB4Nzc5NkMy
MjQsIDB4MUY5NUVFRUMsIDB4QTc5MDlCQjQsIDB4Q0Y5M0I3N0MsCisJMHgzRDVCODNCRCwgMHg1
NTU4QUY3NSwgMHhFRDVEREEyRCwgMHg4NTVFRjZFNSwgMHg5OEJCNDY2QywgMHhGMEI4NkFBNCwg
MHg0OEJEMUZGQywgMHgyMEJFMzMzNCwKKwkweDczNzY3RUVFLCAweDFCNzU1MjI2LCAweEEzNzAy
NzdFLCAweENCNzMwQkI2LCAweEQ2OTZCQjNGLCAweEJFOTU5N0Y3LCAweDA2OTBFMkFGLCAweDZF
OTNDRTY3LAorCTB4QTEwMDc5MUIsIDB4QzkwMzU1RDMsIDB4NzEwNjIwOEIsIDB4MTkwNTBDNDMs
IDB4MDRFMEJDQ0EsIDB4NkNFMzkwMDIsIDB4RDRFNkU1NUEsIDB4QkNFNUM5OTIsCisJMHhFRjJE
ODQ0OCwgMHg4NzJFQTg4MCwgMHgzRjJCREREOCwgMHg1NzI4RjExMCwgMHg0QUNENDE5OSwgMHgy
MkNFNkQ1MSwgMHg5QUNCMTgwOSwgMHhGMkM4MzRDMSwKKwkweDdBQjcwNzdBLCAweDEyQjQyQkIy
LCAweEFBQjE1RUVBLCAweEMyQjI3MjIyLCAweERGNTdDMkFCLCAweEI3NTRFRTYzLCAweDBGNTE5
QjNCLCAweDY3NTJCN0YzLAorCTB4MzQ5QUZBMjksIDB4NUM5OUQ2RTEsIDB4RTQ5Q0EzQjksIDB4
OEM5RjhGNzEsIDB4OTE3QTNGRjgsIDB4Rjk3OTEzMzAsIDB4NDE3QzY2NjgsIDB4Mjk3RjRBQTAs
CisJMHhFNkVDRkREQywgMHg4RUVGRDExNCwgMHgzNkVBQTQ0QywgMHg1RUU5ODg4NCwgMHg0MzBD
MzgwRCwgMHgyQjBGMTRDNSwgMHg5MzBBNjE5RCwgMHhGQjA5NEQ1NSwKKwkweEE4QzEwMDhGLCAw
eEMwQzIyQzQ3LCAweDc4Qzc1OTFGLCAweDEwQzQ3NUQ3LCAweDBEMjFDNTVFLCAweDY1MjJFOTk2
LCAweEREMjc5Q0NFLCAweEI1MjRCMDA2LAorCTB4NDdFQzg0QzcsIDB4MkZFRkE4MEYsIDB4OTdF
QURENTcsIDB4RkZFOUYxOUYsIDB4RTIwQzQxMTYsIDB4OEEwRjZEREUsIDB4MzIwQTE4ODYsIDB4
NUEwOTM0NEUsCisJMHgwOUMxNzk5NCwgMHg2MUMyNTU1QywgMHhEOUM3MjAwNCwgMHhCMUM0MEND
QywgMHhBQzIxQkM0NSwgMHhDNDIyOTA4RCwgMHg3QzI3RTVENSwgMHgxNDI0QzkxRCwKKwkweERC
Qjc3RTYxLCAweEIzQjQ1MkE5LCAweDBCQjEyN0YxLCAweDYzQjIwQjM5LCAweDdFNTdCQkIwLCAw
eDE2NTQ5Nzc4LCAweEFFNTFFMjIwLCAweEM2NTJDRUU4LAorCTB4OTU5QTgzMzIsIDB4RkQ5OUFG
RkEsIDB4NDU5Q0RBQTIsIDB4MkQ5RkY2NkEsIDB4MzA3QTQ2RTMsIDB4NTg3OTZBMkIsIDB4RTA3
QzFGNzMsIDB4ODg3RjMzQkIsCisJMHhGNTZFMEVGNCwgMHg5RDZEMjIzQywgMHgyNTY4NTc2NCwg
MHg0RDZCN0JBQywgMHg1MDhFQ0IyNSwgMHgzODhERTdFRCwgMHg4MDg4OTJCNSwgMHhFODhCQkU3
RCwKKwkweEJCNDNGM0E3LCAweEQzNDBERjZGLCAweDZCNDVBQTM3LCAweDAzNDY4NkZGLCAweDFF
QTMzNjc2LCAweDc2QTAxQUJFLCAweENFQTU2RkU2LCAweEE2QTY0MzJFLAorCTB4NjkzNUY0NTIs
IDB4MDEzNkQ4OUEsIDB4QjkzM0FEQzIsIDB4RDEzMDgxMEEsIDB4Q0NENTMxODMsIDB4QTRENjFE
NEIsIDB4MUNEMzY4MTMsIDB4NzREMDQ0REIsCisJMHgyNzE4MDkwMSwgMHg0RjFCMjVDOSwgMHhG
NzFFNTA5MSwgMHg5RjFEN0M1OSwgMHg4MkY4Q0NEMCwgMHhFQUZCRTAxOCwgMHg1MkZFOTU0MCwg
MHgzQUZEQjk4OCwKKwkweEM4MzU4RDQ5LCAweEEwMzZBMTgxLCAweDE4MzNENEQ5LCAweDcwMzBG
ODExLCAweDZERDU0ODk4LCAweDA1RDY2NDUwLCAweEJERDMxMTA4LCAweEQ1RDAzREMwLAorCTB4
ODYxODcwMUEsIDB4RUUxQjVDRDIsIDB4NTYxRTI5OEEsIDB4M0UxRDA1NDIsIDB4MjNGOEI1Q0Is
IDB4NEJGQjk5MDMsIDB4RjNGRUVDNUIsIDB4OUJGREMwOTMsCisJMHg1NDZFNzdFRiwgMHgzQzZE
NUIyNywgMHg4NDY4MkU3RiwgMHhFQzZCMDJCNywgMHhGMThFQjIzRSwgMHg5OThEOUVGNiwgMHgy
MTg4RUJBRSwgMHg0OThCQzc2NiwKKwkweDFBNDM4QUJDLCAweDcyNDBBNjc0LCAweENBNDVEMzJD
LCAweEEyNDZGRkU0LCAweEJGQTM0RjZELCAweEQ3QTA2M0E1LCAweDZGQTUxNkZELCAweDA3QTYz
QTM1LAorCTB4OEZEOTA5OEUsIDB4RTdEQTI1NDYsIDB4NUZERjUwMUUsIDB4MzdEQzdDRDYsIDB4
MkEzOUNDNUYsIDB4NDIzQUUwOTcsIDB4RkEzRjk1Q0YsIDB4OTIzQ0I5MDcsCisJMHhDMUY0RjRE
RCwgMHhBOUY3RDgxNSwgMHgxMUYyQUQ0RCwgMHg3OUYxODE4NSwgMHg2NDE0MzEwQywgMHgwQzE3
MURDNCwgMHhCNDEyNjg5QywgMHhEQzExNDQ1NCwKKwkweDEzODJGMzI4LCAweDdCODFERkUwLCAw
eEMzODRBQUI4LCAweEFCODc4NjcwLCAweEI2NjIzNkY5LCAweERFNjExQTMxLCAweDY2NjQ2RjY5
LCAweDBFNjc0M0ExLAorCTB4NURBRjBFN0IsIDB4MzVBQzIyQjMsIDB4OERBOTU3RUIsIDB4RTVB
QTdCMjMsIDB4Rjg0RkNCQUEsIDB4OTA0Q0U3NjIsIDB4Mjg0OTkyM0EsIDB4NDA0QUJFRjIsCisJ
MHhCMjgyOEEzMywgMHhEQTgxQTZGQiwgMHg2Mjg0RDNBMywgMHgwQTg3RkY2QiwgMHgxNzYyNEZF
MiwgMHg3RjYxNjMyQSwgMHhDNzY0MTY3MiwgMHhBRjY3M0FCQSwKKwkweEZDQUY3NzYwLCAweDk0
QUM1QkE4LCAweDJDQTkyRUYwLCAweDQ0QUEwMjM4LCAweDU5NEZCMkIxLCAweDMxNEM5RTc5LCAw
eDg5NDlFQjIxLCAweEUxNEFDN0U5LAorCTB4MkVEOTcwOTUsIDB4NDZEQTVDNUQsIDB4RkVERjI5
MDUsIDB4OTZEQzA1Q0QsIDB4OEIzOUI1NDQsIDB4RTMzQTk5OEMsIDB4NUIzRkVDRDQsIDB4MzMz
Q0MwMUMsCisJMHg2MEY0OERDNiwgMHgwOEY3QTEwRSwgMHhCMEYyRDQ1NiwgMHhEOEYxRjg5RSwg
MHhDNTE0NDgxNywgMHhBRDE3NjRERiwgMHgxNTEyMTE4NywgMHg3RDExM0Q0RgorfTsKKworLyoK
KyAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzgwCisgKi8KKwor
CisKKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBh
dXRvbWFnaWNhbGx5IHVzaW5nIHRoZQorICogZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6Cisg
KgorICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQx
CisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKKyAq
IFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQorICogVGFibGUg
R2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCisgKiBOdW1iZXIgb2Yg
U2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCisgKiBTbGljZSBMZW5ndGhz
ID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAorICogRGlyZWN0b3J5
IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAorICogRmlsZSBOYW1lID0gLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYworICovCisKK3N0YXRpYyBjb25z
dCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vODhbMjU2XSA9Cit7CisJMHgwMDAwMDAwMCwg
MHg0OTNDN0QyNywgMHg5Mjc4RkE0RSwgMHhEQjQ0ODc2OSwgMHgyMTFEODI2RCwgMHg2ODIxRkY0
QSwgMHhCMzY1NzgyMywgMHhGQTU5MDUwNCwKKwkweDQyM0IwNERBLCAweDBCMDc3OUZELCAweEQw
NDNGRTk0LCAweDk5N0Y4M0IzLCAweDYzMjY4NkI3LCAweDJBMUFGQjkwLCAweEYxNUU3Q0Y5LCAw
eEI4NjIwMURFLAorCTB4ODQ3NjA5QjQsIDB4Q0Q0QTc0OTMsIDB4MTYwRUYzRkEsIDB4NUYzMjhF
REQsIDB4QTU2QjhCRDksIDB4RUM1N0Y2RkUsIDB4MzcxMzcxOTcsIDB4N0UyRjBDQjAsCisJMHhD
NjREMEQ2RSwgMHg4RjcxNzA0OSwgMHg1NDM1RjcyMCwgMHgxRDA5OEEwNywgMHhFNzUwOEYwMywg
MHhBRTZDRjIyNCwgMHg3NTI4NzU0RCwgMHgzQzE0MDg2QSwKKwkweDBEMDA2NTk5LCAweDQ0M0Mx
OEJFLCAweDlGNzg5RkQ3LCAweEQ2NDRFMkYwLCAweDJDMURFN0Y0LCAweDY1MjE5QUQzLCAweEJF
NjUxREJBLCAweEY3NTk2MDlELAorCTB4NEYzQjYxNDMsIDB4MDYwNzFDNjQsIDB4REQ0MzlCMEQs
IDB4OTQ3RkU2MkEsIDB4NkUyNkUzMkUsIDB4MjcxQTlFMDksIDB4RkM1RTE5NjAsIDB4QjU2MjY0
NDcsCisJMHg4OTc2NkMyRCwgMHhDMDRBMTEwQSwgMHgxQjBFOTY2MywgMHg1MjMyRUI0NCwgMHhB
ODZCRUU0MCwgMHhFMTU3OTM2NywgMHgzQTEzMTQwRSwgMHg3MzJGNjkyOSwKKwkweENCNEQ2OEY3
LCAweDgyNzExNUQwLCAweDU5MzU5MkI5LCAweDEwMDlFRjlFLCAweEVBNTBFQTlBLCAweEEzNkM5
N0JELCAweDc4MjgxMEQ0LCAweDMxMTQ2REYzLAorCTB4MUEwMENCMzIsIDB4NTMzQ0I2MTUsIDB4
ODg3ODMxN0MsIDB4QzE0NDRDNUIsIDB4M0IxRDQ5NUYsIDB4NzIyMTM0NzgsIDB4QTk2NUIzMTEs
IDB4RTA1OUNFMzYsCisJMHg1ODNCQ0ZFOCwgMHgxMTA3QjJDRiwgMHhDQTQzMzVBNiwgMHg4MzdG
NDg4MSwgMHg3OTI2NEQ4NSwgMHgzMDFBMzBBMiwgMHhFQjVFQjdDQiwgMHhBMjYyQ0FFQywKKwkw
eDlFNzZDMjg2LCAweEQ3NEFCRkExLCAweDBDMEUzOEM4LCAweDQ1MzI0NUVGLCAweEJGNkI0MEVC
LCAweEY2NTczRENDLCAweDJEMTNCQUE1LCAweDY0MkZDNzgyLAorCTB4REM0REM2NUMsIDB4OTU3
MUJCN0IsIDB4NEUzNTNDMTIsIDB4MDcwOTQxMzUsIDB4RkQ1MDQ0MzEsIDB4QjQ2QzM5MTYsIDB4
NkYyOEJFN0YsIDB4MjYxNEMzNTgsCisJMHgxNzAwQUVBQiwgMHg1RTNDRDM4QywgMHg4NTc4NTRF
NSwgMHhDQzQ0MjlDMiwgMHgzNjFEMkNDNiwgMHg3RjIxNTFFMSwgMHhBNDY1RDY4OCwgMHhFRDU5
QUJBRiwKKwkweDU1M0JBQTcxLCAweDFDMDdENzU2LCAweEM3NDM1MDNGLCAweDhFN0YyRDE4LCAw
eDc0MjYyODFDLCAweDNEMUE1NTNCLCAweEU2NUVEMjUyLCAweEFGNjJBRjc1LAorCTB4OTM3NkE3
MUYsIDB4REE0QURBMzgsIDB4MDEwRTVENTEsIDB4NDgzMjIwNzYsIDB4QjI2QjI1NzIsIDB4RkI1
NzU4NTUsIDB4MjAxM0RGM0MsIDB4NjkyRkEyMUIsCisJMHhEMTREQTNDNSwgMHg5ODcxREVFMiwg
MHg0MzM1NTk4QiwgMHgwQTA5MjRBQywgMHhGMDUwMjFBOCwgMHhCOTZDNUM4RiwgMHg2MjI4REJF
NiwgMHgyQjE0QTZDMSwKKwkweDM0MDE5NjY0LCAweDdEM0RFQjQzLCAweEE2Nzk2QzJBLCAweEVG
NDUxMTBELCAweDE1MUMxNDA5LCAweDVDMjA2OTJFLCAweDg3NjRFRTQ3LCAweENFNTg5MzYwLAor
CTB4NzYzQTkyQkUsIDB4M0YwNkVGOTksIDB4RTQ0MjY4RjAsIDB4QUQ3RTE1RDcsIDB4NTcyNzEw
RDMsIDB4MUUxQjZERjQsIDB4QzU1RkVBOUQsIDB4OEM2Mzk3QkEsCisJMHhCMDc3OUZEMCwgMHhG
OTRCRTJGNywgMHgyMjBGNjU5RSwgMHg2QjMzMThCOSwgMHg5MTZBMURCRCwgMHhEODU2NjA5QSwg
MHgwMzEyRTdGMywgMHg0QTJFOUFENCwKKwkweEYyNEM5QjBBLCAweEJCNzBFNjJELCAweDYwMzQ2
MTQ0LCAweDI5MDgxQzYzLCAweEQzNTExOTY3LCAweDlBNkQ2NDQwLCAweDQxMjlFMzI5LCAweDA4
MTU5RTBFLAorCTB4MzkwMUYzRkQsIDB4NzAzRDhFREEsIDB4QUI3OTA5QjMsIDB4RTI0NTc0OTQs
IDB4MTgxQzcxOTAsIDB4NTEyMDBDQjcsIDB4OEE2NDhCREUsIDB4QzM1OEY2RjksCisJMHg3QjNB
RjcyNywgMHgzMjA2OEEwMCwgMHhFOTQyMEQ2OSwgMHhBMDdFNzA0RSwgMHg1QTI3NzU0QSwgMHgx
MzFCMDg2RCwgMHhDODVGOEYwNCwgMHg4MTYzRjIyMywKKwkweEJENzdGQTQ5LCAweEY0NEI4NzZF
LCAweDJGMEYwMDA3LCAweDY2MzM3RDIwLCAweDlDNkE3ODI0LCAweEQ1NTYwNTAzLCAweDBFMTI4
MjZBLCAweDQ3MkVGRjRELAorCTB4RkY0Q0ZFOTMsIDB4QjY3MDgzQjQsIDB4NkQzNDA0REQsIDB4
MjQwODc5RkEsIDB4REU1MTdDRkUsIDB4OTc2RDAxRDksIDB4NEMyOTg2QjAsIDB4MDUxNUZCOTcs
CisJMHgyRTAxNUQ1NiwgMHg2NzNEMjA3MSwgMHhCQzc5QTcxOCwgMHhGNTQ1REEzRiwgMHgwRjFD
REYzQiwgMHg0NjIwQTIxQywgMHg5RDY0MjU3NSwgMHhENDU4NTg1MiwKKwkweDZDM0E1OThDLCAw
eDI1MDYyNEFCLCAweEZFNDJBM0MyLCAweEI3N0VERUU1LCAweDREMjdEQkUxLCAweDA0MUJBNkM2
LCAweERGNUYyMUFGLCAweDk2NjM1Qzg4LAorCTB4QUE3NzU0RTIsIDB4RTM0QjI5QzUsIDB4Mzgw
RkFFQUMsIDB4NzEzM0QzOEIsIDB4OEI2QUQ2OEYsIDB4QzI1NkFCQTgsIDB4MTkxMjJDQzEsIDB4
NTAyRTUxRTYsCisJMHhFODRDNTAzOCwgMHhBMTcwMkQxRiwgMHg3QTM0QUE3NiwgMHgzMzA4RDc1
MSwgMHhDOTUxRDI1NSwgMHg4MDZEQUY3MiwgMHg1QjI5MjgxQiwgMHgxMjE1NTUzQywKKwkweDIz
MDEzOENGLCAweDZBM0Q0NUU4LCAweEIxNzlDMjgxLCAweEY4NDVCRkE2LCAweDAyMUNCQUEyLCAw
eDRCMjBDNzg1LCAweDkwNjQ0MEVDLCAweEQ5NTgzRENCLAorCTB4NjEzQTNDMTUsIDB4MjgwNjQx
MzIsIDB4RjM0MkM2NUIsIDB4QkE3RUJCN0MsIDB4NDAyN0JFNzgsIDB4MDkxQkMzNUYsIDB4RDI1
RjQ0MzYsIDB4OUI2MzM5MTEsCisJMHhBNzc3MzE3QiwgMHhFRTRCNEM1QywgMHgzNTBGQ0IzNSwg
MHg3QzMzQjYxMiwgMHg4NjZBQjMxNiwgMHhDRjU2Q0UzMSwgMHgxNDEyNDk1OCwgMHg1RDJFMzQ3
RiwKKwkweEU1NEMzNUExLCAweEFDNzA0ODg2LCAweDc3MzRDRkVGLCAweDNFMDhCMkM4LCAweEM0
NTFCN0NDLCAweDhENkRDQUVCLCAweDU2Mjk0RDgyLCAweDFGMTUzMEE1Cit9OworCisvKgorICog
ZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vODgKKyAqLworCisKK3N0
YXRpYyB1aW50MzJfdAorc2N0cF9jcmMzMmNfc2I4XzY0X2JpdCh1aW50MzJfdCBjcmMsCisgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBfYnVmLAorICAgICAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IGluaXRfYnl0ZXMpCit7CisJdWludDMyX3QgbGk7CisJdWludDMyX3QgdGVybTEsIHRl
cm0yOworCXVpbnQzMl90IHJ1bm5pbmdfbGVuZ3RoOworCXVpbnQzMl90IGVuZF9ieXRlczsKKwor
CXJ1bm5pbmdfbGVuZ3RoID0gKChsZW5ndGggLSBpbml0X2J5dGVzKSAvIDgpICogODsKKwllbmRf
Ynl0ZXMgPSBsZW5ndGggLSBpbml0X2J5dGVzIC0gcnVubmluZ19sZW5ndGg7CisKKwlmb3IgKGxp
ID0gMDsgbGkgPCBpbml0X2J5dGVzOyBsaSsrKQorCQljcmMgPSBzY3RwX2NyY190YWJsZWlsOF9v
MzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAwMDAwRkZdIF4KKwkJICAgIChjcmMgPj4gOCk7CisJ
Zm9yIChsaSA9IDA7IGxpIDwgcnVubmluZ19sZW5ndGggLyA4OyBsaSsrKSB7CisjaWYgQllURV9P
UkRFUiA9PSBCSUdfRU5ESUFOCisJCWNyYyBePSAqcF9idWYrKzsKKwkJY3JjIF49ICgqcF9idWYr
KykgPDwgODsKKwkJY3JjIF49ICgqcF9idWYrKykgPDwgMTY7CisJCWNyYyBePSAoKnBfYnVmKysp
IDw8IDI0OworI2Vsc2UKKwkJY3JjIF49ICooY29uc3QgdWludDMyX3QgKikgcF9idWY7CisJCXBf
YnVmICs9IDQ7CisjZW5kaWYKKwkJdGVybTEgPSBzY3RwX2NyY190YWJsZWlsOF9vODhbY3JjICYg
MHgwMDAwMDBGRl0gXgorCQkgICAgc2N0cF9jcmNfdGFibGVpbDhfbzgwWyhjcmMgPj4gOCkgJiAw
eDAwMDAwMEZGXTsKKwkJdGVybTIgPSBjcmMgPj4gMTY7CisJCWNyYyA9IHRlcm0xIF4KKwkJICAg
IHNjdHBfY3JjX3RhYmxlaWw4X283Mlt0ZXJtMiAmIDB4MDAwMDAwRkZdIF4KKwkJICAgIHNjdHBf
Y3JjX3RhYmxlaWw4X282NFsodGVybTIgPj4gOCkgJiAweDAwMDAwMEZGXTsKKworI2lmIEJZVEVf
T1JERVIgPT0gQklHX0VORElBTgorCQljcmMgXj0gc2N0cF9jcmNfdGFibGVpbDhfbzU2WypwX2J1
ZisrXTsKKwkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4X280OFsqcF9idWYrK107CisJCWNyYyBe
PSBzY3RwX2NyY190YWJsZWlsOF9vNDBbKnBfYnVmKytdOworCQljcmMgXj0gc2N0cF9jcmNfdGFi
bGVpbDhfbzMyWypwX2J1ZisrXTsKKyNlbHNlCisJCXRlcm0xID0gc2N0cF9jcmNfdGFibGVpbDhf
bzU2WygqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmKSAmIDB4MDAwMDAwRkZdIF4KKwkJICAgIHNj
dHBfY3JjX3RhYmxlaWw4X280OFsoKCooY29uc3QgdWludDMyX3QgKikgcF9idWYpID4+IDgpICYg
MHgwMDAwMDBGRl07CisKKwkJdGVybTIgPSAoKihjb25zdCB1aW50MzJfdCAqKSBwX2J1ZikgPj4g
MTY7CisJCWNyYyA9IGNyYyBeCisJCSAgICB0ZXJtMSBeCisJCSAgICBzY3RwX2NyY190YWJsZWls
OF9vNDBbdGVybTIgJiAweDAwMDAwMEZGXSBeCisJCSAgICBzY3RwX2NyY190YWJsZWlsOF9vMzJb
KHRlcm0yID4+IDgpICYgMHgwMDAwMDBGRl07CisJCXBfYnVmICs9IDQ7CisjZW5kaWYKKwl9CisJ
Zm9yIChsaSA9IDA7IGxpIDwgZW5kX2J5dGVzOyBsaSsrKQorCQljcmMgPSBzY3RwX2NyY190YWJs
ZWlsOF9vMzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAwMDAwRkZdIF4KKwkJICAgIChjcmMgPj4g
OCk7CisJcmV0dXJuIChjcmMpOworfQorCisKKy8qKgorICoKKyAqIFJvdXRpbmUgRGVzY3JpcHRp
b246CisgKgorICogd2FybXMgdGhlIHRhYmxlcworICoKKyAqIEFyZ3VtZW50czoKKyAqCisgKgkJ
bm9uZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCisgKgkJbm9uZQorICovCitzdGF0aWMgdWlu
dDMyX3QKK211bHRpdGFibGVfY3JjMzJjKHVpbnQzMl90IGNyYzMyYywKKyAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBsZW5ndGgpCit7CisJdWludDMyX3QgdG9fZXZlbl93b3JkOworCisJaWYgKGxlbmd0
aCA9PSAwKSB7CisJCXJldHVybiAoY3JjMzJjKTsKKwl9CisJdG9fZXZlbl93b3JkID0gKDQgLSAo
KCh1aW50cHRyX3QpIGJ1ZmZlcikgJiAweDMpKTsKKwlyZXR1cm4gKHNjdHBfY3JjMzJjX3NiOF82
NF9iaXQoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCwgdG9fZXZlbl93b3JkKSk7Cit9CisKK3N0YXRp
YyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY19jWzI1Nl0gPSB7CisJMHgwMDAwMDAwMCwgMHhGMjZC
ODMwMywgMHhFMTNCNzBGNywgMHgxMzUwRjNGNCwKKwkweEM3OUE5NzFGLCAweDM1RjExNDFDLCAw
eDI2QTFFN0U4LCAweEQ0Q0E2NEVCLAorCTB4OEFEOTU4Q0YsIDB4NzhCMkRCQ0MsIDB4NkJFMjI4
MzgsIDB4OTk4OUFCM0IsCisJMHg0RDQzQ0ZEMCwgMHhCRjI4NENEMywgMHhBQzc4QkYyNywgMHg1
RTEzM0MyNCwKKwkweDEwNUVDNzZGLCAweEUyMzU0NDZDLCAweEYxNjVCNzk4LCAweDAzMEUzNDlC
LAorCTB4RDdDNDUwNzAsIDB4MjVBRkQzNzMsIDB4MzZGRjIwODcsIDB4QzQ5NEEzODQsCisJMHg5
QTg3OUZBMCwgMHg2OEVDMUNBMywgMHg3QkJDRUY1NywgMHg4OUQ3NkM1NCwKKwkweDVEMUQwOEJG
LCAweEFGNzY4QkJDLCAweEJDMjY3ODQ4LCAweDRFNERGQjRCLAorCTB4MjBCRDhFREUsIDB4RDJE
NjBEREQsIDB4QzE4NkZFMjksIDB4MzNFRDdEMkEsCisJMHhFNzI3MTlDMSwgMHgxNTRDOUFDMiwg
MHgwNjFDNjkzNiwgMHhGNDc3RUEzNSwKKwkweEFBNjRENjExLCAweDU4MEY1NTEyLCAweDRCNUZB
NkU2LCAweEI5MzQyNUU1LAorCTB4NkRGRTQxMEUsIDB4OUY5NUMyMEQsIDB4OENDNTMxRjksIDB4
N0VBRUIyRkEsCisJMHgzMEUzNDlCMSwgMHhDMjg4Q0FCMiwgMHhEMUQ4Mzk0NiwgMHgyM0IzQkE0
NSwKKwkweEY3NzlERUFFLCAweDA1MTI1REFELCAweDE2NDJBRTU5LCAweEU0MjkyRDVBLAorCTB4
QkEzQTExN0UsIDB4NDg1MTkyN0QsIDB4NUIwMTYxODksIDB4QTk2QUUyOEEsCisJMHg3REEwODY2
MSwgMHg4RkNCMDU2MiwgMHg5QzlCRjY5NiwgMHg2RUYwNzU5NSwKKwkweDQxN0IxREJDLCAweEIz
MTA5RUJGLCAweEEwNDA2RDRCLCAweDUyMkJFRTQ4LAorCTB4ODZFMThBQTMsIDB4NzQ4QTA5QTAs
IDB4NjdEQUZBNTQsIDB4OTVCMTc5NTcsCisJMHhDQkEyNDU3MywgMHgzOUM5QzY3MCwgMHgyQTk5
MzU4NCwgMHhEOEYyQjY4NywKKwkweDBDMzhEMjZDLCAweEZFNTM1MTZGLCAweEVEMDNBMjlCLCAw
eDFGNjgyMTk4LAorCTB4NTEyNURBRDMsIDB4QTM0RTU5RDAsIDB4QjAxRUFBMjQsIDB4NDI3NTI5
MjcsCisJMHg5NkJGNERDQywgMHg2NEQ0Q0VDRiwgMHg3Nzg0M0QzQiwgMHg4NUVGQkUzOCwKKwkw
eERCRkM4MjFDLCAweDI5OTcwMTFGLCAweDNBQzdGMkVCLCAweEM4QUM3MUU4LAorCTB4MUM2NjE1
MDMsIDB4RUUwRDk2MDAsIDB4RkQ1RDY1RjQsIDB4MEYzNkU2RjcsCisJMHg2MUM2OTM2MiwgMHg5
M0FEMTA2MSwgMHg4MEZERTM5NSwgMHg3Mjk2NjA5NiwKKwkweEE2NUMwNDdELCAweDU0Mzc4NzdF
LCAweDQ3Njc3NDhBLCAweEI1MENGNzg5LAorCTB4RUIxRkNCQUQsIDB4MTk3NDQ4QUUsIDB4MEEy
NEJCNUEsIDB4Rjg0RjM4NTksCisJMHgyQzg1NUNCMiwgMHhERUVFREZCMSwgMHhDREJFMkM0NSwg
MHgzRkQ1QUY0NiwKKwkweDcxOTg1NDBELCAweDgzRjNENzBFLCAweDkwQTMyNEZBLCAweDYyQzhB
N0Y5LAorCTB4QjYwMkMzMTIsIDB4NDQ2OTQwMTEsIDB4NTczOUIzRTUsIDB4QTU1MjMwRTYsCisJ
MHhGQjQxMENDMiwgMHgwOTJBOEZDMSwgMHgxQTdBN0MzNSwgMHhFODExRkYzNiwKKwkweDNDREI5
QkRELCAweENFQjAxOERFLCAweERERTBFQjJBLCAweDJGOEI2ODI5LAorCTB4ODJGNjNCNzgsIDB4
NzA5REI4N0IsIDB4NjNDRDRCOEYsIDB4OTFBNkM4OEMsCisJMHg0NTZDQUM2NywgMHhCNzA3MkY2
NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKKwkweDA4MkY2M0I3LCAweEZBNDRFMEI0LCAweEU5
MTQxMzQwLCAweDFCN0Y5MDQzLAorCTB4Q0ZCNUY0QTgsIDB4M0RERTc3QUIsIDB4MkU4RTg0NUYs
IDB4RENFNTA3NUMsCisJMHg5MkE4RkMxNywgMHg2MEMzN0YxNCwgMHg3MzkzOENFMCwgMHg4MUY4
MEZFMywKKwkweDU1MzI2QjA4LCAweEE3NTlFODBCLCAweEI0MDkxQkZGLCAweDQ2NjI5OEZDLAor
CTB4MTg3MUE0RDgsIDB4RUExQTI3REIsIDB4Rjk0QUQ0MkYsIDB4MEIyMTU3MkMsCisJMHhERkVC
MzNDNywgMHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhDQ0JCQzAzMywKKwkweEEyNEJCNUE2LCAw
eDUwMjAzNkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUyLAorCTB4NjVEMTIyQjksIDB4OTdCQUEx
QkEsIDB4ODRFQTUyNEUsIDB4NzY4MUQxNEQsCisJMHgyODkyRUQ2OSwgMHhEQUY5NkU2QSwgMHhD
OUE5OUQ5RSwgMHgzQkMyMUU5RCwKKwkweEVGMDg3QTc2LCAweDFENjNGOTc1LCAweDBFMzMwQTgx
LCAweEZDNTg4OTgyLAorCTB4QjIxNTcyQzksIDB4NDA3RUYxQ0EsIDB4NTMyRTAyM0UsIDB4QTE0
NTgxM0QsCisJMHg3NThGRTVENiwgMHg4N0U0NjZENSwgMHg5NEI0OTUyMSwgMHg2NkRGMTYyMiwK
KwkweDM4Q0MyQTA2LCAweENBQTdBOTA1LCAweEQ5Rjc1QUYxLCAweDJCOUNEOUYyLAorCTB4RkY1
NkJEMTksIDB4MEQzRDNFMUEsIDB4MUU2RENERUUsIDB4RUMwNjRFRUQsCisJMHhDMzhEMjZDNCwg
MHgzMUU2QTVDNywgMHgyMkI2NTYzMywgMHhEMERERDUzMCwKKwkweDA0MTdCMURCLCAweEY2N0Mz
MkQ4LCAweEU1MkNDMTJDLCAweDE3NDc0MjJGLAorCTB4NDk1NDdFMEIsIDB4QkIzRkZEMDgsIDB4
QTg2RjBFRkMsIDB4NUEwNDhERkYsCisJMHg4RUNFRTkxNCwgMHg3Q0E1NkExNywgMHg2RkY1OTlF
MywgMHg5RDlFMUFFMCwKKwkweEQzRDNFMUFCLCAweDIxQjg2MkE4LCAweDMyRTg5MTVDLCAweEMw
ODMxMjVGLAorCTB4MTQ0OTc2QjQsIDB4RTYyMkY1QjcsIDB4RjU3MjA2NDMsIDB4MDcxOTg1NDAs
CisJMHg1OTBBQjk2NCwgMHhBQjYxM0E2NywgMHhCODMxQzk5MywgMHg0QTVBNEE5MCwKKwkweDlF
OTAyRTdCLCAweDZDRkJBRDc4LCAweDdGQUI1RThDLCAweDhEQzBERDhGLAorCTB4RTMzMEE4MUEs
IDB4MTE1QjJCMTksIDB4MDIwQkQ4RUQsIDB4RjA2MDVCRUUsCisJMHgyNEFBM0YwNSwgMHhENkMx
QkMwNiwgMHhDNTkxNEZGMiwgMHgzN0ZBQ0NGMSwKKwkweDY5RTlGMEQ1LCAweDlCODI3M0Q2LCAw
eDg4RDI4MDIyLCAweDdBQjkwMzIxLAorCTB4QUU3MzY3Q0EsIDB4NUMxOEU0QzksIDB4NEY0ODE3
M0QsIDB4QkQyMzk0M0UsCisJMHhGMzZFNkY3NSwgMHgwMTA1RUM3NiwgMHgxMjU1MUY4MiwgMHhF
MDNFOUM4MSwKKwkweDM0RjRGODZBLCAweEM2OUY3QjY5LCAweEQ1Q0Y4ODlELCAweDI3QTQwQjlF
LAorCTB4NzlCNzM3QkEsIDB4OEJEQ0I0QjksIDB4OTg4QzQ3NEQsIDB4NkFFN0M0NEUsCisJMHhC
RTJEQTBBNSwgMHg0QzQ2MjNBNiwgMHg1RjE2RDA1MiwgMHhBRDdENTM1MSwKK307CisKKworI2Rl
ZmluZSBTQ1RQX0NSQzMyQyhjLGQpIChjPShjPj44KV5zY3RwX2NyY19jWyhjXihkKSkmMHhGRl0p
CisKK3N0YXRpYyB1aW50MzJfdAorc2luZ2xldGFibGVfY3JjMzJjKHVpbnQzMl90IGNyYzMyYywK
KyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwor
CWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlTQ1RQX0NSQzMyQyhjcmMzMmMsIGJ1
ZmZlcltpXSk7CisJfQorCXJldHVybiAoY3JjMzJjKTsKK30KKworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKK3VpbnQzMl90CisjZWxzZQorc3RhdGljIHVpbnQzMl90CisjZW5kaWYKK2NhbGN1
bGF0ZV9jcmMzMmModWludDMyX3QgY3JjMzJjLAorICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgp
Cit7CisJaWYgKGxlbmd0aCA8IDQpIHsKKwkJcmV0dXJuIChzaW5nbGV0YWJsZV9jcmMzMmMoY3Jj
MzJjLCBidWZmZXIsIGxlbmd0aCkpOworCX0gZWxzZSB7CisJCXJldHVybiAobXVsdGl0YWJsZV9j
cmMzMmMoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCkpOworCX0KK30KKworI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQordWludDMyX3QKKyNlbHNlCitzdGF0aWMgdWludDMyX3QKKyNl
bmRpZgorc2N0cF9maW5hbGl6ZV9jcmMzMmModWludDMyX3QgY3JjMzJjKQoreworCXVpbnQzMl90
IHJlc3VsdDsKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwl1aW50OF90IGJ5dGUwLCBi
eXRlMSwgYnl0ZTIsIGJ5dGUzOworI2VuZGlmCisKKwkvKiBDb21wbGVtZW50IHRoZSByZXN1bHQg
Ki8KKwlyZXN1bHQgPSB+Y3JjMzJjOworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorCS8q
CisJICogRm9yIEJJRy1FTkRJQU4gcGxhdGZvcm1zIHRoZSByZXN1bHQgaXMgaW4gbGl0dGxlLWVu
ZGlhbiBmb3JtLiBTbyB3ZQorCSAqIG11c3Qgc3dhcCB0aGUgYnl0ZXMgdG8gcmV0dXJuIHRoZSBy
ZXN1bHQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorCSAqLworCWJ5dGUwID0gcmVzdWx0ICYgMHgw
MDAwMDBmZjsKKwlieXRlMSA9IChyZXN1bHQgPj4gOCkgJiAweDAwMDAwMGZmOworCWJ5dGUyID0g
KHJlc3VsdCA+PiAxNikgJiAweDAwMDAwMGZmOworCWJ5dGUzID0gKHJlc3VsdCA+PiAyNCkgJiAw
eDAwMDAwMGZmOworCWNyYzMyYyA9ICgoYnl0ZTAgPDwgMjQpIHwgKGJ5dGUxIDw8IDE2KSB8IChi
eXRlMiA8PCA4KSB8IGJ5dGUzKTsKKyNlbHNlCisJLyoKKwkgKiBGb3IgTElUVExFIEVORElBTiBw
bGF0Zm9ybXMgdGhlIHJlc3VsdCBpcyBpbiBhbHJlYWR5IGluIG5ldHdvcmsKKwkgKiBieXRlIG9y
ZGVyLgorCSAqLworCWNyYzMyYyA9IHJlc3VsdDsKKyNlbmRpZgorCXJldHVybiAoY3JjMzJjKTsK
K30KKworLyoKKyAqIENvbXB1dGUgdGhlIFNDVFAgY2hlY2tzdW0gaW4gbmV0d29yayBieXRlIG9y
ZGVyIGZvciBhIGdpdmVuIG1idWYgY2hhaW4gbQorICogd2hpY2ggY29udGFpbnMgYW4gU0NUUCBw
YWNrZXQgc3RhcnRpbmcgYXQgb2Zmc2V0LgorICogU2luY2UgdGhpcyBmdW5jdGlvbiBpcyBhbHNv
IGNhbGxlZCBieSBpcGZ3LCBkb24ndCBhc3N1bWUgdGhhdAorICogaXQgaXMgY29tcGlsZWQgb24g
YSBrZXJuZWwgd2l0aCBTQ1RQIHN1cHBvcnQuCisgKi8KK3VpbnQzMl90CitzY3RwX2NhbGN1bGF0
ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQoreworCXVpbnQzMl90IGJh
c2UgPSAweGZmZmZmZmZmOworCisJd2hpbGUgKG9mZnNldCA+IDApIHsKKwkJS0FTU0VSVChtICE9
IE5VTEwsICgic2N0cF9jYWxjdWxhdGVfY2tzdW0sIG9mZnNldCA+IGxlbmd0aCBvZiBtYnVmIGNo
YWluIikpOworCQlpZiAob2Zmc2V0IDwgKHVpbnQzMl90KW0tPm1fbGVuKSB7CisJCQlicmVhazsK
KwkJfQorCQlvZmZzZXQgLT0gbS0+bV9sZW47CisJCW0gPSBtLT5tX25leHQ7CisJfQorCWlmIChv
ZmZzZXQgPiAwKSB7CisJCWJhc2UgPSBjYWxjdWxhdGVfY3JjMzJjKGJhc2UsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopKG0tPm1fZGF0YSArIG9mZnNldCksCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKG0tPm1fbGVuIC0gb2Zmc2V0
KSk7CisJCW0gPSBtLT5tX25leHQ7CisJfQorCXdoaWxlIChtICE9IE5VTEwpIHsKKwkJYmFzZSA9
IGNhbGN1bGF0ZV9jcmMzMmMoYmFzZSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2ln
bmVkIGNoYXIgKiltLT5tX2RhdGEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25l
ZCBpbnQpbS0+bV9sZW4pOworCQltID0gbS0+bV9uZXh0OworCX0KKwliYXNlID0gc2N0cF9maW5h
bGl6ZV9jcmMzMmMoYmFzZSk7CisJcmV0dXJuIChiYXNlKTsKK30KKworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisjaWZkZWYgU0NUUAorLyoKKyAqIENvbXB1dGUgYW5kIGluc2VydCB0aGUgU0NU
UCBjaGVja3N1bSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgZm9yIGEgZ2l2ZW4KKyAqIG1idWYgY2hh
aW4gbSB3aGljaCBjb250YWlucyBhbiBTQ1RQIHBhY2tldCBzdGFydGluZyBhdCBvZmZzZXQuCisg
Ki8KK3ZvaWQKK3NjdHBfZGVsYXllZF9ja3N1bShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zm
c2V0KQoreworCXVpbnQzMl90IGNoZWNrc3VtOworCisJY2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0
ZV9ja3N1bShtLCBvZmZzZXQpOworCVNDVFBfU1RBVF9ERUNSKHNjdHBzX3NlbmRod2NyYyk7CisJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKwlvZmZzZXQgKz0gb2Zmc2V0b2Yoc3Ry
dWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKKworCWlmIChvZmZzZXQgKyBzaXplb2YodWludDMyX3Qp
ID4gKHVpbnQzMl90KShtLT5tX2xlbikpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJz
Y3RwX2RlbGF5ZWRfY2tzdW0oKTogbS0+bV9sZW46ICVkLCBvZmZzZXQ6ICV1LiIsCisJCSAgICAg
IG0tPm1fbGVuLCBvZmZzZXQpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoInNjdHBfZGVsYXllZF9j
a3N1bSgpOiBtLT5tX2xlbjogJWQsIG9mZnNldDogJXUuXG4iLAorCQkgICAgICAgICAgICBtLT5t
X2xlbiwgb2Zmc2V0KTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCSoodWludDMyX3QgKikobS0+
bV9kYXRhICsgb2Zmc2V0KSA9IGNoZWNrc3VtOworfQorI2VuZGlmCisjZW5kaWYKKwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYWMyMGMxMDM0MWZhMTkxNjcxNTAzYWIzM2EyYjM5M2Q2
YmUzNGNlNyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3Jj
MzIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5oCkBAIC0w
LDAgKzEsNTYgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz
ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
ICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jcmMzMi5oIDMyNzIwMCAyMDE3LTEyLTI2IDEy
OjM1OjAyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9DUkMz
Ml9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0NSQzMyX0hfCisKKyNpZiBkZWZpbmVkKF9LRVJO
RUwpCit1aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqLCB1aW50MzJf
dCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBTQ1RQCit2b2lkIHNjdHBfZGVs
YXllZF9ja3N1bShzdHJ1Y3QgbWJ1ZiAqLCB1aW50MzJfdCBvZmZzZXQpOworI2VuZGlmCisjZW5k
aWYKKyNlbmRpZgkJCQkvKiBfS0VSTkVMICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
dWludDMyX3QgY2FsY3VsYXRlX2NyYzMyYyh1aW50MzJfdCwgY29uc3QgdW5zaWduZWQgY2hhciAq
LCB1bnNpZ25lZCBpbnQpOwordWludDMyX3Qgc2N0cF9maW5hbGl6ZV9jcmMzMmModWludDMyX3Qp
OwordWludDMyX3Qgc2N0cF9jYWxjdWxhdGVfY2tzdW0oc3RydWN0IG1idWYgKiwgdWludDMyX3Qp
OworI2VuZGlmCisjZW5kaWYJCQkJLyogX19jcmMzMmNfaF9fICovCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9oZWFkZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLjYwMzVkOWNiZGJiZGZiOTFmMjViOTY3NDIyZDhhNGEwN2Y5YjY0YTMg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCkBAIC0wLDAgKzEs
NjExIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAq
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwg
U3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRl
ZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNE
OiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaGVhZGVyLmggMzA5NjgyIDIwMTYtMTItMDcgMTk6MzA6
NTlaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0hFQURFUl9I
XworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0hFQURFUl9IXworCisjaWYgZGVmaW5lZChfX1dpbmRv
d3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNsdWRlIDxwYWNr
b24uaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5j
bHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKworI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tl
ZCkpCisjZWxzZQorI3ByYWdtYSBwYWNrIChwdXNoLCAxKQorI2RlZmluZSBTQ1RQX1BBQ0tFRAor
I2VuZGlmCisKKy8qCisgKiBQYXJhbWV0ZXIgc3RydWN0dXJlcworICovCitzdHJ1Y3Qgc2N0cF9p
cHY0YWRkcl9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0lQ
VjRfUEFSQU1fVFlQRSwgbGVuPTggKi8KKwl1aW50MzJfdCBhZGRyOwkJLyogSVBWNCBhZGRyZXNz
ICovCit9IFNDVFBfUEFDS0VEOworCisjZGVmaW5lIFNDVFBfVjZfQUREUl9CWVRFUyAxNgorCisK
K3N0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsv
KiB0eXBlPVNDVFBfSVBWNl9QQVJBTV9UWVBFLCBsZW49MjAgKi8KKwl1aW50OF90IGFkZHJbU0NU
UF9WNl9BRERSX0JZVEVTXTsJLyogSVBWNiBhZGRyZXNzICovCit9IFNDVFBfUEFDS0VEOworCisv
KiBDb29raWUgUHJlc2VydmF0aXZlICovCitzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFy
YW0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGU9U0NUUF9DT09LSUVfUFJFU0VS
VkUsIGxlbj04ICovCisJdWludDMyX3QgdGltZTsJCS8qIHRpbWUgaW4gbXMgdG8gZXh0ZW5kIGNv
b2tpZSAqLworfSBTQ1RQX1BBQ0tFRDsKKworI2RlZmluZSBTQ1RQX0FSUkFZX01JTl9MRU4gMQor
LyogSG9zdCBOYW1lIEFkZHJlc3MgKi8KK3N0cnVjdCBzY3RwX2hvc3RfbmFtZV9wYXJhbSB7CisJ
c3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0hPU1ROQU1FX0FERFJFU1MgKi8K
KwljaGFyIG5hbWVbU0NUUF9BUlJBWV9NSU5fTEVOXTsJCS8qIGhvc3QgbmFtZSAqLworfSBTQ1RQ
X1BBQ0tFRDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gcGFkZGVkIHNpemUgb2YgYSBz
LWEtcAorICogc28gcGFyYW1oZWFkciArIDMgYWRkcmVzcyB0eXBlcyAoNiBieXRlcykgKyAyIGJ5
dGUgcGFkID0gMTIKKyAqLworI2RlZmluZSBTQ1RQX01BWF9BRERSX1BBUkFNU19TSVpFIDEyCisv
KiBzdXBwb3J0ZWQgYWRkcmVzcyB0eXBlICovCitzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfYWRkcl9w
YXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX1NVUFBPUlRFRF9B
RERSVFlQRSAqLworCXVpbnQxNl90IGFkZHJfdHlwZVsyXTsJLyogYXJyYXkgb2Ygc3VwcG9ydGVk
IGFkZHJlc3MgdHlwZXMgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qIGhlYXJ0YmVhdCBpbmZvIHBh
cmFtZXRlciAqLworc3RydWN0IHNjdHBfaGVhcnRiZWF0X2luZm9fcGFyYW0geworCXN0cnVjdCBz
Y3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHRpbWVfdmFsdWVfMTsKKwl1aW50MzJfdCB0aW1l
X3ZhbHVlXzI7CisJdWludDMyX3QgcmFuZG9tX3ZhbHVlMTsKKwl1aW50MzJfdCByYW5kb21fdmFs
dWUyOworCXVpbnQ4X3QgYWRkcl9mYW1pbHk7CisJdWludDhfdCBhZGRyX2xlbjsKKwkvKiBtYWtl
IHN1cmUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcyA0IGJ5dGUgYWxpZ25lZCAqLworCXVpbnQ4X3Qg
cGFkZGluZ1syXTsKKwljaGFyIGFkZHJlc3NbU0NUUF9BRERSTUFYXTsKK30gU0NUUF9QQUNLRUQ7
CisKKworLyogZHJhZnQtaWV0Zi10c3Z3Zy1wcnNjdHAgKi8KKy8qIFBSLVNDVFAgc3VwcG9ydGVk
IHBhcmFtZXRlciAqLworc3RydWN0IHNjdHBfcHJzY3RwX3N1cHBvcnRlZF9wYXJhbSB7CisJc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgcGg7Cit9IFNDVFBfUEFDS0VEOworCisKKy8qIGRyYWZ0LWlldGYt
dHN2d2ctYWRkaXAtc2N0cCAqLworc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyIHsJLyogYW4g
QVNDT05GICJwYXJhbWV0ZXIiICovCisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogYSBTQ1RQ
IHBhcmFtZXRlciBoZWFkZXIgKi8KKwl1aW50MzJfdCBjb3JyZWxhdGlvbl9pZDsvKiBjb3JyZWxh
dGlvbiBpZCBmb3IgdGhpcyBwYXJhbSAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBf
YXNjb25mX2FkZHJfcGFyYW0gewkvKiBhbiBBU0NPTkYgYWRkcmVzcyBwYXJhbWV0ZXIgKi8KKwlz
dHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgYXBoOwkvKiBhc2NvbmYgInBhcmFtZXRlciIgKi8K
KwlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSBhZGRycDsJLyogbWF4IHN0b3JhZ2Ugc2l6ZSAq
LworfSBTQ1RQX1BBQ0tFRDsKKworCitzdHJ1Y3Qgc2N0cF9hc2NvbmZfdGFnX3BhcmFtIHsJLyog
YW4gQVNDT05GIE5BVC1WdGFnIHBhcmFtZXRlciAqLworCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJh
bWhkciBhcGg7CS8qIGFzY29uZiAicGFyYW1ldGVyIiAqLworICAgICAgICB1aW50MzJfdCBsb2Nh
bF92dGFnOworICAgICAgICB1aW50MzJfdCByZW1vdGVfdnRhZzsKK30gU0NUUF9QQUNLRUQ7CisK
Kworc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSB7CS8qIGFuIEFTQ09ORiBhZGRyZXNz
ICh2NCkgcGFyYW1ldGVyICovCisJc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyIGFwaDsJLyog
YXNjb25mICJwYXJhbWV0ZXIiICovCisJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gYWRkcnA7
CS8qIG1heCBzdG9yYWdlIHNpemUgKi8KK30gU0NUUF9QQUNLRUQ7CisKKyNkZWZpbmUgU0NUUF9N
QVhfU1VQUE9SVEVEX0VYVCAyNTYKKworc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVz
X3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlID0gMHg4MDA4ICBsZW4g
PSB4ICovCisJdWludDhfdCBjaHVua190eXBlc1tdOworfSBTQ1RQX1BBQ0tFRDsKKworCisvKgor
ICogU3RydWN0dXJlcyBmb3IgREFUQSBjaHVua3MKKyAqLworc3RydWN0IHNjdHBfZGF0YSB7CisJ
dWludDMyX3QgdHNuOworCXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCBzc247CisJdWludDMyX3Qg
cHBpZDsKKwkvKiB1c2VyIGRhdGEgZm9sbG93cyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0
IHNjdHBfZGF0YV9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNj
dHBfZGF0YSBkcDsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2lkYXRhIHsKKwl1aW50
MzJfdCB0c247CisJdWludDE2X3Qgc2lkOworCXVpbnQxNl90IHJlc2VydmVkOwkvKiBXaGVyZSBk
b2VzIHRoZSBTU04gZ28/ICovCisJdWludDMyX3QgbWlkOworCXVuaW9uIHsKKwkJdWludDMyX3Qg
cHBpZDsKKwkJdWludDMyX3QgZnNuOwkvKiBGcmFnbWVudCBTZXF1ZW5jZSBOdW1iZXIgKi8KKwl9
IHBwaWRfZnNuOworCS8qIHVzZXIgZGF0YSBmb2xsb3dzICovCit9IFNDVFBfUEFDS0VEOworCitz
dHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3Ry
dWN0IHNjdHBfaWRhdGEgZHA7Cit9IFNDVFBfUEFDS0VEOworCisvKgorICogU3RydWN0dXJlcyBm
b3IgdGhlIGNvbnRyb2wgY2h1bmtzCisgKi8KKworLyogSW5pdGlhdGUgKElOSVQpL0luaXRpYXRl
IEFjayAoSU5JVCBBQ0spICovCitzdHJ1Y3Qgc2N0cF9pbml0IHsKKwl1aW50MzJfdCBpbml0aWF0
ZV90YWc7CS8qIGluaXRpYXRlIHRhZyAqLworCXVpbnQzMl90IGFfcnduZDsJLyogYV9yd25kICov
CisJdWludDE2X3QgbnVtX291dGJvdW5kX3N0cmVhbXM7CS8qIE9TICovCisJdWludDE2X3QgbnVt
X2luYm91bmRfc3RyZWFtczsJLyogTUlTICovCisJdWludDMyX3QgaW5pdGlhbF90c247CS8qIEkt
VFNOICovCisJLyogb3B0aW9uYWwgcGFyYW0ncyBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7Cisj
ZGVmaW5lIFNDVFBfSURFTlRJRklDQVRJT05fU0laRSAxNgorI2RlZmluZSBTQ1RQX0FERFJFU1Nf
U0laRSA0CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBTQ1RQX1JFU0VSVkVf
U1BBQ0UgNQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9SRVNFUlZFX1NQQUNFIDYKKyNlbmRpZgorLyog
c3RhdGUgY29va2llIGhlYWRlciAqLworc3RydWN0IHNjdHBfc3RhdGVfY29va2llIHsJLyogdGhp
cyBpcyBvdXIgZGVmaW5pdGlvbi4uLiAqLworCXVpbnQ4X3QgaWRlbnRpZmljYXRpb25bU0NUUF9J
REVOVElGSUNBVElPTl9TSVpFXTsvKiBpZCBvZiB3aG8gd2UgYXJlICovCisJc3RydWN0IHRpbWV2
YWwgdGltZV9lbnRlcmVkOwkvKiB0aGUgdGltZSBJIGJ1aWx0IGNvb2tpZSAqLworCXVpbnQzMl90
IGNvb2tpZV9saWZlOwkvKiBsaWZlIEkgd2lsbCBhd2FyZCB0aGlzIGNvb2tpZSAqLworCXVpbnQz
Ml90IHRpZV90YWdfbXlfdnRhZzsJLyogbXkgdGFnIGluIG9sZCBhc3NvY2lhdGlvbiAqLworCisJ
dWludDMyX3QgdGllX3RhZ19wZWVyX3Z0YWc7CS8qIHBlZXJzIHRhZyBpbiBvbGQgYXNzb2NpYXRp
b24gKi8KKwl1aW50MzJfdCBwZWVyc192dGFnOwkvKiBwZWVycyB0YWcgaW4gSU5JVCAoZm9yIHF1
aWNrIHJlZikgKi8KKworCXVpbnQzMl90IG15X3Z0YWc7CS8qIG15IHRhZyBpbiBJTklULUFDSyAo
Zm9yIHF1aWNrIHJlZikgKi8KKwl1aW50MzJfdCBhZGRyZXNzW1NDVFBfQUREUkVTU19TSVpFXTsJ
LyogNCBpbnRzLzEyOCBiaXRzICovCisJdWludDMyX3QgYWRkcl90eXBlOwkvKiBhZGRyZXNzIHR5
cGUgKi8KKwl1aW50MzJfdCBsYWRkcmVzc1tTQ1RQX0FERFJFU1NfU0laRV07CS8qIG15IGxvY2Fs
IGZyb20gYWRkcmVzcyAqLworCXVpbnQzMl90IGxhZGRyX3R5cGU7CS8qIG15IGxvY2FsIGZyb20g
YWRkcmVzcyB0eXBlICovCisJdWludDMyX3Qgc2NvcGVfaWQ7CS8qIHY2IHNjb3BlIGlkIGZvciBs
aW5rLWxvY2FscyAqLworCisJdWludDE2X3QgcGVlcnBvcnQ7CS8qIHBvcnQgYWRkcmVzcyBvZiB0
aGUgcGVlciBpbiB0aGUgSU5JVCAqLworCXVpbnQxNl90IG15cG9ydDsJLyogbXkgcG9ydCBhZGRy
ZXNzIHVzZWQgaW4gdGhlIElOSVQgKi8KKwl1aW50OF90IGlwdjRfYWRkcl9sZWdhbDsvKiBBcmUg
VjQgYWRkciBsZWdhbD8gKi8KKwl1aW50OF90IGlwdjZfYWRkcl9sZWdhbDsvKiBBcmUgVjYgYWRk
ciBsZWdhbD8gKi8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDhfdCBjb25uX2Fk
ZHJfbGVnYWw7CisjZW5kaWYKKwl1aW50OF90IGxvY2FsX3Njb3BlOwkvKiBJUHY2IGxvY2FsIHNj
b3BlIGZsYWcgKi8KKwl1aW50OF90IHNpdGVfc2NvcGU7CS8qIElQdjYgc2l0ZSBzY29wZSBmbGFn
ICovCisKKwl1aW50OF90IGlwdjRfc2NvcGU7CS8qIElQdjQgcHJpdmF0ZSBhZGRyIHNjb3BlICov
CisJdWludDhfdCBsb29wYmFja19zY29wZTsJLyogbG9vcGJhY2sgc2NvcGUgaW5mb3JtYXRpb24g
Ki8KKwl1aW50OF90IHJlc2VydmVkW1NDVFBfUkVTRVJWRV9TUEFDRV07ICAgIC8qIEFsaWduIHRv
IDY0IGJpdHMgKi8KKwkvKgorCSAqIGF0IHRoZSBlbmQgaXMgdGFja2VkIG9uIHRoZSBJTklUIGNo
dW5rIGFuZCB0aGUgSU5JVC1BQ0sgY2h1bmsKKwkgKiAobWludXMgdGhlIGNvb2tpZSkuCisJICov
Cit9IFNDVFBfUEFDS0VEOworCisvKiBzdGF0ZSBjb29raWUgcGFyYW1ldGVyICovCitzdHJ1Y3Qg
c2N0cF9zdGF0ZV9jb29raWVfcGFyYW0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXN0
cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSBjb29raWU7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0
cF9pbml0IGluaXQ7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9pbml0X21zZyB7CisJ
c3RydWN0IHNjdHBoZHIgc2g7CisJc3RydWN0IHNjdHBfaW5pdF9jaHVuayBtc2c7Cit9IFNDVFBf
UEFDS0VEOworCisvKiAuLi4gdXNlZCBmb3IgYm90aCBJTklUIGFuZCBJTklUIEFDSyAqLworI2Rl
ZmluZSBzY3RwX2luaXRfYWNrCQlzY3RwX2luaXQKKyNkZWZpbmUgc2N0cF9pbml0X2Fja19jaHVu
awlzY3RwX2luaXRfY2h1bmsKKyNkZWZpbmUgc2N0cF9pbml0X2Fja19tc2cJc2N0cF9pbml0X21z
ZworCisKKy8qIFNlbGVjdGl2ZSBBY2sgKFNBQ0spICovCitzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Js
b2NrIHsKKwl1aW50MTZfdCBzdGFydDsJCS8qIEdhcCBBY2sgYmxvY2sgc3RhcnQgKi8KKwl1aW50
MTZfdCBlbmQ7CQkvKiBHYXAgQWNrIGJsb2NrIGVuZCAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3Ry
dWN0IHNjdHBfc2FjayB7CisJdWludDMyX3QgY3VtX3Rzbl9hY2s7CS8qIGN1bXVsYXRpdmUgVFNO
IEFjayAqLworCXVpbnQzMl90IGFfcnduZDsJLyogdXBkYXRlZCBhX3J3bmQgb2Ygc2VuZGVyICov
CisJdWludDE2X3QgbnVtX2dhcF9hY2tfYmxrczsJLyogbnVtYmVyIG9mIEdhcCBBY2sgYmxvY2tz
ICovCisJdWludDE2X3QgbnVtX2R1cF90c25zOwkvKiBudW1iZXIgb2YgZHVwbGljYXRlIFRTTnMg
Ki8KKwkvKiBzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrJ3MgZm9sbG93ICovCisJLyogdWludDMy
X3QgZHVwbGljYXRlX3RzbidzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNj
dHBfc2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBf
c2FjayBzYWNrOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfbnJfc2FjayB7CisJdWlu
dDMyX3QgY3VtX3Rzbl9hY2s7CS8qIGN1bXVsYXRpdmUgVFNOIEFjayAqLworCXVpbnQzMl90IGFf
cnduZDsJLyogdXBkYXRlZCBhX3J3bmQgb2Ygc2VuZGVyICovCisJdWludDE2X3QgbnVtX2dhcF9h
Y2tfYmxrczsJLyogbnVtYmVyIG9mIEdhcCBBY2sgYmxvY2tzICovCisJdWludDE2X3QgbnVtX25y
X2dhcF9hY2tfYmxrczsJLyogbnVtYmVyIG9mIE5SIEdhcCBBY2sgYmxvY2tzICovCisJdWludDE2
X3QgbnVtX2R1cF90c25zOwkvKiBudW1iZXIgb2YgZHVwbGljYXRlIFRTTnMgKi8KKwl1aW50MTZf
dCByZXNlcnZlZDsJLyogbm90IGN1cnJlbnRseSB1c2VkKi8KKwkvKiBzdHJ1Y3Qgc2N0cF9nYXBf
YWNrX2Jsb2NrJ3MgZm9sbG93ICovCisJLyogdWludDMyX3QgZHVwbGljYXRlX3RzbidzIGZvbGxv
dyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayB7CisJc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfbnJfc2FjayBucl9zYWNrOworfSBT
Q1RQX1BBQ0tFRDsKKworCisvKiBIZWFydGJlYXQgUmVxdWVzdCAoSEVBUlRCRUFUKSAqLworc3Ry
dWN0IHNjdHBfaGVhcnRiZWF0IHsKKwlzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfaW5mb19wYXJhbSBo
Yl9pbmZvOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rIHsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0cF9oZWFydGJlYXQgaGVhcnRi
ZWF0OworfSBTQ1RQX1BBQ0tFRDsKKworLyogLi4uIHVzZWQgZm9yIEhlYXJ0YmVhdCBBY2sgKEhF
QVJUQkVBVCBBQ0spICovCisjZGVmaW5lIHNjdHBfaGVhcnRiZWF0X2FjawkJc2N0cF9oZWFydGJl
YXQKKyNkZWZpbmUgc2N0cF9oZWFydGJlYXRfYWNrX2NodW5rCXNjdHBfaGVhcnRiZWF0X2NodW5r
CisKKworLyogQWJvcnQgQXNzc29jaWF0aW9uIChBQk9SVCkgKi8KK3N0cnVjdCBzY3RwX2Fib3J0
X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwkvKiBvcHRpb25hbCBlcnJvciBj
YXVzZSBtYXkgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9hYm9ydF9t
c2cgeworCXN0cnVjdCBzY3RwaGRyIHNoOworCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rIG1zZzsK
K30gU0NUUF9QQUNLRUQ7CisKKworLyogU2h1dGRvd24gQXNzb2NpYXRpb24gKFNIVVRET1dOKSAq
Lworc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNo
OworCXVpbnQzMl90IGN1bXVsYXRpdmVfdHNuX2FjazsKK30gU0NUUF9QQUNLRUQ7CisKKworLyog
U2h1dGRvd24gQWNrbm93bGVkZ21lbnQgKFNIVVRET1dOIEFDSykgKi8KK3N0cnVjdCBzY3RwX3No
dXRkb3duX2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Cit9IFNDVFBfUEFD
S0VEOworCisKKy8qIE9wZXJhdGlvbiBFcnJvciAoRVJST1IpICovCitzdHJ1Y3Qgc2N0cF9lcnJv
cl9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJLyogb3B0aW9uYWwgZXJyb3Ig
Y2F1c2VzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworCisvKiBDb29raWUgRWNobyAoQ09P
S0lFIEVDSE8pICovCitzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVuayB7CisJc3RydWN0IHNj
dHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfc3RhdGVfY29va2llIGNvb2tpZTsKK30gU0NU
UF9QQUNLRUQ7CisKKy8qIENvb2tpZSBBY2tub3dsZWRnbWVudCAoQ09PS0lFIEFDSykgKi8KK3N0
cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwor
fSBTQ1RQX1BBQ0tFRDsKKworLyogRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24gRWNo
byAoRUNORSkgKi8KK3N0cnVjdCBvbGRfc2N0cF9lY25lX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9j
aHVua2hkciBjaDsKKwl1aW50MzJfdCB0c247Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0
cF9lY25lX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50MzJfdCB0c247
CisJdWludDMyX3QgbnVtX3BrdHNfc2luY2VfY3dyOworfSBTQ1RQX1BBQ0tFRDsKKworLyogQ29u
Z2VzdGlvbiBXaW5kb3cgUmVkdWNlZCAoQ1dSKSAqLworc3RydWN0IHNjdHBfY3dyX2NodW5rIHsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50MzJfdCB0c247Cit9IFNDVFBfUEFDS0VE
OworCisvKiBTaHV0ZG93biBDb21wbGV0ZSAoU0hVVERPV04gQ09NUExFVEUpICovCitzdHJ1Y3Qg
c2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7
Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRp
b24geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IGluZGljYXRpb247Cit9
IFNDVFBfUEFDS0VEOworCisvKgorICogZHJhZnQtaWV0Zi10c3Z3Zy1hZGRpcC1zY3RwCisgKi8K
Ky8qIEFkZHJlc3MvU3RyZWFtIENvbmZpZ3VyYXRpb24gQ2hhbmdlIChBU0NPTkYpICovCitzdHJ1
Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXVpbnQz
Ml90IHNlcmlhbF9udW1iZXI7CisJLyogbG9va3VwIGFkZHJlc3MgcGFyYW1ldGVyIChtYW5kYXRv
cnkpICovCisJLyogYXNjb25mIHBhcmFtZXRlcnMgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOwor
CisvKiBBZGRyZXNzL1N0cmVhbSBDb25maWd1cmF0aW9uIEFja25vd2xlZGdlIChBU0NPTkYgQUNL
KSAqLworc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmto
ZHIgY2g7CisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsKKwkvKiBhc2NvbmYgcGFyYW1ldGVycyBm
b2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qIGRyYWZ0LWlldGYtdHN2d2ctcHJzY3RwICov
CisvKiBGb3J3YXJkIEN1bXVsYXRpdmUgVFNOIChGT1JXQVJEIFRTTikgKi8KK3N0cnVjdCBzY3Rw
X2ZvcndhcmRfdHNuX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50MzJf
dCBuZXdfY3VtdWxhdGl2ZV90c247CisJLyogc3RyZWFtL3NlcXVlbmNlIHBhaXJzIChzY3RwX3N0
cnNlcSkgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9zdHJzZXEgewor
CXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCBzc247Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qg
c2N0cF9zdHJzZXFfbWlkIHsKKwl1aW50MTZfdCBzaWQ7CisJdWludDE2X3QgZmxhZ3M7CisJdWlu
dDMyX3QgbWlkOworfTsKKworc3RydWN0IHNjdHBfZm9yd2FyZF90c25fbXNnIHsKKwlzdHJ1Y3Qg
c2N0cGhkciBzaDsKKwlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayBtc2c7Cit9IFNDVFBf
UEFDS0VEOworCisvKiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA0IC0gMSBha2EgMy83LzExIGV0
Yy4gKi8KKworI2RlZmluZSBTQ1RQX05VTV9EQl9UT19WRVJJRlkgMzEKKworc3RydWN0IHNjdHBf
Y2h1bmtfZGVzYyB7CisJdWludDhfdCBjaHVua190eXBlOworCXVpbnQ4X3QgZGF0YV9ieXRlc1tT
Q1RQX05VTV9EQl9UT19WRVJJRlldOworCXVpbnQzMl90IHRzbl9pZmFueTsKK30gU0NUUF9QQUNL
RUQ7CisKKworc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmto
ZHIgY2g7CisJdWludDMyX3QgYm90dGxlX2J3OworCXVpbnQzMl90IGN1cnJlbnRfb25xOworCXVp
bnQxNl90IHRydW5jX2xlbjsKKwl1aW50MTZfdCByZXNlcnZlZDsKKwl1aW50OF90IGRhdGFbXTsK
K30gU0NUUF9QQUNLRUQ7CisKKy8qKioqKioqKioqU1RSRUFNIFJFU0VUIFNUVUZGICoqKioqKioq
KioqKioqKioqKi8KKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3JlcXVlc3QgeworCXN0cnVj
dCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHJlcXVlc3Rfc2VxOworfSBTQ1RQX1BBQ0tF
RDsKKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsJLyogbW9ub3RvbmljYWxseSBp
bmNyZWFzaW5nIHNlcSBubyAqLworCXVpbnQzMl90IHJlc3BvbnNlX3NlcTsJLyogaWYgYSByZXNw
b25zZSwgdGhlIHJlc3Agc2VxIG5vICovCisJdWludDMyX3Qgc2VuZF9yZXNldF9hdF90c247CS8q
IGxhc3QgVFNOIEkgYXNzaWduZWQgb3V0Ym91bmQgKi8KKwl1aW50MTZfdCBsaXN0X29mX3N0cmVh
bXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30gU0NUUF9QQUNLRUQ7CisK
K3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0IHsKKwlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsKKwl1aW50MTZfdCBsaXN0X29mX3N0cmVh
bXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30gU0NUUF9QQUNLRUQ7CisK
K3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCB7CisJc3RydWN0IHNjdHBfcGFy
YW1oZHIgcGg7CisJdWludDMyX3QgcmVxdWVzdF9zZXE7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgeworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBo
OworCXVpbnQzMl90IHJlc3BvbnNlX3NlcTsJLyogaWYgYSByZXNwb25zZSwgdGhlIHJlc3Agc2Vx
IG5vICovCisJdWludDMyX3QgcmVzdWx0OworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7CisJ
dWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0aGUgcmVzcCBzZXEgbm8g
Ki8KKwl1aW50MzJfdCByZXN1bHQ7CisJdWludDMyX3Qgc2VuZGVyc19uZXh0X3RzbjsKKwl1aW50
MzJfdCByZWNlaXZlcnNfbmV4dF90c247Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfYWRkX3N0cm0geworICBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKKyAgdWlu
dDMyX3QgcmVxdWVzdF9zZXE7CisgIHVpbnQxNl90IG51bWJlcl9vZl9zdHJlYW1zOworICB1aW50
MTZfdCByZXNlcnZlZDsKK30gU0NUUF9QQUNLRUQ7CisKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVT
RVRfUkVTVUxUX05PVEhJTkdfVE9fRE8gICAweDAwMDAwMDAwIC8qIFhYWDogdW51c2VkICovCisj
ZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQgICAgICAgMHgwMDAwMDAw
MQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEICAgICAgICAgIDB4MDAw
MDAwMDIKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9fV1JPTkdfU1NOICAw
eDAwMDAwMDAzIC8qIFhYWDogdW51c2VkICovCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9FUlJfSU5fUFJPR1JFU1MgMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VF9SRVNVTFRfRVJSX0JBRF9TRVFOTyAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgU0NUUF9TVFJFQU1f
UkVTRVRfUkVTVUxUX0lOX1BST0dSRVNTICAgICAweDAwMDAwMDA2IC8qIFhYWDogdW51c2VkICov
CisKKy8qCisgKiBjb252aWVuY2Ugc3RydWN0dXJlcywgbm90ZSB0aGF0IGlmIHlvdSBhcmUgbWFr
aW5nIGEgcmVxdWVzdCBmb3Igc3BlY2lmaWMKKyAqIHN0cmVhbXMgdGhlbiB0aGUgcmVxdWVzdCB3
aWxsIG5lZWQgdG8gYmUgYW4gb3ZlcmxheSBzdHJ1Y3R1cmUuCisgKi8KKworc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Rzbl9yZXEgeworCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCBzcl9yZXE7Cit9IFNDVFBfUEFDS0VEOwor
CitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcCB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIg
Y2g7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlIHNyX3Jlc3A7Cit9IFNDVFBf
UEFDS0VEOworCisvKiByZXNwb25lIG9ubHkgdmFsaWQgd2l0aCBhIFRTTiByZXF1ZXN0ICovCitz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcF90c24geworCXN0cnVjdCBzY3RwX2NodW5raGRy
IGNoOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24gc3JfcmVzcDsKK30g
U0NUUF9QQUNLRUQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCisvKgorICogQXV0aGVudGljYXRlZCBjaHVua3Mgc3VwcG9ydCBkcmFm
dC1pZXRmLXRzdndnLXNjdHAtYXV0aAorICovCisKKy8qIFNob3VsZCB3ZSBtYWtlIHRoZSBtYXgg
YmUgMzI/ICovCisjZGVmaW5lIFNDVFBfUkFORE9NX01BWF9TSVpFIDI1Ngorc3RydWN0IHNjdHBf
YXV0aF9yYW5kb20geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGUgPSAweDgwMDIg
Ki8KKwl1aW50OF90IHJhbmRvbV9kYXRhW107Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0
cF9hdXRoX2NodW5rX2xpc3QgeworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGUgPSAw
eDgwMDMgKi8KKwl1aW50OF90IGNodW5rX3R5cGVzW107Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1
Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlw
ZSA9IDB4ODAwNCAqLworCXVpbnQxNl90IGhtYWNfaWRzW107Cit9IFNDVFBfUEFDS0VEOworCitz
dHJ1Y3Qgc2N0cF9hdXRoX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50
MTZfdCBzaGFyZWRfa2V5X2lkOworCXVpbnQxNl90IGhtYWNfaWQ7CisJdWludDhfdCBobWFjW107
Cit9IFNDVFBfUEFDS0VEOworCisvKgorICogd2UgcHJlLXJlc2VydmUgZW5vdWdoIHJvb20gZm9y
IGEgRUNORSBvciBDV1IgQU5EIGEgU0FDSyB3aXRoIG5vIG1pc3NpbmcKKyAqIHBpZWNlcy4gSWYg
RU5DRSBpcyBtaXNzaW5nIHdlIGNvdWxkIGhhdmUgYSBjb3VwbGUgb2YgYmxvY2tzLiBUaGlzIHdh
eSB3ZQorICogb3B0aW1pemUgc28gd2UgTU9TVCBsaWtlbHkgY2FuIGJ1bmRsZSBhIFNBQ0svRUNO
IHdpdGggdGhlIHNtYWxsZXN0IHNpemUKKyAqIGRhdGEgY2h1bmsgSSB3aWxsIHNwbGl0IGludG8u
IFdlIGNvdWxkIGluY3JlYXNlIHRocm91Z2hwdXQgc2xpZ2h0bHkgYnkKKyAqIHRha2luZyBvdXQg
dGhlc2UgdHdvIGJ1dCB0aGUgIDI0LXNhY2svOC1DV1IgaS5lLiAzMiBieXRlcyBJIHByZS1yZXNl
cnZlIEkKKyAqIGZlZWwgaXMgd29ydGggaXQgZm9yIG5vdy4KKyAqLworI2lmbmRlZiBTQ1RQX01B
WF9PVkVSSEVBRAorI2lmZGVmIElORVQ2CisjZGVmaW5lIFNDVFBfTUFYX09WRVJIRUFEIChzaXpl
b2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspICsgXAorCQkJICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBp
cDZfaGRyKSkKKworI2RlZmluZSBTQ1RQX01FRF9PVkVSSEVBRCAoc2l6ZW9mKHN0cnVjdCBzY3Rw
X2RhdGFfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIFwKKwkJCSAg
IHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpCisKKworI2RlZmluZSBTQ1RQX01JTl9PVkVSSEVBRCAo
c2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIFwKKwkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikp
CisKKyNlbHNlCisjZGVmaW5lIFNDVFBfTUFYX09WRVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBf
ZGF0YV9jaHVuaykgKyBcCisJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAorCQkJICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3NhY2tfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBpcCkpCisKKyNkZWZpbmUg
U0NUUF9NRURfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwKKwkJ
CSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCisJCQkgICBzaXplb2Yoc3RydWN0IGlwKSkK
KworCisjZGVmaW5lIFNDVFBfTUlOX09WRVJIRUFEIChzaXplb2Yoc3RydWN0IGlwKSArIFwKKwkJ
CSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCisKKyNlbmRpZiAvKiBJTkVUNiAqLworI2VuZGlm
IC8qICFTQ1RQX01BWF9PVkVSSEVBRCAqLworCisjZGVmaW5lIFNDVFBfTUVEX1Y0X09WRVJIRUFE
IChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisJCQkgICAgICBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpICsgXAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBpcCkpCisKKyNkZWZpbmUg
U0NUUF9NSU5fVjRfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3QgaXApICsgXAorCQkJICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSkKKworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisjaW5jbHVk
ZSA8cGFja29mZi5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorI3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgorI3VuZGVmIFNDVFBfUEFDS0VECisjZW5kaWYJ
CQkJLyogIV9fc2N0cF9oZWFkZXJfaF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9pbmRhdGEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2luZGF0YS5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUz
OTEuLjJmYmFjMmZmMGJmN2M5MjkyMGRkZDBjNWVlMDYxZmJmZTBmYzNmYjQgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jCkBAIC0wLDAgKzEsNTc2NSBAQAorLyot
CisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJp
Z2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFl
bCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNE
X18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMv
bmV0aW5ldC9zY3RwX2luZGF0YS5jIDMzMzk3OSAyMDE4LTA1LTIxIDE0OjUxOjIwWiB0dWV4ZW4g
JCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZmRlZiBfX0Zy
ZWVCU0RfXworI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRw
dXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9pbnB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgorI2lmZGVmIF9fRnJl
ZUJTRF9fCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYnNkLmg+CisjZW5kaWYKKy8qCisg
KiBOT1RFUzogT24gdGhlIG91dGJvdW5kIHNpZGUgb2YgdGhpbmdzIEkgbmVlZCB0byBjaGVjayB0
aGUgc2FjayB0aW1lciB0bworICogc2VlIGlmIEkgc2hvdWxkIGdlbmVyYXRlIGEgc2FjayBpbnRv
IHRoZSBjaHVuayBxdWV1ZSAoaWYgSSBoYXZlIGRhdGEgdG8KKyAqIHNlbmQgdGhhdCBpcyBhbmQg
d2lsbCBiZSBzZW5kaW5nIGl0IC4uIGZvciBidW5kbGluZy4KKyAqCisgKiBUaGUgY2FsbGJhY2sg
aW4gc2N0cF91c3JyZXEuYyB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGUgc29ja2V0IGlzIHJlYWQg
ZnJvbS4KKyAqIFRoaXMgd2lsbCBjYXVzZSBzY3RwX3NlcnZpY2VfcXVldWVzKCkgdG8gZ2V0IGNh
bGxlZCBvbiB0aGUgdG9wIGVudHJ5IGluCisgKiB0aGUgbGlzdC4KKyAqLworc3RhdGljIHVpbnQz
Ml90CitzY3RwX2FkZF9jaGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAq
Y29udHJvbCwKKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKKwkJCXN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKKwkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgbG9ja19oZWxkKTsKKworCit2b2lkCitzY3RwX3Nl
dF9yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MpCit7CisJYXNvYy0+bXlfcnduZCA9IHNjdHBfY2FsY19yd25kKHN0Y2IsIGFzb2MpOworfQor
CisvKiBDYWxjdWxhdGUgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAqLwordWludDMyX3QKK3NjdHBf
Y2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MpCit7CisJdWludDMyX3QgY2FsYyA9IDA7CisKKwkvKgorCSAqIFRoaXMgaXMgcmVhbGx5
IHNldCB3cm9uZyB3aXRoIHJlc3BlY3QgdG8gYSAxLTItbSBzb2NrZXQuIFNpbmNlCisJICogdGhl
IHNiX2NjIGlzIHRoZSBjb3VudCB0aGF0IGV2ZXJ5b25lIGFzIHB1dCB1cC4gV2hlbiB3ZSByZS13
cml0ZQorCSAqIHNjdHBfc29yZWNlaXZlIHRoZW4gd2Ugd2lsbCBmaXggdGhpcyBzbyB0aGF0IE9O
TFkgdGhpcworCSAqIGFzc29jaWF0aW9ucyBkYXRhIGlzIHRha2VuIGludG8gYWNjb3VudC4KKwkg
Ki8KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQlyZXR1cm4gKGNhbGMpOwor
CX0KKworCUtBU1NFUlQoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlID4gMCB8fCBhc29jLT5zaXpl
X29uX3JlYXNtX3F1ZXVlID09IDAsCisJICAgICAgICAoInNpemVfb25fcmVhc21fcXVldWUgaXMg
JXUiLCBhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlKSk7CisJS0FTU0VSVChhc29jLT5jbnRfb25f
YWxsX3N0cmVhbXMgPiAwIHx8IGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPT0gMCwKKwkgICAg
ICAgICgic2l6ZV9vbl9hbGxfc3RyZWFtcyBpcyAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVh
bXMpKTsKKwlpZiAoc3RjYi0+YXNvYy5zYl9jYyA9PSAwICYmCisJICAgIGFzb2MtPmNudF9vbl9y
ZWFzbV9xdWV1ZSA9PSAwICYmCisJICAgIGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyA9PSAwKSB7
CisJCS8qIEZ1bGwgcnduZCBncmFudGVkICovCisJCWNhbGMgPSBtYXgoU0NUUF9TQl9MSU1JVF9S
Q1Yoc3RjYi0+c2N0cF9zb2NrZXQpLCBTQ1RQX01JTklNQUxfUldORCk7CisJCXJldHVybiAoY2Fs
Yyk7CisJfQorCS8qIGdldCBhY3R1YWwgc3BhY2UgKi8KKwljYWxjID0gKHVpbnQzMl90KSBzY3Rw
X3Nic3BhY2UoJnN0Y2ItPmFzb2MsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKKwkvKgor
CSAqIHRha2Ugb3V0IHdoYXQgaGFzIE5PVCBiZWVuIHB1dCBvbiBzb2NrZXQgcXVldWUgYW5kIHdl
IHlldCBob2xkCisJICogZm9yIHB1dHRpbmcgdXAuCisJICovCisJY2FsYyA9IHNjdHBfc2JzcGFj
ZV9zdWIoY2FsYywgKHVpbnQzMl90KShhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlICsKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9x
dWV1ZSAqIE1TSVpFKSk7CisJY2FsYyA9IHNjdHBfc2JzcGFjZV9zdWIoY2FsYywgKHVpbnQzMl90
KShhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zICsKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyAqIE1TSVpFKSk7CisJaWYg
KGNhbGMgPT0gMCkgeworCQkvKiBvdXQgb2Ygc3BhY2UgKi8KKwkJcmV0dXJuIChjYWxjKTsKKwl9
CisKKwkvKiB3aGF0IGlzIHRoZSBvdmVyaGVhZCBvZiBhbGwgdGhlc2UgcnduZCdzICovCisJY2Fs
YyA9IHNjdHBfc2JzcGFjZV9zdWIoY2FsYywgc3RjYi0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVu
KTsKKwkvKiBJZiB0aGUgd2luZG93IGdldHMgdG9vIHNtYWxsIGR1ZSB0byBjdHJsLXN0dWZmLCBy
ZWR1Y2UgaXQKKwkgKiB0byAxLCBldmVuIGl0IGlzIDAuIFNXUyBlbmdhZ2VkCisJICovCisJaWYg
KGNhbGMgPCBzdGNiLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4pIHsKKwkJY2FsYyA9IDE7CisJ
fQorCXJldHVybiAoY2FsYyk7Cit9CisKKworCisvKgorICogQnVpbGQgb3V0IG91ciByZWFkcSBl
bnRyeSBiYXNlZCBvbiB0aGUgaW5jb21pbmcgcGFja2V0LgorICovCitzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqCitzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgdWludDMyX3QgdHNuLCB1aW50MzJf
dCBwcGlkLAorICAgIHVpbnQzMl90IGNvbnRleHQsIHVpbnQxNl90IHNpZCwKKyAgICB1aW50MzJf
dCBtaWQsIHVpbnQ4X3QgZmxhZ3MsCisgICAgc3RydWN0IG1idWYgKmRtKQoreworCXN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICpyZWFkX3F1ZXVlX2UgPSBOVUxMOworCisJc2N0cF9hbGxvY19h
X3JlYWRxKHN0Y2IsIHJlYWRfcXVldWVfZSk7CisJaWYgKHJlYWRfcXVldWVfZSA9PSBOVUxMKSB7
CisJCWdvdG8gZmFpbGVkX2J1aWxkOworCX0KKwltZW1zZXQocmVhZF9xdWV1ZV9lLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpKTsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX3N0
cmVhbSA9IHNpZDsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX2ZsYWdzID0gKGZsYWdzIDw8IDgpOwor
CXJlYWRfcXVldWVfZS0+c2luZm9fcHBpZCA9IHBwaWQ7CisJcmVhZF9xdWV1ZV9lLT5zaW5mb19j
b250ZXh0ID0gY29udGV4dDsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX3RzbiA9IHRzbjsKKwlyZWFk
X3F1ZXVlX2UtPnNpbmZvX2N1bXRzbiA9IHRzbjsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX2Fzc29j
X2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwlyZWFkX3F1ZXVlX2UtPm1pZCA9IG1pZDsK
KwlyZWFkX3F1ZXVlX2UtPnRvcF9mc24gPSByZWFkX3F1ZXVlX2UtPmZzbl9pbmNsdWRlZCA9IDB4
ZmZmZmZmZmY7CisJVEFJTFFfSU5JVCgmcmVhZF9xdWV1ZV9lLT5yZWFzbSk7CisJcmVhZF9xdWV1
ZV9lLT53aG9Gcm9tID0gbmV0OworCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwgMSk7
CisJcmVhZF9xdWV1ZV9lLT5kYXRhID0gZG07CisJcmVhZF9xdWV1ZV9lLT5zdGNiID0gc3RjYjsK
KwlyZWFkX3F1ZXVlX2UtPnBvcnRfZnJvbSA9IHN0Y2ItPnJwb3J0OworZmFpbGVkX2J1aWxkOgor
CXJldHVybiAocmVhZF9xdWV1ZV9lKTsKK30KKworc3RydWN0IG1idWYgKgorc2N0cF9idWlsZF9j
dGxfbmNodW5rKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8g
KnNpbmZvKQoreworCXN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKnNlaW5mbzsKKwlzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvICpvdXRpbmZvOworCXN0cnVjdCBzY3RwX3JjdmluZm8gKnJjdmluZm87CisJ
c3RydWN0IHNjdHBfbnh0aW5mbyAqbnh0aW5mbzsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisJV1NBQ01TR0hEUiAqY21oOworI2Vsc2UKKwlzdHJ1Y3QgY21zZ2hkciAqY21o
OworI2VuZGlmCisJc3RydWN0IG1idWYgKnJldDsKKwlpbnQgbGVuOworCWludCB1c2VfZXh0ZW5k
ZWQ7CisJaW50IHByb3ZpZGVfbnh0OworCisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBT
Q1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkgJiYKKwkgICAgc2N0cF9pc19mZWF0dXJlX29m
ZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgorCSAgICBzY3RwX2lzX2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB7CisJCS8qIHVzZXIgZG9l
cyBub3Qgd2FudCBhbnkgYW5jaWxsYXJ5IGRhdGEgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisK
KwlsZW4gPSAwOworCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19S
RUNWUkNWSU5GTykpIHsKKwkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3Jj
dmluZm8pKTsKKwl9CisJc2VpbmZvID0gKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKilzaW5mbzsK
KwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8p
ICYmCisJICAgIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfQVZB
SUwpKSB7CisJCXByb3ZpZGVfbnh0ID0gMTsKKwkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0
cnVjdCBzY3RwX254dGluZm8pKTsKKwl9IGVsc2UgeworCQlwcm92aWRlX254dCA9IDA7CisJfQor
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZO
VCkpIHsKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYVF9S
Q1ZJTkZPKSkgeworCQkJdXNlX2V4dGVuZGVkID0gMTsKKwkJCWxlbiArPSBDTVNHX1NQQUNFKHNp
emVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxzZSB7CisJCQl1c2VfZXh0ZW5k
ZWQgPSAwOworCQkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmlu
Zm8pKTsKKwkJfQorCX0gZWxzZSB7CisJCXVzZV9leHRlbmRlZCA9IDA7CisJfQorCisJcmV0ID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlm
IChyZXQgPT0gTlVMTCkgeworCQkvKiBObyBzcGFjZSAqLworCQlyZXR1cm4gKHJldCk7CisJfQor
CVNDVFBfQlVGX0xFTihyZXQpID0gMDsKKworCS8qIFdlIG5lZWQgYSBDTVNHIGhlYWRlciBmb2xs
b3dlZCBieSB0aGUgc3RydWN0ICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCWNtaCA9IG10b2QocmV0LCBXU0FDTVNHSERSICopOworI2Vsc2UKKwljbWggPSBtdG9kKHJl
dCwgc3RydWN0IGNtc2doZHIgKik7CisjZW5kaWYKKwkvKgorCSAqIE1ha2Ugc3VyZSB0aGF0IHRo
ZXJlIGlzIG5vIHVuLWluaXRpYWxpemVkIHBhZGRpbmcgYmV0d2VlbgorCSAqIHRoZSBjbXNnIGhl
YWRlciBhbmQgY21zZyBkYXRhIGFuZCBhZnRlciB0aGUgY21zZyBkYXRhLgorCSAqLworCW1lbXNl
dChjbWgsIDAsIGxlbik7CisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZSQ1ZJTkZPKSkgeworCQljbWgtPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7CisJ
CWNtaC0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOwor
CQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfUkNWSU5GTzsKKwkJcmN2aW5mbyA9IChzdHJ1Y3Qgc2N0
cF9yY3ZpbmZvICopQ01TR19EQVRBKGNtaCk7CisJCXJjdmluZm8tPnJjdl9zaWQgPSBzaW5mby0+
c2luZm9fc3RyZWFtOworCQlyY3ZpbmZvLT5yY3Zfc3NuID0gc2luZm8tPnNpbmZvX3NzbjsKKwkJ
cmN2aW5mby0+cmN2X2ZsYWdzID0gc2luZm8tPnNpbmZvX2ZsYWdzOworCQlyY3ZpbmZvLT5yY3Zf
cHBpZCA9IHNpbmZvLT5zaW5mb19wcGlkOworCQlyY3ZpbmZvLT5yY3ZfdHNuID0gc2luZm8tPnNp
bmZvX3RzbjsKKwkJcmN2aW5mby0+cmN2X2N1bXRzbiA9IHNpbmZvLT5zaW5mb19jdW10c247CisJ
CXJjdmluZm8tPnJjdl9jb250ZXh0ID0gc2luZm8tPnNpbmZvX2NvbnRleHQ7CisJCXJjdmluZm8t
PnJjdl9hc3NvY19pZCA9IHNpbmZvLT5zaW5mb19hc3NvY19pZDsKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisJCWNtaCA9IChXU0FDTVNHSERSICopKChjYWRkcl90KWNtaCAr
IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKSk7CisjZWxzZQorCQljbWgg
PSAoc3RydWN0IGNtc2doZHIgKikoKGNhZGRyX3QpY21oICsgQ01TR19TUEFDRShzaXplb2Yoc3Ry
dWN0IHNjdHBfcmN2aW5mbykpKTsKKyNlbmRpZgorCQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBDTVNH
X1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7CisJfQorCWlmIChwcm92aWRlX254
dCkgeworCQljbWgtPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7CisJCWNtaC0+Y21zZ19sZW4g
PSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpOworCQljbWgtPmNtc2dfdHlw
ZSA9IFNDVFBfTlhUSU5GTzsKKwkJbnh0aW5mbyA9IChzdHJ1Y3Qgc2N0cF9ueHRpbmZvICopQ01T
R19EQVRBKGNtaCk7CisJCW54dGluZm8tPm54dF9zaWQgPSBzZWluZm8tPnNlcmluZm9fbmV4dF9z
dHJlYW07CisJCW54dGluZm8tPm54dF9mbGFncyA9IDA7CisJCWlmIChzZWluZm8tPnNlcmluZm9f
bmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEKSB7CisJCQlueHRpbmZvLT5u
eHRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCX0KKwkJaWYgKHNlaW5mby0+c2VyaW5mb19u
ZXh0X2ZsYWdzICYgU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04pIHsKKwkJCW54dGluZm8t
Pm54dF9mbGFncyB8PSBTQ1RQX05PVElGSUNBVElPTjsKKwkJfQorCQlpZiAoc2VpbmZvLT5zZXJp
bmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUpIHsKKwkJCW54dGluZm8t
Pm54dF9mbGFncyB8PSBTQ1RQX0NPTVBMRVRFOworCQl9CisJCW54dGluZm8tPm54dF9wcGlkID0g
c2VpbmZvLT5zZXJpbmZvX25leHRfcHBpZDsKKwkJbnh0aW5mby0+bnh0X2xlbmd0aCA9IHNlaW5m
by0+c2VyaW5mb19uZXh0X2xlbmd0aDsKKwkJbnh0aW5mby0+bnh0X2Fzc29jX2lkID0gc2VpbmZv
LT5zZXJpbmZvX25leHRfYWlkOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KwkJY21oID0gKFdTQUNNU0dIRFIgKikoKGNhZGRyX3QpY21oICsgQ01TR19TUEFDRShzaXplb2Yo
c3RydWN0IHNjdHBfbnh0aW5mbykpKTsKKyNlbHNlCisJCWNtaCA9IChzdHJ1Y3QgY21zZ2hkciAq
KSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9ueHRpbmZvKSkp
OworI2VuZGlmCisJCVNDVFBfQlVGX0xFTihyZXQpICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVj
dCBzY3RwX254dGluZm8pKTsKKwl9CisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5UKSkgeworCQljbWgtPmNtc2dfbGV2ZWwgPSBJUFBST1RP
X1NDVFA7CisJCW91dGluZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKUNNU0dfREFUQShj
bWgpOworCQlpZiAodXNlX2V4dGVuZGVkKSB7CisJCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4o
c2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsKKwkJCWNtaC0+Y21zZ190eXBlID0gU0NU
UF9FWFRSQ1Y7CisJCQltZW1jcHkob3V0aW5mbywgc2luZm8sIHNpemVvZihzdHJ1Y3Qgc2N0cF9l
eHRyY3ZpbmZvKSk7CisJCQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBDTVNHX1NQQUNFKHNpemVvZihz
dHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxzZSB7CisJCQljbWgtPmNtc2dfbGVuID0g
Q01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKKwkJCWNtaC0+Y21zZ190
eXBlID0gU0NUUF9TTkRSQ1Y7CisJCQkqb3V0aW5mbyA9ICpzaW5mbzsKKwkJCVNDVFBfQlVGX0xF
TihyZXQpICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKKwkJ
fQorCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfbWFya19ub25f
cmV2b2thYmxlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1aW50MzJfdCB0c24pCit7
CisJdWludDMyX3QgZ2FwLCBpLCBjdW1hY2twMTsKKwlpbnQgZm5kID0gMDsKKwlpbnQgaW5fcj0w
LCBpbl9ucj0wOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsK
KwkJcmV0dXJuOworCX0KKwljdW1hY2twMSA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuICsgMTsKKwlp
ZiAoU0NUUF9UU05fR1QoY3VtYWNrcDEsIHRzbikpIHsKKwkJLyogdGhpcyB0c24gaXMgYmVoaW5k
IHRoZSBjdW0gYWNrIGFuZCB0aHVzIHdlIGRvbid0CisJCSAqIG5lZWQgdG8gd29ycnkgYWJvdXQg
aXQgYmVpbmcgbW92ZWQgZnJvbSBvbmUgdG8gdGhlIG90aGVyLgorCQkgKi8KKwkJcmV0dXJuOwor
CX0KKwlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIHRzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9i
YXNlX3Rzbik7CisJaW5fciA9IFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJh
eSwgZ2FwKTsKKwlpbl9uciA9IFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19h
cnJheSwgZ2FwKTsKKwlpZiAoKGluX3IgPT0gMCkgJiYgKGluX25yID09IDApKSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCQlwYW5pYygiVGhpbmdzIGFyZSByZWFsbHkgbWVzc2VkIHVwIG5vdyIpOwor
I2Vsc2UKKwkJU0NUUF9QUklOVEYoImdhcDoleCB0c246JXhcbiIsIGdhcCwgdHNuKTsKKwkJc2N0
cF9wcmludF9tYXBwaW5nX2FycmF5KGFzb2MpOworI2VuZGlmCisJfQorCWlmIChpbl9uciA9PSAw
KQorCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOwor
CWlmIChpbl9yKQorCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXks
IGdhcCk7CisJaWYgKFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25y
X21hcCkpIHsKKwkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKKwl9CisJ
aWYgKHRzbiA9PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSB7CisJCS8qIFdlIG11c3Qg
YmFjayBkb3duIHRvIHNlZSB3aGF0IHRoZSBuZXcgaGlnaGVzdCBpcyAqLworCQlmb3IgKGkgPSB0
c24gLSAxOyBTQ1RQX1RTTl9HRShpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsgaS0t
KSB7CisJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGksIGFzb2MtPm1hcHBpbmdfYXJyYXlf
YmFzZV90c24pOworCQkJaWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJh
eSwgZ2FwKSkgeworCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBpOworCQkJCWZu
ZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmbmQpIHsKKwkJCWFzb2MtPmhp
Z2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuIC0gMTsK
KwkJfQorCX0KK30KKworc3RhdGljIGludAorc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShz
dHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm0sCisJCQkgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLAorCQkJICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkK
K3sKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqYXQ7CisJc3RydWN0IHNjdHBfcmVhZGhl
YWQgKnE7CisJdWludDhfdCBmbGFncywgdW5vcmRlcmVkOworCisJZmxhZ3MgPSAoY29udHJvbC0+
c2luZm9fZmxhZ3MgPj4gOCk7CisJdW5vcmRlcmVkID0gZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRF
UkVEOworCWlmICh1bm9yZGVyZWQpIHsKKwkJcSA9ICZzdHJtLT51bm9faW5xdWV1ZTsKKwkJaWYg
KGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7CisJCQlpZiAoIVRBSUxRX0VNUFRZKHEpKSB7
CisJCQkJLyogT25seSBvbmUgc3RyZWFtIGNhbiBiZSBoZXJlIGluIG9sZCBzdHlsZSAgLS0gYWJv
cnQgKi8KKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCVRBSUxRX0lOU0VSVF9UQUlMKHEsIGNv
bnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IFNDVFBfT05fVU5P
UkRFUkVEOworCQkJcmV0dXJuICgwKTsKKwkJfQorCX0gZWxzZSB7CisJCXEgPSAmc3RybS0+aW5x
dWV1ZTsKKwl9CisJaWYgKChmbGFncyAmIFNDVFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9EQVRB
X05PVF9GUkFHKSB7CisJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7CisJCWNvbnRyb2wtPmZpcnN0
X2ZyYWdfc2VlbiA9IDE7CisJCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID0gMTsKKwl9CisJaWYg
KFRBSUxRX0VNUFRZKHEpKSB7CisJCS8qIEVtcHR5IHF1ZXVlICovCisJCVRBSUxRX0lOU0VSVF9I
RUFEKHEsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJaWYgKHVub3JkZXJlZCkgeworCQkJY29u
dHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQ7CisJCX0gZWxzZSB7CisJCQljb250
cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX09SREVSRUQ7CisJCX0KKwkJcmV0dXJuICgwKTsKKwl9
IGVsc2UgeworCQlUQUlMUV9GT1JFQUNIKGF0LCBxLCBuZXh0X2luc3RybSkgeworCQkJaWYgKFND
VFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXQtPm1pZCwgY29udHJvbC0+bWlkKSkg
eworCQkJCS8qCisJCQkJICogb25lIGluIHF1ZXVlIGlzIGJpZ2dlciB0aGFuIHRoZQorCQkJCSAq
IG5ldyBvbmUsIGluc2VydCBiZWZvcmUgdGhpcyBvbmUKKwkJCQkgKi8KKwkJCQlUQUlMUV9JTlNF
UlRfQkVGT1JFKGF0LCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJaWYgKHVub3JkZXJlZCkg
eworCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JERVJFRDsKKwkJCQl9IGVs
c2UgeworCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX09SREVSRUQgOworCQkJCX0K
KwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9y
dGVkLCBhdC0+bWlkLCBjb250cm9sLT5taWQpKSB7CisJCQkJLyoKKwkJCQkgKiBHYWssIEhlIHNl
bnQgbWUgYSBkdXBsaWNhdGUgbXNnCisJCQkJICogaWQgbnVtYmVyPz8gcmV0dXJuIC0xIHRvIGFi
b3J0LgorCQkJCSAqLworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoVEFJ
TFFfTkVYVChhdCwgbmV4dF9pbnN0cm0pID09IE5VTEwpIHsKKwkJCQkJLyoKKwkJCQkJICogV2Ug
YXJlIGF0IHRoZSBlbmQsIGluc2VydAorCQkJCQkgKiBpdCBhZnRlciB0aGlzIG9uZQorCQkJCQkg
Ki8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
U1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19zdHJtX2RlbChjb250cm9sLCBh
dCwKKwkJCQkJCQkJICBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNFUlRfVEwpOworCQkJCQl9CisJCQkJ
CVRBSUxRX0lOU0VSVF9BRlRFUihxLCBhdCwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQlp
ZiAodW5vcmRlcmVkKSB7CisJCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JE
RVJFRCA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09O
X09SREVSRUQgOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwly
ZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9hYm9ydF9pbl9yZWFzbShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGssCisgICAgICAgICAgICAgICAgICAgIGludCAqYWJvcnRfZmxhZywgaW50IG9wc3Bv
dCkKK3sKKwljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCXN0cnVjdCBtYnVmICpvcGVy
OworCisJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7CisJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksCisJCQkgIlJlYXNzICV4LENGOiV4LFRTTj0lOC44eCxTSUQ9JTQuNHgsRlNO
PSU4Ljh4LE1JRDolOC44eCIsCisJCQkgb3BzcG90LAorCQkJIGNvbnRyb2wtPmZzbl9pbmNsdWRl
ZCwKKwkJCSBjaGstPnJlYy5kYXRhLnRzbiwKKwkJCSBjaGstPnJlYy5kYXRhLnNpZCwKKwkJCSBj
aGstPnJlYy5kYXRhLmZzbiwgY2hrLT5yZWMuZGF0YS5taWQpOworCX0gZWxzZSB7CisJCXNucHJp
bnRmKG1zZywgc2l6ZW9mKG1zZyksCisJCQkgIlJlYXNzICV4LENJOiV4LFRTTj0lOC44eCxTSUQ9
JTQuNHgsRlNOPSU0LjR4LFNTTjolNC40eCIsCisJCQkgb3BzcG90LAorCQkJIGNvbnRyb2wtPmZz
bl9pbmNsdWRlZCwKKwkJCSBjaGstPnJlYy5kYXRhLnRzbiwKKwkJCSBjaGstPnJlYy5kYXRhLnNp
ZCwKKwkJCSBjaGstPnJlYy5kYXRhLmZzbiwKKwkJCSAodWludDE2X3QpY2hrLT5yZWMuZGF0YS5t
aWQpOworCX0KKwlvcGVyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09M
X1ZJT0xBVElPTiwgbXNnKTsKKwlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwljaGstPmRhdGEg
PSBOVUxMOworCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRB
VEEgKyBTQ1RQX0xPQ18xOworCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9l
cCwgc3RjYiwgb3BlciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkqYWJvcnRfZmxhZyA9IDE7Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2NsZWFuX3VwX2NvbnRyb2woc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkKK3sKKwkvKiAKKwkgKiBU
aGUgY29udHJvbCBjb3VsZCBub3QgYmUgcGxhY2VkIGFuZCBtdXN0IGJlIGNsZWFuZWQuCisJICov
CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlUQUlMUV9GT1JFQUNIX1NB
RkUoY2hrLCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCwgbmNoaykgeworCQlUQUlMUV9SRU1P
VkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChjaGstPmRhdGEpCisJ
CQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJc2N0cF9m
cmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwlzY3RwX2Zy
ZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsJCit9CisKKy8qCisgKiBRdWV1ZSB0aGUgY2h1bmsg
ZWl0aGVyIHJpZ2h0IGludG8gdGhlIHNvY2tldCBidWZmZXIgaWYgaXQgaXMgdGhlIG5leHQgb25l
CisgKiB0byBnbyBPUiBwdXQgaXQgaW4gdGhlIGNvcnJlY3QgcGxhY2UgaW4gdGhlIGRlbGl2ZXJ5
IHF1ZXVlLiAgSWYgd2UgZG8KKyAqIGFwcGVuZCB0byB0aGUgc29fYnVmLCBrZWVwIGRvaW5nIHNv
IHVudGlsIHdlIGFyZSBvdXQgb2Ygb3JkZXIgYXMKKyAqIGxvbmcgYXMgdGhlIGNvbnRyb2wncyBl
bnRlcmVkIGFyZSBub24tZnJhZ21lbnRlZC4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfcXVldWVf
ZGF0YV90b19zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
LCBpbnQgKmFib3J0X2ZsYWcsIGludCAqbmVlZF9yZWFzbSkKK3sKKwkvKgorCSAqIEZJWC1NRSBt
YXliZT8gV2hhdCBoYXBwZW5zIHdoZW4gdGhlIHNzbiB3cmFwcz8gSWYgd2UgYXJlIGdldHRpbmcK
KwkgKiBhbGwgdGhlIGRhdGEgaW4gb25lIHN0cmVhbSB0aGlzIGNvdWxkIGhhcHBlbiBxdWl0ZSBy
YXBpZGx5LiBPbmUKKwkgKiBjb3VsZCB1c2UgdGhlIFRTTiB0byBrZWVwIHRyYWNrIG9mIHRoaW5n
cywgYnV0IHRoaXMgc2NoZW1lIGJyZWFrcworCSAqIGRvd24gaW4gdGhlIG90aGVyIHR5cGUgb2Yg
c3RyZWFtIHVzYWdlIHRoYXQgY291bGQgb2NjdXIuIFNlbmQgYQorCSAqIHNpbmdsZSBtc2cgdG8g
c3RyZWFtIDAsIHNlbmQgNEJpbGxpb24gbWVzc2FnZXMgdG8gc3RyZWFtIDEsIG5vdworCSAqIHNl
bmQgYSBtZXNzYWdlIHRvIHN0cmVhbSAwLiBZb3UgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUg
VFNOCisJICogaGFzIHdyYXBwZWQgYnV0IG5vdCBpbiB0aGUgc3RyZWFtLiBJcyB0aGlzIHdvcnRo
IHdvcnJ5aW5nIGFib3V0CisJICogb3Igc2hvdWxkIHdlIGp1c3QgY2hhbmdlIG91ciBxdWV1ZSBz
b3J0IGF0IHRoZSBib3R0b20gdG8gYmUgYnkKKwkgKiBUU04uCisJICoKKwkgKiBDb3VsZCBpdCBh
bHNvIGJlIGxlZ2FsIGZvciBhIHBlZXIgdG8gc2VuZCBzc24gMSB3aXRoIFRTTiAyIGFuZCBzc24g
MgorCSAqIHdpdGggVFNOIDE/IElmIHRoZSBwZWVyIGlzIGRvaW5nIHNvbWUgc29ydCBvZiBmdW5r
eSBUU04vU1NOCisJICogYXNzaWdubWVudCB0aGlzIGNvdWxkIGhhcHBlbi4uLiBhbmQgSSBkb24n
dCBzZWUgaG93IHRoaXMgd291bGQgYmUKKwkgKiBhIHZpb2xhdGlvbi4gU28gZm9yIG5vdyBJIGFt
IHVuZGVjaWRlZCBhbiB3aWxsIGxlYXZlIHRoZSBzb3J0IGJ5CisJICogU1NOIGFsb25lLiBNYXli
ZSBhIGh5YnJlZCBhcHByb2FjaCBpcyB0aGUgYW5zd2VyCisJICoKKwkgKi8KKwlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqYXQ7CisJaW50IHF1ZXVlX25lZWRlZDsKKwl1aW50MzJfdCBueHRf
dG9kZWw7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0
cm07CisJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCXN0cm0gPSAmYXNvYy0+c3Ry
bWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV07CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX3N0
cm1fZGVsKGNvbnRyb2wsIE5VTEwsIFNDVFBfU1RSX0xPR19GUk9NX0lOVE9fU1RSRCk7CisJfQor
CWlmIChTQ1RQX01JRF9HVCgoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSwgc3RybS0+bGFzdF9taWRf
ZGVsaXZlcmVkLCBjb250cm9sLT5taWQpKSB7CisJCS8qIFRoZSBpbmNvbWluZyBzc2VxIGlzIGJl
aGluZCB3aGVyZSB3ZSBsYXN0IGRlbGl2ZXJlZD8gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
REFUQTEsICJEdXBsaWNhdGUgUy1TRVE6ICV1IGRlbGl2ZXJlZDogJXUgZnJvbSBwZWVyLCBBYm9y
dCBhc3NvY2lhdGlvblxuIiwKKwkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCwgY29udHJvbC0+
bWlkKTsKKwkJLyoKKwkJICogdGhyb3cgaXQgaW4gdGhlIHN0cmVhbSBzbyBpdCBnZXRzIGNsZWFu
ZWQgdXAgaW4KKwkJICogYXNzb2NpYXRpb24gZGVzdHJ1Y3Rpb24KKwkJICovCisJCVRBSUxRX0lO
U0VSVF9IRUFEKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChh
c29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJE
ZWxpdmVyZWQgTUlEPSU4Ljh4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9JTQuNHgsIE1JRD0lOC44eCIs
CisJCQkgICAgICAgICBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQsIGNvbnRyb2wtPnNpbmZvX3Rz
biwKKwkJCSAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3N0cmVhbSwgY29udHJvbC0+bWlkKTsKKwkJ
fSBlbHNlIHsKKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgU1NOPSU0
LjR4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9JTQuNHgsIFNTTj0lNC40eCIsCisJCQkgICAgICAgICAo
dWludDE2X3Qpc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLAorCQkJICAgICAgICAgY29udHJvbC0+
c2luZm9fdHNuLAorCQkJICAgICAgICAgY29udHJvbC0+c2luZm9fc3RyZWFtLAorCQkJICAgICAg
ICAgKHVpbnQxNl90KWNvbnRyb2wtPm1pZCk7CisJCX0KKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJc3RjYi0+c2N0
cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0Nf
MjsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9l
cnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuOwor
CisJfQorCXF1ZXVlX25lZWRlZCA9IDE7CisJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyArPSBj
b250cm9sLT5sZW5ndGg7CisJc2N0cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fYWxsX3N0cmVh
bXMpOworCW54dF90b2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJaWYgKFND
VFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbnh0X3RvZGVsLCBjb250cm9sLT5taWQp
KSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKwkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCXJldHVybjsKKwkJ
fQorI2VuZGlmCisJCS8qIGNhbiBiZSBkZWxpdmVyZWQgcmlnaHQgYXdheT8gKi8KKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5B
QkxFKSB7CisJCQlzY3RwX2xvZ19zdHJtX2RlbChjb250cm9sLCBOVUxMLCBTQ1RQX1NUUl9MT0df
RlJPTV9JTU1FRF9ERUwpOworCQl9CisJCS8qIEVZIGl0IHdvbnQgYmUgcXVldWVkIGlmIGl0IGNv
dWxkIGJlIGRlbGl2ZXJlZCBkaXJlY3RseSAqLworCQlxdWV1ZV9uZWVkZWQgPSAwOworCQlpZiAo
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKKwkJCWFzb2Mt
PnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQl9IGVsc2UgeworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxl
ciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29u
dHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsK
KyNlbmRpZgorCQl9CisJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1z
KTsKKwkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkKys7CisJCXNjdHBfbWFya19ub25fcmV2b2th
YmxlKGFzb2MsIGNvbnRyb2wtPnNpbmZvX3Rzbik7CisJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsCisJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCisJCSAgICAgICAg
ICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAorCQkgICAgICAgICAgICAg
ICAgICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19MT0NLRUQpOworCQlUQUlMUV9G
T1JFQUNIX1NBRkUoY29udHJvbCwgJnN0cm0tPmlucXVldWUsIG5leHRfaW5zdHJtLCBhdCkgewor
CQkJLyogYWxsIGRlbGl2ZXJlZCAqLworCQkJbnh0X3RvZGVsID0gc3RybS0+bGFzdF9taWRfZGVs
aXZlcmVkICsgMTsKKwkJCWlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG54
dF90b2RlbCwgY29udHJvbC0+bWlkKSAmJgorCQkJICAgICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdz
ID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpKSB7CisJ
CQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJVEFJ
TFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCWlm
IChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJ
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxz
ZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMg
PSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9z
dHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxs
X3N0cmVhbXMgPSAwOworI2VuZGlmCisJCQkJCX0KKwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29j
LT5jbnRfb25fYWxsX3N0cmVhbXMpOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQl9IGVsc2Ugewor
CQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIGlzIG9uX3N0cm1fcTogJWQiLAorCQkJCQkgICAg
ICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQkJfQorCQkJCWNvbnRy
b2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkKys7CisJCQkJ
LyoKKwkJCQkgKiBXZSBpZ25vcmUgdGhlIHJldHVybiBvZiBkZWxpdmVyX2RhdGEgaGVyZQorCQkJ
CSAqIHNpbmNlIHdlIGFsd2F5cyBjYW4gaG9sZCB0aGUgY2h1bmsgb24gdGhlCisJCQkJICogZC1x
dWV1ZS4gQW5kIHdlIGhhdmUgYSBmaW5pdGUgbnVtYmVyIHRoYXQKKwkJCQkgKiBjYW4gYmUgZGVs
aXZlcmVkIGZyb20gdGhlIHN0cnEuCisJCQkJICovCisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNj
dHBfbG9nX3N0cm1fZGVsKGNvbnRyb2wsIE5VTEwsCisJCQkJCQkJICBTQ1RQX1NUUl9MT0dfRlJP
TV9JTU1FRF9ERUwpOworCQkJCX0KKwkJCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBj
b250cm9sLT5zaW5mb190c24pOworCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsCisJCQkJICAgICAgICAgICAgICAgICAgY29udHJvbCwKKwkJCQkgICAgICAgICAgICAg
ICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkJCQkgICAgICAgICAgICAgICAg
ICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKKwkJCQkgICAgICAgICAgICAgICAgICBTQ1RQX1NP
X0xPQ0tFRCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKFNDVFBfTUlEX0VRKGFzb2Mt
PmlkYXRhX3N1cHBvcnRlZCwgbnh0X3RvZGVsLCBjb250cm9sLT5taWQpKSB7CisJCQkJKm5lZWRf
cmVhc20gPSAxOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCAxKTsKKyNlbmRpZgorCX0KKwlpZiAocXVldWVfbmVlZGVkKSB7CisJCS8qCisJCSAqIE9rLCB3
ZSBkaWQgbm90IGRlbGl2ZXIgdGhpcyBndXksIGZpbmQgdGhlIGNvcnJlY3QgcGxhY2UKKwkJICog
dG8gcHV0IGl0IG9uIHRoZSBxdWV1ZS4KKwkJICovCisJCWlmIChzY3RwX3BsYWNlX2NvbnRyb2xf
aW5fc3RyZWFtKHN0cm0sIGFzb2MsIGNvbnRyb2wpKSB7CisJCQlzbnByaW50Zihtc2csIHNpemVv
Zihtc2cpLAorCQkJCSAiUXVldWUgdG8gc3RyIE1JRDogJXUgZHVwbGljYXRlIiwKKwkJCQkgY29u
dHJvbC0+bWlkKTsKKwkJCXNjdHBfY2xlYW5fdXBfY29udHJvbChzdGNiLCBjb250cm9sKTsKKwkJ
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJ
T04sIG1zZyk7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01f
U0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zOworCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihz
dGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkqYWJv
cnRfZmxhZyA9IDE7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfc2V0dXBfdGFp
bF9wb2ludGVyKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sKQoreworCXN0cnVj
dCBtYnVmICptLCAqcHJldiA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJc3Rj
YiA9IGNvbnRyb2wtPnN0Y2I7CisJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOworCWNvbnRyb2wt
Pmxlbmd0aCA9IDA7CisJbSA9IGNvbnRyb2wtPmRhdGE7CisJd2hpbGUgKG0pIHsKKwkJaWYgKFND
VFBfQlVGX0xFTihtKSA9PSAwKSB7CisJCQkvKiBTa2lwIG1idWZzIHdpdGggTk8gbGVuZ3RoICov
CisJCQlpZiAocHJldiA9PSBOVUxMKSB7CisJCQkJLyogRmlyc3Qgb25lICovCisJCQkJY29udHJv
bC0+ZGF0YSA9IHNjdHBfbV9mcmVlKG0pOworCQkJCW0gPSBjb250cm9sLT5kYXRhOworCQkJfSBl
bHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHByZXYpID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9
IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJY29u
dHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCXByZXYg
PSBtOworCQlhdG9taWNfYWRkX2ludCgmY29udHJvbC0+bGVuZ3RoLCBTQ1RQX0JVRl9MRU4obSkp
OworCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkvKgorCQkJICogT24gcmVhZCBxdWV1
ZSBzbyB3ZSBtdXN0IGluY3JlbWVudCB0aGUKKwkJCSAqIFNCIHN0dWZmLCB3ZSBhc3N1bWUgY2Fs
bGVyIGhhcyBkb25lIGFueSBsb2NrcyBvZiBTQi4KKwkJCSAqLworCQkJc2N0cF9zYmFsbG9jKHN0
Y2IsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBtKTsKKwkJfQorCQltID0gU0NUUF9CVUZf
TkVYVChtKTsKKwl9CisJaWYgKHByZXYpIHsKKwkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsK
Kwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2FkZF90b190YWlsX3BvaW50ZXIoc3RydWN0IHNj
dHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsIHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCAqYWRk
ZWQpCit7CisJc3RydWN0IG1idWYgKnByZXY9TlVMTDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7
CisKKwlzdGNiID0gY29udHJvbC0+c3RjYjsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCQlwYW5pYygiQ29udHJvbCBicm9rZW4iKTsKKyNlbHNlCisJCXJldHVybjsK
KyNlbmRpZgorCX0KKwlpZiAoY29udHJvbC0+dGFpbF9tYnVmID09IE5VTEwpIHsKKwkJLyogVFNO
SCAqLworCQljb250cm9sLT5kYXRhID0gbTsKKwkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29u
dHJvbCk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+dGFpbF9tYnVmLT5tX25leHQgPSBtOwor
CXdoaWxlIChtKSB7CisJCWlmIChTQ1RQX0JVRl9MRU4obSkgPT0gMCkgeworCQkJLyogU2tpcCBt
YnVmcyB3aXRoIE5PIGxlbmd0aCAqLworCQkJaWYgKHByZXYgPT0gTlVMTCkgeworCQkJCS8qIEZp
cnN0IG9uZSAqLworCQkJCWNvbnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0ID0gc2N0cF9tX2ZyZWUo
bSk7CisJCQkJbSA9IGNvbnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0OworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0JVRl9ORVhUKHByZXYpID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IFNDVFBfQlVG
X05FWFQocHJldik7CisJCQl9CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJY29udHJvbC0+dGFp
bF9tYnVmID0gcHJldjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCXByZXYgPSBtOworCQlp
ZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkvKgorCQkJICogT24gcmVhZCBxdWV1ZSBzbyB3
ZSBtdXN0IGluY3JlbWVudCB0aGUKKwkJCSAqIFNCIHN0dWZmLCB3ZSBhc3N1bWUgY2FsbGVyIGhh
cyBkb25lIGFueSBsb2NrcyBvZiBTQi4KKwkJCSAqLworCQkJc2N0cF9zYmFsbG9jKHN0Y2IsICZz
dGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBtKTsKKwkJfQorCQkqYWRkZWQgKz0gU0NUUF9CVUZf
TEVOKG0pOworCQlhdG9taWNfYWRkX2ludCgmY29udHJvbC0+bGVuZ3RoLCBTQ1RQX0JVRl9MRU4o
bSkpOworCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwl9CisJaWYgKHByZXYpIHsKKwkJY29udHJv
bC0+dGFpbF9tYnVmID0gcHJldjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIAorc2N0cF9idWlsZF9y
ZWFkcV9lbnRyeV9mcm9tX2N0bChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqbmMsIHN0cnVj
dCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sKQoreworCW1lbXNldChuYywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKSk7CisJbmMtPnNpbmZvX3N0cmVhbSA9IGNvbnRy
b2wtPnNpbmZvX3N0cmVhbTsKKwluYy0+bWlkID0gY29udHJvbC0+bWlkOworCVRBSUxRX0lOSVQo
Jm5jLT5yZWFzbSk7CisJbmMtPnRvcF9mc24gPSBjb250cm9sLT50b3BfZnNuOworCW5jLT5taWQg
PSBjb250cm9sLT5taWQ7CisJbmMtPnNpbmZvX2ZsYWdzID0gY29udHJvbC0+c2luZm9fZmxhZ3M7
CisJbmMtPnNpbmZvX3BwaWQgPSBjb250cm9sLT5zaW5mb19wcGlkOworCW5jLT5zaW5mb19jb250
ZXh0ID0gY29udHJvbC0+c2luZm9fY29udGV4dDsKKwluYy0+ZnNuX2luY2x1ZGVkID0gMHhmZmZm
ZmZmZjsKKwluYy0+c2luZm9fdHNuID0gY29udHJvbC0+c2luZm9fdHNuOworCW5jLT5zaW5mb19j
dW10c24gPSBjb250cm9sLT5zaW5mb19jdW10c247CisJbmMtPnNpbmZvX2Fzc29jX2lkID0gY29u
dHJvbC0+c2luZm9fYXNzb2NfaWQ7CisJbmMtPndob0Zyb20gPSBjb250cm9sLT53aG9Gcm9tOwor
CWF0b21pY19hZGRfaW50KCZuYy0+d2hvRnJvbS0+cmVmX2NvdW50LCAxKTsKKwluYy0+c3RjYiA9
IGNvbnRyb2wtPnN0Y2I7CisJbmMtPnBvcnRfZnJvbSA9IGNvbnRyb2wtPnBvcnRfZnJvbTsKK30K
Kworc3RhdGljIHZvaWQgCitzY3RwX3Jlc2V0X2FfY29udHJvbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHVpbnQzMl90IHRzbikKK3sKKwljb250cm9sLT5mc25faW5jbHVkZWQgPSB0c247CisJ
aWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgeworCQkvKiAKKwkJICogV2UgaGF2ZSB0byBwdXJnZSBp
dCBmcm9tIHRoZXJlLAorCQkgKiBob3BlZnVsbHkgdGhpcyB3aWxsIHdvcmsgOi0pCisJCSAqLwor
CQlUQUlMUV9SRU1PVkUoJmlucC0+cmVhZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCWNvbnRy
b2wtPm9uX3JlYWRfcSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9vbGRf
dW5vcmRlcmVkX2RhdGEoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJv
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwZF9wb2ludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wX3JlYWRfbG9ja19oZWxkKQorewor
CS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSBvbGQgdW4tb3JkZXJlZCBkYXRhIGNodW5rLgor
CSAqIEFsbCB0aGUgY2h1bmtzL1RTTidzIGdvIHRvIG1pZCAwLiBTbworCSAqIHdlIGhhdmUgdG8g
ZG8gdGhlIG9sZCBzdHlsZSB3YXRjaGluZyB0byBzZWUKKwkgKiBpZiB3ZSBoYXZlIGl0IGFsbC4g
SWYgeW91IHJldHVybiBvbmUsIG5vIG90aGVyCisJICogY29udHJvbCBlbnRyaWVzIG9uIHRoZSB1
bi1vcmRlcmVkIHF1ZXVlIHdpbGwKKwkgKiBiZSBsb29rZWQgYXQuIEluIHRoZW9yeSB0aGVyZSBz
aG91bGQgYmUgbm8gb3RoZXJzCisJICogZW50cmllcyBpbiByZWFsaXR5LCB1bmxlc3MgdGhlIGd1
eSBpcyBzZW5kaW5nIGJvdGgKKwkgKiB1bm9yZGVyZWQgTkRBVEEgYW5kIHVub3JkZXJlZCBEQVRB
Li4uCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbGNoaywgKnRjaGs7CisJ
dWludDMyX3QgZnNuOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpuYzsKKwlpbnQgY250
X2FkZGVkOworCisJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbiA9PSAwKSB7CisJCS8qIE5v
dGhpbmcgd2UgY2FuIGRvLCB3ZSBoYXZlIG5vdCBzZWVuIHRoZSBmaXJzdCBwaWVjZSB5ZXQgKi8K
KwkJcmV0dXJuICgxKTsKKwl9CisJLyogQ29sbGFwc2UgYW55IHdlIGNhbiAqLworCWNudF9hZGRl
ZCA9IDA7CityZXN0YXJ0OgorCWZzbiA9IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCArIDE7CisJLyog
Tm93IHdoYXQgY2FuIHdlIGFkZD8gKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJv
bC0+cmVhc20sIHNjdHBfbmV4dCwgbGNoaykgeworCQlpZiAoY2hrLT5yZWMuZGF0YS5mc24gPT0g
ZnNuKSB7CisJCQkvKiBPayBsZXRzIGFkZCBpdCAqLworCQkJc2N0cF9hbGxvY19hX3JlYWRxKHN0
Y2IsIG5jKTsKKwkJCWlmIChuYyA9PSBOVUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQltZW1z
ZXQobmMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCkpOworCQkJVEFJTFFf
UkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOworCQkJc2N0cF9hZGRfY2hr
X3RvX2NvbnRyb2woY29udHJvbCwgc3RybSwgc3RjYiwgYXNvYywgY2hrLCBTQ1RQX1JFQURfTE9D
S19OT1RfSEVMRCk7CisJCQlmc24rKzsKKwkJCWNudF9hZGRlZCsrOworCQkJY2hrID0gTlVMTDsK
KwkJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCQkvKiBXZSBhcmUgZG9uZSAqLworCQkJ
CWlmICghVEFJTFFfRU1QVFkoJmNvbnRyb2wtPnJlYXNtKSkgeworCQkJCQkvKiAKKwkJCQkJICog
T2sgd2UgaGF2ZSB0byBtb3ZlIGFueXRoaW5nIGxlZnQgb24KKwkJCQkJICogdGhlIGNvbnRyb2wg
cXVldWUgdG8gYSBuZXcgY29udHJvbC4KKwkJCQkJICovCisJCQkJCXNjdHBfYnVpbGRfcmVhZHFf
ZW50cnlfZnJvbV9jdGwobmMsIGNvbnRyb2wpOworCQkJCQl0Y2hrID0gVEFJTFFfRklSU1QoJmNv
bnRyb2wtPnJlYXNtKTsKKwkJCQkJaWYgKHRjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBf
REFUQV9GSVJTVF9GUkFHKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCB0
Y2hrLCBzY3RwX25leHQpOworCQkJCQkJaWYgKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0g
dGNoay0+c2VuZF9zaXplKSB7CisJCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSAtPSB0
Y2hrLT5zZW5kX3NpemU7CisJCQkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJ
CXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0aGFuIGNodW5rIGxlbmd0
aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIHRjaGstPnNlbmRfc2l6ZSk7CisjZWxz
ZQorCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9IDA7CisjZW5kaWYKKwkJCQkJCX0K
KwkJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKKwkJCQkJ
CW5jLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQkJCQkJbmMtPmZzbl9pbmNsdWRlZCA9IHRjaGst
PnJlYy5kYXRhLmZzbjsKKwkJCQkJCW5jLT5kYXRhID0gdGNoay0+ZGF0YTsKKwkJCQkJCW5jLT5z
aW5mb19wcGlkID0gdGNoay0+cmVjLmRhdGEucHBpZDsKKwkJCQkJCW5jLT5zaW5mb190c24gPSB0
Y2hrLT5yZWMuZGF0YS50c247CisJCQkJCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCB0
Y2hrLT5yZWMuZGF0YS50c24pOworCQkJCQkJdGNoay0+ZGF0YSA9IE5VTEw7CisJCQkJCQlzY3Rw
X2ZyZWVfYV9jaHVuayhzdGNiLCB0Y2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQkJc2N0
cF9zZXR1cF90YWlsX3BvaW50ZXIobmMpOworCQkJCQkJdGNoayA9IFRBSUxRX0ZJUlNUKCZjb250
cm9sLT5yZWFzbSk7CisJCQkJCX0KKwkJCQkJLyogU3BpbiB0aGUgcmVzdCBvbnRvIHRoZSBxdWV1
ZSAqLworCQkJCQl3aGlsZSAodGNoaykgeworCQkJCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5y
ZWFzbSwgdGNoaywgc2N0cF9uZXh0KTsKKwkJCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZuYy0+cmVh
c20sIHRjaGssIHNjdHBfbmV4dCk7CisJCQkJCQl0Y2hrID0gVEFJTFFfRklSU1QoJmNvbnRyb2wt
PnJlYXNtKTsKKwkJCQkJfQorCQkJCQkvKiBOb3cgbGV0cyBhZGQgaXQgdG8gdGhlIHF1ZXVlIGFm
dGVyIHJlbW92aW5nIGNvbnRyb2wgKi8KKwkJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPnVu
b19pbnF1ZXVlLCBuYywgbmV4dF9pbnN0cm0pOworCQkJCQluYy0+b25fc3RybV9xID0gU0NUUF9P
Tl9VTk9SREVSRUQ7CisJCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQkJCVRBSUxR
X1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQkJ
CWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKGNvbnRyb2wt
PnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJCQlj
b250cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQl9CisJCQkJaWYgKGNvbnRyb2wtPm9uX3N0
cm1fcSkgeworCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBu
ZXh0X2luc3RybSk7CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVI2NChzY3Rwc19yZWFzbXVzcm1zZ3MpOworCQkJCX0KKwkJCQlpZiAoY29u
dHJvbC0+b25fcmVhZF9xID09IDApIHsKKwkJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgY29udHJvbCwKKwkJCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCBjb250cm9sLT5lbmRfYWRkZWQsCisJCQkJCQkJICBpbnBfcmVhZF9sb2NrX2hlbGQsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCX0gZWxzZSB7
CisJCQkJCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29u
dHJvbCwgaW5wX3JlYWRfbG9ja19oZWxkKTsKKyNlbmRpZgorCQkJCX0KKwkJCQlzY3RwX3dha2V1
cF90aGVfcmVhZF9zb2NrZXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwkJCQlpZiAoKG5jLT5maXJzdF9mcmFnX3NlZW4pICYmICFUQUlMUV9FTVBUWSgmbmMtPnJl
YXNtKSkgeworCQkJCQkvKiBTd2l0Y2ggdG8gdGhlIG5ldyBndXkgYW5kIGNvbnRpbnVlICovCisJ
CQkJCWNvbnRyb2wgPSBuYzsKKwkJCQkJZ290byByZXN0YXJ0OworCQkJCX0gZWxzZSB7CisJCQkJ
CWlmIChuYy0+b25fc3RybV9xID09IDApIHsKKwkJCQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2Is
IG5jKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXR1cm4gKDEpOworCQkJfSBlbHNlIHsKKwkJCQlz
Y3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBuYyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBDYW4n
dCBhZGQgbW9yZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKChjb250cm9sLT5sZW5ndGgg
PiBwZF9wb2ludCkgJiYgKHN0cm0tPnBkX2FwaV9zdGFydGVkID09IDApKSB7CisJCXN0cm0tPnBk
X2FwaV9zdGFydGVkID0gMTsKKwkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDE7CisJCXNjdHBf
YWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCisJCSAgICAgICAgICAg
ICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRfYWRkZWQsCisJ
CSAgICAgICAgICAgICAgICAgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgx
KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2luamVjdF9vbGRfdW5vcmRlcmVkX2RhdGEo
c3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgKmFib3J0X2ZsYWcpCit7CisJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqYXQ7CisJaW50IGluc2VydGVkOworCS8qCisJICogSGVyZSB3ZSBuZWVkIHRvIHBs
YWNlIHRoZSBjaHVuayBpbnRvIHRoZSBjb250cm9sIHN0cnVjdHVyZQorCSAqIHNvcnRlZCBpbiB0
aGUgY29ycmVjdCBvcmRlci4KKwkgKi8KKwlpZiAoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBT
Q1RQX0RBVEFfRklSU1RfRlJBRykgeworCQkvKiBJdHMgdGhlIHZlcnkgZmlyc3Qgb25lLiAqLwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJImNodW5rIGlzIGEgZmlyc3QgZnNuOiAldSBi
ZWNvbWVzIGZzbl9pbmNsdWRlZFxuIiwKKwkJCWNoay0+cmVjLmRhdGEuZnNuKTsKKwkJaWYgKGNv
bnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgeworCQkJLyoKKwkJCSAqIEluIG9sZCB1bi1vcmRlcmVk
IHdlIGNhbiByZWFzc2VtYmx5IG9uCisJCQkgKiBvbmUgY29udHJvbCBtdWx0aXBsZSBtZXNzYWdl
cy4gQXMgbG9uZworCQkJICogYXMgdGhlIG5leHQgRklSU1QgaXMgZ3JlYXRlciB0aGVuIHRoZSBv
bGQKKwkJCSAqIGZpcnN0IChUU04gaS5lLiBGU04gd2lzZSkKKwkJCSAqLworCQkJc3RydWN0IG1i
dWYgKnRkYXRhOworCQkJdWludDMyX3QgdG1wOworCisJCQlpZiAoU0NUUF9UU05fR1QoY2hrLT5y
ZWMuZGF0YS5mc24sIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCkpIHsKKwkJCQkvKiBFYXN5IHdheSB0
aGUgc3RhcnQgb2YgYSBuZXcgZ3V5IGJleW9uZCB0aGUgbG93ZXN0ICovCisJCQkJZ290byBwbGFj
ZV9jaHVuazsKKwkJCX0KKwkJCWlmICgoY2hrLT5yZWMuZGF0YS5mc24gPT0gY29udHJvbC0+ZnNu
X2luY2x1ZGVkKSB8fAorCQkJICAgIChjb250cm9sLT5wZGFwaV9zdGFydGVkKSkgeworCQkJCS8q
IAorCQkJCSAqIE9rIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGlmIGl0IGRvZXMKKwkJCQkgKiB3
ZSBzdGFydGVkIHRoZSBwZC1hcGkgb24gdGhlIGhpZ2hlciBUU04gKHNpbmNlCisJCQkJICogdGhl
IGVxdWFscyBwYXJ0IGlzIGEgVFNOIGZhaWx1cmUgaXQgbXVzdCBiZSB0aGF0KS4KKwkJCQkgKgor
CQkJCSAqIFdlIGFyZSBjb21wbGV0bHkgaG9zZWQgaW4gdGhhdCBjYXNlIHNpbmNlIEkgaGF2ZQor
CQkJCSAqIG5vIHdheSB0byByZWNvdmVyLiBUaGlzIHJlYWxseSB3aWxsIG9ubHkgaGFwcGVuCisJ
CQkJICogaWYgd2UgY2FuIGdldCBtb3JlIFRTTidzIGhpZ2hlciBiZWZvcmUgdGhlIHBkLWFwaS1w
b2ludC4KKwkJCQkgKi8KKwkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNo
aywKKwkJCQkJCSAgICBhYm9ydF9mbGFnLAorCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFU
QSArIFNDVFBfTE9DXzQpOworCisJCQkJcmV0dXJuOworCQkJfQorCQkJLyoKKwkJCSAqIE9rIHdl
IGhhdmUgdHdvIGZpcnN0cyBhbmQgdGhlIG9uZSB3ZSBqdXN0IGdvdAorCQkJICogaXMgc21hbGxl
ciB0aGFuIHRoZSBvbmUgd2UgcHJldmlvdXNseSBwbGFjZWQuLiB5dWNrIQorCQkJICogV2UgbXVz
dCBzd2FwIHRoZW0gb3V0LgorCQkJICovCisJCQkvKiBzd2FwIHRoZSBtYnVmcyAqLworCQkJdGRh
dGEgPSBjb250cm9sLT5kYXRhOworCQkJY29udHJvbC0+ZGF0YSA9IGNoay0+ZGF0YTsKKwkJCWNo
ay0+ZGF0YSA9IHRkYXRhOworCQkJLyogU2F2ZSB0aGUgbGVuZ3RocyAqLworCQkJY2hrLT5zZW5k
X3NpemUgPSBjb250cm9sLT5sZW5ndGg7CisJCQkvKiBSZWNvbXB1dGUgbGVuZ3RoIG9mIGNvbnRy
b2wgYW5kIHRhaWwgcG9pbnRlciAqLworCQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJv
bCk7CisJCQkvKiBGaXggdGhlIEZTTiBpbmNsdWRlZCAqLworCQkJdG1wID0gY29udHJvbC0+ZnNu
X2luY2x1ZGVkOworCQkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247
CisJCQljaGstPnJlYy5kYXRhLmZzbiA9IHRtcDsKKwkJCS8qIEZpeCB0aGUgVFNOIGluY2x1ZGVk
ICovCisJCQl0bXAgPSBjb250cm9sLT5zaW5mb190c247CisJCQljb250cm9sLT5zaW5mb190c24g
PSBjaGstPnJlYy5kYXRhLnRzbjsKKwkJCWNoay0+cmVjLmRhdGEudHNuID0gdG1wOworCQkJLyog
Rml4IHRoZSBQUElEIGluY2x1ZGVkICovCisJCQl0bXAgPSBjb250cm9sLT5zaW5mb19wcGlkOwor
CQkJY29udHJvbC0+c2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJCWNoay0+cmVj
LmRhdGEucHBpZCA9IHRtcDsKKwkJCS8qIEZpeCB0YWlsIHBvaW50ZXIgKi8KKwkJCWdvdG8gcGxh
Y2VfY2h1bms7CisJCX0KKwkJY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJY29udHJv
bC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247CisJCWNvbnRyb2wtPnRvcF9mc24g
PSBjaGstPnJlYy5kYXRhLmZzbjsKKwkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0
YS50c247CisJCWNvbnRyb2wtPnNpbmZvX3BwaWQgPSBjaGstPnJlYy5kYXRhLnBwaWQ7CisJCWNv
bnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7CisJCXNjdHBfbWFya19ub25fcmV2b2thYmxlKGFzb2Ms
IGNoay0+cmVjLmRhdGEudHNuKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlzY3RwX3NldHVwX3RhaWxf
cG9pbnRlcihjb250cm9sKTsKKwkJcmV0dXJuOworCX0KK3BsYWNlX2NodW5rOgorCWluc2VydGVk
ID0gMDsKKwlUQUlMUV9GT1JFQUNIKGF0LCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCkgewor
CQlpZiAoU0NUUF9UU05fR1QoYXQtPnJlYy5kYXRhLmZzbiwgY2hrLT5yZWMuZGF0YS5mc24pKSB7
CisJCQkvKgorCQkJICogVGhpcyBvbmUgaW4gcXVldWUgaXMgYmlnZ2VyIHRoYW4gdGhlIG5ldyBv
bmUsIGluc2VydAorCQkJICogdGhlIG5ldyBvbmUgYmVmb3JlIGF0LgorCQkJICovCisJCQlhc29j
LT5zaXplX29uX3JlYXNtX3F1ZXVlICs9IGNoay0+c2VuZF9zaXplOworCQkJc2N0cF91Y291bnRf
aW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQkJaW5zZXJ0ZWQgPSAxOworCQkJVEFJ
TFFfSU5TRVJUX0JFRk9SRShhdCwgY2hrLCBzY3RwX25leHQpOworCQkJYnJlYWs7CisJCX0gZWxz
ZSBpZiAoYXQtPnJlYy5kYXRhLmZzbiA9PSBjaGstPnJlYy5kYXRhLmZzbikgeworCQkJLyogCisJ
CQkgKiBUaGV5IHNlbnQgYSBkdXBsaWNhdGUgZnNuIG51bWJlci4gVGhpcworCQkJICogcmVhbGx5
IHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHRoZSBGU04gaXMKKwkJCSAqIGEgVFNOIGFuZCBpdCBz
aG91bGQgaGF2ZSBiZWVuIGRyb3BwZWQgZWFybGllci4KKwkJCSAqLworCQkJc2N0cF9hYm9ydF9p
bl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCisJCQkgICAgICAgICAgICAgICAgICAgIGFib3J0
X2ZsYWcsCisJCQkgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFND
VFBfTE9DXzUpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisJaWYgKGluc2VydGVkID09IDApIHsK
KwkJLyogSXRzIGF0IHRoZSBlbmQgKi8KKwkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArPSBj
aGstPnNlbmRfc2l6ZTsKKwkJc2N0cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVl
dWUpOworCQljb250cm9sLT50b3BfZnNuID0gY2hrLT5yZWMuZGF0YS5mc247CisJCVRBSUxRX0lO
U0VSVF9UQUlMKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOworCX0KK30KKworc3Rh
dGljIGludAorc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtLCBpbnQgaW5wX3JlYWRfbG9ja19oZWxkKQorewor
CS8qCisJICogR2l2ZW4gYSBzdHJlYW0sIHN0cm0sIHNlZSBpZiBhbnkgb2YKKwkgKiB0aGUgU1NO
J3Mgb24gaXQgdGhhdCBhcmUgZnJhZ21lbnRlZAorCSAqIGFyZSByZWFkeSB0byBkZWxpdmVyLiBJ
ZiBzbyBnbyBhaGVhZAorCSAqIGFuZCBwbGFjZSB0aGVtIG9uIHRoZSByZWFkIHF1ZXVlLiBJbgor
CSAqIHNvIHBsYWNpbmcgaWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCwgdGhlbgorCSAqIHdlIG5lZWQg
dG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RyZWFtJ3MgcXVldWUuCisJICovCisJc3RydWN0IHNj
dHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsICpuY3RsID0gTlVMTDsKKwl1aW50MzJfdCBuZXh0
X3RvX2RlbDsKKwl1aW50MzJfdCBwZF9wb2ludDsKKwlpbnQgcmV0ID0gMDsKKworCWlmIChzdGNi
LT5zY3RwX3NvY2tldCkgeworCQlwZF9wb2ludCA9IG1pbihTQ1RQX1NCX0xJTUlUX1JDVihzdGNi
LT5zY3RwX3NvY2tldCkgPj4gU0NUUF9QQVJUSUFMX0RFTElWRVJZX1NISUZULAorCQkJICAgICAg
IHN0Y2ItPnNjdHBfZXAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQpOworCX0gZWxzZSB7CisJCXBk
X3BvaW50ID0gc3RjYi0+c2N0cF9lcC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsKKwl9CisJY29u
dHJvbCA9IFRBSUxRX0ZJUlNUKCZzdHJtLT51bm9faW5xdWV1ZSk7CisKKwlpZiAoKGNvbnRyb2wg
IT0gTlVMTCkgJiYKKwkgICAgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSkgeworCQkvKiBT
cGVjaWFsIGhhbmRsaW5nIG5lZWRlZCBmb3IgIm9sZCIgZGF0YSBmb3JtYXQgKi8KKwkJaWYgKHNj
dHBfaGFuZGxlX29sZF91bm9yZGVyZWRfZGF0YShzdGNiLCBhc29jLCBzdHJtLCBjb250cm9sLCBw
ZF9wb2ludCwgaW5wX3JlYWRfbG9ja19oZWxkKSkgeworCQkJZ290byBkb25lX3VuOworCQl9CisJ
fQorCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgeworCQkvKiBDYW4ndCBhZGQgbW9yZSAqLwor
CQlyZXR1cm4gKDApOworCX0KKwl3aGlsZSAoY29udHJvbCkgeworCQlTQ1RQREJHKFNDVFBfREVC
VUdfWFhYLCAiTG9va2luZyBhdCBjb250cm9sOiAlcCBlKCVkKSBzc246ICV1IHRvcF9mc246ICV1
IGluY19mc246ICV1IC11b1xuIiwKKwkJCWNvbnRyb2wsIGNvbnRyb2wtPmVuZF9hZGRlZCwgY29u
dHJvbC0+bWlkLCBjb250cm9sLT50b3BfZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQpOworCQlu
Y3RsID0gVEFJTFFfTkVYVChjb250cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChjb250cm9sLT5l
bmRfYWRkZWQpIHsKKwkJCS8qIFdlIGp1c3QgcHV0IHRoZSBsYXN0IGJpdCBvbiAqLworCQkJaWYg
KGNvbnRyb2wtPm9uX3N0cm1fcSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlpZiAoY29udHJv
bC0+b25fc3RybV9xICE9IFNDVFBfT05fVU5PUkRFUkVEICkgeworCQkJCQlwYW5pYygiSHVoIGNv
bnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCB1bm9yZGVyZWQ/IiwKKwkJCQkJICAgICAgY29udHJv
bCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlTQ1RQX1NUQVRfSU5D
Ul9DT1VOVEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQlUQUlMUV9SRU1PVkUoJnN0cm0t
PnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJY29udHJvbC0+b25fc3Ry
bV9xID0gMDsKKwkJCX0KKwkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgeworCQkJCXNj
dHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCQkgIGNvbnRyb2wsCisJ
CQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRfYWRkZWQsCisJ
CQkJCQkgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCX0KKwkJ
fSBlbHNlIHsKKwkJCS8qIENhbiB3ZSBkbyBhIFBELUFQSSBmb3IgdGhpcyB1bi1vcmRlcmVkIGd1
eT8gKi8KKwkJCWlmICgoY29udHJvbC0+bGVuZ3RoID49IHBkX3BvaW50KSAmJiAoc3RybS0+cGRf
YXBpX3N0YXJ0ZWQgPT0gMCkpIHsKKwkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDE7CisJCQkJ
Y29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDE7CisJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+
c2N0cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAgJnN0Y2ItPnNjdHBfc29j
a2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAgaW5wX3JlYWRfbG9ja19o
ZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJY29u
dHJvbCA9IG5jdGw7CisJfQorZG9uZV91bjoKKwljb250cm9sID0gVEFJTFFfRklSU1QoJnN0cm0t
PmlucXVldWUpOworCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgeworCQkvKiBDYW4ndCBhZGQg
bW9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCXJl
dHVybiAocmV0KTsKKwl9CisJaWYgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwg
c3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLCBjb250cm9sLT5taWQpKSB7CisJCS8qIE9rIHRoZSBn
dXkgYXQgdGhlIHRvcCB3YXMgYmVpbmcgcGFydGlhbGx5IGRlbGl2ZXJlZAorCQkgKiBjb21wbGV0
ZWQsIHNvIHdlIHJlbW92ZSBpdC4gTm90ZQorCQkgKiB0aGUgcGRfYXBpIGZsYWcgd2FzIHRha2Vu
IG9mZiB3aGVuIHRoZQorCQkgKiBjaHVuayB3YXMgbWVyZ2VkIG9uIGluIHNjdHBfcXVldWVfZGF0
YV9mb3JfcmVhc20gYmVsb3cuCisJCSAqLworCQluY3RsID0gVEFJTFFfTkVYVChjb250cm9sLCBu
ZXh0X2luc3RybSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkiTG9va2luZyBhdCBj
b250cm9sOiAlcCBlKCVkKSBzc246ICV1IHRvcF9mc246ICV1IGluY19mc246ICV1IChsYXN0ZGVs
OiAldSktIG9cbiIsCisJCQljb250cm9sLCBjb250cm9sLT5lbmRfYWRkZWQsIGNvbnRyb2wtPm1p
ZCwKKwkJCWNvbnRyb2wtPnRvcF9mc24sIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwKKwkJCXN0cm0t
Pmxhc3RfbWlkX2RlbGl2ZXJlZCk7CisJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCWlm
IChjb250cm9sLT5vbl9zdHJtX3EpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJaWYgKGNvbnRy
b2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX09SREVSRUQgKSB7CisJCQkJCXBhbmljKCJIdWggY29u
dHJvbDogJXAgb25fcTogJWQgLS0gbm90IG9yZGVyZWQ/IiwKKwkJCQkJICAgICAgY29udHJvbCwg
Y29udHJvbC0+b25fc3RybV9xKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlu
cXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxf
c3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3Ry
ZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJfSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRy
b2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3Ro
KTsKKyNlbHNlCisJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJ
CQkJfQorCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKKwkJ
CQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJfQorCQkJaWYgKHN0cm0tPnBkX2FwaV9zdGFy
dGVkICYmIGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQljb250cm9sLT5wZGFwaV9zdGFy
dGVkID0gMDsKKwkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7CisJCQl9CisJCQlpZiAoY29u
dHJvbC0+b25fcmVhZF9xID09IDApIHsKKwkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3Rw
X2VwLCBzdGNiLAorCQkJCQkJICBjb250cm9sLAorCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAorCQkJCQkJICBpbnBfcmVhZF9sb2NrX2hlbGQs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9CisJCQljb250cm9sID0gbmN0bDsKKwkJfQorCX0K
KwlpZiAoc3RybS0+cGRfYXBpX3N0YXJ0ZWQpIHsKKwkJLyogQ2FuJ3QgYWRkIG1vcmUgbXVzdCBo
YXZlIGdvdHRlbiBhbiB1bi1vcmRlcmVkIGFib3ZlIGJlaW5nIHBhcnRpYWxseSBkZWxpdmVyZWQu
ICovCisJCXJldHVybiAoMCk7CisJfQorZGVsaXZlcl9tb3JlOgorCW5leHRfdG9fZGVsID0gc3Ry
bS0+bGFzdF9taWRfZGVsaXZlcmVkICsgMTsKKwlpZiAoY29udHJvbCkgeworCQlTQ1RQREJHKFND
VFBfREVCVUdfWFhYLAorCQkJIkxvb2tpbmcgYXQgY29udHJvbDogJXAgZSglZCkgc3NuOiAldSB0
b3BfZnNuOiAldSBpbmNfZnNuOiAldSAobnh0ZGVsOiAldSktIG9cbiIsCisJCQljb250cm9sLCBj
b250cm9sLT5lbmRfYWRkZWQsIGNvbnRyb2wtPm1pZCwgY29udHJvbC0+dG9wX2ZzbiwgY29udHJv
bC0+ZnNuX2luY2x1ZGVkLAorCQkJbmV4dF90b19kZWwpOworCQluY3RsID0gVEFJTFFfTkVYVChj
b250cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIGNvbnRyb2wtPm1pZCwgbmV4dF90b19kZWwpICYmCisJCSAgICAoY29udHJvbC0+Zmly
c3RfZnJhZ19zZWVuKSkgeworCQkJaW50IGRvbmU7CisKKwkJCS8qIE9rIHdlIGNhbiBkZWxpdmVy
IGl0IG9udG8gdGhlIHN0cmVhbS4gKi8KKwkJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJ
CQkvKiBXZSBhcmUgZG9uZSB3aXRoIGl0IGFmdGVyd2FyZHMgKi8KKwkJCQlpZiAoY29udHJvbC0+
b25fc3RybV9xKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQlpZiAoY29udHJvbC0+b25fc3Ry
bV9xICE9IFNDVFBfT05fT1JERVJFRCApIHsKKwkJCQkJCXBhbmljKCJIdWggY29udHJvbDogJXAg
b25fcTogJWQgLS0gbm90IG9yZGVyZWQ/IiwKKwkJCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wt
Pm9uX3N0cm1fcSk7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
NjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVl
LCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJl
YW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJv
bCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgp
OworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJ
CQkJCX0KKwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOwor
CQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJCX0KKwkJCQlyZXQrKzsKKwkJCX0KKwkJ
CWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9
PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiBBIHNpbmdsZXRvbiBub3cgc2xpcHBpbmcg
dGhyb3VnaCAtIG1hcmsgaXQgbm9uLXJldm9rYWJsZSB0b28gKi8KKwkJCQlzY3RwX21hcmtfbm9u
X3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJfSBlbHNlIGlmIChjb250
cm9sLT5lbmRfYWRkZWQgPT0gMCkgeworCQkJCS8qIENoZWNrIGlmIHdlIGNhbiBkZWZlciBhZGRp
bmcgdW50aWwgaXRzIGFsbCB0aGVyZSAqLworCQkJCWlmICgoY29udHJvbC0+bGVuZ3RoIDwgcGRf
cG9pbnQpIHx8IChzdHJtLT5wZF9hcGlfc3RhcnRlZCkpIHsKKwkJCQkJLyogRG9uJ3QgbmVlZCBp
dCBvciBjYW5ub3QgYWRkIG1vcmUgKG9uZSBiZWluZyBkZWxpdmVyZWQgdGhhdCB3YXkpICovCisJ
CQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJCWRvbmUgPSAoY29udHJvbC0+ZW5kX2FkZGVk
KSAmJiAoY29udHJvbC0+bGFzdF9mcmFnX3NlZW4pOworCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRf
cSA9PSAwKSB7CisJCQkJaWYgKCFkb25lKSB7CisJCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9z
dHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3Ry
ZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29u
dHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5n
dGgpOworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlm
CisJCQkJCX0KKwkJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAxOworCQkJCQljb250cm9sLT5w
ZGFwaV9zdGFydGVkID0gMTsKKwkJCQl9CisJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0
LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxk
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVk
ID0gbmV4dF90b19kZWw7CisJCQlpZiAoZG9uZSkgeworCQkJCWNvbnRyb2wgPSBuY3RsOworCQkJ
CWdvdG8gZGVsaXZlcl9tb3JlOworCQkJfQorCQl9CisJfQorb3V0OgorCXJldHVybiAocmV0KTsK
K30KKworCit1aW50MzJfdAorc2N0cF9hZGRfY2hrX3RvX2NvbnRyb2woc3RydWN0IHNjdHBfcXVl
dWVkX3RvX3JlYWQgKmNvbnRyb2wsCisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm0sCisJ
CQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAor
CQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgaG9sZF9ybG9jaykKK3sKKwkvKgor
CSAqIEdpdmVuIGEgY29udHJvbCBhbmQgYSBjaHVuaywgbWVyZ2UgdGhlCisJICogZGF0YSBmcm9t
IHRoZSBjaGsgb250byB0aGUgY29udHJvbCBhbmQgZnJlZQorCSAqIHVwIHRoZSBjaHVuayByZXNv
dXJjZXMuCisJICovCisJdWludDMyX3QgYWRkZWQ9MDsKKwlpbnQgaV9sb2NrZWQgPSAwOworCisJ
aWYgKGNvbnRyb2wtPm9uX3JlYWRfcSAmJiAoaG9sZF9ybG9jayA9PSAwKSkgeworCQkvKgorCQkg
KiBJdHMgYmVpbmcgcGQtYXBpJ2Qgc28gd2UgbXVzdAorCQkgKiBkbyBzb21lIGxvY2tzLgorCQkg
Ki8KKwkJU0NUUF9JTlBfUkVBRF9MT0NLKHN0Y2ItPnNjdHBfZXApOworCQlpX2xvY2tlZCA9IDE7
CisJfQorCWlmIChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKKwkJY29udHJvbC0+ZGF0YSA9IGNo
ay0+ZGF0YTsKKwkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJvbCk7CisJfSBlbHNlIHsK
KwkJc2N0cF9hZGRfdG9fdGFpbF9wb2ludGVyKGNvbnRyb2wsIGNoay0+ZGF0YSwgJmFkZGVkKTsK
Kwl9CisJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247CisJYXNvYy0+
c2l6ZV9vbl9yZWFzbV9xdWV1ZSAtPSBjaGstPnNlbmRfc2l6ZTsKKwlzY3RwX3Vjb3VudF9kZWNy
KGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7CisJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNv
YywgY2hrLT5yZWMuZGF0YS50c24pOworCWNoay0+ZGF0YSA9IE5VTEw7CisJaWYgKGNoay0+cmVj
LmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJY29udHJvbC0+Zmly
c3RfZnJhZ19zZWVuID0gMTsKKwkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0YS50
c247CisJCWNvbnRyb2wtPnNpbmZvX3BwaWQgPSBjaGstPnJlYy5kYXRhLnBwaWQ7CisJfQorCWlm
IChjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJLyog
SXRzIGNvbXBsZXRlICovCisJCWlmICgoY29udHJvbC0+b25fc3RybV9xKSAmJiAoY29udHJvbC0+
b25fcmVhZF9xKSkgeworCQkJaWYgKGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQljb250
cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7CisJ
CQl9CisJCQlpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJ
CQkJLyogVW5vcmRlcmVkICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwg
Y29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQl9
IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkv
KiBPcmRlcmVkICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBu
ZXh0X2luc3RybSk7CisJCQkJLyoKKwkJCQkgKiBEb24ndCBuZWVkIHRvIGRlY3JlbWVudCBzaXpl
X29uX2FsbF9zdHJlYW1zLAorCQkJCSAqIHNpbmNlIGNvbnRyb2wgaXMgb24gdGhlIHJlYWQgcXVl
dWUuCisJCQkJICovCisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVh
bXMpOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJ
fSBlbHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQlwYW5pYygiVW5rbm93biBzdGF0
ZSBvbiBjdHJsOiAlcCBvbl9zdHJtX3E6ICVkIiwgY29udHJvbCwKKwkJCQkgICAgICBjb250cm9s
LT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQl9CisJCX0KKwkJY29udHJvbC0+ZW5kX2FkZGVkID0g
MTsKKwkJY29udHJvbC0+bGFzdF9mcmFnX3NlZW4gPSAxOworCX0KKwlpZiAoaV9sb2NrZWQpIHsK
KwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJfQorCXNjdHBfZnJlZV9h
X2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwlyZXR1cm4gKGFkZGVkKTsK
K30KKworLyoKKyAqIER1bXAgb250byB0aGUgcmUtYXNzZW1ibHkgcXVldWUsIGluIGl0cyBwcm9w
ZXIgcGxhY2UuIEFmdGVyIGR1bXBpbmcgb24gdGhlCisgKiBxdWV1ZSwgc2VlIGlmIGFudGhpbmcg
Y2FuIGJlIGRlbGl2ZXJlZC4gSWYgc28gcHVsbCBpdCBvZmYgKG9yIGFzIG11Y2ggYXMKKyAqIHdl
IGNhbi4gSWYgd2UgcnVuIG91dCBvZiBzcGFjZSB0aGVuIHdlIG11c3QgZHVtcCB3aGF0IHdlIGNh
biBhbmQgc2V0IHRoZQorICogYXBwcm9wcmlhdGUgZmxhZyB0byBzYXkgd2UgcXVldWVkIHdoYXQg
d2UgY291bGQuCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3F1ZXVlX2RhdGFfZm9yX3JlYXNtKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCQkg
IHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAorCQkJICBzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpjaGssCisJCQkgIGludCBjcmVhdGVkX2NvbnRyb2wsCisJCQkgIGludCAqYWJv
cnRfZmxhZywgdWludDMyX3QgdHNuKQoreworCXVpbnQzMl90IG5leHRfZnNuOworCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKmF0LCAqbmF0OworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsK
KwlpbnQgZG9fd2FrZXVwLCB1bm9yZGVyZWQ7CisJdWludDMyX3QgbGVuYWRkZWQ7CisKKwlzdHJt
ID0gJmFzb2MtPnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dOworCS8qCisJICogRm9yIG9s
ZCB1bi1vcmRlcmVkIGRhdGEgY2h1bmtzLgorCSAqLworCWlmICgoY29udHJvbC0+c2luZm9fZmxh
Z3MgPj4gOCkgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSB7CisJCXVub3JkZXJlZCA9IDE7CisJfSBl
bHNlIHsKKwkJdW5vcmRlcmVkID0gMDsKKwl9CisJLyogTXVzdCBiZSBhZGRlZCB0byB0aGUgc3Ry
ZWFtLWluIHF1ZXVlICovCisJaWYgKGNyZWF0ZWRfY29udHJvbCkgeworCQlpZiAodW5vcmRlcmVk
ID09IDApIHsKKwkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsK
KwkJfQorCQlpZiAoc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShzdHJtLCBhc29jLCBjb250
cm9sKSkgeworCQkJLyogRHVwbGljYXRlIFNTTj8gKi8KKwkJCXNjdHBfYWJvcnRfaW5fcmVhc20o
c3RjYiwgY29udHJvbCwgY2hrLAorCQkJCQkgICAgYWJvcnRfZmxhZywKKwkJCQkJICAgIFNDVFBf
RlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzYpOworCQkJc2N0cF9jbGVhbl91cF9jb250cm9s
KHN0Y2IsIGNvbnRyb2wpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgodHNuID09IChhc29jLT5j
dW11bGF0aXZlX3RzbiArIDEpICYmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkpKSB7CisJ
CQkvKiBPayB3ZSBjcmVhdGVkIHRoaXMgY29udHJvbCBhbmQgbm93CisJCQkgKiBsZXRzIHZhbGlk
YXRlIHRoYXQgaXRzIGxlZ2FsIGkuZS4gdGhlcmUKKwkJCSAqIGlzIGEgQiBiaXQgc2V0LCBpZiBu
b3QgYW5kIHdlIGhhdmUKKwkJCSAqIHVwIHRvIHRoZSBjdW0tYWNrIHRoZW4gaXRzIGludmFsaWQu
CisJCQkgKi8KKwkJCWlmICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklS
U1RfRlJBRykgPT0gMCkgeworCQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwg
Y2hrLAorCQkJCSAgICAgICAgICAgICAgICAgICAgYWJvcnRfZmxhZywKKwkJCQkgICAgICAgICAg
ICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzcpOworCQkJCXJldHVy
bjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJiAo
dW5vcmRlcmVkID09IDEpKSB7CisJCXNjdHBfaW5qZWN0X29sZF91bm9yZGVyZWRfZGF0YShzdGNi
LCBhc29jLCBjb250cm9sLCBjaGssIGFib3J0X2ZsYWcpOworCQlyZXR1cm47CisJfQorCS8qCisJ
ICogT2sgd2UgbXVzdCBxdWV1ZSB0aGUgY2h1bmsgaW50byB0aGUgcmVhc2VtYmx5IHBvcnRpb246
CisJICogIG8gaWYgaXRzIHRoZSBmaXJzdCBpdCBnb2VzIHRvIHRoZSBjb250cm9sIG1idWYuCisJ
ICogIG8gaWYgaXRzIG5vdCBmaXJzdCBidXQgdGhlIG5leHQgaW4gc2VxdWVuY2UgaXQgZ29lcyB0
byB0aGUgY29udHJvbCwKKwkgKiAgICBhbmQgZWFjaCBzdWNjZWVkaW5nIG9uZSBpbiBvcmRlciBh
bHNvIGdvZXMuCisJICogIG8gaWYgaXRzIG5vdCBpbiBvcmRlciB3ZSBwbGFjZSBpdCBvbiB0aGUg
bGlzdCBpbiBpdHMgcGxhY2UuCisJICovCisJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYg
U0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJLyogSXRzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4gKi8K
KwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJjaHVuayBpcyBhIGZpcnN0IGZzbjogJXUg
YmVjb21lcyBmc25faW5jbHVkZWRcbiIsCisJCQljaGstPnJlYy5kYXRhLmZzbik7CisJCWlmIChj
b250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKKwkJCS8qCisJCQkgKiBFcnJvciBvbiBzZW5kZXJz
IHBhcnQsIHRoZXkgZWl0aGVyCisJCQkgKiBzZW50IHVzIHR3byBkYXRhIGNodW5rcyB3aXRoIEZJ
UlNULAorCQkJICogb3IgdGhleSBzZW50IHR3byB1bi1vcmRlcmVkIGNodW5rcyB0aGF0CisJCQkg
KiB3ZXJlIGZyYWdtZW50ZWQgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUgc2FtZSBzdHJlYW0uCisJ
CQkgKi8KKwkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJICAg
ICAgICAgICAgICAgICAgICBhYm9ydF9mbGFnLAorCQkJICAgICAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ184KTsKKwkJCXJldHVybjsKKwkJfQorCQljb250
cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQljb250cm9sLT5zaW5mb19wcGlkID0gY2hrLT5y
ZWMuZGF0YS5wcGlkOworCQljb250cm9sLT5zaW5mb190c24gPSBjaGstPnJlYy5kYXRhLnRzbjsK
KwkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247CisJCWNvbnRyb2wt
PmRhdGEgPSBjaGstPmRhdGE7CisJCXNjdHBfbWFya19ub25fcmV2b2thYmxlKGFzb2MsIGNoay0+
cmVjLmRhdGEudHNuKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJc2N0cF9mcmVlX2FfY2h1bmso
c3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlzY3RwX3NldHVwX3RhaWxfcG9pbnRl
cihjb250cm9sKTsKKwkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyArPSBjb250cm9sLT5sZW5n
dGg7CisJfSBlbHNlIHsKKwkJLyogUGxhY2UgdGhlIGNodW5rIGluIG91ciBsaXN0ICovCisJCWlu
dCBpbnNlcnRlZD0wOworCQlpZiAoY29udHJvbC0+bGFzdF9mcmFnX3NlZW4gPT0gMCkgeworCQkJ
LyogU3RpbGwgd2lsbGluZyB0byByYWlzZSBoaWdoZXN0IEZTTiBzZWVuICovCisJCQlpZiAoU0NU
UF9UU05fR1QoY2hrLT5yZWMuZGF0YS5mc24sIGNvbnRyb2wtPnRvcF9mc24pKSB7CisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIldlIGhhdmUgYSBuZXcgdG9wX2ZzbjogJXVcbiIs
CisJCQkJCWNoay0+cmVjLmRhdGEuZnNuKTsKKwkJCQljb250cm9sLT50b3BfZnNuID0gY2hrLT5y
ZWMuZGF0YS5mc247CisJCQl9CisJCQlpZiAoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQ
X0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIlRo
ZSBsYXN0IGZzbiBpcyBub3cgaW4gcGxhY2UgZnNuOiAldVxuIiwKKwkJCQkJY2hrLT5yZWMuZGF0
YS5mc24pOworCQkJCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID0gMTsKKwkJCX0KKwkJCWlmIChh
c29jLT5pZGF0YV9zdXBwb3J0ZWQgfHwgY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSB7CisJCQkJ
LyogCisJCQkJICogRm9yIElEQVRBIHdlIGFsd2F5cyBjaGVjayBzaW5jZSB3ZSBrbm93IHRoYXQK
KwkJCQkgKiB0aGUgZmlyc3QgZnJhZ21lbnQgaXMgMC4gRm9yIG9sZCBEQVRBIHdlIGhhdmUKKwkJ
CQkgKiB0byByZWNlaXZlIHRoZSBmaXJzdCBiZWZvcmUgd2Uga25vdyB0aGUgZmlyc3QgRlNOCisJ
CQkJICogKHdoaWNoIGlzIHRoZSBUU04pLgorCQkJCSAqLworCQkJCWlmIChTQ1RQX1RTTl9HRShj
b250cm9sLT5mc25faW5jbHVkZWQsIGNoay0+cmVjLmRhdGEuZnNuKSkgeworCQkJCQkvKiBXZSBo
YXZlIGFscmVhZHkgZGVsaXZlcmVkIHVwIHRvIHRoaXMgc28gaXRzIGEgZHVwICovCisJCQkJCXNj
dHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJCQkJCSAgICBhYm9ydF9m
bGFnLAorCQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ185KTsKKwkJ
CQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjaGstPnJlYy5kYXRh
LnJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJCQkvKiBTZWNvbmQgbGFzdD8g
aHVoPyAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJCSJEdXBsaWNhdGUgbGFz
dCBmc246ICV1ICh0b3A6ICV1KSAtLSBhYm9ydFxuIiwKKwkJCQkJY2hrLT5yZWMuZGF0YS5mc24s
IGNvbnRyb2wtPnRvcF9mc24pOworCQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJv
bCwKKwkJCQkJCSAgICBjaGssIGFib3J0X2ZsYWcsCisJCQkJCQkgICAgU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICsgU0NUUF9MT0NfMTApOworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChhc29jLT5p
ZGF0YV9zdXBwb3J0ZWQgfHwgY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSB7CisJCQkJLyogCisJ
CQkJICogRm9yIElEQVRBIHdlIGFsd2F5cyBjaGVjayBzaW5jZSB3ZSBrbm93IHRoYXQKKwkJCQkg
KiB0aGUgZmlyc3QgZnJhZ21lbnQgaXMgMC4gRm9yIG9sZCBEQVRBIHdlIGhhdmUKKwkJCQkgKiB0
byByZWNlaXZlIHRoZSBmaXJzdCBiZWZvcmUgd2Uga25vdyB0aGUgZmlyc3QgRlNOCisJCQkJICog
KHdoaWNoIGlzIHRoZSBUU04pLgorCQkJCSAqLworCisJCQkJaWYgKFNDVFBfVFNOX0dFKGNvbnRy
b2wtPmZzbl9pbmNsdWRlZCwgY2hrLT5yZWMuZGF0YS5mc24pKSB7CisJCQkJCS8qIFdlIGhhdmUg
YWxyZWFkeSBkZWxpdmVyZWQgdXAgdG8gdGhpcyBzbyBpdHMgYSBkdXAgKi8KKwkJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJCSJOZXcgZnNuOiAldSBpcyBhbHJlYWR5IHNlZW4gaW4g
aW5jbHVkZWRfZnNuOiAldSAtLSBhYm9ydFxuIiwKKwkJCQkJCWNoay0+cmVjLmRhdGEuZnNuLCBj
b250cm9sLT5mc25faW5jbHVkZWQpOworCQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNv
bnRyb2wsIGNoaywKKwkJCQkJCQkgICAgYWJvcnRfZmxhZywKKwkJCQkJCQkgICAgU0NUUF9GUk9N
X1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTEpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQor
CQkJLyogdmFsaWRhdGUgbm90IGJleW9uZCB0b3AgRlNOIGlmIHdlIGhhdmUgc2VlbiBsYXN0IG9u
ZSAqLworCQkJaWYgKFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNuLCBjb250cm9sLT50b3Bf
ZnNuKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJCSJOZXcgZnNuOiAldSBp
cyBiZXlvbmQgb3IgYXQgdG9wX2ZzbjogJXUgLS0gYWJvcnRcbiIsCisJCQkJCWNoay0+cmVjLmRh
dGEuZnNuLAorCQkJCQljb250cm9sLT50b3BfZnNuKTsKKwkJCQlzY3RwX2Fib3J0X2luX3JlYXNt
KHN0Y2IsIGNvbnRyb2wsIGNoaywKKwkJCQkJCSAgICBhYm9ydF9mbGFnLAorCQkJCQkJICAgIFND
VFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzEyKTsKKwkJCQlyZXR1cm47CisJCQl9CisJ
CX0KKwkJLyoKKwkJICogSWYgd2UgcmVhY2ggaGVyZSwgd2UgbmVlZCB0byBwbGFjZSB0aGUKKwkJ
ICogbmV3IGNodW5rIGluIHRoZSByZWFzc2VtYmx5IGZvciB0aGlzIAorCQkgKiBjb250cm9sLgor
CQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJjaHVuayBpcyBhIG5vdCBmaXJz
dCBmc246ICV1IG5lZWRzIHRvIGJlIGluc2VydGVkXG4iLAorCQkJY2hrLT5yZWMuZGF0YS5mc24p
OworCQlUQUlMUV9GT1JFQUNIKGF0LCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCkgeworCQkJ
aWYgKFNDVFBfVFNOX0dUKGF0LT5yZWMuZGF0YS5mc24sIGNoay0+cmVjLmRhdGEuZnNuKSkgewor
CQkJCS8qCisJCQkJICogVGhpcyBvbmUgaW4gcXVldWUgaXMgYmlnZ2VyIHRoYW4gdGhlIG5ldyBv
bmUsIGluc2VydAorCQkJCSAqIHRoZSBuZXcgb25lIGJlZm9yZSBhdC4KKwkJCQkgKi8KKwkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJCQkiSW5zZXJ0IGl0IGJlZm9yZSBmc246ICV1XG4i
LAorCQkJCQlhdC0+cmVjLmRhdGEuZnNuKTsKKwkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVl
ICs9IGNoay0+c2VuZF9zaXplOworCQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX3Jl
YXNtX3F1ZXVlKTsKKwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKGF0LCBjaGssIHNjdHBfbmV4dCk7
CisJCQkJaW5zZXJ0ZWQgPSAxOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChhdC0+cmVjLmRh
dGEuZnNuID09IGNoay0+cmVjLmRhdGEuZnNuKSB7CisJCQkJLyogR2FrLCBIZSBzZW50IG1lIGEg
ZHVwbGljYXRlIHN0ciBzZXEgbnVtYmVyICovCisJCQkJLyoKKwkJCQkgKiBmb28gYmFyLCBJIGd1
ZXNzIEkgd2lsbCBqdXN0IGZyZWUgdGhpcyBuZXcgZ3V5LAorCQkJCSAqIHNob3VsZCB3ZSBhYm9y
dCB0b28/IEZJWCBNRSBNQVlCRT8gT3IgaXQgQ09VTEQgYmUKKwkJCQkgKiB0aGF0IHRoZSBTU04n
cyBoYXZlIHdyYXBwZWQuIE1heWJlIEkgc2hvdWxkCisJCQkJICogY29tcGFyZSB0byBUU04gc29t
ZWhvdy4uLiBzaWdoIGZvciBub3cganVzdCBibG93CisJCQkJICogYXdheSB0aGUgY2h1bmshCisJ
CQkJICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIkR1cGxpY2F0ZSB0byBm
c246ICV1IC0tIGFib3J0XG4iLAorCQkJCQlhdC0+cmVjLmRhdGEuZnNuKTsKKwkJCQlzY3RwX2Fi
b3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsCisJCQkJCQkgICAgY2hrLCBhYm9ydF9mbGFnLAor
CQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzEzKTsKKwkJCQlyZXR1
cm47CisJCQl9CisJCX0KKwkJaWYgKGluc2VydGVkID09IDApIHsKKwkJCS8qIEdvZXMgb24gdGhl
IGVuZCAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkluc2VydGluZyBhdCB0YWlsIG9m
IGxpc3QgZnNuOiAldVxuIiwKKwkJCQljaGstPnJlYy5kYXRhLmZzbik7CisJCQlhc29jLT5zaXpl
X29uX3JlYXNtX3F1ZXVlICs9IGNoay0+c2VuZF9zaXplOworCQkJc2N0cF91Y291bnRfaW5jcihh
c29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQkJVEFJTFFfSU5TRVJUX1RBSUwoJmNvbnRyb2wt
PnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCX0KKwl9CisJLyoKKwkgKiBPayBsZXRzIHNlZSBp
ZiB3ZSBjYW4gc3VjayBhbnkgdXAgaW50byB0aGUgY29udHJvbAorCSAqIHN0cnVjdHVyZSB0aGF0
IGFyZSBpbiBzZXEgaWYgaXQgbWFrZXMgc2Vuc2UuCisJICovCisJZG9fd2FrZXVwID0gMDsKKwkv
KgorCSAqIElmIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgbm90IGJlZW4KKwkgKiBzZWVuIHRoZXJl
IGlzIG5vIHNlbnNlIGluIGxvb2tpbmcuCisJICovCisJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdf
c2VlbikgeworCQluZXh0X2ZzbiA9IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCArIDE7CisJCVRBSUxR
X0ZPUkVBQ0hfU0FGRShhdCwgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5hdCkgeworCQkJ
aWYgKGF0LT5yZWMuZGF0YS5mc24gPT0gbmV4dF9mc24pIHsKKwkJCQkvKiBXZSBjYW4gYWRkIHRo
aXMgb25lIG5vdyB0byB0aGUgY29udHJvbCAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgs
CisJCQkJCSJBZGRpbmcgbW9yZSB0byBjb250cm9sOiAlcCBhdDogJXAgZnNuOiAldSBuZXh0X2Zz
bjogJXUgaW5jbHVkZWQ6ICV1XG4iLAorCQkJCQljb250cm9sLCBhdCwKKwkJCQkJYXQtPnJlYy5k
YXRhLmZzbiwKKwkJCQkJbmV4dF9mc24sIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCk7CisJCQkJVEFJ
TFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgYXQsIHNjdHBfbmV4dCk7CisJCQkJbGVuYWRkZWQg
PSBzY3RwX2FkZF9jaGtfdG9fY29udHJvbChjb250cm9sLCBzdHJtLCBzdGNiLCBhc29jLCBhdCwg
U0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworCQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EpIHsK
KwkJCQkJZG9fd2FrZXVwID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkgKiBXZSBv
bmx5IGFkZCB0byB0aGUgc2l6ZS1vbi1hbGwtc3RyZWFtcworCQkJCQkgKiBpZiBpdHMgbm90IG9u
IHRoZSByZWFkIHEuIFRoZSByZWFkIHEKKwkJCQkJICogZmxhZyB3aWxsIGNhdXNlIGEgc2JhbGxv
YyBzbyBpdHMgYWNjb3VudGVkCisJCQkJCSAqIGZvciB0aGVyZS4KKwkJCQkJICovCisJCQkJCWFz
b2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gbGVuYWRkZWQ7CisJCQkJfQorCQkJCW5leHRfZnNu
Kys7CisJCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCAmJiBjb250cm9sLT5wZGFwaV9zdGFydGVk
KSB7CisJCQkJCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgeworCQkJCQkJc3RybS0+cGRfYXBp
X3N0YXJ0ZWQgPSAwOworCQkJCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDA7CisJCQkJCX0K
KwkJCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCQkJCQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCQkgIGNvbnRyb2wsCisJCQkJCQkJCSAg
JnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCQkJ
ICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJfQor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ
fQorCWlmIChkb193YWtldXApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCXNjdHBf
aW52b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJvbCwgU0NUUF9S
RUFEX0xPQ0tfTk9UX0hFTEQpOworI2VuZGlmCisJCS8qIE5lZWQgdG8gd2FrZXVwIHRoZSByZWFk
ZXIgKi8KKwkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHNjdHBfcXVldWVk
X3RvX3JlYWQgKgorc2N0cF9maW5kX3JlYXNtX2VudHJ5KHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAq
c3RybSwgdWludDMyX3QgbWlkLCBpbnQgb3JkZXJlZCwgaW50IGlkYXRhX3N1cHBvcnRlZCkKK3sK
KwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKworCWlmIChvcmRlcmVkKSB7
CisJCVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPmlucXVldWUsIG5leHRfaW5zdHJtKSB7
CisJCQlpZiAoU0NUUF9NSURfRVEoaWRhdGFfc3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG1pZCkp
IHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlmIChpZGF0YV9zdXBwb3J0
ZWQpIHsKKwkJCVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPnVub19pbnF1ZXVlLCBuZXh0
X2luc3RybSkgeworCQkJCWlmIChTQ1RQX01JRF9FUShpZGF0YV9zdXBwb3J0ZWQsIGNvbnRyb2wt
Pm1pZCwgbWlkKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlj
b250cm9sID0gVEFJTFFfRklSU1QoJnN0cm0tPnVub19pbnF1ZXVlKTsKKwkJfQorCX0KKwlyZXR1
cm4gKGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50CitzY3RwX3Byb2Nlc3NfYV9kYXRhX2NodW5r
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJ
CQkgIHN0cnVjdCBtYnVmICoqbSwgaW50IG9mZnNldCwgIGludCBjaGtfbGVuZ3RoLAorCQkJICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90ICpoaWdoX3RzbiwgaW50ICphYm9ydF9mbGFn
LAorCQkJICBpbnQgKmJyZWFrX2ZsYWcsIGludCBsYXN0X2NodW5rLCB1aW50OF90IGNoa190eXBl
KQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoayA9IE5VTEw7IC8qIG1ha2UgZ2NjIGhh
cHB5ICovCisJdWludDMyX3QgdHNuLCBmc24sIGdhcCwgbWlkOworCXN0cnVjdCBtYnVmICpkbWJ1
ZjsKKwlpbnQgdGhlX2xlbjsKKwlpbnQgbmVlZF9yZWFzbV9jaGVjayA9IDA7CisJdWludDE2X3Qg
c2lkOworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVO
XTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jb250cm9sOworCXVp
bnQzMl90IHBwaWQ7CisJdWludDhfdCBjaGtfZmxhZ3M7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2xpc3QgKmxpc3RlOworCWludCBvcmRlcmVkOworCXNpemVfdCBjbGVuOworCWludCBjcmVh
dGVkX2NvbnRyb2wgPSAwOworCisJaWYgKGNoa190eXBlID09IFNDVFBfSURBVEEpIHsKKwkJc3Ry
dWN0IHNjdHBfaWRhdGFfY2h1bmsgKmNodW5rLCBjaHVua19idWY7CisKKwkJY2h1bmsgPSAoc3Ry
dWN0IHNjdHBfaWRhdGFfY2h1bmsgKilzY3RwX21fZ2V0cHRyKCptLCBvZmZzZXQsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0
IHNjdHBfaWRhdGFfY2h1bmspLCAodWludDhfdCAqKSZjaHVua19idWYpOworCQljaGtfZmxhZ3Mg
PSBjaHVuay0+Y2guY2h1bmtfZmxhZ3M7CisJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfaWRh
dGFfY2h1bmspOworCQl0c24gPSBudG9obChjaHVuay0+ZHAudHNuKTsKKwkJc2lkID0gbnRvaHMo
Y2h1bmstPmRwLnNpZCk7CisJCW1pZCA9IG50b2hsKGNodW5rLT5kcC5taWQpOworCQlpZiAoY2hr
X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCWZzbiA9IDA7CisJCQlwcGlkID0g
Y2h1bmstPmRwLnBwaWRfZnNuLnBwaWQ7CisJCX0gZWxzZSB7CisJCQlmc24gPSBudG9obChjaHVu
ay0+ZHAucHBpZF9mc24uZnNuKTsKKwkJCXBwaWQgPSAweGZmZmZmZmZmOyAvKiBVc2UgYXMgYW4g
aW52YWxpZCB2YWx1ZS4gKi8KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVjdCBzY3RwX2RhdGFfY2h1
bmsgKmNodW5rLCBjaHVua19idWY7CisKKwkJY2h1bmsgPSAoc3RydWN0IHNjdHBfZGF0YV9jaHVu
ayAqKXNjdHBfbV9nZXRwdHIoKm0sIG9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspLCAo
dWludDhfdCAqKSZjaHVua19idWYpOworCQljaGtfZmxhZ3MgPSBjaHVuay0+Y2guY2h1bmtfZmxh
Z3M7CisJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7CisJCXRzbiA9IG50
b2hsKGNodW5rLT5kcC50c24pOworCQlzaWQgPSBudG9ocyhjaHVuay0+ZHAuc2lkKTsKKwkJbWlk
ID0gKHVpbnQzMl90KShudG9ocyhjaHVuay0+ZHAuc3NuKSk7CisJCWZzbiA9IHRzbjsKKwkJcHBp
ZCA9IGNodW5rLT5kcC5wcGlkOworCX0KKwlpZiAoKHNpemVfdCljaGtfbGVuZ3RoID09IGNsZW4p
IHsKKwkJLyoKKwkJICogTmVlZCB0byBzZW5kIGFuIGFib3J0IHNpbmNlIHdlIGhhZCBhCisJCSAq
IGVtcHR5IGRhdGEgY2h1bmsuCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX25vX3Vz
ZXJfZGF0YV9jYXVzZSh0c24pOworCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xNDsKKwkJc2N0cF9hYm9ydF9hbl9hc3Nv
Y2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKChjaGtfZmxhZ3Mg
JiBTQ1RQX0RBVEFfU0FDS19JTU1FRElBVEVMWSkgPT0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRF
TFkpIHsKKwkJYXNvYy0+c2VuZF9zYWNrID0gMTsKKwl9CisJb3JkZXJlZCA9ICgoY2hrX2ZsYWdz
ICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgPT0gMCk7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9n
X21hcCh0c24sIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwLCBTQ1RQX01BUF9UU05fRU5URVJTKTsKKwl9CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQly
ZXR1cm4gKDApOworCX0KKwlTQ1RQX0xUUkFDRV9DSEsoc3RjYi0+c2N0cF9lcCwgc3RjYiwgY2hr
X3R5cGUsIHRzbik7CisJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCB0c24p
KSB7CisJCS8qIEl0IGlzIGEgZHVwbGljYXRlICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3ZkdXBkYXRhKTsKKwkJaWYgKGFzb2MtPm51bWR1cHRzbnMgPCBTQ1RQX01BWF9EVVBfVFNOUykg
eworCQkJLyogUmVjb3JkIGEgZHVwIGZvciB0aGUgbmV4dCBvdXRib3VuZCBzYWNrICovCisJCQlh
c29jLT5kdXBfdHNuc1thc29jLT5udW1kdXB0c25zXSA9IHRzbjsKKwkJCWFzb2MtPm51bWR1cHRz
bnMrKzsKKwkJfQorCQlhc29jLT5zZW5kX3NhY2sgPSAxOworCQlyZXR1cm4gKDApOworCX0KKwkv
KiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUU04ncyBiZXR3ZWVuIHRoZSBiYXNlIGFuZCB0aGlz
IFRTTiAqLworCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNuLCBhc29jLT5tYXBwaW5nX2Fy
cmF5X2Jhc2VfdHNuKTsKKwlpZiAoZ2FwID49IChTQ1RQX01BUFBJTkdfQVJSQVkgPDwgMykpIHsK
KwkJLyogQ2FuJ3QgaG9sZCB0aGUgYml0IGluIHRoZSBtYXBwaW5nIGF0IG1heCBhcnJheSwgdG9z
cyBpdCAqLworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoZ2FwID49ICh1aW50MzJfdCkgKGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfc2l6ZSA8PCAzKSkgeworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNi
KTsKKwkJaWYgKHNjdHBfZXhwYW5kX21hcHBpbmdfYXJyYXkoYXNvYywgZ2FwKSkgeworCQkJLyog
Q2FuJ3QgZXhwYW5kLCBkcm9wIGl0ICovCisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCWlmIChT
Q1RQX1RTTl9HVCh0c24sICpoaWdoX3RzbikpIHsKKwkJKmhpZ2hfdHNuID0gdHNuOworCX0KKwkv
KiBTZWUgaWYgd2UgaGF2ZSByZWNlaXZlZCB0aGlzIG9uZSBhbHJlYWR5ICovCisJaWYgKFNDVFBf
SVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKSB8fAorCSAgICBTQ1RQX0lT
X1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCkpIHsKKwkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfcmVjdmR1cGRhdGEpOworCQlpZiAoYXNvYy0+bnVtZHVwdHNucyA8IFNDVFBf
TUFYX0RVUF9UU05TKSB7CisJCQkvKiBSZWNvcmQgYSBkdXAgZm9yIHRoZSBuZXh0IG91dGJvdW5k
IHNhY2sgKi8KKwkJCWFzb2MtPmR1cF90c25zW2Fzb2MtPm51bWR1cHRzbnNdID0gdHNuOworCQkJ
YXNvYy0+bnVtZHVwdHNucysrOworCQl9CisJCWFzb2MtPnNlbmRfc2FjayA9IDE7CisJCXJldHVy
biAoMCk7CisJfQorCS8qCisJICogQ2hlY2sgdG8gc2VlIGFib3V0IHRoZSBHT05FIGZsYWcsIGR1
cGxpY2F0ZXMgd291bGQgY2F1c2UgYSBzYWNrCisJICogdG8gYmUgc2VudCB1cCBhYm92ZQorCSAq
LworCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgfHwKKwkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQ0xPU0VEX1NPQ0tFVCkpKSB7CisJCS8qCisJCSAqIHdhaXQgYSBtaW51dGUsIHRoaXMg
Z3V5IGlzIGdvbmUsIHRoZXJlIGlzIG5vIGxvbmdlciBhCisJCSAqIHJlY2VpdmVyLiBTZW5kIHBl
ZXIgYW4gQUJPUlQhCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNi
LT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCSphYm9ydF9m
bGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBOb3cgYmVmb3JlIGdvaW5nIGZ1
cnRoZXIgd2Ugc2VlIGlmIHRoZXJlIGlzIHJvb20uIElmIE5PVCB0aGVuIHdlCisJICogTUFZIGxl
dCBvbmUgdGhyb3VnaCBvbmx5IElGIHRoaXMgVFNOIGlzIHRoZSBvbmUgd2UgYXJlIHdhaXRpbmcK
KwkgKiBmb3Igb24gYSBwYXJ0aWFsIGRlbGl2ZXJ5IEFQSS4KKwkgKi8KKworCS8qIElzIHRoZSBz
dHJlYW0gdmFsaWQ/ICovCisJaWYgKHNpZCA+PSBhc29jLT5zdHJlYW1pbmNudCkgeworCQlzdHJ1
Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSAqY2F1c2U7CisKKwkJb3BfZXJyID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSks
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBNX05PV0FJVCwgMSwgTVRfREFU
QSk7CisJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJLyogYWRkIHNvbWUgc3BhY2UgdXAgZnJv
bnQgc28gcHJlcGVuZCB3aWxsIHdvcmsgd2VsbCAqLworCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9l
cnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQkJY2F1c2UgPSBtdG9kKG9wX2Vy
ciwgc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0gKik7CisJCQkvKgorCQkJICogRXJy
b3IgY2F1c2VzIGFyZSBqdXN0IHBhcmFtJ3MgYW5kIHRoaXMgb25lIGhhcworCQkJICogdHdvIGJh
Y2sgdG8gYmFjayBwaGRyLCBvbmUgd2l0aCB0aGUgZXJyb3IgdHlwZQorCQkJICogYW5kIHNpemUs
IHRoZSBvdGhlciB3aXRoIHRoZSBzdHJlYW1pZCBhbmQgYSByc3ZkCisJCQkgKi8KKwkJCVNDVFBf
QlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFt
KTsKKwkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9JTlZBTElEX1NUUkVB
TSk7CisJCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2Vy
cm9yX2ludmFsaWRfc3RyZWFtKSk7CisJCQljYXVzZS0+c3RyZWFtX2lkID0gaHRvbnMoc2lkKTsK
KwkJCWNhdXNlLT5yZXNlcnZlZCA9IGh0b25zKDApOworCQkJc2N0cF9xdWV1ZV9vcF9lcnIoc3Rj
Yiwgb3BfZXJyKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWRzaWQpOworCQlTQ1RQ
X1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwkJU0NUUF9TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bnJf
bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAgPSB0c247CisJCX0KKwkJaWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gKyAxKSkg
eworCQkJLyogVXBkYXRlIGN1bS1hY2sgKi8KKwkJCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0gdHNu
OworCQl9CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogSWYgaXRzIGEgZnJhZ21lbnRlZCBt
ZXNzYWdlLCBsZXRzIHNlZSBpZiB3ZSBjYW4KKwkgKiBmaW5kIHRoZSBjb250cm9sIG9uIHRoZSBy
ZWFzc2VtYmx5IHF1ZXVlcy4KKwkgKi8KKwlpZiAoKGNoa190eXBlID09IFNDVFBfSURBVEEpICYm
CisJICAgICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpID09IDApICYmCisJICAg
IChmc24gPT0gMCkpIHsKKwkJLyogCisJCSAqICBUaGUgZmlyc3QgKm11c3QqIGJlIGZzbiAwLCBh
bmQgb3RoZXIgCisJCSAqICAobWlkZGxlL2VuZCkgcGllY2VzIGNhbiAqbm90KiBiZSBmc24gMC4K
KwkJICogWFhYOiBUaGlzIGNhbiBoYXBwZW4gaW4gY2FzZSBvZiBhIHdyYXAgYXJvdW5kLgorCQkg
KiAgICAgIElnbm9yZSBpcyBmb3Igbm93LgorCQkgKi8KKwkJc25wcmludGYobXNnLCBzaXplb2Yo
bXNnKSwgIkZTTiB6ZXJvIGZvciBNSUQ9JTguOHgsIGJ1dCBmbGFncz0lMi4yeCIsCisJCSAgICAg
ICAgIG1pZCwgY2hrX2ZsYWdzKTsKKwkJZ290byBlcnJfb3V0OworCX0KKwljb250cm9sID0gc2N0
cF9maW5kX3JlYXNtX2VudHJ5KCZhc29jLT5zdHJtaW5bc2lkXSwgbWlkLCBvcmRlcmVkLCBhc29j
LT5pZGF0YV9zdXBwb3J0ZWQpOworCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsICJjaHVua19mbGFn
czoweCV4IGxvb2sgZm9yIGNvbnRyb2wgb24gcXVldWVzICVwXG4iLAorCQljaGtfZmxhZ3MsIGNv
bnRyb2wpOworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSAhPSBTQ1RQX0RB
VEFfTk9UX0ZSQUcpIHsKKwkJLyogU2VlIGlmIHdlIGNhbiBmaW5kIHRoZSByZS1hc3NlbWJseSBl
bnRpdHkgKi8KKwkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgeworCQkJLyogV2UgZm91bmQgc29tZXRo
aW5nLCBkb2VzIGl0IGJlbG9uZz8gKi8KKwkJCWlmIChvcmRlcmVkICYmIChtaWQgIT0gY29udHJv
bC0+bWlkKSkgeworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJSZWFzc2VtYmx5IHBy
b2JsZW0gKE1JRD0lOC44eCkiLCBtaWQpOworCQkJZXJyX291dDoKKwkJCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJ
CXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSAr
IFNDVFBfTE9DXzE1OworCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9l
cCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCSphYm9ydF9mbGFnID0g
MTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKG9yZGVyZWQgJiYgKChjb250cm9sLT5z
aW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9VTk9SREVSRUQpKSB7CisJCQkJLyogV2UgY2Fu
J3QgaGF2ZSBhIHN3aXRjaGVkIG9yZGVyIHdpdGggYW4gdW5vcmRlcmVkIGNodW5rICovCisJCQkJ
c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIkFsbCBmcmFnbWVudHMgb2YgYSB1c2VyIG1lc3Nh
Z2UgbXVzdCBiZSBvcmRlcmVkIG9yIHVub3JkZXJlZCAoVFNOPSU4Ljh4KSIsCisJCQkJCSB0c24p
OworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJCWlmICghb3JkZXJlZCAmJiAoKChjb250cm9s
LT5zaW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9VTk9SREVSRUQpID09IDApKSB7CisJCQkJ
LyogV2UgY2FuJ3QgaGF2ZSBhIHN3aXRjaGVkIHVub3JkZXJlZCB3aXRoIGEgb3JkZXJlZCBjaHVu
ayAqLworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJBbGwgZnJhZ21lbnRzIG9mIGEg
dXNlciBtZXNzYWdlIG11c3QgYmUgb3JkZXJlZCBvciB1bm9yZGVyZWQgKFRTTj0lOC44eCkiLAor
CQkJCQkgdHNuKTsKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkv
KiBJdHMgYSBjb21wbGV0ZSBzZWdtZW50LiBMZXRzIHZhbGlkYXRlIHdlCisJCSAqIGRvbid0IGhh
dmUgYSByZS1hc3NlbWJseSBnb2luZyBvbiB3aXRoCisJCSAqIHRoZSBzYW1lIFN0cmVhbS9TZXEg
KGZvciBvcmRlcmVkKSBvciBpbgorCQkgKiB0aGUgc2FtZSBTdHJlYW0gZm9yIHVub3JkZXJlZC4K
KwkJICovCisJCWlmIChjb250cm9sICE9IE5VTEwpIHsKKwkJCWlmIChvcmRlcmVkIHx8IGFzb2Mt
PmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsICJjaHVua19m
bGFnczogMHgleCBkdXAgZGV0ZWN0ZWQgb24gTUlEOiAldVxuIiwKKwkJCQkJY2hrX2ZsYWdzLCBt
aWQpOworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJEdXBsaWNhdGUgTUlEPSU4Ljh4
IGRldGVjdGVkLiIsIG1pZCk7CisJCQkJZ290byBlcnJfb3V0OworCQkJfSBlbHNlIHsKKwkJCQlp
ZiAoKHRzbiA9PSBjb250cm9sLT5mc25faW5jbHVkZWQgKyAxKSAmJgorCQkJCSAgICAoY29udHJv
bC0+ZW5kX2FkZGVkID09IDApKSB7CisJCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJJ
bGxlZ2FsIG1lc3NhZ2Ugc2VxdWVuY2UsIG1pc3NpbmcgZW5kIGZvciBNSUQ6ICU4Ljh4IiwgY29u
dHJvbC0+ZnNuX2luY2x1ZGVkKTsKKwkJCQkJZ290byBlcnJfb3V0OworCQkJCX0gZWxzZSB7CisJ
CQkJCWNvbnRyb2wgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwkvKiBub3cgZG8gdGhl
IHRlc3RzICovCisJaWYgKCgoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zICsKKwkgICAgICBhc29j
LT5jbnRfb25fcmVhc21fcXVldWUgKworCSAgICAgIGFzb2MtPmNudF9tc2dfb25fc2IpID49IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkgfHwKKwkgICAgKCgoaW50
KWFzb2MtPm15X3J3bmQpIDw9IDApKSB7CisJCS8qCisJCSAqIFdoZW4gd2UgaGF2ZSBOTyByb29t
IGluIHRoZSByd25kIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZQorCQkgKiB0aGUgcmVhZGVyIGlzIGRv
aW5nIGl0cyBqb2IuLi4KKwkJICovCisJCWlmIChzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LnNi
X2NjKSB7CisJCQkvKiBzb21lIHRvIHJlYWQsIHdha2UtdXAgKi8KKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCXN0cnVjdCBzb2NrZXQg
KnNvOworCisJCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworCQkJYXRvbWljX2Fk
ZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCWlmIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQkJLyogYXNzb2Mg
d2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCQlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDEpOworCQkJCXJldHVybiAoMCk7CisJCQl9CisjZW5kaWYKKwkJCXNjdHBfc29yd2Fr
ZXVwKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisjZW5kaWYKKwkJfQorCQkvKiBub3cgaXMgaXQgaW4gdGhlIG1hcHBpbmcg
YXJyYXkgb2Ygd2hhdCB3ZSBoYXZlIGFjY2VwdGVkPyAqLworCQlpZiAoY2hrX3R5cGUgPT0gU0NU
UF9EQVRBKSB7CisJCQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbWFwKSAmJgorCQkJICAgIFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX25yX21hcCkpIHsKKwkJCQkvKiBOb3BlIG5vdCBpbiB0aGUgdmFsaWQgcmFuZ2UgZHVtcCBp
dCAqLworCQkJZHVtcF9wYWNrZXQ6CisJCQkJc2N0cF9zZXRfcnduZChzdGNiLCBhc29jKTsKKwkJ
CQlpZiAoKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyArCisJCQkJICAgICBhc29jLT5jbnRfb25f
cmVhc21fcXVldWUgKworCQkJCSAgICAgYXNvYy0+Y250X21zZ19vbl9zYikgPj0gU0NUUF9CQVNF
X1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSB7CisJCQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX2RhdGFkcm9wY2hrbG10KTsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19kYXRhZHJvcHJ3bmQpOworCQkJCX0KKwkJCQkqYnJlYWtfZmxhZyA9IDE7CisJCQkJ
cmV0dXJuICgwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjb250cm9sID09IE5VTEwpIHsK
KwkJCQlnb3RvIGR1bXBfcGFja2V0OworCQkJfQorCQkJaWYgKFNDVFBfVFNOX0dUKGZzbiwgY29u
dHJvbC0+dG9wX2ZzbikpIHsKKwkJCQlnb3RvIGR1bXBfcGFja2V0OworCQkJfQorCQl9CisJfQor
I2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7
CisJaWYgKGFzb2MtPnRzbl9pbl9hdCA+PSBTQ1RQX1RTTl9MT0dfU0laRSkgeworCQlhc29jLT50
c25faW5fYXQgPSAwOworCQlhc29jLT50c25faW5fd3JhcHBlZCA9IDE7CisJfQorCWFzb2MtPmlu
X3RzbmxvZ1thc29jLT50c25faW5fYXRdLnRzbiA9IHRzbjsKKwlhc29jLT5pbl90c25sb2dbYXNv
Yy0+dHNuX2luX2F0XS5zdHJtID0gc2lkOworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5f
YXRdLnNlcSA9IG1pZDsKKwlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNuX2luX2F0XS5zeiA9IGNo
a19sZW5ndGg7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uZmxncyA9IGNodW5r
X2ZsYWdzOworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnN0Y2IgPSAodm9pZCAq
KXN0Y2I7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uaW5fcG9zID0gYXNvYy0+
dHNuX2luX2F0OworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLmluX291dCA9IDE7
CisJYXNvYy0+dHNuX2luX2F0Kys7CisjZW5kaWYKKwkvKgorCSAqIEJlZm9yZSB3ZSBjb250aW51
ZSBsZXRzIHZhbGlkYXRlIHRoYXQgd2UgYXJlIG5vdCBiZWluZyBmb29sZWQgYnkKKwkgKiBhbiBl
dmlsIGF0dGFja2VyLiBXZSBjYW4gb25seSBoYXZlIE5rIGNodW5rcyBiYXNlZCBvbiBvdXIgVFNO
CisJICogc3ByZWFkIGFsbG93ZWQgYnkgdGhlIG1hcHBpbmcgYXJyYXkgTiAqIDggYml0cywgc28g
dGhlcmUgaXMgbm8KKwkgKiB3YXkgb3VyIHN0cmVhbSBzZXF1ZW5jZSBudW1iZXJzIGNvdWxkIGhh
dmUgd3JhcHBlZC4gV2Ugb2YgY291cnNlCisJICogb25seSB2YWxpZGF0ZSB0aGUgRklSU1QgZnJh
Z21lbnQgc28gdGhlIGJpdCBtdXN0IGJlIHNldC4KKwkgKi8KKwlpZiAoKGNoa19mbGFncyAmIFND
VFBfREFUQV9GSVJTVF9GUkFHKSAmJgorCSAgICAoVEFJTFFfRU1QVFkoJmFzb2MtPnJlc2V0SGVh
ZCkpICYmCisJICAgIChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwICYmCisJ
ICAgIFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXNvYy0+c3RybWluW3NpZF0u
bGFzdF9taWRfZGVsaXZlcmVkLCBtaWQpKSB7CisJCS8qIFRoZSBpbmNvbWluZyBzc2VxIGlzIGJl
aGluZCB3aGVyZSB3ZSBsYXN0IGRlbGl2ZXJlZD8gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
REFUQTEsICJFVklML0Jyb2tlbi1EdXAgUy1TRVE6ICV1IGRlbGl2ZXJlZDogJXUgZnJvbSBwZWVy
LCBBYm9ydCFcbiIsCisJCQltaWQsIGFzb2MtPnN0cm1pbltzaWRdLmxhc3RfbWlkX2RlbGl2ZXJl
ZCk7CisKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJc25wcmludGYobXNnLCBz
aXplb2YobXNnKSwgIkRlbGl2ZXJlZCBNSUQ9JTguOHgsIGdvdCBUU049JTguOHgsIFNJRD0lNC40
eCwgTUlEPSU4Ljh4IiwKKwkJCSAgICAgICAgIGFzb2MtPnN0cm1pbltzaWRdLmxhc3RfbWlkX2Rl
bGl2ZXJlZCwKKwkJCSAgICAgICAgIHRzbiwKKwkJCSAgICAgICAgIHNpZCwKKwkJCSAgICAgICAg
IG1pZCk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZl
cmVkIFNTTj0lNC40eCwgZ290IFRTTj0lOC44eCwgU0lEPSU0LjR4LCBTU049JTQuNHgiLAorCQkJ
ICAgICAgICAgKHVpbnQxNl90KWFzb2MtPnN0cm1pbltzaWRdLmxhc3RfbWlkX2RlbGl2ZXJlZCwK
KwkJCSAgICAgICAgIHRzbiwKKwkJCSAgICAgICAgIHNpZCwKKwkJCSAgICAgICAgICh1aW50MTZf
dCltaWQpOworCQl9CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9Q
Uk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29k
ZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE2OworCQlzY3RwX2Fib3J0X2Fu
X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJKmFib3J0X2ZsYWcgPSAxOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoY2hrX3R5
cGUgPT0gU0NUUF9JREFUQSkgeworCQl0aGVfbGVuID0gKGNoa19sZW5ndGggLSBzaXplb2Yoc3Ry
dWN0IHNjdHBfaWRhdGFfY2h1bmspKTsKKwl9IGVsc2UgeworCQl0aGVfbGVuID0gKGNoa19sZW5n
dGggLSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCX0KKwlpZiAobGFzdF9jaHVu
ayA9PSAwKSB7CisJCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7CisJCQlkbWJ1ZiA9IFND
VFBfTV9DT1BZTSgqbSwKKwkJCQkJICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2lk
YXRhX2NodW5rKSksCisJCQkJCSAgICAgdGhlX2xlbiwgTV9OT1dBSVQpOworCQl9IGVsc2Ugewor
CQkJZG1idWYgPSBTQ1RQX01fQ09QWU0oKm0sCisJCQkJCSAgICAgKG9mZnNldCArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSksCisJCQkJCSAgICAgdGhlX2xlbiwgTV9OT1dBSVQpOwor
CQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9s
b2dfbWJjKGRtYnVmLCBTQ1RQX01CVUZfSUNPUFkpOworCQl9CisjZW5kaWYKKwl9IGVsc2Ugewor
CQkvKiBXZSBjYW4gc3RlYWwgdGhlIGxhc3QgY2h1bmsgKi8KKwkJaW50IGxfbGVuOworCQlkbWJ1
ZiA9ICptOworCQkvKiBsb3Agb2ZmIHRoZSB0b3AgcGFydCAqLworCQlpZiAoY2hrX3R5cGUgPT0g
U0NUUF9JREFUQSkgeworCQkJbV9hZGooZG1idWYsIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNj
dHBfaWRhdGFfY2h1bmspKSk7CisJCX0gZWxzZSB7CisJCQltX2FkaihkbWJ1ZiwgKG9mZnNldCAr
IHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpOworCQl9CisJCWlmIChTQ1RQX0JVRl9O
RVhUKGRtYnVmKSA9PSBOVUxMKSB7CisJCQlsX2xlbiA9IFNDVFBfQlVGX0xFTihkbWJ1Zik7CisJ
CX0gZWxzZSB7CisJCQkvKiBuZWVkIHRvIGNvdW50IHVwIHRoZSBzaXplIGhvcGVmdWxseQorCQkJ
ICogZG9lcyBub3QgaGl0IHRoaXMgdG8gb2Z0ZW4gOi0wCisJCQkgKi8KKwkJCXN0cnVjdCBtYnVm
ICpsYXQ7CisKKwkJCWxfbGVuID0gMDsKKwkJCWZvciAobGF0ID0gZG1idWY7IGxhdDsgbGF0ID0g
U0NUUF9CVUZfTkVYVChsYXQpKSB7CisJCQkJbF9sZW4gKz0gU0NUUF9CVUZfTEVOKGxhdCk7CisJ
CQl9CisJCX0KKwkJaWYgKGxfbGVuID4gdGhlX2xlbikgeworCQkJLyogVHJpbSB0aGUgZW5kIHJv
dW5kIGJ5dGVzIG9mZiAgdG9vICovCisJCQltX2FkaihkbWJ1ZiwgLShsX2xlbiAtIHRoZV9sZW4p
KTsKKwkJfQorCX0KKwlpZiAoZG1idWYgPT0gTlVMTCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19ub21lbSk7CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogTm93IG5vIG1hdHRlciB3aGF0
LCB3ZSBuZWVkIGEgY29udHJvbCwgZ2V0IG9uZQorCSAqIGlmIHdlIGRvbid0IGhhdmUgb25lICh3
ZSBtYXkgaGF2ZSBnb3R0ZW4gaXQKKwkgKiBhYm92ZSB3aGVuIHdlIGZvdW5kIHRoZSBtZXNzYWdl
IHdhcyBmcmFnbWVudGVkCisJICovCisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQlzY3RwX2Fs
bG9jX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7CisJCXNjdHBfYnVpbGRfcmVhZHFfZW50cnlfbWFj
KGNvbnRyb2wsIHN0Y2IsIGFzb2MtPmNvbnRleHQsIG5ldCwgdHNuLAorCQkJCQkgICBwcGlkLAor
CQkJCQkgICBzaWQsCisJCQkJCSAgIGNoa19mbGFncywKKwkJCQkJICAgTlVMTCwgZnNuLCBtaWQp
OworCQlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19ub21l
bSk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05P
VF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCXN0cnVjdCBtYnVmICptbTsKKwor
CQkJY29udHJvbC0+ZGF0YSA9IGRtYnVmOworCQkJZm9yIChtbSA9IGNvbnRyb2wtPmRhdGE7IG1t
OyBtbSA9IG1tLT5tX25leHQpIHsKKwkJCQljb250cm9sLT5sZW5ndGggKz0gU0NUUF9CVUZfTEVO
KG1tKTsKKwkJCX0KKwkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJCQljb250cm9sLT5l
bmRfYWRkZWQgPSAxOworCQkJY29udHJvbC0+bGFzdF9mcmFnX3NlZW4gPSAxOworCQkJY29udHJv
bC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJCWNvbnRyb2wtPmZzbl9pbmNsdWRlZCA9IGZzbjsK
KwkJCWNvbnRyb2wtPnRvcF9mc24gPSBmc247CisJCX0KKwkJY3JlYXRlZF9jb250cm9sID0gMTsK
Kwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgImNodW5rX2ZsYWdzOiAweCV4IG9yZGVyZWQ6
ICVkIE1JRDogJXUgY29udHJvbDogJXBcbiIsCisJCWNoa19mbGFncywgb3JkZXJlZCwgbWlkLCBj
b250cm9sKTsKKwlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9E
QVRBX05PVF9GUkFHICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5yZXNldEhlYWQpICYmCisJ
ICAgICgob3JkZXJlZCA9PSAwKSB8fAorCSAgICAgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1
cHBvcnRlZCwgYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkICsgMSwgbWlkKSAm
JgorCSAgICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zdHJtaW5bc2lkXS5pbnF1ZXVlKSkpKSB7CisJ
CS8qIENhbmRpZGF0ZSBmb3IgZXhwcmVzcyBkZWxpdmVyeSAqLworCQkvKgorCQkgKiBJdHMgbm90
IGZyYWdtZW50ZWQsIE5vIFBELUFQSSBpcyB1cCwgTm90aGluZyBpbiB0aGUKKwkJICogZGVsaXZl
cnkgcXVldWUsIEl0cyB1bi1vcmRlcmVkIE9SIG9yZGVyZWQgYW5kIHRoZSBuZXh0IHRvCisJCSAq
IGRlbGl2ZXIgQU5EIG5vdGhpbmcgZWxzZSBpcyBzdHVjayBvbiB0aGUgc3RyZWFtIHF1ZXVlLAor
CQkgKiBBbmQgdGhlcmUgaXMgcm9vbSBmb3IgaXQgaW4gdGhlIHNvY2tldCBidWZmZXIuIExldHMg
anVzdAorCQkgKiBzdHVmZiBpdCB1cCB0aGUgYnVmZmVyLi4uLgorCQkgKi8KKwkJU0NUUF9TRVRf
VFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFNDVFBfVFNO
X0dUKHRzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFzb2MtPmhp
Z2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X1hYWCwgIkluamVjdGluZyBjb250cm9sOiAlcCB0byBiZSByZWFkIChNSUQ6ICV1KVxuIiwKKwkJ
CWNvbnRyb2wsIG1pZCk7CisKKwkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3Rj
YiwKKwkJICAgICAgICAgICAgICAgICAgY29udHJvbCwgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19y
Y3YsCisJCSAgICAgICAgICAgICAgICAgIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCisJCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJF
RCkgPT0gMCkgeworCQkJLyogZm9yIG9yZGVyZWQsIGJ1bXAgd2hhdCB3ZSBkZWxpdmVyZWQgKi8K
KwkJCWFzb2MtPnN0cm1pbltzaWRdLmxhc3RfbWlkX2RlbGl2ZXJlZCsrOworCQl9CisJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3JlY3ZleHByZXNzKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3RwX2xv
Z19zdHJtX2RlbF9hbHQoc3RjYiwgdHNuLCBtaWQsIHNpZCwKKwkJCQkJICAgICAgU0NUUF9TVFJf
TE9HX0ZST01fRVhQUlNfREVMKTsKKwkJfQorCQljb250cm9sID0gTlVMTDsKKwkJZ290byBmaW5p
c2hfZXhwcmVzc19kZWw7CisJfQorCisJLyogTm93IHdpbGwgd2UgbmVlZCBhIGNodW5rIHRvbz8g
Ki8KKwlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9OT1RfRlJBRykgIT0gU0NUUF9EQVRBX05P
VF9GUkFHKSB7CisJCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCQlpZiAoY2hrID09
IE5VTEwpIHsKKwkJCS8qIE5vIG1lbW9yeSBzbyB3ZSBkcm9wIHRoZSBjaHVuayAqLworCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfbm9tZW0pOworCQkJaWYgKGxhc3RfY2h1bmsgPT0gMCkgeworCQkJ
CS8qIHdlIGNvcGllZCBpdCwgZnJlZSB0aGUgY29weSAqLworCQkJCXNjdHBfbV9mcmVlbShkbWJ1
Zik7CisJCQl9CisJCQlyZXR1cm4gKDApOworCQl9CisJCWNoay0+cmVjLmRhdGEudHNuID0gdHNu
OworCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAwOworCQljaGstPnJlYy5kYXRhLmZzbiA9IGZzbjsK
KwkJY2hrLT5yZWMuZGF0YS5taWQgPSBtaWQ7CisJCWNoay0+cmVjLmRhdGEuc2lkID0gc2lkOwor
CQljaGstPnJlYy5kYXRhLnBwaWQgPSBwcGlkOworCQljaGstPnJlYy5kYXRhLmNvbnRleHQgPSBz
dGNiLT5hc29jLmNvbnRleHQ7CisJCWNoay0+cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0
ID0gMDsKKwkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgPSBjaGtfZmxhZ3M7CisJCWNoay0+YXNv
YyA9IGFzb2M7CisJCWNoay0+c2VuZF9zaXplID0gdGhlX2xlbjsKKwkJY2hrLT53aG9UbyA9IG5l
dDsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkJ1aWxkaW5nIGNrOiAlcCBmb3IgY29udHJv
bDogJXAgdG8gYmUgcmVhZCAoTUlEOiAldSlcbiIsCisJCQljaGssCisJCQljb250cm9sLCBtaWQp
OworCQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOworCQljaGstPmRhdGEgPSBk
bWJ1ZjsKKwl9CisJLyogU2V0IHRoZSBhcHByb3ByaWF0ZSBUU04gbWFyayAqLworCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsKKwkJU0NUUF9TRVRfVFNOX1BSRVNF
TlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwg
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX1NFVF9UU05fUFJF
U0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOworCQlpZiAoU0NUUF9UU05fR1QodHNuLCBh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSkgeworCQkJYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX21hcCA9IHRzbjsKKwkJfQorCX0KKwkvKiBOb3cgaXMgaXQgY29tcGxldGUgKGkuZS4gbm90
IGZyYWdtZW50ZWQpPyAqLworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9
PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJLyoKKwkJICogU3BlY2lhbCBjaGVjayBmb3Igd2hl
biBzdHJlYW1zIGFyZSByZXNldHRpbmcuIFdlCisJCSAqIGNvdWxkIGJlIG1vcmUgc21hcnQgYWJv
dXQgdGhpcyBhbmQgY2hlY2sgdGhlCisJCSAqIGFjdHVhbCBzdHJlYW0gdG8gc2VlIGlmIGl0IGlz
IG5vdCBiZWluZyByZXNldC4uCisJCSAqIHRoYXQgd2F5IHdlIHdvdWxkIG5vdCBjcmVhdGUgYSBI
T0xCIHdoZW4gYW1vbmdzdAorCQkgKiBzdHJlYW1zIGJlaW5nIHJlc2V0IGFuZCB0aG9zZSBub3Qg
YmVpbmcgcmVzZXQuCisJCSAqCisJCSAqLworCQlpZiAoKChsaXN0ZSA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5yZXNldEhlYWQpKSAhPSBOVUxMKSAmJgorCQkgICAgU0NUUF9UU05fR1QodHNuLCBsaXN0
ZS0+dHNuKSkgeworCQkJLyoKKwkJCSAqIHllcCBpdHMgcGFzdCB3aGVyZSB3ZSBuZWVkIHRvIHJl
c2V0Li4uIGdvCisJCQkgKiBhaGVhZCBhbmQgcXVldWUgaXQuCisJCQkgKi8KKwkJCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSkpIHsKKwkJCQkvKiBmaXJzdCBvbmUg
b24gKi8KKwkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwg
Y29udHJvbCwgbmV4dCk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkICpsY29udHJvbCwgKm5sY29udHJvbDsKKwkJCQl1bnNpZ25lZCBjaGFyIGluc2VydGVkID0g
MDsKKwkJCQlUQUlMUV9GT1JFQUNIX1NBRkUobGNvbnRyb2wsICZhc29jLT5wZW5kaW5nX3JlcGx5
X3F1ZXVlLCBuZXh0LCBubGNvbnRyb2wpIHsKKwkJCQkJaWYgKFNDVFBfVFNOX0dUKGNvbnRyb2wt
PnNpbmZvX3RzbiwgbGNvbnRyb2wtPnNpbmZvX3RzbikpIHsKKworCQkJCQkJY29udGludWU7CisJ
CQkJCX0gZWxzZSB7CisJCQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQkJVEFJTFFfSU5TRVJUX0JF
Rk9SRShsY29udHJvbCwgY29udHJvbCwgbmV4dCk7CisJCQkJCQlpbnNlcnRlZCA9IDE7CisJCQkJ
CQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoaW5zZXJ0ZWQgPT0gMCkgeworCQkJCQkv
KgorCQkJCQkgKiBtdXN0IGJlIHB1dCBhdCBlbmQsIHVzZQorCQkJCQkgKiBwcmV2UCAoYWxsIHNl
dHVwIGZyb20KKwkJCQkJICogbG9vcCkgdG8gc2V0dXAgbmV4dFAuCisJCQkJCSAqLworCQkJCQlU
QUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgY29udHJvbCwgbmV4
dCk7CisJCQkJfQorCQkJfQorCQkJZ290byBmaW5pc2hfZXhwcmVzc19kZWw7CisJCX0KKwkJaWYg
KGNoa19mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKKwkJCS8qIHF1ZXVlIGRpcmVjdGx5
IGludG8gc29ja2V0IGJ1ZmZlciAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIlVub3Jk
ZXJlZCBkYXRhIHRvIGJlIHJlYWQgY29udHJvbDogJXAgTUlEOiAldVxuIiwKKwkJCQljb250cm9s
LCBtaWQpOworCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+c2luZm9f
dHNuKTsKKwkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkgICAg
ICAgICAgICAgICAgICBjb250cm9sLAorCQkJICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBf
c29ja2V0LT5zb19yY3YsIDEsCisJCQkgICAgICAgICAgICAgICAgICBTQ1RQX1JFQURfTE9DS19O
T1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCQl9IGVsc2UgeworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1hYWCwgIlF1ZXVlIGNvbnRyb2w6ICVwIGZvciByZW9yZGVyaW5nIE1JRDogJXVc
biIsIGNvbnRyb2wsCisJCQkJbWlkKTsKKwkJCXNjdHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3Rj
YiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21fY2hlY2spOworCQkJaWYg
KCphYm9ydF9mbGFnKSB7CisJCQkJaWYgKGxhc3RfY2h1bmspIHsKKwkJCQkJKm0gPSBOVUxMOwor
CQkJCX0KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJCWdvdG8gZmluaXNoX2V4cHJlc3Nf
ZGVsOworCX0KKwkvKiBJZiB3ZSByZWFjaCBoZXJlIGl0cyBhIHJlYXNzZW1ibHkgKi8KKwluZWVk
X3JlYXNtX2NoZWNrID0gMTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkiUXVldWUgZGF0
YSB0byBzdHJlYW0gZm9yIHJlYXNtIGNvbnRyb2w6ICVwIE1JRDogJXVcbiIsCisJCWNvbnRyb2ws
IG1pZCk7CisJc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFzbShzdGNiLCBhc29jLCBjb250cm9sLCBj
aGssIGNyZWF0ZWRfY29udHJvbCwgYWJvcnRfZmxhZywgdHNuKTsKKwlpZiAoKmFib3J0X2ZsYWcp
IHsKKwkJLyoKKwkJICogdGhlIGFzc29jIGlzIG5vdyBnb25lIGFuZCBjaGsgd2FzIHB1dCBvbnRv
IHRoZQorCQkgKiByZWFzbSBxdWV1ZSwgd2hpY2ggaGFzIGFsbCBiZWVuIGZyZWVkLgorCQkgKi8K
KwkJaWYgKGxhc3RfY2h1bmspIHsKKwkJCSptID0gTlVMTDsKKwkJfQorCQlyZXR1cm4gKDApOwor
CX0KK2ZpbmlzaF9leHByZXNzX2RlbDoKKwkvKiBIZXJlIHdlIHRpZHkgdXAgdGhpbmdzICovCisJ
aWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gKyAxKSkgeworCQkvKiBVcGRhdGUgY3Vt
LWFjayAqLworCQlhc29jLT5jdW11bGF0aXZlX3RzbiA9IHRzbjsKKwl9CisJaWYgKGxhc3RfY2h1
bmspIHsKKwkJKm0gPSBOVUxMOworCX0KKwlpZiAob3JkZXJlZCkgeworCQlTQ1RQX1NUQVRfSU5D
Ul9DT1VOVEVSNjQoc2N0cHNfaW5vcmRlcmNodW5rcyk7CisJfSBlbHNlIHsKKwkJU0NUUF9TVEFU
X0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2ludW5vcmRlcmNodW5rcyk7CisJfQorCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3JlY3ZkYXRhKTsKKwkvKiBTZXQgaXQgcHJlc2VudCBwbGVhc2UgKi8KKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TVFJfTE9HR0lOR19F
TkFCTEUpIHsKKwkJc2N0cF9sb2dfc3RybV9kZWxfYWx0KHN0Y2IsIHRzbiwgbWlkLCBzaWQsIFND
VFBfU1RSX0xPR19GUk9NX01BUktfVFNOKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9n
X21hcChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLCBhc29jLT5jdW11bGF0aXZlX3RzbiwK
KwkJCSAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBfUFJFUEFSRV9T
TElERSk7CisJfQorCWlmIChuZWVkX3JlYXNtX2NoZWNrKSB7CisJCSh2b2lkKXNjdHBfZGVsaXZl
cl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCAmYXNvYy0+c3RybWluW3NpZF0sIFNDVFBfUkVBRF9M
T0NLX05PVF9IRUxEKTsKKwkJbmVlZF9yZWFzbV9jaGVjayA9IDA7CisJfQorCS8qIGNoZWNrIHRo
ZSBzcGVjaWFsIGZsYWcgZm9yIHN0cmVhbSByZXNldHMgKi8KKwlpZiAoKChsaXN0ZSA9IFRBSUxR
X0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpKSAhPSBOVUxMKSAmJgorCSAgICBTQ1RQX1RTTl9HRShh
c29jLT5jdW11bGF0aXZlX3RzbiwgbGlzdGUtPnRzbikpIHsKKwkJLyoKKwkJICogd2UgaGF2ZSBm
aW5pc2hlZCB3b3JraW5nIHRocm91Z2ggdGhlIGJhY2tsb2dnZWQgVFNOJ3Mgbm93CisJCSAqIHRp
bWUgdG8gcmVzZXQgc3RyZWFtcy4gMTogY2FsbCByZXNldCBmdW5jdGlvbi4gMjogZnJlZQorCQkg
KiBwZW5kaW5nX3JlcGx5IHNwYWNlIDM6IGRpc3RyaWJ1dGUgYW55IGNodW5rcyBpbgorCQkgKiBw
ZW5kaW5nX3JlcGx5X3F1ZXVlLgorCQkgKi8KKwkJc2N0cF9yZXNldF9pbl9zdHJlYW0oc3RjYiwg
bGlzdGUtPm51bWJlcl9lbnRyaWVzLCBsaXN0ZS0+bGlzdF9vZl9zdHJlYW1zKTsKKwkJVEFJTFFf
UkVNT1ZFKCZhc29jLT5yZXNldEhlYWQsIGxpc3RlLCBuZXh0X3Jlc3ApOworCQlzY3RwX3NlbmRf
ZGVmZXJyZWRfcmVzZXRfcmVzcG9uc2Uoc3RjYiwgbGlzdGUsIFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9QRVJGT1JNRUQpOworCQlTQ1RQX0ZSRUUobGlzdGUsIFNDVFBfTV9TVFJFU0VUKTsKKwkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJbGlzdGUgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
cmVzZXRIZWFkKTsKKwkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5yZXNldEhlYWQpKSB7CisJCQkv
KiBBbGwgY2FuIGJlIHJlbW92ZWQgKi8KKwkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAm
YXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4dCwgbmNvbnRyb2wpIHsKKwkJCQlUQUlMUV9S
RU1PVkUoJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQkJCXNj
dHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3RjYiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywg
Jm5lZWRfcmVhc21fY2hlY2spOworCQkJCWlmICgqYWJvcnRfZmxhZykgeworCQkJCQlyZXR1cm4g
KDApOworCQkJCX0KKwkJCQlpZiAobmVlZF9yZWFzbV9jaGVjaykgeworCQkJCQkodm9pZClzY3Rw
X2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwgYXNvYywgJmFzb2MtPnN0cm1pbltjb250cm9sLT5z
aW5mb19zdHJlYW1dLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7CisJCQkJCW5lZWRfcmVhc21f
Y2hlY2sgPSAwOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVRBSUxRX0ZPUkVBQ0hfU0FG
RShjb250cm9sLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4dCwgbmNvbnRyb2wpIHsK
KwkJCQlpZiAoU0NUUF9UU05fR1QoY29udHJvbC0+c2luZm9fdHNuLCBsaXN0ZS0+dHNuKSkgewor
CQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBpZiBjb250cm9sLT5zaW5mb190c24g
aXMgPD0gbGlzdGUtPnRzbiB3ZSBjYW4KKwkJCQkgKiBwcm9jZXNzIGl0IHdoaWNoIGlzIHRoZSBO
T1Qgb2YKKwkJCQkgKiBjb250cm9sLT5zaW5mb190c24gPiBsaXN0ZS0+dHNuCisJCQkJICovCisJ
CQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0
KTsKKwkJCQlzY3RwX3F1ZXVlX2RhdGFfdG9fc3RyZWFtKHN0Y2IsIGFzb2MsIGNvbnRyb2wsIGFi
b3J0X2ZsYWcsICZuZWVkX3JlYXNtX2NoZWNrKTsKKwkJCQlpZiAoKmFib3J0X2ZsYWcpIHsKKwkJ
CQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQkJaWYgKG5lZWRfcmVhc21fY2hlY2spIHsKKwkJCQkJ
KHZvaWQpc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsIGFzb2MsICZhc29jLT5zdHJtaW5b
Y29udHJvbC0+c2luZm9fc3RyZWFtXSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworCQkJCQlu
ZWVkX3JlYXNtX2NoZWNrID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuICgxKTsK
K30KKworc3RhdGljIGNvbnN0IGludDhfdCBzY3RwX21hcF9sb29rdXBfdGFiWzI1Nl0gPSB7Cisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAs
IDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEs
IDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAs
IDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDYsCisgIDAsIDEsIDAsIDIs
IDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAs
IDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDcsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMs
CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAs
IDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEs
IDAsIDIsIDAsIDEsIDAsIDYsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAs
IDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIs
IDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDgKK307CisKKwordm9pZAorc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IpCit7CisJLyoKKwkgKiBOb3cgd2UgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBt
YXBwaW5nIGFycmF5IGluIGEgY291cGxlIG9mIHdheXMuCisJICogMSkgRGlkIHdlIG1vdmUgdGhl
IGN1bS1hY2sgcG9pbnQ/CisJICoKKwkgKiBXaGVuIHlvdSBmaXJzdCBnbGFuY2UgYXQgdGhpcyB5
b3UgbWlnaHQgdGhpbmsKKwkgKiB0aGF0IGFsbCBlbnRyaWVzIHRoYXQgbWFrZSB1cCB0aGUgcG9z
aXRpb24KKwkgKiBvZiB0aGUgY3VtLWFjayB3b3VsZCBiZSBpbiB0aGUgbnItbWFwcGluZyBhcnJh
eQorCSAqIG9ubHkuLiBpLmUuIHRoaW5ncyB1cCB0byB0aGUgY3VtLWFjayBhcmUgYWx3YXlzCisJ
ICogZGVsaXZlcmFibGUuIFRoYXRzIHRydWUgd2l0aCBvbmUgZXhjZXB0aW9uLCB3aGVuCisJICog
aXRzIGEgZnJhZ21lbnRlZCBtZXNzYWdlIHdlIG1heSBub3QgZGVsaXZlciB0aGUgZGF0YQorCSAq
IHVudGlsIHNvbWUgdGhyZXNob2xkIChvciBhbGwgb2YgaXQpIGlzIGluIHBsYWNlLiBTbworCSAq
IHdlIG11c3QgT1IgdGhlIG5yX21hcHBpbmdfYXJyYXkgYW5kIG1hcHBpbmdfYXJyYXkgdG8KKwkg
KiBnZXQgYSB0cnVlIHBpY3R1cmUgb2YgdGhlIGN1bS1hY2suCisJICovCisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJaW50IGF0OworCXVpbnQ4X3QgdmFsOworCWludCBzbGlkZV9m
cm9tLCBzbGlkZV9lbmQsIGxnYXAsIGRpc3RhbmNlOworCXVpbnQzMl90IG9sZF9jdW1hY2ssIG9s
ZF9iYXNlLCBvbGRfaGlnaGVzdCwgaGlnaGVzdF90c247CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7
CisKKwlvbGRfY3VtYWNrID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisJb2xkX2Jhc2UgPSBhc29j
LT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuOworCW9sZF9oaWdoZXN0ID0gYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcDsKKwkvKgorCSAqIFdlIGNvdWxkIHByb2JhYmx5IGltcHJvdmUgdGhpcyBh
IHNtYWxsIGJpdCBieSBjYWxjdWxhdGluZyB0aGUKKwkgKiBvZmZzZXQgb2YgdGhlIGN1cnJlbnQg
Y3VtLWFjayBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuCisJICovCisJYXQgPSAwOworCWZvciAoc2xp
ZGVfZnJvbSA9IDA7IHNsaWRlX2Zyb20gPCBzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfc2l6ZTsg
c2xpZGVfZnJvbSsrKSB7CisJCXZhbCA9IGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbc2xpZGVfZnJv
bV0gfCBhc29jLT5tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb21dOworCQlpZiAodmFsID09IDB4ZmYp
IHsKKwkJCWF0ICs9IDg7CisJCX0gZWxzZSB7CisJCQkvKiB0aGVyZSBpcyBhIDAgYml0ICovCisJ
CQlhdCArPSBzY3RwX21hcF9sb29rdXBfdGFiW3ZhbF07CisJCQlicmVhazsKKwkJfQorCX0KKwlh
c29jLT5jdW11bGF0aXZlX3RzbiA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gKyAoYXQt
MSk7CisKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXApICYmCisgICAgICAgICAgICBTQ1RQX1RTTl9HVChhc29jLT5jdW11
bGF0aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKyNpZmRlZiBJ
TlZBUklBTlRTCisJCXBhbmljKCJodWgsIGN1bWFjayAweCV4IGdyZWF0ZXIgdGhhbiBoaWdoLXRz
biAweCV4IGluIG1hcCIsCisJCSAgICAgIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwKTsKKyNlbHNlCisJCVNDVFBfUFJJTlRGKCJodWgsIGN1bWFjayAw
eCV4IGdyZWF0ZXIgdGhhbiBoaWdoLXRzbiAweCV4IGluIG1hcCAtIHNob3VsZCBwYW5pYz9cbiIs
CisJCQkgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXApOworCQlzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoYXNvYyk7CisJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgewor
CQkJc2N0cF9sb2dfbWFwKDAsIDYsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBf
TUFQX1NMSURFX1JFU1VMVCk7CisJCX0KKwkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9
IGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
ID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisjZW5kaWYKKwl9CisJaWYgKFNDVFBfVFNOX0dUKGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXApKSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcDsK
Kwl9IGVsc2UgeworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7
CisJfQorCWlmICgoYXNvYy0+Y3VtdWxhdGl2ZV90c24gPT0gaGlnaGVzdF90c24pICYmIChhdCA+
PSA4KSkgeworCQkvKiBUaGUgY29tcGxldGUgYXJyYXkgd2FzIGNvbXBsZXRlZCBieSBhIHNpbmds
ZSBGUiAqLworCQkvKiBoaWdoZXN0IGJlY29tZXMgdGhlIGN1bS1hY2sgKi8KKwkJaW50IGNscjsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCXVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKwkJLyogY2xl
YXIgdGhlIGFycmF5ICovCisJCWNsciA9ICgoYXQrNykgPj4gMyk7CisJCWlmIChjbHIgPiBhc29j
LT5tYXBwaW5nX2FycmF5X3NpemUpIHsKKwkJCWNsciA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6
ZTsKKwkJfQorCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwgY2xyKTsKKwkJbWVtc2V0
KGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIDAsIGNscik7CisjaWZkZWYgSU5WQVJJQU5UUworCQlm
b3IgKGkgPSAwOyBpIDwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBpKyspIHsKKwkJCWlmICgo
YXNvYy0+bWFwcGluZ19hcnJheVtpXSkgfHwgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbaV0pKSB7
CisJCQkJU0NUUF9QUklOVEYoIkVycm9yIE1hcHBpbmcgYXJyYXkncyBub3QgY2xlYW4gYXQgY2xl
YXJcbiIpOworCQkJCXNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShhc29jKTsKKwkJCX0KKwkJfQor
I2VuZGlmCisJCWFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBhc29jLT5jdW11bGF0aXZl
X3RzbiArIDE7CisJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisJfSBlbHNlIGlmIChh
dCA+PSA4KSB7CisJCS8qIHdlIGNhbiBzbGlkZSB0aGUgbWFwcGluZyBhcnJheSBkb3duICovCisJ
CS8qIHNsaWRlX2Zyb20gaG9sZHMgd2hlcmUgd2UgaGl0IHRoZSBmaXJzdCBOT04gMHhmZiBieXRl
ICovCisKKwkJLyoKKwkJICogbm93IGNhbGN1bGF0ZSB0aGUgY2VpbGluZyBvZiB0aGUgbW92ZSB1
c2luZyBvdXIgaGlnaGVzdAorCQkgKiBUU04gdmFsdWUKKwkJICovCisJCVNDVFBfQ0FMQ19UU05f
VE9fR0FQKGxnYXAsIGhpZ2hlc3RfdHNuLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsK
KwkJc2xpZGVfZW5kID0gKGxnYXAgPj4gMyk7CisJCWlmIChzbGlkZV9lbmQgPCBzbGlkZV9mcm9t
KSB7CisJCQlzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoYXNvYyk7CisjaWZkZWYgSU5WQVJJQU5U
UworCQkJcGFuaWMoImltcG9zc2libGUgc2xpZGUiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigi
aW1wb3NzaWJsZSBzbGlkZSBsZ2FwOiAleCBzbGlkZV9lbmQ6ICV4IHNsaWRlX2Zyb206ICV4PyBh
dDogJWRcbiIsCisJCQkgICAgICAgICAgICBsZ2FwLCBzbGlkZV9lbmQsIHNsaWRlX2Zyb20sIGF0
KTsKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCWlmIChzbGlkZV9lbmQgPiBhc29jLT5tYXBw
aW5nX2FycmF5X3NpemUpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygid291bGQgb3Zl
cnJ1biBidWZmZXIiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiR2FrLCB3b3VsZCBoYXZlIG92
ZXJydW4gbWFwIGVuZDogJWQgc2xpZGVfZW5kOiAlZFxuIiwKKwkJCSAgICAgICAgICAgIGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfc2l6ZSwgc2xpZGVfZW5kKTsKKwkJCXNsaWRlX2VuZCA9IGFzb2MtPm1h
cHBpbmdfYXJyYXlfc2l6ZTsKKyNlbmRpZgorCQl9CisJCWRpc3RhbmNlID0gKHNsaWRlX2VuZCAt
IHNsaWRlX2Zyb20pICsgMTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19tYXAob2xkX2Jh
c2UsIG9sZF9jdW1hY2ssIG9sZF9oaWdoZXN0LAorCQkJCSAgICAgU0NUUF9NQVBfUFJFUEFSRV9T
TElERSk7CisJCQlzY3RwX2xvZ19tYXAoKHVpbnQzMl90KSBzbGlkZV9mcm9tLCAodWludDMyX3Qp
IHNsaWRlX2VuZCwKKwkJCQkgICAgICh1aW50MzJfdCkgbGdhcCwgU0NUUF9NQVBfU0xJREVfRlJP
TSk7CisJCX0KKwkJaWYgKGRpc3RhbmNlICsgc2xpZGVfZnJvbSA+IGFzb2MtPm1hcHBpbmdfYXJy
YXlfc2l6ZSB8fAorCQkgICAgZGlzdGFuY2UgPCAwKSB7CisJCQkvKgorCQkJICogSGVyZSB3ZSBk
byBOT1Qgc2xpZGUgZm9yd2FyZCB0aGUgYXJyYXkgc28gdGhhdAorCQkJICogaG9wZWZ1bGx5IHdo
ZW4gbW9yZSBkYXRhIGNvbWVzIGluIHRvIGZpbGwgaXQgdXAKKwkJCSAqIHdlIHdpbGwgYmUgYWJs
ZSB0byBzbGlkZSBpdCBmb3J3YXJkLiBSZWFsbHkgSQorCQkJICogZG9uJ3QgdGhpbmsgdGhpcyBz
aG91bGQgaGFwcGVuIDotMAorCQkJICovCisKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9n
X21hcCgodWludDMyX3QpIGRpc3RhbmNlLCAodWludDMyX3QpIHNsaWRlX2Zyb20sCisJCQkJCSAg
ICAgKHVpbnQzMl90KSBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUsCisJCQkJCSAgICAgU0NUUF9N
QVBfU0xJREVfTk9ORSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnQgaWk7CisKKwkJCWZvciAo
aWkgPSAwOyBpaSA8IGRpc3RhbmNlOyBpaSsrKSB7CisJCQkJYXNvYy0+bWFwcGluZ19hcnJheVtp
aV0gPSBhc29jLT5tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb20gKyBpaV07CisJCQkJYXNvYy0+bnJf
bWFwcGluZ19hcnJheVtpaV0gPSBhc29jLT5ucl9tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb20gKyBp
aV07CisKKwkJCX0KKwkJCWZvciAoaWkgPSBkaXN0YW5jZTsgaWkgPCBhc29jLT5tYXBwaW5nX2Fy
cmF5X3NpemU7IGlpKyspIHsKKwkJCQlhc29jLT5tYXBwaW5nX2FycmF5W2lpXSA9IDA7CisJCQkJ
YXNvYy0+bnJfbWFwcGluZ19hcnJheVtpaV0gPSAwOworCQkJfQorCQkJaWYgKGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXAgKyAxID09IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsK
KwkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwICs9IChzbGlkZV9mcm9tIDw8IDMpOwor
CQkJfQorCQkJaWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKyAxID09IGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsKKwkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bnJfbWFwICs9IChzbGlkZV9mcm9tIDw8IDMpOworCQkJfQorCQkJYXNvYy0+bWFwcGluZ19hcnJh
eV9iYXNlX3RzbiArPSAoc2xpZGVfZnJvbSA8PCAzKTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNj
dHBfbG9nX21hcChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLAorCQkJCQkgICAgIGFzb2Mt
PmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLAorCQkJCQkgICAg
IFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBf
c2Fja19jaGVjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCB3YXNfYV9nYXApCit7CisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3QgaGlnaGVzdF90c247CisJaW50
IGlzX2FfZ2FwOworCisJc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhzdGNiKTsKKwlhc29jID0g
JnN0Y2ItPmFzb2M7CisJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9u
cl9tYXAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7CisJCWhpZ2hlc3RfdHNuID0g
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcDsKKwl9IGVsc2UgeworCQloaWdoZXN0X3Rz
biA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJfQorCS8qIElzIHRoZXJlIGEgZ2Fw
IG5vdz8gKi8KKwlpc19hX2dhcCA9IFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBzdGNiLT5hc29j
LmN1bXVsYXRpdmVfdHNuKTsKKworCS8qCisJICogTm93IHdlIG5lZWQgdG8gc2VlIGlmIHdlIG5l
ZWQgdG8gcXVldWUgYSBzYWNrIG9yIGp1c3Qgc3RhcnQgdGhlCisJICogdGltZXIgKGlmIGFsbG93
ZWQpLgorCSAqLworCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1NFTlQpIHsKKwkJLyoKKwkJICogT2sgc3BlY2lhbCBjYXNlLCBpbiBTSFVURE9XTi1TRU5U
IGNhc2UuIGhlcmUgd2UKKwkJICogbWFrZXIgc3VyZSBTQUNLIHRpbWVyIGlzIG9mZiBhbmQgaW5z
dGVhZCBzZW5kIGEKKwkJICogU0hVVERPV04gYW5kIGEgU0FDSworCQkgKi8KKwkJaWYgKFNDVFBf
T1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkgeworCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLAorCQkJICAgICAgICAgICAgICAgIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5EQVRBICsgU0NUUF9MT0NfMTcpOworCQl9CisJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNi
LAorCQkgICAgICAgICAgICAgICAgICAgKChzdGNiLT5hc29jLmFsdGVybmF0ZSkgPyBzdGNiLT5h
c29jLmFsdGVybmF0ZSA6IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikpOworCQlpZiAo
aXNfYV9nYXApIHsKKwkJCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBDTVQgREFDIGFsZ29yaXRobTogaW5jcmVhc2Ug
bnVtYmVyIG9mIHBhY2tldHMKKwkJICogcmVjZWl2ZWQgc2luY2UgbGFzdCBhY2sKKwkJICovCisJ
CXN0Y2ItPmFzb2MuY210X2RhY19wa3RzX3JjdmQrKzsKKworCQlpZiAoKHN0Y2ItPmFzb2Muc2Vu
ZF9zYWNrID09IDEpIHx8ICAgICAgLyogV2UgbmVlZCB0byBzZW5kIGEgU0FDSyAqLworCQkgICAg
KCh3YXNfYV9nYXApICYmIChpc19hX2dhcCA9PSAwKSkgfHwJLyogd2FzIGEgZ2FwLCBidXQgbm8K
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGxvbmdlciBpcyBv
bmUgKi8KKwkJICAgIChzdGNiLT5hc29jLm51bWR1cHRzbnMpIHx8ICAgICAgICAgIC8qIHdlIGhh
dmUgZHVwJ3MgKi8KKwkJICAgIChpc19hX2dhcCkgfHwgICAgICAgICAgICAgICAgICAgICAgIC8q
IGlzIHN0aWxsIGEgZ2FwICovCisJCSAgICAoc3RjYi0+YXNvYy5kZWxheWVkX2FjayA9PSAwKSB8
fCAgICAvKiBEZWxheWVkIHNhY2sgZGlzYWJsZWQgKi8KKwkJICAgIChzdGNiLT5hc29jLmRhdGFf
cGt0c19zZWVuID49IHN0Y2ItPmFzb2Muc2Fja19mcmVxKQkvKiBoaXQgbGltaXQgb2YgcGt0cyAq
LworCQkJKSB7CisKKwkJCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgor
CQkJICAgIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSAmJgorCQkJICAgIChz
dGNiLT5hc29jLnNlbmRfc2FjayA9PSAwKSAmJgorCQkJICAgIChzdGNiLT5hc29jLm51bWR1cHRz
bnMgPT0gMCkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5kZWxheWVkX2FjaykgJiYKKwkJCSAgICAo
IVNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKSkpIHsK
KworCQkJCS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0aG06IFdpdGggQ01ULAorCQkJCSAqIGRl
bGF5IGFja3MgZXZlbiBpbiB0aGUgZmFjZSBvZgorCisJCQkJICogcmVvcmRlcmluZy4gVGhlcmVm
b3JlLCBpZiBhY2tzCisJCQkJICogdGhhdCBkbyBub3QgaGF2ZSB0byBiZSBzZW50CisJCQkJICog
YmVjYXVzZSBvZiB0aGUgYWJvdmUgcmVhc29ucywKKwkJCQkgKiB3aWxsIGJlIGRlbGF5ZWQuIFRo
YXQgaXMsIGFja3MKKwkJCQkgKiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBzZW50IGR1ZSB0bworCQkJ
CSAqIGdhcCByZXBvcnRzIHdpbGwgYmUgZGVsYXllZCB3aXRoCisJCQkJICogREFDLiBTdGFydCB0
aGUgZGVsYXllZCBhY2sgdGltZXIuCisJCQkJICovCisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfUkVDViwKKwkJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIE9rIHdlIG11c3QgYnVpbGQg
YSBTQUNLIHNpbmNlIHRoZQorCQkJCSAqIHRpbWVyIGlzIHBlbmRpbmcsIHdlIGdvdCBvdXIKKwkJ
CQkgKiBmaXJzdCBwYWNrZXQgT1IgdGhlcmUgYXJlIGdhcHMgb3IKKwkJCQkgKiBkdXBsaWNhdGVz
LgorCQkJCSAqLworCQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmc3RjYi0+YXNvYy5kYWNr
X3RpbWVyLnRpbWVyKTsKKwkJCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJnN0
Y2ItPmFzb2MuZGFja190aW1lci50aW1lcikpIHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9SRUNWLAorCQkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgTlVMTCk7CisJCQl9CisJCX0KKwl9Cit9CisKK2ludAorc2N0cF9wcm9jZXNzX2RhdGEoc3Ry
dWN0IG1idWYgKiptbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGludCBsZW5ndGgsCisgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90ICpo
aWdoX3RzbikKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlpbnQgbnVtX2NodW5rcyA9IDA7CS8qIG51bWJl
ciBvZiBjb250cm9sIGNodW5rcyBwcm9jZXNzZWQgKi8KKwlpbnQgc3RvcF9wcm9jID0gMDsKKwlp
bnQgYnJlYWtfZmxhZywgbGFzdF9jaHVuazsKKwlpbnQgYWJvcnRfZmxhZyA9IDAsIHdhc19hX2dh
cDsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwl1aW50MzJfdCBoaWdoZXN0X3RzbjsKKwl1aW50MTZfdCBj
aGtfbGVuZ3RoOworCisJLyogc2V0IHRoZSByd25kICovCisJc2N0cF9zZXRfcnduZChzdGNiLCAm
c3RjYi0+YXNvYyk7CisKKwltID0gKm1tOworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwor
CWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKKwkJaGlnaGVz
dF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCX0gZWxzZSB7CisJCWhp
Z2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKKwl9CisJd2FzX2FfZ2Fw
ID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c24pOwor
CS8qCisJICogc2V0dXAgd2hlcmUgd2UgZ290IHRoZSBsYXN0IERBVEEgcGFja2V0IGZyb20gZm9y
IGFueSBTQUNLIHRoYXQKKwkgKiBtYXkgbmVlZCB0byBnbyBvdXQuIERvbid0IGJ1bXAgdGhlIG5l
dC4gVGhpcyBpcyBkb25lIE9OTFkgd2hlbiBhCisJICogY2h1bmsgaXMgYXNzaWduZWQuCisJICov
CisJYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20gPSBuZXQ7CisKKyNpZm5kZWYgX19QYW5kYV9f
CisJLyotCisJICogTm93IGJlZm9yZSB3ZSBwcm9jZWVkIHdlIG11c3QgZmlndXJlIG91dCBpZiB0
aGlzIGlzIGEgd2FzdGVkCisJICogY2x1c3Rlci4uLiBpLmUuIGl0IGlzIGEgc21hbGwgcGFja2V0
IHNlbnQgaW4gYW5kIHlldCB0aGUgZHJpdmVyCisJICogdW5kZXJuZWF0aCBhbGxvY2F0ZWQgYSBm
dWxsIGNsdXN0ZXIgZm9yIGl0LiBJZiBzbyB3ZSBtdXN0IGNvcHkgaXQKKwkgKiB0byBhIHNtYWxs
ZXIgbWJ1ZiBhbmQgZnJlZSB1cCB0aGUgY2x1c3RlciBtYnVmLiBUaGlzIHdpbGwgaGVscAorCSAq
IHdpdGggY2x1c3RlciBzdGFydmF0aW9uLiBOb3RlIGZvciBfX1BhbmRhX18gd2UgZG9uJ3QgZG8g
dGhpcworCSAqIHNpbmNlIGl0IGhhcyBjbHVzdGVycyBhbGwgdGhlIHdheSBkb3duIHRvIDY0IGJ5
dGVzLgorCSAqLworCWlmIChTQ1RQX0JVRl9MRU4obSkgPCAobG9uZylNTEVOICYmIFNDVFBfQlVG
X05FWFQobSkgPT0gTlVMTCkgeworCQkvKiB3ZSBvbmx5IGhhbmRsZSBtYnVmcyB0aGF0IGFyZSBz
aW5nbGV0b25zLi4gbm90IGNoYWlucyAqLworCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKFND
VFBfQlVGX0xFTihtKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAobSkgeworCQkJ
Lyogb2sgbGV0cyBzZWUgaWYgd2UgY2FuIGNvcHkgdGhlIGRhdGEgdXAgKi8KKwkJCWNhZGRyX3Qg
KmZyb20sICp0bzsKKwkJCS8qIGdldCB0aGUgcG9pbnRlcnMgYW5kIGNvcHkgKi8KKwkJCXRvID0g
bXRvZChtLCBjYWRkcl90ICopOworCQkJZnJvbSA9IG10b2QoKCptbSksIGNhZGRyX3QgKik7CisJ
CQltZW1jcHkodG8sIGZyb20sIFNDVFBfQlVGX0xFTigoKm1tKSkpOworCQkJLyogY29weSB0aGUg
bGVuZ3RoIGFuZCBmcmVlIHVwIHRoZSBvbGQgKi8KKwkJCVNDVFBfQlVGX0xFTihtKSA9IFNDVFBf
QlVGX0xFTigoKm1tKSk7CisJCQlzY3RwX21fZnJlZW0oKm1tKTsKKwkJCS8qIHN1Y2Nlc3MsIGJh
Y2sgY29weSAqLworCQkJKm1tID0gbTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGFyZSBpbiB0cm91
YmxlIGluIHRoZSBtYnVmIHdvcmxkIC4uIHlpa2VzICovCisJCQltID0gKm1tOworCQl9CisJfQor
I2VuZGlmCisJLyogZ2V0IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNodW5rIGhlYWRlciAqLworCWNo
ID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAodWludDhfdCAqKSZjaHVua19idWYpOworCWlmIChjaCA9PSBOVUxMKSB7CisJCXJldHVybiAo
MSk7CisJfQorCS8qCisJICogcHJvY2VzcyBhbGwgREFUQSBjaHVua3MuLi4KKwkgKi8KKwkqaGln
aF90c24gPSBhc29jLT5jdW11bGF0aXZlX3RzbjsKKwlicmVha19mbGFnID0gMDsKKwlhc29jLT5k
YXRhX3BrdHNfc2VlbisrOworCXdoaWxlIChzdG9wX3Byb2MgPT0gMCkgeworCQkvKiB2YWxpZGF0
ZSBjaHVuayBsZW5ndGggKi8KKwkJY2hrX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgp
OworCQlpZiAobGVuZ3RoIC0gKm9mZnNldCA8IGNoa19sZW5ndGgpIHsKKwkJCS8qIGFsbCBkb25l
LCBtdXR1bGF0ZWQgY2h1bmsgKi8KKwkJCXN0b3BfcHJvYyA9IDE7CisJCQljb250aW51ZTsKKwkJ
fQorCQlpZiAoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSAmJgorCQkgICAgKGNoLT5jaHVu
a190eXBlID09IFNDVFBfREFUQSkpIHsKKwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQljaGFy
IG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cp
LCAiJXMiLCAiSS1EQVRBIGNodW5rIHJlY2VpdmVkIHdoZW4gREFUQSB3YXMgbmVnb3RpYXRlZCIp
OworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJ
T0xBVElPTiwgbXNnKTsKKwkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBf
RlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE4OworCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lh
dGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCXJldHVybiAo
Mik7CisJCX0KKwkJaWYgKChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgJiYKKwkJICAgIChj
aC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lEQVRBKSkgeworCQkJc3RydWN0IG1idWYgKm9wX2VycjsK
KwkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJCXNucHJpbnRmKG1zZywgc2l6
ZW9mKG1zZyksICIlcyIsICJEQVRBIGNodW5rIHJlY2VpdmVkIHdoZW4gSS1EQVRBIHdhcyBuZWdv
dGlhdGVkIik7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJP
VE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2Rl
ID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTk7CisJCQlzY3RwX2Fib3J0X2Fu
X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJ
cmV0dXJuICgyKTsKKwkJfQorCQlpZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkgfHwK
KwkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lEQVRBKSkgeworCQkJdWludDE2X3QgY2xl
bjsKKworCQkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkgeworCQkJCWNsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7CisJCQl9IGVsc2UgeworCQkJCWNsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspOworCQkJfQorCQkJaWYgKGNoa19sZW5ndGgg
PCBjbGVuKSB7CisJCQkJLyoKKwkJCQkgKiBOZWVkIHRvIHNlbmQgYW4gYWJvcnQgc2luY2Ugd2Ug
aGFkIGEKKwkJCQkgKiBpbnZhbGlkIGRhdGEgY2h1bmsuCisJCQkJICovCisJCQkJc3RydWN0IG1i
dWYgKm9wX2VycjsKKwkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQkJc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzIGNodW5rIG9mIGxlbmd0aCAldSIsCisJCQkJICAg
ICAgICAgY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9EQVRBID8gIkRBVEEiIDogIkktREFUQSIsCisJ
CQkJICAgICAgICAgY2hrX2xlbmd0aCk7CisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVz
ZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJCQlzdGNiLT5zY3RwX2Vw
LT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yMDsK
KwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworCQkJCXJldHVybiAoMik7CisJCQl9CisjaWZkZWYgU0NUUF9BVURJVElO
R19FTkFCTEVECisJCQlzY3RwX2F1ZGl0X2xvZygweEIxLCAwKTsKKyNlbmRpZgorCQkJaWYgKFND
VFBfU0laRTMyKGNoa19sZW5ndGgpID09IChsZW5ndGggLSAqb2Zmc2V0KSkgeworCQkJCWxhc3Rf
Y2h1bmsgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlsYXN0X2NodW5rID0gMDsKKwkJCX0KKwkJCWlm
IChzY3RwX3Byb2Nlc3NfYV9kYXRhX2NodW5rKHN0Y2IsIGFzb2MsIG1tLCAqb2Zmc2V0LCAKKwkJ
CQkJCSAgICAgIGNoa19sZW5ndGgsIG5ldCwgaGlnaF90c24sICZhYm9ydF9mbGFnLCAmYnJlYWtf
ZmxhZywKKwkJCQkJCSAgICAgIGxhc3RfY2h1bmssIGNoLT5jaHVua190eXBlKSkgeworCQkJCW51
bV9jaHVua3MrKzsKKwkJCX0KKwkJCWlmIChhYm9ydF9mbGFnKQorCQkJCXJldHVybiAoMik7CisK
KwkJCWlmIChicmVha19mbGFnKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQgYmVjYXVzZSBvZiBvdXQg
b2YgcnduZCBzcGFjZSBhbmQgbm8KKwkJCQkgKiBkcm9wIHJlcCBzcGFjZSBsZWZ0LgorCQkJCSAq
LworCQkJCXN0b3BfcHJvYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSB7CisJ
CQkvKiBub3QgYSBkYXRhIGNodW5rIGluIHRoZSBkYXRhIHJlZ2lvbiAqLworCQkJc3dpdGNoIChj
aC0+Y2h1bmtfdHlwZSkgeworCQkJY2FzZSBTQ1RQX0lOSVRJQVRJT046CisJCQljYXNlIFNDVFBf
SU5JVElBVElPTl9BQ0s6CisJCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FDSzoKKwkJCWNhc2UgU0NU
UF9OUl9TRUxFQ1RJVkVfQUNLOgorCQkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUOgorCQkJ
Y2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6CisJCQljYXNlIFNDVFBfQUJPUlRfQVNTT0NJQVRJT046
CisJCQljYXNlIFNDVFBfU0hVVERPV046CisJCQljYXNlIFNDVFBfU0hVVERPV05fQUNLOgorCQkJ
Y2FzZSBTQ1RQX09QRVJBVElPTl9FUlJPUjoKKwkJCWNhc2UgU0NUUF9DT09LSUVfRUNITzoKKwkJ
CWNhc2UgU0NUUF9DT09LSUVfQUNLOgorCQkJY2FzZSBTQ1RQX0VDTl9FQ0hPOgorCQkJY2FzZSBT
Q1RQX0VDTl9DV1I6CisJCQljYXNlIFNDVFBfU0hVVERPV05fQ09NUExFVEU6CisJCQljYXNlIFND
VFBfQVVUSEVOVElDQVRJT046CisJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJCWNhc2UgU0NU
UF9QQUNLRVRfRFJPUFBFRDoKKwkJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6CisJCQljYXNlIFND
VFBfRk9SV0FSRF9DVU1fVFNOOgorCQkJY2FzZSBTQ1RQX0FTQ09ORjoKKwkJCXsKKwkJCQkvKgor
CQkJCSAqIE5vdywgd2hhdCBkbyB3ZSBkbyB3aXRoIEtOT1dOIGNodW5rcyB0aGF0CisJCQkJICog
YXJlIE5PVCBpbiB0aGUgcmlnaHQgcGxhY2U/CisJCQkJICoKKwkJCQkgKiBGb3Igbm93LCBJIGRv
IG5vdGhpbmcgYnV0IGlnbm9yZSB0aGVtLiBXZQorCQkJCSAqIG1heSBsYXRlciB3YW50IHRvIGFk
ZCBzeXNjdGwgc3R1ZmYgdG8KKwkJCQkgKiBzd2l0Y2ggb3V0IGFuZCBkbyBlaXRoZXIgYW4gQUJP
UlQoKSBvcgorCQkJCSAqIHBvc3NpYmx5IHByb2Nlc3MgdGhlbS4KKwkJCQkgKi8KKwkJCQlzdHJ1
Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJ
CQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiREFUQSBjaHVuayBmb2xsb3dlZCBieSBjaHVu
ayBvZiB0eXBlICUyLjJ4IiwKKwkJCQkgICAgICAgICBjaC0+Y2h1bmtfdHlwZSk7CisJCQkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwg
bXNnKTsKKwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJCXJldHVybiAoMik7CisJCQl9CisJCQlkZWZhdWx0Ogor
CQkJCS8qCisJCQkJICogVW5rbm93biBjaHVuayB0eXBlOiB1c2UgYml0IHJ1bGVzIGFmdGVyCisJ
CQkJICogY2hlY2tpbmcgbGVuZ3RoCisJCQkJICovCisJCQkJaWYgKGNoa19sZW5ndGggPCBzaXpl
b2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCQkJCS8qCisJCQkJCSAqIE5lZWQgdG8gc2Vu
ZCBhbiBhYm9ydCBzaW5jZSB3ZSBoYWQgYQorCQkJCQkgKiBpbnZhbGlkIGNodW5rLgorCQkJCQkg
Ki8KKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lO
Rk9fTEVOXTsKKworCQkJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQ2h1bmsgb2YgbGVu
Z3RoICV1IiwKKwkJCQkJCSBjaGtfbGVuZ3RoKTsKKwkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJCQkJc3RjYi0+
c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9M
T0NfMjA7CisJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIs
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCXJldHVybiAoMik7CisJCQkJfQorCQkJCWlmIChj
aC0+Y2h1bmtfdHlwZSAmIDB4NDApIHsKKwkJCQkJLyogQWRkIGEgZXJyb3IgcmVwb3J0IHRvIHRo
ZSBxdWV1ZSAqLworCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCQlzdHJ1Y3Qgc2N0cF9n
ZW5fZXJyb3JfY2F1c2UgKmNhdXNlOworCisJCQkJCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKSwKKwkJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCQkJaWYg
KG9wX2VyciAhPSBOVUxMKSB7CisJCQkJCQljYXVzZSAgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNj
dHBfZ2VuX2Vycm9yX2NhdXNlICopOworCQkJCQkJY2F1c2UtPmNvZGUgPSBodG9ucyhTQ1RQX0NB
VVNFX1VOUkVDT0dfQ0hVTkspOworCQkJCQkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKCh1aW50MTZf
dCkoY2hrX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UpKSk7CisJ
CQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3Jf
Y2F1c2UpOworCQkJCQkJU0NUUF9CVUZfTkVYVChvcF9lcnIpID0gU0NUUF9NX0NPUFlNKG0sICpv
ZmZzZXQsIGNoa19sZW5ndGgsIE1fTk9XQUlUKTsKKwkJCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG9w
X2VycikgIT0gTlVMTCkgeworCQkJCQkJCXNjdHBfcXVldWVfb3BfZXJyKHN0Y2IsIG9wX2Vycik7
CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOworCQkJCQkJfQor
CQkJCQl9CisJCQkJfQorCQkJCWlmICgoY2gtPmNodW5rX3R5cGUgJiAweDgwKSA9PSAwKSB7CisJ
CQkJCS8qIGRpc2NhcmQgdGhlIHJlc3Qgb2YgdGhpcyBwYWNrZXQgKi8KKwkJCQkJc3RvcF9wcm9j
ID0gMTsKKwkJCQl9CS8qIGVsc2Ugc2tpcCB0aGlzIGJhZCBjaHVuayBhbmQKKwkJCQkJICogY29u
dGludWUuLi4gKi8KKwkJCQlicmVhazsKKwkJCX0JLyogc3dpdGNoIG9mIGNodW5rIHR5cGUgKi8K
KwkJfQorCQkqb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5ndGgpOworCQlpZiAoKCpvZmZz
ZXQgPj0gbGVuZ3RoKSB8fCBzdG9wX3Byb2MpIHsKKwkJCS8qIG5vIG1vcmUgZGF0YSBsZWZ0IGlu
IHRoZSBtYnVmIGNoYWluICovCisJCQlzdG9wX3Byb2MgPSAxOworCQkJY29udGludWU7CisJCX0K
KwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHVpbnQ4X3QgKikmY2h1bmtfYnVmKTsKKwkJaWYgKGNoID09IE5VTEwpIHsKKwkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQlzdG9wX3Byb2MgPSAxOworCQkJY29udGludWU7CisJCX0K
Kwl9CisJaWYgKGJyZWFrX2ZsYWcpIHsKKwkJLyoKKwkJICogd2UgbmVlZCB0byByZXBvcnQgcndu
ZCBvdmVycnVuIGRyb3BzLgorCQkgKi8KKwkJc2N0cF9zZW5kX3BhY2tldF9kcm9wcGVkKHN0Y2Is
IG5ldCwgKm1tLCBsZW5ndGgsIGlwaGxlbiwgMCk7CisJfQorCWlmIChudW1fY2h1bmtzKSB7CisJ
CS8qCisJCSAqIERpZCB3ZSBnZXQgZGF0YSwgaWYgc28gdXBkYXRlIHRoZSB0aW1lIGZvciBhdXRv
LWNsb3NlIGFuZAorCQkgKiBnaXZlIHBlZXIgY3JlZGl0IGZvciBiZWluZyBhbGl2ZS4KKwkJICov
CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zwa3R3aXRoZGF0YSk7CisJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7
CisJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKKwkJCQkgICAgICAgc3Rj
Yi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAorCQkJCSAgICAgICAwLAorCQkJCSAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEsCisJCQkJICAgICAgIF9fTElORV9fKTsKKwkJfQorCQlzdGNi
LT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCQkodm9pZClTQ1RQX0dFVFRJTUVfVElN
RVZBTCgmc3RjYi0+YXNvYy50aW1lX2xhc3RfcmN2ZCk7CisJfQorCS8qIG5vdyBzZXJ2aWNlIGFs
bCBvZiB0aGUgcmVhc3NtIHF1ZXVlIGlmIG5lZWRlZCAqLworCWlmIChTQ1RQX0dFVF9TVEFURShh
c29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKKwkJLyogQXNzdXJlIHRoYXQgd2Ug
YWNrIHJpZ2h0IGF3YXkgKi8KKwkJc3RjYi0+YXNvYy5zZW5kX3NhY2sgPSAxOworCX0KKwkvKiBT
dGFydCBhIHNhY2sgdGltZXIgb3IgUVVFVUUgYSBTQUNLIGZvciBzZW5kaW5nICovCisJc2N0cF9z
YWNrX2NoZWNrKHN0Y2IsIHdhc19hX2dhcCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu
dAorc2N0cF9wcm9jZXNzX3NlZ21lbnRfcmFuZ2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICoqcF90cDEsIHVpbnQzMl90IGxhc3RfdHNuLAorCQkJICAgdWlu
dDE2X3QgZnJhZ19zdHJ0LCB1aW50MTZfdCBmcmFnX2VuZCwgaW50IG5yX3NhY2tpbmcsCisJCQkg
ICBpbnQgKm51bV9mcnMsCisJCQkgICB1aW50MzJfdCAqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24s
CisJCQkgICB1aW50MzJfdCAgKnRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLAorCQkJICAgaW50ICpy
dG9fb2spCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCXVuc2lnbmVkIGludCB0
aGVUU047CisJaW50IGosIHdha2VfaGltID0gMCwgY2lyY2xlZCA9IDA7CisKKwkvKiBSZWNvdmVy
IHRoZSB0cDEgd2UgbGFzdCBzYXcgKi8KKwl0cDEgPSAqcF90cDE7CisJaWYgKHRwMSA9PSBOVUxM
KSB7CisJCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOworCX0KKwlm
b3IgKGogPSBmcmFnX3N0cnQ7IGogPD0gZnJhZ19lbmQ7IGorKykgeworCQl0aGVUU04gPSBqICsg
bGFzdF90c247CisJCXdoaWxlICh0cDEpIHsKKwkJCWlmICh0cDEtPnJlYy5kYXRhLmRvaW5nX2Zh
c3RfcmV0cmFuc21pdCkKKwkJCQkoKm51bV9mcnMpICs9IDE7CisKKwkJCS8qLQorCQkJICogQ01U
OiBDVUN2MiBhbGdvcml0aG0uIEZvciBlYWNoIFRTTiBiZWluZworCQkJICogcHJvY2Vzc2VkIGZy
b20gdGhlIHNlbnQgcXVldWUsIHRyYWNrIHRoZQorCQkJICogbmV4dCBleHBlY3RlZCBwc2V1ZG8t
Y3VtYWNrLCBvcgorCQkJICogcnR4X3BzZXVkb19jdW1hY2ssIGlmIHJlcXVpcmVkLiBTZXBhcmF0
ZQorCQkJICogY3VtYWNrIHRyYWNrZXJzIGZvciBmaXJzdCB0cmFuc21pc3Npb25zLAorCQkJICog
YW5kIHJldHJhbnNtaXNzaW9ucy4KKwkJCSAqLworCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RB
VEFHUkFNX1JFU0VORCkgJiYKKwkJCSAgICAodHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNr
ID09IDEpICYmCisJCQkgICAgKHRwMS0+c25kX2NvdW50ID09IDEpKSB7CisJCQkJdHAxLT53aG9U
by0+cHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCXRwMS0+d2hvVG8tPmZp
bmRfcHNldWRvX2N1bWFjayA9IDA7CisJCQl9CisJCQlpZiAoKHRwMS0+c2VudCA8IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSAmJgorCQkJICAgICh0cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3Vt
YWNrID09IDEpICYmCisJCQkgICAgKHRwMS0+c25kX2NvdW50ID4gMSkpIHsKKwkJCQl0cDEtPndo
b1RvLT5ydHhfcHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCXRwMS0+d2hv
VG8tPmZpbmRfcnR4X3BzZXVkb19jdW1hY2sgPSAwOworCQkJfQorCQkJaWYgKHRwMS0+cmVjLmRh
dGEudHNuID09IHRoZVRTTikgeworCQkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9V
TlNFTlQpIHsKKwkJCQkJLyotCisJCQkJCSAqIG11c3QgYmUgaGVsZCB1bnRpbAorCQkJCQkgKiBj
dW0tYWNrIHBhc3NlcworCQkJCQkgKi8KKwkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7CisJCQkJCQkvKi0KKwkJCQkJCSAqIElmIGl0IGlzIGxlc3MgdGhhbiBSRVNF
TkQsIGl0IGlzCisJCQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdodC4KKwkJCQkJCSAqIEhp
Z2hlciB2YWx1ZXMgbWF5IGFscmVhZHkgYmUgc2V0CisJCQkJCQkgKiB2aWEgcHJldmlvdXMgR2Fw
IEFjayBCbG9ja3MuLi4KKwkJCQkJCSAqIGkuZS4gQUNLRUQgb3IgUkVTRU5ELgorCQkJCQkJICov
CisJCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sCisJCQkJCQkgICAgICAg
ICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuKSkgeworCQkJCQkJCSpiaWdnZXN0X25l
d2x5X2Fja2VkX3RzbiA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCQkJfQorCQkJCQkJLyotCisJ
CQkJCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQgSFROQSkgLSBzZXQKKwkJCQkJCSAqIHNhd19uZXdh
Y2sgdG8gMSBmb3IgZGVzdCBiZWluZworCQkJCQkJICogbmV3bHkgYWNrZWQuIHVwZGF0ZQorCQkJ
CQkJICogdGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrIGlmCisJCQkJCQkgKiBhcHByb3ByaWF0ZS4K
KwkJCQkJCSAqLworCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPT0g
MCkKKwkJCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNrID0gMTsKKworCQkJCQkJaWYgKFNDVFBf
VFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJICAgICAgICAgICAgICAgIHRwMS0+d2hv
VG8tPnRoaXNfc2Fja19oaWdoZXN0X25ld2FjaykpIHsKKwkJCQkJCQl0cDEtPndob1RvLT50aGlz
X3NhY2tfaGlnaGVzdF9uZXdhY2sgPQorCQkJCQkJCQl0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQkJ
CX0KKwkJCQkJCS8qLQorCQkJCQkJICogQ01UIERBQyBhbGdvOiBhbHNvIHVwZGF0ZQorCQkJCQkJ
ICogdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sKKwkJCQkJCSAqLworCQkJCQkJaWYgKCp0aGlzX3Nh
Y2tfbG93ZXN0X25ld2FjayA9PSAwKSB7CisJCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJCQlz
Y3RwX2xvZ19zYWNrKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKKwkJCQkJCQkJCSAgICAgIGxh
c3RfdHNuLAorCQkJCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCQkJCQkgICAg
ICAwLAorCQkJCQkJCQkJICAgICAgMCwKKwkJCQkJCQkJCSAgICAgIFNDVFBfTE9HX1RTTl9BQ0tF
RCk7CisJCQkJCQkJfQorCQkJCQkJCSp0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9IHRwMS0+cmVj
LmRhdGEudHNuOworCQkJCQkJfQorCQkJCQkJLyotCisJCQkJCQkgKiBDTVQ6IENVQ3YyIGFsZ29y
aXRobS4gSWYgKHJ0eC0pcHNldWRvLWN1bWFjayBmb3IgY29ycmVzcAorCQkJCQkJICogZGVzdCBp
cyBiZWluZyBhY2tlZCwgdGhlbiB3ZSBoYXZlIGEgbmV3IChydHgtKXBzZXVkby1jdW1hY2suIFNl
dAorCQkJCQkJICogbmV3XyhydHhfKXBzZXVkb19jdW1hY2sgdG8gVFJVRSBzbyB0aGF0IHRoZSBj
d25kIGZvciB0aGlzIGRlc3QgY2FuIGJlCisJCQkJCQkgKiB1cGRhdGVkLiBBbHNvIHRyaWdnZXIg
c2VhcmNoIGZvciB0aGUgbmV4dCBleHBlY3RlZCAocnR4LSlwc2V1ZG8tY3VtYWNrLgorCQkJCQkJ
ICogU2VwYXJhdGUgcHNldWRvX2N1bWFjayB0cmFja2VycyBmb3IgZmlyc3QgdHJhbnNtaXNzaW9u
cyBhbmQKKwkJCQkJCSAqIHJldHJhbnNtaXNzaW9ucy4KKwkJCQkJCSAqLworCQkJCQkJaWYgKHRw
MS0+cmVjLmRhdGEudHNuID09IHRwMS0+d2hvVG8tPnBzZXVkb19jdW1hY2spIHsKKwkJCQkJCQlp
ZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7CisJCQkJCQkJCXRwMS0+
d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCQl9CisJCQkJCQkJdHAxLT53aG9U
by0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCX0KKwkJCQkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIHRwMS0+d2hvVG8sIHRwMS0+cmVjLmRhdGEudHNu
LCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7CisJCQkJCQl9CisJCQkJCQlpZiAodHAxLT5yZWMu
ZGF0YS50c24gPT0gdHAxLT53aG9Uby0+cnR4X3BzZXVkb19jdW1hY2spIHsKKwkJCQkJCQlpZiAo
dHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7CisJCQkJCQkJCXRwMS0+d2hv
VG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCQl9CisJCQkJCQkJdHAxLT53aG9Uby0+
ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCQl9CisJCQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7
CisJCQkJCQkJc2N0cF9sb2dfc2FjaygqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24sCisJCQkJCQkJ
CSAgICAgIGxhc3RfdHNuLAorCQkJCQkJCQkgICAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJ
CQkJICAgICAgZnJhZ19zdHJ0LAorCQkJCQkJCQkgICAgICBmcmFnX2VuZCwKKwkJCQkJCQkJICAg
ICAgU0NUUF9MT0dfVFNOX0FDS0VEKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewor
CQkJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX0dBUCwKKwkJCQkJCQkJ
ICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkJCQkgICAgICAgdHAxLT5ib29r
X3NpemUsCisJCQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAor
CQkJCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJCQkJfQorCQkJCQkJc2N0cF9m
bGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOworCQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgeworCQkJCQkJCSgqc3RjYi0+
YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEt
Pndob1RvLAorCQkJCQkJCQkJCQkJCQkgICAgIHRwMSk7CisJCQkJCQl9CisJCQkJCQlzY3RwX3Rv
dGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOworCisJCQkJCQl0cDEtPndob1RvLT5uZXRf
YWNrICs9IHRwMS0+c2VuZF9zaXplOworCQkJCQkJaWYgKHRwMS0+c25kX2NvdW50IDwgMikgewor
CQkJCQkJCS8qLQorCQkJCQkJCSAqIFRydWUgbm9uLXJldHJhbnNtaXRlZCBjaHVuaworCQkJCQkJ
CSAqLworCQkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2syICs9IHRwMS0+c2VuZF9zaXplOworCisJ
CQkJCQkJLyotCisJCQkJCQkJICogdXBkYXRlIFJUTyB0b28gPworCQkJCQkJCSAqLworCQkJCQkJ
CWlmICh0cDEtPmRvX3J0dCkgeworCQkJCQkJCQlpZiAoKnJ0b19vaykgeworCQkJCQkJCQkJdHAx
LT53aG9Uby0+UlRPID0KKwkJCQkJCQkJCQlzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwKKwkJCQkJ
CQkJCQkJCSAgICZzdGNiLT5hc29jLAorCQkJCQkJCQkJCQkJICAgdHAxLT53aG9UbywKKwkJCQkJ
CQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3RpbWUsCisJCQkJCQkJCQkJCQkgICBTQ1RQX1JUVF9G
Uk9NX0RBVEEpOworCQkJCQkJCQkJKnJ0b19vayA9IDA7CisJCQkJCQkJCX0KKwkJCQkJCQkJaWYg
KHRwMS0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgeworCQkJCQkJCQkJdHAxLT53aG9Uby0+cnRv
X25lZWRlZCA9IDE7CisJCQkJCQkJCX0KKwkJCQkJCQkJdHAxLT5kb19ydHQgPSAwOworCQkJCQkJ
CX0KKwkJCQkJCX0KKworCQkJCQl9CisJCQkJCWlmICh0cDEtPnNlbnQgPD0gU0NUUF9EQVRBR1JB
TV9SRVNFTkQpIHsKKwkJCQkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwKKwkJ
CQkJCSAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnRoaXNfc2Fja19oaWdoZXN0X2dhcCkpIHsK
KwkJCQkJCQlzdGNiLT5hc29jLnRoaXNfc2Fja19oaWdoZXN0X2dhcCA9CisJCQkJCQkJCXRwMS0+
cmVjLmRhdGEudHNuOworCQkJCQkJfQorCQkJCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgeworCQkJCQkJCXNjdHBfdWNvdW50X2RlY3Ioc3RjYi0+YXNvYy5zZW50X3F1
ZXVlX3JldHJhbl9jbnQpOworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQkJCQkJCXNj
dHBfYXVkaXRfbG9nKDB4QjIsCisJCQkJCQkJCSAgICAgICAoc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQgJiAweDAwMDAwMGZmKSk7CisjZW5kaWYKKwkJCQkJCX0KKwkJCQkJfQorCQkJ
CQkvKi0KKwkJCQkJICogQWxsIGNodW5rcyBOT1QgVU5TRU5UIGZhbGwgdGhyb3VnaCBoZXJlIGFu
ZCBhcmUgbWFya2VkCisJCQkJCSAqIChsZWF2ZSBQUi1TQ1RQIG9uZXMgdGhhdCBhcmUgdG8gc2tp
cCBhbG9uZSB0aG91Z2gpCisJCQkJCSAqLworCQkJCQlpZiAoKHRwMS0+c2VudCAhPSBTQ1RQX0ZP
UldBUkRfVFNOX1NLSVApICYmCisJCQkJCSAgICAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
TlJfQUNLRUQpKSB7CisJCQkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX01BUktFRDsKKwkJ
CQkJfQorCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgeworCQkJCQkJ
LyogZGVmbGF0ZSB0aGUgY3duZCAqLworCQkJCQkJdHAxLT53aG9Uby0+Y3duZCAtPSB0cDEtPmJv
b2tfc2l6ZTsKKwkJCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQkJ
CQl9CisJCQkJCS8qIE5SIFNhY2sgY29kZSBoZXJlICovCisJCQkJCWlmIChucl9zYWNraW5nICYm
CisJCQkJCSAgICAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7CisJCQkJ
CQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID4gMCkgeworCQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0u
Y2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJCX0gZWxzZSB7CisJ
CQkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgdHAxLT5y
ZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJCQl9CisJCQkJCQlpZiAoKHN0Y2ItPmFzb2Muc3Ry
bW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgorCQkJCQkJ
ICAgIChzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLnN0YXRlID09IFNDVFBf
U1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCisJCQkJCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFz
b2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0ub3V0cXVldWUpKSB7CisJCQkJCQkJc3RjYi0+
YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsKKwkJCQkJCX0KKwkJCQkJCXRwMS0+c2VudCA9IFNDVFBf
REFUQUdSQU1fTlJfQUNLRUQ7CisJCQkJCQlpZiAodHAxLT5kYXRhKSB7CisJCQkJCQkJLyogc2Ff
aWdub3JlIE5PX05VTExfQ0hLICovCisJCQkJCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsICZz
dGNiLT5hc29jLCB0cDEsIDEpOworCQkJCQkJCXNjdHBfbV9mcmVlbSh0cDEtPmRhdGEpOworCQkJ
CQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQkJCQl9CisJCQkJCQl3YWtlX2hpbSsrOworCQkJCQl9
CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQkvKiBpZiAodHAxLT50c24gPT0gdGhlVFNOKSAqLwor
CQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCB0aGVUU04pKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCQl0cDEgPSBUQUlMUV9ORVhUKHRwMSwgc2N0cF9uZXh0KTsKKwkJCWlmICgo
dHAxID09IE5VTEwpICYmIChjaXJjbGVkID09IDApKSB7CisJCQkJY2lyY2xlZCsrOworCQkJCXRw
MSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOworCQkJfQorCQl9CS8qIGVu
ZCB3aGlsZSAodHAxKSAqLworCQlpZiAodHAxID09IE5VTEwpIHsKKwkJCWNpcmNsZWQgPSAwOwor
CQkJdHAxID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSk7CisJCX0KKwkJLyog
SW4gY2FzZSB0aGUgZnJhZ21lbnRzIHdlcmUgbm90IGluIG9yZGVyIHdlIG11c3QgcmVzZXQgKi8K
Kwl9IC8qIGVuZCBmb3IgKGogPSBmcmFnU3RhcnQgKi8KKwkqcF90cDEgPSB0cDE7CisJcmV0dXJu
ICh3YWtlX2hpbSk7CS8qIFJldHVybiB2YWx1ZSBvbmx5IHVzZWQgZm9yIG5yLXNhY2sgKi8KK30K
KworCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9zZWdtZW50cyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50
ICpvZmZzZXQsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsCisJCXVpbnQzMl90IGxhc3RfdHNuLCB1aW50MzJfdCAqYmlnZ2VzdF90c25fYWNrZWQs
CisJCXVpbnQzMl90ICpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiwgdWludDMyX3QgKnRoaXNfc2Fj
a19sb3dlc3RfbmV3YWNrLAorCQlpbnQgbnVtX3NlZywgaW50IG51bV9ucl9zZWcsIGludCAqcnRv
X29rKQoreworCXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKmZyYWcsIGJsb2NrOworCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKKwlpbnQgaTsKKwlpbnQgbnVtX2ZycyA9IDA7CisJaW50
IGNodW5rX2ZyZWVkOworCWludCBub25fcmV2b2NhYmxlOworCXVpbnQxNl90IGZyYWdfc3RydCwg
ZnJhZ19lbmQsIHByZXZfZnJhZ19lbmQ7CisKKwl0cDEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2Vu
dF9xdWV1ZSk7CisJcHJldl9mcmFnX2VuZCA9IDA7CisJY2h1bmtfZnJlZWQgPSAwOworCisJZm9y
IChpID0gMDsgaSA8IChudW1fc2VnICsgbnVtX25yX3NlZyk7IGkrKykgeworCQlpZiAoaSA9PSBu
dW1fc2VnKSB7CisJCQlwcmV2X2ZyYWdfZW5kID0gMDsKKwkJCXRwMSA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5zZW50X3F1ZXVlKTsKKwkJfQorCQlmcmFnID0gKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxv
Y2sgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxv
Y2spLCAodWludDhfdCAqKSAmYmxvY2spOworCQkqb2Zmc2V0ICs9IHNpemVvZihibG9jayk7CisJ
CWlmIChmcmFnID09IE5VTEwpIHsKKwkJCXJldHVybiAoY2h1bmtfZnJlZWQpOworCQl9CisJCWZy
YWdfc3RydCA9IG50b2hzKGZyYWctPnN0YXJ0KTsKKwkJZnJhZ19lbmQgPSBudG9ocyhmcmFnLT5l
bmQpOworCisJCWlmIChmcmFnX3N0cnQgPiBmcmFnX2VuZCkgeworCQkJLyogVGhpcyBnYXAgcmVw
b3J0IGlzIG1hbGZvcm1lZCwgc2tpcCBpdC4gKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChm
cmFnX3N0cnQgPD0gcHJldl9mcmFnX2VuZCkgeworCQkJLyogVGhpcyBnYXAgcmVwb3J0IGlzIG5v
dCBpbiBvcmRlciwgc28gcmVzdGFydC4gKi8KKwkJCSB0cDEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
c2VudF9xdWV1ZSk7CisJCX0KKwkJaWYgKFNDVFBfVFNOX0dUKChsYXN0X3RzbiArIGZyYWdfZW5k
KSwgKmJpZ2dlc3RfdHNuX2Fja2VkKSkgeworCQkJKmJpZ2dlc3RfdHNuX2Fja2VkID0gbGFzdF90
c24gKyBmcmFnX2VuZDsKKwkJfQorCQlpZiAoaSA8IG51bV9zZWcpIHsKKwkJCW5vbl9yZXZvY2Fi
bGUgPSAwOworCQl9IGVsc2UgeworCQkJbm9uX3Jldm9jYWJsZSA9IDE7CisJCX0KKwkJaWYgKHNj
dHBfcHJvY2Vzc19zZWdtZW50X3JhbmdlKHN0Y2IsICZ0cDEsIGxhc3RfdHNuLCBmcmFnX3N0cnQs
IGZyYWdfZW5kLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9uX3Jldm9jYWJs
ZSwgJm51bV9mcnMsIGJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuLAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHJ0b19vaykpIHsKKwkJCWNo
dW5rX2ZyZWVkID0gMTsKKwkJfQorCQlwcmV2X2ZyYWdfZW5kID0gZnJhZ19lbmQ7CisJfQorCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdf
RU5BQkxFKSB7CisJCWlmIChudW1fZnJzKQorCQkJc2N0cF9sb2dfZnIoKmJpZ2dlc3RfdHNuX2Fj
a2VkLAorCQkJICAgICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuLAorCQkJICAgICAg
ICAgICAgbGFzdF90c24sIFNDVFBfRlJfTE9HX0JJR0dFU1RfVFNOUyk7CisJfQorCXJldHVybiAo
Y2h1bmtfZnJlZWQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jaGVja19mb3JfcmV2b2tlZChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywgdWludDMyX3QgY3VtYWNrLAorCQkgICAgICAgdWludDMyX3QgYmlnZ2VzdF90c25fYWNr
ZWQpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCisJVEFJTFFfRk9SRUFDSCh0
cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKFNDVFBfVFNOX0dUKHRw
MS0+cmVjLmRhdGEudHNuLCBjdW1hY2spKSB7CisJCQkvKgorCQkJICogb2sgdGhpcyBndXkgaXMg
ZWl0aGVyIEFDSyBvciBNQVJLRUQuIElmIGl0IGlzCisJCQkgKiBBQ0tFRCBpdCBoYXMgYmVlbiBw
cmV2aW91c2x5IGFja2VkIGJ1dCBub3QgdGhpcworCQkJICogdGltZSBpLmUuIHJldm9rZWQuICBJ
ZiBpdCBpcyBNQVJLRUQgaXQgd2FzIEFDSydlZAorCQkJICogYWdhaW4uCisJCQkgKi8KKwkJCWlm
IChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYmlnZ2VzdF90c25fYWNrZWQpKSB7CisJ
CQkJYnJlYWs7CisJCQl9CisJCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fQUNLRUQp
IHsKKwkJCQkvKiBpdCBoYXMgYmVlbiByZXZva2VkICovCisJCQkJdHAxLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9TRU5UOworCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAxOwor
CQkJCS8qIFdlIG11c3QgYWRkIHRoaXMgc3R1ZmYgYmFjayBpbiB0bworCQkJCSAqIGFzc3VyZSB0
aW1lcnMgYW5kIHN1Y2ggZ2V0IHN0YXJ0ZWQuCisJCQkJICovCisJCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7
CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SRVZPS0UsCisJCQkJCQkg
ICAgICAgdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJCQkJCQkgICAgICAgdHAxLT5ib29rX3Np
emUsCisJCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKKwkJCQkJ
CSAgICAgICB0cDEtPnJlYy5kYXRhLnRzbik7CisJCQkJfQorCQkJCXNjdHBfZmxpZ2h0X3NpemVf
aW5jcmVhc2UodHAxKTsKKwkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCB0cDEp
OworCQkJCS8qIFdlIGluZmxhdGUgdGhlIGN3bmQgdG8gY29tcGVuc2F0ZSBmb3Igb3VyCisJCQkJ
ICogYXJ0aWZpY2lhbCBpbmZsYXRpb24gb2YgdGhlIGZsaWdodF9zaXplLgorCQkJCSAqLworCQkJ
CXRwMS0+d2hvVG8tPmN3bmQgKz0gdHAxLT5ib29rX3NpemU7CisJCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dHSU5HX0VOQUJMRSkgewor
CQkJCQlzY3RwX2xvZ19zYWNrKGFzb2MtPmxhc3RfYWNrZWRfc2VxLAorCQkJCQkJICAgICAgY3Vt
YWNrLAorCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCQkgICAgICAwLAorCQkJ
CQkJICAgICAgMCwKKwkJCQkJCSAgICAgIFNDVFBfTE9HX1RTTl9SRVZPS0VEKTsKKwkJCQl9CisJ
CQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX01BUktFRCkgeworCQkJCS8q
IGl0IGhhcyBiZWVuIHJlLWFja2VkIGluIHRoaXMgU0FDSyAqLworCQkJCXRwMS0+c2VudCA9IFND
VFBfREFUQUdSQU1fQUNLRUQ7CisJCQl9CisJCX0KKwkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RB
VEFHUkFNX1VOU0VOVCkKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0aWMgdm9pZAorc2N0cF9z
dHJpa2VfZ2FwX2Fja19jaHVua3Moc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKKwkJCSAgIHVpbnQzMl90IGJpZ2dlc3RfdHNuX2Fja2VkLCB1aW50
MzJfdCBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwgdWludDMyX3QgdGhpc19zYWNrX2xvd2VzdF9u
ZXdhY2ssIGludCBhY2N1bV9tb3ZlZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDE7
CisJaW50IHN0cmlrZV9mbGFnID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHRvdF9y
ZXRyYW5zID0gMDsKKwl1aW50MzJfdCBzZW5kaW5nX3NlcTsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7CisJaW50IG51bV9kZXN0c19zYWNrZWQgPSAwOworCisJLyoKKwkgKiBzZWxlY3QgdGhlIHNl
bmRpbmdfc2VxLCB0aGlzIGlzIGVpdGhlciB0aGUgbmV4dCB0aGluZyByZWFkeSB0byBiZQorCSAq
IHNlbnQgYnV0IG5vdCB0cmFuc21pdHRlZCwgT1IsIHRoZSBuZXh0IHNlcSB3ZSBhc3NpZ24uCisJ
ICovCisJdHAxID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSk7CisJaWYgKHRw
MSA9PSBOVUxMKSB7CisJCXNlbmRpbmdfc2VxID0gYXNvYy0+c2VuZGluZ19zZXE7CisJfSBlbHNl
IHsKKwkJc2VuZGluZ19zZXEgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwl9CisKKwkvKiBDTVQgREFD
IGFsZ286IGZpbmRpbmcgb3V0IGlmIFNBQ0sgaXMgYSBtaXhlZCBTQUNLICovCisJaWYgKChhc29j
LT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210
X3VzZV9kYWMpKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0
KSB7CisJCQlpZiAobmV0LT5zYXdfbmV3YWNrKQorCQkJCW51bV9kZXN0c19zYWNrZWQrKzsKKwkJ
fQorCX0KKwlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSB7CisJCSh2b2lkKVNDVFBf
R0VUVElNRV9USU1FVkFMKCZub3cpOworCX0KKwlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlzdHJpa2VfZmxhZyA9IDA7CisJCWlmICh0cDEtPm5v
X2ZyX2FsbG93ZWQpIHsKKwkJCS8qIHRoaXMgb25lIGhhZCBhIHRpbWVvdXQgb3Igc29tZXRoaW5n
ICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJaWYgKHRwMS0+c2VudCA8
IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5
X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQs
CisJCQkJCSAgICBTQ1RQX0ZSX0xPR19DSEVDS19TVFJJS0UpOworCQl9CisJCWlmIChTQ1RQX1RT
Tl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYmlnZ2VzdF90c25fYWNrZWQpIHx8CisJCSAgICB0cDEt
PnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKKwkJCS8qIGRvbmUgKi8KKwkJCWJyZWFr
OworCQl9CisJCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQpIHsKKwkJCWlmICgoUFJf
U0NUUF9UVExfRU5BQkxFRCh0cDEtPmZsYWdzKSkgJiYgdHAxLT5zZW50IDwgU0NUUF9EQVRBR1JB
TV9BQ0tFRCkgeworCQkJCS8qIElzIGl0IGV4cGlyZWQ/ICovCisjaWZuZGVmIF9fRnJlZUJTRF9f
CisJCQkJaWYgKHRpbWVyY21wKCZub3csICZ0cDEtPnJlYy5kYXRhLnRpbWV0b2Ryb3AsID4pKSB7
CisjZWxzZQorCQkJCWlmICh0aW1ldmFsY21wKCZub3csICZ0cDEtPnJlYy5kYXRhLnRpbWV0b2Ry
b3AsID4pKSB7CisjZW5kaWYKKwkJCQkJLyogWWVzIHNvIGRyb3AgaXQgKi8KKwkJCQkJaWYgKHRw
MS0+ZGF0YSAhPSBOVUxMKSB7CisJCQkJCQkodm9pZClzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVu
ayhzdGNiLCB0cDEsIDEsCisJCQkJCQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCX0K
KwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCisJCX0KKwkJaWYgKFNDVFBfVFNOX0dUKHRw
MS0+cmVjLmRhdGEudHNuLCBhc29jLT50aGlzX3NhY2tfaGlnaGVzdF9nYXApICYmCisJCSAgICAg
ICAgICAgICAgICAhKGFjY3VtX21vdmVkICYmIGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkpKSB7CisJCQkvKiB3ZSBhcmUgYmV5b25kIHRoZSB0c24gaW4gdGhlIHNhY2sgICovCisJCQli
cmVhazsKKwkJfQorCQlpZiAodHAxLT5zZW50ID49IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJ
CQkvKiBlaXRoZXIgYSBSRVNFTkQsIEFDS0VELCBvciBNQVJLRUQgKi8KKwkJCS8qIHNraXAgKi8K
KwkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSB7CisJCQkJLyogQ29u
dGludWUgc3RyaWtpbiBGV0QtVFNOIGNodW5rcyAqLworCQkJCXRwMS0+cmVjLmRhdGEuZndkX3Rz
bl9jbnQrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJCSAqIENNVCA6IFNGUiBh
bGdvIChjb3ZlcnMgcGFydCBvZiBEQUMgYW5kIEhUTkEgYXMgd2VsbCkKKwkJICovCisJCWlmICh0
cDEtPndob1RvICYmIHRwMS0+d2hvVG8tPnNhd19uZXdhY2sgPT0gMCkgeworCQkJLyoKKwkJCSAq
IE5vIG5ldyBhY2tzIHdlcmUgcmVjZWlldmVkIGZvciBkYXRhIHNlbnQgdG8gdGhpcworCQkJICog
ZGVzdC4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUiBhbGdvIGZvcgorCQkJICogQ01U
LCBubyBkYXRhIHNlbnQgdG8gdGhpcyBkZXN0IGNhbiBiZSBtYXJrZWQgZm9yCisJCQkgKiBGUiB1
c2luZyB0aGlzIFNBQ0suCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKHRwMS0+
d2hvVG8gJiYKKwkJICAgICAgICAgICBTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICB0cDEtPndob1RvLT50aGlzX3NhY2tfaGlnaGVzdF9uZXdh
Y2spICYmCisJCSAgICAgICAgICAgIShhY2N1bV9tb3ZlZCAmJiBhc29jLT5mYXN0X3JldHJhbl9s
b3NzX3JlY292ZXJ5KSkgeworCQkJLyoKKwkJCSAqIENNVDogTmV3IGFja3Mgd2VyZSByZWNlaWV2
ZWQgZm9yIGRhdGEgc2VudCB0bworCQkJICogdGhpcyBkZXN0LiBCdXQgbm8gbmV3IGFja3Mgd2Vy
ZSBzZWVuIGZvciBkYXRhCisJCQkgKiBzZW50IGFmdGVyIHRwMS4gVGhlcmVmb3JlLCBhY2NvcmRp
bmcgdG8gdGhlIFNGUgorCQkJICogYWxnbyBmb3IgQ01ULCB0cDEgY2Fubm90IGJlIG1hcmtlZCBm
b3IgRlIgdXNpbmcKKwkJCSAqIHRoaXMgU0FDSy4gVGhpcyBzdGVwIGNvdmVycyBwYXJ0IG9mIHRo
ZSBEQUMgYWxnbworCQkJICogYW5kIHRoZSBIVE5BIGFsZ28gYXMgd2VsbC4KKwkJCSAqLworCQkJ
Y29udGludWU7CisJCX0KKwkJLyoKKwkJICogSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgd2Ugd2Vy
ZSBoYXZlIGFscmVhZHkgZG9uZSBhIEZSCisJCSAqIGFuZCBpZiBzbyB3ZSBzZWUgaWYgdGhlIGJp
Z2dlc3QgVFNOIHdlIHNhdyBpbiB0aGUgc2FjayBpcworCQkgKiBzbWFsbGVyIHRoYW4gdGhlIHJl
Y292ZXJ5IHBvaW50LiBJZiBzbyB3ZSBkb24ndCBzdHJpa2UKKwkJICogdGhlIHRzbi4uLiBvdGhl
cndpc2Ugd2UgQ0FOIHN0cmlrZSB0aGUgVFNOLgorCQkgKi8KKwkJLyoKKwkJICogQEBAIEpSSTog
Q2hlY2sgZm9yIENNVAorCQkgKiBpZiAoYWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSAmJiAoc2N0cF9jbXRfb25fb2ZmID09IDApKSB7CisJCSAqLworCQlpZiAo
YWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSkgeworCQkJLyoK
KwkJCSAqIFN0cmlrZSB0aGUgVFNOIGlmIGluIGZhc3QtcmVjb3ZlcnkgYW5kIGN1bS1hY2sKKwkJ
CSAqIG1vdmVkLgorCQkJICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2ZyKGJpZ2dl
c3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCSAg
ICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJfQor
CQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJdHAxLT5zZW50
Kys7CisJCQl9CisJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCisJCQkgICAg
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgeworCQkJCS8qCisJCQkJICogQ01U
IERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8KKwkJCQkgKiAwLCB0aGVuIGxv
d2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBwYXNzCisJCQkJICogYmVjYXVzZSBpdCB3b3VsZCBo
YXZlIGJlZW4gc2V0IHRvIHRoZQorCQkJCSAqIGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxyZWFk
eSB0byBiZQorCQkJCSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEgaXMK
KwkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRoZW4gbWFyayBieQorCQkJCSAq
IG9uZSBtb3JlLgorCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRp
b25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0CisJCQkJICog
dHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCisJ
CQkJICovCisJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYgKG51
bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKKwkJCQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNrX2xv
d2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEudHNuKSkgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJ
CQkJc2N0cF9sb2dfZnIoMTYgKyBudW1fZGVzdHNfc2Fja2VkLAorCQkJCQkJCSAgICB0cDEtPnJl
Yy5kYXRhLnRzbiwKKwkJCQkJCQkgICAgdHAxLT5zZW50LAorCQkJCQkJCSAgICBTQ1RQX0ZSX0xP
R19TVFJJS0VfQ0hVTkspOworCQkJCQl9CisJCQkJCXRwMS0+c2VudCsrOworCQkJCX0KKwkJCX0K
KwkJfSBlbHNlIGlmICgodHAxLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQpICYmCisJ
CSAgICAgICAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQkJLyoKKwkJCSAq
IEZvciB0aG9zZSB0aGF0IGhhdmUgZG9uZSBhIEZSIHdlIG11c3QgdGFrZQorCQkJICogc3BlY2lh
bCBjb25zaWRlcmF0aW9uIGlmIHdlIHN0cmlrZS4gSS5lIHRoZQorCQkJICogYmlnZ2VzdF9uZXds
eV9hY2tlZCBtdXN0IGJlIGhpZ2hlciB0aGFuIHRoZQorCQkJICogc2VuZGluZ19zZXEgYXQgdGhl
IHRpbWUgd2UgZGlkIHRoZSBGUi4KKwkJCSAqLworCQkJaWYgKAorI2lmZGVmIFNDVFBfRlJfVE9f
QUxURVJOQVRFCisJCQkJLyoKKwkJCQkgKiBJZiBGUidzIGdvIHRvIG5ldyBuZXR3b3JrcywgdGhl
biB3ZSBtdXN0IG9ubHkgZG8KKwkJCQkgKiB0aGlzIGZvciBzaW5nbHkgaG9tZWQgYXNvYydzLiBI
b3dldmVyIGlmIHRoZSBGUidzCisJCQkJICogZ28gdG8gdGhlIHNhbWUgbmV0d29yayAoQXJtYW5k
bydzIHdvcmspIHRoZW4gaXRzCisJCQkJICogb2sgdG8gRlIgbXVsdGlwbGUgdGltZXMuCisJCQkJ
ICovCisJCQkJKGFzb2MtPm51bW5ldHMgPCAyKQorI2Vsc2UKKwkJCQkoMSkKKyNlbmRpZgorCQkJ
CSkgeworCisJCQkJaWYgKFNDVFBfVFNOX0dFKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJ
CSAgICAgICAgICAgICAgICB0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbikpIHsKKwkJCQkJ
LyoKKwkJCQkJICogU3RyaWtlIHRoZSBUU04sIHNpbmNlIHRoaXMgYWNrIGlzCisJCQkJCSAqIGJl
eW9uZCB3aGVyZSB0aGluZ3Mgd2VyZSB3aGVuIHdlCisJCQkJCSAqIGRpZCBhIEZSLgorCQkJCQkg
Ki8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
RlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5
X2Fja2VkLAorCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkgICAgdHAxLT5z
ZW50LAorCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJCQl9CisJCQkJ
CWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQkJdHAxLT5zZW50
Kys7CisJCQkJCX0KKwkJCQkJc3RyaWtlX2ZsYWcgPSAxOworCQkJCQlpZiAoKGFzb2MtPnNjdHBf
Y210X29uX29mZiA+IDApICYmCisJCQkJCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3Vz
ZV9kYWMpKSB7CisJCQkJCQkvKgorCQkJCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmCisJCQkJ
CQkgKiBTQUNLIGZsYWcgaXMgc2V0IHRvIDAsCisJCQkJCQkgKiB0aGVuIGxvd2VzdF9uZXdhY2sg
dGVzdAorCQkJCQkJICogd2lsbCBub3QgcGFzcyBiZWNhdXNlIGl0CisJCQkJCQkgKiB3b3VsZCBo
YXZlIGJlZW4gc2V0IHRvCisJCQkJCQkgKiB0aGUgY3VtYWNrIGVhcmxpZXIuIElmCisJCQkJCQkg
KiBub3QgYWxyZWFkeSB0byBiZSBydHgnZCwKKwkJCQkJCSAqIElmIG5vdCBhIG1peGVkIHNhY2sg
YW5kCisJCQkJCQkgKiBpZiB0cDEgaXMgbm90IGJldHdlZW4gdHdvCisJCQkJCQkgKiBzYWNrZWQg
VFNOcywgdGhlbiBtYXJrIGJ5CisJCQkJCQkgKiBvbmUgbW9yZS4KKwkJCQkJCSAqIE5PVEUgdGhh
dCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERB
QyBmbGFnIGluZGljYXRlcyB0aGF0CisJCQkJCQkgKiB0d28gcGFja2V0cyBoYXZlIGJlZW4gcmVj
ZWl2ZWQgYWZ0ZXIgdGhpcyBtaXNzaW5nIFRTTi4KKwkJCQkJCSAqLworCQkJCQkJaWYgKCh0cDEt
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKKwkJCQkJCSAgICAobnVtX2Rlc3RzX3Nh
Y2tlZCA9PSAxKSAmJgorCQkJCQkJICAgIFNDVFBfVFNOX0dUKHRoaXNfc2Fja19sb3dlc3RfbmV3
YWNrLAorCQkJCQkJICAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKSkgeworCQkJCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJ
TkdfRU5BQkxFKSB7CisJCQkJCQkJCXNjdHBfbG9nX2ZyKDMyICsgbnVtX2Rlc3RzX3NhY2tlZCwK
KwkJCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkJCSAgICB0cDEtPnNlbnQs
CisJCQkJCQkJCQkgICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5LKTsKKwkJCQkJCQl9CisJCQkJ
CQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQkJCXRwMS0+
c2VudCsrOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCS8qCisJ
CQkgKiBKUkk6IFRPRE86IHJlbW92ZSBjb2RlIGZvciBIVE5BIGFsZ28uIENNVCdzCisJCQkgKiBT
RlIgYWxnbyBjb3ZlcnMgSFROQS4KKwkJCSAqLworCQl9IGVsc2UgaWYgKFNDVFBfVFNOX0dUKHRw
MS0+cmVjLmRhdGEudHNuLAorCQkgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25l
d2x5X2Fja2VkKSkgeworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHN0cmlrZSB0aGVzZTogVGhpcyBp
cyB0aGUgIEhUTkEKKwkJCSAqIGFsZ29yaXRobSBpLmUuIHdlIGRvbid0IHN0cmlrZSBJZiBvdXIg
VFNOIGlzCisJCQkgKiBsYXJnZXIgdGhhbiB0aGUgSGlnaGVzdCBUU04gTmV3bHkgQWNrZWQuCisJ
CQkgKi8KKwkJCTsKKwkJfSBlbHNlIHsKKwkJCS8qIFN0cmlrZSB0aGUgVFNOICovCisJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VO
QUJMRSkgeworCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkg
ICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQ
X0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJfQorCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7CisJCQkJdHAxLT5zZW50Kys7CisJCQl9CisJCQlpZiAoKGFzb2MtPnNj
dHBfY210X29uX29mZiA+IDApICYmCisJCQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91
c2VfZGFjKSkgeworCQkJCS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxh
ZyBpcyBzZXQgdG8KKwkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBw
YXNzCisJCQkJICogYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQorCQkJCSAq
IGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQorCQkJCSAqIHJ0eCdkLCBJZiBu
b3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEgaXMKKwkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fj
a2VkIFRTTnMsIHRoZW4gbWFyayBieQorCQkJCSAqIG9uZSBtb3JlLgorCQkJCSAqIE5PVEUgdGhh
dCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERB
QyBmbGFnIGluZGljYXRlcyB0aGF0CisJCQkJICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2Vp
dmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCisJCQkJICovCisJCQkJaWYgKCh0cDEtPnNlbnQg
PCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKKwkJ
CQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEu
dHNuKSkgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfZnIoNDggKyBudW1fZGVz
dHNfc2Fja2VkLAorCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkgICAgdHAx
LT5zZW50LAorCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJCQl9CisJ
CQkJCXRwMS0+c2VudCsrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAodHAxLT5zZW50ID09IFND
VFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisKKwkJCS8q
IGZpeCBjb3VudHMgYW5kIHRoaW5ncyAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fUlNORCwKKwkJCQkJICAgICAgICh0cDEtPndo
b1RvID8gKHRwMS0+d2hvVG8tPmZsaWdodF9zaXplKSA6IDApLAorCQkJCQkgICAgICAgdHAxLT5i
b29rX3NpemUsCisJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAor
CQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJfQorCQkJaWYgKHRwMS0+d2hvVG8p
IHsKKwkJCQl0cDEtPndob1RvLT5uZXRfYWNrKys7CisJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNy
ZWFzZSh0cDEpOworCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBk
YXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKKwkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5z
Y3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hvVG8sCisJCQkJCQkJCQkJ
CQkgICAgIHRwMSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19y
d25kKFNDVFBfSU5DUkVBU0VfUEVFUl9SV05ELAorCQkJCQkgICAgICBhc29jLT5wZWVyc19yd25k
LCB0cDEtPnNlbmRfc2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKTsK
KwkJCX0KKwkJCS8qIGFkZCBiYWNrIHRvIHRoZSByd25kICovCisJCQlhc29jLT5wZWVyc19yd25k
ICs9ICh0cDEtPnNlbmRfc2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29o
KSk7CisKKwkJCS8qIHJlbW92ZSBmcm9tIHRoZSB0b3RhbCBmbGlnaHQgKi8KKwkJCXNjdHBfdG90
YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisKKwkJCWlmICgoc3RjYi0+YXNvYy5wcnNj
dHBfc3VwcG9ydGVkKSAmJgorCQkJICAgIChQUl9TQ1RQX1JUWF9FTkFCTEVEKHRwMS0+ZmxhZ3Mp
KSkgeworCQkJCS8qIEhhcyBpdCBiZWVuIHJldHJhbnNtaXR0ZWQgdHZfc2VjIHRpbWVzPyAtIHdl
IHN0b3JlIHRoZSByZXRyYW4gY291bnQgdGhlcmUuICovCisJCQkJaWYgKHRwMS0+c25kX2NvdW50
ID4gdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYykgeworCQkJCQkvKiBZZXMsIHNvIGRy
b3AgaXQgKi8KKwkJCQkJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7CisJCQkJCQkodm9pZClzY3Rw
X3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLCB0cDEsIDEsCisJCQkJCQkJCQkJIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQkJLyogTWFrZSBzdXJlIHRvIGZsYWcgd2UgaGFkIGEg
RlIgKi8KKwkJCQkJaWYgKHRwMS0+d2hvVG8gIT0gTlVMTCkgeworCQkJCQkJdHAxLT53aG9Uby0+
bmV0X2FjaysrOworCQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCS8qIFND
VFBfUFJJTlRGKCJPSywgd2UgYXJlIG5vdyByZWFkeSB0byBGUiB0aGlzIGd1eVxuIik7ICovCisJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2ZyKHRwMS0+cmVjLmRhdGEudHNuLCB0cDEtPnNu
ZF9jb3VudCwKKwkJCQkJICAgIDAsIFNDVFBfRlJfTUFSS0VEKTsKKwkJCX0KKwkJCWlmIChzdHJp
a2VfZmxhZykgeworCQkJCS8qIFRoaXMgaXMgYSBzdWJzZXF1ZW50IEZSICovCisJCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfc2VuZG11bHRmYXN0cmV0cmFucyk7CisJCQl9CisJCQlzY3RwX3Vjb3Vu
dF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCWlmIChhc29jLT5z
Y3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCQkJLyoKKwkJCQkgKiBDTVQ6IFVzaW5nIFJUWF9TU1RI
UkVTSCBwb2xpY3kgZm9yIENNVC4KKwkJCQkgKiBJZiBDTVQgaXMgYmVpbmcgdXNlZCwgdGhlbiBw
aWNrIGRlc3Qgd2l0aAorCQkJCSAqIGxhcmdlc3Qgc3N0aHJlc2ggZm9yIGFueSByZXRyYW5zbWlz
c2lvbi4KKwkJCQkgKi8KKwkJCQl0cDEtPm5vX2ZyX2FsbG93ZWQgPSAxOworCQkJCWFsdCA9IHRw
MS0+d2hvVG87CisJCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJCWlmIChhc29jLT5z
Y3RwX2NtdF9wZiA+IDApIHsKKwkJCQkJLyogSlJTIDUvMTgvMDcgLSBJZiBDTVQgUEYgaXMgb24s
IHVzZSB0aGUgUEYgdmVyc2lvbiBvZiBmaW5kX2FsdF9uZXQoKSAqLworCQkJCQlhbHQgPSBzY3Rw
X2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhbHQsIDIpOworCQkJCX0gZWxzZSB7CisJCQkJCS8q
IEpSUyA1LzE4LzA3IC0gSWYgb25seSBDTVQgaXMgb24sIHVzZSB0aGUgQ01UIHZlcnNpb24gb2Yg
ZmluZF9hbHRfbmV0KCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvKnNhX2lnbm9yZSBOT19OVUxMX0NISyovCisJCQkJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5h
dGVfbmV0KHN0Y2IsIGFsdCwgMSk7CisJCQkJfQorCQkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJ
CQlhbHQgPSB0cDEtPndob1RvOworCQkJCX0KKwkJCQkvKgorCQkJCSAqIENVQ3YyOiBJZiBhIGRp
ZmZlcmVudCBkZXN0IGlzIHBpY2tlZCBmb3IKKwkJCQkgKiB0aGUgcmV0cmFuc21pc3Npb24sIHRo
ZW4gbmV3CisJCQkJICogKHJ0eC0pcHNldWRvX2N1bWFjayBuZWVkcyB0byBiZSB0cmFja2VkCisJ
CQkJICogZm9yIG9yaWcgZGVzdC4gTGV0IENVQ3YyIHRyYWNrIG5ldyAocnR4LSkKKwkJCQkgKiBw
c2V1ZG8tY3VtYWNrIGFsd2F5cy4KKwkJCQkgKi8KKwkJCQlpZiAodHAxLT53aG9UbykgeworCQkJ
CQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOworCQkJCQl0cDEtPndob1RvLT5m
aW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQl9CisKKwkJCX0gZWxzZSB7LyogQ01UIGlz
IE9GRiAqLworCisjaWZkZWYgU0NUUF9GUl9UT19BTFRFUk5BVEUKKwkJCQkvKiBDYW4gd2UgZmlu
ZCBhbiBhbHRlcm5hdGU/ICovCisJCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3Rj
YiwgdHAxLT53aG9UbywgMCk7CisjZWxzZQorCQkJCS8qCisJCQkJICogZGVmYXVsdCBiZWhhdmlv
ciBpcyB0byBOT1QgcmV0cmFuc21pdAorCQkJCSAqIEZSJ3MgdG8gYW4gYWx0ZXJuYXRlLiBBcm1h
bmRvIENhcm8ncworCQkJCSAqIHBhcGVyIGRldGFpbHMgd2h5LgorCQkJCSAqLworCQkJCWFsdCA9
IHRwMS0+d2hvVG87CisjZW5kaWYKKwkJCX0KKworCQkJdHAxLT5yZWMuZGF0YS5kb2luZ19mYXN0
X3JldHJhbnNtaXQgPSAxOworCQkJdG90X3JldHJhbnMrKzsKKwkJCS8qIG1hcmsgdGhlIHNlbmRp
bmcgc2VxIGZvciBwb3NzaWJsZSBzdWJzZXF1ZW50IEZSJ3MgKi8KKwkJCS8qCisJCQkgKiBTQ1RQ
X1BSSU5URigiTWFya2luZyBUU04gZm9yIEZSIG5ldyB2YWx1ZSAleFxuIiwKKwkJCSAqICh1aW50
MzJfdCl0cGktPnJlYy5kYXRhLnRzbik7CisJCQkgKi8KKwkJCWlmIChUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VuZF9xdWV1ZSkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBxdWV1ZSBvZiBzZW5kIGlz
IGVtcHR5IHRoZW4gaXRzCisJCQkJICogdGhlIG5leHQgc2VxdWVuY2UgbnVtYmVyIHRoYXQgd2ls
bCBiZQorCQkJCSAqIGFzc2lnbmVkIHNvIHdlIHN1YnRyYWN0IG9uZSBmcm9tIHRoaXMgdG8KKwkJ
CQkgKiBnZXQgdGhlIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJCQkJdHAxLT5yZWMuZGF0
YS5mYXN0X3JldHJhbl90c24gPSBzZW5kaW5nX3NlcTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJ
CQkgKiBJZiB0aGVyZSBhcmUgY2h1bmtzIG9uIHRoZSBzZW5kIHF1ZXVlCisJCQkJICogKHVuc2Vu
dCBkYXRhIHRoYXQgaGFzIG1hZGUgaXQgZnJvbSB0aGUKKwkJCQkgKiBzdHJlYW0gcXVldWVzIGJ1
dCBub3Qgb3V0IHRoZSBkb29yLCB3ZQorCQkJCSAqIHRha2UgdGhlIGZpcnN0IG9uZSAod2hpY2gg
d2lsbCBoYXZlIHRoZQorCQkJCSAqIGxvd2VzdCBUU04pIGFuZCBzdWJ0cmFjdCBvbmUgdG8gZ2V0
IHRoZQorCQkJCSAqIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJCQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqdHR0OworCisJCQkJdHR0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNlbmRfcXVl
dWUpOworCQkJCXRwMS0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0KKwkJCQkJdHR0LT5yZWMu
ZGF0YS50c247CisJCQl9CisKKwkJCWlmICh0cDEtPmRvX3J0dCkgeworCQkJCS8qCisJCQkJICog
dGhpcyBndXkgaGFkIGEgUlRPIGNhbGN1bGF0aW9uIHBlbmRpbmcgb24KKwkJCQkgKiBpdCwgY2Fu
Y2VsIGl0CisJCQkJICovCisJCQkJaWYgKCh0cDEtPndob1RvICE9IE5VTEwpICYmCisJCQkJICAg
ICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApKSB7CisJCQkJCXRwMS0+d2hvVG8tPnJ0b19u
ZWVkZWQgPSAxOworCQkJCX0KKwkJCQl0cDEtPmRvX3J0dCA9IDA7CisJCQl9CisJCQlpZiAoYWx0
ICE9IHRwMS0+d2hvVG8pIHsKKwkJCQkvKiB5ZXMsIHRoZXJlIGlzIGFuIGFsdGVybmF0ZS4gKi8K
KwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIodHAxLT53aG9Ubyk7CisJCQkJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KKwkJCQl0cDEtPndob1RvID0gYWx0OworCQkJCWF0b21pY19hZGRfaW50
KCZhbHQtPnJlZl9jb3VudCwgMSk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKgorc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2ludChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqdHAxLCAqdHAyLCAqYV9hZHYgPSBOVUxMOworCXN0cnVjdCB0aW1l
dmFsIG5vdzsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisKKwlpZiAoYXNvYy0+cHJzY3RwX3N1cHBv
cnRlZCA9PSAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0
cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIHRwMikgeworCQlpZiAodHAxLT5zZW50
ICE9IFNDVFBfRk9SV0FSRF9UU05fU0tJUCAmJgorCQkgICAgdHAxLT5zZW50ICE9IFNDVFBfREFU
QUdSQU1fUkVTRU5EICYmCisJCSAgICB0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tF
RCkgeworCQkJLyogbm8gY2hhbmNlIHRvIGFkdmFuY2UsIG91dCBvZiBoZXJlICovCisJCQlicmVh
azsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MT0dfVFJZX0FEVkFOQ0UpIHsKKwkJCWlmICgodHAxLT5zZW50ID09IFNDVFBfRk9SV0FSRF9U
U05fU0tJUCkgfHwKKwkJCSAgICAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQp
KSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GV0RfVFNOX0NIRUNLLAorCQkJCQkgICAgICAg
YXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsCisJCQkJCSAgICAgICB0cDEtPnJlYy5kYXRh
LnRzbiwgMCwgMCk7CisJCQl9CisJCX0KKwkJaWYgKCFQUl9TQ1RQX0VOQUJMRUQodHAxLT5mbGFn
cykpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4ndCBmd2QtdHNuIHBhc3QgYW55IHRoYXQgYXJlIHJl
bGlhYmxlIGFrYQorCQkJICogcmV0cmFuc21pdHRlZCB1bnRpbCB0aGUgYXNvYyBmYWlscy4KKwkJ
CSAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFub3dfZmlsbGVkKSB7CisJCQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmbm93KTsKKwkJCW5vd19maWxsZWQgPSAxOworCQl9CisJCS8qCisJ
CSAqIG5vdyB3ZSBnb3QgYSBjaHVuayB3aGljaCBpcyBtYXJrZWQgZm9yIGFub3RoZXIKKwkJICog
cmV0cmFuc21pc3Npb24gdG8gYSBQUi1zdHJlYW0gYnV0IGhhcyBydW4gb3V0IGl0cyBjaGFuY2Vz
CisJCSAqIGFscmVhZHkgbWF5YmUgT1IgaGFzIGJlZW4gbWFya2VkIHRvIHNraXAgbm93LiBDYW4g
d2Ugc2tpcAorCQkgKiBpdCBpZiBpdHMgYSByZXNlbmQ/CisJCSAqLworCQlpZiAodHAxLT5zZW50
ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EICYmCisJCSAgICAoUFJfU0NUUF9UVExfRU5BQkxFRCh0
cDEtPmZsYWdzKSkpIHsKKwkJCS8qCisJCQkgKiBOb3cgaXMgdGhpcyBvbmUgbWFya2VkIGZvciBy
ZXNlbmQgYW5kIGl0cyB0aW1lIGlzCisJCQkgKiBub3cgdXA/CisJCQkgKi8KKyNpZm5kZWYgX19G
cmVlQlNEX18KKwkJCWlmICh0aW1lcmNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9w
LCA+KSkgeworI2Vsc2UKKwkJCWlmICh0aW1ldmFsY21wKCZub3csICZ0cDEtPnJlYy5kYXRhLnRp
bWV0b2Ryb3AsID4pKSB7CisjZW5kaWYKKwkJCQkvKiBZZXMgc28gZHJvcCBpdCAqLworCQkJCWlm
ICh0cDEtPmRhdGEpIHsKKwkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3Rj
YiwgdHAxLAorCQkJCQkgICAgMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQl9CisJCQl9IGVs
c2UgeworCQkJCS8qCisJCQkJICogTm8sIHdlIGFyZSBkb25lIHdoZW4gaGl0IG9uZSBmb3IgcmVz
ZW5kCisJCQkJICogd2hvcyB0aW1lIGFzIG5vdCBleHBpcmVkLgorCQkJCSAqLworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJCS8qCisJCSAqIE9rIG5vdyBpZiB0aGlzIGNodW5rIGlzIG1hcmtlZCB0
byBkcm9wIGl0IHdlIGNhbiBjbGVhbiB1cAorCQkgKiB0aGUgY2h1bmssIGFkdmFuY2Ugb3VyIHBl
ZXIgYWNrIHBvaW50IGFuZCB3ZSBjYW4gY2hlY2sKKwkJICogdGhlIG5leHQgY2h1bmsuCisJCSAq
LworCQlpZiAoKHRwMS0+c2VudCA9PSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApIHx8CisJCSAgICAo
dHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7CisJCQkvKiBhZHZhbmNlIFBl
ZXJBY2tQb2ludCBnb2VzIGZvcndhcmQgKi8KKwkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5k
YXRhLnRzbiwgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpKSB7CisJCQkJYXNvYy0+YWR2
YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwkJCQlhX2FkdiA9IHRw
MTsKKwkJCX0gZWxzZSBpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gYXNvYy0+YWR2YW5jZWRfcGVl
cl9hY2tfcG9pbnQpIHsKKwkJCQkvKiBObyB1cGRhdGUgYnV0IHdlIGRvIHNhdmUgdGhlIGNoayAq
LworCQkJCWFfYWR2ID0gdHAxOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIElmIGl0
IGlzIHN0aWxsIGluIFJFU0VORCB3ZSBjYW4gYWR2YW5jZSBubworCQkJICogZnVydGhlcgorCQkJ
ICovCisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKGFfYWR2KTsKK30KKworc3RhdGljIGlu
dAorc2N0cF9mc19hdWRpdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJaW50IGluZmxpZ2h0ID0gMCwgcmVzZW5kID0gMCwg
aW5iZXR3ZWVuID0gMCwgYWNrZWQgPSAwLCBhYm92ZSA9IDA7CisJaW50IHJldDsKKyNpZm5kZWYg
SU5WQVJJQU5UUworCWludCBlbnRyeV9mbGlnaHQsIGVudHJ5X2NudDsKKyNlbmRpZgorCisJcmV0
ID0gMDsKKyNpZm5kZWYgSU5WQVJJQU5UUworCWVudHJ5X2ZsaWdodCA9IGFzb2MtPnRvdGFsX2Zs
aWdodDsKKwllbnRyeV9jbnQgPSBhc29jLT50b3RhbF9mbGlnaHRfY291bnQ7CisjZW5kaWYKKwlp
ZiAoYXNvYy0+cHJfc2N0cF9jbnQgPj0gYXNvYy0+c2VudF9xdWV1ZV9jbnQpCisJCXJldHVybiAo
MCk7CisKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkg
eworCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCVNDVFBfUFJJ
TlRGKCJDaGsgVFNOOiAldSBzaXplOiAlZCBpbmZsaWdodCBjbnQ6ICVkXG4iLAorCQkJICAgICAg
ICAgICAgY2hrLT5yZWMuZGF0YS50c24sCisJCQkgICAgICAgICAgICBjaGstPnNlbmRfc2l6ZSwK
KwkJCSAgICAgICAgICAgIGNoay0+c25kX2NvdW50KTsKKwkJCWluZmxpZ2h0Kys7CisJCX0gZWxz
ZSBpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlyZXNlbmQrKzsK
KwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7CisJCQlpbmJl
dHdlZW4rKzsKKwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPiBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7
CisJCQlhYm92ZSsrOworCQl9IGVsc2UgeworCQkJYWNrZWQrKzsKKwkJfQorCX0KKworCWlmICgo
aW5mbGlnaHQgPiAwKSB8fCAoaW5iZXR3ZWVuID4gMCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
CXBhbmljKCJGbGlnaHQgc2l6ZS1leHByZXNzIGluY29ycmVjdD8gXG4iKTsKKyNlbHNlCisJCVND
VFBfUFJJTlRGKCJhc29jLT50b3RhbF9mbGlnaHQ6ICVkIGNudDogJWRcbiIsCisJCSAgICAgICAg
ICAgIGVudHJ5X2ZsaWdodCwgZW50cnlfY250KTsKKworCQlTQ1RQX1BSSU5URigiRmxpZ2h0IHNp
emUtZXhwcmVzcyBpbmNvcnJlY3QgRjogJWQgSTogJWQgUjogJWQgQWI6ICVkIEFDSzogJWRcbiIs
CisJCQkgICAgaW5mbGlnaHQsIGluYmV0d2VlbiwgcmVzZW5kLCBhYm92ZSwgYWNrZWQpOworCQly
ZXQgPSAxOworI2VuZGlmCisJfQorCXJldHVybiAocmV0KTsKK30KKworCitzdGF0aWMgdm9pZAor
c2N0cF93aW5kb3dfcHJvYmVfcmVjb3Zlcnkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCSAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCSAgIHN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKnRwMSkKK3sKKwl0cDEtPndpbmRvd19wcm9iZSA9IDA7CisJaWYg
KCh0cDEtPnNlbnQgPj0gU0NUUF9EQVRBR1JBTV9BQ0tFRCkgfHwgKHRwMS0+ZGF0YSA9PSBOVUxM
KSkgeworCQkvKiBUU04ncyBza2lwcGVkIHdlIGRvIE5PVCBtb3ZlIGJhY2suICovCisJCXNjdHBf
bWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19EV05fV1BfRldELAorCQkJICAgICAgIHRwMS0+d2hv
VG8gPyB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA6IDAsCisJCQkgICAgICAgdHAxLT5ib29rX3Np
emUsCisJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKKwkJCSAgICAg
ICB0cDEtPnJlYy5kYXRhLnRzbik7CisJCXJldHVybjsKKwl9CisJLyogRmlyc3Qgc2V0dXAgdGhp
cyBieSBzaHJpbmtpbmcgZmxpZ2h0ICovCisJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNj
dHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgeworCQkoKnN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkodHAxLT53aG9UbywKKwkJ
CQkJCQkJCSAgICAgdHAxKTsKKwl9CisJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwor
CXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJLyogTm93IG1hcmsgZm9y
IHJlc2VuZCAqLworCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCXNjdHBfdWNv
dW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKworCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkg
eworCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9XUCwKKwkJCSAgICAgICB0
cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCSAg
ICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJICAgICAgIHRwMS0+cmVj
LmRhdGEudHNuKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfZXhwcmVzc19oYW5kbGVfc2FjayhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGN1bWFjaywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MzJfdCByd25kLCBpbnQgKmFib3J0X25vdywgaW50IGVjbmVfc2VlbikKK3sKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxLCAqdHAyOworCXVpbnQzMl90IG9sZF9yd25kOwor
CWludCB3aW5fcHJvYmVfcmVjb3ZlcnkgPSAwOworCWludCB3aW5fcHJvYmVfcmVjb3ZlcmVkID0g
MDsKKwlpbnQgaiwgZG9uZV9vbmNlID0gMDsKKwlpbnQgcnRvX29rID0gMTsKKwl1aW50MzJfdCBz
ZW5kX3M7CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNL
X0xPR19FWFBSRVNTLCBjdW1hY2ssCisJCSAgICAgICAgICAgICAgIHJ3bmQsIHN0Y2ItPmFzb2Mu
bGFzdF9hY2tlZF9zZXEsIHN0Y2ItPmFzb2MucGVlcnNfcnduZCk7CisJfQorCVNDVFBfVENCX0xP
Q0tfQVNTRVJUKHN0Y2IpOworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJc3RjYi0+YXNv
Yy5jdW1hY2tfbG9nW3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdF0gPSBjdW1hY2s7CisJc3RjYi0+
YXNvYy5jdW1hY2tfbG9nX2F0Kys7CisJaWYgKHN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdCA+IFND
VFBfVFNOX0xPR19TSVpFKSB7CisJCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdCA9IDA7CisJfQor
I2VuZGlmCisJYXNvYyA9ICZzdGNiLT5hc29jOworCW9sZF9yd25kID0gYXNvYy0+cGVlcnNfcndu
ZDsKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGN1bWFjaykpIHsKKwkJ
Lyogb2xkIGFjayAqLworCQlyZXR1cm47CisJfSBlbHNlIGlmIChhc29jLT5sYXN0X2Fja2VkX3Nl
cSA9PSBjdW1hY2spIHsKKwkJLyogV2luZG93IHVwZGF0ZSBzYWNrICovCisJCWFzb2MtPnBlZXJz
X3J3bmQgPSBzY3RwX3Nic3BhY2Vfc3ViKHJ3bmQsCisJCQkJCQkgICAgKHVpbnQzMl90KSAoYXNv
Yy0+dG90YWxfZmxpZ2h0ICsgKGFzb2MtPnRvdGFsX2ZsaWdodF9jb3VudCAqIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkpKTsKKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBz
dGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkJLyogU1dTIHNlbmRl
ciBzaWRlIGVuZ2FnZXMgKi8KKwkJCWFzb2MtPnBlZXJzX3J3bmQgPSAwOworCQl9CisJCWlmIChh
c29jLT5wZWVyc19yd25kID4gb2xkX3J3bmQpIHsKKwkJCWdvdG8gYWdhaW47CisJCX0KKwkJcmV0
dXJuOworCX0KKworCS8qIEZpcnN0IHNldHVwIGZvciBDQyBzdHVmZiAqLworCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCWlmIChTQ1RQX1RTTl9HVChjdW1h
Y2ssIG5ldC0+Y3dyX3dpbmRvd190c24pKSB7CisJCQkvKiBEcmFnIGFsb25nIHRoZSB3aW5kb3df
dHNuIGZvciBjd3IncyAqLworCQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IGN1bWFjazsKKwkJfQor
CQluZXQtPnByZXZfY3duZCA9IG5ldC0+Y3duZDsKKwkJbmV0LT5uZXRfYWNrID0gMDsKKwkJbmV0
LT5uZXRfYWNrMiA9IDA7CisKKwkJLyoKKwkJICogQ01UOiBSZXNldCBDVUMgYW5kIEZhc3QgcmVj
b3ZlcnkgYWxnbyB2YXJpYWJsZXMgYmVmb3JlCisJCSAqIFNBQ0sgcHJvY2Vzc2luZworCQkgKi8K
KwkJbmV0LT5uZXdfcHNldWRvX2N1bWFjayA9IDA7CisJCW5ldC0+d2lsbF9leGl0X2Zhc3RfcmVj
b3ZlcnkgPSAwOworCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3ByZXBh
cmVfbmV0X2Zvcl9zYWNrKSB7CisJCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3du
ZF9wcmVwYXJlX25ldF9mb3Jfc2Fjaykoc3RjYiwgbmV0KTsKKwkJfQorCX0KKwlpZiAoIVRBSUxR
X0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgeworCQl0cDEgPSBUQUlMUV9MQVNUKCZhc29jLT5z
ZW50X3F1ZXVlLAorCQkJCSBzY3RwY2h1bmtfbGlzdGhlYWQpOworCQlzZW5kX3MgPSB0cDEtPnJl
Yy5kYXRhLnRzbiArIDE7CisJfSBlbHNlIHsKKwkJc2VuZF9zID0gYXNvYy0+c2VuZGluZ19zZXE7
CisJfQorCWlmIChTQ1RQX1RTTl9HRShjdW1hY2ssIHNlbmRfcykpIHsKKwkJc3RydWN0IG1idWYg
Km9wX2VycjsKKwkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkqYWJvcnRfbm93
ID0gMTsKKwkJLyogWFhYICovCisJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJDdW0gYWNr
ICU4Ljh4IGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBUU04gJTguOHgiLAorCQkJIGN1bWFjaywgc2Vu
ZF9zKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09M
X1ZJT0xBVElPTiwgbXNnKTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NU
UF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjE7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2Np
YXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQlyZXR1cm47CisJfQorCWFzb2MtPnRoaXNfc2Fja19oaWdoZXN0X2dhcCA9IGN1bWFjazsKKwlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERf
TE9HR0lORykgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKKwkJCSAg
ICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkgICAgICAgMCwKKwkJCSAg
ICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEsCisJCQkgICAgICAgX19MSU5FX18pOworCX0KKwlz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCWlmIChTQ1RQX1RTTl9HVChjdW1h
Y2ssIGFzb2MtPmxhc3RfYWNrZWRfc2VxKSkgeworCQkvKiBwcm9jZXNzIHRoZSBuZXcgY29uc2Vj
dXRpdmUgVFNOIGZpcnN0ICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0cDEsICZhc29jLT5zZW50
X3F1ZXVlLCBzY3RwX25leHQsIHRwMikgeworCQkJaWYgKFNDVFBfVFNOX0dFKGN1bWFjaywgdHAx
LT5yZWMuZGF0YS50c24pKSB7CisJCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVCkgeworCQkJCQlTQ1RQX1BSSU5URigiV2FybmluZywgYW4gdW5zZW50IGlzIG5vdyBhY2tl
ZD9cbiIpOworCQkJCX0KKwkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkg
eworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCBpcyBsZXNzIHRoYW4gQUNLRUQsIGl0IGlzCisJCQkJ
CSAqIG5vdyBuby1sb25nZXIgaW4gZmxpZ2h0LiBIaWdoZXIKKwkJCQkJICogdmFsdWVzIG1heSBv
Y2N1ciBkdXJpbmcgbWFya2luZworCQkJCQkgKi8KKwkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBf
REFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCQlzY3RwX21p
c2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkJICAgICAgIHRwMS0+d2hv
VG8tPmZsaWdodF9zaXplLAorCQkJCQkJCQkgICAgICAgdHAxLT5ib29rX3NpemUsCisJCQkJCQkJ
CSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJCQkJCQkgICAgICAg
dHAxLT5yZWMuZGF0YS50c24pOworCQkJCQkJfQorCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNy
ZWFzZSh0cDEpOworCQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91
cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgeworCQkJCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlv
bnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEtPndob1RvLAorCQkJCQkJ
CQkJCQkJCQkgICAgIHRwMSk7CisJCQkJCQl9CisJCQkJCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9D
SEsgKi8KKwkJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJ
CX0KKwkJCQkJdHAxLT53aG9Uby0+bmV0X2FjayArPSB0cDEtPnNlbmRfc2l6ZTsKKwkJCQkJaWYg
KHRwMS0+c25kX2NvdW50IDwgMikgeworCQkJCQkJLyoKKwkJCQkJCSAqIFRydWUgbm9uLXJldHJh
bnNtaXRlZAorCQkJCQkJICogY2h1bmsKKwkJCQkJCSAqLworCQkJCQkJdHAxLT53aG9Uby0+bmV0
X2FjazIgKz0KKwkJCQkJCQl0cDEtPnNlbmRfc2l6ZTsKKworCQkJCQkJLyogdXBkYXRlIFJUTyB0
b28/ICovCisJCQkJCQlpZiAodHAxLT5kb19ydHQpIHsKKwkJCQkJCQlpZiAocnRvX29rKSB7CisJ
CQkJCQkJCXRwMS0+d2hvVG8tPlJUTyA9CisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogc2FfaWdu
b3JlCisJCQkJCQkJCQkgKiBOT19OVUxMX0NISworCQkJCQkJCQkJICovCisJCQkJCQkJCQlzY3Rw
X2NhbGN1bGF0ZV9ydG8oc3RjYiwKKwkJCQkJCQkJCQkJICAgYXNvYywgdHAxLT53aG9UbywKKwkJ
CQkJCQkJCQkJICAgJnRwMS0+c2VudF9yY3ZfdGltZSwKKwkJCQkJCQkJCQkJICAgU0NUUF9SVFRf
RlJPTV9EQVRBKTsKKwkJCQkJCQkJcnRvX29rID0gMDsKKwkJCQkJCQl9CisJCQkJCQkJaWYgKHRw
MS0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgeworCQkJCQkJCQl0cDEtPndob1RvLT5ydG9fbmVl
ZGVkID0gMTsKKwkJCQkJCQl9CisJCQkJCQkJdHAxLT5kb19ydHQgPSAwOworCQkJCQkJfQorCQkJ
CQl9CisJCQkJCS8qCisJCQkJCSAqIENNVDogQ1VDdjIgYWxnb3JpdGhtLiBGcm9tIHRoZQorCQkJ
CQkgKiBjdW1hY2snZCBUU05zLCBmb3IgZWFjaCBUU04gYmVpbmcKKwkJCQkJICogYWNrZWQgZm9y
IHRoZSBmaXJzdCB0aW1lLCBzZXQgdGhlCisJCQkJCSAqIGZvbGxvd2luZyB2YXJpYWJsZXMgZm9y
IHRoZQorCQkJCQkgKiBjb3JyZXNwIGRlc3RpbmF0aW9uLgorCQkJCQkgKiBuZXdfcHNldWRvX2N1
bWFjayB3aWxsIHRyaWdnZXIgYQorCQkJCQkgKiBjd25kIHVwZGF0ZS4KKwkJCQkJICogZmluZF8o
cnR4Xylwc2V1ZG9fY3VtYWNrIHdpbGwKKwkJCQkJICogdHJpZ2dlciBzZWFyY2ggZm9yIHRoZSBu
ZXh0CisJCQkJCSAqIGV4cGVjdGVkIChydHgtKXBzZXVkby1jdW1hY2suCisJCQkJCSAqLworCQkJ
CQl0cDEtPndob1RvLT5uZXdfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCXRwMS0+d2hvVG8tPmZp
bmRfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCXRwMS0+d2hvVG8tPmZpbmRfcnR4X3BzZXVkb19j
dW1hY2sgPSAxOworCisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCS8qIHNhX2lnbm9yZSBOT19O
VUxMX0NISyAqLworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCB0cDEtPndob1RvLCB0cDEtPnJl
Yy5kYXRhLnRzbiwgU0NUUF9DV05EX0xPR19GUk9NX1NBQ0spOworCQkJCQl9CisJCQkJfQorCQkJ
CWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJc2N0cF91Y291
bnRfZGVjcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCX0KKwkJCQlpZiAodHAx
LT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgeworCQkJCQkvKiBkZWZsYXRlIHRoZSBjd25k
ICovCisJCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29rX3NpemU7CisJCQkJCXRwMS0+
cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQkJCX0KKwkJCQlpZiAodHAxLT5zZW50
ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKKwkJCQkJaWYgKGFzb2MtPnN0cm1vdXRbdHAx
LT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJCQlhc29jLT5zdHJt
b3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJCQl9IGVsc2UgeworCQkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVz
IGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJCX0KKwkJCQl9
CisJCQkJaWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID09IDApICYmCisJCQkJICAgIChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5z
dGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgorCQkJCSAgICBUQUlMUV9FTVBU
WSgmYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0ub3V0cXVldWUpKSB7CisJCQkJCWFz
b2MtPnRyaWdnZXJfcmVzZXQgPSAxOworCQkJCX0KKwkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNl
bnRfcXVldWUsIHRwMSwgc2N0cF9uZXh0KTsKKwkJCQlpZiAodHAxLT5kYXRhKSB7CisJCQkJCS8q
IHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwg
YXNvYywgdHAxLCAxKTsKKwkJCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7CisJCQkJCXRwMS0+
ZGF0YSA9IE5VTEw7CisJCQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfc2Fj
ayhhc29jLT5sYXN0X2Fja2VkX3NlcSwKKwkJCQkJCSAgICAgIGN1bWFjaywKKwkJCQkJCSAgICAg
IHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJICAgICAgMCwKKwkJCQkJCSAgICAgIDAsCisJCQkJ
CQkgICAgICBTQ1RQX0xPR19GUkVFX1NFTlQpOworCQkJCX0KKwkJCQlhc29jLT5zZW50X3F1ZXVl
X2NudC0tOworCQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2spIHsK
KwkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJCQl1aW50MzJfdCBpbnF1ZXVlX2J5dGVzLCBz
Yl9mcmVlX25vdzsKKwkJCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwkJCWlucCA9IHN0Y2It
PnNjdHBfZXA7CisJCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBzaXplb2Yoc3RydWN0
IHNjdHBfZGF0YV9jaHVuaykpOworCQkJc2JfZnJlZV9ub3cgPSBTQ1RQX1NCX0xJTUlUX1NORChz
dGNiLT5zY3RwX3NvY2tldCkgLSAoaW5xdWV1ZV9ieXRlcyArIHN0Y2ItPmFzb2Muc2Jfc2VuZF9y
ZXN2KTsKKworCQkJLyogY2hlY2sgaWYgdGhlIGFtb3VudCBmcmVlIGluIHRoZSBzZW5kIHNvY2tl
dCBidWZmZXIgY3Jvc3NlZCB0aGUgdGhyZXNob2xkICovCisJCQlpZiAoaW5wLT5zZW5kX2NhbGxi
YWNrICYmCisJCQkgICAgKCgoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA+IDApICYmCisJCQkgICAg
ICAoc2JfZnJlZV9ub3cgPj0gaW5wLT5zZW5kX3NiX3RocmVzaG9sZCkgJiYKKwkJCSAgICAgIChz
dGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgPD0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21h
eF9jaHVua3Nfb25fcXVldWUpKSkgfHwKKwkJCSAgICAgKGlucC0+c2VuZF9zYl90aHJlc2hvbGQg
PT0gMCkpKSB7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJaW5wLT5zZW5kX2NhbGxiYWNrKHN0Y2ItPnNj
dHBfc29ja2V0LCBzYl9mcmVlX25vdyk7CisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlh
dG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQl9CisJCX0KKwl9
IGVsc2UgaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisjZWxzZQorCS8qIHNhX2lnbm9yZSBOT19O
VUxMX0NISyAqLworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBz
b2NrZXQgKnNvOworCisjZW5kaWYKKwkJU09DS0JVRl9MT0NLKCZzdGNiLT5zY3RwX3NvY2tldC0+
c29fc25kKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICov
CisJCQlzY3RwX3dha2V1cF9sb2coc3RjYiwgMSwgU0NUUF9XQUtFU05EX0ZST01fU0FDSyk7CisJ
CX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQ
X1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdo
aWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJ
CQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cF9sb2NrZWQoc3RjYi0+c2N0
cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwor
I2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF93YWtldXBfbG9nKHN0
Y2IsIDEsIFNDVFBfTk9XQUtFX0ZST01fU0FDSyk7CisJCX0KKwl9CisKKwkvKiBKUlMgLSBVc2Ug
dGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9kdWxlICovCisJaWYgKChh
c29jLT5sYXN0X2Fja2VkX3NlcSAhPSBjdW1hY2spICYmIChlY25lX3NlZW4gPT0gMCkpIHsKKwkJ
VEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWlmIChuZXQt
Pm5ldF9hY2syID4gMCkgeworCQkJCS8qCisJCQkJICogS2FybidzIHJ1bGUgYXBwbGllcyB0byBj
bGVhcmluZyBlcnJvciBjb3VudCwgdGhpcworCQkJCSAqIGlzIG9wdGlvbmFsLgorCQkJCSAqLwor
CQkJCW5ldC0+ZXJyb3JfY291bnQgPSAwOworCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9SRUFDSEFCTEUpKSB7CisJCQkJCS8qIGFkZHIgY2FtZSBnb29kICovCisJCQkJCW5l
dC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQlzY3RwX3VscF9ub3Rp
ZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLAorCQkJCQkgICAgICAgICAgICAgICAg
MCwgKHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJCWlmIChuZXQg
PT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CisJCQkJCWlmIChzdGNiLT5hc29j
LmFsdGVybmF0ZSkgeworCQkJCQkJLyogcmVsZWFzZSB0aGUgYWx0ZXJuYXRlLCBwcmltYXJ5IGlz
IGdvb2QgKi8KKwkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0
ZSk7CisJCQkJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCQkJCX0KKwkJCQl9CisJ
CQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQkJCQluZXQtPmRlc3Rf
c3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9IRUFSVEJFQVQsCisJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBuZXQsCisJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQ
X0xPQ18yMik7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVB
VCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNj
dHBfY3duZF91cGRhdGVfZXhpdF9wZihzdGNiLCBuZXQpOworCQkJCQkvKiBEb25lIHdpdGggdGhp
cyBuZXQgKi8KKwkJCQkJbmV0LT5uZXRfYWNrID0gMDsKKwkJCQl9CisJCQkJLyogcmVzdG9yZSBh
bnkgZG91YmxlZCB0aW1lcnMgKi8KKwkJCQluZXQtPlJUTyA9IChuZXQtPmxhc3RzYSA+PiBTQ1RQ
X1JUVF9TSElGVCkgKyBuZXQtPmxhc3RzdjsKKwkJCQlpZiAobmV0LT5SVE8gPCBzdGNiLT5hc29j
Lm1pbnJ0bykgeworCQkJCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MubWlucnRvOworCQkJCX0KKwkJ
CQlpZiAobmV0LT5SVE8gPiBzdGNiLT5hc29jLm1heHJ0bykgeworCQkJCQluZXQtPlJUTyA9IHN0
Y2ItPmFzb2MubWF4cnRvOworCQkJCX0KKwkJCX0KKwkJfQorCQlhc29jLT5jY19mdW5jdGlvbnMu
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrKHN0Y2IsIGFzb2MsIDEsIDAsIDApOworCX0KKwlh
c29jLT5sYXN0X2Fja2VkX3NlcSA9IGN1bWFjazsKKworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+
c2VudF9xdWV1ZSkpIHsKKwkJLyogbm90aGluZyBsZWZ0IGluLWZsaWdodCAqLworCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJbmV0LT5mbGlnaHRfc2l6
ZSA9IDA7CisJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOworCQl9CisJCWFzb2MtPnRv
dGFsX2ZsaWdodCA9IDA7CisJCWFzb2MtPnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7CisJfQorCisJ
LyogUldORCB1cGRhdGUgKi8KKwlhc29jLT5wZWVyc19yd25kID0gc2N0cF9zYnNwYWNlX3N1Yihy
d25kLAorCQkJCQkgICAgKHVpbnQzMl90KSAoYXNvYy0+dG90YWxfZmxpZ2h0ICsgKGFzb2MtPnRv
dGFsX2ZsaWdodF9jb3VudCAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkp
KTsKKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9z
d3Nfc2VuZGVyKSB7CisJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCisJCWFzb2MtPnBl
ZXJzX3J3bmQgPSAwOworCX0KKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA+IG9sZF9yd25kKSB7CisJ
CXdpbl9wcm9iZV9yZWNvdmVyeSA9IDE7CisJfQorCS8qIE5vdyBhc3N1cmUgYSB0aW1lciB3aGVy
ZSBkYXRhIGlzIHF1ZXVlZCBhdCAqLworYWdhaW46CisJaiA9IDA7CisJVEFJTFFfRk9SRUFDSChu
ZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKHdpbl9wcm9iZV9yZWNvdmVyeSAm
JiAobmV0LT53aW5kb3dfcHJvYmUpKSB7CisJCQl3aW5fcHJvYmVfcmVjb3ZlcmVkID0gMTsKKwkJ
CS8qCisJCQkgKiBGaW5kIGZpcnN0IGNodW5rIHRoYXQgd2FzIHVzZWQgd2l0aCB3aW5kb3cgcHJv
YmUKKwkJCSAqIGFuZCBjbGVhciB0aGUgc2VudAorCQkJICovCisJCQkvKiBzYV9pZ25vcmUgRlJF
RURfTUVNT1JZICovCisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNj
dHBfbmV4dCkgeworCQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgeworCQkJCQkvKiBtb3ZlIGJh
Y2sgdG8gZGF0YSBzZW5kIHF1ZXVlICovCisJCQkJCXNjdHBfd2luZG93X3Byb2JlX3JlY292ZXJ5
KHN0Y2IsIGFzb2MsIHRwMSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAo
bmV0LT5mbGlnaHRfc2l6ZSkgeworCQkJaisrOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCWlmIChuZXQtPndp
bmRvd19wcm9iZSkgeworCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgeworCQkJCS8qIEluIHdpbmRvdyBwcm9iZXMg
d2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRoZXJlICovCisJCQkJbmV0
LT53aW5kb3dfcHJvYmUgPSAwOworCQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQt
PnJ4dF90aW1lci50aW1lcikpIHsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQl9CisJCQl9IGVsc2UgaWYg
KFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAorCQkJCSAg
ICAgICAgICAgICAgICBzdGNiLCBuZXQsCisJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOREFUQSArIFNDVFBfTE9DXzIzKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGogPT0gMCkg
JiYKKwkgICAgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCisJICAgIChhc29j
LT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYKKwkgICAgKHdpbl9wcm9iZV9yZWNvdmVy
ZWQgPT0gMCkgJiYKKwkgICAgKGRvbmVfb25jZSA9PSAwKSkgeworCQkvKiBodWgsIHRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gdW5sZXNzIGFsbCBwYWNrZXRzCisJCSAqIGFyZSBQUi1TQ1RQIGFuZCBt
YXJrZWQgdG8gc2tpcCBvZiBjb3Vyc2UuCisJCSAqLworCQlpZiAoc2N0cF9mc19hdWRpdChhc29j
KSkgeworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJ
CQluZXQtPmZsaWdodF9zaXplID0gMDsKKwkJCX0KKwkJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7
CisJCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOworCQkJYXNvYy0+c2VudF9xdWV1ZV9y
ZXRyYW5fY250ID0gMDsKKwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKTsKKwkJCQkJc2N0cF90b3RhbF9m
bGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWRvbmVfb25jZSA9IDE7CisJ
CWdvdG8gYWdhaW47CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwor
CS8qIE5vdyB3aGF0IGFib3V0IHNodXRkb3duIGlzc3VlcyAqLworCS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkg
JiYgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCS8qIG5vdGhpbmcgbGVmdCBv
biBzZW5kcXVldWUuLiBjb25zaWRlciBkb25lICovCisJCS8qIGNsZWFuIHVwICovCisJCWlmICgo
YXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgorCQkgICAgKChhc29jLT5zdGF0ZSAmIFND
VFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKKwkJICAgICgoKmFzb2MtPnNzX2Z1bmN0aW9u
cy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkpIHsKKwkJCWFz
b2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKKwkJfQorCQlpZiAoKChh
c29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAgKFND
VFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSAmJgor
CQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMSkgJiYKKwkJICAgIChhc29jLT5zdGF0
ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCXN0cnVjdCBtYnVmICpvcF9l
cnI7CisKKwkJCSphYm9ydF9ub3cgPSAxOworCQkJLyogWFhYICovCisJCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQlz
dGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBT
Q1RQX0xPQ18yNDsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwg
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJcmV0dXJuOworCQl9CisJCWlm
ICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpICYmCisJCSAgICAo
YXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
cDsKKworCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8
CisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpKSB7CisJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwor
CQkJfQorCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsK
KwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5H
KTsKKwkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2Mt
PmFsdGVybmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2Ugewor
CQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5k
X3NodXRkb3duKHN0Y2IsIG5ldHApOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfU0hVVERPV04sCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCSBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJfSBlbHNlIGlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJCSAgIChhc29jLT5zdHJlYW1f
cXVldWVfY250ID09IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOworCisJCQlTQ1RQ
X1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKKwkJCVNDVFBfQ0xFQVJfU1VCU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCXNjdHBfc3RvcF90aW1l
cnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgeworCQkJCW5l
dHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2UgeworCQkJCW5ldHAgPSBhc29jLT5wcmlt
YXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBu
ZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLLAor
CQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCX0KKwl9CisJLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBIZXJlIHdlIHBlcmZvcm0g
UFItU0NUUCBwcm9jZWR1cmVzICAgICAgICAqLworCS8qIChzZWN0aW9uIDQuMikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKwkvKiBDMS4gdXBkYXRlIGFkdmFuY2VkUGVlckFja1BvaW50ICovCisJ
aWYgKFNDVFBfVFNOX0dUKGN1bWFjaywgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpKSB7
CisJCWFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gY3VtYWNrOworCX0KKwkvKiBQUi1T
Y3RwIGlzc3VlcyBuZWVkIHRvIGJlIGFkZHJlc3NlZCB0b28gKi8KKwlpZiAoKGFzb2MtPnByc2N0
cF9zdXBwb3J0ZWQpICYmIChhc29jLT5wcl9zY3RwX2NudCA+IDApKSB7CisJCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKmxjaGs7CisJCXVpbnQzMl90IG9sZF9hZHZfcGVlcl9hY2tfcG9pbnQ7CisK
KwkJb2xkX2Fkdl9wZWVyX2Fja19wb2ludCA9IGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50
OworCQlsY2hrID0gc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2ludChzdGNiLCBhc29jKTsK
KwkJLyogQzMuIFNlZSBpZiB3ZSBuZWVkIHRvIHNlbmQgYSBGd2QtVFNOICovCisJCWlmIChTQ1RQ
X1RTTl9HVChhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgY3VtYWNrKSkgeworCQkJLyoK
KwkJCSAqIElTU1VFIHdpdGggRUNOLCBzZWUgRldELVRTTiBwcm9jZXNzaW5nLgorCQkJICovCisJ
CQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsIG9sZF9hZHZf
cGVlcl9hY2tfcG9pbnQpKSB7CisJCQkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCBhc29jKTsKKwkJ
CX0gZWxzZSBpZiAobGNoaykgeworCQkJCS8qIHRyeSB0byBGUiBmd2QtdHNuJ3MgdGhhdCBnZXQg
bG9zdCB0b28gKi8KKwkJCQlpZiAobGNoay0+cmVjLmRhdGEuZndkX3Rzbl9jbnQgPj0gMykgewor
CQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOworCQkJCX0KKwkJCX0KKwkJfQorCQlp
ZiAobGNoaykgeworCQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8KKwkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBs
Y2hrLT53aG9Ubyk7CisJCX0KKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfU0FDS19SV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbWlzY19p
bnRzKFNDVFBfU0FDS19SV05EX1VQREFURSwKKwkJCSAgICAgICByd25kLAorCQkJICAgICAgIHN0
Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJCSAgICAgICBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwK
KwkJCSAgICAgICBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwl9Cit9CisK
K3ZvaWQKK3NjdHBfaGFuZGxlX3NhY2soc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXRfc2VnLCBp
bnQgb2Zmc2V0X2R1cCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAor
ICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fc2VnLCB1aW50MTZfdCBudW1fbnJfc2VnLCB1
aW50MTZfdCBudW1fZHVwLAorICAgICAgICAgICAgICAgICBpbnQgKmFib3J0X25vdywgdWludDhf
dCBmbGFncywKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgY3VtX2FjaywgdWludDMyX3Qgcndu
ZCwgaW50IGVjbmVfc2VlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsICp0cDI7CisJdWludDMyX3QgbGFzdF90c24sIGJp
Z2dlc3RfdHNuX2Fja2VkLCBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwgdGhpc19zYWNrX2xvd2Vz
dF9uZXdhY2s7CisJdWludDE2X3Qgd2FrZV9oaW0gPSAwOworCXVpbnQzMl90IHNlbmRfcyA9IDA7
CisJbG9uZyBqOworCWludCBhY2N1bV9tb3ZlZCA9IDA7CisJaW50IHdpbGxfZXhpdF9mYXN0X3Jl
Y292ZXJ5ID0gMDsKKwl1aW50MzJfdCBhX3J3bmQsIG9sZF9yd25kOworCWludCB3aW5fcHJvYmVf
cmVjb3ZlcnkgPSAwOworCWludCB3aW5fcHJvYmVfcmVjb3ZlcmVkID0gMDsKKwlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQgPSBOVUxMOworCWludCBkb25lX29uY2U7CisJaW50IHJ0b19vayA9IDE7CisJ
dWludDhfdCByZW5lZ2VkX2FsbCA9IDA7CisJdWludDhfdCBjbXRfZGFjX2ZsYWc7CisJLyoKKwkg
KiB3ZSB0YWtlIGFueSBjaGFuY2Ugd2UgY2FuIHRvIHNlcnZpY2Ugb3VyIHF1ZXVlcyBzaW5jZSB3
ZSBjYW5ub3QKKwkgKiBnZXQgYXdva2VuIHdoZW4gdGhlIHNvY2tldCBpcyByZWFkIGZyb20gOjwK
KwkgKi8KKwkvKgorCSAqIE5vdyBwZXJmb3JtIHRoZSBhY3R1YWwgU0FDSyBoYW5kbGluZzogMSkg
VmVyaWZ5IHRoYXQgaXQgaXMgbm90IGFuCisJICogb2xkIHNhY2ssIGlmIHNvIGRpc2NhcmQuIDIp
IElmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCBpbiB0aGUgc2VuZAorCSAqIHF1ZXVlIChjdW0tYWNr
IGlzIGVxdWFsIHRvIGxhc3QgYWNrZWQpIHRoZW4geW91IGhhdmUgYSBkdXBsaWNhdGUKKwkgKiB0
b28sIHVwZGF0ZSBhbnkgcnduZCBjaGFuZ2UgYW5kIHZlcmlmeSBubyB0aW1lcnMgYXJlIHJ1bm5p
bmcuCisJICogdGhlbiByZXR1cm4uIDMpIFByb2Nlc3MgYW55IG5ldyBjb25zZXF1dGl2ZSBkYXRh
IGkuZS4gY3VtLWFjaworCSAqIG1vdmVkIHByb2Nlc3MgdGhlc2UgZmlyc3QgYW5kIG5vdGUgdGhh
dCBpdCBtb3ZlZC4gNCkgUHJvY2VzcyBhbnkKKwkgKiBzYWNrIGJsb2Nrcy4gNSkgRHJvcCBhbnkg
YWNrZWQgZnJvbSB0aGUgcXVldWUuIDYpIENoZWNrIGZvciBhbnkKKwkgKiByZXZva2VkIGJsb2Nr
cyBhbmQgbWFyay4gNykgVXBkYXRlIHRoZSBjd25kLiA4KSBOb3RoaW5nIGxlZnQsCisJICogc3lu
YyB1cCBmbGlnaHRzaXplcyBhbmQgdGhpbmdzLCBzdG9wIGFsbCB0aW1lcnMgYW5kIGFsc28gY2hl
Y2sKKwkgKiBmb3Igc2h1dGRvd25fcGVuZGluZyBzdGF0ZS4gSWYgc28gdGhlbiBnbyBhaGVhZCBh
bmQgc2VuZCBvZmYgdGhlCisJICogc2h1dGRvd24uIElmIGluIHNodXRkb3duIHJlY3YsIHNlbmQg
b2ZmIHRoZSBzaHV0ZG93bi1hY2sgYW5kCisJICogc3RhcnQgdGhhdCB0aW1lciwgUmV0LiA5KSBT
dHJpa2UgYW55IG5vbi1hY2tlZCB0aGluZ3MgYW5kIGRvIEZSCisJICogcHJvY2VkdXJlIGlmIG5l
ZWRlZCBiZWluZyBzdXJlIHRvIHNldCB0aGUgRlIgZmxhZy4gMTApIERvIHByLXNjdHAKKwkgKiBw
cm9jZWR1cmVzLiAxMSkgQXBwbHkgYW55IEZSIHBlbmFsdGllcy4gMTIpIEFzc3VyZSB3ZSB3aWxs
IFNBQ0sKKwkgKiBpZiBpbiBzaHV0ZG93bl9yZWN2IHN0YXRlLgorCSAqLworCVNDVFBfVENCX0xP
Q0tfQVNTRVJUKHN0Y2IpOworCS8qIENNVCBEQUMgYWxnbyAqLworCXRoaXNfc2Fja19sb3dlc3Rf
bmV3YWNrID0gMDsKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zbG93cGF0aF9zYWNrKTsKKwlsYXN0
X3RzbiA9IGN1bV9hY2s7CisJY210X2RhY19mbGFnID0gZmxhZ3MgJiBTQ1RQX1NBQ0tfQ01UX0RB
QzsKKyNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ1tz
dGNiLT5hc29jLmN1bWFja19sb2dfYXRdID0gY3VtX2FjazsKKwlzdGNiLT5hc29jLmN1bWFja19s
b2dfYXQrKzsKKwlpZiAoc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0ID4gU0NUUF9UU05fTE9HX1NJ
WkUpIHsKKwkJc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0ID0gMDsKKwl9CisjZW5kaWYKKwlhX3J3
bmQgPSByd25kOworCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTE9HX1NBQ0tfQVJSSVZBTFNfRU5BQkxFKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBf
U0FDS19MT0dfTk9STUFMLCBjdW1fYWNrLAorCQkgICAgICAgICAgICAgICByd25kLCBzdGNiLT5h
c29jLmxhc3RfYWNrZWRfc2VxLCBzdGNiLT5hc29jLnBlZXJzX3J3bmQpOworCX0KKworCW9sZF9y
d25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCXNjdHBfbWlzY19p
bnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkgICAgICAgICAgICAgICBzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQsCisJCSAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSwKKwkJICAgICAgICAgICAgICAgX19MSU5FX18pOworCX0K
KwlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCWFzb2MgPSAmc3RjYi0+YXNv
YzsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNL
X0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEs
CisJCSAgICAgICAgICAgICAgY3VtX2FjaywKKwkJICAgICAgICAgICAgICAwLAorCQkgICAgICAg
ICAgICAgIG51bV9zZWcsCisJCSAgICAgICAgICAgICAgbnVtX2R1cCwKKwkJICAgICAgICAgICAg
ICBTQ1RQX0xPR19ORVdfU0FDSyk7CisJfQorCWlmICgobnVtX2R1cCkgJiYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpKSB7CisJ
CXVpbnQxNl90IGk7CisJCXVpbnQzMl90ICpkdXBkYXRhLCBkYmxvY2s7CisKKwkJZm9yIChpID0g
MDsgaSA8IG51bV9kdXA7IGkrKykgeworCQkJZHVwZGF0YSA9ICh1aW50MzJfdCAqKXNjdHBfbV9n
ZXRwdHIobSwgb2Zmc2V0X2R1cCArIGkgKiBzaXplb2YodWludDMyX3QpLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwgKHVpbnQ4X3QgKikm
ZGJsb2NrKTsKKwkJCWlmIChkdXBkYXRhID09IE5VTEwpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
CXNjdHBfbG9nX2ZyKCpkdXBkYXRhLCAwLCAwLCBTQ1RQX0ZSX0RVUEVEKTsKKwkJfQorCX0KKwkv
KiByZWFsaXR5IGNoZWNrICovCisJaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkp
IHsKKwkJdHAxID0gVEFJTFFfTEFTVCgmYXNvYy0+c2VudF9xdWV1ZSwKKwkJCQkgc2N0cGNodW5r
X2xpc3RoZWFkKTsKKwkJc2VuZF9zID0gdHAxLT5yZWMuZGF0YS50c24gKyAxOworCX0gZWxzZSB7
CisJCXRwMSA9IE5VTEw7CisJCXNlbmRfcyA9IGFzb2MtPnNlbmRpbmdfc2VxOworCX0KKwlpZiAo
U0NUUF9UU05fR0UoY3VtX2Fjaywgc2VuZF9zKSkgeworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwor
CQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCS8qCisJCSAqIG5vIHdheSwgd2Ug
aGF2ZSBub3QgZXZlbiBzZW50IHRoaXMgVFNOIG91dCB5ZXQuCisJCSAqIFBlZXIgaXMgaG9wZWxl
c3NseSBtZXNzZWQgdXAgd2l0aCB1cy4KKwkJICovCisJCVNDVFBfUFJJTlRGKCJORVcgY3VtX2Fj
azoleCBzZW5kX3M6JXggaXMgc21hbGxlciBvciBlcXVhbFxuIiwKKwkJCSAgICBjdW1fYWNrLCBz
ZW5kX3MpOworCQlpZiAodHAxKSB7CisJCQlTQ1RQX1BSSU5URigiR290IHNlbmRfcyBmcm9tIHRz
bjoleCArIDEgb2YgdHAxOiAlcFxuIiwKKwkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sICh2b2lk
ICopdHAxKTsKKwkJfQorCWhvcGVsZXNzX3BlZXI6CisJCSphYm9ydF9ub3cgPSAxOworCQkvKiBY
WFggKi8KKwkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIkN1bSBhY2sgJTguOHggZ3JlYXRl
ciBvciBlcXVhbCB0aGFuIFRTTiAlOC44eCIsCisJCQkgY3VtX2Fjaywgc2VuZF9zKTsKKwkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwg
bXNnKTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICsgU0NUUF9MT0NfMjU7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJ
fQorCS8qKioqKioqKioqKioqKioqKioqKioqLworCS8qIDEpIGNoZWNrIHRoZSByYW5nZSAqLwor
CS8qKioqKioqKioqKioqKioqKioqKioqLworCWlmIChTQ1RQX1RTTl9HVChhc29jLT5sYXN0X2Fj
a2VkX3NlcSwgbGFzdF90c24pKSB7CisJCS8qIGFja2luZyBzb21ldGhpbmcgYmVoaW5kICovCisJ
CXJldHVybjsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIFJ3bmQgb2YgdGhlIHBlZXIgKi8KKwlpZiAo
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29j
LT5zZW5kX3F1ZXVlKSAmJgorCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgewor
CQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZC9zZW50IGFuZCBzdHJtcSAqLworCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsK
KwkJCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJCSAg
ICAgICAgICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAsIDAsIGFfcnduZCk7CisJCX0KKwkJ
YXNvYy0+cGVlcnNfcnduZCA9IGFfcnduZDsKKwkJaWYgKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFu
X2NudCkgeworCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKKwkJfQorCQlpZiAo
YXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVy
KSB7CisJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJYXNvYy0+cGVlcnNfcndu
ZCA9IDA7CisJCX0KKwkJLyogc3RvcCBhbnkgdGltZXJzICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0
LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1F
Ul9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNik7CisJCQluZXQtPnBhcnRpYWxf
Ynl0ZXNfYWNrZWQgPSAwOworCQkJbmV0LT5mbGlnaHRfc2l6ZSA9IDA7CisJCX0KKwkJYXNvYy0+
dG90YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKKwkJcmV0
dXJuOworCX0KKwkvKgorCSAqIFdlIGluaXQgbmV0QWNrU3ogYW5kIG5ldEFja1N6MiB0byAwLiBU
aGVzZSBhcmUgdXNlZCB0byB0cmFjayAyCisJICogdGhpbmdzLiBUaGUgdG90YWwgYnl0ZSBjb3Vu
dCBhY2tlZCBpcyB0cmFja2VkIGluIG5ldEFja1N6IEFORAorCSAqIG5ldEFjazIgaXMgdXNlZCB0
byB0cmFjayB0aGUgdG90YWwgYnl0ZXMgYWNrZWQgdGhhdCBhcmUgdW4tCisJICogYW1pYmd1aW91
cyBhbmQgd2VyZSBuZXZlciByZXRyYW5zbWl0dGVkLiBXZSB0cmFjayB0aGVzZSBvbiBhIHBlcgor
CSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgYmFzaXMuCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKFNDVFBfVFNOX0dUKGN1bV9hY2ssIG5l
dC0+Y3dyX3dpbmRvd190c24pKSB7CisJCQkvKiBEcmFnIGFsb25nIHRoZSB3aW5kb3dfdHNuIGZv
ciBjd3IncyAqLworCQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IGN1bV9hY2s7CisJCX0KKwkJbmV0
LT5wcmV2X2N3bmQgPSBuZXQtPmN3bmQ7CisJCW5ldC0+bmV0X2FjayA9IDA7CisJCW5ldC0+bmV0
X2FjazIgPSAwOworCisJCS8qCisJCSAqIENNVDogUmVzZXQgQ1VDIGFuZCBGYXN0IHJlY292ZXJ5
IGFsZ28gdmFyaWFibGVzIGJlZm9yZQorCQkgKiBTQUNLIHByb2Nlc3NpbmcKKwkJICovCisJCW5l
dC0+bmV3X3BzZXVkb19jdW1hY2sgPSAwOworCQluZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5
ID0gMDsKKwkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9wcmVwYXJlX25l
dF9mb3Jfc2FjaykgeworCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfcHJl
cGFyZV9uZXRfZm9yX3NhY2spKHN0Y2IsIG5ldCk7CisJCX0KKworCQkvKgorCQkgKiBDTVQ6IFNG
UiBhbGdvIChhbmQgSFROQSkgLSB0aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgaGFzCisJCSAqIHRv
IGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VtYWNrLiBBbHNvIHJlc2V0IHNhd19uZXdhY2sgdG8gMAor
CQkgKiBmb3IgYWxsIGRlc3RzLgorCQkgKi8KKwkJbmV0LT5zYXdfbmV3YWNrID0gMDsKKwkJbmV0
LT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgPSBsYXN0X3RzbjsKKwl9CisJLyogcHJvY2VzcyB0
aGUgbmV3IGNvbnNlY3V0aXZlIFRTTiBmaXJzdCAqLworCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNv
Yy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChTQ1RQX1RTTl9HRShsYXN0X3Rzbiwg
dHAxLT5yZWMuZGF0YS50c24pKSB7CisJCQlpZiAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1f
VU5TRU5UKSB7CisJCQkJYWNjdW1fbW92ZWQgPSAxOworCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQ
X0RBVEFHUkFNX0FDS0VEKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIGl0IGlzIGxlc3MgdGhhbiBB
Q0tFRCwgaXQgaXMKKwkJCQkJICogbm93IG5vLWxvbmdlciBpbiBmbGlnaHQuIEhpZ2hlcgorCQkJ
CQkgKiB2YWx1ZXMgbWF5IG9jY3VyIGR1cmluZyBtYXJraW5nCisJCQkJCSAqLworCQkJCQlpZiAo
KHRwMS0+d2hvVG8tPmRlc3Rfc3RhdGUgJgorCQkJCQkgICAgIFNDVFBfQUREUl9VTkNPTkZJUk1F
RCkgJiYKKwkJCQkJICAgICh0cDEtPnNuZF9jb3VudCA8IDIpKSB7CisJCQkJCQkvKgorCQkJCQkJ
ICogSWYgdGhlcmUgd2FzIG5vIHJldHJhbgorCQkJCQkJICogYW5kIHRoZSBhZGRyZXNzIGlzCisJ
CQkJCQkgKiB1bi1jb25maXJtZWQgYW5kIHdlIHNlbnQKKwkJCQkJCSAqIHRoZXJlIGFuZCBhcmUg
bm93CisJCQkJCQkgKiBzYWNrZWQuLiBpdHMgY29uZmlybWVkLAorCQkJCQkJICogbWFyayBpdCBz
by4KKwkJCQkJCSAqLworCQkJCQkJdHAxLT53aG9Uby0+ZGVzdF9zdGF0ZSAmPQorCQkJCQkJCX5T
Q1RQX0FERFJfVU5DT05GSVJNRUQ7CisJCQkJCX0KKwkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBf
REFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCQlzY3RwX21p
c2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkgICAgICAgICAgICAgICB0
cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCQkgICAgICAgICAgICAgICB0cDEtPmJvb2tf
c2l6ZSwKKwkJCQkJCQkgICAgICAgICAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndo
b1RvLAorCQkJCQkJCSAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwkJCQkJCX0K
KwkJCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKKwkJCQkJCXNjdHBfdG90YWxf
ZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5j
dGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSB7CisJCQkJCQkJKCpzdGNi
LT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRw
MS0+d2hvVG8sCisJCQkJCQkJCQkJCQkJCSAgICAgdHAxKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJ
CQl0cDEtPndob1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOworCisJCQkJCS8qIENNVCBT
RlIgYW5kIERBQyBhbGdvcyAqLworCQkJCQl0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9IHRwMS0+
cmVjLmRhdGEudHNuOworCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNrID0gMTsKKworCQkJCQlp
ZiAodHAxLT5zbmRfY291bnQgPCAyKSB7CisJCQkJCQkvKgorCQkJCQkJICogVHJ1ZSBub24tcmV0
cmFuc21pdGVkCisJCQkJCQkgKiBjaHVuaworCQkJCQkJICovCisJCQkJCQl0cDEtPndob1RvLT5u
ZXRfYWNrMiArPQorCQkJCQkJCXRwMS0+c2VuZF9zaXplOworCisJCQkJCQkvKiB1cGRhdGUgUlRP
IHRvbz8gKi8KKwkJCQkJCWlmICh0cDEtPmRvX3J0dCkgeworCQkJCQkJCWlmIChydG9fb2spIHsK
KwkJCQkJCQkJdHAxLT53aG9Uby0+UlRPID0KKwkJCQkJCQkJCXNjdHBfY2FsY3VsYXRlX3J0byhz
dGNiLAorCQkJCQkJCQkJCQkgICBhc29jLCB0cDEtPndob1RvLAorCQkJCQkJCQkJCQkgICAmdHAx
LT5zZW50X3Jjdl90aW1lLAorCQkJCQkJCQkJCQkgICBTQ1RQX1JUVF9GUk9NX0RBVEEpOworCQkJ
CQkJCQlydG9fb2sgPSAwOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodHAxLT53aG9Uby0+cnRvX25l
ZWRlZCA9PSAwKSB7CisJCQkJCQkJCXRwMS0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJCQkJ
CX0KKwkJCQkJCQl0cDEtPmRvX3J0dCA9IDA7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJLyoKKwkJ
CQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZyb20gdGhlCisJCQkJCSAqIGN1bWFjaydkIFRT
TnMsIGZvciBlYWNoIFRTTiBiZWluZworCQkJCQkgKiBhY2tlZCBmb3IgdGhlIGZpcnN0IHRpbWUs
IHNldCB0aGUKKwkJCQkJICogZm9sbG93aW5nIHZhcmlhYmxlcyBmb3IgdGhlCisJCQkJCSAqIGNv
cnJlc3AgZGVzdGluYXRpb24uCisJCQkJCSAqIG5ld19wc2V1ZG9fY3VtYWNrIHdpbGwgdHJpZ2dl
ciBhCisJCQkJCSAqIGN3bmQgdXBkYXRlLgorCQkJCQkgKiBmaW5kXyhydHhfKXBzZXVkb19jdW1h
Y2sgd2lsbAorCQkJCQkgKiB0cmlnZ2VyIHNlYXJjaCBmb3IgdGhlIG5leHQKKwkJCQkJICogZXhw
ZWN0ZWQgKHJ0eC0pcHNldWRvLWN1bWFjay4KKwkJCQkJICovCisJCQkJCXRwMS0+d2hvVG8tPm5l
d19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNr
ID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisKKwor
CQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNL
X0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19zYWNrKGFzb2MtPmxhc3RfYWNrZWRf
c2VxLAorCQkJCQkJICAgICAgICAgICAgICBjdW1fYWNrLAorCQkJCQkJICAgICAgICAgICAgICB0
cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCSAgICAgICAgICAgICAgMCwKKwkJCQkJCSAgICAgICAg
ICAgICAgMCwKKwkJCQkJCSAgICAgICAgICAgICAgU0NUUF9MT0dfVFNOX0FDS0VEKTsKKwkJCQkJ
fQorCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9D
V05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIHRwMS0+d2hv
VG8sIHRwMS0+cmVjLmRhdGEudHNuLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7CisJCQkJCX0K
KwkJCQl9CisJCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJ
CQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisjaWZkZWYg
U0NUUF9BVURJVElOR19FTkFCTEVECisJCQkJCXNjdHBfYXVkaXRfbG9nKDB4QjMsCisJCQkJCSAg
ICAgICAgICAgICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgJiAweDAwMDAwMGZmKSk7
CisjZW5kaWYKKwkJCQl9CisJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQp
IHsKKwkJCQkJLyogZGVmbGF0ZSB0aGUgY3duZCAqLworCQkJCQl0cDEtPndob1RvLT5jd25kIC09
IHRwMS0+Ym9va19zaXplOworCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0g
MDsKKwkJCQl9CisJCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSB7
CisJCQkJCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1fQUNLRUQ7CisJCQkJfQorCQkJfQorCQl9
IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJYmlnZ2VzdF90c25fbmV3bHlfYWNrZWQgPSBi
aWdnZXN0X3Rzbl9hY2tlZCA9IGxhc3RfdHNuOworCS8qIGFsd2F5cyBzZXQgdGhpcyB1cCB0byBj
dW0tYWNrICovCisJYXNvYy0+dGhpc19zYWNrX2hpZ2hlc3RfZ2FwID0gbGFzdF90c247CisKKwlp
ZiAoKG51bV9zZWcgPiAwKSB8fCAobnVtX25yX3NlZyA+IDApKSB7CisKKwkJLyoKKwkJICogdGhp
c1NhY2tIaWdoZXN0R2FwIHdpbGwgaW5jcmVhc2Ugd2hpbGUgaGFuZGxpbmcgTkVXCisJCSAqIHNl
Z21lbnRzIHRoaXNfc2Fja19oaWdoZXN0X25ld2FjayB3aWxsIGluY3JlYXNlIHdoaWxlCisJCSAq
IGhhbmRsaW5nIE5FV0xZIEFDS0VEIGNodW5rcy4gdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgaXMK
KwkJICogdXNlZCBmb3IgQ01UIERBQyBhbGdvLiBzYXdfbmV3YWNrIHdpbGwgYWxzbyBjaGFuZ2Uu
CisJCSAqLworCQlpZiAoc2N0cF9oYW5kbGVfc2VnbWVudHMobSwgJm9mZnNldF9zZWcsIHN0Y2Is
IGFzb2MsIGxhc3RfdHNuLCAmYmlnZ2VzdF90c25fYWNrZWQsCisJCQkmYmlnZ2VzdF90c25fbmV3
bHlfYWNrZWQsICZ0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKKwkJCW51bV9zZWcsIG51bV9ucl9z
ZWcsICZydG9fb2spKSB7CisJCQl3YWtlX2hpbSsrOworCQl9CisJCS8qCisJCSAqIHZhbGlkYXRl
IHRoZSBiaWdnZXN0X3Rzbl9hY2tlZCBpbiB0aGUgZ2FwIGFja3MgaWYKKwkJICogc3RyaWN0IGFk
aGVyZW5jZSBpcyB3YW50ZWQuCisJCSAqLworCQlpZiAoU0NUUF9UU05fR0UoYmlnZ2VzdF90c25f
YWNrZWQsIHNlbmRfcykpIHsKKwkJCS8qCisJCQkgKiBwZWVyIGlzIGVpdGhlciBjb25mdXNlZCBv
ciB3ZSBhcmUgdW5kZXIKKwkJCSAqIGF0dGFjay4gV2UgbXVzdCBhYm9ydC4KKwkJCSAqLworCQkJ
U0NUUF9QUklOVEYoIkhvcGVsZXNzIHBlZXIhIGJpZ2dlc3RfdHNuX2Fja2VkOiV4IGxhcmdlc3Qg
c2VxOiV4XG4iLAorCQkJCSAgICBiaWdnZXN0X3Rzbl9hY2tlZCwgc2VuZF9zKTsKKwkJCWdvdG8g
aG9wZWxlc3NfcGVlcjsKKwkJfQorCX0KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKi8KKwkvKiBjYW5jZWwgQUxMIFQzLXNlbmQgdGltZXIgaWYgYWNjdW0gbW92
ZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlp
ZiAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgeworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJaWYgKG5ldC0+bmV3X3BzZXVkb19jdW1hY2spCisJ
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAor
CQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCisJCQkJICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI3KTsKKworCQl9CisJfSBlbHNlIHsKKwkJaWYg
KGFjY3VtX21vdmVkKSB7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgeworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+
c2N0cF9lcCwKKwkJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9J
TkRBVEEgKyBTQ1RQX0xPQ18yOCk7CisJCQl9CisJCX0KKwl9CisJLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIGRyb3AgdGhlIGFja2VkIGNodW5rcyBm
cm9tIHRoZSBzZW50cXVldWUgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisJYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBjdW1fYWNrOworCisJVEFJTFFf
Rk9SRUFDSF9TQUZFKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7CisJ
CWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgY3VtX2FjaykpIHsKKwkJCWJyZWFr
OworCQl9CisJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJ
aWYgKGFzb2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAw
KSB7CisJCQkJYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVl
cy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0gZWxzZSB7CisJCQkJcGFuaWMoIk5vIGNodW5r
cyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOworI2VuZGlm
CisJCQl9CisJCX0KKwkJaWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVu
a3Nfb25fcXVldWVzID09IDApICYmCisJCSAgICAoYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRh
LnNpZF0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYKKwkJICAgIFRBSUxR
X0VNUFRZKCZhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKKwkJ
CWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOworCQl9CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2Vu
dF9xdWV1ZSwgdHAxLCBzY3RwX25leHQpOworCQlpZiAoUFJfU0NUUF9FTkFCTEVEKHRwMS0+Zmxh
Z3MpKSB7CisJCQlpZiAoYXNvYy0+cHJfc2N0cF9jbnQgIT0gMCkKKwkJCQlhc29jLT5wcl9zY3Rw
X2NudC0tOworCQl9CisJCWFzb2MtPnNlbnRfcXVldWVfY250LS07CisJCWlmICh0cDEtPmRhdGEp
IHsKKwkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJc2N0cF9mcmVlX2J1ZnNwYWNl
KHN0Y2IsIGFzb2MsIHRwMSwgMSk7CisJCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKKwkJCXRw
MS0+ZGF0YSA9IE5VTEw7CisJCQlpZiAoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQ
X0JVRl9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVt
b3ZlYWJsZS0tOworCQkJfQorCQl9CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX3NhY2so
YXNvYy0+bGFzdF9hY2tlZF9zZXEsCisJCQkgICAgICAgICAgICAgIGN1bV9hY2ssCisJCQkgICAg
ICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAorCQkJICAgICAgICAgICAgICAwLAorCQkJICAg
ICAgICAgICAgICAwLAorCQkJICAgICAgICAgICAgICBTQ1RQX0xPR19GUkVFX1NFTlQpOworCQl9
CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJ
d2FrZV9oaW0rKzsKKwl9CisJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJiAo
YXNvYy0+dG90YWxfZmxpZ2h0ID4gMCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJX
YXJuaW5nIGZsaWdodCBzaXplIGlzIHBvc2l0aXZlIGFuZCBzaG91bGQgYmUgMCIpOworI2Vsc2UK
KwkJU0NUUF9QUklOVEYoIldhcm5pbmcgZmxpZ2h0IHNpemUgaW5jb3JyZWN0IHNob3VsZCBiZSAw
IGlzICVkXG4iLAorCQkgICAgICAgICAgICBhc29jLT50b3RhbF9mbGlnaHQpOworI2VuZGlmCisJ
CWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJfQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7CisJCWlmIChzdGNiLT5zY3Rw
X3NvY2tldCkgeworCQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7CisJCQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJaW5x
dWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+
YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmsp
KTsKKwkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQp
IC0gKGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7CisKKwkJCS8qIGNo
ZWNrIGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQg
dGhlIHRocmVzaG9sZCAqLworCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgorCQkJICAgKCgo
aW5wLT5zZW5kX3NiX3RocmVzaG9sZCA+IDApICYmIChzYl9mcmVlX25vdyA+PSBpbnAtPnNlbmRf
c2JfdGhyZXNob2xkKSkgfHwKKwkJCSAgICAoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkp
IHsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQlpbnAtPnNlbmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2Nr
ZXQsIHNiX2ZyZWVfbm93KTsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCWF0b21pY19z
dWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCX0KKwkJfQorCX0gZWxzZSBp
ZiAoKHdha2VfaGltKSAmJiAoc3RjYi0+c2N0cF9zb2NrZXQpKSB7CisjZWxzZQorCS8qIHNhX2ln
bm9yZSBOT19OVUxMX0NISyAqLworCWlmICgod2FrZV9oaW0pICYmIChzdGNiLT5zY3RwX3NvY2tl
dCkpIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworI2VuZGlmCisJCVNPQ0tCVUZf
TE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19FTkFCTEUpIHsKKwkJCXNj
dHBfd2FrZXVwX2xvZyhzdGNiLCB3YWtlX2hpbSwgU0NUUF9XQUtFU05EX0ZST01fU0FDSyk7CisJ
CX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQ
X1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5zdGF0
ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdo
aWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJ
CQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cF9sb2NrZWQoc3RjYi0+c2N0
cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwor
I2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF93YWtldXBfbG9nKHN0
Y2IsIHdha2VfaGltLCBTQ1RQX05PV0FLRV9GUk9NX1NBQ0spOworCQl9CisJfQorCisJaWYgKGFz
b2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgYWNjdW1fbW92ZWQpIHsKKwkJaWYgKFND
VFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBhc29jLT5mYXN0X3JlY292ZXJ5X3Rzbikp
IHsKKwkJCS8qIFNldHVwIHNvIHdlIHdpbGwgZXhpdCBSRkMyNTgyIGZhc3QgcmVjb3ZlcnkgKi8K
KwkJCXdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0gMTsKKwkJfQorCX0KKwkvKgorCSAqIENoZWNr
IGZvciByZXZva2VkIGZyYWdtZW50czoKKwkgKgorCSAqIGlmIFByZXZpb3VzIHNhY2sgLSBIYWQg
bm8gZnJhZ3MgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSByZXZva2VkIGlmCisJICogUHJldmlvdXMg
c2FjayAtIEhhZCBmcmFnJ3MgdGhlbiAtIElmIHdlIG5vdyBoYXZlIGZyYWdzIGFrYQorCSAqIG51
bV9zZWcgPiAwIGNhbGwgc2N0cF9jaGVja19mb3JfcmV2b2tlZCgpIHRvIHRlbGwgaWYgcGVlciBy
ZXZva2VkCisJICogc29tZSBvZiB0aGVtLiBlbHNlIC0gVGhlIHBlZXIgcmV2b2tlZCBhbGwgQUNL
RUQgZnJhZ21lbnRzLCBzaW5jZQorCSAqIHdlIGhhZCBzb21lIGJlZm9yZSBhbmQgbm93IHdlIGhh
dmUgTk9ORS4KKwkgKi8KKworCWlmIChudW1fc2VnKSB7CisJCXNjdHBfY2hlY2tfZm9yX3Jldm9r
ZWQoc3RjYiwgYXNvYywgY3VtX2FjaywgYmlnZ2VzdF90c25fYWNrZWQpOworCQlhc29jLT5zYXdf
c2Fja193aXRoX2ZyYWdzID0gMTsKKwl9IGVsc2UgaWYgKGFzb2MtPnNhd19zYWNrX3dpdGhfZnJh
Z3MpIHsKKwkJaW50IGNudF9yZXZva2VkID0gMDsKKworCQkvKiBQZWVyIHJldm9rZWQgYWxsIGRn
J3MgbWFya2VkIG9yIGFja2VkICovCisJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9x
dWV1ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fQUNL
RUQpIHsKKwkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5B
QkxFKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SRVZPS0UsCisJ
CQkJCSAgICAgICAgICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkgICAgICAg
ICAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJICAgICAgICAgICAgICAgKHVpbnQzMl90KSh1
aW50cHRyX3QpdHAxLT53aG9UbywKKwkJCQkJICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50
c24pOworCQkJCX0KKwkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKHRwMSk7CisJCQkJc2N0
cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl0cDEtPnJlYy5kYXRhLmNo
dW5rX3dhc19yZXZva2VkID0gMTsKKwkJCQkvKgorCQkJCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMg
aW5jcmVhc2UgaW4KKwkJCQkgKiBmbGlnaHRzaXplLCB3aGljaCBpcyBhcnRpZmljaWFsLAorCQkJ
CSAqIGRvZXMgbm90IHRocm90dGxlIHRoZSBzZW5kZXIsIHdlCisJCQkJICogYWxzbyBpbmNyZWFz
ZSB0aGUgY3duZAorCQkJCSAqIGFydGlmaWNpYWxseS4KKwkJCQkgKi8KKwkJCQl0cDEtPndob1Rv
LT5jd25kICs9IHRwMS0+Ym9va19zaXplOworCQkJCWNudF9yZXZva2VkKys7CisJCQl9CisJCX0K
KwkJaWYgKGNudF9yZXZva2VkKSB7CisJCQlyZW5lZ2VkX2FsbCA9IDE7CisJCX0KKwkJYXNvYy0+
c2F3X3NhY2tfd2l0aF9mcmFncyA9IDA7CisJfQorCWlmIChudW1fbnJfc2VnID4gMCkKKwkJYXNv
Yy0+c2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9IDE7CisJZWxzZQorCQlhc29jLT5zYXdfc2Fja193
aXRoX25yX2ZyYWdzID0gMDsKKworCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9s
IGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KKwlpZiAoZWNuZV9zZWVuID09IDApIHsKKwkJVEFJ
TFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWlmIChuZXQtPm5l
dF9hY2syID4gMCkgeworCQkJCS8qCisJCQkJICogS2FybidzIHJ1bGUgYXBwbGllcyB0byBjbGVh
cmluZyBlcnJvciBjb3VudCwgdGhpcworCQkJCSAqIGlzIG9wdGlvbmFsLgorCQkJCSAqLworCQkJ
CW5ldC0+ZXJyb3JfY291bnQgPSAwOworCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBf
QUREUl9SRUFDSEFCTEUpKSB7CisJCQkJCS8qIGFkZHIgY2FtZSBnb29kICovCisJCQkJCW5ldC0+
ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLAorCQkJCQkgICAgICAgICAgICAgICAgMCwg
KHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCisJCQkJaWYgKG5ldCA9
PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Mu
YWx0ZXJuYXRlKSB7CisJCQkJCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5hdGUsIHByaW1hcnkgaXMg
Z29vZCAqLworCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
KTsKKwkJCQkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJCQkJfQorCQkJCX0KKwor
CQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJbmV0LT5kZXN0
X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7CisJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULAorCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgbmV0LAorCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NU
UF9MT0NfMjkpOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJF
QVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5z
Y3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYoc3RjYiwgbmV0KTsKKwkJCQkJLyogRG9uZSB3aXRoIHRo
aXMgbmV0ICovCisJCQkJCW5ldC0+bmV0X2FjayA9IDA7CisJCQkJfQorCQkJCS8qIHJlc3RvcmUg
YW55IGRvdWJsZWQgdGltZXJzICovCisJCQkJbmV0LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NU
UF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7CisJCQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNv
Yy5taW5ydG8pIHsKKwkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCQl9CisJ
CQkJaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKKwkJCQkJbmV0LT5SVE8gPSBz
dGNiLT5hc29jLm1heHJ0bzsKKwkJCQl9CisJCQl9CisJCX0KKwkJYXNvYy0+Y2NfZnVuY3Rpb25z
LnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayhzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVu
ZWdlZF9hbGwsIHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5KTsKKwl9CisKKwlpZiAoVEFJTFFfRU1Q
VFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCS8qIG5vdGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8K
KwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCS8qIHN0
b3AgYWxsIHRpbWVycyAqLworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5E
LCBzdGNiLT5zY3RwX2VwLAorCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKKwkJCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zMCk7CisJCQluZXQt
PmZsaWdodF9zaXplID0gMDsKKwkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCX0K
KwkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0g
MDsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBOb3cg
d2hhdCBhYm91dCBzaHV0ZG93biBpc3N1ZXMgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmIFRBSUxR
X0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgeworCQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZHF1
ZXVlLi4gY29uc2lkZXIgZG9uZSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX3J3bmRfc2V0
KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJCSAgICAgICAgICAgICAgICAgIGFzb2Mt
PnBlZXJzX3J3bmQsIDAsIDAsIGFfcnduZCk7CisJCX0KKwkJYXNvYy0+cGVlcnNfcnduZCA9IGFf
cnduZDsKKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNj
dHBfc3dzX3NlbmRlcikgeworCQkJLyogU1dTIHNlbmRlciBzaWRlIGVuZ2FnZXMgKi8KKwkJCWFz
b2MtPnBlZXJzX3J3bmQgPSAwOworCQl9CisJCS8qIGNsZWFuIHVwICovCisJCWlmICgoYXNvYy0+
c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgorCQkgICAgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRF
X1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKKwkJICAgICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3Rw
X3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkpIHsKKwkJCWFzb2MtPnN0
YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKKwkJfQorCQlpZiAoKChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAgKFNDVFBfR0VU
X1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSAmJgorCQkgICAg
KGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMSkgJiYKKwkJICAgIChhc29jLT5zdGF0ZSAmIFND
VFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisK
KwkJCSphYm9ydF9ub3cgPSAxOworCQkJLyogWFhYICovCisJCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQlzdGNiLT5z
Y3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xP
Q18yNDsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
b3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgoYXNv
Yy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpICYmCisJCSAgICAoYXNvYy0+
c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKwor
CQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkg
ICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQp
KSB7CisJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJfQor
CQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKKwkJCVND
VFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJ
CXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2MtPmFsdGVy
bmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2UgeworCQkJCW5l
dHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5kX3NodXRk
b3duKHN0Y2IsIG5ldHApOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hV
VERPV04sCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCSBzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBuZXRwKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICgoU0NUUF9HRVRfU1RBVEUo
YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJCSAgIChhc29jLT5z
dHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOworCisJ
CQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQlTQ1RQX1NFVF9T
VEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKKwkJCVNDVFBfQ0xFQVJf
U1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCXNjdHBfc3Rv
cF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewor
CQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2UgeworCQkJCW5ldHAgPSBhc29j
LT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5kX3NodXRkb3duX2Fjayhz
dGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
QUNLLAorCQkJICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJ
CXJldHVybjsKKwkJfQorCX0KKwkvKgorCSAqIE5vdyBoZXJlIHdlIGFyZSBnb2luZyB0byByZWN5
Y2xlIG5ldF9hY2sgZm9yIGEgZGlmZmVyZW50IHVzZS4uLgorCSAqIEhFQURTIFVQLgorCSAqLwor
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCW5ldC0+bmV0
X2FjayA9IDA7CisJfQorCisJLyoKKwkgKiBDTVQgREFDIGFsZ29yaXRobTogSWYgU0FDSyBEQUMg
ZmxhZyB3YXMgMCwgdGhlbiBubyBleHRyYSBtYXJraW5nCisJICogdG8gYmUgZG9uZS4gU2V0dGlu
ZyB0aGlzX3NhY2tfbG93ZXN0X25ld2FjayB0byB0aGUgY3VtX2FjayB3aWxsCisJICogYXV0b21h
dGljYWxseSBlbnN1cmUgdGhhdC4KKwkgKi8KKwlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+
IDApICYmCisJICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNlX2RhYykgJiYKKwkgICAg
KGNtdF9kYWNfZmxhZyA9PSAwKSkgeworCQl0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9IGN1bV9h
Y2s7CisJfQorCWlmICgobnVtX3NlZyA+IDApIHx8IChudW1fbnJfc2VnID4gMCkpIHsKKwkJc2N0
cF9zdHJpa2VfZ2FwX2Fja19jaHVua3Moc3RjYiwgYXNvYywgYmlnZ2VzdF90c25fYWNrZWQsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0aGlz
X3NhY2tfbG93ZXN0X25ld2FjaywgYWNjdW1fbW92ZWQpOworCX0KKwkvKiBKUlMgLSBVc2UgdGhl
IGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9kdWxlICovCisJYXNvYy0+Y2Nf
ZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RjYiwgYXNvYyk7CisKKwkvKiBO
b3cgYXJlIHdlIGV4aXRpbmcgbG9zcyByZWNvdmVyeSA/ICovCisJaWYgKHdpbGxfZXhpdF9mYXN0
X3JlY292ZXJ5KSB7CisJCS8qIE9rLCB3ZSBtdXN0IGV4aXQgZmFzdCByZWNvdmVyeSAqLworCQlh
c29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMDsKKwl9CisJaWYgKChhc29jLT5zYXRf
dDNfbG9zc19yZWNvdmVyeSkgJiYKKwkgICAgU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9z
ZXEsIGFzb2MtPnNhdF90M19yZWNvdmVyeV90c24pKSB7CisJCS8qIGVuZCBzYXRlbGxpdGUgdDMg
bG9zcyByZWNvdmVyeSAqLworCQlhc29jLT5zYXRfdDNfbG9zc19yZWNvdmVyeSA9IDA7CisJfQor
CS8qCisJICogQ01UIEZhc3QgcmVjb3ZlcnkKKwkgKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAobmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVy
eSkgeworCQkJLyogT2ssIHdlIG11c3QgZXhpdCBmYXN0IHJlY292ZXJ5ICovCisJCQluZXQtPmZh
c3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCQl9CisJfQorCisJLyogQWRqdXN0IGFuZCBz
ZXQgdGhlIG5ldyByd25kIHZhbHVlICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7CisJCXNjdHBfbG9nX3J3bmRfc2V0
KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJICAgICAgICAgICAgICAgICAgYXNvYy0+
cGVlcnNfcnduZCwgYXNvYy0+dG90YWxfZmxpZ2h0LCAoYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50
ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKSwgYV9yd25kKTsKKwl9CisJ
YXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIoYV9yd25kLAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodCAr
IChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9j
aHVua19vaCkpKSk7CisJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3Rw
X2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwor
CQlhc29jLT5wZWVyc19yd25kID0gMDsKKwl9CisJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRf
cnduZCkgeworCQl3aW5fcHJvYmVfcmVjb3ZlcnkgPSAxOworCX0KKworCS8qCisJICogTm93IHdl
IG11c3Qgc2V0dXAgc28gd2UgaGF2ZSBhIHRpbWVyIHVwIGZvciBhbnlvbmUgd2l0aAorCSAqIG91
dHN0YW5kaW5nIGRhdGEuCisJICovCisJZG9uZV9vbmNlID0gMDsKK2FnYWluOgorCWogPSAwOwor
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCWlmICh3aW5f
cHJvYmVfcmVjb3ZlcnkgJiYgKG5ldC0+d2luZG93X3Byb2JlKSkgeworCQkJd2luX3Byb2JlX3Jl
Y292ZXJlZCA9IDE7CisJCQkvKi0KKwkJCSAqIEZpbmQgZmlyc3QgY2h1bmsgdGhhdCB3YXMgdXNl
ZCB3aXRoCisJCQkgKiB3aW5kb3cgcHJvYmUgYW5kIGNsZWFyIHRoZSBldmVudC4gUHV0CisJCQkg
KiBpdCBiYWNrIGludG8gdGhlIHNlbmQgcXVldWUgYXMgaWYgaGFzCisJCQkgKiBub3QgYmVlbiBz
ZW50LgorCQkJICovCisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNj
dHBfbmV4dCkgeworCQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgeworCQkJCQlzY3RwX3dpbmRv
d19wcm9iZV9yZWNvdmVyeShzdGNiLCBhc29jLCB0cDEpOworCQkJCQlicmVhazsKKwkJCQl9CisJ
CQl9CisJCX0KKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUpIHsKKwkJCWorKzsKKwkJCWlmICghU0NU
UF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCSAgICAgICAgICAgICAgICAgc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkg
eworCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChu
ZXQtPndpbmRvd19wcm9iZSkgeworCQkJCS8qIEluIHdpbmRvdyBwcm9iZXMgd2UgbXVzdCBhc3N1
cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRoZXJlICovCisJCQkJaWYgKCFTQ1RQX09TX1RJ
TUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkgeworCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCk7CisKKwkJCQl9CisJCQl9IGVsc2UgaWYgKFNDVFBfT1NfVElNRVJf
UEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAorCQkJCSAgICAgICAgICAgICAgICBz
dGNiLCBuZXQsCisJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFND
VFBfTE9DXzMyKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGogPT0gMCkgJiYKKwkgICAgKCFUQUlM
UV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCisJICAgIChhc29jLT5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQgPT0gMCkgJiYKKwkgICAgKHdpbl9wcm9iZV9yZWNvdmVyZWQgPT0gMCkgJiYKKwkg
ICAgKGRvbmVfb25jZSA9PSAwKSkgeworCQkvKiBodWgsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4g
dW5sZXNzIGFsbCBwYWNrZXRzCisJCSAqIGFyZSBQUi1TQ1RQIGFuZCBtYXJrZWQgdG8gc2tpcCBv
ZiBjb3Vyc2UuCisJCSAqLworCQlpZiAoc2N0cF9mc19hdWRpdChhc29jKSkgeworCQkJVEFJTFFf
Rk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQluZXQtPmZsaWdodF9z
aXplID0gMDsKKwkJCX0KKwkJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJCQlhc29jLT50b3Rh
bF9mbGlnaHRfY291bnQgPSAwOworCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsK
KwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCXNjdHBfZmxp
Z2h0X3NpemVfaW5jcmVhc2UodHAxKTsKKwkJCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uo
c3RjYiwgdHAxKTsKKwkJCQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JF
U0VORCkgeworCQkJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2Nu
dCk7CisJCQkJfQorCQkJfQorCQl9CisJCWRvbmVfb25jZSA9IDE7CisJCWdvdG8gYWdhaW47CisJ
fQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyog
SGVyZSB3ZSBwZXJmb3JtIFBSLVNDVFAgcHJvY2VkdXJlcyAgICAgICAgKi8KKwkvKiAoc2VjdGlv
biA0LjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQzEuIHVwZGF0ZSBhZHZhbmNlZFBl
ZXJBY2tQb2ludCAqLworCWlmIChTQ1RQX1RTTl9HVChjdW1fYWNrLCBhc29jLT5hZHZhbmNlZF9w
ZWVyX2Fja19wb2ludCkpIHsKKwkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1f
YWNrOworCX0KKwkvKiBDMi4gdHJ5IHRvIGZ1cnRoZXIgbW92ZSBhZHZhbmNlZFBlZXJBY2tQb2lu
dCBhaGVhZCAqLworCWlmICgoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCkgJiYgKGFzb2MtPnByX3Nj
dHBfY250ID4gMCkpIHsKKwkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKKwkJdWludDMy
X3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2ludDsKKworCQlvbGRfYWR2X3BlZXJfYWNrX3BvaW50ID0g
YXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7CisJCWxjaGsgPSBzY3RwX3RyeV9hZHZhbmNl
X3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFzb2MpOworCQkvKiBDMy4gU2VlIGlmIHdlIG5lZWQgdG8g
c2VuZCBhIEZ3ZC1UU04gKi8KKwkJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmFkdmFuY2VkX3BlZXJf
YWNrX3BvaW50LCBjdW1fYWNrKSkgeworCQkJLyoKKwkJCSAqIElTU1VFIHdpdGggRUNOLCBzZWUg
RldELVRTTiBwcm9jZXNzaW5nLgorCQkJICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKKwkJCQlzY3RwX21pc2Nf
aW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCisJCQkJICAgICAgICAgICAgICAgMHhlZSwgY3VtX2Fj
aywgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsCisJCQkJICAgICAgICAgICAgICAgb2xk
X2Fkdl9wZWVyX2Fja19wb2ludCk7CisJCQl9CisJCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2
YW5jZWRfcGVlcl9hY2tfcG9pbnQsIG9sZF9hZHZfcGVlcl9hY2tfcG9pbnQpKSB7CisJCQkJc2Vu
ZF9mb3J3YXJkX3RzbihzdGNiLCBhc29jKTsKKwkJCX0gZWxzZSBpZiAobGNoaykgeworCQkJCS8q
IHRyeSB0byBGUiBmd2QtdHNuJ3MgdGhhdCBnZXQgbG9zdCB0b28gKi8KKwkJCQlpZiAobGNoay0+
cmVjLmRhdGEuZndkX3Rzbl9jbnQgPj0gMykgeworCQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2Is
IGFzb2MpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAobGNoaykgeworCQkJLyogQXNzdXJlIGEg
dGltZXIgaXMgdXAgKi8KKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQs
CisJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGstPndob1RvKTsK
KwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNL
X1JXTkRfVVBEQVRFLAorCQkgICAgICAgICAgICAgICBhX3J3bmQsCisJCSAgICAgICAgICAgICAg
IHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHQsCisJCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVl
X3NpemUpOworCX0KK30KKwordm9pZAorc2N0cF91cGRhdGVfYWNrZWQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqY3AsIGludCAqYWJvcnRfZmxhZykK
K3sKKwkvKiBDb3B5IGN1bS1hY2sgKi8KKwl1aW50MzJfdCBjdW1fYWNrLCBhX3J3bmQ7CisKKwlj
dW1fYWNrID0gbnRvaGwoY3AtPmN1bXVsYXRpdmVfdHNuX2Fjayk7CisJLyogQXJyYW5nZSBzbyBh
X3J3bmQgZG9lcyBOT1QgY2hhbmdlICovCisJYV9yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25k
ICsgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisKKwkvKiBOb3cgY2FsbCB0aGUgZXhwcmVzcyBz
YWNrIGhhbmRsaW5nICovCisJc2N0cF9leHByZXNzX2hhbmRsZV9zYWNrKHN0Y2IsIGN1bV9hY2ss
IGFfcnduZCwgYWJvcnRfZmxhZywgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2tpY2tfcHJz
Y3RwX3Jlb3JkZXJfcXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgIHN0cnVj
dCBzY3RwX3N0cmVhbV9pbiAqc3RybWluKQoreworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFk
ICpjb250cm9sLCAqbmNvbnRyb2w7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJ
dWludDMyX3QgbWlkOworCWludCBuZWVkX3JlYXNtX2NoZWNrID0gMDsKKworCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKKwltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZDsKKwkvKgorCSAqIEZp
cnN0IGRlbGl2ZXIgYW55dGhpbmcgcHJpb3IgdG8gYW5kIGluY2x1ZGluZyB0aGUgc3RyZWFtIG5v
IHRoYXQKKwkgKiBjYW1lIGluLgorCSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAm
c3RybWluLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKwkJaWYgKFNDVFBfTUlE
X0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlkLCBjb250cm9sLT5taWQpKSB7CisJCQkvKiB0
aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLworCQkJaWYgKCgoY29udHJvbC0+c2luZm9fZmxhZ3Mg
Pj4gOCkgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpICA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJ
CQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisJCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3Eg
PT0gU0NUUF9PTl9PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm1pbi0+aW5xdWV1
ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0
cm1fcSA9PSBTQ1RQX09OX1VOT1JERVJFRCkgeworCQkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtaW4t
PnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJCQl9IGVsc2UgeworCQkJCQkJcGFuaWMoInN0cm1pbjogJXAgY3RsOiAlcCB1bmtub3duICVk
IiwKKwkJCQkJCSAgICAgIHN0cm1pbiwgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKyNl
bmRpZgorCQkJCQl9CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJfQorCQkJCS8q
IHN1YnRyYWN0IHBlbmRpbmcgb24gc3RyZWFtcyAqLworCQkJCWlmIChhc29jLT5zaXplX29uX2Fs
bF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29jLT5zaXplX29uX2FsbF9z
dHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFO
VFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29u
dHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5n
dGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYK
KwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOwor
CQkJCS8qIGRlbGl2ZXIgaXQgdG8gYXQgbGVhc3QgdGhlIGRlbGl2ZXJ5LXEgKi8KKwkJCQlpZiAo
c3RjYi0+c2N0cF9zb2NrZXQpIHsKKwkJCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywg
Y29udHJvbC0+c2luZm9fdHNuKTsKKwkJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9l
cCwgc3RjYiwKKwkJCQkJCQkgIGNvbnRyb2wsCisJCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3JjdiwKKwkJCQkJCQkgIDEsIFNDVFBfUkVBRF9MT0NLX0hFTEQsCisJCQkJCQkJICBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogSXRzIGEgZnJhZ21l
bnRlZCBtZXNzYWdlICovCisJCQkJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgeworCQkJ
CQkvKiBNYWtlIGl0IHNvIHRoaXMgaXMgbmV4dCB0byBkZWxpdmVyLCB3ZSByZXN0b3JlIGxhdGVy
ICovCisJCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlkIC0gMTsK
KwkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDE7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ
fSBlbHNlIHsKKwkJCS8qIG5vIG1vcmUgZGVsaXZlcnkgbm93LiAqLworCQkJYnJlYWs7CisJCX0K
Kwl9CisJaWYgKG5lZWRfcmVhc21fY2hlY2spIHsKKwkJaW50IHJldDsKKwkJcmV0ID0gc2N0cF9k
ZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsICZzdGNiLT5hc29jLCBzdHJtaW4sIFNDVFBfUkVBRF9M
T0NLX0hFTEQpOworCQlpZiAoU0NUUF9NSURfR1QoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQs
IHN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkKSkgeworCQkJLyogUmVzdG9yZSB0aGUgbmV4dCB0
byBkZWxpdmVyIHVubGVzcyB3ZSBhcmUgYWhlYWQgKi8KKwkJCXN0cm1pbi0+bGFzdF9taWRfZGVs
aXZlcmVkID0gbWlkOworCQl9CisJCWlmIChyZXQgPT0gMCkgeworCQkJLyogTGVmdCB0aGUgZnJv
bnQgUGFydGlhbCBvbmUgb24gKi8KKwkJCXJldHVybjsKKwkJfQorCQluZWVkX3JlYXNtX2NoZWNr
ID0gMDsKKwl9CisJLyoKKwkgKiBub3cgd2UgbXVzdCBkZWxpdmVyIHRoaW5ncyBpbiBxdWV1ZSB0
aGUgbm9ybWFsIHdheSAgaWYgYW55IGFyZQorCSAqIG5vdyByZWFkeS4KKwkgKi8KKwltaWQgPSBz
dHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRy
b2wsICZzdHJtaW4tPmlucXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgeworCQlpZiAoU0NU
UF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQsIGNvbnRyb2wtPm1pZCkpIHsKKwkJ
CWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9
PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAq
LworCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0
cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybWluLT5p
bnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+
b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJnN0
cm1pbi0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCQkJCX0gZWxzZSB7CisJCQkJCQlwYW5pYygic3RybWluOiAlcCBjdGw6ICVwIHVua25v
d24gJWQiLAorCQkJCQkJICAgICAgc3RybWluLCBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3Ep
OworI2VuZGlmCisJCQkJCX0KKwkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKKwkJCQl9CisJ
CQkJLyogc3VidHJhY3QgcGVuZGluZyBvbiBzdHJlYW1zICovCisJCQkJaWYgKGFzb2MtPnNpemVf
b25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQkJCWFzb2MtPnNpemVfb25f
YWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5W
QVJJQU5UUworCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhh
biBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wt
Pmxlbmd0aCk7CisjZWxzZQorCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKKyNl
bmRpZgorCQkJCX0KKwkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFt
cyk7CisJCQkJLyogZGVsaXZlciBpdCB0byBhdCBsZWFzdCB0aGUgZGVsaXZlcnktcSAqLworCQkJ
CXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlkOworCQkJCWlmIChzdGNi
LT5zY3RwX3NvY2tldCkgeworCQkJCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjb250
cm9sLT5zaW5mb190c24pOworCQkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBz
dGNiLAorCQkJCQkJCSAgY29udHJvbCwKKwkJCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29f
cmN2LCAxLAorCQkJCQkJCSAgU0NUUF9SRUFEX0xPQ0tfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKworCQkJCX0KKwkJCQltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJ
CQl9IGVsc2UgeworCQkJCS8qIEl0cyBhIGZyYWdtZW50ZWQgbWVzc2FnZSAqLworCQkJCWlmIChj
b250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKKwkJCQkJLyogTWFrZSBpdCBzbyB0aGlzIGlzIG5l
eHQgdG8gZGVsaXZlciAqLworCQkJCQlzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCA9IGNvbnRy
b2wtPm1pZCAtIDE7CisJCQkJCW5lZWRfcmVhc21fY2hlY2sgPSAxOworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAobmVlZF9yZWFz
bV9jaGVjaykgeworCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwgJnN0Y2It
PmFzb2MsIHN0cm1pbiwgU0NUUF9SRUFEX0xPQ0tfSEVMRCk7CisJfQorfQorCisKKworc3RhdGlj
IHZvaWQKK3NjdHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwl1aW50MTZfdCBzdHJlYW0sIHVp
bnQzMl90IG1pZCwgaW50IG9yZGVyZWQsIHVpbnQzMl90IGN1bXRzbikKK3sKKwlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm07
CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlpbnQgY250X3JlbW92ZWQ9
MDsKKworCS8qCisJICogRm9yIG5vdyBsYXJnZSBtZXNzYWdlcyBoZWxkIG9uIHRoZSBzdHJlYW0g
cmVhc20gdGhhdCBhcmUKKwkgKiBjb21wbGV0ZSB3aWxsIGJlIHRvc3NlZCB0b28uIFdlIGNvdWxk
IGluIHRoZW9yeSBkbyBtb3JlCisJICogd29yayB0byBzcGluIHRocm91Z2ggYW5kIHN0b3AgYWZ0
ZXIgZHVtcGluZyBvbmUgbXNnIGFrYQorCSAqIHNlZWluZyB0aGUgc3RhcnQgb2YgYSBuZXcgbXNn
IGF0IHRoZSBoZWFkLCBhbmQgY2FsbCB0aGUKKwkgKiBkZWxpdmVyeSBmdW5jdGlvbi4uLiB0byBz
ZWUgaWYgaXQgY2FuIGJlIGRlbGl2ZXJlZC4uLiBCdXQKKwkgKiBmb3Igbm93IHdlIGp1c3QgZHVt
cCBldmVyeXRoaW5nIG9uIHRoZSBxdWV1ZS4KKwkgKi8KKwlzdHJtID0gJmFzb2MtPnN0cm1pbltz
dHJlYW1dOworCWNvbnRyb2wgPSBzY3RwX2ZpbmRfcmVhc21fZW50cnkoc3RybSwgbWlkLCBvcmRl
cmVkLCBhc29jLT5pZGF0YV9zdXBwb3J0ZWQpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJ
LyogTm90IGZvdW5kICovCisJCXJldHVybjsKKwl9CisJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0
ZWQgJiYgIW9yZGVyZWQgJiYgU0NUUF9UU05fR1QoY29udHJvbC0+ZnNuX2luY2x1ZGVkLCBjdW10
c24pKSB7CisJCXJldHVybjsKKwl9CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wt
PnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKKwkJLyogUHVyZ2UgaGFuZ2luZyBjaHVua3MgKi8K
KwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKG9yZGVyZWQgPT0gMCkpIHsKKwkJCWlm
IChTQ1RQX1RTTl9HVChjaGstPnJlYy5kYXRhLnRzbiwgY3VtdHNuKSkgeworCQkJCWJyZWFrOwor
CQkJfQorCQl9CisJCWNudF9yZW1vdmVkKys7CisJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVh
c20sIGNoaywgc2N0cF9uZXh0KTsKKwkJaWYgKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0g
Y2hrLT5zZW5kX3NpemUpIHsKKwkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5z
ZW5kX3NpemU7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoInNpemVf
b25fcmVhc21fcXVldWUgPSAldSBzbWFsbGVyIHRoYW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNvYy0+
c2l6ZV9vbl9yZWFzbV9xdWV1ZSwgY2hrLT5zZW5kX3NpemUpOworI2Vsc2UKKwkJCWFzb2MtPnNp
emVfb25fcmVhc21fcXVldWUgPSAwOworI2VuZGlmCisJCX0KKwkJc2N0cF91Y291bnRfZGVjcihh
c29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVl
X2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwlpZiAoIVRBSUxR
X0VNUFRZKCZjb250cm9sLT5yZWFzbSkpIHsKKwkJLyogVGhpcyBoYXMgdG8gYmUgb2xkIGRhdGEs
IHVub3JkZXJlZCAqLworCQlpZiAoY29udHJvbC0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNv
bnRyb2wtPmRhdGEpOworCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9yZXNl
dF9hX2NvbnRyb2woY29udHJvbCwgc3RjYi0+c2N0cF9lcCwgY3VtdHNuKTsKKwkJY2hrID0gVEFJ
TFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdz
ICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVh
c20sIGNoaywgc2N0cF9uZXh0KTsKKwkJCXNjdHBfYWRkX2Noa190b19jb250cm9sKGNvbnRyb2ws
IHN0cm0sIHN0Y2IsIGFzb2MsCisJCQkJCQljaGssIFNDVFBfUkVBRF9MT0NLX0hFTEQpOworCQl9
CisJCXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCBzdHJtLCBTQ1RQX1JFQURf
TE9DS19IRUxEKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY29udHJvbC0+b25fc3RybV9xID09IFND
VFBfT05fT1JERVJFRCkgeworCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlucXVldWUsIGNvbnRyb2ws
IG5leHRfaW5zdHJtKTsKKwkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJv
bC0+bGVuZ3RoKSB7CisJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxl
bmd0aDsKKwkJfSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygic2l6ZV9vbl9h
bGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNp
emVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYKKwkJfQorCQlzY3RwX3Vjb3VudF9kZWNyKGFz
b2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJfSBl
bHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKKwkJVEFJ
TFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQlj
b250cm9sLT5vbl9zdHJtX3EgPSAwOworI2lmZGVmIElOVkFSSUFOVFMKKwl9IGVsc2UgaWYgKGNv
bnRyb2wtPm9uX3N0cm1fcSkgeworCQlwYW5pYygic3RybTogJXAgY3RsOiAlcCB1bmtub3duICVk
IiwKKwkJICAgIHN0cm0sIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7CisjZW5kaWYKKwl9
CisJY29udHJvbC0+b25fc3RybV9xID0gMDsKKwlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDAp
IHsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOworCQlpZiAoY29u
dHJvbC0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJY29udHJv
bC0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7
CisJfQorfQorCit2b2lkCitzY3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9j
aHVuayAqZndkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICphYm9ydF9mbGFnLCBzdHJ1
Y3QgbWJ1ZiAqbSAsIGludCBvZmZzZXQpCit7CisJLyogVGhlIHByLXNjdHAgZndkIHRzbiAqLwor
CS8qCisJICogaGVyZSB3ZSB3aWxsIHBlcmZvcm0gYWxsIHRoZSBkYXRhIHJlY2VpdmVyIHNpZGUg
c3RlcHMgZm9yCisJICogcHJvY2Vzc2luZyBGd2RUU04sIGFzIHJlcXVpcmVkIGluIGJ5IHByLXNj
dHAgZHJhZnQ6CisJICoKKwkgKiBBc3N1bWUgd2UgZ2V0IEZ3ZFRTTih4KToKKwkgKgorCSAqIDEp
IHVwZGF0ZSBsb2NhbCBjdW1UU04gdG8geCAKKwkgKiAyKSB0cnkgdG8gZnVydGhlciBhZHZhbmNl
IGN1bVRTTiB0byB4ICsgb3RoZXJzIHdlIGhhdmUgCisJICogMykgZXhhbWluZSBhbmQgdXBkYXRl
IHJlLW9yZGVyaW5nIHF1ZXVlIG9uIHByLWluLXN0cmVhbXMgCisJICogNCkgY2xlYW4gdXAgcmUt
YXNzZW1ibHkgcXVldWUgCisJICogNSkgU2VuZCBhIHNhY2sgdG8gcmVwb3J0IHdoZXJlIHdlIGFy
ZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwl1aW50MzJfdCBuZXdf
Y3VtX3RzbiwgZ2FwOworCXVuc2lnbmVkIGludCBpLCBmd2Rfc3osIG1fc2l6ZTsKKwl1aW50MzJf
dCBzdHJfc2VxOworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKKwlzdHJ1Y3Qgc2N0cF9x
dWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKnN2OworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCWlm
ICgoZndkX3N6ID0gbnRvaHMoZndkLT5jaC5jaHVua19sZW5ndGgpKSA8IHNpemVvZihzdHJ1Y3Qg
c2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEs
CisJCQkiQmFkIHNpemUgdG9vIHNtYWxsL2JpZyBmd2QtdHNuXG4iKTsKKwkJcmV0dXJuOworCX0K
KwltX3NpemUgPSAoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X3NpemUgPDwgMyk7CisJLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
CisJLyogMS4gSGVyZSB3ZSB1cGRhdGUgbG9jYWwgY3VtVFNOIGFuZCBzaGlmdCB0aGUgYml0bWFw
IGFycmF5ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisJbmV3X2N1bV90c24gPSBudG9obChmd2QtPm5ld19jdW11bGF0
aXZlX3Rzbik7CisKKwlpZiAoU0NUUF9UU05fR0UoYXNvYy0+Y3VtdWxhdGl2ZV90c24sIG5ld19j
dW1fdHNuKSkgeworCQkvKiBBbHJlYWR5IGdvdCB0aGVyZSAuLi4gKi8KKwkJcmV0dXJuOworCX0K
KwkvKgorCSAqIG5vdyB3ZSBrbm93IHRoZSBuZXcgVFNOIGlzIG1vcmUgYWR2YW5jZWQsIGxldCdz
IGZpbmQgdGhlIGFjdHVhbAorCSAqIGdhcAorCSAqLworCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdh
cCwgbmV3X2N1bV90c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOworCWFzb2MtPmN1
bXVsYXRpdmVfdHNuID0gbmV3X2N1bV90c247CisJaWYgKGdhcCA+PSBtX3NpemUpIHsKKwkJaWYg
KChsb25nKWdhcCA+IHNjdHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0
LT5zb19yY3YpKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJY2hhciBtc2dbU0NUUF9E
SUFHX0lORk9fTEVOXTsKKworCQkJLyoKKwkJCSAqIG91dCBvZiByYW5nZSAob2Ygc2luZ2xlIGJ5
dGUgY2h1bmtzIGluIHRoZSByd25kIEkKKwkJCSAqIGdpdmUgb3V0KS4gVGhpcyBtdXN0IGJlIGFu
IGF0dGFja2VyLgorCQkJICovCisJCQkqYWJvcnRfZmxhZyA9IDE7CisJCQlzbnByaW50Zihtc2cs
IHNpemVvZihtc2cpLAorCQkJICAgICAgICAgIk5ldyBjdW0gYWNrICU4Ljh4IHRvbyBoaWdoLCBo
aWdoZXN0IFRTTiAlOC44eCIsCisJCQkgICAgICAgICBuZXdfY3VtX3RzbiwgYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX21hcCk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9h
Ym9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMzM7CisJCQlzY3Rw
X2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJCXJldHVybjsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19m
d2R0c25fbWFwX292ZXIpOworCisJCW1lbXNldChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXksIDAs
IHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplKTsKKwkJYXNvYy0+bWFwcGluZ19hcnJheV9i
YXNlX3RzbiA9IG5ld19jdW1fdHNuICsgMTsKKwkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21h
cCA9IG5ld19jdW1fdHNuOworCisJCW1lbXNldChzdGNiLT5hc29jLm5yX21hcHBpbmdfYXJyYXks
IDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplKTsKKwkJYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX25yX21hcCA9IG5ld19jdW1fdHNuOworCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9s
b2dfbWFwKDAsIDMsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURF
X1JFU1VMVCk7CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsK
KwkJZm9yIChpID0gMDsgaSA8PSBnYXA7IGkrKykgeworCQkJaWYgKCFTQ1RQX0lTX1RTTl9QUkVT
RU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGkpICYmCisJCQkgICAgIVNDVFBfSVNfVFNOX1BSRVNF
TlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgaSkpIHsKKwkJCQlTQ1RQX1NFVF9UU05fUFJFU0VO
VChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBpKTsKKwkJCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+
bWFwcGluZ19hcnJheV9iYXNlX3RzbiArIGksIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXApKSB7CisJCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5tYXBw
aW5nX2FycmF5X2Jhc2VfdHNuICsgaTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJ
LyogMi4gQ2xlYXIgdXAgcmUtYXNzZW1ibHkgcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisKKwkvKiBUaGlzIGlzIG5vdyBkb25lIGFzIHBhcnQgb2YgY2xlYXJp
bmcgdXAgdGhlIHN0cmVhbS9zZXEgKi8KKwlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDAp
IHsKKwkJdWludDE2X3Qgc2lkOworCQkvKiBGbHVzaCBhbGwgdGhlIHVuLW9yZGVyZWQgZGF0YSBi
YXNlZCBvbiBjdW0tdHNuICovCisJCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsK
KwkJZm9yIChzaWQgPSAwIDsgc2lkIDwgYXNvYy0+c3RyZWFtaW5jbnQ7IHNpZCsrKSB7CisJCQlz
Y3RwX2ZsdXNoX3JlYXNzbV9mb3Jfc3RyX3NlcShzdGNiLCBhc29jLCBzaWQsIDAsIDAsIG5ld19j
dW1fdHNuKTsKKwkJfQorCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwl9
CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCisJLyogMy4gVXBkYXRlIHRoZSBQUi1zdHJlYW0gcmUtb3JkZXJpbmcgcXVldWVzIGFuZCBm
aXggICovCisJLyogICAgZGVsaXZlcnkgaXNzdWVzIGFzIG5lZWRlZC4gICAgICAgICAgICAgICAg
ICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisJZndkX3N6IC09IHNpemVvZigqZndkKTsKKwlpZiAobSAmJiBmd2Rfc3op
IHsKKwkJLyogTmV3IG1ldGhvZC4gKi8KKwkJdW5zaWduZWQgaW50IG51bV9zdHI7CisJCXVpbnQz
Ml90IG1pZCwgY3VyX21pZDsKKwkJdWludDE2X3Qgc2lkOworCQl1aW50MTZfdCBvcmRlcmVkLCBm
bGFnczsKKwkJc3RydWN0IHNjdHBfc3Ryc2VxICpzdHNlcSwgc3Ryc2VxYnVmOworCQlzdHJ1Y3Qg
c2N0cF9zdHJzZXFfbWlkICpzdHNlcV9tLCBzdHJzZXFidWZfbTsKKwkJb2Zmc2V0ICs9IHNpemVv
ZigqZndkKTsKKworCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7CisJCWlmIChh
c29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCW51bV9zdHIgPSBmd2Rfc3ogLyBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3Ryc2VxX21pZCk7CisJCX0gZWxzZSB7CisJCQludW1fc3RyID0gZndkX3N6IC8g
c2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IG51bV9z
dHI7IGkrKykgeworCQkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCXN0c2VxX20g
PSAoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJ
CQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKSwKKwkJCQkJCQkJCSAgICAo
dWludDhfdCAqKSZzdHJzZXFidWZfbSk7CisJCQkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJzZXFfbWlkKTsKKwkJCQlpZiAoc3RzZXFfbSA9PSBOVUxMKSB7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCQlzaWQgPSBudG9ocyhzdHNlcV9tLT5zaWQpOworCQkJCW1pZCA9IG50b2hsKHN0
c2VxX20tPm1pZCk7CisJCQkJZmxhZ3MgPSBudG9ocyhzdHNlcV9tLT5mbGFncyk7CisJCQkJaWYg
KGZsYWdzICYgUFJfU0NUUF9VTk9SREVSRURfRkxBRykgeworCQkJCQlvcmRlcmVkID0gMDsKKwkJ
CQl9IGVsc2UgeworCQkJCQlvcmRlcmVkID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN0
c2VxID0gKHN0cnVjdCBzY3RwX3N0cnNlcSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJ
CQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpLAorCQkJCQkJCQkJICAgICh1aW50
OF90ICopJnN0cnNlcWJ1Zik7CisJCQkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJz
ZXEpOworCQkJCWlmIChzdHNlcSA9PSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlz
aWQgPSBudG9ocyhzdHNlcS0+c2lkKTsKKwkJCQltaWQgPSAodWludDMyX3QpbnRvaHMoc3RzZXEt
PnNzbik7CisJCQkJb3JkZXJlZCA9IDE7CisJCQl9CisJCQkvKiBDb252ZXJ0ICovCisKKwkJCS8q
IG5vdyBwcm9jZXNzICovCisKKwkJCS8qCisJCQkgKiBPayB3ZSBub3cgbG9vayBmb3IgdGhlIHN0
cmVhbS9zZXEgb24gdGhlIHJlYWQgcXVldWUKKwkJCSAqIHdoZXJlIGl0cyBub3QgYWxsIGRlbGl2
ZXJlZC4gSWYgd2UgZmluZCBpdCB3ZSB0cmFuc211dGUgdGhlCisJCQkgKiByZWFkIGVudHJ5IGlu
dG8gYSBQRElfQUJPUlRFRC4KKwkJCSAqLworCQkJaWYgKHNpZCA+PSBhc29jLT5zdHJlYW1pbmNu
dCkgeworCQkJCS8qIHNjcmV3ZWQgdXAgc3RyZWFtcywgc3RvcCEgICovCisJCQkJYnJlYWs7CisJ
CQl9CisJCQlpZiAoKGFzb2MtPnN0cl9vZl9wZGFwaSA9PSBzaWQpICYmCisJCQkgICAgKGFzb2Mt
PnNzbl9vZl9wZGFwaSA9PSBtaWQpKSB7CisJCQkJLyogSWYgdGhpcyBpcyB0aGUgb25lIHdlIHdl
cmUgcGFydGlhbGx5IGRlbGl2ZXJpbmcKKwkJCQkgKiBub3cgdGhlbiB3ZSBubyBsb25nZXIgYXJl
LiBOb3RlIHRoaXMgd2lsbCBjaGFuZ2UKKwkJCQkgKiB3aXRoIHRoZSByZWFzc2VtYmx5IHJlLXdy
aXRlLgorCQkJCSAqLworCQkJCWFzb2MtPmZyYWdtZW50ZWRfZGVsaXZlcnlfaW5wcm9ncmVzcyA9
IDA7CisJCQl9CisJCQlzdHJtID0gJmFzb2MtPnN0cm1pbltzaWRdOworCQkJZm9yIChjdXJfbWlk
ID0gc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkOyBTQ1RQX01JRF9HRShhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIG1pZCwgY3VyX21pZCk7IGN1cl9taWQrKykgeworCQkJCXNjdHBfZmx1c2hfcmVhc3Nt
X2Zvcl9zdHJfc2VxKHN0Y2IsIGFzb2MsIHNpZCwgY3VyX21pZCwgb3JkZXJlZCwgbmV3X2N1bV90
c24pOworCQkJfQorCQkJVEFJTFFfRk9SRUFDSChjb250cm9sLCAmc3RjYi0+c2N0cF9lcC0+cmVh
ZF9xdWV1ZSwgbmV4dCkgeworCQkJCWlmICgoY29udHJvbC0+c2luZm9fc3RyZWFtID09IHNpZCkg
JiYKKwkJCQkgICAgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+
bWlkLCBtaWQpKSkgeworCQkJCQlzdHJfc2VxID0gKHNpZCA8PCAxNikgfCAoMHgwMDAwZmZmZiAm
IG1pZCk7CisJCQkJCWNvbnRyb2wtPnBkYXBpX2Fib3J0ZWQgPSAxOworCQkJCQlzdiA9IHN0Y2It
PmFzb2MuY29udHJvbF9wZGFwaTsKKwkJCQkJY29udHJvbC0+ZW5kX2FkZGVkID0gMTsKKwkJCQkJ
aWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJCVRBSUxR
X1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQkJaWYg
KGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQkJCQkJ
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCQl9IGVs
c2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFt
cyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxs
X3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJCQkJCWFzb2MtPnNpemVfb25f
YWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJCQkJCQl9CisJCQkJCQlzY3RwX3Vjb3VudF9kZWNy
KGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25f
c3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0t
PnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQkJCQkJcGFuaWMoInN0cm06
ICVwIGN0bDogJXAgdW5rbm93biAlZCIsCisJCQkJCQkgICAgICBzdHJtLCBjb250cm9sLCBjb250
cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJY29udHJvbC0+b25fc3RybV9x
ID0gMDsKKwkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gY29udHJvbDsKKwkJCQkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTiwKKwkJ
CQkJICAgICAgICAgICAgICAgIHN0Y2IsCisJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJ
QUxfREVMSVZFUllfQUJPUlRFRCwKKwkJCQkJICAgICAgICAgICAgICAgICh2b2lkICopJnN0cl9z
ZXEsCisJCQkJCQkJU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJc3RjYi0+YXNvYy5jb250cm9s
X3BkYXBpID0gc3Y7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAoKGNvbnRyb2wtPnNpbmZv
X3N0cmVhbSA9PSBzaWQpICYmCisJCQkJCSAgIFNDVFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBv
cnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSB7CisJCQkJCS8qIFdlIGFyZSBwYXN0IG91ciB2aWN0
aW0gU1NOICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChTQ1RQX01JRF9HVChh
c29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkKSkgewor
CQkJCS8qIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyICovCisJCQkJc3RybS0+bGFzdF9taWRf
ZGVsaXZlcmVkID0gbWlkOworCQkJfQorCQkJLyogbm93IGtpY2sgdGhlIHN0cmVhbSB0aGUgbmV3
IHdheSAqLworCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJc2N0cF9raWNrX3Byc2N0
cF9yZW9yZGVyX3F1ZXVlKHN0Y2IsIHN0cm0pOworCQl9CisJCVNDVFBfSU5QX1JFQURfVU5MT0NL
KHN0Y2ItPnNjdHBfZXApOworCX0KKwkvKgorCSAqIE5vdyBzbGlkZSB0aGluZyBmb3J3YXJkLgor
CSAqLworCXNjdHBfc2xpZGVfbWFwcGluZ19hcnJheXMoc3RjYik7Cit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlh
ZTc3NWFkOGMyZTQ4YzUzOTEuLmJkYmExMTQ4YjY4NTUxNDdkNGQ0NGEwMjdjZWZhNDM4NjE3ZDVk
M2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5oCkBAIC0wLDAg
KzEsMTIyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UK
KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRh
bGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVl
QlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaW5kYXRhLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6
MDY6NDFaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0lOREFU
QV9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0lOREFUQV9IXworCisjaWYgZGVmaW5lZChfS0VS
TkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKK3N0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkICoKK3NjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICB1aW50MzJfdCB0c24sIHVpbnQzMl90IHBwaWQs
CisgICAgdWludDMyX3QgY29udGV4dCwgdWludDE2X3Qgc2lkLAorICAgIHVpbnQzMl90IG1pZCwg
dWludDhfdCBmbGFncywKKyAgICBzdHJ1Y3QgbWJ1ZiAqZG0pOworCisKKyNkZWZpbmUgc2N0cF9i
dWlsZF9yZWFkcV9lbnRyeV9tYWMoX2N0bCwgaW5faXQsIGNvbnRleHQsIG5ldCwgdHNuLCBwcGlk
LCBzaWQsIGZsYWdzLCBkbSwgdGZzbiwgbWlkKSBkbyB7IFwKKwlpZiAoX2N0bCkgeyBcCisJCWF0
b21pY19hZGRfaW50KCYoKG5ldCktPnJlZl9jb3VudCksIDEpOyBcCisJCW1lbXNldChfY3RsLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpKTsgXAorCQkoX2N0bCktPnNpbmZv
X3N0cmVhbSA9IHNpZDsgXAorCQlUQUlMUV9JTklUKCZfY3RsLT5yZWFzbSk7IFwKKwkJKF9jdGwp
LT50b3BfZnNuID0gdGZzbjsgXAorCQkoX2N0bCktPm1pZCA9IG1pZDsgXAorCQkoX2N0bCktPnNp
bmZvX2ZsYWdzID0gKGZsYWdzIDw8IDgpOyBcCisJCShfY3RsKS0+c2luZm9fcHBpZCA9IHBwaWQ7
IFwKKwkJKF9jdGwpLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsgXAorCQkoX2N0bCktPmZzbl9p
bmNsdWRlZCA9IDB4ZmZmZmZmZmY7IFwKKwkJKF9jdGwpLT50b3BfZnNuID0gMHhmZmZmZmZmZjsg
XAorCQkoX2N0bCktPnNpbmZvX3RzbiA9IHRzbjsgXAorCQkoX2N0bCktPnNpbmZvX2N1bXRzbiA9
IHRzbjsgXAorCQkoX2N0bCktPnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZCgoaW5f
aXQpKTsgXAorCQkoX2N0bCktPndob0Zyb20gPSBuZXQ7IFwKKwkJKF9jdGwpLT5kYXRhID0gZG07
IFwKKwkJKF9jdGwpLT5zdGNiID0gKGluX2l0KTsgXAorCQkoX2N0bCktPnBvcnRfZnJvbSA9IChp
bl9pdCktPnJwb3J0OyBcCisJfSBcCit9IHdoaWxlICgwKQorCisKKworc3RydWN0IG1idWYgKgor
c2N0cF9idWlsZF9jdGxfbmNodW5rKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisJCSAgICAgIHN0
cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvKTsKKwordm9pZCBzY3RwX3NldF9yd25kKHN0cnVj
dCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKKwordWludDMyX3QKK3Nj
dHBfY2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpOworCit2b2lkCitzY3RwX2V4cHJlc3NfaGFuZGxlX3NhY2soc3RydWN0IHNjdHBf
dGNiICpzdGNiLCB1aW50MzJfdCBjdW1hY2ssCisJCQkgdWludDMyX3QgcnduZCwgaW50ICphYm9y
dF9ub3csIGludCBlY25lX3NlZW4pOworCit2b2lkCitzY3RwX2hhbmRsZV9zYWNrKHN0cnVjdCBt
YnVmICptLCBpbnQgb2Zmc2V0X3NlZywgaW50IG9mZnNldF9kdXAsCisgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgdWludDE2X3QgbnVtX3Nl
ZywgdWludDE2X3QgbnVtX25yX3NlZywgdWludDE2X3QgbnVtX2R1cCwKKyAgICAgICAgICAgICAg
ICAgaW50ICphYm9ydF9ub3csIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IGN1bV9hY2ssIHVpbnQzMl90IHJ3bmQsIGludCBlY25lX3NlZW4pOworCisvKiBkcmFmdC1p
ZXRmLXRzdndnLXVzY3RwICovCit2b2lkCitzY3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdHJ1Y3Qg
c2N0cF90Y2IgKiwKKwkJCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rICosIGludCAqLCBz
dHJ1Y3QgbWJ1ZiAqLCBpbnQpOworCitzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoKK3NjdHBfdHJ5
X2FkdmFuY2VfcGVlcl9hY2tfcG9pbnQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICopOworCit2b2lkIHNjdHBfc2VydmljZV9xdWV1ZXMoc3RydWN0IHNjdHBfdGNi
ICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkCitzY3RwX3VwZGF0ZV9hY2tl
ZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKiwgaW50ICop
OworCitpbnQKK3NjdHBfcHJvY2Vzc19kYXRhKHN0cnVjdCBtYnVmICoqLCBpbnQsIGludCAqLCBp
bnQsCisJCSAgc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisJCSAgc3Ry
dWN0IHNjdHBfbmV0cyAqLCB1aW50MzJfdCAqKTsKKwordm9pZCBzY3RwX3NsaWRlX21hcHBpbmdf
YXJyYXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7CisKK3ZvaWQgc2N0cF9zYWNrX2NoZWNrKHN0
cnVjdCBzY3RwX3RjYiAqLCBpbnQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MS4uYzYyYmI4NTA2ZGMwZmI4NjExMmYzNWUwYjY2ZDA4YzE5OGU4ZjliZCAx
MDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYworKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCkBAIC0wLDAgKzEsNjM3
NSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgor
ICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0
ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwg
YnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoK
KyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYg
X19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDog
aGVhZC9zeXMvbmV0aW5ldC9zY3RwX2lucHV0LmMgMzM0NzI1IDIwMTgtMDYtMDYgMTk6Mjc6MDZa
IHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3Rs
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0
YS5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQo
SU5FVDYpCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNsdWRlIDxu
ZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
I2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisj
ZGVmaW5lIEFQUExFX0ZJTEVfTk8gMgorI2VuZGlmCisKKworc3RhdGljIHZvaWQKK3NjdHBfc3Rv
cF9hbGxfY29va2llX3RpbWVycyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNj
dHBfbmV0cyAqbmV0OworCisJLyogVGhpcyBub3cgbm90IG9ubHkgc3RvcHMgYWxsIGNvb2tpZSB0
aW1lcnMKKwkgKiBpdCBhbHNvIHN0b3BzIGFueSBJTklUIHRpbWVycyBhcyB3ZWxsLiBUaGlzCisJ
ICogd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXJzIGFyZSBzdG9wcGVkIGluCisJICogYWxs
IGNvbGxpc2lvbiBjYXNlcy4KKwkgKi8KKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlU
QUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCWlmIChu
ZXQtPnJ4dF90aW1lci50eXBlID09IFNDVFBfVElNRVJfVFlQRV9DT09LSUUpIHsKKwkJCXNjdHBf
dGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLAorCQkJCQlzdGNiLT5zY3RwX2VwLAor
CQkJCQlzdGNiLAorCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMSk7
CisJCX0gZWxzZSBpZiAobmV0LT5yeHRfdGltZXIudHlwZSA9PSBTQ1RQX1RJTUVSX1RZUEVfSU5J
VCkgeworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULAorCQkJCQlzdGNi
LT5zY3RwX2VwLAorCQkJCQlzdGNiLAorCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsg
U0NUUF9MT0NfMik7CisJCX0KKwl9Cit9CisKKy8qIElOSVQgaGFuZGxlciAqLworc3RhdGljIHZv
aWQKK3NjdHBfaGFuZGxlX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZz
ZXQsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9pbml0X2NodW5rICpjcCwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCAqYWJv
cnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisgICAgICAgICAg
ICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cF9p
bml0ICppbml0OworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQyLCAic2N0cF9oYW5kbGVfaW5pdDogaGFuZGxpbmcgSU5JVCB0Y2I6JXBcbiIsCisJCSh2
b2lkICopc3RjYik7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCX0KKwkvKiB2YWxpZGF0ZSBsZW5ndGggKi8KKwlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xl
bmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykpIHsKKwkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKKwkJc2N0cF9h
Ym9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9l
cnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBt
Zmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCQkgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJ
aWYgKHN0Y2IpCisJCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKKwkJZ290byBvdXRub3c7CisJfQor
CS8qIHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KKwlpbml0ID0gJmNwLT5pbml0OworCWlmIChpbml0
LT5pbml0aWF0ZV90YWcgPT0gMCkgeworCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0
ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4s
IHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAg
IHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQorCQkJKmFib3J0X25vX3VubG9jayA9IDE7CisJ
CWdvdG8gb3V0bm93OworCX0KKwlpZiAobnRvaGwoaW5pdC0+YV9yd25kKSA8IFNDVFBfTUlOX1JX
TkQpIHsKKwkJLyogaW52YWxpZCBwYXJhbWV0ZXIuLi4gc2VuZCBhYm9ydCAqLworCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOworCQlz
Y3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVuLCBzcmMsIGRzdCwgc2gs
IG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJCSAgICAgICB2cmZfaWQsIHBvcnQp
OworCQlpZiAoc3RjYikKKwkJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlnb3RvIG91dG5vdzsK
Kwl9CisJaWYgKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMgPT0gMCkgeworCQkvKiBwcm90b2Nv
bCBlcnJvci4uLiBzZW5kIGFib3J0ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24o
aW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lk
LAorI2VuZGlmCisJCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQorCQkJKmFi
b3J0X25vX3VubG9jayA9IDE7CisJCWdvdG8gb3V0bm93OworCX0KKwlpZiAoaW5pdC0+bnVtX291
dGJvdW5kX3N0cmVhbXMgPT0gMCkgeworCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0
ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BB
UkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4s
IHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAg
IHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQorCQkJKmFib3J0X25vX3VubG9jayA9IDE7CisJ
CWdvdG8gb3V0bm93OworCX0KKwlpZiAoc2N0cF92YWxpZGF0ZV9pbml0X2F1dGhfcGFyYW1zKG0s
IG9mZnNldCArIHNpemVvZigqY3ApLAorCQkJCQkgICBvZmZzZXQgKyBudG9ocyhjcC0+Y2guY2h1
bmtfbGVuZ3RoKSkpIHsKKwkJLyogYXV0aCBwYXJhbWV0ZXIocykgZXJyb3IuLi4gc2VuZCBhYm9y
dCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kaWFnX2luZm9fY29kZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlByb2Js
ZW0gd2l0aCBBVVRIIHBhcmFtZXRlcnMiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAs
IHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisj
ZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQlpZiAoc3Rj
YikKKwkJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlnb3RvIG91dG5vdzsKKwl9CisJLyogV2Ug
YXJlIG9ubHkgYWNjZXB0aW5nIGlmIHdlIGhhdmUgYSBsaXN0ZW5pbmcgc29ja2V0LiovCisJaWYg
KChzdGNiID09IE5VTEwpICYmCisJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUpIHx8CisJICAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSkg
eworCQkvKgorCQkgKiBGSVggTUUgPz8gV2hhdCBhYm91dCBUQ1AgbW9kZWwgYW5kIHdlIGhhdmUg
YQorCQkgKiBtYXRjaC9yZXN0YXJ0IGNhc2U/IEFjdHVhbGx5IG5vIGZpeCBpcyBuZWVkZWQuCisJ
CSAqIHRoZSBsb29rdXAgd2lsbCBhbHdheXMgZmluZCB0aGUgZXhpc3RpbmcgYXNzb2Mgc28gc3Rj
YgorCQkgKiB3b3VsZCBub3QgYmUgTlVMTC4gSXQgbWF5IGJlIHF1ZXN0aW9uYWJsZSB0byBkbyB0
aGlzCisJCSAqIHNpbmNlIHdlIENPVUxEIGp1c3Qgc2VuZCBiYWNrIHRoZSBJTklULUFDSyBhbmQg
aG9wZSB0aGF0CisJCSAqIHRoZSBhcHAgZGlkIGFjY2VwdCgpJ3MgYnkgdGhlIHRpbWUgdGhlIENP
T0tJRSB3YXMgc2VudC4gQnV0CisJCSAqIHRoZXJlIGlzIGEgcHJpY2UgdG8gcGF5IGZvciBDT09L
SUUgZ2VuZXJhdGlvbiBhbmQgSSBkb24ndAorCQkgKiB3YW50IHRvIHBheSBpdCBvbiB0aGUgY2hh
bmNlIHRoYXQgdGhlIGFwcCB3aWxsIGFjdHVhbGx5IGRvCisJCSAqIHNvbWUgYWNjZXB0cygpLiBU
aGUgQXBwIGp1c3QgbG9vc2VzIGFuZCBzaG91bGQgTk9UIGJlIGluCisJCSAqIHRoaXMgc3RhdGUg
Oi0pCisJCSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkgPT0gMCkg
eworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gbGlz
dGVuZXIiKTsKKwkJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgMCwg
b3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkJICAgICAgICAgICAgICAg
IHZyZl9pZCwgcG9ydCk7CisJCX0KKwkJZ290byBvdXRub3c7CisJfQorCWlmICgoc3RjYiAhPSBO
VUxMKSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVf
U0hVVERPV05fQUNLX1NFTlQpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJzY3Rw
X2hhbmRsZV9pbml0OiBzZW5kaW5nIFNIVVRET1dOLUFDS1xuIik7CisJCXNjdHBfc2VuZF9zaHV0
ZG93bl9hY2soc3RjYiwgTlVMTCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NU
UF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0MsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfSBlbHNl
IHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgInNjdHBfaGFuZGxlX2luaXQ6IHNlbmRp
bmcgSU5JVC1BQ0tcbiIpOworCQlzY3RwX3NlbmRfaW5pdGlhdGVfYWNrKGlucCwgc3RjYiwgbmV0
LCBtLCBpcGhsZW4sIG9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwg
c2gsIGNwLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKKwl9Cisgb3V0bm93OgorCWlmIChzdGNiID09IE5VTEwpIHsKKwkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCX0KK30KKworLyoKKyAqIHByb2Nlc3MgcGVlciAiSU5JVC9J
TklULUFDSyIgY2h1bmsgcmV0dXJucyB2YWx1ZSA8IDAgb24gZXJyb3IKKyAqLworCitpbnQKK3Nj
dHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc29fbG9j
a2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwlTQ1RQX1VOVVNFRAorI2VuZGlmCispCit7CisJaW50IHVuc2VudF9kYXRhOworCXVu
c2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKwlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKworCS8qIFRoaXMgZnVuY3Rpb24gcmV0dXJu
cyBpZiBhbnkgc3RyZWFtIGhhcyB0cnVlIHVuc2VudCBkYXRhIG9uIGl0LgorCSAqIE5vdGUgdGhh
dCBhcyBpdCBsb29rcyB0aHJvdWdoIGl0IHdpbGwgY2xlYW4gdXAgYW55IHBsYWNlcyB0aGF0CisJ
ICogaGF2ZSBvbGQgZGF0YSB0aGF0IGhhcyBiZWVuIHNlbnQgYnV0IGxlZnQgYXQgdG9wIG9mIHN0
cmVhbSBxdWV1ZS4KKwkgKi8KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJdW5zZW50X2RhdGEgPSAw
OworCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwlpZiAoIXN0Y2ItPmFzb2Muc3NfZnVuY3Rp
b25zLnNjdHBfc3NfaXNfZW1wdHkoc3RjYiwgYXNvYykpIHsKKwkJLyogQ2hlY2sgdG8gc2VlIGlm
IHNvbWUgZGF0YSBxdWV1ZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250OyBpKyspIHsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJCQlzcCA9IFRB
SUxRX0ZJUlNUKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpOworCQkJaWYgKHNwID09
IE5VTEwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoc3AtPm1zZ19pc19jb21wbGV0
ZSkgJiYKKwkJCSAgICAoc3AtPmxlbmd0aCA9PSAwKSAgJiYKKwkJCSAgICAoc3AtPnNlbmRlcl9h
bGxfZG9uZSkpIHsKKwkJCQkvKiBXZSBhcmUgZG9pbmcgZGlmZmVyZWQgY2xlYW51cC4gTGFzdAor
CQkJCSAqIHRpbWUgdGhyb3VnaCB3aGVuIHdlIHRvb2sgYWxsIHRoZSBkYXRhCisJCQkJICogdGhl
IHNlbmRlcl9hbGxfZG9uZSB3YXMgbm90IHNldC4KKwkJCQkgKi8KKwkJCQlpZiAoc3AtPnB1dF9s
YXN0X291dCA9PSAwKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBvdXQgZW50aXJlIG1z
ZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJCVNDVFBfUFJJTlRGKCJzZW5kZXJfZG9uZTolZCBs
ZW46JWQgbXNnX2NvbXA6JWQgcHV0X2xhc3Rfb3V0OiVkXG4iLAorCQkJCQkgICAgICAgICAgICBz
cC0+c2VuZGVyX2FsbF9kb25lLAorCQkJCQkgICAgICAgICAgICBzcC0+bGVuZ3RoLAorCQkJCQkg
ICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAorCQkJCQkgICAgICAgICAgICBzcC0+cHV0
X2xhc3Rfb3V0KTsKKwkJCQl9CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5z
dHJlYW1fcXVldWVfY250LCAxKTsKKwkJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2Muc3RybW91
dFtpXS5vdXRxdWV1ZSwgc3AsIG5leHQpOworCQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNj
dHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsICZhc29jLT5zdHJtb3V0W2ldLCBz
cCwgMSk7CisJCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNw
LT5uZXQpOworCQkJCQlzcC0+bmV0ID0gTlVMTDsKKwkJCQl9CisJCQkJaWYgKHNwLT5kYXRhKSB7
CisJCQkJCXNjdHBfbV9mcmVlbShzcC0+ZGF0YSk7CisJCQkJCXNwLT5kYXRhID0gTlVMTDsKKwkJ
CQl9CisJCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOworCQkJCWlm
ICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSkpIHsKKwkJCQkJ
dW5zZW50X2RhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXVuc2VudF9kYXRhKys7CisJ
CQl9CisJCQlpZiAodW5zZW50X2RhdGEgPiAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9
CisJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJcmV0dXJuICh1bnNlbnRfZGF0YSk7Cit9
CisKK3N0YXRpYyBpbnQKK3NjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBzY3RwX2luaXRfY2h1bmsg
KmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfaW5pdCAqaW5pdDsK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0
OworCXVuc2lnbmVkIGludCBpOworCisJaW5pdCA9ICZjcC0+aW5pdDsKKwlhc29jID0gJnN0Y2It
PmFzb2M7CisJLyogc2F2ZSBvZmYgcGFyYW1ldGVycyAqLworCWFzb2MtPnBlZXJfdnRhZyA9IG50
b2hsKGluaXQtPmluaXRpYXRlX3RhZyk7CisJYXNvYy0+cGVlcnNfcnduZCA9IG50b2hsKGluaXQt
PmFfcnduZCk7CisJLyogaW5pdCB0c24ncyAqLworCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXAgPSBhc29jLT5hc2NvbmZfc2VxX2luID0gbnRvaGwoaW5pdC0+aW5pdGlhbF90c24pIC0gMTsK
KworCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPm5ldHMpKSB7CisJCS8qIHVwZGF0ZSBhbnkgc3N0
aHJlc2gncyB0aGF0IG1heSBoYXZlIGEgZGVmYXVsdCAqLworCQlUQUlMUV9GT1JFQUNIKGxuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWxuZXQtPnNzdGhyZXNoID0gYXNvYy0+cGVl
cnNfcnduZDsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiAo
U0NUUF9DV05EX01PTklUT1JfRU5BQkxFfFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkpIHsKKwkJ
CQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQsIDAsIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTik7
CisJCQl9CisKKwkJfQorCX0KKwlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJaWYgKGFzb2Mt
PnByZV9vcGVuX3N0cmVhbXMgPiBudG9ocyhpbml0LT5udW1faW5ib3VuZF9zdHJlYW1zKSkgewor
CQl1bnNpZ25lZCBpbnQgbmV3Y250OworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpvdXRzOwor
CQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsICpuc3A7CisJCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisKKwkJLyogYWJhbmRvbiB0aGUgdXBwZXIgc3Ry
ZWFtcyAqLworCQluZXdjbnQgPSBudG9ocyhpbml0LT5udW1faW5ib3VuZF9zdHJlYW1zKTsKKwkJ
VEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNo
aykgeworCQkJaWYgKGNoay0+cmVjLmRhdGEuc2lkID49IG5ld2NudCkgeworCQkJCVRBSUxRX1JF
TU9WRSgmYXNvYy0+c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQkJCWFzb2MtPnNlbmRf
cXVldWVfY250LS07CisJCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNo
dW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJCWFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5z
aWRdLmNodW5rc19vbl9xdWV1ZXMtLTsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJfSBlbHNlIHsK
KwkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5y
ZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJfQorCQkJCWlmIChjaGstPmRhdGEgIT0gTlVMTCkg
eworCQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKKwkJCQkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMLCBzdGNiLAorCQkJCQkgICAg
ICAgICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQlpZiAoY2hrLT5k
YXRhKSB7CisJCQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQkJCWNoay0+ZGF0YSA9
IE5VTEw7CisJCQkJCX0KKwkJCQl9CisJCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJCQl9
CisJCX0KKwkJaWYgKGFzb2MtPnN0cm1vdXQpIHsKKwkJCWZvciAoaSA9IG5ld2NudDsgaSA8IGFz
b2MtPnByZV9vcGVuX3N0cmVhbXM7IGkrKykgeworCQkJCW91dHMgPSAmYXNvYy0+c3RybW91dFtp
XTsKKwkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNw
KSB7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2Nu
dCwgMSk7CisJCQkJCVRBSUxRX1JFTU9WRSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJ
CQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0oc3Rj
YiwgYXNvYywgb3V0cywgc3AsIDEpOworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
U1BFQ0lBTF9TUF9GQUlMLAorCQkJCQkgICAgc3RjYiwgMCwgc3AsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisJCQkJCWlmIChzcC0+ZGF0YSkgeworCQkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsK
KwkJCQkJCXNwLT5kYXRhID0gTlVMTDsKKwkJCQkJfQorCQkJCQlpZiAoc3AtPm5ldCkgeworCQkJ
CQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCQkJc3AtPm5ldCA9IE5VTEw7
CisJCQkJCX0KKwkJCQkJLyogRnJlZSB0aGUgY2h1bmsgKi8KKwkJCQkJc2N0cF9mcmVlX2Ffc3Ry
bW9xKHN0Y2IsIHNwLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQkvKnNhX2lnbm9yZSBGUkVF
RF9NRU1PUlkqLworCQkJCX0KKwkJCQlvdXRzLT5zdGF0ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsK
KwkJCX0KKwkJfQorCQkvKiBjdXQgYmFjayB0aGUgY291bnQgKi8KKwkJYXNvYy0+cHJlX29wZW5f
c3RyZWFtcyA9IG5ld2NudDsKKwl9CisJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJYXNv
Yy0+c3RyZWFtb3V0Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtczsKKwlpZiAoYXNvYy0+c3Ry
bW91dCkgeworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKKwkJ
CWFzb2MtPnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOOworCQl9CisJfQorCS8q
IEVZIC0gbnJfc2FjazogaW5pdGlhbGl6ZSBoaWdoZXN0IHRzbiBpbiBucl9tYXBwaW5nX2FycmF5
ICovCisJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXA7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21hcCgwLCA1LCBhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9TTElERV9SRVNVTFQpOworCX0KKwkvKiBU
aGlzIGlzIHRoZSBuZXh0IG9uZSB3ZSBleHBlY3QgKi8KKwlhc29jLT5zdHJfcmVzZXRfc2VxX2lu
ID0gYXNvYy0+YXNjb25mX3NlcV9pbiArIDE7CisKKwlhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2Vf
dHNuID0gbnRvaGwoaW5pdC0+aW5pdGlhbF90c24pOworCWFzb2MtPnRzbl9sYXN0X2RlbGl2ZXJl
ZCA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuID0gYXNvYy0+YXNjb25mX3NlcV9pbjsKKworCWFzb2Mt
PmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7CisJLyogb3Bl
biB0aGUgcmVxdWVzdGVkIHN0cmVhbXMgKi8KKworCWlmIChhc29jLT5zdHJtaW4gIT0gTlVMTCkg
eworCQkvKiBGcmVlIHRoZSBvbGQgb25lcyAqLworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3Ry
ZWFtaW5jbnQ7IGkrKykgeworCQkJc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0
cm1pbltpXS5pbnF1ZXVlKTsKKwkJCXNjdHBfY2xlYW5fdXBfc3RyZWFtKHN0Y2IsICZhc29jLT5z
dHJtaW5baV0udW5vX2lucXVldWUpOworCQl9CisJCVNDVFBfRlJFRShhc29jLT5zdHJtaW4sIFND
VFBfTV9TVFJNSSk7CisJfQorCWlmIChhc29jLT5tYXhfaW5ib3VuZF9zdHJlYW1zID4gbnRvaHMo
aW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMpKSB7CisJCWFzb2MtPnN0cmVhbWluY250ID0gbnRv
aHMoaW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMpOworCX0gZWxzZSB7CisJCWFzb2MtPnN0cmVh
bWluY250ID0gYXNvYy0+bWF4X2luYm91bmRfc3RyZWFtczsKKwl9CisJU0NUUF9NQUxMT0MoYXNv
Yy0+c3RybWluLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKiwgYXNvYy0+c3RyZWFtaW5jbnQgKgor
CQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9pbiksIFNDVFBfTV9TVFJNSSk7CisJaWYg
KGFzb2MtPnN0cm1pbiA9PSBOVUxMKSB7CisJCS8qIHdlIGRpZG4ndCBnZXQgbWVtb3J5IGZvciB0
aGUgc3RyZWFtcyEgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInByb2Nlc3NfaW5p
dDogY291bGRuJ3QgZ2V0IG1lbW9yeSBmb3IgdGhlIHN0cmVhbXMhXG4iKTsKKwkJcmV0dXJuICgt
MSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1pbmNudDsgaSsrKSB7CisJCWFz
b2MtPnN0cm1pbltpXS5zaWQgPSBpOworCQlhc29jLT5zdHJtaW5baV0ubGFzdF9taWRfZGVsaXZl
cmVkID0gMHhmZmZmZmZmZjsKKwkJVEFJTFFfSU5JVCgmYXNvYy0+c3RybWluW2ldLmlucXVldWUp
OworCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtaW5baV0udW5vX2lucXVldWUpOworCQlhc29jLT5z
dHJtaW5baV0ucGRfYXBpX3N0YXJ0ZWQgPSAwOworCQlhc29jLT5zdHJtaW5baV0uZGVsaXZlcnlf
c3RhcnRlZCA9IDA7CisJfQorCS8qCisJICogbG9hZF9hZGRyZXNzX2Zyb21faW5pdCB3aWxsIHB1
dCB0aGUgYWRkcmVzc2VzIGludG8gdGhlCisJICogYXNzb2NpYXRpb24gd2hlbiB0aGUgQ09PS0lF
IGlzIHByb2Nlc3NlZCBvciB0aGUgSU5JVC1BQ0sgaXMKKwkgKiBwcm9jZXNzZWQuIEJvdGggdHlw
ZXMgb2YgQ09PS0lFJ3MgZXhpc3RpbmcgYW5kIG5ldyBjYWxsIHRoaXMKKwkgKiByb3V0aW5lLiBJ
dCB3aWxsIHJlbW92ZSBhZGRyZXNzZXMgdGhhdCBhcmUgbm8gbG9uZ2VyIGluIHRoZQorCSAqIGFz
c29jaWF0aW9uIChmb3IgdGhlIHJlc3RhcnRpbmcgY2FzZSB3aGVyZSBhZGRyZXNzZXMgYXJlCisJ
ICogcmVtb3ZlZCkuIFVwIGZyb250IHdoZW4gdGhlIElOSVQgYXJyaXZlcyB3ZSB3aWxsIGRpc2Nh
cmQgaXQgaWYgaXQKKwkgKiBpcyBhIHJlc3RhcnQgYW5kIG5ldyBhZGRyZXNzZXMgaGF2ZSBiZWVu
IGFkZGVkLgorCSAqLworCS8qIHNhX2lnbm9yZSBNRU1MRUFLICovCisJcmV0dXJuICgwKTsKK30K
KworLyoKKyAqIElOSVQtQUNLIG1lc3NhZ2UgcHJvY2Vzc2luZy9jb25zdW1wdGlvbiByZXR1cm5z
IHZhbHVlIDwgMCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitzY3RwX3Byb2Nlc3NfaW5pdF9h
Y2soc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCisgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LCBzdHJ1
Y3Qgc2N0cGhkciAqc2gsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5pdF9h
Y2tfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X25vX3VubG9jaywKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZs
b3dpZCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCkKK3sK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwor
CWludCByZXR2YWwsIGFib3J0X2ZsYWc7CisJdWludDMyX3QgaW5pdGFja19saW1pdDsKKwlpbnQg
bmF0X2ZyaWVuZGx5ID0gMDsKKworCS8qIEZpcnN0IHZlcmlmeSB0aGF0IHdlIGhhdmUgbm8gaWxs
ZWdhbCBwYXJhbSdzICovCisJYWJvcnRfZmxhZyA9IDA7CisKKwlvcF9lcnIgPSBzY3RwX2FyZXRo
ZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKG0sCisJCQkJCQkgICAgICAgKG9mZnNldCArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSksCisJCQkJCQkgICAgICAgJmFib3J0X2ZsYWcs
IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNwLCAmbmF0X2ZyaWVuZGx5KTsKKwlpZiAoYWJvcnRf
ZmxhZykgeworCQkvKiBTZW5kIGFuIGFib3J0IGFuZCBub3RpZnkgcGVlciAqLworCQlzY3RwX2Fi
b3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOworCX0K
Kwlhc29jID0gJnN0Y2ItPmFzb2M7CisJYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQgPSAodWludDhf
dCluYXRfZnJpZW5kbHk7CisJLyogcHJvY2VzcyB0aGUgcGVlcidzIHBhcmFtZXRlcnMgaW4gdGhl
IElOSVQtQUNLICovCisJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoKHN0cnVjdCBzY3RwX2lu
aXRfY2h1bmsgKiljcCwgc3RjYik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJcmV0dXJuIChyZXR2
YWwpOworCX0KKwlpbml0YWNrX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNoLmNodW5rX2xl
bmd0aCk7CisJLyogbG9hZCBhbGwgYWRkcmVzc2VzICovCisJaWYgKChyZXR2YWwgPSBzY3RwX2xv
YWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAorCSAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0
cnVjdCBzY3RwX2luaXRfY2h1bmspKSwgaW5pdGFja19saW1pdCwKKwkgICAgc3JjLCBkc3QsIE5V
TEwsIHN0Y2ItPmFzb2MucG9ydCkpKSB7CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiUHJvYmxlbSB3aXRoIGFkZHJlc3MgcGFyYW1ldGVycyIpOworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkJIkxvYWQgYWRkcmVzc2VzIGZyb20gSU5JVCBjYXVz
ZXMgYW4gYWJvcnQgJWRcbiIsCisJCQlyZXR2YWwpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9u
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9
IDE7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBpZiB0aGUgcGVlciBkb2Vzbid0IHN1cHBvcnQg
YXNjb25mLCBmbHVzaCB0aGUgYXNjb25mIHF1ZXVlICovCisJaWYgKGFzb2MtPmFzY29uZl9zdXBw
b3J0ZWQgPT0gMCkgeworCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqcGFyYW0sICpucGFyYW07
CisKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKHBhcmFtLCAmYXNvYy0+YXNjb25mX3F1ZXVlLCBuZXh0
LCBucGFyYW0pIHsKKwkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+YXNjb25mX3F1ZXVlLCBwYXJhbSwg
bmV4dCk7CisJCQlTQ1RQX0ZSRUUocGFyYW0sIFNDVFBfTV9BU0NfQUREUik7CisJCX0KKwl9CisK
KwlzdGNiLT5hc29jLnBlZXJfaG1hY19pZCA9IHNjdHBfbmVnb3RpYXRlX2htYWNpZChzdGNiLT5h
c29jLnBlZXJfaG1hY3MsCisJICAgIHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MpOworCWlmIChvcF9l
cnIpIHsKKwkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKKwkJLyogcXVldWluZyB3
aWxsIHN0ZWFsIGF3YXkgdGhlIG1idWYgY2hhaW4gdG8gdGhlIG91dCBxdWV1ZSAqLworCQlvcF9l
cnIgPSBOVUxMOworCX0KKwkvKiBleHRyYWN0IHRoZSBjb29raWUgYW5kIHF1ZXVlIGl0IHRvICJl
Y2hvIiBpdCBiYWNrLi4uICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9U
SFJFU0hPTERfQ0xFQVIsCisJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
LAorCQkJICAgICAgIDAsCisJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCisJCQkgICAg
ICAgX19MSU5FX18pOworCX0KKwlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwor
CW5ldC0+ZXJyb3JfY291bnQgPSAwOworCisJLyoKKwkgKiBDYW5jZWwgdGhlIElOSVQgdGltZXIs
IFdlIGRvIHRoaXMgZmlyc3QgYmVmb3JlIHF1ZXVlaW5nIHRoZQorCSAqIGNvb2tpZS4gV2UgYWx3
YXlzIGNhbmNlbCBhdCB0aGUgcHJpbWFyeSB0byBhc3N1ZSB0aGF0IHdlIGFyZQorCSAqIGNhbmNl
bGluZyB0aGUgdGltZXIgc3RhcnRlZCBieSB0aGUgSU5JVCB3aGljaCBhbHdheXMgZ29lcyB0byB0
aGUKKwkgKiBwcmltYXJ5LgorCSAqLworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVf
SU5JVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlv
biwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18zKTsKKworCS8qIGNhbGN1bGF0ZSB0
aGUgUlRPICovCisJbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0
LCAmYXNvYy0+dGltZV9lbnRlcmVkLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfUlRUX0ZST01fTk9OX0RBVEEpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAo
c3RjYi0+c2N0cF9lcC0+cmVjdl9jYWxsYmFjaykgeworCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQp
IHsKKwkJCXVpbnQzMl90IGlucXVldWVfYnl0ZXMsIHNiX2ZyZWVfbm93OworCQkJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKworCQkJaW5wID0gc3RjYi0+c2N0cF9lcDsKKwkJCWlucXVldWVfYnl0
ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1
bmtzX29uX291dF9xdWV1ZSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSk7CisJCQlz
Yl9mcmVlX25vdyA9IFNDVFBfU0JfTElNSVRfU05EKHN0Y2ItPnNjdHBfc29ja2V0KSAtIChpbnF1
ZXVlX2J5dGVzICsgc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YpOworCisJCQkvKiBjaGVjayBpZiB0
aGUgYW1vdW50IGZyZWUgaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlciBjcm9zc2VkIHRoZSB0aHJl
c2hvbGQgKi8KKwkJCWlmIChpbnAtPnNlbmRfY2FsbGJhY2sgJiYKKwkJCSAgICAoKChpbnAtPnNl
bmRfc2JfdGhyZXNob2xkID4gMCkgJiYKKwkJCSAgICAgIChzYl9mcmVlX25vdyA+PSBpbnAtPnNl
bmRfc2JfdGhyZXNob2xkKSAmJgorCQkJICAgICAgKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9x
dWV1ZSA8PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpKSB8fAor
CQkJICAgICAoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkpIHsKKwkJCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJCQlpbnAtPnNlbmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIHNiX2ZyZWVfbm93KTsK
KwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCXJldHZhbCA9IHNjdHBf
c2VuZF9jb29raWVfZWNobyhtLCBvZmZzZXQsIHN0Y2IsIG5ldCk7CisJaWYgKHJldHZhbCA8IDAp
IHsKKwkJLyoKKwkJICogTm8gY29va2llLCB3ZSBwcm9iYWJseSBzaG91bGQgc2VuZCBhIG9wIGVy
cm9yLiBCdXQgaW4gYW55CisJCSAqIGNhc2UgaWYgdGhlcmUgaXMgbm8gY29va2llIGluIHRoZSBJ
TklULUFDSywgd2UgY2FuCisJCSAqIGFiYW5kb24gdGhlIHBlZXIsIGl0cyBicm9rZS4KKwkJICov
CisJCWlmIChyZXR2YWwgPT0gLTMpIHsKKwkJCXVpbnQxNl90IGxlbjsKKworCQkJbGVuID0gKHVp
bnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfbWlzc2luZ19wYXJhbSkgKyBzaXplb2Yo
dWludDE2X3QpKTsKKwkJCS8qIFdlIGFib3J0IHdpdGggYW4gZXJyb3Igb2YgbWlzc2luZyBtYW5k
YXRvcnkgcGFyYW0gKi8KKwkJCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4sIDAs
IE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJCXN0
cnVjdCBzY3RwX2Vycm9yX21pc3NpbmdfcGFyYW0gKmNhdXNlOworCisJCQkJU0NUUF9CVUZfTEVO
KG9wX2VycikgPSBsZW47CisJCQkJY2F1c2UgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZXJy
b3JfbWlzc2luZ19wYXJhbSAqKTsKKwkJCQkvKiBTdWJ0cmFjdCB0aGUgcmVzZXJ2ZWQgcGFyYW0g
Ki8KKwkJCQljYXVzZS0+Y2F1c2UuY29kZSA9IGh0b25zKFNDVFBfQ0FVU0VfTUlTU0lOR19QQVJB
TSk7CisJCQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKGxlbik7CisJCQkJY2F1c2UtPm51
bV9taXNzaW5nX3BhcmFtcyA9IGh0b25sKDEpOworCQkJCWNhdXNlLT50eXBlWzBdID0gaHRvbnMo
U0NUUF9TVEFURV9DT09LSUUpOworCQkJfQorCQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNi
LT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJCQkgICAgICAgICAgICAgICAgICAgICAgIHNy
YywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJICAgICAgICAg
ICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCQkqYWJvcnRfbm9fdW5sb2NrID0g
MTsKKwkJfQorCQlyZXR1cm4gKHJldHZhbCk7CisJfQorCisJcmV0dXJuICgwKTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfaGFuZGxlX2hlYXJ0YmVhdF9hY2soc3RydWN0IHNjdHBfaGVhcnRiZWF0
X2NodW5rICpjcCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCkKK3sKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpyX25ldCwgKmZfbmV0OworCXN0cnVjdCB0aW1ldmFsIHR2OworCWludCByZXFfcHJpbSA9IDA7
CisJdWludDE2X3Qgb2xkX2Vycm9yX2NvdW50ZXI7CisKKwlpZiAobnRvaHMoY3AtPmNoLmNodW5r
X2xlbmd0aCkgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuaykpIHsKKwkJLyog
SW52YWxpZCBsZW5ndGggKi8KKwkJcmV0dXJuOworCX0KKworCW1lbXNldCgmc3RvcmUsIDAsIHNp
emVvZihzdG9yZSkpOworCXN3aXRjaCAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGNwLT5oZWFydGJlYXQuaGJf
aW5mby5hZGRyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJc3RvcmUu
c2luLnNpbl9mYW1pbHkgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9mYW1pbHk7CisjaWZk
ZWYgSEFWRV9TSU5fTEVOCisJCQlzdG9yZS5zaW4uc2luX2xlbiA9IGNwLT5oZWFydGJlYXQuaGJf
aW5mby5hZGRyX2xlbjsKKyNlbmRpZgorCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBv
cnQ7CisJCQltZW1jcHkoJnN0b3JlLnNpbi5zaW5fYWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZv
LmFkZHJlc3MsCisJCQkgICAgICAgc2l6ZW9mKHN0b3JlLnNpbi5zaW5fYWRkcikpOworCQl9IGVs
c2UgeworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCQlpZiAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID09IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworCQkJc3RvcmUuc2luNi5zaW42X2ZhbWlseSA9
IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWlseTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJCQlzdG9yZS5zaW42LnNpbjZfbGVuID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVu
OworI2VuZGlmCisJCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJbWVt
Y3B5KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3Ms
IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybjsKKwkJfQor
CQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NP
Tk46CisJCWlmIChjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPT0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKSkgeworCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gY3AtPmhl
YXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5OworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJCQlz
dG9yZS5zY29ubi5zY29ubl9sZW4gPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW47Cisj
ZW5kaWYKKwkJCXN0b3JlLnNjb25uLnNjb25uX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCW1lbWNw
eSgmc3RvcmUuc2Nvbm4uc2Nvbm5fYWRkciwgY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3Ms
IHNpemVvZih2b2lkICopKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybjsKKwkJfQorCQlicmVhazsK
KyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcl9uZXQgPSBzY3RwX2ZpbmRuZXQo
c3RjYiwgJnN0b3JlLnNhKTsKKwlpZiAocl9uZXQgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQxLCAiSHVoPyBJIGNhbid0IGZpbmQgdGhlIGFkZHJlc3MgSSBzZW50IGl0IHRv
LCBkaXNjYXJkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHJfbmV0ICYmIChyX25ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpICYmCisJICAgIChyX25ldC0+aGVhcnRi
ZWF0X3JhbmRvbTEgPT0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTEpICYmCisJ
ICAgIChyX25ldC0+aGVhcnRiZWF0X3JhbmRvbTIgPT0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLnJh
bmRvbV92YWx1ZTIpKSB7CisJCS8qCisJCSAqIElmIHRoZSBpdHMgYSBIQiBhbmQgaXQncyByYW5k
b20gdmFsdWUgaXMgY29ycmVjdCB3aGVuIGNhbgorCQkgKiBjb25maXJtIHRoZSBkZXN0aW5hdGlv
bi4KKwkJICovCisJCXJfbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7
CisJCWlmIChyX25ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRVFfUFJJTUFSWSkgeworCQkJ
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gcl9uZXQ7CisJCQlyX25ldC0+ZGVzdF9z
dGF0ZSAmPSB+U0NUUF9BRERSX1JFUV9QUklNQVJZOworCQkJZl9uZXQgPSBUQUlMUV9GSVJTVCgm
c3RjYi0+YXNvYy5uZXRzKTsKKwkJCWlmIChmX25ldCAhPSByX25ldCkgeworCQkJCS8qIGZpcnN0
IG9uZSBvbiB0aGUgbGlzdCBpcyBOT1QgdGhlIHByaW1hcnkKKwkJCQkgKiBzY3RwX2NtcGFkZHIo
KSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IGlmCisJCQkJICogdGhlIHByaW1hcnkgaXMgdGhlIGZp
cnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0CisJCQkJICogc28uCisJCQkJICovCisJCQkJVEFJTFFf
UkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIHJfbmV0LCBzY3RwX25leHQpOworCQkJCVRBSUxRX0lO
U0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIHJfbmV0LCBzY3RwX25leHQpOworCQkJfQorCQkJ
cmVxX3ByaW0gPSAxOworCQl9CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZB
Q0VfQ09ORklSTUVELAorCQkgICAgc3RjYiwgMCwgKHZvaWQgKilyX25ldCwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCSAgICAgICAgICAgICAgICByX25ldCwgU0NUUF9GUk9NX1ND
VFBfSU5QVVQgKyBTQ1RQX0xPQ180KTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCByX25ldCk7CisJfQorCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5H
KSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJICAgICAgIHN0
Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIFND
VFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJICAgICAgIF9fTElORV9fKTsKKwl9CisJc3RjYi0+YXNv
Yy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwlvbGRfZXJyb3JfY291bnRlciA9IHJfbmV0LT5l
cnJvcl9jb3VudDsKKwlyX25ldC0+ZXJyb3JfY291bnQgPSAwOworCXJfbmV0LT5oYl9yZXNwb25k
ZWQgPSAxOworCXR2LnR2X3NlYyA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzE7
CisJdHYudHZfdXNlYyA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3ZhbHVlXzI7CisJLyog
Tm93IGxldHMgZG8gYSBSVE8gd2l0aCB0aGlzICovCisJcl9uZXQtPlJUTyA9IHNjdHBfY2FsY3Vs
YXRlX3J0byhzdGNiLCAmc3RjYi0+YXNvYywgcl9uZXQsICZ0diwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCWlmICghKHJfbmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKKwkJcl9uZXQtPmRlc3Rfc3RhdGUg
fD0gU0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lO
VEVSRkFDRV9VUCwgc3RjYiwKKwkJCQkwLCAodm9pZCAqKXJfbmV0LCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCX0KKwlpZiAocl9uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJcl9u
ZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJc3RjYi0+YXNvYy5jY19mdW5jdGlv
bnMuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmKHN0Y2IsIG5ldCk7CisJfQorCWlmIChvbGRfZXJy
b3JfY291bnRlciA+IDApIHsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFS
VEJFQVQsIHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICBzdGNiLCByX25ldCwgU0NU
UF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ181KTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCByX25ldCk7CisJfQor
CWlmIChyX25ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJaWYgKHN0
Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5hdGUsIHByaW1h
cnkgaXMgZ29vZCAqLworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJu
YXRlKTsKKwkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJfQorCX0KKwkvKiBNb2Jp
bGl0eSBhZGFwdGF0aW9uICovCisJaWYgKHJlcV9wcmltKSB7CisJCWlmICgoc2N0cF9pc19tb2Jp
bGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKKwkJICAgIHNjdHBfaXNfbW9iaWxpdHlf
ZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSAmJgorCQkgICAgc2N0cF9pc19tb2JpbGl0
eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpKSB7CisKKwkJCXNjdHBfdGltZXJfc3Rv
cChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAorCQkJICAgICAgICAgICAgICAgIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
SU5QVVQgKyBTQ1RQX0xPQ182KTsKKwkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24o
c3RjYi0+c2N0cF9lcCwKKwkJCQkJU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKKwkJCQlz
Y3RwX2Fzc29jX2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsCisJCQkJCXN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbik7CisJCQl9CisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsCisJCQkJCVNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKKwkJCQlzY3RwX21v
dmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsCisJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5
KTsKKwkJCX0KKwkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwK
KwkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOworCQl9CisJfQorfQorCitzdGF0aWMg
aW50CitzY3RwX2hhbmRsZV9uYXRfY29sbGlkaW5nX3N0YXRlKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YikKK3sKKwkvKiByZXR1cm4gMCBtZWFucyB3ZSB3YW50IHlvdSB0byBwcm9jZWVkIHdpdGggdGhl
IGFib3J0CisJICogbm9uLXplcm8gbWVhbnMgbm8gYWJvcnQgcHJvY2Vzc2luZworCSovCisJc3Ry
dWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKKworCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFz
b2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURSgm
c3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCX0KKwlpZiAoU0NUUF9HRVRf
U1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKKwkJLyogZ2Vu
ZXJhdGUgYSBuZXcgdnRhZyBhbmQgc2VuZCBpbml0ICovCisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNj
dHBfYXNvY3MpOworCQlzdGNiLT5hc29jLm15X3Z0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhzdGNi
LT5zY3RwX2VwLCBzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgMSk7CisJ
CWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0Mo
c3RjYi0+YXNvYy5teV92dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07CisJCS8q
IHB1dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2YgYXNzb2MncyBmb3IgdGhl
IHN5c3RlbSAqLworCQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNjdHBfYXNvY3MpOwor
CQlzY3RwX3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCXJldHVybiAoMSk7CisJfQorCWlm
IChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VE
KSB7CisJCS8qIHRyZWF0IGxpa2UgYSBjYXNlIHdoZXJlIHRoZSBjb29raWUgZXhwaXJlZCBpLmUu
OgorCQkqIC0gZHVtcCBjdXJyZW50IGNvb2tpZS4KKwkJKiAtIGdlbmVyYXRlIGEgbmV3IHZ0YWcu
CisJCSogLSByZXNlbmQgaW5pdC4KKwkJKi8KKwkJLyogZ2VuZXJhdGUgYSBuZXcgdnRhZyBhbmQg
c2VuZCBpbml0ICovCisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOworCQlzdGNiLT5h
c29jLnN0YXRlICY9IH5TQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQ7CisJCXN0Y2ItPmFzb2Muc3Rh
dGUgfD0gU0NUUF9TVEFURV9DT09LSUVfV0FJVDsKKwkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGlt
ZXJzKHN0Y2IpOworCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RjYiwgJnN0Y2ItPmFzb2MpOwor
CQlzdGNiLT5hc29jLm15X3Z0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhzdGNiLT5zY3RwX2VwLCBz
dGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgIDEpOworCQloZWFkID0gJlND
VFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpW1NDVFBfUENCSEFTSF9BU09DKHN0Y2ItPmFzb2Mu
bXlfdnRhZywgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOworCQkvKiBwdXQgaXQgaW4g
dGhlIGJ1Y2tldCBpbiB0aGUgdnRhZyBoYXNoIG9mIGFzc29jJ3MgZm9yIHRoZSBzeXN0ZW0gKi8K
KwkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fzb2NzKTsKKwkJc2N0cF9zZW5k
X2luaXRpYXRlKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCVND
VFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJLyogcmV0
dXJuIDAgbWVhbnMgd2Ugd2FudCB5b3UgdG8gcHJvY2VlZCB3aXRoIHRoZSBhYm9ydAorCSAqIG5v
bi16ZXJvIG1lYW5zIG5vIGFib3J0IHByb2Nlc3NpbmcKKwkgKi8KKwlpZiAoc3RjYi0+YXNvYy5h
dXRoX3N1cHBvcnRlZCA9PSAwKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3Rw
X2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZTogUGVlciBkb2VzIG5vdCBzdXBwb3J0IEFVVEgsIGNh
bm5vdCBzZW5kIGFuIGFzY29uZlxuIik7CisJCXJldHVybiAoMCk7CisJfQorCXNjdHBfYXNjb25m
X3NlbmRfbmF0X3N0YXRlX3VwZGF0ZShzdGNiLCBuZXQpOworCXJldHVybiAoMSk7Cit9CisKKwor
LyogUmV0dXJucyAxIGlmIHRoZSBzdGNiIHdhcyBhYm9ydGVkLCAwIG90aGVyd2lzZSAqLworc3Rh
dGljIGludAorc2N0cF9oYW5kbGVfYWJvcnQoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKmFib3J0
LAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQorewor
I2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQor
CXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisJdWludDE2X3QgbGVuOworCXVpbnQxNl90IGVy
cm9yOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInNjdHBfaGFuZGxlX2Fib3J0OiBo
YW5kbGluZyBBQk9SVFxuIik7CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKwor
CWxlbiA9IG50b2hzKGFib3J0LT5jaC5jaHVua19sZW5ndGgpOworCWlmIChsZW4gPj0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2NodW5raGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkp
IHsKKwkJLyogTmVlZCB0byBjaGVjayB0aGUgY2F1c2UgY29kZXMgZm9yIG91cgorCQkgKiB0d28g
bWFnaWMgbmF0IGFib3J0cyB3aGljaCBkb24ndCBraWxsIHRoZSBhc3NvYworCQkgKiBuZWNlc3Nh
cmlseS4KKwkJICovCisJCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICpjYXVzZTsKKworCQljYXVz
ZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKShhYm9ydCArIDEpOworCQllcnJvciA9IG50
b2hzKGNhdXNlLT5jb2RlKTsKKwkJaWYgKGVycm9yID09IFNDVFBfQ0FVU0VfTkFUX0NPTExJRElO
R19TVEFURSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIENvbGxp
ZGluZyBzdGF0ZSBhYm9ydCBmbGFnczoleFxuIiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFib3J0LT5jaC5jaHVua19mbGFncyk7CisJCQlpZiAoc2N0cF9oYW5kbGVfbmF0X2NvbGxp
ZGluZ19zdGF0ZShzdGNiKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0gZWxzZSBpZiAo
ZXJyb3IgPT0gU0NUUF9DQVVTRV9OQVRfTUlTU0lOR19TVEFURSkgeworCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3RhdGUgYWJvcnQgZmxhZ3M6JXhcbiIs
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydC0+Y2guY2h1bmtfZmxhZ3MpOwor
CQkJaWYgKHNjdHBfaGFuZGxlX25hdF9taXNzaW5nX3N0YXRlKHN0Y2IsIG5ldCkpIHsKKwkJCQly
ZXR1cm4gKDApOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZXJyb3IgPSAwOworCX0KKwkvKiBz
dG9wIGFueSByZWNlaXZlIHRpbWVycyAqLworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfUkVDViwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzcpOworCS8qIG5vdGlmeSB1c2VyIG9mIHRoZSBh
Ym9ydCBhbmQgY2xlYW4gdXAuLi4gKi8KKwlzY3RwX2Fib3J0X25vdGlmaWNhdGlvbihzdGNiLCAx
LCBlcnJvciwgYWJvcnQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJLyogZnJlZSB0aGUgdGNiICov
CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCWlmICgoU0NUUF9H
RVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKKwkgICAgKFNDVFBf
R0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkg
eworCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJfQorI2lmZGVm
IFNDVFBfQVNPQ0xPR19PRl9UU05TCisJc2N0cF9wcmludF9vdXRfdHJhY2tfbG9nKHN0Y2IpOwor
I2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlTQ1RQ
X1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0b21pY19zdWJ0
cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCXN0Y2ItPmFzb2Muc3Rh
dGUgfD0gU0NUUF9TVEFURV9XQVNfQUJPUlRFRDsKKwkodm9pZClzY3RwX2ZyZWVfYXNzb2Moc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOUFVUICsgU0NUUF9MT0NfOCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNl
bmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRsZV9hYm9ydDogZmlu
aXNoZWRcbiIpOworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3N0YXJ0X25l
dF90aW1lcnMoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXVpbnQzMl90IGNudF9oYl9zZW50
OworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCWNudF9oYl9zZW50ID0gMDsKKwlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCS8qIEZvciBlYWNo
IG5ldHdvcmsgc3RhcnQ6CisJCSAqIDEpIEEgcG10dSB0aW1lci4KKwkJICogMikgQSBIQiB0aW1l
cgorCQkgKiAzKSBJZiB0aGUgZGVzdCBpbiB1bmNvbmZpcm1lZCBzZW5kCisJCSAqICAgIGEgaGIg
YXMgd2VsbCBpZiB1bmRlciBtYXhfaGJfYnVyc3QgaGF2ZQorCQkgKiAgICBiZWVuIHNlbnQuCisJ
CSAqLworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJaWYgKChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpICYmCisJCSAgICAoY250X2hiX3NlbnQg
PCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJfbWF4YnVyc3QpKSkgeworCQkJc2N0cF9zZW5kX2hi
KHN0Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCWNudF9oYl9zZW50Kys7CisJCX0K
Kwl9CisJaWYgKGNudF9oYl9zZW50KSB7CisJCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJCQkJICBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0ssCisJCQkJICBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfc2h1
dGRvd24oc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKmNwLAorICAgIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X2ZsYWcpCit7CisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJaW50IHNvbWVfb25fc3RyZWFtd2hlZWw7CisJ
aW50IG9sZF9zdGF0ZTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX3NodXRkb3duOiBoYW5kbGluZyBTSFVU
RE9XTlxuIik7CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCWFzb2MgPSAmc3RjYi0+
YXNvYzsKKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpKSB7CisJCXJldHVybjsKKwl9CisJaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgp
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuaykpIHsKKwkJLyogU2h1dGRvd24g
Tk9UIHRoZSBleHBlY3RlZCBzaXplICovCisJCXJldHVybjsKKwl9CisJb2xkX3N0YXRlID0gU0NU
UF9HRVRfU1RBVEUoYXNvYyk7CisJc2N0cF91cGRhdGVfYWNrZWQoc3RjYiwgY3AsIGFib3J0X2Zs
YWcpOworCWlmICgqYWJvcnRfZmxhZykgeworCQlyZXR1cm47CisJfQorCWlmIChhc29jLT5jb250
cm9sX3BkYXBpKSB7CisJCS8qIFdpdGggYSBub3JtYWwgc2h1dGRvd24KKwkJICogd2UgYXNzdW1l
IHRoZSBlbmQgb2YgbGFzdCByZWNvcmQuCisJCSAqLworCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3Rj
Yi0+c2N0cF9lcCk7CisJCWlmIChhc29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EpIHsKKwkJ
CXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKKworCQkJc3RybSA9ICZhc29jLT5zdHJtaW5b
YXNvYy0+Y29udHJvbF9wZGFwaS0+c2luZm9fc3RyZWFtXTsKKwkJCWlmIChhc29jLT5jb250cm9s
X3BkYXBpLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKKwkJCQkvKiBVbm9yZGVy
ZWQgKi8KKwkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBhc29jLT5jb250cm9s
X3BkYXBpLCBuZXh0X2luc3RybSk7CisJCQkJYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9x
ID0gMDsKKwkJCX0gZWxzZSBpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xID09IFND
VFBfT05fT1JERVJFRCkgeworCQkJCS8qIE9yZGVyZWQgKi8KKwkJCQlUQUlMUV9SRU1PVkUoJnN0
cm0tPmlucXVldWUsIGFzb2MtPmNvbnRyb2xfcGRhcGksIG5leHRfaW5zdHJtKTsKKwkJCQlhc29j
LT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EgPSAwOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0g
ZWxzZSB7CisJCQkJcGFuaWMoIlVua25vd24gc3RhdGUgb24gY3RybDolcCBvbl9zdHJtX3E6JWQi
LAorCQkJCSAgICAgIGFzb2MtPmNvbnRyb2xfcGRhcGksCisJCQkJICAgICAgYXNvYy0+Y29udHJv
bF9wZGFwaS0+b25fc3RybV9xKTsKKyNlbmRpZgorCQkJfQorCQl9CisJCWFzb2MtPmNvbnRyb2xf
cGRhcGktPmVuZF9hZGRlZCA9IDE7CisJCWFzb2MtPmNvbnRyb2xfcGRhcGktPnBkYXBpX2Fib3J0
ZWQgPSAxOworCQlhc29jLT5jb250cm9sX3BkYXBpID0gTlVMTDsKKwkJU0NUUF9JTlBfUkVBRF9V
TkxPQ0soc3RjYi0+c2N0cF9lcCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7
CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENCX0xPQ0so
c3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJ
aWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCS8q
IGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCisJCQlTQ1RQX1NPQ0tF
VF9VTkxPQ0soc28sIDEpOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJaWYgKHN0Y2ItPnNj
dHBfc29ja2V0KSB7CisJCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3Rw
X3NvY2tldCk7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCX0K
KwkvKiBnb3RvIFNIVVRET1dOX1JFQ0VJVkVEIHN0YXRlIHRvIGJsb2NrIG5ldyByZXF1ZXN0cyAq
LworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2Mp
ICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJCSAgICAoU0NUUF9HRVRfU1RB
VEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgJiYKKwkJICAgIChTQ1RQ
X0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpKSB7CisJCQlTQ1RQ
X1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKTsKKwkJCVNDVFBf
Q0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCS8q
IG5vdGlmeSB1cHBlciBsYXllciB0aGF0IHBlZXIgaGFzIGluaXRpYXRlZCBhIHNodXRkb3duICov
CisJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfUEVFUl9TSFVURE9XTiwgc3RjYiwgMCwg
TlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCQkJLyogcmVzZXQgdGltZSAqLworCQkJKHZv
aWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJlZCk7CisJCX0KKwl9CisJ
aWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgewor
CQkvKgorCQkgKiBzdG9wIHRoZSBzaHV0ZG93biB0aW1lciwgc2luY2Ugd2UgV0lMTCBtb3ZlIHRv
CisJCSAqIFNIVVRET1dOLUFDSy1TRU5ULgorCQkgKi8KKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJICAgICAgICAgICAg
ICAgIG5ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ185KTsKKwl9CisJLyogTm93
IGlzIHRoZXJlIHVuc2VudCBkYXRhIG9uIGEgc3RyZWFtIHNvbWV3aGVyZT8gKi8KKwlzb21lX29u
X3N0cmVhbXdoZWVsID0gc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCisJaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgfHwKKwkg
ICAgIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAorCSAgICBzb21lX29uX3N0cmVh
bXdoZWVsKSB7CisJCS8qIEJ5IHJldHVybmluZyB3ZSB3aWxsIHB1c2ggbW9yZSBkYXRhIG91dCAq
LworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJLyogbm8gb3V0c3RhbmRpbmcgZGF0YSB0byBzZW5k
LCBzbyBtb3ZlIG9uLi4uICovCisJCS8qIHNlbmQgU0hVVERPV04tQUNLICovCisJCS8qIG1vdmUg
dG8gU0hVVERPV04tQUNLLVNFTlQgc3RhdGUgKi8KKwkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29j
KSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCVNDVFBfU1RBVF9ERUNSX0dBVUdF
MzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJfQorCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFND
VFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSAh
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSB7CisJCQlTQ1RQX1NFVF9TVEFURShhc29j
LCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKKwkJCXNjdHBfc3RvcF90aW1lcnNfZm9y
X3NodXRkb3duKHN0Y2IpOworCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQpOwor
CQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssCisJCQkgICAg
ICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCX0gZWxzZSBpZiAob2xk
X3N0YXRlID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsKKwkJCXNjdHBfc2VuZF9z
aHV0ZG93bl9hY2soc3RjYiwgbmV0KTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBf
aGFuZGxlX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmNwIFND
VFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJ
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc3RydWN0IHNvY2tldCAqc287CisKKwlz
byA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworI2VuZGlmCisJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX3NodXRkb3duX2FjazogaGFuZGxpbmcgU0hVVERP
V04gQUNLXG4iKTsKKwlpZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlhc29jID0gJnN0
Y2ItPmFzb2M7CisJLyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gYXNzb2NpYXRpb24gc3RhdGUgKi8K
KwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8
CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQp
KSB7CisJCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQUNLLi4uIGRvIE9PVEIgaGFuZGxpbmcuLi4g
Ki8KKwkJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMSk7CisJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkgICAgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7CisJCS8qIHVuZXhwZWN0
ZWQgU0hVVERPV04tQUNLLi4uIHNvIGlnbm9yZS4uLiAqLworCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCXJldHVybjsKKwl9CisJaWYgKGFzb2MtPmNvbnRyb2xfcGRhcGkpIHsKKwkJLyogV2l0
aCBhIG5vcm1hbCBzaHV0ZG93bgorCQkgKiB3ZSBhc3N1bWUgdGhlIGVuZCBvZiBsYXN0IHJlY29y
ZC4KKwkJICovCisJCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJYXNvYy0+
Y29udHJvbF9wZGFwaS0+ZW5kX2FkZGVkID0gMTsKKwkJYXNvYy0+Y29udHJvbF9wZGFwaS0+cGRh
cGlfYWJvcnRlZCA9IDE7CisJCWFzb2MtPmNvbnRyb2xfcGRhcGkgPSBOVUxMOworCQlTQ1RQX0lO
UF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdl
cmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1cm47
CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3Rw
X3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwl9CisjaWZk
ZWYgSU5WQVJJQU5UUworCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpIHx8CisJ
ICAgICFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgfHwKKwkgICAgc2N0cF9pc190aGVy
ZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpKSB7CisJCXBhbmljKCJRdWV1
ZXMgYXJlIG5vdCBlbXB0eSB3aGVuIGhhbmRsaW5nIFNIVVRET1dOLUFDSyIpOworCX0KKyNlbmRp
ZgorCS8qIHN0b3AgdGhlIHRpbWVyICovCisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQ
RV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEwKTsKKwkvKiBzZW5kIFNIVVRET1dOLUNP
TVBMRVRFICovCisJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMCk7CisJ
Lyogbm90aWZ5IHVwcGVyIGxheWVyIHByb3RvY29sICovCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0
KSB7CisJCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0lOX1RDUFBPT0wpKSB7CisJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0g
MDsKKwkJfQorCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNTT0NfRE9XTiwgc3RjYiwg
MCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjMyKHNjdHBzX3NodXRkb3duKTsKKwkvKiBmcmVlIHRoZSBUQ0IgYnV0IGZpcnN0IHNhdmUgb2Zm
IHRoZSBlcCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQorCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OworI2VuZGlmCisJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCisJCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9D
XzExKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX3Byb2Nlc3NfdW5yZWNvZ19jaHVuayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVp
bnQ4X3QgY2h1bmtfdHlwZSwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3dpdGNo
IChjaHVua190eXBlKSB7CisJY2FzZSBTQ1RQX0FTQ09ORl9BQ0s6CisJY2FzZSBTQ1RQX0FTQ09O
RjoKKwkJc2N0cF9hc2NvbmZfY2xlYW51cChzdGNiLCBuZXQpOworCQlicmVhazsKKwljYXNlIFND
VFBfSUZPUldBUkRfQ1VNX1RTTjoKKwljYXNlIFNDVFBfRk9SV0FSRF9DVU1fVFNOOgorCQlzdGNi
LT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQkJIlBlZXIgZG9lcyBub3Qgc3VwcG9ydCBjaHVuayB0
eXBlICVkICgweCV4KS5cbiIsCisJCQljaHVua190eXBlLCBjaHVua190eXBlKTsKKwkJYnJlYWs7
CisJfQorfQorCisvKgorICogU2tpcCBwYXN0IHRoZSBwYXJhbSBoZWFkZXIgYW5kIHRoZW4gd2Ug
d2lsbCBmaW5kIHRoZSBwYXJhbSB0aGF0IGNhdXNlZCB0aGUKKyAqIHByb2JsZW0uICBUaGVyZSBh
cmUgYSBudW1iZXIgb2YgcGFyYW0ncyBpbiBhIEFTQ09ORiBPUiB0aGUgcHJzY3RwIHBhcmFtCisg
KiB0aGVzZSB3aWxsIHR1cm4gb2Ygc3BlY2lmaWMgZmVhdHVyZXMuCisgKiBYWFg6IElzIHRoaXMg
dGhlIHJpZ2h0IHRoaW5nIHRvIGRvPworICovCitzdGF0aWMgdm9pZAorc2N0cF9wcm9jZXNzX3Vu
cmVjb2dfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBwYXJhbWV0ZXJfdHlw
ZSkKK3sKKwlzd2l0Y2ggKHBhcmFtZXRlcl90eXBlKSB7CisJCS8qIHByLXNjdHAgZHJhZnQgKi8K
KwljYXNlIFNDVFBfUFJTQ1RQX1NVUFBPUlRFRDoKKwkJc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9y
dGVkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQ6CisJCWJy
ZWFrOworCQkvKiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAgKi8KKwljYXNlIFNDVFBfSEFT
X05BVF9TVVBQT1JUOgorCSAgICAgICAgc3RjYi0+YXNvYy5wZWVyX3N1cHBvcnRzX25hdCA9IDA7
CisJICAgICAgICBicmVhazsKKwljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6CisJY2FzZSBTQ1RQ
X0RFTF9JUF9BRERSRVNTOgorCWNhc2UgU0NUUF9TRVRfUFJJTV9BRERSOgorCQlzdGNiLT5hc29j
LmFzY29uZl9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKwljYXNlIFNDVFBfU1VDQ0VTU19SRVBP
UlQ6CisJY2FzZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMiwgIkh1aCwgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBzdWNjZXNzPyBvciBlcnJvciBj
YXVzZT9cbiIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQkJIlR1cm5pbmcgb2Zm
IEFTQ09ORiB0byB0aGlzIHN0cmFuZ2UgcGVlclxuIik7CisJCXN0Y2ItPmFzb2MuYXNjb25mX3N1
cHBvcnRlZCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDIsCisJCQkiUGVlciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtIHR5cGUgJWQgKDB4JXgpPz9c
biIsCisJCQlwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyX3R5cGUpOworCQlicmVhazsKKwl9Cit9
CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX2Vycm9yKHN0cnVjdCBzY3RwX2NodW5raGRyICpj
aCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0LCB1aW50MzJfdCBsaW1pdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAq
Y2F1c2U7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3QgcmVtYWlu
aW5nX2xlbmd0aCwgYWRqdXN0OworCXVpbnQxNl90IGNvZGUsIGNhdXNlX2NvZGUsIGNhdXNlX2xl
bmd0aDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisJLyogcGFyc2UgdGhyb3VnaCBh
bGwgb2YgdGhlIGVycm9ycyBhbmQgcHJvY2VzcyAqLworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlj
YXVzZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKSgoY2FkZHJfdCljaCArCisJICAgIHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCXJlbWFpbmluZ19sZW5ndGggPSBudG9ocyhj
aC0+Y2h1bmtfbGVuZ3RoKTsKKwlpZiAocmVtYWluaW5nX2xlbmd0aCA+IGxpbWl0KSB7CisJCXJl
bWFpbmluZ19sZW5ndGggPSBsaW1pdDsKKwl9CisJaWYgKHJlbWFpbmluZ19sZW5ndGggPj0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgeworCQlyZW1haW5pbmdfbGVuZ3RoIC09IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJfSBlbHNlIHsKKwkJcmVtYWluaW5nX2xlbmd0aCA9
IDA7CisJfQorCWNvZGUgPSAwOworCXdoaWxlIChyZW1haW5pbmdfbGVuZ3RoID49IHNpemVvZihz
dHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkpIHsKKwkJLyogUHJvY2VzcyBhbiBFcnJvciBDYXVzZSAq
LworCQljYXVzZV9jb2RlID0gbnRvaHMoY2F1c2UtPmNvZGUpOworCQljYXVzZV9sZW5ndGggPSBu
dG9ocyhjYXVzZS0+bGVuZ3RoKTsKKwkJaWYgKChjYXVzZV9sZW5ndGggPiByZW1haW5pbmdfbGVu
Z3RoKSB8fCAoY2F1c2VfbGVuZ3RoID09IDApKSB7CisJCQkvKiBJbnZhbGlkIGNhdXNlIGxlbmd0
aCwgcG9zc2libHkgZHVlIHRvIHRydW5jYXRpb24uICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLCAiQm9ndXMgbGVuZ3RoIGluIGNhdXNlIC0gYnl0ZXMgbGVmdDogJXUgY2F1c2UgbGVu
Z3RoOiAldVxuIiwKKwkJCQlyZW1haW5pbmdfbGVuZ3RoLCBjYXVzZV9sZW5ndGgpOworCQkJcmV0
dXJuICgwKTsKKwkJfQorCQlpZiAoY29kZSA9PSAwKSB7CisJCQkvKiByZXBvcnQgdGhlIGZpcnN0
IGVycm9yIGNhdXNlICovCisJCQljb2RlID0gY2F1c2VfY29kZTsKKwkJfQorCQlzd2l0Y2ggKGNh
dXNlX2NvZGUpIHsKKwkJY2FzZSBTQ1RQX0NBVVNFX0lOVkFMSURfU1RSRUFNOgorCQljYXNlIFND
VFBfQ0FVU0VfTUlTU0lOR19QQVJBTToKKwkJY2FzZSBTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU06
CisJCWNhc2UgU0NUUF9DQVVTRV9OT19VU0VSX0RBVEE6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLCAiU29mdHdhcmUgZXJyb3Igd2UgZ290IGEgJXUgYmFjaz8gV2UgaGF2ZSBhIGJ1ZyA6
LyAob3IgZG8gdGhleT8pXG4iLAorCQkJCWNhdXNlX2NvZGUpOworCQkJYnJlYWs7CisJCWNhc2Ug
U0NUUF9DQVVTRV9OQVRfQ09MTElESU5HX1NUQVRFOgorCQkgICAgICAgIFNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDIsICJSZWNlaXZlZCBDb2xsaWRpbmcgc3RhdGUgYWJvcnQgZmxhZ3M6ICV4XG4i
LAorCQkJCWNoLT5jaHVua19mbGFncyk7CisJCQlpZiAoc2N0cF9oYW5kbGVfbmF0X2NvbGxpZGlu
Z19zdGF0ZShzdGNiKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX0NBVVNFX05BVF9NSVNTSU5HX1NUQVRFOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3RhdGUgYWJvcnQgZmxhZ3M6ICV4XG4iLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNodW5rX2ZsYWdzKTsKKwkJCWlmIChzY3RwX2hh
bmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdGNiLCBuZXQpKSB7CisJCQkJcmV0dXJuICgwKTsKKwkJ
CX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfU1RBTEVfQ09PS0lFOgorCQkJLyoKKwkJ
CSAqIFdlIG9ubHkgYWN0IGlmIHdlIGhhdmUgZWNob2VkIGEgY29va2llIGFuZCBhcmUKKwkJCSAq
IHdhaXRpbmcuCisJCQkgKi8KKwkJCWlmICgoY2F1c2VfbGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qg
c2N0cF9lcnJvcl9zdGFsZV9jb29raWUpKSAmJgorCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29j
KSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCQkJc3RydWN0IHNjdHBfZXJyb3Jf
c3RhbGVfY29va2llICpzdGFsZV9jb29raWU7CisKKwkJCQlzdGFsZV9jb29raWUgPSAoc3RydWN0
IHNjdHBfZXJyb3Jfc3RhbGVfY29va2llICopY2F1c2U7CisJCQkJYXNvYy0+Y29va2llX3ByZXNl
cnZlX3JlcSA9IG50b2hsKHN0YWxlX2Nvb2tpZS0+c3RhbGVfdGltZSk7CisJCQkJLyogRG91Ymxl
IGl0IHRvIGJlIG1vcmUgcm9idXN0IG9uIFJUWCAqLworCQkJCWlmIChhc29jLT5jb29raWVfcHJl
c2VydmVfcmVxIDw9IFVJTlQzMl9NQVggLyAyKSB7CisJCQkJCWFzb2MtPmNvb2tpZV9wcmVzZXJ2
ZV9yZXEgKj0gMjsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5jb29raWVfcHJlc2VydmVfcmVx
ID0gVUlOVDMyX01BWDsKKwkJCQl9CisJCQkJYXNvYy0+c3RhbGVfY29va2llX2NvdW50Kys7CisJ
CQkJaWYgKGFzb2MtPnN0YWxlX2Nvb2tpZV9jb3VudCA+CisJCQkJICAgIGFzb2MtPm1heF9pbml0
X3RpbWVzKSB7CisJCQkJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEws
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCS8qIG5vdyBmcmVlIHRoZSBhc29jICovCisjaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJ
CXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQkJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJ
U0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQkJ
CQkodm9pZClzY3RwX2ZyZWVfYXNzb2Moc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxf
UFJPQywKKwkJCQkJCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEyKTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
KwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQkJCQlyZXR1cm4gKC0x
KTsKKwkJCQl9CisJCQkJLyogYmxhc3QgYmFjayB0byBJTklUIHN0YXRlICovCisJCQkJc2N0cF90
b3NzX29sZF9jb29raWVzKHN0Y2IsICZzdGNiLT5hc29jKTsKKwkJCQlhc29jLT5zdGF0ZSAmPSB+
U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOworCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVf
Q09PS0lFX1dBSVQ7CisJCQkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOworCQkJ
CXNjdHBfc2VuZF9pbml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQURE
UjoKKwkJCS8qCisJCQkgKiBOb3RoaW5nIHdlIGNhbiBkbyBoZXJlLCB3ZSBkb24ndCBkbyBob3N0
bmFtZQorCQkJICogYWRkcmVzc2VzIHNvIGlmIHRoZSBwZWVyIGRvZXMgbm90IGxpa2UgbXkgSVB2
NgorCQkJICogKG9yIElQdjQgZm9yIHRoYXQgbWF0dGVyKSBpdCBkb2VzIG5vdCBtYXR0ZXIuIElm
CisJCQkgKiB0aGV5IGRvbid0IHN1cHBvcnQgdGhhdCB0eXBlIG9mIGFkZHJlc3MsIHRoZXkgY2Fu
CisJCQkgKiBOT1QgcG9zc2libHkgZ2V0IHRoYXQgcGFja2V0IHR5cGUuLi4gaS5lLiB3aXRoIG5v
CisJCQkgKiBJUHY2IHlvdSBjYW4ndCByZWNlaXZlIGEgSVB2NiBwYWNrZXQuIHNvIHdlIGNhbgor
CQkJICogc2FmZWx5IGlnbm9yZSB0aGlzIG9uZS4gSWYgd2UgZXZlciBhZGRlZCBzdXBwb3J0CisJ
CQkgKiBmb3IgSE9TVE5BTUUgQWRkcmVzc2VzLCB0aGVuIHdlIHdvdWxkIG5lZWQgdG8gZG8KKwkJ
CSAqIHNvbWV0aGluZyBoZXJlLgorCQkJICovCisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNF
X1VOUkVDT0dfQ0hVTks6CisJCQlpZiAoY2F1c2VfbGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qgc2N0
cF9lcnJvcl91bnJlY29nbml6ZWRfY2h1bmspKSB7CisJCQkJc3RydWN0IHNjdHBfZXJyb3JfdW5y
ZWNvZ25pemVkX2NodW5rICp1bnJlY19jaHVuazsKKworCQkJCXVucmVjX2NodW5rID0gKHN0cnVj
dCBzY3RwX2Vycm9yX3VucmVjb2duaXplZF9jaHVuayAqKWNhdXNlOworCQkJCXNjdHBfcHJvY2Vz
c191bnJlY29nX2NodW5rKHN0Y2IsIHVucmVjX2NodW5rLT5jaC5jaHVua190eXBlLCBuZXQpOwor
CQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DQVVTRV9VTlJFQ09HX1BBUkFNOgorCQkJLyog
WFhYOiBXZSBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJhbWV0ZXIgKi8KKwkJCWlmIChjYXVz
ZV9sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqdW5yZWNfcGFy
YW1ldGVyOworCisJCQkJdW5yZWNfcGFyYW1ldGVyID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
KGNhdXNlICsgMSk7CisJCQkJc2N0cF9wcm9jZXNzX3VucmVjb2dfcGFyYW0oc3RjYiwgbnRvaHMo
dW5yZWNfcGFyYW1ldGVyLT5wYXJhbV90eXBlKSk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBT
Q1RQX0NBVVNFX0NPT0tJRV9JTl9TSFVURE9XTjoKKwkJCS8qCisJCQkgKiBXZSBpZ25vcmUgdGhp
cyBzaW5jZSB0aGUgdGltZXIgd2lsbCBkcml2ZSBvdXQgYQorCQkJICogbmV3IGNvb2tpZSBhbnl3
YXkgYW5kIHRoZXJlIHRpbWVyIHdpbGwgZHJpdmUgdXMKKwkJCSAqIHRvIHNlbmQgYSBTSFVURE9X
Tl9DT01QTEVURS4gV2UgY2FuJ3Qgc2VuZCBvbmUKKwkJCSAqIGhlcmUgc2luY2Ugd2UgZG9uJ3Qg
aGF2ZSB0aGVpciB0YWcuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfREVM
RVRJTkdfTEFTVF9BRERSOgorCQljYXNlIFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0U6CisJ
CWNhc2UgU0NUUF9DQVVTRV9ERUxFVElOR19TUkNfQUREUjoKKwkJCS8qCisJCQkgKiBXZSBzaG91
bGQgTk9UIGdldCB0aGVzZSBoZXJlLCBidXQgaW4gYQorCQkJICogQVNDT05GLUFDSy4KKwkJCSAq
LworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlBlZXIgc2VuZHMgQVNDT05GIGVycm9y
cyBpbiBhIGVycm9yIGNhdXNlIHdpdGggY29kZSAldS5cbiIsCisJCQkJY2F1c2VfY29kZSk7CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX09VVF9PRl9SRVNDOgorCQkJLyoKKwkJCSAqIEFu
ZCB3aGF0LCBwcmF5IHRlbGwgZG8gd2UgZG8gd2l0aCB0aGUgZmFjdCB0aGF0CisJCQkgKiB0aGUg
cGVlciBpcyBvdXQgb2YgcmVzb3VyY2VzPyBOb3QgcmVhbGx5IHN1cmUgd2UKKwkJCSAqIGNvdWxk
IGRvIGFueXRoaW5nIGJ1dCBhYm9ydC4gSSBzdXNwZWN0IHRoaXMKKwkJCSAqIHNob3VsZCBoYXZl
IGNhbWUgV0lUSCBhbiBhYm9ydCBpbnN0ZWFkIG9mIGluIGEKKwkJCSAqIE9QLUVSUk9SLgorCQkJ
ICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEs
ICJzY3RwX2hhbmRsZV9lcnJvcjogdW5rbm93biBjb2RlIDB4JXhcbiIsCisJCQkJY2F1c2VfY29k
ZSk7CisJCQlicmVhazsKKwkJfQorCQlhZGp1c3QgPSBTQ1RQX1NJWkUzMihjYXVzZV9sZW5ndGgp
OworCQlpZiAocmVtYWluaW5nX2xlbmd0aCA+PSBhZGp1c3QpIHsKKwkJCXJlbWFpbmluZ19sZW5n
dGggLT0gYWRqdXN0OworCQl9IGVsc2UgeworCQkJcmVtYWluaW5nX2xlbmd0aCA9IDA7CisJCX0K
KwkJY2F1c2UgPSAoc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgKikoKGNhZGRyX3QpY2F1c2UgKyBh
ZGp1c3QpOworCX0KKwlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfUkVNT1RFX0VSUk9SLCBz
dGNiLCBjb2RlLCBjaCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwlyZXR1cm4gKDApOworfQorCitz
dGF0aWMgaW50CitzY3RwX2hhbmRsZV9pbml0X2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxl
biwgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3Jj
LCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCAq
YWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAg
ICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKKyNlbmRpZgorICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQoreworCXN0cnVjdCBzY3RwX2luaXRf
YWNrICppbml0X2FjazsKKwlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCisJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2luaXRfYWNrOiBoYW5kbGluZyBJTklULUFDS1xu
Iik7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIs
CisJCQkic2N0cF9oYW5kbGVfaW5pdF9hY2s6IFRDQiBpcyBudWxsXG4iKTsKKwkJcmV0dXJuICgt
MSk7CisJfQorCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSA8IHNpemVvZihzdHJ1Y3Qg
c2N0cF9pbml0X2Fja19jaHVuaykpIHsKKwkJLyogSW52YWxpZCBsZW5ndGggKi8KKwkJb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKKwkJ
c2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93
aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7
CisJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaW5pdF9hY2sg
PSAmY3AtPmluaXQ7CisJLyogdmFsaWRhdGUgcGFyYW1ldGVycyAqLworCWlmIChpbml0X2Fjay0+
aW5pdGlhdGVfdGFnID09IDApIHsKKwkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9y
dCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9Q
QVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2Vy
ciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9p
ZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOwor
CX0KKwlpZiAobnRvaGwoaW5pdF9hY2stPmFfcnduZCkgPCBTQ1RQX01JTl9SV05EKSB7CisJCS8q
IHByb3RvY29sIGVycm9yLi4uIHNlbmQgYW4gYWJvcnQgKi8KKwkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsKKwkJc2N0cF9hYm9ydF9h
c3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYK
KwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCSphYm9ydF9u
b191bmxvY2sgPSAxOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGluaXRfYWNrLT5udW1faW5i
b3VuZF9zdHJlYW1zID09IDApIHsKKwkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9y
dCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9Q
QVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2Vy
ciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9p
ZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOwor
CX0KKwlpZiAoaW5pdF9hY2stPm51bV9vdXRib3VuZF9zdHJlYW1zID09IDApIHsKKwkJLyogcHJv
dG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29j
aWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
CQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkg
ICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3Vu
bG9jayA9IDE7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBwcm9jZXNzIGFjY29yZGluZyB0byBh
c3NvY2lhdGlvbiBzdGF0ZS4uLiAqLworCXN3aXRjaCAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfTUFTSykgeworCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKKwkJLyogdGhpcyBp
cyB0aGUgZXhwZWN0ZWQgc3RhdGUgZm9yIHRoaXMgY2h1bmsgKi8KKwkJLyogcHJvY2VzcyB0aGUg
SU5JVC1BQ0sgcGFyYW1ldGVycyAqLworCQlpZiAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uLT5kZXN0X3N0YXRlICYKKwkJICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJLyoK
KwkJCSAqIFRoZSBwcmltYXJ5IGlzIHdoZXJlIHdlIHNlbnQgdGhlIElOSVQsIHdlIGNhbgorCQkJ
ICogYWx3YXlzIGNvbnNpZGVyIGl0IGNvbmZpcm1lZCB3aGVuIHRoZSBJTklULUFDSyBpcworCQkJ
ICogcmV0dXJuZWQuIERvIHRoaXMgYmVmb3JlIHdlIGxvYWQgYWRkcmVzc2VzCisJCQkgKiB0aG91
Z2guCisJCQkgKi8KKwkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0
ZSAmPQorCQkJICAgIH5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7CisJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRCwKKwkJCSAgICBzdGNiLCAwLCAodm9pZCAq
KXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJ
fQorCQlpZiAoc2N0cF9wcm9jZXNzX2luaXRfYWNrKG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRz
dCwgc2gsIGNwLCBzdGNiLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCwgYWJvcnRf
bm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkKSA8IDApIHsKKwkJCS8qIGVycm9yIGluIHBhcnNpbmcgcGFyYW1ldGVy
cyAqLworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogdXBkYXRlIG91ciBzdGF0ZSAqLworCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAibW92aW5nIHRvIENPT0tJRS1FQ0hPRUQgc3RhdGVc
biIpOworCQlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NUUF9TVEFURV9DT09LSUVfRUNI
T0VEKTsKKworCQkvKiByZXNldCB0aGUgUlRPIGNhbGMgKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJCXNj
dHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJCSAgICAgICBzdGNiLT5hc29j
Lm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIFNDVFBfRlJP
TV9TQ1RQX0lOUFVULAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJCX0KKwkJc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0
Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKKwkJLyoKKwkJICogY29sbGFwc2UgdGhlIGluaXQgdGlt
ZXIgYmFjayBpbiBjYXNlIG9mIGEgZXhwb25lbnRpYWwKKwkJICogYmFja29mZgorCQkgKi8KKwkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLCBzdGNiLT5zY3RwX2VwLAor
CQkgICAgc3RjYiwgbmV0KTsKKwkJLyoKKwkJICogdGhlIHNlbmQgYXQgdGhlIGVuZCBvZiB0aGUg
aW5ib3VuZCBkYXRhIHByb2Nlc3Npbmcgd2lsbAorCQkgKiBjYXVzZSB0aGUgY29va2llIHRvIGJl
IHNlbnQKKwkJICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgor
CQkvKiBpbmNvcnJlY3Qgc3RhdGUuLi4gZGlzY2FyZCAqLworCQlicmVhazsKKwljYXNlIFNDVFBf
U1RBVEVfQ09PS0lFX0VDSE9FRDoKKwkJLyogaW5jb3JyZWN0IHN0YXRlLi4uIGRpc2NhcmQgKi8K
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUQVRFX09QRU46CisJCS8qIGluY29ycmVjdCBzdGF0ZS4u
LiBkaXNjYXJkICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9FTVBUWToKKwljYXNlIFND
VFBfU1RBVEVfSU5VU0U6CisJZGVmYXVsdDoKKwkJLyogaW5jb3JyZWN0IHN0YXRlLi4uIGRpc2Nh
cmQgKi8KKwkJcmV0dXJuICgtMSk7CisJCWJyZWFrOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLCAiTGVhdmluZyBoYW5kbGUtaW5pdC1hY2sgZW5kXG4iKTsKKwlyZXR1cm4gKDApOwor
fQorCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfcHJvY2Vzc19jb29raWVfbmV3KHN0
cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzb2NrYWRk
ciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0
cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llLCBpbnQgY29va2llX2xlbiwKKyAgICBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwKKyAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmluaXRfc3JjLCBpbnQgKm5vdGlmaWNhdGlvbiwKKyAgICBpbnQgYXV0aF9za2lw
cGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9sZW4sCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKKyAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwK
KyNlbmRpZgorICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCk7CisKKworLyoKKyAq
IGhhbmRsZSBhIHN0YXRlIGNvb2tpZSBmb3IgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gbTogaW5w
dXQgcGFja2V0IG1idWYKKyAqIGNoYWluLS0gYXNzdW1lcyBhIHB1bGx1cCBvbiBJUC9TQ1RQL0NP
T0tJRS1FQ0hPIGNodW5rIG5vdGU6IHRoaXMgaXMgYQorICogInNwbGl0IiBtYnVmIGFuZCB0aGUg
Y29va2llIHNpZ25hdHVyZSBkb2VzIG5vdCBleGlzdCBvZmZzZXQ6IG9mZnNldCBpbnRvCisgKiBt
YnVmIHRvIHRoZSBjb29raWUtZWNobyBjaHVuaworICovCitzdGF0aWMgc3RydWN0IHNjdHBfdGNi
ICoKK3NjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1idWYgKm0sIGludCBpcGhs
ZW4sIGludCBvZmZzZXQsCisgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRk
ciAqZHN0LAorICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfc3RhdGVfY29va2ll
ICpjb29raWUsIGludCBjb29raWVfbGVuLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsCisgICAgc3RydWN0
IHNvY2thZGRyICppbml0X3NyYywgaW50ICpub3RpZmljYXRpb24sCisgICAgaW50IGF1dGhfc2tp
cHBlZCwgdWludDMyX3QgYXV0aF9vZmZzZXQsIHVpbnQzMl90IGF1dGhfbGVuLAorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQs
CisjZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqaW5pdF9j
cCwgaW5pdF9idWY7CisJc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKmluaXRhY2tfY3AsIGlu
aXRhY2tfYnVmOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3QgbWJ1ZiAqb3BfZXJy
OworCXN0cnVjdCB0aW1ldmFsIG9sZDsKKwlpbnQgaW5pdF9vZmZzZXQsIGluaXRhY2tfb2Zmc2V0
LCBpOworCWludCByZXR2YWw7CisJaW50IHNwZWNfZmxhZyA9IDA7CisJdWludDMyX3QgaG93X2lu
ZHg7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwlpbnQgajsKKyNlbmRp
ZgorCisJbmV0ID0gKm5ldHA7CisJLyogSSBrbm93IHRoYXQgdGhlIFRDQiBpcyBub24tTlVMTCBm
cm9tIHRoZSBjYWxsZXIgKi8KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJZm9yIChob3dfaW5keCA9
IDA7IGhvd19pbmR4ICA8IHNpemVvZihhc29jLT5jb29raWVfaG93KTsgaG93X2luZHgrKykgewor
CQlpZiAoYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPT0gMCkKKwkJCWJyZWFrOworCX0KKwlp
ZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpIHsKKwkJYXNvYy0+Y29va2ll
X2hvd1tob3dfaW5keF0gPSAxOworCX0KKwlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NU
UF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgeworCQkvKiBTSFVURE9XTiBjYW1lIGluIGFmdGVy
IHNlbmRpbmcgSU5JVC1BQ0sgKi8KKwkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQ0FVU0VfQ09PS0lFX0lOX1NIVVRET1dOLCAiIik7CisJCXNjdHBfc2VuZF9vcGVy
cl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3BfZXJyLAorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQs
IGlucC0+ZmlibnVtLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+
cG9ydCk7CisJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCWFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMjsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoK
KwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVCBjaHVuayBpbiB0aGUgY29va2llIChwZWVy
J3MgaW5mbykgdGhlCisJICogSU5JVCBzaG91bGQgc3RhcnQgYWZ0ZXIgdGhlIGNvb2tpZS1lY2hv
IGhlYWRlciBzdHJ1Y3QgKGNodW5rCisJICogaGVhZGVyLCBzdGF0ZSBjb29raWUgaGVhZGVyIHN0
cnVjdCkKKwkgKi8KKwlpbml0X29mZnNldCA9IG9mZnNldCArPSBzaXplb2Yoc3RydWN0IHNjdHBf
Y29va2llX2VjaG9fY2h1bmspOworCisJaW5pdF9jcCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
ICopCisJCXNjdHBfbV9nZXRwdHIobSwgaW5pdF9vZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9p
bml0X2NodW5rKSwKKwkJCSAgICAgICh1aW50OF90ICopICYgaW5pdF9idWYpOworCWlmIChpbml0
X2NwID09IE5VTEwpIHsKKwkJLyogY291bGQgbm90IHB1bGwgYSBJTklUIGNodW5rIGluIGNvb2tp
ZSAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoaW5pdF9jcC0+Y2guY2h1bmtfdHlwZSAh
PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoKKwkgKiBmaW5k
IGFuZCB2YWxpZGF0ZSB0aGUgSU5JVC1BQ0sgY2h1bmsgaW4gdGhlIGNvb2tpZSAobXkgaW5mbykg
dGhlCisJICogSU5JVC1BQ0sgZm9sbG93cyB0aGUgSU5JVCBjaHVuaworCSAqLworCWluaXRhY2tf
b2Zmc2V0ID0gaW5pdF9vZmZzZXQgKyBTQ1RQX1NJWkUzMihudG9ocyhpbml0X2NwLT5jaC5jaHVu
a19sZW5ndGgpKTsKKwlpbml0YWNrX2NwID0gKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICop
CisJCXNjdHBfbV9nZXRwdHIobSwgaW5pdGFja19vZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9p
bml0X2Fja19jaHVuayksCisJCQkgICAgICAodWludDhfdCAqKSAmIGluaXRhY2tfYnVmKTsKKwlp
ZiAoaW5pdGFja19jcCA9PSBOVUxMKSB7CisJCS8qIGNvdWxkIG5vdCBwdWxsIElOSVQtQUNLIGNo
dW5rIGluIGNvb2tpZSAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoaW5pdGFja19jcC0+
Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT05fQUNLKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2Mt
Pm15X3Z0YWcpICYmCisJICAgIChudG9obChpbml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgPT0g
YXNvYy0+cGVlcl92dGFnKSkgeworCQkvKgorCQkgKiBjYXNlIEQgaW4gU2VjdGlvbiA1LjIuNCBU
YWJsZSAyOiBNTUFBIHByb2Nlc3MgYWNjb3JkaW5nbHkKKwkJICogdG8gZ2V0IGludG8gdGhlIE9Q
RU4gc3RhdGUKKwkJICovCisJCWlmIChudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYWxfdHNu
KSAhPSBhc29jLT5pbml0X3NlcV9udW1iZXIpIHsKKwkJCS8qLQorCQkJICogT3BwcywgdGhpcyBt
ZWFucyB0aGF0IHdlIHNvbWVob3cgZ2VuZXJhdGVkIHR3byB2dGFnJ3MKKwkJCSAqIHRoZSBzYW1l
LiBJLmUuIHdlIGRpZDoKKwkJCSAqICBVcyAgICAgICAgICAgICAgIFBlZXIKKwkJCSAqICAgPC0t
LUlOSVQodGFnPWEpLS0tLS0tCisJCQkgKiAgIC0tLS1JTklULUFDSyh0YWc9dCktLT4KKwkJCSAq
ICAgLS0tLUlOSVQodGFnPXQpLS0tLS0tPiAqMQorCQkJICogICA8LS0tSU5JVC1BQ0sodGFnPWEp
LS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIDwtLS0tQ0UodGFnPXQpLS0tLS0tLS0t
LS0tLSAqMgorCQkJICoKKwkJCSAqIEF0IHBvaW50ICoxIHdlIHNob3VsZCBiZSBnZW5lcmF0aW5n
IGEgZGlmZmVyZW50CisJCQkgKiB0YWcgdCcuIFdoaWNoIG1lYW5zIHdlIHdvdWxkIHRocm93IGF3
YXkgdGhlIENFIGFuZCBzZW5kCisJCQkgKiBvdXJzIGluc3RlYWQuIEJhc2ljYWxseSB0aGlzIGlz
IGNhc2UgQyAodGhyb3cgYXdheSBzaWRlKS4KKwkJCSAqLworCQkJaWYgKGhvd19pbmR4IDwgc2l6
ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0g
MTc7CisJCQlyZXR1cm4gKE5VTEwpOworCisJCX0KKwkJc3dpdGNoIChTQ1RQX0dFVF9TVEFURShh
c29jKSkgeworCQkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgorCQkJY2FzZSBTQ1RQX1NU
QVRFX0NPT0tJRV9FQ0hPRUQ6CisJCQkJLyoKKwkJCQkgKiBJTklUIHdhcyBzZW50IGJ1dCBnb3Qg
YSBDT09LSUVfRUNITyB3aXRoIHRoZQorCQkJCSAqIGNvcnJlY3QgdGFncy4uLiBqdXN0IGFjY2Vw
dCBpdC4uLmJ1dCB3ZSBtdXN0CisJCQkJICogcHJvY2VzcyB0aGUgaW5pdCBzbyB0aGF0IHdlIGNh
biBtYWtlIHN1cmUgd2UKKwkJCQkgKiBoYXZlIHRoZSByaWdodCBzZXEgbm8ncy4KKwkJCQkgKi8K
KwkJCQkvKiBGaXJzdCB3ZSBtdXN0IHByb2Nlc3MgdGhlIElOSVQgISEgKi8KKwkJCQlyZXR2YWwg
PSBzY3RwX3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNiKTsKKwkJCQlpZiAocmV0dmFsIDwgMCkg
eworCQkJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCisJCQkJCQlh
c29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDM7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJ
fQorCQkJCS8qIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIElOSVQgc28gbm8gcHJvYmxl
bSAqLworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAs
CisJCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xMyk7CisJCQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9JTklULCBpbnAsCisJCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwK
KwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xNCk7
CisJCQkJLyogdXBkYXRlIGN1cnJlbnQgc3RhdGUgKi8KKwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUo
YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKQorCQkJCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSMzIoc2N0cHNfYWN0aXZlZXN0YWIpOworCQkJCWVsc2UKKwkJCQkJU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKworCQkJCVNDVFBfU0VUX1NUQVRF
KGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7CisJCQkJaWYgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFU
RV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGFzb2MtPnBy
aW1hcnlfZGVzdGluYXRpb24pOworCQkJCX0KKwkJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNj
dHBzX2N1cnJlc3RhYik7CisJCQkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwor
CQkJCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAorCQkJCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSkgJiYKKwkJCQkgICAgKCFTQ1RQX0lTX0xJU1RFTklORyhpbnApKSkg
eworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQorCQkJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCQkJCQkvKgorCQkJCQkgKiBIZXJl
IGlzIHdoZXJlIGNvbGxpc2lvbiB3b3VsZCBnbyBpZiB3ZQorCQkJCQkgKiBkaWQgYSBjb25uZWN0
KCkgYW5kIGluc3RlYWQgZ290IGEKKwkJCQkJICogaW5pdC9pbml0LWFjay9jb29raWUgZG9uZSBi
ZWZvcmUgdGhlCisJCQkJCSAqIGluaXQtYWNrIGNhbWUgYmFjay4uCisJCQkJCSAqLworCQkJCQlz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9CisJCQkJCQlTQ1RQX1BDQl9GTEFHU19DT05ORUNU
RUQ7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJCQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJCQlp
ZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJCQkJ
U0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJCX0K
KyNlbmRpZgorCQkJCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQkJCX0KKwkJCQkvKiBub3RpZnkgdXBw
ZXIgbGF5ZXIgKi8KKwkJCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNTT0NfVVA7CisJ
CQkJLyoKKwkJCQkgKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUgd2UKKwkJ
CQkgKiBkb24ndCBkb3VibGUgdGhpbmdzCisJCQkJICovCisJCQkJb2xkLnR2X3NlYyA9IGNvb2tp
ZS0+dGltZV9lbnRlcmVkLnR2X3NlYzsKKwkJCQlvbGQudHZfdXNlYyA9IGNvb2tpZS0+dGltZV9l
bnRlcmVkLnR2X3VzZWM7CisJCQkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOworCQkJCW5ldC0+UlRP
ID0gc2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsIGFzb2MsIG5ldCwKKwkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmb2xkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCisJCQkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRv
Y2xvc2VfdGlja3MgJiYKKwkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX0FVVE9DTE9TRSkpKSB7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0FVVE9DTE9TRSwKKwkJCQkJCQkgaW5wLCBzdGNiLCBOVUxMKTsKKwkJCQl9CisJCQkJYnJl
YWs7CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogd2UncmUgaW4gdGhlIE9QRU4gc3RhdGUg
KG9yIGJleW9uZCksIHNvCisJCQkJICogcGVlciBtdXN0IGhhdmUgc2ltcGx5IGxvc3QgdGhlIENP
T0tJRS1BQ0sKKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQkvKiBlbmQgc3dpdGNoICovCisJCXNj
dHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKKwkJLyoKKwkJICogV2UgaWdub3JlIHRo
ZSByZXR1cm4gY29kZSBoZXJlLi4gbm90IHN1cmUgaWYgd2Ugc2hvdWxkCisJCSAqIHNvbWVob3cg
YWJvcnQuLiBidXQgd2UgZG8gaGF2ZSBhbiBleGlzdGluZyBhc29jLiBUaGlzCisJCSAqIHJlYWxs
eSBzaG91bGQgbm90IGZhaWwuCisJCSAqLworCQlpZiAoc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9t
X2luaXQoc3RjYiwgbSwKKwkJCQkJCSAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBf
aW5pdF9jaHVuayksCisJCQkJCQkgIGluaXRhY2tfb2Zmc2V0LCBzcmMsIGRzdCwgaW5pdF9zcmMs
IHN0Y2ItPmFzb2MucG9ydCkpIHsKKwkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29r
aWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDQ7CisJCQlyZXR1cm4g
KE5VTEwpOworCQl9CisJCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KKwkJc2N0cF90
b3NzX29sZF9jb29raWVzKHN0Y2IsIGFzb2MpOworCQlzY3RwX3NlbmRfY29va2llX2FjayhzdGNi
KTsKKwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJYXNvYy0+
Y29va2llX2hvd1tob3dfaW5keF0gPSA1OworCQlyZXR1cm4gKHN0Y2IpOworCX0KKworCWlmIChu
dG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNvYy0+bXlfdnRhZyAmJgor
CSAgICBudG9obChpbml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgPT0gYXNvYy0+cGVlcl92dGFn
ICYmCisJICAgIGNvb2tpZS0+dGllX3RhZ19teV92dGFnID09IDAgJiYKKwkgICAgY29va2llLT50
aWVfdGFnX3BlZXJfdnRhZyA9PSAwKSB7CisJCS8qCisJCSAqIGNhc2UgQyBpbiBTZWN0aW9uIDUu
Mi40IFRhYmxlIDI6IFhNT08gc2lsZW50bHkgZGlzY2FyZAorCQkgKi8KKwkJaWYgKGhvd19pbmR4
IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5k
eF0gPSA2OworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBJZiBuYXQgc3VwcG9ydCwgYW5kIHRo
ZSBiZWxvdyBhbmQgc3RjYiBpcyBlc3RhYmxpc2hlZCwKKwkgKiBzZW5kIGJhY2sgYSBBQk9SVChj
b2xsaWRpbmcgc3RhdGUpIGlmIHdlIGFyZSBlc3RhYmxpc2hlZC4KKwkgKi8KKwlpZiAoKFNDVFBf
R0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgICYmCisJICAgIChhc29jLT5wZWVy
X3N1cHBvcnRzX25hdCkgJiYKKwkgICAgKChudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRl
X3RhZykgPT0gYXNvYy0+bXlfdnRhZykgJiYKKwkgICAgKChudG9obChpbml0X2NwLT5pbml0Lmlu
aXRpYXRlX3RhZykgIT0gYXNvYy0+cGVlcl92dGFnKSB8fAorCSAgICAgKGFzb2MtPnBlZXJfdnRh
ZyA9PSAwKSkpKSB7CisJCS8qIFNwZWNpYWwgY2FzZSAtIFBlZXIncyBzdXBwb3J0IG5hdC4gV2Ug
bWF5IGhhdmUKKwkJICogdHdvIGluaXQncyB0aGF0IHdlIGdhdmUgb3V0IHRoZSBzYW1lIHRhZyBv
biBzaW5jZQorCQkgKiBvbmUgd2FzIG5vdCBlc3RhYmxpc2hlZC4uIGkuZS4gd2UgZ2V0IElOSVQg
ZnJvbSBob3N0LTEKKwkJICogYmVoaW5kIHRoZSBuYXQgYW5kIHdlIHJlc3BvbmQgdGFnLWEsIHdl
IGdldCBhIElOSVQgZnJvbQorCQkgKiBob3N0LTIgYmVoaW5kIHRoZSBuYXQgYW5kIHdlIGdldCB0
YWctYSBhZ2Fpbi4gVGhlbiB3ZQorCQkgKiBicmluZyB1cCBob3N0LTEgKG9yIDIncykgYXNzb2Ms
IFRoZW4gY29tZXMgdGhlIGNvb2tpZQorCQkgKiBmcm9tIGhzb3QtMiAob3IgMSkuIE5vdyB3ZSBo
YXZlIGNvbGxpZGluZyBzdGF0ZS4gV2UgbXVzdAorCQkgKiBzZW5kIGFuIGFib3J0IGhlcmUgd2l0
aCBjb2xsaWRpbmcgc3RhdGUgaW5kaWNhdGlvbi4KKwkJICovCisJCW9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9OQVRfQ09MTElESU5HX1NUQVRFLCAiIik7CisJCXNjdHBf
c2VuZF9hYm9ydChtLCBpcGhsZW4sICBzcmMsIGRzdCwgc2gsIDAsIG9wX2VyciwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBp
bnAtPmZpYm51bSwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRl
X3RhZykgPT0gYXNvYy0+bXlfdnRhZykgJiYKKwkgICAgKChudG9obChpbml0X2NwLT5pbml0Lmlu
aXRpYXRlX3RhZykgIT0gYXNvYy0+cGVlcl92dGFnKSB8fAorCSAgICAgKGFzb2MtPnBlZXJfdnRh
ZyA9PSAwKSkpIHsKKwkJLyoKKwkJICogY2FzZSBCIGluIFNlY3Rpb24gNS4yLjQgVGFibGUgMjog
TVhBQSBvciBNT0FBIG15IGluZm8KKwkJICogc2hvdWxkIGJlIG9rLCByZS1hY2NlcHQgcGVlciBp
bmZvCisJCSAqLworCQlpZiAobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3RzbikgIT0g
YXNvYy0+aW5pdF9zZXFfbnVtYmVyKSB7CisJCQkvKiBFeHRlbnNpb24gb2YgY2FzZSBDLgorCQkJ
ICogSWYgd2UgaGl0IHRoaXMsIHRoZW4gdGhlIHJhbmRvbSBudW1iZXIKKwkJCSAqIGdlbmVyYXRv
ciByZXR1cm5lZCB0aGUgc2FtZSB2dGFnIHdoZW4gd2UKKwkJCSAqIGZpcnN0IHNlbnQgb3VyIElO
SVQtQUNLIGFuZCB3aGVuIHdlIGxhdGVyIHNlbnQKKwkJCSAqIG91ciBJTklULiBUaGUgc2lkZSB3
aXRoIHRoZSBzZXEgbnVtYmVycyB0aGF0IGFyZQorCQkJICogZGlmZmVyZW50IHdpbGwgYmUgdGhl
IG9uZSB0aGF0IG5vcm1uYWxseSB3b3VsZAorCQkJICogaGF2ZSBoaXQgY2FzZSBDLiBUaGlzIGlu
IGVmZmVjdCAiZXh0ZW5kcyIgb3VyIHZ0YWdzCisJCQkgKiBpbiB0aGlzIGNvbGxpc2lvbiBjYXNl
IHRvIGJlIDY0IGJpdHMuIFRoZSBzYW1lIGNvbGxpc2lvbgorCQkJICogY291bGQgb2NjdXIgYWth
IHlvdSBnZXQgYm90aCB2dGFnIGFuZCBzZXEgbnVtYmVyIHRoZQorCQkJICogc2FtZSB0d2ljZSBp
biBhIHJvdy4uIGJ1dCBpcyBtdWNoIGxlc3MgbGlrZWx5LiBJZiBpdAorCQkJICogZGlkIGhhcHBl
biB0aGVuIHdlIHdvdWxkIHByb2NlZWQgdGhyb3VnaCBhbmQgYnJpbmcKKwkJCSAqIHVwIHRoZSBh
c3NvYy4uIHdlIG1heSBlbmQgdXAgd2l0aCB0aGUgd3Jvbmcgc3RyZWFtCisJCQkgKiBzZXR1cCBo
b3dldmVyLi4gd2hpY2ggd291bGQgYmUgYmFkLi4gYnV0IHRoZXJlIGlzCisJCQkgKiBubyB3YXkg
dG8gdGVsbC4uIHVudGlsIHdlIHNlbmQgb24gYSBzdHJlYW0gdGhhdCBkb2VzCisJCQkgKiBub3Qg
ZXhpc3QgOi0pCisJCQkgKi8KKwkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVf
aG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDc7CisKKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQor
CQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSA4OworCQlzY3RwX3RpbWVyX3N0b3AoU0NU
UF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCSAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzE1KTsKKwkJc2N0cF9zdG9wX2FsbF9j
b29raWVfdGltZXJzKHN0Y2IpOworCQkvKgorCQkgKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBI
QiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCisJCSAqIHRoaW5ncworCQkgKi8KKwkJbmV0LT5o
Yl9yZXNwb25kZWQgPSAxOworCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAm
JgorCQkgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NF
KSkgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAs
IHN0Y2IsCisJCQkJCSBOVUxMKTsKKwkJfQorCQlhc29jLT5teV9yd25kID0gbnRvaGwoaW5pdGFj
a19jcC0+aW5pdC5hX3J3bmQpOworCQlhc29jLT5wcmVfb3Blbl9zdHJlYW1zID0gbnRvaHMoaW5p
dGFja19jcC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyk7CisKKwkJaWYgKG50b2hsKGluaXRf
Y3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcpIHsKKwkJCS8qIE9rIHRo
ZSBwZWVyIHByb2JhYmx5IGRpc2NhcmRlZCBvdXIKKwkJCSAqIGRhdGEgKGlmIHdlIGVjaG9lZCBh
IGNvb2tpZStkYXRhKS4gU28gYW55dGhpbmcKKwkJCSAqIG9uIHRoZSBzZW50X3F1ZXVlIHNob3Vs
ZCBiZSBtYXJrZWQgZm9yCisJCQkgKiByZXRyYW5zbWl0LCB3ZSBtYXkgbm90IGdldCBzb21ldGhp
bmcgdG8KKwkJCSAqIGtpY2sgdXMgc28gaXQgQ09VTEQgc3RpbGwgdGFrZSBhIHRpbWVvdXQKKwkJ
CSAqIHRvIG1vdmUgdGhlc2UuLiBidXQgaXQgY2FuJ3QgaHVydCB0byBtYXJrIHRoZW0uCisJCQkg
Ki8KKwkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwkJICAgICAgICBUQUlMUV9GT1JF
QUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQkJaWYgKGNo
ay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fUkVTRU5EOworCQkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNoayk7CisJ
CQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7CisJCQkJCXNjdHBfdWNv
dW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCQlzcGVjX2Zs
YWcrKzsKKwkJCQl9CisJCQl9CisKKwkJfQorCQkvKiBwcm9jZXNzIHRoZSBJTklUIGluZm8gKHBl
ZXIncyBpbmZvKSAqLworCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNi
KTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5j
b29raWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDk7CisJCQlyZXR1
cm4gKE5VTEwpOworCQl9CisJCWlmIChzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNi
LCBtLAorCQkJCQkJICBpbml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
KSwKKwkJCQkJCSAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNv
Yy5wb3J0KSkgeworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQor
CQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTA7CisJCQlyZXR1cm4gKE5VTEwpOwor
CQl9CisJCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkg
ICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQkJKm5vdGlm
aWNhdGlvbiA9IFNDVFBfTk9USUZZX0FTU09DX1VQOworCisJCQlpZiAoKChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkJ
CSAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJc3RydWN0IHNvY2tldCAqc287
CisjZW5kaWYKKwkJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9CisJCQkJCVNDVFBfUENC
X0ZMQUdTX0NPTk5FQ1RFRDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKKwkJCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwor
CQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7
CisJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsK
KwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CQl9CisjZW5kaWYKKwkJCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQl9CisJCQlpZiAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKQorCQkJCVNDVFBfU1RBVF9J
TkNSX0NPVU5URVIzMihzY3Rwc19hY3RpdmVlc3RhYik7CisJCQllbHNlCisJCQkJU0NUUF9TVEFU
X0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKwkJCVNDVFBfU1RBVF9JTkNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJfSBlbHNlIGlmIChTQ1RQX0dFVF9TVEFURShh
c29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihz
Y3Rwc19yZXN0YXJ0ZXN0YWIpOworCQl9IGVsc2UgeworCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKwkJfQorCQlTQ1RQX1NFVF9TVEFURShhc29jLCBT
Q1RQX1NUQVRFX09QRU4pOworCQlpZiAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dO
X1BFTkRJTkcpIHsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
R1VBUkQsCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0
aW9uKTsKKwkJfQorCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7CisJCXNjdHBf
dG9zc19vbGRfY29va2llcyhzdGNiLCBhc29jKTsKKwkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3Rj
Yik7CisJCWlmIChzcGVjX2ZsYWcpIHsKKwkJCS8qIG9ubHkgaWYgd2UgaGF2ZSByZXRyYW5zIHNl
dCBkbyB3ZSBkbyB0aGlzLiBXaGF0CisJCQkgKiB0aGlzIGNhbGwgZG9lcyBpcyBnZXQgb25seSB0
aGUgQ09PS0lFLUFDSyBvdXQKKwkJCSAqIGFuZCB0aGVuIHdoZW4gd2UgcmV0dXJuIHRoZSBub3Jt
YWwgY2FsbCB0bworCQkJICogc2N0cF9jaHVua19vdXRwdXQgd2lsbCBnZXQgdGhlIHJldHJhbnMg
b3V0CisJCQkgKiBiZWhpbmQgdGhpcy4KKwkJCSAqLworCQkJc2N0cF9jaHVua19vdXRwdXQoaW5w
LHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lFX0FDSywgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJfQorCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCisJCQlhc29j
LT5jb29raWVfaG93W2hvd19pbmR4XSA9IDExOworCisJCXJldHVybiAoc3RjYik7CisJfQorCWlm
ICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpICE9IGFzb2MtPm15X3Z0YWcg
JiYKKwkgICAgIG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVy
X3Z0YWcpICYmCisJICAgIGNvb2tpZS0+dGllX3RhZ19teV92dGFnID09IGFzb2MtPm15X3Z0YWdf
bm9uY2UgJiYKKwkgICAgY29va2llLT50aWVfdGFnX3BlZXJfdnRhZyA9PSBhc29jLT5wZWVyX3Z0
YWdfbm9uY2UgJiYKKwkgICAgY29va2llLT50aWVfdGFnX3BlZXJfdnRhZyAhPSAwKSB7CisJCXN0
cnVjdCBzY3RwYXNvY2hlYWQgKmhlYWQ7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisK
KwkJaWYgKGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSB7CisJCQkvKiBUaGlzIGlzIGEgZ3Jvc3Mg
Z3Jvc3MgaGFjay4KKwkJCSAqIEp1c3QgY2FsbCB0aGUgY29va2llX25ldyBjb2RlIHNpbmNlIHdl
CisJCQkgKiBhcmUgYWxsb3dpbmcgYSBkdXBsaWNhdGUgYXNzb2NpYXRpb24uCisJCQkgKiBJIGhv
cGUgdGhpcyB3b3Jrcy4uLgorCQkJICovCisJCQlyZXR1cm4gKHNjdHBfcHJvY2Vzc19jb29raWVf
bmV3KG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2gsIGNvb2tpZSwgY29va2llX2xlbiwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW5wLCBuZXRwLCBpbml0X3NyYyxub3RpZmljYXRpb24sCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfc2tpcHBlZCwgYXV0aF9vZmZzZXQsIGF1
dGhfbGVuLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpKTsKKwkJfQorCQkvKgorCQkgKiBjYXNl
IEEgaW4gU2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBYWE1NIChwZWVyIHJlc3RhcnRlZCkKKwkJICov
CisJCS8qIHRlbXAgY29kZSAqLworCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2ll
X2hvdykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDEyOworCQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0LAorCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xNik7CisJCXNjdHBfdGltZXJf
c3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCwKKwkJICAgICAg
ICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTcpOworCisJCS8qIG5v
dGlmeSB1cHBlciBsYXllciAqLworCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNTT0Nf
UkVTVEFSVDsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJaWYg
KChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX09QRU4pICYmCisJCSAgICAoU0NU
UF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJ
ICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpKSB7
CisJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCX0KKwkJaWYg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJU0NUUF9TVEFU
X0lOQ1JfR0FVR0UzMihzY3Rwc19yZXN0YXJ0ZXN0YWIpOworCQl9IGVsc2UgaWYgKFNDVFBfR0VU
X1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgeworCQkJU0NUUF9TVEFU
X0lOQ1JfR0FVR0UzMihzY3Rwc19jb2xsaXNpb25lc3RhYik7CisJCX0KKwkJaWYgKGFzb2MtPnN0
YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCQlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX09QRU4pOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfU0hVVERPV05HVUFSRCwKKwkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGFzb2MtPnByaW1h
cnlfZGVzdGluYXRpb24pOworCisJCX0gZWxzZSBpZiAoIShhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfU0hVVERPV05fU0VOVCkpIHsKKwkJCS8qIG1vdmUgdG8gT1BFTiBzdGF0ZSwgaWYgbm90IGlu
IFNIVVRET1dOX1NFTlQgKi8KKwkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BF
Tik7CisJCX0KKwkJYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9CisJCQludG9ocyhpbml0YWNrX2Nw
LT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1zKTsKKwkJYXNvYy0+aW5pdF9zZXFfbnVtYmVyID0g
bnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3Rzbik7CisJCWFzb2MtPnNlbmRpbmdfc2Vx
ID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgPSBhc29jLT5zdHJfcmVzZXRfc2VxX291dCA9IGFzb2Mt
PmluaXRfc2VxX251bWJlcjsKKwkJYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNrZWQgPSBhc29jLT5h
c2NvbmZfc2VxX291dCAtIDE7CisKKwkJYXNvYy0+YXNjb25mX3NlcV9pbiA9IGFzb2MtPmxhc3Rf
YWNrZWRfc2VxID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyIC0gMTsKKworCQlhc29jLT5zdHJfcmVz
ZXRfc2VxX2luID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOworCisJCWFzb2MtPmFkdmFuY2VkX3Bl
ZXJfYWNrX3BvaW50ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7CisJCWlmIChhc29jLT5tYXBwaW5n
X2FycmF5KSB7CisJCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwKKwkJCSAgICAgICBh
c29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCQl9CisJCWlmIChhc29jLT5ucl9tYXBwaW5nX2Fy
cmF5KSB7CisJCQltZW1zZXQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgMCwKKwkJCSAgICBhc29j
LT5tYXBwaW5nX2FycmF5X3NpemUpOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJ
c28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7CisjZW5kaWYKKwkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQlTQ1RQX0lOUF9XTE9DSyhz
dGNiLT5zY3RwX2VwKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJCS8qIHNlbmQgdXAgYWxsIHRoZSBkYXRhICovCisJ
CVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKworCQlzY3RwX3JlcG9ydF9hbGxfb3V0Ym91bmQo
c3RjYiwgMCwgMSwgU0NUUF9TT19MT0NLRUQpOworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19v
bl9xdWV1ZXMgPSAwOworI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCisJCQlm
b3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgeworCQkJCWFzb2MtPnN0
cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOworCQkJCWFzb2MtPnN0cm1vdXRbaV0uYWJh
bmRvbmVkX3Vuc2VudFtqXSA9IDA7CisJCQl9CisjZWxzZQorCQkJYXNvYy0+c3RybW91dFtpXS5h
YmFuZG9uZWRfc2VudFswXSA9IDA7CisJCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNl
bnRbMF0gPSAwOworI2VuZGlmCisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc2lkID0gaTsKKwkJ
CXN0Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAwOworCQl9CisJCS8qIHByb2Nlc3MgdGhlIElO
SVQtQUNLIGluZm8gKG15IGluZm8pICovCisJCWFzb2MtPm15X3Z0YWcgPSBudG9obChpbml0YWNr
X2NwLT5pbml0LmluaXRpYXRlX3RhZyk7CisJCWFzb2MtPm15X3J3bmQgPSBudG9obChpbml0YWNr
X2NwLT5pbml0LmFfcnduZCk7CisKKwkJLyogcHVsbCBmcm9tIHZ0YWcgaGFzaCAqLworCQlMSVNU
X1JFTU9WRShzdGNiLCBzY3RwX2Fzb2NzKTsKKwkJLyogcmUtaW5zZXJ0IHRvIG5ldyB2dGFnIHBv
c2l0aW9uICovCisJCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9Q
Q0JIQVNIX0FTT0Moc3RjYi0+YXNvYy5teV92dGFnLAorCQkJCQkJCQkgICAgU0NUUF9CQVNFX0lO
Rk8oaGFzaGFzb2NtYXJrKSldOworCQkvKgorCQkgKiBwdXQgaXQgaW4gdGhlIGJ1Y2tldCBpbiB0
aGUgdnRhZyBoYXNoIG9mIGFzc29jJ3MgZm9yIHRoZQorCQkgKiBzeXN0ZW0KKwkJICovCisJCUxJ
U1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF9hc29jcyk7CisKKwkJU0NUUF9UQ0JfU0VO
RF9VTkxPQ0soc3RjYik7CisJCVNDVFBfSU5QX1dVTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJCVND
VFBfSU5QX0lORk9fV1VOTE9DSygpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2Vu
ZGlmCisJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJCWFzb2MtPnRvdGFsX2ZsaWdodF9jb3Vu
dCA9IDA7CisJCS8qIHByb2Nlc3MgdGhlIElOSVQgaW5mbyAocGVlcidzIGluZm8pICovCisJCXJl
dHZhbCA9IHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOworCQlpZiAocmV0dmFsIDwg
MCkgeworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTM7CisKKwkJCXJldHVybiAoTlVMTCk7CisJCX0K
KwkJLyoKKwkJICogc2luY2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFrZSBzdXJlIHdlIGRvbid0
IGRvdWJsZQorCQkgKiB0aGluZ3MKKwkJICovCisJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKKwor
CQlpZiAoc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKKwkJCQkJCSAgaW5p
dF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJCQkJCQkgIGluaXRh
Y2tfb2Zmc2V0LCBzcmMsIGRzdCwgaW5pdF9zcmMsIHN0Y2ItPmFzb2MucG9ydCkpIHsKKwkJCWlm
IChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVf
aG93W2hvd19pbmR4XSA9IDE0OworCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCS8qIHJlc3Bv
bmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KKwkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0
Y2IpOworCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RjYiwgYXNvYyk7CisJCXNjdHBfc2VuZF9j
b29raWVfYWNrKHN0Y2IpOworCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hv
dykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE1OworCisJCXJldHVybiAoc3Rj
Yik7CisJfQorCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJYXNv
Yy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxNjsKKwkvKiBhbGwgb3RoZXIgY2FzZXMuLi4gKi8K
KwlyZXR1cm4gKE5VTEwpOworfQorCisKKy8qCisgKiBoYW5kbGUgYSBzdGF0ZSBjb29raWUgZm9y
IGEgbmV3IGFzc29jaWF0aW9uIG06IGlucHV0IHBhY2tldCBtYnVmIGNoYWluLS0KKyAqIGFzc3Vt
ZXMgYSBwdWxsdXAgb24gSVAvU0NUUC9DT09LSUUtRUNITyBjaHVuayBub3RlOiB0aGlzIGlzIGEg
InNwbGl0IiBtYnVmCisgKiBhbmQgdGhlIGNvb2tpZSBzaWduYXR1cmUgZG9lcyBub3QgZXhpc3Qg
b2Zmc2V0OiBvZmZzZXQgaW50byBtYnVmIHRvIHRoZQorICogY29va2llLWVjaG8gY2h1bmsgbGVu
Z3RoOiBsZW5ndGggb2YgdGhlIGNvb2tpZSBjaHVuayB0bzogd2hlcmUgdGhlIGluaXQKKyAqIHdh
cyBmcm9tIHJldHVybnMgYSBuZXcgVENCCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgor
c2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBv
ZmZzZXQsCisgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAor
ICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfc3RhdGVfY29va2llICpjb29raWUs
IGludCBjb29raWVfbGVuLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3Rw
X25ldHMgKipuZXRwLAorICAgIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9zcmMsIGludCAqbm90aWZp
Y2F0aW9uLAorICAgIGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1dGhfb2Zmc2V0LCB1aW50
MzJfdCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgIHVpbnQ4X3QgbWZs
b3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisgICAgdWludDMyX3QgdnJmX2lkLCB1
aW50MTZfdCBwb3J0KQoreworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9p
bml0X2NodW5rICppbml0X2NwLCBpbml0X2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVu
ayAqaW5pdGFja19jcCwgaW5pdGFja19idWY7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7
CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJaW50IGluaXRfb2Zmc2V0LCBpbml0
YWNrX29mZnNldCwgaW5pdGFja19saW1pdDsKKwlpbnQgcmV0dmFsOworCWludCBlcnJvciA9IDA7
CisJdWludDhfdCBhdXRoX2NodW5rX2J1ZltTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1
Y3Qgc29ja2V0ICpzbzsKKworCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKyNlbmRpZgorCisJLyoK
KwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVCBjaHVuayBpbiB0aGUgY29va2llIChwZWVy
J3MgaW5mbykgdGhlCisJICogSU5JVCBzaG91bGQgc3RhcnQgYWZ0ZXIgdGhlIGNvb2tpZS1lY2hv
IGhlYWRlciBzdHJ1Y3QgKGNodW5rCisJICogaGVhZGVyLCBzdGF0ZSBjb29raWUgaGVhZGVyIHN0
cnVjdCkKKwkgKi8KKwlpbml0X29mZnNldCA9IG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9j
b29raWVfZWNob19jaHVuayk7CisJaW5pdF9jcCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICop
CisJICAgIHNjdHBfbV9nZXRwdHIobSwgaW5pdF9vZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9p
bml0X2NodW5rKSwKKwkgICAgKHVpbnQ4X3QgKikgJiBpbml0X2J1Zik7CisJaWYgKGluaXRfY3Ag
PT0gTlVMTCkgeworCQkvKiBjb3VsZCBub3QgcHVsbCBhIElOSVQgY2h1bmsgaW4gY29va2llICov
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkicHJvY2Vzc19jb29raWVfbmV3OiBj
b3VsZCBub3QgcHVsbCBJTklUIGNodW5rIGhkclxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQor
CWlmIChpbml0X2NwLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgeworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAiSFVIPyBwcm9jZXNzX2Nvb2tpZV9uZXc6IGNvdWxkIG5v
dCBmaW5kIElOSVQgY2h1bmshXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaW5pdGFja19v
ZmZzZXQgPSBpbml0X29mZnNldCArIFNDVFBfU0laRTMyKG50b2hzKGluaXRfY3AtPmNoLmNodW5r
X2xlbmd0aCkpOworCS8qCisJICogZmluZCBhbmQgdmFsaWRhdGUgdGhlIElOSVQtQUNLIGNodW5r
IGluIHRoZSBjb29raWUgKG15IGluZm8pIHRoZQorCSAqIElOSVQtQUNLIGZvbGxvd3MgdGhlIElO
SVQgY2h1bmsKKwkgKi8KKwlpbml0YWNrX2NwID0gKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5r
ICopCisJICAgIHNjdHBfbV9nZXRwdHIobSwgaW5pdGFja19vZmZzZXQsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9pbml0X2Fja19jaHVuayksCisJICAgICh1aW50OF90ICopICYgaW5pdGFja19idWYpOwor
CWlmIChpbml0YWNrX2NwID09IE5VTEwpIHsKKwkJLyogY291bGQgbm90IHB1bGwgSU5JVC1BQ0sg
Y2h1bmsgaW4gY29va2llICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJwcm9jZXNz
X2Nvb2tpZV9uZXc6IGNvdWxkIG5vdCBwdWxsIElOSVQtQUNLIGNodW5rIGhkclxuIik7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCWlmIChpbml0YWNrX2NwLT5jaC5jaHVua190eXBlICE9IFNDVFBf
SU5JVElBVElPTl9BQ0spIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoKKwkgKiBOT1RFOiBX
ZSBjYW4ndCB1c2UgdGhlIElOSVRfQUNLJ3MgY2hrX2xlbmd0aCB0byBkZXRlcm1pbmUgdGhlCisJ
ICogImluaXRhY2tfbGltaXQiIHZhbHVlLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBjaGtfbGVuZ3Ro
IGZpZWxkCisJICogaW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29va2llLCBidXQgdGhlIGNv
b2tpZSBpcyBvbWl0dGVkIHdoZW4KKwkgKiB0aGUgSU5JVCBhbmQgSU5JVF9BQ0sgYXJlIHRhY2tl
ZCBvbnRvIHRoZSBjb29raWUuLi4KKwkgKi8KKwlpbml0YWNrX2xpbWl0ID0gb2Zmc2V0ICsgY29v
a2llX2xlbjsKKworCS8qCisJICogbm93IHRoYXQgd2Uga25vdyB0aGUgSU5JVC9JTklULUFDSyBh
cmUgaW4gcGxhY2UsIGNyZWF0ZSBhIG5ldyBUQ0IKKwkgKiBhbmQgcG9wbHVhdGUKKwkgKi8KKwor
CS8qCisJICogSGVyZSB3ZSBkbyBhIHRyaWNrLCB3ZSBzZXQgaW4gTlVMTCBmb3IgdGhlIHByb2Mv
dGhyZWFkIGFyZ3VtZW50LiBXZQorCSAqIGRvIHRoaXMgc2luY2UgaW4gZWZmZWN0IHdlIG9ubHkg
dXNlIHRoZSBwIGFyZ3VtZW50IHdoZW4KKwkgKiB0aGUgc29ja2V0IGlzIHVuYm91bmQgYW5kIHdl
IG11c3QgZG8gYW4gaW1wbGljaXQgYmluZC4KKwkgKiBTaW5jZSB3ZSBhcmUgZ2V0dGluZyBhIGNv
b2tpZSwgd2UgY2Fubm90IGJlIHVuYm91bmQuCisJICovCisJc3RjYiA9IHNjdHBfYWxvY19hc3Nv
YyhpbnAsIGluaXRfc3JjLCAmZXJyb3IsCisJICAgICAgICAgICAgICAgICAgICAgICBudG9obChp
bml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZyksIHZyZl9pZCwKKwkgICAgICAgICAgICAgICAg
ICAgICAgIG50b2hzKGluaXRhY2tfY3AtPmluaXQubnVtX291dGJvdW5kX3N0cmVhbXMpLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1
Y3QgdGhyZWFkICopTlVMTAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkgICAgICAgICAg
ICAgICAgICAgICAgIChQS1RIUkVBRClOVUxMCisjZWxzZQorCSAgICAgICAgICAgICAgICAgICAg
ICAgKHN0cnVjdCBwcm9jICopTlVMTAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAp
OworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJc3RydWN0IG1idWYgKm9wX2VycjsKKworCQkvKiBt
ZW1vcnkgcHJvYmxlbT8gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwKKwkJCSJwcm9j
ZXNzX2Nvb2tpZV9uZXc6IG5vIHJvb20gZm9yIGFub3RoZXIgVENCIVxuIik7CisJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQlzY3Rw
X2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsIG0sIGlwaGxl
biwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwg
bWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGdldCB0aGUgY29ycmVjdCBzY3RwX25ldHMgKi8K
KwlpZiAobmV0cCkKKwkJKm5ldHAgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgaW5pdF9zcmMpOworCisJ
YXNvYyA9ICZzdGNiLT5hc29jOworCS8qIGdldCBzY29wZSB2YXJpYWJsZXMgb3V0IG9mIGNvb2tp
ZSAqLworCWFzb2MtPnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSBjb29raWUtPmlwdjRfc2NvcGU7
CisJYXNvYy0+c2NvcGUuc2l0ZV9zY29wZSA9IGNvb2tpZS0+c2l0ZV9zY29wZTsKKwlhc29jLT5z
Y29wZS5sb2NhbF9zY29wZSA9IGNvb2tpZS0+bG9jYWxfc2NvcGU7CisJYXNvYy0+c2NvcGUubG9v
cGJhY2tfc2NvcGUgPSBjb29raWUtPmxvb3BiYWNrX3Njb3BlOworCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWlmICgoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+
aXB2NF9hZGRyX2xlZ2FsKSB8fAorCSAgICAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsICE9
IGNvb2tpZS0+aXB2Nl9hZGRyX2xlZ2FsKSB8fAorCSAgICAoYXNvYy0+c2NvcGUuY29ubl9hZGRy
X2xlZ2FsICE9IGNvb2tpZS0+Y29ubl9hZGRyX2xlZ2FsKSkgeworI2Vsc2UKKwlpZiAoKGFzb2Mt
PnNjb3BlLmlwdjRfYWRkcl9sZWdhbCAhPSBjb29raWUtPmlwdjRfYWRkcl9sZWdhbCkgfHwKKwkg
ICAgKGFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCAhPSBjb29raWUtPmlwdjZfYWRkcl9sZWdh
bCkpIHsKKyNlbmRpZgorCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCisJCS8qCisJCSAqIEhvdXN0
b24gd2UgaGF2ZSBhIHByb2JsZW0uIFRoZSBFUCBjaGFuZ2VkIHdoaWxlIHRoZQorCQkgKiBjb29r
aWUgd2FzIGluIGZsaWdodC4gT25seSByZWNvdXJzZSBpcyB0byBhYm9ydCB0aGUKKwkJICogYXNz
b2NpYXRpb24uCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FV
U0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIChzdHJ1
Y3Qgc2N0cF90Y2IgKilOVUxMLCBtLCBpcGhsZW4sCisJCQkJICAgICAgIHNyYywgZHN0LCBzaCwg
b3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworI2VuZGlmCisJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCisJCQkJICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xP
Q18xOCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJLyogcHJvY2VzcyB0aGUgSU5JVC1BQ0sgaW5mbyAobXkgaW5mbykgKi8KKwlh
c29jLT5teV92dGFnID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpOworCWFz
b2MtPm15X3J3bmQgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmFfcnduZCk7CisJYXNvYy0+cHJl
X29wZW5fc3RyZWFtcyA9IG50b2hzKGluaXRhY2tfY3AtPmluaXQubnVtX291dGJvdW5kX3N0cmVh
bXMpOworCWFzb2MtPmluaXRfc2VxX251bWJlciA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5p
dGlhbF90c24pOworCWFzb2MtPnNlbmRpbmdfc2VxID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgPSBh
c29jLT5zdHJfcmVzZXRfc2VxX291dCA9IGFzb2MtPmluaXRfc2VxX251bWJlcjsKKwlhc29jLT5h
c2NvbmZfc2VxX291dF9hY2tlZCA9IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMTsKKwlhc29jLT5h
c2NvbmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBhc29jLT5pbml0X3NlcV9udW1i
ZXIgLSAxOworCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5pbml0X3NlcV9udW1iZXI7
CisKKwlhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCA9IGFzb2MtPmxhc3RfYWNrZWRfc2Vx
OworCisJLyogcHJvY2VzcyB0aGUgSU5JVCBpbmZvIChwZWVyJ3MgaW5mbykgKi8KKwlpZiAobmV0
cCkKKwkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoaW5pdF9jcCwgc3RjYik7CisJZWxzZQor
CQlyZXR2YWwgPSAwOworCWlmIChyZXR2YWwgPCAwKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCWF0b21pY19hZGRfaW50KCZzdGNi
LT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQkodm9pZClzY3RwX2ZyZWVf
YXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xOSk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisjZW5kaWYKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogbG9hZCBhbGwg
YWRkcmVzc2VzICovCisJaWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0s
CisJICAgIGluaXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLCBpbml0
YWNrX29mZnNldCwKKwkgICAgc3JjLCBkc3QsIGluaXRfc3JjLCBwb3J0KSkgeworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlh
dG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJKHZv
aWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjApOworI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJfQor
CS8qCisJICogdmVyaWZ5IGFueSBwcmVjZWRpbmcgQVVUSCBjaHVuayB0aGF0IHdhcyBza2lwcGVk
CisJICovCisJLyogcHVsbCB0aGUgbG9jYWwgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmcm9t
IHRoZSBjb29raWUvaW5pdC1hY2sgKi8KKwlzY3RwX2F1dGhfZ2V0X2Nvb2tpZV9wYXJhbXMoc3Rj
YiwgbSwKKwkgICAgaW5pdGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tf
Y2h1bmspLAorCSAgICBpbml0YWNrX2xpbWl0IC0gKGluaXRhY2tfb2Zmc2V0ICsgc2l6ZW9mKHN0
cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSkpOworCWlmIChhdXRoX3NraXBwZWQpIHsKKwkJc3Ry
dWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKKworCQlhdXRoID0gKHN0cnVjdCBzY3RwX2F1dGhf
Y2h1bmsgKikKKwkJICAgIHNjdHBfbV9nZXRwdHIobSwgYXV0aF9vZmZzZXQsIGF1dGhfbGVuLCBh
dXRoX2NodW5rX2J1Zik7CisJCWlmICgoYXV0aCA9PSBOVUxMKSB8fCBzY3RwX2hhbmRsZV9hdXRo
KHN0Y2IsIGF1dGgsIG0sIGF1dGhfb2Zmc2V0KSkgeworCQkJLyogYXV0aCBITUFDIGZhaWxlZCwg
ZHVtcCB0aGUgYXNzb2MgYW5kIHBhY2tldCAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgx
LAorCQkJCSJDT09LSUUtRUNITzogQVVUSCBmYWlsZWRcbiIpOworI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVND
VFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQkJKHZvaWQp
c2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzIxKTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXJldHVybiAoTlVMTCk7CisJCX0g
ZWxzZSB7CisJCQkvKiByZW1haW5pbmcgY2h1bmtzIGNoZWNrZWQuLi4gZ29vZCB0byBnbyAqLwor
CQkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMTsKKwkJfQorCX0KKworCS8qCisJICogaWYg
d2UncmUgZG9pbmcgQVNDT05GcywgY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYW55IG5ldyBsb2Nh
bAorCSAqIGFkZHJlc3NlcyB0aGF0IG5lZWQgdG8gZ2V0IGFkZGVkIHRvIHRoZSBwZWVyIChlZy4g
YWRkcmVzc2VzCisJICogY2hhbmdlZCB3aGlsZSBjb29raWUgZWNobyBpbiBmbGlnaHQpLiAgVGhp
cyBuZWVkcyB0byBiZSBkb25lCisJICogYWZ0ZXIgd2UgZ28gdG8gdGhlIE9QRU4gc3RhdGUgdG8g
ZG8gdGhlIGNvcnJlY3QgYXNjb25mCisJICogcHJvY2Vzc2luZy4gZWxzZSwgbWFrZSBzdXJlIHdl
IGhhdmUgdGhlIGNvcnJlY3QgYWRkcmVzc2VzIGluIG91cgorCSAqIGxpc3RzCisJICovCisKKwkv
KiB3YXJuaW5nLCB3ZSByZS11c2Ugc2luLCBzaW42LCBzYV9zdG9yZSBoZXJlISAqLworCS8qIHB1
bGwgaW4gbG9jYWxfYWRkcmVzcyAob3VyICJmcm9tIiBhZGRyZXNzKSAqLworCXN3aXRjaCAoY29v
a2llLT5sYWRkcl90eXBlKSB7CisjaWZkZWYgSU5FVAorCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6
CisJCS8qIHNvdXJjZSBhZGRyIGlzIElQdjQgKi8KKwkJbWVtc2V0KCZzdG9yZS5zaW4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBBRl9J
TkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzdG9yZS5zaW4uc2luX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXN0b3JlLnNpbi5zaW5fYWRkci5zX2FkZHIg
PSBjb29raWUtPmxhZGRyZXNzWzBdOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJLyogc291cmNlIGFkZHIgaXMgSVB2NiAqLworCQlt
ZW1zZXQoJnN0b3JlLnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCXN0
b3JlLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJ
CXN0b3JlLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwkJc3RvcmUuc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5zY29wZV9pZDsKKwkJbWVt
Y3B5KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgY29va2llLT5sYWRkcmVzcywgc2l6ZW9mKHN0cnVj
dCBpbjZfYWRkcikpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwljYXNlIFNDVFBfQ09OTl9BRERSRVNTOgorCQkvKiBzb3VyY2UgYWRkciBpcyBjb25uICov
CisJCW1lbXNldCgmc3RvcmUuc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikp
OworCQlzdG9yZS5zY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NP
Tk5fTEVOCisJCXN0b3JlLnNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7CisjZW5kaWYKKwkJbWVtY3B5KCZzdG9yZS5zY29ubi5zY29ubl9hZGRyLCBjb29raWUt
PmxhZGRyZXNzLCBzaXplb2Yodm9pZCAqKSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
KwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2Vu
ZGlmCisJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0Ms
CisJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9D
XzIyKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQlyZXR1cm4gKE5V
TEwpOworCX0KKworCS8qIHVwZGF0ZSBjdXJyZW50IHN0YXRlICovCisJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMiwgIm1vdmluZyB0byBPUEVOIHN0YXRlXG4iKTsKKwlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX09QRU4pOworCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORykgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTkdVQVJELAorCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKTsKKwl9CisJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOworCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19wYXNzaXZlZXN0YWIpOworCVNDVFBfU1RBVF9JTkNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKworCS8qIHNldCB1cCB0byBub3RpZnkgdXBwZXIg
bGF5ZXIgKi8KKwkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNTT0NfVVA7CisJaWYgKCgo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJ
ICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkpICYmCisJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkpIHsKKwkJLyoKKwkJICogVGhp
cyBpcyBhbiBlbmRwb2ludCB0aGF0IGNhbGxlZCBjb25uZWN0KCkgaG93IGl0IGdvdCBhCisJCSAq
IGNvb2tpZSB0aGF0IGlzIE5FVyBpcyBhIGJpdCBvZiBhIG15c3RlcnkuIEl0IG11c3QgYmUgdGhh
dAorCQkgKiB0aGUgSU5JVCB3YXMgc2VudCwgYnV0IGJlZm9yZSBpdCBnb3QgdGhlcmUuLiBhIGNv
bXBsZXRlCisJCSAqIElOSVQvSU5JVC1BQ0svQ09PS0lFIGFycml2ZWQuIEJ1dCBvZiBjb3Vyc2Ug
dGhlbiBpdAorCQkgKiBzaG91bGQgaGF2ZSB3ZW50IHRvIHRoZSBvdGhlciBjb2RlLi4gbm90IGhl
cmUuLiBvaCB3ZWxsLi4KKwkJICogYSBiaXQgb2YgcHJvdGVjdGlvbiBpcyB3b3J0aCBoYXZpbmcu
LgorCQkgKi8KKwkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19D
T05ORUNURUQ7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBf
VENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQp
IHsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9
CisjZW5kaWYKKwkJc29pc2Nvbm5lY3RlZChzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKChzdGNiLT5zY3RwX2VwLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgICAgICAgIChTQ1RQ
X0lTX0xJU1RFTklORyhpbnApKSkgeworCQkvKgorCQkgKiBXZSBkb24ndCB3YW50IHRvIGRvIGFu
eXRoaW5nIHdpdGggdGhpcyBvbmUuIFNpbmNlIGl0IGlzCisJCSAqIHRoZSBsaXN0ZW5pbmcgZ3V5
LiBUaGUgdGltZXIgd2lsbCBnZXQgc3RhcnRlZCBmb3IKKwkJICogYWNjZXB0ZWQgY29ubmVjdGlv
bnMgaW4gdGhlIGNhbGxlci4KKwkJICovCisJCTsKKwl9CisJLyogc2luY2Ugd2UgZGlkIG5vdCBz
ZW5kIGEgSEIgbWFrZSBzdXJlIHdlIGRvbid0IGRvdWJsZSB0aGluZ3MgKi8KKwlpZiAoKG5ldHAp
ICYmICgqbmV0cCkpCisJCSgqbmV0cCktPmhiX3Jlc3BvbmRlZCA9IDE7CisKKwlpZiAoc3RjYi0+
YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorCSAgICBzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX0FVVE9DTE9TRSwgaW5wLCBzdGNiLCBOVUxMKTsKKwl9CisJKHZvaWQpU0NUUF9H
RVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKKwlpZiAoKG5ldHAgIT0g
TlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCXN0cnVjdCB0aW1ldmFsIG9sZDsKKworCQkv
KiBjYWxjdWxhdGUgdGhlIFJUVCBhbmQgc2V0IHRoZSBlbmNhcHMgcG9ydCAqLworCQlvbGQudHZf
c2VjID0gY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjOworCQlvbGQudHZfdXNlYyA9IGNvb2tp
ZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisJCSgqbmV0cCktPlJUTyA9IHNjdHBfY2FsY3VsYXRl
X3J0byhzdGNiLCBhc29jLCAqbmV0cCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZvbGQsIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCX0KKwkvKiByZXNwb25kIHdpdGgg
YSBDT09LSUUtQUNLICovCisJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7CisKKwkvKgorCSAq
IGNoZWNrIHRoZSBhZGRyZXNzIGxpc3RzIGZvciBhbnkgQVNDT05GcyB0aGF0IG5lZWQgdG8gYmUg
c2VudAorCSAqIEFGVEVSIHRoZSBjb29raWUtYWNrIGlzIHNlbnQKKwkgKi8KKwlzY3RwX2NoZWNr
X2FkZHJlc3NfbGlzdChzdGNiLCBtLAorCSAgICBpbml0YWNrX29mZnNldCArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCisJICAgIGluaXRhY2tfbGltaXQgLSAoaW5pdGFja19v
ZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspKSwKKwkgICAgJnN0b3Jl
LnNhLCBjb29raWUtPmxvY2FsX3Njb3BlLCBjb29raWUtPnNpdGVfc2NvcGUsCisJICAgIGNvb2tp
ZS0+aXB2NF9zY29wZSwgY29va2llLT5sb29wYmFja19zY29wZSk7CisKKworCXJldHVybiAoc3Rj
Yik7Cit9CisKKy8qCisgKiBDT0RFIExJS0UgVEhJUyBORUVEUyBUTyBSVU4gSUYgdGhlIHBlZXIg
c3VwcG9ydHMgdGhlIE5BVCBleHRlbnNpb24sIGkuZQorICogd2UgTkVFRCB0byBtYWtlIHN1cmUg
d2UgYXJlIG5vdCBhbHJlYWR5IHVzaW5nIHRoZSB2dGFnLiBJZiBzbyB3ZQorICogbmVlZCB0byBz
ZW5kIGJhY2sgYW4gQUJPUlQtVFJZLUFHQUlOLVdJVEgtTkVXLVRBRyBObyBtaWRkbGUgYm94IGJp
dCEKKwloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpW1NDVFBfUENCSEFTSF9B
U09DKHRhZywKKwkJCQkJCQkgICAgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOworCUxJ
U1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJICAgICAgICBpZiAoKHN0Y2It
PmFzb2MubXlfdnRhZyA9PSB0YWcpICYmIChzdGNiLT5ycG9ydCA9PSBycG9ydCkgJiYgKGlucCA9
PSBzdGNiLT5zY3RwX2VwKSkgIHsKKwkJICAgICAgIC0tIFNFTkQgQUJPUlQgLSBUUlkgQUdBSU4g
LS0KKwkJfQorCX0KKyovCisKKy8qCisgKiBoYW5kbGVzIGEgQ09PS0lFLUVDSE8gbWVzc2FnZSBz
dGNiOiBtb2RpZmllZCB0byBlaXRoZXIgYSBuZXcgb3IgbGVmdCBhcworICogZXhpc3RpbmcgKG5v
bi1OVUxMKSBUQ0IKKyAqLworc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfaGFuZGxlX2Nvb2tp
ZV9lY2hvKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVj
dCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhk
ciAqc2gsIHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rICpjcCwKKyAgICBzdHJ1Y3Qgc2N0
cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF90Y2IgKipzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICoqbmV0cCwKKyAgICBpbnQgYXV0aF9za2lwcGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWlu
dDMyX3QgYXV0aF9sZW4sCisgICAgc3RydWN0IHNjdHBfdGNiICoqbG9ja2VkX3RjYiwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxv
d2lkLAorI2VuZGlmCisgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXN0
cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llOworCXN0cnVjdCBzY3RwX3RjYiAqbF9zdGNi
ID0gKnN0Y2I7CisJc3RydWN0IHNjdHBfaW5wY2IgKmxfaW5wOworCXN0cnVjdCBzb2NrYWRkciAq
dG87CisJc3RydWN0IHNjdHBfcGNiICplcDsKKwlzdHJ1Y3QgbWJ1ZiAqbV9zaWc7CisJdWludDhf
dCBjYWxjX3NpZ1tTQ1RQX1NJR05BVFVSRV9TSVpFXSwgdG1wX3NpZ1tTQ1RQX1NJR05BVFVSRV9T
SVpFXTsKKwl1aW50OF90ICpzaWc7CisJdWludDhfdCBjb29raWVfb2sgPSAwOworCXVuc2lnbmVk
IGludCBzaWdfb2Zmc2V0LCBjb29raWVfb2Zmc2V0OworCXVuc2lnbmVkIGludCBjb29raWVfbGVu
OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2V4cGlyZXM7CisJ
aW50IG5vdGlmaWNhdGlvbiA9IDA7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0bDsKKwlpbnQgaGFk
X2FfZXhpc3RpbmdfdGNiID0gMDsKKwlpbnQgc2VuZF9pbnRfY29uZiA9IDA7CisjaWZkZWYgSU5F
VAorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVj
dCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNlbmRpZgorCisJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2Nvb2tpZTogaGFuZGxpbmcgQ09PS0lFLUVDSE9c
biIpOworCisJaWYgKGlucF9wID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJY29v
a2llID0gJmNwLT5jb29raWU7CisJY29va2llX29mZnNldCA9IG9mZnNldCArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcik7CisJY29va2llX2xlbiA9IG50b2hzKGNwLT5jaC5jaHVua19sZW5n
dGgpOworCisJaWYgKGNvb2tpZV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfY29va2llX2VjaG9f
Y2h1bmspICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspICsKKwkgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSArIFNDVFBfU0lHTkFUVVJFX1NJWkUpIHsK
KwkJLyogY29va2llIHRvbyBzbWFsbCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKGNv
b2tpZS0+cGVlcnBvcnQgIT0gc2gtPnNyY19wb3J0KSB8fAorCSAgICAoY29va2llLT5teXBvcnQg
IT0gc2gtPmRlc3RfcG9ydCkgfHwKKwkgICAgKGNvb2tpZS0+bXlfdnRhZyAhPSBzaC0+dl90YWcp
KSB7CisJCS8qCisJCSAqIGludmFsaWQgcG9ydHMgb3IgYmFkIHRhZy4gIE5vdGUgdGhhdCB3ZSBh
bHdheXMgbGVhdmUgdGhlCisJCSAqIHZfdGFnIGluIHRoZSBoZWFkZXIgaW4gbmV0d29yayBvcmRl
ciBhbmQgd2hlbiB3ZSBzdG9yZWQKKwkJICogaXQgaW4gdGhlIG15X3Z0YWcgc2xvdCB3ZSBhbHNv
IGxlZnQgaXQgaW4gbmV0d29yayBvcmRlci4KKwkJICogVGhpcyBtYWludGFpbnMgdGhlIG1hdGNo
IGV2ZW4gdGhvdWdoIGl0IG1heSBiZSBpbiB0aGUKKwkJICogb3Bwb3NpdGUgYnl0ZSBvcmRlciBv
ZiB0aGUgbWFjaGluZSA6LT4KKwkJICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICog
c3BsaXQgb2ZmIHRoZSBzaWduYXR1cmUgaW50byBpdHMgb3duIG1idWYgKHNpbmNlIGl0IHNob3Vs
ZCBub3QgYmUKKwkgKiBjYWxjdWxhdGVkIGluIHRoZSBzY3RwX2htYWNfbSgpIGNhbGwpLgorCSAq
LworCXNpZ19vZmZzZXQgPSBvZmZzZXQgKyBjb29raWVfbGVuIC0gU0NUUF9TSUdOQVRVUkVfU0la
RTsKKwltX3NpZyA9IG1fc3BsaXQobSwgc2lnX29mZnNldCwgTV9OT1dBSVQpOworCWlmIChtX3Np
ZyA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1vcnkgb3IgPz8gKi8KKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBf
bG9nX21iYyhtX3NpZywgU0NUUF9NQlVGX1NQTElUKTsKKwl9CisjZW5kaWYKKworCS8qCisJICog
Y29tcHV0ZSB0aGUgc2lnbmF0dXJlL2RpZ2VzdCBmb3IgdGhlIGNvb2tpZQorCSAqLworCWVwID0g
JigqaW5wX3ApLT5zY3RwX2VwOworCWxfaW5wID0gKmlucF9wOworCWlmIChsX3N0Y2IpIHsKKwkJ
U0NUUF9UQ0JfVU5MT0NLKGxfc3RjYik7CisJfQorCVNDVFBfSU5QX1JMT0NLKGxfaW5wKTsKKwlp
ZiAobF9zdGNiKSB7CisJCVNDVFBfVENCX0xPQ0sobF9zdGNiKTsKKwl9CisJLyogd2hpY2ggY29v
a2llIGlzIGl0PyAqLworCWlmICgoY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjIDwgKGxvbmcp
ZXAtPnRpbWVfb2Zfc2VjcmV0X2NoYW5nZSkgJiYKKwkgICAgKGVwLT5jdXJyZW50X3NlY3JldF9u
dW1iZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJLyogaXQncyB0aGUgb2xkIGNv
b2tpZSAqLworCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCisJCSAgICAodWludDhfdCAq
KWVwLT5zZWNyZXRfa2V5WyhpbnQpZXAtPmxhc3Rfc2VjcmV0X251bWJlcl0sCisJCSAgICBTQ1RQ
X1NFQ1JFVF9TSVpFLCBtLCBjb29raWVfb2Zmc2V0LCBjYWxjX3NpZywgMCk7CisJfSBlbHNlIHsK
KwkJLyogaXQncyB0aGUgY3VycmVudCBjb29raWUgKi8KKwkJKHZvaWQpc2N0cF9obWFjX20oU0NU
UF9ITUFDLAorCQkgICAgKHVpbnQ4X3QgKillcC0+c2VjcmV0X2tleVsoaW50KWVwLT5jdXJyZW50
X3NlY3JldF9udW1iZXJdLAorCQkgICAgU0NUUF9TRUNSRVRfU0laRSwgbSwgY29va2llX29mZnNl
dCwgY2FsY19zaWcsIDApOworCX0KKwkvKiBnZXQgdGhlIHNpZ25hdHVyZSAqLworCVNDVFBfSU5Q
X1JVTkxPQ0sobF9pbnApOworCXNpZyA9ICh1aW50OF90ICopIHNjdHBfbV9nZXRwdHIobV9zaWcs
IDAsIFNDVFBfU0lHTkFUVVJFX1NJWkUsICh1aW50OF90ICopICYgdG1wX3NpZyk7CisJaWYgKHNp
ZyA9PSBOVUxMKSB7CisJCS8qIGNvdWxkbid0IGZpbmQgc2lnbmF0dXJlICovCisJCXNjdHBfbV9m
cmVlbShtX3NpZyk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGNvbXBhcmUgdGhlIHJlY2Vp
dmVkIGRpZ2VzdCB3aXRoIHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KKwlpZiAobWVtY21wKGNhbGNf
c2lnLCBzaWcsIFNDVFBfU0lHTkFUVVJFX1NJWkUpICE9IDApIHsKKwkJLyogdHJ5IHRoZSBvbGQg
Y29va2llPyAqLworCQlpZiAoKGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3NlYyA9PSAobG9uZyll
cC0+dGltZV9vZl9zZWNyZXRfY2hhbmdlKSAmJgorCQkgICAgKGVwLT5jdXJyZW50X3NlY3JldF9u
dW1iZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJCS8qIGNvbXB1dGUgZGlnZXN0
IHdpdGggb2xkICovCisJCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCisJCQkgICAgKHVp
bnQ4X3QgKillcC0+c2VjcmV0X2tleVsoaW50KWVwLT5sYXN0X3NlY3JldF9udW1iZXJdLAorCQkJ
ICAgIFNDVFBfU0VDUkVUX1NJWkUsIG0sIGNvb2tpZV9vZmZzZXQsIGNhbGNfc2lnLCAwKTsKKwkJ
CS8qIGNvbXBhcmUgKi8KKwkJCWlmIChtZW1jbXAoY2FsY19zaWcsIHNpZywgU0NUUF9TSUdOQVRV
UkVfU0laRSkgPT0gMCkKKwkJCQljb29raWVfb2sgPSAxOworCQl9CisJfSBlbHNlIHsKKwkJY29v
a2llX29rID0gMTsKKwl9CisKKwkvKgorCSAqIE5vdyBiZWZvcmUgd2UgY29udGludWUgd2UgbXVz
dCByZWNvbnN0cnVjdCBvdXIgbWJ1ZiBzbyB0aGF0CisJICogbm9ybWFsIHByb2Nlc3Npbmcgb2Yg
YW55IG90aGVyIGNodW5rcyB3aWxsIHdvcmsuCisJICovCisJeworCQlzdHJ1Y3QgbWJ1ZiAqbV9h
dDsKKworCQltX2F0ID0gbTsKKwkJd2hpbGUgKFNDVFBfQlVGX05FWFQobV9hdCkgIT0gTlVMTCkg
eworCQkJbV9hdCA9IFNDVFBfQlVGX05FWFQobV9hdCk7CisJCX0KKwkJU0NUUF9CVUZfTkVYVCht
X2F0KSA9IG1fc2lnOworCX0KKworCWlmIChjb29raWVfb2sgPT0gMCkgeworCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQyLCAiaGFuZGxlX2Nvb2tpZV9lY2hvOiBjb29raWUgc2lnbmF0dXJlIHZh
bGlkYXRpb24gZmFpbGVkIVxuIik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCQki
b2Zmc2V0ID0gJXUsIGNvb2tpZV9vZmZzZXQgPSAldSwgc2lnX29mZnNldCA9ICV1XG4iLAorCQkJ
KHVpbnQzMl90KSBvZmZzZXQsIGNvb2tpZV9vZmZzZXQsIHNpZ19vZmZzZXQpOworCQlyZXR1cm4g
KE5VTEwpOworCX0KKworCS8qCisJICogY2hlY2sgdGhlIGNvb2tpZSB0aW1lc3RhbXBzIHRvIGJl
IHN1cmUgaXQncyBub3Qgc3RhbGUKKwkgKi8KKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgm
bm93KTsKKwkvKiBFeHBpcmUgdGltZSBpcyBpbiBUaWNrcywgc28gd2UgY29udmVydCB0byBzZWNv
bmRzICovCisJdGltZV9leHBpcmVzLnR2X3NlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3Nl
YyArIFRJQ0tTX1RPX1NFQyhjb29raWUtPmNvb2tpZV9saWZlKTsKKwl0aW1lX2V4cGlyZXMudHZf
dXNlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisjaWZuZGVmIF9fRnJlZUJTRF9f
CisJaWYgKHRpbWVyY21wKCZub3csICZ0aW1lX2V4cGlyZXMsID4pKQorI2Vsc2UKKwlpZiAodGlt
ZXZhbGNtcCgmbm93LCAmdGltZV9leHBpcmVzLCA+KSkKKyNlbmRpZgorCXsKKwkJLyogY29va2ll
IGlzIHN0YWxlISAqLworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQlzdHJ1Y3Qgc2N0cF9lcnJv
cl9zdGFsZV9jb29raWUgKmNhdXNlOworCQlzdHJ1Y3QgdGltZXZhbCBkaWZmOworCQl1aW50MzJf
dCBzdGFsZW5lc3M7CisKKwkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihz
dHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAob3BfZXJyID09IE5VTEwp
IHsKKwkJCS8qIEZPT0JBUiAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQkvKiBTZXQgdGhl
IGxlbiAqLworCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJv
cl9zdGFsZV9jb29raWUpOworCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJv
cl9zdGFsZV9jb29raWUgKik7CisJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVT
RV9TVEFMRV9DT09LSUUpOworCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoKHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKworCQkgICAgKHNpemVvZih1aW50MzJfdCkpKSk7CisjaWZu
ZGVmIF9fRnJlZUJTRF9fCisJCXRpbWVyc3ViKCZub3csICZ0aW1lX2V4cGlyZXMsICZkaWZmKTsK
KyNlbHNlCisJCWRpZmYgPSBub3c7CisJCXRpbWV2YWxzdWIoJmRpZmYsICZ0aW1lX2V4cGlyZXMp
OworI2VuZGlmCisJCWlmICgodWludDMyX3QpZGlmZi50dl9zZWMgPiBVSU5UMzJfTUFYIC8gMTAw
MDAwMCkgeworCQkJc3RhbGVuZXNzID0gVUlOVDMyX01BWDsKKwkJfSBlbHNlIHsKKwkJCXN0YWxl
bmVzcyA9IGRpZmYudHZfc2VjICogMTAwMDAwMDsKKwkJfQorCQlpZiAoVUlOVDMyX01BWCAtIHN0
YWxlbmVzcyA+PSAodWludDMyX3QpZGlmZi50dl91c2VjKSB7CisJCQlzdGFsZW5lc3MgKz0gZGlm
Zi50dl91c2VjOworCQl9IGVsc2UgeworCQkJc3RhbGVuZXNzID0gVUlOVDMyX01BWDsKKwkJfQor
CQljYXVzZS0+c3RhbGVfdGltZSA9IGh0b25sKHN0YWxlbmVzcyk7CisJCXNjdHBfc2VuZF9vcGVy
cl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3BfZXJyLAorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQs
IGxfaW5wLT5maWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9y
dCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogTm93IHdlIG11c3Qgc2VlIHdpdGgg
dGhlIGxvb2t1cCBhZGRyZXNzIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcKKwkgKiBhc29jLiBUaGlz
IHdpbGwgb25seSBoYXBwZW4gaWYgd2Ugd2VyZSBpbiB0aGUgQ09PS0lFLVdBSVQgc3RhdGUKKwkg
KiBhbmQgYSBJTklUIGNvbGxpZGVkIHdpdGggdXMgYW5kIHNvbWV3aGVyZSB0aGUgcGVlciBzZW50
IHRoZQorCSAqIGNvb2tpZSBvbiBhbm90aGVyIGFkZHJlc3MgYmVzaWRlcyB0aGUgc2luZ2xlIGFk
ZHJlc3Mgb3VyIGFzc29jCisJICogaGFkIGZvciBoaW0uIEluIHRoaXMgY2FzZSB3ZSB3aWxsIGhh
dmUgb25lIG9mIHRoZSB0aWUtdGFncyBzZXQgYXQKKwkgKiBsZWFzdCBBTkQgdGhlIGFkZHJlc3Mg
ZmllbGQgaW4gdGhlIGNvb2tpZSBjYW4gYmUgdXNlZCB0byBsb29rIGl0CisJICogdXAuCisJICov
CisJdG8gPSBOVUxMOworCXN3aXRjaCAoY29va2llLT5hZGRyX3R5cGUpIHsKKyNpZmRlZiBJTkVU
NgorCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHNp
bjYpKTsKKwkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9M
RU4KKwkJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRpZgorCQlzaW42LnNpbjZf
cG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5zY29w
ZV9pZDsKKwkJbWVtY3B5KCZzaW42LnNpbjZfYWRkci5zNl9hZGRyLCBjb29raWUtPmFkZHJlc3Ms
CisJCSAgICBzaXplb2Yoc2luNi5zaW42X2FkZHIuczZfYWRkcikpOworCQl0byA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luNjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBT
Q1RQX0lQVjRfQUREUkVTUzoKKwkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4pKTsKKwkJc2lu
LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzaW4uc2luX2xl
biA9IHNpemVvZihzaW4pOworI2VuZGlmCisJCXNpbi5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsK
KwkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+YWRkcmVzc1swXTsKKwkJdG8gPSAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJY2FzZSBTQ1RQX0NPTk5fQUREUkVTUzoKKwkJbWVtc2V0KCZzY29ubiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCXNjb25uLnNjb25uX2ZhbWlseSA9IEFG
X0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwkJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlzY29ubi5zY29ubl9wb3J0ID0gc2gt
PnNyY19wb3J0OworCQltZW1jcHkoJnNjb25uLnNjb25uX2FkZHIsIGNvb2tpZS0+YWRkcmVzcywg
c2l6ZW9mKHZvaWQgKikpOworCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm47CisJCWJy
ZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBlbiAqLwor
CQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKnN0Y2IgPT0gTlVMTCkgeworCQkvKiBZZXAsIGxl
dHMgY2hlY2sgKi8KKwkJKnN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9w
LCB0bywgbmV0cCwgZHN0LCBOVUxMKTsKKwkJaWYgKCpzdGNiID09IE5VTEwpIHsKKwkJCS8qCisJ
CQkgKiBXZSBzaG91bGQgaGF2ZSBvbmx5IGdvdCBiYWNrIHRoZSBzYW1lIGlucC4gSWYgd2UKKwkJ
CSAqIGdvdCBiYWNrIGEgZGlmZmVyZW50IGVwIHdlIGhhdmUgYSBwcm9ibGVtLiBUaGUKKwkJCSAq
IG9yaWdpbmFsIGZpbmRlcCBnb3QgYmFjayBsX2lucCBhbmQgbm93CisJCQkgKi8KKwkJCWlmIChs
X2lucCAhPSAqaW5wX3ApIHsKKwkJCQlTQ1RQX1BSSU5URigiQmFkIHByb2JsZW0gZmluZF9lcCBn
b3QgYSBkaWZmIGlucCB0aGVuIHNwZWNpYWxfbG9jYXRlP1xuIik7CisJCQl9CisJCX0gZWxzZSB7
CisJCQlpZiAoKmxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCS8qIEluIHRoaXMgY2FzZSB3ZSBm
b3VuZCB0aGUgYXNzb2Mgb25seQorCQkJCSAqIGFmdGVyIHdlIGxvY2tlZCB0aGUgY3JlYXRlIGxv
Y2suIFRoaXMgbWVhbnMKKwkJCQkgKiB3ZSBhcmUgaW4gYSBjb2xsaWRpbmcgY2FzZSBhbmQgd2Ug
bXVzdCBtYWtlCisJCQkJICogc3VyZSB0aGF0IHdlIHVubG9jayB0aGUgdGNiIGlmIGl0cyBvbmUg
b2YgdGhlCisJCQkJICogY2FzZXMgd2hlcmUgd2UgdGhyb3cgYXdheSB0aGUgaW5jb21pbmcgcGFj
a2V0cy4KKwkJCQkgKi8KKwkJCQkqbG9ja2VkX3RjYiA9ICpzdGNiOworCisJCQkJLyogV2UgbXVz
dCBhbHNvIGluY3JlbWVudCB0aGUgaW5wIHJlZiBjb3VudAorCQkJCSAqIHNpbmNlIHRoZSByZWZf
Y291bnQgZmxhZ3Mgd2FzIHNldCB3aGVuIHdlCisJCQkJICogZGlkIG5vdCBmaW5kIHRoZSBUQ0Is
IG5vdyB3ZSBmb3VuZCBpdCB3aGljaAorCQkJCSAqIHJlZHVjZXMgdGhlIHJlZmNvdW50Li4gd2Ug
bXVzdCByYWlzZSBpdCBiYWNrCisJCQkJICogb3V0IHRvIGJhbGFuY2UgaXQgYWxsIDotKQorCQkJ
CSAqLworCQkJCVNDVFBfSU5QX0lOQ1JfUkVGKCgqc3RjYiktPnNjdHBfZXApOworCQkJCWlmICgo
KnN0Y2IpLT5zY3RwX2VwICE9IGxfaW5wKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJIdWg/IGVwOiVw
IGRpZmYgdGhlbiBsX2lucDolcD9cbiIsCisJCQkJCQkgICAgKHZvaWQgKikoKnN0Y2IpLT5zY3Rw
X2VwLCAodm9pZCAqKWxfaW5wKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisKKwljb29raWVfbGVu
IC09IFNDVFBfU0lHTkFUVVJFX1NJWkU7CisJaWYgKCpzdGNiID09IE5VTEwpIHsKKwkJLyogdGhp
cyBpcyB0aGUgIm5vcm1hbCIgY2FzZS4uLiBnZXQgYSBuZXcgVENCICovCisJCSpzdGNiID0gc2N0
cF9wcm9jZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0LCBzaCwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsIGNvb2tpZV9sZW4sICppbnBf
cCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCB0bywgJm5vdGlmaWNh
dGlvbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBwZWQsIGF1
dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJfSBlbHNlIHsK
KwkJLyogdGhpcyBpcyBhYm5vcm1hbC4uLiBjb29raWUtZWNobyBvbiBleGlzdGluZyBUQ0IgKi8K
KwkJaGFkX2FfZXhpc3RpbmdfdGNiID0gMTsKKwkJKnN0Y2IgPSBzY3RwX3Byb2Nlc3NfY29va2ll
X2V4aXN0aW5nKG0sIGlwaGxlbiwgb2Zmc2V0LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3JjLCBkc3QsIHNoLAorCQkJCQkJICAgICBjb29raWUsIGNvb2tpZV9sZW4s
ICppbnBfcCwgKnN0Y2IsIG5ldHAsIHRvLAorCQkJCQkJICAgICAmbm90aWZpY2F0aW9uLCBhdXRo
X3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxv
d2lkLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZf
aWQsIHBvcnQpOworCX0KKworCWlmICgqc3RjYiA9PSBOVUxMKSB7CisJCS8qIHN0aWxsIG5vIFRD
Qi4uLiBtdXN0IGJlIGJhZCBjb29raWUtZWNobyAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlmICgqbmV0cCAhPSBOVUxMKSB7CisJCSgqbmV0cCkt
PmZsb3d0eXBlID0gbWZsb3d0eXBlOworCQkoKm5ldHApLT5mbG93aWQgPSBtZmxvd2lkOworCX0K
KyNlbmRpZgorCS8qCisJICogT2ssIHdlIGJ1aWx0IGFuIGFzc29jaWF0aW9uIHNvIGNvbmZpcm0g
dGhlIGFkZHJlc3Mgd2Ugc2VudCB0aGUKKwkgKiBJTklULUFDSyB0by4KKwkgKi8KKwluZXRsID0g
c2N0cF9maW5kbmV0KCpzdGNiLCB0byk7CisJLyoKKwkgKiBUaGlzIGNvZGUgc2hvdWxkIGluIHRo
ZW9yeSBOT1QgcnVuIGJ1dAorCSAqLworCWlmIChuZXRsID09IE5VTEwpIHsKKwkJLyogVFNOSCEg
SHVoLCB3aHkgZG8gSSBuZWVkIHRvIGFkZCB0aGlzIGFkZHJlc3MgaGVyZT8gKi8KKwkJaWYgKHNj
dHBfYWRkX3JlbW90ZV9hZGRyKCpzdGNiLCB0bywgTlVMTCwgcG9ydCwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfSU5fQ09PS0lFX1BST0MpKSB7
CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCW5ldGwgPSBzY3RwX2ZpbmRuZXQoKnN0Y2IsIHRv
KTsKKwl9CisJaWYgKG5ldGwpIHsKKwkJaWYgKG5ldGwtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
VU5DT05GSVJNRUQpIHsKKwkJCW5ldGwtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJ
Uk1FRDsKKwkJCSh2b2lkKXNjdHBfc2V0X3ByaW1hcnlfYWRkcigoKnN0Y2IpLCAoc3RydWN0IHNv
Y2thZGRyICopTlVMTCwKKwkJCSAgICBuZXRsKTsKKwkJCXNlbmRfaW50X2NvbmYgPSAxOworCQl9
CisJfQorCXNjdHBfc3RhcnRfbmV0X3RpbWVycygqc3RjYik7CisJaWYgKCgqaW5wX3ApLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlpZiAoIWhhZF9hX2V4aXN0aW5n
X3RjYiB8fAorCQkgICAgKCgoKmlucF9wKS0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NP
Tk5FQ1RFRCkgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBoYXZlIGEgTkVXIGNvb2tpZSBv
ciB0aGUgY29ubmVjdCBuZXZlcgorCQkJICogcmVhY2hlZCB0aGUgY29ubmVjdGVkIHN0YXRlIGR1
cmluZyBjb2xsaXNpb24gd2UKKwkJCSAqIG11c3QgZG8gdGhlIFRDUCBhY2NlcHQgdGhpbmcuCisJ
CQkgKi8KKwkJCXN0cnVjdCBzb2NrZXQgKnNvLCAqb3NvOworCQkJc3RydWN0IHNjdHBfaW5wY2Ig
KmlucDsKKworCQkJaWYgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9BU1NPQ19SRVNUQVJU
KSB7CisJCQkJLyoKKwkJCQkgKiBGb3IgYSByZXN0YXJ0IHdlIHdpbGwga2VlcCB0aGUgc2FtZQor
CQkJCSAqIHNvY2tldCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZy4gSSBUSElOSyEhCisJCQkJICov
CisJCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0Y2IsIDAsIE5VTEwsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCQkJaWYgKHNlbmRfaW50X2NvbmYpIHsKKwkJCQkJc2N0cF91bHBf
bm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCisJCQkJCSAgICAgICAgICAg
ICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJ
fQorCQkJCXJldHVybiAobSk7CisJCQl9CisJCQlvc28gPSAoKmlucF9wKS0+c2N0cF9zb2NrZXQ7
CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAw
KQorCQkJLyoKKwkJCSAqIFdlIGRvIHRoaXMgdG8ga2VlcCB0aGUgc29ja2V0cyBzaWRlIGhhcHB5
IGR1cmluZworCQkJICogdGhlIHNvbmV3Y29uIE9OTFkuCisJCQkgKi8KKwkJCU5FVF9MT0NLX0dJ
QU5UKCk7CisjZW5kaWYKKwkJCWF0b21pY19hZGRfaW50KCYoKnN0Y2IpLT5hc29jLnJlZmNudCwg
MSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soKCpzdGNiKSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlDVVJWTkVUX1NFVChvc28tPnNv
X3ZuZXQpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQlTQ1RQX1NPQ0tFVF9M
T0NLKG9zbywgMSk7CisjZW5kaWYKKwkJCXNvID0gc29uZXdjb25uKG9zbywgMAorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQorCQkJICAgICxOVUxMCisjZW5kaWYKKyNpZmRlZiBfX1BhbmRhX18KKwkJ
CSAgICAgLE5VTEwgLCAoKmlucF9wKS0+ZGVmX3ZyZl9pZAorI2VuZGlmCisJCQkgICAgKTsKKyNp
ZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDApCisJ
CQlORVRfVU5MT0NLX0dJQU5UKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJ
CVNDVFBfU09DS0VUX1VOTE9DSyhvc28sIDEpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlDVVJWTkVUX1JFU1RPUkUo
KTsKKyNlbmRpZgorCQkJU0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKKwkJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKKworCQkJaWYgKHNvID09IE5VTEwpIHsK
KwkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJCXN0cnVjdCBzb2NrZXQgKnBjYl9zbzsKKyNl
bmRpZgorCQkJCS8qIFRvbyBtYW55IHNvY2tldHMgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
SU5QVVQxLCAicHJvY2Vzc19jb29raWVfbmV3OiBubyByb29tIGZvciBhbm90aGVyIHNvY2tldCFc
biIpOworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0Zf
UkVTQywgIiIpOworCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oKmlucF9wLCBOVUxMLCBtLCBp
cGhsZW4sCisJCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dp
ZCwKKyNlbmRpZgorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJ
CQlwY2Jfc28gPSBTQ1RQX0lOUF9TTygqaW5wX3ApOworCQkJCWF0b21pY19hZGRfaW50KCYoKnN0
Y2IpLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOworCQkJ
CVNDVFBfU09DS0VUX0xPQ0socGNiX3NvLCAxKTsKKwkJCQlTQ1RQX1RDQl9MT0NLKCgqc3RjYikp
OworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKKyNl
bmRpZgorCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYygqaW5wX3AsICpzdGNiLCBTQ1RQX05PUk1B
TF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCAr
IFNDVFBfTE9DXzIzKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0socGNiX3NvLCAxKTsKKyNlbmRp
ZgorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2Ig
Kilzby0+c29fcGNiOworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJCS8qCisJCQkgKiBX
ZSBhZGQgdGhlIHVuYm91bmQgZmxhZyBoZXJlIHNvIHRoYXQKKwkJCSAqIGlmIHdlIGdldCBhbiBz
b2Fib3J0KCkgYmVmb3JlIHdlIGdldCB0aGUKKwkJCSAqIG1vdmVfcGNiIGRvbmUsIHdlIHdpbGwg
cHJvcGVybHkgY2xlYW51cC4KKwkJCSAqLworCQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENC
X0ZMQUdTX1RDUFRZUEUgfAorCQkJICAgIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCB8CisJCQkg
ICAgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCB8CisJCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5C
T1VORCB8CisJCQkgICAgKFNDVFBfUENCX0NPUFlfRkxBR1MgJiAoKmlucF9wKS0+c2N0cF9mbGFn
cykgfAorCQkJICAgIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSk7CisJCQlpbnAtPnNjdHBfZmVh
dHVyZXMgPSAoKmlucF9wKS0+c2N0cF9mZWF0dXJlczsKKwkJCWlucC0+c2N0cF9tb2JpbGl0eV9m
ZWF0dXJlcyA9ICgqaW5wX3ApLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzOworCQkJaW5wLT5zY3Rw
X3NvY2tldCA9IHNvOworCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoKmlucF9wKS0+c2N0cF9m
cmFnX3BvaW50OworCQkJaW5wLT5tYXhfY3duZCA9ICgqaW5wX3ApLT5tYXhfY3duZDsKKwkJCWlu
cC0+c2N0cF9jbXRfb25fb2ZmID0gKCppbnBfcCktPnNjdHBfY210X29uX29mZjsKKwkJCWlucC0+
ZWNuX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5lY25fc3VwcG9ydGVkOworCQkJaW5wLT5wcnNjdHBf
c3VwcG9ydGVkID0gKCppbnBfcCktPnByc2N0cF9zdXBwb3J0ZWQ7CisJCQlpbnAtPmF1dGhfc3Vw
cG9ydGVkID0gKCppbnBfcCktPmF1dGhfc3VwcG9ydGVkOworCQkJaW5wLT5hc2NvbmZfc3VwcG9y
dGVkID0gKCppbnBfcCktPmFzY29uZl9zdXBwb3J0ZWQ7CisJCQlpbnAtPnJlY29uZmlnX3N1cHBv
cnRlZCA9ICgqaW5wX3ApLT5yZWNvbmZpZ19zdXBwb3J0ZWQ7CisJCQlpbnAtPm5yc2Fja19zdXBw
b3J0ZWQgPSAoKmlucF9wKS0+bnJzYWNrX3N1cHBvcnRlZDsKKwkJCWlucC0+cGt0ZHJvcF9zdXBw
b3J0ZWQgPSAoKmlucF9wKS0+cGt0ZHJvcF9zdXBwb3J0ZWQ7CisJCQlpbnAtPnBhcnRpYWxfZGVs
aXZlcnlfcG9pbnQgPSAoKmlucF9wKS0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsKKwkJCWlucC0+
c2N0cF9jb250ZXh0ID0gKCppbnBfcCktPnNjdHBfY29udGV4dDsKKwkJCWlucC0+bG9jYWxfc3Ry
cmVzZXRfc3VwcG9ydCA9ICgqaW5wX3ApLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCQkJaW5w
LT5maWJudW0gPSAoKmlucF9wKS0+ZmlibnVtOworCQkJaW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRf
Zm9yX2l0ZXJhdG9yID0gTlVMTDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpbnAt
PnVscF9pbmZvID0gKCppbnBfcCktPnVscF9pbmZvOworCQkJaW5wLT5yZWN2X2NhbGxiYWNrID0g
KCppbnBfcCktPnJlY3ZfY2FsbGJhY2s7CisJCQlpbnAtPnNlbmRfY2FsbGJhY2sgPSAoKmlucF9w
KS0+c2VuZF9jYWxsYmFjazsKKwkJCWlucC0+c2VuZF9zYl90aHJlc2hvbGQgPSAoKmlucF9wKS0+
c2VuZF9zYl90aHJlc2hvbGQ7CisjZW5kaWYKKwkJCS8qCisJCQkgKiBjb3B5IGluIHRoZSBhdXRo
ZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCisJCQkgKiBvcmlnaW5hbCBlbmRwb2ludAor
CQkJICovCisJCQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQorCQkJCXNjdHBfZnJlZV9o
bWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCQkJaW5wLT5zY3RwX2VwLmxvY2Fs
X2htYWNzID0KKwkJCSAgICBzY3RwX2NvcHlfaG1hY2xpc3QoKCppbnBfcCktPnNjdHBfZXAubG9j
YWxfaG1hY3MpOworCQkJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcykKKwkJCQlz
Y3RwX2ZyZWVfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJCQlp
bnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQorCQkJICAgIHNjdHBfY29weV9jaHVua2xp
c3QoKCppbnBfcCktPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCisJCQkvKgorCQkJICog
Tm93IHdlIG11c3QgbW92ZSBpdCBmcm9tIG9uZSBoYXNoIHRhYmxlIHRvCisJCQkgKiBhbm90aGVy
IGFuZCBnZXQgdGhlIHRjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCisJCQkgKi8KKworCQkJLyogVGhp
cyBpcyB3aGVyZSB0aGUgb25lLTItb25lIHNvY2tldCBpcyBwdXQgaW50bworCQkJICogdGhlIGFj
Y2VwdCBzdGF0ZSB3YWl0aW5nIGZvciB0aGUgYWNjZXB0IQorCQkJICovCisJCQlpZiAoKnN0Y2Ip
IHsKKwkJCQkoKnN0Y2IpLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVF
OworCQkJfQorCQkJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoKmlucF9wLCBpbnAsICpzdGNiKTsK
KworCQkJYXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBf
VENCX1VOTE9DSygoKnN0Y2IpKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQlzY3Rw
X3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9wKSwgaW5wLCAqc3RjYiwKKwkJCSAg
ICAwKTsKKyNlbHNlCisJCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9w
KSwgaW5wLCAqc3RjYiwgTV9OT1dBSVQpOworI2VuZGlmCisJCQlTQ1RQX1RDQl9MT0NLKCgqc3Rj
YikpOworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZjbnQsIDEpOwor
CisKKwkJCS8qIG5vdyB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB3ZSB3ZXJlIGFib3J0ZWQgd2hp
bGUKKwkJCSAqIHRoZSBtb3ZlIHdhcyBnb2luZyBvbiBhbmQgdGhlIGxvY2svdW5sb2NrIGhhcHBl
bmVkLgorCQkJICovCisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUpIHsKKwkJCQkvKiB5ZXAgaXQgd2FzLCB3ZSBsZWF2ZSB0aGUKKwkJCQkgKiBhc3Nv
YyBhdHRhY2hlZCB0byB0aGUgc29ja2V0IHNpbmNlCisJCQkJICogdGhlIHNjdHBfaW5wY2JfZnJl
ZSgpIGNhbGwgd2lsbCBzZW5kCisJCQkJICogYW4gYWJvcnQgZm9yIHVzLgorCQkJCSAqLworCQkJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkvKiBTd2l0Y2ggb3ZlciB0byB0aGUgbmV3IGd1eSAq
LworCQkJKmlucF9wID0gaW5wOworCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0
Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlpZiAoc2VuZF9pbnRfY29uZikg
eworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAor
CQkJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7CisJCQl9CisKKwkJCS8qIFB1bGwgaXQgZnJvbSB0aGUgaW5jb21wbGV0ZSBxdWV1
ZSBhbmQgd2FrZSB0aGUgZ3V5ICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQlhdG9taWNfYWRkX2ludCgmKCpzdGNiKS0+YXNvYy5y
ZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOworCQkJU0NUUF9TT0NLRVRf
TE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXNvaXNjb25uZWN0ZWQoc28pOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJU0NUUF9UQ0Jf
TE9DSygoKnN0Y2IpKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVm
Y250LCAxKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXJldHVy
biAobSk7CisJCX0KKwl9CisJaWYgKG5vdGlmaWNhdGlvbikgeworCQlzY3RwX3VscF9ub3RpZnko
bm90aWZpY2F0aW9uLCAqc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJ
aWYgKHNlbmRfaW50X2NvbmYpIHsKKwkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVS
RkFDRV9DT05GSVJNRUQsCisJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5l
dGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorCXJldHVybiAobSk7Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2hhbmRsZV9jb29raWVfYWNrKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmsg
KmNwIFNDVFBfVU5VU0VELAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0KQoreworCS8qIGNwIG11c3Qgbm90IGJlIHVzZWQsIG90aGVycyBjYWxsIHRoaXMg
d2l0aG91dCBhIGMtYWNrIDotKSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwor
CisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2Nvb2tpZV9hY2s6
IGhhbmRsaW5nIENPT0tJRS1BQ0tcbiIpOworCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09
IE5VTEwpKSB7CisJCXJldHVybjsKKwl9CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJ
TkcpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCQkgICAgICAg
YXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVULAorCQkJICAgICAgIF9fTElORV9fKTsKKwl9CisJYXNvYy0+b3ZlcmFs
bF9lcnJvcl9jb3VudCA9IDA7CisJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwor
CS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFzc29jaWF0aW9uIHN0YXRlICovCisJaWYgKFNDVFBf
R0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgeworCQkvKiBzdGF0
ZSBjaGFuZ2Ugb25seSBuZWVkZWQgd2hlbiBJIGFtIGluIHJpZ2h0IHN0YXRlICovCisJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDIsICJtb3ZpbmcgdG8gT1BFTiBzdGF0ZVxuIik7CisJCVNDVFBf
U0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7CisJCXNjdHBfc3RhcnRfbmV0X3RpbWVy
cyhzdGNiKTsKKwkJaWYgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5H
KSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAor
CQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7CisK
KwkJfQorCQkvKiB1cGRhdGUgUlRPICovCisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rw
c19hY3RpdmVlc3RhYik7CisJCVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFi
KTsKKwkJaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPT0gMCkgeworCQkJbmV0LT5SVE8g
PSBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0LAorCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJmFzb2MtPnRpbWVfZW50ZXJlZCwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCQl9CisJCSh2b2lkKVNDVFBf
R0VUVElNRV9USU1FVkFMKCZhc29jLT50aW1lX2VudGVyZWQpOworCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfQVNTT0NfVVAsIHN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8CisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworI2VuZGlmCisJCQlzdGNi
LT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCXNv
ID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJCQlpZiAoKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpID09IDApIHsKKwkJCQlzb2lzY29u
bmVjdGVkKHN0Y2ItPnNjdHBfc29ja2V0KTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhz
bywgMSk7CisjZW5kaWYKKwkJfQorCQkvKgorCQkgKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBI
QiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCisJCSAqIHRoaW5ncworCQkgKi8KKwkJbmV0LT5o
Yl9yZXNwb25kZWQgPSAxOworCisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9D
TE9TRURfU09DS0VUKSB7CisJCQkvKiBXZSBkb24ndCBuZWVkIHRvIGRvIHRoZSBhc2NvbmYgdGhp
bmcsCisJCQkgKiBub3IgaGIgb3IgYXV0b2Nsb3NlIGlmIHRoZSBzb2NrZXQgaXMgY2xvc2VkLgor
CQkJICovCisJCQlnb3RvIGNsb3NlZF9zb2NrZXQ7CisJCX0KKworCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsCisJCSAgICBzdGNiLCBu
ZXQpOworCisKKwkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYKKwkJICAg
IHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xP
U0UpKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UsCisJ
CQkgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0KKwkJLyoKKwkJICogc2VuZCBB
U0NPTkYgaWYgcGFyYW1ldGVycyBhcmUgcGVuZGluZyBhbmQgQVNDT05GcyBhcmUKKwkJICogYWxs
b3dlZCAoZWcuIGFkZHJlc3NlcyBjaGFuZ2VkIHdoZW4gaW5pdC9jb29raWUgZWNobyB3ZXJlCisJ
CSAqIGluIGZsaWdodCkKKwkJICovCisJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNj
dHBfZXAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpICYmCisJCSAgICAoc3RjYi0+YXNvYy5h
c2NvbmZfc3VwcG9ydGVkID09IDEpICYmCisJCSAgICAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29j
LmFzY29uZl9xdWV1ZSkpKSB7CisjaWZkZWYgU0NUUF9USU1FUl9CQVNFRF9BU0NPTkYKKwkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwKKwkJCQkJIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJCQkJCSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOworI2Vsc2UK
KwkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
LAorCQkJCQkgU0NUUF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJCX0KKwl9CitjbG9zZWRf
c29ja2V0OgorCS8qIFRvc3MgdGhlIGNvb2tpZSBpZiBJIGNhbiAqLworCXNjdHBfdG9zc19vbGRf
Y29va2llcyhzdGNiLCBhc29jKTsKKwlpZiAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVl
KSkgeworCQkvKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHBlbmRpbmcgZGF0YSAqLwor
CQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwkJY2hrID0gVEFJTFFfRklSU1QoJmFz
b2MtPnNlbnRfcXVldWUpOworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5E
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2hhbmRsZV9lY25fZWNobyhzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICpjcCwKKwkJICAg
ICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7CisJc3RydWN0IHNjdHBfZWNuZV9jaHVuayBia3Vw
OworCXVpbnQ4X3Qgb3ZlcnJpZGVfYml0OworCXVpbnQzMl90IHRzbiwgd2luZG93X2RhdGFfdHNu
OworCWludCBsZW47CisJdW5zaWduZWQgaW50IHBrdF9jbnQ7CisKKwlsZW4gPSBudG9ocyhjcC0+
Y2guY2h1bmtfbGVuZ3RoKTsKKwlpZiAoKGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfZWNuZV9j
aHVuaykpICYmCisJICAgIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBvbGRfc2N0cF9lY25lX2NodW5r
KSkpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAobGVuID09IHNpemVvZihzdHJ1Y3Qgb2xkX3NjdHBf
ZWNuZV9jaHVuaykpIHsKKwkJLyogSXRzIHRoZSBvbGQgZm9ybWF0ICovCisJCW1lbWNweSgmYmt1
cCwgY3AsIHNpemVvZihzdHJ1Y3Qgb2xkX3NjdHBfZWNuZV9jaHVuaykpOworCQlia3VwLm51bV9w
a3RzX3NpbmNlX2N3ciA9IGh0b25sKDEpOworCQljcCA9ICZia3VwOworCX0KKwlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2ZWNuZSk7CisJdHNuID0gbnRvaGwoY3AtPnRzbik7CisJcGt0X2NudCA9
IG50b2hsKGNwLT5udW1fcGt0c19zaW5jZV9jd3IpOworCWxjaGsgPSBUQUlMUV9MQVNUKCZzdGNi
LT5hc29jLnNlbmRfcXVldWUsIHNjdHBjaHVua19saXN0aGVhZCk7CisJaWYgKGxjaGsgPT0gTlVM
TCkgeworCQl3aW5kb3dfZGF0YV90c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxIC0gMTsKKwl9
IGVsc2UgeworCQl3aW5kb3dfZGF0YV90c24gPSBsY2hrLT5yZWMuZGF0YS50c247CisJfQorCisJ
LyogRmluZCB3aGVyZSBpdCB3YXMgc2VudCB0byBpZiBwb3NzaWJsZS4gKi8KKwluZXQgPSBOVUxM
OworCVRBSUxRX0ZPUkVBQ0gobGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0
KSB7CisJCWlmIChsY2hrLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJCQluZXQgPSBsY2hrLT53
aG9UbzsKKwkJCW5ldC0+ZWNuX3ByZXZfY3duZCA9IGxjaGstPnJlYy5kYXRhLmN3bmRfYXRfc2Vu
ZDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX1RTTl9HVChsY2hrLT5yZWMuZGF0YS50c24s
IHRzbikpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChuZXQgPT0gTlVMTCkgeworCQkvKgor
CQkgKiBXaGF0IHRvIGRvLiBBIHByZXZpb3VzIHNlbmQgb2YgYQorCQkgKiBDV1Igd2FzIHBvc3Np
Ymx5IGxvc3QuIFNlZSBob3cgb2xkIGl0IGlzLCB3ZQorCQkgKiBtYXkgaGF2ZSBpdCBtYXJrZWQg
b24gdGhlIGFjdHVhbCBuZXQuCisJCSAqLworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAodHNuID09IG5ldC0+bGFzdF9jd3JfdHNuKSB7
CisJCQkJLyogRm91bmQgaGltLCBzZW5kIGl0IG9mZiAqLworCQkJCWJyZWFrOworCQkJfQorCQl9
CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIHdlIHJlYWNoIGhlcmUsIHdl
IG5lZWQgdG8gc2VuZCBhIHNwZWNpYWwKKwkJCSAqIENXUiB0aGF0IHNheXMgaGV5LCB3ZSBkaWQg
dGhpcyBhIGxvbmcgdGltZQorCQkJICogYWdvIGFuZCB5b3UgbG9zdCB0aGUgcmVzcG9uc2UuCisJ
CQkgKi8KKwkJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKG5l
dCA9PSBOVUxMKSB7CisJCQkJLyogVFNOSCAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCW92ZXJy
aWRlX2JpdCA9IFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERTsKKwkJfSBlbHNlIHsKKwkJCW92ZXJy
aWRlX2JpdCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlvdmVycmlkZV9iaXQgPSAwOworCX0KKwlp
ZiAoU0NUUF9UU05fR1QodHNuLCBuZXQtPmN3cl93aW5kb3dfdHNuKSAmJgorCSAgICAoKG92ZXJy
aWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09IDApKSB7CisJCS8qIEpSUyAtIFVz
ZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBwbHVnZ2FibGUgQ0MgbW9kdWxl
ICovCisJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNu
X2VjaG8oc3RjYiwgbmV0LCAwLCBwa3RfY250KTsKKwkJLyoKKwkJICogV2UgcmVkdWNlIG9uY2Ug
ZXZlcnkgUlRULiBTbyB3ZSB3aWxsIG9ubHkgbG93ZXIgY3duZCBhdAorCQkgKiB0aGUgbmV4dCBz
ZW5kaW5nIHNlcSBpLmUuIHRoZSB3aW5kb3dfZGF0YV90c24KKwkJICovCisJCW5ldC0+Y3dyX3dp
bmRvd190c24gPSB3aW5kb3dfZGF0YV90c247CisJCW5ldC0+ZWNuX2NlX3BrdF9jbnQgKz0gcGt0
X2NudDsKKwkJbmV0LT5sb3N0X2NudCA9IHBrdF9jbnQ7CisJCW5ldC0+bGFzdF9jd3JfdHNuID0g
dHNuOworCX0gZWxzZSB7CisJCW92ZXJyaWRlX2JpdCB8PSBTQ1RQX0NXUl9JTl9TQU1FX1dJTkRP
VzsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgbmV0LT5sYXN0X2N3cl90c24pICYmCisJCSAgICAo
KG92ZXJyaWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09IDApKSB7CisJCQkvKgor
CQkJICogQW5vdGhlciBsb3NzIGluIHRoZSBzYW1lIHdpbmRvdyB1cGRhdGUgaG93CisJCQkgKiBt
YW55IG1hcmtzL3BhY2tldHMgbG9zdCB3ZSBoYXZlIGhhZC4KKwkJCSAqLworCQkJaW50IGNudCA9
IDE7CisJCQlpZiAocGt0X2NudCA+IG5ldC0+bG9zdF9jbnQpIHsKKwkJCQkvKiBTaG91bGQgYmUg
dGhlIGNhc2UgKi8KKwkJCQljbnQgPSAocGt0X2NudCAtIG5ldC0+bG9zdF9jbnQpOworCQkJCW5l
dC0+ZWNuX2NlX3BrdF9jbnQgKz0gY250OworCQkJfQorCQkJbmV0LT5sb3N0X2NudCA9IHBrdF9j
bnQ7CisJCQluZXQtPmxhc3RfY3dyX3RzbiA9IHRzbjsKKwkJCS8qCisJCQkgKiBNb3N0IENDIGZ1
bmN0aW9ucyB3aWxsIGlnbm9yZSB0aGlzIGNhbGwsIHNpbmNlIHdlIGFyZSBpbi13aW5kb3cKKwkJ
CSAqIHlldCBvZiB0aGUgaW5pdGlhbCBDRSB0aGUgcGVlciBzYXcuCisJCQkgKi8KKwkJCXN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8oc3RjYiwg
bmV0LCAxLCBjbnQpOworCQl9CisJfQorCS8qCisJICogV2UgYWx3YXlzIHNlbmQgYSBDV1IgdGhp
cyB3YXkgaWYgb3VyIHByZXZpb3VzIG9uZSB3YXMgbG9zdCBvdXIKKwkgKiBwZWVyIHdpbGwgZ2V0
IGFuIHVwZGF0ZSwgb3IgaWYgaXQgaXMgbm90IHRpbWUgYWdhaW4gdG8gcmVkdWNlIHdlCisJICog
c3RpbGwgZ2V0IHRoZSBjd3IgdG8gdGhlIHBlZXIuIE5vdGUgd2Ugc2V0IHRoZSBvdmVycmlkZSB3
aGVuIHdlCisJICogY291bGQgbm90IGZpbmQgdGhlIFRTTiBvbiB0aGUgY2h1bmsgb3IgdGhlIGRl
c3RpbmF0aW9uIG5ldHdvcmsuCisJICovCisJc2N0cF9zZW5kX2N3cihzdGNiLCBuZXQsIG5ldC0+
bGFzdF9jd3JfdHNuLCBvdmVycmlkZV9iaXQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5k
bGVfZWNuX2N3cihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAqIEhlcmUgd2UgZ2V0IGEgQ1dS
IGZyb20gdGhlIHBlZXIuIFdlIG11c3QgbG9vayBpbiB0aGUgb3V0cXVldWUgYW5kCisJICogbWFr
ZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGNvdmVyZWQgRUNORSBpbiB0aGUgY29udHJvbCBjaHVuayBw
YXJ0LgorCSAqIElmIHNvIHJlbW92ZSBpdC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGssICpuY2hrOworCXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKmVjbmU7CisJaW50IG92ZXJy
aWRlOworCXVpbnQzMl90IGN3cl90c247CisKKwljd3JfdHNuID0gbnRvaGwoY3AtPnRzbik7CisJ
b3ZlcnJpZGUgPSBjcC0+Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREU7
CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVl
LCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkICE9IFNDVFBf
RUNOX0VDSE8pIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgob3ZlcnJpZGUgPT0gMCkgJiYg
KGNoay0+d2hvVG8gIT0gbmV0KSkgeworCQkJLyogTXVzdCBiZSBmcm9tIHRoZSByaWdodCBzcmMg
dW5sZXNzIG92ZXJyaWRlIGlzIHNldCAqLworCQkJY29udGludWU7CisJCX0KKwkJZWNuZSA9IG10
b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICopOworCQlpZiAoU0NUUF9UU05f
R0UoY3dyX3RzbiwgbnRvaGwoZWNuZS0+dHNuKSkpIHsKKwkJCS8qIHRoaXMgY292ZXJzIHRoaXMg
RUNORSwgd2UgY2FuIHJlbW92ZSBpdCAqLworCQkJc3RjYi0+YXNvYy5lY25fZWNob19jbnRfb25x
LS07CisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGss
CisJCQkgICAgc2N0cF9uZXh0KTsKKwkJCXN0Y2ItPmFzb2MuY3RybF9xdWV1ZV9jbnQtLTsKKwkJ
CXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCXNjdHBf
ZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCWlmIChvdmVy
cmlkZSA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21w
bGV0ZV9jaHVuayAqY3AgU0NUUF9VTlVTRUQsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7
CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
CisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKworCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDIsCisJCSJzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZTogaGFuZGxpbmcgU0hVVERPV04t
Q09NUExFVEVcbiIpOworCWlmIChzdGNiID09IE5VTEwpCisJCXJldHVybjsKKworCWFzb2MgPSAm
c3RjYi0+YXNvYzsKKwkvKiBwcm9jZXNzIGFjY29yZGluZyB0byBhc3NvY2lhdGlvbiBzdGF0ZSAq
LworCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19T
RU5UKSB7CisJCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQ09NUExFVEUuLi4gc28gaWdub3JlLi4u
ICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCQkic2N0cF9oYW5kbGVfc2h1dGRv
d25fY29tcGxldGU6IG5vdCBpbiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UIC0tLSBpZ25v
cmVcbiIpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCXJldHVybjsKKwl9CisJLyogbm90
aWZ5IHVwcGVyIGxheWVyIHByb3RvY29sICovCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJ
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19ET1dOLCBzdGNiLCAwLCBOVUxMLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCX0KKyNpZmRlZiBJTlZBUklBTlRTCisJaWYgKCFUQUlMUV9F
TVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgfHwKKwkgICAgIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50
X3F1ZXVlKSB8fAorCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIFNDVFBfU09f
Tk9UX0xPQ0tFRCkpIHsKKwkJcGFuaWMoIlF1ZXVlcyBhcmUgbm90IGVtcHR5IHdoZW4gaGFuZGxp
bmcgU0hVVERPV04tQ09NUExFVEUiKTsKKwl9CisjZW5kaWYKKwkvKiBzdG9wIHRoZSB0aW1lciAq
LworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCwKKwkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQg
KyBTQ1RQX0xPQ18yNCk7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3NodXRkb3du
KTsKKwkvKiBmcmVlIHRoZSBUQ0IgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQki
c2N0cF9oYW5kbGVfc2h1dGRvd25fY29tcGxldGU6IGNhbGxzIGZyZWUtYXNvY1xuIik7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc28g
PSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlTQ1RQX1NPQ0tFVF9MT0NL
KHNvLCAxKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhzdGNi
LT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCSAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzI1KTsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2No
dW5rX2Ryb3Aoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9jaHVua19kZXNjICpk
ZXNjLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDhfdCBmbGcpCit7CisJc3dpdGNo
IChkZXNjLT5jaHVua190eXBlKSB7CisJY2FzZSBTQ1RQX0RBVEE6CisJCS8qIGZpbmQgdGhlIHRz
biB0byByZXNlbmQgKHBvc3NpYmx5ICovCisJeworCQl1aW50MzJfdCB0c247CisJCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKnRwMTsKKworCQl0c24gPSBudG9obChkZXNjLT50c25faWZhbnkpOwor
CQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7
CisJCQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJCQkJLyogZm91bmQgaXQgKi8K
KwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwg
dHNuKSkgeworCQkJCS8qIG5vdCBmb3VuZCAqLworCQkJCXRwMSA9IE5VTEw7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwkJaWYgKHRwMSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogRG8gaXQgdGhl
IG90aGVyIHdheSAsIGFrYSB3aXRob3V0IHBheWluZworCQkJICogYXR0ZW50aW9uIHRvIHF1ZXVl
IHNlcSBvcmRlci4KKwkJCSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGRuZm5kKTsK
KwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQp
IHsKKwkJCQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJCQkJCS8qIGZvdW5kIGl0
ICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAodHAxID09IE5VTEwpIHsK
KwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnB0c25uZik7CisJCX0KKwkJaWYgKCh0cDEpICYm
ICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSkgeworCQkJdWludDhfdCAqZGRwOwor
CisJCQlpZiAoKChmbGcgJiBTQ1RQX0JBRENSQykgPT0gMCkgJiYKKwkJCSAgICAoKGZsZyAmIFND
VFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlp
ZiAoKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAmJgorCQkJICAgICgoZmxnICYgU0NUUF9G
Uk9NX01JRERMRV9CT1gpID09IDApKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGRp
d25wKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKHN0Y2ItPmFzb2MucGVlcnNfcndu
ZCA9PSAwICYmCisJCQkgICAgKGZsZyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSkgeworCQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBkaXpydyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJ
CWRkcCA9ICh1aW50OF90ICopIChtdG9kKHRwMS0+ZGF0YSwgY2FkZHJfdCkgKworCQkJCQkgICBz
aXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCQkJeworCQkJCXVuc2lnbmVkIGludCBp
aWk7CisKKwkJCQlmb3IgKGlpaSA9IDA7IGlpaSA8IHNpemVvZihkZXNjLT5kYXRhX2J5dGVzKTsK
KwkJCQkgICAgIGlpaSsrKSB7CisJCQkJCWlmIChkZHBbaWlpXSAhPSBkZXNjLT5kYXRhX2J5dGVz
W2lpaV0pIHsKKwkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBiYWRkKTsKKwkJCQkJCXJl
dHVybiAoLTEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAodHAxLT5kb19ydHQpIHsK
KwkJCQkvKgorCQkJCSAqIHRoaXMgZ3V5IGhhZCBhIFJUTyBjYWxjdWxhdGlvbgorCQkJCSAqIHBl
bmRpbmcgb24gaXQsIGNhbmNlbCBpdAorCQkJCSAqLworCQkJCWlmICh0cDEtPndob1RvLT5ydG9f
bmVlZGVkID09IDApIHsKKwkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7CisJCQkJfQor
CQkJCXRwMS0+ZG9fcnR0ID0gMDsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBt
YXJrKTsKKwkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCQkJc2N0
cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQkvKgor
CQkJICogbWFyayBpdCBhcyBpZiB3ZSB3ZXJlIGRvaW5nIGEgRlIsIHNpbmNlCisJCQkgKiB3ZSB3
aWxsIGJlIGdldHRpbmcgZ2FwIGFjayByZXBvcnRzIGJlaGluZAorCQkJICogdGhlIGluZm8gZnJv
bSB0aGUgcm91dGVyLgorCQkJICovCisJCQl0cDEtPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFu
c21pdCA9IDE7CisJCQkvKgorCQkJICogbWFyayB0aGUgdHNuIHdpdGggd2hhdCBzZXF1ZW5jZXMg
Y2FuCisJCQkgKiBjYXVzZSBhIG5ldyBGUi4KKwkJCSAqLworCQkJaWYgKFRBSUxRX0VNUFRZKCZz
dGNiLT5hc29jLnNlbmRfcXVldWUpKSB7CisJCQkJdHAxLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90
c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxOworCQkJfSBlbHNlIHsKKwkJCQl0cDEtPnJlYy5k
YXRhLmZhc3RfcmV0cmFuX3RzbiA9IChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVl
KSktPnJlYy5kYXRhLnRzbjsKKwkJCX0KKworCQkJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKKwkJ
CQkJc3RjYiwgdHAxLT53aG9UbywKKwkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9J
TlBVVCArIFNDVFBfTE9DXzI2KTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkJCSBzdGNiLCB0cDEtPndob1RvKTsKKworCQkJLyog
Zml4IGNvdW50cyBhbmQgdGhpbmdzICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX21p
c2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9QRFJQLAorCQkJCQkgICAgICAgdHAxLT53aG9U
by0+ZmxpZ2h0X3NpemUsCisJCQkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJICAgICAg
ICh1aW50MzJfdCkodWludHB0cl90KXN0Y2IsCisJCQkJCSAgICAgICB0cDEtPnJlYy5kYXRhLnRz
bik7CisJCQl9CisJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJ
CQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRwMSk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRf
ZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1f
UkVTRU5EOworCQl9IHsKKwkJCS8qIGF1ZGl0IGNvZGUgKi8KKwkJCXVuc2lnbmVkIGludCBhdWRp
dDsKKworCQkJYXVkaXQgPSAwOworCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZzdGNiLT5hc29jLnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JB
TV9SRVNFTkQpCisJCQkJCWF1ZGl0Kys7CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0
Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAorCQkJCSAgICAgIHNjdHBfbmV4dCkgeworCQkJ
CWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCQkJCWF1ZGl0Kys7CisJ
CQl9CisJCQlpZiAoYXVkaXQgIT0gc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsK
KwkJCQlTQ1RQX1BSSU5URigiKipMb2NhbCBBdWRpdCBmaW5kcyBjbnQ6JWQgYXNvYyBjbnQ6JWRc
biIsCisJCQkJCSAgICBhdWRpdCwgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwor
I2lmbmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCQlzdGNiLT5hc29jLnNlbnRfcXVldWVf
cmV0cmFuX2NudCA9IGF1ZGl0OworI2VuZGlmCisJCQl9CisJCX0KKwl9CisJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0FTQ09ORjoKKwl7CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmFzY29uZjsKKwor
CQlUQUlMUV9GT1JFQUNIKGFzY29uZiwgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAor
CQkJICAgICAgc2N0cF9uZXh0KSB7CisJCQlpZiAoYXNjb25mLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9BU0NPTkYpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoYXNjb25mKSB7CisJ
CQlpZiAoYXNjb25mLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfdWNv
dW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJYXNjb25mLT5z
ZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQlhc2NvbmYtPnNuZF9jb3VudC0tOworCQl9
CisJfQorCWJyZWFrOworCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkvKiByZXNlbmQgdGhlIElO
SVQgKi8KKwkJc3RjYi0+YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250Kys7CisJCWlmIChzdGNiLT5h
c29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPCBTQ1RQX1JFVFJZX0RST1BQRURfVEhSRVNIKSB7CisJ
CQkvKgorCQkJICogSWYgd2UgY2FuIGdldCBpdCBpbiwgaW4gYSBmZXcgYXR0ZW1wdHMgd2UgZG8K
KwkJCSAqIHRoaXMsIG90aGVyd2lzZSB3ZSBsZXQgdGhlIHRpbWVyIGZpcmUuCisJCQkgKi8KKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgc3RjYi0+c2N0cF9lcCwKKwkJ
CQkJc3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsg
U0NUUF9MT0NfMjcpOworCQkJc2N0cF9zZW5kX2luaXRpYXRlKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTEVDVElW
RV9BQ0s6CisJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0s6CisJCS8qIHJlc2VuZCB0aGUgc2Fj
ayAqLworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q6CisJCS8qIHJlc2VuZCBhIGRlbWFuZCBI
QiAqLworCQlpZiAoKHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCArIDMpIDwgc3RjYi0+
YXNvYy5tYXhfc2VuZF90aW1lcykgeworCQkJLyogT25seSByZXRyYW5zbWl0IGlmIHdlIEtOT1cg
d2Ugd29udCBkZXN0cm95IHRoZSB0Y2IgKi8KKwkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOOgor
CQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NI
VVRET1dOX0FDSzoKKwkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQ09PS0lFX0VDSE86CisJeworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjb29raWU7CisKKwkJY29va2llID0gTlVMTDsKKwkJVEFJTFFfRk9SRUFDSChjb29raWUsICZz
dGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwKKwkJCSAgICAgIHNjdHBfbmV4dCkgeworCQkJ
aWYgKGNvb2tpZS0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKKwkJCQli
cmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY29va2llKSB7CisJCQlpZiAoY29va2llLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5z
ZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJY29va2llLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQ7CisJCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7CisJCX0KKwl9CisJ
YnJlYWs7CisJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CisJCXNjdHBfc2VuZF9jb29raWVfYWNrKHN0
Y2IpOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJLyogcmVzZW5kIGxhc3Qg
YXNjb25mIGFjayAqLworCQlzY3RwX3NlbmRfYXNjb25mX2FjayhzdGNiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJY2FzZSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjoK
KwkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCAmc3RjYi0+YXNvYyk7CisJCWJyZWFrOworCQkvKiBj
YW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZXNlICovCisJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVE
OgorCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoJLyogdGhpcyBzaG91bGQgbm90IGhhcHBlbiAq
LworCWNhc2UgU0NUUF9IRUFSVEJFQVRfQUNLOgorCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElP
TjoKKwljYXNlIFNDVFBfT1BFUkFUSU9OX0VSUk9SOgorCWNhc2UgU0NUUF9TSFVURE9XTl9DT01Q
TEVURToKKwljYXNlIFNDVFBfRUNOX0VDSE86CisJY2FzZSBTQ1RQX0VDTl9DV1I6CisJZGVmYXVs
dDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBfcmVzZXRfaW5f
c3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgbnVtYmVyX2VudHJpZXMsIHVp
bnQxNl90ICpsaXN0KQoreworCXVpbnQzMl90IGk7CisJdWludDE2X3QgdGVtcDsKKworCS8qCisJ
ICogV2Ugc2V0IHRoaW5ncyB0byAweGZmZmZmZmZmIHNpbmNlIHRoaXMgaXMgdGhlIGxhc3QgZGVs
aXZlcmVkIHNlcXVlbmNlCisJICogYW5kIHdlIHdpbGwgYmUgc2VuZGluZyBpbiAwIGFmdGVyIHRo
ZSByZXNldC4KKwkgKi8KKworCWlmIChudW1iZXJfZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBp
IDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hzKGxpc3RbaV0pOworCQkJ
aWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudCkgeworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJc3RjYi0+YXNvYy5zdHJtaW5bdGVtcF0ubGFzdF9taWRfZGVsaXZlcmVkID0gMHhmZmZm
ZmZmZjsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3QgPSBOVUxMOworCQlmb3IgKGkgPSAwOyBpIDwg
c3RjYi0+YXNvYy5zdHJlYW1pbmNudDsgaSsrKSB7CisJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5s
YXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZmOworCQl9CisJfQorCXNjdHBfdWxwX25vdGlm
eShTQ1RQX05PVElGWV9TVFJfUkVTRVRfUkVDViwgc3RjYiwgbnVtYmVyX2VudHJpZXMsICh2b2lk
ICopbGlzdCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfcmVz
ZXRfb3V0X3N0cmVhbXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJfZW50
cmllcywgdWludDE2X3QgKmxpc3QpCit7CisJdWludDMyX3QgaTsKKwl1aW50MTZfdCB0ZW1wOwor
CisJaWYgKG51bWJlcl9lbnRyaWVzID4gMCkgeworCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2Vu
dHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hzKGxpc3RbaV0pOworCQkJaWYgKHRlbXAgPj0g
c3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJCQkvKiBubyBzdWNoIHN0cmVhbSAqLworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLm5leHRfbWlkX29y
ZGVyZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLm5leHRfbWlkX3Vub3JkZXJl
ZCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJl
YW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVy
ZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IDA7
CisJCX0KKwl9CisJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9TRU5ELCBz
dGNiLCBudW1iZXJfZW50cmllcywgKHZvaWQgKilsaXN0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
fQorCitzdGF0aWMgdm9pZAorc2N0cF9yZXNldF9jbGVhcl9wZW5kaW5nKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgdWludDMyX3QgbnVtYmVyX2VudHJpZXMsIHVpbnQxNl90ICpsaXN0KQoreworCXVp
bnQzMl90IGk7CisJdWludDE2X3QgdGVtcDsKKworCWlmIChudW1iZXJfZW50cmllcyA+IDApIHsK
KwkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRyaWVzOyBpKyspIHsKKwkJCXRlbXAgPSBudG9o
cyhsaXN0W2ldKTsKKwkJCWlmICh0ZW1wID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJ
CQkJLyogbm8gc3VjaCBzdHJlYW0gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFt0ZW1wXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU47CisJCX0KKwl9IGVsc2Ug
eworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJ
c3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BFTjsKKwkJfQorCX0K
K30KKworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCAqCitzY3RwX2ZpbmRfc3Ry
ZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgc2VxLCBzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICoqYmNoaykKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jl
cXVlc3QgKnI7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCWludCBsZW4sIGNsZW47
CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNv
bnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID0g
MDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2Muc3RyX3Jlc2V0ID09IE5V
TEwpIHsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID0gMDsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJY2hrID0gc3RjYi0+YXNvYy5zdHJfcmVzZXQ7CisJaWYgKGNoay0+ZGF0YSA9
PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChiY2hrKSB7CisJCS8qIGhlIHdh
bnRzIGEgY29weSBvZiB0aGUgY2hrIHBvaW50ZXIgKi8KKwkJKmJjaGsgPSBjaGs7CisJfQorCWNs
ZW4gPSBjaGstPnNlbmRfc2l6ZTsKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9j
aHVua2hkciAqKTsKKwlyID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1ZXN0ICopKGNo
ICsgMSk7CisJaWYgKG50b2hsKHItPnJlcXVlc3Rfc2VxKSA9PSBzZXEpIHsKKwkJLyogZm91bmQg
aXQgKi8KKwkJcmV0dXJuIChyKTsKKwl9CisJbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoci0+cGgu
cGFyYW1fbGVuZ3RoKSk7CisJaWYgKGNsZW4gPiAobGVuICsgKGludClzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpKSkgeworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IG9uZSwgdGhlcmUgY2FuIG9u
bHkgYmUgYSBtYXggb2YgdHdvICovCisJCXIgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jl
cXVlc3QgKikoKGNhZGRyX3QpciArIGxlbik7CisJCWlmIChudG9obChyLT5yZXF1ZXN0X3NlcSkg
PT0gc2VxKSB7CisJCQlyZXR1cm4gKHIpOworCQl9CisJfQorCS8qIHRoYXQgc2VxIGlzIG5vdCBo
ZXJlICovCisJcmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfY2xlYW5fdXBf
c3RyZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlhc29jID0g
JnN0Y2ItPmFzb2M7CisJY2hrID0gYXNvYy0+c3RyX3Jlc2V0OworCWlmIChjaGsgPT0gTlVMTCkg
eworCQlyZXR1cm47CisJfQorCWFzb2MtPnN0cl9yZXNldCA9IE5VTEw7CisJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAg
ICAgICAgICAgICAgY2hrLT53aG9UbywgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18y
OCk7CisJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9u
ZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudC0tOworCWlmIChjaGstPmRhdGEpIHsKKwkJc2N0
cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCWNoay0+ZGF0YSA9IE5VTEw7CisJfQorCXNjdHBfZnJl
ZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKworCitzdGF0aWMg
aW50CitzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3RydWN0IHNjdHBfdGNiICpz
dGNiLAorCQkJCSAgdWludDMyX3Qgc2VxLCB1aW50MzJfdCBhY3Rpb24sCisJCQkJICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKnJlc3BpbikKK3sKKwl1aW50MTZfdCB0eXBlOwor
CWludCBscGFyYW1fbGVuOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jID0gJnN0Y2It
PmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX3N0cmVh
bV9yZXNldF9yZXF1ZXN0ICpyZXFfcGFyYW07CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291
dF9yZXF1ZXN0ICpyZXFfb3V0X3BhcmFtOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9y
ZXF1ZXN0ICpyZXFfaW5fcGFyYW07CisJdWludDMyX3QgbnVtYmVyX2VudHJpZXM7CisKKwlpZiAo
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJLyogZHVwbGljYXRlICov
CisJCXJldHVybiAoMCk7CisJfQorCWlmIChzZXEgPT0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2Vx
X291dCkgeworCQlyZXFfcGFyYW0gPSBzY3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0Y2IsIHNlcSwg
JmNoayk7CisJCWlmIChyZXFfcGFyYW0gIT0gTlVMTCkgeworCQkJc3RjYi0+YXNvYy5zdHJfcmVz
ZXRfc2VxX291dCsrOworCQkJdHlwZSA9IG50b2hzKHJlcV9wYXJhbS0+cGgucGFyYW1fdHlwZSk7
CisJCQlscGFyYW1fbGVuID0gbnRvaHMocmVxX3BhcmFtLT5waC5wYXJhbV9sZW5ndGgpOworCQkJ
aWYgKHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfT1VUX1JFUVVFU1QpIHsKKwkJCQlpbnQgbm9fY2xl
YXIgPSAwOworCisJCQkJcmVxX291dF9wYXJhbSA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
b3V0X3JlcXVlc3QgKilyZXFfcGFyYW07CisJCQkJbnVtYmVyX2VudHJpZXMgPSAobHBhcmFtX2xl
biAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QpKSAvIHNpemVv
Zih1aW50MTZfdCk7CisJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dF9pc19vdXRzdGFuZGluZyA9
IDA7CisJCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykKKwkJCQkJYXNvYy0+
c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVB
TV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEKSB7CisJCQkJCS8qIGRvIGl0ICovCisJCQkJCXNjdHBf
cmVzZXRfb3V0X3N0cmVhbXMoc3RjYiwgbnVtYmVyX2VudHJpZXMsIHJlcV9vdXRfcGFyYW0tPmxp
c3Rfb2Zfc3RyZWFtcyk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVT
RVRfUkVTVUxUX0RFTklFRCkgeworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RS
X1JFU0VUX0RFTklFRF9PVVQsIHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXFfb3V0X3BhcmFtLT5s
aXN0X29mX3N0cmVhbXMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfSBlbHNlIGlmIChhY3Rp
b24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0lOX1BST0dSRVNTKSB7CisJCQkJCS8qIFNl
dCBpdCB1cCBzbyB3ZSBkb24ndCBzdG9wIHJldHJhbnNtaXR0aW5nICovCisJCQkJCWFzb2MtPnN0
cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOworCQkJCQlzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFf
b3V0LS07CisJCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRfaXNfb3V0c3RhbmRpbmcgPSAxOwor
CQkJCQlub19jbGVhciA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VULCBzdGNiLCBudW1iZXJfZW50cmllcywgcmVx
X291dF9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0K
KwkJCQlpZiAobm9fY2xlYXIgPT0gMCkgeworCQkJCQlzY3RwX3Jlc2V0X2NsZWFyX3BlbmRpbmco
c3RjYiwgbnVtYmVyX2VudHJpZXMsIHJlcV9vdXRfcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcyk7CisJ
CQkJfQorCQkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VUX0lOX1JFUVVFU1QpIHsK
KwkJCQlyZXFfaW5fcGFyYW0gPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3Qg
KilyZXFfcGFyYW07CisJCQkJbnVtYmVyX2VudHJpZXMgPSAobHBhcmFtX2xlbiAtIHNpemVvZihz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCkpIC8gc2l6ZW9mKHVpbnQxNl90KTsK
KwkJCQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKQorCQkJCQlhc29jLT5zdHJl
YW1fcmVzZXRfb3V0c3RhbmRpbmctLTsKKwkJCQlpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JF
U0VUX1JFU1VMVF9ERU5JRUQpIHsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NU
Ul9SRVNFVF9ERU5JRURfSU4sIHN0Y2IsCisJCQkJCQkJbnVtYmVyX2VudHJpZXMsIHJlcV9pbl9w
YXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0gZWxzZSBp
ZiAoYWN0aW9uICE9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpIHsKKwkJCQkJ
c2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfSU4sIHN0Y2IsCisJ
CQkJCQkJbnVtYmVyX2VudHJpZXMsIHJlcV9pbl9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9S
RVNFVF9BRERfT1VUX1NUUkVBTVMpIHsKKwkJCQkvKiBPayB3ZSBub3cgbWF5IGhhdmUgbW9yZSBz
dHJlYW1zICovCisJCQkJaW50IG51bV9zdHJlYW07CisKKwkJCQludW1fc3RyZWFtID0gc3RjYi0+
YXNvYy5zdHJtX3BlbmRpbmdfYWRkX3NpemU7CisJCQkJaWYgKG51bV9zdHJlYW0gPiAoc3RjYi0+
YXNvYy5zdHJtX3JlYWxvdXRzaXplIC0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpKSB7CisJCQkJ
CS8qIFRTTkggKi8KKwkJCQkJbnVtX3N0cmVhbSA9IHN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6
ZSAtIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OworCQkJCX0KKwkJCQlzdGNiLT5hc29jLnN0cm1f
cGVuZGluZ19hZGRfc2l6ZSA9IDA7CisJCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFu
ZGluZykKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07CisJCQkJaWYgKGFj
dGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEKSB7CisJCQkJCS8qIFB1
dCB0aGUgbmV3IHN0cmVhbXMgaW50byBlZmZlY3QgKi8KKwkJCQkJaW50IGk7CisJCQkJCWZvciAo
IGkgPSBhc29jLT5zdHJlYW1vdXRjbnQ7IGk8IChhc29jLT5zdHJlYW1vdXRjbnQgKyBudW1fc3Ry
ZWFtKTsgaSsrKSB7CisJCQkJCQlhc29jLT5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1f
T1BFTjsKKwkJCQkJfQorCQkJCQlhc29jLT5zdHJlYW1vdXRjbnQgKz0gbnVtX3N0cmVhbTsKKwkJ
CQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWlu
Y250LCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCwgMCk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24g
PT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkgeworCQkJCQlzY3RwX25vdGlmeV9z
dHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Mu
c3RyZWFtb3V0Y250LAorCQkJCQkJCQkgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9ERU5JRUQpOwor
CQkJCX0gZWxzZSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3Rj
Yi0+YXNvYy5zdHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsCisJCQkJCQkJCSAg
ICAgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRCk7CisJCQkJfQorCQkJfSBlbHNlIGlmICh0eXBl
ID09IFNDVFBfU1RSX1JFU0VUX0FERF9JTl9TVFJFQU1TKSB7CisJCQkJaWYgKGFzb2MtPnN0cmVh
bV9yZXNldF9vdXRzdGFuZGluZykKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5n
LS07CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEKSB7
CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3RjYi0+YXNvYy5zdHJl
YW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsCisJCQkJCQkJCSAgICAgU0NUUF9TVFJF
QU1fQ0hBTkdFX0RFTklFRCk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24gIT0gU0NUUF9TVFJFQU1f
UkVTRVRfUkVTVUxUX1BFUkZPUk1FRCkgeworCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRf
YWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250
LAorCQkJCQkJCQkgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQpOworCQkJCX0KKwkJCX0g
ZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9UU05fUkVRVUVTVCkgeworCQkJCS8qKgor
CQkJCSAqIGEpIEFkb3B0IHRoZSBuZXcgaW4gdHNuLgorCQkJCSAqIGIpIHJlc2V0IHRoZSBtYXAK
KwkJCQkgKiBjKSBBZG9wdCB0aGUgbmV3IG91dC10c24KKwkJCQkgKi8KKwkJCQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNuICpyZXNwOworCQkJCXN0cnVjdCBzY3RwX2Zvcndh
cmRfdHNuX2NodW5rIGZ3ZHRzbjsKKwkJCQlpbnQgYWJvcnRfZmxhZyA9IDA7CisJCQkJaWYgKHJl
c3BpbiA9PSBOVUxMKSB7CisJCQkJCS8qIGh1aCA/ICovCisJCQkJCXJldHVybiAoMCk7CisJCQkJ
fQorCQkJCWlmIChudG9ocyhyZXNwaW4tPnBoLnBhcmFtX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbikpIHsKKwkJCQkJcmV0dXJuICgwKTsKKwkJ
CQl9CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVE
KSB7CisJCQkJCXJlc3AgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAq
KXJlc3BpbjsKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07CisJCQkJCWZ3
ZHRzbi5jaC5jaHVua19sZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90
c25fY2h1bmspKTsKKwkJCQkJZndkdHNuLmNoLmNodW5rX3R5cGUgPSBTQ1RQX0ZPUldBUkRfQ1VN
X1RTTjsKKwkJCQkJZndkdHNuLm5ld19jdW11bGF0aXZlX3RzbiA9IGh0b25sKG50b2hsKHJlc3At
PnNlbmRlcnNfbmV4dF90c24pIC0gMSk7CisJCQkJCXNjdHBfaGFuZGxlX2ZvcndhcmRfdHNuKHN0
Y2IsICZmd2R0c24sICZhYm9ydF9mbGFnLCBOVUxMLCAwKTsKKwkJCQkJaWYgKGFib3J0X2ZsYWcp
IHsKKwkJCQkJCXJldHVybiAoMSk7CisJCQkJCX0KKwkJCQkJc3RjYi0+YXNvYy5oaWdoZXN0X3Rz
bl9pbnNpZGVfbWFwID0gKG50b2hsKHJlc3AtPnNlbmRlcnNfbmV4dF90c24pIC0gMSk7CisJCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfbWFwKDAsIDcsIGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCQkJCX0KKworCQkJCQlzdGNi
LT5hc29jLnRzbl9sYXN0X2RlbGl2ZXJlZCA9IHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c24gPSBz
dGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJCQkJCXN0Y2ItPmFzb2MubWFwcGlu
Z19hcnJheV9iYXNlX3RzbiA9IG50b2hsKHJlc3AtPnNlbmRlcnNfbmV4dF90c24pOworCQkJCQlt
ZW1zZXQoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5LCAwLCBzdGNiLT5hc29jLm1hcHBpbmdfYXJy
YXlfc2l6ZSk7CisKKwkJCQkJc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID0g
c3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOworCQkJCQltZW1zZXQoc3RjYi0+YXNv
Yy5ucl9tYXBwaW5nX2FycmF5LCAwLCBzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfc2l6ZSk7CisK
KwkJCQkJc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSA9IG50b2hsKHJlc3AtPnJlY2VpdmVyc19uZXh0
X3Rzbik7CisJCQkJCXN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEgPSBzdGNiLT5hc29jLmN1bXVs
YXRpdmVfdHNuOworCisJCQkJCXNjdHBfcmVzZXRfb3V0X3N0cmVhbXMoc3RjYiwgMCwgKHVpbnQx
Nl90ICopIE5VTEwpOworCQkJCQlzY3RwX3Jlc2V0X2luX3N0cmVhbShzdGNiLCAwLCAodWludDE2
X3QgKikgTlVMTCk7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF90c24oc3RjYiwgc3Rj
Yi0+YXNvYy5zZW5kaW5nX3NlcSwgKHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9iYXNlX3RzbiAr
IDEpLCAwKTsKKwkJCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNV
TFRfREVOSUVEKSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF90c24oc3RjYiwgc3Rj
Yi0+YXNvYy5zZW5kaW5nX3NlcSwgKHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9iYXNlX3RzbiAr
IDEpLAorCQkJCQkJCQkgICAgIFNDVFBfQVNTT0NfUkVTRVRfREVOSUVEKTsKKwkJCQl9IGVsc2Ug
eworCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0Y2IsIHN0Y2ItPmFzb2Muc2Vu
ZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfYmFzZV90c24gKyAxKSwKKwkJCQkJ
CQkJICAgICBTQ1RQX0FTU09DX1JFU0VUX0ZBSUxFRCk7CisJCQkJfQorCQkJfQorCQkJLyogZ2V0
IHJpZCBvZiB0aGUgcmVxdWVzdCBhbmQgZ2V0IHRoZSByZXF1ZXN0IGZsYWdzICovCisJCQlpZiAo
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJCQlzY3RwX2NsZWFuX3Vw
X3N0cmVhbV9yZXNldChzdGNiKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYXNvYy0+c3RyZWFtX3Jl
c2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJc2N0cF9zZW5kX3N0cmVhbV9yZXNldF9vdXRfaWZf
cG9zc2libGUoc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJcmV0dXJuICgwKTsKK30K
Kworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9yZXF1ZXN0X2luKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAgc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QgKnJlcSwgaW50IHRydW5jKQoreworCXVp
bnQzMl90IHNlcTsKKwlpbnQgbGVuLCBpOworCWludCBudW1iZXJfZW50cmllczsKKwl1aW50MTZf
dCB0ZW1wOworCisJLyoKKwkgKiBwZWVyIHdhbnRzIG1lIHRvIHNlbmQgYSBzdHItcmVzZXQgdG8g
aGltIGZvciBteSBvdXRnb2luZyBzZXEncyBpZgorCSAqIHNlcV9pbiBpcyByaWdodC4KKwkgKi8K
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOworCisJc2VxID0g
bnRvaGwocmVxLT5yZXF1ZXN0X3NlcSk7CisJaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPT0g
c2VxKSB7CisJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQX0VO
QUJMRV9SRVNFVF9TVFJFQU1fUkVRKSkgeworCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0g
PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9IGVsc2UgaWYgKHRydW5jKSB7
CisJCQkvKiBDYW4ndCBkbyBpdCwgc2luY2UgdGhleSBleGNlZWRlZCBvdXIgYnVmZmVyIHNpemUg
ICovCisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9ERU5JRUQ7CisJCX0gZWxzZSBpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVzZXRfb3V0X2lz
X291dHN0YW5kaW5nID09IDApIHsKKwkJCWxlbiA9IG50b2hzKHJlcS0+cGgucGFyYW1fbGVuZ3Ro
KTsKKwkJCW51bWJlcl9lbnRyaWVzID0gKChsZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFt
X3Jlc2V0X2luX3JlcXVlc3QpKSAvIHNpemVvZih1aW50MTZfdCkpOworCQkJaWYgKG51bWJlcl9l
bnRyaWVzKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRyaWVzOyBpKyspIHsKKwkJ
CQkJdGVtcCA9IG50b2hzKHJlcS0+bGlzdF9vZl9zdHJlYW1zW2ldKTsKKwkJCQkJaWYgKHRlbXAg
Pj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJCQkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0
aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJCQkJCWdvdG8gYmFk
X2JveTsKKwkJCQkJfQorCQkJCQlyZXEtPmxpc3Rfb2Zfc3RyZWFtc1tpXSA9IHRlbXA7CisJCQkJ
fQorCQkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50cmllczsgaSsrKSB7CisJCQkJCWlmIChz
dGNiLT5hc29jLnN0cm1vdXRbcmVxLT5saXN0X29mX3N0cmVhbXNbaV1dLnN0YXRlID09IFNDVFBf
U1RSRUFNX09QRU4pIHsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtyZXEtPmxpc3Rfb2Zfc3Ry
ZWFtc1tpXV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HOworCQkJCQl9CisJCQkJ
fQorCQkJfSBlbHNlIHsKKwkJCQkvKiBJdHMgYWxsICovCisJCQkJZm9yIChpID0gMDsgaSA8IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RybW91
dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKQorCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKKwkJCQl9CisJCQl9CisJCQlh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJG
T1JNRUQ7CisJCX0gZWxzZSB7CisJCQkvKiBDYW4ndCBkbyBpdCwgc2luY2Ugd2UgaGF2ZSBzZW50
IG9uZSBvdXQgKi8KKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1f
UkVTRVRfUkVTVUxUX0VSUl9JTl9QUk9HUkVTUzsKKwkJfQorCWJhZF9ib3k6CisJCXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBd
KTsKKwkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOworCX0gZWxzZSBpZiAoYXNvYy0+c3RyX3Jl
c2V0X3NlcV9pbiAtIDEgPT0gc2VxKSB7CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQo
Y2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKKwl9IGVsc2UgaWYgKGFzb2Mt
PnN0cl9yZXNldF9zZXFfaW4gLSAyID09IHNlcSkgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRf
cmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSk7CisJfSBlbHNlIHsK
KwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgU0NUUF9TVFJFQU1fUkVT
RVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOworCX0KKwlzY3RwX3NlbmRfc3RyZWFtX3Jlc2V0X291
dF9pZl9wb3NzaWJsZShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworfQorCitzdGF0aWMgaW50
CitzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF90c24oc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfdHNuX3JlcXVlc3QgKnJlcSkKK3sKKwkvKiByZXNldCBhbGwgaW4gYW5kIG91dCBh
bmQgdXBkYXRlIHRoZSB0c24gKi8KKwkvKgorCSAqIEEpIHJlc2V0IG15IHN0ci1zZXEncyBvbiBp
biBhbmQgb3V0LiBCKSBTZWxlY3QgYSByZWNlaXZlIG5leHQsCisJICogYW5kIHNldCBjdW0tYWNr
IHRvIGl0LiBBbHNvIHByb2Nlc3MgdGhpcyBzZWxlY3RlZCBudW1iZXIgYXMgYQorCSAqIGZ3ZC10
c24gYXMgd2VsbC4gQykgc2V0IGluIHRoZSByZXNwb25zZSBteSBuZXh0IHNlbmRpbmcgc2VxLgor
CSAqLworCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIGZ3ZHRzbjsKKwlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOworCWludCBhYm9ydF9mbGFnID0gMDsK
Kwl1aW50MzJfdCBzZXE7CisKKwlzZXEgPSBudG9obChyZXEtPnJlcXVlc3Rfc2VxKTsKKwlpZiAo
YXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJYXNvYy0+bGFzdF9yZXNldF9hY3Rp
b25bMV0gPSBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdOworCQlpZiAoIShhc29jLT5s
b2NhbF9zdHJyZXNldF9zdXBwb3J0ICYgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSkpIHsK
KwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxU
X0RFTklFRDsKKwkJfSBlbHNlIHsKKwkJCWZ3ZHRzbi5jaC5jaHVua19sZW5ndGggPSBodG9ucyhz
aXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspKTsKKwkJCWZ3ZHRzbi5jaC5jaHVu
a190eXBlID0gU0NUUF9GT1JXQVJEX0NVTV9UU047CisJCQlmd2R0c24uY2guY2h1bmtfZmxhZ3Mg
PSAwOworCQkJZndkdHNuLm5ld19jdW11bGF0aXZlX3RzbiA9IGh0b25sKHN0Y2ItPmFzb2MuaGln
aGVzdF90c25faW5zaWRlX21hcCArIDEpOworCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3Rj
YiwgJmZ3ZHRzbiwgJmFib3J0X2ZsYWcsIE5VTEwsIDApOworCQkJaWYgKGFib3J0X2ZsYWcpIHsK
KwkJCQlyZXR1cm4gKDEpOworCQkJfQorCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCAr
PSBTQ1RQX1NUUkVBTV9SRVNFVF9UU05fREVMVEE7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3Rw
X2xvZ19tYXAoMCwgMTAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1NM
SURFX1JFU1VMVCk7CisJCQl9CisJCQlhc29jLT50c25fbGFzdF9kZWxpdmVyZWQgPSBhc29jLT5j
dW11bGF0aXZlX3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJCQlhc29jLT5t
YXBwaW5nX2FycmF5X2Jhc2VfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCArIDE7
CisJCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwgYXNvYy0+bWFwcGluZ19hcnJheV9z
aXplKTsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbWFwOworCQkJbWVtc2V0KGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIDAsIGFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSk7CisJCQlhdG9taWNfYWRkX2ludCgmYXNvYy0+c2VuZGlu
Z19zZXEsIDEpOworCQkJLyogc2F2ZSBvZmYgaGlzdG9yaWNhbCBkYXRhIGZvciByZXRyYW5zICov
CisJCQlhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzFdID0gYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsw
XTsKKwkJCWFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMF0gPSBhc29jLT5zZW5kaW5nX3NlcTsKKwkJ
CWFzb2MtPmxhc3RfYmFzZV90c25zZW50WzFdID0gYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMF07
CisJCQlhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFswXSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFz
ZV90c247CisJCQlzY3RwX3Jlc2V0X291dF9zdHJlYW1zKHN0Y2IsIDAsICh1aW50MTZfdCAqKSBO
VUxMKTsKKwkJCXNjdHBfcmVzZXRfaW5fc3RyZWFtKHN0Y2IsIDAsICh1aW50MTZfdCAqKSBOVUxM
KTsKKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVT
VUxUX1BFUkZPUk1FRDsKKwkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF90c24oc3RjYiwgYXNv
Yy0+c2VuZGluZ19zZXEsIChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgMSksIDApOwor
CQl9CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNuKGNoaywgc2VxLCBhc29jLT5s
YXN0X3Jlc2V0X2FjdGlvblswXSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNvYy0+bGFzdF9zZW5kaW5nX3NlcVswXSwgYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMF0pOwor
CQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7CisJfSBlbHNlIGlmIChhc29jLT5zdHJfcmVzZXRf
c2VxX2luIC0gMSA9PSBzZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdF90c24o
Y2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdLAorCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBdLCBhc29jLT5sYXN0X2Jh
c2VfdHNuc2VudFswXSk7CisJfSBlbHNlIGlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMiA9
PSBzZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdF90c24oY2hrLCBzZXEsIGFz
b2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzFdLCBhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFsx
XSk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwg
U0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOworCX0KKwlyZXR1cm4gKDAp
OworfQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3Rfb3V0KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisg
ICAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICpyZXEsIGludCB0cnVuYykK
K3sKKwl1aW50MzJfdCBzZXEsIHRzbjsKKwlpbnQgbnVtYmVyX2VudHJpZXMsIGxlbjsKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOworCisJc2VxID0gbnRvaGwo
cmVxLT5yZXF1ZXN0X3NlcSk7CisKKwkvKiBub3cgaWYgaXRzIG5vdCBhIGR1cGxpY2F0ZSB3ZSBw
cm9jZXNzIGl0ICovCisJaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPT0gc2VxKSB7CisJCWxl
biA9IG50b2hzKHJlcS0+cGgucGFyYW1fbGVuZ3RoKTsKKwkJbnVtYmVyX2VudHJpZXMgPSAoKGxl
biAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QpKSAvIHNpemVv
Zih1aW50MTZfdCkpOworCQkvKgorCQkgKiB0aGUgc2VuZGVyIGlzIHJlc2V0dGluZywgaGFuZGxl
IHRoZSBsaXN0IGlzc3VlLi4gd2UgbXVzdAorCQkgKiBhKSB2ZXJpZnkgaWYgd2UgY2FuIGRvIHRo
ZSByZXNldCwgaWYgc28gbm8gcHJvYmxlbSBiKSBJZgorCQkgKiB3ZSBjYW4ndCBkbyB0aGUgcmVz
ZXQgd2UgbXVzdCBjb3B5IHRoZSByZXF1ZXN0LiBjKSBxdWV1ZQorCQkgKiBpdCwgYW5kIHNldHVw
IHRoZSBkYXRhIGluIHByb2Nlc3NvciB0byB0cmlnZ2VyIGl0IG9mZgorCQkgKiB3aGVuIG5lZWRl
ZCBhbmQgZGVxdWV1ZSBhbGwgdGhlIHF1ZXVlZCBkYXRhLgorCQkgKi8KKwkJdHNuID0gbnRvaGwo
cmVxLT5zZW5kX3Jlc2V0X2F0X3Rzbik7CisKKwkJLyogbW92ZSB0aGUgcmVzZXQgYWN0aW9uIGJh
Y2sgb25lICovCisJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gYXNvYy0+bGFzdF9yZXNl
dF9hY3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQ
X0VOQUJMRV9SRVNFVF9TVFJFQU1fUkVRKSkgeworCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25b
MF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9IGVsc2UgaWYgKHRydW5j
KSB7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9ERU5JRUQ7CisJCX0gZWxzZSBpZiAoU0NUUF9UU05fR0UoYXNvYy0+Y3VtdWxhdGl2ZV90
c24sIHRzbikpIHsKKwkJCS8qIHdlIGNhbiBkbyBpdCBub3cgKi8KKwkJCXNjdHBfcmVzZXRfaW5f
c3RyZWFtKHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXEtPmxpc3Rfb2Zfc3RyZWFtcyk7CisJCQlh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJG
T1JNRUQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogd2UgbXVzdCBxdWV1ZSBpdCB1cCBhbmQg
dGh1cyB3YWl0IGZvciB0aGUgVFNOJ3MKKwkJCSAqIHRvIGFycml2ZSB0aGF0IGFyZSBhdCBvciBi
ZWZvcmUgdHNuCisJCQkgKi8KKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICpsaXN0
ZTsKKwkJCWludCBzaXo7CisKKwkJCXNpeiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfbGlzdCkgKyAobnVtYmVyX2VudHJpZXMgKiBzaXplb2YodWludDE2X3QpKTsKKwkJCVNDVFBf
TUFMTE9DKGxpc3RlLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqLAorCQkJCSAgICBz
aXosIFNDVFBfTV9TVFJFU0VUKTsKKwkJCWlmIChsaXN0ZSA9PSBOVUxMKSB7CisJCQkJLyogZ2Fr
IG91dCBvZiBtZW1vcnkgKi8KKwkJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jl
c3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOworCQkJCXJldHVybjsK
KwkJCX0KKwkJCWxpc3RlLT5zZXEgPSBzZXE7CisJCQlsaXN0ZS0+dHNuID0gdHNuOworCQkJbGlz
dGUtPm51bWJlcl9lbnRyaWVzID0gbnVtYmVyX2VudHJpZXM7CisJCQltZW1jcHkoJmxpc3RlLT5s
aXN0X29mX3N0cmVhbXMsIHJlcS0+bGlzdF9vZl9zdHJlYW1zLCBudW1iZXJfZW50cmllcyAqIHNp
emVvZih1aW50MTZfdCkpOworCQkJVEFJTFFfSU5TRVJUX1RBSUwoJmFzb2MtPnJlc2V0SGVhZCwg
bGlzdGUsIG5leHRfcmVzcCk7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9JTl9QUk9HUkVTUzsKKwkJfQorCQlzY3RwX2FkZF9zdHJlYW1f
cmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7CisJCWFz
b2MtPnN0cl9yZXNldF9zZXFfaW4rKzsKKwl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRfc2Vx
X2luIC0gMSkgPT0gc2VxKSB7CisJCS8qCisJCSAqIG9uZSBzZXEgYmFjaywganVzdCBlY2hvIGJh
Y2sgbGFzdCBhY3Rpb24gc2luY2UgbXkKKwkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCisJCSAqLwor
CQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0
X2FjdGlvblswXSk7CisJfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDIpID09
IHNlcSkgeworCQkvKgorCQkgKiB0d28gc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0
aW9uIHNpbmNlIG15CisJCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgorCQkgKi8KKwkJc2N0cF9hZGRf
c3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMV0p
OworCX0gZWxzZSB7CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIFND
VFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2hhbmRsZV9zdHJfcmVzZXRfYWRkX3N0cm0oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisJCQkgICAgICAgc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X2FkZF9zdHJtICAqc3RyX2FkZCkKK3sKKwkvKgorCSAqIFBlZXIgaXMgcmVxdWVz
dGluZyB0byBhZGQgbW9yZSBzdHJlYW1zLgorCSAqIElmIGl0cyB3aXRoaW4gb3VyIG1heC1zdHJl
YW1zIHdlIHdpbGwKKwkgKiBhbGxvdyBpdC4KKwkgKi8KKwl1aW50MzJfdCBudW1fc3RyZWFtLCBp
OworCXVpbnQzMl90IHNlcTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNi
LT5hc29jOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjdGwsICpuY3RsOworCisJLyog
R2V0IHRoZSBudW1iZXIuICovCisJc2VxID0gbnRvaGwoc3RyX2FkZC0+cmVxdWVzdF9zZXEpOwor
CW51bV9zdHJlYW0gPSBudG9ocyhzdHJfYWRkLT5udW1iZXJfb2Zfc3RyZWFtcyk7CisJLyogTm93
IHdoYXQgd291bGQgYmUgdGhlIG5ldyB0b3RhbD8gKi8KKwlpZiAoYXNvYy0+c3RyX3Jlc2V0X3Nl
cV9pbiA9PSBzZXEpIHsKKwkJbnVtX3N0cmVhbSArPSBzdGNiLT5hc29jLnN0cmVhbWluY250Owor
CQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gc3RjYi0+YXNvYy5sYXN0X3Jlc2V0
X2FjdGlvblswXTsKKwkJaWYgKCEoYXNvYy0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCAmIFNDVFBf
RU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEpKSB7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsw
XSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCX0gZWxzZSBpZiAoKG51bV9z
dHJlYW0gPiBzdGNiLT5hc29jLm1heF9pbmJvdW5kX3N0cmVhbXMpIHx8CisJCSAgICAgICAgICAg
KG51bV9zdHJlYW0gPiAweGZmZmYpKSB7CisJCQkvKiBXZSBtdXN0IHJlamVjdCBpdCB0aGV5IGFz
ayBmb3IgdG8gbWFueSAqLworICBkZW5pZWQ6CisJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0
aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJfSBlbHNlIHsKKwkJ
CS8qIE9rLCB3ZSBjYW4gZG8gdGhhdCA6LSkgKi8KKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAq
b2xkc3RybTsKKworCQkJLyogc2F2ZSBvZmYgdGhlIG9sZCAqLworCQkJb2xkc3RybSA9IHN0Y2It
PmFzb2Muc3RybWluOworCQkJU0NUUF9NQUxMT0Moc3RjYi0+YXNvYy5zdHJtaW4sIHN0cnVjdCBz
Y3RwX3N0cmVhbV9pbiAqLAorCQkJICAgICAgICAgICAgKG51bV9zdHJlYW0gKiBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX2luKSksCisJCQkgICAgICAgICAgICBTQ1RQX01fU1RSTUkpOworCQkJ
aWYgKHN0Y2ItPmFzb2Muc3RybWluID09IE5VTEwpIHsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbiA9
IG9sZHN0cm07CisJCQkJZ290byBkZW5pZWQ7CisJCQl9CisJCQkvKiBjb3B5IG9mZiB0aGUgb2xk
IGRhdGEgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbWluY250OyBpKysp
IHsKKwkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltpXS5pbnF1ZXVlKTsKKwkJCQlU
QUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltpXS51bm9faW5xdWV1ZSk7CisJCQkJc3RjYi0+
YXNvYy5zdHJtaW5baV0uc2lkID0gaTsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5sYXN0X21p
ZF9kZWxpdmVyZWQgPSBvbGRzdHJtW2ldLmxhc3RfbWlkX2RlbGl2ZXJlZDsKKwkJCQlzdGNiLT5h
c29jLnN0cm1pbltpXS5kZWxpdmVyeV9zdGFydGVkID0gb2xkc3RybVtpXS5kZWxpdmVyeV9zdGFy
dGVkOworCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLnBkX2FwaV9zdGFydGVkID0gb2xkc3RybVtp
XS5wZF9hcGlfc3RhcnRlZDsKKwkJCQkvKiBub3cgYW55dGhpbmcgb24gdGhvc2UgcXVldWVzPyAq
LworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjdGwsICZvbGRzdHJtW2ldLmlucXVldWUsIG5leHRf
aW5zdHJtLCBuY3RsKSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RybVtpXS5pbnF1ZXVlLCBj
dGwsIG5leHRfaW5zdHJtKTsKKwkJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Muc3Ry
bWluW2ldLmlucXVldWUsIGN0bCwgbmV4dF9pbnN0cm0pOworCQkJCX0KKwkJCQlUQUlMUV9GT1JF
QUNIX1NBRkUoY3RsLCAmb2xkc3RybVtpXS51bm9faW5xdWV1ZSwgbmV4dF9pbnN0cm0sIG5jdGwp
IHsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZvbGRzdHJtW2ldLnVub19pbnF1ZXVlLCBjdGwsIG5leHRf
aW5zdHJtKTsKKwkJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Muc3RybWluW2ldLnVu
b19pbnF1ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKKwkJCQl9CisJCQl9CisJCQkvKiBJbml0IHRo
ZSBuZXcgc3RyZWFtcyAqLworCQkJZm9yIChpID0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsgaSA8
IG51bV9zdHJlYW07IGkrKykgeworCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybWluW2ld
LmlucXVldWUpOworCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybWluW2ldLnVub19pbnF1
ZXVlKTsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5zaWQgPSBpOworCQkJCXN0Y2ItPmFzb2Mu
c3RybWluW2ldLmxhc3RfbWlkX2RlbGl2ZXJlZCA9IDB4ZmZmZmZmZmY7CisJCQkJc3RjYi0+YXNv
Yy5zdHJtaW5baV0ucGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ld
LmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCQkJfQorCQkJU0NUUF9GUkVFKG9sZHN0cm0sIFNDVFBf
TV9TVFJNSSk7CisJCQkvKiB1cGRhdGUgdGhlIHNpemUgKi8KKwkJCXN0Y2ItPmFzb2Muc3RyZWFt
aW5jbnQgPSBudW1fc3RyZWFtOworCQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblswXSA9
IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQ7CisJCQlzY3RwX25vdGlmeV9zdHJl
YW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250LCAwKTsKKwkJfQorCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywg
c2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7CisJCWFzb2MtPnN0cl9yZXNldF9zZXFf
aW4rKzsKKwl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMSkgPT0gc2VxKSB7
CisJCS8qCisJCSAqIG9uZSBzZXEgYmFjaywganVzdCBlY2hvIGJhY2sgbGFzdCBhY3Rpb24gc2lu
Y2UgbXkKKwkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCisJCSAqLworCQlzY3RwX2FkZF9zdHJlYW1f
cmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7CisJfSBl
bHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDIpID09IHNlcSkgeworCQkvKgorCQkg
KiB0d28gc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15CisJCSAq
IHJlc3BvbnNlIHdhcyBsb3N0LgorCQkgKi8KKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3Vs
dChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMV0pOworCX0gZWxzZSB7CisJCXNj
dHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIFNDVFBfU1RSRUFNX1JFU0VUX1JF
U1VMVF9FUlJfQkFEX1NFUU5PKTsKKworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxl
X3N0cl9yZXNldF9hZGRfb3V0X3N0cm0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGssCisJCQkJICAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9z
dHJtICAqc3RyX2FkZCkKK3sKKwkvKgorCSAqIFBlZXIgaXMgcmVxdWVzdGluZyB0byBhZGQgbW9y
ZSBzdHJlYW1zLgorCSAqIElmIGl0cyB3aXRoaW4gb3VyIG1heC1zdHJlYW1zIHdlIHdpbGwKKwkg
KiBhbGxvdyBpdC4KKwkgKi8KKwl1aW50MTZfdCBudW1fc3RyZWFtOworCXVpbnQzMl90IHNlcTsK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOworCisJLyogR2V0
IHRoZSBudW1iZXIuICovCisJc2VxID0gbnRvaGwoc3RyX2FkZC0+cmVxdWVzdF9zZXEpOworCW51
bV9zdHJlYW0gPSBudG9ocyhzdHJfYWRkLT5udW1iZXJfb2Zfc3RyZWFtcyk7CisJLyogTm93IHdo
YXQgd291bGQgYmUgdGhlIG5ldyB0b3RhbD8gKi8KKwlpZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9p
biA9PSBzZXEpIHsKKwkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IHN0Y2ItPmFz
b2MubGFzdF9yZXNldF9hY3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1
cHBvcnQgJiBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRKSkgeworCQkJYXNvYy0+bGFzdF9y
ZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9IGVs
c2UgaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCQkvKiBXZSBt
dXN0IHJlamVjdCBpdCB3ZSBoYXZlIHNvbWV0aGluZyBwZW5kaW5nICovCisJCQlzdGNiLT5hc29j
Lmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9JTl9Q
Uk9HUkVTUzsKKwkJfSBlbHNlIHsKKwkJCS8qIE9rLCB3ZSBjYW4gZG8gdGhhdCA6LSkgKi8KKwkJ
CWludCBteWNoazsKKwkJCW15Y2hrID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7CisJCQlteWNo
ayArPSBudW1fc3RyZWFtOworCQkJaWYgKG15Y2hrIDwgMHgxMDAwMCkgeworCQkJCXN0Y2ItPmFz
b2MubGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9S
TUVEOworCQkJCWlmIChzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdGNiLCAwLCBOVUxMLCAwLCAw
LCAxLCBudW1fc3RyZWFtLCAwLCAxKSkgeworCQkJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0
aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJCQl9CisJCQl9IGVs
c2UgeworCQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9S
RVNFVF9SRVNVTFRfREVOSUVEOworCQkJfQorCQl9CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9y
ZXN1bHQoY2hrLCBzZXEsIHN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0pOworCQlhc29j
LT5zdHJfcmVzZXRfc2VxX2luKys7CisJfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9p
biAtIDEpID09IHNlcSkgeworCQkvKgorCQkgKiBvbmUgc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNr
IGxhc3QgYWN0aW9uIHNpbmNlIG15CisJCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgorCQkgKi8KKwkJ
c2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF0pOworCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyKSA9PSBz
ZXEpIHsKKwkJLyoKKwkJICogdHdvIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFjayBsYXN0IGFjdGlv
biBzaW5jZSBteQorCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KKwkJICovCisJCXNjdHBfYWRkX3N0
cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdKTsK
Kwl9IGVsc2UgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7CisJfQorfQorCisjaWYgIWRlZmlu
ZWQoX19QYW5kYV9fKQorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUp
KQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX3N0cmVhbV9yZXNldChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorCQkJIHN0
cnVjdCBzY3RwX2NodW5raGRyICpjaF9yZXEpCit7CisJdWludDE2X3QgcmVtYWluaW5nX2xlbmd0
aCwgcGFyYW1fbGVuLCBwdHlwZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwc3RvcmU7CisJdWlu
dDhfdCBjc3RvcmVbU0NUUF9DSFVOS19CVUZGRVJfU0laRV07CisJdWludDMyX3Qgc2VxID0gMDsK
KwlpbnQgbnVtX3JlcSA9IDA7CisJaW50IHRydW5jID0gMDsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGs7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0cnVjdCBzY3RwX3BhcmFt
aGRyICpwaDsKKwlpbnQgcmV0X2NvZGUgPSAwOworCWludCBudW1fcGFyYW0gPSAwOworCisJLyog
bm93IGl0IG1heSBiZSBhIHJlc2V0IG9yIGEgcmVzZXQtcmVzcG9uc2UgKi8KKwlyZW1haW5pbmdf
bGVuZ3RoID0gbnRvaHMoY2hfcmVxLT5jaHVua19sZW5ndGgpIC0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2NodW5raGRyKTsKKworCS8qIHNldHVwIGZvciBhZGRpbmcgdGhlIHJlc3BvbnNlICovCisJc2N0
cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCXJldHVy
biAocmV0X2NvZGUpOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVu
a19pZC5pZCA9IFNDVFBfU1RSRUFNX1JFU0VUOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtl
X2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwor
CWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7CisJY2hrLT5ib29rX3NpemUgPSBjaGstPnNlbmRfc2l6
ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY2hrLT5ib29rX3NpemVfc2NhbGUg
PSAwOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworCXN0cnJlc19u
b2NodW5rOgorCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsK
KwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hr
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm4gKHJldF9jb2RlKTsKKwl9CisJU0NUUF9C
VUZfUkVTVl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKKworCS8qIHNldHVwIGNo
dW5rIHBhcmFtZXRlcnMgKi8KKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwlj
aGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT53aG9UbyA9IE5VTEw7CisKKwljaCA9IG10b2QoY2hr
LT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwljaC0+Y2h1bmtfdHlwZSA9IFNDVFBf
U1RSRUFNX1JFU0VUOworCWNoLT5jaHVua19mbGFncyA9IDA7CisJY2gtPmNodW5rX2xlbmd0aCA9
IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFNDVFBf
U0laRTMyKGNoay0+c2VuZF9zaXplKTsKKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2No
dW5raGRyKTsKKwl3aGlsZSAocmVtYWluaW5nX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBf
cGFyYW1oZHIpKSB7CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9tX2dldHB0
cihtLCBvZmZzZXQsIHNpemVvZihwc3RvcmUpLCAodWludDhfdCAqKSZwc3RvcmUpOworCQlpZiAo
cGggPT0gTlVMTCkgeworCQkJLyogVFNOSCAqLworCQkJYnJlYWs7CisJCX0KKwkJcGFyYW1fbGVu
ID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisJCWlmICgocGFyYW1fbGVuID4gcmVtYWluaW5n
X2xlbmd0aCkgfHwKKwkJICAgIChwYXJhbV9sZW4gPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFt
aGRyKSArIHNpemVvZih1aW50MzJfdCkpKSkgeworCQkJLyogYmFkIHBhcmFtZXRlciBsZW5ndGgg
Ki8KKwkJCWJyZWFrOworCQl9CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9t
X2dldHB0cihtLCBvZmZzZXQsIG1pbihwYXJhbV9sZW4sIHNpemVvZihjc3RvcmUpKSwKKwkJCQkJ
CQkgICAodWludDhfdCAqKSZjc3RvcmUpOworCQlpZiAocGggPT0gTlVMTCkgeworCQkJLyogVFNO
SCAqLworCQkJYnJlYWs7CisJCX0KKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7CisJ
CW51bV9wYXJhbSsrOworCQlpZiAocGFyYW1fbGVuID4gc2l6ZW9mKGNzdG9yZSkpIHsKKwkJCXRy
dW5jID0gMTsKKwkJfSBlbHNlIHsKKwkJCXRydW5jID0gMDsKKwkJfQorCQlpZiAobnVtX3BhcmFt
ID4gU0NUUF9NQVhfUkVTRVRfUEFSQU1TKSB7CisJCQkvKiBoaXQgdGhlIG1heCBvZiBwYXJhbWV0
ZXJzIGFscmVhZHkgc29ycnkuLiAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHB0eXBlID09IFND
VFBfU1RSX1JFU0VUX09VVF9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
b3V0X3JlcXVlc3QgKnJlcV9vdXQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXplb2Yoc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJ
cmVxX291dCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKilwaDsKKwkJ
CW51bV9yZXErKzsKKwkJCWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykg
eworCQkJCXNlcSA9IG50b2hsKHJlcV9vdXQtPnJlc3BvbnNlX3NlcSk7CisJCQkJaWYgKHNlcSA9
PSBzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0KSB7CisJCQkJCS8qIGltcGxpY2l0IGFjayAq
LworCQkJCQkodm9pZClzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3RjYiwgc2Vx
LCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVELCBOVUxMKTsKKwkJCQl9CisJCQl9
CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF9vdXQoc3RjYiwgY2hrLCByZXFfb3V0
LCB0cnVuYyk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX09VVF9T
VFJFQU1TKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICpzdHJfYWRk
OworCisJCQlpZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9h
ZGRfc3RybSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cl9hZGQgPSAoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAqKXBoOworCQkJbnVtX3JlcSsrOworCQkJc2N0cF9oYW5k
bGVfc3RyX3Jlc2V0X2FkZF9zdHJtKHN0Y2IsIGNoaywgc3RyX2FkZCk7CisJCX0gZWxzZSBpZiAo
cHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVBTVMpIHsKKwkJCXN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9hZGRfc3RybSAgKnN0cl9hZGQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBz
aXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtKSkgeworCQkJCWJyZWFrOwor
CQkJfQorCQkJc3RyX2FkZCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICop
cGg7CisJCQludW1fcmVxKys7CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfYWRkX291dF9zdHJt
KHN0Y2IsIGNoaywgc3RyX2FkZCk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJfUkVT
RVRfSU5fUkVRVUVTVCkgeworCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3Qg
KnJlcV9pbjsKKworCQkJbnVtX3JlcSsrOworCQkJcmVxX2luID0gKHN0cnVjdCBzY3RwX3N0cmVh
bV9yZXNldF9pbl9yZXF1ZXN0ICopcGg7CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVz
dF9pbihzdGNiLCBjaGssIHJlcV9pbiwgdHJ1bmMpOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFND
VFBfU1RSX1JFU0VUX1RTTl9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
dHNuX3JlcXVlc3QgKnJlcV90c247CisKKwkJCW51bV9yZXErKzsKKwkJCXJlcV90c24gPSAoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICopcGg7CisJCQlpZiAoc2N0cF9oYW5k
bGVfc3RyX3Jlc2V0X3JlcXVlc3RfdHNuKHN0Y2IsIGNoaywgcmVxX3RzbikpIHsKKwkJCQlyZXRf
Y29kZSA9IDE7CisJCQkJZ290byBzdHJyZXNfbm9jaHVuazsKKwkJCX0KKwkJCS8qIG5vIG1vcmUg
Ki8KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX1JFU1BP
TlNFKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKnJlc3A7CisJCQl1
aW50MzJfdCByZXN1bHQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Jlc3BvbnNlKSkgeworCQkJCWJyZWFrOworCQkJfQorCQkJcmVzcCA9IChz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKilwaDsKKwkJCXNlcSA9IG50b2hsKHJl
c3AtPnJlc3BvbnNlX3NlcSk7CisJCQlyZXN1bHQgPSBudG9obChyZXNwLT5yZXN1bHQpOworCQkJ
aWYgKHNjdHBfaGFuZGxlX3N0cmVhbV9yZXNldF9yZXNwb25zZShzdGNiLCBzZXEsIHJlc3VsdCwg
cmVzcCkpIHsKKwkJCQlyZXRfY29kZSA9IDE7CisJCQkJZ290byBzdHJyZXNfbm9jaHVuazsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihw
YXJhbV9sZW4pOworCQlpZiAocmVtYWluaW5nX2xlbmd0aCA+PSBTQ1RQX1NJWkUzMihwYXJhbV9s
ZW4pKSB7CisJCQlyZW1haW5pbmdfbGVuZ3RoIC09IFNDVFBfU0laRTMyKHBhcmFtX2xlbik7CisJ
CX0gZWxzZSB7CisJCQlyZW1haW5pbmdfbGVuZ3RoID0gMDsKKwkJfQorCX0KKwlpZiAobnVtX3Jl
cSA9PSAwKSB7CisJCS8qIHdlIGhhdmUgbm8gcmVzcG9uc2UgZnJlZSB0aGUgc3R1ZmYgKi8KKwkJ
Z290byBzdHJyZXNfbm9jaHVuazsKKwl9CisJLyogb2sgd2UgaGF2ZSBhIGNodW5rIHRvIGxpbmsg
aW4gKi8KKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUs
CisJCQkgIGNoaywKKwkJCSAgc2N0cF9uZXh0KTsKKwlzdGNiLT5hc29jLmN0cmxfcXVldWVfY250
Kys7CisJcmV0dXJuIChyZXRfY29kZSk7Cit9CisKKy8qCisgKiBIYW5kbGUgYSByb3V0ZXIgb3Ig
ZW5kcG9pbnRzIHJlcG9ydCBvZiBhIHBhY2tldCBsb3NzLCB0aGVyZSBhcmUgdHdvIHdheXMKKyAq
IHRvIGhhbmRsZSB0aGlzLCBlaXRoZXIgd2UgZ2V0IHRoZSB3aG9sZSBwYWNrZXQgYW5kIG11c3Qg
ZGlzZWN0IGl0CisgKiBvdXJzZWx2ZXMgKHBvc3NpYmx5IHdpdGggdHJ1bmNhdGlvbiBhbmQgb3Ig
Y29ycnVwdGlvbikgb3IgaXQgaXMgYSBzdW1tYXJ5CisgKiBmcm9tIGEgbWlkZGxlIGJveCB0aGF0
IGRpZCB0aGUgZGlzZWN0dGluZyBmb3IgdXMuCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRs
ZV9wYWNrZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKKyAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDMyX3QgbGltaXQp
Cit7CisJdWludDMyX3QgYm90dGxlX2J3LCBvbl9xdWV1ZTsKKwl1aW50MTZfdCB0cnVuY19sZW47
CisJdW5zaWduZWQgaW50IGNobGVuOworCXVuc2lnbmVkIGludCBhdDsKKwlzdHJ1Y3Qgc2N0cF9j
aHVua19kZXNjIGRlc2M7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCisJY2hsZW4gPSBu
dG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwljaGxlbiAtPSBzaXplb2Yoc3RydWN0IHNjdHBf
cGt0ZHJvcF9jaHVuayk7CisJLyogWFhYIHBvc3NpYmxlIGNobGVuIHVuZGVyZmxvdyAqLworCWlm
IChjaGxlbiA9PSAwKSB7CisJCWNoID0gTlVMTDsKKwkJaWYgKGNwLT5jaC5jaHVua19mbGFncyAm
IFNDVFBfRlJPTV9NSURETEVfQk9YKQorCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGJ3cnB0
KTsKKwl9IGVsc2UgeworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKShjcC0+ZGF0YSAr
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQljaGxlbiAtPSBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpOworCQkvKiBYWFggcG9zc2libGUgY2hsZW4gdW5kZXJmbG93ICovCisJCW1lbXNldCgmZGVz
YywgMCwgc2l6ZW9mKGRlc2MpKTsKKwl9CisJdHJ1bmNfbGVuID0gKHVpbnQxNl90KSBudG9ocyhj
cC0+dHJ1bmNfbGVuKTsKKwlpZiAodHJ1bmNfbGVuID4gbGltaXQpIHsKKwkJdHJ1bmNfbGVuID0g
bGltaXQ7CisJfQorCisJLyogbm93IHRoZSBjaHVua3MgdGhlbXNlbHZlcyAqLworCXdoaWxlICgo
Y2ggIT0gTlVMTCkgJiYgKGNobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpKSB7
CisJCWRlc2MuY2h1bmtfdHlwZSA9IGNoLT5jaHVua190eXBlOworCQkvKiBnZXQgYW1vdW50IHdl
IG5lZWQgdG8gbW92ZSAqLworCQlhdCA9IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCQlpZiAo
YXQgPCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCQkvKiBjb3JydXB0IGNodW5r
LCBtYXliZSBhdCB0aGUgZW5kPyAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGNydXB0
KTsKKwkJCWJyZWFrOworCQl9CisJCWlmICh0cnVuY19sZW4gPT0gMCkgeworCQkJLyogd2UgYXJl
IHN1cHBvc2VkIHRvIGhhdmUgYWxsIG9mIGl0ICovCisJCQlpZiAoYXQgPiBjaGxlbikgeworCQkJ
CS8qIGNvcnJ1cHQgc2tpcCBpdCAqLworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBjcnVw
dCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBpcyB0aGVyZSBlbm91Z2gg
b2YgaXQgbGVmdCA/ICovCisJCQlpZiAoZGVzYy5jaHVua190eXBlID09IFNDVFBfREFUQSkgewor
CQkJCWlmIChjaGxlbiA8IChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKworCQkJCSAg
ICBzaXplb2YoZGVzYy5kYXRhX2J5dGVzKSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBl
bHNlIHsKKwkJCQlpZiAoY2hsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJ
CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoZGVzYy5jaHVua190eXBlID09IFND
VFBfREFUQSkgeworCQkJLyogY2FuIHdlIGdldCBvdXQgdGhlIHRzbj8gKi8KKwkJCWlmICgoY3At
PmNoLmNodW5rX2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpKQorCQkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3BkcnBtYmRhKTsKKworCQkJaWYgKGNobGVuID49IChzaXplb2Yoc3RydWN0IHNj
dHBfZGF0YV9jaHVuaykgKyBzaXplb2YodWludDMyX3QpKSkgeworCQkJCS8qIHllcCAqLworCQkJ
CXN0cnVjdCBzY3RwX2RhdGFfY2h1bmsgKmRjcDsKKwkJCQl1aW50OF90ICpkZHA7CisJCQkJdW5z
aWduZWQgaW50IGlpaTsKKworCQkJCWRjcCA9IChzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopY2g7
CisJCQkJZGRwID0gKHVpbnQ4X3QgKikgKGRjcCArIDEpOworCQkJCWZvciAoaWlpID0gMDsgaWlp
IDwgc2l6ZW9mKGRlc2MuZGF0YV9ieXRlcyk7IGlpaSsrKSB7CisJCQkJCWRlc2MuZGF0YV9ieXRl
c1tpaWldID0gZGRwW2lpaV07CisJCQkJfQorCQkJCWRlc2MudHNuX2lmYW55ID0gZGNwLT5kcC50
c247CisJCQl9IGVsc2UgeworCQkJCS8qIG5vcGUgd2UgYXJlIGRvbmUuICovCisJCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcGRycG5lZGF0KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsK
KwkJCWlmICgoY3AtPmNoLmNodW5rX2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpKQorCQkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBtYmN0KTsKKwkJfQorCisJCWlmIChwcm9jZXNzX2No
dW5rX2Ryb3Aoc3RjYiwgJmRlc2MsIG5ldCwgY3AtPmNoLmNodW5rX2ZsYWdzKSkgeworCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcGRycHBkYnJrKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQ
X1NJWkUzMihhdCkgPiBjaGxlbikgeworCQkJYnJlYWs7CisJCX0KKwkJY2hsZW4gLT0gU0NUUF9T
SVpFMzIoYXQpOworCQlpZiAoY2hsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7
CisJCQkvKiBkb25lLCBub25lIGxlZnQgKi8KKwkJCWJyZWFrOworCQl9CisJCWNoID0gKHN0cnVj
dCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KWNoICsgU0NUUF9TSVpFMzIoYXQpKTsKKwl9CisJ
LyogTm93IHVwZGF0ZSBhbnkgcnduZCAtLS0gcG9zc2libHkgKi8KKwlpZiAoKGNwLT5jaC5jaHVu
a19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSB7CisJCS8qIEZyb20gYSBwZWVy
LCB3ZSBnZXQgYSByd25kIHJlcG9ydCAqLworCQl1aW50MzJfdCBhX3J3bmQ7CisKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcGRycGZlaG9zKTsKKworCQlib3R0bGVfYncgPSBudG9obChjcC0+Ym90
dGxlX2J3KTsKKwkJb25fcXVldWUgPSBudG9obChjcC0+Y3VycmVudF9vbnEpOworCQlpZiAoYm90
dGxlX2J3ICYmIG9uX3F1ZXVlKSB7CisJCQkvKiBhIHJ3bmQgcmVwb3J0IGlzIGluIGhlcmUgKi8K
KwkJCWlmIChib3R0bGVfYncgPiBvbl9xdWV1ZSkKKwkJCQlhX3J3bmQgPSBib3R0bGVfYncgLSBv
bl9xdWV1ZTsKKwkJCWVsc2UKKwkJCQlhX3J3bmQgPSAwOworCisJCQlpZiAoYV9yd25kID09IDAp
CisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJCWVsc2UgeworCQkJCWlmIChhX3J3
bmQgPiBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgeworCQkJCQlzdGNiLT5hc29jLnBlZXJzX3J3
bmQgPQorCQkJCQkgICAgYV9yd25kIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisJCQkJfSBl
bHNlIHsKKwkJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJCQl9CisJCQkJaWYgKHN0
Y2ItPmFzb2MucGVlcnNfcnduZCA8CisJCQkJICAgIHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0
cF9zd3Nfc2VuZGVyKSB7CisJCQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCisJCQkJ
CXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsK
KwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGZtYm94KTsKKwl9CisKKwkvKiBub3cgbWlkZGxl
IGJveGVzIGluIHNhdCBuZXR3b3JrcyBnZXQgYSBjd25kIGJ1bXAgKi8KKwlpZiAoKGNwLT5jaC5j
aHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSAmJgorCSAgICAoc3RjYi0+YXNvYy5z
YXRfdDNfbG9zc19yZWNvdmVyeSA9PSAwKSAmJgorCSAgICAoc3RjYi0+YXNvYy5zYXRfbmV0d29y
aykpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBkZWJhdGFibGUgYnV0IGZvciBzYXQgbmV0d29ya3Mg
aXQgbWFrZXMgc2Vuc2UKKwkJICogTm90ZSBpZiBhIFQzIHRpbWVyIGhhcyB3ZW50IG9mZiwgd2Ug
d2lsbCBwcm9oaWJpdCBhbnkKKwkJICogY2hhbmdlcyB0byBjd25kIHVudGlsIHdlIGV4aXQgdGhl
IHQzIGxvc3MgcmVjb3ZlcnkuCisJCSAqLworCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkKHN0Y2IsCisJCQluZXQsIGNwLCAmYm90
dGxlX2J3LCAmb25fcXVldWUpOworCX0KK30KKworLyoKKyAqIGhhbmRsZXMgYWxsIGNvbnRyb2wg
Y2h1bmtzIGluIGEgcGFja2V0IGlucHV0czogLSBtOiBtYnVmIGNoYWluLCBhc3N1bWVkIHRvCisg
KiBzdGlsbCBjb250YWluIElQL1NDVFAgaGVhZGVyIC0gc3RjYjogaXMgdGhlIHRjYiBmb3VuZCBm
b3IgdGhpcyBwYWNrZXQgLQorICogb2Zmc2V0OiBvZmZzZXQgaW50byB0aGUgbWJ1ZiBjaGFpbiB0
byBmaXJzdCBjaHVua2hkciAtIGxlbmd0aDogaXMgdGhlCisgKiBsZW5ndGggb2YgdGhlIGNvbXBs
ZXRlIHBhY2tldCBvdXRwdXRzOiAtIGxlbmd0aDogbW9kaWZpZWQgdG8gcmVtYWluaW5nCisgKiBs
ZW5ndGggYWZ0ZXIgY29udHJvbCBwcm9jZXNzaW5nIC0gbmV0cDogbW9kaWZpZWQgdG8gbmV3IHNj
dHBfbmV0cyBhZnRlcgorICogY29va2llLWVjaG8gcHJvY2Vzc2luZyAtIHJldHVybiBOVUxMIHRv
IGRpc2NhcmQgdGhlIHBhY2tldCAoaWUuIG5vIGFzb2MsCisgKiBiYWQgcGFja2V0LC4uLikgb3Ro
ZXJ3aXNlIHJldHVybiB0aGUgdGNiIGZvciB0aGlzIHBhY2tldAorICovCisjaWYgIWRlZmluZWQo
X19QYW5kYV9fKQorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQor
I2VuZGlmCisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9wcm9jZXNzX2Nv
bnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zmc2V0LCBpbnQgbGVuZ3Ro
LAorICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBz
dHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2NodW5raGRyICpjaCwgc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMg
KipuZXRwLCBpbnQgKmZ3ZF90c25fc2VlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAg
IHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisj
ZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKwljaGFyIG1zZ1tT
Q1RQX0RJQUdfSU5GT19MRU5dOworCXVpbnQzMl90IHZ0YWdfaW47CisJaW50IG51bV9jaHVua3Mg
PSAwOwkvKiBudW1iZXIgb2YgY29udHJvbCBjaHVua3MgcHJvY2Vzc2VkICovCisJdWludDMyX3Qg
Y2hrX2xlbmd0aCwgY29udGlndW91czsKKwlpbnQgcmV0OworCWludCBhYm9ydF9ub191bmxvY2sg
PSAwOworCWludCBlY25lX3NlZW4gPSAwOworCS8qCisJICogSG93IGJpZyBzaG91bGQgdGhpcyBi
ZSwgYW5kIHNob3VsZCBpdCBiZSBhbGxvYydkPyBMZXRzIHRyeSB0aGUKKwkgKiBkLW10dS1jZWls
aW5nIGZvciBub3cgKDJrKSBhbmQgdGhhdCBzaG91bGQgaG9wZWZ1bGx5IHdvcmsgLi4uCisJICog
dW50aWwgd2UgZ2V0IGludG8ganVtYm8gZ3JhbXMgYW5kIHN1Y2guLgorCSAqLworCXVpbnQ4X3Qg
Y2h1bmtfYnVmW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOworCWludCBnb3RfYXV0aCA9IDA7CisJ
dWludDMyX3QgYXV0aF9vZmZzZXQgPSAwLCBhdXRoX2xlbiA9IDA7CisJaW50IGF1dGhfc2tpcHBl
ZCA9IDA7CisJaW50IGFzY29uZl9jbnQgPSAwOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlm
CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2NvbnRyb2w6IGlw
aGxlbj0ldSwgb2Zmc2V0PSV1LCBsZW5ndGg9JXUgc3RjYjolcFxuIiwKKwkJaXBobGVuLCAqb2Zm
c2V0LCBsZW5ndGgsICh2b2lkICopc3RjYik7CisKKwlpZiAoc3RjYikgeworCQlTQ1RQX1RDQl9M
T0NLX0FTU0VSVChzdGNiKTsKKwl9CisJLyogdmFsaWRhdGUgY2h1bmsgaGVhZGVyIGxlbmd0aC4u
LiAqLworCWlmIChudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSA8IHNpemVvZigqY2gpKSB7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJJbnZhbGlkIGhlYWRlciBsZW5ndGggJWRcbiIsCisJ
CQludG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisJCSpvZmZzZXQgPSBsZW5ndGg7CisJCXJldHVy
biAoc3RjYik7CisJfQorCS8qCisJICogdmFsaWRhdGUgdGhlIHZlcmlmaWNhdGlvbiB0YWcKKwkg
Ki8KKwl2dGFnX2luID0gbnRvaGwoc2gtPnZfdGFnKTsKKworCWlmIChjaC0+Y2h1bmtfdHlwZSA9
PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgIkl0cyBh
biBJTklUIG9mIGxlbjolZCB2dGFnOiV4XG4iLAorCQkJbnRvaHMoY2gtPmNodW5rX2xlbmd0aCks
IHZ0YWdfaW4pOworCQlpZiAodnRhZ19pbiAhPSAwKSB7CisJCQkvKiBwcm90b2NvbCBlcnJvci0g
c2lsZW50bHkgZGlzY2FyZC4uLiAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfYmFkdnRhZyk7
CisJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
fQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0gZWxzZSBpZiAoY2gtPmNodW5rX3R5cGUgIT0g
U0NUUF9DT09LSUVfRUNITykgeworCQkvKgorCQkgKiBJZiB0aGVyZSBpcyBubyBzdGNiLCBza2lw
IHRoZSBBVVRIIGNodW5rIGFuZCBwcm9jZXNzCisJCSAqIGxhdGVyIGFmdGVyIGEgc3RjYiBpcyBm
b3VuZCAodG8gdmFsaWRhdGUgdGhlIGxvb2t1cCB3YXMKKwkJICogdmFsaWQuCisJCSAqLworCQlp
ZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfQVVUSEVOVElDQVRJT04pICYmCisJCSAgICAoc3Rj
YiA9PSBOVUxMKSAmJgorCQkgICAgKGlucC0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpIHsKKwkJCS8q
IHNhdmUgdGhpcyBjaHVuayBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLworCQkJYXV0aF9za2lwcGVk
ID0gMTsKKwkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsKKwkJCWF1dGhfbGVuID0gbnRvaHMoY2gt
PmNodW5rX2xlbmd0aCk7CisKKwkJCS8qICh0ZW1wb3JhcmlseSkgbW92ZSBwYXN0IHRoaXMgY2h1
bmsgKi8KKwkJCSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIoYXV0aF9sZW4pOworCQkJaWYgKCpvZmZz
ZXQgPj0gbGVuZ3RoKSB7CisJCQkJLyogbm8gbW9yZSBkYXRhIGxlZnQgaW4gdGhlIG1idWYgY2hh
aW4gKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJ
CQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwK
KwkJCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgY2h1bmtfYnVmKTsKKwkJ
fQorCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJLyogSGVscCAqLworCQkJKm9mZnNldCA9IGxlbmd0
aDsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBf
Q09PS0lFX0VDSE8pIHsKKwkJCWdvdG8gcHJvY2Vzc19jb250cm9sX2NodW5rczsKKwkJfQorCQkv
KgorCQkgKiBmaXJzdCBjaGVjayBpZiBpdCdzIGFuIEFTQ09ORiB3aXRoIGFuIHVua25vd24gc3Jj
IGFkZHIgd2UKKwkJICogbmVlZCB0byBsb29rIGluc2lkZSB0byBmaW5kIHRoZSBhc3NvY2lhdGlv
bgorCQkgKi8KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GICYmIHN0Y2IgPT0g
TlVMTCkgeworCQkJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmFzY29uZl9jaCA9IGNoOworCQkJdWlu
dDMyX3QgYXNjb25mX29mZnNldCA9IDAsIGFzY29uZl9sZW4gPSAwOworCisJCQkvKiBpbnAncyBy
ZWZjb3VudCBtYXkgYmUgcmVkdWNlZCAqLworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwor
CQkJYXNjb25mX29mZnNldCA9ICpvZmZzZXQ7CisJCQlkbyB7CisJCQkJYXNjb25mX2xlbiA9IG50
b2hzKGFzY29uZl9jaC0+Y2h1bmtfbGVuZ3RoKTsKKwkJCQlpZiAoYXNjb25mX2xlbiA8IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKQorCQkJCQlicmVhazsKKwkJCQlzdGNiID0g
c2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNjb25mKG0sCisJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZHN0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2gsICZpbnAsIG5ldHAsIHZyZl9pZCk7CisJCQkJaWYgKHN0Y2IgIT0gTlVMTCkKKwkJ
CQkJYnJlYWs7CisJCQkJYXNjb25mX29mZnNldCArPSBTQ1RQX1NJWkUzMihhc2NvbmZfbGVuKTsK
KwkJCQlhc2NvbmZfY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0s
IGFzY29uZl9vZmZzZXQsCisJCQkJCQkJCQkJICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIp
LCBjaHVua19idWYpOworCQkJfSB3aGlsZSAoYXNjb25mX2NoICE9IE5VTEwgJiYgYXNjb25mX2No
LT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJ
CQkvKgorCQkJCSAqIHJlZHVjZSBpbnAncyByZWZjb3VudCBpZiBub3QgcmVkdWNlZCBpbgorCQkJ
CSAqIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FzY29uZigpLgorCQkJCSAqLworCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisKKwkJCS8qIG5vdyBnbyBiYWNrIGFuZCB2ZXJpZnkg
YW55IGF1dGggY2h1bmsgdG8gYmUgc3VyZSAqLworCQkJaWYgKGF1dGhfc2tpcHBlZCAmJiAoc3Rj
YiAhPSBOVUxMKSkgeworCQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGg7CisKKwkJCQlh
dXRoID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKikKKwkJCQkJc2N0cF9tX2dldHB0cihtLCBh
dXRoX29mZnNldCwKKwkJCQkJCSAgICAgIGF1dGhfbGVuLCBjaHVua19idWYpOworCQkJCWdvdF9h
dXRoID0gMTsKKwkJCQlhdXRoX3NraXBwZWQgPSAwOworCQkJCWlmICgoYXV0aCA9PSBOVUxMKSB8
fCBzY3RwX2hhbmRsZV9hdXRoKHN0Y2IsIGF1dGgsIG0sCisJCQkJCQkJCSAgICAgICBhdXRoX29m
ZnNldCkpIHsKKwkJCQkJLyogYXV0aCBITUFDIGZhaWxlZCBzbyBkdW1wIGl0ICovCisJCQkJCSpv
ZmZzZXQgPSBsZW5ndGg7CisJCQkJCXJldHVybiAoc3RjYik7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
LyogcmVtYWluaW5nIGNodW5rcyBhcmUgSE1BQyBjaGVja2VkICovCisJCQkJCXN0Y2ItPmFzb2Mu
YXV0aGVudGljYXRlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9f
RklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9j
YXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJLyogbm8gYXNzb2NpYXRpb24sIHNvIGl0J3Mg
b3V0IG9mIHRoZSBibHVlLi4uICovCisJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgKm9m
ZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAor
I2VuZGlmCisJCQkJCSB2cmZfaWQsIHBvcnQpOworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCXJl
dHVybiAoTlVMTCk7CisJCX0KKwkJYXNvYyA9ICZzdGNiLT5hc29jOworCQkvKiBBQk9SVCBhbmQg
U0hVVERPV04gY2FuIHVzZSBlaXRoZXIgdl90YWcuLi4gKi8KKwkJaWYgKChjaC0+Y2h1bmtfdHlw
ZSA9PSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OKSB8fAorCQkgICAgKGNoLT5jaHVua190eXBlID09
IFNDVFBfU0hVVERPV05fQ09NUExFVEUpIHx8CisJCSAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NU
UF9QQUNLRVRfRFJPUFBFRCkpIHsKKwkJCS8qIFRha2UgdGhlIFQtYml0IGFsd2F5cyBpbnRvIGFj
Y291bnQuICovCisJCQlpZiAoKCgoY2gtPmNodW5rX2ZsYWdzICYgU0NUUF9IQURfTk9fVENCKSA9
PSAwKSAmJgorCQkJICAgICAodnRhZ19pbiA9PSBhc29jLT5teV92dGFnKSkgfHwKKwkJCSAgICAo
KChjaC0+Y2h1bmtfZmxhZ3MgJiBTQ1RQX0hBRF9OT19UQ0IpID09IFNDVFBfSEFEX05PX1RDQikg
JiYKKwkJCSAgICAgKGFzb2MtPnBlZXJfdnRhZyAhPSBodG9ubCgwKSkgJiYKKwkJCSAgICAgKHZ0
YWdfaW4gPT0gYXNvYy0+cGVlcl92dGFnKSkpIHsKKwkJCQkvKiB0aGlzIGlzIHZhbGlkICovCisJ
CQl9IGVsc2UgeworCQkJCS8qIGRyb3AgdGhpcyBwYWNrZXQuLi4gKi8KKwkJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19iYWR2dGFnKTsKKwkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfSBl
bHNlIGlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NIVVRET1dOX0FDSykgeworCQkJaWYgKHZ0
YWdfaW4gIT0gYXNvYy0+bXlfdnRhZykgeworCQkJCS8qCisJCQkJICogdGhpcyBjb3VsZCBiZSBh
IHN0YWxlIFNIVVRET1dOLUFDSyBvciB0aGUKKwkJCQkgKiBwZWVyIG5ldmVyIGdvdCB0aGUgU0hV
VERPV04tQ09NUExFVEUgYW5kCisJCQkJICogaXMgc3RpbGwgaHVuZzsgd2UgaGF2ZSBzdGFydGVk
IGEgbmV3IGFzb2MKKwkJCQkgKiBidXQgaXQgd29uJ3QgY29tcGxldGUgdW50aWwgdGhlIHNodXRk
b3duCisJCQkJICogaXMgY29tcGxldGVkCisJCQkJICovCisJCQkJaWYgKHN0Y2IgIT0gTlVMTCkg
eworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19m
dW5jX18pOworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1zZyk7CisJCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sICpvZmZzZXQsIHNyYywgZHN0
LAorCQkJCSAgICAgICAgICAgICAgICAgc2gsIGlucCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51
bSwKKyNlbmRpZgorCQkJCSAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCQlyZXR1
cm4gKE5VTEwpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZm9yIGFsbCBvdGhlciBjaHVua3Ms
IHZ0YWcgbXVzdCBtYXRjaCAqLworCQkJaWYgKHZ0YWdfaW4gIT0gYXNvYy0+bXlfdnRhZykgewor
CQkJCS8qIGludmFsaWQgdnRhZy4uLiAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMs
CisJCQkJCSJpbnZhbGlkIHZ0YWc6ICV4aCwgZXhwZWN0ICV4aFxuIiwKKwkJCQkJdnRhZ19pbiwg
YXNvYy0+bXlfdnRhZyk7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfYmFkdnRhZyk7CisJCQkJ
aWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQor
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCX0J
CQkvKiBlbmQgaWYgIVNDVFBfQ09PS0lFX0VDSE8gKi8KKwkvKgorCSAqIHByb2Nlc3MgYWxsIGNv
bnRyb2wgY2h1bmtzLi4uCisJICovCisJaWYgKCgoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxF
Q1RJVkVfQUNLKSB8fAorCSAgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfTlJfU0VMRUNUSVZF
X0FDSykgfHwKKwkgICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNU
KSkgJiYKKwkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NP
T0tJRV9FQ0hPRUQpKSB7CisJCS8qIGltcGxpZWQgY29va2llLWFjay4uIHdlIG11c3QgaGF2ZSBs
b3N0IHRoZSBhY2sgKi8KKwkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0IHNjdHBfY29v
a2llX2Fja19jaHVuayAqKWNoLCBzdGNiLAorCQkJCSAgICAgICAqbmV0cCk7CisJfQorCisgcHJv
Y2Vzc19jb250cm9sX2NodW5rczoKKwl3aGlsZSAoSVNfU0NUUF9DT05UUk9MKGNoKSkgeworCQkv
KiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8KKwkJY2hrX2xlbmd0aCA9IG50b2hzKGNoLT5jaHVu
a19sZW5ndGgpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAic2N0cF9wcm9jZXNzX2Nv
bnRyb2w6IHByb2Nlc3NpbmcgYSBjaHVuayB0eXBlPSV1LCBsZW49JXVcbiIsCisJCQljaC0+Y2h1
bmtfdHlwZSwgY2hrX2xlbmd0aCk7CisJCVNDVFBfTFRSQUNFX0NISyhpbnAsIHN0Y2IsIGNoLT5j
aHVua190eXBlLCBjaGtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSB8
fAorCQkgICAgKCpvZmZzZXQgKyAoaW50KWNoa19sZW5ndGgpID4gbGVuZ3RoKSB7CisJCQkqb2Zm
c2V0ID0gbGVuZ3RoOworCQkJcmV0dXJuIChzdGNiKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSNjQoc2N0cHNfaW5jb250cm9sY2h1bmtzKTsKKwkJLyoKKwkJICogSU5JVCBhbmQgSU5J
VC1BQ0sgb25seSBnZXRzIHRoZSBpbml0IGFjayAiaGVhZGVyIiBwb3J0aW9uCisJCSAqIG9ubHkg
YmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHByb2Nlc3MgdGhlIHBlZXIncyBDT09LSUUuCisJCSAq
IEFsbCBvdGhlcnMgZ2V0IGEgY29tcGxldGUgY2h1bmsuCisJCSAqLworCQlzd2l0Y2ggKGNoLT5j
aHVua190eXBlKSB7CisJCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkJY29udGlndW91cyA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfSU5J
VElBVElPTl9BQ0s6CisJCQljb250aWd1b3VzID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNr
X2NodW5rKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGlndW91cyA9IG1pbihjaGtf
bGVuZ3RoLCBzaXplb2YoY2h1bmtfYnVmKSk7CisJCQlicmVhazsKKwkJfQorCQljaCA9IChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXMsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19idWYpOworCQlpZiAoY2gg
PT0gTlVMTCkgeworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCWlmIChzdGNiICE9IE5VTEwpIHsK
KwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCQlyZXR1cm4gKE5VTEwpOworCQl9
CisKKwkJbnVtX2NodW5rcysrOworCQkvKiBTYXZlIG9mZiB0aGUgbGFzdCBwbGFjZSB3ZSBnb3Qg
YSBjb250cm9sIGZyb20gKi8KKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJaWYgKCgobmV0cCAh
PSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHx8IChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0FT
Q09ORikpIHsKKwkJCQkvKgorCQkJCSAqIGFsbG93IGxhc3RfY29udHJvbCB0byBiZSBOVUxMIGlm
CisJCQkJICogQVNDT05GLi4uIEFTQ09ORiBwcm9jZXNzaW5nIHdpbGwgZmluZCB0aGUKKwkJCQkg
KiByaWdodCBuZXQgbGF0ZXIKKwkJCQkgKi8KKwkJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpu
ZXRwICE9IE5VTEwpKQorCQkJCQlzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tID0g
Km5ldHA7CisJCQl9CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0cF9h
dWRpdF9sb2coMHhCMCwgY2gtPmNodW5rX3R5cGUpOworI2VuZGlmCisKKwkJLyogY2hlY2sgdG8g
c2VlIGlmIHRoaXMgY2h1bmsgcmVxdWlyZWQgYXV0aCwgYnV0IGlzbid0ICovCisJCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJgorCQkgICAgc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNoLT5jaHVu
a190eXBlLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSAmJgorCQkgICAgIXN0Y2ItPmFz
b2MuYXV0aGVudGljYXRlZCkgeworCQkJLyogInNpbGVudGx5IiBpZ25vcmUgKi8KKwkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7CisJCQlnb3RvIG5leHRfY2h1bms7CisJ
CX0KKwkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgeworCQljYXNlIFNDVFBfSU5JVElBVElPTjoK
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0lOSVRcbiIpOworCQkJLyogVGhl
IElOSVQgY2h1bmsgbXVzdCBiZSB0aGUgb25seSBjaHVuay4gKi8KKwkJCWlmICgobnVtX2NodW5r
cyA+IDEpIHx8CisJCQkgICAgKGxlbmd0aCAtICpvZmZzZXQgPiAoaW50KVNDVFBfU0laRTMyKGNo
a19sZW5ndGgpKSkgeworCQkJCS8qIFJGQyA0OTYwIHJlcXVpcmVzIHRoYXQgbm8gQUJPUlQgaXMg
c2VudCAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJaWYgKHN0Y2IgIT0gTlVMTCkgewor
CQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCXJldHVybiAoTlVMTCk7CisJ
CQl9CisJCQkvKiBIb25vciBvdXIgcmVzb3VyY2UgbGltaXQuICovCisJCQlpZiAoY2hrX2xlbmd0
aCA+IFNDVFBfTEFSR0VTVF9JTklUX0FDQ0VQVEVEKSB7CisJCQkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX09VVF9PRl9SRVNDLCAiIik7CisJCQkJc2N0cF9hYm9ydF9h
c3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCQkJCSAgICAgICBzcmMsIGRzdCwg
c2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJu
IChOVUxMKTsKKwkJCX0KKwkJCXNjdHBfaGFuZGxlX2luaXQobSwgaXBobGVuLCAqb2Zmc2V0LCBz
cmMsIGRzdCwgc2gsCisJCQkgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
ICopY2gsIGlucCwKKwkJCSAgICAgICAgICAgICAgICAgc3RjYiwgKm5ldHAsICZhYm9ydF9ub191
bmxvY2ssCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9y
dCk7CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJaWYgKCghYWJvcnRfbm9fdW5sb2NrKSAmJiAo
c3RjYiAhPSBOVUxMKSkgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJCXJl
dHVybiAoTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BBRF9DSFVOSzoKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfSU5JVElBVElPTl9BQ0s6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5Q
VVQzLCAiU0NUUF9JTklUX0FDS1xuIik7CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKKwkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55
bW9yZSAqLworCQkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSkpIHsKKwkJCQkJOworCQkJCX0gZWxzZSB7CisJCQkJCSpvZmZzZXQgPSBs
ZW5ndGg7CisJCQkJCWlmIChzdGNiICE9IE5VTEwpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQkJCXNvID0gU0NUUF9JTlBfU08o
aW5wKTsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsK
KwkJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3Nv
YyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18yOSk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJCQlTQ1RQX1NPQ0tF
VF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CQl9CisJCQl9CisJCQkvKiBUaGUgSU5JVC1BQ0sgY2h1bmsgbXVzdCBiZSB0aGUgb25seSBjaHVu
ay4gKi8KKwkJCWlmICgobnVtX2NodW5rcyA+IDEpIHx8CisJCQkgICAgKGxlbmd0aCAtICpvZmZz
ZXQgPiAoaW50KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgeworCQkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAo
Km5ldHAgIT0gTlVMTCkpIHsKKwkJCQlyZXQgPSBzY3RwX2hhbmRsZV9pbml0X2FjayhtLCBpcGhs
ZW4sICpvZmZzZXQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNo
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9pbml0X2Fja19j
aHVuayAqKWNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2IsICpuZXRwLAor
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYm9ydF9ub191bmxvY2ssCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5
cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZf
aWQpOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQlpZiAoYWJvcnRfbm9fdW5sb2NrKSB7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0K
KwkJCS8qCisJCQkgKiBTcGVjaWFsIGNhc2UsIEkgbXVzdCBjYWxsIHRoZSBvdXRwdXQgcm91dGlu
ZSB0bworCQkJICogZ2V0IHRoZSBjb29raWUgZWNob2VkCisJCQkgKi8KKwkJCWlmICgoc3RjYiAh
PSBOVUxMKSAmJiAocmV0ID09IDApKSB7CisJCQkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0MsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJCQl9CisJCQlyZXR1cm4gKHN0Y2IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9T
RUxFQ1RJVkVfQUNLOgorCQljYXNlIFNDVFBfTlJfU0VMRUNUSVZFX0FDSzoKKwkJeworCQkJaW50
IGFib3J0X25vdyA9IDA7CisJCQl1aW50MzJfdCBhX3J3bmQsIGN1bV9hY2s7CisJCQl1aW50MTZf
dCBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwOworCQkJdWludDhfdCBmbGFnczsKKwkJCWlu
dCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwOworCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQz
LCAiJXNcbiIsCisJCQkJY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLID8gIlND
VFBfU0FDSyIgOiAiU0NUUF9OUl9TQUNLIik7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2
c2Fja3MpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TkRBVEExLCAiTm8gc3RjYiB3aGVuIHByb2Nlc3NpbmcgJXMgY2h1bmtcbiIsCisJCQkJICAgICAg
ICAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSA/ICJTQ1RQX1NBQ0siIDog
IlNDVFBfTlJfU0FDSyIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNoLT5jaHVua190eXBl
ID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3NhY2tfY2h1bmspKSB7CisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTkRBVEEx
LCAiQmFkIHNpemUgb24gU0FDSyBjaHVuaywgdG9vIHNtYWxsXG4iKTsKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09
IDApIHsKKwkJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJCX0KKwkJCQlpZiAoY2hrX2xlbmd0
aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSkgeworCQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9uIE5SX1NBQ0sgY2h1bmssIHRvbyBzbWFsbFxu
Iik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChTQ1RQX0dFVF9TVEFURSgmc3Rj
Yi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgeworCQkJCS8qLQorCQkJ
CSAqIElmIHdlIGhhdmUgc2VudCBhIHNodXRkb3duLWFjaywgd2Ugd2lsbCBwYXkgbm8KKwkJCQkg
KiBhdHRlbnRpb24gdG8gYSBzYWNrIHNlbnQgaW4gdG8gdXMgc2luY2UKKwkJCQkgKiB3ZSBkb24n
dCBjYXJlIGFueW1vcmUuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlmbGFncyA9IGNo
LT5jaHVua19mbGFnczsKKwkJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9B
Q0spIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICpzYWNrOworCisJCQkJc2FjayA9IChz
dHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9IG50b2hsKHNhY2stPnNh
Y2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhzYWNrLT5zYWNrLm51bV9nYXBf
YWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSAwOworCQkJCW51bV9kdXAgPSBudG9ocyhzYWNr
LT5zYWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwoc2Fjay0+c2Fjay5hX3J3
bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykgKworCQkJCSAgICBu
dW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spICsKKwkJCQkgICAgbnVt
X2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0aCkgeworCQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIFNBQ0sgY2h1bmtcbiIpOworCQkJCQlicmVh
azsKKwkJCQl9CisJCQkJb2Zmc2V0X3NlZyA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBf
c2Fja19jaHVuayk7CisJCQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcgKyBudW1fc2VnICogc2l6
ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3Qg
c2N0cF9ucl9zYWNrX2NodW5rICpucl9zYWNrOworCisJCQkJbnJfc2FjayA9IChzdHJ1Y3Qgc2N0
cF9ucl9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9IG50b2hsKG5yX3NhY2stPm5yX3Nh
Y2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhucl9zYWNrLT5ucl9zYWNrLm51
bV9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSBudG9ocyhucl9zYWNrLT5ucl9zYWNr
Lm51bV9ucl9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9kdXAgPSBudG9ocyhucl9zYWNrLT5ucl9z
YWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwobnJfc2Fjay0+bnJfc2Fjay5h
X3J3bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuaykgKworCQkJ
CSAgICAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tf
YmxvY2spICsKKwkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0
aCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIE5SX1NB
Q0sgY2h1bmtcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2Zmc2V0X3NlZyA9ICpvZmZz
ZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayk7CisJCQkJb2Zmc2V0X2R1cCA9
IG9mZnNldF9zZWcgKyAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6ZW9mKHN0cnVjdCBzY3Rw
X2dhcF9hY2tfYmxvY2spOworCQkJfQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVz
IHByb2Nlc3MgY3VtX2FjazoleCBudW1fc2VnOiVkIGFfcnduZDolZFxuIiwKKwkJCQkoY2gtPmNo
dW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSA/ICJTQ1RQX1NBQ0siIDogIlNDVFBfTlJf
U0FDSyIsCisJCQkgICAgICAgIGN1bV9hY2ssIG51bV9zZWcsIGFfcnduZCk7CisJCQlzdGNiLT5h
c29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMTsKKwkJCWlmICgoc3RjYi0+YXNvYy5wcl9zY3Rw
X2NudCA9PSAwKSAmJgorCQkJICAgIChudW1fc2VnID09IDApICYmIChudW1fbnJfc2VnID09IDAp
ICYmCisJCQkgICAgU0NUUF9UU05fR0UoY3VtX2Fjaywgc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3Nl
cSkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zYXdfc2Fja193aXRoX2ZyYWdzID09IDApICYmCisJ
CQkgICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9PSAwKSAmJgorCQkJICAg
ICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpKSB7CisJCQkJLyoKKwkJCQkg
KiBXZSBoYXZlIGEgU0lNUExFIHNhY2sgaGF2aW5nIG5vCisJCQkJICogcHJpb3Igc2VnbWVudHMg
YW5kIGRhdGEgb24gc2VudAorCQkJCSAqIHF1ZXVlIHRvIGJlIGFja2VkLiBVc2UgdGhlCisJCQkJ
ICogZmFzdGVyIHBhdGggc2FjayBwcm9jZXNzaW5nLiBXZQorCQkJCSAqIGFsc28gYWxsb3cgd2lu
ZG93IHVwZGF0ZSBzYWNrcworCQkJCSAqIHdpdGggbm8gbWlzc2luZyBzZWdtZW50cyB0byBnbwor
CQkJCSAqIHRoaXMgd2F5IHRvby4KKwkJCQkgKi8KKwkJCQlzY3RwX2V4cHJlc3NfaGFuZGxlX3Nh
Y2soc3RjYiwgY3VtX2FjaywgYV9yd25kLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAm
YWJvcnRfbm93LCBlY25lX3NlZW4pOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoKG5ldHAgIT0gTlVM
TCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQkJCXNjdHBfaGFuZGxlX3NhY2sobSwgb2Zmc2V0
X3NlZywgb2Zmc2V0X2R1cCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAgICAgICBudW1fc2VnLCBu
dW1fbnJfc2VnLCBudW1fZHVwLCAmYWJvcnRfbm93LCBmbGFncywKKwkJCQkJICAgICAgICAgICAg
ICAgICBjdW1fYWNrLCBhX3J3bmQsIGVjbmVfc2Vlbik7CisJCQkJfQorCQkJfQorCQkJaWYgKGFi
b3J0X25vdykgeworCQkJCS8qIEFCT1JUIHNpZ25hbCBmcm9tIHNhY2sgcHJvY2Vzc2luZyAqLwor
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWlmIChU
QUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgorCQkJICAgIFRBSUxRX0VNUFRZ
KCZzdGNiLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1
ZXVlX2NudCA9PSAwKSkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5ERVJf
RFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCX0KKwkJCWJyZWFr
OworCQl9CisJCWNhc2UgU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDoKKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDMsICJTQ1RQX0hFQVJUQkVBVFxuIik7CisJCQlpZiAoKHN0Y2IgIT0gTlVMTCkg
JiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcmVjdmhlYXJ0YmVhdCk7CisJCQkJc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2soc3Rj
YiwgbSwgKm9mZnNldCwKKwkJCQkJCQljaGtfbGVuZ3RoLCAqbmV0cCk7CisJCQl9CisJCQlicmVh
azsKKwkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5Q
VVQzLCAiU0NUUF9IRUFSVEJFQVRfQUNLXG4iKTsKKwkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAo
Y2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkpIHsKKwkJ
CQkvKiBJdHMgbm90IG91cnMgKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAo
c3RjYik7CisJCQl9CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aGVhcnRiZWF0YWNrKTsK
KwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKKwkJCQlzY3RwX2hh
bmRsZV9oZWFydGJlYXRfYWNrKChzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgKiljaCwKKwkJ
CQkJCQkgIHN0Y2IsICpuZXRwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQUJPUlRf
QVNTT0NJQVRJT046CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9BQk9SVCwg
c3RjYiAlcFxuIiwKKwkJCQkodm9pZCAqKXN0Y2IpOworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJ
CWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkp
IHsKKwkJCQlpZiAoc2N0cF9oYW5kbGVfYWJvcnQoKHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICop
Y2gsIHN0Y2IsICpuZXRwKSkgeworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0gZWxzZSB7CisJ
CQkJCXJldHVybiAoc3RjYik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gKE5VTEwp
OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9XTjoKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDMsICJTQ1RQX1NIVVRET1dOLCBzdGNiICVwXG4iLAorCQkJCSh2b2lkICop
c3RjYik7CisJCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX3NodXRkb3duX2NodW5rKSkpIHsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJ
CXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9
IE5VTEwpKSB7CisJCQkJaW50IGFib3J0X2ZsYWcgPSAwOworCisJCQkJc2N0cF9oYW5kbGVfc2h1
dGRvd24oKHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICopY2gsCisJCQkJCQkgICAgIHN0Y2Is
ICpuZXRwLCAmYWJvcnRfZmxhZyk7CisJCQkJaWYgKGFib3J0X2ZsYWcpIHsKKwkJCQkJKm9mZnNl
dCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1NIVVRET1dOX0FDSzoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMs
ICJTQ1RQX1NIVVRET1dOX0FDSywgc3RjYiAlcFxuIiwgKHZvaWQgKilzdGNiKTsKKwkJCWlmICgo
c3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKKwkJ
CQlzY3RwX2hhbmRsZV9zaHV0ZG93bl9hY2soKHN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVu
ayAqKWNoLCBzdGNiLCAqbmV0cCk7CisJCQl9CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJcmV0
dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfT1BFUkFUSU9OX0VSUk9SOgorCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfT1BfRVJSXG4iKTsKKwkJCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkgJiYKKwkJCSAg
ICBzY3RwX2hhbmRsZV9lcnJvcihjaCwgc3RjYiwgKm5ldHAsIGNvbnRpZ3VvdXMpIDwgMCkgewor
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfQ09PS0lFX0VDSE86CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQz
LAorCQkJCSJTQ1RQX0NPT0tJRV9FQ0hPLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOworCQkJ
aWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXpl
ID4gMCkpIHsKKwkJCQk7CisJCQl9IGVsc2UgeworCQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0
ZWQgYW55bW9yZSAqLworCQkJCWFiZW5kOgorCQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsK
KwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQkvKi0KKwkJCSAqIEZpcnN0IGFy
ZSB3ZSBhY2NlcHRpbmc/IFdlIGRvIHRoaXMgYWdhaW4gaGVyZQorCQkJICogc2luY2UgaXQgaXMg
cG9zc2libGUgdGhhdCBhIHByZXZpb3VzIGVuZHBvaW50IFdBUworCQkJICogbGlzdGVuaW5nIHJl
c3BvbmRlZCB0byBhIElOSVQtQUNLIGFuZCB0aGVuCisJCQkgKiBjbG9zZWQuIFdlIG9wZW5lZCBh
bmQgYm91bmQuLiBhbmQgYXJlIG5vdyBubworCQkJICogbG9uZ2VyIGxpc3RlbmluZy4KKwkJCSAq
CisJCQkgKiBYWFhHTDogbm90ZXMgb24gY2hlY2tpbmcgbGlzdGVuIHF1ZXVlIGxlbmd0aC4KKwkJ
CSAqIDEpIFNDVFBfSVNfTElTVEVOSU5HKCkgZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuCisJCQkg
KiAgICBTT0xJU1RFTklORygpLCBiZWNhdXNlIGEgbGlzdGVuaW5nICJVRFAgdHlwZSIKKwkJCSAq
ICAgIHNvY2tldCBpc24ndCBsaXN0ZW5pbmcgaW4gdGVybXMgb2YgdGhlIHNvY2tldAorCQkJICog
ICAgbGF5ZXIuICBJdCBpcyBhIG5vcm1hbCBkYXRhIGZsb3cgc29ja2V0LCB0aGF0CisJCQkgKiAg
ICBjYW4gZm9yayBvZmYgbmV3IGNvbm5lY3Rpb25zLiAgVGh1cywgd2Ugc2hvdWxkCisJCQkgKiAg
ICBsb29rIGludG8gc29sX3FsZW4gb25seSBpbiBjYXNlIHdlIGFyZSAhVURQLgorCQkJICogMikg
Q2hlY2tpbmcgc29sX3FsZW4gaW4gZ2VuZXJhbCByZXF1aXJlcyBsb2NraW5nCisJCQkgKiAgICB0
aGUgc29ja2V0LCBhbmQgdGhpcyBjb2RlIGxhY2tzIHRoYXQuCisJCQkgKi8KKwkJCWlmICgoc3Rj
YiA9PSBOVUxMKSAmJgorCQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSB8fAorCQkJICAg
ICAoIShpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSAmJgorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKKwkJCSAg
ICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvbF9xbGVuID49IGlucC0+c2N0cF9zb2NrZXQtPnNvbF9x
bGltaXQpKSkgeworI2Vsc2UKKwkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvX3FsZW4gPj0g
aW5wLT5zY3RwX3NvY2tldC0+c29fcWxpbWl0KSkpIHsKKyNlbmRpZgorCQkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkJCQkgICAgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkpKSB7CisJCQkJCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOwor
CQkJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVuLAorCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxv
d2lkLAorI2VuZGlmCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsK
KwkJCQl9CisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBl
bHNlIHsKKwkJCQlzdHJ1Y3QgbWJ1ZiAqcmV0X2J1ZjsKKwkJCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
bGlucDsKKwkJCQlpZiAoc3RjYikgeworCQkJCQlsaW5wID0gTlVMTDsKKwkJCQl9IGVsc2Ugewor
CQkJCQlsaW5wID0gaW5wOworCQkJCX0KKworCQkJCWlmIChsaW5wICE9IE5VTEwpIHsKKwkJCQkJ
U0NUUF9BU09DX0NSRUFURV9MT0NLKGxpbnApOworCQkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCQkJCQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgeworCQkJCQkJU0NUUF9BU09DX0NS
RUFURV9VTkxPQ0sobGlucCk7CisJCQkJCQlnb3RvIGFiZW5kOworCQkJCQl9CisJCQkJfQorCisJ
CQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQlzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2tlZF9zdGNi
OworCisJCQkJCWxvY2tlZF9zdGNiID0gc3RjYjsKKwkJCQkJcmV0X2J1ZiA9CisJCQkJCQlzY3Rw
X2hhbmRsZV9jb29raWVfZWNobyhtLCBpcGhsZW4sCisJCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAqb2Zmc2V0LAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBzaCwKKwkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVuayAqKWNoLAorCQkJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgJmlucCwgJnN0Y2IsIG5ldHAsCisJCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICBhdXRoX3NraXBwZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBh
dXRoX29mZnNldCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfbGVuLAorCQkJ
CQkJICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2tlZF9zdGNiLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd2lkLAorI2VuZGlmCisJCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICB2cmZfaWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBw
b3J0KTsKKwkJCQkJaWYgKChsb2NrZWRfc3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3N0Y2IgIT0g
c3RjYikpIHsKKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfc3RjYik7CisJCQkJCX0KKwkJ
CQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCQkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7
CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlyZXRfYnVmID0gTlVMTDsKKwkJCQl9CisJCQkJ
aWYgKGxpbnAgIT0gTlVMTCkgeworCQkJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhsaW5wKTsK
KwkJCQl9CisJCQkJaWYgKHJldF9idWYgPT0gTlVMTCkgeworCQkJCQlpZiAoc3RjYiAhPSBOVUxM
KSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMywKKwkJCQkJCSJHQUssIG51bGwgYnVmZmVyXG4iKTsKKwkJCQkJKm9m
ZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJLyogaWYgQVVU
SCBza2lwcGVkLCBzZWUgaWYgaXQgdmVyaWZpZWQuLi4gKi8KKwkJCQlpZiAoYXV0aF9za2lwcGVk
KSB7CisJCQkJCWdvdF9hdXRoID0gMTsKKwkJCQkJYXV0aF9za2lwcGVkID0gMDsKKwkJCQl9CisJ
CQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSkgeworCQkJCQkvKgor
CQkJCQkgKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSBoYXZlCisJCQkJCSAqIHBlbmRpbmcgZGF0
YQorCQkJCQkgKi8KKwkJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJCQkJCWNo
ayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOworCQkJCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndo
b1RvKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CisJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9DT09LSUVfQUNLLCBzdGNiICVwXG4i
LCAodm9pZCAqKXN0Y2IpOworCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IGNoa19sZW5ndGggIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmspKSB7CisJCQkJcmV0dXJuIChzdGNi
KTsKKwkJCX0KKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkgeworCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCisJCQkJaWYg
KChzdGNiKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSkpIHsKKwkJCQkJ
OworCQkJCX0gZWxzZSBpZiAoc3RjYikgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7CisJ
CQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKKyNlbmRpZgorCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBT
Q1RQX05PUk1BTF9QUk9DLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5QVVQgKyBTQ1RQX0xPQ18zMCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7
CisjZW5kaWYKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJ
CQl9CisJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJ
CQkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuayAq
KWNoLCBzdGNiLCAqbmV0cCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0VDTl9FQ0hP
OgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfRUNOX0VDSE9cbiIpOworCQkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChjaGtfbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9l
Y25lX2NodW5rKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8KKwkJCQkqb2Zmc2V0ID0gbGVu
Z3RoOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5lY25fc3Vw
cG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQl9CisJCQlzY3RwX2hh
bmRsZV9lY25fZWNobygoc3RydWN0IHNjdHBfZWNuZV9jaHVuayAqKWNoLCBzdGNiKTsKKwkJCWVj
bmVfc2VlbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0VDTl9DV1I6CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9FQ05fQ1dSXG4iKTsKKwkJCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY3dyX2NodW5rKSkpIHsK
KwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAo
c3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25fY2h1bms7
CisJCQl9CisJCQlzY3RwX2hhbmRsZV9lY25fY3dyKChzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKilj
aCwgc3RjYiwgKm5ldHApOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QTEVU
RToKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1NIVVRET1dOX0NPTVBMRVRF
LCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOworCQkJLyogbXVzdCBiZSBmaXJzdCBhbmQgb25s
eSBjaHVuayAqLworCQkJaWYgKChudW1fY2h1bmtzID4gMSkgfHwKKwkJCSAgICAobGVuZ3RoIC0g
Km9mZnNldCA+IChpbnQpU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCkpKSB7CisJCQkJKm9mZnNldCA9
IGxlbmd0aDsKKwkJCQlyZXR1cm4gKHN0Y2IpOworCQkJfQorCQkJaWYgKChzdGNiICE9IE5VTEwp
ICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgeworCQkJCXNjdHBfaGFuZGxl
X3NodXRkb3duX2NvbXBsZXRlKChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayAq
KWNoLAorCQkJCQkJCSAgICAgIHN0Y2IsICpuZXRwKTsKKwkJCX0KKwkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQlyZXR1cm4gKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BU0NPTkY6CisJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9BU0NPTkZcbiIpOworCQkJaWYgKHN0
Y2IgIT0gTlVMTCkgeworCQkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMCkg
eworCQkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQkJfQorCQkJCXNjdHBfaGFuZGxlX2FzY29u
ZihtLCAqb2Zmc2V0LCBzcmMsCisJCQkJCQkgICAoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICop
Y2gsIHN0Y2IsIGFzY29uZl9jbnQgPT0gMCk7CisJCQkJYXNjb25mX2NudCsrOworCQkJfQorCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMywgIlNDVFBfQVNDT05GX0FDS1xuIik7CisJCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKSkgeworCQkJCS8qIEl0cyBub3Qgb3VycyAqLwor
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmICgo
c3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKKwkJ
CQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsKKwkJCQkJZ290byB1bmtu
b3duX2NodW5rOworCQkJCX0KKwkJCQkvKiBIZSdzIGFsaXZlIHNvIGdpdmUgaGltIGNyZWRpdCAq
LworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RI
UkVTSE9MRF9MT0dHSU5HKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NM
RUFSLAorCQkJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkJ
CSAgICAgICAwLAorCQkJCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJCQkJICAg
ICAgIF9fTElORV9fKTsKKwkJCQl9CisJCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
ID0gMDsKKwkJCQlzY3RwX2hhbmRsZV9hc2NvbmZfYWNrKG0sICpvZmZzZXQsCisJCQkJCQkgICAg
ICAgKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKiljaCwgc3RjYiwgKm5ldHAsICZhYm9y
dF9ub191bmxvY2spOworCQkJCWlmIChhYm9ydF9ub191bmxvY2spCisJCQkJCXJldHVybiAoTlVM
TCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjoKKwkJY2Fz
ZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAi
U0NUUF9GV0RfVFNOXG4iKTsKKwkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2ZvcndhcmRfdHNuX2NodW5rKSkgeworCQkJCS8qIEl0cyBub3Qgb3VycyAqLworCQkJCSpvZmZz
ZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKworCQkJaWYgKHN0Y2IgIT0g
TlVMTCkgeworCQkJCWludCBhYm9ydF9mbGFnID0gMDsKKworCQkJCWlmIChzdGNiLT5hc29jLnBy
c2N0cF9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQkJfQor
CQkJCSpmd2RfdHNuX3NlZW4gPSAxOworCQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55
bW9yZSAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19U
RVNUSU5HKQorCQkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7CisJCQkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgor
CQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAor
CQkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xP
Q18zMSk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCQkJKm9m
ZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQkJLyoKKwkJCQkg
KiBGb3Igc2VuZGluZyBhIFNBQ0sgdGhpcyBsb29rcyBsaWtlIERBVEEKKwkJCQkgKiBjaHVua3Mu
CisJCQkJICovCisJCQkJc3RjYi0+YXNvYy5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9IHN0Y2ItPmFz
b2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207CisJCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24o
c3RjYiwKKwkJCQkJCQkoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKiljaCwgJmFib3J0
X2ZsYWcsIG0sICpvZmZzZXQpOworCQkJCWlmIChhYm9ydF9mbGFnKSB7CisJCQkJCSpvZmZzZXQg
PSBsZW5ndGg7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJ
CWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAi
U0NUUF9TVFJFQU1fUkVTRVRcbiIpOworCQkJaWYgKCgoc3RjYiA9PSBOVUxMKSB8fCAoY2ggPT0g
TlVMTCkgfHwgKGNoa19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rz
bl9yZXEpKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3Ro
OworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5yZWNvbmZpZ19z
dXBwb3J0ZWQgPT0gMCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCX0KKwkJCWlmIChz
Y3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQoc3RjYiwgbSwgKm9mZnNldCwgY2gpKSB7CisJCQkJLyog
c3RvcCBwcm9jZXNzaW5nICovCisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKE5V
TEwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKKwkJCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1BBQ0tFVF9EUk9QUEVEXG4iKTsKKwkJCS8q
IHJlLWdldCBpdCBhbGwgcGxlYXNlICovCisJCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgeworCQkJCS8qIEl0cyBub3Qgb3VycyAqLworCQkJCSpv
ZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKworCQkJaWYgKChjaCAh
PSBOVUxMKSAmJiAoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0g
TlVMTCkpIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAwKSB7CisJ
CQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCQl9CisJCQkJc2N0cF9oYW5kbGVfcGFja2V0X2Ry
b3BwZWQoKHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmsgKiljaCwKKwkJCQkJCQkgICBzdGNiLCAq
bmV0cCwKKwkJCQkJCQkgICBtaW4oY2hrX2xlbmd0aCwgY29udGlndW91cykpOworCQkJfQorCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoKKwkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJTQ1RQX0FVVEhFTlRJQ0FUSU9OXG4iKTsKKwkJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCQkvKiBzYXZlIHRoZSBmaXJzdCBBVVRIIGZvciBsYXRlciBwcm9jZXNzaW5nICovCisJ
CQkJaWYgKGF1dGhfc2tpcHBlZCA9PSAwKSB7CisJCQkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsK
KwkJCQkJYXV0aF9sZW4gPSBjaGtfbGVuZ3RoOworCQkJCQlhdXRoX3NraXBwZWQgPSAxOworCQkJ
CX0KKwkJCQkvKiBza2lwIHRoaXMgY2h1bmsgKHRlbXBvcmFyaWx5KSAqLworCQkJCWdvdG8gbmV4
dF9jaHVuazsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsK
KwkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQl9CisJCQlpZiAoKGNoa19sZW5ndGggPCAoc2l6
ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspKSkgfHwKKwkJCSAgICAoY2hrX2xlbmd0aCA+IChz
aXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVuaykgKworCQkJCQkgICBTQ1RQX0FVVEhfRElHRVNU
X0xFTl9NQVgpKSkgeworCQkJCS8qIEl0cyBub3Qgb3VycyAqLworCQkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmIChnb3RfYXV0aCA9PSAxKSB7CisJ
CQkJLyogc2tpcCB0aGlzIGNodW5rLi4uIGl0J3MgYWxyZWFkeSBhdXRoJ2QgKi8KKwkJCQlnb3Rv
IG5leHRfY2h1bms7CisJCQl9CisJCQlnb3RfYXV0aCA9IDE7CisJCQlpZiAoKGNoID09IE5VTEwp
IHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiljaCwK
KwkJCQkJCQkgICAgIG0sICpvZmZzZXQpKSB7CisJCQkJLyogYXV0aCBITUFDIGZhaWxlZCBzbyBk
dW1wIHRoZSBwYWNrZXQgKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3Rj
Yik7CisJCQl9IGVsc2UgeworCQkJCS8qIHJlbWFpbmluZyBjaHVua3MgYXJlIEhNQUMgY2hlY2tl
ZCAqLworCQkJCXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCA9IDE7CisJCQl9CisJCQlicmVhazsK
KworCQlkZWZhdWx0OgorCQl1bmtub3duX2NodW5rOgorCQkJLyogaXQncyBhbiB1bmtub3duIGNo
dW5rISAqLworCQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAmIDB4NDApICYmIChzdGNiICE9IE5VTEwp
KSB7CisJCQkJc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICpjYXVzZTsKKwkJCQlpbnQgbGVu
OworCisJCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0
cF9nZW5fZXJyb3JfY2F1c2UpLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw
LCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCQkJaWYgKG9wX2VyciAhPSBOVUxMKSB7CisJCQkJ
CWxlbiA9IG1pbihTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKSwgKHVpbnQzMl90KShsZW5ndGggLSAq
b2Zmc2V0KSk7CisJCQkJCWNhdXNlID0gbXRvZChvcF9lcnIsIHN0cnVjdCBzY3RwX2dlbl9lcnJv
cl9jYXVzZSAqKTsKKwkJCQkJY2F1c2UtPmNvZGUgPSAgaHRvbnMoU0NUUF9DQVVTRV9VTlJFQ09H
X0NIVU5LKTsKKwkJCQkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKCh1aW50MTZfdCkobGVuICsgc2l6
ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSkpKTsKKwkJCQkJU0NUUF9CVUZfTEVOKG9w
X2VycikgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKTsKKwkJCQkJU0NUUF9C
VUZfTkVYVChvcF9lcnIpID0gU0NUUF9NX0NPUFlNKG0sICpvZmZzZXQsIGxlbiwgTV9OT1dBSVQp
OworCQkJCQlpZiAoU0NUUF9CVUZfTkVYVChvcF9lcnIpICE9IE5VTEwpIHsKKyNpZmRlZiBTQ1RQ
X01CVUZfTE9HR0lORworCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJCXNjdHBfbG9nX21iYyhT
Q1RQX0JVRl9ORVhUKG9wX2VyciksIFNDVFBfTUJVRl9JQ09QWSk7CisJCQkJCQl9CisjZW5kaWYK
KwkJCQkJCXNjdHBfcXVldWVfb3BfZXJyKHN0Y2IsIG9wX2Vycik7CisJCQkJCX0gZWxzZSB7CisJ
CQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmICgo
Y2gtPmNodW5rX3R5cGUgJiAweDgwKSA9PSAwKSB7CisJCQkJLyogZGlzY2FyZCB0aGlzIHBhY2tl
dCAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0JLyog
ZWxzZSBza2lwIHRoaXMgYmFkIGNodW5rIGFuZCBjb250aW51ZS4uLiAqLworCQkJYnJlYWs7CisJ
CX0JCS8qIHN3aXRjaCAoY2gtPmNodW5rX3R5cGUpICovCisKKworCW5leHRfY2h1bms6CisJCS8q
IGdldCB0aGUgbmV4dCBjaHVuayAqLworCQkqb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5n
dGgpOworCQlpZiAoKm9mZnNldCA+PSBsZW5ndGgpIHsKKwkJCS8qIG5vIG1vcmUgZGF0YSBsZWZ0
IGluIHRoZSBtYnVmIGNoYWluICovCisJCQlicmVhazsKKwkJfQorCQljaCA9IChzdHJ1Y3Qgc2N0
cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKKwkJCQkJCQkgICBzaXplb2Yo
c3RydWN0IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOworCQlpZiAoY2ggPT0gTlVMTCkgewor
CQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKwl9CQkJLyogd2hp
bGUgKi8KKworCWlmICgoYXNjb25mX2NudCA+IDApICYmIChzdGNiICE9IE5VTEwpKSB7CisJCXNj
dHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOworCX0KKwlyZXR1cm4gKHN0Y2IpOworfQorCisKKy8q
CisgKiBjb21tb24gaW5wdXQgY2h1bmsgcHJvY2Vzc2luZyAodjQgYW5kIHY2KQorICovCit2b2lk
CitzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVjdCBtYnVmICoqbW0sIGludCBpcGhs
ZW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY29tcHV0ZV9jcmMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZWNuX2JpdHMsCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBt
Zmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51bSwKKyNlbmRpZgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQp
Cit7CisJdWludDMyX3QgaGlnaF90c247CisJaW50IGZ3ZF90c25fc2VlbiA9IDAsIGRhdGFfcHJv
Y2Vzc2VkID0gMDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9ICptbSwgKm9wX2VycjsKKwljaGFyIG1zZ1tT
Q1RQX0RJQUdfSU5GT19MRU5dOworCWludCB1bl9zZW50OworCWludCBjbnRfY3RybF9yZWFkeSA9
IDA7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9IE5VTEwsICppbnBfZGVjciA9IE5VTEw7CisJ
c3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgPSBO
VUxMOworCisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmRhdGFncmFtcyk7CisjaWZkZWYgU0NU
UF9BVURJVElOR19FTkFCTEVECisJc2N0cF9hdWRpdF9sb2coMHhFMCwgMSk7CisJc2N0cF9hdWRp
dGluZygwLCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwlpZiAoY29tcHV0ZV9jcmMgIT0gMCkg
eworCQl1aW50MzJfdCBjaGVjaywgY2FsY19jaGVjazsKKworCQljaGVjayA9IHNoLT5jaGVja3N1
bTsKKwkJc2gtPmNoZWNrc3VtID0gMDsKKwkJY2FsY19jaGVjayA9IHNjdHBfY2FsY3VsYXRlX2Nr
c3VtKG0sIGlwaGxlbik7CisJCXNoLT5jaGVja3N1bSA9IGNoZWNrOworCQlpZiAoY2FsY19jaGVj
ayAhPSBjaGVjaykgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgIkJhZCBDU1VNIG9u
IFNDVFAgcGFja2V0IGNhbGNfY2hlY2s6JXggY2hlY2s6JXggIG06JXAgbWxlbjolZCBpcGhsZW46
JWRcbiIsCisJCQkgICAgICAgIGNhbGNfY2hlY2ssIGNoZWNrLCAodm9pZCAqKW0sIGxlbmd0aCwg
aXBobGVuKTsKKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyKG0sIG9mZnNldCwg
c3JjLCBkc3QsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsICZp
bnAsICZuZXQsIHZyZl9pZCk7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQor
CQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pICYmCisJCQkgICAgKG5l
dCAhPSBOVUxMKSAmJiAobmV0LT5wb3J0ICE9IHBvcnQpKSB7CisJCQkJaWYgKG5ldC0+cG9ydCA9
PSAwKSB7CisJCQkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBvbi4gKi8KKwkJCQkJbmV0
LT5tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5zbWFs
bGVzdF9tdHUgPiBuZXQtPm10dSkgeworCQkJCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3Rj
YiwgbmV0LT5tdHUpOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChwb3J0ID09IDApIHsKKwkJCQkJ
LyogVURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9mZi4gKi8KKwkJCQkJbmV0LT5tdHUgKz0gc2l6
ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCQkvKiBYWFggVXBkYXRlIHNtYWxsZXN0X210dSAqLwor
CQkJCX0KKwkJCQluZXQtPnBvcnQgPSBwb3J0OworCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKwkJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJCW5ldC0+Zmxvd3R5cGUgPSBt
Zmxvd3R5cGU7CisJCQkJbmV0LT5mbG93aWQgPSBtZmxvd2lkOworCQkJfQorI2VuZGlmCisJCQlp
ZiAoKGlucCAhPSBOVUxMKSAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQkJCXNjdHBfc2VuZF9wYWNr
ZXRfZHJvcHBlZChzdGNiLCBuZXQsIG0sIGxlbmd0aCwgaXBobGVuLCAxKTsKKwkJCQlzY3RwX2No
dW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fSU5QVVRfRVJST1IsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCQl9IGVsc2UgaWYgKChpbnAgIT0gTlVMTCkgJiYgKHN0Y2IgPT0g
TlVMTCkpIHsKKwkJCQlpbnBfZGVjciA9IGlucDsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX2JhZHN1bSk7CisJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfY2hlY2tzdW1l
cnJvcnMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogRGVzdGluYXRpb24gcG9ydCBvZiAw
IGlzIGlsbGVnYWwsIGJhc2VkIG9uIFJGQzQ5NjAuICovCisJaWYgKHNoLT5kZXN0X3BvcnQgPT0g
MCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQlnb3RvIG91dDsKKwl9CisJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHIobSwgb2Zmc2V0LCBzcmMsIGRzdCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsICZpbnAsICZuZXQsIHZyZl9p
ZCk7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmICgoY2gtPmNodW5r
X3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSAmJgorCSAgICAobmV0ICE9IE5VTEwpICYmIChuZXQt
PnBvcnQgIT0gcG9ydCkpIHsKKwkJaWYgKG5ldC0+cG9ydCA9PSAwKSB7CisJCQkvKiBVRFAgZW5j
YXBzdWxhdGlvbiB0dXJuZWQgb24uICovCisJCQluZXQtPm10dSAtPSBzaXplb2Yoc3RydWN0IHVk
cGhkcik7CisJCQlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXQtPm10dSkgeworCQkJ
CXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCX0KKwkJfSBlbHNl
IGlmIChwb3J0ID09IDApIHsKKwkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBvZmYuICov
CisJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJCQkvKiBYWFggVXBkYXRl
IHNtYWxsZXN0X210dSAqLworCQl9CisJCW5ldC0+cG9ydCA9IHBvcnQ7CisJfQorI2VuZGlmCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAobmV0ICE9IE5VTEwpIHsKKwkJbmV0LT5mbG93
dHlwZSA9IG1mbG93dHlwZTsKKwkJbmV0LT5mbG93aWQgPSBtZmxvd2lkOworCX0KKyNlbmRpZgor
CWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19ub3BvcnQpOworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoKF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSAm
JiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODA0MDAwKSkgfHwgKF9fRnJlZUJTRF92ZXJzaW9uID4g
OTAwMDAwKSkKKwkJaWYgKGJhZHBvcnRfYmFuZGxpbShCQU5ETElNX1NDVFBfT09UQikgPCAwKSB7
CisJCQlnb3RvIG91dDsKKwkJfQorI2VuZGlmCisJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQ
X1NIVVRET1dOX0FDSykgeworCQkJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlMihzcmMsIGRz
dCwgc2gsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJ
CWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFKSB7CisJCQlnb3Rv
IG91dDsKKwkJfQorCQlpZiAoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9BQk9SVF9BU1NPQ0lBVElP
TikgeworCQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9PSAwKSB8fAor
CQkJICAgICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkgPT0gMSkgJiYKKwkJCSAg
ICAgKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVCkpKSB7CisJCQkJb3BfZXJyID0gc2N0cF9n
ZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk91dCBvZiB0aGUgYmx1ZSIpOworCQkJCXNj
dHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNyYywgZHN0LAorCQkJCSAgICAgICAgICAgICAgICBz
aCwgMCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJCQkJICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJCQl9CisJCX0KKwkJZ290byBvdXQ7CisJfSBlbHNlIGlmIChz
dGNiID09IE5VTEwpIHsKKwkJaW5wX2RlY3IgPSBpbnA7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDEsICJPaywgQ29tbW9uIGlucHV0IHByb2Nlc3NpbmcgY2FsbGVkLCBtOiVwIGlwaGxl
bjolZCBvZmZzZXQ6JWQgbGVuZ3RoOiVkIHN0Y2I6JXBcbiIsCisJCSh2b2lkICopbSwgaXBobGVu
LCBvZmZzZXQsIGxlbmd0aCwgKHZvaWQgKilzdGNiKTsKKwlpZiAoc3RjYikgeworCQkvKiBhbHdh
eXMgY2xlYXIgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIGEgcGFja2V0ICovCisJCXN0Y2ItPmFzb2Mu
YXV0aGVudGljYXRlZCA9IDA7CisJCXN0Y2ItPmFzb2Muc2Vlbl9hX3NhY2tfdGhpc19wa3QgPSAw
OworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic3RjYjolcCBzdGF0ZToleFxuIiwKKwkJ
CSh2b2lkICopc3RjYiwgc3RjYi0+YXNvYy5zdGF0ZSk7CisKKwkJaWYgKChzdGNiLT5hc29jLnN0
YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgfHwKKwkJICAgIChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkpIHsKKwkJCS8qLQorCQkJICogSWYgd2Ug
aGl0IGhlcmUsIHdlIGhhZCBhIHJlZiBjb3VudAorCQkJICogdXAgd2hlbiB0aGUgYXNzb2Mgd2Fz
IGFib3J0ZWQgYW5kIHRoZQorCQkJICogdGltZXIgaXMgY2xlYXJpbmcgb3V0IHRoZSBhc3NvYywg
d2Ugc2hvdWxkCisJCQkgKiBOT1QgcmVzcG9uZCB0byBhbnkgcGFja2V0Li4gaXRzIE9PVEIuCisJ
CQkgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXN0Y2IgPSBOVUxMOworCQkJc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9f
TElORV9fLCBfX2Z1bmNfXyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1zZyk7CisJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgb2Zmc2V0LCBz
cmMsIGRzdCwgc2gsIGlucCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCisjZW5kaWYK
KwkJCSAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCWdvdG8gb3V0OworCQl9CisK
Kwl9CisJaWYgKElTX1NDVFBfQ09OVFJPTChjaCkpIHsKKwkJLyogcHJvY2VzcyB0aGUgY29udHJv
bCBwb3J0aW9uIG9mIHRoZSBTQ1RQIHBhY2tldCAqLworCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9D
SEsgKi8KKwkJc3RjYiA9IHNjdHBfcHJvY2Vzc19jb250cm9sKG0sIGlwaGxlbiwgJm9mZnNldCwg
bGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBjaCwK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgc3RjYiwgJm5ldCwgJmZ3ZF90c25f
c2VlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKSB7CisJCQkvKiBUaGlz
IGNvdmVycyB1cyBpZiB0aGUgY29va2llLWVjaG8gd2FzIHRoZXJlCisJCQkgKiBhbmQgaXQgY2hh
bmdlcyBvdXIgSU5QLgorCQkJICovCisJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJCWlmICgoY2gtPmNodW5rX3R5cGUgIT0gU0NU
UF9JTklUSUFUSU9OKSAmJgorCQkJICAgIChuZXQgIT0gTlVMTCkgJiYgKG5ldC0+cG9ydCAhPSBw
b3J0KSkgeworCQkJCWlmIChuZXQtPnBvcnQgPT0gMCkgeworCQkJCQkvKiBVRFAgZW5jYXBzdWxh
dGlvbiB0dXJuZWQgb24uICovCisJCQkJCW5ldC0+bXR1IC09IHNpemVvZihzdHJ1Y3QgdWRwaGRy
KTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKKwkJCQkJ
CXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKKwkJCQkJfQorCQkJCX0g
ZWxzZSBpZiAocG9ydCA9PSAwKSB7CisJCQkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBv
ZmYuICovCisJCQkJCW5ldC0+bXR1ICs9IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJLyog
WFhYIFVwZGF0ZSBzbWFsbGVzdF9tdHUgKi8KKwkJCQl9CisJCQkJbmV0LT5wb3J0ID0gcG9ydDsK
KwkJCX0KKyNlbmRpZgorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogbm8gY29udHJvbCBjaHVu
a3MsIHNvIHByZS1wcm9jZXNzIERBVEEgY2h1bmtzICh0aGVzZQorCQkgKiBjaGVja3MgYXJlIHRh
a2VuIGNhcmUgb2YgYnkgY29udHJvbCBwcm9jZXNzaW5nKQorCQkgKi8KKworCQkvKgorCQkgKiBp
ZiBEQVRBIG9ubHkgcGFja2V0LCBhbmQgYXV0aCBpcyByZXF1aXJlZCwgdGhlbiBwdW50Li4uCisJ
CSAqIGNhbid0IGhhdmUgYXV0aGVudGljYXRlZCB3aXRob3V0IGFueSBBVVRIIChjb250cm9sKQor
CQkgKiBjaHVua3MKKwkJICovCisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgc2N0cF9h
dXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2No
dW5rcykpIHsKKwkJCS8qICJzaWxlbnRseSIgaWdub3JlICovCisJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19yZWN2YXV0aG1pc3NpbmcpOworCQkJZ290byBvdXQ7CisJCX0KKwkJaWYgKHN0Y2IgPT0g
TlVMTCkgeworCQkJLyogb3V0IG9mIHRoZSBibHVlIERBVEEgY2h1bmsgKi8KKwkJCXNucHJpbnRm
KG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVf
XywgX19mdW5jX18pOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtc2cpOworCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBk
c3QsIHNoLCBpbnAsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJICAgICAg
ICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCQkJCQkgdnJm
X2lkLCBwb3J0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChzdGNiLT5hc29jLm15X3Z0YWcg
IT0gbnRvaGwoc2gtPnZfdGFnKSkgeworCQkJLyogdl90YWcgbWlzbWF0Y2ghICovCisJCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJaWYg
KHN0Y2IgPT0gTlVMTCkgeworCQkvKgorCQkgKiBubyB2YWxpZCBUQ0IgZm9yIHRoaXMgcGFja2V0
LCBvciB3ZSBmb3VuZCBpdCdzIGEgYmFkCisJCSAqIHBhY2tldCB3aGlsZSBwcm9jZXNzaW5nIGNv
bnRyb2wsIG9yIHdlJ3JlIGRvbmUgd2l0aCB0aGlzCisJCSAqIHBhY2tldCAoZG9uZSBvciBza2lw
IHJlc3Qgb2YgZGF0YSksIHNvIHdlIGRyb3AgaXQuLi4KKwkJICovCisJCWdvdG8gb3V0OworCX0K
KworCS8qCisJICogREFUQSBjaHVuayBwcm9jZXNzaW5nCisJICovCisJLyogcGxvdyB0aHJvdWdo
IHRoZSBkYXRhIGNodW5rcyB3aGlsZSBsZW5ndGggPiBvZmZzZXQgKi8KKworCS8qCisJICogUmVz
dCBzaG91bGQgYmUgREFUQSBvbmx5LiAgQ2hlY2sgYXV0aGVudGljYXRpb24gc3RhdGUgaWYgQVVU
SCBmb3IKKwkgKiBEQVRBIGlzIHJlcXVpcmVkLgorCSAqLworCWlmICgobGVuZ3RoID4gb2Zmc2V0
KSAmJgorCSAgICAoc3RjYiAhPSBOVUxMKSAmJgorCSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRf
Y2h1bmsoU0NUUF9EQVRBLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSAmJgorCSAgICAh
c3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkKSB7CisJCS8qICJzaWxlbnRseSIgaWdub3JlICovCisJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19BVVRIMSwKKwkJCSJEYXRhIGNodW5rIHJlcXVpcmVzIEFVVEgsIHNraXBwZWRcbiIpOwor
CQlnb3RvIHRyaWdnZXJfc2VuZDsKKwl9CisJaWYgKGxlbmd0aCA+IG9mZnNldCkgeworCQlpbnQg
cmV0dmFsOworCisJCS8qCisJCSAqIEZpcnN0IGNoZWNrIHRvIG1ha2Ugc3VyZSBvdXIgc3RhdGUg
aXMgY29ycmVjdC4gV2Ugd291bGQKKwkJICogbm90IGdldCBoZXJlIHVubGVzcyB3ZSByZWFsbHkg
ZGlkIGhhdmUgYSB0YWcsIHNvIHdlIGRvbid0CisJCSAqIGFib3J0IGlmIHRoaXMgaGFwcGVucywg
anVzdCBkdW1wIHRoZSBjaHVuayBzaWxlbnRseS4KKwkJICovCisJCXN3aXRjaCAoU0NUUF9HRVRf
U1RBVEUoJnN0Y2ItPmFzb2MpKSB7CisJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgor
CQkJLyoKKwkJCSAqIHdlIGNvbnNpZGVyIGRhdGEgd2l0aCB2YWxpZCB0YWdzIGluIHRoaXMgc3Rh
dGUKKwkJCSAqIHNob3dzIHVzIHRoZSBjb29raWUtYWNrIHdhcyBsb3N0LiBJbXBseSBpdCB3YXMK
KwkJCSAqIHRoZXJlLgorCQkJICovCisJCQlzY3RwX2hhbmRsZV9jb29raWVfYWNrKChzdHJ1Y3Qg
c2N0cF9jb29raWVfYWNrX2NodW5rICopY2gsIHN0Y2IsIG5ldCk7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgorCQkJLyoKKwkJCSAqIFdlIGNvbnNpZGVyIE9PVEIg
YW55IGRhdGEgc2VudCBkdXJpbmcgYXNvYyBzZXR1cC4KKwkJCSAqLworCQkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBf
X2Z1bmNfXyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1zZyk7CisJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwg
c2gsIGlucCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAgICAgICAg
ICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCisjZW5kaWYKKwkJCQkJIHZy
Zl9pZCwgcG9ydCk7CisJCQlnb3RvIG91dDsKKwkJCS8qc2FfaWdub3JlIE5PVFJFQUNIRUQqLwor
CQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9FTVBUWToJLyogc2hvdWxkIG5vdCBoYXBwZW4g
Ki8KKwkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgkvKiBzaG91bGQgbm90IGhhcHBlbiAqLworCQlj
YXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6CS8qIFRoaXMgaXMgYSBwZWVyIGVycm9y
ICovCisJCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVDoKKwkJZGVmYXVsdDoKKwkJ
CWdvdG8gb3V0OworCQkJLypzYV9pZ25vcmUgTk9UUkVBQ0hFRCovCisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1NUQVRFX09QRU46CisJCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgorCQkJ
YnJlYWs7CisJCX0KKwkJLyogcGxvdyB0aHJvdWdoIHRoZSBkYXRhIGNodW5rcyB3aGlsZSBsZW5n
dGggPiBvZmZzZXQgKi8KKwkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2RhdGEobW0sIGlwaGxlbiwg
Jm9mZnNldCwgbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAsIHN0Y2Is
IG5ldCwgJmhpZ2hfdHNuKTsKKwkJaWYgKHJldHZhbCA9PSAyKSB7CisJCQkvKgorCQkJICogVGhl
IGFzc29jaWF0aW9uIGFib3J0ZWQsIE5PIFVOTE9DSyBuZWVkZWQgc2luY2UKKwkJCSAqIHRoZSBh
c3NvY2lhdGlvbiBpcyBkZXN0cm95ZWQuCisJCQkgKi8KKwkJCXN0Y2IgPSBOVUxMOworCQkJZ290
byBvdXQ7CisJCX0KKwkJZGF0YV9wcm9jZXNzZWQgPSAxOworCQkvKgorCQkgKiBBbnl0aGluZyBp
bXBvcnRhbnQgbmVlZHMgdG8gaGF2ZSBiZWVuIG1fY29weSdlZCBpbgorCQkgKiBwcm9jZXNzX2Rh
dGEKKwkJICovCisJfQorCisJLyogdGFrZSBjYXJlIG9mIGVjbiAqLworCWlmICgoZGF0YV9wcm9j
ZXNzZWQgPT0gMSkgJiYKKwkgICAgKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAxKSAmJgor
CSAgICAoKGVjbl9iaXRzICYgU0NUUF9DRV9CSVRTKSA9PSBTQ1RQX0NFX0JJVFMpKSB7CisJCS8q
IFllcCwgd2UgbmVlZCB0byBhZGQgYSBFQ05FICovCisJCXNjdHBfc2VuZF9lY25fZWNobyhzdGNi
LCBuZXQsIGhpZ2hfdHNuKTsKKwl9CisKKwlpZiAoKGRhdGFfcHJvY2Vzc2VkID09IDApICYmIChm
d2RfdHNuX3NlZW4pKSB7CisJCWludCB3YXNfYV9nYXA7CisJCXVpbnQzMl90IGhpZ2hlc3RfdHNu
OworCisJCWlmIChTQ1RQX1RTTl9HVChzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAsIHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKKwkJCWhpZ2hlc3RfdHNu
ID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCQl9IGVsc2UgeworCQkJ
aGlnaGVzdF90c24gPSBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJCX0KKwkJ
d2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2
ZV90c24pOworCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7CisJCXNjdHBfc2Fja19jaGVjayhz
dGNiLCB3YXNfYV9nYXApOworCX0gZWxzZSBpZiAoZndkX3Rzbl9zZWVuKSB7CisJCXN0Y2ItPmFz
b2Muc2VuZF9zYWNrID0gMTsKKwl9CisJLyogdHJpZ2dlciBzZW5kIG9mIGFueSBjaHVua3MgaW4g
cXVldWUuLi4gKi8KK3RyaWdnZXJfc2VuZDoKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQK
KwlzY3RwX2F1ZGl0X2xvZygweEUwLCAyKTsKKwlzY3RwX2F1ZGl0aW5nKDEsIGlucCwgc3RjYiwg
bmV0KTsKKyNlbmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCSJDaGVjayBmb3Ig
Y2h1bmsgb3V0cHV0IHBydzolZCB0cWU6JWQgdGY9JWRcbiIsCisJCXN0Y2ItPmFzb2MucGVlcnNf
cnduZCwKKwkJVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlKSwKKwkJ
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpOworCXVuX3NlbnQgPSAoc3RjYi0+YXNvYy50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KTsKKwlpZiAoIVRBSUxR
X0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJY250X2N0cmxfcmVh
ZHkgPSBzdGNiLT5hc29jLmN0cmxfcXVldWVfY250IC0gc3RjYi0+YXNvYy5lY25fZWNob19jbnRf
b25xOworCX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVl
KSB8fAorCSAgICBjbnRfY3RybF9yZWFkeSB8fAorCSAgICBzdGNiLT5hc29jLnRyaWdnZXJfcmVz
ZXQgfHwKKwkgICAgKCh1bl9zZW50KSAmJgorCSAgICAgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA+
IDAgfHwKKwkgICAgICAoc3RjYi0+YXNvYy5wZWVyc19yd25kIDw9IDAgJiYgc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPT0gMCkpKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiQ2Fs
bGluZyBjaHVuayBPVVRQVVRcbiIpOworCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFND
VFBfT1VUUFVUX0ZST01fQ09OVFJPTF9QUk9DLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQzLCAiY2h1bmsgT1VUUFVUIHJldHVybnNcbiIpOworCX0KKyNp
ZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEUwLCAzKTsKKwlz
Y3RwX2F1ZGl0aW5nKDIsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorIG91dDoKKwlpZiAoc3Rj
YiAhPSBOVUxMKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9CisJaWYgKGlucF9kZWNy
ICE9IE5VTEwpIHsKKwkJLyogcmVkdWNlIHJlZi1jb3VudCAqLworCQlTQ1RQX0lOUF9XTE9DSyhp
bnBfZGVjcik7CisJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF9kZWNyKTsKKwkJU0NUUF9JTlBfV1VO
TE9DSyhpbnBfZGVjcik7CisJfQorCXJldHVybjsKK30KKworI2lmZGVmIElORVQKKyNpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQordm9pZAorc2N0cF9pbnB1dF93aXRo
X3BvcnQoc3RydWN0IG1idWYgKmlfcGFrLCBpbnQgb2ZmLCB1aW50MTZfdCBwb3J0KQorI2VsaWYg
ZGVmaW5lZChfX1BhbmRhX18pCit2b2lkCitzY3RwX2lucHV0KHBha2hhbmRsZV90eXBlIGlfcGFr
KQorI2Vsc2UKK3ZvaWQKKyNpZiBfX1NURENfXworc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqaV9w
YWssLi4uKQorI2Vsc2UKK3NjdHBfaW5wdXQoaV9wYWssIHZhX2FsaXN0KQorCXN0cnVjdCBtYnVm
ICppX3BhazsKKyNlbmRpZgorI2VuZGlmCit7CisJc3RydWN0IG1idWYgKm07CisJaW50IGlwaGxl
bjsKKwl1aW50MzJfdCB2cmZfaWQgPSAwOworCXVpbnQ4X3QgZWNuX2JpdHM7CisJc3RydWN0IHNv
Y2thZGRyX2luIHNyYywgZHN0OworCXN0cnVjdCBpcCAqaXA7CisJc3RydWN0IHNjdHBoZHIgKnNo
OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgbGVuZ3RoLCBvZmZzZXQ7CisJdWlu
dDhfdCBjb21wdXRlX2NyYzsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXVpbnQzMl90IG1m
bG93aWQ7CisJdWludDhfdCBtZmxvd3R5cGU7CisJdWludDE2X3QgZmlibnVtOworI2VuZGlmCisj
aWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykpCisJdWludDE2X3QgcG9ydCA9IDA7CisjZW5kaWYKKworI2lmIGRlZmlu
ZWQoX19QYW5kYV9fKQorCS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8g
bWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAqLworCWlwaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXApOwor
I2Vsc2UKKwlpcGhsZW4gPSBvZmY7CisjZW5kaWYKKwlpZiAoU0NUUF9HRVRfUEtUX1ZSRklEKGlf
cGFrLCB2cmZfaWQpKSB7CisJCVNDVFBfUkVMRUFTRV9QS1QoaV9wYWspOworCQlyZXR1cm47CisJ
fQorCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpX3Bhayk7CisjaWZkZWYgX19QYW5kYV9fCisJ
U0NUUF9ERVRBQ0hfSEVBREVSX0ZST01fQ0hBSU4oaV9wYWspOworCSh2b2lkKVNDVFBfUkVMRUFT
RV9IRUFERVIoaV9wYWspOworI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkvKiBM
b2cgaW4gYW55IGlucHV0IG1idWZzICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmMo
bSwgU0NUUF9NQlVGX0lOUFVUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dH
SU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFT
VF9QQUNLRVRfVFJBQ0lORykgeworCQlzY3RwX3BhY2tldF9sb2cobSk7CisJfQorI2VuZGlmCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkK
KwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwX2lucHV0KCk6
IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JWIu
XG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgaWZfbmFtZShtLT5tX3Br
dGhkci5yY3ZpZiksCisJICAgICAgICAoaW50KW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MsIENTVU1f
QklUUyk7CisjZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwlTQ1RQREJHKFNDVFBf
REVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5n
dGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAorCSAgICAgICAg
bS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCisJ
ICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbHNlCisJU0NUUERCRyhTQ1RQX0RF
QlVHX0NSQ09GRkxPQUQsCisJICAgICAgICAic2N0cF9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKKwkgICAgICAgIG0t
Pm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKKwkg
ICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAg
ICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMlZCB3aXRo
IGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5tX3BrdGhkci5sZW4sCisJICAgICAg
ICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfbmFtZSwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlm
LT5pZl91bml0LAorCSAgICAgICAgbS0+bV9wa3RoZHIuY3N1bV9mbGFncyk7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fV2luZG93c19fKQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAor
CSAgICAgICAgInNjdHBfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAl
cyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5tX3BrdGhkci5sZW4sCisJ
ICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfeG5hbWUsCisJICAgICAgICBtLT5tX3BrdGhk
ci5jc3VtX2ZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJbWZsb3dp
ZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKKwltZmxvd3R5cGUgPSBNX0hBU0hUWVBFX0dFVChtKTsK
KwlmaWJudW0gPSBNX0dFVEZJQihtKTsKKyNlbmRpZgorCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3ZwYWNrZXRzKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsK
KwkvKiBHZXQgSVAsIFNDVFAsIGFuZCBmaXJzdCBjaHVuayBoZWFkZXIgdG9nZXRoZXIgaW4gdGhl
IGZpcnN0IG1idWYuICovCisJb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRy
KSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJaWYgKFNDVFBfQlVGX0xFTihtKSA8
IG9mZnNldCkgeworCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJ
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlw
ID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRy
X3QpaXAgKyBpcGhsZW4pOworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90
KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qg
c2N0cF9jaHVua2hkcik7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJ
c3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNyYy5z
aW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOworCW1l
bXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0LnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9w
b3J0OworCWRzdC5zaW5fYWRkciA9IGlwLT5pcF9kc3Q7CisjaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwlOVE9IUyhpcC0+aXBfbGVuKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfTGludXgpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlpcC0+aXBfbGVu
ID0gbnRvaHMoaXAtPmlwX2xlbik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
I2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwlsZW5ndGggPSBudG9ocyhpcC0+aXBf
bGVuKTsKKyNlbHNlCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKKyNlbmRpZgorI2Vs
aWYgZGVmaW5lZChfX0FQUExFX18pCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKKyNl
bGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xp
bnV4KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJbGVuZ3RoID0gaXAtPmlw
X2xlbjsKKyNlbHNlCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKKyNlbmRpZgorI2Vs
c2UKKwlsZW5ndGggPSBpcC0+aXBfbGVuOworI2VuZGlmCisJLyogVmFsaWRhdGUgbWJ1ZiBjaGFp
biBsZW5ndGggd2l0aCBJUCBwYXlsb2FkIGxlbmd0aC4gKi8KKwlpZiAoU0NUUF9IRUFERVJfTEVO
KG0pICE9IGxlbmd0aCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkgICAgICAg
ICJzY3RwX2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwgbGVuZ3RoLCBT
Q1RQX0hFQURFUl9MRU4obSkpOworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQln
b3RvIG91dDsKKwl9CisJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9hZGNhc3RzIG9yIG11bHRp
Y2FzdHMgKi8KKwlpZiAoSU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkg
eworCQlnb3RvIG91dDsKKwl9CisJaWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRk
ciwgbSkpIHsKKwkJZ290byBvdXQ7CisJfQorCWVjbl9iaXRzID0gaXAtPmlwX3RvczsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwlpZiAo
bS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1fU0NUUF9WQUxJRCkgeworCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQljb21wdXRlX2NyYyA9IDA7CisJfSBlbHNlIHsKKyNl
bHNlCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgor
CSAgICAoKHNyYy5zaW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikgfHwKKwkg
ICAgIChTQ1RQX0lTX0lUX0xPT1BCQUNLKG0pKSkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdmh3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAwOworCX0gZWxzZSB7CisjZW5kaWYKKwkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAxOworCX0KKwlz
Y3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKCZtLCBpcGhsZW4sIG9mZnNldCwgbGVuZ3RoLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXB1dGVfY3JjLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNu
X2JpdHMsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworIG91dDoKKwlpZiAobSkgeworCQlzY3Rw
X21fZnJlZW0obSk7CisJfQorCXJldHVybjsKK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCitleHRlcm4gaW50
ICpzY3RwX2NwdWFycnk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDExMDAwMjAKK2ludAorc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAq
Km1wLCBpbnQgKm9mZnAsIGludCBwcm90byBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAq
bTsKKwlpbnQgb2ZmOworCisJbSA9ICptcDsKKwlvZmYgPSAqb2ZmcDsKKyNlbHNlCit2b2lkCitz
Y3RwX2lucHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQoreworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNN
UCkKKwlpZiAobXBfbmNwdXMgPiAxKSB7CisJCXN0cnVjdCBpcCAqaXA7CisJCXN0cnVjdCBzY3Rw
aGRyICpzaDsKKwkJaW50IG9mZnNldDsKKwkJaW50IGNwdV90b191c2U7CisJCXVpbnQzMl90IGZs
b3dpZCwgdGFnOworCisJCWlmIChNX0hBU0hUWVBFX0dFVChtKSAhPSBNX0hBU0hUWVBFX05PTkUp
IHsKKwkJCWZsb3dpZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKKwkJfSBlbHNlIHsKKwkJCS8qIE5v
IGZsb3cgaWQgYnVpbHQgYnkgbG93ZXIgbGF5ZXJzCisJCQkgKiBmaXggaXQgc28gd2UgY3JlYXRl
IG9uZS4KKwkJCSAqLworCQkJb2Zmc2V0ID0gb2ZmICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
KwkJCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBvZmZzZXQpIHsKKwkJCQlpZiAoKG0gPSBtX3B1bGx1
cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9w
cyk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw
MDAyMAorCQkJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisjZWxzZQorCQkJCQlyZXR1cm47Cisj
ZW5kaWYKKwkJCQl9CisJCQl9CisJCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCQkJc2gg
PSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBvZmYpOworCQkJdGFnID0gaHRvbmwo
c2gtPnZfdGFnKTsKKwkJCWZsb3dpZCA9IHRhZyBeIG50b2hzKHNoLT5kZXN0X3BvcnQpIF4gbnRv
aHMoc2gtPnNyY19wb3J0KTsKKwkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9IGZsb3dpZDsKKwkJCU1f
SEFTSFRZUEVfU0VUKG0sIE1fSEFTSFRZUEVfT1BBUVVFX0hBU0gpOworCQl9CisJCWNwdV90b191
c2UgPSBzY3RwX2NwdWFycnlbZmxvd2lkICUgbXBfbmNwdXNdOworCQlzY3RwX3F1ZXVlX3RvX21j
b3JlKG0sIG9mZiwgY3B1X3RvX3VzZSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyMAorCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisjZWxz
ZQorCQlyZXR1cm47CisjZW5kaWYKKwl9CisjZW5kaWYKKwlzY3RwX2lucHV0X3dpdGhfcG9ydCht
LCBvZmYsIDApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDExMDAwMjAKKwlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisjZW5kaWYKK30KKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1
dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuaAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4yZDAxYmViMDhkZWQ5MDhlZTgw
YzAyZjRhZjU5ZmQyOGMwNTUwYThlIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2lucHV0LmgKQEAgLTAsMCArMSw2NiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2lucHV0LmggMzI2Njcy
IDIwMTctMTItMDcgMjI6MTk6MDhaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVU
SU5FVF9TQ1RQX0lOUFVUX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfSU5QVVRfSF8KKworI2lm
IGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZAorc2N0cF9j
b21tb25faW5wdXRfcHJvY2Vzc2luZyhzdHJ1Y3QgbWJ1ZiAqKiwgaW50LCBpbnQsIGludCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2Nr
YWRkciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCBz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQz
Ml90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCwgdWludDE2X3QpOworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCAqCitz
Y3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgc2Vx
LAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipiY2hrKTsKKwordm9pZCBzY3RwX3Jlc2V0
X2luX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IG51bWJlcl9lbnRyaWVz
LAorICAgIHVpbnQxNl90ICpsaXN0KTsKKworCitpbnQgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0
YShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpOworCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfbG9ja191c2Vy
c3BhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNl
LmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uN2I4YjBj
YmRkZDIyZmViNmY1MzU2MTI1OWE4ZDJhOTJjMDBiZDUwZCAxMDA3NTUKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfbG9ja191c2Vyc3BhY2UuaAorKysgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oCkBAIC0wLDAgKzEsMjUzIEBA
CisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2Fy
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBN
aWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBCcmFkIFBlbm9mZi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZk
ZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJT
RCQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBfTE9DS19FTVBUWV9IXworI2Rl
ZmluZSBfTkVUSU5FVF9TQ1RQX0xPQ0tfRU1QVFlfSF8KKworLyoKKyAqIEVtcHR5IExvY2sgZGVj
bGFyYXRpb25zIGZvciBhbGwgb3RoZXIgcGxhdGZvcm1zLiBQcmUtcHJvY2VzcyBhd2F5IHRvCisg
KiBub3RoaW5nLgorICovCisKKy8qIF9fVXNlcnNwYWNlX18gcHV0dGluZyBsb2NrIG1hY3JvcyBp
biBzYW1lIG9yZGVyIGFzIHNjdHBfbG9ja19ic2QuaCAuLi4qLworCisjZGVmaW5lIFNDVFBfSVBJ
X0NPVU5UX0lOSVQoKQorCisjZGVmaW5lIFNDVFBfU1RBVExPR19JTklUX0xPQ0soKQorI2RlZmlu
ZSBTQ1RQX1NUQVRMT0dfTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExPR19VTkxPQ0soKQorI2Rl
ZmluZSBTQ1RQX1NUQVRMT0dfREVTVFJPWSgpCisKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NL
X0RFU1RST1koKQorCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19JTklUKCkKKyNkZWZpbmUg
U0NUUF9JTlBfSU5GT19STE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV0xPQ0soKQorI2Rl
ZmluZSBTQ1RQX0lOUF9JTkZPX1RSWUxPQ0soKSAxCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fUlVO
TE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisKKyNkZWZpbmUgU0NUUF9X
UV9BRERSX0lOSVQoKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfREVTVFJPWSgpCisjZGVmaW5lIFND
VFBfV1FfQUREUl9MT0NLKCkKKyNkZWZpbmUgU0NUUF9XUV9BRERSX1VOTE9DSygpCisKKworI2Rl
ZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX0RFU1RST1ko
KQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9X
TE9DSygpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfUlVOTE9DSygpCisjZGVmaW5lIFNDVFBfSVBJ
X0FERFJfV1VOTE9DSygpCisKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfSU5JVCgpCisj
ZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RST1koKQorI2RlZmluZSBTQ1RQX0lQSV9J
VEVSQVRPUl9XUV9MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCkK
KworCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lQX1BLVExP
R19MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9J
UF9QS1RMT0dfREVTVFJPWSgpCisKKworCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5w
KQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBf
UkVBRF9MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApCisKKyNk
ZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVf
TE9DS19JTklUKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShfaW5wKQorI2Rl
ZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVTVFJPWShfaW5wKQorCisKKyNkZWZpbmUgU0NU
UF9JTlBfUkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkKKworI2RlZmlu
ZSBTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkgLyogRG9uJ3Qga25vdyBpZiB0aGlz
IGlzIHBvc3NpYmxlICovCisKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9DT05URU5ERUQoX2lucCkg
KDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLworCisjZGVmaW5lIFNDVFBf
QVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoX2lucCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhp
cyBpcyBwb3NzaWJsZSAqLworCisKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0lOSVQoX3Rj
YikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3RjYikKKyNkZWZpbmUgU0NU
UF9UQ0JfU0VORF9MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfVU5MT0NLKF90Y2Ip
CisKKyNkZWZpbmUgU0NUUF9JTlBfSU5DUl9SRUYoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfREVD
Ul9SRUYoX2lucCkKKworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soX2lucCkKKworI2Rl
ZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lu
cCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkKKworCisjZGVmaW5lIFND
VFBfVENCX0xPQ0tfSU5JVChfdGNiKQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0RFU1RST1koX3Rj
YikKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKQorI2RlZmluZSBTQ1RQX1RDQl9UUllMT0NL
KF90Y2IpIDEKKyNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENC
X1VOTE9DS19JRk9XTkVEKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNTRVJUKF90Y2Ip
CisKKworCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkKKyNkZWZpbmUgU0NUUF9J
VEVSQVRPUl9MT0NLKCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKQorI2RlZmluZSBT
Q1RQX0lURVJBVE9SX0xPQ0tfREVTVFJPWSgpCisKKworCisjZGVmaW5lIFNDVFBfSU5DUl9FUF9D
T1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2JpbmZvLmlw
aV9jb3VudF9lcCsrOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfREVD
Ul9FUF9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2Jp
bmZvLmlwaV9jb3VudF9lcC0tOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFND
VFBfSU5DUl9BU09DX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorCSAgICAgICAg
ICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9hc29jKys7IFwKKwkgICAgICAgIH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX0FTT0NfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAg
ZG8geyBcCisJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2Fzb2MtLTsgXAor
CSAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0lOQ1JfTEFERFJfQ09VTlQoKSBc
CisgICAgICAgICAgICAgICAgZG8geyBcCisJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBp
X2NvdW50X2xhZGRyKys7IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9E
RUNSX0xBRERSX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorCSAgICAgICAgICAg
ICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9sYWRkci0tOyBcCisJICAgICAgICB9IHdoaWxlICgw
KQorCisjZGVmaW5lIFNDVFBfSU5DUl9SQUREUl9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBk
byB7IFwKKyAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X3JhZGRyKys7IFwK
KwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX1JBRERSX0NPVU5UKCkg
XAorICAgICAgICAgICAgICAgIGRvIHsgXAorIAkgICAgICAgICAgICAgICBzY3RwcGNiaW5mby5p
cGlfY291bnRfcmFkZHItLTsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQ
X0lOQ1JfQ0hLX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorICAJICAgICAgICAg
ICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2NodW5rKys7IFwKKwkgICAgICAgIH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX0NIS19DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBk
byB7IFwKKyAgCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9jaHVuay0tOyBc
CisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgp
IFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3Vu
dF9yZWFkcSsrOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfREVDUl9S
RUFEUV9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2Jp
bmZvLmlwaV9jb3VudF9yZWFkcS0tOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5l
IFNDVFBfSU5DUl9TVFJNT1FfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJCSAg
ICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfc3RybW9xKys7IFwKKwkgICAgICAgIH0gd2hpbGUg
KDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpIFwKKyAgICAgICAgICAgICAg
ICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9zdHJtb3EtLTsgXAorCSAg
ICAgICAgfSB3aGlsZSAoMCkKKworCisvKiBub3Qgc3VyZSBpZiBfX1VzZXJzcGFjZV9fIG5lZWRz
IHRoZXNlIChidXQgY29waWVkIG5vbmV0aGVsZXNzLi4uKSAqLworI2lmIGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisjZGVmaW5lIFNDVFBfSU5QX1NPKHNjdHBpbnApCShzY3RwaW5wKS0+
aXBfaW5wLmlucC5pbnBfc29ja2V0CisjZGVmaW5lIFNDVFBfU09DS0VUX0xPQ0soc28sIHJlZmNu
dCkKKyNkZWZpbmUgU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCByZWZjbnQpCisjZW5kaWYKKworCisv
KiB0aGVzZSB3ZXJlIGluIHNjdHBfbG9ja19lbXB0eS5oIGJ1dCBhcmVuJ3QgaW4gc2N0cF9sb2Nr
X2JzZC5oIC4uLiAqLworI2lmIDAKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9MT0NLKCkKKyNkZWZp
bmUgU0NUUF9JUElfQUREUl9VTkxPQ0soKQorI2VuZGlmCisKKworLyogVGhlc2Ugd2VyZSBpbiBz
Y3RwX2xvY2tfZW1wdHkuaCBiZWNhdXNlIHRoZXkgd2VyZSBjb21tZW50ZWQgb3V0IHdpdGhpbgor
ICogIHdpdGhpbiB1c2VyX2luY2x1ZGUvdXNlcl9zb2NrZXR2YXIuaCAuICBJZiB0aGV5IGFyZSBO
T1QgY29tbWVudGVkIG91dAorICogIGluIHVzZXJfc29ja2V0dmFyLmggKGJlY2F1c2UgdGhhdCBz
ZWVtcyB0aGUgbW9yZSBuYXR1cmFsIHBsYWNlIGZvciB0aGVtCisgKiAgdG8gbGl2ZSksIHRoZW4g
Y2hhbmdlIHRoaXMgImlmIiB0byAwLiAgS2VlcCB0aGUgImlmIiBhcyAxIGlmIHRoZXNlIEFSRQor
ICogIGluZGVlZCBjb21tZW50ZWQgb3V0IGluIHVzZXJfc29ja2V0dmFyLmggLgorICoKKyAqIFRo
aXMgbW9kdWxhcml0eSBpcyBrZXB0IHNvIHRoaXMgZmlsZSBjYW4gZWFzaWx5IGJlIGNob3NlbiBh
cyBhbiBhbHRlcm5hdGl2ZQorICogIHRvIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUy4gIElmIG9u
ZSBkZWZpbmVzIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyBpbgorICogIHVzZXJfaW5jbHVkZS9v
cHRfc2N0cC5oLCB0aGVuIHRoZSBmaWxlIHNjdHBfcHJvY2Vzc19sb2NrLmggKHdoaWNoIHdlIGRp
ZG4ndAorICogIGltcGxlbWVudCkgaXMgdXNlZCwgYW5kIHRoYXQgZGVjbGFyZXMgdGhlc2UgbG9j
a3MgYWxyZWFkeSAoc28gdXNpbmcKKyAqICBTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MgKnJlcXVp
cmVzKiB0aGF0IHRoZXNlIGRlZmludGlvbnMgYmUgY29tbWVudGVkIG91dAorICogIGluIHVzZXJf
c29ja2V0dmFyLmgpLgorICovCisjaWYgMQorI2RlZmluZSBTT0NLX0xPQ0soX3NvKQorI2RlZmlu
ZSBTT0NLX1VOTE9DSyhfc28pCisjZGVmaW5lIFNPQ0tCVUZfTE9DSyhfc29fYnVmKQorI2RlZmlu
ZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKQorI2RlZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9z
b19idWYpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9vcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3Mu
aAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5iMzc0NmRk
OTQ2ZjA2MDUzNjdmNDZhOTMxNTkxNGNiMTQ2MWJkNzdiIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX29zLmgKQEAgLTAsMCArMSw5NiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRl
bnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2LTIwMDcsIGJ5
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisg
KiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K
KyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lz
Y28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX29zLmggMjM1
ODI4IDIwMTItMDUtMjMgMTE6MjY6MjhaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBf
TkVUSU5FVF9TQ1RQX09TX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfT1NfSF8KKworLyoKKyAq
IEdlbmVyYWwga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uOgorICogIFNDVFBfTUFMTE9DKGVsZW1l
bnQsIHR5cGUsIHNpemUsIG5hbWUpCisgKiAgU0NUUF9GUkVFKGVsZW1lbnQpCisgKiBLZXJuZWwg
bWVtb3J5IGFsbG9jYXRpb24gZm9yICJzb25hbWUiLSBtZW1vcnkgbXVzdCBiZSB6ZXJvZWQuCisg
KiAgU0NUUF9NQUxMT0NfU09OQU1FKG5hbWUsIHR5cGUsIHNpemUpCisgKiAgU0NUUF9GUkVFX1NP
TkFNRShuYW1lKQorICovCisKKy8qCisgKiBab25lKHBvb2wpIGFsbG9jYXRpb24gcm91dGluZXM6
IE1VU1QgYmUgZGVmaW5lZCBmb3IgZWFjaCBPUy4KKyAqICB6b25lID0gem9uZS9wb29sIHBvaW50
ZXIuCisgKiAgbmFtZSA9IHN0cmluZyBuYW1lIG9mIHRoZSB6b25lL3Bvb2wuCisgKiAgc2l6ZSA9
IHNpemUgb2YgZWFjaCB6b25lL3Bvb2wgZWxlbWVudC4KKyAqICBudW1iZXIgPSBudW1iZXIgb2Yg
ZWxlbWVudHMgaW4gem9uZS9wb29sLgorICogIHR5cGUgPSBzdHJ1Y3R1cmUgdHlwZSB0byBhbGxv
Y2F0ZQorICoKKyAqIHNjdHBfem9uZV90CisgKiBTQ1RQX1pPTkVfSU5JVCh6b25lLCBuYW1lLCBz
aXplLCBudW1iZXIpCisgKiBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUpCisgKiBTQ1RQX1pPTkVf
RlJFRSh6b25lLCBlbGVtZW50KQorICogU0NUUF9aT05FX0RFU1RST1koem9uZSkKKyAqLworCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfYnNkLmg+
CisjZWxzZQorI2RlZmluZSBNT0RVTEVfR0xPQkFMKF9CKSAoX0IpCisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
Lmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9vc19tYWNvc3guaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisjaW5j
bHVkZSA8aXAvc2N0cC9zY3RwX29zX2lveC5oPgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fV2lu
ZG93c19fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc193aW5kb3dzLmg+CisjZW5kaWYKKwor
LyogQWxsIG9zJ3MgbXVzdCBpbXBsZW1lbnQgdGhpcyBhZGRyZXNzIGdhdGhlcmVyLiBJZgorICog
bm8gVlJGJ3MgZXhpc3QsIHRoZW4gdnJmIDAgaXMgdGhlIG9ubHkgb25lIGFuZCBhbGwKKyAqIGFk
ZHJlc3NlcyBhbmQgaWZuJ3MgbGl2ZSBoZXJlLgorICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9W
UkYgMAordm9pZCBzY3RwX2luaXRfdnJmX2xpc3QoaW50IHZyZmlkKTsKKworI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCmluZGV4IGU2
OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjg2MTMzMDFhYjA4ZWFmNmUx
OWUzODI4MzE1ZWMwZDgyYTI0Y2Y3ZDggMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCkBAIC0wLDAgKzEsMTE2MiBAQAorLyotCisgKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAy
MDA2LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBUdWV4ZW4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgQnJh
ZCBQZW5vZmYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0
aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfX3NjdHBfb3Nf
dXNlcnNwYWNlX2hfXworI2RlZmluZSBfX3NjdHBfb3NfdXNlcnNwYWNlX2hfXworLyoKKyAqIFVz
ZXJzcGFjZSBpbmNsdWRlcworICogQWxsIHRoZSBvcHRfeHh4LmggZmlsZXMgYXJlIHBsYWNlZCBp
biB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4KKyAqIFdlIHdpbGwgcGxhY2UgdGhlbSBpbiB1
c2Vyc3BhY2Ugc3RhY2sgYnVpbGQgZGlyZWN0b3J5LgorICovCisKKyNpbmNsdWRlIDxlcnJuby5o
PgorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2luY2x1ZGUgPHdpbnNv
Y2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxpcGhscGFwaS5oPgorI2lu
Y2x1ZGUgPE1zd3NvY2suaD4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+CisjaW5jbHVkZSAidXNlcl9l
bnZpcm9ubWVudC5oIgordHlwZWRlZiBDUklUSUNBTF9TRUNUSU9OIHVzZXJsYW5kX211dGV4X3Q7
CisjaWYgV0lOVkVSIDwgMHgwNjAwCitlbnVtIHsKKwlDX1NJR05BTCA9IDAsCisJQ19CUk9BRENB
U1QgPSAxLAorCUNfTUFYX0VWRU5UUyA9IDIKK307Cit0eXBlZGVmIHN0cnVjdAoreworCXVfaW50
IHdhaXRlcnNfY291bnQ7CisJQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJzX2NvdW50X2xvY2s7CisJ
SEFORExFIGV2ZW50c19bQ19NQVhfRVZFTlRTXTsKK30gdXNlcmxhbmRfY29uZF90Owordm9pZCBJ
bml0aWFsaXplWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKik7Cit2b2lkIERl
bGV0ZVhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOworaW50IFNsZWVwWFBD
b25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKiwgdXNlcmxhbmRfbXV0ZXhfdCAqKTsK
K3ZvaWQgV2FrZUFsbFhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOworI2Rl
ZmluZSBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgSW5pdGlhbGl6ZVhQQ29uZGl0
aW9uVmFyaWFibGUoY29uZCkKKyNkZWZpbmUgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUoY29uZCkg
RGVsZXRlWFBDb25kaXRpb25WYXJpYWJsZShjb25kKQorI2RlZmluZSBTbGVlcENvbmRpdGlvblZh
cmlhYmxlQ1MoY29uZCwgbXR4LCB0aW1lKSBTbGVlcFhQQ29uZGl0aW9uVmFyaWFibGUoY29uZCwg
bXR4KQorI2RlZmluZSBXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgV2FrZUFsbFhQQ29u
ZGl0aW9uVmFyaWFibGUoY29uZCkKKyNlbHNlCisjZGVmaW5lIERlbGV0ZUNvbmRpdGlvblZhcmlh
YmxlKGNvbmQpCit0eXBlZGVmIENPTkRJVElPTl9WQVJJQUJMRSB1c2VybGFuZF9jb25kX3Q7Cisj
ZW5kaWYKK3R5cGVkZWYgSEFORExFIHVzZXJsYW5kX3RocmVhZF90OworI2RlZmluZSBBRERSRVNT
X0ZBTUlMWQl1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgSVBWRVJTSU9OICA0CisjZGVmaW5lIE1B
WFRUTCAgICAgMjU1CisvKiBWUzIwMTAgY29tZXMgd2l0aCBzdGRpbnQuaCAqLworI2lmIF9NU0Nf
VkVSID49IDE2MDAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjZGVmaW5lIHVpbnQ2NF90
ICAgdW5zaWduZWQgX19pbnQ2NAorI2RlZmluZSB1aW50MzJfdCAgIHVuc2lnbmVkIF9faW50MzIK
KyNkZWZpbmUgaW50MzJfdCAgICBfX2ludDMyCisjZGVmaW5lIHVpbnQxNl90ICAgdW5zaWduZWQg
X19pbnQxNgorI2RlZmluZSBpbnQxNl90ICAgIF9faW50MTYKKyNkZWZpbmUgdWludDhfdCAgICB1
bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgaW50OF90ICAgICBfX2ludDgKKyNlbmRpZgorI2lmbmRl
ZiBfU0laRV9UX0RFRklORUQKKyNkZWZpbmUgc2l6ZV90ICAgICBfX2ludDMyCisjZW5kaWYKKyNk
ZWZpbmUgdV9sb25nICAgICB1bnNpZ25lZCBfX2ludDY0CisjZGVmaW5lIHVfaW50ICAgICAgdW5z
aWduZWQgX19pbnQzMgorI2RlZmluZSB1X2ludDMyX3QgIHVuc2lnbmVkIF9faW50MzIKKyNkZWZp
bmUgdV9pbnQxNl90ICB1bnNpZ25lZCBfX2ludDE2CisjZGVmaW5lIHVfaW50OF90ICAgdW5zaWdu
ZWQgX19pbnQ4CisjZGVmaW5lIHVfY2hhciAgICAgdW5zaWduZWQgY2hhcgorI2RlZmluZSBuX3No
b3J0ICAgIHVuc2lnbmVkIF9faW50MTYKKyNkZWZpbmUgdV9zaG9ydCAgICB1bnNpZ25lZCBfX2lu
dDE2CisjZGVmaW5lIG5fdGltZSAgICAgdW5zaWduZWQgX19pbnQzMgorI2RlZmluZSBzYV9mYW1p
bHlfdCB1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgc3NpemVfdCAgICBfX2ludDY0CisjZGVmaW5l
IF9fZnVuY19fCV9fRlVOQ1RJT05fXworCisjaWZuZGVmIEVXT1VMREJMT0NLCisjZGVmaW5lIEVX
T1VMREJMT0NLICAgICAgICAgICAgIFdTQUVXT1VMREJMT0NLCisjZW5kaWYKKyNpZm5kZWYgRUlO
UFJPR1JFU1MKKyNkZWZpbmUgRUlOUFJPR1JFU1MgICAgICAgICAgICAgV1NBRUlOUFJPR1JFU1MK
KyNlbmRpZgorI2lmbmRlZiBFQUxSRUFEWQorI2RlZmluZSBFQUxSRUFEWSAgICAgICAgICAgICAg
ICBXU0FFQUxSRUFEWQorI2VuZGlmCisjaWZuZGVmIEVOT1RTT0NLCisjZGVmaW5lIEVOT1RTT0NL
ICAgICAgICAgICAgICAgIFdTQUVOT1RTT0NLCisjZW5kaWYKKyNpZm5kZWYgRURFU1RBRERSUkVR
CisjZGVmaW5lIEVERVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNUQUREUlJFUQorI2VuZGlm
CisjaWZuZGVmIEVNU0dTSVpFCisjZGVmaW5lIEVNU0dTSVpFICAgICAgICAgICAgICAgIFdTQUVN
U0dTSVpFCisjZW5kaWYKKyNpZm5kZWYgRVBST1RPVFlQRQorI2RlZmluZSBFUFJPVE9UWVBFICAg
ICAgICAgICAgICBXU0FFUFJPVE9UWVBFCisjZW5kaWYKKyNpZm5kZWYgRU5PUFJPVE9PUFQKKyNk
ZWZpbmUgRU5PUFJPVE9PUFQgICAgICAgICAgICAgV1NBRU5PUFJPVE9PUFQKKyNlbmRpZgorI2lm
bmRlZiBFUFJPVE9OT1NVUFBPUlQKKyNkZWZpbmUgRVBST1RPTk9TVVBQT1JUICAgICAgICAgV1NB
RVBST1RPTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRVNPQ0tUTk9TVVBQT1JUCisjZGVmaW5l
IEVTT0NLVE5PU1VQUE9SVCAgICAgICAgIFdTQUVTT0NLVE5PU1VQUE9SVAorI2VuZGlmCisjaWZu
ZGVmIEVPUE5PVFNVUFAKKyNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAgICAgICAgV1NBRU9QTk9U
U1VQUAorI2VuZGlmCisjaWZuZGVmIEVOT1RTVVAKKyNkZWZpbmUgRU5PVFNVUCAgICAgICAgICAg
ICAgICAgV1NBRU9QTk9UU1VQUAorI2VuZGlmCisjaWZuZGVmIEVQRk5PU1VQUE9SVAorI2RlZmlu
ZSBFUEZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQKKyNlbmRpZgorI2lmbmRl
ZiBFQUZOT1NVUFBPUlQKKyNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFGTk9T
VVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRUFERFJJTlVTRQorI2RlZmluZSBFQUREUklOVVNFICAg
ICAgICAgICAgICBXU0FFQUREUklOVVNFCisjZW5kaWYKKyNpZm5kZWYgRUFERFJOT1RBVkFJTAor
I2RlZmluZSBFQUREUk5PVEFWQUlMICAgICAgICAgICBXU0FFQUREUk5PVEFWQUlMCisjZW5kaWYK
KyNpZm5kZWYgRU5FVERPV04KKyNkZWZpbmUgRU5FVERPV04gICAgICAgICAgICAgICAgV1NBRU5F
VERPV04KKyNlbmRpZgorI2lmbmRlZiBFTkVUVU5SRUFDSAorI2RlZmluZSBFTkVUVU5SRUFDSCAg
ICAgICAgICAgICBXU0FFTkVUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIEVORVRSRVNFVAorI2Rl
ZmluZSBFTkVUUkVTRVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQKKyNlbmRpZgorI2lmbmRl
ZiBFQ09OTkFCT1JURUQKKyNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAgICAgICAgV1NBRUNPTk5B
Qk9SVEVECisjZW5kaWYKKyNpZm5kZWYgRUNPTk5SRVNFVAorI2RlZmluZSBFQ09OTlJFU0VUICAg
ICAgICAgICAgICBXU0FFQ09OTlJFU0VUCisjZW5kaWYKKyNpZm5kZWYgRU5PQlVGUworI2RlZmlu
ZSBFTk9CVUZTICAgICAgICAgICAgICAgICBXU0FFTk9CVUZTCisjZW5kaWYKKyNpZm5kZWYgRUlT
Q09OTgorI2RlZmluZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FFSVNDT05OCisjZW5kaWYK
KyNpZm5kZWYgRU5PVENPTk4KKyNkZWZpbmUgRU5PVENPTk4gICAgICAgICAgICAgICAgV1NBRU5P
VENPTk4KKyNlbmRpZgorI2lmbmRlZiBFU0hVVERPV04KKyNkZWZpbmUgRVNIVVRET1dOICAgICAg
ICAgICAgICAgV1NBRVNIVVRET1dOCisjZW5kaWYKKyNpZm5kZWYgRVRPT01BTllSRUZTCisjZGVm
aW5lIEVUT09NQU5ZUkVGUyAgICAgICAgICAgIFdTQUVUT09NQU5ZUkVGUworI2VuZGlmCisjaWZu
ZGVmIEVUSU1FRE9VVAorI2RlZmluZSBFVElNRURPVVQgICAgICAgICAgICAgICBXU0FFVElNRURP
VVQKKyNlbmRpZgorI2lmbmRlZiBFQ09OTlJFRlVTRUQKKyNkZWZpbmUgRUNPTk5SRUZVU0VEICAg
ICAgICAgICAgV1NBRUNPTk5SRUZVU0VECisjZW5kaWYKKyNpZm5kZWYgRUxPT1AKKyNkZWZpbmUg
RUxPT1AgICAgICAgICAgICAgICAgICAgV1NBRUxPT1AKKyNlbmRpZgorI2lmbmRlZiBFSE9TVERP
V04KKyNkZWZpbmUgRUhPU1RET1dOICAgICAgICAgICAgICAgV1NBRUhPU1RET1dOCisjZW5kaWYK
KyNpZm5kZWYgRUhPU1RVTlJFQUNICisjZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgICAgICAgIFdT
QUVIT1NUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIEVQUk9DTElNCisjZGVmaW5lIEVQUk9DTElN
ICAgICAgICAgICAgICAgIFdTQUVQUk9DTElNCisjZW5kaWYKKyNpZm5kZWYgRVVTRVJTCisjZGVm
aW5lIEVVU0VSUyAgICAgICAgICAgICAgICAgIFdTQUVVU0VSUworI2VuZGlmCisjaWZuZGVmIEVE
UVVPVAorI2RlZmluZSBFRFFVT1QgICAgICAgICAgICAgICAgICBXU0FFRFFVT1QKKyNlbmRpZgor
I2lmbmRlZiBFU1RBTEUKKyNkZWZpbmUgRVNUQUxFICAgICAgICAgICAgICAgICAgV1NBRVNUQUxF
CisjZW5kaWYKKyNpZm5kZWYgRVJFTU9URQorI2RlZmluZSBFUkVNT1RFICAgICAgICAgICAgICAg
ICBXU0FFUkVNT1RFCisjZW5kaWYKKwordHlwZWRlZiBjaGFyKiBjYWRkcl90OworCisjZGVmaW5l
IGJ6ZXJvKGJ1ZiwgbGVuKSBtZW1zZXQoYnVmLCAwLCBsZW4pCisjZGVmaW5lIGJjb3B5KHNyY0tl
eSwgZHN0S2V5LCBsZW4pIG1lbWNweShkc3RLZXksIHNyY0tleSwgbGVuKQorI2lmIF9NU0NfVkVS
IDwgMTkwMAorI2RlZmluZSBzbnByaW50ZihkYXRhLCBzaXplLCBmb3JtYXQsIC4uLikgX3NucHJp
bnRmX3MoZGF0YSwgc2l6ZSwgX1RSVU5DQVRFLCBmb3JtYXQsIF9fVkFfQVJHU19fKQorI2VuZGlm
CisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2RlZmluZSBfX2lubGluZV9fIF9faW5saW5lCisj
ZGVmaW5lCU1TR19FT1IJCTB4OAkJLyogZGF0YSBjb21wbGV0ZXMgcmVjb3JkICovCisjZGVmaW5l
CU1TR19ET05UV0FJVAkweDgwCQkvKiB0aGlzIG1lc3NhZ2Ugc2hvdWxkIGJlIG5vbmJsb2NraW5n
ICovCisKKyNpZmRlZiBDTVNHX0RBVEEKKyN1bmRlZiBDTVNHX0RBVEEKKyNlbmRpZgorLyoKKyAq
IFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgc2hvdWxkIGFwcGx5IGlmZiBXSU5WRVIgPCAweDA2
MDAKKyAqIGJ1dCB0aGF0IGNoZWNrIGRvZXNuJ3Qgd29yayBpbiBhbGwgY2FzZXMuIFNvIGJlIG1v
cmUgcGVkYW50aWMuLi4KKyAqLworI2RlZmluZSBDTVNHX0RBVEEoeCkgV1NBX0NNU0dfREFUQSh4
KQorI2RlZmluZSBDTVNHX0FMSUdOKHgpIFdTQV9DTVNHREFUQV9BTElHTih4KQorI2lmbmRlZiBD
TVNHX0ZJUlNUSERSCisjZGVmaW5lIENNU0dfRklSU1RIRFIoeCkgV1NBX0NNU0dfRklSU1RIRFIo
eCkKKyNlbmRpZgorI2lmbmRlZiBDTVNHX05YVEhEUgorI2RlZmluZSBDTVNHX05YVEhEUih4LCB5
KSBXU0FfQ01TR19OWFRIRFIoeCwgeSkKKyNlbmRpZgorI2lmbmRlZiBDTVNHX1NQQUNFCisjZGVm
aW5lIENNU0dfU1BBQ0UoeCkgV1NBX0NNU0dfU1BBQ0UoeCkKKyNlbmRpZgorI2lmbmRlZiBDTVNH
X0xFTgorI2RlZmluZSBDTVNHX0xFTih4KSBXU0FfQ01TR19MRU4oeCkKKyNlbmRpZgorCisvKioq
KiAgZnJvbSBzY3RwX29zX3dpbmRvd3MuaCAqKioqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBf
SUZOX0lTX0lGVF9MT09QKGlmbikJKChpZm4pLT5pZm5fdHlwZSA9PSBJRlRfTE9PUCkKKyNkZWZp
bmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8pICgocm8pLT5yb19ydCAmJiAocm8pLT5yb19y
dC0+cnRfaWZhICYmIChybyktPnJvX3J0LT5ydF9pZmEtPmlmYV9pZnAgJiYgKHJvKS0+cm9fcnQt
PnJ0X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9PSBJRlRfTE9PUCkKKworLyoKKyAqIEFjY2VzcyB0
byBJRk4ncyB0byBoZWxwIHdpdGggc3JjLWFkZHItc2VsZWN0aW9uCisgKi8KKy8qIFRoaXMgY291
bGQgcmV0dXJuIFZPSUQgaWYgdGhlIGluZGV4IHdvcmtzIGJ1dCBmb3IgQlNEIHdlIHByb3ZpZGUg
Ym90aC4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybykgXAorCSgo
cm8pLT5yb19ydCAhPSBOVUxMID8gKHJvKS0+cm9fcnQtPnJ0X2lmcCA6IE5VTEwpCisjZGVmaW5l
IFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTihybykgXAorCSgocm8pLT5yb19ydCAmJiAocm8pLT5y
b19ydC0+cnRfaWZwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKworI2RlZmluZSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKSAxIC8qIGNvbXBp
bGVzLi4uICBUT0RPIHVzZSByb3V0aW5nIHNvY2tldCB0byBkZXRlcm1pbmUgKi8KKworI2RlZmlu
ZSBCSUdfRU5ESUFOIDEKKyNkZWZpbmUgTElUVExFX0VORElBTiAwCisjaWZkZWYgV09SRFNfQklH
RU5ESUFOCisjZGVmaW5lIEJZVEVfT1JERVIgQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgQllU
RV9PUkRFUiBMSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2Vsc2UgLyogIWRlZmluZWQoVXNlcnNw
YWNlX29zX1dpbmRvd3MpICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVC
U0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfTmV0QlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09wZW5CU0QpIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GdWNoc2lh
KQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgordHlwZWRlZiBwdGhyZWFkX211dGV4X3Qg
dXNlcmxhbmRfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9jb25kX3QgdXNlcmxhbmRfY29uZF90
OwordHlwZWRlZiBwdGhyZWFkX3QgdXNlcmxhbmRfdGhyZWFkX3Q7CisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19O
YUNsKQorCisjZGVmaW5lIElGTkFNU0laIDY0CisKKyNkZWZpbmUgcmFuZG9tKCkgcmFuZCgpCisj
ZGVmaW5lIHNyYW5kb20ocykgc3JhbmQocykKKworI2RlZmluZSB0aW1lcmFkZCh0dnAsIHV2cCwg
dnZwKSAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJICAgICh2dnApLT50
dl9zZWMgPSAodHZwKS0+dHZfc2VjICsgKHV2cCktPnR2X3NlYzsgIFwKKwkJKHZ2cCktPnR2X3Vz
ZWMgPSAodHZwKS0+dHZfdXNlYyArICh1dnApLT50dl91c2VjOyAgXAorCQlpZiAoKHZ2cCktPnR2
X3VzZWMgPj0gMTAwMDAwMCkgeyAgICAgICAgICAgICAgICAgICBcCisJCSAgICAodnZwKS0+dHZf
c2VjKys7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKHZ2cCktPnR2X3VzZWMgLT0gMTAw
MDAwMDsgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdo
aWxlICgwKQorCisjZGVmaW5lIHRpbWVyc3ViKHR2cCwgdXZwLCB2dnApICAgXAorCWRvIHsgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgKHZ2cCktPnR2X3NlYyA9ICh0dnApLT50dl9z
ZWMgLSAodXZwKS0+dHZfc2VjOyAgXAorCQkodnZwKS0+dHZfdXNlYyA9ICh0dnApLT50dl91c2Vj
IC0gKHV2cCktPnR2X3VzZWM7ICBcCisJCWlmICgodnZwKS0+dHZfdXNlYyA8IDApIHsgICAgICAg
ICAgICAgICAgICAgXAorCQkgICAgKHZ2cCktPnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKwkJCSh2dnApLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAgICAgICAgIFwKKwkJfSAg
ICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisKKy8qI2luY2x1ZGUgPHBhY2tv
bi5oPgorI3ByYWdtYSBwYWNrKHB1c2gsIDEpKi8KK3N0cnVjdCBpcCB7CisJdV9jaGFyICAgIGlw
X2hsOjQsIGlwX3Y6NDsKKwl1X2NoYXIgICAgaXBfdG9zOworCXVfc2hvcnQgICBpcF9sZW47CisJ
dV9zaG9ydCAgIGlwX2lkOworCXVfc2hvcnQgICBpcF9vZmY7CisjZGVmaW5lIElQX1JQIDB4ODAw
MAorI2RlZmluZSBJUF9ERiAweDQwMDAKKyNkZWZpbmUgSVBfTUYgMHgyMDAwCisjZGVmaW5lIElQ
X09GRk1BU0sgMHgxZmZmCisJdV9jaGFyICAgIGlwX3R0bDsKKwl1X2NoYXIgICAgaXBfcDsKKwl1
X3Nob3J0ICAgaXBfc3VtOworCXN0cnVjdCBpbl9hZGRyIGlwX3NyYywgaXBfZHN0OworfTsKKwor
c3RydWN0IGlmYWRkcnMgeworCXN0cnVjdCBpZmFkZHJzICAqaWZhX25leHQ7CisJY2hhcgkJKmlm
YV9uYW1lOworCXVuc2lnbmVkIGludAkJIGlmYV9mbGFnczsKKwlzdHJ1Y3Qgc29ja2FkZHIJKmlm
YV9hZGRyOworCXN0cnVjdCBzb2NrYWRkcgkqaWZhX25ldG1hc2s7CisJc3RydWN0IHNvY2thZGRy
CSppZmFfZHN0YWRkcjsKKwl2b2lkCQkqaWZhX2RhdGE7Cit9OworCitzdHJ1Y3QgdWRwaGRyIHsK
Kwl1aW50MTZfdCB1aF9zcG9ydDsKKwl1aW50MTZfdCB1aF9kcG9ydDsKKwl1aW50MTZfdCB1aF91
bGVuOworCXVpbnQxNl90IHVoX3N1bTsKK307CisKK3N0cnVjdCBpb3ZlYyB7CisJc2l6ZV90IGxl
bjsKKwljaGFyICpidWY7Cit9OworCisjZGVmaW5lIGlvdl9iYXNlIGJ1ZgorI2RlZmluZSBpb3Zf
bGVuCWxlbgorCitzdHJ1Y3QgaWZhX21zZ2hkciB7CisJdWludDE2X3QgICAgICAgICBpZmFtX21z
Z2xlbjsKKwl1bnNpZ25lZCBjaGFyICAgIGlmYW1fdmVyc2lvbjsKKwl1bnNpZ25lZCBjaGFyICAg
IGlmYW1fdHlwZTsKKwl1aW50MzJfdCAgICAgICAgIGlmYW1fYWRkcnM7CisJdWludDMyX3QgICAg
ICAgICBpZmFtX2ZsYWdzOworCXVpbnQxNl90ICAgICAgICAgaWZhbV9pbmRleDsKKwl1aW50MzJf
dCAgICAgICAgIGlmYW1fbWV0cmljOworfTsKKworc3RydWN0IGlmZGV2bXR1IHsKKwlpbnQgaWZk
bV9jdXJyZW50OworCWludCBpZmRtX21pbjsKKwlpbnQgaWZkbV9tYXg7Cit9OworCitzdHJ1Y3Qg
aWZrcGkgeworCXVuc2lnbmVkIGludCAgaWZrX21vZHVsZV9pZDsKKwl1bnNpZ25lZCBpbnQgIGlm
a190eXBlOworCXVuaW9uIHsKKwkJdm9pZCAqaWZrX3B0cjsKKwkJaW50IGlma192YWx1ZTsKKwl9
IGlma19kYXRhOworfTsKKworc3RydWN0IGlmcmVxIHsKKwljaGFyICAgIGlmcl9uYW1lWzE2XTsK
Kwl1bmlvbiB7CisJCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CisJCXN0cnVjdCBzb2NrYWRk
ciBpZnJ1X2RzdGFkZHI7CisJCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2Jyb2FkYWRkcjsKKwkJc2hv
cnQgIGlmcnVfZmxhZ3M7CisJCWludCBpZnJ1X21ldHJpYzsKKwkJaW50IGlmcnVfbXR1OworCQlp
bnQgaWZydV9waHlzOworCQlpbnQgaWZydV9tZWRpYTsKKwkJaW50ICAgIGlmcnVfaW50dmFsOwor
CQljaGFyKiAgaWZydV9kYXRhOworCQlzdHJ1Y3QgaWZkZXZtdHUgaWZydV9kZXZtdHU7CisJCXN0
cnVjdCBpZmtwaSAgaWZydV9rcGk7CisJCXVpbnQzMl90IGlmcnVfd2FrZV9mbGFnczsKKwl9IGlm
cl9pZnJ1OworI2RlZmluZSBpZnJfYWRkciAgICAgICAgaWZyX2lmcnUuaWZydV9hZGRyCisjZGVm
aW5lIGlmcl9kc3RhZGRyICAgICBpZnJfaWZydS5pZnJ1X2RzdGFkZHIKKyNkZWZpbmUgaWZyX2Jy
b2FkYWRkciAgIGlmcl9pZnJ1LmlmcnVfYnJvYWRhZGRyCisjZGVmaW5lIGlmcl9mbGFncyAgICAg
ICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzBdCisjZGVmaW5lIGlmcl9wcmV2ZmxhZ3MgICBpZnJfaWZy
dS5pZnJ1X2ZsYWdzWzFdCisjZGVmaW5lIGlmcl9tZXRyaWMgICAgICBpZnJfaWZydS5pZnJ1X21l
dHJpYworI2RlZmluZSBpZnJfbXR1ICAgICAgICAgaWZyX2lmcnUuaWZydV9tdHUKKyNkZWZpbmUg
aWZyX3BoeXMgICAgICAgIGlmcl9pZnJ1LmlmcnVfcGh5cworI2RlZmluZSBpZnJfbWVkaWEgICAg
ICAgaWZyX2lmcnUuaWZydV9tZWRpYQorI2RlZmluZSBpZnJfZGF0YSAgICAgICAgaWZyX2lmcnUu
aWZydV9kYXRhCisjZGVmaW5lIGlmcl9kZXZtdHUgICAgICBpZnJfaWZydS5pZnJ1X2Rldm10dQor
I2RlZmluZSBpZnJfaW50dmFsICAgICAgaWZyX2lmcnUuaWZydV9pbnR2YWwKKyNkZWZpbmUgaWZy
X2twaSAgICAgICAgIGlmcl9pZnJ1LmlmcnVfa3BpCisjZGVmaW5lIGlmcl93YWtlX2ZsYWdzICBp
ZnJfaWZydS5pZnJ1X3dha2VfZmxhZ3MKK307CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQoraW50IFdpbl9nZXRpZmFkZHJzKHN0cnVjdCBpZmFkZHJzKiop
OworI2RlZmluZSBnZXRpZmFkZHJzKGludGVyZmFjZXMpICAoaW50KVdpbl9nZXRpZmFkZHJzKGlu
dGVyZmFjZXMpCitpbnQgd2luX2lmX25hbWV0b2luZGV4KGNvbnN0IGNoYXIgKik7CisjZGVmaW5l
IGlmX25hbWV0b2luZGV4KHgpIHdpbl9pZl9uYW1ldG9pbmRleCh4KQorI2VuZGlmCisKKyNkZWZp
bmUgbXR4X2xvY2soYXJnMSkKKyNkZWZpbmUgbXR4X3VubG9jayhhcmcxKQorI2RlZmluZSBtdHhf
YXNzZXJ0KGFyZzEsYXJnMikKKyNkZWZpbmUgTUFfT1dORUQgNyAvKiBzeXMvbXV0ZXguaCB0eXBp
Y2FsbHkgb24gRnJlZUJTRCAqLworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0Qp
CitzdHJ1Y3QgbXR4IHtpbnQgZHVtbXk7fTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19O
ZXRCU0QpCitzdHJ1Y3Qgc2VsaW5mbyB7aW50IGR1bW15O307CisjZW5kaWYKK3N0cnVjdCBzeCB7
aW50IGR1bW15O307CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisvKiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICBpbiBGcmVlQlNEIGRlZmluZXMgTVNJ
WkUgKi8KKy8qICNpbmNsdWRlIDxzeXMva3RyLmg+ICovCisvKiAjaW5jbHVkZSA8c3lzL3N5c3Rt
Lmg+ICovCisjaWYgZGVmaW5lZChIQVZFX1NZU19RVUVVRV9IKQorI2luY2x1ZGUgPHN5cy9xdWV1
ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX3F1ZXVlLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1
c2VyX21hbGxvYy5oPgorLyogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4gKi8KKy8qICNpbmNsdWRl
IDxzeXMvc3lzY3RsLmg+ICovCisvKiAjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4gKi8KKy8qIG9u
IEZyZWVCU0QsIHRoaXMgcmVzdWx0cyBpbiBhIHJlZGVmaW50aW9uIG9mIFNPQ0soQlVGKV8oVU4p
TE9DSyBhbmQKKyAqICB1a25vd24gdHlwZSBvZiBzdHJ1Y3QgbXR4IGZvciBzYl9tdHggaW4gc3Ry
dWN0IHNvY2tidWYgKi8KKyNpbmNsdWRlICJ1c2VyX3NvY2tldHZhci5oIiAvKiBNQUxMT0NfREVD
TEFSRSdzIE1fUENCLiBSZXBsYWNlbWVudCBmb3Igc3lzL3NvY2tldHZhci5oICovCisvKiAjaW5j
bHVkZSA8c3lzL2phaWwuaD4gKi8KKy8qICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+ICovCisjaW5j
bHVkZSA8dXNlcl9lbnZpcm9ubWVudC5oPgorI2luY2x1ZGUgPHVzZXJfYXRvbWljLmg+CisjaW5j
bHVkZSA8dXNlcl9tYnVmLmg+CisvKiAjaW5jbHVkZSA8c3lzL3Vpby5oPiAqLworLyogI2luY2x1
ZGUgPHN5cy9sb2NrLmg+ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPiA2MDIwMDAKKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+CisjZW5kaWYKKy8qICNp
bmNsdWRlIDxzeXMva3RocmVhZC5oPiAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCisjaW5jbHVkZSA8c3lzL3ByaXYuaD4KKyNlbmRpZgor
LyogI2luY2x1ZGUgPHN5cy9yYW5kb20uaD4gKi8KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKy8qICNp
bmNsdWRlIDxtYWNoaW5lL2NwdS5oPiAqLworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19E
YXJ3aW4pCisvKiB3YXMgYSAwIGJ5dGUgZmlsZS4gIG5lZWRlZCBmb3Igc3RydWN0cyBpZl9kYXRh
KDY0KSBhbmQgbmV0X2V2ZW50X2RhdGEgKi8KKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisjaW5jbHVkZSA8bmV0L2lm
X3R5cGVzLmg+CisvKiAjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPiB3YXMgYSAwIGJ5dGUgZmlsZS4g
IGNhdXNlcyBzdHJ1Y3QgbXR4IHJlZGVmaW5pdGlvbiAqLworI2VuZGlmCisvKiBPT1RCIG9ubHkg
LSBkdW1teSByb3V0ZSB1c2VkIGF0IHRoZSBtb21lbnQuIHNob3VsZCB3ZSBwb3J0IHJvdXRlIHRv
CisgKiAgdXNlcnNwYWNlIGFzIHdlbGw/ICovCisvKiBvbiBGcmVlQlNELCB0aGlzIHJlc3VsdHMg
aW4gYSByZWRlZmludGlvbiBvZiBzdHJ1Y3Qgcm91dGUgKi8KKy8qICNpbmNsdWRlIDxuZXQvcm91
dGUuaD4gKi8KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19OYUNsKQorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX05FVElORVRfSVBfSUNNUF9IKQor
I2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX2lwX2lj
bXAuaD4KKyNlbmRpZgorLyogI2luY2x1ZGUgPG5ldGluZXQvaW5fcGNiLmg+IHBvcnRlZCB0byB1
c2Vyc3BhY2UgKi8KKyNpbmNsdWRlIDx1c2VyX2lucGNiLmg+CisKKy8qIGZvciBnZXRpZmFkZHJz
ICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisjaW5jbHVkZSA8
aWZhZGRycy5oPgorI2VuZGlmCisKKy8qIGZvciBpb2N0bCAqLworI2luY2x1ZGUgPHN5cy9pb2N0
bC5oPgorCisvKiBmb3IgY2xvc2UsIGV0Yy4gKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRp
ZgorCisvKiBsb3RzIG9mIGVycm5vJ3MgdXNlZCBhbmQgbmVlZGVkIGluIHVzZXJzcGFjZSAqLwor
CisvKiBmb3Igb2Zmc2V0b2YgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmIGRlZmluZWQo
U0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQorLyogZm9yIHB0aHJlYWRfbXV0ZXhfbG9jaywgcHRocmVhZF9tdXRleF91bmxvY2ssIGV0
Yy4gKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2lmZGVmIElQU0VDCisjaW5j
bHVkZSA8bmV0aXBzZWMvaXBzZWMuaD4KKyNpbmNsdWRlIDxuZXRpcHNlYy9rZXkuaD4KKyNlbmRp
ZgkJCQkvKiBJUFNFQyAqLworCisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX0ZyZWVCU0QpCisjaW5jbHVkZSA8c3lzL2RvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgSVBT
RUMKKyNpbmNsdWRlIDxuZXRpcHNlYy9pcHNlYzYuaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX0ZyZWVCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09wZW5CU0Qp
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNsdWRlICJ1c2VyX2lwNl92
YXIuaCIKKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldDYvaXA2X3Zhci5oPgorI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQorI2luY2x1ZGUgPG5ldGluZXQ2L2luNl9w
Y2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZwcm90b3N3Lmg+CisvKiAjaW5jbHVkZSA8bmV0
aW5ldDYvbmQ2Lmg+IHdhcyBhIDAgYnl0ZSBmaWxlICovCisjaW5jbHVkZSA8bmV0aW5ldDYvc2Nv
cGU2X3Zhci5oPgorI2VuZGlmCisjZW5kaWYgLyogSU5FVDYgKi8KKworI2lmIGRlZmluZWQoSEFW
RV9TQ1RQX1BFRUxPRkZfU09DS09QVCkKKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUg
PHN5cy9maWxlZGVzYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJuZXRpbmV0L3NjdHBfc2hhMS5o
IgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisjaW5jbHVkZSA8bmV0aW5ldC9p
cF9vcHRpb25zLmg+CisjZW5kaWYKKworI2RlZmluZSBTQ1RQX1BSSU5URiguLi4pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoU0NUUF9CQVNFX1ZBUihkZWJ1Z19wcmlu
dGYpKSB7ICAgICAgICAgICAgICAgIFwKKwkJU0NUUF9CQVNFX1ZBUihkZWJ1Z19wcmludGYpKF9f
VkFfQVJHU19fKTsgXAorCX0KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZuZGVmIGlu
NnBjYgorI2RlZmluZSBpbjZwY2IJCWlucGNiCisjZW5kaWYKKyNlbmRpZgorLyogRGVjbGFyZSBh
bGwgdGhlIG1hbGxvYyBuYW1lcyBmb3IgYWxsIHRoZSB2YXJpb3VzIG1hbGxvY3MgKi8KK01BTExP
Q19ERUNMQVJFKFNDVFBfTV9NQVApOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1NUUk1JKTsKK01B
TExPQ19ERUNMQVJFKFNDVFBfTV9TVFJNTyk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQVNDX0FE
RFIpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0FTQ19JVCk7CitNQUxMT0NfREVDTEFSRShTQ1RQ
X01fQVVUSF9DTCk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQVVUSF9LWSk7CitNQUxMT0NfREVD
TEFSRShTQ1RQX01fQVVUSF9ITCk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQVVUSF9JRik7CitN
QUxMT0NfREVDTEFSRShTQ1RQX01fU1RSRVNFVCk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQ01T
Ryk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQ09QWUFMKTsKK01BTExPQ19ERUNMQVJFKFNDVFBf
TV9WUkYpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0lGQSk7CitNQUxMT0NfREVDTEFSRShTQ1RQ
X01fSUZOKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9USU1XKTsKK01BTExPQ19ERUNMQVJFKFND
VFBfTV9NVlJGKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9JVEVSKTsKK01BTExPQ19ERUNMQVJF
KFNDVFBfTV9TT0NLT1BUKTsKKworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisK
KyNkZWZpbmUgU0NUUF9HRVRfQ1lDTEVDT1VOVCBnZXRfY3ljbGVjb3VudCgpCisjZGVmaW5lIFND
VFBfQ1RSNiBzY3RwX2xvZ190cmFjZQorCisjZWxzZQorI2RlZmluZSBTQ1RQX0NUUjYgQ1RSNgor
I2VuZGlmCisKKy8qIEVtcHR5IGt0ciBzdGF0ZW1lbnQgZm9yIF9Vc2Vyc3BhY2VfXyAoc2ltaWxh
ciB0byB3aGF0IGlzIGRvbmUgZm9yIG1hYykgKi8KKyNkZWZpbmUJQ1RSNihtLCBkLCBwMSwgcDIs
IHAzLCBwNCwgcDUsIHA2KQorCisKKworI2RlZmluZSBTQ1RQX0JBU0VfSU5GTyhfX20pIHN5c3Rl
bV9iYXNlX2luZm8uc2N0cHBjYmluZm8uX19tCisjZGVmaW5lIFNDVFBfQkFTRV9TVEFUUyBzeXN0
ZW1fYmFzZV9pbmZvLnNjdHBzdGF0CisjZGVmaW5lIFNDVFBfQkFTRV9TVEFUKF9fbSkgICAgIHN5
c3RlbV9iYXNlX2luZm8uc2N0cHN0YXQuX19tCisjZGVmaW5lIFNDVFBfQkFTRV9TWVNDVEwoX19t
KSBzeXN0ZW1fYmFzZV9pbmZvLnNjdHBzeXNjdGwuX19tCisjZGVmaW5lIFNDVFBfQkFTRV9WQVIo
X19tKSBzeXN0ZW1fYmFzZV9pbmZvLl9fbQorCisvKgorICoKKyAqLworI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0RhcndpbikKKyNkZWZpbmUgVVNFUl9BRERSX05VTEwJKE5VTEwpCQkvKiBG
SVggTUU6IHRlbXAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTQ1RQX0RFQlVHKQorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNkZWZpbmUgU0NUUERCRyhsZXZlbCwgLi4u
KQkJCQkJXAorewkJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RlYnVnX29uKSAmIGxldmVsKSB7CVwKKwkJCVNDVFBfUFJJTlRGKF9fVkFfQVJHU19f
KTsJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKTsJCQkJCQlcCit9CisjZGVmaW5lIFNDVFBE
QkdfQUREUihsZXZlbCwgYWRkcikJCQkJXAorewkJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlYnVnX29uKSAmIGxldmVsICkgewlcCisJCSAgICBz
Y3RwX3ByaW50X2FkZHJlc3MoYWRkcik7CQkJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApOwkJ
CQkJCVwKK30KKyNlbHNlCisjZGVmaW5lIFNDVFBEQkcobGV2ZWwsIC4uLikKKyNkZWZpbmUgU0NU
UERCR19BRERSKGxldmVsLCBhZGRyKQorI2VuZGlmCisKKyNpZmRlZiBTQ1RQX0xUUkFDRV9DSFVO
S1MKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hLKGEsIGIsIGMsIGQpIGlmKHNjdHBfbG9nZ2luZ19s
ZXZlbCAmIFNDVFBfTFRSQUNFX0NIVU5LX0VOQUJMRSkgQ1RSNihLVFJfU1VCU1lTLCAiU0NUUDol
ZFslZF06JXgtJXgtJXgtJXgiLCBTQ1RQX0xPR19DSFVOS19QUk9DLCAwLCBhLCBiLCBjLCBkKQor
I2Vsc2UKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hLKGEsIGIsIGMsIGQpCisjZW5kaWYKKworI2lm
ZGVmIFNDVFBfTFRSQUNFX0VSUk9SUworI2RlZmluZSBTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVCht
LCBpbnAsIHN0Y2IsIG5ldCwgZmlsZSwgZXJyKSBcCisJaWYgKHNjdHBfbG9nZ2luZ19sZXZlbCAm
IFNDVFBfTFRSQUNFX0VSUk9SX0VOQUJMRSkgXAorCQlTQ1RQX1BSSU5URigibWJ1ZjolcCBpbnA6
JXAgc3RjYjolcCBuZXQ6JXAgZmlsZToleCBsaW5lOiVkIGVycm9yOiVkXG4iLCBcCisJCSAgICAg
ICAgICAgICh2b2lkICopbSwgKHZvaWQgKilpbnAsICh2b2lkICopc3RjYiwgKHZvaWQgKiluZXQs
IGZpbGUsIF9fTElORV9fLCBlcnIpOworI2RlZmluZSBTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
c3RjYiwgbmV0LCBmaWxlLCBlcnIpIFwKKwlpZiAoc2N0cF9sb2dnaW5nX2xldmVsICYgU0NUUF9M
VFJBQ0VfRVJST1JfRU5BQkxFKSBcCisJCVNDVFBfUFJJTlRGKCJpbnA6JXAgc3RjYjolcCBuZXQ6
JXAgZmlsZToleCBsaW5lOiVkIGVycm9yOiVkXG4iLCBcCisJCSAgICAgICAgICAgICh2b2lkICop
aW5wLCAodm9pZCAqKXN0Y2IsICh2b2lkICopbmV0LCBmaWxlLCBfX0xJTkVfXywgZXJyKTsKKyNl
bHNlCisjZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgbmV0LCBm
aWxlLCBlcnIpCisjZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIGZp
bGUsIGVycikKKyNlbmRpZgorCisKKy8qCisgKiBMb2NhbCBhZGRyZXNzIGFuZCBpbnRlcmZhY2Ug
bGlzdCBoYW5kbGluZworICovCisjZGVmaW5lIFNDVFBfTUFYX1ZSRl9JRAkJMAorI2RlZmluZSBT
Q1RQX1NJWkVfT0ZfVlJGX0hBU0gJMworI2RlZmluZSBTQ1RQX0lGTkFNU0laCQlJRk5BTVNJWgor
I2RlZmluZSBTQ1RQX0RFRkFVTFRfVlJGSUQJMAorI2RlZmluZSBTQ1RQX1ZSRl9BRERSX0hBU0hf
U0laRQkxNgorI2RlZmluZSBTQ1RQX1ZSRl9JRk5fSEFTSF9TSVpFCTMKKyNkZWZpbmUJU0NUUF9J
TklUX1ZSRl9UQUJMRUlEKHZyZikKKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisjZGVmaW5lIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmbikgKHN0cm5jbXAoKGlmbiktPmlm
bl9uYW1lLCAibG8iLCAyKSA9PSAwKQorLyogQlNEIGRlZmluaXRpb24gKi8KKy8qICNkZWZpbmUg
U0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8pICgocm8pLT5yb19ydCAmJiAocm8pLT5yb19ydC0+
cnRfaWZhICYmIChybyktPnJvX3J0LT5ydF9pZmEtPmlmYV9pZnAgJiYgKHJvKS0+cm9fcnQtPnJ0
X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9PSBJRlRfTE9PUCkgKi8KKy8qIG9ubHkgdXNlZCBpbiBJ
UHY2IHNjZW5hcmlvLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQgeWV0ICovCisjZGVmaW5lIFNDVFBf
Uk9VVEVfSVNfUkVBTF9MT09QKHJvKSAwCisKKy8qCisgKiBBY2Nlc3MgdG8gSUZOJ3MgdG8gaGVs
cCB3aXRoIHNyYy1hZGRyLXNlbGVjdGlvbgorICovCisvKiBUaGlzIGNvdWxkIHJldHVybiBWT0lE
IGlmIHRoZSBpbmRleCB3b3JrcyBidXQgZm9yIEJTRCB3ZSBwcm92aWRlIGJvdGguICovCisjZGVm
aW5lIFNDVFBfR0VUX0lGTl9WT0lEX0ZST01fUk9VVEUocm8pICh2b2lkICopcm8tPnJvX3J0LT5y
dF9pZnAKKyNkZWZpbmUgU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybykgMSAvKiBjb21w
aWxlcy4uLiAgVE9ETyB1c2Ugcm91dGluZyBzb2NrZXQgdG8gZGV0ZXJtaW5lICovCisjZGVmaW5l
IFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTihybykgKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0
LT5ydF9pZnApCisjZW5kaWYKKworLyoKKyAqIGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRpb24KKyAq
LworI2RlZmluZSBTQ1RQX01BTExPQyh2YXIsIHR5cGUsIHNpemUsIG5hbWUpCQkJCVwKKwlkbyB7
CQkJCQkJCQlcCisJCU1BTExPQyh2YXIsIHR5cGUsIHNpemUsIG5hbWUsIE1fTk9XQUlUKTsJCVwK
Kwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfRlJFRSh2YXIsIHR5cGUpCUZSRUUodmFyLCB0
eXBlKQorCisjZGVmaW5lIFNDVFBfTUFMTE9DX1NPTkFNRSh2YXIsIHR5cGUsIHNpemUpCQkJCVwK
KwlkbyB7CQkJCQkJCQlcCisJCU1BTExPQyh2YXIsIHR5cGUsIHNpemUsIE1fU09OQU1FLCAoTV9X
QUlUT0sgfCBNX1pFUk8pKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9GUkVFX1NP
TkFNRSh2YXIpCUZSRUUodmFyLCBNX1NPTkFNRSkKKworI2RlZmluZSBTQ1RQX1BST0NFU1NfU1RS
VUNUIHN0cnVjdCBwcm9jICoKKworLyoKKyAqIHpvbmUgYWxsb2NhdGlvbiBmdW5jdGlvbnMKKyAq
LworCisKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKy8qdHlwZWRlZiBzaXpl
X3Qgc2N0cF96b25lX3Q7Ki8KKyNkZWZpbmUgU0NUUF9aT05FX0lOSVQoem9uZSwgbmFtZSwgc2l6
ZSwgbnVtYmVyKSB7IFwKKwl6b25lID0gc2l6ZTsgXAorfQorCisvKiBfX1VzZXJzcGFjZV9fIFND
VFBfWk9ORV9HRVQ6IGFsbG9jYXRlIGVsZW1lbnQgZnJvbSB0aGUgem9uZSAqLworI2RlZmluZSBT
Q1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUpICBcCisgICAgICAgICh0eXBlICopbWFsbG9jKHpvbmUp
OworCisKKy8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05FX0ZSRUU6IGZyZWUgZWxlbWVudCBmcm9t
IHRoZSB6b25lICovCisjZGVmaW5lIFNDVFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQpIHsgXAor
CWZyZWUoZWxlbWVudCk7ICBcCit9CisKKyNkZWZpbmUgU0NUUF9aT05FX0RFU1RST1koem9uZSkK
KyNlbHNlCisvKl9fVXNlcnNwYWNlX18KKyAgQ29tcGlsaW5nICYgbGlua2luZyBub3RlczogTmVl
ZHMgbGlidW1lbSwgd2hpY2ggaGFzIGJlZW4gcGxhY2VkIGluIC4vdXNlcl9saWIKKyAgQWxsIHVz
ZXJzcGFjZSBoZWFkZXIgZmlsZXMgYXJlIGluIC4vdXNlcl9pbmNsdWRlLiBNYWtlZmlsZSB3aWxs
IG5lZWQgdGhlCisgIGZvbGxvd2luZy4KKyAgQ0ZMQUdTID0gLUkuLyAtV2FsbAorICBMREZMQUdT
ID0gLUwuL3VzZXJfbGliIC1SLi91c2VyX2xpYiAtbHVtZW0KKyovCisjaW5jbHVkZSAidXNlcl9p
bmNsdWRlL3VtZW0uaCIKKworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfSU5JVDogaW5pdGlh
bGl6ZSB0aGUgem9uZSAqLworLyoKKyAgX19Vc2Vyc3BhY2VfXworICBObyBlcXVpdmFsZW50IGZ1
bmN0aW9uIHRvIHVtYV96b25lX3NldF9tYXggYWRkZWQgeWV0LiAoU2VlIFNDVFBfWk9ORV9JTklU
IGluIHNjdHBfb3NfYnNkLmgKKyAgZm9yIHJlZmVyZW5jZSkuIEl0IG1heSBub3QgYmUgcmVxdWly
ZWQgYXMgbWVudGlvbmVkIGluCisgIGh0dHA6Ly9uaXhkb2MubmV0L21hbi1wYWdlcy9GcmVlQlNE
L3VtYV96YWxsb2MuOS5odG1sIHRoYXQKKyAgbWF4IGxpbWl0cyBtYXkgbm90IGVuZm9yY2VkIG9u
IHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4KKyovCisjZGVmaW5lIFNDVFBfWk9ORV9J
TklUKHpvbmUsIG5hbWUsIHNpemUsIG51bWJlcikgeyBcCisJem9uZSA9IHVtZW1fY2FjaGVfY3Jl
YXRlKG5hbWUsIHNpemUsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIDApOyBcCisg
IH0KKworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfR0VUOiBhbGxvY2F0ZSBlbGVtZW50IGZy
b20gdGhlIHpvbmUgKi8KKyNkZWZpbmUgU0NUUF9aT05FX0dFVCh6b25lLCB0eXBlKSBcCisgICAg
ICAgICh0eXBlICopdW1lbV9jYWNoZV9hbGxvYyh6b25lLCBVTUVNX0RFRkFVTFQpOworCisKKy8q
IF9fVXNlcnNwYWNlX18gU0NUUF9aT05FX0ZSRUU6IGZyZWUgZWxlbWVudCBmcm9tIHRoZSB6b25l
ICovCisjZGVmaW5lIFNDVFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQpIFwKKwl1bWVtX2NhY2hl
X2ZyZWUoem9uZSwgZWxlbWVudCk7CisKKworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfREVT
VFJPWTogZGVzdHJveSB0aGUgem9uZSAqLworI2RlZmluZSBTQ1RQX1pPTkVfREVTVFJPWSh6b25l
KSBcCisJdW1lbV9jYWNoZV9kZXN0cm95KHpvbmUpOworI2VuZGlmCisKKy8qCisgKiBfX1VzZXJz
cGFjZV9fIERlZmluaW5nIHNjdHBfaGFzaGluaXRfZmxhZ3MoKSBhbmQgc2N0cF9oYXNoZGVzdHJv
eSgpIGZvciB1c2VybGFuZC4KKyAqLwordm9pZCAqc2N0cF9oYXNoaW5pdF9mbGFncyhpbnQgZWxl
bWVudHMsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdV9s
b25nICpoYXNobWFzaywgaW50IGZsYWdzKTsKK3ZvaWQKK3NjdHBfaGFzaGRlc3Ryb3kodm9pZCAq
dmhhc2h0YmwsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKTsKKwor
dm9pZAorc2N0cF9oYXNoZnJlZWRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2Nf
dHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKTsKKworCisjZGVmaW5lIEhBU0hfTk9XQUlUIDB4
MDAwMDAwMDEKKyNkZWZpbmUgSEFTSF9XQUlUT0sgMHgwMDAwMDAwMgorCisvKiBNX1BDQiBpcyBN
QUxMT0NfREVDTEFSRSdkIGluIHN5cy9zb2NrZXR2YXIuaCAqLworI2RlZmluZSBTQ1RQX0hBU0hf
SU5JVChzaXplLCBoYXNobWFyaykgc2N0cF9oYXNoaW5pdF9mbGFncyhzaXplLCBNX1BDQiwgaGFz
aG1hcmssIEhBU0hfTk9XQUlUKQorCisjZGVmaW5lIFNDVFBfSEFTSF9GUkVFKHRhYmxlLCBoYXNo
bWFyaykgc2N0cF9oYXNoZGVzdHJveSh0YWJsZSwgTV9QQ0IsIGhhc2htYXJrKQorCisjZGVmaW5l
IFNDVFBfSEFTSF9GUkVFX0RFU1RST1kodGFibGUsIGhhc2htYXJrKSAgc2N0cF9oYXNoZnJlZWRl
c3Ryb3kodGFibGUsIE1fUENCLCBoYXNobWFyaykKKyNkZWZpbmUgU0NUUF9NX0NPUFlNCW1fY29w
eW0KKworLyoKKyAqIHRpbWVycworICovCisvKiBfX1VzZXJzcGFjZV9fCisgKiB1c2VyX3NjdHBf
Y2FsbG91dC5oIGhhcyB0eXBlZGVmIHN0cnVjdCBzY3RwX2NhbGxvdXQgc2N0cF9vc190aW1lcl90
OworICogd2hpY2ggaXMgdXNlZCBpbiB0aGUgdGltZXIgcmVsYXRlZCBmdW5jdGlvbnMgc3VjaCBh
cworICogU0NUUF9PU19USU1FUl9JTklUIGV0Yy4KKyovCisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2NhbGxvdXQuaD4KKworLyogX19Vc2Vyc3BhY2VfXyBDcmVhdGluZyBhIHJlY2VpdmUgdGhyZWFk
ICovCisjaW5jbHVkZSA8dXNlcl9yZWN2X3RocmVhZC5oPgorCisvKl9fVXNlcnNwYWNlX18gZGVm
aW5pbmcgS1RSX1NVQlNZUyAxIGFzIGRvbmUgaW4gc2N0cF9vc19tYWNvc3guaCAqLworI2RlZmlu
ZSBLVFJfU1VCU1lTIDEKKworLyogVGhlIHBhY2tlZCBkZWZpbmUgZm9yIDY0IGJpdCBwbGF0Zm9y
bXMgKi8KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBTQ1RQ
X1BBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBTQ1RQX1VOVVNFRCBfX2F0
dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9QQUNLRUQKKyNkZWZpbmUg
U0NUUF9VTlVTRUQKKyNlbmRpZgorCisvKgorICogRnVuY3Rpb25zCisgKi8KKy8qIE1idWYgbWFu
aXB1bGF0aW9uIGFuZCBhY2Nlc3MgbWFjcm9zICAqLworI2RlZmluZSBTQ1RQX0JVRl9MRU4obSkg
KG0tPm1fbGVuKQorI2RlZmluZSBTQ1RQX0JVRl9ORVhUKG0pIChtLT5tX25leHQpCisjZGVmaW5l
IFNDVFBfQlVGX05FWFRfUEtUKG0pIChtLT5tX25leHRwa3QpCisjZGVmaW5lIFNDVFBfQlVGX1JF
U1ZfVUYobSwgc2l6ZSkgbS0+bV9kYXRhICs9IHNpemUKKyNkZWZpbmUgU0NUUF9CVUZfQVQobSwg
c2l6ZSkgbS0+bV9kYXRhICsgc2l6ZQorI2RlZmluZSBTQ1RQX0JVRl9JU19FWFRFTkRFRChtKSAo
bS0+bV9mbGFncyAmIE1fRVhUKQorI2RlZmluZSBTQ1RQX0JVRl9FWFRFTkRfU0laRShtKSAobS0+
bV9leHQuZXh0X3NpemUpCisjZGVmaW5lIFNDVFBfQlVGX1RZUEUobSkgKG0tPm1fdHlwZSkKKyNk
ZWZpbmUgU0NUUF9CVUZfUkVDVklGKG0pIChtLT5tX3BrdGhkci5yY3ZpZikKKyNkZWZpbmUgU0NU
UF9CVUZfUFJFUEVORAlNX1BSRVBFTkQKKworI2RlZmluZSBTQ1RQX0FMSUdOX1RPX0VORChtLCBs
ZW4pIGlmKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikgeyBcCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTUhfQUxJR04obSwgbGVuKTsgXAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG0tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCkgeyBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9BTElHTihtLCBsZW4pOyBcCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisvKiBXZSBtYWtlIGl0IHNvIGlm
IHlvdSBoYXZlIHVwIHRvIDQgdGhyZWFkcworICogd3JpdHRpbmcgYmFzZWQgb24gdGhlIGRlZmF1
bHQgc2l6ZSBvZgorICogdGhlIHBhY2tldCBsb2cgNjUgaywgdGhhdCB3b3VsZCBiZQorICogNCAx
NmsgcGFja2V0cyBiZWZvcmUgd2Ugd291bGQgaGl0CisgKiBhIHByb2JsZW0uCisgKi8KKyNkZWZp
bmUgU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0sgMworCisKKy8qCisgKiByb3V0ZXMsIG91
dHB1dCwgZXRjLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNjdHBfcm91dGUJc2N0cF9yb3V0ZV90
OwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9ydGVudHJ5CXNjdHBfcnRlbnRyeV90OworCitzdGF0aWMg
aW5saW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRhbGxvYyhzY3RwX3JvdXRlX3QgKnJvKQorewor
CWlmIChyby0+cm9fcnQgIT0gTlVMTCkgeworCQlyby0+cm9fcnQtPnJ0X3JlZmNudCsrOworCQly
ZXR1cm47CisJfQorCisJcm8tPnJvX3J0ID0gKHNjdHBfcnRlbnRyeV90ICopIG1hbGxvYyhzaXpl
b2Yoc2N0cF9ydGVudHJ5X3QpKTsKKwlpZiAocm8tPnJvX3J0ID09IE5VTEwpCisJCXJldHVybjsK
KworCS8qIGluaXRpYWxpemUgKi8KKwltZW1zZXQocm8tPnJvX3J0LCAwLCBzaXplb2Yoc2N0cF9y
dGVudHJ5X3QpKTsKKwlyby0+cm9fcnQtPnJ0X3JlZmNudCA9IDE7CisKKwkvKiBzZXQgTVRVICov
CisJLyogVE9ETyBzZXQgdGhpcyBiYXNlZCBvbiB0aGUgcm8tPnJvX2RzdCwgbG9va2luZyB1cCBN
VFUgd2l0aCByb3V0aW5nIHNvY2tldCAqLworI2lmIDAKKwlpZiAodXNlcnNwYWNlX3Jhd3JvdXRl
ID09IC0xKSB7CisJCXVzZXJzcGFjZV9yYXdyb3V0ZSA9IHNvY2tldChBRl9ST1VURSwgU09DS19S
QVcsIDApOworCQlpZiAodXNlcnNwYWNlX3Jhd3JvdXRlID09IC0xKQorCQkJcmV0dXJuOworCX0K
KyNlbmRpZgorCXJvLT5yb19ydC0+cnRfcm14LnJteF9tdHUgPSAxNTAwOyAvKiBGSVhNRSB0ZW1w
b3Jhcnkgc29sdXRpb24gKi8KKworCS8qIFRPRE8gZW5hYmxlIHRoZSBhYmlsaXR5IHRvIG9idGFp
biBpbnRlcmZhY2UgaW5kZXggb2Ygcm91dGUgZm9yCisJICogIFNDVFBfR0VUX0lGX0lOREVYX0ZS
T01fUk9VVEUgbWFjcm8uCisJICovCit9CisjZGVmaW5lIFNDVFBfUlRBTExPQyhybywgdnJmX2lk
LCBmaWJudW0pIHNjdHBfdXNlcnNwYWNlX3J0YWxsb2MoKHNjdHBfcm91dGVfdCAqKXJvKQorCisv
KiBkdW1teSBydGZyZWUgbmVlZGVkIG9uY2UgdXNlcl9yb3V0ZS5oIGlzIGluY2x1ZGVkICovCitz
dGF0aWMgaW5saW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRmcmVlKHNjdHBfcnRlbnRyeV90ICpy
dCkKK3sKKwlpZihydCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJaWYoLS1ydC0+cnRfcmVm
Y250ID4gMCkgeworCQlyZXR1cm47CisJfQorCWZyZWUocnQpOworCXJ0ID0gTlVMTDsKK30KKyNk
ZWZpbmUgcnRmcmVlKGFyZzEpIHNjdHBfdXNlcnNwYWNlX3J0ZnJlZShhcmcxKQorCisKKy8qKioq
KioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBNVFUgICAgICAgICAgICAgICovCisvKioq
KioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21f
aWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpOworCisjZGVmaW5lIFNDVFBfR0FUSEVSX01U
VV9GUk9NX0lGTl9JTkZPKGlmbiwgaWZuX2luZGV4LCBhZikgc2N0cF91c2Vyc3BhY2VfZ2V0X210
dV9mcm9tX2lmbihpZm5faW5kZXgsIGFmKQorCisjZGVmaW5lIFNDVFBfR0FUSEVSX01UVV9GUk9N
X1JPVVRFKHNjdHBfaWZhLCBzYSwgcnQpICgocnQgIT0gTlVMTCkgPyBydC0+cnRfcm14LnJteF9t
dHUgOiAwKQorCisjZGVmaW5lIFNDVFBfR0FUSEVSX01UVV9GUk9NX0lOVEZDKHNjdHBfaWZuKSAg
c2N0cF91c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbihpZl9uYW1ldG9pbmRleCgoKHN0cnVjdCBp
ZmFkZHJzICopIChzY3RwX2lmbikpLT5pZmFfbmFtZSksIEFGX0lORVQpCisKKyNkZWZpbmUgU0NU
UF9TRVRfTVRVX09GX1JPVVRFKHNhLCBydCwgbXR1KSBkbyB7IFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnQgIT0gTlVMTCkgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0LT5ydF9ybXgucm14X210
dSA9IG10dTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g
d2hpbGUoMCkKKworLyogKGRlLSlyZWdpc3RlciBpbnRlcmZhY2UgZXZlbnQgbm90aWZpY2F0aW9u
cyAqLworI2RlZmluZSBTQ1RQX1JFR0lTVEVSX0lOVEVSRkFDRShpZmhhbmRsZSwgYWYpCisjZGVm
aW5lIFNDVFBfREVSRUdJU1RFUl9JTlRFUkZBQ0UoaWZoYW5kbGUsIGFmKQorCisKKy8qKioqKioq
KioqKioqKioqKioqKioqKioqLworLyogVGhlc2UgYXJlIGZvciBsb2dnaW5nICovCisvKioqKioq
KioqKioqKioqKioqKioqKioqKi8KKy8qIHJldHVybiB0aGUgYmFzZSBleHQgZGF0YSBwb2ludGVy
ICovCisjZGVmaW5lIFNDVFBfQlVGX0VYVEVORF9CQVNFKG0pIChtLT5tX2V4dC5leHRfYnVmKQor
IC8qIHJldHVybiB0aGUgcmVmY250IG9mIHRoZSBkYXRhIHBvaW50ZXIgKi8KKyNkZWZpbmUgU0NU
UF9CVUZfRVhURU5EX1JFRkNOVChtKSAoKm0tPm1fZXh0LnJlZl9jbnQpCisvKiByZXR1cm4gYW55
IGJ1ZmZlciByZWxhdGVkIGZsYWdzLCB0aGlzIGlzCisgKiB1c2VkIGJleW9uZCBsb2dnaW5nIGZv
ciBhcHBsZSBvbmx5LgorICovCisjZGVmaW5lIFNDVFBfQlVGX0dFVF9GTEFHUyhtKSAobS0+bV9m
bGFncykKKworLyogRm9yIEJTRCB0aGlzIGp1c3QgYWNjZXNzZXMgdGhlIE1fUEtUSERSIGxlbmd0
aAorICogc28gaXQgb3BlcmF0ZXMgb24gYW4gbWJ1ZiB3aXRoIGhkciBmbGFnLiBPdGhlcgorICog
Ty9TJ3MgbWF5IGhhdmUgc2VwZXJhdGUgcGFja2V0IGhlYWRlciBhbmQgbWJ1ZgorICogY2hhaW4g
cG9pbnRlcnMuLiB0aHVzIHRoZSBtYWNyby4KKyAqLworI2RlZmluZSBTQ1RQX0hFQURFUl9UT19D
SEFJTihtKSAobSkKKyNkZWZpbmUgU0NUUF9ERVRBQ0hfSEVBREVSX0ZST01fQ0hBSU4obSkKKyNk
ZWZpbmUgU0NUUF9IRUFERVJfTEVOKG0pICgobSktPm1fcGt0aGRyLmxlbikKKyNkZWZpbmUgU0NU
UF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspIDAKKyNkZWZpbmUgU0NUUF9SRUxFQVNFX0hF
QURFUihtKQorI2RlZmluZSBTQ1RQX1JFTEVBU0VfUEtUKG0pCXNjdHBfbV9mcmVlbShtKQorCisj
ZGVmaW5lIFNDVFBfR0VUX1BLVF9WUkZJRChtLCB2cmZfaWQpICAoKHZyZl9pZCA9IFNDVFBfREVG
QVVMVF9WUkZJRCkgIT0gU0NUUF9ERUZBVUxUX1ZSRklEKQorCisKKworLyogQXR0YWNoIHRoZSBj
aGFpbiBvZiBkYXRhIGludG8gdGhlIHNlbmRhYmxlIHBhY2tldC4gKi8KKyNkZWZpbmUgU0NUUF9B
VFRBQ0hfQ0hBSU4ocGFrLCBtLCBwYWNrZXRfbGVuZ3RoKSBkbyB7IFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFrID0gbTsgXAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWstPm1fcGt0aGRyLmxl
biA9IHBhY2tldF9sZW5ndGg7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgw
KQorCisvKiBPdGhlciBtX3BrdGhkciB0eXBlIHRoaW5ncyAqLworLyogRklYTUUgbmVlZCByZWFs
IGRlZmluaXRpb25zICovCisjZGVmaW5lIFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdCwgbSkgMAor
LyogT09UQiBvbmx5ICNkZWZpbmUgU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LCBtKSAoKG0tPm1f
ZmxhZ3MgJiBNX1BLVEhEUikgPyBpbl9icm9hZGNhc3QoZHN0LCBtLT5tX3BrdGhkci5yY3ZpZikg
OiAwKSAgQlNEIGRlZiAqLworI2RlZmluZSBTQ1RQX0lTX0lUX0xPT1BCQUNLKG0pIDAKKy8qIE9P
VEIgT05MWSAjZGVmaW5lIFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkgKChtLT5tX2ZsYWdzICYgTV9Q
S1RIRFIpICYmICgobS0+bV9wa3RoZHIucmN2aWYgPT0gTlVMTCkgfHwgKG0tPm1fcGt0aGRyLnJj
dmlmLT5pZl90eXBlID09IElGVF9MT09QKSkpICBCU0QgZGVmICovCisKKworLyogVGhpcyBjb252
ZXJ0cyBhbnkgaW5wdXQgcGFja2V0IGhlYWRlcgorICogaW50byB0aGUgY2hhaW4gb2YgZGF0YSBo
b2xkZXJzLCBmb3IgQlNECisgKiBpdHMgYSBOT1AuCisgKi8KKworLyogZ2V0IHRoZSB2NiBob3Ag
bGltaXQgKi8KKyNkZWZpbmUgU0NUUF9HRVRfSExJTShpbnAsIHJvKSAxMjggLyogQXMgZG9uZSBm
b3IgX19XaW5kb3dzX18gKi8KKyNkZWZpbmUgSVB2Nl9IT1BfTElNSVQgMTI4CisKKy8qIGlzIHRo
ZSBlbmRwb2ludCB2Nm9ubHk/ICovCisjZGVmaW5lIFNDVFBfSVBWNl9WNk9OTFkoaW5wKQkoKChz
dHJ1Y3QgaW5wY2IgKilpbnApLT5pbnBfZmxhZ3MgJiBJTjZQX0lQVjZfVjZPTkxZKQorLyogaXMg
dGhlIHNvY2tldCBub24tYmxvY2tpbmc/ICovCisjZGVmaW5lIFNDVFBfU09fSVNfTkJJTyhzbykJ
KChzbyktPnNvX3N0YXRlICYgU1NfTkJJTykKKyNkZWZpbmUgU0NUUF9TRVRfU09fTkJJTyhzbykJ
KChzbyktPnNvX3N0YXRlIHw9IFNTX05CSU8pCisjZGVmaW5lIFNDVFBfQ0xFQVJfU09fTkJJTyhz
bykJKChzbyktPnNvX3N0YXRlICY9IH5TU19OQklPKQorLyogZ2V0IHRoZSBzb2NrZXQgdHlwZSAq
LworI2RlZmluZSBTQ1RQX1NPX1RZUEUoc28pCSgoc28pLT5zb190eXBlKQorCisvKiByZXNlcnZl
IHNiIHNwYWNlIGZvciBhIHNvY2tldCAqLworI2RlZmluZSBTQ1RQX1NPUkVTRVJWRShzbywgc2Vu
ZCwgcmVjdikJc29yZXNlcnZlKHNvLCBzZW5kLCByZWN2KQorCisvKiB3YWtldXAgYSBzb2NrZXQg
Ki8KKyNkZWZpbmUgU0NUUF9TT1dBS0VVUChzbykJd2FrZXVwKCYoc28pLT5zb190aW1lbywgc28p
CisvKiBjbGVhciB0aGUgc29ja2V0IGJ1ZmZlciBzdGF0ZSAqLworI2RlZmluZSBTQ1RQX1NCX0NM
RUFSKHNiKQlcCisJKHNiKS5zYl9jYyA9IDA7CQlcCisJKHNiKS5zYl9tYiA9IE5VTEw7CVwKKwko
c2IpLnNiX21iY250ID0gMDsKKworI2RlZmluZSBTQ1RQX1NCX0xJTUlUX1JDVihzbykgc28tPnNv
X3Jjdi5zYl9oaXdhdAorI2RlZmluZSBTQ1RQX1NCX0xJTUlUX1NORChzbykgc28tPnNvX3NuZC5z
Yl9oaXdhdAorCisjZGVmaW5lIFNDVFBfUkVBRF9SQU5ET00oYnVmLCBsZW4pCXJlYWRfcmFuZG9t
KGJ1ZiwgbGVuKQorCisjZGVmaW5lIFNDVFBfU0hBMV9DVFgJCXN0cnVjdCBzY3RwX3NoYTFfY29u
dGV4dAorI2RlZmluZSBTQ1RQX1NIQTFfSU5JVAkJc2N0cF9zaGExX2luaXQKKyNkZWZpbmUgU0NU
UF9TSEExX1VQREFURQlzY3RwX3NoYTFfdXBkYXRlCisjZGVmaW5lIFNDVFBfU0hBMV9GSU5BTCh4
LHkpCXNjdHBfc2hhMV9maW5hbCgodW5zaWduZWQgY2hhciAqKXgsIHkpCisKKy8qIHN0YXJ0IE9P
VEIgb25seSBzdHVmZiAqLworLyogVE9ETyBJRlRfTE9PUCBpcyBpbiBuZXQvaWZfdHlwZXMuaCBv
biBMaW51eCAqLworI2RlZmluZSBJRlRfTE9PUCAweDE4CisKKy8qIHNjdHBfcGNiLmggKi8KKwor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNkZWZpbmUgU0hVVF9SRCAxCisj
ZGVmaW5lIFNIVVRfV1IgMgorI2RlZmluZSBTSFVUX1JEV1IgMworI2VuZGlmCisjZGVmaW5lIFBS
VV9GTFVTSF9SRCBTSFVUX1JECisjZGVmaW5lIFBSVV9GTFVTSF9XUiBTSFVUX1dSCisjZGVmaW5l
IFBSVV9GTFVTSF9SRFdSIFNIVVRfUkRXUgorCisvKiBuZXRpbmV0L2lwX3Zhci5oIGRlZmludGlv
bnMgYXJlIGJlaGluZCBhbiBpZiBkZWZpbmVkIGZvciBfS0VSTkVMIG9uIEZyZWVCU0QgKi8KKyNk
ZWZpbmUJSVBfUkFXT1VUUFVUCQkweDIKKworCisvKiBlbmQgT09UQiBvbmx5IHN0dWZmICovCisK
KyNkZWZpbmUgQUZfQ09OTiAxMjMKK3N0cnVjdCBzb2NrYWRkcl9jb25uIHsKKyNpZmRlZiBIQVZF
X1NDT05OX0xFTgorCXVpbnQ4X3Qgc2Nvbm5fbGVuOworCXVpbnQ4X3Qgc2Nvbm5fZmFtaWx5Owor
I2Vsc2UKKwl1aW50MTZfdCBzY29ubl9mYW1pbHk7CisjZW5kaWYKKwl1aW50MTZfdCBzY29ubl9w
b3J0OworCXZvaWQgKnNjb25uX2FkZHI7Cit9OworCit0eXBlZGVmIHZvaWQgKigqc3RhcnRfcm91
dGluZV90KSh2b2lkICopOworCitleHRlcm4gaW50CitzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3Jl
YXRlKHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0
aW5lKTsKKwordm9pZAorc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoY29uc3QgY2hhciAq
bmFtZSk7CisKKy8qCisgKiBTQ1RQIHByb3RvY29sIHNwZWNpZmljIG1idWYgZmxhZ3MuCisgKi8K
KyNkZWZpbmUJTV9OT1RJRklDQVRJT04JCU1fUFJPVE81CS8qIFNDVFAgbm90aWZpY2F0aW9uICov
CisKKy8qCisgKiBJUCBvdXRwdXQgcm91dGluZXMKKyAqLworCisvKiBEZWZpbmluZyBTQ1RQX0lQ
X0lEIG1hY3JvLgorICAgSW4gbmV0aW5ldC9pcF9vdXRwdXQuYywgd2UgaGF2ZSB1X3Nob3J0IGlw
X2lkOworICAgSW4gbmV0aW5ldC9pcF92YXIuaCwgd2UgaGF2ZSBleHRlcm4gdV9zaG9ydAlpcF9p
ZDsgKGVuY2xvc2VkIHdpdGhpbiBfS0VSTkVMXykKKyAgIFNlZSBzdGF0aWMgX19pbmxpbmUgdWlu
dDE2X3QgaXBfbmV3aWQodm9pZCkgaW4gbmV0aW5ldC9pcF92YXIuaAorICovCisjZGVmaW5lIFND
VFBfSVBfSUQoaW5wKSAoaXBfaWQpCisKKy8qIG5lZWQgc2N0cGhkciB0byBnZXQgcG9ydCBpbiBT
Q1RQX0lQX09VVFBVVC4gc2N0cGhkciBkZWZpbmVkIGluIHNjdHAuaCAgKi8KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHAuaD4KK2V4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwX291dHB1dChpbnQg
KnJlc3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjdHBfcm91dGVfdCAqcm8sIHZvaWQgKnN0Y2IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKTsKKworI2RlZmluZSBTQ1RQX0lQ
X09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgc3RjYiwgdnJmX2lkKSBzY3RwX3VzZXJzcGFjZV9p
cF9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOworCisjaWYgZGVmaW5l
ZChJTkVUNikKK2V4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQoaW50ICpyZXN1
bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0Y2IsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCk7CisjZGVmaW5lIFNDVFBfSVA2
X09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgaWZwLCBzdGNiLCB2cmZfaWQpIHNjdHBfdXNlcnNw
YWNlX2lwNl9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOworI2VuZGlm
CisKKworCisjaWYgMAorI2RlZmluZSBTQ1RQX0lQNl9PVVRQVVQocmVzdWx0LCBvX3Bhaywgcm8s
IGlmcCwgc3RjYiwgdnJmX2lkKSBcCit7IFwKKwlpZiAoc3RjYiAmJiBzdGNiLT5zY3RwX2VwKSBc
CisJCXJlc3VsdCA9IGlwNl9vdXRwdXQob19wYWssIFwKKwkJCQkgICAgKChzdHJ1Y3QgaW42cGNi
ICopKHN0Y2ItPnNjdHBfZXApKS0+aW42cF9vdXRwdXRvcHRzLCBcCisJCQkJICAgIChybyksIDAs
IDAsIGlmcCwgTlVMTCk7IFwKKwllbHNlIFwKKwkJcmVzdWx0ID0gaXA2X291dHB1dChvX3Bhaywg
TlVMTCwgKHJvKSwgMCwgMCwgaWZwLCBOVUxMKTsgXAorfQorI2VuZGlmCisKK3N0cnVjdCBtYnVm
ICoKK3NjdHBfZ2V0X21idWZfZm9yX21zZyh1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkLCBpbnQg
d2FudF9oZWFkZXIsIGludCBob3csIGludCBhbGxvbmVidWYsIGludCB0eXBlKTsKKworCisvKiB3
aXRoIHRoZSBjdXJyZW50IGluY2x1ZGVkIGZpbGVzLCB0aGlzIGlzIGRlZmluZWQgaW4gTGludXgg
YnV0CisgKiAgaW4gRnJlZUJTRCwgaXQgaXMgYmVoaW5kIGEgX0tFUk5FTCBpbiBzeXMvc29ja2V0
LmggLi4uCisgKi8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RyYWdvbkZseSkgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09w
ZW5CU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKKy8qIHN0b2xlbiBmcm9tIC91
c3IvaW5jbHVkZS9zeXMvc29ja2V0LmggKi8KKyNkZWZpbmUgQ01TR19BTElHTihuKSAgIF9BTElH
TihuKQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCisjZGVmaW5lIENNU0df
QUxJR04obikgICAoKChuKSArIF9fQUxJR05CWVRFUykgJiB+X19BTElHTkJZVEVTKQorI2VsaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisjaWYgIWRlZmluZWQoX19EQVJXSU5fQUxJ
R05CWVRFUykKKyNkZWZpbmUJX19EQVJXSU5fQUxJR05CWVRFUwkoc2l6ZW9mKF9fZGFyd2luX3Np
emVfdCkgLSAxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTikKKyNkZWZp
bmUJX19EQVJXSU5fQUxJR04ocCkJKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJf
dCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVTKSAmfiBfX0RBUldJTl9BTElHTkJZVEVTKQorI2Vu
ZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTkJZVEVTMzIpCisjZGVmaW5lIF9fREFS
V0lOX0FMSUdOQllURVMzMiAgICAgKHNpemVvZihfX3VpbnQzMl90KSAtIDEpCisjZW5kaWYKKwor
I2lmICFkZWZpbmVkKF9fREFSV0lOX0FMSUdOMzIpCisjZGVmaW5lIF9fREFSV0lOX0FMSUdOMzIo
cCkgICAgICAgKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RB
UldJTl9BTElHTkJZVEVTMzIpICZ+IF9fREFSV0lOX0FMSUdOQllURVMzMikKKyNlbmRpZgorI2Rl
ZmluZSBDTVNHX0FMSUdOKG4pICAgX19EQVJXSU5fQUxJR04zMihuKQorI2VuZGlmCisjZGVmaW5l
IElfQU1fSEVSRSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJCQlTQ1RQX1BSSU5URigiJXM6
JWQgYXQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyAsIF9fZnVuY19fKTsgXAorCQl9IHdoaWxl
ICgwKQorCisjaWZuZGVmIHRpbWV2YWxzdWIKKyNkZWZpbmUgdGltZXZhbHN1Yih0cDEsIHRwMikg
ICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorCQkodHAxKS0+dHZfc2VjIC09ICh0cDIpLT50dl9zZWM7ICAgIFwKKwkJ
KHRwMSktPnR2X3VzZWMgLT0gKHRwMiktPnR2X3VzZWM7ICBcCisJCWlmICgodHAxKS0+dHZfdXNl
YyA8IDApIHsgICAgICAgICAgXAorCQkJKHRwMSktPnR2X3NlYy0tOyAgICAgICAgICAgXAorCQkJ
KHRwMSktPnR2X3VzZWMgKz0gMTAwMDAwMDsgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0xpbnV4KQorI2lmICFkZWZpbmVkKFRBSUxRX0ZPUkVBQ0hfU0FGRSkKKyNkZWZpbmUg
VEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpICAgICAgICAgICAgIFwK
KyAgICAgICAgIGZvciAoKHZhcikgPSAoKGhlYWQpLT50cWhfZmlyc3QpOyAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IFRBSUxRX05FWFQoKHZh
ciksIGZpZWxkKSwgMSk7IFwKKyAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCisjZW5kaWYK
KyNpZiAhZGVmaW5lZChMSVNUX0ZPUkVBQ0hfU0FGRSkKKyNkZWZpbmUgTElTVF9GT1JFQUNIX1NB
RkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikgICAgICAgICAgICAgIFwKKyAgICAgICAgIGZvciAo
KHZhcikgPSAoKGhlYWQpLT5saF9maXJzdCk7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IExJU1RfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsg
IFwKKyAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCisjZW5kaWYKKyNlbmRpZgorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQorI2RlZmluZSBUQUlMUV9GT1JFQUNIX1NB
RkUgVEFJTFFfRk9SRUFDSF9NVVRBQkxFCisjZGVmaW5lIExJU1RfRk9SRUFDSF9TQUZFIExJU1Rf
Rk9SRUFDSF9NVVRBQkxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFD
bCkKKyNkZWZpbmUJdGltZXJjbXAodHZwLCB1dnAsIGNtcCkJCQkJCQlcCisJKCgodHZwKS0+dHZf
c2VjID09ICh1dnApLT50dl9zZWMpID8JCQkJXAorCSAgICAoKHR2cCktPnR2X3VzZWMgY21wICh1
dnApLT50dl91c2VjKSA6CQkJXAorCSAgICAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3Nl
YykpCisjZW5kaWYKKworI2RlZmluZSBTQ1RQX0lTX0xJU1RFTklORyhpbnApICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQUNDRVBUSU5HKSAhPSAwKQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5jIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0
MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZTI5YTcyN2ZhZGQ5YTRlYjJmMWU5ZjQ2YzYxNTU3
NjQwMDBhYmU1NSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
b3V0cHV0LmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMK
QEAgLTAsMCArMSwxNDk5OSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3Rl
bXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX291dHB1dC5jIDMzNTE3OSAyMDE4
LTA2LTE0IDIxOjMwOjUyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfb3MuaD4KKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9wcm9jLmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlv
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aW5wdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0xpbnV4KQorI2RlZmluZSBfX0ZBVk9SX0JTRCAgICAvKiAob24gVWJ1bnR1
IGF0IGxlYXN0KSBlbmFibGVzIFVEUCBoZWFkZXIgZmllbGQgbmFtZXMgbGlrZSBCU0QgaW4gUkZD
IDc2OCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorI2lm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAu
aD4KKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaW5jbHVkZSA8bmV0
aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKyNpbmNsdWRlIDxu
ZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hY2hpbmUvaW5fY2tzdW0uaD4K
KyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgZGVmaW5lZChJTkVUNikKKyNp
bmNsdWRlIDxuZXRpbmV0Ni9zY3RwNl92YXIuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gMworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKyNpZiAhKGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9T
Tk9XTEVPUEFSRCkpCisjZGVmaW5lIFNDVFBfTUFYX0xJTktIRFIgMTYKKyNlbmRpZgorI2VuZGlm
CisKKyNkZWZpbmUgU0NUUF9NQVhfR0FQU19JTkFSUkFZIDQKK3N0cnVjdCBzYWNrX3RyYWNrIHsK
Kwl1aW50OF90IHJpZ2h0X2VkZ2U7CS8qIG1lcmdhYmxlIG9uIHRoZSByaWdodCBlZGdlICovCisJ
dWludDhfdCBsZWZ0X2VkZ2U7CS8qIG1lcmdhYmxlIG9uIHRoZSBsZWZ0IGVkZ2UgKi8KKwl1aW50
OF90IG51bV9lbnRyaWVzOworCXVpbnQ4X3Qgc3BhcmU7CisJc3RydWN0IHNjdHBfZ2FwX2Fja19i
bG9jayBnYXBzW1NDVFBfTUFYX0dBUFNfSU5BUlJBWV07Cit9OworCitjb25zdCBzdHJ1Y3Qgc2Fj
a190cmFjayBzYWNrX2FycmF5WzI1Nl0gPSB7CisJezAsIDAsIDAsIDAsCQkvKiAweDAwICovCisJ
CXt7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDEsIDAsCQkvKiAweDAxICovCisJCXt7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDAyICovCisJCXt7MSwgMX0s
CisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAs
CQkvKiAweDAzICovCisJCXt7MCwgMX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDA0ICovCisJCXt7MiwgMn0sCisJCXswLCAw
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDA1
ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDEsIDAsCQkvKiAweDA2ICovCisJCXt7MSwgMn0sCisJCXswLCAwfSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDA3ICovCisJCXt7
MCwgMn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDEsIDAsCQkvKiAweDA4ICovCisJCXt7MywgM30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDA5ICovCisJCXt7MCwgMH0sCisJ
CXszLCAzfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkv
KiAweDBhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDBiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDBjICov
CisJCXt7MiwgM30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDIsIDAsCQkvKiAweDBkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDBlICovCisJCXt7MSwg
M30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEs
IDAsCQkvKiAweDBmICovCisJCXt7MCwgM30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDEwICovCisJCXt7NCwgNH0sCisJCXsw
LCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAw
eDExICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDEyICovCisJCXt7MSwgMX0sCisJCXs0LCA0fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDEzICovCisJ
CXt7MCwgMX0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDIsIDAsCQkvKiAweDE0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDE1ICovCisJCXt7MCwgMH0s
CisJCXsyLCAyfSwKKwkJezQsIDR9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAs
CQkvKiAweDE2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDE3ICovCisJCXt7MCwgMn0sCisJCXs0LCA0
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDE4
ICovCisJCXt7MywgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDIsIDAsCQkvKiAweDE5ICovCisJCXt7MCwgMH0sCisJCXszLCA0fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDFhICovCisJCXt7
MSwgMX0sCisJCXszLCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDIsIDAsCQkvKiAweDFiICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDFjICovCisJCXt7MiwgNH0sCisJ
CXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkv
KiAweDFkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDFlICovCisJCXt7MSwgNH0sCisJCXswLCAwfSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDFmICov
CisJCXt7MCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDEsIDAsCQkvKiAweDIwICovCisJCXt7NSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDIxICovCisJCXt7MCwg
MH0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIs
IDAsCQkvKiAweDIyICovCisJCXt7MSwgMX0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDIzICovCisJCXt7MCwgMX0sCisJCXs1
LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAw
eDI0ICovCisJCXt7MiwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDI1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJ
ezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDI2ICovCisJ
CXt7MSwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDIsIDAsCQkvKiAweDI3ICovCisJCXt7MCwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDI4ICovCisJCXt7MywgM30s
CisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAs
CQkvKiAweDI5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDJhICovCisJCXt7MSwgMX0sCisJCXszLCAz
fSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDJi
ICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDIsIDAsCQkvKiAweDJjICovCisJCXt7MiwgM30sCisJCXs1LCA1fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDJkICovCisJCXt7
MCwgMH0sCisJCXsyLCAzfSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDIsIDAsCQkvKiAweDJlICovCisJCXt7MSwgM30sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDJmICovCisJCXt7MCwgM30sCisJ
CXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkv
KiAweDMwICovCisJCXt7NCwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDMxICovCisJCXt7MCwgMH0sCisJCXs0LCA1fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDMyICov
CisJCXt7MSwgMX0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDIsIDAsCQkvKiAweDMzICovCisJCXt7MCwgMX0sCisJCXs0LCA1fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDM0ICovCisJCXt7Miwg
Mn0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMs
IDAsCQkvKiAweDM1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDV9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDM2ICovCisJCXt7MSwgMn0sCisJCXs0
LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAw
eDM3ICovCisJCXt7MCwgMn0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDM4ICovCisJCXt7MywgNX0sCisJCXswLCAwfSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDM5ICovCisJ
CXt7MCwgMH0sCisJCXszLCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDIsIDAsCQkvKiAweDNhICovCisJCXt7MSwgMX0sCisJCXszLCA1fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDNiICovCisJCXt7MCwgMX0s
CisJCXszLCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAs
CQkvKiAweDNjICovCisJCXt7MiwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDNkICovCisJCXt7MCwgMH0sCisJCXsyLCA1
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDNl
ICovCisJCXt7MSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDEsIDAsCQkvKiAweDNmICovCisJCXt7MCwgNX0sCisJCXswLCAwfSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDQwICovCisJCXt7
NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDIsIDAsCQkvKiAweDQxICovCisJCXt7MCwgMH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQyICovCisJCXt7MSwgMX0sCisJ
CXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkv
KiAweDQzICovCisJCXt7MCwgMX0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQ0ICovCisJCXt7MiwgMn0sCisJCXs2LCA2fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDQ1ICov
CisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDIsIDAsCQkvKiAweDQ2ICovCisJCXt7MSwgMn0sCisJCXs2LCA2fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDQ3ICovCisJCXt7MCwg
Mn0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIs
IDAsCQkvKiAweDQ4ICovCisJCXt7MywgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDQ5ICovCisJCXt7MCwgMH0sCisJCXsz
LCAzfSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAw
eDRhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDRiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJ
ezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDRjICovCisJ
CXt7MiwgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDMsIDAsCQkvKiAweDRkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezYsIDZ9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDRlICovCisJCXt7MSwgM30s
CisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAs
CQkvKiAweDRmICovCisJCXt7MCwgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDUwICovCisJCXt7NCwgNH0sCisJCXs2LCA2
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDUx
ICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDMsIDAsCQkvKiAweDUyICovCisJCXt7MSwgMX0sCisJCXs0LCA0fSwKKwkJezYs
IDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDUzICovCisJCXt7
MCwgMX0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDMsIDAsCQkvKiAweDU0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDQsIDAsCQkvKiAweDU1ICovCisJCXt7MCwgMH0sCisJ
CXsyLCAyfSwKKwkJezQsIDR9LAorCQl7NiwgNn0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkv
KiAweDU2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDU3ICovCisJCXt7MCwgMn0sCisJCXs0LCA0fSwK
KwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDU4ICov
CisJCXt7MywgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDMsIDAsCQkvKiAweDU5ICovCisJCXt7MCwgMH0sCisJCXszLCA0fSwKKwkJezYsIDZ9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDVhICovCisJCXt7MSwg
MX0sCisJCXszLCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMs
IDAsCQkvKiAweDViICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezYsIDZ9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDVjICovCisJCXt7MiwgNH0sCisJCXs2
LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAw
eDVkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDVlICovCisJCXt7MSwgNH0sCisJCXs2LCA2fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDVmICovCisJ
CXt7MCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDEsIDAsCQkvKiAweDYwICovCisJCXt7NSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDYxICovCisJCXt7MCwgMH0s
CisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAs
CQkvKiAweDYyICovCisJCXt7MSwgMX0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDYzICovCisJCXt7MCwgMX0sCisJCXs1LCA2
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDY0
ICovCisJCXt7MiwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDMsIDAsCQkvKiAweDY1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezUs
IDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDY2ICovCisJCXt7
MSwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDIsIDAsCQkvKiAweDY3ICovCisJCXt7MCwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDY4ICovCisJCXt7MywgM30sCisJ
CXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkv
KiAweDY5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDZhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwK
KwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDZiICov
CisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDIsIDAsCQkvKiAweDZjICovCisJCXt7MiwgM30sCisJCXs1LCA2fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDZkICovCisJCXt7MCwg
MH0sCisJCXsyLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIs
IDAsCQkvKiAweDZlICovCisJCXt7MSwgM30sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDZmICovCisJCXt7MCwgM30sCisJCXs1
LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAw
eDcwICovCisJCXt7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDcxICovCisJCXt7MCwgMH0sCisJCXs0LCA2fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDcyICovCisJ
CXt7MSwgMX0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDIsIDAsCQkvKiAweDczICovCisJCXt7MCwgMX0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDc0ICovCisJCXt7MiwgMn0s
CisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAs
CQkvKiAweDc1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDZ9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDc2ICovCisJCXt7MSwgMn0sCisJCXs0LCA2
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDc3
ICovCisJCXt7MCwgMn0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDEsIDAsCQkvKiAweDc4ICovCisJCXt7MywgNn0sCisJCXswLCAwfSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDc5ICovCisJCXt7
MCwgMH0sCisJCXszLCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDIsIDAsCQkvKiAweDdhICovCisJCXt7MSwgMX0sCisJCXszLCA2fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDdiICovCisJCXt7MCwgMX0sCisJ
CXszLCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkv
KiAweDdjICovCisJCXt7MiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDdkICovCisJCXt7MCwgMH0sCisJCXsyLCA2fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDdlICov
CisJCXt7MSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDEsIDAsCQkvKiAweDdmICovCisJCXt7MCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweDgwICovCisJCXt7Nywg
N30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIs
IDAsCQkvKiAweDgxICovCisJCXt7MCwgMH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDgyICovCisJCXt7MSwgMX0sCisJCXs3
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAw
eDgzICovCisJCXt7MCwgMX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDg0ICovCisJCXt7MiwgMn0sCisJCXs3LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDg1ICovCisJ
CXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDEsIDIsIDAsCQkvKiAweDg2ICovCisJCXt7MSwgMn0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweDg3ICovCisJCXt7MCwgMn0s
CisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAs
CQkvKiAweDg4ICovCisJCXt7MywgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDg5ICovCisJCXt7MCwgMH0sCisJCXszLCAz
fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweDhh
ICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDMsIDAsCQkvKiAweDhiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezcs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDhjICovCisJCXt7
MiwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDMsIDAsCQkvKiAweDhkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezcsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDhlICovCisJCXt7MSwgM30sCisJ
CXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkv
KiAweDhmICovCisJCXt7MCwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDkwICovCisJCXt7NCwgNH0sCisJCXs3LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDkxICov
CisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDMsIDAsCQkvKiAweDkyICovCisJCXt7MSwgMX0sCisJCXs0LCA0fSwKKwkJezcsIDd9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDkzICovCisJCXt7MCwg
MX0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMs
IDAsCQkvKiAweDk0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweDk1ICovCisJCXt7MCwgMH0sCisJCXsy
LCAyfSwKKwkJezQsIDR9LAorCQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAw
eDk2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDk3ICovCisJCXt7MCwgMn0sCisJCXs0LCA0fSwKKwkJ
ezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDk4ICovCisJ
CXt7MywgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDMsIDAsCQkvKiAweDk5ICovCisJCXt7MCwgMH0sCisJCXszLCA0fSwKKwkJezcsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweDlhICovCisJCXt7MSwgMX0s
CisJCXszLCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAs
CQkvKiAweDliICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDljICovCisJCXt7MiwgNH0sCisJCXs3LCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDlk
ICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDIsIDAsCQkvKiAweDllICovCisJCXt7MSwgNH0sCisJCXs3LCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweDlmICovCisJCXt7
MCwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDIsIDAsCQkvKiAweGEwICovCisJCXt7NSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGExICovCisJCXt7MCwgMH0sCisJ
CXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkv
KiAweGEyICovCisJCXt7MSwgMX0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGEzICovCisJCXt7MCwgMX0sCisJCXs1LCA1fSwK
KwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGE0ICov
CisJCXt7MiwgMn0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDQsIDAsCQkvKiAweGE1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezUsIDV9
LAorCQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGE2ICovCisJCXt7MSwg
Mn0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMs
IDAsCQkvKiAweGE3ICovCisJCXt7MCwgMn0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGE4ICovCisJCXt7MywgM30sCisJCXs1
LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAw
eGE5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQor
CX0sCisJezAsIDEsIDQsIDAsCQkvKiAweGFhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJ
ezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGFiICovCisJ
CXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0sCisJezAs
IDEsIDMsIDAsCQkvKiAweGFjICovCisJCXt7MiwgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGFkICovCisJCXt7MCwgMH0s
CisJCXsyLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAs
CQkvKiAweGFlICovCisJCXt7MSwgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGFmICovCisJCXt7MCwgM30sCisJCXs1LCA1
fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGIw
ICovCisJCXt7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDMsIDAsCQkvKiAweGIxICovCisJCXt7MCwgMH0sCisJCXs0LCA1fSwKKwkJezcs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGIyICovCisJCXt7
MSwgMX0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDMsIDAsCQkvKiAweGIzICovCisJCXt7MCwgMX0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGI0ICovCisJCXt7MiwgMn0sCisJ
CXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkv
KiAweGI1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDV9LAorCQl7NywgN30KKwkJ
fQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGI2ICovCisJCXt7MSwgMn0sCisJCXs0LCA1fSwK
KwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGI3ICov
CisJCXt7MCwgMn0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDIsIDAsCQkvKiAweGI4ICovCisJCXt7MywgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGI5ICovCisJCXt7MCwg
MH0sCisJCXszLCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMs
IDAsCQkvKiAweGJhICovCisJCXt7MSwgMX0sCisJCXszLCA1fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGJiICovCisJCXt7MCwgMX0sCisJCXsz
LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAw
eGJjICovCisJCXt7MiwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGJkICovCisJCXt7MCwgMH0sCisJCXsyLCA1fSwKKwkJ
ezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGJlICovCisJ
CXt7MSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDIsIDAsCQkvKiAweGJmICovCisJCXt7MCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGMwICovCisJCXt7NiwgN30s
CisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAs
CQkvKiAweGMxICovCisJCXt7MCwgMH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGMyICovCisJCXt7MSwgMX0sCisJCXs2LCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGMz
ICovCisJCXt7MCwgMX0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDIsIDAsCQkvKiAweGM0ICovCisJCXt7MiwgMn0sCisJCXs2LCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGM1ICovCisJCXt7
MCwgMH0sCisJCXsyLCAyfSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDIsIDAsCQkvKiAweGM2ICovCisJCXt7MSwgMn0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGM3ICovCisJCXt7MCwgMn0sCisJ
CXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkv
KiAweGM4ICovCisJCXt7MywgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGM5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwK
KwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGNhICov
CisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDMsIDAsCQkvKiAweGNiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezYsIDd9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGNjICovCisJCXt7Miwg
M30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMs
IDAsCQkvKiAweGNkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezYsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGNlICovCisJCXt7MSwgM30sCisJCXs2
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAw
eGNmICovCisJCXt7MCwgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGQwICovCisJCXt7NCwgNH0sCisJCXs2LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGQxICovCisJ
CXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDEsIDMsIDAsCQkvKiAweGQyICovCisJCXt7MSwgMX0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGQzICovCisJCXt7MCwgMX0s
CisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAs
CQkvKiAweGQ0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGQ1ICovCisJCXt7MCwgMH0sCisJCXsyLCAy
fSwKKwkJezQsIDR9LAorCQl7NiwgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGQ2
ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDMsIDAsCQkvKiAweGQ3ICovCisJCXt7MCwgMn0sCisJCXs0LCA0fSwKKwkJezYs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGQ4ICovCisJCXt7
MywgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDMsIDAsCQkvKiAweGQ5ICovCisJCXt7MCwgMH0sCisJCXszLCA0fSwKKwkJezYsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGRhICovCisJCXt7MSwgMX0sCisJ
CXszLCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkv
KiAweGRiICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGRjICovCisJCXt7MiwgNH0sCisJCXs2LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGRkICov
CisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDIsIDAsCQkvKiAweGRlICovCisJCXt7MSwgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGRmICovCisJCXt7MCwg
NH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEs
IDAsCQkvKiAweGUwICovCisJCXt7NSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGUxICovCisJCXt7MCwgMH0sCisJCXs1
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAw
eGUyICovCisJCXt7MSwgMX0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGUzICovCisJCXt7MCwgMX0sCisJCXs1LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGU0ICovCisJ
CXt7MiwgMn0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDMsIDAsCQkvKiAweGU1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezUsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGU2ICovCisJCXt7MSwgMn0s
CisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAs
CQkvKiAweGU3ICovCisJCXt7MCwgMn0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGU4ICovCisJCXt7MywgM30sCisJCXs1LCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGU5
ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDMsIDAsCQkvKiAweGVhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezUs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGViICovCisJCXt7
MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDIsIDAsCQkvKiAweGVjICovCisJCXt7MiwgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGVkICovCisJCXt7MCwgMH0sCisJ
CXsyLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkv
KiAweGVlICovCisJCXt7MSwgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGVmICovCisJCXt7MCwgM30sCisJCXs1LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGYwICov
CisJCXt7NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDIsIDAsCQkvKiAweGYxICovCisJCXt7MCwgMH0sCisJCXs0LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGYyICovCisJCXt7MSwg
MX0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIs
IDAsCQkvKiAweGYzICovCisJCXt7MCwgMX0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGY0ICovCisJCXt7MiwgMn0sCisJCXs0
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAw
eGY1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDd9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGY2ICovCisJCXt7MSwgMn0sCisJCXs0LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGY3ICovCisJ
CXt7MCwgMn0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDEsIDEsIDAsCQkvKiAweGY4ICovCisJCXt7MywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGY5ICovCisJCXt7MCwgMH0s
CisJCXszLCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAs
CQkvKiAweGZhICovCisJCXt7MSwgMX0sCisJCXszLCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGZiICovCisJCXt7MCwgMX0sCisJCXszLCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGZj
ICovCisJCXt7MiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDIsIDAsCQkvKiAweGZkICovCisJCXt7MCwgMH0sCisJCXsyLCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGZlICovCisJCXt7
MSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDEsIDAsCQkvKiAweGZmICovCisJCXt7MCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0KK307CisKKworaW50CitzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc3Ry
dWN0IHNjdHBfaWZhICppZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c2NvcGluZyAqc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvX3VwZGF0ZSkK
K3sKKwlpZiAoKHNjb3BlLT5sb29wYmFja19zY29wZSA9PSAwKSAmJgorCSAgICAoaWZhLT5pZm5f
cCkgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1AoaWZhLT5pZm5fcCkpIHsKKwkJLyoKKwkJICogc2tp
cCBsb29wYmFjayBpZiBub3QgaW4gc2NvcGUgKgorCQkgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJ
c3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2Ug
QUZfSU5FVDoKKwkJaWYgKHNjb3BlLT5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOworCisJCQlzaW4gPSAmaWZhLT5hZGRyZXNzLnNpbjsKKwkJCWlmIChzaW4t
PnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJLyogbm90IGluIHNjb3BlICwgdW5zcGVjaWZp
ZWQgKi8KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKChzY29wZS0+aXB2NF9sb2NhbF9z
Y29wZSA9PSAwKSAmJgorCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2Fk
ZHIpKSkgeworCQkJCS8qIHByaXZhdGUgYWRkcmVzcyBub3QgaW4gc2NvcGUgKi8KKwkJCQlyZXR1
cm4gKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlicmVhazsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKHNjb3BlLT5pcHY2
X2FkZHJfbGVnYWwpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKyNpZiAhZGVm
aW5lZChfX1BhbmRhX18pCisJCQkvKiBNdXN0IHVwZGF0ZSB0aGUgZmxhZ3MsICBidW1tZXIsIHdo
aWNoCisJCQkgKiBtZWFucyBhbnkgSUZBIGxvY2tzIG11c3Qgbm93IGJlIGFwcGxpZWQgSEVSRSA8
LT4KKwkJCSAqLworCQkJaWYgKGRvX3VwZGF0ZSkgeworCQkJCXNjdHBfZ2F0aGVyX2ludGVybmFs
X2lmYV9mbGFncyhpZmEpOworCQkJfQorI2VuZGlmCisJCQlpZiAoaWZhLT5sb2NhbGlmYV9mbGFn
cyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJ
CS8qIG9rIHRvIHVzZSBkZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KKwkJCXNpbjYgPSAmaWZhLT5h
ZGRyZXNzLnNpbjY7CisJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJCWlmICgJCS8qIChsb2NhbF9zY29wZSA9PSAwKSAmJiAqLworCQkJICAg
IChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJCWlmICgoc2NvcGUtPnNpdGVfc2NvcGUgPT0gMCkgJiYKKwkJCSAgICAo
SU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgeworCQkJCXJldHVybiAo
MCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWJyZWFrOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJaWYgKCFz
Y29wZS0+Y29ubl9hZGRyX2xlZ2FsKSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWJyZWFrOwor
I2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwor
c3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2FkZHJfdG9fbWJ1ZihzdHJ1Y3QgbWJ1ZiAq
bSwgc3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQxNl90ICpsZW4pCit7CisjaWYgZGVmaW5lZChJ
TkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwYXJhbWg7CisJ
c3RydWN0IG1idWYgKm1yZXQ7CisJdWludDE2X3QgcGxlbjsKKyNlbmRpZgorCisJc3dpdGNoIChp
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoK
KwkJcGxlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pOwor
CQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJcGxlbiA9
ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pOworCQlicmVhazsK
KyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAobSk7CisJfQorI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKKwlpZiAoTV9UUkFJTElOR1NQQUNFKG0pID49IHBsZW4pIHsKKwkJ
LyogZWFzeSBzaWRlIHdlIGp1c3QgZHJvcCBpdCBvbiB0aGUgZW5kICovCisJCXBhcmFtaCA9IChz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShTQ1RQX0JVRl9BVChtLCBTQ1RQX0JVRl9MRU4obSkpKTsK
KwkJbXJldCA9IG07CisJfSBlbHNlIHsKKwkJLyogTmVlZCBtb3JlIHNwYWNlICovCisJCW1yZXQg
PSBtOworCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChtcmV0KSAhPSBOVUxMKSB7CisJCQltcmV0ID0g
U0NUUF9CVUZfTkVYVChtcmV0KTsKKwkJfQorCQlTQ1RQX0JVRl9ORVhUKG1yZXQpID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHBsZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJaWYgKFND
VFBfQlVGX05FWFQobXJldCkgPT0gTlVMTCkgeworCQkJLyogV2UgYXJlIGhvc2VkLCBjYW4ndCBh
ZGQgbW9yZSBhZGRyZXNzZXMgKi8KKwkJCXJldHVybiAobSk7CisJCX0KKwkJbXJldCA9IFNDVFBf
QlVGX05FWFQobXJldCk7CisJCXBhcmFtaCA9IG10b2QobXJldCwgc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKik7CisJfQorCS8qIG5vdyBhZGQgdGhlIHBhcmFtZXRlciAqLworCXN3aXRjaCAoaWZhLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJewor
CQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqaXB2NHA7CisJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOworCisJCXNpbiA9ICZpZmEtPmFkZHJlc3Muc2luOworCQlpcHY0cCA9IChzdHJ1Y3Qg
c2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBhcmFtaDsKKwkJcGFyYW1oLT5wYXJhbV90eXBlID0gaHRv
bnMoU0NUUF9JUFY0X0FERFJFU1MpOworCQlwYXJhbWgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBs
ZW4pOworCQlpcHY0cC0+YWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOworCQlTQ1RQX0JVRl9M
RU4obXJldCkgKz0gcGxlbjsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCXsKKwkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKmlwdjZwOwor
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNp
bjY7CisJCWlwdjZwID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGFyYW1oOworCQlw
YXJhbWgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0lQVjZfQUREUkVTUyk7CisJCXBhcmFtaC0+
cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCW1lbWNweShpcHY2cC0+YWRkciwgJnNpbjYt
PnNpbjZfYWRkciwKKwkJICAgIHNpemVvZihpcHY2cC0+YWRkcikpOworI2lmIGRlZmluZWQoU0NU
UF9FTUJFRERFRF9WNl9TQ09QRSkKKwkJLyogY2xlYXIgZW1iZWRkZWQgc2NvcGUgaW4gdGhlIGFk
ZHJlc3MgKi8KKwkJaW42X2NsZWFyc2NvcGUoKHN0cnVjdCBpbjZfYWRkciAqKWlwdjZwLT5hZGRy
KTsKKyNlbmRpZgorCQlTQ1RQX0JVRl9MRU4obXJldCkgKz0gcGxlbjsKKwkJYnJlYWs7CisJfQor
I2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIChtKTsKKwl9CisJaWYgKGxlbiAhPSBOVUxMKSB7
CisJCSpsZW4gKz0gcGxlbjsKKwl9CisJcmV0dXJuIChtcmV0KTsKKyNlbmRpZgorfQorCisKK3N0
cnVjdCBtYnVmICoKK3NjdHBfYWRkX2FkZHJlc3Nlc190b19pX2lhKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX3Njb3BpbmcgKnNjb3BlLAorCQkJICAgc3RydWN0IG1idWYgKm1fYXQsIGlu
dCBjbnRfaW5pdHNfdG8sCisJCQkgICB1aW50MTZfdCAqcGFkZGluZ19sZW4sIHVpbnQxNl90ICpj
aHVua19sZW4pCit7CisJc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCWludCBjbnQsIGxp
bWl0X291dCA9IDAsIHRvdGFsX2NvdW50OworCXVpbnQzMl90IHZyZl9pZDsKKworCXZyZl9pZCA9
IGlucC0+ZGVmX3ZyZl9pZDsKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisJdnJmID0gc2N0cF9m
aW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQlTQ1RQX0lQSV9BRERSX1JV
TkxPQ0soKTsKKwkJcmV0dXJuIChtX2F0KTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOwor
CQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKKworCQljbnQgPSBjbnRfaW5pdHNfdG87CisJ
CWlmICh2cmYtPnRvdGFsX2lmYV9jb3VudCA+IFNDVFBfQ09VTlRfTElNSVQpIHsKKwkJCWxpbWl0
X291dCA9IDE7CisJCQljbnQgPSBTQ1RQX0FERFJFU1NfTElNSVQ7CisJCQlnb3RvIHNraXBfY291
bnQ7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+aWZubGlzdCwgbmV4dF9p
Zm4pIHsKKwkJCWlmICgoc2NvcGUtPmxvb3BiYWNrX3Njb3BlID09IDApICYmCisJCQkgICAgU0NU
UF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm5wKSkgeworCQkJCS8qCisJCQkJICogU2tpcCBsb29w
YmFjayBkZXZpY2VzIGlmIGxvb3BiYWNrX3Njb3BlCisJCQkJICogbm90IHNldAorCQkJCSAqLwor
CQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhcCwgJnNjdHBfaWZu
cC0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmZGVm
IElORVQKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5F
VCkgJiYKKwkJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVk
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbi5zaW5f
YWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYp
ICYmCisJCQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwK
KwkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42LnNpbjZf
YWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2VuZGlmCisjZW5kaWYKKwkJ
CQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmFwKSkgeworCQkJCQlj
b250aW51ZTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWlmIChzY3Rw
X2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQkJY29udGludWU7
CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzY3RwX2lm
YXAsIHNjb3BlLCAxKSA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQljbnQrKzsK
KwkJCQlpZiAoY250ID4gU0NUUF9BRERSRVNTX0xJTUlUKSB7CisJCQkJCWJyZWFrOworCQkJCX0K
KwkJCX0KKwkJCWlmIChjbnQgPiBTQ1RQX0FERFJFU1NfTElNSVQpIHsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJfQorCXNraXBfY291bnQ6CisJCWlmIChjbnQgPiAxKSB7CisJCQl0b3RhbF9jb3VudCA9
IDA7CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikg
eworCQkJCWNudCA9IDA7CisJCQkJaWYgKChzY29wZS0+bG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYK
KwkJCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm5wKSkgeworCQkJCQkvKgorCQkJ
CQkgKiBTa2lwIGxvb3BiYWNrIGRldmljZXMgaWYKKwkJCQkJICogbG9vcGJhY2tfc2NvcGUgbm90
IHNldAorCQkJCQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCUxJU1RfRk9SRUFDSChz
Y3RwX2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQkJCWlmICgoc2N0cF9pZmFwLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgorCQkJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5w
LT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBf
aWZhcC0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7CisJCQkJCQljb250aW51ZTsKKwkJ
CQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJCQkgICAgKHByaXNvbl9jaGVja19pcDYo
aW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNj
dHBfaWZhcC0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKKwkJCQkJCWNvbnRpbnVl
OworCQkJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0
ZWQoc3RjYiwgc2N0cF9pZmFwKSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCWlmIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5ID09IEFGX0NPTk4pIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJ
aWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzY3RwX2lmYXAsCisJCQkJCQkJCSAgICAgc2Nv
cGUsIDApID09IDApIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICgoY2h1bmtf
bGVuICE9IE5VTEwpICYmCisJCQkJCSAgICAocGFkZGluZ19sZW4gIT0gTlVMTCkgJiYKKwkJCQkJ
ICAgICgqcGFkZGluZ19sZW4gPiAwKSkgeworCQkJCQkJbWVtc2V0KG10b2QobV9hdCwgY2FkZHJf
dCkgKyAqY2h1bmtfbGVuLCAwLCAqcGFkZGluZ19sZW4pOworCQkJCQkJU0NUUF9CVUZfTEVOKG1f
YXQpICs9ICpwYWRkaW5nX2xlbjsKKwkJCQkJCSpjaHVua19sZW4gKz0gKnBhZGRpbmdfbGVuOwor
CQkJCQkJKnBhZGRpbmdfbGVuID0gMDsKKwkJCQkJfQorCQkJCQltX2F0ID0gc2N0cF9hZGRfYWRk
cl90b19tYnVmKG1fYXQsIHNjdHBfaWZhcCwgY2h1bmtfbGVuKTsKKwkJCQkJaWYgKGxpbWl0X291
dCkgeworCQkJCQkJY250Kys7CisJCQkJCQl0b3RhbF9jb3VudCsrOworCQkJCQkJaWYgKGNudCA+
PSAyKSB7CisJCQkJCQkJLyogdHdvIGZyb20gZWFjaCBhZGRyZXNzICovCisJCQkJCQkJYnJlYWs7
CisJCQkJCQl9CisJCQkJCQlpZiAodG90YWxfY291bnQgPiBTQ1RQX0FERFJFU1NfTElNSVQpIHsK
KwkJCQkJCQkvKiBObyBtb3JlIGFkZHJlc3NlcyAqLworCQkJCQkJCWJyZWFrOworCQkJCQkJfQor
CQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHNjdHBfbGFkZHIg
KmxhZGRyOworCisJCWNudCA9IGNudF9pbml0c190bzsKKwkJLyogRmlyc3QsIGhvdyBtYW55ID8g
Ki8KKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRf
YWRkcikgeworCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVE
KQorCQkJCS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBieSB0aGUgc3lzdGVtLCBkb250CisJCQkJ
ICogbGlzdC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCWlmIChsYWRkci0+YWN0aW9uID09
IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCQkvKiBBZGRyZXNzIGJlaW5nIGRlbGV0ZWQgb24g
dGhpcyBlcAorCQkJCSAqIGRvbid0IGxpc3QuCisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgor
CQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShsYWRkci0+aWZhLAorCQkJCQkJICAgICBz
Y29wZSwgMSkgPT0gMCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY250Kys7CisJCX0KKwkJ
LyoKKwkJICogVG8gZ2V0IHRocm91Z2ggYSBOQVQgd2Ugb25seSBsaXN0IGFkZHJlc3NlcyBpZiB3
ZSBoYXZlCisJCSAqIG1vcmUgdGhhbiBvbmUuIFRoYXQgd2F5IGlmIHlvdSBqdXN0IGJpbmQgYSBz
aW5nbGUgYWRkcmVzcworCQkgKiB3ZSBsZXQgdGhlIHNvdXJjZSBvZiB0aGUgaW5pdCBkaWN0YXRl
IG91ciBhZGRyZXNzLgorCQkgKi8KKwkJaWYgKGNudCA+IDEpIHsKKwkJCWNudCA9IGNudF9pbml0
c190bzsKKwkJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBf
bnh0X2FkZHIpIHsKKwkJCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkJCWNvbnRpbnVl
OworCQkJCX0KKwkJCQlpZiAobGFkZHItPmlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5H
X0RFTEVURUQpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCQlpZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfQ09O
TikgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAoc2N0cF9pc19hZGRy
ZXNzX2luX3Njb3BlKGxhZGRyLT5pZmEsCisJCQkJCQkJICAgICBzY29wZSwgMCkgPT0gMCkgewor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKChjaHVua19sZW4gIT0gTlVMTCkgJiYKKwkJ
CQkgICAgKHBhZGRpbmdfbGVuICE9IE5VTEwpICYmCisJCQkJICAgICgqcGFkZGluZ19sZW4gPiAw
KSkgeworCQkJCQltZW1zZXQobXRvZChtX2F0LCBjYWRkcl90KSArICpjaHVua19sZW4sIDAsICpw
YWRkaW5nX2xlbik7CisJCQkJCVNDVFBfQlVGX0xFTihtX2F0KSArPSAqcGFkZGluZ19sZW47CisJ
CQkJCSpjaHVua19sZW4gKz0gKnBhZGRpbmdfbGVuOworCQkJCQkqcGFkZGluZ19sZW4gPSAwOwor
CQkJCX0KKwkJCQltX2F0ID0gc2N0cF9hZGRfYWRkcl90b19tYnVmKG1fYXQsIGxhZGRyLT5pZmEs
IGNodW5rX2xlbik7CisJCQkJY250Kys7CisJCQkJaWYgKGNudCA+PSBTQ1RQX0FERFJFU1NfTElN
SVQpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQorCVNDVFBfSVBJX0FERFJf
UlVOTE9DSygpOworCXJldHVybiAobV9hdCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEg
Kgorc2N0cF9pc19pZmFfYWRkcl9wcmVmZXJyZWQoc3RydWN0IHNjdHBfaWZhICppZmEsCisJCQkg
ICB1aW50OF90IGRlc3RfaXNfbG9vcCwKKwkJCSAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJ
ICAgc2FfZmFtaWx5X3QgZmFtKQoreworCXVpbnQ4X3QgZGVzdF9pc19nbG9iYWwgPSAwOworCS8q
IGRlc3RfaXNfcHJpdiBpcyB0cnVlIGlmIGRlc3RpbmF0aW9uIGlzIGEgcHJpdmF0ZSBhZGRyZXNz
ICovCisJLyogZGVzdF9pc19sb29wIGlzIHRydWUgaWYgZGVzdGluYXRpb24gaXMgYSBsb29wYmFj
ayBhZGRyZXNzZXMgKi8KKworCS8qKgorCSAqIEhlcmUgd2UgZGV0ZXJtaW5lIGlmIGl0cyBhIHBy
ZWZlcnJlZCBhZGRyZXNzLiBBIHByZWZlcnJlZCBhZGRyZXNzCisJICogbWVhbnMgaXQgaXMgdGhl
IHNhbWUgc2NvcGUgb3IgaGlnaGVyIHNjb3BlIHRoZW4gdGhlIGRlc3RpbmF0aW9uLgorCSAqIEwg
PSBsb29wYmFjaywgUCA9IHByaXZhdGUsIEcgPSBnbG9iYWwKKwkgKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgIHNyYyAgICB8ICBkZXN0IHwgcmVzdWx0
CisJICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAg
TCAgICAgfCAgICBMICB8ICAgIHllcworCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCSAqICAgICBQICAgICB8ICAgIEwgIHwgICAgeWVzLXY0IG5vLXY2CisJ
ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIEcg
ICAgIHwgICAgTCAgfCAgICB5ZXMtdjQgbm8tdjYKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgTCAgICAgfCAgICBQICB8ICAgIG5vCisJICog
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIFAgICAg
IHwgICAgUCAgfCAgICB5ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKwkgKiAgICAgRyAgICAgfCAgICBQICB8ICAgIG5vCisJICogICAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICBMICAgICB8ICAgIEcgIHwg
ICAgbm8KKwkgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJ
ICogICAgIFAgICAgIHwgICAgRyAgfCAgICBubworCSAqICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIEcgICAgIHwgICAgRyAgfCAgICB5ZXMKKwkg
KiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqLworCisJ
aWYgKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gZmFtKSB7CisJCS8qIGZvcmdldCBtaXMt
bWF0Y2hlZCBmYW1pbHkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChkZXN0X2lzX3By
aXYgPT0gMCkgJiYgKGRlc3RfaXNfbG9vcCA9PSAwKSkgeworCQlkZXN0X2lzX2dsb2JhbCA9IDE7
CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSXMgZGVzdGluYXRpb24gcHJlZmVy
cmVkOiIpOworCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZpZmEtPmFkZHJlc3Mu
c2EpOworCS8qIE9rIHRoZSBhZGRyZXNzIG1heSBiZSBvayAqLworI2lmZGVmIElORVQ2CisJaWYg
KGZhbSA9PSBBRl9JTkVUNikgeworCQkvKiBvayB0byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXM/
IG5vIGxldHMgbm90ISAqLworCQlpZiAoaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9J
RkFfVU5VU0VBQkxFKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjFcbiIp
OworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoaWZhLT5zcmNfaXNfcHJpdiAmJiAhaWZh
LT5zcmNfaXNfbG9vcCkgeworCQkJaWYgKGRlc3RfaXNfbG9vcCkgeworCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQzLCAiTk86MlxuIik7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJ
fQorCQlpZiAoaWZhLT5zcmNfaXNfZ2xvYikgeworCQkJaWYgKGRlc3RfaXNfbG9vcCkgeworCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86M1xuIik7CisJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCS8qIE5vdyB0aGF0IHdlIGtub3cgd2hhdCBpcyB3
aGF0LCBpbXBsZW1lbnQgb3IgdGFibGUKKwkgKiB0aGlzIGNvdWxkIGluIHRoZW9yeSBiZSBkb25l
IHNsaWNrZXIgKGl0IHVzZWQgdG8gYmUpLCBidXQgdGhpcworCSAqIGlzIHN0cmFpZ2h0Zm9yd2Fy
ZCBhbmQgZWFzaWVyIHRvIHZhbGlkYXRlIDotKQorCSAqLworCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQzLCAic3JjX2xvb3A6JWQgc3JjX3ByaXY6JWQgc3JjX2dsb2I6JWRcbiIsCisJCWlmYS0+
c3JjX2lzX2xvb3AsIGlmYS0+c3JjX2lzX3ByaXYsIGlmYS0+c3JjX2lzX2dsb2IpOworCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiZGVzdF9sb29wOiVkIGRlc3RfcHJpdjolZCBkZXN0X2ds
b2I6JWRcbiIsCisJCWRlc3RfaXNfbG9vcCwgZGVzdF9pc19wcml2LCBkZXN0X2lzX2dsb2JhbCk7
CisKKwlpZiAoKGlmYS0+c3JjX2lzX2xvb3ApICYmIChkZXN0X2lzX3ByaXYpKSB7CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86NFxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQor
CWlmICgoaWZhLT5zcmNfaXNfZ2xvYikgJiYgKGRlc3RfaXNfcHJpdikpIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDMsICJOTzo1XG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYg
KChpZmEtPnNyY19pc19sb29wKSAmJiAoZGVzdF9pc19nbG9iYWwpKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQzLCAiTk86NlxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgo
aWZhLT5zcmNfaXNfcHJpdikgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgeworCQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMywgIk5POjdcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMywgIllFU1xuIik7CisJLyogaXRzIGEgcHJlZmVycmVkIGFkZHJl
c3MgKi8KKwlyZXR1cm4gKGlmYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0
cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHN0cnVjdCBzY3RwX2lmYSAqaWZhLAorCQkJICAgIHVp
bnQ4X3QgZGVzdF9pc19sb29wLAorCQkJICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJICAg
IHNhX2ZhbWlseV90IGZhbSkKK3sKKwl1aW50OF90IGRlc3RfaXNfZ2xvYmFsID0gMDsKKworCS8q
KgorCSAqIEhlcmUgd2UgZGV0ZXJtaW5lIGlmIGl0cyBhIGFjY2VwdGFibGUgYWRkcmVzcy4gQSBh
Y2NlcHRhYmxlCisJICogYWRkcmVzcyBtZWFucyBpdCBpcyB0aGUgc2FtZSBzY29wZSBvciBoaWdo
ZXIgc2NvcGUgYnV0IHdlIGNhbgorCSAqIGFsbG93IGZvciBOQVQgd2hpY2ggbWVhbnMgaXRzIG9r
IHRvIGhhdmUgYSBnbG9iYWwgZGVzdCBhbmQgYQorCSAqIHByaXZhdGUgc3JjLgorCSAqCisJICog
TCA9IGxvb3BiYWNrLCBQID0gcHJpdmF0ZSwgRyA9IGdsb2JhbAorCSAqIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIHNyYyAgICB8ICBkZXN0IHwgcmVzdWx0
CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIEwg
ICAgIHwgICBMICAgfCAgICB5ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKwkgKiAgIFAgICAgIHwgICBMICAgfCAgICB5ZXMtdjQgbm8tdjYKKwkgKiAg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIEcgICAgIHwg
ICBMICAgfCAgICB5ZXMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCSAqICAgTCAgICAgfCAgIFAgICB8ICAgIG5vCisJICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIFAgICAgIHwgICBQICAgfCAgICB5ZXMKKwkg
KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgRyAgICAg
fCAgIFAgICB8ICAgIHllcyAtIE1heSBub3Qgd29yaworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICBMICAgICB8ICAgRyAgIHwgICAgbm8KKwkgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgUCAgICAgfCAg
IEcgICB8ICAgIHllcyAtIE1heSBub3Qgd29yaworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisJICogICBHICAgICB8ICAgRyAgIHwgICAgeWVzCisJICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKi8KKworCWlmIChpZmEt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5ICE9IGZhbSkgeworCQkvKiBmb3JnZXQgbm9uIG1hdGNoaW5n
IGZhbWlseSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImlmYV9mYW06JWQgZmFt
OiVkXG4iLAorCQkJaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSwgZmFtKTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJLyogT2sgdGhlIGFkZHJlc3MgbWF5IGJlIG9rICovCisJU0NUUERCR19BRERS
KFNDVFBfREVCVUdfT1VUUFVUMywgJmlmYS0+YWRkcmVzcy5zYSk7CisJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDMsICJkc3RfaXNfbG9vcDolZCBkZXN0X2lzX3ByaXY6JWRcbiIsCisJCWRlc3Rf
aXNfbG9vcCwgZGVzdF9pc19wcml2KTsKKwlpZiAoKGRlc3RfaXNfbG9vcCA9PSAwKSAmJiAoZGVz
dF9pc19wcml2ID09IDApKSB7CisJCWRlc3RfaXNfZ2xvYmFsID0gMTsKKwl9CisjaWZkZWYgSU5F
VDYKKwlpZiAoZmFtID09IEFGX0lORVQ2KSB7CisJCS8qIG9rIHRvIHVzZSBkZXByZWNhdGVkIGFk
ZHJlc3Nlcz8gKi8KKwkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VO
VVNFQUJMRSkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoaWZhLT5zcmNfaXNfcHJp
dikgeworCQkJLyogU3BlY2lhbCBjYXNlLCBsaW5rbG9jYWwgdG8gbG9vcCAqLworCQkJaWYgKGRl
c3RfaXNfbG9vcCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQorI2VuZGlmCisJLyoKKwkg
KiBOb3cgdGhhdCB3ZSBrbm93IHdoYXQgaXMgd2hhdCwgaW1wbGVtZW50IG91ciB0YWJsZS4KKwkg
KiBUaGlzIGNvdWxkIGluIHRoZW9yeSBiZSBkb25lIHNsaWNrZXIgKGl0IHVzZWQgdG8gYmUpLCBi
dXQgdGhpcworCSAqIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWVyIHRvIHZhbGlkYXRlIDot
KQorCSAqLworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiaWZhLT5zcmNfaXNfbG9vcDol
ZCBkZXN0X2lzX3ByaXY6JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsCisJCWRlc3RfaXNfcHJp
dik7CisJaWYgKChpZmEtPnNyY19pc19sb29wID09IDEpICYmIChkZXN0X2lzX3ByaXYpKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiaWZhLT5z
cmNfaXNfbG9vcDolZCBkZXN0X2lzX2dsb2I6JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsCisJ
CWRlc3RfaXNfZ2xvYmFsKTsKKwlpZiAoKGlmYS0+c3JjX2lzX2xvb3AgPT0gMSkgJiYgKGRlc3Rf
aXNfZ2xvYmFsKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMywgImFkZHJlc3MgaXMgYWNjZXB0YWJsZVxuIik7CisJLyogaXRzIGFuIGFjY2VwdGFi
bGUgYWRkcmVzcyAqLworCXJldHVybiAoaWZhKTsKK30KKworaW50CitzY3RwX2lzX2FkZHJfcmVz
dHJpY3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQorewor
CXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKKworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJLyog
VGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucywgbm8gVENCIDotKSAqLworCQlyZXR1cm4gKDApOwor
CX0KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRy
cywgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKKwkJCQlfX2Z1bmNfXyk7
CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCS8qIFll
cyBpdCBpcyBvbiB0aGUgbGlzdCAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlyZXR1cm4g
KDApOworfQorCisKK2ludAorc2N0cF9pc19hZGRyX2luX2VwKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQoreworCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsK
KworCWlmIChpZmEgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKwlMSVNUX0ZPUkVBQ0gobGFkZHIs
ICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZh
ID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiJXM6IE5VTEwgaWZh
XG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgobGFkZHItPmlm
YSA9PSBpZmEpICYmIGxhZGRyLT5hY3Rpb24gPT0gMCkKKwkJCS8qIHNhbWUgcG9pbnRlciAqLwor
CQkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCisKK3N0YXRpYyBzdHJ1Y3Qg
c2N0cF9pZmEgKgorc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19pbnAoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwKKwkJCSAgICAgIHNjdHBfcm91dGVfdCAqcm8sCisJCQkgICAgICB1aW50MzJfdCB2
cmZfaWQsCisJCQkgICAgICBpbnQgbm9uX2Fzb2NfYWRkcl9vaywKKwkJCSAgICAgIHVpbnQ4X3Qg
ZGVzdF9pc19wcml2LAorCQkJICAgICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCisJCQkgICAgICBz
YV9mYW1pbHlfdCBmYW0pCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqc3RhcnRpbmdf
cG9pbnQ7CisJdm9pZCAqaWZuOworCWludCByZXNldHRvdG9wID0gMDsKKwlzdHJ1Y3Qgc2N0cF9p
Zm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmEsICpzaWZhOworCXN0cnVj
dCBzY3RwX3ZyZiAqdnJmOworCXVpbnQzMl90IGlmbl9pbmRleDsKKworCXZyZiA9IHNjdHBfZmlu
ZF92cmYodnJmX2lkKTsKKwlpZiAodnJmID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwlp
Zm4gPSBTQ1RQX0dFVF9JRk5fVk9JRF9GUk9NX1JPVVRFKHJvKTsKKwlpZm5faW5kZXggPSBTQ1RQ
X0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKTsKKwlzY3RwX2lmbiA9IHNjdHBfZmluZF9pZm4o
aWZuLCBpZm5faW5kZXgpOworCS8qCisJICogZmlyc3QgcXVlc3Rpb24sIGlzIHRoZSBpZm4gd2Ug
d2lsbCBlbWl0IG9uIGluIG91ciBsaXN0LCBpZiBzbywgd2UKKwkgKiB3YW50IHN1Y2ggYW4gYWRk
cmVzcy4gTm90ZSB0aGF0IHdlIGZpcnN0IGxvb2tlZCBmb3IgYQorCSAqIHByZWZlcnJlZCBhZGRy
ZXNzLgorCSAqLworCWlmIChzY3RwX2lmbikgeworCQkvKiBpcyBhIHByZWZlcnJlZCBvbmUgb24g
dGhlIGludGVyZmFjZSB3ZSByb3V0ZSBvdXQ/ICovCisJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwg
JnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisjaWZkZWYgSU5FVAorCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5w
X2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5z
aW5fYWRkcikgIT0gMCkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorI2lmZGVmIElO
RVQ2CisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikg
JiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJ
CQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRy
KSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisjZW5kaWYKKwkJCWlmICgo
c2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKKwkJCSAg
ICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJCQljb250aW51ZTsKKwkJCXNpZmEgPSBzY3Rw
X2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3RwX2lmYSwKKwkJCQkJCQkgIGRlc3RfaXNfbG9vcCwK
KwkJCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCWlmIChzaWZhID09IE5VTEwpCisJCQkJ
Y29udGludWU7CisJCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2lmYSkpIHsKKwkJCQlh
dG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCQkJCXJldHVybiAoc2lmYSk7CisJ
CQl9CisJCX0KKwl9CisJLyoKKwkgKiBvaywgbm93IHdlIG5vdyBuZWVkIHRvIGZpbmQgb25lIG9u
IHRoZSBsaXN0IG9mIHRoZSBhZGRyZXNzZXMuCisJICogV2UgY2FuJ3QgZ2V0IG9uZSBvbiB0aGUg
ZW1pdHRpbmcgaW50ZXJmYWNlIHNvIGxldCdzIGZpbmQgZmlyc3QKKwkgKiBhIHByZWZlcnJlZCBv
bmUuIElmIG5vdCB0aGF0IGFuIGFjY2VwdGFibGUgb25lIG90aGVyd2lzZS4uLgorCSAqIHdlIHJl
dHVybiBOVUxMLgorCSAqLworCXN0YXJ0aW5nX3BvaW50ID0gaW5wLT5uZXh0X2FkZHJfdG91c2U7
Cisgb25jZV9hZ2FpbjoKKwlpZiAoaW5wLT5uZXh0X2FkZHJfdG91c2UgPT0gTlVMTCkgeworCQlp
bnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hZGRyX2xpc3QpOwor
CQlyZXNldHRvdG9wID0gMTsKKwl9CisJZm9yIChsYWRkciA9IGlucC0+bmV4dF9hZGRyX3RvdXNl
OyBsYWRkcjsKKwkgICAgIGxhZGRyID0gTElTVF9ORVhUKGxhZGRyLCBzY3RwX254dF9hZGRyKSkg
eworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkvKiBhZGRyZXNzIGhhcyBiZWVuIHJl
bW92ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsYWRkci0+YWN0aW9uID09IFNDVFBf
REVMX0lQX0FERFJFU1MpIHsKKwkJCS8qIGFkZHJlc3MgaXMgYmVpbmcgZGVsZXRlZCAqLworCQkJ
Y29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKGxhZGRy
LT5pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgZGVzdF9pc19wcml2LCBmYW0pOworCQlpZiAo
c2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZj
b3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChyZXNldHRvdG9wID09IDApIHsK
KwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOworCQlnb3RvIG9uY2VfYWdhaW47CisJfQor
CisJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBzdGFydGluZ19wb2ludDsKKwlyZXNldHRvdG9wID0g
MDsKKyBvbmNlX2FnYWluX3RvbzoKKwlpZiAoaW5wLT5uZXh0X2FkZHJfdG91c2UgPT0gTlVMTCkg
eworCQlpbnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hZGRyX2xp
c3QpOworCQlyZXNldHRvdG9wID0gMTsKKwl9CisKKwkvKiBvaywgd2hhdCBhYm91dCBhbiBhY2Nl
cHRhYmxlIGFkZHJlc3MgaW4gdGhlIGlucCAqLworCWZvciAobGFkZHIgPSBpbnAtPm5leHRfYWRk
cl90b3VzZTsgbGFkZHI7CisJICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRkciwgc2N0cF9ueHRf
YWRkcikpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJLyogYWRkcmVzcyBoYXMg
YmVlbiByZW1vdmVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFkZHItPmFjdGlvbiA9
PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRlbGV0ZWQg
Ki8KKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFi
bGUobGFkZHItPmlmYSwgZGVzdF9pc19sb29wLAorCQkJCQkJICAgZGVzdF9pc19wcml2LCBmYW0p
OworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0b21pY19hZGRfaW50KCZz
aWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChyZXNldHRvdG9w
ID09IDApIHsKKwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOworCQlnb3RvIG9uY2VfYWdh
aW5fdG9vOworCX0KKworCS8qCisJICogbm8gYWRkcmVzcyBib3VuZCBjYW4gYmUgYSBzb3VyY2Ug
Zm9yIHRoZSBkZXN0aW5hdGlvbiB3ZSBhcmUgaW4KKwkgKiB0cm91YmxlCisJICovCisJcmV0dXJu
IChOVUxMKTsKK30KKworCisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9jaG9vc2Vf
Ym91bmRzcGVjaWZpY19zdGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisJCQkgICAgICAgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgIHNjdHBfcm91dGVfdCAqcm8sCisJCQkgICAg
ICAgdWludDMyX3QgdnJmX2lkLAorCQkJICAgICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJ
ICAgICAgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJICAgICAgIGludCBub25fYXNvY19hZGRy
X29rLAorCQkJICAgICAgIHNhX2ZhbWlseV90IGZhbSkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAq
bGFkZHIsICpzdGFydGluZ19wb2ludDsKKwl2b2lkICppZm47CisJc3RydWN0IHNjdHBfaWZuICpz
Y3RwX2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lmYTsKKwl1aW50OF90IHN0
YXJ0X2F0X2JlZ2lubmluZyA9IDA7CisJc3RydWN0IHNjdHBfdnJmICp2cmY7CisJdWludDMyX3Qg
aWZuX2luZGV4OworCisJLyoKKwkgKiBmaXJzdCBxdWVzdGlvbiwgaXMgdGhlIGlmbiB3ZSB3aWxs
IGVtaXQgb24gaW4gb3VyIGxpc3QsIGlmIHNvLCB3ZQorCSAqIHdhbnQgdGhhdCBvbmUuCisJICov
CisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkKKwkJcmV0
dXJuIChOVUxMKTsKKworCWlmbiA9IFNDVFBfR0VUX0lGTl9WT0lEX0ZST01fUk9VVEUocm8pOwor
CWlmbl9pbmRleCA9IFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUocm8pOworCXNjdHBfaWZu
ID0gc2N0cF9maW5kX2lmbiggaWZuLCBpZm5faW5kZXgpOworCisJLyoKKwkgKiBmaXJzdCBxdWVz
dGlvbiwgaXMgdGhlIGlmbiB3ZSB3aWxsIGVtaXQgb24gaW4gb3VyIGxpc3Q/ICBJZiBzbywKKwkg
KiB3ZSB3YW50IHRoYXQgb25lLiBGaXJzdCB3ZSBsb29rIGZvciBhIHByZWZlcnJlZC4gU2Vjb25k
LCB3ZSBnbworCSAqIGZvciBhbiBhY2NlcHRhYmxlLgorCSAqLworCWlmIChzY3RwX2lmbikgewor
CQkvKiBmaXJzdCB0cnkgZm9yIGEgcHJlZmVycmVkIGFkZHJlc3Mgb24gdGhlIGVwICovCisJCUxJ
U1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZkZWYgSU5FVAorCQkJaWYgKChzY3RwX2lmYS0+YWRk
cmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lw
NChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNj
dHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQljb250aW51ZTsKKwkJ
CX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNh
X2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5h
ZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2Vu
ZGlmCisjZW5kaWYKKwkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERS
X0RFRkVSX1VTRSkgJiYgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCisJCQkJY29udGludWU7CisJ
CQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2N0cF9pZmEpKSB7CisJCQkJc2lmYSA9IHNj
dHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKHNjdHBfaWZhLCBkZXN0X2lzX2xvb3AsIGRlc3RfaXNf
cHJpdiwgZmFtKTsKKwkJCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJCQljb250aW51ZTsKKwkJCQlp
ZiAoKChub25fYXNvY19hZGRyX29rID09IDApICYmCisJCQkJICAgICAoc2N0cF9pc19hZGRyX3Jl
c3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAorCQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgor
CQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkJCSAg
ICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7CisJCQkJCS8qIG9uIHRo
ZSBuby1ubyBsaXN0ICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlhdG9taWNfYWRkX2lu
dCgmc2lmYS0+cmVmY291bnQsIDEpOworCQkJCXJldHVybiAoc2lmYSk7CisJCQl9CisJCX0KKwkJ
LyogbmV4dCB0cnkgZm9yIGFuIGFjY2VwdGFibGUgYWRkcmVzcyBvbiB0aGUgZXAgKi8KKwkJTElT
VF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQlpZiAoKHNjdHBfaWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgorCQkJICAgIChwcmlzb25fY2hlY2tfaXA0
KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0
cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJ
fQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBf
aW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFk
ZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5k
aWYKKyNlbmRpZgorCQkJaWYgKChzY3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJf
REVGRVJfVVNFKSAmJiAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJCQljb250aW51ZTsKKwkJ
CWlmIChzY3RwX2lzX2FkZHJfaW5fZXAoaW5wLCBzY3RwX2lmYSkpIHsKKwkJCQlzaWZhPSBzY3Rw
X2lzX2lmYV9hZGRyX2FjY2VwdGFibGUoc2N0cF9pZmEsIGRlc3RfaXNfbG9vcCwgZGVzdF9pc19w
cml2LGZhbSk7CisJCQkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCQkJY29udGludWU7CisJCQkJaWYg
KCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJ
CQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJCQkgICAg
ICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgeworCQkJCQkvKiBvbiB0aGUg
bm8tbm8gbGlzdCAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYXRvbWljX2FkZF9pbnQo
JnNpZmEtPnJlZmNvdW50LCAxKTsKKwkJCQlyZXR1cm4gKHNpZmEpOworCQkJfQorCQl9CisKKwl9
CisJLyoKKwkgKiBpZiB3ZSBjYW4ndCBmaW5kIG9uZSBsaWtlIHRoYXQgdGhlbiB3ZSBtdXN0IGxv
b2sgYXQgYWxsCisJICogYWRkcmVzc2VzIGJvdW5kIHRvIHBpY2sgb25lIGF0IGZpcnN0IHByZWZl
cmFibGUgdGhlbgorCSAqIHNlY29uZGx5IGFjY2VwdGFibGUuCisJICovCisJc3RhcnRpbmdfcG9p
bnQgPSBzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzOworIHNjdHBfZnJvbV90aGVfdG9wOgor
CWlmIChzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID09IE5VTEwpIHsKKwkJc3RhcnRfYXRf
YmVnaW5uaW5nID0gMTsKKwkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IExJU1RfRklS
U1QoJmlucC0+c2N0cF9hZGRyX2xpc3QpOworCX0KKwkvKiBzZWFyY2ggYmVnaW5uaW5nIHdpdGgg
dGhlIGxhc3QgdXNlZCBhZGRyZXNzICovCisJZm9yIChsYWRkciA9IHN0Y2ItPmFzb2MubGFzdF91
c2VkX2FkZHJlc3M7IGxhZGRyOworCSAgICAgbGFkZHIgPSBMSVNUX05FWFQobGFkZHIsIHNjdHBf
bnh0X2FkZHIpKSB7CisJCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKKwkJCS8qIGFkZHJlc3Mg
aGFzIGJlZW4gcmVtb3ZlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxhZGRyLT5hY3Rp
b24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJLyogYWRkcmVzcyBpcyBiZWluZyBkZWxl
dGVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlzaWZhID0gc2N0cF9pc19pZmFfYWRkcl9wcmVm
ZXJyZWQobGFkZHItPmlmYSwgZGVzdF9pc19sb29wLCBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCWlm
IChzaWZhID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9
PSAwKSAmJgorCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8
CisJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgorCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2Is
IHNpZmEpKSkpIHsKKwkJCS8qIG9uIHRoZSBuby1ubyBsaXN0ICovCisJCQljb250aW51ZTsKKwkJ
fQorCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7CisJCWF0b21pY19hZGRf
aW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChzdGFy
dF9hdF9iZWdpbm5pbmcgPT0gMCkgeworCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0g
TlVMTDsKKwkJZ290byBzY3RwX2Zyb21fdGhlX3RvcDsKKwl9CisJLyogbm93IHRyeSBmb3IgYW55
IGhpZ2hlciBzY29wZSB0aGFuIHRoZSBkZXN0aW5hdGlvbiAqLworCXN0Y2ItPmFzb2MubGFzdF91
c2VkX2FkZHJlc3MgPSBzdGFydGluZ19wb2ludDsKKwlzdGFydF9hdF9iZWdpbm5pbmcgPSAwOwor
IHNjdHBfZnJvbV90aGVfdG9wMjoKKwlpZiAoc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9
PSBOVUxMKSB7CisJCXN0YXJ0X2F0X2JlZ2lubmluZyA9IDE7CisJCXN0Y2ItPmFzb2MubGFzdF91
c2VkX2FkZHJlc3MgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKKwl9CisJLyog
c2VhcmNoIGJlZ2lubmluZyB3aXRoIHRoZSBsYXN0IHVzZWQgYWRkcmVzcyAqLworCWZvciAobGFk
ZHIgPSBzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzOyBsYWRkcjsKKwkgICAgIGxhZGRyID0g
TElTVF9ORVhUKGxhZGRyLCBzY3RwX254dF9hZGRyKSkgeworCQlpZiAobGFkZHItPmlmYSA9PSBO
VUxMKSB7CisJCQkvKiBhZGRyZXNzIGhhcyBiZWVuIHJlbW92ZWQgKi8KKwkJCWNvbnRpbnVlOwor
CQl9CisJCWlmIChsYWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCS8q
IGFkZHJlc3MgaXMgYmVpbmcgZGVsZXRlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJc2lmYSA9
IHNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShsYWRkci0+aWZhLCBkZXN0X2lzX2xvb3AsCisJ
CQkJCQkgICBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCWlmIChzaWZhID09IE5VTEwpCisJCQljb250
aW51ZTsKKwkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkgICAgIChzY3RwX2lz
X2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCSAgICAobm9uX2Fzb2NfYWRkcl9v
ayAmJgorCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJ
ICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCS8qIG9uIHRo
ZSBuby1ubyBsaXN0ICovCisJCQljb250aW51ZTsKKwkJfQorCQlzdGNiLT5hc29jLmxhc3RfdXNl
ZF9hZGRyZXNzID0gbGFkZHI7CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7
CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChzdGFydF9hdF9iZWdpbm5pbmcgPT0gMCkgewor
CQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gTlVMTDsKKwkJZ290byBzY3RwX2Zyb21f
dGhlX3RvcDI7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9p
ZmEgKgorc2N0cF9zZWxlY3RfbnRoX3ByZWZlcnJlZF9hZGRyX2Zyb21faWZuX2JvdW5kYWxsKHN0
cnVjdCBzY3RwX2lmbiAqaWZuLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCBTQ1RQX1VOVVNFRCwKKyNlbmRpZgorCQkJCQkJ
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCQkJCSBpbnQgbm9uX2Fzb2NfYWRkcl9vaywKKwkJ
CQkJCSB1aW50OF90IGRlc3RfaXNfbG9vcCwKKwkJCQkJCSB1aW50OF90IGRlc3RfaXNfcHJpdiwK
KwkJCQkJCSBpbnQgYWRkcl93YW50ZWQsCisJCQkJCQkgc2FfZmFtaWx5X3QgZmFtLAorCQkJCQkJ
IHNjdHBfcm91dGVfdCAqcm8KKwkJCQkJCSApCit7CisJc3RydWN0IHNjdHBfaWZhICppZmEsICpz
aWZhOworCWludCBudW1fZWxpZ2libGVfYWRkciA9IDA7CisjaWZkZWYgSU5FVDYKKyNpZmRlZiBT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42LCBsc2E2Owor
CisJaWYgKGZhbSA9PSBBRl9JTkVUNikgeworCQltZW1jcHkoJnNpbjYsICZyby0+cm9fZHN0LCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIFNDVFBfS0FNRQorCQkodm9pZClz
YTZfcmVjb3ZlcnNjb3BlKCZzaW42KTsKKyNlbHNlCisJCSh2b2lkKWluNl9yZWNvdmVyc2NvcGUo
JnNpbjYsICZzaW42LnNpbjZfYWRkciwgTlVMTCk7CisjZW5kaWYgIC8qIFNDVFBfS0FNRSAqLwor
CX0KKyNlbmRpZiAgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworI2VuZGlmCS8qIElORVQ2
ICovCisJTElTVF9GT1JFQUNIKGlmYSwgJmlmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmZGVmIElORVQKKwkJaWYgKChpZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNz
LnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYm
CisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkg
eworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlmICgoaWZhLT5sb2NhbGlm
YV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9uX2Fzb2NfYWRkcl9v
ayA9PSAwKSkKKwkJCWNvbnRpbnVlOworCQlzaWZhID0gc2N0cF9pc19pZmFfYWRkcl9wcmVmZXJy
ZWQoaWZhLCBkZXN0X2lzX2xvb3AsCisJCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJaWYg
KHNpZmEgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworI2lmZGVmIElORVQ2CisJCWlmIChmYW0gPT0g
QUZfSU5FVDYgJiYKKwkJICAgIGRlc3RfaXNfbG9vcCAmJgorCQkgICAgc2lmYS0+c3JjX2lzX2xv
b3AgJiYgc2lmYS0+c3JjX2lzX3ByaXYpIHsKKwkJCS8qIGRvbid0IGFsbG93IGZlODA6OjEgdG8g
YmUgYSBzcmMgb24gbG9vcCA6OjEsIHdlIGRvbid0IGxpc3QgaXQKKwkJCSAqIHRvIHRoZSBwZWVy
IHNvIHdlIHdpbGwgZ2V0IGFuIGFib3J0LgorCQkJICovCisJCQljb250aW51ZTsKKwkJfQorI2lm
ZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJaWYgKGZhbSA9PSBBRl9JTkVUNiAmJgorCQkg
ICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAm
JgorCQkgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LnNpbjZfYWRkcikpIHsKKwkJCS8q
IGxpbmstbG9jYWwgPC0+IGxpbmstbG9jYWwgbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgc2NvcGUu
ICovCisJCQltZW1jcHkoJmxzYTYsICZzaWZhLT5hZGRyZXNzLnNpbjYsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSk7CisjaWZkZWYgU0NUUF9LQU1FCisJCQkodm9pZClzYTZfcmVjb3ZlcnNj
b3BlKCZsc2E2KTsKKyNlbHNlCisJCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKCZsc2E2LCAmbHNh
Ni5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmICAvKiBTQ1RQX0tBTUUgKi8KKwkJCWlmIChzaW42
LnNpbjZfc2NvcGVfaWQgIT0gbHNhNi5zaW42X3Njb3BlX2lkKSB7CisJCQkJY29udGludWU7CisJ
CQl9CisJCX0KKyNlbmRpZiAgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworI2VuZGlmCS8q
IElORVQ2ICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkvKiBDaGVjayBpZiB0aGUgSVB2NiBhZGRy
ZXNzIG1hdGNoZXMgdG8gbmV4dC1ob3AuCisJCSAgIEluIHRoZSBtb2JpbGUgY2FzZSwgb2xkIElQ
djYgYWRkcmVzcyBtYXkgYmUgbm90IGRlbGV0ZWQKKwkJICAgZnJvbSB0aGUgaW50ZXJmYWNlLiBU
aGVuLCB0aGUgaW50ZXJmYWNlIGhhcyBwcmV2aW91cyBhbmQKKwkJICAgbmV3IGFkZHJlc3Nlcy4g
IFdlIHNob3VsZCB1c2Ugb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJCSAgIG5leHQtaG9wLiAg
KGJ5IG1pY2NoaWUpCisJCSAqLworI2lmZGVmIElORVQ2CisJCWlmIChzdGNiICYmIGZhbSA9PSBB
Rl9JTkVUNiAmJgorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBf
ZXAsIFNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKKwkJCWlmIChzY3RwX3Y2c3JjX21hdGNoX25leHRo
b3AoJnNpZmEtPmFkZHJlc3Muc2luNiwgcm8pCisJCQkgICAgPT0gMCkgeworCQkJCWNvbnRpbnVl
OworCQkJfQorCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCS8qIEF2b2lkIHRvcG9sb2dpY2Fs
bHkgaW5jb3JyZWN0IElQdjQgYWRkcmVzcyAqLworCQlpZiAoc3RjYiAmJiBmYW0gPT0gQUZfSU5F
VCAmJgorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIFND
VFBfTU9CSUxJVFlfQkFTRSkpIHsKKwkJCWlmIChzY3RwX3Y0c3JjX21hdGNoX25leHRob3Aoc2lm
YSwgcm8pID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorI2VuZGlmCisjZW5kaWYK
KwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoaWZhLCAmc3Rj
Yi0+YXNvYy5zY29wZSwgMCkgPT0gMCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKCgo
bm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0
ZWQoc3RjYiwgc2lmYSkpKSB8fAorCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCisJCQkgICAg
IChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJCSAgICAgKCFzY3Rw
X2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7CisJCQkJLyoKKwkJCQkgKiBJdCBpcyBy
ZXN0cmljdGVkIGZvciBzb21lIHJlYXNvbi4uCisJCQkJICogcHJvYmFibHkgbm90IHlldCBhZGRl
ZC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlpZiAobnVtX2VsaWdpYmxl
X2FkZHIgPj0gYWRkcl93YW50ZWQpIHsKKwkJCXJldHVybiAoc2lmYSk7CisJCX0KKwkJbnVtX2Vs
aWdpYmxlX2FkZHIrKzsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitzdGF0aWMgaW50Citz
Y3RwX2NvdW50X251bV9wcmVmZXJyZWRfYm91bmRhbGwoc3RydWN0IHNjdHBfaWZuICppZm4sCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wIFNDVFBfVU5VU0VELAorI2VuZGlmCisJ
CQkJICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICBpbnQgbm9uX2Fzb2NfYWRkcl9vaywK
KwkJCQkgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJCSAgdWludDhfdCBkZXN0X2lzX3ByaXYs
CisJCQkJICBzYV9mYW1pbHlfdCBmYW0pCit7CisJc3RydWN0IHNjdHBfaWZhICppZmEsICpzaWZh
OworCWludCBudW1fZWxpZ2libGVfYWRkciA9IDA7CisKKwlMSVNUX0ZPUkVBQ0goaWZhLCAmaWZu
LT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZkZWYg
SU5FVAorCQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJ
ICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJICAgICAg
ICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJ
Y29udGludWU7CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmICgoaWZhLT5hZGRyZXNz
LnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJICAgIChzdGNiICE9IE5VTEwpICYmCisJ
CSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgewor
CQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlmICgoaWZhLT5sb2NhbGlmYV9m
bGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9
PSAwKSkgeworCQkJY29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJl
ZmVycmVkKGlmYSwgZGVzdF9pc19sb29wLAorCQkJCQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7CisJ
CWlmIChzaWZhID09IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiKSB7CisJ
CQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDAp
ID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sg
PT0gMCkgJiYKKwkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkg
fHwKKwkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgorCQkJICAgICAoc2N0cF9pc19hZGRyX3Jl
c3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCisJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmco
c3RjYiwgc2lmYSkpKSkgeworCQkJCS8qCisJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29t
ZSByZWFzb24uLgorCQkJCSAqIHByb2JhYmx5IG5vdCB5ZXQgYWRkZWQuCisJCQkJICovCisJCQkJ
Y29udGludWU7CisJCQl9CisJCX0KKwkJbnVtX2VsaWdpYmxlX2FkZHIrKzsKKwl9CisJcmV0dXJu
IChudW1fZWxpZ2libGVfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0
cF9jaG9vc2VfYm91bmRhbGwoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsCisJCSAgICAgc2N0cF9yb3V0ZV90ICpybywKKwkJICAgICB1aW50MzJfdCB2cmZfaWQsCisJ
CSAgICAgdWludDhfdCBkZXN0X2lzX3ByaXYsCisJCSAgICAgdWludDhfdCBkZXN0X2lzX2xvb3As
CisJCSAgICAgaW50IG5vbl9hc29jX2FkZHJfb2ssCisJCSAgICAgc2FfZmFtaWx5X3QgZmFtKQor
eworCWludCBjdXJfYWRkcl9udW0gPSAwLCBudW1fcHJlZmVycmVkID0gMDsKKwl2b2lkICppZm47
CisJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbiwgKmxvb2tlZF9hdCA9IE5VTEwsICplbWl0X2lm
bjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lmYTsKKwl1aW50MzJfdCBpZm5faW5k
ZXg7CisJc3RydWN0IHNjdHBfdnJmICp2cmY7CisjaWZkZWYgSU5FVAorCWludCByZXRyaWVkID0g
MDsKKyNlbmRpZgorCisJLyotCisJICogRm9yIGJvdW5kYWxsIHdlIGNhbiB1c2UgYW55IGFkZHJl
c3MgaW4gdGhlIGFzc29jaWF0aW9uLgorCSAqIElmIG5vbl9hc29jX2FkZHJfb2sgaXMgc2V0IHdl
IGNhbiB1c2UgYW55IGFkZHJlc3MgKGF0IGxlYXN0IGluCisJICogdGhlb3J5KS4gU28gd2UgbG9v
ayBmb3IgcHJlZmVycmVkIGFkZHJlc3NlcyBmaXJzdC4gSWYgd2UgZmluZCBvbmUsCisJICogd2Ug
dXNlIGl0LiBPdGhlcndpc2Ugd2UgbmV4dCB0cnkgdG8gZ2V0IGFuIGFkZHJlc3Mgb24gdGhlCisJ
ICogaW50ZXJmYWNlLCB3aGljaCB3ZSBzaG91bGQgYmUgYWJsZSB0byBkbyAodW5sZXNzIG5vbl9h
c29jX2FkZHJfb2sKKwkgKiBpcyBmYWxzZSBhbmQgd2UgYXJlIHJvdXRlZCBvdXQgdGhhdCB3YXkp
LiBJbiB0aGVzZSBjYXNlcyB3aGVyZSB3ZQorCSAqIGNhbid0IHVzZSB0aGUgYWRkcmVzcyBvZiB0
aGUgaW50ZXJmYWNlIHdlIGdvIHRocm91Z2ggYWxsIHRoZQorCSAqIGlmbidzIGxvb2tpbmcgZm9y
IGFuIGFkZHJlc3Mgd2UgY2FuIHVzZSBhbmQgZmlsbCB0aGF0IGluLiBQdW50aW5nCisJICogbWVh
bnMgd2Ugc2VuZCBiYWNrIGFkZHJlc3MgMCwgd2hpY2ggd2lsbCBwcm9iYWJseSBjYXVzZSBwcm9i
bGVtcworCSAqIGFjdHVhbGx5IHNpbmNlIHRoZW4gSVAgd2lsbCBmaWxsIGluIHRoZSBhZGRyZXNz
IG9mIHRoZSByb3V0ZSBpZm4sCisJICogd2hpY2ggbWVhbnMgd2UgcHJvYmFibHkgYWxyZWFkeSBy
ZWplY3RlZCBpdC4uIGkuZS4gaGVyZSBjb21lcyBhbgorCSAqIGFib3J0IDotPC4KKwkgKi8KKwl2
cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKQorCQlyZXR1cm4g
KE5VTEwpOworCisJaWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7CisJaWZu
X2luZGV4ID0gU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7CisJU0NUUERCRyhTQ1RQ
X0RFQlVHX09VVFBVVDIsImlmbiBmcm9tIHJvdXRlOiVwIGlmbl9pbmRleDolZFxuIiwgaWZuLCBp
Zm5faW5kZXgpOworCWVtaXRfaWZuID0gbG9va2VkX2F0ID0gc2N0cF9pZm4gPSBzY3RwX2ZpbmRf
aWZuKGlmbiwgaWZuX2luZGV4KTsKKwlpZiAoc2N0cF9pZm4gPT0gTlVMTCkgeworCQkvKiA/PyBX
ZSBkb24ndCBoYXZlIHRoaXMgZ3V5ID8/ICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQy
LCJObyBpZm4gZW1pdCBpbnRlcmZhY2U/XG4iKTsKKwkJZ290byBib3VuZF9hbGxfcGxhbl9iOwor
CX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiaWZuX2luZGV4OiVkIG5hbWU6JXMgaXMg
ZW1pdCBpbnRlcmZhY2VcbiIsCisJCWlmbl9pbmRleCwgc2N0cF9pZm4tPmlmbl9uYW1lKTsKKwor
CWlmIChuZXQpIHsKKwkJY3VyX2FkZHJfbnVtID0gbmV0LT5pbmR4X29mX2VsaWdpYmxlX25leHRf
dG9fdXNlOworCX0KKwludW1fcHJlZmVycmVkID0gc2N0cF9jb3VudF9udW1fcHJlZmVycmVkX2Jv
dW5kYWxsKHNjdHBfaWZuLAorCQkJCQkJCSAgaW5wLCBzdGNiLAorCQkJCQkJCSAgbm9uX2Fzb2Nf
YWRkcl9vaywKKwkJCQkJCQkgIGRlc3RfaXNfbG9vcCwKKwkJCQkJCQkgIGRlc3RfaXNfcHJpdiwg
ZmFtKTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkZvdW5kICVkIHByZWZlcnJlZCBz
b3VyY2UgYWRkcmVzc2VzIGZvciBpbnRmOiVzXG4iLAorCQludW1fcHJlZmVycmVkLCBzY3RwX2lm
bi0+aWZuX25hbWUpOworCWlmIChudW1fcHJlZmVycmVkID09IDApIHsKKwkJLyoKKwkJICogbm8g
ZWxpZ2libGUgYWRkcmVzc2VzLCB3ZSBtdXN0IHVzZSBzb21lIG90aGVyIGludGVyZmFjZQorCQkg
KiBhZGRyZXNzIGlmIHdlIGNhbiBmaW5kIG9uZS4KKwkJICovCisJCWdvdG8gYm91bmRfYWxsX3Bs
YW5fYjsKKwl9CisJLyoKKwkgKiBPayB3ZSBoYXZlIG51bV9lbGlnaWJsZV9hZGRyIHNldCB3aXRo
IGhvdyBtYW55IHdlIGNhbiB1c2UsIHRoaXMKKwkgKiBtYXkgdmFyeSBmcm9tIGNhbGwgdG8gY2Fs
bCBkdWUgdG8gYWRkcmVzc2VzIGJlaW5nIGRlcHJlY2F0ZWQKKwkgKiBldGMuLgorCSAqLworCWlm
IChjdXJfYWRkcl9udW0gPj0gbnVtX3ByZWZlcnJlZCkgeworCQljdXJfYWRkcl9udW0gPSAwOwor
CX0KKwkvKgorCSAqIHNlbGVjdCB0aGUgbnRoIGFkZHJlc3MgZnJvbSB0aGUgbGlzdCAod2hlcmUg
Y3VyX2FkZHJfbnVtIGlzIHRoZQorCSAqIG50aCkgYW5kIDAgaXMgdGhlIGZpcnN0IG9uZSwgMSBp
cyB0aGUgc2Vjb25kIG9uZSBldGMuLi4KKwkgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
MiwgImN1cl9hZGRyX251bTolZFxuIiwgY3VyX2FkZHJfbnVtKTsKKworCXNjdHBfaWZhID0gc2N0
cF9zZWxlY3RfbnRoX3ByZWZlcnJlZF9hZGRyX2Zyb21faWZuX2JvdW5kYWxsKHNjdHBfaWZuLCBp
bnAsIHN0Y2IsIG5vbl9hc29jX2FkZHJfb2ssIGRlc3RfaXNfbG9vcCwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVz
dF9pc19wcml2LCBjdXJfYWRkcl9udW0sIGZhbSwgcm8pOworCisJLyogaWYgc2N0cF9pZmEgaXMg
TlVMTCBzb21ldGhpbmcgY2hhbmdlZD8/LCBmYWxsIHRvIHBsYW4gYi4gKi8KKwlpZiAoc2N0cF9p
ZmEpIHsKKwkJYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZhLT5yZWZjb3VudCwgMSk7CisJCWlmIChu
ZXQpIHsKKwkJCS8qIHNhdmUgb2ZmIHdoZXJlIHRoZSBuZXh0IG9uZSB3ZSB3aWxsIHdhbnQgKi8K
KwkJCW5ldC0+aW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1cl9hZGRyX251bSArIDE7
CisJCX0KKwkJcmV0dXJuIChzY3RwX2lmYSk7CisJfQorCS8qCisJICogcGxhbl9iOiBMb29rIGF0
IGFsbCBpbnRlcmZhY2VzIGFuZCBmaW5kIGEgcHJlZmVycmVkIGFkZHJlc3MuIElmCisJICogbm8g
cHJlZmVycmVkIGZhbGwgdGhyb3VnaCB0byBwbGFuX2MuCisJICovCisgYm91bmRfYWxsX3BsYW5f
YjoKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlRyeWluZyBQbGFuIEJcbiIpOworCUxJ
U1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDIsICJFeGFtaW5lIGludGVyZmFjZSAlc1xuIiwKKwkJCXNjdHBf
aWZuLT5pZm5fbmFtZSk7CisJCWlmIChkZXN0X2lzX2xvb3AgPT0gMCAmJiBTQ1RQX0lGTl9JU19J
RlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIHdyb25nIGJhc2Ugc2NvcGUgKi8KKwkJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQyLCAic2tpcFxuIik7CisJCQljb250aW51ZTsKKwkJfQorCQlp
ZiAoKHNjdHBfaWZuID09IGxvb2tlZF9hdCkgJiYgbG9va2VkX2F0KSB7CisJCQkvKiBhbHJlYWR5
IGxvb2tlZCBhdCB0aGlzIGd1eSAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJh
bHJlYWR5IHNlZW5cbiIpOworCQkJY29udGludWU7CisJCX0KKwkJbnVtX3ByZWZlcnJlZCA9IHNj
dHBfY291bnRfbnVtX3ByZWZlcnJlZF9ib3VuZGFsbChzY3RwX2lmbiwgaW5wLCBzdGNiLCBub25f
YXNvY19hZGRyX29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19sb29wLCBkZXN0X2lzX3ByaXYsIGZhbSk7
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLAorCQkJIkZvdW5kIGlmbjolcCAlZCBwcmVm
ZXJyZWQgc291cmNlIGFkZHJlc3Nlc1xuIiwKKwkJCWlmbiwgbnVtX3ByZWZlcnJlZCk7CisJCWlm
IChudW1fcHJlZmVycmVkID09IDApIHsKKwkJCS8qIE5vbmUgb24gdGhpcyBpbnRlcmZhY2UuICov
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIk5vIHByZWZlcnJlZCAtLSBza2lwcGlu
ZyB0byBuZXh0XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQyLAorCQkJIm51bSBwcmVmZXJyZWQ6JWQgb24gaW50ZXJmYWNlOiVwIGN1cl9hZGRyX251
bTolZFxuIiwKKwkJCW51bV9wcmVmZXJyZWQsICh2b2lkICopc2N0cF9pZm4sIGN1cl9hZGRyX251
bSk7CisKKwkJLyoKKwkJICogT2sgd2UgaGF2ZSBudW1fZWxpZ2libGVfYWRkciBzZXQgd2l0aCBo
b3cgbWFueSB3ZSBjYW4KKwkJICogdXNlLCB0aGlzIG1heSB2YXJ5IGZyb20gY2FsbCB0byBjYWxs
IGR1ZSB0byBhZGRyZXNzZXMKKwkJICogYmVpbmcgZGVwcmVjYXRlZCBldGMuLgorCQkgKi8KKwkJ
aWYgKGN1cl9hZGRyX251bSA+PSBudW1fcHJlZmVycmVkKSB7CisJCQljdXJfYWRkcl9udW0gPSAw
OworCQl9CisJCXNpZmEgPSBzY3RwX3NlbGVjdF9udGhfcHJlZmVycmVkX2FkZHJfZnJvbV9pZm5f
Ym91bmRhbGwoc2N0cF9pZm4sIGlucCwgc3RjYiwgbm9uX2Fzb2NfYWRkcl9vaywgZGVzdF9pc19s
b29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19wcml2LCBjdXJfYWRkcl9udW0sIGZhbSwgcm8p
OworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChuZXQpIHsKKwkJCW5l
dC0+aW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1cl9hZGRyX251bSArIDE7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIndlIHNlbGVjdGVkICVkXG4iLAorCQkJCWN1cl9h
ZGRyX251bSk7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlNvdXJjZToiKTsKKwkJ
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZzaWZhLT5hZGRyZXNzLnNhKTsKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiRGVzdDoiKTsKKwkJCVNDVFBEQkdfQUREUihT
Q1RQX0RFQlVHX09VVFBVVDIsICZuZXQtPnJvLl9sX2FkZHIuc2EpOworCQl9CisJCWF0b21pY19h
ZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorI2lmZGVm
IElORVQKK2FnYWluX3dpdGhfcHJpdmF0ZV9hZGRyZXNzZXNfYWxsb3dlZDoKKyNlbmRpZgorCS8q
IHBsYW5fYzogZG8gd2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGFkZHJlc3Mgb24gdGhlIGVtaXQgaW50
ZXJmYWNlICovCisJc2lmYSA9IE5VTEw7CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIlRy
eWluZyBQbGFuIEM6IGZpbmQgYWNjZXB0YWJsZSBvbiBpbnRlcmZhY2VcbiIpOworCWlmIChlbWl0
X2lmbiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJKdW1wIHRvIFBs
YW4gRCAtIG5vIGVtaXRfaWZuXG4iKTsKKwkJZ290byBwbGFuX2Q7CisJfQorCUxJU1RfRk9SRUFD
SChzY3RwX2lmYSwgJmVtaXRfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworCQlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMiwgImlmYTolcFxuIiwgKHZvaWQgKilzY3RwX2lmYSk7CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAt
PmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEt
PmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDIsIkphaWxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYm
CisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9
IDApKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiSmFpbGVkXG4iKTsKKwkJCWNv
bnRpbnVlOworCQl9CisjZW5kaWYKKyNlbmRpZgorCQlpZiAoKHNjdHBfaWZhLT5sb2NhbGlmYV9m
bGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9
PSAwKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIkRlZmVyXG4iKTsKKwkJCWNv
bnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFibGUoc2N0cF9p
ZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJaWYgKHNp
ZmEgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJJRkEgbm90IGFj
Y2VwdGFibGVcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChz
Y3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2lmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDAp
IHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIk5PVCBpbiBzY29wZVxuIik7CisJ
CQkJc2lmYSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKChub25fYXNvY19h
ZGRyX29rID09IDApICYmCisJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBz
aWZhKSkpIHx8CisJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCSAgICAgKHNjdHBfaXNf
YWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkJICAgICAoIXNjdHBfaXNfYWRkcl9w
ZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHJlc3RyaWN0ZWQg
Zm9yIHNvbWUKKwkJCQkgKiByZWFzb24uLiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgorCQkJCSAq
LworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSXRzIHJlc3RyaWN0ZWRcbiIpOwor
CQkJCXNpZmEgPSBOVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCWF0b21pY19hZGRf
aW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCWdvdG8gb3V0OworCX0KKyBwbGFuX2Q6CisJLyoK
KwkgKiBwbGFuX2Q6IFdlIGFyZSBpbiB0cm91YmxlLiBObyBwcmVmZXJyZWQgYWRkcmVzcyBvbiB0
aGUgZW1pdAorCSAqIGludGVyZmFjZS4gQW5kIG5vdCBldmVuIGEgcHJlZmVycmVkIGFkZHJlc3Mg
b24gYWxsIGludGVyZmFjZXMuCisJICogR28gb3V0IGFuZCBzZWUgaWYgd2UgY2FuIGZpbmQgYW4g
YWNjZXB0YWJsZSBhZGRyZXNzIHNvbWV3aGVyZQorCSAqIGFtb25nc3QgYWxsIGludGVyZmFjZXMu
CisJICovCisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJUcnlpbmcgUGxhbiBEIGxvb2tl
ZF9hdCBpcyAlcFxuIiwgKHZvaWQgKilsb29rZWRfYXQpOworCUxJU1RfRk9SRUFDSChzY3RwX2lm
biwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJaWYgKGRlc3RfaXNfbG9vcCA9PSAwICYm
IFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJLyogd3JvbmcgYmFzZSBzY29w
ZSAqLworCQkJY29udGludWU7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9p
Zm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRl
ZiBJTkVUCisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVU
KSAmJgorCQkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRy
KSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJ
CWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJ
ICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDAp
KSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJaWYgKChzY3RwX2lm
YS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgorCQkJICAgIChub25f
YXNvY19hZGRyX29rID09IDApKQorCQkJCWNvbnRpbnVlOworCQkJc2lmYSA9IHNjdHBfaXNfaWZh
X2FkZHJfYWNjZXB0YWJsZShzY3RwX2lmYSwKKwkJCQkJCQkgICBkZXN0X2lzX2xvb3AsCisJCQkJ
CQkJICAgZGVzdF9pc19wcml2LCBmYW0pOworCQkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCQljb250
aW51ZTsKKwkJCWlmIChzdGNiKSB7CisJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShz
aWZhLCAmc3RjYi0+YXNvYy5zY29wZSwgMCkgPT0gMCkgeworCQkJCQlzaWZhID0gTlVMTDsKKwkJ
CQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYK
KwkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCQkJ
ICAgIChub25fYXNvY19hZGRyX29rICYmCisJCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0
ZWQoc3RjYiwgc2lmYSkpICYmCisJCQkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2Is
IHNpZmEpKSkpIHsKKwkJCQkJLyoKKwkJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZQor
CQkJCQkgKiByZWFzb24uLiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgorCQkJCQkgKi8KKwkJCQkJ
c2lmYSA9IE5VTEw7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWdvdG8gb3V0Owor
CQl9CisJfQorI2lmZGVmIElORVQKKwlpZiAoc3RjYikgeworCQlpZiAoKHJldHJpZWQgPT0gMCkg
JiYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwKSkgeworCQkJc3RjYi0+
YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID0gMTsKKwkJCXJldHJpZWQgPSAxOworCQkJZ290
byBhZ2Fpbl93aXRoX3ByaXZhdGVfYWRkcmVzc2VzX2FsbG93ZWQ7CisJCX0gZWxzZSBpZiAocmV0
cmllZCA9PSAxKSB7CisJCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAwOwor
CQl9CisJfQorI2VuZGlmCitvdXQ6CisjaWZkZWYgSU5FVAorCWlmIChzaWZhKSB7CisJCWlmIChy
ZXRyaWVkID09IDEpIHsKKwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwg
bmV4dF9pZm4pIHsKKwkJCQlpZiAoZGVzdF9pc19sb29wID09IDAgJiYgU0NUUF9JRk5fSVNfSUZU
X0xPT1Aoc2N0cF9pZm4pKSB7CisJCQkJCS8qIHdyb25nIGJhc2Ugc2NvcGUgKi8KKwkJCQkJY29u
dGludWU7CisJCQkJfQorCQkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFs
aXN0LCBuZXh0X2lmYSkgeworCQkJCQlzdHJ1Y3Qgc2N0cF9pZmEgKnRtcF9zaWZhOworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQkJCWlmICgoc2N0cF9pZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCQkJCSAgICAocHJpc29uX2NoZWNr
X2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWlmICgoc2N0cF9pZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJCQkgICAgKHByaXNvbl9jaGVj
a19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJCQkJY29u
dGludWU7CisJCQkJCX0KKyNlbmRpZgorI2VuZGlmCisJCQkJCWlmICgoc2N0cF9pZmEtPmxvY2Fs
aWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKKwkJCQkJICAgIChub25fYXNvY19h
ZGRyX29rID09IDApKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcF9zaWZhID0gc2N0cF9pc19p
ZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBkZXN0X2lzX2xvb3AsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCQkJaWYgKHRtcF9zaWZh
ID09IE5VTEwpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmICh0bXBfc2lmYSA9
PSBzaWZhKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAoc3RjYikgeworCQkJ
CQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZSh0bXBfc2lmYSwKKwkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKKwkJCQkJ
CQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkg
JiYKKwkJCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKSkp
IHx8CisJCQkJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCQkJCSAgICAgKHNjdHBfaXNf
YWRkcl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKSkgJiYKKwkJCQkJCSAgICAgKCFzY3RwX2lz
X2FkZHJfcGVuZGluZyhzdGNiLCB0bXBfc2lmYSkpKSkgeworCQkJCQkJCS8qCisJCQkJCQkJICog
SXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZQorCQkJCQkJCSAqIHJlYXNvbi4uIHByb2JhYmx5IG5v
dCB5ZXQgYWRkZWQuCisJCQkJCQkJICovCisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJ
CX0KKwkJCQkJaWYgKCh0bXBfc2lmYS0+YWRkcmVzcy5zaW4uc2luX2ZhbWlseSA9PSBBRl9JTkVU
KSAmJgorCQkJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmKHRtcF9zaWZhLT5hZGRyZXNz
LnNpbi5zaW5fYWRkcikpKSkgeworCQkJCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIHRtcF9zaWZhKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfQorCQlhdG9taWNfYWRk
X2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCX0KKyNlbmRpZgorCXJldHVybiAoc2lmYSk7Cit9
CisKKworCisvKiB0Y2IgbWF5IGJlIE5VTEwgKi8KK3N0cnVjdCBzY3RwX2lmYSAqCitzY3RwX3Nv
dXJjZV9hZGRyZXNzX3NlbGVjdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJICAgICAg
c3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgc2N0cF9yb3V0ZV90ICpybywKKwkJCSAg
ICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJCSAgICAgIGludCBub25fYXNvY19hZGRyX29r
LCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfaWZhICphbnN3ZXI7CisJdWludDhf
dCBkZXN0X2lzX3ByaXYsIGRlc3RfaXNfbG9vcDsKKwlzYV9mYW1pbHlfdCBmYW07CisjaWZkZWYg
SU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSAoc3RydWN0IHNvY2thZGRyX2luICopJnJv
LT5yb19kc3Q7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnRv
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvLT5yb19kc3Q7CisjZW5kaWYKKworCS8qKgor
CSAqIFJ1bGVzOgorCSAqIC0gRmluZCB0aGUgcm91dGUgaWYgbmVlZGVkLCBjYWNoZSBpZiBJIGNh
bi4KKwkgKiAtIExvb2sgYXQgaW50ZXJmYWNlIGFkZHJlc3MgaW4gcm91dGUsIElzIGl0IGluIHRo
ZSBib3VuZCBsaXN0LiBJZiBzbyB3ZQorCSAqICAgaGF2ZSB0aGUgYmVzdCBzb3VyY2UuCisJICog
LSBJZiBub3Qgd2UgbXVzdCByb3RhdGUgYW1vbmdzdCB0aGUgYWRkcmVzc2VzLgorCSAqCisJICog
Q2F2ZXRzIGFuZCBpc3N1ZXMKKwkgKgorCSAqIERvIHdlIG5lZWQgdG8gcGF5IGF0dGVudGlvbiB0
byBzY29wZS4gV2UgY2FuIGhhdmUgYSBwcml2YXRlIGFkZHJlc3MKKwkgKiBvciBhIGdsb2JhbCBh
ZGRyZXNzIHdlIGFyZSBzb3VyY2luZyBvciBzZW5kaW5nIHRvLiBTbyBpZiB3ZSBkcmF3CisJICog
aXQgb3V0CisJICogenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6egorCSAqIEZvciBWNAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCSAqICAgICAgc291cmNlICAgICAqICAgICAgZGVzdCAgKiAgcmVzdWx0
CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8YT4g
IFByaXZhdGUgICAgKiAgICBHbG9iYWwgICogIE5BVAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogPGI+ICBQcml2YXRlICAgICogICAgUHJpdmF0ZSAq
ICBObyBwcm9ibGVtCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKwkgKiA8Yz4gIEdsb2JhbCAgICAgKiAgICBQcml2YXRlICogIEh1aCwgSG93IHdpbGwgdGhp
cyB3b3JrPworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJ
ICogPGQ+ICBHbG9iYWwgICAgICogICAgR2xvYmFsICAqICBObyBQcm9ibGVtCisJICotLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiB6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6CisJICogRm9yIFY2CisJICot
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgIHNvdXJj
ZSAgICAgKiAgICAgIGRlc3QgICogIHJlc3VsdAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisJICogPGE+ICBMaW5rbG9jYWwgICogICAgR2xvYmFsICAqCisJ
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8Yj4gIExp
bmtsb2NhbCAgKiBMaW5rbG9jYWwgICogIE5vIHByb2JsZW0KKwkgKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIDxjPiAgR2xvYmFsICAgICAqIExpbmtsb2Nh
bCAgKiAgSHVoLCBIb3cgd2lsbCB0aGlzIHdvcms/CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8ZD4gIEdsb2JhbCAgICAgKiAgICBHbG9iYWwgICog
IE5vIFByb2JsZW0KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCSAqIHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enoKKwkgKgorCSAqIEFuZCB0aGVuIHdlIGFkZCB0byB0aGF0IHdoYXQgaGFwcGVucyBpZiB0
aGVyZSBhcmUgbXVsdGlwbGUgYWRkcmVzc2VzCisJICogYXNzaWduZWQgdG8gYW4gaW50ZXJmYWNl
LiBSZW1lbWJlciB0aGUgaWZhIG9uIGEgaWZuIGlzIGEgbGlua2VkCisJICogbGlzdCBvZiBhZGRy
ZXNzZXMuIFNvIG9uZSBpbnRlcmZhY2UgY2FuIGhhdmUgbW9yZSB0aGFuIG9uZSBJUAorCSAqIGFk
ZHJlc3MuIFdoYXQgaGFwcGVucyBpZiB3ZSBoYXZlIGJvdGggYSBwcml2YXRlIGFuZCBhIGdsb2Jh
bAorCSAqIGFkZHJlc3M/IERvIHdlIHRoZW4gdXNlIGNvbnRleHQgb2YgZGVzdGluYXRpb24gdG8g
c29ydCBvdXQgd2hpY2gKKwkgKiBvbmUgaXMgYmVzdD8gQW5kIHdoYXQgYWJvdXQgTkFUJ3Mgc2Vu
ZGluZyBQLT5HIG1heSBnZXQgeW91IGEgTkFUCisJICogdHJhbnNsYXRpb24sIG9yIHNob3VsZCB5
b3Ugc2VsZWN0IHRoZSBHIHRoYXRzIG9uIHRoZSBpbnRlcmZhY2UgaW4KKwkgKiBwcmVmZXJlbmNl
LgorCSAqCisJICogRGVjaXNpb25zOgorCSAqCisJICogLSBjb3VudCB0aGUgbnVtYmVyIG9mIGFk
ZHJlc3NlcyBvbiB0aGUgaW50ZXJmYWNlLgorCSAqIC0gaWYgaXQgaXMgb25lLCBubyBwcm9ibGVt
IGV4Y2VwdCBjYXNlIDxjPi4KKwkgKiAgIEZvciA8YT4gd2Ugd2lsbCBhc3N1bWUgYSBOQVQgb3V0
IHRoZXJlLgorCSAqIC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUsIHRoZW4gd2UgbmVlZCB0
byB3b3JyeSBhYm91dCBzY29wZSBQCisJICogICBvciBHLiBXZSBzaG91bGQgcHJlZmVyIEcgLT4g
RyBhbmQgUCAtPiBQIGlmIHBvc3NpYmxlLgorCSAqICAgVGhlbiBhcyBhIHNlY29uZGFyeSBmYWxs
IGJhY2sgdG8gbWl4ZWQgdHlwZXMgRy0+UCBiZWluZyBhIGxhc3QKKwkgKiAgIGRpdGNoIG9uZS4K
KwkgKiAtIFRoZSBhYm92ZSBhbGwgd29ya3MgZm9yIGJvdW5kIGFsbCwgYnV0IGJvdW5kIHNwZWNp
ZmljIHdlIG5lZWQgdG8KKwkgKiAgIHVzZSB0aGUgc2FtZSBjb25jZXB0IGJ1dCBpbnN0ZWFkIG9u
bHkgY29uc2lkZXIgdGhlIGJvdW5kCisJICogICBhZGRyZXNzZXMuIElmIHRoZSBib3VuZCBzZXQg
aXMgTk9UIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UgdGhlbgorCSAqICAgd2UgbXVzdCB1c2Ug
cm90YXRpb24gYW1vbmdzdCB0aGUgYm91bmQgYWRkcmVzc2VzLi4KKwkgKi8KKwlpZiAocm8tPnJv
X3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogTmVlZCBhIHJvdXRlIHRvIGNhY2hlLgorCQkgKi8K
KwkJU0NUUF9SVEFMTE9DKHJvLCB2cmZfaWQsIGlucC0+ZmlibnVtKTsKKwl9CisJaWYgKHJvLT5y
b19ydCA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwkvKiBPbiBXaW5kb3dzIHRoZSBzYV9mYW1pbHkgaXMgVV9TSE9S
VCBvciBBRERSRVNTX0ZBTUlMWSAqLworCWZhbSA9IChzYV9mYW1pbHlfdClyby0+cm9fZHN0LnNh
X2ZhbWlseTsKKyNlbHNlCisJZmFtID0gcm8tPnJvX2RzdC5zYV9mYW1pbHk7CisjZW5kaWYKKwlk
ZXN0X2lzX3ByaXYgPSBkZXN0X2lzX2xvb3AgPSAwOworCS8qIFNldHVwIG91ciBzY29wZXMgZm9y
IHRoZSBkZXN0aW5hdGlvbiAqLworCXN3aXRjaCAoZmFtKSB7CisjaWZkZWYgSU5FVAorCWNhc2Ug
QUZfSU5FVDoKKwkJLyogU2NvcGUgYmFzZWQgb24gb3V0Ym91bmQgYWRkcmVzcyAqLworCQlpZiAo
SU40X0lTTE9PUEJBQ0tfQUREUkVTUygmdG8tPnNpbl9hZGRyKSkgeworCQkJZGVzdF9pc19sb29w
ID0gMTsKKwkJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJCS8qIG1hcmsgaXQgYXMgbG9jYWwgKi8K
KwkJCQluZXQtPmFkZHJfaXNfbG9jYWwgPSAxOworCQkJfQorCQl9IGVsc2UgaWYgKChJTjRfSVNQ
UklWQVRFX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpKSB7CisJCQlkZXN0X2lzX3ByaXYgPSAxOwor
CQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQkv
KiBTY29wZSBiYXNlZCBvbiBvdXRib3VuZCBhZGRyZXNzICovCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnRvNi0+c2luNl9h
ZGRyKSkgeworI2Vsc2UKKwkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYtPnNpbjZfYWRk
cikgfHwKKwkJICAgIFNDVFBfUk9VVEVfSVNfUkVBTF9MT09QKHJvKSkgeworI2VuZGlmCisJCQkv
KgorCQkJICogSWYgdGhlIGFkZHJlc3MgaXMgYSBsb29wYmFjayBhZGRyZXNzLCB3aGljaAorCQkJ
ICogY29uc2lzdHMgb2YgIjo6MSIgT1IgImZlODA6OjElbG8wIiwgd2UgYXJlIGxvb3BiYWNrCisJ
CQkgKiBzY29wZS4gQnV0IHdlIGRvbid0IHVzZSBkZXN0X2lzX3ByaXYgKGxpbmsgbG9jYWwKKwkJ
CSAqIGFkZHJlc3NlcykuCisJCQkgKi8KKwkJCWRlc3RfaXNfbG9vcCA9IDE7CisJCQlpZiAobmV0
ICE9IE5VTEwpIHsKKwkJCQkvKiBtYXJrIGl0IGFzIGxvY2FsICovCisJCQkJbmV0LT5hZGRyX2lz
X2xvY2FsID0gMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnRv
Ni0+c2luNl9hZGRyKSkgeworCQkJZGVzdF9pc19wcml2ID0gMTsKKwkJfQorCQlicmVhazsKKyNl
bmRpZgorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlNlbGVjdCBzb3VyY2UgYWRk
ciBmb3I6Iik7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2Nr
YWRkciAqKSZyby0+cm9fZHN0KTsKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qCisJCSAqIEJvdW5k
IGFsbCBjYXNlCisJCSAqLworCQlhbnN3ZXIgPSBzY3RwX2Nob29zZV9ib3VuZGFsbChpbnAsIHN0
Y2IsIG5ldCwgcm8sIHZyZl9pZCwKKwkJCQkJICAgICAgZGVzdF9pc19wcml2LCBkZXN0X2lzX2xv
b3AsCisJCQkJCSAgICAgIG5vbl9hc29jX2FkZHJfb2ssIGZhbSk7CisJCVNDVFBfSVBJX0FERFJf
UlVOTE9DSygpOworCQlyZXR1cm4gKGFuc3dlcik7CisJfQorCS8qCisJICogU3Vic2V0IGJvdW5k
IGNhc2UKKwkgKi8KKwlpZiAoc3RjYikgeworCQlhbnN3ZXIgPSBzY3RwX2Nob29zZV9ib3VuZHNw
ZWNpZmljX3N0Y2IoaW5wLCBzdGNiLCBybywKKwkJCQkJCQl2cmZfaWQsCWRlc3RfaXNfcHJpdiwK
KwkJCQkJCQlkZXN0X2lzX2xvb3AsCisJCQkJCQkJbm9uX2Fzb2NfYWRkcl9vaywgZmFtKTsKKwl9
IGVsc2UgeworCQlhbnN3ZXIgPSBzY3RwX2Nob29zZV9ib3VuZHNwZWNpZmljX2lucChpbnAsIHJv
LCB2cmZfaWQsCisJCQkJCQkgICAgICAgbm9uX2Fzb2NfYWRkcl9vaywKKwkJCQkJCSAgICAgICBk
ZXN0X2lzX3ByaXYsCisJCQkJCQkgICAgICAgZGVzdF9pc19sb29wLCBmYW0pOworCX0KKwlTQ1RQ
X0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKGFuc3dlcik7Cit9CisKK3N0YXRpYyBpbnQK
K3NjdHBfZmluZF9jbXNnKGludCBjX3R5cGUsIHZvaWQgKmRhdGEsIHN0cnVjdCBtYnVmICpjb250
cm9sLCBzaXplX3QgY3BzaXplKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKKwlXU0FDTVNHSERSIGNtaDsKKyNlbHNlCisJc3RydWN0IGNtc2doZHIgY21oOworI2VuZGlm
CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5mbyBwcmlu
Zm87CisJc3RydWN0IHNjdHBfYXV0aGluZm8gYXV0aGluZm87CisJaW50IHRvdF9sZW4sIHJlbV9s
ZW4sIGNtc2dfZGF0YV9sZW4sIGNtc2dfZGF0YV9vZmYsIG9mZjsKKwlpbnQgZm91bmQ7CisKKwkv
KgorCSAqIEluZGVwZW5kZW50IG9mIGhvdyBtYW55IG1idWZzLCBmaW5kIHRoZSBjX3R5cGUgaW5z
aWRlIHRoZSBjb250cm9sCisJICogc3RydWN0dXJlIGFuZCBjb3B5IG91dCB0aGUgZGF0YS4KKwkg
Ki8KKwlmb3VuZCA9IDA7CisJdG90X2xlbiA9IFNDVFBfQlVGX0xFTihjb250cm9sKTsKKwlmb3Ig
KG9mZiA9IDA7IG9mZiA8IHRvdF9sZW47IG9mZiArPSBDTVNHX0FMSUdOKGNtaC5jbXNnX2xlbikp
IHsKKwkJcmVtX2xlbiA9IHRvdF9sZW4gLSBvZmY7CisJCWlmIChyZW1fbGVuIDwgKGludClDTVNH
X0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZv
ciBvbmUgbW9yZS4gKi8KKwkJCXJldHVybiAoZm91bmQpOworCQl9CisJCW1fY29weWRhdGEoY29u
dHJvbCwgb2ZmLCBzaXplb2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7CisJCWlmIChjbWguY21zZ19s
ZW4gPCBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogV2UgZG9udCd0IGhhdmUgYSBj
b21wbGV0ZSBDTVNHIGhlYWRlci4gKi8KKwkJCXJldHVybiAoZm91bmQpOworCQl9CisJCWlmICgo
Y21oLmNtc2dfbGVuID4gSU5UX01BWCkgfHwgKChpbnQpY21oLmNtc2dfbGVuID4gcmVtX2xlbikp
IHsKKwkJCS8qIFdlIGRvbid0IGhhdmUgdGhlIGNvbXBsZXRlIENNU0cuICovCisJCQlyZXR1cm4g
KGZvdW5kKTsKKwkJfQorCQljbXNnX2RhdGFfbGVuID0gKGludCljbWguY21zZ19sZW4gLSBDTVNH
X0FMSUdOKHNpemVvZihjbWgpKTsKKwkJY21zZ19kYXRhX29mZiA9IG9mZiArIENNU0dfQUxJR04o
c2l6ZW9mKGNtaCkpOworCQlpZiAoKGNtaC5jbXNnX2xldmVsID09IElQUFJPVE9fU0NUUCkgJiYK
KwkJICAgICgoY190eXBlID09IGNtaC5jbXNnX3R5cGUpIHx8CisJCSAgICAgKChjX3R5cGUgPT0g
U0NUUF9TTkRSQ1YpICYmCisJCSAgICAgICgoY21oLmNtc2dfdHlwZSA9PSBTQ1RQX1NORElORk8p
IHx8CisJCSAgICAgICAoY21oLmNtc2dfdHlwZSA9PSBTQ1RQX1BSSU5GTykgfHwKKwkJICAgICAg
IChjbWguY21zZ190eXBlID09IFNDVFBfQVVUSElORk8pKSkpKSB7CisJCQlpZiAoY190eXBlID09
IGNtaC5jbXNnX3R5cGUpIHsKKwkJCQlpZiAoY3BzaXplID4gSU5UX01BWCkgeworCQkJCQlyZXR1
cm4gKGZvdW5kKTsKKwkJCQl9CisJCQkJaWYgKGNtc2dfZGF0YV9sZW4gPCAoaW50KWNwc2l6ZSkg
eworCQkJCQlyZXR1cm4gKGZvdW5kKTsKKwkJCQl9CisJCQkJLyogSXQgaXMgZXhhY3RseSB3aGF0
IHdlIHdhbnQuIENvcHkgaXQgb3V0LiAqLworCQkJCW1fY29weWRhdGEoY29udHJvbCwgY21zZ19k
YXRhX29mZiwgKGludCljcHNpemUsIChjYWRkcl90KWRhdGEpOworCQkJCXJldHVybiAoMSk7CisJ
CQl9IGVsc2UgeworCQkJCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNuZHJjdmluZm87CisKKwkJ
CQlzbmRyY3ZpbmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilkYXRhOworCQkJCWlmIChm
b3VuZCA9PSAwKSB7CisJCQkJCWlmIChjcHNpemUgPCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2
aW5mbykpIHsKKwkJCQkJCXJldHVybiAoZm91bmQpOworCQkJCQl9CisJCQkJCW1lbXNldChzbmRy
Y3ZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOworCQkJCX0KKwkJCQlz
d2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKKwkJCQljYXNlIFNDVFBfU05ESU5GTzoKKwkJCQkJaWYg
KGNtc2dfZGF0YV9sZW4gPCAoaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSkgeworCQkJ
CQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNn
X2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIChjYWRkcl90KSZzbmRpbmZv
KTsKKwkJCQkJc25kcmN2aW5mby0+c2luZm9fc3RyZWFtID0gc25kaW5mby5zbmRfc2lkOworCQkJ
CQlzbmRyY3ZpbmZvLT5zaW5mb19mbGFncyA9IHNuZGluZm8uc25kX2ZsYWdzOworCQkJCQlzbmRy
Y3ZpbmZvLT5zaW5mb19wcGlkID0gc25kaW5mby5zbmRfcHBpZDsKKwkJCQkJc25kcmN2aW5mby0+
c2luZm9fY29udGV4dCA9IHNuZGluZm8uc25kX2NvbnRleHQ7CisJCQkJCXNuZHJjdmluZm8tPnNp
bmZvX2Fzc29jX2lkID0gc25kaW5mby5zbmRfYXNzb2NfaWQ7CisJCQkJCWJyZWFrOworCQkJCWNh
c2UgU0NUUF9QUklORk86CisJCQkJCWlmIChjbXNnX2RhdGFfbGVuIDwgKGludClzaXplb2Yoc3Ry
dWN0IHNjdHBfcHJpbmZvKSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJ
bV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfcHJp
bmZvKSwgKGNhZGRyX3QpJnByaW5mbyk7CisJCQkJCWlmIChwcmluZm8ucHJfcG9saWN5ICE9IFND
VFBfUFJfU0NUUF9OT05FKSB7CisJCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb190aW1ldG9saXZlID0g
cHJpbmZvLnByX3ZhbHVlOworCQkJCQl9IGVsc2UgeworCQkJCQkJc25kcmN2aW5mby0+c2luZm9f
dGltZXRvbGl2ZSA9IDA7CisJCQkJCX0KKwkJCQkJc25kcmN2aW5mby0+c2luZm9fZmxhZ3MgfD0g
cHJpbmZvLnByX3BvbGljeTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0FVVEhJTkZPOgor
CQkJCQlpZiAoY21zZ19kYXRhX2xlbiA8IChpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhpbmZv
KSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250
cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGluZm8pLCAoY2FkZHJf
dCkmYXV0aGluZm8pOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19rZXludW1iZXJfdmFsaWQgPSAx
OworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19rZXludW1iZXIgPSBhdXRoaW5mby5hdXRoX2tleW51
bWJlcjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0dXJuIChmb3VuZCk7CisJ
CQkJfQorCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGZvdW5kKTsKK30K
Kworc3RhdGljIGludAorc2N0cF9wcm9jZXNzX2Ntc2dzX2Zvcl9pbml0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IG1idWYgKmNvbnRyb2wsIGludCAqZXJyb3IpCit7CisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCVdTQUNNU0dIRFIgY21oOworI2Vsc2UKKwlzdHJ1
Y3QgY21zZ2hkciBjbWg7CisjZW5kaWYKKwlpbnQgdGxlbiwgYXQ7CisJc3RydWN0IHNjdHBfaW5p
dG1zZyBpbml0bXNnOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisjZW5kaWYKKwor
CXRsZW4gPSBTQ1RQX0JVRl9MRU4oY29udHJvbCk7CisJYXQgPSAwOworCXdoaWxlIChhdCA8IHRs
ZW4pIHsKKwkJaWYgKCh0bGVuIC0gYXQpIDwgKGludClDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkg
eworCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciBvbmUgbW9yZS4gKi8KKwkJCSpl
cnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJbV9jb3B5ZGF0YShjb250cm9s
LCBhdCwgc2l6ZW9mKGNtaCksIChjYWRkcl90KSZjbWgpOworCQlpZiAoY21oLmNtc2dfbGVuIDwg
Q01TR19BTElHTihzaXplb2YoY21oKSkpIHsKKwkJCS8qIFdlIGRvbnQndCBoYXZlIGEgY29tcGxl
dGUgQ01TRyBoZWFkZXIuICovCisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKDEpOwor
CQl9CisJCWlmICgoKGludCljbWguY21zZ19sZW4gKyBhdCkgPiB0bGVuKSB7CisJCQkvKiBXZSBk
b24ndCBoYXZlIHRoZSBjb21wbGV0ZSBDTVNHLiAqLworCQkJKmVycm9yID0gRUlOVkFMOworCQkJ
cmV0dXJuICgxKTsKKwkJfQorCQlpZiAoY21oLmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSB7
CisJCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgU0NUUF9JTklUOgorCQkJCWlm
ICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXpl
b2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQly
ZXR1cm4gKDEpOworCQkJCX0KKwkJCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsgQ01TR19BTElH
TihzaXplb2YoY21oKSksIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKSwgKGNhZGRyX3QpJmlu
aXRtc2cpOworCQkJCWlmIChpbml0bXNnLnNpbml0X21heF9hdHRlbXB0cykKKwkJCQkJc3RjYi0+
YXNvYy5tYXhfaW5pdF90aW1lcyA9IGluaXRtc2cuc2luaXRfbWF4X2F0dGVtcHRzOworCQkJCWlm
IChpbml0bXNnLnNpbml0X251bV9vc3RyZWFtcykKKwkJCQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9z
dHJlYW1zID0gaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXM7CisJCQkJaWYgKGluaXRtc2cuc2lu
aXRfbWF4X2luc3RyZWFtcykKKwkJCQkJc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zID0g
aW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zOworCQkJCWlmIChpbml0bXNnLnNpbml0X21heF9p
bml0X3RpbWVvKQorCQkJCQlzdGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9fbWF4ID0gaW5pdG1z
Zy5zaW5pdF9tYXhfaW5pdF90aW1lbzsKKwkJCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQg
PCBzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMpIHsKKwkJCQkJc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqdG1wX3N0cjsKKwkJCQkJdW5zaWduZWQgaW50IGk7CisjaWYgZGVmaW5lZChTQ1RQX0RF
VEFJTEVEX1NUUl9TVEFUUykKKwkJCQkJaW50IGo7CisjZW5kaWYKKworCQkJCQkvKiBEZWZhdWx0
IGlzIE5PVCBjb3JyZWN0ICovCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiT2ss
IGRlZmF1bHQ6JWQgcHJlX29wZW46JWRcbiIsCisJCQkJCQlzdGNiLT5hc29jLnN0cmVhbW91dGNu
dCwgc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCQlTQ1RQX01BTExPQyh0bXBfc3RyLAorCQkJCQkgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICosCisJCQkJCSAgICAgICAgICAgIChzdGNiLT5hc29jLnByZV9vcGVu
X3N0cmVhbXMgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX291dCkpLAorCQkJCQkgICAgICAg
ICAgICBTQ1RQX01fU1RSTU8pOworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlpZiAo
dG1wX3N0ciAhPSBOVUxMKSB7CisJCQkJCQlTQ1RQX0ZSRUUoc3RjYi0+YXNvYy5zdHJtb3V0LCBT
Q1RQX01fU1RSTU8pOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0ID0gdG1wX3N0cjsKKwkJCQkJ
CXN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250ID0g
c3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zOworCQkJCQl9IGVsc2UgeworCQkJCQkJc3RjYi0+
YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7CisJCQkJCX0K
KwkJCQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJ
CQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7CisJCQkJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7CisJCQkJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQkJCQlzdGNiLT5hc29jLnN0
cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlM
RURfU1RSX1NUQVRTKQorCQkJCQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAx
OyBqKyspIHsKKwkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0g
PSAwOworCQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0g
MDsKKwkJCQkJCX0KKyNlbHNlCisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVk
X3NlbnRbMF0gPSAwOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNl
bnRbMF0gPSAwOworI2VuZGlmCisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc2lkID0gaTsK
KwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKKwkJ
CQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU5JTkc7CisJ
CQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0Y2IsICZz
dGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOwor
I2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9EU1RBRERSVjQ6CisJCQkJaWYgKChzaXplX3QpKGNt
aC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5f
YWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0K
KwkJCQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQkJCXNp
bi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlzaW4uc2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJc2luLnNpbl9w
b3J0ID0gc3RjYi0+cnBvcnQ7CisJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCArIENNU0dfQUxJ
R04oc2l6ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCAoY2FkZHJfdCkmc2luLnNp
bl9hZGRyKTsKKwkJCQlpZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwK
KwkJCQkgICAgKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKKwkJ
CQkgICAgSU5fTVVMVElDQVNUKG50b2hsKHNpbi5zaW5fYWRkci5zX2FkZHIpKSkgeworCQkJCQkq
ZXJyb3IgPSBFSU5WQUw7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJCWlmIChzY3RwX2Fk
ZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+
YXNvYy5wb3J0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFND
T1BFLCBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCQkqZXJyb3IgPSBFTk9CVUZTOwor
CQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJCQljYXNlIFNDVFBfRFNUQUREUlY2OgorCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4g
LSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgewor
CQkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJCW1lbXNl
dCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCQlzaW42LnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQkJCXNpbjYuc2luNl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCQlzaW42LnNpbjZf
cG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJCW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBDTVNHX0FM
SUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIChjYWRkcl90KSZzaW42
LnNpbjZfYWRkcik7CisJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LnNpbjZf
YWRkcikgfHwKKwkJCQkgICAgSU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LnNpbjZfYWRkcikp
IHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKyNpZmRl
ZiBJTkVUCisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LnNpbjZfYWRkcikpIHsK
KwkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNpbjYpOworCQkJCQlpZiAoKHNpbi5zaW5fYWRk
ci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKKwkJCQkJICAgIChzaW4uc2luX2FkZHIuc19hZGRy
ID09IElOQUREUl9CUk9BRENBU1QpIHx8CisJCQkJCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2lu
LnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJCQlyZXR1
cm4gKDEpOworCQkJCQl9CisJCQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAorCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NUUF9BRERSX0lTX0NPTkZJ
Uk1FRCkpIHsKKwkJCQkJCSplcnJvciA9IEVOT0JVRlM7CisJCQkJCQlyZXR1cm4gKDEpOworCQkJ
CQl9CisJCQkJfSBlbHNlCisjZW5kaWYKKwkJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0
Y2IsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAorCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NUUF9BRERS
X0lTX0NPTkZJUk1FRCkpIHsKKwkJCQkJCSplcnJvciA9IEVOT0JVRlM7CisJCQkJCQlyZXR1cm4g
KDEpOworCQkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwkJYXQgKz0gQ01TR19BTElHTihjbWguY21zZ19sZW4pOworCX0KKwlyZXR1
cm4gKDApOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0
aW9uX2Ntc2dzKHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IG1idWYgKmNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICoqbmV0X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycm9yKQorewor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlXU0FDTVNHSERSIGNtaDsKKyNl
bHNlCisJc3RydWN0IGNtc2doZHIgY21oOworI2VuZGlmCisJaW50IHRsZW4sIGF0OworCXN0cnVj
dCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWZkZWYgSU5FVAor
CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBz
b2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorCisJdGxlbiA9IFNDVFBfQlVGX0xFTihjb250cm9s
KTsKKwlhdCA9IDA7CisJd2hpbGUgKGF0IDwgdGxlbikgeworCQlpZiAoKHRsZW4gLSBhdCkgPCAo
aW50KUNNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7CisJCQkvKiBUaGVyZSBpcyBub3QgZW5vdWdo
IHJvb20gZm9yIG9uZSBtb3JlLiAqLworCQkJKmVycm9yID0gRUlOVkFMOworCQkJcmV0dXJuIChO
VUxMKTsKKwkJfQorCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0LCBzaXplb2YoY21oKSwgKGNhZGRy
X3QpJmNtaCk7CisJCWlmIChjbWguY21zZ19sZW4gPCBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkg
eworCQkJLyogV2UgZG9udCd0IGhhdmUgYSBjb21wbGV0ZSBDTVNHIGhlYWRlci4gKi8KKwkJCSpl
cnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJaWYgKCgoaW50KWNtaC5j
bXNnX2xlbiArIGF0KSA+IHRsZW4pIHsKKwkJCS8qIFdlIGRvbid0IGhhdmUgdGhlIGNvbXBsZXRl
IENNU0cuICovCisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJ
CWlmIChjbWguY21zZ19sZXZlbCA9PSBJUFBST1RPX1NDVFApIHsKKwkJCXN3aXRjaCAoY21oLmNt
c2dfdHlwZSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9EU1RBRERSVjQ6CisJCQkJaWYg
KChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSA8IHNpemVv
ZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1cm4g
KE5VTEwpOworCQkJCX0KKwkJCQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOworCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9M
RU4KKwkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlm
CisJCQkJc2luLnNpbl9wb3J0ID0gcG9ydDsKKwkJCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsg
Q01TR19BTElHTihzaXplb2YoY21oKSksIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIChjYWRkcl90
KSZzaW4uc2luX2FkZHIpOworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJ
CQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIFNDVFBfRFNUQUREUlY2Ogor
CQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkg
PCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgeworCQkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJ
CXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKwkJCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZk
ZWYgSEFWRV9TSU42X0xFTgorCQkJCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisjZW5kaWYKKwkJCQlzaW42LnNpbjZfcG9ydCA9IHBvcnQ7CisJCQkJbV9jb3B5
ZGF0YShjb250cm9sLCBhdCArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0
IGluNl9hZGRyKSwgKGNhZGRyX3QpJnNpbjYuc2luNl9hZGRyKTsKKyNpZmRlZiBJTkVUCisJCQkJ
aWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LnNpbjZfYWRkcikpIHsKKwkJCQkJaW42X3Np
bjZfMl9zaW4oJnNpbiwgJnNpbjYpOworCQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZz
aW47CisJCQkJfSBlbHNlCisjZW5kaWYKKwkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luNjsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlhZGRyID0gTlVMTDsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChhZGRyKSB7CisJCQkJc3RjYiA9IHNjdHBfZmluZGFz
c29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGFkZHIsIG5ldF9wLCBOVUxMLCBOVUxMKTsKKwkJCQlp
ZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCXJldHVybiAoc3RjYik7CisJCQkJfQorCQkJfQorCQl9
CisJCWF0ICs9IENNU0dfQUxJR04oY21oLmNtc2dfbGVuKTsKKwl9CisJcmV0dXJuIChOVUxMKTsK
K30KKworc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2Nvb2tpZShzdHJ1Y3QgbWJ1ZiAq
aW5pdCwgaW50IGluaXRfb2Zmc2V0LAorICAgIHN0cnVjdCBtYnVmICppbml0YWNrLCBpbnQgaW5p
dGFja19vZmZzZXQsIHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqc3RjX2luLCB1aW50OF90ICoq
c2lnbmF0dXJlKQoreworCXN0cnVjdCBtYnVmICpjb3B5X2luaXQsICpjb3B5X2luaXRhY2ssICpt
X2F0LCAqc2lnLCAqbXJldDsKKwlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgKnN0YzsKKwlzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDhfdCAqZm9vOworCWludCBzaWdfb2Zmc2V0Owor
CXVpbnQxNl90IGNvb2tpZV9zejsKKworCW1yZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coKHNp
emVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsKKwkJCQkgICAgICBzaXplb2Yoc3RydWN0
IHNjdHBfcGFyYW1oZHIpKSwgMCwKKwkJCQkgICAgIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlp
ZiAobXJldCA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNvcHlfaW5pdCA9IFND
VFBfTV9DT1BZTShpbml0LCBpbml0X29mZnNldCwgTV9DT1BZQUxMLCBNX05PV0FJVCk7CisJaWYg
KGNvcHlfaW5pdCA9PSBOVUxMKSB7CisJCXNjdHBfbV9mcmVlbShtcmV0KTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNj
dHBfbG9nX21iYyhjb3B5X2luaXQsIFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJY29w
eV9pbml0YWNrID0gU0NUUF9NX0NPUFlNKGluaXRhY2ssIGluaXRhY2tfb2Zmc2V0LCBNX0NPUFlB
TEwsCisJICAgIE1fTk9XQUlUKTsKKwlpZiAoY29weV9pbml0YWNrID09IE5VTEwpIHsKKwkJc2N0
cF9tX2ZyZWVtKG1yZXQpOworCQlzY3RwX21fZnJlZW0oY29weV9pbml0KTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNj
dHBfbG9nX21iYyhjb3B5X2luaXRhY2ssIFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJ
LyogZWFzeSBzaWRlIHdlIGp1c3QgZHJvcCBpdCBvbiB0aGUgZW5kICovCisJcGggPSBtdG9kKG1y
ZXQsIHN0cnVjdCBzY3RwX3BhcmFtaGRyICopOworCVNDVFBfQlVGX0xFTihtcmV0KSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyKTsKKwlzdGMgPSAoc3RydWN0IHNjdHBfc3RhdGVfY29va2llICopKChjYWRkcl90KXBo
ICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJcGgtPnBhcmFtX3R5cGUg
PSBodG9ucyhTQ1RQX1NUQVRFX0NPT0tJRSk7CisJcGgtPnBhcmFtX2xlbmd0aCA9IDA7CS8qIGZp
bGwgaW4gYXQgdGhlIGVuZCAqLworCS8qIEZpbGwgaW4gdGhlIHN0YyBjb29raWUgZGF0YSAqLwor
CW1lbWNweShzdGMsIHN0Y19pbiwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSkpOwor
CisJLyogdGFjayB0aGUgSU5JVCBhbmQgdGhlbiB0aGUgSU5JVC1BQ0sgb250byB0aGUgY2hhaW4g
Ki8KKwljb29raWVfc3ogPSAwOworCWZvciAobV9hdCA9IG1yZXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQ
X0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7CisJ
CWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05FWFQobV9h
dCkgPSBjb3B5X2luaXQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlmb3IgKG1fYXQgPSBjb3B5X2lu
aXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBT
Q1RQX0JVRl9MRU4obV9hdCk7CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsK
KwkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXRhY2s7CisJCQlicmVhazsKKwkJfQor
CX0KKwlmb3IgKG1fYXQgPSBjb3B5X2luaXRhY2s7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhU
KG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7CisJCWlmIChTQ1RQ
X0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCXNpZyA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhTQ1RQX1NFQ1JFVF9TSVpFLCAwLCBNX05PV0FJVCwgMSwgTVRf
REFUQSk7CisJaWYgKHNpZyA9PSBOVUxMKSB7CisJCS8qIG5vIHNwYWNlLCBzbyBmcmVlIHRoZSBl
bnRpcmUgY2hhaW4gKi8KKwkJc2N0cF9tX2ZyZWVtKG1yZXQpOworCQlyZXR1cm4gKE5VTEwpOwor
CX0KKwlTQ1RQX0JVRl9MRU4oc2lnKSA9IDA7CisJU0NUUF9CVUZfTkVYVChtX2F0KSA9IHNpZzsK
KwlzaWdfb2Zmc2V0ID0gMDsKKwlmb28gPSAodWludDhfdCAqKSAobXRvZChzaWcsIGNhZGRyX3Qp
ICsgc2lnX29mZnNldCk7CisJbWVtc2V0KGZvbywgMCwgU0NUUF9TSUdOQVRVUkVfU0laRSk7CisJ
KnNpZ25hdHVyZSA9IGZvbzsKKwlTQ1RQX0JVRl9MRU4oc2lnKSArPSBTQ1RQX1NJR05BVFVSRV9T
SVpFOworCWNvb2tpZV9zeiArPSBTQ1RQX1NJR05BVFVSRV9TSVpFOworCXBoLT5wYXJhbV9sZW5n
dGggPSBodG9ucyhjb29raWVfc3opOworCXJldHVybiAobXJldCk7Cit9CisKKworc3RhdGljIHVp
bnQ4X3QKK3NjdHBfZ2V0X2VjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJaWYgKChzdGNi
ICE9IE5VTEwpICYmIChzdGNiLT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0gMSkpIHsKKwkJcmV0dXJu
IChTQ1RQX0VDVDBfQklUKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRs
ZV9ub19yb3V0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICBpbnQgc29fbG9ja2Vk
KQoreworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiZHJvcHBlZCBwYWNrZXQgLSBubyB2
YWxpZCBzb3VyY2UgYWRkclxuIik7CisKKwlpZiAobmV0KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQxLCAiRGVzdGluYXRpb24gd2FzICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJV
R19PVVRQVVQxLCAmbmV0LT5yby5fbF9hZGRyLnNhKTsKKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9DT05GSVJNRUQpIHsKKwkJCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX1JFQUNIQUJMRSkgJiYgc3RjYikgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAibm8gcm91dGUgdGFrZXMgaW50ZXJmYWNlICVwIGRvd25cbiIsICh2b2lkICopbmV0KTsKKwkJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgICBzdGNiLCAwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgKHZv
aWQgKiluZXQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOworCQkJCW5l
dC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQluZXQtPmRlc3Rfc3Rh
dGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCX0KKwkJfQorCQlpZiAoc3RjYikgeworCQkJaWYgKG5l
dCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkvKiBuZWVkIGEgbmV3
IHByaW1hcnkgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisKKwkJCQlhbHQgPSBzY3Rw
X2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDApOworCQkJCWlmIChhbHQgIT0gbmV0KSB7
CisJCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJCQkJc2N0cF9mcmVlX3JlbW90
ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCQkJfQorCQkJCQlzdGNiLT5hc29jLmFs
dGVybmF0ZSA9IGFsdDsKKwkJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MuYWx0ZXJuYXRl
LT5yZWZfY291bnQsIDEpOworCQkJCQlpZiAobmV0LT5yby5fc19hZGRyKSB7CisJCQkJCQlzY3Rw
X2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxM
OworCQkJCQl9CisJCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJCX0KKwkJCX0K
KwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitzY3RwX2xvd2xldmVsX2NodW5rX291
dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwJ
LyogbWF5IGJlIE5VTEwgKi8KKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgc3RydWN0
IHNvY2thZGRyICp0bywKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICB1aW50MzJfdCBhdXRoX29m
ZnNldCwKKyAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAorICAgIHVpbnQxNl90IGF1
dGhfa2V5aWQsCisgICAgaW50IG5vZnJhZ21lbnRfZmxhZywKKyAgICBpbnQgZWNuX29rLAorICAg
IGludCBvdXRfb2ZfYXNvY19vaywKKyAgICB1aW50MTZfdCBzcmNfcG9ydCwKKyAgICB1aW50MTZf
dCBkZXN0X3BvcnQsCisgICAgdWludDMyX3Qgdl90YWcsCisgICAgdWludDE2X3QgcG9ydCwKKyAg
ICB1bmlvbiBzY3RwX3NvY2tzdG9yZSAqb3Zlcl9hZGRyLAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCisjZW5kaWYKKyNp
ZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQor
ICAgIGludCBzb19sb2NrZWQgU0NUUF9VTlVTRUQKKyNlbHNlCisgICAgaW50IHNvX2xvY2tlZAor
I2VuZGlmCisgICAgKQorLyogbm9mcmFnbWVudF9mbGFnIHRvIHRlbGwgaWYgSVBfREYgc2hvdWxk
IGJlIHNldCAoSVB2NCBvbmx5KSAqLworeworCS8qKgorCSAqIEdpdmVuIGEgbWJ1ZiBjaGFpbiAo
dmlhIFNDVFBfQlVGX05FWFQoKSkgdGhhdCBob2xkcyBhIHBhY2tldCBoZWFkZXIKKwkgKiBXSVRI
IGFuIFNDVFBIRFIgYnV0IG5vIElQIGhlYWRlciwgZW5kcG9pbnQgaW5wIGFuZCBzYSBzdHJ1Y3R1
cmU6CisJICogLSBmaWxsIGluIHRoZSBITUFDIGRpZ2VzdCBvZiBhbnkgQVVUSCBjaHVuayBpbiB0
aGUgcGFja2V0LgorCSAqIC0gY2FsY3VsYXRlIGFuZCBmaWxsIGluIHRoZSBTQ1RQIGNoZWNrc3Vt
LgorCSAqIC0gcHJlcGVuZCBhbiBJUCBhZGRyZXNzIGhlYWRlci4KKwkgKiAtIGlmIGJvdW5kYWxs
IHVzZSBJTkFERFJfQU5ZLgorCSAqIC0gaWYgYm91bmRzcGVjaWZpYyBkbyBzb3VyY2UgYWRkcmVz
cyBzZWxlY3Rpb24uCisJICogLSBzZXQgZnJhZ21lbnRhdGlvbiBvcHRpb24gZm9yIGlwVjQuCisJ
ICogLSBPbiByZXR1cm4gZnJvbSBJUCBvdXRwdXQsIGNoZWNrL2FkanVzdCBtdHUgc2l6ZSBvZiBv
dXRwdXQKKwkgKiAgIGludGVyZmFjZSBhbmQgc21hbGxlc3RfbXR1IHNpemUgYXMgd2VsbC4KKwkg
Ki8KKwkvKiBXaWxsIG5lZWQgaWZkZWZzIGFyb3VuZCB0aGlzICovCisjaWZkZWYgX19QYW5kYV9f
CisJcGFraGFuZGxlX3R5cGUgb19wYWs7CisjZW5kaWYKKwlzdHJ1Y3QgbWJ1ZiAqbmV3bTsKKwlz
dHJ1Y3Qgc2N0cGhkciAqc2N0cGhkcjsKKwlpbnQgcGFja2V0X2xlbmd0aDsKKwlpbnQgcmV0Owor
I2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwl1aW50MzJfdCB2cmZfaWQ7Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisjaWYgIWRlZmluZWQo
X19QYW5kYV9fKQorCXN0cnVjdCBtYnVmICpvX3BhazsKKyNlbmRpZgorCXNjdHBfcm91dGVfdCAq
cm8gPSBOVUxMOworCXN0cnVjdCB1ZHBoZHIgKnVkcCA9IE5VTEw7CisjZW5kaWYKKwl1aW50OF90
IHRvc192YWx1ZTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChT
Q1RQX0lOUF9TTyhpbnApKTsKKwkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJfSBlbHNl
IHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0KKyNlbmRpZgor
CWlmICgobmV0KSAmJiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX09VVF9PRl9TQ09QRSkp
IHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJc2N0cF9tX2ZyZWVtKG0pOworCQlyZXR1cm4gKEVG
QVVMVCk7CisJfQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlpZiAoc3Rj
YikgeworCQl2cmZfaWQgPSBzdGNiLT5hc29jLnZyZl9pZDsKKwl9IGVsc2UgeworCQl2cmZfaWQg
PSBpbnAtPmRlZl92cmZfaWQ7CisJfQorI2VuZGlmCisJLyogZmlsbCBpbiB0aGUgSE1BQyBkaWdl
c3QgZm9yIGFueSBBVVRIIGNodW5rIGluIHRoZSBwYWNrZXQgKi8KKwlpZiAoKGF1dGggIT0gTlVM
TCkgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKKwkJc2N0cF9maWxsX2htYWNfZGlnZXN0X20obSwgYXV0
aF9vZmZzZXQsIGF1dGgsIHN0Y2IsIGF1dGhfa2V5aWQpOworCX0KKworCWlmIChuZXQpIHsKKwkJ
dG9zX3ZhbHVlID0gbmV0LT5kc2NwOworCX0gZWxzZSBpZiAoc3RjYikgeworCQl0b3NfdmFsdWUg
PSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcDsKKwl9IGVsc2UgeworCQl0b3NfdmFsdWUgPSBpbnAt
PnNjdHBfZXAuZGVmYXVsdF9kc2NwOworCX0KKworCXN3aXRjaCAodG8tPnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3QgaXAgKmlwID0gTlVMTDsK
KwkJc2N0cF9yb3V0ZV90IGlwcm91dGU7CisJCWludCBsZW47CisKKwkJbGVuID0gU0NUUF9NSU5f
VjRfT1ZFUkhFQUQ7CisJCWlmIChwb3J0KSB7CisJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBo
ZHIpOworCQl9CisJCW5ld20gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJ
VCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdtID09IE5VTEwpIHsKKwkJCXNjdHBfbV9mcmVlbSht
KTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKwkJU0NUUF9BTElH
Tl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NUUF9CVUZfTEVOKG5ld20pID0gbGVuOworCQlTQ1RQ
X0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9IG5ld207CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQltLT5tX3BrdGhkci5mbG93aWQgPSBuZXQtPmZs
b3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIG5ldC0+Zmxvd3R5cGUpOworCQl9IGVsc2Ugewor
CQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbWZsb3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIG1m
bG93dHlwZSk7CisgCQl9CisjZW5kaWYKKwkJcGFja2V0X2xlbmd0aCA9IHNjdHBfY2FsY3VsYXRl
X2xlbihtKTsKKwkJaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwkJaXAtPmlwX3YgPSBJUFZF
UlNJT047CisJCWlwLT5pcF9obCA9IChzaXplb2Yoc3RydWN0IGlwKSA+PiAyKTsKKwkJaWYgKHRv
c192YWx1ZSA9PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0
IGl0IGlzIG5vdCBzZXQgYXQgdGhlCisJCQkgKiBTQ1RQIGxheWVyLiBTbyB1c2UgdGhlIHZhbHVl
IGZyb20gdGhlIElQIGxheWVyLgorCQkJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQl0b3NfdmFsdWUgPSBpbnAtPmlw
X2lucC5pbnAuaW5wX2lwX3RvczsKKyNlbHNlCisJCQl0b3NfdmFsdWUgPSBpbnAtPmlucF9pcF90
b3M7CisjZW5kaWYKKwkJfQorCQl0b3NfdmFsdWUgJj0gMHhmYzsKKwkJaWYgKGVjbl9vaykgewor
CQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsKKwkJfQorCQlpZiAoKG5vZnJhZ21l
bnRfZmxhZykgJiYgKHBvcnQgPT0gMCkpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJCWlwLT5pcF9vZmYgPSBodG9ucyhJUF9E
Rik7CisjZWxzZQorCQkJaXAtPmlwX29mZiA9IElQX0RGOworI2VuZGlmCisjZWxpZiBkZWZpbmVk
KFdJVEhfQ09OVkVSVF9JUF9PRkYpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0RhcndpbikKKwkJCWlwLT5pcF9vZmYgPSBJUF9ERjsKKyNlbHNlCisJCQlp
cC0+aXBfb2ZmID0gaHRvbnMoSVBfREYpOworI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTAwMDAwMAorCQkJaXAtPmlw
X29mZiA9IGh0b25zKDApOworI2Vsc2UKKwkJCWlwLT5pcF9vZmYgPSAwOworI2VuZGlmCisJCX0K
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkvKiBGcmVlQlNEIGhhcyBhIGZ1bmN0aW9uIGZv
ciBpcF9pZCdzICovCisJCWlwX2ZpbGxpZChpcCk7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykK
KyNpZiBSQU5ET01fSVBfSUQKKwkJaXAtPmlwX2lkID0gaXBfcmFuZG9taWQoKTsKKyNlbHNlCisJ
CWlwLT5pcF9pZCA9IGh0b25zKGlwX2lkKyspOworI2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCWlwLT5pcF9pZCA9IGh0b25zKFNDVFBfSVBfSUQoaW5wKSsrKTsKKyNlbHNl
CisJCWlwLT5pcF9pZCA9IFNDVFBfSVBfSUQoaW5wKSsrOworI2VuZGlmCisKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1BhbmRhX18p
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAt
PmlwX3R0bCA9IGlucC0+aXBfaW5wLmlucC5pbnBfaXBfdHRsOworI2Vsc2UKKwkJaXAtPmlwX3R0
bCA9IGlucC0+aW5wX2lwX3R0bDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJaXAtPmlwX2xlbiA9IGh0b25zKHBhY2tl
dF9sZW5ndGgpOworI2Vsc2UKKwkJaXAtPmlwX2xlbiA9IHBhY2tldF9sZW5ndGg7CisjZW5kaWYK
KwkJaXAtPmlwX3RvcyA9IHRvc192YWx1ZTsKKwkJaWYgKHBvcnQpIHsKKwkJCWlwLT5pcF9wID0g
SVBQUk9UT19VRFA7CisJCX0gZWxzZSB7CisJCQlpcC0+aXBfcCA9IElQUFJPVE9fU0NUUDsKKwkJ
fQorCQlpcC0+aXBfc3VtID0gMDsKKwkJaWYgKG5ldCA9PSBOVUxMKSB7CisJCQlybyA9ICZpcHJv
dXRlOworCQkJbWVtc2V0KCZpcHJvdXRlLCAwLCBzaXplb2YoaXByb3V0ZSkpOworI2lmZGVmIEhB
VkVfU0FfTEVOCisJCQltZW1jcHkoJnJvLT5yb19kc3QsIHRvLCB0by0+c2FfbGVuKTsKKyNlbHNl
CisJCQltZW1jcHkoJnJvLT5yb19kc3QsIHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXJvID0gKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvOwor
CQl9CisJCS8qIE5vdyB0aGUgYWRkcmVzcyBzZWxlY3Rpb24gcGFydCAqLworCQlpcC0+aXBfZHN0
LnNfYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopdG8pLT5zaW5fYWRkci5zX2FkZHI7CisK
KwkJLyogY2FsbCB0aGUgcm91dGluZSB0byBzZWxlY3QgdGhlIHNyYyBhZGRyZXNzICovCisJCWlm
IChuZXQgJiYgb3V0X29mX2Fzb2Nfb2sgPT0gMCkgeworCQkJaWYgKG5ldC0+cm8uX3NfYWRkciAm
JiAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAmIChTQ1RQX0JFSU5HX0RFTEVURUR8
U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpKSkgeworCQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5f
c19hZGRyKTsKKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCW5ldC0+c3JjX2FkZHJf
c2VsZWN0ZWQgPSAwOworCQkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQkJUlRGUkVFKHJvLT5yb19y
dCk7CisJCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJCQkJfQorCQkJfQorCQkJaWYgKG5ldC0+c3Jj
X2FkZHJfc2VsZWN0ZWQgPT0gMCkgeworCQkJCS8qIENhY2hlIHRoZSBzb3VyY2UgYWRkcmVzcyAq
LworCQkJCW5ldC0+cm8uX3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlu
cCxzdGNiLAorCQkJCQkJCQkJCXJvLCBuZXQsIDAsCisJCQkJCQkJCQkJdnJmX2lkKTsKKwkJCQlu
ZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKKwkJCX0KKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIg
PT0gTlVMTCkgeworCQkJCS8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KKwkJCQluZXQtPnNyY19hZGRy
X3NlbGVjdGVkID0gMDsKKwkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xv
Y2tlZCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQkJc2N0cF9tX2ZyZWVtKG0p
OworCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCX0KKwkJCWlwLT5pcF9zcmMgPSBuZXQt
PnJvLl9zX2FkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQl9IGVsc2UgeworCQkJaWYgKG92
ZXJfYWRkciA9PSBOVUxMKSB7CisJCQkJc3RydWN0IHNjdHBfaWZhICpfbHNyYzsKKworCQkJCV9s
c3JjID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLCBzdGNiLCBybywKKwkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCwKKwkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9vZl9hc29jX29rLAorCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkKTsKKwkJCQlpZiAoX2xzcmMgPT0g
TlVMTCkgeworCQkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOworCQkJCQlzY3RwX21fZnJlZW0obSk7CisJ
CQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCQl9CisJCQkJaXAtPmlwX3NyYyA9IF9sc3Jj
LT5hZGRyZXNzLnNpbi5zaW5fYWRkcjsKKwkJCQlzY3RwX2ZyZWVfaWZhKF9sc3JjKTsKKwkJCX0g
ZWxzZSB7CisJCQkJaXAtPmlwX3NyYyA9IG92ZXJfYWRkci0+c2luLnNpbl9hZGRyOworCQkJCVND
VFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7CisJCQl9CisJCX0KKwkJaWYgKHBv
cnQpIHsKKwkJCWlmIChodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19w
b3J0KSkgPT0gMCkgeworCQkJCXNjdHBfaGFuZGxlX25vX3JvdXRlKHN0Y2IsIG5ldCwgc29fbG9j
a2VkKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQlzY3RwX21fZnJlZW0obSk7
CisJCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOworCQkJfQorCQkJdWRwID0gKHN0cnVjdCB1ZHBo
ZHIgKikoKGNhZGRyX3QpaXAgKyBzaXplb2Yoc3RydWN0IGlwKSk7CisJCQl1ZHAtPnVoX3Nwb3J0
ID0gaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpOworCQkJ
dWRwLT51aF9kcG9ydCA9IHBvcnQ7CisJCQl1ZHAtPnVoX3VsZW4gPSBodG9ucygodWludDE2X3Qp
KHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwKSkpOworI2lmICFkZWZpbmVkKF9fV2lu
ZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24g
PCA5MDAwMDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQorCQkJaWYgKFZfdWRwX2Nr
c3VtKSB7CisJCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlw
LT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOworCQkJ
fSBlbHNlIHsKKwkJCQl1ZHAtPnVoX3N1bSA9IDA7CisJCQl9CisjZWxzZQorCQkJdWRwLT51aF9z
dW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAt
PnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOworI2VuZGlmCisjZWxzZQorCQkJdWRwLT51
aF9zdW0gPSAwOworI2VuZGlmCisJCQlzY3RwaGRyID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRk
cl90KXVkcCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCX0gZWxzZSB7CisJCQlzY3RwaGRy
ID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsgc2l6ZW9mKHN0cnVjdCBpcCkpOwor
CQl9CisKKwkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9ydDsKKwkJc2N0cGhkci0+ZGVzdF9w
b3J0ID0gZGVzdF9wb3J0OworCQlzY3RwaGRyLT52X3RhZyA9IHZfdGFnOworCQlzY3RwaGRyLT5j
aGVja3N1bSA9IDA7CisKKwkJLyoKKwkJICogSWYgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIGZh
aWxzIGFuZCB3ZSBmaW5kIG5vIHJvdXRlCisJCSAqIHRoZW4gdGhlIGlwX291dHB1dCBzaG91bGQg
ZmFpbCBhcyB3ZWxsIHdpdGggYQorCQkgKiBOT19ST1VURV9UT19IT1NUIHR5cGUgZXJyb3IuIFdl
IHByb2JhYmx5IHNob3VsZCBjYXRjaAorCQkgKiB0aGF0IHNvbWV3aGVyZSBhbmQgYWJvcnQgdGhl
IGFzc29jaWF0aW9uIHJpZ2h0IGF3YXkKKwkJICogKGFzc3VtaW5nIHRoaXMgaXMgYW4gSU5JVCBi
ZWluZyBzZW50KS4KKwkJICovCisJCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgeworCQkJLyoKKwkJ
CSAqIHNyYyBhZGRyIHNlbGVjdGlvbiBmYWlsZWQgdG8gZmluZCBhIHJvdXRlIChvcgorCQkJICog
dmFsaWQgc291cmNlIGFkZHIpLCBzbyB3ZSBjYW4ndCBnZXQgdGhlcmUgZnJvbQorCQkJICogaGVy
ZSAoeWV0KSEKKwkJCSAqLworCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19s
b2NrZWQpOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQlzY3RwX21fZnJlZW0obSk7
CisJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCX0KKwkJaWYgKHJvICE9ICZpcHJvdXRlKSB7
CisJCQltZW1jcHkoJmlwcm91dGUsIHJvLCBzaXplb2YoKnJvKSk7CisJCX0KKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDMsICJDYWxsaW5nIGlwdjQgb3V0cHV0IHJvdXRpbmUgZnJvbSBsb3cg
bGV2ZWwgc3JjIGFkZHI6JXhcbiIsCisJCQkodWludDMyX3QpIChudG9obChpcC0+aXBfc3JjLnNf
YWRkcikpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJEZXN0aW5hdGlvbiBpcyAl
eFxuIiwKKwkJCSh1aW50MzJfdCkobnRvaGwoaXAtPmlwX2RzdC5zX2FkZHIpKSk7CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiUlRQIHJvdXRlIGlzICVwIHRocm91Z2hcbiIsCisJCQko
dm9pZCAqKXJvLT5yb19ydCk7CisKKwkJaWYgKFNDVFBfR0VUX0hFQURFUl9GT1JfT1VUUFVUKG9f
cGFrKSkgeworCQkJLyogZmFpbGVkIHRvIHByZXBlbmQgZGF0YSwgZ2l2ZSB1cCAqLworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVOT01FTSk7CisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlyZXR1cm4gKEVOT01FTSk7
CisJCX0KKwkJU0NUUF9BVFRBQ0hfQ0hBSU4ob19wYWssIG0sIHBhY2tldF9sZW5ndGgpOworCQlp
ZiAocG9ydCkgeworCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bSht
LCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2lmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoX19G
cmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAwMDApIHx8
IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQorCQkJaWYgKFZfdWRwX2Nrc3VtKSB7CisJCQkJ
U0NUUF9FTkFCTEVfVURQX0NTVU0ob19wYWspOworCQkJfQorI2Vsc2UKKwkJCVNDVFBfRU5BQkxF
X1VEUF9DU1VNKG9fcGFrKTsKKyNlbmRpZgorI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCQltLT5tX3Br
dGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOworCQkJbS0+bV9wa3RoZHIuY3N1bV9kYXRhID0g
b2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3NlbmRod2NyYyk7CisjZWxzZQorCQkJaWYgKCEoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25v
X2NzdW1fb25fbG9vcGJhY2spICYmCisJCQkgICAgICAoc3RjYikgJiYgKHN0Y2ItPmFzb2Muc2Nv
cGUubG9vcGJhY2tfc2NvcGUpKSkgeworCQkJCXNjdHBoZHItPmNoZWNrc3VtID0gc2N0cF9jYWxj
dWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcCkpOworCQkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3NlbmRzd2NyYyk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nl
bmRod2NyYyk7CisJCQl9CisjZW5kaWYKKwkJfQorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcK
KwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9Q
QUNLRVRfVFJBQ0lORykKKwkJCXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7CisjZW5kaWYKKwkJLyog
c2VuZCBpdCBvdXQuICB0YWJsZSBpZCBpcyB0YWtlbiBmcm9tIHN0Y2IgKi8KKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJaWYgKChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSkgJiYgKHNvX2xvY2tlZCkpIHsKKwkJ
CXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMCk7CisJ
CX0KKyNlbmRpZgorCQlTQ1RQX0lQX09VVFBVVChyZXQsIG9fcGFrLCBybywgc3RjYiwgdnJmX2lk
KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSkgJiYgKHNv
X2xvY2tlZCkpIHsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAwKTsKKwkJ
CVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCX0KKyNlbmRpZgorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kcGFj
a2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRwYWNrZXRzKTsKKwkJ
aWYgKHJldCkKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlcnJvcnMpOworCisJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiSVAgb3V0cHV0IHJldHVybnMgJWRcbiIsIHJldCk7CisJ
CWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyogZnJlZSB0ZW1weSByb3V0ZXMgKi8KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMTAwMAorCQkJUk9fUlRG
UkVFKHJvKTsKKyNlbHNlCisJCQlpZiAocm8tPnJvX3J0KSB7CisJCQkJUlRGUkVFKHJvLT5yb19y
dCk7CisJCQkJcm8tPnJvX3J0ID0gTlVMTDsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgeworCQkJ
aWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkcikgJiYKKwkJCSAgICAo
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgPT0gMCkpIHsKKwkJCQl1aW50
MzJfdCBtdHU7CisKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJv
Ll9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19ydCk7CisJCQkJaWYgKG10dSA+
IDApIHsKKwkJCQkJaWYgKG5ldC0+cG9ydCkgeworCQkJCQkJbXR1IC09IHNpemVvZihzdHJ1Y3Qg
dWRwaGRyKTsKKwkJCQkJfQorCQkJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2Mu
c21hbGxlc3RfbXR1ID4gbXR1KSkgeworCQkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNldChpbnAsICZz
dGNiLT5hc29jLCBtdHUpOworCQkJCQl9CisJCQkJCW5ldC0+bXR1ID0gbXR1OworCQkJCX0KKwkJ
CX0gZWxzZSBpZiAocm8tPnJvX3J0ID09IE5VTEwpIHsKKwkJCQkvKiByb3V0ZSB3YXMgZnJlZWQg
Ki8KKwkJCQlpZiAobmV0LT5yby5fc19hZGRyICYmCisJCQkJICAgIG5ldC0+c3JjX2FkZHJfc2Vs
ZWN0ZWQpIHsKKwkJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJCQluZXQt
PnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCX0KKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0g
MDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gKHJldCk7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwljYXNlIEFGX0lORVQ2OgorCXsKKwkJdWludDMyX3QgZmxvd2xhYmVsLCBmbG93aW5mbzsKKwkJ
c3RydWN0IGlwNl9oZHIgKmlwNmg7CisJCXN0cnVjdCByb3V0ZV9pbjYgaXA2cm91dGU7CisjaWYg
IShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJc3RydWN0
IGlmbmV0ICppZnA7CisjZW5kaWYKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgdG1wLCAq
bHNhNiwgbHNhNl90bXA7CisJCWludCBwcmV2X3Njb3BlID0gMDsKKyNpZmRlZiBTQ1RQX0VNQkVE
REVEX1Y2X1NDT1BFCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgbHNhNl9zdG9yYWdlOworCQlpbnQg
ZXJyb3I7CisjZW5kaWYKKwkJdV9zaG9ydCBwcmV2X3BvcnQgPSAwOworCQlpbnQgbGVuOworCisJ
CWlmIChuZXQpIHsKKwkJCWZsb3dsYWJlbCA9IG5ldC0+Zmxvd2xhYmVsOworCQl9IGVsc2UgaWYg
KHN0Y2IpIHsKKwkJCWZsb3dsYWJlbCA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFiZWw7CisJ
CX0gZWxzZSB7CisJCQlmbG93bGFiZWwgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9mbG93bGFiZWw7
CisJCX0KKwkJaWYgKGZsb3dsYWJlbCA9PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBl
c3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQgdGhlCisJCQkgKiBTQ1RQIGxheWVyLiBT
byB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVyLgorCQkJICovCisjaWYgZGVmaW5lZChf
X0FQUExFX18pICYmICghZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9T
Tk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9V
TlRBSU5MSU9OKSkKKwkJCWZsb3dsYWJlbCA9IG50b2hsKGlucC0+aXBfaW5wLmlucC5pbnBfZmxv
dyk7CisjZWxzZQorCQkJZmxvd2xhYmVsID0gbnRvaGwoKChzdHJ1Y3QgaW42cGNiICopaW5wKS0+
aW42cF9mbG93aW5mbyk7CisjZW5kaWYKKwkJfQorCQlmbG93bGFiZWwgJj0gMHgwMDBmZmZmZjsK
KwkJbGVuID0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCWlmIChwb3J0KSB7CisJCQlsZW4gKz0gc2l6
ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCW5ld20gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
bGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdtID09IE5VTEwpIHsKKwkJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJ
CX0KKwkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NUUF9CVUZfTEVOKG5ld20p
ID0gbGVuOworCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9IG5ld207CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQltLT5tX3BrdGhkci5m
bG93aWQgPSBuZXQtPmZsb3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIG5ldC0+Zmxvd3R5cGUp
OworCQl9IGVsc2UgeworCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbWZsb3dpZDsKKwkJCU1fSEFT
SFRZUEVfU0VUKG0sIG1mbG93dHlwZSk7CisgCQl9CisjZW5kaWYKKwkJcGFja2V0X2xlbmd0aCA9
IHNjdHBfY2FsY3VsYXRlX2xlbihtKTsKKworCQlpcDZoID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hk
ciAqKTsKKwkJLyogcHJvdGVjdCAqc2luNiBmcm9tIG92ZXJ3cml0ZSAqLworCQlzaW42ID0gKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKil0bzsKKwkJdG1wID0gKnNpbjY7CisJCXNpbjYgPSAmdG1wOwor
CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNj
b3BlaWQgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJCWlmIChpbjZfZW1iZWRzY29wZSgm
c2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBOVUxMKSAhPSAwKQorI2Vsc2UKKwkJaWYgKGlu
Nl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEwsIE5VTEwpICE9
IDApCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQlpZiAoc2E2X2VtYmVkc2Nv
cGUoc2luNiwgTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAhPSAwKQorI2Vsc2UKKwkJ
aWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYpICE9IDApCisjZW5kaWYK
KwkJeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIFNDVFBf
RlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2Vu
ZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJaWYgKG5ldCA9PSBOVUxMKSB7CisJ
CQltZW1zZXQoJmlwNnJvdXRlLCAwLCBzaXplb2YoaXA2cm91dGUpKTsKKwkJCXJvID0gKHNjdHBf
cm91dGVfdCAqKSZpcDZyb3V0ZTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQltZW1jcHkoJnJv
LT5yb19kc3QsIHNpbjYsIHNpbjYtPnNpbjZfbGVuKTsKKyNlbHNlCisJCQltZW1jcHkoJnJvLT5y
b19kc3QsIHNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJfSBl
bHNlIHsKKwkJCXJvID0gKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvOworCQl9CisJCS8qCisJCSAq
IFdlIGFzc3VtZSBoZXJlIHRoYXQgaW5wX2Zsb3cgaXMgaW4gaG9zdCBieXRlIG9yZGVyIHdpdGhp
bgorCQkgKiB0aGUgVENCIQorCQkgKi8KKwkJaWYgKHRvc192YWx1ZSA9PSAwKSB7CisJCQkvKgor
CQkJICogVGhpcyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQgdGhlCisJ
CQkgKiBTQ1RQIGxheWVyLiBTbyB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVyLgorCQkJ
ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElP
TikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSkKKwkJCXRvc192YWx1ZSA9IChudG9o
bChpbnAtPmlwX2lucC5pbnAuaW5wX2Zsb3cpID4+IDIwKSAmIDB4ZmY7CisjZWxzZQorCQkJdG9z
X3ZhbHVlID0gKG50b2hsKCgoc3RydWN0IGluNnBjYiAqKWlucCktPmluNnBfZmxvd2luZm8pID4+
IDIwKSAmIDB4ZmY7CisjZW5kaWYKKyNlbmRpZgorCQl9CisJCXRvc192YWx1ZSAmPSAweGZjOwor
CQlpZiAoZWNuX29rKSB7CisJCQl0b3NfdmFsdWUgfD0gc2N0cF9nZXRfZWN0KHN0Y2IpOworCQl9
CisJCWZsb3dpbmZvID0gMHgwNjsKKwkJZmxvd2luZm8gPDw9IDg7CisJCWZsb3dpbmZvIHw9IHRv
c192YWx1ZTsKKwkJZmxvd2luZm8gPDw9IDIwOworCQlmbG93aW5mbyB8PSBmbG93bGFiZWw7CisJ
CWlwNmgtPmlwNl9mbG93ID0gaHRvbmwoZmxvd2luZm8pOworCQlpZiAocG9ydCkgeworCQkJaXA2
aC0+aXA2X254dCA9IElQUFJPVE9fVURQOworCQl9IGVsc2UgeworCQkJaXA2aC0+aXA2X254dCA9
IElQUFJPVE9fU0NUUDsKKwkJfQorCQlpcDZoLT5pcDZfcGxlbiA9IGh0b25zKHBhY2tldF9sZW5n
dGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKwkJaXA2aC0+aXA2X2RzdCA9IHNpbjYtPnNp
bjZfYWRkcjsKKworCQkvKgorCQkgKiBBZGQgU1JDIGFkZHJlc3Mgc2VsZWN0aW9uIGhlcmU6IHdl
IGNhbiBvbmx5IHJldXNlIHRvIGEKKwkJICogbGltaXRlZCBkZWdyZWUgdGhlIGthbWUgc3JjLWFk
ZHItc2VsLCBzaW5jZSB3ZSBjYW4gdHJ5CisJCSAqIHRoZWlyIHNlbGVjdGlvbiBidXQgaXQgbWF5
IG5vdCBiZSBib3VuZC4KKwkJICovCisJCW1lbXNldCgmbHNhNl90bXAsIDAsIHNpemVvZihsc2E2
X3RtcCkpOworCQlsc2E2X3RtcC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVf
U0lONl9MRU4KKwkJbHNhNl90bXAuc2luNl9sZW4gPSBzaXplb2YobHNhNl90bXApOworI2VuZGlm
CisJCWxzYTYgPSAmbHNhNl90bXA7CisJCWlmIChuZXQgJiYgb3V0X29mX2Fzb2Nfb2sgPT0gMCkg
eworCQkJaWYgKG5ldC0+cm8uX3NfYWRkciAmJiAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9m
bGFncyAmIChTQ1RQX0JFSU5HX0RFTEVURUR8U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpKSkgewor
CQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQluZXQtPnJvLl9zX2FkZHIg
PSBOVUxMOworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJCWlmIChyby0+cm9f
cnQpIHsKKwkJCQkJUlRGUkVFKHJvLT5yb19ydCk7CisJCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJ
CQkJfQorCQkJfQorCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgeworI2lmZGVm
IFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KikmbmV0LT5yby5fbF9hZGRyOworCQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2NvcGVpZCAqLwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVm
aW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNp
bjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKKyNlbHNlCisJCQkJaWYgKGluNl9lbWJl
ZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApCisj
ZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkJCWlmIChzYTZfZW1iZWRzY29wZShz
aW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDApCisjZWxzZQorCQkJCWlm
IChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQorI2VuZGlmCisJ
CQkJeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQkJ
fQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkvKiBDYWNoZSB0aGUg
c291cmNlIGFkZHJlc3MgKi8KKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRy
ZXNzX3NlbGVjdGlvbihpbnAsCisJCQkJCQkJCQkJc3RjYiwKKwkJCQkJCQkJCQlybywKKwkJCQkJ
CQkJCQluZXQsCisJCQkJCQkJCQkJMCwKKwkJCQkJCQkJCQl2cmZfaWQpOworI2lmZGVmIFNDVFBf
RU1CRURERURfVjZfU0NPUEUKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJCQkodm9pZClzYTZfcmVjb3Zl
cnNjb3BlKHNpbjYpOworI2Vsc2UKKwkJCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZz
aW42LT5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmCS8qIFNDVFBfS0FNRSAqLworI2VuZGlmCS8q
IFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0g
MTsKKwkJCX0KKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgeworCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQzLCAiVjY6Tm8gcm91dGUgdG8gaG9zdFxuIik7CisJCQkJbmV0LT5z
cmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0
LCBzb19sb2NrZWQpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOworCQkJCXNjdHBfbV9m
cmVlbShtKTsKKwkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCQl9CisJCQlsc2E2LT5zaW42
X2FkZHIgPSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7CisJCX0gZWxz
ZSB7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJc2luNiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopJnJvLT5yb19kc3Q7CisJCQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQg
Ki8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8
IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYt
PnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKKyNlbHNlCisJCQlpZiAoaW42X2Vt
YmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkK
KyNlbmRpZgorI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQlpZiAoc2E2X2VtYmVkc2NvcGUo
c2luNiwgTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAhPSAwKQorI2Vsc2UKKwkJCWlm
IChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQorI2VuZGlmCisJ
CQkgIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCSAg
fQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCWlmIChvdmVyX2FkZHIg
PT0gTlVMTCkgeworCQkJCXN0cnVjdCBzY3RwX2lmYSAqX2xzcmM7CisKKwkJCQlfbHNyYyA9IHNj
dHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwgc3RjYiwgcm8sCisJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQsCisJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRfb2ZfYXNvY19vaywKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7CisJCQkJaWYgKF9sc3JjID09IE5VTEwpIHsK
KwkJCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOworCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJCQlyZXR1
cm4gKEVIT1NUVU5SRUFDSCk7CisJCQkJfQorCQkJCWxzYTYtPnNpbjZfYWRkciA9IF9sc3JjLT5h
ZGRyZXNzLnNpbjYuc2luNl9hZGRyOworCQkJCXNjdHBfZnJlZV9pZmEoX2xzcmMpOworCQkJfSBl
bHNlIHsKKwkJCQlsc2E2LT5zaW42X2FkZHIgPSBvdmVyX2FkZHItPnNpbjYuc2luNl9hZGRyOwor
CQkJCVNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7CisJCQl9CisjaWZkZWYg
U0NUUF9FTUJFRERFRF9WNl9TQ09QRQorI2lmZGVmIFNDVFBfS0FNRQorCQkJKHZvaWQpc2E2X3Jl
Y292ZXJzY29wZShzaW42KTsKKyNlbHNlCisJCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYs
ICZzaW42LT5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmCS8qIFNDVFBfS0FNRSAqLworI2VuZGlm
CS8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJfQorCQlsc2E2LT5zaW42X3BvcnQgPSBp
bnAtPnNjdHBfbHBvcnQ7CisKKwkJaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7CisJCQkvKgorCQkJ
ICogc3JjIGFkZHIgc2VsZWN0aW9uIGZhaWxlZCB0byBmaW5kIGEgcm91dGUgKG9yCisJCQkgKiB2
YWxpZCBzb3VyY2UgYWRkciksIHNvIHdlIGNhbid0IGdldCB0aGVyZSBmcm9tCisJCQkgKiBoZXJl
IQorCQkJICovCisJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCXJl
dHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJfQorI2lmbmRlZiBTQ09QRURST1VUSU5HCisjaWZkZWYg
U0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkvKgorCQkgKiBYWFg6IHNhNiBtYXkgbm90IGhhdmUg
YSB2YWxpZCBzaW42X3Njb3BlX2lkIGluIHRoZQorCQkgKiBub24tU0NPUEVEUk9VVElORyBjYXNl
LgorCQkgKi8KKwkJbWVtc2V0KCZsc2E2X3N0b3JhZ2UsIDAsIHNpemVvZihsc2E2X3N0b3JhZ2Up
KTsKKwkJbHNhNl9zdG9yYWdlLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9T
SU42X0xFTgorCQlsc2E2X3N0b3JhZ2Uuc2luNl9sZW4gPSBzaXplb2YobHNhNl9zdG9yYWdlKTsK
KyNlbmRpZgorI2lmZGVmIFNDVFBfS0FNRQorCQlsc2E2X3N0b3JhZ2Uuc2luNl9hZGRyID0gbHNh
Ni0+c2luNl9hZGRyOworCQlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZSgmbHNhNl9zdG9y
YWdlKSkgIT0gMCkgeworI2Vsc2UKKwkJaWYgKChlcnJvciA9IGluNl9yZWNvdmVyc2NvcGUoJmxz
YTZfc3RvcmFnZSwgJmxzYTYtPnNpbjZfYWRkciwKKwkJICAgIE5VTEwpKSAhPSAwKSB7CisjZW5k
aWYJCQkJLyogU0NUUF9LQU1FICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInJl
Y292ZXIgc2NvcGUgZmFpbHMgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJCXNjdHBfbV9mcmVlbSht
KTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCS8qIFhYWCAqLworCQlsc2E2X3N0b3JhZ2Uu
c2luNl9hZGRyID0gbHNhNi0+c2luNl9hZGRyOworCQlsc2E2X3N0b3JhZ2Uuc2luNl9wb3J0ID0g
aW5wLT5zY3RwX2xwb3J0OworCQlsc2E2ID0gJmxzYTZfc3RvcmFnZTsKKyNlbmRpZiAvKiBTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLworCQlpcDZo
LT5pcDZfc3JjID0gbHNhNi0+c2luNl9hZGRyOworCisJCWlmIChwb3J0KSB7CisJCQlpZiAoaHRv
bnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpID09IDApIHsKKwkJ
CQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7CisJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVIT1NUVU5SRUFDSCk7CisJCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJCXJldHVybiAoRUhP
U1RVTlJFQUNIKTsKKwkJCX0KKwkJCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlw
NmggKyBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKwkJCXVkcC0+dWhfc3BvcnQgPSBodG9ucyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQl1ZHAtPnVoX2Rw
b3J0ID0gcG9ydDsKKwkJCXVkcC0+dWhfdWxlbiA9IGh0b25zKCh1aW50MTZfdCkocGFja2V0X2xl
bmd0aCAtIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKTsKKwkJCXVkcC0+dWhfc3VtID0gMDsKKwkJ
CXNjdHBoZHIgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpdWRwICsgc2l6ZW9mKHN0cnVj
dCB1ZHBoZHIpKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBoZHIgPSAoc3RydWN0IHNjdHBoZHIgKiko
KGNhZGRyX3QpaXA2aCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOworCQl9CisKKwkJc2N0cGhk
ci0+c3JjX3BvcnQgPSBzcmNfcG9ydDsKKwkJc2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0
OworCQlzY3RwaGRyLT52X3RhZyA9IHZfdGFnOworCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7CisK
KwkJLyoKKwkJICogV2Ugc2V0IHRoZSBob3AgbGltaXQgbm93IHNpbmNlIHRoZXJlIGlzIGEgZ29v
ZCBjaGFuY2UKKwkJICogdGhhdCBvdXIgcm8gcG9pbnRlciBpcyBub3cgZmlsbGVkCisJCSAqLwor
CQlpcDZoLT5pcDZfaGxpbSA9IFNDVFBfR0VUX0hMSU0oaW5wLCBybyk7CisjaWYgIShkZWZpbmVk
KF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJaWZwID0gU0NUUF9HRVRf
SUZOX1ZPSURfRlJPTV9ST1VURShybyk7CisjZW5kaWYKKworI2lmZGVmIFNDVFBfREVCVUcKKwkJ
LyogQ29weSB0byBiZSBzdXJlIHNvbWV0aGluZyBiYWQgaXMgbm90IGhhcHBlbmluZyAqLworCQlz
aW42LT5zaW42X2FkZHIgPSBpcDZoLT5pcDZfZHN0OworCQlsc2E2LT5zaW42X2FkZHIgPSBpcDZo
LT5pcDZfc3JjOworI2VuZGlmCisKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJDYWxs
aW5nIGlwdjYgb3V0cHV0IHJvdXRpbmUgZnJvbSBsb3cgbGV2ZWxcbiIpOworCQlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMywgInNyYzogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09V
VFBVVDMsIChzdHJ1Y3Qgc29ja2FkZHIgKilsc2E2KTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDMsICJkc3Q6ICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQzLCAoc3Ry
dWN0IHNvY2thZGRyICopc2luNik7CisJCWlmIChuZXQpIHsKKwkJCXNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkvKiBwcmVzZXJ2ZSB0aGUgcG9ydCBh
bmQgc2NvcGUgZm9yIGxpbmsgbG9jYWwgc2VuZCAqLworCQkJcHJldl9zY29wZSA9IHNpbjYtPnNp
bjZfc2NvcGVfaWQ7CisJCQlwcmV2X3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisJCX0KKworCQlp
ZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7CisJCQkvKiBmYWlsZWQgdG8g
cHJlcGVuZCBkYXRhLCBnaXZlIHVwICovCisJCQlzY3RwX21fZnJlZW0obSk7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9N
RU0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCVNDVFBfQVRUQUNIX0NIQUlOKG9fcGFr
LCBtLCBwYWNrZXRfbGVuZ3RoKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNjdHBoZHItPmNoZWNrc3Vt
ID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIHNpemVv
ZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwor
I2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisJCQl1ZHAtPnVoX3N1bSA9IDA7CisjZWxpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKCh1ZHAtPnVoX3N1bSA9IGluNl9ja3N1bShvX3Bh
aywgSVBQUk9UT19VRFAsIHNpemVvZihzdHJ1Y3QgaXA2X2hkciksIHBhY2tldF9sZW5ndGggLSBz
aXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgeworCQkJCXVkcC0+dWhfc3VtID0gMHhmZmZm
OworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAw
MDAKKwkJCXNjdHBoZHItPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9m
KHN0cnVjdCBpcDZfaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwor
I2Vsc2UKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMTAwMAorCQkJbS0+bV9wa3RoZHIuY3N1
bV9mbGFncyA9IENTVU1fU0NUUF9JUFY2OworI2Vsc2UKKwkJCW0tPm1fcGt0aGRyLmNzdW1fZmxh
Z3MgPSBDU1VNX1NDVFA7CisjZW5kaWYKKwkJCW0tPm1fcGt0aGRyLmNzdW1fZGF0YSA9IG9mZnNl
dG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19z
ZW5kaHdjcmMpOworI2VuZGlmCisjZWxzZQorCQkJaWYgKCEoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X25vX2NzdW1fb25fbG9vcGJhY2spICYmCisJCQkgICAgICAoc3RjYikgJiYgKHN0Y2ItPmFzb2Mu
c2NvcGUubG9vcGJhY2tfc2NvcGUpKSkgeworCQkJCXNjdHBoZHItPmNoZWNrc3VtID0gc2N0cF9j
YWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisJCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfc2VuZGh3Y3JjKTsKKwkJCX0KKyNlbmRpZgorCQl9CisJCS8qIHNlbmQgaXQgb3V0LiB0
YWJsZSBpZCBpcyB0YWtlbiBmcm9tIHN0Y2IgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfb3V0cHV0X3VubG9ja2VkKSkgJiYgKHNvX2xvY2tlZCkpIHsKKwkJCXNvID0gU0NUUF9JTlBf
U08oaW5wKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMCk7CisJCX0KKyNlbmRpZgorI2lm
ZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykKKwkJCXNjdHBfcGFja2V0X2xv
ZyhvX3Bhayk7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pKQorCQlTQ1RQX0lQNl9PVVRQVVQocmV0LCBvX3BhaywgKHN0cnVjdCByb3V0
ZV9pbjYgKilybywgJmlmcCwgc3RjYiwgdnJmX2lkKTsKKyNlbHNlCisJCVNDVFBfSVA2X09VVFBV
VChyZXQsIG9fcGFrLCAoc3RydWN0IHJvdXRlX2luNiAqKXJvLCBOVUxMLCBzdGNiLCB2cmZfaWQp
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkp
ICYmIChzb19sb2NrZWQpKSB7CisJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MCk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQl9CisjZW5kaWYKKwkJaWYgKG5ldCkgeworCQkJLyogZm9y
IGxpbmsgbG9jYWwgdGhpcyBtdXN0IGJlIGRvbmUgKi8KKwkJCXNpbjYtPnNpbjZfc2NvcGVfaWQg
PSBwcmV2X3Njb3BlOworCQkJc2luNi0+c2luNl9wb3J0ID0gcHJldl9wb3J0OworCQl9CisJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAicmV0dXJuIGZyb20gc2VuZCBpcyAlZFxuIiwgcmV0
KTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOworCQlTQ1RQX1NUQVRfSU5D
Ul9DT1VOVEVSNjQoc2N0cHNfb3V0cGFja2V0cyk7CisJCWlmIChyZXQpIHsKKwkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3NlbmRlcnJvcnMpOworCQl9CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJ
LyogTm93IGlmIHdlIGhhZCBhIHRlbXAgcm91dGUgZnJlZSBpdCAqLworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gOTAxMDAwCisJCQlST19SVEZSRUUocm8p
OworI2Vsc2UKKwkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQlSVEZSRUUocm8tPnJvX3J0KTsKKwkJ
CQlyby0+cm9fcnQgPSBOVUxMOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisJCQkvKiBQTVRV
IGNoZWNrIHZlcnN1cyBzbWFsbGVzdCBhc29jIE1UVSBnb2VzIGhlcmUgKi8KKwkJCWlmIChyby0+
cm9fcnQgPT0gTlVMTCkgeworCQkJCS8qIFJvdXRlIHdhcyBmcmVlZCAqLworCQkJCWlmIChuZXQt
PnJvLl9zX2FkZHIgJiYKKwkJCQkgICAgbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCkgeworCQkJCQlz
Y3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5V
TEw7CisJCQkJfQorCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJfQorCQkJaWYg
KChyby0+cm9fcnQgIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkcikgJiYKKwkJCSAgICAoKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgPT0gMCkpIHsKKwkJCQl1aW50MzJf
dCBtdHU7CisKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJvLl9z
X2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19ydCk7CisJCQkJaWYgKG10dSA+IDAp
IHsKKwkJCQkJaWYgKG5ldC0+cG9ydCkgeworCQkJCQkJbXR1IC09IHNpemVvZihzdHJ1Y3QgdWRw
aGRyKTsKKwkJCQkJfQorCQkJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKHN0Y2ItPmFzb2Muc21h
bGxlc3RfbXR1ID4gbXR1KSkgeworCQkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNldChpbnAsICZzdGNi
LT5hc29jLCBtdHUpOworCQkJCQl9CisJCQkJCW5ldC0+bXR1ID0gbXR1OworCQkJCX0KKwkJCX0K
KyNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQll
bHNlIGlmIChpZnApIHsKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQorI2RlZmluZSBORF9JRklO
Rk8oaWZwKQkoaWZwKQorI2RlZmluZSBsaW5rbXR1CQlpZl9tdHUKKyNlbmRpZgorCQkJCWlmIChO
RF9JRklORk8oaWZwKS0+bGlua210dSAmJgorCQkJCSAgICAoc3RjYi0+YXNvYy5zbWFsbGVzdF9t
dHUgPiBORF9JRklORk8oaWZwKS0+bGlua210dSkpIHsKKwkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNl
dChpbnAsCisJCQkJCSAgICAmc3RjYi0+YXNvYywKKwkJCQkJICAgIE5EX0lGSU5GTyhpZnApLT5s
aW5rbXR1KTsKKwkJCQl9CisJCQl9CisjZW5kaWYKKwkJfQorCQlyZXR1cm4gKHJldCk7CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJ
CWNoYXIgKmJ1ZmZlcjsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCQlpbnQgbGVu
OworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG87CisJCWxlbiA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cGhkcik7CisJCW5ld20gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAx
LCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdtID09IE5VTEwpIHsKKwkJCXNjdHBf
bV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJCX0KKwkJ
U0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NUUF9CVUZfTEVOKG5ld20pID0gbGVu
OworCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9IG5ld207CisJCXBhY2tldF9sZW5n
dGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7CisJCXNjdHBoZHIgPSBtdG9kKG0sIHN0cnVjdCBz
Y3RwaGRyICopOworCQlzY3RwaGRyLT5zcmNfcG9ydCA9IHNyY19wb3J0OworCQlzY3RwaGRyLT5k
ZXN0X3BvcnQgPSBkZXN0X3BvcnQ7CisJCXNjdHBoZHItPnZfdGFnID0gdl90YWc7CisJCXNjdHBo
ZHItPmNoZWNrc3VtID0gMDsKKwkJaWYgKFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkg
PT0gMCkgeworCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCAw
KTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7CisJCX0gZWxzZSB7CisJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdjcmMpOworCQl9CisJCWlmICh0b3NfdmFsdWUgPT0g
MCkgeworCQkJdG9zX3ZhbHVlID0gaW5wLT5pcF9pbnAuaW5wLmlucF9pcF90b3M7CisJCX0KKwkJ
dG9zX3ZhbHVlICY9IDB4ZmM7CisJCWlmIChlY25fb2spIHsKKwkJCXRvc192YWx1ZSB8PSBzY3Rw
X2dldF9lY3Qoc3RjYik7CisJCX0KKwkJLyogRG9uJ3QgYWxsb2MvZnJlZSBmb3IgZWFjaCBwYWNr
ZXQgKi8KKwkJaWYgKChidWZmZXIgPSBtYWxsb2MocGFja2V0X2xlbmd0aCkpICE9IE5VTEwpIHsK
KwkJCW1fY29weWRhdGEobSwgMCwgcGFja2V0X2xlbmd0aCwgYnVmZmVyKTsKKwkJCXJldCA9IFND
VFBfQkFTRV9WQVIoY29ubl9vdXRwdXQpKHNjb25uLT5zY29ubl9hZGRyLCBidWZmZXIsIHBhY2tl
dF9sZW5ndGgsIHRvc192YWx1ZSwgbm9mcmFnbWVudF9mbGFnKTsKKwkJCWZyZWUoYnVmZmVyKTsK
KwkJfSBlbHNlIHsKKwkJCXJldCA9IEVOT01FTTsKKwkJfQorCQlzY3RwX21fZnJlZW0obSk7CisJ
CXJldHVybiAocmV0KTsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMSwgIlVua25vd24gcHJvdG9jb2wgKFRTTkgpIHR5cGUgJWRcbiIsCisJCSAgICAg
ICAgKChzdHJ1Y3Qgc29ja2FkZHIgKil0byktPnNhX2ZhbWlseSk7CisJCXNjdHBfbV9mcmVlbSht
KTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJcmV0dXJuIChFRkFVTFQpOworCX0KK30KKworCit2
b2lkCitzY3RwX3NlbmRfaW5pdGlhdGUoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisg
ICAgKQoreworCXN0cnVjdCBtYnVmICptLCAqbV9sYXN0OworCXN0cnVjdCBzY3RwX25ldHMgKm5l
dDsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0OworCXN0cnVjdCBzY3RwX3N1cHBvcnRl
ZF9hZGRyX3BhcmFtICpzdXBfYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2lu
ZGljYXRpb24gKmFsaTsKKwlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0g
KnByX3N1cHBvcnRlZDsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJaW50IGNudF9pbml0
c190byA9IDA7CisJaW50IGVycm9yOworCXVpbnQxNl90IG51bV9leHQsIGNodW5rX2xlbiwgcGFk
ZGluZ19sZW4sIHBhcmFtZXRlcl9sZW47CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAo
c29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfSBl
bHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0KKyNlbmRp
ZgorCS8qIElOSVQncyBhbHdheXMgZ28gdG8gdGhlIHByaW1hcnkgKGFuZCB1c3VhbGx5IE9OTFkg
YWRkcmVzcykgKi8KKwluZXQgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJaWYg
KG5ldCA9PSBOVUxMKSB7CisJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwor
CQlpZiAobmV0ID09IE5VTEwpIHsKKwkJCS8qIFRTTkggKi8KKwkJCXJldHVybjsKKwkJfQorCQkv
KiB3ZSBjb25maXJtIGFueSBhZGRyZXNzIHdlIHNlbmQgYW4gSU5JVCB0byAqLworCQluZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKKwkJKHZvaWQpc2N0cF9zZXRfcHJp
bWFyeV9hZGRyKHN0Y2IsIE5VTEwsIG5ldCk7CisJfSBlbHNlIHsKKwkJLyogd2UgY29uZmlybSBh
bnkgYWRkcmVzcyB3ZSBzZW5kIGFuIElOSVQgdG8gKi8KKwkJbmV0LT5kZXN0X3N0YXRlICY9IH5T
Q1RQX0FERFJfVU5DT05GSVJNRUQ7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAi
U2VuZGluZyBJTklUXG4iKTsKKyNpZmRlZiBJTkVUNgorCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCS8qCisJCSAqIHNwZWNpYWwgaG9vaywgaWYgd2Ug
YXJlIHNlbmRpbmcgdG8gbGluayBsb2NhbCBpdCB3aWxsIG5vdAorCQkgKiBzaG93IHVwIGluIG91
ciBwcml2YXRlIGFkZHJlc3MgY291bnQuCisJCSAqLworCQlpZiAoSU42X0lTX0FERFJfTElOS0xP
Q0FMKCZuZXQtPnJvLl9sX2FkZHIuc2luNi5zaW42X2FkZHIpKQorCQkJY250X2luaXRzX3RvID0g
MTsKKwl9CisjZW5kaWYKKwlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1l
ci50aW1lcikpIHsKKwkJLyogVGhpcyBjYXNlIHNob3VsZCBub3QgaGFwcGVuICovCisJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUIC0gZmFpbGVkIHRpbWVyP1xuIik7
CisJCXJldHVybjsKKwl9CisJLyogc3RhcnQgdGhlIElOSVQgdGltZXIgKi8KKwlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9JTklULCBpbnAsIHN0Y2IsIG5ldCk7CisKKwltID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJ
aWYgKG0gPT0gTlVMTCkgeworCQkvKiBObyBtZW1vcnksIElOSVQgdGltZXIgd2lsbCByZS1hdHRl
bXB0LiAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUNCwgIlNlbmRpbmcgSU5JVCAtIG1i
dWY/XG4iKTsKKwkJcmV0dXJuOworCX0KKwljaHVua19sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX2luaXRfY2h1bmspOworCXBhZGRpbmdfbGVuID0gMDsKKwkvKiBOb3cgbGV0cyBw
dXQgdGhlIGNodW5rIGhlYWRlciBpbiBwbGFjZSAqLworCWluaXQgPSBtdG9kKG0sIHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmsgKik7CisJLyogbm93IHRoZSBjaHVuayBoZWFkZXIgKi8KKwlpbml0LT5j
aC5jaHVua190eXBlID0gU0NUUF9JTklUSUFUSU9OOworCWluaXQtPmNoLmNodW5rX2ZsYWdzID0g
MDsKKwkvKiBmaWxsIGluIGxhdGVyIGZyb20gbWJ1ZiB3ZSBidWlsZCAqLworCWluaXQtPmNoLmNo
dW5rX2xlbmd0aCA9IDA7CisJLyogcGxhY2UgaW4gbXkgdGFnICovCisJaW5pdC0+aW5pdC5pbml0
aWF0ZV90YWcgPSBodG9ubChzdGNiLT5hc29jLm15X3Z0YWcpOworCS8qIHNldCB1cCBzb21lIG9m
IHRoZSBjcmVkaXRzLiAqLworCWluaXQtPmluaXQuYV9yd25kID0gaHRvbmwobWF4KGlucC0+c2N0
cF9zb2NrZXQ/U0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCk6MCwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01JTklNQUxfUldORCkpOworCWluaXQtPmluaXQu
bnVtX291dGJvdW5kX3N0cmVhbXMgPSBodG9ucyhzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMp
OworCWluaXQtPmluaXQubnVtX2luYm91bmRfc3RyZWFtcyA9IGh0b25zKHN0Y2ItPmFzb2MubWF4
X2luYm91bmRfc3RyZWFtcyk7CisJaW5pdC0+aW5pdC5pbml0aWFsX3RzbiA9IGh0b25sKHN0Y2It
PmFzb2MuaW5pdF9zZXFfbnVtYmVyKTsKKworCS8qIEFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlv
biBwYXJhbWV0ZXIgKi8KKwlpZiAoaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNh
dG9yX3Byb3ZpZGVkKSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbik7CisJCWFsaSA9IChzdHJ1Y3Qgc2N0
cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRpb24gKikobXRvZChtLCBjYWRkcl90KSArIGNodW5r
X2xlbik7CisJCWFsaS0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfVUxQX0FEQVBUQVRJT04p
OworCQlhbGktPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQlhbGkt
PmluZGljYXRpb24gPSBodG9ubChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0
b3IpOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisKKwkvKiBFQ04gcGFyYW1l
dGVyICovCisJaWYgKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAxKSB7CisJCXBhcmFtZXRl
cl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJcGggPSAo
c3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJ
CXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9FQ05fQ0FQQUJMRSk7CisJCXBoLT5wYXJhbV9s
ZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9s
ZW47CisJfQorCisJLyogUFItU0NUUCBzdXBwb3J0ZWQgcGFyYW1ldGVyICovCisJaWYgKHN0Y2It
PmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9PSAxKSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJcGggPSAoc3RydWN0IHNjdHBfcGFy
YW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJCXBoLT5wYXJhbV90eXBl
ID0gaHRvbnMoU0NUUF9QUlNDVFBfU1VQUE9SVEVEKTsKKwkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0
b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisK
KwkvKiBBZGQgTkFUIGZyaWVuZGx5IHBhcmFtZXRlci4gKi8KKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KSkgeworCQlwYXJhbWV0ZXJfbGVuID0g
KHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCXBoID0gKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQlwaC0+cGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfSEFTX05BVF9TVVBQT1JUKTsKKwkJcGgtPnBhcmFtX2xlbmd0
aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsK
Kwl9CisKKwkvKiBBbmQgbm93IHRlbGwgdGhlIHBlZXIgd2hpY2ggZXh0ZW5zaW9ucyB3ZSBzdXBw
b3J0ICovCisJbnVtX2V4dCA9IDA7CisJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBv
cnRlZF9jaHVua190eXBlc19wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsK
KwlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJfc3VwcG9ydGVk
LT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9GT1JXQVJEX0NVTV9UU047CisJCWlmIChz
dGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgeworCQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBl
c1tudW1fZXh0KytdID0gU0NUUF9JRk9SV0FSRF9DVU1fVFNOOworCQl9CisJfQorCWlmIChzdGNi
LT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBl
c1tudW1fZXh0KytdID0gU0NUUF9BVVRIRU5USUNBVElPTjsKKwl9CisJaWYgKHN0Y2ItPmFzb2Mu
YXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVt
X2V4dCsrXSA9IFNDVFBfQVNDT05GOworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9l
eHQrK10gPSBTQ1RQX0FTQ09ORl9BQ0s7CisJfQorCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1
cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9
IFNDVFBfU1RSRUFNX1JFU0VUOworCX0KKwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQp
IHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9JREFUQTsK
Kwl9CisJaWYgKHN0Y2ItPmFzb2MubnJzYWNrX3N1cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1cHBv
cnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfTlJfU0VMRUNUSVZFX0FDSzsKKwl9
CisJaWYgKHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMSkgeworCQlwcl9zdXBwb3J0
ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOworCX0KKwlp
ZiAobnVtX2V4dCA+IDApIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3Ry
dWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtKSArIG51bV9leHQ7CisJCXByX3N1
cHBvcnRlZC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1VQUE9SVEVEX0NIVU5LX0VYVCk7
CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7
CisJCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJf
bGVuOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisJLyogYWRkIGF1dGhlbnRp
Y2F0aW9uIHBhcmFtZXRlcnMgKi8KKwlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCkgewor
CQkvKiBhdHRhY2ggUkFORE9NIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxlICovCisJCWlmIChzdGNi
LT5hc29jLmF1dGhpbmZvLnJhbmRvbSAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qgc2N0cF9hdXRoX3Jh
bmRvbSAqcmFuZHA7CisKKwkJCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJCQltZW1zZXQobXRv
ZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4pOworCQkJCWNodW5rX2xl
biArPSBwYWRkaW5nX2xlbjsKKwkJCQlwYWRkaW5nX2xlbiA9IDA7CisJCQl9CisJCQlyYW5kcCA9
IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
KTsKKwkJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhf
cmFuZG9tKSArIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tX2xlbjsKKwkJCS8qIHJhbmRvbSBr
ZXkgYWxyZWFkeSBjb250YWlucyB0aGUgaGVhZGVyICovCisJCQltZW1jcHkocmFuZHAsIHN0Y2It
PmFzb2MuYXV0aGluZm8ucmFuZG9tLT5rZXksIHBhcmFtZXRlcl9sZW4pOworCQkJcGFkZGluZ19s
ZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCQljaHVu
a19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwkJfQorCQkvKiBhZGQgSE1BQ19BTEdPIHBhcmFtZXRl
ciAqLworCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qg
c2N0cF9hdXRoX2htYWNfYWxnbyAqaG1hY3M7CisKKwkJCWlmIChwYWRkaW5nX2xlbiA+IDApIHsK
KwkJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4p
OworCQkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCQlwYWRkaW5nX2xlbiA9IDA7CisJ
CQl9CisJCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqKShtdG9kKG0sIGNh
ZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3QpKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbykgKworCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RjYi0+YXNvYy5sb2NhbF9obWFjcy0+bnVtX2FsZ28gKiBzaXplb2YodWludDE2X3Qp
KTsKKwkJCWhtYWNzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9ITUFDX0xJU1QpOworCQkJ
aG1hY3MtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQkJc2N0cF9z
ZXJpYWxpemVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywgKHVpbnQ4X3QgKilobWFj
cy0+aG1hY19pZHMpOworCQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVu
KSAtIHBhcmFtZXRlcl9sZW47CisJCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwkJfQor
CQkvKiBhZGQgQ0hVTktTIHBhcmFtZXRlciAqLworCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9hdXRo
X2NodW5rcyAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5r
czsKKworCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJCW1lbXNldChtdG9kKG0sIGNhZGRy
X3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCQkJY2h1bmtfbGVuICs9IHBhZGRp
bmdfbGVuOworCQkJCXBhZGRpbmdfbGVuID0gMDsKKwkJCX0KKwkJCWNodW5rcyA9IChzdHJ1Y3Qg
c2N0cF9hdXRoX2NodW5rX2xpc3QgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJ
CQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVu
a19saXN0KSArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX2F1dGhfZ2V0X2No
a2xpc3Rfc2l6ZShzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSk7CisJCQljaHVua3MtPnBo
LnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NIVU5LX0xJU1QpOworCQkJY2h1bmtzLT5waC5wYXJh
bV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJCXNjdHBfc2VyaWFsaXplX2F1dGhf
Y2h1bmtzKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MsIGNodW5rcy0+Y2h1bmtfdHlwZXMp
OworCQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRl
cl9sZW47CisJCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwkJfQorCX0KKworCS8qIG5v
dyBhbnkgY29va2llIHRpbWUgZXh0ZW5zaW9ucyAqLworCWlmIChzdGNiLT5hc29jLmNvb2tpZV9w
cmVzZXJ2ZV9yZXEpIHsKKwkJc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3BhcmFtICpjb29r
aWVfcHJlc2VydmU7CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2Qo
bSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiAr
PSBwYWRkaW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQorCQlwYXJhbWV0ZXJfbGVu
ID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0pOwor
CQljb29raWVfcHJlc2VydmUgPSAoc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3BhcmFtICop
KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQljb29raWVfcHJlc2VydmUtPnBoLnBh
cmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NPT0tJRV9QUkVTRVJWRSk7CisJCWNvb2tpZV9wcmVzZXJ2
ZS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNvb2tpZV9wcmVz
ZXJ2ZS0+dGltZSA9IGh0b25sKHN0Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3JlcSk7CisJCXN0
Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3JlcSA9IDA7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0
ZXJfbGVuOworCX0KKworCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbCB8fCBz
dGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgeworCQl1aW50OF90IGk7CisKKwkJaWYg
KHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19s
ZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCXBh
ZGRpbmdfbGVuID0gMDsKKwkJfQorCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9s
ZWdhbCkgeworCQkJcGFyYW1ldGVyX2xlbiArPSAodWludDE2X3Qpc2l6ZW9mKHVpbnQxNl90KTsK
KwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJCXBhcmFt
ZXRlcl9sZW4gKz0gKHVpbnQxNl90KXNpemVvZih1aW50MTZfdCk7CisJCX0KKwkJc3VwX2FkZHIg
PSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0gKikobXRvZChtLCBjYWRkcl90KSAr
IGNodW5rX2xlbik7CisJCXN1cF9hZGRyLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVVBQ
T1JURURfQUREUlRZUEUpOworCQlzdXBfYWRkci0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFy
YW1ldGVyX2xlbik7CisJCWkgPSAwOworCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJf
bGVnYWwpIHsKKwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0b25zKFNDVFBfSVBWNF9B
RERSRVNTKTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsK
KwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0b25zKFNDVFBfSVBWNl9BRERSRVNTKTsK
KwkJfQorCQlwYWRkaW5nX2xlbiA9IDQgLSAyICogaTsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRl
cl9sZW47CisJfQorCisJU0NUUF9CVUZfTEVOKG0pID0gY2h1bmtfbGVuOworCS8qIG5vdyB0aGUg
YWRkcmVzc2VzICovCisJLyogVG8gb3B0aW1pemUgdGhpcyB3ZSBjb3VsZCBwdXQgdGhlIHNjb3Bp
bmcgc3R1ZmYKKwkgKiBpbnRvIGEgc3RydWN0dXJlIGFuZCByZW1vdmUgdGhlIGluZGl2aWR1YWwg
dWludDgncyBmcm9tCisJICogdGhlIGFzc29jIHN0cnVjdHVyZS4gVGhlbiB3ZSBjb3VsZCBqdXN0
IHNpZmEgaW4gdGhlCisJICogYWRkcmVzcyB3aXRoaW4gdGhlIHN0Y2IuIEJ1dCBmb3Igbm93IHRo
aXMgaXMgYSBxdWljaworCSAqIGhhY2sgdG8gZ2V0IHRoZSBhZGRyZXNzIHN0dWZmIHRlYXNlZCBh
cGFydC4KKwkgKi8KKwltX2xhc3QgPSBzY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9pYShpbnAsIHN0
Y2IsICZzdGNiLT5hc29jLnNjb3BlLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG0sIGNudF9pbml0c190bywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmcGFkZGluZ19sZW4sICZjaHVua19sZW4pOworCisJaW5pdC0+Y2guY2h1bmtfbGVuZ3RoID0g
aHRvbnMoY2h1bmtfbGVuKTsKKwlpZiAocGFkZGluZ19sZW4gPiAwKSB7CisJCWlmIChzY3RwX2Fk
ZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwpIHsKKwkJCXNjdHBfbV9m
cmVlbShtKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
NCwgIlNlbmRpbmcgSU5JVCAtIGNhbGxzIGxvd2xldmVsX291dHB1dFxuIik7CisJaWYgKChlcnJv
ciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgbmV0LAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+
cm8uX2xfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbSwg
MCwgTlVMTCwgMCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwoMCksCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvX2xvY2tlZCkpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiR2FrIHNlbmQg
ZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCXN0Y2It
PmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2
ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7
CisJfQorCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsK
Kwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbmV0LT5sYXN0X3NlbnRfdGltZSk7Cit9CisK
K3N0cnVjdCBtYnVmICoKK3NjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoc3Ry
dWN0IG1idWYgKmluX2luaXRwa3QsCisJaW50IHBhcmFtX29mZnNldCwgaW50ICphYm9ydF9wcm9j
ZXNzaW5nLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY3AsIGludCAqbmF0X2ZyaWVuZGx5KQorewor
CS8qCisJICogR2l2ZW4gYSBtYnVmIGNvbnRhaW5pbmcgYW4gSU5JVCBvciBJTklULUFDSyB3aXRo
IHRoZSBwYXJhbV9vZmZzZXQKKwkgKiBiZWluZyBlcXVhbCB0byB0aGUgYmVnaW5uaW5nIG9mIHRo
ZSBwYXJhbXMgaS5lLiAoaXBobGVuICsKKwkgKiBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9tc2cp
IHBhcnNlIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMgdG8gdGhlCisJICogZW5kIG9mIHRoZSBtYnVm
IHZlcmlmeWluZyB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBrbm93bi4KKwkgKgorCSAqIEZvciB1
bmtub3duIHBhcmFtZXRlcnMgYnVpbGQgYW5kIHJldHVybiBhIG1idWYgd2l0aAorCSAqIFVOUkVD
T0dOSVpFRF9QQVJBTUVURVIgZXJyb3JzLiBJZiB0aGUgZmxhZ3MgaW5kaWNhdGUgdG8gc3RvcAor
CSAqIHByb2Nlc3NpbmcgdGhpcyBjaHVuayBzdG9wLCBhbmQgc2V0ICphYm9ydF9wcm9jZXNzaW5n
IHRvIDEuCisJICoKKwkgKiBCeSBoYXZpbmcgcGFyYW1fb2Zmc2V0IGJlIHByZS1zZXQgdG8gd2hl
cmUgcGFyYW1ldGVycyBiZWdpbiBpdCBpcworCSAqIGhvcGVkIHRoYXQgdGhpcyByb3V0aW5lIG1h
eSBiZSByZXVzZWQgaW4gdGhlIGZ1dHVyZSBieSBuZXcKKwkgKiBmZWF0dXJlcy4KKwkgKi8KKwlz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1zOworCisJc3RydWN0IG1idWYgKm1hdCwg
Km9wX2VycjsKKwljaGFyIHRlbXBidWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJaW50IGF0
LCBsaW1pdCwgcGFkX25lZWRlZDsKKwl1aW50MTZfdCBwdHlwZSwgcGxlbiwgcGFkZGVkX3NpemU7
CisJaW50IGVycl9hdDsKKworCSphYm9ydF9wcm9jZXNzaW5nID0gMDsKKwltYXQgPSBpbl9pbml0
cGt0OworCWVycl9hdCA9IDA7CisJbGltaXQgPSBudG9ocyhjcC0+Y2h1bmtfbGVuZ3RoKSAtIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKKwlhdCA9IHBhcmFtX29mZnNldDsKKwlvcF9l
cnIgPSBOVUxMOworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiQ2hlY2sgZm9yIHVucmVj
b2duaXplZCBwYXJhbSdzXG4iKTsKKwlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0
LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CisJd2hpbGUgKChwaGRyICE9IE5VTEwpICYmICgo
c2l6ZV90KWxpbWl0ID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpKSB7CisJCXB0eXBl
ID0gbnRvaHMocGhkci0+cGFyYW1fdHlwZSk7CisJCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9s
ZW5ndGgpOworCQlpZiAoKHBsZW4gPiBsaW1pdCkgfHwgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpKSkgeworCQkJLyogd2Fja2VkIHBhcmFtZXRlciAqLworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciAlZFxuIiwgcGxlbik7CisJ
CQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJfQorCQlsaW1pdCAtPSBTQ1RQX1NJWkUzMihwbGVuKTsK
KwkJLyotCisJCSAqIEFsbCBwYXJhbWV0ZXJzIGZvciBhbGwgY2h1bmtzIHRoYXQgd2Uga25vdy91
bmRlcnN0YW5kIGFyZQorCQkgKiBsaXN0ZWQgaGVyZS4gV2UgcHJvY2VzcyB0aGVtIG90aGVyIHBs
YWNlcyBhbmQgbWFrZQorCQkgKiBhcHByb3ByaWF0ZSBzdG9wIGFjdGlvbnMgcGVyIHRoZSB1cHBl
ciBiaXRzLiBIb3dldmVyIHRoaXMKKwkJICogaXMgdGhlIGdlbmVyaWMgcm91dGluZSBwcm9jZXNz
b3IncyBjYW4gY2FsbCB0byBnZXQgYmFjaworCQkgKiBhbiBvcGVyci4uIHRvIGVpdGhlciBpbmNv
cnBvcmF0ZSAoaW5pdC1hY2spIG9yIHNlbmQuCisJCSAqLworCQlwYWRkZWRfc2l6ZSA9IFNDVFBf
U0laRTMyKHBsZW4pOworCQlzd2l0Y2ggKHB0eXBlKSB7CisJCQkvKiBQYXJhbSdzIHdpdGggdmFy
aWFibGUgc2l6ZSAqLworCQljYXNlIFNDVFBfSEVBUlRCRUFUX0lORk86CisJCWNhc2UgU0NUUF9T
VEFURV9DT09LSUU6CisJCWNhc2UgU0NUUF9VTlJFQ09HX1BBUkFNOgorCQljYXNlIFNDVFBfRVJS
T1JfQ0FVU0VfSU5EOgorCQkJLyogb2sgc2tpcCBmd2QgKi8KKwkJCWF0ICs9IHBhZGRlZF9zaXpl
OworCQkJYnJlYWs7CisJCQkvKiBQYXJhbSdzIHdpdGggdmFyaWFibGUgc2l6ZSB3aXRoaW4gYSBy
YW5nZSAqLworCQljYXNlIFNDVFBfQ0hVTktfTElTVDoKKwkJY2FzZSBTQ1RQX1NVUFBPUlRFRF9D
SFVOS19FWFQ6CisJCQlpZiAocGFkZGVkX3NpemUgPiAoc2l6ZW9mKHN0cnVjdCBzY3RwX3N1cHBv
cnRlZF9jaHVua190eXBlc19wYXJhbSkgKyAoc2l6ZW9mKHVpbnQ4X3QpICogU0NUUF9NQVhfU1VQ
UE9SVEVEX0VYVCkpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlk
IHNpemUgLSBlcnJvciBjaGtsaXN0ICVkXG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6
ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9T
VVBQT1JURURfQUREUlRZUEU6CisJCQlpZiAocGFkZGVkX3NpemUgPiBTQ1RQX01BWF9BRERSX1BB
UkFNU19TSVpFKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNp
emUgLSBlcnJvciBzdXBhZGRydHlwZSAlZFxuIiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3Np
emU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBf
UkFORE9NOgorCQkJaWYgKHBhZGRlZF9zaXplID4gKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX3Jh
bmRvbSkgKyBTQ1RQX1JBTkRPTV9NQVhfU0laRSkpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHJhbmRvbSAlZFxuIiwgcGxlbik7CisJCQkJ
Z290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKKwkJY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNT
OgorCQljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6CisJCQlpZiAoKHBhZGRlZF9zaXplICE9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtKSkgJiYKKwkJCSAgICAocGFkZGVk
X3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3BhcmFtKSkpIHsKKwkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHNldHByaW0g
JWRcbiIsIHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFk
ZGVkX3NpemU7CisJCQlicmVhazsKKwkJCS8qIFBhcmFtJ3Mgd2l0aCBhIGZpeGVkIHNpemUgKi8K
KwkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJCWlmIChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yo
c3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBpcHY0IGFkZHIgJWRcbiIsIHBsZW4pOworCQkJ
CWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQlicmVh
azsKKwkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJCWlmIChwYWRkZWRfc2l6ZSAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBpcHY2IGFkZHIgJWRcbiIsIHBsZW4pOwor
CQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQli
cmVhazsKKwkJY2FzZSBTQ1RQX0NPT0tJRV9QUkVTRVJWRToKKwkJCWlmIChwYWRkZWRfc2l6ZSAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3BhcmFtKSkgeworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgY29va2llLXByZXNl
cnZlICVkXG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9
IHBhZGRlZF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9IQVNfTkFUX1NVUFBPUlQ6CisJ
CQkqbmF0X2ZyaWVuZGx5ID0gMTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFNDVFBf
UFJTQ1RQX1NVUFBPUlRFRDoKKwkJCWlmIChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlk
IHNpemUgLSBlcnJvciBwcnNjdHAvbmF0IHN1cHBvcnQgJWRcbiIsIHBsZW4pOworCQkJCWdvdG8g
aW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQlicmVhazsKKwkJ
Y2FzZSBTQ1RQX0VDTl9DQVBBQkxFOgorCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIklu
dmFsaWQgc2l6ZSAtIGVycm9yIGVjbiAlZFxuIiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3Np
emU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBf
VUxQX0FEQVBUQVRJT046CisJCQlpZiAocGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGFkYXBhdGF0aW9uICVkXG4iLCBwbGVuKTsK
KwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9zaXplOworCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9SVDoKKwkJCWlmIChwYWRkZWRfc2l6ZSAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSkgeworCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3Igc3VjY2VzcyAlZFxuIiwgcGxl
bik7CisJCQkJZ290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsK
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfSE9TVE5BTUVfQUREUkVTUzoKKwkJeworCQkJLyogV2Ug
Y2FuIE5PVCBoYW5kbGUgSE9TVCBOQU1FIGFkZHJlc3NlcyEhICovCisJCQlpbnQgbF9sZW47CisK
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiQ2FuJ3QgaGFuZGxlIGhvc3RuYW1lIGFk
ZHJlc3Nlcy4uIGFib3J0IHByb2Nlc3NpbmdcbiIpOworCQkJKmFib3J0X3Byb2Nlc3NpbmcgPSAx
OworCQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7CisJCQkJLyogT2sgbmVlZCB0byB0cnkgdG8gZ2V0
IGEgbWJ1ZiAqLworI2lmZGVmIElORVQ2CisJCQkJbF9sZW4gPSBTQ1RQX01JTl9PVkVSSEVBRDsK
KyNlbHNlCisJCQkJbF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKyNlbmRpZgorCQkJCWxf
bGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJCQkJbF9sZW4gKz0gcGxlbjsK
KwkJCQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQkJCW9wX2VyciA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwor
CQkJCWlmIChvcF9lcnIpIHsKKwkJCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSAwOworCQkJCQkv
KgorCQkJCQkgKiBwcmUtcmVzZXJ2ZSBzcGFjZSBmb3IgaXAgYW5kIHNjdHAKKwkJCQkJICogaGVh
ZGVyICBhbmQgY2h1bmsgaGRyCisJCQkJCSAqLworI2lmZGVmIElORVQ2CisJCQkJCVNDVFBfQlVG
X1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKyNlbHNlCisJCQkJCVND
VFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwKSk7CisjZW5kaWYKKwkJCQkJ
U0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQkJCQlT
Q1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7CisJ
CQkJfQorCQkJfQorCQkJaWYgKG9wX2VycikgeworCQkJCS8qIElmIHdlIGhhdmUgc3BhY2UgKi8K
KwkJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBzOworCisJCQkJaWYgKGVycl9hdCAlIDQpIHsKKwkJ
CQkJdWludDMyX3QgY3B0aGlzID0gMDsKKworCQkJCQlwYWRfbmVlZGVkID0gNCAtIChlcnJfYXQg
JSA0KTsKKwkJCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgcGFkX25lZWRlZCwgKGNhZGRy
X3QpJmNwdGhpcyk7CisJCQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOworCQkJCX0KKwkJCQlzLnBh
cmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSKTsKKwkJCQlzLnBh
cmFtX2xlbmd0aCA9IGh0b25zKHNpemVvZihzKSArIHBsZW4pOworCQkJCW1fY29weWJhY2sob3Bf
ZXJyLCBlcnJfYXQsIHNpemVvZihzKSwgKGNhZGRyX3QpJnMpOworCQkJCWVycl9hdCArPSBzaXpl
b2Yocyk7CisJCQkJaWYgKHBsZW4gPiBzaXplb2YodGVtcGJ1ZikpIHsKKwkJCQkJcGxlbiA9IHNp
emVvZih0ZW1wYnVmKTsKKwkJCQl9CisJCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obWF0
LCBhdCwgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopdGVtcGJ1ZiwgcGxlbik7CisJCQkJaWYgKHBo
ZHIgPT0gTlVMTCkgeworCQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJCQkJLyoKKwkJCQkJ
ICogd2UgYXJlIG91dCBvZiBtZW1vcnkgYnV0IHdlIHN0aWxsCisJCQkJCSAqIG5lZWQgdG8gaGF2
ZSBhIGxvb2sgYXQgd2hhdCB0byBkbworCQkJCQkgKiAodGhlIHN5c3RlbSBpcyBpbiB0cm91Ymxl
CisJCQkJCSAqIHRob3VnaCkuCisJCQkJCSAqLworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0K
KwkJCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwbGVuLCAoY2FkZHJfdClwaGRyKTsKKwkJ
CX0KKwkJCXJldHVybiAob3BfZXJyKTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQkv
KgorCQkJICogd2UgZG8gbm90IHJlY29nbml6ZSB0aGUgcGFyYW1ldGVyIGZpZ3VyZSBvdXQgd2hh
dAorCQkJICogd2UgZG8uCisJCQkgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAi
SGl0IGRlZmF1bHQgcGFyYW0gJXhcbiIsIHB0eXBlKTsKKwkJCWlmICgocHR5cGUgJiAweDQwMDAp
ID09IDB4NDAwMCkgeworCQkJCS8qIFJlcG9ydCBiaXQgaXMgc2V0Pz8gKi8KKwkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMSwgInJlcG9ydCBvcCBlcnJcbiIpOworCQkJCWlmIChvcF9lcnIg
PT0gTlVMTCkgeworCQkJCQlpbnQgbF9sZW47CisJCQkJCS8qIE9rIG5lZWQgdG8gdHJ5IHRvIGdl
dCBhbiBtYnVmICovCisjaWZkZWYgSU5FVDYKKwkJCQkJbF9sZW4gPSBTQ1RQX01JTl9PVkVSSEVB
RDsKKyNlbHNlCisJCQkJCWxfbGVuID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisjZW5kaWYKKwkJ
CQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwkJCQkJbF9sZW4gKz0g
cGxlbjsKKwkJCQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJCQkJ
b3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRf
REFUQSk7CisJCQkJCWlmIChvcF9lcnIpIHsKKwkJCQkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0g
MDsKKyNpZmRlZiBJTkVUNgorCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihz
dHJ1Y3QgaXA2X2hkcikpOworI2Vsc2UKKwkJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBz
aXplb2Yoc3RydWN0IGlwKSk7CisjZW5kaWYKKwkJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJy
LCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwkJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJy
LCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAo
b3BfZXJyKSB7CisJCQkJCS8qIElmIHdlIGhhdmUgc3BhY2UgKi8KKwkJCQkJc3RydWN0IHNjdHBf
cGFyYW1oZHIgczsKKworCQkJCQlpZiAoZXJyX2F0ICUgNCkgeworCQkJCQkJdWludDMyX3QgY3B0
aGlzID0gMDsKKworCQkJCQkJcGFkX25lZWRlZCA9IDQgLSAoZXJyX2F0ICUgNCk7CisJCQkJCQlt
X2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwYWRfbmVlZGVkLCAoY2FkZHJfdCkmY3B0aGlzKTsK
KwkJCQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOworCQkJCQl9CisJCQkJCXMucGFyYW1fdHlwZSA9
IGh0b25zKFNDVFBfVU5SRUNPR19QQVJBTSk7CisJCQkJCXMucGFyYW1fbGVuZ3RoID0gaHRvbnMo
c2l6ZW9mKHMpICsgcGxlbik7CisJCQkJCW1fY29weWJhY2sob3BfZXJyLCBlcnJfYXQsIHNpemVv
ZihzKSwgKGNhZGRyX3QpJnMpOworCQkJCQllcnJfYXQgKz0gc2l6ZW9mKHMpOworCQkJCQlpZiAo
cGxlbiA+IHNpemVvZih0ZW1wYnVmKSkgeworCQkJCQkJcGxlbiA9IHNpemVvZih0ZW1wYnVmKTsK
KwkJCQkJfQorCQkJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0LCAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKil0ZW1wYnVmLCBwbGVuKTsKKwkJCQkJaWYgKHBoZHIgPT0gTlVMTCkg
eworCQkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQkJCQkvKgorCQkJCQkJICogd2UgYXJl
IG91dCBvZiBtZW1vcnkgYnV0CisJCQkJCQkgKiB3ZSBzdGlsbCBuZWVkIHRvIGhhdmUgYQorCQkJ
CQkJICogbG9vayBhdCB3aGF0IHRvIGRvICh0aGUKKwkJCQkJCSAqIHN5c3RlbSBpcyBpbiB0cm91
YmxlCisJCQkJCQkgKiB0aG91Z2gpLgorCQkJCQkJICovCisJCQkJCQlvcF9lcnIgPSBOVUxMOwor
CQkJCQkJZ290byBtb3JlX3Byb2Nlc3Npbmc7CisJCQkJCX0KKwkJCQkJbV9jb3B5YmFjayhvcF9l
cnIsIGVycl9hdCwgcGxlbiwgKGNhZGRyX3QpcGhkcik7CisJCQkJCWVycl9hdCArPSBwbGVuOwor
CQkJCX0KKwkJCX0KKwkJbW9yZV9wcm9jZXNzaW5nOgorCQkJaWYgKChwdHlwZSAmIDB4ODAwMCkg
PT0gMHgwMDAwKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJzdG9wIHByb2Nc
biIpOworCQkJCXJldHVybiAob3BfZXJyKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogc2tpcCB0aGlz
IGNodW5rIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDEsICJtb3ZlIG9uXG4iKTsKKwkJCQlhdCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwkJ
CX0KKwkJCWJyZWFrOworCisJCX0KKwkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obWF0LCBh
dCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOworCX0KKwlyZXR1cm4gKG9wX2Vycik7CisgaW52
YWxpZF9zaXplOgorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiYWJvcnQgZmxhZyBzZXRc
biIpOworCSphYm9ydF9wcm9jZXNzaW5nID0gMTsKKwlpZiAoKG9wX2VyciA9PSBOVUxMKSAmJiBw
aGRyKSB7CisJCWludCBsX2xlbjsKKyNpZmRlZiBJTkVUNgorCQlsX2xlbiA9IFNDVFBfTUlOX09W
RVJIRUFEOworI2Vsc2UKKwkJbF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKyNlbmRpZgor
CQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCQlsX2xlbiArPSAoMiAq
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpOworCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2cobF9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJaWYgKG9wX2Vycikg
eworCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSAwOworI2lmZGVmIElORVQ2CisJCQlTQ1RQX0JV
Rl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisjZWxzZQorCQkJU0NU
UF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXApKTsKKyNlbmRpZgorCQkJU0NU
UF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQkJU0NUUF9C
VUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQl9CisJ
fQorCWlmICgob3BfZXJyKSAmJiBwaGRyKSB7CisJCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHM7CisK
KwkJaWYgKGVycl9hdCAlIDQpIHsKKwkJCXVpbnQzMl90IGNwdGhpcyA9IDA7CisKKwkJCXBhZF9u
ZWVkZWQgPSA0IC0gKGVycl9hdCAlIDQpOworCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwg
cGFkX25lZWRlZCwgKGNhZGRyX3QpJmNwdGhpcyk7CisJCQllcnJfYXQgKz0gcGFkX25lZWRlZDsK
KwkJfQorCQlzLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElP
Tik7CisJCXMucGFyYW1fbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHMpICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyKSk7CisJCW1fY29weWJhY2sob3BfZXJyLCBlcnJfYXQsIHNpemVvZihzKSwg
KGNhZGRyX3QpJnMpOworCQllcnJfYXQgKz0gc2l6ZW9mKHMpOworCQkvKiBPbmx5IGNvcHkgYmFj
ayB0aGUgcC1oZHIgdGhhdCBjYXVzZWQgdGhlIGlzc3VlICovCisJCW1fY29weWJhY2sob3BfZXJy
LCBlcnJfYXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksIChjYWRkcl90KXBoZHIpOwor
CX0KKwlyZXR1cm4gKG9wX2Vycik7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfYXJlX3RoZXJlX25l
d19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IG1i
dWYgKmluX2luaXRwa3QsIGludCBvZmZzZXQsIHN0cnVjdCBzb2NrYWRkciAqc3JjKQoreworCS8q
CisJICogR2l2ZW4gYSBJTklUIHBhY2tldCwgbG9vayB0aHJvdWdoIHRoZSBwYWNrZXQgdG8gdmVy
aWZ5IHRoYXQgdGhlcmUKKwkgKiBhcmUgTk8gbmV3IGFkZHJlc3Nlcy4gQXMgd2UgZ28gdGhyb3Vn
aCB0aGUgcGFyYW1ldGVycyBhZGQgcmVwb3J0cworCSAqIG9mIGFueSB1bi11bmRlcnN0b29kIHBh
cmFtZXRlcnMgdGhhdCByZXF1aXJlIGFuIGVycm9yLiAgQWxzbyB3ZQorCSAqIG11c3QgcmV0dXJu
ICgxKSB0byBkcm9wIHRoZSBwYWNrZXQgaWYgd2Ugc2VlIGEgdW4tdW5kZXJzdG9vZAorCSAqIHBh
cmFtZXRlciB0aGF0IHRlbGxzIHVzIHRvIGRyb3AgdGhlIGNodW5rLgorCSAqLworCXN0cnVjdCBz
b2NrYWRkciAqc2FfdG91c2U7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciAqcGhkciwgcGFyYW1zOworCXVpbnQxNl90IHB0eXBlLCBwbGVuOworCXVpbnQ4X3Qg
Zm5kOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlpbnQgY2hlY2tfc3JjOworI2lmZGVmIElO
RVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNCwgKnNhNDsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42LCAqc2E2OworI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzYWM7CisjZW5kaWYKKworI2lm
ZGVmIElORVQKKwltZW1zZXQoJnNpbjQsIDAsIHNpemVvZihzaW40KSk7CisJc2luNC5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW40LnNpbl9sZW4gPSBzaXpl
b2Yoc2luNCk7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJbWVtc2V0KCZzaW42LCAw
LCBzaXplb2Yoc2luNikpOworCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRpZgorI2Vu
ZGlmCisJLyogRmlyc3Qgd2hhdCBhYm91dCB0aGUgc3JjIGFkZHJlc3Mgb2YgdGhlIHBrdCA/ICov
CisJY2hlY2tfc3JjID0gMDsKKwlzd2l0Y2ggKHNyYy0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgewor
CQkJY2hlY2tfc3JjID0gMTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBBRl9JTkVUNjoKKwkJaWYgKGFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgeworCQkJ
Y2hlY2tfc3JjID0gMTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCWlmIChhc29jLT5zY29wZS5jb25uX2FkZHJfbGVn
YWwpIHsKKwkJCWNoZWNrX3NyYyA9IDE7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0
OgorCQkvKiBUU05IICovCisJCWJyZWFrOworCX0KKwlpZiAoY2hlY2tfc3JjKSB7CisJCWZuZCA9
IDA7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlz
YSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyOworCQkJaWYgKHNhLT5zYV9m
YW1pbHkgPT0gc3JjLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJaWYgKHNhLT5zYV9m
YW1pbHkgPT0gQUZfSU5FVCkgeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyYzQ7CisKKwkJ
CQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQkJCQlzcmM0ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKXNyYzsKKwkJCQkJaWYgKHNhNC0+c2luX2FkZHIuc19hZGRyID09IHNyYzQt
PnNpbl9hZGRyLnNfYWRkcikgeworCQkJCQkJZm5kID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9
CisJCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBB
Rl9JTkVUNikgeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmM2OworCisJCQkJCXNhNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCQkJCXNyYzYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKXNyYzsKKwkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNhNiwgc3JjNikpIHsK
KwkJCQkJCWZuZCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9DT05O
KSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzcmNjOworCisJCQkJCXNhYyA9IChzdHJ1
Y3Qgc29ja2FkZHJfY29ubiAqKXNhOworCQkJCQlzcmNjID0gKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopc3JjOworCQkJCQlpZiAoc2FjLT5zY29ubl9hZGRyID09IHNyY2MtPnNjb25uX2FkZHIpIHsK
KwkJCQkJCWZuZCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKyNlbmRpZgorCQkJ
fQorCQl9CisJCWlmIChmbmQgPT0gMCkgeworCQkJLyogTmV3IGFkZHJlc3MgYWRkZWQhIG5vIG5l
ZWQgdG8gbG9vayBmdXJ0aGVyLiAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwkvKiBPayBz
byBmYXIgbGV0cyBtdW5nZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KKwlvZmZz
ZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOworCXBoZHIgPSBzY3RwX2dldF9u
ZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNldCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOwor
CXdoaWxlIChwaGRyKSB7CisJCXNhX3RvdXNlID0gTlVMTDsKKwkJcHR5cGUgPSBudG9ocyhwaGRy
LT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisJCXN3
aXRjaCAocHR5cGUpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJ
CXsKKwkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICpwNCwgcDRfYnVmOworCisJCQlpZiAo
cGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJcmV0dXJu
ICgxKTsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9m
ZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDRfYnVmLCBzaXplb2YocDRf
YnVmKSk7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJ
CWlmIChhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQlwNCA9IChzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7CisJCQkJc2luNC5zaW5fYWRkci5zX2FkZHIgPSBwNC0+
YWRkcjsKKwkJCQlzYV90b3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNDsKKwkJCX0KKwkJ
CWJyZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIFNDVFBfSVBWNl9BRERS
RVNTOgorCQl7CisJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqcDYsIHA2X2J1ZjsKKwor
CQkJaWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgeworCQkJ
CXJldHVybiAoMSk7CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShpbl9pbml0
cGt0LCBvZmZzZXQsCisJCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopJnA2X2J1Ziwgc2l6
ZW9mKHA2X2J1ZikpOworCQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJCXJldHVybiAoMSk7CisJ
CQl9CisJCQlpZiAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJcDYgPSAoc3Ry
dWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaGRyOworCQkJCW1lbWNweSgoY2FkZHJfdCkmc2lu
Ni5zaW42X2FkZHIsIHA2LT5hZGRyLAorCQkJCSAgICAgICBzaXplb2YocDYtPmFkZHIpKTsKKwkJ
CQlzYV90b3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJCX0KKwkJCWJyZWFrOwor
CQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXNhX3RvdXNlID0gTlVMTDsKKwkJCWJyZWFrOwor
CQl9CisJCWlmIChzYV90b3VzZSkgeworCQkJLyogb2ssIHNhX3RvdXNlIHBvaW50cyB0byBvbmUg
dG8gY2hlY2sgKi8KKwkJCWZuZCA9IDA7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5l
dHMsIHNjdHBfbmV4dCkgeworCQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHI7CisJCQkJaWYgKHNhLT5zYV9mYW1pbHkgIT0gc2FfdG91c2UtPnNhX2ZhbWlseSkgewor
CQkJCQljb250aW51ZTsKKwkJCQl9CisjaWZkZWYgSU5FVAorCQkJCWlmIChzYS0+c2FfZmFtaWx5
ID09IEFGX0lORVQpIHsKKwkJCQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQkJ
CQlpZiAoc2E0LT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIHNpbjQuc2luX2FkZHIuc19h
ZGRyKSB7CisJCQkJCQlmbmQgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJ
CQkJCXNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCQkJCWlmIChTQ1RQNl9BUkVf
QUREUl9FUVVBTCgKKwkJCQkJICAgIHNhNiwgJnNpbjYpKSB7CisJCQkJCQlmbmQgPSAxOworCQkJ
CQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJCWlmICghZm5kKSB7CisJ
CQkJLyogTmV3IGFkZHIgYWRkZWQhIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyICovCisJCQkJcmV0
dXJuICgxKTsKKwkJCX0KKwkJfQorCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNldCwgJnBhcmFtcywgc2l6
ZW9mKHBhcmFtcykpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKgorICogR2l2ZW4gYSBNQlVG
IGNoYWluIHRoYXQgd2FzIHNlbnQgaW50byB1cyBjb250YWluaW5nIGFuIElOSVQuIEJ1aWxkIGEK
KyAqIElOSVQtQUNLIHdpdGggQ09PS0lFIGFuZCBzZW5kIGJhY2suIFdlIGFzc3VtZSB0aGF0IHRo
ZSBpbl9pbml0cGt0IGhhcyBkb25lCisgKiBhIHB1bGx1cCB0byBpbmNsdWRlIElQdjYvNGhlYWRl
ciwgU0NUUCBoZWFkZXIgYW5kIGluaXRpYWwgcGFydCBvZiBJTklUCisgKiBtZXNzYWdlIChpLmUu
IHRoZSBzdHJ1Y3Qgc2N0cF9pbml0X21zZykuCisgKi8KK3ZvaWQKK3NjdHBfc2VuZF9pbml0aWF0
ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpzcmNfbmV0LCBzdHJ1Y3QgbWJ1
ZiAqaW5pdF9wa3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBpcGhsZW4sIGludCBvZmZz
ZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qg
c29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNo
LCBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0X2NoaywKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCQkgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCisjZW5k
aWYKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0
KQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBtYnVmICptLCAq
bV90bXAsICptX2xhc3QsICptX2Nvb2tpZSwgKm9wX2VycjsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2Fj
a19jaHVuayAqaW5pdGFjazsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRp
b24gKmFsaTsKKwlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gKnByX3N1
cHBvcnRlZDsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgKm92ZXJfYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9zY29waW5nIHNjcDsKKwlzdHJ1Y3QgdGltZXZh
bCBub3c7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqZHN0NCA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilkc3Q7CisJc3RydWN0IHNvY2thZGRyX2luICpzcmM0ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKXNyYzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqZHN0NiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopZHN0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKXNyYzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25uICpkc3Rjb25uID0gKHN0
cnVjdCBzb2NrYWRkcl9jb25uICopZHN0OworCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzcmNjb25u
ID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc3JjOworCXN0cnVjdCBzb2NrYWRkcl9jb25uICpz
Y29ubjsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkciAqdG87CisJc3RydWN0IHNjdHBfc3RhdGVf
Y29va2llIHN0YzsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgPSBOVUxMOworCXVpbnQ4X3QgKnNp
Z25hdHVyZSA9IE5VTEw7CisJaW50IGNudF9pbml0c190byA9IDA7CisJdWludDE2X3QgaGlzX2xp
bWl0LCBpX3dhbnQ7CisJaW50IGFib3J0X2ZsYWc7CisJaW50IG5hdF9mcmllbmRseSA9IDA7CisJ
aW50IGVycm9yOworCXN0cnVjdCBzb2NrZXQgKnNvOworCXVpbnQxNl90IG51bV9leHQsIGNodW5r
X2xlbiwgcGFkZGluZ19sZW4sIHBhcmFtZXRlcl9sZW47CisKKwlpZiAoc3RjYikgeworCQlhc29j
ID0gJnN0Y2ItPmFzb2M7CisJfSBlbHNlIHsKKwkJYXNvYyA9IE5VTEw7CisJfQorCWlmICgoYXNv
YyAhPSBOVUxMKSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9D
T09LSUVfV0FJVCkpIHsKKwkJaWYgKHNjdHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoYXNvYywg
aW5pdF9wa3QsIG9mZnNldCwgc3JjKSkgeworCQkJLyoKKwkJCSAqIG5ldyBhZGRyZXNzZXMsIG91
dCBvZiBoZXJlIGluIG5vbi1jb29raWUtd2FpdCBzdGF0ZXMKKwkJCSAqCisJCQkgKiBTZW5kIGFu
IEFCT1JULCB3aXRob3V0IHRoZSBuZXcgYWRkcmVzcyBlcnJvciBjYXVzZS4KKwkJCSAqIFRoaXMg
bG9va3Mgbm8gZGlmZmVyZW50IHRoYW4gaWYgbm8gbGlzdGVuZXIKKwkJCSAqIHdhcyBwcmVzZW50
LgorCQkJICovCisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJBZGRyZXNzIGFkZGVkIik7CisJCQlzY3RwX3NlbmRfYWJvcnQoaW5pdF9wa3QsIGlwaGxlbiwg
c3JjLCBkc3QsIHNoLCAwLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAg
ICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAorI2VuZGlmCisJ
CQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAo
c3JjX25ldCAhPSBOVUxMICYmIChzcmNfbmV0LT5wb3J0ICE9IHBvcnQpKSB7CisJCQkvKgorCQkJ
ICogY2hhbmdlIG9mIHJlbW90ZSBlbmNhcHN1bGF0aW9uIHBvcnQsIG91dCBvZiBoZXJlIGluCisJ
CQkgKiBub24tY29va2llLXdhaXQgc3RhdGVzCisJCQkgKgorCQkJICogU2VuZCBhbiBBQk9SVCwg
d2l0aG91dCBhbiBzcGVjaWZpYyBlcnJvciBjYXVzZS4KKwkJCSAqIFRoaXMgbG9va3Mgbm8gZGlm
ZmVyZW50IHRoYW4gaWYgbm8gbGlzdGVuZXIKKwkJCSAqIHdhcyBwcmVzZW50LgorCQkJICovCisJ
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFn
X2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJSZW1vdGUgZW5j
YXBzdWxhdGlvbiBwb3J0IGNoYW5nZWQiKTsKKwkJCXNjdHBfc2VuZF9hYm9ydChpbml0X3BrdCwg
aXBobGVuLCBzcmMsIGRzdCwgc2gsIDAsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCQkJICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCisj
ZW5kaWYKKwkJCSAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJcmV0dXJuOworCQl9
CisJfQorCWFib3J0X2ZsYWcgPSAwOworCW9wX2VyciA9IHNjdHBfYXJldGhlcmVfdW5yZWNvZ25p
emVkX3BhcmFtZXRlcnMoaW5pdF9wa3QsCisJCQkJCQkgICAgICAgKG9mZnNldCArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSksCisJCQkJCQkgICAgICAgJmFib3J0X2ZsYWcsIChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKWluaXRfY2hrLCAmbmF0X2ZyaWVuZGx5KTsKKwlpZiAoYWJvcnRf
ZmxhZykgeworCWRvX2FfYWJvcnQ6CisJCWlmIChvcF9lcnIgPT0gTlVMTCkgeworCQkJY2hhciBt
c2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwg
IiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29k
ZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7CisJCX0KKwkJc2N0cF9z
ZW5kX2Fib3J0KGluaXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwKKwkJCQlpbml0X2Noay0+
aW5pdC5pbml0aWF0ZV90YWcsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgor
CQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJcmV0dXJuOworCX0KKwltID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJ
aWYgKG0gPT0gTlVMTCkgeworCQkvKiBObyBtZW1vcnksIElOSVQgdGltZXIgd2lsbCByZS1hdHRl
bXB0LiAqLworCQlpZiAob3BfZXJyKQorCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCXJldHVy
bjsKKwl9CisJY2h1bmtfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fj
a19jaHVuayk7CisJcGFkZGluZ19sZW4gPSAwOworCisJLyoKKwkgKiBXZSBtaWdodCBub3Qgb3Zl
cndyaXRlIHRoZSBpZGVudGlmaWNhdGlvbltdIGNvbXBsZXRlbHkgYW5kIG9uCisJICogc29tZSBw
bGF0Zm9ybXMgdGltZV9lbnRlcmVkIHdpbGwgY29udGFpbiBzb21lIHBhZGRpbmcuCisJICogVGhl
cmVmb3JlIHplcm8gb3V0IHRoZSBjb29raWUgdG8gYXZvaWQgcHV0dGluZworCSAqIHVuaW5pdGlh
bGl6ZWQgbWVtb3J5IG9uIHRoZSB3aXJlLgorCSAqLworCW1lbXNldCgmc3RjLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfc3RhdGVfY29va2llKSk7CisKKwkvKiB0aGUgdGltZSBJIGJ1aWx0IGNvb2tp
ZSAqLworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCXN0Yy50aW1lX2VudGVy
ZWQudHZfc2VjID0gbm93LnR2X3NlYzsKKwlzdGMudGltZV9lbnRlcmVkLnR2X3VzZWMgPSBub3cu
dHZfdXNlYzsKKworCS8qIHBvcHVsYXRlIGFueSB0aWUgdGFncyAqLworCWlmIChhc29jICE9IE5V
TEwpIHsKKwkJLyogdW5sb2NrIGJlZm9yZSB0YWcgc2VsZWN0aW9ucyAqLworCQlzdGMudGllX3Rh
Z19teV92dGFnID0gYXNvYy0+bXlfdnRhZ19ub25jZTsKKwkJc3RjLnRpZV90YWdfcGVlcl92dGFn
ID0gYXNvYy0+cGVlcl92dGFnX25vbmNlOworCQlzdGMuY29va2llX2xpZmUgPSBhc29jLT5jb29r
aWVfbGlmZTsKKwkJbmV0ID0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwl9IGVsc2Ugewor
CQlzdGMudGllX3RhZ19teV92dGFnID0gMDsKKwkJc3RjLnRpZV90YWdfcGVlcl92dGFnID0gMDsK
KwkJLyogbGlmZSBJIHdpbGwgYXdhcmQgdGhpcyBjb29raWUgKi8KKwkJc3RjLmNvb2tpZV9saWZl
ID0gaW5wLT5zY3RwX2VwLmRlZl9jb29raWVfbGlmZTsKKwl9CisKKwkvKiBjb3B5IGluIHRoZSBw
b3J0cyBmb3IgbGF0ZXIgY2hlY2sgKi8KKwlzdGMubXlwb3J0ID0gc2gtPmRlc3RfcG9ydDsKKwlz
dGMucGVlcnBvcnQgPSBzaC0+c3JjX3BvcnQ7CisKKwkvKgorCSAqIElmIHdlIHdhbnRlZCB0byBo
b25vciBjb29raWUgbGlmZSBleHRlbnNpb25zLCB3ZSB3b3VsZCBhZGQgdG8KKwkgKiBzdGMuY29v
a2llX2xpZmUuIEZvciBub3cgd2Ugc2hvdWxkIE5PVCBob25vciBhbnkgZXh0ZW5zaW9uCisJICov
CisJc3RjLnNpdGVfc2NvcGUgPSBzdGMubG9jYWxfc2NvcGUgPSBzdGMubG9vcGJhY2tfc2NvcGUg
PSAwOworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewor
CQlzdGMuaXB2Nl9hZGRyX2xlZ2FsID0gMTsKKwkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkg
eworCQkJc3RjLmlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCX0gZWxzZSB7CisJCQlzdGMuaXB2NF9h
ZGRyX2xlZ2FsID0gMTsKKwkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc3RjLmNv
bm5fYWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzdGMuaXB2Nl9hZGRyX2xl
Z2FsID0gMDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKSB7CisJCQlzdGMuY29ubl9hZGRyX2xlZ2Fs
ID0gMTsKKwkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAwOworCQl9IGVsc2UgeworCQkJc3RjLmNv
bm5fYWRkcl9sZWdhbCA9IDA7CisJCQlzdGMuaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJfQorI2Vs
c2UKKwkJc3RjLmlwdjRfYWRkcl9sZWdhbCA9IDE7CisjZW5kaWYKKwl9CisJc3RjLmlwdjRfc2Nv
cGUgPSAwOworCWlmIChuZXQgPT0gTlVMTCkgeworCQl0byA9IHNyYzsKKwkJc3dpdGNoIChkc3Qt
PnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQl7CisJCQkvKiBs
b29rdXAgYWRkcmVzcyAqLworCQkJc3RjLmFkZHJlc3NbMF0gPSBzcmM0LT5zaW5fYWRkci5zX2Fk
ZHI7CisJCQlzdGMuYWRkcmVzc1sxXSA9IDA7CisJCQlzdGMuYWRkcmVzc1syXSA9IDA7CisJCQlz
dGMuYWRkcmVzc1szXSA9IDA7CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7
CisJCQkvKiBsb2NhbCBmcm9tIGFkZHJlc3MgKi8KKwkJCXN0Yy5sYWRkcmVzc1swXSA9IGRzdDQt
PnNpbl9hZGRyLnNfYWRkcjsKKwkJCXN0Yy5sYWRkcmVzc1sxXSA9IDA7CisJCQlzdGMubGFkZHJl
c3NbMl0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzNdID0gMDsKKwkJCXN0Yy5sYWRkcl90eXBlID0g
U0NUUF9JUFY0X0FERFJFU1M7CisJCQkvKiBzY29wZV9pZCBpcyBvbmx5IGZvciB2NiAqLworCQkJ
c3RjLnNjb3BlX2lkID0gMDsKKwkJCWlmICgoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzcmM0LT5z
aW5fYWRkcikpIHx8CisJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmZHN0NC0+c2luX2Fk
ZHIpKSl7CisJCQkJc3RjLmlwdjRfc2NvcGUgPSAxOworCQkJfQorCQkJLyogTXVzdCB1c2UgdGhl
IGFkZHJlc3MgaW4gdGhpcyBjYXNlICovCisJCQlpZiAoc2N0cF9pc19hZGRyZXNzX29uX2xvY2Fs
X2hvc3Qoc3JjLCB2cmZfaWQpKSB7CisJCQkJc3RjLmxvb3BiYWNrX3Njb3BlID0gMTsKKwkJCQlz
dGMuaXB2NF9zY29wZSA9IDE7CisJCQkJc3RjLnNpdGVfc2NvcGUgPSAxOworCQkJCXN0Yy5sb2Nh
bF9zY29wZSA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RjLmFkZHJfdHlwZSA9IFNDVFBfSVBWNl9BRERS
RVNTOworCQkJbWVtY3B5KCZzdGMuYWRkcmVzcywgJnNyYzYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0
cnVjdCBpbjZfYWRkcikpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoKF9fRnJlZUJT
RF92ZXJzaW9uIDwgOTAwMDAwKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODA0MDAwKSkgfHwg
KF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKSkKKwkJCXN0Yy5zY29wZV9pZCA9IG50b2hzKGlu
Nl9nZXRzY29wZSgmc3JjNi0+c2luNl9hZGRyKSk7CisjZWxzZQorCQkJc3RjLnNjb3BlX2lkID0g
MDsKKyNlbmRpZgorCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19vbl9sb2NhbF9ob3N0KHNyYywgdnJm
X2lkKSkgeworCQkJCXN0Yy5sb29wYmFja19zY29wZSA9IDE7CisJCQkJc3RjLmxvY2FsX3Njb3Bl
ID0gMDsKKwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJCQkJc3RjLmlwdjRfc2NvcGUgPSAxOwor
CQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNyYzYtPnNpbjZfYWRkcikgfHwK
KwkJCSAgICAgICAgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZkc3Q2LT5zaW42X2FkZHIpKSB7
CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9yIHNvdXJjZSBpcyBhCisJ
CQkJICogTElOS19MT0NBTCB3ZSBtdXN0IGhhdmUgY29tbW9uIGJvdGggc2l0ZSBhbmQKKwkJCQkg
KiBsb2NhbCBzY29wZS4gRG9uJ3Qgc2V0IGxvY2FsIHNjb3BlIHRob3VnaAorCQkJCSAqIHNpbmNl
IHdlIG11c3QgZGVwZW5kIG9uIHRoZSBzb3VyY2UgdG8gYmUKKwkJCQkgKiBhZGRlZCBpbXBsaWNp
dGx5LiBXZSBjYW5ub3QgYXNzdXJlIGp1c3QKKwkJCQkgKiBiZWNhdXNlIHdlIHNoYXJlIG9uZSBs
aW5rIHRoYXQgYWxsIGxpbmtzIGFyZQorCQkJCSAqIGNvbW1vbi4KKwkJCQkgKi8KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKwkJCQkvKiBNYWMgT1MgWCBjdXJyZW50bHkgZG9lc24ndCBoYXZlIGlu
Nl9nZXRzY29wZSgpICovCisJCQkJc3RjLnNjb3BlX2lkID0gc3JjNi0+c2luNl9hZGRyLnM2X2Fk
ZHIxNlsxXTsKKyNlbmRpZgorCQkJCXN0Yy5sb2NhbF9zY29wZSA9IDA7CisJCQkJc3RjLnNpdGVf
c2NvcGUgPSAxOworCQkJCXN0Yy5pcHY0X3Njb3BlID0gMTsKKwkJCQkvKgorCQkJCSAqIHdlIHN0
YXJ0IGNvdW50aW5nIGZvciB0aGUgcHJpdmF0ZSBhZGRyZXNzCisJCQkJICogc3R1ZmYgYXQgMS4g
c2luY2UgdGhlIGxpbmsgbG9jYWwgd2UKKwkJCQkgKiBzb3VyY2UgZnJvbSB3b24ndCBzaG93IHVw
IGluIG91ciBzY29wZWQKKwkJCQkgKiBjb3VudC4KKwkJCQkgKi8KKwkJCQljbnRfaW5pdHNfdG8g
PSAxOworCQkJCS8qIHB1bGwgb3V0IHRoZSBzY29wZV9pZCBmcm9tIGluY29taW5nIHBrdCAqLwor
CQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNyYzYtPnNpbjZfYWRkcikgfHwK
KwkJCSAgICAgICAgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKCZkc3Q2LT5zaW42X2FkZHIpKSB7
CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9yIHNvdXJjZSBpcworCQkJ
CSAqIFNJVEVfTE9DQUwgdGhlbiB3ZSBtdXN0IGhhdmUgc2l0ZSBzY29wZSBpbgorCQkJCSAqIGNv
bW1vbi4KKwkJCQkgKi8KKwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJCQl9CisJCQltZW1jcHko
JnN0Yy5sYWRkcmVzcywgJmRzdDYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikp
OworCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJCWJyZWFrOworCQl9
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJ
eworCQkJLyogbG9va3VwIGFkZHJlc3MgKi8KKwkJCXN0Yy5hZGRyZXNzWzBdID0gMDsKKwkJCXN0
Yy5hZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5hZGRyZXNz
WzNdID0gMDsKKwkJCW1lbWNweSgmc3RjLmFkZHJlc3MsICZzcmNjb25uLT5zY29ubl9hZGRyLCBz
aXplb2Yodm9pZCAqKSk7CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJFU1M7CisJ
CQkvKiBsb2NhbCBmcm9tIGFkZHJlc3MgKi8KKwkJCXN0Yy5sYWRkcmVzc1swXSA9IDA7CisJCQlz
dGMubGFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5sYWRk
cmVzc1szXSA9IDA7CisJCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJmRzdGNvbm4tPnNjb25uX2Fk
ZHIsIHNpemVvZih2b2lkICopKTsKKwkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJF
U1M7CisJCQkvKiBzY29wZV9pZCBpcyBvbmx5IGZvciB2NiAqLworCQkJc3RjLnNjb3BlX2lkID0g
MDsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIFRTTkggKi8KKwkJ
CWdvdG8gZG9fYV9hYm9ydDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJLyogc2V0IHRo
ZSBzY29wZSBwZXIgdGhlIGV4aXN0aW5nIHRjYiAqLworCisjaWZkZWYgSU5FVDYKKwkJc3RydWN0
IHNjdHBfbmV0cyAqbG5ldDsKKyNlbmRpZgorCisJCXN0Yy5sb29wYmFja19zY29wZSA9IGFzb2Mt
PnNjb3BlLmxvb3BiYWNrX3Njb3BlOworCQlzdGMuaXB2NF9zY29wZSA9IGFzb2MtPnNjb3BlLmlw
djRfbG9jYWxfc2NvcGU7CisJCXN0Yy5zaXRlX3Njb3BlID0gYXNvYy0+c2NvcGUuc2l0ZV9zY29w
ZTsKKwkJc3RjLmxvY2FsX3Njb3BlID0gYXNvYy0+c2NvcGUubG9jYWxfc2NvcGU7CisjaWZkZWYg
SU5FVDYKKwkJLyogV2h5IGRvIHdlIG5vdCBjb25zaWRlciBJUHY0IExMIGFkZHJlc3Nlcz8gKi8K
KwkJVEFJTFFfRk9SRUFDSChsbmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAo
bG5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJaWYg
KElONl9JU19BRERSX0xJTktMT0NBTCgmbG5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRkcikp
IHsKKwkJCQkJLyoKKwkJCQkJICogaWYgd2UgaGF2ZSBhIExMIGFkZHJlc3MsIHN0YXJ0CisJCQkJ
CSAqIGNvdW50aW5nIGF0IDEuCisJCQkJCSAqLworCQkJCQljbnRfaW5pdHNfdG8gPSAxOworCQkJ
CX0KKwkJCX0KKwkJfQorI2VuZGlmCisJCS8qIHVzZSB0aGUgbmV0IHBvaW50ZXIgKi8KKwkJdG8g
PSAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJc3dpdGNoICh0by0+c2Ff
ZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlzaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopdG87CisJCQlzdGMuYWRkcmVzc1swXSA9IHNpbi0+c2luX2FkZHIuc19h
ZGRyOworCQkJc3RjLmFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmFkZHJlc3NbMl0gPSAwOworCQkJ
c3RjLmFkZHJlc3NbM10gPSAwOworCQkJc3RjLmFkZHJfdHlwZSA9IFNDVFBfSVBWNF9BRERSRVNT
OworCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgeworCQkJCS8qCisJCQkJICog
c3RyYW5nZSBjYXNlIGhlcmUsIHRoZSBJTklUIHNob3VsZCBoYXZlCisJCQkJICogZGlkIHRoZSBz
ZWxlY3Rpb24uCisJCQkJICovCisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRk
cmVzc19zZWxlY3Rpb24oaW5wLAorCQkJCQkJCQkJCXN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0
LT5ybywKKwkJCQkJCQkJCQluZXQsIDAsIHZyZl9pZCk7CisJCQkJaWYgKG5ldC0+cm8uX3NfYWRk
ciA9PSBOVUxMKQorCQkJCQlyZXR1cm47CisKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0g
MTsKKworCQkJfQorCQkJc3RjLmxhZGRyZXNzWzBdID0gbmV0LT5yby5fc19hZGRyLT5hZGRyZXNz
LnNpbi5zaW5fYWRkci5zX2FkZHI7CisJCQlzdGMubGFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmxh
ZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1szXSA9IDA7CisJCQlzdGMubGFkZHJfdHlw
ZSA9IFNDVFBfSVBWNF9BRERSRVNTOworCQkJLyogc2NvcGVfaWQgaXMgb25seSBmb3IgdjYgKi8K
KwkJCXN0Yy5zY29wZV9pZCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
CWNhc2UgQUZfSU5FVDY6CisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKil0bzsKKwkJ
CW1lbWNweSgmc3RjLmFkZHJlc3MsICZzaW42LT5zaW42X2FkZHIsCisJCQkgICAgICAgc2l6ZW9m
KHN0cnVjdCBpbjZfYWRkcikpOworCQkJc3RjLmFkZHJfdHlwZSA9IFNDVFBfSVBWNl9BRERSRVNT
OworCQkJc3RjLnNjb3BlX2lkID0gc2luNi0+c2luNl9zY29wZV9pZDsKKwkJCWlmIChuZXQtPnNy
Y19hZGRyX3NlbGVjdGVkID09IDApIHsKKwkJCQkvKgorCQkJCSAqIHN0cmFuZ2UgY2FzZSBoZXJl
LCB0aGUgSU5JVCBzaG91bGQgaGF2ZQorCQkJCSAqIGRvbmUgdGhlIHNlbGVjdGlvbi4KKwkJCQkg
Ki8KKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihp
bnAsCisJCQkJCQkJCQkJc3RjYiwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAorCQkJCQkJCQkJ
CW5ldCwgMCwgdnJmX2lkKTsKKwkJCQlpZiAobmV0LT5yby5fc19hZGRyID09IE5VTEwpCisJCQkJ
CXJldHVybjsKKworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOworCQkJfQorCQkJbWVt
Y3B5KCZzdGMubGFkZHJlc3MsICZuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luNi5zaW42X2Fk
ZHIsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkJc3RjLmxhZGRyX3R5
cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqKXRvOworCQkJc3RjLmFkZHJlc3NbMF0gPSAwOworCQkJc3RjLmFkZHJlc3NbMV0g
PSAwOworCQkJc3RjLmFkZHJlc3NbMl0gPSAwOworCQkJc3RjLmFkZHJlc3NbM10gPSAwOworCQkJ
bWVtY3B5KCZzdGMuYWRkcmVzcywgJnNjb25uLT5zY29ubl9hZGRyLCBzaXplb2Yodm9pZCAqKSk7
CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJFU1M7CisJCQlzdGMubGFkZHJlc3Nb
MF0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1syXSA9IDA7
CisJCQlzdGMubGFkZHJlc3NbM10gPSAwOworCQkJbWVtY3B5KCZzdGMubGFkZHJlc3MsICZzY29u
bi0+c2Nvbm5fYWRkciwgc2l6ZW9mKHZvaWQgKikpOworCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQ
X0NPTk5fQUREUkVTUzsKKwkJCXN0Yy5zY29wZV9pZCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgor
CQl9CisJfQorCS8qIE5vdyBsZXRzIHB1dCB0aGUgU0NUUCBoZWFkZXIgaW4gcGxhY2UgKi8KKwlp
bml0YWNrID0gbXRvZChtLCBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqKTsKKwkvKiBTYXZl
IGl0IG9mZiBmb3IgcXVpY2sgcmVmICovCisJc3RjLnBlZXJzX3Z0YWcgPSBudG9obChpbml0X2No
ay0+aW5pdC5pbml0aWF0ZV90YWcpOworCS8qIHdobyBhcmUgd2UgKi8KKwltZW1jcHkoc3RjLmlk
ZW50aWZpY2F0aW9uLCBTQ1RQX1ZFUlNJT05fU1RSSU5HLAorCSAgICAgICBtaW4oc3RybGVuKFND
VFBfVkVSU0lPTl9TVFJJTkcpLCBzaXplb2Yoc3RjLmlkZW50aWZpY2F0aW9uKSkpOworCW1lbXNl
dChzdGMucmVzZXJ2ZWQsIDAsIFNDVFBfUkVTRVJWRV9TUEFDRSk7CisJLyogbm93IHRoZSBjaHVu
ayBoZWFkZXIgKi8KKwlpbml0YWNrLT5jaC5jaHVua190eXBlID0gU0NUUF9JTklUSUFUSU9OX0FD
SzsKKwlpbml0YWNrLT5jaC5jaHVua19mbGFncyA9IDA7CisJLyogZmlsbCBpbiBsYXRlciBmcm9t
IG1idWYgd2UgYnVpbGQgKi8KKwlpbml0YWNrLT5jaC5jaHVua19sZW5ndGggPSAwOworCS8qIHBs
YWNlIGluIG15IHRhZyAqLworCWlmICgoYXNvYyAhPSBOVUxMKSAmJgorCSAgICAoKFNDVFBfR0VU
X1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgICAoU0NUUF9H
RVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9JTlVTRSkgfHwKKwkgICAgIChTQ1RQX0dFVF9T
VEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSkgeworCQkvKiByZS11c2Ug
dGhlIHYtdGFncyBhbmQgaW5pdC1zZXEgaGVyZSAqLworCQlpbml0YWNrLT5pbml0LmluaXRpYXRl
X3RhZyA9IGh0b25sKGFzb2MtPm15X3Z0YWcpOworCQlpbml0YWNrLT5pbml0LmluaXRpYWxfdHNu
ID0gaHRvbmwoYXNvYy0+aW5pdF9zZXFfbnVtYmVyKTsKKwl9IGVsc2UgeworCQl1aW50MzJfdCB2
dGFnLCBpdHNuOworCisJCWlmIChhc29jKSB7CisJCQlhdG9taWNfYWRkX2ludCgmYXNvYy0+cmVm
Y250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJbmV3X3RhZzoKKwkJCXZ0YWcg
PSBzY3RwX3NlbGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwgc2gtPnNyY19wb3J0LCAx
KTsKKwkJCWlmICgoYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpICAmJiAodnRhZyA9PSBhc29jLT5t
eV92dGFnKSkgeworCQkJCS8qIEdvdCBhIGR1cGxpY2F0ZSB2dGFnIG9uIHNvbWUgZ3V5IGJlaGlu
ZCBhIG5hdAorCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgaXQuCisJCQkJICovCisJCQkJ
Z290byBuZXdfdGFnOworCQkJfQorCQkJaW5pdGFjay0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9u
bCh2dGFnKTsKKwkJCS8qIGdldCBhIFRTTiB0byB1c2UgdG9vICovCisJCQlpdHNuID0gc2N0cF9z
ZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCk7CisJCQlpbml0YWNrLT5pbml0LmluaXRp
YWxfdHNuID0gaHRvbmwoaXRzbik7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWlj
X2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgLTEpOworCQl9IGVsc2UgeworCQkJU0NUUF9JTlBfSU5D
Ul9SRUYoaW5wKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCXZ0YWcgPSBzY3RwX3Nl
bGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwgc2gtPnNyY19wb3J0LCAxKTsKKwkJCWlu
aXRhY2stPmluaXQuaW5pdGlhdGVfdGFnID0gaHRvbmwodnRhZyk7CisJCQkvKiBnZXQgYSBUU04g
dG8gdXNlIHRvbyAqLworCQkJaW5pdGFjay0+aW5pdC5pbml0aWFsX3RzbiA9IGh0b25sKHNjdHBf
c2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApKTsKKwkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQl9CisJfQorCS8qIHNhdmUgYXdheSBt
eSB0YWcgdG8gKi8KKwlzdGMubXlfdnRhZyA9IGluaXRhY2stPmluaXQuaW5pdGlhdGVfdGFnOwor
CisJLyogc2V0IHVwIHNvbWUgb2YgdGhlIGNyZWRpdHMuICovCisJc28gPSBpbnAtPnNjdHBfc29j
a2V0OworCWlmIChzbyA9PSBOVUxMKSB7CisJCS8qIG1lbW9yeSBwcm9ibGVtICovCisJCXNjdHBf
bV9mcmVlbShtKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWluaXRhY2stPmluaXQuYV9yd25k
ID0gaHRvbmwobWF4KFNDVFBfU0JfTElNSVRfUkNWKHNvKSwgU0NUUF9NSU5JTUFMX1JXTkQpKTsK
Kwl9CisJLyogc2V0IHdoYXQgSSB3YW50ICovCisJaGlzX2xpbWl0ID0gbnRvaHMoaW5pdF9jaGst
PmluaXQubnVtX2luYm91bmRfc3RyZWFtcyk7CisJLyogY2hvb3NlIHdoYXQgSSB3YW50ICovCisJ
aWYgKGFzb2MgIT0gTlVMTCkgeworCQlpZiAoYXNvYy0+c3RyZWFtb3V0Y250ID4gYXNvYy0+cHJl
X29wZW5fc3RyZWFtcykgeworCQkJaV93YW50ID0gYXNvYy0+c3RyZWFtb3V0Y250OworCQl9IGVs
c2UgeworCQkJaV93YW50ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtczsKKwkJfQorCX0gZWxzZSB7
CisJCWlfd2FudCA9IGlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQ7CisJfQorCWlm
IChoaXNfbGltaXQgPCBpX3dhbnQpIHsKKwkJLyogSSBXYW50IG1vcmUgOjwgKi8KKwkJaW5pdGFj
ay0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyA9IGluaXRfY2hrLT5pbml0Lm51bV9pbmJvdW5k
X3N0cmVhbXM7CisJfSBlbHNlIHsKKwkJLyogSSBjYW4gaGF2ZSB3aGF0IEkgd2FudCA6PiAqLwor
CQlpbml0YWNrLT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1zID0gaHRvbnMoaV93YW50KTsKKwl9
CisJLyogdGVsbCBoaW0gaGlzIGxpbWl0LiAqLworCWluaXRhY2stPmluaXQubnVtX2luYm91bmRf
c3RyZWFtcyA9CisJCWh0b25zKGlucC0+c2N0cF9lcC5tYXhfb3Blbl9zdHJlYW1zX2ludG9tZSk7
CisKKwkvKiBhZGFwdGF0aW9uIGxheWVyIGluZGljYXRpb24gcGFyYW1ldGVyICovCisJaWYgKGlu
cC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcl9wcm92aWRlZCkgeworCQlwYXJh
bWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVy
X2luZGljYXRpb24pOworCQlhbGkgPSAoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRp
Y2F0aW9uICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQlhbGktPnBoLnBhcmFt
X3R5cGUgPSBodG9ucyhTQ1RQX1VMUF9BREFQVEFUSU9OKTsKKwkJYWxpLT5waC5wYXJhbV9sZW5n
dGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJYWxpLT5pbmRpY2F0aW9uID0gaHRvbmwoaW5w
LT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yKTsKKwkJY2h1bmtfbGVuICs9IHBh
cmFtZXRlcl9sZW47CisJfQorCisJLyogRUNOIHBhcmFtZXRlciAqLworCWlmICgoKGFzb2MgIT0g
TlVMTCkgJiYgKGFzb2MtPmVjbl9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNvYyA9PSBO
VUxMKSAmJiAoaW5wLT5lY25fc3VwcG9ydGVkID09IDEpKSkgeworCQlwYXJhbWV0ZXJfbGVuID0g
KHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCXBoID0gKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQlwaC0+cGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfRUNOX0NBUEFCTEUpOworCQlwaC0+cGFyYW1fbGVuZ3RoID0g
aHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0K
KworCS8qIFBSLVNDVFAgc3VwcG9ydGVkIHBhcmFtZXRlciAqLworCWlmICgoKGFzb2MgIT0gTlVM
TCkgJiYgKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNvYyA9PSBO
VUxMKSAmJiAoaW5wLT5wcnNjdHBfc3VwcG9ydGVkID09IDEpKSkgeworCQlwYXJhbWV0ZXJfbGVu
ID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCXBoID0gKHN0cnVj
dCBzY3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQlwaC0+
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfUFJTQ1RQX1NVUFBPUlRFRCk7CisJCXBoLT5wYXJhbV9s
ZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9s
ZW47CisJfQorCisJLyogQWRkIE5BVCBmcmllbmRseSBwYXJhbWV0ZXIgKi8KKwlpZiAobmF0X2Zy
aWVuZGx5KSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKTsKKwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRk
cl90KSArIGNodW5rX2xlbik7CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9IQVNfTkFU
X1NVUFBPUlQpOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJ
CWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKworCS8qIEFuZCBub3cgdGVsbCB0aGUg
cGVlciB3aGljaCBleHRlbnNpb25zIHdlIHN1cHBvcnQgKi8KKwludW1fZXh0ID0gMDsKKwlwcl9z
dXBwb3J0ZWQgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtICopKG10
b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFz
b2MtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNvYyA9PSBOVUxMKSAmJiAo
aW5wLT5wcnNjdHBfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5
cGVzW251bV9leHQrK10gPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsKKwkJaWYgKCgoYXNvYyAhPSBO
VUxMKSAmJiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSB8fAorCQkgICAgKChhc29jID09
IE5VTEwpICYmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSkpIHsKKwkJCXByX3N1cHBvcnRl
ZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfSUZPUldBUkRfQ1VNX1RTTjsKKwkJfQor
CX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5hdXRoX3N1cHBvcnRlZCA9PSAxKSkg
fHwKKwkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmF1dGhfc3VwcG9ydGVkID09IDEpKSkg
eworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0FVVEhFTlRJ
Q0FUSU9OOworCX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5hc2NvbmZfc3VwcG9y
dGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+YXNjb25mX3N1cHBv
cnRlZCA9PSAxKSkpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0g
U0NUUF9BU0NPTkY7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFND
VFBfQVNDT05GX0FDSzsKKwl9CisJaWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+cmVjb25m
aWdfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cmVj
b25maWdfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251
bV9leHQrK10gPSBTQ1RQX1NUUkVBTV9SRVNFVDsKKwl9CisJaWYgKCgoYXNvYyAhPSBOVUxMKSAm
JiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkg
JiYgKGlucC0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5r
X3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lEQVRBOworCX0KKwlpZiAoKChhc29jICE9IE5VTEwp
ICYmIChhc29jLT5ucnNhY2tfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVM
TCkgJiYgKGlucC0+bnJzYWNrX3N1cHBvcnRlZCA9PSAxKSkpIHsKKwkJcHJfc3VwcG9ydGVkLT5j
aHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOworCX0KKwlpZiAo
KChhc29jICE9IE5VTEwpICYmIChhc29jLT5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAxKSkgfHwKKwkg
ICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID09IDEpKSkgewor
CQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX1BBQ0tFVF9EUk9Q
UEVEOworCX0KKwlpZiAobnVtX2V4dCA+IDApIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZf
dClzaXplb2Yoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtKSArIG51bV9l
eHQ7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1VQUE9SVEVE
X0NIVU5LX0VYVCk7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFy
YW1ldGVyX2xlbik7CisJCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikg
LSBwYXJhbWV0ZXJfbGVuOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisKKwkv
KiBhZGQgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyAqLworCWlmICgoKGFzb2MgIT0gTlVMTCkg
JiYgKGFzb2MtPmF1dGhfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkg
JiYgKGlucC0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXN0cnVjdCBzY3RwX2F1dGhfcmFu
ZG9tICpyYW5kcDsKKwkJc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzOworCQlzdHJ1
Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rczsKKworCQlpZiAocGFkZGluZ19sZW4gPiAw
KSB7CisJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19s
ZW4pOworCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJcGFkZGluZ19sZW4gPSAwOwor
CQl9CisJCS8qIGdlbmVyYXRlIGFuZCBhZGQgUkFORE9NIHBhcmFtZXRlciAqLworCQlyYW5kcCA9
IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
KTsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9y
YW5kb20pICsKKwkJICAgICAgICAgICAgICAgIFNDVFBfQVVUSF9SQU5ET01fU0laRV9ERUZBVUxU
OworCQlyYW5kcC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfUkFORE9NKTsKKwkJcmFuZHAt
PnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQlTQ1RQX1JFQURfUkFO
RE9NKHJhbmRwLT5yYW5kb21fZGF0YSwgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX0RFRkFVTFQpOwor
CQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xl
bjsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisKKwkJaWYgKHBhZGRpbmdfbGVuID4g
MCkgeworCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdf
bGVuKTsKKwkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsK
KwkJfQorCQkvKiBhZGQgSE1BQ19BTEdPIHBhcmFtZXRlciAqLworCQlobWFjcyA9IChzdHJ1Y3Qg
c2N0cF9hdXRoX2htYWNfYWxnbyAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJ
cGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9obWFjX2Fs
Z28pICsKKwkJICAgICAgICAgICAgICAgIHNjdHBfc2VyaWFsaXplX2htYWNsaXN0KGlucC0+c2N0
cF9lcC5sb2NhbF9obWFjcywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh1aW50OF90ICopaG1hY3MtPmhtYWNfaWRzKTsKKwkJaG1hY3MtPnBoLnBhcmFtX3R5cGUg
PSBodG9ucyhTQ1RQX0hNQUNfTElTVCk7CisJCWhtYWNzLT5waC5wYXJhbV9sZW5ndGggPSBodG9u
cyhwYXJhbWV0ZXJfbGVuKTsKKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJf
bGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCisJ
CWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJCW1lbXNldChtdG9kKG0sIGNhZGRyX3QpICsgY2h1
bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47CisJ
CQlwYWRkaW5nX2xlbiA9IDA7CisJCX0KKwkJLyogYWRkIENIVU5LUyBwYXJhbWV0ZXIgKi8KKwkJ
Y2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKShtdG9kKG0sIGNhZGRyX3Qp
ICsgY2h1bmtfbGVuKTsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0
IHNjdHBfYXV0aF9jaHVua19saXN0KSArCisJCSAgICAgICAgICAgICAgICBzY3RwX3NlcmlhbGl6
ZV9hdXRoX2NodW5rcyhpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3MtPmNodW5rX3R5cGVzKTsK
KwkJY2h1bmtzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9DSFVOS19MSVNUKTsKKwkJY2h1
bmtzLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJcGFkZGluZ19s
ZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCWNodW5r
X2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKwlTQ1RQX0JVRl9MRU4obSkgPSBjaHVua19sZW47
CisJbV9sYXN0ID0gbTsKKwkvKiBub3cgdGhlIGFkZHJlc3NlcyAqLworCS8qIFRvIG9wdGltaXpl
IHRoaXMgd2UgY291bGQgcHV0IHRoZSBzY29waW5nIHN0dWZmCisJICogaW50byBhIHN0cnVjdHVy
ZSBhbmQgcmVtb3ZlIHRoZSBpbmRpdmlkdWFsIHVpbnQ4J3MgZnJvbQorCSAqIHRoZSBzdGMgc3Ry
dWN0dXJlLiBUaGVuIHdlIGNvdWxkIGp1c3Qgc2lmYSBpbiB0aGUKKwkgKiBhZGRyZXNzIHdpdGhp
biB0aGUgc3RjLi4gYnV0IGZvciBub3cgdGhpcyBpcyBhIHF1aWNrCisJICogaGFjayB0byBnZXQg
dGhlIGFkZHJlc3Mgc3R1ZmYgdGVhc2VkIGFwYXJ0LgorCSAqLworCXNjcC5pcHY0X2FkZHJfbGVn
YWwgPSBzdGMuaXB2NF9hZGRyX2xlZ2FsOworCXNjcC5pcHY2X2FkZHJfbGVnYWwgPSBzdGMuaXB2
Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3AuY29ubl9hZGRy
X2xlZ2FsID0gc3RjLmNvbm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXNjcC5sb29wYmFja19zY29w
ZSA9IHN0Yy5sb29wYmFja19zY29wZTsKKwlzY3AuaXB2NF9sb2NhbF9zY29wZSA9IHN0Yy5pcHY0
X3Njb3BlOworCXNjcC5sb2NhbF9zY29wZSA9IHN0Yy5sb2NhbF9zY29wZTsKKwlzY3Auc2l0ZV9z
Y29wZSA9IHN0Yy5zaXRlX3Njb3BlOworCW1fbGFzdCA9IHNjdHBfYWRkX2FkZHJlc3Nlc190b19p
X2lhKGlucCwgc3RjYiwgJnNjcCwgbV9sYXN0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNudF9pbml0c190bywKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAmcGFkZGluZ19sZW4sICZjaHVua19sZW4pOworCS8qIHBhZGRpbmdfbGVuIGNhbiBvbmx5
IGJlIHBvc2l0aXZlLCBpZiBubyBhZGRyZXNzZXMgaGF2ZSBiZWVuIGFkZGVkICovCisJaWYgKHBh
ZGRpbmdfbGVuID4gMCkgeworCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwg
MCwgcGFkZGluZ19sZW4pOworCQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47CisJCVNDVFBfQlVG
X0xFTihtKSArPSBwYWRkaW5nX2xlbjsKKwkJcGFkZGluZ19sZW4gPSAwOworCX0KKworCS8qIHRh
Y2sgb24gdGhlIG9wZXJhdGlvbmFsIGVycm9yIGlmIHByZXNlbnQgKi8KKwlpZiAob3BfZXJyKSB7
CisJCXBhcmFtZXRlcl9sZW4gPSAwOworCQlmb3IgKG1fdG1wID0gb3BfZXJyOyBtX3RtcCAhPSBO
VUxMOyBtX3RtcCA9IFNDVFBfQlVGX05FWFQobV90bXApKSB7CisJCQlwYXJhbWV0ZXJfbGVuICs9
IFNDVFBfQlVGX0xFTihtX3RtcCk7CisJCX0KKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihw
YXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCVNDVFBfQlVGX05FWFQobV9sYXN0KSA9
IG9wX2VycjsKKwkJd2hpbGUgKFNDVFBfQlVGX05FWFQobV9sYXN0KSAhPSBOVUxMKSB7CisJCQlt
X2xhc3QgPSBTQ1RQX0JVRl9ORVhUKG1fbGFzdCk7CisJCX0KKwkJY2h1bmtfbGVuICs9IHBhcmFt
ZXRlcl9sZW47CisJfQorCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJbV9sYXN0ID0gc2N0cF9h
ZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKTsKKwkJaWYgKG1fbGFzdCA9PSBOVUxM
KSB7CisJCQkvKiBIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtLCBubyBzcGFjZSAqLworCQkJc2N0
cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuOworCQl9CisJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xl
bjsKKwkJcGFkZGluZ19sZW4gPSAwOworCX0KKwkvKiBOb3cgd2UgbXVzdCBidWlsZCBhIGNvb2tp
ZSAqLworCW1fY29va2llID0gc2N0cF9hZGRfY29va2llKGluaXRfcGt0LCBvZmZzZXQsIG0sIDAs
ICZzdGMsICZzaWduYXR1cmUpOworCWlmIChtX2Nvb2tpZSA9PSBOVUxMKSB7CisJCS8qIG1lbW9y
eSBwcm9ibGVtICovCisJCXNjdHBfbV9mcmVlbShtKTsKKwkJcmV0dXJuOworCX0KKwkvKiBOb3cg
YXBwZW5kIHRoZSBjb29raWUgdG8gdGhlIGVuZCBhbmQgdXBkYXRlIHRoZSBzcGFjZS9zaXplICov
CisJU0NUUF9CVUZfTkVYVChtX2xhc3QpID0gbV9jb29raWU7CisJcGFyYW1ldGVyX2xlbiA9IDA7
CisJZm9yIChtX3RtcCA9IG1fY29va2llOyBtX3RtcCAhPSBOVUxMOyBtX3RtcCA9IFNDVFBfQlVG
X05FWFQobV90bXApKSB7CisJCXBhcmFtZXRlcl9sZW4gKz0gU0NUUF9CVUZfTEVOKG1fdG1wKTsK
KwkJaWYgKFNDVFBfQlVGX05FWFQobV90bXApID09IE5VTEwpIHsKKwkJCW1fbGFzdCA9IG1fdG1w
OworCQl9CisJfQorCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBw
YXJhbWV0ZXJfbGVuOworCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCisJLyogUGxhY2Ug
aW4gdGhlIHNpemUsIGJ1dCB3ZSBkb24ndCBpbmNsdWRlCisJICogdGhlIGxhc3QgcGFkIChpZiBh
bnkpIGluIHRoZSBJTklULUFDSy4KKwkgKi8KKwlpbml0YWNrLT5jaC5jaHVua19sZW5ndGggPSBo
dG9ucyhjaHVua19sZW4pOworCisJLyogVGltZSB0byBzaWduIHRoZSBjb29raWUsIHdlIGRvbid0
IHNpZ24gb3ZlciB0aGUgY29va2llCisJICogc2lnbmF0dXJlIHRob3VnaCB0aHVzIHdlIHNldCB0
cmFpbGVyLgorCSAqLworCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1BQywKKwkJCSAgKHVpbnQ4
X3QgKilpbnAtPnNjdHBfZXAuc2VjcmV0X2tleVsoaW50KShpbnAtPnNjdHBfZXAuY3VycmVudF9z
ZWNyZXRfbnVtYmVyKV0sCisJCQkgIFNDVFBfU0VDUkVUX1NJWkUsIG1fY29va2llLCBzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpLAorCQkJICAodWludDhfdCAqKXNpZ25hdHVyZSwgU0NUUF9T
SUdOQVRVUkVfU0laRSk7CisJLyoKKwkgKiBXZSBzaWZhIDAgaGVyZSB0byBOT1Qgc2V0IElQX0RG
IGlmIGl0cyBJUHY0LCB3ZSBpZ25vcmUgdGhlIHJldHVybgorCSAqIGhlcmUgc2luY2UgdGhlIHRp
bWVyIHdpbGwgZHJpdmUgYSByZXRyYW5taXNzaW9uLgorCSAqLworCWlmIChwYWRkaW5nX2xlbiA+
IDApIHsKKwkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0LCBwYWRkaW5nX2xlbikgPT0g
TlVMTCkgeworCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuOworCQl9CisJfQorCWlmIChz
dGMubG9vcGJhY2tfc2NvcGUpIHsKKwkJb3Zlcl9hZGRyID0gKHVuaW9uIHNjdHBfc29ja3N0b3Jl
ICopZHN0OworCX0gZWxzZSB7CisJCW92ZXJfYWRkciA9IE5VTEw7CisJfQorCisJaWYgKChlcnJv
ciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgTlVMTCwgTlVMTCwgdG8sIG0sIDAs
IE5VTEwsIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9s
cG9ydCwgc2gtPnNyY19wb3J0LCBpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcsCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsIG92ZXJfYWRkciwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKSkpIHsKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX09VVFBVVDQsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3IpOworCQlpZiAoZXJy
b3IgPT0gRU5PQlVGUykgeworCQkJaWYgKGFzb2MgIT0gTlVMTCkgeworCQkJCWFzb2MtPmlmcF9o
YWRfZW5vYnVmID0gMTsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xvd2xldmVsZXJy
KTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhc29jICE9IE5VTEwpIHsKKwkJCWFzb2MtPmlmcF9o
YWRfZW5vYnVmID0gMDsKKwkJfQorCX0KKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNf
b3V0Y29udHJvbGNodW5rcyk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfcHJ1bmVfcHJzY3Rw
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2LAorICAgIGludCBkYXRhb3V0KQor
eworCWludCBmcmVlZF9zcGMgPSAwOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5j
aGs7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAoKGFzb2MtPnByc2N0cF9z
dXBwb3J0ZWQpICYmCisJICAgIChhc29jLT5zZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlID4gMCkp
IHsKKwkJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsK
KwkJCS8qCisJCQkgKiBMb29rIGZvciBjaHVua3MgbWFya2VkIHdpdGggdGhlIFBSX1NDVFAgZmxh
ZyBBTkQKKwkJCSAqIHRoZSBidWZmZXIgc3BhY2UgZmxhZy4gSWYgdGhlIG9uZSBiZWluZyBzZW50
IGlzCisJCQkgKiBlcXVhbCBvciBncmVhdGVyIHByaW9yaXR5IHRoZW4gcHVyZ2UgdGhlIG9sZCBv
bmUKKwkJCSAqIGFuZCBmcmVlIHNvbWUgc3BhY2UuCisJCQkgKi8KKwkJCWlmIChQUl9TQ1RQX0JV
Rl9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJLyoKKwkJCQkgKiBUaGlzIG9uZSBpcyBQUi1T
Q1RQIEFORCBidWZmZXIgc3BhY2UKKwkJCQkgKiBsaW1pdGVkIHR5cGUKKwkJCQkgKi8KKwkJCQlp
ZiAoY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYyA+PSAobG9uZylzcmN2LT5zaW5mb190
aW1ldG9saXZlKSB7CisJCQkJCS8qCisJCQkJCSAqIExvd2VyIG51bWJlcnMgZXF1YXRlcyB0byBo
aWdoZXIKKwkJCQkJICogcHJpb3JpdHkgc28gaWYgdGhlIG9uZSB3ZSBhcmUKKwkJCQkJICogbG9v
a2luZyBhdCBoYXMgYSBsYXJnZXIgb3IgZXF1YWwKKwkJCQkJICogcHJpb3JpdHkgd2Ugd2FudCB0
byBkcm9wIHRoZSBkYXRhCisJCQkJCSAqIGFuZCBOT1QgcmV0cmFuc21pdCBpdC4KKwkJCQkJICov
CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSByZWxlYXNlIHRo
ZSBib29rX3NpemUKKwkJCQkJCSAqIGlmIHRoZSBtYnVmIGlzIGhlcmUKKwkJCQkJCSAqLworCQkJ
CQkJaW50IHJldF9zcGM7CisJCQkJCQl1aW50OF90IHNlbnQ7CisKKwkJCQkJCWlmIChjaGstPnNl
bnQgPiBTQ1RQX0RBVEFHUkFNX1VOU0VOVCkKKwkJCQkJCQlzZW50ID0gMTsKKwkJCQkJCWVsc2UK
KwkJCQkJCQlzZW50ID0gMDsKKwkJCQkJCXJldF9zcGMgPSBzY3RwX3JlbGVhc2VfcHJfc2N0cF9j
aHVuayhzdGNiLCBjaGssCisJCQkJCQkgICAgc2VudCwKKwkJCQkJCSAgICBTQ1RQX1NPX0xPQ0tF
RCk7CisJCQkJCQlmcmVlZF9zcGMgKz0gcmV0X3NwYzsKKwkJCQkJCWlmIChmcmVlZF9zcGMgPj0g
ZGF0YW91dCkgeworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJfQkvKiBpZiBjaHVuayB3
YXMgcHJlc2VudCAqLworCQkJCX0JLyogaWYgb2Ygc3VmZmljaWVudCBwcmlvcml0eSAqLworCQkJ
fQkvKiBpZiBjaHVuayBoYXMgZW5hYmxlZCAqLworCQl9CQkvKiB0YWlscWZvcmVhY2ggKi8KKwor
CQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBu
Y2hrKSB7CisJCQkvKiBIZXJlIHdlIG11c3QgbW92ZSB0byB0aGUgc2VudCBxdWV1ZSBhbmQgbWFy
ayAqLworCQkJaWYgKFBSX1NDVFBfQlVGX0VOQUJMRUQoY2hrLT5mbGFncykpIHsKKwkJCQlpZiAo
Y2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYyA+PSAobG9uZylzcmN2LT5zaW5mb190aW1l
dG9saXZlKSB7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSBy
ZWxlYXNlIHRoZSBib29rX3NpemUKKwkJCQkJCSAqIGlmIHRoZSBtYnVmIGlzIGhlcmUKKwkJCQkJ
CSAqLworCQkJCQkJaW50IHJldF9zcGM7CisKKwkJCQkJCXJldF9zcGMgPSBzY3RwX3JlbGVhc2Vf
cHJfc2N0cF9jaHVuayhzdGNiLCBjaGssCisJCQkJCQkgICAgMCwgU0NUUF9TT19MT0NLRUQpOwor
CisJCQkJCQlmcmVlZF9zcGMgKz0gcmV0X3NwYzsKKwkJCQkJCWlmIChmcmVlZF9zcGMgPj0gZGF0
YW91dCkgeworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJfQkvKiBlbmQgaWYgY2hrLT5k
YXRhICovCisJCQkJfQkvKiBlbmQgaWYgcmlnaHQgY2xhc3MgKi8KKwkJCX0JLyogZW5kIGlmIGNo
ayBwci1zY3RwICovCisJCX0JCS8qIHRhaWxxZm9yZWFjaHNhZmUgKGNoaykgKi8KKwl9CQkJLyog
aWYgZW5hYmxlZCBpbiBhc29jICovCit9CisKK2ludAorc2N0cF9nZXRfZnJhZ19wb2ludChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7
CisJaW50IHNpeiwgb3ZoOworCisJLyoKKwkgKiBGb3IgZW5kcG9pbnRzIHRoYXQgaGF2ZSBib3Ro
IHY2IGFuZCB2NCBhZGRyZXNzZXMgd2UgbXVzdCByZXNlcnZlCisJICogcm9vbSBmb3IgdGhlIGlw
djYgaGVhZGVyLCBmb3IgdGhvc2UgdGhhdCBhcmUgb25seSBkZWFsaW5nIHdpdGggVjQKKwkgKiB3
ZSB1c2UgYSBsYXJnZXIgZnJhZyBwb2ludC4KKwkgKi8KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCW92aCA9IFNDVFBfTUlOX09W
RVJIRUFEOworCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJ
CW92aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCX0gZWxzZSB7CisJCQlvdmggPSBTQ1RQ
X01JTl9WNF9PVkVSSEVBRDsKKwkJfQorI2Vsc2UKKwkJb3ZoID0gU0NUUF9NSU5fVjRfT1ZFUkhF
QUQ7CisjZW5kaWYKKwl9CisJb3ZoICs9IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsK
KwlpZiAoc3RjYi0+YXNvYy5zY3RwX2ZyYWdfcG9pbnQgPiBhc29jLT5zbWFsbGVzdF9tdHUpCisJ
CXNpeiA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKKwllbHNlCisJCXNpeiA9IChzdGNiLT5h
c29jLnNjdHBfZnJhZ19wb2ludCAtIG92aCk7CisJLyoKKwkgKiBpZiAoc2l6ID4gKE1DTEJZVEVT
LXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpIHsKKwkgKi8KKwkvKiBBIGRhdGEgY2h1
bmsgTVVTVCBmaXQgaW4gYSBjbHVzdGVyICovCisJLyogc2l6ID0gKE1DTEJZVEVTIC0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsgKi8KKwkvKiB9ICovCisKKwkvKiBhZGp1c3QgZm9y
IGFuIEFVVEggY2h1bmsgaWYgREFUQSByZXF1aXJlcyBhdXRoICovCisJaWYgKHNjdHBfYXV0aF9p
c19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykp
CisJCXNpeiAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19p
ZCk7CisKKwlpZiAoc2l6ICUgNCkgeworCQkvKiBtYWtlIGl0IGFuIGV2ZW4gd29yZCBib3VuZGFy
eSBwbGVhc2UgKi8KKwkJc2l6IC09IChzaXogJSA0KTsKKwl9CisJcmV0dXJuIChzaXopOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cXVldWVfcGVuZGluZyAqc3ApCit7CisJLyoKKwkgKiBXZSBhc3N1bWUgdGhhdCB0aGUgdXNlciB3
YW50cyBQUl9TQ1RQX1RUTCBpZiB0aGUgdXNlcgorCSAqIHByb3ZpZGVzIGEgcG9zaXRpdmUgbGlm
ZXRpbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYW55CisJICogUFJfU0NUUCBwb2xpY3kuCisJICov
CisJaWYgKFBSX1NDVFBfRU5BQkxFRChzcC0+c2luZm9fZmxhZ3MpKSB7CisJCXNwLT5hY3RfZmxh
Z3MgfD0gUFJfU0NUUF9QT0xJQ1koc3AtPnNpbmZvX2ZsYWdzKTsKKwl9IGVsc2UgaWYgKHNwLT50
aW1ldG9saXZlID4gMCkgeworCQlzcC0+c2luZm9fZmxhZ3MgfD0gU0NUUF9QUl9TQ1RQX1RUTDsK
KwkJc3AtPmFjdF9mbGFncyB8PSBQUl9TQ1RQX1BPTElDWShzcC0+c2luZm9fZmxhZ3MpOworCX0g
ZWxzZSB7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChQUl9TQ1RQX1BPTElDWShzcC0+c2luZm9f
ZmxhZ3MpKSB7CisJY2FzZSBDSFVOS19GTEFHU19QUl9TQ1RQX0JVRjoKKwkJLyoKKwkJICogVGlt
ZSB0byBsaXZlIGlzIGEgcHJpb3JpdHkgc3RvcmVkIGluIHR2X3NlYyB3aGVuCisJCSAqIGRvaW5n
IHRoZSBidWZmZXIgZHJvcCB0aGluZy4KKwkJICovCisJCXNwLT50cy50dl9zZWMgPSBzcC0+dGlt
ZXRvbGl2ZTsKKwkJc3AtPnRzLnR2X3VzZWMgPSAwOworCQlicmVhazsKKwljYXNlIENIVU5LX0ZM
QUdTX1BSX1NDVFBfVFRMOgorCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCSh2b2lkKVNDVFBf
R0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOworCQl0di50dl9zZWMgPSBzcC0+dGltZXRvbGl2ZSAv
IDEwMDA7CisJCXR2LnR2X3VzZWMgPSAoc3AtPnRpbWV0b2xpdmUgKiAxMDAwKSAlIDEwMDAwMDA7
CisJCS8qIFRPRE8gc2N0cF9jb25zdGFudHMuaCBuZWVkcyBhbHRlcm5hdGl2ZSB0aW1lIG1hY3Jv
cyB3aGVuCisJCSAqICBfS0VSTkVMIGlzIHVuZGVmaW5lZC4KKwkJICovCisjaWZuZGVmIF9fRnJl
ZUJTRF9fCisJCXRpbWVyYWRkKCZzcC0+dHMsICZ0diwgJnNwLT50cyk7CisjZWxzZQorCQl0aW1l
dmFsYWRkKCZzcC0+dHMsICZ0dik7CisjZW5kaWYKKwl9CisJCWJyZWFrOworCWNhc2UgQ0hVTktf
RkxBR1NfUFJfU0NUUF9SVFg6CisJCS8qCisJCSAqIFRpbWUgdG8gbGl2ZSBpcyBhIHRoZSBudW1i
ZXIgb3IgcmV0cmFuc21pc3Npb25zCisJCSAqIHN0b3JlZCBpbiB0dl9zZWMuCisJCSAqLworCQlz
cC0+dHMudHZfc2VjID0gc3AtPnRpbWV0b2xpdmU7CisJCXNwLT50cy50dl91c2VjID0gMDsKKwkJ
YnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUlJFUTEsCisJCQkiVW5r
bm93biBQUl9TQ1RQIHBvbGljeSAldS5cbiIsCisJCQlQUl9TQ1RQX1BPTElDWShzcC0+c2luZm9f
ZmxhZ3MpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50CitzY3RwX21zZ19hcHBlbmQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCXN0cnVj
dCBtYnVmICptLAorCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2LCBpbnQgaG9sZF9zdGNi
X2xvY2spCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgbWJ1ZiAqYXQ7CisJc3RydWN0IHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0ICpzdHJtOworCisJLyogR2l2ZW4gYW4gbWJ1ZiBjaGFpbiwgcHV0IGl0CisJICogaW50byB0
aGUgYXNzb2NpYXRpb24gc2VuZCBxdWV1ZSBhbmQKKwkgKiBwbGFjZSBpdCBvbiB0aGUgd2hlZWwK
KwkgKi8KKwlpZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250
KSB7CisJCS8qIEludmFsaWQgc3RyZWFtIG51bWJlciAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
X1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsK
KwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKChzdGNiLT5hc29j
LnN0cmVhbV9sb2NrZWQpICYmCisJICAgIChzdGNiLT5hc29jLnN0cmVhbV9sb2NrZWRfb24gIT0g
c3Jjdi0+c2luZm9fc3RyZWFtKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBOVUxM
LCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJZXJyb3IgPSBF
SU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJc3RybSA9ICZzdGNiLT5hc29jLnN0cm1vdXRb
c3Jjdi0+c2luZm9fc3RyZWFtXTsKKwkvKiBOb3cgY2FuIHdlIHNlbmQgdGhpcz8gKi8KKwlpZiAo
KFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQp
IHx8CisJICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVU
RE9XTl9BQ0tfU0VOVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBT
Q1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAm
IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJLyogZ290IGRhdGEgd2hpbGUgc2h1
dHRpbmcgZG93biAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7CisJCWVycm9yID0gRUNPTk5SRVNFVDsK
KwkJZ290byBvdXRfbm93OworCX0KKwlzY3RwX2FsbG9jX2Ffc3RybW9xKHN0Y2IsIHNwKTsKKwlp
ZiAoc3AgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJZXJyb3IgPSBFTk9NRU07CisJCWdv
dG8gb3V0X25vdzsKKwl9CisJc3AtPnNpbmZvX2ZsYWdzID0gc3Jjdi0+c2luZm9fZmxhZ3M7CisJ
c3AtPnRpbWV0b2xpdmUgPSBzcmN2LT5zaW5mb190aW1ldG9saXZlOworCXNwLT5wcGlkID0gc3Jj
di0+c2luZm9fcHBpZDsKKwlzcC0+Y29udGV4dCA9IHNyY3YtPnNpbmZvX2NvbnRleHQ7CisJc3At
PmZzbiA9IDA7CisJaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVSKSB7CisJCXNw
LT5uZXQgPSBuZXQ7CisJCWF0b21pY19hZGRfaW50KCZzcC0+bmV0LT5yZWZfY291bnQsIDEpOwor
CX0gZWxzZSB7CisJCXNwLT5uZXQgPSBOVUxMOworCX0KKwkodm9pZClTQ1RQX0dFVFRJTUVfVElN
RVZBTCgmc3AtPnRzKTsKKwlzcC0+c2lkID0gc3Jjdi0+c2luZm9fc3RyZWFtOworCXNwLT5tc2df
aXNfY29tcGxldGUgPSAxOworCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAxOworCXNwLT5zb21lX3Rh
a2VuID0gMDsKKwlzcC0+ZGF0YSA9IG07CisJc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJc2N0cF9z
ZXRfcHJzY3RwX3BvbGljeShzcCk7CisJLyogV2UgY291bGQgaW4gdGhlb3J5IChmb3Igc2VuZGFs
bCkgc2lmYSB0aGUgbGVuZ3RoCisJICogaW4sIGJ1dCB3ZSB3b3VsZCBzdGlsbCBoYXZlIHRvIGh1
bnQgdGhyb3VnaCB0aGUKKwkgKiBjaGFpbiBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIHRoZSB0YWls
X21idWYKKwkgKi8KKwlzcC0+bGVuZ3RoID0gMDsKKwlmb3IgKGF0ID0gbTsgYXQ7IGF0ID0gU0NU
UF9CVUZfTkVYVChhdCkpIHsKKwkJaWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5VTEwpCisJCQlz
cC0+dGFpbF9tYnVmID0gYXQ7CisJCXNwLT5sZW5ndGggKz0gU0NUUF9CVUZfTEVOKGF0KTsKKwl9
CisJaWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92YWxpZCkgeworCQlzcC0+YXV0aF9rZXlpZCA9
IHNyY3YtPnNpbmZvX2tleW51bWJlcjsKKwl9IGVsc2UgeworCQlzcC0+YXV0aF9rZXlpZCA9IHN0
Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworCX0KKwlpZiAoc2N0cF9hdXRoX2lzX3Jl
cXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgewor
CQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgc3AtPmF1dGhfa2V5aWQpOworCQlzcC0+aG9s
ZHNfa2V5X3JlZiA9IDE7CisJfQorCWlmIChob2xkX3N0Y2JfbG9jayA9PSAwKSB7CisJCVNDVFBf
VENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwgc3AtPmxl
bmd0aCk7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCwgMSk7
CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVlLCBzcCwgbmV4dCk7CisJc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19hZGRfdG9fc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29j
LCBzdHJtLCBzcCwgMSk7CisJbSA9IE5VTEw7CisJaWYgKGhvbGRfc3RjYl9sb2NrID09IDApIHsK
KwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorb3V0X25vdzoKKwlpZiAobSkgewor
CQlzY3RwX21fZnJlZW0obSk7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisKK3N0YXRpYyBz
dHJ1Y3QgbWJ1ZiAqCitzY3RwX2NvcHlfbWJ1ZmNoYWluKHN0cnVjdCBtYnVmICpjbG9uZWNoYWlu
LAorCQkgICAgc3RydWN0IG1idWYgKm91dGNoYWluLAorCQkgICAgc3RydWN0IG1idWYgKiplbmRv
ZmNoYWluLAorCQkgICAgaW50IGNhbl90YWtlX21idWYsCisJCSAgICBpbnQgc2l6ZW9mY3B5LAor
CQkgICAgdWludDhfdCBjb3B5X2J5X3JlZikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3Qg
bWJ1ZiAqYXBwZW5kY2hhaW47CisJY2FkZHJfdCBjcDsKKwlpbnQgbGVuOworCisJaWYgKGVuZG9m
Y2hhaW4gPT0gTlVMTCkgeworCQkvKiBlcnJvciAqLworCWVycm9yX291dDoKKwkJaWYgKG91dGNo
YWluKQorCQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJ
aWYgKGNhbl90YWtlX21idWYpIHsKKwkJYXBwZW5kY2hhaW4gPSBjbG9uZWNoYWluOworCX0gZWxz
ZSB7CisJCWlmICghY29weV9ieV9yZWYgJiYKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykKKwkJICAg
IDAKKyNlbHNlCisJCSAgICAoc2l6ZW9mY3B5IDw9IChpbnQpKCgoKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkgLSAxKSAqIE1MRU4pICsgTUhMRU4pKSkKKyNlbmRp
ZgorCQkgICAgKSB7CisJCQkvKiBJdHMgbm90IGluIGEgY2x1c3RlciAqLworCQkJaWYgKCplbmRv
ZmNoYWluID09IE5VTEwpIHsKKwkJCQkvKiBsZXRzIGdldCBhIG1idWYgY2x1c3RlciAqLworCQkJ
CWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7CisJCQkJCS8qIFRoaXMgaXMgdGhlIGdlbmVyYWwgY2Fz
ZSAqLworCQkJCW5ld19tYnVmOgorCQkJCQlvdXRjaGFpbiA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJCQkJCWlmIChvdXRjaGFp
biA9PSBOVUxMKSB7CisJCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQkJfQorCQkJCQlTQ1RQX0JV
Rl9MRU4ob3V0Y2hhaW4pID0gMDsKKwkJCQkJKmVuZG9mY2hhaW4gPSBvdXRjaGFpbjsKKwkJCQkJ
LyogZ2V0IHRoZSBwcmVwZW5kIHNwYWNlICovCisJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3V0Y2hh
aW4sIChTQ1RQX0ZJUlNUX01CVUZfUkVTVis0KSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogV2Ug
cmVhbGx5IHNob3VsZCBub3QgZ2V0IGEgTlVMTCBpbiBlbmRvZmNoYWluICovCisJCQkJCS8qIGZp
bmQgZW5kICovCisJCQkJCW0gPSBvdXRjaGFpbjsKKwkJCQkJd2hpbGUgKG0pIHsKKwkJCQkJCWlm
IChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKKwkJCQkJCQkqZW5kb2ZjaGFpbiA9IG07CisJ
CQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJCQkJ
fQorCQkJCQkvKiBzYW5pdHkgKi8KKwkJCQkJaWYgKCplbmRvZmNoYWluID09IE5VTEwpIHsKKwkJ
CQkJCS8qIGh1aCwgVFNOSCBYWFggbWF5YmUgd2Ugc2hvdWxkIHBhbmljICovCisJCQkJCQlzY3Rw
X21fZnJlZW0ob3V0Y2hhaW4pOworCQkJCQkJZ290byBuZXdfbWJ1ZjsKKwkJCQkJfQorCQkJCX0K
KwkJCQkvKiBnZXQgdGhlIG5ldyBlbmQgb2YgbGVuZ3RoICovCisJCQkJbGVuID0gKGludClNX1RS
QUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOworCQkJfSBlbHNlIHsKKwkJCQkvKiBob3cgbXVjaCBp
cyBsZWZ0IGF0IHRoZSBlbmQ/ICovCisJCQkJbGVuID0gKGludClNX1RSQUlMSU5HU1BBQ0UoKmVu
ZG9mY2hhaW4pOworCQkJfQorCQkJLyogRmluZCB0aGUgZW5kIG9mIHRoZSBkYXRhLCBmb3IgYXBw
ZW5kaW5nICovCisJCQljcCA9IChtdG9kKCgqZW5kb2ZjaGFpbiksIGNhZGRyX3QpICsgU0NUUF9C
VUZfTEVOKCgqZW5kb2ZjaGFpbikpKTsKKworCQkJLyogTm93IGxldHMgY29weSBpdCBvdXQgKi8K
KwkJCWlmIChsZW4gPj0gc2l6ZW9mY3B5KSB7CisJCQkJLyogSXQgYWxsIGZpdHMsIGNvcHkgaXQg
aW4gKi8KKwkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIHNpemVvZmNweSwgY3ApOworCQkJ
CVNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSArPSBzaXplb2ZjcHk7CisJCQl9IGVsc2Ugewor
CQkJCS8qIGZpbGwgdXAgdGhlIGVuZCBvZiB0aGUgY2hhaW4gKi8KKwkJCQlpZiAobGVuID4gMCkg
eworCQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIGxlbiwgY3ApOworCQkJCQlTQ1RQX0JV
Rl9MRU4oKCplbmRvZmNoYWluKSkgKz0gbGVuOworCQkJCQkvKiBub3cgd2UgbmVlZCBhbm90aGVy
IG9uZSAqLworCQkJCQlzaXplb2ZjcHkgLT0gbGVuOworCQkJCX0KKwkJCQltID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwkJCQlp
ZiAobSA9PSBOVUxMKSB7CisJCQkJCS8qIFdlIGZhaWxlZCAqLworCQkJCQlnb3RvIGVycm9yX291
dDsKKwkJCQl9CisJCQkJU0NUUF9CVUZfTkVYVCgoKmVuZG9mY2hhaW4pKSA9IG07CisJCQkJKmVu
ZG9mY2hhaW4gPSBtOworCQkJCWNwID0gbXRvZCgoKmVuZG9mY2hhaW4pLCBjYWRkcl90KTsKKwkJ
CQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIGxlbiwgc2l6ZW9mY3B5LCBjcCk7CisJCQkJU0NUUF9C
VUZfTEVOKCgqZW5kb2ZjaGFpbikpICs9IHNpemVvZmNweTsKKwkJCX0KKwkJCXJldHVybiAob3V0
Y2hhaW4pOworCQl9IGVsc2UgeworCQkJLyogY29weSB0aGUgb2xkIGZhc2hpb24gd2F5ICovCisJ
CQlhcHBlbmRjaGFpbiA9IFNDVFBfTV9DT1BZTShjbG9uZWNoYWluLCAwLCBNX0NPUFlBTEwsIE1f
Tk9XQUlUKTsKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORworCQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJ
CXNjdHBfbG9nX21iYyhhcHBlbmRjaGFpbiwgU0NUUF9NQlVGX0lDT1BZKTsKKwkJCX0KKyNlbmRp
ZgorCQl9CisJfQorCWlmIChhcHBlbmRjaGFpbiA9PSBOVUxMKSB7CisJCS8qIGVycm9yICovCisJ
CWlmIChvdXRjaGFpbikKKwkJCXNjdHBfbV9mcmVlbShvdXRjaGFpbik7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCWlmIChvdXRjaGFpbikgeworCQkvKiB0YWNrIG9uIHRvIHRoZSBlbmQgKi8KKwkJ
aWYgKCplbmRvZmNoYWluICE9IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05FWFQoKCgqZW5kb2ZjaGFp
bikpKSA9IGFwcGVuZGNoYWluOworCQl9IGVsc2UgeworCQkJbSA9IG91dGNoYWluOworCQkJd2hp
bGUgKG0pIHsKKwkJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7CisJCQkJCVNDVFBf
QlVGX05FWFQobSkgPSBhcHBlbmRjaGFpbjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW0gPSBT
Q1RQX0JVRl9ORVhUKG0pOworCQkJfQorCQl9CisJCS8qCisJCSAqIHNhdmUgb2ZmIHRoZSBlbmQg
YW5kIHVwZGF0ZSB0aGUgZW5kLWNoYWluCisJCSAqIHBvc2l0aW9uCisJCSAqLworCQltID0gYXBw
ZW5kY2hhaW47CisJCXdoaWxlIChtKSB7CisJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxM
KSB7CisJCQkJKmVuZG9mY2hhaW4gPSBtOworCQkJCWJyZWFrOworCQkJfQorCQkJbSA9IFNDVFBf
QlVGX05FWFQobSk7CisJCX0KKwkJcmV0dXJuIChvdXRjaGFpbik7CisJfSBlbHNlIHsKKwkJLyog
c2F2ZSBvZmYgdGhlIGVuZCBhbmQgdXBkYXRlIHRoZSBlbmQtY2hhaW4gcG9zaXRpb24gKi8KKwkJ
bSA9IGFwcGVuZGNoYWluOworCQl3aGlsZSAobSkgeworCQkJaWYgKFNDVFBfQlVGX05FWFQobSkg
PT0gTlVMTCkgeworCQkJCSplbmRvZmNoYWluID0gbTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW0g
PSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCXJldHVybiAoYXBwZW5kY2hhaW4pOworCX0KK30K
Kworc3RhdGljIGludAorc2N0cF9tZWRfY2h1bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICAgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCisJCSAgICAgIGludCAqbnVtX291dCwKKwkJICAgICAgaW50ICpy
ZWFzb25fY29kZSwKKwkJICAgICAgaW50IGNvbnRyb2xfb25seSwgaW50IGZyb21fd2hlcmUsCisJ
CSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxlZCwgaW50IGZyYWdfcG9p
bnQsIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQorCQkgICAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgICAgKTsKKworc3RhdGljIHZvaWQKK3NjdHBfc2VuZGFsbF9pdGVyYXRvcihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHZvaWQgKnB0ciwK
KyAgICB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBfY29weV9hbGwg
KmNhOworCXN0cnVjdCBtYnVmICptOworCWludCByZXQgPSAwOworCWludCBhZGRlZF9jb250cm9s
ID0gMDsKKwlpbnQgdW5fc2VudCwgZG9fY2h1bmtfb3V0cHV0ID0gMTsKKwlzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwljYSA9IChzdHJ1
Y3Qgc2N0cF9jb3B5X2FsbCAqKXB0cjsKKwlpZiAoY2EtPm0gPT0gTlVMTCkgeworCQlyZXR1cm47
CisJfQorCWlmIChjYS0+aW5wICE9IGlucCkgeworCQkvKiBUU05IICovCisJCXJldHVybjsKKwl9
CisJaWYgKGNhLT5zbmRsZW4gPiAwKSB7CisJCW0gPSBTQ1RQX01fQ09QWU0oY2EtPm0sIDAsIE1f
Q09QWUFMTCwgTV9OT1dBSVQpOworCQlpZiAobSA9PSBOVUxMKSB7CisJCQkvKiBjYW4ndCBjb3B5
IHNvIHdlIGFyZSBkb25lICovCisJCQljYS0+Y250X2ZhaWxlZCsrOworCQkJcmV0dXJuOworCQl9
CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2df
bWJjKG0sIFNDVFBfTUJVRl9JQ09QWSk7CisJCX0KKyNlbmRpZgorCX0gZWxzZSB7CisJCW0gPSBO
VUxMOworCX0KKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAoc3RjYi0+YXNvYy5h
bHRlcm5hdGUpIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJfSBlbHNlIHsKKwkJ
bmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCX0KKwlpZiAoY2EtPnNuZHJj
di5zaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHsKKwkJLyogQWJvcnQgdGhpcyBhc3NvYyB3aXRo
IG0gYXMgdGhlIHVzZXIgZGVmaW5lZCByZWFzb24gKi8KKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJ
U0NUUF9CVUZfUFJFUEVORChtLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCBNX05PV0FJ
VCk7CisJCX0gZWxzZSB7CisJCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9X
QUlULCAxLCBNVF9EQVRBKTsKKwkJCVNDVFBfQlVGX0xFTihtKSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9wYXJhbWhkcik7CisJCX0KKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJc3RydWN0IHNjdHBfcGFy
YW1oZHIgKnBoOworCisJCQlwaCA9IG10b2QobSwgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7CisJ
CQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJUKTsK
KwkJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucygodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0
cF9wYXJhbWhkcikgKyBjYS0+c25kbGVuKSk7CisJCX0KKwkJLyogV2UgYWRkIG9uZSBoZXJlIHRv
IGtlZXAgdGhlIGFzc29jIGZyb20KKwkJICogZGlzLWFwcGVhcmluZyBvbiB1cy4KKwkJICovCisJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCXNjdHBfYWJvcnRfYW5f
YXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkvKiBzY3Rw
X2Fib3J0X2FuX2Fzc29jaWF0aW9uIGNhbGxzIHNjdHBfZnJlZV9hc29jKCkKKwkJICogZnJlZSBh
c3NvY2lhdGlvbiB3aWxsIE5PVCBmcmVlIGl0IHNpbmNlIHdlCisJCSAqIGluY3JlbWVudGVkIHRo
ZSByZWZjbnQgLi4gd2UgZG8gdGhpcyB0byBwcmV2ZW50CisJCSAqIGl0IGJlaW5nIGZyZWVkIGFu
ZCB0aGluZ3MgZ2V0dGluZyB0cmlja3kgc2luY2UKKwkJICogd2UgY291bGQgZW5kIHVwIChmcm9t
IGZyZWVfYXNvYykgY2FsbGluZyBpbnBjYl9mcmVlCisJCSAqIHdoaWNoIHdvdWxkIGdldCBhIHJl
Y3Vyc2l2ZSBsb2NrIGNhbGwgdG8gdGhlCisJCSAqIGl0ZXJhdG9yIGxvY2suLiBCdXQgYXMgYSBj
b25zZXF1ZW5jZSBvZiB0aGF0IHRoZQorCQkgKiBzdGNiIHdpbGwgcmV0dXJuIHRvIHVzIHVuLWxv
Y2tlZC4uIHNpbmNlIGZyZWVfYXNvYworCQkgKiByZXR1cm5zIHdpdGggZWl0aGVyIG5vIFRDQiBv
ciB0aGUgVENCIHVubG9ja2VkLCB3ZQorCQkgKiBtdXN0IHJlbG9jay4uIHRvIHVubG9jayBpbiB0
aGUgaXRlcmF0b3IgdGltZXIgOi0wCisJCSAqLworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJZ290byBub19jaHVua19v
dXRwdXQ7CisJfSBlbHNlIHsKKwkJaWYgKG0pIHsKKwkJCXJldCA9IHNjdHBfbXNnX2FwcGVuZChz
dGNiLCBuZXQsIG0sCisJCQkJCSAgICAgICZjYS0+c25kcmN2LCAxKTsKKwkJfQorCQlhc29jID0g
JnN0Y2ItPmFzb2M7CisJCWlmIChjYS0+c25kcmN2LnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsK
KwkJCS8qIHNodXRkb3duIHRoaXMgYXNzb2MgKi8KKwkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+
c2VuZF9xdWV1ZSkgJiYKKwkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYK
KwkJCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tF
RCkgPT0gMCkgeworCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJf
bXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJCQlnb3RvIGFib3J0X2FueXdheTsK
KwkJCQl9CisJCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRv
bmUuLi4gKi8KKwkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hV
VERPV05fU0VOVCkgJiYKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAh
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgeworCQkJCQkvKiBvbmx5IHNlbmQgU0hV
VERPV04gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworCQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUo
YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB7CisJCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMy
KHNjdHBzX2N1cnJlc3RhYik7CisJCQkJCX0KKwkJCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NU
UF9TVEFURV9TSFVURE9XTl9TRU5UKTsKKwkJCQkJU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBT
Q1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOworCQkJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9z
aHV0ZG93bihzdGNiKTsKKwkJCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldCk7CisJCQkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLCBzdGNiLT5zY3RwX2Vw
LCBzdGNiLAorCQkJCQkJCSBuZXQpOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9TSFVURE9XTkdVQVJELCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCSBhc29jLT5w
cmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwkJCQkJYWRkZWRfY29udHJvbCA9IDE7CisJCQkJCWRvX2No
dW5rX291dHB1dCA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIHdlIHN0
aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEgdG8gc2VuZCwgc28gc2V0CisJCQkJICogU0hVVERP
V05fUEVORElORworCQkJCSAqLworCQkJCS8qCisJCQkJICogWFhYIHNvY2tldHMgZHJhZnQgc2F5
cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQorCQkJCSAqIHNlbnQgd2l0aCBubyBkYXRhLiAgY3Vy
cmVudGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKKwkJCQkgKiBkYXRhIHRvIGJlIHNlbnQgZmlyc3Qg
YW5kIG1vdmUgdG8KKwkJCQkgKiBTSFVURE9XTi1QRU5ESU5HCisJCQkJICovCisJCQkJaWYgKChT
Q1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYmCisJCQkJ
ICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVE
KSAmJgorCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9X
Tl9BQ0tfU0VOVCkpIHsKKwkJCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNf
dXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJCQkJCQlhc29jLT5zdGF0ZSB8
PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQ7CisJCQkJCX0KKwkJCQkJYXNvYy0+c3RhdGUg
fD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOworCQkJCQlpZiAoVEFJTFFfRU1QVFkoJmFz
b2MtPnNlbmRfcXVldWUpICYmCisJCQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1
ZSkgJiYKKwkJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVG
VCkpIHsKKwkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCQljaGFyIG1zZ1tTQ1RQX0RJ
QUdfSU5GT19MRU5dOworCisJCQkJCWFib3J0X2FueXdheToKKwkJCQkJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksCisJCQkJCQkgICAgICAgICAiJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19M
SU5FX18sIF9fZnVuY19fKTsKKwkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnKTsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsCisJCQkJCQkJCQkgIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJCWF0
b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJCQkJZ290byBub19jaHVu
a19vdXRwdXQ7CisJCQkJCX0KKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgYXNvYy0+cHJpbWFy
eV9kZXN0aW5hdGlvbik7CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJdW5fc2VudCA9ICgoc3Rj
Yi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
KSArCisJCSAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgKiBTQ1RQX0RBVEFfQ0hVTktf
T1ZFUkhFQUQoc3RjYikpKTsKKworCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX05PREVMQVkpKSAmJgorCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPiAw
KSAmJgorCSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NU
UF9NSU5fT1ZFUkhFQUQpKSkgeworCQlkb19jaHVua19vdXRwdXQgPSAwOworCX0KKwlpZiAoZG9f
Y2h1bmtfb3V0cHV0KQorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVU
X0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJZWxzZSBpZiAoYWRkZWRfY29u
dHJvbCkgeworCQlpbnQgbnVtX291dCwgcmVhc29uLCBub3dfZmlsbGVkID0gMDsKKwkJc3RydWN0
IHRpbWV2YWwgbm93OworCQlpbnQgZnJhZ19wb2ludDsKKworCQlmcmFnX3BvaW50ID0gc2N0cF9n
ZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7CisJCSh2b2lkKXNjdHBfbWVkX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29jLCAmbnVtX291dCwKKwkJCQkgICAgICAmcmVh
c29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwl9Cisgbm9fY2h1bmtfb3V0cHV0OgorCWlmIChyZXQpIHsKKwkJY2EtPmNudF9mYWls
ZWQrKzsKKwl9IGVsc2UgeworCQljYS0+Y250X3NlbnQrKzsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX3NlbmRhbGxfY29tcGxldGVzKHZvaWQgKnB0ciwgdWludDMyX3QgdmFsIFNDVFBfVU5V
U0VEKQoreworCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKKworCWNhID0gKHN0cnVjdCBzY3Rw
X2NvcHlfYWxsICopcHRyOworCS8qCisJICogRG8gYSBub3RpZnkgaGVyZT8gS2FjaGVvbmcgc3Vn
Z2VzdHMgdGhhdCB0aGUgbm90aWZ5IGJlIGRvbmUgYXQKKwkgKiB0aGUgc2VuZCB0aW1lLi4gc28g
eW91IHdvdWxkIHB1c2ggdXAgYSBub3RpZmljYXRpb24gaWYgYW55IHNlbmQKKwkgKiBmYWlsZWQu
IERvbid0IGtub3cgaWYgdGhpcyBpcyBmZWFzaWJsZSBzaW5jZSB0aGUgb25seSBmYWlsdXJlcyB3
ZQorCSAqIGhhdmUgaXMgIm1lbW9yeSIgcmVsYXRlZCBhbmQgaWYgeW91IGNhbm5vdCBnZXQgYW4g
bWJ1ZiB0byBzZW5kCisJICogdGhlIGRhdGEgeW91IHN1cmVseSBjYW4ndCBnZXQgYW4gbWJ1ZiB0
byBzZW5kIHVwIHRvIG5vdGlmeSB0aGUKKwkgKiB1c2VyIHlvdSBjYW4ndCBzZW5kIHRoZSBkYXRh
IDotPgorCSAqLworCisJLyogbm93IGZyZWUgZXZlcnl0aGluZyAqLworCXNjdHBfbV9mcmVlbShj
YS0+bSk7CisJU0NUUF9GUkVFKGNhLCBTQ1RQX01fQ09QWUFMKTsKK30KKworc3RhdGljIHN0cnVj
dCBtYnVmICoKK3NjdHBfY29weV9vdXRfYWxsKHN0cnVjdCB1aW8gKnVpbywgaW50IGxlbikKK3sK
KwlzdHJ1Y3QgbWJ1ZiAqcmV0LCAqYXQ7CisJaW50IGxlZnQsIHdpbGxjcHksIGNhbmNweSwgZXJy
b3I7CisKKwlyZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fV0FJVE9L
LCAxLCBNVF9EQVRBKTsKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJLyogVFNOSCAqLworCQlyZXR1
cm4gKE5VTEwpOworCX0KKwlsZWZ0ID0gbGVuOworCVNDVFBfQlVGX0xFTihyZXQpID0gMDsKKwkv
KiBzYXZlIHNwYWNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgKi8KKwljYW5jcHkgPSAoaW50
KU1fVFJBSUxJTkdTUEFDRShyZXQpOworCXdpbGxjcHkgPSBtaW4oY2FuY3B5LCBsZWZ0KTsKKwlh
dCA9IHJldDsKKwl3aGlsZSAobGVmdCA+IDApIHsKKwkJLyogQWxpZ24gZGF0YSB0byB0aGUgZW5k
ICovCisJCWVycm9yID0gdWlvbW92ZShtdG9kKGF0LCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsK
KwkJaWYgKGVycm9yKSB7CisJZXJyX291dF9ub3c6CisJCQlzY3RwX21fZnJlZW0oYXQpOworCQkJ
cmV0dXJuIChOVUxMKTsKKwkJfQorCQlTQ1RQX0JVRl9MRU4oYXQpID0gd2lsbGNweTsKKwkJU0NU
UF9CVUZfTkVYVF9QS1QoYXQpID0gU0NUUF9CVUZfTkVYVChhdCkgPSAwOworCQlsZWZ0IC09IHdp
bGxjcHk7CisJCWlmIChsZWZ0ID4gMCkgeworCQkJU0NUUF9CVUZfTkVYVChhdCkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOworCQkJaWYgKFND
VFBfQlVGX05FWFQoYXQpID09IE5VTEwpIHsKKwkJCQlnb3RvIGVycl9vdXRfbm93OworCQkJfQor
CQkJYXQgPSBTQ1RQX0JVRl9ORVhUKGF0KTsKKwkJCVNDVFBfQlVGX0xFTihhdCkgPSAwOworCQkJ
Y2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UoYXQpOworCQkJd2lsbGNweSA9IG1pbihjYW5j
cHksIGxlZnQpOworCQl9CisJfQorCXJldHVybiAocmV0KTsKK30KKworc3RhdGljIGludAorc2N0
cF9zZW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCB1aW8gKnVpbywgc3RydWN0
IG1idWYgKm0sCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3JjdikKK3sKKwlpbnQgcmV0
OworCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKKworCVNDVFBfTUFMTE9DKGNhLCBzdHJ1Y3Qg
c2N0cF9jb3B5X2FsbCAqLCBzaXplb2Yoc3RydWN0IHNjdHBfY29weV9hbGwpLAorCQkgICAgU0NU
UF9NX0NPUFlBTCk7CisJaWYgKGNhID09IE5VTEwpIHsKKwkJc2N0cF9tX2ZyZWVtKG0pOworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVU
LCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNldChjYSwgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2NvcHlfYWxsKSk7CisKKwljYS0+aW5wID0gaW5wOworCWlmIChzcmN2KSB7
CisJCW1lbWNweSgmY2EtPnNuZHJjdiwgc3Jjdiwgc2l6ZW9mKHN0cnVjdCBzY3RwX25vbnBhZF9z
bmRyY3ZpbmZvKSk7CisJfQorCS8qCisJICogdGFrZSBvZmYgdGhlIHNlbmRhbGwgZmxhZywgaXQg
d291bGQgYmUgYmFkIGlmIHdlIGZhaWxlZCB0byBkbworCSAqIHRoaXMgOi0wCisJICovCisJY2Et
PnNuZHJjdi5zaW5mb19mbGFncyAmPSB+U0NUUF9TRU5EQUxMOworCS8qIGdldCBsZW5ndGggYW5k
IG1idWYgY2hhaW4gKi8KKwlpZiAodWlvKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQljYS0+c25kbGVuID0gdWlvLT51aW9fcmVzaWQ7Cisj
ZWxzZQorCQljYS0+c25kbGVuID0gdWlvX3Jlc2lkKHVpbyk7CisjZW5kaWYKKyNlbHNlCisJCWNh
LT5zbmRsZW4gPSAoaW50KXVpby0+dWlvX3Jlc2lkOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisJCVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lOUF9TTyhpbnApLCAwKTsKKyNlbmRp
ZgorCQljYS0+bSA9IHNjdHBfY29weV9vdXRfYWxsKHVpbywgY2EtPnNuZGxlbik7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5wKSwgMCk7
CisjZW5kaWYKKwkJaWYgKGNhLT5tID09IE5VTEwpIHsKKwkJCVNDVFBfRlJFRShjYSwgU0NUUF9N
X0NPUFlBTCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJfSBl
bHNlIHsKKwkJLyogR2F0aGVyIHRoZSBsZW5ndGggb2YgdGhlIHNlbmQgKi8KKwkJc3RydWN0IG1i
dWYgKm1hdDsKKworCQljYS0+c25kbGVuID0gMDsKKwkJZm9yIChtYXQgPSBtOyBtYXQ7IG1hdCA9
IFNDVFBfQlVGX05FWFQobWF0KSkgeworCQkJY2EtPnNuZGxlbiArPSBTQ1RQX0JVRl9MRU4obWF0
KTsKKwkJfQorCX0KKwlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKE5VTEwsIHNjdHBfc2Vu
ZGFsbF9pdGVyYXRvciwgTlVMTCwKKwkJCQkgICAgIFNDVFBfUENCX0FOWV9GTEFHUywgU0NUUF9Q
Q0JfQU5ZX0ZFQVRVUkVTLAorCQkJCSAgICAgU0NUUF9BU09DX0FOWV9TVEFURSwKKwkJCQkgICAg
ICh2b2lkICopY2EsIDAsCisJCQkJICAgICBzY3RwX3NlbmRhbGxfY29tcGxldGVzLCBpbnAsIDEp
OworCWlmIChyZXQpIHsKKwkJU0NUUF9QUklOVEYoIkZhaWxlZCB0byBpbml0aWF0ZSBpdGVyYXRv
ciBmb3Igc2VuZGFsbFxuIik7CisJCVNDVFBfRlJFRShjYSwgU0NUUF9NX0NPUFlBTCk7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFRkFVTFQpOworCQlyZXR1cm4gKEVGQVVMVCk7CisJfQorCXJldHVybiAoMCk7Cit9
CisKKwordm9pZAorc2N0cF90b3NzX29sZF9jb29raWVzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrLCAqbmNoazsKKworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5jb250cm9s
X3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQu
aWQgPT0gU0NUUF9DT09LSUVfRUNITykgeworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9s
X3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJCWFzb2MtPmN0cmxfcXVldWVfY250LS07
CisJCQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCQkJ
Y2hrLT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQorCX0KK30KKwordm9pZAorc2N0cF90b3NzX29sZF9h
c2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisJc3RydWN0IHNj
dHBfYXNjb25mX2NodW5rICphY3A7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJVEFJTFFfRk9S
RUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGsp
IHsKKwkJLyogZmluZCBTQ1RQX0FTQ09ORiBjaHVuayBpbiBxdWV1ZSAqLworCQlpZiAoY2hrLT5y
ZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpIHsKKwkJCWlmIChjaGstPmRhdGEpIHsKKwkJ
CQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICopOworCQkJ
CWlmIChTQ1RQX1RTTl9HVChudG9obChhY3AtPnNlcmlhbF9udW1iZXIpLCBhc29jLT5hc2NvbmZf
c2VxX291dF9hY2tlZCkpIHsKKwkJCQkJLyogTm90IEFja2VkIHlldCAqLworCQkJCQlicmVhazsK
KwkJCQl9CisJCQl9CisJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBj
aGssIHNjdHBfbmV4dCk7CisJCQlhc29jLT5jdHJsX3F1ZXVlX2NudC0tOworCQkJaWYgKGNoay0+
ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5V
TEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfY2xlYW5fdXBfZGF0YWxp
c3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipkYXRhX2xpc3QsCisgICAgaW50IGJ1
bmRsZV9hdCwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaW50IGk7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCisJZm9yIChpID0gMDsgaSA8IGJ1bmRsZV9hdDsgaSsr
KSB7CisJCS8qIG9mZiBvZiB0aGUgc2VuZCBxdWV1ZSAqLworCQlUQUlMUV9SRU1PVkUoJmFzb2Mt
PnNlbmRfcXVldWUsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKKwkJYXNvYy0+c2VuZF9xdWV1
ZV9jbnQtLTsKKwkJaWYgKGkgPiAwKSB7CisJCQkvKgorCQkJICogQW55IGNodW5rIE5PVCAwIHlv
dSB6YXAgdGhlIHRpbWUgY2h1bmsgMCBnZXRzCisJCQkgKiB6YXBwZWQgb3Igc2V0IGJhc2VkIG9u
IGlmIGEgUlRPIG1lYXN1cm1lbnQgaXMKKwkJCSAqIG5lZWRlZC4KKwkJCSAqLworCQkJZGF0YV9s
aXN0W2ldLT5kb19ydHQgPSAwOworCQl9CisJCS8qIHJlY29yZCB0aW1lICovCisJCWRhdGFfbGlz
dFtpXS0+c2VudF9yY3ZfdGltZSA9IG5ldC0+bGFzdF9zZW50X3RpbWU7CisJCWRhdGFfbGlzdFtp
XS0+cmVjLmRhdGEuY3duZF9hdF9zZW5kID0gbmV0LT5jd25kOworCQlkYXRhX2xpc3RbaV0tPnJl
Yy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuOworCQlp
ZiAoZGF0YV9saXN0W2ldLT53aG9UbyA9PSBOVUxMKSB7CisJCQlkYXRhX2xpc3RbaV0tPndob1Rv
ID0gbmV0OworCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKKwkJfQorCQkv
KiBvbiB0byB0aGUgc2VudCBxdWV1ZSAqLworCQl0cDEgPSBUQUlMUV9MQVNUKCZhc29jLT5zZW50
X3F1ZXVlLCBzY3RwY2h1bmtfbGlzdGhlYWQpOworCQlpZiAoKHRwMSkgJiYgU0NUUF9UU05fR1Qo
dHAxLT5yZWMuZGF0YS50c24sIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuKSkgeworCQkJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqdHBwOworCisJCQkvKiBuZWVkIHRvIG1vdmUgYmFjayAqLwor
CQliYWNrX3VwX21vcmU6CisJCQl0cHAgPSBUQUlMUV9QUkVWKHRwMSwgc2N0cGNodW5rX2xpc3Ro
ZWFkLCBzY3RwX25leHQpOworCQkJaWYgKHRwcCA9PSBOVUxMKSB7CisJCQkJVEFJTFFfSU5TRVJU
X0JFRk9SRSh0cDEsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKKwkJCQlnb3RvIGFsbF9kb25l
OworCQkJfQorCQkJdHAxID0gdHBwOworCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEu
dHNuLCBkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLnRzbikpIHsKKwkJCQlnb3RvIGJhY2tfdXBfbW9y
ZTsKKwkJCX0KKwkJCVRBSUxRX0lOU0VSVF9BRlRFUigmYXNvYy0+c2VudF9xdWV1ZSwgdHAxLCBk
YXRhX2xpc3RbaV0sIHNjdHBfbmV4dCk7CisJCX0gZWxzZSB7CisJCQlUQUlMUV9JTlNFUlRfVEFJ
TCgmYXNvYy0+c2VudF9xdWV1ZSwKKwkJCQkJICBkYXRhX2xpc3RbaV0sCisJCQkJCSAgc2N0cF9u
ZXh0KTsKKwkJfQorCWFsbF9kb25lOgorCQkvKiBUaGlzIGRvZXMgbm90IGxvd2VyIHVudGlsIHRo
ZSBjdW0tYWNrIHBhc3NlcyBpdCAqLworCQlhc29jLT5zZW50X3F1ZXVlX2NudCsrOworCQlpZiAo
KGFzb2MtPnBlZXJzX3J3bmQgPD0gMCkgJiYKKwkJICAgIChhc29jLT50b3RhbF9mbGlnaHQgPT0g
MCkgJiYKKwkJICAgIChidW5kbGVfYXQgPT0gMSkpIHsKKwkJCS8qIE1hcmsgdGhlIGNodW5rIGFz
IGJlaW5nIGEgd2luZG93IHByb2JlICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc193aW5kb3dw
cm9iZWQpOworCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRf
bG9nKDB4QzIsIDMpOworI2VuZGlmCisJCWRhdGFfbGlzdFtpXS0+c2VudCA9IFNDVFBfREFUQUdS
QU1fU0VOVDsKKwkJZGF0YV9saXN0W2ldLT5zbmRfY291bnQgPSAxOworCQlkYXRhX2xpc3RbaV0t
PnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlz
Y3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVAsCisJCQkJICAgICAgIGRhdGFfbGlzdFtp
XS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPmJvb2tfc2l6
ZSwKKwkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpZGF0YV9saXN0W2ldLT53aG9UbywK
KwkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOworCQl9CisJCXNjdHBfZmxp
Z2h0X3NpemVfaW5jcmVhc2UoZGF0YV9saXN0W2ldKTsKKwkJc2N0cF90b3RhbF9mbGlnaHRfaW5j
cmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19yd25k
KFNDVFBfREVDUkVBU0VfUEVFUl9SV05ELAorCQkJICAgICAgYXNvYy0+cGVlcnNfcnduZCwgZGF0
YV9saXN0W2ldLT5zZW5kX3NpemUsIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29o
KSk7CisJCX0KKwkJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIoYXNvYy0+cGVl
cnNfcnduZCwKKwkJCQkJCSAgICAodWludDMyX3QpIChkYXRhX2xpc3RbaV0tPnNlbmRfc2l6ZSAr
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkpOworCQlpZiAoYXNvYy0+cGVl
cnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJCQkv
KiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJYXNvYy0+cGVlcnNfcnduZCA9IDA7CisJ
CX0KKwl9CisJaWYgKGFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90
cmFuc21pdHRlZCkgeworCQkoKmFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Bh
Y2tldF90cmFuc21pdHRlZCkoc3RjYiwgbmV0KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3Rw
X2NsZWFuX3VwX2N0bChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1VOVVNFRAorI2VuZGlmCispCit7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKworCVRBSUxRX0ZPUkVBQ0hfU0FG
RShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlp
ZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwKKwkJICAg
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spIHx8CS8qIEVZ
ICovCisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9IRUFSVEJFQVRfUkVRVUVT
VCkgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVBVF9BQ0sp
IHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04p
IHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TSFVURE9XTikgfHwKKwkJ
ICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOX0FDSykgfHwKKwkJICAg
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElPTl9FUlJPUikgfHwKKwkJICAg
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1BBQ0tFVF9EUk9QUEVEKSB8fAorCQkgICAg
KGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0FDSykgfHwKKwkJICAgIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9DV1IpIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1
bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkZfQUNLKSkgeworCQkJLyogU3RyYXkgY2h1bmtzIG11c3Qg
YmUgY2xlYW5lZCB1cCAqLworCWNsZWFuX3VwX2FueXdheToKKwkJCVRBSUxRX1JFTU9WRSgmYXNv
Yy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCQlhc29jLT5jdHJsX3F1
ZXVlX2NudC0tOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRh
dGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAoY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pIHsKKwkJCQlhc29jLT5md2RfdHNuX2NudC0t
OworCQkJfQorCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQl9
IGVsc2UgaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU1RSRUFNX1JFU0VUKSB7CisJ
CQkvKiBzcGVjaWFsIGhhbmRsaW5nLCB3ZSBtdXN0IGxvb2sgaW50byB0aGUgcGFyYW0gKi8KKwkJ
CWlmIChjaGsgIT0gYXNvYy0+c3RyX3Jlc2V0KSB7CisJCQkJZ290byBjbGVhbl91cF9hbnl3YXk7
CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9jYW5fd2Vfc3BsaXRf
dGhpcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGxlbmd0aCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3Qgc3BhY2VfbGVmdCwgdWludDMyX3QgZnJhZ19wb2ludCwgaW50
IGVlb3Jfb24pCit7CisJLyogTWFrZSBhIGRlY2lzaW9uIG9uIGlmIEkgc2hvdWxkIHNwbGl0IGEK
KwkgKiBtc2cgaW50byBtdWx0aXBsZSBwYXJ0cy4gVGhpcyBpcyBvbmx5IGFza2VkIG9mCisJICog
aW5jb21wbGV0ZSBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoZWVvcl9vbikgeworCQkvKiBJZiB3ZSBh
cmUgZG9pbmcgRUVPUiB3ZSBuZWVkIHRvIGFsd2F5cyBzZW5kCisJCSAqIGl0IGlmIGl0cyB0aGUg
ZW50aXJlIHRoaW5nLCBzaW5jZSBpdCBtaWdodAorCQkgKiBiZSBhbGwgdGhlIGd1eSBpcyBwdXR0
aW5nIGluIHRoZSBob3BwZXIuCisJCSAqLworCQlpZiAoc3BhY2VfbGVmdCA+PSBsZW5ndGgpIHsK
KwkJCS8qLQorCQkJICogSWYgd2UgaGF2ZSBkYXRhIG91dHN0YW5kaW5nLAorCQkJICogd2UgZ2V0
IGFub3RoZXIgY2hhbmNlIHdoZW4gdGhlIHNhY2sKKwkJCSAqIGFycml2ZXMgdG8gdHJhbnNtaXQg
LSB3YWl0IGZvciBtb3JlIGRhdGEKKwkJCSAqLworCQkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0ID09IDApIHsKKwkJCQkvKiBJZiBub3RoaW5nIGlzIGluIGZsaWdodCwgd2UgemVybworCQkJ
CSAqIHRoZSBwYWNrZXQgY291bnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1cm4gKGxlbmd0aCk7CisJ
CQl9CisJCQlyZXR1cm4gKDApOworCisJCX0gZWxzZSB7CisJCQkvKiBZb3UgY2FuIGZpbGwgdGhl
IHJlc3QgKi8KKwkJCXJldHVybiAoc3BhY2VfbGVmdCk7CisJCX0KKwl9CisJLyotCisJICogRm9y
IHRob3NlIHN0cmFuZ2UgZm9sayB0aGF0IG1ha2UgdGhlIHNlbmQgYnVmZmVyCisJICogc21hbGxl
ciB0aGFuIG91ciBmcmFnbWVudGF0aW9uIHBvaW50LCB3ZSBjYW4ndAorCSAqIGdldCBhIGZ1bGwg
bXNnIGluIHNvIHdlIGhhdmUgdG8gYWxsb3cgc3BsaXR0aW5nLgorCSAqLworCWlmIChTQ1RQX1NC
X0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkgPCBmcmFnX3BvaW50KSB7CisJCXJldHVybiAo
bGVuZ3RoKTsKKwl9CisJaWYgKChsZW5ndGggPD0gc3BhY2VfbGVmdCkgfHwKKwkgICAgKChsZW5n
dGggLSBzcGFjZV9sZWZ0KSA8IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fcmVzaWR1YWwpKSkg
eworCQkvKiBTdWItb3B0aW1pYWwgcmVzaWR1YWwgZG9uJ3Qgc3BsaXQgaW4gbm9uLWVlb3IgbW9k
ZS4gKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJLyogSWYgd2UgcmVhY2ggaGVyZSBsZW5ndGggaXMg
bGFyZ2VyCisJICogdGhhbiB0aGUgc3BhY2VfbGVmdC4gRG8gd2Ugd2lzaCB0byBzcGxpdAorCSAq
IGl0IGZvciB0aGUgc2FrZSBvZiBwYWNrZXQgcHV0dGluZyB0b2dldGhlcj8KKwkgKi8KKwlpZiAo
c3BhY2VfbGVmdCA+PSBtaW4oU0NUUF9CQVNFX1NZU0NUTChzY3RwX21pbl9zcGxpdF9wb2ludCks
IGZyYWdfcG9pbnQpKSB7CisJCS8qIEl0cyBvayB0byBzcGxpdCBpdCAqLworCQlyZXR1cm4gKG1p
bihzcGFjZV9sZWZ0LCBmcmFnX3BvaW50KSk7CisJfQorCS8qIE5vcGUsIGNhbid0IHNwbGl0ICov
CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVpbnQzMl90CitzY3RwX21vdmVfdG9fb3V0cXVl
dWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3Bh
Y2VfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBmcmFnX3BvaW50LAorICAg
ICAgICAgICAgICAgICAgICAgIGludCAqZ2l2ZXVwLAorICAgICAgICAgICAgICAgICAgICAgIGlu
dCBlZW9yX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpiYWlsLAorICAgICAgICAg
ICAgICAgICAgICAgIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
VU5VU0VECisjZW5kaWYKKwkpCit7CisJLyogTW92ZSBmcm9tIHRoZSBzdHJlYW0gdG8gdGhlIHNl
bmRfcXVldWUga2VlcGluZyB0cmFjayBvZiB0aGUgdG90YWwgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2RhdGFfY2h1bmsgKmRj
aGtoPU5VTEw7CisJc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKm5kY2hraD1OVUxMOworCXVpbnQz
Ml90IHRvX21vdmUsIGxlbmd0aDsKKwlpbnQgbGVhZGluZzsKKwl1aW50OF90IHJjdl9mbGFncyA9
IDA7CisJdWludDhfdCBzb21lX3Rha2VuOworCXVpbnQ4X3Qgc2VuZF9sb2NrX3VwID0gMDsKKwor
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWFzb2MgPSAmc3RjYi0+YXNvYzsKK29uZV9t
b3JlX3RpbWU6CisJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwlzcCA9IFRBSUxRX0ZJUlNU
KCZzdHJxLT5vdXRxdWV1ZSk7CisJaWYgKHNwID09IE5VTEwpIHsKKwkJaWYgKHNlbmRfbG9ja191
cCA9PSAwKSB7CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlzZW5kX2xvY2tfdXAg
PSAxOworCQl9CisJCXNwID0gVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKTsKKwkJaWYgKHNw
KSB7CisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0KKwkJaWYgKChzY3RwX2lzX2ZlYXR1cmVf
b24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKSA9PSAwKSAmJgor
CQkgICAgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApICYmCisJCSAgICAoc3RycS0+
bGFzdF9tc2dfaW5jb21wbGV0ZSkpIHsKKwkJCVNDVFBfUFJJTlRGKCJIdWg/IFN0cmVhbTolZCBs
bV9pbl9jPSVkIGJ1dCBxdWV1ZSBpcyBOVUxMXG4iLAorCQkJICAgICAgICAgICAgc3RycS0+c2lk
LAorCQkJICAgICAgICAgICAgc3RycS0+bGFzdF9tc2dfaW5jb21wbGV0ZSk7CisJCQlzdHJxLT5s
YXN0X21zZ19pbmNvbXBsZXRlID0gMDsKKwkJfQorCQl0b19tb3ZlID0gMDsKKwkJaWYgKHNlbmRf
bG9ja191cCkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlzZW5kX2xvY2tf
dXAgPSAwOworCQl9CisJCWdvdG8gb3V0X29mOworCX0KKwlpZiAoKHNwLT5tc2dfaXNfY29tcGxl
dGUpICYmIChzcC0+bGVuZ3RoID09IDApKSB7CisJCWlmIChzcC0+c2VuZGVyX2FsbF9kb25lKSB7
CisJCQkvKiBXZSBhcmUgZG9pbmcgZGlmZmVyZWQgY2xlYW51cC4gTGFzdAorCQkJICogdGltZSB0
aHJvdWdoIHdoZW4gd2UgdG9vayBhbGwgdGhlIGRhdGEKKwkJCSAqIHRoZSBzZW5kZXJfYWxsX2Rv
bmUgd2FzIG5vdCBzZXQuCisJCQkgKi8KKwkJCWlmICgoc3AtPnB1dF9sYXN0X291dCA9PSAwKSAm
JiAoc3AtPmRpc2NhcmRfcmVzdCA9PSAwKSkgeworCQkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBv
dXQgZW50aXJlIG1zZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJU0NUUF9QUklOVEYoInNlbmRl
cl9kb25lOiVkIGxlbjolZCBtc2dfY29tcDolZCBwdXRfbGFzdF9vdXQ6JWQgc2VuZF9sb2NrOiVk
XG4iLAorCQkJCSAgICAgICAgICAgIHNwLT5zZW5kZXJfYWxsX2RvbmUsCisJCQkJICAgICAgICAg
ICAgc3AtPmxlbmd0aCwKKwkJCQkgICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAorCQkJ
CSAgICAgICAgICAgIHNwLT5wdXRfbGFzdF9vdXQsCisJCQkJICAgICAgICAgICAgc2VuZF9sb2Nr
X3VwKTsKKwkJCX0KKwkJCWlmICgoVEFJTFFfTkVYVChzcCwgbmV4dCkgPT0gTlVMTCkgJiYgKHNl
bmRfbG9ja191cCAgPT0gMCkpIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJ
c2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFzb2MtPnN0
cmVhbV9xdWV1ZV9jbnQsIDEpOworCQkJVEFJTFFfUkVNT1ZFKCZzdHJxLT5vdXRxdWV1ZSwgc3As
IG5leHQpOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9z
dHJlYW0oc3RjYiwgYXNvYywgc3RycSwgc3AsIHNlbmRfbG9ja191cCk7CisJCQlpZiAoKHN0cnEt
PnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCisJCQkgICAgKHN0cnEtPmNo
dW5rc19vbl9xdWV1ZXMgPT0gMCkgJiYKKwkJCSAgICBUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVl
dWUpKSB7CisJCQkJc3RjYi0+YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsKKwkJCX0KKwkJCWlmIChz
cC0+bmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCXNwLT5u
ZXQgPSBOVUxMOworCQkJfQorCQkJaWYgKHNwLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKHNw
LT5kYXRhKTsKKwkJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfYV9zdHJt
b3Eoc3RjYiwgc3AsIHNvX2xvY2tlZCk7CisJCQkvKiB3ZSBjYW4ndCBiZSBsb2NrZWQgdG8gaXQg
Ki8KKwkJCWlmIChzZW5kX2xvY2tfdXApIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNi
KTsKKwkJCQlzZW5kX2xvY2tfdXAgPSAwOworCQkJfQorCQkJLyogYmFjayB0byBnZXQgdGhlIG5l
eHQgbXNnICovCisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0gZWxzZSB7CisJCQkvKiBzZW5k
ZXIganVzdCBmaW5pc2hlZCB0aGlzIGJ1dAorCQkJICogc3RpbGwgaG9sZHMgYSByZWZlcmVuY2UK
KwkJCSAqLworCQkJKmdpdmV1cCA9IDE7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29m
OworCQl9CisJfSBlbHNlIHsKKwkJLyogaXMgdGhlcmUgc29tZSB0byBnZXQgKi8KKwkJaWYgKHNw
LT5sZW5ndGggPT0gMCkgeworCQkJLyogbm8gKi8KKwkJCSpnaXZldXAgPSAxOworCQkJdG9fbW92
ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfSBlbHNlIGlmIChzcC0+ZGlzY2FyZF9yZXN0KSB7
CisJCQlpZiAoc2VuZF9sb2NrX3VwID09IDApIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3Rj
Yik7CisJCQkJc2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCS8qIFdoYWNrIGRvd24gdGhlIHNp
emUgKi8KKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUsIHNwLT5sZW5ndGgpOworCQkJaWYgKChzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxM
KSAmJgorCQkJICAgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJCQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkpKSB7CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYywgc3AtPmxlbmd0aCk7CisJCQl9CisJCQlpZiAoc3At
PmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOworCQkJCXNwLT5kYXRhID0gTlVM
TDsKKwkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCX0KKwkJCXNwLT5sZW5ndGggPSAwOwor
CQkJc3AtPnNvbWVfdGFrZW4gPSAxOworCQkJKmdpdmV1cCA9IDE7CisJCQl0b19tb3ZlID0gMDsK
KwkJCWdvdG8gb3V0X29mOworCQl9CisJfQorCXNvbWVfdGFrZW4gPSBzcC0+c29tZV90YWtlbjsK
K3JlX2xvb2s6CisJbGVuZ3RoID0gc3AtPmxlbmd0aDsKKwlpZiAoc3AtPm1zZ19pc19jb21wbGV0
ZSkgeworCQkvKiBUaGUgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLworCQl0b19tb3ZlID0gbWluKGxl
bmd0aCwgZnJhZ19wb2ludCk7CisJCWlmICh0b19tb3ZlID09IGxlbmd0aCkgeworCQkJLyogQWxs
IG9mIGl0IGZpdHMgaW4gdGhlIE1UVSAqLworCQkJaWYgKHNwLT5zb21lX3Rha2VuKSB7CisJCQkJ
cmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9MQVNUX0ZSQUc7CisJCQl9IGVsc2UgeworCQkJCXJjdl9m
bGFncyB8PSBTQ1RQX0RBVEFfTk9UX0ZSQUc7CisJCQl9CisJCQlzcC0+cHV0X2xhc3Rfb3V0ID0g
MTsKKwkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1NBQ0tfSU1NRURJQVRFTFkpIHsKKwkJ
CQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkvKiBOb3QgYWxsIG9mIGl0IGZpdHMsIHdlIGZyYWdtZW50ICovCisJCQlpZiAoc3At
PnNvbWVfdGFrZW4gPT0gMCkgeworCQkJCXJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfRklSU1RfRlJB
RzsKKwkJCX0KKwkJCXNwLT5zb21lX3Rha2VuID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCXRvX21v
dmUgPSBzY3RwX2Nhbl93ZV9zcGxpdF90aGlzKHN0Y2IsIGxlbmd0aCwgc3BhY2VfbGVmdCwgZnJh
Z19wb2ludCwgZWVvcl9tb2RlKTsKKwkJaWYgKHRvX21vdmUpIHsKKwkJCS8qLQorCQkJICogV2Ug
dXNlIGEgc25hcHNob3Qgb2YgbGVuZ3RoIGluIGNhc2UgaXQKKwkJCSAqIGlzIGV4cGFuZGluZyBk
dXJpbmcgdGhlIGNvbXBhcmUuCisJCQkgKi8KKwkJCXVpbnQzMl90IGxsZW47CisKKwkJCWxsZW4g
PSBsZW5ndGg7CisJCQlpZiAodG9fbW92ZSA+PSBsbGVuKSB7CisJCQkJdG9fbW92ZSA9IGxsZW47
CisJCQkJaWYgKHNlbmRfbG9ja191cCA9PSAwKSB7CisJCQkJCS8qLQorCQkJCQkgKiBXZSBhcmUg
dGFraW5nIGFsbCBvZiBhbiBpbmNvbXBsZXRlIG1zZworCQkJCQkgKiB0aHVzIHdlIG5lZWQgYSBz
ZW5kIGxvY2suCisJCQkJCSAqLworCQkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQkJ
CXNlbmRfbG9ja191cCA9IDE7CisJCQkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlKSB7CisJCQkJ
CQkvKiB0aGUgc2VuZGVyIGZpbmlzaGVkIHRoZSBtc2cgKi8KKwkJCQkJCWdvdG8gcmVfbG9vazsK
KwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChzcC0+c29tZV90YWtlbiA9PSAwKSB7CisJCQkJ
cmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9GSVJTVF9GUkFHOworCQkJCXNwLT5zb21lX3Rha2VuID0g
MTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIE5vdGhpbmcgdG8gdGFrZS4gKi8KKwkJCSpnaXZl
dXAgPSAxOworCQkJdG9fbW92ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfQorCX0KKworCS8q
IElmIHdlIHJlYWNoIGhlcmUsIHdlIGNhbiBjb3B5IG91dCBhIGNodW5rICovCisJc2N0cF9hbGxv
Y19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCS8qIE5vIGNodW5r
IG1lbW9yeSAqLworCQkqZ2l2ZXVwID0gMTsKKwkJdG9fbW92ZSA9IDA7CisJCWdvdG8gb3V0X29m
OworCX0KKwkvKiBTZXR1cCBmb3IgdW5vcmRlcmVkIGlmIG5lZWRlZCBieSBsb29raW5nCisJICog
YXQgdGhlIHVzZXIgc2VudCBpbmZvIGZsYWdzLgorCSAqLworCWlmIChzcC0+c2luZm9fZmxhZ3Mg
JiBTQ1RQX1VOT1JERVJFRCkgeworCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1VOT1JERVJFRDsK
Kwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSkg
JiYKKwkgICAgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSA9PSBTQ1RQX0VPRikgeworCQly
Y3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7CisJfQorCS8qIGNsZWFyIG91
dCB0aGUgY2h1bmsgYmVmb3JlIHNldHRpbmcgdXAgKi8KKwltZW1zZXQoY2hrLCAwLCBzaXplb2Yo
KmNoaykpOworCWNoay0+cmVjLmRhdGEucmN2X2ZsYWdzID0gcmN2X2ZsYWdzOworCisJaWYgKHRv
X21vdmUgPj0gbGVuZ3RoKSB7CisJCS8qIHdlIHRoaW5rIHdlIGNhbiBzdGVhbCB0aGUgd2hvbGUg
dGhpbmcgKi8KKwkJaWYgKChzcC0+c2VuZGVyX2FsbF9kb25lID09IDApICYmIChzZW5kX2xvY2tf
dXAgPT0gMCkpIHsKKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJCXNlbmRfbG9ja191
cCA9IDE7CisJCX0KKwkJaWYgKHRvX21vdmUgPCBzcC0+bGVuZ3RoKSB7CisJCQkvKiBiYWlsLCBp
dCBjaGFuZ2VkICovCisJCQlnb3RvIGRvbnRfZG9faXQ7CisJCX0KKwkJY2hrLT5kYXRhID0gc3At
PmRhdGE7CisJCWNoay0+bGFzdF9tYnVmID0gc3AtPnRhaWxfbWJ1ZjsKKwkJLyogcmVnaXN0ZXIg
dGhlIHN0ZWFsaW5nICovCisJCXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7CisJfSBl
bHNlIHsKKwkJc3RydWN0IG1idWYgKm07CisJZG9udF9kb19pdDoKKwkJY2hrLT5kYXRhID0gU0NU
UF9NX0NPUFlNKHNwLT5kYXRhLCAwLCB0b19tb3ZlLCBNX05PV0FJVCk7CisJCWNoay0+bGFzdF9t
YnVmID0gTlVMTDsKKwkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCQlzcC0+c29tZV90YWtl
biA9IHNvbWVfdGFrZW47CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tl
ZCk7CisJCQkqYmFpbCA9IDE7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29mOworCQl9
CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2df
bWJjKGNoay0+ZGF0YSwgU0NUUF9NQlVGX0lDT1BZKTsKKwkJfQorI2VuZGlmCisJCS8qIFB1bGwg
b2ZmIHRoZSBkYXRhICovCisJCW1fYWRqKHNwLT5kYXRhLCB0b19tb3ZlKTsKKwkJLyogTm93IGxl
dHMgd29yayBvdXIgd2F5IGRvd24gYW5kIGNvbXBhY3QgaXQgKi8KKwkJbSA9IHNwLT5kYXRhOwor
CQl3aGlsZSAobSAmJiAoU0NUUF9CVUZfTEVOKG0pID09IDApKSB7CisJCQlzcC0+ZGF0YSAgPSBT
Q1RQX0JVRl9ORVhUKG0pOworCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7CisJCQlpZiAoc3At
PnRhaWxfbWJ1ZiA9PSBtKSB7CisJCQkJLyotCisJCQkJICogRnJlZWluZyB0YWlsPyBUU05IIHNp
bmNlCisJCQkJICogd2Ugc3VwcG9zZWRseSB3ZXJlIHRha2luZyBsZXNzCisJCQkJICogdGhhbiB0
aGUgc3AtPmxlbmd0aC4KKwkJCQkgKi8KKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJcGFuaWMoIkh1
aCwgZnJlaW5nIHRhaWw/IC0gVFNOSCIpOworI2Vsc2UKKwkJCQlTQ1RQX1BSSU5URigiSHVoLCBm
cmVlaW5nIHRhaWw/IC0gVFNOSFxuIik7CisJCQkJc3AtPnRhaWxfbWJ1ZiA9IHNwLT5kYXRhID0g
TlVMTDsKKwkJCQlzcC0+bGVuZ3RoID0gMDsKKyNlbmRpZgorCisJCQl9CisJCQlzY3RwX21fZnJl
ZShtKTsKKwkJCW0gPSBzcC0+ZGF0YTsKKwkJfQorCX0KKwlpZiAoU0NUUF9CVUZfSVNfRVhURU5E
RUQoY2hrLT5kYXRhKSkgeworCQljaGstPmNvcHlfYnlfcmVmID0gMTsKKwl9IGVsc2UgeworCQlj
aGstPmNvcHlfYnlfcmVmID0gMDsKKwl9CisJLyogZ2V0IGxhc3RfbWJ1ZiBhbmQgY291bnRzIG9m
IG1iIHVzYWdlCisJICogVGhpcyBpcyB1Z2x5IGJ1dCBob3BlZnVsbHkgaXRzIG9ubHkgb25lIG1i
dWYuCisJICovCisJaWYgKGNoay0+bGFzdF9tYnVmID09IE5VTEwpIHsKKwkJY2hrLT5sYXN0X21i
dWYgPSBjaGstPmRhdGE7CisJCXdoaWxlIChTQ1RQX0JVRl9ORVhUKGNoay0+bGFzdF9tYnVmKSAh
PSBOVUxMKSB7CisJCQljaGstPmxhc3RfbWJ1ZiA9IFNDVFBfQlVGX05FWFQoY2hrLT5sYXN0X21i
dWYpOworCQl9CisJfQorCisJaWYgKHRvX21vdmUgPiBsZW5ndGgpIHsKKwkJLyotIFRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gZWl0aGVyCisJCSAqIHNpbmNlIHdlIGFsd2F5cyBsb3dlciB0b19tb3Zl
IHRvIHRoZSBzaXplCisJCSAqIG9mIHNwLT5sZW5ndGggaWYgaXRzIGxhcmdlci4KKwkJICovCisj
aWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiSHVoLCBob3cgY2FuIHRvX21vdmUgYmUgbGFyZ2Vy
PyIpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoIkh1aCwgaG93IGNhbiB0b19tb3ZlIGJlIGxhcmdl
cj9cbiIpOworCQlzcC0+bGVuZ3RoID0gMDsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWF0b21pY19z
dWJ0cmFjdF9pbnQoJnNwLT5sZW5ndGgsIHRvX21vdmUpOworCX0KKwlsZWFkaW5nID0gU0NUUF9E
QVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpOworCWlmIChNX0xFQURJTkdTUEFDRShjaGstPmRhdGEp
IDwgbGVhZGluZykgeworCQkvKiBOb3QgZW5vdWdoIHJvb20gZm9yIGEgY2h1bmsgaGVhZGVyLCBn
ZXQgc29tZSAqLworCQlzdHJ1Y3QgbWJ1ZiAqbTsKKworCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKDEsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJaWYgKG0gPT0gTlVMTCkgeworCQkJ
LyoKKwkJCSAqIHdlJ3JlIGluIHRyb3VibGUgaGVyZS4gX1BSRVBFTkQgYmVsb3cgd2lsbCBmcmVl
CisJCQkgKiBhbGwgdGhlIGRhdGEgaWYgdGhlcmUgaXMgbm8gbGVhZGluZyBzcGFjZSwgc28gd2UK
KwkJCSAqIG11c3QgcHV0IHRoZSBkYXRhIGJhY2sgYW5kIHJlc3RvcmUuCisJCQkgKi8KKwkJCWlm
IChzZW5kX2xvY2tfdXAgPT0gMCkgeworCQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJ
CQlzZW5kX2xvY2tfdXAgPSAxOworCQkJfQorCQkJaWYgKHNwLT5kYXRhID09IE5VTEwpIHsKKwkJ
CQkvKiB1bnN0ZWFsIHRoZSBkYXRhICovCisJCQkJc3AtPmRhdGEgPSBjaGstPmRhdGE7CisJCQkJ
c3AtPnRhaWxfbWJ1ZiA9IGNoay0+bGFzdF9tYnVmOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3Qg
bWJ1ZiAqbV90bXA7CisJCQkJLyogcmVhc3NlbWJsZSB0aGUgZGF0YSAqLworCQkJCW1fdG1wID0g
c3AtPmRhdGE7CisJCQkJc3AtPmRhdGEgPSBjaGstPmRhdGE7CisJCQkJU0NUUF9CVUZfTkVYVChj
aGstPmxhc3RfbWJ1ZikgPSBtX3RtcDsKKwkJCX0KKwkJCXNwLT5zb21lX3Rha2VuID0gc29tZV90
YWtlbjsKKwkJCWF0b21pY19hZGRfaW50KCZzcC0+bGVuZ3RoLCB0b19tb3ZlKTsKKwkJCWNoay0+
ZGF0YSA9IE5VTEw7CisJCQkqYmFpbCA9IDE7CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBj
aGssIHNvX2xvY2tlZCk7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29mOworCQl9IGVs
c2UgeworCQkJU0NUUF9CVUZfTEVOKG0pID0gMDsKKwkJCVNDVFBfQlVGX05FWFQobSkgPSBjaGst
PmRhdGE7CisJCQljaGstPmRhdGEgPSBtOworCQkJTV9BTElHTihjaGstPmRhdGEsIDQpOworCQl9
CisJfQorCVNDVFBfQlVGX1BSRVBFTkQoY2hrLT5kYXRhLCBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhF
QUQoc3RjYiksIE1fTk9XQUlUKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJLyogSEVM
UCwgVFNOSCBzaW5jZSB3ZSBhc3N1cmVkIGl0IHdvdWxkIG5vdCBhYm92ZT8gKi8KKyNpZmRlZiBJ
TlZBUklBTlRTCisJCXBhbmljKCJwcmVwZW5kIGZhaWxlcyBIRUxQPyIpOworI2Vsc2UKKwkJU0NU
UF9QUklOVEYoInByZXBlbmQgZmFpbHMgSEVMUD9cbiIpOworCQlzY3RwX2ZyZWVfYV9jaHVuayhz
dGNiLCBjaGssIHNvX2xvY2tlZCk7CisjZW5kaWYKKwkJKmJhaWwgPSAxOworCQl0b19tb3ZlID0g
MDsKKwkJZ290byBvdXRfb2Y7CisJfQorCXNjdHBfc25kX3NiX2FsbG9jKHN0Y2IsIFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJY2hrLT5ib29rX3NpemUgPSBjaGstPnNlbmRfc2l6
ZSA9ICh1aW50MTZfdCkodG9fbW92ZSArIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7
CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1f
VU5TRU5UOworCisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJ
Y2hrLT5wYWRfaW5wbGFjZSA9IDA7CisJY2hrLT5ub19mcl9hbGxvd2VkID0gMDsKKwlpZiAoc3Rj
Yi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlpZiAocmN2X2ZsYWdzICYgU0NUUF9E
QVRBX1VOT1JERVJFRCkgeworCQkJLyogSnVzdCB1c2UgMC4gVGhlIHJlY2VpdmVyIGlnbm9yZXMg
dGhlIHZhbHVlcy4gKi8KKwkJCWNoay0+cmVjLmRhdGEubWlkID0gMDsKKwkJfSBlbHNlIHsKKwkJ
CWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKKwkJCWlmIChyY3Zf
ZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJc3RycS0+bmV4dF9taWRfb3JkZXJl
ZCsrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJjdl9mbGFncyAmIFNDVFBfREFUQV9V
Tk9SREVSRUQpIHsKKwkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfdW5vcmRl
cmVkOworCQkJaWYgKHJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJCQlzdHJx
LT5uZXh0X21pZF91bm9yZGVyZWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWNoay0+cmVjLmRh
dGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKKwkJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQ
X0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJc3RycS0+bmV4dF9taWRfb3JkZXJlZCsrOworCQkJfQor
CQl9CisJfQorCWNoay0+cmVjLmRhdGEuc2lkID0gc3AtPnNpZDsKKwljaGstPnJlYy5kYXRhLnBw
aWQgPSBzcC0+cHBpZDsKKwljaGstPnJlYy5kYXRhLmNvbnRleHQgPSBzcC0+Y29udGV4dDsKKwlj
aGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9IDA7CisKKwljaGstPnJlYy5kYXRh
LnRpbWV0b2Ryb3AgPSBzcC0+dHM7CisJY2hrLT5mbGFncyA9IHNwLT5hY3RfZmxhZ3M7CisKKwlp
ZiAoc3AtPm5ldCkgeworCQljaGstPndob1RvID0gc3AtPm5ldDsKKwkJYXRvbWljX2FkZF9pbnQo
JmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJfSBlbHNlCisJCWNoay0+d2hvVG8gPSBOVUxM
OworCisJaWYgKHNwLT5ob2xkc19rZXlfcmVmKSB7CisJCWNoay0+YXV0aF9rZXlpZCA9IHNwLT5h
dXRoX2tleWlkOworCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgY2hrLT5hdXRoX2tleWlk
KTsKKwkJY2hrLT5ob2xkc19rZXlfcmVmID0gMTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX1BhbmRhX18pCisJY2hrLT5yZWMuZGF0YS50c24gPSBhdG9taWNfZmV0
Y2hhZGRfaW50KCZhc29jLT5zZW5kaW5nX3NlcSwgMSk7CisjZWxzZQorCWNoay0+cmVjLmRhdGEu
dHNuID0gYXNvYy0+c2VuZGluZ19zZXErKzsKKyNlbmRpZgorCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19BVF9TRU5EXzJfT1VUUSkgeworCQlzY3Rw
X21pc2NfaW50cyhTQ1RQX1NUUk1PVVRfTE9HX1NFTkQsCisJCSAgICAgICAgICAgICAgICh1aW50
MzJfdCkodWludHB0cl90KXN0Y2IsIHNwLT5sZW5ndGgsCisJCSAgICAgICAgICAgICAgICh1aW50
MzJfdCkoKGNoay0+cmVjLmRhdGEuc2lkIDw8IDE2KSB8ICgweDAwMDBmZmZmICYgY2hrLT5yZWMu
ZGF0YS5taWQpKSwKKwkJICAgICAgICAgICAgICAgY2hrLT5yZWMuZGF0YS50c24pOworCX0KKwlp
ZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlkY2hraCA9IG10b2QoY2hr
LT5kYXRhLCBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopOworCX0gZWxzZSB7CisJCW5kY2hraCA9
IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAqKTsKKwl9CisJLyoKKwkg
KiBQdXQgdGhlIHJlc3Qgb2YgdGhlIHRoaW5ncyBpbiBwbGFjZSBub3cuIFNpemUgd2FzIGRvbmUK
KwkgKiBlYXJsaWVyIGluIHByZXZpb3VzIGxvb3AgcHJpb3IgdG8gcGFkZGluZy4KKwkgKi8KKwor
I2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7
CisJaWYgKGFzb2MtPnRzbl9vdXRfYXQgPj0gU0NUUF9UU05fTE9HX1NJWkUpIHsKKwkJYXNvYy0+
dHNuX291dF9hdCA9IDA7CisJCWFzb2MtPnRzbl9vdXRfd3JhcHBlZCA9IDE7CisJfQorCWFzb2Mt
Pm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0udHNuID0gY2hrLT5yZWMuZGF0YS50c247CisJ
YXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zdHJtID0gY2hrLT5yZWMuZGF0YS5z
aWQ7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zZXEgPSBjaGstPnJlYy5k
YXRhLm1pZDsKKwlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRdLnN6ID0gY2hrLT5z
ZW5kX3NpemU7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5mbGdzID0gY2hr
LT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0
XS5zdGNiID0gKHZvaWQgKilzdGNiOworCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9h
dF0uaW5fcG9zID0gYXNvYy0+dHNuX291dF9hdDsKKwlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRz
bl9vdXRfYXRdLmluX291dCA9IDI7CisJYXNvYy0+dHNuX291dF9hdCsrOworI2VuZGlmCisJaWYg
KHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJZGNoa2gtPmNoLmNodW5rX3R5
cGUgPSBTQ1RQX0RBVEE7CisJCWRjaGtoLT5jaC5jaHVua19mbGFncyA9IGNoay0+cmVjLmRhdGEu
cmN2X2ZsYWdzOworCQlkY2hraC0+ZHAudHNuID0gaHRvbmwoY2hrLT5yZWMuZGF0YS50c24pOwor
CQlkY2hraC0+ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJZGNoa2gtPmRwLnNzbiA9IGh0
b25zKCh1aW50MTZfdCljaGstPnJlYy5kYXRhLm1pZCk7CisJCWRjaGtoLT5kcC5wcGlkID0gY2hr
LT5yZWMuZGF0YS5wcGlkOworCQlkY2hraC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5z
ZW5kX3NpemUpOworCX0gZWxzZSB7CisJCW5kY2hraC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfSURB
VEE7CisJCW5kY2hraC0+Y2guY2h1bmtfZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJjdl9mbGFnczsK
KwkJbmRjaGtoLT5kcC50c24gPSBodG9ubChjaGstPnJlYy5kYXRhLnRzbik7CisJCW5kY2hraC0+
ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJbmRjaGtoLT5kcC5yZXNlcnZlZCA9IGh0b25z
KDApOworCQluZGNoa2gtPmRwLm1pZCA9IGh0b25sKGNoay0+cmVjLmRhdGEubWlkKTsKKwkJaWYg
KHNwLT5mc24gPT0gMCkKKwkJCW5kY2hraC0+ZHAucHBpZF9mc24ucHBpZCA9IGNoay0+cmVjLmRh
dGEucHBpZDsKKwkJZWxzZQorCQkJbmRjaGtoLT5kcC5wcGlkX2Zzbi5mc24gPSBodG9ubChzcC0+
ZnNuKTsKKwkJc3AtPmZzbisrOworCQluZGNoa2gtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNo
ay0+c2VuZF9zaXplKTsKKwl9CisJLyogTm93IGFkdmFuY2UgdGhlIGNoay0+c2VuZF9zaXplIGJ5
IHRoZSBhY3R1YWwgcGFkIG5lZWRlZC4gKi8KKwlpZiAoY2hrLT5zZW5kX3NpemUgPCBTQ1RQX1NJ
WkUzMihjaGstPmJvb2tfc2l6ZSkpIHsKKwkJLyogbmVlZCBhIHBhZCAqLworCQlzdHJ1Y3QgbWJ1
ZiAqbG07CisJCWludCBwYWRzOworCisJCXBhZHMgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6
ZSkgLSBjaGstPnNlbmRfc2l6ZTsKKwkJbG0gPSBzY3RwX3BhZF9sYXN0bWJ1ZihjaGstPmRhdGEs
IHBhZHMsIGNoay0+bGFzdF9tYnVmKTsKKwkJaWYgKGxtICE9IE5VTEwpIHsKKwkJCWNoay0+bGFz
dF9tYnVmID0gbG07CisJCQljaGstPnBhZF9pbnBsYWNlID0gMTsKKwkJfQorCQljaGstPnNlbmRf
c2l6ZSArPSBwYWRzOworCX0KKwlpZiAoUFJfU0NUUF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJ
CWFzb2MtPnByX3NjdHBfY250Kys7CisJfQorCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlICYmIChz
cC0+bGVuZ3RoID09IDApICYmIChzcC0+c2VuZGVyX2FsbF9kb25lKSkgeworCQkvKiBBbGwgZG9u
ZSBwdWxsIGFuZCBraWxsIHRoZSBtZXNzYWdlICovCisJCWlmIChzcC0+cHV0X2xhc3Rfb3V0ID09
IDApIHsKKwkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBvdXQgZW50aXJlIG1zZyB3aXRoIE5PIGVu
ZCEtMlxuIik7CisJCQlTQ1RQX1BSSU5URigic2VuZGVyX2RvbmU6JWQgbGVuOiVkIG1zZ19jb21w
OiVkIHB1dF9sYXN0X291dDolZCBzZW5kX2xvY2s6JWRcbiIsCisJCQkgICAgICAgICAgICBzcC0+
c2VuZGVyX2FsbF9kb25lLAorCQkJICAgICAgICAgICAgc3AtPmxlbmd0aCwKKwkJCSAgICAgICAg
ICAgIHNwLT5tc2dfaXNfY29tcGxldGUsCisJCQkgICAgICAgICAgICBzcC0+cHV0X2xhc3Rfb3V0
LAorCQkJICAgICAgICAgICAgc2VuZF9sb2NrX3VwKTsKKwkJfQorCQlpZiAoKHNlbmRfbG9ja191
cCA9PSAwKSAmJiAoVEFJTFFfTkVYVChzcCwgbmV4dCkgPT0gTlVMTCkpIHsKKwkJCVNDVFBfVENC
X1NFTkRfTE9DSyhzdGNiKTsKKwkJCXNlbmRfbG9ja191cCA9IDE7CisJCX0KKwkJYXRvbWljX3N1
YnRyYWN0X2ludCgmYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJCVRBSUxRX1JFTU9WRSgm
c3RycS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0
cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgc3RycSwgc3AsIHNlbmRfbG9ja191
cCk7CisJCWlmICgoc3RycS0+c3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYK
KwkJICAgIChzdHJxLT5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCSAgICBUQUlMUV9FTVBU
WSgmc3RycS0+b3V0cXVldWUpKSB7CisJCQlzdGNiLT5hc29jLnRyaWdnZXJfcmVzZXQgPSAxOwor
CQl9CisJCWlmIChzcC0+bmV0KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7
CisJCQlzcC0+bmV0ID0gTlVMTDsKKwkJfQorCQlpZiAoc3AtPmRhdGEpIHsKKwkJCXNjdHBfbV9m
cmVlbShzcC0+ZGF0YSk7CisJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2Ff
c3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOworCX0KKwlhc29jLT5jaHVua3Nfb25fb3V0X3F1
ZXVlKys7CisJc3RycS0+Y2h1bmtzX29uX3F1ZXVlcysrOworCVRBSUxRX0lOU0VSVF9UQUlMKCZh
c29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJYXNvYy0+c2VuZF9xdWV1ZV9jbnQr
KzsKK291dF9vZjoKKwlpZiAoc2VuZF9sb2NrX3VwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NL
KHN0Y2IpOworCX0KKwlyZXR1cm4gKHRvX21vdmUpOworfQorCisKK3N0YXRpYyB2b2lkCitzY3Rw
X2ZpbGxfb3V0cXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgaW50IGZyYWdfcG9pbnQsIGludCBlZW9yX21vZGUsIGludCAqcXVpdF9ub3csIGlu
dCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQorCVNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKwlzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxOworCXVpbnQz
Ml90IHNwYWNlX2xlZnQsIG1vdmVkLCB0b3RhbF9tb3ZlZDsKKwlpbnQgYmFpbCwgZ2l2ZXVwOwor
CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJYXNvYyA9ICZzdGNiLT5hc29jOworCXRv
dGFsX21vdmVkID0gMDsKKwlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsK
KyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dSAt
IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CQljYXNlIEFGX0lORVQ2OgorCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fT1ZF
UkhFQUQ7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
Y2FzZSBBRl9DT05OOgorCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQkvKiBUU05IICovCisJ
CQlzcGFjZV9sZWZ0ID0gbmV0LT5tdHU7CisJCQlicmVhazsKKwl9CisJLyogTmVlZCBhbiBhbGxv
d2FuY2UgZm9yIHRoZSBkYXRhIGNodW5rIGhlYWRlciB0b28gKi8KKwlzcGFjZV9sZWZ0IC09IFND
VFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsKKworCS8qIG11c3QgbWFrZSBldmVuIHdvcmQg
Ym91bmRhcnkgKi8KKwlzcGFjZV9sZWZ0ICY9IDB4ZmZmZmZmZmM7CisJc3RycSA9IHN0Y2ItPmFz
b2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nfc2VsZWN0X3N0cmVhbShzdGNiLCBuZXQsIGFzb2MpOwor
CWdpdmV1cCA9IDA7CisJYmFpbCA9IDA7CisJd2hpbGUgKChzcGFjZV9sZWZ0ID4gMCkgJiYgKHN0
cnEgIT0gTlVMTCkpIHsKKwkJbW92ZWQgPSBzY3RwX21vdmVfdG9fb3V0cXVldWUoc3RjYiwgc3Ry
cSwgc3BhY2VfbGVmdCwgZnJhZ19wb2ludCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmdpdmV1cCwgZWVvcl9tb2RlLCAmYmFpbCwgc29fbG9ja2VkKTsKKwkJc3RjYi0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19zY2hlZHVsZWQoc3RjYiwgbmV0LCBhc29jLCBzdHJxLCBtb3Zl
ZCk7CisJCWlmICgoZ2l2ZXVwICE9IDApIHx8IChiYWlsICE9IDApKSB7CisJCQlicmVhazsKKwkJ
fQorCQlzdHJxID0gc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19zZWxlY3Rfc3RyZWFt
KHN0Y2IsIG5ldCwgYXNvYyk7CisJCXRvdGFsX21vdmVkICs9IG1vdmVkOworCQlzcGFjZV9sZWZ0
IC09IG1vdmVkOworCQlpZiAoc3BhY2VfbGVmdCA+PSBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQo
c3RjYikpIHsKKwkJCXNwYWNlX2xlZnQgLT0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2Ip
OworCQl9IGVsc2UgeworCQkJc3BhY2VfbGVmdCA9IDA7CisJCX0KKwkJc3BhY2VfbGVmdCAmPSAw
eGZmZmZmZmZjOworCX0KKwlpZiAoYmFpbCAhPSAwKQorCQkqcXVpdF9ub3cgPSAxOworCisJc3Rj
Yi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19wYWNrZXRfZG9uZShzdGNiLCBuZXQsIGFzb2Mp
OworCisJaWYgKHRvdGFsX21vdmVkID09IDApIHsKKwkJaWYgKChzdGNiLT5hc29jLnNjdHBfY210
X29uX29mZiA9PSAwKSAmJgorCQkgICAgKG5ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb24pKSB7CisJCQkvKiByYW4gZHJ5IGZvciBwcmltYXJ5IG5ldHdvcmsgbmV0ICovCisJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19wcmltYXJ5X3JhbmRyeSk7CisJCX0gZWxzZSBpZiAoc3RjYi0+
YXNvYy5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCQkvKiByYW4gZHJ5IHdpdGggQ01UIG9uICov
CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19jbXRfcmFuZHJ5KTsKKwkJfQorCX0KK30KKwordm9p
ZAorc2N0cF9maXhfZWNuX2VjaG8oc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJVEFJTFFfRk9SRUFDSChjaGssICZhc29j
LT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPT0gU0NUUF9FQ05fRUNITykgeworCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9V
TlNFTlQ7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKwl1bnNpZ25lZCBpbnQgaTsKKwor
CWlmIChuZXQgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWFzb2MgPSAmc3RjYi0+YXNvYzsK
Kwlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQlUQUlM
UV9GT1JFQUNIKHNwLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlLCBuZXh0KSB7CisJ
CQlpZiAoc3AtPm5ldCA9PSBuZXQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5l
dCk7CisJCQkJc3AtPm5ldCA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisJVEFJTFFfRk9SRUFDSChj
aGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+d2hvVG8gPT0g
bmV0KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQljaGstPndo
b1RvID0gTlVMTDsKKwkJfQorCX0KK30KKworaW50CitzY3RwX21lZF9jaHVua19vdXRwdXQoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkg
ICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJICAgICAgaW50ICpudW1fb3V0
LAorCQkgICAgICBpbnQgKnJlYXNvbl9jb2RlLAorCQkgICAgICBpbnQgY29udHJvbF9vbmx5LCBp
bnQgZnJvbV93aGVyZSwKKwkJICAgICAgc3RydWN0IHRpbWV2YWwgKm5vdywgaW50ICpub3dfZmls
bGVkLCBpbnQgZnJhZ19wb2ludCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVf
XykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCSAgICAgIFNDVFBfVU5VU0VE
CisjZW5kaWYKKwkpCit7CisJLyoqCisJICogT2sgdGhpcyBpcyB0aGUgZ2VuZXJpYyBjaHVuayBz
ZXJ2aWNlIHF1ZXVlLiB3ZSBtdXN0IGRvIHRoZQorCSAqIGZvbGxvd2luZzoKKwkgKiAtIFNlcnZp
Y2UgdGhlIHN0cmVhbSBxdWV1ZSB0aGF0IGlzIG5leHQsIG1vdmluZyBhbnkKKwkgKiAgIG1lc3Nh
Z2UgKG5vdGUgSSBtdXN0IGdldCBhIGNvbXBsZXRlIG1lc3NhZ2UgaS5lLiBGSVJTVC9NSURETEUg
YW5kCisJICogICBMQVNUIHRvIHRoZSBvdXQgcXVldWUgaW4gb25lIHBhc3MpIGFuZCBhc3NpZ25p
bmcgVFNOJ3MuIFRoaXMKKwkgKiAgIG9ubHkgYXBwbHlzIHRob3VnaCBpZiB0aGUgcGVlciBkb2Vz
IG5vdCBzdXBwb3J0IE5EQVRBLiBGb3IgTkRBVEEKKwkgKiAgIGNodW5rcyBpdHMgb2sgdG8gbm90
IHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlIDstKQorCSAqIC0gQ2hlY2sgdG8gc2VlIGlmIHRoZSBj
d25kL3J3bmQgYWxsb3dzIGFueSBvdXRwdXQsIGlmIHNvIHdlIGdvIGFoZWFkIGFuZAorCSAqICAg
Zm9tdWxhdGUgYW5kIHNlbmQgdGhlIGxvdyBsZXZlbCBjaHVua3MuIE1ha2luZyBzdXJlIHRvIGNv
bWJpbmUKKwkgKiAgIGFueSBjb250cm9sIGluIHRoZSBjb250cm9sIGNodW5rIHF1ZXVlIGFsc28u
CisJICovCisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqc3RhcnRfYXQsICpzYWNrX2dvZXNfdG8g
PSBOVUxMLCAqb2xkX3N0YXJ0X2F0ID0gTlVMTDsKKwlzdHJ1Y3QgbWJ1ZiAqb3V0Y2hhaW4sICpl
bmRvdXRjaGFpbjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCisJLyog
dGVtcCBhcnJheXMgZm9yIHVubGlua2luZyAqLworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmRh
dGFfbGlzdFtTQ1RQX01BWF9EQVRBX0JVTkRMSU5HXTsKKwlpbnQgbm9fZnJhZ21lbnRmbGcsIGVy
cm9yOworCXVuc2lnbmVkIGludCBtYXhfcnduZF9wZXJfZGVzdCwgbWF4X3NlbmRfcGVyX2Rlc3Q7
CisJaW50IG9uZV9jaHVuaywgaGJmbGFnLCBza2lwX2RhdGFfZm9yX3RoaXNfbmV0OworCWludCBh
c2NvbmYsIGNvb2tpZSwgbm9fb3V0X2NudDsKKwlpbnQgYnVuZGxlX2F0LCBjdGxfY250LCBub19k
YXRhX2NodW5rcywgZWVvcl9tb2RlOworCXVuc2lnbmVkIGludCBtdHUsIHJfbXR1LCBvbXR1LCBt
eF9tdHUsIHRvX291dDsKKwlpbnQgdHNuc19zZW50ID0gMDsKKwl1aW50MzJfdCBhdXRoX29mZnNl
dCA9IDA7CisJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCA9IE5VTEw7CisJdWludDE2X3Qg
YXV0aF9rZXlpZDsKKwlpbnQgb3ZlcnJpZGVfb2sgPSAxOworCWludCBza2lwX2ZpbGxfdXAgPSAw
OworCWludCBkYXRhX2F1dGhfcmVxZCA9IDA7CisJLyogSlJTIDUvMTQvMDcgLSBBZGQgZmxhZyBm
b3Igd2hldGhlciBhIGhlYXJ0YmVhdCBpcyBzZW50IHRvCisJICAgdGhlIGRlc3RpbmF0aW9uLiAq
LworCWludCBxdWl0X25vdyA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAoc29f
bG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfSBlbHNl
IHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0KKyNlbmRpZgor
CSpudW1fb3V0ID0gMDsKKwkqcmVhc29uX2NvZGUgPSAwOworCWF1dGhfa2V5aWQgPSBzdGNiLT5h
c29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZDsKKwlpZiAoKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFU
RV9TSFVURE9XTl9QRU5ESU5HKSB8fAorCSAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfRVhQTElDSVRfRU9SKSkpIHsKKwkJZWVvcl9tb2RlID0gMTsKKwl9IGVsc2Ugewor
CQllZW9yX21vZGUgPSAwOworCX0KKwljdGxfY250ID0gbm9fb3V0X2NudCA9IGFzY29uZiA9IGNv
b2tpZSA9IDA7CisJLyoKKwkgKiBGaXJzdCBsZXRzIHByaW1lIHRoZSBwdW1wLiBGb3IgZWFjaCBk
ZXN0aW5hdGlvbiwgaWYgdGhlcmUgaXMgcm9vbQorCSAqIGluIHRoZSBmbGlnaHQgc2l6ZSwgYXR0
ZW1wdCB0byBwdWxsIGFuIE1UVSdzIHdvcnRoIG91dCBvZiB0aGUKKwkgKiBzdHJlYW0gcXVldWVz
IGludG8gdGhlIGdlbmVyYWwgc2VuZF9xdWV1ZQorCSAqLworI2lmZGVmIFNDVFBfQVVESVRJTkdf
RU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4QzIsIDIpOworI2VuZGlmCisJU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7CisJaGJmbGFnID0gMDsKKwlpZiAoY29udHJvbF9vbmx5KQorCQlub19k
YXRhX2NodW5rcyA9IDE7CisJZWxzZQorCQlub19kYXRhX2NodW5rcyA9IDA7CisKKwkvKiBOb3Ro
aW5nIHRvIHBvc3NpYmxlIHRvIHNlbmQ/ICovCisJaWYgKChUQUlMUV9FTVBUWSgmYXNvYy0+Y29u
dHJvbF9zZW5kX3F1ZXVlKSB8fAorCSAgICAgKGFzb2MtPmN0cmxfcXVldWVfY250ID09IHN0Y2It
PmFzb2MuZWNuX2VjaG9fY250X29ucSkpICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc2Nv
bmZfc2VuZF9xdWV1ZSkgJiYKKwkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYm
CisJICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RjYiwgc29fbG9ja2VkKSA9PSAwKSB7
CisJbm90aGluZ190b19zZW5kOgorCQkqcmVhc29uX2NvZGUgPSA5OworCQlyZXR1cm4gKDApOwor
CX0KKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA9PSAwKSB7CisJCS8qIE5vIHJvb20gaW4gcGVlcnMg
cnduZCAqLworCQkqcmVhc29uX2NvZGUgPSAxOworCQlpZiAoYXNvYy0+dG90YWxfZmxpZ2h0ID4g
MCkgeworCQkJLyogd2UgYXJlIGFsbG93ZWQgb25lIGNodW5rIGluIGZsaWdodCAqLworCQkJbm9f
ZGF0YV9jaHVua3MgPSAxOworCQl9CisJfQorCWlmIChzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9v
bnEpIHsKKwkJLyogUmVjb3JkIHdoZXJlIGEgc2FjayBnb2VzLCBpZiBhbnkgKi8KKwkJaWYgKG5v
X2RhdGFfY2h1bmtzICYmCisJCSAgICAoYXNvYy0+Y3RybF9xdWV1ZV9jbnQgPT0gc3RjYi0+YXNv
Yy5lY25fZWNob19jbnRfb25xKSkgeworCQkJLyogTm90aGluZyBidXQgRUNOZSB0byBzZW5kIC0g
d2UgZG9uJ3QgZG8gdGhhdCAqLworCQkJZ290byBub3RoaW5nX3RvX3NlbmQ7CisJCX0KKwkJVEFJ
TFFfRk9SRUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewor
CQkJaWYgKChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NFTEVDVElWRV9BQ0spIHx8CisJ
CQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykpIHsK
KwkJCQlzYWNrX2dvZXNfdG8gPSBjaGstPndob1RvOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ
fQorCW1heF9yd25kX3Blcl9kZXN0ID0gKChhc29jLT5wZWVyc19yd25kICsgYXNvYy0+dG90YWxf
ZmxpZ2h0KSAvIGFzb2MtPm51bW5ldHMpOworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkKKwkJbWF4
X3NlbmRfcGVyX2Rlc3QgPSBTQ1RQX1NCX0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkgLyBh
c29jLT5udW1uZXRzOworCWVsc2UKKwkJbWF4X3NlbmRfcGVyX2Rlc3QgPSAwOworCWlmIChub19k
YXRhX2NodW5rcyA9PSAwKSB7CisJCS8qIEhvdyBtYW55IG5vbi1kaXJlY3RlZCBjaHVua3MgYXJl
IHRoZXJlPyAqLworCQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBf
bmV4dCkgeworCQkJaWYgKGNoay0+d2hvVG8gPT0gTlVMTCkgeworCQkJCS8qIFdlIGFscmVhZHkg
aGF2ZSBub24tZGlyZWN0ZWQKKwkJCQkgKiBjaHVua3Mgb24gdGhlIHF1ZXVlLCBubyBuZWVkCisJ
CQkJICogdG8gZG8gYSBmaWxsLXVwLgorCQkJCSAqLworCQkJCXNraXBfZmlsbF91cCA9IDE7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKwlpZiAoKG5vX2RhdGFfY2h1bmtzID09IDApICYm
CisJICAgIChza2lwX2ZpbGxfdXAgPT0gMCkgJiYKKwkgICAgKCFzdGNiLT5hc29jLnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2IsIGFzb2MpKSkgeworCQlUQUlMUV9GT1JFQUNIKG5l
dCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJLyoKKwkJCSAqIFRoaXMgZm9yIGxvb3Ag
d2UgYXJlIGluIHRha2VzIGluCisJCQkgKiBlYWNoIG5ldCwgaWYgaXRzJ3MgZ290IHNwYWNlIGlu
IGN3bmQgYW5kCisJCQkgKiBoYXMgZGF0YSBzZW50IHRvIGl0ICh3aGVuIENNVCBpcyBvZmYpIHRo
ZW4gaXQKKwkJCSAqIGNhbGxzIHNjdHBfZmlsbF9vdXRxdWV1ZSBmb3IgdGhlIG5ldC4gVGhpcyBn
ZXRzCisJCQkgKiBkYXRhIG9uIHRoZSBzZW5kIHF1ZXVlIGZvciB0aGF0IG5ldHdvcmsuCisJCQkg
KgorCQkJICogSW4gc2N0cF9maWxsX291dHF1ZXVlIFRTTidzIGFyZSBhc3NpZ25lZCBhbmQKKwkJ
CSAqIGRhdGEgaXMgY29waWVkIG91dCBvZiB0aGUgc3RyZWFtIGJ1ZmZlcnMuIE5vdGUKKwkJCSAq
IG1vc3RseSBjb3B5IGJ5IHJlZmVyZW5jZSAod2UgaG9wZSkuCisJCQkgKi8KKwkJCW5ldC0+d2lu
ZG93X3Byb2JlID0gMDsKKwkJCWlmICgobmV0ICE9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSAmJgor
CQkJICAgICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB8fAorCQkJICAgICAoIShu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgfHwKKwkJCSAgICAgKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpKSB7CisJCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkg
eworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgMSwKKwkJCQkJCSAgICAgIFNDVFBfQ1dO
RF9MT0dfRklMTF9PVVRRX0NBTExFRCk7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJfQorCQkJ
aWYgKChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9i
ZWdpbnMpICYmCisJCQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPT0gMCkpIHsKKwkJCQkoKnN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3Rj
YiwgbmV0KTsKKwkJCX0KKwkJCWlmIChuZXQtPmZsaWdodF9zaXplID49IG5ldC0+Y3duZCkgewor
CQkJCS8qIHNraXAgdGhpcyBuZXR3b3JrLCBubyByb29tIC0gY2FuJ3QgZmlsbCAqLworCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lO
R19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDMsCisJCQkJCQkgICAg
ICBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQpOworCQkJCX0KKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgNCwg
U0NUUF9DV05EX0xPR19GSUxMX09VVFFfQ0FMTEVEKTsKKwkJCX0KKwkJCXNjdHBfZmlsbF9vdXRx
dWV1ZShzdGNiLCBuZXQsIGZyYWdfcG9pbnQsIGVlb3JfbW9kZSwgJnF1aXRfbm93LCBzb19sb2Nr
ZWQpOworCQkJaWYgKHF1aXRfbm93KSB7CisJCQkJLyogbWVtb3J5IGFsbG9jIGZhaWx1cmUgKi8K
KwkJCQlub19kYXRhX2NodW5rcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJLyog
bm93IHNlcnZpY2UgZWFjaCBkZXN0aW5hdGlvbiBhbmQgc2VuZCBvdXQgd2hhdCB3ZSBjYW4gZm9y
IGl0ICovCisJLyogTm90aGluZyB0byBzZW5kPyAqLworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+
Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgorCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+YXNjb25mX3Nl
bmRfcXVldWUpICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSkgeworCQkq
cmVhc29uX2NvZGUgPSA4OworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChhc29jLT5zY3RwX2Nt
dF9vbl9vZmYgPiAwKSB7CisJCS8qIGdldCB0aGUgbGFzdCBzdGFydCBwb2ludCAqLworCQlzdGFy
dF9hdCA9IGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQ7CisJCWlmIChzdGFydF9hdCA9
PSBOVUxMKSB7CisJCQkvKiBudWxsIHNvIHRvIGJlZ2lubmluZyAqLworCQkJc3RhcnRfYXQgPSBU
QUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCX0gZWxzZSB7CisJCQlzdGFydF9hdCA9IFRBSUxR
X05FWFQoYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCwgc2N0cF9uZXh0KTsKKwkJCWlm
IChzdGFydF9hdCA9PSBOVUxMKSB7CisJCQkJc3RhcnRfYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
bmV0cyk7CisJCQl9CisJCX0KKwkJYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCA9IHN0
YXJ0X2F0OworCX0gZWxzZSB7CisJCXN0YXJ0X2F0ID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMp
OworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0
cF9uZXh0KSB7CisJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKKwkJCWlmIChhc29jLT5hbHRl
cm5hdGUpIHsKKwkJCQljaGstPndob1RvID0gYXNvYy0+YWx0ZXJuYXRlOworCQkJfSBlbHNlIHsK
KwkJCQljaGstPndob1RvID0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJCWF0
b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCQl9CisJfQorCW9sZF9z
dGFydF9hdCA9IE5VTEw7CithZ2Fpbl9vbmVfbW9yZV90aW1lOgorCWZvciAobmV0ID0gc3RhcnRf
YXQgOyBuZXQgIT0gTlVMTDsgbmV0ID0gVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCkpIHsKKwkJ
LyogaG93IG11Y2ggY2FuIHdlIHNlbmQ/ICovCisJCS8qIFNDVFBEQkcoIkV4YW1pbmUgZm9yIHNl
bmRpbmcgbmV0OiV4XG4iLCAodWludDMyX3QpbmV0KTsgKi8KKwkJaWYgKG9sZF9zdGFydF9hdCAm
JiAob2xkX3N0YXJ0X2F0ID09IG5ldCkpIHsKKwkJCS8qIHRocm91Z2ggbGlzdCBvY21wbGV0ZWx5
LiAqLworCQkJYnJlYWs7CisJCX0KKwkJdHNuc19zZW50ID0gMHhhOworCQlpZiAoVEFJTFFfRU1Q
VFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0VNUFRZKCZhc29j
LT5hc2NvbmZfc2VuZF9xdWV1ZSkgJiYKKwkJICAgIChuZXQtPmZsaWdodF9zaXplID49IG5ldC0+
Y3duZCkpIHsKKwkJCS8qIE5vdGhpbmcgb24gY29udHJvbCBvciBhc2NvbmYgYW5kIGZsaWdodCBp
cyBmdWxsLCB3ZSBjYW4gc2tpcAorCQkJICogZXZlbiBpbiB0aGUgQ01UIGNhc2UuCisJCQkgKi8K
KwkJCWNvbnRpbnVlOworCQl9CisJCWJ1bmRsZV9hdCA9IDA7CisJCWVuZG91dGNoYWluID0gb3V0
Y2hhaW4gPSBOVUxMOworCQlub19mcmFnbWVudGZsZyA9IDE7CisJCW9uZV9jaHVuayA9IDA7CisJ
CWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCXNraXBf
ZGF0YV9mb3JfdGhpc19uZXQgPSAxOworCQl9IGVsc2UgeworCQkJc2tpcF9kYXRhX2Zvcl90aGlz
X25ldCA9IDA7CisJCX0KKwkJc3dpdGNoICgoKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHIpLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCW10
dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBf
TUlOX09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCW10dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQkvKiBUU05IICovCisJ
CQltdHUgPSBuZXQtPm10dTsKKwkJCWJyZWFrOworCQl9CisJCW14X210dSA9IG10dTsKKwkJdG9f
b3V0ID0gMDsKKwkJaWYgKG10dSA+IGFzb2MtPnBlZXJzX3J3bmQpIHsKKwkJCWlmIChhc29jLT50
b3RhbF9mbGlnaHQgPiAwKSB7CisJCQkJLyogV2UgaGF2ZSBhIHBhY2tldCBpbiBmbGlnaHQgc29t
ZXdoZXJlICovCisJCQkJcl9tdHUgPSBhc29jLT5wZWVyc19yd25kOworCQkJfSBlbHNlIHsKKwkJ
CQkvKiBXZSBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gc2VuZCBvbmUgTVRVIG91dCAqLworCQkJCW9u
ZV9jaHVuayA9IDE7CisJCQkJcl9tdHUgPSBtdHU7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyX210
dSA9IG10dTsKKwkJfQorCQllcnJvciA9IDA7CisJCS8qKioqKioqKioqKioqKioqKioqKioqKiov
CisJCS8qIEFTQ09ORiB0cmFuc21pc3Npb24gKi8KKwkJLyoqKioqKioqKioqKioqKioqKioqKioq
Ki8KKwkJLyogTm93IGZpcnN0IGxldHMgZ28gdGhyb3VnaCB0aGUgYXNjb25mIHF1ZXVlICovCisJ
CVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwgc2N0cF9u
ZXh0LCBuY2hrKSB7CisJCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgIT0gU0NUUF9BU0NPTkYp
IHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKKwkJ
CQlpZiAoYXNvYy0+YWx0ZXJuYXRlID09IE5VTEwpIHsKKwkJCQkJaWYgKGFzb2MtPnByaW1hcnlf
ZGVzdGluYXRpb24gIT0gbmV0KSB7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZSB7
CisJCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgIT0gbmV0KSB7CisJCQkJCQlicmVhazsKKwkJCQkJ
fQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNoay0+d2hvVG8gIT0gbmV0KSB7CisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworCQkJCWJy
ZWFrOworCQkJfQorCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVCAmJgor
CQkJICAgIGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCWJyZWFrOwor
CQkJfQorCQkJLyoKKwkJCSAqIGlmIG5vIEFVVEggaXMgeWV0IGluY2x1ZGVkIGFuZCB0aGlzIGNo
dW5rCisJCQkgKiByZXF1aXJlcyBpdCwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIGl0LiAgV2UK
KwkJCSAqIGRvbid0IGFwcGx5IHRoZSBzaXplIHVudGlsIHRoZSBBVVRIIGNodW5rIGlzCisJCQkg
KiBhY3R1YWxseSBhZGRlZCBiZWxvdyBpbiBjYXNlIHRoZXJlIGlzIG5vIHJvb20gZm9yCisJCQkg
KiB0aGlzIGNodW5rLiBOT1RFOiB3ZSBvdmVybG9hZCB0aGUgdXNlIG9mICJvbXR1IgorCQkJICog
aGVyZQorCQkJICovCisJCQlpZiAoKGF1dGggPT0gTlVMTCkgJiYKKwkJCSAgICBzY3RwX2F1dGhf
aXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtfaWQuaWQsCisJCQkJCQkJc3RjYi0+YXNv
Yy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQkJCW9tdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xl
bihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJCQl9IGVsc2UKKwkJCQlvbXR1ID0gMDsKKwkJ
CS8qIEhlcmUgd2UgZG8gTk9UIGZhY3RvciB0aGUgcl9tdHUgKi8KKwkJCWlmICgoY2hrLT5zZW5k
X3NpemUgPCAoaW50KShtdHUgLSBvbXR1KSkgfHwKKwkJCSAgICAoY2hrLT5mbGFncyAmIENIVU5L
X0ZMQUdTX0ZSQUdNRU5UX09LKSkgeworCQkJCS8qCisJCQkJICogV2UgcHJvYmFibHkgc2hvdWxk
IGdsb20gdGhlIG1idWYgY2hhaW4KKwkJCQkgKiBmcm9tIHRoZSBjaGstPmRhdGEgZm9yIGNvbnRy
b2wgYnV0IHRoZQorCQkJCSAqIHByb2JsZW0gaXMgaXQgYmVjb21lcyB5ZXQgb25lIG1vcmUgbGV2
ZWwKKwkJCQkgKiBvZiB0cmFja2luZyB0byBkbyBpZiBmb3Igc29tZSByZWFzb24KKwkJCQkgKiBv
dXRwdXQgZmFpbHMuIFRoZW4gSSBoYXZlIGdvdCB0bworCQkJCSAqIHJlY29uc3RydWN0IHRoZSBt
ZXJnZWQgY29udHJvbCBjaGFpbi4uIGVsCisJCQkJICogeXVja28uLiBmb3Igbm93IHdlIHRha2Ug
dGhlIGVhc3kgd2F5IGFuZAorCQkJCSAqIGRvIHRoZSBjb3B5CisJCQkJICovCisJCQkJLyoKKwkJ
CQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQKKwkJCQkgKiBzYXZl
IHRoZSBvZmZzZXQgaW50byB0aGUgY2hhaW4gZm9yIEFVVEgKKwkJCQkgKi8KKwkJCQlpZiAoKGF1
dGggPT0gTlVMTCkgJiYKKwkJCQkgICAgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGst
PnJlYy5jaHVua19pZC5pZCwKKwkJCQkJCQkJIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykp
KSB7CisJCQkJCW91dGNoYWluID0gc2N0cF9hZGRfYXV0aF9jaHVuayhvdXRjaGFpbiwKKwkJCQkJ
CQkJICAgICAgICZlbmRvdXRjaGFpbiwKKwkJCQkJCQkJICAgICAgICZhdXRoLAorCQkJCQkJCQkg
ICAgICAgJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkgICAgICAgc3RjYiwKKwkJCQkJCQkJICAgICAg
IGNoay0+cmVjLmNodW5rX2lkLmlkKTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNj
dHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCX0KKwkJCQlvdXRjaGFpbiA9IHNjdHBfY29weV9t
YnVmY2hhaW4oY2hrLT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWluLAorCQkJCQkJCSAgICAg
ICAoaW50KWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEsCisJCQkJCQkJICAgICAgIGNo
ay0+c2VuZF9zaXplLCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCQlpZiAob3V0Y2hhaW4gPT0gTlVM
TCkgeworCQkJCQkqcmVhc29uX2NvZGUgPSA4OworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJCQlyZXR1
cm4gKEVOT01FTSk7CisJCQkJfQorCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19v
dXRjb250cm9sY2h1bmtzKTsKKwkJCQkvKiB1cGRhdGUgb3VyIE1UVSBzaXplICovCisJCQkJaWYg
KG10dSA+IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpKQorCQkJCQltdHUgLT0gKGNoay0+c2VuZF9z
aXplICsgb210dSk7CisJCQkJZWxzZQorCQkJCQltdHUgPSAwOworCQkJCXRvX291dCArPSAoY2hr
LT5zZW5kX3NpemUgKyBvbXR1KTsKKwkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICovCisJCQkJaWYg
KGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgeworCQkJCQlub19mcmFnbWVu
dGZsZyA9IDA7CisJCQkJfQorCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRh
KQorCQkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJCS8qCisJCQkJICogc2V0IGhiIGZsYWcgc2lu
Y2Ugd2UgY2FuCisJCQkJICogdXNlIHRoZXNlIGZvciBSVE8KKwkJCQkgKi8KKwkJCQloYmZsYWcg
PSAxOworCQkJCWFzY29uZiA9IDE7CisJCQkJLyoKKwkJCQkgKiBzaG91bGQgc3lzY3RsIHRoaXM6
IGRvbid0CisJCQkJICogYnVuZGxlIGRhdGEgd2l0aCBBU0NPTkYKKwkJCQkgKiBzaW5jZSBpdCBy
ZXF1aXJlcyBBVVRICisJCQkJICovCisJCQkJbm9fZGF0YV9jaHVua3MgPSAxOworCQkJCWNoay0+
c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKKwkJCQlpZiAoY2hrLT53aG9UbyA9PSBOVUxMKSB7
CisJCQkJCWNoay0+d2hvVG8gPSBuZXQ7CisJCQkJCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9j
b3VudCwgMSk7CisJCQkJfQorCQkJCWNoay0+c25kX2NvdW50Kys7CisJCQkJaWYgKG10dSA9PSAw
KSB7CisJCQkJCS8qCisJCQkJCSAqIE9rIHdlIGFyZSBvdXQgb2Ygcm9vbSBidXQgd2UgY2FuCisJ
CQkJCSAqIG91dHB1dCB3aXRob3V0IGVmZmVjdGluZyB0aGUKKwkJCQkJICogZmxpZ2h0IHNpemUg
c2luY2UgdGhpcyBsaXR0bGUgZ3V5CisJCQkJCSAqIGlzIGEgY29udHJvbCBvbmx5IHBhY2tldC4K
KwkJCQkJICovCisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwg
aW5wLCBzdGNiLCBuZXQpOworCQkJCQkvKgorCQkJCQkgKiBkbyBOT1QgY2xlYXIgdGhlIGFzY29u
ZgorCQkJCQkgKiBmbGFnIGFzIGl0IGlzIHVzZWQgdG8gZG8KKwkJCQkJICogYXBwcm9wcmlhdGUg
c291cmNlIGFkZHJlc3MKKwkJCQkJICogc2VsZWN0aW9uLgorCQkJCQkgKi8KKwkJCQkJaWYgKCpu
b3dfZmlsbGVkID09IDApIHsKKwkJCQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKG5vdyk7
CisJCQkJCQkqbm93X2ZpbGxlZCA9IDE7CisJCQkJCX0KKwkJCQkJbmV0LT5sYXN0X3NlbnRfdGlt
ZSA9ICpub3c7CisJCQkJCWhiZmxhZyA9IDA7CisJCQkJCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xl
dmVsX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIG5ldCwKKwkJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRy
LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0Y2hhaW4s
IGF1dGhfb2Zmc2V0LCBhdXRoLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQsCisJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZsZywgMCwgYXNjb25m
LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3Rw
X2xwb3J0LCBzdGNiLT5ycG9ydCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwKKyNlbmRpZgorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc29fbG9ja2VkKSkpIHsKKwkJCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0
ICovCisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVk
XG4iLCBlcnJvcik7CisJCQkJCQlpZiAoZnJvbV93aGVyZSA9PSAwKSB7CisJCQkJCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnJ1c3IpOworCQkJCQkJfQorCQkJCQkJaWYgKGVycm9y
ID09IEVOT0JVRlMpIHsKKwkJCQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7CisJCQkJCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQkJCQkJfQorCQkJCQkJLyogZXJy
b3IsIGNvdWxkIG5vdCBvdXRwdXQgKi8KKwkJCQkJCWlmIChlcnJvciA9PSBFSE9TVFVOUkVBQ0gp
IHsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIERlc3RpbmF0aW9uIHdlbnQKKwkJCQkJCQkgKiB1bnJl
YWNoYWJsZQorCQkJCQkJCSAqIGR1cmluZyB0aGlzIHNlbmQKKwkJCQkJCQkgKi8KKwkJCQkJCQlz
Y3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7CisJCQkJCQl9CisJCQkJCQkqcmVh
c29uX2NvZGUgPSA3OworCQkJCQkJYnJlYWs7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlhc29jLT5p
ZnBfaGFkX2Vub2J1ZiA9IDA7CisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJICogaW5jcmVhc2UgdGhl
IG51bWJlciB3ZSBzZW50LCBpZiBhCisJCQkJCSAqIGNvb2tpZSBpcyBzZW50IHdlIGRvbid0IHRl
bGwgdGhlbQorCQkJCQkgKiBhbnkgd2FzIHNlbnQgb3V0LgorCQkJCQkgKi8KKwkJCQkJb3V0Y2hh
aW4gPSBlbmRvdXRjaGFpbiA9IE5VTEw7CisJCQkJCWF1dGggPSBOVUxMOworCQkJCQlhdXRoX29m
ZnNldCA9IDA7CisJCQkJCWlmICghbm9fb3V0X2NudCkKKwkJCQkJCSpudW1fb3V0ICs9IGN0bF9j
bnQ7CisJCQkJCS8qIHJlY2FsYyBhIGNsZWFuIHNsYXRlIGFuZCBzZXR1cCAqLworCQkJCQlzd2l0
Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJCQlj
YXNlIEFGX0lORVQ6CisJCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVB
RDsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCQljYXNlIEFGX0lO
RVQ2OgorCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCQljYXNlIEFG
X0NPTk46CisJCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwor
CQkJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJCQlkZWZhdWx0OgorCQkJCQkJCS8qIFRTTkggKi8K
KwkJCQkJCQltdHUgPSBuZXQtPm10dTsKKwkJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQl0b19v
dXQgPSAwOworCQkJCQlub19mcmFnbWVudGZsZyA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlm
IChlcnJvciAhPSAwKSB7CisJCQkvKiB0cnkgbmV4dCBuZXQgKi8KKwkJCWNvbnRpbnVlOworCQl9
CisJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIENvbnRyb2wgdHJhbnNtaXNzaW9u
ICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE5vdyBmaXJzdCBsZXRzIGdv
IHRocm91Z2ggdGhlIGNvbnRyb2wgcXVldWUgKi8KKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywg
JmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCQlpZiAoKHNh
Y2tfZ29lc190bykgJiYKKwkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05f
RUNITykgJiYKKwkJCSAgICAoY2hrLT53aG9UbyAhPSBzYWNrX2dvZXNfdG8pKSB7CisJCQkJLyoK
KwkJCQkgKiBpZiB3ZSBoYXZlIGEgc2FjayBpbiBxdWV1ZSwgYW5kIHdlIGFyZSBsb29raW5nIGF0
IGFuCisJCQkJICogZWNuIGVjaG8gdGhhdCBpcyBOT1QgcXVldWVkIHRvIHdoZXJlIHRoZSBzYWNr
IGlzIGdvaW5nLi4KKwkJCQkgKi8KKwkJCQlpZiAoY2hrLT53aG9UbyA9PSBuZXQpIHsKKwkJCQkJ
LyogRG9uJ3QgdHJhbnNtaXQgaXQgdG8gd2hlcmUgaXRzIGdvaW5nIChjdXJyZW50IG5ldCkgKi8K
KwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIGlmIChzYWNrX2dvZXNfdG8gPT0gbmV0KSB7CisJ
CQkJCS8qIEJ1dCBkbyB0cmFuc21pdCBpdCB0byB0aGlzIGFkZHJlc3MgKi8KKwkJCQkJZ290byBz
a2lwX25ldF9jaGVjazsKKwkJCQl9CisJCQl9CisJCQlpZiAoY2hrLT53aG9UbyA9PSBOVUxMKSB7
CisJCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSA9PSBOVUxMKSB7CisJCQkJCWlmIChhc29jLT5wcmlt
YXJ5X2Rlc3RpbmF0aW9uICE9IG5ldCkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlICE9IG5ldCkgeworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChjaGstPndob1RvICE9IG5l
dCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCXNraXBfbmV0X2NoZWNrOgorCQkJ
aWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoY2hr
LT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7CisJCQkJLyoKKwkJCQkgKiBJdCBtdXN0
IGJlIHVuc2VudC4gQ29va2llcyBhbmQgQVNDT05GJ3MKKwkJCQkgKiBoYW5nIGFyb3VuZCBidXQg
dGhlcmUgdGltZXJzIHdpbGwgZm9yY2UKKwkJCQkgKiB3aGVuIG1hcmtlZCBmb3IgcmVzZW5kLgor
CQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyoKKwkJCSAqIGlmIG5vIEFVVEggaXMg
eWV0IGluY2x1ZGVkIGFuZCB0aGlzIGNodW5rCisJCQkgKiByZXF1aXJlcyBpdCwgbWFrZSBzdXJl
IHRvIGFjY291bnQgZm9yIGl0LiAgV2UKKwkJCSAqIGRvbid0IGFwcGx5IHRoZSBzaXplIHVudGls
IHRoZSBBVVRIIGNodW5rIGlzCisJCQkgKiBhY3R1YWxseSBhZGRlZCBiZWxvdyBpbiBjYXNlIHRo
ZXJlIGlzIG5vIHJvb20gZm9yCisJCQkgKiB0aGlzIGNodW5rLiBOT1RFOiB3ZSBvdmVybG9hZCB0
aGUgdXNlIG9mICJvbXR1IgorCQkJICogaGVyZQorCQkJICovCisJCQlpZiAoKGF1dGggPT0gTlVM
TCkgJiYKKwkJCSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtf
aWQuaWQsCisJCQkJCQkJc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQkJCW9tdHUg
PSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJCQl9
IGVsc2UKKwkJCQlvbXR1ID0gMDsKKwkJCS8qIEhlcmUgd2UgZG8gTk9UIGZhY3RvciB0aGUgcl9t
dHUgKi8KKwkJCWlmICgoY2hrLT5zZW5kX3NpemUgPD0gKGludCkobXR1IC0gb210dSkpIHx8CisJ
CQkgICAgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykpIHsKKwkJCQkvKgor
CQkJCSAqIFdlIHByb2JhYmx5IHNob3VsZCBnbG9tIHRoZSBtYnVmIGNoYWluCisJCQkJICogZnJv
bSB0aGUgY2hrLT5kYXRhIGZvciBjb250cm9sIGJ1dCB0aGUKKwkJCQkgKiBwcm9ibGVtIGlzIGl0
IGJlY29tZXMgeWV0IG9uZSBtb3JlIGxldmVsCisJCQkJICogb2YgdHJhY2tpbmcgdG8gZG8gaWYg
Zm9yIHNvbWUgcmVhc29uCisJCQkJICogb3V0cHV0IGZhaWxzLiBUaGVuIEkgaGF2ZSBnb3QgdG8K
KwkJCQkgKiByZWNvbnN0cnVjdCB0aGUgbWVyZ2VkIGNvbnRyb2wgY2hhaW4uLiBlbAorCQkJCSAq
IHl1Y2tvLi4gZm9yIG5vdyB3ZSB0YWtlIHRoZSBlYXN5IHdheSBhbmQKKwkJCQkgKiBkbyB0aGUg
Y29weQorCQkJCSAqLworCQkJCS8qCisJCQkJICogQWRkIGFuIEFVVEggY2h1bmssIGlmIGNodW5r
IHJlcXVpcmVzIGl0CisJCQkJICogc2F2ZSB0aGUgb2Zmc2V0IGludG8gdGhlIGNoYWluIGZvciBB
VVRICisJCQkJICovCisJCQkJaWYgKChhdXRoID09IE5VTEwpICYmCisJCQkJICAgIChzY3RwX2F1
dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtfaWQuaWQsCisJCQkJCQkJCSBzdGNi
LT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSkgeworCQkJCQlvdXRjaGFpbiA9IHNjdHBfYWRkX2F1
dGhfY2h1bmsob3V0Y2hhaW4sCisJCQkJCQkJCSAgICAgICAmZW5kb3V0Y2hhaW4sCisJCQkJCQkJ
CSAgICAgICAmYXV0aCwKKwkJCQkJCQkJICAgICAgICZhdXRoX29mZnNldCwKKwkJCQkJCQkJICAg
ICAgIHN0Y2IsCisJCQkJCQkJCSAgICAgICBjaGstPnJlYy5jaHVua19pZC5pZCk7CisJCQkJCVND
VFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCQl9CisJ
CQkJb3V0Y2hhaW4gPSBzY3RwX2NvcHlfbWJ1ZmNoYWluKGNoay0+ZGF0YSwgb3V0Y2hhaW4sICZl
bmRvdXRjaGFpbiwKKwkJCQkJCQkgICAgICAgKGludCljaGstPnJlYy5jaHVua19pZC5jYW5fdGFr
ZV9kYXRhLAorCQkJCQkJCSAgICAgICBjaGstPnNlbmRfc2l6ZSwgY2hrLT5jb3B5X2J5X3JlZik7
CisJCQkJaWYgKG91dGNoYWluID09IE5VTEwpIHsKKwkJCQkJKnJlYXNvbl9jb2RlID0gODsKKwkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRU5PTUVNKTsKKwkJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJCX0KKwkJCQlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQkJLyogdXBkYXRl
IG91ciBNVFUgc2l6ZSAqLworCQkJCWlmIChtdHUgPiAoY2hrLT5zZW5kX3NpemUgKyBvbXR1KSkK
KwkJCQkJbXR1IC09IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpOworCQkJCWVsc2UKKwkJCQkJbXR1
ID0gMDsKKwkJCQl0b19vdXQgKz0gKGNoay0+c2VuZF9zaXplICsgb210dSk7CisJCQkJLyogRG8g
Y2xlYXIgSVBfREYgPyAqLworCQkJCWlmIChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01F
TlRfT0spIHsKKwkJCQkJbm9fZnJhZ21lbnRmbGcgPSAwOworCQkJCX0KKwkJCQlpZiAoY2hrLT5y
ZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSkKKwkJCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCQkv
KiBNYXJrIHRoaW5ncyB0byBiZSByZW1vdmVkLCBpZiBuZWVkZWQgKi8KKwkJCQlpZiAoKGNoay0+
cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwKKwkJCQkgICAgKGNoay0+
cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykgfHwgLyogRVkgKi8KKwkJ
CQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRCRUFUX1JFUVVFU1QpIHx8
CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVBVF9BQ0spIHx8
CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOKSB8fAorCQkJ
CSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TSFVURE9XTl9BQ0spIHx8CisJCQkJ
ICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElPTl9FUlJPUikgfHwKKwkJ
CQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0FDSykgfHwKKwkJCQkg
ICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0NXUikgfHwKKwkJCQkgICAgKGNo
ay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfUEFDS0VUX0RST1BQRUQpIHx8CisJCQkJICAgIChj
aGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0FTQ09ORl9BQ0spKSB7CisJCQkJCWlmIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUKSB7CisJCQkJCQloYmZs
YWcgPSAxOworCQkJCQl9CisJCQkJCS8qIHJlbW92ZSB0aGVzZSBjaHVua3MgYXQgdGhlIGVuZCAq
LworCQkJCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykg
fHwKKwkJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElWRV9B
Q0spKSB7CisJCQkJCQkvKiB0dXJuIG9mZiB0aGUgdGltZXIgKi8KKwkJCQkJCWlmIChTQ1RQX09T
X1RJTUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1lcikpIHsKKwkJCQkJCQlz
Y3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJCQkJCQlpbnAsIHN0Y2Is
IG5ldCwKKwkJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfT1VUUFVUICsgU0NU
UF9MT0NfMSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJY3RsX2NudCsrOworCQkJCX0gZWxzZSB7
CisJCQkJCS8qCisJCQkJCSAqIE90aGVyIGNodW5rcywgc2luY2UgdGhleSBoYXZlCisJCQkJCSAq
IHRpbWVycyBydW5uaW5nIChpLmUuIENPT0tJRSkKKwkJCQkJICogd2UganVzdCAidHJ1c3QiIHRo
YXQgaXQKKwkJCQkJICogZ2V0cyBzZW50IG9yIHJldHJhbnNtaXR0ZWQuCisJCQkJCSAqLworCQkJ
CQljdGxfY250Kys7CisJCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0NPT0tJ
RV9FQ0hPKSB7CisJCQkJCQljb29raWUgPSAxOworCQkJCQkJbm9fb3V0X2NudCA9IDE7CisJCQkJ
CX0gZWxzZSBpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNITykgeworCQkJ
CQkJLyoKKwkJCQkJCSAqIEluY3JlbWVudCBlY25lIHNlbmQgY291bnQgaGVyZQorCQkJCQkJICog
dGhpcyBtZWFucyB3ZSBtYXkgYmUgb3Zlci16ZWFsb3VzIGluCisJCQkJCQkgKiBvdXIgY291bnRp
bmcgaWYgdGhlIHNlbmQgZmFpbHMsIGJ1dCBpdHMKKwkJCQkJCSAqIHRoZSBiZXN0IHBsYWNlIHRv
IGRvIGl0ICh3ZSB1c2VkIHRvIGRvCisJCQkJCQkgKiBpdCBpbiB0aGUgcXVldWUgb2YgdGhlIGNo
dW5rLCBidXQgdGhhdCBkaWQKKwkJCQkJCSAqIG5vdCB0ZWxsIGhvdyBtYW55IHRpbWVzIGl0IHdh
cyBzZW50LgorCQkJCQkJICovCisJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kZWNuZSk7
CisJCQkJCX0KKwkJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOworCQkJCQlpZiAo
Y2hrLT53aG9UbyA9PSBOVUxMKSB7CisJCQkJCQljaGstPndob1RvID0gbmV0OworCQkJCQkJYXRv
bWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKKwkJCQkJfQorCQkJCQljaGstPnNuZF9j
b3VudCsrOworCQkJCX0KKwkJCQlpZiAobXR1ID09IDApIHsKKwkJCQkJLyoKKwkJCQkJICogT2sg
d2UgYXJlIG91dCBvZiByb29tIGJ1dCB3ZSBjYW4KKwkJCQkJICogb3V0cHV0IHdpdGhvdXQgZWZm
ZWN0aW5nIHRoZQorCQkJCQkgKiBmbGlnaHQgc2l6ZSBzaW5jZSB0aGlzIGxpdHRsZSBndXkKKwkJ
CQkJICogaXMgYSBjb250cm9sIG9ubHkgcGFja2V0LgorCQkJCQkgKi8KKwkJCQkJaWYgKGFzY29u
ZikgeworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLCBpbnAs
IHN0Y2IsIG5ldCk7CisJCQkJCQkvKgorCQkJCQkJICogZG8gTk9UIGNsZWFyIHRoZSBhc2NvbmYK
KwkJCQkJCSAqIGZsYWcgYXMgaXQgaXMgdXNlZCB0byBkbworCQkJCQkJICogYXBwcm9wcmlhdGUg
c291cmNlIGFkZHJlc3MKKwkJCQkJCSAqIHNlbGVjdGlvbi4KKwkJCQkJCSAqLworCQkJCQl9CisJ
CQkJCWlmIChjb29raWUpIHsKKwkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X0NPT0tJRSwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQkJY29va2llID0gMDsKKwkJCQkJfQorCQkJ
CQkvKiBPbmx5IEhCIG9yIEFTQ09ORiBhZHZhbmNlcyB0aW1lICovCisJCQkJCWlmIChoYmZsYWcp
IHsKKwkJCQkJCWlmICgqbm93X2ZpbGxlZCA9PSAwKSB7CisJCQkJCQkJKHZvaWQpU0NUUF9HRVRU
SU1FX1RJTUVWQUwobm93KTsKKwkJCQkJCQkqbm93X2ZpbGxlZCA9IDE7CisJCQkJCQl9CisJCQkJ
CQluZXQtPmxhc3Rfc2VudF90aW1lID0gKm5vdzsKKwkJCQkJCWhiZmxhZyA9IDA7CisJCQkJCX0K
KwkJCQkJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwg
bmV0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsCisJCQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRjaGFpbiwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGF1dGhfb2Zmc2V0LCBhdXRoLAorCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5
aWQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFn
bWVudGZsZywgMCwgYXNjb25mLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKKwkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwg
TlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbmRpZgorCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKKwkJCQkJCS8qIGVycm9yLCB3
ZSBjb3VsZCBub3Qgb3V0cHV0ICovCisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
IkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCQkJCQlpZiAoZnJvbV93aGVyZSA9PSAw
KSB7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnJ1c3IpOworCQkJCQkJ
fQorCQkJCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQkJCQlhc29jLT5pZnBfaGFkX2Vu
b2J1ZiA9IDE7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQkJ
CQkJfQorCQkJCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgeworCQkJCQkJCS8qCisJCQkJ
CQkJICogRGVzdGluYXRpb24gd2VudAorCQkJCQkJCSAqIHVucmVhY2hhYmxlCisJCQkJCQkJICog
ZHVyaW5nIHRoaXMgc2VuZAorCQkJCQkJCSAqLworCQkJCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJv
bV9uZXQoc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJCSpyZWFzb25fY29kZSA9IDc7CisJCQkJ
CQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsK
KwkJCQkJfQorCQkJCQkvKgorCQkJCQkgKiBpbmNyZWFzZSB0aGUgbnVtYmVyIHdlIHNlbnQsIGlm
IGEKKwkJCQkJICogY29va2llIGlzIHNlbnQgd2UgZG9uJ3QgdGVsbCB0aGVtCisJCQkJCSAqIGFu
eSB3YXMgc2VudCBvdXQuCisJCQkJCSAqLworCQkJCQlvdXRjaGFpbiA9IGVuZG91dGNoYWluID0g
TlVMTDsKKwkJCQkJYXV0aCA9IE5VTEw7CisJCQkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJCQkJaWYg
KCFub19vdXRfY250KQorCQkJCQkJKm51bV9vdXQgKz0gY3RsX2NudDsKKwkJCQkJLyogcmVjYWxj
IGEgY2xlYW4gc2xhdGUgYW5kIHNldHVwICovCisJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRy
LnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJ
CQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCQkJbXR1ID0g
bmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJCQltdHUg
PSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJCQkJYnJlYWs7CisjZW5k
aWYKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJLyogVFNOSCAqLworCQkJCQkJCW10dSA9IG5ldC0+
bXR1OworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXRvX291dCA9IDA7CisJCQkJCW5vX2Zy
YWdtZW50ZmxnID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGVycm9yICE9IDApIHsKKwkJ
CS8qIHRyeSBuZXh0IG5ldCAqLworCQkJY29udGludWU7CisJCX0KKwkJLyogSlJJOiBpZiBkZXN0
IGlzIGluIFBGIHN0YXRlLCBkbyBub3Qgc2VuZCBkYXRhIHRvIGl0ICovCisJCWlmICgoYXNvYy0+
c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKKwkJICAgIChuZXQgIT0gc3RjYi0+YXNvYy5hbHRlcm5h
dGUpICYmCisJCSAgICAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgeworCQkJZ290
byBub19kYXRhX2ZpbGw7CisJCX0KKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPj0gbmV0LT5jd25k
KSB7CisJCQlnb3RvIG5vX2RhdGFfZmlsbDsKKwkJfQorCQlpZiAoKGFzb2MtPnNjdHBfY210X29u
X29mZiA+IDApICYmCisJCSAgICAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRp
bmcpICYgU0NUUF9SRUNWX0JVRkZFUl9TUExJVFRJTkcpICYmCisJCSAgICAobmV0LT5mbGlnaHRf
c2l6ZSA+IG1heF9yd25kX3Blcl9kZXN0KSkgeworCQkJZ290byBub19kYXRhX2ZpbGw7CisJCX0K
KwkJLyoKKwkJICogV2UgbmVlZCBhIHNwZWNpZmljIGFjY291bnRpbmcgZm9yIHRoZSB1c2FnZSBv
ZiB0aGUKKwkJICogc2VuZCBidWZmZXIuIFdlIGFsc28gbmVlZCB0byBjaGVjayB0aGUgbnVtYmVy
IG9mIG1lc3NhZ2VzCisJCSAqIHBlciBuZXQuIEZvciBub3csIHRoaXMgaXMgYmV0dGVyIHRoYW4g
bm90aGluZyBhbmQgaXQKKwkJICogZGlzYWJsZWQgYnkgZGVmYXVsdC4uLgorCQkgKi8KKwkJaWYg
KChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCQkgICAgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9idWZmZXJfc3BsaXR0aW5nKSAmIFNDVFBfU0VORF9CVUZGRVJfU1BMSVRUSU5HKSAmJgor
CQkgICAgKG1heF9zZW5kX3Blcl9kZXN0ID4gMCkgJiYKKwkJICAgIChuZXQtPmZsaWdodF9zaXpl
ID4gbWF4X3NlbmRfcGVyX2Rlc3QpKSB7CisJCQlnb3RvIG5vX2RhdGFfZmlsbDsKKwkJfQorCQkv
KioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHRyYW5zbWlzc2lvbiAqLworCQkvKioq
KioqKioqKioqKioqKioqKioqLworCQkvKgorCQkgKiBpZiBBVVRIIGZvciBEQVRBIGlzIHJlcXVp
cmVkIGFuZCBubyBBVVRIIGhhcyBiZWVuIGFkZGVkCisJCSAqIHlldCwgYWNjb3VudCBmb3IgdGhp
cyBpbiB0aGUgbXR1IG5vdy4uLiBpZiBubyBkYXRhIGNhbiBiZQorCQkgKiBidW5kbGVkLCB0aGlz
IGFkanVzdG1lbnQgd29uJ3QgbWF0dGVyIGFueXdheXMgc2luY2UgdGhlCisJCSAqIHBhY2tldCB3
aWxsIGJlIGdvaW5nIG91dC4uLgorCQkgKi8KKwkJZGF0YV9hdXRoX3JlcWQgPSBzY3RwX2F1dGhf
aXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLAorCQkJCQkJCSAgICAgc3RjYi0+YXNvYy5wZWVy
X2F1dGhfY2h1bmtzKTsKKwkJaWYgKGRhdGFfYXV0aF9yZXFkICYmIChhdXRoID09IE5VTEwpKSB7
CisJCQltdHUgLT0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNf
aWQpOworCQl9CisJCS8qIG5vdyBsZXRzIGFkZCBhbnkgZGF0YSB3aXRoaW4gdGhlIE1UVSBjb25z
dHJhaW50cyAqLworCQlzd2l0Y2ggKCgoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRk
ciktPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJaWYgKG5l
dC0+bXR1ID4gU0NUUF9NSU5fVjRfT1ZFUkhFQUQpCisJCQkJb210dSA9IG5ldC0+bXR1IC0gU0NU
UF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQllbHNlCisJCQkJb210dSA9IDA7CisJCQlicmVhazsKKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlpZiAobmV0LT5tdHUgPiBT
Q1RQX01JTl9PVkVSSEVBRCkKKwkJCQlvbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVB
RDsKKwkJCWVsc2UKKwkJCQlvbXR1ID0gMDsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlpZiAobmV0LT5tdHUgPiBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpKSB7CisJCQkJb210dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKTsKKwkJCX0gZWxzZSB7CisJCQkJb210dSA9IDA7CisJCQl9CisJCQlicmVhazsK
KyNlbmRpZgorCQlkZWZhdWx0OgorCQkJLyogVFNOSCAqLworCQkJb210dSA9IDA7CisJCQlicmVh
azsKKwkJfQorCQlpZiAoKCgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVO
KSB8fAorCQkgICAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9X
Tl9SRUNFSVZFRCkpICYmCisJCSAgICAgKHNraXBfZGF0YV9mb3JfdGhpc19uZXQgPT0gMCkpIHx8
CisJCSAgICAoY29va2llKSkgeworCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNl
bmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQkJCWlmIChub19kYXRhX2NodW5rcykgewor
CQkJCQkvKiBsZXQgb25seSBjb250cm9sIGdvIG91dCAqLworCQkJCQkqcmVhc29uX2NvZGUgPSAx
OworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPj0gbmV0LT5j
d25kKSB7CisJCQkJCS8qIHNraXAgdGhpcyBuZXQsIG5vIHJvb20gZm9yIGRhdGEgKi8KKwkJCQkJ
KnJlYXNvbl9jb2RlID0gMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICgoY2hrLT53aG9U
byAhPSBOVUxMKSAmJgorCQkJCSAgICAoY2hrLT53aG9UbyAhPSBuZXQpKSB7CisJCQkJCS8qIERv
bid0IHNlbmQgdGhlIGNodW5rIG9uIHRoaXMgbmV0ICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0K
KworCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkgeworCQkJCQlpZiAoKGFzb2Mt
PmFsdGVybmF0ZSkgJiYKKwkJCQkJICAgIChhc29jLT5hbHRlcm5hdGUgIT0gbmV0KSAmJgorCQkJ
CQkgICAgKGNoay0+d2hvVG8gPT0gTlVMTCkpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9IGVs
c2UgaWYgKChuZXQgIT0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbikgJiYKKwkJCQkJCSAgIChh
c29jLT5hbHRlcm5hdGUgPT0gTlVMTCkgJiYKKwkJCQkJCSAgIChjaGstPndob1RvID09IE5VTEwp
KSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoKGNoay0+c2VuZF9z
aXplID4gb210dSkgJiYgKChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spID09
IDApKSB7CisJCQkJCS8qLQorCQkJCQkgKiBzdHJhbmdlLCB3ZSBoYXZlIGEgY2h1bmsgdGhhdCBp
cworCQkJCQkgKiB0byBiaWcgZm9yIGl0cyBkZXN0aW5hdGlvbiBhbmQKKwkJCQkJICogeWV0IG5v
IGZyYWdtZW50IG9rIGZsYWcuCisJCQkJCSAqIFNvbWV0aGluZyB3ZW50IHdyb25nIHdoZW4gdGhl
CisJCQkJCSAqIFBNVFUgY2hhbmdlZC4uLndlIGRpZCBub3QgbWFyaworCQkJCQkgKiB0aGlzIGNo
dW5rIGZvciBzb21lIHJlYXNvbj8/IEkKKwkJCQkJICogd2lsbCBmaXggaXQgaGVyZSBieSBsZXR0
aW5nIElQCisJCQkJCSAqIGZyYWdtZW50IGl0IGZvciBub3cgYW5kIHByaW50aW5nCisJCQkJCSAq
IGEgd2FybmluZy4gVGhpcyByZWFsbHkgc2hvdWxkIG5vdAorCQkJCQkgKiBoYXBwZW4gLi4uCisJ
CQkJCSAqLworCQkJCQlTQ1RQX1BSSU5URigiV2FybmluZyBjaHVuayBvZiAlZCBieXRlcyA+IG10
dTolZCBhbmQgeWV0IFBNVFUgZGlzYyBtaXNzZWRcbiIsCisJCQkJCQkgICAgY2hrLT5zZW5kX3Np
emUsIG10dSk7CisJCQkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJ
CQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRl
bHkpICYmCisJCQkJICAgICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJ
TkcpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJCQkJc3RydWN0IHNjdHBf
ZGF0YV9jaHVuayAqZGNoa2g7CisKKwkJCQkJZGNoa2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0
IHNjdHBfZGF0YV9jaHVuayAqKTsKKwkJCQkJZGNoa2gtPmNoLmNodW5rX2ZsYWdzIHw9IFNDVFBf
REFUQV9TQUNLX0lNTUVESUFURUxZOworCQkJCX0KKwkJCQlpZiAoKChjaGstPnNlbmRfc2l6ZSA8
PSBtdHUpICYmIChjaGstPnNlbmRfc2l6ZSA8PSByX210dSkpIHx8CisJCQkJICAgICgoY2hrLT5m
bGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSAmJiAoY2hrLT5zZW5kX3NpemUgPD0gYXNv
Yy0+cGVlcnNfcnduZCkpKSB7CisJCQkJCS8qIG9rIHdlIHdpbGwgYWRkIHRoaXMgb25lICovCisK
KwkJCQkJLyoKKwkJCQkJICogQWRkIGFuIEFVVEggY2h1bmssIGlmIGNodW5rCisJCQkJCSAqIHJl
cXVpcmVzIGl0LCBzYXZlIHRoZSBvZmZzZXQgaW50bworCQkJCQkgKiB0aGUgY2hhaW4gZm9yIEFV
VEgKKwkJCQkJICovCisJCQkJCWlmIChkYXRhX2F1dGhfcmVxZCkgeworCQkJCQkJaWYgKGF1dGgg
PT0gTlVMTCkgeworCQkJCQkJCW91dGNoYWluID0gc2N0cF9hZGRfYXV0aF9jaHVuayhvdXRjaGFp
biwKKwkJCQkJCQkJCQkgICAgICAgJmVuZG91dGNoYWluLAorCQkJCQkJCQkJCSAgICAgICAmYXV0
aCwKKwkJCQkJCQkJCQkgICAgICAgJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkJCSAgICAgICBzdGNi
LAorCQkJCQkJCQkJCSAgICAgICBTQ1RQX0RBVEEpOworCQkJCQkJCWF1dGhfa2V5aWQgPSBjaGst
PmF1dGhfa2V5aWQ7CisJCQkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJCQkJCVNDVFBfU1RBVF9J
TkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCQkJCX0gZWxzZSBpZiAo
b3ZlcnJpZGVfb2spIHsKKwkJCQkJCQkvKiB1c2UgdGhpcyBkYXRhJ3Mga2V5aWQgKi8KKwkJCQkJ
CQlhdXRoX2tleWlkID0gY2hrLT5hdXRoX2tleWlkOworCQkJCQkJCW92ZXJyaWRlX29rID0gMDsK
KwkJCQkJCX0gZWxzZSBpZiAoYXV0aF9rZXlpZCAhPSBjaGstPmF1dGhfa2V5aWQpIHsKKwkJCQkJ
CQkvKiBkaWZmZXJlbnQga2V5aWQsIHNvIGRvbmUgYnVuZGxpbmcgKi8KKwkJCQkJCQlicmVhazsK
KwkJCQkJCX0KKwkJCQkJfQorCQkJCQlvdXRjaGFpbiA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hr
LT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWluLCAwLAorCQkJCQkJCQkgICAgICAgY2hrLT5z
ZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOworCQkJCQlpZiAob3V0Y2hhaW4gPT0gTlVMTCkg
eworCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJObyBtZW1vcnk/XG4iKTsKKwkJ
CQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsK
KwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2Is
IG5ldCk7CisJCQkJCQl9CisJCQkJCQkqcmVhc29uX2NvZGUgPSAzOworCQkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVN
KTsKKwkJCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCQkJfQorCQkJCQkvKiB1cGF0ZSBvdXIgTVRV
IHNpemUgKi8KKwkJCQkJLyogRG8gY2xlYXIgSVBfREYgPyAqLworCQkJCQlpZiAoY2hrLT5mbGFn
cyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSB7CisJCQkJCQlub19mcmFnbWVudGZsZyA9IDA7
CisJCQkJCX0KKwkJCQkJLyogdW5zaWduZWQgc3VidHJhY3Rpb24gb2YgbXR1ICovCisJCQkJCWlm
IChtdHUgPiBjaGstPnNlbmRfc2l6ZSkKKwkJCQkJCW10dSAtPSBjaGstPnNlbmRfc2l6ZTsKKwkJ
CQkJZWxzZQorCQkJCQkJbXR1ID0gMDsKKwkJCQkJLyogdW5zaWduZWQgc3VidHJhY3Rpb24gb2Yg
cl9tdHUgKi8KKwkJCQkJaWYgKHJfbXR1ID4gY2hrLT5zZW5kX3NpemUpCisJCQkJCQlyX210dSAt
PSBjaGstPnNlbmRfc2l6ZTsKKwkJCQkJZWxzZQorCQkJCQkJcl9tdHUgPSAwOworCisJCQkJCXRv
X291dCArPSBjaGstPnNlbmRfc2l6ZTsKKwkJCQkJaWYgKCh0b19vdXQgPiBteF9tdHUpICYmIG5v
X2ZyYWdtZW50ZmxnKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQkJcGFuaWMoIkV4Y2VlZGlu
ZyBtdHUgb2YgJWQgb3V0IHNpemUgaXMgJWQiLCBteF9tdHUsIHRvX291dCk7CisjZWxzZQorCQkJ
CQkJU0NUUF9QUklOVEYoIkV4Y2VlZGluZyBtdHUgb2YgJWQgb3V0IHNpemUgaXMgJWRcbiIsCisJ
CQkJCQkJICAgIG14X210dSwgdG9fb3V0KTsKKyNlbmRpZgorCQkJCQl9CisJCQkJCWNoay0+d2lu
ZG93X3Byb2JlID0gMDsKKwkJCQkJZGF0YV9saXN0W2J1bmRsZV9hdCsrXSA9IGNoazsKKwkJCQkJ
aWYgKGJ1bmRsZV9hdCA+PSBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSB7CisJCQkJCQlicmVhazsK
KwkJCQkJfQorCQkJCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7CisJ
CQkJCQlpZiAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkg
PT0gMCkgeworCQkJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRvcmRlcmNo
dW5rcyk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChz
Y3Rwc19vdXR1bm9yZGVyY2h1bmtzKTsKKwkJCQkJCX0KKwkJCQkJCWlmICgoKGNoay0+cmVjLmRh
dGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgPT0gU0NUUF9EQVRBX0xBU1RfRlJB
RykgJiYKKwkJCQkJCSAgICAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJ
UlNUX0ZSQUcpID09IDApKQorCQkJCQkJCS8qIENvdW50IG51bWJlciBvZiB1c2VyIG1zZydzIHRo
YXQgd2VyZSBmcmFnbWVudGVkCisJCQkJCQkJICogd2UgZG8gdGhpcyBieSBjb3VudGluZyB3aGVu
IHdlIHNlZSBhIExBU1QgZnJhZ21lbnQKKwkJCQkJCQkgKiBvbmx5LgorCQkJCQkJCSAqLworCQkJ
CQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19mcmFndXNybXNncyk7CisJCQkJCX0K
KwkJCQkJaWYgKChtdHUgPT0gMCkgfHwgKHJfbXR1ID09IDApIHx8IChvbmVfY2h1bmspKSB7CisJ
CQkJCQlpZiAoKG9uZV9jaHVuaykgJiYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDApKSB7
CisJCQkJCQkJZGF0YV9saXN0WzBdLT53aW5kb3dfcHJvYmUgPSAxOworCQkJCQkJCW5ldC0+d2lu
ZG93X3Byb2JlID0gMTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfSBlbHNl
IHsKKwkJCQkJLyoKKwkJCQkJICogTXVzdCBiZSBzZW50IGluIG9yZGVyIG9mIHRoZQorCQkJCQkg
KiBUU04ncyAob24gYSBuZXR3b3JrKQorCQkJCQkgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fQkvKiBmb3IgKGNodW5rIGdhdGhlciBsb29wIGZvciB0aGlzIG5ldCkgKi8KKwkJfQkJLyogaWYg
YXNvYy5zdGF0ZSBPUEVOICovCisJbm9fZGF0YV9maWxsOgorCQkvKiBJcyB0aGVyZSBzb21ldGhp
bmcgdG8gc2VuZCBmb3IgdGhpcyBkZXN0aW5hdGlvbj8gKi8KKwkJaWYgKG91dGNoYWluKSB7CisJ
CQkvKiBXZSBtYXkgbmVlZCB0byBzdGFydCBhIGNvbnRyb2wgdGltZXIgb3IgdHdvICovCisJCQlp
ZiAoYXNjb25mKSB7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNDT05G
LCBpbnAsCisJCQkJCQkgc3RjYiwgbmV0KTsKKwkJCQkvKgorCQkJCSAqIGRvIE5PVCBjbGVhciB0
aGUgYXNjb25mIGZsYWcgYXMgaXQgaXMgdXNlZAorCQkJCSAqIHRvIGRvIGFwcHJvcHJpYXRlIHNv
dXJjZSBhZGRyZXNzIHNlbGVjdGlvbi4KKwkJCQkgKi8KKwkJCX0KKwkJCWlmIChjb29raWUpIHsK
KwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9DT09LSUUsIGlucCwgc3RjYiwg
bmV0KTsKKwkJCQljb29raWUgPSAwOworCQkJfQorCQkJLyogbXVzdCBzdGFydCBhIHNlbmQgdGlt
ZXIgaWYgZGF0YSBpcyBiZWluZyBzZW50ICovCisJCQlpZiAoYnVuZGxlX2F0ICYmICghU0NUUF9P
U19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpKSB7CisJCQkJLyoKKwkJCQkg
KiBubyB0aW1lciBydW5uaW5nIG9uIHRoaXMgZGVzdGluYXRpb24KKwkJCQkgKiByZXN0YXJ0IGl0
LgorCQkJCSAqLworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlu
cCwgc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChidW5kbGVfYXQgfHwgaGJmbGFnKSB7CisJCQkJ
LyogRm9yIGRhdGEvYXNjb25mIGFuZCBoYiBzZXQgdGltZSAqLworCQkJCWlmICgqbm93X2ZpbGxl
ZCA9PSAwKSB7CisJCQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKG5vdyk7CisJCQkJCSpu
b3dfZmlsbGVkID0gMTsKKwkJCQl9CisJCQkJbmV0LT5sYXN0X3NlbnRfdGltZSA9ICpub3c7CisJ
CQl9CisJCQkvKiBOb3cgc2VuZCBpdCwgaWYgdGhlcmUgaXMgYW55dGhpbmcgdG8gc2VuZCA6PiAq
LworCQkJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRk
ciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjaGFpbiwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX29mZnNldCwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfa2V5aWQsCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZnJhZ21lbnRmbGcsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVuZGxlX2F0LAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY29uZiwKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJw
b3J0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0b25sKHN0
Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBuZXQtPnBvcnQsIE5VTEwsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKKwkJ
CQkvKiBlcnJvciwgd2UgY291bGQgbm90IG91dHB1dCAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJCQlpZiAoZnJvbV93
aGVyZSA9PSAwKSB7CisJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xvd2xldmVsZXJydXNyKTsK
KwkJCQl9CisJCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQkJYXNvYy0+aWZwX2hhZF9l
bm9idWYgPSAxOworCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7CisJCQkJ
fQorCQkJCWlmIChlcnJvciA9PSBFSE9TVFVOUkVBQ0gpIHsKKwkJCQkJLyoKKwkJCQkJICogRGVz
dGluYXRpb24gd2VudCB1bnJlYWNoYWJsZQorCQkJCQkgKiBkdXJpbmcgdGhpcyBzZW5kCisJCQkJ
CSAqLworCQkJCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7CisJCQkJfQor
CQkJCSpyZWFzb25fY29kZSA9IDY7CisJCQkJLyotCisJCQkJICogSSBhZGQgdGhpcyBsaW5lIHRv
IGJlIHBhcmFub2lkLiBBcyBmYXIgYXMKKwkJCQkgKiBJIGNhbiB0ZWxsIHRoZSBjb250aW51ZSwg
dGFrZXMgdXMgYmFjayB0bworCQkJCSAqIHRoZSB0b3Agb2YgdGhlIGZvciwgYnV0IGp1c3QgdG8g
bWFrZSBzdXJlCisJCQkJICogSSB3aWxsIHJlc2V0IHRoZXNlIGFnYWluIGhlcmUuCisJCQkJICov
CisJCQkJY3RsX2NudCA9IGJ1bmRsZV9hdCA9IDA7CisJCQkJY29udGludWU7IC8qIFRoaXMgdGFr
ZXMgdXMgYmFjayB0byB0aGUgZm9yKCkgZm9yIHRoZSBuZXRzLiAqLworCQkJfSBlbHNlIHsKKwkJ
CQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJCQl9CisJCQllbmRvdXRjaGFpbiA9IE5VTEw7
CisJCQlhdXRoID0gTlVMTDsKKwkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJCWlmICghbm9fb3V0X2Nu
dCkgeworCQkJCSpudW1fb3V0ICs9IChjdGxfY250ICsgYnVuZGxlX2F0KTsKKwkJCX0KKwkJCWlm
IChidW5kbGVfYXQpIHsKKwkJCQkvKiBzZXR1cCBmb3IgYSBSVE8gbWVhc3VyZW1lbnQgKi8KKwkJ
CQl0c25zX3NlbnQgPSBkYXRhX2xpc3RbMF0tPnJlYy5kYXRhLnRzbjsKKwkJCQkvKiBmaWxsIHRp
bWUgaWYgbm90IGFscmVhZHkgZmlsbGVkICovCisJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsK
KwkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfbGFzdF9zZW50KTsK
KwkJCQkJKm5vd19maWxsZWQgPSAxOworCQkJCQkqbm93ID0gYXNvYy0+dGltZV9sYXN0X3NlbnQ7
CisJCQkJfSBlbHNlIHsKKwkJCQkJYXNvYy0+dGltZV9sYXN0X3NlbnQgPSAqbm93OworCQkJCX0K
KwkJCQlpZiAobmV0LT5ydG9fbmVlZGVkKSB7CisJCQkJCWRhdGFfbGlzdFswXS0+ZG9fcnR0ID0g
MTsKKwkJCQkJbmV0LT5ydG9fbmVlZGVkID0gMDsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1Jf
Qlkoc2N0cHNfc2VuZGRhdGEsIGJ1bmRsZV9hdCk7CisJCQkJc2N0cF9jbGVhbl91cF9kYXRhbGlz
dChzdGNiLCBhc29jLCBkYXRhX2xpc3QsIGJ1bmRsZV9hdCwgbmV0KTsKKwkJCX0KKwkJCWlmIChv
bmVfY2h1bmspIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlz
Y3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgdHNuc19zZW50LCBTQ1RQX0NXTkRfTE9HX0ZST01fU0VO
RCk7CisJCX0KKwl9CisJaWYgKG9sZF9zdGFydF9hdCA9PSBOVUxMKSB7CisJCW9sZF9zdGFydF9h
dCA9IHN0YXJ0X2F0OworCQlzdGFydF9hdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5uZXRzKTsKKwkJ
aWYgKG9sZF9zdGFydF9hdCkKKwkJCWdvdG8gYWdhaW5fb25lX21vcmVfdGltZTsKKwl9CisKKwkv
KgorCSAqIEF0IHRoZSBlbmQgdGhlcmUgc2hvdWxkIGJlIG5vIE5PTiB0aW1lZCBjaHVua3MgaGFu
Z2luZyBvbiB0aGlzCisJICogcXVldWUuCisJICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIG5ldCwgKm51bV9vdXQsIFNDVFBfQ1dORF9MT0dfRlJPTV9TRU5EKTsKKwl9
CisJaWYgKCgqbnVtX291dCA9PSAwKSAmJiAoKnJlYXNvbl9jb2RlID09IDApKSB7CisJCSpyZWFz
b25fY29kZSA9IDQ7CisJfSBlbHNlIHsKKwkJKnJlYXNvbl9jb2RlID0gNTsKKwl9CisJc2N0cF9j
bGVhbl91cF9jdGwoc3RjYiwgYXNvYywgc29fbG9ja2VkKTsKKwlyZXR1cm4gKDApOworfQorCit2
b2lkCitzY3RwX3F1ZXVlX29wX2VycihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVm
ICpvcF9lcnIpCit7CisJLyotCisJICogUHJlcGVuZCBhIE9QRVJBVElPTkFMX0VSUk9SIGNodW5r
IGhlYWRlciBhbmQgcHV0IG9uIHRoZSBlbmQgb2YKKwkgKiB0aGUgY29udHJvbCBjaHVuayBxdWV1
ZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOworCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNoazsKKwlzdHJ1Y3QgbWJ1ZiAqbWF0LCAqbGFzdF9tYnVmOworCXVpbnQzMl90IGNo
dW5rX2xlbmd0aDsKKwl1aW50MTZfdCBwYWRkaW5nX2xlbmd0aDsKKworCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKHN0Y2IpOworCVNDVFBfQlVGX1BSRVBFTkQob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpLCBNX05PV0FJVCk7CisJaWYgKG9wX2VyciA9PSBOVUxMKSB7CisJCXJldHVy
bjsKKwl9CisJbGFzdF9tYnVmID0gTlVMTDsKKwljaHVua19sZW5ndGggPSAwOworCWZvciAobWF0
ID0gb3BfZXJyOyBtYXQgIT0gTlVMTDsgbWF0ID0gU0NUUF9CVUZfTkVYVChtYXQpKSB7CisJCWNo
dW5rX2xlbmd0aCArPSBTQ1RQX0JVRl9MRU4obWF0KTsKKwkJaWYgKFNDVFBfQlVGX05FWFQobWF0
KSA9PSBOVUxMKSB7CisJCQlsYXN0X21idWYgPSBtYXQ7CisJCX0KKwl9CisJaWYgKGNodW5rX2xl
bmd0aCA+IFNDVFBfTUFYX0NIVU5LX0xFTkdUSCkgeworCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsK
KwkJcmV0dXJuOworCX0KKwlwYWRkaW5nX2xlbmd0aCA9IGNodW5rX2xlbmd0aCAlIDQ7CisJaWYg
KHBhZGRpbmdfbGVuZ3RoICE9IDApIHsKKwkJcGFkZGluZ19sZW5ndGggPSA0IC0gcGFkZGluZ19s
ZW5ndGg7CisJfQorCWlmIChwYWRkaW5nX2xlbmd0aCAhPSAwKSB7CisJCWlmIChzY3RwX2FkZF9w
YWRfdG9tYnVmKGxhc3RfbWJ1ZiwgcGFkZGluZ19sZW5ndGgpID09IE5VTEwpIHsKKwkJCXNjdHBf
bV9mcmVlbShvcF9lcnIpOworCQkJcmV0dXJuOworCQl9CisJfQorCXNjdHBfYWxsb2NfYV9jaHVu
ayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJ
c2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCXJldHVybjsKKwl9CisJY2hrLT5jb3B5X2J5X3JlZiA9
IDA7CisJY2hrLT5zZW5kX3NpemUgPSAodWludDE2X3QpY2h1bmtfbGVuZ3RoOworCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPmFz
b2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPmRhdGEgPSBvcF9lcnI7CisJY2hrLT53aG9UbyA9IE5V
TEw7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX09QRVJBVElPTl9FUlJPUjsKKwljaGst
PnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKKwloZHIgPSBtdG9kKG9wX2Vyciwgc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVua190eXBlID0gU0NUUF9PUEVSQVRJT05f
RVJST1I7CisJaGRyLT5jaHVua19mbGFncyA9IDA7CisJaGRyLT5jaHVua19sZW5ndGggPSBodG9u
cyhjaGstPnNlbmRfc2l6ZSk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJv
bF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2Nu
dCsrOworfQorCitpbnQKK3NjdHBfc2VuZF9jb29raWVfZWNobyhzdHJ1Y3QgbWJ1ZiAqbSwKKyAg
ICBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQpCit7CisJLyotCisJICogcHVsbCBvdXQgdGhlIGNvb2tpZSBhbmQgcHV0IGl0
IGF0IHRoZSBmcm9udCBvZiB0aGUgY29udHJvbCBjaHVuaworCSAqIHF1ZXVlLgorCSAqLworCWlu
dCBhdDsKKwlzdHJ1Y3QgbWJ1ZiAqY29va2llOworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBhcmFt
LCAqcGhkcjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOworCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNoazsKKwl1aW50MTZfdCBwdHlwZSwgcGxlbjsKKworCVNDVFBfVENCX0xPQ0tfQVNT
RVJUKHN0Y2IpOworCS8qIEZpcnN0IGZpbmQgdGhlIGNvb2tpZSBpbiB0aGUgcGFyYW0gYXJlYSAq
LworCWNvb2tpZSA9IE5VTEw7CisJYXQgPSBvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5p
dF9jaHVuayk7CisJZm9yICg7OykgeworCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBh
dCwgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKwkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJcmV0
dXJuICgtMyk7CisJCX0KKwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJcGxl
biA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisJCWlmIChwdHlwZSA9PSBTQ1RQX1NUQVRF
X0NPT0tJRSkgeworCQkJaW50IHBhZDsKKworCQkJLyogZm91bmQgdGhlIGNvb2tpZSAqLworCQkJ
aWYgKChwYWQgPSAocGxlbiAlIDQpKSkgeworCQkJCXBsZW4gKz0gNCAtIHBhZDsKKwkJCX0KKwkJ
CWNvb2tpZSA9IFNDVFBfTV9DT1BZTShtLCBhdCwgcGxlbiwgTV9OT1dBSVQpOworCQkJaWYgKGNv
b2tpZSA9PSBOVUxMKSB7CisJCQkJLyogTm8gbWVtb3J5ICovCisJCQkJcmV0dXJuICgtMik7CisJ
CQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3Rw
X2xvZ19tYmMoY29va2llLCBTQ1RQX01CVUZfSUNPUFkpOworCQkJfQorI2VuZGlmCisJCQlicmVh
azsKKwkJfQorCQlhdCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwl9CisJLyogb2ssIHdlIGdvdCB0
aGUgY29va2llIGxldHMgY2hhbmdlIGl0IGludG8gYSBjb29raWUgZWNobyBjaHVuayAqLworCS8q
IGZpcnN0IHRoZSBjaGFuZ2UgZnJvbSBwYXJhbSB0byBjb29raWUgKi8KKwloZHIgPSBtdG9kKGNv
b2tpZSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVua190eXBlID0gU0NUUF9D
T09LSUVfRUNITzsKKwloZHItPmNodW5rX2ZsYWdzID0gMDsKKwkvKiBnZXQgdGhlIGNodW5rIHN0
dWZmIG5vdyBhbmQgcGxhY2UgaXQgaW4gdGhlIEZST05UIG9mIHRoZSBxdWV1ZSAqLworCXNjdHBf
YWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBt
ZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKGNvb2tpZSk7CisJCXJldHVybiAoLTUpOworCX0KKwlj
aGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfQ09PS0lF
X0VDSE87CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFn
cyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOworCWNoay0+c2VuZF9zaXplID0gcGxlbjsKKwlj
aGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJ
Y2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gY29va2llOworCWNoay0+d2hv
VG8gPSBuZXQ7CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJ
VEFJTFFfSU5TRVJUX0hFQUQoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNj
dHBfbmV4dCk7CisJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCXJldHVybiAoMCk7Cit9
CisKK3ZvaWQKK3NjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KyAgICBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICBpbnQgb2Zmc2V0LAorICAgIGludCBjaGtfbGVuZ3Ro
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAqIHRha2UgYSBIQiByZXF1
ZXN0IGFuZCBtYWtlIGl0IGludG8gYSBIQiBhY2sgYW5kIHNlbmQgaXQuCisJICovCisJc3RydWN0
IG1idWYgKm91dGNoYWluOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaGRyOworCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKmNoazsKKworCisJaWYgKG5ldCA9PSBOVUxMKQorCQkvKiBtdXN0IGhh
dmUgYSBuZXQgcG9pbnRlciAqLworCQlyZXR1cm47CisKKwlvdXRjaGFpbiA9IFNDVFBfTV9DT1BZ
TShtLCBvZmZzZXQsIGNoa19sZW5ndGgsIE1fTk9XQUlUKTsKKwlpZiAob3V0Y2hhaW4gPT0gTlVM
TCkgeworCQkvKiBnYWsgb3V0IG9mIG1lbW9yeSAqLworCQlyZXR1cm47CisJfQorI2lmZGVmIFND
VFBfTUJVRl9MT0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmMob3V0Y2hhaW4s
IFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJY2hkciA9IG10b2Qob3V0Y2hhaW4sIHN0
cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoZHItPmNodW5rX3R5cGUgPSBTQ1RQX0hFQVJUQkVB
VF9BQ0s7CisJY2hkci0+Y2h1bmtfZmxhZ3MgPSAwOworCWlmIChjaGtfbGVuZ3RoICUgNCkgewor
CQkvKiBuZWVkIHBhZCAqLworCQl1aW50MzJfdCBjcHRoaXMgPSAwOworCQlpbnQgcGFkbGVuOwor
CisJCXBhZGxlbiA9IDQgLSAoY2hrX2xlbmd0aCAlIDQpOworCQltX2NvcHliYWNrKG91dGNoYWlu
LCBjaGtfbGVuZ3RoLCBwYWRsZW4sIChjYWRkcl90KSZjcHRoaXMpOworCX0KKwlzY3RwX2FsbG9j
X2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5
ICovCisJCXNjdHBfbV9mcmVlbShvdXRjaGFpbik7CisJCXJldHVybjsKKwl9CisJY2hrLT5jb3B5
X2J5X3JlZiA9IDA7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX0hFQVJUQkVBVF9BQ0s7
CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7CisJY2hrLT5mbGFncyA9IDA7
CisJY2hrLT5zZW5kX3NpemUgPSBjaGtfbGVuZ3RoOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNv
YzsKKwljaGstPmRhdGEgPSBvdXRjaGFpbjsKKwljaGstPndob1RvID0gbmV0OworCWF0b21pY19h
ZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVRBSUxRX0lOU0VSVF9UQUlMKCZj
aGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCWNoay0+YXNv
Yy0+Y3RybF9xdWV1ZV9jbnQrKzsKK30KKwordm9pZAorc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3Ry
dWN0IHNjdHBfdGNiICpzdGNiKQoreworCS8qIGZvcm11bGF0ZSBhbmQgcXVldWUgYSBjb29raWUt
YWNrIGJhY2sgdG8gc2VuZGVyICovCisJc3RydWN0IG1idWYgKmNvb2tpZV9hY2s7CisJc3RydWN0
IHNjdHBfY2h1bmtoZHIgKmhkcjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlT
Q1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKworCWNvb2tpZV9hY2sgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0hFQURFUik7CisJaWYgKGNvb2tpZV9hY2sgPT0gTlVMTCkgeworCQkvKiBubyBtYnVmJ3MgKi8K
KwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNvb2tpZV9hY2ssIFNDVFBfTUlOX09W
RVJIRUFEKTsKKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5V
TEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShjb29raWVfYWNrKTsKKwkJ
cmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5p
ZCA9IFNDVFBfQ09PS0lFX0FDSzsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0g
MTsKKwljaGstPmZsYWdzID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9jaHVua2hkcik7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5z
bmRfY291bnQgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+ZGF0YSA9IGNv
b2tpZV9hY2s7CisJaWYgKGNoay0+YXNvYy0+bGFzdF9jb250cm9sX2NodW5rX2Zyb20gIT0gTlVM
TCkgeworCQljaGstPndob1RvID0gY2hrLT5hc29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsK
KwkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJfSBlbHNlIHsK
KwkJY2hrLT53aG9UbyA9IE5VTEw7CisJfQorCWhkciA9IG10b2QoY29va2llX2Fjaywgc3RydWN0
IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVua190eXBlID0gU0NUUF9DT09LSUVfQUNLOwor
CWhkci0+Y2h1bmtfZmxhZ3MgPSAwOworCWhkci0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5z
ZW5kX3NpemUpOworCVNDVFBfQlVGX0xFTihjb29raWVfYWNrKSA9IGNoay0+c2VuZF9zaXplOwor
CVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBz
Y3RwX25leHQpOworCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKKwlyZXR1cm47Cit9CisK
Kwordm9pZAorc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGEgU0hVVERP
V04tQUNLIGJhY2sgdG8gdGhlIHNlbmRlciAqLworCXN0cnVjdCBtYnVmICptX3NodXRkb3duX2Fj
azsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmFja19jcDsKKwlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGs7CisKKwltX3NodXRkb3duX2FjayA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rKSwgMCwgTV9OT1dBSVQs
IDEsIE1UX0hFQURFUik7CisJaWYgKG1fc2h1dGRvd25fYWNrID09IE5VTEwpIHsKKwkJLyogbm8g
bWJ1ZidzICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfUkVTVl9VRihtX3NodXRkb3duX2Fj
aywgU0NUUF9NSU5fT1ZFUkhFQUQpOworCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwor
CWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1f
c2h1dGRvd25fYWNrKTsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwlj
aGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU0hVVERPV05fQUNLOworCWNoay0+cmVjLmNodW5r
X2lkLmNhbl90YWtlX2RhdGEgPSAxOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+c2VuZF9zaXpl
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT5mbGFncyA9IDA7CisJY2hr
LT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gbV9zaHV0ZG93bl9hY2s7CisJY2hr
LT53aG9UbyA9IG5ldDsKKwlpZiAoY2hrLT53aG9UbykgeworCQlhdG9taWNfYWRkX2ludCgmY2hr
LT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwl9CisJYWNrX2NwID0gbXRvZChtX3NodXRkb3duX2Fj
aywgc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rICopOworCWFja19jcC0+Y2guY2h1bmtf
dHlwZSA9IFNDVFBfU0hVVERPV05fQUNLOworCWFja19jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwor
CWFja19jcC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOworCVNDVFBf
QlVGX0xFTihtX3NodXRkb3duX2FjaykgPSBjaGstPnNlbmRfc2l6ZTsKKwlUQUlMUV9JTlNFUlRf
VEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlj
aGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3Nl
bmRfc2h1dGRvd24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Cit7CisJLyogZm9ybXVsYXRlIGFuZCBxdWV1ZSBhIFNIVVRET1dOIHRvIHRoZSBzZW5kZXIgKi8K
KwlzdHJ1Y3QgbWJ1ZiAqbV9zaHV0ZG93bjsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAq
c2h1dGRvd25fY3A7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJVEFJTFFfRk9S
RUFDSChjaGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dOKSB7CisJCQkvKiBXZSBh
bHJlYWR5IGhhdmUgYSBTSFVURE9XTiBxdWV1ZWQuIFJldXNlIGl0LiAqLworCQkJaWYgKGNoay0+
d2hvVG8pIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQkJY2hr
LT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoY2hrID09IE5V
TEwpIHsKKwkJbV9zaHV0ZG93biA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0
IHNjdHBfc2h1dGRvd25fY2h1bmspLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwkJaWYg
KG1fc2h1dGRvd24gPT0gTlVMTCkgeworCQkJLyogbm8gbWJ1ZidzICovCisJCQlyZXR1cm47CisJ
CX0KKwkJU0NUUF9CVUZfUkVTVl9VRihtX3NodXRkb3duLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJ
CXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJ
CS8qIG5vIG1lbW9yeSAqLworCQkJc2N0cF9tX2ZyZWVtKG1fc2h1dGRvd24pOworCQkJcmV0dXJu
OworCQl9CisJCWNoay0+Y29weV9ieV9yZWYgPSAwOworCQljaGstPnJlYy5jaHVua19pZC5pZCA9
IFNDVFBfU0hVVERPV047CisJCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOwor
CQljaGstPmZsYWdzID0gMDsKKwkJY2hrLT5zZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
c2h1dGRvd25fY2h1bmspOworCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwkJ
Y2hrLT5zbmRfY291bnQgPSAwOworCQljaGstPmZsYWdzID0gMDsKKwkJY2hrLT5hc29jID0gJnN0
Y2ItPmFzb2M7CisJCWNoay0+ZGF0YSA9IG1fc2h1dGRvd247CisJCWNoay0+d2hvVG8gPSBuZXQ7
CisJCWlmIChjaGstPndob1RvKSB7CisJCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVm
X2NvdW50LCAxKTsKKwkJfQorCQlzaHV0ZG93bl9jcCA9IG10b2QobV9zaHV0ZG93biwgc3RydWN0
IHNjdHBfc2h1dGRvd25fY2h1bmsgKik7CisJCXNodXRkb3duX2NwLT5jaC5jaHVua190eXBlID0g
U0NUUF9TSFVURE9XTjsKKwkJc2h1dGRvd25fY3AtPmNoLmNodW5rX2ZsYWdzID0gMDsKKwkJc2h1
dGRvd25fY3AtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwkJc2h1
dGRvd25fY3AtPmN1bXVsYXRpdmVfdHNuX2FjayA9IGh0b25sKHN0Y2ItPmFzb2MuY3VtdWxhdGl2
ZV90c24pOworCQlTQ1RQX0JVRl9MRU4obV9zaHV0ZG93bikgPSBjaGstPnNlbmRfc2l6ZTsKKwkJ
VEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNj
dHBfbmV4dCk7CisJCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKKwl9IGVsc2UgeworCQlU
QUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4
dCk7CisJCWNoay0+d2hvVG8gPSBuZXQ7CisJCWlmIChjaGstPndob1RvKSB7CisJCQlhdG9taWNf
YWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwkJfQorCQlzaHV0ZG93bl9jcCA9
IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqKTsKKwkJc2h1dGRv
d25fY3AtPmN1bXVsYXRpdmVfdHNuX2FjayA9IGh0b25sKHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90
c24pOworCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUs
IGNoaywgc2N0cF9uZXh0KTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfYXNj
b25mKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgYWRk
cl9sb2NrZWQpCit7CisJLyoKKwkgKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGFuIEFTQ09ORiB0byB0
aGUgcGVlci4KKwkgKiBBU0NPTkYgcGFyYW1ldGVycyBzaG91bGQgYmUgcXVldWVkIG9uIHRoZSBh
c3NvYyBxdWV1ZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJc3RydWN0
IG1idWYgKm1fYXNjb25mOworCWludCBsZW47CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNi
KTsKKworCWlmICgoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVlKSkg
JiYKKwkgICAgKCFzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxB
R1NfTVVMVElQTEVfQVNDT05GUykpKSB7CisJCS8qIGNhbid0IHNlbmQgYSBuZXcgb25lIGlmIHRo
ZXJlIGlzIG9uZSBpbiBmbGlnaHQgYWxyZWFkeSAqLworCQlyZXR1cm47CisJfQorCisJLyogY29t
cG9zZSBhbiBBU0NPTkYgY2h1bmssIG1heGltdW0gbGVuZ3RoIGlzIFBNVFUgKi8KKwltX2FzY29u
ZiA9IHNjdHBfY29tcG9zZV9hc2NvbmYoc3RjYiwgJmxlbiwgYWRkcl9sb2NrZWQpOworCWlmICht
X2FzY29uZiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlzY3RwX2FsbG9jX2FfY2h1bmso
c3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNj
dHBfbV9mcmVlbShtX2FzY29uZik7CisJCXJldHVybjsKKwl9CisKKwljaGstPmNvcHlfYnlfcmVm
ID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfQVNDT05GOworCWNoay0+cmVjLmNo
dW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSBDSFVOS19GTEFHU19GUkFH
TUVOVF9PSzsKKwljaGstPmRhdGEgPSBtX2FzY29uZjsKKwljaGstPnNlbmRfc2l6ZSA9IGxlbjsK
KwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7
CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT53aG9UbyA9IG5ldDsKKwlpZiAoY2hr
LT53aG9UbykgeworCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsK
Kwl9CisJVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+YXNjb25mX3NlbmRfcXVldWUsIGNo
aywgc2N0cF9uZXh0KTsKKwljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuOwor
fQorCit2b2lkCitzY3RwX3NlbmRfYXNjb25mX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7
CisJLyoKKwkgKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGEgYXNjb25mLWFjayBiYWNrIHRvIHNlbmRl
ci4KKwkgKiB0aGUgYXNjb25mLWFjayBtdXN0IGJlIHN0b3JlZCBpbiB0aGUgdGNiLgorCSAqLwor
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrICph
Y2ssICpsYXRlc3RfYWNrOworCXN0cnVjdCBtYnVmICptX2FjazsKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQgPSBOVUxMOworCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJLyogR2V0IHRo
ZSBsYXRlc3QgQVNDT05GLUFDSyAqLworCWxhdGVzdF9hY2sgPSBUQUlMUV9MQVNUKCZzdGNiLT5h
c29jLmFzY29uZl9hY2tfc2VudCwgc2N0cF9hc2NvbmZfYWNraGVhZCk7CisJaWYgKGxhdGVzdF9h
Y2sgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChsYXRlc3RfYWNrLT5sYXN0X3NlbnRf
dG8gIT0gTlVMTCAmJgorCSAgICBsYXRlc3RfYWNrLT5sYXN0X3NlbnRfdG8gPT0gc3RjYi0+YXNv
Yy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSkgeworCQkvKiB3ZSdyZSBkb2luZyBhIHJldHJhbnNt
aXNzaW9uICovCisJCW5ldCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHN0Y2ItPmFz
b2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20sIDApOworCQlpZiAobmV0ID09IE5VTEwpIHsKKwkJ
CS8qIG5vIGFsdGVybmF0ZSAqLworCQkJaWYgKHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5r
X2Zyb20gPT0gTlVMTCkgeworCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJCQlu
ZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQl9IGVsc2UgeworCQkJCQluZXQgPSBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQluZXQg
PSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tOworCQkJfQorCQl9CisJfSBlbHNl
IHsKKwkJLyogbm9ybWFsIGNhc2UgKi8KKwkJaWYgKHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2No
dW5rX2Zyb20gPT0gTlVMTCkgeworCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJ
bmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJCQl9IGVsc2UgeworCQkJCW5ldCA9IHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCW5ldCA9IHN0
Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207CisJCX0KKwl9CisJbGF0ZXN0X2Fjay0+
bGFzdF9zZW50X3RvID0gbmV0OworCisJVEFJTFFfRk9SRUFDSChhY2ssICZzdGNiLT5hc29jLmFz
Y29uZl9hY2tfc2VudCwgbmV4dCkgeworCQlpZiAoYWNrLT5kYXRhID09IE5VTEwpIHsKKwkJCWNv
bnRpbnVlOworCQl9CisKKwkJLyogY29weSB0aGUgYXNjb25mX2FjayAqLworCQltX2FjayA9IFND
VFBfTV9DT1BZTShhY2stPmRhdGEsIDAsIE1fQ09QWUFMTCwgTV9OT1dBSVQpOworCQlpZiAobV9h
Y2sgPT0gTlVMTCkgeworCQkJLyogY291bGRuJ3QgY29weSBpdCAqLworCQkJcmV0dXJuOworCQl9
CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2df
bWJjKG1fYWNrLCBTQ1RQX01CVUZfSUNPUFkpOworCQl9CisjZW5kaWYKKworCQlzY3RwX2FsbG9j
X2FfY2h1bmsoc3RjYiwgY2hrKTsKKwkJaWYgKGNoayA9PSBOVUxMKSB7CisJCQkvKiBubyBtZW1v
cnkgKi8KKwkJCWlmIChtX2FjaykKKwkJCQlzY3RwX21fZnJlZW0obV9hY2spOworCQkJcmV0dXJu
OworCQl9CisJCWNoay0+Y29weV9ieV9yZWYgPSAwOworCQljaGstPnJlYy5jaHVua19pZC5pZCA9
IFNDVFBfQVNDT05GX0FDSzsKKwkJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7
CisJCWNoay0+ZmxhZ3MgPSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJY2hrLT53aG9UbyA9
IG5ldDsKKwkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1Rv
LT5yZWZfY291bnQsIDEpOworCQl9CisJCWNoay0+ZGF0YSA9IG1fYWNrOworCQljaGstPnNlbmRf
c2l6ZSA9IGFjay0+bGVuOworCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwkJ
Y2hrLT5zbmRfY291bnQgPSAwOworCQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKworCQlUQUlM
UV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9u
ZXh0KTsKKwkJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCX0KKwlyZXR1cm47Cit9CisK
Kworc3RhdGljIGludAorc2N0cF9jaHVua19yZXRyYW5zbWlzc2lvbihzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYywKKyAgICBpbnQgKmNudF9vdXQsIHN0cnVjdCB0aW1ldmFsICpub3csIGlu
dCAqbm93X2ZpbGxlZCwgaW50ICpmcl9kb25lLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VO
VVNFRAorI2VuZGlmCisgICAgKQoreworCS8qLQorCSAqIHNlbmQgb3V0IG9uZSBNVFUgb2YgcmV0
cmFuc21pc3Npb24uIElmIGZhc3RfcmV0cmFuc21pdCBpcworCSAqIGhhcHBlbmluZyB3ZSBpZ25v
cmUgdGhlIGN3bmQuIE90aGVyd2lzZSB3ZSBvYmV5IHRoZSBjd25kIGFuZAorCSAqIHJ3bmQuIEZv
ciBhIENvb2tpZSBvciBBc2NvbmYgaW4gdGhlIGNvbnRyb2wgY2h1bmsgcXVldWUgd2UKKwkgKiBy
ZXRyYW5zbWl0IHRoZW0gYnkgdGhlbXNlbHZlcy4KKwkgKgorCSAqIEZvciBkYXRhIGNodW5rcyB3
ZSB3aWxsIHBpY2sgb3V0IHRoZSBsb3dlc3QgVFNOJ3MgaW4gdGhlIHNlbnRfcXVldWUKKwkgKiBt
YXJrZWQgZm9yIHJlc2VuZCBhbmQgYnVuZGxlIHRoZW0gYWxsIHRvZ2V0aGVyICh1cCB0byBhIE1U
VSBvZgorCSAqIGRlc3RpbmF0aW9uKS4gVGhlIGFkZHJlc3MgdG8gc2VuZCB0byBzaG91bGQgaGF2
ZSBiZWVuCisJICogc2VsZWN0ZWQvY2hhbmdlZCB3aGVyZSB0aGUgcmV0cmFuc21pc3Npb24gd2Fz
IG1hcmtlZCAoaS5lLiBpbiBGUgorCSAqIG9yIHQzLXRpbWVvdXQgcm91dGluZXMpLgorCSAqLwor
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmRhdGFfbGlzdFtTQ1RQX01BWF9EQVRBX0JVTkRMSU5H
XTsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpmd2Q7CisJc3RydWN0IG1idWYgKm0s
ICplbmRvZmNoYWluOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7CisJdWludDMyX3Qg
dHNuc19zZW50ID0gMDsKKwlpbnQgbm9fZnJhZ21lbnRmbGcsIGJ1bmRsZV9hdCwgY250X3RocnU7
CisJdW5zaWduZWQgaW50IG10dTsKKwlpbnQgZXJyb3IsIGksIG9uZV9jaHVuaywgZndkX3Rzbiwg
Y3RsX2NudCwgdG1yX3N0YXJ0ZWQ7CisJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCA9IE5V
TEw7CisJdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwOworCXVpbnQxNl90IGF1dGhfa2V5aWQ7CisJ
aW50IG92ZXJyaWRlX29rID0gMTsKKwlpbnQgZGF0YV9hdXRoX3JlcWQgPSAwOworCXVpbnQzMl90
IGRtdHUgPSAwOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tlZCkgewor
CQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJCXNjdHBf
dW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9M
T0NLX0FTU0VSVChzdGNiKTsKKwl0bXJfc3RhcnRlZCA9IGN0bF9jbnQgPSBidW5kbGVfYXQgPSBl
cnJvciA9IDA7CisJbm9fZnJhZ21lbnRmbGcgPSAxOworCWZ3ZF90c24gPSAwOworCSpjbnRfb3V0
ID0gMDsKKwlmd2QgPSBOVUxMOworCWVuZG9mY2hhaW4gPSBtID0gTlVMTDsKKwlhdXRoX2tleWlk
ID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7CisjaWZkZWYgU0NUUF9BVURJVElO
R19FTkFCTEVECisJc2N0cF9hdWRpdF9sb2coMHhDMywgMSk7CisjZW5kaWYKKwlpZiAoKFRBSUxR
X0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgJiYKKwkgICAgKFRBSUxRX0VNUFRZKCZhc29jLT5j
b250cm9sX3NlbmRfcXVldWUpKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwiU0NU
UCBoaXRzIGVtcHR5IHF1ZXVlIHdpdGggY250IHNldCB0byAlZD9cbiIsCisJCQlhc29jLT5zZW50
X3F1ZXVlX3JldHJhbl9jbnQpOworCQlhc29jLT5zZW50X3F1ZXVlX2NudCA9IDA7CisJCWFzb2Mt
PnNlbnRfcXVldWVfY250X3JlbW92ZWFibGUgPSAwOworCQkvKiBzZW5kIGJhY2sgMC8wIHNvIHdl
IGVudGVyIG5vcm1hbCB0cmFuc21pc3Npb24gKi8KKwkJKmNudF9vdXQgPSAwOworCQlyZXR1cm4g
KDApOworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVf
RUNITykgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NUUkVBTV9SRVNF
VCkgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RT
TikpIHsKKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlj
b250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NUUkVB
TV9SRVNFVCkgeworCQkJCWlmIChjaGsgIT0gYXNvYy0+c3RyX3Jlc2V0KSB7CisJCQkJCS8qCisJ
CQkJCSAqIG5vdCBlbGlnaWJsZSBmb3IgcmV0cmFuIGlmIGl0cworCQkJCQkgKiBub3Qgb3Vycwor
CQkJCQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJY3RsX2NudCsrOworCQkJ
aWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRk9SV0FSRF9DVU1fVFNOKSB7CisJCQkJ
ZndkX3RzbiA9IDE7CisJCQl9CisJCQkvKgorCQkJICogQWRkIGFuIEFVVEggY2h1bmssIGlmIGNo
dW5rIHJlcXVpcmVzIGl0IHNhdmUgdGhlCisJCQkgKiBvZmZzZXQgaW50byB0aGUgY2hhaW4gZm9y
IEFVVEgKKwkJCSAqLworCQkJaWYgKChhdXRoID09IE5VTEwpICYmCisJCQkgICAgKHNjdHBfYXV0
aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKKwkJCQkJCQkgc3RjYi0+
YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkpIHsKKwkJCQltID0gc2N0cF9hZGRfYXV0aF9jaHVuayht
LCAmZW5kb2ZjaGFpbiwKKwkJCQkJCQkmYXV0aCwgJmF1dGhfb2Zmc2V0LAorCQkJCQkJCXN0Y2Is
CisJCQkJCQkJY2hrLT5yZWMuY2h1bmtfaWQuaWQpOworCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCX0KKwkJCW0gPSBzY3RwX2NvcHlfbWJ1
ZmNoYWluKGNoay0+ZGF0YSwgbSwgJmVuZG9mY2hhaW4sIDAsIGNoay0+c2VuZF9zaXplLCBjaGst
PmNvcHlfYnlfcmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW9uZV9jaHVuayA9IDA7CisJY250
X3RocnUgPSAwOworCS8qIGRvIHdlIGhhdmUgY29udHJvbCBjaHVua3MgdG8gcmV0cmFuc21pdD8g
Ki8KKwlpZiAobSAhPSBOVUxMKSB7CisJCS8qIFN0YXJ0IGEgdGltZXIgbm8gbWF0dGVyIGlmIHdl
IHN1Y2NlZWQgb3IgZmFpbCAqLworCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9D
T09LSUVfRUNITykgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lF
LCBpbnAsIHN0Y2IsIGNoay0+d2hvVG8pOworCQl9IGVsc2UgaWYgKGNoay0+cmVjLmNodW5rX2lk
LmlkID09IFNDVFBfQVNDT05GKQorCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
QVNDT05GLCBpbnAsIHN0Y2IsIGNoay0+d2hvVG8pOworCQljaGstPnNuZF9jb3VudCsrOwkvKiB1
cGRhdGUgb3VyIGNvdW50ICovCisJCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291
dHB1dChpbnAsIHN0Y2IsIGNoay0+d2hvVG8sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmNoay0+d2hvVG8tPnJvLl9sX2FkZHIs
IG0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX29mZnNl
dCwgYXV0aCwgc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQsCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZsZywgMCwgMCwKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9scG9ydCwgc3Rj
Yi0+cnBvcnQsIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoay0+d2hvVG8tPnBvcnQsIE5VTEwsCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsIDAsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvX2xvY2tlZCkpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdhayBz
ZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJ
CWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3ds
ZXZlbGVycik7CisJCQl9CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfSBlbHNlIHsKKwkJCWFzb2Mt
PmlmcF9oYWRfZW5vYnVmID0gMDsKKwkJfQorCQllbmRvZmNoYWluID0gTlVMTDsKKwkJYXV0aCA9
IE5VTEw7CisJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJLyoKKwkJICogV2UgZG9uJ3Qgd2FudCB0byBt
YXJrIHRoZSBuZXQtPnNlbnQgdGltZSBoZXJlIHNpbmNlIHRoaXMKKwkJICogd2UgdXNlIHRoaXMg
Zm9yIEhCIGFuZCByZXRyYW5zIGNhbm5vdCBtZWFzdXJlIFJUVAorCQkgKi8KKwkJLyogKHZvaWQp
U0NUUF9HRVRUSU1FX1RJTUVWQUwoJmNoay0+d2hvVG8tPmxhc3Rfc2VudF90aW1lKTsgKi8KKwkJ
KmNudF9vdXQgKz0gMTsKKwkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOworCQlzY3Rw
X3Vjb3VudF9kZWNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJaWYgKGZ3
ZF90c24gPT0gMCkgeworCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENsZWFuIHVw
IHRoZSBmd2QtdHNuIGxpc3QgKi8KKwkJCXNjdHBfY2xlYW5fdXBfY3RsKHN0Y2IsIGFzb2MsIHNv
X2xvY2tlZCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qCisJICogT2ssIGl0IGlzIGp1
c3QgZGF0YSByZXRyYW5zbWlzc2lvbiB3ZSBuZWVkIHRvIGRvIG9yIHRoYXQgYW5kIGEKKwkgKiBm
d2QtdHNuIHdpdGggaXQgYWxsLgorCSAqLworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9x
dWV1ZSkpIHsKKwkJcmV0dXJuIChTQ1RQX1JFVFJBTl9ET05FKTsKKwl9CisJaWYgKChTQ1RQX0dF
VF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpIHx8CisJICAgIChTQ1RQ
X0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSkgeworCQkvKiBub3Qg
eWV0IG9wZW4sIHJlc2VuZCB0aGUgY29va2llIGFuZCB0aGF0IGlzIGl0ICovCisJCXJldHVybiAo
MSk7CisJfQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRpbmcoMjAs
IGlucCwgc3RjYiwgTlVMTCk7CisjZW5kaWYKKwlkYXRhX2F1dGhfcmVxZCA9IHNjdHBfYXV0aF9p
c19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcyk7
CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJ
aWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJLyogTm8sIG5vdCBz
ZW50IHRvIHRoaXMgbmV0IG9yIG5vdCByZWFkeSBmb3IgcnR4ICovCisJCQljb250aW51ZTsKKwkJ
fQorCQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJCVNDVFBfUFJJTlRGKCJUU046JXggY2hr
LT5zbmRfY291bnQ6JWQgY2hrLT5zZW50OiVkIGNhbid0IHJldHJhbiAtIG5vIGRhdGFcbiIsCisJ
CQkgICAgICAgICAgICBjaGstPnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQsIGNoay0+c2Vu
dCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhf
cmV0cmFuX2NodW5rKSkgJiYKKwkJICAgIChjaGstPnNuZF9jb3VudCA+PSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykpKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwor
CQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJc25wcmludGYobXNnLCBzaXpl
b2YobXNnKSwgIlRTTiAlOC44eCByZXRyYW5zbWl0dGVkICVkIHRpbWVzLCBnaXZpbmcgdXAiLAor
CQkJCSBjaGstPnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQpOworCQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBz
b19sb2NrZWQpOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCXJldHVybiAoU0NUUF9SRVRSQU5fRVhJVCk7
CisJCX0KKwkJLyogcGljayB1cCB0aGUgbmV0ICovCisJCW5ldCA9IGNoay0+d2hvVG87CisJCXN3
aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNh
c2UgQUZfSU5FVDoKKwkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOwor
CQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJ
bXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQltdHUgPSBu
ZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJ
CWRlZmF1bHQ6CisJCQkJLyogVFNOSCAqLworCQkJCW10dSA9IG5ldC0+bXR1OworCQkJCWJyZWFr
OworCQl9CisKKwkJaWYgKChhc29jLT5wZWVyc19yd25kIDwgbXR1KSAmJiAoYXNvYy0+dG90YWxf
ZmxpZ2h0ID4gMCkpIHsKKwkJCS8qIE5vIHJvb20gaW4gcGVlcnMgcnduZCAqLworCQkJdWludDMy
X3QgdHNuOworCisJCQl0c24gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7CisJCQlpZiAodHNu
ID09IGNoay0+cmVjLmRhdGEudHNuKSB7CisJCQkJLyoKKwkJCQkgKiB3ZSBtYWtlIGEgc3BlY2lh
bCBleGNlcHRpb24gZm9yIHRoaXMKKwkJCQkgKiBjYXNlLiBUaGUgcGVlciBoYXMgbm8gcnduZCBi
dXQgaXMgbWlzc2luZworCQkJCSAqIHRoZSBsb3dlc3QgY2h1bmsuLiB3aGljaCBpcyBwcm9iYWJs
eSB3aGF0CisJCQkJICogaXMgaG9sZGluZyB1cCB0aGUgcnduZC4KKwkJCQkgKi8KKwkJCQlnb3Rv
IG9uZV9jaHVua19hcm91bmQ7CisJCQl9CisJCQlyZXR1cm4gKDEpOworCQl9CisJb25lX2NodW5r
X2Fyb3VuZDoKKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBtdHUpIHsKKwkJCW9uZV9jaHVuayA9
IDE7CisJCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPT0gMCkgJiYKKwkJCSAgICAoYXNvYy0+dG90
YWxfZmxpZ2h0ID09IDApKSB7CisJCQkJY2hrLT53aW5kb3dfcHJvYmUgPSAxOworCQkJCWNoay0+
d2hvVG8tPndpbmRvd19wcm9iZSA9IDE7CisJCQl9CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5H
X0VOQUJMRUQKKwkJc2N0cF9hdWRpdF9sb2coMHhDMywgMik7CisjZW5kaWYKKwkJYnVuZGxlX2F0
ID0gMDsKKwkJbSA9IE5VTEw7CisJCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOworCQlpZiAoY2hr
LT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPT0gMCkgeworCQkJLyoKKwkJCSAqIGlm
IG5vIEZSIGluIHByb2dyZXNzIHNraXAgZGVzdGluYXRpb24gdGhhdCBoYXZlCisJCQkgKiBmbGln
aHRfc2l6ZSA+IGN3bmQuCisJCQkgKi8KKwkJCWlmIChuZXQtPmZsaWdodF9zaXplID49IG5ldC0+
Y3duZCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIE1h
cmsgdGhlIGRlc3RpbmF0aW9uIG5ldCB0byBoYXZlIEZSIHJlY292ZXJ5CisJCQkgKiBsaW1pdHMg
cHV0IG9uIGl0LgorCQkJICovCisJCQkqZnJfZG9uZSA9IDE7CisJCQluZXQtPmZhc3RfcmV0cmFu
X2lwID0gMTsKKwkJfQorCisJCS8qCisJCSAqIGlmIG5vIEFVVEggaXMgeWV0IGluY2x1ZGVkIGFu
ZCB0aGlzIGNodW5rIHJlcXVpcmVzIGl0LAorCQkgKiBtYWtlIHN1cmUgdG8gYWNjb3VudCBmb3Ig
aXQuICBXZSBkb24ndCBhcHBseSB0aGUgc2l6ZQorCQkgKiB1bnRpbCB0aGUgQVVUSCBjaHVuayBp
cyBhY3R1YWxseSBhZGRlZCBiZWxvdyBpbiBjYXNlCisJCSAqIHRoZXJlIGlzIG5vIHJvb20gZm9y
IHRoaXMgY2h1bmsuCisJCSAqLworCQlpZiAoZGF0YV9hdXRoX3JlcWQgJiYgKGF1dGggPT0gTlVM
TCkpIHsKKwkJCWRtdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7CisJCX0gZWxzZQorCQkJZG10dSA9IDA7CisKKwkJaWYgKChjaGstPnNlbmRfc2l6
ZSA8PSAobXR1IC0gZG10dSkpIHx8CisJCSAgICAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZS
QUdNRU5UX09LKSkgeworCQkJLyogb2sgd2Ugd2lsbCBhZGQgdGhpcyBvbmUgKi8KKwkJCWlmIChk
YXRhX2F1dGhfcmVxZCkgeworCQkJCWlmIChhdXRoID09IE5VTEwpIHsKKwkJCQkJbSA9IHNjdHBf
YWRkX2F1dGhfY2h1bmsobSwKKwkJCQkJCQkJJmVuZG9mY2hhaW4sCisJCQkJCQkJCSZhdXRoLAor
CQkJCQkJCQkmYXV0aF9vZmZzZXQsCisJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCVNDVFBfREFUQSk7
CisJCQkJCWF1dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7CisJCQkJCW92ZXJyaWRlX29rID0g
MDsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3Mp
OworCQkJCX0gZWxzZSBpZiAob3ZlcnJpZGVfb2spIHsKKwkJCQkJYXV0aF9rZXlpZCA9IGNoay0+
YXV0aF9rZXlpZDsKKwkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJCX0gZWxzZSBpZiAoY2hrLT5h
dXRoX2tleWlkICE9IGF1dGhfa2V5aWQpIHsKKwkJCQkJLyogZGlmZmVyZW50IGtleWlkLCBzbyBk
b25lIGJ1bmRsaW5nICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCW0gPSBzY3RwX2Nv
cHlfbWJ1ZmNoYWluKGNoay0+ZGF0YSwgbSwgJmVuZG9mY2hhaW4sIDAsIGNoay0+c2VuZF9zaXpl
LCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCWlmIChtID09IE5VTEwpIHsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0p
OworCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCX0KKwkJCS8qIERvIGNsZWFyIElQX0RGID8gKi8K
KwkJCWlmIChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spIHsKKwkJCQlub19m
cmFnbWVudGZsZyA9IDA7CisJCQl9CisJCQkvKiB1cGF0ZSBvdXIgTVRVIHNpemUgKi8KKwkJCWlm
IChtdHUgPiAoY2hrLT5zZW5kX3NpemUgKyBkbXR1KSkKKwkJCQltdHUgLT0gKGNoay0+c2VuZF9z
aXplICsgZG10dSk7CisJCQllbHNlCisJCQkJbXR1ID0gMDsKKwkJCWRhdGFfbGlzdFtidW5kbGVf
YXQrK10gPSBjaGs7CisJCQlpZiAob25lX2NodW5rICYmIChhc29jLT50b3RhbF9mbGlnaHQgPD0g
MCkpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc193aW5kb3dwcm9iZWQpOworCQkJfQorCQl9
CisJCWlmIChvbmVfY2h1bmsgPT0gMCkgeworCQkJLyoKKwkJCSAqIG5vdyBhcmUgdGhlcmUgYW55
bW9yZSBmb3J3YXJkIGZyb20gY2hrIHRvIHBpY2sKKwkJCSAqIHVwPworCQkJICovCisJCQlmb3Ig
KGZ3ZCA9IFRBSUxRX05FWFQoY2hrLCBzY3RwX25leHQpOyBmd2QgIT0gTlVMTDsgZndkID0gVEFJ
TFFfTkVYVChmd2QsIHNjdHBfbmV4dCkpIHsKKwkJCQlpZiAoZndkLT5zZW50ICE9IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7CisJCQkJCS8qIE5vcGUsIG5vdCBmb3IgcmV0cmFuICovCisJCQkJCWNv
bnRpbnVlOworCQkJCX0KKwkJCQlpZiAoZndkLT53aG9UbyAhPSBuZXQpIHsKKwkJCQkJLyogTm9w
ZSwgbm90IHRoZSBuZXQgaW4gcXVlc3Rpb24gKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ
CWlmIChkYXRhX2F1dGhfcmVxZCAmJiAoYXV0aCA9PSBOVUxMKSkgeworCQkJCQlkbXR1ID0gc2N0
cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCQkJCX0gZWxz
ZQorCQkJCQlkbXR1ID0gMDsKKwkJCQlpZiAoZndkLT5zZW5kX3NpemUgPD0gKG10dSAtIGRtdHUp
KSB7CisJCQkJCWlmIChkYXRhX2F1dGhfcmVxZCkgeworCQkJCQkJaWYgKGF1dGggPT0gTlVMTCkg
eworCQkJCQkJCW0gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG0sCisJCQkJCQkJCQkJJmVuZG9mY2hh
aW4sCisJCQkJCQkJCQkJJmF1dGgsCisJCQkJCQkJCQkJJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkJ
CXN0Y2IsCisJCQkJCQkJCQkJU0NUUF9EQVRBKTsKKwkJCQkJCQlhdXRoX2tleWlkID0gZndkLT5h
dXRoX2tleWlkOworCQkJCQkJCW92ZXJyaWRlX29rID0gMDsKKwkJCQkJCQlTQ1RQX1NUQVRfSU5D
Ul9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQkJCQl9IGVsc2UgaWYgKG92
ZXJyaWRlX29rKSB7CisJCQkJCQkJYXV0aF9rZXlpZCA9IGZ3ZC0+YXV0aF9rZXlpZDsKKwkJCQkJ
CQlvdmVycmlkZV9vayA9IDA7CisJCQkJCQl9IGVsc2UgaWYgKGZ3ZC0+YXV0aF9rZXlpZCAhPSBh
dXRoX2tleWlkKSB7CisJCQkJCQkJLyogZGlmZmVyZW50IGtleWlkLCBzbyBkb25lIGJ1bmRsaW5n
ICovCisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJbSA9IHNjdHBfY29weV9t
YnVmY2hhaW4oZndkLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwgZndkLT5zZW5kX3NpemUsIGZ3
ZC0+Y29weV9ieV9yZWYpOworCQkJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0p
OworCQkJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJCQl9CisJCQkJCS8qIERvIGNsZWFyIElQX0RG
ID8gKi8KKwkJCQkJaWYgKGZ3ZC0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgewor
CQkJCQkJbm9fZnJhZ21lbnRmbGcgPSAwOworCQkJCQl9CisJCQkJCS8qIHVwYXRlIG91ciBNVFUg
c2l6ZSAqLworCQkJCQlpZiAobXR1ID4gKGZ3ZC0+c2VuZF9zaXplICsgZG10dSkpCisJCQkJCQlt
dHUgLT0gKGZ3ZC0+c2VuZF9zaXplICsgZG10dSk7CisJCQkJCWVsc2UKKwkJCQkJCW10dSA9IDA7
CisJCQkJCWRhdGFfbGlzdFtidW5kbGVfYXQrK10gPSBmd2Q7CisJCQkJCWlmIChidW5kbGVfYXQg
Pj0gU0NUUF9NQVhfREFUQV9CVU5ETElORykgeworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQkvKiBjYW4ndCBmaXQgc28gd2UgYXJlIGRvbmUgKi8KKwkJCQkJYnJlYWs7
CisJCQkJfQorCQkJfQorCQl9CisJCS8qIElzIHRoZXJlIHNvbWV0aGluZyB0byBzZW5kIGZvciB0
aGlzIGRlc3RpbmF0aW9uPyAqLworCQlpZiAobSkgeworCQkJLyoKKwkJCSAqIE5vIG1hdHRlciBp
ZiB3ZSBmYWlsL29yIHN1Y2NlZWQgd2Ugc2hvdWxkIHN0YXJ0IGEKKwkJCSAqIHRpbWVyLiBBIGZh
aWx1cmUgaXMgbGlrZSBhIGxvc3QgSVAgcGFja2V0IDotKQorCQkJICovCisJCQlpZiAoIVNDVFBf
T1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJLyoKKwkJCQkg
KiBubyB0aW1lciBydW5uaW5nIG9uIHRoaXMgZGVzdGluYXRpb24KKwkJCQkgKiByZXN0YXJ0IGl0
LgorCQkJCSAqLworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlu
cCwgc3RjYiwgbmV0KTsKKwkJCQl0bXJfc3RhcnRlZCA9IDE7CisJCQl9CisJCQkvKiBOb3cgbGV0
cyBzZW5kIGl0LCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzZW5kIDo+ICovCisJCQlpZiAoKGVy
cm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBuZXQsCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZu
ZXQtPnJvLl9sX2FkZHIsIG0sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0aF9vZmZzZXQsIGF1dGgsIGF1dGhfa2V5aWQsCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbm9fZnJhZ21lbnRmbGcsIDAsIDAsCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5y
cG9ydCwgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAs
CisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19s
b2NrZWQpKSkgeworCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0ICovCisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3IpOwor
CQkJCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7CisJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0g
MTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQkJCX0KKwkJCQly
ZXR1cm4gKGVycm9yKTsKKwkJCX0gZWxzZSB7CisJCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAw
OworCQkJfQorCQkJZW5kb2ZjaGFpbiA9IE5VTEw7CisJCQlhdXRoID0gTlVMTDsKKwkJCWF1dGhf
b2Zmc2V0ID0gMDsKKwkJCS8qIEZvciBIQidzICovCisJCQkvKgorCQkJICogV2UgZG9uJ3Qgd2Fu
dCB0byBtYXJrIHRoZSBuZXQtPnNlbnQgdGltZSBoZXJlCisJCQkgKiBzaW5jZSB0aGlzIHdlIHVz
ZSB0aGlzIGZvciBIQiBhbmQgcmV0cmFucyBjYW5ub3QKKwkJCSAqIG1lYXN1cmUgUlRUCisJCQkg
Ki8KKwkJCS8qICh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZuZXQtPmxhc3Rfc2VudF90aW1l
KTsgKi8KKworCQkJLyogRm9yIGF1dG8tY2xvc2UgKi8KKwkJCWNudF90aHJ1Kys7CisJCQlpZiAo
Km5vd19maWxsZWQgPT0gMCkgeworCQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZhc29j
LT50aW1lX2xhc3Rfc2VudCk7CisJCQkJKm5vdyA9IGFzb2MtPnRpbWVfbGFzdF9zZW50OworCQkJ
CSpub3dfZmlsbGVkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJYXNvYy0+dGltZV9sYXN0X3NlbnQg
PSAqbm93OworCQkJfQorCQkJKmNudF9vdXQgKz0gYnVuZGxlX2F0OworI2lmZGVmIFNDVFBfQVVE
SVRJTkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdF9sb2coMHhDNCwgYnVuZGxlX2F0KTsKKyNlbmRp
ZgorCQkJaWYgKGJ1bmRsZV9hdCkgeworCQkJCXRzbnNfc2VudCA9IGRhdGFfbGlzdFswXS0+cmVj
LmRhdGEudHNuOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGJ1bmRsZV9hdDsgaSsrKSB7CisJ
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHJldHJhbnNkYXRhKTsKKwkJCQlkYXRhX2xpc3Rb
aV0tPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJLyoKKwkJCQkgKiBXaGVuIHdlIGhh
dmUgYSByZXZva2VkIGRhdGEsIGFuZCB3ZQorCQkJCSAqIHJldHJhbnNtaXQgaXQsIHRoZW4gd2Ug
Y2xlYXIgdGhlIHJldm9rZWQKKwkJCQkgKiBmbGFnIHNpbmNlIHRoaXMgZmxhZyBkaWN0YXRlcyBp
ZiB3ZQorCQkJCSAqIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZnMKKwkJCQkgKi8KKwkJCQlpZiAoZGF0
YV9saXN0W2ldLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgeworCQkJCQkvKiBEZWZsYXRl
IHRoZSBjd25kICovCisJCQkJCWRhdGFfbGlzdFtpXS0+d2hvVG8tPmN3bmQgLT0gZGF0YV9saXN0
W2ldLT5ib29rX3NpemU7CisJCQkJCWRhdGFfbGlzdFtpXS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jl
dm9rZWQgPSAwOworCQkJCX0KKwkJCQlkYXRhX2xpc3RbaV0tPnNuZF9jb3VudCsrOworCQkJCXNj
dHBfdWNvdW50X2RlY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCQkvKiByZWNv
cmQgdGhlIHRpbWUgKi8KKwkJCQlkYXRhX2xpc3RbaV0tPnNlbnRfcmN2X3RpbWUgPSBhc29jLT50
aW1lX2xhc3Rfc2VudDsKKwkJCQlpZiAoZGF0YV9saXN0W2ldLT5ib29rX3NpemVfc2NhbGUpIHsK
KwkJCQkJLyoKKwkJCQkJICogbmVlZCB0byBkb3VibGUgdGhlIGJvb2sgc2l6ZSBvbgorCQkJCQkg
KiB0aGlzIG9uZQorCQkJCQkgKi8KKwkJCQkJZGF0YV9saXN0W2ldLT5ib29rX3NpemVfc2NhbGUg
PSAwOworCQkJCQkvKiBTaW5jZSB3ZSBkb3VibGUgdGhlIGJvb2tzaXplLCB3ZSBtdXN0CisJCQkJ
CSAqIGFsc28gZG91YmxlIHRoZSBvdXRwdXQgcXVldWUgc2l6ZSwgc2luY2UgdGhpcworCQkJCQkg
KiBnZXQgc2hydW5rIHdoZW4gd2UgZnJlZSBieSB0aGlzIGFtb3VudC4KKwkJCQkJICovCisJCQkJ
CWF0b21pY19hZGRfaW50KCYoKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSksZGF0YV9s
aXN0W2ldLT5ib29rX3NpemUpOworCQkJCQlkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZSAqPSAyOwor
CisKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9nX3J3bmQoU0NU
UF9ERUNSRUFTRV9QRUVSX1JXTkQsCisJCQkJCQkgICAgICBhc29jLT5wZWVyc19yd25kLCBkYXRh
X2xpc3RbaV0tPnNlbmRfc2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gp
KTsKKwkJCQkJfQorCQkJCQlhc29jLT5wZWVyc19yd25kID0gc2N0cF9zYnNwYWNlX3N1Yihhc29j
LT5wZWVyc19yd25kLAorCQkJCQkJCQkJICAgICh1aW50MzJfdCkgKGRhdGFfbGlzdFtpXS0+c2Vu
ZF9zaXplICsKKwkJCQkJCQkJCQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gp
KSk7CisJCQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQ
X0ZMSUdIVF9MT0dfVVBfUlNORCwKKwkJCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPndob1RvLT5m
bGlnaHRfc2l6ZSwKKwkJCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZSwKKwkJCQkJ
CSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdClkYXRhX2xpc3RbaV0tPndob1RvLAorCQkJCQkJ
ICAgICAgIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuKTsKKwkJCQl9CisJCQkJc2N0cF9mbGln
aHRfc2l6ZV9pbmNyZWFzZShkYXRhX2xpc3RbaV0pOworCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2lu
Y3JlYXNlKHN0Y2IsIGRhdGFfbGlzdFtpXSk7CisJCQkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBz
dGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkJCQkvKiBTV1Mgc2Vu
ZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJCQlhc29jLT5wZWVyc19yd25kID0gMDsKKwkJCQl9CisJ
CQkJaWYgKChpID09IDApICYmCisJCQkJICAgIChkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmRvaW5n
X2Zhc3RfcmV0cmFuc21pdCkpIHsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGZhc3Ry
ZXRyYW5zKTsKKwkJCQkJaWYgKChkYXRhX2xpc3RbaV0gPT0gVEFJTFFfRklSU1QoJmFzb2MtPnNl
bnRfcXVldWUpKSAmJgorCQkJCQkgICAgKHRtcl9zdGFydGVkID09IDApKSB7CisJCQkJCQkvKi0K
KwkJCQkJCSAqIG9rIHdlIGp1c3QgZmFzdC1yZXRyYW5zJ2QKKwkJCQkJCSAqIHRoZSBsb3dlc3Qg
VFNOLCBpLmUgdGhlCisJCQkJCQkgKiBmaXJzdCBvbiB0aGUgbGlzdC4gSW4KKwkJCQkJCSAqIHRo
aXMgY2FzZSB3ZSB3YW50IHRvIGdpdmUKKwkJCQkJCSAqIHNvbWUgbW9yZSB0aW1lIHRvIGdldCBh
CisJCQkJCQkgKiBTQUNLIGJhY2sgd2l0aG91dCBhCisJCQkJCQkgKiB0My1leHBpcmluZy4KKwkJ
CQkJCSAqLworCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAs
IHN0Y2IsIG5ldCwKKwkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfT1VUUFVUICsgU0NUUF9MT0NfMik7
CisJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2Is
IG5ldCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9s
b2dfY3duZChzdGNiLCBuZXQsIHRzbnNfc2VudCwgU0NUUF9DV05EX0xPR19GUk9NX1JFU0VORCk7
CisJCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCQlzY3RwX2F1ZGl0aW5nKDIx
LCBpbnAsIHN0Y2IsIE5VTEwpOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQkvKiBOb25lIHdpbGwg
Zml0ICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJCWlmIChhc29jLT5zZW50X3F1ZXVlX3JldHJh
bl9jbnQgPD0gMCkgeworCQkJLyogYWxsIGRvbmUgd2UgaGF2ZSBubyBtb3JlIHRvIHJldHJhbiAq
LworCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKKwkJCWJyZWFrOworCQl9CisJ
CWlmIChvbmVfY2h1bmspIHsKKwkJCS8qIE5vIG1vcmUgcm9vbSBpbiByd25kICovCisJCQlyZXR1
cm4gKDEpOworCQl9CisJCS8qIHN0b3AgdGhlIGZvciBsb29wIGhlcmUuIHdlIHNlbnQgb3V0IGEg
cGFja2V0ICovCisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF90aW1lcl92YWxpZGF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQorewor
CXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCS8qIFZhbGlkYXRlIHRoYXQgYSB0aW1lciBpcyBy
dW5uaW5nIHNvbWV3aGVyZSAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0
cF9uZXh0KSB7CisJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRp
bWVyKSkgeworCQkJLyogSGVyZSBpcyBhIHRpbWVyICovCisJCQlyZXR1cm47CisJCX0KKwl9CisJ
U0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJLyogR2FrLCB3ZSBkaWQgbm90IGhhdmUgYSB0
aW1lciBzb21ld2hlcmUgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkRlYWRsb2Nr
IGF2b2lkZWQgc3RhcnRpbmcgdGltZXIgb24gYSBkZXN0IGF0IHJldHJhblxuIik7CisJaWYgKGFz
b2MtPmFsdGVybmF0ZSkgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5E
LCBpbnAsIHN0Y2IsIGFzb2MtPmFsdGVybmF0ZSk7CisJfSBlbHNlIHsKKwkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX2NodW5rX291dHB1dChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBpbnQg
ZnJvbV93aGVyZSwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlm
CisgICAgKQoreworCS8qLQorCSAqIE9rIHRoaXMgaXMgdGhlIGdlbmVyaWMgY2h1bmsgc2Vydmlj
ZSBxdWV1ZS4gd2UgbXVzdCBkbyB0aGUKKwkgKiBmb2xsb3dpbmc6CisJICogLSBTZWUgaWYgdGhl
cmUgYXJlIHJldHJhbnNtaXRzIHBlbmRpbmcsIGlmIHNvIHdlIG11c3QKKwkgKiAgIGRvIHRoZXNl
IGZpcnN0LgorCSAqIC0gU2VydmljZSB0aGUgc3RyZWFtIHF1ZXVlIHRoYXQgaXMgbmV4dCwgbW92
aW5nIGFueQorCSAqICAgbWVzc2FnZSAobm90ZSBJIG11c3QgZ2V0IGEgY29tcGxldGUgbWVzc2Fn
ZSBpLmUuCisJICogICBGSVJTVC9NSURETEUgYW5kIExBU1QgdG8gdGhlIG91dCBxdWV1ZSBpbiBv
bmUgcGFzcykgYW5kIGFzc2lnbmluZworCSAqICAgVFNOJ3MKKwkgKiAtIENoZWNrIHRvIHNlZSBp
ZiB0aGUgY3duZC9yd25kIGFsbG93cyBhbnkgb3V0cHV0LCBpZiBzbyB3ZQorCSAqICAgZ28gYWhl
YWQgYW5kIGZvbXVsYXRlIGFuZCBzZW5kIHRoZSBsb3cgbGV2ZWwgY2h1bmtzLiBNYWtpbmcgc3Vy
ZQorCSAqICAgdG8gY29tYmluZSBhbnkgY29udHJvbCBpbiB0aGUgY29udHJvbCBjaHVuayBxdWV1
ZSBhbHNvLgorCSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKKwlpbnQgZXJyb3IgPSAwLCBudW1fb3V0LCB0b3Rfb3V0ID0gMCwgcmV0
ID0gMCwgcmVhc29uX2NvZGU7CisJdW5zaWduZWQgaW50IGJ1cnN0X2NudCA9IDA7CisJc3RydWN0
IHRpbWV2YWwgbm93OworCWludCBub3dfZmlsbGVkID0gMDsKKwlpbnQgbmFnbGVfb247CisJaW50
IGZyYWdfcG9pbnQgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsKKwlp
bnQgdW5fc2VudCA9IDA7CisJaW50IGZyX2RvbmU7CisJdW5zaWduZWQgaW50IHRvdF9mcnMgPSAw
OworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xv
Y2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fz
c2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlhc29jID0gJnN0Y2ItPmFzb2M7
Citkb19pdF9hZ2FpbjoKKwkvKiBUaGUgTmFnbGUgYWxnb3JpdGhtIGlzIG9ubHkgYXBwbGllZCB3
aGVuIGhhbmRsaW5nIGEgc2VuZCBjYWxsLiAqLworCWlmIChmcm9tX3doZXJlID09IFNDVFBfT1VU
UFVUX0ZST01fVVNSX1NFTkQpIHsKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX05PREVMQVkpKSB7CisJCQluYWdsZV9vbiA9IDA7CisJCX0gZWxzZSB7CisJCQlu
YWdsZV9vbiA9IDE7CisJCX0KKwl9IGVsc2UgeworCQluYWdsZV9vbiA9IDA7CisJfQorCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCisJdW5fc2VudCA9IChzdGNiLT5hc29jLnRvdGFsX291
dHB1dF9xdWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpOworCisJaWYgKCh1bl9z
ZW50IDw9IDApICYmCisJICAgIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVl
KSkgJiYKKwkgICAgKFRBSUxRX0VNUFRZKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSkpICYmCisJ
ICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYKKwkgICAgKGFzb2MtPnRy
aWdnZXJfcmVzZXQgPT0gMCkpIHsKKwkJLyogTm90aGluZyB0byBkbyB1bmxlc3MgdGhlcmUgaXMg
c29tZXRoaW5nIHRvIGJlIHNlbnQgbGVmdCAqLworCQlyZXR1cm47CisJfQorCS8qIERvIHdlIGhh
dmUgc29tZXRoaW5nIHRvIHNlbmQsIGRhdGEgb3IgY29udHJvbCBBTkQKKwkgKiBhIHNhY2sgdGlt
ZXIgcnVubmluZywgaWYgc28gcGlnZ3ktYmFjayB0aGUgc2Fjay4KKwkgKi8KKwlpZiAoU0NUUF9P
U19USU1FUl9QRU5ESU5HKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpKSB7CisJCXNjdHBf
c2VuZF9zYWNrKHN0Y2IsIHNvX2xvY2tlZCk7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgm
c3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKTsKKwl9CisJd2hpbGUgKGFzb2MtPnNlbnRfcXVl
dWVfcmV0cmFuX2NudCkgeworCQkvKi0KKwkJICogT2ssIGl0IGlzIHJldHJhbnNtaXNzaW9uIHRp
bWUgb25seSwgd2Ugc2VuZCBvdXQgb25seSBPTkUKKwkJICogcGFja2V0IHdpdGggYSBzaW5nbGUg
Y2FsbCBvZmYgdG8gdGhlIHJldHJhbiBjb2RlLgorCQkgKi8KKwkJaWYgKGZyb21fd2hlcmUgPT0g
U0NUUF9PVVRQVVRfRlJPTV9DT09LSUVfQUNLKSB7CisJCQkvKi0KKwkJCSAqIFNwZWNpYWwgaG9v
ayBmb3IgaGFuZGxpbmcgY29va2llc3MgZGlzY2FyZGVkCisJCQkgKiBieSBwZWVyIHRoYXQgY2Fy
cmllZCBkYXRhLiBTZW5kIGNvb2tpZS1hY2sgb25seQorCQkJICogYW5kIHRoZW4gdGhlIG5leHQg
Y2FsbCB3aXRoIGdldCB0aGUgcmV0cmFuJ3MuCisJCQkgKi8KKwkJCSh2b2lkKXNjdHBfbWVkX2No
dW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVhc29uX2NvZGUsIDEsCisJ
CQkJCQkgICAgZnJvbV93aGVyZSwKKwkJCQkJCSAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19w
b2ludCwgc29fbG9ja2VkKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChmcm9tX3doZXJlICE9
IFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SKSB7CisJCQkvKiBpZiBpdHMgbm90IGZyb20gYSBIQiB0
aGVuIGRvIGl0ICovCisJCQlmcl9kb25lID0gMDsKKwkJCXJldCA9IHNjdHBfY2h1bmtfcmV0cmFu
c21pc3Npb24oaW5wLCBzdGNiLCBhc29jLCAmbnVtX291dCwgJm5vdywgJm5vd19maWxsZWQsICZm
cl9kb25lLCBzb19sb2NrZWQpOworCQkJaWYgKGZyX2RvbmUpIHsKKwkJCQl0b3RfZnJzKys7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogaXRzIGZyb20gYW55IG90aGVyIHBsYWNlLCB3
ZSBkb24ndCBhbGxvdyByZXRyYW4KKwkJCSAqIG91dHB1dCAob25seSBjb250cm9sKQorCQkJICov
CisJCQlyZXQgPSAxOworCQl9CisJCWlmIChyZXQgPiAwKSB7CisJCQkvKiBDYW4ndCBzZW5kIGFu
eW1vcmUgKi8KKwkJCS8qLQorCQkJICogbm93IGxldHMgcHVzaCBvdXQgY29udHJvbCBieSBjYWxs
aW5nIG1lZC1sZXZlbAorCQkJICogb3V0cHV0IG9uY2UuIHRoaXMgYXNzdXJlcyB0aGF0IHdlIFdJ
TEwgc2VuZCBIQidzCisJCQkgKiBpZiBxdWV1ZWQgdG9vLgorCQkJICovCisJCQkodm9pZClzY3Rw
X21lZF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBhc29jLCAmbnVtX291dCwgJnJlYXNvbl9jb2Rl
LCAxLAorCQkJCQkJICAgIGZyb21fd2hlcmUsCisJCQkJCQkgICAgJm5vdywgJm5vd19maWxsZWQs
IGZyYWdfcG9pbnQsIHNvX2xvY2tlZCk7CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJ
CQlzY3RwX2F1ZGl0aW5nKDgsIGlucCwgc3RjYiwgTlVMTCk7CisjZW5kaWYKKwkJCXNjdHBfdGlt
ZXJfdmFsaWRhdGlvbihpbnAsIHN0Y2IsIGFzb2MpOworCQkJcmV0dXJuOworCQl9CisJCWlmIChy
ZXQgPCAwKSB7CisJCQkvKi0KKwkJCSAqIFRoZSBjb3VudCB3YXMgb2ZmLi4gcmV0cmFuIGlzIG5v
dCBoYXBwZW5pbmcgc28gZG8KKwkJCSAqIHRoZSBub3JtYWwgcmV0cmFuc21pc3Npb24uCisJCQkg
Ki8KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCXNjdHBfYXVkaXRpbmcoOSwgaW5w
LCBzdGNiLCBOVUxMKTsKKyNlbmRpZgorCQkJaWYgKHJldCA9PSBTQ1RQX1JFVFJBTl9FWElUKSB7
CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYgKGZyb21fd2hlcmUgPT0g
U0NUUF9PVVRQVVRfRlJPTV9UMykgeworCQkJLyogT25seSBvbmUgdHJhbnNtaXNzaW9uIGFsbG93
ZWQgb3V0IG9mIGEgdGltZW91dCAqLworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQkJ
c2N0cF9hdWRpdGluZygxMCwgaW5wLCBzdGNiLCBOVUxMKTsKKyNlbmRpZgorCQkJLyogUHVzaCBv
dXQgYW55IGNvbnRyb2wgKi8KKwkJCSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVhc29uX2NvZGUsIDEsIGZyb21fd2hlcmUsCisJCQkJCQkg
ICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQsIHNvX2xvY2tlZCk7CisJCQlyZXR1cm47
CisJCX0KKwkJaWYgKChhc29jLT5mcl9tYXhfYnVyc3QgPiAwKSAmJiAodG90X2ZycyA+PSBhc29j
LT5mcl9tYXhfYnVyc3QpKSB7CisJCQkvKiBIaXQgRlIgYnVyc3QgbGltaXQgKi8KKwkJCXJldHVy
bjsKKwkJfQorCQlpZiAoKG51bV9vdXQgPT0gMCkgJiYgKHJldCA9PSAwKSkgeworCQkJLyogTm8g
bW9yZSByZXRyYW5zIHRvIHNlbmQgKi8KKwkJCWJyZWFrOworCQl9CisJfQorI2lmZGVmIFNDVFBf
QVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRpbmcoMTIsIGlucCwgc3RjYiwgTlVMTCk7Cisj
ZW5kaWYKKwkvKiBDaGVjayBmb3IgYmFkIGRlc3RpbmF0aW9ucywgaWYgdGhleSBleGlzdCBtb3Zl
IGNodW5rcyBhcm91bmQuICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3Rw
X25leHQpIHsKKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkp
IHsKKwkJCS8qLQorCQkJICogaWYgcG9zc2libGUgbW92ZSB0aGluZ3Mgb2ZmIG9mIHRoaXMgYWRk
cmVzcyB3ZQorCQkJICogc3RpbGwgbWF5IHNlbmQgYmVsb3cgZHVlIHRvIHRoZSBkb3JtYW50IHN0
YXRlIGJ1dAorCQkJICogd2UgdHJ5IHRvIGZpbmQgYW4gYWx0ZXJuYXRlIGFkZHJlc3MgdG8gc2Vu
ZCB0bworCQkJICogYW5kIGlmIHdlIGhhdmUgb25lIHdlIG1vdmUgYWxsIHF1ZXVlZCBkYXRhIG9u
IHRoZQorCQkJICogb3V0IHdoZWVsIHRvIHRoaXMgYWx0ZXJuYXRlIGFkZHJlc3MuCisJCQkgKi8K
KwkJCWlmIChuZXQtPnJlZl9jb3VudCA+IDEpCisJCQkJc2N0cF9tb3ZlX2NodW5rc19mcm9tX25l
dChzdGNiLCBuZXQpOworCQl9IGVsc2UgeworCQkJLyotCisJCQkgKiBpZiAoKGFzb2MtPnNhdF9u
ZXR3b3JrKSB8fCAobmV0LT5hZGRyX2lzX2xvY2FsKSkKKwkJCSAqIHsgYnVyc3RfbGltaXQgPSBh
c29jLT5tYXhfYnVyc3QgKgorCQkJICogU0NUUF9TQVRfTkVUV09SS19CVVJTVF9JTkNSOyB9CisJ
CQkgKi8KKwkJCWlmIChhc29jLT5tYXhfYnVyc3QgPiAwKSB7CisJCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCkpIHsKKwkJCQkJaWYgKChuZXQtPmZs
aWdodF9zaXplICsgKGFzb2MtPm1heF9idXJzdCAqIG5ldC0+bXR1KSkgPCBuZXQtPmN3bmQpIHsK
KwkJCQkJCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBj
b25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlICovCisJCQkJCQlhc29jLT5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQoc3RjYiwgbmV0LCBhc29jLT5tYXhfYnVyc3QpOwor
CQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9H
X01BWEJVUlNUX0VOQUJMRSkgeworCQkJCQkJCXNjdHBfbG9nX21heGJ1cnN0KHN0Y2IsIG5ldCwg
MCwgYXNvYy0+bWF4X2J1cnN0LCBTQ1RQX01BWF9CVVJTVF9BUFBMSUVEKTsKKwkJCQkJCX0KKwkJ
CQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsKKwkJCQkJfQorCQkJCQlu
ZXQtPmZhc3RfcmV0cmFuX2lwID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAobmV0LT5mbGln
aHRfc2l6ZSA9PSAwKSB7CisJCQkJCQkvKiBTaG91bGQgYmUgZGVjYXlpbmcgdGhlIGN3bmQgaGVy
ZSAqLworCQkJCQkJOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisKKwl9CisJYnVyc3RfY250
ID0gMDsKKwlkbyB7CisJCWVycm9yID0gc2N0cF9tZWRfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwg
YXNvYywgJm51bV9vdXQsCisJCQkJCSAgICAgICZyZWFzb25fY29kZSwgMCwgZnJvbV93aGVyZSwK
KwkJCQkJICAgICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQsIHNvX2xvY2tlZCk7CisJ
CWlmIChlcnJvcikgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJFcnJvciAlZCB3
YXMgcmV0dXJuZWQgZnJvbSBtZWQtYy1vcFxuIiwgZXJyb3IpOworCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgewor
CQkJCXNjdHBfbG9nX21heGJ1cnN0KHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24sIGVy
cm9yLCBidXJzdF9jbnQsIFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NUT1ApOworCQkJfQorCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5H
X0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVMTCwgZXJyb3IsIFNDVFBfU0VO
RF9OT1dfQ09NUExFVEVTKTsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIE5VTEwsIDB4ZGVhZGJl
ZWYsIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTKTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAibS1jLW8gcHV0IG91dCAlZFxuIiwgbnVtX291dCk7
CisKKwkJdG90X291dCArPSBudW1fb3V0OworCQlidXJzdF9jbnQrKzsKKwkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkg
eworCQkJc2N0cF9sb2dfY3duZChzdGNiLCBOVUxMLCBudW1fb3V0LCBTQ1RQX1NFTkRfTk9XX0NP
TVBMRVRFUyk7CisJCQlpZiAobnVtX291dCA9PSAwKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNi
LCBOVUxMLCByZWFzb25fY29kZSwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOworCQkJfQorCQl9
CisJCWlmIChuYWdsZV9vbikgeworCQkJLyoKKwkJCSAqIFdoZW4gdGhlIE5hZ2xlIGFsZ29yaXRo
bSBpcyB1c2VkLCBsb29rIGF0IGhvdyBtdWNoCisJCQkgKiBpcyB1bnNlbnQsIHRoZW4gaWYgaXRz
IHNtYWxsZXIgdGhhbiBhbiBNVFUgYW5kIHdlCisJCQkgKiBoYXZlIGRhdGEgaW4gZmxpZ2h0IHdl
IHN0b3AsIGV4Y2VwdCBpZiB3ZSBhcmUKKwkJCSAqIGhhbmRsaW5nIGEgZnJhZ21lbnRlZCB1c2Vy
IG1lc3NhZ2UuCisJCQkgKi8KKwkJCXVuX3NlbnQgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9x
dWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisJCQlpZiAoKHVuX3NlbnQgPCAo
aW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkgJiYKKwkJ
CSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPiAwKSkgeworLyoJJiYJCSAgICAgc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKSkpIHsqLworCQkJ
CWJyZWFrOworCQkJfQorCQl9CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlKSAmJgorCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCSAg
ICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNvX2xvY2tlZCkgPT0gMCkgeworCQkJ
LyogTm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmICgoc3RjYi0+
YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KSA8
PSAwKSB7CisJCQkvKiBOb3RoaW5nIGxlZnQgdG8gc2VuZCAqLworCQkJYnJlYWs7CisJCX0KKwl9
IHdoaWxlIChudW1fb3V0ICYmCisJICAgICAgICAgKChhc29jLT5tYXhfYnVyc3QgPT0gMCkgfHwK
KwkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpIHx8CisJ
CSAgKGJ1cnN0X2NudCA8IGFzb2MtPm1heF9idXJzdCkpKTsKKworCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpID09IDApIHsKKwkJaWYgKChhc29jLT5t
YXhfYnVyc3QgPiAwKSAmJiAoYnVyc3RfY250ID49IGFzb2MtPm1heF9idXJzdCkpIHsKKwkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsKKwkJCWFzb2MtPmJ1cnN0X2xpbWl0
X2FwcGxpZWQgPSAxOworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX21heGJ1cnN0KHN0
Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24sIDAsIGJ1cnN0X2NudCwgU0NUUF9NQVhfQlVS
U1RfQVBQTElFRCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhc29jLT5idXJzdF9saW1pdF9hcHBs
aWVkID0gMDsKKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwg
TlVMTCwgdG90X291dCwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOworCX0KKwlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMSwgIk9rLCB3ZSBoYXZlIHB1dCBvdXQgJWQgY2h1bmtzXG4iLAorCQl0
b3Rfb3V0KTsKKworCS8qLQorCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFuIHVwIHRoZSBjb250cm9s
IGNodW5rIGNoYWluIGlmIGEgRUNORSBpcyBvbgorCSAqIGl0LiBJdCBtdXN0IGJlIG1hcmtlZCBh
cyBVTlNFTlQgYWdhaW4gc28gbmV4dCBjYWxsIHdpbGwgY29udGludWUKKwkgKiB0byBzZW5kIGl0
IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldCBhIENXUiwgdG8gcmVtb3ZlIGl0LgorCSAqLwor
CWlmIChzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpCisJCXNjdHBfZml4X2Vjbl9lY2hvKGFz
b2MpOworCisJaWYgKHN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCkgeworCQlpZiAoc2N0cF9zZW5k
X3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwgc29fbG9ja2VkKSA9PSAwKSAgewor
CQkJZ290byBkb19pdF9hZ2FpbjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKworaW50CitzY3Rw
X291dHB1dCgKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2lmIGRlZmluZWQoX19QYW5kYV9f
KQorCXBha2hhbmRsZV90eXBlIG0sCisjZWxzZQorCXN0cnVjdCBtYnVmICptLAorI2VuZGlmCisJ
c3RydWN0IHNvY2thZGRyICphZGRyLAorI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCXBha2hhbmRs
ZV90eXBlIGNvbnRyb2wsCisjZWxzZQorCXN0cnVjdCBtYnVmICpjb250cm9sLAorI2VuZGlmCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisJ
c3RydWN0IHRocmVhZCAqcCwKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCisJUEtUSFJFQUQg
cCwKKyNlbHNlCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0IHByb2MgKnAgU0NUUF9V
TlVTRUQsCisjZWxzZQorCXN0cnVjdCBwcm9jICpwLAorI2VuZGlmCisjZW5kaWYKKwlpbnQgZmxh
Z3MpCit7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0s
IGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKGlucC0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlyZXR1cm4gKHNjdHBf
c29zZW5kKGlucC0+c2N0cF9zb2NrZXQsCisJCQkgICAgYWRkciwKKwkJCSAgICAoc3RydWN0IHVp
byAqKU5VTEwsCisJCQkgICAgbSwKKwkJCSAgICBjb250cm9sLAorI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKKwkJCSAgICBmbGFncworI2Vsc2UKKwkJCSAgICBm
bGFncywgcAorI2VuZGlmCisJCQkpKTsKK30KKwordm9pZAorc2VuZF9mb3J3YXJkX3RzbihzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sK
KwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphdCwgKnRwMSwgKmxhc3Q7CisJc3RydWN0
IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZHRzbjsKKwlzdHJ1Y3Qgc2N0cF9zdHJzZXEgKnN0
cnNlcTsKKwlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHJzZXFfbTsKKwl1aW50MzJfdCBhZHZh
bmNlX3BlZXJfYWNrX3BvaW50OworCXVuc2lnbmVkIGludCBjbnRfb2Zfc3BhY2UsIGksIG92aDsK
Kwl1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkOworCXVuc2lnbmVkIGludCBjbnRfb2Zfc2tpcHBl
ZCA9IDA7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlUQUlMUV9GT1JFQUNIKGNo
aywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnJl
Yy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgeworCQkJLyogbWFyayBpdCB0
byB1bnNlbnQgKi8KKwkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCQkJY2hr
LT5zbmRfY291bnQgPSAwOworCQkJLyogRG8gd2UgY29ycmVjdCBpdHMgb3V0cHV0IGxvY2F0aW9u
PyAqLworCQkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hr
LT53aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlnb3RvIHNjdHBfZmls
bF9pbl9yZXN0OworCQl9CisJfQorCS8qIE9rIGlmIHdlIHJlYWNoIGhlcmUgd2UgbXVzdCBidWls
ZCBvbmUgKi8KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5V
TEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jLT5md2RfdHNuX2NudCsrOworCWNoay0+Y29weV9i
eV9yZWYgPSAwOworCS8qCisJICogV2UgZG9uJ3QgZG8gdGhlIG9sZCB0aGluZyBoZXJlIHNpbmNl
CisJICogdGhpcyBpcyB1c2VkIG5vdCBmb3Igb24td2lyZSBidXQgdG8KKwkgKiB0ZWxsIGlmIHdl
IGFyZSBzZW5kaW5nIGEgZndkLXRzbiBieQorCSAqIHRoZSBzdGFjayBkdXJpbmcgb3V0cHV0LiBB
bmQgaWYgaXRzCisJICogYSBJRk9SV0FSRCBvciBhIEZPUldBUkQgaXQgaXMgYSBmd2QtdHNuLgor
CSAqLworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9GT1JXQVJEX0NVTV9UU047CisJY2hr
LT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9IDA7CisJY2hr
LT5hc29jID0gYXNvYzsKKwljaGstPndob1RvID0gTlVMTDsKKwljaGstPmRhdGEgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAo
Y2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5k
YXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNF
TlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5jb250
cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsr
Oworc2N0cF9maWxsX2luX3Jlc3Q6CisJLyotCisJICogSGVyZSB3ZSBnbyB0aHJvdWdoIGFuZCBm
aWxsIG91dCB0aGUgcGFydCB0aGF0IGRlYWxzIHdpdGgKKwkgKiBzdHJlYW0vc2VxIG9mIHRoZSBv
bmVzIHdlIHNraXAuCisJICovCisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSAwOworCVRBSUxR
X0ZPUkVBQ0goYXQsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKChhdC0+
c2VudCAhPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApICYmCisJCSAgICAoYXQtPnNlbnQgIT0gU0NU
UF9EQVRBR1JBTV9OUl9BQ0tFRCkpIHsKKwkJCS8qIG5vIG1vcmUgdG8gbG9vayBhdCAqLworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKGF0LT5yZWMuZGF0
YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJLyogV2UgZG9uJ3QgcmVw
b3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQljbnRfb2Zfc2tpcHBlZCsrOworCX0K
KwlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCXNwYWNlX25lZWRlZCA9IChzaXplb2Yo
c3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspICsKKwkJICAgICAgICAgICAgICAgIChjbnRf
b2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKSkpOworCX0gZWxzZSB7
CisJCXNwYWNlX25lZWRlZCA9IChzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsp
ICsKKwkJICAgICAgICAgICAgICAgIChjbnRfb2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJzZXEpKSk7CisJfQorCWNudF9vZl9zcGFjZSA9ICh1bnNpZ25lZCBpbnQpTV9UUkFJTElO
R1NQQUNFKGNoay0+ZGF0YSk7CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCW92aCA9IFNDVFBfTUlOX09WRVJIRUFEOworCX0g
ZWxzZSB7CisJCW92aCA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCX0KKwlpZiAoY250X29mX3Nw
YWNlID4gKGFzb2MtPnNtYWxsZXN0X210dSAtIG92aCkpIHsKKwkJLyogdHJpbSB0byBhIG10dSBz
aXplICovCisJCWNudF9vZl9zcGFjZSA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKKwl9CisJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1RSWV9B
RFZBTkNFKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKKwkJCSAgICAg
ICAweGZmLCAwLCBjbnRfb2Zfc2tpcHBlZCwKKwkJCSAgICAgICBhc29jLT5hZHZhbmNlZF9wZWVy
X2Fja19wb2ludCk7CisJfQorCWFkdmFuY2VfcGVlcl9hY2tfcG9pbnQgPSBhc29jLT5hZHZhbmNl
ZF9wZWVyX2Fja19wb2ludDsKKwlpZiAoY250X29mX3NwYWNlIDwgc3BhY2VfbmVlZGVkKSB7CisJ
CS8qLQorCQkgKiBvayB3ZSBtdXN0IHRyaW0gZG93biB0aGUgY2h1bmsgYnkgbG93ZXJpbmcgdGhl
CisJCSAqIGFkdmFuY2UgcGVlciBhY2sgcG9pbnQuCisJCSAqLworCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKKwkJCXNj
dHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKKwkJCQkgICAgICAgMHhmZiwgMHhmZiwg
Y250X29mX3NwYWNlLAorCQkJCSAgICAgICBzcGFjZV9uZWVkZWQpOworCQl9CisJCWNudF9vZl9z
a2lwcGVkID0gY250X29mX3NwYWNlIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2No
dW5rKTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJY250X29mX3NraXBwZWQg
Lz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcV9taWQpOworCQl9IGVsc2UgeworCQkJY250X29m
X3NraXBwZWQgLz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJCX0KKwkJLyotCisJCSAq
IEdvIHRocm91Z2ggYW5kIGZpbmQgdGhlIFRTTiB0aGF0IHdpbGwgYmUgdGhlIG9uZQorCQkgKiB3
ZSByZXBvcnQuCisJCSAqLworCQlhdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW50X3F1ZXVlKTsK
KwkJaWYgKGF0ICE9IE5VTEwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBjbnRfb2Zfc2tpcHBlZDsg
aSsrKSB7CisJCQkJdHAxID0gVEFJTFFfTkVYVChhdCwgc2N0cF9uZXh0KTsKKwkJCQlpZiAodHAx
ID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWF0ID0gdHAxOworCQkJfQorCQl9
CisJCWlmIChhdCAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X0xPR19UUllfQURWQU5DRSkgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GV0RfVFNOX0NIRUNL
LAorCQkJCSAgICAgICAweGZmLCBjbnRfb2Zfc2tpcHBlZCwgYXQtPnJlYy5kYXRhLnRzbiwKKwkJ
CQkgICAgICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpOworCQl9CisJCWxhc3QgPSBh
dDsKKwkJLyotCisJCSAqIGxhc3Qgbm93IHBvaW50cyB0byBsYXN0IG9uZSBJIGNhbiByZXBvcnQs
IHVwZGF0ZQorCQkgKiBwZWVyIGFjayBwb2ludAorCQkgKi8KKwkJaWYgKGxhc3QpIHsKKwkJCWFk
dmFuY2VfcGVlcl9hY2tfcG9pbnQgPSBsYXN0LT5yZWMuZGF0YS50c247CisJCX0KKwkJaWYgKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJc3BhY2VfbmVlZGVkID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCisJCQkgICAgICAgICAgICAgICBjbnRfb2Zfc2tpcHBl
ZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKKwkJfSBlbHNlIHsKKwkJCXNwYWNl
X25lZWRlZCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykgKworCQkJICAg
ICAgICAgICAgICAgY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxKTsK
KwkJfQorCX0KKwljaGstPnNlbmRfc2l6ZSA9IHNwYWNlX25lZWRlZDsKKwkvKiBTZXR1cCB0aGUg
Y2h1bmsgKi8KKwlmd2R0c24gPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfZm9yd2FyZF90
c25fY2h1bmsgKik7CisJZndkdHNuLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRf
c2l6ZSk7CisJZndkdHNuLT5jaC5jaHVua19mbGFncyA9IDA7CisJaWYgKGFzb2MtPmlkYXRhX3N1
cHBvcnRlZCkgeworCQlmd2R0c24tPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0lGT1JXQVJEX0NVTV9U
U047CisJfSBlbHNlIHsKKwkJZndkdHNuLT5jaC5jaHVua190eXBlID0gU0NUUF9GT1JXQVJEX0NV
TV9UU047CisJfQorCWZ3ZHRzbi0+bmV3X2N1bXVsYXRpdmVfdHNuID0gaHRvbmwoYWR2YW5jZV9w
ZWVyX2Fja19wb2ludCk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6
ZTsKKwlmd2R0c24rKzsKKwkvKi0KKwkgKiBNb3ZlIHBvaW50ZXIgdG8gYWZ0ZXIgdGhlIGZ3ZHRz
biBhbmQgdHJhbnNmZXIgdG8gdGhlCisJICogc3Ryc2VxIHBvaW50ZXIuCisJICovCisJaWYgKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQlzdHJzZXFfbSA9IChzdHJ1Y3Qgc2N0cF9zdHJzZXFf
bWlkICopZndkdHNuOworCQlzdHJzZXEgPSBOVUxMOworCX0gZWxzZSB7CisJCXN0cnNlcSA9IChz
dHJ1Y3Qgc2N0cF9zdHJzZXEgKilmd2R0c247CisJCXN0cnNlcV9tID0gTlVMTDsKKwl9CisJLyot
CisJICogTm93IHBvcHVsYXRlIHRoZSBzdHJzZXEgbGlzdC4gVGhpcyBpcyBkb25lIGJsaW5kbHkK
KwkgKiB3aXRob3V0IHB1bGxpbmcgb3V0IGR1cGxpY2F0ZSBzdHJlYW0gaW5mby4gVGhpcyBpcwor
CSAqIGluZWZmaWNlbnQgYnV0IHdvbid0IGhhcm0gdGhlIHByb2Nlc3Mgc2luY2UgdGhlIHBlZXIg
d2lsbAorCSAqIGxvb2sgYXQgdGhlc2UgaW4gc2VxdWVuY2UgYW5kIHdpbGwgdGh1cyByZWxlYXNl
IGFueXRoaW5nLgorCSAqIEl0IGNvdWxkIG1lYW4gd2UgZXhjZWVkIHRoZSBQTVRVIGFuZCBjaG9w
IG9mZiBzb21lIHRoYXQKKwkgKiB3ZSBjb3VsZCBoYXZlIGluY2x1ZGVkLi4gYnV0IHRoaXMgaXMg
dW5saWtlbHkgKGFrYSAxNDMyLzQKKwkgKiB3b3VsZCBtZWFuIDMwMCsgc3RyZWFtIHNlcSdzIHdv
dWxkIGhhdmUgdG8gYmUgcmVwb3J0ZWQgaW4KKwkgKiBvbmUgRldELVRTTi4gV2l0aCBhIGJpdCBv
ZiB3b3JrIHdlIGNhbiBsYXRlciBGSVggdGhpcyB0bworCSAqIG9wdGltaXplIGFuZCBwdWxsIG91
dCBkdXBsaWNhdGVzLi4gYnV0IGl0IGRvZXMgYWRkIG1vcmUKKwkgKiBvdmVyaGVhZC4gU28gZm9y
IG5vdy4uLiBub3QhCisJICovCisJaSA9IDA7CisJVEFJTFFfRk9SRUFDSChhdCwgJmFzb2MtPnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoaSA+PSBjbnRfb2Zfc2tpcHBlZCkgeworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKGF0LT5yZWMuZGF0
YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJLyogV2UgZG9uJ3QgcmVw
b3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXQtPnJlYy5kYXRhLnRzbiA9
PSBhZHZhbmNlX3BlZXJfYWNrX3BvaW50KSB7CisJCQlhdC0+cmVjLmRhdGEuZndkX3Rzbl9jbnQg
PSAwOworCQl9CisJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCXN0cnNlcV9tLT5z
aWQgPSBodG9ucyhhdC0+cmVjLmRhdGEuc2lkKTsKKwkJCWlmIChhdC0+cmVjLmRhdGEucmN2X2Zs
YWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJCXN0cnNlcV9tLT5mbGFncyA9IGh0b25z
KFBSX1NDVFBfVU5PUkRFUkVEX0ZMQUcpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJzZXFfbS0+Zmxh
Z3MgPSAwOworCQkJfQorCQkJc3Ryc2VxX20tPm1pZCA9IGh0b25sKGF0LT5yZWMuZGF0YS5taWQp
OworCQkJc3Ryc2VxX20rKzsKKwkJfSBlbHNlIHsKKwkJCXN0cnNlcS0+c2lkID0gaHRvbnMoYXQt
PnJlYy5kYXRhLnNpZCk7CisJCQlzdHJzZXEtPnNzbiA9IGh0b25zKCh1aW50MTZfdClhdC0+cmVj
LmRhdGEubWlkKTsKKwkJCXN0cnNlcSsrOworCQl9CisJCWkrKzsKKwl9CisJcmV0dXJuOworfQor
Cit2b2lkCitzY3RwX3NlbmRfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2Nr
ZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQorCVNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKwkvKi0KKwkgKiBRdWV1ZSB1cCBhIFNB
Q0sgb3IgTlItU0FDSyBpbiB0aGUgY29udHJvbCBxdWV1ZS4KKwkgKiBXZSBtdXN0IGZpcnN0IGNo
ZWNrIHRvIHNlZSBpZiBhIFNBQ0sgb3IgTlItU0FDSyBpcworCSAqIHNvbWVob3cgb24gdGhlIGNv
bnRyb2wgcXVldWUuCisJICogSWYgc28sIHdlIHdpbGwgdGFrZSBhbmQgYW5kIHJlbW92ZSB0aGUg
b2xkIG9uZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGssICphX2NoazsKKwlzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICpz
YWNrOworCXN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKm5yX3NhY2s7CisJc3RydWN0IHNjdHBf
Z2FwX2Fja19ibG9jayAqZ2FwX2Rlc2NyaXB0b3I7CisJY29uc3Qgc3RydWN0IHNhY2tfdHJhY2sg
KnNlbGVjdG9yOworCWludCBtZXJnZWFibGUgPSAwOworCWludCBvZmZzZXQ7CisJY2FkZHJfdCBs
aW1pdDsKKwl1aW50MzJfdCAqZHVwOworCWludCBsaW1pdF9yZWFjaGVkID0gMDsKKwl1bnNpZ25l
ZCBpbnQgaSwgc2l6LCBqOworCXVuc2lnbmVkIGludCBudW1fZ2FwX2Jsb2NrcyA9IDAsIG51bV9u
cl9nYXBfYmxvY2tzID0gMCwgc3BhY2U7CisJaW50IG51bV9kdXBzID0gMDsKKwlpbnQgc3BhY2Vf
cmVxOworCXVpbnQzMl90IGhpZ2hlc3RfdHNuOworCXVpbnQ4X3QgZmxhZ3M7CisJdWludDhfdCB0
eXBlOworCXVpbnQ4X3QgdHNuX21hcDsKKworCWlmIChzdGNiLT5hc29jLm5yc2Fja19zdXBwb3J0
ZWQgPT0gMSkgeworCQl0eXBlID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOworCX0gZWxzZSB7CisJ
CXR5cGUgPSBTQ1RQX1NFTEVDVElWRV9BQ0s7CisJfQorCWFfY2hrID0gTlVMTDsKKwlhc29jID0g
JnN0Y2ItPmFzb2M7CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJaWYgKGFzb2MtPmxh
c3RfZGF0YV9jaHVua19mcm9tID09IE5VTEwpIHsKKwkJLyogSG1tIHdlIG5ldmVyIHJlY2VpdmVk
IGFueXRoaW5nICovCisJCXJldHVybjsKKwl9CisJc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhz
dGNiKTsKKwlzY3RwX3NldF9yd25kKHN0Y2IsIGFzb2MpOworCVRBSUxRX0ZPUkVBQ0goY2hrLCAm
YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+cmVjLmNo
dW5rX2lkLmlkID09IHR5cGUpIHsKKwkJCS8qIEhtbSwgZm91bmQgYSBzYWNrIGFscmVhZHkgb24g
cXVldWUsIHJlbW92ZSBpdCAqLworCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRf
cXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJCWFzb2MtPmN0cmxfcXVldWVfY250LS07CisJCQlh
X2NoayA9IGNoazsKKwkJCWlmIChhX2Noay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShhX2No
ay0+ZGF0YSk7CisJCQkJYV9jaGstPmRhdGEgPSBOVUxMOworCQkJfQorCQkJaWYgKGFfY2hrLT53
aG9UbykgeworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihhX2Noay0+d2hvVG8pOworCQkJCWFf
Y2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoYV9jaGsg
PT0gTlVMTCkgeworCQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgYV9jaGspOworCQlpZiAoYV9j
aGsgPT0gTlVMTCkgeworCQkJLyogTm8gbWVtb3J5IHNvIHdlIGRyb3AgdGhlIGlkZWEsIGFuZCBz
ZXQgYSB0aW1lciAqLworCQkJaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9hY2spIHsKKwkJCQlzY3Rw
X3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJICAgICAgICAgICAgICAgIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX09VVFBVVCArIFNDVFBfTE9DXzMpOworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1JFQ1YsCisJCQkJICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwpOworCQkJfSBl
bHNlIHsKKwkJCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7CisJCQl9CisJCQlyZXR1cm47CisJ
CX0KKwkJYV9jaGstPmNvcHlfYnlfcmVmID0gMDsKKwkJYV9jaGstPnJlYy5jaHVua19pZC5pZCA9
IHR5cGU7CisJCWFfY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7CisJfQorCS8q
IENsZWFyIG91ciBwa3QgY291bnRzICovCisJYXNvYy0+ZGF0YV9wa3RzX3NlZW4gPSAwOworCisJ
YV9jaGstPmZsYWdzID0gMDsKKwlhX2Noay0+YXNvYyA9IGFzb2M7CisJYV9jaGstPnNuZF9jb3Vu
dCA9IDA7CisJYV9jaGstPnNlbmRfc2l6ZSA9IDA7CS8qIGZpbGwgaW4gbGF0ZXIgKi8KKwlhX2No
ay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWFfY2hrLT53aG9UbyA9IE5VTEw7CisK
KwlpZiAoIShhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbS0+ZGVzdF9zdGF0ZSAmIFNDVFBfQURE
Ul9SRUFDSEFCTEUpKSB7CisJCS8qLQorCQkgKiBPaywgdGhlIGRlc3RpbmF0aW9uIGZvciB0aGUg
U0FDSyBpcyB1bnJlYWNoYWJsZSwgbGV0cyBzZWUgaWYKKwkJICogd2UgY2FuIHNlbGVjdCBhbiBh
bHRlcm5hdGUgdG8gYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20KKwkJICovCisJCWFfY2hrLT53
aG9UbyA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIGFzb2MtPmxhc3RfZGF0YV9jaHVu
a19mcm9tLCAwKTsKKwkJaWYgKGFfY2hrLT53aG9UbyA9PSBOVUxMKSB7CisJCQkvKiBOb3BlLCBu
byBhbHRlcm5hdGUgKi8KKwkJCWFfY2hrLT53aG9UbyA9IGFzb2MtPmxhc3RfZGF0YV9jaHVua19m
cm9tOworCQl9CisJfSBlbHNlIHsKKwkJYV9jaGstPndob1RvID0gYXNvYy0+bGFzdF9kYXRhX2No
dW5rX2Zyb207CisJfQorCWlmIChhX2Noay0+d2hvVG8pIHsKKwkJYXRvbWljX2FkZF9pbnQoJmFf
Y2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwl9CisJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmhp
Z2hlc3RfdHNuX2luc2lkZV9tYXAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7
CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKKwl9IGVsc2Ug
eworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXA7CisJfQor
CWlmIChoaWdoZXN0X3RzbiA9PSBhc29jLT5jdW11bGF0aXZlX3RzbikgeworCQkvKiBubyBnYXBz
ICovCisJCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQkJc3BhY2VfcmVxID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspOworCQl9IGVsc2UgeworCQkJc3BhY2VfcmVx
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspOworCQl9CisJfSBlbHNlIHsKKwkJ
LyogZ2FwcyBnZXQgYSBjbHVzdGVyICovCisJCXNwYWNlX3JlcSA9IE1DTEJZVEVTOworCX0KKwkv
KiBPayBub3cgbGV0cyBmb3JtdWxhdGUgYSBNQlVGIHdpdGggb3VyIHNhY2sgKi8KKwlhX2Noay0+
ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzcGFjZV9yZXEsIDAsIE1fTk9XQUlULCAxLCBN
VF9EQVRBKTsKKwlpZiAoKGFfY2hrLT5kYXRhID09IE5VTEwpIHx8CisJICAgIChhX2Noay0+d2hv
VG8gPT0gTlVMTCkpIHsKKwkJLyogcmF0cywgbm8gbWJ1ZiBtZW1vcnkgKi8KKwkJaWYgKGFfY2hr
LT5kYXRhKSB7CisJCQkvKiB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGRlc3RpbmF0aW9uICovCisJ
CQlzY3RwX21fZnJlZW0oYV9jaGstPmRhdGEpOworCQkJYV9jaGstPmRhdGEgPSBOVUxMOworCQl9
CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGFfY2hrLCBzb19sb2NrZWQpOworCQkvKiBzYV9p
Z25vcmUgTk9fTlVMTF9DSEsgKi8KKwkJaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9hY2spIHsKKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUkVDViwKKwkJCSAgICAgICAgICAgICAg
ICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCArIFNDVFBfTE9DXzQpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfUkVDViwKKwkJCSAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKKwkJfSBl
bHNlIHsKKwkJCXN0Y2ItPmFzb2Muc2VuZF9zYWNrID0gMTsKKwkJfQorCQlyZXR1cm47CisJfQor
CS8qIG9rLCBsZXRzIGdvIHRocm91Z2ggYW5kIGZpbGwgaXQgaW4gKi8KKwlTQ1RQX0JVRl9SRVNW
X1VGKGFfY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJc3BhY2UgPSAodW5zaWduZWQg
aW50KU1fVFJBSUxJTkdTUEFDRShhX2Noay0+ZGF0YSk7CisJaWYgKHNwYWNlID4gKGFfY2hrLT53
aG9Uby0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSB7CisJCXNwYWNlID0gKGFfY2hrLT53aG9U
by0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpOworCX0KKwlsaW1pdCA9IG10b2QoYV9jaGstPmRh
dGEsIGNhZGRyX3QpOworCWxpbWl0ICs9IHNwYWNlOworCisJZmxhZ3MgPSAwOworCisJaWYgKChh
c29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
Y210X3VzZV9kYWMpKSB7CisJCS8qLQorCQkgKiBDTVQgREFDIGFsZ29yaXRobTogSWYgMiAoaS5l
LiwgMHgxMCkgcGFja2V0cyBoYXZlIGJlZW4KKwkJICogcmVjZWl2ZWQsIHRoZW4gc2V0IGhpZ2gg
Yml0IHRvIDEsIGVsc2UgMC4gUmVzZXQKKwkJICogcGt0c19yY3ZkLgorCQkgKi8KKwkJZmxhZ3Mg
fD0gKGFzb2MtPmNtdF9kYWNfcGt0c19yY3ZkIDw8IDYpOworCQlhc29jLT5jbXRfZGFjX3BrdHNf
cmN2ZCA9IDA7CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJc3RjYi0+YXNvYy5j
dW1hY2tfbG9nc250W3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNudF0gPSBhc29jLT5jdW11bGF0
aXZlX3RzbjsKKwlzdGNiLT5hc29jLmN1bWFja19sb2dfYXRzbnQrKzsKKwlpZiAoc3RjYi0+YXNv
Yy5jdW1hY2tfbG9nX2F0c250ID49IFNDVFBfVFNOX0xPR19TSVpFKSB7CisJCXN0Y2ItPmFzb2Mu
Y3VtYWNrX2xvZ19hdHNudCA9IDA7CisJfQorI2VuZGlmCisJLyogcmVzZXQgdGhlIHJlYWRlcnMg
aW50ZXJwcmV0YXRpb24gKi8KKwlzdGNiLT5mcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QgPSAwOwor
CisJaWYgKHR5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB7CisJCXNhY2sgPSBtdG9kKGFfY2hr
LT5kYXRhLCBzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICopOworCQlucl9zYWNrID0gTlVMTDsKKwkJ
Z2FwX2Rlc2NyaXB0b3IgPSAoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jayAqKSgoY2FkZHJfdClz
YWNrICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspKTsKKwkJaWYgKGhpZ2hlc3RfdHNu
ID4gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgeworCQkJc2l6ID0gKCgoaGlnaGVzdF90
c24gLSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSArIDEpICsgNykgLyA4OworCQl9IGVs
c2UgeworCQkJc2l6ID0gKCgoTUFYX1RTTiAtIGhpZ2hlc3RfdHNuKSArIDEpICsgaGlnaGVzdF90
c24gKyA3KSAvIDg7CisJCX0KKwl9IGVsc2UgeworCQlzYWNrID0gTlVMTDsKKwkJbnJfc2FjayA9
IG10b2QoYV9jaGstPmRhdGEsIHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKik7CisJCWdhcF9k
ZXNjcmlwdG9yID0gKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKikoKGNhZGRyX3QpbnJfc2Fj
ayArIHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSk7CisJCWlmIChhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwID4gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgeworCQkJ
c2l6ID0gKCgoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCAtIGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24pICsgMSkgKyA3KSAvIDg7CisJCX0gZWxzZSB7CisJCQlzaXogPSAoKChNQVhf
VFNOIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9tYXAgKyA3KSAvIDg7CisJCX0KKwl9CisKKwlpZiAoU0NUUF9UU05fR1QoYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiwgYXNvYy0+Y3VtdWxhdGl2ZV90c24pKSB7CisJCW9m
ZnNldCA9IDE7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNl
X3RzbiAtIGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCX0KKwlpZiAoKCh0eXBlID09IFNDVFBfU0VM
RUNUSVZFX0FDSykgJiYKKwkgICAgIFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBhc29jLT5jdW11
bGF0aXZlX3RzbikpIHx8CisJICAgICgodHlwZSA9PSBTQ1RQX05SX1NFTEVDVElWRV9BQ0spICYm
CisJICAgICBTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBhc29jLT5j
dW11bGF0aXZlX3RzbikpKSB7CisJCS8qIHdlIGhhdmUgYSBnYXAgLi4gbWF5YmUgKi8KKwkJZm9y
IChpID0gMDsgaSA8IHNpejsgaSsrKSB7CisJCQl0c25fbWFwID0gYXNvYy0+bWFwcGluZ19hcnJh
eVtpXTsKKwkJCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQkJCXRzbl9tYXAg
fD0gYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpXTsKKwkJCX0KKwkJCWlmIChpID09IDApIHsKKwkJ
CQkvKgorCQkJCSAqIENsZWFyIGFsbCBiaXRzIGNvcnJlc3BvbmRpbmcgdG8gVFNOcworCQkJCSAq
IHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1bXVsYXRpdmUgVFNOLgorCQkJCSAqLworCQkJCXRz
bl9tYXAgJj0gKH4wVSA8PCAoMSAtIG9mZnNldCkpOworCQkJfQorCQkJc2VsZWN0b3IgPSAmc2Fj
a19hcnJheVt0c25fbWFwXTsKKwkJCWlmIChtZXJnZWFibGUgJiYgc2VsZWN0b3ItPnJpZ2h0X2Vk
Z2UpIHsKKwkJCQkvKgorCQkJCSAqIEJhY2t1cCwgbGVmdCBhbmQgcmlnaHQgZWRnZXMgd2VyZSBv
ayB0bworCQkJCSAqIG1lcmdlLgorCQkJCSAqLworCQkJCW51bV9nYXBfYmxvY2tzLS07CisJCQkJ
Z2FwX2Rlc2NyaXB0b3ItLTsKKwkJCX0KKwkJCWlmIChzZWxlY3Rvci0+bnVtX2VudHJpZXMgPT0g
MCkKKwkJCQltZXJnZWFibGUgPSAwOworCQkJZWxzZSB7CisJCQkJZm9yIChqID0gMDsgaiA8IHNl
bGVjdG9yLT5udW1fZW50cmllczsgaisrKSB7CisJCQkJCWlmIChtZXJnZWFibGUgJiYgc2VsZWN0
b3ItPnJpZ2h0X2VkZ2UpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBkbyBhIG1lcmdlIGJ5IE5PVCBz
ZXR0aW5nCisJCQkJCQkgKiB0aGUgbGVmdCBzaWRlCisJCQkJCQkgKi8KKwkJCQkJCW1lcmdlYWJs
ZSA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKgorCQkJCQkJICogbm8gbWVyZ2UsIHNldCB0
aGUgbGVmdAorCQkJCQkJICogc2lkZQorCQkJCQkJICovCisJCQkJCQltZXJnZWFibGUgPSAwOwor
CQkJCQkJZ2FwX2Rlc2NyaXB0b3ItPnN0YXJ0ID0gaHRvbnMoKHNlbGVjdG9yLT5nYXBzW2pdLnN0
YXJ0ICsgb2Zmc2V0KSk7CisJCQkJCX0KKwkJCQkJZ2FwX2Rlc2NyaXB0b3ItPmVuZCA9IGh0b25z
KChzZWxlY3Rvci0+Z2Fwc1tqXS5lbmQgKyBvZmZzZXQpKTsKKwkJCQkJbnVtX2dhcF9ibG9ja3Mr
KzsKKwkJCQkJZ2FwX2Rlc2NyaXB0b3IrKzsKKwkJCQkJaWYgKCgoY2FkZHJfdClnYXBfZGVzY3Jp
cHRvciArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSkgPiBsaW1pdCkgeworCQkJ
CQkJLyogbm8gbW9yZSByb29tICovCisJCQkJCQlsaW1pdF9yZWFjaGVkID0gMTsKKwkJCQkJCWJy
ZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChzZWxlY3Rvci0+bGVmdF9lZGdlKSB7CisJCQkJ
CW1lcmdlYWJsZSA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKGxpbWl0X3JlYWNoZWQpIHsKKwkJ
CQkvKiBSZWFjaGVkIHRoZSBsaW1pdCBzdG9wICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlvZmZz
ZXQgKz0gODsKKwkJfQorCX0KKwlpZiAoKHR5cGUgPT0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLKSAm
JgorCSAgICAobGltaXRfcmVhY2hlZCA9PSAwKSkgeworCisJCW1lcmdlYWJsZSA9IDA7CisKKwkJ
aWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPiBhc29jLT5tYXBwaW5nX2FycmF5
X2Jhc2VfdHNuKSB7CisJCQlzaXogPSAoKChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
IC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIDcpIC8gODsKKwkJfSBlbHNl
IHsKKwkJCXNpeiA9ICgoKE1BWF9UU04gLSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSAr
IDEpICsgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCArIDcpIC8gODsKKwkJfQorCisJ
CWlmIChTQ1RQX1RTTl9HVChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLCBhc29jLT5jdW11
bGF0aXZlX3RzbikpIHsKKwkJCW9mZnNldCA9IDE7CisJCX0gZWxzZSB7CisJCQlvZmZzZXQgPSBh
c29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuIC0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisJCX0K
KwkJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAsIGFzb2Mt
PmN1bXVsYXRpdmVfdHNuKSkgeworCQkJLyogd2UgaGF2ZSBhIGdhcCAuLiBtYXliZSAqLworCQkJ
Zm9yIChpID0gMDsgaSA8IHNpejsgaSsrKSB7CisJCQkJdHNuX21hcCA9IGFzb2MtPm5yX21hcHBp
bmdfYXJyYXlbaV07CisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkvKgorCQkJCQkgKiBDbGVhciBh
bGwgYml0cyBjb3JyZXNwb25kaW5nIHRvIFRTTnMKKwkJCQkJICogc21hbGxlciBvciBlcXVhbCB0
byB0aGUgY3VtdWxhdGl2ZSBUU04uCisJCQkJCSAqLworCQkJCQl0c25fbWFwICY9ICh+MFUgPDwg
KDEgLSBvZmZzZXQpKTsKKwkJCQl9CisJCQkJc2VsZWN0b3IgPSAmc2Fja19hcnJheVt0c25fbWFw
XTsKKwkJCQlpZiAobWVyZ2VhYmxlICYmIHNlbGVjdG9yLT5yaWdodF9lZGdlKSB7CisJCQkJCS8q
CisJCQkJCSogQmFja3VwLCBsZWZ0IGFuZCByaWdodCBlZGdlcyB3ZXJlIG9rIHRvCisJCQkJCSog
bWVyZ2UuCisJCQkJCSovCisJCQkJCW51bV9ucl9nYXBfYmxvY2tzLS07CisJCQkJCWdhcF9kZXNj
cmlwdG9yLS07CisJCQkJfQorCQkJCWlmIChzZWxlY3Rvci0+bnVtX2VudHJpZXMgPT0gMCkKKwkJ
CQkJbWVyZ2VhYmxlID0gMDsKKwkJCQllbHNlIHsKKwkJCQkJZm9yIChqID0gMDsgaiA8IHNlbGVj
dG9yLT5udW1fZW50cmllczsgaisrKSB7CisJCQkJCQlpZiAobWVyZ2VhYmxlICYmIHNlbGVjdG9y
LT5yaWdodF9lZGdlKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkqIGRvIGEgbWVyZ2UgYnkgTk9UIHNl
dHRpbmcKKwkJCQkJCQkqIHRoZSBsZWZ0IHNpZGUKKwkJCQkJCQkqLworCQkJCQkJCW1lcmdlYWJs
ZSA9IDA7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8qCisJCQkJCQkJKiBubyBtZXJnZSwgc2V0
IHRoZSBsZWZ0CisJCQkJCQkJKiBzaWRlCisJCQkJCQkJKi8KKwkJCQkJCQltZXJnZWFibGUgPSAw
OworCQkJCQkJCWdhcF9kZXNjcmlwdG9yLT5zdGFydCA9IGh0b25zKChzZWxlY3Rvci0+Z2Fwc1tq
XS5zdGFydCArIG9mZnNldCkpOworCQkJCQkJfQorCQkJCQkJZ2FwX2Rlc2NyaXB0b3ItPmVuZCA9
IGh0b25zKChzZWxlY3Rvci0+Z2Fwc1tqXS5lbmQgKyBvZmZzZXQpKTsKKwkJCQkJCW51bV9ucl9n
YXBfYmxvY2tzKys7CisJCQkJCQlnYXBfZGVzY3JpcHRvcisrOworCQkJCQkJaWYgKCgoY2FkZHJf
dClnYXBfZGVzY3JpcHRvciArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSkgPiBs
aW1pdCkgeworCQkJCQkJCS8qIG5vIG1vcmUgcm9vbSAqLworCQkJCQkJCWxpbWl0X3JlYWNoZWQg
PSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChzZWxlY3Rvci0+
bGVmdF9lZGdlKSB7CisJCQkJCQltZXJnZWFibGUgPSAxOworCQkJCQl9CisJCQkJfQorCQkJCWlm
IChsaW1pdF9yZWFjaGVkKSB7CisJCQkJCS8qIFJlYWNoZWQgdGhlIGxpbWl0IHN0b3AgKi8KKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJCW9mZnNldCArPSA4OworCQkJfQorCQl9CisJfQorCS8qIG5v
dyB3ZSBtdXN0IGFkZCBhbnkgZHVwcyB3ZSBhcmUgZ29pbmcgdG8gcmVwb3J0LiAqLworCWlmICgo
bGltaXRfcmVhY2hlZCA9PSAwKSAmJiAoYXNvYy0+bnVtZHVwdHNucykpIHsKKwkJZHVwID0gKHVp
bnQzMl90ICopIGdhcF9kZXNjcmlwdG9yOworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+bnVtZHVw
dHNuczsgaSsrKSB7CisJCQkqZHVwID0gaHRvbmwoYXNvYy0+ZHVwX3RzbnNbaV0pOworCQkJZHVw
Kys7CisJCQludW1fZHVwcysrOworCQkJaWYgKCgoY2FkZHJfdClkdXAgKyBzaXplb2YodWludDMy
X3QpKSA+IGxpbWl0KSB7CisJCQkJLyogbm8gbW9yZSByb29tICovCisJCQkJYnJlYWs7CisJCQl9
CisJCX0KKwkJYXNvYy0+bnVtZHVwdHNucyA9IDA7CisJfQorCS8qCisJICogbm93IHRoYXQgdGhl
IGNodW5rIGlzIHByZXBhcmVkIHF1ZXVlIGl0IHRvIHRoZSBjb250cm9sIGNodW5rCisJICogcXVl
dWUuCisJICovCisJaWYgKHR5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB7CisJCWFfY2hrLT5z
ZW5kX3NpemUgPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rKSArCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fZ2FwX2Jsb2NrcyArIG51bV9ucl9n
YXBfYmxvY2tzKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSArCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9kdXBzICogc2l6ZW9mKGludDMyX3QpKTsKKwkJ
U0NUUF9CVUZfTEVOKGFfY2hrLT5kYXRhKSA9IGFfY2hrLT5zZW5kX3NpemU7CisJCXNhY2stPnNh
Y2suY3VtX3Rzbl9hY2sgPSBodG9ubChhc29jLT5jdW11bGF0aXZlX3Rzbik7CisJCXNhY2stPnNh
Y2suYV9yd25kID0gaHRvbmwoYXNvYy0+bXlfcnduZCk7CisJCXNhY2stPnNhY2subnVtX2dhcF9h
Y2tfYmxrcyA9IGh0b25zKG51bV9nYXBfYmxvY2tzKTsKKwkJc2Fjay0+c2Fjay5udW1fZHVwX3Rz
bnMgPSBodG9ucyhudW1fZHVwcyk7CisJCXNhY2stPmNoLmNodW5rX3R5cGUgPSB0eXBlOworCQlz
YWNrLT5jaC5jaHVua19mbGFncyA9IGZsYWdzOworCQlzYWNrLT5jaC5jaHVua19sZW5ndGggPSBo
dG9ucyhhX2Noay0+c2VuZF9zaXplKTsKKwl9IGVsc2UgeworCQlhX2Noay0+c2VuZF9zaXplID0g
KHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuaykgKworCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAobnVtX2dhcF9ibG9ja3MgKyBudW1fbnJfZ2FwX2Jsb2Nr
cykgKiBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykgKworCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1fZHVwcyAqIHNpemVvZihpbnQzMl90KSk7CisJCVNDVFBfQlVG
X0xFTihhX2Noay0+ZGF0YSkgPSBhX2Noay0+c2VuZF9zaXplOworCQlucl9zYWNrLT5ucl9zYWNr
LmN1bV90c25fYWNrID0gaHRvbmwoYXNvYy0+Y3VtdWxhdGl2ZV90c24pOworCQlucl9zYWNrLT5u
cl9zYWNrLmFfcnduZCA9IGh0b25sKGFzb2MtPm15X3J3bmQpOworCQlucl9zYWNrLT5ucl9zYWNr
Lm51bV9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fZ2FwX2Jsb2Nrcyk7CisJCW5yX3NhY2stPm5y
X3NhY2subnVtX25yX2dhcF9hY2tfYmxrcyA9IGh0b25zKG51bV9ucl9nYXBfYmxvY2tzKTsKKwkJ
bnJfc2Fjay0+bnJfc2Fjay5udW1fZHVwX3RzbnMgPSBodG9ucyhudW1fZHVwcyk7CisJCW5yX3Nh
Y2stPm5yX3NhY2sucmVzZXJ2ZWQgPSAwOworCQlucl9zYWNrLT5jaC5jaHVua190eXBlID0gdHlw
ZTsKKwkJbnJfc2Fjay0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKKwkJbnJfc2Fjay0+Y2guY2h1
bmtfbGVuZ3RoID0gaHRvbnMoYV9jaGstPnNlbmRfc2l6ZSk7CisJfQorCVRBSUxRX0lOU0VSVF9U
QUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGFfY2hrLCBzY3RwX25leHQpOworCWFzb2Mt
Pm15X2xhc3RfcmVwb3J0ZWRfcnduZCA9IGFzb2MtPm15X3J3bmQ7CisJYXNvYy0+Y3RybF9xdWV1
ZV9jbnQrKzsKKwlhc29jLT5zZW5kX3NhY2sgPSAwOworCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nl
bmRzYWNrcyk7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfYWJvcnRfdGNiKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm9wZXJyLCBpbnQgc29fbG9ja2VkCisjaWYg
IWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAg
ICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCXN0cnVjdCBtYnVmICptX2Fib3J0LCAq
bSwgKm1fbGFzdDsKKwlzdHJ1Y3QgbWJ1ZiAqbV9vdXQsICptX2VuZCA9IE5VTEw7CisJc3RydWN0
IHNjdHBfYWJvcnRfY2h1bmsgKmFib3J0OworCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGgg
PSBOVUxMOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwl1aW50MzJfdCB2dGFnOworCXVpbnQz
Ml90IGF1dGhfb2Zmc2V0ID0gMDsKKwlpbnQgZXJyb3I7CisJdWludDE2X3QgY2F1c2VfbGVuLCBj
aHVua19sZW4sIHBhZGRpbmdfbGVuOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNv
X2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXAp
KTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0
cF9lcCkpOworCX0KKyNlbmRpZgorCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCS8qLQor
CSAqIEFkZCBhbiBBVVRIIGNodW5rLCBpZiBjaHVuayByZXF1aXJlcyBpdCBhbmQgc2F2ZSB0aGUg
b2Zmc2V0IGludG8KKwkgKiB0aGUgY2hhaW4gZm9yIEFVVEgKKwkgKi8KKwlpZiAoc2N0cF9hdXRo
X2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfQUJPUlRfQVNTT0NJQVRJT04sCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7CisJCW1f
b3V0ID0gc2N0cF9hZGRfYXV0aF9jaHVuayhOVUxMLCAmbV9lbmQsICZhdXRoLCAmYXV0aF9vZmZz
ZXQsCisJCQkJCSAgICBzdGNiLCBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OKTsKKwkJU0NUUF9TVEFU
X0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCX0gZWxzZSB7CisJCW1f
b3V0ID0gTlVMTDsKKwl9CisJbV9hYm9ydCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yo
c3RydWN0IHNjdHBfYWJvcnRfY2h1bmspLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwlp
ZiAobV9hYm9ydCA9PSBOVUxMKSB7CisJCWlmIChtX291dCkgeworCQkJc2N0cF9tX2ZyZWVtKG1f
b3V0KTsKKwkJfQorCQlpZiAob3BlcnIpIHsKKwkJCXNjdHBfbV9mcmVlbShvcGVycik7CisJCX0K
KwkJcmV0dXJuOworCX0KKwkvKiBsaW5rIGluIGFueSBlcnJvciAqLworCVNDVFBfQlVGX05FWFQo
bV9hYm9ydCkgPSBvcGVycjsKKwljYXVzZV9sZW4gPSAwOworCW1fbGFzdCA9IE5VTEw7CisJZm9y
IChtID0gb3BlcnI7IG07IG0gPSBTQ1RQX0JVRl9ORVhUKG0pKSB7CisJCWNhdXNlX2xlbiArPSAo
dWludDE2X3QpU0NUUF9CVUZfTEVOKG0pOworCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxM
KSB7CisJCQltX2xhc3QgPSBtOworCQl9CisJfQorCVNDVFBfQlVGX0xFTihtX2Fib3J0KSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hYm9ydF9jaHVuayk7CisJY2h1bmtfbGVuID0gKHVpbnQxNl90KXNp
emVvZihzdHJ1Y3Qgc2N0cF9hYm9ydF9jaHVuaykgKyBjYXVzZV9sZW47CisJcGFkZGluZ19sZW4g
PSBTQ1RQX1NJWkUzMihjaHVua19sZW4pIC0gY2h1bmtfbGVuOworCWlmIChtX291dCA9PSBOVUxM
KSB7CisJCS8qIE5PIEF1dGggY2h1bmsgcHJlcGVuZGVkLCBzbyByZXNlcnZlIHNwYWNlIGluIGZy
b250ICovCisJCVNDVFBfQlVGX1JFU1ZfVUYobV9hYm9ydCwgU0NUUF9NSU5fT1ZFUkhFQUQpOwor
CQltX291dCA9IG1fYWJvcnQ7CisJfSBlbHNlIHsKKwkJLyogUHV0IEFVVEggY2h1bmsgYXQgdGhl
IGZyb250IG9mIHRoZSBjaGFpbiAqLworCQlTQ1RQX0JVRl9ORVhUKG1fZW5kKSA9IG1fYWJvcnQ7
CisJfQorCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQluZXQgPSBzdGNiLT5hc29jLmFs
dGVybmF0ZTsKKwl9IGVsc2UgeworCQluZXQgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b247CisJfQorCS8qIEZpbGwgaW4gdGhlIEFCT1JUIGNodW5rIGhlYWRlci4gKi8KKwlhYm9ydCA9
IG10b2QobV9hYm9ydCwgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKik7CisJYWJvcnQtPmNoLmNo
dW5rX3R5cGUgPSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OOworCWlmIChzdGNiLT5hc29jLnBlZXJf
dnRhZyA9PSAwKSB7CisJCS8qIFRoaXMgaGFwcGVucyBpZmYgdGhlIGFzc29jIGlzIGluIENPT0tJ
RS1XQUlUIHN0YXRlLiAqLworCQl2dGFnID0gc3RjYi0+YXNvYy5teV92dGFnOworCQlhYm9ydC0+
Y2guY2h1bmtfZmxhZ3MgPSBTQ1RQX0hBRF9OT19UQ0I7CisJfSBlbHNlIHsKKwkJdnRhZyA9IHN0
Y2ItPmFzb2MucGVlcl92dGFnOworCQlhYm9ydC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCX0KKwlh
Ym9ydC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKKwkvKiBBZGQgcGFkZGlu
ZywgaWYgbmVjZXNzYXJ5LiAqLworCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJaWYgKChtX2xh
c3QgPT0gTlVMTCkgfHwKKwkJICAgIChzY3RwX2FkZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGlu
Z19sZW4pID09IE5VTEwpKSB7CisJCQlzY3RwX21fZnJlZW0obV9vdXQpOworCQkJcmV0dXJuOwor
CQl9CisJfQorCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dCwgYXV0aF9vZmZzZXQsIGF1dGgsIHN0Y2It
PmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkLCAxLCAwLCAwLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5y
cG9ydCwgaHRvbmwodnRhZyksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cG9ydCwgTlVMTCwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLCAwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNvX2xvY2tlZCkpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQg
ZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCXN0Y2It
PmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2
ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7
CisJfQorCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsK
K30KKwordm9pZAorc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZmxlY3RfdnRhZykKK3sKKwkvKiBm
b3JtdWxhdGUgYW5kIFNFTkQgYSBTSFVURE9XTi1DT01QTEVURSAqLworCXN0cnVjdCBtYnVmICpt
X3NodXRkb3duX2NvbXA7CisJc3RydWN0IHNjdHBfc2h1dGRvd25fY29tcGxldGVfY2h1bmsgKnNo
dXRkb3duX2NvbXBsZXRlOworCXVpbnQzMl90IHZ0YWc7CisJaW50IGVycm9yOworCXVpbnQ4X3Qg
ZmxhZ3M7CisKKwltX3NodXRkb3duX2NvbXAgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9m
KHN0cnVjdCBzY3RwX2NodW5raGRyKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYg
KG1fc2h1dGRvd25fY29tcCA9PSBOVUxMKSB7CisJCS8qIG5vIG1idWYncyAqLworCQlyZXR1cm47
CisJfQorCWlmIChyZWZsZWN0X3Z0YWcpIHsKKwkJZmxhZ3MgPSBTQ1RQX0hBRF9OT19UQ0I7CisJ
CXZ0YWcgPSBzdGNiLT5hc29jLm15X3Z0YWc7CisJfSBlbHNlIHsKKwkJZmxhZ3MgPSAwOworCQl2
dGFnID0gc3RjYi0+YXNvYy5wZWVyX3Z0YWc7CisJfQorCXNodXRkb3duX2NvbXBsZXRlID0gbXRv
ZChtX3NodXRkb3duX2NvbXAsIHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rICop
OworCXNodXRkb3duX2NvbXBsZXRlLT5jaC5jaHVua190eXBlID0gU0NUUF9TSFVURE9XTl9DT01Q
TEVURTsKKwlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKKwlzaHV0
ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NodXRkb3duX2NvbXBsZXRlX2NodW5rKSk7CisJU0NUUF9CVUZfTEVOKG1fc2h1dGRvd25fY29t
cCkgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY29tcGxldGVfY2h1bmspOworCWlmICgo
ZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBu
ZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29j
a2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtX3NodXRkb3duX2NvbXAsIDAsIE5VTEwsIDAsIDEsIDAsIDAsCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBv
cnQsIHN0Y2ItPnJwb3J0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBodG9ubCh2dGFnKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bmV0LT5wb3J0LCBOVUxMLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKSkpIHsKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJyb3IpOwor
CQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9
IDE7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7CisJCX0KKwl9IGVsc2Ug
eworCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMDsKKwl9CisJU0NUUF9TVEFUX0lOQ1Jf
Q09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCXJldHVybjsKK30KKworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9zZW5kX3Jlc3BfbXNnKHN0cnVj
dCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVpbnQzMl90IHZ0YWcsCisgICAgICAgICAgICAgICAgICAg
dWludDhfdCB0eXBlLCBzdHJ1Y3QgbWJ1ZiAqY2F1c2UsCisgICAgICAgICAgICAgICAgICAgdWlu
dDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51bSwKKyAgICAg
ICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCisjZWxzZQorc3Rh
dGljIHZvaWQKK3NjdHBfc2VuZF9yZXNwX21zZyhzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0
IHNvY2thZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCB1
aW50MzJfdCB2dGFnLAorICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSwgc3RydWN0IG1i
dWYgKmNhdXNlLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCBTQ1RQX1VOVVNF
RCwgdWludDE2X3QgcG9ydCkKKyNlbmRpZgoreworI2lmZGVmIF9fUGFuZGFfXworCXBha2hhbmRs
ZV90eXBlIG9fcGFrOworI2Vsc2UKKwlzdHJ1Y3QgbWJ1ZiAqb19wYWs7CisjZW5kaWYKKwlzdHJ1
Y3QgbWJ1ZiAqbW91dDsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2hvdXQ7CisJc3RydWN0IHNjdHBfY2h1
bmtoZHIgKmNoOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qg
dWRwaGRyICp1ZHA7CisjZW5kaWYKKwlpbnQgcmV0LCBsZW4sIGNhdXNlX2xlbiwgcGFkZGluZ19s
ZW47CisjaWZkZWYgSU5FVAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFu
ZGFfXykKKwlzY3RwX3JvdXRlX3Qgcm87CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNy
Y19zaW4sICpkc3Rfc2luOworCXN0cnVjdCBpcCAqaXA7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyY19zaW42LCAqZHN0X3NpbjY7CisJc3RydWN0IGlwNl9o
ZHIgKmlwNjsKKyNlbmRpZgorCisJLyogQ29tcHV0ZSB0aGUgbGVuZ3RoIG9mIHRoZSBjYXVzZSBh
bmQgYWRkIGZpbmFsIHBhZGRpbmcuICovCisJY2F1c2VfbGVuID0gMDsKKwlpZiAoY2F1c2UgIT0g
TlVMTCkgeworCQlzdHJ1Y3QgbWJ1ZiAqbV9hdCwgKm1fbGFzdCA9IE5VTEw7CisKKwkJZm9yICht
X2F0ID0gY2F1c2U7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCQlpZiAo
U0NUUF9CVUZfTkVYVChtX2F0KSA9PSBOVUxMKQorCQkJCW1fbGFzdCA9IG1fYXQ7CisJCQljYXVz
ZV9sZW4gKz0gU0NUUF9CVUZfTEVOKG1fYXQpOworCQl9CisJCXBhZGRpbmdfbGVuID0gY2F1c2Vf
bGVuICUgNDsKKwkJaWYgKHBhZGRpbmdfbGVuICE9IDApIHsKKwkJCXBhZGRpbmdfbGVuID0gNCAt
IHBhZGRpbmdfbGVuOworCQl9CisJCWlmIChwYWRkaW5nX2xlbiAhPSAwKSB7CisJCQlpZiAoc2N0
cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKSA9PSBOVUxMKSB7CisJCQkJc2N0
cF9tX2ZyZWVtKGNhdXNlKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlw
YWRkaW5nX2xlbiA9IDA7CisJfQorCS8qIEdldCBhbiBtYnVmIGZvciB0aGUgaGVhZGVyLiAqLwor
CWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmto
ZHIpOworCXN3aXRjaCAoZHN0LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9J
TkVUOgorCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcDZfaGRy
KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisjaWYgZGVmaW5l
ZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmIChwb3J0KSB7CisJCWxlbiArPSBzaXplb2Yo
c3RydWN0IHVkcGhkcik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCW1v
dXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuICsgbWF4X2xpbmtoZHIsIDEsIE1fTk9XQUlU
LCAxLCBNVF9EQVRBKTsKKyNlbHNlCisJbW91dCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4g
KyBTQ1RQX01BWF9MSU5LSERSLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisjZW5kaWYKKyNl
bHNlCisJbW91dCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4gKyBtYXhfbGlua2hkciwgMSwg
TV9OT1dBSVQsIDEsIE1UX0RBVEEpOworI2VuZGlmCisJaWYgKG1vdXQgPT0gTlVMTCkgeworCQlp
ZiAoY2F1c2UpIHsKKwkJCXNjdHBfbV9mcmVlbShjYXVzZSk7CisJCX0KKwkJcmV0dXJuOworCX0K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRl
ZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJU0NUUF9CVUZfUkVTVl9VRihtb3V0LCBtYXhfbGlu
a2hkcik7CisjZWxzZQorCVNDVFBfQlVGX1JFU1ZfVUYobW91dCwgU0NUUF9NQVhfTElOS0hEUik7
CisjZW5kaWYKKyNlbHNlCisJU0NUUF9CVUZfUkVTVl9VRihtb3V0LCBtYXhfbGlua2hkcik7Cisj
ZW5kaWYKKwlTQ1RQX0JVRl9MRU4obW91dCkgPSBsZW47CisJU0NUUF9CVUZfTkVYVChtb3V0KSA9
IGNhdXNlOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJTV9TRVRGSUIobW91dCwgZmlibnVt
KTsKKwltb3V0LT5tX3BrdGhkci5mbG93aWQgPSBtZmxvd2lkOworCU1fSEFTSFRZUEVfU0VUKG1v
dXQsIG1mbG93dHlwZSk7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJaXAgPSBOVUxMOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwlpcDYgPSBOVUxMOworI2VuZGlmCisJc3dpdGNoIChkc3QtPnNhX2Zh
bWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCXNyY19zaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopc3JjOworCQlkc3Rfc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWRz
dDsKKwkJaXAgPSBtdG9kKG1vdXQsIHN0cnVjdCBpcCAqKTsKKwkJaXAtPmlwX3YgPSBJUFZFUlNJ
T047CisJCWlwLT5pcF9obCA9IChzaXplb2Yoc3RydWN0IGlwKSA+PiAyKTsKKwkJaXAtPmlwX3Rv
cyA9IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSAxMDAwMDAwCisJCWlwLT5pcF9vZmYgPSBodG9ucyhJUF9ERik7CisjZWxzZQorCQlpcC0+aXBf
b2ZmID0gSVBfREY7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoV0lUSF9DT05WRVJUX0lQX09GRikg
fHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKQor
CQlpcC0+aXBfb2ZmID0gSVBfREY7CisjZWxzZQorCQlpcC0+aXBfb2ZmID0gaHRvbnMoSVBfREYp
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaXBfZmlsbGlkKGlwKTsKKyNl
bGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIFJBTkRPTV9JUF9JRAorCQlpcC0+aXBfaWQgPSBp
cF9yYW5kb21pZCgpOworI2Vsc2UKKwkJaXAtPmlwX2lkID0gaHRvbnMoaXBfaWQrKyk7CisjZW5k
aWYKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAtPmlwX2lkID0gaHRvbnMoaXBf
aWQrKyk7CisjZWxzZQorCQlpcC0+aXBfaWQgPSBpcF9pZCsrOworI2VuZGlmCisJCWlwLT5pcF90
dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJCWlmIChwb3J0KSB7CisJCQlpcC0+aXBf
cCA9IElQUFJPVE9fVURQOworCQl9IGVsc2UgeworCQkJaXAtPmlwX3AgPSBJUFBST1RPX1NDVFA7
CisJCX0KKwkJaXAtPmlwX3NyYy5zX2FkZHIgPSBkc3Rfc2luLT5zaW5fYWRkci5zX2FkZHI7CisJ
CWlwLT5pcF9kc3Quc19hZGRyID0gc3JjX3Npbi0+c2luX2FkZHIuc19hZGRyOworCQlpcC0+aXBf
c3VtID0gMDsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJCXNob3V0ID0gKHN0cnVjdCBz
Y3RwaGRyICopKChjYWRkcl90KWlwICsgbGVuKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCXNyY19zaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilzcmM7CisJCWRzdF9zaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilkc3Q7CisJCWlwNiA9
IG10b2QobW91dCwgc3RydWN0IGlwNl9oZHIgKik7CisJCWlwNi0+aXA2X2Zsb3cgPSBodG9ubCgw
eDYwMDAwMDAwKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlpZiAoVl9pcDZfYXV0b19m
bG93bGFiZWwpIHsKKwkJCWlwNi0+aXA2X2Zsb3cgfD0gKGh0b25sKGlwNl9yYW5kb21mbG93bGFi
ZWwoKSkgJiBJUFY2X0ZMT1dMQUJFTF9NQVNLKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlpcDYtPmlwNl9obGltID0gSVB2Nl9IT1BfTElNSVQ7CisjZWxzZQor
CQlpcDYtPmlwNl9obGltID0gTU9EVUxFX0dMT0JBTChpcDZfZGVmaGxpbSk7CisjZW5kaWYKKwkJ
aWYgKHBvcnQpIHsKKwkJCWlwNi0+aXA2X254dCA9IElQUFJPVE9fVURQOworCQl9IGVsc2Ugewor
CQkJaXA2LT5pcDZfbnh0ID0gSVBQUk9UT19TQ1RQOworCQl9CisJCWlwNi0+aXA2X3NyYyA9IGRz
dF9zaW42LT5zaW42X2FkZHI7CisJCWlwNi0+aXA2X2RzdCA9IHNyY19zaW42LT5zaW42X2FkZHI7
CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7CisJCXNob3V0ID0gKHN0cnVjdCBzY3Rw
aGRyICopKChjYWRkcl90KWlwNiArIGxlbik7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoK
KwkJbGVuID0gMDsKKwkJc2hvdXQgPSBtdG9kKG1vdXQsIHN0cnVjdCBzY3RwaGRyICopOworCQli
cmVhazsKKwl9CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmIChwb3J0
KSB7CisJCWlmIChodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0
KSkgPT0gMCkgeworCQkJc2N0cF9tX2ZyZWVtKG1vdXQpOworCQkJcmV0dXJuOworCQl9CisJCXVk
cCA9IChzdHJ1Y3QgdWRwaGRyICopc2hvdXQ7CisJCXVkcC0+dWhfc3BvcnQgPSBodG9ucyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCXVkcC0+dWhfZHBvcnQg
PSBwb3J0OworCQl1ZHAtPnVoX3N1bSA9IDA7CisJCXVkcC0+dWhfdWxlbiA9IGh0b25zKCh1aW50
MTZfdCkoc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYXVzZV9sZW4gKyBwYWRkaW5nX2xlbikpOworCQlsZW4gKz0g
c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQlzaG91dCA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2Fk
ZHJfdClzaG91dCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJfSBlbHNlIHsKKwkJdWRwID0g
TlVMTDsKKwl9CisjZW5kaWYKKwlzaG91dC0+c3JjX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OworCXNo
b3V0LT5kZXN0X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJc2hvdXQtPmNoZWNrc3VtID0gMDsKKwlp
ZiAodnRhZykgeworCQlzaG91dC0+dl90YWcgPSBodG9ubCh2dGFnKTsKKwl9IGVsc2UgeworCQlz
aG91dC0+dl90YWcgPSBzaC0+dl90YWc7CisJfQorCWxlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpOworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNob3V0ICsgc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJY2gtPmNodW5rX3R5cGUgPSB0eXBlOworCWlmICh2dGFn
KSB7CisJCWNoLT5jaHVua19mbGFncyA9IDA7CisJfSBlbHNlIHsKKwkJY2gtPmNodW5rX2ZsYWdz
ID0gU0NUUF9IQURfTk9fVENCOworCX0KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMoKHVpbnQx
Nl90KShzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgY2F1c2VfbGVuKSk7CisJbGVuICs9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJbGVuICs9IGNhdXNlX2xlbiArIHBhZGRp
bmdfbGVuOworCisJaWYgKFNDVFBfR0VUX0hFQURFUl9GT1JfT1VUUFVUKG9fcGFrKSkgeworCQlz
Y3RwX21fZnJlZW0obW91dCk7CisJCXJldHVybjsKKwl9CisJU0NUUF9BVFRBQ0hfQ0hBSU4ob19w
YWssIG1vdXQsIGxlbik7CisJc3dpdGNoIChkc3QtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5k
YV9fKQorCQkvKiB6YXAgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIHJvdXRlICovCisJCW1lbXNl
dCgmcm8sIDAsIHNpemVvZihzY3RwX3JvdXRlX3QpKTsKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykK
KwkJcm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworI2VuZGlmCisjZW5kaWYKKwkJ
aWYgKHBvcnQpIHsKKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9fRnJlZUJTRF92ZXJzaW9u
ID4gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVy
c2lvbiA+IDkwMDAwMCkKKwkJCWlmIChWX3VkcF9ja3N1bSkgeworCQkJCXVkcC0+dWhfc3VtID0g
aW5fcHNldWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91
bGVuICsgaHRvbnMoSVBQUk9UT19VRFApKTsKKwkJCX0gZWxzZSB7CisJCQkJdWRwLT51aF9zdW0g
PSAwOworCQkJfQorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5pcF9zcmMu
c19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQUk9UT19V
RFApKTsKKyNlbmRpZgorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gMDsKKyNlbmRpZgorCQl9Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMDAwMDAw
CisJCWlwLT5pcF9sZW4gPSBodG9ucyhsZW4pOworI2Vsc2UKKwkJaXAtPmlwX2xlbiA9IGxlbjsK
KyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJaXAtPmlwX2xlbiA9IGxlbjsKKyNlbHNlCisJCWlwLT5pcF9sZW4gPSBodG9ucyhsZW4p
OworI2VuZGlmCisJCWlmIChwb3J0KSB7CisJCQlzaG91dC0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1
bGF0ZV9ja3N1bShtb3V0LCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRy
KSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2lmICFkZWZpbmVkKF9f
V2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPCA5MDAwMDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQorCQkJaWYgKFZfdWRw
X2Nrc3VtKSB7CisJCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0ob19wYWspOworCQkJfQorI2Vsc2UK
KwkJCVNDVFBfRU5BQkxFX1VEUF9DU1VNKG9fcGFrKTsKKyNlbmRpZgorI2VuZGlmCisJCX0gZWxz
ZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAw
MDAwCisJCQltb3V0LT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOworCQkJbW91dC0+
bV9wa3RoZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsK
KwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7CisjZWxzZQorCQkJc2hvdXQtPmNo
ZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVjdCBpcCkpOwor
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKyNlbmRpZgorCQl9CisjaWZkZWYg
U0NUUF9QQUNLRVRfTE9HR0lORworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7CisJCQlzY3RwX3BhY2tldF9sb2co
b19wYWspOworCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1BhbmRhX18pCisJCVNDVFBfSVBfT1VUUFVUKHJldCwgb19wYWssICZybywgTlVMTCwgdnJmX2lk
KTsKKwkJLyogRnJlZSB0aGUgcm91dGUgaWYgd2UgZ290IG9uZSBiYWNrICovCisJCWlmIChyby5y
b19ydCkgeworCQkJUlRGUkVFKHJvLnJvX3J0KTsKKwkJCXJvLnJvX3J0ID0gTlVMTDsKKwkJfQor
I2Vsc2UKKwkJU0NUUF9JUF9PVVRQVVQocmV0LCBvX3BhaywgTlVMTCwgTlVMTCwgdnJmX2lkKTsK
KyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoK
KwkJaXA2LT5pcDZfcGxlbiA9IGh0b25zKGxlbiAtIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwor
CQlpZiAocG9ydCkgeworCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0o
bW91dCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJ
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2lmIGRlZmluZWQoX19XaW5kb3dz
X18pCisJCQl1ZHAtPnVoX3N1bSA9IDA7CisjZWxpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJaWYgKCh1ZHAtPnVoX3N1bSA9IGluNl9ja3N1bShvX3BhaywgSVBQUk9UT19VRFAsIHNpemVv
ZihzdHJ1Y3QgaXA2X2hkciksIGxlbiAtIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKSA9PSAwKSB7
CisJCQkJdWRwLT51aF9zdW0gPSAweGZmZmY7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA5MDAwMDAKKyNp
ZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMTAwMAorCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9mbGFn
cyA9IENTVU1fU0NUUF9JUFY2OworI2Vsc2UKKwkJCW1vdXQtPm1fcGt0aGRyLmNzdW1fZmxhZ3Mg
PSBDU1VNX1NDVFA7CisjZW5kaWYKKwkJCW1vdXQtPm1fcGt0aGRyLmNzdW1fZGF0YSA9IG9mZnNl
dG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19z
ZW5kaHdjcmMpOworI2Vsc2UKKwkJCXNob3V0LT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nr
c3VtKG1vdXQsIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfc2VuZHN3Y3JjKTsKKyNlbmRpZgorCQl9CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORwor
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BB
Q0tFVF9UUkFDSU5HKSB7CisJCQlzY3RwX3BhY2tldF9sb2cob19wYWspOworCQl9CisjZW5kaWYK
KwkJU0NUUF9JUDZfT1VUUFVUKHJldCwgb19wYWssIE5VTEwsIE5VTEwsIE5VTEwsIHZyZl9pZCk7
CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZf
Q09OTjoKKwl7CisJCWNoYXIgKmJ1ZmZlcjsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25u
OworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc3JjOworCQlpZiAoU0NUUF9C
QVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9PSAwKSB7CisJCQlzaG91dC0+Y2hlY2tzdW0gPSBz
Y3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCAwKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nl
bmRzd2NyYyk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdjcmMp
OworCQl9CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7CisJCQlz
Y3RwX3BhY2tldF9sb2cobW91dCk7CisJCX0KKyNlbmRpZgorCQkvKiBEb24ndCBhbGxvYy9mcmVl
IGZvciBlYWNoIHBhY2tldCAqLworCQlpZiAoKGJ1ZmZlciA9IG1hbGxvYyhsZW4pKSAhPSBOVUxM
KSB7CisJCQltX2NvcHlkYXRhKG1vdXQsIDAsIGxlbiwgYnVmZmVyKTsKKwkJCXJldCA9IFNDVFBf
QkFTRV9WQVIoY29ubl9vdXRwdXQpKHNjb25uLT5zY29ubl9hZGRyLCBidWZmZXIsIGxlbiwgMCwg
MCk7CisJCQlmcmVlKGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCQlyZXQgPSBFTk9NRU07CisJCX0K
KwkJc2N0cF9tX2ZyZWVtKG1vdXQpOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0Ogor
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVua25vd24gcHJvdG9jb2wgKFRTTkgpIHR5
cGUgJWRcbiIsCisJCSAgICAgICAgZHN0LT5zYV9mYW1pbHkpOworCQlzY3RwX21fZnJlZW0obW91
dCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG1vdXQsIE5VTEwsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMywgInJldHVybiBmcm9tIHNlbmQgaXMgJWRcbiIsIHJldCk7CisJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2
NChzY3Rwc19vdXRwYWNrZXRzKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0
Y29udHJvbGNodW5rcyk7CisJaWYgKHJldCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5k
ZXJyb3JzKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfc2h1dGRvd25fY29t
cGxldGUyKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0
eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQorewor
CXNjdHBfc2VuZF9yZXNwX21zZyhzcmMsIGRzdCwgc2gsIDAsIFNDVFBfU0hVVERPV05fQ09NUExF
VEUsIE5VTEwsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKK30KKwordm9pZAorc2N0cF9zZW5kX2hiKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChf
X0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCVNDVFBfVU5VU0VE
CisjZW5kaWYKKykKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJc3RydWN0IHNj
dHBfaGVhcnRiZWF0X2NodW5rICpoYjsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisKKwlTQ1RQX1RD
Ql9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0K
Kwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKKwlzd2l0Y2ggKG5ldC0+cm8uX2xf
YWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJYnJlYWs7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQlicmVhazsK
KyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJc2N0cF9hbGxvY19hX2NodW5rKHN0
Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQ0LCAiR2FrLCBjYW4ndCBnZXQgYSBjaHVuayBmb3IgaGJcbiIpOworCQlyZXR1cm47CisJfQor
CisJY2hrLT5jb3B5X2J5X3JlZiA9IDA7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX0hF
QVJUQkVBVF9SRVFVRVNUOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOwor
CWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+c2VuZF9z
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayk7CisKKwljaGstPmRhdGEg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coY2hrLT5zZW5kX3NpemUsIDAsIE1fTk9XQUlULCAxLCBN
VF9IRUFERVIpOworCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworCQlzY3RwX2ZyZWVfYV9jaHVu
ayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfUkVTVl9V
RihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRh
KSA9IGNoay0+c2VuZF9zaXplOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwor
CWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPndob1RvID0gbmV0OworCWF0b21pY19hZGRfaW50
KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCS8qIE5vdyB3ZSBoYXZlIGEgbWJ1ZiB0aGF0
IHdlIGNhbiBmaWxsIGluIHdpdGggdGhlIGRldGFpbHMgKi8KKwloYiA9IG10b2QoY2hrLT5kYXRh
LCBzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgKik7CisJbWVtc2V0KGhiLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSk7CisJLyogZmlsbCBvdXQgY2h1bmsgaGVhZGVy
ICovCisJaGItPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUOworCWhiLT5j
aC5jaHVua19mbGFncyA9IDA7CisJaGItPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2Vu
ZF9zaXplKTsKKwkvKiBGaWxsIG91dCBoYiBwYXJhbWV0ZXIgKi8KKwloYi0+aGVhcnRiZWF0Lmhi
X2luZm8ucGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSEVBUlRCRUFUX0lORk8pOworCWhiLT5o
ZWFydGJlYXQuaGJfaW5mby5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0IHNj
dHBfaGVhcnRiZWF0X2luZm9fcGFyYW0pKTsKKwloYi0+aGVhcnRiZWF0LmhiX2luZm8udGltZV92
YWx1ZV8xID0gbm93LnR2X3NlYzsKKwloYi0+aGVhcnRiZWF0LmhiX2luZm8udGltZV92YWx1ZV8y
ID0gbm93LnR2X3VzZWM7CisJLyogRGlkIG91ciB1c2VyIHJlcXVlc3QgdGhpcyBvbmUsIHB1dCBp
dCBpbiAqLworCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWlseSA9ICh1aW50OF90KW5l
dC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwloYi0+aGVh
cnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPSBuZXQtPnJvLl9sX2FkZHIuc2Euc2FfbGVuOworI2Vs
c2UKKwlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVU
CisJY2FzZSBBRl9JTkVUOgorCQloYi0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CWNhc2UgQUZfSU5FVDY6CisJCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQloYi0+aGVhcnRiZWF0LmhiX2luZm8uYWRk
cl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQlicmVhazsKKyNlbmRpZgor
CWRlZmF1bHQ6CisJCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9IDA7CisJCWJyZWFr
OworCX0KKyNlbmRpZgorCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJN
RUQpIHsKKwkJLyoKKwkJICogd2Ugb25seSB0YWtlIGZyb20gdGhlIGVudHJvcHkgcG9vbCBpZiB0
aGUgYWRkcmVzcyBpcyBub3QKKwkJICogY29uZmlybWVkLgorCQkgKi8KKwkJbmV0LT5oZWFydGJl
YXRfcmFuZG9tMSA9IGhiLT5oZWFydGJlYXQuaGJfaW5mby5yYW5kb21fdmFsdWUxID0gc2N0cF9z
ZWxlY3RfaW5pdGlhbF9UU04oJnN0Y2ItPnNjdHBfZXAtPnNjdHBfZXApOworCQluZXQtPmhlYXJ0
YmVhdF9yYW5kb20yID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTIgPSBzY3Rw
X3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcCk7CisJfSBlbHNlIHsK
KwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMSA9IGhiLT5oZWFydGJlYXQuaGJfaW5mby5yYW5kb21f
dmFsdWUxID0gMDsKKwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMiA9IGhiLT5oZWFydGJlYXQuaGJf
aW5mby5yYW5kb21fdmFsdWUyID0gMDsKKwl9CisJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KGhiLT5o
ZWFydGJlYXQuaGJfaW5mby5hZGRyZXNzLAorCQkgICAgICAgJm5ldC0+cm8uX2xfYWRkci5zaW4u
c2luX2FkZHIsCisJCSAgICAgICBzaXplb2YobmV0LT5yby5fbF9hZGRyLnNpbi5zaW5fYWRkcikp
OworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJbWVt
Y3B5KGhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyZXNzLAorCQkgICAgICAgJm5ldC0+cm8uX2xf
YWRkci5zaW42LnNpbjZfYWRkciwKKwkJICAgICAgIHNpemVvZihuZXQtPnJvLl9sX2FkZHIuc2lu
Ni5zaW42X2FkZHIpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJl
c3MsCisJCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLnNjb25uLnNjb25uX2FkZHIsCisJCSAgICAg
ICBzaXplb2YobmV0LT5yby5fbF9hZGRyLnNjb25uLnNjb25uX2FkZHIpKTsKKwkJYnJlYWs7Cisj
ZW5kaWYKKwlkZWZhdWx0OgorCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oY2hr
LT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2FfY2h1bmso
c3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQlyZXR1cm47CisJCWJyZWFrOworCX0KKwluZXQtPmhi
X3Jlc3BvbmRlZCA9IDA7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuY29udHJvbF9z
ZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2NudCsr
OworCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRoZWFydGJlYXQpOworCXJldHVybjsKK30KKwor
dm9pZAorc2N0cF9zZW5kX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqbmV0LAorCQkgICB1aW50MzJfdCBoaWdoX3RzbikKK3sKKwlzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICplY25lOworCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCWlmIChuZXQgPT0gTlVMTCkgeworCQlyZXR1cm47
CisJfQorCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsK
KwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0
KSB7CisJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNITykgJiYgKG5l
dCA9PSBjaGstPndob1RvKSkgeworCQkJLyogZm91bmQgYSBwcmV2aW91cyBFQ05fRUNITyB1cGRh
dGUgaXQgaWYgbmVlZGVkICovCisJCQl1aW50MzJfdCBjbnQsIGN0c247CisJCQllY25lID0gbXRv
ZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKik7CisJCQljdHNuID0gbnRvaGwo
ZWNuZS0+dHNuKTsKKwkJCWlmIChTQ1RQX1RTTl9HVChoaWdoX3RzbiwgY3RzbikpIHsKKwkJCQll
Y25lLT50c24gPSBodG9ubChoaWdoX3Rzbik7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcXVl
dWVfdXBkX2VjbmUpOworCQkJfQorCQkJY250ID0gbnRvaGwoZWNuZS0+bnVtX3BrdHNfc2luY2Vf
Y3dyKTsKKwkJCWNudCsrOworCQkJZWNuZS0+bnVtX3BrdHNfc2luY2VfY3dyID0gaHRvbmwoY250
KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBub3BlIGNvdWxkIG5vdCBmaW5kIG9uZSB0byB1
cGRhdGUgc28gd2UgbXVzdCBidWlsZCBvbmUgKi8KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwg
Y2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19xdWV1ZV91cGRfZWNuZSk7CisJY2hrLT5jb3B5X2J5X3JlZiA9IDA7CisJY2hrLT5y
ZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX0VDTl9FQ0hPOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90
YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29j
OworCWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspOworCWNo
ay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dB
SVQsIDEsIE1UX0hFQURFUik7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCXNjdHBfZnJl
ZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0K
KwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCVNDVFBf
QlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNoay0+d2hvVG8gPSBuZXQ7
CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisKKwlzdGNiLT5h
c29jLmVjbl9lY2hvX2NudF9vbnErKzsKKwllY25lID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBz
Y3RwX2VjbmVfY2h1bmsgKik7CisJZWNuZS0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfRUNOX0VDSE87
CisJZWNuZS0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWVjbmUtPmNoLmNodW5rX2xlbmd0aCA9IGh0
b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSk7CisJZWNuZS0+dHNuID0gaHRvbmwo
aGlnaF90c24pOworCWVjbmUtPm51bV9wa3RzX3NpbmNlX2N3ciA9IGh0b25sKDEpOworCVRBSUxR
X0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25l
eHQpOworCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9wYWNr
ZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwK
KyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGlwaGxlbiwgaW50IGJhZF9jcmMpCit7
CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfcGt0ZHJvcF9j
aHVuayAqZHJwOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwl1aW50OF90ICpkYXRh
cDsKKwlpbnQgd2FzX3RydW5jID0gMDsKKwlpbnQgZnVsbHN6ID0gMDsKKwlsb25nIHNwYzsKKwlp
bnQgb2Zmc2V0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaCwgY2h1bmtfYnVmOworCXVuc2ln
bmVkIGludCBjaGtfbGVuZ3RoOworCisgICAgICAgIGlmICghc3RjYikgeworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisJYXNvYyA9ICZzdGNiLT5hc29jOworCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKHN0Y2IpOworCWlmIChhc29jLT5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAwKSB7CisJCS8q
LQorCQkgKiBwZWVyIG11c3QgZGVjbGFyZSBzdXBwb3J0IGJlZm9yZSBJIHNlbmQgb25lLgorCQkg
Ki8KKwkJcmV0dXJuOworCX0KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQly
ZXR1cm47CisJfQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0g
TlVMTCkgeworCQlyZXR1cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVj
LmNodW5rX2lkLmlkID0gU0NUUF9QQUNLRVRfRFJPUFBFRDsKKwljaGstPnJlYy5jaHVua19pZC5j
YW5fdGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdzID0gMDsKKwlsZW4gLT0gaXBobGVuOworCWNo
ay0+c2VuZF9zaXplID0gbGVuOworICAgICAgICAvKiBWYWxpZGF0ZSB0aGF0IHdlIGRvIG5vdCBo
YXZlIGFuIEFCT1JUIGluIGhlcmUuICovCisJb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKTsKKwljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAorCQkJCQkJICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICopICYgY2h1bmtfYnVm
KTsKKwl3aGlsZSAoY2ggIT0gTlVMTCkgeworCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5r
X2xlbmd0aCk7CisJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKCpjaCkpIHsKKwkJCS8qIGJyZWFr
IHRvIGFib3J0IGxhbmQgKi8KKwkJCWJyZWFrOworCQl9CisJCXN3aXRjaCAoY2gtPmNodW5rX3R5
cGUpIHsKKwkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgorCQljYXNlIFNDVFBfQUJPUlRfQVNT
T0NJQVRJT046CisJCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoKKwkJCS8qKgorCQkJICogV2Ug
ZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIFBLVC1EUk9QIHRvIGFuIEFCT1JUCisJCQkgKiBvciBQS1Qt
RFJPUC4gV2UgYWxzbyBkbyBub3QgcmVzcG9uZCB0byBhbgorCQkJICogSU5JVC1BQ0ssIGJlY2F1
c2Ugd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW5pdGlhdGlvbgorCQkJICogdGFnIGlzIGNvcnJlY3Qg
b3Igbm90LgorCQkJICovCisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQlv
ZmZzZXQgKz0gU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCk7CisJCWNoID0gKHN0cnVjdCBzY3RwX2No
dW5raGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCSAgICBzaXplb2YoKmNoKSwgKHVp
bnQ4X3QgKikgJiBjaHVua19idWYpOworCX0KKworCWlmICgobGVuICsgU0NUUF9NQVhfT1ZFUkhF
QUQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuaykpID4KKwkgICAgbWluKHN0Y2It
PmFzb2Muc21hbGxlc3RfbXR1LCBNQ0xCWVRFUykpIHsKKwkJLyogb25seSBzZW5kIDEgbXR1IHdv
cnRoLCB0cmltIG9mZiB0aGUKKwkJICogZXhjZXNzIG9uIHRoZSBlbmQuCisJCSAqLworCQlmdWxs
c3ogPSBsZW47CisJCWxlbiA9IG1pbihzdGNiLT5hc29jLnNtYWxsZXN0X210dSwgTUNMQllURVMp
IC0gU0NUUF9NQVhfT1ZFUkhFQUQ7CisJCXdhc190cnVuYyA9IDE7CisJfQorCWNoay0+YXNvYyA9
ICZzdGNiLT5hc29jOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRF
UywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewor
anVtcF9vdXQ6CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9N
SU5fT1ZFUkhFQUQpOworCWRycCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9wa3Rkcm9w
X2NodW5rICopOworCWlmIChkcnAgPT0gTlVMTCkgeworCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRh
KTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJZ290byBqdW1wX291dDsKKwl9CisJY2hrLT5ib29r
X3NpemUgPSBTQ1RQX1NJWkUzMigoY2hrLT5zZW5kX3NpemUgKyBzaXplb2Yoc3RydWN0IHNjdHBf
cGt0ZHJvcF9jaHVuaykgKworCSAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgU0NUUF9NRURf
T1ZFUkhFQUQpKTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisJaWYgKHdhc190cnVuYykg
eworCQlkcnAtPmNoLmNodW5rX2ZsYWdzID0gU0NUUF9QQUNLRVRfVFJVTkNBVEVEOworCQlkcnAt
PnRydW5jX2xlbiA9IGh0b25zKGZ1bGxzeik7CisJCS8qIExlbiBpcyBhbHJlYWR5IGFkanVzdGVk
IHRvIHNpemUgbWludXMgb3ZlcmhlYWQgYWJvdmUKKwkJICogdGFrZSBvdXQgdGhlIHBrdF9kcm9w
IGNodW5rIGl0c2VsZiBmcm9tIGl0LgorCQkgKi8KKwkJY2hrLT5zZW5kX3NpemUgPSAodWludDE2
X3QpKGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSk7CisJCWxlbiA9IGNo
ay0+c2VuZF9zaXplOworCX0gZWxzZSB7CisJCS8qIG5vIHRydW5jYXRpb24gbmVlZGVkICovCisJ
CWRycC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCQlkcnAtPnRydW5jX2xlbiA9IGh0b25zKDApOwor
CX0KKwlpZiAoYmFkX2NyYykgeworCQlkcnAtPmNoLmNodW5rX2ZsYWdzIHw9IFNDVFBfQkFEQ1JD
OworCX0KKwljaGstPnNlbmRfc2l6ZSArPSBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVu
ayk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKKwljaGstPnNl
bnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJaWYgKG5l
dCkgeworCQkvKiB3ZSBzaG91bGQgaGl0IGhlcmUgKi8KKwkJY2hrLT53aG9UbyA9IG5ldDsKKwkJ
YXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJfSBlbHNlIHsKKwkJ
Y2hrLT53aG9UbyA9IE5VTEw7CisJfQorCWRycC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfUEFDS0VU
X0RST1BQRUQ7CisJZHJwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7
CisJc3BjID0gU0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2NrZXQpOworCWlmIChzcGMg
PCAwKSB7CisJCXNwYyA9IDA7CisJfQorCWRycC0+Ym90dGxlX2J3ID0gaHRvbmwoc3BjKTsKKwlp
ZiAoYXNvYy0+bXlfcnduZCkgeworCQlkcnAtPmN1cnJlbnRfb25xID0gaHRvbmwoYXNvYy0+c2l6
ZV9vbl9yZWFzbV9xdWV1ZSArCisJCSAgICBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zICsKKwkJ
ICAgIGFzb2MtPm15X3J3bmRfY29udHJvbF9sZW4gKworCQkgICAgc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3Jjdi5zYl9jYyk7CisJfSBlbHNlIHsKKwkJLyotCisJCSAqIElmIG15IHJ3bmQgaXMgMCwg
cG9zc2libHkgZnJvbSBtYnVmIGRlcGxldGlvbiBhcyB3ZWxsIGFzCisJCSAqIHNwYWNlIHVzZWQs
IHRlbGwgdGhlIHBlZXIgdGhlcmUgaXMgTk8gc3BhY2UgYWthIG9ucSA9PSBidworCQkgKi8KKwkJ
ZHJwLT5jdXJyZW50X29ucSA9IGh0b25sKHNwYyk7CisJfQorCWRycC0+cmVzZXJ2ZWQgPSAwOwor
CWRhdGFwID0gZHJwLT5kYXRhOworCW1fY29weWRhdGEobSwgaXBobGVuLCBsZW4sIChjYWRkcl90
KWRhdGFwKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVl
dWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworfQorCit2b2lk
CitzY3RwX3NlbmRfY3dyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LCB1aW50MzJfdCBoaWdoX3RzbiwgdWludDhfdCBvdmVycmlkZSkKK3sKKwlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKmN3cjsKKwlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsK
KwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7
CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4
dCkgeworCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0NXUikgJiYgKG5l
dCA9PSBjaGstPndob1RvKSkgeworCQkJLyogZm91bmQgYSBwcmV2aW91cyBDV1IgcXVldWVkIHRv
IHNhbWUgZGVzdGluYXRpb24gdXBkYXRlIGl0IGlmIG5lZWRlZCAqLworCQkJdWludDMyX3QgY3Rz
bjsKKwkJCWN3ciA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKik7CisJ
CQljdHNuID0gbnRvaGwoY3dyLT50c24pOworCQkJaWYgKFNDVFBfVFNOX0dUKGhpZ2hfdHNuLCBj
dHNuKSkgeworCQkJCWN3ci0+dHNuID0gaHRvbmwoaGlnaF90c24pOworCQkJfQorCQkJaWYgKG92
ZXJyaWRlICYgU0NUUF9DV1JfUkVEVUNFX09WRVJSSURFKSB7CisJCQkJLyogTWFrZSBzdXJlIG92
ZXJyaWRlIGlzIGNhcnJpZWQgKi8KKwkJCQljd3ItPmNoLmNodW5rX2ZsYWdzIHw9IFNDVFBfQ1dS
X1JFRFVDRV9PVkVSUklERTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQorCX0KKwlzY3RwX2FsbG9j
X2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0K
KwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfRUNO
X0NXUjsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdz
ID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPnNlbmRfc2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmspOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKGNo
ay0+ZGF0YSA9PSBOVUxMKSB7CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0
YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5z
ZW5kX3NpemU7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRf
Y291bnQgPSAwOworCWNoay0+d2hvVG8gPSBuZXQ7CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hv
VG8tPnJlZl9jb3VudCwgMSk7CisJY3dyID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2N3
cl9jaHVuayAqKTsKKwljd3ItPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0VDTl9DV1I7CisJY3dyLT5j
aC5jaHVua19mbGFncyA9IG92ZXJyaWRlOworCWN3ci0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMo
c2l6ZW9mKHN0cnVjdCBzY3RwX2N3cl9jaHVuaykpOworCWN3ci0+dHNuID0gaHRvbmwoaGlnaF90
c24pOworCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwg
Y2hrLCBzY3RwX25leHQpOworCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Cit9CisKK3N0YXRpYyBp
bnQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF9vdXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHNlcSwgdWludDMyX3QgcmVzcF9zZXEsIHVpbnQzMl90IGxhc3Rfc2VudCkKK3sKKwl1aW50
MTZfdCBsZW4sIG9sZF9sZW4sIGk7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1
ZXN0ICpyZXFfb3V0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgYXQ7CisJaW50
IG51bWJlcl9lbnRyaWVzPTA7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9j
aHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5r
X2xlbmd0aCkpOworCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0aGUgcGFyYW0uICovCisJcmVx
X291dCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKikoKGNhZGRyX3Qp
Y2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCisJZm9y
IChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJaWYgKChzdGNi
LT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYK
KwkJICAgIChzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgor
CQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSkpIHsKKwkJ
CW51bWJlcl9lbnRyaWVzKys7CisJCX0KKwl9CisJaWYgKG51bWJlcl9lbnRyaWVzID09IDApIHsK
KwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG51bWJlcl9lbnRyaWVzID09IHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250KSB7CisJCW51bWJlcl9lbnRyaWVzID0gMDsKKwl9CisJaWYgKG51bWJlcl9lbnRy
aWVzID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUKSB7CisJCW51bWJlcl9lbnRyaWVz
ID0gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUOworCX0KKwlsZW4gPSAodWludDE2X3Qp
KHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QpICsgKHNpemVvZih1
aW50MTZfdCkgKiBudW1iZXJfZW50cmllcykpOworCXJlcV9vdXQtPnBoLnBhcmFtX3R5cGUgPSBo
dG9ucyhTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVCk7CisJcmVxX291dC0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMobGVuKTsKKwlyZXFfb3V0LT5yZXF1ZXN0X3NlcSA9IGh0b25sKHNlcSk7CisJ
cmVxX291dC0+cmVzcG9uc2Vfc2VxID0gaHRvbmwocmVzcF9zZXEpOworCXJlcV9vdXQtPnNlbmRf
cmVzZXRfYXRfdHNuID0gaHRvbmwobGFzdF9zZW50KTsKKwlhdCA9IDA7CisJaWYgKG51bWJlcl9l
bnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsr
KSB7CisJCQlpZiAoKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9S
RVNFVF9QRU5ESU5HKSAmJgorCQkJICAgIChzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29u
X3F1ZXVlcyA9PSAwKSAmJgorCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRb
aV0ub3V0cXVldWUpKSB7CisJCQkJcmVxX291dC0+bGlzdF9vZl9zdHJlYW1zW2F0XSA9IGh0b25z
KGkpOworCQkJCWF0Kys7CisJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9T
VFJFQU1fUkVTRVRfSU5fRkxJR0hUOworCQkJCWlmIChhdCA+PSBudW1iZXJfZW50cmllcykgewor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBp
IDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUOworCQl9CisJfQorCWlmIChT
Q1RQX1NJWkUzMihsZW4pID4gbGVuKSB7CisJCS8qLQorCQkgKiBOZWVkIHRvIHdvcnJ5IGFib3V0
IHRoZSBwYWQgd2UgbWF5IGVuZCB1cCBhZGRpbmcgdG8gdGhlCisJCSAqIGVuZC4gVGhpcyBpcyBl
YXN5IHNpbmNlIHRoZSBzdHJ1Y3QgaXMgZWl0aGVyIGFsaWduZWQgdG8gNAorCQkgKiBieXRlcyBv
ciAyIGJ5dGVzIG9mZi4KKwkJICovCisJCXJlcV9vdXQtPmxpc3Rfb2Zfc3RyZWFtc1tudW1iZXJf
ZW50cmllc10gPSAwOworCX0KKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+
Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5ib29rX3NpemUgPSBs
ZW4gKyBvbGRfbGVuOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPnNlbmRfc2l6
ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRh
KSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3Rw
X2FkZF9zdHJlYW1fcmVzZXRfaW4oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxpc3QsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2VxKQoreworCXVpbnQxNl90IGxlbiwg
b2xkX2xlbiwgaTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAqcmVxX2lu
OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKworCWNoID0gbXRvZChjaGstPmRhdGEsIHN0
cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9o
cyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBh
cmFtLiAqLworCXJlcV9pbiA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAq
KSgoY2FkZHJfdCljaCArIGxlbik7CisJLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBi
ZT8gKi8KKwlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
aW5fcmVxdWVzdCkgKyAoc2l6ZW9mKHVpbnQxNl90KSAqIG51bWJlcl9lbnRyaWVzKSk7CisJcmVx
X2luLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfSU5fUkVRVUVTVCk7CisJ
cmVxX2luLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOworCXJlcV9pbi0+cmVxdWVzdF9z
ZXEgPSBodG9ubChzZXEpOworCWlmIChudW1iZXJfZW50cmllcykgeworCQlmb3IgKGkgPSAwOyBp
IDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJcmVxX2luLT5saXN0X29mX3N0cmVhbXNbaV0g
PSBodG9ucyhsaXN0W2ldKTsKKwkJfQorCX0KKwlpZiAoU0NUUF9TSVpFMzIobGVuKSA+IGxlbikg
eworCQkvKi0KKwkJICogTmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcGFkIHdlIG1heSBlbmQgdXAg
YWRkaW5nIHRvIHRoZQorCQkgKiBlbmQuIFRoaXMgaXMgZWFzeSBzaW5jZSB0aGUgc3RydWN0IGlz
IGVpdGhlciBhbGlnbmVkIHRvIDQKKwkJICogYnl0ZXMgb3IgMiBieXRlcyBvZmYuCisJCSAqLwor
CQlyZXFfaW4tPmxpc3Rfb2Zfc3RyZWFtc1tudW1iZXJfZW50cmllc10gPSAwOworCX0KKwkvKiBu
b3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVu
ICsgb2xkX2xlbik7CisJY2hrLT5ib29rX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+Ym9v
a19zaXplX3NjYWxlID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9v
a19zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJl
dHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF90c24oc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBzZXEpCit7CisJdWludDE2X3QgbGVuLCBvbGRfbGVuOworCXN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF90c25fcmVxdWVzdCAqcmVxX3RzbjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisK
KwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVu
ID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0
IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8KKwlyZXFfdHNuID0gKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqKSgoY2FkZHJfdCljaCArIGxlbik7CisJLyogbm93
IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KKwlsZW4gPSBzaXplb2Yoc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0KTsKKwlyZXFfdHNuLT5waC5wYXJhbV90eXBlID0g
aHRvbnMoU0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVFU1QpOworCXJlcV90c24tPnBoLnBhcmFtX2xl
bmd0aCA9IGh0b25zKGxlbik7CisJcmVxX3Rzbi0+cmVxdWVzdF9zZXEgPSBodG9ubChzZXEpOwor
CisJLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3RoICovCisJY2gtPmNodW5rX2xlbmd0aCA9IGh0
b25zKGxlbiArIG9sZF9sZW4pOworCWNoay0+c2VuZF9zaXplID0gbGVuICsgb2xkX2xlbjsKKwlj
aGstPmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9zaXplKTsKKwljaGstPmJvb2tf
c2l6ZV9zY2FsZSA9IDA7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBTQ1RQX1NJWkUzMihj
aGstPnNlbmRfc2l6ZSk7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVz
ZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdWludDMyX3QgcmVzcF9zZXEsIHVpbnQzMl90IHJlc3VsdCkKK3sKKwl1aW50
MTZfdCBsZW4sIG9sZF9sZW47CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICpy
ZXNwOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKworCWNoID0gbXRvZChjaGstPmRhdGEs
IHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihu
dG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhl
IHBhcmFtLiAqLworCXJlc3AgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICop
KChjYWRkcl90KWNoICsgbGVuKTsKKwkvKiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBhcmFtIGJl
PyAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UpOwor
CXJlc3AtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9SRVNQT05TRSk7CisJ
cmVzcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXNwLT5yZXNwb25zZV9zZXEg
PSBodG9ubChyZXNwX3NlcSk7CisJcmVzcC0+cmVzdWx0ID0gbnRvaGwocmVzdWx0KTsKKworCS8q
IG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLworCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhs
ZW4gKyBvbGRfbGVuKTsKKwljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9sZF9sZW47CisJY2hrLT5i
b29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5i
b29rX3NpemUpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJ
cmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfZGVmZXJyZWRfcmVzZXRfcmVzcG9uc2Uoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCSBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAq
ZW50LAorCQkJCSBpbnQgcmVzcG9uc2UpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRy
ICpjaDsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKworCS8qCisJICogUmVzZXQgb3VyIGxhc3Qg
cmVzZXQgYWN0aW9uIHRvIHRoZSBuZXcgb25lIElQIC0+IHJlc3BvbnNlCisJICogKFBFUkZPUk1F
RCBwcm9iYWJseSkuIFRoaXMgYXNzdXJlcyB0aGF0IGlmIHdlIGZhaWwgdG8gc2VuZCwgYQorCSAq
IHJldHJhbiBmcm9tIHRoZSBwZWVyIHdpbGwgZ2V0IHRoZSBuZXcgcmVzcG9uc2UuCisJICovCisJ
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSByZXNwb25zZTsKKwlpZiAoYXNvYy0+c3RyZWFt
X3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCXJldHVybjsKKwl9CisJc2N0cF9hbGxvY19hX2NodW5r
KHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1
cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNodW5rX2lkLmlkID0g
U0NUUF9TVFJFQU1fUkVTRVQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7
CisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5ib29r
X3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWNoay0+c2VuZF9zaXplID0g
U0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsK
KwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlU
LCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1
cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7
CisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+c2VudCA9IFNDVFBfREFUQUdS
QU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAoc3RjYi0+YXNvYy5hbHRlcm5h
dGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCX0gZWxzZSB7CisJ
CWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJfQorCWNoID0g
bXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoLT5jaHVua190eXBl
ID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdzID0gMDsKKwljaC0+Y2h1bmtf
bGVuZ3RoID0gaHRvbnMoY2hrLT5ib29rX3NpemUpOworCWF0b21pY19hZGRfaW50KCZjaGstPndo
b1RvLT5yZWZfY291bnQsIDEpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5k
X3NpemU7CisJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIGVudC0+c2VxLCByZXNw
b25zZSk7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAqLworCVRBSUxRX0lOU0VS
VF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCisJCQkgIGNoaywKKwkJCSAgc2N0cF9u
ZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworfQorCit2b2lkCitzY3RwX2FkZF9zdHJl
YW1fcmVzZXRfcmVzdWx0X3RzbihzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZXNwX3NlcSwgdWludDMyX3QgcmVz
dWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2VuZF91bmEs
IHVpbnQzMl90IHJlY3ZfbmV4dCkKK3sKKwl1aW50MTZfdCBsZW4sIG9sZF9sZW47CisJc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqcmVzcDsKKwlzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciAqY2g7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
KTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkp
OworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8KKwlyZXNwID0gKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24gKikoKGNhZGRyX3QpY2ggKyBsZW4p
OworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCisJbGVuID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24pOworCXJlc3AtPnBoLnBhcmFt
X3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9SRVNQT05TRSk7CisJcmVzcC0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXNwLT5yZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3Nl
cSk7CisJcmVzcC0+cmVzdWx0ID0gaHRvbmwocmVzdWx0KTsKKwlyZXNwLT5zZW5kZXJzX25leHRf
dHNuID0gaHRvbmwoc2VuZF91bmEpOworCXJlc3AtPnJlY2VpdmVyc19uZXh0X3RzbiA9IGh0b25s
KHJlY3ZfbmV4dCk7CisKKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1
bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5ib29rX3NpemUgPSBsZW4g
KyBvbGRfbGVuOworCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUp
OworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9
IGNoay0+c2VuZF9zaXplOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfYWRkX2Fu
X291dF9zdHJlYW0oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorCQkgICAgICAgdWludDMy
X3Qgc2VxLAorCQkgICAgICAgdWludDE2X3QgYWRkaW5nKQoreworCXVpbnQxNl90IGxlbiwgb2xk
X2xlbjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2FkZF9zdHJtICphZGRzdHI7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0
cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNo
dW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8K
KwlhZGRzdHIgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICopKChjYWRkcl90
KWNoICsgbGVuKTsKKwkvKiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBhcmFtIGJlPyAqLworCWxl
biA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0pOworCisJLyogRmls
bCBpdCBvdXQuICovCisJYWRkc3RyLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVT
RVRfQUREX09VVF9TVFJFQU1TKTsKKwlhZGRzdHItPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGxl
bik7CisJYWRkc3RyLT5yZXF1ZXN0X3NlcSA9IGh0b25sKHNlcSk7CisJYWRkc3RyLT5udW1iZXJf
b2Zfc3RyZWFtcyA9IGh0b25zKGFkZGluZyk7CisJYWRkc3RyLT5yZXNlcnZlZCA9IDA7CisKKwkv
KiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMo
bGVuICsgb2xkX2xlbik7CisJY2hrLT5zZW5kX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+
Ym9va19zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOworCWNoay0+Ym9va19zaXpl
X3NjYWxlID0gMDsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFNDVFBfU0laRTMyKGNoay0+
c2VuZF9zaXplKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2FkZF9hbl9pbl9z
dHJlYW0oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHNlcSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhZGRpbmcpCit7
CisJdWludDE2X3QgbGVuLCBvbGRfbGVuOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKmFkZHN0cjsKKworCWNoID0gbXRvZChj
aGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9sZW4gPSBsZW4gPSBTQ1RQ
X1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBnZXQgdG8gbmV3IG9mZnNl
dCBmb3IgdGhlIHBhcmFtLiAqLworCWFkZHN0ciA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRf
YWRkX3N0cm0gKikoKGNhZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRo
aXMgcGFyYW0gYmU/ICovCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9h
ZGRfc3RybSk7CisJLyogRmlsbCBpdCBvdXQuICovCisJYWRkc3RyLT5waC5wYXJhbV90eXBlID0g
aHRvbnMoU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVBTVMpOworCWFkZHN0ci0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMobGVuKTsKKwlhZGRzdHItPnJlcXVlc3Rfc2VxID0gaHRvbmwoc2VxKTsK
KwlhZGRzdHItPm51bWJlcl9vZl9zdHJlYW1zID0gaHRvbnMoYWRkaW5nKTsKKwlhZGRzdHItPnJl
c2VydmVkID0gMDsKKworCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLworCWNoLT5jaHVu
a19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKKwljaGstPnNlbmRfc2l6ZSA9IGxlbiAr
IG9sZF9sZW47CisJY2hrLT5ib29rX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7
CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0g
U0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOworCXJldHVybjsKK30KKworaW50CitzY3RwX3Nl
bmRfc3RyZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJsZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGlu
dCBzb19sb2NrZWQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwl1aW50
MzJfdCBzZXE7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJYXNvYy0+dHJpZ2dlcl9yZXNldCA9
IDA7CisJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykgeworCQlyZXR1cm4gKEVB
TFJFQURZKTsKKwl9CisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9
PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCWNoay0+
Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TVFJFQU1fUkVT
RVQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9
IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5ib29rX3NpemUgPSBzaXplb2Yo
c3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hr
LT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPmRhdGEgPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsK
KwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hr
LCBzb19sb2NrZWQpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlT
Q1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCisJLyogc2V0
dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5U
OworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJ
Y2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCX0gZWxzZSB7CisJCWNoay0+d2hv
VG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJfQorCWNoID0gbXRvZChjaGst
PmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoLT5jaHVua190eXBlID0gU0NUUF9T
VFJFQU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdzID0gMDsKKwljaC0+Y2h1bmtfbGVuZ3RoID0g
aHRvbnMoY2hrLT5ib29rX3NpemUpOworCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZf
Y291bnQsIDEpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJ
c2VxID0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dDsKKwlpZiAoc2N0cF9hZGRfc3RyZWFt
X3Jlc2V0X291dChzdGNiLCBjaGssIHNlcSwgKHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9pbiAt
IDEpLCAoc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDEpKSkgeworCQlzZXErKzsKKwkJYXNvYy0+
c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJfSBlbHNlIHsKKwkJbV9mcmVlbShjaGstPmRh
dGEpOworCQljaGstPmRhdGEgPSBOVUxMOworCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGss
IHNvX2xvY2tlZCk7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9CisJYXNvYy0+c3RyX3Jlc2V0ID0g
Y2hrOworCS8qIGluc2VydCB0aGUgY2h1bmsgZm9yIHNlbmRpbmcgKi8KKwlUQUlMUV9JTlNFUlRf
VEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLAorCQkJICBjaGssCisJCQkgIHNjdHBfbmV4
dCk7CisJYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKKworCWlmIChzdGNiLT5hc29jLnNlbmRfc2Fj
aykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBzb19sb2NrZWQpOworCX0KKwlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgY2hr
LT53aG9Ubyk7CisJcmV0dXJuICgwKTsKK30KKworaW50CitzY3RwX3NlbmRfc3RyX3Jlc2V0X3Jl
cShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZf
dCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50OF90IHNlbmRfaW5fcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBz
ZW5kX3Rzbl9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IGFkZF9zdHJlYW0s
CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhZGRpbmdfbywKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZ19pLCB1aW50OF90IHBlZXJfYXNrZWQpCit7CisJ
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgY2FuX3NlbmRfb3V0X3JlcT0w
OworCXVpbnQzMl90IHNlcTsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoYXNvYy0+c3Ry
ZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCS8qLQorCQkgKiBBbHJlYWR5IG9uZSBwZW5kaW5n
LCBtdXN0IGdldCBBQ0sgYmFjayB0byBjbGVhciB0aGUgZmxhZy4KKwkJICovCisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQlVT
WSk7CisJCXJldHVybiAoRUJVU1kpOworCX0KKwlpZiAoKHNlbmRfaW5fcmVxID09IDApICYmIChz
ZW5kX3Rzbl9yZXEgPT0gMCkgJiYKKwkgICAgKGFkZF9zdHJlYW0gPT0gMCkpIHsKKwkJLyogbm90
aGluZyB0byBkbyAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlp
ZiAoc2VuZF90c25fcmVxICYmIHNlbmRfaW5fcmVxKSB7CisJCS8qIGVycm9yLCBjYW4ndCBkbyB0
aGF0ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfSBlbHNlIGlmIChz
ZW5kX2luX3JlcSkgeworCQljYW5fc2VuZF9vdXRfcmVxID0gMTsKKwl9CisJaWYgKG51bWJlcl9l
bnRyaWVzID4gKE1DTEJZVEVTIC0KKwkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NSU5fT1ZF
UkhFQUQgLQorCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmto
ZHIpIC0KKwkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9vdXRfcmVxdWVzdCkpIC8KKwkgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDE2
X3QpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCXNjdHBfYWxs
b2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVN
KTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGst
PnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU1RSRUFNX1JFU0VUOworCWNoay0+cmVjLmNodW5rX2lk
LmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNi
LT5hc29jOworCWNoay0+Ym9va19zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsK
KwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19zaXplKTsKKwljaGstPmJv
b2tfc2l6ZV9zY2FsZSA9IDA7CisKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
TUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYo
Y2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisKKwkvKiBzZXR1cCBjaHVuayBwYXJhbWV0
ZXJzICovCisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291
bnQgPSAwOworCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQljaGstPndob1RvID0gc3Rj
Yi0+YXNvYy5hbHRlcm5hdGU7CisJfSBlbHNlIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbjsKKwl9CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJl
Zl9jb3VudCwgMSk7CisJY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIg
Kik7CisJY2gtPmNodW5rX3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKKwljaC0+Y2h1bmtfZmxh
Z3MgPSAwOworCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPmJvb2tfc2l6ZSk7CisJU0NU
UF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKKworCXNlcSA9IHN0Y2ItPmFz
b2Muc3RyX3Jlc2V0X3NlcV9vdXQ7CisJaWYgKGNhbl9zZW5kX291dF9yZXEpIHsKKwkJaW50IHJl
dDsKKwkgICAgICAgIHJldCA9IHNjdHBfYWRkX3N0cmVhbV9yZXNldF9vdXQoc3RjYiwgY2hrLCBz
ZXEsIChzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfaW4gLSAxKSwgKHN0Y2ItPmFzb2Muc2VuZGlu
Z19zZXEgLSAxKSk7CisJCWlmIChyZXQpIHsKKwkJCXNlcSsrOworCQkJYXNvYy0+c3RyZWFtX3Jl
c2V0X291dHN0YW5kaW5nKys7CisJCX0KKwl9CisJaWYgKChhZGRfc3RyZWFtICYgMSkgJiYKKwkg
ICAgKChzdGNiLT5hc29jLnN0cm1fcmVhbG91dHNpemUgLSBzdGNiLT5hc29jLnN0cmVhbW91dGNu
dCkgPCBhZGRpbmdfbykpIHsKKwkJLyogTmVlZCB0byBhbGxvY2F0ZSBtb3JlICovCisJCXN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKm9sZHN0cmVhbTsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVl
X3BlbmRpbmcgKnNwLCAqbnNwOworCQlpbnQgaTsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURf
U1RSX1NUQVRTKQorCQlpbnQgajsKKyNlbmRpZgorCisJCW9sZHN0cmVhbSA9IHN0Y2ItPmFzb2Mu
c3RybW91dDsKKwkJLyogZ2V0IHNvbWUgbW9yZSAqLworCQlTQ1RQX01BTExPQyhzdGNiLT5hc29j
LnN0cm1vdXQsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKiwKKwkJCSAgICAoc3RjYi0+YXNvYy5z
dHJlYW1vdXRjbnQgKyBhZGRpbmdfbykgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX291dCks
CisJCQkgICAgU0NUUF9NX1NUUk1PKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dCA9PSBOVUxM
KSB7CisJCQl1aW50OF90IHg7CisJCQlzdGNiLT5hc29jLnN0cm1vdXQgPSBvbGRzdHJlYW07CisJ
CQkvKiBUdXJuIG9mZiB0aGUgYml0ICovCisJCQl4ID0gYWRkX3N0cmVhbSAmIDB4ZmU7CisJCQlh
ZGRfc3RyZWFtID0geDsKKwkJCWdvdG8gc2tpcF9zdHVmZjsKKwkJfQorCQkvKiBPayBub3cgd2Ug
cHJvY2VlZCB3aXRoIGNvcHlpbmcgdGhlIG9sZCBvdXQgc3R1ZmYgYW5kCisJCSAqIGluaXRpYWxp
emluZyB0aGUgbmV3IHN0dWZmLgorCQkgKi8KKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwor
CQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2NsZWFyKHN0Y2IsICZzdGNiLT5hc29j
LCAwLCAxKTsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKysp
IHsKKwkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7CisJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IG9sZHN0cmVhbVtpXS5jaHVu
a3Nfb25fcXVldWVzOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlkX29yZGVyZWQg
PSBvbGRzdHJlYW1baV0ubmV4dF9taWRfb3JkZXJlZDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtp
XS5uZXh0X21pZF91bm9yZGVyZWQgPSBvbGRzdHJlYW1baV0ubmV4dF9taWRfdW5vcmRlcmVkOwor
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSBvbGRzdHJlYW1b
aV0ubGFzdF9tc2dfaW5jb21wbGV0ZTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zaWQgPSBp
OworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gb2xkc3RyZWFtW2ldLnN0YXRlOwor
CQkJLyogRklYIE1FIEZJWCBNRSAqLworCQkJLyogVGhpcyBzaG91bGQgYmUgYSBTU19DT1BZIG9w
ZXJhdGlvbiBGSVggTUUgU1RSRUFNIFNDSEVEVUxFUiBFWFBFUlQgKi8KKwkJCXN0Y2ItPmFzb2Mu
c3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2Muc3RybW91
dFtpXSwgJm9sZHN0cmVhbVtpXSk7CisJCQkvKiBub3cgYW55dGhpbmcgb24gdGhvc2UgcXVldWVz
PyAqLworCQkJVEFJTFFfRk9SRUFDSF9TQUZFKHNwLCAmb2xkc3RyZWFtW2ldLm91dHF1ZXVlLCBu
ZXh0LCBuc3ApIHsKKwkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0cmVhbVtpXS5vdXRxdWV1ZSwgc3As
IG5leHQpOworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0
cXVldWUsIHNwLCBuZXh0KTsKKwkJCX0KKworCQl9CisJCS8qIG5vdyB0aGUgbmV3IHN0cmVhbXMg
Ki8KKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNiLT5h
c29jLCAxKTsKKwkJZm9yIChpID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkgPCAoc3RjYi0+
YXNvYy5zdHJlYW1vdXRjbnQgKyBhZGRpbmdfbyk7IGkrKykgeworCQkJVEFJTFFfSU5JVCgmc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5j
aHVua3Nfb25fcXVldWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRT
KQorCQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAxOyBqKyspIHsKKwkJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOworCQkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKKwkJCX0KKyNlbHNlCisJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOworCQkJc3RjYi0+YXNv
Yy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQlzdGNiLT5h
c29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQlzdGNiLT5hc29jLnN0cm1v
dXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5z
aWQgPSBpOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAw
OworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAm
c3RjYi0+YXNvYy5zdHJtb3V0W2ldLCBOVUxMKTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5z
dGF0ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsKKwkJfQorCQlzdGNiLT5hc29jLnN0cm1fcmVhbG91
dHNpemUgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCArIGFkZGluZ19vOworCQlTQ1RQX0ZSRUUo
b2xkc3RyZWFtLCBTQ1RQX01fU1RSTU8pOworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsK
Kwl9Citza2lwX3N0dWZmOgorCWlmICgoYWRkX3N0cmVhbSAmIDEpICYmIChhZGRpbmdfbyA+IDAp
KSB7CisJCWFzb2MtPnN0cm1fcGVuZGluZ19hZGRfc2l6ZSA9IGFkZGluZ19vOworCQlhc29jLT5w
ZWVyX3JlcV9vdXQgPSBwZWVyX2Fza2VkOworCQlzY3RwX2FkZF9hbl9vdXRfc3RyZWFtKGNoaywg
c2VxLCBhZGRpbmdfbyk7CisJCXNlcSsrOworCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRp
bmcrKzsKKwl9CisJaWYgKChhZGRfc3RyZWFtICYgMikgJiYgKGFkZGluZ19pID4gMCkpIHsKKwkJ
c2N0cF9hZGRfYW5faW5fc3RyZWFtKGNoaywgc2VxLCBhZGRpbmdfaSk7CisJCXNlcSsrOworCQlh
c29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKKwl9CisJaWYgKHNlbmRfaW5fcmVxKSB7
CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9pbihjaGssIG51bWJlcl9lbnRyaWVzLCBsaXN0LCBz
ZXEpOworCQlzZXErKzsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJfQor
CWlmIChzZW5kX3Rzbl9yZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3RzbihjaGssIHNl
cSk7CisJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOworCX0KKwlhc29jLT5zdHJf
cmVzZXQgPSBjaGs7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAqLworCVRBSUxR
X0lOU0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCisJCQkgIGNoaywKKwkJCSAg
c2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCWlmIChzdGNiLT5hc29jLnNl
bmRfc2FjaykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJfQor
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBjaGstPndob1RvKTsKKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX3NlbmRf
YWJvcnQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBz
dHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gs
IHVpbnQzMl90IHZ0YWcsIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lk
LCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZf
aWQsIHVpbnQxNl90IHBvcnQpCit7CisJLyogRG9uJ3QgcmVzcG9uZCB0byBhbiBBQk9SVCB3aXRo
IGFuIEFCT1JULiAqLworCWlmIChzY3RwX2lzX3RoZXJlX2FuX2Fib3J0X2hlcmUobSwgaXBobGVu
LCAmdnRhZykpIHsKKwkJaWYgKGNhdXNlKQorCQkJc2N0cF9tX2ZyZWVtKGNhdXNlKTsKKwkJcmV0
dXJuOworCX0KKwlzY3RwX3NlbmRfcmVzcF9tc2coc3JjLCBkc3QsIHNoLCB2dGFnLCBTQ1RQX0FC
T1JUX0FTU09DSUFUSU9OLCBjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAg
ICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCSAgICAg
ICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCXJldHVybjsKK30KKwordm9pZAorc2N0cF9z
ZW5kX29wZXJyX3RvKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwK
KyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVpbnQzMl90IHZ0YWcsIHN0
cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJu
dW0sCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90
IHBvcnQpCit7CisJc2N0cF9zZW5kX3Jlc3BfbXNnKHNyYywgZHN0LCBzaCwgdnRhZywgU0NUUF9P
UEVSQVRJT05fRVJST1IsIGNhdXNlLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJICAgICAg
ICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJcmV0dXJuOworfQorCitzdGF0aWMgc3RydWN0
IG1idWYgKgorc2N0cF9jb3B5X3Jlc3VtZShzdHJ1Y3QgdWlvICp1aW8sCisJCSBpbnQgbWF4X3Nl
bmRfbGVuLAorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
IDYwMjAwMCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgaW50IHVzZXJfbWFya3NfZW9y
LAorI2VuZGlmCisJCSBpbnQgKmVycm9yLAorCQkgdWludDMyX3QgKnNuZG91dCwKKwkJIHN0cnVj
dCBtYnVmICoqbmV3X3RhaWwpCit7CisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJc3RydWN0IG1i
dWYgKm07CisKKwltID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgbWF4X3NlbmRfbGVuLCAw
LAorCQkJKHVzZXJfbWFya3NfZW9yID8gTV9FT1IgOiAwKSk7CisJaWYgKG0gPT0gTlVMTCkgewor
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJfSBlbHNlIHsKKwkJKnNuZG91
dCA9IG1fbGVuZ3RoKG0sIE5VTEwpOworCQkqbmV3X3RhaWwgPSBtX2xhc3QobSk7CisJfQorCXJl
dHVybiAobSk7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+IDYwMjAwMCB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3RydWN0IG1idWYgKm07CisK
KwltID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgbWF4X3NlbmRfbGVuLCAwLAorCQkoTV9Q
S1RIRFIgfCAodXNlcl9tYXJrc19lb3IgPyBNX0VPUiA6IDApKSk7CisJaWYgKG0gPT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJfSBlbHNlIHsKKwkJKnNu
ZG91dCA9IG1fbGVuZ3RoKG0sIE5VTEwpOworCQkqbmV3X3RhaWwgPSBtX2xhc3QobSk7CisJfQor
CXJldHVybiAobSk7CisjZWxzZQorCWludCBsZWZ0LCBjYW5jcHksIHdpbGxjcHk7CisJc3RydWN0
IG1idWYgKm0sICpoZWFkOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKQorCWxlZnQgPSAoaW50KW1pbih1aW8tPnVpb19yZXNpZCwgbWF4X3NlbmRf
bGVuKTsKKyNlbHNlCisJbGVmdCA9IChpbnQpbWluKHVpb19yZXNpZCh1aW8pLCBtYXhfc2VuZF9s
ZW4pOworI2VuZGlmCisjZWxzZQorCWxlZnQgPSAoaW50KW1pbih1aW8tPnVpb19yZXNpZCwgbWF4
X3NlbmRfbGVuKTsKKyNlbmRpZgorCS8qIEFsd2F5cyBnZXQgYSBoZWFkZXIganVzdCBpbiBjYXNl
ICovCisJaGVhZCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZWZ0LCAwLCBNX1dBSVRPSywgMCwg
TVRfREFUQSk7CisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5V
TEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PQlVGUyk7CisJCSplcnJv
ciA9IEVOT0JVRlM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNhbmNweSA9IChpbnQpTV9UUkFJ
TElOR1NQQUNFKGhlYWQpOworCXdpbGxjcHkgPSBtaW4oY2FuY3B5LCBsZWZ0KTsKKwkqZXJyb3Ig
PSB1aW9tb3ZlKG10b2QoaGVhZCwgY2FkZHJfdCksIHdpbGxjcHksIHVpbyk7CisJaWYgKCplcnJv
cikgeworCQlzY3RwX21fZnJlZW0oaGVhZCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCSpzbmRv
dXQgKz0gd2lsbGNweTsKKwlsZWZ0IC09IHdpbGxjcHk7CisJU0NUUF9CVUZfTEVOKGhlYWQpID0g
d2lsbGNweTsKKwltID0gaGVhZDsKKwkqbmV3X3RhaWwgPSBoZWFkOworCXdoaWxlIChsZWZ0ID4g
MCkgeworCQkvKiBtb3ZlIGluIHVzZXIgZGF0YSAqLworCQlTQ1RQX0JVRl9ORVhUKG0pID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRBKTsKKwkJaWYg
KFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkJc2N0cF9tX2ZyZWVtKGhlYWQpOworCQkJ
Km5ld190YWlsID0gTlVMTDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJCSplcnJvciA9IEVOT0JVRlM7
CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQljYW5j
cHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShtKTsKKwkJd2lsbGNweSA9IG1pbihjYW5jcHksIGxl
ZnQpOworCQkqZXJyb3IgPSB1aW9tb3ZlKG10b2QobSwgY2FkZHJfdCksIHdpbGxjcHksIHVpbyk7
CisJCWlmICgqZXJyb3IpIHsKKwkJCXNjdHBfbV9mcmVlbShoZWFkKTsKKwkJCSpuZXdfdGFpbCA9
IE5VTEw7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJCSplcnJvciA9IEVGQVVMVDsKKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwkJU0NUUF9CVUZfTEVOKG0pID0gd2lsbGNweTsKKwkJbGVmdCAtPSB3aWxs
Y3B5OworCQkqc25kb3V0ICs9IHdpbGxjcHk7CisJCSpuZXdfdGFpbCA9IG07CisJCWlmIChsZWZ0
ID09IDApIHsKKwkJCVNDVFBfQlVGX05FWFQobSkgPSBOVUxMOworCQl9CisJfQorCXJldHVybiAo
aGVhZCk7CisjZW5kaWYKK30KKworc3RhdGljIGludAorc2N0cF9jb3B5X29uZShzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsCisgICAgICAgICAgICAgIHN0cnVjdCB1aW8gKnVp
bywKKyAgICAgICAgICAgICAgaW50IHJlc3ZfdXBmcm9udCkKK3sKKyNpZiBkZWZpbmVkKF9fUGFu
ZGFfXykKKwlzcC0+ZGF0YSA9IG1fdWlvdG9tYnVmKHVpbywgTV9XQUlUT0ssIHNwLT5sZW5ndGgs
CisJICAgICAgICAgICAgICAgICAgICAgICByZXN2X3VwZnJvbnQsIDApOworCWlmIChzcC0+ZGF0
YSA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisK
KwlzcC0+dGFpbF9tYnVmID0gbV9sYXN0KHNwLT5kYXRhKTsKKwlyZXR1cm4gKDApOworI2VsaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCXNwLT5kYXRhID0gbV91aW90b21idWYodWlvLCBNX1dBSVRP
Sywgc3AtPmxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAgIHJlc3ZfdXBmcm9udCwgMCk7
CisJaWYgKHNwLT5kYXRhID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOworCQlyZXR1cm4gKEVO
T0JVRlMpOworCX0KKworCXNwLT50YWlsX21idWYgPSBtX2xhc3Qoc3AtPmRhdGEpOworCXJldHVy
biAoMCk7CisjZWxzZQorCWludCBsZWZ0OworCWludCBjYW5jcHksIHdpbGxjcHksIGVycm9yOwor
CXN0cnVjdCBtYnVmICptLCAqaGVhZDsKKwlpbnQgY3BzeiA9IDA7CisKKwkvKiBGaXJzdCBvbmUg
Z2V0cyBhIGhlYWRlciAqLworCWxlZnQgPSBzcC0+bGVuZ3RoOworCWhlYWQgPSBtID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKChsZWZ0ICsgcmVzdl91cGZyb250KSwgMCwgTV9XQUlUT0ssIDAsIE1U
X0RBVEEpOworCWlmIChtID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOworCQlyZXR1cm4gKEVO
T0JVRlMpOworCX0KKwkvKi0KKwkgKiBBZGQgdGhpcyBvbmUgZm9yIG0gaW4gbm93LCB0aGF0IHdh
eSBpZiB0aGUgYWxsb2MgZmFpbHMgd2Ugd29uJ3QKKwkgKiBoYXZlIGEgYmFkIGNudC4KKwkgKi8K
KwlTQ1RQX0JVRl9SRVNWX1VGKG0sIHJlc3ZfdXBmcm9udCk7CisJY2FuY3B5ID0gKGludClNX1RS
QUlMSU5HU1BBQ0UobSk7CisJd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOworCXdoaWxlIChs
ZWZ0ID4gMCkgeworCQkvKiBtb3ZlIGluIHVzZXIgZGF0YSAqLworCQllcnJvciA9IHVpb21vdmUo
bXRvZChtLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsKKwkJaWYgKGVycm9yKSB7CisJCQlzY3Rw
X21fZnJlZW0oaGVhZCk7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCQlTQ1RQX0JVRl9MRU4o
bSkgPSB3aWxsY3B5OworCQlsZWZ0IC09IHdpbGxjcHk7CisJCWNwc3ogKz0gd2lsbGNweTsKKwkJ
aWYgKGxlZnQgPiAwKSB7CisJCQlTQ1RQX0JVRl9ORVhUKG0pID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRBKTsKKwkJCWlmIChTQ1RQX0JVRl9ORVhU
KG0pID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIHRoZSBoZWFkIGdvZXMgYmFjayB0byBjYWxs
ZXIsIGhlIGNhbiBmcmVlCisJCQkJICogdGhlIHJlc3QKKwkJCQkgKi8KKwkJCQlzY3RwX21fZnJl
ZW0oaGVhZCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOworCQkJCXJldHVybiAoRU5PQlVGUyk7CisJCQl9
CisJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJCWNhbmNweSA9IChpbnQpTV9UUkFJTElOR1NQ
QUNFKG0pOworCQkJd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOworCQl9IGVsc2UgeworCQkJ
c3AtPnRhaWxfbWJ1ZiA9IG07CisJCQlTQ1RQX0JVRl9ORVhUKG0pID0gTlVMTDsKKwkJfQorCX0K
KwlzcC0+ZGF0YSA9IGhlYWQ7CisJc3AtPmxlbmd0aCA9IGNwc3o7CisJcmV0dXJuICgwKTsKKyNl
bmRpZgorfQorCisKKworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICoK
K3NjdHBfY29weV9pdF9pbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3JjdiwKKyAg
ICBzdHJ1Y3QgdWlvICp1aW8sCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIGludCBt
YXhfc2VuZF9sZW4sCisgICAgaW50IHVzZXJfbWFya3NfZW9yLAorICAgIGludCAqZXJyb3IpCisK
K3sKKwkvKi0KKwkgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgaW4gaXRzIHdv
cmsuIFByb3RvY29sCisJICogcHJvY2Vzc2luZyBpcyB1cCBhbmQgcnVubmluZyBzbyBjYXJlIG11
c3QgYmUgdGFrZW4gdG8gc3BsLi4uKCkKKwkgKiB3aGVuIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGlu
ZyB0aGF0IG1heSBlZmZlY3QgdGhlIHN0Y2IvYXNvYy4gVGhlCisJICogc2IgaXMgbG9ja2VkIGhv
d2V2ZXIuIFdoZW4gZGF0YSBpcyBjb3BpZWQgdGhlIHByb3RvY29sIHByb2Nlc3NpbmcKKwkgKiBz
aG91bGQgYmUgZW5hYmxlZCBzaW5jZSB0aGlzIGlzIGEgc2xvd2VyIG9wZXJhdGlvbi4uLgorCSAq
LworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCA9IE5VTEw7CisJaW50IHJl
c3ZfaW5fZmlyc3Q7CisKKwkqZXJyb3IgPSAwOworCS8qIE5vdyBjYW4gd2Ugc2VuZCB0aGlzPyAq
LworCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5U
KSB8fAorCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9B
Q0tfU0VOVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpIHx8CisJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERP
V05fUEVORElORykpIHsKKwkJLyogZ290IGRhdGEgd2hpbGUgc2h1dHRpbmcgZG93biAqLworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBV
VCwgRUNPTk5SRVNFVCk7CisJCSplcnJvciA9IEVDT05OUkVTRVQ7CisJCWdvdG8gb3V0X25vdzsK
Kwl9CisJc2N0cF9hbGxvY19hX3N0cm1vcShzdGNiLCBzcCk7CisJaWYgKHNwID09IE5VTEwpIHsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRU5PTUVNKTsKKwkJKmVycm9yID0gRU5PTUVNOworCQlnb3RvIG91dF9ub3c7CisJfQor
CXNwLT5hY3RfZmxhZ3MgPSAwOworCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAwOworCXNwLT5zaW5m
b19mbGFncyA9IHNyY3YtPnNpbmZvX2ZsYWdzOworCXNwLT50aW1ldG9saXZlID0gc3Jjdi0+c2lu
Zm9fdGltZXRvbGl2ZTsKKwlzcC0+cHBpZCA9IHNyY3YtPnNpbmZvX3BwaWQ7CisJc3AtPmNvbnRl
eHQgPSBzcmN2LT5zaW5mb19jb250ZXh0OworCXNwLT5mc24gPSAwOworCSh2b2lkKVNDVFBfR0VU
VElNRV9USU1FVkFMKCZzcC0+dHMpOworCisJc3AtPnNpZCA9IHNyY3YtPnNpbmZvX3N0cmVhbTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJc3At
Pmxlbmd0aCA9ICh1aW50MzJfdCltaW4odWlvLT51aW9fcmVzaWQsIG1heF9zZW5kX2xlbik7Cisj
ZWxzZQorCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWluKHVpb19yZXNpZCh1aW8pLCBtYXhfc2Vu
ZF9sZW4pOworI2VuZGlmCisjZWxzZQorCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWluKHVpby0+
dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCWlmICgoc3AtPmxlbmd0aCA9PSAodWludDMy
X3QpdWlvLT51aW9fcmVzaWQpICYmCisjZWxzZQorCWlmICgoc3AtPmxlbmd0aCA9PSAodWludDMy
X3QpdWlvX3Jlc2lkKHVpbykpICYmCisjZW5kaWYKKyNlbHNlCisJaWYgKChzcC0+bGVuZ3RoID09
ICh1aW50MzJfdCl1aW8tPnVpb19yZXNpZCkgJiYKKyNlbmRpZgorCSAgICAoKHVzZXJfbWFya3Nf
ZW9yID09IDApIHx8CisJICAgICAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgfHwKKwkg
ICAgICh1c2VyX21hcmtzX2VvciAmJiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPUikpKSkg
eworCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMTsKKwl9IGVsc2UgeworCQlzcC0+bXNnX2lzX2Nv
bXBsZXRlID0gMDsKKwl9CisJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7CisJc3AtPnNvbWVfdGFr
ZW4gPSAwOworCXNwLT5wdXRfbGFzdF9vdXQgPSAwOworCXJlc3ZfaW5fZmlyc3QgPSBTQ1RQX0RB
VEFfQ0hVTktfT1ZFUkhFQUQoc3RjYik7CisJc3AtPmRhdGEgPSBzcC0+dGFpbF9tYnVmID0gTlVM
TDsKKwlpZiAoc3AtPmxlbmd0aCA9PSAwKSB7CisJCWdvdG8gc2tpcF9jb3B5OworCX0KKwlpZiAo
c3Jjdi0+c2luZm9fa2V5bnVtYmVyX3ZhbGlkKSB7CisJCXNwLT5hdXRoX2tleWlkID0gc3Jjdi0+
c2luZm9fa2V5bnVtYmVyOworCX0gZWxzZSB7CisJCXNwLT5hdXRoX2tleWlkID0gc3RjYi0+YXNv
Yy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7CisJfQorCWlmIChzY3RwX2F1dGhfaXNfcmVxdWlyZWRf
Y2h1bmsoU0NUUF9EQVRBLCBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7CisJCXNjdHBf
YXV0aF9rZXlfYWNxdWlyZShzdGNiLCBzcC0+YXV0aF9rZXlpZCk7CisJCXNwLT5ob2xkc19rZXlf
cmVmID0gMTsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9TT0NLRVRfVU5MT0NL
KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApLCAwKTsKKyNlbmRpZgorCSplcnJvciA9IHNjdHBf
Y29weV9vbmUoc3AsIHVpbywgcmVzdl9pbl9maXJzdCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJU0NUUF9TT0NLRVRfTE9DSyhTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSwgMCk7CisjZW5k
aWYKKyBza2lwX2NvcHk6CisJaWYgKCplcnJvcikgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKyNlbmRpZgorCQlzY3RwX2ZyZWVfYV9zdHJtb3Eo
c3RjYiwgc3AsIFNDVFBfU09fTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyNlbmRpZgorCQlzcCA9IE5VTEw7CisJfSBlbHNlIHsK
KwkJaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVSKSB7CisJCQlzcC0+bmV0ID0g
bmV0OworCQkJYXRvbWljX2FkZF9pbnQoJnNwLT5uZXQtPnJlZl9jb3VudCwgMSk7CisJCX0gZWxz
ZSB7CisJCQlzcC0+bmV0ID0gTlVMTDsKKwkJfQorCQlzY3RwX3NldF9wcnNjdHBfcG9saWN5KHNw
KTsKKwl9CitvdXRfbm93OgorCXJldHVybiAoc3ApOworfQorCisKK2ludAorc2N0cF9zb3NlbmQo
c3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisg
ICAgICAgICAgICBzdHJ1Y3QgdWlvICp1aW8sCisjaWZkZWYgX19QYW5kYV9fCisgICAgICAgICAg
ICBwYWtoYW5kbGVfdHlwZSB0b3AsCisgICAgICAgICAgICBwYWtoYW5kbGVfdHlwZSBpY29udHJv
bCwKKyNlbHNlCisgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLAorICAgICAgICAgICAgc3Ry
dWN0IG1idWYgKmNvbnRyb2wsCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChfX1BhbmRhX18pCisgICAgICAgICAgICBpbnQgZmxhZ3MKKyNlbHNlCisgICAgICAgICAg
ICBpbnQgZmxhZ3MsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gNTAwMDAwCisgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpwCisjZWxpZiBkZWZpbmVk
KF9fV2luZG93c19fKQorICAgICAgICAgICAgUEtUSFJFQUQgcAorI2Vsc2UKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAvKgorCSAgICAgKiBwcm9jIGlzIGEgZHVtbXkg
aW4gX19Vc2Vyc3BhY2VfXyBhbmQgd2lsbCBub3QgYmUgcGFzc2VkCisJICAgICAqIHRvIHNjdHBf
bG93ZXJfc29zZW5kCisJICAgICAqLworI2VuZGlmCisgICAgICAgICAgICBzdHJ1Y3QgcHJvYyAq
cAorI2VuZGlmCisjZW5kaWYKKykKK3sKKyNpZmRlZiBfX1BhbmRhX18KKwlzdHJ1Y3QgbWJ1ZiAq
Y29udHJvbCA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlzdHJ1Y3Qg
cHJvYyAqcCA9IGN1cnJlbnRfcHJvYygpOworI2VuZGlmCisJaW50IGVycm9yLCB1c2Vfc25kaW5m
byA9IDA7CisJc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzbmRyY3ZuaW5mbzsKKwlzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHJfdG9fdXNlOworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKyNlbmRpZgorI2lmZGVmIF9fUGFuZGFfXwor
CWNvbnRyb2wgPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpY29udHJvbCk7CisjZW5kaWYKKwlpZiAo
Y29udHJvbCkgeworCQkvKiBwcm9jZXNzIGNtc2cgc25kL3JjdiBpbmZvIChtYXliZSBhIGFzc29j
LWlkKSAqLworCQlpZiAoc2N0cF9maW5kX2Ntc2coU0NUUF9TTkRSQ1YsICh2b2lkICopJnNuZHJj
dm5pbmZvLCBjb250cm9sLAorCQkgICAgc2l6ZW9mKHNuZHJjdm5pbmZvKSkpIHsKKwkJCS8qIGdv
dCBvbmUgKi8KKwkJCXVzZV9zbmRpbmZvID0gMTsKKwkJfQorCX0KKwlhZGRyX3RvX3VzZSA9IGFk
ZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCWlmICgoYWRkcikgJiYg
KGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQlpZiAoSU42
X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCWluNl9zaW42XzJfc2lu
KCZzaW4sIHNpbjYpOworCQkJYWRkcl90b191c2UgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsK
KwkJfQorCX0KKyNlbmRpZgorCWVycm9yID0gc2N0cF9sb3dlcl9zb3NlbmQoc28sIGFkZHJfdG9f
dXNlLCB1aW8sIHRvcCwKKyNpZmRlZiBfX1BhbmRhX18KKwkJCQkgIGljb250cm9sLAorI2Vsc2UK
KwkJCQkgIGNvbnRyb2wsCisjZW5kaWYKKwkJCQkgIGZsYWdzLAorCQkJCSAgdXNlX3NuZGluZm8g
PyAmc25kcmN2bmluZm86IE5VTEwKKyNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pKQorCQkJCSAgLCBwCisjZW5kaWYKKwkJKTsKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKwlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJcmV0dXJuIChl
cnJvcik7Cit9CisKKworaW50CitzY3RwX2xvd2VyX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywK
KyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICAgICAgICAgICAg
ICAgIHN0cnVjdCB1aW8gKnVpbywKKyNpZmRlZiBfX1BhbmRhX18KKyAgICAgICAgICAgICAgICAg
IHBha2hhbmRsZV90eXBlIGlfcGFrLAorICAgICAgICAgICAgICAgICAgcGFraGFuZGxlX3R5cGUg
aV9jb250cm9sLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICppX3BhaywK
KyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjb250cm9sLAorI2VuZGlmCisgICAgICAg
ICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvICpzcmN2CisjaWYgIShkZWZpbmVkKCBfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykpCisgICAgICAgICAgICAgICAgICAsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
dGhyZWFkICpwCisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorICAgICAgICAgICAgICAgICAg
UEtUSFJFQUQgcAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jICpwCisjZW5k
aWYKKyNlbmRpZgorCSkKK3sKKwl1bnNpZ25lZCBpbnQgc25kbGVuID0gMCwgbWF4X2xlbjsKKwlp
bnQgZXJyb3IsIGxlbjsKKwlzdHJ1Y3QgbWJ1ZiAqdG9wID0gTlVMTDsKKyNpZmRlZiBfX1BhbmRh
X18KKwlzdHJ1Y3QgbWJ1ZiAqY29udHJvbCA9IE5VTEw7CisjZW5kaWYKKwlpbnQgcXVldWVfb25s
eSA9IDAsIHF1ZXVlX29ubHlfZm9yX2luaXQgPSAwOworCWludCBmcmVlX2NudF9hcHBsaWVkID0g
MDsKKwlpbnQgdW5fc2VudDsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisJdW5zaWduZWQgaW50IGlu
cXVldWVfYnl0ZXMgPSAwOworCXN0cnVjdCBzY3RwX2Jsb2NrX2VudHJ5IGJlOworCXN0cnVjdCBz
Y3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1Y3Qg
dGltZXZhbCBub3c7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX2lucGNiICp0X2lucDsKKwlpbnQgdXNlcl9tYXJr
c19lb3I7CisJaW50IGNyZWF0ZV9sb2NrX2FwcGxpZWQgPSAwOworCWludCBuYWdsZV9hcHBsaWVz
ID0gMDsKKwlpbnQgc29tZV9vbl9jb250cm9sID0gMDsKKwlpbnQgZ290X2FsbF9vZl90aGVfc2Vu
ZCA9IDA7CisJaW50IGhvbGRfdGNibG9jayA9IDA7CisJaW50IG5vbl9ibG9ja2luZyA9IDA7CisJ
dWludDMyX3QgbG9jYWxfYWRkX21vcmUsIGxvY2FsX3NvcmVzdiA9IDA7CisJdWludDE2X3QgcG9y
dDsKKwl1aW50MTZfdCBzaW5mb19mbGFnczsKKwlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7
CisKKwllcnJvciA9IDA7CisJbmV0ID0gTlVMTDsKKwlzdGNiID0gTlVMTDsKKwlhc29jID0gTlVM
TDsKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBfbG9ja19hc3NlcnQoc28pOworI2Vu
ZGlmCisJdF9pbnAgPSBpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlm
IChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWlm
IChpX3BhaykgeworCQkJU0NUUF9SRUxFQVNFX1BLVChpX3Bhayk7CisJCX0KKwkJcmV0dXJuIChl
cnJvcik7CisJfQorCWlmICgodWlvID09IE5VTEwpICYmIChpX3BhayA9PSBOVUxMKSkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJdXNlcl9tYXJrc19lb3IgPSBzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJVF9FT1IpOworCWF0b21p
Y19hZGRfaW50KCZpbnAtPnRvdGFsX3NlbmRzLCAxKTsKKwlpZiAodWlvKSB7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlpZiAodWlvLT51aW9f
cmVzaWQgPCAwKSB7CisjZWxzZQorCQlpZiAodWlvX3Jlc2lkKHVpbykgPCAwKSB7CisjZW5kaWYK
KyNlbHNlCisJCWlmICh1aW8tPnVpb19yZXNpZCA8IDApIHsKKyNlbmRpZgorCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwp
OworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlzbmRsZW4gPSAodW5zaWduZWQgaW50KXVpby0+dWlv
X3Jlc2lkOworI2Vsc2UKKwkJc25kbGVuID0gKHVuc2lnbmVkIGludCl1aW9fcmVzaWQodWlvKTsK
KyNlbmRpZgorI2Vsc2UKKwkJc25kbGVuID0gKHVuc2lnbmVkIGludCl1aW8tPnVpb19yZXNpZDsK
KyNlbmRpZgorCX0gZWxzZSB7CisJCXRvcCA9IFNDVFBfSEVBREVSX1RPX0NIQUlOKGlfcGFrKTsK
KyNpZmRlZiBfX1BhbmRhX18KKwkJLyotCisJCSAqIGFwcCBsZW4gaW5kaWNhdGVzIHRoZSBkYXRh
bGVuLCBkZ3NpemUgZm9yIGNhc2VzCisJCSAqIG9mIFNDVFBfRU9GL0FCT1JUIHdpbGwgbm90IGhh
dmUgdGhlIHJpZ2h0IGxlbgorCQkgKi8KKwkJc25kbGVuID0gU0NUUF9BUFBfREFUQV9MRU4oaV9w
YWspOworCQkvKi0KKwkJICogU2V0IHRoZSBwYXJ0aWNsZSBsZW4gYWxzbyB0byB6ZXJvIHRvIG1h
dGNoCisJCSAqIHVwIHdpdGggYXBwIGxlbi4gV2Ugb25seSBoYXZlIG9uZSBwYXJ0aWNsZQorCQkg
KiBpZiBhcHAgbGVuIGlzIHplcm8gZm9yIFBhbmRhLiBUaGlzIGlzIGVuc3VyZWQKKwkJICogaW4g
dGhlIHNvY2tldCBsaWIKKwkJICovCisJCWlmIChzbmRsZW4gPT0gMCkgeworCQkJU0NUUF9CVUZf
TEVOKHRvcCkgID0gMDsKKwkJfQorCQkvKi0KKwkJICogV2UgZGVsaW5rIHRoZSBjaGFpbiBmcm9t
IGhlYWRlciwgYnV0IGtlZXAKKwkJICogdGhlIGhlYWRlciBhcm91bmQgYXMgd2Ugd2lsbCBuZWVk
IGl0IGluCisJCSAqIEVBR0FJTiBjYXNlCisJCSAqLworCQlTQ1RQX0RFVEFDSF9IRUFERVJfRlJP
TV9DSEFJTihpX3Bhayk7CisjZWxzZQorCQlzbmRsZW4gPSBTQ1RQX0hFQURFUl9MRU4oaV9wYWsp
OworI2VuZGlmCisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiU2VuZCBjYWxsZWQg
YWRkcjolcCBzZW5kIGxlbmd0aCAlZFxuIiwKKwkJKHZvaWQgKilhZGRyLAorCSAgICAgICAgc25k
bGVuKTsKKyNpZmRlZiBfX1BhbmRhX18KKwlpZiAoaV9jb250cm9sKSB7CisJCWNvbnRyb2wgPSBT
Q1RQX0hFQURFUl9UT19DSEFJTihpX2NvbnRyb2wpOworCX0KKyNlbmRpZgorCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgU0NUUF9JU19MSVNU
RU5JTkcoaW5wKSkgeworCQkvKiBUaGUgbGlzdGVuZXIgY2FuIE5PVCBzZW5kICovCisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9UQ09OTik7CisJCWVycm9yID0gRU5PVENPTk47CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0K
KwkvKioKKwkgKiBQcmUtc2NyZWVuIGFkZHJlc3MsIGlmIG9uZSBpcyBnaXZlbiB0aGUgc2luLWxl
bgorCSAqIG11c3QgYmUgc2V0IGNvcnJlY3RseSEKKwkgKi8KKwlpZiAoYWRkcikgeworCQl1bmlv
biBzY3RwX3NvY2tzdG9yZSAqcmFkZHIgPSAodW5pb24gc2N0cF9zb2Nrc3RvcmUgKilhZGRyOwor
CQlzd2l0Y2ggKHJhZGRyLT5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZf
SU5FVDoKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCWlmIChyYWRkci0+c2luLnNpbl9sZW4gIT0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9CisjZW5kaWYKKwkJCXBvcnQg
PSByYWRkci0+c2luLnNpbl9wb3J0OworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CQljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCWlmIChyYWRkci0+c2lu
Ni5zaW42X2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZB
TCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9Cisj
ZW5kaWYKKwkJCXBvcnQgPSByYWRkci0+c2luNi5zaW42X3BvcnQ7CisJCQlicmVhazsKKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorI2lmZGVmIEhB
VkVfU0NPTk5fTEVOCisJCQlpZiAocmFkZHItPnNjb25uLnNjb25uX2xlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2Is
IG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFM
OworCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJfQorI2VuZGlmCisJCQlwb3J0ID0gcmFkZHIt
PnNjb25uLnNjb25uX3BvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
QUZOT1NVUFBPUlQpOworCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwkJfQorCX0gZWxzZQorCQlwb3J0ID0gMDsKKworCWlmIChzcmN2KSB7CisJCXNpbmZv
X2ZsYWdzID0gc3Jjdi0+c2luZm9fZmxhZ3M7CisJCXNpbmZvX2Fzc29jX2lkID0gc3Jjdi0+c2lu
Zm9fYXNzb2NfaWQ7CisJCWlmIChJTlZBTElEX1NJTkZPX0ZMQUcoc2luZm9fZmxhZ3MpIHx8CisJ
CSAgICBQUl9TQ1RQX0lOVkFMSURfUE9MSUNZKHNpbmZvX2ZsYWdzKSkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwp
OworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfQorCQlpZiAo
c3Jjdi0+c2luZm9fZmxhZ3MpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc193aXRoX2Zs
YWdzKTsKKwl9IGVsc2UgeworCQlzaW5mb19mbGFncyA9IGlucC0+ZGVmX3NlbmQuc2luZm9fZmxh
Z3M7CisJCXNpbmZvX2Fzc29jX2lkID0gaW5wLT5kZWZfc2VuZC5zaW5mb19hc3NvY19pZDsKKwl9
CisJaWYgKHNpbmZvX2ZsYWdzICYgU0NUUF9TRU5EQUxMKSB7CisJCS8qIGl0cyBhIHNlbmRhbGwg
Ki8KKwkJZXJyb3IgPSBzY3RwX3NlbmRhbGwoaW5wLCB1aW8sIHRvcCwgc3Jjdik7CisJCXRvcCA9
IE5VTEw7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwlpZiAoKHNpbmZvX2ZsYWdzICYgU0NU
UF9BRERSX09WRVIpICYmIChhZGRyID09IE5VTEwpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJZXJyb3Ig
PSBFSU5WQUw7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwkvKiBub3cgd2UgbXVzdCBmaW5k
IHRoZSBhc3NvYyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVEKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkpIHsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlu
cC0+c2N0cF9hc29jX2xpc3QpOworCQlpZiAoc3RjYikgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCWhvbGRfdGNibG9jayA9IDE7CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CX0gZWxzZSBpZiAoc2luZm9fYXNzb2NfaWQpIHsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2Fzb2NpZChpbnAsIHNpbmZvX2Fzc29jX2lkLCAxKTsKKwkJaWYgKHN0Y2IgIT0gTlVM
TCkgeworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCX0gZWxzZSBpZiAoYWRkcikgeworCQkv
Ki0KKwkJICogU2luY2Ugd2UgZGlkIG5vdCB1c2UgZmluZGVwIHdlIG11c3QKKwkJICogaW5jcmVt
ZW50IGl0LCBhbmQgaWYgd2UgZG9uJ3QgZmluZCBhIHRjYgorCQkgKiBkZWNyZW1lbnQgaXQuCisJ
CSAqLworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwor
CQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9l
cF9hZGRyKCZ0X2lucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCWlmIChzdGNiID09IE5V
TEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnAp
OworCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQl9IGVsc2UgeworCQkJaG9sZF90Y2Jsb2Nr
ID0gMTsKKwkJfQorCX0KKwlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGFkZHIpKSB7CisJCS8qIFBv
c3NpYmxlIGltcGxpY2l0IHNlbmQ/ICovCisJCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwor
CQljcmVhdGVfbG9ja19hcHBsaWVkID0gMTsKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKKwkJCS8qIFNob3VsZCBJIHJlYWxseSB1bmxv
Y2sgPyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0
X3VubG9ja2VkOworCisJCX0KKwkJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpID09IDApICYmCisJCSAgICAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2
KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkNSX1JFRihp
bnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCS8qIFdpdGggdGhlIGxvY2sgYXBwbGll
ZCBsb29rIGFnYWluICovCisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZ0
X2lucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAo
Y29udHJvbCAhPSBOVUxMKSAmJiAocG9ydCA+IDApKSB7CisJCQlzdGNiID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fY21zZ3MoJnRfaW5wLCBwb3J0LCBjb250cm9sLCAmbmV0LCAmZXJyb3IpOworCQl9
CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpbnApOworCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQl9IGVsc2Ug
eworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCQlpZiAoZXJyb3IpIHsKKwkJCWdvdG8gb3V0
X3VubG9ja2VkOworCQl9CisJCWlmICh0X2lucCAhPSBpbnApIHsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PVENPTk4pOwor
CQkJZXJyb3IgPSBFTk9UQ09OTjsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOworCQl9CisJfQorCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9FTlQpOwor
CQkJZXJyb3IgPSBFTk9FTlQ7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfSBlbHNlIHsKKwkJ
CS8qIFdlIG11c3QgZ28gYWhlYWQgYW5kIHN0YXJ0IHRoZSBJTklUIHByb2Nlc3MgKi8KKwkJCXVp
bnQzMl90IHZyZl9pZDsKKworCQkJaWYgKChzaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHx8CisJ
CQkgICAgKChzaW5mb19mbGFncyAmIFNDVFBfRU9GKSAmJiAoc25kbGVuID09IDApKSkgeworCQkJ
CS8qLQorCQkJCSAqIFVzZXIgYXNrcyB0byBhYm9ydCBhIG5vbi1leGlzdGFudCBhc3NvYywKKwkJ
CQkgKiBvciBFT0YgYSBub24tZXhpc3RhbnQgYXNzb2Mgd2l0aCBubyBkYXRhCisJCQkJICovCisJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9FTlQpOworCQkJCWVycm9yID0gRU5PRU5UOworCQkJCWdvdG8gb3V0X3VubG9ja2Vk
OworCQkJfQorCQkJLyogZ2V0IGFuIGFzb2Mvc3RjYiBzdHJ1Y3QgKi8KKwkJCXZyZl9pZCA9IGlu
cC0+ZGVmX3ZyZl9pZDsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlpZiAoY3JlYXRlX2xvY2tfYXBw
bGllZCA9PSAwKSB7CisJCQkJcGFuaWMoIkVycm9yLCBzaG91bGQgaG9sZCBjcmVhdGUgbG9jayBh
bmQgSSBkb24ndD8iKTsKKwkJCX0KKyNlbmRpZgorCQkJc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhp
bnAsIGFkZHIsICZlcnJvciwgMCwgdnJmX2lkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICBp
bnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50LAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICBpbnAtPnNjdHBfZXAucG9ydCwKKyNpZiAhKGRlZmluZWQoIF9fUGFuZGFfXykgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgcCk7CisjZWxz
ZQorCQkJICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHByb2MgKilOVUxMKTsKKyNlbmRp
ZgorCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCS8qIEVycm9yIGlzIHNldHVwIGZvciB1cyBp
biB0aGUgY2FsbCAqLworCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJfQorCQkJaWYgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB7CisJCQkJc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7CisJCQkJ
LyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLworCQkJCXNv
aXNjb25uZWN0aW5nKHNvKTsKKwkJCX0KKwkJCWhvbGRfdGNibG9jayA9IDE7CisJCQlpZiAoY3Jl
YXRlX2xvY2tfYXBwbGllZCkgeworCQkJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJ
CQkJY3JlYXRlX2xvY2tfYXBwbGllZCA9IDA7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfUFJJTlRG
KCJIdWgtMz8gY3JlYXRlIGxvY2sgc2hvdWxkIGhhdmUgYmVlbiBvbj8/XG4iKTsKKwkJCX0KKwkJ
CS8qIFR1cm4gb24gcXVldWUgb25seSBmbGFnIHRvIHByZXZlbnQgZGF0YSBmcm9tIGJlaW5nIHNl
bnQgKi8KKwkJCXF1ZXVlX29ubHkgPSAxOworCQkJYXNvYyA9ICZzdGNiLT5hc29jOworCQkJU0NU
UF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7CisJCQkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+dGltZV9lbnRlcmVkKTsKKworCQkJLyogaW5pdGlhbGl6
ZSBhdXRoZW50aWNhdGlvbiBwYXJhbXMgZm9yIHRoZSBhc3NvYyAqLworCQkJc2N0cF9pbml0aWFs
aXplX2F1dGhfcGFyYW1zKGlucCwgc3RjYik7CisKKwkJCWlmIChjb250cm9sKSB7CisJCQkJaWYg
KHNjdHBfcHJvY2Vzc19jbXNnc19mb3JfaW5pdChzdGNiLCBjb250cm9sLCAmZXJyb3IpKSB7CisJ
CQkJCXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfUENCRlJFRV9GT1JDRSwKKwkJCQkJ
ICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCArIFNDVFBfTE9DXzUpOworCQkJ
CQlob2xkX3RjYmxvY2sgPSAwOworCQkJCQlzdGNiID0gTlVMTDsKKwkJCQkJZ290byBvdXRfdW5s
b2NrZWQ7CisJCQkJfQorCQkJfQorCQkJLyogb3V0IHdpdGggdGhlIElOSVQgKi8KKwkJCXF1ZXVl
X29ubHlfZm9yX2luaXQgPSAxOworCQkJLyotCisJCQkgKiB3ZSBtYXkgd2FudCB0byBkaWcgaW4g
YWZ0ZXIgdGhpcyBjYWxsIGFuZCBhZGp1c3QgdGhlIE1UVQorCQkJICogdmFsdWUuIEl0IGRlZmF1
bHRlZCB0byAxNTAwIChjb25zdGFudCkgYnV0IHRoZSBybworCQkJICogc3RydWN0dXJlIG1heSBu
b3cgaGF2ZSBhbiB1cGRhdGUgYW5kIHRodXMgd2UgbWF5IG5lZWQgdG8KKwkJCSAqIGNoYW5nZSBp
dCBCRUZPUkUgd2UgYXBwZW5kIHRoZSBtZXNzYWdlLgorCQkJICovCisJCX0KKwl9IGVsc2UKKwkJ
YXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChzcmN2ID09IE5VTEwpCisJCXNyY3YgPSAoc3RydWN0
IHNjdHBfc25kcmN2aW5mbyAqKSZhc29jLT5kZWZfc2VuZDsKKwlpZiAoc3Jjdi0+c2luZm9fZmxh
Z3MgJiBTQ1RQX0FERFJfT1ZFUikgeworCQlpZiAoYWRkcikKKwkJCW5ldCA9IHNjdHBfZmluZG5l
dChzdGNiLCBhZGRyKTsKKwkJZWxzZQorCQkJbmV0ID0gTlVMTDsKKwkJaWYgKChuZXQgPT0gTlVM
TCkgfHwKKwkJICAgICgocG9ydCAhPSAwKSAmJiAocG9ydCAhPSBzdGNiLT5ycG9ydCkpKSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOwor
CQl9CisJfSBlbHNlIHsKKwkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQluZXQgPSBz
dGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJfSBlbHNlIHsKKwkJCW5ldCA9IHN0Y2ItPmFzb2MucHJp
bWFyeV9kZXN0aW5hdGlvbjsKKwkJfQorCX0KKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+dG90YWxf
c2VuZHMsIDEpOworCS8qIEtlZXAgdGhlIHN0Y2IgZnJvbSBiZWluZyBmcmVlZCB1bmRlciBvdXIg
ZmVldCAqLworCWF0b21pY19hZGRfaW50KCZhc29jLT5yZWZjbnQsIDEpOworCWZyZWVfY250X2Fw
cGxpZWQgPSAxOworCisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X05PX0ZSQUdNRU5UKSkgeworCQlpZiAoc25kbGVuID4gYXNvYy0+c21hbGxlc3RfbXR1KSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVNU0dTSVpFKTsKKwkJCWVycm9yID0gRU1TR1NJWkU7CisJCQlnb3RvIG91dF91bmxvY2tl
ZDsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKGlucC0+cmVjdl9j
YWxsYmFjaykgeworCQlub25fYmxvY2tpbmcgPSAxOworCX0KKyNlbmRpZgorCWlmIChTQ1RQX1NP
X0lTX05CSU8oc28pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gNTAwMDAwCisJICAgICB8fCAoZmxhZ3MgJiBNU0dfTkJJTykKKyNlbmRpZgorCSAgICAp
IHsKKwkJbm9uX2Jsb2NraW5nID0gMTsKKwl9CisJLyogd291bGQgd2UgYmxvY2s/ICovCisJaWYg
KG5vbl9ibG9ja2luZykgeworCQl1aW50MzJfdCBhbW91bnQ7CisKKwkJaWYgKGhvbGRfdGNibG9j
ayA9PSAwKSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJaG9sZF90Y2Jsb2NrID0gMTsK
KwkJfQorCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6
ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZF
UkhFQUQoc3RjYikpOworCQlpZiAodXNlcl9tYXJrc19lb3IgPT0gMCkgeworCQkJYW1vdW50ID0g
c25kbGVuOworCQl9IGVsc2UgeworCQkJYW1vdW50ID0gMTsKKwkJfQorCQlpZiAoKFNDVFBfU0Jf
TElNSVRfU05EKHNvKSA8ICAoYW1vdW50ICsgaW5xdWV1ZV9ieXRlcyArIHN0Y2ItPmFzb2Muc2Jf
c2VuZF9yZXN2KSkgfHwKKwkJICAgIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgPj0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFV09V
TERCTE9DSyk7CisJCQlpZiAoc25kbGVuID4gU0NUUF9TQl9MSU1JVF9TTkQoc28pKQorCQkJCWVy
cm9yID0gRU1TR1NJWkU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBFV09VTERCTE9DSzsKKwkJCWdv
dG8gb3V0X3VubG9ja2VkOworCQl9CisJCXN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2ICs9IHNuZGxl
bjsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlob2xkX3RjYmxvY2sgPSAwOworCX0gZWxz
ZSB7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnNiX3NlbmRfcmVzdiwgc25kbGVuKTsK
Kwl9CisJbG9jYWxfc29yZXN2ID0gc25kbGVuOworCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NU
UF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7CisJCWVycm9y
ID0gRUNPTk5SRVNFVDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQorCWlmIChjcmVhdGVfbG9j
a19hcHBsaWVkKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCWNyZWF0ZV9s
b2NrX2FwcGxpZWQgPSAwOworCX0KKwkvKiBJcyB0aGUgc3RyZWFtIG5vLiB2YWxpZD8gKi8KKwlp
ZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IGFzb2MtPnN0cmVhbW91dGNudCkgeworCQkvKiBJbnZh
bGlkIHN0cmVhbSBudW1iZXIgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5l
dCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJ
Z290byBvdXRfdW5sb2NrZWQ7CisJfQorCWlmICgoYXNvYy0+c3RybW91dFtzcmN2LT5zaW5mb19z
dHJlYW1dLnN0YXRlICE9IFNDVFBfU1RSRUFNX09QRU4pICYmCisJICAgIChhc29jLT5zdHJtb3V0
W3NyY3YtPnNpbmZvX3N0cmVhbV0uc3RhdGUgIT0gU0NUUF9TVFJFQU1fT1BFTklORykpIHsKKwkJ
LyoKKwkJICogQ2FuJ3QgcXVldWUgYW55IGRhdGEgd2hpbGUgc3RyZWFtIHJlc2V0IGlzIHVuZGVy
d2F5LgorCQkgKi8KKwkJaWYgKGFzb2MtPnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFtXS5zdGF0
ZSA+IFNDVFBfU1RSRUFNX09QRU4pIHsKKwkJCWVycm9yID0gRUFHQUlOOworCQl9IGVsc2Ugewor
CQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2Is
IG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBlcnJvcik7CisJCWdvdG8gb3V0X3VubG9ja2Vk
OworCX0KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpKSB7CisJCXF1ZXVlX29ubHkgPSAxOworCX0KKwkvKiB3ZSBhcmUgbm93IGRvbmUgd2l0
aCBhbGwgY29udHJvbCAqLworCWlmIChjb250cm9sKSB7CisJCXNjdHBfbV9mcmVlbShjb250cm9s
KTsKKwkJY29udHJvbCA9IE5VTEw7CisJfQorCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB8fAorCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHx8CisJICAgIChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJaWYgKHNyY3YtPnNpbmZv
X2ZsYWdzICYgU0NUUF9BQk9SVCkgeworCQkJOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVDT05OUkVT
RVQpOworCQkJZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCX0K
Kwl9CisJLyogT2ssIHdlIHdpbGwgYXR0ZW1wdCBhIG1zZ3NuZCA6PiAqLworI2lmICEoZGVmaW5l
ZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykpCisJaWYgKHApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA2MDMwMDAKKwkJcC0+dGRfcnUucnVfbXNnc25kKys7CisjZWxpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkJcC0+dGRfcHJv
Yy0+cF9zdGF0cy0+cF9ydS5ydV9tc2dzbmQrKzsKKyNlbHNlCisJCXAtPnBfc3RhdHMtPnBfcnUu
cnVfbXNnc25kKys7CisjZW5kaWYKKwl9CisjZW5kaWYKKwkvKiBBcmUgd2UgYWJvcnRpbmc/ICov
CisJaWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgeworCQlzdHJ1Y3QgbWJ1ZiAq
bW07CisJCWludCB0b3RfZGVtYW5kLCB0b3Rfb3V0ID0gMCwgbWF4X291dDsKKworCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kc193aXRoX2Fib3J0KTsKKwkJaWYgKChTQ1RQX0dFVF9TVEFURShh
c29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkgICAgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJCS8qIEl0IGhhcyB0byBi
ZSB1cCBiZWZvcmUgd2UgYWJvcnQgKi8KKwkJCS8qIGhvdyBiaWcgaXMgdGhlIHVzZXIgaW5pdGlh
dGVkIGFib3J0PyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3Rv
IG91dDsKKwkJfQorCQlpZiAoaG9sZF90Y2Jsb2NrKSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCQlob2xkX3RjYmxvY2sgPSAwOworCQl9CisJCWlmICh0b3ApIHsKKwkJCXN0cnVjdCBt
YnVmICpjbnRtID0gTlVMTDsKKworCQkJbW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOworCQkJaWYg
KHNuZGxlbiAhPSAwKSB7CisJCQkJZm9yIChjbnRtID0gdG9wOyBjbnRtOyBjbnRtID0gU0NUUF9C
VUZfTkVYVChjbnRtKSkgeworCQkJCQl0b3Rfb3V0ICs9IFNDVFBfQlVGX0xFTihjbnRtKTsKKwkJ
CQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNdXN0IGZpdCBpbiBhIE1UVSAqLworCQkJdG90
X291dCA9IHNuZGxlbjsKKwkJCXRvdF9kZW1hbmQgPSAodG90X291dCArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9wYXJhbWhkcikpOworCQkJaWYgKHRvdF9kZW1hbmQgPiBTQ1RQX0RFRkFVTFRfQUREX01P
UkUpIHsKKwkJCQkvKiBUbyBiaWcgKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0
Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTVNHU0laRSk7CisJCQkJZXJyb3IgPSBF
TVNHU0laRTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW1tID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKHRvdF9kZW1hbmQsIDAsIE1fV0FJVE9LLCAxLCBNVF9EQVRBKTsKKwkJfQorCQlpZiAobW0g
PT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBuZXQsIFNDVFBf
RlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJCWVycm9yID0gRU5PTUVNOworCQkJZ290byBv
dXQ7CisJCX0KKwkJbWF4X291dCA9IGFzb2MtPnNtYWxsZXN0X210dSAtIHNpemVvZihzdHJ1Y3Qg
c2N0cF9wYXJhbWhkcik7CisJCW1heF9vdXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fib3J0X21z
Zyk7CisJCWlmICh0b3Rfb3V0ID4gbWF4X291dCkgeworCQkJdG90X291dCA9IG1heF9vdXQ7CisJ
CX0KKwkJaWYgKG1tKSB7CisJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisKKwkJCS8qIG5v
dyBtb3ZlIGZvcndhcmQgdGhlIGRhdGEgcG9pbnRlciAqLworCQkJcGggPSBtdG9kKG1tLCBzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKTsKKwkJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9DQVVT
RV9VU0VSX0lOSVRJQVRFRF9BQlQpOworCQkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKCh1aW50
MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIHRvdF9vdXQpKTsKKwkJCXBoKys7
CisJCQlTQ1RQX0JVRl9MRU4obW0pID0gdG90X291dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkcik7CisJCQlpZiAodG9wID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJ
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDApOworI2VuZGlmCisJCQkJZXJyb3IgPSB1aW9tb3Zl
KChjYWRkcl90KXBoLCAoaW50KXRvdF9vdXQsIHVpbyk7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7CisjZW5kaWYKKwkJCQlpZiAoZXJyb3IpIHsK
KwkJCQkJLyotCisJCQkJCSAqIEhlcmUgaWYgd2UgY2FuJ3QgZ2V0IGhpcyBkYXRhIHdlCisJCQkJ
CSAqIHN0aWxsIGFib3J0IHdlIGp1c3QgZG9uJ3QgZ2V0IHRvCisJCQkJCSAqIHNlbmQgdGhlIHVz
ZXJzIG5vdGUgOi0wCisJCQkJCSAqLworCQkJCQlzY3RwX21fZnJlZW0obW0pOworCQkJCQltbSA9
IE5VTEw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoc25kbGVuICE9IDApIHsKKwkJCQkJ
U0NUUF9CVUZfTkVYVChtbSkgPSB0b3A7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChob2xkX3Rj
YmxvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJfQorCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJZnJlZV9jbnRfYXBwbGllZCA9IDA7CisJ
CS8qIHJlbGVhc2UgdGhpcyBsb2NrLCBvdGhlcndpc2Ugd2UgaGFuZyBvbiBvdXJzZWx2ZXMgKi8K
KwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtbSwgU0NU
UF9TT19MT0NLRUQpOworCQkvKiBub3cgcmVsb2NrIHRoZSBzdGNiIHNvIGV2ZXJ5dGhpbmcgaXMg
c2FuZSAqLworCQlob2xkX3RjYmxvY2sgPSAwOworCQlzdGNiID0gTlVMTDsKKwkJLyogSW4gdGhp
cyBjYXNlIHRvcCBpcyBhbHJlYWR5IGNoYWluZWQgdG8gbW0KKwkJICogYXZvaWQgZG91YmxlIGZy
ZWUsIHNpbmNlIHdlIGZyZWUgaXQgYmVsb3cgaWYKKwkJICogdG9wICE9IE5VTEwgYW5kIGRyaXZl
ciB3b3VsZCBmcmVlIGl0IGFmdGVyIHNlbmRpbmcKKwkJICogdGhlIHBhY2tldCBvdXQKKwkJICov
CisJCWlmIChzbmRsZW4gIT0gMCkgeworCQkJdG9wID0gTlVMTDsKKwkJfQorCQlnb3RvIG91dF91
bmxvY2tlZDsKKwl9CisJLyogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHdlIGNhbiBzZW5kICovCisJ
aW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3Rj
Yi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0
Y2IpKTsKKwlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykgeworCQlp
ZiAobm9uX2Jsb2NraW5nKSB7CisJCQkvKiB3ZSBhbHJlYWR5IGNoZWNrZWQgZm9yIG5vbi1ibG9j
a2luZyBhYm92ZS4gKi8KKwkJCW1heF9sZW4gPSBzbmRsZW47CisJCX0gZWxzZSB7CisJCQltYXhf
bGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5xdWV1ZV9ieXRlczsKKwkJfQorCX0gZWxz
ZSB7CisJCW1heF9sZW4gPSAwOworCX0KKwlpZiAoaG9sZF90Y2Jsb2NrKSB7CisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJaG9sZF90Y2Jsb2NrID0gMDsKKwl9CisJaWYgKGFzb2MtPnN0cm1v
dXQgPT0gTlVMTCkgeworCQkvKiBodWg/IHNvZnR3YXJlIGVycm9yICovCisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsK
KwkJZXJyb3IgPSBFRkFVTFQ7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKworCS8qIFVubGVz
cyBFX0VPUiBtb2RlIGlzIG9uLCB3ZSBtdXN0IG1ha2UgYSBzZW5kIEZJVCBpbiBvbmUgY2FsbC4g
Ki8KKwlpZiAoKHVzZXJfbWFya3NfZW9yID09IDApICYmCisJICAgIChzbmRsZW4gPiBTQ1RQX1NC
X0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkpKSB7CisJCS8qIEl0IHdpbGwgTkVWRVIgZml0
ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVNU0dTSVpFKTsKKwkJZXJyb3IgPSBFTVNHU0laRTsKKwkJZ290byBvdXRfdW5s
b2NrZWQ7CisJfQorCWlmICgodWlvID09IE5VTEwpICYmIHVzZXJfbWFya3NfZW9yKSB7CisJCS8q
LQorCQkgKiBXZSBkbyBub3Qgc3VwcG9ydCBlZW9yIG1vZGUgZm9yCisJCSAqIHNlbmRpbmcgd2l0
aCBtYnVmIGNoYWlucyAobGlrZSBzZW5kZmlsZSkuCisJCSAqLworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQll
cnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQorCisJaWYgKHVzZXJfbWFy
a3NfZW9yKSB7CisJCWxvY2FsX2FkZF9tb3JlID0gbWluKFNDVFBfU0JfTElNSVRfU05EKHNvKSwg
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkpOworCX0gZWxzZSB7CisJ
CS8qLQorCQkgKiBGb3Igbm9uLWVlb3IgdGhlIHdob2xlIG1lc3NhZ2UgbXVzdCBmaXQgaW4KKwkJ
ICogdGhlIHNvY2tldCBzZW5kIGJ1ZmZlci4KKwkJICovCisJCWxvY2FsX2FkZF9tb3JlID0gc25k
bGVuOworCX0KKwlsZW4gPSAwOworCWlmIChub25fYmxvY2tpbmcpIHsKKwkJZ290byBza2lwX3By
ZWJsb2NrOworCX0KKwlpZiAoKChtYXhfbGVuIDw9IGxvY2FsX2FkZF9tb3JlKSAmJgorCSAgICAg
KFNDVFBfU0JfTElNSVRfU05EKHNvKSA+PSBsb2NhbF9hZGRfbW9yZSkpIHx8CisJICAgIChtYXhf
bGVuID09IDApIHx8CisJICAgICgoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlK3N0Y2It
PmFzb2Muc3RyZWFtX3F1ZXVlX2NudCkgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVu
a3Nfb25fcXVldWUpKSkgeworCQkvKiBObyByb29tIHJpZ2h0IG5vdyAhICovCisJCVNPQ0tCVUZf
TE9DSygmc28tPnNvX3NuZCk7CisJCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291
dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBf
REFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJCXdoaWxlICgoU0NUUF9TQl9MSU1JVF9TTkQo
c28pIDwgKGlucXVldWVfYnl0ZXMgKyBsb2NhbF9hZGRfbW9yZSkpIHx8CisJCSAgICAgICAoKHN0
Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCtzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUp
ID49IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkpIHsKKwkJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCJwcmVfYmxvY2sgbGltaXQ6JXUgPChpbnE6JWQgKyAl
ZCkgfHwgKCVkKyVkID4gJWQpXG4iLAorCQkJICAgICAgICAodW5zaWduZWQgaW50KVNDVFBfU0Jf
TElNSVRfU05EKHNvKSwKKwkJCSAgICAgICAgaW5xdWV1ZV9ieXRlcywKKwkJCSAgICAgICAgbG9j
YWxfYWRkX21vcmUsCisJCQkgICAgICAgIHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCwKKwkJ
CSAgICAgICAgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLAorCQkJICAgICAgICBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpOworCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdfRU5BQkxFKSB7
CisJCQkJc2N0cF9sb2dfYmxvY2soU0NUUF9CTE9DS19MT0dfSU5UT19CTEtBLCBhc29jLCBzbmRs
ZW4pOworCQkJfQorCQkJYmUuZXJyb3IgPSAwOworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYg
IWRlZmluZWQoX19XaW5kb3dzX18pCisJCQlzdGNiLT5ibG9ja19lbnRyeSA9ICZiZTsKKyNlbmRp
ZgorCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19zbmQpOworCQkJc3RjYi0+YmxvY2tfZW50cnkg
PSBOVUxMOworCQkJaWYgKGVycm9yIHx8IHNvLT5zb19lcnJvciB8fCBiZS5lcnJvcikgeworCQkJ
CWlmIChlcnJvciA9PSAwKSB7CisJCQkJCWlmIChzby0+c29fZXJyb3IpCisJCQkJCQllcnJvciA9
IHNvLT5zb19lcnJvcjsKKwkJCQkJaWYgKGJlLmVycm9yKSB7CisJCQkJCQllcnJvciA9IGJlLmVy
cm9yOworCQkJCQl9CisJCQkJfQorCQkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwkJ
CQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9n
X2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX09VVE9GX0JMSywKKwkJCQkgICAgICAgICAgICAgICBhc29j
LCBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwkJCX0KKwkJCWlmIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJCVNPQ0tC
VUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJ
CWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0
Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChz
dGNiKSk7CisJCX0KKwkJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA+IGlucXVldWVfYnl0ZXMp
IHsKKwkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSAgaW5xdWV1ZV9ieXRlczsK
KwkJfSBlbHNlIHsKKwkJCW1heF9sZW4gPSAwOworCQl9CisJCVNPQ0tCVUZfVU5MT0NLKCZzby0+
c29fc25kKTsKKwl9CisKK3NraXBfcHJlYmxvY2s6CisJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwllcnJvciA9IHNibG9jaygmc28tPnNvX3NuZCwgU0JM
T0NLV0FJVChmbGFncykpOworI2VuZGlmCisJLyogc25kbGVuIGNvdmVycyBmb3IgbWJ1ZiBjYXNl
CisJICogdWlvX3Jlc2lkIGNvdmVycyBmb3IgdGhlIG5vbi1tYnVmIGNhc2UKKwkgKiBOT1RFOiB1
aW8gd2lsbCBiZSBudWxsIHdoZW4gdG9wL21idWYgaXMgcGFzc2VkCisJICovCisJaWYgKHNuZGxl
biA9PSAwKSB7CisJCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSB7CisJCQlnb3Rf
YWxsX29mX3RoZV9zZW5kID0gMTsKKwkJCWdvdG8gZGF0YWxlc3NfZW9mOworCQl9IGVsc2Ugewor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCX0K
KwlpZiAodG9wID09IE5VTEwpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcg
KnNwOworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtOworCQl1aW50MzJfdCBzbmRvdXQ7
CisKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQlpZiAoKGFzb2MtPnN0cmVhbV9sb2Nr
ZWQpICYmCisJCSAgICAoYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgIT0gc3Jjdi0+c2luZm9fc3Ry
ZWFtKSkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCVNDVFBfVENCX1NFTkRfVU5M
T0NLKHN0Y2IpOworCisJCXN0cm0gPSAmc3RjYi0+YXNvYy5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0
cmVhbV07CisJCWlmIChzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID09IDApIHsKKwkJZG9fYV9j
b3B5X2luOgorCQkJc3AgPSBzY3RwX2NvcHlfaXRfaW4oc3RjYiwgYXNvYywgc3JjdiwgdWlvLCBu
ZXQsIG1heF9sZW4sIHVzZXJfbWFya3NfZW9yLCAmZXJyb3IpOworCQkJaWYgKGVycm9yKSB7CisJ
CQkJZ290byBvdXQ7CisJCQl9CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlpZiAo
c3AtPm1zZ19pc19jb21wbGV0ZSkgeworCQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAw
OworCQkJCWFzb2MtPnN0cmVhbV9sb2NrZWQgPSAwOworCQkJfSBlbHNlIHsKKwkJCQkvKiBKdXN0
IGdvdCBsb2NrZWQgdG8gdGhpcyBndXkgaW4KKwkJCQkgKiBjYXNlIG9mIGFuIGludGVycnVwdC4K
KwkJCQkgKi8KKwkJCQlzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMTsKKwkJCQlpZiAoc3Rj
Yi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlhc29jLT5zdHJlYW1fbG9ja2Vk
ID0gMTsKKwkJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgPSBzcmN2LT5zaW5mb19zdHJlYW07
CisJCQkJfQorCQkJCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAwOworCQkJfQorCQkJc2N0cF9zbmRf
c2JfYWxsb2Moc3RjYiwgc3AtPmxlbmd0aCk7CisJCQlhdG9taWNfYWRkX2ludCgmYXNvYy0+c3Ry
ZWFtX3F1ZXVlX2NudCwgMSk7CisJCQlpZiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JE
RVJFRCkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfdW5vcmQpOworCQkJ
fQorCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVlLCBzcCwgbmV4dCk7CisJCQlz
dGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2FkZF90b19zdHJlYW0oc3RjYiwgYXNvYywg
c3RybSwgc3AsIDEpOworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7
CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlzcCA9IFRBSUxRX0xBU1QoJnN0cm0t
Pm91dHF1ZXVlLCBzY3RwX3N0cmVhbWhlYWQpOworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3Rj
Yik7CisJCQlpZiAoc3AgPT0gTlVMTCkgeworCQkJCS8qID8/Pz8gSHVoID8/PyBsYXN0IG1zZyBp
cyBnb25lICovCisjaWZkZWYgSU5WQVJJQU5UUworCQkJCXBhbmljKCJXYXJuaW5nOiBMYXN0IG1z
ZyBtYXJrZWQgaW5jb21wbGV0ZSwgeWV0IG5vdGhpbmcgbGVmdD8iKTsKKyNlbHNlCisJCQkJU0NU
UF9QUklOVEYoIldhcm5pbmc6IExhc3QgbXNnIG1hcmtlZCBpbmNvbXBsZXRlLCB5ZXQgbm90aGlu
ZyBsZWZ0P1xuIik7CisJCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7CisjZW5kaWYK
KwkJCQlnb3RvIGRvX2FfY29weV9pbjsKKworCQkJfQorCQl9CisjaWYgZGVmaW5lZChfX0FQUExF
X18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQl3aGlsZSAodWlvLT51aW9fcmVzaWQg
PiAwKSB7CisjZWxzZQorCQl3aGlsZSAodWlvX3Jlc2lkKHVpbykgPiAwKSB7CisjZW5kaWYKKyNl
bHNlCisJCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsKKyNlbmRpZgorCQkJLyogSG93IG11
Y2ggcm9vbSBkbyB3ZSBoYXZlPyAqLworCQkJc3RydWN0IG1idWYgKm5ld190YWlsLCAqbW07CisK
KwkJCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0g
KHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVB
RChzdGNiKSk7CisJCQlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykK
KwkJCQltYXhfbGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5xdWV1ZV9ieXRlczsKKwkJ
CWVsc2UKKwkJCQltYXhfbGVuID0gMDsKKworCQkJaWYgKChtYXhfbGVuID4gU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkpIHx8CisJCQkgICAgKG1heF9sZW4gJiYgKFND
VFBfU0JfTElNSVRfU05EKHNvKSA8IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hZGRfbW9yZV90aHJl
c2hvbGQpKSkgfHwKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xF
T1BBUkQpCisJCQkgICAgKHVpby0+dWlvX3Jlc2lkICYmICh1aW8tPnVpb19yZXNpZCA8PSAoaW50
KW1heF9sZW4pKSkgeworI2Vsc2UKKwkJCSAgICAodWlvX3Jlc2lkKHVpbykgJiYgKHVpb19yZXNp
ZCh1aW8pIDw9IChpbnQpbWF4X2xlbikpKSB7CisjZW5kaWYKKyNlbHNlCisJCQkgICAgKHVpby0+
dWlvX3Jlc2lkICYmICh1aW8tPnVpb19yZXNpZCA8PSAoaW50KW1heF9sZW4pKSkgeworI2VuZGlm
CisJCQkJc25kb3V0ID0gMDsKKwkJCQluZXdfdGFpbCA9IE5VTEw7CisJCQkJaWYgKGhvbGRfdGNi
bG9jaykgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCWhvbGRfdGNibG9jayA9
IDA7CisJCQkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJCVNDVFBfU09DS0VUX1VOTE9D
SyhzbywgMCk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPiA2MDIwMDApIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkgICAgbW0g
PSBzY3RwX2NvcHlfcmVzdW1lKHVpbywgbWF4X2xlbiwgdXNlcl9tYXJrc19lb3IsICZlcnJvciwg
JnNuZG91dCwgJm5ld190YWlsKTsKKyNlbHNlCisJCQkJICAgIG1tID0gc2N0cF9jb3B5X3Jlc3Vt
ZSh1aW8sIG1heF9sZW4sICZlcnJvciwgJnNuZG91dCwgJm5ld190YWlsKTsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19BUFBMRV9fKQorCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDApOworI2VuZGlm
CisJCQkJaWYgKChtbSA9PSBOVUxMKSB8fCBlcnJvcikgeworCQkJCQlpZiAobW0pIHsKKwkJCQkJ
CXNjdHBfbV9mcmVlbShtbSk7CisJCQkJCX0KKwkJCQkJZ290byBvdXQ7CisJCQkJfQorCQkJCS8q
IFVwZGF0ZSB0aGUgbWJ1ZiBhbmQgY291bnQgKi8KKwkJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3Rj
Yik7CisJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZS
RUVEKSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gZ2V0IG91dC4KKwkJCQkJICogUGVlciBwcm9iYWJs
eSBhYm9ydGVkLgorCQkJCQkgKi8KKwkJCQkJc2N0cF9tX2ZyZWVtKG1tKTsKKwkJCQkJaWYgKHN0
Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1BDQl9GTEFHU19XQVNfQUJPUlRFRCkgeworCQkJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVDT05OUkVTRVQpOworCQkJCQkJZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJCQl9CisJCQkJCVND
VFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJaWYg
KHNwLT50YWlsX21idWYpIHsKKwkJCQkJLyogdGFjayBpdCB0byB0aGUgZW5kICovCisJCQkJCVND
VFBfQlVGX05FWFQoc3AtPnRhaWxfbWJ1ZikgPSBtbTsKKwkJCQkJc3AtPnRhaWxfbWJ1ZiA9IG5l
d190YWlsOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEEgc3RvbGVuIG1idWYgKi8KKwkJCQkJc3At
PmRhdGEgPSBtbTsKKwkJCQkJc3AtPnRhaWxfbWJ1ZiA9IG5ld190YWlsOworCQkJCX0KKwkJCQlz
Y3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBzbmRvdXQpOworCQkJCWF0b21pY19hZGRfaW50KCZzcC0+
bGVuZ3RoLCBzbmRvdXQpOworCQkJCWxlbiArPSBzbmRvdXQ7CisJCQkJaWYgKHNyY3YtPnNpbmZv
X2ZsYWdzICYgU0NUUF9TQUNLX0lNTUVESUFURUxZKSB7CisJCQkJCXNwLT5zaW5mb19mbGFncyB8
PSBTQ1RQX1NBQ0tfSU1NRURJQVRFTFk7CisJCQkJfQorCisJCQkJLyogRGlkIHdlIHJlYWNoIEVP
Uj8gKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQp
CisJCQkJaWYgKCh1aW8tPnVpb19yZXNpZCA9PSAwKSAmJgorI2Vsc2UKKwkJCQlpZiAoKHVpb19y
ZXNpZCh1aW8pID09IDApICYmCisjZW5kaWYKKyNlbHNlCisJCQkJaWYgKCh1aW8tPnVpb19yZXNp
ZCA9PSAwKSAmJgorI2VuZGlmCisJCQkJICAgICgodXNlcl9tYXJrc19lb3IgPT0gMCkgfHwKKwkJ
CQkgICAgIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSB8fAorCQkJCSAgICAgKHVzZXJf
bWFya3NfZW9yICYmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9SKSkpKSB7CisJCQkJCXNw
LT5tc2dfaXNfY29tcGxldGUgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCXNwLT5tc2dfaXNfY29t
cGxldGUgPSAwOworCQkJCX0KKwkJCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwkJCX0K
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCQlp
ZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2Vsc2UKKwkJCWlmICh1aW9fcmVzaWQodWlvKSA9
PSAwKSB7CisjZW5kaWYKKyNlbHNlCisJCQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2Vu
ZGlmCisJCQkJLyogZ290IGl0IGFsbD8gKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIFBS
LVNDVFA/ICovCisJCQlpZiAoKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQpICYmIChhc29jLT5zZW50
X3F1ZXVlX2NudF9yZW1vdmVhYmxlID4gMCkpIHsKKwkJCQkvKiBUaGlzIGlzIHVnbHkgYnV0IHdl
IG11c3QgYXNzdXJlIGxvY2tpbmcgb3JkZXIgKi8KKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDAp
IHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJ
CQl9CisJCQkJc2N0cF9wcnVuZV9wcnNjdHAoc3RjYiwgYXNvYywgc3Jjdiwgc25kbGVuKTsKKwkJ
CQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChz
dGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQo
c3RjYikpOworCQkJCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzbykgPiBpbnF1ZXVlX2J5dGVzKQor
CQkJCQltYXhfbGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5xdWV1ZV9ieXRlczsKKwkJ
CQllbHNlCisJCQkJCW1heF9sZW4gPSAwOworCQkJCWlmIChtYXhfbGVuID4gMCkgeworCQkJCQlj
b250aW51ZTsKKwkJCQl9CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWhvbGRfdGNi
bG9jayA9IDA7CisJCQl9CisJCQkvKiB3YWl0IGZvciBzcGFjZSBub3cgKi8KKwkJCWlmIChub25f
YmxvY2tpbmcpIHsKKwkJCQkvKiBOb24tYmxvY2tpbmcgaW8gaW4gcGxhY2Ugb3V0ICovCisJCQkJ
Z290byBza2lwX291dF9lb2Y7CisJCQl9CisJCQkvKiBXaGF0IGFib3V0IHRoZSBJTklULCBzZW5k
IGl0IG1heWJlICovCisJCQlpZiAocXVldWVfb25seV9mb3JfaW5pdCkgeworCQkJCWlmIChob2xk
X3RjYmxvY2sgPT0gMCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlob2xkX3Rj
YmxvY2sgPSAxOworCQkJCX0KKwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09
IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCQkvKiBhIGNvbGxpc2lvbiB0b29rIHVzIGZvcndhcmQ/
ICovCisJCQkJCXF1ZXVlX29ubHkgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXNjdHBfc2VuZF9p
bml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJU0NUUF9TRVRfU1RBVEUo
YXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7CisJCQkJCXF1ZXVlX29ubHkgPSAxOworCQkJ
CX0KKwkJCX0KKwkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSA+IG5ldC0+Y3duZCkgJiYKKwkJCSAg
ICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID09IDApKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfc2VuZF9jd25kX2F2b2lkKTsKKwkJCQlxdWV1ZV9vbmx5ID0gMTsKKwkJCX0gZWxzZSBpZiAo
YXNvYy0+aWZwX2hhZF9lbm9idWYpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19pZm5vbWVt
cXVldWVkKTsKKwkJCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA+ICgyICogbmV0LT5tdHUpKSB7CisJ
CQkJCXF1ZXVlX29ubHkgPSAxOworCQkJCX0KKwkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7
CisJCQl9CisJCQl1bl9zZW50ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAt
IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCQkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpICYmCisJCQkgICAgKHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0ID4gMCkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250IDwgU0NU
UF9NQVhfREFUQV9CVU5ETElORykgJiYKKwkJCSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFz
b2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgeworCisJCQkJLyotCisJCQkJ
ICogT2ssIE5hZ2xlIGlzIHNldCBvbiBhbmQgd2UgaGF2ZSBkYXRhIG91dHN0YW5kaW5nLgorCQkJ
CSAqIERvbid0IHNlbmQgYW55dGhpbmcgYW5kIGxldCBTQUNLcyBkcml2ZSBvdXQgdGhlCisJCQkJ
ICogZGF0YSB1bmxlc3Mgd2UgaGF2ZSBhICJmdWxsIiBzZWdtZW50IHRvIHNlbmQuCisJCQkJICov
CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTkFH
TEVfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RjYiwgU0NU
UF9OQUdMRV9BUFBMSUVEKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVx
dWV1ZWQpOworCQkJCW5hZ2xlX2FwcGxpZXMgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9OQUdMRV9MT0dHSU5HX0VO
QUJMRSkgeworCQkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X05PREVMQVkpKQorCQkJCQkJc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RjYiwgU0NUUF9OQUdMRV9T
S0lQUEVEKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVzZW50KTsKKwkJ
CQluYWdsZV9hcHBsaWVzID0gMDsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgeworCisJCQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQsIHF1ZXVlX29ubHlfZm9yX2luaXQsIHF1ZXVl
X29ubHksCisJCQkJCSAgICAgICBuYWdsZV9hcHBsaWVzLCB1bl9zZW50KTsKKwkJCQlzY3RwX21p
c2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VORCwgc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSwKKwkJCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0LAorCQkJCQkgICAg
ICAgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dF9jb3VudCk7CisJCQl9CisJCQlpZiAocXVldWVfb25seV9mb3JfaW5pdCkKKwkJCQlxdWV1ZV9v
bmx5X2Zvcl9pbml0ID0gMDsKKwkJCWlmICgocXVldWVfb25seSA9PSAwKSAmJiAobmFnbGVfYXBw
bGllcyA9PSAwKSkgeworCQkJCS8qLQorCQkJCSAqIG5lZWQgdG8gc3RhcnQgY2h1bmsgb3V0cHV0
CisJCQkJICogYmVmb3JlIGJsb2NraW5nLi4gbm90ZSB0aGF0IGlmCisJCQkJICogYSBsb2NrIGlz
IGFscmVhZHkgYXBwbGllZCwgdGhlbgorCQkJCSAqIHRoZSBpbnB1dCB2aWEgdGhlIG5ldCBpcyBo
YXBwZW5pbmcKKwkJCQkgKiBhbmQgSSBkb24ndCBuZWVkIHRvIHN0YXJ0IG91dHB1dCA6LUQKKwkJ
CQkgKi8KKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJaWYgKFNDVFBfVENCX1RS
WUxPQ0soc3RjYikpIHsKKwkJCQkJCWhvbGRfdGNibG9jayA9IDE7CisJCQkJCQlzY3RwX2NodW5r
X291dHB1dChpbnAsCisJCQkJCQkJCSAgc3RjYiwKKwkJCQkJCQkJICBTQ1RQX09VVFBVVF9GUk9N
X1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlz
Y3RwX2NodW5rX291dHB1dChpbnAsCisJCQkJCQkJICBzdGNiLAorCQkJCQkJCSAgU0NUUF9PVVRQ
VVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOworCQkJCX0KKwkJCQlpZiAoaG9sZF90
Y2Jsb2NrID09IDEpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlob2xkX3Rj
YmxvY2sgPSAwOworCQkJCX0KKwkJCX0KKwkJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCk7CisJ
CQkvKi0KKwkJCSAqIFRoaXMgaXMgYSBiaXQgc3RyYW5nZSwgYnV0IEkgdGhpbmsgaXQgd2lsbAor
CQkJICogd29yay4gVGhlIHRvdGFsX291dHB1dF9xdWV1ZV9zaXplIGlzIGxvY2tlZCBhbmQKKwkJ
CSAqIHByb3RlY3RlZCBieSB0aGUgVENCX0xPQ0ssIHdoaWNoIHdlIGp1c3QgcmVsZWFzZWQuCisJ
CQkgKiBUaGVyZSBpcyBhIHJhY2UgdGhhdCBjYW4gb2NjdXIgYmV0d2VlbiByZWxlYXNpbmcgaXQK
KwkJCSAqIGFib3ZlLCBhbmQgbWUgZ2V0dGluZyB0aGUgc29ja2V0IGxvY2ssIHdoZXJlIHNhY2tz
CisJCQkgKiBjb21lIGluIGJ1dCB3ZSBoYXZlIG5vdCBwdXQgdGhlIFNCX1dBSVQgb24gdGhlCisJ
CQkgKiBzb19zbmQgYnVmZmVyIHRvIGdldCB0aGUgd2FrZXVwLiBBZnRlciB0aGUgTE9DSworCQkJ
ICogaXMgYXBwbGllZCB0aGUgc2Fja19wcm9jZXNzaW5nIHdpbGwgYWxzbyBuZWVkIHRvCisJCQkg
KiBMT0NLIHRoZSBzby0+c29fc25kIHRvIGRvIHRoZSBhY3R1YWwgc293d2FrZXVwKCkuIFNvCisJ
CQkgKiBvbmNlIHdlIGhhdmUgdGhlIHNvY2tldCBidWZmZXIgbG9jayBpZiB3ZSByZWNoZWNrIHRo
ZQorCQkJICogc2l6ZSB3ZSBLTk9XIHdlIHdpbGwgZ2V0IHRvIHNsZWVwIHNhZmVseSB3aXRoIHRo
ZQorCQkJICogd2FrZXVwIGZsYWcgaW4gcGxhY2UuCisJCQkgKi8KKwkJCWlucXVldWVfYnl0ZXMg
PSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtz
X29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJCQlpZiAo
U0NUUF9TQl9MSU1JVF9TTkQoc28pIDw9IChpbnF1ZXVlX2J5dGVzICsKKwkJCQkJCSAgICAgIG1p
bihTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSwgU0NUUF9TQl9MSU1J
VF9TTkQoc28pKSkpIHsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
KyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxP
Q0tfTE9HX0lOVE9fQkxLLAorCQkJCQkJICAgICAgIGFzb2MsIHVpby0+dWlvX3Jlc2lkKTsKKyNl
bHNlCisJCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX0lOVE9fQkxLLAorCQkJCQkJ
ICAgICAgIGFzb2MsIHVpb19yZXNpZCh1aW8pKTsKKyNlbmRpZgorI2Vsc2UKKwkJCQkJc2N0cF9s
b2dfYmxvY2soU0NUUF9CTE9DS19MT0dfSU5UT19CTEssCisJCQkJCQkgICAgICAgYXNvYywgKHNp
emVfdCl1aW8tPnVpb19yZXNpZCk7CisjZW5kaWYKKwkJCQl9CisJCQkJYmUuZXJyb3IgPSAwOwor
I2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19XaW5kb3dzX18pCisJCQkJc3Rj
Yi0+YmxvY2tfZW50cnkgPSAmYmU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJ
CQlzYnVubG9jaygmc28tPnNvX3NuZCwgMSk7CisjZW5kaWYKKwkJCQllcnJvciA9IHNid2FpdCgm
c28tPnNvX3NuZCk7CisJCQkJc3RjYi0+YmxvY2tfZW50cnkgPSBOVUxMOworCisJCQkJaWYgKGVy
cm9yIHx8IHNvLT5zb19lcnJvciB8fCBiZS5lcnJvcikgeworCQkJCQlpZiAoZXJyb3IgPT0gMCkg
eworCQkJCQkJaWYgKHNvLT5zb19lcnJvcikKKwkJCQkJCQllcnJvciA9IHNvLT5zb19lcnJvcjsK
KwkJCQkJCWlmIChiZS5lcnJvcikgeworCQkJCQkJCWVycm9yID0gYmUuZXJyb3I7CisJCQkJCQl9
CisJCQkJCX0KKwkJCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOworCQkJCQlnb3RvIG91
dF91bmxvY2tlZDsKKwkJCQl9CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJCQllcnJvciA9
IHNibG9jaygmc28tPnNvX3NuZCwgU0JMT0NLV0FJVChmbGFncykpOworI2VuZGlmCisJCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX09VVE9GX0JMSywK
KwkJCQkJCSAgICAgICBhc29jLCBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsK
KwkJCQl9CisJCQl9CisJCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3NuZCk7CisJCQlpZiAoc3Rj
Yi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlnb3Rv
IG91dF91bmxvY2tlZDsKKwkJCX0KKwkJfQorCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJ
CWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewor
CQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJ
fQorCQlpZiAoc3ApIHsKKwkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlID09IDApIHsKKwkJCQlz
dHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMTsKKwkJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9z
dXBwb3J0ZWQgPT0gMCkgeworCQkJCQlhc29jLT5zdHJlYW1fbG9ja2VkID0gMTsKKwkJCQkJYXNv
Yy0+c3RyZWFtX2xvY2tlZF9vbiAgPSBzcmN2LT5zaW5mb19zdHJlYW07CisJCQkJfQorCQkJfSBl
bHNlIHsKKwkJCQlzcC0+c2VuZGVyX2FsbF9kb25lID0gMTsKKwkJCQlzdHJtLT5sYXN0X21zZ19p
bmNvbXBsZXRlID0gMDsKKwkJCQlhc29jLT5zdHJlYW1fbG9ja2VkID0gMDsKKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCVNDVFBfUFJJTlRGKCJIdWggbm8gc3AgVFNOSD9cbiIpOworCQkJc3RybS0+bGFz
dF9tc2dfaW5jb21wbGV0ZSA9IDA7CisJCQlhc29jLT5zdHJlYW1fbG9ja2VkID0gMDsKKwkJfQor
CQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNp
ZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCWlmICh1aW8tPnVpb19yZXNpZCA9PSAwKSB7Cisj
ZWxzZQorCQlpZiAodWlvX3Jlc2lkKHVpbykgPT0gMCkgeworI2VuZGlmCisjZWxzZQorCQlpZiAo
dWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2VuZGlmCisJCQlnb3RfYWxsX29mX3RoZV9zZW5kID0g
MTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlIHNlbmQgaW4gYSAwLCBzaW5jZSB3ZSBkbyBOT1Qg
aGF2ZSBhbnkgbG9ja3MgKi8KKwkJZXJyb3IgPSBzY3RwX21zZ19hcHBlbmQoc3RjYiwgbmV0LCB0
b3AsIHNyY3YsIDApOworCQl0b3AgPSBOVUxMOworCQlpZiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBT
Q1RQX0VPRikgeworCQkJLyoKKwkJCSAqIFRoaXMgc2hvdWxkIG9ubHkgaGFwcGVuIGZvciBQYW5k
YSBmb3IgdGhlIG1idWYKKwkJCSAqIHNlbmQgY2FzZSwgd2hpY2ggZG9lcyBOT1QgeWV0IHN1cHBv
cnQgRUVPUiBtb2RlLgorCQkJICogVGh1cywgd2UgY2FuIGp1c3Qgc2V0IHRoaXMgZmxhZyB0byBk
byB0aGUgcHJvcGVyCisJCQkgKiBFT0YgaGFuZGxpbmcuCisJCQkgKi8KKwkJCWdvdF9hbGxfb2Zf
dGhlX3NlbmQgPSAxOworCQl9CisJfQorCWlmIChlcnJvcikgeworCQlnb3RvIG91dDsKKwl9Citk
YXRhbGVzc19lb2Y6CisJLyogRU9GIHRoaW5nID8gKi8KKwlpZiAoKHNyY3YtPnNpbmZvX2ZsYWdz
ICYgU0NUUF9FT0YpICYmCisJICAgIChnb3RfYWxsX29mX3RoZV9zZW5kID09IDEpKSB7CisJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfZW9mKTsKKwkJZXJyb3IgPSAwOworCQlpZiAo
aG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlob2xkX3Rj
YmxvY2sgPSAxOworCQl9CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYK
KwkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgorCQkgICAgc2N0cF9pc190
aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX0xPQ0tFRCkgPT0gMCkgeworCQkJaWYgKCgq
YXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2Is
IGFzb2MpKSB7CisJCQkJZ290byBhYm9ydF9hbnl3YXk7CisJCQl9CisJCQkvKiB0aGVyZSBpcyBu
b3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJJ20gZG9uZS4uLiAqLworCQkJaWYgKChTQ1RQX0dF
VF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpICYmCisJCQkgICAgKFND
VFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJ
CQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NF
TlQpKSB7CisJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKworCQkJCS8qIG9ubHkgc2VuZCBT
SFVURE9XTiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCisJCQkJaWYgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMy
KHNjdHBzX2N1cnJlc3RhYik7CisJCQkJfQorCQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBf
U1RBVEVfU0hVVERPV05fU0VOVCk7CisJCQkJU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOworCQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRk
b3duKHN0Y2IpOworCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJCQluZXRwID0g
c3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0cCA9IHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCQl9CisJCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0
Y2IsIG5ldHApOworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCSAgICAgICAgICAgICAgICAgbmV0cCk7CisJCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCQkgICAgICAgICAgICAgICAgIGFzb2MtPnByaW1hcnlfZGVzdGluYXRp
b24pOworCQkJfQorCQl9IGVsc2UgeworCQkJLyotCisJCQkgKiB3ZSBzdGlsbCBnb3QgKG9yIGp1
c3QgZ290KSBkYXRhIHRvIHNlbmQsIHNvIHNldAorCQkJICogU0hVVERPV05fUEVORElORworCQkJ
ICovCisJCQkvKi0KKwkJCSAqIFhYWCBzb2NrZXRzIGRyYWZ0IHNheXMgdGhhdCBTQ1RQX0VPRiBz
aG91bGQgYmUKKwkJCSAqIHNlbnQgd2l0aCBubyBkYXRhLiAgY3VycmVudGx5LCB3ZSB3aWxsIGFs
bG93IHVzZXIKKwkJCSAqIGRhdGEgdG8gYmUgc2VudCBmaXJzdCBhbmQgbW92ZSB0bworCQkJICog
U0hVVERPV04tUEVORElORworCQkJICovCisJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9
IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNv
YykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJCSAgICAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKKwkJCQlpZiAo
aG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaG9s
ZF90Y2Jsb2NrID0gMTsKKwkJCQl9CisJCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBf
c3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJCQkJCWFzb2MtPnN0
YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKKwkJCQl9CisJCQkJYXNvYy0+c3Rh
dGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOworCQkJCWlmIChUQUlMUV9FTVBUWSgm
YXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVl
dWUpICYmCisJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVG
VCkpIHsKKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKKworCQkJCWFib3J0X2FueXdheToKKwkJCQkJaWYgKGZyZWVfY250X2FwcGxp
ZWQpIHsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJ
CQkJZnJlZV9jbnRfYXBwbGllZCA9IDA7CisJCQkJCX0KKwkJCQkJc25wcmludGYobXNnLCBzaXpl
b2YobXNnKSwKKwkJCQkJICAgICAgICAgIiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9f
LCBfX2Z1bmNfXyk7CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtc2cpOworCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgb3BfZXJyLCBTQ1RQX1NP
X0xPQ0tFRCk7CisJCQkJCS8qIG5vdyByZWxvY2sgdGhlIHN0Y2Igc28gZXZlcnl0aGluZyBpcyBz
YW5lICovCisJCQkJCWhvbGRfdGNibG9jayA9IDA7CisJCQkJCXN0Y2IgPSBOVUxMOworCQkJCQln
b3RvIG91dDsKKwkJCQl9CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hV
VERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkgICAgICAgICAgICAgICAgIGFz
b2MtPnByaW1hcnlfZGVzdGluYXRpb24pOworCQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19OT0RFTEFZKTsKKwkJCX0KKwkJfQorCX0KK3NraXBfb3V0X2VvZjoKKwlpZiAo
IVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJc29tZV9v
bl9jb250cm9sID0gMTsKKwl9CisJaWYgKHF1ZXVlX29ubHlfZm9yX2luaXQpIHsKKwkJaWYgKGhv
bGRfdGNibG9jayA9PSAwKSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJaG9sZF90Y2Js
b2NrID0gMTsKKwkJfQorCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBf
U1RBVEVfT1BFTikgeworCQkJLyogYSBjb2xsaXNpb24gdG9vayB1cyBmb3J3YXJkPyAqLworCQkJ
cXVldWVfb25seSA9IDA7CisJCX0gZWxzZSB7CisJCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBz
dGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NU
UF9TVEFURV9DT09LSUVfV0FJVCk7CisJCQlxdWV1ZV9vbmx5ID0gMTsKKwkJfQorCX0KKwlpZiAo
KG5ldC0+ZmxpZ2h0X3NpemUgPiBuZXQtPmN3bmQpICYmCisJICAgIChzdGNiLT5hc29jLnNjdHBf
Y210X29uX29mZiA9PSAwKSkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kX2N3bmRfYXZv
aWQpOworCQlxdWV1ZV9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGFzb2MtPmlmcF9oYWRfZW5vYnVm
KSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2lmbm9tZW1xdWV1ZWQpOworCQlpZiAobmV0LT5m
bGlnaHRfc2l6ZSA+ICgyICogbmV0LT5tdHUpKSB7CisJCQlxdWV1ZV9vbmx5ID0gMTsKKwkJfQor
CQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJfQorCXVuX3NlbnQgPSBzdGNiLT5hc29jLnRv
dGFsX291dHB1dF9xdWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisJaWYgKChz
Y3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpICYmCisJICAg
IChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApICYmCisJICAgIChzdGNiLT5hc29jLnN0cmVh
bV9xdWV1ZV9jbnQgPCBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSAmJgorCSAgICAodW5fc2VudCA8
IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgewor
CQkvKi0KKwkJICogT2ssIE5hZ2xlIGlzIHNldCBvbiBhbmQgd2UgaGF2ZSBkYXRhIG91dHN0YW5k
aW5nLgorCQkgKiBEb24ndCBzZW5kIGFueXRoaW5nIGFuZCBsZXQgU0FDS3MgZHJpdmUgb3V0IHRo
ZQorCQkgKiBkYXRhIHVubGVzcyB3ZW4gaGF2ZSBhICJmdWxsIiBzZWdtZW50IHRvIHNlbmQuCisJ
CSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9O
QUdMRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RjYiwgU0NU
UF9OQUdMRV9BUFBMSUVEKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19uYWdsZXF1ZXVl
ZCk7CisJCW5hZ2xlX2FwcGxpZXMgPSAxOworCX0gZWxzZSB7CisJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX05BR0xFX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKQor
CQkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfU0tJUFBFRCk7CisJCX0K
KwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVzZW50KTsKKwkJbmFnbGVfYXBwbGllcyA9IDA7
CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JM
S19MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VO
RCwgcXVldWVfb25seV9mb3JfaW5pdCwgcXVldWVfb25seSwKKwkJICAgICAgICAgICAgICAgbmFn
bGVfYXBwbGllcywgdW5fc2VudCk7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfQ1dORExPR19QUkVT
RU5ELCBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplLAorCQkgICAgICAgICAgICAg
ICBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwKKwkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5j
aHVua3Nfb25fb3V0X3F1ZXVlLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCk7CisJfQor
CWlmICgocXVldWVfb25seSA9PSAwKSAmJiAobmFnbGVfYXBwbGllcyA9PSAwKSAmJiAoc3RjYi0+
YXNvYy5wZWVyc19yd25kICYmIHVuX3NlbnQpKSB7CisJCS8qIHdlIGNhbiBhdHRlbXB0IHRvIHNl
bmQgdG9vLiAqLworCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCS8qIElmIHRoZXJlIGlz
IGFjdGl2aXR5IHJlY3YnaW5nIHNhY2tzIG5vIG5lZWQgdG8gc2VuZCAqLworCQkJaWYgKFNDVFBf
VENCX1RSWUxPQ0soc3RjYikpIHsKKwkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFND
VFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQlob2xkX3RjYmxv
Y2sgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7CisJCX0KKwl9IGVs
c2UgaWYgKChxdWV1ZV9vbmx5ID09IDApICYmCisJICAgICAgICAgICAoc3RjYi0+YXNvYy5wZWVy
c19yd25kID09IDApICYmCisJICAgICAgICAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPT0g
MCkpIHsKKwkJLyogV2UgZ2V0IHRvIGhhdmUgYSBwcm9iZSBvdXRzdGFuZGluZyAqLworCQlpZiAo
aG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCWhvbGRfdGNibG9jayA9IDE7CisJCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQl9CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQ
VVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOworCX0gZWxzZSBpZiAoc29tZV9vbl9j
b250cm9sKSB7CisJCWludCBudW1fb3V0LCByZWFzb24sIGZyYWdfcG9pbnQ7CisKKwkJLyogSGVy
ZSB3ZSBkbyBjb250cm9sIG9ubHkgKi8KKwkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7CisJCQlo
b2xkX3RjYmxvY2sgPSAxOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJfQorCQlmcmFnX3Bv
aW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7CisJCSh2b2lkKXNj
dHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29jLCAmbnVtX291dCwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWFzb24sIDEsIDEsICZub3csICZub3dfZmls
bGVkLCBmcmFnX3BvaW50LCBTQ1RQX1NPX0xPQ0tFRCk7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQxLCAiVVNSIFNlbmQgY29tcGxldGUgcW86JWQgcHJ3OiVkIHVuc2VudDolZCB0Zjol
ZCBjb29xOiVkIHRvcXM6JWQgZXJyOiVkXG4iLAorCSAgICAgICAgcXVldWVfb25seSwgc3RjYi0+
YXNvYy5wZWVyc19yd25kLCB1bl9zZW50LAorCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwgc3Rj
Yi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLAorCSAgICAgICAgc3RjYi0+YXNvYy50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSwgZXJyb3IpOworCitvdXQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJc2J1bmxvY2soJnNvLT5zb19zbmQsIDEpOworI2VuZGlmCitvdXRfdW5sb2NrZWQ6CisKKwlp
ZiAobG9jYWxfc29yZXN2ICYmIHN0Y2IpIHsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5zYl9zZW5kX3Jlc3YsIHNuZGxlbik7CisJfQorCWlmIChjcmVhdGVfbG9ja19hcHBsaWVk
KSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQorCWlmICgoc3RjYikgJiYg
aG9sZF90Y2Jsb2NrKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9CisJaWYgKHN0Y2Ig
JiYgZnJlZV9jbnRfYXBwbGllZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIC0xKTsKKwl9CisjaWZkZWYgSU5WQVJJQU5UUworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJaWYgKHN0Y2IpIHsKKwkJaWYgKG10eF9vd25lZCgmc3RjYi0+dGNiX210eCkpIHsKKwkJCXBh
bmljKCJMZWF2aW5nIHdpdGggdGNiIG10eCBvd25lZD8iKTsKKwkJfQorCQlpZiAobXR4X293bmVk
KCZzdGNiLT50Y2Jfc2VuZF9tdHgpKSB7CisJCQlwYW5pYygiTGVhdmluZyB3aXRoIHRjYiBzZW5k
IG10eCBvd25lZD8iKTsKKwkJfQorCX0KKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgX19QYW5kYV9f
CisJLyoKKwkgKiBIYW5kbGUgdGhlIEVBR0FJTi9FTk9NRU0gY2FzZXMgdG8gcmVhdHRhY2ggdGhl
IHBhayBoZWFkZXIKKwkgKiB0byBwYXJ0aWNsZSB3aGVuIHBhayBpcyBwYXNzZWQgaW4sIHNvIHRo
YXQgY2FsbGVyCisJICogY2FuIHRyeSBhZ2FpbiB3aXRoIHRoaXMgcGFrCisJICoKKwkgKiBOT1RF
OiBGb3Igb3RoZXIgY2FzZXMsIGluY2x1ZGluZyBzdWNjZXNzIGNhc2UsCisJICogd2Ugc2ltcGx5
IHdhbnQgdG8gcmV0dXJuIHRoZSBoZWFkZXIgYmFjayB0byBmcmVlCisJICogcG9vbAorCSAqLwor
CWlmICh0b3ApIHsKKwkJaWYgKChlcnJvciA9PSBFQUdBSU4pIHx8IChlcnJvciA9PSBFTk9NRU0p
KSB7CisJCQlTQ1RQX0FUVEFDSF9DSEFJTihpX3BhaywgdG9wLCBzbmRsZW4pOworCQkJdG9wID0g
TlVMTDsKKwkJfSBlbHNlIHsKKwkJCSh2b2lkKVNDVFBfUkVMRUFTRV9IRUFERVIoaV9wYWspOwor
CQl9CisJfSBlbHNlIHsKKwkJLyogVGhpcyBpcyB0byBoYW5kbGUgY2FzZXMgd2hlbiB0b3AgaGFz
CisJCSAqIGJlZW4gcmVzZXQgdG8gTlVMTCBidXQgcGFrIG1pZ2h0IG5vdAorCQkgKiBiZSBmcmVl
ZAorCQkgKi8KKwkJaWYgKGlfcGFrKSB7CisJCQkodm9pZClTQ1RQX1JFTEVBU0VfSEVBREVSKGlf
cGFrKTsKKwkJfQorCX0KKyNlbmRpZgorCWlmICh0b3ApIHsKKwkJc2N0cF9tX2ZyZWVtKHRvcCk7
CisJfQorCWlmIChjb250cm9sKSB7CisJCXNjdHBfbV9mcmVlbShjb250cm9sKTsKKwl9CisJcmV0
dXJuIChlcnJvcik7Cit9CisKKworLyoKKyAqIGdlbmVyYXRlIGFuIEFVVEhlbnRpY2F0aW9uIGNo
dW5rLCBpZiByZXF1aXJlZAorICovCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9hdXRoX2NodW5r
KHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqKm1fZW5kLAorICAgIHN0cnVjdCBzY3RwX2F1
dGhfY2h1bmsgKiphdXRoX3JldCwgdWludDMyX3QgKiBvZmZzZXQsCisgICAgc3RydWN0IHNjdHBf
dGNiICpzdGNiLCB1aW50OF90IGNodW5rKQoreworCXN0cnVjdCBtYnVmICptX2F1dGg7CisJc3Ry
dWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKKwlpbnQgY2h1bmtfbGVuOworCXN0cnVjdCBtYnVm
ICpjbjsKKworCWlmICgobV9lbmQgPT0gTlVMTCkgfHwgKGF1dGhfcmV0ID09IE5VTEwpIHx8IChv
ZmZzZXQgPT0gTlVMTCkgfHwKKwkgICAgKHN0Y2IgPT0gTlVMTCkpCisJCXJldHVybiAobSk7CisK
KwlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAobSk7CisJ
fQorCS8qIGRvZXMgdGhlIHJlcXVlc3RlZCBjaHVuayByZXF1aXJlIGF1dGg/ICovCisJaWYgKCFz
Y3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2h1bmssIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2No
dW5rcykpIHsKKwkJcmV0dXJuIChtKTsKKwl9CisJbV9hdXRoID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKHNpemVvZigqYXV0aCksIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCWlmIChtX2F1
dGggPT0gTlVMTCkgeworCQkvKiBubyBtYnVmJ3MgKi8KKwkJcmV0dXJuIChtKTsKKwl9CisJLyog
cmVzZXJ2ZSBzb21lIHNwYWNlIGlmIHRoaXMgd2lsbCBiZSB0aGUgZmlyc3QgbWJ1ZiAqLworCWlm
IChtID09IE5VTEwpCisJCVNDVFBfQlVGX1JFU1ZfVUYobV9hdXRoLCBTQ1RQX01JTl9PVkVSSEVB
RCk7CisJLyogZmlsbCBpbiB0aGUgQVVUSCBjaHVuayBkZXRhaWxzICovCisJYXV0aCA9IG10b2Qo
bV9hdXRoLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopOworCW1lbXNldChhdXRoLCAwLCBzaXpl
b2YoKmF1dGgpKTsKKwlhdXRoLT5jaC5jaHVua190eXBlID0gU0NUUF9BVVRIRU5USUNBVElPTjsK
KwlhdXRoLT5jaC5jaHVua19mbGFncyA9IDA7CisJY2h1bmtfbGVuID0gc2l6ZW9mKCphdXRoKSAr
CisJICAgIHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7
CisJYXV0aC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKKwlhdXRoLT5obWFj
X2lkID0gaHRvbnMoc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCS8qIGtleSBpZCBhbmQgaG1h
YyBkaWdlc3Qgd2lsbCBiZSBjb21wdXRlZCBhbmQgZmlsbGVkIGluIHVwb24gc2VuZCAqLworCisJ
Lyogc2F2ZSB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBhdXRoIHdhcyBpbnNlcnRlZCBpbnRvIHRoZSBj
aGFpbiAqLworCSpvZmZzZXQgPSAwOworCWZvciAoY24gPSBtOyBjbjsgY24gPSBTQ1RQX0JVRl9O
RVhUKGNuKSkgeworCQkqb2Zmc2V0ICs9IFNDVFBfQlVGX0xFTihjbik7CisJfQorCisJLyogdXBk
YXRlIGxlbmd0aCBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGF1dGggY2h1bmsgKi8KKwlTQ1RQ
X0JVRl9MRU4obV9hdXRoKSA9IGNodW5rX2xlbjsKKwltID0gc2N0cF9jb3B5X21idWZjaGFpbiht
X2F1dGgsIG0sIG1fZW5kLCAxLCBjaHVua19sZW4sIDApOworCWlmIChhdXRoX3JldCAhPSBOVUxM
KQorCQkqYXV0aF9yZXQgPSBhdXRoOworCisJcmV0dXJuIChtKTsKK30KKworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZmRlZiBJTkVUNgoraW50Citz
Y3RwX3Y2c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNvY2thZGRyX2luNiAqc3JjNiwgc2N0cF9y
b3V0ZV90ICpybykKK3sKKwlzdHJ1Y3QgbmRfcHJlZml4ICpwZnggPSBOVUxMOworCXN0cnVjdCBu
ZF9wZnhyb3V0ZXIgKnBmeHJ0ciA9IE5VTEw7CisJc3RydWN0IHNvY2thZGRyX2luNiBndzY7CisK
KwlpZiAocm8gPT0gTlVMTCB8fCByby0+cm9fcnQgPT0gTlVMTCB8fCBzcmM2LT5zaW42X2ZhbWls
eSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuICgwKTsKKworCS8qIGdldCBwcmVmaXggZW50cnkgb2Yg
YWRkcmVzcyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJTkQ2X1JMT0NLKCk7CisjZW5k
aWYKKwlMSVNUX0ZPUkVBQ0gocGZ4LCAmTU9EVUxFX0dMT0JBTChuZF9wcmVmaXgpLCBuZHByX2Vu
dHJ5KSB7CisJCWlmIChwZngtPm5kcHJfc3RhdGVmbGFncyAmIE5EUFJGX0RFVEFDSEVEKQorCQkJ
Y29udGludWU7CisJCWlmIChJTjZfQVJFX01BU0tFRF9BRERSX0VRVUFMKCZwZngtPm5kcHJfcHJl
Zml4LnNpbjZfYWRkciwKKwkJICAgICZzcmM2LT5zaW42X2FkZHIsICZwZngtPm5kcHJfbWFzaykp
CisJCQlicmVhazsKKwl9CisJLyogbm8gcHJlZml4IGVudHJ5IGluIHRoZSBwcmVmaXggbGlzdCAq
LworCWlmIChwZnggPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCU5ENl9S
VU5MT0NLKCk7CisjZW5kaWYKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJObyBwcmVm
aXggZW50cnkgZm9yICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAoc3Ry
dWN0IHNvY2thZGRyICopc3JjNik7CisJCXJldHVybiAoMCk7CisJfQorCisJU0NUUERCRyhTQ1RQ
X0RFQlVHX09VVFBVVDIsICJ2NnNyY19tYXRjaF9uZXh0aG9wKCksIFByZWZpeCBlbnRyeSBpcyAi
KTsKKwlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAoc3RydWN0IHNvY2thZGRyICop
c3JjNik7CisKKwkvKiBzZWFyY2ggaW5zdGFsbGVkIGdhdGV3YXkgZnJvbSBwcmVmaXggZW50cnkg
Ki8KKwlMSVNUX0ZPUkVBQ0gocGZ4cnRyLCAmcGZ4LT5uZHByX2FkdnJ0cnMsIHBmcl9lbnRyeSkg
eworCQltZW1zZXQoJmd3NiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJZ3c2
LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlndzYuc2lu
Nl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJbWVtY3B5KCZn
dzYuc2luNl9hZGRyLCAmcGZ4cnRyLT5yb3V0ZXItPnJ0YWRkciwKKwkJICAgIHNpemVvZihzdHJ1
Y3QgaW42X2FkZHIpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJwcmVmaXggcm91
dGVyIGlzICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAoc3RydWN0IHNv
Y2thZGRyICopJmd3Nik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiaW5zdGFsbGVk
IHJvdXRlciBpcyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgcm8tPnJv
X3J0LT5ydF9nYXRld2F5KTsKKwkJaWYgKHNjdHBfY21wYWRkcigoc3RydWN0IHNvY2thZGRyICop
Jmd3Niwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJCQlORDZfUlVOTE9DSygpOworI2VuZGlmCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
MiwgInBmeHJvdXRlciBpcyBpbnN0YWxsZWRcbiIpOworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0K
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCU5ENl9SVU5MT0NLKCk7CisjZW5kaWYKKwlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInBmeHJvdXRlciBpcyBub3QgaW5zdGFsbGVkXG4iKTsK
KwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK2ludAorc2N0cF92NHNyY19tYXRjaF9uZXh0aG9w
KHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybykKK3sKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICptYXNrOworCXN0cnVjdCBpZmFkZHIgKmlmYTsK
KwlzdHJ1Y3QgaW5fYWRkciBzcmNuZXRhZGRyLCBnd25ldGFkZHI7CisKKwlpZiAocm8gPT0gTlVM
TCB8fCByby0+cm9fcnQgPT0gTlVMTCB8fAorCSAgICBzaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSAhPSBBRl9JTkVUKSB7CisJCXJldHVybiAoMCk7CisJfQorCWlmYSA9IChzdHJ1Y3QgaWZhZGRy
ICopc2lmYS0+aWZhOworCW1hc2sgPSAoc3RydWN0IHNvY2thZGRyX2luICopKGlmYS0+aWZhX25l
dG1hc2spOworCXNpbiA9ICZzaWZhLT5hZGRyZXNzLnNpbjsKKwlzcmNuZXRhZGRyLnNfYWRkciA9
IChzaW4tPnNpbl9hZGRyLnNfYWRkciAmIG1hc2stPnNpbl9hZGRyLnNfYWRkcik7CisJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJtYXRjaF9uZXh0aG9wNDogc3JjIGFkZHJlc3MgaXMgIik7
CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgJnNpZmEtPmFkZHJlc3Muc2EpOwor
CVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAibmV0d29yayBhZGRyZXNzIGlzICV4XG4iLCBz
cmNuZXRhZGRyLnNfYWRkcik7CisKKwlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopcm8tPnJv
X3J0LT5ydF9nYXRld2F5OworCWd3bmV0YWRkci5zX2FkZHIgPSAoc2luLT5zaW5fYWRkci5zX2Fk
ZHIgJiBtYXNrLT5zaW5fYWRkci5zX2FkZHIpOworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAibWF0Y2hfbmV4dGhvcDQ6IG5leHRob3AgaXMgIik7CisJU0NUUERCR19BRERSKFNDVFBfREVC
VUdfT1VUUFVUMiwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KTsKKwlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgIm5ldHdvcmsgYWRkcmVzcyBpcyAleFxuIiwgZ3duZXRhZGRyLnNfYWRkcik7CisJ
aWYgKHNyY25ldGFkZHIuc19hZGRyID09IGd3bmV0YWRkci5zX2FkZHIpIHsKKwkJcmV0dXJuICgx
KTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorLyogVE9ETyBfX1VzZXJzcGFjZV9fIHZlcnNpb25zIG9mIHNjdHBfdlhzcmNfbWF0Y2hf
bmV4dGhvcCgpLiAqLworaW50CitzY3RwX3Y2c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNvY2th
ZGRyX2luNiAqc3JjNiwgc2N0cF9yb3V0ZV90ICpybykKK3sKKyAgICByZXR1cm4gKDApOworfQor
aW50CitzY3RwX3Y0c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNjdHBfaWZhICpzaWZhLCBzY3Rw
X3JvdXRlX3QgKnJvKQoreworICAgIHJldHVybiAoMCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4
YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi41OTdkZGMzYmYzYTVjYjRlNGI4OTAwOTYzZThkYWE4OGRk
ZTg1OTAzIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRw
dXQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaApAQCAt
MCwwICsxLDI3MyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xh
dXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
CisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX291dHB1dC5oIDMyMzg2MSAyMDE3LTA5LTIx
IDExOjU2OjMxWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9P
VVRQVVRfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9PVVRQVVRfSF8KKworI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9oZWFkZXIuaD4KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2FkZHJlc3Nlc190b19p
X2lhKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpzY29wZSwK
KwkJCSAgIHN0cnVjdCBtYnVmICptX2F0LAorCQkJICAgaW50IGNudF9pbml0c190bywKKwkJCSAg
IHVpbnQxNl90ICpwYWRkaW5nX2xlbiwgdWludDE2X3QgKmNodW5rX2xlbik7CisKKworaW50IHNj
dHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEg
Kik7CisKKworaW50CitzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc3RydWN0IHNjdHBfaWZhICpp
ZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc2NvcGluZyAqc2NvcGUs
CisJCQkgaW50IGRvX3VwZGF0ZSk7CisKK2ludAorc2N0cF9pc19hZGRyX2luX2VwKHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKTsKKworc3RydWN0IHNjdHBfaWZh
ICoKK3NjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
CisJCQkgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICAgICBzY3RwX3JvdXRlX3Qg
KnJvLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCQkgICAgICBpbnQgbm9uX2Fzb2NfYWRkcl9v
aywgdWludDMyX3QgdnJmX2lkKTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHBfdjZzcmNf
bWF0Y2hfbmV4dGhvcChzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmM2LCBzY3RwX3JvdXRlX3QgKnJv
KTsKK2ludAorc2N0cF92NHNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwg
c2N0cF9yb3V0ZV90ICpybyk7CisjZW5kaWYKKwordm9pZCBzY3RwX3NlbmRfaW5pdGlhdGUoc3Ry
dWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosIGludAorI2lmICFkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVT
RUQKKyNlbmRpZgorICAgICk7CisKK3ZvaWQKK3NjdHBfc2VuZF9pbml0aWF0ZV9hY2soc3RydWN0
IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IG1idWYgKiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIg
Kiwgc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LAorI2VuZGlmCisgICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKK3N0cnVjdCBtYnVmICoKK3Nj
dHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoc3RydWN0IG1idWYgKiwgaW50LCBp
bnQgKiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqLCBpbnQgKik7Cit2b2lkIHNj
dHBfcXVldWVfb3BfZXJyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKKworaW50
CitzY3RwX3NlbmRfY29va2llX2VjaG8oc3RydWN0IG1idWYgKiwgaW50LCBzdHJ1Y3Qgc2N0cF90
Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lkIHNjdHBfc2VuZF9jb29raWVf
YWNrKHN0cnVjdCBzY3RwX3RjYiAqKTsKKwordm9pZAorc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2so
c3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBtYnVmICosIGludCwgaW50LAorICAgIHN0cnVjdCBz
Y3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfcmVtb3ZlX2Zyb21fd2hlZWwoc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorCQkJCQkgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCQkJ
ICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgaW50IGhvbGRzX2xvY2spOworCisKK3Zv
aWQgc2N0cF9zZW5kX3NodXRkb3duKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICopOworCit2b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RydWN0IHNjdHBfdGNiICosIHN0
cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQgc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0
cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCk7CisKK3ZvaWQgc2N0cF9z
ZW5kX3NodXRkb3duX2NvbXBsZXRlMihzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRy
ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKK3ZvaWQgc2N0cF9zZW5k
X2FzY29uZihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQgYWRkcl9s
b2NrZWQpOworCit2b2lkIHNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0cnVjdCBzY3RwX3RjYiAqKTsK
KworaW50IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfdG9zc19vbGRfY29va2llcyhzdHJ1Y3Qgc2N0
cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CisKK3ZvaWQgc2N0cF90b3NzX29s
ZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICopOworCit2b2lkIHNjdHBfZml4X2Vjbl9lY2hvKHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfbW92ZV9jaHVua3NfZnJvbV9u
ZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCisKKyNk
ZWZpbmUgU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpICgoc3RjYiktPmFzb2MuaWRhdGFf
c3VwcG9ydGVkID8gXAorCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspIDogXAor
CQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpCisKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK2ludAorc2N0cF9vdXRwdXQo
c3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHNvY2thZGRyICosCisg
ICAgc3RydWN0IG1idWYgKiwgc3RydWN0IHRocmVhZCAqLCBpbnQpOworI2VsaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKK3NjdHBfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVm
ICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgIHN0cnVjdCBtYnVmICosIFBLVEhSRUFELCBpbnQp
OworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisvKiBzY3RwX291dHB1dCBpcyBj
YWxsZWQgYnUgc2N0cF9zZW5kbS4gTm90IHVzaW5nIHNjdHBfc2VuZG0gZm9yIF9fVXNlcnNwYWNl
X18gKi8KKyNlbmRpZgoraW50CitzY3RwX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLAorI2lm
IGRlZmluZWQoX19QYW5kYV9fKQorICAgIHBha2hhbmRsZV90eXBlLAorI2Vsc2UKKyAgICBzdHJ1
Y3QgbWJ1ZiAqLAorI2VuZGlmCisgICAgc3RydWN0IHNvY2thZGRyICosCisjaWYgZGVmaW5lZChf
X1BhbmRhX18pCisgICAgcGFraGFuZGxlX3R5cGUsCisjZWxzZQorICAgIHN0cnVjdCBtYnVmICos
CisjZW5kaWYKKyAgICBzdHJ1Y3QgcHJvYyAqLCBpbnQpOworI2VuZGlmCisKK3ZvaWQgc2N0cF9j
aHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosIGludCwg
aW50CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKTsKK3ZvaWQgc2N0cF9zZW5kX2Fi
b3J0X3RjYihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYgKiwgaW50CisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQ
X1VOVVNFRAorI2VuZGlmCisgICAgKTsKKwordm9pZCBzZW5kX2ZvcndhcmRfdHNuKHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKKwordm9pZCBzY3RwX3NlbmRf
c2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50KTsKKwordm9pZCBzY3RwX3NlbmRfaGIoc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50KTsKKwordm9pZCBzY3RwX3NlbmRf
ZWNuX2VjaG8oc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgdWludDMyX3Qp
OworCisKK3ZvaWQKK3NjdHBfc2VuZF9wYWNrZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKiwg
c3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgbWJ1ZiAqLAorICAgIGludCwgaW50LCBpbnQpOwor
CisKKwordm9pZCBzY3RwX3NlbmRfY3dyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICosIHVpbnQzMl90LCB1aW50OF90KTsKKworCit2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVz
ZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwgdWludDMyX3QsIHVpbnQzMl90KTsK
Kwordm9pZAorc2N0cF9zZW5kX2RlZmVycmVkX3Jlc2V0X3Jlc3BvbnNlKHN0cnVjdCBzY3RwX3Rj
YiAqLAorCQkJCSAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QgKiwKKwkJCQkgIGludCk7
CisKK3ZvaWQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNuKHN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1
aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKK2ludAorc2N0cF9zZW5kX3N0cmVhbV9yZXNl
dF9vdXRfaWZfcG9zc2libGUoc3RydWN0IHNjdHBfdGNiICosIGludCk7CisKK2ludAorc2N0cF9z
ZW5kX3N0cl9yZXNldF9yZXEoc3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90ICwgdWludDE2X3Qg
KiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQ4X3QsIHVp
bnQxNl90LCB1aW50MTZfdCwgdWludDhfdCk7CisKK3ZvaWQKK3NjdHBfc2VuZF9hYm9ydChzdHJ1
Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCB1aW50MzJfdCwgc3RydWN0IG1idWYgKiwK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQz
Ml90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZf
dCk7CisKK3ZvaWQgc2N0cF9zZW5kX29wZXJyX3RvKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qg
c29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHVp
bnQzMl90LCBzdHJ1Y3QgbWJ1ZiAqLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50MzJfdCwgdWludDE2X3QsCisjZW5kaWYKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKKyNlbmRpZiAvKiBf
S0VSTkVMIHx8IF9fVXNlcnNwYWNlX18gKi8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywK
KyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IHVpbyAqdWlvLAorI2lmZGVm
IF9fUGFuZGFfXworICAgIHBha2hhbmRsZV90eXBlIHRvcCwKKyAgICBwYWtoYW5kbGVfdHlwZSBj
b250cm9sLAorI2Vsc2UKKyAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLAorICAgIHN0cnVjdCBtYnVmICpj
b250cm9sLAorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5k
YV9fKQorICAgIGludCBmbGFncworI2Vsc2UKKyAgICBpbnQgZmxhZ3MsCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisgICAgc3RydWN0IHRo
cmVhZCAqcAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKyAgICBQS1RIUkVBRCBwCisjZWxz
ZQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKiBwcm9jIGlzIGEgZHVtbXkgaW4g
X19Vc2Vyc3BhY2VfXyBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHNjdHBfbG93ZXJfc29zZW5k
ICovCisjZW5kaWYKKyAgICBzdHJ1Y3QgcHJvYyAqcAorI2VuZGlmCisjZW5kaWYKKyk7CisKKyNl
bmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3BjYi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKaW5kZXgg
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZjhkZDAyNDBhZjM1NWY1
NTBlZDFhZWY4YWEzOGY3ZTg3MTNmNmM4MiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfcGNiLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGNiLmMKQEAgLTAsMCArMSw4MjI4IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lz
Y28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAy
MDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEp
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICog
ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBT
eXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGNiLmMgMzM0NTMy
IDIwMTgtMDYtMDIgMTY6Mjg6MTBaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9vcy5oPgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL3Byb2Mu
aD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29u
Zi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfdGltZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMDAwMDAwCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2R0cmFjZV9kZWZpbmUuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQo
SU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElO
RVQ2CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgInVzZXJfaXA2X3Zhci5o
IgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CisjZW5kaWYKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL3NjaGVkLmg+CisjaW5jbHVk
ZSA8c3lzL3NtcC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDx1c2VyX3NvY2tldHZhci5oPgorI2lmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgor
I2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgQVBQTEVfRklMRV9OTyA0
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMTAwMAorVk5FVF9ERUZJTkUoc3RydWN0IHNjdHBfYmFzZV9pbmZvLCBzeXN0ZW1fYmFz
ZV9pbmZvKTsKKyNlbHNlCitzdHJ1Y3Qgc2N0cF9iYXNlX2luZm8gc3lzdGVtX2Jhc2VfaW5mbzsK
KyNlbmRpZgorCisvKiBGSVg6IHdlIGRvbid0IGhhbmRsZSBtdWx0aXBsZSBsaW5rIGxvY2FsIHNj
b3BlcyAqLworLyogInNjb3BlbGVzcyIgcmVwbGFjZW1lbnQgSU42X0FSRV9BRERSX0VRVUFMICov
CisjaWZkZWYgSU5FVDYKK2ludAorU0NUUDZfQVJFX0FERFJfRVFVQUwoc3RydWN0IHNvY2thZGRy
X2luNiAqYSwgc3RydWN0IHNvY2thZGRyX2luNiAqYikKK3sKKyNpZmRlZiBTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0IGluNl9hZGRyIHRtcF9h
LCB0bXBfYjsKKworCXRtcF9hID0gYS0+c2luNl9hZGRyOworI2lmIGRlZmluZWQoQVBQTEVfTEVP
UEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwlpZiAoaW42X2VtYmVkc2NvcGUo
JnRtcF9hLCBhLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisjZWxzZQorCWlmIChpbjZfZW1iZWRzY29w
ZSgmdG1wX2EsIGEsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApIHsKKyNlbmRpZgorCQlyZXR1cm4g
KDApOworCX0KKwl0bXBfYiA9IGItPnNpbjZfYWRkcjsKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJaWYgKGluNl9lbWJlZHNjb3BlKCZ0
bXBfYiwgYiwgTlVMTCwgTlVMTCkgIT0gMCkgeworI2Vsc2UKKwlpZiAoaW42X2VtYmVkc2NvcGUo
JnRtcF9iLCBiLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisjZW5kaWYKKwkJcmV0dXJuICgw
KTsKKwl9CisJcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9hLCAmdG1wX2IpKTsKKyNl
bGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCXN0cnVjdCBzb2NrYWRkcl9pbjYgdG1wX2EsIHRtcF9i
OworCisJbWVtY3B5KCZ0bXBfYSwgYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlp
ZiAoc2E2X2VtYmVkc2NvcGUoJnRtcF9hLCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkp
ICE9IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJbWVtY3B5KCZ0bXBfYiwgYiwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlpZiAoc2E2X2VtYmVkc2NvcGUoJnRtcF9iLCBNT0RVTEVf
R0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0
dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9hLnNpbjZfYWRkciwgJnRtcF9iLnNpbjZfYWRk
cikpOworI2Vsc2UKKwlzdHJ1Y3QgaW42X2FkZHIgdG1wX2EsIHRtcF9iOworCisJdG1wX2EgPSBh
LT5zaW42X2FkZHI7CisJaWYgKGluNl9lbWJlZHNjb3BlKCZ0bXBfYSwgYSkgIT0gMCkgeworCQly
ZXR1cm4gKDApOworCX0KKwl0bXBfYiA9IGItPnNpbjZfYWRkcjsKKwlpZiAoaW42X2VtYmVkc2Nv
cGUoJnRtcF9iLCBiKSAhPSAwKSB7CisJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAoSU42X0FS
RV9BRERSX0VRVUFMKCZ0bXBfYSwgJnRtcF9iKSk7CisjZW5kaWYKKyNlbHNlCisJcmV0dXJuIChJ
TjZfQVJFX0FERFJfRVFVQUwoJihhLT5zaW42X2FkZHIpLCAmKGItPnNpbjZfYWRkcikpKTsKKyNl
bmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCit9CisjZW5kaWYKKwordm9pZAorc2N0
cF9maWxsX3BjYmluZm8oc3RydWN0IHNjdHBfcGNiaW5mbyAqc3BjYikKK3sKKwkvKgorCSAqIFdl
IHJlYWxseSBkb24ndCBuZWVkIHRvIGxvY2sgdGhpcywgYnV0IEkgd2lsbCBqdXN0IGJlY2F1c2Ug
aXQKKwkgKiBkb2VzIG5vdCBodXJ0LgorCSAqLworCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwlz
cGNiLT5lcF9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9lcCk7CisJc3BjYi0+YXNv
Y19jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9hc29jKTsKKwlzcGNiLT5sYWRkcl9j
b3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkcik7CisJc3BjYi0+cmFkZHJfY291
bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpOworCXNwY2ItPmNoa19jb3VudCA9
IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVuayk7CisJc3BjYi0+cmVhZHFfY291bnQgPSBT
Q1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpOworCXNwY2ItPnN0cmVhbV9vcXVlID0gU0NU
UF9CQVNFX0lORk8oaXBpX2NvdW50X3N0cm1vcSk7CisJc3BjYi0+ZnJlZV9jaHVua3MgPSBTQ1RQ
X0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpOworCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwor
fQorCisvKi0KKyAqIEFkZHJlc3NlcyBhcmUgYWRkZWQgdG8gVlJGJ3MgKFZpcnR1YWwgUm91dGVy
J3MpLiBGb3IgQlNEIHdlCisgKiBoYXZlIG9ubHkgdGhlIGRlZmF1bHQgVlJGIDAuIFdlIG1haW50
YWluIGEgaGFzaCBsaXN0IG9mCisgKiBWUkYncy4gRWFjaCBWUkYgaGFzIGl0cyBvd24gbGlzdCBv
ZiBzY3RwX2lmbidzLiBFYWNoIG9mCisgKiB0aGVzZSBoYXMgYSBsaXN0IG9mIGFkZHJlc3Nlcy4g
V2hlbiB3ZSBhZGQgYSBuZXcgYWRkcmVzcworICogdG8gYSBWUkYgd2UgbG9va3VwIHRoZSBpZm4v
aWZuX2luZGV4LCBpZiB0aGUgaWZuIGRvZXMKKyAqIG5vdCBleGlzdCB3ZSBjcmVhdGUgaXQgYW5k
IGFkZCBpdCB0byB0aGUgbGlzdCBvZiBJRk4ncworICogd2l0aGluIHRoZSBWUkYuIE9uY2Ugd2Ug
aGF2ZSB0aGUgc2N0cF9pZm4sIHdlIGFkZCB0aGUKKyAqIGFkZHJlc3MgdG8gdGhlIGxpc3QuIFNv
IHdlIGxvb2sgc29tZXRoaW5nIGxpa2U6CisgKgorICogaGFzaC12cmYtdGFibGUKKyAqICAgdnJm
LT4gaWZuLT4gaWZuIC0+IGlmbgorICogICB2cmYgICAgfAorICogICAgLi4uICAgKy0taWZhLT4g
aWZhIC0+IGlmYQorICogICB2cmYKKyAqCisgKiBXZSBrZWVwIHRoZXNlIHNlcGFyYXRlIGxpc3Rz
IHNpbmNlIHRoZSBTQ1RQIHN1YnN5c3RlbSB3aWxsCisgKiBwb2ludCB0byB0aGVzZSBmcm9tIGl0
cyBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gbmV0cyBzdHJ1Y3R1cmUuCisgKiBXaGVuIGFuIGFk
ZHJlc3MgaXMgZGVsZXRlZCBpdCBkb2VzIG5vdCBoYXBwZW4gcmlnaHQgYXdheSBvbgorICogdGhl
IFNDVFAgc2lkZSwgaXQgZ2V0cyBzY2hlZHVsZWQuIFdoYXQgd2UgZG8gd2hlbiBhCisgKiBkZWxl
dGUgaGFwcGVucyBpcyBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbQorICogdGhl
IG1hc3RlciBsaXN0IGFuZCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LiBBcyBvdXIKKyAqIGFkZGlw
IGl0ZXJhdG9yIHdvcmtzIHRocm91Z2ggYW5kIGZyZWVzIHRoZSBzcmMgYWRkcmVzcworICogc2Vs
ZWN0aW9uIHBvaW50aW5nIHRvIHRoZSBzY3RwX2lmYSwgZXZlbnR1YWxseSB0aGUgcmVmY291bnQK
KyAqIHdpbGwgcmVhY2ggMCBhbmQgd2Ugd2lsbCBkZWxldGUgaXQuIE5vdGUgdGhhdCBpdCBpcyBh
c3N1bWVkCisgKiB0aGF0IGFueSBsb2NraW5nIG9uIHN5c3RlbSBsZXZlbCBpZm4vaWZhIGlzIGRv
bmUgYXQgdGhlCisgKiBjYWxsZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFuZCB0aGVzZSByb3V0aW5l
cyB3aWxsIG9ubHkKKyAqIGxvY2sgdGhlIFNDVFAgc3RydWN0dXJlcyBhcyB0aGV5IGFkZCBvciBk
ZWxldGUgdGhpbmdzLgorICoKKyAqIE90aGVyIG5vdGVzIG9uIFZSRiBjb25jZXB0cy4KKyAqICAt
IEFuIGVuZHBvaW50IGNhbiBiZSBpbiBtdWx0aXBsZSBWUkYncworICogIC0gQW4gYXNzb2NpYXRp
b24gbGl2ZXMgd2l0aGluIGEgVlJGIGFuZCBvbmx5IG9uZSBWUkYuCisgKiAgLSBBbnkgaW5jb21p
bmcgcGFja2V0IHdlIGNhbiBkZWR1Y2UgdGhlIFZSRiBmb3IgYnkKKyAqICAgIGxvb2tpbmcgYXQg
dGhlIG1idWYvcGFrIGluYm91bmQgKGZvciBCU0QgaXRzIFZSRj0wIDpEKQorICogIC0gQW55IGRv
d253YXJkIHNlbmQgY2FsbCBvciBjb25uZWN0IGNhbGwgbXVzdCBzdXBwbHkgdGhlCisgKiAgICBW
UkYgdmlhIGFuY2lsbGFyeSBkYXRhIG9yIHZpYSBzb21lIHNvcnQgb2Ygc2V0IGRlZmF1bHQKKyAq
ICAgIFZSRiBzb2NrZXQgb3B0aW9uIGNhbGwgKGFnYWluIGZvciBCU0Qgbm8gYnJhaW5lciBzaW5j
ZQorICogICAgdGhlIFZSRiBpcyBhbHdheXMgMCkuCisgKiAgLSBBbiBlbmRwb2ludCBtYXkgYWRk
IG11bHRpcGxlIFZSRidzIHRvIGl0LgorICogIC0gTGlzdGVuaW5nIHNvY2tldHMgY2FuIGFjY2Vw
dCBhc3NvY2lhdGlvbnMgaW4gYW55CisgKiAgICBvZiB0aGUgVlJGJ3MgdGhleSBhcmUgaW4gYnV0
IHRoZSBhc3NvYyB3aWxsIGVuZCB1cAorICogICAgaW4gb25seSBvbmUgVlJGIChnb3R0ZW4gZnJv
bSB0aGUgcGFja2V0IG9yIGNvbm5lY3Qvc2VuZCkuCisgKgorICovCisKK3N0cnVjdCBzY3RwX3Zy
ZiAqCitzY3RwX2FsbG9jYXRlX3ZyZihpbnQgdnJmX2lkKQoreworCXN0cnVjdCBzY3RwX3ZyZiAq
dnJmID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF92cmZsaXN0ICpidWNrZXQ7CisKKwkvKiBGaXJzdCBh
bGxvY2F0ZSB0aGUgVlJGIHN0cnVjdHVyZSAqLworCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lk
KTsKKwlpZiAodnJmKSB7CisJCS8qIEFscmVhZHkgYWxsb2NhdGVkICovCisJCXJldHVybiAodnJm
KTsKKwl9CisJU0NUUF9NQUxMT0ModnJmLCBzdHJ1Y3Qgc2N0cF92cmYgKiwgc2l6ZW9mKHN0cnVj
dCBzY3RwX3ZyZiksCisJCSAgICBTQ1RQX01fVlJGKTsKKwlpZiAodnJmID09IE5VTEwpIHsKKwkJ
LyogTm8gbWVtb3J5ICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiTm8gbWVtb3J5IGZv
ciBWUkY6JWQiLCB2cmZfaWQpOworI2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIHNl
dHVwIHRoZSBWUkYgKi8KKwltZW1zZXQodnJmLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdnJmKSk7
CisJdnJmLT52cmZfaWQgPSB2cmZfaWQ7CisJTElTVF9JTklUKCZ2cmYtPmlmbmxpc3QpOworCXZy
Zi0+dG90YWxfaWZhX2NvdW50ID0gMDsKKwl2cmYtPnJlZmNvdW50ID0gMDsKKwkvKiBub3cgYWxz
byBzZXR1cCB0YWJsZSBpZHMgKi8KKwlTQ1RQX0lOSVRfVlJGX1RBQkxFSUQodnJmKTsKKwkvKiBJ
bml0IHRoZSBIQVNIIG9mIGFkZHJlc3NlcyAqLworCXZyZi0+dnJmX2FkZHJfaGFzaCA9IFNDVFBf
SEFTSF9JTklUKFNDVFBfVlJGX0FERFJfSEFTSF9TSVpFLAorCQkJCQkgICAgJnZyZi0+dnJmX2Fk
ZHJfaGFzaG1hcmspOworCWlmICh2cmYtPnZyZl9hZGRyX2hhc2ggPT0gTlVMTCkgeworCQkvKiBO
byBtZW1vcnkgKi8KKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJObyBtZW1vcnkgZm9yIFZS
RjolZCIsIHZyZl9pZCk7CisjZW5kaWYKKwkJU0NUUF9GUkVFKHZyZiwgU0NUUF9NX1ZSRik7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCisJLyogQWRkIGl0IHRvIHRoZSBoYXNoIHRhYmxlICovCisJ
YnVja2V0ID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdnJmaGFzaClbKHZyZl9pZCAmIFNDVFBfQkFT
RV9JTkZPKGhhc2h2cmZtYXJrKSldOworCUxJU1RfSU5TRVJUX0hFQUQoYnVja2V0LCB2cmYsIG5l
eHRfdnJmKTsKKwlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3ZyZnMp
LCAxKTsKKwlyZXR1cm4gKHZyZik7Cit9CisKKworc3RydWN0IHNjdHBfaWZuICoKK3NjdHBfZmlu
ZF9pZm4odm9pZCAqaWZuLCB1aW50MzJfdCBpZm5faW5kZXgpCit7CisJc3RydWN0IHNjdHBfaWZu
ICpzY3RwX2lmbnA7CisJc3RydWN0IHNjdHBfaWZubGlzdCAqaGFzaF9pZm5faGVhZDsKKworCS8q
IFdlIGFzc3VtZSB0aGUgbG9jayBpcyBoZWxkIGZvciB0aGUgYWRkcmVzc2VzCisJICogaWYgdGhh
dCdzIHdyb25nIHByb2JsZW1zIGNvdWxkIG9jY3VyIDotKQorCSAqLworCWhhc2hfaWZuX2hlYWQg
PSAmU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNoKVsoaWZuX2luZGV4ICYgU0NUUF9CQVNFX0lO
Rk8odnJmX2lmbl9oYXNobWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCBoYXNoX2lm
bl9oZWFkLCBuZXh0X2J1Y2tldCkgeworCQlpZiAoc2N0cF9pZm5wLT5pZm5faW5kZXggPT0gaWZu
X2luZGV4KSB7CisJCQlyZXR1cm4gKHNjdHBfaWZucCk7CisJCX0KKwkJaWYgKHNjdHBfaWZucC0+
aWZuX3AgJiYgaWZuICYmIChzY3RwX2lmbnAtPmlmbl9wID09IGlmbikpIHsKKwkJCXJldHVybiAo
c2N0cF9pZm5wKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK3N0cnVjdCBzY3Rw
X3ZyZiAqCitzY3RwX2ZpbmRfdnJmKHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF92
cmZsaXN0ICpidWNrZXQ7CisJc3RydWN0IHNjdHBfdnJmICpsaXN0ZTsKKworCWJ1Y2tldCA9ICZT
Q1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpWyh2cmZfaWQgJiBTQ1RQX0JBU0VfSU5GTyhoYXNo
dnJmbWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0gobGlzdGUsIGJ1Y2tldCwgbmV4dF92cmYpIHsKKwkJ
aWYgKHZyZl9pZCA9PSBsaXN0ZS0+dnJmX2lkKSB7CisJCQlyZXR1cm4gKGxpc3RlKTsKKwkJfQor
CX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK3ZvaWQKK3NjdHBfZnJlZV92cmYoc3RydWN0IHNj
dHBfdnJmICp2cmYpCit7CisJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgm
dnJmLT5yZWZjb3VudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodnJmLT52cmZfYWRkcl9oYXNo
KSB7CisgICAgICAgICAgICAgICAgICAgIFNDVFBfSEFTSF9GUkVFKHZyZi0+dnJmX2FkZHJfaGFz
aCwgdnJmLT52cmZfYWRkcl9oYXNobWFyayk7CisgICAgICAgICAgICAgICAgICAgIHZyZi0+dnJm
X2FkZHJfaGFzaCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorCQkvKiBXZSB6ZXJvJ2QgdGhl
IGNvdW50ICovCisJCUxJU1RfUkVNT1ZFKHZyZiwgbmV4dF92cmYpOworCQlTQ1RQX0ZSRUUodnJm
LCBTQ1RQX01fVlJGKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBp
X2NvdW50X3ZyZnMpLCAxKTsKKwl9Cit9CisKKwordm9pZAorc2N0cF9mcmVlX2lmbihzdHJ1Y3Qg
c2N0cF9pZm4gKnNjdHBfaWZucCkKK3sKKwlpZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JF
RkNPVU5UKCZzY3RwX2lmbnAtPnJlZmNvdW50KSkgeworCQkvKiBXZSB6ZXJvJ2QgdGhlIGNvdW50
ICovCisJCWlmIChzY3RwX2lmbnAtPnZyZikgeworCQkJc2N0cF9mcmVlX3ZyZihzY3RwX2lmbnAt
PnZyZik7CisJCX0KKwkJU0NUUF9GUkVFKHNjdHBfaWZucCwgU0NUUF9NX0lGTik7CisJCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9pZm5zKSwgMSk7CisJfQor
fQorCisKK3ZvaWQKK3NjdHBfdXBkYXRlX2lmbl9tdHUodWludDMyX3QgaWZuX2luZGV4LCB1aW50
MzJfdCBtdHUpCit7CisJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7CisKKwlzY3RwX2lmbnAg
PSBzY3RwX2ZpbmRfaWZuKCh2b2lkICopTlVMTCwgaWZuX2luZGV4KTsKKwlpZiAoc2N0cF9pZm5w
ICE9IE5VTEwpIHsKKwkJc2N0cF9pZm5wLT5pZm5fbXR1ID0gbXR1OworCX0KK30KKworCit2b2lk
CitzY3RwX2ZyZWVfaWZhKHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwKQoreworCWlmIChTQ1RQ
X0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoJnNjdHBfaWZhcC0+cmVmY291bnQpKSB7CisJ
CS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KKwkJaWYgKHNjdHBfaWZhcC0+aWZuX3ApIHsKKwkJ
CXNjdHBfZnJlZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCk7CisJCX0KKwkJU0NUUF9GUkVFKHNjdHBf
aWZhcCwgU0NUUF9NX0lGQSk7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZP
KGlwaV9jb3VudF9pZmFzKSwgMSk7CisJfQorfQorCisKK3N0YXRpYyB2b2lkCitzY3RwX2RlbGV0
ZV9pZm4oc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnAsIGludCBob2xkX2FkZHJfbG9jaykKK3sK
KwlzdHJ1Y3Qgc2N0cF9pZm4gKmZvdW5kOworCisJZm91bmQgPSBzY3RwX2ZpbmRfaWZuKHNjdHBf
aWZucC0+aWZuX3AsIHNjdHBfaWZucC0+aWZuX2luZGV4KTsKKwlpZiAoZm91bmQgPT0gTlVMTCkg
eworCQkvKiBOb3QgaW4gdGhlIGxpc3QuLiBzb3JyeSAqLworCQlyZXR1cm47CisJfQorCWlmICho
b2xkX2FkZHJfbG9jayA9PSAwKQorCQlTQ1RQX0lQSV9BRERSX1dMT0NLKCk7CisJTElTVF9SRU1P
VkUoc2N0cF9pZm5wLCBuZXh0X2J1Y2tldCk7CisJTElTVF9SRU1PVkUoc2N0cF9pZm5wLCBuZXh0
X2lmbik7CisJU0NUUF9ERVJFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmbnAtPmlmbl9pbmRleCwK
KwkJCQkgIHNjdHBfaWZucC0+cmVnaXN0ZXJlZF9hZik7CisJaWYgKGhvbGRfYWRkcl9sb2NrID09
IDApCisJCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCS8qIFRha2UgYXdheSB0aGUgcmVmZXJl
bmNlLCBhbmQgcG9zc2libHkgZnJlZSBpdCAqLworCXNjdHBfZnJlZV9pZm4oc2N0cF9pZm5wKTsK
K30KKworCit2b2lkCitzY3RwX21hcmtfaWZhX2FkZHJfZG93bih1aW50MzJfdCB2cmZfaWQsIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCWNvbnN0IGNoYXIgKmlmX25hbWUsIHVpbnQzMl90IGlm
bl9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhcDsKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJm
KHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiQ2FuJ3QgZmluZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBvdXQ7CisKKwl9
CisJc2N0cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+dnJmX2lkLCBT
Q1RQX0FERFJfTE9DS0VEKTsKKwlpZiAoc2N0cF9pZmFwID09IE5VTEwpIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHNjdHBfaWZhcCBmb3IgYWRkcmVzc1xuIik7CisJ
CWdvdG8gb3V0OworCX0KKwlpZiAoc2N0cF9pZmFwLT5pZm5fcCA9PSBOVUxMKSB7CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIGhhcyBubyBJRk4gLSBjYW4ndCBtYXJrIHVudXNhYmxl
XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpZl9uYW1lKSB7CisJCWlmIChzdHJuY21wKGlm
X25hbWUsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laKSAhPSAwKSB7
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIklGTiAlcyBvZiBJRkEgbm90IHRoZSBzYW1l
IGFzICVzXG4iLAorCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBpZl9uYW1lKTsKKwkJ
CWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9p
bmRleCAhPSBpZm5faW5kZXgpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIG93
bmVkIGJ5IGlmbl9pbmRleDolZCBkb3duIGNvbW1hbmQgZm9yIGlmbl9pbmRleDolZCAtIGlnbm9y
ZWRcbiIsCisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZm5faW5kZXgpOworCQkJ
Z290byBvdXQ7CisJCX0KKwl9CisKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzICY9ICh+U0NU
UF9BRERSX1ZBTElEKTsKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzIHw9IFNDVFBfQUREUl9J
RkFfVU5VU0VBQkxFOworIG91dDoKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKK30KKworCit2
b2lkCitzY3RwX21hcmtfaWZhX2FkZHJfdXAodWludDMyX3QgdnJmX2lkLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmlmX25hbWUsIHVpbnQzMl90IGlmbl9pbmRl
eCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZh
cDsKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9p
ZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiQ2Fu
J3QgZmluZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBvdXQ7CisKKwl9CisJc2N0
cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+dnJmX2lkLCBTQ1RQX0FE
RFJfTE9DS0VEKTsKKwlpZiAoc2N0cF9pZmFwID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RF
QlVHX1BDQjQsICJDYW4ndCBmaW5kIHNjdHBfaWZhcCBmb3IgYWRkcmVzc1xuIik7CisJCWdvdG8g
b3V0OworCX0KKwlpZiAoc2N0cF9pZmFwLT5pZm5fcCA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19QQ0I0LCAiSUZBIGhhcyBubyBJRk4gLSBjYW4ndCBtYXJrIHVudXNhYmxlXG4iKTsK
KwkJZ290byBvdXQ7CisJfQorCWlmIChpZl9uYW1lKSB7CisJCWlmIChzdHJuY21wKGlmX25hbWUs
IHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laKSAhPSAwKSB7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfUENCNCwgIklGTiAlcyBvZiBJRkEgbm90IHRoZSBzYW1lIGFzICVz
XG4iLAorCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBpZl9uYW1lKTsKKwkJCWdvdG8g
b3V0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCAh
PSBpZm5faW5kZXgpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIG93bmVkIGJ5
IGlmbl9pbmRleDolZCBkb3duIGNvbW1hbmQgZm9yIGlmbl9pbmRleDolZCAtIGlnbm9yZWRcbiIs
CisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZm5faW5kZXgpOworCQkJZ290byBv
dXQ7CisJCX0KKwl9CisKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzICY9ICh+U0NUUF9BRERS
X0lGQV9VTlVTRUFCTEUpOworCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9BRERS
X1ZBTElEOworIG91dDoKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKK30KKworCisvKi0KKyAq
IEFkZCBhbiBpZmEgdG8gYW4gaWZuLgorICogUmVnaXN0ZXIgdGhlIGludGVyZmFjZSBhcyBuZWNl
c3NhcnkuCisgKiBOT1RFOiBBRERSIHdyaXRlIGxvY2sgTVVTVCBiZSBoZWxkLgorICovCitzdGF0
aWMgdm9pZAorc2N0cF9hZGRfaWZhX3RvX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCwg
c3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCit7CisJaW50IGlmYV9hZjsKKworCUxJU1RfSU5T
RVJUX0hFQUQoJnNjdHBfaWZucC0+aWZhbGlzdCwgc2N0cF9pZmFwLCBuZXh0X2lmYSk7CisJc2N0
cF9pZmFwLT5pZm5fcCA9IHNjdHBfaWZucDsKKwlhdG9taWNfYWRkX2ludCgmc2N0cF9pZmFwLT5p
Zm5fcC0+cmVmY291bnQsIDEpOworCS8qIHVwZGF0ZSBhZGRyZXNzIGNvdW50cyAqLworCXNjdHBf
aWZucC0+aWZhX2NvdW50Kys7CisJaWZhX2FmID0gc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseTsKKwlzd2l0Y2ggKGlmYV9hZikgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJ
CXNjdHBfaWZucC0+bnVtX3Y0Kys7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCQlzY3RwX2lmbnAtPm51bV92NisrOworCQlicmVhazsKKyNlbmRpZgor
CWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoc2N0cF9pZm5wLT5pZmFfY291bnQgPT0gMSkg
eworCQkvKiByZWdpc3RlciB0aGUgbmV3IGludGVyZmFjZSAqLworCQlTQ1RQX1JFR0lTVEVSX0lO
VEVSRkFDRShzY3RwX2lmbnAtPmlmbl9pbmRleCwgaWZhX2FmKTsKKwkJc2N0cF9pZm5wLT5yZWdp
c3RlcmVkX2FmID0gaWZhX2FmOworCX0KK30KKworCisvKi0KKyAqIFJlbW92ZSBhbiBpZmEgZnJv
bSBpdHMgaWZuLgorICogSWYgbm8gbW9yZSBhZGRyZXNzZXMgZXhpc3QsIHJlbW92ZSB0aGUgaWZu
IHRvby4gT3RoZXJ3aXNlLCByZS1yZWdpc3RlcgorICogdGhlIGludGVyZmFjZSBiYXNlZCBvbiB0
aGUgcmVtYWluaW5nIGFkZHJlc3MgZmFtaWxpZXMgbGVmdC4KKyAqIE5PVEU6IEFERFIgd3JpdGUg
bG9jayBNVVNUIGJlIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3JlbW92ZV9pZmFfZnJv
bV9pZm4oc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCit7CisJTElTVF9SRU1PVkUoc2N0cF9p
ZmFwLCBuZXh0X2lmYSk7CisJaWYgKHNjdHBfaWZhcC0+aWZuX3ApIHsKKwkJLyogdXBkYXRlIGFk
ZHJlc3MgY291bnRzICovCisJCXNjdHBfaWZhcC0+aWZuX3AtPmlmYV9jb3VudC0tOworCQlzd2l0
Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNh
c2UgQUZfSU5FVDoKKwkJCXNjdHBfaWZhcC0+aWZuX3AtPm51bV92NC0tOworCQkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJc2N0cF9pZmFwLT5pZm5f
cC0+bnVtX3Y2LS07CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ
CX0KKworCQlpZiAoTElTVF9FTVBUWSgmc2N0cF9pZmFwLT5pZm5fcC0+aWZhbGlzdCkpIHsKKwkJ
CS8qIHJlbW92ZSB0aGUgaWZuLCBwb3NzaWJseSBmcmVlaW5nIGl0ICovCisJCQlzY3RwX2RlbGV0
ZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCwgU0NUUF9BRERSX0xPQ0tFRCk7CisJCX0gZWxzZSB7CisJ
CQkvKiByZS1yZWdpc3RlciBhZGRyZXNzIGZhbWlseSB0eXBlLCBpZiBuZWVkZWQgKi8KKwkJCWlm
ICgoc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y2ID09IDApICYmCisJCQkgICAgKHNjdHBfaWZhcC0+
aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPT0gQUZfSU5FVDYpKSB7CisJCQkJU0NUUF9ERVJFR0lTVEVS
X0lOVEVSRkFDRShzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIEFGX0lORVQ2KTsKKwkJCQlT
Q1RQX1JFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIEFGX0lO
RVQpOworCQkJCXNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPSBBRl9JTkVUOworCQkJ
fSBlbHNlIGlmICgoc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y0ID09IDApICYmCisJCQkJICAgKHNj
dHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPT0gQUZfSU5FVCkpIHsKKwkJCQlTQ1RQX0RF
UkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgQUZfSU5FVCk7
CisJCQkJU0NUUF9SRUdJU1RFUl9JTlRFUkZBQ0Uoc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4
LCBBRl9JTkVUNik7CisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJlZF9hZiA9IEFGX0lO
RVQ2OworCQkJfQorCQkJLyogZnJlZSB0aGUgaWZuIHJlZmNvdW50ICovCisJCQlzY3RwX2ZyZWVf
aWZuKHNjdHBfaWZhcC0+aWZuX3ApOworCQl9CisJCXNjdHBfaWZhcC0+aWZuX3AgPSBOVUxMOwor
CX0KK30KKworCitzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9hZGRfYWRkcl90b192cmYodWludDMy
X3QgdnJmX2lkLCB2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCwKKwkJICAgICB1aW50MzJf
dCBpZm5fdHlwZSwgY29uc3QgY2hhciAqaWZfbmFtZSwgdm9pZCAqaWZhLAorCQkgICAgIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgaWZhX2ZsYWdzLAorCQkgICAgIGludCBkeW5hbWlj
X2FkZCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBf
aWZucCA9IE5VTEw7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXAgPSBOVUxMOworCXN0cnVj
dCBzY3RwX2lmYWxpc3QgKmhhc2hfYWRkcl9oZWFkOworCXN0cnVjdCBzY3RwX2lmbmxpc3QgKmhh
c2hfaWZuX2hlYWQ7CisJdWludDMyX3QgaGFzaF9vZl9hZGRyOworCWludCBuZXdfaWZuX2FmID0g
MDsKKworI2lmZGVmIFNDVFBfREVCVUcKKwlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgInZyZl9p
ZCAweCV4OiBhZGRpbmcgYWRkcmVzczogIiwgdnJmX2lkKTsKKwlTQ1RQREJHX0FERFIoU0NUUF9E
RUJVR19QQ0I0LCBhZGRyKTsKKyNlbmRpZgorCVNDVFBfSVBJX0FERFJfV0xPQ0soKTsKKwlzY3Rw
X2lmbnAgPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZuX2luZGV4KTsKKwlpZiAoc2N0cF9pZm5wKSB7
CisJCXZyZiA9IHNjdHBfaWZucC0+dnJmOworCX0gZWxzZSB7CisJCXZyZiA9IHNjdHBfZmluZF92
cmYodnJmX2lkKTsKKwkJaWYgKHZyZiA9PSBOVUxMKSB7CisJCQl2cmYgPSBzY3RwX2FsbG9jYXRl
X3ZyZih2cmZfaWQpOworCQkJaWYgKHZyZiA9PSBOVUxMKSB7CisJCQkJU0NUUF9JUElfQUREUl9X
VU5MT0NLKCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc2N0cF9p
Zm5wID09IE5VTEwpIHsKKwkJLyogYnVpbGQgb25lIGFuZCBhZGQgaXQsIGNhbid0IGhvbGQgbG9j
aworCQkgKiB1bnRpbCBhZnRlciBtYWxsb2MgZG9uZSB0aG91Z2guCisJCSAqLworCQlTQ1RQX0lQ
SV9BRERSX1dVTkxPQ0soKTsKKwkJU0NUUF9NQUxMT0Moc2N0cF9pZm5wLCBzdHJ1Y3Qgc2N0cF9p
Zm4gKiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaWZuKSwgU0NUUF9NX0lGTik7CisJCWlm
IChzY3RwX2lmbnAgPT0gTlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJObyBt
ZW1vcnkgZm9yIElGTiIpOworI2VuZGlmCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCW1lbXNl
dChzY3RwX2lmbnAsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZm4pKTsKKwkJc2N0cF9pZm5wLT5p
Zm5faW5kZXggPSBpZm5faW5kZXg7CisJCXNjdHBfaWZucC0+aWZuX3AgPSBpZm47CisJCXNjdHBf
aWZucC0+aWZuX3R5cGUgPSBpZm5fdHlwZTsKKwkJc2N0cF9pZm5wLT5yZWZjb3VudCA9IDA7CisJ
CXNjdHBfaWZucC0+dnJmID0gdnJmOworCQlhdG9taWNfYWRkX2ludCgmdnJmLT5yZWZjb3VudCwg
MSk7CisJCXNjdHBfaWZucC0+aWZuX210dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX0lGTl9JTkZP
KGlmbiwgaWZuX2luZGV4LCBhZGRyLT5zYV9mYW1pbHkpOworCQlpZiAoaWZfbmFtZSAhPSBOVUxM
KSB7CisJCQlzbnByaW50ZihzY3RwX2lmbnAtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laLCAiJXMi
LCBpZl9uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXNucHJpbnRmKHNjdHBfaWZucC0+aWZuX25hbWUs
IFNDVFBfSUZOQU1TSVosICIlcyIsICJ1bmtub3duIik7CisJCX0KKwkJaGFzaF9pZm5faGVhZCA9
ICZTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2gpWyhpZm5faW5kZXggJiBTQ1RQX0JBU0VfSU5G
Tyh2cmZfaWZuX2hhc2htYXJrKSldOworCQlMSVNUX0lOSVQoJnNjdHBfaWZucC0+aWZhbGlzdCk7
CisJCVNDVFBfSVBJX0FERFJfV0xPQ0soKTsKKwkJTElTVF9JTlNFUlRfSEVBRChoYXNoX2lmbl9o
ZWFkLCBzY3RwX2lmbnAsIG5leHRfYnVja2V0KTsKKwkJTElTVF9JTlNFUlRfSEVBRCgmdnJmLT5p
Zm5saXN0LCBzY3RwX2lmbnAsIG5leHRfaWZuKTsKKwkJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFT
RV9JTkZPKGlwaV9jb3VudF9pZm5zKSwgMSk7CisJCW5ld19pZm5fYWYgPSAxOworCX0KKwlzY3Rw
X2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJmLT52cmZfaWQsIFNDVFBfQURE
Ul9MT0NLRUQpOworCWlmIChzY3RwX2lmYXApIHsKKwkJLyogSG1tLCBpdCBhbHJlYWR5IGV4aXN0
cz8gKi8KKwkJaWYgKChzY3RwX2lmYXAtPmlmbl9wKSAmJgorCQkgICAgKHNjdHBfaWZhcC0+aWZu
X3AtPmlmbl9pbmRleCA9PSBpZm5faW5kZXgpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENC
NCwgIlVzaW5nIGV4aXN0aW5nIGlmbiAlcyAoMHgleCkgZm9yIGlmYSAlcFxuIiwKKwkJCQlzY3Rw
X2lmYXAtPmlmbl9wLT5pZm5fbmFtZSwgaWZuX2luZGV4LAorCQkJCSh2b2lkICopc2N0cF9pZmFw
KTsKKwkJCWlmIChuZXdfaWZuX2FmKSB7CisJCQkJLyogUmVtb3ZlIHRoZSBjcmVhdGVkIG9uZSB0
aGF0IHdlIGRvbid0IHdhbnQgKi8KKwkJCQlzY3RwX2RlbGV0ZV9pZm4oc2N0cF9pZm5wLCBTQ1RQ
X0FERFJfTE9DS0VEKTsKKwkJCX0KKwkJCWlmIChzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzICYg
U0NUUF9CRUlOR19ERUxFVEVEKSB7CisJCQkJLyogZWFzeSB0byBzb2x2ZSwganVzdCBzd2l0Y2gg
YmFjayB0byBhY3RpdmUgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNsZWFyaW5n
IGRlbGV0ZWQgaWZhIGZsYWdcbiIpOworCQkJCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgPSBT
Q1RQX0FERFJfVkFMSUQ7CisJCQkJc2N0cF9pZmFwLT5pZm5fcCA9IHNjdHBfaWZucDsKKwkJCQlh
dG9taWNfYWRkX2ludCgmc2N0cF9pZmFwLT5pZm5fcC0+cmVmY291bnQsIDEpOworCQkJfQorCQll
eGl0X3N0YWdlX2xlZnQ6CisJCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwkJCXJldHVybiAo
c2N0cF9pZmFwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzY3RwX2lmYXAtPmlmbl9wKSB7CisJCQkJ
LyoKKwkJCQkgKiBUaGUgbGFzdCBJRk4gZ2V0cyB0aGUgYWRkcmVzcywgcmVtb3ZlIHRoZQorCQkJ
CSAqIG9sZCBvbmUKKwkJCQkgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIk1vdmlu
ZyBpZmEgJXAgZnJvbSAlcyAoMHgleCkgdG8gJXMgKDB4JXgpXG4iLAorCQkJCQkodm9pZCAqKXNj
dHBfaWZhcCwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsCisJCQkJCXNjdHBfaWZhcC0+aWZu
X3AtPmlmbl9pbmRleCwgaWZfbmFtZSwKKwkJCQkJaWZuX2luZGV4KTsKKwkJCQkvKiByZW1vdmUg
dGhlIGFkZHJlc3MgZnJvbSB0aGUgb2xkIGlmbiAqLworCQkJCXNjdHBfcmVtb3ZlX2lmYV9mcm9t
X2lmbihzY3RwX2lmYXApOworCQkJCS8qIG1vdmUgdGhlIGFkZHJlc3Mgb3ZlciB0byB0aGUgbmV3
IGlmbiAqLworCQkJCXNjdHBfYWRkX2lmYV90b19pZm4oc2N0cF9pZm5wLCBzY3RwX2lmYXApOwor
CQkJCWdvdG8gZXhpdF9zdGFnZV9sZWZ0OworCQkJfSBlbHNlIHsKKwkJCQkvKiByZXBhaXIgaWZu
cCB3aGljaCB3YXMgTlVMTCA/ICovCisJCQkJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyA9IFND
VFBfQUREUl9WQUxJRDsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIlJlcGFpcmluZyBp
Zm4gJXAgZm9yIGlmYSAlcFxuIiwKKwkJCQkJKHZvaWQgKilzY3RwX2lmbnAsICh2b2lkICopc2N0
cF9pZmFwKTsKKwkJCQlzY3RwX2FkZF9pZmFfdG9faWZuKHNjdHBfaWZucCwgc2N0cF9pZmFwKTsK
KwkJCX0KKwkJCWdvdG8gZXhpdF9zdGFnZV9sZWZ0OworCQl9CisJfQorCVNDVFBfSVBJX0FERFJf
V1VOTE9DSygpOworCVNDVFBfTUFMTE9DKHNjdHBfaWZhcCwgc3RydWN0IHNjdHBfaWZhICosIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pZmEpLCBTQ1RQX01fSUZBKTsKKwlpZiAoc2N0cF9pZmFwID09IE5V
TEwpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJObyBtZW1vcnkgZm9yIElGQSIpOwor
I2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJfQorCW1lbXNldChzY3RwX2lmYXAsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pZmEpKTsKKwlzY3RwX2lmYXAtPmlmbl9wID0gc2N0cF9pZm5wOworCWF0
b21pY19hZGRfaW50KCZzY3RwX2lmbnAtPnJlZmNvdW50LCAxKTsKKwlzY3RwX2lmYXAtPnZyZl9p
ZCA9IHZyZl9pZDsKKwlzY3RwX2lmYXAtPmlmYSA9IGlmYTsKKyNpZmRlZiBIQVZFX1NBX0xFTgor
CW1lbWNweSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBhZGRyLT5zYV9sZW4pOworI2Vsc2UK
Kwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6
CisJCW1lbWNweSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2
OgorCQltZW1jcHkoJnNjdHBfaWZhcC0+YWRkcmVzcywgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoJnNjdHBfaWZhcC0+YWRkcmVzcywgYWRkciwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoK
KwkJLyogVFNOSCAqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwlzY3RwX2lmYXAtPmxvY2FsaWZh
X2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEIHwgU0NUUF9BRERSX0RFRkVSX1VTRTsKKwlzY3RwX2lm
YXAtPmZsYWdzID0gaWZhX2ZsYWdzOworCS8qIFNldCBzY29wZSAqLworCXN3aXRjaCAoc2N0cF9p
ZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6
CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQlzaW4gPSAmc2N0cF9pZmFwLT5h
ZGRyZXNzLnNpbjsKKwkJaWYgKFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZhcC0+aWZuX3Ap
IHx8CisJCSAgICAoSU40X0lTTE9PUEJBQ0tfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJ
CQlzY3RwX2lmYXAtPnNyY19pc19sb29wID0gMTsKKwkJfQorCQlpZiAoKElONF9JU1BSSVZBVEVf
QUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQlzY3RwX2lmYXAtPnNyY19pc19wcml2ID0g
MTsKKwkJfQorCQlzY3RwX2lmbnAtPm51bV92NCsrOworCQlpZiAobmV3X2lmbl9hZikKKwkJICAg
IG5ld19pZm5fYWYgPSBBRl9JTkVUOworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCWNhc2UgQUZfSU5FVDY6CisJeworCQkvKiBvayB0byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNz
ZXM/ICovCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJc2luNiA9ICZzY3RwX2lm
YXAtPmFkZHJlc3Muc2luNjsKKwkJaWYgKFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZhcC0+
aWZuX3ApIHx8CisJCSAgICAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnNpbjYtPnNpbjZfYWRkcikp
KSB7CisJCQlzY3RwX2lmYXAtPnNyY19pc19sb29wID0gMTsKKwkJfQorCQlpZiAoSU42X0lTX0FE
RFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlzY3RwX2lmYXAtPnNyY19pc19w
cml2ID0gMTsKKwkJfQorCQlzY3RwX2lmbnAtPm51bV92NisrOworCQlpZiAobmV3X2lmbl9hZikK
KwkJCW5ld19pZm5fYWYgPSBBRl9JTkVUNjsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJaWYgKG5ld19pZm5fYWYpCisJ
CQluZXdfaWZuX2FmID0gQUZfQ09OTjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlu
ZXdfaWZuX2FmID0gMDsKKwkJYnJlYWs7CisJfQorCWhhc2hfb2ZfYWRkciA9IHNjdHBfZ2V0X2lm
YV9oYXNoX3ZhbCgmc2N0cF9pZmFwLT5hZGRyZXNzLnNhKTsKKworCWlmICgoc2N0cF9pZmFwLT5z
cmNfaXNfcHJpdiA9PSAwKSAmJgorCSAgICAoc2N0cF9pZmFwLT5zcmNfaXNfbG9vcCA9PSAwKSkg
eworCQlzY3RwX2lmYXAtPnNyY19pc19nbG9iID0gMTsKKwl9CisJU0NUUF9JUElfQUREUl9XTE9D
SygpOworCWhhc2hfYWRkcl9oZWFkID0gJnZyZi0+dnJmX2FkZHJfaGFzaFsoaGFzaF9vZl9hZGRy
ICYgdnJmLT52cmZfYWRkcl9oYXNobWFyayldOworCUxJU1RfSU5TRVJUX0hFQUQoaGFzaF9hZGRy
X2hlYWQsIHNjdHBfaWZhcCwgbmV4dF9idWNrZXQpOworCXNjdHBfaWZhcC0+cmVmY291bnQgPSAx
OworCUxJU1RfSU5TRVJUX0hFQUQoJnNjdHBfaWZucC0+aWZhbGlzdCwgc2N0cF9pZmFwLCBuZXh0
X2lmYSk7CisJc2N0cF9pZm5wLT5pZmFfY291bnQrKzsKKwl2cmYtPnRvdGFsX2lmYV9jb3VudCsr
OworCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfaWZhcyksIDEpOwor
CWlmIChuZXdfaWZuX2FmKSB7CisJCVNDVFBfUkVHSVNURVJfSU5URVJGQUNFKGlmbl9pbmRleCwg
bmV3X2lmbl9hZik7CisJCXNjdHBfaWZucC0+cmVnaXN0ZXJlZF9hZiA9IG5ld19pZm5fYWY7CisJ
fQorCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCWlmIChkeW5hbWljX2FkZCkgeworCQkvKiBC
dW1wIHVwIHRoZSByZWZjb3VudCBzbyB0aGF0IHdoZW4gdGhlIHRpbWVyCisJCSAqIGNvbXBsZXRl
cyBpdCB3aWxsIGRyb3AgYmFjayBkb3duLgorCQkgKi8KKwkJc3RydWN0IHNjdHBfbGFkZHIgKndp
OworCisJCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAtPnJlZmNvdW50LCAxKTsKKwkJd2kgPSBT
Q1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRyKSwgc3RydWN0IHNjdHBf
bGFkZHIpOworCQlpZiAod2kgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIEdhaywgd2hhdCBjYW4g
d2UgZG8/IFdlIGhhdmUgbG9zdCBhbiBhZGRyZXNzCisJCQkgKiBjaGFuZ2UgY2FuIHlvdSBzYXkg
SE9TRUQ/CisJCQkgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiTG9zdCBhbiBhZGRy
ZXNzIGNoYW5nZT9cbiIpOworCQkJLyogT3BwcywgbXVzdCBkZWNyZW1lbnQgdGhlIGNvdW50ICov
CisJCQlzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKHZyZl9pZCwgYWRkciwgaWZuX2luZGV4LAorCQkJ
CQkgICAgICAgaWZfbmFtZSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCVNDVFBfSU5DUl9M
QUREUl9DT1VOVCgpOworCQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsKKwkJKHZvaWQpU0NU
UF9HRVRUSU1FX1RJTUVWQUwoJndpLT5zdGFydF90aW1lKTsKKwkJd2ktPmlmYSA9IHNjdHBfaWZh
cDsKKwkJd2ktPmFjdGlvbiA9IFNDVFBfQUREX0lQX0FERFJFU1M7CisKKwkJU0NUUF9XUV9BRERS
X0xPQ0soKTsKKwkJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHdp
LCBzY3RwX254dF9hZGRyKTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQURE
Ul9XUSwKKwkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKKwkJCQkgKHN0cnVjdCBzY3Rw
X3RjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7CisJCVNDVFBfV1Ff
QUREUl9VTkxPQ0soKTsKKwl9IGVsc2UgeworCQkvKiBpdCdzIHJlYWR5IGZvciB1c2UgKi8KKwkJ
c2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVSX1VTRTsKKwl9CisJ
cmV0dXJuIChzY3RwX2lmYXApOworfQorCit2b2lkCitzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKHVp
bnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkgICAgICAgdWludDMyX3Qg
aWZuX2luZGV4LCBjb25zdCBjaGFyICppZl9uYW1lKQoreworCXN0cnVjdCBzY3RwX3ZyZiAqdnJm
OworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwID0gTlVMTDsKKworCVNDVFBfSVBJX0FERFJf
V0xPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxM
KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiQ2FuJ3QgZmluZCB2cmZfaWQgMHgleFxu
IiwgdnJmX2lkKTsKKwkJZ290byBvdXRfbm93OworCX0KKworI2lmZGVmIFNDVFBfREVCVUcKKwlT
Q1RQREJHKFNDVFBfREVCVUdfUENCNCwgInZyZl9pZCAweCV4OiBkZWxldGluZyBhZGRyZXNzOiIs
IHZyZl9pZCk7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfUENCNCwgYWRkcik7CisjZW5kaWYK
KwlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJmLT52cmZfaWQsIFND
VFBfQUREUl9MT0NLRUQpOworCWlmIChzY3RwX2lmYXApIHsKKwkJLyogVmFsaWRhdGUgdGhlIGRl
bGV0ZSAqLworCQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkgeworCQkJaW50IHZhbGlkID0gMDsKKwkJ
CS8qLQorCQkJICogVGhlIG5hbWUgaGFzIHByaW9yaXR5IG92ZXIgdGhlIGlmbl9pbmRleAorCQkJ
ICogaWYgaXRzIGdpdmVuLiBXZSBkbyB0aGlzIGVzcGVjaWFsbHkgZm9yCisJCQkgKiBwYW5kYSB3
aG8gbWlnaHQgcmVjeWNsZSBpbmRleGVzIGZhc3QuCisJCQkgKi8KKwkJCWlmIChpZl9uYW1lKSB7
CisJCQkJaWYgKHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsIFND
VFBfSUZOQU1TSVopID09IDApIHsKKwkJCQkJLyogVGhleSBtYXRjaCBpdHMgYSBjb3JyZWN0IGRl
bGV0ZSAqLworCQkJCQl2YWxpZCA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKCF2YWxpZCkgewor
CQkJCS8qIGxhc3QgZGl0Y2ggY2hlY2sgaWZuX2luZGV4ICovCisJCQkJaWYgKGlmbl9pbmRleCA9
PSBzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgpIHsKKwkJCQkJdmFsaWQgPSAxOworCQkJCX0K
KwkJCX0KKwkJCWlmICghdmFsaWQpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgImlm
bjolZCBpZm5hbWU6JXMgZG9lcyBub3QgbWF0Y2ggYWRkcmVzc2VzXG4iLAorCQkJCQlpZm5faW5k
ZXgsICgoaWZfbmFtZSA9PSBOVUxMKSA/ICJOVUxMIiA6IGlmX25hbWUpKTsKKwkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfUENCNCwgImlmbjolZCBpZm5hbWU6JXMgLSBpZ25vcmluZyBkZWxldGVcbiIs
CisJCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgc2N0cF9pZmFwLT5pZm5fcC0+aWZu
X25hbWUpOworCQkJCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCQkJCXJldHVybjsKKwkJCX0K
KwkJfQorCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkRlbGV0aW5nIGlmYSAlcFxuIiwgKHZv
aWQgKilzY3RwX2lmYXApOworCQlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzICY9IFNDVFBfQURE
Ul9WQUxJRDsKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBXZSBkb24ndCBzZXQgdGhlIGZsYWcu
IFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RydWN0dXJlIHdpbGwKKwkJICogaGFuZyBhcm91bmQgaW4g
RVAncyB0aGF0IGhhdmUgYm91bmQgc3BlY2lmaWMgdG8gaXQgdW50aWwKKwkJICogdGhleSBjbG9z
ZS4gVGhpcyBnaXZlcyB1cyBUQ1AgbGlrZSBiZWhhdmlvciBpZiBzb21lb25lCisJCSAqIHJlbW92
ZXMgYW4gYWRkcmVzcyAob3IgZm9yIHRoYXQgbWF0dGVyIGFkZHMgaXQgcmlnaHQgYmFjaykuCisJ
CSAqLworCQkvKiBzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzIHw9IFNDVFBfQkVJTkdfREVMRVRF
RDsgKi8KKwkJdnJmLT50b3RhbF9pZmFfY291bnQtLTsKKwkJTElTVF9SRU1PVkUoc2N0cF9pZmFw
LCBuZXh0X2J1Y2tldCk7CisJCXNjdHBfcmVtb3ZlX2lmYV9mcm9tX2lmbihzY3RwX2lmYXApOwor
CX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJZWxzZSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiRGVsIEFkZHItaWZuOiVkIENvdWxkIG5vdCBmaW5kIGFkZHJlc3M6IiwKKwkJCWlmbl9pbmRl
eCk7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjEsIGFkZHIpOworCX0KKyNlbmRpZgor
Cisgb3V0X25vdzoKKwlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwlpZiAoc2N0cF9pZmFwKSB7
CisJCXN0cnVjdCBzY3RwX2xhZGRyICp3aTsKKworCQl3aSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9C
QVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7CisJCWlmICh3aSA9
PSBOVUxMKSB7CisJCQkvKgorCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBkbz8gV2UgaGF2ZSBsb3N0
IGFuIGFkZHJlc3MKKwkJCSAqIGNoYW5nZSBjYW4geW91IHNheSBIT1NFRD8KKwkJCSAqLworCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJMb3N0IGFuIGFkZHJlc3MgY2hhbmdlP1xuIik7CisK
KwkJCS8qIE9vcHMsIG11c3QgZGVjcmVtZW50IHRoZSBjb3VudCAqLworCQkJc2N0cF9mcmVlX2lm
YShzY3RwX2lmYXApOworCQkJcmV0dXJuOworCQl9CisJCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgp
OworCQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsKKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJ
TUVWQUwoJndpLT5zdGFydF90aW1lKTsKKwkJd2ktPmlmYSA9IHNjdHBfaWZhcDsKKwkJd2ktPmFj
dGlvbiA9IFNDVFBfREVMX0lQX0FERFJFU1M7CisJCVNDVFBfV1FfQUREUl9MT0NLKCk7CisJCS8q
CisJCSAqIFNob3VsZCB0aGlzIHJlYWxseSBiZSBhIHRhaWxxPyBBcyBpdCBpcyB3ZSB3aWxsIHBy
b2Nlc3MgdGhlCisJCSAqIG5ld2VzdCBmaXJzdCA6LTAKKwkJICovCisJCUxJU1RfSU5TRVJUX0hF
QUQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3EpLCB3aSwgc2N0cF9ueHRfYWRkcik7CisJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCisJCQkJIChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLAorCQkJCSAoc3RydWN0
IHNjdHBfbmV0cyAqKU5VTEwpOworCQlTQ1RQX1dRX0FERFJfVU5MT0NLKCk7CisJfQorCXJldHVy
bjsKK30KKworCitzdGF0aWMgaW50CitzY3RwX2RvZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICp0bykKK3sKKwlpbnQgbG9vcGJhY2tf
c2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWludCBpcHY0X2xvY2FsX3Njb3BlLCBpcHY0X2Fk
ZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWludCBsb2NhbF9zY29wZSwg
c2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF92cmYg
KnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0
cF9pZmE7CisKKwlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2Nv
cGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWlwdjRfbG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNj
b3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJaXB2NF9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29w
ZS5pcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWxvY2FsX3Nj
b3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKKwlzaXRlX3Njb3BlID0gc3RjYi0+
YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCWlwdjZfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2Nv
cGUuaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2Vu
ZGlmCisKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisJdnJmID0gc2N0cF9maW5kX3ZyZihzdGNi
LT5hc29jLnZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCS8qIG5vIHZyZiwgbm8gYWRk
cmVzc2VzICovCisJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQlyZXR1cm4gKDApOworCX0K
KworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRB
TEwpIHsKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikg
eworCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgorCQkJICAgIFNDVFBfSUZOX0lTX0lG
VF9MT09QKHNjdHBfaWZuKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9GT1JFQUNI
KHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJaWYgKHNjdHBf
aXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJCSAgICAoIXNjdHBfaXNf
YWRkcl9wZW5kaW5nKHN0Y2IsIHNjdHBfaWZhKSkpIHsKKwkJCQkJLyogV2UgYWxsb3cgcGVuZGlu
ZyBhZGRyZXNzZXMsIHdoZXJlIHdlCisJCQkJCSAqIGhhdmUgc2VudCBhbiBhc2NvbmYtYWRkIHRv
IGJlIGNvbnNpZGVyZWQKKwkJCQkJICogdmFsaWQuCisJCQkJCSAqLworCQkJCQljb250aW51ZTsK
KwkJCQl9CisJCQkJaWYgKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSAhPSB0by0+c2Ff
ZmFtaWx5KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzd2l0Y2ggKHNjdHBfaWZhLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisJ
CQkJCWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
LCAqcnNpbjsKKworCQkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCXJz
aW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdG87CisJCQkJCQlpZiAoKGlwdjRfbG9jYWxfc2Nv
cGUgPT0gMCkgJiYKKwkJCQkJCSAgICBJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2Fk
ZHIpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0g
MCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2VuZGlmCisJCQkJCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgPT0gcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQkJU0NUUF9J
UElfQUREUl9SVU5MT0NLKCk7CisJCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJCX0KKwkJCQkJfQor
CQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJ
CQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NiwgKnJzaW42OworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmlu
ZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OworI2VuZGlmCisJ
CQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlyc2luNiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopdG87CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkJCWlm
IChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJ
CQkJY29udGludWU7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmIChJTjZfSVNfQUREUl9MSU5L
TE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0gMCkK
KwkJCQkJCQkJY29udGludWU7CisjaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQor
CQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKKyNpZmRlZiBTQ1RQX0tBTUUK
KwkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkKKwkJCQkJCQkJCWNvbnRp
bnVlOworI2Vsc2UKKwkJCQkJCQkJbHNhNiA9ICpzaW42OworCQkJCQkJCQlpZiAoaW42X3JlY292
ZXJzY29wZSgmbHNhNiwKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJmxzYTYuc2luNl9h
ZGRyLAorCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICBOVUxMKSkKKwkJCQkJCQkJCWNvbnRp
bnVlOworCQkJCQkJCQlzaW42ID0gJmxzYTY7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJ
CQkJfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJ
CWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9D
QUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJ
CQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2luNiwgcnNpbjYpKSB7CisJCQkJCQkJU0NUUF9J
UElfQUREUl9SVU5MT0NLKCk7CisJCQkJCQkJcmV0dXJuICgxKTsKKwkJCQkJCX0KKwkJCQkJfQor
CQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNl
IEFGX0NPTk46CisJCQkJCWlmIChjb25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBzb2Nr
YWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCQkJc2Nvbm4gPSAmc2N0cF9pZmEtPmFk
ZHJlc3Muc2Nvbm47CisJCQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsK
KwkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKKwkJ
CQkJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJCQkJCQlyZXR1cm4gKDEpOworCQkJCQkJ
fQorCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJLyogVFNO
SCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qg
c2N0cF9sYWRkciAqbGFkZHI7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+c2N0cF9l
cC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5s
b2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkgeworCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQor
CQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEpICYmCisJCQkg
ICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpIHsKKwkJCQkvKiBX
ZSBhbGxvdyBwZW5kaW5nIGFkZHJlc3Nlcywgd2hlcmUgd2UKKwkJCQkgKiBoYXZlIHNlbnQgYW4g
YXNjb25mLWFkZCB0byBiZSBjb25zaWRlcmVkCisJCQkJICogdmFsaWQuCisJCQkJICovCisJCQkJ
Y29udGludWU7CisJCQl9CisJCQlpZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkg
IT0gdG8tPnNhX2ZhbWlseSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoICh0by0+
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJeworCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKKworCQkJCXNpbiA9ICZsYWRkci0+aWZhLT5h
ZGRyZXNzLnNpbjsKKwkJCQlyc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvOworCQkJCWlm
IChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKKwkJCQkJ
U0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJCWJy
ZWFrOworCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7
CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42OworCisJCQkJc2luNiA9ICZs
YWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKXRvOworCQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42LCByc2luNikpIHsKKwkJ
CQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJ
CWJyZWFrOworCQkJfQorCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlj
YXNlIEFGX0NPTk46CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAqcnNj
b25uOworCisJCQkJc2Nvbm4gPSAmbGFkZHItPmlmYS0+YWRkcmVzcy5zY29ubjsKKwkJCQlyc2Nv
bm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2Fk
ZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7CisJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygp
OworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQkJ
ZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9CisKKwkJfQorCX0KKwlT
Q1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyBzdHJ1
Y3Qgc2N0cF90Y2IgKgorc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoc3RydWN0IHNjdHBfaW5wY2Ig
KippbnBfcCwgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgIHN0cnVjdCBzb2NrYWRkciAqdG8s
IHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MzJfdCB2cmZfaWQpCit7CisJLyoqKiogQVNT
VU1FUyBUSEUgQ0FMTEVSIGhvbGRzIHRoZSBJTlBfSU5GT19STE9DSyAqLworCS8qCisJICogSWYg
d2Ugc3VwcG9ydCB0aGUgVENQIG1vZGVsLCB0aGVuIHdlIG11c3Qgbm93IGRpZyB0aHJvdWdoIHRv
IHNlZQorCSAqIGlmIHdlIGNhbiBmaW5kIG91ciBlbmRwb2ludCBpbiB0aGUgbGlzdCBvZiB0Y3Ag
ZXAncy4KKwkgKi8KKwl1aW50MTZfdCBscG9ydCwgcnBvcnQ7CisJc3RydWN0IHNjdHBwY2JoZWFk
ICplcGhlYWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAq
bGFkZHI7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
KyNpZmRlZiBTQ1RQX01WUkYKKwlpbnQgZm5kLCBpOworI2VuZGlmCisKKwlpZiAoKHRvID09IE5V
TEwpIHx8IChmcm9tID09IE5VTEwpKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJc3dpdGNo
ICh0by0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGZy
b20tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlscG9ydCA9ICgoc3RydWN0IHNvY2thZGRy
X2luICopdG8pLT5zaW5fcG9ydDsKKwkJCXJwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilm
cm9tKS0+c2luX3BvcnQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWJy
ZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoZnJvbS0+
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlscG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2lu
NiAqKXRvKS0+c2luNl9wb3J0OworCQkJcnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilm
cm9tKS0+c2luNl9wb3J0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQli
cmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46
CisJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJbHBvcnQgPSAoKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopdG8pLT5zY29ubl9wb3J0OworCQkJcnBvcnQgPSAoKHN0cnVjdCBz
b2NrYWRkcl9jb25uICopZnJvbSktPnNjb25uX3BvcnQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4g
KE5VTEwpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisJZXBoZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtTQ1RQX1BD
QkhBU0hfQUxMQUREUigobHBvcnQgfCBycG9ydCksIFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJr
KSldOworCS8qCisJICogT2sgbm93IGZvciBlYWNoIG9mIHRoZSBndXlzIGluIHRoaXMgYnVja2V0
IHdlIG11c3QgbG9vayBhbmQgc2VlOgorCSAqIC0gRG9lcyB0aGUgcmVtb3RlIHBvcnQgbWF0Y2gu
IC0gRG9lcyB0aGVyZSBzaW5nbGUgYXNzb2NpYXRpb24ncworCSAqIGFkZHJlc3NlcyBtYXRjaCB0
aGlzIGFkZHJlc3MgKHRvKS4gSWYgc28gd2UgdXBkYXRlIHBfZXAgdG8gcG9pbnQKKwkgKiB0byB0
aGlzIGVwIGFuZCByZXR1cm4gdGhlIHRjYiBmcm9tIGl0LgorCSAqLworCUxJU1RfRk9SRUFDSChp
bnAsIGVwaGVhZCwgc2N0cF9oYXNoKSB7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgeworCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxwb3J0ICE9IGlu
cC0+c2N0cF9scG9ydCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7
CisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkp
IHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2thZGRy
X2luICpzaW47CisKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKKwkJCWlmIChw
cmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOworCQkJaWYgKHByaXNv
bl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJICAgICAgICAgICAgICAg
ICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVs
dDoKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYK
KyNpZmRlZiBTQ1RQX01WUkYKKwkJZm5kID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVt
X3ZyZnM7IGkrKykgeworCQkJaWYgKGlucC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgeworCQkJ
CWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGZuZCA9PSAwKSB7CisJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorI2Vsc2UKKwkJaWYgKGlu
cC0+ZGVmX3ZyZl9pZCAhPSB2cmZfaWQpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBlcCBoYXMg
b25lIG9mIHRoZSBhZGRyZXNzZXMgKi8KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkJLyogV2UgYXJlIE5PVCBib3VuZCBhbGwsIHNv
IGxvb2sgZnVydGhlciAqLworCQkJaW50IG1hdGNoID0gMDsKKworCQkJTElTVF9GT1JFQUNIKGxh
ZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCisJCQkJaWYgKGxh
ZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIiVzOiBO
VUxMIGlmYVxuIiwgX19mdW5jX18pOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGxh
ZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7CisJCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOworCQkJCQljb250
aW51ZTsKKwkJCQl9CisJCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09
CisJCQkJICAgIHRvLT5zYV9mYW1pbHkpIHsKKwkJCQkJLyogc2VlIGlmIGl0IG1hdGNoZXMgKi8K
KyNpZmRlZiBJTkVUCisJCQkJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJ
CQkJc3RydWN0IHNvY2thZGRyX2luICppbnRmX2FkZHIsICpzaW47CisKKwkJCQkJCWludGZfYWRk
ciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKil0bzsKKwkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCQkJICAg
IGludGZfYWRkci0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQkJbWF0Y2ggPSAxOworCQkJCQkJ
CWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCQlpZiAo
ZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICppbnRmX2FkZHI2OworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCQkJ
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJCQkgICAgdG87CisJCQkJCQlpbnRm
X2FkZHI2ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luNjsKKworCQkJCQkJaWYgKFNDVFA2X0FS
RV9BRERSX0VRVUFMKHNpbjYsCisJCQkJCQkgICAgaW50Zl9hZGRyNikpIHsKKwkJCQkJCQltYXRj
aCA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7
CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqaW50Zl9hZGRyLCAqc2Nvbm47CisKKwkJCQkJ
CWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25uOworCQkJCQkJc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9
PQorCQkJCQkJICAgIGludGZfYWRkci0+c2Nvbm5fYWRkcikgeworCQkJCQkJCW1hdGNoID0gMTsK
KwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCisJCQkJfQorCQkJfQorCQkJ
aWYgKG1hdGNoID09IDApIHsKKwkJCQkvKiBUaGlzIGVuZHBvaW50IGRvZXMgbm90IGhhdmUgdGhp
cyBhZGRyZXNzICovCisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQl9CisJCS8qCisJCSAqIE9rIGlmIHdlIGhpdCBoZXJlIHRoZSBlcCBoYXMgdGhlIGFk
ZHJlc3MsIGRvZXMgaXQgaG9sZAorCQkgKiB0aGUgdGNiPworCQkgKi8KKwkJLyogWFhYOiBXaHkg
ZG9uJ3Qgd2UgVEFJTFFfRk9SRUFDSCB0aHJvdWdoIHNjdHBfYXNvY19saXN0PyAqLworCQlzdGNi
ID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBf
VENCX0xPQ0soc3RjYik7CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNi
LCB0bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiLT5ycG9ydCAhPSBycG9ydCkgewor
CQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2guICovCisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorCQlp
ZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNv
bnRpbnVlOworCQl9CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0
bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIERvZXMgdGhpcyBUQ0IgaGF2ZSBhIG1hdGNoaW5n
IGFkZHJlc3M/ICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQpIHsKKworCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgIT0gZnJvbS0+
c2FfZmFtaWx5KSB7CisJCQkJLyogbm90IHRoZSBzYW1lIGZhbWlseSwgY2FuJ3QgYmUgYSBtYXRj
aCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoIChmcm9tLT5zYV9mYW1pbHkpIHsK
KyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRy
X2luICpzaW4sICpyc2luOworCisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQt
PnJvLl9sX2FkZHI7CisJCQkJcnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tOworCQkJ
CWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCSAgICByc2luLT5zaW5fYWRkci5zX2Fk
ZHIpIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJ
CQkJKm5ldHAgPSBuZXQ7CisJCQkJCX0KKwkJCQkJLyogVXBkYXRlIHRoZSBlbmRwb2ludCBwb2lu
dGVyICovCisJCQkJCSppbnBfcCA9IGlucDsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjYsICpyc2luNjsKKworCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZu
ZXQtPnJvLl9sX2FkZHI7CisJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWZyb207
CisJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCisJCQkJICAgIHJzaW42KSkgewor
CQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7CisJCQkJCQkqbmV0
cCA9IG5ldDsKKwkJCQkJfQorCQkJCQkvKiBVcGRhdGUgdGhlIGVuZHBvaW50IHBvaW50ZXIgKi8K
KwkJCQkJKmlucF9wID0gaW5wOworCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJCXJl
dHVybiAoc3RjYik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJeworCQkJCXN0cnVjdCBzb2Nr
YWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRk
cl9jb25uICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKilmcm9tOworCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nvbm4tPnNjb25u
X2FkZHIpIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgewor
CQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCX0KKwkJCQkJLyogVXBkYXRlIHRoZSBlbmRwb2ludCBw
b2ludGVyICovCisJCQkJCSppbnBfcCA9IGlucDsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgor
CQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfQorCXJldHVy
biAoTlVMTCk7Cit9CisKKworLyoKKyAqIHJ1bGVzIGZvciB1c2UKKyAqCisgKiAxKSBJZiBJIHJl
dHVybiBhIE5VTEwgeW91IG11c3QgZGVjcmVtZW50IGFueSBJTlAgcmVmIGNudC4gMikgSWYgSSBm
aW5kIGFuCisgKiBzdGNiLCBib3RoIHdpbGwgYmUgbG9ja2VkIChsb2NrZWRfdGNiIGFuZCBzdGNi
KSBidXQgZGVjcmVtZW50IHdpbGwgYmUgZG9uZQorICogKGlmIGxvY2tlZCA9PSBOVUxMKS4gMykg
RGVjcmVtZW50IGhhcHBlbnMgb24gcmV0dXJuIE9OTFkgaWYgbG9ja2VkID09CisgKiBOVUxMLgor
ICovCisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKHN0
cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLAorICAgIHN0
cnVjdCBzY3RwX25ldHMgKipuZXRwLCBzdHJ1Y3Qgc29ja2FkZHIgKmxvY2FsLCBzdHJ1Y3Qgc2N0
cF90Y2IgKmxvY2tlZF90Y2IpCit7CisJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKKwlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9IE5VTEw7CisJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCXVpbnQxNl90IHJwb3J0OworCisJaW5wID0gKmlucF9wOwor
CXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVU
OgorCQlycG9ydCA9ICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlbW90ZSktPnNpbl9wb3J0KTsK
KwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCXJwb3J0
ID0gKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlbW90ZSktPnNpbjZfcG9ydCk7CisJCWJyZWFr
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJ
cnBvcnQgPSAoKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXJlbW90ZSktPnNjb25uX3BvcnQpOwor
CQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChs
b2NrZWRfdGNiKSB7CisJCS8qCisJCSAqIFVOLWxvY2sgc28gd2UgY2FuIGRvIHByb3BlciBsb2Nr
aW5nIGhlcmUgdGhpcyBvY2N1cnMgd2hlbgorCQkgKiBjYWxsZWQgZnJvbSBsb2FkX2FkZHJlc3Nl
c19mcm9tX2luaXQuCisJCSAqLworCQlhdG9taWNfYWRkX2ludCgmbG9ja2VkX3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7CisJfQorCVNDVFBfSU5Q
X0lORk9fUkxPQ0soKTsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSkgeworCQkvKi0KKwkJICogTm93IGVpdGhlciB0aGlzIGd1eSBpcyBvdXIgbGlzdGVuZXIg
b3IgaXQncyB0aGUKKwkJICogY29ubmVjdG9yLiBJZiBpdCBpcyB0aGUgb25lIHRoYXQgaXNzdWVk
IHRoZSBjb25uZWN0LCB0aGVuCisJCSAqIGl0J3Mgb25seSBjaGFuY2UgaXMgdG8gYmUgdGhlIGZp
cnN0IFRDQiBpbiB0aGUgbGlzdC4gSWYKKwkJICogaXQgaXMgdGhlIGFjY2VwdG9yLCB0aGVuIGRv
IHRoZSBzcGVjaWFsX2xvb2t1cCB0byBoYXNoCisJCSAqIGFuZCBmaW5kIHRoZSByZWFsIGlucC4K
KwkJICovCisJCWlmICgoaW5wLT5zY3RwX3NvY2tldCkgJiYgU0NUUF9JU19MSVNURU5JTkcoaW5w
KSkgeworCQkJLyogdG8gaXMgcGVlciBhZGRyLCBmcm9tIGlzIG15IGFkZHIgKi8KKyNpZm5kZWYg
U0NUUF9NVlJGCisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoaW5wX3AsIHJlbW90
ZSwgbG9jYWwsCisJCQkgICAgbmV0cCwgaW5wLT5kZWZfdnJmX2lkKTsKKwkJCWlmICgoc3RjYiAh
PSBOVUxMKSAmJiAobG9ja2VkX3RjYiA9PSBOVUxMKSkgeworCQkJCS8qIHdlIGhhdmUgYSBsb2Nr
ZWQgdGNiLCBsb3dlciByZWZjb3VudCAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJ
CQl9CisJCQlpZiAoKGxvY2tlZF90Y2IgIT0gTlVMTCkgJiYgKGxvY2tlZF90Y2IgIT0gc3RjYikp
IHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKKwkJCQlTQ1RQX1RD
Ql9MT0NLKGxvY2tlZF90Y2IpOworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGxvY2tlZF90Y2ItPnNjdHBf
ZXApOworCQkJfQorI2Vsc2UKKwkJCS8qLQorCQkJICogTVZSRiBpcyB0cmlja3ksIHdlIG11c3Qg
bG9vayBpbiBldmVyeSBWUkYKKwkJCSAqIHRoZSBlbmRwb2ludCBoYXMuCisJCQkgKi8KKwkJCWlu
dCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQkJc3Rj
YiA9IHNjdHBfdGNiX3NwZWNpYWxfbG9jYXRlKGlucF9wLCByZW1vdGUsIGxvY2FsLAorCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCBpbnAtPm1fdnJmX2lkc1tpXSk7CisJ
CQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChsb2NrZWRfdGNiID09IE5VTEwpKSB7CisJCQkJCS8q
IHdlIGhhdmUgYSBsb2NrZWQgdGNiLCBsb3dlciByZWZjb3VudCAqLworCQkJCQlTQ1RQX0lOUF9E
RUNSX1JFRihpbnApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKChsb2NrZWRfdGNiICE9
IE5VTEwpICYmIChsb2NrZWRfdGNiICE9IHN0Y2IpKSB7CisJCQkJCVNDVFBfSU5QX1JMT0NLKGxv
Y2tlZF90Y2ItPnNjdHBfZXApOworCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJ
CQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJ
CVNDVFBfSU5QX1JVTkxPQ0sobG9ja2VkX3RjYi0+c2N0cF9lcCk7CisJCQkJCWJyZWFrOworCQkJ
CX0KKwkJCX0KKyNlbmRpZgorCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQlyZXR1cm4g
KHN0Y2IpOworCQl9IGVsc2UgeworCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgeworCQkJCWdvdG8g
bnVsbF9yZXR1cm47CisJCQl9CisJCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJZ290byBudWxsX3JldHVybjsKKwkJ
CX0KKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisKKwkJCWlmIChzdGNiLT5ycG9ydCAhPSBycG9y
dCkgeworCQkJCS8qIHJlbW90ZSBwb3J0IGRvZXMgbm90IG1hdGNoLiAqLworCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQlnb3RvIG51bGxfcmV0dXJuOworCQkJfQorCQkJaWYgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJCWdvdG8gbnVsbF9yZXR1cm47CisJCQl9CisJCQlpZiAobG9j
YWwgJiYgIXNjdHBfZG9lc19zdGNiX293bl90aGlzX2FkZHIoc3RjYiwgbG9jYWwpKSB7CisJCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWdvdG8gbnVsbF9yZXR1cm47CisJCQl9CisJCQkv
KiBub3cgbG9vayBhdCB0aGUgbGlzdCBvZiByZW1vdGUgYWRkcmVzc2VzICovCisJCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJCWlmIChuZXQgPT0gKFRBSUxRX05FWFQobmV0LCBzY3RwX25leHQpKSkgeworCQkJ
CQlwYW5pYygiQ29ycnVwdCBuZXQgbGlzdCIpOworCQkJCX0KKyNlbmRpZgorCQkJCWlmIChuZXQt
PnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ICE9CisJCQkJICAgIHJlbW90ZS0+c2FfZmFtaWx5KSB7
CisJCQkJCS8qIG5vdCB0aGUgc2FtZSBmYW1pbHkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQor
CQkJCXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBB
Rl9JTkVUOgorCQkJCXsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpyc2luOworCisJ
CQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJCQkJICAgICZuZXQtPnJvLl9sX2Fk
ZHI7CisJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVtb3RlOworCQkJCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIHJzaW4tPnNpbl9hZGRyLnNfYWRkcikg
eworCQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJ
CQkqbmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsK
KwkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRf
dGNiICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCQkJ
fQorCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZs
b2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisKKwkJCQkJCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKKwkJCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCQkJcmV0dXJu
IChzdGNiKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42LCAqcnNpbjY7CisKKwkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+
cm8uX2xfYWRkcjsKKwkJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlbW90ZTsK
KwkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCisJCQkJCSAgICByc2luNikpIHsK
KwkJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7CisJCQkJCQkJ
Km5ldHAgPSBuZXQ7CisJCQkJCQl9CisJCQkJCQlpZiAobG9ja2VkX3RjYiA9PSBOVUxMKSB7CisJ
CQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJCX0gZWxzZSBpZiAobG9ja2VkX3Rj
YiAhPSBzdGNiKSB7CisJCQkJCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKKwkJCQkJCX0K
KwkJCQkJCWlmIChsb2NrZWRfdGNiKSB7CisJCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9j
a2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQkJfQorCQkJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJCQlyZXR1cm4gKHN0
Y2IpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqc2Nvbm4sICpyc2Nvbm47CisKKwkJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyOworCQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKilyZW1vdGU7CisJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nvbm4tPnNj
b25uX2FkZHIpIHsKKwkJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCQlpZiAobmV0cCAhPSBOVUxM
KSB7CisJCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCQl9CisJCQkJCQlpZiAobG9ja2VkX3RjYiA9
PSBOVUxMKSB7CisJCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJCX0gZWxzZSBp
ZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7CisJCQkJCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNi
KTsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiKSB7CisJCQkJCQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQkJfQorCQkJCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJ
CQlyZXR1cm4gKHN0Y2IpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorCQkJ
CWRlZmF1bHQ6CisJCQkJCS8qIFRTTkggKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJfSBlbHNlIHsKKwkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExH
T05FKSB7CisJCQlnb3RvIG51bGxfcmV0dXJuOworCQl9CisJCWhlYWQgPSAmaW5wLT5zY3RwX3Rj
Ymhhc2hbU0NUUF9QQ0JIQVNIX0FMTEFERFIocnBvcnQsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2hhc2htYXJrKV07CisJCUxJU1Rf
Rk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX3RjYmhhc2gpIHsKKwkJCWlmIChzdGNiLT5ycG9ydCAh
PSBycG9ydCkgeworCQkJCS8qIHJlbW90ZSBwb3J0IGRvZXMgbm90IG1hdGNoICovCisJCQkJY29u
dGludWU7CisJCQl9CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJaWYgKHN0Y2ItPmFzb2Mu
c3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxvY2FsICYmICFzY3RwX2Rv
ZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0Y2IsIGxvY2FsKSkgeworCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIG5vdyBsb29rIGF0IHRoZSBsaXN0
IG9mIHJlbW90ZSBhZGRyZXNzZXMgKi8KKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNv
Yy5uZXRzLCBzY3RwX25leHQpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJaWYgKG5ldCA9PSAo
VEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCkpKSB7CisJCQkJCXBhbmljKCJDb3JydXB0IG5ldCBs
aXN0Iik7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1p
bHkgIT0KKwkJCQkgICAgcmVtb3RlLT5zYV9mYW1pbHkpIHsKKwkJCQkJLyogbm90IHRoZSBzYW1l
IGZhbWlseSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3dpdGNoIChyZW1vdGUtPnNh
X2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisJCQkJeworCQkJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgKnJzaW47CisKKwkJCQkJc2luID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKQorCQkJCQkgICAgJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQkJcnNpbiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKilyZW1vdGU7CisJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9
PQorCQkJCQkgICAgcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQkvKiBmb3VuZCBpdCAq
LworCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJCSpuZXRwID0gbmV0OworCQkJCQkJ
fQorCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCQkJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGlucCk7CisJCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikgeworCQkJCQkJ
CVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCQl9CisJCQkJCQlpZiAobG9ja2VkX3Rj
YikgeworCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250
LCAxKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQkJCVNDVFBf
SU5QX0lORk9fUlVOTE9DSygpOworCQkJCQkJcmV0dXJuIChzdGNiKTsKKwkJCQkJfQorCQkJCQli
cmVhazsKKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6CisJ
CQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCAqcnNpbjY7CisKKwkJCQkJc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJCSAgICAmbmV0LT5yby5fbF9hZGRyOwor
CQkJCQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVtb3RlOworCQkJCQlpZiAoU0NU
UDZfQVJFX0FERFJfRVFVQUwoc2luNiwKKwkJCQkJICAgIHJzaW42KSkgeworCQkJCQkJLyogZm91
bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJCQkqbmV0cCA9IG5ldDsK
KwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsKKwkJCQkJCQlTQ1RQX0lO
UF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRfdGNiICE9IHN0Y2IpIHsK
KwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCQkJfQorCQkJCQkJaWYgKGxv
Y2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJ
CQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQkJCXJldHVybiAoc3RjYik7CisJCQkJCX0K
KwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJCWNhc2UgQUZfQ09OTjoKKwkJCQl7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29u
biwgKnJzY29ubjsKKworCQkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKSZuZXQt
PnJvLl9sX2FkZHI7CisJCQkJCXJzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXJlbW90
ZTsKKwkJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IHJzY29ubi0+c2Nvbm5fYWRkcikgewor
CQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJCQkq
bmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsKKwkJ
CQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRfdGNi
ICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCQkJfQor
CQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2Nr
ZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQkJCXJldHVybiAoc3Rj
Yik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJ
CQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCX0KKwl9CitudWxsX3JldHVybjoKKwkvKiBjbGVhbiB1cCBmb3IgcmV0dXJu
aW5nIG51bGwgKi8KKwlpZiAobG9ja2VkX3RjYikgeworCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90
Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJfQorCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsK
KwkvKiBub3QgZm91bmQgKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisKKy8qCisgKiBGaW5kIGFu
IGFzc29jaWF0aW9uIGZvciBhIHNwZWNpZmljIGVuZHBvaW50IHVzaW5nIHRoZSBhc3NvY2lhdGlv
biBpZCBnaXZlbgorICogb3V0IGluIHRoZSBDT01NX1VQIG5vdGlmaWNhdGlvbgorICovCitzdHJ1
Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9ja2VkKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2NrKQoreworCS8q
CisJICogVXNlIG15IHRoZSBhc3NvY19pZCB0byBmaW5kIGEgZW5kcG9pbnQKKwkgKi8KKwlzdHJ1
Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwl1aW50MzJf
dCBpZDsKKworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5URigiVFNOSCBlcF9hc3Nv
Y2lkXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCVNDVFBfUFJJTlRGKCJUU05IIGVwX2Fz
c29jaWQwXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWQgPSAodWludDMyX3QpYXNvY19p
ZDsKKwloZWFkID0gJmlucC0+c2N0cF9hc29jaWRoYXNoW1NDVFBfUENCSEFTSF9BU09DKGlkLCBp
bnAtPmhhc2hhc29jaWRtYXJrKV07CisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQkvKiBpbnZhbGlk
IGlkIFRTTkggKi8KKwkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNzb2NpZDFcbiIpOworCQlyZXR1
cm4gKE5VTEwpOworCX0KKwlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF90Y2Jhc29jaWRo
YXNoKSB7CisJCWlmIChzdGNiLT5hc29jLmFzc29jX2lkID09IGlkKSB7CisJCQlpZiAoaW5wICE9
IHN0Y2ItPnNjdHBfZXApIHsKKwkJCQkvKgorCQkJCSAqIHNvbWUgb3RoZXIgZ3V5IGhhcyB0aGUg
c2FtZSBpZCBhY3RpdmUgKGlkCisJCQkJICogY29sbGlzaW9uID8/KS4KKwkJCQkgKi8KKwkJCQlT
Q1RQX1BSSU5URigiVFNOSCBlcF9hc3NvY2lkMlxuIik7CisJCQkJY29udGludWU7CisJCQl9CisJ
CQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsK
KwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh3YW50X2xvY2spIHsKKwkJCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJuIChzdGNiKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5V
TEwpOworfQorCisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
c29jaWQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc2N0cF9hc3NvY190IGFzb2NfaWQsIGludCB3
YW50X2xvY2spCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwlzdGNiID0gc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9ja2VkKGlucCwgYXNvY19p
ZCwgd2FudF9sb2NrKTsKKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJcmV0dXJuIChzdGNiKTsK
K30KKworCisvKgorICogRW5kcG9pbnQgcHJvYmUgZXhwZWN0cyB0aGF0IHRoZSBJTlBfSU5GTyBp
cyBsb2NrZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pbnBjYiAqCitzY3RwX2VuZHBvaW50
X3Byb2JlKHN0cnVjdCBzb2NrYWRkciAqbmFtLCBzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmhlYWQsCisJ
CSAgICB1aW50MTZfdCBscG9ydCwgdWludDMyX3QgdnJmX2lkKQoreworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworI2lmZGVmIElORVQKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbnRmX2FkZHI2OworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29u
bjsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCWludCBpOworI2VuZGlmCisJaW50ICBmbmQ7
CisKKyNpZmRlZiBJTkVUCisJc2luID0gTlVMTDsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc2lu
NiA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2Nvbm4gPSBO
VUxMOworI2VuZGlmCisJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwlj
YXNlIEFGX0lORVQ6CisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluYW07CisJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKiluYW07CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nv
bm4gKiluYW07CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogdW5zdXBwb3J0ZWQg
ZmFtaWx5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKGhlYWQgPT0gTlVMTCkKKwkJ
cmV0dXJuIChOVUxMKTsKKworCUxJU1RfRk9SRUFDSChpbnAsIGhlYWQsIHNjdHBfaGFzaCkgewor
CQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNv
bnRpbnVlOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRBTEwpICYmCisJCSAgICAoaW5wLT5zY3RwX2xwb3J0ID09IGxwb3J0KSkgeworCQkJLyogZ290
IGl0ICovCisJCQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2Fz
ZSBBRl9JTkVUOgorCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRfVjYpICYmCisJCQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkgeworCQkJCQkvKiBJUHY0
IG9uIGEgSVB2NiBzb2NrZXQgd2l0aCBPTkxZIElQdjYgc2V0ICovCisJCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAor
CQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2VuZGlmCisJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkvKiBB
IFY2IGFkZHJlc3MgYW5kIHRoZSBlbmRwb2ludCBpcyBOT1QgYm91bmQgVjYgKi8KKwkJCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKSB7CisJCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9
IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQljb250aW51ZTsKKwkJCQl9
CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJ
CX0KKwkJCS8qIGRvZXMgYSBWUkYgaWQgbWF0Y2g/ICovCisJCQlmbmQgPSAwOworI2lmZGVmIFND
VFBfTVZSRgorCQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJCWlm
IChpbnAtPm1fdnJmX2lkc1tpXSA9PSB2cmZfaWQpIHsKKwkJCQkJZm5kID0gMTsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQorI2Vsc2UKKwkJCWlmIChpbnAtPmRlZl92cmZfaWQgPT0gdnJmX2lk
KQorCQkJCWZuZCA9IDE7CisjZW5kaWYKKworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
aWYgKCFmbmQpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gKGlucCk7CisJCX0KKwkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCX0KKwlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWZkZWYg
SU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQURE
Ul9BTlkpIHsKKwkJCS8qIENhbid0IGh1bnQgZm9yIG9uZSB0aGF0IGhhcyBubyBhZGRyZXNzIHNw
ZWNpZmllZCAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVE
KCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkvKiBDYW4ndCBodW50IGZvciBvbmUgdGhhdCBoYXMg
bm8gYWRkcmVzcyBzcGVjaWZpZWQgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQlp
ZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gTlVMTCkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQor
CQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwkvKgorCSAqIG9rLCBu
b3QgYm91bmQgdG8gYWxsIHNvIHNlZSBpZiB3ZSBjYW4gZmluZCBhIEVQIGJvdW5kIHRvIHRoaXMK
KwkgKiBhZGRyZXNzLgorCSAqLworCUxJU1RfRk9SRUFDSChpbnAsIGhlYWQsIHNjdHBfaGFzaCkg
eworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CWNvbnRpbnVlOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRBTEwpKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJ
fQorCQkvKgorCQkgKiBPayB0aGlzIGNvdWxkIGJlIGEgbGlrZWx5IGNhbmRpZGF0ZSwgbG9vayBh
dCBhbGwgb2YgaXRzCisJCSAqIGFkZHJlc3NlcworCQkgKi8KKwkJaWYgKGlucC0+c2N0cF9scG9y
dCAhPSBscG9ydCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJ
CX0KKwkJLyogZG9lcyBhIFZSRiBpZCBtYXRjaD8gKi8KKwkJZm5kID0gMDsKKyNpZmRlZiBTQ1RQ
X01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJaWYgKGlu
cC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgeworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKyNlbHNlCisJCWlmIChpbnAtPmRlZl92cmZfaWQgPT0gdnJmX2lkKQorCQkJZm5k
ID0gMTsKKworI2VuZGlmCisJCWlmICghZm5kKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQljb250aW51ZTsKKwkJfQorCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRk
cl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICIlczogTlVMTCBpZmFcbiIsCisJCQkJCV9fZnVu
Y19fKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAi
T2sgbGFkZHItPmlmYTolcCBpcyBwb3NzaWJsZSwgIiwKKwkJCQkodm9pZCAqKWxhZGRyLT5pZmEp
OworCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVE
KSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJIdWggSUZBIGJlaW5nIGRlbGV0ZWRc
biIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IG5hbS0+c2FfZmFtaWx5KSB7CisJCQkJLyogcG9zc2libGUsIHNlZSBpZiBp
dCBtYXRjaGVzICovCisJCQkJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwkJCQljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJCWlmIChzaW4g
PT0gTlVMTCkgeworCQkJCQkJLyogVFNOSCAqLworCQkJCQkJYnJlYWs7CisJCQkJCX0KKyNlbmRp
ZgorCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIGxhZGRyLT5pZmEt
PmFkZHJlc3Muc2luLnNpbl9hZGRyLnNfYWRkcikgeworCQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJCQkJcmV0dXJuIChpbnApOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQlpbnRmX2FkZHI2ID0gJmxhZGRy
LT5pZmEtPmFkZHJlc3Muc2luNjsKKwkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYs
CisJCQkJCSAgICBpbnRmX2FkZHI2KSkgeworCQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJCQkJcmV0dXJuIChpbnApOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJaWYgKHNjb25uLT5z
Y29ubl9hZGRyID09IGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Nvbm4uc2Nvbm5fYWRkcikgeworCQkJ
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQkJcmV0dXJuIChpbnApOworCQkJCQl9CisJ
CQkJCWJyZWFrOworI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitzdGF0aWMgc3RydWN0IHNjdHBfaW5w
Y2IgKgorc2N0cF9pc3BvcnRfaW51c2Uoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qg
bHBvcnQsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmhlYWQ7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKnRfaW5wOworI2lmZGVmIFNDVFBfTVZSRgorCWludCBpOworI2Vu
ZGlmCisJaW50IGZuZDsKKworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1ND
VFBfUENCSEFTSF9BTExBRERSKGxwb3J0LAorCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykp
XTsKKwlMSVNUX0ZPUkVBQ0godF9pbnAsIGhlYWQsIHNjdHBfaGFzaCkgeworCQlpZiAodF9pbnAt
PnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGlzIGl0IGlu
IHRoZSBWUkYgaW4gcXVlc3Rpb24gKi8KKwkJZm5kID0gMDsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJ
Zm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJaWYgKHRfaW5wLT5tX3Zy
Zl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
fQorI2Vsc2UKKwkJaWYgKHRfaW5wLT5kZWZfdnJmX2lkID09IHZyZl9pZCkKKwkJCWZuZCA9IDE7
CisjZW5kaWYKKwkJaWYgKCFmbmQpCisJCQljb250aW51ZTsKKworCQkvKiBUaGlzIG9uZSBpcyBp
biB1c2UuICovCisJCS8qIGNoZWNrIHRoZSB2Ni92NCBiaW5kaW5nIGlzc3VlICovCisJCWlmICgo
dF9pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJICAgIFND
VFBfSVBWNl9WNk9OTFkodF9pbnApKSB7CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQkvKiBjb2xsaXNpb24gaW4gVjYgc3BhY2UgKi8KKwkJ
CQlyZXR1cm4gKHRfaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogaW5wIGlzIEJPVU5EX1Y0IG5v
IGNvbmZsaWN0ICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxzZSBpZiAodF9pbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworCQkJLyogdF9pbnAgaXMgYm91
bmQgdjQgYW5kIHY2LCBjb25mbGljdCBhbHdheXMgKi8KKwkJCXJldHVybiAodF9pbnApOworCQl9
IGVsc2UgeworCQkJLyogdF9pbnAgaXMgYm91bmQgb25seSBWNCAqLworCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQVjZf
VjZPTkxZKGlucCkpIHsKKwkJCQkvKiBubyBjb25mbGljdCAqLworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJLyogZWxzZSBmYWxsIHRocm91Z2ggdG8gY29uZmxpY3QgKi8KKwkJfQorCQlyZXR1cm4g
KHRfaW5wKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitpbnQKK3NjdHBfc3dhcF9pbnBj
Yl9mb3JfbGlzdGVuKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7CisJLyogRm9yIDEtMi0xIHdp
dGggcG9ydCByZXVzZSAqLworCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0
cF9pbnBjYiAqdGlucCwgKm5pbnA7CisKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFND
VFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpIHsKKwkJLyogb25seSB3b3JrcyB3aXRoIHBvcnQgcmV1
c2Ugb24gKi8KKwkJcmV0dXJuICgtMSk7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCWhlYWQgPSAmU0NU
UF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGlucC0+c2N0cF9s
cG9ydCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0JBU0VfSU5G
TyhoYXNobWFyaykpXTsKKwkvKiBLaWNrIG91dCBhbGwgbm9uLWxpc3RlbmVycyB0byB0aGUgVENQ
IGhhc2ggKi8KKwlMSVNUX0ZPUkVBQ0hfU0FGRSh0aW5wLCBoZWFkLCBzY3RwX2hhc2gsIG5pbnAp
IHsKKwkJaWYgKHRpbnAtPnNjdHBfbHBvcnQgIT0gaW5wLT5zY3RwX2xwb3J0KSB7CisJCQljb250
aW51ZTsKKwkJfQorCQlpZiAodGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9BTExHT05FKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAo
U0NUUF9JU19MSVNURU5JTkcodGlucCkpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBfSU5Q
X1dMT0NLKHRpbnApOworCQlMSVNUX1JFTU9WRSh0aW5wLCBzY3RwX2hhc2gpOworCQloZWFkID0g
JlNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUih0aW5w
LT5zY3RwX2xwb3J0LCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykpXTsKKwkJdGlucC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MOworCQlMSVNUX0lOU0VSVF9IRUFE
KGhlYWQsIHRpbnAsIHNjdHBfaGFzaCk7CisJCVNDVFBfSU5QX1dVTkxPQ0sodGlucCk7CisJfQor
CVNDVFBfSU5QX1dMT0NLKGlucCk7CisJLyogUHVsbCBmcm9tIHdoZXJlIGhlIHdhcyAqLworCUxJ
U1RfUkVNT1ZFKGlucCwgc2N0cF9oYXNoKTsKKwlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0w7CisJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2VwaGFzaClb
U0NUUF9QQ0JIQVNIX0FMTEFERFIoaW5wLT5zY3RwX2xwb3J0LCBTQ1RQX0JBU0VfSU5GTyhoYXNo
bWFyaykpXTsKKwlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGlucCwgc2N0cF9oYXNoKTsKKwlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlTQ1RQX0lOUF9JTkZP
X1dVTkxPQ0soKTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0cnVjdCBzY3RwX2lucGNiICoKK3Nj
dHBfcGNiX2ZpbmRlcChzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwgaW50IGZpbmRfdGNwX3Bvb2wsIGlu
dCBoYXZlX2xvY2ssCisJCXVpbnQzMl90IHZyZl9pZCkKK3sKKwkvKgorCSAqIEZpcnN0IHdlIGNo
ZWNrIHRoZSBoYXNoIHRhYmxlIHRvIHNlZSBpZiBzb21lb25lIGhhcyB0aGlzIHBvcnQKKwkgKiBi
b3VuZCB3aXRoIGp1c3QgdGhlIHBvcnQuCisJICovCisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
KwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmhlYWQ7CisJaW50IGxwb3J0OworCXVuc2lnbmVkIGludCBp
OworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisjZW5kaWYKKwor
CXN3aXRjaCAobmFtLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgor
CQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbmFtOworCQlscG9ydCA9IHNpbi0+c2luX3Bv
cnQ7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiluYW07CisJCWxwb3J0ID0gc2luNi0+c2luNl9w
b3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNl
IEFGX0NPTk46CisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopbmFtOworCQlscG9y
dCA9IHNjb25uLT5zY29ubl9wb3J0OworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCS8qCisJICogSSBjb3VsZCBjaGVhdCBoZXJlIGFuZCBqdXN0IGNh
c3QgdG8gb25lIG9mIHRoZSB0eXBlcyBidXQgd2Ugd2lsbAorCSAqIGRvIGl0IHJpZ2h0LiBJdCBh
bHNvIHByb3ZpZGVzIHRoZSBjaGVjayBhZ2FpbnN0IGFuIFVuc3VwcG9ydGVkCisJICogdHlwZSB0
b28uCisJICovCisJLyogRmluZCB0aGUgaGVhZCBvZiB0aGUgQUxMQUREUiBjaGFpbiAqLworCWlm
IChoYXZlX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJfQorCWhlYWQg
PSAmU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGxwb3J0
LAorCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykpXTsKKwlpbnAgPSBzY3RwX2VuZHBvaW50
X3Byb2JlKG5hbSwgaGVhZCwgbHBvcnQsIHZyZl9pZCk7CisKKwkvKgorCSAqIElmIHRoZSBUQ1Ag
bW9kZWwgZXhpc3RzIGl0IGNvdWxkIGJlIHRoYXQgdGhlIG1haW4gbGlzdGVuaW5nCisJICogZW5k
cG9pbnQgaXMgZ29uZSBidXQgdGhlcmUgc3RpbGwgZXhpc3RzIGEgY29ubmVjdGVkIHNvY2tldCBm
b3IgdGhpcworCSAqIGd1eS4gSWYgc28gd2UgY2FuIHJldHVybiB0aGUgZmlyc3Qgb25lIHRoYXQg
d2UgZmluZC4gVGhpcyBtYXkgTk9UCisJICogYmUgdGhlIGNvcnJlY3Qgb25lIHNvIHRoZSBjYWxs
ZXIgc2hvdWxkIGJlIHdhcnkgb24gdGhlIHJldHVybmVkIElOUC4KKwkgKiBDdXJyZW50bHkgdGhl
IG9ubHkgY2FsbGVyIHRoYXQgc2V0cyBmaW5kX3RjcF9wb29sIGlzIGluIGJpbmR4IHdoZXJlCisJ
ICogd2UgYXJlIHZlcmlmeWluZyB0aGF0IGEgdXNlciBDQU4gYmluZCB0aGUgYWRkcmVzcy4gSGUg
ZWl0aGVyCisJICogaGFzIGJvdW5kIGl0IGFscmVhZHksIG9yIHNvbWVvbmUgZWxzZSBoYXMsIG9y
IGl0cyBvcGVuIHRvIGJpbmQsCisJICogc28gdGhpcyBpcyBnb29kIGVub3VnaC4KKwkgKi8KKwlp
ZiAoaW5wID09IE5VTEwgJiYgZmluZF90Y3BfcG9vbCkgeworCQlmb3IgKGkgPSAwOyBpIDwgU0NU
UF9CQVNFX0lORk8oaGFzaHRjcG1hcmspICsgMTsgaSsrKSB7CisJCQloZWFkID0gJlNDVFBfQkFT
RV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtpXTsKKwkJCWlucCA9IHNjdHBfZW5kcG9pbnRfcHJvYmUo
bmFtLCBoZWFkLCBscG9ydCwgdnJmX2lkKTsKKwkJCWlmIChpbnApIHsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJfQorCX0KKwlpZiAoaW5wKSB7CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJfQor
CWlmIChoYXZlX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwl9CisJ
cmV0dXJuIChpbnApOworfQorCisKKy8qCisgKiBGaW5kIGFuIGFzc29jaWF0aW9uIGZvciBhbiBl
bmRwb2ludCB3aXRoIHRoZSBwb2ludGVyIHRvIHdob20geW91IHdhbnQgdG8KKyAqIHNlbmQgdG8g
YW5kIHRoZSBlbmRwb2ludCBwb2ludGVyLiBUaGUgYWRkcmVzcyBjYW4gYmUgSVB2NCBvciBJUHY2
LiBXZSBtYXkKKyAqIG5lZWQgdG8gY2hhbmdlIHRoZSAqdG8gdG8gc29tZSBvdGhlciBzdHJ1Y3Qg
bGlrZSBhIG1idWYuLi4KKyAqLworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0
aW9uX2FkZHJfc2Eoc3RydWN0IHNvY2thZGRyICpmcm9tLCBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAor
ICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCBp
bnQgZmluZF90Y3BfcG9vbCwKKyAgICB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucCA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJU0NUUF9JTlBf
SU5GT19STE9DSygpOworCWlmIChmaW5kX3RjcF9wb29sKSB7CisJCWlmIChpbnBfcCAhPSBOVUxM
KSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoaW5wX3AsIGZyb20sIHRvLCBu
ZXRwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7CisJCX0gZWxz
ZSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoJmlucCwgZnJvbSwgdG8sIG5l
dHAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkKTsKKwkJfQorCQlp
ZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCXJldHVy
biAoc3RjYik7CisJCX0KKwl9CisJaW5wID0gc2N0cF9wY2JfZmluZGVwKHRvLCAwLCAxLCB2cmZf
aWQpOworCWlmIChpbnBfcCAhPSBOVUxMKSB7CisJCSppbnBfcCA9IGlucDsKKwl9CisJU0NUUF9J
TlBfSU5GT19SVU5MT0NLKCk7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCS8qCisJICogb2ssIHdlIGhhdmUgYW4gZW5kcG9pbnQsIG5vdyBsZXRzIGZpbmQgdGhl
IGFzc29jIGZvciBpdCAoaWYgYW55KQorCSAqIHdlIG5vdyBwbGFjZSB0aGUgc291cmNlIGFkZHJl
c3Mgb3IgZnJvbSBpbiB0aGUgdG8gb2YgdGhlIGZpbmQKKwkgKiBlbmRwb2ludCBjYWxsLiBTaW5j
ZSBpbiByZWFsaXR5IHRoaXMgY2hhaW4gaXMgdXNlZCBmcm9tIHRoZQorCSAqIGluYm91bmQgcGFj
a2V0IHNpZGUuCisJICovCisJaWYgKGlucF9wICE9IE5VTEwpIHsKKwkJc3RjYiA9IHNjdHBfZmlu
ZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGZyb20sIG5ldHAsIHRvLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwl9IGVsc2UgeworCQlzdGNiID0gc2N0
cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBmcm9tLCBuZXRwLCB0bywKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisJfQorCXJldHVybiAoc3RjYik7
Cit9CisKKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGdydWIgdGhyb3VnaCB0aGUgbWJ1ZiB0
aGF0IGlzIGEgSU5JVCBvciBJTklULUFDSyBhbmQKKyAqIGZpbmQgYWxsIGFkZHJlc3NlcyB0aGF0
IHRoZSBzZW5kZXIgaGFzIHNwZWNpZmllZCBpbiBhbnkgYWRkcmVzcyBsaXN0LiBFYWNoCisgKiBh
ZGRyZXNzIHdpbGwgYmUgdXNlZCB0byBsb29rdXAgdGhlIFRDQiBhbmQgc2VlIGlmIG9uZSBleGl0
cy4KKyAqLworc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9z
cGVjaWFsX2FkZHIoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgc3RydWN0IHNjdHBo
ZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0
cCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
cGhkciwgcGFyYW1fYnVmOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJdWludDE2X3QgcHR5cGU7CisjZW5kaWYKKwl1aW50MTZf
dCBwbGVuOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNDsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKyNpZmRl
ZiBJTkVUCisJbWVtc2V0KCZzaW40LCAwLCBzaXplb2Yoc2luNCkpOworI2lmZGVmIEhBVkVfU0lO
X0xFTgorCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKKyNlbmRpZgorCXNpbjQuc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisJc2luNC5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJbWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2luNikpOworI2lmZGVmIEhB
VkVfU0lONl9MRU4KKwlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHNpbjYpOworI2VuZGlmCisJc2lu
Ni5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXNpbjYuc2luNl9wb3J0ID0gc2gtPnNyY19wb3J0
OworI2VuZGlmCisKKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOwor
CisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLCBzaXpl
b2YocGFyYW1fYnVmKSk7CisJd2hpbGUgKHBoZHIgIT0gTlVMTCkgeworCQkvKiBub3cgd2UgbXVz
dCBzZWUgaWYgd2Ugd2FudCB0aGUgcGFyYW1ldGVyICovCisjaWYgZGVmaW5lZChJTkVUKSB8fCBk
ZWZpbmVkKElORVQ2KQorCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOworI2VuZGlm
CisJCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOworCQlpZiAocGxlbiA9PSAwKSB7
CisJCQlicmVhazsKKwkJfQorI2lmZGVmIElORVQKKwkJaWYgKHB0eXBlID09IFNDVFBfSVBWNF9B
RERSRVNTICYmCisJCSAgICBwbGVuID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJh
bSkpIHsKKwkJCS8qIEdldCB0aGUgcmVzdCBvZiB0aGUgYWRkcmVzcyAqLworCQkJc3RydWN0IHNj
dHBfaXB2NGFkZHJfcGFyYW0gaXA0X3BhcmFtLCAqcDQ7CisKKwkJCXBoZHIgPSBzY3RwX2dldF9u
ZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmaXA0
X3BhcmFtLCBzaXplb2YoaXA0X3BhcmFtKSk7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJ
cmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXA0ID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFt
ICopcGhkcjsKKwkJCW1lbWNweSgmc2luNC5zaW5fYWRkciwgJnA0LT5hZGRyLCBzaXplb2YocDQt
PmFkZHIpKTsKKwkJCS8qIGxvb2sgaXQgdXAgKi8KKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hZGRyKGlucF9wLAorCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNCwgbmV0
cCwgZHN0LCBOVUxMKTsKKwkJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCQlyZXR1cm4gKHN0Y2Ip
OworCQkJfQorCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAocHR5cGUgPT0gU0NUUF9J
UFY2X0FERFJFU1MgJiYKKwkJICAgIHBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtKSkgeworCQkJLyogR2V0IHRoZSByZXN0IG9mIHRoZSBhZGRyZXNzICovCisJCQlzdHJ1
Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSBpcDZfcGFyYW0sICpwNjsKKworCQkJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KSZpcDZfcGFyYW0sIHNpemVvZihpcDZfcGFyYW0pKTsKKwkJCWlmIChwaGRyID09IE5VTEwpIHsK
KwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJcDYgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJf
cGFyYW0gKilwaGRyOworCQkJbWVtY3B5KCZzaW42LnNpbjZfYWRkciwgJnA2LT5hZGRyLCBzaXpl
b2YocDYtPmFkZHIpKTsKKwkJCS8qIGxvb2sgaXQgdXAgKi8KKwkJCXN0Y2IgPSBzY3RwX2ZpbmRh
c3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLAorCQkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu
NiwgbmV0cCwgZHN0LCBOVUxMKTsKKwkJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCQlyZXR1cm4g
KHN0Y2IpOworCQkJfQorCQl9CisjZW5kaWYKKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4p
OworCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYsCisJ
CQkJCSAgIHNpemVvZihwYXJhbV9idWYpKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworc3Rh
dGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY19ieV92dGFnKHN0cnVjdCBzb2Nr
YWRkciAqZnJvbSwgc3RydWN0IHNvY2thZGRyICp0bywgdWludDMyX3QgdnRhZywKKwkJICAgICAg
IHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50
MTZfdCBycG9ydCwKKwkJICAgICAgIHVpbnQxNl90IGxwb3J0LCBpbnQgc2tpcF9zcmNfY2hlY2ss
IHVpbnQzMl90IHZyZl9pZCwgdWludDMyX3QgcmVtb3RlX3RhZykKK3sKKwkvKgorCSAqIFVzZSBt
eSB2dGFnIHRvIGhhc2guIElmIHdlIGZpbmQgaXQgd2UgdGhlbiB2ZXJpZnkgdGhlIHNvdXJjZSBh
ZGRyCisJICogaXMgaW4gdGhlIGFzc29jLiBJZiBhbGwgZ29lcyB3ZWxsIHdlIHNhdmUgYSBiaXQg
b24gcmVjIG9mIGEKKwkgKiBwYWNrZXQuCisJICovCisJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVh
ZDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworI2lm
ZGVmIFNDVFBfTVZSRgorCXVuc2lnbmVkIGludCBpOworI2VuZGlmCisKKwlTQ1RQX0lOUF9JTkZP
X1JMT0NLKCk7CisJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BD
QkhBU0hfQVNPQyh2dGFnLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOworCUxJU1Rf
Rk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJCVNDVFBfSU5QX1JMT0NLKHN0Y2It
PnNjdHBfZXApOworCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXAp
OworCQkJY29udGludWU7CisJCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8
IHN0Y2ItPnNjdHBfZXAtPm51bV92cmZzOyBpKyspIHsKKwkJCWlmIChzdGNiLT5zY3RwX2VwLT5t
X3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGkg
PT0gc3RjYi0+c2N0cF9lcC0+bnVtX3ZyZnMpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJCWNvbnRpbnVlOworCQl9CisjZWxzZQorCQlpZiAoc3RjYi0+c2N0cF9lcC0+ZGVmX3ZyZl9p
ZCAhPSB2cmZfaWQpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJCQlj
b250aW51ZTsKKwkJfQorI2VuZGlmCisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCVNDVFBfSU5Q
X1JVTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJCWlmIChzdGNiLT5hc29jLm15X3Z0YWcgPT0gdnRh
ZykgeworCQkJLyogY2FuZGlkYXRlICovCisJCQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsK
KwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAo
c3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCAhPSBscG9ydCkgeworCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYg
U0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIFJSUzpOZWVkIHRvYWRkciBjaGVjayBoZXJl
ICovCisJCQlpZiAoc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0bykgPT0gMCkg
eworCQkJICAgICAgICAvKiBFbmRwb2ludCBkb2VzIG5vdCBvd24gdGhpcyBhZGRyZXNzICovCisJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHJl
bW90ZV90YWcpIHsKKwkJCQkvKiBJZiB3ZSBoYXZlIGJvdGggdnRhZ3MgdGhhdCdzIGFsbCB3ZSBt
YXRjaCBvbiAqLworCQkJCWlmIChzdGNiLT5hc29jLnBlZXJfdnRhZyA9PSByZW1vdGVfdGFnKSB7
CisJCQkJCS8qIElmIGJvdGggdGFncyBtYXRjaCB3ZSBjb25zaWRlciBpdCBjb25jbHVzaXZlCisJ
CQkJCSAqIGFuZCBjaGVjayBOTyBzb3VyY2UvZGVzdGluYXRpb24gYWRkcmVzc2VzCisJCQkJCSAq
LworCQkJCQlnb3RvIGNvbmNsdXNpdmU7CisJCQkJfQorCQkJfQorCQkJaWYgKHNraXBfc3JjX2No
ZWNrKSB7CisJCQljb25jbHVzaXZlOgorCQkJICAgICAgICBpZiAoZnJvbSkgeworCQkJCQkqbmV0
cCA9IHNjdHBfZmluZG5ldChzdGNiLCBmcm9tKTsKKwkJCQl9IGVsc2UgeworCQkJCQkqbmV0cCA9
IE5VTEw7CS8qIHVua25vd24gKi8KKwkJCQl9CisJCQkJaWYgKGlucF9wKQorCQkJCQkqaW5wX3Ag
PSBzdGNiLT5zY3RwX2VwOworCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCXJldHVy
biAoc3RjYik7CisJCQl9CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgZnJvbSk7CisJCQlp
ZiAobmV0KSB7CisJCQkJLyogeWVwIGl0cyBoaW0uICovCisJCQkJKm5ldHAgPSBuZXQ7CisJCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdnRhZ2V4cHJlc3MpOworCQkJCSppbnBfcCA9IHN0Y2ItPnNj
dHBfZXA7CisJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJcmV0dXJuIChzdGNiKTsK
KwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBub3QgaGltLCB0aGlzIHNob3VsZCBvbmx5IGhh
cHBlbiBpbiByYXJlCisJCQkJICogY2FzZXMgc28gSSBwZWcgaXQuCisJCQkJICovCisJCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfdnRhZ2JvZ3VzKTsKKwkJCX0KKwkJfQorCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJfQorCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCXJldHVybiAoTlVMTCk7
Cit9CisKKworLyoKKyAqIEZpbmQgYW4gYXNzb2NpYXRpb24gd2l0aCB0aGUgcG9pbnRlciB0byB0
aGUgaW5ib3VuZCBJUCBwYWNrZXQuIFRoaXMgY2FuIGJlCisgKiBhIElQdjQgb3IgSVB2NiBwYWNr
ZXQuCisgKi8KK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyKHN0
cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1
Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2No
dW5raGRyICpjaCwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICoqbmV0cCwgdWludDMyX3QgdnJmX2lkKQoreworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
KwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJaWYgKHNoLT52X3RhZykgeworCQkvKiB3ZSBv
bmx5IGdvIGRvd24gdGhpcyBwYXRoIGlmIHZ0YWcgaXMgbm9uLXplcm8gKi8KKwkJc3RjYiA9IHNj
dHBfZmluZGFzc29jX2J5X3Z0YWcoc3JjLCBkc3QsIG50b2hsKHNoLT52X3RhZyksCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlucF9wLCBuZXRwLCBzaC0+c3JjX3BvcnQsIHNoLT5k
ZXN0X3BvcnQsIDAsIHZyZl9pZCwgMCk7CisJCWlmIChzdGNiKSB7CisJCQlyZXR1cm4gKHN0Y2Ip
OworCQl9CisJfQorCisJaWYgKGlucF9wKSB7CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlv
bl9hZGRyX3NhKHNyYywgZHN0LCBpbnBfcCwgbmV0cCwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMSwgdnJmX2lkKTsKKwkJaW5wID0gKmlucF9wOworCX0gZWxzZSB7CisJ
CXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHNyYywgZHN0LCAmaW5wLCBuZXRw
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCB2cmZfaWQpOworCX0K
KwlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgInN0Y2I6JXAgaW5wOiVwXG4iLCAodm9pZCAqKXN0
Y2IsICh2b2lkICopaW5wKTsKKwlpZiAoc3RjYiA9PSBOVUxMICYmIGlucCkgeworCQkvKiBGb3Vu
ZCBhIEVQIGJ1dCBub3QgdGhpcyBhZGRyZXNzICovCisJCWlmICgoY2gtPmNodW5rX3R5cGUgPT0g
U0NUUF9JTklUSUFUSU9OKSB8fAorCQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElB
VElPTl9BQ0spKSB7CisJCQkvKi0KKwkJCSAqIHNwZWNpYWwgaG9vaywgd2UgZG8gTk9UIHJldHVy
biBsaW5wIG9yIGFuCisJCQkgKiBhc3NvY2lhdGlvbiB0aGF0IGlzIGxpbmtlZCB0byBhbiBleGlz
dGluZworCQkJICogYXNzb2NpYXRpb24gdGhhdCBpcyB1bmRlciB0aGUgVENQIHBvb2wgKGkuZS4g
bm8KKwkJCSAqIGxpc3RlbmVyIGV4aXN0cykuIFRoZSBlbmRwb2ludCBmaW5kaW5nIHJvdXRpbmUK
KwkJCSAqIHdpbGwgYWx3YXlzIGZpbmQgYSBsaXN0ZW5lciBiZWZvcmUgZXhhbWluaW5nIHRoZQor
CQkJICogVENQIHBvb2wuCisJCQkgKi8KKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSB7CisJCQkJaWYgKGlucF9wKSB7CisJCQkJCSppbnBfcCA9IE5V
TEw7CisJCQkJfQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlzdGNiID0gc2N0cF9maW5k
YXNzb2NpYXRpb25fc3BlY2lhbF9hZGRyKG0sCisJCQkgICAgb2Zmc2V0LCBzaCwgJmlucCwgbmV0
cCwgZHN0KTsKKwkJCWlmIChpbnBfcCAhPSBOVUxMKSB7CisJCQkJKmlucF9wID0gaW5wOworCQkJ
fQorCQl9CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAic3RjYiBpcyAlcFxuIiwgKHZv
aWQgKilzdGNiKTsKKwlyZXR1cm4gKHN0Y2IpOworfQorCisvKgorICogbG9va3VwIGFuIGFzc29j
aWF0aW9uIGJ5IGFuIEFTQ09ORiBsb29rdXAgYWRkcmVzcy4KKyAqIGlmIHRoZSBsb29rdXAgYWRk
cmVzcyBpcyAwLjAuMC4wIG9yIDo6MCwgdXNlIHRoZSB2dGFnIHRvIGRvIHRoZSBsb29rdXAKKyAq
Lworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FzY29uZihzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwKKwkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwg
c3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MzJfdCB2
cmZfaWQpCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXVuaW9uIHNjdHBfc29ja3N0b3Jl
IHJlbW90ZV9zdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJhbV9idWYsICpwaGRyOwor
CWludCBwdHlwZTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKyNpZmRlZiBJTkVUCisJc3RydWN0
IHNvY2thZGRyX2luICpzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7CisjZW5kaWYKKworCW1lbXNldCgmcmVtb3RlX3N0b3JlLCAwLCBzaXplb2Yo
cmVtb3RlX3N0b3JlKSk7CisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0ICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCisJCQkJICAgJnBhcmFtX2J1Ziwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJaWYgKHBoZHIgPT0gTlVMTCkgeworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQgYXNjb25mIGxvb2t1cCBh
ZGRyXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHR5cGUgPSAoaW50
KSgodWludDMyX3QpIG50b2hzKHBoZHItPnBhcmFtX3R5cGUpKTsKKwkvKiBnZXQgdGhlIGNvcnJl
bGF0aW9uIGFkZHJlc3MgKi8KKwlzd2l0Y2ggKHB0eXBlKSB7CisjaWZkZWYgSU5FVDYKKwljYXNl
IFNDVFBfSVBWNl9BRERSRVNTOgorCXsKKwkJLyogaXB2NiBhZGRyZXNzIHBhcmFtICovCisJCXN0
cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOworCisJCWlmIChudG9ocyhwaGRy
LT5wYXJhbV9sZW5ndGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsK
KwkJCXJldHVybiBOVUxMOworCQl9CisJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFt
ICopc2N0cF9nZXRfbmV4dF9wYXJhbShtLAorCQkJCQkJCQkgICAgICAgb2Zmc2V0ICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCisJCQkJCQkJCSAgICAgICAmcDZfYnVmLnBoLCBz
aXplb2YocDZfYnVmKSk7CisJCWlmIChwNiA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQgYXNjb25mIHY2IGxvb2t1cCBhZGRyXG4iLAor
CQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJc2luNiA9ICZyZW1vdGVf
c3RvcmUuc2luNjsKKwkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZF
X1NJTjZfTEVOCisJCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKCpzaW42KTsKKyNlbmRpZgorCQlz
aW42LT5zaW42X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJCW1lbWNweSgmc2luNi0+c2luNl9hZGRy
LCAmcDYtPmFkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJaWYgKElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJemVyb19hZGRyZXNzID0gMTsKKwkJ
YnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6
CisJeworCQkvKiBpcHY0IGFkZHJlc3MgcGFyYW0gKi8KKwkJc3RydWN0IHNjdHBfaXB2NGFkZHJf
cGFyYW0gKnA0LCBwNF9idWY7CisKKwkJaWYgKG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCkgIT0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkgeworCQkJcmV0dXJuIE5VTEw7CisJ
CX0KKwkJcDQgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilzY3RwX2dldF9uZXh0X3Bh
cmFtKG0sCisJCQkJCQkJCSAgICAgICBvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25m
X2NodW5rKSwKKwkJCQkJCQkJICAgICAgICZwNF9idWYucGgsIHNpemVvZihwNF9idWYpKTsKKwkJ
aWYgKHA0ID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICIlczogZmFp
bGVkIHRvIGdldCBhc2NvbmYgdjQgbG9va3VwIGFkZHJcbiIsCisJCQkJX19mdW5jX18pOworCQkJ
cmV0dXJuIChOVUxMKTsKKwkJfQorCQlzaW4gPSAmcmVtb3RlX3N0b3JlLnNpbjsKKwkJc2luLT5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc2luLT5zaW5fbGVu
ID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisJCXNpbi0+c2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7
CisJCW1lbWNweSgmc2luLT5zaW5fYWRkciwgJnA0LT5hZGRyLCBzaXplb2Yoc3RydWN0IGluX2Fk
ZHIpKTsKKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCQl6ZXJv
X2FkZHJlc3MgPSAxOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBpbnZh
bGlkIGFkZHJlc3MgcGFyYW0gdHlwZSAqLworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlpZiAoemVy
b19hZGRyZXNzKSB7CisJICAgICAgICBzdGNiID0gc2N0cF9maW5kYXNzb2NfYnlfdnRhZyhOVUxM
LCBkc3QsIG50b2hsKHNoLT52X3RhZyksIGlucF9wLAorCQkJCQkgICAgICBuZXRwLCBzaC0+c3Jj
X3BvcnQsIHNoLT5kZXN0X3BvcnQsIDEsIHZyZl9pZCwgMCk7CisJCWlmIChzdGNiICE9IE5VTEwp
IHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKCppbnBfcCk7CisJCX0KKwl9IGVsc2UgeworCQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKKwkJICAgICZyZW1vdGVfc3Rv
cmUuc2EsIG5ldHAsCisJCSAgICBkc3QsIE5VTEwpOworCX0KKwlyZXR1cm4gKHN0Y2IpOworfQor
CisKKy8qCisgKiBhbGxvY2F0ZSBhIHNjdHBfaW5wY2IgYW5kIHNldHVwIGEgdGVtcG9yYXJ5IGJp
bmRpbmcgdG8gYSBwb3J0L2FsbAorICogYWRkcmVzc2VzLiBUaGlzIHdheSBpZiB3ZSBkb24ndCBn
ZXQgYSBiaW5kIHdlIGJ5IGRlZmF1bHQgcGljayBhIGVwaGVtZXJhbAorICogcG9ydCB3aXRoIGFs
bCBhZGRyZXNzZXMgYm91bmQuCisgKi8KK2ludAorc2N0cF9pbnBjYl9hbGxvYyhzdHJ1Y3Qgc29j
a2V0ICpzbywgdWludDMyX3QgdnJmX2lkKQoreworCS8qCisJICogd2UgZ2V0IGNhbGxlZCB3aGVu
IGEgbmV3IGVuZHBvaW50IHN0YXJ0cyB1cC4gV2UgbmVlZCB0byBhbGxvY2F0ZQorCSAqIHRoZSBz
Y3RwX2lucGNiIHN0cnVjdHVyZSBmcm9tIHRoZSB6b25lIGFuZCBpbml0IGl0LiBNYXJrIGl0IGFz
CisJICogdW5ib3VuZCBhbmQgZmluZCBhIHBvcnQgdGhhdCB3ZSBjYW4gdXNlIGFzIGFuIGVwaGVt
ZXJhbCB3aXRoCisJICogSU5BRERSX0FOWS4gSWYgdGhlIHVzZXIgYmluZHMgbGF0ZXIgbm8gcHJv
YmxlbSB3ZSBjYW4gdGhlbiBhZGQgaW4KKwkgKiB0aGUgc3BlY2lmaWMgYWRkcmVzc2VzLiBBbmQg
c2V0dXAgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlCisJICogRVAuCisJICovCisJaW50
IGksIGVycm9yOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfcGNiICpt
OworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisJc2N0cF9zaGFyZWRrZXlfdCAqbnVsbF9rZXk7CisK
KwllcnJvciA9IDA7CisKKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJaW5wID0gU0NUUF9aT05F
X0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIHN0cnVjdCBzY3RwX2lucGNiKTsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIk91dCBvZiBTQ1RQLUlOUENCIHN0cnVj
dHVyZXMgLSBubyByZXNvdXJjZXNcbiIpOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RU5PQlVGUyk7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorCS8qIHphcCBpdCAqLworCW1lbXNl
dChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisKKwkvKiBidW1wIGdlbmVyYXRpb25zICovCisjaWYg
ZGVmaW5lZChfX0FQUExFX18pCisJaW5wLT5pcF9pbnAuaW5wLmlucF9zdGF0ZSA9IElOUENCX1NU
QVRFX0lOVVNFOworI2VuZGlmCisJLyogc2V0dXAgc29ja2V0IHBvaW50ZXJzICovCisJaW5wLT5z
Y3RwX3NvY2tldCA9IHNvOworCWlucC0+aXBfaW5wLmlucC5pbnBfc29ja2V0ID0gc287CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQgPSBjcmhvbGQo
c28tPnNvX2NyZWQpOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9fKSAmJiAhZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpZiAoSU5QX1NPQ0tBRihzbykgPT0g
QUZfSU5FVDYpIHsKKwkJaWYgKE1PRFVMRV9HTE9CQUwoaXA2X2F1dG9fZmxvd2xhYmVsKSkgewor
CQkJaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFncyB8PSBJTjZQX0FVVE9GTE9XTEFCRUw7CisJCX0K
KwkJaWYgKE1PRFVMRV9HTE9CQUwoaXA2X3Y2b25seSkpIHsKKwkJCWlucC0+aXBfaW5wLmlucC5p
bnBfZmxhZ3MgfD0gSU42UF9JUFY2X1Y2T05MWTsKKwkJfQorCX0KKyNlbmRpZgorI2VuZGlmCisJ
aW5wLT5zY3RwX2Fzc29jaWRfY291bnRlciA9IDE7CisJaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3Bv
aW50ID0gU0NUUF9TQl9MSU1JVF9SQ1Yoc28pID4+IFNDVFBfUEFSVElBTF9ERUxJVkVSWV9TSElG
VDsKKwlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCWlu
cC0+bWF4X2N3bmQgPSAwOworCWlucC0+c2N0cF9jbXRfb25fb2ZmID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2NtdF9vbl9vZmYpOworCWlucC0+ZWNuX3N1cHBvcnRlZCA9ICh1aW50OF90KVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKTsKKwlpbnAtPnByc2N0cF9zdXBwb3J0ZWQgPSAo
dWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKTsKKwlpbnAtPmF1dGhfc3Vw
cG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKTsKKwlp
bnAtPmFzY29uZl9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNj
b25mX2VuYWJsZSk7CisJaW5wLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcmVjb25maWdfZW5hYmxlKTsKKwlpbnAtPm5yc2Fja19zdXBwb3J0ZWQg
PSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJzYWNrX2VuYWJsZSk7CisJaW5wLT5w
a3Rkcm9wX3N1cHBvcnRlZCA9ICh1aW50OF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wa3Rkcm9w
X2VuYWJsZSk7CisJaW5wLT5pZGF0YV9zdXBwb3J0ZWQgPSAwOworCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwlpbnAtPmZpYm51bSA9IHNvLT5zb19maWJudW07CisjZWxzZQorCWlucC0+Zmli
bnVtID0gMDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpbnAtPnVscF9p
bmZvID0gTlVMTDsKKwlpbnAtPnJlY3ZfY2FsbGJhY2sgPSBOVUxMOworCWlucC0+c2VuZF9jYWxs
YmFjayA9IE5VTEw7CisJaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IDA7CisjZW5kaWYKKwkvKiBp
bml0IHRoZSBzbWFsbCBoYXNoIHRhYmxlIHdlIHVzZSB0byB0cmFjayBhc29jaWQgPC0+IHRjYiAq
LworCWlucC0+c2N0cF9hc29jaWRoYXNoID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9TVEFDS19WVEFH
X0hBU0hfU0laRSwgJmlucC0+aGFzaGFzb2NpZG1hcmspOworCWlmIChpbnAtPnNjdHBfYXNvY2lk
aGFzaCA9PSBOVUxMKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJY3JmcmVlKGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCk7CisjZW5kaWYKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfZXApLCBpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJ
cmV0dXJuIChFTk9CVUZTKTsKKwl9CisJU0NUUF9JTkNSX0VQX0NPVU5UKCk7CisJaW5wLT5pcF9p
bnAuaW5wLmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJU0NUUF9JTlBf
SU5GT19XVU5MT0NLKCk7CisKKwlzby0+c29fcGNiID0gKGNhZGRyX3QpaW5wOworCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA4MDMwMDAKKwlpZiAoKFND
VFBfU09fVFlQRShzbykgPT0gU09DS19ER1JBTSkgfHwKKwkgICAgKFNDVFBfU09fVFlQRShzbykg
PT0gU09DS19TRVFQQUNLRVQpKSB7CisjZWxzZQorCWlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNP
Q0tfU0VRUEFDS0VUKSB7CisjZW5kaWYKKwkJLyogVURQIHN0eWxlIHNvY2tldCAqLworCQlpbnAt
PnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8CisJCSAgICBTQ1RQX1BDQl9G
TEFHU19VTkJPVU5EKTsKKwkJLyogQmUgc3VyZSBpdCBpcyBOT04tQkxPQ0tJTkcgSU8gZm9yIFVE
UCAqLworCQkvKiBTQ1RQX1NFVF9TT19OQklPKHNvKTsgKi8KKwl9IGVsc2UgaWYgKFNDVFBfU09f
VFlQRShzbykgPT0gU09DS19TVFJFQU0pIHsKKwkJLyogVENQIHN0eWxlIHNvY2tldCAqLworCQlp
bnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8CisJCSAgICBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKTsKKwkJLyogQmUgc3VyZSB3ZSBoYXZlIGJsb2NraW5nIElPIGJ5IGRl
ZmF1bHQgKi8KKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9DTEVBUl9TT19OQklPKHNvKTsKKwkJ
U09DS19VTkxPQ0soc28pOworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCX0gZWxzZSBpZiAoU0NU
UF9TT19UWVBFKHNvKSA9PSBTT0NLX0ZBU1RTRVFQQUNLRVQpIHsKKwkJaW5wLT5zY3RwX2ZsYWdz
ID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAorCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VO
RCk7CisJfSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfRkFTVFNUUkVBTSkgewor
CQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8CisJCSAgICBTQ1RQ
X1BDQl9GTEFHU19VTkJPVU5EKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCS8qCisJCSAqIHVuc3Vw
cG9ydGVkIHNvY2tldCB0eXBlIChSQVcsIGV0YyktIGluIGNhc2Ugd2UgbWlzc2VkIGl0CisJCSAq
IGluIHByb3Rvc3cKKwkJICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVPUE5PVFNVUFApOworCQlzby0+c29fcGNiID0gTlVMTDsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5wLmlucF9j
cmVkKTsKKyNlbmRpZgorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9l
cCksIGlucCk7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBfRlJBR19MRVZFTF8xKSB7
CisJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7
CisJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxFQVZFX1NUUk1T
KTsKKwl9IGVsc2UgaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJs
ZWF2ZSkgPT0gU0NUUF9GUkFHX0xFVkVMXzIpIHsKKwkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKTsKKwkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisJfSBlbHNlIGlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBfRlJBR19MRVZFTF8wKSB7
CisJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUp
OworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJN
Uyk7CisJfQorCWlucC0+c2N0cF90Y2JoYXNoID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3BjYnRibHNpemUpLAorCQkJCQkgICAmaW5wLT5zY3RwX2hhc2htYXJrKTsKKwlp
ZiAoaW5wLT5zY3RwX3RjYmhhc2ggPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5URigiT3V0IG9mIFND
VFAtSU5QQ0ItPmhhc2hpbml0IC0gbm8gcmVzb3VyY2VzXG4iKTsKKwkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7CisJCXNv
LT5zb19wY2IgPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCWNyZnJlZShpbnAt
PmlwX2lucC5pbnAuaW5wX2NyZWQpOworI2VuZGlmCisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFT
RV9JTkZPKGlwaV96b25lX2VwKSwgaW5wKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisjaWZk
ZWYgU0NUUF9NVlJGCisJaW5wLT52cmZfc2l6ZSA9IFNDVFBfREVGQVVMVF9WUkZfU0laRTsKKwlT
Q1RQX01BTExPQyhpbnAtPm1fdnJmX2lkcywgdWludDMyX3QgKiwKKwkJICAgIChzaXplb2YodWlu
dDMyX3QpICogaW5wLT52cmZfc2l6ZSksIFNDVFBfTV9NVlJGKTsKKwlpZiAoaW5wLT5tX3ZyZl9p
ZHMgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfUENCLCBFTk9CVUZTKTsKKwkJc28tPnNvX3BjYiA9IE5VTEw7CisJCVNDVFBf
SEFTSF9GUkVFKGlucC0+c2N0cF90Y2JoYXNoLCBpbnAtPnNjdHBfaGFzaG1hcmspOworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCisJCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOwor
I2VuZGlmCisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5w
KTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJaW5wLT5tX3ZyZl9pZHNbMF0gPSB2cmZfaWQ7
CisJaW5wLT5udW1fdnJmcyA9IDE7CisjZW5kaWYKKwlpbnAtPmRlZl92cmZfaWQgPSB2cmZfaWQ7
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8
IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJaW5wLT5pcF9pbnAuaW5wLmlucGNiX210eCA9
IGxja19tdHhfYWxsb2NfaW5pdChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCwgU0NU
UF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKKwlpZiAoaW5wLT5pcF9pbnAuaW5wLmlu
cGNiX210eCA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJpbl9wY2JhbGxvYzogY2FuJ3QgYWxs
b2MgbXV0ZXghIHNvPSVwXG4iLCAodm9pZCAqKXNvKTsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJU0NU
UF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQX01fTVZSRik7CisjZW5kaWYKKwkJU0NUUF9IQVNI
X0ZSRUUoaW5wLT5zY3RwX3RjYmhhc2gsIGlucC0+c2N0cF9oYXNobWFyayk7CisJCXNvLT5zb19w
Y2IgPSBOVUxMOworCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCks
IGlucCk7CisJCVNDVFBfVU5MT0NLX0VYQyhTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xv
Y2spOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfUENCLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorI2VsaWYgZGVmaW5lZChB
UFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlsY2tfbXR4X2luaXQo
JmlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHgsIFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhf
Z3JwLCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2F0dHIpOworI2Vsc2UKKwlsY2tfbXR4
X2luaXQoJmlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHgsIFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5pcGlfbG9ja19ncnAsIFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19hdHRyKTsK
KyNlbmRpZgorI2VuZGlmCisJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCVNDVFBfSU5QX0xPQ0tf
SU5JVChpbnApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJSU5QX0xPQ0tfSU5JVCgmaW5w
LT5pcF9pbnAuaW5wLCAiaW5wIiwgInNjdHBpbnAiKTsKKyNlbmRpZgorCVNDVFBfSU5QX1JFQURf
SU5JVChpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKGlucCk7CisJLyogbG9jayB0
aGUgbmV3IGVwICovCisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKworCS8qIGFkZCBpdCB0byB0aGUg
aW5mbyBhcmVhICovCisJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8obGlzdGhlYWQp
LCBpbnAsIHNjdHBfbGlzdCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaW5wLT5pcF9pbnAu
aW5wLmlucF9wY2JpbmZvID0gJlNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKTsKKyNpZiBkZWZpbmVk
KEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpIHx8IGRlZmluZWQo
QVBQTEVfTElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJTElTVF9JTlNFUlRf
SEVBRChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubGlzdGhlYWQsICZpbnAtPmlwX2lucC5pbnAs
IGlucF9saXN0KTsKKyNlbHNlCisJTElTVF9JTlNFUlRfSEVBRChTQ1RQX0JBU0VfSU5GTyhzY3Ri
aW5mbykuaXBpX2xpc3RoZWFkLCAmaW5wLT5pcF9pbnAuaW5wLCBpbnBfbGlzdCk7CisjZW5kaWYK
KyNlbmRpZgorCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCisJVEFJTFFfSU5JVCgmaW5wLT5y
ZWFkX3F1ZXVlKTsKKwlMSVNUX0lOSVQoJmlucC0+c2N0cF9hZGRyX2xpc3QpOworCisJTElTVF9J
TklUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKworI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNP
Q1MKKwkvKiBURU1QIENPREUgKi8KKwlMSVNUX0lOSVQoJmlucC0+c2N0cF9hc29jX2ZyZWVfbGlz
dCk7CisjZW5kaWYKKwkvKiBJbml0IHRoZSB0aW1lciBzdHJ1Y3R1cmUgZm9yIHNpZ25hdHVyZSBj
aGFuZ2UgKi8KKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmlucC0+c2N0cF9lcC5zaWduYXR1cmVfY2hh
bmdlLnRpbWVyKTsKKwlpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50eXBlID0gU0NUUF9U
SU1FUl9UWVBFX05FV0NPT0tJRTsKKworCS8qIG5vdyBpbml0IHRoZSBhY3R1YWwgZW5kcG9pbnQg
ZGVmYXVsdCBkYXRhICovCisJbSA9ICZpbnAtPnNjdHBfZXA7CisKKwkvKiBzZXR1cCB0aGUgYmFz
ZSB0aW1lb3V0IGluZm9ybWF0aW9uICovCisJbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1F
Ul9TRU5EXSA9IFNFQ19UT19USUNLUyhTQ1RQX1NFTkRfU0VDKTsJLyogbmVlZGVkID8gKi8KKwlt
LT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX0lOSVRdID0gU0VDX1RPX1RJQ0tTKFNDVFBf
SU5JVF9TRUMpOwkvKiBuZWVkZWQgPyAqLworCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElN
RVJfUkVDVl0gPSBNU0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWxheWVkX3Nh
Y2tfdGltZV9kZWZhdWx0KSk7CisJbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFS
VEJFQVRdID0gTVNFQ19UT19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGVhcnRiZWF0X2lu
dGVydmFsX2RlZmF1bHQpKTsKKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1BNVFVd
ID0gU0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVm
YXVsdCkpOworCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfTUFYU0hVVERPV05dID0g
U0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2Rl
ZmF1bHQpKTsKKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1NJR05BVFVSRV0gPSBT
RUNfVE9fVElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0
KSk7CisJLyogYWxsIG1heC9taW4gbWF4IGFyZSBpbiBtcyAqLworCW0tPnNjdHBfbWF4cnRvID0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19tYXhfZGVmYXVsdCk7CisJbS0+c2N0cF9taW5ydG8g
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21pbl9kZWZhdWx0KTsKKwltLT5pbml0aWFsX3J0
byA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KTsKKwltLT5pbml0
aWFsX2luaXRfcnRvX21heCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVm
YXVsdCk7CisJbS0+c2N0cF9zYWNrX2ZyZXEgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2Fja19m
cmVxX2RlZmF1bHQpOworCW0tPm1heF9pbml0X3RpbWVzID0gU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2luaXRfcnR4X21heF9kZWZhdWx0KTsKKwltLT5tYXhfc2VuZF90aW1lcyA9IFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpOworCW0tPmRlZl9uZXRfZmFpbHVyZSA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCk7CisJbS0+ZGVmX25l
dF9wZl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQp
OworCW0tPnNjdHBfc3dzX3NlbmRlciA9IFNDVFBfU1dTX1NFTkRFUl9ERUY7CisJbS0+c2N0cF9z
d3NfcmVjZWl2ZXIgPSBTQ1RQX1NXU19SRUNFSVZFUl9ERUY7CisJbS0+bWF4X2J1cnN0ID0gU0NU
UF9CQVNFX1NZU0NUTChzY3RwX21heF9idXJzdF9kZWZhdWx0KTsKKwltLT5mcl9tYXhfYnVyc3Qg
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpOworCisJbS0+c2N0
cF9kZWZhdWx0X2NjX21vZHVsZSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2NjX21v
ZHVsZSk7CisJbS0+c2N0cF9kZWZhdWx0X3NzX21vZHVsZSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kZWZhdWx0X3NzX21vZHVsZSk7CisJbS0+bWF4X29wZW5fc3RyZWFtc19pbnRvbWUgPSBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KTsKKwkvKiBudW1i
ZXIgb2Ygc3RyZWFtcyB0byBwcmUtb3BlbiBvbiBhIGFzc29jaWF0aW9uICovCisJbS0+cHJlX29w
ZW5fc3RyZWFtX2NvdW50ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX291dGdvaW5nX3N0cmVh
bXNfZGVmYXVsdCk7CisKKwltLT5kZWZhdWx0X210dSA9IDA7CisJLyogQWRkIGFkYXB0YXRpb24g
Y29va2llICovCisJbS0+YWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3IgPSAwOworCW0tPmFkYXB0
YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMDsKKworCS8qIHNlZWQgcmFuZG9tIG51
bWJlciBnZW5lcmF0b3IgKi8KKwltLT5yYW5kb21fY291bnRlciA9IDE7CisJbS0+c3RvcmVfYXQg
PSBTQ1RQX1NJR05BVFVSRV9TSVpFOworCVNDVFBfUkVBRF9SQU5ET00obS0+cmFuZG9tX251bWJl
cnMsIHNpemVvZihtLT5yYW5kb21fbnVtYmVycykpOworCXNjdHBfZmlsbF9yYW5kb21fc3RvcmUo
bSk7CisKKwkvKiBNaW5pbXVtIGNvb2tpZSBzaXplICovCisJbS0+c2l6ZV9vZl9hX2Nvb2tpZSA9
IChzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9tc2cpICogMikgKworCSAgICBzaXplb2Yoc3RydWN0
IHNjdHBfc3RhdGVfY29va2llKTsKKwltLT5zaXplX29mX2FfY29va2llICs9IFNDVFBfU0lHTkFU
VVJFX1NJWkU7CisKKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzZWNyZXQgKi8KKwkodm9pZClTQ1RQ
X0dFVFRJTUVfVElNRVZBTCgmdGltZSk7CisJbS0+dGltZV9vZl9zZWNyZXRfY2hhbmdlID0gdGlt
ZS50dl9zZWM7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfT0ZfU0VDUkVUUzsgaSsr
KSB7CisJCW0tPnNlY3JldF9rZXlbMF1baV0gPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTihtKTsK
Kwl9CisJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFLCBpbnAsIE5V
TEwsIE5VTEwpOworCisJLyogSG93IGxvbmcgaXMgYSBjb29raWUgZ29vZCBmb3IgPyAqLworCW0t
PmRlZl9jb29raWVfbGlmZSA9IE1TRUNfVE9fVElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Zh
bGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpKTsKKwkvKgorCSAqIEluaXRpYWxpemUgYXV0aGVudGlj
YXRpb24gcGFyYW1ldGVycworCSAqLworCW0tPmxvY2FsX2htYWNzID0gc2N0cF9kZWZhdWx0X3N1
cHBvcnRlZF9obWFjbGlzdCgpOworCW0tPmxvY2FsX2F1dGhfY2h1bmtzID0gc2N0cF9hbGxvY19j
aHVua2xpc3QoKTsKKwlpZiAoaW5wLT5hc2NvbmZfc3VwcG9ydGVkKSB7CisJCXNjdHBfYXV0aF9h
ZGRfY2h1bmsoU0NUUF9BU0NPTkYsIG0tPmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJc2N0cF9hdXRo
X2FkZF9jaHVuayhTQ1RQX0FTQ09ORl9BQ0ssIG0tPmxvY2FsX2F1dGhfY2h1bmtzKTsKKwl9CisJ
bS0+ZGVmYXVsdF9kc2NwID0gMDsKKyNpZmRlZiBJTkVUNgorCW0tPmRlZmF1bHRfZmxvd2xhYmVs
ID0gMDsKKyNlbmRpZgorCW0tPnBvcnQgPSAwOyAvKiBlbmNhcHN1bGF0aW9uIGRpc2FibGVkIGJ5
IGRlZmF1bHQgKi8KKwlMSVNUX0lOSVQoJm0tPnNoYXJlZF9rZXlzKTsKKwkvKiBhZGQgZGVmYXVs
dCBOVUxMIGtleSBhcyBrZXkgaWQgMCAqLworCW51bGxfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRr
ZXkoKTsKKwlzY3RwX2luc2VydF9zaGFyZWRrZXkoJm0tPnNoYXJlZF9rZXlzLCBudWxsX2tleSk7
CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTIpOworI2VuZGlmCisJcmV0dXJuIChlcnJvcik7Cit9
CisKKwordm9pZAorc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKm9s
ZF9pbnAsIHN0cnVjdCBzY3RwX2lucGNiICpuZXdfaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJdWludDE2X3QgbHBvcnQsIHJwb3J0
OworCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIs
ICpvbGFkZHI7CisKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJU0NUUF9JTlBf
V0xPQ0sob2xkX2lucCk7CisJU0NUUF9JTlBfV0xPQ0sobmV3X2lucCk7CisJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisK
KwluZXdfaW5wLT5zY3RwX2VwLnRpbWVfb2Zfc2VjcmV0X2NoYW5nZSA9CisJICAgIG9sZF9pbnAt
PnNjdHBfZXAudGltZV9vZl9zZWNyZXRfY2hhbmdlOworCW1lbWNweShuZXdfaW5wLT5zY3RwX2Vw
LnNlY3JldF9rZXksIG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSwKKwkgICAgc2l6ZW9mKG9s
ZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSkpOworCW5ld19pbnAtPnNjdHBfZXAuY3VycmVudF9z
ZWNyZXRfbnVtYmVyID0KKwkgICAgb2xkX2lucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1i
ZXI7CisJbmV3X2lucC0+c2N0cF9lcC5sYXN0X3NlY3JldF9udW1iZXIgPQorCSAgICBvbGRfaW5w
LT5zY3RwX2VwLmxhc3Rfc2VjcmV0X251bWJlcjsKKwluZXdfaW5wLT5zY3RwX2VwLnNpemVfb2Zf
YV9jb29raWUgPSBvbGRfaW5wLT5zY3RwX2VwLnNpemVfb2ZfYV9jb29raWU7CisKKwkvKiBtYWtl
IGl0IHNvIG5ldyBkYXRhIHBvdXJzIGludG8gdGhlIG5ldyBzb2NrZXQgKi8KKwlzdGNiLT5zY3Rw
X3NvY2tldCA9IG5ld19pbnAtPnNjdHBfc29ja2V0OworCXN0Y2ItPnNjdHBfZXAgPSBuZXdfaW5w
OworCisJLyogQ29weSB0aGUgcG9ydCBhY3Jvc3MgKi8KKwlscG9ydCA9IG5ld19pbnAtPnNjdHBf
bHBvcnQgPSBvbGRfaW5wLT5zY3RwX2xwb3J0OworCXJwb3J0ID0gc3RjYi0+cnBvcnQ7CisJLyog
UHVsbCB0aGUgdGNiIGZyb20gdGhlIG9sZCBhc3NvY2lhdGlvbiAqLworCUxJU1RfUkVNT1ZFKHN0
Y2IsIHNjdHBfdGNiaGFzaCk7CisJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2JsaXN0KTsKKwlp
ZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgeworCQlMSVNUX1JFTU9WRShzdGNiLCBzY3Rw
X3RjYmFzb2NpZGhhc2gpOworCX0KKwkvKiBOb3cgaW5zZXJ0IHRoZSBuZXdfaW5wIGludG8gdGhl
IFRDUCBjb25uZWN0ZWQgaGFzaCAqLworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF90Y3Bl
cGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKChscG9ydCB8IHJwb3J0KSwgU0NUUF9CQVNFX0lO
Rk8oaGFzaHRjcG1hcmspKV07CisKKwlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIG5ld19pbnAsIHNj
dHBfaGFzaCk7CisJLyogSXRzIHNhZmUgdG8gYWNjZXNzICovCisJbmV3X2lucC0+c2N0cF9mbGFn
cyAmPSB+U0NUUF9QQ0JfRkxBR1NfVU5CT1VORDsKKworCS8qIE5vdyBtb3ZlIHRoZSB0Y2IgaW50
byB0aGUgZW5kcG9pbnQgbGlzdCAqLworCUxJU1RfSU5TRVJUX0hFQUQoJm5ld19pbnAtPnNjdHBf
YXNvY19saXN0LCBzdGNiLCBzY3RwX3RjYmxpc3QpOworCS8qCisJICogUXVlc3Rpb24sIGRvIHdl
IGV2ZW4gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgZXAtaGFzaCBzaW5jZSB3ZQorCSAqIG9ubHkg
aGF2ZSBvbmUgY29ubmVjdGlvbj8gUHJvYmFibHkgbm90IDo+IHNvIGxldHMgZ2V0IHJpZCBvZiBp
dAorCSAqIGFuZCBub3Qgc3VjayB1cCBhbnkga2VybmVsIG1lbW9yeSBpbiB0aGF0LgorCSAqLwor
CWlmIChzdGNiLT5hc29jLmluX2Fzb2NpZF9oYXNoKSB7CisJCXN0cnVjdCBzY3RwYXNvY2hlYWQg
KmxoZDsKKwkJbGhkID0gJm5ld19pbnAtPnNjdHBfYXNvY2lkaGFzaFtTQ1RQX1BDQkhBU0hfQVNP
QyhzdGNiLT5hc29jLmFzc29jX2lkLAorCQkJbmV3X2lucC0+aGFzaGFzb2NpZG1hcmspXTsKKwkJ
TElTVF9JTlNFUlRfSEVBRChsaGQsIHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJfQorCS8q
IE9rLiBMZXQncyByZXN0YXJ0IHRpbWVyLiAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+
YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfUEFUSE1UVVJBSVNFLCBuZXdfaW5wLAorCQkgICAgc3RjYiwgbmV0KTsKKwl9CisKKwlTQ1RQ
X0lOUF9JTkZPX1dVTkxPQ0soKTsKKwlpZiAobmV3X2lucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwp
IHsKKwkJU0NUUF9IQVNIX0ZSRUUobmV3X2lucC0+c2N0cF90Y2JoYXNoLCBuZXdfaW5wLT5zY3Rw
X2hhc2htYXJrKTsKKwkJbmV3X2lucC0+c2N0cF90Y2JoYXNoID0gTlVMTDsKKwl9CisJaWYgKChu
ZXdfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApIHsKKwkJ
LyogU3Vic2V0IGJvdW5kLCBzbyBjb3B5IGluIHRoZSBsYWRkciBsaXN0IGZyb20gdGhlIG9sZF9p
bnAgKi8KKwkJTElTVF9GT1JFQUNIKG9sYWRkciwgJm9sZF9pbnAtPnNjdHBfYWRkcl9saXN0LCBz
Y3RwX254dF9hZGRyKSB7CisJCQlsYWRkciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8o
aXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7CisJCQlpZiAobGFkZHIgPT0gTlVM
TCkgeworCQkJCS8qCisJCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBkbz8gVGhpcyBhc3NvYyBpcyBy
ZWFsbHkKKwkJCQkgKiBIT1NFRC4gV2UgcHJvYmFibHkgc2hvdWxkIHNlbmQgYW4gYWJvcnQKKwkJ
CQkgKiBoZXJlLgorCQkJCSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQXNzb2Np
YXRpb24gaG9zZWQgaW4gVENQIG1vZGVsLCBvdXQgb2YgbGFkZHIgbWVtb3J5XG4iKTsKKwkJCQlj
b250aW51ZTsKKwkJCX0KKwkJCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOworCQkJbWVtc2V0KGxh
ZGRyLCAwLCBzaXplb2YoKmxhZGRyKSk7CisJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgm
bGFkZHItPnN0YXJ0X3RpbWUpOworCQkJbGFkZHItPmlmYSA9IG9sYWRkci0+aWZhOworCQkJYXRv
bWljX2FkZF9pbnQoJmxhZGRyLT5pZmEtPnJlZmNvdW50LCAxKTsKKwkJCUxJU1RfSU5TRVJUX0hF
QUQoJm5ld19pbnAtPnNjdHBfYWRkcl9saXN0LCBsYWRkciwKKwkJCSAgICBzY3RwX254dF9hZGRy
KTsKKwkJCW5ld19pbnAtPmxhZGRyX2NvdW50Kys7CisJCQlpZiAob2xhZGRyID09IHN0Y2ItPmFz
b2MubGFzdF91c2VkX2FkZHJlc3MpIHsKKwkJCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNz
ID0gbGFkZHI7CisJCQl9CisJCX0KKwl9CisJLyogTm93IGFueSBydW5uaW5nIHRpbWVycyBuZWVk
IHRvIGJlIGFkanVzdGVkCisJICogc2luY2Ugd2UgcmVhbGx5IGRvbid0IGNhcmUgaWYgdGhleSBh
cmUgcnVubmluZworCSAqIG9yIG5vdCBqdXN0IGJsYXN0IGluIHRoZSBuZXdfaW5wIGludG8gYWxs
IG9mCisJICogdGhlbS4KKwkgKi8KKworCXN0Y2ItPmFzb2MuZGFja190aW1lci5lcCA9ICh2b2lk
ICopbmV3X2lucDsKKwlzdGNiLT5hc29jLmFzY29uZl90aW1lci5lcCA9ICh2b2lkICopbmV3X2lu
cDsKKwlzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyLmVwID0gKHZvaWQgKiluZXdfaW5wOworCXN0
Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwlzdGNiLT5h
c29jLmF1dG9jbG9zZV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwlzdGNiLT5hc29jLmRl
bGF5ZWRfZXZlbnRfdGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7CisJc3RjYi0+YXNvYy5kZWxl
dGVfcHJpbV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwkvKiBub3cgd2hhdCBhYm91dCB0
aGUgbmV0cz8gKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7CisJCW5ldC0+cG10dV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwkJbmV0LT5o
Yl90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwkJbmV0LT5yeHRfdGltZXIuZXAgPSAodm9p
ZCAqKW5ld19pbnA7CisJfQorCVNDVFBfSU5QX1dVTkxPQ0sobmV3X2lucCk7CisJU0NUUF9JTlBf
V1VOTE9DSyhvbGRfaW5wKTsKK30KKworLyoKKyAqIGluc2VydCBhbiBsYWRkciBlbnRyeSB3aXRo
IHRoZSBnaXZlbiBpZmEgZm9yIHRoZSBkZXNpcmVkIGxpc3QKKyAqLworc3RhdGljIGludAorc2N0
cF9pbnNlcnRfbGFkZHIoc3RydWN0IHNjdHBsYWRkciAqbGlzdCwgc3RydWN0IHNjdHBfaWZhICpp
ZmEsIHVpbnQzMl90IGFjdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwlsYWRk
ciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qg
c2N0cF9sYWRkcik7CisJaWYgKGxhZGRyID09IE5VTEwpIHsKKwkJLyogb3V0IG9mIG1lbW9yeT8g
Ki8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9QQ0IsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJU0NUUF9JTkNSX0xBRERS
X0NPVU5UKCk7CisJbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxhZGRyKSk7CisJKHZvaWQpU0NU
UF9HRVRUSU1FX1RJTUVWQUwoJmxhZGRyLT5zdGFydF90aW1lKTsKKwlsYWRkci0+aWZhID0gaWZh
OworCWxhZGRyLT5hY3Rpb24gPSBhY3Q7CisJYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQs
IDEpOworCS8qIGluc2VydCBpdCAqLworCUxJU1RfSU5TRVJUX0hFQUQobGlzdCwgbGFkZHIsIHNj
dHBfbnh0X2FkZHIpOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJlbW92ZSBhbiBsYWRk
ciBlbnRyeSBmcm9tIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QgKG9uIGFuIGFzc29jKQorICovCitz
dGF0aWMgdm9pZAorc2N0cF9yZW1vdmVfbGFkZHIoc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyKQor
eworCisJLyogcmVtb3ZlIGZyb20gdGhlIGxpc3QgKi8KKwlMSVNUX1JFTU9WRShsYWRkciwgc2N0
cF9ueHRfYWRkcik7CisJc2N0cF9mcmVlX2lmYShsYWRkci0+aWZhKTsKKwlTQ1RQX1pPTkVfRlJF
RShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIGxhZGRyKTsKKwlTQ1RQX0RFQ1JfTEFE
RFJfQ09VTlQoKTsKK30KKworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisvKgorICogRG9uJ3Qga25vdyB3
aHksIGJ1dCB3aXRob3V0IHRoaXMgdGhlcmUgaXMgYW4gdW5rbm93biByZWZlcmVuY2Ugd2hlbgor
ICogY29tcGlsaW5nIE5ldEJTRC4uLiBobW0KKyAqLworZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9z
aW4oc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYpOworI2Vu
ZGlmCisKKworLyogc2N0cF9pZmFwIGlzIHVzZWQgdG8gYnlwYXNzIG5vcm1hbCBsb2NhbCBhZGRy
ZXNzIHZhbGlkYXRpb24gY2hlY2tzICovCitpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3NjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgdGhyZWFkICpwKQorI2VsaWYgZGVmaW5lZChfX1dp
bmRvd3NfXykKK3NjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBQ
S1RIUkVBRCBwKQorI2Vsc2UKK3NjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0
cF9pZmFwLCBzdHJ1Y3QgcHJvYyAqcCkKKyNlbmRpZgoreworCS8qIGJpbmQgYSBlcCB0byBhIHNv
Y2tldCBhZGRyZXNzICovCisJc3RydWN0IHNjdHBwY2JoZWFkICpoZWFkOworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnAsICppbnBfdG1wOworI2lmIGRlZmluZWQoSU5FVCkgfHwgKGRlZmluZWQoSU5F
VDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pCisJc3RydWN0IGlucGNiICppcF9pbnA7CisjZW5kaWYKKwlpbnQgcG9y
dF9yZXVzZV9hY3RpdmUgPSAwOworCWludCBiaW5kYWxsOworI2lmZGVmIFNDVFBfTVZSRgorCWlu
dCBpOworI2VuZGlmCisJdWludDE2X3QgbHBvcnQ7CisJaW50IGVycm9yOworCXVpbnQzMl90IHZy
Zl9pZDsKKworCWxwb3J0ID0gMDsKKwliaW5kYWxsID0gMTsKKwlpbnAgPSAoc3RydWN0IHNjdHBf
aW5wY2IgKilzby0+c29fcGNiOworI2lmIGRlZmluZWQoSU5FVCkgfHwgKGRlZmluZWQoSU5FVDYp
ICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pCisJaXBfaW5wID0gKHN0cnVjdCBpbnBjYiAqKXNvLT5zb19wY2I7CisjZW5k
aWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKGFkZHIpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X1BDQjEsICJCaW5kIGNhbGxlZCBwb3J0OiAlZFxuIiwKKwkJCW50b2hzKCgoc3RydWN0IHNvY2th
ZGRyX2luICopYWRkciktPnNpbl9wb3J0KSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAi
QWRkcjogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjEsIGFkZHIpOworCX0KKyNl
bmRpZgorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0g
MCkgeworCQkvKiBhbHJlYWR5IGRpZCBhIGJpbmQsIHN1YnNlcXVlbnQgYmluZHMgTk9UIGFsbG93
ZWQgISAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfUENCLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorI2lmZGVmIElOVkFS
SUFOVFMKKwlpZiAocCA9PSBOVUxMKQorCQlwYW5pYygibnVsbCBwcm9jL3RocmVhZCIpOworI2Vu
ZGlmCisjZW5kaWYKKwlpZiAoYWRkciAhPSBOVUxMKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOworCisJCQkvKiBJUFY2X1Y2T05MWSBzb2NrZXQ/ICovCisJCQlpZiAoU0NU
UF9JUFY2X1Y2T05MWShpcF9pbnApKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZB
TCk7CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6
ZW9mKCpzaW4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9Cisj
ZW5kaWYKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQlscG9ydCA9
IHNpbi0+c2luX3BvcnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAwMDAwCisJCQkvKgorCQkJICogRm9yIExPT1BCQUNLIHRoZSBwcmlzb25fbG9j
YWxfaXA0KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXAgYWRkcmVzcworCQkJICogdG8gdGhl
IHByb3BlciB2YWx1ZS4KKwkJCSAqLworCQkJaWYgKHAgJiYgKGVycm9yID0gcHJpc29uX2xvY2Fs
X2lwNChwLT50ZF91Y3JlZCwgJnNpbi0+c2luX2FkZHIpKSAhPSAwKSB7CisJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgZXJyb3IpOwor
CQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJCQlpZiAoc2luLT5zaW5fYWRkci5z
X2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCWJpbmRhbGwgPSAwOworCQkJfQorCQkJYnJlYWs7
CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCS8q
IE9ubHkgZm9yIHB1cmUgSVB2NiBBZGRyZXNzLiAoTm8gSVB2NCBNYXBwZWQhKSAqLworCQkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopYWRkcjsKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoYWRkci0+c2FfbGVuICE9IHNp
emVvZigqc2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0K
KyNlbmRpZgorCQkJbHBvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCQkvKgorCQkJICogRm9yIExP
T1BCQUNLIHRoZSBwcmlzb25fbG9jYWxfaXA2KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXB2
NiBhZGRyZXNzCisJCQkgKiB0byB0aGUgcHJvcGVyIHZhbHVlLgorCQkJICovCisJCQlpZiAocCAm
JiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHAtPnRkX3VjcmVkLCAmc2luNi0+c2luNl9hZGRy
LAorCQkJICAgIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkgIT0gMCkpKSAhPSAwKSB7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgZXJy
b3IpOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJCQlpZiAoIUlONl9JU19B
RERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJYmluZGFsbCA9IDA7Cisj
aWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2Nv
cGVpZCAqLworI2lmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkJCWlmIChzYTZfZW1iZWRzY29wZShz
aW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDApIHsKKwkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFM
KTsKKwkJCQkJcmV0dXJuIChFSU5WQUwpOworCQkJCX0KKyNlbGlmIGRlZmluZWQoX19BUFBMRV9f
KQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFS
RCkKKwkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgaXBfaW5w
LCBOVUxMKSAhPSAwKSB7CisjZWxzZQorCQkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2lu
Nl9hZGRyLCBzaW42LCBpcF9pbnAsIE5VTEwsIE5VTEwpICE9IDApIHsKKyNlbmRpZgorCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOworCQkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQkJfQorI2VsaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwkJCQllcnJvciA9IHNjb3BlNl9jaGVja19pZChzaW42LCBNT0RVTEVfR0xPQkFM
KGlwNl91c2VfZGVmem9uZSkpOworCQkJCWlmIChlcnJvciAhPSAwKSB7CisJCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIGVycm9yKTsK
KwkJCQkJcmV0dXJuIChlcnJvcik7CisJCQkJfQorI2Vsc2UKKwkJCQlpZiAoaW42X2VtYmVkc2Nv
cGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNikgIT0gMCkgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkJCQly
ZXR1cm4gKEVJTlZBTCk7CisJCQkJfQorI2VuZGlmCisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9W
Nl9TQ09QRSAqLworCQkJfQorI2lmbmRlZiBTQ09QRURST1VUSU5HCisJCQkvKiB0aGlzIG11c3Qg
YmUgY2xlYXJlZCBmb3IgaWZhX2lmd2l0aGFkZHIoKSAqLworCQkJc2luNi0+c2luNl9zY29wZV9p
ZCA9IDA7CisjZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLworCQkJYnJlYWs7CisJCX0KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQl7CisJCQlz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYg
KGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlO
VkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYKKwkJCXNjb25uID0gKHN0
cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJCWxwb3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7
CisJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgeworCQkJCWJpbmRhbGwgPSAwOwor
CQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFGTk9TVVBQT1JU
KTsKKwkJCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9JTkZPX1dM
T0NLKCk7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkvKiBTZXR1cCBhIHZyZl9pZCB0byBiZSB0
aGUgZGVmYXVsdCBmb3IgdGhlIG5vbi1iaW5kLWFsbCBjYXNlLiAqLworCXZyZl9pZCA9IGlucC0+
ZGVmX3ZyZl9pZDsKKworCS8qIGluY3JlYXNlIG91ciBjb3VudCBkdWUgdG8gdGhlIHVubG9jayB3
ZSBkbyAqLworCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJaWYgKGxwb3J0KSB7CisJCS8qCisJ
CSAqIERpZCB0aGUgY2FsbGVyIHNwZWNpZnkgYSBwb3J0PyBpZiBzbyB3ZSBtdXN0IHNlZSBpZiBh
biBlcAorCQkgKiBhbHJlYWR5IGhhcyB0aGlzIG9uZSBib3VuZC4KKwkJICovCisJCS8qIGdvdCB0
byBiZSByb290IHRvIGdldCBhdCBsb3cgcG9ydHMgKi8KKyNpZiAhZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkJaWYgKG50b2hzKGxwb3J0KSA8IElQUE9SVF9SRVNFUlZFRCkgeworCQkJaWYgKChwICE9
IE5VTEwpICYmICgoZXJyb3IgPQorI2lmZGVmIF9fRnJlZUJTRF9fCisjaWYgX19GcmVlQlNEX3Zl
cnNpb24gPiA2MDIwMDAKKwkJCQkgIHByaXZfY2hlY2socCwgUFJJVl9ORVRJTkVUX1JFU0VSVkVE
UE9SVCkKKyNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCQkJCSAgc3VzZXJfY3Jl
ZChwLT50ZF91Y3JlZCwgMCkKKyNlbHNlCisJCQkJICBzdXNlcihwKQorI2VuZGlmCisjZWxpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKwkJCQkgIHN1c2VyKHAtPnBfdWNyZWQsICZwLT5wX2FjZmxhZykK
KyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgLyogbXVzdCBiZSB0cnVlIHRvIHVzZSByYXcg
c29ja2V0ICovCisJCQkJICAxCisjZWxzZQorCQkJCSAgc3VzZXIocCwgMCkKKyNlbmRpZgorCQkJ
CSAgICApICE9IDApKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCQkJcmV0dXJu
IChlcnJvcik7CisJCQl9CisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJCQlpZiAoIVNDVFBfSVNf
UFJJVklMRURHRUQoc28pKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFD
Q0VTKTsKKwkJCQlyZXR1cm4gKEVBQ0NFUyk7CisJCQl9CisjZW5kaWYKKwkJfQorI2VuZGlmIC8q
IF9fV2luZG93c19fICovCisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJaWYgKGJpbmRhbGwp
IHsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBp
KyspIHsKKwkJCQl2cmZfaWQgPSBpbnAtPm1fdnJmX2lkc1tpXTsKKyNlbHNlCisJCQkJdnJmX2lk
ID0gaW5wLT5kZWZfdnJmX2lkOworI2VuZGlmCisJCQkJaW5wX3RtcCA9IHNjdHBfcGNiX2ZpbmRl
cChhZGRyLCAwLCAxLCB2cmZfaWQpOworCQkJCWlmIChpbnBfdG1wICE9IE5VTEwpIHsKKwkJCQkJ
LyoKKwkJCQkJICogbG9jayBndXkgcmV0dXJuZWQgYW5kIGxvd2VyIGNvdW50CisJCQkJCSAqIG5v
dGUgdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvCisJCQkJCSAqIGlucF90bXAgc2hvdWxkIE5FVkVS
IGJlIGlucC4gQW5kCisJCQkJCSAqIGl0IGlzIHRoaXMgaW5wIChpbnBfdG1wKSB0aGF0IGdldHMK
KwkJCQkJICogdGhlIHJlZmVyZW5jZSBidW1wLCBzbyB3ZSBtdXN0CisJCQkJCSAqIGxvd2VyIGl0
LgorCQkJCQkgKi8KKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wX3RtcCk7CisJCQkJCS8qIHVu
bG9jayBpbmZvICovCisJCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUE9SVFJFVVNFKSkgJiYKKwkJCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wX3Rt
cCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKKwkJCQkJCS8qIE9rLCBtdXN0IGJlIG9u
ZS0yLW9uZSBhbmQgYWxsb3dpbmcgcG9ydCByZS11c2UgKi8KKwkJCQkJCXBvcnRfcmV1c2VfYWN0
aXZlID0gMTsKKwkJCQkJCWdvdG8gY29udGludWVfYW55d2F5OworCQkJCQl9CisJCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
QUREUklOVVNFKTsKKwkJCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJCQl9CisjaWZkZWYgU0NU
UF9NVlJGCisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWlucF90bXAgPSBzY3RwX3BjYl9m
aW5kZXAoYWRkciwgMCwgMSwgdnJmX2lkKTsKKwkJCWlmIChpbnBfdG1wICE9IE5VTEwpIHsKKwkJ
CQkvKgorCQkJCSAqIGxvY2sgZ3V5IHJldHVybmVkIGFuZCBsb3dlciBjb3VudCBub3RlCisJCQkJ
ICogdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvIGlucF90bXAgc2hvdWxkCisJCQkJICogTkVWRVIg
YmUgaW5wLiBBbmQgaXQgaXMgdGhpcyBpbnAgKGlucF90bXApCisJCQkJICogdGhhdCBnZXRzIHRo
ZSByZWZlcmVuY2UgYnVtcCwgc28gd2UgbXVzdAorCQkJCSAqIGxvd2VyIGl0LgorCQkJCSAqLwor
CQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF90bXApOworCQkJCS8qIHVubG9jayBpbmZvICovCisJ
CQkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0Up
KSAmJgorCQkJCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucF90bXAsIFNDVFBfUENCX0ZMQUdT
X1BPUlRSRVVTRSkpKSB7CisJCQkJCS8qIE9rLCBtdXN0IGJlIG9uZS0yLW9uZSBhbmQgYWxsb3dp
bmcgcG9ydCByZS11c2UgKi8KKwkJCQkJcG9ydF9yZXVzZV9hY3RpdmUgPSAxOworCQkJCQlnb3Rv
IGNvbnRpbnVlX2FueXdheTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJ
CQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFQUREUklOVVNFKTsKKwkJCQlyZXR1cm4g
KEVBRERSSU5VU0UpOworCQkJfQorCQl9CisJY29udGludWVfYW55d2F5OgorCQlTQ1RQX0lOUF9X
TE9DSyhpbnApOworCQlpZiAoYmluZGFsbCkgeworCQkJLyogdmVyaWZ5IHRoYXQgbm8gbHBvcnQg
aXMgbm90IHVzZWQgYnkgYSBzaW5nbGV0b24gKi8KKwkJCWlmICgocG9ydF9yZXVzZV9hY3RpdmUg
PT0gMCkgJiYKKwkJCSAgICAoaW5wX3RtcCA9IHNjdHBfaXNwb3J0X2ludXNlKGlucCwgbHBvcnQs
IHZyZl9pZCkpKSB7CisJCQkJLyogU29ycnkgc29tZW9uZSBhbHJlYWR5IGhhcyB0aGlzIG9uZSBi
b3VuZCAqLworCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UE9SVFJFVVNFKSkgJiYKKwkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnBfdG1wLCBTQ1RQ
X1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQkJCQlwb3J0X3JldXNlX2FjdGl2ZSA9IDE7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworCQkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJJ
TlVTRSk7CisJCQkJCXJldHVybiAoRUFERFJJTlVTRSk7CisJCQkJfQorCQkJfQorCQl9CisJfSBl
bHNlIHsKKwkJdWludDE2X3QgZmlyc3QsIGxhc3QsIGNhbmRpZGF0ZTsKKwkJdWludDE2X3QgY291
bnQ7CisJCWludCBkb25lOworCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJZmlyc3QgPSAx
OworCQlsYXN0ID0gMHhmZmZmOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CS8qIFRPRE8gZW5zdXJlIHVpZCBpcyAwLCBldGMuLi4gKi8KKyNlbGlmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorCQlpZiAoaXBfaW5wLT5pbnBfZmxhZ3MgJiBJ
TlBfSElHSFBPUlQpIHsKKwkJCWZpcnN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfaGlmaXJzdGF1
dG8pOworCQkJbGFzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2hpbGFzdGF1dG8pOworCQl9IGVs
c2UgaWYgKGlwX2lucC0+aW5wX2ZsYWdzICYgSU5QX0xPV1BPUlQpIHsKKwkJCWlmIChwICYmIChl
cnJvciA9CisjaWZkZWYgX19GcmVlQlNEX18KKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAw
MAorCQkJCSAgcHJpdl9jaGVjayhwLCBQUklWX05FVElORVRfUkVTRVJWRURQT1JUKQorI2VsaWYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisJCQkJICBzdXNlcl9jcmVkKHAtPnRkX3VjcmVk
LCAwKQorI2Vsc2UKKwkJCQkgIHN1c2VyKHApCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19BUFBM
RV9fKQorCQkJCSAgc3VzZXIocC0+cF91Y3JlZCwgJnAtPnBfYWNmbGFnKQorI2Vsc2UKKwkJCQkg
IHN1c2VyKHAsIDApCisjZW5kaWYKKwkJCQkgICAgKSkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCVNDVFBfSU5QX0lORk9fV1VO
TE9DSygpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9QQ0IsIGVycm9yKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0KKwkJCWZpcnN0
ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfbG93Zmlyc3RhdXRvKTsKKwkJCWxhc3QgPSBNT0RVTEVf
R0xPQkFMKGlwcG9ydF9sb3dsYXN0YXV0byk7CisJCX0gZWxzZSB7CisjZW5kaWYKKwkJCWZpcnN0
ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfZmlyc3RhdXRvKTsKKwkJCWxhc3QgPSBNT0RVTEVfR0xP
QkFMKGlwcG9ydF9sYXN0YXV0byk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pCisJCX0KKyNlbmRpZgorI2VuZGlmIC8qIF9fV2luZG93c19fICovCisJCWlm
IChmaXJzdCA+IGxhc3QpIHsKKwkJCXVpbnQxNl90IHRlbXA7CisKKwkJCXRlbXAgPSBmaXJzdDsK
KwkJCWZpcnN0ID0gbGFzdDsKKwkJCWxhc3QgPSB0ZW1wOworCQl9CisJCWNvdW50ID0gbGFzdCAt
IGZpcnN0ICsgMTsgLyogbnVtYmVyIG9mIGNhbmRpZGF0ZXMgKi8KKwkJY2FuZGlkYXRlID0gZmly
c3QgKyBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKSAlIChjb3VudCk7CisK
KwkJZG9uZSA9IDA7CisJCXdoaWxlICghZG9uZSkgeworI2lmZGVmIFNDVFBfTVZSRgorCQkJZm9y
IChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJCWlmIChzY3RwX2lzcG9ydF9p
bnVzZShpbnAsIGh0b25zKGNhbmRpZGF0ZSksIGlucC0+bV92cmZfaWRzW2ldKSAhPSBOVUxMKSB7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpID09IGlucC0+bnVtX3ZyZnMpIHsK
KwkJCQlkb25lID0gMTsKKwkJCX0KKyNlbHNlCisJCQlpZiAoc2N0cF9pc3BvcnRfaW51c2UoaW5w
LCBodG9ucyhjYW5kaWRhdGUpLCBpbnAtPmRlZl92cmZfaWQpID09IE5VTEwpIHsKKwkJCQlkb25l
ID0gMTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKCFkb25lKSB7CisJCQkJaWYgKC0tY291bnQgPT0g
MCkgeworCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFQUREUklOVVNFKTsK
KwkJCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJCQl9CisJCQkJaWYgKGNhbmRpZGF0ZSA9PSBs
YXN0KQorCQkJCQljYW5kaWRhdGUgPSBmaXJzdDsKKwkJCQllbHNlCisJCQkJCWNhbmRpZGF0ZSA9
IGNhbmRpZGF0ZSArIDE7CisJCQl9CisJCX0KKwkJbHBvcnQgPSBodG9ucyhjYW5kaWRhdGUpOwor
CX0KKwlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiAoU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfAorCQkJICAgICAgIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9BTExHT05FKSkgeworCQkvKgorCQkgKiB0aGlzIHJlYWxseSBzaG91bGQgbm90IGhhcHBlbi4g
VGhlIGd1eSBkaWQgYSBub24tYmxvY2tpbmcKKwkJICogYmluZCBhbmQgdGhlbiBkaWQgYSBjbG9z
ZSBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKi8KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlT
Q1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOwor
CX0KKwkvKiBvayB3ZSBsb29rIGNsZWFyIHRvIGdpdmUgb3V0IHRoaXMgcG9ydCwgc28gbGV0cyBz
ZXR1cCB0aGUgYmluZGluZyAqLworCWlmIChiaW5kYWxsKSB7CisJCS8qIGJpbmRpbmcgdG8gYWxs
IGFkZHJlc3Nlcywgc28ganVzdCBzZXQgaW4gdGhlIHByb3BlciBmbGFncyAqLworCQlpbnAtPnNj
dHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEw7CisJCS8qIHNldCB0aGUgYXV0b21h
dGljIGFkZHIgY2hhbmdlcyBmcm9tIGtlcm5lbCBmbGFnICovCisJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYXV0b19hc2NvbmYpID09IDApIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBT
Q1RQX1BDQl9GTEFHU19ET19BU0NPTkYpOworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX0FVVE9fQVNDT05GKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORik7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORik7CisJCX0KKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tdWx0aXBsZV9hc2NvbmZzKSA9PSAwKSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfTVVMVElQTEVfQVNDT05GUyk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NPTkZTKTsKKwkJfQorCQkv
KiBzZXQgdGhlIGF1dG9tYXRpYyBtb2JpbGl0eV9iYXNlIGZyb20ga2VybmVsCisJCSAgIGZsYWcg
KGJ5IG1pY2NoaWUpCisJCSovCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlf
YmFzZSkgPT0gMCkgeworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9C
SUxJVFlfQkFTRSk7CisJCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJ
TElUWV9QUklNX0RFTEVURUQpOworCQl9IGVsc2UgeworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJl
X29uKGlucCwgU0NUUF9NT0JJTElUWV9CQVNFKTsKKwkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJCX0KKwkJLyogc2V0IHRoZSBh
dXRvbWF0aWMgbW9iaWxpdHlfZmFzdGhhbmRvZmYgZnJvbSBrZXJuZWwKKwkJICAgZmxhZyAoYnkg
bWljY2hpZSkKKwkJKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0
aGFuZG9mZikgPT0gMCkgeworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBf
TU9CSUxJVFlfRkFTVEhBTkRPRkYpOworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAs
IFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfbW9iaWxp
dHlfZmVhdHVyZV9vbihpbnAsIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpOworCQkJc2N0cF9t
b2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKKwkJ
fQorCX0gZWxzZSB7CisJCS8qCisJCSAqIGJpbmQgc3BlY2lmaWMsIG1ha2Ugc3VyZSBmbGFncyBp
cyBvZmYgYW5kIGFkZCBhIG5ldworCQkgKiBhZGRyZXNzIHN0cnVjdHVyZSB0byB0aGUgc2N0cF9h
ZGRyX2xpc3QgaW5zaWRlIHRoZSBlcAorCQkgKiBzdHJ1Y3R1cmUuCisJCSAqCisJCSAqIFdlIHdp
bGwgbmVlZCB0byBhbGxvY2F0ZSBvbmUgYW5kIGluc2VydCBpdCBhdCB0aGUgaGVhZC4gVGhlCisJ
CSAqIHNvY2tldG9wdCBjYWxsIGNhbiBqdXN0IGluc2VydCBuZXcgYWRkcmVzc2VzIGluIHRoZXJl
IGFzCisJCSAqIHdlbGwuIEl0IHdpbGwgYWxzbyBoYXZlIHRvIGRvIHRoZSBlbWJlZCBzY29wZSBr
YW1lIGhhY2sKKwkJICogdG9vIChiZWZvcmUgYWRkaW5nKS4KKwkJICovCisJCXN0cnVjdCBzY3Rw
X2lmYSAqaWZhOworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKworCQltZW1zZXQoJnN0
b3JlLCAwLCBzaXplb2Yoc3RvcmUpKTsKKwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCW1lbWNweSgmc3RvcmUuc2luLCBhZGRyLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQlzdG9yZS5zaW4uc2luX3BvcnQgPSAwOwor
CQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJbWVt
Y3B5KCZzdG9yZS5zaW42LCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJ
c3RvcmUuc2luNi5zaW42X3BvcnQgPSAwOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCW1lbWNweSgmc3RvcmUuc2Nvbm4s
IGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJc3RvcmUuc2Nvbm4uc2Nv
bm5fcG9ydCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJ
CX0KKwkJLyoKKwkJICogZmlyc3QgZmluZCB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIGJvdW5kIGFk
ZHJlc3MgbmVlZCB0bworCQkgKiB6ZXJvIG91dCB0aGUgcG9ydCB0byBmaW5kIHRoZSBhZGRyZXNz
ISB5dWNrISBjYW4ndCBkbworCQkgKiB0aGlzIGVhcmxpZXIgc2luY2UgbmVlZCBwb3J0IGZvciBz
Y3RwX3BjYl9maW5kZXAoKQorCQkgKi8KKwkJaWYgKHNjdHBfaWZhcCAhPSBOVUxMKSB7CisJCQlp
ZmEgPSBzY3RwX2lmYXA7CisJCX0gZWxzZSB7CisJCQkvKiBOb3RlIGZvciBCU0Qgd2UgaGl0IGhl
cmUgYWx3YXlzIG90aGVyCisJCQkgKiBPL1MncyB3aWxsIHBhc3MgdGhpbmdzIGluIHZpYSB0aGUK
KwkJCSAqIHNjdHBfaWZhcCBhcmd1bWVudCAoUGFuZGEpLgorCQkJICovCisJCQlpZmEgPSBzY3Rw
X2ZpbmRfaWZhX2J5X2FkZHIoJnN0b3JlLnNhLAorCQkJCQkJICAgIHZyZl9pZCwgU0NUUF9BRERS
X05PVF9MT0NLRUQpOworCQl9CisJCWlmIChpZmEgPT0gTlVMTCkgeworCQkJLyogQ2FuJ3QgZmlu
ZCBhbiBpbnRlcmZhY2Ugd2l0aCB0aGF0IGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJOT1RBVkFJTCk7CisJ
CQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQl9CisjaWZkZWYgSU5FVDYKKwkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJLyogR0FLLCBtb3JlIEZJWE1FIElGQSBsb2Nr
PyAqLworCQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJM
RSkgeworCQkJCS8qIENhbid0IGJpbmQgYSBub24tZXhpc3RlbnQgYWRkci4gKi8KKwkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlO
VkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvKiB3ZSdy
ZSBub3QgYm91bmQgYWxsICovCisJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRBTEw7CisJCS8qIGFsbG93IGJpbmR4KCkgdG8gc2VuZCBBU0NPTkYncyBmb3IgYmluZGlu
ZyBjaGFuZ2VzICovCisJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FT
Q09ORik7CisJCS8qIGNsZWFyIGF1dG9tYXRpYyBhZGRyIGNoYW5nZXMgZnJvbSBrZXJuZWwgZmxh
ZyAqLworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYp
OworCisJCS8qIGFkZCB0aGlzIGFkZHJlc3MgdG8gdGhlIGVuZHBvaW50IGxpc3QgKi8KKwkJZXJy
b3IgPSBzY3RwX2luc2VydF9sYWRkcigmaW5wLT5zY3RwX2FkZHJfbGlzdCwgaWZhLCAwKTsKKwkJ
aWYgKGVycm9yICE9IDApIHsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCVNDVFBfSU5Q
X0lORk9fV1VOTE9DSygpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKwkJaW5wLT5sYWRkcl9j
b3VudCsrOworCX0KKwkvKiBmaW5kIHRoZSBidWNrZXQgKi8KKwlpZiAocG9ydF9yZXVzZV9hY3Rp
dmUpIHsKKwkJLyogUHV0IGl0IGludG8gdGNwIDEtMi0xIGhhc2ggKi8KKwkJaGVhZCA9ICZTQ1RQ
X0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIobHBvcnQsIFND
VFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSldOworCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTDsKKwl9IGVsc2UgeworCQloZWFkID0gJlNDVFBfQkFTRV9JTkZP
KHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9ydCwgU0NUUF9CQVNFX0lORk8o
aGFzaG1hcmspKV07CisJfQorCS8qIHB1dCBpdCBpbiB0aGUgYnVja2V0ICovCisJTElTVF9JTlNF
UlRfSEVBRChoZWFkLCBpbnAsIHNjdHBfaGFzaCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEs
ICJNYWluIGhhc2ggdG8gYmluZCBhdCBoZWFkOiVwLCBib3VuZCBwb3J0OiVkIC0gaW4gdGNwX3Bv
b2w9JWRcbiIsCisJCSh2b2lkICopaGVhZCwgbnRvaHMobHBvcnQpLCBwb3J0X3JldXNlX2FjdGl2
ZSk7CisJLyogc2V0IGluIHRoZSBwb3J0ICovCisJaW5wLT5zY3RwX2xwb3J0ID0gbHBvcnQ7CisK
KwkvKiB0dXJuIG9mZiBqdXN0IHRoZSB1bmJvdW5kIGZsYWcgKi8KKwlpbnAtPnNjdHBfZmxhZ3Mg
Jj0gflNDVFBfUENCX0ZMQUdTX1VOQk9VTkQ7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCVND
VFBfSU5QX0lORk9fV1VOTE9DSygpOworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIHZvaWQK
K3NjdHBfaXRlcmF0b3JfaW5wX2JlaW5nX2ZyZWVkKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7
CisJc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0LCAqbml0OworCisJLyoKKwkgKiBXZSBlbnRlciB3
aXRoIHRoZSBvbmx5IHRoZSBJVEVSQVRPUl9MT0NLIGluIHBsYWNlIGFuZCBhIHdyaXRlCisJICog
bG9jayBvbiB0aGUgaW5wX2luZm8gc3R1ZmYuCisJICovCisJaXQgPSBzY3RwX2l0X2N0bC5jdXJf
aXQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAx
MDAwCisJaWYgKGl0ICYmIChpdC0+dm4gIT0gY3Vydm5ldCkpIHsKKwkJLyogSXRzIG5vdCBsb29r
aW5nIGF0IG91ciBWTkVUICovCisJCXJldHVybjsKKwl9CisjZW5kaWYKKwlpZiAoaXQgJiYgKGl0
LT5pbnAgPT0gaW5wKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIHRyaWNreSBhbmQgd2UgaG9sZCB0
aGUgaXRlcmF0b3IgbG9jaywKKwkJICogYnV0IHdoZW4gaXQgcmV0dXJucyBhbmQgZ2V0cyB0aGUg
bG9jayAod2hlbiB3ZQorCQkgKiByZWxlYXNlIGl0KSB0aGUgaXRlcmF0b3Igd2lsbCB0cnkgdG8g
b3BlcmF0ZSBvbgorCQkgKiBpbnAuIFdlIG5lZWQgdG8gc3RvcCB0aGF0IGZyb20gaGFwcGVuaW5n
LiBCdXQKKwkJICogb2YgY291cnNlIHRoZSBpdGVyYXRvciBoYXMgYSByZWZlcmVuY2Ugb24gdGhl
CisJCSAqIHN0Y2IgYW5kIGlucC4gV2UgY2FuIG1hcmsgaXQgYW5kIGl0IHdpbGwgc3RvcC4KKwkJ
ICoKKwkJICogSWYgaXRzIGEgc2luZ2xlIGl0ZXJhdG9yIHNpdHVhdGlvbiwgd2UKKwkJICogc2V0
IHRoZSBlbmQgaXRlcmF0b3IgZmxhZy4gT3RoZXJ3aXNlCisJCSAqIHdlIHNldCB0aGUgaXRlcmF0
b3IgdG8gZ28gdG8gdGhlIG5leHQgaW5wLgorCQkgKgorCQkgKi8KKwkJaWYgKGl0LT5pdGVyYXRv
cl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJc2N0cF9pdF9jdGwu
aXRlcmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JVDsKKwkJfSBlbHNlIHsK
KwkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJf
SU5QOworCQl9CisJfQorCS8qIE5vdyBnbyB0aHJvdWdoIGFuZCByZW1vdmUgYW55IHNpbmdsZSBy
ZWZlcmVuY2UgdG8KKwkgKiBvdXIgaW5wIHRoYXQgbWF5IGJlIHN0aWxsIHBlbmRpbmcgb24gdGhl
IGxpc3QKKwkgKi8KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCk7CisJVEFJTFFfRk9SRUFD
SF9TQUZFKGl0LCAmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBzY3RwX254dF9pdHIsIG5pdCkg
eworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAw
MAorCQlpZiAoaXQtPnZuICE9IGN1cnZuZXQpIHsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYK
KwkJaWYgKGl0LT5pbnAgPT0gaW5wKSB7CisJCQkvKiBUaGlzIG9uZSBwb2ludHMgdG8gbWUgaXMg
aXQgaW5wIHNwZWNpZmljPyAqLworCQkJaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRF
UkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJCS8qIFJlbW92ZSBhbmQgZnJlZSB0aGlzIG9uZSAq
LworCQkJCVRBSUxRX1JFTU9WRSgmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLAorCQkJCSAgICBp
dCwgc2N0cF9ueHRfaXRyKTsKKwkJCQlpZiAoaXQtPmZ1bmN0aW9uX2F0ZW5kICE9IE5VTEwpIHsK
KwkJCQkJKCppdC0+ZnVuY3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7CisJCQkJ
fQorCQkJCVNDVFBfRlJFRShpdCwgU0NUUF9NX0lURVIpOworCQkJfSBlbHNlIHsKKwkJCQlpdC0+
aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7CisJCQkJaWYgKGl0LT5pbnApIHsK
KwkJCQkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCQkJfQorCQkJfQorCQkJLyogV2hl
biBpdHMgcHV0IGluIHRoZSByZWZjbnQgaXMgaW5jcmVtZW50ZWQgc28gZGVjciBpdCAqLworCQkJ
U0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCX0KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9V
TkxPQ0soKTsKK30KKworLyogcmVsZWFzZSBzY3RwX2lucGNiIHVuYmluZCB0aGUgcG9ydCAqLwor
dm9pZAorc2N0cF9pbnBjYl9mcmVlKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIGludCBpbW1lZGlh
dGUsIGludCBmcm9tKQoreworCS8qCisJICogSGVyZSB3ZSBmcmVlIGEgZW5kcG9pbnQuIFdlIG11
c3QgZmluZCBpdCAoaWYgaXQgaXMgaW4gdGhlIEhhc2gKKwkgKiB0YWJsZSkgYW5kIHJlbW92ZSBp
dCBmcm9tIHRoZXJlLiBUaGVuIHdlIG11c3QgYWxzbyBmaW5kIGl0IGluIHRoZQorCSAqIG92ZXJh
bGwgbGlzdCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlcmUuIEFmdGVyIGFsbCByZW1vdmFscyBhcmUK
KwkgKiBjb21wbGV0ZSB0aGVuIGFueSB0aW1lciBoYXMgdG8gYmUgc3RvcHBlZC4gVGhlbiBzdGFy
dCB0aGUgYWN0dWFsCisJICogZnJlZWluZy4gYSkgQW55IGxvY2FsIGxpc3RzLiBiKSBBbnkgYXNz
b2NpYXRpb25zLiBjKSBUaGUgaGFzaCBvZgorCSAqIGFsbCBhc3NvY2lhdGlvbnMuIGQpIGZpbmFs
bHkgdGhlIGVwIGl0c2VsZi4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90Y2IgKmFzb2MsICpuYXNvYzsK
KwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpubGFkZHI7CisJc3RydWN0IGlucGNiICppcF9w
Y2I7CisJc3RydWN0IHNvY2tldCAqc287CisJaW50IGJlaW5nX3JlZmVkID0gMDsKKwlzdHJ1Y3Qg
c2N0cF9xdWV1ZWRfdG9fcmVhZCAqc3EsICpuc3E7CisjaWYgIWRlZmluZWQoX19QYW5kYV9fKSAm
JiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBf
X0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAorCXNjdHBfcnRlbnRyeV90ICpydDsKKyNlbmRpZgor
I2VuZGlmCisJaW50IGNudDsKKwlzY3RwX3NoYXJlZGtleV90ICpzaGFyZWRfa2V5LCAqbnNoYXJl
ZF9rZXk7CisKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBfbG9ja19hc3NlcnQoU0NU
UF9JTlBfU08oaW5wKSk7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9s
b2dfY2xvc2luZyhpbnAsIE5VTEwsIDApOworI2VuZGlmCisJU0NUUF9JVEVSQVRPUl9MT0NLKCk7
CisJLyogbWFyayBhbnkgaXRlcmF0b3JzIG9uIHRoZSBsaXN0IG9yIGJlaW5nIHByb2Nlc3NlZCAq
LworCXNjdHBfaXRlcmF0b3JfaW5wX2JlaW5nX2ZyZWVkKGlucCk7CisJU0NUUF9JVEVSQVRPUl9V
TkxPQ0soKTsKKwlzbyA9IGlucC0+c2N0cF9zb2NrZXQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCS8qIGJlZW4gaGVyZSBiZWZvcmUu
LiBlZWtzLi4gZ2V0IG91dCBvZiBoZXJlICovCisJCVNDVFBfUFJJTlRGKCJUaGlzIGNvbmZsaWN0
IGluIGZyZWUgU0hPVUxEIG5vdCBiZSBoYXBwZW5pbmchIGZyb20gJWQsIGltbSAlZFxuIiwgZnJv
bSwgaW1tZWRpYXRlKTsKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3Np
bmcoaW5wLCBOVUxMLCAxKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCVNDVFBfQVNPQ19DUkVB
VEVfTE9DSyhpbnApOworCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKworCVNDVFBfSU5QX1dMT0NL
KGlucCk7CisJaWYgKGZyb20gPT0gU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpIHsK
KwkJaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19DTE9TRV9JUDsKKwkJLyogc29j
a2V0IGlzIGdvbmUsIHNvIG5vIG1vcmUgd2FrZXVwcyBhbGxvd2VkICovCisJCWlucC0+c2N0cF9m
bGFncyB8PSBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0U7CisJCWlucC0+c2N0cF9mbGFncyAmPSB+
U0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUOworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENC
X0ZMQUdTX1dBS0VPVVRQVVQ7CisKKwl9CisJLyogRmlyc3QgdGltZSB0aHJvdWdoIHdlIGhhdmUg
dGhlIHNvY2tldCBsb2NrLCBhZnRlciB0aGF0IG5vIG1vcmUuICovCisJc2N0cF90aW1lcl9zdG9w
KFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUUsIGlucCwgTlVMTCwgTlVMTCwKKwkJCVNDVFBfRlJP
TV9TQ1RQX1BDQiArIFNDVFBfTE9DXzEpOworCisJaWYgKGlucC0+Y29udHJvbCkgeworCQlzY3Rw
X21fZnJlZW0oaW5wLT5jb250cm9sKTsKKwkJaW5wLT5jb250cm9sID0gTlVMTDsKKwl9CisJaWYg
KGlucC0+cGt0KSB7CisJCXNjdHBfbV9mcmVlbShpbnAtPnBrdCk7CisJCWlucC0+cGt0ID0gTlVM
TDsKKwl9CisJaXBfcGNiID0gJmlucC0+aXBfaW5wLmlucDsJLyogd2UgY291bGQganVzdCBjYXN0
IHRoZSBtYWluIHBvaW50ZXIKKwkJCQkJICogaGVyZSBidXQgSSB3aWxsIGJlIG5pY2UgOj4gKGku
ZS4KKwkJCQkJICogaXBfcGNiID0gZXA7KSAqLworCWlmIChpbW1lZGlhdGUgPT0gU0NUUF9GUkVF
X1NIT1VMRF9VU0VfR1JBQ0VGVUxfQ0xPU0UpIHsKKwkJaW50IGNudF9pbl9zZDsKKworCQljbnRf
aW5fc2QgPSAwOworCQlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fzb2NfbGlz
dCwgc2N0cF90Y2JsaXN0LCBuYXNvYykgeworCQkJU0NUUF9UQ0JfTE9DSyhhc29jKTsKKwkJCWlm
IChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJ
CS8qIFNraXAgZ3V5cyBiZWluZyBmcmVlZCAqLworCQkJCWNudF9pbl9zZCsrOworCQkJCWlmIChh
c29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUUpIHsKKwkJCQkJLyoK
KwkJCQkJICogU3BlY2lhbCBjYXNlIC0gd2UgZGlkIG5vdCBzdGFydCBhIGtpbGwKKwkJCQkJICog
dGltZXIgb24gdGhlIGFzb2MgZHVlIHRvIGl0IHdhcyBub3QKKwkJCQkJICogY2xvc2VkLiBTbyBn
byBhaGVhZCBhbmQgc3RhcnQgaXQgbm93LgorCQkJCQkgKi8KKwkJCQkJYXNvYy0+YXNvYy5zdGF0
ZSAmPSB+U0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUU7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIGFzb2MsIE5VTEwpOworCQkJCX0KKwkJCQlT
Q1RQX1RDQl9VTkxPQ0soYXNvYyk7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKChTQ1RQ
X0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkJ
CSAgICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VD
SE9FRCkpICYmCisJCQkgICAgKGFzb2MtPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPT0g
MCkpIHsKKwkJCQkvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gcXVldWUsIHdlIGRvbid0IHdhbnQgdG8g
anVzdAorCQkJCSAqIGZyZWUgc2luY2UgdGhlIGFwcCBtYXkgaGF2ZSBkb25lLCBzZW5kKCkvY2xv
c2UKKwkJCQkgKiBvciBjb25uZWN0L3NlbmQvY2xvc2UuIEFuZCBpdCB3YW50cyB0aGUgZGF0YQor
CQkJCSAqIHRvIGdldCBhY3Jvc3MgZmlyc3QuCisJCQkJICovCisJCQkJLyogSnVzdCBhYmFuZG9u
IHRoaW5ncyBpbiB0aGUgZnJvbnQgc3RhdGVzICovCisJCQkJaWYgKHNjdHBfZnJlZV9hc3NvYyhp
bnAsIGFzb2MsIFNDVFBfUENCRlJFRV9OT0ZPUkNFLAorCQkJCQkJICAgU0NUUF9GUk9NX1NDVFBf
UENCICsgU0NUUF9MT0NfMikgPT0gMCkgeworCQkJCQljbnRfaW5fc2QrKzsKKwkJCQl9CisJCQkJ
Y29udGludWU7CisJCQl9CisJCQkvKiBEaXNjb25uZWN0IHRoZSBzb2NrZXQgcGxlYXNlICovCisJ
CQlhc29jLT5zY3RwX3NvY2tldCA9IE5VTEw7CisJCQlhc29jLT5hc29jLnN0YXRlIHw9IFNDVFBf
U1RBVEVfQ0xPU0VEX1NPQ0tFVDsKKwkJCWlmICgoYXNvYy0+YXNvYy5zaXplX29uX3JlYXNtX3F1
ZXVlID4gMCkgfHwKKwkJCSAgICAoYXNvYy0+YXNvYy5jb250cm9sX3BkYXBpKSB8fAorCQkJICAg
IChhc29jLT5hc29jLnNpemVfb25fYWxsX3N0cmVhbXMgPiAwKSB8fAorCQkJICAgIChzbyAmJiAo
c28tPnNvX3Jjdi5zYl9jYyA+IDApKSkgeworCQkJCS8qIExlZnQgd2l0aCBEYXRhIHVucmVhZCAq
LworCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQkJYXNvYy0+c2N0
cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9MT0NfMzsK
KwkJCQlzY3RwX3NlbmRfYWJvcnRfdGNiKGFzb2MsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwor
CQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJCQlpZiAoKFND
VFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkJICAg
IChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNF
SVZFRCkpIHsKKwkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwor
CQkJCX0KKwkJCQlpZiAoc2N0cF9mcmVlX2Fzc29jKGlucCwgYXNvYywKKwkJCQkJCSAgICBTQ1RQ
X1BDQkZSRUVfTk9GT1JDRSwgU0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9MT0NfNCkgPT0gMCkg
eworCQkJCQljbnRfaW5fc2QrKzsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYg
KFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbmRfcXVldWUpICYmCisJCQkgICAgICAgICAgIFRB
SUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkgICAgICAgICAgIChhc29j
LT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKKwkJCQlpZiAoKCphc29jLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShhc29jLCAmYXNvYy0+
YXNvYykpIHsKKwkJCQkJZ290byBhYm9ydF9hbnl3YXk7CisJCQkJfQorCQkJCWlmICgoU0NUUF9H
RVRfU1RBVEUoJmFzb2MtPmFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJ
CQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dO
X0FDS19TRU5UKSkgeworCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOworCisJCQkJCS8qCisJ
CQkJCSAqIHRoZXJlIGlzIG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsCisJCQkJCSAqIHNvIEkgc2Vu
ZCBzaHV0ZG93bgorCQkJCQkgKi8KKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNv
YykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29j
LT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgeworCQkJCQkJU0NUUF9T
VEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJCQl9CisJCQkJCVNDVFBfU0VU
X1NUQVRFKCZhc29jLT5hc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJCQlTQ1RQ
X0NMRUFSX1NVQlNUQVRFKCZhc29jLT5hc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcp
OworCQkJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihhc29jKTsKKwkJCQkJaWYgKGFz
b2MtPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCQluZXRwID0gYXNvYy0+YXNvYy5hbHRlcm5hdGU7
CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXRwID0gYXNvYy0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uOworCQkJCQl9CisJCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihhc29jLCBuZXRwKTsKKwkJCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sIGFzb2MtPnNjdHBfZXAs
IGFzb2MsCisJCQkJCSAgICBuZXRwKTsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfU0hVVERPV05HVUFSRCwgYXNvYy0+c2N0cF9lcCwgYXNvYywKKwkJCQkJICAgIGFzb2Mt
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwg
YXNvYywgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiwgU0NUUF9TT19MT0NLRUQpOworCQkJCX0K
KwkJCX0gZWxzZSB7CisJCQkJLyogbWFyayBpbnRvIHNodXRkb3duIHBlbmRpbmcgKi8KKwkJCQlh
c29jLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORzsKKwkJCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBhc29jLT5zY3RwX2Vw
LCBhc29jLAorCQkJCQkJIGFzb2MtPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQkJaWYg
KCgqYXNvYy0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0
ZSkoYXNvYywgJmFzb2MtPmFzb2MpKSB7CisJCQkJCWFzb2MtPmFzb2Muc3RhdGUgfD0gU0NUUF9T
VEFURV9QQVJUSUFMX01TR19MRUZUOworCQkJCX0KKwkJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2Mt
PmFzb2Muc2VuZF9xdWV1ZSkgJiYKKwkJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPmFzb2Muc2Vu
dF9xdWV1ZSkgJiYKKwkJCQkgICAgKGFzb2MtPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX1BBUlRJ
QUxfTVNHX0xFRlQpKSB7CisJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJYWJvcnRfYW55
d2F5OgorCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9J
TklUSUFURURfQUJULCAiIik7CisJCQkJCWFzb2MtPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9
IFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzU7CisJCQkJCXNjdHBfc2VuZF9hYm9ydF90
Y2IoYXNvYywgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCVNDVFBfU1RBVF9JTkNSX0NP
VU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+
YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZh
c29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgeworCQkJCQkJU0NU
UF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJCQl9CisJCQkJCWlmIChz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBhc29jLAorCQkJCQkJCSAgICBTQ1RQX1BDQkZSRUVfTk9GT1JD
RSwKKwkJCQkJCQkgICAgU0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9MT0NfNikgPT0gMCkgewor
CQkJCQkJY250X2luX3NkKys7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsK
KwkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBhc29jLCBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJ
TkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQl9CisJCQljbnRfaW5fc2QrKzsKKwkJCVND
VFBfVENCX1VOTE9DSyhhc29jKTsKKwkJfQorCQkvKiBub3cgaXMgdGhlcmUgc29tZSBsZWZ0IGlu
IG91ciBTSFVURE9XTiBzdGF0ZT8gKi8KKwkJaWYgKGNudF9pbl9zZCkgeworI2lmZGVmIFNDVFBf
TE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAyKTsKKyNlbmRpZgor
CQkJaW5wLT5zY3RwX3NvY2tldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJ
CQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaW5wLT5zY3RwX3NvY2tldCA9IE5VTEw7CisJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSAhPQorCSAgICBTQ1RQ
X1BDQl9GTEFHU19VTkJPVU5EKSB7CisJCS8qCisJCSAqIG9rLCB0aGlzIGd1eSBoYXMgYmVlbiBi
b3VuZC4gSXQncyBwb3J0IGlzCisJCSAqIHNvbWV3aGVyZSBpbiB0aGUgU0NUUF9CQVNFX0lORk8o
aGFzaCB0YWJsZSkuIFJlbW92ZQorCQkgKiBpdCEKKwkJICovCisJCUxJU1RfUkVNT1ZFKGlucCwg
c2N0cF9oYXNoKTsKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQ7
CisJfQorCisJLyogSWYgdGhlcmUgaXMgYSB0aW1lciBydW5uaW5nIHRvIGtpbGwgdXMsCisJICog
Zm9yZ2V0IGl0LCBzaW5jZSBpdCBtYXkgaGF2ZSBhIGNvbnRlc3QKKwkgKiBvbiB0aGUgSU5QIGxv
Y2suLiB3aGljaCB3b3VsZCBjYXVzZSB1cworCSAqIHRvIGRpZSAuLi4KKwkgKi8KKwljbnQgPSAw
OworCUxJU1RfRk9SRUFDSF9TQUZFKGFzb2MsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QsIG5hc29jKSB7CisJCVNDVFBfVENCX0xPQ0soYXNvYyk7CisJCWlmIChhc29jLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJaWYgKGFzb2MtPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRSkgeworCQkJCWFzb2MtPmFzb2Mu
c3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOworCQkJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIGFzb2MsIE5VTEwpOworCQkJfQorCQkg
ICAgICAgIGNudCsrOworCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2MpOworCQkJY29udGludWU7CisJ
CX0KKwkJLyogRnJlZSBhc3NvY2lhdGlvbnMgdGhhdCBhcmUgTk9UIGtpbGxpbmcgdXMgKi8KKwkJ
aWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgIT0gU0NUUF9TVEFURV9DT09LSUVfV0FJ
VCkgJiYKKwkJICAgICgoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQpID09IDApKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCisJCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJ
CQlhc29jLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBT
Q1RQX0xPQ183OworCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihhc29jLCBvcF9lcnIsIFNDVFBfU09f
TE9DS0VEKTsKKwkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJ
fSBlbHNlIGlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVF
RCkgeworCQkJY250Kys7CisJCQlTQ1RQX1RDQl9VTkxPQ0soYXNvYyk7CisJCQljb250aW51ZTsK
KwkJfQorCQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09Q
RU4pIHx8CisJCSAgICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVf
U0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1
cnJlc3RhYik7CisJCX0KKwkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFzb2MsIFNDVFBfUENC
RlJFRV9GT1JDRSwKKwkJICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBT
Q1RQX0xPQ184KSA9PSAwKSB7CisJCQljbnQrKzsKKwkJfQorCX0KKwlpZiAoY250KSB7CisJCS8q
IE9rIHdlIGhhdmUgc29tZW9uZSBvdXQgdGhlcmUgdGhhdCB3aWxsIGtpbGwgdXMgKi8KKwkJKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1l
cik7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVM
TCwgMyk7CisjZW5kaWYKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlTQ1RQX0FTT0NfQ1JF
QVRFX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJcmV0dXJuOwor
CX0KKwlpZiAoU0NUUF9JTlBfTE9DS19DT05URU5ERUQoaW5wKSkKKwkJYmVpbmdfcmVmZWQrKzsK
KwlpZiAoU0NUUF9JTlBfUkVBRF9DT05URU5ERUQoaW5wKSkKKwkJYmVpbmdfcmVmZWQrKzsKKwlp
ZiAoU0NUUF9BU09DX0NSRUFURV9MT0NLX0NPTlRFTkRFRChpbnApKQorCQliZWluZ19yZWZlZCsr
OworCisJaWYgKChpbnAtPnJlZmNvdW50KSB8fAorCSAgICAoYmVpbmdfcmVmZWQpIHx8CisJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpIHsKKwkJKHZvaWQp
U0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7
CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwg
NCk7CisjZW5kaWYKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSU5QS0lMTCwg
aW5wLCBOVUxMLCBOVUxMKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlTQ1RQX0FTT0Nf
Q1JFQVRFX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJcmV0dXJu
OworCX0KKwlpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50eXBlID0gMDsKKwlpbnAtPnNj
dHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkU7CisJLyogUmVtb3ZlIGl0
IGZyb20gdGhlIGxpc3QgLi4gbGFzdCB0aGluZyB3ZSBuZWVkIGEKKwkgKiBsb2NrIGZvci4KKwkg
Ki8KKwlMSVNUX1JFTU9WRShpbnAsIHNjdHBfbGlzdCk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7CisJLyogTm93IHdlIHJlbGVhc2UgYWxsIGxvY2tzLiBTaW5jZSB0aGlzIElOUAorCSAqIGNh
bm5vdCBiZSBmb3VuZCBhbnltb3JlIGV4Y2VwdCBwb3NzaWJseSBieSB0aGUKKwkgKiBraWxsIHRp
bWVyIHRoYXQgbWlnaHQgYmUgcnVubmluZy4gV2UgY2FsbAorCSAqIHRoZSBkcmFpbiBmdW5jdGlv
biBoZXJlLiBJdCBzaG91bGQgaGl0IHRoZSBjYXNlCisJICogd2VyZSBpdCBzZWVzIHRoZSBBQ1RJ
VkUgZmxhZyBjbGVhcmVkIGFuZCBleGl0CisJICogb3V0IGZyZWVpbmcgdXMgdG8gcHJvY2VlZCBh
bmQgZGVzdHJveSBldmVyeXRoaW5nLgorCSAqLworCWlmIChmcm9tICE9IFNDVFBfQ0FMTEVEX0ZS
T01fSU5QS0lMTF9USU1FUikgeworCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1BfRFJBSU4oJmlu
cC0+c2N0cF9lcC5zaWduYXR1cmVfY2hhbmdlLnRpbWVyKTsKKwl9IGVsc2UgeworCQkvKiBQcm9i
YWJseSB1bi1uZWVkZWQgKi8KKwkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBf
ZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7CisJfQorCisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lO
RworCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCA1KTsKKyNlbmRpZgorCisjaWYgIShkZWZp
bmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKSkKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgX19GcmVlQlNEX3ZlcnNpb24g
PCA1MDAwMDAKKwlydCA9IGlwX3BjYi0+aW5wX3JvdXRlLnJvX3J0OworI2VuZGlmCisjZW5kaWYK
KworCWlmICgoaW5wLT5zY3RwX2Fzb2NpZGhhc2gpICE9IE5VTEwpIHsKKwkJU0NUUF9IQVNIX0ZS
RUUoaW5wLT5zY3RwX2Fzb2NpZGhhc2gsIGlucC0+aGFzaGFzb2NpZG1hcmspOworCQlpbnAtPnNj
dHBfYXNvY2lkaGFzaCA9IE5VTEw7CisJfQorCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJ
VEFJTFFfRk9SRUFDSF9TQUZFKHNxLCAmaW5wLT5yZWFkX3F1ZXVlLCBuZXh0LCBuc3EpIHsKKwkJ
LyogSXRzIG9ubHkgYWJhbmRvbmVkIGlmIGl0IGhhZCBkYXRhIGxlZnQgKi8KKwkJaWYgKHNxLT5s
ZW5ndGgpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sZWZ0X2FiYW5kb24pOworCisJCVRBSUxR
X1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBzcSwgbmV4dCk7CisJCXNjdHBfZnJlZV9yZW1vdGVf
YWRkcihzcS0+d2hvRnJvbSk7CisJCWlmIChzbykKKwkJCXNvLT5zb19yY3Yuc2JfY2MgLT0gc3Et
Pmxlbmd0aDsKKwkJaWYgKHNxLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oc3EtPmRhdGEpOwor
CQkJc3EtPmRhdGEgPSBOVUxMOworCQl9CisJCS8qCisJCSAqIG5vIG5lZWQgdG8gZnJlZSB0aGUg
bmV0IGNvdW50LCBzaW5jZSBhdCB0aGlzIHBvaW50IGFsbAorCQkgKiBhc3NvYydzIGFyZSBnb25l
LgorCQkgKi8KKwkJc2N0cF9mcmVlX2FfcmVhZHEoTlVMTCwgc3EpOworCX0KKwkvKiBOb3cgdGhl
IHNjdHBfcGNiIHRoaW5ncyAqLworCS8qCisJICogZnJlZSBlYWNoIGFzb2MgaWYgaXQgaXMgbm90
IGFscmVhZHkgY2xvc2VkL2ZyZWUuIHdlIGNhbid0IHVzZSB0aGUKKwkgKiBtYWNybyBoZXJlIHNp
bmNlIGxlX25leHQgd2lsbCBnZXQgZnJlZWQgYXMgcGFydCBvZiB0aGUKKwkgKiBzY3RwX2ZyZWVf
YXNzb2MoKSBjYWxsLgorCSAqLworI2lmbmRlZiBfX1BhbmRhX18KKwlpZiAoaXBfcGNiLT5pbnBf
b3B0aW9ucykgeworCQkodm9pZClzY3RwX21fZnJlZShpcF9wY2ItPmlucF9vcHRpb25zKTsKKwkJ
aXBfcGNiLT5pbnBfb3B0aW9ucyA9IDA7CisJfQorI2VuZGlmCisKKyNpZiAhKGRlZmluZWQoX19Q
YW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
KQorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAw
MAorCWlmIChydCkgeworCQlSVEZSRUUocnQpOworCQlpcF9wY2ItPmlucF9yb3V0ZS5yb19ydCA9
IDA7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPCA4MDMwMDAKKyNpZmRlZiBJTkVUCisJaWYgKGlwX3BjYi0+aW5wX21vcHRpb25zKSB7
CisJCWlucF9mcmVlbW9wdGlvbnMoaXBfcGNiLT5pbnBfbW9wdGlvbnMpOworCQlpcF9wY2ItPmlu
cF9tb3B0aW9ucyA9IDA7CisJfQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjaWZkZWYgSU5F
VDYKKyNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKQorCWlmIChpcF9wY2ItPmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisjZWxz
ZQorCWlmIChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisjZW5kaWYKKwkJc3RydWN0IGlu
NnBjYiAqaW42cDsKKworCQlpbjZwID0gKHN0cnVjdCBpbjZwY2IgKilpbnA7CisJCWlwNl9mcmVl
cGNib3B0cyhpbjZwLT5pbjZwX291dHB1dG9wdHMpOworCX0KKyNlbmRpZgorI2VuZGlmCQkJCS8q
IElORVQ2ICovCisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwlp
bnAtPmlucF92ZmxhZyA9IDA7CisjZWxzZQorCWlwX3BjYi0+aW5wX3ZmbGFnID0gMDsKKyNlbmRp
ZgorCS8qIGZyZWUgdXAgYXV0aGVudGljYXRpb24gZmllbGRzICovCisJaWYgKGlucC0+c2N0cF9l
cC5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGlucC0+
c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9obWFj
cyAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNz
KTsKKworCUxJU1RfRk9SRUFDSF9TQUZFKHNoYXJlZF9rZXksICZpbnAtPnNjdHBfZXAuc2hhcmVk
X2tleXMsIG5leHQsIG5zaGFyZWRfa2V5KSB7CisJCUxJU1RfUkVNT1ZFKHNoYXJlZF9rZXksIG5l
eHQpOworCQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNoYXJlZF9rZXkpOworCQkvKnNhX2lnbm9yZSBG
UkVFRF9NRU1PUlkqLworCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWlucC0+aXBfaW5w
LmlucC5pbnBfc3RhdGUgPSBJTlBDQl9TVEFURV9ERUFEOworCWlmIChpbl9wY2JfY2hlY2tzdGF0
ZSgmaW5wLT5pcF9pbnAuaW5wLCBXTlRfU1RPUFVTSU5HLCAxKSAhPSBXTlRfU1RPUFVTSU5HKSB7
CisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygic2N0cF9pbnBjYl9mcmVlIGlucCA9ICVwIGNv
dWxkbid0IHNldCB0byBTVE9QVVNJTkdcbiIsICh2b2lkICopaW5wKTsKKyNlbHNlCisJCVNDVFBf
UFJJTlRGKCJzY3RwX2lucGNiX2ZyZWUgaW5wID0gJXAgY291bGRuJ3Qgc2V0IHRvIFNUT1BVU0lO
R1xuIiwgKHZvaWQgKilpbnApOworI2VuZGlmCisJfQorCWlucC0+aXBfaW5wLmlucC5pbnBfc29j
a2V0LT5zb19mbGFncyB8PSBTT0ZfUENCQ0xFQVJJTkc7CisjZW5kaWYKKwkvKgorCSAqIGlmIHdl
IGhhdmUgYW4gYWRkcmVzcyBsaXN0IHRoZSBmb2xsb3dpbmcgd2lsbCBmcmVlIHRoZSBsaXN0IG9m
CisJICogaWZhZGRyJ3MgdGhhdCBhcmUgc2V0IGludG8gdGhpcyBlcC4gQWdhaW4gbWFjcm8gbGlt
aXRhdGlvbnMgaGVyZSwKKwkgKiBzaW5jZSB0aGUgTElTVF9GT1JFQUNIIGNvdWxkIGJlIGEgYmFk
IGlkZWEuCisJICovCisJTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9s
aXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIpIHsKKwkJc2N0cF9yZW1vdmVfbGFkZHIobGFkZHIp
OworCX0KKworI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNPQ1MKKwkvKiBURU1QIENPREUgKi8K
KwlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fzb2NfZnJlZV9saXN0LCBzY3Rw
X3RjYmxpc3QsIG5hc29jKSB7CisJCUxJU1RfUkVNT1ZFKGFzb2MsIHNjdHBfdGNibGlzdCk7CisJ
CVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBhc29jKTsKKwkJ
U0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwl9CisJLyogKioqIEVORCBURU1QIENPREUgKioqKi8K
KyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCVNDVFBfRlJFRShpbnAtPm1fdnJmX2lkcywgU0NU
UF9NX01WUkYpOworI2VuZGlmCisJLyogTm93IGxldHMgc2VlIGFib3V0IGZyZWVpbmcgdGhlIEVQ
IGhhc2ggdGFibGUuICovCisJaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwpIHsKKwkJU0NU
UF9IQVNIX0ZSRUUoaW5wLT5zY3RwX3RjYmhhc2gsIGlucC0+c2N0cF9oYXNobWFyayk7CisJCWlu
cC0+c2N0cF90Y2JoYXNoID0gTlVMTDsKKwl9CisJLyogTm93IHdlIG11c3QgcHV0IHRoZSBlcCBt
ZW1vcnkgYmFjayBpbnRvIHRoZSB6b25lIHBvb2wgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOworCUlOUF9MT0NLX0RFU1RST1ko
JmlucC0+aXBfaW5wLmlucCk7CisjZW5kaWYKKwlTQ1RQX0lOUF9MT0NLX0RFU1RST1koaW5wKTsK
KwlTQ1RQX0lOUF9SRUFEX0RFU1RST1koaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVT
VFJPWShpbnApOworI2lmICFkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQ
X0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIGlucCk7CisJU0NUUF9ERUNSX0VQX0NPVU5UKCk7Cisj
ZWxzZQorCS8qIEZvciBUaWdlciwgd2Ugd2lsbCBkbyB0aGlzIGxhdGVyLi4uICovCisjZW5kaWYK
K30KKworCitzdHJ1Y3Qgc2N0cF9uZXRzICoKK3NjdHBfZmluZG5ldChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisJLyogbG9jYXRlIHRoZSBhZGRyZXNzICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5h
c29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoc2N0cF9jbXBhZGRyKGFkZHIsIChzdHJ1Y3Qg
c29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyKSkKKwkJCXJldHVybiAobmV0KTsKKwl9CisJcmV0
dXJuIChOVUxMKTsKK30KKworCitpbnQKK3NjdHBfaXNfYWRkcmVzc19vbl9sb2NhbF9ob3N0KHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgdnJmX2lkKQoreworI2lmZGVmIF9fUGFuZGFf
XworCXJldHVybiAoMCk7CisjZWxzZQorCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJc2N0
cF9pZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJmX2lkLCBTQ1RQX0FERFJfTk9U
X0xPQ0tFRCk7CisJaWYgKHNjdHBfaWZhKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJ
cmV0dXJuICgwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIGFkZCdzIGEgcmVtb3RlIGVuZHBv
aW50IGFkZHJlc3MsIGRvbmUgd2l0aCB0aGUgSU5JVC9JTklULUFDSyBhcyB3ZWxsIGFzCisgKiB3
aGVuIGEgQVNDT05GIGFycml2ZXMgdGhhdCBhZGRzIGl0LiBJdCB3aWxsIGFsc28gaW5pdGlhbGl6
ZSBhbGwgdGhlIGN3bmQKKyAqIHN0YXRzIG9mIHN0dWZmLgorICovCitpbnQKK3NjdHBfYWRkX3Jl
bW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpuZXdhZGRy
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MTZfdCBwb3J0LCBpbnQgc2V0X3Nj
b3BlLCBpbnQgZnJvbSkKK3sKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgaXMgcmVkdW5kYW50IHRv
IHRoZSBzYW1lIGxpbmVzIGluIHRoZQorCSAqIHNjdHBfYWxvY19hc3NvYygpIGJ1dCBpcyBuZWVk
ZWQgc2luY2Ugb3RoZXJzIGNhbGwgdGhlIGFkZAorCSAqIGFkZHJlc3MgZnVuY3Rpb24KKwkgKi8K
KwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpuZXRmaXJzdDsKKwlpbnQgYWRkcl9pbnNjb3BlOwor
CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJBZGRpbmcgYW4gYWRkcmVzcyAoZnJvbTolZCkg
dG8gdGhlIHBlZXI6ICIsCisJCWZyb20pOworCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjEs
IG5ld2FkZHIpOworCisJbmV0Zmlyc3QgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgbmV3YWRkcik7CisJ
aWYgKG5ldGZpcnN0KSB7CisJCS8qCisJCSAqIExpZSBhbmQgcmV0dXJuIG9rLCB3ZSBkb24ndCB3
YW50IHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uCisJCSAqIGdvIGF3YXkgZm9yIHRoaXMgYmVoYXZp
b3IuIEl0IHdpbGwgaGFwcGVuIGluIHRoZSBUQ1AKKwkJICogbW9kZWwgaW4gYSBjb25uZWN0ZWQg
c29ja2V0LiBJdCBkb2VzIG5vdCByZWFjaCB0aGUgaGFzaAorCQkgKiB0YWJsZSB1bnRpbCBhZnRl
ciB0aGUgYXNzb2NpYXRpb24gaXMgYnVpbHQgc28gaXQgY2FuJ3QgYmUKKwkJICogZm91bmQuIE1h
cmsgYXMgcmVhY2hhYmxlLCBzaW5jZSB0aGUgaW5pdGlhbCBjcmVhdGlvbiB3aWxsCisJCSAqIGhh
dmUgYmVlbiBjbGVhcmVkIGFuZCB0aGUgTk9UX0lOX0FTU09DIGZsYWcgd2lsbCBoYXZlCisJCSAq
IGJlZW4gYWRkZWQuLi4gYW5kIHdlIGRvbid0IHdhbnQgdG8gZW5kIHVwIHJlbW92aW5nIGl0CisJ
CSAqIGJhY2sgb3V0LgorCQkgKi8KKwkJaWYgKG5ldGZpcnN0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX1VOQ09ORklSTUVEKSB7CisJCQluZXRmaXJzdC0+ZGVzdF9zdGF0ZSA9IChTQ1RQX0FERFJf
UkVBQ0hBQkxFIHwKKwkJCSAgICBTQ1RQX0FERFJfVU5DT05GSVJNRUQpOworCQl9IGVsc2Ugewor
CQkJbmV0Zmlyc3QtPmRlc3Rfc3RhdGUgPSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQl9CisKKwkJ
cmV0dXJuICgwKTsKKwl9CisJYWRkcl9pbnNjb3BlID0gMTsKKwlzd2l0Y2ggKG5ld2FkZHItPnNh
X2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnNpbjsKKworCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbmV3YWRkcjsK
KwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCS8qIEludmFsaWQgYWRkcmVz
cyAqLworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogemVybyBvdXQgdGhlIHplcm8gYXJlYSAq
LworCQltZW1zZXQoJnNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4tPnNpbl96ZXJvKSk7CisK
KwkJLyogYXNzdXJlIGxlbiBpcyBzZXQgKi8KKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc2luLT5z
aW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJaWYgKHNldF9z
Y29wZSkgeworCQkJaWYgKElONF9JU1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpIHsK
KwkJCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAxOworCQkJfQorCQl9IGVs
c2UgeworCQkJLyogVmFsaWRhdGUgdGhlIGFkZHJlc3MgaXMgaW4gc2NvcGUgKi8KKwkJCWlmICgo
SU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgJiYKKwkJCSAgICAoc3RjYi0+
YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID09IDApKSB7CisJCQkJYWRkcl9pbnNjb3BlID0g
MDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2Ug
QUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKW5ld2FkZHI7CisJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJLyogSW52YWxpZCBhZGRyZXNzICovCisJCQly
ZXR1cm4gKC0xKTsKKwkJfQorCQkvKiBhc3N1cmUgbGVuIGlzIHNldCAqLworI2lmZGVmIEhBVkVf
U0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
CisjZW5kaWYKKwkJaWYgKHNldF9zY29wZSkgeworCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19vbl9s
b2NhbF9ob3N0KG5ld2FkZHIsIHN0Y2ItPmFzb2MudnJmX2lkKSkgeworCQkJCXN0Y2ItPmFzb2Mu
c2NvcGUubG9vcGJhY2tfc2NvcGUgPSAxOworCQkJCXN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2Nv
cGUgPSAwOworCQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7CisJCQkJ
c3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKKwkJCX0gZWxzZSBpZiAoSU42X0lTX0FE
RFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUg
bmV3IGRlc3RpbmF0aW9uIGlzIGEgTElOS19MT0NBTCB3ZQorCQkJCSAqIG11c3QgaGF2ZSBjb21t
b24gc2l0ZSBzY29wZS4gRG9uJ3Qgc2V0CisJCQkJICogdGhlIGxvY2FsIHNjb3BlIHNpbmNlIHdl
IG1heSBub3Qgc2hhcmUKKwkJCQkgKiBhbGwgbGlua3MsIG9ubHkgbG9vcGJhY2sgY2FuIGRvIHRo
aXMuCisJCQkJICogTGlua3Mgb24gdGhlIGxvY2FsIG5ldHdvcmsgd291bGQgYWxzbyBiZQorCQkJ
CSAqIG9uIG91ciBwcml2YXRlIG5ldHdvcmsgZm9yIHY0IHRvby4KKwkJCQkgKi8KKwkJCQlzdGNi
LT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAxOworCQkJCXN0Y2ItPmFzb2Muc2NvcGUu
c2l0ZV9zY29wZSA9IDE7CisJCQl9IGVsc2UgaWYgKElONl9JU19BRERSX1NJVEVMT0NBTCgmc2lu
Ni0+c2luNl9hZGRyKSkgeworCQkJCS8qCisJCQkJICogSWYgdGhlIG5ldyBkZXN0aW5hdGlvbiBp
cyBTSVRFX0xPQ0FMIHRoZW4KKwkJCQkgKiB3ZSBtdXN0IGhhdmUgc2l0ZSBzY29wZSBpbiBjb21t
b24uCisJCQkJICovCisJCQkJc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKKwkJCX0K
KwkJfSBlbHNlIHsKKwkJCS8qIFZhbGlkYXRlIHRoZSBhZGRyZXNzIGlzIGluIHNjb3BlICovCisJ
CQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnNpbjYtPnNpbjZfYWRkcikgJiYKKwkJCSAgICAo
c3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSA9PSAwKSkgeworCQkJCWFkZHJfaW5zY29w
ZSA9IDA7CisJCQl9IGVsc2UgaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9h
ZGRyKSAmJgorCQkJICAgIChzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlID09IDApKSB7CisJ
CQkJYWRkcl9pbnNjb3BlID0gMDsKKwkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FM
KCZzaW42LT5zaW42X2FkZHIpICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29w
ZSA9PSAwKSkgeworCQkJCWFkZHJfaW5zY29wZSA9IDA7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJ
fQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7
CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQlzY29ubiA9IChzdHJ1Y3Qgc29j
a2FkZHJfY29ubiAqKW5ld2FkZHI7CisJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSBOVUxMKSB7
CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCXJldHVybiAoLTEpOworCQl9CisjaWZkZWYg
SEFWRV9TQ09OTl9MRU4KKwkJc2Nvbm4tPnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubik7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyog
bm90IHN1cHBvcnRlZCBmYW1pbHkgdHlwZSAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisJbmV0ID0g
U0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQpLCBzdHJ1Y3Qgc2N0cF9u
ZXRzKTsKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuICgtMSk7CisJfQorCVNDVFBfSU5D
Ul9SQUREUl9DT1VOVCgpOworCW1lbXNldChuZXQsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9uZXRz
KSk7CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5ldC0+c3RhcnRfdGltZSk7CisjaWZk
ZWYgSEFWRV9TQV9MRU4KKwltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwgbmV3YWRkciwgbmV3YWRk
ci0+c2FfbGVuKTsKKyNlbmRpZgorCXN3aXRjaCAobmV3YWRkci0+c2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJbWVtY3B5KCZu
ZXQtPnJvLl9sX2FkZHIsIG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNl
bmRpZgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHIpLT5zaW5fcG9y
dCA9IHN0Y2ItPnJwb3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBB
Rl9JTkVUNjoKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJbWVtY3B5KCZuZXQtPnJvLl9sX2FkZHIs
IG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJKChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkciktPnNpbjZfcG9ydCA9IHN0Y2ItPnJw
b3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNl
IEFGX0NPTk46CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCW1lbWNweSgmbmV0LT5yby5fbF9hZGRy
LCBuZXdhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKyNlbmRpZgorCQkoKHN0
cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRkciktPnNjb25uX3BvcnQgPSBzdGNi
LT5ycG9ydDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJbmV0
LT5hZGRyX2lzX2xvY2FsID0gc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3QobmV3YWRkciwg
c3RjYi0+YXNvYy52cmZfaWQpOworCWlmIChuZXQtPmFkZHJfaXNfbG9jYWwgJiYgKChzZXRfc2Nv
cGUgfHwgKGZyb20gPT0gU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpKSkgeworCQlzdGNiLT5hc29j
LnNjb3BlLmxvb3BiYWNrX3Njb3BlID0gMTsKKwkJc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2Fs
X3Njb3BlID0gMTsKKwkJc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9IDA7CisJCXN0Y2It
PmFzb2Muc2NvcGUuc2l0ZV9zY29wZSA9IDE7CisJCWFkZHJfaW5zY29wZSA9IDE7CisJfQorCW5l
dC0+ZmFpbHVyZV90aHJlc2hvbGQgPSBzdGNiLT5hc29jLmRlZl9uZXRfZmFpbHVyZTsKKwluZXQt
PnBmX3RocmVzaG9sZCA9IHN0Y2ItPmFzb2MuZGVmX25ldF9wZl90aHJlc2hvbGQ7CisJaWYgKGFk
ZHJfaW5zY29wZSA9PSAwKSB7CisJCW5ldC0+ZGVzdF9zdGF0ZSA9IChTQ1RQX0FERFJfUkVBQ0hB
QkxFIHwKKwkJICAgIFNDVFBfQUREUl9PVVRfT0ZfU0NPUEUpOworCX0gZWxzZSB7CisJCWlmIChm
cm9tID09IFNDVFBfQUREUl9JU19DT05GSVJNRUQpCisJCQkvKiBTQ1RQX0FERFJfSVNfQ09ORklS
TUVEIGlzIHBhc3NlZCBieSBjb25uZWN0X3ggKi8KKwkJCW5ldC0+ZGVzdF9zdGF0ZSA9IFNDVFBf
QUREUl9SRUFDSEFCTEU7CisJCWVsc2UKKwkJCW5ldC0+ZGVzdF9zdGF0ZSA9IFNDVFBfQUREUl9S
RUFDSEFCTEUgfAorCQkJICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRDsKKwl9CisJLyogV2Ugc2V0
IHRoaXMgdG8gMCwgdGhlIHRpbWVyIGNvZGUga25vd3MgdGhhdAorCSAqIHRoaXMgbWVhbnMgaXRz
IGFuIGluaXRpYWwgdmFsdWUKKwkgKi8KKwluZXQtPnJ0b19uZWVkZWQgPSAxOworCW5ldC0+UlRP
ID0gMDsKKwluZXQtPlJUT19tZWFzdXJlZCA9IDA7CisJc3RjYi0+YXNvYy5udW1uZXRzKys7CisJ
bmV0LT5yZWZfY291bnQgPSAxOworCW5ldC0+Y3dyX3dpbmRvd190c24gPSBuZXQtPmxhc3RfY3dy
X3RzbiA9IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXEgLSAxOworCW5ldC0+cG9ydCA9IHBvcnQ7CisJ
bmV0LT5kc2NwID0gc3RjYi0+YXNvYy5kZWZhdWx0X2RzY3A7CisjaWZkZWYgSU5FVDYKKwluZXQt
PmZsb3dsYWJlbCA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFiZWw7CisjZW5kaWYKKwlpZiAo
c2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxB
R1NfRE9OT1RfSEVBUlRCRUFUKSkgeworCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05P
SEI7CisJfSBlbHNlIHsKKwkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9IQjsKKwl9
CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBf
UENCX0ZMQUdTX0RPX05PVF9QTVRVRCkpIHsKKwkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQURE
Ul9OT19QTVRVRDsKKwl9IGVsc2UgeworCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9O
T19QTVRVRDsKKwl9CisJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0gc3RjYi0+YXNvYy5oZWFydF9i
ZWF0X2RlbGF5OworCS8qIEluaXQgdGhlIHRpbWVyIHN0cnVjdHVyZSAqLworCVNDVFBfT1NfVElN
RVJfSU5JVCgmbmV0LT5yeHRfdGltZXIudGltZXIpOworCVNDVFBfT1NfVElNRVJfSU5JVCgmbmV0
LT5wbXR1X3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJm5ldC0+aGJfdGltZXIu
dGltZXIpOworCisJLyogTm93IGdlbmVyYXRlIGEgcm91dGUgZm9yIHRoaXMgZ3V5ICovCisjaWZk
ZWYgSU5FVDYKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJLyogS0FNRSBoYWNrOiBl
bWJlZCBzY29wZWlkICovCisJaWYgKG5ld2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewor
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVm
aW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQorCQkodm9p
ZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCAmc3RjYi0+c2N0cF9lcC0+
aXBfaW5wLmlucCwgTlVMTCk7CisjZWxzZQorCQkodm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+
c2luNl9hZGRyLCBzaW42LCAmc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucCwgTlVMTCwgTlVMTCk7
CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkodm9pZClzYTZfZW1iZWRzY29w
ZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOworI2Vsc2UKKwkJKHZvaWQp
aW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNik7CisjZW5kaWYKKyNpZm5kZWYg
U0NPUEVEUk9VVElORworCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsKKyNlbmRpZgorCX0KKyNl
bmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYKKwlTQ1RQX1JUQUxMT0Mo
KHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAorCSAgICAgICAgICAgICBzdGNiLT5hc29jLnZyZl9p
ZCwKKwkgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcC0+ZmlibnVtKTsKKworCW5ldC0+c3JjX2Fk
ZHJfc2VsZWN0ZWQgPSAwOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKFNDVFBf
Uk9VVEVfSEFTX1ZBTElEX0lGTigmbmV0LT5ybykpIHsKKwkJLyogR2V0IHNvdXJjZSBhZGRyZXNz
ICovCisJCW5ldC0+cm8uX3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKHN0
Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0Y2IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnZyZl9pZCk7CisJCWlmIChzdGNiLT5h
c29jLmRlZmF1bHRfbXR1ID4gMCkgeworCQkJbmV0LT5tdHUgPSBzdGNiLT5hc29jLmRlZmF1bHRf
bXR1OworCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYg
SU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJI
RUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6
CisJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbmV0LT5t
dHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVm
YXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJbmV0LT5tdHUgKz0gKHVpbnQzMl90KXNpemVv
ZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgaWYgKG5ldC0+cm8uX3Nf
YWRkciAhPSBOVUxMKSB7CisJCQl1aW50MzJfdCBpbXR1LCBybXR1LCBoY210dTsKKworCQkJbmV0
LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7CisJCQkvKiBOb3cgZ2V0IHRoZSBpbnRlcmZhY2UgTVRV
ICovCisJCQlpZiAobmV0LT5yby5fc19hZGRyLT5pZm5fcCAhPSBOVUxMKSB7CisJCQkJaW10dSA9
IFNDVFBfR0FUSEVSX01UVV9GUk9NX0lOVEZDKG5ldC0+cm8uX3NfYWRkci0+aWZuX3ApOworCQkJ
fSBlbHNlIHsKKwkJCQlpbXR1ID0gMDsKKwkJCX0KKwkJCXJtdHUgPSBTQ1RQX0dBVEhFUl9NVFVf
RlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIG5ldC0+cm8u
cm9fcnQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQloY210dSA9IHNjdHBfaGNfZ2V0
X210dSgmbmV0LT5yby5fbF9hZGRyLCBzdGNiLT5zY3RwX2VwLT5maWJudW0pOworI2Vsc2UKKwkJ
CWhjbXR1ID0gMDsKKyNlbmRpZgorCQkJbmV0LT5tdHUgPSBzY3RwX21pbl9tdHUoaGNtdHUsIHJt
dHUsIGltdHUpOworCQkJaWYgKHJtdHUgPT0gMCkgeworCQkJCS8qIFN0YXJ0IHRoaW5ncyBvZmYg
dG8gbWF0Y2ggbXR1IG9mIGludGVyZmFjZSBwbGVhc2UuICovCisJCQkJU0NUUF9TRVRfTVRVX09G
X1JPVVRFKCZuZXQtPnJvLl9sX2FkZHIuc2EsCisJCQkJICAgICAgICAgICAgICAgICAgICAgIG5l
dC0+cm8ucm9fcnQsIG5ldC0+bXR1KTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCWlmIChuZXQt
Pm10dSA9PSAwKSB7CisJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfbXR1ID4gMCkgeworCQkJbmV0
LT5tdHUgPSBzdGNiLT5hc29jLmRlZmF1bHRfbXR1OworCQkJc3dpdGNoIChuZXQtPnJvLl9sX2Fk
ZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCW5l
dC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZF
UkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CQljYXNlIEFGX0NPTk46CisJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
KwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJ
bmV0LT5tdHUgKz0gKHVpbnQzMl90KXNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCX0KKyNlbmRp
ZgorCQl9IGVsc2UgeworCQkJc3dpdGNoIChuZXdhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJbmV0LT5tdHUgPSBTQ1RQX0RFRkFVTFRfTVRVOwor
CQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJ
bmV0LT5tdHUgPSAxMjgwOworCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCW5ldC0+bXR1ID0gMTI4MDsKKwkJCQlicmVh
azsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKyNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKG5ldC0+cG9ydCkgeworCQluZXQt
Pm10dSAtPSAodWludDMyX3Qpc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCX0KKyNlbmRpZgorCWlm
IChmcm9tID09IFNDVFBfQUxMT0NfQVNPQykgeworCQlzdGNiLT5hc29jLnNtYWxsZXN0X210dSA9
IG5ldC0+bXR1OworCX0KKwlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXQtPm10dSkg
eworCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7CisJfQorI2lmZGVm
IElORVQ2CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCWlmIChuZXdhZGRyLT5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOworI2lmZGVmIFND
VFBfS0FNRQorCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOworI2Vsc2UKKwkJKHZvaWQp
aW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAv
KiBTQ1RQX0tBTUUgKi8KKwl9CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwor
I2VuZGlmCisKKwkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0
aGUgQ0MgbW9kdWxlICovCisJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2lu
aXRpYWxfY2NfcGFyYW0gIT0gTlVMTCkKKwkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3Rw
X3NldF9pbml0aWFsX2NjX3BhcmFtKShzdGNiLCBuZXQpOworCisJLyoKKwkgKiBDTVQ6IENVQyBh
bGdvIC0gc2V0IGZpbmRfcHNldWRvX2N1bWFjayB0byBUUlVFICgxKSBhdCBiZWdpbm5pbmcKKwkg
KiBvZiBhc3NvYyAoMjAwNS8wNi8yNywgaXllbmdhckBjaXMudWRlbC5lZHUpCisJICovCisJbmV0
LT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOworCW5ldC0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9
IDE7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkvKiBDaG9vc2UgYW4gaW5pdGlhbCBmbG93
aWQuICovCisJbmV0LT5mbG93aWQgPSBzdGNiLT5hc29jLm15X3Z0YWcgXgorCSAgICAgICAgICAg
ICAgbnRvaHMoc3RjYi0+cnBvcnQpIF4KKwkgICAgICAgICAgICAgIG50b2hzKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfbHBvcnQpOworCW5ldC0+Zmxvd3R5cGUgPSBNX0hBU0hUWVBFX09QQVFVRV9IQVNI
OworI2VuZGlmCisJaWYgKG5ldHApIHsKKwkJKm5ldHAgPSBuZXQ7CisJfQorCW5ldGZpcnN0ID0g
VEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJaWYgKG5ldC0+cm8ucm9fcnQgPT0gTlVM
TCkgeworCQkvKiBTaW5jZSB3ZSBoYXZlIG5vIHJvdXRlIHB1dCBpdCBhdCB0aGUgYmFjayAqLwor
CQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7CisJ
fSBlbHNlIGlmIChuZXRmaXJzdCA9PSBOVUxMKSB7CisJCS8qIFdlIGFyZSB0aGUgZmlyc3Qgb25l
IGluIHRoZSBwb29sLiAqLworCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3RjYi0+YXNvYy5uZXRzLCBu
ZXQsIHNjdHBfbmV4dCk7CisJfSBlbHNlIGlmIChuZXRmaXJzdC0+cm8ucm9fcnQgPT0gTlVMTCkg
eworCQkvKgorCQkgKiBGaXJzdCBvbmUgaGFzIE5PIHJvdXRlLiBQbGFjZSB0aGlzIG9uZSBhaGVh
ZCBvZiB0aGUgZmlyc3QKKwkJICogb25lLgorCQkgKi8KKwkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0
Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworI2lmbmRlZiBfX1BhbmRhX18KKwl9IGVs
c2UgaWYgKG5ldC0+cm8ucm9fcnQtPnJ0X2lmcCAhPSBuZXRmaXJzdC0+cm8ucm9fcnQtPnJ0X2lm
cCkgeworCQkvKgorCQkgKiBUaGlzIG9uZSBoYXMgYSBkaWZmZXJlbnQgaW50ZXJmYWNlIHRoYW4g
dGhlIG9uZSBhdCB0aGUKKwkJICogdG9wIG9mIHRoZSBsaXN0LiBQbGFjZSBpdCBhaGVhZC4KKwkJ
ICovCisJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0
KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCS8qCisJCSAqIE9rIHdlIGhhdmUgdGhlIHNhbWUgaW50
ZXJmYWNlIGFzIHRoZSBmaXJzdCBvbmUuIE1vdmUKKwkJICogZm9yd2FyZCB1bnRpbCB3ZSBmaW5k
IGVpdGhlciBhKSBvbmUgd2l0aCBhIE5VTEwgcm91dGUuLi4KKwkJICogaW5zZXJ0IGFoZWFkIG9m
IHRoYXQgYikgb25lIHdpdGggYSBkaWZmZXJlbnQgaWZwLi4gaW5zZXJ0CisJCSAqIGFmdGVyIHRo
YXQuIGMpIGVuZCBvZiB0aGUgbGlzdC4uIGluc2VydCBhdCB0aGUgdGFpbC4KKwkJICovCisJCXN0
cnVjdCBzY3RwX25ldHMgKm5ldGxvb2s7CisKKwkJZG8geworCQkJbmV0bG9vayA9IFRBSUxRX05F
WFQobmV0Zmlyc3QsIHNjdHBfbmV4dCk7CisJCQlpZiAobmV0bG9vayA9PSBOVUxMKSB7CisJCQkJ
LyogRW5kIG9mIHRoZSBsaXN0ICovCisJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Mu
bmV0cywgbmV0LCBzY3RwX25leHQpOworCQkJCWJyZWFrOworCQkJfSBlbHNlIGlmIChuZXRsb29r
LT5yby5yb19ydCA9PSBOVUxMKSB7CisJCQkJLyogbmV4dCBvbmUgaGFzIE5PIHJvdXRlICovCisJ
CQkJVEFJTFFfSU5TRVJUX0JFRk9SRShuZXRmaXJzdCwgbmV0LCBzY3RwX25leHQpOworCQkJCWJy
ZWFrOworCQkJfQorI2lmbmRlZiBfX1BhbmRhX18KKwkJCWVsc2UgaWYgKG5ldGxvb2stPnJvLnJv
X3J0LT5ydF9pZnAgIT0gbmV0LT5yby5yb19ydC0+cnRfaWZwKQorI2Vsc2UKKwkJCWVsc2UKKyNl
bmRpZgorCQkJeworCQkJCVRBSUxRX0lOU0VSVF9BRlRFUigmc3RjYi0+YXNvYy5uZXRzLCBuZXRs
b29rLAorCQkJCQkJICAgbmV0LCBzY3RwX25leHQpOworCQkJCWJyZWFrOworCQkJfQorI2lmbmRl
ZiBfX1BhbmRhX18KKwkJCS8qIFNoaWZ0IGZvcndhcmQgKi8KKwkJCW5ldGZpcnN0ID0gbmV0bG9v
azsKKyNlbmRpZgorCQl9IHdoaWxlIChuZXRsb29rICE9IE5VTEwpOworCX0KKworCS8qIGdvdCB0
byBoYXZlIGEgcHJpbWFyeSBzZXQgKi8KKwlpZiAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uID09IDApIHsKKwkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gbmV0OworCX0g
ZWxzZSBpZiAoKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8ucm9fcnQgPT0gTlVM
TCkgJiYKKwkJICAgIChuZXQtPnJvLnJvX3J0KSAmJgorCSAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgPT0gMCkpIHsKKwkJLyogTm8gcm91dGUgdG8gY3VycmVu
dCBwcmltYXJ5IGFkb3B0IG5ldyBwcmltYXJ5ICovCisJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbiA9IG5ldDsKKwl9CisJLyogVmFsaWRhdGUgcHJpbWFyeSBpcyBmaXJzdCAqLworCW5l
dCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCWlmICgobmV0ICE9IHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbikgJiYKKwkgICAgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbikpIHsKKwkJLyogZmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlzIE5PVCB0aGUgcHJpbWFy
eQorCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IGlmCisJCSAqIHRo
ZSBwcmltYXJ5IGlzIHRoZSBmaXJzdCBvbiB0aGUgbGlzdCwgbWFrZSBpdAorCQkgKiBzby4KKwkJ
ICovCisJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5uZXRzLAorCQkJICAgICBzdGNiLT5hc29j
LnByaW1hcnlfZGVzdGluYXRpb24sIHNjdHBfbmV4dCk7CisJCVRBSUxRX0lOU0VSVF9IRUFEKCZz
dGNiLT5hc29jLm5ldHMsCisJCQkJICBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sIHNj
dHBfbmV4dCk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIHVpbnQzMl90CitzY3Rw
X2Fsb2NfYV9hc3NvY19pZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IpCit7CisJdWludDMyX3QgaWQ7CisJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKKwlz
dHJ1Y3Qgc2N0cF90Y2IgKmxzdGNiOworCisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKyB0cnlfYWdh
aW46CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05F
KSB7CisJCS8qIFRTTkggKi8KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlyZXR1cm4gKDAp
OworCX0KKwkvKgorCSAqIFdlIGRvbid0IGFsbG93IGFzc29jIGlkIHRvIGJlIG9uZSBvZiBTQ1RQ
X0ZVVFVSRV9BU1NPQywKKwkgKiBTQ1RQX0NVUlJFTlRfQVNTT0MgYW5kIFNDVFBfQUxMX0FTU09D
LgorCSAqLworCWlmIChpbnAtPnNjdHBfYXNzb2NpZF9jb3VudGVyIDw9IFNDVFBfQUxMX0FTU09D
KSB7CisJCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIgPSBTQ1RQX0FMTF9BU1NPQyArIDE7CisJ
fQorCWlkID0gaW5wLT5zY3RwX2Fzc29jaWRfY291bnRlcjsKKwlpbnAtPnNjdHBfYXNzb2NpZF9j
b3VudGVyKys7CisJbHN0Y2IgPSBzY3RwX2ZpbmRhc29jX2VwX2Fzb2NpZF9sb2NrZWQoaW5wLCAo
c2N0cF9hc3NvY190KWlkLCAwKTsKKwlpZiAobHN0Y2IpIHsKKwkJZ290byB0cnlfYWdhaW47CisJ
fQorCWhlYWQgPSAmaW5wLT5zY3RwX2Fzb2NpZGhhc2hbU0NUUF9QQ0JIQVNIX0FTT0MoaWQsIGlu
cC0+aGFzaGFzb2NpZG1hcmspXTsKKwlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2IsIHNjdHBf
dGNiYXNvY2lkaGFzaCk7CisJc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCA9IDE7CisJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCXJldHVybiBpZDsKK30KKworLyoKKyAqIGFsbG9jYXRlIGFuIGFz
c29jaWF0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIGVuZHBvaW50LiBUaGUgY2FsbGVyIG11c3QgYmUK
KyAqIGNhcmVmdWwgdG8gYWRkIGFsbCBhZGRpdGlvbmFsIGFkZHJlc3NlcyBvbmNlIHRoZXkgYXJl
IGtub3cgcmlnaHQgYXdheSBvcgorICogZWxzZSB0aGUgYXNzb2Mgd2lsbCBiZSBtYXkgZXhwZXJp
ZW5jZSBhIGJsYWNrb3V0IHNjZW5hcmlvLgorICovCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9h
bG9jX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqZmlyc3Rh
ZGRyLAorICAgICAgICAgICAgICAgIGludCAqZXJyb3IsIHVpbnQzMl90IG92ZXJyaWRlX3RhZywg
dWludDMyX3QgdnJmX2lkLAorICAgICAgICAgICAgICAgIHVpbnQxNl90IG9fc3RyZWFtcywgdWlu
dDE2X3QgcG9ydCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA1MDAwMDAKKwkJc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkJUEtUSFJFQUQgcAorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAg
ICAgICAgICAgICAgLyogIF9fVXNlcnNwYWNlX18gTlVMTCBwcm9jIGlzIGdvaW5nIHRvIGJlIHBh
c3NlZCBoZXJlLiBTZWUgc2N0cF9sb3dlcl9zb3NlbmQgKi8KKyNlbmRpZgorCQlzdHJ1Y3QgcHJv
YyAqcAorI2VuZGlmCispCit7CisJLyogbm90ZSB0aGUgcCBhcmd1bWVudCBpcyBvbmx5IHZhbGlk
IGluIHVuYm91bmQgc29ja2V0cyAqLworCisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwYXNvY2hlYWQgKmhlYWQ7CisJ
dWludDE2X3QgcnBvcnQ7CisJaW50IGVycjsKKworCS8qCisJICogQXNzdW1wdGlvbiBtYWRlIGhl
cmU6IENhbGxlciBoYXMgZG9uZSBhCisJICogc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihl
cCwgYWRkcidzKTsgdG8gbWFrZSBzdXJlIHRoZQorCSAqIGFkZHJlc3MgZG9lcyBub3QgZXhpc3Qg
YWxyZWFkeS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpID49IFND
VFBfTUFYX05VTV9PRl9BU09DKSB7CisJCS8qIEhpdCBtYXggYXNzb2MsIHNvcnJ5IG5vIG1vcmUg
Ki8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJCXJldHVybiAoTlVMTCk7CisJ
fQorCWlmIChmaXJzdGFkZHIgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5W
QUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSAmJgorCSAgICAoKHNj
dHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSB8fAorCSAg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpKSB7CisJCS8q
CisJCSAqIElmIGl0cyBpbiB0aGUgVENQIHBvb2wsIGl0cyBOT1QgYWxsb3dlZCB0byBjcmVhdGUg
YW4KKwkJICogYXNzb2NpYXRpb24uIFRoZSBwYXJlbnQgbGlzdGVuZXIgbmVlZHMgdG8gY2FsbAor
CQkgKiBzY3RwX2Fsb2NfYXNzb2MuLiBvciB0aGUgb25lLTItbWFueSBzb2NrZXQuIElmIGEgcGVl
bGVkCisJCSAqIG9mZiwgb3IgY29ubmVjdGVkIG9uZSBkb2VzIHRoaXMuLiBpdHMgYW4gZXJyb3Iu
CisJCSAqLworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCSplcnJvciA9
IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkpIHsKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19XQVNfQ09OTkVDVEVEKSB8fAorCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1dBU19BQk9SVEVEKSkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwl9
CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjMsICJBbGxvY2F0ZSBhbiBhc3NvY2lhdGlvbiBmb3Ig
cGVlcjoiKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKGZpcnN0YWRkcikgeworCQlTQ1RQREJH
X0FERFIoU0NUUF9ERUJVR19QQ0IzLCBmaXJzdGFkZHIpOworCQlzd2l0Y2ggKGZpcnN0YWRkci0+
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlTQ1RQREJHKFND
VFBfREVCVUdfUENCMywgIlBvcnQ6JWRcbiIsCisJCQkgICAgICAgIG50b2hzKCgoc3RydWN0IHNv
Y2thZGRyX2luICopZmlyc3RhZGRyKS0+c2luX3BvcnQpKTsKKwkJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0Iz
LCAiUG9ydDolZFxuIiwKKwkJCSAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
Zmlyc3RhZGRyKS0+c2luNl9wb3J0KSk7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BD
QjMsICJQb3J0OiVkXG4iLAorCQkJICAgICAgICBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopZmlyc3RhZGRyKS0+c2Nvbm5fcG9ydCkpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVs
dDoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjMs
Ik5vbmVcbiIpOworCX0KKyNlbmRpZgkJCQkvKiBTQ1RQX0RFQlVHICovCisJc3dpdGNoIChmaXJz
dGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
Zmlyc3RhZGRyOworCQlpZiAoKG50b2hzKHNpbi0+c2luX3BvcnQpID09IDApIHx8CisJCSAgICAo
c2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKKwkJICAgIChzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQlJPQURDQVNUKSB8fAorCQkgICAgSU5fTVVMVElDQVNUKG50
b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCS8qIEludmFsaWQgYWRkcmVzcyAqLwor
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZB
TDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJcnBvcnQgPSBzaW4tPnNpbl9wb3J0OworCQli
cmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKWZpcnN0YWRkcjsKKwkJaWYgKChudG9ocyhzaW42LT5zaW42X3BvcnQpID09IDApIHx8CisJ
CSAgICBJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSB8fAorCQkgICAg
SU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkvKiBJbnZhbGlk
IGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkq
ZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXJwb3J0ID0gc2luNi0+
c2luNl9wb3J0OworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJY2FzZSBBRl9DT05OOgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwor
CisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZmlyc3RhZGRyOworCQlpZiAoKG50
b2hzKHNjb25uLT5zY29ubl9wb3J0KSA9PSAwKSB8fAorCQkgICAgKHNjb25uLT5zY29ubl9hZGRy
ID09IE5VTEwpKSB7CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5V
TEwpOworCQl9CisJCXJwb3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7CisJCWJyZWFrOworCX0KKyNl
bmRpZgorCWRlZmF1bHQ6CisJCS8qIG5vdCBzdXBwb3J0ZWQgZmFtaWx5IHR5cGUgKi8KKwkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgeworCQkvKgorCQkgKiBJZiB5b3UgaGF2
ZSBub3QgcGVyZm9ybWVkIGEgYmluZCwgdGhlbiB3ZSBuZWVkIHRvIGRvIHRoZQorCQkgKiBlcGhl
bWVyYWwgYmluZCBmb3IgeW91LgorCQkgKi8KKwkJaWYgKChlcnIgPSBzY3RwX2lucGNiX2JpbmQo
aW5wLT5zY3RwX3NvY2tldCwKKwkJICAgIChzdHJ1Y3Qgc29ja2FkZHIgKilOVUxMLAorCQkgICAg
KHN0cnVjdCBzY3RwX2lmYSAqKU5VTEwsCisjaWZuZGVmIF9fUGFuZGFfXworCQkJCQkgICBwCisj
ZWxzZQorCQkJCQkgICAoc3RydWN0IHByb2MgKilOVUxMCisjZW5kaWYKKwkJICAgICkpKSB7CisJ
CQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICovCisJCQkqZXJyb3IgPSBlcnI7CisJCQly
ZXR1cm4gKE5VTEwpOworCQl9CisJfQorCXN0Y2IgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2Fzb2MpLCBzdHJ1Y3Qgc2N0cF90Y2IpOworCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJLyogb3V0IG9mIG1lbW9yeT8gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PTUVNKTsKKwkJKmVycm9yID0gRU5PTUVN
OworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0lOQ1JfQVNPQ19DT1VOVCgpOworCisJbWVt
c2V0KHN0Y2IsIDAsIHNpemVvZigqc3RjYikpOworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKworCWFz
b2MtPmFzc29jX2lkID0gc2N0cF9hbG9jX2FfYXNzb2NfaWQoaW5wLCBzdGNiKTsKKwlTQ1RQX1RD
Ql9MT0NLX0lOSVQoc3RjYik7CisJU0NUUF9UQ0JfU0VORF9MT0NLX0lOSVQoc3RjYik7CisJc3Rj
Yi0+cnBvcnQgPSBycG9ydDsKKwkvKiBzZXR1cCBiYWNrIHBvaW50ZXIncyAqLworCXN0Y2ItPnNj
dHBfZXAgPSBpbnA7CisJc3RjYi0+c2N0cF9zb2NrZXQgPSBpbnAtPnNjdHBfc29ja2V0OworCWlm
ICgoZXJyID0gc2N0cF9pbml0X2Fzb2MoaW5wLCBzdGNiLCBvdmVycmlkZV90YWcsIHZyZl9pZCwg
b19zdHJlYW1zKSkpIHsKKwkJLyogZmFpbGVkICovCisJCVNDVFBfVENCX0xPQ0tfREVTVFJPWShz
dGNiKTsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koc3RjYik7CisJCUxJU1RfUkVNT1ZF
KHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsKKwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwkJ
KmVycm9yID0gZXJyOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBhbmQgdGhlIHBvcnQgKi8K
KwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpZiAoaW5w
LT5zY3RwX2ZsYWdzICYgKFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FIHwgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0FMTEdPTkUpKSB7CisJCS8qIGlucGNiIGZyZWVkIHdoaWxlIGFsbG9jIGdvaW5n
IG9uICovCisJCVNDVFBfVENCX0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJU0NUUF9UQ0JfU0VORF9M
T0NLX0RFU1RST1koc3RjYik7CisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFz
aCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdGNi
KTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsK
KwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJKmVycm9yID0gRUlOVkFM
OworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCisJLyogbm93
IHRoYXQgbXlfdnRhZyBpcyBzZXQsIGFkZCBpdCB0byB0aGUgaGFzaCAqLworCWhlYWQgPSAmU0NU
UF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0Moc3RjYi0+YXNvYy5t
eV92dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07CisJLyogcHV0IGl0IGluIHRo
ZSBidWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lzdGVtICovCisJ
TElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fzb2NzKTsKKwlTQ1RQX0lOUF9JTkZP
X1dVTkxPQ0soKTsKKworCWlmICgoZXJyID0gc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgZmly
c3RhZGRyLCBOVUxMLCBwb3J0LCBTQ1RQX0RPX1NFVFNDT1BFLCBTQ1RQX0FMTE9DX0FTT0MpKSkg
eworCQkvKiBmYWlsdXJlLi4gbWVtb3J5IGVycm9yPyAqLworCQlpZiAoYXNvYy0+c3RybW91dCkg
eworCQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJNTyk7CisJCQlhc29jLT5z
dHJtb3V0ID0gTlVMTDsKKwkJfQorCQlpZiAoYXNvYy0+bWFwcGluZ19hcnJheSkgeworCQkJU0NU
UF9GUkVFKGFzb2MtPm1hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOworCQkJYXNvYy0+bWFwcGlu
Z19hcnJheSA9IE5VTEw7CisJCX0KKwkJaWYgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXkpIHsKKwkJ
CVNDVFBfRlJFRShhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBTQ1RQX01fTUFQKTsKKwkJCWFzb2Mt
Pm5yX21hcHBpbmdfYXJyYXkgPSBOVUxMOworCQl9CisJCVNDVFBfREVDUl9BU09DX0NPVU5UKCk7
CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2Ip
OworCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJTElTVF9SRU1PVkUoc3Rj
Yiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8o
aXBpX3pvbmVfYXNvYyksIHN0Y2IpOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT0JV
RlMpOworCQkqZXJyb3IgPSBFTk9CVUZTOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBJbml0
IGFsbCB0aGUgdGltZXJzICovCisJU0NUUF9PU19USU1FUl9JTklUKCZhc29jLT5kYWNrX3RpbWVy
LnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPnN0cnJlc2V0X3RpbWVyLnRpbWVy
KTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmFzY29uZl90aW1lci50aW1lcik7CisJU0NU
UF9PU19USU1FUl9JTklUKCZhc29jLT5zaHV0X2d1YXJkX3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09T
X1RJTUVSX0lOSVQoJmFzb2MtPmF1dG9jbG9zZV90aW1lci50aW1lcik7CisJU0NUUF9PU19USU1F
Ul9JTklUKCZhc29jLT5kZWxheWVkX2V2ZW50X3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVS
X0lOSVQoJmFzb2MtPmRlbGV0ZV9wcmltX3RpbWVyLnRpbWVyKTsKKworCUxJU1RfSU5TRVJUX0hF
QUQoJmlucC0+c2N0cF9hc29jX2xpc3QsIHN0Y2IsIHNjdHBfdGNibGlzdCk7CisJLyogbm93IGZp
bGUgdGhlIHBvcnQgdW5kZXIgdGhlIGhhc2ggYXMgd2VsbCAqLworCWlmIChpbnAtPnNjdHBfdGNi
aGFzaCAhPSBOVUxMKSB7CisJCWhlYWQgPSAmaW5wLT5zY3RwX3RjYmhhc2hbU0NUUF9QQ0JIQVNI
X0FMTEFERFIoc3RjYi0+cnBvcnQsCisJCSAgICBpbnAtPnNjdHBfaGFzaG1hcmspXTsKKwkJTElT
VF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX3RjYmhhc2gpOworCX0KKwlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJBc3NvY2lhdGlvbiAlcCBu
b3cgYWxsb2NhdGVkXG4iLCAodm9pZCAqKXN0Y2IpOworCXJldHVybiAoc3RjYik7Cit9CisKKwor
dm9pZAorc2N0cF9yZW1vdmVfbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCisJYXNvYyA9
ICZzdGNiLT5hc29jOworCWFzb2MtPm51bW5ldHMtLTsKKwlUQUlMUV9SRU1PVkUoJmFzb2MtPm5l
dHMsIG5ldCwgc2N0cF9uZXh0KTsKKwlpZiAobmV0ID09IGFzb2MtPnByaW1hcnlfZGVzdGluYXRp
b24pIHsKKwkJLyogUmVzZXQgcHJpbWFyeSAqLworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0Owor
CisJCWxuZXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCS8qIE1vYmlsaXR5IGFkYXB0
YXRpb24KKwkJICAgSWRlYWxseSwgaWYgZGVsZXRlZCBkZXN0aW5hdGlvbiBpcyB0aGUgcHJpbWFy
eSwgaXQgYmVjb21lcworCQkgICBhIGZhc3QgcmV0cmFuc21pc3Npb24gdHJpZ2dlciBieSB0aGUg
c3Vic2VxdWVudCBTRVQgUFJJTUFSWS4KKwkJICAgKGJ5IG1pY2NoaWUpCisJCSAqLworCQlpZiAo
c2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9CQVNFKSB8fAorCQkgICAgc2N0cF9p
c19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKKwkJCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLCAicmVtb3ZlX25ldDogcHJpbWFyeSBkc3QgaXMgZGVsZXRpbmdc
biIpOworCQkJaWYgKGFzb2MtPmRlbGV0ZWRfcHJpbWFyeSAhPSBOVUxMKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJyZW1vdmVfbmV0OiBkZWxldGVkIHByaW1hcnkgbWF5IGJl
IGFscmVhZHkgc3RvcmVkXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCWFzb2MtPmRlbGV0
ZWRfcHJpbWFyeSA9IG5ldDsKKwkJCWF0b21pY19hZGRfaW50KCZuZXQtPnJlZl9jb3VudCwgMSk7
CisJCQltZW1zZXQoJm5ldC0+bGFzdHNhLCAwLCBzaXplb2YobmV0LT5sYXN0c2EpKTsKKwkJCW1l
bXNldCgmbmV0LT5sYXN0c3YsIDAsIHNpemVvZihuZXQtPmxhc3RzdikpOworCQkJc2N0cF9tb2Jp
bGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCQkJCQkgU0NUUF9NT0JJTElUWV9QUklN
X0RFTEVURUQpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxF
VEVELAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0KK291dDoKKwkJLyog
VHJ5IHRvIGZpbmQgYSBjb25maXJtZWQgcHJpbWFyeSAqLworCQlhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbG5ldCwgMCk7CisJfQorCWlm
IChuZXQgPT0gYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20pIHsKKwkJLyogUmVzZXQgcHJpbWFy
eSAqLworCQlhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5u
ZXRzKTsKKwl9CisJaWYgKG5ldCA9PSBhc29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSkgewor
CQkvKiBDbGVhciBuZXQgKi8KKwkJYXNvYy0+bGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSBOVUxM
OworCX0KKwlpZiAobmV0ID09IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCXNjdHBfZnJlZV9y
ZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRl
ID0gTlVMTDsKKwl9CisJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7Cit9CisKKy8qCisgKiBy
ZW1vdmUgYSByZW1vdGUgZW5kcG9pbnQgYWRkcmVzcyBmcm9tIGFuIGFzc29jaWF0aW9uLCBpdCB3
aWxsIGZhaWwgaWYgdGhlCisgKiBhZGRyZXNzIGRvZXMgbm90IGV4aXN0LgorICovCitpbnQKK3Nj
dHBfZGVsX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRy
ICpyZW1hZGRyKQoreworCS8qCisJICogSGVyZSB3ZSBuZWVkIHRvIHJlbW92ZSBhIHJlbW90ZSBh
ZGRyZXNzLiBUaGlzIGlzIHF1aXRlIHNpbXBsZSwgd2UKKwkgKiBmaXJzdCBmaW5kIGl0IGluIHRo
ZSBsaXN0IG9mIGFkZHJlc3MgZm9yIHRoZSBhc3NvY2lhdGlvbgorCSAqICh0YXNvYy0+YXNvYy5u
ZXRzKSBhbmQgdGhlbiBpZiBpdCBpcyB0aGVyZSwgd2UgZG8gYSBMSVNUX1JFTU9WRQorCSAqIG9u
IHRoYXQgaXRlbS4gTm90ZSB3ZSBkbyBub3QgYWxsb3cgaXQgdG8gYmUgcmVtb3ZlZCBpZiB0aGVy
ZSBhcmUKKwkgKiBubyBvdGhlciBhZGRyZXNzZXMuCisJICovCisJc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqbm5ldDsKKworCWFzb2MgPSAm
c3RjYi0+YXNvYzsKKworCS8qIGxvY2F0ZSB0aGUgYWRkcmVzcyAqLworCVRBSUxRX0ZPUkVBQ0hf
U0FGRShuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQsIG5uZXQpIHsKKwkJaWYgKG5ldC0+cm8u
X2xfYWRkci5zYS5zYV9mYW1pbHkgIT0gcmVtYWRkci0+c2FfZmFtaWx5KSB7CisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAoc2N0cF9jbXBhZGRyKChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5f
bF9hZGRyLAorCQkgICAgcmVtYWRkcikpIHsKKwkJCS8qIHdlIGZvdW5kIHRoZSBndXkgKi8KKwkJ
CWlmIChhc29jLT5udW1uZXRzIDwgMikgeworCQkJCS8qIE11c3QgaGF2ZSBhdCBMRUFTVCB0d28g
cmVtb3RlIGFkZHJlc3NlcyAqLworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlz
Y3RwX3JlbW92ZV9uZXQoc3RjYiwgbmV0KTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJ
fQorCS8qIG5vdCBmb3VuZC4gKi8KKwlyZXR1cm4gKC0yKTsKK30KKwordm9pZAorc2N0cF9kZWxl
dGVfZnJvbV90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBy
cG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKKwlzdHJ1Y3Qgc2N0cF90YWdi
bG9jayAqdHdhaXRfYmxvY2s7CisJaW50IGZvdW5kID0gMDsKKwlpbnQgaTsKKworCWNoYWluID0g
JlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpWyh0YWcgJSBTQ1RQX1NUQUNLX1ZUQUdfSEFT
SF9TSVpFKV07CisJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFpbiwgc2N0cF9ueHRfdGFn
YmxvY2spIHsKKwkJZm9yIChpID0gMDsgaSA8IFNDVFBfTlVNQkVSX0lOX1ZUQUdfQkxPQ0s7IGkr
KykgeworCQkgIGlmICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gdGFnKSAm
JgorCQkgICAgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPT0gbHBvcnQpICYm
CisJCSAgICAgICh0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5ycG9ydCA9PSBycG9ydCkpIHsK
KwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0gMDsKKwkJ
CQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IDA7CisJCQkJdHdhaXRfYmxvY2st
PnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnJwb3J0ID0gMDsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYg
KGZvdW5kKQorCQkJYnJlYWs7CisJfQorfQorCitpbnQKK3NjdHBfaXNfaW5fdGltZXdhaXQodWlu
dDMyX3QgdGFnLCB1aW50MTZfdCBscG9ydCwgdWludDE2X3QgcnBvcnQpCit7CisJc3RydWN0IHNj
dHB2dGFnaGVhZCAqY2hhaW47CisJc3RydWN0IHNjdHBfdGFnYmxvY2sgKnR3YWl0X2Jsb2NrOwor
CWludCBmb3VuZCA9IDA7CisJaW50IGk7CisKKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJY2hh
aW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2FpdClbKHRhZyAlIFNDVFBfU1RBQ0tfVlRB
R19IQVNIX1NJWkUpXTsKKwlMSVNUX0ZPUkVBQ0godHdhaXRfYmxvY2ssIGNoYWluLCBzY3RwX254
dF90YWdibG9jaykgeworCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9D
SzsgaSsrKSB7CisJCQlpZiAoKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFnID09IHRh
ZykgICYmCisJCQkgICAgKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLmxwb3J0ID09IGxwb3J0
KSAgJiYKKwkJCSAgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPT0gcnBvcnQp
KSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChmb3VuZCkK
KwkJCWJyZWFrOworCX0KKwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwlyZXR1cm4gKGZvdW5k
KTsKK30KKworCit2b2lkCitzY3RwX2FkZF92dGFnX3RvX3RpbWV3YWl0KHVpbnQzMl90IHRhZywg
dWludDMyX3QgdGltZSwgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0KQoreworCXN0cnVj
dCBzY3RwdnRhZ2hlYWQgKmNoYWluOworCXN0cnVjdCBzY3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9j
azsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHNldCwgaTsKKworCWlmICh0aW1lID09IDAp
IHsKKwkJLyogSXRzIGRpc2FibGVkICovCisJCXJldHVybjsKKwl9CisJKHZvaWQpU0NUUF9HRVRU
SU1FX1RJTUVWQUwoJm5vdyk7CisJY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2Fp
dClbKHRhZyAlIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKKwlzZXQgPSAwOworCUxJU1Rf
Rk9SRUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7CisJCS8qIEJs
b2NrKHMpIHByZXNlbnQsIGxldHMgZmluZCBzcGFjZSwgYW5kIGV4cGlyZSBvbiB0aGUgZmx5ICov
CisJCWZvciAoaSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLOyBpKyspIHsKKwkJ
CWlmICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gMCkgJiYKKwkJCSAgICAh
c2V0KSB7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0X2V4cGlyZSA9
CisJCQkJCW5vdy50dl9zZWMgKyB0aW1lOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnZfdGFnID0gdGFnOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLmxwb3J0ID0gbHBv
cnQ7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSBycG9ydDsKKwkJCQlz
ZXQgPSAxOworCQkJfSBlbHNlIGlmICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcp
ICYmCisJCQkJICAgICgobG9uZyl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRf
ZXhwaXJlIDwgbm93LnR2X3NlYykpIHsKKwkJCQkvKiBBdWRpdCBleHBpcmVzIHRoaXMgZ3V5ICov
CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0X2V4cGlyZSA9IDA7CisJ
CQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPSAwOworCQkJCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLmxwb3J0ID0gMDsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tp
XS5ycG9ydCA9IDA7CisJCQkJaWYgKHNldCA9PSAwKSB7CisJCQkJCS8qIFJldXNlIGl0IGZvciBt
eSBuZXcgdGFnICovCisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9l
eHBpcmUgPSBub3cudHZfc2VjICsgdGltZTsKKwkJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tb
aV0udl90YWcgPSB0YWc7CisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLmxwb3J0ID0g
bHBvcnQ7CisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gcnBvcnQ7CisJ
CQkJCXNldCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChzZXQpIHsKKwkJCS8qCisJCQkg
KiBXZSBvbmx5IGRvIHVwIHRvIHRoZSBibG9jayB3aGVyZSB3ZSBjYW4KKwkJCSAqIHBsYWNlIG91
ciB0YWcgZm9yIGF1ZGl0cworCQkJICovCisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBOZWVkIHRv
IGFkZCBhIG5ldyBibG9jayB0byBjaGFpbiAqLworCWlmICghc2V0KSB7CisJCVNDVFBfTUFMTE9D
KHR3YWl0X2Jsb2NrLCBzdHJ1Y3Qgc2N0cF90YWdibG9jayAqLAorCQkgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3RhZ2Jsb2NrKSwgU0NUUF9NX1RJTVcpOworCQlpZiAodHdhaXRfYmxvY2sgPT0gTlVM
TCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJDYW4gbm90IGFsbG9jIHRhZ2Jsb2Nr
Iik7CisjZW5kaWYKKwkJCXJldHVybjsKKwkJfQorCQltZW1zZXQodHdhaXRfYmxvY2ssIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF90YWdibG9jaykpOworCQlMSVNUX0lOU0VSVF9IRUFEKGNoYWluLCB0
d2FpdF9ibG9jaywgc2N0cF9ueHRfdGFnYmxvY2spOworCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1swXS50dl9zZWNfYXRfZXhwaXJlID0gbm93LnR2X3NlYyArIHRpbWU7CisJCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrWzBdLnZfdGFnID0gdGFnOworCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1sw
XS5scG9ydCA9IGxwb3J0OworCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1swXS5ycG9ydCA9IHJw
b3J0OworCX0KK30KKwordm9pZAorc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCAqcmgpCit7CisJc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwg
Km5jb250cm9sOworCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsIHJoLCBuZXh0X2luc3Ry
bSwgbmNvbnRyb2wpIHsKKwkJVEFJTFFfUkVNT1ZFKHJoLCBjb250cm9sLCBuZXh0X2luc3RybSk7
CisJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCWlmIChjb250cm9sLT5vbl9yZWFkX3EgPT0g
MCkgeworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOworCQkJaWYg
KGNvbnRyb2wtPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7CisJCQkJ
Y29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJLyogUmVhc3NlbWJseSBmcmVlPyAq
LworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCwg
bmNoaykgeworCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQp
OworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJ
CWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJ
CXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9D
S0VEKTsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKKwkJCVNDVFBfWk9O
RV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsKKwkJCVNDVFBfREVD
Ul9DSEtfQ09VTlQoKTsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJCX0KKwkJLyoK
KwkJICogV2UgZG9uJ3QgZnJlZSB0aGUgYWRkcmVzcyBoZXJlCisJCSAqIHNpbmNlIGFsbCB0aGUg
bmV0J3Mgd2VyZSBmcmVlZAorCQkgKiBhYm92ZS4KKwkJICovCisJCWlmIChjb250cm9sLT5vbl9y
ZWFkX3EgPT0gMCkgeworCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7CisJCX0K
Kwl9Cit9CisKKyNpZmRlZiBfX1BhbmRhX18KK3ZvaWQgcGFuZGFfd2FrZXVwX3NvY2tldChzdHJ1
Y3Qgc29ja2V0ICpzbyk7CisjZW5kaWYKKworLyotCisgKiBGcmVlIHRoZSBhc3NvY2lhdGlvbiBh
ZnRlciB1bi1oYXNoaW5nIHRoZSByZW1vdGUgcG9ydC4gVGhpcworICogZnVuY3Rpb24gQUxXQVlT
IHJldHVybnMgaG9sZGluZyBOTyBMT0NLIG9uIHRoZSBzdGNiLiBJdCBET0VTCisgKiBleHBlY3Qg
dGhhdCB0aGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBJUyBhIGxvY2tlZCBUQ0IuCisgKiBJdCB3
aWxsIHJldHVybiAwLCBpZiBpdCBkaWQgTk9UIGRlc3Ryb3kgdGhlIGFzc29jaWF0aW9uIChpbnN0
ZWFkCisgKiBpdCB1bmxvY2tzIGl0LiBJdCB3aWxsIHJldHVybiBOT04temVybyBpZiBpdCBlaXRo
ZXIgZGVzdHJveWVkIHRoZQorICogYXNzb2NpYXRpb24gT1IgdGhlIGFzc29jaWF0aW9uIGlzIGFs
cmVhZHkgZGVzdHJveWVkLgorICovCitpbnQKK3NjdHBfZnJlZV9hc3NvYyhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBmcm9tX2lucGNiZnJlZSwgaW50
IGZyb21fbG9jYXRpb24pCit7CisJaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2M7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqbm5ldDsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAq
bGFkZHIsICpuYWRkcjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCXN0
cnVjdCBzY3RwX2FzY29uZl9hZGRyICphcGFyYW0sICpuYXBhcmFtOworCXN0cnVjdCBzY3RwX2Fz
Y29uZl9hY2sgKmFhY2ssICpuYWFjazsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAq
c3RycnN0LCAqbnN0cnJzdDsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqc3EsICpuc3E7
CisJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCAqbnNwOworCXNjdHBfc2hh
cmVka2V5X3QgKnNoYXJlZF9rZXksICpuc2hhcmVkX2tleTsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsK
KworCS8qIGZpcnN0LCBsZXRzIHB1cmdlIHRoZSBlbnRyeSBmcm9tIHRoZSBoYXNoIHRhYmxlLiAq
LworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08o
aW5wKSk7CisjZW5kaWYKKworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9z
aW5nKGlucCwgc3RjYiwgNik7CisjZW5kaWYKKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7
CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwg
Nyk7CisjZW5kaWYKKwkJLyogdGhlcmUgaXMgbm8gYXNvYywgcmVhbGx5IFRTTkggOi0wICovCisJ
CXJldHVybiAoMSk7CisJfQorCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQlzdGNiLT5hc29jLmFsdGVy
bmF0ZSA9IE5VTEw7CisJfQorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgLyogVEVNUDogbW92ZWQg
dG8gYmVsb3cgKi8KKyAgICAgICAgLyogVEVNUCBDT0RFICovCisJaWYgKHN0Y2ItPmZyZWVkX2Zy
b21fd2hlcmUgPT0gMCkgeworCQkvKiBPbmx5IHJlY29yZCB0aGUgZmlyc3QgcGxhY2UgZnJlZSBo
YXBwZW5lZCBmcm9tICovCisJCXN0Y2ItPmZyZWVkX2Zyb21fd2hlcmUgPSBmcm9tX2xvY2F0aW9u
OworCX0KKyAgICAgICAgLyogVEVNUCBDT0RFICovCisjZW5kaWYKKworCWFzb2MgPSAmc3RjYi0+
YXNvYzsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExH
T05FKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dP
TkUpKQorCQkvKiBub3RoaW5nIGFyb3VuZCAqLworCQlzbyA9IE5VTEw7CisJZWxzZQorCQlzbyA9
IGlucC0+c2N0cF9zb2NrZXQ7CisKKwkvKgorCSAqIFdlIHVzZWQgdGltZXIgYmFzZWQgZnJlZWlu
ZyBpZiBhIHJlYWRlciBvciB3cml0ZXIgaXMgaW4gdGhlIHdheS4KKwkgKiBTbyB3ZSBmaXJzdCBj
aGVjayBpZiB3ZSBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIGZyb20gYSB0aW1lciwKKwkgKiBp
ZiBzbyB3ZSBhYm9ydCBlYXJseSBpZiBhIHJlYWRlciBvciB3cml0ZXIgaXMgc3RpbGwgaW4gdGhl
IHdheS4KKwkgKi8KKwlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RP
X0JFX0ZSRUVEKSAmJgorCSAgICAoZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykp
IHsKKwkJLyoKKwkJICogaXMgaXQgdGhlIHRpbWVyIGRyaXZpbmcgdXM/IGlmIHNvIGFyZSB0aGUg
cmVhZGVyL3dyaXRlcnMKKwkJICogZ29uZT8KKwkJICovCisJCWlmIChzdGNiLT5hc29jLnJlZmNu
dCkgeworCQkJLyogbm9wZSwgcmVhZGVyIG9yIHdyaXRlciBpbiB0aGUgd2F5ICovCisJCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBzdGNiLCBOVUxMKTsK
KwkJCS8qIG5vIGFzb2MgZGVzdHJveWVkICovCisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Cisj
aWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIHN0Y2IsIDgp
OworI2VuZGlmCisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qIG5vdyBjbGVhbiB1cCBhbnkg
b3RoZXIgdGltZXJzICovCisJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kYWNrX3Rp
bWVyLnRpbWVyKTsKKwlhc29jLT5kYWNrX3RpbWVyLnNlbGYgPSBOVUxMOworCSh2b2lkKVNDVFBf
T1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOworCS8qLQorCSAqIEZv
ciBzdHJlYW0gcmVzZXQgd2UgZG9uJ3QgYmxhc3QgdGhpcyB1bmxlc3MKKwkgKiBpdCBpcyBhIHN0
ci1yZXNldCB0aW1lciwgaXQgbWlnaHQgYmUgdGhlCisJICogZnJlZS1hc29jIHRpbWVyIHdoaWNo
IHdlIERPTidUIHdhbnQgdG8KKwkgKiBkaXN0dXJiLgorCSAqLworCWlmIChhc29jLT5zdHJyZXNl
dF90aW1lci50eXBlID09IFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCkKKwkJYXNvYy0+c3RycmVz
ZXRfdGltZXIuc2VsZiA9IE5VTEw7CisJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5h
c2NvbmZfdGltZXIudGltZXIpOworCWFzb2MtPmFzY29uZl90aW1lci5zZWxmID0gTlVMTDsKKwko
dm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmF1dG9jbG9zZV90aW1lci50aW1lcik7CisJ
YXNvYy0+YXV0b2Nsb3NlX3RpbWVyLnNlbGYgPSBOVUxMOworCSh2b2lkKVNDVFBfT1NfVElNRVJf
U1RPUCgmYXNvYy0+c2h1dF9ndWFyZF90aW1lci50aW1lcik7CisJYXNvYy0+c2h1dF9ndWFyZF90
aW1lci5zZWxmID0gTlVMTDsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRlbGF5
ZWRfZXZlbnRfdGltZXIudGltZXIpOworCWFzb2MtPmRlbGF5ZWRfZXZlbnRfdGltZXIuc2VsZiA9
IE5VTEw7CisJLyogTW9iaWxpdHkgYWRhcHRhdGlvbiAqLworCSh2b2lkKVNDVFBfT1NfVElNRVJf
U1RPUCgmYXNvYy0+ZGVsZXRlX3ByaW1fdGltZXIudGltZXIpOworCWFzb2MtPmRlbGV0ZV9wcmlt
X3RpbWVyLnNlbGYgPSBOVUxMOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0
cF9uZXh0KSB7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5yeHRfdGltZXIudGlt
ZXIpOworCQluZXQtPnJ4dF90aW1lci5zZWxmID0gTlVMTDsKKwkJKHZvaWQpU0NUUF9PU19USU1F
Ul9TVE9QKCZuZXQtPnBtdHVfdGltZXIudGltZXIpOworCQluZXQtPnBtdHVfdGltZXIuc2VsZiA9
IE5VTEw7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5oYl90aW1lci50aW1lcik7
CisJCW5ldC0+aGJfdGltZXIuc2VsZiA9IE5VTEw7CisJfQorCS8qIE5vdyB0aGUgcmVhZCBxdWV1
ZSBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIChvbmx5IG9uY2UpICovCisJaWYgKChzdGNiLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgPT0gMCkgeworCQlzdGNiLT5h
c29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQ7CisJCVNDVFBfSU5QX1JF
QURfTE9DSyhpbnApOworCQlUQUlMUV9GT1JFQUNIKHNxLCAmaW5wLT5yZWFkX3F1ZXVlLCBuZXh0
KSB7CisJCQlpZiAoc3EtPnN0Y2IgPT0gc3RjYikgeworCQkJCXNxLT5kb19ub3RfcmVmX3N0Y2Ig
PSAxOworCQkJCXNxLT5zaW5mb19jdW10c24gPSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuOwor
CQkJCS8qIElmIHRoZXJlIGlzIG5vIGVuZCwgdGhlcmUgbmV2ZXIKKwkJCQkgKiB3aWxsIGJlIG5v
dy4KKwkJCQkgKi8KKwkJCQlpZiAoc3EtPmVuZF9hZGRlZCA9PSAwKSB7CisJCQkJCS8qIEhlbGQg
Zm9yIFBELUFQSSBjbGVhciB0aGF0LiAqLworCQkJCQlzcS0+cGRhcGlfYWJvcnRlZCA9IDE7CisJ
CQkJCXNxLT5oZWxkX2xlbmd0aCA9IDA7CisJCQkJCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9v
bihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCkgJiYgKHNvICE9IE5VTEwpKSB7
CisJCQkJCQkvKgorCQkJCQkJICogTmVlZCB0byBhZGQgYSBQRC1BUEkgYWJvcnRlZCBpbmRpY2F0
aW9uLgorCQkJCQkJICogU2V0dGluZyB0aGUgY29udHJvbF9wZGFwaSBhc3N1cmVzIHRoYXQgaXQg
d2lsbAorCQkJCQkJICogYmUgYWRkZWQgcmlnaHQgYWZ0ZXIgdGhpcyBtc2cuCisJCQkJCQkgKi8K
KwkJCQkJCXVpbnQzMl90IHN0cnNlcTsKKwkJCQkJCXN0Y2ItPmFzb2MuY29udHJvbF9wZGFwaSA9
IHNxOworCQkJCQkJc3Ryc2VxID0gKHNxLT5zaW5mb19zdHJlYW0gPDwgMTYpIHwgKHNxLT5taWQg
JiAweDAwMDBmZmZmKTsKKwkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9QQVJUSUFM
X0RFTFZJRVJZX0lORElDQVRJT04sCisJCQkJCQkgICAgICAgICAgICAgICAgc3RjYiwKKwkJCQkJ
CSAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRCwKKwkJCQkJCSAg
ICAgICAgICAgICAgICAodm9pZCAqKSZzdHJzZXEsCisJCQkJCQkgICAgICAgICAgICAgICAgU0NU
UF9TT19MT0NLRUQpOworCQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gTlVMTDsKKwkJ
CQkJfQorCQkJCX0KKwkJCQkvKiBBZGQgYW4gZW5kIHRvIHdha2UgdGhlbSAqLworCQkJCXNxLT5l
bmRfYWRkZWQgPSAxOworCQkJfQorCQl9CisJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisJ
CWlmIChzdGNiLT5ibG9ja19lbnRyeSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0
Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUNPTk5SRVNFVCk7CisJCQlzdGNiLT5ibG9j
a19lbnRyeS0+ZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJc3RjYi0+YmxvY2tfZW50cnkgPSBOVUxM
OworCQl9CisJfQorCWlmICgoc3RjYi0+YXNvYy5yZWZjbnQpIHx8IChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUUpKSB7CisJCS8qIFNvbWVvbmUgaG9sZHMgYSBy
ZWZlcmVuY2UgT1IgdGhlIHNvY2tldCBpcyB1bmFjY2VwdGVkIHlldC4KKwkJKi8KKwkJaWYgKChz
dGNiLT5hc29jLnJlZmNudCkgIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCQlzdGNiLT5hc29jLnN0YXRlICY9IH5TQ1RQX1NU
QVRFX0lOX0FDQ0VQVF9RVUVVRTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwpOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09O
RSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09O
RSkpCisJCQkvKiBub3RoaW5nIGFyb3VuZCAqLworCQkJc28gPSBOVUxMOworCQlpZiAoc28pIHsK
KwkJCS8qIFdha2UgYW55IHJlYWRlci93cml0ZXJzICovCisJCQlzY3RwX3Nvcndha2V1cChpbnAs
IHNvKTsKKwkJCXNjdHBfc293d2FrZXVwKGlucCwgc28pOworCQl9CisKKyNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBzdGNiLCA5KTsKKyNlbmRpZgorCQkv
KiBubyBhc29jIGRlc3Ryb3llZCAqLworCQlyZXR1cm4gKDApOworCX0KKyNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIHN0Y2IsIDEwKTsKKyNlbmRpZgorCS8q
IFdoZW4gSSByZWFjaCBoZXJlLCBubyBvdGhlcnMgd2FudAorCSAqIHRvIGtpbGwgdGhlIGFzc29j
IHlldC4uIGFuZCBJIG93bgorCSAqIHRoZSBsb2NrLiBOb3cgaXRzIHBvc3NpYmxlIGFuIGFib3J0
CisJICogY29tZXMgaW4gd2hlbiBJIGRvIHRoZSBsb2NrIGV4Y2hhbmdlCisJICogYmVsb3cgdG8g
Z3JhYiBhbGwgdGhlIGxvY2tzIHRvIGRvCisJICogdGhlIGZpbmFsIHRha2Ugb3V0LiB0byBwcmV2
ZW50IHRoaXMKKwkgKiB3ZSBpbmNyZW1lbnQgdGhlIGNvdW50LCB3aGljaCB3aWxsCisJICogc3Rh
cnQgYSB0aW1lciBhbmQgYmxvdyBvdXQgYWJvdmUgdGh1cworCSAqIGFzc3VyaW5nIHVzIHRoYXQg
d2UgaG9sZCBleGNsdXNpdmUKKwkgKiBraWxsaW5nIG9mIHRoZSBhc29jLiBOb3RlIHRoYXQKKwkg
KiBhZnRlciBnZXR0aW5nIGJhY2sgdGhlIFRDQiBsb2NrCisJICogd2Ugd2lsbCBnbyBhaGVhZCBh
bmQgaW5jcmVtZW50IHRoZQorCSAqIGNvdW50ZXIgYmFjayB1cCBhbmQgc3RvcCBhbnkgdGltZXIK
KwkgKiBhIHBhc3Npbmcgc3RyYW5nZXIgbWF5IGhhdmUgc3RhcnRlZCA6LVMKKwkgKi8KKwlpZiAo
ZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgeworCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NU
UF9JTlBfSU5GT19XTE9DSygpOworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCX0KKwkvKiBEb3VibGUgY2hlY2sgdGhlIEdPTkUgZmxhZyAqLworCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpCisJCS8qIG5v
dGhpbmcgYXJvdW5kICovCisJCXNvID0gTlVMTDsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCS8qCisJCSAqIEZvciBUQ1AgdHlwZSB3ZSBuZWVk
IHNwZWNpYWwgaGFuZGxpbmcgd2hlbiB3ZSBhcmUKKwkJICogY29ubmVjdGVkLiBXZSBhbHNvIGlu
Y2x1ZGUgdGhlIHBlZWwnZWQgb2ZmIG9uZXMgdG8uCisJCSAqLworCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB7CisJCQlpbnAtPnNjdHBfZmxhZ3MgJj0g
flNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19XQVNfQ09OTkVDVEVEOworCQkJaWYgKHNvKSB7CisJCQkJU09DS0JVRl9MT0NLKCZz
by0+c29fcmN2KTsKKwkJCQlpZiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSB7CisJCQkJCXNvLT5z
b19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElORyB8CisJCQkJCQkJICBTU19JU0RJU0NPTk5FQ1RJ
TkcgfAorCQkJCQkJCSAgU1NfSVNDT05GSVJNSU5HIHwKKwkJCQkJCQkgIFNTX0lTQ09OTkVDVEVE
KTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJc29jYW50cmN2bW9yZShzbyk7
CisjZWxzZQorCQkJCXNvY2FudHJjdm1vcmVfbG9ja2VkKHNvKTsKKyNlbmRpZgorCQkJCXNvY2Fu
dHNlbmRtb3JlKHNvKTsKKwkJCQlzY3RwX3Nvd3dha2V1cChpbnAsIHNvKTsKKwkJCQlzY3RwX3Nv
cndha2V1cChpbnAsIHNvKTsKKwkJCQlTQ1RQX1NPV0FLRVVQKHNvKTsKKwkJCX0KKwkJfQorCX0K
KworCS8qIE1ha2UgaXQgaW52YWxpZCB0b28sIHRoYXQgd2F5IGlmIGl0cworCSAqIGFib3V0IHRv
IHJ1biBpdCB3aWxsIGFib3J0IGFuZCByZXR1cm4uCisJICovCisJLyogcmUtaW5jcmVtZW50IHRo
ZSBsb2NrICovCisJaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKKwkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJfQorCWlmIChzdGNiLT5h
c29jLnJlZmNudCkgeworCQlzdGNiLT5hc29jLnN0YXRlICY9IH5TQ1RQX1NUQVRFX0lOX0FDQ0VQ
VF9RVUVVRTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlu
cCwgc3RjYiwgTlVMTCk7CisJCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9D
KSB7CisJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCXJldHVybiAoMCk7CisJfQorCWFz
b2MtPnN0YXRlID0gMDsKKwlpZiAoaW5wLT5zY3RwX3RjYmhhc2gpIHsKKwkJTElTVF9SRU1PVkUo
c3RjYiwgc2N0cF90Y2JoYXNoKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MuaW5fYXNvY2lkX2hhc2gp
IHsKKwkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKKwl9CisJLyogTm93
IGxldHMgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgQUxMIGFzc29jaWF0aW9ucyBpbiB0aGUg
RVAgKi8KKwlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmxpc3QpOworCWlmIChmcm9tX2lucGNi
ZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwl9CisJLyogcHVsbCBmcm9tIHZ0YWcgaGFzaCAqLwor
CUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOworCXNjdHBfYWRkX3Z0YWdfdG9fdGltZXdh
aXQoYXNvYy0+bXlfdnRhZywgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0YWdfdGltZV93YWl0KSwK
KwkJCQkgIGlucC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQpOworCisJLyogTm93IHJlc3RvcCB0
aGUgdGltZXJzIHRvIGJlIHN1cmUKKwkgKiB0aGlzIGlzIHBhcmFub2lhIGF0IGlzIGZpbmVzdCEK
KwkgKi8KKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPnN0cnJlc2V0X3RpbWVyLnRp
bWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRhY2tfdGltZXIudGltZXIp
OworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIp
OworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXNjb25mX3RpbWVyLnRpbWVyKTsK
Kwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPnNodXRfZ3VhcmRfdGltZXIudGltZXIp
OworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXV0b2Nsb3NlX3RpbWVyLnRpbWVy
KTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRlbGF5ZWRfZXZlbnRfdGltZXIu
dGltZXIpOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJ
CSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5yeHRfdGltZXIudGltZXIpOworCQkodm9p
ZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+cG10dV90aW1lci50aW1lcik7CisJCSh2b2lkKVND
VFBfT1NfVElNRVJfU1RPUCgmbmV0LT5oYl90aW1lci50aW1lcik7CisJfQorCisJYXNvYy0+c3Ry
cmVzZXRfdGltZXIudHlwZSA9IFNDVFBfVElNRVJfVFlQRV9OT05FOworCS8qCisJICogVGhlIGNo
dW5rIGxpc3RzIGFuZCBzdWNoIFNIT1VMRCBiZSBlbXB0eSBidXQgd2UgY2hlY2sgdGhlbSBqdXN0
CisJICogaW4gY2FzZS4KKwkgKi8KKwkvKiBhbnl0aGluZyBvbiB0aGUgd2hlZWwgbmVlZHMgdG8g
YmUgcmVtb3ZlZCAqLworCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1vdXRjbnQ7IGkrKykg
eworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpvdXRzOworCisJCW91dHMgPSAmYXNvYy0+c3Ry
bW91dFtpXTsKKwkJLyogbm93IGNsZWFuIHVwIGFueSBjaHVua3MgaGVyZSAqLworCQlUQUlMUV9G
T1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNwKSB7CisJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKKwkJCVRBSUxRX1JFTU9W
RSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25z
LnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91dHMsIHNwLCAwKTsKKwkJ
CXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2MsIHNwKTsKKwkJCWlmIChzcC0+ZGF0YSkg
eworCQkJCWlmIChzbykgeworCQkJCQkvKiBTdGlsbCBhbiBvcGVuIHNvY2tldCAtIHJlcG9ydCAq
LworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1BFQ0lBTF9TUF9GQUlMLCBzdGNi
LAorCQkJCQkgICAgICAgICAgICAgICAgMCwgKHZvaWQgKilzcCwgU0NUUF9TT19MT0NLRUQpOwor
CQkJCX0KKwkJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsK
KwkJCQkJc3AtPmRhdGEgPSBOVUxMOworCQkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCQkJ
c3AtPmxlbmd0aCA9IDA7CisJCQkJfQorCQkJfQorCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7CisJCQkJc3AtPm5ldCA9IE5VTEw7CisJCQl9CisJ
CQlzY3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIFNDVFBfU09fTE9DS0VEKTsKKwkJfQorCX0K
KwkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShzdHJyc3Qs
ICZhc29jLT5yZXNldEhlYWQsIG5leHRfcmVzcCwgbnN0cnJzdCkgeworCQlUQUlMUV9SRU1PVkUo
JmFzb2MtPnJlc2V0SGVhZCwgc3RycnN0LCBuZXh0X3Jlc3ApOworCQlTQ1RQX0ZSRUUoc3RycnN0
LCBTQ1RQX01fU1RSRVNFVCk7CisJfQorCVRBSUxRX0ZPUkVBQ0hfU0FGRShzcSwgJmFzb2MtPnBl
bmRpbmdfcmVwbHlfcXVldWUsIG5leHQsIG5zcSkgeworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnBl
bmRpbmdfcmVwbHlfcXVldWUsIHNxLCBuZXh0KTsKKwkJaWYgKHNxLT5kYXRhKSB7CisJCQlzY3Rw
X21fZnJlZW0oc3EtPmRhdGEpOworCQkJc3EtPmRhdGEgPSBOVUxMOworCQl9CisJCXNjdHBfZnJl
ZV9yZW1vdGVfYWRkcihzcS0+d2hvRnJvbSk7CisJCXNxLT53aG9Gcm9tID0gTlVMTDsKKwkJc3Et
PnN0Y2IgPSBOVUxMOworCQkvKiBGcmVlIHRoZSBjdGwgZW50cnkgKi8KKwkJc2N0cF9mcmVlX2Ff
cmVhZHEoc3RjYiwgc3EpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKwlUQUlM
UV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+ZnJlZV9jaHVua3MsIHNjdHBfbmV4dCwgbmNoaykg
eworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmZyZWVfY2h1bmtzLCBjaGssIHNjdHBfbmV4dCk7CisJ
CWlmIChjaGstPmRhdGEpIHsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5k
YXRhID0gTlVMTDsKKwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJc2N0cF9hdXRo
X2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOworCQlT
Q1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuayksIGNoayk7CisJCVND
VFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lO
Rk8oaXBpX2ZyZWVfY2h1bmtzKSwgMSk7CisJCWFzb2MtPmZyZWVfY2h1bmtfY250LS07CisJCS8q
c2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJfQorCS8qIHBlbmRpbmcgc2VuZCBxdWV1ZSBTSE9V
TEQgYmUgZW1wdHkgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1
ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEu
c2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5k
YXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJfSBlbHNl
IHsKKwkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIGNoay0+
cmVjLmRhdGEuc2lkKTsKKyNlbmRpZgorCQl9CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VuZF9x
dWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlpZiAoc28pIHsK
KwkJCQkvKiBTdGlsbCBhIHNvY2tldD8gKi8KKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJ
RllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJCQkJICAgICAgICAgICAgICAgIDAsIGNoaywgU0NU
UF9TT19MT0NLRUQpOworCQkJfQorCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVl
bShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJaWYgKGNo
ay0+aG9sZHNfa2V5X3JlZikKKwkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGstPmF1
dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCXNjdHBf
ZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKKwkJCWNoay0+d2hvVG8gPSBOVUxMOworCQl9
CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsK
KwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLwor
CX0KKwkvKiBzZW50IHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FG
RShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYgKGNoay0+
c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSB7CisJCQlpZiAoYXNvYy0+c3RybW91dFtj
aGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKKwkJCQlhc29jLT5zdHJt
b3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJfSBlbHNlIHsKKwkJCQlwYW5pYygiTm8gY2h1bmtzIG9uIHRoZSBxdWV1ZXMgZm9y
IHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNpZCk7CisjZW5kaWYKKwkJCX0KKwkJfQorCQlUQUlM
UV9SRU1PVkUoJmFzb2MtPnNlbnRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJaWYgKGNoay0+
ZGF0YSkgeworCQkJaWYgKHNvKSB7CisJCQkJLyogU3RpbGwgYSBzb2NrZXQ/ICovCisJCQkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NFTlRfREdfRkFJTCwgc3RjYiwKKwkJCQkgICAgICAg
ICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQl9CisJCQlpZiAoY2hrLT5kYXRh
KSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCQkJY2hrLT5kYXRhID0gTlVMTDsK
KwkJCX0KKwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJc2N0cF9hdXRoX2tleV9y
ZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOworCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsKKwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkv
KnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKyNpZmRlZiBJTlZBUklBTlRTCisJZm9yIChp
ID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJaWYgKHN0Y2ItPmFz
b2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJcGFuaWMoIiV1IGNodW5r
cyBsZWZ0IGZvciBzdHJlYW0gJXUuIiwgc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNodW5rc19vbl9x
dWV1ZXMsIGkpOworCQl9CisJfQorI2VuZGlmCisJLyogY29udHJvbCBxdWV1ZSBNQVkgbm90IGJl
IGVtcHR5ICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9x
dWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29udHJvbF9z
ZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChjaGstPmRhdGEpIHsKKwkJCXNjdHBf
bV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJfQorCQlpZiAoY2hr
LT5ob2xkc19rZXlfcmVmKQorCQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0
aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOworCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53
aG9Ubyk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwg
Y2hrKTsKKwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1P
UlkqLworCX0KKwkvKiBBU0NPTkYgcXVldWUgTUFZIG5vdCBiZSBlbXB0eSAqLworCVRBSUxRX0ZP
UkVBQ0hfU0FGRShjaGssICZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hr
KSB7CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+YXNjb25mX3NlbmRfcXVldWUsIGNoaywgc2N0cF9u
ZXh0KTsKKwkJaWYgKGNoay0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJ
CQljaGstPmRhdGEgPSBOVUxMOworCQl9CisJCWlmIChjaGstPmhvbGRzX2tleV9yZWYpCisJCQlz
Y3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBTQ1RQX1NPX0xPQ0tF
RCk7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKKwkJU0NUUF9aT05FX0ZS
RUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOworCQlTQ1RQX0RFQ1JfQ0hL
X0NPVU5UKCk7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJfQorCWlmIChhc29jLT5t
YXBwaW5nX2FycmF5KSB7CisJCVNDVFBfRlJFRShhc29jLT5tYXBwaW5nX2FycmF5LCBTQ1RQX01f
TUFQKTsKKwkJYXNvYy0+bWFwcGluZ19hcnJheSA9IE5VTEw7CisJfQorCWlmIChhc29jLT5ucl9t
YXBwaW5nX2FycmF5KSB7CisJCVNDVFBfRlJFRShhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBTQ1RQ
X01fTUFQKTsKKwkJYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9IE5VTEw7CisJfQorCS8qIHRoZSBz
dHJlYW0gb3V0cyAqLworCWlmIChhc29jLT5zdHJtb3V0KSB7CisJCVNDVFBfRlJFRShhc29jLT5z
dHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQlhc29jLT5zdHJtb3V0ID0gTlVMTDsKKwl9CisJYXNv
Yy0+c3RybV9yZWFsb3V0c2l6ZSA9IGFzb2MtPnN0cmVhbW91dGNudCA9IDA7CisJaWYgKGFzb2Mt
PnN0cm1pbikgeworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtaW5jbnQ7IGkrKykgewor
CQkJc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1pbltpXS5pbnF1ZXVlKTsK
KwkJCXNjdHBfY2xlYW5fdXBfc3RyZWFtKHN0Y2IsICZhc29jLT5zdHJtaW5baV0udW5vX2lucXVl
dWUpOworCQl9CisJCVNDVFBfRlJFRShhc29jLT5zdHJtaW4sIFNDVFBfTV9TVFJNSSk7CisJCWFz
b2MtPnN0cm1pbiA9IE5VTEw7CisJfQorCWFzb2MtPnN0cmVhbWluY250ID0gMDsKKwlUQUlMUV9G
T1JFQUNIX1NBRkUobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0LCBubmV0KSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCQlpZiAoU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JhZGRyKSA9PSAwKSB7
CisJCQlwYW5pYygibm8gbmV0J3MgbGVmdCBhbGxvYydlZCwgb3IgbGlzdCBwb2ludHMgdG8gaXRz
ZWxmIik7CisJCX0KKyNlbmRpZgorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPm5ldHMsIG5ldCwgc2N0
cF9uZXh0KTsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CisJfQorCUxJU1RfRk9SRUFD
SF9TQUZFKGxhZGRyLCAmYXNvYy0+c2N0cF9yZXN0cmljdGVkX2FkZHJzLCBzY3RwX254dF9hZGRy
LCBuYWRkcikgeworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCQlzY3RwX3JlbW92ZV9s
YWRkcihsYWRkcik7CisJfQorCisJLyogcGVuZGluZyBhc2NvbmYgKGFkZHJlc3MpIHBhcmFtZXRl
cnMgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoYXBhcmFtLCAmYXNvYy0+YXNjb25mX3F1ZXVlLCBu
ZXh0LCBuYXBhcmFtKSB7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJCVRBSUxRX1JF
TU9WRSgmYXNvYy0+YXNjb25mX3F1ZXVlLCBhcGFyYW0sIG5leHQpOworCQlTQ1RQX0ZSRUUoYXBh
cmFtLFNDVFBfTV9BU0NfQUREUik7CisJfQorCVRBSUxRX0ZPUkVBQ0hfU0FGRShhYWNrLCAmYXNv
Yy0+YXNjb25mX2Fja19zZW50LCBuZXh0LCBuYWFjaykgeworCQkvKnNhX2lnbm9yZSBGUkVFRF9N
RU1PUlkqLworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9hY2tfc2VudCwgYWFjaywgbmV4
dCk7CisJCWlmIChhYWNrLT5kYXRhICE9IE5VTEwpIHsKKwkJCXNjdHBfbV9mcmVlbShhYWNrLT5k
YXRhKTsKKwkJfQorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2Nv
bmZfYWNrKSwgYWFjayk7CisJfQorCS8qIGNsZWFuIHVwIGF1dGggc3R1ZmYgKi8KKwlpZiAoYXNv
Yy0+bG9jYWxfaG1hY3MpCisJCXNjdHBfZnJlZV9obWFjbGlzdChhc29jLT5sb2NhbF9obWFjcyk7
CisJaWYgKGFzb2MtPnBlZXJfaG1hY3MpCisJCXNjdHBfZnJlZV9obWFjbGlzdChhc29jLT5wZWVy
X2htYWNzKTsKKworCWlmIChhc29jLT5sb2NhbF9hdXRoX2NodW5rcykKKwkJc2N0cF9mcmVlX2No
dW5rbGlzdChhc29jLT5sb2NhbF9hdXRoX2NodW5rcyk7CisJaWYgKGFzb2MtPnBlZXJfYXV0aF9j
aHVua3MpCisJCXNjdHBfZnJlZV9jaHVua2xpc3QoYXNvYy0+cGVlcl9hdXRoX2NodW5rcyk7CisK
KwlzY3RwX2ZyZWVfYXV0aGluZm8oJmFzb2MtPmF1dGhpbmZvKTsKKworCUxJU1RfRk9SRUFDSF9T
QUZFKHNoYXJlZF9rZXksICZhc29jLT5zaGFyZWRfa2V5cywgbmV4dCwgbnNoYXJlZF9rZXkpIHsK
KwkJTElTVF9SRU1PVkUoc2hhcmVkX2tleSwgbmV4dCk7CisJCXNjdHBfZnJlZV9zaGFyZWRrZXko
c2hhcmVkX2tleSk7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJfQorCisJLyogSW5z
ZXJ0IG5ldyBpdGVtcyBoZXJlIDo+ICovCisKKwkvKiBHZXQgcmlkIG9mIExPQ0sgKi8KKwlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2IpOworCVNDVFBf
VENCX1NFTkRfTE9DS19ERVNUUk9ZKHN0Y2IpOworCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQ
X05PUk1BTF9QUk9DKSB7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgLyogVEVNUCBDT0RFICovCisJ
c3RjYi0+ZnJlZWRfZnJvbV93aGVyZSA9IGZyb21fbG9jYXRpb247CisjZW5kaWYKKyNpZmRlZiBT
Q1RQX1RSQUNLX0ZSRUVEX0FTT0NTCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9HT05FKSB7CisJCS8qIG5vdyBjbGVhbiB1cCB0aGUgdGFzb2MgaXRzZWxmICov
CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsK
KwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwl9IGVsc2UgeworCQlMSVNUX0lOU0VSVF9IRUFE
KCZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QsIHN0Y2IsIHNjdHBfdGNibGlzdCk7CisJfQorI2Vs
c2UKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSwgc3RjYik7
CisJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKyNlbmRpZgorCWlmIChmcm9tX2lucGNiZnJlZSA9
PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkgeworCQkJLyogSWYgaXRzIE5PVCB0aGUgaW5wX2ZyZWUgY2FsbGlu
ZyB1cyBBTkQKKwkJCSAqIHNjdHBfY2xvc2UgYXMgYmVlbiBjYWxsZWQsIHdlCisJCQkgKiBjYWxs
IGJhY2suLi4KKwkJCSAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJLyogVGhpcyB3
aWxsIHN0YXJ0IHRoZSBraWxsIHRpbWVyIChpZiB3ZSBhcmUKKwkJCSAqIHRoZSBsYXN0IG9uZSkg
c2luY2Ugd2UgaG9sZCBhbiBpbmNyZW1lbnQgeWV0LiBCdXQKKwkJCSAqIHRoaXMgaXMgdGhlIG9u
bHkgc2FmZSB3YXkgdG8gZG8gdGhpcworCQkJICogc2luY2Ugb3RoZXJ3aXNlIGlmIHRoZSBzb2Nr
ZXQgY2xvc2VzCisJCQkgKiBhdCB0aGUgc2FtZSB0aW1lIHdlIGFyZSBoZXJlIHdlIG1pZ2h0CisJ
CQkgKiBjb2xsaWRlIGluIHRoZSBjbGVhbnVwLgorCQkJICovCisJCQlzY3RwX2lucGNiX2ZyZWUo
aW5wLAorCQkJCQlTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9HUkFDRUZVTF9DTE9TRSwKKwkJCQkJU0NU
UF9DQUxMRURfRElSRUNUTFlfTk9DTVBTRVQpOworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
KwkJCWdvdG8gb3V0X29mOworCQl9IGVsc2UgeworCQkJLyogVGhlIHNvY2tldCBpcyBzdGlsbCBv
cGVuLiAqLworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCX0KKwlpZiAoZnJvbV9p
bnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJfQorIG91dF9vZjoKKwkvKiBkZXN0cm95ZWQgdGhlIGFzb2MgKi8KKyNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDExKTsKKyNlbmRpZgorCXJl
dHVybiAoMSk7Cit9CisKKworCisvKgorICogZGV0ZXJtaW5lIGlmIGEgZGVzdGluYXRpb24gaXMg
InJlYWNoYWJsZSIgYmFzZWQgdXBvbiB0aGUgYWRkcmVzc2VzIGJvdW5kCisgKiB0byB0aGUgY3Vy
cmVudCBlbmRwb2ludCAoZS5nLiBvbmx5IHY0IG9yIHY2IGN1cnJlbnRseSBib3VuZCkKKyAqLwor
LyoKKyAqIEZJWDogaWYgd2UgYWxsb3cgYXNzb2MtbGV2ZWwgYmluZHgoKSwgdGhlbiB0aGlzIG5l
ZWRzIHRvIGJlIGZpeGVkIHRvIHVzZQorICogYXNzb2MgbGV2ZWwgdjQvdjYgZmxhZ3MsIGFzIHRo
ZSBhc3NvYyAqbWF5KiBub3QgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzCisgKiB0eXBlcyBib3VuZCBh
cyBpdHMgZW5kcG9pbnQKKyAqLworaW50CitzY3RwX2Rlc3RpbmF0aW9uX2lzX3JlYWNoYWJsZShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqZGVzdGFkZHIpCit7CisJc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKKwlpbnQgYW5zd2VyOworCisJLyoKKwkgKiBObyBsb2NrcyBo
ZXJlLCB0aGUgVENCLCBpbiBhbGwgY2FzZXMgaXMgYWxyZWFkeSBsb2NrZWQgYW5kIGFuCisJICog
YXNzb2MgaXMgdXAuIFRoZXJlIGlzIGVpdGhlciBhIElOUCBsb2NrIGJ5IHRoZSBjYWxsZXIgYXBw
bGllZCAoaW4KKwkgKiBhc2NvbmYgY2FzZSB3aGVuIGRlbGV0aW5nIGFuIGFkZHJlc3MpIG9yIE5P
VCBpbiB0aGUgSEIgY2FzZSwKKwkgKiBob3dldmVyIGlmIEhCIHRoZW4gdGhlIElOUCBpbmNyZW1l
bnQgaXMgdXAgYW5kIHRoZSBJTlAgd2lsbCBub3QKKwkgKiBiZSByZW1vdmVkIChvbiB0b3Agb2Yg
dGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGEgVENCIGxvY2spLiBTbyB3ZQorCSAqIG9ubHkgd2FudCB0
byByZWFkIHRoZSBzY3RwX2ZsYWdzLCB3aGljaCBpcyBlaXRoZXIgYm91bmQtYWxsIG9yCisJICog
bm90Li4gbm8gcHJvdGVjdGlvbiBuZWVkZWQgc2luY2Ugb25jZSBhbiBhc3NvYyBpcyB1cCB5b3Ug
Y2FuJ3QgYmUKKwkgKiBjaGFuZ2luZyB5b3VyIGJpbmRpbmcuCisJICovCisJaW5wID0gc3RjYi0+
c2N0cF9lcDsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwp
IHsKKwkJLyogaWYgYm91bmQgYWxsLCBkZXN0aW5hdGlvbiBpcyBub3QgcmVzdHJpY3RlZCAqLwor
CQkvKgorCQkgKiBSUlM6IFF1ZXN0aW9uIGR1cmluZyBsb2NrIHdvcms6IElzIHRoaXMgY29ycmVj
dD8gSWYgeW91CisJCSAqIGFyZSBib3VuZC1hbGwgeW91IHN0aWxsIG1pZ2h0IG5lZWQgdG8gb2Jl
eSB0aGUgVjQtLVY2CisJCSAqIGZsYWdzPz8/IElNTyB0aGlzIGJvdW5kLWFsbCBzdHVmZiBuZWVk
cyB0byBiZSByZW1vdmVkIQorCQkgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJLyogTk9URTogYWxs
ICJzY29wZSIgY2hlY2tzIGFyZSBkb25lIHdoZW4gbG9jYWwgYWRkcmVzc2VzIGFyZSBhZGRlZCAq
LworCXN3aXRjaCAoZGVzdGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBB
Rl9JTkVUNjoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQlh
bnN3ZXIgPSBpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2OworI2Vsc2UKKwkJYW5zd2VyID0gaW5w
LT5pcF9pbnAuaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2OworI2VuZGlmCisJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pKQorCQlhbnN3ZXIgPSBpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY0
OworI2Vsc2UKKwkJYW5zd2VyID0gaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyAmIElOUF9JUFY0
OworI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWNhc2UgQUZfQ09OTjoKKwkJYW5zd2VyID0gaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyAmIElO
UF9DT05OOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIGludmFsaWQgZmFtaWx5
LCBzbyBpdCdzIHVucmVhY2hhYmxlICovCisJCWFuc3dlciA9IDA7CisJCWJyZWFrOworCX0KKwly
ZXR1cm4gKGFuc3dlcik7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIGlucF92ZmxhZ3Mgb24gYW4g
ZW5kcG9pbnQKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfdXBkYXRlX2VwX3ZmbGFnKHN0cnVjdCBz
Y3RwX2lucGNiICppbnApCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJLyogZmly
c3QgY2xlYXIgdGhlIGZsYWcgKi8KKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pKQorCWlucC0+aW5wX3ZmbGFnID0gMDsKKyNlbHNlCisJaW5wLT5pcF9pbnAuaW5wLmlu
cF92ZmxhZyA9IDA7CisjZW5kaWYKKwkvKiBzZXQgdGhlIGZsYWcgYmFzZWQgb24gYWRkcmVzc2Vz
IG9uIHRoZSBlcCBsaXN0ICovCisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJf
bGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwKKwkJCQlfX2Z1bmNfXyk7
CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAm
IFNDVFBfQkVJTkdfREVMRVRFRCkgeworCQkJY29udGludWU7CisJCX0KKwkJc3dpdGNoIChsYWRk
ci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJCWNhc2UgQUZf
SU5FVDY6CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJCWlu
cC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY2OworI2Vsc2UKKwkJCWlucC0+aXBfaW5wLmlucC5pbnBf
dmZsYWcgfD0gSU5QX0lQVjY7CisjZW5kaWYKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VAorCQljYXNlIEFGX0lORVQ6CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKSkKKwkJCWlucC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY0OworI2Vsc2UKKwkJCWlucC0+aXBf
aW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZW5kaWYKKwkJCWJyZWFrOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlpbnAtPmlw
X2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9DT05OOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVm
YXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogQWRkIHRoZSBhZGRyZXNzIHRv
IHRoZSBlbmRwb2ludCBsb2NhbCBhZGRyZXNzIGxpc3QgVGhlcmUgaXMgbm90aGluZyB0byBiZQor
ICogZG9uZSBpZiB3ZSBhcmUgYm91bmQgdG8gYWxsIGFkZHJlc3NlcworICovCit2b2lkCitzY3Rw
X2FkZF9sb2NhbF9hZGRyX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX2lm
YSAqaWZhLCB1aW50MzJfdCBhY3Rpb24pCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwor
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgZm5kLCBlcnJvciA9IDA7CisKKwlmbmQgPSAw
OworCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJ
CS8qIFlvdSBhcmUgYWxyZWFkeSBib3VuZCB0byBhbGwuIFlvdSBoYXZlIGl0IGFscmVhZHkgKi8K
KwkJcmV0dXJuOworCX0KKyNpZmRlZiBJTkVUNgorCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5ID09IEFGX0lORVQ2KSB7CisJCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERS
X0lGQV9VTlVTRUFCTEUpIHsKKwkJCS8qIENhbid0IGJpbmQgYSBub24tdXNlYWJsZSBhZGRyLiAq
LworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyogZmlyc3QsIGlzIGl0IGFscmVhZHkg
cHJlc2VudD8gKi8KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBz
Y3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZhID09IGlmYSkgeworCQkJZm5kID0gMTsK
KwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZuZCA9PSAwKSB7CisJCS8qIE5vdCBpbiB0aGUg
ZXAgbGlzdCAqLworCQllcnJvciA9IHNjdHBfaW5zZXJ0X2xhZGRyKCZpbnAtPnNjdHBfYWRkcl9s
aXN0LCBpZmEsIGFjdGlvbik7CisJCWlmIChlcnJvciAhPSAwKQorCQkJcmV0dXJuOworCQlpbnAt
PmxhZGRyX2NvdW50Kys7CisJCS8qIHVwZGF0ZSBpbnBfdmZsYWcgZmxhZ3MgKi8KKwkJc3dpdGNo
IChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9J
TkVUNjoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQkJaW5w
LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisjZWxzZQorCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92
ZmxhZyB8PSBJTlBfSVBWNjsKKyNlbmRpZgorCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVU
CisJCWNhc2UgQUZfSU5FVDoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pKQorCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZWxzZQorCQkJaW5wLT5pcF9p
bnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKyNlbmRpZgorCQkJYnJlYWs7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCWlucC0+aXBf
aW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0NPTk47CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZh
dWx0OgorCQkJYnJlYWs7CisJCX0KKwkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNv
Y19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCXNjdHBfYWRkX2xvY2FsX2FkZHJfcmVzdHJpY3Rl
ZChzdGNiLCBpZmEpOworCQl9CisJfQorCXJldHVybjsKK30KKworCisvKgorICogc2VsZWN0IGEg
bmV3IChob3BlZnVsbHkgcmVhY2hhYmxlKSBkZXN0aW5hdGlvbiBuZXQgKHNob3VsZCBvbmx5IGJl
IHVzZWQKKyAqIHdoZW4gd2UgZGVsZXRlZCBhbiBlcCBhZGRyIHRoYXQgaXMgdGhlIG9ubHkgdXNh
YmxlIHNvdXJjZSBhZGRyZXNzIHRvIHJlYWNoCisgKiB0aGUgZGVzdGluYXRpb24gbmV0KQorICov
CitzdGF0aWMgdm9pZAorc2N0cF9zZWxlY3RfcHJpbWFyeV9kZXN0aW5hdGlvbihzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJVEFJTFFfRk9SRUFD
SChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKiBmb3Igbm93LCB3ZSds
bCBqdXN0IHBpY2sgdGhlIGZpcnN0IHJlYWNoYWJsZSBvbmUgd2UgZmluZCAqLworCQlpZiAobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKQorCQkJY29udGludWU7CisJCWlm
IChzY3RwX2Rlc3RpbmF0aW9uX2lzX3JlYWNoYWJsZShzdGNiLAorCQkgICAgKHN0cnVjdCBzb2Nr
YWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpKSB7CisJCQkvKiBmb3VuZCBhIHJlYWNoYWJsZSBkZXN0
aW5hdGlvbiAqLworCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gbmV0OworCQl9
CisJfQorCS8qIEkgY2FuJ3QgdGhlcmUgZnJvbSBoZXJlISAuLi53ZSdyZSBnb25uYSBkaWUgc2hv
cnRseS4uLiAqLworfQorCisKKy8qCisgKiBEZWxldGUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgZW5k
cG9pbnQgbG9jYWwgYWRkcmVzcyBsaXN0LiBUaGVyZSBpcyBub3RoaW5nCisgKiB0byBiZSBkb25l
IGlmIHdlIGFyZSBib3VuZCB0byBhbGwgYWRkcmVzc2VzCisgKi8KK3ZvaWQKK3NjdHBfZGVsX2xv
Y2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfaWZhICppZmEp
Cit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCWludCBmbmQ7CisKKwlmbmQgPSAwOwor
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkvKiBZ
b3UgYXJlIGFscmVhZHkgYm91bmQgdG8gYWxsLiBZb3UgaGF2ZSBpdCBhbHJlYWR5ICovCisJCXJl
dHVybjsKKwl9CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0
cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCWZuZCA9IDE7CisJ
CQlicmVhazsKKwkJfQorCX0KKwlpZiAoZm5kICYmIChpbnAtPmxhZGRyX2NvdW50IDwgMikpIHsK
KwkJLyogY2FuJ3QgZGVsZXRlIHVubGVzcyB0aGVyZSBhcmUgYXQgTEVBU1QgMiBhZGRyZXNzZXMg
Ki8KKwkJcmV0dXJuOworCX0KKwlpZiAoZm5kKSB7CisJCS8qCisJCSAqIGNsZWFuIHVwIGFueSB1
c2Ugb2YgdGhpcyBhZGRyZXNzIGdvIHRocm91Z2ggb3VyCisJCSAqIGFzc29jaWF0aW9ucyBhbmQg
Y2xlYXIgYW55IGxhc3RfdXNlZF9hZGRyZXNzIHRoYXQgbWF0Y2gKKwkJICogdGhpcyBvbmUgZm9y
IGVhY2ggYXNzb2MsIHNlZSBpZiBhIG5ldyBwcmltYXJ5X2Rlc3RpbmF0aW9uCisJCSAqIGlzIG5l
ZWRlZAorCQkgKi8KKwkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJCS8qIGNsZWFuIHVwICJu
ZXh0X2FkZHJfdG91c2UiICovCisJCWlmIChpbnAtPm5leHRfYWRkcl90b3VzZSA9PSBsYWRkcikK
KwkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCWlucC0+bmV4dF9hZGRyX3RvdXNlID0g
TlVMTDsKKworCQkvKiBjbGVhbiB1cCAibGFzdF91c2VkX2FkZHJlc3MiICovCisJCUxJU1RfRk9S
RUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlpZiAoc3Rj
Yi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9PSBsYWRkcikKKwkJCQkvKiBkZWxldGUgdGhpcyBh
ZGRyZXNzICovCisJCQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IE5VTEw7CisJCQkv
KiBOb3cgc3BpbiB0aHJvdWdoIGFsbCB0aGUgbmV0cyBhbmQgcHVyZ2UgYW55IHJlZiB0byBsYWRk
ciAqLworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkg
eworCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gbGFkZHItPmlmYSkgeworCQkJCQkvKiBZZXAs
IHB1cmdlIHNyYyBhZGRyZXNzIHNlbGVjdGVkICovCisJCQkJCXNjdHBfcnRlbnRyeV90ICpydDsK
KworCQkJCQkvKiBkZWxldGUgdGhpcyBhZGRyZXNzIGlmIGNhY2hlZCAqLworCQkJCQlydCA9IG5l
dC0+cm8ucm9fcnQ7CisJCQkJCWlmIChydCAhPSBOVUxMKSB7CisJCQkJCQlSVEZSRUUocnQpOwor
CQkJCQkJbmV0LT5yby5yb19ydCA9IE5VTEw7CisJCQkJCX0KKwkJCQkJc2N0cF9mcmVlX2lmYShu
ZXQtPnJvLl9zX2FkZHIpOworCQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCQluZXQt
PnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJCQl9CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCX0JCS8qIGZvciBlYWNoIHRjYiAqLworCQkvKiByZW1vdmUgaXQgZnJvbSB0aGUg
ZXAgbGlzdCAqLworCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7CisJCWlucC0+bGFkZHJfY291
bnQtLTsKKwkJLyogdXBkYXRlIGlucF92ZmxhZyBmbGFncyAqLworCQlzY3RwX3VwZGF0ZV9lcF92
ZmxhZyhpbnApOworCX0KKwlyZXR1cm47Cit9CisKKy8qCisgKiBBZGQgdGhlIGFkZHJlc3MgdG8g
dGhlIFRDQiBsb2NhbCBhZGRyZXNzIHJlc3RyaWN0ZWQgbGlzdC4KKyAqIFRoaXMgaXMgYSAicGVu
ZGluZyIgYWRkcmVzcyBsaXN0IChlZy4gYWRkcmVzc2VzIHdhaXRpbmcgZm9yIGFuCisgKiBBU0NP
TkYtQUNLIHJlc3BvbnNlKSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSB2YWxpZCBzb3VyY2UgYWRk
cmVzcy4KKyAqLwordm9pZAorc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEpCit7CisJc3RydWN0IHNjdHBfbGFk
ZHIgKmxhZGRyOworCXN0cnVjdCBzY3RwbGFkZHIgKmxpc3Q7CisKKwkvKgorCSAqIEFzc3VtZXMg
VENCIGlzIGxvY2tlZC4uIGFuZCBwb3NzaWJseSB0aGUgSU5QLiBNYXkgbmVlZCB0bworCSAqIGNv
bmZpcm0vZml4IHRoYXQgaWYgd2UgbmVlZCBpdCBhbmQgaXMgbm90IHRoZSBjYXNlLgorCSAqLwor
CWxpc3QgPSAmc3RjYi0+YXNvYy5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnM7CisKKyNpZmRlZiBJTkVU
NgorCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWlmIChp
ZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCS8qIENh
bid0IGJpbmQgYSBub24tZXhpc3RlbnQgYWRkci4gKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKyNl
bmRpZgorCS8qIGRvZXMgdGhlIGFkZHJlc3MgYWxyZWFkeSBleGlzdD8gKi8KKwlMSVNUX0ZPUkVB
Q0gobGFkZHIsIGxpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gaWZh
KSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBhZGQgdG8gdGhlIGxpc3QgKi8KKwkodm9p
ZClzY3RwX2luc2VydF9sYWRkcihsaXN0LCBpZmEsIDApOworCXJldHVybjsKK30KKworLyoKKyAq
IFJlbW92ZSBhIGxvY2FsIGFkZHJlc3MgZnJvbSB0aGUgVENCIGxvY2FsIGFkZHJlc3MgcmVzdHJp
Y3RlZCBsaXN0CisgKi8KK3ZvaWQKK3NjdHBfZGVsX2xvY2FsX2FkZHJfcmVzdHJpY3RlZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQoreworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJLyoKKwkgKiBUaGlz
IGlzIGNhbGxlZCBieSBhc2NvbmYgd29yay4gSXQgaXMgYXNzdW1lZCB0aGF0IGEpIFRoZSBUQ0Ig
aXMKKwkgKiBsb2NrZWQgYW5kIGIpIFRoZSBJTlAgaXMgbG9ja2VkLiBUaGlzIGlzIHRydWUgaW4g
YXMgbXVjaCBhcyBJIGNhbgorCSAqIHRyYWNlIHRocm91Z2ggdGhlIGVudHJ5IGFzY29uZiBjb2Rl
IHdoZXJlIEkgZGlkIHRoZXNlIGxvY2tzLgorCSAqIEFnYWluLCB0aGUgQVNDT05GIGNvZGUgaXMg
YSBiaXQgZGlmZmVyZW50IGluIHRoYXQgaXQgZG9lcyBsb2NrCisJICogdGhlIElOUCBkdXJpbmcg
aXRzIHdvcmsgb2Z0ZW4gdGltZXMuIFRoaXMgbXVzdCBiZSBzaW5jZSB3ZSBkb24ndAorCSAqIHdh
bnQgb3RoZXIgcHJvYydzIGxvb2tpbmcgdXAgdGhpbmdzIHdoaWxlIHdoYXQgdGhleSBhcmUgbG9v
a2luZworCSAqIHVwIGlzIGNoYW5naW5nIDotRAorCSAqLworCisJaW5wID0gc3RjYi0+c2N0cF9l
cDsKKwkvKiBpZiBzdWJzZXQgYm91bmQgYW5kIGRvbid0IGFsbG93IEFTQ09ORidzLCBjYW4ndCBk
ZWxldGUgbGFzdCAqLworCWlmICgoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JP
VU5EQUxMKSA9PSAwKSAmJgorCSAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfRE9fQVNDT05GKSkgeworCQlpZiAoc3RjYi0+c2N0cF9lcC0+bGFkZHJfY291bnQgPCAy
KSB7CisJCQkvKiBjYW4ndCBkZWxldGUgbGFzdCBhZGRyZXNzICovCisJCQlyZXR1cm47CisJCX0K
Kwl9CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+YXNvYy5zY3RwX3Jlc3RyaWN0ZWRfYWRk
cnMsIHNjdHBfbnh0X2FkZHIpIHsKKwkJLyogcmVtb3ZlIHRoZSBhZGRyZXNzIGlmIGl0IGV4aXN0
cyAqLworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChsYWRk
ci0+aWZhID09IGlmYSkgeworCQkJc2N0cF9yZW1vdmVfbGFkZHIobGFkZHIpOworCQkJcmV0dXJu
OworCQl9CisJfQorCisJLyogYWRkcmVzcyBub3QgZm91bmQhICovCisJcmV0dXJuOworfQorCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKy8qCisgKiBUZW1wb3JhcmlseSByZW1vdmUgZm9yIF9f
QVBQTEVfXyB1bnRpbCB3ZSB1c2UgdGhlIFRpZ2VyIGVxdWl2YWxlbnRzCisgKi8KKy8qIHN5c2N0
bCAqLworc3RhdGljIGludCBzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgPSBTQ1RQX01BWF9OVU1f
T0ZfQVNPQzsKK3N0YXRpYyBpbnQgc2N0cF9zY2FsZV91cF9mb3JfYWRkcmVzcyA9IFNDVFBfU0NB
TEVfRk9SX0FERFI7CisjZW5kaWYJCQkJLyogRnJlZUJTRCB8fCBBUFBMRSAqLworCisKKworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVm
aW5lZChTTVApCitzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsICpzY3RwX21jb3JlX3dvcmtlcnMgPSBO
VUxMOworaW50ICpzY3RwX2NwdWFycnkgPSBOVUxMOwordm9pZAorc2N0cF9xdWV1ZV90b19tY29y
ZShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZiwgaW50IGNwdV90b191c2UpCit7CisJLyogUXVldWUg
YSBwYWNrZXQgdG8gYSBwcm9jZXNzb3IgZm9yIHRoZSBzcGVjaWZpZWQgY29yZSAqLworCXN0cnVj
dCBzY3RwX21jb3JlX3F1ZXVlICpxZW50OworCXN0cnVjdCBzY3RwX21jb3JlX2N0cmwgKndrcTsK
KwlpbnQgbmVlZF93YWtlID0gMDsKKwlpZiAoc2N0cF9tY29yZV93b3JrZXJzID09IE5VTEwpIHsK
KwkJLyogU29tZXRoaW5nIHdlbnQgd2F5IGJhZCBkdXJpbmcgc2V0dXAgKi8KKwkJc2N0cF9pbnB1
dF93aXRoX3BvcnQobSwgb2ZmLCAwKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX01BTExPQyhxZW50
LCBzdHJ1Y3Qgc2N0cF9tY29yZV9xdWV1ZSAqLAorCQkgICAgKHNpemVvZihzdHJ1Y3Qgc2N0cF9t
Y29yZV9xdWV1ZSkpLAorCQkgICAgU0NUUF9NX01DT1JFKTsKKwlpZiAocWVudCA9PSBOVUxMKSB7
CisJCS8qIFRoaXMgaXMgdHJvdWJsZSAgKi8KKwkJc2N0cF9pbnB1dF93aXRoX3BvcnQobSwgb2Zm
LCAwKTsKKwkJcmV0dXJuOworCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlxZW50LT52biA9IGN1cnZuZXQ7CisjZW5kaWYKKwlxZW50
LT5tID0gbTsKKwlxZW50LT5vZmYgPSBvZmY7CisJcWVudC0+djYgPSAwOworCXdrcSA9ICZzY3Rw
X21jb3JlX3dvcmtlcnNbY3B1X3RvX3VzZV07CisJU0NUUF9NQ09SRV9RTE9DSyh3a3EpOworCisJ
VEFJTFFfSU5TRVJUX1RBSUwoJndrcS0+cXVlLCBxZW50LCBuZXh0KTsKKwlpZiAod2txLT5ydW5u
aW5nID09IDApIHsKKwkJbmVlZF93YWtlID0gMTsKKwl9CisJU0NUUF9NQ09SRV9RVU5MT0NLKHdr
cSk7CisJaWYgKG5lZWRfd2FrZSkgeworCQl3YWtldXAoJndrcS0+cnVubmluZyk7CisJfQorfQor
CitzdGF0aWMgdm9pZAorc2N0cF9tY29yZV90aHJlYWQodm9pZCAqYXJnKQoreworCisJc3RydWN0
IHNjdHBfbWNvcmVfY3RybCAqd2txOworCXN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlICpxZW50Owor
CisJd2txID0gKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwgKilhcmc7CisJc3RydWN0IG1idWYgKm07
CisJaW50IG9mZiwgdjY7CisKKwkvKiBXYWl0IGZvciBmaXJzdCB0aWNrbGUgKi8KKwlTQ1RQX01D
T1JFX0xPQ0sod2txKTsKKwl3a3EtPnJ1bm5pbmcgPSAwOworCW1zbGVlcCgmd2txLT5ydW5uaW5n
LAorCSAgICAgICAmd2txLT5jb3JlX210eCwKKwkgICAgICAgMCwgIndhaXQgZm9yIHBrdCIsIDAp
OworCVNDVFBfTUNPUkVfVU5MT0NLKHdrcSk7CisKKwkvKiBCaW5kIHRvIG91ciBjcHUgKi8KKwl0
aHJlYWRfbG9jayhjdXJ0aHJlYWQpOworCXNjaGVkX2JpbmQoY3VydGhyZWFkLCB3a3EtPmNwdWlk
KTsKKwl0aHJlYWRfdW5sb2NrKGN1cnRocmVhZCk7CisKKwkvKiBOb3cgbGV0cyBzdGFydCB3b3Jr
aW5nICovCisJU0NUUF9NQ09SRV9MT0NLKHdrcSk7CisJLyogTm93IGdyYWIgbG9jayBhbmQgZ28g
Ki8KKwlmb3IgKDs7KSB7CisJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsKKwlza2lwX3NsZWVwOgor
CQl3a3EtPnJ1bm5pbmcgPSAxOworCQlxZW50ID0gVEFJTFFfRklSU1QoJndrcS0+cXVlKTsKKwkJ
aWYgKHFlbnQpIHsKKwkJCVRBSUxRX1JFTU9WRSgmd2txLT5xdWUsIHFlbnQsIG5leHQpOworCQkJ
U0NUUF9NQ09SRV9RVU5MT0NLKHdrcSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlDVVJWTkVUX1NFVChxZW50LT52bik7CisjZW5k
aWYKKwkJCW0gPSBxZW50LT5tOworCQkJb2ZmID0gcWVudC0+b2ZmOworCQkJdjYgPSBxZW50LT52
NjsKKwkJCVNDVFBfRlJFRShxZW50LCBTQ1RQX01fTUNPUkUpOworCQkJaWYgKHY2ID09IDApIHsK
KwkJCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOworCQkJfSBlbHNlIHsKKwkJCQlT
Q1RQX1BSSU5URigiVjYgbm90IHlldCBzdXBwb3J0ZWRcbiIpOworCQkJCXNjdHBfbV9mcmVlbSht
KTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDEwMDAKKwkJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCQlTQ1RQX01DT1JFX1FM
T0NLKHdrcSk7CisJCX0KKwkJd2txLT5ydW5uaW5nID0gMDsKKwkJaWYgKCFUQUlMUV9FTVBUWSgm
d2txLT5xdWUpKSB7CisJCQlnb3RvIHNraXBfc2xlZXA7CisJCX0KKwkJU0NUUF9NQ09SRV9RVU5M
T0NLKHdrcSk7CisJCW1zbGVlcCgmd2txLT5ydW5uaW5nLAorCQkgICAgICAgJndrcS0+Y29yZV9t
dHgsCisJCSAgICAgICAwLCAid2FpdCBmb3IgcGt0IiwgMCk7CisJfQorfQorCitzdGF0aWMgdm9p
ZAorc2N0cF9zdGFydHVwX21jb3JlX3RocmVhZHModm9pZCkKK3sKKwlpbnQgaSwgY3B1OworCisJ
aWYgKG1wX25jcHVzID09IDEpCisJCXJldHVybjsKKworCWlmIChzY3RwX21jb3JlX3dvcmtlcnMg
IT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IGJlZW4gaGVyZSBpbiBzb21lIHByZXZpb3VzCisJCSAq
IHZuZXQ/CisJCSAqLworCQlyZXR1cm47CisJfQorCVNDVFBfTUFMTE9DKHNjdHBfbWNvcmVfd29y
a2Vycywgc3RydWN0IHNjdHBfbWNvcmVfY3RybCAqLAorCQkgICAgKChtcF9tYXhpZCsxKSAqIHNp
emVvZihzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsKSksCisJCSAgICBTQ1RQX01fTUNPUkUpOworCWlm
IChzY3RwX21jb3JlX3dvcmtlcnMgPT0gTlVMTCkgeworCQkvKiBUU05IIEkgaG9wZSAqLworCQly
ZXR1cm47CisJfQorCW1lbXNldChzY3RwX21jb3JlX3dvcmtlcnMsIDAgLCAoKG1wX21heGlkKzEp
ICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwpKSk7CisJLyogSW5pdCB0aGUg
c3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGk8PW1wX21heGlkOyBpKyspIHsKKwkJVEFJTFFf
SU5JVCgmc2N0cF9tY29yZV93b3JrZXJzW2ldLnF1ZSk7CisJCVNDVFBfTUNPUkVfTE9DS19JTklU
KCZzY3RwX21jb3JlX3dvcmtlcnNbaV0pOworCQlTQ1RQX01DT1JFX1FMT0NLX0lOSVQoJnNjdHBf
bWNvcmVfd29ya2Vyc1tpXSk7CisJCXNjdHBfbWNvcmVfd29ya2Vyc1tpXS5jcHVpZCA9IGk7CisJ
fQorCWlmIChzY3RwX2NwdWFycnkgPT0gTlVMTCkgeworCQlTQ1RQX01BTExPQyhzY3RwX2NwdWFy
cnksIGludCAqLAorCQkJICAgIChtcF9uY3B1cyAqIHNpemVvZihpbnQpKSwKKwkJCSAgICBTQ1RQ
X01fTUNPUkUpOworCQlpID0gMDsKKwkJQ1BVX0ZPUkVBQ0goY3B1KSB7CisJCQlzY3RwX2NwdWFy
cnlbaV0gPSBjcHU7CisJCQlpKys7CisJCX0KKwl9CisKKwkvKiBOb3cgc3RhcnQgdGhlbSBhbGwg
Ki8KKwlDUFVfRk9SRUFDSChjcHUpIHsKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA3MDEwMDAK
KwkJKHZvaWQpa3RocmVhZF9jcmVhdGUoc2N0cF9tY29yZV90aHJlYWQsCisJCQkJICAgICAodm9p
ZCAqKSZzY3RwX21jb3JlX3dvcmtlcnNbY3B1XSwKKwkJCQkgICAgICZzY3RwX21jb3JlX3dvcmtl
cnNbY3B1XS50aHJlYWRfcHJvYywKKwkJCQkgICAgIFJGUFJPQywKKwkJCQkgICAgIFNDVFBfS1RI
UkVBRF9QQUdFUywKKwkJCQkgICAgIFNDVFBfTUNPUkVfTkFNRSk7CisKKyNlbHNlCisJCSh2b2lk
KWtwcm9jX2NyZWF0ZShzY3RwX21jb3JlX3RocmVhZCwKKwkJCQkgICAodm9pZCAqKSZzY3RwX21j
b3JlX3dvcmtlcnNbY3B1XSwKKwkJCQkgICAmc2N0cF9tY29yZV93b3JrZXJzW2NwdV0udGhyZWFk
X3Byb2MsCisJCQkJICAgUkZQUk9DLAorCQkJCSAgIFNDVFBfS1RIUkVBRF9QQUdFUywKKwkJCQkg
ICBTQ1RQX01DT1JFX05BTUUpOworI2VuZGlmCisKKwl9Cit9CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfY2NfdmVyc2lvbiA+PSAxMzAwMDAwCitzdGF0aWMg
c3RydWN0IG1idWYgKgorc2N0cF9uZXRpc3JfaGRscihzdHJ1Y3QgbWJ1ZiAqbSwgdWludHB0cl90
IHNvdXJjZSkKK3sKKwlzdHJ1Y3QgaXAgKmlwOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwlpbnQg
b2Zmc2V0OworCXVpbnQzMl90IGZsb3dpZCwgdGFnOworCisJLyoKKwkgKiBObyBmbG93IGlkIGJ1
aWx0IGJ5IGxvd2VyIGxheWVycyBmaXggaXQgc28gd2UKKwkgKiBjcmVhdGUgb25lLgorCSAqLwor
CWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJb2Zmc2V0ID0gKGlwLT5pcF9obCA8PCAyKSAr
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJaWYgKFNDVFBfQlVGX0xFTihtKSA8IG9mZnNldCkg
eworCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpcCA9IG10
b2QobSwgc3RydWN0IGlwICopOworCX0KKwlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJf
dClpcCArIChpcC0+aXBfaGwgPDwgMikpOworCXRhZyA9IGh0b25sKHNoLT52X3RhZyk7CisJZmxv
d2lkID0gdGFnIF4gbnRvaHMoc2gtPmRlc3RfcG9ydCkgXiBudG9ocyhzaC0+c3JjX3BvcnQpOwor
CW0tPm1fcGt0aGRyLmZsb3dpZCA9IGZsb3dpZDsKKy8qIEZJWCBNRSAqLworCW0tPm1fZmxhZ3Mg
fD0gTV9GTE9XSUQ7CisJcmV0dXJuIChtKTsKK30KKyNlbmRpZgorCit2b2lkCitzY3RwX3BjYl9p
bml0KCkKK3sKKwkvKgorCSAqIFNDVFAgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBQQ0Igc3RydWN0
dXJlcyBzaG91bGQgYmUgY2FsbGVkIGJ5CisJICogdGhlIHNjdHBfaW5pdCgpIGZ1bmN0aW9uLgor
CSAqLworCWludCBpOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJaWYgKFNDVFBfQkFTRV9WQVIo
c2N0cF9wY2JfaW5pdGlhbGl6ZWQpICE9IDApIHsKKwkJLyogZXJyb3IgSSB3YXMgY2FsbGVkIHR3
aWNlICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXpl
ZCkgPSAxOworCisjaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisjaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZT
Q1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7CisjaWZkZWYgSU5WQVJJQU5UUworCXB0aHJlYWRfbXV0
ZXhhdHRyX3NldHR5cGUoJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIpLCBQVEhSRUFEX01VVEVYX0VS
Uk9SQ0hFQ0spOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoU0NUUF9MT0NB
TF9UUkFDRV9CVUYpCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZykgIT0gTlVMTCkgeworCQltZW1zZXQoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZyksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsKKwl9CisjZWxzZQorCW1lbXNldCgm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsK
KyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTTVAp
ICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisJU0NUUF9NQUxMT0MoU0NUUF9CQVNF
X1NUQVRTLCBzdHJ1Y3Qgc2N0cHN0YXQgKiwKKwkJICAgICgobXBfbWF4aWQrMSkgKiBzaXplb2Yo
c3RydWN0IHNjdHBzdGF0KSksCisJCSAgICBTQ1RQX01fTUNPUkUpOworI2VuZGlmCisJKHZvaWQp
U0NUUF9HRVRUSU1FX1RJTUVWQUwoJnR2KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBk
ZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RBVCkKKwltZW1zZXQoU0NU
UF9CQVNFX1NUQVRTLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSAqIChtcF9tYXhpZCsxKSk7
CisJU0NUUF9CQVNFX1NUQVRTW1BDUFVfR0VUKGNwdWlkKV0uc2N0cHNfZGlzY29udGludWl0eXRp
bWUudHZfc2VjID0gKHVpbnQzMl90KXR2LnR2X3NlYzsKKwlTQ1RQX0JBU0VfU1RBVFNbUENQVV9H
RVQoY3B1aWQpXS5zY3Rwc19kaXNjb250aW51aXR5dGltZS50dl91c2VjID0gKHVpbnQzMl90KXR2
LnR2X3VzZWM7CisjZWxzZQorCW1lbXNldCgmU0NUUF9CQVNFX1NUQVRTLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBzdGF0KSk7CisJU0NUUF9CQVNFX1NUQVQoc2N0cHNfZGlzY29udGludWl0eXRpbWUp
LnR2X3NlYyA9ICh1aW50MzJfdCl0di50dl9zZWM7CisJU0NUUF9CQVNFX1NUQVQoc2N0cHNfZGlz
Y29udGludWl0eXRpbWUpLnR2X3VzZWMgPSAodWludDMyX3QpdHYudHZfdXNlYzsKKyNlbmRpZgor
CS8qIGluaXQgdGhlIGVtcHR5IGxpc3Qgb2YgKEFsbCkgRW5kcG9pbnRzICovCisJTElTVF9JTklU
KCZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCkpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCUxJ
U1RfSU5JVCgmU0NUUF9CQVNFX0lORk8oaW5wbGlzdGhlYWQpKTsKKyNpZiBkZWZpbmVkKEFQUExF
X0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVf
TElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJU0NUUF9CQVNFX0lORk8oc2N0
YmluZm8pLmxpc3RoZWFkID0gJlNDVFBfQkFTRV9JTkZPKGlucGxpc3RoZWFkKTsKKwlTQ1RQX0JB
U0VfSU5GTyhzY3RiaW5mbykubXR4X2dycF9hdHRyID0gbGNrX2dycF9hdHRyX2FsbG9jX2luaXQo
KTsKKwlsY2tfZ3JwX2F0dHJfc2V0ZGVmYXVsdChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4
X2dycF9hdHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCA9IGxja19ncnBf
YWxsb2NfaW5pdCgic2N0cHBjYiIsIFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0
dHIpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfYXR0ciA9IGxja19hdHRyX2FsbG9j
X2luaXQoKTsKKwlsY2tfYXR0cl9zZXRkZWZhdWx0KFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5t
dHhfYXR0cik7CisjZWxzZQorCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbGlzdGhlYWQg
PSAmU0NUUF9CQVNFX0lORk8oaW5wbGlzdGhlYWQpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5pcGlfbG9ja19ncnBfYXR0ciA9IGxja19ncnBfYXR0cl9hbGxvY19pbml0KCk7CisJbGNrX2dy
cF9hdHRyX3NldGRlZmF1bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycF9h
dHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwID0gbGNrX2dycF9h
bGxvY19pbml0KCJzY3RwcGNiIiwgU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dy
cF9hdHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfYXR0ciA9IGxja19h
dHRyX2FsbG9jX2luaXQoKTsKKwlsY2tfYXR0cl9zZXRkZWZhdWx0KFNDVFBfQkFTRV9JTkZPKHNj
dGJpbmZvKS5pcGlfbG9ja19hdHRyKTsKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFQUExFX0xFT1BB
UkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9MSU9O
KSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJU0NUUF9CQVNFX0lORk8oc2N0Ymlu
Zm8pLmlwaV9nYyA9IHNjdHBfZ2M7CisJaW5fcGNiaW5mb19hdHRhY2goJlNDVFBfQkFTRV9JTkZP
KHNjdGJpbmZvKSk7CisjZW5kaWYKKyNlbmRpZgorCisKKwkvKiBpbml0IHRoZSBoYXNoIHRhYmxl
IG9mIGVuZHBvaW50cyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfY2NfdmVyc2lvbikgJiYgX19GcmVlQlNEX2NjX3ZlcnNpb24gPj0gNDQwMDAwCisJ
VFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAudGNiaGFzaHNpemUiLCAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSk7CisJVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0
LnNjdHAucGNiaGFzaHNpemUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpKTsK
KwlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5jaHVua3NjYWxlIiwgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSk7CisjZWxzZQorCVRVTkFCTEVfSU5UX0ZFVENIKCJu
ZXQuaW5ldC5zY3RwLnRjYmhhc2hzaXplIiwgU0NUUF9UQ0JIQVNIU0laRSwKKwkJCSAgU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSk7CisJVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5p
bmV0LnNjdHAucGNiaGFzaHNpemUiLCBTQ1RQX1BDQkhBU0hTSVpFLAorCQkJICBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSkpOworCVRVTkFCTEVfSU5UX0ZFVENIKCJuZXQuaW5ldC5z
Y3RwLmNodW5rc2NhbGUiLCBTQ1RQX0NIVU5LUVVFVUVfU0NBTEUsCisJCQkgIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jaHVua3NjYWxlKSk7CisjZW5kaWYKKyNlbmRpZgorCVNDVFBfQkFTRV9JTkZP
KHNjdHBfYXNvY2hhc2gpID0gU0NUUF9IQVNIX0lOSVQoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9o
YXNodGJsc2l6ZSkgKiAzMSksCisJCQkJCQkgICAgICAgJlNDVFBfQkFTRV9JTkZPKGhhc2hhc29j
bWFyaykpOworCVNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKSA9IFNDVFBfSEFTSF9JTklUKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksCisJCQkJCQkgICAgICZTQ1RQX0JBU0Vf
SU5GTyhoYXNobWFyaykpOworCVNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKSA9IFNDVFBf
SEFTSF9JTklUKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksCisJCQkJCQkJJlND
VFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSk7CisJU0NUUF9CQVNFX0lORk8oaGFzaHRibHNpemUp
ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKTsKKworCisJU0NUUF9CQVNFX0lO
Rk8oc2N0cF92cmZoYXNoKSA9IFNDVFBfSEFTSF9JTklUKFNDVFBfU0laRV9PRl9WUkZfSEFTSCwK
KwkJCQkJCSAgICAgICZTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpOworCisJU0NUUF9CQVNF
X0lORk8odnJmX2lmbl9oYXNoKSA9IFNDVFBfSEFTSF9JTklUKFNDVFBfVlJGX0lGTl9IQVNIX1NJ
WkUsCisJCQkJCQkgICAgICAmU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNobWFyaykpOworCS8q
IGluaXQgdGhlIHpvbmVzICovCisJLyoKKwkgKiBGSVggTUU6IFNob3VsZCBjaGVjayBmb3IgTlVM
TCByZXR1cm5zLCBidXQgaWYgaXQgZG9lcyBmYWlsIHdlIGFyZQorCSAqIGRvb21lZCB0byBwYW5p
YyBhbnl3YXlzLi4uIGFkZCBsYXRlciBtYXliZS4KKwkgKi8KKwlTQ1RQX1pPTkVfSU5JVChTQ1RQ
X0JBU0VfSU5GTyhpcGlfem9uZV9lcCksICJzY3RwX2VwIiwKKwkJICAgICAgIHNpemVvZihzdHJ1
Y3Qgc2N0cF9pbnBjYiksIG1heHNvY2tldHMpOworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfYXNvYyksICJzY3RwX2Fzb2MiLAorCQkgICAgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3RjYiksIHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyk7CisKKwlTQ1RQX1pPTkVfSU5J
VChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksICJzY3RwX2xhZGRyIiwKKwkJICAgICAg
IHNpemVvZihzdHJ1Y3Qgc2N0cF9sYWRkciksCisJCSAgICAgICAoc2N0cF9tYXhfbnVtYmVyX29m
X2Fzc29jICogc2N0cF9zY2FsZV91cF9mb3JfYWRkcmVzcykpOworCisJU0NUUF9aT05FX0lOSVQo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbmV0KSwgInNjdHBfcmFkZHIiLAorCQkgICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX25ldHMpLAorCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3Nv
YyAqIHNjdHBfc2NhbGVfdXBfZm9yX2FkZHJlc3MpKTsKKworCVNDVFBfWk9ORV9JTklUKFNDVFBf
QkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgInNjdHBfY2h1bmsiLAorCQkgICAgICAgc2l6ZW9m
KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmspLAorCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9h
c3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkpOworCisJU0NUUF9aT05F
X0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCAic2N0cF9yZWFkcSIsCisJCSAg
ICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpLAorCQkgICAgICAgKHNjdHBf
bWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkp
OworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfc3RybW9xKSwgInNj
dHBfc3RyZWFtX21zZ19vdXQiLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9x
dWV1ZV9wZW5kaW5nKSwKKwkJICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsKKworCVNDVFBfWk9ORV9JTklUKFNDVFBf
QkFTRV9JTkZPKGlwaV96b25lX2FzY29uZiksICJzY3RwX2FzY29uZiIsCisJCSAgICAgICBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNjb25mKSwKKwkJICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNz
b2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsKKworCVNDVFBfWk9ORV9J
TklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZl9hY2spLCAic2N0cF9hc2NvbmZfYWNr
IiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrKSwKKwkJICAgICAgIChz
Y3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2Fs
ZSkpKTsKKworCisJLyogTWFzdGVyIExvY2sgSU5JVCBmb3IgaW5mbyBzdHJ1Y3R1cmUgKi8KKwlT
Q1RQX0lOUF9JTkZPX0xPQ0tfSU5JVCgpOworCVNDVFBfU1RBVExPR19JTklUX0xPQ0soKTsKKwor
CVNDVFBfSVBJX0NPVU5UX0lOSVQoKTsKKwlTQ1RQX0lQSV9BRERSX0lOSVQoKTsKKyNpZmRlZiBT
Q1RQX1BBQ0tFVF9MT0dHSU5HCisJU0NUUF9JUF9QS1RMT0dfSU5JVCgpOworI2VuZGlmCisJTElT
VF9JTklUKCZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSk7CisKKwlTQ1RQX1dRX0FERFJfSU5JVCgp
OworCS8qIG5vdCBzdXJlIGlmIHdlIG5lZWQgYWxsIHRoZSBjb3VudHMgKi8KKwlTQ1RQX0JBU0Vf
SU5GTyhpcGlfY291bnRfZXApID0gMDsKKwkvKiBhc3NvYy90Y2Igem9uZSBpbmZvICovCisJU0NU
UF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpID0gMDsKKwkvKiBsb2NhbCBhZGRybGlzdCB6b25l
IGluZm8gKi8KKwlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfbGFkZHIpID0gMDsKKwkvKiByZW1v
dGUgYWRkcmxpc3Qgem9uZSBpbmZvICovCisJU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JhZGRy
KSA9IDA7CisJLyogY2h1bmsgaW5mbyAqLworCVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVu
aykgPSAwOworCisJLyogc29ja2V0IHF1ZXVlIHpvbmUgaW5mbyAqLworCVNDVFBfQkFTRV9JTkZP
KGlwaV9jb3VudF9yZWFkcSkgPSAwOworCisJLyogc3RyZWFtIG91dCBxdWV1ZSBjb250ICovCisJ
U0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3N0cm1vcSkgPSAwOworCisJU0NUUF9CQVNFX0lORk8o
aXBpX2ZyZWVfc3RybW9xKSA9IDA7CisJU0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKSA9
IDA7CisKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3FfdGltZXIu
dGltZXIpKTsKKworCS8qIEluaXQgdGhlIFRJTUVXQUlUIGxpc3QgKi8KKwlmb3IgKGkgPSAwOyBp
IDwgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRTsgaSsrKSB7CisJCUxJU1RfSU5JVCgmU0NUUF9C
QVNFX0lORk8odnRhZ190aW1ld2FpdClbaV0pOworCX0KKyNpZiBkZWZpbmVkKFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUykKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJSW5p
dGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXApOwor
I2Vsc2UKKwkodm9pZClwdGhyZWFkX2NvbmRfaW5pdCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2Fr
ZXVwLCBOVUxMKTsKKyNlbmRpZgorI2VuZGlmCisJc2N0cF9zdGFydHVwX2l0ZXJhdG9yKCk7CisK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNDVFBfTUNPUkVfSU5QVVQpICYm
IGRlZmluZWQoU01QKQorCXNjdHBfc3RhcnR1cF9tY29yZV90aHJlYWRzKCk7CisjZW5kaWYKKwor
I2lmbmRlZiBfX1BhbmRhX18KKwkvKgorCSAqIElOSVQgdGhlIGRlZmF1bHQgVlJGIHdoaWNoIGZv
ciBCU0QgaXMgdGhlIG9ubHkgb25lLCBvdGhlciBPL1MncworCSAqIG1heSBoYXZlIG1vcmUuIEJ1
dCBpbml0aWFsbHkgdGhleSBtdXN0IHN0YXJ0IHdpdGggb25lIGFuZCB0aGVuCisJICogYWRkIHRo
ZSBWUkYncyBhcyBhZGRyZXNzZXMgYXJlIGFkZGVkLgorCSAqLworCXNjdHBfaW5pdF92cmZfbGlz
dChTQ1RQX0RFRkFVTFRfVlJGKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF9jY192ZXJzaW9uID49IDEzMDAwMDAKKwlpZiAoaXBfcmVnaXN0ZXJfZmxvd19o
YW5kbGVyKHNjdHBfbmV0aXNyX2hkbHIsIElQUFJPVE9fU0NUUCkpIHsKKwkJU0NUUF9QUklOVEYo
IioqKlNDVFAtIEVycm9yIGNhbid0IHJlZ2lzdGVyIG5ldGlzciBoYW5kbGVyKioqXG4iKTsKKwl9
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9TQ1RQX05FRURTX0NBTExPVVRfKSB8fCBkZWZpbmVkKF9V
U0VSX1NDVFBfTkVFRFNfQ0FMTE9VVF8pCisJLyogYWxsb2NhdGUgdGhlIGxvY2sgZm9yIHRoZSBj
YWxsb3V0L3RpbWVyIHF1ZXVlICovCisJU0NUUF9USU1FUlFfTE9DS19JTklUKCk7CisJVEFJTFFf
SU5JVCgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJbWJ1Zl9pbml0aWFsaXplKE5VTEwpOworI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKKwlyZWN2X3RocmVhZF9pbml0KCk7CisjZW5kaWYKKyNlbmRpZgor
fQorCisvKgorICogQXNzdW1lcyB0aGF0IHRoZSBTQ1RQX0JBU0VfSU5GTygpIGxvY2sgaXMgTk9U
IGhlbGQuCisgKi8KK3ZvaWQKK3NjdHBfcGNiX2ZpbmlzaCh2b2lkKQoreworCXN0cnVjdCBzY3Rw
X3ZyZmxpc3QgKnZyZl9idWNrZXQ7CisJc3RydWN0IHNjdHBfdnJmICp2cmYsICpudnJmOworCXN0
cnVjdCBzY3RwX2lmbiAqaWZuLCAqbmlmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSwgKm5pZmE7
CisJc3RydWN0IHNjdHB2dGFnaGVhZCAqY2hhaW47CisJc3RydWN0IHNjdHBfdGFnYmxvY2sgKnR3
YWl0X2Jsb2NrLCAqcHJldl90d2FpdF9ibG9jazsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqd2ksICpu
d2k7CisJaW50IGk7CisJc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0LCAqbml0OworCisJaWYgKFND
VFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKKwkJU0NUUF9QUklOVEYo
IiVzOiByYWNlIGNvbmRpdGlvbiBvbiB0ZWFyZG93bi5cbiIsIF9fZnVuY19fKTsKKwkJcmV0dXJu
OworCX0KKwlTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9IDA7CisjaWYgIWRl
ZmluZWQoX19GcmVlQlNEX18pCisJLyogTm90aWZ5IHRoZSBpdGVyYXRvciB0byBleGl0LiAqLwor
CVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFn
cyB8PSBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVDsKKwlzY3RwX3dha2V1cF9pdGVyYXRvcigpOwor
CVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05P
V0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5U
QUlOTElPTikKKwlpbl9wY2JpbmZvX2RldGFjaCgmU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pKTsK
KyNlbmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwlkbyB7CisJCW1zbGVlcCgm
c2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MsCisJCSAgICAgICBzY3RwX2l0X2N0bC5pcGlfaXRl
cmF0b3Jfd3FfbXR4LAorCQkgICAgICAgMCwgIndhaXRpbmdfZm9yX3dvcmsiLCAwKTsKKwl9IHdo
aWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX0VYSVRFRCkg
PT0gMCk7CisJdGhyZWFkX2RlYWxsb2NhdGUoc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MpOworCVND
VFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1dpbmRv
d3NfXykKKwlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfdGhyZWFkX29iaiAhPSBOVUxMKSB7CisJ
CU5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJCUtlU2V0RXZlbnQoJnNjdHBf
aXRfY3RsLml0ZXJhdG9yX3dha2V1cFsxXSwgSU9fTk9fSU5DUkVNRU5ULCBGQUxTRSk7CisJCXN0
YXR1cyA9IEtlV2FpdEZvclNpbmdsZU9iamVjdChzY3RwX2l0X2N0bC5pdGVyYXRvcl90aHJlYWRf
b2JqLAorCQkJCQkgICAgICAgRXhlY3V0aXZlLAorCQkJCQkgICAgICAgS2VybmVsTW9kZSwKKwkJ
CQkJICAgICAgIEZBTFNFLAorCQkJCQkgICAgICAgTlVMTCk7CisJCU9iRGVyZWZlcmVuY2VPYmpl
Y3Qoc2N0cF9pdF9jdGwuaXRlcmF0b3JfdGhyZWFkX29iaik7CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChzY3RwX2l0X2N0bC50aHJlYWRfcHJvYykgeworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJV2FpdEZvclNpbmdsZU9iamVjdChz
Y3RwX2l0X2N0bC50aHJlYWRfcHJvYywgSU5GSU5JVEUpOworCQlDbG9zZUhhbmRsZShzY3RwX2l0
X2N0bC50aHJlYWRfcHJvYyk7CisJCXNjdHBfaXRfY3RsLnRocmVhZF9wcm9jID0gTlVMTDsKKyNl
bHNlCisJCXB0aHJlYWRfam9pbihzY3RwX2l0X2N0bC50aHJlYWRfcHJvYywgTlVMTCk7CisJCXNj
dHBfaXRfY3RsLnRocmVhZF9wcm9jID0gMDsKKyNlbmRpZgorCX0KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKwlEZWxldGVDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
d2FrZXVwKTsKKyNlbHNlCisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnNjdHBfaXRfY3RsLml0ZXJh
dG9yX3dha2V1cCk7CisJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmU0NUUF9CQVNFX1ZBUiht
dHhfYXR0cikpOworI2VuZGlmCisjZW5kaWYKKwkvKiBJbiBGcmVlQlNEIHRoZSBpdGVyYXRvciB0
aHJlYWQgbmV2ZXIgZXhpdHMKKwkgKiBidXQgd2UgZG8gY2xlYW4gdXAuCisJICogVGhlIG9ubHkg
d2F5IEZyZWVCU0QgcmVhY2hlcyBoZXJlIGlzIGlmIHdlIGhhdmUgVlJGJ3MKKwkgKiBidXQgd2Ug
c3RpbGwgYWRkIHRoZSBpZmRlZiB0byBtYWtlIGl0IGNvbXBpbGUgb24gb2xkIHZlcnNpb25zLgor
CSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCityZXRyeToKKyNlbmRpZgorCVNDVFBfSVBJ
X0lURVJBVE9SX1dRX0xPQ0soKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCS8qCisJICog
c2N0cF9pdGVyYXRvcl93b3JrZXIoKSBtaWdodCBiZSB3b3JraW5nIG9uIGFuIGl0IGVudHJ5IHdp
dGhvdXQKKwkgKiBob2xkaW5nIHRoZSBsb2NrLiAgV2Ugd29uJ3QgZmluZCBpdCBvbiB0aGUgbGlz
dCBlaXRoZXIgYW5kCisJICogY29udGludWUgYW5kIGZyZWUvZGVzdHJveSBpdC4gIFdoaWxlIGhv
bGRpbmcgdGhlIGxvY2ssIHNwaW4sIHRvCisJICogYXZvaWQgdGhlIHJhY2UgY29uZGl0aW9uIGFz
IHNjdHBfaXRlcmF0b3Jfd29ya2VyKCkgd2lsbCBoYXZlIHRvCisJICogd2FpdCB0byByZS1hcXVp
cmUgdGhlIGxvY2suCisJICovCisJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcgIT0g
MCB8fCBzY3RwX2l0X2N0bC5jdXJfaXQgIT0gTlVMTCkgeworCQlTQ1RQX0lQSV9JVEVSQVRPUl9X
UV9VTkxPQ0soKTsKKwkJU0NUUF9QUklOVEYoIiVzOiBJdGVyYXRvciBydW5uaW5nIHdoaWxlIHdl
IGhlbGQgdGhlIGxvY2suIFJldHJ5LiAiCisJCSAgICAgICAgICAgICJjdXJfaXQ9JXBcbiIsIF9f
ZnVuY19fLCBzY3RwX2l0X2N0bC5jdXJfaXQpOworCQlERUxBWSgxMCk7CisJCWdvdG8gcmV0cnk7
CisJfQorI2VuZGlmCisJVEFJTFFfRk9SRUFDSF9TQUZFKGl0LCAmc2N0cF9pdF9jdGwuaXRlcmF0
b3JoZWFkLCBzY3RwX254dF9pdHIsIG5pdCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorCQlpZiAoaXQtPnZuICE9IGN1cnZuZXQpIHsK
KwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJVEFJTFFfUkVNT1ZFKCZzY3RwX2l0X2N0bC5p
dGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCQlpZiAoaXQtPmZ1bmN0aW9uX2F0ZW5k
ICE9IE5VTEwpIHsKKwkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQtPnBvaW50ZXIsIGl0LT52
YWwpOworCQl9CisJCVNDVFBfRlJFRShpdCxTQ1RQX01fSVRFUik7CisJfQorCVNDVFBfSVBJX0lU
RVJBVE9SX1dRX1VOTE9DSygpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMTAwMAorCVNDVFBfSVRFUkFUT1JfTE9DSygpOworCWlmICgoc2N0cF9p
dF9jdGwuY3VyX2l0KSAmJgorCSAgICAoc2N0cF9pdF9jdGwuY3VyX2l0LT52biA9PSBjdXJ2bmV0
KSkgeworCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQX0lURVJBVE9SX1NUT1Bf
Q1VSX0lUOworCX0KKwlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOworI2VuZGlmCisjaWYgIWRlZmlu
ZWQoX19GcmVlQlNEX18pCisJU0NUUF9JUElfSVRFUkFUT1JfV1FfREVTVFJPWSgpOworCVNDVFBf
SVRFUkFUT1JfTE9DS19ERVNUUk9ZKCk7CisjZW5kaWYKKwlTQ1RQX09TX1RJTUVSX1NUT1BfRFJB
SU4oJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3FfdGltZXIudGltZXIpKTsKKwlTQ1RQX1dRX0FERFJf
TE9DSygpOworCUxJU1RfRk9SRUFDSF9TQUZFKHdpLCAmU0NUUF9CQVNFX0lORk8oYWRkcl93cSks
IHNjdHBfbnh0X2FkZHIsIG53aSkgeworCQlMSVNUX1JFTU9WRSh3aSwgc2N0cF9ueHRfYWRkcik7
CisJCVNDVFBfREVDUl9MQUREUl9DT1VOVCgpOworCQlpZiAod2ktPmFjdGlvbiA9PSBTQ1RQX0RF
TF9JUF9BRERSRVNTKSB7CisJCQlTQ1RQX0ZSRUUod2ktPmlmYSwgU0NUUF9NX0lGQSk7CisJCX0K
KwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCB3aSk7CisJ
fQorCVNDVFBfV1FfQUREUl9VTkxPQ0soKTsKKworCS8qCisJICogZnJlZSB0aGUgdnJmL2lmbi9p
ZmEgbGlzdHMgYW5kIGhhc2hlcyAoYmUgc3VyZSBhZGRyZXNzIG1vbml0b3IKKwkgKiBpcyBkZXN0
cm95ZWQgZmlyc3QpLgorCSAqLworCXZyZl9idWNrZXQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF92
cmZoYXNoKVsoU0NUUF9ERUZBVUxUX1ZSRklEICYgU0NUUF9CQVNFX0lORk8oaGFzaHZyZm1hcmsp
KV07CisJTElTVF9GT1JFQUNIX1NBRkUodnJmLCB2cmZfYnVja2V0LCBuZXh0X3ZyZiwgbnZyZikg
eworCQlMSVNUX0ZPUkVBQ0hfU0FGRShpZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuLCBuaWZu
KSB7CisJCQlMSVNUX0ZPUkVBQ0hfU0FGRShpZmEsICZpZm4tPmlmYWxpc3QsIG5leHRfaWZhLCBu
aWZhKSB7CisJCQkJLyogZnJlZSB0aGUgaWZhICovCisJCQkJTElTVF9SRU1PVkUoaWZhLCBuZXh0
X2J1Y2tldCk7CisJCQkJTElTVF9SRU1PVkUoaWZhLCBuZXh0X2lmYSk7CisJCQkJU0NUUF9GUkVF
KGlmYSwgU0NUUF9NX0lGQSk7CisJCQl9CisJCQkvKiBmcmVlIHRoZSBpZm4gKi8KKwkJCUxJU1Rf
UkVNT1ZFKGlmbiwgbmV4dF9idWNrZXQpOworCQkJTElTVF9SRU1PVkUoaWZuLCBuZXh0X2lmbik7
CisJCQlTQ1RQX0ZSRUUoaWZuLCBTQ1RQX01fSUZOKTsKKwkJfQorCQlTQ1RQX0hBU0hfRlJFRSh2
cmYtPnZyZl9hZGRyX2hhc2gsIHZyZi0+dnJmX2FkZHJfaGFzaG1hcmspOworCQkvKiBmcmVlIHRo
ZSB2cmYgKi8KKwkJTElTVF9SRU1PVkUodnJmLCBuZXh0X3ZyZik7CisJCVNDVFBfRlJFRSh2cmYs
IFNDVFBfTV9WUkYpOworCX0KKwkvKiBmcmVlIHRoZSB2cmYgaGFzaGVzICovCisJU0NUUF9IQVNI
X0ZSRUUoU0NUUF9CQVNFX0lORk8oc2N0cF92cmZoYXNoKSwgU0NUUF9CQVNFX0lORk8oaGFzaHZy
Zm1hcmspKTsKKwlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2gpLCBT
Q1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSk7CisKKwkvKiBmcmVlIHRoZSBUSU1FV0FJ
VCBsaXN0IGVsZW1lbnRzIG1hbGxvYydkIGluIHRoZSBmdW5jdGlvbgorCSAqIHNjdHBfYWRkX3Z0
YWdfdG9fdGltZXdhaXQoKS4uLgorCSAqLworCWZvciAoaSA9IDA7IGkgPCBTQ1RQX1NUQUNLX1ZU
QUdfSEFTSF9TSVpFOyBpKyspIHsKKwkJY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1l
d2FpdClbaV07CisJCWlmICghTElTVF9FTVBUWShjaGFpbikpIHsKKwkJCXByZXZfdHdhaXRfYmxv
Y2sgPSBOVUxMOworCQkJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFpbiwgc2N0cF9ueHRf
dGFnYmxvY2spIHsKKwkJCQlpZiAocHJldl90d2FpdF9ibG9jaykgeworCQkJCQlTQ1RQX0ZSRUUo
cHJldl90d2FpdF9ibG9jaywgU0NUUF9NX1RJTVcpOworCQkJCX0KKwkJCQlwcmV2X3R3YWl0X2Js
b2NrID0gdHdhaXRfYmxvY2s7CisJCQl9CisJCQlTQ1RQX0ZSRUUocHJldl90d2FpdF9ibG9jaywg
U0NUUF9NX1RJTVcpOworCQl9CisJfQorCisJLyogZnJlZSB0aGUgbG9ja3MgYW5kIG11dGV4ZXMg
Ki8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX1RJTUVSUV9MT0NLX0RFU1RST1koKTsK
KyNlbmRpZgorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwlTQ1RQX0lQX1BLVExPR19ERVNU
Uk9ZKCk7CisjZW5kaWYKKwlTQ1RQX0lQSV9BRERSX0RFU1RST1koKTsKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKwlTQ1RQX0lQSV9DT1VOVF9ERVNUUk9ZKCk7CisjZW5kaWYKKwlTQ1RQX1NUQVRM
T0dfREVTVFJPWSgpOworCVNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCk7CisKKwlTQ1RQX1dR
X0FERFJfREVTVFJPWSgpOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSB8fCBkZWZpbmVkKEFQ
UExFX0xJT04pIHx8IGRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQorCWxja19ncnBfYXR0cl9m
cmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIpOworCWxja19ncnBfZnJl
ZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCk7CisJbGNrX2F0dHJfZnJlZShTQ1RQ
X0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2F0dHIpOworI2Vsc2UKKwlsY2tfZ3JwX2F0dHJfZnJl
ZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOworCWxja19ncnBf
ZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwKTsKKwlsY2tfYXR0cl9m
cmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19hdHRyKTsKKyNlbmRpZgorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfVElNRVJRX0xPQ0tfREVTVFJP
WSgpOworCVNDVFBfWk9ORV9ERVNUUk9ZKHpvbmVfbWJ1Zik7CisJU0NUUF9aT05FX0RFU1RST1ko
em9uZV9jbHVzdCk7CisJU0NUUF9aT05FX0RFU1RST1koem9uZV9leHRfcmVmY250KTsKKyNlbmRp
ZgorCS8qIEdldCByaWQgb2Ygb3RoZXIgc3R1ZmYgdG9vLiAqLworCWlmIChTQ1RQX0JBU0VfSU5G
TyhzY3RwX2Fzb2NoYXNoKSAhPSBOVUxMKQorCQlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5G
TyhzY3RwX2Fzb2NoYXNoKSwgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSk7CisJaWYgKFND
VFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKSAhPSBOVUxMKQorCQlTQ1RQX0hBU0hfRlJFRShTQ1RQ
X0JBU0VfSU5GTyhzY3RwX2VwaGFzaCksIFNDVFBfQkFTRV9JTkZPKGhhc2htYXJrKSk7CisJaWYg
KFNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKSAhPSBOVUxMKQorCQlTQ1RQX0hBU0hfRlJF
RShTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaCksIFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3Bt
YXJrKSk7CisKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfZXApKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhp
cGlfem9uZV9hc29jKSk7CisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfbGFkZHIpKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9u
ZXQpKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVuaykp
OworCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX3JlYWRxKSk7CisJ
U0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfc3RybW9xKSk7CisJU0NU
UF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mKSk7CisJU0NUUF9a
T05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjaykpOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NU
UF9VU0VfUEVSQ1BVX1NUQVQpCisJU0NUUF9GUkVFKFNDVFBfQkFTRV9TVEFUUywgU0NUUF9NX01D
T1JFKTsKKyNlbmRpZgorfQorCisKK2ludAorc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBvZmZzZXQsIGludCBsaW1pdCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWx0c2EsIHVpbnQx
Nl90IHBvcnQpCit7CisJLyoKKwkgKiBncnViIHRocm91Z2ggdGhlIElOSVQgcHVsbGluZyBhZGRy
ZXNzZXMgYW5kIGxvYWRpbmcgdGhlbSB0byB0aGUKKwkgKiBuZXRzIHN0cnVjdHVyZSBpbiB0aGUg
YXNvYy4gVGhlIGZyb20gYWRkcmVzcyBpbiB0aGUgbWJ1ZiBzaG91bGQKKwkgKiBhbHNvIGJlIGxv
YWRlZCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLiBUaGlzIHJvdXRpbmUgY2FuIGJlIGNhbGxlZAor
CSAqIHdpdGggZWl0aGVyIElOSVQgb3IgSU5JVC1BQ0sncyBhcyBsb25nIGFzIHRoZSBtIHBvaW50
cyB0byB0aGUgSVAKKwkgKiBwYWNrZXQgYW5kIHRoZSBvZmZzZXQgcG9pbnRzIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHBhcmFtZXRlcnMuCisJICovCisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
KwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpubmV0LCAqbmV0X3RtcDsKKwlzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciAqcGhkciwgcGFyYW1fYnVmOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYl90bXA7CisJ
dWludDE2X3QgcHR5cGUsIHBsZW47CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwl1aW50OF90IHJh
bmRvbV9zdG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3Qgc2N0cF9hdXRoX3Jh
bmRvbSAqcF9yYW5kb20gPSBOVUxMOworCXVpbnQxNl90IHJhbmRvbV9sZW4gPSAwOworCXVpbnQ4
X3QgaG1hY3Nfc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJc3RydWN0IHNjdHBfYXV0
aF9obWFjX2FsZ28gKmhtYWNzID0gTlVMTDsKKwl1aW50MTZfdCBobWFjc19sZW4gPSAwOworCXVp
bnQ4X3Qgc2F3X2FzY29uZiA9IDA7CisJdWludDhfdCBzYXdfYXNjb25mX2FjayA9IDA7CisJdWlu
dDhfdCBjaHVua3Nfc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJc3RydWN0IHNjdHBf
YXV0aF9jaHVua19saXN0ICpjaHVua3MgPSBOVUxMOworCXVpbnQxNl90IG51bV9jaHVua3MgPSAw
OworCXNjdHBfa2V5X3QgKm5ld19rZXk7CisJdWludDMyX3Qga2V5bGVuOworCWludCBnb3RfcmFu
ZG9tID0gMCwgZ290X2htYWNzID0gMCwgZ290X2Noa2xpc3QgPSAwOworCXVpbnQ4X3QgcGVlcl9z
dXBwb3J0c19lY247CisJdWludDhfdCBwZWVyX3N1cHBvcnRzX3Byc2N0cDsKKwl1aW50OF90IHBl
ZXJfc3VwcG9ydHNfYXV0aDsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfYXNjb25mOworCXVpbnQ4
X3QgcGVlcl9zdXBwb3J0c19hc2NvbmZfYWNrOworCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19yZWNv
bmZpZzsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfbnJzYWNrOworCXVpbnQ4X3QgcGVlcl9zdXBw
b3J0c19wa3Rkcm9wOworCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19pZGF0YTsKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0
IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKwkvKiBGaXJzdCBnZXQgdGhlIGRlc3RpbmF0
aW9uIGFkZHJlc3Mgc2V0dXAgdG9vLiAqLworI2lmZGVmIElORVQKKwltZW1zZXQoJnNpbiwgMCwg
c2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJ
Tl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzaW4pOworI2VuZGlmCisJc2luLnNpbl9wb3J0
ID0gc3RjYi0+cnBvcnQ7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCW1lbXNldCgmc2luNiwgMCwg
c2l6ZW9mKHNpbjYpKTsKKwlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFW
RV9TSU42X0xFTgorCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
CisjZW5kaWYKKwlzaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OworI2VuZGlmCisJaWYgKGFs
dHNhKSB7CisJCXNhID0gYWx0c2E7CisJfSBlbHNlIHsKKwkJc2EgPSBzcmM7CisJfQorCXBlZXJf
c3VwcG9ydHNfaWRhdGEgPSAwOworCXBlZXJfc3VwcG9ydHNfZWNuID0gMDsKKwlwZWVyX3N1cHBv
cnRzX3Byc2N0cCA9IDA7CisJcGVlcl9zdXBwb3J0c19hdXRoID0gMDsKKwlwZWVyX3N1cHBvcnRz
X2FzY29uZiA9IDA7CisJcGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9IDA7CisJcGVlcl9zdXBwb3J0
c19ucnNhY2sgPSAwOworCXBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9IDA7CisJVEFJTFFfRk9SRUFD
SChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKiBtYXJrIGFsbCBhZGRy
ZXNzZXMgdGhhdCB3ZSBoYXZlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCAqLworCQluZXQtPmRlc3Rf
c3RhdGUgfD0gU0NUUF9BRERSX05PVF9JTl9BU1NPQzsKKwl9CisJLyogZG9lcyB0aGUgc291cmNl
IGFkZHJlc3MgYWxyZWFkeSBleGlzdD8gaWYgc28gc2tpcCBpdCAqLworCWlucCA9IHN0Y2ItPnNj
dHBfZXA7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlzdGNiX3Rt
cCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZuZXRfdG1wLCBkc3Qs
IHN0Y2IpOworCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCisJaWYg
KChzdGNiX3RtcCA9PSBOVUxMICYmIGlucCA9PSBzdGNiLT5zY3RwX2VwKSB8fCBpbnAgPT0gTlVM
TCkgeworCQkvKiB3ZSBtdXN0IGFkZCB0aGUgc291cmNlIGFkZHJlc3MgKi8KKwkJLyogbm8gc2Nv
cGUgc2V0IGhlcmUgc2luY2Ugd2UgaGF2ZSBhIHRjYiBhbHJlYWR5LiAqLworCQlzd2l0Y2ggKHNh
LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCWlmIChzdGNi
LT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgeworCQkJCWlmIChzY3RwX2FkZF9yZW1vdGVf
YWRkcihzdGNiLCBzYSwgTlVMTCwgcG9ydCwgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NUUF9MT0FE
X0FERFJfMikpIHsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJaWYgKHN0Y2ItPmFzb2Mu
c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0
Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURfQUREUl8z
KSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJaWYgKHN0Y2It
PmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9h
ZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURf
QUREUl8zKSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKyNl
bmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlpZiAobmV0X3Rt
cCAhPSBOVUxMICYmIHN0Y2JfdG1wID09IHN0Y2IpIHsKKwkJCW5ldF90bXAtPmRlc3Rfc3RhdGUg
Jj0gflNDVFBfQUREUl9OT1RfSU5fQVNTT0M7CisJCX0gZWxzZSBpZiAoc3RjYl90bXAgIT0gc3Rj
YikgeworCQkJLyogSXQgYmVsb25ncyB0byBhbm90aGVyIGFzc29jaWF0aW9uPyAqLworCQkJaWYg
KHN0Y2JfdG1wKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiX3RtcCk7CisJCQlyZXR1cm4gKC0z
KTsKKwkJfQorCX0KKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7CisJCS8qIHRoZSBhc3Nv
YyB3YXMgZnJlZWQ/ICovCisJCXJldHVybiAoLTQpOworCX0KKwkvKiBub3cgd2UgbXVzdCBnbyB0
aHJvdWdoIGVhY2ggb2YgdGhlIHBhcmFtcy4gKi8KKwlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJh
bShtLCBvZmZzZXQsICZwYXJhbV9idWYsIHNpemVvZihwYXJhbV9idWYpKTsKKwl3aGlsZSAocGhk
cikgeworCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOworCQlwbGVuID0gbnRvaHMo
cGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJLyoKKwkJICogU0NUUF9QUklOVEYoInB0eXBlID0+ICUw
eCwgcGxlbiA9PiAlZFxuIiwgKHVpbnQzMl90KXB0eXBlLAorCQkgKiAoaW50KXBsZW4pOworCQkg
Ki8KKwkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYg
KHBsZW4gPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBJTkVUCisJCWlmIChwdHlwZSA9
PSBTQ1RQX0lQVjRfQUREUkVTUykgeworCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRy
X2xlZ2FsKSB7CisJCQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKnA0LCBwNF9idWY7CisK
KwkJCQkvKiBvayBnZXQgdGhlIHY0IGFkZHJlc3MgYW5kIGNoZWNrL2FkZCAqLworCQkJCXBoZHIg
PSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkgICAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKikmcDRfYnVmLAorCQkJCQkJCSAgIHNpemVvZihwNF9idWYpKTsKKwkJCQlpZiAo
cGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pIHx8CisJCQkJICAgIHBo
ZHIgPT0gTlVMTCkgeworCQkJCQlyZXR1cm4gKC01KTsKKwkJCQl9CisJCQkJcDQgPSAoc3RydWN0
IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaGRyOworCQkJCXNpbi5zaW5fYWRkci5zX2FkZHIgPSBw
NC0+YWRkcjsKKwkJCQlpZiAoSU5fTVVMVElDQVNUKG50b2hsKHNpbi5zaW5fYWRkci5zX2FkZHIp
KSkgeworCQkJCQkvKiBTa2lwIG11bHRpLWNhc3QgYWRkcmVzc2VzICovCisJCQkJCWdvdG8gbmV4
dF9wYXJhbTsKKwkJCQl9CisJCQkJaWYgKChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9C
Uk9BRENBU1QpIHx8CisJCQkJICAgIChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkp
KSB7CisJCQkJCWdvdG8gbmV4dF9wYXJhbTsKKwkJCQl9CisJCQkJc2EgPSAoc3RydWN0IHNvY2th
ZGRyICopJnNpbjsKKwkJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJc3RjYl90bXAgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hZGRyKCZpbnAsIHNhLCAmbmV0LAorCQkJCQkJCQkJZHN0LCBzdGNiKTsKKwkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKworCQkJCWlmICgoc3RjYl90
bXAgPT0gTlVMTCAmJiBpbnAgPT0gc3RjYi0+c2N0cF9lcCkgfHwKKwkJCQkgICAgaW5wID09IE5V
TEwpIHsKKwkJCQkJLyogd2UgbXVzdCBhZGQgdGhlIHNvdXJjZSBhZGRyZXNzICovCisJCQkJCS8q
CisJCQkJCSAqIG5vIHNjb3BlIHNldCBzaW5jZSB3ZSBoYXZlIGEgdGNiCisJCQkJCSAqIGFscmVh
ZHkKKwkJCQkJICovCisKKwkJCQkJLyoKKwkJCQkJICogd2UgbXVzdCB2YWxpZGF0ZSB0aGUgc3Rh
dGUgYWdhaW4KKwkJCQkJICogaGVyZQorCQkJCQkgKi8KKwkJCQlhZGRfaXRfbm93OgorCQkJCQlp
ZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7CisJCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZyZWVk
PyAqLworCQkJCQkJcmV0dXJuICgtNyk7CisJCQkJCX0KKwkJCQkJaWYgKHNjdHBfYWRkX3JlbW90
ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xP
QURfQUREUl80KSkgeworCQkJCQkJcmV0dXJuICgtOCk7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYg
KHN0Y2JfdG1wID09IHN0Y2IpIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgewor
CQkJCQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJldHVybiAoLTEwKTsKKwkJ
CQkJfQorCQkJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQkJCS8qIGNsZWFyIGZsYWcgKi8KKwkJ
CQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPQorCQkJCQkJCX5TQ1RQX0FERFJfTk9UX0lOX0FTU09DOwor
CQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogc3RyYW5nZSwgYWRkcmVzcyBp
cyBpbiBhbm90aGVyCisJCQkJCSAqIGFzc29jPyBzdHJhaWdodGVuIG91dCBsb2Nrcy4KKwkJCQkJ
ICovCisJCQkJCWlmIChzdGNiX3RtcCkgeworCQkJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNi
X3RtcC0+YXNvYykgJiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB7CisJCQkJCQkJc3RydWN0IG1i
dWYgKm9wX2VycjsKKwkJCQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQkJ
CQkJLyogaW4gc2V0dXAgc3RhdGUgd2UgYWJvcnQgdGhpcyBndXkgKi8KKwkJCQkJCQlzbnByaW50
Zihtc2csIHNpemVvZihtc2cpLAorCQkJCQkJCSAgICAgICAgICIlczolZCBhdCAlcyIsIF9fRklM
RV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJCQkgICAg
ICAgICBtc2cpOworCQkJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYl90bXAtPnNj
dHBfZXAsCisJCQkJCQkJCQkJICBzdGNiX3RtcCwgb3BfZXJyLAorCQkJCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJCQlnb3RvIGFkZF9pdF9u
b3c7CisJCQkJCQl9CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYl90bXApOworCQkJCQl9CisK
KwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgeworCQkJCQkJLyogdGhlIGFzc29jIHdh
cyBmcmVlZD8gKi8KKwkJCQkJCXJldHVybiAoLTEyKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKC0x
Myk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChw
dHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgeworCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsKSB7CisJCQkJLyogb2sgZ2V0IHRoZSB2NiBhZGRyZXNzIGFuZCBjaGVjay9h
ZGQgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqcDYsIHA2X2J1ZjsKKworCQkJ
CXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkgICAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKikmcDZfYnVmLAorCQkJCQkJCSAgIHNpemVvZihwNl9idWYpKTsKKwkJ
CQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pIHx8CisJCQkJ
ICAgIHBoZHIgPT0gTlVMTCkgeworCQkJCQlyZXR1cm4gKC0xNCk7CisJCQkJfQorCQkJCXA2ID0g
KHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGhkcjsKKwkJCQltZW1jcHkoKGNhZGRyX3Qp
JnNpbjYuc2luNl9hZGRyLCBwNi0+YWRkciwKKwkJCQkgICAgICAgc2l6ZW9mKHA2LT5hZGRyKSk7
CisJCQkJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi5zaW42X2FkZHIpKSB7CisJCQkJ
CS8qIFNraXAgbXVsdGktY2FzdCBhZGRyZXNzZXMgKi8KKwkJCQkJZ290byBuZXh0X3BhcmFtOwor
CQkJCX0KKwkJCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LnNpbjZfYWRkcikpIHsK
KwkJCQkJLyogTGluayBsb2NhbCBtYWtlIG5vIHNlbnNlIHdpdGhvdXQgc2NvcGUgKi8KKwkJCQkJ
Z290byBuZXh0X3BhcmFtOworCQkJCX0KKwkJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu
NjsKKwkJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJCQkJc3RjYl90bXAgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
ZGRyKCZpbnAsIHNhLCAmbmV0LAorCQkJCQkJCQkJZHN0LCBzdGNiKTsKKwkJCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJCQlpZiAoc3RjYl90bXAgPT0gTlVMTCAm
JgorCQkJCSAgICAoaW5wID09IHN0Y2ItPnNjdHBfZXAgfHwgaW5wID09IE5VTEwpKSB7CisJCQkJ
CS8qCisJCQkJCSAqIHdlIG11c3QgdmFsaWRhdGUgdGhlIHN0YXRlIGFnYWluCisJCQkJCSAqIGhl
cmUKKwkJCQkJICovCisJCQkJYWRkX2l0X25vdzY6CisJCQkJCWlmIChzdGNiLT5hc29jLnN0YXRl
ID09IDApIHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4g
KC0xNik7CisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJICogd2UgbXVzdCBhZGQgdGhlIGFkZHJlc3Ms
IG5vIHNjb3BlCisJCQkJCSAqIHNldAorCQkJCQkgKi8KKwkJCQkJaWYgKHNjdHBfYWRkX3JlbW90
ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xP
QURfQUREUl81KSkgeworCQkJCQkJcmV0dXJuICgtMTcpOworCQkJCQl9CisJCQkJfSBlbHNlIGlm
IChzdGNiX3RtcCA9PSBzdGNiKSB7CisJCQkJCS8qCisJCQkJCSAqIHdlIG11c3QgdmFsaWRhdGUg
dGhlIHN0YXRlIGFnYWluCisJCQkJCSAqIGhlcmUKKwkJCQkJICovCisJCQkJCWlmIChzdGNiLT5h
c29jLnN0YXRlID09IDApIHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCQkJ
CQlyZXR1cm4gKC0xOSk7CisJCQkJCX0KKwkJCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJCQkv
KiBjbGVhciBmbGFnICovCisJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0KKwkJCQkJCQl+U0NUUF9B
RERSX05PVF9JTl9BU1NPQzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAq
IHN0cmFuZ2UsIGFkZHJlc3MgaXMgaW4gYW5vdGhlcgorCQkJCQkgKiBhc3NvYz8gc3RyYWlnaHRl
biBvdXQgbG9ja3MuCisJCQkJCSAqLworCQkJCQlpZiAoc3RjYl90bXApIHsKKwkJCQkJCWlmIChT
Q1RQX0dFVF9TVEFURSgmc3RjYl90bXAtPmFzb2MpICYgU0NUUF9TVEFURV9DT09LSUVfV0FJVCkg
eworCQkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCQkJY2hhciBtc2dbU0NUUF9ESUFH
X0lORk9fTEVOXTsKKworCQkJCQkJCS8qIGluIHNldHVwIHN0YXRlIHdlIGFib3J0IHRoaXMgZ3V5
ICovCisJCQkJCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKKwkJCQkJCQkgICAgICAgICAi
JXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCQkJCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9f
Y29kZSksCisJCQkJCQkJICAgICAgICAgbXNnKTsKKwkJCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29j
aWF0aW9uKHN0Y2JfdG1wLT5zY3RwX2VwLAorCQkJCQkJCQkJCSAgc3RjYl90bXAsIG9wX2VyciwK
KwkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CQkJCQkJZ290byBhZGRfaXRfbm93NjsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiX3RtcCk7CisJCQkJCX0KKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgeworCQkJ
CQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJldHVybiAoLTIxKTsKKwkJCQkJ
fQorCQkJCQlyZXR1cm4gKC0yMik7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKyNlbmRpZgorCQlp
ZiAocHR5cGUgPT0gU0NUUF9FQ05fQ0FQQUJMRSkgeworCQkJcGVlcl9zdXBwb3J0c19lY24gPSAx
OworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfVUxQX0FEQVBUQVRJT04pIHsKKwkJCWlmIChz
dGNiLT5hc29jLnN0YXRlICE9IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCXN0cnVjdCBzY3RwX2Fk
YXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiBhaSwgKmFpcDsKKworCQkJCXBoZHIgPSBzY3RwX2dl
dF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KikmYWksIHNpemVvZihhaSkpOworCQkJCWFpcCA9IChzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xh
eWVyX2luZGljYXRpb24gKilwaGRyOworCQkJCWlmIChhaXApIHsKKwkJCQkJc3RjYi0+YXNvYy5w
ZWVyc19hZGFwdGF0aW9uID0gbnRvaGwoYWlwLT5pbmRpY2F0aW9uKTsKKwkJCQkJc3RjYi0+YXNv
Yy5hZGFwdGF0aW9uX25lZWRlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgaWYgKHB0eXBl
ID09IFNDVFBfU0VUX1BSSU1fQUREUikgeworCQkJc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFy
YW0gbHN0b3JlLCAqZmVlOworCQkJaW50IGxwdHlwZTsKKwkJCXN0cnVjdCBzb2NrYWRkciAqbHNh
ID0gTlVMTDsKKyNpZmRlZiBJTkVUCisJCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFt
ICpmaWk7CisjZW5kaWYKKworCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7CisJCQkJcmV0dXJuICgtMTAwKTsKKwkJCX0KKwkJCWlmIChwbGVuID4gc2l6ZW9mKGxzdG9y
ZSkpIHsKKwkJCQlyZXR1cm4gKC0yMyk7CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9w
YXJhbShtLCBvZmZzZXQsCisJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmbHN0b3Jl
LAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgt
MjQpOworCQkJfQorCQkJZmVlID0gKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3BhcmFtICopcGhk
cjsKKwkJCWxwdHlwZSA9IG50b2hzKGZlZS0+YWRkcnAucGgucGFyYW1fdHlwZSk7CisJCQlzd2l0
Y2ggKGxwdHlwZSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJ
CQkJaWYgKHBsZW4gIT0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRf
cGFyYW0pKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJTaXplb2Ygc2V0cHJpbSBpbiBpbml0L2luaXQg
YWNrIG5vdCAlZCBidXQgJWQgLSBpZ25vcmVkXG4iLAorCQkJCQkJICAgIChpbnQpc2l6ZW9mKHN0
cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pLAorCQkJCQkJICAgIHBsZW4pOworCQkJCX0g
ZWxzZSB7CisJCQkJCWZpaSA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtICopZmVl
OworCQkJCQlzaW4uc2luX2FkZHIuc19hZGRyID0gZmlpLT5hZGRycC5hZGRyOworCQkJCQlsc2Eg
PSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUNgorCQkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJCQlpZiAocGxlbiAhPQor
CQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pKSB7CisJCQkJCVND
VFBfUFJJTlRGKCJTaXplb2Ygc2V0cHJpbSAodjYpIGluIGluaXQvaW5pdCBhY2sgbm90ICVkIGJ1
dCAlZCAtIGlnbm9yZWRcbiIsCisJCQkJCQkgICAgKGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNj
b25mX2FkZHJfcGFyYW0pLAorCQkJCQkJICAgIHBsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCW1l
bWNweShzaW42LnNpbjZfYWRkci5zNl9hZGRyLAorCQkJCQkgICAgICAgZmVlLT5hZGRycC5hZGRy
LAorCQkJCQkgICAgICAgc2l6ZW9mKGZlZS0+YWRkcnAuYWRkcikpOworCQkJCQlsc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbjY7CisJCQkJfQorCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZh
dWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGxzYSkgeworCQkJCSh2b2lkKXNjdHBfc2V0
X3ByaW1hcnlfYWRkcihzdGNiLCBzYSwgTlVMTCk7CisJCQl9CisJCX0gZWxzZSBpZiAocHR5cGUg
PT0gU0NUUF9IQVNfTkFUX1NVUFBPUlQpIHsKKwkJCXN0Y2ItPmFzb2MucGVlcl9zdXBwb3J0c19u
YXQgPSAxOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfUFJTQ1RQX1NVUFBPUlRFRCkgewor
CQkJLyogUGVlciBzdXBwb3J0cyBwci1zY3RwICovCisJCQlwZWVyX3N1cHBvcnRzX3Byc2N0cCA9
IDE7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKSB7CisJ
CQkvKiBBIHN1cHBvcnRlZCBleHRlbnNpb24gY2h1bmsgKi8KKwkJCXN0cnVjdCBzY3RwX3N1cHBv
cnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOworCQkJdWludDhfdCBsb2NhbF9z
dG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKwkJCWludCBudW1fZW50LCBpOworCisJCQlp
ZiAocGxlbiA+IHNpemVvZihsb2NhbF9zdG9yZSkpIHsKKwkJCQlyZXR1cm4gKC0zNSk7CisJCQl9
CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJCQkJCQkgICAoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKikmbG9jYWxfc3RvcmUsIHBsZW4pOworCQkJaWYgKHBoZHIgPT0g
TlVMTCkgeworCQkJCXJldHVybiAoLTI1KTsKKwkJCX0KKwkJCXByX3N1cHBvcnRlZCA9IChzdHJ1
Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gKilwaGRyOworCQkJbnVtX2VudCA9
IHBsZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQkJZm9yIChpID0gMDsgaSA8
IG51bV9lbnQ7IGkrKykgeworCQkJCXN3aXRjaCAocHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tp
XSkgeworCQkJCWNhc2UgU0NUUF9BU0NPTkY6CisJCQkJCXBlZXJfc3VwcG9ydHNfYXNjb25mID0g
MTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0FTQ09ORl9BQ0s6CisJCQkJCXBlZXJfc3Vw
cG9ydHNfYXNjb25mX2FjayA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0NUUF9GT1JXQVJE
X0NVTV9UU046CisJCQkJCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMTsKKwkJCQkJYnJlYWs7CisJ
CQkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgorCQkJCQlwZWVyX3N1cHBvcnRzX3BrdGRyb3Ag
PSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNDVFBfTlJfU0VMRUNUSVZFX0FDSzoKKwkJCQkJ
cGVlcl9zdXBwb3J0c19ucnNhY2sgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNDVFBfU1RS
RUFNX1JFU0VUOgorCQkJCQlwZWVyX3N1cHBvcnRzX3JlY29uZmlnID0gMTsKKwkJCQkJYnJlYWs7
CisJCQkJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OOgorCQkJCQlwZWVyX3N1cHBvcnRzX2F1dGgg
PSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNDVFBfSURBVEE6CisJCQkJCXBlZXJfc3VwcG9y
dHNfaWRhdGEgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBvbmUgSSBo
YXZlIG5vdCBsZWFybmVkIHlldCAqLworCQkJCQlicmVhazsKKworCQkJCX0KKwkJCX0KKwkJfSBl
bHNlIGlmIChwdHlwZSA9PSBTQ1RQX1JBTkRPTSkgeworCQkJaWYgKHBsZW4gPiBzaXplb2YocmFu
ZG9tX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCWlmIChnb3RfcmFuZG9tKSB7CisJCQkJLyogYWxy
ZWFkeSBwcm9jZXNzZWQgYSBSQU5ET00gKi8KKwkJCQlnb3RvIG5leHRfcGFyYW07CisJCQl9CisJ
CQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJCQkJCQkgICAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKilyYW5kb21fc3RvcmUsCisJCQkJCQkgICBwbGVuKTsKKwkJCWlmIChw
aGRyID09IE5VTEwpCisJCQkJcmV0dXJuICgtMjYpOworCQkJcF9yYW5kb20gPSAoc3RydWN0IHNj
dHBfYXV0aF9yYW5kb20gKilwaGRyOworCQkJcmFuZG9tX2xlbiA9IHBsZW4gLSBzaXplb2YoKnBf
cmFuZG9tKTsKKwkJCS8qIGVuZm9yY2UgdGhlIHJhbmRvbSBsZW5ndGggKi8KKwkJCWlmIChyYW5k
b21fbGVuICE9IFNDVFBfQVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkgeworCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19BVVRIMSwgIlNDVFA6IGludmFsaWQgUkFORE9NIGxlblxuIik7CisJCQkJcmV0
dXJuICgtMjcpOworCQkJfQorCQkJZ290X3JhbmRvbSA9IDE7CisJCX0gZWxzZSBpZiAocHR5cGUg
PT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXVpbnQxNl90IG51bV9obWFjczsKKwkJCXVpbnQxNl90
IGk7CisKKwkJCWlmIChwbGVuID4gc2l6ZW9mKGhtYWNzX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJ
CWlmIChnb3RfaG1hY3MpIHsKKwkJCQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBhIEhNQUMgbGlzdCAq
LworCQkJCWdvdG8gbmV4dF9wYXJhbTsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3Bh
cmFtKG0sIG9mZnNldCwKKwkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKWhtYWNzX3N0
b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKQorCQkJCXJldHVybiAo
LTI4KTsKKwkJCWhtYWNzID0gKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICopcGhkcjsKKwkJ
CWhtYWNzX2xlbiA9IHBsZW4gLSBzaXplb2YoKmhtYWNzKTsKKwkJCW51bV9obWFjcyA9IGhtYWNz
X2xlbiAvIHNpemVvZihobWFjcy0+aG1hY19pZHNbMF0pOworCQkJLyogdmFsaWRhdGUgdGhlIGht
YWMgbGlzdCAqLworCQkJaWYgKHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oaG1hY3MsIG51bV9obWFj
cykpIHsKKwkJCQlyZXR1cm4gKC0yOSk7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX2ht
YWNzICE9IE5VTEwpCisJCQkJc2N0cF9mcmVlX2htYWNsaXN0KHN0Y2ItPmFzb2MucGVlcl9obWFj
cyk7CisJCQlzdGNiLT5hc29jLnBlZXJfaG1hY3MgPSBzY3RwX2FsbG9jX2htYWNsaXN0KG51bV9o
bWFjcyk7CisJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX2htYWNzICE9IE5VTEwpIHsKKwkJCQlmb3Ig
KGkgPSAwOyBpIDwgbnVtX2htYWNzOyBpKyspIHsKKwkJCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9o
bWFjaWQoc3RjYi0+YXNvYy5wZWVyX2htYWNzLAorCQkJCQkJCQkgICBudG9ocyhobWFjcy0+aG1h
Y19pZHNbaV0pKTsKKwkJCQl9CisJCQl9CisJCQlnb3RfaG1hY3MgPSAxOworCQl9IGVsc2UgaWYg
KHB0eXBlID09IFNDVFBfQ0hVTktfTElTVCkgeworCQkJaW50IGk7CisKKwkJCWlmIChwbGVuID4g
c2l6ZW9mKGNodW5rc19zdG9yZSkpCisJCQkJYnJlYWs7CisJCQlpZiAoZ290X2Noa2xpc3QpIHsK
KwkJCQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBhIENodW5rcyBsaXN0ICovCisJCQkJZ290byBuZXh0
X3BhcmFtOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAor
CQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopY2h1bmtzX3N0b3JlLAorCQkJCQkJICAg
cGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKQorCQkJCXJldHVybiAoLTMwKTsKKwkJCWNodW5r
cyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKilwaGRyOworCQkJbnVtX2NodW5rcyA9
IHBsZW4gLSBzaXplb2YoKmNodW5rcyk7CisJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1
bmtzICE9IE5VTEwpCisJCQkJc2N0cF9jbGVhcl9jaHVua2xpc3Qoc3RjYi0+YXNvYy5wZWVyX2F1
dGhfY2h1bmtzKTsKKwkJCWVsc2UKKwkJCQlzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MgPSBz
Y3RwX2FsbG9jX2NodW5rbGlzdCgpOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkr
KykgeworCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoY2h1bmtzLT5jaHVua190eXBlc1tp
XSwKKwkJCQkJCQkgIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcyk7CisJCQkJLyogcmVjb3Jk
IGFzY29uZi9hc2NvbmYtYWNrIGlmIGxpc3RlZCAqLworCQkJCWlmIChjaHVua3MtPmNodW5rX3R5
cGVzW2ldID09IFNDVFBfQVNDT05GKQorCQkJCQlzYXdfYXNjb25mID0gMTsKKwkJCQlpZiAoY2h1
bmtzLT5jaHVua190eXBlc1tpXSA9PSBTQ1RQX0FTQ09ORl9BQ0spCisJCQkJCXNhd19hc2NvbmZf
YWNrID0gMTsKKworCQkJfQorCQkJZ290X2Noa2xpc3QgPSAxOworCQl9IGVsc2UgaWYgKChwdHlw
ZSA9PSBTQ1RQX0hFQVJUQkVBVF9JTkZPKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfU1RBVEVf
Q09PS0lFKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfVU5SRUNPR19QQVJBTSkgfHwKKwkJCSAg
IChwdHlwZSA9PSBTQ1RQX0NPT0tJRV9QUkVTRVJWRSkgfHwKKwkJCSAgIChwdHlwZSA9PSBTQ1RQ
X1NVUFBPUlRFRF9BRERSVFlQRSkgfHwKKwkJCSAgIChwdHlwZSA9PSBTQ1RQX0FERF9JUF9BRERS
RVNTKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHx8CisJCQkgICAo
cHR5cGUgPT0gU0NUUF9FUlJPUl9DQVVTRV9JTkQpIHx8CisJCQkgICAocHR5cGUgPT0gU0NUUF9T
VUNDRVNTX1JFUE9SVCkpIHsKKwkJCS8qIGRvbid0IGNhcmUgKi8gOworCQl9IGVsc2UgeworCQkJ
aWYgKChwdHlwZSAmIDB4ODAwMCkgPT0gMHgwMDAwKSB7CisJCQkJLyoKKwkJCQkgKiBtdXN0IHN0
b3AgcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiB0aGUKKwkJCQkgKiBwYXJhbSdzLiBBbnkgcmVwb3J0
IGJpdHMgd2VyZSBoYW5kbGVkCisJCQkJICogd2l0aCB0aGUgY2FsbCB0bworCQkJCSAqIHNjdHBf
YXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoKQorCQkJCSAqIHdoZW4gdGhlIElOSVQg
b3IgSU5JVC1BQ0sgd2FzIGZpcnN0IHNlZW4uCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9CisJ
CX0KKworCW5leHRfcGFyYW06CisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwkJaWYg
KG9mZnNldCA+PSBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKwkJcGhkciA9IHNjdHBfZ2V0X25l
eHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLAorCQkJCQkgICBzaXplb2YocGFyYW1fYnVm
KSk7CisJfQorCS8qIE5vdyBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byBwdXJnZSBhbnkgYWRk
cmVzc2VzICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0LCBubmV0KSB7CisJCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PVF9J
Tl9BU1NPQykgPT0KKwkJICAgIFNDVFBfQUREUl9OT1RfSU5fQVNTT0MpIHsKKwkJCS8qIFRoaXMg
YWRkcmVzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFzb2MgKi8KKwkJCS8qIHJlbW92ZSBh
bmQgZnJlZSBpdCAqLworCQkJc3RjYi0+YXNvYy5udW1uZXRzLS07CisJCQlUQUlMUV9SRU1PVkUo
JnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworCQkJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKG5ldCk7CisJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikg
eworCQkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IE5VTEw7CisJCQkJc2N0cF9z
ZWxlY3RfcHJpbWFyeV9kZXN0aW5hdGlvbihzdGNiKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKHN0
Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19lY24g
PT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID0gMDsKKwl9CisJaWYgKChzdGNi
LT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBlZXJfc3VwcG9ydHNfcHJz
Y3RwID09IDApKSB7CisJCXN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9IDA7CisJfQorCWlm
ICgoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAoKHBlZXJfc3VwcG9y
dHNfYXV0aCA9PSAwKSB8fAorCSAgICAgKGdvdF9yYW5kb20gPT0gMCkgfHwgKGdvdF9obWFjcyA9
PSAwKSkpIHsKKwkJc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9IDA7CisJfQorCWlmICgoc3Rj
Yi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDEpICYmCisJICAgICgocGVlcl9zdXBwb3J0c19h
c2NvbmYgPT0gMCkgfHwgKHBlZXJfc3VwcG9ydHNfYXNjb25mX2FjayA9PSAwKSB8fAorCSAgICAg
KHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQgPT0gMCkgfHwKKwkgICAgIChzYXdfYXNjb25mID09
IDApIHx8IChzYXdfYXNjb25mX2FjayA9PSAwKSkpIHsKKwkJc3RjYi0+YXNvYy5hc2NvbmZfc3Vw
cG9ydGVkID0gMDsKKwl9CisJaWYgKChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAx
KSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9PSAwKSkgeworCQlzdGNiLT5hc29j
LnJlY29uZmlnX3N1cHBvcnRlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+YXNvYy5pZGF0YV9zdXBw
b3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBlZXJfc3VwcG9ydHNfaWRhdGEgPT0gMCkpIHsKKwkJc3Rj
Yi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPSAwOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MubnJzYWNr
X3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19ucnNhY2sgPT0gMCkpIHsK
KwkJc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID0gMDsKKwl9CisJaWYgKChzdGNiLT5hc29j
LnBrdGRyb3Bfc3VwcG9ydGVkID09IDEpICYmCisJICAgIChwZWVyX3N1cHBvcnRzX3BrdGRyb3Ag
PT0gMCkpeworCQlzdGNiLT5hc29jLnBrdGRyb3Bfc3VwcG9ydGVkID0gMDsKKwl9CisJLyogdmFs
aWRhdGUgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgcGFyYW1ldGVycyAqLworCWlmICgocGVlcl9z
dXBwb3J0c19hdXRoID09IDApICYmIChnb3RfY2hrbGlzdCA9PSAxKSkgeworCQkvKiBwZWVyIGRv
ZXMgbm90IHN1cHBvcnQgYXV0aCBidXQgc2VudCBhIGNodW5rcyBsaXN0PyAqLworCQlyZXR1cm4g
KC0zMSk7CisJfQorCWlmICgocGVlcl9zdXBwb3J0c19hc2NvbmYgPT0gMSkgJiYgKHBlZXJfc3Vw
cG9ydHNfYXV0aCA9PSAwKSkgeworCQkvKiBwZWVyIHN1cHBvcnRzIGFzY29uZiBidXQgbm90IGF1
dGg/ICovCisJCXJldHVybiAoLTMyKTsKKwl9IGVsc2UgaWYgKChwZWVyX3N1cHBvcnRzX2FzY29u
ZiA9PSAxKSAmJgorCSAgICAgICAgICAgKHBlZXJfc3VwcG9ydHNfYXV0aCA9PSAxKSAmJgorCQkg
ICAoKHNhd19hc2NvbmYgPT0gMCkgfHwgKHNhd19hc2NvbmZfYWNrID09IDApKSkgeworCQlyZXR1
cm4gKC0zMyk7CisJfQorCS8qIGNvbmNhdGVuYXRlIHRoZSBmdWxsIHJhbmRvbSBrZXkgKi8KKwlr
ZXlsZW4gPSBzaXplb2YoKnBfcmFuZG9tKSArIHJhbmRvbV9sZW4gKyBzaXplb2YoKmhtYWNzKSAr
IGhtYWNzX2xlbjsKKwlpZiAoY2h1bmtzICE9IE5VTEwpIHsKKwkJa2V5bGVuICs9IHNpemVvZigq
Y2h1bmtzKSArIG51bV9jaHVua3M7CisJfQorCW5ld19rZXkgPSBzY3RwX2FsbG9jX2tleShrZXls
ZW4pOworCWlmIChuZXdfa2V5ICE9IE5VTEwpIHsKKwkJLyogY29weSBpbiB0aGUgUkFORE9NICov
CisJCWlmIChwX3JhbmRvbSAhPSBOVUxMKSB7CisJCQlrZXlsZW4gPSBzaXplb2YoKnBfcmFuZG9t
KSArIHJhbmRvbV9sZW47CisJCQltZW1jcHkobmV3X2tleS0+a2V5LCBwX3JhbmRvbSwga2V5bGVu
KTsKKwkJfSBlbHNlIHsKKwkJCWtleWxlbiA9IDA7CisJCX0KKwkJLyogYXBwZW5kIGluIHRoZSBB
VVRIIGNodW5rcyAqLworCQlpZiAoY2h1bmtzICE9IE5VTEwpIHsKKwkJCW1lbWNweShuZXdfa2V5
LT5rZXkgKyBrZXlsZW4sIGNodW5rcywKKwkJCSAgICAgICBzaXplb2YoKmNodW5rcykgKyBudW1f
Y2h1bmtzKTsKKwkJCWtleWxlbiArPSBzaXplb2YoKmNodW5rcykgKyBudW1fY2h1bmtzOworCQl9
CisJCS8qIGFwcGVuZCBpbiB0aGUgSE1BQ3MgKi8KKwkJaWYgKGhtYWNzICE9IE5VTEwpIHsKKwkJ
CW1lbWNweShuZXdfa2V5LT5rZXkgKyBrZXlsZW4sIGhtYWNzLAorCQkJICAgICAgIHNpemVvZigq
aG1hY3MpICsgaG1hY3NfbGVuKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIGZhaWxlZCB0byBnZXQg
bWVtb3J5IGZvciB0aGUga2V5ICovCisJCXJldHVybiAoLTM0KTsKKwl9CisJaWYgKHN0Y2ItPmFz
b2MuYXV0aGluZm8ucGVlcl9yYW5kb20gIT0gTlVMTCkKKwkJc2N0cF9mcmVlX2tleShzdGNiLT5h
c29jLmF1dGhpbmZvLnBlZXJfcmFuZG9tKTsKKwlzdGNiLT5hc29jLmF1dGhpbmZvLnBlZXJfcmFu
ZG9tID0gbmV3X2tleTsKKwlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwgc3RjYi0+YXNvYy5h
dXRoaW5mby5hc3NvY19rZXlpZCk7CisJc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHN0Y2It
PmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCk7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3Nj
dHBfc2V0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRk
ciAqc2EsCisJCSAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKiBtYWtlIHN1cmUg
dGhlIHJlcXVlc3RlZCBwcmltYXJ5IGFkZHJlc3MgZXhpc3RzIGluIHRoZSBhc3NvYyAqLworCWlm
IChuZXQgPT0gTlVMTCAmJiBzYSkKKwkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIHNhKTsKKwor
CWlmIChuZXQgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3QgZmluZCB0aGUgcmVxdWVzdGVkIHByaW1h
cnkgYWRkcmVzcyEgKi8KKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlIHsKKwkJLyogc2V0IHRoZSBw
cmltYXJ5IGFkZHJlc3MgKi8KKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkgeworCQkJLyogTXVzdCBiZSBjb25maXJtZWQsIHNvIHF1ZXVlIHRvIHNldCAqLwor
CQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRVFfUFJJTUFSWTsKKwkJCXJldHVybiAo
MCk7CisJCX0KKwkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gbmV0OworCQlpZiAo
IShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpICYmIChzdGNiLT5hc29jLmFsdGVybmF0
ZSkpIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJ
CQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCX0KKwkJbmV0ID0gVEFJTFFfRklSU1Qo
JnN0Y2ItPmFzb2MubmV0cyk7CisJCWlmIChuZXQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKSB7CisJCQkvKiBmaXJzdCBvbmUgb24gdGhlIGxpc3QgaXMgTk9UIHRoZSBwcmltYXJ5
CisJCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IGlmCisJCQkgKiB0
aGUgcHJpbWFyeSBpcyB0aGUgZmlyc3Qgb24gdGhlIGxpc3QsIG1ha2UgaXQKKwkJCSAqIHNvLgor
CQkJICovCisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MubmV0cywgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uLCBzY3RwX25leHQpOworCQkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2It
PmFzb2MubmV0cywgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBzY3RwX25leHQpOwor
CQl9CisJCXJldHVybiAoMCk7CisJfQorfQorCitpbnQKK3NjdHBfaXNfdnRhZ19nb29kKHVpbnQz
Ml90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0LCBzdHJ1Y3QgdGltZXZhbCAq
bm93KQoreworCS8qCisJICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgdHdvIHB1cnBvc2VzLiBJdCB3
aWxsIHNlZSBpZiBhIFRBRyBjYW4gYmUKKwkgKiByZS11c2VkIGFuZCByZXR1cm4gMSBmb3IgeWVz
IGl0IGlzIG9rIGFuZCAwIGZvciBkb24ndCB1c2UgdGhhdAorCSAqIHRhZy4gQSBzZWNvbmRhcnkg
ZnVuY3Rpb24gaXQgd2lsbCBkbyBpcyBwdXJnZSBvdXQgb2xkIHRhZ3MgdGhhdAorCSAqIGNhbiBi
ZSByZW1vdmVkLgorCSAqLworCXN0cnVjdCBzY3RwdnRhZ2hlYWQgKmNoYWluOworCXN0cnVjdCBz
Y3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9jazsKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOwor
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgaTsKKworCVNDVFBfSU5QX0lORk9fUkxPQ0so
KTsKKwloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpW1NDVFBfUENCSEFTSF9B
U09DKHRhZywKKwkJCQkJCQkJU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOworCUxJU1Rf
Rk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJCS8qIFdlIGNob29zZSBub3QgdG8g
bG9jayBhbnl0aGluZyBoZXJlLiBUQ0IncyBjYW4ndCBiZQorCQkgKiByZW1vdmVkIHNpbmNlIHdl
IGhhdmUgdGhlIHJlYWQgbG9jaywgc28gdGhleSBjYW4ndAorCQkgKiBiZSBmcmVlZCBvbiB1cywg
c2FtZSB0aGluZyBmb3IgdGhlIElOUC4gSSBtYXkKKwkJICogYmUgd3Jvbmcgd2l0aCB0aGlzIGFz
c3VtcHRpb24sIGJ1dCB3ZSB3aWxsIGdvCisJCSAqIHdpdGggaXQgZm9yIG5vdyA6LSkKKwkJICov
CisJCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VU
X0FMTEdPTkUpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiLT5hc29jLm15X3Z0YWcg
PT0gdGFnKSB7CisJCQkvKiBjYW5kaWRhdGUgKi8KKwkJCWlmIChzdGNiLT5ycG9ydCAhPSBycG9y
dCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBv
cnQgIT0gbHBvcnQpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIEl0cyBhIHVzZWQgdGFn
IHNldCAqLworCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQlyZXR1cm4gKDApOworCQl9
CisJfQorCWNoYWluID0gJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpWyh0YWcgJSBTQ1RQ
X1NUQUNLX1ZUQUdfSEFTSF9TSVpFKV07CisJLyogTm93IHdoYXQgYWJvdXQgdGltZWQgd2FpdCA/
ICovCisJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFpbiwgc2N0cF9ueHRfdGFnYmxvY2sp
IHsKKwkJLyoKKwkJICogQmxvY2socykgYXJlIHByZXNlbnQsIGxldHMgc2VlIGlmIHdlIGhhdmUg
dGhpcyB0YWcgaW4gdGhlCisJCSAqIGxpc3QKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBTQ1RQ
X05VTUJFUl9JTl9WVEFHX0JMT0NLOyBpKyspIHsKKwkJCWlmICh0d2FpdF9ibG9jay0+dnRhZ19i
bG9ja1tpXS52X3RhZyA9PSAwKSB7CisJCQkJLyogbm90IHVzZWQgKi8KKwkJCQljb250aW51ZTsK
KwkJCX0gZWxzZSBpZiAoKGxvbmcpdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0
X2V4cGlyZSAgPAorCQkJCSAgIG5vdy0+dHZfc2VjKSB7CisJCQkJLyogQXVkaXQgZXhwaXJlcyB0
aGlzIGd1eSAqLworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9leHBp
cmUgPSAwOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFnID0gMDsKKwkJCQl0
d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9IDA7CisJCQkJdHdhaXRfYmxvY2stPnZ0
YWdfYmxvY2tbaV0ucnBvcnQgPSAwOworCQkJfSBlbHNlIGlmICgodHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0udl90YWcgPT0gdGFnKSAmJgorCQkJCSAgICh0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1tpXS5scG9ydCA9PSBscG9ydCkgJiYKKwkJCQkgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tb
aV0ucnBvcnQgPT0gcnBvcnQpKSB7CisJCQkJLyogQmFkIHRhZywgc29ycnkgOjwgKi8KKwkJCQlT
Q1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJfQor
CVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2RyYWluX21idWZzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwkvKgorCSAqIFdl
IG11c3QgaHVudCB0aGlzIGFzc29jaWF0aW9uIGZvciBNQlVGJ3MgcGFzdCB0aGUgY3VtYWNrIChp
LmUuCisJICogb3V0IG9mIG9yZGVyIGRhdGEgdGhhdCB3ZSBjYW4gcmVuZWdlIG9uKS4KKwkgKi8K
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGssICpuY2hrOworCXVpbnQzMl90IGN1bXVsYXRpdmVfdHNuX3AxOworCXN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7CisJaW50IGNudCwgc3RybWF0Owor
CXVpbnQzMl90IGdhcCwgaTsKKwlpbnQgZm5kID0gMDsKKworCS8qIFdlIGxvb2sgZm9yIGFueXRo
aW5nIGxhcmdlciB0aGFuIHRoZSBjdW0tYWNrICsgMSAqLworCisJYXNvYyA9ICZzdGNiLT5hc29j
OworCWlmIChhc29jLT5jdW11bGF0aXZlX3RzbiA9PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwKSB7CisJCS8qIG5vbmUgd2UgY2FuIHJlbmVnIG9uLiAqLworCQlyZXR1cm47CisJfQorCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lKTsKKwljdW11bGF0aXZlX3Rz
bl9wMSA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuICsgMTsKKwljbnQgPSAwOworCS8qIE9rIHRoYXQg
d2FzIGZ1biwgbm93IHdlIHdpbGwgZHJhaW4gYWxsIHRoZSBpbmJvdW5kIHN0cmVhbXM/ICovCisJ
Zm9yIChzdHJtYXQgPSAwOyBzdHJtYXQgPCBhc29jLT5zdHJlYW1pbmNudDsgc3RybWF0KyspIHsK
KwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5zdHJtaW5bc3RybWF0XS5pbnF1
ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlpZiAo
Y29udHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fT1JERVJFRCApIHsKKwkJCQlwYW5pYygiSHVo
IGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCBvcmRlcmVkPyIsCisJCQkJICAgICAgY29udHJv
bCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKFNDVFBfVFNOX0dU
KGNvbnRyb2wtPnNpbmZvX3RzbiwgY3VtdWxhdGl2ZV90c25fcDEpKSB7CisJCQkJLyogWWVwIGl0
IGlzIGFib3ZlIGN1bS1hY2sgKi8KKwkJCQljbnQrKzsKKwkJCQlTQ1RQX0NBTENfVFNOX1RPX0dB
UChnYXAsIGNvbnRyb2wtPnNpbmZvX3RzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7
CisJCQkJS0FTU0VSVChjb250cm9sLT5sZW5ndGggPiAwLCAoImNvbnRyb2wgaGFzIHplcm8gbGVu
Z3RoIikpOworCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxl
bmd0aCkgeworCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0
aDsKKwkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25f
YWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5z
aXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+
c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRf
ZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOworCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNF
TlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9x
KSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgY29udHJv
bCwgbmV4dCk7CisJCQkJCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJCQkJfQorCQkJCVRBSUxR
X1JFTU9WRSgmYXNvYy0+c3RybWluW3N0cm1hdF0uaW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0
cm0pOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJaWYgKGNvbnRyb2wtPmRhdGEp
IHsKKwkJCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJCQljb250cm9sLT5kYXRh
ID0gTlVMTDsKKwkJCQl9CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zy
b20pOworCQkJCS8qIE5vdyBpdHMgcmVhc20/ICovCisJCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNo
aywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKKwkJCQkJY250Kys7CisJCQkJ
CVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgY2hrLT5yZWMuZGF0YS50c24sIGFzb2MtPm1hcHBp
bmdfYXJyYXlfYmFzZV90c24pOworCQkJCQlLQVNTRVJUKGNoay0+c2VuZF9zaXplID4gMCwgKCJj
aHVuayBoYXMgemVybyBsZW5ndGgiKSk7CisJCQkJCWlmIChhc29jLT5zaXplX29uX3JlYXNtX3F1
ZXVlID49IGNoay0+c2VuZF9zaXplKSB7CisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVl
IC09IGNoay0+c2VuZF9zaXplOworCQkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJ
CQkJCXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0aGFuIGNodW5rIGxl
bmd0aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIGNoay0+c2VuZF9zaXplKTsKKyNl
bHNlCisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID0gMDsKKyNlbmRpZgorCQkJCQl9
CisJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKKwkJCQkJ
U0NUUF9VTlNFVF9UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOworCQkJCQlU
QUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCQkJCWlmIChj
aGstPmRhdGEpIHsKKwkJCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCQkJY2hrLT5k
YXRhID0gTlVMTDsKKwkJCQkJfQorCQkJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNv
bnRyb2wpOworCQkJfQorCQl9CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+
c3RybWluW3N0cm1hdF0udW5vX2lucXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgeworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EgIT0gU0NUUF9PTl9VTk9S
REVSRUQgKSB7CisJCQkJcGFuaWMoIkh1aCBjb250cm9sOiAlcCBvbl9xOiAlZCAtLSBub3QgdW5v
cmRlcmVkPyIsCisJCQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCX0K
KyNlbmRpZgorCQkJaWYgKFNDVFBfVFNOX0dUKGNvbnRyb2wtPnNpbmZvX3RzbiwgY3VtdWxhdGl2
ZV90c25fcDEpKSB7CisJCQkJLyogWWVwIGl0IGlzIGFib3ZlIGN1bS1hY2sgKi8KKwkJCQljbnQr
KzsKKwkJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGNvbnRyb2wtPnNpbmZvX3RzbiwgYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJCQkJS0FTU0VSVChjb250cm9sLT5sZW5ndGgg
PiAwLCAoImNvbnRyb2wgaGFzIHplcm8gbGVuZ3RoIikpOworCQkJCWlmIChhc29jLT5zaXplX29u
X2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29jLT5zaXplX29uX2Fs
bF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFS
SUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4g
Y29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5s
ZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5k
aWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMp
OworCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsK
KwkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+
c2N0cF9lcC0+cmVhZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQkJCWNvbnRyb2wtPm9uX3Jl
YWRfcSA9IDA7CisJCQkJfQorCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3RybWluW3N0cm1hdF0u
dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQljb250cm9sLT5vbl9zdHJt
X3EgPSAwOworCQkJCWlmIChjb250cm9sLT5kYXRhKSB7CisJCQkJCXNjdHBfbV9mcmVlbShjb250
cm9sLT5kYXRhKTsKKwkJCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCQkJfQorCQkJCXNjdHBf
ZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJCQkvKiBOb3cgaXRzIHJlYXNt
PyAqLworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0cF9u
ZXh0LCBuY2hrKSB7CisJCQkJCWNudCsrOworCQkJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAs
IGNoay0+cmVjLmRhdGEudHNuLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKKwkJCQkJ
S0FTU0VSVChjaGstPnNlbmRfc2l6ZSA+IDAsICgiY2h1bmsgaGFzIHplcm8gbGVuZ3RoIikpOwor
CQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA+PSBjaGstPnNlbmRfc2l6ZSkgewor
CQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSAtPSBjaGstPnNlbmRfc2l6ZTsKKwkJCQkJ
fSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCQlwYW5pYygic2l6ZV9vbl9yZWFzbV9x
dWV1ZSA9ICV1IHNtYWxsZXIgdGhhbiBjaHVuayBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX3Jl
YXNtX3F1ZXVlLCBjaGstPnNlbmRfc2l6ZSk7CisjZWxzZQorCQkJCQkJYXNvYy0+c2l6ZV9vbl9y
ZWFzbV9xdWV1ZSA9IDA7CisjZW5kaWYKKwkJCQkJfQorCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFz
b2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7CisJCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNv
Yy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFz
bSwgY2hrLCBzY3RwX25leHQpOworCQkJCQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkJCX0KKwkJCQkJ
c2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0K
KwkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKKwkJCX0KKwkJfQorCX0KKwlp
ZiAoY250KSB7CisJCS8qIFdlIG11c3QgYmFjayBkb3duIHRvIHNlZSB3aGF0IHRoZSBuZXcgaGln
aGVzdCBpcyAqLworCQlmb3IgKGkgPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOyBTQ1RQ
X1RTTl9HRShpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsgaS0tKSB7CisJCQlTQ1RQ
X0NBTENfVFNOX1RPX0dBUChnYXAsIGksIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwor
CQkJaWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKSkgewor
CQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBpOworCQkJCWZuZCA9IDE7CisJCQkJ
YnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmbmQpIHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2lu
c2lkZV9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuIC0gMTsKKwkJfQorCisJCS8q
CisJCSAqIFF1ZXN0aW9uLCBzaG91bGQgd2UgZ28gdGhyb3VnaCB0aGUgZGVsaXZlcnkgcXVldWU/
IFRoZSBvbmx5CisJCSAqIHJlYXNvbiB0aGluZ3MgYXJlIG9uIGhlcmUgaXMgdGhlIGFwcCBub3Qg
cmVhZGluZyBPUiBhIHAtZC1hcGkgdXAuCisJCSAqIEFuIGF0dGFja2VyIENPVUxEIHNlbmQgZW5v
dWdoIGluIHRvIGluaXRpYXRlIHRoZSBQRC1BUEkgYW5kIHRoZW4KKwkJICogc2VuZCBhIGJ1bmNo
IG9mIHN0dWZmIHRvIG90aGVyIHN0cmVhbXMuLi4gdGhlc2Ugd291bGQgd2luZCB1cCBvbgorCQkg
KiB0aGUgZGVsaXZlcnkgcXVldWUuLiBhbmQgdGhlbiB3ZSB3b3VsZCBub3QgZ2V0IHRvIHRoZW0u
IEJ1dCBpbgorCQkgKiBvcmRlciB0byBkbyB0aGlzIEkgdGhlbiBoYXZlIHRvIGJhY2stdHJhY2sg
YW5kIHVuLWRlbGl2ZXIKKwkJICogc2VxdWVuY2UgbnVtYmVycyBpbiBzdHJlYW1zLi4gZWwteXVj
a28uIEkgdGhpbmsgZm9yIG5vdyB3ZSB3aWxsCisJCSAqIE5PVCBsb29rIGF0IHRoZSBkZWxpdmVy
eSBxdWV1ZSBhbmQgbGVhdmUgaXQgdG8gYmUgc29tZXRoaW5nIHRvCisJCSAqIGNvbnNpZGVyIGxh
dGVyLiBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBhYm9ydCB0aGUgUC1ELUFQSSB3aXRoCisJ
CSAqIGEgbm90aWZpY2F0aW9uIGFuZCB0aGVuIGRlbGl2ZXIgdGhlIGRhdGEuLi4uIE9yIGFub3Ro
ZXIgbWV0aG9kCisJCSAqIG1pZ2h0IGJlIHRvIGtlZXAgdHJhY2sgb2YgaG93IG1hbnkgdGltZXMg
dGhlIHNpdHVhdGlvbiBvY2N1cnMgYW5kCisJCSAqIGlmIHdlIHNlZSBhIHBvc3NpYmxlIGF0dGFj
ayB1bmRlcndheSBqdXN0IGFib3J0IHRoZSBhc3NvY2lhdGlvbi4KKwkJICovCisjaWZkZWYgU0NU
UF9ERUJVRworCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkZyZWVkICVkIGNodW5rcyBmcm9t
IHJlbmVnIGhhcnZlc3RcbiIsIGNudCk7CisjZW5kaWYKKwkJLyoKKwkJICogTm93IGRvIHdlIG5l
ZWQgdG8gZmluZCBhIG5ldworCQkgKiBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwPworCQkg
Ki8KKwkJYXNvYy0+bGFzdF9yZXZva2VfY291bnQgPSBjbnQ7CisJCSh2b2lkKVNDVFBfT1NfVElN
RVJfU1RPUCgmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKTsKKwkJLypzYV9pZ25vcmUgTk9f
TlVMTF9DSEsqLworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9N
X0RSQUlOLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwkvKgorCSAqIEFub3RoZXIgaXNzdWUs
IGluIHVuLXNldHRpbmcgdGhlIFRTTidzIGluIHRoZSBtYXBwaW5nIGFycmF5IHdlCisJICogRElE
IE5PVCBhZGp1c3QgdGhlIGhpZ2hlc3RfdHNuIG1hcmtlci4gIFRoaXMgd2lsbCBjYXVzZSBvbmUg
b2YgdHdvCisJICogdGhpbmdzIHRvIG9jY3VyLiBJdCBtYXkgY2F1c2UgdXMgdG8gZG8gZXh0cmEg
d29yayBpbiBjaGVja2luZyBmb3IKKwkgKiBvdXIgbWFwcGluZyBhcnJheSBtb3ZlbWVudC4gTW9y
ZSBpbXBvcnRhbnRseSBpdCBtYXkgY2F1c2UgdXMgdG8KKwkgKiBTQUNLIGV2ZXJ5IGRhdGFncmFt
LiBUaGlzIG1heSBub3QgYmUgYSBiYWQgdGhpbmcgdGhvdWdoIHNpbmNlIHdlCisJICogd2lsbCBy
ZWNvdmVyIG9uY2Ugd2UgZ2V0IG91ciBjdW0tYWNrIGFib3ZlIGFuZCBhbGwgdGhpcyBzdHVmZiB3
ZQorCSAqIGR1bXBlZCByZWNvdmVyZWQuCisJICovCit9CisKK3ZvaWQKK3NjdHBfZHJhaW4oKQor
eworCS8qCisJICogV2UgbXVzdCB3YWxrIHRoZSBQQ0IgbGlzdHMgZm9yIEFMTCBhc3NvY2lhdGlv
bnMgaGVyZS4gVGhlIHN5c3RlbQorCSAqIGlzIExPVyBvbiBNQlVGJ3MgYW5kIG5lZWRzIGhlbHAu
IFRoaXMgaXMgd2hlcmUgcmVuZWdpbmcgd2lsbAorCSAqIG9jY3VyLiBXZSByZWFsbHkgaG9wZSB0
aGlzIGRvZXMgTk9UIGhhcHBlbiEKKwkgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlWTkVUX0lURVJBVE9SX0RFQ0wodm5ldF9pdGVy
KTsKKyNlbHNlCisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2I7CisKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxscyk7CisJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgeworCQlyZXR1cm47CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAxMDAwCisJVk5FVF9MSVNUX1JMT0NLX05PU0xFRVAoKTsKKwlWTkVUX0ZPUkVBQ0godm5ldF9p
dGVyKSB7CisJCUNVUlZORVRfU0VUKHZuZXRfaXRlcik7CisJCXN0cnVjdCBzY3RwX2lucGNiICpp
bnA7CisJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kb19kcmFpbikgPT0gMCkgeworI2lmZGVmIFZJTUFHRQorCQkJY29udGludWU7CisjZWxzZQor
CQkJcmV0dXJuOworI2VuZGlmCisJCX0KKyNlbmRpZgorCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7
CisJCUxJU1RfRk9SRUFDSChpbnAsICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlz
dCkgeworCQkJLyogRm9yIGVhY2ggZW5kcG9pbnQgKi8KKwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
CisJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlz
dCkgeworCQkJCS8qIEZvciBlYWNoIGFzc29jaWF0aW9uICovCisJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCQlzY3RwX2RyYWluX21idWZzKHN0Y2IpOworCQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCX0KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJfQorCQlTQ1RQX0lOUF9J
TkZPX1JVTkxPQ0soKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA4MDEwMDAKKwkJQ1VSVk5FVF9SRVNUT1JFKCk7CisJfQorCVZORVRfTElTVF9SVU5M
T0NLX05PU0xFRVAoKTsKKyNlbmRpZgorfQorCisvKgorICogc3RhcnQgYSBuZXcgaXRlcmF0b3IK
KyAqIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGVuZHBvaW50cyBhbmQgYXNzb2NpYXRpb25zIGJhc2Vk
IG9uIHRoZSBwY2Jfc3RhdGUKKyAqIGZsYWdzIGFuZCBhc29jX3N0YXRlLiAgImFmIiAobWFuZGF0
b3J5KSBpcyBleGVjdXRlZCBmb3IgYWxsIG1hdGNoaW5nCisgKiBhc3NvY3MgYW5kICJlZiIgKG9w
dGlvbmFsKSBpcyBleGVjdXRlZCB3aGVuIHRoZSBpdGVyYXRvciBjb21wbGV0ZXMuCisgKiAiaW5w
ZiIgKG9wdGlvbmFsKSBpcyBleGVjdXRlZCBmb3IgZWFjaCBuZXcgZW5kcG9pbnQgYXMgaXQgaXMg
YmVpbmcKKyAqIGl0ZXJhdGVkIHRocm91Z2guIGlucGUgKG9wdGlvbmFsKSBpcyBjYWxsZWQgd2hl
biB0aGUgaW5wIGNvbXBsZXRlcworICogaXRzIHdheSB0aHJvdWdoIGFsbCB0aGUgc3RjYnMuCisg
Ki8KK2ludAorc2N0cF9pbml0aWF0ZV9pdGVyYXRvcihpbnBfZnVuYyBpbnBmLAorCQkgICAgICAg
YXNvY19mdW5jIGFmLAorCQkgICAgICAgaW5wX2Z1bmMgaW5wZSwKKwkJICAgICAgIHVpbnQzMl90
IHBjYl9zdGF0ZSwKKwkJICAgICAgIHVpbnQzMl90IHBjYl9mZWF0dXJlcywKKwkJICAgICAgIHVp
bnQzMl90IGFzb2Nfc3RhdGUsCisJCSAgICAgICB2b2lkICphcmdwLAorCQkgICAgICAgdWludDMy
X3QgYXJnaSwKKwkJICAgICAgIGVuZF9mdW5jIGVmLAorCQkgICAgICAgc3RydWN0IHNjdHBfaW5w
Y2IgKnNfaW5wLAorCQkgICAgICAgdWludDhfdCBjaHVua19vdXRwdXRfb2ZmKQoreworCXN0cnVj
dCBzY3RwX2l0ZXJhdG9yICppdCA9IE5VTEw7CisKKwlpZiAoYWYgPT0gTlVMTCkgeworCQlyZXR1
cm4gKC0xKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09
IDApIHsKKwkJU0NUUF9QUklOVEYoIiVzOiBhYm9ydCBvbiBpbml0aWFsaXplIGJlaW5nICVkXG4i
LCBfX2Z1bmNfXywKKwkJICAgICAgICAgICAgU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFs
aXplZCkpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJU0NUUF9NQUxMT0MoaXQsIHN0cnVjdCBzY3Rw
X2l0ZXJhdG9yICosIHNpemVvZihzdHJ1Y3Qgc2N0cF9pdGVyYXRvciksCisJCSAgICBTQ1RQX01f
SVRFUik7CisJaWYgKGl0ID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT01FTSk7CisJCXJldHVybiAoRU5PTUVN
KTsKKwl9CisJbWVtc2V0KGl0LCAwLCBzaXplb2YoKml0KSk7CisJaXQtPmZ1bmN0aW9uX2Fzc29j
ID0gYWY7CisJaXQtPmZ1bmN0aW9uX2lucCA9IGlucGY7CisJaWYgKGlucGYpCisJCWl0LT5kb25l
X2N1cnJlbnRfZXAgPSAwOworCWVsc2UKKwkJaXQtPmRvbmVfY3VycmVudF9lcCA9IDE7CisJaXQt
PmZ1bmN0aW9uX2F0ZW5kID0gZWY7CisJaXQtPnBvaW50ZXIgPSBhcmdwOworCWl0LT52YWwgPSBh
cmdpOworCWl0LT5wY2JfZmxhZ3MgPSBwY2Jfc3RhdGU7CisJaXQtPnBjYl9mZWF0dXJlcyA9IHBj
Yl9mZWF0dXJlczsKKwlpdC0+YXNvY19zdGF0ZSA9IGFzb2Nfc3RhdGU7CisJaXQtPmZ1bmN0aW9u
X2lucF9lbmQgPSBpbnBlOworCWl0LT5ub19jaHVua19vdXRwdXQgPSBjaHVua19vdXRwdXRfb2Zm
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAw
MAorCWl0LT52biA9IGN1cnZuZXQ7CisjZW5kaWYKKwlpZiAoc19pbnApIHsKKwkJLyogQXNzdW1l
IGxvY2sgaXMgaGVsZCBoZXJlICovCisJCWl0LT5pbnAgPSBzX2lucDsKKwkJU0NUUF9JTlBfSU5D
Ul9SRUYoaXQtPmlucCk7CisJCWl0LT5pdGVyYXRvcl9mbGFncyA9IFNDVFBfSVRFUkFUT1JfRE9f
U0lOR0xFX0lOUDsKKwl9IGVsc2UgeworCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCWl0LT5p
bnAgPSBMSVNUX0ZJUlNUKCZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCkpOworCQlpZiAoaXQtPmlu
cCkgeworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCX0KKwkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7CisJCWl0LT5pdGVyYXRvcl9mbGFncyA9IFNDVFBfSVRFUkFUT1JfRE9fQUxM
X0lOUDsKKworCX0KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCk7CisJaWYgKFNDVFBfQkFT
RV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKKwkJU0NUUF9JUElfSVRFUkFUT1Jf
V1FfVU5MT0NLKCk7CisJCVNDVFBfUFJJTlRGKCIlczogcm9sbGJhY2sgb24gaW5pdGlhbGl6ZSBi
ZWluZyAlZCBpdD0lcFxuIiwgX19mdW5jX18sCisJCSAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIo
c2N0cF9wY2JfaW5pdGlhbGl6ZWQpLCBpdCk7CisJCVNDVFBfRlJFRShpdCwgU0NUUF9NX0lURVIp
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJVEFJTFFfSU5TRVJUX1RBSUwoJnNjdHBfaXRfY3RsLml0
ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7CisJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9y
X3J1bm5pbmcgPT0gMCkgeworCQlzY3RwX3dha2V1cF9pdGVyYXRvcigpOworCX0KKwlTQ1RQX0lQ
SV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKKwkvKiBzYV9pZ25vcmUgTUVNTEVBSyB7bWVtb3J5IGlz
IHB1dCBvbiB0aGUgdGFpbHEgZm9yIHRoZSBpdGVyYXRvcn0gKi8KKwlyZXR1cm4gKDApOworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zNDg4MTg2M2ZmYWExN2IyMWE1MGU1Nzk0MzQxNDJh
YzMyZjU4YmQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9w
Y2IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaApAQCAtMCww
ICsxLDg4NyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3BjYi5oIDMyNTM3MCAyMDE3LTExLTAzIDIwOjQ2
OjEyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9QQ0JfSF8K
KyNkZWZpbmUgX05FVElORVRfU0NUUF9QQ0JfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9v
cy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9j
b25zdGFudHMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisKK0xJU1RfSEVB
RChzY3RwcGNiaGVhZCwgc2N0cF9pbnBjYik7CitMSVNUX0hFQUQoc2N0cGFzb2NoZWFkLCBzY3Rw
X3RjYik7CitMSVNUX0hFQUQoc2N0cGxhZGRyLCBzY3RwX2xhZGRyKTsKK0xJU1RfSEVBRChzY3Rw
dnRhZ2hlYWQsIHNjdHBfdGFnYmxvY2spOworTElTVF9IRUFEKHNjdHBfdnJmbGlzdCwgc2N0cF92
cmYpOworTElTVF9IRUFEKHNjdHBfaWZubGlzdCwgc2N0cF9pZm4pOworTElTVF9IRUFEKHNjdHBf
aWZhbGlzdCwgc2N0cF9pZmEpOworVEFJTFFfSEVBRChzY3RwX3JlYWRoZWFkLCBzY3RwX3F1ZXVl
ZF90b19yZWFkKTsKK1RBSUxRX0hFQUQoc2N0cF9zdHJlYW1oZWFkLCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nKTsKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zdHJ1Y3RzLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKworI2RlZmluZSBTQ1RQX1BDQkhBU0hfQUxMQUREUihw
b3J0LCBtYXNrKSAocG9ydCAmIG1hc2spCisjZGVmaW5lIFNDVFBfUENCSEFTSF9BU09DKHRhZywg
bWFzaykgKHRhZyAmIG1hc2spCisKK3N0cnVjdCBzY3RwX3ZyZiB7CisJTElTVF9FTlRSWSAoc2N0
cF92cmYpIG5leHRfdnJmOworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKnZyZl9hZGRyX2hhc2g7CisJ
c3RydWN0IHNjdHBfaWZubGlzdCBpZm5saXN0OworCXVpbnQzMl90IHZyZl9pZDsKKwl1aW50MzJf
dCB0YmxfaWRfdjQ7CQkvKiBkZWZhdWx0IHY0IHRhYmxlIGlkICovCisJdWludDMyX3QgdGJsX2lk
X3Y2OwkJLyogZGVmYXVsdCB2NiB0YWJsZSBpZCAqLworCXVpbnQzMl90IHRvdGFsX2lmYV9jb3Vu
dDsKKwl1X2xvbmcgICB2cmZfYWRkcl9oYXNobWFyazsKKwl1aW50MzJfdCByZWZjb3VudDsKK307
CisKK3N0cnVjdCBzY3RwX2lmbiB7CisJc3RydWN0IHNjdHBfaWZhbGlzdCBpZmFsaXN0OworCXN0
cnVjdCBzY3RwX3ZyZiAqdnJmOworCUxJU1RfRU5UUlkoc2N0cF9pZm4pIG5leHRfaWZuOworCUxJ
U1RfRU5UUlkoc2N0cF9pZm4pIG5leHRfYnVja2V0OworCXZvaWQgICAgICppZm5fcDsJLyogbmV2
ZXIgYWNjZXNzIHdpdGhvdXQgYXBwcm9wcmlhdGUgbG9jayAqLworCXVpbnQzMl90IGlmbl9tdHU7
CisJdWludDMyX3QgaWZuX3R5cGU7CisJdWludDMyX3QgaWZuX2luZGV4OwkvKiBzaG9ydGhhbmQg
d2F5IHRvIGxvb2sgYXQgaWZuIGZvciByZWZlcmVuY2UgKi8KKwl1aW50MzJfdCByZWZjb3VudDsJ
LyogbnVtYmVyIG9mIHJlZmVyZW5jZSBoZWxkIHNob3VsZCBiZSA+PSBpZmFfY291bnQgKi8KKwl1
aW50MzJfdCBpZmFfY291bnQ7CS8qIElGQSdzIHdlIGhvbGQgKGluIG91ciBsaXN0IC0gaWZhbGlz
dCkqLworCXVpbnQzMl90IG51bV92NjsJLyogbnVtYmVyIG9mIHY2IGFkZHJlc3NlcyAqLworCXVp
bnQzMl90IG51bV92NDsJLyogbnVtYmVyIG9mIHY0IGFkZHJlc3NlcyAqLworCXVpbnQzMl90IHJl
Z2lzdGVyZWRfYWY7CS8qIHJlZ2lzdGVyZWQgYWRkcmVzcyBmYW1pbHkgZm9yIGkvZiBldmVudHMg
Ki8KKwljaGFyICAgICBpZm5fbmFtZVtTQ1RQX0lGTkFNU0laXTsKK307CisKKy8qIFNDVFAgbG9j
YWwgSUZBIGZsYWdzICovCisjZGVmaW5lIFNDVFBfQUREUl9WQUxJRCAgICAgICAgIDB4MDAwMDAw
MDEJLyogaXRzIHVwIGFuZCBhY3RpdmUgKi8KKyNkZWZpbmUgU0NUUF9CRUlOR19ERUxFVEVEICAg
ICAgMHgwMDAwMDAwMgkvKiBiZWluZyBkZWxldGVkLAorCQkJCQkJICogd2hlbiByZWZjb3VudCA9
IDAuIE5vdGUKKwkJCQkJCSAqIHRoYXQgaXQgaXMgcHVsbGVkIGZyb20gdGhlIGlmbiBsaXN0CisJ
CQkJCQkgKiBhbmQgaWZhX3AgaXMgbnVsbGVkIHJpZ2h0IGF3YXkgYnV0CisJCQkJCQkgKiBpdCBj
YW5ub3QgYmUgZnJlZWQgdW50aWwgdGhlIGxhc3QgKm5ldAorCQkJCQkJICogcG9pbnRpbmcgdG8g
aXQgaXMgZGVsZXRlZC4KKwkJCQkJCSAqLworI2RlZmluZSBTQ1RQX0FERFJfREVGRVJfVVNFICAg
ICAweDAwMDAwMDA0CS8qIEhvbGQgb2ZmIHVzaW5nIHRoaXMgb25lICovCisjZGVmaW5lIFNDVFBf
QUREUl9JRkFfVU5VU0VBQkxFIDB4MDAwMDAwMDgKKworc3RydWN0IHNjdHBfaWZhIHsKKwlMSVNU
X0VOVFJZKHNjdHBfaWZhKSBuZXh0X2lmYTsKKwlMSVNUX0VOVFJZKHNjdHBfaWZhKSBuZXh0X2J1
Y2tldDsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKmlmbl9wOwkvKiBiYWNrIHBvaW50ZXIgdG8gcGFyZW50
IGlmbiAqLworCXZvaWQgICAgKmlmYTsJCS8qIHBvaW50ZXIgdG8gaWZhLCBuZWVkZWQgZm9yIGZs
YWcKKwkJCQkgKiB1cGRhdGUgZm9yIHRoYXQgd2UgTVVTVCBsb2NrCisJCQkJICogYXBwcm9wcmlh
dGUgbG9ja3MuIFRoaXMgaXMgZm9yIFY2LgorCQkJCSAqLworCXVuaW9uIHNjdHBfc29ja3N0b3Jl
IGFkZHJlc3M7CisJdWludDMyX3QgcmVmY291bnQ7CS8qIG51bWJlciBvZiBmb2xrcyByZWZlcnJp
bmcgdG8gdGhpcyAqLworCXVpbnQzMl90IGZsYWdzOworCXVpbnQzMl90IGxvY2FsaWZhX2ZsYWdz
OworCXVpbnQzMl90IHZyZl9pZDsJLyogdnJmX2lkIG9mIHRoaXMgYWRkciAoZm9yIGRlbGV0aW5n
KSAqLworCXVpbnQ4X3Qgc3JjX2lzX2xvb3A7CisJdWludDhfdCBzcmNfaXNfcHJpdjsKKwl1aW50
OF90IHNyY19pc19nbG9iOworCXVpbnQ4X3QgcmVzdjsKK307CisKK3N0cnVjdCBzY3RwX2xhZGRy
IHsKKwlMSVNUX0VOVFJZKHNjdHBfbGFkZHIpIHNjdHBfbnh0X2FkZHI7CS8qIG5leHQgaW4gbGlz
dCAqLworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXVpbnQzMl90IGFjdGlvbjsJCS8qIFVzZWQg
ZHVyaW5nIGFzY29uZiBhbmQgYWRkaW5nCisJCQkJCSAqIGlmIG5vLXplcm8gc3JjLWFkZHIgc2Vs
ZWN0aW9uIHdpbGwKKwkJCQkJICogbm90IGNvbnNpZGVyIHRoaXMgYWRkcmVzcy4KKwkJCQkJICov
CisJc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZTsgICAgICAvKiB0aW1lIHdoZW4gdGhpcyBhZGRy
ZXNzIHdhcyBjcmVhdGVkICovCit9OworCitzdHJ1Y3Qgc2N0cF9ibG9ja19lbnRyeSB7CisJaW50
IGVycm9yOworfTsKKworc3RydWN0IHNjdHBfdGltZXdhaXQgeworCXVpbnQzMl90IHR2X3NlY19h
dF9leHBpcmU7CS8qIHRoZSBzZWNvbmRzIGZyb20gYm9vdCB0byBleHBpcmUgKi8KKyAgICAgICAg
dWludDMyX3Qgdl90YWc7CQkgICAgICAgIC8qIHRoZSB2dGFnIHRoYXQgY2FuIG5vdCBiZSByZXVz
ZWQgKi8KKyAgICAgICAgdWludDE2X3QgbHBvcnQ7ICAgICAgICAgICAgICAgICAvKiB0aGUgbG9j
YWwgcG9ydCB1c2VkIGluIHZ0YWcgKi8KKyAgICAgICAgdWludDE2X3QgcnBvcnQ7ICAgICAgICAg
ICAgICAgICAvKiB0aGUgcmVtb3RlIHBvcnQgdXNlZCBpbiB2dGFnICovCit9OworCitzdHJ1Y3Qg
c2N0cF90YWdibG9jayB7CisJTElTVF9FTlRSWShzY3RwX3RhZ2Jsb2NrKSBzY3RwX254dF90YWdi
bG9jazsKKwlzdHJ1Y3Qgc2N0cF90aW1ld2FpdCB2dGFnX2Jsb2NrW1NDVFBfTlVNQkVSX0lOX1ZU
QUdfQkxPQ0tdOworfTsKKworCitzdHJ1Y3Qgc2N0cF9lcGluZm8geworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrZXQgKnVkcDRfdHVuX3NvY2tldDsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2tldCAqdWRwNl90dW5fc29ja2V0Owor
I2VuZGlmCisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpzY3RwX2Fzb2NoYXNoOworCXVf
bG9uZyBoYXNoYXNvY21hcms7CisKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKnNjdHBfZXBoYXNoOwor
CXVfbG9uZyBoYXNobWFyazsKKworCS8qLQorCSAqIFRoZSBUQ1AgbW9kZWwgcmVwcmVzZW50cyBh
IHN1YnN0YW50aWFsIG92ZXJoZWFkIGluIHRoYXQgd2UgZ2V0IGFuCisJICogYWRkaXRpb25hbCBo
YXNoIHRhYmxlIHRvIGtlZXAgZXhwbGljaXQgY29ubmVjdGlvbnMgaW4uIFRoZQorCSAqIGxpc3Rl
bmluZyBUQ1AgZW5kcG9pbnQgd2lsbCBleGlzdCBpbiB0aGUgdXN1YWwgZXBoYXNoIGFib3ZlIGFu
ZAorCSAqIGFjY2VwdCBvbmx5IElOSVQncy4gSXQgd2lsbCBiZSBpbmNhcGFibGUgb2Ygc2VuZGlu
ZyBvZmYgYW4gSU5JVC4KKwkgKiBXaGVuIGEgZGcgYXJyaXZlcyB3ZSBtdXN0IGxvb2sgaW4gdGhl
IG5vcm1hbCBlcGhhc2guIElmIHdlIGZpbmQgYQorCSAqIFRDUCBlbmRwb2ludCB0aGF0IHdpbGwg
dGVsbCB1cyB0byBnbyB0byB0aGUgc3BlY2lmaWMgZW5kcG9pbnQKKwkgKiBoYXNoIGFuZCByZS1o
YXNoIHRvIGZpbmQgdGhlIHJpZ2h0IGFzc29jL3NvY2tldC4gSWYgd2UgZmluZCBhIFVEUAorCSAq
IG1vZGVsIHNvY2tldCB3ZSB0aGVuIG11c3QgY29tcGxldGUgdGhlIGxvb2t1cC4gSWYgdGhpcyBm
YWlscywKKwkgKiBpLmUuIG5vIGFzc29jaWF0aW9uIGNhbiBiZSBmb3VuZCB0aGVuIHdlIG11c3Qg
Y29udGludWUgdG8gc2VlIGlmCisJICogYSBzY3RwX3BlZWxvZmYoKSdkIHNvY2tldCBpcyBpbiB0
aGUgdGNwZXBoYXNoIChhIHNwdW4gb2ZmIHNvY2tldAorCSAqIGFjdHMgbGlrZSBhIFRDUCBtb2Rl
bCBjb25uZWN0ZWQgc29ja2V0KS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKnNjdHBfdGNw
ZXBoYXNoOworCXVfbG9uZyBoYXNodGNwbWFyazsKKwl1aW50MzJfdCBoYXNodGJsc2l6ZTsKKwor
CXN0cnVjdCBzY3RwX3ZyZmxpc3QgKnNjdHBfdnJmaGFzaDsKKwl1X2xvbmcgaGFzaHZyZm1hcms7
CisKKwlzdHJ1Y3Qgc2N0cF9pZm5saXN0ICp2cmZfaWZuX2hhc2g7CisJdV9sb25nICAgdnJmX2lm
bl9oYXNobWFyazsKKworCXN0cnVjdCBzY3RwcGNiaGVhZCBsaXN0aGVhZDsKKwlzdHJ1Y3Qgc2N0
cGxhZGRyIGFkZHJfd3E7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlzdHJ1Y3QgaW5wY2Jo
ZWFkIGlucGxpc3RoZWFkOworCXN0cnVjdCBpbnBjYmluZm8gc2N0YmluZm87CisjZW5kaWYKKwkv
KiBlcCB6b25lIGluZm8gKi8KKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9lcDsKKwlzY3RwX3pvbmVf
dCBpcGlfem9uZV9hc29jOworCXNjdHBfem9uZV90IGlwaV96b25lX2xhZGRyOworCXNjdHBfem9u
ZV90IGlwaV96b25lX25ldDsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9jaHVuazsKKwlzY3RwX3pv
bmVfdCBpcGlfem9uZV9yZWFkcTsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9zdHJtb3E7CisJc2N0
cF96b25lX3QgaXBpX3pvbmVfYXNjb25mOworCXNjdHBfem9uZV90IGlwaV96b25lX2FzY29uZl9h
Y2s7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1
MDMwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA2MDIwMDAKKwlzdHJ1Y3QgbXR4IGlwaV9l
cF9tdHg7CisjZWxzZQorCXN0cnVjdCByd2xvY2sgaXBpX2VwX210eDsKKyNlbmRpZgorCXN0cnVj
dCBtdHggaXBpX2l0ZXJhdG9yX3dxX210eDsKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA2MDIw
MDAKKwlzdHJ1Y3QgbXR4IGlwaV9hZGRyX210eDsKKyNlbHNlCisJc3RydWN0IHJ3bG9jayBpcGlf
YWRkcl9tdHg7CisjZW5kaWYKKwlzdHJ1Y3QgbXR4IGlwaV9wa3Rsb2dfbXR4OworCXN0cnVjdCBt
dHggd3FfYWRkcl9tdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykK
Kwl1c2VybGFuZF9tdXRleF90IGlwaV9lcF9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpcGlfYWRk
cl9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpcGlfY291bnRfbXR4OworCXVzZXJsYW5kX211dGV4
X3QgaXBpX3BrdGxvZ19tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCB3cV9hZGRyX210eDsKKyNlbGlm
IGRlZmluZWQoX19BUFBMRV9fKQorI2lmZGVmIF9LRVJOX0xPQ0tTX0hfCisJbGNrX210eF90ICpp
cGlfYWRkcl9tdHg7CisJbGNrX210eF90ICppcGlfY291bnRfbXR4OworCWxja19tdHhfdCAqaXBp
X3BrdGxvZ19tdHg7CisJbGNrX210eF90ICpsb2dnaW5nX210eDsKKwlsY2tfbXR4X3QgKndxX2Fk
ZHJfbXR4OworI2Vsc2UKKwl2b2lkICppcGlfY291bnRfbXR4OworCXZvaWQgKmxvZ2dpbmdfbXR4
OworI2VuZGlmIC8qIF9LRVJOX0xPQ0tTX0hfICovCisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19f
KQorCXN0cnVjdCByd2xvY2sgaXBpX2VwX2xvY2s7CisJc3RydWN0IHJ3bG9jayBpcGlfYWRkcl9s
b2NrOworCXN0cnVjdCBzcGlubG9jayBpcGlfcGt0bG9nX210eDsKKwlzdHJ1Y3Qgcndsb2NrIHdx
X2FkZHJfbXR4OworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorICAgIC8qIFRPRE8gZGVj
aWRlIG9uIF9fVXNlcnNwYWNlX18gbG9ja3MgKi8KKyNlbmRpZgorCXVpbnQzMl90IGlwaV9jb3Vu
dF9lcDsKKworCS8qIGFzc29jL3RjYiB6b25lIGluZm8gKi8KKwl1aW50MzJfdCBpcGlfY291bnRf
YXNvYzsKKworCS8qIGxvY2FsIGFkZHJsaXN0IHpvbmUgaW5mbyAqLworCXVpbnQzMl90IGlwaV9j
b3VudF9sYWRkcjsKKworCS8qIHJlbW90ZSBhZGRybGlzdCB6b25lIGluZm8gKi8KKwl1aW50MzJf
dCBpcGlfY291bnRfcmFkZHI7CisKKwkvKiBjaHVuayBzdHJ1Y3R1cmUgbGlzdCBmb3Igb3V0cHV0
ICovCisJdWludDMyX3QgaXBpX2NvdW50X2NodW5rOworCisJLyogc29ja2V0IHF1ZXVlIHpvbmUg
aW5mbyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9yZWFkcTsKKworCS8qIHNvY2tldCBxdWV1ZSB6
b25lIGluZm8gKi8KKwl1aW50MzJfdCBpcGlfY291bnRfc3RybW9xOworCisJLyogTnVtYmVyIG9m
IHZyZnMgKi8KKwl1aW50MzJfdCBpcGlfY291bnRfdnJmczsKKworICAgICAgICAvKiBOdW1iZXIg
b2YgaWZucyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9pZm5zOworCisgICAgICAgIC8qIE51bWJl
ciBvZiBpZmFzICovCisJdWludDMyX3QgaXBpX2NvdW50X2lmYXM7CisKKwkvKiBzeXN0ZW0gd2lk
ZSBudW1iZXIgb2YgZnJlZSBjaHVua3MgaGFuZ2luZyBhcm91bmQgKi8KKwl1aW50MzJfdCBpcGlf
ZnJlZV9jaHVua3M7CisJdWludDMyX3QgaXBpX2ZyZWVfc3RybW9xOworCisJc3RydWN0IHNjdHB2
dGFnaGVhZCB2dGFnX3RpbWV3YWl0W1NDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkVdOworCisJLyog
YWRkcmVzcyB3b3JrIHF1ZXVlIGhhbmRsaW5nICovCisJc3RydWN0IHNjdHBfdGltZXIgYWRkcl93
cV90aW1lcjsKKworI2lmIGRlZmluZWQoX1NDVFBfTkVFRFNfQ0FMTE9VVF8pIHx8IGRlZmluZWQo
X1VTRVJfU0NUUF9ORUVEU19DQUxMT1VUXykKKwlzdHJ1Y3QgY2FsbG91dGxpc3QgY2FsbHF1ZXVl
OworI2VuZGlmCit9OworCisKK3N0cnVjdCBzY3RwX2Jhc2VfaW5mbyB7CisJLyogQWxsIHN0YXRp
YyBzdHJ1Y3R1cmVzIHRoYXQKKwkgKiBhbmNob3IgdGhlIHN5c3RlbSBtdXN0IGJlIGhlcmUuCisJ
ICovCisJc3RydWN0IHNjdHBfZXBpbmZvIHNjdHBwY2JpbmZvOworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQor
CXN0cnVjdCBzY3Rwc3RhdCAgICAqc2N0cHN0YXQ7CisjZWxzZQorCXN0cnVjdCBzY3Rwc3RhdCAg
ICBzY3Rwc3RhdDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3N5c2N0bCBzY3Rwc3lzY3RsOworCXVp
bnQ4X3QgZmlyc3RfdGltZTsKKwljaGFyIHNjdHBfcGNiX2luaXRpYWxpemVkOworI2lmIGRlZmlu
ZWQoU0NUUF9QQUNLRVRfTE9HR0lORykKKwlpbnQgcGFja2V0X2xvZ193cml0ZXJzOworCWludCBw
YWNrZXRfbG9nX2VuZDsKKwl1aW50OF90IHBhY2tldF9sb2dfYnVmZmVyW1NDVFBfUEFDS0VUX0xP
R19TSVpFXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWludCBzY3RwX21haW5f
dGltZXJfdGlja3M7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdXNlcmxh
bmRfbXV0ZXhfdCB0aW1lcl9tdHg7CisJdXNlcmxhbmRfdGhyZWFkX3QgdGltZXJfdGhyZWFkOwor
CWludCB0aW1lcl90aHJlYWRfc2hvdWxkX2V4aXQ7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKwlwdGhyZWFkX211dGV4YXR0cl90IG10eF9hdHRyOworI2lmIGRlZmluZWQo
SU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlpbnQgdXNlcnNwYWNlX3JvdXRlOworCXVzZXJsYW5k
X3RocmVhZF90IHJlY3Z0aHJlYWRyb3V0ZTsKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5FVAor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlTT0NLRVQgdXNlcnNwYWNlX3Jh
d3NjdHA7CisJU09DS0VUIHVzZXJzcGFjZV91ZHBzY3RwOworI2Vsc2UKKwlpbnQgdXNlcnNwYWNl
X3Jhd3NjdHA7CisJaW50IHVzZXJzcGFjZV91ZHBzY3RwOworI2VuZGlmCisJdXNlcmxhbmRfdGhy
ZWFkX3QgcmVjdnRocmVhZHJhdzsKKwl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFkdWRwOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
CisJU09DS0VUIHVzZXJzcGFjZV9yYXdzY3RwNjsKKwlTT0NLRVQgdXNlcnNwYWNlX3VkcHNjdHA2
OworI2Vsc2UKKwlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA2OworCWludCB1c2Vyc3BhY2VfdWRwc2N0
cDY7CisjZW5kaWYKKwl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFkcmF3NjsKKwl1c2VybGFu
ZF90aHJlYWRfdCByZWN2dGhyZWFkdWRwNjsKKyNlbmRpZgorCWludCAoKmNvbm5fb3V0cHV0KSh2
b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50
OF90IHNldF9kZik7CisJdm9pZCAoKmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0LCAu
Li4pOworCWludCBjcmMzMmNfb2ZmbG9hZGVkOworI2VuZGlmCit9OworCisvKi0KKyAqIEhlcmUg
d2UgaGF2ZSBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBlYWNoIFNDVFAgZW50aXR5
IGNyZWF0ZWQuIFdlCisgKiB3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMgYXMgYXBwcm9wcmF0ZS4g
V2UgYWxzbyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvCisgKiBhY2Nlc3MgL2Rldi9yYW5kb20u
CisgKi8KK3N0cnVjdCBzY3RwX3BjYiB7CisJdW5zaWduZWQgaW50IHRpbWVfb2Zfc2VjcmV0X2No
YW5nZTsJLyogbnVtYmVyIG9mIHNlY29uZHMgZnJvbQorCQkJCQkJICogdGltZXZhbC50dl9zZWMg
Ki8KKwl1aW50MzJfdCBzZWNyZXRfa2V5W1NDVFBfSE9XX01BTllfU0VDUkVUU11bU0NUUF9OVU1C
RVJfT0ZfU0VDUkVUU107CisJdW5zaWduZWQgaW50IHNpemVfb2ZfYV9jb29raWU7CisKKwl1bnNp
Z25lZCBpbnQgc2N0cF90aW1lb3V0dGlja3NbU0NUUF9OVU1fVE1SU107CisJdW5zaWduZWQgaW50
IHNjdHBfbWlucnRvOworCXVuc2lnbmVkIGludCBzY3RwX21heHJ0bzsKKwl1bnNpZ25lZCBpbnQg
aW5pdGlhbF9ydG87CisJaW50IGluaXRpYWxfaW5pdF9ydG9fbWF4OworCisJdW5zaWduZWQgaW50
IHNjdHBfc2Fja19mcmVxOworCXVpbnQzMl90IHNjdHBfc3dzX3NlbmRlcjsKKwl1aW50MzJfdCBz
Y3RwX3N3c19yZWNlaXZlcjsKKworCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9jY19tb2R1bGU7CisJ
dWludDMyX3Qgc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwkvKiBhdXRoZW50aWNhdGlvbiByZWxh
dGVkIGZpZWxkcyAqLworCXN0cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVkX2tleXM7CisJc2N0cF9h
dXRoX2Noa2xpc3RfdCAqbG9jYWxfYXV0aF9jaHVua3M7CisJc2N0cF9obWFjbGlzdF90ICpsb2Nh
bF9obWFjczsKKwl1aW50MTZfdCBkZWZhdWx0X2tleWlkOworCXVpbnQzMl90IGRlZmF1bHRfbXR1
OworCisJLyogdmFyaW91cyB0aHJlc2hvbGRzICovCisJLyogTWF4IHRpbWVzIEkgd2lsbCBpbml0
IGF0IGEgZ3V5ICovCisJdWludDE2X3QgbWF4X2luaXRfdGltZXM7CisKKwkvKiBNYXggdGltZXMg
SSB3aWxsIHNlbmQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWVvbmUgZGVhZCAqLworCXVpbnQxNl90
IG1heF9zZW5kX3RpbWVzOworCisJdWludDE2X3QgZGVmX25ldF9mYWlsdXJlOworCisJdWludDE2
X3QgZGVmX25ldF9wZl90aHJlc2hvbGQ7CisKKwkvKiBudW1iZXIgb2Ygc3RyZWFtcyB0byBwcmUt
b3BlbiBvbiBhIGFzc29jaWF0aW9uICovCisJdWludDE2X3QgcHJlX29wZW5fc3RyZWFtX2NvdW50
OworCXVpbnQxNl90IG1heF9vcGVuX3N0cmVhbXNfaW50b21lOworCisJLyogcmFuZG9tIG51bWJl
ciBnZW5lcmF0b3IgKi8KKwl1aW50MzJfdCByYW5kb21fY291bnRlcjsKKwl1aW50OF90IHJhbmRv
bV9udW1iZXJzW1NDVFBfU0lHTkFUVVJFX0FMT0NfU0laRV07CisJdWludDhfdCByYW5kb21fc3Rv
cmVbU0NUUF9TSUdOQVRVUkVfQUxPQ19TSVpFXTsKKworCS8qCisJICogVGhpcyB0aW1lciBpcyBr
ZXB0IHJ1bm5pbmcgcGVyIGVuZHBvaW50LiAgV2hlbiBpdCBmaXJlcyBpdCB3aWxsCisJICogY2hh
bmdlIHRoZSBzZWNyZXQga2V5LiAgVGhlIGRlZmF1bHQgaXMgb25jZSBhIGhvdXIKKwkgKi8KKwlz
dHJ1Y3Qgc2N0cF90aW1lciBzaWduYXR1cmVfY2hhbmdlOworCisJdWludDMyX3QgZGVmX2Nvb2tp
ZV9saWZlOworCS8qIGRlZmF1bHRzIHRvIDAgKi8KKwlpbnQgYXV0b19jbG9zZV90aW1lOworCXVp
bnQzMl90IGluaXRpYWxfc2VxdWVuY2VfZGVidWc7CisJdWludDMyX3QgYWRhcHRhdGlvbl9sYXll
cl9pbmRpY2F0b3I7CisJdWludDhfdCBhZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcl9wcm92aWRl
ZDsKKwl1aW50MzJfdCBzdG9yZV9hdDsKKwl1aW50MzJfdCBtYXhfYnVyc3Q7CisJdWludDMyX3Qg
ZnJfbWF4X2J1cnN0OworI2lmZGVmIElORVQ2CisJdWludDMyX3QgZGVmYXVsdF9mbG93bGFiZWw7
CisjZW5kaWYKKwl1aW50OF90IGRlZmF1bHRfZHNjcDsKKwljaGFyIGN1cnJlbnRfc2VjcmV0X251
bWJlcjsKKwljaGFyIGxhc3Rfc2VjcmV0X251bWJlcjsKKwl1aW50MTZfdCBwb3J0OyAvKiByZW1v
dGUgVURQIGVuY2Fwc3VsYXRpb24gcG9ydCAqLworfTsKKworI2lmbmRlZiBTQ1RQX0FMSUdOTUVO
VAorI2RlZmluZSBTQ1RQX0FMSUdOTUVOVCAzMgorI2VuZGlmCisKKyNpZm5kZWYgU0NUUF9BTElH
Tk0xCisjZGVmaW5lIFNDVFBfQUxJR05NMSAoU0NUUF9BTElHTk1FTlQtMSkKKyNlbmRpZgorCisj
ZGVmaW5lIHNjdHBfbHBvcnQgaXBfaW5wLmlucC5pbnBfbHBvcnQKKworc3RydWN0IHNjdHBfcGNi
dHNuX3Jsb2cgeworCXVpbnQzMl90IHZ0YWc7CisJdWludDE2X3Qgc3RybTsKKwl1aW50MTZfdCBz
ZXE7CisJdWludDE2X3Qgc3o7CisJdWludDE2X3QgZmxnczsKK307CisjZGVmaW5lIFNDVFBfUkVB
RF9MT0dfU0laRSAxMzUJLyogd2UgY2hvb3NlIHRoZSBudW1iZXIgdG8gbWFrZSBhIHBjYiBhIHBh
Z2UgKi8KKworCitzdHJ1Y3Qgc2N0cF9pbnBjYiB7CisJLyotCisJICogcHV0IGFuIGlucGNiIGlu
IGZyb250IG9mIGl0IGFsbCwga2luZCBvZiBhIHdhc3RlIGJ1dCB3ZSBuZWVkIHRvCisJICogZm9y
IGNvbXBhdGliaWxpdHkgd2l0aCBhbGwgdGhlIG90aGVyIHN0dWZmLgorCSAqLworCXVuaW9uIHsK
KwkJc3RydWN0IGlucGNiIGlucDsKKwkJY2hhciBhbGlnblsoc2l6ZW9mKHN0cnVjdCBpbjZwY2Ip
ICsgU0NUUF9BTElHTk0xKSAmCisJCSAgICAgICAgflNDVFBfQUxJR05NMV07CisJfSAgICAgaXBf
aW5wOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJLyogbGVhdmUgc29tZSBzcGFjZSBpbiBj
YXNlIGkzODYgaW5wY2IgaXMgYmlnZ2VyIHRoYW4gcHBjICovCisJdWludDhfdAkJcGFkZGluZ1sx
MjhdOworI2VuZGlmCisKKwkvKiBTb2NrZXQgYnVmZmVyIGxvY2sgcHJvdGVjdHMgcmVhZF9xdWV1
ZSBhbmQgb2YgY291cnNlIHNiX2NjICovCisJc3RydWN0IHNjdHBfcmVhZGhlYWQgcmVhZF9xdWV1
ZTsKKworCUxJU1RfRU5UUlkoc2N0cF9pbnBjYikgc2N0cF9saXN0OwkvKiBsaXN0cyBhbGwgZW5k
cG9pbnRzICovCisgICAgICAgIC8qIGhhc2ggb2YgYWxsIGVuZHBvaW50cyBmb3IgbW9kZWwgKi8K
KwlMSVNUX0VOVFJZKHNjdHBfaW5wY2IpIHNjdHBfaGFzaDsKKwkvKiBjb3VudCBvZiBsb2NhbCBh
ZGRyZXNzZXMgYm91bmQsIDAgaWYgYm91bmQgYWxsICovCisJaW50IGxhZGRyX2NvdW50OworCisJ
LyogbGlzdCBvZiBhZGRycyBpbiB1c2UgYnkgdGhlIEVQLCBOVUxMIGlmIGJvdW5kLWFsbCAqLwor
CXN0cnVjdCBzY3RwbGFkZHIgc2N0cF9hZGRyX2xpc3Q7CisJLyogdXNlZCBmb3Igc291cmNlIGFk
ZHJlc3Mgc2VsZWN0aW9uIHJvdGF0aW9uIHdoZW4gd2UgYXJlIHN1YnNldCBib3VuZCAqLworCXN0
cnVjdCBzY3RwX2xhZGRyICpuZXh0X2FkZHJfdG91c2U7CisKKwkvKiBiYWNrIHBvaW50ZXIgdG8g
b3VyIHNvY2tldCAqLworCXN0cnVjdCBzb2NrZXQgKnNjdHBfc29ja2V0OworCXVpbnQ2NF90IHNj
dHBfZmVhdHVyZXM7CS8qIEZlYXR1cmUgZmxhZ3MgKi8KKwl1aW50MzJfdCBzY3RwX2ZsYWdzOwkv
KiBJTlAgc3RhdGUgZmxhZyBzZXQgKi8KKwl1aW50MzJfdCBzY3RwX21vYmlsaXR5X2ZlYXR1cmVz
OyAvKiBNb2JpbGl0eSAgRmVhdHVyZSBmbGFncyAqLworCXN0cnVjdCBzY3RwX3BjYiBzY3RwX2Vw
Oy8qIFNDVFAgZXAgZGF0YSAqLworCS8qIGhlYWQgb2YgdGhlIGhhc2ggb2YgYWxsIGFzc29jaWF0
aW9ucyAqLworCXN0cnVjdCBzY3RwYXNvY2hlYWQgKnNjdHBfdGNiaGFzaDsKKwl1X2xvbmcgc2N0
cF9oYXNobWFyazsKKwkvKiBoZWFkIG9mIHRoZSBsaXN0IG9mIGFsbCBhc3NvY2lhdGlvbnMgKi8K
KwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkIHNjdHBfYXNvY19saXN0OworI2lmZGVmIFNDVFBfVFJBQ0tf
RlJFRURfQVNPQ1MKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkIHNjdHBfYXNvY19mcmVlX2xpc3Q7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaW5wX3N0YXJ0aW5nX3BvaW50X2Zvcl9pdGVy
YXRvcjsKKwl1aW50MzJfdCBzY3RwX2ZyYWdfcG9pbnQ7CisJdWludDMyX3QgcGFydGlhbF9kZWxp
dmVyeV9wb2ludDsKKwl1aW50MzJfdCBzY3RwX2NvbnRleHQ7CisJdWludDMyX3QgbWF4X2N3bmQ7
CisJdWludDhfdCBsb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCXVpbnQzMl90IHNjdHBfY210X29u
X29mZjsKKwl1aW50OF90IGVjbl9zdXBwb3J0ZWQ7CisJdWludDhfdCBwcnNjdHBfc3VwcG9ydGVk
OworCXVpbnQ4X3QgYXV0aF9zdXBwb3J0ZWQ7CisJdWludDhfdCBpZGF0YV9zdXBwb3J0ZWQ7CisJ
dWludDhfdCBhc2NvbmZfc3VwcG9ydGVkOworCXVpbnQ4X3QgcmVjb25maWdfc3VwcG9ydGVkOwor
CXVpbnQ4X3QgbnJzYWNrX3N1cHBvcnRlZDsKKwl1aW50OF90IHBrdGRyb3Bfc3VwcG9ydGVkOwor
CXN0cnVjdCBzY3RwX25vbnBhZF9zbmRyY3ZpbmZvIGRlZl9zZW5kOworCS8qLQorCSAqIFRoZXNl
IHRocmVlIGFyZSBoZXJlIGZvciB0aGUgc29zZW5kX2RncmFtCisJICogKHBrdCwgcGt0X2xhc3Qg
YW5kIGNvbnRyb2wpLgorCSAqIHJvdXRpbmUuIEhvd2V2ZXIsIEkgZG9uJ3QgdGhpbmsgYW55b25l
IGluCisJICogdGhlIGN1cnJlbnQgRnJlZUJTRCBrZXJuZWwgY2FsbHMgdGhpcy4gU28KKwkgKiB0
aGV5IGFyZSBjYW5kaWRhdGVzIHdpdGggc2N0cF9zZW5kbSBmb3IKKwkgKiBkZS1zdXBwb3J0aW5n
LgorCSAqLworI2lmZGVmIF9fUGFuZGFfXworCXBha2hhbmRsZV90eXBlIHBha190b19yZWFkOwor
CXBha2hhbmRsZV90eXBlIHBha190b19yZWFkX3NlbmRxOworI2VuZGlmCisJc3RydWN0IG1idWYg
KnBrdCwgKnBrdF9sYXN0OworCXN0cnVjdCBtYnVmICpjb250cm9sOworI2lmICEoZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18p
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisjaWZuZGVmIElOUF9JUFY2CisjZGVmaW5lIElO
UF9JUFY2CTB4MQorI2VuZGlmCisjaWZuZGVmIElOUF9JUFY0CisjZGVmaW5lIElOUF9JUFY0CTB4
MgorI2VuZGlmCisJdWludDhfdCBpbnBfdmZsYWc7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLyogVE9ETyBfX1VzZXJzcGFjZV9fIHdoZXJlIGlzIG91ciBpbnBfdmxhZyBnb2luZyB0
byBiZT8gKi8KKwl1aW50OF90IGlucF9pcF90dGw7CisgICAgICAgIHVpbnQ4X3QgaW5wX2lwX3Rv
czsgICAgLyogZGVmaW5lZCBhcyBtYWNybyBpbiB1c2VyX2lucGNiLmggKi8KKwl1aW50OF90IGlu
cF9pcF9yZXN2OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gNTAzMDAwCisJc3RydWN0IG10eCBpbnBfbXR4OworCXN0cnVjdCBtdHggaW5w
X2NyZWF0ZV9tdHg7CisJc3RydWN0IG10eCBpbnBfcmRhdGFfbXR4OworCWludDMyX3QgcmVmY291
bnQ7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKKwl1c2VybGFuZF9t
dXRleF90IGlucF9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpbnBfY3JlYXRlX210eDsKKwl1c2Vy
bGFuZF9tdXRleF90IGlucF9yZGF0YV9tdHg7CisJaW50MzJfdCByZWZjb3VudDsKKyNlbGlmIGRl
ZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoU0NUUF9BUFBMRV9SV0xPQ0spCisJbGNrX3J3
X3QgKmlucF9tdHg7CisjZWxzZQorCWxja19tdHhfdCAqaW5wX210eDsKKyNlbmRpZgorCWxja19t
dHhfdCAqaW5wX2NyZWF0ZV9tdHg7CisJbGNrX210eF90ICppbnBfcmRhdGFfbXR4OworI2VsaWYg
ZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzdHJ1Y3Qgcndsb2NrIGlucF9sb2NrOworCXN0cnVjdCBz
cGlubG9jayBpbnBfY3JlYXRlX2xvY2s7CisJc3RydWN0IHNwaW5sb2NrIGlucF9yZGF0YV9sb2Nr
OworCWludDMyX3QgcmVmY291bnQ7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAg
LyogVE9ETyBkZWNpZGUgb24gX19Vc2Vyc3BhY2VfXyBsb2NrcyAqLworCWludDMyX3QgcmVmY291
bnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpbnQzMl90IHJlZmNvdW50Owor
CisJdWludDMyX3QgbG9ja19jYWxsZXIxOworCXVpbnQzMl90IGxvY2tfY2FsbGVyMjsKKwl1aW50
MzJfdCBsb2NrX2NhbGxlcjM7CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjE7CisJdWludDMyX3Qg
dW5sb2NrX2NhbGxlcjI7CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjM7CisJdWludDMyX3QgZ2V0
bG9ja19jYWxsZXIxOworCXVpbnQzMl90IGdldGxvY2tfY2FsbGVyMjsKKwl1aW50MzJfdCBnZXRs
b2NrX2NhbGxlcjM7CisJdWludDMyX3QgZ2VuX2NvdW50OworCXVpbnQzMl90IGxvY2tfZ2VuX2Nv
dW50OworCXVpbnQzMl90IHVubG9ja19nZW5fY291bnQ7CisJdWludDMyX3QgZ2V0bG9ja19nZW5f
Y291bnQ7CisKKwl1aW50MzJfdCBpX2FtX2hlcmVfZmlsZTsKKwl1aW50MzJfdCBpX2FtX2hlcmVf
bGluZTsKKyNlbmRpZgorCXVpbnQzMl90IGRlZl92cmZfaWQ7CisJdWludDE2X3QgZmlibnVtOwor
I2lmZGVmIFNDVFBfTVZSRgorCXVpbnQzMl90ICptX3ZyZl9pZHM7CisJdWludDMyX3QgbnVtX3Zy
ZnM7CisJdWludDMyX3QgdnJmX3NpemU7CisjZW5kaWYKKwl1aW50MzJfdCB0b3RhbF9zZW5kczsK
Kwl1aW50MzJfdCB0b3RhbF9yZWN2czsKKwl1aW50MzJfdCBsYXN0X2Fib3J0X2NvZGU7CisJdWlu
dDMyX3QgdG90YWxfbm9zcGFjZXM7CisJc3RydWN0IHNjdHBhc29jaGVhZCAqc2N0cF9hc29jaWRo
YXNoOworCXVfbG9uZyBoYXNoYXNvY2lkbWFyazsKKyAgICAgICAgdWludDMyX3Qgc2N0cF9hc3Nv
Y2lkX2NvdW50ZXI7CisKKyNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXN0cnVjdCBzY3Rw
X3BjYnRzbl9ybG9nIHJlYWRsb2dbU0NUUF9SRUFEX0xPR19TSVpFXTsKKwl1aW50MzJfdCByZWFk
bG9nX2luZGV4OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXZvaWQgKnVs
cF9pbmZvOworCWludCAoKnJlY3ZfY2FsbGJhY2spKHN0cnVjdCBzb2NrZXQgKiwgdW5pb24gc2N0
cF9zb2Nrc3RvcmUsIHZvaWQgKiwgc2l6ZV90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvLCBpbnQsIHZvaWQgKik7CisJdWludDMyX3Qgc2VuZF9zYl90
aHJlc2hvbGQ7CisJaW50ICgqc2VuZF9jYWxsYmFjaykoc3RydWN0IHNvY2tldCAqLCB1aW50MzJf
dCk7CisjZW5kaWYKK307CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgcmVnaXN0
ZXJfcmVjdl9jYiAoc3RydWN0IHNvY2tldCAqLAorICAgICAgICAgICAgICAgICAgICAgIGludCAo
Kikoc3RydWN0IHNvY2tldCAqLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSwgdm9pZCAqLCBzaXplX3Qs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvLCBpbnQs
IHZvaWQgKikpOworaW50IHJlZ2lzdGVyX3NlbmRfY2IgKHN0cnVjdCBzb2NrZXQgKiwgdWludDMy
X3QsIGludCAoKikoc3RydWN0IHNvY2tldCAqLCB1aW50MzJfdCkpOworaW50IHJlZ2lzdGVyX3Vs
cF9pbmZvIChzdHJ1Y3Qgc29ja2V0ICosIHZvaWQgKik7CisKKyNlbmRpZgorc3RydWN0IHNjdHBf
dGNiIHsKKwlzdHJ1Y3Qgc29ja2V0ICpzY3RwX3NvY2tldDsJLyogYmFjayBwb2ludGVyIHRvIHNv
Y2tldCAqLworCXN0cnVjdCBzY3RwX2lucGNiICpzY3RwX2VwOwkvKiBiYWNrIHBvaW50ZXIgdG8g
ZXAgKi8KKwlMSVNUX0VOVFJZKHNjdHBfdGNiKSBzY3RwX3RjYmhhc2g7CS8qIG5leHQgbGluayBp
biBoYXNoCisJCQkJCQkgKiB0YWJsZSAqLworICAgICAgICBMSVNUX0VOVFJZKHNjdHBfdGNiKSBz
Y3RwX3RjYmxpc3Q7CS8qIGxpc3Qgb2YgYWxsIG9mIHRoZQorCQkJCQkJICogVENCJ3MgKi8KKyAg
ICAgICAgTElTVF9FTlRSWShzY3RwX3RjYikgc2N0cF90Y2Jhc29jaWRoYXNoOwkvKiBuZXh0IGxp
bmsgaW4gYXNvY2lkCisJCQkJCQkJICogaGFzaCB0YWJsZQorCQkJCQkJCSAqLworICAgICAgICBM
SVNUX0VOVFJZKHNjdHBfdGNiKSBzY3RwX2Fzb2NzOwkvKiB2dGFnIGhhc2ggbGlzdCAqLworCXN0
cnVjdCBzY3RwX2Jsb2NrX2VudHJ5ICpibG9ja19lbnRyeTsJLyogcG9pbnRlciBsb2NrZWQgYnkg
IHNvY2tldAorCQkJCQkJICogc2VuZCBidWZmZXIgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biBhc29jOworCS8qLQorCSAqIGZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdCBpcyBwcm90ZWN0ZWQg
YnkgdGhlIHNvY2tidWZfbG9jayBOT1QgdGhlCisJICogdGNiX2xvY2suIEl0cyBzcGVjaWFsIGlu
IHRoaXMgd2F5IHRvIGhlbHAgYXZvaWQgZXh0cmEgbXV0ZXggY2FsbHMKKwkgKiBpbiB0aGUgcmVh
ZGluZyBvZiBkYXRhLgorCSAqLworCXVpbnQzMl90IGZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdDsK
Kwl1aW50MzJfdCB0b3RhbF9zZW5kczsKKwl1aW50MzJfdCB0b3RhbF9yZWN2czsKKwlpbnQgZnJl
ZWRfZnJvbV93aGVyZTsKKwl1aW50MTZfdCBycG9ydDsJCS8qIHJlbW90ZSBwb3J0IGluIG5ldHdv
cmsgZm9ybWF0ICovCisJdWludDE2X3QgcmVzdjsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKKwlzdHJ1Y3QgbXR4IHRjYl9tdHg7CisJc3Ry
dWN0IG10eCB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9M
T0NLUykKKwl1c2VybGFuZF9tdXRleF90IHRjYl9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCB0Y2Jf
c2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlsY2tfbXR4X3QqIHRjYl9tdHg7
CisJbGNrX210eF90KiB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQor
CXN0cnVjdCBzcGlubG9jayB0Y2JfbG9jazsKKwlzdHJ1Y3Qgc3BpbmxvY2sgdGNiX3NlbmRfbG9j
azsKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKiBUT0RPIGRlY2lkZSBvbiBf
X1VzZXJzcGFjZV9fIGxvY2tzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwl1
aW50MzJfdCBjYWxsZXIxOworCXVpbnQzMl90IGNhbGxlcjI7CisJdWludDMyX3QgY2FsbGVyMzsK
KyNlbmRpZgorfTsKKworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gNTAzMDAwCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfbG9ja19ic2QuaD4KKwor
I2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisvKgorICogQXBwbGUgTWFjT1MgWCAxMC40ICJUaWdl
ciIKKyAqLworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYXBwbGVfZmcuaD4KKworI2Vs
aWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisKKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfcHJvY2Vzc19sb2NrLmg+CisKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCisKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfbG9ja193aW5kb3dzLmg+CisKKyNlbGlmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oPgor
CisjZWxzZQorLyoKKyAqIFByZS01LnggRnJlZUJTRCwgYW5kIG90aGVycy4KKyAqLworI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9sb2NrX2VtcHR5Lmg+CisjZW5kaWYKKworLyogVE9ETyB3aGVyZSB0
byBwdXQgbm9uLV9LRVJORUwgdGhpbmdzIGZvciBfX1VzZXJzcGFjZV9fPyAqLworI2lmIGRlZmlu
ZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCisvKiBBdHRlbnRpb24gSnVs
aWFuLCB0aGlzIGlzIHRoZSBleHRlcm4gdGhhdAorICogZ29lcyB3aXRoIHRoZSBiYXNlIGluZm8u
IHNjdHBfcGNiLmMgaGFzCisgKiB0aGUgcmVhbCBkZWZpbml0aW9uLgorICovCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCitWTkVUX0RFQ0xB
UkUoc3RydWN0IHNjdHBfYmFzZV9pbmZvLCBzeXN0ZW1fYmFzZV9pbmZvKSA7CisjZWxzZQorZXh0
ZXJuIHN0cnVjdCBzY3RwX2Jhc2VfaW5mbyBzeXN0ZW1fYmFzZV9pbmZvOworI2VuZGlmCisKKyNp
ZmRlZiBJTkVUNgoraW50IFNDVFA2X0FSRV9BRERSX0VRVUFMKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KmEsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmIpOworI2VuZGlmCisKK3ZvaWQgc2N0cF9maWxsX3Bj
YmluZm8oc3RydWN0IHNjdHBfcGNiaW5mbyAqKTsKKworc3RydWN0IHNjdHBfaWZuICoKK3NjdHBf
ZmluZF9pZm4odm9pZCAqaWZuLCB1aW50MzJfdCBpZm5faW5kZXgpOworCitzdHJ1Y3Qgc2N0cF92
cmYgKnNjdHBfYWxsb2NhdGVfdnJmKGludCB2cmZpZCk7CitzdHJ1Y3Qgc2N0cF92cmYgKnNjdHBf
ZmluZF92cmYodWludDMyX3QgdnJmaWQpOwordm9pZCBzY3RwX2ZyZWVfdnJmKHN0cnVjdCBzY3Rw
X3ZyZiAqdnJmKTsKKworLyotCisgKiBDaGFuZ2UgYWRkcmVzcyBzdGF0ZSwgY2FuIGJlIHVzZWQg
aWYKKyAqIE8vUyBzdXBwb3J0cyB0ZWxsaW5nIHRyYW5zcG9ydHMgYWJvdXQKKyAqIGNoYW5nZXMg
dG8gSUZBL0lGTidzIChsaW5rIGxheWVyIHRyaWdnZXJzKS4KKyAqIElmIGEgaWZuIGdvZXMgZG93
biwgd2Ugd2lsbCBkbyBzcmMtYWRkci1zZWxlY3Rpb24KKyAqIGFuZCBOT1QgdXNlIHRoYXQsIGFz
IGEgc291cmNlIGFkZHJlc3MuIFRoaXMgZG9lcworICogbm90IHN0b3AgdGhlIHJvdXRpbmcgc3lz
dGVtIGZyb20gcm91dGluZyBvdXQKKyAqIHRoYXQgaW50ZXJmYWNlLCBidXQgd2Ugd29uJ3QgcHV0
IGl0IGFzIGEgc291cmNlLgorICovCit2b2lkIHNjdHBfbWFya19pZmFfYWRkcl9kb3duKHVpbnQz
Ml90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBjb25zdCBjaGFyICppZl9uYW1lLCB1
aW50MzJfdCBpZm5faW5kZXgpOwordm9pZCBzY3RwX21hcmtfaWZhX2FkZHJfdXAodWludDMyX3Qg
dnJmX2lkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGNvbnN0IGNoYXIgKmlmX25hbWUsIHVpbnQz
Ml90IGlmbl9pbmRleCk7CisKK3N0cnVjdCBzY3RwX2lmYSAqCitzY3RwX2FkZF9hZGRyX3RvX3Zy
Zih1aW50MzJfdCB2cmZpZCwKKwkJICAgICB2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCwg
dWludDMyX3QgaWZuX3R5cGUsCisJCSAgICAgY29uc3QgY2hhciAqaWZfbmFtZSwKKwkJICAgICB2
b2lkICppZmEsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgaWZhX2ZsYWdzLAorCQkg
ICAgIGludCBkeW5hbWljX2FkZCk7CisKK3ZvaWQgc2N0cF91cGRhdGVfaWZuX210dSh1aW50MzJf
dCBpZm5faW5kZXgsIHVpbnQzMl90IG10dSk7CisKK3ZvaWQgc2N0cF9mcmVlX2lmbihzdHJ1Y3Qg
c2N0cF9pZm4gKnNjdHBfaWZucCk7Cit2b2lkIHNjdHBfZnJlZV9pZmEoc3RydWN0IHNjdHBfaWZh
ICpzY3RwX2lmYXApOworCisKK3ZvaWQgc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZih1aW50MzJfdCB2
cmZpZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJICAgIHVpbnQzMl90IGlmbl9pbmRleCwg
Y29uc3QgY2hhciAqaWZfbmFtZSk7CisKKworCitzdHJ1Y3Qgc2N0cF9uZXRzICpzY3RwX2ZpbmRu
ZXQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzb2NrYWRkciAqKTsKKworc3RydWN0IHNjdHBf
aW5wY2IgKnNjdHBfcGNiX2ZpbmRlcChzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBpbnQsIHVpbnQz
Ml90KTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDUwMDAwMAoraW50IHNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2Nr
YWRkciAqLAorCQkgICAgc3RydWN0IHNjdHBfaWZhICosc3RydWN0IHRocmVhZCAqKTsKKyNlbGlm
IGRlZmluZWQoX19XaW5kb3dzX18pCitpbnQgc2N0cF9pbnBjYl9iaW5kKHN0cnVjdCBzb2NrZXQg
Kiwgc3RydWN0IHNvY2thZGRyICosCisJCSAgICBzdHJ1Y3Qgc2N0cF9pZmEgKixQS1RIUkVBRCk7
CisjZWxzZQorLyogc3RydWN0IHByb2MgaXMgYSBkdW1teSBmb3IgX19Vc2Vyc3BhY2VfXyAqLwor
aW50IHNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqLAor
CQkgICAgc3RydWN0IHNjdHBfaWZhICosIHN0cnVjdCBwcm9jICopOworI2VuZGlmCisKK3N0cnVj
dCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyKHN0cnVjdCBtYnVmICosIGlu
dCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgc3RydWN0
IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKiwgc3RydWN0IHNjdHBfaW5wY2IgKios
CisgICAgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDMyX3QgdnJmX2lkKTsKKworc3RydWN0IHNj
dHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc3RydWN0IHNvY2thZGRyICos
CisgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzY3RwX2lucGNiICoqLCBzdHJ1Y3Qgc2N0
cF9uZXRzICoqLCBpbnQsIHVpbnQzMl90KTsKKwordm9pZAorc2N0cF9tb3ZlX3BjYl9hbmRfYXNz
b2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfaW5wY2IgKiwKKyAgICBzdHJ1Y3Qg
c2N0cF90Y2IgKik7CisKKy8qLQorICogRm9yIHRoaXMgY2FsbCBlcF9hZGRyLCB0aGUgdG8gaXMg
dGhlIGRlc3RpbmF0aW9uIGVuZHBvaW50IGFkZHJlc3Mgb2YgdGhlCisgKiBwZWVyIChyZWxhdGl2
ZSB0byBvdXRib3VuZCkuIFRoZSBmcm9tIGZpZWxkIGlzIG9ubHkgdXNlZCBpZiB0aGUgVENQIG1v
ZGVsCisgKiBpcyBlbmFibGVkIGFuZCBoZWxwcyBkaXN0aW5ndXNoIGFtb25nc3QgdGhlIHN1YnNl
dCBib3VuZCAobm9uLWJvdW5kYWxsKS4KKyAqIFRoZSBUQ1AgbW9kZWwgTUFZIGNoYW5nZSB0aGUg
YWN0dWFsIGVwIGZpZWxkLCB0aGlzIGlzIHdoeSBpdCBpcyBwYXNzZWQuCisgKi8KK3N0cnVjdCBz
Y3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKHN0cnVjdCBzY3RwX2lucGNi
ICoqLAorICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCBzdHJ1Y3Qg
c29ja2FkZHIgKiwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKik7CisKK3N0cnVjdCBzY3RwX3RjYiAq
CitzY3RwX2ZpbmRhc29jX2VwX2Fzb2NpZF9sb2NrZWQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c2N0cF9hc3NvY190IGFzb2NfaWQsIGludCB3YW50X2xvY2spOworCitzdHJ1Y3Qgc2N0cF90Y2Ig
Kgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKHN0cnVjdCBzY3RwX2lucGNiICosCisg
ICAgc2N0cF9hc3NvY190LCBpbnQpOworCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYXNjb25mKHN0cnVjdCBtYnVmICosIGludCwgc3RydWN0IHNvY2thZGRyICos
CisJCQkgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBfaW5wY2IgKiosIHN0cnVj
dCBzY3RwX25ldHMgKiosIHVpbnQzMl90IHZyZl9pZCk7CisKK2ludCBzY3RwX2lucGNiX2FsbG9j
KHN0cnVjdCBzb2NrZXQgKnNvLCB1aW50MzJfdCB2cmZfaWQpOworCitpbnQgc2N0cF9pc19hZGRy
ZXNzX29uX2xvY2FsX2hvc3Qoc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCB2cmZfaWQp
OworCit2b2lkIHNjdHBfaW5wY2JfZnJlZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBpbnQsIGludCk7
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw
MDAKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2Ig
Kiwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgaW50ICosIHVpbnQzMl90LCB1
aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBzdHJ1Y3QgdGhyZWFkICopOworI2VsaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3Ry
dWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgaW50
ICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBQS1RIUkVBRCk7Cisj
ZWxzZQorLyogcHJvYyB3aWxsIGJlIE5VTEwgZm9yIF9fVXNlcnNwYWNlX18gKi8KK3N0cnVjdCBz
Y3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNv
Y2thZGRyICosCisgICAgICAgICAgICAgICAgaW50ICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWlu
dDE2X3QsIHVpbnQxNl90LCBzdHJ1Y3QgcHJvYyAqKTsKKyNlbmRpZgorCitpbnQgc2N0cF9mcmVl
X2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQsIGludCk7
CisKKwordm9pZCBzY3RwX2RlbGV0ZV9mcm9tX3RpbWV3YWl0KHVpbnQzMl90LCB1aW50MTZfdCwg
dWludDE2X3QpOworCitpbnQgc2N0cF9pc19pbl90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQx
Nl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCk7CisKK3ZvaWQKK3NjdHBfYWRkX3Z0YWdfdG9fdGlt
ZXdhaXQodWludDMyX3QgdGFnLCB1aW50MzJfdCB0aW1lLCB1aW50MTZfdCBscG9ydCwgdWludDE2
X3QgcnBvcnQpOworCit2b2lkIHNjdHBfYWRkX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5w
Y2IgKiwgc3RydWN0IHNjdHBfaWZhICosIHVpbnQzMl90KTsKKwordm9pZCBzY3RwX2RlbF9sb2Nh
bF9hZGRyX2VwKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKKworaW50
IHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDE2X3QsIGludCwgaW50KTsKKwordm9pZCBzY3Rw
X3JlbW92ZV9uZXQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK2lu
dCBzY3RwX2RlbF9yZW1vdGVfYWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRy
ICopOworCit2b2lkIHNjdHBfcGNiX2luaXQodm9pZCk7CisKK3ZvaWQgc2N0cF9wY2JfZmluaXNo
KHZvaWQpOworCit2b2lkIHNjdHBfYWRkX2xvY2FsX2FkZHJfcmVzdHJpY3RlZChzdHJ1Y3Qgc2N0
cF90Y2IgKiwgc3RydWN0IHNjdHBfaWZhICopOwordm9pZCBzY3RwX2RlbF9sb2NhbF9hZGRyX3Jl
c3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKKworaW50Citz
Y3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1i
dWYgKiwgaW50LCBpbnQsCisgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAq
LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QpOworCitpbnQKK3NjdHBfc2V0X3ByaW1hcnlf
YWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgc3RydWN0IHNj
dHBfbmV0cyAqKTsKKworaW50IHNjdHBfaXNfdnRhZ19nb29kKHVpbnQzMl90LCB1aW50MTZfdCBs
cG9ydCwgdWludDE2X3QgcnBvcnQsIHN0cnVjdCB0aW1ldmFsICopOworCisvKiB2b2lkIHNjdHBf
ZHJhaW4odm9pZCk7ICovCisKK2ludCBzY3RwX2Rlc3RpbmF0aW9uX2lzX3JlYWNoYWJsZShzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRyICopOworCitpbnQgc2N0cF9zd2FwX2lucGNi
X2Zvcl9saXN0ZW4oc3RydWN0IHNjdHBfaW5wY2IgKmlucCk7CisKK3ZvaWQgc2N0cF9jbGVhbl91
cF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCAqcmgp
OworCisvKi0KKyAqIE51bGwgaW4gbGFzdCBhcmcgaW5wY2IgaW5kaWNhdGUgcnVuIG9uIEFMTCBl
cCdzLiBTcGVjaWZpYyBpbnAgaW4gbGFzdCBhcmcKKyAqIGluZGljYXRlcyBydW4gb24gT05MWSBh
c3NvYydzIG9mIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuCisgKi8KK2ludAorc2N0cF9pbml0aWF0
ZV9pdGVyYXRvcihpbnBfZnVuYyBpbnBmLAorCQkgICAgICAgYXNvY19mdW5jIGFmLAorCQkgICAg
ICAgaW5wX2Z1bmMgaW5wZSwKKwkJICAgICAgIHVpbnQzMl90LCB1aW50MzJfdCwKKwkJICAgICAg
IHVpbnQzMl90LCB2b2lkICosCisJCSAgICAgICB1aW50MzJfdCwKKwkJICAgICAgIGVuZF9mdW5j
IGVmLAorCQkgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKiwKKwkJICAgICAgIHVpbnQ4X3QgY29f
b2ZmKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNDVFBfTUNPUkVfSU5Q
VVQpICYmIGRlZmluZWQoU01QKQordm9pZAorc2N0cF9xdWV1ZV90b19tY29yZShzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IG9mZiwgaW50IGNwdV90b191c2UpOworCisjZW5kaWYKKworI2VuZGlmCQkJCS8q
IF9LRVJORUwgKi8KKyNlbmRpZgkJCQkvKiAhX19zY3RwX3BjYl9oX18gKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4
YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zOTFiNGY1NDQ2YjY0OWVkMzU0MjQ3ZDJmZDk0YzUzN2Mx
MmEyZTBmIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVs
b2ZmLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5jCkBA
IC0wLDAgKzEsMzMwIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo
IiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGVlbG9mZi5jIDI3OTg1OSAyMDE1LTAz
LTEwIDE5OjQ5OjI1WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfcGVlbG9mZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0
aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgorCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gNQorI2VuZGlmCisKK2ludAorc2N0cF9jYW5f
cGVlbF9vZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190IGFzc29jX2lkKQorewor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXVpbnQz
Ml90IHN0YXRlOworCisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVCQURGKTsKKwkJcmV0
dXJuIChFQkFERik7CisJfQorCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKWhlYWQtPnNvX3Bj
YjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFRkFVTFQpOworCQlyZXR1cm4gKEVGQVVM
VCk7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
RUVMT0ZGLCBFT1BOT1RTVVBQKTsKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKKwl9CisJc3RjYiA9
IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsKKwlpZiAo
c3RjYiA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9FTlQpOworCQlyZXR1cm4gKEVOT0VOVCk7CisJfQor
CXN0YXRlID0gU0NUUF9HRVRfU1RBVEUoKCZzdGNiLT5hc29jKSk7CisJaWYgKChzdGF0ZSA9PSBT
Q1RQX1NUQVRFX0VNUFRZKSB8fAorCSAgICAoc3RhdGUgPT0gU0NUUF9TVEFURV9JTlVTRSkpIHsK
KwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRU5PVENPTk4pOworCQlyZXR1cm4gKEVO
T1RDT05OKTsKKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCS8qIFdlIGFyZSBjbGVhciB0
byBwZWVsIHRoaXMgb25lIG9mZiAqLworCXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0cF9kb19w
ZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKmhlYWQsIHN0cnVjdCBzb2NrZXQgKnNvLCBzY3RwX2Fzc29j
X3QgYXNzb2NfaWQpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgKm5faW5wOworCXN0cnVj
dCBzY3RwX3RjYiAqc3RjYjsKKwl1aW50MzJfdCBzdGF0ZTsKKworCWlucCA9IChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqKWhlYWQtPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVGQVVM
VCk7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZG
LCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKworCXN0YXRlID0gU0NUUF9H
RVRfU1RBVEUoKCZzdGNiLT5hc29jKSk7CisJaWYgKChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0VNUFRZ
KSB8fAorCSAgICAoc3RhdGUgPT0gU0NUUF9TVEFURV9JTlVTRSkpIHsKKwkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUEVFTE9GRiwgRU5PVENPTk4pOworCQlyZXR1cm4gKEVOT1RDT05OKTsKKwl9CisK
KwluX2lucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJbl9pbnAtPnNjdHBf
ZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8CisJICAgIFNDVFBfUENCX0ZMQUdTX0NP
Tk5FQ1RFRCB8CisJICAgIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wgfAkvKiBUdXJuIG9uIEJs
b2NraW5nIElPICovCisJICAgIChTQ1RQX1BDQl9DT1BZX0ZMQUdTICYgaW5wLT5zY3RwX2ZsYWdz
KSk7CisJbl9pbnAtPnNjdHBfc29ja2V0ID0gc287CisJbl9pbnAtPnNjdHBfZmVhdHVyZXMgPSBp
bnAtPnNjdHBfZmVhdHVyZXM7CisJbl9pbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgPSBpbnAt
PnNjdHBfbW9iaWxpdHlfZmVhdHVyZXM7CisJbl9pbnAtPnNjdHBfZnJhZ19wb2ludCA9IGlucC0+
c2N0cF9mcmFnX3BvaW50OworCW5faW5wLT5zY3RwX2NtdF9vbl9vZmYgPSBpbnAtPnNjdHBfY210
X29uX29mZjsKKwluX2lucC0+ZWNuX3N1cHBvcnRlZCA9IGlucC0+ZWNuX3N1cHBvcnRlZDsKKwlu
X2lucC0+cHJzY3RwX3N1cHBvcnRlZCA9IGlucC0+cHJzY3RwX3N1cHBvcnRlZDsKKwluX2lucC0+
YXV0aF9zdXBwb3J0ZWQgPSBpbnAtPmF1dGhfc3VwcG9ydGVkOworCW5faW5wLT5hc2NvbmZfc3Vw
cG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOworCW5faW5wLT5yZWNvbmZpZ19zdXBwb3J0
ZWQgPSBpbnAtPnJlY29uZmlnX3N1cHBvcnRlZDsKKwluX2lucC0+bnJzYWNrX3N1cHBvcnRlZCA9
IGlucC0+bnJzYWNrX3N1cHBvcnRlZDsKKwluX2lucC0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSBpbnAt
PnBrdGRyb3Bfc3VwcG9ydGVkOworCW5faW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50ID0gaW5w
LT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCW5faW5wLT5zY3RwX2NvbnRleHQgPSBpbnAtPnNj
dHBfY29udGV4dDsKKwluX2lucC0+bWF4X2N3bmQgPSBpbnAtPm1heF9jd25kOworCW5faW5wLT5s
b2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCW5f
aW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yID0gTlVMTDsKKwkvKiBjb3B5IGlu
IHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIG9yaWdpbmFsIGVuZHBvaW50
ICovCisJaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQorCQlzY3RwX2ZyZWVfaG1hY2xp
c3Qobl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCW5faW5wLT5zY3RwX2VwLmxvY2FsX2ht
YWNzID0KKwkgICAgc2N0cF9jb3B5X2htYWNsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9obWFjcyk7
CisJaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKQorCQlzY3RwX2ZyZWVfY2h1
bmtsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwluX2lucC0+c2N0cF9l
cC5sb2NhbF9hdXRoX2NodW5rcyA9CisJICAgIHNjdHBfY29weV9jaHVua2xpc3QoaW5wLT5zY3Rw
X2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkodm9pZClzY3RwX2NvcHlfc2tleWxpc3QoJmlucC0+
c2N0cF9lcC5zaGFyZWRfa2V5cywKKwkgICAgJm5faW5wLT5zY3RwX2VwLnNoYXJlZF9rZXlzKTsK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbl9pbnAtPnVscF9pbmZvID0gaW5wLT51bHBf
aW5mbzsKKwluX2lucC0+cmVjdl9jYWxsYmFjayA9IGlucC0+cmVjdl9jYWxsYmFjazsKKwluX2lu
cC0+c2VuZF9jYWxsYmFjayA9IGlucC0+c2VuZF9jYWxsYmFjazsKKwluX2lucC0+c2VuZF9zYl90
aHJlc2hvbGQgPSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkOworI2VuZGlmCisJLyoKKwkgKiBOb3cg
d2UgbXVzdCBtb3ZlIGl0IGZyb20gb25lIGhhc2ggdGFibGUgdG8gYW5vdGhlciBhbmQgZ2V0IHRo
ZQorCSAqIHN0Y2IgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCSAqLworCXNjdHBfbW92ZV9wY2JfYW5k
X2Fzc29jKGlucCwgbl9pbnAsIHN0Y2IpOworCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChpbnAsIG5faW5wLCBzdGNi
LCBTQkxfV0FJVCk7CisjZWxzZQorCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlu
cCwgbl9pbnAsIHN0Y2IsIE1fV0FJVE9LKTsKKyNlbmRpZgorCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVk
KEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCitzdHJ1Y3Qgc29ja2V0ICoKK3NjdHBfZ2V0X3Bl
ZWxvZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190IGFzc29jX2lkLCBpbnQgKmVy
cm9yKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKiBpZiBfX1VzZXJzcGFj
ZV9fIGNob29zZXMgdG8gb3JpZ2luYWxseSBub3Qgc3VwcG9ydCBwZWVsb2ZmLCBwdXQgaXQgaGVy
ZS4uLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJU0NUUF9MVFJBQ0VfRVJS
X1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFSU5WQUwpOwor
CSplcnJvciA9IEVJTlZBTDsKKwlyZXR1cm4gKE5VTEwpOworI2Vsc2UKKwlzdHJ1Y3Qgc29ja2V0
ICpuZXdzbzsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCAqbl9pbnA7CisJc3RydWN0IHNjdHBf
dGNiICpzdGNiOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX1BFRUwxLCAiU0NUUCBwZWVsLW9mZiBj
YWxsZWRcbiIpOworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKWhlYWQtPnNvX3BjYjsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVGQVVMVCk7CisJCSplcnJvciA9IEVGQVVMVDsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2Np
ZChpbnAsIGFzc29jX2lkLCAxKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09O
Tik7CisJCSplcnJvciA9IEVOT1RDT05OOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAK
KwlDVVJWTkVUX1NFVChoZWFkLT5zb192bmV0KTsKKyNlbmRpZgorCW5ld3NvID0gc29uZXdjb25u
KGhlYWQsIFNTX0lTQ09OTkVDVEVECisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJICAgICwgTlVM
TAorI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCisJICAgIC8qIHBsYWNlIHRoaXMgc29ja2V0IGlu
IHRoZSBhc3NvYydzIHZyZiBpZCAqLworCSAgICAsIE5VTEwsIHN0Y2ItPmFzb2MudnJmX2lkCisj
ZW5kaWYKKwkJKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDEwMDAKKwlDVVJWTkVUX1JFU1RPUkUoKTsKKyNlbmRpZgorCWlmIChuZXdzbyA9PSBO
VUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QRUVMMSwgInNjdHBfcGVlbG9mZjpzb25ld2Nv
bm4gZmFpbGVkXG4iKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9NRU0pOworCQkqZXJyb3IgPSBFTk9NRU07CisJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJcmV0dXJuIChOVUxM
KTsKKworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkgIGVsc2UgeworCQlTQ1RQX1NPQ0tF
VF9MT0NLKG5ld3NvLCAxKTsKKwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0
b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwluX2lucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKW5ld3NvLT5zb19wY2I7CisJU09DS19MT0NLKGhlYWQpOworCW5faW5w
LT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAorCSAgICBTQ1RQX1BDQl9G
TEFHU19DT05ORUNURUQgfAorCSAgICBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MIHwJLyogVHVy
biBvbiBCbG9ja2luZyBJTyAqLworCSAgICAoU0NUUF9QQ0JfQ09QWV9GTEFHUyAmIGlucC0+c2N0
cF9mbGFncykpOworCW5faW5wLT5zY3RwX2ZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwor
CW5faW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKKwluX2lucC0+
c2N0cF9jbXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7CisJbl9pbnAtPmVjbl9zdXBw
b3J0ZWQgPSBpbnAtPmVjbl9zdXBwb3J0ZWQ7CisJbl9pbnAtPnByc2N0cF9zdXBwb3J0ZWQgPSBp
bnAtPnByc2N0cF9zdXBwb3J0ZWQ7CisJbl9pbnAtPmF1dGhfc3VwcG9ydGVkID0gaW5wLT5hdXRo
X3N1cHBvcnRlZDsKKwluX2lucC0+YXNjb25mX3N1cHBvcnRlZCA9IGlucC0+YXNjb25mX3N1cHBv
cnRlZDsKKwluX2lucC0+cmVjb25maWdfc3VwcG9ydGVkID0gaW5wLT5yZWNvbmZpZ19zdXBwb3J0
ZWQ7CisJbl9pbnAtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7CisJ
bl9pbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZDsKKwluX2lu
cC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IGlucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsK
KwluX2lucC0+c2N0cF9jb250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7CisJbl9pbnAtPm1heF9j
d25kID0gaW5wLT5tYXhfY3duZDsKKwluX2lucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9IGlu
cC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwluX2lucC0+aW5wX3N0YXJ0aW5nX3BvaW50X2Zv
cl9pdGVyYXRvciA9IE5VTEw7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCW5faW5wLT51
bHBfaW5mbyA9IGlucC0+dWxwX2luZm87CisJbl9pbnAtPnJlY3ZfY2FsbGJhY2sgPSBpbnAtPnJl
Y3ZfY2FsbGJhY2s7CisJbl9pbnAtPnNlbmRfY2FsbGJhY2sgPSBpbnAtPnNlbmRfY2FsbGJhY2s7
CisJbl9pbnAtPnNlbmRfc2JfdGhyZXNob2xkID0gaW5wLT5zZW5kX3NiX3RocmVzaG9sZDsKKyNl
bmRpZgorCisJLyogY29weSBpbiB0aGUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmcm9tIHRo
ZSBvcmlnaW5hbCBlbmRwb2ludCAqLworCWlmIChuX2lucC0+c2N0cF9lcC5sb2NhbF9obWFjcykK
KwkJc2N0cF9mcmVlX2htYWNsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwluX2lu
cC0+c2N0cF9lcC5sb2NhbF9obWFjcyA9CisJICAgIHNjdHBfY29weV9obWFjbGlzdChpbnAtPnNj
dHBfZXAubG9jYWxfaG1hY3MpOworCWlmIChuX2lucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cykKKwkJc2N0cF9mcmVlX2NodW5rbGlzdChuX2lucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cyk7CisJbl9pbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQorCSAgICBzY3RwX2NvcHlf
Y2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJKHZvaWQpc2N0cF9j
b3B5X3NrZXlsaXN0KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJICAgICZuX2lucC0+c2N0
cF9lcC5zaGFyZWRfa2V5cyk7CisKKwluX2lucC0+c2N0cF9zb2NrZXQgPSBuZXdzbzsKKwlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFKSkgeworCQlz
Y3RwX2ZlYXR1cmVfb2ZmKG5faW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpOworCQluX2lu
cC0+c2N0cF9lcC5hdXRvX2Nsb3NlX3RpbWUgPSAwOworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX0FVVE9DTE9TRSwgbl9pbnAsIHN0Y2IsIE5VTEwsCisJCQkJU0NUUF9GUk9NX1ND
VFBfUEVFTE9GRiArIFNDVFBfTE9DXzEpOworCX0KKwkvKiBUdXJuIG9mZiBhbnkgbm9uLWJsb2Nr
aW5nIHNlbWFudGljLiAqLworCVNPQ0tfTE9DSyhuZXdzbyk7CisJU0NUUF9DTEVBUl9TT19OQklP
KG5ld3NvKTsKKwluZXdzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNURUQ7CisJU09DS19VTkxP
Q0sobmV3c28pOworCS8qIFdlIHJlbW92ZSBpdCByaWdodCBhd2F5ICovCisKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3Nf
XykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCisJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dH
SU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19sb2NrKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5V
TEwsIFNDVFBfTE9HX0xPQ0tfU09DSyk7CisJfQorI2VuZGlmCisJVEFJTFFfUkVNT1ZFKCZoZWFk
LT5zb19jb21wLCBuZXdzbywgc29fbGlzdCk7CisJaGVhZC0+c29fcWxlbi0tOworCVNPQ0tfVU5M
T0NLKGhlYWQpOworI2Vsc2UKKwluZXdzbyA9IFRBSUxRX0ZJUlNUKCZoZWFkLT5zb19xKTsKKwlp
ZiAoc29xcmVtcXVlKG5ld3NvLCAxKSA9PSAwKSB7CisJCVNDVFBfUFJJTlRGKCJzb3JlbXF1ZSBm
YWlsZWQsIHBlZWxvZmYtZmFpbHMgKGludmFyaWVudHMgd291bGQgcGFuaWMpXG4iKTsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYs
IEVOT1RDT05OKTsKKwkJKmVycm9yID0gRU5PVENPTk47CisJCXJldHVybiAoTlVMTCk7CisKKwl9
CisjZW5kaWYKKwkvKgorCSAqIE5vdyB3ZSBtdXN0IG1vdmUgaXQgZnJvbSBvbmUgaGFzaCB0YWJs
ZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCisJICogc3RjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCisJ
ICovCisJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoaW5wLCBuX2lucCwgc3RjYik7CisJYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJLyoKKwkgKiBBbmQgbm93IHRoZSBmaW5hbCBoYWNrLiBXZSBtb3ZlIGRhdGEgaW4gdGhlIHBl
bmRpbmcgc2lkZSBpLmUuCisJICogaGVhZCB0byB0aGUgbmV3IHNvY2tldCBidWZmZXIuIExldCB0
aGUgR1JVQkJJTkcgYmVnaW4gOi0wCisJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlz
Y3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChpbnAsIG5faW5wLCBzdGNiLCBTQkxfV0FJ
VCk7CisjZWxzZQorCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAs
IHN0Y2IsIE1fV0FJVE9LKTsKKyNlbmRpZgorCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKwlyZXR1cm4gKG5ld3NvKTsKKyNlbmRpZgorfQorI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmgKaW5kZXggZTY5ZGUyOWJiMmQx
ZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYWRlZmNkZWQxMzExZDMxMGVkOGYxOTEzNzZj
YTJmZmZiNjk4NGJkYyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGVlbG9mZi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxv
ZmYuaApAQCAtMCwwICsxLDcwIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lz
dGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1z
LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19G
QlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oIDMwOTYwNyAy
MDE2LTEyLTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElO
RVRfU0NUUF9QRUVMT0ZGX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfUEVFTE9GRl9IXworI2lm
IGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCkKKy8qIHNvY2tldCBvcHRpb24gcGVl
bG9mZiAqLworc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQgeworI2lmICFkZWZpbmVkKF9fV2luZG93
c19fKQorCWludCBzOworI2Vsc2UKKwlIQU5ETEUgczsKKyNlbmRpZgorCXNjdHBfYXNzb2NfdCBh
c3NvY19pZDsKKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpbnQgbmV3X3NkOworI2Vsc2UK
KwlIQU5ETEUgbmV3X3NkOworI2VuZGlmCit9OworI2VuZGlmIC8qIEhBVkVfU0NUUF9QRUVMT0ZG
X1NPQ0tPUFQgKi8KKyNpZiBkZWZpbmVkKF9LRVJORUwpCitpbnQgc2N0cF9jYW5fcGVlbF9vZmYo
c3RydWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QpOworaW50IHNjdHBfZG9fcGVlbG9mZihzdHJ1
Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190KTsKKyNpZiBkZWZpbmVk
KEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCitzdHJ1Y3Qgc29ja2V0ICpzY3RwX2dldF9wZWVs
b2ZmKHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190LCBpbnQgKik7CitpbnQgc2N0cF9wZWVs
b2ZmX29wdGlvbihzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQgKnBlZWxv
ZmYpOworI2VuZGlmIC8qIEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQgKi8KKyNlbmRpZiAvKiBf
S0VSTkVMICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IHNjdHBfY2FuX3BlZWxf
b2ZmKHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190KTsKK2ludCBzY3RwX2RvX3BlZWxvZmYo
c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2V0ICosIHNjdHBfYXNzb2NfdCk7CisjZW5kaWYg
LyogX19Vc2Vyc3BhY2VfXyAqLworI2VuZGlmIC8qIF9ORVRJTkVUX1NDVFBfUEVFTE9GRl9IXyAq
LwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcHJvY2Vzc19s
b2NrLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaApp
bmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5jYTY2OTIxMjAy
MTA4ODM5MTJlZmViOTljZmZhMjYxY2RmNTMyZTRhIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaApAQCAtMCwwICsxLDY1OSBAQAorLyotCisg
KiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0
IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBU
dWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVy
IHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQor
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19zY3RwX3Byb2Nlc3Nf
bG9ja19oX18KKyNkZWZpbmUgX19zY3RwX3Byb2Nlc3NfbG9ja19oX18KKworLyoKKyAqIE5lZWQg
dG8geWV0IGRlZmluZSBmaXZlIGF0b21pYyBmdWN0aW9ucyBvcgorICogdGhlaXIgZXF1aXZhbGFu
dC4KKyAqIC0gYXRvbWljX2FkZF9pbnQoJmZvbywgdmFsKSAtIGFkZCBhdG9taWNhbGx5IHRoZSB2
YWx1ZQorICogLSBhdG9taWNfZmV0Y2hhZGRfaW50KCZmb28sIHZhbCkgLSBkb2VzIHNhbWUgYXMg
YXRvbWljX2FkZF9pbnQKKyAqCQkJCSAgICAgIGJ1dCB2YWx1ZSBpdCB3YXMgaXMgcmV0dXJuZWQu
CisgKiAtIGF0b21pY19zdWJ0cmFjdF9pbnQoJmZvbywgdmFsKSAtIGNhbiBiZSBtYWRlIGZyb20g
YXRvbWljX2FkZF9pbnQoKQorICoKKyAqIC0gYXRvbWljX2NtcHNldF9pbnQoJmZvbywgdmFsdWUs
IG5ld3ZhbHVlKSAtIERvZXMgYSBzZXQgb2YgbmV3dmFsdWUKKyAqCQkJCQkgICAgICAgIGluIGZv
byBpZiBhbmQgb25seSBpZgorICoJCQkJCSAgICAgICAgZm9vIGlzIHZhbHVlLiBSZXR1cm5zIDAK
KyAqCQkJCQkgICAgICAgIG9uIHN1Y2Nlc3MuCisgKi8KKworI2lmZGVmIFNDVFBfUEVSX1NPQ0tF
VF9MT0NLSU5HCisvKgorICogcGVyIHNvY2tldCBsZXZlbCBsb2NraW5nCisgKi8KKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKy8qIExvY2sgZm9yIElORk8gc3R1ZmYgKi8K
KyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZP
X1JMT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9J
TlBfSU5GT19XTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisjZGVmaW5l
IFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5J
VCgpCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2Vsc2UKKyNkZWZpbmUgU0NU
UF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkKKyNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19XTE9D
SygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lO
Rk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5JVCgpCisjZGVmaW5l
IFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2VuZGlmCisKKyNkZWZpbmUgU0NUUF9UQ0JfU0VO
RF9MT0NLX0lOSVQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3Rj
YikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX1NF
TkRfVU5MT0NLKF90Y2IpCisKKy8qIExvY2sgZm9yIElOUCAqLworI2RlZmluZSBTQ1RQX0lOUF9M
T0NLX0lOSVQoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNUUk9ZKF9pbnApCisKKyNk
ZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfUlVOTE9DSyhfaW5w
KQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NL
KF9pbmVwKQorI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKQorI2RlZmluZSBTQ1RQX0lO
UF9ERUNSX1JFRihfaW5wKQorCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9p
bnApCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19ERVNUUk9ZKF9pbnApCisjZGVmaW5l
IFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX1VO
TE9DSyhfaW5wKQorCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKQorI2RlZmluZSBT
Q1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9p
bnApCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApCisKKy8qIExvY2sgZm9yIFRD
QiAqLworI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0lOSVQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0Jf
TE9DS19ERVNUUk9ZKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikKKyNkZWZpbmUg
U0NUUF9UQ0JfVFJZTE9DSyhfdGNiKSAxCisjZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKQor
I2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0tfSUZPV05FRChfdGNiKQorI2RlZmluZSBTQ1RQX1RDQl9M
T0NLX0FTU0VSVChfdGNiKQorCisjZWxzZQorLyoKKyAqIHBlciB0Y2IgbGV2ZWwgbG9ja2luZwor
ICovCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0lOSVQoKQorCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfSU5JVCgpIFwKKwlJbml0aWFs
aXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisjZGVmaW5l
IFNDVFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9C
QVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfTE9DSygpIFwKKwlF
bnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2RlZmlu
ZSBTQ1RQX1dRX0FERFJfVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JB
U0VfSU5GTyh3cV9hZGRyX210eCkpCisKKworI2RlZmluZSBTQ1RQX0lOUF9JTkZPX0xPQ0tfSU5J
VCgpIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1koKSBcCisJRGVsZXRlQ3Jp
dGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKKyNkZWZpbmUgU0NUUF9J
TlBfSU5GT19STE9DSygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8o
aXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fVFJZTE9DSygpCVwKKwlUcnlFbnRl
ckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFND
VFBfSU5QX0lORk9fV0xPQ0soKSBcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9J
TkZPKGlwaV9lcF9tdHgpKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKSBcCisJTGVh
dmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQorI2RlZmluZSBT
Q1RQX0lOUF9JTkZPX1dVTkxPQ0soKQlcCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFT
RV9JTkZPKGlwaV9lcF9tdHgpKQorCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQoKSBcCisJ
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX3BrdGxvZ19tdHgp
KQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19ERVNUUk9ZICgpIFwKKwlEZWxldGVDcml0aWNhbFNl
Y3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUF9Q
S1RMT0dfTE9DSygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBp
X3BrdGxvZ19tdHgpKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19VTkxPQ0soKSBcCisJTGVhdmVD
cml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKKworLyoKKyAq
IFRoZSBJTlAgbG9ja3Mgd2Ugd2lsbCB1c2UgZm9yIGxvY2tpbmcgYW4gU0NUUCBlbmRwb2ludCwg
c28gZm9yIGV4YW1wbGUgaWYKKyAqIHdlIHdhbnQgdG8gY2hhbmdlIHNvbWV0aGluZyBhdCB0aGUg
ZW5kcG9pbnQgbGV2ZWwgZm9yIGV4YW1wbGUgcmFuZG9tX3N0b3JlCisgKiBvciBjb29raWUgc2Vj
cmV0cyB3ZSBsb2NrIHRoZSBJTlAgbGV2ZWwuCisgKi8KKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9J
TklUKF9pbnApIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0
YV9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfREVTVFJPWShfaW5wKSBcCisJRGVsZXRlQ3Jp
dGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1JF
QURfTE9DSyhfaW5wKSBcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX3JkYXRh
X210eCkKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9VTkxPQ0soX2lucCkgXAorCUxlYXZlQ3JpdGlj
YWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCisKKyNkZWZpbmUgU0NUUF9JTlBfTE9D
S19JTklUKF9pbnApIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9t
dHgpCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShfaW5wKSBcCisJRGVsZXRlQ3JpdGlj
YWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKyNk
ZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkgZG8geyAJCQkJCQlcCisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkJXAor
CQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfSU5QKTsJCQlcCisJCUVu
dGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCQlcCit9IHdoaWxlICgwKQor
I2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKSBkbyB7IAkJCQkJCVwKKwlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKQlc
CisJCXNjdHBfbG9nX2xvY2soX2lucCwgTlVMTCwgU0NUUF9MT0dfTE9DS19JTlApOwkJCVwKKwlF
bnRlckNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KTsJCQkJCVwKK30gd2hpbGUgKDAp
CisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBcCisJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJihfaW5wKS0+aW5wX210eCkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkgXAor
CUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjZW5kaWYKKworI2RlZmlu
ZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfSU5JVChfdGNiKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2Vj
dGlvbigmKF90Y2IpLT50Y2Jfc2VuZF9tdHgpCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19E
RVNUUk9ZKF90Y2IpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3NlbmRf
bXR4KQorI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0soX3RjYikgXAorCUVudGVyQ3JpdGljYWxT
ZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxP
Q0soX3RjYikgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkK
KworI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKSBhdG9taWNfYWRkX2ludCgmKChfaW5w
KS0+cmVmY291bnQpLCAxKQorI2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JFRihfaW5wKSBhdG9taWNf
YWRkX2ludCgmKChfaW5wKS0+cmVmY291bnQpLCAtMSkKKworI2RlZmluZSBTQ1RQX0FTT0NfQ1JF
QVRFX0xPQ0tfSU5JVChfaW5wKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnAp
LT5pbnBfY3JlYXRlX210eCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1ko
X2lucCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkK
KyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0so
X2lucCkgZG8gewkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBO
VUxMLCBTQ1RQX0xPR19MT0NLX0NSRUFURSk7CQlcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJihf
aW5wKS0+aW5wX2NyZWF0ZV9tdHgpOwkJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUg
U0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9p
bnApLT5pbnBfY3JlYXRlX210eCkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5QX1JVTkxPQ0so
X2lucCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjZGVmaW5l
IFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCkt
PmlucF9tdHgpCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKF9pbnApIFwKKwlMZWF2
ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKKworLyoKKyAqIEZvciB0
aGUgbWFqb3JpdHkgb2YgdGhpbmdzIChvbmNlIHdlIGhhdmUgZm91bmQgdGhlIGFzc29jaWF0aW9u
KSB3ZSB3aWxsCisgKiBsb2NrIHRoZSBhY3R1YWwgYXNzb2NpYXRpb24gbXV0ZXguIFRoaXMgd2ls
bCBwcm90ZWN0IGFsbCB0aGUgYXNzb2ljaWF0aW9uCisgKiBsZXZlbCBxdWV1ZXMgYW5kIHN0cmVh
bXMgYW5kIHN1Y2guIFdlIHdpbGwgbmVlZCB0byBsb2NrIHRoZSBzb2NrZXQgbGF5ZXIKKyAqIHdo
ZW4gd2Ugc3R1ZmYgZGF0YSB1cCBpbnRvIHRoZSByZWNlaXZpbmcgc2JfbWIuIEkuZS4gd2Ugd2ls
bCBuZWVkIHRvIGRvIGFuCisgKiBleHRyYSBTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpIGV2ZW4g
dGhvdWdoIHRoZSBhc3NvY2lhdGlvbiBpcyBsb2NrZWQuCisgKi8KKworI2RlZmluZSBTQ1RQX1RD
Ql9MT0NLX0lOSVQoX3RjYikgXAorCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+
dGNiX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwlEZWxldGVD
cml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCkKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lO
RworI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIGRvIHsJCQkJCQlcCisJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkJ
XAorCQlzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tfVENC
KTsJCVwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KTsJCQkJCVwKK30g
d2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwlFbnRlckNy
aXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KQorI2VuZGlmCisjZGVmaW5lIFNDVFBfVENC
X1RSWUxPQ0soX3RjYikgCSgoVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210
eCkpKQorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikgXAorCUxlYXZlQ3JpdGljYWxTZWN0
aW9uKCYoX3RjYiktPnRjYl9tdHgpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNTRVJUKF90Y2Ip
CisKKyNlbHNlIC8qIGFsbCBVc2Vyc3BhY2VzIGV4Y2VwdCBXaW5kb3dzICovCisjZGVmaW5lIFND
VFBfV1FfQUREUl9JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNF
X0lORk8od3FfYWRkcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFND
VFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NU
UF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NU
UF9XUV9BRERSX0xPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFT
RV9JTkZPKHdxX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogd3FfYWRkcl9tdHggYWxyZWFkeSBsb2Nr
ZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0soKSBcCisJS0FTU0VS
VChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKSA9PSAw
LCAoIiVzOiB3cV9hZGRyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNkZWZp
bmUgU0NUUF9XUV9BRERSX0xPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQ
X0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0soKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4
KSkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19JTklUKCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCksICZTQ1RQX0JB
U0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1koKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4
KSkKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fUkxPQ0soKSBcCisJ
S0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKSA9
PSAwLCAoIiVzOiBpcGlfZXBfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmlu
ZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkgPT0gMCwgKCIlczogaXBpX2VwX210eCBhbHJlYWR5
IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkgXAor
CUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgp
KSA9PSAwLCAoIiVzOiBpcGlfZXBfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5l
IFNDVFBfSU5QX0lORk9fV1VOTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2Nr
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkgPT0gMCwgKCIlczogaXBpX2VwX210eCBub3Qg
bG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygp
IFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgp
KQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
bG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9f
UlVOTE9DSygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8o
aXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpIFwKKwkodm9pZClw
dGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZW5kaWYK
KyNkZWZpbmUgU0NUUF9JTlBfSU5GT19UUllMT0NLKCkgXAorCSghKHB0aHJlYWRfbXV0ZXhfdHJ5
bG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpKSkKKworI2RlZmluZSBTQ1RQX0lQX1BL
VExPR19JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lORk8o
aXBpX3BrdGxvZ19tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBf
SVBfUEtUTE9HX0RFU1RST1koKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBT
Q1RQX0lQX1BLVExPR19MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpID09IDAsICgiJXM6IGlwaV9wa3Rsb2dfbXR4IGFs
cmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19VTkxPQ0so
KSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX3Br
dGxvZ19tdHgpKSA9PSAwLCAoIiVzOiBpcGlfcGt0bG9nX210eCBub3QgbG9ja2VkIiwgX19mdW5j
X18pKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygpIFwKKwkodm9pZClwdGhy
ZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKKyNkZWZpbmUg
U0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisjZW5kaWYKKworCisvKgorICogVGhlIElO
UCBsb2NrcyB3ZSB3aWxsIHVzZSBmb3IgbG9ja2luZyBhbiBTQ1RQIGVuZHBvaW50LCBzbyBmb3Ig
ZXhhbXBsZSBpZgorICogd2Ugd2FudCB0byBjaGFuZ2Ugc29tZXRoaW5nIGF0IHRoZSBlbmRwb2lu
dCBsZXZlbCBmb3IgZXhhbXBsZSByYW5kb21fc3RvcmUKKyAqIG9yIGNvb2tpZSBzZWNyZXRzIHdl
IGxvY2sgdGhlIElOUCBsZXZlbC4KKyAqLworI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0lOSVQoX2lu
cCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmKF9pbnApLT5pbnBfcmRhdGFfbXR4LCAm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfREVTVFJPWShf
aW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCYoX2lucCktPmlucF9yZGF0YV9t
dHgpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lucCkg
XAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9yZGF0YV9tdHgpID09
IDAsICgiJXM6IGlucF9yZGF0YV9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVm
aW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhf
dW5sb2NrKCYoX2lucCktPmlucF9yZGF0YV9tdHgpID09IDAsICgiJXM6IGlucF9yZGF0YV9tdHgg
bm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfTE9D
SyhfaW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9yZGF0YV9t
dHgpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFk
X211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfcmRhdGFfbXR4KQorI2VuZGlmCisKKyNkZWZpbmUg
U0NUUF9JTlBfTE9DS19JTklUKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihf
aW5wKS0+aW5wX210eCwgJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIpKQorI2RlZmluZSBTQ1RQX0lO
UF9MT0NLX0RFU1RST1koX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9p
bnApLT5pbnBfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lO
RworI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBkbyB7CQkJCQkJCQkJXAorCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFC
TEUpCQkJCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7
CQkJCQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9tdHgpID09
IDAsICgiJXM6IGlucF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCVwKK30gd2hpbGUg
KDApCisjZGVmaW5lIFNDVFBfSU5QX1dMT0NLKF9pbnApIGRvIHsJCQkJCQkJCQlcCisJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VO
QUJMRSkJCQkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfSU5Q
KTsJCQkJCQlcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkg
PT0gMCwgKCIlczogaW5wX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKK30gd2hpbGUg
KDApCisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhy
ZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5wX210eCBhbHJl
YWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkgXAor
CUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9tdHgpID09IDAsICgiJXM6
IGlucF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZW5kaWYKKyNkZWZpbmUgU0NU
UF9JTlBfUlVOTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmKF9p
bnApLT5pbnBfbXR4KSA9PSAwLCAoIiVzOiBpbnBfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykp
CisjZGVmaW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRl
eF91bmxvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5wX210eCBub3QgbG9ja2Vk
IiwgX19mdW5jX18pKQorI2Vsc2UKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBT
Q1RQX0lOUF9STE9DSyhfaW5wKSBkbyB7CQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9s
b2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7CQkJXAorCSh2b2lkKXB0aHJl
YWRfbXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KTsJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZp
bmUgU0NUUF9JTlBfV0xPQ0soX2lucCkgZG8gewkJCQkJCVwKKwlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKQlcCisJCXNj
dHBfbG9nX2xvY2soX2lucCwgTlVMTCwgU0NUUF9MT0dfTE9DS19JTlApOwkJCVwKKwkodm9pZClw
dGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCk7CQkJCVwKK30gd2hpbGUgKDApCisj
ZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRl
eF9sb2NrKCYoX2lucCktPmlucF9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1dMT0NLKF9pbnApIFwK
Kwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkKKyNlbmRpZgorI2Rl
ZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X3VubG9j
aygmKF9pbnApLT5pbnBfbXR4KQorI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NLKF9pbnApIFwKKwko
dm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4KQorI2VuZGlmCisjZGVm
aW5lIFNDVFBfSU5QX0lOQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZj
b3VudCksIDEpCisjZGVmaW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50
KCYoKF9pbnApLT5yZWZjb3VudCksIC0xKQorCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19J
TklUKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihfdGNiKS0+dGNiX3NlbmRf
bXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9D
S19ERVNUUk9ZKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJihfdGNiKS0+
dGNiX3NlbmRfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9M
T0NLKF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmKF90Y2IpLT50Y2Jfc2Vu
ZF9tdHgpID09IDAsICgiJXM6IHRjYl9zZW5kX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19f
KSkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxPQ0soX3RjYikgXAorCUtBU1NFUlQocHRocmVh
ZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNiX3NlbmRfbXR4KSA9PSAwLCAoIiVzOiB0Y2Jfc2Vu
ZF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfVENCX1NF
TkRfTE9DSyhfdGNiKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX3RjYiktPnRjYl9z
ZW5kX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxPQ0soX3RjYikgXAorCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNlbmRpZgorCisjZGVm
aW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211
dGV4X2luaXQoJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgsICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRy
KSkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1koX2lucCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKKyNpZmRlZiBJ
TlZBUklBTlRTCisjaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKyNkZWZpbmUgU0NUUF9BU09DX0NS
RUFURV9MT0NLKF9pbnApIGRvIHsJCQkJCQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCQkJCQkJXAorCQlz
Y3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfQ1JFQVRFKTsJCQkJCQkJXAor
CUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KSA9PSAw
LCAoIiVzOiBpbnBfY3JlYXRlX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkJXAorfSB3
aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKSBcCisJ
S0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpID09IDAs
ICgiJXM6IGlucF9jcmVhdGVfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2VuZGlm
CisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKF9pbnApIFwKKwlLQVNTRVJUKHB0aHJl
YWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KSA9PSAwLCAoIiVzOiBpbnBf
Y3JlYXRlX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNpZmRlZiBTQ1RQX0xP
Q0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soX2lucCkgZG8gewkJCQkJ
XAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tf
TE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19M
T0NLX0NSRUFURSk7CQlcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9j
cmVhdGVfbXR4KTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9BU09DX0NS
RUFURV9MT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5w
X2NyZWF0ZV9tdHgpCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lu
cCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4
KQorI2VuZGlmCisvKgorICogRm9yIHRoZSBtYWpvcml0eSBvZiB0aGluZ3MgKG9uY2Ugd2UgaGF2
ZSBmb3VuZCB0aGUgYXNzb2NpYXRpb24pIHdlIHdpbGwKKyAqIGxvY2sgdGhlIGFjdHVhbCBhc3Nv
Y2lhdGlvbiBtdXRleC4gVGhpcyB3aWxsIHByb3RlY3QgYWxsIHRoZSBhc3NvaWNpYXRpb24KKyAq
IGxldmVsIHF1ZXVlcyBhbmQgc3RyZWFtcyBhbmQgc3VjaC4gV2Ugd2lsbCBuZWVkIHRvIGxvY2sg
dGhlIHNvY2tldCBsYXllcgorICogd2hlbiB3ZSBzdHVmZiBkYXRhIHVwIGludG8gdGhlIHJlY2Vp
dmluZyBzYl9tYi4gSS5lLiB3ZSB3aWxsIG5lZWQgdG8gZG8gYW4KKyAqIGV4dHJhIFNPQ0tCVUZf
TE9DSygmc28tPnNvX3JjdikgZXZlbiB0aG91Z2ggdGhlIGFzc29jaWF0aW9uIGlzIGxvY2tlZC4K
KyAqLworCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5JVChfdGNiKSBcCisJKHZvaWQpcHRocmVh
ZF9tdXRleF9pbml0KCYoX3RjYiktPnRjYl9tdHgsICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSkK
KyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211
dGV4X2Rlc3Ryb3koJihfdGNiKS0+dGNiX210eCkKKyNpZmRlZiBJTlZBUklBTlRTCisjaWZkZWYg
U0NUUF9MT0NLX0xPR0dJTkcKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKSBkbyB7CQkJCQkJ
CQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xP
Q0tfTE9HR0lOR19FTkFCTEUpIAkJCQlcCisJCXNjdHBfbG9nX2xvY2soX3RjYi0+c2N0cF9lcCwg
X3RjYiwgU0NUUF9MT0dfTE9DS19UQ0IpOwkJCQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9s
b2NrKCYoX3RjYiktPnRjYl9tdHgpID09IDAsICgiJXM6IHRjYl9tdHggYWxyZWFkeSBsb2NrZWQi
LCBfX2Z1bmNfXykpCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NL
KF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmKF90Y2IpLT50Y2JfbXR4KSA9
PSAwLCAoIiVzOiB0Y2JfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2VuZGlmCisj
ZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3Vu
bG9jaygmKF90Y2IpLT50Y2JfbXR4KSA9PSAwLCAoIiVzOiB0Y2JfbXR4IG5vdCBsb2NrZWQiLCBf
X2Z1bmNfXykpCisjZWxzZQorI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCisjZGVmaW5lIFNDVFBf
VENCX0xPQ0soX3RjYikgZG8gewkJCQkJCVwKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSAJXAorCQlzY3RwX2xvZ19s
b2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tfVENCKTsJCVwKKwkodm9pZClw
dGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX210eCk7CQkJCVwKK30gd2hpbGUgKDApCisj
ZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4
X2xvY2soJihfdGNiKS0+dGNiX210eCkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0so
X3RjYikgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNiX210eCkKKyNlbmRp
ZgorI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0FTU0VSVChfdGNiKSBcCisJS0FTU0VSVChwdGhyZWFk
X211dGV4X3RyeWxvY2soJihfdGNiKS0+dGNiX210eCkgPT0gRUJVU1ksICgiJXM6IHRjYl9tdHgg
bm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9UQ0JfVFJZTE9DSyhfdGNiKSAo
IShwdGhyZWFkX211dGV4X3RyeWxvY2soJihfdGNiKS0+dGNiX210eCkpKQorI2VuZGlmCisKKyNl
bmRpZiAvKiBTQ1RQX1BFUl9TT0NLRVRfTE9DS0lORyAqLworCisKKy8qCisgKiBjb21tb24gbG9j
a3MKKyAqLworCisvKiBjb3BpZWQgb3ZlciB0byBjb21waWxlICovCisjZGVmaW5lIFNDVFBfSU5Q
X0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRoaXMgaXMgcG9zc2li
bGUgKi8KKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9DT05URU5ERUQoX2lucCkgKDApIC8qIERvbid0
IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xP
Q0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRoaXMgaXMgcG9zc2libGUg
Ki8KKworLyogc29ja2V0IGxvY2tzICovCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dp
bmRvd3MpCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19BU1NFUlQoX3NvX2J1ZikKKyNkZWZpbmUgU09D
S0JVRl9MT0NLKF9zb19idWYpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9zb19idWYpLT5z
Yl9tdHgpCisjZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpIFwKKwlMZWF2ZUNyaXRpY2Fs
U2VjdGlvbigmKF9zb19idWYpLT5zYl9tdHgpCisjZGVmaW5lIFNPQ0tfTE9DSyhfc28pIFwKKwlT
T0NLQlVGX0xPQ0soJihfc28pLT5zb19yY3YpCisjZGVmaW5lIFNPQ0tfVU5MT0NLKF9zbykgXAor
CVNPQ0tCVUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQorI2Vsc2UKKyNkZWZpbmUgU09DS0JVRl9M
T0NLX0FTU0VSVChfc29fYnVmKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2soU09D
S0JVRl9NVFgoX3NvX2J1ZikpID09IEVCVVNZLCAoIiVzOiBzb2NrZXQgYnVmZmVyIG5vdCBsb2Nr
ZWQiLCBfX2Z1bmNfXykpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTT0NLQlVGX0xPQ0so
X3NvX2J1ZikgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKFNPQ0tCVUZfTVRYKF9zb19i
dWYpKSA9PSAwLCAoIiVzOiBzb2NrYnVmX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkK
KyNkZWZpbmUgU09DS0JVRl9VTkxPQ0soX3NvX2J1ZikgXAorCUtBU1NFUlQocHRocmVhZF9tdXRl
eF91bmxvY2soU09DS0JVRl9NVFgoX3NvX2J1ZikpID09IDAsICgiJXM6IHNvY2tidWZfbXR4IG5v
dCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2RlZmluZSBTT0NLQlVGX0xPQ0soX3NvX2J1
ZikgXAorCXB0aHJlYWRfbXV0ZXhfbG9jayhTT0NLQlVGX01UWChfc29fYnVmKSkKKyNkZWZpbmUg
U09DS0JVRl9VTkxPQ0soX3NvX2J1ZikgXAorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKFNPQ0tCVUZf
TVRYKF9zb19idWYpKQorI2VuZGlmCisjZGVmaW5lIFNPQ0tfTE9DSyhfc28pIFwKKwlTT0NLQlVG
X0xPQ0soJihfc28pLT5zb19yY3YpCisjZGVmaW5lIFNPQ0tfVU5MT0NLKF9zbykgXAorCVNPQ0tC
VUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQorI2VuZGlmCisKKyNkZWZpbmUgU0NUUF9TVEFUTE9H
X0lOSVRfTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExPR19MT0NLKCkKKyNkZWZpbmUgU0NUUF9T
VEFUTE9HX1VOTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExPR19ERVNUUk9ZKCkKKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKy8qIGFkZHJlc3MgbGlzdCBsb2NrcyAqLwor
I2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlv
bigmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9E
RVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2Fk
ZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9STE9DSygpIFwKKwlFbnRlckNyaXRpY2Fs
U2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElf
QUREUl9SVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhp
cGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dMT0NLKCkgXAorCUVudGVyQ3Jp
dGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQ
X0lQSV9BRERSX1dVTkxPQ0soKSBcCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9J
TkZPKGlwaV9hZGRyX210eCkpCisKKworLyogaXRlcmF0b3IgbG9ja3MgKi8KKyNkZWZpbmUgU0NU
UF9JVEVSQVRPUl9MT0NLX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmc2N0
cF9pdF9jdGwuaXRfbXR4KQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0tfREVTVFJPWSgpIFwK
KwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLml0X210eCkKKyNkZWZpbmUgU0NU
UF9JVEVSQVRPUl9MT0NLKCkgXAorCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2N0cF9pdF9jdGwu
aXRfbXR4KQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX1VOTE9DSygpIFwKKwlMZWF2ZUNyaXRpY2Fs
U2VjdGlvbigmc2N0cF9pdF9jdGwuaXRfbXR4KQorCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9S
X1dRX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmc2N0cF9pdF9jdGwuaXBp
X2l0ZXJhdG9yX3dxX210eCkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfREVTVFJPWSgp
IFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9t
dHgpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKSBcCisJRW50ZXJDcml0aWNh
bFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCisjZGVmaW5lIFNDVFBf
SVBJX0lURVJBVE9SX1dRX1VOTE9DSygpIFwKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2N0cF9p
dF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCkKKworI2Vsc2UgLyogZW5kIG9mIF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MgKi8KKy8qIGFkZHJlc3MgbGlzdCBsb2NrcyAqLworI2RlZmluZSBTQ1RQX0lQ
SV9BRERSX0lOSVQoKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCZTQ1RQX0JBU0VfSU5G
TyhpcGlfYWRkcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBf
SVBJX0FERFJfREVTVFJPWSgpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJlNDVFBf
QkFTRV9JTkZPKGlwaV9hZGRyX210eCkpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTQ1RQ
X0lQSV9BRERSX1JMT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfYWRkcl9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfYWRkcl9tdHggYWxyZWFkeSBs
b2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfUlVOTE9DSygpIFwKKwlL
QVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgp
KSA9PSAwLCAoIiVzOiBpcGlfYWRkcl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZp
bmUgU0NUUF9JUElfQUREUl9XTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygm
U0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogaXBpX2FkZHJfbXR4IGFs
cmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dVTkxPQ0so
KSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2Fk
ZHJfbXR4KSkgPT0gMCwgKCIlczogaXBpX2FkZHJfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykp
CisjZWxzZQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9J
UElfQUREUl9SVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dMT0NLKCkgXAor
CSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkK
KyNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
dW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2VuZGlmCisKKy8qIGl0ZXJh
dG9yIGxvY2tzICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2N0cF9pdF9jdGwuaXRfbXR4LCAmU0NUUF9CQVNFX1ZBUiht
dHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19ERVNUUk9ZKCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2N0cF9pdF9jdGwuaXRfbXR4KQorI2lmZGVmIElOVkFS
SUFOVFMKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9t
dXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pdF9tdHgpID09IDAsICgiJXM6IGl0X210eCBhbHJlYWR5
IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKSBcCisJ
S0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmc2N0cF9pdF9jdGwuaXRfbXR4KSA9PSAwLCAo
IiVzOiBpdF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNDVFBf
SVRFUkFUT1JfTE9DSygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJnNjdHBfaXRfY3Rs
Lml0X210eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKSBcCisJKHZvaWQpcHRocmVh
ZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLml0X210eCkKKyNlbmRpZgorCisjZGVmaW5lIFND
VFBfSVBJX0lURVJBVE9SX1dRX0lOSVQoKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCZz
Y3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikp
CisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RST1koKSBcCisJKHZvaWQpcHRocmVh
ZF9tdXRleF9kZXN0cm95KCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4KQorI2lmZGVm
IElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpIFwKKwlLQVNT
RVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCkg
PT0gMCwgKCIlczogaXBpX2l0ZXJhdG9yX3dxX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19f
KSkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCkgXAorCUtBU1NFUlQocHRo
cmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpID09IDAs
ICgiJXM6IGlwaV9pdGVyYXRvcl93cV9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNl
CisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9t
dXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4KQorI2RlZmluZSBTQ1RQ
X0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2so
JnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCisjZW5kaWYKKyNlbmRpZgorCisjZGVm
aW5lIFNDVFBfSU5DUl9FUF9DT1VOVCgpIFwKKwlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lO
Rk8oaXBpX2NvdW50X2VwKSwgMSkKKworI2RlZmluZSBTQ1RQX0RFQ1JfRVBfQ09VTlQoKSBcCisJ
YXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2VwKSwgMSkKKwor
I2RlZmluZSBTQ1RQX0lOQ1JfQVNPQ19DT1VOVCgpIFwKKwlhdG9taWNfYWRkX2ludCgmU0NUUF9C
QVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpLCAxKQorCisjZGVmaW5lIFNDVFBfREVDUl9BU09DX0NP
VU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9h
c29jKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfTEFERFJfQ09VTlQoKSBcCisJYXRvbWljX2Fk
ZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkciksIDEpCisKKyNkZWZpbmUgU0NU
UF9ERUNSX0xBRERSX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9J
TkZPKGlwaV9jb3VudF9sYWRkciksIDEpCisKKyNkZWZpbmUgU0NUUF9JTkNSX1JBRERSX0NPVU5U
KCkgXAorCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpLCAx
KQorCisjZGVmaW5lIFNDVFBfREVDUl9SQUREUl9DT1VOVCgpIFwKKwlhdG9taWNfc3VidHJhY3Rf
aW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpLCAxKQorCisjZGVmaW5lIFNDVFBf
SU5DUl9DSEtfQ09VTlQoKSBcCisJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9j
b3VudF9jaHVuayksIDEpCisKKyNkZWZpbmUgU0NUUF9ERUNSX0NIS19DT1VOVCgpIFwKKwlhdG9t
aWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfY2h1bmspLCAxKQorCisj
ZGVmaW5lIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgpIFwKKwlhdG9taWNfYWRkX2ludCgmU0NUUF9C
QVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKSwgMSkKKworI2RlZmluZSBTQ1RQX0RFQ1JfUkVBRFFf
Q09VTlQoKSBcCisJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X3JlYWRxKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfU1RSTU9RX0NPVU5UKCkgXAorCWF0b21p
Y19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfc3RybW9xKSwgMSkKKworI2RlZmlu
ZSBTQ1RQX0RFQ1JfU1RSTU9RX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBf
QkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpLCAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3NoYTEuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVh
ZDhjMmU0OGM1MzkxLi5hYmE2MTYwNjliNzIyYzkwMjMzN2UxNDE4MGNmM2M2YmMzOTgyZDczIDEw
MDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmMKKysrIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCkBAIC0wLDAgKzEsMzI5IEBA
CisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2Fy
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEzLCBieSBN
aWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAx
MywgICAgICBieSBMYWxseSBTaW5naC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICog
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3NoYTEuaD4KKworI2lmIGRlZmluZWQoU0NUUF9VU0VfTlNTX1NI
QTEpCisvKiBBIFNIQS0xIERpZ2VzdCBpcyAxNjAgYml0cywgb3IgMjAgYnl0ZXMgKi8KKyNkZWZp
bmUgU0hBX0RJR0VTVF9MRU5HVEggKDIwKQorCit2b2lkCitzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qg
c2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwljdHgtPnBrMTFfY3R4ID0gUEsxMV9DcmVhdGVE
aWdlc3RDb250ZXh0KFNFQ19PSURfU0hBMSk7CisJUEsxMV9EaWdlc3RCZWdpbihjdHgtPnBrMTFf
Y3R4KTsKK30KKwordm9pZAorc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRl
eHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25lZCBpbnQgc2l6KQorewor
CVBLMTFfRGlnZXN0T3AoY3R4LT5wazExX2N0eCwgcHRyLCBzaXopOworfQorCit2b2lkCitzY3Rw
X3NoYTFfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRl
eHQgKmN0eCkKK3sKKwl1bnNpZ25lZCBpbnQgb3V0cHV0X2xlbiA9IDA7CisKKwlQSzExX0RpZ2Vz
dEZpbmFsKGN0eC0+cGsxMV9jdHgsIGRpZ2VzdCwgJm91dHB1dF9sZW4sIFNIQV9ESUdFU1RfTEVO
R1RIKTsKKwlQSzExX0Rlc3Ryb3lDb250ZXh0KGN0eC0+cGsxMV9jdHgsIFBSX1RSVUUpOworfQor
CisjZWxpZiBkZWZpbmVkKFNDVFBfVVNFX09QRU5TU0xfU0hBMSkKKwordm9pZAorc2N0cF9zaGEx
X2luaXQoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCit7CisJU0hBMV9Jbml0KCZjdHgt
PnNoYV9jdHgpOworfQorCit2b2lkCitzY3RwX3NoYTFfdXBkYXRlKHN0cnVjdCBzY3RwX3NoYTFf
Y29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIHVuc2lnbmVkIGludCBzaXop
Cit7CisJU0hBMV9VcGRhdGUoJmN0eC0+c2hhX2N0eCwgcHRyLCAodW5zaWduZWQgbG9uZylzaXop
OworfQorCit2b2lkCitzY3RwX3NoYTFfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1
Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwlTSEExX0ZpbmFsKGRpZ2VzdCwgJmN0eC0+
c2hhX2N0eCk7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbGlmICFk
ZWZpbmVkKF9fV2luZG93c19fKQorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNk
ZWZpbmUgRjEoQixDLEQpICgoKEIgJiBDKSB8ICgofkIpICYgRCkpKQkvKiAwICA8PSB0IDw9IDE5
ICovCisjZGVmaW5lIEYyKEIsQyxEKSAoQiBeIEMgXiBEKQkvKiAyMCA8PSB0IDw9IDM5ICovCisj
ZGVmaW5lIEYzKEIsQyxEKSAoKEIgJiBDKSB8IChCICYgRCkgfCAoQyAmIEQpKQkvKiA0MCA8PSB0
IDw9IDU5ICovCisjZGVmaW5lIEY0KEIsQyxEKSAoQiBeIEMgXiBEKQkvKiA2MDAgPD0gdCA8PSA3
OSAqLworCisvKiBjaXJjdWxhciBzaGlmdCAqLworI2RlZmluZSBDU0hJRlQoQSxCKSAoKEIgPDwg
QSkgfCAoQiA+PiAoMzItQSkpKQorCisjZGVmaW5lIEsxIDB4NWE4Mjc5OTkJCS8qIDAgIDw9IHQg
PD0gMTkgKi8KKyNkZWZpbmUgSzIgMHg2ZWQ5ZWJhMQkJLyogMjAgPD0gdCA8PSAzOSAqLworI2Rl
ZmluZSBLMyAweDhmMWJiY2RjCQkvKiA0MCA8PSB0IDw9IDU5ICovCisjZGVmaW5lIEs0IDB4Y2E2
MmMxZDYJCS8qIDYwIDw9IHQgPD0gNzkgKi8KKworI2RlZmluZSBIMElOSVQgMHg2NzQ1MjMwMQor
I2RlZmluZSBIMUlOSVQgMHhlZmNkYWI4OQorI2RlZmluZSBIMklOSVQgMHg5OGJhZGNmZQorI2Rl
ZmluZSBIM0lOSVQgMHgxMDMyNTQ3NgorI2RlZmluZSBINElOSVQgMHhjM2QyZTFmMAorCit2b2lk
CitzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwkvKiBJ
bml0IHRoZSBTSEEtMSBjb250ZXh0IHN0cnVjdHVyZSAqLworCWN0eC0+QSA9IDA7CisJY3R4LT5C
ID0gMDsKKwljdHgtPkMgPSAwOworCWN0eC0+RCA9IDA7CisJY3R4LT5FID0gMDsKKwljdHgtPkgw
ID0gSDBJTklUOworCWN0eC0+SDEgPSBIMUlOSVQ7CisJY3R4LT5IMiA9IEgySU5JVDsKKwljdHgt
PkgzID0gSDNJTklUOworCWN0eC0+SDQgPSBINElOSVQ7CisJY3R4LT5URU1QID0gMDsKKwltZW1z
ZXQoY3R4LT53b3JkcywgMCwgc2l6ZW9mKGN0eC0+d29yZHMpKTsKKwljdHgtPmhvd19tYW55X2lu
X2Jsb2NrID0gMDsKKwljdHgtPnJ1bm5pbmdfdG90YWwgPSAwOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCwg
dW5zaWduZWQgaW50ICpibG9jaykKK3sKKwlpbnQgaTsKKworCS8qIGluaXQgdGhlIFcwLVcxNSB0
byB0aGUgYmxvY2sgb2Ygd29yZHMgYmVpbmcgaGFzaGVkLiAqLworCS8qIHN0ZXAgYSkgKi8KKwlm
b3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQljdHgtPndvcmRzW2ldID0gbnRvaGwoYmxvY2tb
aV0pOworCX0KKwkvKiBub3cgaW5pdCB0aGUgcmVzdCBiYXNlZCBvbiB0aGUgU0hBLTEgZm9ybXVs
YSwgc3RlcCBiKSAqLworCWZvciAoaSA9IDE2OyBpIDwgODA7IGkrKykgeworCQljdHgtPndvcmRz
W2ldID0gQ1NISUZUKDEsICgoY3R4LT53b3Jkc1soaSAtIDMpXSkgXgorCQkgICAgKGN0eC0+d29y
ZHNbKGkgLSA4KV0pIF4KKwkJICAgIChjdHgtPndvcmRzWyhpIC0gMTQpXSkgXgorCQkgICAgKGN0
eC0+d29yZHNbKGkgLSAxNildKSkpOworCX0KKwkvKiBzdGVwIGMpICovCisJY3R4LT5BID0gY3R4
LT5IMDsKKwljdHgtPkIgPSBjdHgtPkgxOworCWN0eC0+QyA9IGN0eC0+SDI7CisJY3R4LT5EID0g
Y3R4LT5IMzsKKwljdHgtPkUgPSBjdHgtPkg0OworCisJLyogc3RlcCBkKSAqLworCWZvciAoaSA9
IDA7IGkgPCA4MDsgaSsrKSB7CisJCWlmIChpIDwgMjApIHsKKwkJCWN0eC0+VEVNUCA9ICgoQ1NI
SUZUKDUsIGN0eC0+QSkpICsKKwkJCSAgICAoRjEoY3R4LT5CLCBjdHgtPkMsIGN0eC0+RCkpICsK
KwkJCSAgICAoY3R4LT5FKSArCisJCQkgICAgY3R4LT53b3Jkc1tpXSArCisJCQkgICAgSzEpOwor
CQl9IGVsc2UgaWYgKGkgPCA0MCkgeworCQkJY3R4LT5URU1QID0gKChDU0hJRlQoNSwgY3R4LT5B
KSkgKworCQkJICAgIChGMihjdHgtPkIsIGN0eC0+QywgY3R4LT5EKSkgKworCQkJICAgIChjdHgt
PkUpICsKKwkJCSAgICAoY3R4LT53b3Jkc1tpXSkgKworCQkJICAgIEsyKTsKKwkJfSBlbHNlIGlm
IChpIDwgNjApIHsKKwkJCWN0eC0+VEVNUCA9ICgoQ1NISUZUKDUsIGN0eC0+QSkpICsKKwkJCSAg
ICAoRjMoY3R4LT5CLCBjdHgtPkMsIGN0eC0+RCkpICsKKwkJCSAgICAoY3R4LT5FKSArCisJCQkg
ICAgKGN0eC0+d29yZHNbaV0pICsKKwkJCSAgICBLMyk7CisJCX0gZWxzZSB7CisJCQljdHgtPlRF
TVAgPSAoKENTSElGVCg1LCBjdHgtPkEpKSArCisJCQkgICAgKEY0KGN0eC0+QiwgY3R4LT5DLCBj
dHgtPkQpKSArCisJCQkgICAgKGN0eC0+RSkgKworCQkJICAgIChjdHgtPndvcmRzW2ldKSArCisJ
CQkgICAgSzQpOworCQl9CisJCWN0eC0+RSA9IGN0eC0+RDsKKwkJY3R4LT5EID0gY3R4LT5DOwor
CQljdHgtPkMgPSBDU0hJRlQoMzAsIGN0eC0+Qik7CisJCWN0eC0+QiA9IGN0eC0+QTsKKwkJY3R4
LT5BID0gY3R4LT5URU1QOworCX0KKwkvKiBzdGVwIGUpICovCisJY3R4LT5IMCA9IChjdHgtPkgw
KSArIChjdHgtPkEpOworCWN0eC0+SDEgPSAoY3R4LT5IMSkgKyAoY3R4LT5CKTsKKwljdHgtPkgy
ID0gKGN0eC0+SDIpICsgKGN0eC0+Qyk7CisJY3R4LT5IMyA9IChjdHgtPkgzKSArIChjdHgtPkQp
OworCWN0eC0+SDQgPSAoY3R4LT5INCkgKyAoY3R4LT5FKTsKK30KKwordm9pZAorc2N0cF9zaGEx
X3VwZGF0ZShzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hh
ciAqcHRyLCB1bnNpZ25lZCBpbnQgc2l6KQoreworCXVuc2lnbmVkIGludCBudW1iZXJfbGVmdCwg
bGVmdF90b19maWxsOworCisJbnVtYmVyX2xlZnQgPSBzaXo7CisJd2hpbGUgKG51bWJlcl9sZWZ0
ID4gMCkgeworCQlsZWZ0X3RvX2ZpbGwgPSBzaXplb2YoY3R4LT5zaGFfYmxvY2spIC0gY3R4LT5o
b3dfbWFueV9pbl9ibG9jazsKKwkJaWYgKGxlZnRfdG9fZmlsbCA+IG51bWJlcl9sZWZ0KSB7CisJ
CQkvKiBjYW4gb25seSBwYXJ0aWFsbHkgZmlsbCB1cCB0aGlzIG9uZSAqLworCQkJbWVtY3B5KCZj
dHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2NrXSwKKwkJCSAgICBwdHIsIG51bWJl
cl9sZWZ0KTsKKwkJCWN0eC0+aG93X21hbnlfaW5fYmxvY2sgKz0gbnVtYmVyX2xlZnQ7CisJCQlj
dHgtPnJ1bm5pbmdfdG90YWwgKz0gbnVtYmVyX2xlZnQ7CisJCQlicmVhazsKKwkJfSBlbHNlIHsK
KwkJCS8qIGJsb2NrIGlzIG5vdyBmdWxsLCBwcm9jZXNzIGl0ICovCisJCQltZW1jcHkoJmN0eC0+
c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5fYmxvY2tdLAorCQkJICAgIHB0ciwgbGVmdF90b19m
aWxsKTsKKwkJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soY3R4LAorCQkJICAgICh1bnNpZ25l
ZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7CisJCQludW1iZXJfbGVmdCAtPSBsZWZ0X3RvX2ZpbGw7
CisJCQljdHgtPnJ1bm5pbmdfdG90YWwgKz0gbGVmdF90b19maWxsOworCQkJY3R4LT5ob3dfbWFu
eV9pbl9ibG9jayA9IDA7CisJCQlwdHIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKShwdHIgKyBs
ZWZ0X3RvX2ZpbGwpOworCQl9CisJfQorfQorCit2b2lkCitzY3RwX3NoYTFfZmluYWwodW5zaWdu
ZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwkvKgor
CSAqIGlmIGFueSBsZWZ0IGluIGJsb2NrIGZpbGwgd2l0aCBwYWRkaW5nIGFuZCBwcm9jZXNzLiBU
aGVuIHRyYW5zZmVyCisJICogdGhlIGRpZ2VzdCB0byB0aGUgcG9pbnRlci4gQXQgdGhlIGxhc3Qg
YmxvY2sgc29tZSBzcGVjaWFsIHJ1bGVzCisJICogbmVlZCB0byBhcHBseS4gV2UgbXVzdCBhZGQg
YSAxIGJpdCBmb2xsb3dpbmcgdGhlIG1lc3NhZ2UsIHRoZW4gd2UKKwkgKiBwYWQgd2l0aCAwJ3Mu
IFRoZSB0b3RhbCBzaXplIGlzIGVuY29kZWQgYXMgYSA2NCBiaXQgbnVtYmVyIGF0IHRoZQorCSAq
IGVuZC4gTm93IGlmIHRoZSBsYXN0IGJ1ZmZlciBoYXMgbW9yZSB0aGFuIDU1IG9jdGV0cyBpbiBp
dCB3ZQorCSAqIGNhbm5vdCBmaXQgdGhlIDY0IGJpdCBudW1iZXIgKyAxMDAwMDAwMCBwYWQgb24g
dGhlIGVuZCBhbmQgbXVzdAorCSAqIGFkZCB0aGUgMTAwMDAwMDAgcGFkLCBwYWQgdGhlIHJlc3Qg
b2YgdGhlIG1lc3NhZ2Ugd2l0aCAwJ3MgYW5kCisJICogdGhlbiBjcmVhdGUgYW4gYWxsIDAgbWVz
c2FnZSB3aXRoIGp1c3QgdGhlIDY0IGJpdCBzaXplIGF0IHRoZSBlbmQKKwkgKiBhbmQgcnVuIHRo
aXMgYmxvY2sgdGhyb3VnaCBieSBpdHNlbGYuICBBbHNvIHRoZSA2NCBiaXQgaW50IG11c3QKKwkg
KiBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJICovCisJaW50IGxlZnRfdG9fZmlsbDsKKwl1
bnNpZ25lZCBpbnQgaSwgKnB0cjsKKworCWlmIChjdHgtPmhvd19tYW55X2luX2Jsb2NrID4gNTUp
IHsKKwkJLyoKKwkJICogc3BlY2lhbCBjYXNlLCB3ZSBuZWVkIHRvIHByb2Nlc3MgdHdvIGJsb2Nr
cyBoZXJlLiBPbmUgZm9yCisJCSAqIHRoZSBjdXJyZW50IHN0dWZmIHBsdXMgcG9zc2libHkgdGhl
IHBhZC4gVGhlIG90aGVyIGZvcgorCQkgKiB0aGUgc2l6ZS4KKwkJICovCisJCWxlZnRfdG9fZmls
bCA9IHNpemVvZihjdHgtPnNoYV9ibG9jaykgLSBjdHgtPmhvd19tYW55X2luX2Jsb2NrOworCQlp
ZiAobGVmdF90b19maWxsID09IDApIHsKKwkJCS8qIFNob3VsZCBub3QgcmVhbGx5IGhhcHBlbiBi
dXQgSSBhbSBwYXJhbm9pZCAqLworCQkJc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsCisJ
CQkgICAgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKKwkJCS8qIGluaXQgbGFzdCBi
bG9jaywgYSBiaXQgZGlmZmVyZW50IHRoYW4gdGhlIHJlc3QgKi8KKwkJCWN0eC0+c2hhX2Jsb2Nr
WzBdID0gJ1x4ODAnOworCQkJZm9yIChpID0gMTsgaSA8IHNpemVvZihjdHgtPnNoYV9ibG9jayk7
IGkrKykgeworCQkJCWN0eC0+c2hhX2Jsb2NrW2ldID0gMHgwOworCQkJfQorCQl9IGVsc2UgaWYg
KGxlZnRfdG9fZmlsbCA9PSAxKSB7CisJCQljdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2lu
X2Jsb2NrXSA9ICdceDgwJzsKKwkJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soY3R4LAorCQkJ
ICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7CisJCQkvKiBpbml0IGxhc3QgYmxv
Y2sgKi8KKwkJCW1lbXNldChjdHgtPnNoYV9ibG9jaywgMCwgc2l6ZW9mKGN0eC0+c2hhX2Jsb2Nr
KSk7CisJCX0gZWxzZSB7CisJCQljdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2Nr
XSA9ICdceDgwJzsKKwkJCWZvciAoaSA9IChjdHgtPmhvd19tYW55X2luX2Jsb2NrICsgMSk7CisJ
CQkgICAgaSA8IHNpemVvZihjdHgtPnNoYV9ibG9jayk7CisJCQkgICAgaSsrKSB7CisJCQkJY3R4
LT5zaGFfYmxvY2tbaV0gPSAweDA7CisJCQl9CisJCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2Nr
KGN0eCwKKwkJCSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOworCQkJLyogaW5p
dCBsYXN0IGJsb2NrICovCisJCQltZW1zZXQoY3R4LT5zaGFfYmxvY2ssIDAsIHNpemVvZihjdHgt
PnNoYV9ibG9jaykpOworCQl9CisJCS8qIFRoaXMgaXMgaW4gYml0cyBzbyBtdWx0aXBseSBieSA4
ICovCisJCWN0eC0+cnVubmluZ190b3RhbCAqPSA4OworCQlwdHIgPSAodW5zaWduZWQgaW50ICop
JmN0eC0+c2hhX2Jsb2NrWzYwXTsKKwkJKnB0ciA9IGh0b25sKGN0eC0+cnVubmluZ190b3RhbCk7
CisJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soY3R4LCAodW5zaWduZWQgaW50ICopY3R4LT5z
aGFfYmxvY2spOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGVhc3kgY2FzZSwgd2UganVzdCBwYWQg
dGhpcyBtZXNzYWdlIHRvIHNpemUgLSBlbmQgd2l0aCAwCisJCSAqIGFkZCB0aGUgbWFnaWMgMHg4
MCB0byB0aGUgbmV4dCB3b3JkIGFuZCB0aGVuIHB1dCB0aGUKKwkJICogbmV0d29yayBieXRlIG9y
ZGVyIHNpemUgaW4gdGhlIGxhc3Qgc3BvdCBhbmQgcHJvY2VzcyB0aGUKKwkJICogYmxvY2suCisJ
CSAqLworCQljdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2NrXSA9ICdceDgwJzsK
KwkJZm9yIChpID0gKGN0eC0+aG93X21hbnlfaW5fYmxvY2sgKyAxKTsKKwkJICAgIGkgPCBzaXpl
b2YoY3R4LT5zaGFfYmxvY2spOworCQkgICAgaSsrKSB7CisJCQljdHgtPnNoYV9ibG9ja1tpXSA9
IDB4MDsKKwkJfQorCQkvKiBnZXQgbGFzdCBpbnQgc3BvdCAqLworCQljdHgtPnJ1bm5pbmdfdG90
YWwgKj0gODsKKwkJcHRyID0gKHVuc2lnbmVkIGludCAqKSZjdHgtPnNoYV9ibG9ja1s2MF07CisJ
CSpwdHIgPSBodG9ubChjdHgtPnJ1bm5pbmdfdG90YWwpOworCQlzY3RwX3NoYTFfcHJvY2Vzc19h
X2Jsb2NrKGN0eCwgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKKwl9CisJLyogdHJh
bnNmZXIgdGhlIGRpZ2VzdCBiYWNrIHRvIHRoZSB1c2VyICovCisJZGlnZXN0WzNdID0gKGN0eC0+
SDAgJiAweGZmKTsKKwlkaWdlc3RbMl0gPSAoKGN0eC0+SDAgPj4gOCkgJiAweGZmKTsKKwlkaWdl
c3RbMV0gPSAoKGN0eC0+SDAgPj4gMTYpICYgMHhmZik7CisJZGlnZXN0WzBdID0gKChjdHgtPkgw
ID4+IDI0KSAmIDB4ZmYpOworCisJZGlnZXN0WzddID0gKGN0eC0+SDEgJiAweGZmKTsKKwlkaWdl
c3RbNl0gPSAoKGN0eC0+SDEgPj4gOCkgJiAweGZmKTsKKwlkaWdlc3RbNV0gPSAoKGN0eC0+SDEg
Pj4gMTYpICYgMHhmZik7CisJZGlnZXN0WzRdID0gKChjdHgtPkgxID4+IDI0KSAmIDB4ZmYpOwor
CisJZGlnZXN0WzExXSA9IChjdHgtPkgyICYgMHhmZik7CisJZGlnZXN0WzEwXSA9ICgoY3R4LT5I
MiA+PiA4KSAmIDB4ZmYpOworCWRpZ2VzdFs5XSA9ICgoY3R4LT5IMiA+PiAxNikgJiAweGZmKTsK
KwlkaWdlc3RbOF0gPSAoKGN0eC0+SDIgPj4gMjQpICYgMHhmZik7CisKKwlkaWdlc3RbMTVdID0g
KGN0eC0+SDMgJiAweGZmKTsKKwlkaWdlc3RbMTRdID0gKChjdHgtPkgzID4+IDgpICYgMHhmZik7
CisJZGlnZXN0WzEzXSA9ICgoY3R4LT5IMyA+PiAxNikgJiAweGZmKTsKKwlkaWdlc3RbMTJdID0g
KChjdHgtPkgzID4+IDI0KSAmIDB4ZmYpOworCisJZGlnZXN0WzE5XSA9IChjdHgtPkg0ICYgMHhm
Zik7CisJZGlnZXN0WzE4XSA9ICgoY3R4LT5INCA+PiA4KSAmIDB4ZmYpOworCWRpZ2VzdFsxN10g
PSAoKGN0eC0+SDQgPj4gMTYpICYgMHhmZik7CisJZGlnZXN0WzE2XSA9ICgoY3R4LT5INCA+PiAy
NCkgJiAweGZmKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zaGExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9z
aGExLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNmQ2
YTA1YzEwY2RkMmI1MGEyNDM4NDY0ZjRiODgwNTkyMDVmMWFlNiAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3NoYTEuaApAQCAtMCwwICsxLDk5IEBACisvKi0KKyAqIFNQRFgtTGlj
ZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluCisgKiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUg
b2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
CisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxz
eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgorCisKKyNpZm5kZWYg
X19ORVRJTkVUX1NDVFBfU0hBMV9IX18KKyNkZWZpbmUgX19ORVRJTkVUX1NDVFBfU0hBMV9IX18K
KworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIGRlZmluZWQoU0NUUF9VU0VfTlNTX1NIQTEp
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisvKiBUaGUgTlNTIHNvdXJjZXMg
cmVxdWlyZSBfX0FQUExFX18gdG8gYmUgZGVmaW5lZC4KKyAqIFhYWDogUmVtb3ZlIHRoaXMgdWds
eSBoYWNrIG9uY2UgdGhlIHBsYXRmb3JtIGRlZmluZXMgaGF2ZSBiZWVuIGNsZWFuZWQgdXAuCisg
Ki8KKyNkZWZpbmUgX19BUFBMRV9fCisjZW5kaWYKKyNpbmNsdWRlIDxwazExcHViLmg+CisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisjdW5kZWYgX19BUFBMRV9fCisjZW5kaWYK
KyNlbGlmIGRlZmluZWQoU0NUUF9VU0VfT1BFTlNTTF9TSEExKQorI2luY2x1ZGUgPG9wZW5zc2wv
c2hhLmg+CisjZW5kaWYKKworc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0IHsKKyNpZiBkZWZpbmVk
KFNDVFBfVVNFX05TU19TSEExKQorCXN0cnVjdCBQSzExQ29udGV4dCAqcGsxMV9jdHg7CisjZWxp
ZiBkZWZpbmVkKFNDVFBfVVNFX09QRU5TU0xfU0hBMSkKKwlTSEFfQ1RYIHNoYV9jdHg7CisjZWxz
ZQorCXVuc2lnbmVkIGludCBBOworCXVuc2lnbmVkIGludCBCOworCXVuc2lnbmVkIGludCBDOwor
CXVuc2lnbmVkIGludCBEOworCXVuc2lnbmVkIGludCBFOworCXVuc2lnbmVkIGludCBIMDsKKwl1
bnNpZ25lZCBpbnQgSDE7CisJdW5zaWduZWQgaW50IEgyOworCXVuc2lnbmVkIGludCBIMzsKKwl1
bnNpZ25lZCBpbnQgSDQ7CisJdW5zaWduZWQgaW50IHdvcmRzWzgwXTsKKwl1bnNpZ25lZCBpbnQg
VEVNUDsKKwkvKiBibG9jayBJIGFtIGNvbGxlY3RpbmcgdG8gcHJvY2VzcyAqLworCWNoYXIgc2hh
X2Jsb2NrWzY0XTsKKwkvKiBjb2xsZWN0ZWQgc28gZmFyICovCisJaW50IGhvd19tYW55X2luX2Js
b2NrOworCXVuc2lnbmVkIGludCBydW5uaW5nX3RvdGFsOworI2VuZGlmCit9OworCisjaWYgKGRl
ZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKEtFUk5FTCkpCisjaWZuZGVmIF9LRVJORUwKKyNk
ZWZpbmUgX0tFUk5FTAorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCit2b2lkIHNjdHBfc2hhMV9pbml0KHN0cnVjdCBzY3Rw
X3NoYTFfY29udGV4dCAqKTsKK3ZvaWQgc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qgc2N0cF9zaGEx
X2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBz
Y3RwX3NoYTFfZmluYWwodW5zaWduZWQgY2hhciAqLCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQg
Kik7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3NzX2Z1bmN0aW9ucy5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMy
ZTQ4YzUzOTEuLmYxOTgyNTcyNDY4M2YxYjM0NjdmZTJiODdhOGVkMTMyMmZlNTdhZjggMTAwNzU1
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCisr
KyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCkBAIC0w
LDAgKzEsMTA5NCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh
dXNlLUZyZWVCU0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgTWljaGFlbCBU
dWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwg
YnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDEwLTIwMTIsIGJ5IFJvYmluIFNlZ2dlbG1hbm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lz
L2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zc19m
dW5jdGlvbnMuYyAzMjYxODAgMjAxNy0xMS0yNCAxOTozODo1OVogdHVleGVuICQiKTsKKyNlbmRp
ZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmg+CisjZW5kaWYKKwor
LyoKKyAqIERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluIGFsZ29yaXRobS4KKyAqIEp1c3QgaW50
ZXJhdGVzIHRoZSBzdHJlYW1zIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhci4KKyAqLworCitzdGF0
aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKiwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVu
ZGluZyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X3JlbW92ZShzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAorICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQpOworCitzdGF0aWMgdm9p
ZAorc2N0cF9zc19kZWZhdWx0X2luaXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2Nr
KQoreworCXVpbnQxNl90IGk7CisKKwlhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0g
TlVMTDsKKwlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7CisJVEFJTFFfSU5J
VCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBp
biB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAorCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhp
c3RpbmcgYXNzb2NpYXRpb24gaGFzCisJICogYmVlbiBjaGFuZ2VkLiBXZSBuZWVkIHRvIGFkZCBh
bGwgc3RyZWFtIHF1ZXVlcworCSAqIHRvIHRoZSB3aGVlbC4KKwkgKi8KKwlmb3IgKGkgPSAwOyBp
IDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQlzdGNiLT5hc29jLnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2FkZF90b19zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2MsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM
TCwgaG9sZHNfbG9jayk7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3Nf
ZGVmYXVsdF9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMgU0NUUF9V
TlVTRUQsIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NU
UF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCkpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRB
SUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCVRBSUxRX1JFTU9WRSgmYXNv
Yy0+c3NfZGF0YS5vdXQud2hlZWwsIFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCksIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRf
c3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50
cWVfcHJldiA9IE5VTEw7CisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVM
TDsKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2Ip
OworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfaW5pdF9z
dHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJx
LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCit7CisJaWYgKHdpdGhfc3RycSAh
PSBOVUxMKSB7CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0g
d2l0aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBz
dHJxOworCQl9CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdp
dGhfc3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7
CisJCX0KKwl9CisJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxM
OworCXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfYWRkKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRz
X2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0so
c3RjYik7CisJfQorCS8qIEFkZCB0byB3aGVlbCBpZiBub3QgYWxyZWFkeSBvbiBpdCBhbmQgc3Ry
ZWFtIHF1ZXVlIG5vdCBlbXB0eSAqLworCWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVl
KSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVM
TCkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5V
TEwpKSB7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwKKwkJ
ICAgICAgICAgICAgICAgICAgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOworCX0KKwlp
ZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0K
KwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3NfZGVmYXVsdF9pc19lbXB0eShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jKQoreworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7CisJ
CXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRzX2xvY2spCit7
CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJ
fQorCS8qIFJlbW92ZSBmcm9tIHdoZWVsIGlmIHN0cmVhbSBxdWV1ZSBpcyBlbXB0eSBhbmQgYWN0
dWFsbHkgaXMgb24gdGhlIHdoZWVsICovCisJaWYgKFRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1
ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9uZXh0ICE9IE5V
TEwgfHwKKwkgICAgc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX3ByZXYgIT0gTlVM
TCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKKwkJ
CWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29jLT5zc19kYXRh
Lmxhc3Rfb3V0X3N0cmVhbSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2N0cHdoZWVsX2xpc3RoZWFkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291
dF9zdHJlYW0gPT0gTlVMTCkgeworCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0g
VEFJTFFfTEFTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3Rwd2hlZWxfbGlzdGhlYWQpOworCQkJfQorCQkJaWYgKGFz
b2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKKwkJCQlhc29jLT5zc19kYXRh
Lmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7CisJCQl9CisJCX0KKwkJVEFJTFFfUkVNT1ZFKCZhc29j
LT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOworCQlz
dHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJCXN0cnEtPnNz
X3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKKwl9CisJaWYgKGhvbGRzX2xv
Y2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOwor
fQorCisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICoKK3NjdHBfc3NfZGVmYXVsdF9z
ZWxlY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKKworCWlmIChh
c29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nKSB7CisJCXJldHVybiAoYXNvYy0+c3NfZGF0
YS5sb2NrZWRfb25fc2VuZGluZyk7CisJfQorCXN0cnF0ID0gYXNvYy0+c3NfZGF0YS5sYXN0X291
dF9zdHJlYW07CitkZWZhdWx0X2FnYWluOgorCS8qIEZpbmQgdGhlIG5leHQgc3RyZWFtIHRvIHVz
ZSAqLworCWlmIChzdHJxdCA9PSBOVUxMKSB7CisJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+
c3NfZGF0YS5vdXQud2hlZWwpOworCX0gZWxzZSB7CisJCXN0cnEgPSBUQUlMUV9ORVhUKHN0cnF0
LCBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCWlmIChzdHJxID09IE5VTEwpIHsKKwkJCXN0
cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCQl9CisJfQorCisJ
LyogSWYgQ01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0CisJICogdGhlIHN0cmVhbSBp
biBxdWVzdGlvbiBoYXMgdGhlIGZpcnN0CisJICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5l
dHdvcmsgZGVzdGluYXRpb24KKwkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0
IGlmIHdlCisJICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcK
KwkgKiBUU04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90CisJICogbG9vayBm
b3IgYW5vdGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKKwkgKiB0byB0aGF0IGRlc3RpbmF0
aW9uKS4gSW4gQ01UJ3MgY2FzZSwgYnkKKwkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxs
IHNlbmQgb25lCisJICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KKwkg
Ki8KKwlpZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCisJICAgIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7CisJCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+
b3V0cXVldWUpICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0g
TlVMTCAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkg
eworCQkJaWYgKHN0cnEgPT0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0pIHsKKwkJCQly
ZXR1cm4gKE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJxdCA9IHN0cnE7CisJCQkJZ290byBk
ZWZhdWx0X2FnYWluOworCQkJfQorCQl9CisJfQorCXJldHVybiAoc3RycSk7Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0IFNDVFBfVU5V
U0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
c3RycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vdmVkX2hvd19tdWNoIFNDVFBf
VU5VU0VEKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKworCWFz
b2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwlpZiAoc3RjYi0+YXNvYy5pZGF0
YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7
CisJCWlmICgoc3AgIT0gTlVMTCkgJiYgKHNwLT5zb21lX3Rha2VuID09IDEpKSB7CisJCQlzdGNi
LT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOworCQl9IGVsc2UgeworCQkJ
c3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gTlVMTDsKKwkJfQorCX0gZWxz
ZSB7CisJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7CisJfQor
CXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBT
Q1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYyBTQ1RQX1VOVVNFRCkKK3sKKwkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgaGVy
ZSAqLworCXJldHVybjsKK30KKworc3RhdGljIGludAorc2N0cF9zc19kZWZhdWx0X2dldF92YWx1
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELCB1aW50MTZfdCAqdmFsdWUgU0NUUF9V
TlVTRUQpCit7CisJLyogTm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8KKwlyZXR1cm4gKC0xKTsK
K30KKworc3RhdGljIGludAorc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBf
VU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICpzdHJxIFNDVFBfVU5VU0VELCB1aW50MTZfdCB2YWx1ZSBTQ1RQX1VOVVNFRCkKK3sKKwkvKiBO
b3RoaW5nIHRvIGJlIGRvbmUgaGVyZSAqLworCXJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50
CitzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUoc3RydWN0IHNjdHBfdGNi
ICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxOworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9w
ZW5kaW5nICpzcDsKKworCWlmIChhc29jLT5zdHJlYW1fcXVldWVfY250ICE9IDEpIHsKKwkJcmV0
dXJuICgwKTsKKwl9CisJc3RycSA9IGFzb2MtPnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmc7CisJ
aWYgKHN0cnEgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlzcCA9IFRBSUxRX0ZJUlNU
KCZzdHJxLT5vdXRxdWV1ZSk7CisJaWYgKHNwID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9
CisJcmV0dXJuICghc3AtPm1zZ19pc19jb21wbGV0ZSk7Cit9CisKKy8qCisgKiBSZWFsIHJvdW5k
LXJvYmluIGFsZ29yaXRobS4KKyAqIEFsd2F5cyBpbnRlcmF0ZXMgdGhlIHN0cmVhbXMgaW4gYXNj
ZW5kaW5nIG9yZGVyLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9zc19ycl9hZGQoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AgU0NUUF9VTlVTRUQsIGludCBob2xkc19sb2Nr
KQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnF0OworCisJaWYgKGhvbGRzX2xvY2sg
PT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQorCWlmICghVEFJTFFfRU1Q
VFkoJnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bv
a2UudHFlX25leHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nw
b2tlLnRxZV9wcmV2ID09IE5VTEwpKSB7CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0
YS5vdXQud2hlZWwpKSB7CisJCQlUQUlMUV9JTlNFUlRfSEVBRCgmYXNvYy0+c3NfZGF0YS5vdXQu
d2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJfSBlbHNlIHsKKwkJCXN0
cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwkJCXdoaWxlIChz
dHJxdCAhPSBOVUxMICYmIChzdHJxdC0+c2lkIDwgc3RycS0+c2lkKSkgeworCQkJCXN0cnF0ID0g
VEFJTFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOworCQkJfQorCQkJaWYg
KHN0cnF0ICE9IE5VTEwpIHsKKwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKHN0cnF0LCBzdHJxLCBz
c19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCQl9IGVsc2UgeworCQkJCVRBSUxRX0lOU0VSVF9U
QUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bv
a2UpOworCQkJfQorCQl9CisJfQorCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsKK30KKworLyoKKyAqIFJlYWwgcm91bmQt
cm9iaW4gcGVyIHBhY2tldCBhbGdvcml0aG0uCisgKiBBbHdheXMgaW50ZXJhdGVzIHRoZSBzdHJl
YW1zIGluIGFzY2VuZGluZyBvcmRlciBhbmQKKyAqIG9ubHkgZmlsbHMgbWVzc2FnZXMgb2YgdGhl
IHNhbWUgc3RyZWFtIGluIGEgcGFja2V0LgorICovCitzdGF0aWMgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqCitzY3RwX3NzX3JycF9zZWxlY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5V
U0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCisgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJcmV0dXJuIChhc29jLT5zc19k
YXRhLmxhc3Rfb3V0X3N0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX3JycF9wYWNr
ZXRfZG9uZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKKworCXN0
cnF0ID0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW07CitycnBfYWdhaW46CisJLyogRmlu
ZCB0aGUgbmV4dCBzdHJlYW0gdG8gdXNlICovCisJaWYgKHN0cnF0ID09IE5VTEwpIHsKKwkJc3Ry
cSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJfSBlbHNlIHsKKwkJ
c3RycSA9IFRBSUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJaWYg
KHN0cnEgPT0gTlVMTCkgeworCQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91
dC53aGVlbCk7CisJCX0KKwl9CisKKwkvKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRl
IHRoYXQKKwkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKKwkgKiBpdGVt
IHBvaW50ZWQgdG93YXJkcyBhcmUgbmV0d29yayBkZXN0aW5hdGlvbgorCSAqIHJlcXVlc3RlZCBi
eSB0aGUgY2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UKKwkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQg
dG8gYSBzdHJlYW0gKGFzc2lnbmluZworCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5j
ZSB3ZSBjYW5ub3QKKwkgKiBsb29rIGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2Vu
ZAorCSAqIHRvIHRoYXQgZGVzdGluYXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQorCSAqIHNraXBw
aW5nIHRoaXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBvbmUKKwkgKiBkYXRhIHBhY2tldCB0b3dhcmRz
IHRoZSByZXF1ZXN0ZWQgbmV0LgorCSAqLworCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5V
TEwgJiYKKwkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDApIHsKKwkJ
aWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZz
dHJxLT5vdXRxdWV1ZSktPm5ldCAhPSBOVUxMICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+
b3V0cXVldWUpLT5uZXQgIT0gbmV0KSB7CisJCQlpZiAoc3RycSA9PSBhc29jLT5zc19kYXRhLmxh
c3Rfb3V0X3N0cmVhbSkgeworCQkJCXN0cnEgPSBOVUxMOworCQkJfSBlbHNlIHsKKwkJCQlzdHJx
dCA9IHN0cnE7CisJCQkJZ290byBycnBfYWdhaW47CisJCQl9CisJCX0KKwl9CisJYXNvYy0+c3Nf
ZGF0YS5sYXN0X291dF9zdHJlYW0gPSBzdHJxOworCXJldHVybjsKK30KKworCisvKgorICogUHJp
b3JpdHkgYWxnb3JpdGhtLgorICogQWx3YXlzIHByZWZlcnMgc3RyZWFtcyBiYXNlZCBvbiB0aGVp
ciBwcmlvcml0eSBpZC4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfc3NfcHJpb19jbGVhcihzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAg
ICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQoreworCWlmICho
b2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwl3aGls
ZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKKwkJc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCk7CisJCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9y
aXR5ID0gMDsKKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBU
QUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19wYXJhbXMucHJpby5uZXh0
X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5V
TEw7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwor
CisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKKwlpZiAoaG9sZHNf
bG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX3ByaW9faW5pdF9zdHJlYW0oc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICp3aXRoX3N0cnEpCit7CisJaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7CisJCWlmIChz
dGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0gd2l0aF9zdHJxKSB7CisJCQlz
dGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOworCQl9CisJCWlmIChz
dGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdpdGhfc3RycSkgeworCQkJc3Rj
Yi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7CisJCX0KKwl9CisJc3RycS0+
c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJc3RycS0+c3NfcGFy
YW1zLnByaW8ubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJaWYgKHdpdGhfc3RycSAhPSBO
VUxMKSB7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0gd2l0aF9zdHJxLT5zc19w
YXJhbXMucHJpby5wcmlvcml0eTsKKwl9IGVsc2UgeworCQlzdHJxLT5zc19wYXJhbXMucHJpby5w
cmlvcml0eSA9IDA7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfcHJp
b19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0
IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAg
ICAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxdDsK
KworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwor
CX0KKwkvKiBBZGQgdG8gd2hlZWwgaWYgbm90IGFscmVhZHkgb24gaXQgYW5kIHN0cmVhbSBxdWV1
ZSBub3QgZW1wdHkgKi8KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkg
ICAgKHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYK
KwkgICAgKHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPT0gTlVMTCkp
IHsKKwkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKKwkJCVRB
SUxRX0lOU0VSVF9IRUFEKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1z
LnByaW8ubmV4dF9zcG9rZSk7CisJCX0gZWxzZSB7CisJCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCQl3aGlsZSAoc3RycXQgIT0gTlVMTCAmJiBzdHJx
dC0+c3NfcGFyYW1zLnByaW8ucHJpb3JpdHkgPCBzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0
eSkgeworCQkJCXN0cnF0ID0gVEFJTFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnByaW8ubmV4dF9z
cG9rZSk7CisJCQl9CisJCQlpZiAoc3RycXQgIT0gTlVMTCkgeworCQkJCVRBSUxRX0lOU0VSVF9C
RUZPUkUoc3RycXQsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQkJfSBlbHNl
IHsKKwkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEs
IHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQkJfQorCQl9CisJfQorCWlmIChob2xkc19s
b2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsK
K30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfcHJpb19yZW1vdmUoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3Bl
bmRpbmcgKnNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9j
aykKK3sKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNi
KTsKKwl9CisJLyogUmVtb3ZlIGZyb20gd2hlZWwgaWYgc3RyZWFtIHF1ZXVlIGlzIGVtcHR5IGFu
ZCBhY3R1YWxseSBpcyBvbiB0aGUgd2hlZWwgKi8KKwlpZiAoVEFJTFFfRU1QVFkoJnN0cnEtPm91
dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4
dCAhPSBOVUxMIHx8CisJICAgIHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3By
ZXYgIT0gTlVMTCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0
cnEpIHsKKwkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29j
LT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwgc2N0cHdoZWVsX2xpc3RoZWFkLAorCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsK
KwkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBOVUxMKSB7CisJCQkJYXNv
Yy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBUQUlMUV9MQVNUKCZhc29jLT5zc19kYXRhLm91
dC53aGVlbCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHB3aGVl
bF9saXN0aGVhZCk7CisJCQl9CisJCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0g
PT0gc3RycSkgeworCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKKwkJ
CX0KKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzdHJxLCBz
c19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9z
cG9rZS50cWVfbmV4dCA9IE5VTEw7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2Uu
dHFlX3ByZXYgPSBOVUxMOworCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENC
X1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0
cF9zdHJlYW1fb3V0Kgorc2N0cF9zc19wcmlvX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ig
U0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqc3RycSwgKnN0cnF0LCAqc3RycW47CisKKwlzdHJxdCA9IGFzb2MtPnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtOworcHJpb19hZ2FpbjoKKwkvKiBGaW5kIHRoZSBuZXh0IHN0cmVhbSB0byB1c2Ug
Ki8KKwlpZiAoc3RycXQgPT0gTlVMTCkgeworCQlzdHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNz
X2RhdGEub3V0LndoZWVsKTsKKwl9IGVsc2UgeworCQlzdHJxbiA9IFRBSUxRX05FWFQoc3RycXQs
IHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQlpZiAoc3RycW4gIT0gTlVMTCAmJgorCQkg
ICAgc3RycW4tPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID09IHN0cnF0LT5zc19wYXJhbXMucHJp
by5wcmlvcml0eSkgeworCQkJc3RycSA9IHN0cnFuOworCQl9IGVsc2UgeworCQkJc3RycSA9IFRB
SUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCX0KKwl9CisKKwkvKiBJZiBD
TVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQKKwkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0
aW9uIGhhcyB0aGUgZmlyc3QKKwkgKiBpdGVtIHBvaW50ZWQgdG93YXJkcyBhcmUgbmV0d29yayBk
ZXN0aW5hdGlvbgorCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UK
KwkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFzc2lnbmluZworCSAqIFRT
TidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKKwkgKiBsb29rIGZvciBhbm90
aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAorCSAqIHRvIHRoYXQgZGVzdGluYXRpb24pLiBJ
biBDTVQncyBjYXNlLCBieQorCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBv
bmUKKwkgKiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0LgorCSAqLworCWlm
IChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYKKwkgICAgU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2NtdF9vbl9vZmYpID09IDApIHsKKwkJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1
ZSkgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAhPSBOVUxMICYm
CisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gbmV0KSB7CisJCQlp
ZiAoc3RycSA9PSBhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSkgeworCQkJCXJldHVybiAo
TlVMTCk7CisJCQl9IGVsc2UgeworCQkJCXN0cnF0ID0gc3RycTsKKwkJCQlnb3RvIHByaW9fYWdh
aW47CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChzdHJxKTsKK30KKworc3RhdGljIGludAorc2N0
cF9zc19wcmlvX2dldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCAqdmFsdWUpCit7
CisJaWYgKHN0cnEgPT0gTlVMTCkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisJKnZhbHVlID0gc3Ry
cS0+c3NfcGFyYW1zLnByaW8ucHJpb3JpdHk7CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGlu
dAorc2N0cF9zc19wcmlvX3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCB2YWx1ZSkKK3sKKwlpZiAoc3RycSA9PSBOVUxM
KSB7CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSA9
IHZhbHVlOworCXNjdHBfc3NfcHJpb19yZW1vdmUoc3RjYiwgYXNvYywgc3RycSwgTlVMTCwgMSk7
CisJc2N0cF9zc19wcmlvX2FkZChzdGNiLCBhc29jLCBzdHJxLCBOVUxMLCAxKTsKKwlyZXR1cm4g
KDEpOworfQorCisvKgorICogRmFpciBiYW5kd2lkdGggYWxnb3JpdGhtLgorICogTWFpbnRhaW5z
IGFuIGVxdWFsIHRyb3VnaHB1dCBwZXIgc3RyZWFtLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9z
c19mYl9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19s
b2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0
Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkp
IHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCk7CisJCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJCXN0cnEtPnNzX3Bh
cmFtcy5mYi5yb3VuZHMgPSAtMTsKKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEu
b3V0LndoZWVsLCBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19wYXJh
bXMuZmIubmV4dF9zcG9rZSk7CisJCXN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9u
ZXh0ID0gTlVMTDsKKwkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBO
VUxMOworCX0KKwlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7CisJaWYgKGhv
bGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0
dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9pbml0X3N0cmVhbShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQgKndpdGhfc3RycSkKK3sKKwlpZiAod2l0aF9zdHJxICE9IE5VTEwpIHsKKwkJaWYg
KHN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9PSB3aXRoX3N0cnEpIHsKKwkJ
CXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IHN0cnE7CisJCX0KKwkJaWYg
KHN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gd2l0aF9zdHJxKSB7CisJCQlz
dGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwkJfQorCX0KKwlzdHJx
LT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJc3RycS0+c3NfcGFy
YW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOworCWlmICh3aXRoX3N0cnEgIT0gTlVM
TCkgeworCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gd2l0aF9zdHJxLT5zc19wYXJhbXMu
ZmIucm91bmRzOworCX0gZWxzZSB7CisJCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAtMTsK
Kwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9hZGQoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgIGludCBob2xkc19sb2Nr
KQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2Ip
OworCX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEt
PnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID09IE5VTEwpICYmCisJICAgIChzdHJx
LT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9PSBOVUxMKSkgeworCQlpZiAoc3Ry
cS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA8IDApCisJCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRz
ID0gVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bGVuZ3RoOworCQlUQUlMUV9JTlNFUlRf
VEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nw
b2tlKTsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9D
SyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9yZW1v
dmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
KyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAg
ICAgIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9U
Q0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwkvKiBSZW1vdmUgZnJvbSB3aGVlbCBpZiBzdHJlYW0g
cXVldWUgaXMgZW1wdHkgYW5kIGFjdHVhbGx5IGlzIG9uIHRoZSB3aGVlbCAqLworCWlmIChUQUlM
UV9FTVBUWSgmc3RycS0+b3V0cXVldWUpICYmCisJICAgIChzdHJxLT5zc19wYXJhbXMuZmIubmV4
dF9zcG9rZS50cWVfbmV4dCAhPSBOVUxMIHx8CisJICAgIHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0
X3Nwb2tlLnRxZV9wcmV2ICE9IE5VTEwpKSB7CisJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0
X3N0cmVhbSA9PSBzdHJxKSB7CisJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRB
SUxRX1BSRVYoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0sIHNjdHB3aGVlbF9saXN0aGVh
ZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NfcGFyYW1zLmZiLm5l
eHRfc3Bva2UpOworCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IE5VTEwp
IHsKKwkJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRBSUxRX0xBU1QoJmFzb2Mt
PnNzX2RhdGEub3V0LndoZWVsLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2N0cHdoZWVsX2xpc3RoZWFkKTsKKwkJCX0KKwkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rf
b3V0X3N0cmVhbSA9PSBzdHJxKSB7CisJCQkJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0g
PSBOVUxMOworCQkJfQorCQl9CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hl
ZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLmZi
Lm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9z
cG9rZS50cWVfcHJldiA9IE5VTEw7CisJfQorCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NU
UF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQqCitzY3RwX3NzX2ZiX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9v
dXQgKnN0cnEgPSBOVUxMLCAqc3RycXQ7CisKKwlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9z
dHJlYW0gPT0gTlVMTCB8fAorCSAgICBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hl
ZWwpID09IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzY3Rwd2hlZWxfbGlz
dGhlYWQpKSB7CisJCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVs
KTsKKwl9IGVsc2UgeworCQlzdHJxdCA9IFRBSUxRX05FWFQoYXNvYy0+c3NfZGF0YS5sYXN0X291
dF9zdHJlYW0sIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwl9CisJZG8geworCQlpZiAoKHN0
cnF0ICE9IE5VTEwpICYmCisJCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2Zm
KSA+IDApIHx8CisJCSAgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAw
ICYmCisJCSAgICAgIChuZXQgPT0gTlVMTCB8fCAoVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1
ZSkgJiYgVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSktPm5ldCA9PSBOVUxMKSB8fAorCQkg
ICAgICAgKG5ldCAhPSBOVUxMICYmIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpICYmIFRB
SUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAmJgorCQkgICAgICAgIFRB
SUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgPT0gbmV0KSkpKSkgeworCQkJaWYgKChz
dHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyA+PSAwKSAmJiAoc3RycSA9PSBOVUxMIHx8CisJCQkJ
c3RycXQtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPCBzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzKSkg
eworCQkJCXN0cnEgPSBzdHJxdDsKKwkJCX0KKwkJfQorCQlpZiAoc3RycXQgIT0gTlVMTCkgewor
CQkJc3RycXQgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSk7CisJ
CX0gZWxzZSB7CisJCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCk7CisJCX0KKwl9IHdoaWxlIChzdHJxdCAhPSBzdHJxKTsKKwlyZXR1cm4gKHN0cnEpOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9zY2hlZHVsZWQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCisgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
c3RycSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb3ZlZF9ob3dfbXVjaCBTQ1RQX1VOVVNF
RCkKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisJc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqc3RycXQ7CisJaW50IHN1YnRyYWN0OworCisJaWYgKHN0Y2ItPmFzb2Mu
aWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVl
dWUpOworCQlpZiAoKHNwICE9IE5VTEwpICYmIChzcC0+c29tZV90YWtlbiA9PSAxKSkgeworCQkJ
c3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKKwkJfSBlbHNlIHsK
KwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7CisJCX0KKwl9
IGVsc2UgeworCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBOVUxMOwor
CX0KKwlzdWJ0cmFjdCA9IHN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHM7CisJVEFJTFFfRk9SRUFD
SChzdHJxdCwgJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzc19wYXJhbXMuZmIubmV4dF9zcG9r
ZSkgeworCQlzdHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyAtPSBzdWJ0cmFjdDsKKwkJaWYgKHN0
cnF0LT5zc19wYXJhbXMuZmIucm91bmRzIDwgMCkKKwkJCXN0cnF0LT5zc19wYXJhbXMuZmIucm91
bmRzID0gMDsKKwl9CisJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkpIHsKKwkJc3Ry
cS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPmxl
bmd0aDsKKwl9IGVsc2UgeworCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gLTE7CisJfQor
CWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwlyZXR1cm47Cit9CisKKy8q
CisgKiBGaXJzdC1jb21lLCBmaXJzdC1zZXJ2ZSBhbGdvcml0aG0uCisgKiBNYWludGFpbnMgdGhl
IG9yZGVyIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3Nj
dHBfc3NfZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3Ry
cSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAorICAgICAgICAgICAgICAg
ICBpbnQgaG9sZHNfbG9jayk7CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZjZnNfaW5pdChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAg
ICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCit7CisJdWludDMyX3QgeCwgbiA9IDAsIGFkZF9t
b3JlID0gMTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisJdWludDE2
X3QgaTsKKworCVRBSUxRX0lOSVQoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpOworCS8qCisJICog
SWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAorCSAqIHRoZSBz
Y2hlZHVsZXIgb2YgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gaGFzCisJICogYmVlbiBjaGFuZ2Vk
LiBXZSBjYW4gb25seSBjeWNsZSB0aHJvdWdoIHRoZQorCSAqIHN0cmVhbSBxdWV1ZXMgYW5kIGFk
ZCBldmVyeXRoaW5nIHRvIHRoZSBGQ0ZTCisJICogcXVldWUuCisJICovCisJd2hpbGUgKGFkZF9t
b3JlKSB7CisJCWFkZF9tb3JlID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250OyBpKyspIHsKKwkJCXNwID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc3RybW91
dFtpXS5vdXRxdWV1ZSk7CisJCQl4ID0gMDsKKwkJCS8qIEZpbmQgbi4gbWVzc2FnZSBpbiBjdXJy
ZW50IHN0cmVhbSBxdWV1ZSAqLworCQkJd2hpbGUgKHNwICE9IE5VTEwgJiYgeCA8IG4pIHsKKwkJ
CQlzcCA9IFRBSUxRX05FWFQoc3AsIG5leHQpOworCQkJCXgrKzsKKwkJCX0KKwkJCWlmIChzcCAh
PSBOVUxMKSB7CisJCQkJc2N0cF9zc19mY2ZzX2FkZChzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2It
PmFzb2Muc3RybW91dFtpXSwgc3AsIGhvbGRzX2xvY2spOworCQkJCWFkZF9tb3JlID0gMTsKKwkJ
CX0KKwkJfQorCQluKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3Nf
ZmNmc19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19s
b2NrKQoreworCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewor
CQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQl9CisJCXdoaWxlICghVEFJTFFfRU1QVFko
JmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7CisJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2Rh
dGEub3V0Lmxpc3QsIFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KSwgc3NfbmV4
dCk7CisJCX0KKwkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxP
Q0soc3RjYik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19m
Y2ZzX2luaXRfc3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqd2l0aF9zdHJxKQoreworCWlmICh3
aXRoX3N0cnEgIT0gTlVMTCkgeworCQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9z
ZW5kaW5nID09IHdpdGhfc3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9z
ZW5kaW5nID0gc3RycTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0
cmVhbSA9PSB3aXRoX3N0cnEpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJl
YW0gPSBzdHJxOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3Nf
ZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSBTQ1RQ
X1VOVVNFRCwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAorICAgICAgICAg
ICAgICAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVND
VFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJaWYgKHNwICYmIChzcC0+c3NfbmV4dC50cWVf
bmV4dCA9PSBOVUxMKSAmJgorCSAgICAoc3AtPnNzX25leHQudHFlX3ByZXYgPT0gTlVMTCkpIHsK
KwkJVEFJTFFfSU5TRVJUX1RBSUwoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QsIHNwLCBzc19uZXh0
KTsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhz
dGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50CitzY3RwX3NzX2ZjZnNfaXNfZW1w
dHkoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYykKK3sKKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3Qp
KSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX3NzX2ZjZnNfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgKnN0cnEgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1
ZV9wZW5kaW5nICpzcCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCit7CisJ
aWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQor
CWlmIChzcCAmJgorCSAgICAoKHNwLT5zc19uZXh0LnRxZV9uZXh0ICE9IE5VTEwpIHx8CisJICAg
ICAoc3AtPnNzX25leHQudHFlX3ByZXYgIT0gTlVMTCkpKSB7CisJCVRBSUxRX1JFTU9WRSgmYXNv
Yy0+c3NfZGF0YS5vdXQubGlzdCwgc3AsIHNzX25leHQpOworCX0KKwlpZiAoaG9sZHNfbG9jayA9
PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisK
Kworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKgorc2N0cF9zc19mY2ZzX3NlbGVjdChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwK
KyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJ
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVf
cGVuZGluZyAqc3A7CisKKwlzcCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0
KTsKK2RlZmF1bHRfYWdhaW46CisJaWYgKHNwICE9IE5VTEwpIHsKKwkJc3RycSA9ICZhc29jLT5z
dHJtb3V0W3NwLT5zaWRdOworCX0gZWxzZSB7CisJCXN0cnEgPSBOVUxMOworCX0KKworCS8qCisJ
ICogSWYgQ01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0CisJICogdGhlIHN0cmVhbSBp
biBxdWVzdGlvbiBoYXMgdGhlIGZpcnN0CisJICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5l
dHdvcmsgZGVzdGluYXRpb24KKwkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0
IGlmIHdlCisJICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcK
KwkgKiBUU04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90CisJICogbG9vayBm
b3IgYW5vdGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKKwkgKiB0byB0aGF0IGRlc3RpbmF0
aW9uKS4gSW4gQ01UJ3MgY2FzZSwgYnkKKwkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxs
IHNlbmQgb25lCisJICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KKwkg
Ki8KKwlpZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCisJICAgIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7CisJCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+
b3V0cXVldWUpICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0g
TlVMTCAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkg
eworCQkJc3AgPSBUQUlMUV9ORVhUKHNwLCBzc19uZXh0KTsKKwkJCWdvdG8gZGVmYXVsdF9hZ2Fp
bjsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnEpOworfQorCitjb25zdCBzdHJ1Y3Qgc2N0cF9zc19m
dW5jdGlvbnMgc2N0cF9zc19mdW5jdGlvbnNbXSA9IHsKKy8qIFNDVFBfU1NfREVGQVVMVCAqLwor
eworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKwlzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwlzY3RwX3NzX2RlZmF1bHRfY2xlYXIsCisJ
c2N0cF9zc19kZWZhdWx0X2luaXRfc3RyZWFtLAorCXNjdHBfc3NfZGVmYXVsdF9hZGQsCisJc2N0
cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCisJc2N0cF9z
c19kZWZhdWx0X3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCXNjdHBfc3Nf
ZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBf
c3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNv
bXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwku
c2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0
cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKKwkuc2N0cF9zc19hZGRfdG9fc3Ry
ZWFtID0gc2N0cF9zc19kZWZhdWx0X2FkZCwKKwkuc2N0cF9zc19pc19lbXB0eSA9IHNjdHBfc3Nf
ZGVmYXVsdF9pc19lbXB0eSwKKwkuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0gPSBzY3RwX3Nz
X2RlZmF1bHRfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1
bHRfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVs
ZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUs
CisJLnNjdHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKKwkuc2N0
cF9zc19zZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAorCS5zY3RwX3NzX2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNv
bXBsZXRlCisjZW5kaWYKK30sCisvKiBTQ1RQX1NTX1JPVU5EX1JPQklOICovCit7CisjaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXNj
dHBfc3NfZGVmYXVsdF9pbml0LAorCXNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwlzY3RwX3NzX2Rl
ZmF1bHRfaW5pdF9zdHJlYW0sCisJc2N0cF9zc19ycl9hZGQsCisJc2N0cF9zc19kZWZhdWx0X2lz
X2VtcHR5LAorCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCisJc2N0cF9zc19kZWZhdWx0X3NlbGVj
dCwKKwlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRf
ZG9uZSwKKwlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRf
dmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQor
CS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9
IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3Nf
ZGVmYXVsdF9pbml0X3N0cmVhbSwKKwkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19y
cl9hZGQsCisJLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJ
LnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwku
c2N0cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKKwkuc2N0cF9z
c19zY2hlZHVsZWQgPSBzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCS5zY3RwX3NzX3BhY2tl
dF9kb25lID0gc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1
ZSA9IHNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUsCisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0
cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0
ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAor
LyogU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQgKi8KK3sKKyNpZiBkZWZpbmVkKF9fV2luZG93
c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJc2N0cF9zc19kZWZhdWx0
X2luaXQsCisJc2N0cF9zc19kZWZhdWx0X2NsZWFyLAorCXNjdHBfc3NfZGVmYXVsdF9pbml0X3N0
cmVhbSwKKwlzY3RwX3NzX3JyX2FkZCwKKwlzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJc2N0
cF9zc19kZWZhdWx0X3JlbW92ZSwKKwlzY3RwX3NzX3JycF9zZWxlY3QsCisJc2N0cF9zc19kZWZh
dWx0X3NjaGVkdWxlZCwKKwlzY3RwX3NzX3JycF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2RlZmF1
bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19kZWZh
dWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBzY3Rw
X3NzX2RlZmF1bHRfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVh
ciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwK
Kwkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQsCisJLnNjdHBfc3NfaXNf
ZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJLnNjdHBfc3NfcmVtb3ZlX2Zyb21f
c3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwkuc2N0cF9zc19zZWxlY3Rfc3RyZWFt
ID0gc2N0cF9zc19ycnBfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVm
YXVsdF9zY2hlZHVsZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX3JycF9wYWNr
ZXRfZG9uZSwKKwkuc2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVl
LAorCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJLnNj
dHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9t
c2dzX2luY29tcGxldGUKKyNlbmRpZgorfSwKKy8qIFNDVFBfU1NfUFJJT1JJVFkgKi8KK3sKKyNp
ZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
CisJc2N0cF9zc19kZWZhdWx0X2luaXQsCisJc2N0cF9zc19wcmlvX2NsZWFyLAorCXNjdHBfc3Nf
cHJpb19pbml0X3N0cmVhbSwKKwlzY3RwX3NzX3ByaW9fYWRkLAorCXNjdHBfc3NfZGVmYXVsdF9p
c19lbXB0eSwKKwlzY3RwX3NzX3ByaW9fcmVtb3ZlLAorCXNjdHBfc3NfcHJpb19zZWxlY3QsCisJ
c2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwKKwlzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUs
CisJc2N0cF9zc19wcmlvX2dldF92YWx1ZSwKKwlzY3RwX3NzX3ByaW9fc2V0X3ZhbHVlLAorCXNj
dHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2Vsc2UKKwkuc2N0cF9zc19p
bml0ID0gc2N0cF9zc19kZWZhdWx0X2luaXQsCisJLnNjdHBfc3NfY2xlYXIgPSBzY3RwX3NzX3By
aW9fY2xlYXIsCisJLnNjdHBfc3NfaW5pdF9zdHJlYW0gPSBzY3RwX3NzX3ByaW9faW5pdF9zdHJl
YW0sCisJLnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfcHJpb19hZGQsCisJLnNjdHBf
c3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJLnNjdHBfc3NfcmVtb3Zl
X2Zyb21fc3RyZWFtID0gc2N0cF9zc19wcmlvX3JlbW92ZSwKKwkuc2N0cF9zc19zZWxlY3Rfc3Ry
ZWFtID0gc2N0cF9zc19wcmlvX3NlbGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3Nz
X2RlZmF1bHRfc2NoZWR1bGVkLAorCS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19kZWZh
dWx0X3BhY2tldF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfcHJpb19nZXRf
dmFsdWUsCisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19wcmlvX3NldF92YWx1ZSwKKwku
c2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2Vy
X21zZ3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19GQUlSX0JBTkRXSVRIICov
Cit7CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorCXNjdHBfc3NfZGVmYXVsdF9pbml0LAorCXNjdHBfc3NfZmJfY2xlYXIsCisJc2N0
cF9zc19mYl9pbml0X3N0cmVhbSwKKwlzY3RwX3NzX2ZiX2FkZCwKKwlzY3RwX3NzX2RlZmF1bHRf
aXNfZW1wdHksCisJc2N0cF9zc19mYl9yZW1vdmUsCisJc2N0cF9zc19mYl9zZWxlY3QsCisJc2N0
cF9zc19mYl9zY2hlZHVsZWQsCisJc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCXNjdHBf
c3NfZGVmYXVsdF9nZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwlzY3Rw
X3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbHNlCisJLnNjdHBfc3NfaW5p
dCA9IHNjdHBfc3NfZGVmYXVsdF9pbml0LAorCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19mYl9j
bGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmJfaW5pdF9zdHJlYW0sCisJ
LnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfZmJfYWRkLAorCS5zY3RwX3NzX2lzX2Vt
cHR5ID0gc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0
cmVhbSA9IHNjdHBfc3NfZmJfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3Rw
X3NzX2ZiX3NlbGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2ZiX3NjaGVkdWxl
ZCwKKwkuc2N0cF9zc19wYWNrZXRfZG9uZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwK
Kwkuc2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCS5zY3Rw
X3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJLnNjdHBfc3NfaXNf
dXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29t
cGxldGUKKyNlbmRpZgorfSwKKy8qIFNDVFBfU1NfRklSU1RfQ09NRSAqLworeworI2lmIGRlZmlu
ZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlzY3Rw
X3NzX2ZjZnNfaW5pdCwKKwlzY3RwX3NzX2ZjZnNfY2xlYXIsCisJc2N0cF9zc19mY2ZzX2luaXRf
c3RyZWFtLAorCXNjdHBfc3NfZmNmc19hZGQsCisJc2N0cF9zc19mY2ZzX2lzX2VtcHR5LAorCXNj
dHBfc3NfZmNmc19yZW1vdmUsCisJc2N0cF9zc19mY2ZzX3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1
bHRfc2NoZWR1bGVkLAorCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2Rl
ZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19k
ZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBz
Y3RwX3NzX2ZjZnNfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZmNmc19jbGVhciwK
Kwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmNmc19pbml0X3N0cmVhbSwKKwkuc2N0
cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19mY2ZzX2FkZCwKKwkuc2N0cF9zc19pc19lbXB0
eSA9IHNjdHBfc3NfZmNmc19pc19lbXB0eSwKKwkuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0g
PSBzY3RwX3NzX2ZjZnNfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3Nz
X2ZjZnNfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hl
ZHVsZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2Rv
bmUsCisJLnNjdHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKKwku
c2N0cF9zc19zZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAorCS5zY3RwX3Nz
X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19p
bmNvbXBsZXRlCisjZW5kaWYKK30KK307CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9zdHJ1Y3RzLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5
MS4uZjQ5ZjJjODdhNzcwMjc5N2Y3NzBkMWM4M2VlNTIyMjVmZGZhNzVlYyAxMDA3NTUKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N0cnVjdHMuaApAQCAtMCwwICsxLDEzMTAgQEAKKy8q
LQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHly
aWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hh
ZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBO
ZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJT
RF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lz
L25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggMzI1MzcwIDIwMTctMTEtMDMgMjA6NDY6MTJaIHR1ZXhl
biAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NUUlVDVFNfSF8KKyNkZWZp
bmUgX05FVElORVRfU0NUUF9TVFJVQ1RTX0hfCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3Mu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2F1dGguaD4KKworc3RydWN0IHNjdHBfdGltZXIgeworCXNjdHBfb3NfdGltZXJfdCB0aW1l
cjsKKworCWludCB0eXBlOworCS8qCisJICogRGVwZW5kaW5nIG9uIHRoZSB0aW1lciB0eXBlIHRo
ZXNlIHdpbGwgYmUgc2V0dXAgYW5kIGNhc3Qgd2l0aCB0aGUKKwkgKiBhcHByb3ByaWF0ZSBlbnRp
dHkuCisJICovCisJdm9pZCAqZXA7CisJdm9pZCAqdGNiOworCXZvaWQgKm5ldDsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwl2b2lkICp2
bmV0OworI2VuZGlmCisKKwkvKiBmb3Igc2FuaXR5IGNoZWNraW5nICovCisJdm9pZCAqc2VsZjsK
Kwl1aW50MzJfdCB0aWNrczsKKwl1aW50MzJfdCBzdG9wcGVkX2Zyb207Cit9OworCisKK3N0cnVj
dCBzY3RwX2Zvb19zdHVmZiB7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwl1aW50MzJfdCAg
ICAgICAgbGluZW5vOworCXVpbnQzMl90ICAgICAgICB0aWNrczsKKwlpbnQgICAgICAgICAgICAg
dXBkb3duOworfTsKKworCisvKgorICogVGhpcyBpcyB0aGUgaW5mb3JtYXRpb24gd2UgdHJhY2sg
b24gZWFjaCBpbnRlcmZhY2UgdGhhdCB3ZSBrbm93IGFib3V0IGZyb20KKyAqIHRoZSBkaXN0YW50
IGVuZC4KKyAqLworVEFJTFFfSEVBRChzY3RwbmV0bGlzdGhlYWQsIHNjdHBfbmV0cyk7CisKK3N0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0IHsKKwlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9y
ZXNldF9saXN0KSBuZXh0X3Jlc3A7CisJdWludDMyX3Qgc2VxOworCXVpbnQzMl90IHRzbjsKKwl1
aW50MzJfdCBudW1iZXJfZW50cmllczsKKwl1aW50MTZfdCBsaXN0X29mX3N0cmVhbXNbXTsKK307
CisKK1RBSUxRX0hFQUQoc2N0cF9yZXNldGhlYWQsIHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QpOwor
CisvKgorICogVXNlcnMgb2YgdGhlIGl0ZXJhdG9yIG5lZWQgdG8gbWFsbG9jIGEgaXRlcmF0b3Ig
d2l0aCBhIGNhbGwgdG8KKyAqIHNjdHBfaW5pdGlhdGVfaXRlcmF0b3IoaW5wX2Z1bmMsIGFzc29j
X2Z1bmMsIGlucF9mdW5jLCAgcGNiX2ZsYWdzLCBwY2JfZmVhdHVyZXMsCisgKiAgICAgYXNvY19z
dGF0ZSwgdm9pZC1wdHItYXJnLCB1aW50MzItYXJnLCBlbmRfZnVuYywgaW5wKTsKKyAqCisgKiBV
c2UgdGhlIGZvbGxvd2luZyB0d28gZGVmaW5lcyBpZiB5b3UgZG9uJ3QgY2FyZSB3aGF0IHBjYiBm
bGFncyBhcmUgb24gdGhlIEVQCisgKiBhbmQvb3IgeW91IGRvbid0IGNhcmUgd2hhdCBzdGF0ZSB0
aGUgYXNzb2NpYXRpb24gaXMgaW4uCisgKgorICogTm90ZSB0aGF0IGlmIHlvdSBzcGVjaWZ5IGFu
IElOUCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0aGVuIE9OTFkgZWFjaAorICogYXNzb2NpYXRpb24g
b2YgdGhhdCBzaW5nbGUgSU5QIHdpbGwgYmUgZXhlY3V0ZWQgdXBvbi4gTm90ZSB0aGF0IHRoZSBw
Y2IKKyAqIGZsYWdzIFNUSUxMIGFwcGx5IHNvIGlmIHRoZSBpbnAgeW91IHNwZWNpZnkgaGFzIGRp
ZmZlcmVudCBwY2JfZmxhZ3MgdGhlbgorICogd2hhdCB5b3UgcHV0IGluIHBjYl9mbGFncyBub3Ro
aW5nIHdpbGwgaGFwcGVuLiB1c2UgU0NUUF9QQ0JfQU5ZX0ZMQUdTIHRvCisgKiBhc3N1cmUgdGhl
IGlucCB5b3Ugc3BlY2lmeSBnZXRzIHRyZWF0ZWQuCisgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfQU5Z
X0ZMQUdTCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTCTB4MDAwMDAw
MDAKKyNkZWZpbmUgU0NUUF9BU09DX0FOWV9TVEFURQkweDAwMDAwMDAwCisKK3R5cGVkZWYgdm9p
ZCAoKmFzb2NfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCB2
b2lkICpwdHIsCisgICAgICAgICB1aW50MzJfdCB2YWwpOwordHlwZWRlZiBpbnQgKCppbnBfZnVu
YykgKHN0cnVjdCBzY3RwX2lucGNiICosIHZvaWQgKnB0ciwgdWludDMyX3QgdmFsKTsKK3R5cGVk
ZWYgdm9pZCAoKmVuZF9mdW5jKSAodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwpOworCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVk
KFNNUCkKKy8qIHdoYXRzIG9uIHRoZSBtY29yZSBjb250cm9sIHN0cnVjdCAqLworc3RydWN0IHNj
dHBfbWNvcmVfcXVldWUgeworCVRBSUxRX0VOVFJZKHNjdHBfbWNvcmVfcXVldWUpIG5leHQ7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJ
c3RydWN0IHZuZXQgKnZuOworI2VuZGlmCisJc3RydWN0IG1idWYgKm07CisJaW50IG9mZjsKKwlp
bnQgdjY7Cit9OworCitUQUlMUV9IRUFEKHNjdHBfbWNvcmVfcWhlYWQsIHNjdHBfbWNvcmVfcXVl
dWUpOworCitzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsIHsKKwlTQ1RQX1BST0NFU1NfU1RSVUNUIHRo
cmVhZF9wcm9jOworCXN0cnVjdCBzY3RwX21jb3JlX3FoZWFkIHF1ZTsKKwlzdHJ1Y3QgbXR4IGNv
cmVfbXR4OworCXN0cnVjdCBtdHggcXVlX210eDsKKwlpbnQgcnVubmluZzsKKwlpbnQgY3B1aWQ7
Cit9OworCisKKyNlbmRpZgorCisKK3N0cnVjdCBzY3RwX2l0ZXJhdG9yIHsKKwlUQUlMUV9FTlRS
WShzY3RwX2l0ZXJhdG9yKSBzY3RwX254dF9pdHI7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJc3RydWN0IHZuZXQgKnZuOworI2VuZGlm
CisJc3RydWN0IHNjdHBfdGltZXIgdG1yOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CQkvKiBj
dXJyZW50IGVuZHBvaW50ICovCisJc3RydWN0IHNjdHBfdGNiICpzdGNiOwkJLyogY3VycmVudCog
YXNzb2MgKi8KKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV4dF9pbnA7ICAgIC8qIHNwZWNpYWwgaG9v
ayB0byBza2lwIHRvICovCisJYXNvY19mdW5jIGZ1bmN0aW9uX2Fzc29jOwkvKiBwZXIgYXNzb2Mg
ZnVuY3Rpb24gKi8KKwlpbnBfZnVuYyBmdW5jdGlvbl9pbnA7CQkvKiBwZXIgZW5kcG9pbnQgZnVu
Y3Rpb24gKi8KKwlpbnBfZnVuYyBmdW5jdGlvbl9pbnBfZW5kOwkvKiBlbmQgSU5QIGZ1bmN0aW9u
ICovCisJZW5kX2Z1bmMgZnVuY3Rpb25fYXRlbmQ7CS8qIGl0ZXJhdG9yIGNvbXBsZXRpb24gZnVu
Y3Rpb24gKi8KKwl2b2lkICpwb2ludGVyOwkJCS8qIHBvaW50ZXIgZm9yIGFwcGx5IGZ1bmMgdG8g
dXNlICovCisJdWludDMyX3QgdmFsOwkJCS8qIHZhbHVlIGZvciBhcHBseSBmdW5jIHRvIHVzZSAq
LworCXVpbnQzMl90IHBjYl9mbGFnczsJCS8qIGVuZHBvaW50IGZsYWdzIGJlaW5nIGNoZWNrZWQg
Ki8KKwl1aW50MzJfdCBwY2JfZmVhdHVyZXM7CQkvKiBlbmRwb2ludCBmZWF0dXJlcyBiZWluZyBj
aGVja2VkICovCisJdWludDMyX3QgYXNvY19zdGF0ZTsJCS8qIGFzc29jIHN0YXRlIGJlaW5nIGNo
ZWNrZWQgKi8KKwl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKKwl1aW50OF90ICBub19jaHVua19v
dXRwdXQ7CisJdWludDhfdCAgZG9uZV9jdXJyZW50X2VwOworfTsKKy8qIGl0ZXJhdG9yX2ZsYWdz
IHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX0FMTF9JTlAJMHgwMDAwMDAwMQor
I2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlAJMHgwMDAwMDAwMgorCisKK1RBSUxR
X0hFQUQoc2N0cGl0ZXJhdG9ycywgc2N0cF9pdGVyYXRvcik7CisKK3N0cnVjdCBzY3RwX2NvcHlf
YWxsIHsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwkvKiBlcCAqLworCXN0cnVjdCBtYnVmICpt
OworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2OworCWludCBzbmRsZW47CisJaW50IGNu
dF9zZW50OworCWludCBjbnRfZmFpbGVkOworfTsKKworc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJh
dG9yIHsKKwlzdHJ1Y3Qgc2N0cGxhZGRyIGxpc3Rfb2Zfd29yazsKKwlpbnQgY250OworfTsKKwor
c3RydWN0IGl0ZXJhdG9yX2NvbnRyb2wgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJc3Ry
dWN0IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OworCXN0cnVjdCBtdHggaXRfbXR4OworI2VsaWYg
ZGVmaW5lZChfX0FQUExFX18pCisJbGNrX210eF90ICppcGlfaXRlcmF0b3Jfd3FfbXR4OworCWxj
a19tdHhfdCAqaXRfbXR4OworI2VsaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1Mp
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXVzZXJsYW5kX211dGV4X3QgaXBpX2l0ZXJh
dG9yX3dxX210eDsKKwl1c2VybGFuZF9tdXRleF90IGl0X210eDsKKwl1c2VybGFuZF9jb25kX3Qg
aXRlcmF0b3Jfd2FrZXVwOworI2Vsc2UKKwlwdGhyZWFkX211dGV4X3QgaXBpX2l0ZXJhdG9yX3dx
X210eDsKKwlwdGhyZWFkX211dGV4X3QgaXRfbXR4OworCXB0aHJlYWRfY29uZF90IGl0ZXJhdG9y
X3dha2V1cDsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzdHJ1Y3Qgc3Bp
bmxvY2sgaXRfbG9jazsKKwlzdHJ1Y3Qgc3BpbmxvY2sgaXBpX2l0ZXJhdG9yX3dxX2xvY2s7CisJ
S0VWRU5UIGl0ZXJhdG9yX3dha2V1cFsyXTsKKwlQRklMRV9PQkpFQ1QgaXRlcmF0b3JfdGhyZWFk
X29iajsKKyNlbHNlCisJdm9pZCAqaXRfbXR4OworI2VuZGlmCisjaWYgIWRlZmluZWQoX19XaW5k
b3dzX18pCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQX1BST0NFU1NfU1RSVUNU
IHRocmVhZF9wcm9jOworI2Vsc2UKKwl1c2VybGFuZF90aHJlYWRfdCB0aHJlYWRfcHJvYzsKKyNl
bmRpZgorI2VuZGlmCisJc3RydWN0IHNjdHBpdGVyYXRvcnMgaXRlcmF0b3JoZWFkOworCXN0cnVj
dCBzY3RwX2l0ZXJhdG9yICpjdXJfaXQ7CisJdWludDMyX3QgaXRlcmF0b3JfcnVubmluZzsKKwl1
aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKK307CisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCisj
ZGVmaW5lIFNDVFBfSVRFUkFUT1JfTVVTVF9FWElUCQkweDAwMDAwMDAxCisjZGVmaW5lIFNDVFBf
SVRFUkFUT1JfRVhJVEVECQkweDAwMDAwMDAyCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9JVEVSQVRP
Ul9TVE9QX0NVUl9JVAkweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJf
SU5QCTB4MDAwMDAwMDgKKworc3RydWN0IHNjdHBfbmV0X3JvdXRlIHsKKwlzY3RwX3J0ZW50cnlf
dCAqcm9fcnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA8IDExMDAwOTMKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwl2b2lkICpyb19s
bGU7CisjZW5kaWYKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA5MDAwMDAKKwl2b2lkICpyb19p
YTsKKwlpbnQgcm9fZmxhZ3M7CisjZW5kaWYKKyNlbHNlCisjaWYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gMTEwMDExNgorCXN0cnVjdCBsbGVudHJ5ICpyb19sbGU7CisjZW5kaWYKKwljaGFyCQkqcm9f
cHJlcGVuZDsKKwl1aW50MTZfdAlyb19wbGVuOworCXVpbnQxNl90CXJvX2ZsYWdzOworCXVpbnQx
Nl90CXJvX210dTsKKwl1aW50MTZfdAlzcGFyZTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQ
TEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExF
X01PVU5UQUlOTElPTikgJiYgIWRlZmluZWQoQVBQTEVfRUxDQVBJVEFOKQorCXN0cnVjdCBsbGVu
dHJ5CSpyb19sbGU7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVm
aW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmlu
ZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQorCXN0cnVjdCBpZmFkZHIgKnJvX3NyY2lhOworI2VuZGlm
CisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwl1aW50MzJfdCByb19mbGFnczsKKyNlbmRp
ZgorI2VuZGlmCisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgX2xfYWRkcjsJLyogcmVtb3RlIHBlZXIg
YWRkciAqLworCXN0cnVjdCBzY3RwX2lmYSAqX3NfYWRkcjsJLyogb3VyIHNlbGVjdGVkIHNyYyBh
ZGRyICovCit9OworCitzdHJ1Y3QgaHRjcCB7CisJdWludDE2X3QJYWxwaGE7CQkvKiBGaXhlZCBw
b2ludCBhcml0aCwgPDwgNyAqLworCXVpbnQ4X3QJCWJldGE7ICAgICAgICAgICAvKiBGaXhlZCBw
b2ludCBhcml0aCwgPDwgNyAqLworCXVpbnQ4X3QJCW1vZGVzd2l0Y2g7ICAgICAvKiBEZWxheSBt
b2Rlc3dpdGNoIHVudGlsIHdlIGhhZCBhdCBsZWFzdCBvbmUgY29uZ2VzdGlvbiBldmVudCAqLwor
CXVpbnQzMl90CWxhc3RfY29uZzsJLyogVGltZSBzaW5jZSBsYXN0IGNvbmdlc3Rpb24gZXZlbnQg
ZW5kICovCisJdWludDMyX3QJdW5kb19sYXN0X2Nvbmc7CisJdWludDE2X3QJYnl0ZXNfYWNrZWQ7
CisJdWludDMyX3QJYnl0ZWNvdW50OworCXVpbnQzMl90CW1pblJUVDsKKwl1aW50MzJfdAltYXhS
VFQ7CisKKwl1aW50MzJfdAl1bmRvX21heFJUVDsKKwl1aW50MzJfdAl1bmRvX29sZF9tYXhCOwor
CisJLyogQmFuZHdpZHRoIGVzdGltYXRpb24gKi8KKwl1aW50MzJfdAltaW5COworCXVpbnQzMl90
CW1heEI7CisJdWludDMyX3QJb2xkX21heEI7CisJdWludDMyX3QJQmk7CisJdWludDMyX3QJbGFz
dHRpbWU7Cit9OworCitzdHJ1Y3QgcnRjY19jYyB7CisJc3RydWN0IHRpbWV2YWwgdGxzOyAgIC8q
IFRoZSB0aW1lIHdlIHN0YXJ0ZWQgdGhlIHNlbmRpbmcgICovCisJdWludDY0X3QgbGJ3OyAgICAg
ICAgIC8qIE91ciBsYXN0IGVzdGltYXRlZCBidyAqLworCXVpbnQ2NF90IGxid19ydHQ7ICAgICAv
KiBSVFQgYXQgYncgZXN0aW1hdGUgKi8KKwl1aW50NjRfdCBid19ieXRlczsgICAgLyogVGhlIHRv
dGFsIGJ5dGVzIHNpbmNlIHRoaXMgc2VuZGluZyBiZWdhbiAqLworCXVpbnQ2NF90IGJ3X3RvdF90
aW1lOyAvKiBUaGUgdG90YWwgdGltZSBzaW5jZSBzZW5kaW5nIGJlZ2FuICovCisJdWludDY0X3Qg
bmV3X3RvdF90aW1lOyAgLyogdGVtcCBob2xkaW5nIHRoZSBuZXcgdmFsdWUgKi8KKwl1aW50NjRf
dCBid19ieXRlc19hdF9sYXN0X3J0dGM7IC8qIFdoYXQgYndfYnl0ZXMgd2FzIGF0IGxhc3QgcnR0
IGNhbGMgKi8KKwl1aW50MzJfdCBjd25kX2F0X2J3X3NldDsgLyogQ3duZCBhdCBsYXN0IGJ3IHNh
dmVkIC0gbGJ3ICovCisJdWludDMyX3Qgdm9sX3JlZHVjZTsgIC8qIGNudCBvZiB2b2x1bnRhcnkg
cmVkdWN0aW9ucyAqLworCXVpbnQxNl90IHN0ZWFkeV9zdGVwOyAvKiBUaGUgbnVtYmVyIHJlcXVp
cmVkIHRvIGJlIGluIHN0ZWFkeSBzdGF0ZSovCisJdWludDE2X3Qgc3RlcF9jbnQ7ICAgIC8qIFRo
ZSBjdXJyZW50IG51bWJlciAqLworCXVpbnQ4X3QgIHJldF9mcm9tX2VxOyAgLyogV2hlbiBhbGwg
dGhpbmdzIGFyZSBlcXVhbCB3aGF0IGRvIEkgcmV0dXJuIDAvMSAtIDEgbm8gY2MgYWR2YW5jZSAq
LworCXVpbnQ4X3QgIHVzZV9kY2NjX2VjbjsgIC8qIEZsYWcgdG8gZW5hYmxlIERDQ0MgRUNOICov
CisJdWludDhfdCAgdGxzX25lZWRzX3NldDsgLyogRmxhZyB0byBpbmRpY2F0ZSB3ZSBuZWVkIHRv
IHNldCB0bHMgMCBvciAxIG1lYW5zIHNldCBhdCBzZW5kIDIgbm90ICovCisJdWludDhfdCAgbGFz
dF9zdGVwX3N0YXRlOyAvKiBMYXN0IHN0YXRlIGlmIHN0ZWFkeSBzdGF0ZSBzdGVwZG93biBpcyBv
biAqLworCXVpbnQ4X3QgIHJ0dF9zZXRfdGhpc19zYWNrOyAvKiBGbGFnIHNheWluZyB0aGlzIHNh
Y2sgaGFkIFJUVCBjYWxjIG9uIGl0ICovCisJdWludDhfdCAgbGFzdF9pbnN0X2luZDsgLyogTGFz
dCBzYXZlZCBpbnN0IGluZGljYXRpb24gKi8KK307CisKKworc3RydWN0IHNjdHBfbmV0cyB7CisJ
VEFJTFFfRU5UUlkoc2N0cF9uZXRzKSBzY3RwX25leHQ7CS8qIG5leHQgbGluayAqLworCisJLyoK
KwkgKiBUaGluZ3Mgb24gdGhlIHRvcCBoYWxmIG1heSBiZSBhYmxlIHRvIGJlIHNwbGl0IGludG8g
YSBjb21tb24KKwkgKiBzdHJ1Y3R1cmUgc2hhcmVkIGJ5IGFsbC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0
cF90aW1lciBwbXR1X3RpbWVyOworCXN0cnVjdCBzY3RwX3RpbWVyIGhiX3RpbWVyOworCisJLyoK
KwkgKiBUaGUgZm9sbG93aW5nIHR3byBpbiBjb21iaW5hdGlvbiBlcXVhdGUgdG8gYSByb3V0ZSBl
bnRyeSBmb3IgdjYKKwkgKiBvciB2NC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9uZXRfcm91dGUgcm87
CisKKwkvKiBtdHUgZGlzY292ZXJlZCBzbyBmYXIgKi8KKwl1aW50MzJfdCBtdHU7CisJdWludDMy
X3Qgc3N0aHJlc2g7CS8qIG5vdCBzdXJlIGFib3V0IHRoaXMgb25lIGZvciBzcGxpdCAqLworCXVp
bnQzMl90IGxhc3RfY3dyX3RzbjsKKwl1aW50MzJfdCBjd3Jfd2luZG93X3RzbjsKKwl1aW50MzJf
dCBlY25fY2VfcGt0X2NudDsKKwl1aW50MzJfdCBsb3N0X2NudDsKKwkvKiBzbW9vdGhlZCBhdmVy
YWdlIHRoaW5ncyBmb3IgUlRUIGFuZCBSVE8gaXRzZWxmICovCisJaW50IGxhc3RzYTsKKwlpbnQg
bGFzdHN2OworCXVpbnQ2NF90IHJ0dDsgLyogbGFzdCBtZWFzdXJlZCBydHQgdmFsdWUgaW4gdXMg
Ki8KKwl1bnNpZ25lZCBpbnQgUlRPOworCisJLyogVGhpcyBpcyB1c2VkIGZvciBTSFVURE9XTi9T
SFVURE9XTi1BQ0svU0VORCBvciBJTklUIHRpbWVycyAqLworCXN0cnVjdCBzY3RwX3RpbWVyIHJ4
dF90aW1lcjsKKworCS8qIGxhc3QgdGltZSBpbiBzZWNvbmRzIEkgc2VudCB0byBpdCAqLworCXN0
cnVjdCB0aW1ldmFsIGxhc3Rfc2VudF90aW1lOworCXVuaW9uIGNjX2NvbnRyb2xfZGF0YSB7CisJ
CXN0cnVjdCBodGNwIGh0Y3BfY2E7IAkvKiBKUlMgLSBzdHJ1Y3QgdXNlZCBpbiBIVENQIGFsZ29y
aXRobSAqLworCQlzdHJ1Y3QgcnRjY19jYyBydGNjOyAgICAvKiBydGNjIG1vZHVsZSBjYyBzdHVm
ZiAgKi8KKwl9IGNjX21vZDsKKwlpbnQgcmVmX2NvdW50OworCisJLyogQ29uZ2VzdGlvbiBzdGF0
cyBwZXIgZGVzdGluYXRpb24gKi8KKwkvKgorCSAqIGZsaWdodCBzaXplIHZhcmlhYmxlcyBhbmQg
c3VjaCwgc29ycnkgVmVybiwgSSBjb3VsZCBub3QgYXZvaWQKKwkgKiB0aGlzIGlmIEkgd2FudGVk
IHBlcmZvcm1hbmNlIDo+CisJICovCisJdWludDMyX3QgZmxpZ2h0X3NpemU7CisJdWludDMyX3Qg
Y3duZDsJCS8qIGFjdHVhbCBjd25kICovCisJdWludDMyX3QgcHJldl9jd25kOwkvKiBjd25kIGJl
Zm9yZSBhbnkgcHJvY2Vzc2luZyAqLworCXVpbnQzMl90IGVjbl9wcmV2X2N3bmQ7CS8qIEVDTiBw
cmV2IGN3bmQgYXQgZmlyc3QgZWNuX2VjaG8gc2VlbiBpbiBuZXcgd2luZG93ICovCisJdWludDMy
X3QgcGFydGlhbF9ieXRlc19hY2tlZDsJLyogaW4gQ0EgdHJhY2tzIHdoZW4gdG8gaW5jciBhIE1U
VSAqLworCS8qIHRyYWNraW5nIHZhcmlhYmxlcyB0byBhdm9pZCB0aGUgYWxvYy9mcmVlIGluIHNh
Y2sgcHJvY2Vzc2luZyAqLworCXVuc2lnbmVkIGludCBuZXRfYWNrOworCXVuc2lnbmVkIGludCBu
ZXRfYWNrMjsKKworCS8qCisJICogSlJTIC0gNS84LzA3IC0gVmFyaWFibGUgdG8gdHJhY2sgbGFz
dCB0aW1lCisJICogIGEgZGVzdGluYXRpb24gd2FzIGFjdGl2ZSBmb3IgQ01UIFBGCisJICovCisJ
dWludDMyX3QgbGFzdF9hY3RpdmU7CisKKwkvKgorCSAqIENNVCB2YXJpYWJsZXMgKGl5ZW5nYXJA
Y2lzLnVkZWwuZWR1KQorCSAqLworCXVpbnQzMl90IHRoaXNfc2Fja19oaWdoZXN0X25ld2FjazsJ
LyogdHJhY2tzIGhpZ2hlc3QgVFNOIG5ld2x5CisJCQkJCQkgKiBhY2tlZCBmb3IgYSBnaXZlbiBk
ZXN0IGluCisJCQkJCQkgKiB0aGUgY3VycmVudCBTQUNLLiBVc2VkIGluCisJCQkJCQkgKiBTRlIg
YW5kIEhUTkEgYWxnb3MgKi8KKwl1aW50MzJfdCBwc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VDIGFs
Z29yaXRobS4gTWFpbnRhaW5zIG5leHQgZXhwZWN0ZWQKKwkJCQkgKiBwc2V1ZG8tY3VtYWNrIGZv
ciB0aGlzIGRlc3RpbmF0aW9uICovCisJdWludDMyX3QgcnR4X3BzZXVkb19jdW1hY2s7CS8qIENN
VCBDVUMgYWxnb3JpdGhtLiBNYWludGFpbnMgbmV4dAorCQkJCQkgKiBleHBlY3RlZCBwc2V1ZG8t
Y3VtYWNrIGZvciB0aGlzCisJCQkJCSAqIGRlc3RpbmF0aW9uICovCisKKwkvKiBDTVQgZmFzdCBy
ZWNvdmVyeSB2YXJpYWJsZXMgKi8KKwl1aW50MzJfdCBmYXN0X3JlY292ZXJ5X3RzbjsKKwl1aW50
MzJfdCBoZWFydGJlYXRfcmFuZG9tMTsKKwl1aW50MzJfdCBoZWFydGJlYXRfcmFuZG9tMjsKKyNp
ZmRlZiBJTkVUNgorCXVpbnQzMl90IGZsb3dsYWJlbDsKKyNlbmRpZgorCXVpbnQ4X3QgZHNjcDsK
KworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7ICAgICAgLyogdGltZSB3aGVuIHRoaXMgbmV0
IHdhcyBjcmVhdGVkICovCisJdWludDMyX3QgbWFya2VkX3JldHJhbnM7ICAgICAgICAvKiBudW1i
ZXIgb3IgREFUQSBjaHVua3MgbWFya2VkIGZvcgorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGltZXIgYmFzZWQgcmV0cmFuc21pc3Npb25zICovCisJdWludDMyX3QgbWFya2Vk
X2Zhc3RyZXRyYW5zOworCXVpbnQzMl90IGhlYXJ0X2JlYXRfZGVsYXk7ICAgICAgLyogSGVhcnQg
QmVhdCBkZWxheSBpbiBtcyAqLworCisJLyogaWYgdGhpcyBndXkgaXMgb2sgb3Igbm90IC4uLiBz
dGF0dXMgKi8KKwl1aW50MTZfdCBkZXN0X3N0YXRlOworCS8qIG51bWJlciBvZiB0aW1lb3V0cyB0
byBjb25zaWRlciB0aGUgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgKi8KKwl1aW50MTZfdCBmYWls
dXJlX3RocmVzaG9sZDsKKwkvKiBudW1iZXIgb2YgdGltZW91dHMgdG8gY29uc2lkZXIgdGhlIGRl
c3RpbmF0aW9uIHBvdGVudGlhbGx5IGZhaWxlZCAqLworCXVpbnQxNl90IHBmX3RocmVzaG9sZDsK
KwkvKiBlcnJvciBzdGF0cyBvbiB0aGUgZGVzdGluYXRpb24gKi8KKwl1aW50MTZfdCBlcnJvcl9j
b3VudDsKKwkvKiBVRFAgcG9ydCBudW1iZXIgaW4gY2FzZSBvZiBVRFAgdHVubmVsaW5nICovCisJ
dWludDE2X3QgcG9ydDsKKworCXVpbnQ4X3QgZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeTsKKwl1
aW50OF90IHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5OworCS8qIEZsYWdzIHRoYXQgcHJvYmFibHkg
Y2FuIGJlIGNvbWJpbmVkIGludG8gZGVzdF9zdGF0ZSAqLworCXVpbnQ4X3QgZmFzdF9yZXRyYW5f
aXA7CS8qIGZhc3QgcmV0cmFuc21pdCBpbiBwcm9ncmVzcyAqLworCXVpbnQ4X3QgaGJfcmVzcG9u
ZGVkOworCXVpbnQ4X3Qgc2F3X25ld2FjazsJLyogQ01UJ3MgU0ZSIGFsZ29yaXRobSBmbGFnICov
CisJdWludDhfdCBzcmNfYWRkcl9zZWxlY3RlZDsJLyogaWYgd2Ugc3BsaXQgd2UgbW92ZSAqLwor
CXVpbnQ4X3QgaW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZTsKKwl1aW50OF90IGFkZHJfaXNf
bG9jYWw7CS8qIGl0cyBhIGxvY2FsIGFkZHJlc3MgKGlmIGtub3duKSBjb3VsZCBtb3ZlCisJCQkJ
ICogaW4gc3BsaXQgKi8KKworCS8qCisJICogQ01UIHZhcmlhYmxlcyAoaXllbmdhckBjaXMudWRl
bC5lZHUpCisJICovCisJdWludDhfdCBmaW5kX3BzZXVkb19jdW1hY2s7CS8qIENNVCBDVUMgYWxn
b3JpdGhtLiBGbGFnIHVzZWQgdG8KKwkJCQkJICogZmluZCBhIG5ldyBwc2V1ZG9jdW1hY2suIFRo
aXMgZmxhZworCQkJCQkgKiBpcyBzZXQgYWZ0ZXIgYSBuZXcgcHNldWRvLWN1bWFjaworCQkJCQkg
KiBoYXMgYmVlbiByZWNlaXZlZCBhbmQgaW5kaWNhdGVzCisJCQkJCSAqIHRoYXQgdGhlIHNlbmRl
ciBzaG91bGQgZmluZCB0aGUKKwkJCQkJICogbmV4dCBwc2V1ZG8tY3VtYWNrIGV4cGVjdGVkIGZv
cgorCQkJCQkgKiB0aGlzIGRlc3RpbmF0aW9uICovCisJdWludDhfdCBmaW5kX3J0eF9wc2V1ZG9f
Y3VtYWNrOwkvKiBDTVQgQ1VDdjIgYWxnb3JpdGhtLiBGbGFnIHVzZWQgdG8KKwkJCQkJICogZmlu
ZCBhIG5ldyBydHgtcHNldWRvY3VtYWNrLiBUaGlzCisJCQkJCSAqIGZsYWcgaXMgc2V0IGFmdGVy
IGEgbmV3CisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGhhcyBiZWVuIHJlY2VpdmVkCisJCQkJ
CSAqIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VuZGVyCisJCQkJCSAqIHNob3VsZCBmaW5kIHRo
ZSBuZXh0CisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGV4cGVjdGVkIGZvciB0aGlzCisJCQkJ
CSAqIGRlc3RpbmF0aW9uICovCisJdWludDhfdCBuZXdfcHNldWRvX2N1bWFjazsJLyogQ01UIENV
QyBhbGdvcml0aG0uIEZsYWcgdXNlZCB0bworCQkJCQkgKiBpbmRpY2F0ZSBpZiBhIG5ldyBwc2V1
ZG8tY3VtYWNrIG9yCisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGhhcyBiZWVuIHJlY2VpdmVk
ICovCisJdWludDhfdCB3aW5kb3dfcHJvYmU7CQkvKiBEb2luZyBhIHdpbmRvdyBwcm9iZT8gKi8K
Kwl1aW50OF90IFJUT19tZWFzdXJlZDsJCS8qIEhhdmUgd2UgZG9uZSB0aGUgZmlyc3QgbWVhc3Vy
ZSAqLworCXVpbnQ4X3QgbGFzdF9oc191c2VkOwkvKiBpbmRleCBpbnRvIHRoZSBsYXN0IEhTIHRh
YmxlIGVudHJ5IHdlIHVzZWQgKi8KKwl1aW50OF90IGxhbl90eXBlOworCXVpbnQ4X3QgcnRvX25l
ZWRlZDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXVpbnQzMl90IGZsb3dpZDsKKwl1aW50
OF90IGZsb3d0eXBlOworI2VuZGlmCit9OworCisKK3N0cnVjdCBzY3RwX2RhdGFfY2h1bmtyZWMg
eworCXVpbnQzMl90IHRzbjsJCS8qIHRoZSBUU04gb2YgdGhpcyB0cmFuc21pdCAqLworCXVpbnQz
Ml90IG1pZDsJCS8qIHRoZSBtZXNzYWdlIGlkZW50aWZpZXIgb2YgdGhpcyB0cmFuc21pdCAqLwor
CXVpbnQxNl90IHNpZDsJCS8qIHRoZSBzdHJlYW0gbnVtYmVyIG9mIHRoaXMgZ3V5ICovCisJdWlu
dDMyX3QgcHBpZDsKKwl1aW50MzJfdCBjb250ZXh0OwkvKiBmcm9tIHNlbmQgKi8KKwl1aW50MzJf
dCBjd25kX2F0X3NlbmQ7CisJLyoKKwkgKiBwYXJ0IG9mIHRoZSBIaWdoZXN0IHNhY2tlZCBhbGdv
cml0aG0gdG8gYmUgYWJsZSB0byBzdHJva2UgY291bnRzCisJICogb24gb25lcyB0aGF0IGFyZSBG
UidkLgorCSAqLworCXVpbnQzMl90IGZhc3RfcmV0cmFuX3RzbjsJLyogc2VuZGluZ19zZXEgYXQg
dGhlIHRpbWUgb2YgRlIgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0aW1ldG9kcm9wOwkvKiB0aW1lIHdl
IGRyb3AgaXQgZnJvbSBxdWV1ZSAqLworCXVpbnQzMl90IGZzbjsJCQkvKiBGcmFnbWVudCBTZXF1
ZW5jZSBOdW1iZXIgKi8KKwl1aW50OF90IGRvaW5nX2Zhc3RfcmV0cmFuc21pdDsKKwl1aW50OF90
IHJjdl9mbGFnczsJLyogZmxhZ3MgcHVsbGVkIGZyb20gZGF0YSBjaHVuayBvbiBpbmJvdW5kIGZv
cgorCQkJCSAqIG91dGJvdW5kIGhvbGRzIHNlbmRpbmcgZmxhZ3MgZm9yIFBSLVNDVFAuCisJCQkJ
ICovCisJdWludDhfdCBzdGF0ZV9mbGFnczsKKwl1aW50OF90IGNodW5rX3dhc19yZXZva2VkOwor
CXVpbnQ4X3QgZndkX3Rzbl9jbnQ7Cit9OworCitUQUlMUV9IRUFEKHNjdHBjaHVua19saXN0aGVh
ZCwgc2N0cF90bWl0X2NodW5rKTsKKworLyogVGhlIGxvd2VyIGJ5dGUgaXMgdXNlZCB0byBlbnVt
ZXJhdGUgUFJfU0NUUCBwb2xpY2llcyAqLworI2RlZmluZSBDSFVOS19GTEFHU19QUl9TQ1RQX1RU
TAkgICAgICAgIFNDVFBfUFJfU0NUUF9UVEwKKyNkZWZpbmUgQ0hVTktfRkxBR1NfUFJfU0NUUF9C
VUYJICAgICAgICBTQ1RQX1BSX1NDVFBfQlVGCisjZGVmaW5lIENIVU5LX0ZMQUdTX1BSX1NDVFBf
UlRYICAgICAgICAgU0NUUF9QUl9TQ1RQX1JUWAorCisvKiBUaGUgdXBwZXIgYnl0ZSBpcyB1c2Vk
IGFzIGEgYml0IG1hc2sgKi8KKyNkZWZpbmUgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0sJICAgICAg
ICAweDAxMDAKKworc3RydWN0IGNoa19pZCB7CisJdWludDhfdCBpZDsKKwl1aW50OF90IGNhbl90
YWtlX2RhdGE7Cit9OworCisKK3N0cnVjdCBzY3RwX3RtaXRfY2h1bmsgeworCXVuaW9uIHsKKwkJ
c3RydWN0IHNjdHBfZGF0YV9jaHVua3JlYyBkYXRhOworCQlzdHJ1Y3QgY2hrX2lkIGNodW5rX2lk
OworCX0gICAgIHJlYzsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsJLyogYnAgdG8g
YXNvYyB0aGlzIGJlbG9uZ3MgdG8gKi8KKwlzdHJ1Y3QgdGltZXZhbCBzZW50X3Jjdl90aW1lOwkv
KiBmaWxsZWQgaW4gaWYgUlRUIGJlaW5nIGNhbGN1bGF0ZWQgKi8KKwlzdHJ1Y3QgbWJ1ZiAqZGF0
YTsJLyogcG9pbnRlciB0byBtYnVmIGNoYWluIG9mIGRhdGEgKi8KKwlzdHJ1Y3QgbWJ1ZiAqbGFz
dF9tYnVmOwkvKiBwb2ludGVyIHRvIGxhc3QgbWJ1ZiBpbiBjaGFpbiAqLworCXN0cnVjdCBzY3Rw
X25ldHMgKndob1RvOworCVRBSUxRX0VOVFJZKHNjdHBfdG1pdF9jaHVuaykgc2N0cF9uZXh0Owkv
KiBuZXh0IGxpbmsgKi8KKwlpbnQzMl90IHNlbnQ7CQkvKiB0aGUgc2VuZCBzdGF0dXMgKi8KKwl1
aW50MTZfdCBzbmRfY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyBJIHNlbnQgKi8KKwl1aW50MTZf
dCBmbGFnczsJCS8qIGZsYWdzLCBzdWNoIGFzIEZSQUdNRU5UX09LICovCisJdWludDE2X3Qgc2Vu
ZF9zaXplOworCXVpbnQxNl90IGJvb2tfc2l6ZTsKKwl1aW50MTZfdCBtYmNudDsKKwl1aW50MTZf
dCBhdXRoX2tleWlkOworCXVpbnQ4X3QgaG9sZHNfa2V5X3JlZjsJLyogZmxhZyBpZiBhdXRoIGtl
eWlkIHJlZmNvdW50IGlzIGhlbGQgKi8KKwl1aW50OF90IHBhZF9pbnBsYWNlOworCXVpbnQ4X3Qg
ZG9fcnR0OworCXVpbnQ4X3QgYm9va19zaXplX3NjYWxlOworCXVpbnQ4X3Qgbm9fZnJfYWxsb3dl
ZDsKKwl1aW50OF90IGNvcHlfYnlfcmVmOworCXVpbnQ4X3Qgd2luZG93X3Byb2JlOworfTsKKwor
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgewkvKiBzaW5mbyBzdHJ1Y3R1cmUgUGx1c2UgbW9y
ZSAqLworCXVpbnQxNl90IHNpbmZvX3N0cmVhbTsJLyogb2ZmIHRoZSB3aXJlICovCisJdWludDE2
X3Qgc2luZm9fZmxhZ3M7CS8qIFNDVFBfVU5PUkRFUkVEIGZyb20gd2lyZSB1c2UgU0NUUF9FT0Yg
Zm9yCisJCQkJICogRU9SICovCisJdWludDMyX3Qgc2luZm9fcHBpZDsJLyogb2ZmIHRoZSB3aXJl
ICovCisJdWludDMyX3Qgc2luZm9fY29udGV4dDsJLyogcGljayB0aGlzIHVwIGZyb20gYXNzb2Mg
ZGVmIGNvbnRleHQ/ICovCisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsJLyogbm90IHVzZWQg
Ynkga2VybmVsICovCisJdWludDMyX3Qgc2luZm9fdHNuOwkvKiBVc2UgdGhpcyBpbiByZWFzc2Vt
Ymx5IGFzIGZpcnN0IFRTTiAqLworCXVpbnQzMl90IHNpbmZvX2N1bXRzbjsJLyogVXNlIHRoaXMg
aW4gcmVhc3NlbWJseSBhcyBsYXN0IFRTTiAqLworCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19p
ZDsJLyogb3VyIGFzc29jIGlkICovCisJLyogTm9uIHNpbmZvIHN0dWZmICovCisJdWludDMyX3Qg
bWlkOwkJLyogRnJhZ21lbnQgSW5kZXggKi8KKwl1aW50MzJfdCBsZW5ndGg7CS8qIGxlbmd0aCBv
ZiBkYXRhICovCisJdWludDMyX3QgaGVsZF9sZW5ndGg7CS8qIGxlbmd0aCBoZWxkIGluIHNiICov
CisJdWludDMyX3QgdG9wX2ZzbjsJLyogSGlnaGVzdCBGU04gaW4gcXVldWUgKi8KKwl1aW50MzJf
dCBmc25faW5jbHVkZWQ7ICAvKiBIaWdoZXN0IEZTTiBpbiAqZGF0YSBwb3J0aW9uICovCisJc3Ry
dWN0IHNjdHBfbmV0cyAqd2hvRnJvbTsJLyogd2hlcmUgaXQgY2FtZSBmcm9tICovCisJc3RydWN0
IG1idWYgKmRhdGE7CS8qIGZyb250IG9mIHRoZSBtYnVmIGNoYWluIG9mIGRhdGEgd2l0aAorCQkJ
CSAqIFBLVF9IRFIgKi8KKwlzdHJ1Y3QgbWJ1ZiAqdGFpbF9tYnVmOwkvKiB1c2VkIGZvciBtdWx0
aS1wYXJ0IGRhdGEgKi8KKwlzdHJ1Y3QgbWJ1ZiAqYXV4X2RhdGE7ICAvKiB1c2VkIHRvIGhvbGQv
Y2FjaGUgIGNvbnRyb2wgaWYgby9zIGRvZXMgbm90IHRha2UgaXQgZnJvbSB1cyAqLworCXN0cnVj
dCBzY3RwX3RjYiAqc3RjYjsJLyogYXNzb2MsIHVzZWQgZm9yIHdpbmRvdyB1cGRhdGUgKi8KKwlU
QUlMUV9FTlRSWShzY3RwX3F1ZXVlZF90b19yZWFkKSBuZXh0OworCVRBSUxRX0VOVFJZKHNjdHBf
cXVldWVkX3RvX3JlYWQpIG5leHRfaW5zdHJtOworCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQg
cmVhc207CisJdWludDE2X3QgcG9ydF9mcm9tOworCXVpbnQxNl90IHNwZWNfZmxhZ3M7CS8qIEZs
YWdzIHRvIGhvbGQgdGhlIG5vdGlmaWNhdGlvbiBmaWVsZCAqLworCXVpbnQ4X3QgIGRvX25vdF9y
ZWZfc3RjYjsKKwl1aW50OF90ICBlbmRfYWRkZWQ7CisJdWludDhfdCAgcGRhcGlfYWJvcnRlZDsK
Kwl1aW50OF90ICBwZGFwaV9zdGFydGVkOworCXVpbnQ4X3QgIHNvbWVfdGFrZW47CisJdWludDhf
dCAgbGFzdF9mcmFnX3NlZW47CisJdWludDhfdCAgZmlyc3RfZnJhZ19zZWVuOworCXVpbnQ4X3Qg
IG9uX3JlYWRfcTsKKwl1aW50OF90ICBvbl9zdHJtX3E7Cit9OworCisjZGVmaW5lIFNDVFBfT05f
T1JERVJFRCAxCisjZGVmaW5lIFNDVFBfT05fVU5PUkRFUkVEIDIKKworLyogVGhpcyBkYXRhIHN0
cnVjdHVyZSB3aWxsIGJlIG9uIHRoZSBvdXRib3VuZAorICogc3RyZWFtIHF1ZXVlcy4gRGF0YSB3
aWxsIGJlIHB1bGxlZCBvZmYgZnJvbQorICogdGhlIGZyb250IG9mIHRoZSBtYnVmIGRhdGEgYW5k
IGNodW5rLWlmaWVkCisgKiBieSB0aGUgb3V0cHV0IHJvdXRpbmVzLiBXZSB3aWxsIGN1c3RvbQor
ICogZml0IGV2ZXJ5IGNodW5rIHdlIHB1bGwgdG8gdGhlIHNlbmQvc2VudAorICogcXVldWUgdG8g
bWFrZSB1cCB0aGUgbmV4dCBmdWxsIHBhY2tldAorICogaWYgd2UgY2FuLiBBbiBlbnRyeSBjYW5u
b3QgYmUgcmVtb3ZlZAorICogZnJvbSB0aGUgc3RyZWFtX291dCBxdWV1ZSB1bnRpbAorICogdGhl
IG1zZ19pc19jb21wbGV0ZSBmbGFnIGlzIHNldC4gVGhpcworICogbWVhbnMgYXQgdGltZXMgZGF0
YS90YWlsX21idWYgTUlHSFQKKyAqIGJlIE5VTEwuLiBJZiB0aGF0IG9jY3VycyBpdCBoYXBwZW5z
CisgKiBmb3Igb25lIG9mIHR3byByZWFzb25zLiBFaXRoZXIgdGhlIHVzZXIKKyAqIGlzIGJsb2Nr
ZWQgb24gYSBzZW5kKCkgY2FsbCBhbmQgaGFzIG5vdAorICogYXdva2VuIHRvIGNvcHkgbW9yZSBk
YXRhIGRvd24uLi4gT1IKKyAqIHRoZSB1c2VyIGlzIGluIHRoZSBleHBsaWN0IE1TR19FT1IgbW9k
ZQorICogYW5kIHdyb3RlIHNvbWUgZGF0YSwgYnV0IGhhcyBub3QgY29tcGxldGVkCisgKiBzZW5k
aW5nLgorICovCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyB7CisJc3RydWN0IG1i
dWYgKmRhdGE7CisJc3RydWN0IG1idWYgKnRhaWxfbWJ1ZjsKKwlzdHJ1Y3QgdGltZXZhbCB0czsK
KwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJVEFJTFFfRU5UUlkgKHNjdHBfc3RyZWFtX3F1ZXVl
X3BlbmRpbmcpIG5leHQ7CisJVEFJTFFfRU5UUlkgKHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcp
IHNzX25leHQ7CisJdWludDMyX3QgZnNuOworCXVpbnQzMl90IGxlbmd0aDsKKwl1aW50MzJfdCB0
aW1ldG9saXZlOworCXVpbnQzMl90IHBwaWQ7CisJdWludDMyX3QgY29udGV4dDsKKwl1aW50MTZf
dCBzaW5mb19mbGFnczsKKwl1aW50MTZfdCBzaWQ7CisJdWludDE2X3QgYWN0X2ZsYWdzOworCXVp
bnQxNl90IGF1dGhfa2V5aWQ7CisJdWludDhfdCAgaG9sZHNfa2V5X3JlZjsKKwl1aW50OF90ICBt
c2dfaXNfY29tcGxldGU7CisJdWludDhfdCAgc29tZV90YWtlbjsKKwl1aW50OF90ICBzZW5kZXJf
YWxsX2RvbmU7CisJdWludDhfdCAgcHV0X2xhc3Rfb3V0OworCXVpbnQ4X3QgIGRpc2NhcmRfcmVz
dDsKK307CisKKy8qCisgKiB0aGlzIHN0cnVjdCBjb250YWlucyBpbmZvIHRoYXQgaXMgdXNlZCB0
byB0cmFjayBpbmJvdW5kIHN0cmVhbSBkYXRhIGFuZAorICogaGVscCB3aXRoIG9yZGVyaW5nLgor
ICovCitUQUlMUV9IRUFEKHNjdHB3aGVlbHVucmVsX2xpc3RoZWFkLCBzY3RwX3N0cmVhbV9pbik7
CitzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4geworCXN0cnVjdCBzY3RwX3JlYWRoZWFkIGlucXVldWU7
CisJc3RydWN0IHNjdHBfcmVhZGhlYWQgdW5vX2lucXVldWU7CisJdWludDMyX3QgbGFzdF9taWRf
ZGVsaXZlcmVkOwkvKiB1c2VkIGZvciByZS1vcmRlciAqLworCXVpbnQxNl90IHNpZDsKKwl1aW50
OF90ICBkZWxpdmVyeV9zdGFydGVkOworCXVpbnQ4X3QgIHBkX2FwaV9zdGFydGVkOworfTsKKwor
VEFJTFFfSEVBRChzY3Rwd2hlZWxfbGlzdGhlYWQsIHNjdHBfc3RyZWFtX291dCk7CitUQUlMUV9I
RUFEKHNjdHBsaXN0X2xpc3RoZWFkLCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKTsKKworCisv
KiBSb3VuZC1yb2JpbiBzY2hlZHVsZXJzICovCitzdHJ1Y3Qgc3NfcnIgeworCS8qIG5leHQgbGlu
ayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3RyZWFtX291dCkgbmV4dF9zcG9rZTsK
K307CisKKy8qIFByaW9yaXR5IHNjaGVkdWxlciAqLworc3RydWN0IHNzX3ByaW8geworCS8qIG5l
eHQgbGluayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3RyZWFtX291dCkgbmV4dF9z
cG9rZTsKKwkvKiBwcmlvcml0eSBpZCAqLworCXVpbnQxNl90IHByaW9yaXR5OworfTsKKworLyog
RmFpciBCYW5kd2lkdGggc2NoZWR1bGVyICovCitzdHJ1Y3Qgc3NfZmIgeworCS8qIG5leHQgbGlu
ayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3RyZWFtX291dCkgbmV4dF9zcG9rZTsK
KwkvKiBzdG9yZXMgbWVzc2FnZSBzaXplICovCisJaW50MzJfdCByb3VuZHM7Cit9OworCisvKgor
ICogVGhpcyB1bmlvbiBob2xkcyBhbGwgZGF0YSBuZWNlc3NhcnkgZm9yCisgKiBkaWZmZXJlbnQg
c3RyZWFtIHNjaGVkdWxlcnMuCisgKi8KK3N0cnVjdCBzY2hlZHVsaW5nX2RhdGEgeworCXN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKmxvY2tlZF9vbl9zZW5kaW5nOworCS8qIGNpcmN1bGFyIGxvb2tp
bmcgZm9yIG91dHB1dCBzZWxlY3Rpb24gKi8KKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpsYXN0
X291dF9zdHJlYW07CisJdW5pb24geworCQlzdHJ1Y3Qgc2N0cHdoZWVsX2xpc3RoZWFkIHdoZWVs
OworCQlzdHJ1Y3Qgc2N0cGxpc3RfbGlzdGhlYWQgbGlzdDsKKwl9IG91dDsKK307CisKKy8qCisg
KiBUaGlzIHVuaW9uIGhvbGRzIGFsbCBwYXJhbWV0ZXJzIHBlciBzdHJlYW0KKyAqIG5lY2Vzc2Fy
eSBmb3IgZGlmZmVyZW50IHN0cmVhbSBzY2hlZHVsZXJzLgorICovCit1bmlvbiBzY2hlZHVsaW5n
X3BhcmFtZXRlcnMgeworCXN0cnVjdCBzc19yciBycjsKKwlzdHJ1Y3Qgc3NfcHJpbyBwcmlvOwor
CXN0cnVjdCBzc19mYiBmYjsKK307CisKKy8qIFN0YXRlcyBmb3Igb3V0Z29pbmcgc3RyZWFtcyAq
LworI2RlZmluZSBTQ1RQX1NUUkVBTV9DTE9TRUQgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NU
UF9TVFJFQU1fT1BFTklORyAgICAgICAgICAweDAxCisjZGVmaW5lIFNDVFBfU1RSRUFNX09QRU4g
ICAgICAgICAgICAgMHgwMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HICAgIDB4
MDMKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUICAweDA0CisKKyNkZWZpbmUg
U0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUIDIwMAorCisvKiBUaGlzIHN0cnVjdCBpcyB1
c2VkIHRvIHRyYWNrIHRoZSB0cmFmZmljIG9uIG91dGJvdW5kIHN0cmVhbXMgKi8KK3N0cnVjdCBz
Y3RwX3N0cmVhbV9vdXQgeworCXN0cnVjdCBzY3RwX3N0cmVhbWhlYWQgb3V0cXVldWU7CisJdW5p
b24gc2NoZWR1bGluZ19wYXJhbWV0ZXJzIHNzX3BhcmFtczsKKwl1aW50MzJfdCBjaHVua3Nfb25f
cXVldWVzOyAgICAgIC8qIHNlbmQgcXVldWUgYW5kIHNlbnQgcXVldWUgKi8KKyNpZiBkZWZpbmVk
KFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCXVpbnQzMl90IGFiYW5kb25lZF91bnNlbnRbU0NU
UF9QUl9TQ1RQX01BWCArIDFdOworCXVpbnQzMl90IGFiYW5kb25lZF9zZW50W1NDVFBfUFJfU0NU
UF9NQVggKyAxXTsKKyNlbHNlCisJLyogT25seSB0aGUgYWdncmVnYXRpb24gKi8KKwl1aW50MzJf
dCBhYmFuZG9uZWRfdW5zZW50WzFdOworCXVpbnQzMl90IGFiYW5kb25lZF9zZW50WzFdOworI2Vu
ZGlmCisJLyogRm9yIGFzc29jaWF0aW9ucyB1c2luZyBEQVRBIGNodW5rcywgdGhlIGxvd2VyIDE2
LWJpdCBvZgorCSAqIG5leHRfbWlkX29yZGVyZWQgYXJlIHVzZWQgYXMgdGhlIG5leHQgU1NOLgor
CSAqLworCXVpbnQzMl90IG5leHRfbWlkX29yZGVyZWQ7CisJdWludDMyX3QgbmV4dF9taWRfdW5v
cmRlcmVkOworCXVpbnQxNl90IHNpZDsKKwl1aW50OF90IGxhc3RfbXNnX2luY29tcGxldGU7CisJ
dWludDhfdCBzdGF0ZTsKK307CisKKy8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgYWRkcmVz
c2VzIHlldCB0byB0cnkgdG8gYWRkL2RlbGV0ZSAqLworVEFJTFFfSEVBRChzY3RwX2FzY29uZl9h
ZGRyaGVhZCwgc2N0cF9hc2NvbmZfYWRkcik7CitzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciB7CisJ
VEFJTFFfRU5UUlkoc2N0cF9hc2NvbmZfYWRkcikgbmV4dDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZf
YWRkcl9wYXJhbSBhcDsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsJLyogc2F2ZSB0aGUgaWZhIGZv
ciBhZGQvZGVsIGlwICovCisJdWludDhfdCBzZW50OwkJLyogaGFzIHRoaXMgYmVlbiBzZW50IHll
dD8gKi8KKwl1aW50OF90IHNwZWNpYWxfZGVsOwkvKiBub3QgdG8gYmUgdXNlZCBpbiBsb29rdXAg
Ki8KK307CisKK3N0cnVjdCBzY3RwX3Njb3BpbmcgeworCXVpbnQ4X3QgaXB2NF9hZGRyX2xlZ2Fs
OworCXVpbnQ4X3QgaXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
Kwl1aW50OF90IGNvbm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXVpbnQ4X3QgbG9vcGJhY2tfc2Nv
cGU7CisJdWludDhfdCBpcHY0X2xvY2FsX3Njb3BlOworCXVpbnQ4X3QgbG9jYWxfc2NvcGU7CisJ
dWludDhfdCBzaXRlX3Njb3BlOworfTsKKworI2RlZmluZSBTQ1RQX1RTTl9MT0dfU0laRSA0MAor
CitzdHJ1Y3Qgc2N0cF90c25fbG9nIHsKKwl2b2lkICAgICAqc3RjYjsKKwl1aW50MzJfdCB0c247
CisJdWludDMyX3Qgc2VxOworCXVpbnQxNl90IHN0cm07CisJdWludDE2X3Qgc3o7CisJdWludDE2
X3QgZmxnczsKKwl1aW50MTZfdCBpbl9wb3M7CisJdWludDE2X3QgaW5fb3V0OworCXVpbnQxNl90
IHJlc3Y7Cit9OworCisjZGVmaW5lIFNDVFBfRlNfU1BFQ19MT0dfU0laRSAyMDAKK3N0cnVjdCBz
Y3RwX2ZzX3NwZWNfbG9nIHsKKwl1aW50MzJfdCBzZW50OworCXVpbnQzMl90IHRvdGFsX2ZsaWdo
dDsKKwl1aW50MzJfdCB0c247CisJdWludDE2X3QgYm9vazsKKwl1aW50OF90IGluY3I7CisJdWlu
dDhfdCBkZWNyOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSB0byBjdXQgb3V0IHRoZSBj
b21wYXRpYWJpbHR5CisgKiBwYWQgdGhhdCBidWxrcyB1cCBib3RoIHRoZSBpbnAgYW5kIHN0Y2Iu
IFRoZSBub24KKyAqIHBhZCBwb3J0aW9uIE1VU1Qgc3RheSBpbiBjb21wbGV0ZSBzeW5jIHdpdGgK
KyAqIHNjdHBfc25kcmN2aW5mby4uLiBpLmUuIGlmIHNpbmZvX3h4eHggaXMgYWRkZWQKKyAqIHRo
aXMgbXVzdCBiZSBkb25lIGhlcmUgdG9vLgorICovCitzdHJ1Y3Qgc2N0cF9ub25wYWRfc25kcmN2
aW5mbyB7CisJdWludDE2X3Qgc2luZm9fc3RyZWFtOworCXVpbnQxNl90IHNpbmZvX3NzbjsKKwl1
aW50MTZfdCBzaW5mb19mbGFnczsKKwl1aW50MzJfdCBzaW5mb19wcGlkOworCXVpbnQzMl90IHNp
bmZvX2NvbnRleHQ7CisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsKKwl1aW50MzJfdCBzaW5m
b190c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNzb2NfdCBzaW5mb19hc3Nv
Y19pZDsKKwl1aW50MTZfdCBzaW5mb19rZXludW1iZXI7CisJdWludDE2X3Qgc2luZm9fa2V5bnVt
YmVyX3ZhbGlkOworfTsKKworLyoKKyAqIEpSUyAtIFN0cnVjdHVyZSB0byBob2xkIGZ1bmN0aW9u
IHBvaW50ZXJzIHRvIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUKKyAqIGZvciBjb25nZXN0aW9u
IGNvbnRyb2wuCisgKi8KKworc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHsKKwl2b2lkICgqc2N0
cF9zZXRfaW5pdGlhbF9jY19wYXJhbSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2spKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgYWNjdW1fbW92ZWQgLGludCByZW5lZ2VkX2FsbCwgaW50IHdpbGxfZXhp
dCk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZikoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX2ZyKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYyk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCkoc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKwl2b2lkICgqc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobykoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJ
c3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0KTsK
Kwl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCkoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBzdHJ1Y3Qgc2N0cF9wa3Rk
cm9wX2NodW5rICpjcCwKKwkJCXVpbnQzMl90ICpib3R0bGVfYncsIHVpbnQzMl90ICpvbl9xdWV1
ZSk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBidXJzdF9saW1pdCk7CisJ
dm9pZCAoKnNjdHBfY3duZF91cGRhdGVfcGFja2V0X3RyYW5zbWl0dGVkKShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRf
dXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKik7CisJdm9pZCAoKnNjdHBfY3duZF9uZXdfdHJhbnNtaXNzaW9u
X2JlZ2lucykoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
KTsKKwl2b2lkICgqc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrKShzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCWludCAoKnNjdHBfY3duZF9z
b2NrZXRfb3B0aW9uKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZXQsIHN0cnVjdCBzY3Rw
X2NjX29wdGlvbiAqKTsKKwl2b2lkICgqc2N0cF9ydHRfY2FsY3VsYXRlZCkoc3RydWN0IHNjdHBf
dGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IHRpbWV2YWwgKik7Cit9OworCisvKgor
ICogUlMgLSBTdHJ1Y3R1cmUgdG8gaG9sZCBmdW5jdGlvbiBwb2ludGVycyB0byB0aGUgZnVuY3Rp
b25zIHJlc3BvbnNpYmxlCisgKiBmb3Igc3RyZWFtIHNjaGVkdWxpbmcuCisgKi8KK3N0cnVjdCBz
Y3RwX3NzX2Z1bmN0aW9ucyB7CisJdm9pZCAoKnNjdHBfc3NfaW5pdCkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJaW50IGhvbGRzX2xvY2sp
OworCXZvaWQgKCpzY3RwX3NzX2NsZWFyKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlpbnQgY2xlYXJfdmFsdWVzLCBpbnQgaG9sZHNfbG9j
ayk7CisJdm9pZCAoKnNjdHBfc3NfaW5pdF9zdHJlYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqd2l0
aF9zdHJxKTsKKwl2b2lkICgqc2N0cF9zc19hZGRfdG9fc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsIGludCBo
b2xkc19sb2NrKTsKKwlpbnQgKCpzY3RwX3NzX2lzX2VtcHR5KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKKwl2b2lkICgqc2N0cF9zc19yZW1v
dmVfZnJvbV9zdHJlYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCisJCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgaW50IGhvbGRzX2xvY2spOworCXN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQqICgqc2N0cF9zc19zZWxlY3Rfc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MpOworCXZvaWQgKCpzY3RwX3NzX3NjaGVkdWxlZCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBpbnQgbW92ZWRfaG93X211Y2gpOworCXZvaWQg
KCpzY3RwX3NzX3BhY2tldF9kb25lKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwKKwkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOworCWludCAoKnNj
dHBfc3NfZ2V0X3ZhbHVlKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCAq
dmFsdWUpOworCWludCAoKnNjdHBfc3Nfc2V0X3ZhbHVlKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICpzdHJxLCB1aW50MTZfdCB2YWx1ZSk7CisJaW50ICgqc2N0cF9zc19pc191c2VyX21zZ3NfaW5j
b21wbGV0ZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYyk7Cit9OworCisvKiB1c2VkIHRvIHNhdmUgQVNDT05GIGNodW5rcyBmb3IgcmV0cmFuc21p
c3Npb24gKi8KK1RBSUxRX0hFQUQoc2N0cF9hc2NvbmZfaGVhZCwgc2N0cF9hc2NvbmYpOworc3Ry
dWN0IHNjdHBfYXNjb25mIHsKKwlUQUlMUV9FTlRSWShzY3RwX2FzY29uZikgbmV4dDsKKwl1aW50
MzJfdCBzZXJpYWxfbnVtYmVyOworCXVpbnQxNl90IHNuZF9jb3VudDsKKwlzdHJ1Y3QgbWJ1ZiAq
ZGF0YTsKKwl1aW50MTZfdCBsZW47Cit9OworCisvKiB1c2VkIHRvIHNhdmUgQVNDT05GLUFDSyBj
aHVua3MgZm9yIHJldHJhbnNtaXNzaW9uICovCitUQUlMUV9IRUFEKHNjdHBfYXNjb25mX2Fja2hl
YWQsIHNjdHBfYXNjb25mX2Fjayk7CitzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrIHsKKwlUQUlMUV9F
TlRSWShzY3RwX2FzY29uZl9hY2spIG5leHQ7CisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpsYXN0X3NlbnRfdG87CisJc3RydWN0IG1idWYgKmRhdGE7CisJdWlu
dDE2X3QgbGVuOworfTsKKworLyoKKyAqIEhlcmUgd2UgaGF2ZSBpbmZvcm1hdGlvbiBhYm91dCBl
YWNoIGluZGl2aWR1YWwgYXNzb2NpYXRpb24gdGhhdCB3ZSB0cmFjay4KKyAqIFdlIHByb2JhYmx5
IGluIHByb2R1Y3Rpb24gd291bGQgYmUgbW9yZSBkeW5hbWljLiBCdXQgZm9yIGVhc2Ugb2YKKyAq
IGltcGxlbWVudGF0aW9uIHdlIHdpbGwgaGF2ZSBhIGZpeGVkIGFycmF5IHRoYXQgd2UgaHVudCBm
b3IgaW4gYSBsaW5lYXIKKyAqIGZhc2hpb24uCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
IHsKKwkvKiBhc3NvY2lhdGlvbiBzdGF0ZSAqLworCWludCBzdGF0ZTsKKworCS8qIHF1ZXVlIG9m
IHBlbmRpbmcgYWRkcnMgdG8gYWRkL2RlbGV0ZSAqLworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRy
aGVhZCBhc2NvbmZfcXVldWU7CisKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7CS8qIHRp
bWUgd2UgZW50ZXJlZCBzdGF0ZSAqLworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFzdF9yY3ZkOwor
CXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFzdF9zZW50OworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFz
dF9zYXRfYWR2YW5jZTsKKwlzdHJ1Y3Qgc2N0cF9ub25wYWRfc25kcmN2aW5mbyBkZWZfc2VuZDsK
KworCS8qIHRpbWVycyBhbmQgc3VjaCAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGRhY2tfdGltZXI7
CQkvKiBEZWxheWVkIGFjayB0aW1lciAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGFzY29uZl90aW1l
cjsJCS8qIGFzY29uZiAqLworCXN0cnVjdCBzY3RwX3RpbWVyIHN0cnJlc2V0X3RpbWVyOwkvKiBz
dHJlYW0gcmVzZXQgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBzaHV0X2d1YXJkX3RpbWVyOwkvKiBz
aHV0ZG93biBndWFyZCAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGF1dG9jbG9zZV90aW1lcjsJLyog
YXV0b21hdGljIGNsb3NlIHRpbWVyICovCisJc3RydWN0IHNjdHBfdGltZXIgZGVsYXllZF9ldmVu
dF90aW1lcjsJLyogdGltZXIgZm9yIGRlbGF5ZWQgZXZlbnRzICovCisJc3RydWN0IHNjdHBfdGlt
ZXIgZGVsZXRlX3ByaW1fdGltZXI7CS8qIGRlbGV0aW5nIHByaW1hcnkgZHN0ICovCisKKwkvKiBs
aXN0IG9mIHJlc3RyaWN0ZWQgbG9jYWwgYWRkcmVzc2VzICovCisJc3RydWN0IHNjdHBsYWRkciBz
Y3RwX3Jlc3RyaWN0ZWRfYWRkcnM7CisKKwkvKiBsYXN0IGxvY2FsIGFkZHJlc3MgcGVuZGluZyBk
ZWxldGlvbiAod2FpdGluZyBmb3IgYW4gYWRkcmVzcyBhZGQpICovCisJc3RydWN0IHNjdHBfaWZh
ICphc2NvbmZfYWRkcl9kZWxfcGVuZGluZzsKKwkvKiBEZWxldGVkIHByaW1hcnkgZGVzdGluYXRp
b24gKHVzZWQgdG8gc3RvcCB0aW1lcikgKi8KKwlzdHJ1Y3Qgc2N0cF9uZXRzICpkZWxldGVkX3By
aW1hcnk7CisKKwlzdHJ1Y3Qgc2N0cG5ldGxpc3RoZWFkIG5ldHM7CQkvKiByZW1vdGUgYWRkcmVz
cyBsaXN0ICovCisKKwkvKiBGcmVlIGNodW5rIGxpc3QgKi8KKwlzdHJ1Y3Qgc2N0cGNodW5rX2xp
c3RoZWFkIGZyZWVfY2h1bmtzOworCisJLyogQ29udHJvbCBjaHVuayBxdWV1ZSAqLworCXN0cnVj
dCBzY3RwY2h1bmtfbGlzdGhlYWQgY29udHJvbF9zZW5kX3F1ZXVlOworCisJLyogQVNDT05GIGNo
dW5rIHF1ZXVlICovCisJc3RydWN0IHNjdHBjaHVua19saXN0aGVhZCBhc2NvbmZfc2VuZF9xdWV1
ZTsKKworCS8qCisJICogT25jZSBhIFRTTiBoaXRzIHRoZSB3aXJlIGl0IGlzIG1vdmVkIHRvIHRo
ZSBzZW50X3F1ZXVlLiBXZQorCSAqIG1haW50YWluIHR3byBjb3VudHMgaGVyZSAoZG9uJ3Qga25v
dyBpZiBhbnkgYnV0IHJldHJhbl9jbnQgaXMKKwkgKiBuZWVkZWQpLiBUaGUgaWRlYSBpcyB0aGF0
IHRoZSBzZW50X3F1ZXVlX3JldHJhbl9jbnQgcmVmbGVjdHMgaG93CisJICogbWFueSBjaHVua3Mg
aGF2ZSBiZWVuIG1hcmtlZCBmb3IgcmV0cmFubWlzc2lvbiBieSBlaXRoZXIgVDMtcnh0CisJICog
b3IgRlIuCisJICovCisJc3RydWN0IHNjdHBjaHVua19saXN0aGVhZCBzZW50X3F1ZXVlOworCXN0
cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgc2VuZF9xdWV1ZTsKKworCS8qIFNjaGVkdWxpbmcgcXVl
dWVzICovCisJc3RydWN0IHNjaGVkdWxpbmdfZGF0YSBzc19kYXRhOworCisJLyogSWYgYW4gaXRl
cmF0b3IgaXMgbG9va2luZyBhdCBtZSwgdGhpcyBpcyBpdCAqLworCXN0cnVjdCBzY3RwX2l0ZXJh
dG9yICpzdGNiX3N0YXJ0aW5nX3BvaW50X2Zvcl9pdGVyYXRvcjsKKworCS8qIEFTQ09ORiBzYXZl
IHRoZSBsYXN0IEFTQ09ORi1BQ0sgc28gd2UgY2FuIHJlc2VuZCBpdCBpZiBuZWNlc3NhcnkgKi8K
KwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNraGVhZCBhc2NvbmZfYWNrX3NlbnQ7CisKKwkvKgorCSAq
IHBvaW50ZXIgdG8gbGFzdCBzdHJlYW0gcmVzZXQgcXVldWVkIHRvIGNvbnRyb2wgcXVldWUgYnkg
dXMgd2l0aAorCSAqIHJlcXVlc3RzLgorCSAqLworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnN0
cl9yZXNldDsKKwkvKgorCSAqIGlmIFNvdXJjZSBBZGRyZXNzIFNlbGVjdGlvbiBoYXBwZW5pbmcs
IHRoaXMgd2lsbCByb3RhdGUgdGhyb3VnaAorCSAqIHRoZSBsaW5rIGxpc3QuCisJICovCisJc3Ry
dWN0IHNjdHBfbGFkZHIgKmxhc3RfdXNlZF9hZGRyZXNzOworCisJLyogc3RyZWFtIGFycmF5cyAq
LworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybWluOworCXN0cnVjdCBzY3RwX3N0cmVhbV9v
dXQgKnN0cm1vdXQ7CisJdWludDhfdCAqbWFwcGluZ19hcnJheTsKKwkvKiBwcmltYXJ5IGRlc3Rp
bmF0aW9uIHRvIHVzZSAqLworCXN0cnVjdCBzY3RwX25ldHMgKnByaW1hcnlfZGVzdGluYXRpb247
CisJc3RydWN0IHNjdHBfbmV0cyAqYWx0ZXJuYXRlOyAvKiBJZiBwcmltYXJ5IGlzIGRvd24gb3Ig
UEYgKi8KKwkvKiBGb3IgQ01UICovCisJc3RydWN0IHNjdHBfbmV0cyAqbGFzdF9uZXRfY210X3Nl
bmRfc3RhcnRlZDsKKwkvKiBsYXN0IHBsYWNlIEkgZ290IGEgZGF0YSBjaHVuayBmcm9tICovCisJ
c3RydWN0IHNjdHBfbmV0cyAqbGFzdF9kYXRhX2NodW5rX2Zyb207CisJLyogbGFzdCBwbGFjZSBJ
IGdvdCBhIGNvbnRyb2wgZnJvbSAqLworCXN0cnVjdCBzY3RwX25ldHMgKmxhc3RfY29udHJvbF9j
aHVua19mcm9tOworCisKKwkvKgorCSAqIHdhaXQgdG8gdGhlIHBvaW50IHRoZSBjdW0tYWNrIHBh
c3NlcyByZXEtPnNlbmRfcmVzZXRfYXRfdHNuIGZvcgorCSAqIGFueSByZXEgb24gdGhlIGxpc3Qu
CisJICovCisJc3RydWN0IHNjdHBfcmVzZXRoZWFkIHJlc2V0SGVhZDsKKworCS8qIHF1ZXVlIG9m
IGNodW5rcyB3YWl0aW5nIHRvIGJlIHNlbnQgaW50byB0aGUgbG9jYWwgc3RhY2sgKi8KKwlzdHJ1
Y3Qgc2N0cF9yZWFkaGVhZCBwZW5kaW5nX3JlcGx5X3F1ZXVlOworCisJLyogSlJTIC0gdGhlIGNv
bmdlc3Rpb24gY29udHJvbCBmdW5jdGlvbnMgYXJlIGluIHRoaXMgc3RydWN0ICovCisJc3RydWN0
IHNjdHBfY2NfZnVuY3Rpb25zIGNjX2Z1bmN0aW9uczsKKwkvKiBKUlMgLSB2YWx1ZSB0byBzdG9y
ZSB0aGUgY3VycmVudGx5IGxvYWRlZCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlICovCisJdWlu
dDMyX3QgY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZTsKKwkvKiBSUyAtIHRoZSBzdHJlYW0gc2No
ZWR1bGluZyBmdW5jdGlvbnMgYXJlIGluIHRoaXMgc3RydWN0ICovCisJc3RydWN0IHNjdHBfc3Nf
ZnVuY3Rpb25zIHNzX2Z1bmN0aW9uczsKKwkvKiBSUyAtIHZhbHVlIHRvIHN0b3JlIHRoZSBjdXJy
ZW50bHkgbG9hZGVkIHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSAqLworCXVpbnQzMl90IHN0cmVh
bV9zY2hlZHVsaW5nX21vZHVsZTsKKworCXVpbnQzMl90IHZyZl9pZDsKKwl1aW50MzJfdCBjb29r
aWVfcHJlc2VydmVfcmVxOworCS8qIEFTQ09ORiBuZXh0IHNlcSBJIGFtIHNlbmRpbmcgb3V0LCBp
bml0cyBhdCBpbml0LXRzbiAqLworCXVpbnQzMl90IGFzY29uZl9zZXFfb3V0OworCXVpbnQzMl90
IGFzY29uZl9zZXFfb3V0X2Fja2VkOworCS8qIEFTQ09ORiBsYXN0IHJlY2VpdmVkIEFTQ09ORiBm
cm9tIHBlZXIsIHN0YXJ0cyBhdCBwZWVyJ3MgVFNOLTEgKi8KKwl1aW50MzJfdCBhc2NvbmZfc2Vx
X2luOworCisJLyogbmV4dCBzZXEgSSBhbSBzZW5kaW5nIGluIHN0ciByZXNldCBtZXNzYWdlcyAq
LworCXVpbnQzMl90IHN0cl9yZXNldF9zZXFfb3V0OworCS8qIG5leHQgc2VxIEkgYW0gZXhwZWN0
aW5nIGluIHN0ciByZXNldCBtZXNzYWdlcyAqLworCXVpbnQzMl90IHN0cl9yZXNldF9zZXFfaW47
CisKKwkvKiB2YXJpb3VzIHZlcmlmaWNhdGlvbiB0YWcgaW5mb3JtYXRpb24gKi8KKwl1aW50MzJf
dCBteV92dGFnOwkvKiBUaGUgdGFnIHRvIGJlIHVzZWQuIGlmIGFzc29jIGlzIHJlLWluaXRpdGVk
CisJCQkJICogYnkgcmVtb3RlIGVuZCwgYW5kIEkgaGF2ZSB1bmxvY2tlZCB0aGlzCisJCQkJICog
d2lsbCBiZSByZWdlbmVyYXRlZCB0byBhIG5ldyByYW5kb20gdmFsdWUuICovCisJdWludDMyX3Qg
cGVlcl92dGFnOwkvKiBUaGUgcGVlcnMgbGFzdCB0YWcgKi8KKworCXVpbnQzMl90IG15X3Z0YWdf
bm9uY2U7CisJdWludDMyX3QgcGVlcl92dGFnX25vbmNlOworCisJdWludDMyX3QgYXNzb2NfaWQ7
CisKKwkvKiBUaGlzIGlzIHRoZSBTQ1RQIGZyYWdtZW50YXRpb24gdGhyZXNob2xkICovCisJdWlu
dDMyX3Qgc21hbGxlc3RfbXR1OworCisJLyoKKwkgKiBTcGVjaWFsIGhvb2sgZm9yIEZhc3QgcmV0
cmFuc21pdCwgYWxsb3dzIHVzIHRvIHRyYWNrIHRoZSBoaWdoZXN0CisJICogVFNOIHRoYXQgaXMg
TkVXIGluIHRoaXMgU0FDSyBpZiBnYXAgYWNrIGJsb2NrcyBhcmUgcHJlc2VudC4KKwkgKi8KKwl1
aW50MzJfdCB0aGlzX3NhY2tfaGlnaGVzdF9nYXA7CisKKwkvKgorCSAqIFRoZSBoaWdoZXN0IGNv
bnNlY3V0aXZlIFRTTiB0aGF0IGhhcyBiZWVuIGFja2VkIGJ5IHBlZXIgb24gbXkKKwkgKiBzZW5k
cworCSAqLworCXVpbnQzMl90IGxhc3RfYWNrZWRfc2VxOworCisJLyogVGhlIG5leHQgVFNOIHRo
YXQgSSB3aWxsIHVzZSBpbiBzZW5kaW5nLiAqLworCXVpbnQzMl90IHNlbmRpbmdfc2VxOworCisJ
LyogT3JpZ2luYWwgc2VxIG51bWJlciBJIHVzZWQgPz9xdWVzdGlvbmFibGUgdG8ga2VlcD8/ICov
CisJdWludDMyX3QgaW5pdF9zZXFfbnVtYmVyOworCisKKwkvKiBUaGUgQWR2YW5jZWQgUGVlciBB
Y2sgUG9pbnQsIGFzIHJlcXVpcmVkIGJ5IHRoZSBQUi1TQ1RQICovCisJLyogKEExIGluIFNlY3Rp
b24gNC4yKSAqLworCXVpbnQzMl90IGFkdmFuY2VkX3BlZXJfYWNrX3BvaW50OworCisJLyoKKwkg
KiBUaGUgaGlnaGVzdCBjb25zZXF1ZXRpdmUgVFNOIGF0IHRoZSBib3R0b20gb2YgdGhlIG1hcHBp
bmcgYXJyYXkKKwkgKiAoZm9yIGhpcyBzZW5kcykuCisJICovCisJdWludDMyX3QgY3VtdWxhdGl2
ZV90c247CisJLyoKKwkgKiBVc2VkIHRvIHRyYWNrIHRoZSBtYXBwaW5nIGFycmF5IGFuZCBpdHMg
b2Zmc2V0IGJpdHMuIFRoaXMgTUFZIGJlCisJICogbG93ZXIgdGhlbiBjdW11bGF0aXZlX3Rzbi4K
KwkgKi8KKwl1aW50MzJfdCBtYXBwaW5nX2FycmF5X2Jhc2VfdHNuOworCS8qCisJICogdXNlZCB0
byB0cmFjayBoaWdoZXN0IFRTTiB3ZSBoYXZlIHJlY2VpdmVkIGFuZCBpcyBsaXN0ZWQgaW4gdGhl
CisJICogbWFwcGluZyBhcnJheS4KKwkgKi8KKwl1aW50MzJfdCBoaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwOworCisJLyogRVkgLSBuZXcgTlIgdmFyaWFibGVzIHVzZWQgZm9yIG5yX3NhY2sgYmFzZWQg
b24gbWFwcGluZ19hcnJheSovCisJdWludDhfdCAqbnJfbWFwcGluZ19hcnJheTsKKwl1aW50MzJf
dCBoaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCisJdWludDMyX3QgZmFzdF9yZWNvdmVyeV90
c247CisJdWludDMyX3Qgc2F0X3QzX3JlY292ZXJ5X3RzbjsKKwl1aW50MzJfdCB0c25fbGFzdF9k
ZWxpdmVyZWQ7CisJLyoKKwkgKiBGb3IgdGhlIHBkLWFwaSB3ZSBzaG91bGQgcmUtd3JpdGUgdGhp
cyBhIGJpdCBtb3JlIGVmZmljaWVudC4gV2UKKwkgKiBjb3VsZCBoYXZlIG11bHRpcGxlIHNjdHBf
cXVldWVkX3RvX3JlYWQncyB0aGF0IHdlIGFyZSBidWlsZGluZyBhdAorCSAqIG9uY2UuIE5vdyB3
ZSBvbmx5IGRvIHRoaXMgd2hlbiB3ZSBnZXQgcmVhZHkgdG8gZGVsaXZlciB0byB0aGUKKwkgKiBz
b2NrZXQgYnVmZmVyLiBOb3RlIHRoYXQgd2UgZGVwZW5kIG9uIHRoZSBmYWN0IHRoYXQgdGhlIHN0
cnVjdCBpcworCSAqICJzdHVjayIgb24gdGhlIHJlYWQgcXVldWUgdW50aWwgd2UgZmluaXNoIGFs
bCB0aGUgcGQtYXBpLgorCSAqLworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
X3BkYXBpOworCisJdWludDMyX3QgdHNuX29mX3BkYXBpX2xhc3RfZGVsaXZlcmVkOworCXVpbnQz
Ml90IHBkYXBpX3BwaWQ7CisJdWludDMyX3QgY29udGV4dDsKKwl1aW50MzJfdCBsYXN0X3Jlc2V0
X2FjdGlvbltTQ1RQX01BWF9SRVNFVF9QQVJBTVNdOworCXVpbnQzMl90IGxhc3Rfc2VuZGluZ19z
ZXFbU0NUUF9NQVhfUkVTRVRfUEFSQU1TXTsKKwl1aW50MzJfdCBsYXN0X2Jhc2VfdHNuc2VudFtT
Q1RQX01BWF9SRVNFVF9QQVJBTVNdOworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJLyoK
KwkgKiBzcGVjaWFsIGxvZyAgLSBUaGlzIGFkZHMgY29uc2lkZXJhYmxlIHNpemUKKwkgKiB0byB0
aGUgYXNvYywgYnV0IHByb3ZpZGVzIGEgbG9nIHRoYXQgeW91CisJICogY2FuIHVzZSB0byBkZXRl
Y3QgcHJvYmxlbXMgdmlhIGtnZGIuCisJICovCisJc3RydWN0IHNjdHBfdHNuX2xvZyAgaW5fdHNu
bG9nW1NDVFBfVFNOX0xPR19TSVpFXTsKKwlzdHJ1Y3Qgc2N0cF90c25fbG9nICBvdXRfdHNubG9n
W1NDVFBfVFNOX0xPR19TSVpFXTsKKwl1aW50MzJfdCBjdW1hY2tfbG9nW1NDVFBfVFNOX0xPR19T
SVpFXTsKKwl1aW50MzJfdCBjdW1hY2tfbG9nc250W1NDVFBfVFNOX0xPR19TSVpFXTsKKwl1aW50
MTZfdCB0c25faW5fYXQ7CisJdWludDE2X3QgdHNuX291dF9hdDsKKwl1aW50MTZfdCB0c25faW5f
d3JhcHBlZDsKKwl1aW50MTZfdCB0c25fb3V0X3dyYXBwZWQ7CisJdWludDE2X3QgY3VtYWNrX2xv
Z19hdDsKKwl1aW50MTZfdCBjdW1hY2tfbG9nX2F0c250OworI2VuZGlmIC8qIFNDVFBfQVNPQ0xP
R19PRl9UU05TICovCisjaWZkZWYgU0NUUF9GU19TUEVDX0xPRworCXN0cnVjdCBzY3RwX2ZzX3Nw
ZWNfbG9nIGZzbG9nW1NDVFBfRlNfU1BFQ19MT0dfU0laRV07CisJdWludDE2X3QgZnNfaW5kZXg7
CisjZW5kaWYKKworCS8qCisJICogd2luZG93IHN0YXRlIGluZm9ybWF0aW9uIGFuZCBzbWFsbGVz
dCBNVFUgdGhhdCBJIHVzZSB0byBib3VuZAorCSAqIHNlZ21lbnRhdGlvbgorCSAqLworCXVpbnQz
Ml90IHBlZXJzX3J3bmQ7CisJdWludDMyX3QgbXlfcnduZDsKKwl1aW50MzJfdCBteV9sYXN0X3Jl
cG9ydGVkX3J3bmQ7CisJdWludDMyX3Qgc2N0cF9mcmFnX3BvaW50OworCisJdWludDMyX3QgdG90
YWxfb3V0cHV0X3F1ZXVlX3NpemU7CisKKwl1aW50MzJfdCBzYl9jYzsJCSAgICAgICAvKiBzaGFk
b3cgb2Ygc2JfY2MgKi8KKwl1aW50MzJfdCBzYl9zZW5kX3Jlc3Y7ICAgICAvKiBhbW91bnQgcmVz
ZXJ2ZWQgb24gYSBzZW5kICovCisJdWludDMyX3QgbXlfcnduZF9jb250cm9sX2xlbjsgLyogc2hh
ZG93IG9mIHNiX21iY250IHVzZWQgZm9yIHJ3bmQgY29udHJvbCAqLworI2lmZGVmIElORVQ2CisJ
dWludDMyX3QgZGVmYXVsdF9mbG93bGFiZWw7CisjZW5kaWYKKwl1aW50MzJfdCBwcl9zY3RwX2Nu
dDsKKwlpbnQgY3RybF9xdWV1ZV9jbnQ7CS8qIGNvdWxkIGJlIHJlbW92ZWQgIFJFTSAtIE5PIElU
IENBTidUISEgUlJTICovCisJLyoKKwkgKiBBbGwgb3V0Ym91bmQgZGF0YWdyYW1zIHF1ZXVlIGlu
dG8gdGhpcyBsaXN0IGZyb20gdGhlIGluZGl2aWR1YWwKKwkgKiBzdHJlYW0gcXVldWUuIEhlcmUg
dGhleSBnZXQgYXNzaWduZWQgYSBUU04gYW5kIHRoZW4gYXdhaXQKKwkgKiBzZW5kaW5nLiBUaGUg
c3RyZWFtIHNlcSBjb21lcyB3aGVuIGl0IGlzIGZpcnN0IHB1dCBpbiB0aGUKKwkgKiBpbmRpdmlk
dWFsIHN0ciBxdWV1ZQorCSAqLworCXVuc2lnbmVkIGludCBzdHJlYW1fcXVldWVfY250OworCXVu
c2lnbmVkIGludCBzZW5kX3F1ZXVlX2NudDsKKwl1bnNpZ25lZCBpbnQgc2VudF9xdWV1ZV9jbnQ7
CisJdW5zaWduZWQgaW50IHNlbnRfcXVldWVfY250X3JlbW92ZWFibGU7CisJLyoKKwkgKiBOdW1i
ZXIgb24gc2VudCBxdWV1ZSB0aGF0IGFyZSBtYXJrZWQgZm9yIHJldHJhbiB1bnRpbCB0aGlzIHZh
bHVlCisJICogaXMgMCB3ZSBvbmx5IHNlbmQgb25lIHBhY2tldCBvZiByZXRyYW4nZWQgZGF0YS4K
KwkgKi8KKwl1bnNpZ25lZCBpbnQgc2VudF9xdWV1ZV9yZXRyYW5fY250OworCisJdW5zaWduZWQg
aW50IHNpemVfb25fcmVhc21fcXVldWU7CisJdW5zaWduZWQgaW50IGNudF9vbl9yZWFzbV9xdWV1
ZTsKKwl1bnNpZ25lZCBpbnQgZndkX3Rzbl9jbnQ7CisJLyogYW1vdW50IG9mIGRhdGEgKGJ5dGVz
KSBjdXJyZW50bHkgaW4gZmxpZ2h0IChvbiBhbGwgZGVzdGluYXRpb25zKSAqLworCXVuc2lnbmVk
IGludCB0b3RhbF9mbGlnaHQ7CisJLyogVG90YWwgYm9vayBzaXplIGluIGZsaWdodCAqLworCXVu
c2lnbmVkIGludCB0b3RhbF9mbGlnaHRfY291bnQ7CS8qIGNvdW50IG9mIGNodW5rcyB1c2VkIHdp
dGgKKwkJCQkJCSAqIGJvb2sgdG90YWwgKi8KKwkvKiBjb3VudCBvZiBkZXN0aW5hdG9uIG5ldHMg
YW5kIGxpc3Qgb2YgZGVzdGluYXRpb24gbmV0cyAqLworCXVuc2lnbmVkIGludCBudW1uZXRzOwor
CisJLyogVG90YWwgZXJyb3IgY291bnQgb24gdGhpcyBhc3NvY2lhdGlvbiAqLworCXVuc2lnbmVk
IGludCBvdmVyYWxsX2Vycm9yX2NvdW50OworCisJdW5zaWduZWQgaW50IGNudF9tc2dfb25fc2I7
CisKKwkvKiBBbGwgc3RyZWFtIGNvdW50IG9mIGNodW5rcyBmb3IgZGVsaXZlcnkgKi8KKwl1bnNp
Z25lZCBpbnQgc2l6ZV9vbl9hbGxfc3RyZWFtczsKKwl1bnNpZ25lZCBpbnQgY250X29uX2FsbF9z
dHJlYW1zOworCisJLyogSGVhcnQgQmVhdCBkZWxheSBpbiBtcyAqLworCXVpbnQzMl90IGhlYXJ0
X2JlYXRfZGVsYXk7CisKKwkvKiBhdXRvY2xvc2UgKi8KKwl1bnNpZ25lZCBpbnQgc2N0cF9hdXRv
Y2xvc2VfdGlja3M7CisKKwkvKiBob3cgbWFueSBwcmVvcGVuIHN0cmVhbXMgd2UgaGF2ZSAqLwor
CXVuc2lnbmVkIGludCBwcmVfb3Blbl9zdHJlYW1zOworCisJLyogSG93IG1hbnkgc3RyZWFtcyBJ
IHN1cHBvcnQgY29taW5nIGludG8gbWUgKi8KKwl1bnNpZ25lZCBpbnQgbWF4X2luYm91bmRfc3Ry
ZWFtczsKKworCS8qIHRoZSBjb29raWUgbGlmZSBJIGF3YXJkIGZvciBhbnkgY29va2llLCBpbiBz
ZWNvbmRzICovCisJdW5zaWduZWQgaW50IGNvb2tpZV9saWZlOworCS8qIHRpbWUgdG8gZGVsYXkg
YWNrcyBmb3IgKi8KKwl1bnNpZ25lZCBpbnQgZGVsYXllZF9hY2s7CisJdW5zaWduZWQgaW50IG9s
ZF9kZWxheWVkX2FjazsKKwl1bnNpZ25lZCBpbnQgc2Fja19mcmVxOworCXVuc2lnbmVkIGludCBk
YXRhX3BrdHNfc2VlbjsKKworCXVuc2lnbmVkIGludCBudW1kdXB0c25zOworCWludCBkdXBfdHNu
c1tTQ1RQX01BWF9EVVBfVFNOU107CisJdW5zaWduZWQgaW50IGluaXRpYWxfaW5pdF9ydG9fbWF4
OwkvKiBpbml0aWFsIFJUTyBmb3IgSU5JVCdzICovCisJdW5zaWduZWQgaW50IGluaXRpYWxfcnRv
OwkvKiBpbml0aWFsIHNlbmQgUlRPICovCisJdW5zaWduZWQgaW50IG1pbnJ0bzsJLyogcGVyIGFz
c29jIFJUTy1NSU4gKi8KKwl1bnNpZ25lZCBpbnQgbWF4cnRvOwkvKiBwZXIgYXNzb2MgUlRPLU1B
WCAqLworCisJLyogYXV0aGVudGljYXRpb24gZmllbGRzICovCisJc2N0cF9hdXRoX2Noa2xpc3Rf
dCAqbG9jYWxfYXV0aF9jaHVua3M7CisJc2N0cF9hdXRoX2Noa2xpc3RfdCAqcGVlcl9hdXRoX2No
dW5rczsKKwlzY3RwX2htYWNsaXN0X3QgKmxvY2FsX2htYWNzOwkvKiBsb2NhbCBITUFDcyBzdXBw
b3J0ZWQgKi8KKwlzY3RwX2htYWNsaXN0X3QgKnBlZXJfaG1hY3M7CS8qIHBlZXIgSE1BQ3Mgc3Vw
cG9ydGVkICovCisJc3RydWN0IHNjdHBfa2V5aGVhZCBzaGFyZWRfa2V5czsJLyogYXNzb2MncyBz
aGFyZWQga2V5cyAqLworCXNjdHBfYXV0aGluZm9fdCBhdXRoaW5mbzsJLyogcmFuZG9tcywgY2Fj
aGVkIGtleXMgKi8KKwkvKgorCSAqIHJlZmNudCB0byBibG9jayBmcmVlaW5nIHdoZW4gYSBzZW5k
ZXIgb3IgcmVjZWl2ZXIgaXMgb2ZmIGNvcGluZworCSAqIHVzZXIgZGF0YSBpbi4KKwkgKi8KKwl1
aW50MzJfdCByZWZjbnQ7CisJdWludDMyX3QgY2h1bmtzX29uX291dF9xdWV1ZTsJLyogdG90YWwg
Y2h1bmtzIGZsb2F0aW5nIGFyb3VuZCwKKwkJCQkJICogbG9ja2VkIGJ5IHNlbmQgc29ja2V0IGJ1
ZmZlciAqLworCXVpbnQzMl90IHBlZXJzX2FkYXB0YXRpb247CisJdWludDMyX3QgZGVmYXVsdF9t
dHU7CisJdWludDE2X3QgcGVlcl9obWFjX2lkOwkvKiBwZWVyIEhNQUMgaWQgdG8gc2VuZCAqLwor
CisJLyoKKwkgKiBCZWluZyB0aGF0IHdlIGhhdmUgbm8gYmFnIHRvIGNvbGxlY3Qgc3RhbGUgY29v
a2llcywgYW5kIHRoYXQgd2UKKwkgKiByZWFsbHkgd291bGQgbm90IHdhbnQgdG8gYW55d2F5Li4g
d2Ugd2lsbCBjb3VudCB0aGVtIGluIHRoaXMKKwkgKiBjb3VudGVyLiBXZSBvZiBjb3Vyc2UgZmVl
ZCB0aGVtIHRvIHRoZSBwaWdlb25zIHJpZ2h0IGF3YXkgKEkgaGF2ZQorCSAqIGFsd2F5cyB0aG91
Z2h0IG9mIHBpZ2VvbnMgYXMgZmx5aW5nIHJhdHMpLgorCSAqLworCXVpbnQxNl90IHN0YWxlX2Nv
b2tpZV9jb3VudDsKKworCS8qCisJICogRm9yIHRoZSBwYXJ0aWFsIGRlbGl2ZXJ5IEFQSSwgaWYg
dXAsIGludm9rZWQgdGhpcyBpcyB3aGF0IGxhc3QKKwkgKiBUU04gSSBkZWxpdmVyZWQKKwkgKi8K
Kwl1aW50MTZfdCBzdHJfb2ZfcGRhcGk7CisJdWludDE2X3Qgc3NuX29mX3BkYXBpOworCisJLyog
Y291bnRzIG9mIGFjdHVhbCBidWlsdCBzdHJlYW1zLiBBbGxvY2F0aW9uIG1heSBiZSBtb3JlIGhv
d2V2ZXIgKi8KKwkvKiBjb3VsZCByZS1hcnJhbmdlIHRvIG9wdGltaXplIHNwYWNlIGhlcmUuICov
CisJdWludDE2X3Qgc3RyZWFtaW5jbnQ7CisJdWludDE2X3Qgc3RyZWFtb3V0Y250OworCXVpbnQx
Nl90IHN0cm1fcmVhbG91dHNpemU7CisJdWludDE2X3Qgc3RybV9wZW5kaW5nX2FkZF9zaXplOwor
CS8qIG15IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnMgb2YgSU5JVCBhbmQgU0VORCAqLworCS8q
IGNvcGllZCBmcm9tIFNDVFAgYnV0IHNob3VsZCBiZSBpbmRpdmlkdWFsbHkgc2V0YWJsZSAqLwor
CXVpbnQxNl90IG1heF9pbml0X3RpbWVzOworCXVpbnQxNl90IG1heF9zZW5kX3RpbWVzOworCisJ
dWludDE2X3QgZGVmX25ldF9mYWlsdXJlOworCisJdWludDE2X3QgZGVmX25ldF9wZl90aHJlc2hv
bGQ7CisKKwkvKgorCSAqIGxvY2sgZmxhZzogMCBpcyBvayB0byBzZW5kLCAxKyAoZHVhbHMgYXMg
YSByZXRyYW4gY291bnQpIGlzCisJICogYXdhaXRpbmcgQUNLCisJICovCisJdWludDE2X3QgbWFw
cGluZ19hcnJheV9zaXplOworCisJdWludDE2X3QgbGFzdF9zdHJtX3NlcV9kZWxpdmVyZWQ7CisJ
dWludDE2X3QgbGFzdF9zdHJtX25vX2RlbGl2ZXJlZDsKKworCXVpbnQxNl90IGxhc3RfcmV2b2tl
X2NvdW50OworCWludDE2X3QgbnVtX3NlbmRfdGltZXJzX3VwOworCisJdWludDE2X3Qgc3RyZWFt
X2xvY2tlZF9vbjsKKwl1aW50MTZfdCBlY25fZWNob19jbnRfb25xOworCisJdWludDE2X3QgZnJl
ZV9jaHVua19jbnQ7CisJdWludDhfdCBzdHJlYW1fbG9ja2VkOworCXVpbnQ4X3QgYXV0aGVudGlj
YXRlZDsJLyogcGFja2V0IGF1dGhlbnRpY2F0ZWQgb2sgKi8KKwkvKgorCSAqIFRoaXMgZmxhZyBp
bmRpY2F0ZXMgdGhhdCBhIFNBQ0sgbmVlZCB0byBiZSBzZW50LgorCSAqIEluaXRpYWxseSB0aGlz
IGlzIDEgdG8gc2VuZCB0aGUgZmlyc3Qgc0FDSyBpbW1lZGlhdGVseS4KKwkgKi8KKwl1aW50OF90
IHNlbmRfc2FjazsKKworCS8qIG1heCBidXJzdCBvZiBuZXcgcGFja2V0cyBpbnRvIHRoZSBuZXR3
b3JrICovCisJdWludDMyX3QgbWF4X2J1cnN0OworCS8qIG1heCBidXJzdCBvZiBmYXN0IHJldHJh
bnNtaXQgcGFja2V0cyAqLworCXVpbnQzMl90IGZyX21heF9idXJzdDsKKworCXVpbnQ4X3Qgc2F0
X25ldHdvcms7CS8qIFJUVCBpcyBpbiByYW5nZSBvZiBzYXQgbmV0IG9yIGdyZWF0ZXIgKi8KKwl1
aW50OF90IHNhdF9uZXR3b3JrX2xvY2tvdXQ7CS8qIGxvY2tvdXQgY29kZSAqLworCXVpbnQ4X3Qg
YnVyc3RfbGltaXRfYXBwbGllZDsJLyogQnVyc3QgbGltaXQgaW4gZWZmZWN0IGF0IGxhc3Qgc2Vu
ZD8gKi8KKwkvKiBmbGFnIGdvZXMgb24gd2hlbiB3ZSBhcmUgZG9pbmcgYSBwYXJ0aWFsIGRlbGl2
ZXJ5IGFwaSAqLworCXVpbnQ4X3QgaGJfcmFuZG9tX3ZhbHVlc1s0XTsKKwl1aW50OF90IGZyYWdt
ZW50ZWRfZGVsaXZlcnlfaW5wcm9ncmVzczsKKwl1aW50OF90IGZyYWdtZW50X2ZsYWdzOworCXVp
bnQ4X3QgbGFzdF9mbGFnc19kZWxpdmVyZWQ7CisJdWludDhfdCBoYl9lY3RfcmFuZG9tYml0Owor
CXVpbnQ4X3QgaGJfcmFuZG9tX2lkeDsKKwl1aW50OF90IGRlZmF1bHRfZHNjcDsKKwl1aW50OF90
IGFzY29uZl9kZWxfcGVuZGluZzsJLyogYXNjb25mIGRlbGV0ZSBsYXN0IGFkZHIgcGVuZGluZyAq
LworCXVpbnQ4X3QgdHJpZ2dlcl9yZXNldDsKKwkvKgorCSAqIFRoaXMgdmFsdWUsIHBsdXMgYWxs
IG90aGVyIGFjaydkIGJ1dCBhYm92ZSBjdW0tYWNrIGlzIGFkZGVkCisJICogdG9nZXRoZXIgdG8g
Y3Jvc3MgY2hlY2sgYWdhaW5zdCB0aGUgYml0IHRoYXQgd2UgaGF2ZSB5ZXQgdG8KKwkgKiBkZWZp
bmUgKHByb2JhYmx5IGluIHRoZSBTQUNLKS4gV2hlbiB0aGUgY3VtLWFjayBpcyB1cGRhdGVkLCB0
aGlzCisJICogc3VtIGlzIHVwZGF0ZWQgYXMgd2VsbC4KKwkgKi8KKworCS8qIEZsYWdzIHdoZXRo
ZXIgYW4gZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBvciBub3QgKi8KKwl1aW50OF90IGVjbl9zdXBw
b3J0ZWQ7CisJdWludDhfdCBwcnNjdHBfc3VwcG9ydGVkOworCXVpbnQ4X3QgYXV0aF9zdXBwb3J0
ZWQ7CisJdWludDhfdCBhc2NvbmZfc3VwcG9ydGVkOworCXVpbnQ4X3QgcmVjb25maWdfc3VwcG9y
dGVkOworCXVpbnQ4X3QgbnJzYWNrX3N1cHBvcnRlZDsKKwl1aW50OF90IHBrdGRyb3Bfc3VwcG9y
dGVkOworCXVpbnQ4X3QgaWRhdGFfc3VwcG9ydGVkOworCisJLyogRGlkIHRoZSBwZWVyIG1ha2Ug
dGhlIHN0cmVhbSBjb25maWcgKGFkZCBvdXQpIHJlcXVlc3QgKi8KKwl1aW50OF90IHBlZXJfcmVx
X291dDsKKworCXVpbnQ4X3QgbG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwl1aW50OF90IHBlZXJf
c3VwcG9ydHNfbmF0OworCisJc3RydWN0IHNjdHBfc2NvcGluZyBzY29wZTsKKwkvKiBmbGFncyB0
byBoYW5kbGUgc2VuZCBhbHRlcm5hdGUgbmV0IHRyYWNraW5nICovCisJdWludDhfdCB1c2VkX2Fs
dF9hc2NvbmZhY2s7CisJdWludDhfdCBmYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5OworCXVpbnQ4
X3Qgc2F0X3QzX2xvc3NfcmVjb3Zlcnk7CisJdWludDhfdCBkcm9wcGVkX3NwZWNpYWxfY250Owor
CXVpbnQ4X3Qgc2Vlbl9hX3NhY2tfdGhpc19wa3Q7CisJdWludDhfdCBzdHJlYW1fcmVzZXRfb3V0
c3RhbmRpbmc7CisJdWludDhfdCBzdHJlYW1fcmVzZXRfb3V0X2lzX291dHN0YW5kaW5nOworCXVp
bnQ4X3QgZGVsYXllZF9jb25uZWN0aW9uOworCXVpbnQ4X3QgaWZwX2hhZF9lbm9idWY7CisJdWlu
dDhfdCBzYXdfc2Fja193aXRoX2ZyYWdzOworCXVpbnQ4X3Qgc2F3X3NhY2tfd2l0aF9ucl9mcmFn
czsKKwl1aW50OF90IGluX2Fzb2NpZF9oYXNoOworCXVpbnQ4X3QgYXNzb2NfdXBfc2VudDsKKwl1
aW50OF90IGFkYXB0YXRpb25fbmVlZGVkOworCXVpbnQ4X3QgYWRhcHRhdGlvbl9zZW50OworCS8q
IENNVCB2YXJpYWJsZXMgKi8KKwl1aW50OF90IGNtdF9kYWNfcGt0c19yY3ZkOworCXVpbnQ4X3Qg
c2N0cF9jbXRfb25fb2ZmOworCXVpbnQ4X3QgaWFtX2Jsb2NraW5nOworCXVpbnQ4X3QgY29va2ll
X2hvd1s4XTsKKwkvKiBKUlMgNS8yMS8wNyAtIENNVCBQRiB2YXJpYWJsZSAqLworCXVpbnQ4X3Qg
c2N0cF9jbXRfcGY7CisJdWludDhfdCB1c2VfcHJlY2lzZV90aW1lOworCXVpbnQ2NF90IHNjdHBf
ZmVhdHVyZXM7CisJdWludDMyX3QgbWF4X2N3bmQ7CisJdWludDE2X3QgcG9ydDsgLyogcmVtb3Rl
IFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQgKi8KKwkvKgorCSAqIFRoZSBtYXBwaW5nIGFycmF5IGlz
IHVzZWQgdG8gdHJhY2sgb3V0IG9mIG9yZGVyIHNlcXVlbmNlcyBhYm92ZQorCSAqIGxhc3RfYWNr
ZWRfc2VxLiAwIGluZGljYXRlcyBwYWNrZXQgbWlzc2luZyAxIGluZGljYXRlcyBwYWNrZXQKKwkg
KiByZWMnZC4gV2Ugc2xpZGUgaXQgdXAgZXZlcnkgdGltZSB3ZSByYWlzZSBsYXN0X2Fja2VkX3Nl
cSBhbmQgMAorCSAqIHRyYWlsaW5nIGxvY2FjdGlvbnMgb3V0LiAgSWYgSSBnZXQgYSBUU04gYWJv
dmUgdGhlIGFycmF5CisJICogbWFwcGluZ0FycmF5U3osIEkgZGlzY2FyZCB0aGUgZGF0YWdyYW0g
YW5kIGxldCByZXRyYW5zbWl0IGhhcHBlbi4KKwkgKi8KKwl1aW50MzJfdCBtYXJrZWRfcmV0cmFu
czsKKwl1aW50MzJfdCB0aW1vaW5pdDsKKwl1aW50MzJfdCB0aW1vZGF0YTsKKwl1aW50MzJfdCB0
aW1vc2FjazsKKwl1aW50MzJfdCB0aW1vc2h1dGRvd247CisJdWludDMyX3QgdGltb2hlYXJ0YmVh
dDsKKwl1aW50MzJfdCB0aW1vY29va2llOworCXVpbnQzMl90IHRpbW9zaHV0ZG93bmFjazsKKwlz
dHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOworCXN0cnVjdCB0aW1ldmFsIGRpc2NvbnRpbnVpdHlf
dGltZTsKKwl1aW50NjRfdCBhYmFuZG9uZWRfdW5zZW50W1NDVFBfUFJfU0NUUF9NQVggKyAxXTsK
Kwl1aW50NjRfdCBhYmFuZG9uZWRfc2VudFtTQ1RQX1BSX1NDVFBfTUFYICsgMV07Cit9OworCisj
ZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0
bC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMKaW5kZXggZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uODNkMmM5YTJiODNhMzQ0OTEx
Mjc0ZWQ2MTYwMWY4MjcwMTI0MWFhZSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfc3lzY3RsLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfc3lzY3RsLmMKQEAgLTAsMCArMSwxNzMyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3N5c2N0bC5jIDMyNjY3
MiAyMDE3LTEyLTA3IDIyOjE5OjA4WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1
dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2lmZGVmIF9fRnJlZUJT
RF9fCisjaW5jbHVkZSA8c3lzL3NtcC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRk
ci5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworRkVBVFVSRShzY3RwLCAiU3RyZWFt
IENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIik7CisjZW5kaWYKKworLyoKKyAqIHN5c2N0
bCB0dW5hYmxlIHZhcmlhYmxlcworICovCisKK3ZvaWQKK3NjdHBfaW5pdF9zeXNjdGxzKCkKK3sK
KwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSA9IFNDVFBDVExfTUFYREdSQU1fREVG
QVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSA9IFNDVFBDVExfUkVDVlNQ
QUNFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNjb25mKSA9IFNDVFBD
VExfQVVUT0FTQ09ORl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tdWx0aXBsZV9h
c2NvbmZzKSA9IFNDVFBDVExfTVVMVElQTEVBU0NPTkZTX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2Vjbl9lbmFibGUpID0gU0NUUENUTF9FQ05fRU5BQkxFX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3ByX2VuYWJsZSkgPSBTQ1RQQ1RMX1BSX0VOQUJMRV9ERUZBVUxU
OworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSkgPSBTQ1RQQ1RMX0FVVEhfRU5B
QkxFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpID0gU0NU
UENUTF9BU0NPTkZfRU5BQkxFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29u
ZmlnX2VuYWJsZSkgPSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9ERUZBVUxUOworCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9ucnNhY2tfZW5hYmxlKSA9IFNDVFBDVExfTlJTQUNLX0VOQUJMRV9ERUZB
VUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wa3Rkcm9wX2VuYWJsZSkgPSBTQ1RQQ1RMX1BL
VERST1BfRU5BQkxFX0RFRkFVTFQ7CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDApCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1f
b25fbG9vcGJhY2spID0gU0NUUENUTF9MT09QQkFDS19OT0NTVU1fREVGQVVMVDsKKyNlbmRpZgor
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSA9IFNDVFBDVExfUEVFUl9DSEtP
SF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCkgPSBT
Q1RQQ1RMX01BWEJVUlNUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2ZyX21heF9i
dXJzdF9kZWZhdWx0KSA9IFNDVFBDVExfRlJNQVhCVVJTVF9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSA9IFNDVFBDVExfTUFYQ0hVTktTX0RFRkFV
TFQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaGFzaHRibHNpemUpID09IDApIHsKKwkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0Ymxz
aXplKSA9IFNDVFBDVExfVENCSEFTSFNJWkVfREVGQVVMVDsKKwl9CisjZWxzZQorCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSkgPSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX0RFRkFVTFQ7
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9wY2J0YmxzaXplKSA9PSAwKSB7CisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0
YmxzaXplKSA9IFNDVFBDVExfUENCSEFTSFNJWkVfREVGQVVMVDsKKwl9CisjZWxzZQorCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSA9IFNDVFBDVExfUENCSEFTSFNJWkVfREVGQVVM
VDsKKyNlbmRpZgorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRfcG9pbnQpID0gU0NU
UENUTF9NSU5fU1BMSVRfUE9JTlRfREVGQVVMVDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSA9PSAwKSB7CisJCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSA9IFNDVFBDVExfQ0hVTktTQ0FMRV9ERUZBVUxU
OworCX0KKyNlbHNlCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2NhbGUpID0gU0NUUENU
TF9DSFVOS1NDQUxFX0RFRkFVTFQ7CisjZW5kaWYKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVs
YXllZF9zYWNrX3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX0RFRkFV
TFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KSA9IFNDVFBDVExf
U0FDS19GUkVRX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9mcmVlX3Jl
c2NfbGltaXQpID0gU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9BU09DX1JFU09VUkNFX0RF
RkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0
KSA9IFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KSA9IFNDVFBDVExfUE1UVV9SQUlTRV9USU1F
X0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVm
YXVsdCkgPSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVMVDsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpID0gU0NUUENUTF9TRUNSRVRfTElG
RVRJTUVfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZhdWx0KSA9
IFNDVFBDVExfUlRPX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWlu
X2RlZmF1bHQpID0gU0NUUENUTF9SVE9fTUlOX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3J0b19pbml0aWFsX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fSU5JVElBTF9ERUZBVUxUOwor
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX0lO
SVRfUlRPX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVf
bGlmZV9kZWZhdWx0KSA9IFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVGQVVMVDsKKwlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpID0gU0NUUENUTF9JTklUX1JU
WF9NQVhfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZh
dWx0KSA9IFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9ERUZBVUxU
OworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkgPSBTQ1RQQ1RMX1BB
VEhfUEZfVEhSRVNIT0xEX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3Jl
X3RocmVzaG9sZCkgPSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERUZBVUxUOworCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpID0gU0NUUENUTF9J
TkNPTUlOR19TVFJFQU1TX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX291dGdv
aW5nX3N0cmVhbXNfZGVmYXVsdCkgPSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVGQVVMVDsK
KwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPSBTQ1RQQ1RMX0NNVF9PTl9PRkZf
REVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpID0gU0NUUENUTF9D
TVRfVVNFX0RBQ19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNl
ZF9tYXhidXJzdCkgPSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVMVDsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSA9IFNDVFBDVExfTkFUX0ZSSUVORExZX0RFRkFVTFQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkgPSBTQ1RQQ1RMX0FCQ19M
X1ZBUl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3Vu
dCkgPSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RvX2RyYWluKSA9IFNDVFBDVExfRE9fU0NUUF9EUkFJTl9ERUZBVUxUOworCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9oYl9tYXhidXJzdCkgPSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9ERUZB
VUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCkgPSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX21pbl9yZXNpZHVhbCkgPSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERUZBVUxUOworCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSA9IFNDVFBDVExfTUFYX1JFVFJBTl9D
SFVOS19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSA9IFND
VFBDVExfTE9HR0lOR19MRVZFTF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZh
dWx0X2NjX21vZHVsZSkgPSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfc3NfbW9kdWxlKSA9IFNDVFBDVExfREVGQVVMVF9T
U19NT0RVTEVfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2lu
dGVybGVhdmUpID0gU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxUOworCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSA9IFNDVFBDVExfTU9CSUxJVFlfQkFT
RV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZikg
PSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3Z0YWdfdGltZV93YWl0KSA9IFNDVFBDVExfVElNRV9XQUlUX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpID0gU0NUUENUTF9CVUZGRVJfU1BM
SVRUSU5HX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCkgPSBT
Q1RQQ1RMX0lOSVRJQUxfQ1dORF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2
YXJfYncpID0gU0NUUENUTF9SVFRWQVJfQldfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcnR0dmFyX3J0dCkgPSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVGQVVMVDsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcnR0dmFyX2VxcmV0KSA9IFNDVFBDVExfUlRUVkFSX0VRUkVUX0RFRkFVTFQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVwKSA9IFNDVFBDVExfUlRUVkFSX1NU
RUFEWVNfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2RjY2NfZWNuKSA9IFND
VFBDVExfUlRUVkFSX0RDQ0NFQ05fREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxh
Y2tob2xlKSA9IFNDVFBDVExfQkxBQ0tIT0xFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2RpYWdfaW5mb19jb2RlKSA9IFNDVFBDVExfRElBR19JTkZPX0NPREVfREVGQVVMVDsKKyNp
ZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lmIGRlZmluZWQoX19XaW5kb3dzX18p
CisJLyogT24gV2luZG93cywgdGhlIHJlc291cmNlIGZvciBnbG9iYWwgdmFyaWFibGVzIGlzIGxp
bWl0ZWQuICovCisJTUFMTE9DKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzdHJ1Y3Qgc2N0
cF9sb2cgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZyksIE1fU1lTQ1RMLCBNX1pFUk8pOworI2Vs
c2UKKwltZW1zZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfbG9nKSk7CisjZW5kaWYKKyNlbmRpZgorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBf
dHVubmVsaW5nX3BvcnQpID0gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVGQVVMVDsKKwlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpID0gU0NUUENUTF9T
QUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9p
bml0c19pbmNsdWRlX25hdF9mcmllbmRseSkgPSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19E
RUZBVUxUOworI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGVidWdfb24pID0gU0NUUENUTF9ERUJVR19ERUZBVUxUOworI2VuZGlmCisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2lnbm9yZV92bXdhcmVfaW50ZXJmYWNl
cykgPSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERUZBVUxUOworCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYWluX3RpbWVyKSA9IFNDVFBDVExfTUFJTl9USU1FUl9ERUZBVUxUOwor
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0KSA9IFNDVFBDVExfQURE
Ul9XQVRDSERPR19MSU1JVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92dGFnX3dh
dGNoZG9nX2xpbWl0KSA9IFNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9ERUZBVUxUOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkgPSBTQ1RQQ1RMX09V
VFBVVF9VTkxPQ0tFRF9ERUZBVUxUOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9fV2luZG93
c19fKQordm9pZAorc2N0cF9maW5pc2hfc3lzY3RscygpCit7CisjaWYgZGVmaW5lZChTQ1RQX0xP
Q0FMX1RSQUNFX0JVRikKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykgIT0gTlVMTCkg
eworCQlGUkVFKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBNX1NZU0NUTCk7CisJCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2cpID0gTlVMTDsKKwl9CisjZW5kaWYKK30KKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCisvKiBJdCByZXR1cm5zIGFuIHVwcGVyIGxpbWl0LiBObyBmaWx0ZXJpbmcg
aXMgZG9uZSBoZXJlICovCitzdGF0aWMgdW5zaWduZWQgaW50CitzY3RwX3N5c2N0bF9udW1iZXJf
b2ZfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7CisJdW5zaWduZWQgaW50IGNu
dDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwor
CXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwor
CisJY250ID0gMDsKKwkvKiBuZWl0aGVyIE1hYyBPUyBYIG5vciBGcmVlQlNEIHN1cHBvcnQgbXVs
aXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KKwlpZiAoKHZyZiA9IHNjdHBfZmluZF92cmYoaW5w
LT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJTElTVF9GT1JFQUNIKHNj
dHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQkJTElTVF9GT1JFQUNIKHNjdHBf
aWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJc3dpdGNoIChzY3RwX2lm
YS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVU
OgorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorI2VuZGlmCisJCQkJ
CWNudCsrOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJ
CQl9CisJCX0KKwl9IGVsc2UgeworCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRk
cl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisjZW5kaWYKKwkJCQljbnQrKzsKKwkJCQli
cmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChj
bnQpOworfQorCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNz
ZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c3lzY3RsX3JlcSAqcmVxKQoreworCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJc3RydWN0
IHNjdHBfaWZhICpzY3RwX2lmYTsKKwlpbnQgbG9vcGJhY2tfc2NvcGUsIGlwdjRfbG9jYWxfc2Nv
cGUsIGxvY2FsX3Njb3BlLCBzaXRlX3Njb3BlOworCWludCBpcHY0X2FkZHJfbGVnYWwsIGlwdjZf
YWRkcl9sZWdhbDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaW50IGNvbm5fYWRkcl9s
ZWdhbDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCXN0cnVjdCB4c2N0cF9sYWRk
ciB4bGFkZHI7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCWludCBlcnJvcjsKKworCS8q
IFR1cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLworCWlmIChzdGNiKSB7CisJCS8q
IHVzZSBhc3NvY2lhdGlvbiBzcGVjaWZpYyB2YWx1ZXMgKi8KKwkJbG9vcGJhY2tfc2NvcGUgPSBz
dGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlOworCQlpcHY0X2xvY2FsX3Njb3BlID0gc3Rj
Yi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOworCQlsb2NhbF9zY29wZSA9IHN0Y2ItPmFz
b2Muc2NvcGUubG9jYWxfc2NvcGU7CisJCXNpdGVfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLnNp
dGVfc2NvcGU7CisJCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRy
X2xlZ2FsOworCQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9s
ZWdhbDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNvbm5fYWRkcl9sZWdhbCA9IHN0
Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJfSBlbHNlIHsKKwkJLyog
VXNlIGdlbmVyaWMgdmFsdWVzIGZvciBlbmRwb2ludHMuICovCisJCWxvb3BiYWNrX3Njb3BlID0g
MTsKKwkJaXB2NF9sb2NhbF9zY29wZSA9IDE7CisJCWxvY2FsX3Njb3BlID0gMTsKKwkJc2l0ZV9z
Y29wZSA9IDE7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgeworCQkJaXB2Nl9hZGRyX2xlZ2FsID0gMTsKKwkJCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlu
cCkpIHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlpcHY0X2Fk
ZHJfbGVnYWwgPSAxOworCQkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNvbm5f
YWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWlwdjZfYWRkcl9sZWdhbCA9
IDA7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJCQljb25uX2FkZHJfbGVnYWwgPSAxOwor
CQkJCWlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCQl9IGVsc2UgeworCQkJCWNvbm5fYWRkcl9sZWdh
bCA9IDA7CisJCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJCX0KKyNlbHNlCisJCQlpcHY0X2Fk
ZHJfbGVnYWwgPSAxOworI2VuZGlmCisJCX0KKwl9CisKKwkvKiBuZWl0aGVyIE1hYyBPUyBYIG5v
ciBGcmVlQlNEIHN1cHBvcnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KKwlpZiAoKHZy
ZiA9IHNjdHBfZmluZF92cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgeworCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQlyZXR1cm4gKC0x
KTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7
CisJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJ
CWlmICgobG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9p
Zm4pKQorCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2NvcGUgbm90IHNldCAqLwor
CQkJCWNvbnRpbnVlOworCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxp
c3QsIG5leHRfaWZhKSB7CisJCQkJaWYgKHN0Y2IpIHsKKwkJCQkJLyoKKwkJCQkJICogaWdub3Jl
IGlmIGJsYWNrbGlzdGVkIGF0CisJCQkJCSAqIGFzc29jaWF0aW9uIGxldmVsCisJCQkJCSAqLwor
CQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpKQorCQkJCQkJ
Y29udGludWU7CisJCQkJfQorCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJaWYgKGlwdjRfYWRk
cl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCQkJCXNpbiA9
ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47CisJCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIg
PT0gMCkKKwkJCQkJCQljb250aW51ZTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJ
aWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkJICAg
ICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51
ZTsKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQkJaWYgKChpcHY0X2xvY2FsX3Njb3BlID09IDApICYm
IChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkKKwkJCQkJCQljb250aW51
ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWJyZWFrOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQlpZiAoaXB2Nl9h
ZGRyX2xlZ2FsKSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQkJCQlz
aW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlpZiAoSU42X0lTX0FERFJfVU5T
UEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQkJY29udGludWU7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlu
cC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIp
ICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQkJaWYgKElO
Nl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCQkJCWlmIChsb2Nh
bF9zY29wZSA9PSAwKQorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCWlmICgoc2l0
ZV9zY29wZSA9PSAwKSAmJiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIp
KSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJ
CWNhc2UgQUZfQ09OTjoKKwkJCQkJaWYgKCFjb25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCWNvbnRp
bnVlOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJY29u
dGludWU7CisJCQkJfQorCQkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihzdHJ1
Y3QgeHNjdHBfbGFkZHIpKTsKKwkJCQltZW1jcHkoKHZvaWQgKikmeGxhZGRyLmFkZHJlc3MsIChj
b25zdCB2b2lkICopJnNjdHBfaWZhLT5hZGRyZXNzLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3Rv
cmUpKTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19SVU5M
T0NLKCk7CisJCQkJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVj
dCB4c2N0cF9sYWRkcikpOworCQkJCWlmIChlcnJvcikgeworCQkJCQlyZXR1cm4gKGVycm9yKTsK
KwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCQkJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJTElTVF9GT1JFQUNI
KGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQkJLyogaWdu
b3JlIGlmIGJsYWNrbGlzdGVkIGF0IGFzc29jaWF0aW9uIGxldmVsICovCisJCQlpZiAoc3RjYiAm
JiBzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkKKwkJCQljb250aW51
ZTsKKwkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFk
ZHIpKTsKKwkJCW1lbWNweSgodm9pZCAqKSZ4bGFkZHIuYWRkcmVzcywgKGNvbnN0IHZvaWQgKikm
bGFkZHItPmlmYS0+YWRkcmVzcywgc2l6ZW9mKHVuaW9uIHNjdHBfc29ja3N0b3JlKSk7CisJCQl4
bGFkZHIuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3QpbGFkZHItPnN0YXJ0X3RpbWUudHZf
c2VjOworCQkJeGxhZGRyLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50MzJfdClsYWRkci0+c3Rh
cnRfdGltZS50dl91c2VjOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7CisJCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGxhZGRyLCBzaXpl
b2Yoc3RydWN0IHhzY3RwX2xhZGRyKSk7CisJCQlpZiAoZXJyb3IpIHsKKwkJCQlyZXR1cm4gKGVy
cm9yKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCQl9CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICopJnhsYWRkciwg
MCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCXhsYWRkci5sYXN0ID0gMTsKKwlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJZXJyb3IgPSBT
WVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCisJ
aWYgKGVycm9yKSB7CisJCXJldHVybiAoZXJyb3IpOworCX0gZWxzZSB7CisJCVNDVFBfSU5QX0lO
Rk9fUkxPQ0soKTsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJcmV0dXJuICgwKTsKKwl9Cit9
CisKKy8qCisgKiBzeXNjdGwgZnVuY3Rpb25zCisgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
K3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QgU1lTQ1RMX0hBTkRMRVJf
QVJHUworeworI3ByYWdtYSB1bnVzZWQob2lkcCwgYXJnMSwgYXJnMikKKyNlbHNlCitzdGF0aWMg
aW50CitzY3RwX3N5c2N0bF9oYW5kbGVfYXNzb2NsaXN0KFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7
CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2VuZHBvaW50czsKKwl1bnNpZ25lZCBp
bnQgbnVtYmVyX29mX2xvY2FsX2FkZHJlc3NlczsKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2Fz
c29jaWF0aW9uczsKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXM7CisJ
dW5zaWduZWQgaW50IG47CisJaW50IGVycm9yOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJ
c3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qg
eHNjdHBfaW5wY2IgeGlucGNiOworCXN0cnVjdCB4c2N0cF90Y2IgeHN0Y2I7CisJc3RydWN0IHhz
Y3RwX3JhZGRyIHhyYWRkcjsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCW51bWJlcl9vZl9lbmRw
b2ludHMgPSAwOworCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgPSAwOworCW51bWJlcl9vZl9h
c3NvY2lhdGlvbnMgPSAwOworCW51bWJlcl9vZl9yZW1vdGVfYWRkcmVzc2VzID0gMDsKKworCVND
VFBfSU5QX0lORk9fUkxPQ0soKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAocmVxLT5v
bGRwdHIgPT0gVVNFUl9BRERSX05VTEwpIHsKKyNlbHNlCisJaWYgKHJlcS0+b2xkcHRyID09IE5V
TEwpIHsKKyNlbmRpZgorCQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9CQVNFX0lORk8obGlzdGhl
YWQpLCBzY3RwX2xpc3QpIHsKKwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQludW1iZXJfb2Zf
ZW5kcG9pbnRzKys7CisJCQludW1iZXJfb2ZfbG9jYWxfYWRkcmVzc2VzICs9IHNjdHBfc3lzY3Rs
X251bWJlcl9vZl9hZGRyZXNzZXMoaW5wKTsKKwkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJbnVtYmVyX29mX2Fzc29jaWF0aW9u
cysrOworCQkJCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKz0gc2N0cF9zeXNjdGxfbnVtYmVy
X29mX2FkZHJlc3NlcyhpbnApOworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5u
ZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXMrKzsKKwkJ
CQl9CisJCQl9CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCX0KKwkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7CisJCW4gPSAobnVtYmVyX29mX2VuZHBvaW50cyArIDEpICogc2l6ZW9mKHN0
cnVjdCB4c2N0cF9pbnBjYikgKworCQkgICAgKG51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKyBu
dW1iZXJfb2ZfZW5kcG9pbnRzICsgbnVtYmVyX29mX2Fzc29jaWF0aW9ucykgKiBzaXplb2Yoc3Ry
dWN0IHhzY3RwX2xhZGRyKSArCisJCSAgICAobnVtYmVyX29mX2Fzc29jaWF0aW9ucyArIG51bWJl
cl9vZl9lbmRwb2ludHMpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpICsKKwkJICAgIChudW1i
ZXJfb2ZfcmVtb3RlX2FkZHJlc3NlcyArIG51bWJlcl9vZl9hc3NvY2lhdGlvbnMpICogc2l6ZW9m
KHN0cnVjdCB4c2N0cF9yYWRkcik7CisKKwkJLyogcmVxdWVzdCBzb21lIG1vcmUgbWVtb3J5IHRo
YW4gbmVlZGVkICovCisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCisJCXJlcS0+b2xkaWR4ID0g
KG4gKyBuIC8gOCk7CisjZWxzZQorCQlyZXEtPmRhdGFpZHggPSAobiArIG4gLyA4KTsKKyNlbmRp
ZgorCQlyZXR1cm4gKDApOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAocmVxLT5u
ZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpIHsKKyNlbHNlCisJaWYgKHJlcS0+bmV3cHRyICE9IE5V
TEwpIHsKKyNlbmRpZgorCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9TWVNDVEwsIEVQRVJNKTsK
KwkJcmV0dXJuIChFUEVSTSk7CisJfQorCUxJU1RfRk9SRUFDSChpbnAsICZTQ1RQX0JBU0VfSU5G
TyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCS8q
IGlmIGl0cyBhbGxnb25lIGl0IGlzIGJlaW5nIGZyZWVkIC0gc2tpcCBpdCAgKi8KKwkJCWdvdG8g
c2tpcDsKKwkJfQorCQl4aW5wY2IubGFzdCA9IDA7CisJCXhpbnBjYi5sb2NhbF9wb3J0ID0gbnRv
aHMoaW5wLT5zY3RwX2xwb3J0KTsKKwkJeGlucGNiLmZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDA0OAor
CQl4aW5wY2IuZmVhdHVyZXMgPSAodWludDMyX3QpaW5wLT5zY3RwX2ZlYXR1cmVzOworI2Vsc2UK
KwkJeGlucGNiLmZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOworI2VuZGlmCisJCXhpbnBj
Yi50b3RhbF9zZW5kcyA9IGlucC0+dG90YWxfc2VuZHM7CisJCXhpbnBjYi50b3RhbF9yZWN2cyA9
IGlucC0+dG90YWxfcmVjdnM7CisJCXhpbnBjYi50b3RhbF9ub3NwYWNlcyA9IGlucC0+dG90YWxf
bm9zcGFjZXM7CisJCXhpbnBjYi5mcmFnbWVudGF0aW9uX3BvaW50ID0gaW5wLT5zY3RwX2ZyYWdf
cG9pbnQ7CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24g
PCAxMDAxNTE3KSkKKwkJeGlucGNiLnNvY2tldCA9IGlucC0+c2N0cF9zb2NrZXQ7CisjZW5kaWYK
KwkJc28gPSBpbnAtPnNjdHBfc29ja2V0OworCQlpZiAoKHNvID09IE5VTEwpIHx8CisJCSAgICAo
IVNDVFBfSVNfTElTVEVOSU5HKGlucCkpIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCQl4aW5wY2IucWxlbiA9IDA7CisJCQl4aW5w
Y2IubWF4cWxlbiA9IDA7CisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gMTIwMDAzNAorCQkJeGlucGNiLnFsZW4gPSBzby0+c29sX3Fs
ZW47CisjZWxzZQorCQkJeGlucGNiLnFsZW4gPSBzby0+c29fcWxlbjsKKyNlbmRpZgorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorI2lmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKKwkJCXhpbnBjYi5xbGVuX29sZCA9IHNvLT5zb2xf
cWxlbiA+IFVTSFJUX01BWCA/CisJCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+c29s
X3FsZW47CisjZWxzZQorCQkJeGlucGNiLnFsZW5fb2xkID0gc28tPnNvX3FsZW4gPiBVU0hSVF9N
QVggPworCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvX3FsZW47CisjZW5kaWYK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDEyMDAwMzQKKwkJCXhpbnBjYi5tYXhxbGVuID0gc28tPnNvbF9xbGltaXQ7CisjZWxzZQorCQkJ
eGlucGNiLm1heHFsZW4gPSBzby0+c29fcWxpbWl0OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2CisjaWYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gMTIwMDAzNAorCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvbF9xbGltaXQg
PiBVU0hSVF9NQVggPworCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvbF9xbGlt
aXQ7CisjZWxzZQorCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvX3FsaW1pdCA+IFVTSFJU
X01BWCA/CisJCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+c29fcWxpbWl0OworI2Vu
ZGlmCisjZW5kaWYKKwkJfQorCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQllcnJvciA9IFNZU0NU
TF9PVVQocmVxLCAmeGlucGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX2lucGNiKSk7CisJCWlmIChl
cnJvcikgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCXJldHVybiAoZXJyb3IpOwor
CQl9CisJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJ
ZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBOVUxMLCBy
ZXEpOworCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQlyZXR1
cm4gKGVycm9yKTsKKwkJfQorCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQl4c3RjYi5sYXN0ID0gMDsKKwkJCXhzdGNiLmxvY2FsX3BvcnQgPSBudG9ocyhpbnAtPnNj
dHBfbHBvcnQpOworCQkJeHN0Y2IucmVtb3RlX3BvcnQgPSBudG9ocyhzdGNiLT5ycG9ydCk7CisJ
CQlpZiAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uICE9IE5VTEwpCisJCQkJeHN0Y2Iu
cHJpbWFyeV9hZGRyID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRy
OworCQkJeHN0Y2IuaGVhcnRiZWF0X2ludGVydmFsID0gc3RjYi0+YXNvYy5oZWFydF9iZWF0X2Rl
bGF5OworCQkJeHN0Y2Iuc3RhdGUgPSAodWludDMyX3Qpc2N0cF9tYXBfYXNzb2Nfc3RhdGUoc3Rj
Yi0+YXNvYy5zdGF0ZSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA4MDAwMDAKKwkJCS8qIDcuMCBkb2VzIG5vdCBzdXBwb3J0IHRoZXNlICovCisJ
CQl4c3RjYi5hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJCQl4c3RjYi5wZWVy
c19yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOworI2VuZGlmCisjZWxzZQorCQkJeHN0Y2Iu
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQkJeHN0Y2IucGVlcnNfcnduZCA9
IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKKyNlbmRpZgorCQkJeHN0Y2IuaW5fc3RyZWFtcyA9IHN0
Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7CisJCQl4c3RjYi5vdXRfc3RyZWFtcyA9IHN0Y2ItPmFzb2Mu
c3RyZWFtb3V0Y250OworCQkJeHN0Y2IubWF4X25yX3JldHJhbnMgPSBzdGNiLT5hc29jLm92ZXJh
bGxfZXJyb3JfY291bnQ7CisJCQl4c3RjYi5wcmltYXJ5X3Byb2Nlc3MgPSAwOyAvKiBub3QgcmVh
bGx5IHN1cHBvcnRlZCB5ZXQgKi8KKwkJCXhzdGNiLlQxX2V4cGlyZXJpZXMgPSBzdGNiLT5hc29j
LnRpbW9pbml0ICsgc3RjYi0+YXNvYy50aW1vY29va2llOworCQkJeHN0Y2IuVDJfZXhwaXJlcmll
cyA9IHN0Y2ItPmFzb2MudGltb3NodXRkb3duICsgc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2s7
CisJCQl4c3RjYi5yZXRyYW5zbWl0dGVkX3RzbnMgPSBzdGNiLT5hc29jLm1hcmtlZF9yZXRyYW5z
OworCQkJeHN0Y2Iuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5zdGFy
dF90aW1lLnR2X3NlYzsKKwkJCXhzdGNiLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50MzJfdClz
dGNiLT5hc29jLnN0YXJ0X3RpbWUudHZfdXNlYzsKKwkJCXhzdGNiLmRpc2NvbnRpbnVpdHlfdGlt
ZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5kaXNjb250aW51aXR5X3RpbWUudHZfc2Vj
OworCQkJeHN0Y2IuZGlzY29udGludWl0eV90aW1lLnR2X3VzZWMgPSAodWludDMyX3Qpc3RjYi0+
YXNvYy5kaXNjb250aW51aXR5X3RpbWUudHZfdXNlYzsKKwkJCXhzdGNiLnRvdGFsX3NlbmRzID0g
c3RjYi0+dG90YWxfc2VuZHM7CisJCQl4c3RjYi50b3RhbF9yZWN2cyA9IHN0Y2ItPnRvdGFsX3Jl
Y3ZzOworCQkJeHN0Y2IubG9jYWxfdGFnID0gc3RjYi0+YXNvYy5teV92dGFnOworCQkJeHN0Y2Iu
cmVtb3RlX3RhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOworCQkJeHN0Y2IuaW5pdGlhbF90c24g
PSBzdGNiLT5hc29jLmluaXRfc2VxX251bWJlcjsKKwkJCXhzdGNiLmhpZ2hlc3RfdHNuID0gc3Rj
Yi0+YXNvYy5zZW5kaW5nX3NlcSAtIDE7CisJCQl4c3RjYi5jdW11bGF0aXZlX3RzbiA9IHN0Y2It
PmFzb2MubGFzdF9hY2tlZF9zZXE7CisJCQl4c3RjYi5jdW11bGF0aXZlX3Rzbl9hY2sgPSBzdGNi
LT5hc29jLmN1bXVsYXRpdmVfdHNuOworCQkJeHN0Y2IubXR1ID0gc3RjYi0+YXNvYy5zbWFsbGVz
dF9tdHU7CisJCQl4c3RjYi5yZWZjbnQgPSBzdGNiLT5hc29jLnJlZmNudDsKKwkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJZXJyb3IgPSBT
WVNDVExfT1VUKHJlcSwgJnhzdGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX3RjYikpOworCQkJaWYg
KGVycm9yKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9
CisJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJ
ZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBzdGNiLCBy
ZXEpOworCQkJaWYgKGVycm9yKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQlh
dG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJcmV0dXJuIChl
cnJvcik7CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7CisJCQkJeHJhZGRyLmxhc3QgPSAwOworCQkJCXhyYWRkci5hZGRyZXNzID0gbmV0
LT5yby5fbF9hZGRyOworCQkJCXhyYWRkci5hY3RpdmUgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9SRUFDSEFCTEUpID09IFNDVFBfQUREUl9SRUFDSEFCTEUpOworCQkJCXhyYWRkci5j
b25maXJtZWQgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgPT0g
MCk7CisJCQkJeHJhZGRyLmhlYXJ0YmVhdF9lbmFibGVkID0gKChuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfTk9IQikgPT0gMCk7CisJCQkJeHJhZGRyLnBvdGVudGlhbGx5X2ZhaWxlZCA9ICgo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSA9PSBTQ1RQX0FERFJfUEYpOworCQkJCXhy
YWRkci5ydG8gPSBuZXQtPlJUTzsKKwkJCQl4cmFkZHIubWF4X3BhdGhfcnR4ID0gbmV0LT5mYWls
dXJlX3RocmVzaG9sZDsKKwkJCQl4cmFkZHIucnR4ID0gbmV0LT5tYXJrZWRfcmV0cmFuczsKKwkJ
CQl4cmFkZHIuZXJyb3JfY291bnRlciA9IG5ldC0+ZXJyb3JfY291bnQ7CisJCQkJeHJhZGRyLmN3
bmQgPSBuZXQtPmN3bmQ7CisJCQkJeHJhZGRyLmZsaWdodF9zaXplID0gbmV0LT5mbGlnaHRfc2l6
ZTsKKwkJCQl4cmFkZHIubXR1ID0gbmV0LT5tdHU7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwkJCQl4cmFkZHIucnR0ID0gbmV0LT5y
dHQgLyAxMDAwOworCQkJCXhyYWRkci5oZWFydGJlYXRfaW50ZXJ2YWwgPSBuZXQtPmhlYXJ0X2Jl
YXRfZGVsYXk7CisJCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0LT5zc3RocmVzaDsKKwkJCQl4cmFk
ZHIuZW5jYXBzX3BvcnQgPSBuZXQtPnBvcnQ7CisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX1VOQ09ORklS
TUVEOworCQkJCX0gZWxzZSBpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJM
RSkgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0FDVElWRTsKKwkJCQl9IGVsc2UgeworCQkJ
CQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQkJCX0KKyNlbmRpZgorI2Vsc2UKKwkJ
CQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOworCQkJCXhyYWRkci5oZWFydGJlYXRfaW50
ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7CisJCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0
LT5zc3RocmVzaDsKKwkJCQl4cmFkZHIuZW5jYXBzX3BvcnQgPSBuZXQtPnBvcnQ7CisJCQkJaWYg
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJCQl4cmFkZHIu
c3RhdGUgPSBTQ1RQX1VOQ09ORklSTUVEOworCQkJCX0gZWxzZSBpZiAobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0FDVElW
RTsKKwkJCQl9IGVsc2UgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQkJ
CX0KKyNlbmRpZgorCQkJCXhyYWRkci5zdGFydF90aW1lLnR2X3NlYyA9ICh1aW50MzJfdCluZXQt
PnN0YXJ0X3RpbWUudHZfc2VjOworCQkJCXhyYWRkci5zdGFydF90aW1lLnR2X3VzZWMgPSAodWlu
dDMyX3QpbmV0LT5zdGFydF90aW1lLnR2X3VzZWM7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCWVycm9yID0gU1lTQ1RMX09VVChy
ZXEsICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKKwkJCQlpZiAoZXJyb3Ip
IHsKKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCQl9CisJ
CQkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQl9
CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQltZW1z
ZXQoKHZvaWQgKikmeHJhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRyKSk7CisJCQl4
cmFkZHIubGFzdCA9IDE7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9J
TkZPX1JVTkxPQ0soKTsKKwkJCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4cmFkZHIsIHNpemVv
ZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKKwkJCWlmIChlcnJvcikgeworCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJCQlTQ1RQX0lOUF9JTkZP
X1JMT0NLKCk7CisJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQl9CisJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGlucCk7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9JTlBfSU5GT19SVU5M
T0NLKCk7CisJCW1lbXNldCgodm9pZCAqKSZ4c3RjYiwgMCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90
Y2IpKTsKKwkJeHN0Y2IubGFzdCA9IDE7CisJCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4c3Rj
Yiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpKTsKKwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4g
KGVycm9yKTsKKwkJfQorc2tpcDoKKwkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCX0KKwlTQ1RQ
X0lOUF9JTkZPX1JVTkxPQ0soKTsKKworCW1lbXNldCgodm9pZCAqKSZ4aW5wY2IsIDAsIHNpemVv
ZihzdHJ1Y3QgeHNjdHBfaW5wY2IpKTsKKwl4aW5wY2IubGFzdCA9IDE7CisJZXJyb3IgPSBTWVND
VExfT1VUKHJlcSwgJnhpbnBjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9pbnBjYikpOworCXJldHVy
biAoZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3Rw
X3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZyBTWVNDVExfSEFORExFUl9BUkdTCit7CisjcHJh
Z21hIHVudXNlZChhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hh
bmRsZV91ZHBfdHVubmVsaW5nKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisjZW5kaWYKKwlpbnQg
ZXJyb3I7CisJdWludDMyX3Qgb2xkLCBuZXc7CisKKwlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJ
b2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCk7CisJU0NUUF9J
TlBfSU5GT19SVU5MT0NLKCk7CisJbmV3ID0gb2xkOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEw
MDAxMDAKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZuZXRfc3lzY3RsX2hhbmRsZV9pbnQob2lk
cCwgJm5ldywgMCwgcmVxKTsKKyNlbHNlCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRw
LCAmbmV3LCAwLCByZXEpOworI2VuZGlmCisjZWxzZQorCWVycm9yID0gc3lzY3RsX2hhbmRsZV9p
bnQob2lkcCwgJm5ldywgMCwgcmVxKTsKKyNlbmRpZgorCWlmICgoZXJyb3IgPT0gMCkgJiYKKyNp
ZiBkZWZpbmVkIChfX0FQUExFX18pCisJICAgIChyZXEtPm5ld3B0ciAhPSBVU0VSX0FERFJfTlVM
TCkpIHsKKyNlbHNlCisJICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgeworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQlzY3RwX292
ZXJfdWRwX3Jlc3RhcnQoKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisjZWxzZQorI2lm
IChTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4gPT0gMCkKKwkJaWYgKG5ldyA+IFNDVFBD
VExfVURQX1RVTk5FTElOR19QT1JUX01BWCkgeworI2Vsc2UKKwkJaWYgKChuZXcgPCBTQ1RQQ1RM
X1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4pIHx8CisJCSAgICAobmV3ID4gU0NUUENUTF9VRFBfVFVO
TkVMSU5HX1BPUlRfTUFYKSkgeworI2VuZGlmCisJCQllcnJvciA9IEVJTlZBTDsKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwkJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91
ZHBfdHVubmVsaW5nX3BvcnQpID0gbmV3OworCQkJaWYgKG9sZCAhPSAwKSB7CisJCQkJc2N0cF9v
dmVyX3VkcF9zdG9wKCk7CisJCQl9CisJCQlpZiAobmV3ICE9IDApIHsKKwkJCQllcnJvciA9IHNj
dHBfb3Zlcl91ZHBfc3RhcnQoKTsKKwkJCX0KKwkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwor
CQl9CisjZW5kaWYKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKK2ludCBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2Uoc3RydWN0IGlmbmV0ICopOworCitz
dGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdm13YXJlX2ludGVyZmFjZXMgU1lTQ1RMX0hB
TkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMikKKwlpbnQgZXJyb3I7CisJ
dWludDMyX3Qgb2xkLCBuZXc7CisKKwlvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaWdub3Jl
X3Ztd2FyZV9pbnRlcmZhY2VzKTsKKwluZXcgPSBvbGQ7CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxl
X2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworCWlmICgoZXJyb3IgPT0gMCkgJiYgKHJlcS0+bmV3
cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgeworCQlpZiAoKG5ldyA8IFNDVFBDVExfSUdOT1JFX1ZN
V0FSRV9JTlRFUkZBQ0VTX01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQQ1RMX0lHTk9SRV9WTVdB
UkVfSU5URVJGQUNFU19NQVgpKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJ
CWlmICgob2xkID09IDEpICYmIChuZXcgPT0gMCkpIHsKKwkJCQlzY3RwX2FkZF9vcl9kZWxfaW50
ZXJmYWNlcyhzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2UsIDEpOworCQkJfQorCQkJaWYgKChvbGQg
PT0gMCkgJiYgKG5ldyA9PSAxKSkgeworCQkJCXNjdHBfYWRkX29yX2RlbF9pbnRlcmZhY2VzKHNj
dHBfaXNfdm13YXJlX2ludGVyZmFjZSwgMCk7CisJCQl9CisJCQlpZiAob2xkICE9IG5ldykgewor
CQkJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVfdm13YXJlX2ludGVyZmFjZXMpID0gbmV3
OworCQkJfQorCQl9CisJfQorCXJldHVybiAoZXJyb3IpOworfQorI2VuZGlmCisKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9hdXRoIFNZU0NU
TF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFyZzIpCisjZWxzZQorc3Rh
dGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sK
KyNlbmRpZgorCWludCBlcnJvcjsKKwl1aW50MzJfdCBuZXc7CisKKwluZXcgPSBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDAxMDAK
KyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZuZXRfc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5l
dywgMCwgcmVxKTsKKyNlbHNlCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3
LCAwLCByZXEpOworI2VuZGlmCisjZWxzZQorCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lk
cCwgJm5ldywgMCwgcmVxKTsKKyNlbmRpZgorCWlmICgoZXJyb3IgPT0gMCkgJiYKKyNpZiBkZWZp
bmVkIChfX0FQUExFX18pCisJICAgIChyZXEtPm5ld3B0ciAhPSBVU0VSX0FERFJfTlVMTCkpIHsK
KyNlbHNlCisJICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgeworI2VuZGlmCisjaWYgKFNDVFBD
VExfQVVUSF9FTkFCTEVfTUlOID09IDApCisJCWlmICgobmV3ID4gU0NUUENUTF9BVVRIX0VOQUJM
RV9NQVgpIHx8CisJCSAgICAoKG5ldyA9PSAwKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fz
Y29uZl9lbmFibGUpID09IDEpKSkgeworI2Vsc2UKKwkJaWYgKChuZXcgPCBTQ1RQQ1RMX0FVVEhf
RU5BQkxFX01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQQ1RMX0FVVEhfRU5BQkxFX01BWCkgfHwK
KwkJICAgICgobmV3ID09IDApICYmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJs
ZSkgPT0gMSkpKSB7CisjZW5kaWYKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IG5ldzsKKwkJfQorCX0KKwlyZXR1
cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGludAorc2N0
cF9zeXNjdGxfaGFuZGxlX2FzY29uZiBTWVNDVExfSEFORExFUl9BUkdTCit7CisjcHJhZ21hIHVu
dXNlZChhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9h
c2NvbmYoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBlcnJvcjsKKwl1aW50
MzJfdCBuZXc7CisKKwluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSk7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDU2
ICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDEwMAorI2lmZGVmIFZJTUFHRQorCWVycm9yID0g
dm5ldF9zeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworI2Vsc2UKKwllcnJv
ciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CisjZW5kaWYKKyNlbHNl
CisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworI2VuZGlm
CisJaWYgKChlcnJvciA9PSAwKSAmJgorI2lmIGRlZmluZWQgKF9fQVBQTEVfXykKKwkgICAgKHJl
cS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgeworI2Vsc2UKKwkgICAgKHJlcS0+bmV3cHRy
ICE9IE5VTEwpKSB7CisjZW5kaWYKKyNpZiAoU0NUUENUTF9BU0NPTkZfRU5BQkxFX01JTiA9PSAw
KQorCQlpZiAoKG5ldyA+IFNDVFBDVExfQVNDT05GX0VOQUJMRV9NQVgpIHx8CisJCSAgICAoKG5l
dyA9PSAxKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9PSAwKSkpIHsK
KyNlbHNlCisJCWlmICgobmV3IDwgU0NUUENUTF9BU0NPTkZfRU5BQkxFX01JTikgfHwKKwkJICAg
IChuZXcgPiBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYKSB8fAorCQkgICAgKChuZXcgPT0gMSkg
JiYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSkgPT0gMCkpKSB7CisjZW5kaWYK
KwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2FzY29uZl9lbmFibGUpID0gbmV3OworCQl9CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfc3Rh
dHMgU1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQob2lkcCwgYXJnMSwgYXJn
MikKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfc3RhdHMoU1lTQ1RMX0hB
TkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBlcnJvcjsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQor
CXN0cnVjdCBzY3Rwc3RhdCAqc2Fycnk7CisJc3RydWN0IHNjdHBzdGF0IHNiOworCWludCBjcHU7
CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cHN0YXQgc2JfdGVtcDsKKyNlbmRpZgorCisjaWYgZGVmaW5l
ZCAoX19BUFBMRV9fKQorCWlmICgocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpICYmCisj
ZWxzZQorCWlmICgocmVxLT5uZXdwdHIgIT0gTlVMTCkgJiYKKyNlbmRpZgorCSAgICAocmVxLT5u
ZXdsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpKSB7CisJCXJldHVybiAoRUlOVkFMKTsK
Kwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwltZW1zZXQoJnNiX3RlbXAsIDAsIHNpemVv
ZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKKworCWlmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSB7CisJCWVy
cm9yID0gU1lTQ1RMX0lOKHJlcSwgJnNiX3RlbXAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsK
KwkJaWYgKGVycm9yICE9IDApIHsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJfQorI2lmIGRl
ZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQorCW1lbXNldCgmc2Is
IDAsIHNpemVvZihzYikpOworCWZvciAoY3B1ID0gMDsgY3B1IDwgbXBfbWF4aWQ7IGNwdSsrKSB7
CisJCXNhcnJ5ID0gJlNDVFBfQkFTRV9TVEFUU1tjcHVdOworCQlpZiAoc2FycnktPnNjdHBzX2Rp
c2NvbnRpbnVpdHl0aW1lLnR2X3NlYyA+IHNiLnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3Nl
YykgeworCQkJc2Iuc2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfc2VjID0gc2FycnktPnNjdHBz
X2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYzsKKwkJCXNiLnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1l
LnR2X3VzZWMgPSBzYXJyeS0+c2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfdXNlYzsKKwkJfQor
CQlzYi5zY3Rwc19jdXJyZXN0YWIgKz0gc2FycnktPnNjdHBzX2N1cnJlc3RhYjsKKwkJc2Iuc2N0
cHNfYWN0aXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX2FjdGl2ZWVzdGFiOworCQlzYi5zY3Rwc19y
ZXN0YXJ0ZXN0YWIgKz0gc2FycnktPnNjdHBzX3Jlc3RhcnRlc3RhYjsKKwkJc2Iuc2N0cHNfY29s
bGlzaW9uZXN0YWIgKz0gc2FycnktPnNjdHBzX2NvbGxpc2lvbmVzdGFiOworCQlzYi5zY3Rwc19w
YXNzaXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX3Bhc3NpdmVlc3RhYjsKKwkJc2Iuc2N0cHNfYWJv
cnRlZCArPSBzYXJyeS0+c2N0cHNfYWJvcnRlZDsKKwkJc2Iuc2N0cHNfc2h1dGRvd24gKz0gc2Fy
cnktPnNjdHBzX3NodXRkb3duOworCQlzYi5zY3Rwc19vdXRvZnRoZWJsdWUgKz0gc2FycnktPnNj
dHBzX291dG9mdGhlYmx1ZTsKKwkJc2Iuc2N0cHNfY2hlY2tzdW1lcnJvcnMgKz0gc2FycnktPnNj
dHBzX2NoZWNrc3VtZXJyb3JzOworCQlzYi5zY3Rwc19vdXRjb250cm9sY2h1bmtzICs9IHNhcnJ5
LT5zY3Rwc19vdXRjb250cm9sY2h1bmtzOworCQlzYi5zY3Rwc19vdXRvcmRlcmNodW5rcyArPSBz
YXJyeS0+c2N0cHNfb3V0b3JkZXJjaHVua3M7CisJCXNiLnNjdHBzX291dHVub3JkZXJjaHVua3Mg
Kz0gc2FycnktPnNjdHBzX291dHVub3JkZXJjaHVua3M7CisJCXNiLnNjdHBzX2luY29udHJvbGNo
dW5rcyArPSBzYXJyeS0+c2N0cHNfaW5jb250cm9sY2h1bmtzOworCQlzYi5zY3Rwc19pbm9yZGVy
Y2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19pbm9yZGVyY2h1bmtzOworCQlzYi5zY3Rwc19pbnVub3Jk
ZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX2ludW5vcmRlcmNodW5rczsKKwkJc2Iuc2N0cHNfZnJh
Z3Vzcm1zZ3MgKz0gc2FycnktPnNjdHBzX2ZyYWd1c3Jtc2dzOworCQlzYi5zY3Rwc19yZWFzbXVz
cm1zZ3MgKz0gc2FycnktPnNjdHBzX3JlYXNtdXNybXNnczsKKwkJc2Iuc2N0cHNfb3V0cGFja2V0
cyArPSBzYXJyeS0+c2N0cHNfb3V0cGFja2V0czsKKwkJc2Iuc2N0cHNfaW5wYWNrZXRzICs9IHNh
cnJ5LT5zY3Rwc19pbnBhY2tldHM7CisJCXNiLnNjdHBzX3JlY3ZwYWNrZXRzICs9IHNhcnJ5LT5z
Y3Rwc19yZWN2cGFja2V0czsKKwkJc2Iuc2N0cHNfcmVjdmRhdGFncmFtcyArPSBzYXJyeS0+c2N0
cHNfcmVjdmRhdGFncmFtczsKKwkJc2Iuc2N0cHNfcmVjdnBrdHdpdGhkYXRhICs9IHNhcnJ5LT5z
Y3Rwc19yZWN2cGt0d2l0aGRhdGE7CisJCXNiLnNjdHBzX3JlY3ZzYWNrcyArPSBzYXJyeS0+c2N0
cHNfcmVjdnNhY2tzOworCQlzYi5zY3Rwc19yZWN2ZGF0YSArPSBzYXJyeS0+c2N0cHNfcmVjdmRh
dGE7CisJCXNiLnNjdHBzX3JlY3ZkdXBkYXRhICs9IHNhcnJ5LT5zY3Rwc19yZWN2ZHVwZGF0YTsK
KwkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdCArPSBzYXJyeS0+c2N0cHNfcmVjdmhlYXJ0YmVhdDsK
KwkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdGFjayArPSBzYXJyeS0+c2N0cHNfcmVjdmhlYXJ0YmVh
dGFjazsKKwkJc2Iuc2N0cHNfcmVjdmVjbmUgKz0gc2FycnktPnNjdHBzX3JlY3ZlY25lOworCQlz
Yi5zY3Rwc19yZWN2YXV0aCArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGg7CisJCXNiLnNjdHBzX3Jl
Y3ZhdXRobWlzc2luZyArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGhtaXNzaW5nOworCQlzYi5zY3Rw
c19yZWN2aXZhbGhtYWNpZCArPSBzYXJyeS0+c2N0cHNfcmVjdml2YWxobWFjaWQ7CisJCXNiLnNj
dHBzX3JlY3ZpdmFsa2V5aWQgKz0gc2FycnktPnNjdHBzX3JlY3ZpdmFsa2V5aWQ7CisJCXNiLnNj
dHBzX3JlY3ZhdXRoZmFpbGVkICs9IHNhcnJ5LT5zY3Rwc19yZWN2YXV0aGZhaWxlZDsKKwkJc2Iu
c2N0cHNfcmVjdmV4cHJlc3MgKz0gc2FycnktPnNjdHBzX3JlY3ZleHByZXNzOworCQlzYi5zY3Rw
c19yZWN2ZXhwcmVzc20gKz0gc2FycnktPnNjdHBzX3JlY3ZleHByZXNzbTsKKwkJc2Iuc2N0cHNf
cmVjdnN3Y3JjICs9IHNhcnJ5LT5zY3Rwc19yZWN2c3djcmM7CisJCXNiLnNjdHBzX3JlY3Zod2Ny
YyArPSBzYXJyeS0+c2N0cHNfcmVjdmh3Y3JjOworCQlzYi5zY3Rwc19zZW5kcGFja2V0cyArPSBz
YXJyeS0+c2N0cHNfc2VuZHBhY2tldHM7CisJCXNiLnNjdHBzX3NlbmRzYWNrcyArPSBzYXJyeS0+
c2N0cHNfc2VuZHNhY2tzOworCQlzYi5zY3Rwc19zZW5kZGF0YSArPSBzYXJyeS0+c2N0cHNfc2Vu
ZGRhdGE7CisJCXNiLnNjdHBzX3NlbmRyZXRyYW5zZGF0YSArPSBzYXJyeS0+c2N0cHNfc2VuZHJl
dHJhbnNkYXRhOworCQlzYi5zY3Rwc19zZW5kZmFzdHJldHJhbnMgKz0gc2FycnktPnNjdHBzX3Nl
bmRmYXN0cmV0cmFuczsKKwkJc2Iuc2N0cHNfc2VuZG11bHRmYXN0cmV0cmFucyArPSBzYXJyeS0+
c2N0cHNfc2VuZG11bHRmYXN0cmV0cmFuczsKKwkJc2Iuc2N0cHNfc2VuZGhlYXJ0YmVhdCArPSBz
YXJyeS0+c2N0cHNfc2VuZGhlYXJ0YmVhdDsKKwkJc2Iuc2N0cHNfc2VuZGVjbmUgKz0gc2Fycnkt
PnNjdHBzX3NlbmRlY25lOworCQlzYi5zY3Rwc19zZW5kYXV0aCArPSBzYXJyeS0+c2N0cHNfc2Vu
ZGF1dGg7CisJCXNiLnNjdHBzX3NlbmRlcnJvcnMgKz0gc2FycnktPnNjdHBzX3NlbmRlcnJvcnM7
CisJCXNiLnNjdHBzX3NlbmRzd2NyYyArPSBzYXJyeS0+c2N0cHNfc2VuZHN3Y3JjOworCQlzYi5z
Y3Rwc19zZW5kaHdjcmMgKz0gc2FycnktPnNjdHBzX3NlbmRod2NyYzsKKwkJc2Iuc2N0cHNfcGRy
cGZtYm94ICs9IHNhcnJ5LT5zY3Rwc19wZHJwZm1ib3g7CisJCXNiLnNjdHBzX3BkcnBmZWhvcyAr
PSBzYXJyeS0+c2N0cHNfcGRycGZlaG9zOworCQlzYi5zY3Rwc19wZHJwbWJkYSArPSBzYXJyeS0+
c2N0cHNfcGRycG1iZGE7CisJCXNiLnNjdHBzX3BkcnBtYmN0ICs9IHNhcnJ5LT5zY3Rwc19wZHJw
bWJjdDsKKwkJc2Iuc2N0cHNfcGRycGJ3cnB0ICs9IHNhcnJ5LT5zY3Rwc19wZHJwYndycHQ7CisJ
CXNiLnNjdHBzX3BkcnBjcnVwdCArPSBzYXJyeS0+c2N0cHNfcGRycGNydXB0OworCQlzYi5zY3Rw
c19wZHJwbmVkYXQgKz0gc2FycnktPnNjdHBzX3BkcnBuZWRhdDsKKwkJc2Iuc2N0cHNfcGRycHBk
YnJrICs9IHNhcnJ5LT5zY3Rwc19wZHJwcGRicms7CisJCXNiLnNjdHBzX3BkcnB0c25uZiArPSBz
YXJyeS0+c2N0cHNfcGRycHRzbm5mOworCQlzYi5zY3Rwc19wZHJwZG5mbmQgKz0gc2FycnktPnNj
dHBzX3BkcnBkbmZuZDsKKwkJc2Iuc2N0cHNfcGRycGRpd25wICs9IHNhcnJ5LT5zY3Rwc19wZHJw
ZGl3bnA7CisJCXNiLnNjdHBzX3BkcnBkaXpydyArPSBzYXJyeS0+c2N0cHNfcGRycGRpenJ3Owor
CQlzYi5zY3Rwc19wZHJwYmFkZCArPSBzYXJyeS0+c2N0cHNfcGRycGJhZGQ7CisJCXNiLnNjdHBz
X3BkcnBtYXJrICs9IHNhcnJ5LT5zY3Rwc19wZHJwbWFyazsKKwkJc2Iuc2N0cHNfdGltb2l0ZXJh
dG9yICs9IHNhcnJ5LT5zY3Rwc190aW1vaXRlcmF0b3I7CisJCXNiLnNjdHBzX3RpbW9kYXRhICs9
IHNhcnJ5LT5zY3Rwc190aW1vZGF0YTsKKwkJc2Iuc2N0cHNfdGltb3dpbmRvd3Byb2JlICs9IHNh
cnJ5LT5zY3Rwc190aW1vd2luZG93cHJvYmU7CisJCXNiLnNjdHBzX3RpbW9pbml0ICs9IHNhcnJ5
LT5zY3Rwc190aW1vaW5pdDsKKwkJc2Iuc2N0cHNfdGltb3NhY2sgKz0gc2FycnktPnNjdHBzX3Rp
bW9zYWNrOworCQlzYi5zY3Rwc190aW1vc2h1dGRvd24gKz0gc2FycnktPnNjdHBzX3RpbW9zaHV0
ZG93bjsKKwkJc2Iuc2N0cHNfdGltb2hlYXJ0YmVhdCArPSBzYXJyeS0+c2N0cHNfdGltb2hlYXJ0
YmVhdDsKKwkJc2Iuc2N0cHNfdGltb2Nvb2tpZSArPSBzYXJyeS0+c2N0cHNfdGltb2Nvb2tpZTsK
KwkJc2Iuc2N0cHNfdGltb3NlY3JldCArPSBzYXJyeS0+c2N0cHNfdGltb3NlY3JldDsKKwkJc2Iu
c2N0cHNfdGltb3BhdGhtdHUgKz0gc2FycnktPnNjdHBzX3RpbW9wYXRobXR1OworCQlzYi5zY3Rw
c190aW1vc2h1dGRvd25hY2sgKz0gc2FycnktPnNjdHBzX3RpbW9zaHV0ZG93bmFjazsKKwkJc2Iu
c2N0cHNfdGltb3NodXRkb3duZ3VhcmQgKz0gc2FycnktPnNjdHBzX3RpbW9zaHV0ZG93bmd1YXJk
OworCQlzYi5zY3Rwc190aW1vc3RybXJzdCArPSBzYXJyeS0+c2N0cHNfdGltb3N0cm1yc3Q7CisJ
CXNiLnNjdHBzX3RpbW9lYXJseWZyICs9IHNhcnJ5LT5zY3Rwc190aW1vZWFybHlmcjsKKwkJc2Iu
c2N0cHNfdGltb2FzY29uZiArPSBzYXJyeS0+c2N0cHNfdGltb2FzY29uZjsKKwkJc2Iuc2N0cHNf
dGltb2RlbHByaW0gKz0gc2FycnktPnNjdHBzX3RpbW9kZWxwcmltOworCQlzYi5zY3Rwc190aW1v
YXV0b2Nsb3NlICs9IHNhcnJ5LT5zY3Rwc190aW1vYXV0b2Nsb3NlOworCQlzYi5zY3Rwc190aW1v
YXNzb2NraWxsICs9IHNhcnJ5LT5zY3Rwc190aW1vYXNzb2NraWxsOworCQlzYi5zY3Rwc190aW1v
aW5wa2lsbCArPSBzYXJyeS0+c2N0cHNfdGltb2lucGtpbGw7CisJCXNiLnNjdHBzX2hkcm9wcyAr
PSBzYXJyeS0+c2N0cHNfaGRyb3BzOworCQlzYi5zY3Rwc19iYWRzdW0gKz0gc2FycnktPnNjdHBz
X2JhZHN1bTsKKwkJc2Iuc2N0cHNfbm9wb3J0ICs9IHNhcnJ5LT5zY3Rwc19ub3BvcnQ7CisJCXNi
LnNjdHBzX2JhZHZ0YWcgKz0gc2FycnktPnNjdHBzX2JhZHZ0YWc7CisJCXNiLnNjdHBzX2JhZHNp
ZCArPSBzYXJyeS0+c2N0cHNfYmFkc2lkOworCQlzYi5zY3Rwc19ub21lbSArPSBzYXJyeS0+c2N0
cHNfbm9tZW07CisJCXNiLnNjdHBzX2Zhc3RyZXRyYW5zaW5ydHQgKz0gc2FycnktPnNjdHBzX2Zh
c3RyZXRyYW5zaW5ydHQ7CisJCXNiLnNjdHBzX21hcmtlZHJldHJhbnMgKz0gc2FycnktPnNjdHBz
X21hcmtlZHJldHJhbnM7CisJCXNiLnNjdHBzX25hZ2xlc2VudCArPSBzYXJyeS0+c2N0cHNfbmFn
bGVzZW50OworCQlzYi5zY3Rwc19uYWdsZXF1ZXVlZCArPSBzYXJyeS0+c2N0cHNfbmFnbGVxdWV1
ZWQ7CisJCXNiLnNjdHBzX21heGJ1cnN0cXVldWVkICs9IHNhcnJ5LT5zY3Rwc19tYXhidXJzdHF1
ZXVlZDsKKwkJc2Iuc2N0cHNfaWZub21lbXF1ZXVlZCArPSBzYXJyeS0+c2N0cHNfaWZub21lbXF1
ZXVlZDsKKwkJc2Iuc2N0cHNfd2luZG93cHJvYmVkICs9IHNhcnJ5LT5zY3Rwc193aW5kb3dwcm9i
ZWQ7CisJCXNiLnNjdHBzX2xvd2xldmVsZXJyICs9IHNhcnJ5LT5zY3Rwc19sb3dsZXZlbGVycjsK
KwkJc2Iuc2N0cHNfbG93bGV2ZWxlcnJ1c3IgKz0gc2FycnktPnNjdHBzX2xvd2xldmVsZXJydXNy
OworCQlzYi5zY3Rwc19kYXRhZHJvcGNoa2xtdCArPSBzYXJyeS0+c2N0cHNfZGF0YWRyb3BjaGts
bXQ7CisJCXNiLnNjdHBzX2RhdGFkcm9wcnduZCArPSBzYXJyeS0+c2N0cHNfZGF0YWRyb3Byd25k
OworCQlzYi5zY3Rwc19lY25lcmVkdWNlZGN3bmQgKz0gc2FycnktPnNjdHBzX2VjbmVyZWR1Y2Vk
Y3duZDsKKwkJc2Iuc2N0cHNfdnRhZ2V4cHJlc3MgKz0gc2FycnktPnNjdHBzX3Z0YWdleHByZXNz
OworCQlzYi5zY3Rwc192dGFnYm9ndXMgKz0gc2FycnktPnNjdHBzX3Z0YWdib2d1czsKKwkJc2Iu
c2N0cHNfcHJpbWFyeV9yYW5kcnkgKz0gc2FycnktPnNjdHBzX3ByaW1hcnlfcmFuZHJ5OworCQlz
Yi5zY3Rwc19jbXRfcmFuZHJ5ICs9IHNhcnJ5LT5zY3Rwc19jbXRfcmFuZHJ5OworCQlzYi5zY3Rw
c19zbG93cGF0aF9zYWNrICs9IHNhcnJ5LT5zY3Rwc19zbG93cGF0aF9zYWNrOworCQlzYi5zY3Rw
c193dV9zYWNrc19zZW50ICs9IHNhcnJ5LT5zY3Rwc193dV9zYWNrc19zZW50OworCQlzYi5zY3Rw
c19zZW5kc193aXRoX2ZsYWdzICs9IHNhcnJ5LT5zY3Rwc19zZW5kc193aXRoX2ZsYWdzOworCQlz
Yi5zY3Rwc19zZW5kc193aXRoX3Vub3JkICs9IHNhcnJ5LT5zY3Rwc19zZW5kc193aXRoX3Vub3Jk
OworCQlzYi5zY3Rwc19zZW5kc193aXRoX2VvZiArPSBzYXJyeS0+c2N0cHNfc2VuZHNfd2l0aF9l
b2Y7CisJCXNiLnNjdHBzX3NlbmRzX3dpdGhfYWJvcnQgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dp
dGhfYWJvcnQ7CisJCXNiLnNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzICs9IHNhcnJ5LT5zY3Rw
c19wcm90b2NvbF9kcmFpbl9jYWxsczsKKwkJc2Iuc2N0cHNfcHJvdG9jb2xfZHJhaW5zX2RvbmUg
Kz0gc2FycnktPnNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lOworCQlzYi5zY3Rwc19yZWFkX3Bl
ZWtzICs9IHNhcnJ5LT5zY3Rwc19yZWFkX3BlZWtzOworCQlzYi5zY3Rwc19jYWNoZWRfY2hrICs9
IHNhcnJ5LT5zY3Rwc19jYWNoZWRfY2hrOworCQlzYi5zY3Rwc19jYWNoZWRfc3RybW9xICs9IHNh
cnJ5LT5zY3Rwc19jYWNoZWRfc3RybW9xOworCQlzYi5zY3Rwc19sZWZ0X2FiYW5kb24gKz0gc2Fy
cnktPnNjdHBzX2xlZnRfYWJhbmRvbjsKKwkJc2Iuc2N0cHNfc2VuZF9idXJzdF9hdm9pZCArPSBz
YXJyeS0+c2N0cHNfc2VuZF9idXJzdF9hdm9pZDsKKwkJc2Iuc2N0cHNfc2VuZF9jd25kX2F2b2lk
ICs9IHNhcnJ5LT5zY3Rwc19zZW5kX2N3bmRfYXZvaWQ7CisJCXNiLnNjdHBzX2Z3ZHRzbl9tYXBf
b3ZlciArPSBzYXJyeS0+c2N0cHNfZndkdHNuX21hcF9vdmVyOworCQlpZiAocmVxLT5uZXdwdHIg
IT0gTlVMTCkgeworCQkJbWVtY3B5KHNhcnJ5LCAmc2JfdGVtcCwgc2l6ZW9mKHN0cnVjdCBzY3Rw
c3RhdCkpOworCQl9CisJfQorCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZzYiwgc2l6ZW9mKHN0
cnVjdCBzY3Rwc3RhdCkpOworI2Vsc2UKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmU0NUUF9C
QVNFX1NUQVRTLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisJaWYgKGVycm9yICE9IDApIHsK
KwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSB7CisJCW1l
bWNweSgmU0NUUF9CQVNFX1NUQVRTLCAmc2JfdGVtcCwgc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkp
OworCX0KKyNlbmRpZgorI2Vsc2UKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmU0NUUF9CQVNF
X1NUQVRTLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisjZW5kaWYKKwlyZXR1cm4gKGVycm9y
KTsKK30KKworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisjaWYgZGVmaW5lZChf
X0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nIFNZU0NU
TF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFyZzIsIG9pZHApCisjZWxz
ZQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZyhTWVNDVExfSEFORExF
Ul9BUkdTKQoreworI2VuZGlmCisJaW50IGVycm9yOworCisjaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOworI2Vsc2UKKwllcnJvciA9IFNZU0NUTF9PVVQocmVx
LCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsK
KyNlbmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitz
dGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nX2NsZWFyIFNZU0NUTF9IQU5E
TEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFyZzIsIHJlcSwgb2lkcCkKKyNlbHNl
CitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nX2NsZWFyKFNZU0NUTF9I
QU5ETEVSX0FSR1MpCit7CisjZW5kaWYKKwlpbnQgZXJyb3IgPSAwOworI2lmIGRlZmluZWQoX19X
aW5kb3dzX18pCisJaW50IHZhbHVlID0gMDsKKworCWlmIChyZXEtPm5ld19kYXRhID09IE5VTEwp
IHsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgJnZhbHVl
LCBzaXplb2YoaW50KSk7CisJaWYgKGVycm9yID09IDAgJiYgdmFsdWUgIT0gMCAmJiBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nKSAhPSBOVUxMKSB7CisJCW1lbXNldChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nKSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOworCX0KKyNlbHNlCisKKwlt
ZW1zZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
bG9nKSk7CisjZW5kaWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwNTYgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPCAxMDAwMTAwCisjaWZkZWYgVklNQUdFCisjZGVmaW5lIFNDVFBfVUlOVF9TWVNDVEwobmFt
ZSwgdmFyX25hbWUsIHByZWZpeCkJCQlcCisJc3RhdGljIGludAkJCQkJCQlcCisJc2N0cF9zeXNj
dGxfaGFuZGxlXyMjbWliX25hbWUoU1lTQ1RMX0hBTkRMRVJfQVJHUykJCVwKKwl7CQkJCQkJCQlc
CisJCWludCBlcnJvcjsJCQkJCQlcCisJCXVpbnQzMl90IG5ldzsJCQkJCQlcCisJCQkJCQkJCQlc
CisJCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpOwkJCVwKKwkJZXJyb3IgPSB2bmV0
X3N5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CVwKKwkJaWYgKChlcnJvciA9
PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gTlVMTCkpIHsJCVwKKwkJCWlmICgobmV3IDwgcHJlZml4
IyNfTUlOKSB8fAkJCVwKKwkJCSAgICAobmV3ID4gcHJlZml4IyNfTUFYKSkgewkJCVwKKwkJCQll
cnJvciA9IEVJTlZBTDsJCQkJXAorCQkJfSBlbHNlIHsJCQkJCVwKKwkJCQlTQ1RQX0JBU0VfU1lT
Q1RMKHZhcl9uYW1lKSA9IG5ldzsJXAorCQkJfQkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldHVy
biAoZXJyb3IpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJU1lTQ1RMX1BST0MoX25ldF9pbmV0X3Nj
dHAsIE9JRF9BVVRPLCBtaWJfbmFtZSwJCQlcCisJICAgICAgICAgICAgICAgICBDVExUWVBFX1VJ
TlR8Q1RMRkxBR19SVywgTlVMTCwgMCwJCVwKKwkgICAgICAgICAgICAgICAgIHNjdHBfc3lzY3Rs
X2hhbmRsZV8jI21pYl9uYW1lLCAiVUkiLCBwcmVmaXgjI19ERVNDKTsKKyNlbHNlCisjZGVmaW5l
IFNDVFBfVUlOVF9TWVNDVEwobWliX25hbWUsIHZhcl9uYW1lLCBwcmVmaXgpCQkJXAorCXN0YXRp
YyBpbnQJCQkJCQkJXAorCXNjdHBfc3lzY3RsX2hhbmRsZV8jI21pYl9uYW1lKFNZU0NUTF9IQU5E
TEVSX0FSR1MpCQlcCisJewkJCQkJCQkJXAorCQlpbnQgZXJyb3I7CQkJCQkJXAorCQl1aW50MzJf
dCBuZXc7CQkJCQkJXAorCQkJCQkJCQkJXAorCQluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9u
YW1lKTsJCQlcCisJCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVx
KTsJCVwKKwkJaWYgKChlcnJvciA9PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gTlVMTCkpIHsJCVwK
KwkJCWlmICgobmV3IDwgcHJlZml4IyNfTUlOKSB8fAkJCVwKKwkJCSAgICAobmV3ID4gcHJlZml4
IyNfTUFYKSkgewkJCVwKKwkJCQllcnJvciA9IEVJTlZBTDsJCQkJXAorCQkJfSBlbHNlIHsJCQkJ
CVwKKwkJCQlTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKSA9IG5ldzsJXAorCQkJfQkJCQkJCVwK
KwkJfQkJCQkJCQlcCisJCXJldHVybiAoZXJyb3IpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJU1lT
Q1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBtaWJfbmFtZSwJCQlcCisJICAgICAg
ICAgICAgICAgICBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsIE5VTEwsIDAs
CVwKKwkgICAgICAgICAgICAgICAgIHNjdHBfc3lzY3RsX2hhbmRsZV8jI21pYl9uYW1lLCAiVUki
LCBwcmVmaXgjI19ERVNDKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgU0NUUF9VSU5UX1NZU0NU
TChtaWJfbmFtZSwgdmFyX25hbWUsIHByZWZpeCkJCQlcCisJc3RhdGljIGludAkJCQkJCQlcCisJ
c2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUoU1lTQ1RMX0hBTkRMRVJfQVJHUykJCVwKKwl7
CQkJCQkJCQlcCisJCWludCBlcnJvcjsJCQkJCQlcCisJCXVpbnQzMl90IG5ldzsJCQkJCQlcCisJ
CQkJCQkJCQlcCisJCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpOwkJCVwKKwkJZXJy
b3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwkJXAorCQlpZiAoKGVy
cm9yID09IDApICYmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewkJXAorCQkJaWYgKChuZXcgPCBw
cmVmaXgjI19NSU4pIHx8CQkJXAorCQkJICAgIChuZXcgPiBwcmVmaXgjI19NQVgpKSB7CQkJXAor
CQkJCWVycm9yID0gRUlOVkFMOwkJCQlcCisJCQl9IGVsc2UgewkJCQkJXAorCQkJCVNDVFBfQkFT
RV9TWVNDVEwodmFyX25hbWUpID0gbmV3OwlcCisJCQl9CQkJCQkJXAorCQl9CQkJCQkJCVwKKwkJ
cmV0dXJuIChlcnJvcik7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlTWVNDVExfUFJPQyhfbmV0X2lu
ZXRfc2N0cCwgT0lEX0FVVE8sIG1pYl9uYW1lLAkJCVwKKwkgICAgICAgICAgICAgICAgIENUTEZM
QUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywgTlVMTCwgMCwJXAorCSAgICAgICAgICAg
ICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJVSSIsIHByZWZpeCMjX0RFU0Mp
OworI2VuZGlmCisjZWxzZQorI2RlZmluZSBTQ1RQX1VJTlRfU1lTQ1RMKG1pYl9uYW1lLCB2YXJf
bmFtZSwgcHJlZml4KQkJCVwKKwlzdGF0aWMgaW50CQkJCQkJCVwKKwlzY3RwX3N5c2N0bF9oYW5k
bGVfIyNtaWJfbmFtZShzdHJ1Y3Qgc3lzY3RsX29pZCAqb2lkcCwJCVwKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZvaWQgKmFyZzEgX19hdHRyaWJ1dGVfXygodW51c2VkKSksCVwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcyIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAlc
CisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzY3RsX3JlcSAqcmVxKQkJXAor
CXsJCQkJCQkJCVwKKwkJaW50IGVycm9yOwkJCQkJCVwKKwkJdWludDMyX3QgbmV3OwkJCQkJCVwK
KwkJCQkJCQkJCVwKKwkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAorCQll
cnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CQlcCisJCWlmICgo
ZXJyb3IgPT0gMCkgJiYgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewlcCisJCQlp
ZiAoKG5ldyA8IHByZWZpeCMjX01JTikgfHwJCQlcCisJCQkgICAgKG5ldyA+IHByZWZpeCMjX01B
WCkpIHsJCQlcCisJCQkJZXJyb3IgPSBFSU5WQUw7CQkJCVwKKwkJCX0gZWxzZSB7CQkJCQlcCisJ
CQkJU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSkgPSBuZXc7CVwKKwkJCX0JCQkJCQlcCisJCX0J
CQkJCQkJXAorCQlyZXR1cm4gKGVycm9yKTsJCQkJCQlcCisJfQkJCQkJCQkJXAorCVNZU0NUTF9Q
Uk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgbWliX25hbWUsCQkJXAorCSAgICAgICAgICAg
IENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgTlVMTCwgMCwJCQlcCisJICAgICAgICAgICAgc2N0
cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJJIiwgcHJlZml4IyNfREVTQyk7CisjZGVmaW5l
IENUTFRZUEVfVUlOVCBDVExUWVBFX0lOVAorI2RlZmluZSBDVExGTEFHX1ZORVQgMAorI2VuZGlm
CisKKy8qCisgKiBzeXNjdGwgZGVmaW5pdGlvbnMKKyAqLworCitTQ1RQX1VJTlRfU1lTQ1RMKHNl
bmRzcGFjZSwgc2N0cF9zZW5kc3BhY2UsIFNDVFBDVExfTUFYREdSQU0pCitTQ1RQX1VJTlRfU1lT
Q1RMKHJlY3ZzcGFjZSwgc2N0cF9yZWN2c3BhY2UsIFNDVFBDVExfUkVDVlNQQUNFKQorU0NUUF9V
SU5UX1NZU0NUTChhdXRvX2FzY29uZiwgc2N0cF9hdXRvX2FzY29uZiwgU0NUUENUTF9BVVRPQVND
T05GKQorU0NUUF9VSU5UX1NZU0NUTChlY25fZW5hYmxlLCBzY3RwX2Vjbl9lbmFibGUsIFNDVFBD
VExfRUNOX0VOQUJMRSkKK1NDVFBfVUlOVF9TWVNDVEwocHJfZW5hYmxlLCBzY3RwX3ByX2VuYWJs
ZSwgU0NUUENUTF9QUl9FTkFCTEUpCitTWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FV
VE8sIGF1dGhfZW5hYmxlLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfYXV0aCwgIklVIiwgU0NUUENU
TF9BVVRIX0VOQUJMRV9ERVNDKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVU
TywgYXNjb25mX2VuYWJsZSwgQ1RMRkxBR19WTkVUfENUTFRZUEVfVUlOVHxDVExGTEFHX1JXLAor
ICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiwgIklVIiwgU0NU
UENUTF9BU0NPTkZfRU5BQkxFX0RFU0MpOworU0NUUF9VSU5UX1NZU0NUTChyZWNvbmZpZ19lbmFi
bGUsIHNjdHBfcmVjb25maWdfZW5hYmxlLCBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRSkKK1NDVFBf
VUlOVF9TWVNDVEwobnJzYWNrX2VuYWJsZSwgc2N0cF9ucnNhY2tfZW5hYmxlLCBTQ1RQQ1RMX05S
U0FDS19FTkFCTEUpCitTQ1RQX1VJTlRfU1lTQ1RMKHBrdGRyb3BfZW5hYmxlLCBzY3RwX3BrdGRy
b3BfZW5hYmxlLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFKQorI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorU0NUUF9VSU5UX1NZU0NUTChsb29wYmFja19ub2NzdW0sIHNjdHBfbm9fY3N1bV9vbl9sb29w
YmFjaywgU0NUUENUTF9MT09QQkFDS19OT0NTVU0pCisjZW5kaWYKK1NDVFBfVUlOVF9TWVNDVEwo
cGVlcl9jaGtvaCwgc2N0cF9wZWVyX2NodW5rX29oLCBTQ1RQQ1RMX1BFRVJfQ0hLT0gpCitTQ1RQ
X1VJTlRfU1lTQ1RMKG1heGJ1cnN0LCBzY3RwX21heF9idXJzdF9kZWZhdWx0LCBTQ1RQQ1RMX01B
WEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTChmcl9tYXhidXJzdCwgc2N0cF9mcl9tYXhfYnVyc3Rf
ZGVmYXVsdCwgU0NUUENUTF9GUk1BWEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTChtYXhjaHVua3Ms
IHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSwgU0NUUENUTF9NQVhDSFVOS1MpCitTQ1RQX1VJTlRf
U1lTQ1RMKHRjYmhhc2hzaXplLCBzY3RwX2hhc2h0YmxzaXplLCBTQ1RQQ1RMX1RDQkhBU0hTSVpF
KQorU0NUUF9VSU5UX1NZU0NUTChwY2JoYXNoc2l6ZSwgc2N0cF9wY2J0YmxzaXplLCBTQ1RQQ1RM
X1BDQkhBU0hTSVpFKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fc3BsaXRfcG9pbnQsIHNjdHBfbWlu
X3NwbGl0X3BvaW50LCBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVCkKK1NDVFBfVUlOVF9TWVNDVEwo
Y2h1bmtzY2FsZSwgc2N0cF9jaHVua3NjYWxlLCBTQ1RQQ1RMX0NIVU5LU0NBTEUpCitTQ1RQX1VJ
TlRfU1lTQ1RMKGRlbGF5ZWRfc2Fja190aW1lLCBzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1
bHQsIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUUpCitTQ1RQX1VJTlRfU1lTQ1RMKHNhY2tfZnJl
cSwgc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCwgU0NUUENUTF9TQUNLX0ZSRVEpCitTQ1RQX1VJTlRf
U1lTQ1RMKHN5c19yZXNvdXJjZSwgc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0LCBTQ1RQQ1RM
X1NZU19SRVNPVVJDRSkKK1NDVFBfVUlOVF9TWVNDVEwoYXNvY19yZXNvdXJjZSwgc2N0cF9hc29j
X2ZyZWVfcmVzY19saW1pdCwgU0NUUENUTF9BU09DX1JFU09VUkNFKQorU0NUUF9VSU5UX1NZU0NU
TChoZWFydGJlYXRfaW50ZXJ2YWwsIHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQsIFND
VFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMKQorU0NUUF9VSU5UX1NZU0NUTChwbXR1X3JhaXNlX3Rp
bWUsIHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQsIFNDVFBDVExfUE1UVV9SQUlTRV9USU1F
KQorU0NUUF9VSU5UX1NZU0NUTChzaHV0ZG93bl9ndWFyZF90aW1lLCBzY3RwX3NodXRkb3duX2d1
YXJkX3RpbWVfZGVmYXVsdCwgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FKQorU0NUUF9VSU5U
X1NZU0NUTChzZWNyZXRfbGlmZXRpbWUsIHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQsIFND
VFBDVExfU0VDUkVUX0xJRkVUSU1FKQorU0NUUF9VSU5UX1NZU0NUTChydG9fbWF4LCBzY3RwX3J0
b19tYXhfZGVmYXVsdCwgU0NUUENUTF9SVE9fTUFYKQorU0NUUF9VSU5UX1NZU0NUTChydG9fbWlu
LCBzY3RwX3J0b19taW5fZGVmYXVsdCwgU0NUUENUTF9SVE9fTUlOKQorU0NUUF9VSU5UX1NZU0NU
TChydG9faW5pdGlhbCwgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0LCBTQ1RQQ1RMX1JUT19JTklU
SUFMKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0b19tYXgsIHNjdHBfaW5pdF9ydG9fbWF4X2Rl
ZmF1bHQsIFNDVFBDVExfSU5JVF9SVE9fTUFYKQorU0NUUF9VSU5UX1NZU0NUTCh2YWxpZF9jb29r
aWVfbGlmZSwgc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0LCBTQ1RQQ1RMX1ZBTElEX0NP
T0tJRV9MSUZFKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0eF9tYXgsIHNjdHBfaW5pdF9ydHhf
bWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVFhfTUFYKQorU0NUUF9VSU5UX1NZU0NUTChhc3Nv
Y19ydHhfbWF4LCBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCwgU0NUUENUTF9BU1NPQ19SVFhf
TUFYKQorU0NUUF9VSU5UX1NZU0NUTChwYXRoX3J0eF9tYXgsIHNjdHBfcGF0aF9ydHhfbWF4X2Rl
ZmF1bHQsIFNDVFBDVExfUEFUSF9SVFhfTUFYKQorU0NUUF9VSU5UX1NZU0NUTChwYXRoX3BmX3Ro
cmVzaG9sZCwgc2N0cF9wYXRoX3BmX3RocmVzaG9sZCwgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9M
RCkKK1NDVFBfVUlOVF9TWVNDVEwoYWRkX21vcmVfb25fb3V0cHV0LCBzY3RwX2FkZF9tb3JlX3Ro
cmVzaG9sZCwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVQpCitTQ1RQX1VJTlRfU1lTQ1RMKGlu
Y29taW5nX3N0cmVhbXMsIHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0LCBTQ1RQQ1RM
X0lOQ09NSU5HX1NUUkVBTVMpCitTQ1RQX1VJTlRfU1lTQ1RMKG91dGdvaW5nX3N0cmVhbXMsIHNj
dHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0LCBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVMp
CitTQ1RQX1VJTlRfU1lTQ1RMKGNtdF9vbl9vZmYsIHNjdHBfY210X29uX29mZiwgU0NUUENUTF9D
TVRfT05fT0ZGKQorU0NUUF9VSU5UX1NZU0NUTChjbXRfdXNlX2RhYywgc2N0cF9jbXRfdXNlX2Rh
YywgU0NUUENUTF9DTVRfVVNFX0RBQykKK1NDVFBfVUlOVF9TWVNDVEwoY3duZF9tYXhidXJzdCwg
c2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCwgU0NUUENUTF9DV05EX01BWEJVUlNUKQorU0NU
UF9VSU5UX1NZU0NUTChuYXRfZnJpZW5kbHksIHNjdHBfbmF0X2ZyaWVuZGx5LCBTQ1RQQ1RMX05B
VF9GUklFTkRMWSkKK1NDVFBfVUlOVF9TWVNDVEwoYWJjX2xfdmFyLCBzY3RwX0wyX2FiY192YXJp
YWJsZSwgU0NUUENUTF9BQkNfTF9WQVIpCitTQ1RQX1VJTlRfU1lTQ1RMKG1heF9jaGFpbmVkX21i
dWZzLCBzY3RwX21idWZfdGhyZXNob2xkX2NvdW50LCBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZT
KQorU0NUUF9VSU5UX1NZU0NUTChkb19zY3RwX2RyYWluLCBzY3RwX2RvX2RyYWluLCBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU4pCitTQ1RQX1VJTlRfU1lTQ1RMKGhiX21heF9idXJzdCwgc2N0cF9oYl9t
YXhidXJzdCwgU0NUUENUTF9IQl9NQVhfQlVSU1QpCitTQ1RQX1VJTlRfU1lTQ1RMKGFib3J0X2F0
X2xpbWl0LCBzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0LCBTQ1RQQ1RMX0FCT1JU
X0FUX0xJTUlUKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fcmVzaWR1YWwsIHNjdHBfbWluX3Jlc2lk
dWFsLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTCkKK1NDVFBfVUlOVF9TWVNDVEwobWF4X3JldHJhbl9j
aHVuaywgc2N0cF9tYXhfcmV0cmFuX2NodW5rLCBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTkspCitT
Q1RQX1VJTlRfU1lTQ1RMKGxvZ19sZXZlbCwgc2N0cF9sb2dnaW5nX2xldmVsLCBTQ1RQQ1RMX0xP
R0dJTkdfTEVWRUwpCitTQ1RQX1VJTlRfU1lTQ1RMKGRlZmF1bHRfY2NfbW9kdWxlLCBzY3RwX2Rl
ZmF1bHRfY2NfbW9kdWxlLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFKQorU0NUUF9VSU5UX1NZ
U0NUTChkZWZhdWx0X3NzX21vZHVsZSwgc2N0cF9kZWZhdWx0X3NzX21vZHVsZSwgU0NUUENUTF9E
RUZBVUxUX1NTX01PRFVMRSkKK1NDVFBfVUlOVF9TWVNDVEwoZGVmYXVsdF9mcmFnX2ludGVybGVh
dmUsIHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUsIFNDVFBDVExfREVGQVVMVF9GUkFHX0lO
VEVSTEVBVkUpCitTQ1RQX1VJTlRfU1lTQ1RMKG1vYmlsaXR5X2Jhc2UsIHNjdHBfbW9iaWxpdHlf
YmFzZSwgU0NUUENUTF9NT0JJTElUWV9CQVNFKQorU0NUUF9VSU5UX1NZU0NUTChtb2JpbGl0eV9m
YXN0aGFuZG9mZiwgc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZiwgU0NUUENUTF9NT0JJTElUWV9G
QVNUSEFORE9GRikKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorU1lTQ1RMX1BS
T0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBsb2csIENUTEZMQUdfVk5FVHxDVExUWVBFX1NU
UlVDVHxDVExGTEFHX1JELAorICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X3RyYWNlX2xvZywgIlMsc2N0cGxvZyIsICJTQ1RQIGxvZ2dpbmcgKHN0cnVjdCBzY3RwX2xvZyki
KTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgY2xlYXJfdHJhY2UsIENU
TEZMQUdfVk5FVHxDVExUWVBFX1VJTlQgfCBDVExGTEFHX1JXLAorICAgICAgICAgICAgTlVMTCwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZ19jbGVhciwgIklVIiwgIkNsZWFyIFNDVFAg
TG9nZ2luZyBidWZmZXIiKTsKKyNlbmRpZgorU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9J
RF9BVVRPLCB1ZHBfdHVubmVsaW5nX3BvcnQsIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RM
RkxBR19SVywKKyAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV91ZHBfdHVu
bmVsaW5nLCAiSVUiLCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDKTsKK1NDVFBfVUlO
VF9TWVNDVEwoZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHksIHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRp
YXRlbHksIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEUpCitTQ1RQX1VJTlRfU1lTQ1RM
KG5hdF9mcmllbmRseV9pbml0LCBzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5LCBTQ1RQ
Q1RMX05BVF9GUklFTkRMWV9JTklUUykKK1NDVFBfVUlOVF9TWVNDVEwodnRhZ190aW1lX3dhaXQs
IHNjdHBfdnRhZ190aW1lX3dhaXQsIFNDVFBDVExfVElNRV9XQUlUKQorU0NUUF9VSU5UX1NZU0NU
TChidWZmZXJfc3BsaXR0aW5nLCBzY3RwX2J1ZmZlcl9zcGxpdHRpbmcsIFNDVFBDVExfQlVGRkVS
X1NQTElUVElORykKK1NDVFBfVUlOVF9TWVNDVEwoaW5pdGlhbF9jd25kLCBzY3RwX2luaXRpYWxf
Y3duZCwgU0NUUENUTF9JTklUSUFMX0NXTkQpCitTQ1RQX1VJTlRfU1lTQ1RMKHJ0dHZhcl9idywg
c2N0cF9ydHR2YXJfYncsIFNDVFBDVExfUlRUVkFSX0JXKQorU0NUUF9VSU5UX1NZU0NUTChydHR2
YXJfcnR0LCBzY3RwX3J0dHZhcl9ydHQsIFNDVFBDVExfUlRUVkFSX1JUVCkKK1NDVFBfVUlOVF9T
WVNDVEwocnR0dmFyX2VxcmV0LCBzY3RwX3J0dHZhcl9lcXJldCwgU0NUUENUTF9SVFRWQVJfRVFS
RVQpCitTQ1RQX1VJTlRfU1lTQ1RMKHJ0dHZhcl9zdGVhZHlfc3RlcCwgc2N0cF9zdGVhZHlfc3Rl
cCwgU0NUUENUTF9SVFRWQVJfU1RFQURZUykKK1NDVFBfVUlOVF9TWVNDVEwodXNlX2RjY2NlY24s
IHNjdHBfdXNlX2RjY2NfZWNuLCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOKQorU0NUUF9VSU5UX1NZ
U0NUTChibGFja2hvbGUsIHNjdHBfYmxhY2tob2xlLCBTQ1RQQ1RMX0JMQUNLSE9MRSkKK1NDVFBf
VUlOVF9TWVNDVEwoZGlhZ19pbmZvX2NvZGUsIHNjdHBfZGlhZ19pbmZvX2NvZGUsIFNDVFBDVExf
RElBR19JTkZPX0NPREUpCisjaWZkZWYgU0NUUF9ERUJVRworU0NUUF9VSU5UX1NZU0NUTChkZWJ1
Zywgc2N0cF9kZWJ1Z19vbiwgU0NUUENUTF9ERUJVRykKKyNlbmRpZgorI2lmIGRlZmluZWQoX19B
UFBMRV9fKQorU0NUUF9VSU5UX1NZU0NUTChtYWluX3RpbWVyLCBzY3RwX21haW5fdGltZXIsIFND
VFBDVExfTUFJTl9USU1FUikKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywg
aWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzLCBDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywKKyAgICAg
ICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV92bXdhcmVfaW50ZXJmYWNlcywgIklV
IiwgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfREVTQyk7CitTQ1RQX1VJTlRfU1lT
Q1RMKGFkZHJfd2F0Y2hkb2dfbGltaXQsIHNjdHBfYWRkcl93YXRjaGRvZ19saW1pdCwgU0NUUENU
TF9BRERSX1dBVENIRE9HX0xJTUlUKQorU0NUUF9VSU5UX1NZU0NUTCh2dGFnX3dhdGNoZG9nX2xp
bWl0LCBzY3RwX3Z0YWdfd2F0Y2hkb2dfbGltaXQsIFNDVFBDVExfVlRBR19XQVRDSERPR19MSU1J
VCkKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQorU0NUUF9VSU5UX1NZU0NUTChvdXRwdXRfdW5sb2NrZWQsIHNjdHBfb3V0cHV0
X3VubG9ja2VkLCBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRCkKKyNlbmRpZgorU1lTQ1RMX1BST0Mo
X25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBzdGF0cywgQ1RMRkxBR19WTkVUfENUTFRZUEVfU1RS
VUNUfENUTEZMQUdfUlcsCisgICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVf
c3RhdHMsICJTLHNjdHBzdGF0IiwgIlNDVFAgc3RhdGlzdGljcyAoc3RydWN0IHNjdHBfc3RhdCki
KTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgYXNzb2NsaXN0LCBDVExG
TEFHX1ZORVR8Q1RMVFlQRV9PUEFRVUV8Q1RMRkxBR19SRCwKKyAgICAgICAgICAgIE5VTEwsIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QsICJTLHhhc3NvYyIsICJMaXN0IG9mIGFjdGl2
ZSBTQ1RQIGFzc29jaWF0aW9ucyIpOworCisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorCisj
ZGVmaW5lIFJBTkdFQ0hLKHZhciwgbWluLCBtYXgpIFwKKwlpZiAoKHZhcikgPCAobWluKSkgeyAo
dmFyKSA9IChtaW4pOyB9IFwKKwllbHNlIGlmICgodmFyKSA+IChtYXgpKSB7ICh2YXIpID0gKG1h
eCk7IH0KKworc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2ludChTWVNDVExfSEFORExF
Ul9BUkdTKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lk
cCwgb2lkcC0+b2lkX2FyZzEsIG9pZHAtPm9pZF9hcmcyLCByZXEpOworCWlmIChlcnJvciA9PSAw
KSB7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQQ1RM
X01BWERHUkFNX01JTiwgU0NUUENUTF9NQVhER1JBTV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSwgU0NUUENUTF9SRUNWU1BBQ0VfTUlOLCBTQ1RQQ1RM
X1JFQ1ZTUEFDRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19h
c2NvbmYpLCBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUlOLCBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUFYKTsK
KwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNjb25mKSwgU0NUUENUTF9B
VVRPQVNDT05GX01JTiwgU0NUUENUTF9BVVRPQVNDT05GX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKSwgU0NUUENUTF9FQ05fRU5BQkxFX01JTiwgU0NU
UENUTF9FQ05fRU5BQkxFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9w
cl9lbmFibGUpLCBTQ1RQQ1RMX1BSX0VOQUJMRV9NSU4sIFNDVFBDVExfUFJfRU5BQkxFX01BWCk7
CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWNvbmZpZ19lbmFibGUpLCBTQ1RQ
Q1RMX1JFQ09ORklHX0VOQUJMRV9NSU4sIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucnNhY2tfZW5hYmxlKSwgU0NUUENUTF9O
UlNBQ0tfRU5BQkxFX01JTiwgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01BWCk7CisJCVJBTkdFQ0hL
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wa3Rkcm9wX2VuYWJsZSksIFNDVFBDVExfUEtURFJPUF9F
TkFCTEVfTUlOLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSwgU0NUUENUTF9MT09QQkFDS19O
T0NTVU1fTUlOLCBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCksIFNDVFBDVExfUEVFUl9DSEtPSF9NSU4s
IFNDVFBDVExfUEVFUl9DSEtPSF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX01BWEJVUlNUX01JTiwgU0NUUENUTF9NQVhC
VVJTVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0
X2RlZmF1bHQpLCBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUlOLCBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUFY
KTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUp
LCBTQ1RQQ1RMX01BWENIVU5LU19NSU4sIFNDVFBDVExfTUFYQ0hVTktTX01BWCk7CisJCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksIFNDVFBDVExfVENCSEFTSFNJ
WkVfTUlOLCBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9wY2J0YmxzaXplKSwgU0NUUENUTF9QQ0JIQVNIU0laRV9NSU4sIFNDVFBDVExf
UENCSEFTSFNJWkVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21pbl9z
cGxpdF9wb2ludCksIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01JTiwgU0NUUENUTF9NSU5fU1BM
SVRfUE9JTlRfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2Nh
bGUpLCBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUlOLCBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUFYKTsKKwkJ
UkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQp
LCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX01JTiwgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElN
RV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2Fja19mcmVxX2RlZmF1
bHQpLCBTQ1RQQ1RMX1NBQ0tfRlJFUV9NSU4sIFNDVFBDVExfU0FDS19GUkVRX01BWCk7CisJCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSwgU0NU
UENUTF9TWVNfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX1NZU19SRVNPVVJDRV9NQVgpOworCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpLCBTQ1RQQ1RM
X0FTT0NfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUFYKTsKKwkJUkFOR0VD
SEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KSwgU0NU
UENUTF9IRUFSVEJFQVRfSU5URVJWQUxfTUlOLCBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9yYWlzZV90aW1lX2Rl
ZmF1bHQpLCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9NSU4sIFNDVFBDVExfUE1UVV9SQUlTRV9U
SU1FX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9ndWFy
ZF90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUlOLCBTQ1RQQ1RM
X1NIVVRET1dOX0dVQVJEX1RJTUVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0KSwgU0NUUENUTF9TRUNSRVRfTElGRVRJTUVfTUlO
LCBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcnRvX21heF9kZWZhdWx0KSwgU0NUUENUTF9SVE9fTUFYX01JTiwgU0NUUENUTF9S
VE9fTUFYX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWluX2Rl
ZmF1bHQpLCBTQ1RQQ1RMX1JUT19NSU5fTUlOLCBTQ1RQQ1RMX1JUT19NSU5fTUFYKTsKKwkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpLCBTQ1RQQ1RM
X1JUT19JTklUSUFMX01JTiwgU0NUUENUTF9SVE9fSU5JVElBTF9NQVgpOworCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpLCBTQ1RQQ1RMX0lOSVRf
UlRPX01BWF9NSU4sIFNDVFBDVExfSU5JVF9SVE9fTUFYX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KSwgU0NUUENUTF9WQUxJ
RF9DT09LSUVfTElGRV9NSU4sIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfTUFYKTsKKwkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0KSwgU0NUUENU
TF9JTklUX1JUWF9NQVhfTUlOLCBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9NQVgpOworCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KSwgU0NUUENUTF9B
U1NPQ19SVFhfTUFYX01JTiwgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01BWCk7CisJCVJBTkdFQ0hL
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCksIFNDVFBDVExfUEFU
SF9SVFhfTUFYX01JTiwgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUFYKTsKKwkJUkFOR0VDSEsoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKSwgU0NUUENUTF9QQVRIX1BGX1RI
UkVTSE9MRF9NSU4sIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfTUFYKTsKKwkJUkFOR0VDSEso
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCksIFNDVFBDVExfQUREX01P
UkVfT05fT1VUUFVUX01JTiwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfTUFYKTsKKwkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCks
IFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NSU4sIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFt
c19kZWZhdWx0KSwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01JTiwgU0NUUENUTF9PVVRHT0lO
R19TVFJFQU1TX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25f
b2ZmKSwgU0NUUENUTF9DTVRfT05fT0ZGX01JTiwgU0NUUENUTF9DTVRfT05fT0ZGX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNlX2RhYyksIFNDVFBDVExfQ01U
X1VTRV9EQUNfTUlOLCBTQ1RQQ1RMX0NNVF9VU0VfREFDX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCksIFNDVFBDVExfQ1dORF9N
QVhCVVJTVF9NSU4sIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwgU0NUUENUTF9OQVRfRlJJRU5ETFlfTUlO
LCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfTDJfYWJjX3ZhcmlhYmxlKSwgU0NUUENUTF9BQkNfTF9WQVJfTUlOLCBTQ1RQQ1RMX0FC
Q19MX1ZBUl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90aHJl
c2hvbGRfY291bnQpLCBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX01JTiwgU0NUUENUTF9NQVhf
Q0hBSU5FRF9NQlVGU19NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9f
ZHJhaW4pLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fTUlOLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5f
TUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSwgU0NU
UENUTF9IQl9NQVhfQlVSU1RfTUlOLCBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NQVgpOworCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQp
LCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01JTiwgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9NQVgp
OworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3Jlc2lkdWFsKSwgU0NUUENU
TF9NSU5fUkVTSURVQUxfTUlOLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9NQVgpOworCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuayksIFNDVFBDVExfTUFYX1JF
VFJBTl9DSFVOS19NSU4sIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NQVgpOworCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCksIFNDVFBDVExfTE9HR0lOR19M
RVZFTF9NSU4sIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9E
VUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUpLCBTQ1RQQ1RMX0RFRkFVTFRfU1Nf
TU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9NQVgpOworCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpLCBTQ1RQQ1RMX0RF
RkFVTFRfRlJBR19JTlRFUkxFQVZFX01JTiwgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFW
RV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdnRhZ190aW1lX3dhaXQp
LCBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4sIFNDVFBDVExfVElNRV9XQUlUX01BWCk7CisJCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0aW5nKSwgU0NUUENUTF9CVUZG
RVJfU1BMSVRUSU5HX01JTiwgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01BWCk7CisJCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpLCBTQ1RQQ1RMX0lOSVRJQUxf
Q1dORF9NSU4sIFNDVFBDVExfSU5JVElBTF9DV05EX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpLCBTQ1RQQ1RMX1JUVFZBUl9CV19NSU4sIFNDVFBDVExf
UlRUVkFSX0JXX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJf
cnR0KSwgU0NUUENUTF9SVFRWQVJfUlRUX01JTiwgU0NUUENUTF9SVFRWQVJfUlRUX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQpLCBTQ1RQQ1RMX1JU
VFZBUl9FUVJFVF9NSU4sIFNDVFBDVExfUlRUVkFSX0VRUkVUX01BWCk7CisJCVJBTkdFQ0hLKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zdGVhZHlfc3RlcCksIFNDVFBDVExfUlRUVkFSX1NURUFEWVNf
TUlOLCBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF91c2VfZGNjY19lY24pLCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01JTiwgU0NU
UENUTF9SVFRWQVJfRENDQ0VDTl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbW9iaWxpdHlfYmFzZSksIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NSU4sIFNDVFBDVExfTU9C
SUxJVFlfQkFTRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxp
dHlfZmFzdGhhbmRvZmYpLCBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX01JTiwgU0NUUENU
TF9NT0JJTElUWV9GQVNUSEFORE9GRl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpLCBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlf
RU5BQkxFX01JTiwgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9NQVgpOworCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpLCBT
Q1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4sIFNDVFBDVExfTkFUX0ZSSUVORExZX0lOSVRT
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpLCBTQ1RQ
Q1RMX0JMQUNLSE9MRV9NSU4sIFNDVFBDVExfQkxBQ0tIT0xFX01BWCk7CisJCVJBTkdFQ0hLKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksIFNDVFBDVExfRElBR19JTkZPX0NP
REVfTUlOLCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01BWCk7CisjaWZkZWYgU0NUUF9ERUJVRwor
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pLCBTQ1RQQ1RMX0RFQlVH
X01JTiwgU0NUUENUTF9ERUJVR19NQVgpOworI2VuZGlmCisJfQorCXJldHVybiAoZXJyb3IpOwor
fQorCit2b2lkCitzeXNjdGxfc2V0dXBfc2N0cCh2b2lkKQoreworCXN5c2N0bF9hZGRfb2lkKCZz
eXNjdGxfb2lkX3RvcCwgInNlbmRzcGFjZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAg
ICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFjZSksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTUFYREdSQU1fREVTQyk7CisKKwlzeXNjdGxfYWRk
X29pZCgmc3lzY3RsX29pZF90b3AsICJyZWN2c3BhY2UiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY3ZzcGFjZSksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUkVDVlNQQUNFX0RFU0MpOworCisJc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXV0b19hc2NvbmYiLCBDVExUWVBFX0lOVHxD
VExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29u
ZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQVVUT0FTQ09ORl9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImVjbl9lbmFibGUiLCBD
VExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9lY25fZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9F
Q05fRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicHJf
ZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAg
U0NUUENUTF9QUl9FTkFCTEVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJhdXRoX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2F1dGgsCisJICAgIFNDVFBDVExfQVVUSF9FTkFCTEVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29p
ZCgmc3lzY3RsX29pZF90b3AsICJhc2NvbmZfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9hc2NvbmYsCisJICAgIFNDVFBDVExfQVNDT05GX0VOQUJMRV9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJlY29uZmlnX2VuYWJs
ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3JlY29uZmlnX2VuYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAg
IFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAibnJzYWNrX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAg
ICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19lbmFibGUpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQyk7CisKKwlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwa3Rkcm9wX2VuYWJsZSIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BrdGRy
b3BfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9QS1RE
Uk9QX0VOQUJMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImxv
b3BiYWNrX25vY3N1bSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NU
UF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBlZXJfY2hrb2giLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29o
KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9QRUVSX0NIS09IX0RF
U0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4YnVyc3QiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9t
YXhfYnVyc3RfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBD
VExfTUFYQlVSU1RfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJm
cl9tYXhidXJzdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFu
ZGxlX2ludCwKKwkgICAgU0NUUENUTF9GUk1BWEJVUlNUX0RFU0MpOworCisJc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4Y2h1bmtzIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTUFYQ0hVTktTX0RFU0Mp
OworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidGNiaGFzaHNpemUiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9o
YXNodGJsc2l6ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfVENC
SEFTSFNJWkVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwY2Jo
YXNoc2l6ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3BjYnRibHNpemUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAg
ICBTQ1RQQ1RMX1BDQkhBU0hTSVpFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAibWluX3NwbGl0X3BvaW50IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAg
ICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3NwbGl0X3BvaW50KSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVTQyk7CisK
KwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjaHVua3NjYWxlIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtz
Y2FsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQ0hVTktTQ0FM
RV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRlbGF5ZWRfc2Fj
a190aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVfREVTQyk7CisKKwlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzYWNrX2ZyZXEiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zYWNrX2ZyZXFfZGVm
YXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfU0FDS19GUkVR
X0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAic3lzX3Jlc291cmNl
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQs
CisJICAgIFNDVFBDVExfU1lTX1JFU09VUkNFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAiYXNvY19yZXNvdXJjZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0KSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9BU09DX1JFU09VUkNFX0RF
U0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaGVhcnRiZWF0X2ludGVy
dmFsIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAorCSAgICBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBtdHVfcmFpc2VfdGltZSIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BtdHVfcmFp
c2VfdGltZV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9QTVRVX1JBSVNFX1RJTUVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJzaHV0ZG93bl9ndWFyZF90aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAg
ICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0
KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9TSFVURE9XTl9HVUFS
RF9USU1FX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAic2VjcmV0
X2xpZmV0aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0b19tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFH
X1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWF4X2RlZmF1bHQp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1JUT19NQVhfREVTQyk7
CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJydG9fbWluIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21p
bl9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVE9f
TUlOX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnRvX2luaXRp
YWwiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
KwkgICAgU0NUUENUTF9SVE9fSU5JVElBTF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgImluaXRfcnRvX21heCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAg
ICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0KSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9JTklUX1JUT19NQVhfREVTQyk7
CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ2YWxpZF9jb29raWVfbGlmZSIs
IENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50
LAorCSAgICBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFU0MpOworCisJc3lzY3RsX2FkZF9v
aWQoJnN5c2N0bF9vaWRfdG9wLCAiaW5pdF9ydHhfbWF4IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1
bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0lOSVRfUlRYX01B
WF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFzc29jX3J0eF9t
YXgiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50
LAorCSAgICBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgm
c3lzY3RsX29pZF90b3AsICJwYXRoX3J0eF9tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAor
ICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUEFUSF9SVFhfTUFYX0RF
U0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicGF0aF9wZl90aHJlc2hv
bGQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3BhdGhfcGZfdGhyZXNob2xkKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9QQVRIX1BGX1RIUkVTSE9MRF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxf
b2lkX3RvcCwgImFkZF9tb3JlX29uX291dHB1dCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVU
X0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaW5jb21pbmdfc3Ry
ZWFtcyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm91dGdvaW5nX3N0cmVhbXMiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9vdXRn
b2luZ19zdHJlYW1zX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBT
Q1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJjbXRfb25fb2ZmIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZiksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfQ01UX09OX09GRl9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgImNtdF91c2VfZGFjIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpLCAwLCBz
Y3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0NNVF9VU0VfREFDX0RFU0MpOwor
CisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY3duZF9tYXhidXJzdCIsIENUTFRZ
UEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Vz
ZV9jd25kX2Jhc2VkX21heGJ1cnN0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAg
U0NUUENUTF9DV05EX01BWEJVUlNUX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAibmF0X2ZyaWVuZGx5IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwgMCwgc2N0cF9zeXNjdGxf
aGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVTQyk7CisKKwlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhYmNfbF92YXIiLCBDVExUWVBFX0lOVHxDVExGTEFH
X1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERVND
KTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1heF9jaGFpbmVkX21idWZz
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAor
CSAgICBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQo
JnN5c2N0bF9vaWRfdG9wLCAiZG9fc2N0cF9kcmFpbiIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcs
CisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RvX2RyYWluKSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9ET19TQ1RQX0RSQUlOX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaGJfbWF4X2J1cnN0IiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJfbWF4
YnVyc3QpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0hCX01BWF9C
VVJTVF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFib3J0X2F0
X2xpbWl0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpLCAwLCBzY3RwX3N5c2N0
bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFU0MpOworCisJc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWluX3Jlc2lkdWFsIiwgQ1RMVFlQRV9JTlR8
Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3Jlc2lk
dWFsKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NSU5fUkVTSURV
QUxfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtYXhfcmV0cmFu
X2NodW5rIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuayksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQs
CisJICAgIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgImxvZ19sZXZlbCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfREVTQyk7CisK
KwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkZWZhdWx0X2NjX21vZHVsZSIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2RlZmF1bHRfY2NfbW9kdWxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9ERUZBVUxUX0NDX01PRFVMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxf
b2lkX3RvcCwgImRlZmF1bHRfc3NfbW9kdWxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAg
ICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUpLCAwLCBz
Y3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxFX0RF
U0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGVmYXVsdF9mcmFnX2lu
dGVybGVhdmUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfREVTQyk7CisK
KwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtb2JpbGl0eV9iYXNlIiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9i
aWxpdHlfYmFzZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTU9C
SUxJVFlfQkFTRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1v
YmlsaXR5X2Zhc3RoYW5kb2ZmIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFU0Mp
OworCisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzeXNjdGxfYWRkX29pZCgm
c3lzY3RsX29pZF90b3AsICJzY3RwX2xvZyIsIENUTFRZUEVfU1RSVUNUfENUTEZMQUdfUkQsCisJ
ICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSwg
TlVMTCwKKwkgICAgIlNDVFAgbG9nZ2luZyAoc3RydWN0IHNjdHBfbG9nKSIpOworCisJc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY2xlYXJfdHJhY2UiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1dSLAorCSAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nX2NsZWFy
LAorCSAgICAiQ2xlYXIgU0NUUCBMb2dnaW5nIGJ1ZmZlciIpOworI2VuZGlmCisKKwlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ1ZHBfdHVubmVsaW5nX3BvcnQiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdf
cG9ydCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV91ZHBfdHVubmVsaW5nLAorCSAgICBTQ1RQQ1RM
X1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgImVuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
KyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRl
bHkpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1NBQ0tfSU1NRURJ
QVRFTFlfRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
bmF0X2ZyaWVuZGx5X2luaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSksIDAsIHNj
dHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTkFUX0ZSSUVORExZX0RFU0MpOwor
CisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidnRhZ190aW1lX3dhaXQiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF92
dGFnX3RpbWVfd2FpdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExf
VElNRV9XQUlUX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYnVm
ZmVyX3NwbGl0dGluZyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAorCSAgICBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfREVTQyk7CisKKwlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJpbml0aWFsX2N3bmQiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9idyIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3J0dHZhcl9idyksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUlRU
VkFSX0JXX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnR0dmFy
X3J0dCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3J0dHZhcl9ydHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBT
Q1RQQ1RMX1JUVFZBUl9SVFRfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJydHR2YXJfZXFyZXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAorCSAgICBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9zdGVhZHlfc3RlcCIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVw
KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVFRWQVJfU1RFQURZ
U19ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInVzZV9kY2NjZWNu
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfdXNlX2RjY2NfZWNuKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9SVFRWQVJfRENDQ0VDTl9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgImJsYWNraG9sZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCisgICAgICAgICAgICBTQ1RQQ1RMX0JMQUNLSE9MRV9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgImRpYWdfaW5mb19jb2RlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxB
R19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorICAgICAgICAgICAgU0NUUENUTF9ESUFHX0lO
Rk9fQ09ERV9ERVNDKTsKKworI2lmZGVmIFNDVFBfREVCVUcKKwlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJkZWJ1ZyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisJICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAor
CSAgICBTQ1RQQ1RMX0RFQlVHX0RFU0MpOworI2VuZGlmCisKKwlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJzdGF0cyIsIENUTFRZUEVfU1RSVUNUfENUTEZMQUdfUlcsCisJICAgICZT
Q1RQX0JBU0VfU1RBVFMsIHNpemVvZihTQ1RQX0JBU0VfU1RBVFMpLCBOVUxMLAorCSAgICAiU0NU
UCBzdGF0aXN0aWNzIChzdHJ1Y3Qgc2N0cF9zdGF0KSIpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAiYXNzb2NsaXN0IiwgQ1RMVFlQRV9TVFJVQ1R8Q1RMRkxBR19SRCwKKwkg
ICAgTlVMTCwgMCwgc2N0cF9hc3NvY2xpc3QsCisJICAgICJMaXN0IG9mIGFjdGl2ZSBTQ1RQIGFz
c29jaWF0aW9ucyIpOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfc3lzY3RsLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uNGYxMGZmNjc2OTE1NWNlNTRlNWY4N2M0YWYxMjdiZjJlNjg0NDU3ZSAxMDA3NTUK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmgKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmgKQEAgLTAsMCArMSw2MjUgQEAK
Ky8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENv
cHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVs
IFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVp
dGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0Rf
XworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9u
ZXRpbmV0L3NjdHBfc3lzY3RsLmggMjk5NTQzIDIwMTYtMDUtMTIgMTY6MzQ6NTlaIHR1ZXhlbiAk
Iik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXworI2RlZmluZSBf
TkVUSU5FVF9TQ1RQX1NZU0NUTF9IXworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorCitzdHJ1Y3Qgc2N0cF9zeXNjdGwg
eworCXVpbnQzMl90IHNjdHBfc2VuZHNwYWNlOworCXVpbnQzMl90IHNjdHBfcmVjdnNwYWNlOwor
CXVpbnQzMl90IHNjdHBfYXV0b19hc2NvbmY7CisJdWludDMyX3Qgc2N0cF9tdWx0aXBsZV9hc2Nv
bmZzOworCXVpbnQzMl90IHNjdHBfZWNuX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX3ByX2VuYWJs
ZTsKKwl1aW50MzJfdCBzY3RwX2F1dGhfZW5hYmxlOworCXVpbnQzMl90IHNjdHBfYXNjb25mX2Vu
YWJsZTsKKwl1aW50MzJfdCBzY3RwX3JlY29uZmlnX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX25y
c2Fja19lbmFibGU7CisJdWludDMyX3Qgc2N0cF9wa3Rkcm9wX2VuYWJsZTsKKwl1aW50MzJfdCBz
Y3RwX2ZyX21heF9idXJzdF9kZWZhdWx0OworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwKQorCXVpbnQzMl90IHNjdHBfbm9fY3N1bV9vbl9s
b29wYmFjazsKKyNlbmRpZgorCXVpbnQzMl90IHNjdHBfcGVlcl9jaHVua19vaDsKKwl1aW50MzJf
dCBzY3RwX21heF9idXJzdF9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfbWF4X2NodW5rc19vbl9x
dWV1ZTsKKwl1aW50MzJfdCBzY3RwX2hhc2h0YmxzaXplOworCXVpbnQzMl90IHNjdHBfcGNidGJs
c2l6ZTsKKwl1aW50MzJfdCBzY3RwX21pbl9zcGxpdF9wb2ludDsKKwl1aW50MzJfdCBzY3RwX2No
dW5rc2NhbGU7CisJdWludDMyX3Qgc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0OworCXVp
bnQzMl90IHNjdHBfc2Fja19mcmVxX2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9zeXN0ZW1fZnJl
ZV9yZXNjX2xpbWl0OworCXVpbnQzMl90IHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQ7CisJdWlu
dDMyX3Qgc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdDsKKwl1aW50MzJfdCBzY3RwX3Bt
dHVfcmFpc2VfdGltZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2h1dGRvd25fZ3VhcmRfdGlt
ZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQ7CisJdWlu
dDMyX3Qgc2N0cF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9fbWluX2RlZmF1
bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBf
aW5pdF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF92YWxpZF9jb29raWVfbGlmZV9k
ZWZhdWx0OworCXVpbnQzMl90IHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qg
c2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9wYXRoX3J0eF9tYXhf
ZGVmYXVsdDsKKwl1aW50MzJfdCBzY3RwX3BhdGhfcGZfdGhyZXNob2xkOworCXVpbnQzMl90IHNj
dHBfYWRkX21vcmVfdGhyZXNob2xkOworCXVpbnQzMl90IHNjdHBfbnJfaW5jb21pbmdfc3RyZWFt
c19kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0Owor
CXVpbnQzMl90IHNjdHBfY210X29uX29mZjsKKwl1aW50MzJfdCBzY3RwX2NtdF91c2VfZGFjOwor
CXVpbnQzMl90IHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3Q7CisJdWludDMyX3Qgc2N0cF9u
YXRfZnJpZW5kbHk7CisJdWludDMyX3Qgc2N0cF9MMl9hYmNfdmFyaWFibGU7CisJdWludDMyX3Qg
c2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudDsKKwl1aW50MzJfdCBzY3RwX2RvX2RyYWluOworCXVp
bnQzMl90IHNjdHBfaGJfbWF4YnVyc3Q7CisJdWludDMyX3Qgc2N0cF9hYm9ydF9pZl9vbmVfMl9v
bmVfaGl0c19saW1pdDsKKwl1aW50MzJfdCBzY3RwX21pbl9yZXNpZHVhbDsKKwl1aW50MzJfdCBz
Y3RwX21heF9yZXRyYW5fY2h1bms7CisJdWludDMyX3Qgc2N0cF9sb2dnaW5nX2xldmVsOworCS8q
IEpSUyAtIFZhcmlhYmxlIGZvciBkZWZhdWx0IGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgKi8K
Kwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCS8qIFJTIC0gVmFyaWFibGUgZm9y
IGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlICovCisJdWludDMyX3Qgc2N0cF9kZWZh
dWx0X3NzX21vZHVsZTsKKwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlOwor
CXVpbnQzMl90IHNjdHBfbW9iaWxpdHlfYmFzZTsKKwl1aW50MzJfdCBzY3RwX21vYmlsaXR5X2Zh
c3RoYW5kb2ZmOworCXVpbnQzMl90IHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHk7CisJ
dWludDMyX3Qgc2N0cF9ydHR2YXJfYnc7CisJdWludDMyX3Qgc2N0cF9ydHR2YXJfcnR0OworCXVp
bnQzMl90IHNjdHBfcnR0dmFyX2VxcmV0OworCXVpbnQzMl90IHNjdHBfc3RlYWR5X3N0ZXA7CisJ
dWludDMyX3Qgc2N0cF91c2VfZGNjY19lY247CisJdWludDMyX3Qgc2N0cF9kaWFnX2luZm9fY29k
ZTsKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lmIGRlZmluZWQoX19XaW5k
b3dzX18pCisJc3RydWN0IHNjdHBfbG9nICpzY3RwX2xvZzsKKyNlbHNlCisJc3RydWN0IHNjdHBf
bG9nIHNjdHBfbG9nOworI2VuZGlmCisjZW5kaWYKKwl1aW50MzJfdCBzY3RwX3VkcF90dW5uZWxp
bmdfcG9ydDsKKwl1aW50MzJfdCBzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5OworCXVpbnQz
Ml90IHNjdHBfdnRhZ190aW1lX3dhaXQ7CisJdWludDMyX3Qgc2N0cF9idWZmZXJfc3BsaXR0aW5n
OworCXVpbnQzMl90IHNjdHBfaW5pdGlhbF9jd25kOworCXVpbnQzMl90IHNjdHBfYmxhY2tob2xl
OworI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKKwl1aW50MzJfdCBzY3RwX2RlYnVnX29uOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJdWludDMyX3Qgc2N0cF9pZ25vcmVfdm13YXJl
X2ludGVyZmFjZXM7CisJdWludDMyX3Qgc2N0cF9tYWluX3RpbWVyOworCXVpbnQzMl90IHNjdHBf
YWRkcl93YXRjaGRvZ19saW1pdDsKKwl1aW50MzJfdCBzY3RwX3Z0YWdfd2F0Y2hkb2dfbGltaXQ7
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwl1aW50MzJfdCBzY3RwX291dHB1dF91bmxvY2tlZDsKKyNlbmRpZgorfTsKKwor
LyoKKyAqIGxpbWl0cyBmb3IgdGhlIHN5c2N0bCB2YXJpYWJsZXMKKyAqLworLyogbWF4ZGdyYW06
IE1heGltdW0gb3V0Z29pbmcgU0NUUCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBTQ1RQQ1RMX01B
WERHUkFNX0RFU0MJCSJNYXhpbXVtIG91dGdvaW5nIFNDVFAgYnVmZmVyIHNpemUiCisjZGVmaW5l
IFNDVFBDVExfTUFYREdSQU1fTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fTUFYCQkw
eEZGRkZGRkZGCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBTQ1RQQ1RMX01B
WERHUkFNX0RFRkFVTFQJU0JfTUFYCisjZWxzZQorI2RlZmluZSBTQ1RQQ1RMX01BWERHUkFNX0RF
RkFVTFQJMjYyMTQ0CS8qIDI1NmsgKi8KKyNlbmRpZgorCisvKiByZWN2c3BhY2U6IE1heGltdW0g
aW5jb21pbmcgU0NUUCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBTQ1RQQ1RMX1JFQ1ZTUEFDRV9E
RVNDCQkiTWF4aW11bSBpbmNvbWluZyBTQ1RQIGJ1ZmZlciBzaXplIgorI2RlZmluZSBTQ1RQQ1RM
X1JFQ1ZTUEFDRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9SRUNWU1BBQ0VfTUFYCQkweEZGRkZG
RkZGCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBTQ1RQQ1RMX1JFQ1ZTUEFD
RV9ERUZBVUxUCVNCX1JBVworI2Vsc2UKKyNkZWZpbmUgU0NUUENUTF9SRUNWU1BBQ0VfREVGQVVM
VAkyNjIxNDQJLyogMjU2ayAqLworI2VuZGlmCisKKy8qIGF1dG9hc2NvbmY6IEVuYWJsZSBTQ1RQ
IEF1dG8tQVNDT05GICovCisjZGVmaW5lIFNDVFBDVExfQVVUT0FTQ09ORl9ERVNDCQkiRW5hYmxl
IFNDVFAgQXV0by1BU0NPTkYiCisjZGVmaW5lIFNDVFBDVExfQVVUT0FTQ09ORl9NSU4JCTAKKyNk
ZWZpbmUgU0NUUENUTF9BVVRPQVNDT05GX01BWAkJMQorI2RlZmluZSBTQ1RQQ1RMX0FVVE9BU0NP
TkZfREVGQVVMVAkxCisKKy8qIGF1dG9hc2NvbmY6IEVuYWJsZSBTQ1RQIEF1dG8tQVNDT05GICov
CisjZGVmaW5lIFNDVFBDVExfTVVMVElQTEVBU0NPTkZTX0RFU0MJIkVuYWJsZSBTQ1RQIE11bGlw
bGUtQVNDT05GcyIKKyNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfTUlOCTAKKyNkZWZp
bmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9NVUxUSVBM
RUFTQ09ORlNfREVGQVVMVAlTQ1RQX0RFRkFVTFRfTVVMVElQTEVfQVNDT05GUworCisvKiBlY25f
ZW5hYmxlOiBFbmFibGUgU0NUUCBFQ04gKi8KKyNkZWZpbmUgU0NUUENUTF9FQ05fRU5BQkxFX0RF
U0MJCSJFbmFibGUgU0NUUCBFQ04iCisjZGVmaW5lIFNDVFBDVExfRUNOX0VOQUJMRV9NSU4JCTAK
KyNkZWZpbmUgU0NUUENUTF9FQ05fRU5BQkxFX01BWAkJMQorI2RlZmluZSBTQ1RQQ1RMX0VDTl9F
TkFCTEVfREVGQVVMVAkxCisKKy8qIHByX2VuYWJsZTogRW5hYmxlIFBSLVNDVFAgKi8KKyNkZWZp
bmUgU0NUUENUTF9QUl9FTkFCTEVfREVTQwkJIkVuYWJsZSBQUi1TQ1RQIgorI2RlZmluZSBTQ1RQ
Q1RMX1BSX0VOQUJMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9QUl9FTkFCTEVfTUFYCQkxCisj
ZGVmaW5lIFNDVFBDVExfUFJfRU5BQkxFX0RFRkFVTFQJMQorCisvKiBhdXRoX2VuYWJsZTogRW5h
YmxlIFNDVFAgQVVUSCBmdW5jdGlvbiAqLworI2RlZmluZSBTQ1RQQ1RMX0FVVEhfRU5BQkxFX0RF
U0MJIkVuYWJsZSBTQ1RQIEFVVEggZnVuY3Rpb24iCisjZGVmaW5lIFNDVFBDVExfQVVUSF9FTkFC
TEVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQVVUSF9FTkFCTEVfTUFYCQkxCisjZGVmaW5lIFND
VFBDVExfQVVUSF9FTkFCTEVfREVGQVVMVAkxCisKKy8qIGFzY29uZl9lbmFibGU6IEVuYWJsZSBT
Q1RQIEFTQ09ORiAqLworI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfREVTQwkiRW5hYmxl
IFNDVFAgQVNDT05GIgorI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUlOCTAKKyNkZWZp
bmUgU0NUUENUTF9BU0NPTkZfRU5BQkxFX01BWAkxCisjZGVmaW5lIFNDVFBDVExfQVNDT05GX0VO
QUJMRV9ERUZBVUxUCTEKKworLyogcmVjb25maWdfZW5hYmxlOiBFbmFibGUgU0NUUCBSRS1DT05G
SUcgKi8KKyNkZWZpbmUgU0NUUENUTF9SRUNPTkZJR19FTkFCTEVfREVTQwkiRW5hYmxlIFNDVFAg
UkUtQ09ORklHIgorI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NSU4JMAorI2RlZmlu
ZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklH
X0VOQUJMRV9ERUZBVUxUCTEKKworLyogbnJzYWNrX2VuYWJsZTogRW5hYmxlIE5SX1NBQ0sgKi8K
KyNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFU0MJIkVuYWJsZSBTQ1RQIE5SLVNBQ0si
CisjZGVmaW5lIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX05S
U0FDS19FTkFCTEVfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFRkFVTFQJ
MAorCisvKiBwa3Rkcm9wX2VuYWJsZTogRW5hYmxlIFNDVFAgUGFja2V0IERyb3AgUmVwb3J0cyAq
LworI2RlZmluZSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX0RFU0MJIkVuYWJsZSBTQ1RQIFBLVERS
T1AiCisjZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfTUlOCTAKKyNkZWZpbmUgU0NUUENU
TF9QS1REUk9QX0VOQUJMRV9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX0RF
RkFVTFQJMAorCisvKiBsb29wYmFja19ub2NzdW06IEVuYWJsZSBOTyBDc3VtIG9uIHBhY2tldHMg
c2VudCBvbiBsb29wYmFjayAqLworI2RlZmluZSBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9ERVND
CSJFbmFibGUgTk8gQ3N1bSBvbiBwYWNrZXRzIHNlbnQgb24gbG9vcGJhY2siCisjZGVmaW5lIFND
VFBDVExfTE9PUEJBQ0tfTk9DU1VNX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTE9PUEJBQ0tfTk9D
U1VNX01BWAkxCisjZGVmaW5lIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNX0RFRkFVTFQJMQorCisv
KiBwZWVyX2Noa29oOiBBbW91bnQgdG8gZGViaXQgcGVlcnMgcnduZCBwZXIgY2h1bmsgc2VudCAq
LworI2RlZmluZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVTQwkJIkFtb3VudCB0byBkZWJpdCBwZWVy
cyByd25kIHBlciBjaHVuayBzZW50IgorI2RlZmluZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfTUlOCQkw
CisjZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NU
UENUTF9QRUVSX0NIS09IX0RFRkFVTFQJMjU2CisKKy8qIG1heGJ1cnN0OiBEZWZhdWx0IG1heCBi
dXJzdCBmb3Igc2N0cCBlbmRwb2ludHMgKi8KKyNkZWZpbmUgU0NUUENUTF9NQVhCVVJTVF9ERVND
CQkiRGVmYXVsdCBtYXggYnVyc3QgZm9yIHNjdHAgZW5kcG9pbnRzIgorI2RlZmluZSBTQ1RQQ1RM
X01BWEJVUlNUX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNUX01BWAkJMHhGRkZGRkZG
RgorI2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNUX0RFRkFVTFQJU0NUUF9ERUZfTUFYX0JVUlNUCisK
Ky8qIGZyX21heGJ1cnN0OiBEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2ludHMgd2hl
biBmYXN0IHJldHJhbnNtaXR0aW5nICovCisjZGVmaW5lIFNDVFBDVExfRlJNQVhCVVJTVF9ERVND
CQkiRGVmYXVsdCBmciBtYXggYnVyc3QgZm9yIHNjdHAgZW5kcG9pbnRzIgorI2RlZmluZSBTQ1RQ
Q1RMX0ZSTUFYQlVSU1RfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfRlJNQVhCVVJTVF9NQVgJCTB4
RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9GUk1BWEJVUlNUX0RFRkFVTFQJU0NUUF9ERUZfRlJN
QVhfQlVSU1QKKworCisvKiBtYXhjaHVua3M6IERlZmF1bHQgbWF4IGNodW5rcyBvbiBxdWV1ZSBw
ZXIgYXNvYyAqLworI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19ERVNDCQkiRGVmYXVsdCBtYXgg
Y2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jIgorI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19NSU4J
CTAKKyNkZWZpbmUgU0NUUENUTF9NQVhDSFVOS1NfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFND
VFBDVExfTUFYQ0hVTktTX0RFRkFVTFQJU0NUUF9BU09DX01BWF9DSFVOS1NfT05fUVVFVUUKKwor
LyogdGNiaGFzaHNpemU6IFR1bmFibGUgZm9yIEhhc2ggdGFibGUgc2l6ZXMgKi8KKyNkZWZpbmUg
U0NUUENUTF9UQ0JIQVNIU0laRV9ERVNDCSJUdW5hYmxlIGZvciBUQ0IgaGFzaCB0YWJsZSBzaXpl
cyIKKyNkZWZpbmUgU0NUUENUTF9UQ0JIQVNIU0laRV9NSU4JCTEKKyNkZWZpbmUgU0NUUENUTF9U
Q0JIQVNIU0laRV9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9UQ0JIQVNIU0laRV9E
RUZBVUxUCVNDVFBfVENCSEFTSFNJWkUKKworLyogcGNiaGFzaHNpemU6IFR1bmFibGUgZm9yIFBD
QiBIYXNoIHRhYmxlIHNpemVzICovCisjZGVmaW5lIFNDVFBDVExfUENCSEFTSFNJWkVfREVTQwki
VHVuYWJsZSBmb3IgUENCIGhhc2ggdGFibGUgc2l6ZXMiCisjZGVmaW5lIFNDVFBDVExfUENCSEFT
SFNJWkVfTUlOCQkxCisjZGVmaW5lIFNDVFBDVExfUENCSEFTSFNJWkVfTUFYCQkweEZGRkZGRkZG
CisjZGVmaW5lIFNDVFBDVExfUENCSEFTSFNJWkVfREVGQVVMVAlTQ1RQX1BDQkhBU0hTSVpFCisK
Ky8qIG1pbl9zcGxpdF9wb2ludDogTWluaW11bSBzaXplIHdoZW4gc3BsaXR0aW5nIGEgY2h1bmsg
Ki8KKyNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVTQwkiTWluaW11bSBzaXplIHdo
ZW4gc3BsaXR0aW5nIGEgY2h1bmsiCisjZGVmaW5lIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01J
TgkwCisjZGVmaW5lIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01BWAkweEZGRkZGRkZGCisjZGVm
aW5lIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX0RFRkFVTFQJU0NUUF9ERUZBVUxUX1NQTElUX1BP
SU5UX01JTgorCisvKiBjaHVua3NjYWxlOiBUdW5hYmxlIGZvciBTY2FsaW5nIG9mIG51bWJlciBv
ZiBjaHVua3MgYW5kIG1lc3NhZ2VzICovCisjZGVmaW5lIFNDVFBDVExfQ0hVTktTQ0FMRV9ERVND
CQkiVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNzYWdlcyIK
KyNkZWZpbmUgU0NUUENUTF9DSFVOS1NDQUxFX01JTgkJMQorI2RlZmluZSBTQ1RQQ1RMX0NIVU5L
U0NBTEVfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfQ0hVTktTQ0FMRV9ERUZBVUxU
CVNDVFBfQ0hVTktRVUVVRV9TQ0FMRQorCisvKiBkZWxheWVkX3NhY2tfdGltZTogRGVmYXVsdCBk
ZWxheWVkIFNBQ0sgdGltZXIgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9ERUxBWUVEX1NBQ0tf
VElNRV9ERVNDCSJEZWZhdWx0IGRlbGF5ZWQgU0FDSyB0aW1lciBpbiBtcyIKKyNkZWZpbmUgU0NU
UENUTF9ERUxBWUVEX1NBQ0tfVElNRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0RFTEFZRURfU0FD
S19USU1FX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVf
REVGQVVMVAlTQ1RQX1JFQ1ZfTVNFQworCisvKiBzYWNrX2ZyZXE6IERlZmF1bHQgU0FDSyBmcmVx
dWVuY3kgKi8KKyNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFfREVTQwkJIkRlZmF1bHQgU0FDSyBm
cmVxdWVuY3kiCisjZGVmaW5lIFNDVFBDVExfU0FDS19GUkVRX01JTgkJMAorI2RlZmluZSBTQ1RQ
Q1RMX1NBQ0tfRlJFUV9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFf
REVGQVVMVAlTQ1RQX0RFRkFVTFRfU0FDS19GUkVRCisKKy8qIHN5c19yZXNvdXJjZTogTWF4IG51
bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0gKi8KKyNkZWZpbmUgU0NUUENU
TF9TWVNfUkVTT1VSQ0VfREVTQwkiTWF4IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIHRo
ZSBzeXN0ZW0iCisjZGVmaW5lIFNDVFBDVExfU1lTX1JFU09VUkNFX01JTgkwCisjZGVmaW5lIFND
VFBDVExfU1lTX1JFU09VUkNFX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfU1lTX1JF
U09VUkNFX0RFRkFVTFQJU0NUUF9ERUZfU1lTVEVNX1JFU0NfTElNSVQKKworLyogYXNvY19yZXNv
dXJjZTogTWF4IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzb2MgKi8KKyNkZWZp
bmUgU0NUUENUTF9BU09DX1JFU09VUkNFX0RFU0MJIk1heCBudW1iZXIgb2YgY2FjaGVkIHJlc291
cmNlcyBpbiBhbiBhc29jIgorI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUlOCTAKKyNk
ZWZpbmUgU0NUUENUTF9BU09DX1JFU09VUkNFX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBD
VExfQVNPQ19SRVNPVVJDRV9ERUZBVUxUCVNDVFBfREVGX0FTT0NfUkVTQ19MSU1JVAorCisvKiBo
ZWFydGJlYXRfaW50ZXJ2YWw6IERlZmF1bHQgaGVhcnRiZWF0IGludGVydmFsIGluIG1zICovCisj
ZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFU0MJIkRlZmF1bHQgaGVhcnRiZWF0
IGludGVydmFsIGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9NSU4J
MAorI2RlZmluZSBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9NQVgJMHhGRkZGRkZGRgorI2Rl
ZmluZSBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9ERUZBVUxUCVNDVFBfSEJfREVGQVVMVF9N
U0VDCisKKy8qIHBtdHVfcmFpc2VfdGltZTogRGVmYXVsdCBQTVRVIHJhaXNlIHRpbWVyIGluIHNl
Y29uZHMgKi8KKyNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfREVTQwkiRGVmYXVsdCBQ
TVRVIHJhaXNlIHRpbWVyIGluIHNlY29uZHMiCisjZGVmaW5lIFNDVFBDVExfUE1UVV9SQUlTRV9U
SU1FX01JTgkwCisjZGVmaW5lIFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX01BWAkweEZGRkZGRkZG
CisjZGVmaW5lIFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX0RFRkFVTFQJU0NUUF9ERUZfUE1UVV9S
QUlTRV9TRUMKKworLyogc2h1dGRvd25fZ3VhcmRfdGltZTogRGVmYXVsdCBzaHV0ZG93biBndWFy
ZCB0aW1lciBpbiBzZWNvbmRzICovCisjZGVmaW5lIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElN
RV9ERVNDCSJTaHV0ZG93biBndWFyZCB0aW1lciBpbiBzZWNvbmRzICgwIG1lYW5zIDUgdGltZXMg
UlRPLk1heCkiCisjZGVmaW5lIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElNRV9NSU4JCTAKKyNk
ZWZpbmUgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FX01BWAkJMHhGRkZGRkZGRgorI2RlZmlu
ZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVMVAkwCisKKy8qIHNlY3JldF9saWZl
dGltZTogRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgaW4gc2Vjb25kcyAqLworI2RlZmluZSBTQ1RQ
Q1RMX1NFQ1JFVF9MSUZFVElNRV9ERVNDCSJEZWZhdWx0IHNlY3JldCBsaWZldGltZSBpbiBzZWNv
bmRzIgorI2RlZmluZSBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX1NFQ1JFVF9MSUZFVElNRV9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1NFQ1JF
VF9MSUZFVElNRV9ERUZBVUxUCVNDVFBfREVGQVVMVF9TRUNSRVRfTElGRV9TRUMKKworLyogcnRv
X21heDogRGVmYXVsdCBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMgKi8KKyNk
ZWZpbmUgU0NUUENUTF9SVE9fTUFYX0RFU0MJCSJEZWZhdWx0IG1heGltdW0gcmV0cmFuc21pc3Np
b24gdGltZW91dCBpbiBtcyIKKyNkZWZpbmUgU0NUUENUTF9SVE9fTUFYX01JTgkJMAorI2RlZmlu
ZSBTQ1RQQ1RMX1JUT19NQVhfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfUlRPX01B
WF9ERUZBVUxUCQlTQ1RQX1JUT19VUFBFUl9CT1VORAorCisvKiBydG9fbWluOiBEZWZhdWx0IG1p
bmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyAqLworI2RlZmluZSBTQ1RQQ1RMX1JU
T19NSU5fREVTQwkJIkRlZmF1bHQgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1z
IgorI2RlZmluZSBTQ1RQQ1RMX1JUT19NSU5fTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfUlRPX01J
Tl9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9SVE9fTUlOX0RFRkFVTFQJCVNDVFBf
UlRPX0xPV0VSX0JPVU5ECisKKy8qIHJ0b19pbml0aWFsOiBEZWZhdWx0IGluaXRpYWwgcmV0cmFu
c21pc3Npb24gdGltZW91dCBpbiBtcyAqLworI2RlZmluZSBTQ1RQQ1RMX1JUT19JTklUSUFMX0RF
U0MJIkRlZmF1bHQgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIgorI2RlZmlu
ZSBTQ1RQQ1RMX1JUT19JTklUSUFMX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1JUT19JTklUSUFM
X01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1JUT19JTklUSUFMX0RFRkFVTFQJU0NU
UF9SVE9fSU5JVElBTAorCisvKiBpbml0X3J0b19tYXg6IERlZmF1bHQgbWF4aW11bSByZXRyYW5z
bWlzc2lvbiB0aW1lb3V0IGR1cmluZyBhc3NvY2lhdGlvbiBzZXR1cCBpbiBtcyAqLworI2RlZmlu
ZSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9ERVNDCSJEZWZhdWx0IG1heGltdW0gcmV0cmFuc21pc3Np
b24gdGltZW91dCBkdXJpbmcgYXNzb2NpYXRpb24gc2V0dXAgaW4gbXMiCisjZGVmaW5lIFNDVFBD
VExfSU5JVF9SVE9fTUFYX01JTgkwCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX01BWAkw
eEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX0RFRkFVTFQJU0NUUF9SVE9f
VVBQRVJfQk9VTkQKKworLyogdmFsaWRfY29va2llX2xpZmU6IERlZmF1bHQgY29va2llIGxpZmV0
aW1lIGluIHNlYyAqLworI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFU0MJIkRl
ZmF1bHQgY29va2llIGxpZmV0aW1lIGluIHNlY29uZHMiCisjZGVmaW5lIFNDVFBDVExfVkFMSURf
Q09PS0lFX0xJRkVfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NQVgJ
MHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFRkFVTFQJU0NU
UF9ERUZBVUxUX0NPT0tJRV9MSUZFCisKKy8qIGluaXRfcnR4X21heDogRGVmYXVsdCBtYXhpbXVt
IG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBmb3IgSU5JVCBjaHVua3MgKi8KKyNkZWZpbmUgU0NU
UENUTF9JTklUX1JUWF9NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5z
bWlzc2lvbiBmb3IgSU5JVCBjaHVua3MiCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVFhfTUFYX01J
TgkwCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVFhfTUFYX01BWAkweEZGRkZGRkZGCisjZGVmaW5l
IFNDVFBDVExfSU5JVF9SVFhfTUFYX0RFRkFVTFQJU0NUUF9ERUZfTUFYX0lOSVQKKworLyogYXNz
b2NfcnR4X21heDogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgcGVy
IGFzc29jaWF0aW9uICovCisjZGVmaW5lIFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERVNDCSJEZWZh
dWx0IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBwZXIgYXNzb2NpYXRpb24iCisj
ZGVmaW5lIFNDVFBDVExfQVNTT0NfUlRYX01BWF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0FTU09D
X1JUWF9NQVhfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9BU1NPQ19SVFhfTUFYX0RF
RkFVTFQJU0NUUF9ERUZfTUFYX1NFTkQKKworLyogcGF0aF9ydHhfbWF4OiBEZWZhdWx0IG1heGlt
dW0gb2YgcmV0cmFuc21pc3Npb25zIHBlciBwYXRoICovCisjZGVmaW5lIFNDVFBDVExfUEFUSF9S
VFhfTUFYX0RFU0MJIkRlZmF1bHQgbWF4aW11bSBvZiByZXRyYW5zbWlzc2lvbnMgcGVyIHBhdGgi
CisjZGVmaW5lIFNDVFBDVExfUEFUSF9SVFhfTUFYX01JTgkwCisjZGVmaW5lIFNDVFBDVExfUEFU
SF9SVFhfTUFYX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfUEFUSF9SVFhfTUFYX0RF
RkFVTFQJU0NUUF9ERUZfTUFYX1BBVEhfUlRYCisKKy8qIHBhdGhfcGZfdGhyZXNob2xkOiB0aHJl
c2hvbGQgZm9yIGNvbnNpZGVyaW5nIHRoZSBwYXRoIHBvdGVudGlhbGx5IGZhaWxlZCAqLworI2Rl
ZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFU0MJCSJEZWZhdWx0IHBvdGVudGlhbGx5
IGZhaWxlZCB0aHJlc2hvbGQiCisjZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfTUlO
CQkwCisjZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfTUFYCQkweEZGRkYKKyNkZWZp
bmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9ERUZBVUxUCVNDVFBDVExfUEFUSF9QRl9USFJF
U0hPTERfTUFYCisKKy8qIGFkZF9tb3JlX29uX291dHB1dDogV2hlbiBzcGFjZS13aXNlIGlzIGl0
IHdvcnRod2hpbGUgdG8gdHJ5IHRvIGFkZCBtb3JlIHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyICov
CisjZGVmaW5lIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX0RFU0MJIldoZW4gc3BhY2Utd2lz
ZSBpcyBpdCB3b3J0aHdoaWxlIHRvIHRyeSB0byBhZGQgbW9yZSB0byBhIHNvY2tldCBzZW5kIGJ1
ZmZlciIKKyNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfTUlOCTAKKyNkZWZpbmUg
U0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENU
TF9BRERfTU9SRV9PTl9PVVRQVVRfREVGQVVMVCBTQ1RQX0RFRkFVTFRfQUREX01PUkUKKworLyog
aW5jb21pbmdfc3RyZWFtczogRGVmYXVsdCBudW1iZXIgb2YgaW5jb21pbmcgc3RyZWFtcyAqLwor
I2RlZmluZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNfREVTQwkiRGVmYXVsdCBudW1iZXIgb2Yg
aW5jb21pbmcgc3RyZWFtcyIKKyNkZWZpbmUgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX01JTgkx
CisjZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NQVgJNjU1MzUKKyNkZWZpbmUgU0NU
UENUTF9JTkNPTUlOR19TVFJFQU1TX0RFRkFVTFQgU0NUUF9JU1RSRUFNX0lOSVRJQUwKKworLyog
b3V0Z29pbmdfc3RyZWFtczogRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyAqLwor
I2RlZmluZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVTQwkiRGVmYXVsdCBudW1iZXIgb2Yg
b3V0Z29pbmcgc3RyZWFtcyIKKyNkZWZpbmUgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01JTgkx
CisjZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19NQVgJNjU1MzUKKyNkZWZpbmUgU0NU
UENUTF9PVVRHT0lOR19TVFJFQU1TX0RFRkFVTFQgU0NUUF9PU1RSRUFNX0lOSVRJQUwKKworLyog
Y210X29uX29mZjogQ01UIG9uL29mZiBmbGFnICovCisjZGVmaW5lIFNDVFBDVExfQ01UX09OX09G
Rl9ERVNDCQkiQ01UIHNldHRpbmdzIgorI2RlZmluZSBTQ1RQQ1RMX0NNVF9PTl9PRkZfTUlOCQlT
Q1RQX0NNVF9PRkYKKyNkZWZpbmUgU0NUUENUTF9DTVRfT05fT0ZGX01BWAkJU0NUUF9DTVRfTUFY
CisjZGVmaW5lIFNDVFBDVExfQ01UX09OX09GRl9ERUZBVUxUCVNDVFBfQ01UX09GRgorCisvKiBj
bXRfdXNlX2RhYzogQ01UIERBQyBvbi9vZmYgZmxhZyAqLworI2RlZmluZSBTQ1RQQ1RMX0NNVF9V
U0VfREFDX0RFU0MJIkNNVCBEQUMgb24vb2ZmIGZsYWciCisjZGVmaW5lIFNDVFBDVExfQ01UX1VT
RV9EQUNfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQ01UX1VTRV9EQUNfTUFYCQkxCisjZGVmaW5l
IFNDVFBDVExfQ01UX1VTRV9EQUNfREVGQVVMVCAgICAJMAorCisvKiBjd25kX21heGJ1cnN0OiBV
c2UgYSBDV05EIGFkanVzdGluZyBtYXhidXJzdCAqLworI2RlZmluZSBTQ1RQQ1RMX0NXTkRfTUFY
QlVSU1RfREVTQwkiVXNlIGEgQ1dORCBhZGp1c3RpbmcgbWF4YnVyc3QiCisjZGVmaW5lIFNDVFBD
VExfQ1dORF9NQVhCVVJTVF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfTUFY
CTEKKyNkZWZpbmUgU0NUUENUTF9DV05EX01BWEJVUlNUX0RFRkFVTFQJMQorCisvKiBuYXRfZnJp
ZW5kbHk6IFNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiAqLworI2RlZmluZSBTQ1RQQ1RMX05B
VF9GUklFTkRMWV9ERVNDCSJTQ1RQIE5BVCBmcmllbmRseSBvcGVyYXRpb24iCisjZGVmaW5lIFND
VFBDVExfTkFUX0ZSSUVORExZX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX01B
WAkxCisjZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX0RFRkFVTFQJMQorCisvKiBhYmNfbF92
YXI6IFNDVFAgQUJDIG1heCBpbmNyZWFzZSBwZXIgU0FDSyAoTCkgKi8KKyNkZWZpbmUgU0NUUENU
TF9BQkNfTF9WQVJfREVTQwkJIlNDVFAgQUJDIG1heCBpbmNyZWFzZSBwZXIgU0FDSyAoTCkiCisj
ZGVmaW5lIFNDVFBDVExfQUJDX0xfVkFSX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX0FCQ19MX1ZB
Ul9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9BQkNfTF9WQVJfREVGQVVMVAkyCisK
Ky8qIG1heF9jaGFpbmVkX21idWZzOiBEZWZhdWx0IG1heCBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMg
b24gYSBjaGFpbiAqLworI2RlZmluZSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFU0MJIkRl
ZmF1bHQgbWF4IG51bWJlciBvZiBzbWFsbCBtYnVmcyBvbiBhIGNoYWluIgorI2RlZmluZSBTQ1RQ
Q1RMX01BWF9DSEFJTkVEX01CVUZTX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTUFYX0NIQUlORURf
TUJVRlNfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGU19E
RUZBVUxUCVNDVFBfREVGQVVMVF9NQlVGU19JTl9DSEFJTgorCisvKiBkb19zY3RwX2RyYWluOiBT
aG91bGQgU0NUUCByZXNwb25kIHRvIHRoZSBkcmFpbiBjYWxscyAqLworI2RlZmluZSBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU5fREVTQwkiU2hvdWxkIFNDVFAgcmVzcG9uZCB0byB0aGUgZHJhaW4gY2Fs
bHMiCisjZGVmaW5lIFNDVFBDVExfRE9fU0NUUF9EUkFJTl9NSU4JMAorI2RlZmluZSBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU5fTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9ET19TQ1RQX0RSQUlOX0RFRkFV
TFQJMQorCisvKiBoYl9tYXhfYnVyc3Q6IENvbmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0
PyAqLworI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9ERVNDCSJDb25maXJtYXRpb24gSGVh
cnRiZWF0IG1heCBidXJzdCIKKyNkZWZpbmUgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUlOCTEKKyNk
ZWZpbmUgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENU
TF9IQl9NQVhfQlVSU1RfREVGQVVMVAlTQ1RQX0RFRl9IQk1BWF9CVVJTVAorCisvKiBhYm9ydF9h
dF9saW1pdDogV2hlbiBvbmUtMi1vbmUgaGl0cyBxbGltaXQgYWJvcnQgKi8KKyNkZWZpbmUgU0NU
UENUTF9BQk9SVF9BVF9MSU1JVF9ERVNDCSJXaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBhYm9y
dCIKKyNkZWZpbmUgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RM
X0FCT1JUX0FUX0xJTUlUX01BWAkxCisjZGVmaW5lIFNDVFBDVExfQUJPUlRfQVRfTElNSVRfREVG
QVVMVAkwCisKKy8qIG1pbl9yZXNpZHVhbDogbWluIHJlc2lkdWFsIGluIGEgZGF0YSBmcmFnbWVu
dCBsZWZ0b3ZlciAqLworI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERVNDCSJNaW5pbXVt
IHJlc2lkdWFsIGRhdGEgY2h1bmsgaW4gc2Vjb25kIHBhcnQgb2Ygc3BsaXQiCisjZGVmaW5lIFND
VFBDVExfTUlOX1JFU0lEVUFMX01JTgkyMAorI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9N
QVgJNjU1MzUKKyNkZWZpbmUgU0NUUENUTF9NSU5fUkVTSURVQUxfREVGQVVMVAkxNDUyCisKKy8q
IG1heF9yZXRyYW5fY2h1bms6IG1heCBjaHVuayByZXRyYW5zbWlzc2lvbnMgKi8KKyNkZWZpbmUg
U0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MJIk1heGltdW0gdGltZXMgYW4gdW5sdWNreSBj
aHVuayBjYW4gYmUgcmV0cmFuJ2QgYmVmb3JlIGFzc29jIGFib3J0IgorI2RlZmluZSBTQ1RQQ1RM
X01BWF9SRVRSQU5fQ0hVTktfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5L
X01BWAk2NTUzNQorI2RlZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTktfREVGQVVMVAkzMAor
CisvKiBzY3RwX2xvZ2dpbmc6IFRoaXMgZ2l2ZXMgdXMgbG9nZ2luZyB3aGVuIHRoZSBvcHRpb25z
IGFyZSBlbmFibGVkICovCisjZGVmaW5lIFNDVFBDVExfTE9HR0lOR19MRVZFTF9ERVNDCSJMdHJh
Y2UvS1RSIHRyYWNlIGxvZ2dpbmcgbGV2ZWwiCisjZGVmaW5lIFNDVFBDVExfTE9HR0lOR19MRVZF
TF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfTUFYCTB4ZmZmZmZmZmYKKyNk
ZWZpbmUgU0NUUENUTF9MT0dHSU5HX0xFVkVMX0RFRkFVTFQJMAorCisvKiBKUlMgLSBkZWZhdWx0
IGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgc3lzY3RsICovCisjZGVmaW5lIFNDVFBDVExfREVG
QVVMVF9DQ19NT0RVTEVfREVTQwkJIkRlZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSIK
KyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENU
TF9ERUZBVUxUX0NDX01PRFVMRV9NQVgJCTIKKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0NDX01P
RFVMRV9ERUZBVUxUCTAKKworLyogUlMgLSBkZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVs
ZSBzeXNjdGwgKi8KKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9ERVNDCQkiRGVm
YXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUiCisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9T
U19NT0RVTEVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVfTUFYCQk1
CisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVfREVGQVVMVAkwCisKKy8qIFJSUyAt
IGRlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSAqLworI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRf
RlJBR19JTlRFUkxFQVZFX0RFU0MJIkRlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZlbCIK
KyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9NSU4JMAorI2RlZmluZSBT
Q1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01BWAkyCisjZGVmaW5lIFNDVFBDVExfREVG
QVVMVF9GUkFHX0lOVEVSTEVBVkVfREVGQVVMVAkxCisKKy8qIG1vYmlsaXR5X2Jhc2U6IEVuYWJs
ZSBTQ1RQIG1vYmlsaXR5IHN1cHBvcnQgKi8KKyNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9CQVNF
X0RFU0MJIkVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkiCisjZGVmaW5lIFNDVFBDVExfTU9CSUxJ
VFlfQkFTRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0JBU0VfTUFYCTEKKyNkZWZp
bmUgU0NUUENUTF9NT0JJTElUWV9CQVNFX0RFRkFVTFQJMAorCisvKiBtb2JpbGl0eV9mYXN0aGFu
ZG9mZjogRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmIHN1cHBvcnQgKi8KKyNkZWZpbmUgU0NUUENU
TF9NT0JJTElUWV9GQVNUSEFORE9GRl9ERVNDCSJFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYiCisj
ZGVmaW5lIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkZfTUlOCTAKKyNkZWZpbmUgU0NUUENU
TF9NT0JJTElUWV9GQVNUSEFORE9GRl9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0ZB
U1RIQU5ET0ZGX0RFRkFVTFQJMAorCisvKiBFbmFibGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQg
Ki8KKyNkZWZpbmUgU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVTQwkJIlNldCB0aGUgU0NU
UC9VRFAgdHVubmVsaW5nIHBvcnQiCisjZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JU
X01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NQVgJCTY1NTM1Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNkZWZpbmUgU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BP
UlRfREVGQVVMVAkwCisjZWxzZQorI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9E
RUZBVUxUCVNDVFBfT1ZFUl9VRFBfVFVOTkVMSU5HX1BPUlQKKyNlbmRpZgorCisvKiBFbmFibGUg
c2VuZGluZyBvZiB0aGUgU0FDSy1JTU1FRElBVEVMWSBiaXQgKi8KKyNkZWZpbmUgU0NUUENUTF9T
QUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERVNDCSJFbmFibGUgc2VuZGluZyBvZiB0aGUgU0FDSy1J
TU1FRElBVEVMWS1iaXQuIgorI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxF
X01JTgkwCisjZGVmaW5lIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEVfTUFYCTEKKyNk
ZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERUZBVUxUCVNDVFBDVExfU0FD
S19JTU1FRElBVEVMWV9FTkFCTEVfTUFYCisKKy8qIEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBOQVQt
RlJJRU5ETFkgbWVzc2FnZSAqLworI2RlZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19E
RVNDCSJFbmFibGUgc2VuZGluZyBvZiB0aGUgbmF0LWZyaWVuZGx5IFNDVFAgb3B0aW9uIG9uIElO
SVRzLiIKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfTUlOCTAKKyNkZWZpbmUg
U0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJ
RU5ETFlfSU5JVFNfREVGQVVMVAlTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4KKworLyog
VnRhZyB0aW1lIHdhaXQgaW4gc2Vjb25kcyAqLworI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9E
RVNDCSJWdGFnIHRpbWUgd2FpdCB0aW1lIGluIHNlY29uZHMsIDAgZGlzYWJsZXMgaXQuIgorI2Rl
ZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9N
QVgJMHhmZmZmZmZmZgorI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9ERUZBVUxUCVNDVFBfVElN
RV9XQUlUCisKKy8qIEVuYWJsZSBTZW5kL1JlY2VpdmUgYnVmZmVyIHNwbGl0dGluZyAqLworI2Rl
ZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfREVTQwkJIkVuYWJsZSBzZW5kL3JlY2VpdmUg
YnVmZmVyIHNwbGl0dGluZy4iCisjZGVmaW5lIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19NSU4J
CTAKKyNkZWZpbmUgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01BWAkJMHgzCisjZGVmaW5lIFND
VFBDVExfQlVGRkVSX1NQTElUVElOR19ERUZBVUxUCVNDVFBDVExfQlVGRkVSX1NQTElUVElOR19N
SU4KKworLyogSW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFUgKi8KKyNkZWZpbmUgU0NU
UENUTF9JTklUSUFMX0NXTkRfREVTQwkiSW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVz
IgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0lO
SVRJQUxfQ1dORF9NQVgJMHhmZmZmZmZmZgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9E
RUZBVUxUCTMKKworLyogcnR0dmFyIHNtb290aCBhdmcgZm9yIGJ3IGNhbGMgICovCisjZGVmaW5l
IFNDVFBDVExfUlRUVkFSX0JXX0RFU0MJIlNoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9u
IHJ0dCBjYWxjIgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9CV19NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX1JUVFZBUl9CV19NQVgJMzIKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfQldfREVGQVVMVAk0
CisKKy8qIHJ0dHZhciBzbW9vdGggYXZnIGZvciBidyBjYWxjICAqLworI2RlZmluZSBTQ1RQQ1RM
X1JUVFZBUl9SVFRfREVTQwkiU2hpZnQgYW1vdW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBj
YWxjIgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9S
VFRWQVJfUlRUX01BWAkzMgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVGQVVMVAk1CisK
KyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfREVTQwkiV2hhdCB0byByZXR1cm4gd2hlbiBy
dHQgYW5kIGJ3IGFyZSB1bmNoYW5nZWQiCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0VRUkVUX01J
TgkwCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0VRUkVUX01BWAkxCisjZGVmaW5lIFNDVFBDVExf
UlRUVkFSX0VRUkVUX0RFRkFVTFQJMAorCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX1NURUFEWVNf
REVTQwkiSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3du
ZCIKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZU19NSU4JMAorI2RlZmluZSBTQ1RQQ1RM
X1JUVFZBUl9TVEVBRFlTX01BWAkweEZGRkYKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZ
U19ERUZBVUxUCTIwIC8qIDAgbWVhbnMgZGlzYWJsZSBmZWF0dXJlICovCisKKyNkZWZpbmUgU0NU
UENUTF9SVFRWQVJfRENDQ0VDTl9ERVNDCSJFbmFibGUgZm9yIFJUQ0MgQ0MgZGF0YWNlbnRlciBF
Q04iCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fTUlOCTAKKyNkZWZpbmUgU0NUUENU
TF9SVFRWQVJfRENDQ0VDTl9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX0RF
RkFVTFQJMSAvKiAwIG1lYW5zIGRpc2FibGUgZmVhdHVyZSAqLworCisjZGVmaW5lIFNDVFBDVExf
QkxBQ0tIT0xFX0RFU0MJCSJFbmFibGUgU0NUUCBibGFja2hvbGluZy4gU2VlIGJsYWNraG9sZSg0
KSBmb3IgbW9yZSBkZXRhaWxzLiIKKyNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfTUlOCQkwCisj
ZGVmaW5lIFNDVFBDVExfQkxBQ0tIT0xFX01BWAkJMgorI2RlZmluZSBTQ1RQQ1RMX0JMQUNLSE9M
RV9ERUZBVUxUCVNDVFBDVExfQkxBQ0tIT0xFX01JTgorCisjZGVmaW5lIFNDVFBDVExfRElBR19J
TkZPX0NPREVfREVTQwkiRGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBlcnJvciBjYXVzZSBjb2RlIgor
I2RlZmluZSBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01JTgkwCisjZGVmaW5lIFNDVFBDVExfRElB
R19JTkZPX0NPREVfTUFYCTY1NTM1CisjZGVmaW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfREVG
QVVMVAkwCisKKyNpZiBkZWZpbmVkKFNDVFBfREVCVUcpCisvKiBkZWJ1ZzogQ29uZmlndXJlIGRl
YnVnIG91dHB1dCAqLworI2RlZmluZSBTQ1RQQ1RMX0RFQlVHX0RFU0MJIkNvbmZpZ3VyZSBkZWJ1
ZyBvdXRwdXQiCisjZGVmaW5lIFNDVFBDVExfREVCVUdfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9E
RUJVR19NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX0RFQlVHX0RFRkFVTFQJMAorI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgU0NUUENUTF9NQUlOX1RJTUVS
X0RFU0MJCSJNYWluIHRpbWVyIGludGVydmFsIGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX01BSU5f
VElNRVJfTUlOCQkxCisjZGVmaW5lIFNDVFBDVExfTUFJTl9USU1FUl9NQVgJCTB4RkZGRkZGRkYK
KyNkZWZpbmUgU0NUUENUTF9NQUlOX1RJTUVSX0RFRkFVTFQJMTAKKworI2RlZmluZSBTQ1RQQ1RM
X0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERVNDCQkiSWdub3JlIFZNd2FyZSBJbnRlcmZhY2Vz
IgorI2RlZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NSU4JCTAKKyNkZWZp
bmUgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfTUFYCQkxCisjZGVmaW5lIFNDVFBD
VExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFRkFVTFQJU0NUUENUTF9JR05PUkVfVk1XQVJF
X0lOVEVSRkFDRVNfTUFYCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorI2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tF
RF9ERVNDCSJVbmxvY2sgc29ja2V0IHdoZW4gc2VuZGluZyBwYWNrZXRzIGRvd24gdG8gSVAuIgor
I2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX09V
VFBVVF9VTkxPQ0tFRF9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9ERUZB
VUxUCVNDVFBDVExfT1VUUFVUX1VOTE9DS0VEX01JTgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKyNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlUX0RFU0MJIkFkZHJl
c3Mgd2F0Y2hkb2cgbGltaXQiCisjZGVmaW5lCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9N
SU4JCTAKKyNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlUX01BWAkJMHhGRkZGRkZG
RgorI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hET0dfTElNSVRfREVGQVVMVAlTQ1RQQ1RMX0FE
RFJfV0FUQ0hET0dfTElNSVRfTUlOCisKKyNkZWZpbmUJU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJ
TUlUX0RFU0MJIlZUYWcgd2F0Y2hkb2cgbGltaXQiCisjZGVmaW5lCVNDVFBDVExfVlRBR19XQVRD
SERPR19MSU1JVF9NSU4JCTAKKyNkZWZpbmUJU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJTUlUX01B
WAkJMHhGRkZGRkZGRgorI2RlZmluZQlTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVRfREVGQVVM
VAlTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVRfTUlOCisjZW5kaWYKKworI2lmIGRlZmluZWQo
X0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYg
ZGVmaW5lZChTWVNDVExfREVDTCkKK1NZU0NUTF9ERUNMKF9uZXRfaW5ldF9zY3RwKTsKKyNlbmRp
ZgorI2VuZGlmCisKK3ZvaWQgc2N0cF9pbml0X3N5c2N0bHModm9pZCk7CisjaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKK3ZvaWQgc2N0cF9maW5pc2hfc3lzY3Rscyh2b2lkKTsKKyNlbmRpZgorCisj
ZW5kaWYgLyogX0tFUk5FTCAqLworI2VuZGlmIC8qIF9fc2N0cF9zeXNjdGxfaF9fICovCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5jIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi40MjZiYTQ0YWVlZTIxNWFiZmM2ZDk5N2EzZjBhMzVl
MjRkNjMwOGQ4IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF90
aW1lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKQEAg
LTAsMCArMSwxNjIyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGlj
ZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMu
IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo
IiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdGltZXIuYyAzMTc1OTIgMjAxNy0wNC0y
OSAwOTo1NzoyN1ogdHVleGVuICQiKTsKKyNlbmRpZgorCisjZGVmaW5lIF9JUF9WSEwKKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Cisj
aWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisjaW5jbHVk
ZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+CisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Cisj
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgQVBQTEVfRklMRV9OTyA2CisjZW5k
aWYKKwordm9pZAorc2N0cF9hdWRpdF9yZXRyYW5taXNzaW9uX3F1ZXVlKHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCVND
VFBEQkcoU0NUUF9ERUJVR19USU1FUjQsICJBdWRpdCBpbnZva2VkIG9uIHNlbmQgcXVldWUgY250
OiVkIG9ucXVldWU6JWRcbiIsCisJCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQsCisJCQlh
c29jLT5zZW50X3F1ZXVlX2NudCk7CisJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsK
Kwlhc29jLT5zZW50X3F1ZXVlX2NudCA9IDA7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5z
ZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFN
X1JFU0VORCkgeworCQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9j
bnQpOworCQl9CisJCWFzb2MtPnNlbnRfcXVldWVfY250Kys7CisJfQorCVRBSUxRX0ZPUkVBQ0go
Y2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+
c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJc2N0cF91Y291bnRfaW5jcihhc29j
LT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQl9CisJfQorCVRBSUxRX0ZPUkVBQ0goY2hrLCAm
YXNvYy0+YXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5zZW50ID09
IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7CisJCX0KKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwg
IkF1ZGl0IGNvbXBsZXRlcyByZXRyYW46JWQgb25xdWV1ZTolZFxuIiwKKwkJYXNvYy0+c2VudF9x
dWV1ZV9yZXRyYW5fY250LAorCQlhc29jLT5zZW50X3F1ZXVlX2NudCk7Cit9CisKK3N0YXRpYyBp
bnQKK3NjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDE2X3Qg
dGhyZXNob2xkKQoreworCWlmIChuZXQpIHsKKwkJbmV0LT5lcnJvcl9jb3VudCsrOworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVElNRVI0LCAiRXJyb3IgY291bnQgZm9yICVwIG5vdyAlZCB0aHJlc2g6
JWRcbiIsCisJCQkodm9pZCAqKW5ldCwgbmV0LT5lcnJvcl9jb3VudCwKKwkJCW5ldC0+ZmFpbHVy
ZV90aHJlc2hvbGQpOworCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+ZmFpbHVyZV90aHJl
c2hvbGQpIHsKKwkJCS8qIFdlIGhhZCBhIHRocmVzaG9sZCBmYWlsdXJlICovCisJCQlpZiAobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBf
QUREUl9SRVFfUFJJTUFSWTsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsK
KwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sCisJCQkJICAg
IHN0Y2IsIDAsCisJCQkJICAgICh2b2lkICopbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJ
fQorCQl9IGVsc2UgaWYgKChuZXQtPnBmX3RocmVzaG9sZCA8IG5ldC0+ZmFpbHVyZV90aHJlc2hv
bGQpICYmCisJCSAgICAgICAgICAgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPnBmX3RocmVzaG9s
ZCkpIHsKKwkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpIHsKKwkJCQlu
ZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1BGOworCQkJCW5ldC0+bGFzdF9hY3RpdmUgPSBz
Y3RwX2dldF90aWNrX2NvdW50KCk7CisJCQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJU
QkVBVCwKKwkJCQkgICAgICAgICAgICAgICAgaW5wLCBzdGNiLCBuZXQsCisJCQkJICAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX1RJTUVSICsgU0NUUF9MT0NfMSk7CisJCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCk7CisJCQl9
CisJCX0KKwl9CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKworCWlmIChuZXQp
IHsKKwkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpID09IDAp
IHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RI
UkVTSE9MRF9MT0dHSU5HKSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfSU5D
UiwKKwkJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkJICAg
ICAgIChzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQrMSksCisJCQkJCSAgICAgICBTQ1RQ
X0ZST01fU0NUUF9USU1FUiwKKwkJCQkJICAgICAgIF9fTElORV9fKTsKKwkJCX0KKwkJCXN0Y2It
PmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCsrOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcp
IHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0lOQ1IsCisJCQkJICAgICAgIHN0
Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkgICAgICAgKHN0Y2ItPmFzb2Mub3Zl
cmFsbF9lcnJvcl9jb3VudCsxKSwKKwkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfVElNRVIsCisJ
CQkJICAgICAgIF9fTElORV9fKTsKKwkJfQorCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291
bnQrKzsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwgIk92ZXJhbGwgZXJyb3IgY291
bnQgZm9yICVwIG5vdyAlZCB0aHJlc2g6JXUgc3RhdGU6JXhcbiIsCisJCSh2b2lkICopJnN0Y2It
PmFzb2MsIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJKHVpbnQzMl90KXRocmVz
aG9sZCwKKwkJKChuZXQgPT0gTlVMTCkgPyAodWludDMyX3QpIDAgOiAodWludDMyX3QpIG5ldC0+
ZGVzdF9zdGF0ZSkpOworCS8qCisJICogV2Ugc3BlY2lmaWNhbGx5IGRvIG5vdCBkbyA+PSB0byBn
aXZlIHRoZSBhc3NvYyBvbmUgbW9yZSBjaGFuZ2UKKwkgKiBiZWZvcmUgd2UgZmFpbCBpdC4KKwkg
Ki8KKwlpZiAoc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID4gdGhyZXNob2xkKSB7CisJ
CS8qIEFib3J0IG5vdGlmaWNhdGlvbiBzZW5kcyBhIFVMUCBub3RpZnkgKi8KKwkJc3RydWN0IG1i
dWYgKm9wX2VycjsKKworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIkFzc29jaWF0aW9uIGVycm9yIGNvdW50ZXIgZXhjZWVkZWQiKTsKKwkJaW5wLT5sYXN0X2Fi
b3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9USU1FUiArIFNDVFBfTE9DXzI7CisJCXNjdHBfYWJv
cnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBzY3RwX2ZpbmRf
YWx0ZXJuYXRlX25ldCgpIHJldHVybnMgYSBub24tTlVMTCBwb2ludGVyIGFzIGxvbmcKKyAqIHRo
ZSBhcmd1bWVudCBuZXQgaXMgbm9uLU5VTEwuCisgKi8KK3N0cnVjdCBzY3RwX25ldHMgKgorc2N0
cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKKyAgICBpbnQgbW9kZSkKK3sKKwkvKiBGaW5kIGFuZCByZXR1cm4gYW4g
YWx0ZXJuYXRlIG5ldHdvcmsgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQs
ICptbmV0LCAqbWluX2Vycm9yc19uZXQgPSBOVUxMICwgKm1heF9jd25kX25ldCA9IE5VTEw7CisJ
aW50IG9uY2U7CisJLyogSlJTIDUvMTQvMDcgLSBJbml0aWFsaXplIG1pbl9lcnJvcnMgdG8gYW4g
aW1wb3NzaWJsZSB2YWx1ZS4gKi8KKwlpbnQgbWluX2Vycm9ycyA9IC0xOworCXVpbnQzMl90IG1h
eF9jd25kID0gMDsKKworCWlmIChzdGNiLT5hc29jLm51bW5ldHMgPT0gMSkgeworCQkvKiBObyBv
dGhlcnMgYnV0IG5ldCAqLworCQlyZXR1cm4gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMp
KTsKKwl9CisJLyoKKwkgKiBKUlMgNS8xNC8wNyAtIElmIG1vZGUgaXMgc2V0IHRvIDIsIHVzZSB0
aGUgQ01UIFBGIGZpbmQgYWx0ZXJuYXRlIG5ldCBhbGdvcml0aG0uCisJICogVGhpcyBhbGdvcml0
aG0gY2hvb3NlcyB0aGUgYWN0aXZlIGRlc3RpbmF0aW9uIChub3QgaW4gUEYgc3RhdGUpIHdpdGgg
dGhlIGxhcmdlc3QKKwkgKiBjd25kIHZhbHVlLiBJZiBhbGwgZGVzdGluYXRpb25zIGFyZSBpbiBQ
RiBzdGF0ZSwgdW5yZWFjaGFibGUsIG9yIHVuY29uZmlybWVkLCBjaG9vc2UKKwkgKiB0aGUgZGVz
aW5hdGlvbiB0aGF0IGlzIGluIFBGIHN0YXRlIHdpdGggdGhlIGxvd2VzdCBlcnJvciBjb3VudC4g
SW4gY2FzZSBvZiBhIHRpZSwKKwkgKiBjaG9vc2UgdGhlIGRlc3RpbmF0aW9uIHRoYXQgd2FzIG1v
c3QgcmVjZW50bHkgYWN0aXZlLgorCSAqLworCWlmIChtb2RlID09IDIpIHsKKwkJVEFJTFFfRk9S
RUFDSChtbmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCS8qIEpSUyA1LzE0
LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIGlzIHVucmVhY2hhYmxlIG9yIHVuY29uZmlybWVkLCBz
a2lwIGl0LiAqLworCQkJaWYgKCgobW5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFC
TEUpICE9IFNDVFBfQUREUl9SRUFDSEFCTEUpIHx8CisJCQkgICAgKG1uZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKgor
CQkJICogSlJTIDUvMTQvMDcgLSAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIHJlYWNoYWJsZSBidXQg
aW4gUEYgc3RhdGUsIGNvbXBhcmUKKwkJCSAqICB0aGUgZXJyb3IgY291bnQgb2YgdGhlIGRlc3Rp
bmF0aW9uIHRvIHRoZSBtaW5pbXVtIGVycm9yIGNvdW50IHNlZW4gdGh1cyBmYXIuCisJCQkgKiAg
U3RvcmUgdGhlIGRlc3RpbmF0aW9uIHdpdGggdGhlIGxvd2VyIGVycm9yIGNvdW50LiAgSWYgdGhl
IGVycm9yIGNvdW50cyBhcmUKKwkJCSAqICBlcXVhbCwgc3RvcmUgdGhlIGRlc3RpbmF0aW9uIHRo
YXQgd2FzIG1vc3QgcmVjZW50bHkgYWN0aXZlLgorCQkJICovCisJCQlpZiAobW5ldC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQkJCS8qCisJCQkJICogSlJTIDUvMTQvMDcgLSBJZiB0
aGUgZGVzdGluYXRpb24gdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUgY3VycmVudAorCQkJCSAq
ICBkZXN0aW5hdGlvbiwgd29yayBhcyBpZiB0aGUgZXJyb3IgY291bnQgaXMgb25lIGhpZ2hlci4g
IFRoZQorCQkJCSAqICBhY3R1YWwgZXJyb3IgY291bnQgd2lsbCBub3QgYmUgaW5jcmVtZW50ZWQg
dW50aWwgbGF0ZXIgaW4gdGhlCisJCQkJICogIHQzIGhhbmRsZXIuCisJCQkJICovCisJCQkJaWYg
KG1uZXQgPT0gbmV0KSB7CisJCQkJCWlmIChtaW5fZXJyb3JzID09IC0xKSB7CisJCQkJCQltaW5f
ZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291bnQgKyAxOworCQkJCQkJbWluX2Vycm9yc19uZXQgPSBt
bmV0OworCQkJCQl9IGVsc2UgaWYgKG1uZXQtPmVycm9yX2NvdW50ICsgMSA8IG1pbl9lcnJvcnMp
IHsKKwkJCQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudCArIDE7CisJCQkJCQltaW5f
ZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCX0gZWxzZSBpZiAobW5ldC0+ZXJyb3JfY291bnQgKyAx
ID09IG1pbl9lcnJvcnMKKwkJCQkJCQkJJiYgbW5ldC0+bGFzdF9hY3RpdmUgPiBtaW5fZXJyb3Jz
X25ldC0+bGFzdF9hY3RpdmUpIHsKKwkJCQkJCW1pbl9lcnJvcnNfbmV0ID0gbW5ldDsKKwkJCQkJ
CW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudCArIDE7CisJCQkJCX0KKwkJCQkJY29udGlu
dWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG1pbl9lcnJvcnMgPT0gLTEpIHsKKwkJCQkJCW1p
bl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudDsKKwkJCQkJCW1pbl9lcnJvcnNfbmV0ID0gbW5l
dDsKKwkJCQkJfSBlbHNlIGlmIChtbmV0LT5lcnJvcl9jb3VudCA8IG1pbl9lcnJvcnMpIHsKKwkJ
CQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudDsKKwkJCQkJCW1pbl9lcnJvcnNfbmV0
ID0gbW5ldDsKKwkJCQkJfSBlbHNlIGlmIChtbmV0LT5lcnJvcl9jb3VudCA9PSBtaW5fZXJyb3Jz
CisJCQkJCQkJCSYmIG1uZXQtPmxhc3RfYWN0aXZlID4gbWluX2Vycm9yc19uZXQtPmxhc3RfYWN0
aXZlKSB7CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCQltaW5fZXJyb3JzID0g
bW5ldC0+ZXJyb3JfY291bnQ7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQor
CQkJLyoKKwkJCSAqIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIGlzIHJlYWNoYWJs
ZSBhbmQgbm90IGluIFBGIHN0YXRlLCBjb21wYXJlIHRoZQorCQkJICogIGN3bmQgb2YgdGhlIGRl
c3RpbmF0aW9uIHRvIHRoZSBoaWdoZXN0IGN3bmQgc2VlbiB0aHVzIGZhci4gIFN0b3JlIHRoZQor
CQkJICogIGRlc3RpbmF0aW9uIHdpdGggdGhlIGhpZ2hlciBjd25kIHZhbHVlLiAgSWYgdGhlIGN3
bmQgdmFsdWVzIGFyZSBlcXVhbCwKKwkJCSAqICByYW5kb21seSBjaG9vc2Ugb25lIG9mIHRoZSB0
d28gZGVzdGluYXRpb25zLgorCQkJICovCisJCQlpZiAobWF4X2N3bmQgPCBtbmV0LT5jd25kKSB7
CisJCQkJbWF4X2N3bmRfbmV0ID0gbW5ldDsKKwkJCQltYXhfY3duZCA9IG1uZXQtPmN3bmQ7CisJ
CQl9IGVsc2UgaWYgKG1heF9jd25kID09IG1uZXQtPmN3bmQpIHsKKwkJCQl1aW50MzJfdCBybmR2
YWw7CisJCQkJdWludDhfdCB0aGlzX3JhbmRvbTsKKworCQkJCWlmIChzdGNiLT5hc29jLmhiX3Jh
bmRvbV9pZHggPiAzKSB7CisJCQkJCXJuZHZhbCA9IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZz
dGNiLT5zY3RwX2VwLT5zY3RwX2VwKTsKKwkJCQkJbWVtY3B5KHN0Y2ItPmFzb2MuaGJfcmFuZG9t
X3ZhbHVlcywgJnJuZHZhbCwgc2l6ZW9mKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlcykpOwor
CQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlc1swXTsKKwkJCQkJ
c3RjYi0+YXNvYy5oYl9yYW5kb21faWR4Kys7CisJCQkJCXN0Y2ItPmFzb2MuaGJfZWN0X3JhbmRv
bWJpdCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGhpc19yYW5kb20gPSBzdGNiLT5hc29jLmhi
X3JhbmRvbV92YWx1ZXNbc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4XTsKKwkJCQkJc3RjYi0+YXNv
Yy5oYl9yYW5kb21faWR4Kys7CisJCQkJCXN0Y2ItPmFzb2MuaGJfZWN0X3JhbmRvbWJpdCA9IDA7
CisJCQkJfQorCQkJCWlmICh0aGlzX3JhbmRvbSAlIDIgPT0gMSkgeworCQkJCQltYXhfY3duZF9u
ZXQgPSBtbmV0OworCQkJCQltYXhfY3duZCA9IG1uZXQtPmN3bmQ7IC8qIFVzZWxlc3M/ICovCisJ
CQkJfQorCQkJfQorCQl9CisJCWlmIChtYXhfY3duZF9uZXQgPT0gTlVMTCkgeworCQkJaWYgKG1p
bl9lcnJvcnNfbmV0ID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKG5ldCk7CisJCQl9CisJCQlyZXR1
cm4gKG1pbl9lcnJvcnNfbmV0KTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAobWF4X2N3bmRfbmV0
KTsKKwkJfQorCX0gLyogSlJTIDUvMTQvMDcgLSBJZiBtb2RlIGlzIHNldCB0byAxLCB1c2UgdGhl
IENNVCBwb2xpY3kgZm9yIGNob29zaW5nIGFuIGFsdGVybmF0ZSBuZXQuICovCisJZWxzZSBpZiAo
bW9kZSA9PSAxKSB7CisJCVRBSUxRX0ZPUkVBQ0gobW5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7CisJCQlpZiAoKChtbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJM
RSkgIT0gU0NUUF9BRERSX1JFQUNIQUJMRSkgfHwKKwkJCSAgICAobW5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpIHsKKwkJCQkvKgorCQkJCSAqIHdpbGwgc2tpcCBvbmVz
IHRoYXQgYXJlIG5vdC1yZWFjaGFibGUgb3IKKwkJCQkgKiB1bmNvbmZpcm1lZAorCQkJCSAqLwor
CQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG1heF9jd25kIDwgbW5ldC0+Y3duZCkgeworCQkJ
CW1heF9jd25kX25ldCA9IG1uZXQ7CisJCQkJbWF4X2N3bmQgPSBtbmV0LT5jd25kOworCQkJfSBl
bHNlIGlmIChtYXhfY3duZCA9PSBtbmV0LT5jd25kKSB7CisJCQkJdWludDMyX3Qgcm5kdmFsOwor
CQkJCXVpbnQ4X3QgdGhpc19yYW5kb207CisKKwkJCQlpZiAoc3RjYi0+YXNvYy5oYl9yYW5kb21f
aWR4ID4gMykgeworCQkJCQlybmR2YWwgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+
c2N0cF9lcC0+c2N0cF9lcCk7CisJCQkJCW1lbWNweShzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1
ZXMsICZybmR2YWwsCisJCQkJCSAgICBzaXplb2Yoc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVz
KSk7CisJCQkJCXRoaXNfcmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzWzBdOwor
CQkJCQlzdGNiLT5hc29jLmhiX3JhbmRvbV9pZHggPSAwOworCQkJCQlzdGNiLT5hc29jLmhiX2Vj
dF9yYW5kb21iaXQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXRoaXNfcmFuZG9tID0gc3RjYi0+
YXNvYy5oYl9yYW5kb21fdmFsdWVzW3N0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeF07CisJCQkJCXN0
Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsrOworCQkJCQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21i
aXQgPSAwOworCQkJCX0KKwkJCQlpZiAodGhpc19yYW5kb20gJSAyKSB7CisJCQkJCW1heF9jd25k
X25ldCA9IG1uZXQ7CisJCQkJCW1heF9jd25kID0gbW5ldC0+Y3duZDsKKwkJCQl9CisJCQl9CisJ
CX0KKwkJaWYgKG1heF9jd25kX25ldCkgeworCQkJcmV0dXJuIChtYXhfY3duZF9uZXQpOworCQl9
CisJfQorCW1uZXQgPSBuZXQ7CisJb25jZSA9IDA7CisKKwlpZiAobW5ldCA9PSBOVUxMKSB7CisJ
CW1uZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJaWYgKG1uZXQgPT0gTlVM
TCkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0KKwlmb3IgKDs7KSB7CisJCWFsdCA9IFRB
SUxRX05FWFQobW5ldCwgc2N0cF9uZXh0KTsKKwkJaWYgKGFsdCA9PSBOVUxMKSB7CisJCQlvbmNl
Kys7CisJCQlpZiAob25jZSA+IDEpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWFsdCA9IFRBSUxR
X0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKGFsdCA9PSBOVUxMKSB7CisJCQkJcmV0
dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCQlpZiAoYWx0LT5yby5yb19ydCA9PSBOVUxMKSB7CisJ
CQlpZiAoYWx0LT5yby5fc19hZGRyKSB7CisJCQkJc2N0cF9mcmVlX2lmYShhbHQtPnJvLl9zX2Fk
ZHIpOworCQkJCWFsdC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQl9CisJCQlhbHQtPnNyY19hZGRy
X3NlbGVjdGVkID0gMDsKKwkJfQorCQlpZiAoKChhbHQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
UkVBQ0hBQkxFKSA9PSBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAmJgorCQkgICAgKGFsdC0+cm8ucm9f
cnQgIT0gTlVMTCkgJiYKKwkJICAgICghKGFsdC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkpKSB7CisJCQkvKiBGb3VuZCBhIHJlYWNoYWJsZSBhZGRyZXNzICovCisJCQlicmVh
azsKKwkJfQorCQltbmV0ID0gYWx0OworCX0KKworCWlmIChhbHQgPT0gTlVMTCkgeworCQkvKiBD
YXNlIHdoZXJlIE5PIGluc3YgbmV0d29yayBleGlzdHMgKGRvcm1hbnQgc3RhdGUpICovCisJCS8q
IHdlIHJvdGF0ZSBkZXN0aW5hdGlvbnMgKi8KKwkJb25jZSA9IDA7CisJCW1uZXQgPSBuZXQ7CisJ
CWZvciAoOzspIHsKKwkJCWlmIChtbmV0ID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKFRBSUxRX0ZJ
UlNUKCZzdGNiLT5hc29jLm5ldHMpKTsKKwkJCX0KKwkJCWFsdCA9IFRBSUxRX05FWFQobW5ldCwg
c2N0cF9uZXh0KTsKKwkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJCW9uY2UrKzsKKwkJCQlpZiAo
b25jZSA+IDEpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZz
dGNiLT5hc29jLm5ldHMpOworCQkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCQlpZiAoKCEoYWx0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklS
TUVEKSkgJiYKKwkJCSAgICAoYWx0ICE9IG5ldCkpIHsKKwkJCQkvKiBGb3VuZCBhbiBhbHRlcm5h
dGUgYWRkcmVzcyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJbW5ldCA9IGFsdDsKKwkJfQorCX0K
KwlpZiAoYWx0ID09IE5VTEwpIHsKKwkJcmV0dXJuIChuZXQpOworCX0KKwlyZXR1cm4gKGFsdCk7
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgIGludCB3aW5fcHJvYmUs
CisgICAgaW50IG51bV9tYXJrZWQsIGludCBudW1fYWJhbmRvbmVkKQoreworCWlmIChuZXQtPlJU
TyA9PSAwKSB7CisJCWlmIChuZXQtPlJUT19tZWFzdXJlZCkgeworCQkJbmV0LT5SVE8gPSBzdGNi
LT5hc29jLm1pbnJ0bzsKKwkJfSBlbHNlIHsKKwkJCW5ldC0+UlRPID0gc3RjYi0+YXNvYy5pbml0
aWFsX3J0bzsKKwkJfQorCX0KKwluZXQtPlJUTyA8PD0gMTsKKwlpZiAobmV0LT5SVE8gPiBzdGNi
LT5hc29jLm1heHJ0bykgeworCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MubWF4cnRvOworCX0KKwlp
ZiAoKHdpbl9wcm9iZSA9PSAwKSAmJiAobnVtX21hcmtlZCB8fCBudW1fYWJhbmRvbmVkKSkgewor
CQkvKiBXZSBkb24ndCBhcHBseSBwZW5hbHR5IHRvIHdpbmRvdyBwcm9iZSBzY2VuYXJpb3MgKi8K
KwkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2ZW4gaW4gdGhlIENDIG1v
ZHVsZSAqLworCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVy
X3RpbWVvdXQoc3RjYiwgbmV0KTsKKwl9Cit9CisKKyNpZm5kZWYgSU5WQVJJQU5UUworc3RhdGlj
IHZvaWQKK3NjdHBfcmVjb3Zlcl9zZW50X2xpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiKQorewor
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisJc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJVEFJTFFfRk9SRUFDSF9TQUZF
KGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoU0NUUF9U
U05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGNoay0+cmVjLmRhdGEudHNuKSkgeworCQkJU0NU
UF9QUklOVEYoIkZvdW5kIGNoazolcCB0c246JXggPD0gbGFzdF9hY2tlZF9zZXE6JXhcbiIsCisJ
CQkgICAgICAgICAgICAodm9pZCAqKWNoaywgY2hrLT5yZWMuZGF0YS50c24sIGFzb2MtPmxhc3Rf
YWNrZWRfc2VxKTsKKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkg
eworCQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVl
dWVzID4gMCkgeworCQkJCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nf
b25fcXVldWVzLS07CisJCQkJfQorCQkJfQorCQkJaWYgKChhc29jLT5zdHJtb3V0W2Noay0+cmVj
LmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCQkgICAgKGFzb2MtPnN0cm1v
dXRbY2hrLT5yZWMuZGF0YS5zaWRdLnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcp
ICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRd
Lm91dHF1ZXVlKSkgeworCQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOworCQkJfQorCQkJVEFJ
TFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCQlpZiAoUFJf
U0NUUF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJaWYgKGFzb2MtPnByX3NjdHBfY250ICE9
IDApCisJCQkJCWFzb2MtPnByX3NjdHBfY250LS07CisJCQl9CisJCQlpZiAoY2hrLT5kYXRhKSB7
CisJCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJCXNjdHBfZnJlZV9idWZzcGFjZShz
dGNiLCBhc29jLCBjaGssIDEpOworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNo
ay0+ZGF0YSA9IE5VTEw7CisJCQkJaWYgKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQgJiYgUFJfU0NU
UF9CVUZfRU5BQkxFRChjaGstPmZsYWdzKSkgeworCQkJCQlhc29jLT5zZW50X3F1ZXVlX2NudF9y
ZW1vdmVhYmxlLS07CisJCQkJfQorCQkJfQorCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnQtLTsKKwkJ
CXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQor
CX0KKwlTQ1RQX1BSSU5URigiYWZ0ZXIgcmVjb3ZlciBvcmRlciBpcyBhcyBmb2xsb3dzXG4iKTsK
KwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlT
Q1RQX1BSSU5URigiY2hrOiVwIFRTTjoleFxuIiwgKHZvaWQgKiljaGssIGNoay0+cmVjLmRhdGEu
dHNuKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludAorc2N0cF9tYXJrX2FsbF9mb3JfcmVz
ZW5kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisg
ICAgc3RydWN0IHNjdHBfbmV0cyAqYWx0LAorICAgIGludCB3aW5kb3dfcHJvYmUsCisgICAgaW50
ICpudW1fbWFya2VkLAorICAgIGludCAqbnVtX2FiYW5kb25lZCkKK3sKKworCS8qCisJICogTWFy
ayBhbGwgY2h1bmtzICh3ZWxsIG5vdCBhbGwpIHRoYXQgd2VyZSBzZW50IHRvICpuZXQgZm9yCisJ
ICogcmV0cmFuc21pc3Npb24uIE1vdmUgdGhlbSB0byBhbHQgZm9yIHRoZXJlIGRlc3RpbmF0aW9u
IGFzIHdlbGwuLi4KKwkgKiBXZSBvbmx5IG1hcmsgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuIG91dHN0
YW5kaW5nIGxvbmcgZW5vdWdoIHRvCisJICogaGF2ZSByZWNlaXZlZCBmZWVkLWJhY2suCisJICov
CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpsbmV0czsKKwlzdHJ1Y3QgdGltZXZhbCBub3csIG1pbl93YWl0LCB0djsKKwlpbnQgY3VyX3J0
bzsKKwlpbnQgY250X2FiYW5kb25lZDsKKwlpbnQgYXVkaXRfdGYsIG51bV9taywgZmlyOworCXVu
c2lnbmVkIGludCBjbnRfbWs7CisJdWludDMyX3Qgb3JpZ19mbGlnaHQsIG9yaWdfdGY7CisJdWlu
dDMyX3QgdHNubGFzdCwgdHNuZmlyc3Q7CisJaW50IHJlY292ZXJ5X2NudCA9IDA7CisKKworCS8q
IG5vbmUgaW4gZmxpZ2h0IG5vdyAqLworCWF1ZGl0X3RmID0gMDsKKwlmaXIgPSAwOworCS8qCisJ
ICogZmlndXJlIG91dCBob3cgbG9uZyBhIGRhdGEgY2h1bmsgbXVzdCBiZSBwZW5kaW5nIGJlZm9y
ZSB3ZSBjYW4KKwkgKiBtYXJrIGl0IC4uCisJICovCisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVW
QUwoJm5vdyk7CisJLyogZ2V0IGN1ciBydG8gaW4gbWljcm8tc2Vjb25kcyAqLworCWN1cl9ydG8g
PSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7CisJY3VyX3J0
byAqPSAxMDAwOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2ZyKGN1cl9ydG8sCisJCQkgICAg
c3RjYi0+YXNvYy5wZWVyc19yd25kLAorCQkJICAgIHdpbmRvd19wcm9iZSwKKwkJCSAgICBTQ1RQ
X0ZSX1QzX01BUktfVElNRSk7CisJCXNjdHBfbG9nX2ZyKG5ldC0+ZmxpZ2h0X3NpemUsIDAsIDAs
IFNDVFBfRlJfQ1dORF9SRVBPUlQpOworCQlzY3RwX2xvZ19mcihuZXQtPmZsaWdodF9zaXplLCBu
ZXQtPmN3bmQsIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0LCBTQ1RQX0ZSX0NXTkRfUkVQT1JUKTsK
Kwl9CisJdHYudHZfc2VjID0gY3VyX3J0byAvIDEwMDAwMDA7CisJdHYudHZfdXNlYyA9IGN1cl9y
dG8gJSAxMDAwMDAwOworI2lmbmRlZiBfX0ZyZWVCU0RfXworCXRpbWVyc3ViKCZub3csICZ0diwg
Jm1pbl93YWl0KTsKKyNlbHNlCisJbWluX3dhaXQgPSBub3c7CisJdGltZXZhbHN1YigmbWluX3dh
aXQsICZ0dik7CisjZW5kaWYKKwlpZiAobWluX3dhaXQudHZfc2VjIDwgMCB8fCBtaW5fd2FpdC50
dl91c2VjIDwgMCkgeworCQkvKgorCQkgKiBpZiB3ZSBoaXQgaGVyZSwgd2UgZG9uJ3QgaGF2ZSBl
bm91Z2ggc2Vjb25kcyBvbiB0aGUgY2xvY2sKKwkJICogdG8gYWNjb3VudCBmb3IgdGhlIFJUTy4g
V2UganVzdCBsZXQgdGhlIGxvd2VyIHNlY29uZHMgYmUKKwkJICogdGhlIGJvdW5kcyBhbmQgZG9u
J3Qgd29ycnkgYWJvdXQgaXQuIFRoaXMgbWF5IG1lYW4gd2UKKwkJICogd2lsbCBtYXJrIGEgbG90
IG1vcmUgdGhhbiB3ZSBzaG91bGQuCisJCSAqLworCQltaW5fd2FpdC50dl9zZWMgPSBtaW5fd2Fp
dC50dl91c2VjID0gMDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfZnIoY3VyX3J0bywg
bm93LnR2X3NlYywgbm93LnR2X3VzZWMsIFNDVFBfRlJfVDNfTUFSS19USU1FKTsKKwkJc2N0cF9s
b2dfZnIoMCwgbWluX3dhaXQudHZfc2VjLCBtaW5fd2FpdC50dl91c2VjLCBTQ1RQX0ZSX1QzX01B
UktfVElNRSk7CisJfQorCS8qCisJICogT3VyIHJ3bmQgd2lsbCBiZSBpbmNvcnJlY3QgaGVyZSBz
aW5jZSB3ZSBhcmUgbm90IGFkZGluZyBiYWNrIHRoZQorCSAqIGNudCAqIG1idWYgYnV0IHdlIHdp
bGwgZml4IHRoYXQgZG93biBiZWxvdy4KKwkgKi8KKwlvcmlnX2ZsaWdodCA9IG5ldC0+ZmxpZ2h0
X3NpemU7CisJb3JpZ190ZiA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCisJbmV0LT5mYXN0
X3JldHJhbl9pcCA9IDA7CisJLyogTm93IG9uIHRvIGVhY2ggY2h1bmsgKi8KKwljbnRfYWJhbmRv
bmVkID0gMDsKKwludW1fbWsgPSBjbnRfbWsgPSAwOworCXRzbmZpcnN0ID0gdHNubGFzdCA9IDA7
CisjaWZuZGVmIElOVkFSSUFOVFMKKyBzdGFydF9hZ2FpbjoKKyNlbmRpZgorCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewor
CQlpZiAoU0NUUF9UU05fR0Uoc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSwgY2hrLT5yZWMuZGF0
YS50c24pKSB7CisJCQkvKiBTdHJhbmdlIGNhc2Ugb3VyIGxpc3QgZ290IG91dCBvZiBvcmRlcj8g
Ki8KKwkJCVNDVFBfUFJJTlRGKCJPdXIgbGlzdCBpcyBvdXQgb2Ygb3JkZXI/IGxhc3RfYWNrZWQ6
JXggY2hrOiV4XG4iLAorCQkJICAgICAgICAgICAgKHVuc2lnbmVkIGludClzdGNiLT5hc29jLmxh
c3RfYWNrZWRfc2VxLCAodW5zaWduZWQgaW50KWNoay0+cmVjLmRhdGEudHNuKTsKKwkJCXJlY292
ZXJ5X2NudCsrOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJsYXN0IGFja2VkID49IGNo
ayBvbiBzZW50LVEiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiUmVjb3ZlciBhdHRlbXB0cyBh
IHJlc3RhcnQgY250OiVkXG4iLCByZWNvdmVyeV9jbnQpOworCQkJc2N0cF9yZWNvdmVyX3NlbnRf
bGlzdChzdGNiKTsKKwkJCWlmIChyZWNvdmVyeV9jbnQgPCAxMCkgeworCQkJCWdvdG8gc3RhcnRf
YWdhaW47CisJCQl9IGVsc2UgeworCQkJCVNDVFBfUFJJTlRGKCJSZWNvdmVyeSBmYWlscyAlZCB0
aW1lcz8/XG4iLCByZWNvdmVyeV9jbnQpOworCQkJfQorI2VuZGlmCisJCX0KKwkJaWYgKChjaGst
Pndob1RvID09IG5ldCkgJiYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpKSB7CisJ
CQkvKgorCQkJICogZm91bmQgb25lIHRvIG1hcms6IElmIGl0IGlzIGxlc3MgdGhhbgorCQkJICog
REFUQUdSQU1fQUNLRUQgaXQgTVVTVCBub3QgYmUgYSBza2lwcGVkIG9yIG1hcmtlZAorCQkJICog
VFNOIGJ1dCBpbnN0ZWFkIG9uZSB0aGF0IGlzIGVpdGhlciBhbHJlYWR5IHNldAorCQkJICogZm9y
IHJldHJhbnNtaXNzaW9uIE9SIG9uZSB0aGF0IG5lZWRzCisJCQkgKiByZXRyYW5zbWlzc2lvbi4K
KwkJCSAqLworCisJCQkvKiB2YWxpZGF0ZSBpdHMgYmVlbiBvdXRzdGFuZGluZyBsb25nIGVub3Vn
aCAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
RlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19mcihjaGstPnJlYy5kYXRhLnRzbiwK
KwkJCQkJICAgIGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMsCisJCQkJCSAgICBjaGstPnNlbnRf
cmN2X3RpbWUudHZfdXNlYywKKwkJCQkJICAgIFNDVFBfRlJfVDNfTUFSS19USU1FKTsKKwkJCX0K
KwkJCWlmICgoY2hrLT5zZW50X3Jjdl90aW1lLnR2X3NlYyA+IG1pbl93YWl0LnR2X3NlYykgJiYg
KHdpbmRvd19wcm9iZSA9PSAwKSkgeworCQkJCS8qCisJCQkJICogd2UgaGF2ZSByZWFjaGVkIGEg
Y2h1bmsgdGhhdCB3YXMgc2VudAorCQkJCSAqIHNvbWUgc2Vjb25kcyBwYXN0IG91ciBtaW4uLiBm
b3JnZXQgaXQgd2UKKwkJCQkgKiB3aWxsIGZpbmQgbm8gbW9yZSB0byBzZW5kLgorCQkJCSAqLwor
CQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2ZyKDAsCisJCQkJCQkgICAgY2hrLT5zZW50
X3Jjdl90aW1lLnR2X3NlYywKKwkJCQkJCSAgICBjaGstPnNlbnRfcmN2X3RpbWUudHZfdXNlYywK
KwkJCQkJCSAgICBTQ1RQX0ZSX1QzX1NUT1BQRUQpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJ
CX0gZWxzZSBpZiAoKGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMgPT0gbWluX3dhaXQudHZfc2Vj
KSAmJgorCQkJCSAgICh3aW5kb3dfcHJvYmUgPT0gMCkpIHsKKwkJCQkvKgorCQkJCSAqIHdlIG11
c3QgbG9vayBhdCB0aGUgbWljcm8gc2Vjb25kcyB0bworCQkJCSAqIGtub3cuCisJCQkJICovCisJ
CQkJaWYgKGNoay0+c2VudF9yY3ZfdGltZS50dl91c2VjID49IG1pbl93YWl0LnR2X3VzZWMpIHsK
KwkJCQkJLyoKKwkJCQkJICogb2sgaXQgd2FzIHNlbnQgYWZ0ZXIgb3VyIGJvdW5kYXJ5CisJCQkJ
CSAqIHRpbWUuCisJCQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAo
c3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBfVFRMX0VOQUJMRUQoY2hrLT5m
bGFncykpIHsKKwkJCQkvKiBJcyBpdCBleHBpcmVkPyAqLworI2lmbmRlZiBfX0ZyZWVCU0RfXwor
CQkJCWlmICh0aW1lcmNtcCgmbm93LCAmY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLCA+KSkgewor
I2Vsc2UKKwkJCQlpZiAodGltZXZhbGNtcCgmbm93LCAmY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9w
LCA+KSkgeworI2VuZGlmCisJCQkJCS8qIFllcyBzbyBkcm9wIGl0ICovCisJCQkJCWlmIChjaGst
PmRhdGEpIHsKKwkJCQkJCSh2b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0Y2IsCisJ
CQkJCQkJCQkJIGNoaywKKwkJCQkJCQkJCQkgMSwKKwkJCQkJCQkJCQkgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCQkJCWNudF9hYmFuZG9uZWQrKzsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJ
CQl9CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBf
UlRYX0VOQUJMRUQoY2hrLT5mbGFncykpIHsKKwkJCQkvKiBIYXMgaXQgYmVlbiByZXRyYW5zbWl0
dGVkIHR2X3NlYyB0aW1lcz8gKi8KKwkJCQlpZiAoY2hrLT5zbmRfY291bnQgPiBjaGstPnJlYy5k
YXRhLnRpbWV0b2Ryb3AudHZfc2VjKSB7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCSh2
b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0Y2IsCisJCQkJCQkJCQkJIGNoaywKKwkJ
CQkJCQkJCQkgMSwKKwkJCQkJCQkJCQkgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJCWNudF9h
YmFuZG9uZWQrKzsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAo
Y2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlzY3RwX3Vjb3VudF9pbmNy
KHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCQludW1fbWsrKzsKKwkJCQlp
ZiAoZmlyID09IDApIHsKKwkJCQkJZmlyID0gMTsKKwkJCQkJdHNuZmlyc3QgPSBjaGstPnJlYy5k
YXRhLnRzbjsKKwkJCQl9CisJCQkJdHNubGFzdCA9IGNoay0+cmVjLmRhdGEudHNuOworCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2ZyKGNoay0+cmVjLmRhdGEudHNuLCBjaGstPnNuZF9j
b3VudCwKKwkJCQkJCSAgICAwLCBTQ1RQX0ZSX1QzX01BUktFRCk7CisJCQkJfQorCisJCQkJaWYg
KGNoay0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQpIHsKKwkJCQkJLyogZGVmbGF0ZSB0aGUg
Y3duZCAqLworCQkJCQljaGstPndob1RvLT5jd25kIC09IGNoay0+Ym9va19zaXplOworCQkJCQlj
aGstPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKKwkJCQl9CisJCQkJbmV0LT5tYXJr
ZWRfcmV0cmFucysrOworCQkJCXN0Y2ItPmFzb2MubWFya2VkX3JldHJhbnMrKzsKKwkJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lO
R19FTkFCTEUpIHsKKwkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fUlNO
RF9UTywKKwkJCQkJCSAgICAgICBjaGstPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCSAgICAg
ICBjaGstPmJvb2tfc2l6ZSwKKwkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCljaGst
Pndob1RvLAorCQkJCQkJICAgICAgIGNoay0+cmVjLmRhdGEudHNuKTsKKwkJCQl9CisJCQkJc2N0
cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZShjaGspOworCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3Jl
YXNlKHN0Y2IsIGNoayk7CisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kICs9IGNoay0+c2VuZF9z
aXplOworCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cGVlcl9jaHVua19vaCk7CisJCQl9CisJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RDsKKwkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19tYXJrZWRyZXRyYW5zKTsKKworCQkJLyogcmVzZXQgdGhlIFRTTiBmb3Ig
c3RyaWtpbmcgYW5kIG90aGVyIEZSIHN0dWZmICovCisJCQljaGstPnJlYy5kYXRhLmRvaW5nX2Zh
c3RfcmV0cmFuc21pdCA9IDA7CisJCQkvKiBDbGVhciBhbnkgdGltZSBzbyBOTyBSVFQgaXMgYmVp
bmcgZG9uZSAqLworCisJCQlpZiAoY2hrLT5kb19ydHQpIHsKKwkJCQlpZiAoY2hrLT53aG9Uby0+
cnRvX25lZWRlZCA9PSAwKSB7CisJCQkJCWNoay0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJ
CX0KKwkJCX0KKwkJCWNoay0+ZG9fcnR0ID0gMDsKKwkJCWlmIChhbHQgIT0gbmV0KSB7CisJCQkJ
c2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJCWNoay0+bm9fZnJfYWxsb3dl
ZCA9IDE7CisJCQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5y
ZWZfY291bnQsIDEpOworCQkJfSBlbHNlIHsKKwkJCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAwOwor
CQkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSkgeworCQkJCQljaGst
PnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXE7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJY2hrLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90c24gPSAoVEFJTFFfRklS
U1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpLT5yZWMuZGF0YS50c247CisJCQkJfQorCQkJfQor
CQkJLyogQ01UOiBEbyBub3QgYWxsb3cgRlJzIG9uIHJldHJhbnNtaXR0ZWQgVFNOcy4KKwkJCSAq
LworCQkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID4gMCkgeworCQkJCWNoay0+bm9f
ZnJfYWxsb3dlZCA9IDE7CisJCQl9CisjaWZkZWYgVEhJU19TSE9VTERfTk9UX0JFX0RPTkUKKwkJ
fSBlbHNlIGlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9BQ0tFRCkgeworCQkJLyogcmVt
ZW1iZXIgaGlnaGVzdCBhY2tlZCBvbmUgKi8KKwkJCWNvdWxkX2JlX3NlbnQgPSBjaGs7CisjZW5k
aWYKKwkJfQorCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlj
bnRfbWsrKzsKKwkJfQorCX0KKwlpZiAoKG9yaWdfZmxpZ2h0IC0gbmV0LT5mbGlnaHRfc2l6ZSkg
IT0gKG9yaWdfdGYgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkpIHsKKwkJLyogd2UgZGlkIG5v
dCBzdWJ0cmFjdCB0aGUgc2FtZSB0aGluZ3M/ICovCisJCWF1ZGl0X3RmID0gMTsKKwl9CisKKwlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5H
X0VOQUJMRSkgeworCQlzY3RwX2xvZ19mcih0c25maXJzdCwgdHNubGFzdCwgbnVtX21rLCBTQ1RQ
X0ZSX1QzX1RJTUVPVVQpOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKG51bV9taykgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiTEFTVCBUU04gbWFya2VkIHdhcyAleFxuIiwK
KwkJCXRzbmxhc3QpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiTnVtIG1hcmtlZCBm
b3IgcmV0cmFuc21pc3Npb24gd2FzICVkIHBlZXItcndkOiV1XG4iLAorCQkJbnVtX21rLAorCQkJ
c3RjYi0+YXNvYy5wZWVyc19yd25kKTsKKwl9CisjZW5kaWYKKwkqbnVtX21hcmtlZCA9IG51bV9t
azsKKwkqbnVtX2FiYW5kb25lZCA9IGNudF9hYmFuZG9uZWQ7CisJLyogTm93IGNoZWNrIGZvciBh
IEVDTiBFY2hvIHRoYXQgbWF5IGJlIHN0cmFuZGVkIEFuZAorCSAqIGluY2x1ZGUgdGhlIGNudF9t
aydkIHRvIGhhdmUgYWxsIHJlc2VuZHMgaW4gdGhlCisJICogY29udHJvbCBxdWV1ZS4KKwkgKi8K
KwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBzY3Rw
X25leHQpIHsKKwkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJ
Y250X21rKys7CisJCX0KKwkJaWYgKChjaGstPndob1RvID09IG5ldCkgJiYKKwkJICAgIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJc2N0cF9mcmVlX3JlbW90
ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCWlmIChjaGstPnNl
bnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1JFU0VORDsKKwkJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwor
CQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwor
CQkJCWNudF9taysrOworCQkJfQorCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAx
KTsKKwkJfQorCX0KKyNpZmRlZiBUSElTX1NIT1VMRF9OT1RfQkVfRE9ORQorCWlmICgoc3RjYi0+
YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYgKGNvdWxkX2JlX3NlbnQpKSB7CisJ
CS8qIGZpeCBpdCBzbyB3ZSByZXRyYW5zbWl0IHRoZSBoaWdoZXN0IGFja2VkIGFueXdheSAqLwor
CQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJ
Y250X21rKys7CisJCWNvdWxkX2JlX3NlbnQtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsK
Kwl9CisjZW5kaWYKKwlpZiAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgIT0gY250
X21rKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlTQ1RQX1BSSU5URigiTG9jYWwgQXVkaXQgc2F5
cyB0aGVyZSBhcmUgJWQgZm9yIHJldHJhbiBhc29jIGNudDolZCB3ZSBtYXJrZWQ6JWQgdGhpcyB0
aW1lXG4iLAorCQkJICAgIGNudF9taywgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQs
IG51bV9tayk7CisjZW5kaWYKKyNpZm5kZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCXN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ID0gY250X21rOworI2VuZGlmCisJfQorCWlmIChh
dWRpdF90ZikgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LAorCQkJIkF1ZGl0IHRvdGFs
IGZsaWdodCBkdWUgdG8gbmVnYXRpdmUgdmFsdWUgbmV0OiVwXG4iLAorCQkJKHZvaWQgKiluZXQp
OworCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA9IDA7CisJCXN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0X2NvdW50ID0gMDsKKwkJLyogQ2xlYXIgYWxsIG5ldHdvcmtzIGZsaWdodCBzaXplICovCisJ
CVRBSUxRX0ZPUkVBQ0gobG5ldHMsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJ
bG5ldHMtPmZsaWdodF9zaXplID0gMDsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjQsCisJ
CQkJIk5ldDolcCBjLWYgY3duZDolZCBzc3RocmVzaDolZFxuIiwKKwkJCQkodm9pZCAqKWxuZXRz
LCBsbmV0cy0+Y3duZCwgbG5ldHMtPnNzdGhyZXNoKTsKKwkJfQorCQlUQUlMUV9GT1JFQUNIKGNo
aywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAoY2hrLT5zZW50
IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0
cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX1VQLAorCQkJCQkJICAgICAgIGNoay0+d2hvVG8t
PmZsaWdodF9zaXplLAorCQkJCQkJICAgICAgIGNoay0+Ym9va19zaXplLAorCQkJCQkJICAgICAg
ICh1aW50MzJfdCkodWludHB0cl90KWNoay0+d2hvVG8sCisJCQkJCQkgICAgICAgY2hrLT5yZWMu
ZGF0YS50c24pOworCQkJCX0KKworCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UoY2hrKTsK
KwkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCBjaGspOworCQkJfQorCQl9CisJ
fQorCS8qIFdlIHJldHVybiAxIGlmIHdlIG9ubHkgaGF2ZSBhIHdpbmRvdyBwcm9iZSBvdXRzdGFu
ZGluZyAqLworCXJldHVybiAoMCk7Cit9CisKKworaW50CitzY3RwX3Qzcnh0X3RpbWVyKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisJaW50IHdpbl9w
cm9iZSwgbnVtX21rLCBudW1fYWJhbmRvbmVkOworCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2df
ZnIoMCwgMCwgMCwgU0NUUF9GUl9UM19USU1FT1VUKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQlz
dHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OworCisJCVRBSUxRX0ZPUkVBQ0gobG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0ID09IGxuZXQpIHsKKwkJCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIGxuZXQsIDEsIFNDVFBfQ1dORF9MT0dfRlJPTV9UMyk7CisJCQl9IGVsc2Ug
eworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbG5ldCwgMCwgU0NUUF9DV05EX0xPR19GUk9NX1Qz
KTsKKwkJCX0KKwkJfQorCX0KKwkvKiBGaW5kIGFuIGFsdGVybmF0ZSBhbmQgbWFyayB0aG9zZSBm
b3IgcmV0cmFuc21pc3Npb24gKi8KKwlpZiAoKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAm
JgorCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPCBuZXQtPm10dSkpIHsKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfdGltb3dpbmRvd3Byb2JlKTsKKwkJd2luX3Byb2JlID0gMTsKKwl9IGVs
c2UgeworCQl3aW5fcHJvYmUgPSAwOworCX0KKworCWlmICh3aW5fcHJvYmUgPT0gMCkgeworCQkv
KiBXZSBkb24ndCBkbyBub3JtYWwgdGhyZXNob2xkIG1hbmFnZW1lbnQgb24gd2luZG93IHByb2Jl
cyAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwKKwkJ
ICAgIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJCQkvKiBBc3NvY2lhdGlvbiB3YXMg
ZGVzdHJveWVkICovCisJCQlyZXR1cm4gKDEpOworCQl9IGVsc2UgeworCQkJaWYgKG5ldCAhPSBz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkvKiBzZW5kIGEgaW1tZWRpYXRl
IEhCIGlmIG91ciBSVE8gaXMgc3RhbGUgKi8KKwkJCQlzdHJ1Y3QgdGltZXZhbCBub3c7CisJCQkJ
dW5zaWduZWQgaW50IG1zX2dvbmVieTsKKworCQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZub3cpOworCQkJCWlmIChuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3NlYykgeworCQkJCQltc19n
b25lYnkgPSAobm93LnR2X3NlYyAtIG5ldC0+bGFzdF9zZW50X3RpbWUudHZfc2VjKSAqIDEwMDA7
CisJCQkJfSBlbHNlIHsKKwkJCQkJbXNfZ29uZWJ5ID0gMDsKKwkJCQl9CisJCQkJaWYgKChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpID09IDApIHsKKwkJCQkJaWYgKChtc19nb25lYnkg
PiBuZXQtPlJUTykgfHwgKG5ldC0+UlRPID09IDApKSB7CisJCQkJCQkvKgorCQkJCQkJICogbm8g
cmVjZW50IGZlZWQgYmFjayBpbiBhbiBSVE8gb3IKKwkJCQkJCSAqIG1vcmUsIHJlcXVlc3QgYSBS
VFQgdXBkYXRlCisJCQkJCQkgKi8KKwkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQkv
KgorCQkgKiBGb3IgYSB3aW5kb3cgcHJvYmUgd2UgZG9uJ3QgcGVuYWxpemUgdGhlIG5ldCdzIGJ1
dCBvbmx5CisJCSAqIHRoZSBhc3NvY2lhdGlvbi4gVGhpcyBtYXkgZmFpbCBpdCBpZiBTQUNLcyBh
cmUgbm90IGNvbWluZworCQkgKiBiYWNrLiBJZiBzYWNrJ3MgYXJlIGNvbWluZyB3aXRoIHJ3bmQg
bG9ja2VkIGF0IDAsIHdlIHdpbGwKKwkJICogY29udGludWUgdG8gaG9sZCB0aGluZ3Mgd2FpdGlu
ZyBmb3IgcnduZCB0byByYWlzZQorCQkgKi8KKwkJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1l
bnQoaW5wLCBzdGNiLCBOVUxMLAorCQkgICAgc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykpIHsK
KwkJCS8qIEFzc29jaWF0aW9uIHdhcyBkZXN0cm95ZWQgKi8KKwkJCXJldHVybiAoMSk7CisJCX0K
Kwl9CisJaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID4gMCkgeworCQlpZiAobmV0LT5w
Zl90aHJlc2hvbGQgPCBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7CisJCQlhbHQgPSBzY3RwX2Zp
bmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDIpOworCQl9IGVsc2UgeworCQkgICAgICAgIC8q
CisJCQkgKiBDTVQ6IFVzaW5nIFJUWF9TU1RIUkVTSCBwb2xpY3kgZm9yIENNVC4KKwkJCSAqIElm
IENNVCBpcyBiZWluZyB1c2VkLCB0aGVuIHBpY2sgZGVzdCB3aXRoCisJCQkgKiBsYXJnZXN0IHNz
dGhyZXNoIGZvciBhbnkgcmV0cmFuc21pc3Npb24uCisJCQkgKi8KKwkJCWFsdCA9IHNjdHBfZmlu
ZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMSk7CisJCQkvKgorCQkJICogQ1VDdjI6IElmIGEg
ZGlmZmVyZW50IGRlc3QgaXMgcGlja2VkIGZvcgorCQkJICogdGhlIHJldHJhbnNtaXNzaW9uLCB0
aGVuIG5ldworCQkJICogKHJ0eC0pcHNldWRvX2N1bWFjayBuZWVkcyB0byBiZSB0cmFja2VkCisJ
CQkgKiBmb3Igb3JpZyBkZXN0LiBMZXQgQ1VDdjIgdHJhY2sgbmV3IChydHgtKQorCQkJICogcHNl
dWRvLWN1bWFjayBhbHdheXMuCisJCQkgKi8KKwkJCW5ldC0+ZmluZF9wc2V1ZG9fY3VtYWNrID0g
MTsKKwkJCW5ldC0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJCX0KKwl9IGVsc2Ugewor
CQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDApOworCX0KKworCW51
bV9tayA9IDA7CisJbnVtX2FiYW5kb25lZCA9IDA7CisJKHZvaWQpc2N0cF9tYXJrX2FsbF9mb3Jf
cmVzZW5kKHN0Y2IsIG5ldCwgYWx0LCB3aW5fcHJvYmUsCisJCQkJICAgICAgJm51bV9taywgJm51
bV9hYmFuZG9uZWQpOworCS8qIEZSIExvc3MgcmVjb3ZlcnkganVzdCBlbmRlZCB3aXRoIHRoZSBU
My4gKi8KKwlzdGNiLT5hc29jLmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCisJLyog
Q01UIEZSIGxvc3MgcmVjb3ZlcnkgZW5kZWQgd2l0aCB0aGUgVDMgKi8KKwluZXQtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCWlmICgoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0
cF9jd25kX25ld190cmFuc21pc3Npb25fYmVnaW5zKSAmJgorCSAgICAobmV0LT5mbGlnaHRfc2l6
ZSA9PSAwKSkgeworCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJh
bnNtaXNzaW9uX2JlZ2lucykoc3RjYiwgbmV0KTsKKwl9CisKKwkvKgorCSAqIHNldHVwIHRoZSBz
YXQgbG9zcyByZWNvdmVyeSB0aGF0IHByZXZlbnRzIHNhdGVsbGl0ZSBjd25kIGFkdmFuY2UuCisJ
ICovCisJc3RjYi0+YXNvYy5zYXRfdDNfbG9zc19yZWNvdmVyeSA9IDE7CisJc3RjYi0+YXNvYy5z
YXRfdDNfcmVjb3ZlcnlfdHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcTsKKworCS8qIEJhY2tv
ZmYgdGhlIHRpbWVyIGFuZCBjd25kICovCisJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwg
bmV0LCB3aW5fcHJvYmUsIG51bV9taywgbnVtX2FiYW5kb25lZCk7CisJaWYgKCghKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB8fAorCSAgICAobmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1BGKSkgeworCQkvKiBNb3ZlIGFsbCBwZW5kaW5nIG92ZXIgdG9vICovCisJ
CXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKKworCQkvKiBHZXQgdGhlIGFk
ZHJlc3MgdGhhdCBmYWlsZWQsIHRvCisJCSAqIGZvcmNlIGEgbmV3IHNyYyBhZGRyZXNzIHNlbGVj
dG9uIGFuZAorCQkgKiBhIHJvdXRlIGFsbG9jYXRpb24uCisJCSAqLworCQlpZiAobmV0LT5yby5f
c19hZGRyKSB7CisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQluZXQtPnJv
Ll9zX2FkZHIgPSBOVUxMOworCQl9CisJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCisJ
CS8qIEZvcmNlIGEgcm91dGUgYWxsb2NhdGlvbiB0b28gKi8KKwkJaWYgKG5ldC0+cm8ucm9fcnQp
IHsKKwkJCVJURlJFRShuZXQtPnJvLnJvX3J0KTsKKwkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOwor
CQl9CisKKwkJLyogV2FzIGl0IG91ciBwcmltYXJ5PyAqLworCQlpZiAoKHN0Y2ItPmFzb2MucHJp
bWFyeV9kZXN0aW5hdGlvbiA9PSBuZXQpICYmIChhbHQgIT0gbmV0KSkgeworCQkJLyoKKwkJCSAq
IFllcywgbm90ZSBpdCBhcyBzdWNoIGFuZCBmaW5kIGFuIGFsdGVybmF0ZSBub3RlOgorCQkJICog
dGhpcyBtZWFucyBIQiBjb2RlIG11c3QgdXNlIHRoaXMgdG8gcmVzZW50IHRoZQorCQkJICogcHJp
bWFyeSBpZiBpdCBnb2VzIGFjdGl2ZSBBTkQgaWYgc29tZW9uZSBkb2VzIGEKKwkJCSAqIGNoYW5n
ZS1wcmltYXJ5IHRoZW4gdGhpcyBmbGFnIG11c3QgYmUgY2xlYXJlZAorCQkJICogZnJvbSBhbnkg
bmV0IHN0cnVjdHVyZXMuCisJCQkgKi8KKwkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgewor
CQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCQl9CisJ
CQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IGFsdDsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLmFsdGVybmF0ZS0+cmVmX2NvdW50LCAxKTsKKwkJfQorCX0KKwkvKgorCSAqIFNwZWNpYWwg
Y2FzZSBmb3IgY29va2llLWVjaG8nZWQgY2FzZSwgd2UgZG9uJ3QgZG8gb3V0cHV0IGJ1dCBtdXN0
CisJICogYXdhaXQgdGhlIENPT0tJRS1BQ0sgYmVmb3JlIHJldHJhbnNtaXNzaW9uCisJICovCisJ
aWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hP
RUQpIHsKKwkJLyoKKwkJICogSGVyZSB3ZSBqdXN0IHJlc2V0IHRoZSB0aW1lciBhbmQgc3RhcnQg
YWdhaW4gc2luY2Ugd2UKKwkJICogaGF2ZSBub3QgZXN0YWJsaXNoZWQgdGhlIGFzb2MKKwkJICov
CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0
KTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCkg
eworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpsY2hrOworCisJCWxjaGsgPSBzY3RwX3RyeV9h
ZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsKKwkJLyogQzMuIFNlZSBp
ZiB3ZSBuZWVkIHRvIHNlbmQgYSBGd2QtVFNOICovCisJCWlmIChTQ1RQX1RTTl9HVChzdGNiLT5h
c29jLmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2VxKSkg
eworCQkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCAmc3RjYi0+YXNvYyk7CisJCQlpZiAobGNoaykg
eworCQkJCS8qIEFzc3VyZSBhIHRpbWVyIGlzIHVwICovCisJCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbGNoay0+d2hvVG8pOwor
CQkJfQorCQl9CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQs
IG5ldC0+Y3duZCwgU0NUUF9DV05EX0xPR19GUk9NX1JUWCk7CisJfQorCXJldHVybiAoMCk7Cit9
CisKK2ludAorc2N0cF90MWluaXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCS8q
IGJ1bXAgdGhlIHRocmVzaG9sZHMgKi8KKwlpZiAoc3RjYi0+YXNvYy5kZWxheWVkX2Nvbm5lY3Rp
b24pIHsKKwkJLyoKKwkJICogc3BlY2lhbCBob29rIGZvciBkZWxheWVkIGNvbm5lY3Rpb24uIFRo
ZSBsaWJyYXJ5IGRpZCBOT1QKKwkJICogY29tcGxldGUgdGhlIHJlc3Qgb2YgaXRzIHNlbmRzLgor
CQkgKi8KKwkJc3RjYi0+YXNvYy5kZWxheWVkX2Nvbm5lY3Rpb24gPSAwOworCQlzY3RwX3NlbmRf
aW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm4gKDApOwor
CX0KKwlpZiAoU0NUUF9HRVRfU1RBVEUoKCZzdGNiLT5hc29jKSkgIT0gU0NUUF9TVEFURV9DT09L
SUVfV0FJVCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdl
bWVudChpbnAsIHN0Y2IsIG5ldCwKKwkgICAgc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1lcykpIHsK
KwkJLyogQXNzb2NpYXRpb24gd2FzIGRlc3Ryb3llZCAqLworCQlyZXR1cm4gKDEpOworCX0KKwlz
dGNiLT5hc29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPSAwOworCXNjdHBfYmFja29mZl9vbl90aW1l
b3V0KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgMSwgMCwgMCk7CisJaWYg
KHN0Y2ItPmFzb2MuaW5pdGlhbF9pbml0X3J0b19tYXggPCBuZXQtPlJUTykgeworCQluZXQtPlJU
TyA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9pbml0X3J0b19tYXg7CisJfQorCWlmIChzdGNiLT5hc29j
Lm51bW5ldHMgPiAxKSB7CisJCS8qIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSBhZGRyIHVzZSBp
dCAqLworCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisKKwkJYWx0ID0gc2N0cF9maW5kX2FsdGVy
bmF0ZV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLCAwKTsKKwkJaWYg
KGFsdCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCXNjdHBfbW92ZV9j
aHVua3NfZnJvbV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwkJ
CXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IGFsdDsKKwkJfQorCX0KKwkvKiBTZW5k
IG91dCBhIG5ldyBpbml0ICovCisJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICogRm9yIGNvb2tpZSBhbmQg
YXNjb25mIHdlIGFjdHVhbGx5IG5lZWQgdG8gZmluZCBhbmQgbWFyayBmb3IgcmVzZW5kLCB0aGVu
CisgKiBpbmNyZW1lbnQgdGhlIHJlc2VuZCBjb3VudGVyIChhZnRlciBhbGwgdGhlIHRocmVzaG9s
ZCBtYW5hZ2VtZW50IHN0dWZmIG9mCisgKiBjb3Vyc2UpLgorICovCitpbnQKK3NjdHBfY29va2ll
X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9uZXRzICphbHQ7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY29va2llOworCisJLyogZmly
c3QgYmVmb3JlIGFsbCBlbHNlIHdlIG11c3QgZmluZCB0aGUgY29va2llICovCisJVEFJTFFfRk9S
RUFDSChjb29raWUsICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7
CisJCWlmIChjb29raWUtPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0NPT0tJRV9FQ0hPKSB7CisJ
CQlicmVhazsKKwkJfQorCX0KKwlpZiAoY29va2llID09IE5VTEwpIHsKKwkJaWYgKFNDVFBfR0VU
X1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpIHsKKwkJCS8q
IEZPT0JBUiEgKi8KKwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvb2tpZSB0aW1lciBleHBpcmVkLCBidXQg
bm8gY29va2llIik7CisJCQlpbnAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1RJ
TUVSICsgU0NUUF9MT0NfMzsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNi
LCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJcGFuaWMoIkNvb2tpZSB0aW1lciBleHBpcmVzIGluIHdyb25nIHN0YXRlPyIpOwor
I2Vsc2UKKwkJCVNDVFBfUFJJTlRGKCJTdHJhbmdlIGluIHN0YXRlICVkIG5vdCBjb29raWUtZWNo
b2VkIHlldCBjLWUgdGltZXIgZXhwaXJlcz9cbiIsIFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29j
KSk7CisJCQlyZXR1cm4gKDApOworI2VuZGlmCisJCX0KKwkJcmV0dXJuICgwKTsKKwl9CisJLyog
T2sgd2UgZm91bmQgdGhlIGNvb2tpZSwgdGhyZXNob2xkIG1hbmFnZW1lbnQgbmV4dCAqLworCWlm
IChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgY29va2llLT53aG9UbywKKwkg
ICAgc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1lcykpIHsKKwkJLyogQXNzb2MgaXMgb3ZlciAqLwor
CQlyZXR1cm4gKDEpOworCX0KKwkvKgorCSAqIENsZWFyZWQgdGhyZXNob2xkIG1hbmFnZW1lbnQs
IG5vdyBsZXRzIGJhY2tvZmYgdGhlIGFkZHJlc3MKKwkgKiBhbmQgc2VsZWN0IGFuIGFsdGVybmF0
ZQorCSAqLworCXN0Y2ItPmFzb2MuZHJvcHBlZF9zcGVjaWFsX2NudCA9IDA7CisJc2N0cF9iYWNr
b2ZmX29uX3RpbWVvdXQoc3RjYiwgY29va2llLT53aG9UbywgMSwgMCwgMCk7CisJYWx0ID0gc2N0
cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgY29va2llLT53aG9UbywgMCk7CisJaWYgKGFsdCAh
PSBjb29raWUtPndob1RvKSB7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb29raWUtPndob1Rv
KTsKKwkJY29va2llLT53aG9UbyA9IGFsdDsKKwkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2Nv
dW50LCAxKTsKKwl9CisJLyogTm93IG1hcmsgdGhlIHJldHJhbiBpbmZvICovCisJaWYgKGNvb2tp
ZS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQlzY3RwX3Vjb3VudF9pbmNyKHN0
Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwl9CisJY29va2llLT5zZW50ID0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQ7CisJY29va2llLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVO
VF9PSzsKKwkvKgorCSAqIE5vdyBjYWxsIHRoZSBvdXRwdXQgcm91dGluZSB0byBraWNrIG91dCB0
aGUgY29va2llIGFnYWluLCBOb3RlIHdlCisJICogZG9uJ3QgbWFyayBhbnkgY2h1bmtzIGZvciBy
ZXRyYW4gc28gdGhhdCBGUiB3aWxsIG5lZWQgdG8ga2ljayBpbgorCSAqIHRvIG1vdmUgdGhlc2Ug
KG9yIGEgc2VuZCB0aW1lcikuCisJICovCisJcmV0dXJuICgwKTsKK30KKworaW50CitzY3RwX3N0
cnJlc2V0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqYWx0
OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnN0cnJzdCA9IE5VTEwsICpjaGsgPSBOVUxMOwor
CisJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJcmV0
dXJuICgwKTsKKwl9CisJLyogZmluZCB0aGUgZXhpc3RpbmcgU1RSUkVTRVQsIHdlIHVzZSB0aGUg
c2VxIG51bWJlciB3ZSBzZW50IG91dCBvbiAqLworCSh2b2lkKXNjdHBfZmluZF9zdHJlYW1fcmVz
ZXQoc3RjYiwgc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dCwgJnN0cnJzdCk7CisJaWYgKHN0
cnJzdCA9PSBOVUxMKSB7CisJCXJldHVybiAoMCk7CisJfQorCS8qIGRvIHRocmVzaG9sZCBtYW5h
Z2VtZW50ICovCisJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBzdHJy
c3QtPndob1RvLAorCSAgICBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkgeworCQkvKiBBc3Nv
YyBpcyBvdmVyICovCisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogQ2xlYXJlZCB0aHJlc2hv
bGQgbWFuYWdlbWVudCwgbm93IGxldHMgYmFja29mZiB0aGUgYWRkcmVzcworCSAqIGFuZCBzZWxl
Y3QgYW4gYWx0ZXJuYXRlCisJICovCisJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwgc3Ry
cnN0LT53aG9UbywgMSwgMCwgMCk7CisJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3Rj
Yiwgc3RycnN0LT53aG9UbywgMCk7CisJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0cnJzdC0+d2hv
VG8pOworCXN0cnJzdC0+d2hvVG8gPSBhbHQ7CisJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2Nv
dW50LCAxKTsKKworCS8qIFNlZSBpZiBhIEVDTiBFY2hvIGlzIGFsc28gc3RyYW5kZWQgKi8KKwlU
QUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25l
eHQpIHsKKwkJaWYgKChjaGstPndob1RvID09IG5ldCkgJiYKKwkJICAgIChjaGstPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNo
ay0+d2hvVG8pOworCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewor
CQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJCWNoay0+ZmxhZ3MgfD0g
Q0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29j
LnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQl9CisJCQljaGstPndob1RvID0gYWx0OworCQkJ
YXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKwkJfQorCX0KKwlpZiAoIShuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgeworCQkvKgorCQkgKiBJZiB0aGUg
YWRkcmVzcyB3ZW50IHVuLXJlYWNoYWJsZSwgd2UgbmVlZCB0byBtb3ZlIHRvCisJCSAqIGFsdGVy
bmF0ZXMgZm9yIEFMTCBjaGsncyBpbiBxdWV1ZQorCQkgKi8KKwkJc2N0cF9tb3ZlX2NodW5rc19m
cm9tX25ldChzdGNiLCBuZXQpOworCX0KKwkvKiBtYXJrIHRoZSByZXRyYW4gaW5mbyAqLworCWlm
IChzdHJyc3QtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCXNjdHBfdWNvdW50X2lu
Y3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCXN0cnJzdC0+c2VudCA9IFND
VFBfREFUQUdSQU1fUkVTRU5EOworCXN0cnJzdC0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01F
TlRfT0s7CisKKwkvKiByZXN0YXJ0IHRoZSB0aW1lciAqLworCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX1NUUlJFU0VULCBpbnAsIHN0Y2IsIHN0cnJzdC0+d2hvVG8pOworCXJldHVy
biAoMCk7Cit9CisKK2ludAorc2N0cF9hc2NvbmZfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sK
KwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqYXNjb25m
LCAqY2hrOworCisJLyogaXMgdGhpcyBhIGZpcnN0IHNlbmQsIG9yIGEgcmV0cmFuc21pc3Npb24/
ICovCisJaWYgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVlKSkgewor
CQkvKiBjb21wb3NlIGEgbmV3IEFTQ09ORiBjaHVuayBhbmQgc2VuZCBpdCAqLworCQlzY3RwX3Nl
bmRfYXNjb25mKHN0Y2IsIG5ldCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJ
CS8qCisJCSAqIFJldHJhbnNtaXNzaW9uIG9mIHRoZSBleGlzdGluZyBBU0NPTkYgaXMgbmVlZGVk
CisJCSAqLworCisJCS8qIGZpbmQgdGhlIGV4aXN0aW5nIEFTQ09ORiAqLworCQlhc2NvbmYgPSBU
QUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1ZSk7CisJCWlmIChhc2NvbmYg
PT0gTlVMTCkgeworCQkJcmV0dXJuICgwKTsKKwkJfQorCQkvKiBkbyB0aHJlc2hvbGQgbWFuYWdl
bWVudCAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIGFzY29u
Zi0+d2hvVG8sCisJCSAgICBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkgeworCQkJLyogQXNz
b2MgaXMgb3ZlciAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCQlpZiAoYXNjb25mLT5zbmRfY291
bnQgPiBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSB7CisJCQkvKgorCQkJICogU29tZXRoaW5n
IGlzIHJvdHRlbjogb3VyIHBlZXIgaXMgbm90IHJlc3BvbmRpbmcgdG8KKwkJCSAqIEFTQ09ORnMg
YnV0IGFwcGFyZW50bHkgaXMgdG8gb3RoZXIgY2h1bmtzLiAgaS5lLiBpdAorCQkJICogaXMgbm90
IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBjaHVuayB0eXBlIHVwcGVyIGJpdHMuCisJCQkgKiBNYXJr
IHRoaXMgcGVlciBhcyBBU0NPTkYgaW5jYXBhYmxlIGFuZCBjbGVhbnVwLgorCQkJICovCisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiYXNjb25mX3RpbWVyOiBQZWVyIGhhcyBub3QgcmVz
cG9uZGVkIHRvIG91ciByZXBlYXRlZCBBU0NPTkZzXG4iKTsKKwkJCXNjdHBfYXNjb25mX2NsZWFu
dXAoc3RjYiwgbmV0KTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyoKKwkJICogY2xlYXJlZCB0
aHJlc2hvbGQgbWFuYWdlbWVudCwgc28gbm93IGJhY2tvZmYgdGhlIG5ldCBhbmQKKwkJICogc2Vs
ZWN0IGFuIGFsdGVybmF0ZQorCQkgKi8KKwkJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwg
YXNjb25mLT53aG9UbywgMSwgMCwgMCk7CisJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0
KHN0Y2IsIGFzY29uZi0+d2hvVG8sIDApOworCQlpZiAoYXNjb25mLT53aG9UbyAhPSBhbHQpIHsK
KwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihhc2NvbmYtPndob1RvKTsKKwkJCWFzY29uZi0+d2hv
VG8gPSBhbHQ7CisJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQl9CisK
KwkJLyogU2VlIGlmIGFuIEVDTiBFY2hvIGlzIGFsc28gc3RyYW5kZWQgKi8KKwkJVEFJTFFfRk9S
RUFDSChjaGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CQlpZiAoKGNoay0+d2hvVG8gPT0gbmV0KSAmJgorCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5p
ZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndo
b1RvKTsKKwkJCQljaGstPndob1RvID0gYWx0OworCQkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9E
QVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7
CisJCQkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQkJCXNjdHBf
dWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJCX0KKwkJ
CQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQkJfQorCQl9CisJCVRBSUxR
X0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7
CisJCQlpZiAoY2hrLT53aG9UbyAhPSBhbHQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
Y2hrLT53aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCQlhdG9taWNfYWRkX2ludCgm
YWx0LT5yZWZfY291bnQsIDEpOworCQkJfQorCQkJaWYgKGFzY29uZi0+c2VudCAhPSBTQ1RQX0RB
VEFHUkFNX1JFU0VORCAmJiBjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpCisJCQkJ
c2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQlj
aGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKKwkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktf
RkxBR1NfRlJBR01FTlRfT0s7CisJCX0KKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX1JFQUNIQUJMRSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgYWRkcmVzcyB3ZW50IHVuLXJl
YWNoYWJsZSwgd2UgbmVlZCB0byBtb3ZlCisJCQkgKiB0byB0aGUgYWx0ZXJuYXRlIGZvciBBTEwg
Y2h1bmtzIGluIHF1ZXVlCisJCQkgKi8KKwkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3Rj
YiwgbmV0KTsKKwkJfQorCQkvKiBtYXJrIHRoZSByZXRyYW4gaW5mbyAqLworCQlpZiAoYXNjb25m
LT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJc2N0cF91Y291bnRfaW5jcihzdGNi
LT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCWFzY29uZi0+c2VudCA9IFNDVFBfREFU
QUdSQU1fUkVTRU5EOworCQlhc2NvbmYtPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09L
OworCisJCS8qIHNlbmQgYW5vdGhlciBBU0NPTkYgaWYgYW55IGFuZCB3ZSBjYW4gZG8gKi8KKwkJ
c2N0cF9zZW5kX2FzY29uZihzdGNiLCBhbHQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwl9CisJ
cmV0dXJuICgwKTsKK30KKworLyogTW9iaWxpdHkgYWRhcHRhdGlvbiAqLwordm9pZAorc2N0cF9k
ZWxldGVfcHJpbV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQ
X1VOVVNFRCkKK3sKKwlpZiAoc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkgPT0gTlVMTCkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImRlbGV0ZV9wcmltX3RpbWVyOiBkZWxldGVk
X3ByaW1hcnkgaXMgbm90IHN0b3JlZC4uLlxuIik7CisJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJCXJldHVybjsKKwl9CisJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJkZWxldGVfcHJpbV90aW1lcjogZmluaXNoZWQgdG8g
a2VlcCBkZWxldGVkIHByaW1hcnkgIik7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05G
MSwgJnN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5LT5yby5fbF9hZGRyLnNhKTsKKwlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOworCXN0Y2ItPmFzb2Mu
ZGVsZXRlZF9wcmltYXJ5ID0gTlVMTDsKKwlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCXJldHVybjsKK30KKworLyoKKyAqIEZvciB0
aGUgc2h1dGRvd24gYW5kIHNodXRkb3duLWFjaywgd2UgZG8gbm90IGtlZXAgb25lIGFyb3VuZCBv
biB0aGUKKyAqIGNvbnRyb2wgcXVldWUuIFRoaXMgbWVhbnMgd2UgbXVzdCBnZW5lcmF0ZSBhIG5l
dyBvbmUgYW5kIGNhbGwgdGhlIGdlbmVyYWwKKyAqIGNodW5rIG91dHB1dCByb3V0aW5lLCBBRlRF
UiBoYXZpbmcgZG9uZSB0aHJlc2hvbGQgbWFuYWdlbWVudC4KKyAqIEl0IGlzIGFzc3VtZWQgdGhh
dCBuZXQgaXMgbm9uLU5VTEwuCisgKi8KK2ludAorc2N0cF9zaHV0ZG93bl90aW1lcihzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBf
bmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX25ldHMgKmFsdDsKKworCS8qIGZpcnN0IHRocmVz
aG9sZCBtYW5hZ2VtZW50ICovCisJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBz
dGNiLCBuZXQsIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJCS8qIEFzc29jIGlzIG92
ZXIgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwg
bmV0LCAxLCAwLCAwKTsKKwkvKiBzZWNvbmQgc2VsZWN0IGFuIGFsdGVybmF0aXZlICovCisJYWx0
ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbmV0LCAwKTsKKworCS8qIHRoaXJkIGdl
bmVyYXRlIGEgc2h1dGRvd24gaW50byB0aGUgcXVldWUgZm9yIG91dCBuZXQgKi8KKwlzY3RwX3Nl
bmRfc2h1dGRvd24oc3RjYiwgYWx0KTsKKworCS8qIGZvdXJ0aCByZXN0YXJ0IHRpbWVyICovCisJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sIGlucCwgc3RjYiwgYWx0
KTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3NjdHBfc2h1dGRvd25hY2tfdGltZXIoc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisKKwkvKiBmaXJzdCB0aHJl
c2hvbGQgbWFuYWdlbWVudCAqLworCWlmIChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwg
c3RjYiwgbmV0LCBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkgeworCQkvKiBBc3NvYyBpcyBv
dmVyICovCisJCXJldHVybiAoMSk7CisJfQorCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2Is
IG5ldCwgMSwgMCwgMCk7CisJLyogc2Vjb25kIHNlbGVjdCBhbiBhbHRlcm5hdGl2ZSAqLworCWFs
dCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMCk7CisKKwkvKiB0aGlyZCBn
ZW5lcmF0ZSBhIHNodXRkb3duIGludG8gdGhlIHF1ZXVlIGZvciBvdXQgbmV0ICovCisJc2N0cF9z
ZW5kX3NodXRkb3duX2FjayhzdGNiLCBhbHQpOworCisJLyogZm91cnRoIHJlc3RhcnQgdGltZXIg
Ki8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSywgaW5wLCBz
dGNiLCBhbHQpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2F1ZGl0X3N0
cmVhbV9xdWV1ZXNfZm9yX3NpemUoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNw
OworCXVuc2lnbmVkIGludCBpLCBjaGtzX2luX3F1ZXVlID0gMDsKKwlpbnQgYmVpbmdfZmlsbGVk
ID0gMDsKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgT05MWSBjYWxsZWQgd2hlbiB0aGUgc2Vu
ZC9zZW50IHF1ZXVlcyBhcmUgZW1wdHkuCisJICovCisJaWYgKChzdGNiID09IE5VTEwpIHx8IChp
bnAgPT0gTlVMTCkpCisJCXJldHVybjsKKworCWlmIChzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCkgeworCQlTQ1RQX1BSSU5URigiSG1tLCBzZW50X3F1ZXVlX3JldHJhbl9jbnQgaXMg
bm9uLXplcm8gJWRcbiIsCisJCQkgICAgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQp
OworCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7CisJfQorCWlmIChzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2IsICZzdGNiLT5hc29jKSkg
eworCQkvKiBObyBzdHJlYW0gc2NoZWR1bGVyIGluZm9ybWF0aW9uLCBpbml0aWFsaXplIHNjaGVk
dWxlciAqLworCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgJnN0
Y2ItPmFzb2MsIDApOworCQlpZiAoIXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNf
ZW1wdHkoc3RjYiwgJnN0Y2ItPmFzb2MpKSB7CisJCQkvKiB5ZXAsIHdlIGxvc3QgYSBzdHJlYW0g
b3IgdHdvICovCisJCQlTQ1RQX1BSSU5URigiRm91bmQgYWRkaXRpb25hbCBzdHJlYW1zIE5PVCBt
YW5hZ2VkIGJ5IHNjaGVkdWxlciwgY29ycmVjdGVkXG4iKTsKKwkJfSBlbHNlIHsKKwkJCS8qIG5v
IHN0cmVhbXMgbG9zdCAqLworCQkJc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA9
IDA7CisJCX0KKwl9CisJLyogQ2hlY2sgdG8gc2VlIGlmIHNvbWUgZGF0YSBxdWV1ZWQsIGlmIHNv
IHJlcG9ydCBpdCAqLworCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsg
aSsrKSB7CisJCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1
ZSkpIHsKKwkJCVRBSUxRX0ZPUkVBQ0goc3AsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVl
dWUsIG5leHQpIHsKKwkJCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSkKKwkJCQkJYmVpbmdfZmls
bGVkKys7CisJCQkJY2hrc19pbl9xdWV1ZSsrOworCQkJfQorCQl9CisJfQorCWlmIChjaGtzX2lu
X3F1ZXVlICE9IHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCkgeworCQlTQ1RQX1BSSU5URigi
SG1tLCBzdHJlYW0gcXVldWUgY250IGF0ICVkIEkgY291bnRlZCAlZCBpbiBzdHJlYW0gb3V0IHdo
ZWVsXG4iLAorCQkJICAgIHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCwgY2hrc19pbl9xdWV1
ZSk7CisJfQorCWlmIChjaGtzX2luX3F1ZXVlKSB7CisJCS8qIGNhbGwgdGhlIG91dHB1dCBxdWV1
ZSBmdW5jdGlvbiAqLworCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVU
X0ZST01fVDMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWlmICgoVEFJTFFfRU1QVFkoJnN0Y2It
PmFzb2Muc2VuZF9xdWV1ZSkpICYmCisJCSAgICAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZSkpKSB7CisJCQkvKgorCQkJICogUHJvYmFibHkgc2hvdWxkIGdvIGluIGFuZCBtYWtl
IGl0IGdvIGJhY2sgdGhyb3VnaAorCQkJICogYW5kIGFkZCBmcmFnbWVudHMgYWxsb3dlZAorCQkJ
ICovCisJCQlpZiAoYmVpbmdfZmlsbGVkID09IDApIHsKKwkJCQlTQ1RQX1BSSU5URigiU3RpbGwg
bm90aGluZyBtb3ZlZCAlZCBjaHVua3MgYXJlIHN0dWNrXG4iLAorCQkJCQkgICAgY2hrc19pbl9x
dWV1ZSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX1BSSU5URigiRm91bmQgbm8gY2h1
bmtzIG9uIGFueSBxdWV1ZSB0b3Q6JWx1XG4iLAorCQkJICAgICh1X2xvbmcpc3RjYi0+YXNvYy50
b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSk7CisJCXN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVl
X3NpemUgPSAwOworCX0KK30KKworaW50CitzY3RwX2hlYXJ0YmVhdF90aW1lcihzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0
cyAqbmV0KQoreworCXVpbnQ4X3QgbmV0X3dhc19wZjsKKworCWlmIChuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfUEYpIHsKKwkJbmV0X3dhc19wZiA9IDE7CisJfSBlbHNlIHsKKwkJbmV0X3dh
c19wZiA9IDA7CisJfQorCWlmIChuZXQtPmhiX3Jlc3BvbmRlZCA9PSAwKSB7CisJCWlmIChuZXQt
PnJvLl9zX2FkZHIpIHsKKwkJCS8qIEludmFsaWRhdGUgdGhlIHNyYyBhZGRyZXNzIGlmIHdlIGRp
ZCBub3QgZ2V0CisJCQkgKiBhIHJlc3BvbnNlIGxhc3QgdGltZS4KKwkJCSAqLworCQkJc2N0cF9m
cmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKKwkJ
CW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQl9CisJCXNjdHBfYmFja29mZl9vbl90aW1l
b3V0KHN0Y2IsIG5ldCwgMSwgMCwgMCk7CisJCWlmIChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50
KGlucCwgc3RjYiwgbmV0LCBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkgeworCQkJLyogQXNz
b2MgaXMgb3ZlciAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwkvKiBaZXJvIFBCQSwgaWYg
aXQgbmVlZHMgaXQgKi8KKwlpZiAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkKSB7CisJCW5ldC0+
cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+YXNvYy50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSA+IDApICYmCisJICAgIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5k
X3F1ZXVlKSkgJiYKKwkgICAgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSkg
eworCQlzY3RwX2F1ZGl0X3N0cmVhbV9xdWV1ZXNfZm9yX3NpemUoaW5wLCBzdGNiKTsKKwl9CisJ
aWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpICYmCisJICAgICEoKG5ldF93
YXNfcGYgPT0gMCkgJiYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpKSB7CisJCS8q
IHdoZW4gbW92ZSB0byBQRiBkdXJpbmcgdGhyZXNob2xkIG1hbmdlbWVudCwgYSBIQiBoYXMgYmVl
bgorCQkgICBxdWV1ZWQgaW4gdGhhdCByb3V0aW5lICovCisJCXVpbnQzMl90IG1zX2dvbmVfYnk7
CisKKwkJaWYgKChuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3NlYyA+IDApIHx8CisJCSAgICAobmV0
LT5sYXN0X3NlbnRfdGltZS50dl91c2VjID4gMCkpIHsKKyNpZmRlZiBfX0ZyZWVCU0RfXworCQkJ
c3RydWN0IHRpbWV2YWwgZGlmZjsKKworCQkJU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmRpZmYpOwor
CQkJdGltZXZhbHN1YigmZGlmZiwgJm5ldC0+bGFzdF9zZW50X3RpbWUpOworI2Vsc2UKKwkJCXN0
cnVjdCB0aW1ldmFsIGRpZmYsIG5vdzsKKworCQkJU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7
CisJCQl0aW1lcnN1Yigmbm93LCAmbmV0LT5sYXN0X3NlbnRfdGltZSwgJmRpZmYpOworI2VuZGlm
CisJCQltc19nb25lX2J5ID0gKHVpbnQzMl90KShkaWZmLnR2X3NlYyAqIDEwMDApICsKKwkJCSAg
ICAgICAgICAgICAodWludDMyX3QpKGRpZmYudHZfdXNlYyAvIDEwMDApOworCQl9IGVsc2Ugewor
CQkJbXNfZ29uZV9ieSA9IDB4ZmZmZmZmZmY7CisJCX0KKwkJaWYgKChtc19nb25lX2J5ID49IG5l
dC0+aGVhcnRfYmVhdF9kZWxheSkgfHwKKwkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FE
RFJfUEYpKSB7CisJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBfcGF0aG10dV90aW1lcihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDMyX3QgbmV4dF9tdHUsIG10dTsKKworCW5l
eHRfbXR1ID0gc2N0cF9nZXRfbmV4dF9tdHUobmV0LT5tdHUpOworCisJaWYgKChuZXh0X210dSA+
IG5ldC0+bXR1KSAmJiAobmV0LT5wb3J0ID09IDApKSB7CisJCWlmICgobmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCA9PSAwKSB8fAorCQkgICAgKG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKSB8fAorCQkg
ICAgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQp
KSB7CisJCQlpZiAoKG5ldC0+cm8uX3NfYWRkciAhPSBOVUxMKSAmJiAobmV0LT5yby5fc19hZGRy
LT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkpIHsKKwkJCQlzY3RwX2ZyZWVf
aWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsKKwkJCQlu
ZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJCX0gZWxzZSAgaWYgKG5ldC0+cm8uX3NfYWRk
ciA9PSBOVUxMKSB7CisjaWYgZGVmaW5lZChJTkVUNikgJiYgZGVmaW5lZChTQ1RQX0VNQkVEREVE
X1Y2X1NDT1BFKQorCQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2NvcGVp
ZCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkg
fHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwkJCQkJKHZvaWQpaW42X2VtYmVkc2NvcGUo
JnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCk7CisjZWxzZQorCQkJCQkodm9pZClp
bjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBOVUxMLCBOVUxMKTsK
KyNlbmRpZgorI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQkJCSh2b2lkKXNhNl9lbWJlZHNj
b3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSk7CisjZWxzZQorCQkJCQko
dm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KTsKKyNlbmRpZgorCQkJ
CX0KKyNlbmRpZgorCisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19z
ZWxlY3Rpb24oaW5wLAorCQkJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCQkJKHNjdHBfcm91dGVfdCAq
KSZuZXQtPnJvLAorCQkJCQkJCQkJCW5ldCwgMCwgc3RjYi0+YXNvYy52cmZfaWQpOworI2lmIGRl
ZmluZWQoSU5FVDYpICYmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKwkJCQlpZiAo
bmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCQlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9h
ZGRyOworI2lmZGVmIFNDVFBfS0FNRQorCQkJCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYp
OworI2Vsc2UKKwkJCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9h
ZGRyLCBOVUxMKTsKKyNlbmRpZgkvKiBTQ1RQX0tBTUUgKi8KKwkJCQl9CisjZW5kaWYJLyogSU5F
VDYgKi8KKwkJCX0KKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIpCisJCQkJbmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCA9IDE7CisJCX0KKwkJaWYgKG5ldC0+cm8uX3NfYWRkcikgeworCQkJbXR1ID0gU0NU
UF9HQVRIRVJfTVRVX0ZST01fUk9VVEUobmV0LT5yby5fc19hZGRyLCAmbmV0LT5yby5fc19hZGRy
LnNhLCBuZXQtPnJvLnJvX3J0KTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
CisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJbXR1IC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsK
KwkJCX0KKyNlbmRpZgorCQkJaWYgKG10dSA+IG5leHRfbXR1KSB7CisJCQkJbmV0LT5tdHUgPSBu
ZXh0X210dTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0LT5tdHUgPSBtdHU7CisJCQl9CisJCX0KKwl9
CisJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKK30KKwordm9pZAorc2N0cF9hdXRv
Y2xvc2VfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCB0aW1ldmFsIHRu
LCAqdGltX3RvdXNlOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCWludCB0aWNr
c19nb25lX2J5OworCisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnRuKTsKKwlpZiAoc3Rj
Yi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorCSAgICBzY3RwX2lzX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCS8qIEF1dG8gY2xvc2UgaXMgb24g
Ki8KKwkJYXNvYyA9ICZzdGNiLT5hc29jOworCQkvKiBwaWNrIHRoZSB0aW1lIHRvIHVzZSAqLwor
CQlpZiAoYXNvYy0+dGltZV9sYXN0X3JjdmQudHZfc2VjID4KKwkJICAgIGFzb2MtPnRpbWVfbGFz
dF9zZW50LnR2X3NlYykgeworCQkJdGltX3RvdXNlID0gJmFzb2MtPnRpbWVfbGFzdF9yY3ZkOwor
CQl9IGVsc2UgeworCQkJdGltX3RvdXNlID0gJmFzb2MtPnRpbWVfbGFzdF9zZW50OworCQl9CisJ
CS8qIE5vdyBoYXMgbG9uZyBlbm91Z2ggdHJhbnNwaXJlZCB0byBhdXRvY2xvc2U/ICovCisJCXRp
Y2tzX2dvbmVfYnkgPSBTRUNfVE9fVElDS1ModG4udHZfc2VjIC0gdGltX3RvdXNlLT50dl9zZWMp
OworCQlpZiAoKHRpY2tzX2dvbmVfYnkgPiAwKSAmJgorCQkgICAgKHRpY2tzX2dvbmVfYnkgPj0g
KGludClhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNrcykpIHsKKwkJCS8qCisJCQkgKiBhdXRvY2xv
c2UgdGltZSBoYXMgaGl0LCBjYWxsIHRoZSBvdXRwdXQgcm91dGluZSwKKwkJCSAqIHdoaWNoIHNo
b3VsZCBkbyBub3RoaW5nIGp1c3QgdG8gYmUgU1VSRSB3ZSBkb24ndAorCQkJICogaGF2ZSBoYW5n
aW5nIGRhdGEuIFdlIGNhbiB0aGVuIHNhZmVseSBjaGVjayB0aGUKKwkJCSAqIHF1ZXVlcyBhbmQg
a25vdyB0aGF0IHdlIGFyZSBjbGVhciB0byBzZW5kCisJCQkgKiBzaHV0ZG93bgorCQkJICovCisJ
CQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQVVUT0NMT1NF
X1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCS8qIEFyZSB3ZSBjbGVhbj8gKi8KKwkJCWlm
IChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCSAgICBUQUlMUV9FTVBUWSgm
YXNvYy0+c2VudF9xdWV1ZSkpIHsKKwkJCQkvKgorCQkJCSAqIHRoZXJlIGlzIG5vdGhpbmcgcXVl
dWVkIHRvIHNlbmQsIHNvIEknbQorCQkJCSAqIGRvbmUuLi4KKwkJCQkgKi8KKwkJCQlpZiAoU0NU
UF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB7CisJCQkJCS8q
IG9ubHkgc2VuZCBTSFVURE9XTiAxc3QgdGltZSB0aHJ1ICovCisJCQkJCXN0cnVjdCBzY3RwX25l
dHMgKm5ldHA7CisKKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRF
X09QRU4pIHx8CisJCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9T
SFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNf
Y3VycmVzdGFiKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRF
X1NIVVRET1dOX1NFTlQpOworCQkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RB
VEVfU0hVVERPV05fUEVORElORyk7CisJCQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3du
KHN0Y2IpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCQkJCW5ldHAgPSBz
dGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW5ldHAgPSBzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJCX0KKwkJCQkJc2N0cF9zZW5kX3NodXRkb3du
KHN0Y2IsIG5ldHApOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTiwKKwkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgbmV0cCk7CisJCQkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCQkJ
IHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCQkJIG5ldHApOworCQkJCX0KKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCS8qCisJCQkgKiBObyBhdXRvIGNsb3NlIGF0IHRoaXMgdGltZSwgcmVzZXQgdC1v
IHRvIGNoZWNrCisJCQkgKiBsYXRlcgorCQkJICovCisJCQlpbnQgdG1wOworCisJCQkvKiBmb29s
IHRoZSB0aW1lciBzdGFydHVwIHRvIHVzZSB0aGUgdGltZSBsZWZ0ICovCisJCQl0bXAgPSBhc29j
LT5zY3RwX2F1dG9jbG9zZV90aWNrczsKKwkJCWFzb2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tzIC09
IHRpY2tzX2dvbmVfYnk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BVVRP
Q0xPU0UsIGlucCwgc3RjYiwKKwkJCSAgICBuZXQpOworCQkJLyogcmVzdG9yZSB0aGUgcmVhbCB0
aWNrIHZhbHVlICovCisJCQlhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNrcyA9IHRtcDsKKwkJfQor
CX0KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGlt
ZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgKaW5kZXggZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uODIyZDViNDAwN2JhNmNiYzY2
ZmQ3NTg1NjZlM2Q5YzY5N2E3NmM1NiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfdGltZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF90aW1lci5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlm
aWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lz
Y28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAy
MDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEp
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICog
ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBT
eXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdGltZXIuaCAyOTU3
MDkgMjAxNi0wMi0xNyAxODowNDoyMlogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9O
RVRJTkVUX1NDVFBfVElNRVJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9USU1FUl9IXworCisj
aWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKKyNkZWZpbmUg
U0NUUF9SVFRfU0hJRlQgMworI2RlZmluZSBTQ1RQX1JUVF9WQVJfU0hJRlQgMgorCitzdHJ1Y3Qg
c2N0cF9uZXRzICoKK3NjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVjdCBzY3RwX3RjYiAqLAor
ICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50IG1vZGUpOworCitpbnQKK3NjdHBfdDNyeHRfdGlt
ZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNj
dHBfbmV0cyAqKTsKK2ludAorc2N0cF90MWluaXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwg
c3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKK2ludAorc2N0cF9z
aHV0ZG93bl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworaW50CitzY3RwX2hlYXJ0YmVhdF90aW1lcihzdHJ1Y3Qg
c2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICop
OworCitpbnQKK3NjdHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBz
Y3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfcGF0aG10
dV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1
Y3Qgc2N0cF9uZXRzICopOworCitpbnQKK3NjdHBfc2h1dGRvd25hY2tfdGltZXIoc3RydWN0IHNj
dHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsK
K2ludAorc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKworaW50CitzY3Rw
X2FzY29uZl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lkCitzY3RwX2RlbGV0ZV9wcmltX3RpbWVyKHN0
cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25l
dHMgKik7CisKK3ZvaWQKK3NjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICos
IHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCk7CisKK3ZvaWQg
c2N0cF9hdWRpdF9yZXRyYW5taXNzaW9uX3F1ZXVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICop
OworCit2b2lkIHNjdHBfaXRlcmF0b3JfdGltZXIoc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0KTsK
KworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwg
ZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZp
bmVkKEFQUExFX01PVU5UQUlOTElPTikKK3ZvaWQgc2N0cF9zbG93dGltbyh2b2lkKTsKKyNlbHNl
Cit2b2lkIHNjdHBfZ2Moc3RydWN0IGlucGNiaW5mbyAqKTsKKyNlbmRpZgorI2VuZGlmCisKKyNl
bmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF91aW8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oCmluZGV4IGU2
OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjlkMzFhYTE1OTBhMDMwYzgx
ZDAyY2FiYmYwZmNiYjViNmViMDFhMzYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3Vpby5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3Vpby5oCkBAIC0wLDAgKzEsMTQ3MCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3Vpby5oIDMyNjY3MiAy
MDE3LTEyLTA3IDIyOjE5OjA4WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElO
RVRfU0NUUF9VSU9fSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9VSU9fSF8KKworI2lmIChkZWZp
bmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChLRVJORUwpKQorI2lmbmRlZiBfS0VSTkVMCisjZGVm
aW5lIF9LRVJORUwKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhKGRlZmluZWQoX19XaW5kb3dzX18p
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmICEgZGVmaW5lZChfS0VS
TkVMKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+
CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFn
bWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKQorI2lmIGRlZmluZWQoX0tFUk5FTCkKKyNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9pbi5oPgorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiB1aW50MzJfdCBzY3RwX2Fzc29jX3Q7
CisKKyNkZWZpbmUgU0NUUF9GVVRVUkVfQVNTT0MgIDAKKyNkZWZpbmUgU0NUUF9DVVJSRU5UX0FT
U09DIDEKKyNkZWZpbmUgU0NUUF9BTExfQVNTT0MgICAgIDIKKworc3RydWN0IHNjdHBfZXZlbnQg
eworCXNjdHBfYXNzb2NfdCBzZV9hc3NvY19pZDsKKwl1aW50MTZfdCAgICAgc2VfdHlwZTsKKwl1
aW50OF90ICAgICAgc2Vfb247Cit9OworCisvKiBDb21wYXRpYmlsaXR5IHRvIHByZXZpb3VzIGRl
ZmluZSdzICovCisjZGVmaW5lIHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50cyBzY3RwX3N0cmVhbV9y
ZXNldF9ldmVudAorCisvKiBPbi9PZmYgc2V0dXAgZm9yIHN1YnNjcmlwdGlvbiB0byBldmVudHMg
Ki8KK3N0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSB7CisJdWludDhfdCBzY3RwX2RhdGFfaW9f
ZXZlbnQ7CisJdWludDhfdCBzY3RwX2Fzc29jaWF0aW9uX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9h
ZGRyZXNzX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQ7CisJdWludDhf
dCBzY3RwX3BlZXJfZXJyb3JfZXZlbnQ7CisJdWludDhfdCBzY3RwX3NodXRkb3duX2V2ZW50Owor
CXVpbnQ4X3Qgc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hZGFw
dGF0aW9uX2xheWVyX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudDsK
Kwl1aW50OF90IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKKwl1aW50OF90IHNjdHBfc3RyZWFtX3Jl
c2V0X2V2ZW50OworfTsKKworLyogYW5jaWxsYXJ5IGRhdGEgdHlwZXMgKi8KKyNkZWZpbmUgU0NU
UF9JTklUCTB4MDAwMQorI2RlZmluZSBTQ1RQX1NORFJDVgkweDAwMDIKKyNkZWZpbmUgU0NUUF9F
WFRSQ1YJMHgwMDAzCisjZGVmaW5lIFNDVFBfU05ESU5GTyAgICAweDAwMDQKKyNkZWZpbmUgU0NU
UF9SQ1ZJTkZPICAgIDB4MDAwNQorI2RlZmluZSBTQ1RQX05YVElORk8gICAgMHgwMDA2CisjZGVm
aW5lIFNDVFBfUFJJTkZPICAgICAweDAwMDcKKyNkZWZpbmUgU0NUUF9BVVRISU5GTyAgIDB4MDAw
OAorI2RlZmluZSBTQ1RQX0RTVEFERFJWNCAgMHgwMDA5CisjZGVmaW5lIFNDVFBfRFNUQUREUlY2
ICAweDAwMGEKKworLyoKKyAqIGFuY2lsbGFyeSBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RydWN0
IHNjdHBfaW5pdG1zZyB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPCA4MDAwMDAKKwkvKiBUaGlzIGlzIGEgYnVnLiBOb3QgZml4ZWQgZm9yIEFCSSBjb21w
YXRpYmlsaXR5ICovCisJdWludDMyX3Qgc2luaXRfbnVtX29zdHJlYW1zOworCXVpbnQzMl90IHNp
bml0X21heF9pbnN0cmVhbXM7CisjZWxzZQorCXVpbnQxNl90IHNpbml0X251bV9vc3RyZWFtczsK
Kwl1aW50MTZfdCBzaW5pdF9tYXhfaW5zdHJlYW1zOworI2VuZGlmCisJdWludDE2X3Qgc2luaXRf
bWF4X2F0dGVtcHRzOworCXVpbnQxNl90IHNpbml0X21heF9pbml0X3RpbWVvOworfTsKKworLyog
V2UgYWRkIDk2IGJ5dGVzIHRvIHRoZSBzaXplIG9mIHNjdHBfc25kcmN2aW5mby4KKyAqIFRoaXMg
bWFrZXMgdGhlIGN1cnJlbnQgc3RydWN0dXJlIDEyOCBieXRlcyBsb25nCisgKiB3aGljaCBpcyBu
aWNlbHkgNjQgYml0IGFsaWduZWQgYnV0IGFsc28gaGFzIHJvb20KKyAqIGZvciB1cyB0byBhZGQg
bW9yZSBhbmQga2VlcCBBQkkgY29tcGF0aWJpbGl0eS4KKyAqIEZvciBleGFtcGxlLCBhbHJlYWR5
IHdlIGhhdmUgdGhlIHNjdHBfZXh0cmN2aW5mbworICogd2hlbiBlbmFibGVkIHdoaWNoIGlzIDQ4
IGJ5dGVzLgorICovCisKKy8qCisgKiBUaGUgYXNzb2MgdXAgbmVlZHMgYSB2ZXJmaWQKKyAqIGFs
bCBzZW5kcmN2aW5mbydzIG5lZWQgYSB2ZXJmaWQgZm9yIFNFTkRJTkcgb25seS4KKyAqLworCisK
KyNkZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRCA5MgorI2RlZmluZSBTQ1RQX0FMSUdOX1JFU1Zf
UEFEX1NIT1JUIDc2CisKK3N0cnVjdCBzY3RwX3NuZHJjdmluZm8geworCXVpbnQxNl90IHNpbmZv
X3N0cmVhbTsKKwl1aW50MTZfdCBzaW5mb19zc247CisJdWludDE2X3Qgc2luZm9fZmxhZ3M7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA4MDAwMDAKKwl1
aW50MTZfdCBzaW5mb19wcl9wb2xpY3k7CisjZW5kaWYKKwl1aW50MzJfdCBzaW5mb19wcGlkOwor
CXVpbnQzMl90IHNpbmZvX2NvbnRleHQ7CisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsKKwl1
aW50MzJfdCBzaW5mb190c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNzb2Nf
dCBzaW5mb19hc3NvY19pZDsKKwl1aW50MTZfdCBzaW5mb19rZXludW1iZXI7CisJdWludDE2X3Qg
c2luZm9fa2V5bnVtYmVyX3ZhbGlkOworCXVpbnQ4X3QgIF9fcmVzZXJ2ZV9wYWRbU0NUUF9BTElH
Tl9SRVNWX1BBRF07Cit9OworCitzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvIHsKKwl1aW50MTZfdCBz
aW5mb19zdHJlYW07CisJdWludDE2X3Qgc2luZm9fc3NuOworCXVpbnQxNl90IHNpbmZvX2ZsYWdz
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgODAwMDAw
CisJdWludDE2X3Qgc2luZm9fcHJfcG9saWN5OworI2VuZGlmCisJdWludDMyX3Qgc2luZm9fcHBp
ZDsKKwl1aW50MzJfdCBzaW5mb19jb250ZXh0OworCXVpbnQzMl90IHNpbmZvX3RpbWV0b2xpdmU7
IC8qIHNob3VsZCBoYXZlIGJlZW4gc2luZm9fcHJfdmFsdWUgKi8KKwl1aW50MzJfdCBzaW5mb190
c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19p
ZDsKKwl1aW50MTZfdCBzZXJpbmZvX25leHRfZmxhZ3M7CisJdWludDE2X3Qgc2VyaW5mb19uZXh0
X3N0cmVhbTsKKwl1aW50MzJfdCBzZXJpbmZvX25leHRfYWlkOworCXVpbnQzMl90IHNlcmluZm9f
bmV4dF9sZW5ndGg7CisJdWludDMyX3Qgc2VyaW5mb19uZXh0X3BwaWQ7CisJdWludDE2X3Qgc2lu
Zm9fa2V5bnVtYmVyOworCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92YWxpZDsKKwl1aW50OF90
ICBfX3Jlc2VydmVfcGFkW1NDVFBfQUxJR05fUkVTVl9QQURfU0hPUlRdOworfTsKKyNkZWZpbmUg
c2luZm9fcHJfdmFsdWUgc2luZm9fdGltZXRvbGl2ZQorI2RlZmluZSBzcmVpbmZvX25leHRfZmxh
Z3Mgc2VyaW5mb19uZXh0X2ZsYWdzCisjZGVmaW5lIHNyZWluZm9fbmV4dF9zdHJlYW0gc2VyaW5m
b19uZXh0X3N0cmVhbQorI2RlZmluZSBzcmVpbmZvX25leHRfYWlkIHNlcmluZm9fbmV4dF9haWQK
KyNkZWZpbmUgc3JlaW5mb19uZXh0X2xlbmd0aCBzZXJpbmZvX25leHRfbGVuZ3RoCisjZGVmaW5l
IHNyZWluZm9fbmV4dF9wcGlkIHNlcmluZm9fbmV4dF9wcGlkCisKK3N0cnVjdCBzY3RwX3NuZGlu
Zm8geworCXVpbnQxNl90IHNuZF9zaWQ7CisJdWludDE2X3Qgc25kX2ZsYWdzOworCXVpbnQzMl90
IHNuZF9wcGlkOworCXVpbnQzMl90IHNuZF9jb250ZXh0OworCXNjdHBfYXNzb2NfdCBzbmRfYXNz
b2NfaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wcmluZm8geworCXVpbnQxNl90IHByX3BvbGljeTsK
Kwl1aW50MzJfdCBwcl92YWx1ZTsKK307CisKK3N0cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvIHsK
Kwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDMyX3QgcHJfdmFsdWU7CisJc2N0cF9hc3NvY190
IHByX2Fzc29jX2lkOworfTsKKworc3RydWN0IHNjdHBfYXV0aGluZm8geworCXVpbnQxNl90IGF1
dGhfa2V5bnVtYmVyOworfTsKKworc3RydWN0IHNjdHBfcmN2aW5mbyB7CisJdWludDE2X3QgcmN2
X3NpZDsKKwl1aW50MTZfdCByY3Zfc3NuOworCXVpbnQxNl90IHJjdl9mbGFnczsKKwl1aW50MzJf
dCByY3ZfcHBpZDsKKwl1aW50MzJfdCByY3ZfdHNuOworCXVpbnQzMl90IHJjdl9jdW10c247CisJ
dWludDMyX3QgcmN2X2NvbnRleHQ7CisJc2N0cF9hc3NvY190IHJjdl9hc3NvY19pZDsKK307CisK
K3N0cnVjdCBzY3RwX254dGluZm8geworCXVpbnQxNl90IG54dF9zaWQ7CisJdWludDE2X3Qgbnh0
X2ZsYWdzOworCXVpbnQzMl90IG54dF9wcGlkOworCXVpbnQzMl90IG54dF9sZW5ndGg7CisJc2N0
cF9hc3NvY190IG54dF9hc3NvY19pZDsKK307CisKKyNkZWZpbmUgU0NUUF9OT19ORVhUX01TRyAg
ICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfQVZBSUwgICAgICAgIDB4MDAw
MQorI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUgICAweDAwMDIKKyNkZWZpbmUgU0NU
UF9ORVhUX01TR19JU19VTk9SREVSRUQgMHgwMDA0CisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNf
Tk9USUZJQ0FUSU9OIDB4MDAwOAorCitzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiB7CisJc3RydWN0IHNj
dHBfcmN2aW5mbyByZWN2dl9yY3ZpbmZvOworCXN0cnVjdCBzY3RwX254dGluZm8gcmVjdnZfbnh0
aW5mbzsKK307CisKKyNkZWZpbmUgU0NUUF9SRUNWVl9OT0lORk8gIDAKKyNkZWZpbmUgU0NUUF9S
RUNWVl9SQ1ZJTkZPIDEKKyNkZWZpbmUgU0NUUF9SRUNWVl9OWFRJTkZPIDIKKyNkZWZpbmUgU0NU
UF9SRUNWVl9STiAgICAgIDMKKworI2RlZmluZSBTQ1RQX1NFTkRWX05PSU5GTyAgIDAKKyNkZWZp
bmUgU0NUUF9TRU5EVl9TTkRJTkZPICAxCisjZGVmaW5lIFNDVFBfU0VORFZfUFJJTkZPICAgMgor
I2RlZmluZSBTQ1RQX1NFTkRWX0FVVEhJTkZPIDMKKyNkZWZpbmUgU0NUUF9TRU5EVl9TUEEgICAg
ICA0CisKK3N0cnVjdCBzY3RwX3NlbmR2X3NwYSB7CisJdWludDMyX3Qgc2VuZHZfZmxhZ3M7CisJ
c3RydWN0IHNjdHBfc25kaW5mbyBzZW5kdl9zbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5mbyBz
ZW5kdl9wcmluZm87CisJc3RydWN0IHNjdHBfYXV0aGluZm8gc2VuZHZfYXV0aGluZm87Cit9Owor
CisjZGVmaW5lIFNDVFBfU0VORF9TTkRJTkZPX1ZBTElEICAweDAwMDAwMDAxCisjZGVmaW5lIFND
VFBfU0VORF9QUklORk9fVkFMSUQgICAweDAwMDAwMDAyCisjZGVmaW5lIFNDVFBfU0VORF9BVVRI
SU5GT19WQUxJRCAweDAwMDAwMDA0CisKK3N0cnVjdCBzY3RwX3NuZF9hbGxfY29tcGxldGVzIHsK
Kwl1aW50MTZfdCBzYWxsX3N0cmVhbTsKKwl1aW50MTZfdCBzYWxsX2ZsYWdzOworCXVpbnQzMl90
IHNhbGxfcHBpZDsKKwl1aW50MzJfdCBzYWxsX2NvbnRleHQ7CisJdWludDMyX3Qgc2FsbF9udW1f
c2VudDsKKwl1aW50MzJfdCBzYWxsX251bV9mYWlsZWQ7Cit9OworCisvKiBGbGFncyB0aGF0IGdv
IGludG8gdGhlIHNpbmZvLT5zaW5mb19mbGFncyBmaWVsZCAqLworI2RlZmluZSBTQ1RQX05PVElG
SUNBVElPTiAgICAgMHgwMDEwIC8qIG5leHQgbWVzc2FnZSBpcyBhIG5vdGlmaWNhdGlvbiAqLwor
I2RlZmluZSBTQ1RQX0NPTVBMRVRFICAgICAgICAgMHgwMDIwIC8qIG5leHQgbWVzc2FnZSBpcyBj
b21wbGV0ZSAqLworI2RlZmluZSBTQ1RQX0VPRiAgICAgICAgICAgICAgMHgwMTAwIC8qIFN0YXJ0
IHNodXRkb3duIHByb2NlZHVyZXMgKi8KKyNkZWZpbmUgU0NUUF9BQk9SVCAgICAgICAgICAgIDB4
MDIwMCAvKiBTZW5kIGFuIEFCT1JUIHRvIHBlZXIgKi8KKyNkZWZpbmUgU0NUUF9VTk9SREVSRUQg
ICAgICAgIDB4MDQwMCAvKiBNZXNzYWdlIGlzIHVuLW9yZGVyZWQgKi8KKyNkZWZpbmUgU0NUUF9B
RERSX09WRVIgICAgICAgIDB4MDgwMCAvKiBPdmVycmlkZSB0aGUgcHJpbWFyeS1hZGRyZXNzICov
CisjZGVmaW5lIFNDVFBfU0VOREFMTCAgICAgICAgICAweDEwMDAgLyogU2VuZCB0aGlzIG9uIGFs
bCBhc3NvY2lhdGlvbnMgKi8KKyNkZWZpbmUgU0NUUF9FT1IgICAgICAgICAgICAgIDB4MjAwMCAv
KiBlbmQgb2YgbWVzc2FnZSBzaWduYWwgKi8KKyNkZWZpbmUgU0NUUF9TQUNLX0lNTUVESUFURUxZ
IDB4NDAwMCAvKiBTZXQgSS1CaXQgKi8KKworI2RlZmluZSBJTlZBTElEX1NJTkZPX0ZMQUcoeCkg
KCgoeCkgJiAweGZmZmZmZmYwIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYgfihTQ1RQX0VPRiB8IFNDVFBfQUJPUlQgfCBTQ1RQX1VOT1JERVJFRCB8XAorCQkJCSAgICAg
ICAgU0NUUF9BRERSX09WRVIgfCBTQ1RQX1NFTkRBTEwgfCBTQ1RQX0VPUiB8XAorCQkJCQlTQ1RQ
X1NBQ0tfSU1NRURJQVRFTFkpKSAhPSAwKQorLyogZm9yIHRoZSBlbmRwb2ludCAqLworCisvKiBU
aGUgbG93ZXIgZm91ciBiaXRzIGlzIGFuIGVudW1lcmF0aW9uIG9mIFBSLVNDVFAgcG9saWNpZXMg
Ki8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX05PTkUgMHgwMDAwIC8qIFJlbGlhYmxlIHRyYW5zZmVy
ICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9UVEwgIDB4MDAwMSAvKiBUaW1lIGJhc2VkIFBSLVND
VFAgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX1BSSU8gMHgwMDAyIC8qIEJ1ZmZlciBiYXNlZCBQ
Ui1TQ1RQICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9CVUYgIFNDVFBfUFJfU0NUUF9QUklPIC8q
IEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBTQ1RQX1BSX1NDVFBfUlRY
ICAweDAwMDMgLyogTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBiYXNlZCBQUi1TQ1RQICovCisj
ZGVmaW5lIFNDVFBfUFJfU0NUUF9NQVggIFNDVFBfUFJfU0NUUF9SVFgKKyNkZWZpbmUgU0NUUF9Q
Ul9TQ1RQX0FMTCAgMHgwMDBmIC8qIFVzZWQgZm9yIGFnZ3JlZ2F0ZWQgc3RhdHMgKi8KKworI2Rl
ZmluZSBQUl9TQ1RQX1BPTElDWSh4KSAgICAgICAgICgoeCkgJiAweDBmKQorI2RlZmluZSBQUl9T
Q1RQX0VOQUJMRUQoeCkgICAgICAgICgoUFJfU0NUUF9QT0xJQ1koeCkgIT0gU0NUUF9QUl9TQ1RQ
X05PTkUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFBSX1NDVFBf
UE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9BTEwpKQorI2RlZmluZSBQUl9TQ1RQX1RUTF9FTkFC
TEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfVFRMKQorI2RlZmlu
ZSBQUl9TQ1RQX0JVRl9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BS
X1NDVFBfQlVGKQorI2RlZmluZSBQUl9TQ1RQX1JUWF9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BP
TElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfUlRYKQorI2RlZmluZSBQUl9TQ1RQX0lOVkFMSURfUE9M
SUNZKHgpIChQUl9TQ1RQX1BPTElDWSh4KSA+IFNDVFBfUFJfU0NUUF9NQVgpCisjZGVmaW5lIFBS
X1NDVFBfVkFMSURfUE9MSUNZKHgpICAgKFBSX1NDVFBfUE9MSUNZKHgpIDw9IFNDVFBfUFJfU0NU
UF9NQVgpCisKKy8qIFN0YXQncyAqLworc3RydWN0IHNjdHBfcGNiaW5mbyB7CisJdWludDMyX3Qg
ZXBfY291bnQ7CisJdWludDMyX3QgYXNvY19jb3VudDsKKwl1aW50MzJfdCBsYWRkcl9jb3VudDsK
Kwl1aW50MzJfdCByYWRkcl9jb3VudDsKKwl1aW50MzJfdCBjaGtfY291bnQ7CisJdWludDMyX3Qg
cmVhZHFfY291bnQ7CisJdWludDMyX3QgZnJlZV9jaHVua3M7CisJdWludDMyX3Qgc3RyZWFtX29x
dWU7Cit9OworCitzdHJ1Y3Qgc2N0cF9zb2Nrc3RhdCB7CisJc2N0cF9hc3NvY190IHNzX2Fzc29j
X2lkOworCXVpbnQzMl90IHNzX3RvdGFsX3NuZGJ1ZjsKKwl1aW50MzJfdCBzc190b3RhbF9yZWN2
X2J1ZjsKK307CisKKy8qCisgKiBub3RpZmljYXRpb24gZXZlbnQgc3RydWN0dXJlcworICovCisK
Ky8qCisgKiBhc3NvY2lhdGlvbiBjaGFuZ2UgZXZlbnQKKyAqLworc3RydWN0IHNjdHBfYXNzb2Nf
Y2hhbmdlIHsKKwl1aW50MTZfdCBzYWNfdHlwZTsKKwl1aW50MTZfdCBzYWNfZmxhZ3M7CisJdWlu
dDMyX3Qgc2FjX2xlbmd0aDsKKwl1aW50MTZfdCBzYWNfc3RhdGU7CisJdWludDE2X3Qgc2FjX2Vy
cm9yOworCXVpbnQxNl90IHNhY19vdXRib3VuZF9zdHJlYW1zOworCXVpbnQxNl90IHNhY19pbmJv
dW5kX3N0cmVhbXM7CisJc2N0cF9hc3NvY190IHNhY19hc3NvY19pZDsKKwl1aW50OF90IHNhY19p
bmZvW107Cit9OworCisvKiBzYWNfc3RhdGUgdmFsdWVzICovCisjZGVmaW5lIFNDVFBfQ09NTV9V
UCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0NPTU1fTE9TVCAgICAgICAgICAweDAw
MDIKKyNkZWZpbmUgU0NUUF9SRVNUQVJUICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIFNDVFBf
U0hVVERPV05fQ09NUCAgICAgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0NBTlRfU1RSX0FTU09DICAg
ICAweDAwMDUKKworLyogc2FjX2luZm8gdmFsdWVzICovCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQ
UE9SVFNfUFIJCQkweDAxCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVUSAkJMHgwMgor
I2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORgkJMHgwMworI2RlZmluZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX01VTFRJQlVGCQkweDA0CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNf
UkVfQ09ORklHCQkweDA1CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfSU5URVJMRUFWSU5H
CTB4MDYKKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NQVgJCQkweDA2CisvKgorICogQWRk
cmVzcyBldmVudAorICovCitzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgeworCXVpbnQxNl90IHNw
Y190eXBlOworCXVpbnQxNl90IHNwY19mbGFnczsKKwl1aW50MzJfdCBzcGNfbGVuZ3RoOworCXN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwY19hYWRkcjsKKwl1aW50MzJfdCBzcGNfc3RhdGU7CisJ
dWludDMyX3Qgc3BjX2Vycm9yOworCXNjdHBfYXNzb2NfdCBzcGNfYXNzb2NfaWQ7Cit9OworCisv
KiBwYWRkciBzdGF0ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BRERSX0FWQUlMQUJMRQkweDAw
MDEKKyNkZWZpbmUgU0NUUF9BRERSX1VOUkVBQ0hBQkxFCTB4MDAwMgorI2RlZmluZSBTQ1RQX0FE
RFJfUkVNT1ZFRAkweDAwMDMKKyNkZWZpbmUgU0NUUF9BRERSX0FEREVECQkweDAwMDQKKyNkZWZp
bmUgU0NUUF9BRERSX01BREVfUFJJTQkweDAwMDUKKyNkZWZpbmUgU0NUUF9BRERSX0NPTkZJUk1F
RAkweDAwMDYKKworI2RlZmluZSBTQ1RQX0FDVElWRQkJMHgwMDAxCS8qIFNDVFBfQUREUl9SRUFD
SEFCTEUgKi8KKyNkZWZpbmUgU0NUUF9JTkFDVElWRQkJMHgwMDAyCS8qIG5laXRoZXIgU0NUUF9B
RERSX1JFQUNIQUJMRQorCQkJCQkgICBub3IgU0NUUF9BRERSX1VOQ09ORklSTUVEICovCisjZGVm
aW5lIFNDVFBfVU5DT05GSVJNRUQJMHgwMjAwCS8qIFNDVFBfQUREUl9VTkNPTkZJUk1FRCAqLwor
CisvKiByZW1vdGUgZXJyb3IgZXZlbnRzICovCitzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igewor
CXVpbnQxNl90IHNyZV90eXBlOworCXVpbnQxNl90IHNyZV9mbGFnczsKKwl1aW50MzJfdCBzcmVf
bGVuZ3RoOworCXVpbnQxNl90IHNyZV9lcnJvcjsKKwlzY3RwX2Fzc29jX3Qgc3JlX2Fzc29jX2lk
OworCXVpbnQ4X3Qgc3JlX2RhdGFbXTsKK307CisKKy8qIGRhdGEgc2VuZCBmYWlsdXJlIGV2ZW50
IChkZXByZWNhdGVkKSAqLworc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgeworCXVpbnQxNl90IHNz
Zl90eXBlOworCXVpbnQxNl90IHNzZl9mbGFnczsKKwl1aW50MzJfdCBzc2ZfbGVuZ3RoOworCXVp
bnQzMl90IHNzZl9lcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNzZl9pbmZvOworCXNj
dHBfYXNzb2NfdCBzc2ZfYXNzb2NfaWQ7CisJdWludDhfdCBzc2ZfZGF0YVtdOworfTsKKworLyog
ZGF0YSBzZW5kIGZhaWx1cmUgZXZlbnQgKG5vdCBkZXByZWNhdGVkKSAqLworc3RydWN0IHNjdHBf
c2VuZF9mYWlsZWRfZXZlbnQgeworCXVpbnQxNl90IHNzZmVfdHlwZTsKKwl1aW50MTZfdCBzc2Zl
X2ZsYWdzOworCXVpbnQzMl90IHNzZmVfbGVuZ3RoOworCXVpbnQzMl90IHNzZmVfZXJyb3I7CisJ
c3RydWN0IHNjdHBfc25kaW5mbyBzc2ZlX2luZm87CisJc2N0cF9hc3NvY190IHNzZmVfYXNzb2Nf
aWQ7CisJdWludDhfdCAgc3NmZV9kYXRhW107Cit9OworCisvKiBmbGFnIHRoYXQgaW5kaWNhdGVz
IHN0YXRlIG9mIGRhdGEgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX1VOU0VOVAkweDAwMDEJLyogaW5x
dWV1ZSBuZXZlciBvbiB3aXJlICovCisjZGVmaW5lIFNDVFBfREFUQV9TRU5UCQkweDAwMDIJLyog
b24gd2lyZSBhdCBmYWlsdXJlICovCisKKy8qIHNodXRkb3duIGV2ZW50ICovCitzdHJ1Y3Qgc2N0
cF9zaHV0ZG93bl9ldmVudCB7CisJdWludDE2X3Qgc3NlX3R5cGU7CisJdWludDE2X3Qgc3NlX2Zs
YWdzOworCXVpbnQzMl90IHNzZV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHNzZV9hc3NvY19pZDsK
K307CisKKy8qIEFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlvbiBzdHVmZiAqLworc3RydWN0IHNj
dHBfYWRhcHRhdGlvbl9ldmVudCB7CisJdWludDE2X3Qgc2FpX3R5cGU7CisJdWludDE2X3Qgc2Fp
X2ZsYWdzOworCXVpbnQzMl90IHNhaV9sZW5ndGg7CisJdWludDMyX3Qgc2FpX2FkYXB0YXRpb25f
aW5kOworCXNjdHBfYXNzb2NfdCBzYWlfYXNzb2NfaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9zZXRh
ZGFwdGF0aW9uIHsKKwl1aW50MzJfdCBzc2JfYWRhcHRhdGlvbl9pbmQ7Cit9OworCisvKiBjb21w
YXRpYmxlIG9sZCBzcGVsbGluZyAqLworc3RydWN0IHNjdHBfYWRhcHRpb25fZXZlbnQgeworCXVp
bnQxNl90IHNhaV90eXBlOworCXVpbnQxNl90IHNhaV9mbGFnczsKKwl1aW50MzJfdCBzYWlfbGVu
Z3RoOworCXVpbnQzMl90IHNhaV9hZGFwdGlvbl9pbmQ7CisJc2N0cF9hc3NvY190IHNhaV9hc3Nv
Y19pZDsKK307CisKK3N0cnVjdCBzY3RwX3NldGFkYXB0aW9uIHsKKwl1aW50MzJfdCBzc2JfYWRh
cHRpb25faW5kOworfTsKKworCisvKgorICogUGFydGlhbCBEZWxpdmVyeSBBUEkgZXZlbnQKKyAq
Lworc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgeworCXVpbnQxNl90IHBkYXBpX3R5cGU7CisJdWlu
dDE2X3QgcGRhcGlfZmxhZ3M7CisJdWludDMyX3QgcGRhcGlfbGVuZ3RoOworCXVpbnQzMl90IHBk
YXBpX2luZGljYXRpb247CisJdWludDE2X3QgcGRhcGlfc3RyZWFtOworCXVpbnQxNl90IHBkYXBp
X3NlcTsKKwlzY3RwX2Fzc29jX3QgcGRhcGlfYXNzb2NfaWQ7Cit9OworCisvKiBpbmRpY2F0aW9u
IHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRAkweDAwMDEK
KworCisvKgorICogYXV0aGVudGljYXRpb24ga2V5IGV2ZW50CisgKi8KK3N0cnVjdCBzY3RwX2F1
dGhrZXlfZXZlbnQgeworCXVpbnQxNl90IGF1dGhfdHlwZTsKKwl1aW50MTZfdCBhdXRoX2ZsYWdz
OworCXVpbnQzMl90IGF1dGhfbGVuZ3RoOworCXVpbnQxNl90IGF1dGhfa2V5bnVtYmVyOworCXVp
bnQxNl90IGF1dGhfYWx0a2V5bnVtYmVyOworCXVpbnQzMl90IGF1dGhfaW5kaWNhdGlvbjsKKwlz
Y3RwX2Fzc29jX3QgYXV0aF9hc3NvY19pZDsKK307CisKKy8qIGluZGljYXRpb24gdmFsdWVzICov
CisjZGVmaW5lIFNDVFBfQVVUSF9ORVdfS0VZCTB4MDAwMQorI2RlZmluZSBTQ1RQX0FVVEhfTkVX
S0VZCVNDVFBfQVVUSF9ORVdfS0VZCisjZGVmaW5lIFNDVFBfQVVUSF9OT19BVVRICTB4MDAwMgor
I2RlZmluZSBTQ1RQX0FVVEhfRlJFRV9LRVkJMHgwMDAzCisKKworc3RydWN0IHNjdHBfc2VuZGVy
X2RyeV9ldmVudCB7CisJdWludDE2X3Qgc2VuZGVyX2RyeV90eXBlOworCXVpbnQxNl90IHNlbmRl
cl9kcnlfZmxhZ3M7CisJdWludDMyX3Qgc2VuZGVyX2RyeV9sZW5ndGg7CisJc2N0cF9hc3NvY190
IHNlbmRlcl9kcnlfYXNzb2NfaWQ7Cit9OworCisKKy8qCisgKiBTdHJlYW0gcmVzZXQgZXZlbnQg
LSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQKKyAqLworc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X2V2ZW50IHsKKwl1aW50MTZfdCBzdHJyZXNldF90eXBlOworCXVpbnQxNl90
IHN0cnJlc2V0X2ZsYWdzOworCXVpbnQzMl90IHN0cnJlc2V0X2xlbmd0aDsKKwlzY3RwX2Fzc29j
X3Qgc3RycmVzZXRfYXNzb2NfaWQ7CisJdWludDE2X3Qgc3RycmVzZXRfc3RyZWFtX2xpc3RbXTsK
K307CisKKy8qIGZsYWdzIGluIHN0cmVhbV9yZXNldF9ldmVudCAoc3RycmVzZXRfZmxhZ3MpICov
CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTiAgMHgwMDAxCisjZGVmaW5l
IFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTiAgMHgwMDAyCisjZGVmaW5lIFNDVFBfU1RS
RUFNX1JFU0VUX0RFTklFRCAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VU
X0ZBSUxFRCAgICAgICAgMHgwMDA4CisKKy8qCisgKiBBc3NvYyByZXNldCBldmVudCAtIHN1YnNj
cmliZSB0byBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UCisgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX3Jl
c2V0X2V2ZW50IHsKKwl1aW50MTZfdCAJYXNzb2NyZXNldF90eXBlOworCXVpbnQxNl90CWFzc29j
cmVzZXRfZmxhZ3M7CisJdWludDMyX3QJYXNzb2NyZXNldF9sZW5ndGg7CisJc2N0cF9hc3NvY190
CWFzc29jcmVzZXRfYXNzb2NfaWQ7CisJdWludDMyX3QJYXNzb2NyZXNldF9sb2NhbF90c247CisJ
dWludDMyX3QJYXNzb2NyZXNldF9yZW1vdGVfdHNuOworfTsKKworI2RlZmluZSBTQ1RQX0FTU09D
X1JFU0VUX0RFTklFRAkJMHgwMDA0CisjZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRfRkFJTEVECQkw
eDAwMDgKKworLyoKKyAqIFN0cmVhbSBjaGFuZ2UgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9T
VFJFQU1fQ0hBTkdFX0VWRU5UCisgKi8KK3N0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQg
eworCXVpbnQxNl90CXN0cmNoYW5nZV90eXBlOworCXVpbnQxNl90CXN0cmNoYW5nZV9mbGFnczsK
Kwl1aW50MzJfdAlzdHJjaGFuZ2VfbGVuZ3RoOworCXNjdHBfYXNzb2NfdAlzdHJjaGFuZ2VfYXNz
b2NfaWQ7CisJdWludDE2X3QJc3RyY2hhbmdlX2luc3RybXM7CisJdWludDE2X3QJc3RyY2hhbmdl
X291dHN0cm1zOworfTsKKworI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0VfREVOSUVECTB4MDAw
NAorI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVECTB4MDAwOAorCisKKy8qIFNDVFAg
bm90aWZpY2F0aW9uIGV2ZW50ICovCitzdHJ1Y3Qgc2N0cF90bHYgeworCXVpbnQxNl90IHNuX3R5
cGU7CisJdWludDE2X3Qgc25fZmxhZ3M7CisJdWludDMyX3Qgc25fbGVuZ3RoOworfTsKKwordW5p
b24gc2N0cF9ub3RpZmljYXRpb24geworCXN0cnVjdCBzY3RwX3RsdiBzbl9oZWFkZXI7CisJc3Ry
dWN0IHNjdHBfYXNzb2NfY2hhbmdlIHNuX2Fzc29jX2NoYW5nZTsKKwlzdHJ1Y3Qgc2N0cF9wYWRk
cl9jaGFuZ2Ugc25fcGFkZHJfY2hhbmdlOworCXN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciBzbl9y
ZW1vdGVfZXJyb3I7CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgc25fc2VuZF9mYWlsZWQ7CisJ
c3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgc25fc2h1dGRvd25fZXZlbnQ7CisJc3RydWN0IHNj
dHBfYWRhcHRhdGlvbl9ldmVudCBzbl9hZGFwdGF0aW9uX2V2ZW50OworCS8qIGNvbXBhdGliaWxp
dHkgc2FtZSBhcyBhYm92ZSAqLworCXN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50IHNuX2FkYXB0
aW9uX2V2ZW50OworCXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHNuX3BkYXBpX2V2ZW50OworCXN0
cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgc25fYXV0aF9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9zZW5k
ZXJfZHJ5X2V2ZW50IHNuX3NlbmRlcl9kcnlfZXZlbnQ7CisJc3RydWN0IHNjdHBfc2VuZF9mYWls
ZWRfZXZlbnQgc25fc2VuZF9mYWlsZWRfZXZlbnQ7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X2V2ZW50IHNuX3N0cnJlc2V0X2V2ZW50OworCXN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50
ICBzbl9hc3NvY3Jlc2V0X2V2ZW50OworCXN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQg
c25fc3RyY2hhbmdlX2V2ZW50OworfTsKKworLyogbm90aWZpY2F0aW9uIHR5cGVzICovCisjZGVm
aW5lIFNDVFBfQVNTT0NfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZp
bmUgU0NUUF9QRUVSX0FERFJfQ0hBTkdFICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmlu
ZSBTQ1RQX1JFTU9URV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5l
IFNDVFBfU0VORF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUg
U0NUUF9TSFVURE9XTl9FVkVOVCAgICAgICAgICAgICAgICAgICAgIDB4MDAwNQorI2RlZmluZSBT
Q1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiAgICAgICAgICAgICAgMHgwMDA2CisvKiBzYW1lIGFz
IGFib3ZlICovCisjZGVmaW5lIFNDVFBfQURBUFRJT05fSU5ESUNBVElPTiAgICAgICAgICAgICAg
ICAweDAwMDYKKyNkZWZpbmUgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UICAgICAgICAgICAg
IDB4MDAwNworI2RlZmluZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UICAgICAgICAgICAgICAg
MHgwMDA4CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UICAgICAgICAgICAgICAgICAw
eDAwMDkKKyNkZWZpbmUgU0NUUF9TRU5ERVJfRFJZX0VWRU5UICAgICAgICAgICAgICAgICAgIDB4
MDAwYQorI2RlZmluZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9FVkVOVCAgICAgICAgMHgw
MDBiIC8qIHdlIGRvbid0IHNlbmQgdGhpcyovCisjZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRfRVZF
TlQgICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFX0VW
RU5UICAgICAgICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5U
ICAgICAgICAgICAgICAgICAgMHgwMDBlCisvKgorICogc29ja2V0IG9wdGlvbiBzdHJ1Y3RzCisg
Ki8KKworc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgeworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdl
IHNwcF9hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBzcHBfYXNzb2NfaWQ7CisJdWludDMyX3Qgc3Bw
X2hiaW50ZXJ2YWw7CisJdWludDMyX3Qgc3BwX3BhdGhtdHU7CisJdWludDMyX3Qgc3BwX2ZsYWdz
OworCXVpbnQzMl90IHNwcF9pcHY2X2Zsb3dsYWJlbDsKKwl1aW50MTZfdCBzcHBfcGF0aG1heHJ4
dDsKKwl1aW50OF90IHNwcF9kc2NwOworfTsKKyNkZWZpbmUgc3BwX2lwdjRfdG9zIHNwcF9kc2Nw
CisKKyNkZWZpbmUgU1BQX0hCX0VOQUJMRQkJMHgwMDAwMDAwMQorI2RlZmluZSBTUFBfSEJfRElT
QUJMRQkJMHgwMDAwMDAwMgorI2RlZmluZSBTUFBfSEJfREVNQU5ECQkweDAwMDAwMDA0CisjZGVm
aW5lIFNQUF9QTVRVRF9FTkFCTEUJMHgwMDAwMDAwOAorI2RlZmluZSBTUFBfUE1UVURfRElTQUJM
RQkweDAwMDAwMDEwCisjZGVmaW5lIFNQUF9IQl9USU1FX0lTX1pFUk8gICAgIDB4MDAwMDAwODAK
KyNkZWZpbmUgU1BQX0lQVjZfRkxPV0xBQkVMICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBTUFBf
RFNDUCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFNQUF9JUFY0X1RPUyAgICAg
ICAgICAgIFNQUF9EU0NQCisKK3N0cnVjdCBzY3RwX3BhZGRydGhsZHMgeworCXN0cnVjdCBzb2Nr
YWRkcl9zdG9yYWdlIHNwdF9hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBzcHRfYXNzb2NfaWQ7CisJ
dWludDE2X3Qgc3B0X3BhdGhtYXhyeHQ7CisJdWludDE2X3Qgc3B0X3BhdGhwZnRobGQ7CisJdWlu
dDE2X3Qgc3B0X3BhdGhjcHRobGQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8geworCXN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwaW5mb19hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBzcGlu
Zm9fYXNzb2NfaWQ7CisJaW50MzJfdCBzcGluZm9fc3RhdGU7CisJdWludDMyX3Qgc3BpbmZvX2N3
bmQ7CisJdWludDMyX3Qgc3BpbmZvX3NydHQ7CisJdWludDMyX3Qgc3BpbmZvX3J0bzsKKwl1aW50
MzJfdCBzcGluZm9fbXR1OworfTsKKworc3RydWN0IHNjdHBfcnRvaW5mbyB7CisJc2N0cF9hc3Nv
Y190IHNydG9fYXNzb2NfaWQ7CisJdWludDMyX3Qgc3J0b19pbml0aWFsOworCXVpbnQzMl90IHNy
dG9fbWF4OworCXVpbnQzMl90IHNydG9fbWluOworfTsKKworc3RydWN0IHNjdHBfYXNzb2NwYXJh
bXMgeworCXNjdHBfYXNzb2NfdCBzYXNvY19hc3NvY19pZDsKKwl1aW50MzJfdCBzYXNvY19wZWVy
X3J3bmQ7CisJdWludDMyX3Qgc2Fzb2NfbG9jYWxfcnduZDsKKwl1aW50MzJfdCBzYXNvY19jb29r
aWVfbGlmZTsKKwl1aW50MTZfdCBzYXNvY19hc29jbWF4cnh0OworCXVpbnQxNl90IHNhc29jX251
bWJlcl9wZWVyX2Rlc3RpbmF0aW9uczsKK307CisKK3N0cnVjdCBzY3RwX3NldHByaW0geworCXN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzcF9hZGRyOworCXNjdHBfYXNzb2NfdCBzc3BfYXNzb2Nf
aWQ7CisJdWludDhfdCBzc3BfcGFkZGluZ1s0XTsKK307CisKK3N0cnVjdCBzY3RwX3NldHBlZXJw
cmltIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BwX2FkZHI7CisJc2N0cF9hc3NvY190
IHNzcHBfYXNzb2NfaWQ7CisJdWludDhfdCBzc3BwX3BhZGRpbmdbNF07Cit9OworCitzdHJ1Y3Qg
c2N0cF9nZXRhZGRyZXNzZXMgeworCXNjdHBfYXNzb2NfdCBzZ2V0X2Fzc29jX2lkOworCS8qIGFk
ZHIgaXMgZmlsbGVkIGluIGZvciBOICogc29ja2FkZHJfc3RvcmFnZSAqLworCXN0cnVjdCBzb2Nr
YWRkciBhZGRyWzFdOworfTsKKworc3RydWN0IHNjdHBfc3RhdHVzIHsKKwlzY3RwX2Fzc29jX3Qg
c3N0YXRfYXNzb2NfaWQ7CisJaW50MzJfdCBzc3RhdF9zdGF0ZTsKKwl1aW50MzJfdCBzc3RhdF9y
d25kOworCXVpbnQxNl90IHNzdGF0X3VuYWNrZGF0YTsKKwl1aW50MTZfdCBzc3RhdF9wZW5kZGF0
YTsKKwl1aW50MTZfdCBzc3RhdF9pbnN0cm1zOworCXVpbnQxNl90IHNzdGF0X291dHN0cm1zOwor
CXVpbnQzMl90IHNzdGF0X2ZyYWdtZW50YXRpb25fcG9pbnQ7CisJc3RydWN0IHNjdHBfcGFkZHJp
bmZvIHNzdGF0X3ByaW1hcnk7Cit9OworCisvKgorICogQVVUSEVOVElDQVRJT04gc3VwcG9ydAor
ICovCisvKiBTQ1RQX0FVVEhfQ0hVTksgKi8KK3N0cnVjdCBzY3RwX2F1dGhjaHVuayB7CisJdWlu
dDhfdCBzYXV0aF9jaHVuazsKK307CisKKy8qIFNDVFBfQVVUSF9LRVkgKi8KK3N0cnVjdCBzY3Rw
X2F1dGhrZXkgeworCXNjdHBfYXNzb2NfdCBzY2FfYXNzb2NfaWQ7CisJdWludDE2X3Qgc2NhX2tl
eW51bWJlcjsKKwl1aW50MTZfdCBzY2Ffa2V5bGVuZ3RoOworCXVpbnQ4X3Qgc2NhX2tleVtdOwor
fTsKKworLyogU0NUUF9ITUFDX0lERU5UICovCitzdHJ1Y3Qgc2N0cF9obWFjYWxnbyB7CisJdWlu
dDMyX3Qgc2htYWNfbnVtYmVyX29mX2lkZW50czsKKwl1aW50MTZfdCBzaG1hY19pZGVudHNbXTsK
K307CisKKy8qIEFVVEggaG1hY19pZCAqLworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZE
CQkweDAwMDAKKyNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMQkJMHgwMDAxCS8qIGRlZmF1
bHQsIG1hbmRhdG9yeSAqLworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYJMHgwMDAz
CisKKy8qIFNDVFBfQVVUSF9BQ1RJVkVfS0VZIC8gU0NUUF9BVVRIX0RFTEVURV9LRVkgKi8KK3N0
cnVjdCBzY3RwX2F1dGhrZXlpZCB7CisJc2N0cF9hc3NvY190IHNjYWN0X2Fzc29jX2lkOworCXVp
bnQxNl90IHNjYWN0X2tleW51bWJlcjsKK307CisKKy8qIFNDVFBfUEVFUl9BVVRIX0NIVU5LUyAv
IFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MgKi8KK3N0cnVjdCBzY3RwX2F1dGhjaHVua3MgeworCXNj
dHBfYXNzb2NfdCBnYXV0aF9hc3NvY19pZDsKKwl1aW50MzJfdCBnYXV0aF9udW1iZXJfb2ZfY2h1
bmtzOworCXVpbnQ4X3QgZ2F1dGhfY2h1bmtzW107Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSB7CisJc2N0cF9hc3NvY190IGFzc29jX2lkOworCXVpbnQzMl90IGFzc29jX3ZhbHVlOwor
fTsKKworc3RydWN0IHNjdHBfY2Nfb3B0aW9uIHsKKwlpbnQgb3B0aW9uOworCXN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlIGFpZF92YWx1ZTsKK307CisKK3N0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSB7
CisJc2N0cF9hc3NvY190IGFzc29jX2lkOworCXVpbnQxNl90IHN0cmVhbV9pZDsKKwl1aW50MTZf
dCBzdHJlYW1fdmFsdWU7Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMgeworCXVpbnQzMl90
IGdhaWRzX251bWJlcl9vZl9pZHM7CisJc2N0cF9hc3NvY190IGdhaWRzX2Fzc29jX2lkW107Cit9
OworCitzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8geworCXNjdHBfYXNzb2NfdCBzYWNrX2Fzc29jX2lk
OworCXVpbnQzMl90IHNhY2tfZGVsYXk7CisJdWludDMyX3Qgc2Fja19mcmVxOworfTsKKworc3Ry
dWN0IHNjdHBfdGltZW91dHMgeworCXNjdHBfYXNzb2NfdCBzdGltb19hc3NvY19pZDsKKwl1aW50
MzJfdCBzdGltb19pbml0OworCXVpbnQzMl90IHN0aW1vX2RhdGE7CisJdWludDMyX3Qgc3RpbW9f
c2FjazsKKwl1aW50MzJfdCBzdGltb19zaHV0ZG93bjsKKwl1aW50MzJfdCBzdGltb19oZWFydGJl
YXQ7CisJdWludDMyX3Qgc3RpbW9fY29va2llOworCXVpbnQzMl90IHN0aW1vX3NodXRkb3duYWNr
OworfTsKKworc3RydWN0IHNjdHBfdWRwZW5jYXBzIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFn
ZSBzdWVfYWRkcmVzczsKKwlzY3RwX2Fzc29jX3Qgc3VlX2Fzc29jX2lkOworCXVpbnQxNl90IHN1
ZV9wb3J0OworfTsKKworc3RydWN0IHNjdHBfcHJzdGF0dXMgeworCXNjdHBfYXNzb2NfdCBzcHJz
dGF0X2Fzc29jX2lkOworCXVpbnQxNl90IHNwcnN0YXRfc2lkOworCXVpbnQxNl90IHNwcnN0YXRf
cG9saWN5OworCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudDsKKwl1aW50NjRfdCBz
cHJzdGF0X2FiYW5kb25lZF9zZW50OworfTsKKworc3RydWN0IHNjdHBfY3duZF9hcmdzIHsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CS8qIG5ldHdvcmsgdG8gKi8gLyogRklYTUU6IExQNjQgaXNz
dWUgKi8KKwl1aW50MzJfdCBjd25kX25ld192YWx1ZTsvKiBjd25kIGluIGsgKi8KKwl1aW50MzJf
dCBwc2V1ZG9fY3VtYWNrOworCXVpbnQxNl90IGluZmxpZ2h0OwkvKiBmbGlnaHRzaXplIGluIGsg
Ki8KKwl1aW50MTZfdCBjd25kX2F1Z21lbnQ7CS8qIGluY3JlbWVudCB0byBpdCAqLworCXVpbnQ4
X3QgbWVldHNfcHNldWRvX2N1bWFjazsKKwl1aW50OF90IG5lZWRfbmV3X3BzZXVkb19jdW1hY2s7
CisJdWludDhfdCBjbnRfaW5fc2VuZDsKKwl1aW50OF90IGNudF9pbl9zdHI7Cit9OworCitzdHJ1
Y3Qgc2N0cF9ibGtfYXJncyB7CisJdWludDMyX3Qgb25zYjsJCS8qIGluIDFrIGJ5dGVzICovCisJ
dWludDMyX3Qgc25kbGVuOwkvKiBsZW4gb2Ygc2VuZCBiZWluZyBhdHRlbXB0ZWQgKi8KKwl1aW50
MzJfdCBwZWVyX3J3bmQ7CS8qIHJ3bmQgb2YgcGVlciAqLworCXVpbnQxNl90IHNlbmRfc2VudF9x
Y250Oy8qIGNobmsgY250ICovCisJdWludDE2X3Qgc3RyZWFtX3FjbnQ7CS8qIGNobmsgY250ICov
CisJdWludDE2X3QgY2h1bmtzX29uX29xdWU7LyogY2h1bmtzIG91dCAqLworCXVpbnQxNl90IGZs
aWdodF9zaXplOyAgIC8qIGZsaWdodCBzaXplIGluIGsgKi8KK307CisKKy8qCisgKiBNYXggd2Ug
Y2FuIHJlc2V0IGluIG9uZSBzZXR0aW5nLCBub3RlIHRoaXMgaXMgZGljdGF0ZWQgbm90IGJ5IHRo
ZSBkZWZpbmUKKyAqIGJ1dCB0aGUgc2l6ZSBvZiBhIG1idWYgY2x1c3RlciBzbyBkb24ndCBjaGFu
Z2UgdGhpcyBkZWZpbmUgYW5kIHRoaW5rIHlvdQorICogY2FuIHNwZWNpZnkgbW9yZS4gWW91IG11
c3QgZG8gbXVsdGlwbGUgcmVzZXRzIGlmIHlvdSB3YW50IHRvIHJlc2V0IG1vcmUKKyAqIHRoYW4g
U0NUUF9NQVhfRVhQTElDSVRfU1RSX1JFU0VULgorICovCisjZGVmaW5lIFNDVFBfTUFYX0VYUExJ
Q1RfU1RSX1JFU0VUICAgMTAwMAorCitzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zIHsKKwlzY3Rw
X2Fzc29jX3Qgc3JzX2Fzc29jX2lkOworCXVpbnQxNl90IHNyc19mbGFnczsKKwl1aW50MTZfdCBz
cnNfbnVtYmVyX3N0cmVhbXM7CS8qIDAgPT0gQUxMICovCisJdWludDE2X3Qgc3JzX3N0cmVhbV9s
aXN0W107LyogbGlzdCBpZiBzdHJyc3RfbnVtX3N0cmVhbXMgaXMgbm90IDAgKi8KK307CisKK3N0
cnVjdCBzY3RwX2FkZF9zdHJlYW1zIHsKKwlzY3RwX2Fzc29jX3QJc2FzX2Fzc29jX2lkOworCXVp
bnQxNl90CXNhc19pbnN0cm1zOworCXVpbnQxNl90CXNhc19vdXRzdHJtczsKK307CisKK3N0cnVj
dCBzY3RwX2dldF9ub25jZV92YWx1ZXMgeworCXNjdHBfYXNzb2NfdCBnbl9hc3NvY19pZDsKKwl1
aW50MzJfdCBnbl9wZWVyc190YWc7CisJdWludDMyX3QgZ25fbG9jYWxfdGFnOworfTsKKworLyog
RGVidWdnaW5nIGxvZ3MgKi8KK3N0cnVjdCBzY3RwX3N0cl9sb2cgeworCXZvaWQgKnN0Y2I7IC8q
IEZJWE1FOiBMUDY0IGlzc3VlICovCisJdWludDMyX3Qgbl90c247CisJdWludDMyX3QgZV90c247
CisJdWludDE2X3Qgbl9zc2VxOworCXVpbnQxNl90IGVfc3NlcTsKKwl1aW50MTZfdCBzdHJtOwor
fTsKKworc3RydWN0IHNjdHBfc2JfbG9nIHsKKwl2b2lkICAqc3RjYjsgLyogRklYTUU6IExQNjQg
aXNzdWUgKi8KKwl1aW50MzJfdCBzb19zYmNjOworCXVpbnQzMl90IHN0Y2Jfc2JjYzsKKwl1aW50
MzJfdCBpbmNyOworfTsKKworc3RydWN0IHNjdHBfZnJfbG9nIHsKKwl1aW50MzJfdCBsYXJnZXN0
X3RzbjsKKwl1aW50MzJfdCBsYXJnZXN0X25ld190c247CisJdWludDMyX3QgdHNuOworfTsKKwor
c3RydWN0IHNjdHBfZnJfbWFwIHsKKwl1aW50MzJfdCBiYXNlOworCXVpbnQzMl90IGN1bTsKKwl1
aW50MzJfdCBoaWdoOworfTsKKworc3RydWN0IHNjdHBfcnduZF9sb2cgeworCXVpbnQzMl90IHJ3
bmQ7CisJdWludDMyX3Qgc2VuZF9zaXplOworCXVpbnQzMl90IG92ZXJoZWFkOworCXVpbnQzMl90
IG5ld19yd25kOworfTsKKworc3RydWN0IHNjdHBfbWJjbnRfbG9nIHsKKwl1aW50MzJfdCB0b3Rh
bF9xdWV1ZV9zaXplOworCXVpbnQzMl90IHNpemVfY2hhbmdlOworCXVpbnQzMl90IHRvdGFsX3F1
ZXVlX21iX3NpemU7CisJdWludDMyX3QgbWJjbnRfY2hhbmdlOworfTsKKworc3RydWN0IHNjdHBf
c2Fja19sb2cgeworCXVpbnQzMl90IGN1bWFjazsKKwl1aW50MzJfdCBvbGRjdW1hY2s7CisJdWlu
dDMyX3QgdHNuOworCXVpbnQxNl90IG51bUdhcHM7CisJdWludDE2X3QgbnVtRHVwczsKK307CisK
K3N0cnVjdCBzY3RwX2xvY2tfbG9nIHsKKwl2b2lkICpzb2NrOyAgLyogRklYTUU6IExQNjQgaXNz
dWUgKi8KKwl2b2lkICppbnA7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCisJdWludDhfdCB0Y2Jf
bG9jazsKKwl1aW50OF90IGlucF9sb2NrOworCXVpbnQ4X3QgaW5mb19sb2NrOworCXVpbnQ4X3Qg
c29ja19sb2NrOworCXVpbnQ4X3Qgc29ja3JjdmJ1Zl9sb2NrOworCXVpbnQ4X3Qgc29ja3NuZGJ1
Zl9sb2NrOworCXVpbnQ4X3QgY3JlYXRlX2xvY2s7CisJdWludDhfdCByZXN2OworfTsKKworc3Ry
dWN0IHNjdHBfcnRvX2xvZyB7CisJdm9pZCAqIG5ldDsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8K
Kwl1aW50MzJfdCBydHQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9uYWdsZV9sb2cgeworCXZvaWQgICpz
dGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLworCXVpbnQzMl90IHRvdGFsX2ZsaWdodDsKKwl1
aW50MzJfdCB0b3RhbF9pbl9xdWV1ZTsKKwl1aW50MTZfdCBjb3VudF9pbl9xdWV1ZTsKKwl1aW50
MTZfdCBjb3VudF9pbl9mbGlnaHQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9zYndha2VfbG9nIHsKKwl2
b2lkICpzdGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLworCXVpbnQxNl90IHNlbmRfcTsKKwl1
aW50MTZfdCBzZW50X3E7CisJdWludDE2X3QgZmxpZ2h0OworCXVpbnQxNl90IHdha2VfY250Owor
CXVpbnQ4X3Qgc3RyZWFtX3FjbnQ7CS8qIGNobmsgY250ICovCisJdWludDhfdCBjaHVua3Nfb25f
b3F1ZTsvKiBjaHVua3Mgb3V0ICovCisJdWludDhfdCBzYmZsYWdzOworCXVpbnQ4X3Qgc2N0cGZs
YWdzOworfTsKKworc3RydWN0IHNjdHBfbWlzY19pbmZvIHsKKwl1aW50MzJfdCBsb2cxOworCXVp
bnQzMl90IGxvZzI7CisJdWludDMyX3QgbG9nMzsKKwl1aW50MzJfdCBsb2c0OworfTsKKworc3Ry
dWN0IHNjdHBfbG9nX2Nsb3NpbmcgeworCXZvaWQgKmlucDsgLyogRklYTUU6IExQNjQgaXNzdWUg
Ki8KKwl2b2lkICpzdGNiOyAgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBzY3Rw
X2ZsYWdzOworCXVpbnQxNl90ICBzdGF0ZTsKKwlpbnQxNl90ICBsb2M7Cit9OworCitzdHJ1Y3Qg
c2N0cF9tYnVmX2xvZyB7CisJc3RydWN0IG1idWYgKm1wOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAq
LworCWNhZGRyX3QgIGV4dDsKKwljYWRkcl90ICBkYXRhOworCXVpbnQxNl90IHNpemU7CisJdWlu
dDhfdCAgcmVmY250OworCXVpbnQ4X3QgIG1idWZfZmxhZ3M7Cit9OworCitzdHJ1Y3Qgc2N0cF9j
d25kX2xvZyB7CisJdWludDY0X3QgdGltZV9ldmVudDsKKwl1aW50OF90ICBmcm9tOworCXVpbnQ4
X3QgIGV2ZW50X3R5cGU7CisJdWludDhfdCAgcmVzdlsyXTsKKwl1bmlvbiB7CisJCXN0cnVjdCBz
Y3RwX2xvZ19jbG9zaW5nIGNsb3NlOworCQlzdHJ1Y3Qgc2N0cF9ibGtfYXJncyBibGs7CisJCXN0
cnVjdCBzY3RwX2N3bmRfYXJncyBjd25kOworCQlzdHJ1Y3Qgc2N0cF9zdHJfbG9nIHN0cmxvZzsK
KwkJc3RydWN0IHNjdHBfZnJfbG9nIGZyOworCQlzdHJ1Y3Qgc2N0cF9mcl9tYXAgbWFwOworCQlz
dHJ1Y3Qgc2N0cF9yd25kX2xvZyByd25kOworCQlzdHJ1Y3Qgc2N0cF9tYmNudF9sb2cgbWJjbnQ7
CisJCXN0cnVjdCBzY3RwX3NhY2tfbG9nIHNhY2s7CisJCXN0cnVjdCBzY3RwX2xvY2tfbG9nIGxv
Y2s7CisJCXN0cnVjdCBzY3RwX3J0b19sb2cgcnRvOworCQlzdHJ1Y3Qgc2N0cF9zYl9sb2cgc2I7
CisJCXN0cnVjdCBzY3RwX25hZ2xlX2xvZyBuYWdsZTsKKwkJc3RydWN0IHNjdHBfc2J3YWtlX2xv
ZyB3YWtlOworCQlzdHJ1Y3Qgc2N0cF9tYnVmX2xvZyBtYjsKKwkJc3RydWN0IHNjdHBfbWlzY19p
bmZvIG1pc2M7CisJfSAgICAgeDsKK307CisKK3N0cnVjdCBzY3RwX2N3bmRfbG9nX3JlcSB7CisJ
aW50MzJfdCBudW1faW5fbG9nOwkJLyogTnVtYmVyIGluIGxvZyAqLworCWludDMyX3QgbnVtX3Jl
dDsJCS8qIE51bWJlciByZXR1cm5lZCAqLworCWludDMyX3Qgc3RhcnRfYXQ7CQkvKiBzdGFydCBh
dCB0aGlzIG9uZSAqLworCWludDMyX3QgZW5kX2F0OwkJICAgICAgICAvKiBlbmQgYXQgdGhpcyBv
bmUgKi8KKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBsb2dbXTsKK307CisKK3N0cnVjdCBzY3RwX3Rp
bWV2YWwgeworCXVpbnQzMl90IHR2X3NlYzsKKwl1aW50MzJfdCB0dl91c2VjOworfTsKKworc3Ry
dWN0IHNjdHBzdGF0IHsKKwlzdHJ1Y3Qgc2N0cF90aW1ldmFsIHNjdHBzX2Rpc2NvbnRpbnVpdHl0
aW1lOyAvKiBzY3RwU3RhdHMgMTggKFRpbWVTdGFtcCkgKi8KKwkvKiBNSUIgYWNjb3JkaW5nIHRv
IFJGQyAzODczICovCisJdWludDMyX3QgIHNjdHBzX2N1cnJlc3RhYjsgICAgICAgICAgIC8qIHNj
dHBTdGF0cyAgMSAgIChHYXVnZTMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19hY3RpdmVlc3RhYjsg
ICAgICAgICAvKiBzY3RwU3RhdHMgIDIgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNf
cmVzdGFydGVzdGFiOworCXVpbnQzMl90ICBzY3Rwc19jb2xsaXNpb25lc3RhYjsKKwl1aW50MzJf
dCAgc2N0cHNfcGFzc2l2ZWVzdGFiOyAgICAgICAgLyogc2N0cFN0YXRzICAzIChDb3VudGVyMzIp
ICovCisJdWludDMyX3QgIHNjdHBzX2Fib3J0ZWQ7ICAgICAgICAgICAgIC8qIHNjdHBTdGF0cyAg
NCAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19zaHV0ZG93bjsgICAgICAgICAgICAv
KiBzY3RwU3RhdHMgIDUgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0b2Z0aGVi
bHVlOyAgICAgICAgLyogc2N0cFN0YXRzICA2IChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNj
dHBzX2NoZWNrc3VtZXJyb3JzOyAgICAgIC8qIHNjdHBTdGF0cyAgNyAoQ291bnRlcjMyKSAqLwor
CXVpbnQzMl90ICBzY3Rwc19vdXRjb250cm9sY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgIDggKENv
dW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0b3JkZXJjaHVua3M7ICAgICAgLyogc2N0
cFN0YXRzICA5IChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX291dHVub3JkZXJjaHVu
a3M7ICAgIC8qIHNjdHBTdGF0cyAxMCAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19p
bmNvbnRyb2xjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTEgKENvdW50ZXI2NCkgKi8KKwl1aW50
MzJfdCAgc2N0cHNfaW5vcmRlcmNodW5rczsgICAgICAgLyogc2N0cFN0YXRzIDEyIChDb3VudGVy
NjQpICovCisJdWludDMyX3QgIHNjdHBzX2ludW5vcmRlcmNodW5rczsgICAgIC8qIHNjdHBTdGF0
cyAxMyAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19mcmFndXNybXNnczsgICAgICAg
ICAvKiBzY3RwU3RhdHMgMTQgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVhc211
c3Jtc2dzOyAgICAgICAgLyogc2N0cFN0YXRzIDE1IChDb3VudGVyNjQpICovCisJdWludDMyX3Qg
IHNjdHBzX291dHBhY2tldHM7ICAgICAgICAgIC8qIHNjdHBTdGF0cyAxNiAoQ291bnRlcjY0KSAq
LworCXVpbnQzMl90ICBzY3Rwc19pbnBhY2tldHM7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgMTcg
KENvdW50ZXI2NCkgKi8KKworCS8qIGlucHV0IHN0YXRpc3RpY3M6ICovCisJdWludDMyX3QgIHNj
dHBzX3JlY3ZwYWNrZXRzOyAgICAgICAgIC8qIHRvdGFsIGlucHV0IHBhY2tldHMgICAgICAgICov
CisJdWludDMyX3QgIHNjdHBzX3JlY3ZkYXRhZ3JhbXM7ICAgICAgIC8qIHRvdGFsIGlucHV0IGRh
dGFncmFtcyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zwa3R3aXRoZGF0YTsgICAgIC8q
IHRvdGFsIHBhY2tldHMgdGhhdCBoYWQgZGF0YSAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2c2Fj
a3M7ICAgICAgICAgICAvKiB0b3RhbCBpbnB1dCBTQUNLIGNodW5rcyAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19yZWN2ZGF0YTsgICAgICAgICAgICAvKiB0b3RhbCBpbnB1dCBEQVRBIGNodW5rcyAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZHVwZGF0YTsgICAgICAgICAvKiB0b3RhbCBpbnB1
dCBkdXBsaWNhdGUgREFUQSBjaHVua3MgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmhlYXJ0YmVh
dDsgICAgICAgLyogdG90YWwgaW5wdXQgSEIgY2h1bmtzICAgICAgKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVjdmhlYXJ0YmVhdGFjazsgICAgLyogdG90YWwgaW5wdXQgSEItQUNLIGNodW5rcyAgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcmVjdmVjbmU7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgRUNO
RSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmF1dGg7ICAgICAgICAgICAgLyog
dG90YWwgaW5wdXQgQVVUSCBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmF1dGht
aXNzaW5nOyAgICAgLyogdG90YWwgaW5wdXQgY2h1bmtzIG1pc3NpbmcgQVVUSCAqLworCXVpbnQz
Ml90ICBzY3Rwc19yZWN2aXZhbGhtYWNpZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgaW52YWxp
ZCBITUFDIGlkcyByZWNlaXZlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2aXZhbGtleWlkOyAg
ICAgICAvKiB0b3RhbCBudW1iZXIgb2YgaW52YWxpZCBzZWNyZXQgaWRzIHJlY2VpdmVkICovCisJ
dWludDMyX3QgIHNjdHBzX3JlY3ZhdXRoZmFpbGVkOyAgICAgIC8qIHRvdGFsIG51bWJlciBvZiBh
dXRoIGZhaWxlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZXhwcmVzczsgICAgICAgICAvKiB0
b3RhbCBmYXN0IHBhdGggcmVjZWl2ZXMgYWxsIG9uZSBjaHVuayAqLworCXVpbnQzMl90ICBzY3Rw
c19yZWN2ZXhwcmVzc207ICAgICAgICAvKiB0b3RhbCBmYXN0IHBhdGggbXVsdGktcGFydCBkYXRh
ICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zfc3BhcmU7ICAgICAgICAgIC8qIGZvcm1lcmx5IHNj
dHBzX3JlY3Zub2NyYyAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2c3djcmM7CisJdWludDMyX3Qg
IHNjdHBzX3JlY3Zod2NyYzsKKworCS8qIG91dHB1dCBzdGF0aXN0aWNzOiAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kcGFja2V0czsgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgcGFja2V0cyAgICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc2Fja3M7ICAgICAgICAgICAvKiB0b3RhbCBvdXRw
dXQgU0FDS3MgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZGF0YTsgICAgICAgICAg
ICAvKiB0b3RhbCBvdXRwdXQgREFUQSBjaHVua3MgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5k
cmV0cmFuc2RhdGE7ICAgICAvKiB0b3RhbCBvdXRwdXQgcmV0cmFuc21pdHRlZCBEQVRBIGNodW5r
cyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZmFzdHJldHJhbnM7ICAgICAvKiB0b3RhbCBvdXRw
dXQgZmFzdCByZXRyYW5zbWl0dGVkIERBVEEgY2h1bmtzICovCisJdWludDMyX3QgIHNjdHBzX3Nl
bmRtdWx0ZmFzdHJldHJhbnM7IC8qIHRvdGFsIEZSJ3MgdGhhdCBoYXBwZW5lZCBtb3JlIHRoYW4g
b25jZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBzYW1lIGNo
dW5rICh1LWRlbCBtdWx0aS1mciBhbGdvKS4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRoZWFydGJlYXQ7ICAgICAgIC8qIHRv
dGFsIG91dHB1dCBIQiBjaHVua3MgICAgICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRlY25lOyAg
ICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBFQ05FIGNodW5rcyAgICAqLworCXVpbnQzMl90ICBz
Y3Rwc19zZW5kYXV0aDsgICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgQVVUSCBjaHVua3MgRklY
TUUgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZXJyb3JzOyAgICAgICAgICAvKiBpcF9vdXRw
dXQgZXJyb3IgY291bnRlciAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kX3NwYXJlOyAgICAgICAg
ICAvKiBmb3JtZXJseSBzY3Rwc19zZW5kbm9jcmMgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHN3
Y3JjOworCXVpbnQzMl90ICBzY3Rwc19zZW5kaHdjcmM7CisJLyogUENLRFJPUFJFUCBzdGF0aXN0
aWNzOiAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwZm1ib3g7ICAgICAgICAgICAvKiBQYWNrZXQg
ZHJvcCBmcm9tIG1pZGRsZSBib3ggKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGZlaG9zOyAgICAg
ICAgICAgLyogUC1kcm9wIGZyb20gZW5kIGhvc3QgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycG1i
ZGE7ICAgICAgICAgICAgLyogUC1kcm9wcyB3aXRoIGRhdGEgKi8KKwl1aW50MzJfdCAgc2N0cHNf
cGRycG1iY3Q7ICAgICAgICAgICAgLyogUC1kcm9wcywgbm9uLWRhdGEsIG5vbi1lbmRob3N0ICov
CisJdWludDMyX3QgIHNjdHBzX3BkcnBid3JwdDsgICAgICAgICAgIC8qIFAtZHJvcCwgbm9uLWVu
ZGhvc3QsIGJhbmR3aWR0aCByZXAgb25seSAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwY3J1cHQ7
ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2ggZm9yIGNodW5rIGhlYWRlciAqLworCXVp
bnQzMl90ICBzY3Rwc19wZHJwbmVkYXQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2gg
ZGF0YSB0byBjb25maXJtICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBwZGJyazsgICAgICAgICAg
IC8qIFAtZHJvcCwgd2hlcmUgcHJvY2Vzc19jaHVua19kcm9wIHNhaWQgYnJlYWsgKi8KKwl1aW50
MzJfdCAgc2N0cHNfcGRycHRzbm5mOyAgICAgICAgICAgLyogUC1kcm9wLCBjb3VsZCBub3QgZmlu
ZCBUU04gKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGRuZm5kOyAgICAgICAgICAgLyogUC1kcm9w
LCBhdHRlbXB0IHJldmVyc2UgVFNOIGxvb2t1cCAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwZGl3
bnA7ICAgICAgICAgICAvKiBQLWRyb3AsIGUtaG9zdCBjb25maXJtcyB6ZXJvLXJ3bmQgKi8KKwl1
aW50MzJfdCAgc2N0cHNfcGRycGRpenJ3OyAgICAgICAgICAgLyogUC1kcm9wLCBtaWRib3ggY29u
ZmlybXMgbm8gc3BhY2UgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGJhZGQ7ICAgICAgICAgICAg
LyogUC1kcm9wLCBkYXRhIGRpZCBub3QgbWF0Y2ggVFNOICovCisJdWludDMyX3QgIHNjdHBzX3Bk
cnBtYXJrOyAgICAgICAgICAgIC8qIFAtZHJvcCwgVFNOJ3MgbWFya2VkIGZvciBGYXN0IFJldHJh
biAqLworCS8qIHRpbWVvdXRzICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9pdGVyYXRvcjsgICAg
ICAgIC8qIE51bWJlciBvZiBpdGVyYXRvciB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90
ICBzY3Rwc190aW1vZGF0YTsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgVDMgZGF0YSB0aW1lIG91
dHMgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3dpbmRvd3Byb2JlOyAgICAgLyogTnVtYmVyIG9m
IHdpbmRvdyBwcm9iZSAoVDMpIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBz
X3RpbW9pbml0OyAgICAgICAgICAgIC8qIE51bWJlciBvZiBJTklUIHRpbWVycyB0aGF0IGZpcmVk
ICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zYWNrOyAgICAgICAgICAgIC8qIE51bWJlciBvZiBz
YWNrIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zaHV0ZG93bjsg
ICAgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQz
Ml90ICBzY3Rwc190aW1vaGVhcnRiZWF0OyAgICAgICAvKiBOdW1iZXIgb2YgaGVhcnRiZWF0IHRp
bWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9jb29raWU7ICAgICAgICAg
IC8qIE51bWJlciBvZiB0aW1lcyBhIGNvb2tpZSB0aW1lb3V0IGZpcmVkICovCisJdWludDMyX3Qg
IHNjdHBzX3RpbW9zZWNyZXQ7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhbiBlbmRwb2lu
dCBjaGFuZ2VkIGl0cyBjb29raWUgc2VjcmV0Ki8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3BhdGht
dHU7ICAgICAgICAgLyogTnVtYmVyIG9mIFBNVFUgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50
MzJfdCAgc2N0cHNfdGltb3NodXRkb3duYWNrOyAgICAgLyogTnVtYmVyIG9mIHNodXRkb3duIGFj
ayB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd25ndWFy
ZDsgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gZ3VhcmQgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1
aW50MzJfdCAgc2N0cHNfdGltb3N0cm1yc3Q7ICAgICAgICAgLyogTnVtYmVyIG9mIHN0cmVhbSBy
ZXNldCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZWFybHlmcjsg
ICAgICAgICAvKiBOdW1iZXIgb2YgZWFybHkgRlIgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50
MzJfdCAgc2N0cHNfdGltb2FzY29uZjsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGFuIGFz
Y29uZiB0aW1lciBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZGVscHJpbTsJICAgICAv
KiBOdW1iZXIgb2YgdGltZXMgYSBwcmltX2RlbGV0ZWQgdGltZXIgZmlyZWQgKi8KKwl1aW50MzJf
dCAgc2N0cHNfdGltb2F1dG9jbG9zZTsgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGF1dG8gY2xv
c2UgdGltZXIgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2Fzc29ja2lsbDsgICAgICAg
LyogTnVtYmVyIG9mIGFzb2MgZnJlZSB0aW1lcnMgZXhwaXJlZCAqLworCXVpbnQzMl90ICBzY3Rw
c190aW1vaW5wa2lsbDsgICAgICAgICAvKiBOdW1iZXIgb2YgaW5wIGZyZWUgdGltZXJzIGV4cGly
ZWQgKi8KKwkvKiBmb3JtZXIgZWFybHkgRlIgY291bnRlcnMgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c3BhcmVbMTFdOworCS8qIG90aGVycyAqLworCXVpbnQzMl90ICBzY3Rwc19oZHJvcHM7CSAgICAg
ICAgICAvKiBwYWNrZXQgc2hvcnRlciB0aGFuIGhlYWRlciAqLworCXVpbnQzMl90ICBzY3Rwc19i
YWRzdW07CSAgICAgICAgICAvKiBjaGVja3N1bSBlcnJvciAgICAgICAgICAgICAqLworCXVpbnQz
Ml90ICBzY3Rwc19ub3BvcnQ7ICAgICAgICAgICAvKiBubyBlbmRwb2ludCBmb3IgcG9ydCAgICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19iYWR2dGFnOyAgICAgICAgICAvKiBiYWQgdi10YWcgICAg
ICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19iYWRzaWQ7ICAgICAgICAgICAvKiBi
YWQgU0lEICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19ub21lbTsgICAg
ICAgICAgICAvKiBubyBtZW1vcnkgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rw
c19mYXN0cmV0cmFuc2lucnR0OyAvKiBudW1iZXIgb2YgbXVsdGlwbGUgRlIgaW4gYSBSVFQgd2lu
ZG93ICovCisJdWludDMyX3QgIHNjdHBzX21hcmtlZHJldHJhbnM7CisJdWludDMyX3QgIHNjdHBz
X25hZ2xlc2VudDsgICAgICAgIC8qIG5hZ2xlIGFsbG93ZWQgc2VuZGluZyAgICAgICovCisJdWlu
dDMyX3QgIHNjdHBzX25hZ2xlcXVldWVkOyAgICAgIC8qIG5hZ2xlIGRvZXNuJ3QgYWxsb3cgc2Vu
ZGluZyAqLworCXVpbnQzMl90ICBzY3Rwc19tYXhidXJzdHF1ZXVlZDsgICAvKiBtYXggYnVyc3Qg
ZG9lc24ndCBhbGxvdyBzZW5kaW5nICovCisJdWludDMyX3QgIHNjdHBzX2lmbm9tZW1xdWV1ZWQ7
ICAgIC8qIGxvb2sgYWhlYWQgdGVsbHMgdXMgbm8gbWVtb3J5IGluCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJmYWNlIHJpbmcgYnVmZmVyIE9SIHdlIGhh
ZCBhCisJCQkJCSAqIHNlbmQgZXJyb3IgYW5kIGFyZSBxdWV1aW5nIG9uZSBzZW5kLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc193
aW5kb3dwcm9iZWQ7ICAgICAvKiB0b3RhbCBudW1iZXIgb2Ygd2luZG93IHByb2JlcyBzZW50ICov
CisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJyOwkvKiB0b3RhbCB0aW1lcyBhbiBvdXRwdXQg
ZXJyb3IgY2F1c2VzIHVzCisJCQkJCSAqIHRvIGNsYW1wIGRvd24gb24gbmV4dCB1c2VyIHNlbmQu
CisJCQkJCSAqLworCXVpbnQzMl90ICBzY3Rwc19sb3dsZXZlbGVycnVzcjsJLyogdG90YWwgdGlt
ZXMgc2N0cF9zZW5kZXJyb3JzIHdlcmUgY2F1c2VkIGZyb20KKwkJCQkJICogYSB1c2VyIHNlbmQg
ZnJvbSBhIHVzZXIgaW52b2tlZCBzZW5kIG5vdAorCQkJCQkgKiBhIHNhY2sgcmVzcG9uc2UKKwkJ
CQkJICovCisJdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wY2hrbG10OwkvKiBOdW1iZXIgb2YgaW4g
ZGF0YSBkcm9wcyBkdWUgdG8gY2h1bmsgbGltaXQgcmVhY2hlZCAqLworCXVpbnQzMl90ICBzY3Rw
c19kYXRhZHJvcHJ3bmQ7CS8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byByd25kIGxp
bWl0IHJlYWNoZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfZWNuZXJlZHVjZWRjd25kOyAgLyogTnVt
YmVyIG9mIHRpbWVzIGEgRUNOIHJlZHVjZWQgdGhlIGN3bmQgKi8KKwl1aW50MzJfdCAgc2N0cHNf
dnRhZ2V4cHJlc3M7CS8qIFVzZWQgZXhwcmVzcyBsb29rdXAgdmlhIHZ0YWcgKi8KKwl1aW50MzJf
dCAgc2N0cHNfdnRhZ2JvZ3VzOwkvKiBDb2xsaXNpb24gaW4gZXhwcmVzcyBsb29rdXAuICovCisJ
dWludDMyX3QgIHNjdHBzX3ByaW1hcnlfcmFuZHJ5OwkvKiBOdW1iZXIgb2YgdGltZXMgdGhlIHNl
bmRlciByYW4gZHJ5IG9mIHVzZXIgZGF0YSBvbiBwcmltYXJ5ICovCisJdWludDMyX3QgIHNjdHBz
X2NtdF9yYW5kcnk7ICAgICAgIC8qIFNhbWUgZm9yIGFib3ZlICovCisJdWludDMyX3QgIHNjdHBz
X3Nsb3dwYXRoX3NhY2s7ICAgIC8qIFNhY2tzIHRoZSBzbG93IHdheSAqLworCXVpbnQzMl90ICBz
Y3Rwc193dV9zYWNrc19zZW50OwkvKiBXaW5kb3cgVXBkYXRlIG9ubHkgc2Fja3Mgc2VudCAqLwor
CXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2ZsYWdzOyAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0
aCBzaW5mb19mbGFncyAhPTAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF91bm9yZDsg
LyogbnVtYmVyIG9mIHVub3JkZXJlZCBzZW5kcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193
aXRoX2VvZjsgCS8qIG51bWJlciBvZiBzZW5kcyB3aXRoIEVPRiBmbGFnIHNldCAqLworCXVpbnQz
Ml90ICBzY3Rwc19zZW5kc193aXRoX2Fib3J0OyAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBBQk9S
VCBmbGFnIHNldCAqLworCXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxsczsJLyog
bnVtYmVyIG9mIHRpbWVzIHByb3RvY29sIGRyYWluIGNhbGxlZCAqLworCXVpbnQzMl90ICBzY3Rw
c19wcm90b2NvbF9kcmFpbnNfZG9uZTsgCS8qIG51bWJlciBvZiB0aW1lcyB3ZSBkaWQgYSBwcm90
b2NvbCBkcmFpbiAqLworCXVpbnQzMl90ICBzY3Rwc19yZWFkX3BlZWtzOwkvKiBOdW1iZXIgb2Yg
dGltZXMgcmVjdiB3YXMgY2FsbGVkIHdpdGggcGVlayAqLworCXVpbnQzMl90ICBzY3Rwc19jYWNo
ZWRfY2hrOyAgICAgICAvKiBOdW1iZXIgb2YgY2FjaGVkIGNodW5rcyB1c2VkICovCisJdWludDMy
X3QgIHNjdHBzX2NhY2hlZF9zdHJtb3E7ICAgIC8qIE51bWJlciBvZiBjYWNoZWQgc3RyZWFtIG9x
J3MgdXNlZCAqLworCXVpbnQzMl90ICBzY3Rwc19sZWZ0X2FiYW5kb247ICAgICAvKiBOdW1iZXIg
b2YgdW5yZWFkIG1lc3NhZ2VzIGFiYW5kb25lZCBieSBjbG9zZSAqLworCXVpbnQzMl90ICBzY3Rw
c19zZW5kX2J1cnN0X2F2b2lkOyAvKiBVbnVzZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZF9j
d25kX2F2b2lkOyAgLyogU2VuZCBjd25kIGZ1bGwgIGF2b2lkYW5jZSwgYWxyZWFkeSBtYXggYnVy
c3QgaW5mbGlnaHQgdG8gbmV0ICovCisJdWludDMyX3QgIHNjdHBzX2Z3ZHRzbl9tYXBfb3Zlcjsg
IC8qIG51bWJlciBvZiBtYXAgYXJyYXkgb3Zlci1ydW5zIHZpYSBmd2QtdHNuJ3MgKi8KKwl1aW50
MzJfdCAgc2N0cHNfcXVldWVfdXBkX2VjbmU7ICAvKiBOdW1iZXIgb2YgdGltZXMgd2UgcXVldWVk
IG9yIHVwZGF0ZWQgYW4gRUNOIGNodW5rIG9uIHNlbmQgcXVldWUgKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVzZXJ2ZWRbMzFdOyAgICAgLyogRnV0dXJlIEFCSSBjb21wYXQgLSByZW1vdmUgaW50J3Mg
ZnJvbSBoZXJlIHdoZW4gYWRkaW5nIG5ldyAqLworfTsKKworI2RlZmluZSBTQ1RQX1NUQVRfSU5D
UihfeCkgU0NUUF9TVEFUX0lOQ1JfQlkoX3gsMSkKKyNkZWZpbmUgU0NUUF9TVEFUX0RFQ1IoX3gp
IFNDVFBfU1RBVF9ERUNSX0JZKF94LDEpCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVm
aW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisjZGVmaW5lIFNDVFBf
U1RBVF9JTkNSX0JZKF94LF9kKSAoU0NUUF9CQVNFX1NUQVRTW1BDUFVfR0VUKGNwdWlkKV0uX3gg
Kz0gX2QpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0JZKF94LF9kKSAoU0NUUF9CQVNFX1NUQVRT
W1BDUFVfR0VUKGNwdWlkKV0uX3ggLT0gX2QpCisjZWxzZQorI2RlZmluZSBTQ1RQX1NUQVRfSU5D
Ul9CWShfeCxfZCkgYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9TVEFUKF94KSwgX2QpCisjZGVm
aW5lIFNDVFBfU1RBVF9ERUNSX0JZKF94LF9kKSBhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JB
U0VfU1RBVChfeCksIF9kKQorI2VuZGlmCisvKiBUaGUgZm9sbG93aW5nIG1hY3JvcyBhcmUgZm9y
IGhhbmRsaW5nIE1JQiB2YWx1ZXMsICovCisjZGVmaW5lIFNDVFBfU1RBVF9JTkNSX0NPVU5URVIz
MihfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RBVF9JTkNSX0NPVU5URVI2
NChfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RBVF9JTkNSX0dBVUdFMzIo
X3gpIFNDVFBfU1RBVF9JTkNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRfREVDUl9DT1VOVEVSMzIo
X3gpIFNDVFBfU1RBVF9ERUNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRfREVDUl9DT1VOVEVSNjQo
X3gpIFNDVFBfU1RBVF9ERUNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKF94
KSBTQ1RQX1NUQVRfREVDUihfeCkKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3VuaW9u
IHNjdHBfc29ja3N0b3JlIHsKKyNpZiBkZWZpbmVkKElORVQpCisJc3RydWN0IHNvY2thZGRyX2lu
IHNpbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJc3RydWN0IHNvY2thZGRyX2luNiBz
aW42OworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisJc3RydWN0IHNvY2th
ZGRyIHNhOworfTsKKyNlbHNlCit1bmlvbiBzY3RwX3NvY2tzdG9yZSB7CisJc3RydWN0IHNvY2th
ZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisJc3RydWN0IHNvY2thZGRy
IHNhOworfTsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
Ki8KKy8qIEFuZCBzb21ldGhpbmcgZm9yIHVzIG9sZCB0aW1lcnMgKi8KKy8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0FQUExFX18KKyNpZm5kZWYgX19V
c2Vyc3BhY2VfXworI2lmbmRlZiBudG9obGwKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xp
bnV4KQorI2lmbmRlZiBfQlNEX1NPVVJDRQorI2RlZmluZSBfQlNEX1NPVVJDRQorI2VuZGlmCisj
aW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKyNlbmRp
ZgorI2RlZmluZSBudG9obGwoeCkgYmU2NHRvaCh4KQorI2VuZGlmCisKKyNpZm5kZWYgaHRvbmxs
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNpZm5kZWYgX0JTRF9TT1VSQ0UK
KyNkZWZpbmUgX0JTRF9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPGVuZGlhbi5oPgorI2Vsc2UK
KyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKyNkZWZpbmUgaHRvbmxsKHgpIGh0b2Jl
NjQoeCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKy8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKworCitzdHJ1Y3QgeHNjdHBfaW5wY2IgeworCXVpbnQzMl90IGxhc3Q7CisJ
dWludDMyX3QgZmxhZ3M7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPCAxMDAwMDQ4CisJdWludDMyX3QgZmVhdHVyZXM7CisjZWxzZQorCXVpbnQ2NF90IGZl
YXR1cmVzOworI2VuZGlmCisJdWludDMyX3QgdG90YWxfc2VuZHM7CisJdWludDMyX3QgdG90YWxf
cmVjdnM7CisJdWludDMyX3QgdG90YWxfbm9zcGFjZXM7CisJdWludDMyX3QgZnJhZ21lbnRhdGlv
bl9wb2ludDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQxNl90IHFsZW5fb2xkOworCXVp
bnQxNl90IG1heHFsZW5fb2xkOworI2Vsc2UKKwl1aW50MTZfdCBxbGVuOworCXVpbnQxNl90IG1h
eHFsZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQorCXVpbnQxNl90IHBhZGRp
bmc7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0RfdmVy
c2lvbiA8IDEwMDE1MTcpKQorCXZvaWQgKnNvY2tldDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQzMl90IHFsZW47
CisJdWludDMyX3QgbWF4cWxlbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDA0OAorCXVpbnQzMl90IGV4dHJhX3BhZGRpbmdbMzJd
OyAvKiBmdXR1cmUgKi8KKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIChfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDEwMDE1MTcpCisJdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMV07IC8qIGZ1dHVy
ZSAqLworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQzMl90IGV4dHJhX3BhZGRp
bmdbMjddOyAvKiBmdXR1cmUgKi8KKyNlbHNlCisJdWludDMyX3QgZXh0cmFfcGFkZGluZ1syOV07
IC8qIGZ1dHVyZSAqLworI2VuZGlmCisjZWxzZQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQzMl90IGV4dHJhX3BhZGRpbmdbMjhd
OyAvKiBmdXR1cmUgKi8KKyNlbHNlCisJdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMF07IC8qIGZ1
dHVyZSAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorfTsKKworc3RydWN0IHhzY3RwX3RjYiB7
CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgcHJpbWFyeV9hZGRyOyAgICAgIC8qIHNjdHBBc3NvY0Vu
dHJ5IDUvNiAqLworCXVpbnQzMl90IGxhc3Q7CisJdWludDMyX3QgaGVhcnRiZWF0X2ludGVydmFs
OyAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDcgICAqLworCXVpbnQzMl90IHN0YXRlOyAg
ICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSA4ICAgKi8KKwl1aW50MzJf
dCBpbl9zdHJlYW1zOyAgICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgOSAgICov
CisJdWludDMyX3Qgb3V0X3N0cmVhbXM7ICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0Vu
dHJ5IDEwICAqLworCXVpbnQzMl90IG1heF9ucl9yZXRyYW5zOyAgICAgICAgICAgICAgICAvKiBz
Y3RwQXNzb2NFbnRyeSAxMSAgKi8KKwl1aW50MzJfdCBwcmltYXJ5X3Byb2Nlc3M7ICAgICAgICAg
ICAgICAgLyogc2N0cEFzc29jRW50cnkgMTIgICovCisJdWludDMyX3QgVDFfZXhwaXJlcmllczsg
ICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDEzICAqLworCXVpbnQzMl90IFQyX2V4
cGlyZXJpZXM7ICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxNCAgKi8KKwl1aW50
MzJfdCByZXRyYW5zbWl0dGVkX3RzbnM7ICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTUg
ICovCisJdWludDMyX3QgdG90YWxfc2VuZHM7CisJdWludDMyX3QgdG90YWxfcmVjdnM7CisJdWlu
dDMyX3QgbG9jYWxfdGFnOworCXVpbnQzMl90IHJlbW90ZV90YWc7CisJdWludDMyX3QgaW5pdGlh
bF90c247CisJdWludDMyX3QgaGlnaGVzdF90c247CisJdWludDMyX3QgY3VtdWxhdGl2ZV90c247
CisJdWludDMyX3QgY3VtdWxhdGl2ZV90c25fYWNrOworCXVpbnQzMl90IG10dTsKKwl1aW50MzJf
dCByZWZjbnQ7CisJdWludDE2X3QgbG9jYWxfcG9ydDsgICAgICAgICAgICAgICAgICAgIC8qIHNj
dHBBc3NvY0VudHJ5IDMgICAqLworCXVpbnQxNl90IHJlbW90ZV9wb3J0OyAgICAgICAgICAgICAg
ICAgICAvKiBzY3RwQXNzb2NFbnRyeSA0ICAgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1ldmFsIHN0YXJ0
X3RpbWU7ICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTYgICovCisJc3RydWN0IHNjdHBfdGlt
ZXZhbCBkaXNjb250aW51aXR5X3RpbWU7IC8qIHNjdHBBc3NvY0VudHJ5IDE3ICAqLworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJdWlu
dDMyX3QgcGVlcnNfcnduZDsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7ICAgICAgICAgICAgICAg
ICAgLyogc2N0cEFzc29jRW50cnkgMSAgICovCisJdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMl07
ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbHNlCisjZW5kaWYKKyNlbHNlCisJdWludDMy
X3QgcGVlcnNfcnduZDsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7ICAgICAgICAgICAgICAgICAg
Lyogc2N0cEFzc29jRW50cnkgMSAgICovCisJdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMl07ICAg
ICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbmRpZgorfTsKKworc3RydWN0IHhzY3RwX2xhZGRy
IHsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyZXNzOyAgICAvKiBzY3RwQXNzb2NMb2NhbEFk
ZHJFbnRyeSAxLzIgKi8KKwl1aW50MzJfdCBsYXN0OworCXN0cnVjdCBzY3RwX3RpbWV2YWwgc3Rh
cnRfdGltZTsgIC8qIHNjdHBBc3NvY0xvY2FsQWRkckVudHJ5IDMgICAqLworCXVpbnQzMl90IGV4
dHJhX3BhZGRpbmdbMzJdOyAgICAgICAvKiBmdXR1cmUgKi8KK307CisKK3N0cnVjdCB4c2N0cF9y
YWRkciB7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcmVzczsgICAgICAvKiBzY3RwQXNzb2NM
b2NhbFJlbUVudHJ5IDEvMiAqLworCXVpbnQzMl90IGxhc3Q7CisJdWludDMyX3QgcnRvOyAgICAg
ICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDUgICAqLworCXVpbnQz
Ml90IG1heF9wYXRoX3J0eDsgICAgICAgICAgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA2
ICAgKi8KKwl1aW50MzJfdCBydHg7ICAgICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0xv
Y2FsUmVtRW50cnkgNyAgICovCisJdWludDMyX3QgZXJyb3JfY291bnRlcjsgICAgICAgICAgICAv
KiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90IGN3bmQ7ICAgICAgICAg
ICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCBm
bGlnaHRfc2l6ZTsgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICov
CisJdWludDMyX3QgbXR1OyAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqLworCXVpbnQ4X3QgYWN0aXZlOyAgICAgICAgICAgICAgICAgICAgLyogc2N0
cEFzc29jTG9jYWxSZW1FbnRyeSAzICAgKi8KKwl1aW50OF90IGNvbmZpcm1lZDsgICAgICAgICAg
ICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDhfdCBoZWFydGJl
YXRfZW5hYmxlZDsgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDQgICAqLworCXVp
bnQ4X3QgcG90ZW50aWFsbHlfZmFpbGVkOworCXN0cnVjdCBzY3RwX3RpbWV2YWwgc3RhcnRfdGlt
ZTsgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA4ICAgKi8KKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAorCXVpbnQzMl90IHJ0dDsK
Kwl1aW50MzJfdCBoZWFydGJlYXRfaW50ZXJ2YWw7CisJdWludDMyX3Qgc3N0aHJlc2g7CisJdWlu
dDE2X3QgZW5jYXBzX3BvcnQ7CisJdWludDE2X3Qgc3RhdGU7CisJdWludDMyX3QgZXh0cmFfcGFk
ZGluZ1syOV07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbmRpZgorI2Vsc2UKKwl1aW50
MzJfdCBydHQ7CisJdWludDMyX3QgaGVhcnRiZWF0X2ludGVydmFsOworCXVpbnQzMl90IHNzdGhy
ZXNoOworCXVpbnQxNl90IGVuY2Fwc19wb3J0OworCXVpbnQxNl90IHN0YXRlOworCXVpbnQzMl90
IGV4dHJhX3BhZGRpbmdbMjldOyAgICAgICAgICAgICAgLyogZnV0dXJlICovCisjZW5kaWYKK307
CisKKyNkZWZpbmUgU0NUUF9NQVhfTE9HR0lOR19TSVpFIDMwMDAwCisjZGVmaW5lIFNDVFBfVFJB
Q0VfUEFSQU1TIDYgICAgICAgICAgICAgICAgLyogVGhpcyBudW1iZXIgTVVTVCBiZSBldmVuICAg
Ki8KKworc3RydWN0IHNjdHBfbG9nX2VudHJ5IHsKKwl1aW50NjRfdCB0aW1lc3RhbXA7CisJdWlu
dDMyX3Qgc3Vic3lzOworCXVpbnQzMl90IHBhZGRpbmc7CisJdWludDMyX3QgcGFyYW1zW1NDVFBf
VFJBQ0VfUEFSQU1TXTsKK307CisKK3N0cnVjdCBzY3RwX2xvZyB7CisJc3RydWN0IHNjdHBfbG9n
X2VudHJ5IGVudHJ5W1NDVFBfTUFYX0xPR0dJTkdfU0laRV07CisJdWludDMyX3QgaW5kZXg7CisJ
dWludDMyX3QgcGFkZGluZzsKK307CisKKy8qCisgKiBLZXJuZWwgZGVmaW5lZCBmb3Igc2N0cF9z
ZW5kCisgKi8KKyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K2ludAorc2N0cF9sb3dlcl9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sCisgICAgc3RydWN0IHNv
Y2thZGRyICphZGRyLAorICAgIHN0cnVjdCB1aW8gKnVpbywKKyNpZiBkZWZpbmVkKF9fUGFuZGFf
XykKKyAgICBwYWtoYW5kbGVfdHlwZSBpX3BhaywKKyAgICBwYWtoYW5kbGVfdHlwZSBpX2NvbnRy
b2wsCisjZWxzZQorICAgIHN0cnVjdCBtYnVmICppX3BhaywKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29u
dHJvbCwKKyNlbmRpZgorICAgIGludCBmbGFncywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
ICpzcmN2CisjaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KSkKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw
MDAKKyAgICAsc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKyAg
ICAsIFBLVEhSRUFEIHAKKyNlbHNlCisgICAgLHN0cnVjdCBwcm9jICpwCisjZW5kaWYKKyNlbmRp
ZgorKTsKKworaW50CitzY3RwX3NvcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1
Y3QgdWlvICp1aW8sCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisgICAgcGFydGljbGV0eXBlICoq
bXAsCisjZWxzZQorICAgIHN0cnVjdCBtYnVmICoqbXAsCisjZW5kaWYKKyAgICBzdHJ1Y3Qgc29j
a2FkZHIgKmZyb20sCisgICAgaW50IGZyb21sZW4sCisgICAgaW50ICptc2dfZmxhZ3MsCisgICAg
c3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2luZm8sCisgICAgaW50IGZpbGxpbmdfc2luZm8pOwor
I2VuZGlmCisKKy8qCisgKiBBUEkgc3lzdGVtIGNhbGxzCisgKi8KKyNpZiAhKGRlZmluZWQoX0tF
Uk5FTCkpICYmICEoZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKworX19CRUdJTl9ERUNMUworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAyMDAwCitpbnQJ
c2N0cF9wZWVsb2ZmIF9fUCgoaW50LCBzY3RwX2Fzc29jX3QpKTsKK2ludAlzY3RwX2JpbmR4IF9f
UCgoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBpbnQpKTsKK2ludAlzY3RwX2Nvbm5lY3R4
IF9fUCgoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBzY3RwX2Fzc29jX3QgKikp
OworaW50CXNjdHBfZ2V0YWRkcmxlbiBfX1AoKHNhX2ZhbWlseV90KSk7CitpbnQJc2N0cF9nZXRw
YWRkcnMgX19QKChpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2thZGRyICoqKSk7Cit2b2lk
CXNjdHBfZnJlZXBhZGRycyBfX1AoKHN0cnVjdCBzb2NrYWRkciAqKSk7CitpbnQJc2N0cF9nZXRs
YWRkcnMgX19QKChpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2thZGRyICoqKSk7Cit2b2lk
CXNjdHBfZnJlZWxhZGRycyBfX1AoKHN0cnVjdCBzb2NrYWRkciAqKSk7CitpbnQJc2N0cF9vcHRf
aW5mbyBfX1AoKGludCwgc2N0cF9hc3NvY190LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopKTsK
KworLyogZGVwcmVjYXRlZCAqLworc3NpemVfdAlzY3RwX3NlbmRtc2cgX19QKChpbnQsIGNvbnN0
IHZvaWQgKiwgc2l6ZV90LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90
LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpKTsKKwor
LyogZGVwcmVjYXRlZCAqLworc3NpemVfdAlzY3RwX3NlbmQgX19QKChpbnQsIGNvbnN0IHZvaWQg
Kiwgc2l6ZV90LAorCSAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCkpOwor
CisvKiBkZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2VuZHggX19QKChpbnQsIGNvbnN0IHZv
aWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCBzdHJ1Y3Qgc2N0cF9z
bmRyY3ZpbmZvICosIGludCkpOworCisvKiBkZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2Vu
ZG1zZ3ggX19QKChpbnQgc2QsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIg
KiwKKwkgICAgaW50LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWlu
dDMyX3QpKTsKKworc2N0cF9hc3NvY190CXNjdHBfZ2V0YXNzb2NpZCBfX1AoKGludCwgc3RydWN0
IHNvY2thZGRyICopKTsKKworLyogZGVwcmVjYXRlZCAqLworc3NpemVfdAlzY3RwX3JlY3Ztc2cg
X19QKChpbnQsIHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICos
CisJICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50ICopKTsKKworc3NpemVfdAlzY3Rw
X3NlbmR2IF9fUCgoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LCBzdHJ1Y3Qgc29ja2Fk
ZHIgKiwKKwkgICAgaW50LCB2b2lkICosIHNvY2tsZW5fdCwgdW5zaWduZWQgaW50LCBpbnQpKTsK
Kworc3NpemVfdAlzY3RwX3JlY3Z2IF9fUCgoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50
LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90ICosIHZvaWQgKiwgc29ja2xlbl90
ICosIHVuc2lnbmVkIGludCAqLCBpbnQgKikpOworI2Vsc2UKK2ludAlzY3RwX3BlZWxvZmYoaW50
LCBzY3RwX2Fzc29jX3QpOworaW50CXNjdHBfYmluZHgoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwg
aW50LCBpbnQpOworaW50CXNjdHBfY29ubmVjdHgoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIg
KiwgaW50LCBzY3RwX2Fzc29jX3QgKik7CitpbnQJc2N0cF9nZXRhZGRybGVuKHNhX2ZhbWlseV90
KTsKK2ludAlzY3RwX2dldHBhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2thZGRy
ICoqKTsKK3ZvaWQJc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqKTsKK2ludAlzY3Rw
X2dldGxhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2thZGRyICoqKTsKK3ZvaWQJ
c2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqKTsKK2ludAlzY3RwX29wdF9pbmZvKGlu
dCwgc2N0cF9hc3NvY190LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICopOworCisvKiBkZXByZWNh
dGVkICovCitzc2l6ZV90CXNjdHBfc2VuZG1zZyhpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBj
b25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90LCB1aW50MzJfdCwgdWludDMy
X3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKiBkZXByZWNhdGVkICovCitz
c2l6ZV90CXNjdHBfc2VuZChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCSAgICBjb25zdCBz
dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCk7CisKKy8qIGRlcHJlY2F0ZWQgKi8KK3NzaXpl
X3QJc2N0cF9zZW5keChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIg
KiwKKwkgICAgaW50LCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCk7CisKKy8qIGRlcHJl
Y2F0ZWQgKi8KK3NzaXplX3QJc2N0cF9zZW5kbXNneChpbnQgc2QsIGNvbnN0IHZvaWQgKiwgc2l6
ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB1aW50MzJfdCwgdWludDMyX3QsIHVp
bnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCitzY3RwX2Fzc29jX3QJc2N0cF9nZXRhc3Nv
Y2lkKGludCwgc3RydWN0IHNvY2thZGRyICopOworCisvKiBkZXByZWNhdGVkICovCitzc2l6ZV90
CXNjdHBfcmVjdm1zZyhpbnQsIHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29j
a2xlbl90ICosCisJICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50ICopOworCitzc2l6
ZV90CXNjdHBfc2VuZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LCBzdHJ1Y3Qgc29j
a2FkZHIgKiwKKwkgICAgaW50LCB2b2lkICosIHNvY2tsZW5fdCwgdW5zaWduZWQgaW50LCBpbnQp
OworCitzc2l6ZV90CXNjdHBfcmVjdnYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50LCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90ICosIHZvaWQgKiwgc29ja2xlbl90ICos
IHVuc2lnbmVkIGludCAqLCBpbnQgKik7CisjZW5kaWYKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgkJ
CQkvKiAhX0tFUk5FTCAqLworI2VuZGlmCQkJCS8qICFfX3NjdHBfdWlvX2hfXyAqLwpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwppbmRleCBlNjlkZTI5YmIy
ZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi42ZmNjMDhkMTZkMzM3ZDk5ZTEyYjQ1Nzdi
MmEwOGIyNzUzNGJhYjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF91c2Vyc3BhY2UuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91
c2Vyc3BhY2UuYwpAQCAtMCwwICsxLDM2NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEt
MjAxMiBJcmVuZSBSdWVuZ2VsZXIKKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIE1pY2hhZWwg
VHVleGVuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisKKyNpZmRlZiBfV0lOMzIK
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8c3lzL3RpbWViLmg+Cisj
aW5jbHVkZSA8aXBobHBhcGkuaD4KKyNwcmFnbWEgY29tbWVudChsaWIsICJJUEhMUEFQSS5saWIi
KQorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oPgorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKyNpbmNsdWRlIDxwdGhyZWFkX25wLmg+Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpCisjaW5jbHVkZSA8c3lz
L3ByY3RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
Ky8qIEFkYXB0ZXIgdG8gdHJhbnNsYXRlIFVuaXggdGhyZWFkIHN0YXJ0IHJvdXRpbmVzIHRvIFdp
bmRvd3MgdGhyZWFkIHN0YXJ0CisgKiByb3V0aW5lcy4KKyAqLworc3RhdGljIERXT1JEIFdJTkFQ
SQorc2N0cF9jcmVhdGVfdGhyZWFkX2FkYXB0ZXIodm9pZCAqYXJnKSB7CisJc3RhcnRfcm91dGlu
ZV90IHN0YXJ0X3JvdXRpbmUgPSAoc3RhcnRfcm91dGluZV90KWFyZzsKKwlyZXR1cm4gc3RhcnRf
cm91dGluZShOVUxMKSA9PSBOVUxMOworfQorCitpbnQKK3NjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVhZCwgc3RhcnRfcm91dGluZV90IHN0YXJ0X3Jv
dXRpbmUpCit7CisJKnRocmVhZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCBzY3RwX2NyZWF0ZV90
aHJlYWRfYWRhcHRlciwKKwkJCSAgICAgICAodm9pZCAqKXN0YXJ0X3JvdXRpbmUsIDAsIE5VTEwp
OworCWlmICgqdGhyZWFkID09IE5VTEwpCisJCXJldHVybiBHZXRMYXN0RXJyb3IoKTsKKwlyZXR1
cm4gMDsKK30KKyNlbHNlCitpbnQKK3NjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUodXNlcmxh
bmRfdGhyZWFkX3QgKnRocmVhZCwgc3RhcnRfcm91dGluZV90IHN0YXJ0X3JvdXRpbmUpCit7CisJ
cmV0dXJuIHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgTlVMTCwgc3RhcnRfcm91dGluZSwgTlVMTCk7
Cit9CisjZW5kaWYKKwordm9pZAorc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoY29uc3Qg
Y2hhciAqbmFtZSkKK3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKKwlwdGhy
ZWFkX3NldG5hbWVfbnAobmFtZSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0xpbnV4KQorCXByY3RsKFBSX1NFVF9OQU1FLCBuYW1lKTsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKwlwdGhyZWFkX3NldF9uYW1lX25wKHB0aHJlYWRfc2Vs
ZigpLCBuYW1lKTsKKyNlbmRpZgorfQorCisjaWYgIWRlZmluZWQoX1dJTjMyKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19OYUNsKQoraW50CitzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21f
aWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCit7CisJc3RydWN0IGlmcmVxIGlmcjsKKwlp
bnQgZmQ7CisKKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKHN0cnVjdCBpZnJlcSkpOworCWlmIChp
Zl9pbmRleHRvbmFtZShpZl9pbmRleCwgaWZyLmlmcl9uYW1lKSAhPSBOVUxMKSB7CisJCS8qIFRP
RE8gY2FuIEkgdXNlIHRoZSByYXcgc29ja2V0IGhlcmUgYW5kIG5vdCBoYXZlIHRvIG9wZW4gYSBu
ZXcgb25lIHdpdGggZWFjaCBxdWVyeT8gKi8KKwkJaWYgKChmZCA9IHNvY2tldChhZiwgU09DS19E
R1JBTSwgMCkpIDwgMCkKKwkJCXJldHVybiAoMCk7CisJCWlmIChpb2N0bChmZCwgU0lPQ0dJRk1U
VSwgJmlmcikgPCAwKSB7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWNs
b3NlKGZkKTsKKwkJcmV0dXJuIGlmci5pZnJfbXR1OworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7
CisJfQorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wpCitpbnQK
K3NjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZfaW5kZXgsIGludCBh
ZikKK3sKKwlyZXR1cm4gMTI4MDsKK30KKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCitpbnQKK3Nj
dHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZfaW5kZXgsIGludCBhZikK
K3sKKwlQSVBfQURBUFRFUl9BRERSRVNTRVMgcEFkYXB0ZXJBZGRycywgcEFkYXB0OworCURXT1JE
IEFkYXB0ZXJBZGRyc1NpemUsIEVycjsKKwlpbnQgcmV0OworCisJcmV0ID0gMDsKKwlBZGFwdGVy
QWRkcnNTaXplID0gMDsKKwlwQWRhcHRlckFkZHJzID0gTlVMTDsKKwlpZiAoKEVyciA9IEdldEFk
YXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1Np
emUpKSAhPSAwKSB7CisJCWlmICgoRXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVy
ciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIkdldEFkYXB0ZXJzQWRkcmVzc2VzKCkgc2l6aW5nIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGUgJWQsIEFkYXB0ZXJBZGRyc1NpemUgPSAlZFxuIiwgRXJyLCBBZGFwdGVyQWRkcnNTaXplKTsK
KwkJCXJldCA9IC0xOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQorCWlmICgocEFkYXB0ZXJB
ZGRycyA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0ZXJB
ZGRyc1NpemUpKSA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJNZW1vcnkg
YWxsb2NhdGlvbiBlcnJvciFcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290byBjbGVhbnVwOworCX0K
KwlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgcEFk
YXB0ZXJBZGRycywgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSBFUlJPUl9TVUNDRVNTKSB7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3NlcygpIGZhaWxlZCB3aXRo
IGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJCXJldCA9IC0xOworCQlnb3RvIGNsZWFudXA7CisJ
fQorCWZvciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRhcHQt
Pk5leHQpIHsKKwkJaWYgKHBBZGFwdC0+SWZJbmRleCA9PSBpZl9pbmRleCkgeworCQkJcmV0ID0g
cEFkYXB0LT5NdHU7CisJCQlicmVhazsKKwkJfQorCX0KK2NsZWFudXA6CisJaWYgKHBBZGFwdGVy
QWRkcnMgIT0gTlVMTCkgeworCQlHbG9iYWxGcmVlKHBBZGFwdGVyQWRkcnMpOworCX0KKwlyZXR1
cm4gKHJldCk7Cit9CisKK3ZvaWQKK2dldHdpbnRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYp
Cit7CisJc3RydWN0IHRpbWViIHRiOworCisJZnRpbWUoJnRiKTsKKwl0di0+dHZfc2VjID0gKGxv
bmcpdGIudGltZTsKKwl0di0+dHZfdXNlYyA9IChsb25nKSh0Yi5taWxsaXRtKSAqIDEwMDBMOwor
fQorCitpbnQKK3dpbl9pZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICppZm5hbWUpCit7CisJSVBf
QURBUFRFUl9BRERSRVNTRVMgKmFkZHJlc3NlcywgKmFkZHI7CisJVUxPTkcgc3RhdHVzLCBzaXpl
OworCWludCBpbmRleCA9IDA7CisKKwlpZiAoIWlmbmFtZSkgeworCQlyZXR1cm4gMDsKKwl9CisK
KwlzaXplID0gMDsKKwlzdGF0dXMgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAs
IE5VTEwsIE5VTEwsICZzaXplKTsKKwlpZiAoc3RhdHVzICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxP
VykgeworCQlyZXR1cm4gMDsKKwl9CisJYWRkcmVzc2VzID0gbWFsbG9jKHNpemUpOworCXN0YXR1
cyA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgYWRkcmVzc2VzLCAm
c2l6ZSk7CisJaWYgKHN0YXR1cyA9PSBFUlJPUl9TVUNDRVNTKSB7CisJCWZvciAoYWRkciA9IGFk
ZHJlc3NlczsgYWRkcjsgYWRkciA9IGFkZHItPk5leHQpIHsKKwkJCWlmIChhZGRyLT5BZGFwdGVy
TmFtZSAmJiAhc3RyY21wKGlmbmFtZSwgYWRkci0+QWRhcHRlck5hbWUpKSB7CisJCQkJaW5kZXgg
PSBhZGRyLT5JZkluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJZnJlZShhZGRy
ZXNzZXMpOworCXJldHVybiBpbmRleDsKK30KKworI2lmIFdJTlZFUiA8IDB4MDYwMAorLyogVGhl
c2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGJhc2VkIG9uIHRoZSBjb2RlIGF0CisgKiBodHRwOi8v
d3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC93aW4zMi1jdi0xLmh0bWwKKyAqIFRoZXJlZm9yZSwg
Zm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRoZSBmb2xsb3dpbmcgYXBwbGllczoKKyAqCisgKgor
ICogQ29weXJpZ2h0IGFuZCBMaWNlbnNpbmcgSW5mb3JtYXRpb24gZm9yIEFDRShUTSksIFRBTyhU
TSksIENJQU8oVE0pLAorICogREFuQ0UoVE0pLCBhbmQgQ29TTUlDKFRNKQorICoKKyAqIFsxXUFD
RShUTSksIFsyXVRBTyhUTSksIFszXUNJQU8oVE0pLCBEQW5DRShUTSksIGFuZCBbNF1Db1NNSUMo
VE0pCisgKiAoaGVuY2Vmb3J0aCByZWZlcnJlZCB0byBhcyAiRE9DIHNvZnR3YXJlIikgYXJlIGNv
cHlyaWdodGVkIGJ5CisgKiBbNV1Eb3VnbGFzIEMuIFNjaG1pZHQgYW5kIGhpcyBbNl1yZXNlYXJj
aCBncm91cCBhdCBbN11XYXNoaW5ndG9uCisgKiBVbml2ZXJzaXR5LCBbOF1Vbml2ZXJzaXR5IG9m
IENhbGlmb3JuaWEsIElydmluZSwgYW5kIFs5XVZhbmRlcmJpbHQKKyAqIFVuaXZlcnNpdHksIENv
cHlyaWdodCAoYykgMTk5My0yMDEyLCBhbGwgcmlnaHRzIHJlc2VydmVkLiBTaW5jZSBET0MKKyAq
IHNvZnR3YXJlIGlzIG9wZW4tc291cmNlLCBmcmVlbHkgYXZhaWxhYmxlIHNvZnR3YXJlLCB5b3Ug
YXJlIGZyZWUgdG8KKyAqIHVzZSwgbW9kaWZ5LCBjb3B5LCBhbmQgZGlzdHJpYnV0ZS0tcGVycGV0
dWFsbHkgYW5kIGlycmV2b2NhYmx5LS10aGUKKyAqIERPQyBzb2Z0d2FyZSBzb3VyY2UgY29kZSBh
bmQgb2JqZWN0IGNvZGUgcHJvZHVjZWQgZnJvbSB0aGUgc291cmNlLCBhcworICogd2VsbCBhcyBj
b3B5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUuIFlv
dQorICogbXVzdCwgaG93ZXZlciwgaW5jbHVkZSB0aGlzIGNvcHlyaWdodCBzdGF0ZW1lbnQgYWxv
bmcgd2l0aCBhbnkgY29kZQorICogYnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlIHRoYXQgeW91IHJl
bGVhc2UuIE5vIGNvcHlyaWdodCBzdGF0ZW1lbnQKKyAqIG5lZWRzIHRvIGJlIHByb3ZpZGVkIGlm
IHlvdSBqdXN0IHNoaXAgYmluYXJ5IGV4ZWN1dGFibGVzIG9mIHlvdXIKKyAqIHNvZnR3YXJlIHBy
b2R1Y3RzLgorICoKKyAqIFlvdSBjYW4gdXNlIERPQyBzb2Z0d2FyZSBpbiBjb21tZXJjaWFsIGFu
ZC9vciBiaW5hcnkgc29mdHdhcmUgcmVsZWFzZXMKKyAqIGFuZCBhcmUgdW5kZXIgbm8gb2JsaWdh
dGlvbiB0byByZWRpc3RyaWJ1dGUgYW55IG9mIHlvdXIgc291cmNlIGNvZGUKKyAqIHRoYXQgaXMg
YnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlLiBOb3RlLCBob3dldmVyLCB0aGF0IHlvdSBtYXkgbm90
CisgKiBtaXNhcHByb3ByaWF0ZSB0aGUgRE9DIHNvZnR3YXJlIGNvZGUsIHN1Y2ggYXMgY29weXJp
Z2h0aW5nIGl0IHlvdXJzZWxmCisgKiBvciBjbGFpbWluZyBhdXRob3JzaGlwIG9mIHRoZSBET0Mg
c29mdHdhcmUgY29kZSwgaW4gYSB3YXkgdGhhdCB3aWxsCisgKiBwcmV2ZW50IERPQyBzb2Z0d2Fy
ZSBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIGZyZWVseSB1c2luZyBhbgorICogb3Blbi1zb3VyY2Ug
ZGV2ZWxvcG1lbnQgbW9kZWwuIFlvdSBuZWVkbid0IGluZm9ybSBhbnlvbmUgdGhhdCB5b3UncmUK
KyAqIHVzaW5nIERPQyBzb2Z0d2FyZSBpbiB5b3VyIHNvZnR3YXJlLCB0aG91Z2ggd2UgZW5jb3Vy
YWdlIHlvdSB0byBsZXQKKyAqIFsxMF11cyBrbm93IHNvIHdlIGNhbiBwcm9tb3RlIHlvdXIgcHJv
amVjdCBpbiB0aGUgWzExXURPQyBzb2Z0d2FyZQorICogc3VjY2VzcyBzdG9yaWVzLgorICoKKyAq
IFRoZSBbMTJdQUNFLCBbMTNdVEFPLCBbMTRdQ0lBTywgWzE1XURBbkNFLCBhbmQgWzE2XUNvU01J
QyB3ZWIgc2l0ZXMKKyAqIGFyZSBtYWludGFpbmVkIGJ5IHRoZSBbMTddRE9DIEdyb3VwIGF0IHRo
ZSBbMThdSW5zdGl0dXRlIGZvciBTb2Z0d2FyZQorICogSW50ZWdyYXRlZCBTeXN0ZW1zIChJU0lT
KSBhbmQgdGhlIFsxOV1DZW50ZXIgZm9yIERpc3RyaWJ1dGVkIE9iamVjdAorICogQ29tcHV0aW5n
IG9mIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgU3QuIExvdWlzIGZvciB0aGUgZGV2ZWxvcG1lbnQg
b2YKKyAqIG9wZW4tc291cmNlIHNvZnR3YXJlIGFzIHBhcnQgb2YgdGhlIG9wZW4tc291cmNlIHNv
ZnR3YXJlIGNvbW11bml0eS4KKyAqIFN1Ym1pc3Npb25zIGFyZSBwcm92aWRlZCBieSB0aGUgc3Vi
bWl0dGVyIGBgYXMgaXMnJyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIHdoYXRzb2V2ZXIsIGluY2x1
ZGluZyBhbnkgd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5LCBub25pbmZyaW5nZW1lbnQKKyAq
IG9mIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSwgb3IgZml0bmVzcyBmb3IgYW55
IHBhcnRpY3VsYXIKKyAqIHB1cnBvc2UuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBzdWJtaXR0ZXIg
YmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LAorICogaW5kaXJlY3QsIHNwZWNpYWwsIGV4ZW1wbGFy
eSwgcHVuaXRpdmUsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKKyAqIGluY2x1ZGluZyB3aXRo
b3V0IGxpbWl0YXRpb24sIGxvc3QgcHJvZml0cywgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZQorICog
cG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBMaWtld2lzZSwgRE9DIHNvZnR3YXJlIGlzIHBy
b3ZpZGVkIGFzIGlzCisgKiB3aXRoIG5vIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQsIGluY2x1ZGlu
ZyB0aGUgd2FycmFudGllcyBvZiBkZXNpZ24sCisgKiBtZXJjaGFudGFiaWxpdHksIGFuZCBmaXRu
ZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwKKyAqIG5vbmluZnJpbmdlbWVudCwgb3IgYXJp
c2luZyBmcm9tIGEgY291cnNlIG9mIGRlYWxpbmcsIHVzYWdlIG9yIHRyYWRlCisgKiBwcmFjdGlj
ZS4gV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIFZhbmRlcmJpbHQgVW5pdmVyc2l0
eSwKKyAqIHRoZWlyIGVtcGxveWVlcywgYW5kIHN0dWRlbnRzIHNoYWxsIGhhdmUgbm8gbGlhYmls
aXR5IHdpdGggcmVzcGVjdCB0bworICogdGhlIGluZnJpbmdlbWVudCBvZiBjb3B5cmlnaHRzLCB0
cmFkZSBzZWNyZXRzIG9yIGFueSBwYXRlbnRzIGJ5IERPQworICogc29mdHdhcmUgb3IgYW55IHBh
cnQgdGhlcmVvZi4gTW9yZW92ZXIsIGluIG5vIGV2ZW50IHdpbGwgV2FzaGluZ3RvbgorICogVW5p
dmVyc2l0eSwgVUMgSXJ2aW5lLCBvciBWYW5kZXJiaWx0IFVuaXZlcnNpdHksIHRoZWlyIGVtcGxv
eWVlcywgb3IKKyAqIHN0dWRlbnRzIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZSBvciBw
cm9maXRzIG9yIG90aGVyIHNwZWNpYWwsCisgKiBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBk
YW1hZ2VzLgorICoKKyAqIERPQyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRoIG5vIHN1cHBvcnQg
YW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24KKyAqIHRoZSBwYXJ0IG9mIFdhc2hpbmd0b24g
VW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksCisgKiB0aGVpciBl
bXBsb3llZXMsIG9yIHN0dWRlbnRzIHRvIGFzc2lzdCBpbiBpdHMgdXNlLCBjb3JyZWN0aW9uLAor
ICogbW9kaWZpY2F0aW9uLCBvciBlbmhhbmNlbWVudC4gQSBbMjBdbnVtYmVyIG9mIGNvbXBhbmll
cyBhcm91bmQgdGhlCisgKiB3b3JsZCBwcm92aWRlIGNvbW1lcmNpYWwgc3VwcG9ydCBmb3IgRE9D
IHNvZnR3YXJlLCBob3dldmVyLiBET0MKKyAqIHNvZnR3YXJlIGlzIFkySy1jb21wbGlhbnQsIGFz
IGxvbmcgYXMgdGhlIHVuZGVybHlpbmcgT1MgcGxhdGZvcm0gaXMKKyAqIFkySy1jb21wbGlhbnQu
IExpa2V3aXNlLCBET0Mgc29mdHdhcmUgaXMgY29tcGxpYW50IHdpdGggdGhlIG5ldyBVUworICog
ZGF5bGlnaHQgc2F2aW5ncyBydWxlIHBhc3NlZCBieSBDb25ncmVzcyBhcyAiVGhlIEVuZXJneSBQ
b2xpY3kgQWN0IG9mCisgKiAyMDA1LCIgd2hpY2ggZXN0YWJsaXNoZWQgbmV3IGRheWxpZ2h0IHNh
dmluZ3MgdGltZXMgKERTVCkgcnVsZXMgZm9yCisgKiB0aGUgVW5pdGVkIFN0YXRlcyB0aGF0IGV4
cGFuZCBEU1QgYXMgb2YgTWFyY2ggMjAwNy4gU2luY2UgRE9DIHNvZnR3YXJlCisgKiBvYnRhaW5z
IHRpbWUvZGF0ZSBhbmQgY2FsZW5kYXJpbmcgaW5mb3JtYXRpb24gZnJvbSBvcGVyYXRpbmcgc3lz
dGVtcworICogdXNlcnMgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhlIG5ldyBEU1QgcnVsZXMg
YXMgbG9uZyBhcyB0aGV5CisgKiB1cGdyYWRlIHRoZWlyIG9wZXJhdGluZyBzeXN0ZW1zIGFjY29y
ZGluZ2x5LgorICoKKyAqIFRoZSBuYW1lcyBBQ0UoVE0pLCBUQU8oVE0pLCBDSUFPKFRNKSwgREFu
Q0UoVE0pLCBDb1NNSUMoVE0pLAorICogV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUs
IGFuZCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksIG1heSBub3QKKyAqIGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiBz
b3VyY2Ugd2l0aG91dCBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIFdhc2hpbmd0b24g
VW5pdmVyc2l0eSwKKyAqIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LiBUaGlz
IGxpY2Vuc2UgZ3JhbnRzIG5vIHBlcm1pc3Npb24KKyAqIHRvIGNhbGwgcHJvZHVjdHMgb3Igc2Vy
dmljZXMgZGVyaXZlZCBmcm9tIHRoaXMgc291cmNlIEFDRShUTSksCisgKiBUQU8oVE0pLCBDSUFP
KFRNKSwgREFuQ0UoVE0pLCBvciBDb1NNSUMoVE0pLCBub3IgZG9lcyBpdCBncmFudAorICogcGVy
bWlzc2lvbiBmb3IgdGhlIG5hbWUgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIG9y
CisgKiBWYW5kZXJiaWx0IFVuaXZlcnNpdHkgdG8gYXBwZWFyIGluIHRoZWlyIG5hbWVzLgorICoK
KyAqIElmIHlvdSBoYXZlIGFueSBzdWdnZXN0aW9ucywgYWRkaXRpb25zLCBjb21tZW50cywgb3Ig
cXVlc3Rpb25zLCBwbGVhc2UKKyAqIGxldCBbMjFdbWUga25vdy4KKyAqCisgKiBbMjJdRG91Z2xh
cyBDLiBTY2htaWR0CisgKgorICogUmVmZXJlbmNlcworICoKKyAqICAxLiBodHRwOi8vd3d3LmNz
Lnd1c3RsLmVkdS9+c2NobWlkdC9BQ0UuaHRtbAorICogIDIuIGh0dHA6Ly93d3cuY3Mud3VzdGwu
ZWR1L35zY2htaWR0L1RBTy5odG1sCisgKiAgMy4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5l
ZHUvQ0lBTy8KKyAqICA0LiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0LmVkdS9jb3NtaWMvCisg
KiAgNS4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvfnNjaG1pZHQvCisgKiAgNi4gaHR0
cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLW1lbWJlcnMuaHRtbAorICogIDcuIGh0
dHA6Ly93d3cud3VzdGwuZWR1LworICogIDguIGh0dHA6Ly93d3cudWNpLmVkdS8KKyAqICA5LiBo
dHRwOi8vd3d3LnZhbmRlcmJpbHQuZWR1LworICogMTAuIG1haWx0bzpkb2NfZ3JvdXBAY3Mud3Vz
dGwuZWR1CisgKiAxMS4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLXVzZXJz
Lmh0bWwKKyAqIDEyLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9BQ0UuaHRtbAor
ICogMTMuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L1RBTy5odG1sCisgKiAxNC4g
aHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvQ0lBTy8KKyAqIDE1LiBodHRwOi8vd3d3LmRy
ZS52YW5kZXJiaWx0LmVkdS9+c2NobWlkdC9ET0NfUk9PVC9EQW5DRS8KKyAqIDE2LiBodHRwOi8v
d3d3LmRyZS52YW5kZXJiaWx0LmVkdS9jb3NtaWMvCisgKiAxNy4gaHR0cDovL3d3dy5kcmUudmFu
ZGVyYmlsdC5lZHUvCisgKiAxOC4gaHR0cDovL3d3dy5pc2lzLnZhbmRlcmJpbHQuZWR1LworICog
MTkuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2RvYy1jZW50ZXIuaHRtbAorICog
MjAuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2NvbW1lcmNpYWwtc3VwcG9ydC5o
dG1sCisgKiAyMS4gbWFpbHRvOmQuc2NobWlkdEB2YW5kZXJiaWx0LmVkdQorICogMjIuIGh0dHA6
Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L35zY2htaWR0LworICogMjMuIGh0dHA6Ly93d3cuY3Mu
d3VzdGwuZWR1L0FDRS5odG1sCisgKi8KKwordm9pZAorSW5pdGlhbGl6ZVhQQ29uZGl0aW9uVmFy
aWFibGUodXNlcmxhbmRfY29uZF90ICpjdikKK3sKKwljdi0+d2FpdGVyc19jb3VudCA9IDA7CisJ
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKGN2LT53YWl0ZXJzX2NvdW50X2xvY2spKTsKKwlj
di0+ZXZlbnRzX1tDX1NJR05BTF0gPSBDcmVhdGVFdmVudCAoTlVMTCwgRkFMU0UsIEZBTFNFLCBO
VUxMKTsKKwljdi0+ZXZlbnRzX1tDX0JST0FEQ0FTVF0gPSBDcmVhdGVFdmVudCAoTlVMTCwgVFJV
RSwgRkFMU0UsIE5VTEwpOworfQorCit2b2lkCitEZWxldGVYUENvbmRpdGlvblZhcmlhYmxlKHVz
ZXJsYW5kX2NvbmRfdCAqY3YpCit7CisJQ2xvc2VIYW5kbGUoY3YtPmV2ZW50c19bQ19CUk9BRENB
U1RdKTsKKwlDbG9zZUhhbmRsZShjdi0+ZXZlbnRzX1tDX1NJR05BTF0pOworCURlbGV0ZUNyaXRp
Y2FsU2VjdGlvbigmKGN2LT53YWl0ZXJzX2NvdW50X2xvY2spKTsKK30KKworaW50CitTbGVlcFhQ
Q29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICpjdiwgdXNlcmxhbmRfbXV0ZXhfdCAq
bXR4KQoreworCWludCByZXN1bHQsIGxhc3Rfd2FpdGVyOworCisJRW50ZXJDcml0aWNhbFNlY3Rp
b24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCWN2LT53YWl0ZXJzX2NvdW50Kys7CisJTGVh
dmVDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCUxlYXZlQ3JpdGlj
YWxTZWN0aW9uIChtdHgpOworCXJlc3VsdCA9IFdhaXRGb3JNdWx0aXBsZU9iamVjdHMoMiwgY3Yt
PmV2ZW50c18sIEZBTFNFLCBJTkZJTklURSk7CisJaWYgKHJlc3VsdD09LTEpIHsKKwkJcmVzdWx0
ID0gR2V0TGFzdEVycm9yKCk7CisJfQorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVy
c19jb3VudF9sb2NrKTsKKwljdi0+d2FpdGVyc19jb3VudC0tOworCWxhc3Rfd2FpdGVyID0gcmVz
dWx0ID09IChDX1NJR05BTCArIENfQlJPQURDQVNUICYmIChjdi0+d2FpdGVyc19jb3VudCA9PSAw
KSk7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCWlm
IChsYXN0X3dhaXRlcikKKwkJUmVzZXRFdmVudChjdi0+ZXZlbnRzX1tDX0JST0FEQ0FTVF0pOwor
CUVudGVyQ3JpdGljYWxTZWN0aW9uIChtdHgpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQK
K1dha2VBbGxYUENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YpCit7CisJaW50
IGhhdmVfd2FpdGVyczsKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY3YtPndhaXRlcnNfY291bnRf
bG9jayk7CisJaGF2ZV93YWl0ZXJzID0gY3YtPndhaXRlcnNfY291bnQgPiAwOworCUxlYXZlQ3Jp
dGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKKwlpZiAoaGF2ZV93YWl0ZXJz
KQorCQlTZXRFdmVudCAoY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdKTsKK30KKyNlbmRpZgorI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCmluZGV4IGU2OWRl
MjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmJiNWVhOGUwYjAwOTE2NmIyZTQ1
ZjIxYjc5ZDIzODM0OWNhYjY0OTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3VzcnJlcS5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3VzcnJlcS5jCkBAIC0wLDAgKzEsOTA0OCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENp
c2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBh
KSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAq
ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28g
U3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3VzcnJlcS5jIDMz
NDcyNSAyMDE4LTA2LTA2IDE5OjI3OjA2WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9w
cm9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX2hlYWRlci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNp
ZmRlZiBJTkVUNgorI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRw
dXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNk
X2FkZHIuaD4KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2NhbGxvdXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgor
CisjaWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUKQorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9wZWVsb2ZmLmg+CisjZW5kaWYJCQkJLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09Q
VCAqLworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gNwor
I2VuZGlmCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2N0cF9jY19mdW5jdGlvbnMgc2N0cF9jY19m
dW5jdGlvbnNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2N0cF9zc19mdW5jdGlvbnMgc2N0cF9z
c19mdW5jdGlvbnNbXTsKKwordm9pZAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3NjdHBf
aW5pdCh1aW50MTZfdCBwb3J0LAorICAgICAgICAgIGludCAoKmNvbm5fb3V0cHV0KSh2b2lkICph
ZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNl
dF9kZiksCisgICAgICAgICAgdm9pZCAoKmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVmaW5lZChBUFBMRV9MRU9Q
QVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYhZGVmaW5lZChBUFBMRV9MSU9O
KSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pKQorc2N0cF9pbml0KHN0cnVjdCBwcm90
b3N3ICpwcCBTQ1RQX1VOVVNFRCwgc3RydWN0IGRvbWFpbiAqZHAgU0NUUF9VTlVTRUQpCisjZWxz
ZQorc2N0cF9pbml0KHZvaWQpCisjZW5kaWYKK3sKKyNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdV9sb25nIHNiX21heF9hZGo7CisKKyNlbmRpZgor
CS8qIEluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3lzY3RsZWQgdmFyaWFibGVzICovCisJc2N0
cF9pbml0X3N5c2N0bHMoKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wp
CisJc3JhbmQoKHVuc2lnbmVkIGludCl0aW1lKE5VTEwpKTsKKyNlbHNlCisJc3JhbmRvbShnZXRw
aWQoKSk7IC8qIHNvIGlucC0+c2N0cF9lcC5yYW5kb21fbnVtYmVycyBhcmUgdHJ1bHkgcmFuZG9t
Li4uICovCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCXNjdHBfc2Vu
ZHNwYWNlID0gU0JfTUFYOworCXNjdHBfcmVjdnNwYWNlID0gU0JfTUFYOworCisjZWxpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdf
cG9ydCkgPSBwb3J0OworI2Vsc2UKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisJaWYgKChubWJj
bHVzdGVycyAvIDgpID4gU0NUUF9BU09DX01BWF9DSFVOS1NfT05fUVVFVUUpCisJCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSA9IChubWJjbHVzdGVycyAvIDgpOwor
I2VuZGlmCisJLyoKKwkgKiBBbGxvdyBhIHVzZXIgdG8gdGFrZSBubyBtb3JlIHRoYW4gMS8yIHRo
ZSBudW1iZXIgb2YgY2x1c3RlcnMgb3IKKwkgKiB0aGUgU0JfTUFYIHdoaWNoZXZlciBpcyBzbWFs
bGVyIGZvciB0aGUgc2VuZCB3aW5kb3cuCisJICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
c2JfbWF4X2FkaiA9ICh1X2xvbmcpKCh1X3F1YWRfdCkgKHNiX21heCkgKiBNQ0xCWVRFUyAvIChN
U0laRSArIE1DTEJZVEVTKSk7CisjZWxzZQorCXNiX21heF9hZGogPSAodV9sb25nKSgodV9xdWFk
X3QpIChTQl9NQVgpICogTUNMQllURVMgLyAoTVNJWkUgKyBNQ0xCWVRFUykpOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFjZSkg
PSBzYl9tYXhfYWRqOworI2Vsc2UKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSA9
IG1pbihzYl9tYXhfYWRqLAorCSAgICAoKCh1aW50MzJfdClubWJjbHVzdGVycyAvIDIpICogU0NU
UF9ERUZBVUxUX01BWFNFR01FTlQpKTsKKyNlbmRpZgorCS8qCisJICogTm93IGZvciB0aGUgcmVj
diB3aW5kb3csIHNob3VsZCB3ZSB0YWtlIHRoZSBzYW1lIGFtb3VudD8gb3IKKwkgKiBzaG91bGQg
SSBkbyAxLzIgdGhlIFNCX01BWCBpbnN0ZWFkIGluIHRoZSBTQl9NQVggbWluIGFib3ZlLiBGb3IK
KwkgKiBub3cgSSB3aWxsIGp1c3QgY29weS4KKwkgKi8KKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cmVjdnNwYWNlKSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpOworI2VuZGlmCisJ
U0NUUF9CQVNFX1ZBUihmaXJzdF90aW1lKSA9IDA7CisJU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9p
bml0aWFsaXplZCkgPSAwOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSAtMTsKKyNlbmRpZgorI2Vu
ZGlmCisjaWZkZWYgSU5FVAorCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7
CisJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7CisJU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisjZW5kaWYKKwlTQ1RQX0JBU0VfVkFS
KHRpbWVyX3RocmVhZF9zaG91bGRfZXhpdCkgPSAwOworCVNDVFBfQkFTRV9WQVIoY29ubl9vdXRw
dXQpID0gY29ubl9vdXRwdXQ7CisJU0NUUF9CQVNFX1ZBUihkZWJ1Z19wcmludGYpID0gZGVidWdf
cHJpbnRmOworCVNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPSAwOworI2VuZGlmCisJ
c2N0cF9wY2JfaW5pdCgpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzY3RwX3N0YXJ0
X3RpbWVyKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNDVFBfUEFDS0VUX0xPR0dJTkcpCisJU0NU
UF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpID0gMDsKKwlTQ1RQX0JBU0VfVkFSKHBhY2tl
dF9sb2dfZW5kKSA9IDA7CisJbWVtc2V0KCZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVy
KSwgMCwgU0NUUF9QQUNLRVRfTE9HX1NJWkUpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExF
X18pCisJU0NUUF9CQVNFX1ZBUihzY3RwX21haW5fdGltZXJfdGlja3MpID0gMDsKKwlzY3RwX3N0
YXJ0X21haW5fdGltZXIoKTsKKwl0aW1lb3V0KHNjdHBfZGVsYXllZF9zdGFydHVwLCBOVUxMLCAx
KTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBWSU1BR0UK
K3N0YXRpYyB2b2lkCitzY3RwX2ZpbmlzaCh2b2lkICp1bnVzZWQgX191bnVzZWQpCit7CisJc2N0
cF9wY2JfZmluaXNoKCk7Cit9CitWTkVUX1NZU1VOSU5JVChzY3RwLCBTSV9TVUJfUFJPVE9fRE9N
QUlOLCBTSV9PUkRFUl9GT1VSVEgsIHNjdHBfZmluaXNoLCBOVUxMKTsKKyNlbmRpZgorI2Vsc2UK
K3ZvaWQKK3NjdHBfZmluaXNoKHZvaWQpCit7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJdW50
aW1lb3V0KHNjdHBfZGVsYXllZF9zdGFydHVwLCBOVUxMKTsKKwlzY3RwX292ZXJfdWRwX3N0b3Ao
KTsKKwlzY3RwX2FkZHJlc3NfbW9uaXRvcl9zdG9wKCk7CisJc2N0cF9zdG9wX21haW5fdGltZXIo
KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJcmVjdl90aHJlYWRfZGVzdHJveSgpOworI2VuZGlmCisjaWYg
IWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSAhPSAtMSkg
eworCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcm91dGUpLCBOVUxMKTsK
Kwl9CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElORVQKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cCkgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisJCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3KSwg
SU5GSU5JVEUpOworCQlDbG9zZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpKTsK
KyNlbHNlCisJCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCBOVUxM
KTsKKyNlbmRpZgorCX0KKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgIT0g
LTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCVdhaXRGb3JTaW5n
bGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwKSwgSU5GSU5JVEUpOworCQlDbG9z
ZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHApKTsKKyNlbHNlCisJCXB0aHJlYWRf
am9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHApLCBOVUxMKTsKKyNlbmRpZgorCX0KKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2
KSAhPSAtMSkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJV2FpdEZv
clNpbmdsZU9iamVjdChTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXc2KSwgSU5GSU5JVEUpOwor
CQlDbG9zZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXc2KSk7CisjZWxzZQorCQlw
dGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3NiksIE5VTEwpOworI2VuZGlm
CisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpIHsKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCVdhaXRGb3JTaW5nbGVPYmplY3Qo
U0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwNiksIElORklOSVRFKTsKKwkJQ2xvc2VIYW5kbGUo
U0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwNikpOworI2Vsc2UKKwkJcHRocmVhZF9qb2luKFND
VFBfQkFTRV9WQVIocmVjdnRocmVhZHVkcDYpLCBOVUxMKTsKKyNlbmRpZgorCX0KKyNlbmRpZgor
CWF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zaG91bGRfZXhp
dCksIDAsIDEpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlXYWl0Rm9y
U2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwgSU5GSU5JVEUpOworCUNs
b3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSk7CisjZWxzZQorCXB0aHJlYWRf
am9pbihTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCksIE5VTEwpOworI2VuZGlmCisjZW5kaWYK
KwlzY3RwX3BjYl9maW5pc2goKTsKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQorCXNjdHBfZmlu
aXNoX3N5c2N0bHMoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfcGF0aG10dV9h
ZGp1c3RtZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qgbnh0c3opCit7CisJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXVpbnQxNl90IG92ZXJoZWFkOworCisJLyogQWRq
dXN0IHRoYXQgdG9vICovCisJc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPSBueHRzejsKKwkvKiBu
b3cgb2ZmIHRvIHN1YnRyYWN0IElQX0RGIGZsYWcgaWYgbmVlZGVkICovCisJb3ZlcmhlYWQgPSBJ
UF9IRFJfU0laRSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJaWYgKHNjdHBfYXV0aF9pc19y
ZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykpIHsK
KwkJb3ZlcmhlYWQgKz0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2ht
YWNfaWQpOworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikg
eworCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJfQorCX0KKwlU
QUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikgeworCQkJLyoKKwkJCSAq
IEZvciB0aGlzIGd1eSB3ZSBhbHNvIG1hcmsgZm9yIGltbWVkaWF0ZSByZXNlbmQKKwkJCSAqIHNp
bmNlIHdlIHNlbnQgdG8gYmlnIG9mIGNodW5rCisJCQkgKi8KKwkJCWNoay0+ZmxhZ3MgfD0gQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9S
RVNFTkQpIHsKKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNoayk7CisJCQkJc2N0cF90
b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKKwkJCQljaGstPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1JFU0VORDsKKwkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1
ZV9yZXRyYW5fY250KTsKKwkJCQljaGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9
IDA7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
RkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hU
X0xPR19ET1dOX1BNVFUsCisJCQkJCQkgICAgICAgY2hrLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJ
CQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUsCisJCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50
cHRyX3QpY2hrLT53aG9UbywKKwkJCQkJCSAgICAgICBjaGstPnJlYy5kYXRhLnRzbik7CisJCQkJ
fQorCQkJCS8qIENsZWFyIGFueSB0aW1lIHNvIE5PIFJUVCBpcyBiZWluZyBkb25lICovCisJCQkJ
Y2hrLT5kb19ydHQgPSAwOworCQkJfQorCQl9CisJfQorfQorCisjaWZkZWYgSU5FVAorI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkCitzY3RwX25vdGlmeShzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLAorICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgdWludDhfdCBpY21wX3R5cGUsCisg
ICAgICAgICAgICB1aW50OF90IGljbXBfY29kZSwKKyAgICAgICAgICAgIHVpbnQxNl90IGlwX2xl
biwKKyAgICAgICAgICAgIHVpbnQzMl90IG5leHRfbXR1KQoreworI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCXN0cnVjdCBzb2NrZXQgKnNv
OworI2VuZGlmCisJaW50IHRpbWVyX3N0b3BwZWQ7CisKKwlpZiAoaWNtcF90eXBlICE9IElDTVBf
VU5SRUFDSCkgeworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdW5yZWFjaGFibGUgKi8KKwkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1cm47CisJfQorCWlmICgoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORVQpIHx8CisJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX0hPU1Qp
IHx8CisJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOKSB8fAorCSAg
ICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9IT1NUX1VOS05PV04pIHx8CisJICAgIChpY21w
X2NvZGUgPT0gSUNNUF9VTlJFQUNIX0lTT0xBVEVEKSB8fAorCSAgICAoaWNtcF9jb2RlID09IElD
TVBfVU5SRUFDSF9ORVRfUFJPSElCKSB8fAorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFD
SF9IT1NUX1BST0hJQikgfHwKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykKKwkgICAgKGljbXBfY29k
ZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU4pKSB7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X05ldEJTRCkKKwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU5fUFJPSElCSVQp
KSB7CisjZWxzZQorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9GSUxURVJfUFJPSElC
KSkgeworI2VuZGlmCisJCS8qIE1hcmsgdGhlIG5ldCB1bnJlYWNoYWJsZS4gKi8KKwkJaWYgKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJCS8qIE9LLCB0aGF0IGRl
c3RpbmF0aW9uIGlzIE5PVCByZWFjaGFibGUuICovCisJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflND
VFBfQUREUl9SRUFDSEFCTEU7CisJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsK
KwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwKKwkJCSAgICAg
ICAgICAgICAgICBzdGNiLCAwLAorCQkJICAgICAgICAgICAgICAgICh2b2lkICopbmV0LCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9IGVsc2Ug
IGlmICgoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9QUk9UT0NPTCkgfHwKKwkJICAgIChpY21w
X2NvZGUgPT0gSUNNUF9VTlJFQUNIX1BPUlQpKSB7CisJCS8qIFRyZWF0IGl0IGxpa2UgYW4gQUJP
UlQuICovCisJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDEsIDAsIE5VTEwsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlT
Q1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJCSh2b2lkKXNj
dHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCSAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18yKTsKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJLyogU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOyBNVDogSSB0
aGluayB0aGlzIGlzIG5vdCBuZWVkZWQuKi8KKyNlbmRpZgorCQkvKiBubyBuZWVkIHRvIHVubG9j
ayBoZXJlLCBzaW5jZSB0aGUgVENCIGlzIGdvbmUgKi8KKwl9IGVsc2UgaWYgKGljbXBfY29kZSA9
PSBJQ01QX1VOUkVBQ0hfTkVFREZSQUcpIHsKKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBf
QUREUl9OT19QTVRVRCkgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJcmV0dXJuOwor
CQl9CisJCS8qIEZpbmQgdGhlIG5leHQgKHNtYWxsZXIpIE1UVSAqLworCQlpZiAobmV4dF9tdHUg
PT0gMCkgeworCQkJLyoKKwkJCSAqIE9sZCB0eXBlIHJvdXRlciB0aGF0IGRvZXMgbm90IHRlbGwg
dXMgd2hhdCB0aGUgbmV4dAorCQkJICogTVRVIGlzLgorCQkJICogUmF0cyB3ZSB3aWxsIGhhdmUg
dG8gZ3Vlc3MgKGluIGEgZWR1Y2F0ZWQgZmFzaGlvbgorCQkJICogb2YgY291cnNlKS4KKwkJCSAq
LworCQkJbmV4dF9tdHUgPSBzY3RwX2dldF9wcmV2X210dShpcF9sZW4pOworCQl9CisJCS8qIFN0
b3AgdGhlIFBNVFUgdGltZXIuICovCisJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+
cG10dV90aW1lci50aW1lcikpIHsKKwkJCXRpbWVyX3N0b3BwZWQgPSAxOworCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAorCQkJ
ICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzEpOworCQl9
IGVsc2UgeworCQkJdGltZXJfc3RvcHBlZCA9IDA7CisJCX0KKwkJLyogVXBkYXRlIHRoZSBwYXRo
IE1UVS4gKi8KKwkJaWYgKG5ldC0+cG9ydCkgeworCQkJbmV4dF9tdHUgLT0gc2l6ZW9mKHN0cnVj
dCB1ZHBoZHIpOworCQl9CisJCWlmIChuZXQtPm10dSA+IG5leHRfbXR1KSB7CisJCQluZXQtPm10
dSA9IG5leHRfbXR1OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQlpZiAobmV0LT5wb3J0
KSB7CisJCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIsIGlucC0+ZmlibnVtLCBu
ZXh0X210dSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBf
aGNfc2V0X210dSgmbmV0LT5yby5fbF9hZGRyLCBpbnAtPmZpYm51bSwgbmV4dF9tdHUpOworCQkJ
fQorI2VuZGlmCisJCX0KKwkJLyogVXBkYXRlIHRoZSBhc3NvY2lhdGlvbiBNVFUgKi8KKwkJaWYg
KHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV4dF9tdHUpIHsKKwkJCXNjdHBfcGF0aG10dV9h
ZGp1c3RtZW50KHN0Y2IsIG5leHRfbXR1KTsKKwkJfQorCQkvKiBGaW5hbGx5LCBzdGFydCB0aGUg
UE1UVSB0aW1lciBpZiBpdCB3YXMgcnVubmluZyBiZWZvcmUuICovCisJCWlmICh0aW1lcl9zdG9w
cGVkKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0Us
IGlucCwgc3RjYiwgbmV0KTsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJfSBlbHNl
IHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCX0KK30KKyNlbmRpZgorCisjaWYgIWRlZmlu
ZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQor
dm9pZAorI2Vsc2UKK3ZvaWQgKgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAh
ZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pICYmICFk
ZWZpbmVkKEFQUExFX0VMQ0FQSVRBTikKK3NjdHBfY3RsaW5wdXQoaW50IGNtZCwgc3RydWN0IHNv
Y2thZGRyICpzYSwgdm9pZCAqdmlwLCBzdHJ1Y3QgaWZuZXQgKmlmcCBTQ1RQX1VOVVNFRCkKKyNl
bHNlCitzY3RwX2N0bGlucHV0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQgKnZp
cCkKKyNlbmRpZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJc3RydWN0IGlwICpvdXRl
cl9pcDsKKyNlbmRpZgorCXN0cnVjdCBpcCAqaW5uZXJfaXA7CisJc3RydWN0IHNjdHBoZHIgKnNo
OworCXN0cnVjdCBpY21wICppY21wOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0
IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOworI2VuZGlmCisJc3RydWN0
IHNvY2thZGRyX2luIHNyYywgZHN0OworCisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8
fAorCSAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX2FkZHIuc19hZGRyID09IElO
QUREUl9BTlkpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJcmV0dXJuOworI2Vsc2UKKwkJcmV0dXJuIChO
VUxMKTsKKyNlbmRpZgorCX0KKwlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkpIHsKKwkJdmlwID0g
TlVMTDsKKwl9IGVsc2UgaWYgKCh1bnNpZ25lZCljbWQgPj0gUFJDX05DTURTIHx8IGluZXRjdGxl
cnJtYXBbY21kXSA9PSAwKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCXJldHVybjsKKyNlbHNlCisJCXJl
dHVybiAoTlVMTCk7CisjZW5kaWYKKwl9CisJaWYgKHZpcCAhPSBOVUxMKSB7CisJCWlubmVyX2lw
ID0gKHN0cnVjdCBpcCAqKXZpcDsKKwkJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClp
bm5lcl9pcCAtCisJCSAgICAoc2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNpemVvZihzdHJ1Y3QgaXAp
KSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJb3V0ZXJfaXAgPSAoc3RydWN0IGlwICop
KChjYWRkcl90KWljbXAgLSBzaXplb2Yoc3RydWN0IGlwKSk7CisjZW5kaWYKKwkJc2ggPSAoc3Ry
dWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaW5uZXJfaXAgKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIp
KTsKKwkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJc3Jj
LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzcmMuc2luX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXNyYy5zaW5fcG9ydCA9
IHNoLT5zcmNfcG9ydDsKKwkJc3JjLnNpbl9hZGRyID0gaW5uZXJfaXAtPmlwX3NyYzsKKwkJbWVt
c2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJZHN0LnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlkc3Quc2luX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWRzdC5zaW5fcG9ydCA9IHNoLT5kZXN0
X3BvcnQ7CisJCWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7CisJCS8qCisJCSAqICdk
c3QnIGhvbGRzIHRoZSBkZXN0IG9mIHRoZSBwYWNrZXQgdGhhdCBmYWlsZWQgdG8gYmUgc2VudC4K
KwkJICogJ3NyYycgaG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2UgcmV2
ZXJzZQorCQkgKiB0aGUgZHN0IGFuZCB0aGUgc3JjIGluIHRoZSBsb29rdXAuCisJCSAqLworCQlp
bnAgPSBOVUxMOworCQluZXQgPSBOVUxMOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
YWRkcl9zYSgoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWlmICgoc3RjYiAhPSBO
VUxMKSAmJgorCQkgICAgKG5ldCAhPSBOVUxMKSAmJgorCQkgICAgKGlucCAhPSBOVUxMKSkgewor
CQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0YWcgKi8KKwkJCWlmIChudG9obChzaC0+dl90
YWcpICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgbXVzdCBiZSB0aGUgdmVyaWZpY2F0aW9u
IHRhZyB1c2VkIGZvcgorCQkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRvbid0IGNvbnNp
ZGVyCisJCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmljYXRpb24gdGFnLgorCQkJ
CSAqLworCQkJCWlmIChudG9obChzaC0+dl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92dGFnKSB7
CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0g
ZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQlpZiAobnRvaHMob3V0ZXJfaXAt
PmlwX2xlbikgPj0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcCkgKworCQkJCSAgICA4ICsgKGlu
bmVyX2lwLT5pcF9obCA8PCAyKSArIDIwKSB7CisJCQkJCS8qCisJCQkJCSAqIEluIHRoaXMgY2Fz
ZSB3ZSBjYW4gY2hlY2sgaWYgd2UKKwkJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRo
ZQorCQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KKwkJCQkJICovCisJCQkJCWNoID0gKHN0
cnVjdCBzY3RwX2luaXRfY2h1bmsgKikoc2ggKyAxKTsKKwkJCQkJaWYgKChjaC0+Y2guY2h1bmtf
dHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHx8CisJCQkJCSAgICAobnRvaGwoY2gtPmluaXQuaW5p
dGlhdGVfdGFnKSAhPSBzdGNiLT5hc29jLm15X3Z0YWcpKSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJCQl9CisjZWxzZQorCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47CisjZW5kaWYKKwkJCX0KKwkJCXNjdHBfbm90
aWZ5KGlucCwgc3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlLAorCQkJ
ICAgICAgICAgICAgaWNtcC0+aWNtcF9jb2RlLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJCSAgICAgICAgICAgIG50b2hzKGlubmVy
X2lwLT5pcF9sZW4pLAorI2Vsc2UKKwkJCSAgICAgICAgICAgIGlubmVyX2lwLT5pcF9sZW4sCisj
ZW5kaWYKKwkJCSAgICAgICAgICAgICh1aW50MzJfdCludG9ocyhpY21wLT5pY21wX25leHRtdHUp
KTsKKwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA8IDUwMDAwMAorCQkJLyoKKwkJCSAqIFhYWCBtdXN0IGJlIGZpeGVkIGZvciA1LnggYW5k
IGhpZ2hlciwgbGVhdmUgZm9yCisJCQkgKiA0LngKKwkJCSAqLworCQkJaWYgKFBSQ19JU19SRURJ
UkVDVChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKKwkJCQlpbl9ydGNoYW5nZSgoc3RydWN0IGlu
cGNiICopaW5wLAorCQkJCSAgICBpbmV0Y3RsZXJybWFwW2NtZF0pOworCQkJfQorI2VuZGlmCisJ
CQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgeworCQkJCS8qIHJlZHVjZSBy
ZWYtY291bnQgKi8KKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKHN0Y2Ip
IHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCX0KKwl9CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pCisJcmV0dXJuOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisjZW5kaWYK
KyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3N0YXRpYyBpbnQKK3NjdHBfZ2V0
Y3JlZChTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCB4dWNyZWQgeHVjOworCXN0cnVj
dCBzb2NrYWRkcl9pbiBhZGRyc1syXTsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVj
dCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJaW50IGVycm9yOwor
CXVpbnQzMl90IHZyZl9pZDsKKworCS8qIEZJWCwgZm9yIG5vbi1ic2QgaXMgdGhpcyByaWdodD8g
Ki8KKwl2cmZfaWQgPSBTQ1RQX0RFRkFVTFRfVlJGSUQ7CisKKyNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+IDYwMjAwMAorCWVycm9yID0gcHJpdl9jaGVjayhyZXEtPnRkLCBQUklWX05FVElORVRfR0VU
Q1JFRCk7CisKKyNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCWVycm9yID0gc3Vz
ZXIocmVxLT50ZCk7CisjZWxzZQorCWVycm9yID0gc3VzZXIocmVxLT5wKTsKKyNlbmRpZgorCWlm
IChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwllcnJvciA9IFNZU0NUTF9JTihyZXEsIGFk
ZHJzLCBzaXplb2YoYWRkcnMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc2ludG9zYSgmYWRkcnNbMV0pLAor
CSAgICBzaW50b3NhKCZhZGRyc1swXSksCisJICAgICZpbnAsICZuZXQsIDEsIHZyZl9pZCk7CisJ
aWYgKHN0Y2IgPT0gTlVMTCB8fCBpbnAgPT0gTlVMTCB8fCBpbnAtPnNjdHBfc29ja2V0ID09IE5V
TEwpIHsKKwkJaWYgKChpbnAgIT0gTlVMTCkgJiYgKHN0Y2IgPT0gTlVMTCkpIHsKKwkJCS8qIHJl
ZHVjZSByZWYtY291bnQgKi8KKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9E
RUNSX1JFRihpbnApOworCQkJZ290byBjcmVkX2Nhbl9jb250OworCQl9CisKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5U
KTsKKwkJZXJyb3IgPSBFTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJLyogV2UgdXNlIHRoZSB3cml0ZSBsb2NrIGhlcmUsIG9ubHkKKwkgKiBzaW5jZSBp
biB0aGUgZXJyb3IgbGVnIHdlIG5lZWQgaXQuCisJICogSWYgd2UgdXNlZCBSTE9DSywgdGhlbiB3
ZSB3b3VsZCBoYXZlCisJICogdG8gd2xvY2svZGVjci91bmxvY2svcmxvY2suIFdoaWNoCisJICog
aW4gdGhlb3J5IGNvdWxkIGNyZWF0ZSBhIGhvbGUuIEJldHRlcgorCSAqIHRvIHVzZSBoaWdoZXIg
d2xvY2suCisJICovCisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKyBjcmVkX2Nhbl9jb250OgorCWVy
cm9yID0gY3JfY2Fuc2Vlc29ja2V0KHJlcS0+dGQtPnRkX3VjcmVkLCBpbnAtPnNjdHBfc29ja2V0
KTsKKwlpZiAoZXJyb3IpIHsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlnb3RvIG91dDsK
Kwl9CisJY3J1MngoaW5wLT5zY3RwX3NvY2tldC0+c29fY3JlZCwgJnh1Yyk7CisJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4dWMsIHNpemVvZihzdHJ1
Y3QgeHVjcmVkKSk7CitvdXQ6CisJcmV0dXJuIChlcnJvcik7Cit9CisKK1NZU0NUTF9QUk9DKF9u
ZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFH
X1JXLAorICAgIDAsIDAsIHNjdHBfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBv
ZiBhIFNDVFAgY29ubmVjdGlvbiIpOworI2VuZGlmCQkJCS8qICNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAqLworCisKKyNpZmRlZiBJTkVUCisjaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorI2VsaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKK3N0YXRpYyB2
b2lkCisjZWxzZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwX2Fib3J0KHN0cnVjdCBzb2NrZXQg
KnNvKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJdWludDMyX3QgZmxhZ3M7CisKKwlp
bnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkg
eworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAw
CisJCXJldHVybjsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7Cisj
ZW5kaWYKKwl9CisKKyBzY3RwX211c3RfdHJ5X2FnYWluOgorCWZsYWdzID0gaW5wLT5zY3RwX2Zs
YWdzOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVM
TCwgMTcpOworI2VuZGlmCisJaWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09O
RSkgPT0gMCkgJiYKKwkgICAgKGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBfZmxhZ3MsIGZs
YWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBfUENCX0ZMQUdT
X0NMT1NFX0lQKSkpKSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9z
aW5nKGlucCwgTlVMTCwgMTYpOworI2VuZGlmCisJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBf
RlJFRV9TSE9VTERfVVNFX0FCT1JULAorCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNM
T1NFKTsKKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsKKwkJ
Lyogc2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5CisJCSAqIGhlcmUgZm9yIHRo
ZSBhY2NvdW50aW5nL3NlbGVjdC4KKwkJICovCisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7
CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJc28tPnNvX3VzZWNvdW50LS07CisjZWxzZQor
CQkvKiBOb3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNo
ZWQuICovCisJCXNvLT5zb19wY2IgPSBOVUxMOworI2VuZGlmCisJCVNPQ0tfVU5MT0NLKHNvKTsK
Kwl9IGVsc2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJaWYgKChmbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3RvIHNjdHBfbXVzdF90cnlf
YWdhaW47CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPiA2OTAwMDAKKwlyZXR1cm47CisjZWxzZQorCXJldHVybiAoMCk7CisjZW5kaWYKK30K
KworI2lmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQK
KyNlbHNlCitzdGF0aWMgaW50CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3NjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIHN0cnVjdCB0aHJlYWQgKnAgU0NUUF9VTlVTRUQpCisj
ZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9h
dHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3Qg
dnJmX2lkKQorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBfYXR0YWNoKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFEIHAgU0NUUF9VTlVTRUQp
CisjZWxzZQorc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VO
VVNFRCwgc3RydWN0IHByb2MgKnAgU0NUUF9VTlVTRUQpCisjZW5kaWYKK3sKKwlzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wOworCXN0cnVjdCBpbnBjYiAqaXBfaW5wOworCWludCBlcnJvcjsKKyNpZiAh
ZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdWludDMyX3Qg
dnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOworI2VuZGlmCisKKwlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgIT0gTlVMTCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09IDAg
fHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7CisJCWVycm9yID0gU0NUUF9TT1JFU0VSVkUo
c28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcmVjdnNwYWNlKSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJuIChlcnJvcik7CisJCX0K
Kwl9CisJZXJyb3IgPSBzY3RwX2lucGNiX2FsbG9jKHNvLCB2cmZfaWQpOworCWlmIChlcnJvcikg
eworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+c2N0cF9mbGFncyAmPSB+U0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSBub3QgdjYhICovCisJaXBfaW5wID0gJmlucC0+
aXBfaW5wLmlucDsKKwlpcF9pbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwlpcF9pbnAtPmlu
cF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3N0YXRpYyBpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdGhyZWFkICpwKQoreworI2Vs
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50
CitzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3Ry
dWN0IHByb2MgKnApIHsKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCitpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICphZGRyKSB7CisJdm9pZCAqcCA9IE5VTEw7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19f
KQorc3RhdGljIGludAorc2N0cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIsIFBLVEhSRUFEIHApIHsKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwX2JpbmQoc3Ry
dWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQoreworCXN0
cnVjdCBzb2NrYWRkciAqYWRkciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik6
IE5VTEw7CisKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlpbnAgPSAoc3Ry
dWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChhZGRyICE9IE5VTEwpIHsKKyNp
ZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB8fAor
CQkgICAgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpIHsKKyNl
bHNlCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgeworI2VuZGlmCisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCXJldHVybiAoc2N0cF9pbnBj
Yl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBwKSk7Cit9CisKKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKworaW50CitzY3RwY29ubl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGlu
dCBwcm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3QgdnJmX2lkKQoreworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisJc3RydWN0IGlucGNiICppcF9pbnA7CisJaW50IGVycm9yOworCisJaW5wID0g
KHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wICE9IE5VTEwpIHsKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoc28tPnNvX3NuZC5zYl9o
aXdhdCA9PSAwIHx8IHNvLT5zb19yY3Yuc2JfaGl3YXQgPT0gMCkgeworCQllcnJvciA9IFNDVFBf
U09SRVNFUlZFKHNvLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSwgU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3JlY3ZzcGFjZSkpOworCQlpZiAoZXJyb3IpIHsKKwkJCXJldHVybiAoZXJy
b3IpOworCQl9CisJfQorCWVycm9yID0gc2N0cF9pbnBjYl9hbGxvYyhzbywgdnJmX2lkKTsKKwlp
ZiAoZXJyb3IpIHsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlucCA9IChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKXNvLT5zb19wY2I7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpbnAtPnNjdHBfZmxh
Z3MgJj0gflNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2OworCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQ
X1BDQl9GTEFHU19CT1VORF9DT05OOworCWlwX2lucCA9ICZpbnAtPmlwX2lucC5pbnA7CisJaXBf
aW5wLT5pbnBfdmZsYWcgfD0gSU5QX0NPTk47CisJaXBfaW5wLT5pbnBfaXBfdHRsID0gTU9EVUxF
X0dMT0JBTChpcF9kZWZ0dGwpOworCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwlyZXR1cm4gKDAp
OworfQorCitpbnQKK3NjdHBjb25uX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqYWRkcikKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJaW5wID0gKHN0cnVj
dCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoYWRkciAhPSBOVUxMKSB7CisjaWZk
ZWYgSEFWRV9TQV9MRU4KKwkJaWYgKChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgfHwKKwkJ
ICAgIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkpIHsKKyNl
bHNlCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgeworI2VuZGlmCisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCXJldHVybiAoc2N0cF9pbnBj
Yl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBOVUxMKSk7Cit9CisKKyNlbmRpZgorI2lmIChkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZAorc2N0cF9jbG9zZShz
dHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVpbnQzMl90
IGZsYWdzOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAo
aW5wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEluZm9ybSBhbGwgdGhlIGxvd2VyIGxheWVy
IGFzc29jIHRoYXQgd2UKKwkgKiBhcmUgZG9uZS4KKwkgKi8KKyBzY3RwX211c3RfdHJ5X2FnYWlu
OgorCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlz
Y3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTcpOworI2VuZGlmCisJaWYgKCgoZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkgICAgKGF0b21pY19jbXBzZXRf
aW50KCZpbnAtPnNjdHBfZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSB8IFNDVFBfUENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7CisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fTElOR0VSKSAmJiAo
c28tPnNvX2xpbmdlciA9PSAwKSkgfHwKKwkJICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsK
KyNlbHNlCisJCWlmICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJiAoc28tPnNvX2xp
bmdlciA9PSAwKSkgfHwKKwkJICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsKKyNlbmRpZgor
I2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAx
Myk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNF
X0FCT1JULAorCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7CisJCX0gZWxz
ZSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5V
TEwsIDE0KTsKKyNlbmRpZgorCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VM
RF9VU0VfR1JBQ0VGVUxfQ0xPU0UsCisJCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNM
T1NFKTsKKwkJfQorCQkvKiBUaGUgc29ja2V0IGlzIG5vdyBkZXRhY2hlZCwgbm8gbWF0dGVyIHdo
YXQKKwkJICogdGhlIHN0YXRlIG9mIHRoZSBTQ1RQIGFzc29jaWF0aW9uLgorCQkgKi8KKwkJU09D
S19MT0NLKHNvKTsKKwkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsKKwkJLyogc2FtZSBmb3Ig
dGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5CisJCSAqIGhlcmUgZm9yIHRoZSBhY2NvdW50aW5n
L3NlbGVjdC4KKwkJICovCisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7CisKKyNpZiAhZGVm
aW5lZChfX0FQUExFX18pCisJCS8qIE5vdyBudWxsIG91dCB0aGUgcmVmZXJlbmNlLCB3ZSBhcmUg
Y29tcGxldGVseSBkZXRhY2hlZC4gKi8KKwkJc28tPnNvX3BjYiA9IE5VTEw7CisjZW5kaWYKKwkJ
U09DS19VTkxPQ0soc28pOworCX0gZWxzZSB7CisJCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwor
CQlpZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApIHsKKwkJCWdv
dG8gc2N0cF9tdXN0X3RyeV9hZ2FpbjsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKyNlbHNlCisK
KworaW50CitzY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOworCXVpbnQzMl90IGZsYWdzOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNi
ICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMAorCQlyZXR1cm47CisjZWxzZQorCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9Cisgc2N0cF9tdXN0X3Ry
eV9hZ2FpbjoKKwlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKyNpZmRlZiBTQ1RQX0xPR19DTE9T
SU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKKyNlbmRpZgorCWlmICgoKGZs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJICAgIChhdG9taWNf
Y21wc2V0X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkgeworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdF
UikgJiYgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+
IDApKSB7CisjZWxzZQorCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNPX0xJTkdFUikgJiYgKHNv
LT5zb19saW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Cisj
ZW5kaWYKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwg
TlVMTCwgMTMpOworI2VuZGlmCisJCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hP
VUxEX1VTRV9BQk9SVCwKKwkJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOwor
CQl9IGVsc2UgeworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3Npbmco
aW5wLCBOVUxMLCAxMyk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJF
RV9TSE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFLAorCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBT
RVRfT0ZDTE9TRSk7CisJCX0KKwkJLyogVGhlIHNvY2tldCBpcyBub3cgZGV0YWNoZWQsIG5vIG1h
dHRlciB3aGF0CisJCSAqIHRoZSBzdGF0ZSBvZiB0aGUgU0NUUCBhc3NvY2lhdGlvbi4KKwkJICov
CisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7CisJCS8qIHNhbWUgZm9yIHRoZSByY3Ygb25l
cywgdGhleSBhcmUgb25seQorCQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9zZWxlY3QuCisJ
CSAqLworCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOworI2lmICFkZWZpbmVkKF9fQVBQTEVf
XykKKwkJLyogTm93IGRpc2Nvbm5lY3QgKi8KKwkJc28tPnNvX3BjYiA9IE5VTEw7CisjZW5kaWYK
Kwl9IGVsc2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJaWYgKChmbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3RvIHNjdHBfbXVzdF90cnlf
YWdhaW47CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPiA2OTAwMDAKKwlyZXR1cm47CisjZWxzZQorCXJldHVybiAoMCk7CisjZW5kaWYKK30K
KyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLyogX19Vc2Vyc3BhY2VfXyBp
cyBub3QgY2FsbGluZyBzY3RwX3NlbmRtICovCisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19QYW5k
YV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSkKK2ludAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorc2N0cF9zZW5kbShzdHJ1Y3Qgc29j
a2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRy
LAorICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKTsKKworI2Vsc2UK
K3NjdHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0s
IHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0
IHByb2MgKnApOworCisjZW5kaWYKKworaW50CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCitzY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAg
c3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCB0aHJlYWQgKnApCit7CisjZWxzZQorc2N0cF9z
ZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0
IHNvY2thZGRyICphZGRyLAorICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAq
cCkKK3sKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJaW50IGVycm9yOworCisJ
aW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwp
IHsKKwkJaWYgKGNvbnRyb2wpIHsKKwkJCXNjdHBfbV9mcmVlbShjb250cm9sKTsKKwkJCWNvbnRy
b2wgPSBOVUxMOworCQl9CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlzY3RwX21fZnJlZW0obSk7
CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJLyogR290IHRvIGhhdmUgYW4gdG8gYWRkcmVzcyBp
ZiB3ZSBhcmUgTk9UIGEgY29ubmVjdGVkIHNvY2tldCAqLworCWlmICgoYWRkciA9PSBOVUxMKSAm
JgorCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgfHwK
KwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpKSkgeworCQln
b3RvIGNvbm5lY3RlZF90eXBlOworCX0gZWxzZSBpZiAoYWRkciA9PSBOVUxMKSB7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFREVTVEFERFJSRVEpOworCQllcnJvciA9IEVERVNUQUREUlJFUTsKKwkJc2N0cF9tX2Zy
ZWVtKG0pOworCQlpZiAoY29udHJvbCkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOworCQkJ
Y29udHJvbCA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIChlcnJvcik7CisJfQorI2lmZGVmIElORVQ2
CisJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCS8qIG11c3QgYmUgYSB2NCBh
ZGRyZXNzISAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRURFU1RBRERSUkVRKTsKKwkJc2N0cF9tX2ZyZWVtKG0p
OworCQlpZiAoY29udHJvbCkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOworCQkJY29udHJv
bCA9IE5VTEw7CisJCX0KKwkJZXJyb3IgPSBFREVTVEFERFJSRVE7CisJCXJldHVybiAoZXJyb3Ip
OworCX0KKyNlbmRpZgkJCQkvKiBJTkVUNiAqLworY29ubmVjdGVkX3R5cGU6CisJLyogbm93IHdo
YXQgYWJvdXQgY29udHJvbCAqLworCWlmIChjb250cm9sKSB7CisJCWlmIChpbnAtPmNvbnRyb2wp
IHsKKwkJCVNDVFBfUFJJTlRGKCJodWg/IGNvbnRyb2wgc2V0P1xuIik7CisJCQlzY3RwX21fZnJl
ZW0oaW5wLT5jb250cm9sKTsKKwkJCWlucC0+Y29udHJvbCA9IE5VTEw7CisJCX0KKwkJaW5wLT5j
b250cm9sID0gY29udHJvbDsKKwl9CisJLyogUGxhY2UgdGhlIGRhdGEgKi8KKwlpZiAoaW5wLT5w
a3QpIHsKKwkJU0NUUF9CVUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07CisJCWlucC0+cGt0X2xh
c3QgPSBtOworCX0gZWxzZSB7CisJCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07CisJfQor
CWlmICgKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwkv
KiBGcmVlQlNEIHVzZXMgYSBmbGFnIHBhc3NlZCAqLworCSAgICAoKGZsYWdzICYgUFJVU19NT1JF
VE9DT01FKSA9PSAwKQorI2Vsc2UKKwkgICAgMQkJCS8qIE9wZW4gQlNEIGRvZXMgbm90IGhhdmUg
YW55ICJtb3JlIHRvIGNvbWUiCisJCQkJICogaW5kaWNhdGlvbiAqLworI2VuZGlmCisJICAgICkg
eworCQkvKgorCQkgKiBub3RlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGlzIGNvZGUgd2ls
bCBvbmx5IGJlIHVzZWQKKwkJICogYnkgT3BlbkJTRC0tIE5ldEJTRCwgRnJlZUJTRCwgYW5kIE1h
Y09TIGhhdmUgbWV0aG9kcyBmb3IKKwkJICogcmUtZGVmaW5pbmcgc29zZW5kIHRvIHVzZSB0aGUg
c2N0cF9zb3NlbmQuIE9uZSBjYW4KKwkJICogb3B0aW9uYWxseSBzd2l0Y2ggYmFjayB0byB0aGlz
IGNvZGUgKGJ5IGNoYW5naW5nIGJhY2sgdGhlCisJCSAqIGRlZmluaXRpb25zKSBidXQgdGhpcyBp
cyBub3QgYWR2aXNhYmxlLiBUaGlzIGNvZGUgaXMgdXNlZAorCQkgKiBieSBGcmVlQlNEIHdoZW4g
c2VuZGluZyBhIGZpbGUgd2l0aCBzZW5kZmlsZSgpIHRob3VnaC4KKwkJICovCisJCWludCByZXQ7
CisKKwkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9s
LCBwLCBmbGFncyk7CisJCWlucC0+cGt0ID0gTlVMTDsKKwkJaW5wLT5jb250cm9sID0gTlVMTDsK
KwkJcmV0dXJuIChyZXQpOworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorI2VuZGlm
CisKK2ludAorc2N0cF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQoreworCXN0cnVjdCBz
Y3RwX2lucGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNi
OworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENP
Tk4pOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCWlmIChMSVNUX0VNUFRZKCZpbnAtPnNjdHBfYXNv
Y19saXN0KSkgeworCQkJLyogTm8gY29ubmVjdGlvbiAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOworCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJCQlzdGNiID0gTElTVF9G
SVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJcmV0dXJuIChFSU5W
QUwpOworCQkJfQorCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWFzb2MgPSAmc3RjYi0+YXNv
YzsKKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVF
RCkgeworCQkJCS8qIFdlIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgb3V0IG9mIGhlcmUgKi8KKwkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
CXJldHVybiAoMCk7CisJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKCgo
c28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgJiYKKwkJCSAgICAgKHNvLT5zb19saW5n
ZXIgPT0gMCkpIHx8CisJCQkgICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkgeworI2Vsc2UKKwkJ
CWlmICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJgorCQkJICAgICAoc28tPnNvX2xp
bmdlciA9PSAwKSkgfHwKKwkJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7CisjZW5kaWYK
KwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0KKwkJCQkgICAgU0NUUF9TVEFURV9DT09L
SUVfV0FJVCkgeworCQkJCQkvKiBMZWZ0IHdpdGggRGF0YSB1bnJlYWQgKi8KKwkJCQkJc3RydWN0
IG1idWYgKm9wX2VycjsKKworCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQkJCXNjdHBfc2VuZF9hYm9ydF90Y2Io
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikg
fHwKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSkgeworCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1
cnJlc3RhYik7CisJCQkJfQorCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCisJCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSArIFNDVFBfTE9DXzMpOworCQkJCS8qIE5vIHVubG9jayB0Y2IgYXNzb2MgaXMgZ29u
ZSAqLworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNl
bmRfcXVldWUpICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJ
CQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKKwkJCQkvKiB0aGVyZSBpcyBu
b3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBkb25lICovCisJCQkJaWYgKCgqYXNvYy0+c3NfZnVu
Y3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJ
CQkJCWdvdG8gYWJvcnRfYW55d2F5OworCQkJCX0KKwkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCQkgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7CisJCQkJCS8qIG9u
bHkgc2VuZCBTSFVURE9XTiAxc3QgdGltZSB0aHJ1ICovCisJCQkJCXN0cnVjdCBzY3RwX25ldHMg
Km5ldHA7CisKKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09Q
RU4pIHx8CisJCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVU
RE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3Vy
cmVzdGFiKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQpOworCQkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVf
U0hVVERPV05fUEVORElORyk7CisJCQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0
Y2IpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCQkJCW5ldHAgPSBzdGNi
LT5hc29jLmFsdGVybmF0ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW5ldHAgPSBzdGNiLT5hc29j
LnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJCX0KKwkJCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0
Y2IsbmV0cCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
LAorCQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCQkJCQkgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgbmV0cCk7CisJCQkJCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQl9IGVs
c2UgeworCQkJCS8qCisJCQkJICogd2Ugc3RpbGwgZ290IChvciBqdXN0IGdvdCkgZGF0YSB0byBz
ZW5kLAorCQkJCSAqIHNvIHNldCBTSFVURE9XTl9QRU5ESU5HCisJCQkJICovCisJCQkJLyoKKwkJ
CQkgKiBYWFggc29ja2V0cyBkcmFmdCBzYXlzIHRoYXQgU0NUUF9FT0YKKwkJCQkgKiBzaG91bGQg
YmUgc2VudCB3aXRoIG5vIGRhdGEuIGN1cnJlbnRseSwKKwkJCQkgKiB3ZSB3aWxsIGFsbG93IHVz
ZXIgZGF0YSB0byBiZSBzZW50IGZpcnN0CisJCQkJICogYW5kIG1vdmUgdG8gU0hVVERPV04tUEVO
RElORworCQkJCSAqLworCQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7CisJCQkJaWYgKHN0Y2It
PmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJ
CQl9IGVsc2UgeworCQkJCQluZXRwID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwor
CQkJCX0KKworCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORzsK
KwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBzdGNi
LT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJIG5ldHApOworCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJ
CQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQ7CisJCQkJfQorCQkJ
CWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCQkgICAgVEFJTFFfRU1Q
VFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQlh
Ym9ydF9hbnl3YXk6CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9y
dF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfNDsKKwkJCQkJc2N0cF9z
ZW5kX2Fib3J0X3RjYihzdGNiLCBvcF9lcnIsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCQkJCQlpZiAoKFNDVFBfR0VUX1NU
QVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkJCSAgICAoU0NUUF9H
RVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7
CisJCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJCX0K
KwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfNSk7CisJCQkJCXJldHVybiAoMCk7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQl9CisJCQlzb2lzZGlz
Y29ubmVjdGluZyhzbyk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCS8qIG5vdCByZWFjaGVkICovCisJ
fSBlbHNlIHsKKwkJLyogVURQIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQgdGhpcyAqLworCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQlyZXR1cm4gKEVPUE5PVFNV
UFApOworCX0KK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF9mbHVzaChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGhvdykKK3sKKwkvKgorCSAqIFdlIHdpbGwganVzdCBjbGVhciBvdXQg
dGhlIHZhbHVlcyBhbmQgbGV0CisJICogc3Vic2VxdWVudCBjbG9zZSBjbGVhciBvdXQgdGhlIGRh
dGEsIGlmIGFueS4KKwkgKiBOb3RlIGlmIHRoZSB1c2VyIGRpZCBhIHNodXRkb3duKFNIVVRfUkQp
IHRoZXkKKwkgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRhdGEsIHRoZSBzb2NrZXQK
KwkgKiB3aWxsIGJsb2NrIHRoYXQgZnJvbSBoYXBwZW5pbmcuCisJICovCisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJ
aWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9
CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkvKiBGb3IgdGhlIDEgdG8gbWFueSBtb2RlbCB0aGlz
IGRvZXMgbm90aGluZyAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19V
RFBUWVBFKSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCWlmICgoaG93ID09IFBSVV9GTFVTSF9SRCkgfHwgKGhv
dyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBzYiB3aWxs
IGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2UgZXhjZXB0IG1heWJlIHRoZSBjb3Vu
dAorCQkgKi8KKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKGlu
cCk7CisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFE
OworCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCXNvLT5zb19yY3Yuc2JfY2MgPSAwOworCQlzby0+c29fcmN2LnNiX21iY250ID0gMDsKKwkJ
c28tPnNvX3Jjdi5zYl9tYiA9IE5VTEw7CisJfQorCWlmICgoaG93ID09IFBSVV9GTFVTSF9XUikg
fHwgKGhvdyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3QgbWFrZSBzdXJlIHRoZSBz
YiB3aWxsIGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2UgZXhjZXB0IG1heWJlIHRo
ZSBjb3VudAorCQkgKi8KKwkJc28tPnNvX3NuZC5zYl9jYyA9IDA7CisJCXNvLT5zb19zbmQuc2Jf
bWJjbnQgPSAwOworCQlzby0+c29fc25kLnNiX21iID0gTlVMTDsKKworCX0KKwlyZXR1cm4gKDAp
OworfQorI2VuZGlmCisKK2ludAorc2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbykKK3sK
KwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
c28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJu
IChFSU5WQUwpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCS8qIEZvciBVRFAgbW9kZWwg
dGhpcyBpcyBhIGludmFsaWQgY2FsbCAqLworCWlmICghKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSkpIHsKKwkJLyogUmVzdG9yZSB0aGUgZmxhZ3MgdGhhdCB0aGUg
c29zaHV0ZG93biB0b29rIGF3YXkuICovCisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMjExNSkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU09D
S0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJc28tPnNvX3Jjdi5zYl9zdGF0ZSAmPSB+U0JTX0NB
TlRSQ1ZNT1JFOworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisjZWxzZQorCQlTT0NL
X0xPQ0soc28pOworCQlzby0+c29fc3RhdGUgJj0gflNTX0NBTlRSQ1ZNT1JFOworCQlTT0NLX1VO
TE9DSyhzbyk7CisjZW5kaWYKKwkJLyogVGhpcyBwcm9jIHdpbGwgd2FrZXVwIGZvciByZWFkIGFu
ZCBkbyBub3RoaW5nIChJIGhvcGUpICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RU9QTk9UU1VQUCk7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJ
ICogT2ssIGlmIHdlIHJlYWNoIGhlcmUgaXRzIHRoZSBUQ1AgbW9kZWwgYW5kIGl0IGlzIGVpdGhl
cgorCQkgKiBhIFNIVVRfV1Igb3IgU0hVVF9SRFdSLgorCQkgKiBUaGlzIG1lYW5zIHdlIHB1dCB0
aGUgc2h1dGRvd24gZmxhZyBhZ2FpbnN0IGl0LgorCQkgKi8KKwkJc3RydWN0IHNjdHBfdGNiICpz
dGNiOworCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwkJc3RydWN0IHNjdHBfbmV0
cyAqbmV0cDsKKworCQlpZiAoKHNvLT5zb19zdGF0ZSAmCisJCSAgICAgKFNTX0lTQ09OTkVDVEVE
fFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkcpKSA9PSAwKSB7CisJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKEVOT1RDT05OKTsKKwkJfQorCQlzb2NhbnRzZW5k
bW9yZShzbyk7CisKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwor
CQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogT2ssIHdlIGhpdCB0aGUgY2FzZSB0
aGF0IHRoZSBzaHV0ZG93biBjYWxsIHdhcworCQkJICogbWFkZSBhZnRlciBhbiBhYm9ydCBvciBz
b21ldGhpbmcuIE5vdGhpbmcgdG8gZG8KKwkJCSAqIG5vdy4KKwkJCSAqLworCQkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVf
QUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKChTQ1RQX0dFVF9T
VEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSAmJgorCQkgICAgKFNDVFBfR0VU
X1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgJiYKKwkJICAgIChTQ1RQ
X0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX09QRU4pKSB7CisJCQkvKiBJZiB3ZSBhcmUg
bm90IGluIG9yIGJlZm9yZSBFU1RBQkxJU0hFRCwgdGhlcmUgaXMKKwkJCSAqIG5vIHByb3RvY29s
IGFjdGlvbiByZXF1aXJlZC4KKwkJCSAqLworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlpZiAoc3RjYi0+
YXNvYy5hbHRlcm5hdGUpIHsKKwkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJfSBl
bHNlIHsKKwkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCX0KKwkJ
aWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pICYmCisJCSAgICBU
QUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0VNUFRZKCZhc29j
LT5zZW50X3F1ZXVlKSAmJgorCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsK
KwkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBs
ZXRlKShzdGNiLCBhc29jKSkgeworCQkJCWdvdG8gYWJvcnRfYW55d2F5OworCQkJfQorCQkJLyog
dGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KKwkJCVND
VFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJCVNDVFBfU0VUX1NUQVRF
KGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7CisJCQlTQ1RQX0NMRUFSX1NVQlNUQVRF
KGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCQlzY3RwX3N0b3BfdGltZXJz
X2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsK
KwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLAorCQkJICAgICAg
ICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJfSBlbHNlIHsKKwkJCS8q
CisJCQkgKiBXZSBzdGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRhIHRvIHNlbmQsIHNvIHNldAor
CQkJICogU0hVVERPV05fUEVORElORy4KKwkJCSAqLworCQkJU0NUUF9BRERfU1VCU1RBVEUoYXNv
YywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJ
CVNDVFBfQUREX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCk7CisJ
CQl9CisJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCQkgICAgVEFJ
TFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkgICAgKGFzb2MtPnN0YXRlICYgU0NU
UF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgeworCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJ
CQlhYm9ydF9hbnl3YXk6CisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NB
VVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOworCQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJv
cnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzY7CisJCQkJc2N0cF9h
Ym9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCSAgb3BfZXJy
LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCXJldHVy
biAoMCk7CisJCQl9CisJCX0KKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hV
VERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCS8qIFhYWDogV2h5IGRv
IHRoaXMgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBzdGlsbCBkYXRhIHF1ZXVlZD8gKi8KKwkJ
c2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcsIFND
VFBfU09fTE9DS0VEKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKgorICogY29waWVzIGEgInVzZXIi
IHByZXNlbnRhYmxlIGFkZHJlc3MgYW5kIHJlbW92ZXMgZW1iZWRkZWQgc2NvcGUsIGV0Yy4KKyAq
IHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yCisgKi8KK3N0YXRpYyB1aW50MzJfdAor
c2N0cF9maWxsX3VzZXJfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsIHN0cnVj
dCBzb2NrYWRkciAqc2EpCit7CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURE
RURfVjZfU0NPUEUpCisJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OworCisJc2EgPSAoc3RydWN0
IHNvY2thZGRyICopc2N0cF9yZWNvdmVyX3Njb3BlKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2Es
CisJICAgICZsc2E2KTsKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TQV9MRU4KKwltZW1j
cHkoc3MsIHNhLCBzYS0+c2FfbGVuKTsKKyNlbHNlCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2Fz
ZSBBRl9JTkVUNjoKKwkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBB
Rl9DT05OOgorCQltZW1jcHkoc3MsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBUU05IICovCisJCWJyZWFrOworCX0K
KyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKKworCisvKgorICogTk9URTogYXNzdW1lcyBhZGRy
IGxvY2sgaXMgaGVsZAorICovCitzdGF0aWMgc2l6ZV90CitzY3RwX2ZpbGxfdXBfYWRkcmVzc2Vz
X3ZyZihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJICAgc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorCQkJICAgc2l6ZV90IGxpbWl0LAorCQkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKnNh
cywKKwkJCSAgIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZu
OworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJc2l6ZV90IGFjdHVhbDsKKwlpbnQgbG9v
cGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWludCBpcHY0X2xvY2FsX3Njb3BlLCBp
cHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWludCBsb2NhbF9z
Y29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0
cF92cmYgKnZyZjsKKworCWFjdHVhbCA9IDA7CisJaWYgKGxpbWl0IDw9IDApCisJCXJldHVybiAo
YWN0dWFsKTsKKworCWlmIChzdGNiKSB7CisJCS8qIFR1cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0
ZSBzY29wZSAqLworCQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tf
c2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCQlpcHY0X2xvY2FsX3Njb3BlID0gc3RjYi0+YXNv
Yy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOworCQlpcHY0X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29j
LnNjb3BlLmlwdjRfYWRkcl9sZWdhbDsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJCWxv
Y2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKKwkJc2l0ZV9zY29wZSA9
IHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZTsKKwkJaXB2Nl9hZGRyX2xlZ2FsID0gc3RjYi0+
YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xl
Z2FsOworI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogVXNlIGdlbmVyaWMgdmFsdWVzIGZvciBlbmRw
b2ludHMuICovCisJCWxvb3BiYWNrX3Njb3BlID0gMTsKKyNpZiBkZWZpbmVkKElORVQpCisJCWlw
djRfbG9jYWxfc2NvcGUgPSAxOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJbG9jYWxf
c2NvcGUgPSAxOworCQlzaXRlX3Njb3BlID0gMTsKKyNlbmRpZgorCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKyNpZiBkZWZpbmVkKElORVQ2KQorCQkJ
aXB2Nl9hZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkKKwkJCWlmIChT
Q1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOworCQkJfSBl
bHNlIHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAxOworCQkJfQorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNlbmRpZgorCQl9IGVs
c2UgeworI2lmIGRlZmluZWQoSU5FVDYpCisJCQlpcHY2X2FkZHJfbGVnYWwgPSAwOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJCQljb25uX2FkZHJfbGVnYWwgPSAxOworI2lm
IGRlZmluZWQoSU5FVCkKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOworI2VuZGlmCisJCQl9IGVs
c2UgeworCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDA7CisjaWYgZGVmaW5lZChJTkVUKQorCQkJCWlw
djRfYWRkcl9sZWdhbCA9IDE7CisjZW5kaWYKKwkJCX0KKyNlbHNlCisjaWYgZGVmaW5lZChJTkVU
KQorCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorI2VuZGlmCisJCX0KKwl9CisJdnJm
ID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQlyZXR1cm4g
KDApOworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwp
IHsKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewor
CQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgorCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9M
T09QKHNjdHBfaWZuKSkgeworCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2NvcGUg
bm90IHNldCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZh
LCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJaWYgKHN0Y2IpIHsKKwkJCQkJ
LyoKKwkJCQkJICogRm9yIHRoZSBCT1VORC1BTEwgY2FzZSwgdGhlIGxpc3QKKwkJCQkJICogYXNz
b2NpYXRlZCB3aXRoIGEgVENCIGlzIEFsd2F5cworCQkJCQkgKiBjb25zaWRlcmVkIGEgcmV2ZXJz
ZSBsaXN0Li4gaS5lLgorCQkJCQkgKiBpdCBsaXN0cyBhZGRyZXNzZXMgdGhhdCBhcmUgTk9UCisJ
CQkJCSAqIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uLiBJZiB0aGlzCisJCQkJCSAqIGlzIG9uZSBv
ZiB0aG9zZSB3ZSBtdXN0IHNraXAgaXQuCisJCQkJCSAqLworCQkJCQlpZiAoc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RjYiwKKwkJCQkJCQkJICAgIHNjdHBfaWZhKSkgeworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKwkJCQl9CisJCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQlpZiAoaXB2NF9h
ZGRyX2xlZ2FsKSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCQkJc2lu
ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRk
ciA9PSAwKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiB3ZSBza2lwIHVuc3BlY2lmZWQKKwkJCQkJ
CQkgKiBhZGRyZXNzZXMKKwkJCQkJCQkgKi8KKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5p
cF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2lu
X2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQkJ
aWYgKChpcHY0X2xvY2FsX3Njb3BlID09IDApICYmCisJCQkJCQkgICAgKElONF9JU1BSSVZBVEVf
QUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9Cisj
aWZkZWYgSU5FVDYKKwkJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19ORUVEU19NQVBQRURfVjQpKSB7CisJCQkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNihzaW4s
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FzKTsKKwkJCQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilzYXMpLT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCQkJc2FzID0gKHN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KSk7CisJCQkJCQkJYWN0dWFsICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KTsKKwkJCQkJCX0gZWxzZSB7CisjZW5kaWYKKwkJCQkJCQltZW1jcHkoc2FzLCBzaW4sIHNpemVv
Zigqc2luKSk7CisJCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9ydCA9
IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ug
KikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKCpzaW4pKTsKKwkJCQkJCQlhY3R1YWwgKz0gc2l6ZW9m
KCpzaW4pOworI2lmZGVmIElORVQ2CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmIChhY3R1YWwg
Pj0gbGltaXQpIHsKKwkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQkJCQl9CisJCQkJCX0gZWxz
ZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgewor
CQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworI2lmIGRlZmluZWQoU0NUUF9FTUJF
RERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0IHNvY2th
ZGRyX2luNiBsc2E2OworI2VuZGlmCisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNp
bjY7CisJCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIHdlIHNraXAgdW5zcGVjaWZlZAorCQkJCQkJCSAqIGFk
ZHJlc3NlcworCQkJCQkJCSAqLworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5p
bnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRy
KSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmIChJ
TjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQlpZiAobG9j
YWxfc2NvcGUgPT0gMCkKKwkJCQkJCQkJY29udGludWU7CisjaWYgZGVmaW5lZChTQ1RQX0VNQkVE
REVEX1Y2X1NDT1BFKQorCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKKyNp
ZmRlZiBTQ1RQX0tBTUUKKwkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkK
KwkJCQkJCQkJCS8qCisJCQkJCQkJCQkgKiBiYWQgbGluaworCQkJCQkJCQkJICogbG9jYWwKKwkJ
CQkJCQkJCSAqIGFkZHJlc3MKKwkJCQkJCQkJCSAqLworCQkJCQkJCQkJY29udGludWU7CisjZWxz
ZQorCQkJCQkJCQlsc2E2ID0gKnNpbjY7CisJCQkJCQkJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZs
c2E2LAorCQkJCQkJCQkJCSAgICAgJmxzYTYuc2luNl9hZGRyLAorCQkJCQkJCQkJCSAgICAgTlVM
TCkpCisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJCQkJCQkJCSAqIGxvY2Fs
CisJCQkJCQkJCQkgKiBhZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJCQkJY29udGludWU7CisJ
CQkJCQkJCXNpbjYgPSAmbHNhNjsKKyNlbmRpZgkJCQkvKiBTQ1RQX0tBTUUgKi8KKwkJCQkJCQl9
CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQkJCQkJfQorCQkJCQkJaWYg
KChzaXRlX3Njb3BlID09IDApICYmCisJCQkJCQkgICAgKElONl9JU19BRERSX1NJVEVMT0NBTCgm
c2luNi0+c2luNl9hZGRyKSkpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCW1l
bWNweShzYXMsIHNpbjYsIHNpemVvZigqc2luNikpOworCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopc2FzKS0+c2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCQkJc2FzID0gKHN0
cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZigqc2luNikpOwor
CQkJCQkJYWN0dWFsICs9IHNpemVvZigqc2luNik7CisJCQkJCQlpZiAoYWN0dWFsID49IGxpbWl0
KSB7CisJCQkJCQkJcmV0dXJuIChhY3R1YWwpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJ
CQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlpZiAoY29ubl9hZGRyX2xlZ2Fs
KSB7CisJCQkJCQltZW1jcHkoc2FzLCAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm4sIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNh
cyktPnNjb25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCQlzYXMgPSAoc3RydWN0IHNv
Y2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKSk7CisJCQkJCQlhY3R1YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJ
CQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKKwkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQkJ
CQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlmCisJCQkJ
ZGVmYXVsdDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisjaWZuZGVmIEhBVkVfU0Ff
TEVOCisJCXVpbnQzMl90IHNhX2xlbiA9IDA7CisjZW5kaWYKKworCQlMSVNUX0ZPUkVBQ0gobGFk
ZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlpZiAoc3RjYikg
eworCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkgewor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoc2N0cF9maWxsX3VzZXJfYWRkcmVz
cyhzYXMsICZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKSkKKwkJCQljb250aW51ZTsKKwkJCXN3aXRj
aCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQlj
YXNlIEFGX0lORVQ6CisJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9ydCA9
IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlj
YXNlIEFGX0lORVQ2OgorCQkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcyktPnNpbjZfcG9y
dCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopc2FzKS0+c2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRp
ZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9CisjaWZkZWYg
SEFWRV9TQV9MRU4KKwkJCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSgoY2FkZHJf
dClzYXMgKworCQkJCQkJCSAgbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9sZW4pOworCQkJYWN0
dWFsICs9IGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfbGVuOworI2Vsc2UKKwkJCXN3aXRjaCAo
bGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNl
IEFGX0lORVQ6CisJCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlzYV9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJc2FfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVm
YXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9CisJCQlzYXMgPSAoc3RydWN0
IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2FfbGVuKTsKKwkJCWFjdHVhbCAr
PSBzYV9sZW47CisjZW5kaWYKKwkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKKwkJCQlyZXR1cm4g
KGFjdHVhbCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChhY3R1YWwpOworfQorCitzdGF0aWMg
c2l6ZV90CitzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgc2l6ZV90IGxpbWl0LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHJfc3RvcmFnZSAqc2FzKQoreworCXNpemVfdCBzaXplID0gMDsKKyNpZmRlZiBTQ1RQ
X01WUkYKKwl1aW50MzJfdCBpZDsKKyNlbmRpZgorCisJU0NUUF9JUElfQUREUl9STE9DSygpOwor
I2lmZGVmIFNDVFBfTVZSRgorLyoKKyAqIEZJWCBNRTogPz8gdGhpcyBXSUxMIHJlcG9ydCBkdXBs
aWNhdGUgYWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCisgKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4K
KyAqLworCS8qIGZpbGwgdXAgYWRkcmVzc2VzIGZvciBhbGwgVlJGcyBvbiB0aGUgZW5kcG9pbnQg
Ki8KKwlmb3IgKGlkID0gMDsgKGlkIDwgaW5wLT5udW1fdnJmcykgJiYgKHNpemUgPCBsaW1pdCk7
IGlkKyspIHsKKwkJc2l6ZSArPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihpbnAsIHN0Y2Is
IGxpbWl0LCBzYXMsCisJCQkJCQkgICBpbnAtPm1fdnJmX2lkc1tpZF0pOworCQlzYXMgPSAoc3Ry
dWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZSk7CisJfQorI2Vsc2UK
KwkvKiBmaWxsIHVwIGFkZHJlc3NlcyBmb3IgdGhlIGVuZHBvaW50J3MgZGVmYXVsdCB2cmYgKi8K
KwlzaXplID0gc2N0cF9maWxsX3VwX2FkZHJlc3Nlc192cmYoaW5wLCBzdGNiLCBsaW1pdCwgc2Fz
LAorCQkJCQkgIGlucC0+ZGVmX3ZyZl9pZCk7CisjZW5kaWYKKwlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKKwlyZXR1cm4gKHNpemUpOworfQorCisvKgorICogTk9URTogYXNzdW1lcyBhZGRyIGxv
Y2sgaXMgaGVsZAorICovCitzdGF0aWMgaW50CitzY3RwX2NvdW50X21heF9hZGRyZXNzZXNfdnJm
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlpbnQgY250ID0g
MDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZiA9IE5VTEw7CisKKwkvKgorCSAqIEluIGJvdGggc3Vi
LXNldCBib3VuZCBhbiBib3VuZF9hbGwgY2FzZXMgd2UgcmV0dXJuIHRoZSBNQVhJTVVNCisJICog
bnVtYmVyIG9mIGFkZHJlc3NlcyB0aGF0IHlvdSBDT1VMRCBnZXQuIEluIHJlYWxpdHkgdGhlIHN1
Yi1zZXQKKwkgKiBib3VuZCBtYXkgaGF2ZSBhbiBleGNsdXNpb24gbGlzdCBmb3IgYSBnaXZlbiBU
Q0IgT1IgaW4gdGhlCisJICogYm91bmQtYWxsIGNhc2UgYSBUQ0IgbWF5IE5PVCBpbmNsdWRlIHRo
ZSBsb29wYmFjayBvciBvdGhlcgorCSAqIGFkZHJlc3NlcyBhcyB3ZWxsLgorCSAqLworCXZyZiA9
IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwlpZiAodnJmID09IE5VTEwpIHsKKwkJcmV0dXJuICgw
KTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7
CisJCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9p
ZmE7CisKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikg
eworCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZh
KSB7CisJCQkJLyogQ291bnQgdGhlbSBpZiB0aGV5IGFyZSB0aGUgcmlnaHQgdHlwZSAqLworCQkJ
CXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAor
CQkJCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBJTkVUNgorCQkJCQlpZiAoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkKKwkJCQkJCWNudCArPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCWVsc2UKKwkJCQkJCWNudCArPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbHNlCisJCQkJCWNudCArPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
CQkJY2FzZSBBRl9DT05OOgorCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9
CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkJ
TElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikg
eworCQkJc3dpdGNoIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVm
IElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBJTkVUNgorCQkJCWlmIChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKQorCQkJCQljbnQg
Kz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCWVsc2UKKwkJCQkJY250ICs9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2Vsc2UKKwkJCQljbnQgKz0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
Nik7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlj
YXNlIEFGX0NPTk46CisJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJ
CQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9
CisJcmV0dXJuIChjbnQpOworfQorCitzdGF0aWMgaW50CitzY3RwX2NvdW50X21heF9hZGRyZXNz
ZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCkKK3sKKwlpbnQgY250ID0gMDsKKyNpZmRlZiBTQ1RQ
X01WUkYKKwlpbnQgaWQ7CisjZW5kaWYKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKyNpZmRl
ZiBTQ1RQX01WUkYKKy8qCisgKiBGSVggTUU6ID8/IHRoaXMgV0lMTCBjb3VudCBkdXBsaWNhdGUg
YWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCisgKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4KKyAqLwor
CS8qIGNvdW50IGFkZHJlc3NlcyBmb3IgYWxsIFZSRnMgb24gdGhlIGVuZHBvaW50ICovCisJZm9y
IChpZCA9IDA7IGlkIDwgaW5wLT5udW1fdnJmczsgaWQrKykgeworCQljbnQgKz0gc2N0cF9jb3Vu
dF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+bV92cmZfaWRzW2lkXSk7CisJfQorI2Vsc2UK
KwkvKiBjb3VudCBhZGRyZXNzZXMgZm9yIHRoZSBlbmRwb2ludCdzIGRlZmF1bHQgVlJGICovCisJ
Y250ID0gc2N0cF9jb3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+ZGVmX3ZyZl9pZCk7
CisjZW5kaWYKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKGNudCk7Cit9CisK
K3N0YXRpYyBpbnQKK3NjdHBfZG9fY29ubmVjdF94KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCB2b2lkICpvcHR2YWwsCisJCSAgc2l6ZV90IG9wdHNpemUsIHZvaWQg
KnAsIGludCBkZWxheSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWludCBjcmVhdF9sb2NrX29uID0g
MDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOworCXN0cnVjdCBzb2NrYWRkciAqc2E7
CisJdW5zaWduZWQgaW50IG51bV92NiA9IDAsIG51bV92NCA9IDAsICp0b3RhZGRycCwgdG90YWRk
cjsKKwl1aW50MzJfdCB2cmZfaWQ7CisJaW50IGJhZF9hZGRyZXNzZXMgPSAwOworCXNjdHBfYXNz
b2NfdCAqYV9pZDsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQ29ubmVjdHggY2FsbGVk
XG4iKTsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
JiYKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsK
KwkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVBRERSSU5VU0UpOworCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCX0KKworCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKKwkgICAgKHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlzdGNi
ID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwl9CisJaWYgKHN0Y2IpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQlyZXR1cm4gKEVBTFJF
QURZKTsKKwl9CisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xP
Q0soaW5wKTsKKwljcmVhdF9sb2NrX29uID0gMTsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVMVCk7CisJCWVycm9yID0g
RUZBVUxUOworCQlnb3RvIG91dF9ub3c7CisJfQorCXRvdGFkZHJwID0gKHVuc2lnbmVkIGludCAq
KW9wdHZhbDsKKwl0b3RhZGRyID0gKnRvdGFkZHJwOworCXNhID0gKHN0cnVjdCBzb2NrYWRkciAq
KSh0b3RhZGRycCArIDEpOworCXN0Y2IgPSBzY3RwX2Nvbm5lY3R4X2hlbHBlcl9maW5kKGlucCwg
c2EsICZ0b3RhZGRyLCAmbnVtX3Y0LCAmbnVtX3Y2LCAmZXJyb3IsICh1bnNpZ25lZCBpbnQpKG9w
dHNpemUgLSBzaXplb2YoaW50KSksICZiYWRfYWRkcmVzc2VzKTsKKwlpZiAoKHN0Y2IgIT0gTlVM
TCkgfHwgYmFkX2FkZHJlc3NlcykgeworCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcgdXAg
YW4gYXNzb2NpYXRpb24gKi8KKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKKwkJY3Jl
YXRfbG9ja19vbiA9IDA7CisJCWlmIChzdGNiKQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQlpZiAoYmFkX2FkZHJlc3NlcyA9PSAwKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7CisJCQllcnJvciA9
IEVBTFJFQURZOworCQl9CisJCWdvdG8gb3V0X25vdzsKKwl9CisjaWZkZWYgSU5FVDYKKwlpZiAo
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgJiYKKwkg
ICAgKG51bV92NiA+IDApKSB7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJ
fQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJ
ICAgIChudW1fdjQgPiAwKSkgeworCQlzdHJ1Y3QgaW42cGNiICppbnA2OworCisJCWlucDYgPSAo
c3RydWN0IGluNnBjYiAqKWlucDsKKwkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJ
CS8qCisJCQkgKiBpZiBJUFY2X1Y2T05MWSBmbGFnLCBpZ25vcmUgY29ubmVjdGlvbnMgZGVzdGlu
ZWQKKwkJCSAqIHRvIGEgdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgorCQkJICovCisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF9ub3c7CisJCX0KKwl9Cisj
ZW5kaWYJCQkJLyogSU5FVDYgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1VOQk9VTkQpID09CisJICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpIHsKKwkJLyogQmlu
ZCBhIGVwaGVtZXJhbCBwb3J0ICovCisJCWVycm9yID0gc2N0cF9pbnBjYl9iaW5kKHNvLCBOVUxM
LCBOVUxMLCBwKTsKKwkJaWYgKGVycm9yKSB7CisJCQlnb3RvIG91dF9ub3c7CisJCX0KKwl9CisK
KwkvKiBGSVggTUU6IGRvIHdlIHdhbnQgdG8gcGFzcyBpbiBhIHZyZiBvbiB0aGUgY29ubmVjdCBj
YWxsPyAqLworCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKworCisJLyogV2UgYXJlIEdPT0Qg
dG8gZ28gKi8KKwlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgc2EsICZlcnJvciwgMCwgdnJm
X2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnByZV9vcGVuX3N0cmVh
bV9jb3VudCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wb3J0LAorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCQkJ
ICAgICAgIChzdHJ1Y3QgdGhyZWFkICopcAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJ
CSAgICAgICAoUEtUSFJFQUQpcAorI2Vsc2UKKwkJCSAgICAgICAoc3RydWN0IHByb2MgKilwCisj
ZW5kaWYKKwkJKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCS8qIEdhayEgbm8gbWVtb3J5ICov
CisJCWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB7CisJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0g
U0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOworCQkvKiBTZXQgdGhlIGNvbm5lY3RlZCBmbGFnIHNv
IHdlIGNhbiBxdWV1ZSBkYXRhICovCisJCXNvaXNjb25uZWN0aW5nKHNvKTsKKwl9CisJU0NUUF9T
RVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOworCS8qIG1vdmUg
dG8gc2Vjb25kIGFkZHJlc3MgKi8KKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJY2FzZSBBRl9JTkVUOgorCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qp
c2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNh
ZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQlicmVhazsKKyNlbmRp
ZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWVycm9yID0gMDsKKwlzY3RwX2Nvbm5lY3R4
X2hlbHBlcl9hZGQoc3RjYiwgc2EsICh0b3RhZGRyLTEpLCAmZXJyb3IpOworCS8qIEZpbGwgaW4g
dGhlIHJldHVybiBpZCAqLworCWlmIChlcnJvcikgeworCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX1BDQkZSRUVfRk9SQ0UsCisJCSAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ183KTsKKwkJZ290byBvdXRfbm93OworCX0K
KwlhX2lkID0gKHNjdHBfYXNzb2NfdCAqKW9wdHZhbDsKKwkqYV9pZCA9IHNjdHBfZ2V0X2Fzc29j
aWQoc3RjYik7CisKKwkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZm9y
IHRoZSBhc3NvYyAqLworCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhpbnAsIHN0Y2IpOwor
CisJaWYgKGRlbGF5KSB7CisJCS8qIGRvaW5nIGRlbGF5ZWQgY29ubmVjdGlvbiAqLworCQlzdGNi
LT5hc29jLmRlbGF5ZWRfY29ubmVjdGlvbiA9IDE7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
KTsKKwl9IGVsc2UgeworCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50
aW1lX2VudGVyZWQpOworCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xP
Q0tFRCk7CisJfQorCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyBvdXRfbm93OgorCWlmIChjcmVh
dF9sb2NrX29uKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQorCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNkZWZpbmUgU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhc3NvY19pZCkgeyBcCisJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fFwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7IFwKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsgXAor
CQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7IFwKKwkJaWYgKHN0Y2Ip
IHsgXAorCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsgXAorCQl9IFwKKwkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOyBcCisJfSBlbHNlIGlmIChhc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DKSB7IFwKKwkJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsg
XAorCQlpZiAoc3RjYiA9PSBOVUxMKSB7IFwKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7IFwKKwkJCWVycm9yID0g
RU5PRU5UOyBcCisJCQlicmVhazsgXAorCQl9IFwKKwl9IGVsc2UgeyBcCisJCXN0Y2IgPSBOVUxM
OyBcCisJfSBcCit9CisKKworI2RlZmluZSBTQ1RQX0NIRUNLX0FORF9DQVNUKGRlc3RwLCBzcmNw
LCB0eXBlLCBzaXplKSB7XAorCWlmIChzaXplIDwgc2l6ZW9mKHR5cGUpKSB7IFwKKwkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsgXAorCQllcnJvciA9IEVJTlZBTDsgXAorCQlicmVhazsgXAorCX0gZWxzZSB7IFwKKwkJ
ZGVzdHAgPSAodHlwZSAqKXNyY3A7IFwKKwl9IFwKK30KKworI2lmIGRlZmluZWQoX19QYW5kYV9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNlbHNlCitzdGF0aWMgaW50CisjZW5k
aWYKK3NjdHBfZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0
dmFsLCBzaXplX3QgKm9wdHNpemUsCisJICAgIHZvaWQgKnApIHsKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wID0gTlVMTDsKKwlpbnQgZXJyb3IsIHZhbCA9IDA7CisJc3RydWN0IHNjdHBfdGNiICpz
dGNiID0gTlVMTDsKKworCWlmIChvcHR2YWwgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQly
ZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNv
X3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIEVJTlZB
TDsKKwl9CisJZXJyb3IgPSAwOworCisJc3dpdGNoIChvcHRuYW1lKSB7CisJY2FzZSBTQ1RQX05P
REVMQVk6CisJY2FzZSBTQ1RQX0FVVE9DTE9TRToKKwljYXNlIFNDVFBfRVhQTElDSVRfRU9SOgor
CWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoKKwljYXNlIFNDVFBfRElTQUJMRV9GUkFHTUVOVFM6CisJ
Y2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUjoKKwljYXNlIFNDVFBfVVNFX0VYVF9SQ1ZJ
TkZPOgorCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlzd2l0Y2ggKG9wdG5hbWUpIHsKKwkJY2Fz
ZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgorCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfTk9fRlJBR01FTlQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9J
X1dBTlRfTUFQUEVEX1Y0X0FERFI6CisJCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9B
VVRPX0FTQ09ORjoKKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
REFMTCkgeworCQkJCS8qIG9ubHkgdmFsaWQgZm9yIGJvdW5kIGFsbCBzb2NrZXRzICovCisJCQkJ
dmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYp
OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
CWdvdG8gZmxhZ3Nfb3V0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9FWFBMSUNJVF9F
T1I6CisJCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBM
SUNJVF9FT1IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9OT0RFTEFZOgorCQkJdmFsID0gc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSk7CisJCQlicmVhazsK
KwkJY2FzZSBTQ1RQX1VTRV9FWFRfUkNWSU5GTzoKKwkJCXZhbCA9IHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKTsKKwkJCWJyZWFrOworCQljYXNlIFND
VFBfQVVUT0NMT1NFOgorCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0FVVE9DTE9TRSkpCisJCQkJdmFsID0gVElDS1NfVE9fU0VDKGlucC0+c2N0cF9lcC5hdXRv
X2Nsb3NlX3RpbWUpOworCQkJZWxzZQorCQkJCXZhbCA9IDA7CisJCQlicmVhazsKKworCQlkZWZh
dWx0OgorCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOworCQkJZXJyb3IgPSBFTk9QUk9UT09QVDsKKwkJfSAv
KiBlbmQgc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpICovCisJCWlmICgqb3B0c2l6ZSA8IHNpemVv
Zih2YWwpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwlmbGFn
c19vdXQ6CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJaWYgKGVycm9yID09IDApIHsKKwkJ
CS8qIHJldHVybiB0aGUgb3B0aW9uIHZhbHVlICovCisJCQkqKGludCAqKW9wdHZhbCA9IHZhbDsK
KwkJCSpvcHRzaXplID0gc2l6ZW9mKHZhbCk7CisJCX0KKwkJYnJlYWs7CisgICAgICAgIGNhc2Ug
U0NUUF9HRVRfUEFDS0VUX0xPRzoKKwl7CisjaWZkZWYgIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwkJ
dWludDhfdCAqdGFyZ2V0OworCQlpbnQgcmV0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodGFy
Z2V0LCBvcHR2YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKKwkJcmV0ID0gc2N0cF9jb3B5X291dF9w
YWNrZXRfbG9nKHRhcmdldCAsIChpbnQpKm9wdHNpemUpOworCQkqb3B0c2l6ZSA9IHJldDsKKyNl
bHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQllcnJvciA9IEVPUE5PVFNVUFA7CisjZW5kaWYKKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRVVTRV9QT1JUOgorCXsKKwkJdWludDMyX3QgKnZhbHVl
OworCisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkpIHsK
KwkJCS8qIENhbid0IGRvIHRoaXMgZm9yIGEgMS1tIHNvY2tldCAqLworCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWws
IHVpbnQzMl90LCAqb3B0c2l6ZSk7CisJCSp2YWx1ZSA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90
KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UOgorCXsK
KwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZh
bCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJKnZhbHVlID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5
X3BvaW50OworCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCWJyZWFrOworCX0KKwlj
YXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToKKwl7CisJCXVpbnQzMl90ICp2YWx1ZTsKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7
CisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVS
TEVBVkUpKSB7CisJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
SU5URVJMRUFWRV9TVFJNUykpIHsKKwkJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMjsKKwkJ
CX0gZWxzZSB7CisJCQkJKnZhbHVlID0gU0NUUF9GUkFHX0xFVkVMXzE7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMDsKKwkJfQorCQkqb3B0c2l6ZSA9IHNp
emVvZih1aW50MzJfdCk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfSU5URVJMRUFWSU5HX1NV
UFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6
ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAo
c3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQ7
CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19p
ZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJ
CWlmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSAxOwor
CQkJCX0gZWxzZSB7CisJCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7CisJCQkJfQorCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUg
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwlj
YXNlIFNDVFBfQ01UX09OX09GRjoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lk
KTsKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Muc2N0cF9j
bXRfb25fb2ZmOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChh
di0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfY210X29uX29mZjsKKwkJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRz
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX1BMVUdHQUJMRV9DQzoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
ICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFz
c29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Mu
Y29uZ2VzdGlvbl9jb250cm9sX21vZHVsZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
fSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJ
CVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2Vw
LnNjdHBfZGVmYXVsdF9jY19tb2R1bGU7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
fSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9
CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9DQ19PUFRJT046CisJ
eworCQlzdHJ1Y3Qgc2N0cF9jY19vcHRpb24gKmNjX29wdDsKKworCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKGNjX29wdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24sICpvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCk7CisJ
CWlmIChzdGNiID09IE5VTEwpIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJ
aWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uID09IE5V
TEwpIHsKKwkJCQllcnJvciA9IEVOT1RTVVA7CisJCQl9IGVsc2UgeworCQkJCWVycm9yID0gKCpz
dGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikoc3RjYiwgMCwg
Y2Nfb3B0KTsKKwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jY19vcHRpb24pOwor
CQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUExVR0dBQkxFX1NTOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2Owor
CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQp
OworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5zdHJlYW1f
c2NoZWR1bGluZ19tb2R1bGU7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7
CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJ
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJ
CQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lO
UF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+c2N0cF9lcC5zY3RwX2Rl
ZmF1bHRfc3NfbW9kdWxlOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAo
ZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU1NfVkFMVUU6CisJeworCQlzdHJ1
Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9w
dHZhbCwgc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9T
VENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCWlmICgoYXYt
PnN0cmVhbV9pZCA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgfHwKKwkJCSAgICAoc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19nZXRfdmFsdWUoc3RjYiwgJnN0Y2ItPmFzb2MsICZz
dGNiLT5hc29jLnN0cm1vdXRbYXYtPnN0cmVhbV9pZF0sCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdi0+c3RyZWFtX3ZhbHVlKSA8IDApKSB7CisJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0gZWxzZSB7CisJCQkJKm9w
dHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlKTsKKwkJCX0KKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhbid0IGdldCBzdHJlYW0gdmFs
dWUgd2l0aG91dCBhc3NvY2lhdGlvbiAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlO
VkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX0FERFJfTEVOOgorCXsKKwkJ
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYs
IG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJZXJyb3IgPSBF
SU5WQUw7CisjaWZkZWYgSU5FVAorCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IEFGX0lORVQpIHsK
KwkJCWF2LT5hc3NvY192YWx1ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJZXJy
b3IgPSAwOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAoYXYtPmFzc29jX3ZhbHVl
ID09IEFGX0lORVQ2KSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisJCQllcnJvciA9IDA7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSBBRl9DT05OKSB7CisJCQlhdi0+YXNz
b2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJZXJyb3IgPSAwOwor
CQl9CisjZW5kaWYKKwkJaWYgKGVycm9yKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCX0gZWxzZSB7CisJ
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9HRVRfQVNTT0NfTlVNQkVSOgorCXsKKwkJdWludDMyX3QgKnZh
bHVlLCBjbnQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJf
dCwgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJCS8qIENhbid0IGRvIHRoaXMgZm9y
IGEgMS0xIHNvY2tldCAqLworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJCQlicmVhazsKKwkJfQorCQljbnQgPSAwOworCQlMSVNUX0ZPUkVBQ0goc3RjYiwg
JmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJY250Kys7CisJCX0KKwkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkqdmFsdWUgPSBjbnQ7CisJCSpvcHRzaXplID0gc2l6
ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfQVNTT0NfSURfTElT
VDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX2lkcyAqaWRzOworCQl1aW50MzJfdCBhdDsKKwkJ
c2l6ZV90IGxpbWl0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaWRzLCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jX2lkcywgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJCS8qIENh
bid0IGRvIHRoaXMgZm9yIGEgMS0xIHNvY2tldCAqLworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQlhdCA9IDA7CisJCWxpbWl0
ID0gKCpvcHRzaXplIC0gc2l6ZW9mKHVpbnQzMl90KSkgLyBzaXplb2Yoc2N0cF9hc3NvY190KTsK
KwkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3Qp
IHsKKwkJCWlmIChhdCA8IGxpbWl0KSB7CisJCQkJaWRzLT5nYWlkc19hc3NvY19pZFthdCsrXSA9
IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJCQkJaWYgKGF0ID09IDApIHsKKwkJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNl
IHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9
CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJ
aWRzLT5nYWlkc19udW1iZXJfb2ZfaWRzID0gYXQ7CisJCQkqb3B0c2l6ZSA9ICgoYXQgKiBzaXpl
b2Yoc2N0cF9hc3NvY190KSkgKyBzaXplb2YodWludDMyX3QpKTsKKwkJfQorCQlicmVhazsKKwl9
CisJY2FzZSBTQ1RQX0NPTlRFWFQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19p
ZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuY29u
dGV4dDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFz
c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2NvbnRleHQ7CisJCQkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0g
RUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2Ug
U0NUUF9WUkZfSUQ6CisJeworCQl1aW50MzJfdCAqZGVmYXVsdF92cmZpZDsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKGRlZmF1bHRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsK
KwkJKmRlZmF1bHRfdnJmaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJCSpvcHRzaXplID0gc2l6ZW9m
KHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfQVNPQ19WUkY6CisJewor
CQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqaWQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChp
ZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIGlkLT5hc3NvY19pZCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsK
KwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQl9IGVsc2UgeworCQkJaWQtPmFz
c29jX3ZhbHVlID0gc3RjYi0+YXNvYy52cmZfaWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfVlJGX0lEUzoKKwl7CisjaWZkZWYgU0NUUF9NVlJG
CisJCWludCBzaXpfbmVlZGVkOworCQl1aW50MzJfdCAqdnJmX2lkczsKKworCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHZyZl9pZHMsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJc2l6X25l
ZWRlZCA9IGlucC0+bnVtX3ZyZnMgKiBzaXplb2YodWludDMyX3QpOworCQlpZiAoKm9wdHNpemUg
PCBzaXpfbmVlZGVkKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJfSBl
bHNlIHsKKwkJCW1lbWNweSh2cmZfaWRzLCBpbnAtPm1fdnJmX2lkcywgc2l6X25lZWRlZCk7CisJ
CQkqb3B0c2l6ZSA9IHNpel9uZWVkZWQ7CisJCX0KKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwor
CQllcnJvciA9IEVPUE5PVFNVUFA7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9H
RVRfTk9OQ0VfVkFMVUVTOgorCXsKKwkJc3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyAqZ252
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZ252LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldF9u
b25jZV92YWx1ZXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBnbnYt
PmduX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJZ252LT5nbl9wZWVyc190YWcgPSBz
dGNiLT5hc29jLnBlZXJfdnRhZzsKKwkJCWdudi0+Z25fbG9jYWxfdGFnID0gc3RjYi0+YXNvYy5t
eV92dGFnOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNpemUgPSBzaXplb2Yo
c3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09O
Tik7CisJCQllcnJvciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
REVMQVlFRF9TQUNLOgorCXsKKwkJc3RydWN0IHNjdHBfc2Fja19pbmZvICpzYWNrOworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8sICpv
cHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWNrLT5zYWNrX2Fzc29jX2lk
KTsKKwkJaWYgKHN0Y2IpIHsKKwkJCXNhY2stPnNhY2tfZGVsYXkgPSBzdGNiLT5hc29jLmRlbGF5
ZWRfYWNrOworCQkJc2Fjay0+c2Fja19mcmVxID0gc3RjYi0+YXNvYy5zYWNrX2ZyZXE7CisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNhY2stPnNhY2tfYXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJ
CQlzYWNrLT5zYWNrX2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1l
b3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSk7CisJCQkJc2Fjay0+c2Fja19mcmVxID0gaW5wLT5z
Y3RwX2VwLnNjdHBfc2Fja19mcmVxOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0g
ZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQor
CQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2Fj
a19pbmZvKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9TTkRCVUZfVVNFOgor
CXsKKwkJc3RydWN0IHNjdHBfc29ja3N0YXQgKnNzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c3MsIG9wdHZhbCwgc3RydWN0IHNjdHBfc29ja3N0YXQsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBzcy0+c3NfYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlz
cy0+c3NfdG90YWxfc25kYnVmID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsK
KwkJCXNzLT5zc190b3RhbF9yZWN2X2J1ZiA9IChzdGNiLT5hc29jLnNpemVfb25fcmVhc21fcXVl
dWUgKworCQkJCQkJIHN0Y2ItPmFzb2Muc2l6ZV9vbl9hbGxfc3RyZWFtcyk7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zb2Nrc3Rh
dCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7CisJCQllcnJvciA9IEVOT1RDT05OOwor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYX0JVUlNUOgorCXsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMAorCQl1aW50OF90ICp2
YWx1ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQ4X3QsICpv
cHRzaXplKTsKKworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2VwLm1h
eF9idXJzdCA8IDI1NikgeworCQkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLm1heF9idXJzdDsKKwkJ
fSBlbHNlIHsKKwkJCSp2YWx1ZSA9IDI1NTsKKwkJfQorCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQ4X3QpOworI2Vsc2UKKwkJc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBz
dGNiLT5hc29jLm1heF9idXJzdDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNl
IHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwK
KwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2VwLm1heF9i
dXJzdDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDAp
IHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQor
I2VuZGlmCisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYU0VHOgorCXsKKwkJc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgKmF2OworCQlpbnQgb3ZoOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlh
di0+YXNzb2NfdmFsdWUgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsK
KwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJ
aWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCQkJCW92
aCA9IFNDVFBfTUVEX09WRVJIRUFEOworCQkJCX0gZWxzZSB7CisJCQkJCW92aCA9IFNDVFBfTUVE
X1Y0X09WRVJIRUFEOworCQkJCX0KKwkJCQlpZiAoaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPj0gU0NU
UF9ERUZBVUxUX01BWFNFR01FTlQpCisJCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7CisJCQkJZWxz
ZQorCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZnJhZ19wb2ludCAtIG92aDsKKwkJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpv
cHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX0dFVF9TVEFUX0xPRzoKKwkJZXJyb3IgPSBzY3RwX2ZpbGxfc3RhdF9s
b2cob3B0dmFsLCBvcHRzaXplKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0VWRU5UUzoKKwl7CisJ
CXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSAqZXZlbnRzOworCisJCVNDVFBfQ0hFQ0tfQU5E
X0NBU1QoZXZlbnRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSwgKm9wdHNp
emUpOworCQltZW1zZXQoZXZlbnRzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2Ny
aWJlKSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkpCisJCQlldmVudHMtPnNjdHBfZGF0
YV9pb19ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKQorCQkJZXZlbnRzLT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50
ID0gMTsKKworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVD
VlBBRERSRVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRkcmVzc19ldmVudCA9IDE7CisKKwkJaWYg
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQp
KQorCQkJZXZlbnRzLT5zY3RwX3NlbmRfZmFpbHVyZV9ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKSkKKwkJCWV2ZW50
cy0+c2N0cF9wZWVyX2Vycm9yX2V2ZW50ID0gMTsKKworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCkpCisJCQlldmVudHMtPnNjdHBf
c2h1dGRvd25fZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19QREFQSUVWTlQpKQorCQkJZXZlbnRzLT5zY3RwX3BhcnRpYWxfZGVsaXZlcnlf
ZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19BREFQVEFUSU9ORVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVu
dCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FV
VEhFVk5UKSkKKwkJCWV2ZW50cy0+c2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudCA9IDE7CisKKwkJ
aWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKQorCQkJ
ZXZlbnRzLT5zY3RwX3NlbmRlcl9kcnlfZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKSkKKwkJCWV2ZW50cy0+
c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgPSAxOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSk7CisJCWJyZWFr
OworCX0KKwljYXNlIFNDVFBfQURBUFRBVElPTl9MQVlFUjoKKwl7CisJCXVpbnQzMl90ICp2YWx1
ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0
c2l6ZSk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJKnZhbHVlID0gaW5wLT5zY3RwX2Vw
LmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9T
RVRfSU5JVElBTF9EQkdfU0VROgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfc2VxdWVuY2Vf
ZGVidWc7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJKm9wdHNpemUgPSBzaXplb2YodWlu
dDMyX3QpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9MT0NBTF9BRERSX1NJWkU6CisJ
eworCQl1aW50MzJfdCAqdmFsdWU7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0
dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkqdmFs
dWUgPSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXMoaW5wKTsKKwkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfR0VUX1JFTU9URV9BRERSX1NJWkU6CisJeworCQl1aW50MzJfdCAqdmFsdWU7CisJCXNp
emVfdCBzaXplOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJU0NUUF9DSEVDS19BTkRf
Q0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQkvKiBGSVhNRSBNVDog
Y2hhbmdlIHRvIHNjdHBfYXNzb2NfdmFsdWU/ICovCisJCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgKHNjdHBfYXNzb2NfdCkgKnZhbHVlKTsKKworCQlpZiAoc3RjYikgeworCQkJc2l6ZSA9IDA7
CisJCQkvKiBDb3VudCB0aGUgc2l6ZXMgKi8KKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+
YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2
CisJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19N
QVBQRURfVjQpKSB7CisJCQkJCQlzaXplICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
KwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJCQkJCX0KKyNlbHNlCisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZf
SU5FVDY6CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCQli
cmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NP
Tk46CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQkJYnJl
YWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkqdmFsdWUgPSAodWludDMyX3QpIHNpemU7CisJCQkq
b3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7
CisJCQllcnJvciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VU
X1BFRVJfQUREUkVTU0VTOgorCQkvKgorCQkgKiBHZXQgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24s
IGFuIGFycmF5IGlzIHBhc3NlZCBpbiB0bworCQkgKiBmaWxsIHVwIHdlIHBhY2sgaXQuCisJCSAq
LworCXsKKwkJc2l6ZV90IGNwc3osIGxlZnQ7CisJCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpz
YXM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2Vz
ICpzYWRkcjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhZGRyLCBvcHR2YWwsIHN0cnVjdCBz
Y3RwX2dldGFkZHJlc3NlcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2Is
IHNhZGRyLT5zZ2V0X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJbGVmdCA9ICgqb3B0
c2l6ZSkgLSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKTsKKwkJCSpvcHRzaXplID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3Nlcyk7CisJCQlzYXMgPSAoc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2UgKikmc2FkZHItPmFkZHJbMF07CisKKwkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
c3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRk
ci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVm
IElORVQ2CisJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19O
RUVEU19NQVBQRURfVjQpKSB7CisJCQkJCQljcHN6ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY3BzeiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworCQkJCQl9CisjZWxzZQorCQkJCQljcHN6ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJCWNwc3ogPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJ
CWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZf
Q09OTjoKKwkJCQkJY3BzeiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCQkJCWJy
ZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJY3BzeiA9IDA7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCQlpZiAoY3BzeiA9PSAwKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAo
bGVmdCA8IGNwc3opIHsKKwkJCQkJLyogbm90IGVub3VnaCByb29tLiAqLworCQkJCQlicmVhazsK
KwkJCQl9CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQkJCWlmICgoc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgJiYK
KwkJCQkgICAgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkpIHsKKwkJ
CQkJLyogTXVzdCBtYXAgdGhlIGFkZHJlc3MgKi8KKwkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNigm
bmV0LT5yby5fbF9hZGRyLnNpbiwKKwkJCQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilz
YXMpOworCQkJCX0gZWxzZSB7CisJCQkJCW1lbWNweShzYXMsICZuZXQtPnJvLl9sX2FkZHIsIGNw
c3opOworCQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KHNhcywgJm5ldC0+cm8uX2xfYWRkciwgY3Bz
eik7CisjZW5kaWYKKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhcyktPnNpbl9wb3J0ID0g
c3RjYi0+cnBvcnQ7CisKKwkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNh
ZGRyX3Qpc2FzICsgY3Bzeik7CisJCQkJbGVmdCAtPSBjcHN6OworCQkJCSpvcHRzaXplICs9IGNw
c3o7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCSAgICAg
ICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQl9CisJCWJyZWFrOworCX0KKwlj
YXNlIFNDVFBfR0VUX0xPQ0FMX0FERFJFU1NFUzoKKwl7CisJCXNpemVfdCBsaW1pdCwgYWN0dWFs
OworCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2FzOworCQlzdHJ1Y3Qgc2N0cF9nZXRhZGRy
ZXNzZXMgKnNhZGRyOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2FkZHIsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgc2FkZHItPnNnZXRfYXNzb2NfaWQpOworCisJCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJf
c3RvcmFnZSAqKSZzYWRkci0+YWRkclswXTsKKwkJbGltaXQgPSAqb3B0c2l6ZSAtIHNpemVvZihz
Y3RwX2Fzc29jX3QpOworCQlhY3R1YWwgPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzKGlucCwgc3Rj
YiwgbGltaXQsIHNhcyk7CisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCX0KKwkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpICsgYWN0
dWFsOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6CisJeworCQlz
dHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFkZHJwOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQo
SU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywg
Km9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHBhZGRycC0+c3BwX2Fzc29j
X2lkKTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJaWYgKHBhZGRy
cC0+c3BwX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcGFkZHJw
LT5zcHBfYWRkcmVzczsKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9h
ZGRyKSkgeworCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOworCQkJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKKwkJCX0gZWxzZSB7CisJCQkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRycC0+c3BwX2FkZHJlc3M7CisJ
CX0KKyNlbHNlCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRycC0+c3BwX2FkZHJl
c3M7CisjZW5kaWYKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJbmV0ID0gc2N0cF9maW5kbmV0
KHN0Y2IsIGFkZHIpOworCQl9IGVsc2UgeworCQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ug
c2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAorCQkJICogZG8gYSBkZWNyZW1lbnQg
aWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCisJCQkgKiB0Y2IgKGxh
c3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgorCQkJICovCisJCQluZXQgPSBO
VUxMOworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3Nv
Y2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0
Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0KKwkJ
aWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTkVUCisJCQlp
ZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
KnNpbjsKKworCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCWlmIChz
aW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisJCQkJCWVycm9yID0gRUlOVkFM
OworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJCWlmICghSU42
X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJCXN0cnVjdCBz
b2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopYWRkcjsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgeworCQkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZXJyb3Ig
PSBFQUZOT1NVUFBPUlQ7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9y
KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCS8q
IEFwcGxpZXMgdG8gdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uICovCisJCQlwYWRkcnAtPnNwcF9m
bGFncyA9IDA7CisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQlwYWRkcnAtPnNwcF9oYmludGVy
dmFsID0gbmV0LT5oZWFydF9iZWF0X2RlbGF5OworCQkJCXBhZGRycC0+c3BwX3BhdGhtYXhyeHQg
PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkOworCQkJCXBhZGRycC0+c3BwX3BhdGhtdHUgPSBuZXQt
Pm10dTsKKwkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQlwYWRkcnAtPnNwcF9wYXRobXR1IC09IFND
VFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
CQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJcGFkZHJwLT5zcHBfcGF0aG10dSAtPSBTQ1RQX01JTl9P
VkVSSEVBRDsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlwYWRkcnAtPnNwcF9wYXRobXR1IC09IHNpemVvZihz
dHJ1Y3Qgc2N0cGhkcik7CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJ
YnJlYWs7CisJCQkJfQorCQkJCS8qIGdldCBmbGFncyBmb3IgSEIgKi8KKwkJCQlpZiAobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpIHsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0g
U1BQX0hCX0RJU0FCTEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0g
U1BQX0hCX0VOQUJMRTsKKwkJCQl9CisJCQkJLyogZ2V0IGZsYWdzIGZvciBQTVRVICovCisJCQkJ
aWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgeworCQkJCQlwYWRkcnAt
PnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRElTQUJMRTsKKwkJCQl9IGVsc2UgeworCQkJCQlwYWRk
cnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRU5BQkxFOworCQkJCX0KKwkJCQlpZiAobmV0LT5k
c2NwICYgMHgwMSkgeworCQkJCQlwYWRkcnAtPnNwcF9kc2NwID0gbmV0LT5kc2NwICYgMHhmYzsK
KwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0RTQ1A7CisJCQkJfQorI2lmZGVmIElORVQ2
CisJCQkJaWYgKChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgor
CQkJCSAgICAobmV0LT5mbG93bGFiZWwgJiAweDgwMDAwMDAwKSkgeworCQkJCQlwYWRkcnAtPnNw
cF9pcHY2X2Zsb3dsYWJlbCA9IG5ldC0+Zmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJcGFk
ZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0lQVjZfRkxPV0xBQkVMOworCQkJCX0KKyNlbmRpZgorCQkJ
fSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIE5vIGRlc3RpbmF0aW9uIHNvIHJldHVybiBkZWZhdWx0
CisJCQkJICogdmFsdWUKKwkJCQkgKi8KKwkJCQlwYWRkcnAtPnNwcF9wYXRobWF4cnh0ID0gc3Rj
Yi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJcGFkZHJwLT5zcHBfcGF0aG10dSA9IHN0Y2It
PmFzb2MuZGVmYXVsdF9tdHU7CisJCQkJaWYgKHN0Y2ItPmFzb2MuZGVmYXVsdF9kc2NwICYgMHgw
MSkgeworCQkJCQlwYWRkcnAtPnNwcF9kc2NwID0gc3RjYi0+YXNvYy5kZWZhdWx0X2RzY3AgJiAw
eGZjOworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfRFNDUDsKKwkJCQl9CisjaWZkZWYg
SU5FVDYKKwkJCQlpZiAoc3RjYi0+YXNvYy5kZWZhdWx0X2Zsb3dsYWJlbCAmIDB4ODAwMDAwMDAp
IHsKKwkJCQkJcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgPSBzdGNiLT5hc29jLmRlZmF1bHRf
Zmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0lQ
VjZfRkxPV0xBQkVMOworCQkJCX0KKyNlbmRpZgorCQkJCS8qIGRlZmF1bHQgc2V0dGluZ3Mgc2hv
dWxkIGJlIHRoZXNlICovCisJCQkJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3Rj
YiwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKSkgeworCQkJCQlwYWRkcnAtPnNwcF9m
bGFncyB8PSBTUFBfSEJfRElTQUJMRTsKKwkJCQl9IGVsc2UgeworCQkJCQlwYWRkcnAtPnNwcF9m
bGFncyB8PSBTUFBfSEJfRU5BQkxFOworCQkJCX0KKwkJCQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1
cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpKSB7CisJCQkJCXBh
ZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9ESVNBQkxFOworCQkJCX0gZWxzZSB7CisJCQkJ
CXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9FTkFCTEU7CisJCQkJfQorCQkJCXBhZGRy
cC0+c3BwX2hiaW50ZXJ2YWwgPSBzdGNiLT5hc29jLmhlYXJ0X2JlYXRfZGVsYXk7CisJCQl9CisJ
CQlwYWRkcnAtPnNwcF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHBhZGRycC0+c3BwX2Fzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCS8qIFVzZSBlbmRwb2ludCBkZWZhdWx0cyAq
LworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCA9
IGlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJcGFkZHJwLT5zcHBfaGJpbnRlcnZh
bCA9IFRJQ0tTX1RPX01TRUMoaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElN
RVJfSEVBUlRCRUFUXSk7CisJCQkJcGFkZHJwLT5zcHBfYXNzb2NfaWQgPSBTQ1RQX0ZVVFVSRV9B
U1NPQzsKKwkJCQkvKiBnZXQgaW5wJ3MgZGVmYXVsdCAqLworCQkJCWlmIChpbnAtPnNjdHBfZXAu
ZGVmYXVsdF9kc2NwICYgMHgwMSkgeworCQkJCQlwYWRkcnAtPnNwcF9kc2NwID0gaW5wLT5zY3Rw
X2VwLmRlZmF1bHRfZHNjcCAmIDB4ZmM7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9E
U0NQOworCQkJCX0KKyNpZmRlZiBJTkVUNgorCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkJICAgIChpbnAtPnNjdHBfZXAuZGVmYXVsdF9m
bG93bGFiZWwgJiAweDgwMDAwMDAwKSkgeworCQkJCQlwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJl
bCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCXBh
ZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9JUFY2X0ZMT1dMQUJFTDsKKwkJCQl9CisjZW5kaWYKKwkJ
CQlwYWRkcnAtPnNwcF9wYXRobXR1ID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfbXR1OworCisJCQkJ
aWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJF
QVQpKSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9IQl9FTkFCTEU7CisJCQkJfSBl
bHNlIHsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0RJU0FCTEU7CisJCQkJfQor
CQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BN
VFVEKSkgeworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRU5BQkxFOworCQkJ
CX0gZWxzZSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9ESVNBQkxFOwor
CQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDAp
IHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRycGFyYW1zKTsKKwkJfQor
CQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTzoKKwl7CisJCXN0cnVj
dCBzY3RwX3BhZGRyaW5mbyAqcGFkZHJpOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0
cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYp
CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHBhZGRyaSwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8sICpvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBwYWRkcmktPnNwaW5mb19hc3NvY19pZCk7
CisKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmIChwYWRkcmktPnNw
aW5mb19hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnBhZGRyaS0+
c3BpbmZvX2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRyaS0+c3BpbmZvX2FkZHJlc3M7CisJCQl9CisJCX0g
ZWxzZSB7CisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcmktPnNwaW5mb19hZGRy
ZXNzOworCQl9CisjZWxzZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcmktPnNw
aW5mb19hZGRyZXNzOworI2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNj
dHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBo
ZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEg
ZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJ
ICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLwor
CQkJbmV0ID0gTlVMTDsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0
cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsK
KwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJ
fQorCQl9CisKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgIT0gTlVMTCkpIHsKKwkJCWlm
IChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCQkvKiBJdCdz
IHVuY29uZmlybWVkICovCisJCQkJcGFkZHJpLT5zcGluZm9fc3RhdGUgPSBTQ1RQX1VOQ09ORklS
TUVEOworCQkJfSBlbHNlIGlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxF
KSB7CisJCQkJLyogSXQncyBhY3RpdmUgKi8KKwkJCQlwYWRkcmktPnNwaW5mb19zdGF0ZSA9IFND
VFBfQUNUSVZFOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJdCdzIGluYWN0aXZlICovCisJCQkJcGFk
ZHJpLT5zcGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQkJfQorCQkJcGFkZHJpLT5zcGlu
Zm9fY3duZCA9IG5ldC0+Y3duZDsKKwkJCXBhZGRyaS0+c3BpbmZvX3NydHQgPSBuZXQtPmxhc3Rz
YSA+PiBTQ1RQX1JUVF9TSElGVDsKKwkJCXBhZGRyaS0+c3BpbmZvX3J0byA9IG5ldC0+UlRPOwor
CQkJcGFkZHJpLT5zcGluZm9fYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQkJ
cGFkZHJpLT5zcGluZm9fbXR1ID0gbmV0LT5tdHU7CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWls
eSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlwYWRkcmktPnNw
aW5mb19tdHUgLT0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKElORVQ2KQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlwYWRkcmktPnNwaW5mb19t
dHUgLT0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJcGFkZHJpLT5zcGluZm9fbXR1
IC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1
bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkqb3B0
c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8pOworCQl9IGVsc2UgeworCQkJaWYg
KHN0Y2IgIT0gTlVMTCkgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBT
Q1RQX1BDQl9TVEFUVVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9wY2JpbmZvICpzcGNiOworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc3BjYiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wY2JpbmZvLCAqb3B0
c2l6ZSk7CisJCXNjdHBfZmlsbF9wY2JpbmZvKHNwY2IpOworCQkqb3B0c2l6ZSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9wY2JpbmZvKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9TVEFUVVM6CisJ
eworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0cnVjdCBzY3RwX3N0YXR1cyAqc3N0YXQ7
CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zdGF0
dXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzc3RhdC0+c3N0YXRf
YXNzb2NfaWQpOworCisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQll
cnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXNzdGF0LT5zc3RhdF9zdGF0ZSA9IHNj
dHBfbWFwX2Fzc29jX3N0YXRlKHN0Y2ItPmFzb2Muc3RhdGUpOworCQlzc3RhdC0+c3N0YXRfYXNz
b2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQlzc3RhdC0+c3N0YXRfcnduZCA9IHN0
Y2ItPmFzb2MucGVlcnNfcnduZDsKKwkJc3N0YXQtPnNzdGF0X3VuYWNrZGF0YSA9IHN0Y2ItPmFz
b2Muc2VudF9xdWV1ZV9jbnQ7CisJCS8qCisJCSAqIFdlIGNhbid0IGluY2x1ZGUgY2h1bmtzIHRo
YXQgaGF2ZSBiZWVuIHBhc3NlZCB0bworCQkgKiB0aGUgc29ja2V0IGxheWVyLiBPbmx5IHRoaW5n
cyBpbiBxdWV1ZS4KKwkJICovCisJCXNzdGF0LT5zc3RhdF9wZW5kZGF0YSA9IChzdGNiLT5hc29j
LmNudF9vbl9yZWFzbV9xdWV1ZSArCisJCQkJCSBzdGNiLT5hc29jLmNudF9vbl9hbGxfc3RyZWFt
cyk7CisKKworCQlzc3RhdC0+c3N0YXRfaW5zdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7
CisJCXNzdGF0LT5zc3RhdF9vdXRzdHJtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OworCQlz
c3RhdC0+c3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3Rj
YiwgJnN0Y2ItPmFzb2MpOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCW1lbWNweSgmc3N0YXQtPnNz
dGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCisJCSAgICAgICAmc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAorCQkgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHIgKiko
JnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkcikpLT5zYV9sZW4pOwor
I2Vsc2UKKwkJaWYgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJbWVtY3B5KCZzc3RhdC0+c3N0YXRfcHJpbWFy
eS5zcGluZm9fYWRkcmVzcywKKwkJCSAgICAgICAmc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uLT5yby5fbF9hZGRyLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KwkJfSBlbHNlIHsKKwkJCW1lbWNweSgmc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJl
c3MsCisJCQkgICAgICAgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRk
ciwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQl9CisjZW5kaWYK
KwkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkoKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKSZzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVzcyktPnNpbl9wb3J0
ID0gc3RjYi0+cnBvcnQ7CisJCS8qCisJCSAqIEFnYWluIHRoZSB1c2VyIGNhbiBnZXQgaW5mbyBm
cm9tIHNjdHBfY29uc3RhbnRzLmgKKwkJICogZm9yIHdoYXQgdGhlIHN0YXRlIG9mIHRoZSBuZXR3
b3JrIGlzLgorCQkgKi8KKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJ
Uk1FRCkgeworCQkJLyogSXQncyB1bmNvbmZpcm1lZCAqLworCQkJc3N0YXQtPnNzdGF0X3ByaW1h
cnkuc3BpbmZvX3N0YXRlID0gU0NUUF9VTkNPTkZJUk1FRDsKKwkJfSBlbHNlIGlmIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkvKiBJdCdzIGFjdGl2ZSAqLwor
CQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9BQ1RJVkU7CisJCX0g
ZWxzZSB7CisJCQkvKiBJdCdzIGluYWN0aXZlICovCisJCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5z
cGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQl9CisJCXNzdGF0LT5zc3RhdF9wcmltYXJ5
LnNwaW5mb19jd25kID0gbmV0LT5jd25kOworCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9f
c3J0dCA9IG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUOworCQlzc3RhdC0+c3N0YXRfcHJp
bWFyeS5zcGluZm9fcnRvID0gbmV0LT5SVE87CisJCXNzdGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5m
b19tdHUgPSBuZXQtPm10dTsKKwkJc3dpdGNoIChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWYgZGVmaW5lZChJTkVUKQorCQljYXNl
IEFGX0lORVQ6CisJCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fbXR1IC09IFNDVFBfTUlO
X1Y0X09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCQlj
YXNlIEFGX0lORVQ2OgorCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX210dSAtPSBTQ1RQ
X01JTl9PVkVSSEVBRDsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fbXR1
IC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKwkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2Fzc29jX2lk
ID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkq
b3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCQlicmVhazsKKwl9CisJY2Fz
ZSBTQ1RQX1JUT0lORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9ydG9pbmZvICpzcnRvOworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc3J0bywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ydG9pbmZvLCAqb3B0
c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3J0by0+c3J0b19hc3NvY19pZCk7
CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXNydG8tPnNydG9faW5pdGlhbCA9IHN0Y2ItPmFzb2MuaW5p
dGlhbF9ydG87CisJCQlzcnRvLT5zcnRvX21heCA9IHN0Y2ItPmFzb2MubWF4cnRvOworCQkJc3J0
by0+c3J0b19taW4gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoc3J0by0+c3J0b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXNydG8tPnNydG9faW5pdGlh
bCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKKwkJCQlzcnRvLT5zcnRvX21heCA9IGlucC0+
c2N0cF9lcC5zY3RwX21heHJ0bzsKKwkJCQlzcnRvLT5zcnRvX21pbiA9IGlucC0+c2N0cF9lcC5z
Y3RwX21pbnJ0bzsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9y
ID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3J0b2luZm8pOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfVElNRU9VVFM6CisJeworCQlzdHJ1Y3Qgc2N0cF90
aW1lb3V0cyAqc3RpbW87CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzdGltbywgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF90aW1lb3V0cywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0
Y2IsIHN0aW1vLT5zdGltb19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXN0aW1vLT5z
dGltb19pbml0PSBzdGNiLT5hc29jLnRpbW9pbml0OworCQkJc3RpbW8tPnN0aW1vX2RhdGE9IHN0
Y2ItPmFzb2MudGltb2RhdGE7CisJCQlzdGltby0+c3RpbW9fc2Fjaz0gc3RjYi0+YXNvYy50aW1v
c2FjazsKKwkJCXN0aW1vLT5zdGltb19zaHV0ZG93bj0gc3RjYi0+YXNvYy50aW1vc2h1dGRvd247
CisJCQlzdGltby0+c3RpbW9faGVhcnRiZWF0PSBzdGNiLT5hc29jLnRpbW9oZWFydGJlYXQ7CisJ
CQlzdGltby0+c3RpbW9fY29va2llPSBzdGNiLT5hc29jLnRpbW9jb29raWU7CisJCQlzdGltby0+
c3RpbW9fc2h1dGRvd25hY2s9IHN0Y2ItPmFzb2MudGltb3NodXRkb3duYWNrOworCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfdGltZW91
dHMpOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNTT0NJTkZPOgorCXsKKwkJc3RydWN0IHNjdHBf
YXNzb2NwYXJhbXMgKnNhc29jOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fzb2MsIG9wdHZh
bCwgc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBzYXNvYy0+c2Fzb2NfYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlz
YXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBUSUNLU19UT19NU0VDKHN0Y2ItPmFzb2MuY29va2ll
X2xpZmUpOworCQkJc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQgPSBzdGNiLT5hc29jLm1heF9zZW5k
X3RpbWVzOworCQkJc2Fzb2MtPnNhc29jX251bWJlcl9wZWVyX2Rlc3RpbmF0aW9ucyA9IHN0Y2It
PmFzb2MubnVtbmV0czsKKwkJCXNhc29jLT5zYXNvY19wZWVyX3J3bmQgPSBzdGNiLT5hc29jLnBl
ZXJzX3J3bmQ7CisJCQlzYXNvYy0+c2Fzb2NfbG9jYWxfcnduZCA9IHN0Y2ItPmFzb2MubXlfcndu
ZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoc2Fzb2MtPnNh
c29jX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NL
KGlucCk7CisJCQkJc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlID0gVElDS1NfVE9fTVNFQyhpbnAt
PnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZlKTsKKwkJCQlzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCA9
IGlucC0+c2N0cF9lcC5tYXhfc2VuZF90aW1lczsKKwkJCQlzYXNvYy0+c2Fzb2NfbnVtYmVyX3Bl
ZXJfZGVzdGluYXRpb25zID0gMDsKKwkJCQlzYXNvYy0+c2Fzb2NfcGVlcl9yd25kID0gMDsKKwkJ
CQlzYXNvYy0+c2Fzb2NfbG9jYWxfcnduZCA9IHNic3BhY2UoJmlucC0+c2N0cF9zb2NrZXQtPnNv
X3Jjdik7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAw
KSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyk7CisJCX0K
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUZBVUxUX1NFTkRfUEFSQU06CisJeworCQlzdHJ1
Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzX2luZm87CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzX2lu
Zm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfc25kcmN2aW5mbywgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2luZm9fYXNzb2NfaWQpOworCisJCWlmIChzdGNi
KSB7CisJCQltZW1jcHkoc19pbmZvLCAmc3RjYi0+YXNvYy5kZWZfc2VuZCwgc2l6ZW9mKHN0Y2It
PmFzb2MuZGVmX3NlbmQpKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJ
CSAgICAoc19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJ
CQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCW1lbWNweShzX2luZm8sICZpbnAtPmRlZl9zZW5k
LCBzaXplb2YoaW5wLT5kZWZfc2VuZCkpOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJ
fQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
c25kcmN2aW5mbyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9JTklUTVNHOgorCXsK
KwkJc3RydWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
aW5pdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9pbml0bXNnLCAqb3B0c2l6ZSk7CisJCVNDVFBfSU5Q
X1JMT0NLKGlucCk7CisJCXNpbml0LT5zaW5pdF9udW1fb3N0cmVhbXMgPSBpbnAtPnNjdHBfZXAu
cHJlX29wZW5fc3RyZWFtX2NvdW50OworCQlzaW5pdC0+c2luaXRfbWF4X2luc3RyZWFtcyA9IGlu
cC0+c2N0cF9lcC5tYXhfb3Blbl9zdHJlYW1zX2ludG9tZTsKKwkJc2luaXQtPnNpbml0X21heF9h
dHRlbXB0cyA9IGlucC0+c2N0cF9lcC5tYXhfaW5pdF90aW1lczsKKwkJc2luaXQtPnNpbml0X21h
eF9pbml0X3RpbWVvID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfaW5pdF9ydG9fbWF4OworCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRt
c2cpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BSSU1BUllfQUREUjoKKwkJLyogd2UgYWxs
b3cgYSAiZ2V0IiBvcGVyYXRpb24gb24gdGhpcyAqLworCXsKKwkJc3RydWN0IHNjdHBfc2V0cHJp
bSAqc3NwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3NwLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3NldHByaW0sICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzc3AtPnNz
cF9hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXVuaW9uIHNjdHBfc29ja3N0b3JlICph
ZGRyOworCisJCQlhZGRyID0gJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xf
YWRkcjsKKwkJCXN3aXRjaCAoYWRkci0+c2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJ
Y2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBFRF9WNCkpIHsKKwkJCQkJaW42X3Npbl8yX3Y0
bWFwc2luNigmYWRkci0+c2luLAorCQkJCQkgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopJnNzcC0+c3NwX2FkZHIpOworCQkJCX0gZWxzZSB7CisJCQkJCW1lbWNweSgm
c3NwLT5zc3BfYWRkciwgJmFkZHItPnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwor
CQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+c2luLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCW1lbWNweSgmc3NwLT5zc3BfYWRkciwg
JmFkZHItPnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQkJYnJlYWs7Cisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJ
bWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+c2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOwor
CQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc2V0cHJpbSk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ITUFDX0lERU5UOgorCXsK
KwkJc3RydWN0IHNjdHBfaG1hY2FsZ28gKnNobWFjOworCQlzY3RwX2htYWNsaXN0X3QgKmhtYWNs
aXN0OworCQl1aW50MzJfdCBzaXplOworCQlpbnQgaTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2htYWNhbGdvLCAqb3B0c2l6ZSk7CisKKwkJU0NU
UF9JTlBfUkxPQ0soaW5wKTsKKwkJaG1hY2xpc3QgPSBpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3M7
CisJCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7CisJCQkvKiBubyBITUFDcyB0byByZXR1cm4gKi8K
KwkJCSpvcHRzaXplID0gc2l6ZW9mKCpzaG1hYyk7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQlicmVhazsKKwkJfQorCQkvKiBpcyB0aGVyZSByb29tIGZvciBhbGwgb2YgdGhlIGhtYWMg
aWRzPyAqLworCQlzaXplID0gc2l6ZW9mKCpzaG1hYykgKyAoaG1hY2xpc3QtPm51bV9hbGdvICoK
KwkJCQkJIHNpemVvZihzaG1hYy0+c2htYWNfaWRlbnRzWzBdKSk7CisJCWlmICgoc2l6ZV90KSgq
b3B0c2l6ZSkgPCBzaXplKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBjb3B5IGluIHRo
ZSBsaXN0ICovCisJCXNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRzID0gaG1hY2xpc3QtPm51
bV9hbGdvOworCQlmb3IgKGkgPSAwOyBpIDwgaG1hY2xpc3QtPm51bV9hbGdvOyBpKyspIHsKKwkJ
CXNobWFjLT5zaG1hY19pZGVudHNbaV0gPSBobWFjbGlzdC0+aG1hY1tpXTsKKwkJfQorCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZTsKKwkJYnJlYWs7CisJfQorCWNh
c2UgU0NUUF9BVVRIX0FDVElWRV9LRVk6CisJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgKnNj
YWN0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2NhY3QsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXV0aGtleWlkLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NhY3Qt
PnNjYWN0X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJLyogZ2V0IHRoZSBhY3RpdmUg
a2V5IG9uIHRoZSBhc3NvYyAqLworCQkJc2NhY3QtPnNjYWN0X2tleW51bWJlciA9IHN0Y2ItPmFz
b2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgIChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mp
KSB7CisJCQkJLyogZ2V0IHRoZSBlbmRwb2ludCBhY3RpdmUga2V5ICovCisJCQkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKKwkJCQlzY2FjdC0+c2NhY3Rfa2V5bnVtYmVyID0gaW5wLT5zY3RwX2VwLmRl
ZmF1bHRfa2V5aWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQpOwor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1M6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICpzYWM7CisJCXNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xp
c3QgPSBOVUxMOworCQlzaXplX3Qgc2l6ZSA9IDA7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
YWMsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNodW5rcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHNhYy0+Z2F1dGhfYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7
CisJCQkvKiBnZXQgb2ZmIHRoZSBhc3NvYyAqLworCQkJY2hrbGlzdCA9IHN0Y2ItPmFzb2MubG9j
YWxfYXV0aF9jaHVua3M7CisJCQkvKiBpcyB0aGVyZSBlbm91Z2ggc3BhY2U/ICovCisJCQlzaXpl
ID0gc2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUoY2hrbGlzdCk7CisJCQlpZiAoKm9wdHNpemUg
PCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkpIHsKKwkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQl9IGVsc2UgeworCQkJCS8qIGNvcHkgaW4gdGhl
IGNodW5rcyAqLworCQkJCSh2b2lkKXNjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNoa2xpc3Qs
IHNhYy0+Z2F1dGhfY2h1bmtzKTsKKwkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAo
dWludDMyX3Qpc2l6ZTsKKwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1
bmtzKSArIHNpemU7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7
CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJ
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJ
CQkgICAgKHNhYy0+Z2F1dGhfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJ
LyogZ2V0IG9mZiB0aGUgZW5kcG9pbnQgKi8KKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJ
CWNoa2xpc3QgPSBpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3M7CisJCQkJLyogaXMgdGhl
cmUgZW5vdWdoIHNwYWNlPyAqLworCQkJCXNpemUgPSBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6
ZShjaGtsaXN0KTsKKwkJCQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhj
aHVua3MpICsgc2l6ZSkpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsK
KwkJCQl9IGVsc2UgeworCQkJCQkvKiBjb3B5IGluIHRoZSBjaHVua3MgKi8KKwkJCQkJKHZvaWQp
c2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hrbGlzdCwgc2FjLT5nYXV0aF9jaHVua3MpOwor
CQkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWludDMyX3Qpc2l6ZTsKKwkJCQkJ
Km9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykgKyBzaXplOworCQkJCX0K
KwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7
CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NU
UF9QRUVSX0FVVEhfQ0hVTktTOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0aGNodW5rcyAqc2FjOwor
CQlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0ID0gTlVMTDsKKwkJc2l6ZV90IHNpemUgPSAw
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2FjLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhj
aHVua3MsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWMtPmdhdXRo
X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJLyogZ2V0IG9mZiB0aGUgYXNzb2MgKi8K
KwkJCWNoa2xpc3QgPSBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3M7CisJCQkvKiBpcyB0aGVy
ZSBlbm91Z2ggc3BhY2U/ICovCisJCQlzaXplID0gc2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUo
Y2hrbGlzdCk7CisJCQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVu
a3MpICsgc2l6ZSkpIHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQl9
IGVsc2UgeworCQkJCS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLworCQkJCSh2b2lkKXNjdHBfc2Vy
aWFsaXplX2F1dGhfY2h1bmtzKGNoa2xpc3QsIHNhYy0+Z2F1dGhfY2h1bmtzKTsKKwkJCQlzYWMt
PmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWludDMyX3Qpc2l6ZTsKKwkJCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7CisJCQl9CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVy
cm9yID0gRU5PRU5UOworCQl9CisJCWJyZWFrOworCX0KKyNpZiBkZWZpbmVkKEhBVkVfU0NUUF9Q
RUVMT0ZGX1NPQ0tPUFQpCisJY2FzZSBTQ1RQX1BFRUxPRkY6CisJeworCQlzdHJ1Y3Qgc2N0cF9w
ZWVsb2ZmX29wdCAqcGVlbG9mZjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBlZWxvZmYsIG9w
dHZhbCwgc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQsICpvcHRzaXplKTsKKwkJLyogZG8gdGhlIHBl
ZWxvZmYgKi8KKwkJZXJyb3IgPSBzY3RwX3BlZWxvZmZfb3B0aW9uKHAsIHBlZWxvZmYpOworCQlp
ZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGVlbG9m
Zl9vcHQpOworCQl9CisJfQorCWJyZWFrOworI2VuZGlmIC8qIEhBVkVfU0NUUF9QRUVMT0ZGX1NP
Q0tPUFQgKi8KKwljYXNlIFNDVFBfRVZFTlQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9ldmVudCAqZXZl
bnQ7CisJCXVpbnQzMl90IGV2ZW50X3R5cGU7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChldmVu
dCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVudCwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIGV2ZW50LT5zZV9hc3NvY19pZCk7CisKKwkJc3dpdGNoIChldmVudC0+c2Vf
dHlwZSkgeworCQljYXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBf
UENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BFRVJfQURE
Ul9DSEFOR0U6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVDsK
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfUkVNT1RFX0VSUk9SOgorCQkJZXZlbnRfdHlwZSA9IFND
VFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TRU5EX0ZB
SUxFRDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UOwor
CQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBT
Q1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9B
REFQVEFUSU9OX0lORElDQVRJT046CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQURB
UFRBVElPTkVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZF
TlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUERBUElFVk5UOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQ
X1BDQl9GTEFHU19BVVRIRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RSRUFNX1JFU0VU
X0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQ7
CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6CisJCQlldmVudF90eXBl
ID0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfTk9USUZJ
Q0FUSU9OU19TVE9QUEVEX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IDA7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UU1VQ
KTsKKwkJCWVycm9yID0gRU5PVFNVUDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQVNTT0NfUkVT
RVRfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5U
OworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOgorCQkJZXZlbnRf
dHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFH
U19SRUNWTlNFTkRGQUlMRVZOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZXZlbnRfdHlw
ZSA9IDA7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJ
fQorCQlpZiAoZXZlbnRfdHlwZSA+IDApIHsKKwkJCWlmIChzdGNiKSB7CisJCQkJZXZlbnQtPnNl
X29uID0gc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBldmVudF90eXBlKTsKKwkJ
CX0gZWxzZSB7CisJCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAorCQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkgfHwKKwkJCQkgICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykpIHsKKwkJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQkJZXZlbnQtPnNlX29uID0gc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgZXZlbnRfdHlwZSk7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9ldmVudCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9S
RUNWUkNWSU5GTzoKKwl7CisJCWludCBvbm9mZjsKKworCQlpZiAoKm9wdHNpemUgPCBzaXplb2Yo
aW50KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2Ugewor
CQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCW9ub2ZmID0gc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkvKiByZXR1cm4gdGhlIG9wdGlvbiB2YWx1
ZSAqLworCQkJKihpbnQgKilvcHR2YWwgPSBvbm9mZjsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKGlu
dCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNWTlhUSU5GTzoKKwl7CisJCWlu
dCBvbm9mZjsKKworCQlpZiAoKm9wdHNpemUgPCBzaXplb2YoaW50KSkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKKwkJCW9ub2ZmID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVD
Vk5YVElORk8pOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQl9CisJCWlmIChlcnJvciA9
PSAwKSB7CisJCQkvKiByZXR1cm4gdGhlIG9wdGlvbiB2YWx1ZSAqLworCQkJKihpbnQgKilvcHR2
YWwgPSBvbm9mZjsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKGludCk7CisJCX0KKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9ERUZBVUxUX1NORElORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9zbmRpbmZv
ICppbmZvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9zbmRpbmZvLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+
c25kX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaW5mby0+c25kX3NpZCA9IHN0Y2It
PmFzb2MuZGVmX3NlbmQuc2luZm9fc3RyZWFtOworCQkJaW5mby0+c25kX2ZsYWdzID0gc3RjYi0+
YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFnczsKKwkJCWluZm8tPnNuZF9mbGFncyAmPSAweGZmZjA7
CisJCQlpbmZvLT5zbmRfcHBpZCA9IHN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fcHBpZDsKKwkJ
CWluZm8tPnNuZF9jb250ZXh0ID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19jb250ZXh0Owor
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChpbmZvLT5zbmRfYXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
KwkJCQlpbmZvLT5zbmRfc2lkID0gaW5wLT5kZWZfc2VuZC5zaW5mb19zdHJlYW07CisJCQkJaW5m
by0+c25kX2ZsYWdzID0gaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFnczsKKwkJCQlpbmZvLT5zbmRf
ZmxhZ3MgJj0gMHhmZmYwOworCQkJCWluZm8tPnNuZF9wcGlkID0gaW5wLT5kZWZfc2VuZC5zaW5m
b19wcGlkOworCQkJCWluZm8tPnNuZF9jb250ZXh0ID0gaW5wLT5kZWZfc2VuZC5zaW5mb19jb250
ZXh0OworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkg
eworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyk7CisJCX0KKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9ERUZBVUxUX1BSSU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX2Rl
ZmF1bHRfcHJpbmZvICppbmZvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaW5mbywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIGluZm8tPnByX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaW5m
by0+cHJfcG9saWN5ID0gUFJfU0NUUF9QT0xJQ1koc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19m
bGFncyk7CisJCQlpbmZvLT5wcl92YWx1ZSA9IHN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fdGlt
ZXRvbGl2ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoaW5m
by0+cHJfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKKwkJCQlpbmZvLT5wcl9wb2xpY3kgPSBQUl9TQ1RQX1BPTElDWShpbnAtPmRlZl9z
ZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlpbmZvLT5wcl92YWx1ZSA9IGlucC0+ZGVmX3NlbmQuc2lu
Zm9fdGltZXRvbGl2ZTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVy
cm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RlZmF1bHRfcHJp
bmZvKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9USExEUzoKKwl7
CisJCXN0cnVjdCBzY3RwX3BhZGRydGhsZHMgKnRobGRzOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmlu
ZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKHRobGRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3BhZGRydGhsZHMs
ICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCB0aGxkcy0+c3B0X2Fzc29j
X2lkKTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJaWYgKHRobGRz
LT5zcHRfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZ0aGxkcy0+
c3B0X2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRk
cikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRyID0g
KHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJCX0KKwkJfSBlbHNlIHsK
KwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJfQor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOwor
I2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNi
LCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0
IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFy
Z3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsK
KwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRp
b25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09
IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJfQorCQl9CisJCWlmICgo
c3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYgSU5FVAorCQkJaWYgKGFk
ZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47
CisKKwkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRyLT5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJ
CQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlONl9JU19B
RERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCWVycm9yID0gRUlOVkFM
OworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFk
ZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsKKwkJCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJeworCQkJCWVycm9yID0gRUFG
Tk9TVVBQT1JUOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlpZiAobmV0
ICE9IE5VTEwpIHsKKwkJCQl0aGxkcy0+c3B0X3BhdGhtYXhyeHQgPSBuZXQtPmZhaWx1cmVfdGhy
ZXNob2xkOworCQkJCXRobGRzLT5zcHRfcGF0aHBmdGhsZCA9IG5ldC0+cGZfdGhyZXNob2xkOwor
CQkJCXRobGRzLT5zcHRfcGF0aGNwdGhsZCA9IDB4ZmZmZjsKKwkJCX0gZWxzZSB7CisJCQkJdGhs
ZHMtPnNwdF9wYXRobWF4cnh0ID0gc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJdGhs
ZHMtPnNwdF9wYXRocGZ0aGxkID0gc3RjYi0+YXNvYy5kZWZfbmV0X3BmX3RocmVzaG9sZDsKKwkJ
CQl0aGxkcy0+c3B0X3BhdGhjcHRobGQgPSAweGZmZmY7CisJCQl9CisJCQl0aGxkcy0+c3B0X2Fz
c29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAodGhsZHMtPnNwdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpIHsKKwkJCQkvKiBVc2UgZW5kcG9pbnQgZGVmYXVsdHMgKi8KKwkJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQkJCXRobGRzLT5zcHRfcGF0aG1heHJ4dCA9IGlucC0+c2N0cF9lcC5kZWZf
bmV0X2ZhaWx1cmU7CisJCQkJdGhsZHMtPnNwdF9wYXRocGZ0aGxkID0gaW5wLT5zY3RwX2VwLmRl
Zl9uZXRfcGZfdGhyZXNob2xkOworCQkJCXRobGRzLT5zcHRfcGF0aGNwdGhsZCA9IDB4ZmZmZjsK
KwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7
CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJ
CSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRydGhsZHMpOworCQl9CisJCWJyZWFr
OworCX0KKwljYXNlIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVDoKKwl7CisJCXN0cnVjdCBz
Y3RwX3VkcGVuY2FwcyAqZW5jYXBzOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0cnVj
dCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJ
CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGVuY2Fwcywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMsICpvcHRzaXplKTsK
KwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBlbmNhcHMtPnN1ZV9hc3NvY19pZCk7CisKKyNp
ZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmIChlbmNhcHMtPnN1ZV9hZGRy
ZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmVuY2Fwcy0+c3VlX2FkZHJl
c3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJ
CQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRyID0gKHN0cnVjdCBz
b2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAoc3RydWN0IHNv
Y2thZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworCQl9CisjZWxzZQor
CQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworI2VuZGlm
CisJCWlmIChzdGNiKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0g
ZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlv
bl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3Rj
YiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9U
IGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlu
cCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJ
U0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKwkJfQorCQlpZiAoKHN0Y2IgIT0gTlVMTCkg
JiYgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElORVQKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkg
PT0gQUZfSU5FVCkgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCQkJc2luID0g
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRy
ICE9IElOQUREUl9BTlkpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVs
c2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQkJaWYgKCFJTjZfSVNfQUREUl9VTlNQRUNJRklF
RCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25u
OworCisJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJCWlmIChz
Y29ubi0+c2Nvbm5fYWRkciAhPSBOVUxMKSB7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJ
fQorCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJaWYgKG5ldCkgeworCQkJCWVuY2Fw
cy0+c3VlX3BvcnQgPSBuZXQtPnBvcnQ7CisJCQl9IGVsc2UgeworCQkJCWVuY2Fwcy0+c3VlX3Bv
cnQgPSBzdGNiLT5hc29jLnBvcnQ7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpIHx8CisJCQkgICAgKGVuY2Fwcy0+c3VlX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJZW5jYXBzLT5zdWVfcG9ydCA9IGlu
cC0+c2N0cF9lcC5wb3J0OworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAo
ZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBz
KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0VDTl9TVVBQT1JURUQ6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5h
c3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZDsKKwkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0g
aW5wLT5lY25fc3VwcG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlp
ZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUFJfU1VQUE9SVEVEOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlh
di0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQ7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZV
VFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192
YWx1ZSA9IGlucC0+cHJzY3RwX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9
CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0FVVEhfU1VQ
UE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChz
dGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkOwor
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQg
PT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlh
di0+YXNzb2NfdmFsdWUgPSBpbnAtPmF1dGhfc3VwcG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yo
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
QVNDT05GX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
LCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsK
KworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5hc2NvbmZf
c3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChh
di0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmFzY29uZl9zdXBwb3J0ZWQ7CisJCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0
c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9SRUNPTkZJR19TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2Is
IGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0
Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJ
CQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnJlY29u
ZmlnX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVy
cm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
KTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX05SU0FDS19TVVBQT1JURUQ6CisJewor
CQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChh
diwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2
LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MubnJzYWNrX3N1cHBvcnRlZDsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3Zh
bHVlID0gaW5wLT5ucnNhY2tfc3VwcG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0K
KwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUEtURFJPUF9T
VVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYg
KHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0
ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwor
CQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQ7CisJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9y
ID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNh
c2UgU0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VUOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFs
dWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+
YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSAodWludDMy
X3Qpc3RjYi0+YXNvYy5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT
T0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSAo
dWludDMyX3QpaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yo
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
UFJfU1RSRUFNX1NUQVRVUzoKKwl7CisJCXN0cnVjdCBzY3RwX3Byc3RhdHVzICpzcHJzdGF0Owor
CQl1aW50MTZfdCBzaWQ7CisJCXVpbnQxNl90IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHNwcnN0YXQsIG9wdHZhbCwgc3RydWN0IHNjdHBfcHJzdGF0dXMsICpvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcHJzdGF0LT5zcHJzdGF0X2Fzc29jX2lkKTsKKwor
CQlzaWQgPSBzcHJzdGF0LT5zcHJzdGF0X3NpZDsKKwkJcG9saWN5ID0gc3Byc3RhdC0+c3Byc3Rh
dF9wb2xpY3k7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJaWYgKChz
dGNiICE9IE5VTEwpICYmCisJCSAgICAoc2lkIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpICYm
CisJCSAgICAocG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSAmJgorCQkgICAgKChwb2xpY3kg
PD0gU0NUUF9QUl9TQ1RQX01BWCkgfHwKKwkJICAgICAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9B
TEwpKSkgeworCQkJaWYgKHBvbGljeSA9PSBTQ1RQX1BSX1NDVFBfQUxMKSB7CisJCQkJc3Byc3Rh
dC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJh
bmRvbmVkX3Vuc2VudFswXTsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF9zZW50ID0g
c3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbMF07CisJCQl9IGVsc2Ugewor
CQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudCA9IHN0Y2ItPmFzb2Muc3RybW91
dFtzaWRdLmFiYW5kb25lZF91bnNlbnRbcG9saWN5XTsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2Fi
YW5kb25lZF9zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbcG9s
aWN5XTsKKwkJCX0KKyNlbHNlCisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgKHNpZCA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSAmJgorCQkgICAgKHBvbGljeSA9PSBTQ1RQX1BSX1ND
VFBfQUxMKSkgeworCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+
YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFswXTsKKwkJCXNwcnN0YXQtPnNwcnN0
YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfc2Vu
dFswXTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlO
VkFMOworCQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0
IHNjdHBfcHJzdGF0dXMpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUFJfQVNTT0Nf
U1RBVFVTOgorCXsKKwkJc3RydWN0IHNjdHBfcHJzdGF0dXMgKnNwcnN0YXQ7CisJCXVpbnQxNl90
IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNwcnN0YXQsIG9wdHZhbCwgc3RydWN0
IHNjdHBfcHJzdGF0dXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBz
cHJzdGF0LT5zcHJzdGF0X2Fzc29jX2lkKTsKKworCQlwb2xpY3kgPSBzcHJzdGF0LT5zcHJzdGF0
X3BvbGljeTsKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmCisJCSAgICAocG9saWN5ICE9IFNDVFBf
UFJfU0NUUF9OT05FKSAmJgorCQkgICAgKChwb2xpY3kgPD0gU0NUUF9QUl9TQ1RQX01BWCkgfHwK
KwkJICAgICAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpKSkgeworCQkJaWYgKHBvbGljeSA9
PSBTQ1RQX1BSX1NDVFBfQUxMKSB7CisJCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5z
ZW50ID0gc3RjYi0+YXNvYy5hYmFuZG9uZWRfdW5zZW50WzBdOworCQkJCXNwcnN0YXQtPnNwcnN0
YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLmFiYW5kb25lZF9zZW50WzBdOworCQkJfSBl
bHNlIHsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29j
LmFiYW5kb25lZF91bnNlbnRbcG9saWN5XTsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25l
ZF9zZW50ID0gc3RjYi0+YXNvYy5hYmFuZG9uZWRfc2VudFtwb2xpY3ldOworCQkJfQorCQl9IGVs
c2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJCWlmIChzdGNi
ICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCQlpZiAoZXJyb3Ig
PT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcHJzdGF0dXMpOworCQl9
CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYX0NXTkQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0
Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9
IHN0Y2ItPmFzb2MubWF4X2N3bmQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxz
ZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8
CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+bWF4X2N3bmQ7CisJ
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkq
b3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7
CisJfQorCWRlZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJZXJyb3IgPSBFTk9QUk9UT09Q
VDsKKwkJYnJlYWs7CisJfSAvKiBlbmQgc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpICovCisJaWYg
KGVycm9yKSB7CisJCSpvcHRzaXplID0gMDsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNp
ZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CisjZWxz
ZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwX3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCisJICAgIHZvaWQgKnApCit7
CisJaW50IGVycm9yLCBzZXRfb3B0OworCXVpbnQzMl90ICptb3B0OworCXN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiA9IE5VTEw7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9IE5VTEw7CisJdWludDMy
X3QgdnJmX2lkOworCisJaWYgKG9wdHZhbCA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJvcHR2
YWwgaXMgTlVMTFxuIik7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJ
aW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwp
IHsKKwkJU0NUUF9QUklOVEYoImlucCBpcyBOVUxMP1xuIik7CisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJl
dHVybiAoRUlOVkFMKTsKKwl9CisJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworCisJZXJyb3Ig
PSAwOworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgU0NUUF9OT0RFTEFZOgorCWNhc2UgU0NU
UF9BVVRPQ0xPU0U6CisJY2FzZSBTQ1RQX0FVVE9fQVNDT05GOgorCWNhc2UgU0NUUF9FWFBMSUNJ
VF9FT1I6CisJY2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgorCWNhc2UgU0NUUF9VU0VfRVhU
X1JDVklORk86CisJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUjoKKwkJLyogY29weSBp
biB0aGUgb3B0aW9uIHZhbHVlICovCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobW9wdCwgb3B0dmFs
LCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCXNldF9vcHQgPSAwOworCQlpZiAoZXJyb3IpCisJCQli
cmVhazsKKwkJc3dpdGNoIChvcHRuYW1lKSB7CisJCWNhc2UgU0NUUF9ESVNBQkxFX0ZSQUdNRU5U
UzoKKwkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19OT19GUkFHTUVOVDsKKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfQVVUT19BU0NPTkY6CisJCQkvKgorCQkJICogTk9URTogd2UgZG9uJ3QgcmVh
bGx5IHN1cHBvcnQgdGhpcyBmbGFnCisJCQkgKi8KKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkJCS8qIG9ubHkgdmFsaWQgZm9yIGJvdW5kIGFs
bCBzb2NrZXRzICovCisJCQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2NvbmYp
ID09IDApICYmCisJCQkJICAgICgqbW9wdCAhPSAwKSkgeworCQkJCQkvKiBmb3JiaWRkZW4gYnkg
YWRtaW4gKi8KKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRVBFUk0pOworCQkJCQlyZXR1cm4gKEVQRVJNKTsKKwkJCQl9CisJ
CQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05GOworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlIFNDVFBfRVhQTElDSVRfRU9SOgorCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0VYUExJ
Q0lUX0VPUjsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfVVNFX0VYVF9SQ1ZJTkZPOgorCQkJc2V0
X29wdCA9IFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPOworCQkJYnJlYWs7CisJCWNhc2UgU0NU
UF9JX1dBTlRfTUFQUEVEX1Y0X0FERFI6CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfTkVFRFNf
TUFQUEVEX1Y0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlO
VkFMKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfTk9ERUxBWToKKwkJCXNldF9vcHQg
PSBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BVVRPQ0xP
U0U6CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCQlzZXRfb3B0
ID0gU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFOworCQkJLyoKKwkJCSAqIFRoZSB2YWx1ZSBpcyBp
biB0aWNrcy4gTm90ZSB0aGlzIGRvZXMgbm90IGVmZmVjdAorCQkJICogb2xkIGFzc29jaWF0aW9u
cywgb25seSBuZXcgb25lcy4KKwkJCSAqLworCQkJaW5wLT5zY3RwX2VwLmF1dG9fY2xvc2VfdGlt
ZSA9IFNFQ19UT19USUNLUygqbW9wdCk7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOworCQlpZiAoKm1vcHQgIT0gMCkgeworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgc2V0
X29wdCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgc2V0X29wdCk7CisJ
CX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVVU0Vf
UE9SVDoKKwl7CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobW9wdCwgb3B0dmFsLCB1aW50MzJfdCwg
b3B0c2l6ZSk7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VO
RCkgID09IDApIHsKKwkJCS8qIENhbid0IHNldCBpdCBhZnRlciB3ZSBhcmUgYm91bmQgKi8KKwkJ
CWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSkgeworCQkJLyogQ2FuJ3QgZG8gdGhpcyBmb3IgYSAx
LW0gc29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChv
cHR2YWwpCisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0Up
OworCQllbHNlCisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJF
VVNFKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UOgor
CXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9w
dHZhbCwgdWludDMyX3QsIG9wdHNpemUpOworCQlpZiAoKnZhbHVlID4gU0NUUF9TQl9MSU1JVF9S
Q1Yoc28pKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsK
KwkJfQorCQlpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQgPSAqdmFsdWU7CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToKKwkJLyogbm90IHlldCB1bnRpbCB3
ZSByZS13cml0ZSBzY3RwX3JlY3Ztc2coKSAqLworCXsKKwkJdWludDMyX3QgKmxldmVsOworCisJ
CVNDVFBfQ0hFQ0tfQU5EX0NBU1QobGV2ZWwsIG9wdHZhbCwgdWludDMyX3QsIG9wdHNpemUpOwor
CQlpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8yKSB7CisJCQlzY3RwX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOworCQkJc2N0cF9mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisJCX0gZWxzZSBpZiAoKmxl
dmVsID09IFNDVFBfRlJBR19MRVZFTF8xKSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFND
VFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOworCQl9IGVsc2UgaWYgKCpsZXZlbCA9PSBT
Q1RQX0ZSQUdfTEVWRUxfMCkgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZM
QUdTX0ZSQUdfSU5URVJMRUFWRSk7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisKKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0lOVEVSTEVB
VklOR19TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwg
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwor
CQlpZiAoc3RjYikgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NU
UF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoYXYt
PmFzc29jX3ZhbHVlID09IDApIHsKKwkJCQkJaW5wLT5pZGF0YV9zdXBwb3J0ZWQgPSAwOworCQkJ
CX0gZWxzZSB7CisJCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfRlJBR19JTlRFUkxFQVZFKSkgICYmCisJCQkJCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykpKSB7CisJCQkJCQlpbnAtPmlkYXRh
X3N1cHBvcnRlZCA9IDE7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBNdXN0IGhhdmUgRnJhZyBp
bnRlcmxlYXZlIGFuZCBzdHJlYW0gaW50ZXJsZWF2ZSBvbiAqLworCQkJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQl9CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxP
Q0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0NNVF9PTl9PRkY6CisJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikpIHsKKwkJCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICphdjsKKworCQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID4g
U0NUUF9DTVRfTUFYKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lk
KTsKKwkJCWlmIChzdGNiKSB7CisJCQkJc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPSBhdi0+
YXNzb2NfdmFsdWU7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfSBlbHNlIHsKKwkJ
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJ
CSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJCSAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQkJCQlpbnAtPnNjdHBfY210X29uX29mZiA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCQkJCX0KKwkJCQlpZiAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0NVUlJFTlRfQVNTT0MpIHx8CisJCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNT
T0MpKSB7CisJCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJCUxJU1RfRk9SRUFDSChzdGNi
LCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQkJCQkJc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPSBhdi0+YXNzb2Nf
dmFsdWU7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1BST1RP
T1BUKTsKKwkJCWVycm9yID0gRU5PUFJPVE9PUFQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1BMVUdHQUJMRV9DQzoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKwkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwg
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlpZiAoKGF2LT5hc3NvY192YWx1
ZSAhPSBTQ1RQX0NDX1JGQzI1ODEpICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBf
Q0NfSFNUQ1ApICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfQ0NfSFRDUCkgJiYK
KwkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9DQ19SVENDKSkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJc3RjYi0+YXNvYy5j
Y19mdW5jdGlvbnMgPSBzY3RwX2NjX2Z1bmN0aW9uc1thdi0+YXNzb2NfdmFsdWVdOworCQkJc3Rj
Yi0+YXNvYy5jb25nZXN0aW9uX2NvbnRyb2xfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOworCQkJ
aWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0gIT0g
TlVMTCkgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25l
eHQpIHsKKwkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19w
YXJhbShzdGNiLCBuZXQpOworCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAor
CQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAuc2N0cF9kZWZhdWx0X2NjX21vZHVsZSA9IGF2
LT5hc3NvY192YWx1ZTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAo
KGF2LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJ
CUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7
CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25z
ID0gc2N0cF9jY19mdW5jdGlvbnNbYXYtPmFzc29jX3ZhbHVlXTsKKwkJCQkJc3RjYi0+YXNvYy5j
b25nZXN0aW9uX2NvbnRyb2xfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOworCQkJCQlpZiAoc3Rj
Yi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSAhPSBOVUxMKSB7
CisJCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCQkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJh
bShzdGNiLCBuZXQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFr
OworCX0KKwljYXNlIFNDVFBfQ0NfT1BUSU9OOgorCXsKKwkJc3RydWN0IHNjdHBfY2Nfb3B0aW9u
ICpjY19vcHQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChjY19vcHQsIG9wdHZhbCwgc3RydWN0
IHNjdHBfY2Nfb3B0aW9uLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBj
Y19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCWlm
IChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHsKKwkJ
CQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3Rw
X2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikg
eworCQkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlv
bikoc3RjYiwgMSwgY2Nfb3B0KTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5j
dGlvbnMuc2N0cF9jd25kX3NvY2tldF9vcHRpb24gPT0gTlVMTCkgeworCQkJCWVycm9yID0gRU5P
VFNVUDsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSAoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25z
LnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdGNiLCAxLAorCQkJCQkJCQkJCQkgICBjY19vcHQp
OworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCWJyZWFrOworCX0KKwlj
YXNlIFNDVFBfUExVR0dBQkxFX1NTOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUsIG9wdHNpemUpOworCQlpZiAoKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX0RFRkFV
TFQpICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfUk9VTkRfUk9CSU4pICYm
CisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfUk9VTkRfUk9CSU5fUEFDS0VUKSAm
JgorCQkgICAgKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX1BSSU9SSVRZKSAmJgorCQkgICAg
KGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgpICYmCisJCSAgICAoYXYt
PmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfRklSU1RfQ09NRSkpIHsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZnVu
Y3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2ItPmFzb2MsIDEsIDEpOworCQkJc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+YXNzb2NfdmFsdWVdOwor
CQkJc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7
CisJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgJnN0Y2ItPmFz
b2MsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+
YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+
c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOworCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBf
Q1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZp
bnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19jbGVhcihzdGNiLCAm
c3RjYi0+YXNvYywgMSwgMSk7CisJCQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zID0gc2N0cF9z
c19mdW5jdGlvbnNbYXYtPmFzc29jX3ZhbHVlXTsKKwkJCQkJc3RjYi0+YXNvYy5zdHJlYW1fc2No
ZWR1bGluZ19tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCXN0Y2ItPmFzb2Muc3NfZnVu
Y3Rpb25zLnNjdHBfc3NfaW5pdChzdGNiLCAmc3RjYi0+YXNvYywgMSk7CisJCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU1NfVkFMVUU6CisJeworCQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwg
c3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJaWYgKChhdi0+c3RyZWFt
X2lkID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB8fAorCQkJICAgIChzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFz
b2Muc3RybW91dFthdi0+c3RyZWFtX2lkXSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXYtPnN0cmVhbV92YWx1ZSkgPCAwKSkgeworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCX0gZWxzZSB7CisJCQlpZiAoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NP
QykgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZp
bnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCQkJaWYgKGF2LT5zdHJlYW1faWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkg
eworCQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19zZXRfdmFsdWUoc3RjYiwK
KwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGNiLT5h
c29jLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0
Y2ItPmFzb2Muc3RybW91dFthdi0+c3RyZWFtX2lkXSwKKwkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF2LT5zdHJlYW1fdmFsdWUpOworCQkJCQl9CisJCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJfSBlbHNlIHsKKwkJCQkvKiBDYW4ndCBzZXQgc3RyZWFtIHZhbHVlIHdpdGhvdXQgYXNz
b2NpYXRpb24gKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQor
CQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQ0xSX1NUQVRfTE9HOgorCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RT
VVBQKTsKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09OVEVY
VDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7
CisJCQlzdGNiLT5hc29jLmNvbnRleHQgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVS
RV9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewor
CQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5zY3RwX2NvbnRleHQgPSBhdi0+YXNz
b2NfdmFsdWU7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChhdi0+
YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJ
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlzdGNiLT5hc29jLmNvbnRleHQgPSBhdi0+YXNz
b2NfdmFsdWU7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfVlJG
X0lEOgorCXsKKwkJdWludDMyX3QgKmRlZmF1bHRfdnJmaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJ
CWludCBpOworI2VuZGlmCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZGVmYXVsdF92cmZpZCwgb3B0
dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgqZGVmYXVsdF92cmZpZCA+IFNDVFBfTUFY
X1ZSRl9JRCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7
CisJCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7
IGkrKykgeworCQkJLyogVGhlIFZSRiBtdXN0IGJlIGluIHRoZSBWUkYgbGlzdCAqLworCQkJaWYg
KCpkZWZhdWx0X3ZyZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKKwkJCQlpbnAtPmRlZl92cmZfaWQgPSAqZGVmYXVsdF92cmZpZDsKKwkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQkJZ290byBzY3RwX2RvbmU7CisJCQl9CisJCX0KKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisjZWxzZQorCQlpbnAtPmRlZl92cmZfaWQgPSAq
ZGVmYXVsdF92cmZpZDsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCXNjdHBfZG9uZToKKyNl
bmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFTF9WUkZfSUQ6CisJeworI2lmZGVmIFND
VFBfTVZSRgorCQl1aW50MzJfdCAqZGVsX3ZyZmlkOworCQlpbnQgaSwgZm5kID0gMDsKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGRlbF92cmZpZCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7
CisJCWlmICgqZGVsX3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKSB7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAoaW5wLT5udW1fdnJmcyA9
PSAxKSB7CisJCQkvKiBDYW4ndCBkZWxldGUgbGFzdCBvbmUgKi8KKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0gMCkgeworCQkJLyogQ2FuJ3QgYWRkIG1vcmUg
b25jZSB5b3UgYXJlIGJvdW5kICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlmb3IgKGkgPSAwOyBp
IDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAoKmRlbF92cmZpZCA9PSBpbnAtPm1fdnJm
X2lkc1tpXSkgeworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFm
bmQpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9
CisJCWlmIChpICE9IChpbnAtPm51bV92cmZzIC0gMSkpIHsKKwkJCS8qIFRha2UgYm90dG9tIG9u
ZSBhbmQgbW92ZSB0byB0aGlzIHNsb3QgKi8KKwkJCWlucC0+bV92cmZfaWRzW2ldID0gaW5wLT5t
X3ZyZl9pZHNbKGlucC0+bnVtX3ZyZnMtMSldOworCQl9CisJCWlmICgqZGVsX3ZyZmlkID09IGlu
cC0+ZGVmX3ZyZl9pZCkgeworCQkJLyogVGFrZSB0aGUgZmlyc3Qgb25lIGFzIHRoZSBuZXcgZGVm
YXVsdCAqLworCQkJaW5wLT5kZWZfdnJmX2lkID0gaW5wLT5tX3ZyZl9pZHNbMF07CisJCX0KKwkJ
LyogRHJvcCB0aGUgbnVtYmVyIGJ5IG9uZSBraWxsaW5nIGxhc3Qgb25lICovCisJCWlucC0+bnVt
X3ZyZnMtLTsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQllcnJvciA9IEVPUE5PVFNVUFA7
CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BRERfVlJGX0lEOgorCXsKKyNpZmRl
ZiBTQ1RQX01WUkYKKwkJdWludDMyX3QgKmFkZF92cmZpZDsKKwkJaW50IGk7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhZGRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3QsIG9wdHNpemUpOworCQlp
ZiAoKmFkZF92cmZpZCA+IFNDVFBfTUFYX1ZSRl9JRCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVy
cm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSAwKSB7CisJCQkvKiBDYW4ndCBhZGQgbW9yZSBvbmNl
IHlvdSBhcmUgYm91bmQgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CWJyZWFrOworCQl9CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCS8qIFZlcmlmeSBpdHMgbm90
IGFscmVhZHkgaGVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7
CisJCQlpZiAoKmFkZF92cmZpZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgeworCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBTFJF
QURZKTsKKwkJCQllcnJvciA9IEVBTFJFQURZOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoKGlucC0+bnVtX3ZyZnMgKyAxKSA+IGlucC0+
dnJmX3NpemUpIHsKKwkJCS8qIG5lZWQgdG8gZ3JvdyBhcnJheSAqLworCQkJdWludDMyX3QgKnRh
cnJheTsKKwkJCVNDVFBfTUFMTE9DKHRhcnJheSwgdWludDMyX3QgKiwKKwkJCQkgICAgKHNpemVv
Zih1aW50MzJfdCkgKiAoaW5wLT52cmZfc2l6ZSArIFNDVFBfREVGQVVMVF9WUkZfU0laRSkpLAor
CQkJCSAgICBTQ1RQX01fTVZSRik7CisJCQlpZiAodGFycmF5ID09IE5VTEwpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
Tk9NRU0pOworCQkJCWVycm9yID0gRU5PTUVNOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbWNweSh0YXJyYXksIGlucC0+bV92cmZfaWRzLCAoc2l6
ZW9mKHVpbnQzMl90KSAqIGlucC0+dnJmX3NpemUpKTsKKwkJCVNDVFBfRlJFRShpbnAtPm1fdnJm
X2lkcywgU0NUUF9NX01WUkYpOworCQkJaW5wLT5tX3ZyZl9pZHMgPSB0YXJyYXk7CisJCQlpbnAt
PnZyZl9zaXplICs9IFNDVFBfREVGQVVMVF9WUkZfU0laRTsKKwkJfQorCQlpbnAtPm1fdnJmX2lk
c1tpbnAtPm51bV92cmZzXSA9ICphZGRfdnJmaWQ7CisJCWlucC0+bnVtX3ZyZnMrKzsKKwkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworI2Vsc2UKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7CisJCWVycm9yID0g
RU9QTk9UU1VQUDsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFTEFZRURfU0FD
SzoKKwl7CisJCXN0cnVjdCBzY3RwX3NhY2tfaW5mbyAqc2FjazsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKHNhY2ssIG9wdHZhbCwgc3RydWN0IHNjdHBfc2Fja19pbmZvLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWNrLT5zYWNrX2Fzc29jX2lkKTsKKwkJaWYgKHNh
Y2stPnNhY2tfZGVsYXkpIHsKKwkJCWlmIChzYWNrLT5zYWNrX2RlbGF5ID4gU0NUUF9NQVhfU0FD
S19ERUxBWSkKKwkJCQlzYWNrLT5zYWNrX2RlbGF5ID0gU0NUUF9NQVhfU0FDS19ERUxBWTsKKwkJ
CWlmIChNU0VDX1RPX1RJQ0tTKHNhY2stPnNhY2tfZGVsYXkpIDwgMSkgeworCQkJCXNhY2stPnNh
Y2tfZGVsYXkgPSBUSUNLU19UT19NU0VDKDEpOworCQkJfQorCQl9CisJCWlmIChzdGNiKSB7CisJ
CQlpZiAoc2Fjay0+c2Fja19kZWxheSkgeworCQkJCXN0Y2ItPmFzb2MuZGVsYXllZF9hY2sgPSBz
YWNrLT5zYWNrX2RlbGF5OworCQkJfQorCQkJaWYgKHNhY2stPnNhY2tfZnJlcSkgeworCQkJCXN0
Y2ItPmFzb2Muc2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVxOworCQkJfQorCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFNDVFBf
QUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKHNhY2stPnNh
Y2tfZGVsYXkpIHsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElN
RVJfUkVDVl0gPSBNU0VDX1RPX1RJQ0tTKHNhY2stPnNhY2tfZGVsYXkpOworCQkJCX0KKwkJCQlp
ZiAoc2Fjay0+c2Fja19mcmVxKSB7CisJCQkJCWlucC0+c2N0cF9lcC5zY3RwX3NhY2tfZnJlcSA9
IHNhY2stPnNhY2tfZnJlcTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJ
fQorCQkJaWYgKChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwK
KwkJCSAgICAoc2Fjay0+c2Fja19hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlT
Q1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fz
b2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJ
CWlmIChzYWNrLT5zYWNrX2RlbGF5KSB7CisJCQkJCQlzdGNiLT5hc29jLmRlbGF5ZWRfYWNrID0g
c2Fjay0+c2Fja19kZWxheTsKKwkJCQkJfQorCQkJCQlpZiAoc2Fjay0+c2Fja19mcmVxKSB7CisJ
CQkJCQlzdGNiLT5hc29jLnNhY2tfZnJlcSA9IHNhY2stPnNhY2tfZnJlcTsKKwkJCQkJfQorCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0FVVEhfQ0hVTks6CisJewor
CQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmsgKnNhdXRoOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c2F1dGgsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNodW5rLCBvcHRzaXplKTsKKworCQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOworCQlpZiAoc2N0cF9hdXRoX2FkZF9jaHVuayhzYXV0aC0+c2F1dGhf
Y2h1bmssIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcykpIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7
CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlucC0+YXV0aF9zdXBwb3J0ZWQg
PSAxOworCQl9CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJYnJlYWs7CisJfQorCWNhc2Ug
U0NUUF9BVVRIX0tFWToKKwl7CisJCXN0cnVjdCBzY3RwX2F1dGhrZXkgKnNjYTsKKwkJc3RydWN0
IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXM7CisJCXNjdHBfc2hhcmVka2V5X3QgKnNoYXJlZF9r
ZXk7CisJCXNjdHBfa2V5X3QgKmtleSA9IE5VTEw7CisJCXNpemVfdCBzaXplOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc2NhLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXksIG9wdHNpemUp
OworCQlpZiAoc2NhLT5zY2Ffa2V5bGVuZ3RoID09IDApIHsKKwkJCXNpemUgPSBvcHRzaXplIC0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXkpOworCQl9IGVsc2UgeworCQkgICAgICAgIGlmIChz
Y2EtPnNjYV9rZXlsZW5ndGggKyBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkgPD0gb3B0c2l6
ZSkgeworCQkJCXNpemUgPSBzY2EtPnNjYV9rZXlsZW5ndGg7CisJCQl9IGVsc2UgeworCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzY2EtPnNjYV9hc3NvY19pZCk7CisKKwkJaWYgKHN0
Y2IpIHsKKwkJCXNoYXJlZF9rZXlzID0gJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXM7CisJCQkvKiBj
bGVhciB0aGUgY2FjaGVkIGtleXMgZm9yIHRoaXMga2V5IGlkICovCisJCQlzY3RwX2NsZWFyX2Nh
Y2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKKwkJCS8qCisJCQkgKiBjcmVhdGUg
dGhlIG5ldyBzaGFyZWQga2V5IGFuZAorCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQKKwkJCSAqLwor
CQkJaWYgKHNpemUgPiAwKSB7CisJCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwg
KHVpbnQzMl90KSBzaXplKTsKKwkJCQlpZiAoa2V5ID09IE5VTEwpIHsKKwkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVN
KTsKKwkJCQkJZXJyb3IgPSBFTk9NRU07CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJc2hhcmVkX2tleSA9IHNjdHBfYWxsb2Nfc2hhcmVk
a2V5KCk7CisJCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7CisJCQkJc2N0cF9mcmVlX2tleShr
ZXkpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVOT01FTSk7CisJCQkJZXJyb3IgPSBFTk9NRU07CisJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQkJCWJyZWFrOworCQkJfQorCQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5
OworCQkJc2hhcmVkX2tleS0+a2V5aWQgPSBzY2EtPnNjYV9rZXludW1iZXI7CisJCQllcnJvciA9
IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCXNoYXJlZF9rZXlz
ID0gJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5czsKKwkJCQkvKgorCQkJCSAqIGNsZWFyIHRoZSBj
YWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIGZvcgorCQkJCSAqIHRoaXMga2V5IGlkCisJCQkJICov
CisJCQkJc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKGlucCwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsK
KwkJCQkvKgorCQkJCSAqIGNyZWF0ZSB0aGUgbmV3IHNoYXJlZCBrZXkgYW5kCisJCQkJICogaW5z
ZXJ0L3JlcGxhY2UgaXQKKwkJCQkgKi8KKwkJCQlpZiAoc2l6ZSA+IDApIHsKKwkJCQkJa2V5ID0g
c2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKKwkJCQkJaWYgKGtl
eSA9PSBOVUxMKSB7CisJCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJCQkJZXJyb3IgPSBFTk9NRU07CisJ
CQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0K
KwkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKKwkJCQlpZiAoc2hhcmVk
X2tleSA9PSBOVUxMKSB7CisJCQkJCXNjdHBfZnJlZV9rZXkoa2V5KTsKKwkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVN
KTsKKwkJCQkJZXJyb3IgPSBFTk9NRU07CisJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJCXNoYXJlZF9rZXktPmtleSA9IGtleTsKKwkJCQlzaGFyZWRf
a2V5LT5rZXlpZCA9IHNjYS0+c2NhX2tleW51bWJlcjsKKwkJCQllcnJvciA9IHNjdHBfaW5zZXJ0
X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7CisJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJfQorCQkJaWYgKChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRf
QVNTT0MpIHx8CisJCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkg
eworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAt
PnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCQkJc2hhcmVkX2tleXMgPSAmc3RjYi0+YXNvYy5zaGFyZWRfa2V5czsKKwkJCQkJLyog
Y2xlYXIgdGhlIGNhY2hlZCBrZXlzIGZvciB0aGlzIGtleSBpZCAqLworCQkJCQlzY3RwX2NsZWFy
X2NhY2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKKwkJCQkJLyoKKwkJCQkJICog
Y3JlYXRlIHRoZSBuZXcgc2hhcmVkIGtleSBhbmQKKwkJCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQK
KwkJCQkJICovCisJCQkJCWlmIChzaXplID4gMCkgeworCQkJCQkJa2V5ID0gc2N0cF9zZXRfa2V5
KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKKwkJCQkJCWlmIChrZXkgPT0gTlVMTCkg
eworCQkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJ
CX0KKwkJCQkJfQorCQkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKKwkJ
CQkJaWYgKHNoYXJlZF9rZXkgPT0gTlVMTCkgeworCQkJCQkJc2N0cF9mcmVlX2tleShrZXkpOwor
CQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJ
CQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5OworCQkJCQlzaGFyZWRfa2V5LT5rZXlpZCA9IHNjYS0+
c2NhX2tleW51bWJlcjsKKwkJCQkJZXJyb3IgPSBzY3RwX2luc2VydF9zaGFyZWRrZXkoc2hhcmVk
X2tleXMsIHNoYXJlZF9rZXkpOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQor
CQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2Fz
ZSBTQ1RQX0hNQUNfSURFTlQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqc2htYWM7CisJ
CXNjdHBfaG1hY2xpc3RfdCAqaG1hY2xpc3Q7CisJCXVpbnQxNl90IGhtYWNpZDsKKwkJdWludDMy
X3QgaTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2htYWNhbGdvLCBvcHRzaXplKTsKKwkJaWYgKChvcHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2htYWNhbGdvKSArIHNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRzICogc2l6ZW9mKHVpbnQx
Nl90KSkgfHwKKwkJICAgIChzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50cyA+IDB4ZmZmZikp
IHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisK
KwkJaG1hY2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KCh1aW50MTZfdClzaG1hYy0+c2htYWNf
bnVtYmVyX29mX2lkZW50cyk7CisJCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9N
RU0pOworCQkJZXJyb3IgPSBFTk9NRU07CisJCQlicmVhazsKKwkJfQorCQlmb3IgKGkgPSAwOyBp
IDwgc2htYWMtPnNobWFjX251bWJlcl9vZl9pZGVudHM7IGkrKykgeworCQkJaG1hY2lkID0gc2ht
YWMtPnNobWFjX2lkZW50c1tpXTsKKwkJCWlmIChzY3RwX2F1dGhfYWRkX2htYWNpZChobWFjbGlz
dCwgaG1hY2lkKSkgeworCQkJCS8qIGludmFsaWQgSE1BQ3Mgd2VyZSBmb3VuZCAqLzsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCXNjdHBfZnJlZV9obWFjbGlzdCho
bWFjbGlzdCk7CisJCQkJZ290byBzY3RwX3NldF9obWFjX2RvbmU7CisJCQl9CisJCX0KKwkJZm9y
IChpID0gMDsgaSA8IGhtYWNsaXN0LT5udW1fYWxnbzsgaSsrKSB7CisJCQlpZiAoaG1hY2xpc3Qt
PmhtYWNbaV0gPT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgeworCQkJCS8qIGFscmVhZHkgaW4g
bGlzdCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09IGhtYWNsaXN0LT5udW1f
YWxnbykgeworCQkJLyogbm90IGZvdW5kIGluIGxpc3QgKi8KKwkJCXNjdHBfZnJlZV9obWFjbGlz
dChobWFjbGlzdCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVh
azsKKwkJfQorCQkvKiBzZXQgaXQgb24gdGhlIGVuZHBvaW50ICovCisJCVNDVFBfSU5QX1dMT0NL
KGlucCk7CisJCWlmIChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpCisJCQlzY3RwX2ZyZWVfaG1h
Y2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwkJaW5wLT5zY3RwX2VwLmxvY2FsX2ht
YWNzID0gaG1hY2xpc3Q7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwlzY3RwX3NldF9obWFj
X2RvbmU6CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9BQ1RJVkVfS0VZOgorCXsKKwkJ
c3RydWN0IHNjdHBfYXV0aGtleWlkICpzY2FjdDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNj
YWN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7CisJCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsKKworCQkvKiBzZXQgdGhl
IGFjdGl2ZSBrZXkgb24gdGhlIHJpZ2h0IHBsYWNlICovCisJCWlmIChzdGNiKSB7CisJCQkvKiBz
ZXQgdGhlIGFjdGl2ZSBrZXkgb24gdGhlIGFzc29jICovCisJCQlpZiAoc2N0cF9hdXRoX3NldGFj
dGl2ZWtleShzdGNiLAorCQkJCQkJICAgc2NhY3QtPnNjYWN0X2tleW51bWJlcikpIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwKKwkJCQkJCSAgICBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsCisJCQkJCQkgICAgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoc2NhY3QtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChzY2FjdC0+c2Nh
Y3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCQlpZiAoc2N0cF9hdXRoX3NldGFjdGl2ZWtleV9lcChpbnAsIHNjYWN0LT5zY2FjdF9r
ZXludW1iZXIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
CX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoKHNjYWN0LT5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgKHNjYWN0LT5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2Js
aXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXNjdHBfYXV0aF9zZXRhY3Rp
dmVrZXkoc3RjYiwgc2NhY3QtPnNjYWN0X2tleW51bWJlcik7CisJCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9ERUxFVEVfS0VZOgorCXsKKwkJc3RydWN0IHNj
dHBfYXV0aGtleWlkICpzY2RlbDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNjZGVsLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc2NkZWwtPnNjYWN0X2Fzc29jX2lkKTsKKworCQkvKiBkZWxldGUgdGhlIGtleSBm
cm9tIHRoZSByaWdodCBwbGFjZSAqLworCQlpZiAoc3RjYikgeworCQkJaWYgKHNjdHBfZGVsZXRl
X3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVtYmVyKSkgeworCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykgfHwKKwkJCSAgICAoc2NkZWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKHNjdHBfZGVsZXRlX3NoYXJl
ZGtleV9lcChpbnAsIHNjZGVsLT5zY2FjdF9rZXludW1iZXIpKSB7CisJCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7
CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCQl9CisJCQlpZiAoKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT
T0MpIHx8CisJCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykp
IHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5w
LT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCQkJCXNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVt
YmVyKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BVVRIX0RF
QUNUSVZBVEVfS0VZOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0aGtleWlkICprZXlpZDsKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGtleWlkLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwg
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwga2V5aWQtPnNjYWN0X2Fzc29j
X2lkKTsKKworCQkvKiBkZWFjdGl2YXRlIHRoZSBrZXkgZnJvbSB0aGUgcmlnaHQgcGxhY2UgKi8K
KwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzY3RwX2RlYWN0X3NoYXJlZGtleShzdGNiLCBrZXlpZC0+
c2NhY3Rfa2V5bnVtYmVyKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGtleWlk
LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAoa2V5aWQt
PnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7CisJCQkJaWYgKHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKGlucCwga2V5aWQtPnNjYWN0
X2tleW51bWJlcikpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoa2V5aWQtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoa2V5aWQtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc2N0cF9kZWFjdF9zaGFy
ZWRrZXkoc3RjYiwga2V5aWQtPnNjYWN0X2tleW51bWJlcik7CisJCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVDoKKwl7CisJCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJaWYgKGF2LT5hc3NvY192
YWx1ZSAmICh+U0NUUF9FTkFCTEVfVkFMVUVfTUFTSykpIHsKKwkJICAgICAgICBTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisJCWlmIChzdGNiKSB7CisJCQlzdGNiLT5hc29jLmxv
Y2FsX3N0cnJlc2V0X3N1cHBvcnQgPSAodWludDhfdClhdi0+YXNzb2NfdmFsdWU7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5sb2NhbF9zdHJyZXNldF9z
dXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCX0KKwkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykg
fHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19s
aXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc3Rj
Yi0+YXNvYy5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVl
OworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCX0KKworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUkVTRVRfU1RS
RUFNUzoKKwl7CisJCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnN0cnJzdDsKKwkJaW50IGks
IHNlbmRfb3V0ID0gMDsKKwkJaW50IHNlbmRfaW4gPSAwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc3RycnN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMsIG9wdHNpemUpOwor
CQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHN0cnJzdC0+c3JzX2Fzc29jX2lkKTsKKwkJaWYg
KHN0Y2IgPT0gTlVMTCkgeworCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VO
VDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9
PSAwKSB7CisJCQkvKgorCQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBl
LgorCQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsKKwkJCWVycm9yID0gRU9QTk9UU1VQUDsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzaXplb2Yoc3Ry
dWN0IHNjdHBfcmVzZXRfc3RyZWFtcykgKworCQkgICAgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVh
bXMgKiBzaXplb2YodWludDE2X3QpID4gb3B0c2l6ZSkgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc3RycnN0LT5z
cnNfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORykgeworCQkJc2VuZF9pbiA9IDE7
CisJCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
QUxSRUFEWSk7CisJCQkJZXJyb3IgPSBFQUxSRUFEWTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN0cnJzdC0+c3JzX2ZsYWdzICYgU0NU
UF9TVFJFQU1fUkVTRVRfT1VUR09JTkcpIHsKKwkJCXNlbmRfb3V0ID0gMTsKKwkJfQorCQlpZiAo
KHN0cnJzdC0+c3JzX251bWJlcl9zdHJlYW1zID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JF
U0VUKSAmJiBzZW5kX2luKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJZXJyb3IgPSBFTk9NRU07CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKHNlbmRfaW4g
PT0gMCkgJiYgKHNlbmRfb3V0ID09IDApKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQorCQlmb3Ig
KGkgPSAwOyBpIDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgeworCQkJaWYgKChz
ZW5kX2luKSAmJgorCQkJICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlzdFtpXSA+IHN0Y2ItPmFz
b2Muc3RyZWFtaW5jbnQpKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoc2VuZF9vdXQpICYmCisJCQkgICAgKHN0cnJzdC0+
c3JzX3N0cmVhbV9saXN0W2ldID4gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpKSB7CisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlp
ZiAoZXJyb3IpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJ
CWlmIChzZW5kX291dCkgeworCQkJaW50IGNudDsKKwkJCXVpbnQxNl90IHN0cm07CisJCQlpZiAo
c3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMpIHsKKwkJCQlmb3IgKGkgPSAwLCBjbnQgPSAwOyBp
IDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgeworCQkJCQlzdHJtID0gc3RycnN0
LT5zcnNfc3RyZWFtX2xpc3RbaV07CisJCQkJCWlmIChzdGNiLT5hc29jLnN0cm1vdXRbc3RybV0u
c3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikgeworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3N0
cm1dLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKKwkJCQkJCWNudCsrOworCQkJ
CQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBJdHMgYWxsICovCisJCQkJZm9yIChpID0g
MCwgY250ID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCQkJaWYg
KHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKSB7CisJCQkJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5H
OworCQkJCQkJY250Kys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHNlbmRfaW4p
IHsKKwkJCWVycm9yID0gc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RjYiwgc3RycnN0LT5zcnNf
bnVtYmVyX3N0cmVhbXMsCisJCQkJCQkJc3RycnN0LT5zcnNfc3RyZWFtX2xpc3QsCisJCQkJCQkJ
c2VuZF9pbiwgMCwgMCwgMCwgMCwgMCk7CisJCX0gZWxzZSB7CisJCQllcnJvciA9IHNjdHBfc2Vu
ZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwkJ
fQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX1NUUlJTVF9SRVEsIFNDVFBfU09fTE9DS0VEKTsKKwkJfSBlbHNlIHsK
KwkJCSAvKgorCQkJICAqIEZvciBvdXRnb2luZyBzdHJlYW1zIGRvbid0IHJlcG9ydCBhbnkgcHJv
YmxlbXMgaW4KKwkJCSAgKiBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHBsaWNhdGlvbi4K
KwkJCSAgKiBYWFg6IERvdWJsZSBjaGVjayByZXNldHRpbmcgaW5jb21pbmcgc3RyZWFtcy4KKwkJ
CSAgKi8KKwkJCWVycm9yID0gMDsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfQUREX1NUUkVBTVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9hZGRf
c3RyZWFtcyAqc3RyYWRkOworCQl1aW50OF90IGFkZHN0cmVhbSA9IDA7CisJCXVpbnQxNl90IGFk
ZF9vX3N0cm1jbnQgPSAwOworCQl1aW50MTZfdCBhZGRfaV9zdHJtY250ID0gMDsKKworCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHN0cmFkZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcywg
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3RyYWRkLT5zYXNfYXNzb2Nf
aWQpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVy
cm9yID0gRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdf
c3VwcG9ydGVkID09IDApIHsKKwkJCS8qCisJCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhl
IGNodW5rIHR5cGUuCisJCQkgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQkJZXJyb3IgPSBFT1BO
T1RTVVBQOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYg
KHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7
CisJCQllcnJvciA9IEVBTFJFQURZOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJl
YWs7CisJCX0KKwkJaWYgKChzdHJhZGQtPnNhc19vdXRzdHJtcyA9PSAwKSAmJgorCQkgICAgKHN0
cmFkZC0+c2FzX2luc3RybXMgPT0gMCkpIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJZ290byBz
a2lwX3N0dWZmOworCQl9CisJCWlmIChzdHJhZGQtPnNhc19vdXRzdHJtcykgeworCQkJYWRkc3Ry
ZWFtID0gMTsKKwkJCS8qIFdlIGFsbG9jYXRlIGhlcmUgKi8KKwkJCWFkZF9vX3N0cm1jbnQgPSBz
dHJhZGQtPnNhc19vdXRzdHJtczsKKwkJCWlmICgoKChpbnQpYWRkX29fc3RybWNudCkgKyAoKGlu
dClzdGNiLT5hc29jLnN0cmVhbW91dGNudCkpID4gMHgwMDAwZmZmZikgeworCQkJCS8qIFlvdSBj
YW4ndCBoYXZlIG1vcmUgdGhhbiA2NGsgKi8KKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlnb3Rv
IHNraXBfc3R1ZmY7CisJCQl9CisJCX0KKwkJaWYgKHN0cmFkZC0+c2FzX2luc3RybXMpIHsKKwkJ
CWludCBjbnQ7CisKKwkJCWFkZHN0cmVhbSB8PSAyOworCQkJLyogV2UgYWxsb2NhdGUgaW5zaWRl
IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKCkgKi8KKwkJCWFkZF9pX3N0cm1jbnQgPSBzdHJhZGQt
PnNhc19pbnN0cm1zOworCQkJY250ID0gYWRkX2lfc3RybWNudDsKKwkJCWNudCArPSBzdGNiLT5h
c29jLnN0cmVhbWluY250OworCQkJaWYgKGNudCA+IDB4MDAwMGZmZmYpIHsKKwkJCQkvKiBZb3Ug
Y2FuJ3QgaGF2ZSBtb3JlIHRoYW4gNjRrICovCisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290
byBza2lwX3N0dWZmOworCQkJfQorCQkJaWYgKGNudCA+IChpbnQpc3RjYi0+YXNvYy5tYXhfaW5i
b3VuZF9zdHJlYW1zKSB7CisJCQkJLyogTW9yZSB0aGFuIHlvdSBhcmUgYWxsb3dlZCAqLworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCWdvdG8gc2tpcF9zdHVmZjsKKwkJCX0KKwkJfQorCQllcnJv
ciA9IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDAsIGFkZHN0cmVh
bSwgYWRkX29fc3RybWNudCwgYWRkX2lfc3RybWNudCwgMCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRLCBTQ1RQX1NPX0xPQ0tFRCk7
CisJc2tpcF9zdHVmZjoKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlicmVhazsKKwl9CisJ
Y2FzZSBTQ1RQX1JFU0VUX0FTU09DOgorCXsKKwkJaW50IGk7CisJCXVpbnQzMl90ICp2YWx1ZTsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCAoc2N0cF9hc3NvY190KSAqdmFsdWUpOwor
CQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVycm9yID0g
RU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9y
dGVkID09IDApIHsKKwkJCS8qCisJCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNodW5r
IHR5cGUuCisJCQkgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQkJZXJyb3IgPSBFT1BOT1RTVVBQ
OworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2It
PmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7CisJCQll
cnJvciA9IEVBTFJFQURZOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJlYWs7CisJ
CX0KKwkJLyogSXMgdGhlcmUgYW55IGRhdGEgcGVuZGluZyBpbiB0aGUgc2VuZCBvciBzZW50IHF1
ZXVlcz8gKi8KKwkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSB8fAor
CQkgICAgIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7CisJCWJ1c3lfb3V0
OgorCQkJZXJyb3IgPSBFQlVTWTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIERvIGFueSBzdHJlYW1zIGhhdmUgZGF0YSBxdWV1
ZWQ/ICovCisJCWZvciAoIGkgPSAwOyBpPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7
CisJCQlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7
CisJCQkJZ290byBidXN5X291dDsKKwkJCX0KKwkJfQorCQllcnJvciA9IHNjdHBfc2VuZF9zdHJf
cmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDEsIDAsIDAsIDAsIDApOworCQlzY3RwX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1JFUSwgU0NUUF9TT19M
T0NLRUQpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJyZWFrOworCX0KKwljYXNlIFND
VFBfQ09OTkVDVF9YOgorCQlpZiAob3B0c2l6ZSA8IChzaXplb2YoaW50KSArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOwor
CQkJYnJlYWs7CisJCX0KKwkJZXJyb3IgPSBzY3RwX2RvX2Nvbm5lY3RfeChzbywgaW5wLCBvcHR2
YWwsIG9wdHNpemUsIHAsIDApOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09OTkVDVF9YX0RFTEFZ
RUQ6CisJCWlmIChvcHRzaXplIDwgKHNpemVvZihpbnQpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsK
KwkJfQorCQllcnJvciA9IHNjdHBfZG9fY29ubmVjdF94KHNvLCBpbnAsIG9wdHZhbCwgb3B0c2l6
ZSwgcCwgMSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT05ORUNUX1hfQ09NUExFVEU6CisJewor
CQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCisJCS8qIEZJWE1FIE1UOiBjaGVjayBjb3JyZWN0PyAq
LworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhLCBvcHR2YWwsIHN0cnVjdCBzb2NrYWRkciwgb3B0
c2l6ZSk7CisKKwkJLyogZmluZCB0Y2IgKi8KKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0NPTk5FQ1RFRCkgeworCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlmIChzdGNiKSB7CisJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCX0KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
fSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBz
dGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBO
T1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsK
KwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCBOVUxMLCBO
VUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JF
RihpbnApOworCQkJfQorCQl9CisKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5U
KTsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Mu
ZGVsYXllZF9jb25uZWN0aW9uID09IDEpIHsKKwkJCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0
aW9uID0gMDsKKwkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVf
ZW50ZXJlZCk7CisJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwg
c3RjYiwKKwkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCQkJCQlTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ184KTsKKwkJCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAs
IHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBhbHJlYWR5
IGV4cGlyZWQgb3IgZGlkIG5vdCB1c2UgZGVsYXllZAorCQkJICogY29ubmVjdHgKKwkJCSAqLwor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFMUkVBRFkpOworCQkJZXJyb3IgPSBFQUxSRUFEWTsKKwkJfQorCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYX0JVUlNUOgorCXsKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMAorCQl1
aW50OF90ICpidXJzdDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGJ1cnN0LCBvcHR2YWwsIHVp
bnQ4X3QsIG9wdHNpemUpOworCisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCWlucC0+c2N0cF9l
cC5tYXhfYnVyc3QgPSAqYnVyc3Q7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKyNlbHNlCisJ
CXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlzdGNi
LT5hc29jLm1heF9idXJzdCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
SU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
KSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAubWF4X2J1cnN0ID0gYXYtPmFzc29j
X3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoYXYtPmFz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5tYXhfYnVyc3QgPSBhdi0+YXNz
b2NfdmFsdWU7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2Ug
U0NUUF9NQVhTRUc6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisJCWludCBv
dmg7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29j
X2lkKTsKKworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYp
IHsKKwkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOworCQl9IGVsc2UgeworCQkJb3ZoID0gU0NU
UF9NRURfVjRfT1ZFUkhFQUQ7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChhdi0+YXNzb2Nf
dmFsdWUpIHsKKwkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9IChhdi0+YXNzb2NfdmFs
dWUgKyBvdmgpOworCQkJfSBlbHNlIHsKKwkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9
IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7
CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQkvKiBGSVhNRSBNVDogSSB0aGluayB0aGlz
IGlzIG5vdCBpbiB0dW5lIHdpdGggdGhlIEFQSSBJRCAqLworCQkJCWlmIChhdi0+YXNzb2NfdmFs
dWUpIHsKKwkJCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoYXYtPmFzc29jX3ZhbHVlICsgb3Zo
KTsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVM
VF9NQVhTRUdNRU5UOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9FVkVOVFM6CisJeworCQlzdHJ1Y3Qgc2N0cF9ldmVudF9z
dWJzY3JpYmUgKmV2ZW50czsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGV2ZW50cywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUsIG9wdHNpemUpOworCisJCVNDVFBfSU5QX1dM
T0NLKGlucCk7CisJCWlmIChldmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCkgeworCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpOworCQl9IGVsc2Ug
eworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5U
KTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfYXNzb2NpYXRpb25fZXZlbnQpIHsKKwkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpOworCQl9IGVs
c2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VW
TlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9hZGRyZXNzX2V2ZW50KSB7CisJCQlzY3Rw
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKKwkJfSBlbHNl
IHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5U
KTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50KSB7CisJCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKKwkJ
fSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfcGVlcl9lcnJvcl9ldmVudCkg
eworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOwor
CQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQ
RUVSRVJSKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQpIHsKKwkJ
CXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOwor
CQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZT
SFVURE9XTkVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5
X2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVW
TlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X1BEQVBJRVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX2FkYXB0YXRpb25fbGF5ZXJf
ZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJ
T05FVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9G
TEFHU19BREFQVEFUSU9ORVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX2F1dGhlbnRp
Y2F0aW9uX2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19B
VVRIRVZOVCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfQVVUSEVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJfZHJ5X2V2
ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsK
KwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllF
Vk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSB7CisJ
CQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsK
KwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJF
QU1fUkVTRVRFVk5UKTsKKwkJfQorCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisKKwkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlpZiAoZXZlbnRz
LT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5w
LCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWQVNTT0NFVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJ
c2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09D
RVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX2FkZHJlc3NfZXZlbnQpIHsKKwkJCQlz
Y3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVW
TlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKKwkJCX0KKwkJCWlmIChldmVudHMtPnNjdHBf
c2VuZF9mYWlsdXJlX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0
cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlM
RVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX3BlZXJfZXJyb3JfZXZlbnQpIHsKKwkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVS
RVJSKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwg
U0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9z
aHV0ZG93bl9ldmVudCkgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfc3Rj
Yl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQp
OworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50KSB7CisJ
CQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVW
TlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19QREFQSUVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9hZGFw
dGF0aW9uX2xheWVyX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBf
c3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5U
KTsKKwkJCX0KKwkJCWlmIChldmVudHMtPnNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQpIHsKKwkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5U
KTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfQVVUSEVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJf
ZHJ5X2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19EUllFVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2Zm
KGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRz
LT5zY3RwX3N0cmVhbV9yZXNldF9ldmVudCkgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlu
cCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVCk7CisJCQl9IGVsc2Ugewor
CQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1NUUkVB
TV9SRVNFVEVWTlQpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCS8q
IFNlbmQgdXAgdGhlIHNlbmRlciBkcnkgZXZlbnQgb25seSBmb3IgMS10by0xIHN0eWxlIHNvY2tl
dHMuICovCisJCWlmIChldmVudHMtPnNjdHBfc2VuZGVyX2RyeV9ldmVudCkgeworCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgeworCQkJCXN0Y2IgPSBM
SVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCQlpZiAoc3RjYikgeworCQkJCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2Vu
ZF9xdWV1ZSkgJiYKKwkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUp
ICYmCisJCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQkJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5VTEws
IFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CQkJfQorCQkJfQorCQl9CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJYnJlYWs7CisJfQor
CWNhc2UgU0NUUF9BREFQVEFUSU9OX0xBWUVSOgorCXsKKwkJc3RydWN0IHNjdHBfc2V0YWRhcHRh
dGlvbiAqYWRhcF9iaXRzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYWRhcF9iaXRzLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24sIG9wdHNpemUpOworCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOworCQlpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3IgPSBhZGFw
X2JpdHMtPnNzYl9hZGFwdGF0aW9uX2luZDsKKwkJaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5
ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQli
cmVhazsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdf
U0VROgorCXsKKwkJdWludDMyX3QgKnZ2djsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZ2diwg
b3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCWlu
cC0+c2N0cF9lcC5pbml0aWFsX3NlcXVlbmNlX2RlYnVnID0gKnZ2djsKKwkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCQlicmVhazsKKwl9CisjZW5kaWYKKwljYXNlIFNDVFBfREVGQVVMVF9TRU5E
X1BBUkFNOgorCXsKKwkJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc19pbmZvOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc19pbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8sIG9w
dHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2luZm9fYXNzb2Nf
aWQpOworCisJCWlmIChzdGNiKSB7CisJCQlpZiAoc19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNi
LT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCW1lbWNweSgmc3RjYi0+YXNvYy5kZWZfc2VuZCwg
c19pbmZvLCBtaW4ob3B0c2l6ZSwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVmX3NlbmQpKSk7CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNfaW5mby0+c2luZm9fYXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAgKHNfaW5mby0+c2luZm9fYXNz
b2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJ
CQltZW1jcHkoJmlucC0+ZGVmX3NlbmQsIHNfaW5mbywgbWluKG9wdHNpemUsIHNpemVvZihpbnAt
PmRlZl9zZW5kKSkpOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgo
c19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAg
KHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlpZiAo
c19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCQkJ
bWVtY3B5KCZzdGNiLT5hc29jLmRlZl9zZW5kLCBzX2luZm8sIG1pbihvcHRzaXplLCBzaXplb2Yo
c3RjYi0+YXNvYy5kZWZfc2VuZCkpKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVh
azsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9w
YWRkcnBhcmFtcyAqcGFkZHJwOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0cnVjdCBz
b2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCXN0
cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywgb3B0c2l6ZSk7CisJ
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgcGFkZHJwLT5zcHBfYXNzb2NfaWQpOworCisjaWYg
ZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAocGFkZHJwLT5zcHBfYWRkcmVz
cy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZwYWRkcnAtPnNwcF9hZGRyZXNz
OworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJ
aW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKKwkJfQorI2Vsc2UKKwkJ
YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKKyNlbmRpZgor
CQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7
CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3Nv
Y2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0
aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkg
aXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQ
X0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoJmlucCwgYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZu
ZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0g
TlVMTCkpIHsKKyNpZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQp
IHsKKworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCXNpbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKilhZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJf
QU5ZKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5z
aW42X2FkZHIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGFkZHItPnNhX2ZhbWls
eSA9PSBBRl9DT05OKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCQkJ
c2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciAhPSBOVUxMKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0g
ZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
CQkvKiBzYW5pdHkgY2hlY2tzICovCisJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJf
RU5BQkxFKSAmJiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElTQUJMRSkpIHsKKwkJCWlm
IChzdGNiKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQly
ZXR1cm4gKEVJTlZBTCk7CisJCX0KKworCQlpZiAoKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BN
VFVEX0VOQUJMRSkgJiYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpKSB7
CisJCQlpZiAoc3RjYikKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJ
LyoqKioqKioqKioqKioqKioqKioqKioqKlRDQiBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioq
KioqLworCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJLyoqKioqKioqKioqKioqKioqKioqKioq
Kk5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChwYWRkcnAtPnNw
cF9mbGFncyAmIFNQUF9IQl9ESVNBQkxFKSB7CisJCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKKwkJCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX05PSEIpKSB7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJF
USArIFNDVFBfTE9DXzkpOworCQkJCQl9CisJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FE
RFJfTk9IQjsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJM
RSkgeworCQkJCQlpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCkgeworCQkJCQkJbmV0LT5oZWFy
dF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKKwkJCQkJfSBlbHNlIGlmIChw
YWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9USU1FX0lTX1pFUk8pIHsKKwkJCQkJCW5ldC0+aGVh
cnRfYmVhdF9kZWxheSA9IDA7CisJCQkJCX0KKwkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAorCQkJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTApOworCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQkJbmV0
LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9IQjsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCkgeworCQkJCQkvKiBvbiBkZW1hbmQgSEIgKi8KKwkJ
CQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQlzY3RwX2No
dW5rX291dHB1dChpbnAsIHN0Y2IsICBTQ1RQX09VVFBVVF9GUk9NX1NPQ0tPUFQsIFNDVFBfU09f
TE9DS0VEKTsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
LCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJfQorCQkJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBT
UFBfUE1UVURfRElTQUJMRSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFMTEVT
VF9QTVRVKSkgeworCQkJCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGlt
ZXIudGltZXIpKSB7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BBVEhN
VFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSAr
IFNDVFBfTE9DXzExKTsKKwkJCQkJfQorCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERS
X05PX1BNVFVEOworCQkJCQluZXQtPm10dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7CisJCQkJCXN3
aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJ
Y2FzZSBBRl9JTkVUOgorCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJ
CQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWNhc2UgQUZfSU5FVDY6CisJ
CQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJCWJyZWFrOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQljYXNlIEFGX0NPTk46CisJCQkJCQlu
ZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJCQkJYnJlYWs7CisjZW5kaWYK
KwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCWlmIChuZXQtPm10dSA8
IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1KSB7CisJCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVu
dChzdGNiLCBuZXQtPm10dSk7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2Zs
YWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgeworCQkJCQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElO
RygmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKSkgeworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCX0KKwkJCQkJ
bmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9fUE1UVUQ7CisJCQkJfQorCQkJCWlmIChw
YWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUEYpIHsKKwkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0
aG1heHJ4dCkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1BGOworCQkJ
CQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50IDw9IHBhZGRy
cC0+c3BwX3BhdGhtYXhyeHQpICYmCisJCQkJCQkgICAgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQt
PnBmX3RocmVzaG9sZCkpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1BG
OworCQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJ
CQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwKKwkJCQkJCQkgICAg
ICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCQkJCSAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xMik7CisJCQkJCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBuZXQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IHBhZGRycC0+
c3BwX3BhdGhtYXhyeHQpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9S
RUFDSEFCTEU7CisJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9E
T1dOLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCX0KKwkJCQkJfSBlbHNl
IHsKKwkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50IDw9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQp
IHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQkJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQs
IFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQluZXQtPmZhaWx1cmVfdGhy
ZXNob2xkID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dDsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX0RTQ1ApIHsKKwkJCQkJbmV0LT5kc2NwID0gcGFkZHJwLT5zcHBfZHNj
cCAmIDB4ZmM7CisJCQkJCW5ldC0+ZHNjcCB8PSAweDAxOworCQkJCX0KKyNpZmRlZiBJTkVUNgor
CQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9JUFY2X0ZMT1dMQUJFTCkgeworCQkJCQlp
ZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCQkJbmV0
LT5mbG93bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJ
CQkJCQluZXQtPmZsb3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQkJCQl9CisJCQkJfQorI2VuZGlm
CisJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioqKipBU1NPQyBPTkxZIC0t
IE5PIE5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLworCQkJCWlmIChwYWRkcnAt
PnNwcF9wYXRobWF4cnh0ICE9IDApIHsKKwkJCQkJc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmUg
PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0OworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSB7CisJCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBwYWRkcnAtPnNwcF9w
YXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1BGOwor
CQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50IDw9
IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpICYmCisJCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50
ID4gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQ
X0FERFJfUEY7CisJCQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTE9DS0VE
KTsKKwkJCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCisJ
CQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJCQkJCQkJ
CSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xMyk7CisJ
CQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQlpZiAobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQkJCWlmIChuZXQtPmVycm9y
X2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgeworCQkJCQkJCQluZXQtPmRlc3Rfc3Rh
dGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBw
YWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQ
X0FERFJfUkVBQ0hBQkxFOworCQkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5U
RVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCQl9CisJCQkJ
CQl9CisJCQkJCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4
dDsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9F
TkFCTEUpIHsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwgIT0gMCkgeworCQkJCQkJ
c3RjYi0+YXNvYy5oZWFydF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKKwkJ
CQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9USU1FX0lTX1pFUk8pIHsK
KwkJCQkJCXN0Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheSA9IDA7CisJCQkJCX0KKwkJCQkJLyog
VHVybiBiYWNrIG9uIHRoZSB0aW1lciAqLworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQlpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZh
bCAhPSAwKSB7CisJCQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJp
bnRlcnZhbDsKKwkJCQkJCX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElN
RV9JU19aRVJPKSB7CisJCQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0gMDsKKwkJCQkJCX0K
KwkJCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgeworCQkJCQkJCW5l
dC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PSEI7CisJCQkJCQl9CisJCQkJCQlzY3RwX3Rp
bWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCQkJ
CQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzE0KTsKKwkJCQkJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQpOworCQkJ
CQl9CisJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdT
X0RPTk9UX0hFQVJUQkVBVCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQ
UF9IQl9ESVNBQkxFKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRz
LCBzY3RwX25leHQpIHsKKwkJCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9O
T0hCKSkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9IQjsKKwkJCQkJ
CQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7CisJCQkJ
CQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAorCQkJCQkJCQkg
ICAgICAgICAgICAgICAgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNSk7CisJCQkJCQkJfQorCQkJCQkJfQor
CQkJCQl9CisJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxB
R1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9CisJCQkJaWYgKChwYWRkcnAtPnNwcF9mbGFncyAm
IFNQUF9QTVRVRF9ESVNBQkxFKSAmJiAocGFkZHJwLT5zcHBfcGF0aG10dSA+PSBTQ1RQX1NNQUxM
RVNUX1BNVFUpKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBz
Y3RwX25leHQpIHsKKwkJCQkJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90
aW1lci50aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BB
VEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCQlTQ1RQX0ZST01fU0NUUF9VU1JS
RVEgKyBTQ1RQX0xPQ18xNik7CisJCQkJCQl9CisJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NU
UF9BRERSX05PX1BNVFVEOworCQkJCQkJbmV0LT5tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1Owor
CQkJCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCQkJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09W
RVJIRUFEOworCQkJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCQljYXNlIEFG
X0NPTk46CisJCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCQkJ
CQlicmVhazsKKyNlbmRpZgorCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0K
KwkJCQkJCWlmIChuZXQtPm10dSA8IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1KSB7CisJCQkJCQkJ
c2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5tdHUpOworCQkJCQkJfQorCQkJCQl9
CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9Q
TVRVRCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9QTVRVRF9FTkFC
TEUpIHsKKwkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgeworCQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90aW1lci50
aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRV
UkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAm
PSB+U0NUUF9BRERSX05PX1BNVFVEOworCQkJCQl9CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9t
dHUgPSAwOworCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9G
TEFHU19ET19OT1RfUE1UVUQpOworCQkJCX0KKwkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBT
UFBfRFNDUCkgeworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0
cF9uZXh0KSB7CisJCQkJCQluZXQtPmRzY3AgPSBwYWRkcnAtPnNwcF9kc2NwICYgMHhmYzsKKwkJ
CQkJCW5ldC0+ZHNjcCB8PSAweDAxOworCQkJCQl9CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9k
c2NwID0gcGFkZHJwLT5zcHBfZHNjcCAmIDB4ZmM7CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9k
c2NwIHw9IDB4MDE7CisJCQkJfQorI2lmZGVmIElORVQ2CisJCQkJaWYgKHBhZGRycC0+c3BwX2Zs
YWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3Rj
Yi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCQkJbmV0LT5mbG93bGFiZWwgPSBwYWRkcnAt
PnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCQkJbmV0LT5mbG93bGFiZWwg
fD0gMHg4MDAwMDAwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRf
Zmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAwMGZmZmZmOworCQkJ
CQlzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsIHw9IDB4ODAwMDAwMDA7CisJCQkJfQorI2Vu
ZGlmCisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQkvKioq
KioqKioqKioqKioqKioqKioqKioqTk8gVENCLCBTRVQgVE8gZGVmYXVsdCBzdHVmZiAqKioqKioq
KioqKioqKioqKiovCisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkgICAgKHBhZGRycC0+c3BwX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJLyoKKwkJCQkgKiBGb3IgdGhl
IFRPUy9GTE9XTEFCRUwgc3R1ZmYgeW91IHNldCBpdAorCQkJCSAqIHdpdGggdGhlIG9wdGlvbnMg
b24gdGhlIHNvY2tldAorCQkJCSAqLworCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ICE9
IDApIHsKKwkJCQkJaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZSA9IHBhZGRycC0+c3BwX3Bh
dGhtYXhyeHQ7CisJCQkJfQorCisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJ
TUVfSVNfWkVSTykKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElN
RVJfSEVBUlRCRUFUXSA9IDA7CisJCQkJZWxzZSBpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCAh
PSAwKSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsID4gU0NUUF9NQVhfSEJfSU5U
RVJWQUwpCisJCQkJCQlwYWRkcnAtPnNwcF9oYmludGVydmFsPSBTQ1RQX01BWF9IQl9JTlRFUlZB
TDsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRC
RUFUXSA9IE1TRUNfVE9fVElDS1MocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCk7CisJCQkJfQorCisJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJMRSkgeworCQkJCQlpZiAocGFk
ZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7CisJCQkJCQlpbnAtPnNjdHBf
ZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdID0gMDsKKwkJCQkJfSBl
bHNlIGlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsKSB7CisJCQkJCQlpbnAtPnNjdHBfZXAuc2N0
cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdID0gTVNFQ19UT19USUNLUyhwYWRk
cnAtPnNwcF9oYmludGVydmFsKTsKKwkJCQkJfQorCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9IGVsc2UgaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RJU0FCTEUpIHsKKwkJCQkJc2N0cF9mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgeworCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVs
dF9tdHUgPSAwOworCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9f
Tk9UX1BNVFVEKTsKKwkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVE
X0RJU0FCTEUpIHsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFMTEVT
VF9QTVRVKSB7CisJCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNwcF9w
YXRobXR1OworCQkJCQl9CisJCQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X0RPX05PVF9QTVRVRCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9E
U0NQKSB7CisJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X2RzY3AgPSBwYWRkcnAtPnNwcF9kc2Nw
ICYgMHhmYzsKKwkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfZHNjcCB8PSAweDAxOworCQkJCX0K
KyNpZmRlZiBJTkVUNgorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9JUFY2X0ZMT1dM
QUJFTCkgeworCQkJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpIHsKKwkJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCA9IHBhZGRycC0+c3Bw
X2lwdjZfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0
X2Zsb3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisJCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVy
cm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUlRPSU5G
TzoKKwl7CisJCXN0cnVjdCBzY3RwX3J0b2luZm8gKnNydG87CisJCXVpbnQzMl90IG5ld19pbml0
LCBuZXdfbWluLCBuZXdfbWF4OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3J0bywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9ydG9pbmZvLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBzcnRvLT5zcnRvX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaWYgKHNydG8t
PnNydG9faW5pdGlhbCkKKwkJCQluZXdfaW5pdCA9IHNydG8tPnNydG9faW5pdGlhbDsKKwkJCWVs
c2UKKwkJCQluZXdfaW5pdCA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87CisJCQlpZiAoc3J0by0+
c3J0b19tYXgpCisJCQkJbmV3X21heCA9IHNydG8tPnNydG9fbWF4OworCQkJZWxzZQorCQkJCW5l
d19tYXggPSBzdGNiLT5hc29jLm1heHJ0bzsKKwkJCWlmIChzcnRvLT5zcnRvX21pbikKKwkJCQlu
ZXdfbWluID0gc3J0by0+c3J0b19taW47CisJCQllbHNlCisJCQkJbmV3X21pbiA9IHN0Y2ItPmFz
b2MubWlucnRvOworCQkJaWYgKChuZXdfbWluIDw9IG5ld19pbml0KSAmJiAobmV3X2luaXQgPD0g
bmV3X21heCkpIHsKKwkJCQlzdGNiLT5hc29jLmluaXRpYWxfcnRvID0gbmV3X2luaXQ7CisJCQkJ
c3RjYi0+YXNvYy5tYXhydG8gPSBuZXdfbWF4OworCQkJCXN0Y2ItPmFzb2MubWlucnRvID0gbmV3
X21pbjsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoc3J0by0+
c3J0b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOworCQkJCWlmIChzcnRvLT5zcnRvX2luaXRpYWwpCisJCQkJCW5ld19pbml0ID0gc3J0
by0+c3J0b19pbml0aWFsOworCQkJCWVsc2UKKwkJCQkJbmV3X2luaXQgPSBpbnAtPnNjdHBfZXAu
aW5pdGlhbF9ydG87CisJCQkJaWYgKHNydG8tPnNydG9fbWF4KQorCQkJCQluZXdfbWF4ID0gc3J0
by0+c3J0b19tYXg7CisJCQkJZWxzZQorCQkJCQluZXdfbWF4ID0gaW5wLT5zY3RwX2VwLnNjdHBf
bWF4cnRvOworCQkJCWlmIChzcnRvLT5zcnRvX21pbikKKwkJCQkJbmV3X21pbiA9IHNydG8tPnNy
dG9fbWluOworCQkJCWVsc2UKKwkJCQkJbmV3X21pbiA9IGlucC0+c2N0cF9lcC5zY3RwX21pbnJ0
bzsKKwkJCQlpZiAoKG5ld19taW4gPD0gbmV3X2luaXQpICYmIChuZXdfaW5pdCA8PSBuZXdfbWF4
KSkgeworCQkJCQlpbnAtPnNjdHBfZXAuaW5pdGlhbF9ydG8gPSBuZXdfaW5pdDsKKwkJCQkJaW5w
LT5zY3RwX2VwLnNjdHBfbWF4cnRvID0gbmV3X21heDsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBf
bWlucnRvID0gbmV3X21pbjsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBl
bHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNTT0NJTkZPOgorCXsKKwkJc3RydWN0IHNjdHBfYXNz
b2NwYXJhbXMgKnNhc29jOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fzb2MsIG9wdHZhbCwg
c3RydWN0IHNjdHBfYXNzb2NwYXJhbXMsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIHNhc29jLT5zYXNvY19hc3NvY19pZCk7CisJCWlmIChzYXNvYy0+c2Fzb2NfY29va2ll
X2xpZmUpIHsKKwkJCS8qIGJvdW5kYXJ5IGNoZWNrIHRoZSBjb29raWUgbGlmZSAqLworCQkJaWYg
KHNhc29jLT5zYXNvY19jb29raWVfbGlmZSA8IDEwMDApCisJCQkJc2Fzb2MtPnNhc29jX2Nvb2tp
ZV9saWZlID0gMTAwMDsKKwkJCWlmIChzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPiBTQ1RQX01B
WF9DT09LSUVfTElGRSkgeworCQkJCXNhc29jLT5zYXNvY19jb29raWVfbGlmZSA9IFNDVFBfTUFY
X0NPT0tJRV9MSUZFOworCQkJfQorCQl9CisJCWlmIChzdGNiKSB7CisJCQlpZiAoc2Fzb2MtPnNh
c29jX2Fzb2NtYXhyeHQpCisJCQkJc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcyA9IHNhc29jLT5z
YXNvY19hc29jbWF4cnh0OworCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSkgeworCQkJ
CXN0Y2ItPmFzb2MuY29va2llX2xpZmUgPSBNU0VDX1RPX1RJQ0tTKHNhc29jLT5zYXNvY19jb29r
aWVfbGlmZSk7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJ
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkg
ICAgKHNhc29jLT5zYXNvY19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlT
Q1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlmIChzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCkKKwkJ
CQkJaW5wLT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzID0gc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQ7
CisJCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSkgeworCQkJCQlpbnAtPnNjdHBfZXAu
ZGVmX2Nvb2tpZV9saWZlID0gTVNFQ19UT19USUNLUyhzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUp
OworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQor
CWNhc2UgU0NUUF9JTklUTVNHOgorCXsKKwkJc3RydWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7CisK
KwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzaW5pdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9pbml0bXNn
LCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJaWYgKHNpbml0LT5zaW5pdF9u
dW1fb3N0cmVhbXMpCisJCQlpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50ID0gc2lu
aXQtPnNpbml0X251bV9vc3RyZWFtczsKKworCQlpZiAoc2luaXQtPnNpbml0X21heF9pbnN0cmVh
bXMpCisJCQlpbnAtPnNjdHBfZXAubWF4X29wZW5fc3RyZWFtc19pbnRvbWUgPSBzaW5pdC0+c2lu
aXRfbWF4X2luc3RyZWFtczsKKworCQlpZiAoc2luaXQtPnNpbml0X21heF9hdHRlbXB0cykKKwkJ
CWlucC0+c2N0cF9lcC5tYXhfaW5pdF90aW1lcyA9IHNpbml0LT5zaW5pdF9tYXhfYXR0ZW1wdHM7
CisKKwkJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbykKKwkJCWlucC0+c2N0cF9lcC5p
bml0aWFsX2luaXRfcnRvX21heCA9IHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbzsKKwkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BSSU1BUllfQURE
UjoKKwl7CisJCXN0cnVjdCBzY3RwX3NldHByaW0gKnNwYTsKKwkJc3RydWN0IHNjdHBfbmV0cyAq
bmV0OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZp
bmVkKElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChzcGEsIG9wdHZhbCwgc3RydWN0IHNjdHBfc2V0cHJpbSwgb3B0
c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3BhLT5zc3BfYXNzb2NfaWQpOwor
CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAoc3BhLT5zc3BfYWRk
ci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGEtPnNzcF9hZGRyOworCQkJ
aWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJaW42X3Np
bjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAq
KSZzcGEtPnNzcF9hZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKwkJfQorI2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJ
CQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBp
bmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJ
CQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBs
b2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwu
CisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYg
KHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0K
KworCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCAhPSBOVUxMKSkgeworCQkJaWYgKG5ldCAh
PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQlpZiAoIShuZXQtPmRlc3Rf
c3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7CisJCQkJCS8qIE9rIHdlIG5lZWQgdG8g
c2V0IGl0ICovCisJCQkJCWlmIChzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgKHN0cnVjdCBz
b2NrYWRkciAqKU5VTEwsIG5ldCkgPT0gMCkgeworCQkJCQkJaWYgKChzdGNiLT5hc29jLmFsdGVy
bmF0ZSkgJiYKKwkJCQkJCSAgICAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSAm
JgorCQkJCQkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgewor
CQkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCQkJ
CQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOworCQkJCQkJfQorCQkJCQl9IGVsc2Ugewor
CQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQl9CisJCQkJfSBl
bHNlIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJfQorCQkJ
fQorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJ
CWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX1NFVF9EWU5BTUlDX1BSSU1BUlk6CisJeworCQl1bmlvbiBz
Y3RwX3NvY2tzdG9yZSAqc3M7CisjaWZkZWYgU0NUUF9NVlJGCisJCWludCBpLCBmbmQgPSAwOwor
I2VuZGlmCisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCXN0cnVjdCBwcm9jICpwcm9jOworI2VuZGlm
CisjaWZkZWYgX19GcmVlQlNEX18KKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAorCQll
cnJvciA9IHByaXZfY2hlY2soY3VydGhyZWFkLAorCQkJCSAgIFBSSVZfTkVUSU5FVF9SRVNFUlZF
RFBPUlQpOworI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisJCWVycm9yID0gc3Vz
ZXIoKHN0cnVjdCB0aHJlYWQgKilwKTsKKyNlbHNlCisJCWVycm9yID0gc3VzZXIocCk7CisjZW5k
aWYKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorCQlwcm9jID0gKHN0cnVjdCBwcm9jICopcDsK
KwkJaWYgKHApIHsKKwkJCWVycm9yID0gc3VzZXIocHJvYy0+cF91Y3JlZCwgJnByb2MtPnBfYWNm
bGFnKTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisjZWxzZQorCQllcnJvciA9IHN1c2Vy
KHAsIDApOworI2VuZGlmCisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworI2VuZGlmCisKKwkJU0NU
UF9DSEVDS19BTkRfQ0FTVChzcywgb3B0dmFsLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSwgb3B0c2l6
ZSk7CisJCS8qIFNVUEVSIFVTRVIgQ0hFQ0s/ICovCisjaWZkZWYgU0NUUF9NVlJGCisJCWZvciAo
aSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJCWlmICh2cmZfaWQgPT0gaW5wLT5t
X3ZyZl9pZHNbaV0pIHsKKwkJCQlmbmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlm
ICghZm5kKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsK
KwkJfQorI2VuZGlmCisJCWVycm9yID0gc2N0cF9keW5hbWljX3NldF9wcmltYXJ5KCZzcy0+c2Es
IHZyZl9pZCk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU0VUX1BFRVJfUFJJTUFSWV9BRERS
OgorCXsKKwkJc3RydWN0IHNjdHBfc2V0cGVlcnByaW0gKnNzcHA7CisJCXN0cnVjdCBzb2NrYWRk
ciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCXN0cnVjdCBz
b2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNz
cHAsIG9wdHZhbCwgc3RydWN0IHNjdHBfc2V0cGVlcnByaW0sIG9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHNzcHAtPnNzcHBfYXNzb2NfaWQpOworCQlpZiAoc3RjYiAhPSBO
VUxMKSB7CisJCQlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYg
ZGVmaW5lZChJTkVUNikKKwkJCWlmIChzc3BwLT5zc3BwX2FkZHIuc3NfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKSZzc3BwLT5zc3BwX2FkZHI7CisJCQkJaWYgKElONl9JU19BRERS
X1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCWluNl9zaW42XzJfc2luKCZzaW5f
c3RvcmUsIHNpbjYpOworCQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7
CisJCQkJfSBlbHNlIHsKKwkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3NwcC0+c3Nw
cF9hZGRyOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc3NwcC0+c3NwcF9hZGRyOworCQkJfQorI2Vsc2UKKwkJCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopJnNzcHAtPnNzcHBfYWRkcjsKKyNlbmRpZgorCQkJaWZhID0gc2N0cF9maW5kX2lmYV9i
eV9hZGRyKGFkZHIsIHN0Y2ItPmFzb2MudnJmX2lkLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJ
CQlpZiAoaWZhID09IE5VTEwpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFM
OworCQkJCWdvdG8gb3V0X29mX2l0OworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkJCS8qIE11c3QgdmFsaWRhdGUgdGhl
IGlmYSBmb3VuZCBpcyBpbiBvdXIgZXAgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7
CisJCQkJaW50IGZvdW5kID0gMDsKKworCQkJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0
cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVM
TCkgeworCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICIlczogTlVMTCBpZmFcbiIs
CisJCQkJCQkJX19mdW5jX18pOworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKChz
Y3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkgJiYKKwkJCQkJICAgICgh
c2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgbGFkZHItPmlmYSkpKSB7CisJCQkJCQljb250aW51
ZTsKKwkJCQkJfQorCQkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJCQkJCWZvdW5kID0g
MTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICghZm91bmQpIHsKKwkJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWdvdG8gb3V0X29mX2l0Owor
CQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJfSBlbHNlIHsKKwkJCQlzd2l0Y2gg
KGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisJCQkJ
eworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCQlzaW4gPSAoc3RydWN0IHNv
Y2thZGRyX2luICopYWRkcjsKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAu
aW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikg
IT0gMCkgeworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQkJ
Z290byBvdXRfb2ZfaXQ7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCXsKKwkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKworCQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwor
CQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJ
CSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJCWdvdG8gb3V0X29mX2l0Owor
CQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlnb3RvIG91dF9vZl9pdDsKKwkJ
CQl9CisjZW5kaWYKKwkJCX0KKwkJCWlmIChzY3RwX3NldF9wcmltYXJ5X2lwX2FkZHJlc3Nfc2Eo
c3RjYiwgYWRkcikgIT0gMCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICBTQ1RQX09VVFBVVF9GUk9N
X1NPQ0tPUFQsIFNDVFBfU09fTE9DS0VEKTsKKwkJb3V0X29mX2l0OgorCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFM
OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQklORFhfQUREX0FERFI6CisJeworCQlz
dHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKmFkZHJzOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCQlzdHJ1Y3QgdGhyZWFkICp0ZDsKKwor
CQl0ZCA9IChzdHJ1Y3QgdGhyZWFkICopcDsKKyNlbmRpZgorCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGFkZHJzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywKKwkJCQkgICAgb3B0c2l6
ZSk7CisjaWZkZWYgSU5FVAorCQlpZiAoYWRkcnMtPmFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU
KSB7CisJCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMpIC0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7CisJCQl9Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJ
CQlpZiAodGQgIT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA0KHRkLT50ZF91Y3Jl
ZCwgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShhZGRycy0+YWRkcikpLT5zaW5fYWRkcikpKSkg
eworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UKKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChhZGRycy0+YWRkci0+c2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMp
IC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
IHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJ
fQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAw
MAorCQkJaWYgKHRkICE9IE5VTEwgJiYgKGVycm9yID0gcHJpc29uX2xvY2FsX2lwNih0ZC0+dGRf
dWNyZWQsICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGFkZHJzLT5hZGRyKSktPnNpbjZfYWRk
ciksCisJCQkJCQkJCQkJCSAgIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkgIT0gMCkpKSAhPSAwKSB7
CisJCQkgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIGVycm9yKTsKKwkJCSAgYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJfSBlbHNlCisj
ZW5kaWYKKwkJeworCQkgICAgICAgZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCSAgICAgICBicmVh
azsKKwkJfQorCQlzY3RwX2JpbmR4X2FkZF9hZGRyZXNzKHNvLCBpbnAsIGFkZHJzLT5hZGRyLAor
CQkJCSAgICAgICBhZGRycy0+c2dldF9hc3NvY19pZCwgdnJmX2lkLAorCQkJCSAgICAgICAmZXJy
b3IsIHApOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0JJTkRYX1JFTV9BRERSOgorCXsKKwkJ
c3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzICphZGRyczsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkJc3RydWN0IHRocmVhZCAqdGQ7CisJ
CXRkID0gKHN0cnVjdCB0aHJlYWQgKilwOworCisjZW5kaWYKKwkJU0NUUF9DSEVDS19BTkRfQ0FT
VChhZGRycywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMsIG9wdHNpemUpOworI2lm
ZGVmIElORVQKKwkJaWYgKGFkZHJzLT5hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJ
aWYgKG9wdHNpemUgPCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKSAtIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHIpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAorCQlpZiAodGQg
IT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA0KHRkLT50ZF91Y3JlZCwgJigoKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKShhZGRycy0+YWRkcikpLT5zaW5fYWRkcikpKSkgeworCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCWlmIChhZGRycy0+YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJ
CQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMpIC0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOworCQkJfQorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAorCQkJaWYg
KHRkICE9IE5VTEwgJiYKKwkJCSAgICAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHRkLT50ZF91
Y3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopKGFkZHJzLT5hZGRyKSktPnNpbjZfYWRkciksCisJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoU0NUUF9JUFY2X1Y2T05MWShpbnApICE9IDApKSkgIT0gMCkgeworCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UKKyNlbmRpZgor
CQl7CisJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJCWJyZWFrOworCQl9CisJCXNjdHBfYmlu
ZHhfZGVsZXRlX2FkZHJlc3MoaW5wLCBhZGRycy0+YWRkciwKKwkJCQkJICBhZGRycy0+c2dldF9h
c3NvY19pZCwgdnJmX2lkLAorCQkJCQkgICZlcnJvcik7CisJCWJyZWFrOworCX0KKyNpZmRlZiBf
X0FQUExFX18KKwljYXNlIFNDVFBfTElTVEVOX0ZJWDoKKwkJLyogb25seSBhcHBsaWVzIHRvIG9u
ZS10by1tYW55IHNvY2tldHMgKi8KKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1VEUFRZUEUpIHsKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgQUNDRVBUQ09OTiBmbGFnIGlzIE9G
RiAqLworCQkJc28tPnNvX29wdGlvbnMgJj0gflNPX0FDQ0VQVENPTk47CisJCX0gZWxzZSB7CisJ
CQkvKiBvdGhlcndpc2UsIG5vdCBhbGxvd2VkICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYJCQkJLyogX19BUFBMRV9fICovCisJY2Fz
ZSBTQ1RQX0VWRU5UOgorCXsKKwkJc3RydWN0IHNjdHBfZXZlbnQgKmV2ZW50OworCQl1aW50MzJf
dCBldmVudF90eXBlOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZlbnQsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfZXZlbnQsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGV2
ZW50LT5zZV9hc3NvY19pZCk7CisJCXN3aXRjaCAoZXZlbnQtPnNlX3R5cGUpIHsKKwkJY2FzZSBT
Q1RQX0FTU09DX0NIQU5HRToKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWQVNT
T0NFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QRUVSX0FERFJfQ0hBTkdFOgorCQkJZXZl
bnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQ7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1JFTU9URV9FUlJPUjoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNW
UEVFUkVSUjsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU0VORF9GQUlMRUQ6CisJCQlldmVudF90
eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVDsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfU0hVVERPV05fRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVD
VlNIVVRET1dORVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FU
SU9OOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UOworCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOgorCQkJZXZlbnRfdHlw
ZSA9IFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQVVU
SEVOVElDQVRJT05fRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQVVUSEVW
TlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVDoKKwkJCWV2ZW50
X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9TRU5ERVJfRFJZX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdT
X0RSWUVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9F
VkVOVDoKKwkJCWV2ZW50X3R5cGUgPSAwOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PVFNVUCk7CisJCQllcnJvciA9IEVO
T1RTVVA7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UOgorCQkJZXZl
bnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX0FTU09DX1JFU0VURVZOVDsKKwkJCWJyZWFrOworCQlj
YXNlIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9G
TEFHU19TVFJFQU1fQ0hBTkdFRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU0VORF9GQUlM
RURfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVW
TlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWV2ZW50X3R5cGUgPSAwOworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGV2ZW50X3R5
cGUgPiAwKSB7CisJCQlpZiAoc3RjYikgeworCQkJCWlmIChldmVudC0+c2Vfb24pIHsKKwkJCQkJ
c2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBldmVudF90eXBlKTsKKwkJCQkJaWYgKGV2
ZW50X3R5cGUgPT0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCkgeworCQkJCQkJaWYgKFRBSUxRX0VN
UFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpICYmCisJCQkJCQkgICAgVEFJTFFfRU1QVFkoJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSkgJiYKKwkJCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVl
dWVfY250ID09IDApKSB7CisJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NFTkRF
Ul9EUlksIHN0Y2IsICAwLCBOVUxMLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQl9CisJCQkJCX0K
KwkJCQl9IGVsc2UgeworCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBldmVu
dF90eXBlKTsKKwkJCQl9CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJfSBlbHNlIHsK
KwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IHdhbnQgdG8gc2VuZCB1cCBhIHN0b3JtIG9mIGV2ZW50
cywKKwkJCQkgKiBzbyByZXR1cm4gYW4gZXJyb3IgZm9yIHNlbmRlciBkcnkgZXZlbnRzCisJCQkJ
ICovCisJCQkJaWYgKChldmVudF90eXBlID09IFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpICYmCisJ
CQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgPT0gMCkg
JiYKKwkJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSA9PSAwKSAmJgorCQkJCSAgICAoKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NP
QykgfHwKKwkJCQkgICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09D
KSkpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRU5PVFNVUCk7CisJCQkJCWVycm9yID0gRU5PVFNVUDsKKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKKwkJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkJICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNT
T0MpIHx8CisJCQkJICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7
CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChldmVudC0+c2Vfb24pIHsKKwkJ
CQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIGV2ZW50X3R5cGUpOworCQkJCQl9IGVsc2UgeworCQkJ
CQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIGV2ZW50X3R5cGUpOworCQkJCQl9CisJCQkJCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJaWYgKChldmVudC0+c2VfYXNzb2NfaWQgPT0g
U0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJCSAgICAoZXZlbnQtPnNlX2Fzc29jX2lkID09IFND
VFBfQUxMX0FTU09DKSkgeworCQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCQlMSVNUX0ZP
UkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJCWlmIChldmVudC0+c2Vfb24pIHsKKwkJCQkJCQlz
Y3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOworCQkJCQkJfSBlbHNl
IHsKKwkJCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBldmVudF90eXBlKTsK
KwkJCQkJCX0KKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJfQorCQkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCQkJfQorCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUkVDVlJDVklORk86CisJeworCQlpbnQgKm9ub2ZmOworCisJCVNDVFBfQ0hFQ0tfQU5E
X0NBU1Qob25vZmYsIG9wdHZhbCwgaW50LCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJaWYgKCpvbm9mZiAhPSAwKSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19SRUNWUkNWSU5GTyk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pOworCQl9CisJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNWTlhUSU5GTzoKKwl7CisJCWludCAq
b25vZmY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChvbm9mZiwgb3B0dmFsLCBpbnQsIG9wdHNp
emUpOworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoKm9ub2ZmICE9IDApIHsKKwkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKTsKKwkJfSBlbHNl
IHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTyk7
CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQ
X0RFRkFVTFRfU05ESU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX3NuZGluZm8gKmluZm87CisJCXVp
bnQxNl90IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGluZm8sIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfc25kaW5mbywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwg
aW5mby0+c25kX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaWYgKGluZm8tPnNuZF9z
aWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQu
c2luZm9fc3RyZWFtID0gaW5mby0+c25kX3NpZDsKKwkJCQlwb2xpY3kgPSBQUl9TQ1RQX1BPTElD
WShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlzdGNiLT5hc29jLmRlZl9z
ZW5kLnNpbmZvX2ZsYWdzID0gaW5mby0+c25kX2ZsYWdzOworCQkJCXN0Y2ItPmFzb2MuZGVmX3Nl
bmQuc2luZm9fZmxhZ3MgfD0gcG9saWN5OworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9f
cHBpZCA9IGluZm8tPnNuZF9wcGlkOworCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fY29u
dGV4dCA9IGluZm8tPnNuZF9jb250ZXh0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8
CisJCQkgICAgKGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlT
Q1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fc3RyZWFtID0gaW5m
by0+c25kX3NpZDsKKwkJCQlwb2xpY3kgPSBQUl9TQ1RQX1BPTElDWShpbnAtPmRlZl9zZW5kLnNp
bmZvX2ZsYWdzKTsKKwkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzID0gaW5mby0+c25kX2Zs
YWdzOworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gcG9saWN5OworCQkJCWlucC0+
ZGVmX3NlbmQuc2luZm9fcHBpZCA9IGluZm8tPnNuZF9wcGlkOworCQkJCWlucC0+ZGVmX3NlbmQu
c2luZm9fY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0OworCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCX0KKwkJCWlmICgoaW5mby0+c25kX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9B
U1NPQykgfHwKKwkJCSAgICAoaW5mby0+c25kX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkg
eworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAt
PnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCQkJaWYgKGluZm8tPnNuZF9zaWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgewor
CQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19zdHJlYW0gPSBpbmZvLT5zbmRfc2lkOwor
CQkJCQkJcG9saWN5ID0gUFJfU0NUUF9QT0xJQ1koc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19m
bGFncyk7CisJCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzID0gaW5mby0+c25k
X2ZsYWdzOworCQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBwb2xpY3k7
CisJCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX3BwaWQgPSBpbmZvLT5zbmRfcHBpZDsK
KwkJCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fY29udGV4dCA9IGluZm8tPnNuZF9jb250
ZXh0OworCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
REVGQVVMVF9QUklORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyAqaW5mbzsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGluZm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfZGVmYXVs
dF9wcmluZm8sIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGluZm8tPnBy
X2Fzc29jX2lkKTsKKworCQlpZiAoaW5mby0+cHJfcG9saWN5ID4gU0NUUF9QUl9TQ1RQX01BWCkg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJ
aWYgKHN0Y2IpIHsKKwkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgJj0gMHhmZmYw
OworCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBpbmZvLT5wcl9wb2xpY3k7
CisJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1
ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoaW5mby0+cHJf
YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAgKGluZm8tPnByX2Fzc29j
X2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJ
aW5wLT5kZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7CisJCQkJaW5wLT5kZWZfc2VuZC5z
aW5mb19mbGFncyB8PSBpbmZvLT5wcl9wb2xpY3k7CisJCQkJaW5wLT5kZWZfc2VuZC5zaW5mb190
aW1ldG9saXZlID0gaW5mby0+cHJfdmFsdWU7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwor
CQkJfQorCQkJaWYgKChpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8
CisJCQkgICAgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNv
Y19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJ
c3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7CisJCQkJCXN0Y2ItPmFz
b2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gaW5mby0+cHJfcG9saWN5OworCQkJCQlzdGNiLT5h
c29jLmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBpbmZvLT5wcl92YWx1ZTsKKwkJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QRUVSX0FERFJfVEhMRFM6CisJCS8q
IEFwcGxpZXMgdG8gdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uICovCisJeworCQlzdHJ1Y3Qgc2N0
cF9wYWRkcnRobGRzICp0aGxkczsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQlzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJU0NUUF9DSEVDS19BTkRf
Q0FTVCh0aGxkcywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRzLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCB0aGxkcy0+c3B0X2Fzc29jX2lkKTsKKworI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJaWYgKHRobGRzLT5zcHRfYWRkcmVzcy5z
c19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisK
KwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7CisJ
CQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlpbjZf
c2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJfQorI2Vsc2UKKwkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOworI2VuZGlmCisJCWlmIChz
dGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJfSBl
bHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNi
IGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1Qg
YSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsKKwkJCVNDVFBfSU5QX0lO
Q1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5w
LCBhZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ldCwgTlVM
TCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKKwkJCX0KKwkJfQorCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCA9PSBOVUxMKSkg
eworI2lmZGVmIElORVQKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCisJ
CQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9p
biAqKWFkZHI7CisJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpIHsK
KwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVj
dCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilhZGRyOworCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRk
cikpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFG
X0NPTk4pIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9
IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRy
ICE9IE5VTEwpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisj
ZW5kaWYKKwkJCXsKKwkJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICh0
aGxkcy0+c3B0X3BhdGhjcHRobGQgIT0gMHhmZmZmKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIGVycm9yKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCWlm
IChuZXQgIT0gTlVMTCkgeworCQkJCW5ldC0+ZmFpbHVyZV90aHJlc2hvbGQgPSB0aGxkcy0+c3B0
X3BhdGhtYXhyeHQ7CisJCQkJbmV0LT5wZl90aHJlc2hvbGQgPSB0aGxkcy0+c3B0X3BhdGhwZnRo
bGQ7CisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQkJCQlpZiAo
KG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB8fAorCQkJCQkgICAg
KG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQluZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlm
ICgobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+cGZfdGhyZXNob2xkKSAmJgorCQkJCQkgICAgKG5l
dC0+ZXJyb3JfY291bnQgPD0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkpIHsKKwkJCQkJCW5ldC0+
ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0
LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0hFQVJUQkVBVCwKKwkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBu
ZXQsCisJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9M
T0NfMTcpOworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJCWlmIChuZXQtPmVycm9y
X2NvdW50ID4gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJbmV0LT5kZXN0X3N0YXRl
ICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9U
SUZZX0lOVEVSRkFDRV9ET1dOLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJ
fQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50IDw9IG5ldC0+ZmFpbHVy
ZV90aHJlc2hvbGQpIHsKKwkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hB
QkxFOworCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3Rj
YiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2Ugewor
CQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJ
CQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aG1heHJ4dDsKKwkJCQkJ
bmV0LT5wZl90aHJlc2hvbGQgPSB0aGxkcy0+c3B0X3BhdGhwZnRobGQ7CisJCQkJCWlmIChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3Vu
dCA+IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpIHx8CisJCQkJCQkgICAgKG5ldC0+ZXJyb3JfY291
bnQgPD0gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5T
Q1RQX0FERFJfUEY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQlpZiAoKG5ldC0+ZXJy
b3JfY291bnQgPiBuZXQtPnBmX3RocmVzaG9sZCkgJiYKKwkJCQkJCSAgICAobmV0LT5lcnJvcl9j
b3VudCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0
ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJCQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9T
T19MT0NLRUQpOworCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRC
RUFULAorCQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJ
CQkJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzE4
KTsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJCQkJCWlmIChuZXQtPmVycm9y
X2NvdW50ID4gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9O
T1RJRllfSU5URVJGQUNFX0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJ
CQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5m
YWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJf
UkVBQ0hBQkxFOworCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0Vf
VVAsIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJ
fQorCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlID0gdGhsZHMtPnNwdF9wYXRobWF4cnh0
OworCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9wZl90aHJlc2hvbGQgPSB0aGxkcy0+c3B0X3BhdGhw
ZnRobGQ7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAg
KHRobGRzLT5zcHRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAuZGVmX25ldF9mYWlsdXJlID0gdGhsZHMt
PnNwdF9wYXRobWF4cnh0OworCQkJCWlucC0+c2N0cF9lcC5kZWZfbmV0X3BmX3RocmVzaG9sZCA9
IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0K
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUOgorCXsKKwkJ
c3RydWN0IHNjdHBfdWRwZW5jYXBzICplbmNhcHM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
KwkJc3RydWN0IHNvY2thZGRyICphZGRyOworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJ
TkVUNikKKwkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKKyNlbmRpZgorCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoZW5jYXBzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3VkcGVuY2Fwcywgb3B0
c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgZW5jYXBzLT5zdWVfYXNzb2NfaWQp
OworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAoZW5jYXBzLT5z
dWVfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZlbmNhcHMtPnN1
ZV9hZGRyZXNzOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIp
KSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworCQkJfQorCQl9IGVsc2Ugewor
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBzLT5zdWVfYWRkcmVzczsKKwkJfQor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBzLT5zdWVfYWRkcmVzczsK
KyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3Rj
YiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBp
dCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBh
cmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7
CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKwkJfQorCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElORVQKKwkJCWlmIChh
ZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCisJCQkJc3RydWN0IHNvY2thZGRyX2luICpz
aW47CisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJaWYgKHNpbi0+
c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7
CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGFkZHItPnNh
X2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisK
KwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJCWlmICghSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJ
YnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQlzdHJ1Y3Qgc29j
a2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
KWFkZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsKKwkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQkJZXJyb3Ig
PSBFQUZOT1NVUFBPUlQ7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJy
b3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKworCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJ
CQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQluZXQtPnBvcnQgPSBlbmNhcHMtPnN1ZV9wb3J0Owor
CQkJfSBlbHNlIHsKKwkJCQlzdGNiLT5hc29jLnBvcnQgPSBlbmNhcHMtPnN1ZV9wb3J0OworCQkJ
fQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChlbmNhcHMtPnN1
ZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhp
bnApOworCQkJCWlucC0+c2N0cF9lcC5wb3J0ID0gZW5jYXBzLT5zdWVfcG9ydDsKKwkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9FQ05fU1VQ
UE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUp
OworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0
Y2IpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJF
X0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKGF2LT5hc3NvY192
YWx1ZSA9PSAwKSB7CisJCQkJCWlucC0+ZWNuX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsK
KwkJCQkJaW5wLT5lY25fc3VwcG9ydGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFM
OworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUFJfU1VQUE9SVEVEOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewor
CQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7
CisJCQkJCWlucC0+cHJzY3RwX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5w
LT5wcnNjdHBfc3VwcG9ydGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJ
fQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9TVVBQT1JURUQ6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9T
VENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJ
aWYgKChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgJiYKKwkJCQkgICAgKGlucC0+YXNjb25mX3N1cHBv
cnRlZCA9PSAxKSkgeworCQkJCSAgICAJLyogQVVUSCBpcyByZXF1aXJlZCBmb3IgQVNDT05GICov
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCX0gZWxzZSB7CisJ
CQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkg
eworCQkJCQkJaW5wLT5hdXRoX3N1cHBvcnRlZCA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQlp
bnAtPmF1dGhfc3VwcG9ydGVkID0gMTsKKwkJCQkJfQorCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlO
VkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNDT05GX1NVUFBPUlRF
RDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykpIHsKKwkJCQlpZiAoKGF2LT5hc3NvY192YWx1ZSAhPSAwKSAmJgorCQkJCSAgICAoaW5wLT5h
dXRoX3N1cHBvcnRlZCA9PSAwKSkgeworCQkJCSAgICAJLyogQVVUSCBpcyByZXF1aXJlZCBmb3Ig
QVNDT05GICovCisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCX0g
ZWxzZSB7CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChhdi0+YXNzb2NfdmFs
dWUgPT0gMCkgeworCQkJCQkJaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0gMDsKKwkJCQkJCXNjdHBf
YXV0aF9kZWxldGVfY2h1bmsoU0NUUF9BU0NPTkYsCisJCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJCQkJCQlzY3RwX2F1dGhfZGVs
ZXRlX2NodW5rKFNDVFBfQVNDT05GX0FDSywKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
aW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlu
cC0+YXNjb25mX3N1cHBvcnRlZCA9IDE7CisJCQkJCQlzY3RwX2F1dGhfYWRkX2NodW5rKFNDVFBf
QVNDT05GLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAubG9jYWxfYXV0
aF9jaHVua3MpOworCQkJCQkJc2N0cF9hdXRoX2FkZF9jaHVuayhTQ1RQX0FTQ09ORl9BQ0ssCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7
CisJCQkJCX0KKwkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCX0KKwkJCX0gZWxzZSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVh
azsKKwl9CisJY2FzZSBTQ1RQX1JFQ09ORklHX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJ
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkg
ICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9X
TE9DSyhpbnApOworCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgeworCQkJCQlpbnAtPnJl
Y29uZmlnX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5wLT5yZWNvbmZpZ19z
dXBwb3J0ZWQgPSAxOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9OUlNBQ0tfU1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwg
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJ
CSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5Q
X1dMT0NLKGlucCk7CisJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7CisJCQkJCWlucC0+
bnJzYWNrX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5wLT5ucnNhY2tfc3Vw
cG9ydGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNl
IHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfUEtURFJPUF9TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ugewor
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKKwkJCQkJaW5wLT5w
a3Rkcm9wX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5wLT5wa3Rkcm9wX3N1
cHBvcnRlZCA9IDE7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX01BWF9DV05EOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgKmF2OworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJU0NUUF9DSEVDS19BTkRf
Q0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgewor
CQkJc3RjYi0+YXNvYy5tYXhfY3duZCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCWlmIChzdGNiLT5h
c29jLm1heF9jd25kID4gMCkgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5u
ZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJaWYgKChuZXQtPmN3bmQgPiBzdGNiLT5hc29jLm1heF9j
d25kKSAmJgorCQkJCQkgICAgKG5ldC0+Y3duZCA+IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcikpKSkgeworCQkJCQkJbmV0LT5jd25kID0gc3RjYi0+YXNvYy5tYXhfY3duZDsKKwkJ
CQkJCWlmIChuZXQtPmN3bmQgPCAobmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSkg
eworCQkJCQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
KwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewor
CQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5tYXhfY3duZCA9IGF2LT5hc3NvY192
YWx1ZTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWRl
ZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJZXJyb3IgPSBFTk9QUk9UT09QVDsKKwkJYnJl
YWs7CisJfSAvKiBlbmQgc3dpdGNoIChvcHQpICovCisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKK2ludAorc2N0cF9jdGxvdXRwdXQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2Nrb3B0ICpzb3B0KQoreworCXZvaWQgKm9wdHZhbCA9IE5VTEw7CisJc2l6ZV90IG9wdHNp
emUgPSAwOworCXZvaWQgKnA7CisJaW50IGVycm9yID0gMDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJaWYgKChzb3B0LT5zb3B0X2xldmVsID09IFNPTF9TT0NLRVQpICYmCisJICAg
IChzb3B0LT5zb3B0X25hbWUgPT0gU09fU0VURklCKSkgeworCQlpbnAgPSAoc3RydWN0IHNjdHBf
aW5wY2IgKilzby0+c29fcGNiOworCQlpZiAoaW5wID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoc28tPnNvX3BjYiwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
Tk9CVUZTKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQlpbnAtPmZpYm51bSA9IHNvLT5zb19maWJudW07CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZW5kaWYKKwlpZiAoc29wdC0+c29wdF9sZXZlbCAhPSBJ
UFBST1RPX1NDVFApIHsKKwkJLyogd3JvbmcgcHJvdG8gbGV2ZWwuLi4gc2VuZCBiYWNrIHVwIHRv
IElQICovCisjaWZkZWYgSU5FVDYKKwkJaWYgKElOUF9DSEVDS19TT0NLQUYoc28sIEFGX0lORVQ2
KSkKKwkJCWVycm9yID0gaXA2X2N0bG91dHB1dChzbywgc29wdCk7CisjZW5kaWYJCQkJLyogSU5F
VDYgKi8KKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWVsc2UKKyNlbmRp
ZgorI2lmZGVmIElORVQKKwkJCWVycm9yID0gaXBfY3Rsb3V0cHV0KHNvLCBzb3B0KTsKKyNlbmRp
ZgorCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJb3B0c2l6ZSA9IHNvcHQtPnNvcHRfdmFsc2l6ZTsK
KwlpZiAob3B0c2l6ZSkgeworCQlTQ1RQX01BTExPQyhvcHR2YWwsIHZvaWQgKiwgb3B0c2l6ZSwg
U0NUUF9NX1NPQ0tPUFQpOworCQlpZiAob3B0dmFsID09IE5VTEwpIHsKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoc28tPnNvX3BjYiwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
Tk9CVUZTKTsKKwkJCXJldHVybiAoRU5PQlVGUyk7CisJCX0KKwkJZXJyb3IgPSBzb29wdGNvcHlp
bihzb3B0LCBvcHR2YWwsIG9wdHNpemUsIG9wdHNpemUpOworCQlpZiAoZXJyb3IpIHsKKwkJCVND
VFBfRlJFRShvcHR2YWwsIFNDVFBfTV9TT0NLT1BUKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQor
I2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAp
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJcCA9ICh2b2lkICopc29wdC0+c29wdF90ZDsKKyNl
bHNlCisJcCA9ICh2b2lkICopc29wdC0+c29wdF9wOworI2VuZGlmCisJaWYgKHNvcHQtPnNvcHRf
ZGlyID09IFNPUFRfU0VUKSB7CisJCWVycm9yID0gc2N0cF9zZXRvcHQoc28sIHNvcHQtPnNvcHRf
bmFtZSwgb3B0dmFsLCBvcHRzaXplLCBwKTsKKwl9IGVsc2UgaWYgKHNvcHQtPnNvcHRfZGlyID09
IFNPUFRfR0VUKSB7CisJCWVycm9yID0gc2N0cF9nZXRvcHQoc28sIHNvcHQtPnNvcHRfbmFtZSwg
b3B0dmFsLCAmb3B0c2l6ZSwgcCk7CisJfSBlbHNlIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChz
by0+c29fcGNiLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CWVycm9yID0gRUlOVkFMOworCX0KKwlpZiAoKGVycm9yID09IDApICYmIChvcHR2YWwgIT0gTlVM
TCkpIHsKKwkJZXJyb3IgPSBzb29wdGNvcHlvdXQoc29wdCwgb3B0dmFsLCBvcHRzaXplKTsKKwkJ
U0NUUF9GUkVFKG9wdHZhbCwgU0NUUF9NX1NPQ0tPUFQpOworCX0gZWxzZSBpZiAob3B0dmFsICE9
IE5VTEwpIHsKKwkJU0NUUF9GUkVFKG9wdHZhbCwgU0NUUF9NX1NPQ0tPUFQpOworCX0KK291dDoK
KwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWZkZWYgSU5FVAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorc3RhdGljIGludAor
c2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0
cnVjdCB0aHJlYWQgKnApCit7CisjZWxzZQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGludAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBwcm9jICpwKQoreworI2VsaWYgZGVm
aW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF9jb25u
ZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJdm9pZCAq
cCA9IE5VTEw7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorc3RhdGljIGludAorc2N0cF9j
b25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIFBLVEhSRUFE
IHApCit7CisjZWxzZQorc3RhdGljIGludAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOworCisjZW5kaWYKKyNlbmRpZgor
I2lmZGVmIFNDVFBfTVZSRgorCWludCBpLCBmbmQgPSAwOworI2VuZGlmCisJaW50IGVycm9yID0g
MDsKKwlpbnQgY3JlYXRlX2xvY2tfb24gPSAwOworCXVpbnQzMl90IHZyZl9pZDsKKwlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9IE5VTEw7CisKKwlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgewor
CQkvKiBJIG1hZGUgdGhlIHNhbWUgYXMgVENQIHNpbmNlIHdlIGFyZSBub3Qgc2V0dXA/ICovCisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUNPTk5SRVNFVCk7CisJfQorCWlmIChhZGRyID09IE5V
TEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9CisKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisgICAgICAgIC8qIFRPRE8gX19Vc2Vyc3BhY2VfXyBmYWxscyBpbnRv
IHRoaXMgY29kZSBmb3IgSVB2NiBzdHVmZiBhdCB0aGUgbW9tZW50Li4uICovCisjZW5kaWYKKyNp
ZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgp
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJc3dpdGNoIChhZGRyLT5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAorCQlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42cDsKKworI2VuZGlmCisJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5W
QUwpOworCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAwMDAwCisJCXNpbjZwID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQlpZiAo
cCAhPSBOVUxMICYmIChlcnJvciA9IHByaXNvbl9yZW1vdGVfaXA2KHAtPnRkX3VjcmVkLCAmc2lu
NnAtPnNpbjZfYWRkcikpICE9IDApIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCXJldHVybiAoZXJyb3Ip
OworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2Ug
QUZfSU5FVDoKKwl7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDAwCisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lucDsKKworI2VuZGlmCisjaWYg
IWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAo
RUlOVkFMKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCXNpbnAgPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRk
cjsKKwkJaWYgKHAgIT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fcmVtb3RlX2lwNChwLT50ZF91
Y3JlZCwgJnNpbnAtPnNpbl9hZGRyKSkgIT0gMCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJcmV0dXJu
IChlcnJvcik7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0Ogor
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFQUZOT1NVUFBPUlQpOworCQlyZXR1cm4gKEVBRk5PU1VQUE9SVCk7CisJfQorI2VuZGlm
CisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsK
KwljcmVhdGVfbG9ja19vbiA9IDE7CisKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkpIHsKKwkJLyogU2hvdWxkIEkgcmVhbGx5IHVubG9jayA/
ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVGQVVMVCk7CisJCWVycm9yID0gRUZBVUxUOworCQlnb3RvIG91dF9ub3c7CisJ
fQorI2lmZGVmIElORVQ2CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpID09IDApICYmCisJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgJiYKKwkgICAgKGFkZHItPnNhX2ZhbWlseSAh
PSBBRl9DT05OKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBv
dXRfbm93OworCX0KKyNlbmRpZgorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVU5CT1VORCkgPT0KKwkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgeworCQkvKiBCaW5k
IGEgZXBoZW1lcmFsIHBvcnQgKi8KKwkJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIE5VTEws
IE5VTEwsIHApOworCQlpZiAoZXJyb3IpIHsKKwkJCWdvdG8gb3V0X25vdzsKKwkJfQorCX0KKwkv
KiBOb3cgZG8gd2UgY29ubmVjdD8gKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpICYmCisJICAgIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NU
UF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5W
QUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSAmJgorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQ09OTkVDVEVEKSkgeworCQkvKiBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgQU5EIHRoZSBU
Q1AgbW9kZWwgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUFERFJJTlVTRSk7CisJCWVycm9yID0gRUFERFJJTlVTRTsKKwkJ
Z290byBvdXRfbm93OworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Q09OTkVDVEVEKSB7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCXN0Y2IgPSBMSVNUX0ZJUlNU
KCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCX0gZWxz
ZSB7CisJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2Vw
X2FkZHIoKSB3aWxsCisJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFz
IGxvbmcgYXMgdGhlIGxvY2tlZAorCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRD
Qi4uIGFrYSBOVUxMLgorCQkgKi8KKwkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJc3RjYiA9
IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgTlVMTCwgTlVMTCwgTlVM
TCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJ
CX0gZWxzZSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0KKwl9CisJaWYgKHN0Y2Ig
IT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcgdXAgYW4gYXNzb2NpYXRp
b24gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQllcnJvciA9IEVBTFJFQURZOworCQlnb3RvIG91dF9u
b3c7CisJfQorCisJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworI2lmZGVmIFNDVFBfTVZSRgor
CWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJaWYgKHZyZl9pZCA9PSBp
bnAtPm1fdnJmX2lkc1tpXSkgeworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlm
ICghZm5kKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9u
b3c7CisJfQorI2VuZGlmCisJLyogV2UgYXJlIEdPT0QgdG8gZ28gKi8KKwlzdGNiID0gc2N0cF9h
bG9jX2Fzc29jKGlucCwgYWRkciwgJmVycm9yLCAwLCB2cmZfaWQsCisJICAgICAgICAgICAgICAg
ICAgICAgICBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50LAorCSAgICAgICAgICAg
ICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnBvcnQsIHApOworCWlmIChzdGNiID09IE5VTEwpIHsK
KwkJLyogR2FrISBubyBtZW1vcnkgKi8KKwkJZ290byBvdXRfbm93OworCX0KKwlpZiAoc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKKwkJc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7CisJCS8qIFNl
dCB0aGUgY29ubmVjdGVkIGZsYWcgc28gd2UgY2FuIHF1ZXVlIGRhdGEgKi8KKwkJc29pc2Nvbm5l
Y3Rpbmcoc28pOworCX0KKwlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NUUF9TVEFURV9D
T09LSUVfV0FJVCk7CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGlt
ZV9lbnRlcmVkKTsKKworCS8qIGluaXRpYWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBm
b3IgdGhlIGFzc29jICovCisJc2N0cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKGlucCwgc3RjYik7
CisKKwlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworIG91dF9ub3c6CisJaWYgKGNyZWF0ZV9sb2NrX29uKSB7CisJ
CVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQorCisJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQoraW50CitzY3RwY29ubl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIpCit7CisjaWZkZWYgU0NUUF9NVlJGCisJaW50IGksIGZuZCA9IDA7Cisj
ZW5kaWYKKwl2b2lkICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOworCWludCBjcmVhdGVfbG9j
a19vbiA9IDA7CisJdWludDMyX3QgdnJmX2lkOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJ
c3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBj
YiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCS8qIEkgbWFkZSB0aGUgc2Ft
ZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0
dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGFkZHIt
PnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0FfTEVOCisJCWlmIChhZGRy
LT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKwlj
YXNlIEFGX0NPTk46CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJu
IChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFGTk9T
VVBQT1JUKTsKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOworCX0KKwlTQ1RQX0lOUF9JTkNSX1JF
RihpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOworCWNyZWF0ZV9sb2NrX29uID0g
MTsKKworCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSkgeworCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZBVUxUKTsK
KwkgICAgICAgIGVycm9yID0gRUZBVUxUOworCQlnb3RvIG91dF9ub3c7CisJfQorI2lmZGVmIElO
RVQ2CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09
IDApICYmCisJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7CisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJfQorI2VuZGlmCisJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSBTQ1RQX1BDQl9G
TEFHU19VTkJPVU5EKSB7CisJCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9ydCAqLworCQllcnJvciA9
IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCk7CisJCWlmIChlcnJvcikgeworCQkJ
Z290byBvdXRfbm93OworCQl9CisJfQorCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAqLworCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKKwkgICAgKHNj
dHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRfbm93OworCX0KKwlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCisJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7CisJCS8qIFdlIGFyZSBh
bHJlYWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUREUklOVVNFKTsK
KwkJZXJyb3IgPSBFQUREUklOVVNFOworCQlnb3RvIG91dF9ub3c7CisJfQorCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOworCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2lu
Y2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbGwKKwkJICogZG8gYSBkZWNyZW1l
bnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCisJCSAqIHRjYiAo
bGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCSAqLworCQlTQ1RQX0lO
UF9JTkNSX1JFRihpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigm
aW5wLCBhZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJ
U0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJfQorCX0KKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCS8qIEFscmVhZHkgaGF2ZSBv
ciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7CisJCWVycm9y
ID0gRUFMUkVBRFk7CisJCWdvdG8gb3V0X25vdzsKKwl9CisKKwl2cmZfaWQgPSBpbnAtPmRlZl92
cmZfaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7
IGkrKykgeworCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJCQlmbmQgPSAx
OworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmbmQpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJy
b3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjZW5kaWYKKwkvKiBXZSBhcmUgR09P
RCB0byBnbyAqLworCXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBhZGRyLCAmZXJyb3IsIDAs
IHZyZl9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Blbl9z
dHJlYW1fY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucG9ydCwg
cCk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkvKiBHYWshIG5vIG1lbW9yeSAqLworCQlnb3Rv
IG91dF9ub3c7CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgeworCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENC
X0ZMQUdTX0NPTk5FQ1RFRDsKKwkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4g
cXVldWUgZGF0YSAqLworCQlzb2lzY29ubmVjdGluZyhzbyk7CisJfQorCVNDVFBfU0VUX1NUQVRF
KCZzdGNiLT5hc29jLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKKwkodm9pZClTQ1RQX0dFVFRJ
TUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworCisJLyogaW5pdGlhbGl6ZSBh
dXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgYXNzb2MgKi8KKwlzY3RwX2luaXRpYWxp
emVfYXV0aF9wYXJhbXMoaW5wLCBzdGNiKTsKKworCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0
Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Cisgb3V0X25vdzoK
KwlpZiAoY3JlYXRlX2xvY2tfb24pIHsKKwkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsK
Kwl9CisKKwlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCXJldHVybiAoZXJyb3IpOworfQorI2Vu
ZGlmCitpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDAwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKK3NjdHBfbGlzdGVuKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHRocmVhZCAqcCkKKyNlbHNlCitz
Y3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHRocmVhZCAqcCkKKyNlbmRpZgor
I2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgYmFja2xvZywgUEtUSFJFQUQgcCkKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K3NjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHByb2Mg
KnApCisjZWxzZQorc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBwcm9jICpw
KQorI2VuZGlmCit7CisJLyoKKwkgKiBOb3RlIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIHBy
b3RvY29sIHByb2Nlc3NpbmcgYmVpbmcgY2FsbGVkCisJICogQUZURVIgYW55IHNvY2tldCBsZXZl
bCBmbGFncyBhbmQgYmFja2xvZyBhcmUgYXBwbGllZCB0byB0aGUKKwkgKiBzb2NrZXQuIFRoZSB0
cmFkaXRpb25hbCB3YXkgdGhhdCB0aGUgc29ja2V0IGZsYWdzIGFyZSBhcHBsaWVkIGlzCisJICog
QUZURVIgcHJvdG9jb2wgcHJvY2Vzc2luZy4gV2UgaGF2ZSBtYWRlIGEgY2hhbmdlIHRvIHRoZQor
CSAqIHN5cy9rZXJuL3VpcGNfc29ja2V0LmMgbW9kdWxlIHRvIHJldmVyc2UgdGhpcyBidXQgdGhp
cyBNVVNUIGJlIGluCisJICogcGxhY2UgaWYgdGhlIHNvY2tldCBBUEkgZm9yIFNDVFAgaXMgdG8g
d29yayBwcm9wZXJseS4KKwkgKi8KKworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHNjdHBfaW5w
Y2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYg
KGlucCA9PSBOVUxMKSB7CisJCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJl
IG5vdCBzZXR1cD8gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9
CisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkp
IHsKKwkJLyogU2VlIGlmIHdlIGhhdmUgYSBsaXN0ZW5lciAqLworCQlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqdGlucDsKKwkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7CisKKwkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkJLyogbm90IGJv
dW5kIGFsbCAqLworCQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJCQlMSVNUX0ZPUkVB
Q0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQkJbWVt
Y3B5KCZzdG9yZSwgJmxhZGRyLT5pZmEtPmFkZHJlc3MsIHNpemVvZihzdG9yZSkpOworCQkJCXN3
aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5F
VDoKKwkJCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJc3RvcmUu
c2luNi5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCWJyZWFrOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJc3RvcmUu
c2Nvbm4uc2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJYnJlYWs7CisjZW5kaWYK
KwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdGlucCA9IHNjdHBfcGNiX2Zp
bmRlcCgmc3RvcmUuc2EsIDAsIDAsIGlucC0+ZGVmX3ZyZl9pZCk7CisJCQkJaWYgKHRpbnAgJiYg
KHRpbnAgIT0gaW5wKSAmJgorCQkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfQUxMR09ORSkgPT0gMCkgJiYKKwkJCQkgICAgKCh0aW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJCQkJICAgIChTQ1RQX0lT
X0xJU1RFTklORyh0aW5wKSkpIHsKKwkJCQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkg
YW5kIGl0cyBub3QgdGhpcyBpbnAuICovCisJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnApOwor
CQkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJCX0gZWxzZSBpZiAodGlucCkgeworCQkJCQlT
Q1RQX0lOUF9ERUNSX1JFRih0aW5wKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBT
ZXR1cCBhIGxvY2FsIGFkZHIgYm91bmQgYWxsICovCisJCQltZW1zZXQoJnN0b3JlLCAwLCBzaXpl
b2Yoc3RvcmUpKTsKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7
CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCQlzdG9yZS5zYS5zYV9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9D
T05OKSB7CisJCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NB
X0xFTgorCQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7
CisjZW5kaWYKKwkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgPT0gMCkgJiYKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JP
VU5EX0NPTk4pID09IDApKSB7CisjZWxzZQorCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgeworI2VuZGlmCisJCQkJc3RvcmUuc2Euc2FfZmFt
aWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJCXN0b3JlLnNhLnNhX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQl9CisjZW5kaWYKKwkJCXN3
aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVU
OgorCQkJCXN0b3JlLnNpbi5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCXN0b3JlLnNpbjYu
c2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCXN0b3JlLnNjb25uLnNj
b25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1
bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aW5wID0gc2N0cF9wY2JfZmluZGVwKCZzdG9yZS5z
YSwgMCwgMCwgaW5wLT5kZWZfdnJmX2lkKTsKKwkJCWlmICh0aW5wICYmICh0aW5wICE9IGlucCkg
JiYKKwkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkgPT0gMCkgJiYKKwkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkJCSAgICAoU0NUUF9JU19MSVNURU5JTkcodGlucCkp
KSB7CisJCQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkgYW5kIGl0cyBub3QgdGhpcyBp
bnAuICovCisJCQkJU0NUUF9JTlBfREVDUl9SRUYodGlucCk7CisJCQkJcmV0dXJuIChFQUREUklO
VVNFKTsKKwkJCX0gZWxzZSBpZiAodGlucCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnAp
OworCQkJfQorCQl9CisJfQorCVNDVFBfSU5QX1JMT0NLKGlucCk7CisjaWZkZWYgU0NUUF9MT0NL
X0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MT0NLX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2xvY2soaW5wLCAoc3RydWN0IHNj
dHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9DS19TT0NLKTsKKwl9CisjZW5kaWYKKyNpZiAoZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwlTT0NLX0xPQ0soc28pOworCWVycm9yID0gc29saXN0ZW5fcHJv
dG9fY2hlY2soc28pOworCVNPQ0tfVU5MT0NLKHNvKTsKKwlpZiAoZXJyb3IpIHsKKwkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisjZW5kaWYKKwlpZiAoKHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpICYmCisJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgeworCQkvKiBU
aGUgdW5sdWNreSBjYXNlCisJCSAqIC0gV2UgYXJlIGluIHRoZSB0Y3AgcG9vbCB3aXRoIHRoaXMg
Z3V5LgorCQkgKiAtIFNvbWVvbmUgZWxzZSBpcyBpbiB0aGUgbWFpbiBpbnAgc2xvdC4KKwkJICog
LSBXZSBtdXN0IG1vdmUgdGhpcyBndXkgKHRoZSBsaXN0ZW5lcikgdG8gdGhlIG1haW4gc2xvdAor
CQkgKiAtIFdlIG11c3QgdGhlbiBtb3ZlIHRoZSBndXkgdGhhdCB3YXMgbGlzdGVuZXIgdG8gdGhl
IFRDUCBQb29sLgorCQkgKi8KKwkJaWYgKHNjdHBfc3dhcF9pbnBjYl9mb3JfbGlzdGVuKGlucCkp
IHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERSSU5VU0UpOworCQkJcmV0
dXJuIChFQUREUklOVVNFKTsKKwkJfQorCX0KKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0NPTk5FQ1RFRCkpIHsKKwkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0
aGUgVENQIG1vZGVsICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFERFJJTlVT
RSk7CisJCXJldHVybiAoRUFERFJJTlVTRSk7CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgeworCQkvKiBX
ZSBtdXN0IGRvIGEgYmluZC4gKi8KKwkJaWYgKChlcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywg
TlVMTCwgTlVMTCwgcCkpKSB7CisJCQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICovCisJ
CQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworI2lmIChk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVm
aW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDEyMDAwMzQKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1VEUFRZUEUpID09IDApIHsKKwkJU09DS19MT0NLKHNvKTsKKwkJc29saXN0ZW5fcHJvdG8o
c28sIGJhY2tsb2cpOworCQlTT0NLX1VOTE9DSyhzbyk7CisJfQorI2VsaWYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gNzAwMDAwIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkvKiBJdCBhcHBlYXJzIGZvciA3LjAgYW5kIG9uLCB3ZSBtdXN0IGFsd2F5cyBj
YWxsIHRoaXMuICovCisJU09DS19MT0NLKHNvKTsKKwlzb2xpc3Rlbl9wcm90byhzbywgYmFja2xv
Zyk7CisjZWxzZQorCVNPQ0tfTE9DSyhzbyk7CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19VRFBUWVBFKSA9PSAwKSB7CisJCXNvbGlzdGVuX3Byb3RvKHNvKTsKKwl9Cisj
ZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0RfdmVy
c2lvbiA8IDEyMDAwMzQKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQ
VFlQRSkgeworCQkvKiByZW1vdmUgdGhlIEFDQ0VQVENPTk4gZmxhZyBmb3Igb25lLXRvLW1hbnkg
c29ja2V0cyAqLworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJc28tPnNvX29wdGlvbnMg
Jj0gflNDVFBfU09fQUNDRVBUQ09OTjsKKyNlbHNlCisJCXNvLT5zb19vcHRpb25zICY9IH5TT19B
Q0NFUFRDT05OOworI2VuZGlmCisJfQorCVNPQ0tfVU5MT0NLKHNvKTsKKyNlbmRpZgorI2lmIChk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDApIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlpZiAoYmFja2xv
ZyA+IDApIHsKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORzsK
Kwl9IGVsc2UgeworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0FDQ0VQVElO
RzsKKwl9CisjZWxzZQorCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19BQ0NFUFRJ
Tkc7CisjZW5kaWYKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJcmV0dXJuIChlcnJvcik7Cit9
CisKK3N0YXRpYyBpbnQgc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQgPSAwOworCitpbnQKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9hY2NlcHQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKmFkZHIpCit7CisjZWxpZiBkZWZpbmVkKF9fUGFu
ZGFfXykKK3NjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsIGludCAqbmFtZWxlbiwKKwkgICAgdm9pZCAqYWNjZXB0X2luZm8sIGludCAqYWNjZXB0X2lu
Zm9fbGVuKQoreworI2Vsc2UKK3NjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
bWJ1ZiAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qg
c29ja2FkZHIgKik7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKyNpZmRlZiBJTkVU
NgorI2lmZGVmIFNDVFBfS0FNRQorCWludCBlcnJvcjsKKyNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8K
KyNlbmRpZgorCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisKKwlpZiAo
aW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9
CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVURQVFlQRSkgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNV
UFApOworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0KKwlpZiAoc28tPnNvX3N0YXRlICYgU1Nf
SVNESVNDT05ORUNURUQpIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQ09OTkFC
T1JURUQpOworCQlyZXR1cm4gKEVDT05OQUJPUlRFRCk7CisJfQorCXN0Y2IgPSBMSVNUX0ZJUlNU
KCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9
CisJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJc3RvcmUg
PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2FkZHI7CisJc3RjYi0+YXNv
Yy5zdGF0ZSAmPSB+U0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUU7CisJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNh
c2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbiwg
c3RydWN0IHNvY2thZGRyX2luICosIHNpemVvZiAqc2luKTsKKwkJaWYgKHNpbiA9PSBOVUxMKQor
CQkJcmV0dXJuIChFTk9NRU0pOworI2Vsc2UKKwkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAq
KWFkZHI7CisJCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisjZW5kaWYKKwkJc2luLT5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJc2luLT5zaW5fbGVu
ID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisJCXNpbi0+c2luX3BvcnQgPSBzdG9yZS5zaW4uc2lu
X3BvcnQ7CisJCXNpbi0+c2luX2FkZHIgPSBzdG9yZS5zaW4uc2luX2FkZHI7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopc2luOworI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKQorCQlTQ1RQX0JVRl9MRU4obmFtKSA9
IHNpemVvZigqc2luKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9NQUxMT0NfU09O
QU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKKwkJaWYgKHNp
bjYgPT0gTlVMTCkKKwkJCXJldHVybiAoRU5PTUVNKTsKKyNlbHNlCisJCXNpbjYgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCW1lbXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsK
KyNlbmRpZgorCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisJCXNpbjYt
PnNpbjZfcG9ydCA9IHN0b3JlLnNpbjYuc2luNl9wb3J0OworCQlzaW42LT5zaW42X2FkZHIgPSBz
dG9yZS5zaW42LnNpbjZfYWRkcjsKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUp
CisjaWZkZWYgU0NUUF9LQU1FCisJCWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNjb3BlKHNpbjYp
KSAhPSAwKSB7CisJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworCQkJcmV0dXJuIChlcnJvcik7
CisJCX0KKyNlbHNlCisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2Fk
ZHIpKQorCQkJLyoKKwkJCSAqIHNpbjYtPnNpbjZfc2NvcGVfaWQgPQorCQkJICogbnRvaHMoc2lu
Ni0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXSk7CisJCQkgKi8KKwkJCWluNl9yZWNvdmVyc2NvcGUo
c2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CS8qIHNraXAgaWZwIGNoZWNrICovCisJCWVs
c2UKKwkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwkvKiBYWFggKi8KKyNlbmRpZiAvKiBTQ1RQ
X0tBTUUgKi8KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopc2luNjsKKyNlbGlmICFkZWZpbmVkKF9fUGFuZGFfXykKKwkJU0NUUF9CVUZfTEVOKG5hbSkg
PSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJf
Y29ubiAqc2Nvbm47CisKKwkJU0NUUF9NQUxMT0NfU09OQU1FKHNjb25uLCBzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJaWYgKHNjb25uID09
IE5VTEwpIHsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCQlzY29ubi0+c2Nvbm5fZmFtaWx5
ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCQlzY29ubi0+c2Nvbm5fbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlzY29ubi0+c2Nvbm5fcG9y
dCA9IHN0b3JlLnNjb25uLnNjb25uX3BvcnQ7CisJCXNjb25uLT5zY29ubl9hZGRyID0gc3RvcmUu
c2Nvbm4uc2Nvbm5fYWRkcjsKKwkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2Nvbm47CisJ
CWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIFRTTkggKi8KKwkJYnJlYWs7CisJ
fQorCS8qIFdha2UgYW55IGRlbGF5ZWQgc2xlZXAgYWN0aW9uICovCisJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeworCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRTsKKwkJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQpIHsKKwkJCWlucC0+
c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVDsKKwkJCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKKwkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fc25kKTsK
KwkJCWlmIChzb3dyaXRlYWJsZShpbnAtPnNjdHBfc29ja2V0KSkgeworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKl9fVXNlcnNwYWNlX18g
Y2FsbGluZyBzb3d3YWt1cF9sb2NrZWQgYmVjYXVzZSBvZiBTT0NLQlVGX0xPQ0sgYWJvdmUuICov
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJc293d2FrZXVwX2xvY2tlZChpbnAtPnNj
dHBfc29ja2V0KTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJLyogc29ja2V0
IGlzIGxvY2tlZCAqLworI2VuZGlmCisJCQkJc293d2FrZXVwKGlucC0+c2N0cF9zb2NrZXQpOwor
I2VuZGlmCisJCQl9IGVsc2UgeworCQkJCVNPQ0tCVUZfVU5MT0NLKCZpbnAtPnNjdHBfc29ja2V0
LT5zb19zbmQpOworCQkJfQorCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJfQorCQlpZiAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUKSB7CisJCQlpbnAtPnNjdHBf
ZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKKwkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKKwkJCWlm
IChzb3JlYWRhYmxlKGlucC0+c2N0cF9zb2NrZXQpKSB7CisJCQkJc2N0cF9kZWZlcmVkX3dha2V1
cF9jbnQrKzsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8qX19Vc2Vyc3BhY2VfXyBjYWxsaW5nIHNvcndha3VwX2xvY2tlZCBiZWNh
dXNlIG9mIFNPQ0tCVUZfTE9DSyBhYm92ZSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQkJCXNvcndha2V1cF9sb2NrZWQoaW5wLT5zY3RwX3NvY2tldCk7CisjZWxzZQorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQorCQkJCS8qIHNvY2tldCBpcyBsb2NrZWQgKi8KKyNlbmRpZgorCQkJCXNv
cndha2V1cChpbnAtPnNjdHBfc29ja2V0KTsKKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQlTT0NL
QlVGX1VOTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKKwkJCX0KKwkJCVNDVFBfSU5Q
X1dMT0NLKGlucCk7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCX0KKwlpZiAoc3Rj
Yi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKKwkJc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxf
UFJPQywKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9D
XzE5KTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworI2lmZGVmIElORVQKK2ludAorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKQorc2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
KmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisjZWxpZiBkZWZpbmVkKF9fUGFu
ZGFfXykKK3NjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopYWRkcjsKKyNlbHNlCitzY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IG1idWYgKm5hbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1
Y3Qgc29ja2FkZHJfaW4gKik7CisjZW5kaWYKKwl1aW50MzJfdCB2cmZfaWQ7CisJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCisJLyoKKwkgKiBE
byB0aGUgbWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLgorCSAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KQorCVNDVFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2Yg
KnNpbik7CisJaWYgKHNpbiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisjZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKKwltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworI2Vsc2UKKwlT
Q1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKKwltZW1zZXQoc2luLCAwLCBzaXplb2Yo
KnNpbikpOworI2VuZGlmCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZF
X1NJTl9MRU4KKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKwlpbnAgPSAo
c3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmICghaW5wKSB7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKKyNlbmRpZgorCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQly
ZXR1cm4gKEVDT05OUkVTRVQpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCXNpbi0+c2lu
X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EQUxMKSB7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19DT05ORUNURUQpIHsKKwkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luX2E7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCQlpbnQgZm5kOwor
CisJCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlpZiAoc3Rj
YiA9PSBOVUxMKSB7CisJCQkJZ290byBub3RDb25uOworCQkJfQorCQkJZm5kID0gMDsKKwkJCXNp
bl9hID0gTlVMTDsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlUQUlMUV9GT1JFQUNIKG5l
dCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJc2luX2EgPSAoc3RydWN0IHNv
Y2thZGRyX2luICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlpZiAoc2luX2EgPT0gTlVMTCkKKwkJ
CQkJLyogdGhpcyB3aWxsIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KKwkJCQkJY29udGludWU7CisK
KwkJCQlpZiAoc2luX2EtPnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJCQlmbmQgPSAxOwor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoKCFmbmQpIHx8IChzaW5fYSA9PSBOVUxM
KSkgeworCQkJCS8qIHB1bnQgKi8KKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJZ290
byBub3RDb25uOworCQkJfQorCisJCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJCQlzY3Rw
X2lmYSA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKKwkJCQkJCQkJIHN0Y2Is
CisJCQkJCQkJCSAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkJCQkJCSBuZXQsIDAsIHZy
Zl9pZCk7CisJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQlzaW4tPnNpbl9hZGRyID0gc2N0cF9pZmEt
PmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmEpOworCQkJ
fQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJLyogRm9yIHRoZSBi
b3VuZCBhbGwgY2FzZSB5b3UgZ2V0IGJhY2sgMCAqLworCW5vdENvbm46CisJCQlzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9IDA7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIFRha2UgdGhlIGZpcnN0IElQ
djQgYWRkcmVzcyBpbiB0aGUgbGlzdCAqLworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJ
CWludCBmbmQgPSAwOworCisJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xp
c3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKKworCQkJ
CXNpbl9hID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luOworCQkJCXNpbi0+c2luX2FkZHIgPSBz
aW5fYS0+c2luX2FkZHI7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlp
ZiAoIWZuZCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOworI2Vu
ZGlmCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9FTlQpOworCQkJcmV0dXJu
IChFTk9FTlQpOworCQl9CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkoKmFkZHIpID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjsKKyNlbmRpZgorCXJldHVybiAo
MCk7Cit9CisKK2ludAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2thZGRyICoqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
bjsKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQorc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisjZWxzZQorc2N0cF9wZWVyYWRkcihzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4g
KnNpbiA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisKKyNlbmRpZgorCWludCBm
bmQ7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
OworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkv
KiBEbyB0aGUgbWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLiAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KQorCVNDVFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2Yg
KnNpbik7CisJaWYgKHNpbiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01FTSk7CisjZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKKwltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOworI2Vsc2UKKwlT
Q1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKKwltZW1zZXQoc2luLCAwLCBzaXplb2Yo
KnNpbikpOworI2VuZGlmCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZF
X1NJTl9MRU4KKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7CisjZW5kaWYKKworCWlucCA9
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKChpbnAgPT0gTlVMTCkgfHwK
KwkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDAp
KSB7CisJCS8qIFVEUCB0eXBlIGFuZCBsaXN0ZW5lcnMgd2lsbCBkcm9wIG91dCBoZXJlICovCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKKyNlbmRpZgorCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9U
Q09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOwor
CXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAoc3RjYikgewor
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJaWYg
KHN0Y2IgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbik7
CisjZW5kaWYKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJZm5k
ID0gMDsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCXNpbl9hID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCWlm
IChzaW5fYS0+c2luX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlmbmQgPSAxOworCQkJc2luLT5z
aW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJc2luLT5zaW5fYWRkciA9IHNpbl9hLT5zaW5fYWRk
cjsKKwkJCWJyZWFrOworCQl9CisJfQorCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlpZiAoIWZu
ZCkgeworCQkvKiBObyBJUHY0IGFkZHJlc3MgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU0NUUF9GUkVF
X1NPTkFNRShzaW4pOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCXJldHVybiAoRU5PRU5UKTsK
Kwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pCisJKCphZGRyKSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW47Cisj
ZW5kaWYKKwlyZXR1cm4gKDApOworfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCitzdHJ1Y3QgcHJfdXNycmVx
cyBzY3RwX3VzcnJlcXMgPSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkucHJ1X2Fib3J0
ID0gc2N0cF9hYm9ydCwKKwkucHJ1X2FjY2VwdCA9IHNjdHBfYWNjZXB0LAorCS5wcnVfYXR0YWNo
ID0gc2N0cF9hdHRhY2gsCisJLnBydV9iaW5kID0gc2N0cF9iaW5kLAorCS5wcnVfY29ubmVjdCA9
IHNjdHBfY29ubmVjdCwKKwkucHJ1X2NvbnRyb2wgPSBpbl9jb250cm9sLAorI2lmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDY5MDAwMAorCS5wcnVfY2xvc2UgPSBzY3RwX2Nsb3NlLAorCS5wcnVfZGV0
YWNoID0gc2N0cF9jbG9zZSwKKwkucHJ1X3NvcG9sbCA9IHNvcG9sbF9nZW5lcmljLAorCS5wcnVf
Zmx1c2ggPSBzY3RwX2ZsdXNoLAorI2Vsc2UKKwkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAor
CS5wcnVfc29wb2xsID0gc29wb2xsLAorI2VuZGlmCisJLnBydV9kaXNjb25uZWN0ID0gc2N0cF9k
aXNjb25uZWN0LAorCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCisJLnBydV9wZWVyYWRkciA9
IHNjdHBfcGVlcmFkZHIsCisJLnBydV9zZW5kID0gc2N0cF9zZW5kbSwKKwkucHJ1X3NodXRkb3du
ID0gc2N0cF9zaHV0ZG93biwKKwkucHJ1X3NvY2thZGRyID0gc2N0cF9pbmdldGFkZHIsCisJLnBy
dV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKKwkucHJ1X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZl
CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkucHJ1X2Fib3J0ID0gc2N0cF9hYm9ydCwKKwku
cHJ1X2FjY2VwdCA9IHNjdHBfYWNjZXB0LAorCS5wcnVfYXR0YWNoID0gc2N0cF9hdHRhY2gsCisJ
LnBydV9iaW5kID0gc2N0cF9iaW5kLAorCS5wcnVfY29ubmVjdCA9IHNjdHBfY29ubmVjdCwKKwku
cHJ1X2Nvbm5lY3QyID0gcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCisJLnBydV9jb250cm9sID0gaW5f
Y29udHJvbCwKKwkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAorCS5wcnVfZGlzY29ubmVjdCA9
IHNjdHBfZGlzY29ubmVjdCwKKwkucHJ1X2xpc3RlbiA9IHNjdHBfbGlzdGVuLAorCS5wcnVfcGVl
cmFkZHIgPSBzY3RwX3BlZXJhZGRyLAorCS5wcnVfcmN2ZCA9IE5VTEwsCisJLnBydV9yY3Zvb2Ig
PSBwcnVfcmN2b29iX25vdHN1cHAsCisJLnBydV9zZW5kID0gc2N0cF9zZW5kbSwKKwkucHJ1X3Nl
bnNlID0gcHJ1X3NlbnNlX251bGwsCisJLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCisJ
LnBydV9zb2NrYWRkciA9IHNjdHBfaW5nZXRhZGRyLAorCS5wcnVfc29zZW5kID0gc2N0cF9zb3Nl
bmQsCisJLnBydV9zb3JlY2VpdmUgPSBzY3RwX3NvcmVjZWl2ZSwKKwkucHJ1X3NvcG9sbCA9IHNv
cG9sbAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzY3RwX2Fib3J0LAorCXNjdHBfYWNj
ZXB0LAorCXNjdHBfYXR0YWNoLAorCXNjdHBfYmluZCwKKwlzY3RwX2Nvbm5lY3QsCisJcHJ1X2Nv
bm5lY3QyX25vdHN1cHAsCisJTlVMTCwKKwlOVUxMLAorCXNjdHBfZGlzY29ubmVjdCwKKwlzY3Rw
X2xpc3RlbiwKKwlzY3RwX3BlZXJhZGRyLAorCU5VTEwsCisJcHJ1X3Jjdm9vYl9ub3RzdXBwLAor
CU5VTEwsCisJcHJ1X3NlbnNlX251bGwsCisJc2N0cF9zaHV0ZG93biwKKwlzY3RwX2ZsdXNoLAor
CXNjdHBfaW5nZXRhZGRyLAorCXNjdHBfc29zZW5kLAorCXNjdHBfc29yZWNlaXZlLAorCXNvcG9s
bF9nZW5lcmljLAorCU5VTEwsCisJc2N0cF9jbG9zZQorI2VuZGlmCit9OworI2VsaWYgIWRlZmlu
ZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwX3VzcnJl
cShzbywgcmVxLCBtLCBuYW0sIGNvbnRyb2wpCisJc3RydWN0IHNvY2tldCAqc287CisJaW50IHJl
cTsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm5hbSwgKmNvbnRyb2w7Cit7CisJc3RydWN0IHByb2MgKnAg
PSBjdXJwcm9jOworCXVpbnQzMl90IHZyZl9pZDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlp
bnQgZXJyb3I7CisJaW50IGZhbWlseTsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gKHN0cnVj
dCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKworCWVycm9yID0gMDsKKwlmYW1pbHkgPSBzby0+
c29fcHJvdG8tPnByX2RvbWFpbi0+ZG9tX2ZhbWlseTsKKwlpZiAocmVxID09IFBSVV9DT05UUk9M
KSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoKKwkJCWVycm9yID0gaW5f
Y29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJICAgIChzdHJ1Y3QgaWZuZXQg
Kiljb250cm9sKTsKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNhc2UgUEZfSU5FVDY6CisJ
CQllcnJvciA9IGluNl9jb250cm9sKHNvLCAobG9uZyltLCAoY2FkZHJfdCluYW0sCisJCQkgICAg
KHN0cnVjdCBpZm5ldCAqKWNvbnRyb2wsIHApOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVs
dDoKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7CisJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJfQor
CQlyZXR1cm4gKGVycm9yKTsKKwl9CisJc3dpdGNoIChyZXEpIHsKKwljYXNlIFBSVV9BVFRBQ0g6
CisJCWVycm9yID0gc2N0cF9hdHRhY2goc28sIGZhbWlseSwgcCk7CisJCWJyZWFrOworCWNhc2Ug
UFJVX0RFVEFDSDoKKwkJZXJyb3IgPSBzY3RwX2RldGFjaChzbyk7CisJCWJyZWFrOworCWNhc2Ug
UFJVX0JJTkQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVy
biAoRUlOVkFMKTsKKwkJfQorCQllcnJvciA9IHNjdHBfYmluZChzbywgbmFtLCBwKTsKKwkJYnJl
YWs7CisJY2FzZSBQUlVfTElTVEVOOgorCQllcnJvciA9IHNjdHBfbGlzdGVuKHNvLCBwKTsKKwkJ
YnJlYWs7CisJY2FzZSBQUlVfQ09OTkVDVDoKKwkJaWYgKG5hbSA9PSBOVUxMKSB7CisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cF9jb25uZWN0
KHNvLCBuYW0sIHApOworCQlicmVhazsKKwljYXNlIFBSVV9ESVNDT05ORUNUOgorCQllcnJvciA9
IHNjdHBfZGlzY29ubmVjdChzbyk7CisJCWJyZWFrOworCWNhc2UgUFJVX0FDQ0VQVDoKKwkJaWYg
KG5hbSA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9
CisJCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7CisJCWJyZWFrOworCWNhc2UgUFJVX1NI
VVRET1dOOgorCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOworCQlicmVhazsKKworCWNhc2Ug
UFJVX1JDVkQ6CisJCS8qCisJCSAqIEZvciBPcGVuIGFuZCBOZXQgQlNELCB0aGlzIGlzIHJlYWwg
dWdseS4gVGhlIG1idWYgKm5hbQorCQkgKiB0aGF0IGlzIHBhc3NlZCAoYnkgc29yZWNlaXZlKCkp
IGlzIHRoZSBpbnQgZmxhZ3MgYyBhc3QgYXMKKwkJICogYSAobWJ1ZiAqKSB5dWNrIQorCQkgKi8K
KwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5EOgorCQkvKiBGbGFncyBhcmUgaWdub3JlZCAqLwor
CQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisKKwkJCWlmIChuYW0gPT0gTlVMTCkKKwkJ
CQlhZGRyID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlhZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2Nr
YWRkciAqKTsKKworCQkJZXJyb3IgPSBzY3RwX3NlbmRtKHNvLCAwLCBtLCBhZGRyLCBjb250cm9s
LCBwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBSVV9BQk9SVDoKKwkJZXJyb3IgPSBzY3RwX2Fi
b3J0KHNvKTsKKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5TRToKKwkJZXJyb3IgPSAwOworCQli
cmVhazsKKwljYXNlIFBSVV9SQ1ZPT0I6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7CisJCWVycm9yID0g
RUFGTk9TVVBQT1JUOworCQlicmVhazsKKwljYXNlIFBSVV9TRU5ET09COgorCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUZOT1NV
UFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBQUlVfUEVF
UkFERFI6CisJCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsKKwkJYnJlYWs7CisJY2Fz
ZSBQUlVfU09DS0FERFI6CisJCWVycm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7CisJCWJy
ZWFrOworCWNhc2UgUFJVX1NMT1dUSU1POgorCQllcnJvciA9IDA7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2VuZGlmCisjZW5kaWYK
KworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorcmVnaXN0ZXJfcmVjdl9jYihzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgaW50ICgqcmVjZWl2ZV9jYikoc3RydWN0
IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAg
ICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCBm
bGFncywgdm9pZCAqdWxwX2luZm8pKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlp
bnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwp
IHsKKwkJcmV0dXJuICgwKTsKKwl9CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpbnAtPnJlY3Zf
Y2FsbGJhY2sgPSByZWNlaXZlX2NiOworCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwlyZXR1cm4g
KDEpOworfQorCitpbnQKK3JlZ2lzdGVyX3NlbmRfY2Ioc3RydWN0IHNvY2tldCAqc28sIHVpbnQz
Ml90IHNiX3RocmVzaG9sZCwgaW50ICgqc2VuZF9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdWlu
dDMyX3Qgc2JfZnJlZSkpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqKSBzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQly
ZXR1cm4gKDApOworCX0KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+c2VuZF9jYWxsYmFj
ayA9IHNlbmRfY2I7CisJaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IHNiX3RocmVzaG9sZDsKKwlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7CisJLyogRklYTUUgY2hhbmdlIHRvIGN1cnJlbnQgYW1vdW50
IGZyZWUuIFRoaXMgd2lsbCBiZSB0aGUgZnVsbCBidWZmZXIKKwkgKiB0aGUgZmlyc3QgdGltZSB0
aGlzIGlzIHJlZ2lzdGVyZWQgYnV0IGl0IGNvdWxkIGJlIG9ubHkgYSBwb3J0aW9uCisJICogb2Yg
dGhlIHNlbmQgYnVmZmVyIGlmIHRoaXMgaXMgY2FsbGVkIGEgc2Vjb25kIHRpbWUgZS5nLiBpZiB0
aGUKKwkgKiB0aHJlc2hvbGQgY2hhbmdlcy4KKwkgKi8KKwlyZXR1cm4gKDEpOworfQorCitpbnQK
K3JlZ2lzdGVyX3VscF9pbmZvIChzdHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2luZm8pCit7
CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KSBzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlT
Q1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+dWxwX2luZm8gPSB1bHBfaW5mbzsKKwlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJcmV0dXJuICgxKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdmFyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF92YXIuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhj
MmU0OGM1MzkxLi5iYzRhZmU5NWYxZjA5ZGNkNzJmZWZmNWIzMmEzOTU3OWU2ODliNzQwIDEwMDc1
NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF92YXIuaAorKysgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF92YXIuaApAQCAtMCwwICsxLDUxOSBAQAorLyot
CisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJp
Z2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFl
bCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNE
X18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMv
bmV0aW5ldC9zY3RwX3Zhci5oIDMxNzQ1NyAyMDE3LTA0LTI2IDE5OjI2OjQwWiB0dWV4ZW4gJCIp
OworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9WQVJfSF8KKyNkZWZpbmUgX05FVElO
RVRfU0NUUF9WQVJfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKworI2lmIGRl
ZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18p
CitleHRlcm4gc3RydWN0IHByX3VzcnJlcXMgc2N0cF91c3JyZXFzOworI2VuZGlmCisKKworI2Rl
ZmluZSBzY3RwX2ZlYXR1cmVfb24oaW5wLCBmZWF0dXJlKSAgKGlucC0+c2N0cF9mZWF0dXJlcyB8
PSBmZWF0dXJlKQorI2RlZmluZSBzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVyZSkgKGlucC0+
c2N0cF9mZWF0dXJlcyAmPSB+ZmVhdHVyZSkKKyNkZWZpbmUgc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgZmVhdHVyZSkgKChpbnAtPnNjdHBfZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSBmZWF0dXJlKQor
I2RlZmluZSBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVyZSkgKChpbnAtPnNjdHBfZmVh
dHVyZXMgJiBmZWF0dXJlKSA9PSAwKQorCisjZGVmaW5lIHNjdHBfc3RjYl9mZWF0dXJlX29uKGlu
cCwgc3RjYiwgZmVhdHVyZSkge1wKKwlpZiAoc3RjYikgeyBcCisJCXN0Y2ItPmFzb2Muc2N0cF9m
ZWF0dXJlcyB8PSBmZWF0dXJlOyBcCisJfSBlbHNlIGlmIChpbnApIHsgXAorCQlpbnAtPnNjdHBf
ZmVhdHVyZXMgfD0gZmVhdHVyZTsgXAorCX0gXAorfQorI2RlZmluZSBzY3RwX3N0Y2JfZmVhdHVy
ZV9vZmYoaW5wLCBzdGNiLCBmZWF0dXJlKSB7XAorCWlmIChzdGNiKSB7IFwKKwkJc3RjYi0+YXNv
Yy5zY3RwX2ZlYXR1cmVzICY9IH5mZWF0dXJlOyBcCisJfSBlbHNlIGlmIChpbnApIHsgXAorCQlp
bnAtPnNjdHBfZmVhdHVyZXMgJj0gfmZlYXR1cmU7IFwKKwl9IFwKK30KKyNkZWZpbmUgc2N0cF9z
dGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBmZWF0dXJlKSBcCisJKCgoc3RjYiAhPSBOVUxM
KSAmJiBcCisJICAoKHN0Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IGZlYXR1
cmUpKSB8fCBcCisJICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpICYmIFwKKwkgICgo
aW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gZmVhdHVyZSkpKQorI2RlZmluZSBzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBmZWF0dXJlKSBcCisJKCgoc3RjYiAhPSBO
VUxMKSAmJiBcCisJICAoKHN0Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IDAp
KSB8fCBcCisJICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpICYmIFwKKwkgICgoaW5w
LT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gMCkpIHx8IFwKKwkgKChzdGNiID09IE5VTEwp
ICYmIChpbnAgPT0gTlVMTCkpKQorCisvKiBtYW5hZ2luZyBtb2JpbGl0eV9mZWF0dXJlIGluIGlu
cGNiIChieSBtaWNjaGllKSAqLworI2RlZmluZSBzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb24oaW5w
LCBmZWF0dXJlKSAgKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyB8PSBmZWF0dXJlKQorI2Rl
ZmluZSBzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVyZSkgKGlucC0+c2N0cF9t
b2JpbGl0eV9mZWF0dXJlcyAmPSB+ZmVhdHVyZSkKKyNkZWZpbmUgc2N0cF9pc19tb2JpbGl0eV9m
ZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyAmIGZl
YXR1cmUpCisjZGVmaW5lIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBmZWF0dXJl
KSAoKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyAmIGZlYXR1cmUpID09IDApCisKKyNkZWZp
bmUgc2N0cF9tYXhzcGFjZShzYikgKG1heCgoc2IpLT5zYl9oaXdhdCxTQ1RQX01JTklNQUxfUldO
RCkpCisKKyNkZWZpbmUJc2N0cF9zYnNwYWNlKGFzb2MsIHNiKSAoKGxvbmcpICgoc2N0cF9tYXhz
cGFjZShzYikgPiAoYXNvYyktPnNiX2NjKSA/IChzY3RwX21heHNwYWNlKHNiKSAtIChhc29jKS0+
c2JfY2MpIDogMCkpCisKKyNkZWZpbmUJc2N0cF9zYnNwYWNlX2ZhaWxlZG1zZ3Moc2IpICgobG9u
ZykgKChzY3RwX21heHNwYWNlKHNiKSA+IChzYiktPnNiX2NjKSA/IChzY3RwX21heHNwYWNlKHNi
KSAtIChzYiktPnNiX2NjKSA6IDApKQorCisjZGVmaW5lIHNjdHBfc2JzcGFjZV9zdWIoYSxiKSAo
KChhKSA+IChiKSkgPyAoKGEpIC0gKGIpKSA6IDApCisKKy8qCisgKiBJIHRyaWVkIHRvIGNhY2hl
IHRoZSByZWFkcSBlbnRyaWVzIGF0IG9uZSBwb2ludC4gQnV0IHRoZSByZWFsaXR5CisgKiBpcyB0
aGF0IGl0IGRpZCBub3QgYWRkIGFueSBwZXJmb3JtYW5jZSBzaW5jZSB0aGlzIG1lYW50IHdlIGhh
ZCB0bworICogbG9jayB0aGUgU1RDQiBvbiByZWFkLiBBbmQgYXQgdGhhdCBwb2ludCBvbmNlIHlv
dSBoYXZlIHRvIGRvIGFuCisgKiBleHRyYSBsb2NrLCBpdCByZWFsbHkgZG9lcyBub3QgbWF0dGVy
IGlmIHRoZSBsb2NrIGlzIGluIHRoZSBaT05FCisgKiBzdHVmZiBvciBpbiBvdXIgY29kZS4gTm90
ZSB0aGF0IHRoaXMgc2FtZSBwcm9ibGVtIHdvdWxkIG9jY3VyIHdpdGgKKyAqIGFuIG1idWYgY2Fj
aGUgYXMgd2VsbCBzbyBpdCBpcyBub3QgcmVhbGx5IHdvcnRoIGRvaW5nLCBhdCBsZWFzdAorICog
cmlnaHQgbm93IDotRAorICovCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBzY3RwX2ZyZWVf
YV9yZWFkcShfc3RjYiwgX3JlYWRxKSB7IFwKKwlpZiAoKF9yZWFkcSktPm9uX3N0cm1fcSkgXAor
CQlwYW5pYygiT24gc3RybSBxIHN0Y2I6JXAgcmVhZHE6JXAiLCAoX3N0Y2IpLCAoX3JlYWRxKSk7
IFwKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9yZWFkcSksIChfcmVh
ZHEpKTsgXAorCVNDVFBfREVDUl9SRUFEUV9DT1VOVCgpOyBcCit9CisjZWxzZQorI2RlZmluZSBz
Y3RwX2ZyZWVfYV9yZWFkcShfc3RjYiwgX3JlYWRxKSB7IFwKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQ
X0JBU0VfSU5GTyhpcGlfem9uZV9yZWFkcSksIChfcmVhZHEpKTsgXAorCVNDVFBfREVDUl9SRUFE
UV9DT1VOVCgpOyBcCit9CisjZW5kaWYKKworI2RlZmluZSBzY3RwX2FsbG9jX2FfcmVhZHEoX3N0
Y2IsIF9yZWFkcSkgeyBcCisJKF9yZWFkcSkgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZP
KGlwaV96b25lX3JlYWRxKSwgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpOyBcCisJaWYgKChf
cmVhZHEpKSB7IFwKKwkgICAgIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgpOyBcCisJfSBcCit9CisK
KyNkZWZpbmUgc2N0cF9mcmVlX2Ffc3RybW9xKF9zdGNiLCBfc3RybW9xLCBfc29fbG9ja2VkKSB7
IFwKKwlpZiAoKF9zdHJtb3EpLT5ob2xkc19rZXlfcmVmKSB7IFwKKwkJc2N0cF9hdXRoX2tleV9y
ZWxlYXNlKHN0Y2IsIHNwLT5hdXRoX2tleWlkLCBfc29fbG9ja2VkKTsgXAorCQkoX3N0cm1vcSkt
PmhvbGRzX2tleV9yZWYgPSAwOyBcCisJfSBcCisJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfc3RybW9xKSwgKF9zdHJtb3EpKTsgXAorCVNDVFBfREVDUl9TVFJNT1FfQ09V
TlQoKTsgXAorfQorCisjZGVmaW5lIHNjdHBfYWxsb2NfYV9zdHJtb3EoX3N0Y2IsIF9zdHJtb3Ep
IHsgXAorCShfc3RybW9xKSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
c3RybW9xKSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpOyBcCisJaWYgKChfc3Ry
bW9xKSkgeyBcCisJCW1lbXNldChfc3RybW9xLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFt
X3F1ZXVlX3BlbmRpbmcpKTsgXAorCQlTQ1RQX0lOQ1JfU1RSTU9RX0NPVU5UKCk7IFwKKwkJKF9z
dHJtb3EpLT5ob2xkc19rZXlfcmVmID0gMDsgXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfZnJl
ZV9hX2NodW5rKF9zdGNiLCBfY2hrLCBfc29fbG9ja2VkKSB7IFwKKwlpZiAoKF9jaGspLT5ob2xk
c19rZXlfcmVmKSB7XAorCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2UoKF9zdGNiKSwgKF9jaGspLT5h
dXRoX2tleWlkLCBfc29fbG9ja2VkKTsgXAorCQkoX2NoayktPmhvbGRzX2tleV9yZWYgPSAwOyBc
CisJfSBcCisJaWYgKF9zdGNiKSB7IFwKKwkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoKF9zdGNiKSk7
IFwKKwkJaWYgKChfY2hrKS0+d2hvVG8pIHsgXAorCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKChf
Y2hrKS0+d2hvVG8pOyBcCisJCQkoX2NoayktPndob1RvID0gTlVMTDsgXAorCQl9IFwKKwkJaWYg
KCgoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtfY250ID4gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fz
b2NfZnJlZV9yZXNjX2xpbWl0KSkgfHwgXAorCQkgICAgKFNDVFBfQkFTRV9JTkZPKGlwaV9mcmVl
X2NodW5rcykgPiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCkp
KSB7IFwKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwg
KF9jaGspKTsgXAorCQkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOyBcCisJCX0gZWxzZSB7IFwKKwkJ
CVRBSUxRX0lOU0VSVF9UQUlMKCYoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtzLCAoX2NoayksIHNj
dHBfbmV4dCk7IFwKKwkJCShfc3RjYiktPmFzb2MuZnJlZV9jaHVua19jbnQrKzsgXAorCQkJYXRv
bWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5rcyksIDEpOyBcCisJCX0g
XAorCX0gZWxzZSB7IFwKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
Y2h1bmspLCAoX2NoaykpOyBcCisJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsgXAorCX0gXAorfQor
CisjZGVmaW5lIHNjdHBfYWxsb2NfYV9jaHVuayhfc3RjYiwgX2NoaykgeyBcCisJaWYgKFRBSUxR
X0VNUFRZKCYoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtzKSkgeyBcCisJCShfY2hrKSA9IFNDVFBf
Wk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rKTsgXAorCQlpZiAoKF9jaGspKSB7IFwKKwkJCVNDVFBfSU5DUl9DSEtfQ09VTlQoKTsg
XAorCQkJKF9jaGspLT53aG9UbyA9IE5VTEw7IFwKKwkJCShfY2hrKS0+aG9sZHNfa2V5X3JlZiA9
IDA7IFwKKwkJfSBcCisJfSBlbHNlIHsgXAorCQkoX2NoaykgPSBUQUlMUV9GSVJTVCgmKF9zdGNi
KS0+YXNvYy5mcmVlX2NodW5rcyk7IFwKKwkJVEFJTFFfUkVNT1ZFKCYoX3N0Y2IpLT5hc29jLmZy
ZWVfY2h1bmtzLCAoX2NoayksIHNjdHBfbmV4dCk7IFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgm
U0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKSwgMSk7IFwKKwkJKF9jaGspLT5ob2xkc19r
ZXlfcmVmID0gMDsgXAorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19jYWNoZWRfY2hrKTsgXAorCQko
X3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtfY250LS07IFwKKwl9IFwKK30KKworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAwCisKKyNkZWZpbmUgc2N0
cF9mcmVlX3JlbW90ZV9hZGRyKF9fbmV0KSB7IFwKKwlpZiAoKF9fbmV0KSkgeyAgXAorCQlpZiAo
U0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKCYoX19uZXQpLT5yZWZfY291bnQpKSB7
IFwKKwkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+cnh0X3RpbWVyLnRpbWVy
KTsgXAorCQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCYoX19uZXQpLT5wbXR1X3RpbWVyLnRp
bWVyKTsgXAorCQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCYoX19uZXQpLT5oYl90aW1lci50
aW1lcik7IFwKKwkJCWlmICgoX19uZXQpLT5yby5yb19ydCkgeyBcCisJCQkJUlRGUkVFKChfX25l
dCktPnJvLnJvX3J0KTsgXAorCQkJCShfX25ldCktPnJvLnJvX3J0ID0gTlVMTDsgXAorCQkJfSBc
CisJCQlpZiAoKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsgXAorCQkJCXNjdHBfZnJlZV9p
ZmEoKF9fbmV0KS0+cm8uX3NfYWRkcik7IFwKKwkJCQkoX19uZXQpLT5yby5fc19hZGRyID0gTlVM
TDsgXAorCQkJfSBcCisJCQkoX19uZXQpLT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7IFwKKwkJCShf
X25ldCktPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7IFwKKwkJCVNDVFBfWk9O
RV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCksIChfX25ldCkpOyBcCisJCQlTQ1RQ
X0RFQ1JfUkFERFJfQ09VTlQoKTsgXAorCQl9IFwKKwl9IFwKK30KKworI2RlZmluZSBzY3RwX3Ni
ZnJlZShjdGwsIHN0Y2IsIHNiLCBtKSB7IFwKKwlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgm
KHNiKS0+c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCVNDVFBfU0FWRV9BVE9NSUNfREVD
UkVNRU5UKCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKCgoY3RsKS0+ZG9fbm90X3Jl
Zl9zdGNiID09IDApICYmIHN0Y2IpIHtcCisJCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKCYo
c3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCQlTQ1RQX1NBVkVfQVRP
TUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1TSVpFKTsg
XAorCX0gXAorCWlmIChTQ1RQX0JVRl9UWVBFKG0pICE9IE1UX0RBVEEgJiYgU0NUUF9CVUZfVFlQ
RShtKSAhPSBNVF9IRUFERVIgJiYgXAorCSAgICBTQ1RQX0JVRl9UWVBFKG0pICE9IE1UX09PQkRB
VEEpIFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHNiKS0+c2JfY3RsLFNDVFBfQlVGX0xFTigo
bSkpKTsgXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSkgeyBcCisJYXRv
bWljX2FkZF9pbnQoJihzYiktPnNiX2NjLFNDVFBfQlVGX0xFTigobSkpKTsgXAorCWF0b21pY19h
ZGRfaW50KCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKHN0Y2IpIHsgXAorCQlhdG9t
aWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKKwkJ
YXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuLCBNU0laRSk7
IFwKKwl9IFwKKwlpZiAoU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9EQVRBICYmIFNDVFBfQlVGX1RZ
UEUobSkgIT0gTVRfSEVBREVSICYmIFwKKwkgICAgU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9PT0JE
QVRBKSBcCisJCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jdGwsU0NUUF9CVUZfTEVOKChtKSkp
OyBcCit9CisKKyNlbHNlCQkJCS8qIEZyZWVCU0QgVmVyc2lvbiA8PSA1MDAwMDAgb3Igbm9uLUZy
ZWVCU0QgKi8KKworI2RlZmluZSBzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoX19uZXQpIHsgXAorCWlm
ICgoX19uZXQpKSB7IFwKKwkJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgm
KF9fbmV0KS0+cmVmX2NvdW50KSkgeyBcCisJCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJihf
X25ldCktPnJ4dF90aW1lci50aW1lcik7IFwKKwkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgm
KF9fbmV0KS0+cG10dV90aW1lci50aW1lcik7IFwKKwkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RP
UCgmKF9fbmV0KS0+aGJfdGltZXIudGltZXIpOyBcCisJCQlpZiAoKF9fbmV0KS0+cm8ucm9fcnQp
IHsgXAorCQkJCVJURlJFRSgoX19uZXQpLT5yby5yb19ydCk7IFwKKwkJCQkoX19uZXQpLT5yby5y
b19ydCA9IE5VTEw7IFwKKwkJCX0gXAorCQkJaWYgKChfX25ldCktPnNyY19hZGRyX3NlbGVjdGVk
KSB7IFwKKwkJCQlzY3RwX2ZyZWVfaWZhKChfX25ldCktPnJvLl9zX2FkZHIpOyBcCisJCQkJKF9f
bmV0KS0+cm8uX3NfYWRkciA9IE5VTEw7IFwKKwkJCX0gXAorCQkJKF9fbmV0KS0+c3JjX2FkZHJf
c2VsZWN0ZWQgPSAwOyBcCisJCQkoX19uZXQpLT5kZXN0X3N0YXRlICY9flNDVFBfQUREUl9SRUFD
SEFCTEU7IFwKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCks
IChfX25ldCkpOyBcCisJCQlTQ1RQX0RFQ1JfUkFERFJfQ09VTlQoKTsgXAorCQl9IFwKKwl9IFwK
K30KKworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorI2RlZmluZSBzY3RwX3NiZnJlZShjdGwsIHN0
Y2IsIHNiLCBtKSB7IFwKKwlpZiAoKHNiKS0+c2JfY2MgPj0gKHVpbnQzMl90KVNDVFBfQlVGX0xF
TigobSkpKSB7IFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHNiKS0+c2JfY2MsIFNDVFBfQlVG
X0xFTigobSkpKTsgXAorCX0gZWxzZSB7IFwKKwkJKHNiKS0+c2JfY2MgPSAwOyBcCisJfSBcCisJ
aWYgKCgoY3RsKS0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmIHN0Y2IpIHsgXAorCQlpZiAoKHN0
Y2IpLT5hc29jLnNiX2NjID49ICh1aW50MzJfdClTQ1RQX0JVRl9MRU4oKG0pKSkgeyBcCisJCQlh
dG9taWNfc3VidHJhY3RfaW50KCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkp
KTsgXAorCQl9IGVsc2UgeyBcCisJCQkoc3RjYiktPmFzb2Muc2JfY2MgPSAwOyBcCisJCX0gXAor
CX0gXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSkgeyBcCisJYXRvbWlj
X2FkZF9pbnQoJihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKKwlpZiAoc3RjYikg
eyBcCisJCWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigo
bSkpKTsgXAorCX0gXAorfQorCisjZWxzZQorCisjZGVmaW5lIHNjdHBfc2JmcmVlKGN0bCwgc3Rj
Yiwgc2IsIG0pIHsgXAorCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKCYoc2IpLT5zYl9jYywg
U0NUUF9CVUZfTEVOKChtKSkpOyBcCisJU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoJihzYikt
PnNiX21iY250LCBNU0laRSk7IFwKKwlpZiAoKChjdGwpLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkg
JiYgc3RjYikgeyBcCisJCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5UKCYoc3RjYiktPmFzb2Mu
c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVO
VCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1TSVpFKTsgXAorCX0gXAorfQor
CisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSkgeyBcCisJYXRvbWljX2FkZF9pbnQo
JihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKKwlhdG9taWNfYWRkX2ludCgmKHNi
KS0+c2JfbWJjbnQsIE1TSVpFKTsgXAorCWlmIChzdGNiKSB7IFwKKwkJYXRvbWljX2FkZF9pbnQo
JihzdGNiKS0+YXNvYy5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCisJCWF0b21pY19hZGRf
aW50KCYoc3RjYiktPmFzb2MubXlfcnduZF9jb250cm9sX2xlbiwgTVNJWkUpOyBcCisJfSBcCit9
CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIHNjdHBfdWNvdW50X2luY3IodmFsKSB7IFwKKwl2
YWwrKzsgXAorfQorCisjZGVmaW5lIHNjdHBfdWNvdW50X2RlY3IodmFsKSB7IFwKKwlpZiAodmFs
ID4gMCkgeyBcCisJCXZhbC0tOyBcCisJfSBlbHNlIHsgXAorCQl2YWwgPSAwOyBcCisJfSBcCit9
CisKKyNkZWZpbmUgc2N0cF9tYnVmX2NydXNoKGRhdGEpIGRvIHsgXAorCXN0cnVjdCBtYnVmICpf
bTsgXAorCV9tID0gKGRhdGEpOyBcCisJd2hpbGUgKF9tICYmIChTQ1RQX0JVRl9MRU4oX20pID09
IDApKSB7IFwKKwkJKGRhdGEpICA9IFNDVFBfQlVGX05FWFQoX20pOyBcCisJCVNDVFBfQlVGX05F
WFQoX20pID0gTlVMTDsgXAorCQlzY3RwX21fZnJlZShfbSk7IFwKKwkJX20gPSAoZGF0YSk7IFwK
Kwl9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0
cDEpIGRvIHsgXAorCWlmICh0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA+PSB0cDEtPmJvb2tfc2l6
ZSkgXAorCQl0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSAtPSB0cDEtPmJvb2tfc2l6ZTsgXAorCWVs
c2UgXAorCQl0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA9IDA7IFwKK30gd2hpbGUgKDApCisKKyNk
ZWZpbmUgc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZSh0cDEpIGRvIHsgXAorCSh0cDEpLT53aG9U
by0+ZmxpZ2h0X3NpemUgKz0gKHRwMSktPmJvb2tfc2l6ZTsgXAorfSB3aGlsZSAoMCkKKworI2lm
ZGVmIFNDVFBfRlNfU1BFQ19MT0cKKyNkZWZpbmUgc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uo
c3RjYiwgdHAxKSBkbyB7IFwKKwlpZiAoc3RjYi0+YXNvYy5mc19pbmRleCA+IFNDVFBfRlNfU1BF
Q19MT0dfU0laRSkgXAorCQlzdGNiLT5hc29jLmZzX2luZGV4ID0gMDtcCisJc3RjYi0+YXNvYy5m
c2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50b3RhbF9mbGlnaHQgPSBzdGNiLT5hc29jLnRvdGFs
X2ZsaWdodDsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0udHNuID0g
dHAxLT5yZWMuZGF0YS50c247IFwKKwlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5k
ZXhdLmJvb2sgPSB0cDEtPmJvb2tfc2l6ZTsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNv
Yy5mc19pbmRleF0uc2VudCA9IHRwMS0+c2VudDsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+
YXNvYy5mc19pbmRleF0uaW5jciA9IDA7IFwKKwlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2Mu
ZnNfaW5kZXhdLmRlY3IgPSAxOyBcCisJc3RjYi0+YXNvYy5mc19pbmRleCsrOyBcCisJdHAxLT53
aW5kb3dfcHJvYmUgPSAwOyBcCisJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID49IHRwMS0+
Ym9va19zaXplKSB7IFwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgLT0gdHAxLT5ib29rX3Np
emU7IFwKKwkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50ID4gMCkgXAorCQkJc3Rj
Yi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQtLTsgXAorCX0gZWxzZSB7IFwKKwkJc3RjYi0+YXNv
Yy50b3RhbF9mbGlnaHQgPSAwOyBcCisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50ID0g
MDsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzY3RwX3RvdGFsX2ZsaWdodF9pbmNy
ZWFzZShzdGNiLCB0cDEpIGRvIHsgXAorCWlmIChzdGNiLT5hc29jLmZzX2luZGV4ID4gU0NUUF9G
U19TUEVDX0xPR19TSVpFKSBcCisJCXN0Y2ItPmFzb2MuZnNfaW5kZXggPSAwO1wKKwlzdGNiLT5h
c29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLnRvdGFsX2ZsaWdodCA9IHN0Y2ItPmFzb2Mu
dG90YWxfZmxpZ2h0OyBcCisJc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50
c24gPSB0cDEtPnJlYy5kYXRhLnRzbjsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5m
c19pbmRleF0uYm9vayA9IHRwMS0+Ym9va19zaXplOyBcCisJc3RjYi0+YXNvYy5mc2xvZ1tzdGNi
LT5hc29jLmZzX2luZGV4XS5zZW50ID0gdHAxLT5zZW50OyBcCisJc3RjYi0+YXNvYy5mc2xvZ1tz
dGNiLT5hc29jLmZzX2luZGV4XS5pbmNyID0gMTsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+
YXNvYy5mc19pbmRleF0uZGVjciA9IDA7IFwKKwlzdGNiLT5hc29jLmZzX2luZGV4Kys7IFwKKwko
c3RjYiktPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50Kys7IFwKKwkoc3RjYiktPmFzb2MudG90YWxf
ZmxpZ2h0ICs9ICh0cDEpLT5ib29rX3NpemU7IFwKK30gd2hpbGUgKDApCisKKyNlbHNlCisKKyNk
ZWZpbmUgc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKSBkbyB7IFwKKwl0cDEt
PndpbmRvd19wcm9iZSA9IDA7IFwKKwlpZiAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPj0gdHAx
LT5ib29rX3NpemUpIHsgXAorCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCAtPSB0cDEtPmJvb2tf
c2l6ZTsgXAorCQlpZiAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQgPiAwKSBcCisJCQlz
dGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudC0tOyBcCisJfSBlbHNlIHsgXAorCQlzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodCA9IDA7IFwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQg
PSAwOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNjdHBfdG90YWxfZmxpZ2h0X2lu
Y3JlYXNlKHN0Y2IsIHRwMSkgZG8geyBcCisJKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodF9jb3Vu
dCsrOyBcCisJKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodCArPSAodHAxKS0+Ym9va19zaXplOyBc
Cit9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2RlZmluZSBTQ1RQX1BGX0VOQUJMRUQoX25ldCkg
KF9uZXQtPnBmX3RocmVzaG9sZCA8IF9uZXQtPmZhaWx1cmVfdGhyZXNob2xkKQorI2RlZmluZSBT
Q1RQX05FVF9JU19QRihfbmV0KSAoX25ldC0+cGZfdGhyZXNob2xkIDwgX25ldC0+ZXJyb3JfY291
bnQpCisKK3N0cnVjdCBzY3RwX25ldHM7CitzdHJ1Y3Qgc2N0cF9pbnBjYjsKK3N0cnVjdCBzY3Rw
X3RjYjsKK3N0cnVjdCBzY3RwaGRyOworCisKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQgc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbyk7
CisjZWxzZQoraW50IHNjdHBfZGV0YWNoKHN0cnVjdCBzb2NrZXQgKnNvKTsKKyNlbmRpZgoraW50
IHNjdHBfZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbyk7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK3ZvaWQg
c2N0cF9jdGxpbnB1dCBfX1AoKGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKikpOworaW50
IHNjdHBfY3Rsb3V0cHV0IF9fUCgoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja29wdCAqKSk7
CisjaWZkZWYgSU5FVAordm9pZCBzY3RwX2lucHV0X3dpdGhfcG9ydCBfX1AoKHN0cnVjdCBtYnVm
ICosIGludCwgdWludDE2X3QpKTsKK3ZvaWQgc2N0cF9pbnB1dCBfX1AoKHN0cnVjdCBtYnVmICos
IGludCkpOworI2VuZGlmCit2b2lkIHNjdHBfcGF0aG10dV9hZGp1c3RtZW50IF9fUCgoc3RydWN0
IHNjdHBfdGNiICosIHVpbnQxNl90KSk7CisjZWxzZQorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAm
JiAhZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkg
JiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSAm
JiAhZGVmaW5lZChBUFBMRV9FTENBUElUQU4pCit2b2lkIHNjdHBfY3RsaW5wdXQoaW50LCBzdHJ1
Y3Qgc29ja2FkZHIgKiwgdm9pZCAqLCBzdHJ1Y3QgaWZuZXQgKiBTQ1RQX1VOVVNFRCk7CisjZWxz
ZQordm9pZCBzY3RwX2N0bGlucHV0KGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKik7Cisj
ZW5kaWYKK2ludCBzY3RwX2N0bG91dHB1dChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2Nrb3B0
ICopOworI2lmZGVmIElORVQKK3ZvaWQgc2N0cF9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYg
KiwgaW50LCB1aW50MTZfdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gMTEwMDAyMAoraW50IHNjdHBfaW5wdXQoc3RydWN0IG1idWYgKiosIGludCAq
LCBpbnQpOworI2Vsc2UKK3ZvaWQgc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworI2Vu
ZGlmCisjZW5kaWYKK3ZvaWQgc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RydWN0IHNjdHBfdGNi
ICosIHVpbnQxNl90KTsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykKK3Zv
aWQgc2N0cF9pbnB1dChwYWtoYW5kbGVfdHlwZSBpX3Bhayk7CisjZWxpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCit2b2lkIHNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0cnVjdCBzY3RwX3RjYiAq
LCB1aW50MTZfdCk7CisjZWxzZQordm9pZCBzY3RwX2lucHV0KHN0cnVjdCBtYnVmICosLi4uKTsK
KyNlbmRpZgordm9pZCAqc2N0cF9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lk
ICopOworaW50IHNjdHBfY3Rsb3V0cHV0KGludCwgc3RydWN0IHNvY2tldCAqLCBpbnQsIGludCwg
c3RydWN0IG1idWYgKiopOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK3ZvaWQgc2N0cF9kcmFpbiBfX1AoKHZvaWQpKTsKKyNl
bHNlCit2b2lkIHNjdHBfZHJhaW4odm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCit2b2lkIHNjdHBfaW5pdCh1aW50MTZfdCwKKyAgICAgICAgICAgICAgIGludCAoKiko
dm9pZCAqYWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWlu
dDhfdCBzZXRfZGYpLAorICAgICAgICAgICAgICAgdm9pZCAoKikoY29uc3QgY2hhciAqLCAuLi4p
KTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAy
MDAwCit2b2lkIHNjdHBfaW5pdCBfX1AoKHZvaWQpKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9f
KSAmJiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BB
UkQpICYmIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9O
KSkKK3ZvaWQgc2N0cF9pbml0KHN0cnVjdCBwcm90b3N3ICpwcCwgc3RydWN0IGRvbWFpbiAqZHAp
OworI2Vsc2UKK3ZvaWQgc2N0cF9pbml0KHZvaWQpOwordm9pZCBzY3RwX25vdGlmeShzdHJ1Y3Qg
c2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLAorICAg
IHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MzJfdCk7CisjZW5kaWYKKyNpZiAhZGVm
aW5lZChfX0ZyZWVCU0RfXykKK3ZvaWQgc2N0cF9maW5pc2godm9pZCk7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCitpbnQgc2N0cF9mbHVzaChzdHJ1Y3Qgc29ja2V0ICosIGludCk7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMjAw
MAoraW50IHNjdHBfc2h1dGRvd24gX19QKChzdHJ1Y3Qgc29ja2V0ICopKTsKKyNlbHNlCitpbnQg
c2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICopOworI2VuZGlmCitpbnQgc2N0cF9iaW5keChz
dHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKiwKKwlpbnQsIGlu
dCwgc3RydWN0IHByb2MgKik7CisvKiBjYW4ndCB1c2Ugc2N0cF9hc3NvY190IGhlcmUgKi8KK2lu
dCBzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2V0ICosIGludCwgY2Fk
ZHJfdCwgaW50ICopOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQoraW50IHNjdHBfaW5nZXRhZGRyKHN0cnVjdCBz
b2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQor
aW50IHNjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICopOwor
I2Vsc2UKK2ludCBzY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBtYnVmICop
OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pCitpbnQgc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0
ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKK2ludCBz
Y3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICopOworI2Vsc2UK
K2ludCBzY3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1idWYgKik7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw
MDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKK2ludCBzY3RwX2xpc3RlbihzdHJ1
Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHRocmVhZCAqKTsKKyNlbHNlCitpbnQgc2N0cF9saXN0
ZW4oc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgdGhyZWFkICopOworI2VuZGlmCisjZWxpZiBkZWZp
bmVkKF9fV2luZG93c19fKQoraW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBQ
S1RIUkVBRCk7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgc2N0cF9saXN0ZW4o
c3RydWN0IHNvY2tldCAqLCBpbnQsIHN0cnVjdCBwcm9jICopOworI2Vsc2UKK2ludCBzY3RwX2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBwcm9jICopOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludCBzY3RwX2FjY2VwdChzdHJ1Y3Qgc29j
a2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKK2lu
dCBzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQgKiwg
dm9pZCAqLCBpbnQgKik7CisjZWxzZQoraW50IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwg
c3RydWN0IG1idWYgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2VuZGlm
IC8qICFfTkVUSU5FVF9TQ1RQX1ZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cHV0aWwuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4x
MTM0YjUwNjU3OGJiNzg5NDgxYzJmMzEyOGI4N2NlMTFlYmJmZmM0IDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cHV0aWwuYwpAQCAtMCwwICsxLDgyNjEgQEAKKy8qLQorICogU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAw
MS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBu
YW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0
cHV0aWwuYyAzMzQyODYgMjAxOC0wNS0yOCAxMzozMTo0N1ogdHVleGVuICQiKTsKKyNlbmRpZgor
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Bj
Yi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2lmZGVmIElORVQ2
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lu
Y2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGlt
ZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChJTkVUNikgfHwgZGVmaW5lZChJTkVUKQorI2luY2x1
ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNpbmNsdWRlIDxzeXMvcHJvYy5oPgorI2lm
ZGVmIElORVQ2CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2VuZGlmCisjZW5kaWYKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBBUFBMRV9GSUxFX05PIDgKKyNlbmRpZgor
CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKyNpZiAhZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNF
X0JVRikKKyNpbmNsdWRlICJldmVudHJhY2VfbmV0aW5ldC5oIgorI2luY2x1ZGUgInNjdHB1dGls
LnRtaCIgLyogdGhpcyBpcyB0aGUgZmlsZSB0aGF0IHdpbGwgYmUgYXV0byBnZW5lcmF0ZWQgKi8K
KyNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgS1RSX1NDVFAKKyNkZWZpbmUgS1RSX1NDVFAgS1RSX1NV
QlNZUworI2VuZGlmCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY3RwX2NjX2Z1bmN0
aW9ucyBzY3RwX2NjX2Z1bmN0aW9uc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY3RwX3NzX2Z1
bmN0aW9ucyBzY3RwX3NzX2Z1bmN0aW9uc1tdOworCit2b2lkCitzY3RwX3NibG9nKHN0cnVjdCBz
b2NrYnVmICpzYiwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgZnJvbSwgaW50IGluY3IpCit7
CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xv
ZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5zYi5zdGNiID0gc3RjYjsKKwlzY3RwX2Nsb2cu
eC5zYi5zb19zYmNjID0gc2ItPnNiX2NjOworCWlmIChzdGNiKQorCQlzY3RwX2Nsb2cueC5zYi5z
dGNiX3NiY2MgPSBzdGNiLT5hc29jLnNiX2NjOworCWVsc2UKKwkJc2N0cF9jbG9nLnguc2Iuc3Rj
Yl9zYmNjID0gMDsKKwlzY3RwX2Nsb2cueC5zYi5pbmNyID0gaW5jcjsKKwlTQ1RQX0NUUjYoS1RS
X1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9T
QiwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfbG9nX2Nsb3Np
bmcoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQxNl90
IGxvYykKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3Rw
X2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LmNsb3NlLmlucCA9ICh2b2lkICop
aW5wOworCXNjdHBfY2xvZy54LmNsb3NlLnNjdHBfZmxhZ3MgPSBpbnAtPnNjdHBfZmxhZ3M7CisJ
aWYgKHN0Y2IpIHsKKwkJc2N0cF9jbG9nLnguY2xvc2Uuc3RjYiA9ICh2b2lkICopc3RjYjsKKwkJ
c2N0cF9jbG9nLnguY2xvc2Uuc3RhdGUgPSAodWludDE2X3Qpc3RjYi0+YXNvYy5zdGF0ZTsKKwl9
IGVsc2UgeworCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGNiID0gMDsKKwkJc2N0cF9jbG9nLnguY2xv
c2Uuc3RhdGUgPSAwOworCX0KKwlzY3RwX2Nsb2cueC5jbG9zZS5sb2MgPSBsb2M7CisJU0NUUF9D
VFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0df
RVZFTlRfQ0xPU0UsCisJICAgICAwLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAg
ICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2b2lkCitydG9fbG9n
Z2luZyhzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NU
UF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJ
bWVtc2V0KCZzY3RwX2Nsb2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsKKwlzY3RwX2Nsb2cueC5y
dG8ubmV0ID0gKHZvaWQgKikgbmV0OworCXNjdHBfY2xvZy54LnJ0by5ydHQgPSBuZXQtPnJ0dCAv
IDEwMDA7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfUlRULAorCSAgICAgZnJvbSwKKwkgICAgIHNjdHBfY2xvZy54
Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAgIHNjdHBfY2xv
Zy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7CisjZW5kaWYKK30K
Kwordm9pZAorc2N0cF9sb2dfc3RybV9kZWxfYWx0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDMyX3QgdHNuLCB1aW50MTZfdCBzc2VxLCB1aW50MTZfdCBzdHJlYW0sIGludCBmcm9tKQorewor
I2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cg
c2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguc3RybG9nLnN0Y2IgPSBzdGNiOworCXNjdHBfY2xv
Zy54LnN0cmxvZy5uX3RzbiA9IHRzbjsKKwlzY3RwX2Nsb2cueC5zdHJsb2cubl9zc2VxID0gc3Nl
cTsKKwlzY3RwX2Nsb2cueC5zdHJsb2cuZV90c24gPSAwOworCXNjdHBfY2xvZy54LnN0cmxvZy5l
X3NzZXEgPSAwOworCXNjdHBfY2xvZy54LnN0cmxvZy5zdHJtID0gc3RyZWFtOworCVNDVFBfQ1RS
NihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VW
RU5UX1NUUk0sCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAg
ICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2b2lkCitzY3RwX2xv
Z19uYWdsZV9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBhY3Rpb24pCit7CisjaWYg
ZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3Rw
X2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5uYWdsZS5zdGNiID0gKHZvaWQgKilzdGNiOworCXNjdHBf
Y2xvZy54Lm5hZ2xlLnRvdGFsX2ZsaWdodCA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCXNj
dHBfY2xvZy54Lm5hZ2xlLnRvdGFsX2luX3F1ZXVlID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZTsKKwlzY3RwX2Nsb2cueC5uYWdsZS5jb3VudF9pbl9xdWV1ZSA9IHN0Y2ItPmFz
b2MuY2h1bmtzX29uX291dF9xdWV1ZTsKKwlzY3RwX2Nsb2cueC5uYWdsZS5jb3VudF9pbl9mbGln
aHQgPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudDsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAs
ICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9OQUdMRSwK
KwkgICAgIGFjdGlvbiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nNCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfc2Fjayh1
aW50MzJfdCBvbGRfY3VtYWNrLCB1aW50MzJfdCBjdW1hY2ssIHVpbnQzMl90IHRzbiwgdWludDE2
X3QgZ2FwcywgdWludDE2X3QgZHVwcywgaW50IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xP
Q0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3Rw
X2Nsb2cueC5zYWNrLmN1bWFjayA9IGN1bWFjazsKKwlzY3RwX2Nsb2cueC5zYWNrLm9sZGN1bWFj
ayA9IG9sZF9jdW1hY2s7CisJc2N0cF9jbG9nLnguc2Fjay50c24gPSB0c247CisJc2N0cF9jbG9n
Lnguc2Fjay5udW1HYXBzID0gZ2FwczsKKwlzY3RwX2Nsb2cueC5zYWNrLm51bUR1cHMgPSBkdXBz
OworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAg
IFNDVFBfTE9HX0VWRU5UX1NBQ0ssCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlz
Yy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngu
bWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2
b2lkCitzY3RwX2xvZ19tYXAodWludDMyX3QgbWFwLCB1aW50MzJfdCBjdW0sIHVpbnQzMl90IGhp
Z2gsIGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3Ry
dWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJbWVtc2V0KCZzY3RwX2Nsb2csIDAsIHNp
emVvZihzY3RwX2Nsb2cpKTsKKwlzY3RwX2Nsb2cueC5tYXAuYmFzZSA9IG1hcDsKKwlzY3RwX2Ns
b2cueC5tYXAuY3VtID0gY3VtOworCXNjdHBfY2xvZy54Lm1hcC5oaWdoID0gaGlnaDsKKwlTQ1RQ
X0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xP
R19FVkVOVF9NQVAsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cz
LAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2b2lkCitzY3Rw
X2xvZ19mcih1aW50MzJfdCBiaWdnZXN0X3RzbiwgdWludDMyX3QgYmlnZ2VzdF9uZXdfdHNuLCB1
aW50MzJfdCB0c24sIGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9C
VUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJbWVtc2V0KCZzY3RwX2Ns
b2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsKKwlzY3RwX2Nsb2cueC5mci5sYXJnZXN0X3RzbiA9
IGJpZ2dlc3RfdHNuOworCXNjdHBfY2xvZy54LmZyLmxhcmdlc3RfbmV3X3RzbiA9IGJpZ2dlc3Rf
bmV3X3RzbjsKKwlzY3RwX2Nsb2cueC5mci50c24gPSB0c247CisJU0NUUF9DVFI2KEtUUl9TQ1RQ
LCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfRlIsCisJ
ICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcK
K3ZvaWQKK3NjdHBfbG9nX21iKHN0cnVjdCBtYnVmICptLCBpbnQgZnJvbSkKK3sKKyNpZiBkZWZp
bmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xv
ZzsKKworCXNjdHBfY2xvZy54Lm1iLm1wID0gbTsKKwlzY3RwX2Nsb2cueC5tYi5tYnVmX2ZsYWdz
ID0gKHVpbnQ4X3QpKFNDVFBfQlVGX0dFVF9GTEFHUyhtKSk7CisJc2N0cF9jbG9nLngubWIuc2l6
ZSA9ICh1aW50MTZfdCkoU0NUUF9CVUZfTEVOKG0pKTsKKwlzY3RwX2Nsb2cueC5tYi5kYXRhID0g
U0NUUF9CVUZfQVQobSwgMCk7CisJaWYgKFNDVFBfQlVGX0lTX0VYVEVOREVEKG0pKSB7CisJCXNj
dHBfY2xvZy54Lm1iLmV4dCA9IFNDVFBfQlVGX0VYVEVORF9CQVNFKG0pOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKQorCQkvKiBBUFBMRSBkb2VzIG5vdCB1c2UgYSByZWZfY250LCBidXQgYSBmb3J3
YXJkL2JhY2t3YXJkIHJlZiBxdWV1ZSAqLworI2Vsc2UKKwkJc2N0cF9jbG9nLngubWIucmVmY250
ID0gKHVpbnQ4X3QpKFNDVFBfQlVGX0VYVEVORF9SRUZDTlQobSkpOworI2VuZGlmCisJfSBlbHNl
IHsKKwkJc2N0cF9jbG9nLngubWIuZXh0ID0gMDsKKwkJc2N0cF9jbG9nLngubWIucmVmY250ID0g
MDsKKwl9CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfTUJVRiwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9
CisKK3ZvaWQKK3NjdHBfbG9nX21iYyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGZyb20pCit7CisJc3Ry
dWN0IG1idWYgKm1hdDsKKworCWZvciAobWF0ID0gbTsgbWF0OyBtYXQgPSBTQ1RQX0JVRl9ORVhU
KG1hdCkpIHsKKwkJc2N0cF9sb2dfbWIobWF0LCBmcm9tKTsKKwl9Cit9CisjZW5kaWYKKwordm9p
ZAorc2N0cF9sb2dfc3RybV9kZWwoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2ws
IHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpwb3NjaGssIGludCBmcm9tKQoreworI2lmIGRl
ZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9j
bG9nOworCisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5URigiR2FrIGxvZyBv
ZiBOVUxMP1xuIik7CisJCXJldHVybjsKKwl9CisJc2N0cF9jbG9nLnguc3RybG9nLnN0Y2IgPSBj
b250cm9sLT5zdGNiOworCXNjdHBfY2xvZy54LnN0cmxvZy5uX3RzbiA9IGNvbnRyb2wtPnNpbmZv
X3RzbjsKKwlzY3RwX2Nsb2cueC5zdHJsb2cubl9zc2VxID0gKHVpbnQxNl90KWNvbnRyb2wtPm1p
ZDsKKwlzY3RwX2Nsb2cueC5zdHJsb2cuc3RybSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKKwlp
ZiAocG9zY2hrICE9IE5VTEwpIHsKKwkJc2N0cF9jbG9nLnguc3RybG9nLmVfdHNuID0gcG9zY2hr
LT5zaW5mb190c247CisJCXNjdHBfY2xvZy54LnN0cmxvZy5lX3NzZXEgPSAodWludDE2X3QpcG9z
Y2hrLT5taWQ7CisJfSBlbHNlIHsKKwkJc2N0cF9jbG9nLnguc3RybG9nLmVfdHNuID0gMDsKKwkJ
c2N0cF9jbG9nLnguc3RybG9nLmVfc3NlcSA9IDA7CisJfQorCVNDVFBfQ1RSNihLVFJfU0NUUCwg
IlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX1NUUk0sCisJ
ICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2b2lkCitzY3RwX2xvZ19jd25kKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgYXVnbWVudCwgdWlu
dDhfdCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0
IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguY3duZC5uZXQgPSBuZXQ7
CisJaWYgKHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQgPiAyNTUpCisJCXNjdHBfY2xvZy54LmN3
bmQuY250X2luX3NlbmQgPSAyNTU7CisJZWxzZQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9z
ZW5kID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKKwlpZiAoc3RjYi0+YXNvYy5zdHJlYW1f
cXVldWVfY250ID4gMjU1KQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSAyNTU7CisJ
ZWxzZQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSBzdGNiLT5hc29jLnN0cmVhbV9x
dWV1ZV9jbnQ7CisKKwlpZiAobmV0KSB7CisJCXNjdHBfY2xvZy54LmN3bmQuY3duZF9uZXdfdmFs
dWUgPSBuZXQtPmN3bmQ7CisJCXNjdHBfY2xvZy54LmN3bmQuaW5mbGlnaHQgPSBuZXQtPmZsaWdo
dF9zaXplOworCQlzY3RwX2Nsb2cueC5jd25kLnBzZXVkb19jdW1hY2sgPSBuZXQtPnBzZXVkb19j
dW1hY2s7CisJCXNjdHBfY2xvZy54LmN3bmQubWVldHNfcHNldWRvX2N1bWFjayA9IG5ldC0+bmV3
X3BzZXVkb19jdW1hY2s7CisJCXNjdHBfY2xvZy54LmN3bmQubmVlZF9uZXdfcHNldWRvX2N1bWFj
ayA9IG5ldC0+ZmluZF9wc2V1ZG9fY3VtYWNrOworCX0KKwlpZiAoU0NUUF9DV05ETE9HX1BSRVNF
TkQgPT0gZnJvbSkgeworCQlzY3RwX2Nsb2cueC5jd25kLm1lZXRzX3BzZXVkb19jdW1hY2sgPSBz
dGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJfQorCXNjdHBfY2xvZy54LmN3bmQuY3duZF9hdWdtZW50
ID0gYXVnbWVudDsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0l
eCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9DV05ELAorCSAgICAgZnJvbSwKKwkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7CisjZW5k
aWYKK30KKworI2lmbmRlZiBfX0FQUExFX18KK3ZvaWQKK3NjdHBfbG9nX2xvY2soc3RydWN0IHNj
dHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IGZyb20pCit7Cisj
aWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBz
Y3RwX2Nsb2c7CisKKwltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBfY2xvZykpOwor
CWlmIChpbnApIHsKKwkJc2N0cF9jbG9nLngubG9jay5zb2NrID0gKHZvaWQgKikgaW5wLT5zY3Rw
X3NvY2tldDsKKworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suc29jayA9ICh2b2lkICop
IE5VTEw7CisJfQorCXNjdHBfY2xvZy54LmxvY2suaW5wID0gKHZvaWQgKikgaW5wOworI2lmIChk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDApIHx8IChk
ZWZpbmVkKF9fQVBQTEVfXykpCisJaWYgKHN0Y2IpIHsKKwkJc2N0cF9jbG9nLngubG9jay50Y2Jf
bG9jayA9IG10eF9vd25lZCgmc3RjYi0+dGNiX210eCk7CisJfSBlbHNlIHsKKwkJc2N0cF9jbG9n
LngubG9jay50Y2JfbG9jayA9IFNDVFBfTE9DS19VTktOT1dOOworCX0KKwlpZiAoaW5wKSB7CisJ
CXNjdHBfY2xvZy54LmxvY2suaW5wX2xvY2sgPSBtdHhfb3duZWQoJmlucC0+aW5wX210eCk7CisJ
CXNjdHBfY2xvZy54LmxvY2suY3JlYXRlX2xvY2sgPSBtdHhfb3duZWQoJmlucC0+aW5wX2NyZWF0
ZV9tdHgpOworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suaW5wX2xvY2sgPSBTQ1RQX0xP
Q0tfVU5LTk9XTjsKKwkJc2N0cF9jbG9nLngubG9jay5jcmVhdGVfbG9jayA9IFNDVFBfTE9DS19V
TktOT1dOOworCX0KKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPD0gNjAyMDAwKQorCXNjdHBfY2xvZy54LmxvY2suaW5mb19sb2NrID0gbXR4X293bmVkKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSk7CisjZWxzZQorCXNjdHBfY2xvZy54LmxvY2suaW5m
b19sb2NrID0gcndfd293bmVkKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSk7CisjZW5kaWYK
KwlpZiAoaW5wICYmIChpbnAtPnNjdHBfc29ja2V0KSkgeworCQlzY3RwX2Nsb2cueC5sb2NrLnNv
Y2tfbG9jayA9IG10eF9vd25lZCgmKGlucC0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9tdHgpKTsK
KwkJc2N0cF9jbG9nLngubG9jay5zb2NrcmN2YnVmX2xvY2sgPSBtdHhfb3duZWQoJihpbnAtPnNj
dHBfc29ja2V0LT5zb19yY3Yuc2JfbXR4KSk7CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3NuZGJ1
Zl9sb2NrID0gbXR4X293bmVkKCYoaW5wLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX210eCkpOwor
CX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suc29ja19sb2NrID0gU0NUUF9MT0NLX1VOS05P
V047CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3JjdmJ1Zl9sb2NrID0gU0NUUF9MT0NLX1VOS05P
V047CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3NuZGJ1Zl9sb2NrID0gU0NUUF9MT0NLX1VOS05P
V047CisJfQorI2VuZGlmCisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgt
JXgtJXgiLAorCSAgICAgU0NUUF9MT0dfTE9DS19FVkVOVCwKKwkgICAgIGZyb20sCisJICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAg
ICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwor
I2VuZGlmCit9CisjZW5kaWYKKwordm9pZAorc2N0cF9sb2dfbWF4YnVyc3Qoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBlcnJvciwgaW50IGJ1cnN0LCB1
aW50OF90IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1
Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6
ZW9mKHNjdHBfY2xvZykpOworCXNjdHBfY2xvZy54LmN3bmQubmV0ID0gbmV0OworCXNjdHBfY2xv
Zy54LmN3bmQuY3duZF9uZXdfdmFsdWUgPSBlcnJvcjsKKwlzY3RwX2Nsb2cueC5jd25kLmluZmxp
Z2h0ID0gbmV0LT5mbGlnaHRfc2l6ZTsKKwlzY3RwX2Nsb2cueC5jd25kLmN3bmRfYXVnbWVudCA9
IGJ1cnN0OworCWlmIChzdGNiLT5hc29jLnNlbmRfcXVldWVfY250ID4gMjU1KQorCQlzY3RwX2Ns
b2cueC5jd25kLmNudF9pbl9zZW5kID0gMjU1OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5j
bnRfaW5fc2VuZCA9IHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQ7CisJaWYgKHN0Y2ItPmFzb2Mu
c3RyZWFtX3F1ZXVlX2NudCA+IDI1NSkKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0g
MjU1OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3RyID0gc3RjYi0+YXNvYy5z
dHJlYW1fcXVldWVfY250OworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4
LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX01BWEJVUlNULAorCSAgICAgZnJvbSwKKwkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwK
KwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
NCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfcnduZCh1aW50OF90IGZyb20sIHVpbnQz
Ml90IHBlZXJzX3J3bmQsIHVpbnQzMl90IHNuZF9zaXplLCB1aW50MzJfdCBvdmVyaGVhZCkKK3sK
KyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9n
IHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LnJ3bmQucnduZCA9IHBlZXJzX3J3bmQ7CisJc2N0
cF9jbG9nLngucnduZC5zZW5kX3NpemUgPSBzbmRfc2l6ZTsKKwlzY3RwX2Nsb2cueC5yd25kLm92
ZXJoZWFkID0gb3ZlcmhlYWQ7CisJc2N0cF9jbG9nLngucnduZC5uZXdfcnduZCA9IDA7CisJU0NU
UF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9M
T0dfRVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEs
CisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3Nj
dHBfbG9nX3J3bmRfc2V0KHVpbnQ4X3QgZnJvbSwgdWludDMyX3QgcGVlcnNfcnduZCwgdWludDMy
X3QgZmxpZ2h0X3NpemUsIHVpbnQzMl90IG92ZXJoZWFkLCB1aW50MzJfdCBhX3J3bmR2YWwpCit7
CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xv
ZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5yd25kLnJ3bmQgPSBwZWVyc19yd25kOworCXNj
dHBfY2xvZy54LnJ3bmQuc2VuZF9zaXplID0gZmxpZ2h0X3NpemU7CisJc2N0cF9jbG9nLngucndu
ZC5vdmVyaGVhZCA9IG92ZXJoZWFkOworCXNjdHBfY2xvZy54LnJ3bmQubmV3X3J3bmQgPSBhX3J3
bmR2YWw7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9
CisKKyNpZmRlZiBTQ1RQX01CQ05UX0xPR0dJTkcKK3N0YXRpYyB2b2lkCitzY3RwX2xvZ19tYmNu
dCh1aW50OF90IGZyb20sIHVpbnQzMl90IHRvdGFsX29xLCB1aW50MzJfdCBib29rLCB1aW50MzJf
dCB0b3RhbF9tYmNudF9xLCB1aW50MzJfdCBtYmNudCkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9D
QUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBf
Y2xvZy54Lm1iY250LnRvdGFsX3F1ZXVlX3NpemUgPSB0b3RhbF9vcTsKKwlzY3RwX2Nsb2cueC5t
YmNudC5zaXplX2NoYW5nZSA9IGJvb2s7CisJc2N0cF9jbG9nLngubWJjbnQudG90YWxfcXVldWVf
bWJfc2l6ZSA9IHRvdGFsX21iY250X3E7CisJc2N0cF9jbG9nLngubWJjbnQubWJjbnRfY2hhbmdl
ID0gbWJjbnQ7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgi
LAorCSAgICAgU0NUUF9MT0dfRVZFTlRfTUJDTlQsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0
cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRp
ZgorfQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfbWlzY19pbnRzKHVpbnQ4X3QgZnJvbSwgdWludDMy
X3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCkKK3sKKyNpZiBkZWZpbmVk
KFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRd
OiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX01JU0NfRVZFTlQsCisJICAgICBmcm9tLAor
CSAgICAgYSwgYiwgYywgZCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF93YWtldXBfbG9nKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgd2FrZV9jbnQsIGludCBmcm9tKQoreworI2lm
IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0
cF9jbG9nOworCisJc2N0cF9jbG9nLngud2FrZS5zdGNiID0gKHZvaWQgKilzdGNiOworCXNjdHBf
Y2xvZy54Lndha2Uud2FrZV9jbnQgPSB3YWtlX2NudDsKKwlzY3RwX2Nsb2cueC53YWtlLmZsaWdo
dCA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50OworCXNjdHBfY2xvZy54Lndha2Uuc2Vu
ZF9xID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKKwlzY3RwX2Nsb2cueC53YWtlLnNlbnRf
cSA9IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQ7CisKKwlpZiAoc3RjYi0+YXNvYy5zdHJlYW1f
cXVldWVfY250IDwgMHhmZikKKwkJc2N0cF9jbG9nLngud2FrZS5zdHJlYW1fcWNudCA9ICh1aW50
OF90KSBzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQ7CisJZWxzZQorCQlzY3RwX2Nsb2cueC53
YWtlLnN0cmVhbV9xY250ID0gMHhmZjsKKworCWlmIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRf
cXVldWUgPCAweGZmKQorCQlzY3RwX2Nsb2cueC53YWtlLmNodW5rc19vbl9vcXVlID0gKHVpbnQ4
X3QpIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZTsKKwllbHNlCisJCXNjdHBfY2xvZy54
Lndha2UuY2h1bmtzX29uX29xdWUgPSAweGZmOworCisJc2N0cF9jbG9nLngud2FrZS5zY3RwZmxh
Z3MgPSAwOworCS8qIHNldCBpbiB0aGUgZGVmZXJlZCBtb2RlIHN0dWZmICovCisJaWYgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpCisJCXNjdHBf
Y2xvZy54Lndha2Uuc2N0cGZsYWdzIHw9IDE7CisJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUKQorCQlzY3RwX2Nsb2cueC53YWtlLnNjdHBm
bGFncyB8PSAyOworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfV0FLRUlOUFVUKQorCQlzY3RwX2Nsb2cueC53YWtlLnNjdHBmbGFncyB8PSA0OworCS8qIHdo
YXQgYWJvdXQgdGhlIHNiICovCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJCXN0cnVjdCBz
b2NrZXQgKnNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisKKwkJc2N0cF9jbG9nLngud2FrZS5zYmZs
YWdzID0gKHVpbnQ4X3QpKChzby0+c29fc25kLnNiX2ZsYWdzICYgMHgwMGZmKSk7CisJfSBlbHNl
IHsKKwkJc2N0cF9jbG9nLngud2FrZS5zYmZsYWdzID0gMHhmZjsKKwl9CisJU0NUUF9DVFI2KEtU
Ul9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRf
V0FLRSwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAg
ICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfbG9nX2Js
b2NrKHVpbnQ4X3QgZnJvbSwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsIHNpemVfdCBz
ZW5kbGVuKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNj
dHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguYmxrLm9uc2IgPSBhc29jLT50
b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsKKwlzY3RwX2Nsb2cueC5ibGsuc2VuZF9zZW50X3FjbnQg
PSAodWludDE2X3QpIChhc29jLT5zZW5kX3F1ZXVlX2NudCArIGFzb2MtPnNlbnRfcXVldWVfY250
KTsKKwlzY3RwX2Nsb2cueC5ibGsucGVlcl9yd25kID0gYXNvYy0+cGVlcnNfcnduZDsKKwlzY3Rw
X2Nsb2cueC5ibGsuc3RyZWFtX3FjbnQgPSAodWludDE2X3QpIGFzb2MtPnN0cmVhbV9xdWV1ZV9j
bnQ7CisJc2N0cF9jbG9nLnguYmxrLmNodW5rc19vbl9vcXVlID0gKHVpbnQxNl90KSBhc29jLT5j
aHVua3Nfb25fb3V0X3F1ZXVlOworCXNjdHBfY2xvZy54LmJsay5mbGlnaHRfc2l6ZSA9ICh1aW50
MTZfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodC8xMDI0KTsKKwlzY3RwX2Nsb2cueC5ibGsuc25kbGVu
ID0gKHVpbnQzMl90KXNlbmRsZW47CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06
JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfQkxPQ0ssCisJICAgICBmcm9tLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cy
LAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5s
b2c0KTsKKyNlbmRpZgorfQorCitpbnQKK3NjdHBfZmlsbF9zdGF0X2xvZyh2b2lkICpvcHR2YWwg
U0NUUF9VTlVTRUQsIHNpemVfdCAqb3B0c2l6ZSBTQ1RQX1VOVVNFRCkKK3sKKwkvKiBNYXkgbmVl
ZCB0byBmaXggdGhpcyBpZiBrdHJkdW1wIGRvZXMgbm90IHdvcmsgKi8KKwlyZXR1cm4gKDApOwor
fQorCisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECit1aW50OF90IHNjdHBfYXVkaXRfZGF0
YVtTQ1RQX0FVRElUX1NJWkVdWzJdOworc3RhdGljIGludCBzY3RwX2F1ZGl0X2luZHggPSAwOwor
CitzdGF0aWMKK3ZvaWQKK3NjdHBfcHJpbnRfYXVkaXRfcmVwb3J0KHZvaWQpCit7CisJaW50IGk7
CisJaW50IGNudDsKKworCWNudCA9IDA7CisJZm9yIChpID0gc2N0cF9hdWRpdF9pbmR4OyBpIDwg
U0NUUF9BVURJVF9TSVpFOyBpKyspIHsKKwkJaWYgKChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0g
MHhlMCkgJiYKKwkJICAgIChzY3RwX2F1ZGl0X2RhdGFbaV1bMV0gPT0gMHgwMSkpIHsKKwkJCWNu
dCA9IDA7CisJCQlTQ1RQX1BSSU5URigiXG4iKTsKKwkJfSBlbHNlIGlmIChzY3RwX2F1ZGl0X2Rh
dGFbaV1bMF0gPT0gMHhmMCkgeworCQkJY250ID0gMDsKKwkJCVNDVFBfUFJJTlRGKCJcbiIpOwor
CQl9IGVsc2UgaWYgKChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0gMHhjMCkgJiYKKwkJICAgIChz
Y3RwX2F1ZGl0X2RhdGFbaV1bMV0gPT0gMHgwMSkpIHsKKwkJCVNDVFBfUFJJTlRGKCJcbiIpOwor
CQkJY250ID0gMDsKKwkJfQorCQlTQ1RQX1BSSU5URigiJTIuMnglMi4yeCAiLCAodWludDMyX3Qp
IHNjdHBfYXVkaXRfZGF0YVtpXVswXSwKKwkJCSAgICAodWludDMyX3QpIHNjdHBfYXVkaXRfZGF0
YVtpXVsxXSk7CisJCWNudCsrOworCQlpZiAoKGNudCAlIDE0KSA9PSAwKQorCQkJU0NUUF9QUklO
VEYoIlxuIik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzY3RwX2F1ZGl0X2luZHg7IGkrKykgewor
CQlpZiAoKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGUwKSAmJgorCQkgICAgKHNjdHBfYXVk
aXRfZGF0YVtpXVsxXSA9PSAweDAxKSkgeworCQkJY250ID0gMDsKKwkJCVNDVFBfUFJJTlRGKCJc
biIpOworCQl9IGVsc2UgaWYgKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGYwKSB7CisJCQlj
bnQgPSAwOworCQkJU0NUUF9QUklOVEYoIlxuIik7CisJCX0gZWxzZSBpZiAoKHNjdHBfYXVkaXRf
ZGF0YVtpXVswXSA9PSAweGMwKSAmJgorCQkgICAgKHNjdHBfYXVkaXRfZGF0YVtpXVsxXSA9PSAw
eDAxKSkgeworCQkJU0NUUF9QUklOVEYoIlxuIik7CisJCQljbnQgPSAwOworCQl9CisJCVNDVFBf
UFJJTlRGKCIlMi4yeCUyLjJ4ICIsICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzBdLAor
CQkJICAgICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzFdKTsKKwkJY250Kys7CisJCWlm
ICgoY250ICUgMTQpID09IDApCisJCQlTQ1RQX1BSSU5URigiXG4iKTsKKwl9CisJU0NUUF9QUklO
VEYoIlxuIik7Cit9CisKK3ZvaWQKK3NjdHBfYXVkaXRpbmcoaW50IGZyb20sIHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQpCit7CisJaW50IHJlc2VuZF9jbnQsIHRvdF9vdXQsIHJlcCwgdG90X2Jvb2tfY250Owor
CXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwor
CisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFBOworCXNjdHBfYXVk
aXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHgwMDAwMDBmZiAmIGZyb207CisJc2N0cF9h
dWRpdF9pbmR4Kys7CisJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsK
KwkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwl9CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCXNjdHBf
YXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0cF9hdWRpdF9kYXRh
W3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweDAxOworCQlzY3RwX2F1ZGl0X2luZHgrKzsKKwkJaWYg
KHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNjdHBfYXVkaXRfaW5k
eCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXNjdHBf
YXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0cF9hdWRpdF9kYXRh
W3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweDAyOworCQlzY3RwX2F1ZGl0X2luZHgrKzsKKwkJaWYg
KHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNjdHBfYXVkaXRfaW5k
eCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKwlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9p
bmR4XVswXSA9IDB4QTE7CisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPQor
CSAgICAoMHgwMDAwMDBmZiAmIHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwlz
Y3RwX2F1ZGl0X2luZHgrKzsKKwlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0la
RSkgeworCQlzY3RwX2F1ZGl0X2luZHggPSAwOworCX0KKwlyZXAgPSAwOworCXRvdF9ib29rX2Nu
dCA9IDA7CisJcmVzZW5kX2NudCA9IHRvdF9vdXQgPSAwOworCVRBSUxRX0ZPUkVBQ0goY2hrLCAm
c3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VudCA9PSBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJcmVzZW5kX2NudCsrOworCQl9IGVsc2UgaWYgKGNo
ay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQl0b3Rfb3V0ICs9IGNoay0+Ym9v
a19zaXplOworCQkJdG90X2Jvb2tfY250Kys7CisJCX0KKwl9CisJaWYgKHJlc2VuZF9jbnQgIT0g
c3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsKKwkJc2N0cF9hdWRpdF9kYXRhW3Nj
dHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOworCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9p
bmR4XVsxXSA9IDB4QTE7CisJCXNjdHBfYXVkaXRfaW5keCsrOworCQlpZiAoc2N0cF9hdWRpdF9p
bmR4ID49IFNDVFBfQVVESVRfU0laRSkgeworCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwkJfQor
CQlTQ1RQX1BSSU5URigicmVzZW5kX2NudDolZCBhc29jLXRvdDolZFxuIiwKKwkJCSAgICByZXNl
bmRfY250LCBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCXJlcCA9IDE7CisJ
CXN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ID0gcmVzZW5kX2NudDsKKwkJc2N0cF9h
dWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEEyOworCQlzY3RwX2F1ZGl0X2RhdGFb
c2N0cF9hdWRpdF9pbmR4XVsxXSA9CisJCSAgICAoMHgwMDAwMDBmZiAmIHN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlmIChzY3RwX2F1
ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2luZHggPSAwOwor
CQl9CisJfQorCWlmICh0b3Rfb3V0ICE9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KSB7CisJCXNj
dHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0cF9hdWRpdF9k
YXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweEEyOworCQlzY3RwX2F1ZGl0X2luZHgrKzsKKwkJ
aWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNjdHBfYXVkaXRf
aW5keCA9IDA7CisJCX0KKwkJcmVwID0gMTsKKwkJU0NUUF9QUklOVEYoInRvdF9mbHQ6JWQgYXNv
Y190b3Q6JWRcbiIsIHRvdF9vdXQsCisJCQkgICAgKGludClzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dCk7CisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID0gdG90X291dDsKKwl9CisJaWYgKHRvdF9i
b29rX2NudCAhPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCkgeworCQlzY3RwX2F1ZGl0
X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3Rw
X2F1ZGl0X2luZHhdWzFdID0gMHhBNTsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7CisJCWlmIChzY3Rw
X2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1ZGl0X2luZHggPSAw
OworCQl9CisJCXJlcCA9IDE7CisJCVNDVFBfUFJJTlRGKCJ0b3RfZmx0X2Jvb2s6JWRcbiIsIHRv
dF9ib29rX2NudCk7CisKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQgPSB0b3RfYm9v
a19jbnQ7CisJfQorCXRvdF9vdXQgPSAwOworCVRBSUxRX0ZPUkVBQ0gobG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCXRvdF9vdXQgKz0gbG5ldC0+ZmxpZ2h0X3NpemU7CisJ
fQorCWlmICh0b3Rfb3V0ICE9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KSB7CisJCXNjdHBfYXVk
aXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0cF9hdWRpdF9kYXRhW3Nj
dHBfYXVkaXRfaW5keF1bMV0gPSAweEEzOworCQlzY3RwX2F1ZGl0X2luZHgrKzsKKwkJaWYgKHNj
dHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNjdHBfYXVkaXRfaW5keCA9
IDA7CisJCX0KKwkJcmVwID0gMTsKKwkJU0NUUF9QUklOVEYoInJlYWwgZmxpZ2h0OiVkIG5ldCB0
b3RhbCB3YXMgJWRcbiIsCisJCQkgICAgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsIHRvdF9vdXQp
OworCQkvKiBub3cgY29ycmVjdGl2ZSBhY3Rpb24gKi8KKwkJVEFJTFFfRk9SRUFDSChsbmV0LCAm
c3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKworCQkJdG90X291dCA9IDA7CisJCQlUQUlM
UV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQkJ
aWYgKChjaGstPndob1RvID09IGxuZXQpICYmCisJCQkJICAgIChjaGstPnNlbnQgPCBTQ1RQX0RB
VEFHUkFNX1JFU0VORCkpIHsKKwkJCQkJdG90X291dCArPSBjaGstPmJvb2tfc2l6ZTsKKwkJCQl9
CisJCQl9CisJCQlpZiAobG5ldC0+ZmxpZ2h0X3NpemUgIT0gdG90X291dCkgeworCQkJCVNDVFBf
UFJJTlRGKCJuZXQ6JXAgZmxpZ2h0IHdhcyAlZCBjb3JyZWN0ZWQgdG8gJWRcbiIsCisJCQkJCSAg
ICAodm9pZCAqKWxuZXQsIGxuZXQtPmZsaWdodF9zaXplLAorCQkJCQkgICAgdG90X291dCk7CisJ
CQkJbG5ldC0+ZmxpZ2h0X3NpemUgPSB0b3Rfb3V0OworCQkJfQorCQl9CisJfQorCWlmIChyZXAp
IHsKKwkJc2N0cF9wcmludF9hdWRpdF9yZXBvcnQoKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfYXVk
aXRfbG9nKHVpbnQ4X3QgZXYsIHVpbnQ4X3QgZmQpCit7CisKKwlzY3RwX2F1ZGl0X2RhdGFbc2N0
cF9hdWRpdF9pbmR4XVswXSA9IGV2OworCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhd
WzFdID0gZmQ7CisJc2N0cF9hdWRpdF9pbmR4Kys7CisJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBT
Q1RQX0FVRElUX1NJWkUpIHsKKwkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwl9Cit9CisKKyNlbmRp
ZgorCisvKgorICogc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oKSBzaG91bGQgYmUgY2Fs
bGVkCisgKiB3aGVuIGVudGVyaW5nIHRoZSBTSFVURE9XTl9TRU5UIG9yIFNIVVRET1dOX0FDS19T
RU5UCisgKiBzdGF0ZSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGltZXJzIGFyZSBzdG9wcGVkLgor
ICovCit2b2lkCitzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBf
bmV0cyAqbmV0OworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCisJKHZvaWQpU0NUUF9PU19USU1F
Ul9TVE9QKCZhc29jLT5kYWNrX3RpbWVyLnRpbWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NU
T1AoJmFzb2MtPnN0cnJlc2V0X3RpbWVyLnRpbWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NU
T1AoJmFzb2MtPmFzY29uZl90aW1lci50aW1lcik7CisJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9Q
KCZhc29jLT5hdXRvY2xvc2VfdGltZXIudGltZXIpOworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RP
UCgmYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50aW1lcik7CisJVEFJTFFfRk9SRUFDSChuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZu
ZXQtPnBtdHVfdGltZXIudGltZXIpOworCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+
aGJfdGltZXIudGltZXIpOworCX0KK30KKworLyoKKyAqIEEgbGlzdCBvZiBzaXplcyBiYXNlZCBv
biB0eXBpY2FsIG10dSdzLCB1c2VkIG9ubHkgaWYgbmV4dCBob3Agc2l6ZSBub3QKKyAqIHJldHVy
bmVkLiBUaGVzZSB2YWx1ZXMgTVVTVCBiZSBtdWx0aXBsZXMgb2YgNCBhbmQgTVVTVCBiZSBvcmRl
cmVkLgorICovCitzdGF0aWMgdWludDMyX3Qgc2N0cF9tdHVfc2l6ZXNbXSA9IHsKKwk2OCwKKwky
OTYsCisJNTA4LAorCTUxMiwKKwk1NDQsCisJNTc2LAorCTEwMDQsCisJMTQ5MiwKKwkxNTAwLAor
CTE1MzYsCisJMjAwMCwKKwkyMDQ4LAorCTQzNTIsCisJNDQ2NCwKKwk4MTY2LAorCTE3OTEyLAor
CTMyMDAwLAorCTY1NTMyCit9OworCisvKgorICogUmV0dXJuIHRoZSBsYXJnZXN0IE1UVSBpbiBz
Y3RwX210dV9zaXplcyBzbWFsbGVyIHRoYW4gdmFsLgorICogSWYgdmFsIGlzIHNtYWxsZXIgdGhh
biB0aGUgbWluaW11bSwganVzdCByZXR1cm4gdGhlIGxhcmdlc3QKKyAqIG11bHRpcGxlIG9mIDQg
c21hbGxlciBvciBlcXVhbCB0byB2YWwuCisgKiBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIGEg
bXVsdGlwbGUgb2YgNC4KKyAqLwordWludDMyX3QKK3NjdHBfZ2V0X3ByZXZfbXR1KHVpbnQzMl90
IHZhbCkKK3sKKwl1aW50MzJfdCBpOworCisJdmFsICY9IDB4ZmZmZmZmZmM7CisJaWYgKHZhbCA8
PSBzY3RwX210dV9zaXplc1swXSkgeworCQlyZXR1cm4gKHZhbCk7CisJfQorCWZvciAoaSA9IDE7
IGkgPCAoc2l6ZW9mKHNjdHBfbXR1X3NpemVzKSAvIHNpemVvZih1aW50MzJfdCkpOyBpKyspIHsK
KwkJaWYgKHZhbCA8PSBzY3RwX210dV9zaXplc1tpXSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJ
S0FTU0VSVCgoc2N0cF9tdHVfc2l6ZXNbaSAtIDFdICYgMHgwMDAwMDAwMykgPT0gMCwKKwkgICAg
ICAgICgic2N0cF9tdHVfc2l6ZXNbJXVdIG5vdCBhIG11bHRpcGxlIG9mIDQiLCBpIC0gMSkpOwor
CXJldHVybiAoc2N0cF9tdHVfc2l6ZXNbaSAtIDFdKTsKK30KKworLyoKKyAqIFJldHVybiB0aGUg
c21hbGxlc3QgTVRVIGluIHNjdHBfbXR1X3NpemVzIGxhcmdlciB0aGFuIHZhbC4KKyAqIElmIHZh
bCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSwganVzdCByZXR1cm4gdGhlIGxhcmdlc3QgbXVs
dGlwbGUgb2YgNCBzbWFsbGVyCisgKiBvciBlcXVhbCB0byB2YWwuCisgKiBFbnN1cmUgdGhhdCB0
aGUgcmVzdWx0IGlzIGEgbXVsdGlwbGUgb2YgNC4KKyAqLwordWludDMyX3QKK3NjdHBfZ2V0X25l
eHRfbXR1KHVpbnQzMl90IHZhbCkKK3sKKwkvKiBzZWxlY3QgYW5vdGhlciBNVFUgdGhhdCBpcyBq
dXN0IGJpZ2dlciB0aGFuIHRoaXMgb25lICovCisJdWludDMyX3QgaTsKKworCXZhbCAmPSAweGZm
ZmZmZmZjOworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHNjdHBfbXR1X3NpemVzKSAvIHNpemVv
Zih1aW50MzJfdCkpOyBpKyspIHsKKwkJaWYgKHZhbCA8IHNjdHBfbXR1X3NpemVzW2ldKSB7CisJ
CQlLQVNTRVJUKChzY3RwX210dV9zaXplc1tpXSAmIDB4MDAwMDAwMDMpID09IDAsCisJCQkJKCJz
Y3RwX210dV9zaXplc1sldV0gbm90IGEgbXVsdGlwbGUgb2YgNCIsIGkpKTsKKwkJCXJldHVybiAo
c2N0cF9tdHVfc2l6ZXNbaV0pOworCQl9CisJfQorCXJldHVybiAodmFsKTsKK30KKwordm9pZAor
c2N0cF9maWxsX3JhbmRvbV9zdG9yZShzdHJ1Y3Qgc2N0cF9wY2IgKm0pCit7CisJLyoKKwkgKiBI
ZXJlIHdlIHVzZSB0aGUgTUQ1L1NIQS0xIHRvIGhhc2ggd2l0aCBvdXIgZ29vZCByYW5kb21OdW1i
ZXJzIGFuZAorCSAqIG91ciBjb3VudGVyLiBUaGUgcmVzdWx0IGJlY29tZXMgb3VyIGdvb2QgcmFu
ZG9tIG51bWJlcnMgYW5kIHdlCisJICogdGhlbiBzZXR1cCB0byBnaXZlIHRoZXNlIG91dC4gTm90
ZSB0aGF0IHdlIGRvIG5vIGxvY2tpbmcgdG8KKwkgKiBwcm90ZWN0IHRoaXMuIFRoaXMgaXMgb2ss
IHNpbmNlIGlmIGNvbXBldGluZyBmb2xrcyBjYWxsIHRoaXMgd2UKKwkgKiB3aWxsIGdldCBtb3Jl
IGdvYmJsZWQgZ29vayBpbiB0aGUgcmFuZG9tIHN0b3JlIHdoaWNoIGlzIHdoYXQgd2UKKwkgKiB3
YW50LiBUaGVyZSBpcyBhIGRhbmdlciB0aGF0IHR3byBndXlzIHdpbGwgdXNlIHRoZSBzYW1lIHJh
bmRvbQorCSAqIG51bWJlcnMsIGJ1dCB0aGF0cyBvayB0b28gc2luY2UgdGhhdCBpcyByYW5kb20g
YXMgd2VsbCA6LT4KKwkgKi8KKwltLT5zdG9yZV9hdCA9IDA7CisJKHZvaWQpc2N0cF9obWFjKFND
VFBfSE1BQywgKHVpbnQ4X3QgKiltLT5yYW5kb21fbnVtYmVycywKKwkgICAgc2l6ZW9mKG0tPnJh
bmRvbV9udW1iZXJzKSwgKHVpbnQ4X3QgKikmbS0+cmFuZG9tX2NvdW50ZXIsCisJICAgIHNpemVv
ZihtLT5yYW5kb21fY291bnRlciksICh1aW50OF90ICopbS0+cmFuZG9tX3N0b3JlKTsKKwltLT5y
YW5kb21fY291bnRlcisrOworfQorCit1aW50MzJfdAorc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04o
c3RydWN0IHNjdHBfcGNiICppbnApCit7CisJLyoKKwkgKiBBIHRydWUgaW1wbGVtZW50YXRpb24g
c2hvdWxkIHVzZSByYW5kb20gc2VsZWN0aW9uIHByb2Nlc3MgdG8gZ2V0CisJICogdGhlIGluaXRp
YWwgc3RyZWFtIHNlcXVlbmNlIG51bWJlciwgdXNpbmcgUkZDMTc1MCBhcyBhIGdvb2QKKwkgKiBn
dWlkZWxpbmUKKwkgKi8KKwl1aW50MzJfdCB4LCAqeHA7CisJdWludDhfdCAqcDsKKwlpbnQgc3Rv
cmVfYXQsIG5ld19zdG9yZTsKKworCWlmIChpbnAtPmluaXRpYWxfc2VxdWVuY2VfZGVidWcgIT0g
MCkgeworCQl1aW50MzJfdCByZXQ7CisKKwkJcmV0ID0gaW5wLT5pbml0aWFsX3NlcXVlbmNlX2Rl
YnVnOworCQlpbnAtPmluaXRpYWxfc2VxdWVuY2VfZGVidWcrKzsKKwkJcmV0dXJuIChyZXQpOwor
CX0KKyByZXRyeToKKwlzdG9yZV9hdCA9IGlucC0+c3RvcmVfYXQ7CisJbmV3X3N0b3JlID0gc3Rv
cmVfYXQgKyBzaXplb2YodWludDMyX3QpOworCWlmIChuZXdfc3RvcmUgPj0gKFNDVFBfU0lHTkFU
VVJFX1NJWkUtMykpIHsKKwkJbmV3X3N0b3JlID0gMDsKKwl9CisJaWYgKCFhdG9taWNfY21wc2V0
X2ludCgmaW5wLT5zdG9yZV9hdCwgc3RvcmVfYXQsIG5ld19zdG9yZSkpIHsKKwkJZ290byByZXRy
eTsKKwl9CisJaWYgKG5ld19zdG9yZSA9PSAwKSB7CisJCS8qIFJlZmlsbCB0aGUgcmFuZG9tIHN0
b3JlICovCisJCXNjdHBfZmlsbF9yYW5kb21fc3RvcmUoaW5wKTsKKwl9CisJcCA9ICZpbnAtPnJh
bmRvbV9zdG9yZVtzdG9yZV9hdF07CisJeHAgPSAodWludDMyX3QgKilwOworCXggPSAqeHA7CisJ
cmV0dXJuICh4KTsKK30KKwordWludDMyX3QKK3NjdHBfc2VsZWN0X2FfdGFnKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgaW50IGNoZWNrKQor
eworCXVpbnQzMl90IHg7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJaWYgKGNoZWNrKSB7CisJ
CSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCX0KKwlmb3IgKDs7KSB7CisJCXgg
PSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKKwkJaWYgKHggPT0gMCkg
eworCQkJLyogd2UgbmV2ZXIgdXNlIDAgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghY2hl
Y2sgfHwgc2N0cF9pc192dGFnX2dvb2QoeCwgbHBvcnQsIHJwb3J0LCAmbm93KSkgeworCQkJYnJl
YWs7CisJCX0KKwl9CisJcmV0dXJuICh4KTsKK30KKworaW50MzJfdAorc2N0cF9tYXBfYXNzb2Nf
c3RhdGUoaW50IGtlcm5lbF9zdGF0ZSkKK3sKKwlpbnQzMl90IHVzZXJfc3RhdGU7CisKKwlpZiAo
a2VybmVsX3N0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgeworCQl1c2VyX3N0YXRlID0g
U0NUUF9DTE9TRUQ7CisJfSBlbHNlIGlmIChrZXJuZWxfc3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1BFTkRJTkcpIHsKKwkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fUEVORElORzsKKwl9
IGVsc2UgeworCQlzd2l0Y2ggKGtlcm5lbF9zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgeworCQlj
YXNlIFNDVFBfU1RBVEVfRU1QVFk6CisJCQl1c2VyX3N0YXRlID0gU0NUUF9DTE9TRUQ7CisJCQli
cmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xP
U0VEOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKKwkJCXVzZXJf
c3RhdGUgPSBTQ1RQX0NPT0tJRV9XQUlUOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9D
T09LSUVfRUNIT0VEOgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ09PS0lFX0VDSE9FRDsKKwkJCWJy
ZWFrOworCQljYXNlIFNDVFBfU1RBVEVfT1BFTjoKKwkJCXVzZXJfc3RhdGUgPSBTQ1RQX0VTVEFC
TElTSEVEOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UOgorCQkJ
dXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fU0VOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBf
U1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6CisJCQl1c2VyX3N0YXRlID0gU0NUUF9TSFVURE9XTl9S
RUNFSVZFRDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQ6
CisJCQl1c2VyX3N0YXRlID0gU0NUUF9TSFVURE9XTl9BQ0tfU0VOVDsKKwkJCWJyZWFrOworCQlk
ZWZhdWx0OgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOworCQkJYnJlYWs7CisJCX0KKwl9
CisJcmV0dXJuICh1c2VyX3N0YXRlKTsKK30KKworaW50CitzY3RwX2luaXRfYXNvYyhzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICB1
aW50MzJfdCBvdmVycmlkZV90YWcsIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3Qgb19zdHJtcykK
K3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwkvKgorCSAqIEFueXRoaW5nIHNl
dCB0byB6ZXJvIGlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGFsbG9jYXRpb24gcm91dGluZSdzCisJ
ICogYnplcm8KKwkgKi8KKworCS8qCisJICogVXAgZnJvbnQgc2VsZWN0IHdoYXQgc2NvcGluZyB0
byBhcHBseSBvbiBhZGRyZXNzZXMgSSB0ZWxsIG15IHBlZXIKKwkgKiBOb3Qgc3VyZSB3aGF0IHRv
IGRvIHdpdGggdGhlc2UgcmlnaHQgbm93LCB3ZSB3aWxsIG5lZWQgdG8gY29tZSB1cAorCSAqIHdp
dGggYSB3YXkgdG8gc2V0IHRoZW0uIFdlIG1heSBuZWVkIHRvIHBhc3MgdGhlbSB0aHJvdWdoIGZy
b20gdGhlCisJICogY2FsbGVyIGluIHRoZSBzY3RwX2Fsb2NfYXNzb2MoKSBmdW5jdGlvbi4KKwkg
Ki8KKwlpbnQgaTsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCWludCBq
OworI2VuZGlmCisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJLyogaW5pdCBhbGwgdmFyaWFibGVz
IHRvIGEga25vd24gdmFsdWUuICovCisJU0NUUF9TRVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBf
U1RBVEVfSU5VU0UpOworCWFzb2MtPm1heF9idXJzdCA9IGlucC0+c2N0cF9lcC5tYXhfYnVyc3Q7
CisJYXNvYy0+ZnJfbWF4X2J1cnN0ID0gaW5wLT5zY3RwX2VwLmZyX21heF9idXJzdDsKKwlhc29j
LT5oZWFydF9iZWF0X2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1l
b3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdKTsKKwlhc29jLT5jb29raWVfbGlmZSA9IGlu
cC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmU7CisJYXNvYy0+c2N0cF9jbXRfb25fb2ZmID0gaW5w
LT5zY3RwX2NtdF9vbl9vZmY7CisJYXNvYy0+ZWNuX3N1cHBvcnRlZCA9IGlucC0+ZWNuX3N1cHBv
cnRlZDsKKwlhc29jLT5wcnNjdHBfc3VwcG9ydGVkID0gaW5wLT5wcnNjdHBfc3VwcG9ydGVkOwor
CWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9ydGVkOworCWFzb2MtPmF1
dGhfc3VwcG9ydGVkID0gaW5wLT5hdXRoX3N1cHBvcnRlZDsKKwlhc29jLT5hc2NvbmZfc3VwcG9y
dGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOworCWFzb2MtPnJlY29uZmlnX3N1cHBvcnRlZCA9
IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOworCWFzb2MtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAt
Pm5yc2Fja19zdXBwb3J0ZWQ7CisJYXNvYy0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSBpbnAtPnBrdGRy
b3Bfc3VwcG9ydGVkOworCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9y
dGVkOworCWFzb2MtPnNjdHBfY210X3BmID0gKHVpbnQ4X3QpMDsKKwlhc29jLT5zY3RwX2ZyYWdf
cG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKKwlhc29jLT5zY3RwX2ZlYXR1cmVzID0gaW5w
LT5zY3RwX2ZlYXR1cmVzOworCWFzb2MtPmRlZmF1bHRfZHNjcCA9IGlucC0+c2N0cF9lcC5kZWZh
dWx0X2RzY3A7CisJYXNvYy0+bWF4X2N3bmQgPSBpbnAtPm1heF9jd25kOworI2lmZGVmIElORVQ2
CisJaWYgKGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCkgeworCQlhc29jLT5kZWZhdWx0
X2Zsb3dsYWJlbCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbDsKKwl9IGVsc2Ugewor
CQlpZiAoaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFncyAmIElONlBfQVVUT0ZMT1dMQUJFTCkgewor
CQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5w
LT5zY3RwX2VwKTsKKwkJCWFzb2MtPmRlZmF1bHRfZmxvd2xhYmVsICY9IDB4MDAwZmZmZmY7CisJ
CQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQl9IGVsc2UgeworCQkJ
YXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSAwOworCQl9CisJfQorI2VuZGlmCisJYXNvYy0+c2Jf
c2VuZF9yZXN2ID0gMDsKKwlpZiAob3ZlcnJpZGVfdGFnKSB7CisJCWFzb2MtPm15X3Z0YWcgPSBv
dmVycmlkZV90YWc7CisJfSBlbHNlIHsKKwkJYXNvYy0+bXlfdnRhZyA9IHNjdHBfc2VsZWN0X2Ff
dGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsICAxKTsKKwl9
CisJLyogR2V0IHRoZSBub25jZSB0YWdzICovCisJYXNvYy0+bXlfdnRhZ19ub25jZSA9IHNjdHBf
c2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQs
IDApOworCWFzb2MtPnBlZXJfdnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIDApOworCWFzb2MtPnZyZl9pZCA9
IHZyZl9pZDsKKworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJYXNvYy0+dHNuX2luX2F0
ID0gMDsKKwlhc29jLT50c25fb3V0X2F0ID0gMDsKKwlhc29jLT50c25faW5fd3JhcHBlZCA9IDA7
CisJYXNvYy0+dHNuX291dF93cmFwcGVkID0gMDsKKwlhc29jLT5jdW1hY2tfbG9nX2F0ID0gMDsK
Kwlhc29jLT5jdW1hY2tfbG9nX2F0c250ID0gMDsKKyNlbmRpZgorI2lmZGVmIFNDVFBfRlNfU1BF
Q19MT0cKKwlhc29jLT5mc19pbmRleCA9IDA7CisjZW5kaWYKKwlhc29jLT5yZWZjbnQgPSAwOwor
CWFzb2MtPmFzc29jX3VwX3NlbnQgPSAwOworCWFzb2MtPmFzY29uZl9zZXFfb3V0ID0gYXNvYy0+
c3RyX3Jlc2V0X3NlcV9vdXQgPSBhc29jLT5pbml0X3NlcV9udW1iZXIgPSBhc29jLT5zZW5kaW5n
X3NlcSA9CisJICAgIHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOworCWFz
b2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgLSAxOworCS8q
IHdlIGFyZSBvcHRpbWlzaXRpYyBoZXJlICovCisJYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQgPSAw
OworCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7CisKKwkvKiBmb3IgQ01UICovCisg
ICAgICAgIGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQgPSBOVUxMOworCisJLyogVGhp
cyB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQgKi8KKwlhc29jLT5sYXN0X2Fja2VkX3NlcSA9IGFz
b2MtPmluaXRfc2VxX251bWJlciAtIDE7CisJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQg
PSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKKwlhc29jLT5hc2NvbmZfc2VxX2luID0gYXNvYy0+bGFz
dF9hY2tlZF9zZXE7CisKKwkvKiBoZXJlIHdlIGFyZSBkaWZmZXJlbnQsIHdlIGhvbGQgdGhlIG5l
eHQgb25lIHdlIGV4cGVjdCAqLworCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5sYXN0
X2Fja2VkX3NlcSArIDE7CisKKwlhc29jLT5pbml0aWFsX2luaXRfcnRvX21heCA9IGlucC0+c2N0
cF9lcC5pbml0aWFsX2luaXRfcnRvX21heDsKKwlhc29jLT5pbml0aWFsX3J0byA9IGlucC0+c2N0
cF9lcC5pbml0aWFsX3J0bzsKKworCWFzb2MtPmRlZmF1bHRfbXR1ID0gaW5wLT5zY3RwX2VwLmRl
ZmF1bHRfbXR1OworCWFzb2MtPm1heF9pbml0X3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9pbml0
X3RpbWVzOworCWFzb2MtPm1heF9zZW5kX3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9zZW5kX3Rp
bWVzOworCWFzb2MtPmRlZl9uZXRfZmFpbHVyZSA9IGlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1
cmU7CisJYXNvYy0+ZGVmX25ldF9wZl90aHJlc2hvbGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9w
Zl90aHJlc2hvbGQ7CisJYXNvYy0+ZnJlZV9jaHVua19jbnQgPSAwOworCisJYXNvYy0+aWFtX2Js
b2NraW5nID0gMDsKKwlhc29jLT5jb250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7CisJYXNvYy0+
bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9IGlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwlh
c29jLT5kZWZfc2VuZCA9IGlucC0+ZGVmX3NlbmQ7CisJYXNvYy0+ZGVsYXllZF9hY2sgPSBUSUNL
U19UT19NU0VDKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1Zd
KTsKKwlhc29jLT5zYWNrX2ZyZXEgPSBpbnAtPnNjdHBfZXAuc2N0cF9zYWNrX2ZyZXE7CisJYXNv
Yy0+cHJfc2N0cF9jbnQgPSAwOworCWFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsK
KworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworCQlh
c29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwgPSAxOworCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShp
bnApID09IDApIHsKKwkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDE7CisJCX0gZWxz
ZSB7CisJCQlhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwgPSAwOworCQl9CisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCQkJYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMDsKKyNl
bmRpZgorCX0gZWxzZSB7CisJCWFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCA9IDA7CisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRfQ09OTikgeworCQkJYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMTsK
KwkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCX0gZWxzZSB7CisJCQlhc29j
LT5zY29wZS5jb25uX2FkZHJfbGVnYWwgPSAwOworCQkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xl
Z2FsID0gMTsKKwkJfQorI2Vsc2UKKwkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsK
KyNlbmRpZgorCX0KKworCWFzb2MtPm15X3J3bmQgPSBtYXgoU0NUUF9TQl9MSU1JVF9SQ1YoaW5w
LT5zY3RwX3NvY2tldCksIFNDVFBfTUlOSU1BTF9SV05EKTsKKwlhc29jLT5wZWVyc19yd25kID0g
U0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCk7CisKKwlhc29jLT5zbWFsbGVzdF9t
dHUgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKKwlhc29jLT5taW5ydG8gPSBpbnAtPnNjdHBfZXAu
c2N0cF9taW5ydG87CisJYXNvYy0+bWF4cnRvID0gaW5wLT5zY3RwX2VwLnNjdHBfbWF4cnRvOwor
CisJYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiA9IDA7CisJYXNvYy0+ZWNuX2VjaG9fY250X29ucSA9
IDA7CisJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7CisKKwlhc29jLT5zZW5kX3NhY2sgPSAxOwor
CisJTElTVF9JTklUKCZhc29jLT5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnMpOworCisJVEFJTFFfSU5J
VCgmYXNvYy0+bmV0cyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSk7
CisJVEFJTFFfSU5JVCgmYXNvYy0+YXNjb25mX2Fja19zZW50KTsKKwkvKiBTZXR1cCB0byBmaWxs
IHRoZSBoYiByYW5kb20gY2FjaGUgYXQgZmlyc3QgSEIgKi8KKwlhc29jLT5oYl9yYW5kb21faWR4
ID0gNDsKKworCWFzb2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tzID0gaW5wLT5zY3RwX2VwLmF1dG9f
Y2xvc2VfdGltZTsKKworCXN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZSA9IGlu
cC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCXN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zID0gc2N0cF9jY19mdW5jdGlvbnNbaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1
bGVdOworCisJc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBpbnAtPnNjdHBf
ZXAuc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucyA9IHNj
dHBfc3NfZnVuY3Rpb25zW2lucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlXTsKKwor
CS8qCisJICogTm93IHRoZSBzdHJlYW0gcGFyYW1ldGVycywgaGVyZSB3ZSBhbGxvY2F0ZSBzcGFj
ZSBmb3IgYWxsIHN0cmVhbXMKKwkgKiB0aGF0IHdlIHJlcXVlc3QgYnkgZGVmYXVsdC4KKwkgKi8K
Kwlhc29jLT5zdHJtX3JlYWxvdXRzaXplID0gYXNvYy0+c3RyZWFtb3V0Y250ID0gYXNvYy0+cHJl
X29wZW5fc3RyZWFtcyA9CisJICAgIG9fc3RybXM7CisJU0NUUF9NQUxMT0MoYXNvYy0+c3RybW91
dCwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAorCQkgICAgYXNvYy0+c3RyZWFtb3V0Y250ICog
c2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQpLAorCQkgICAgU0NUUF9NX1NUUk1PKTsKKwlp
ZiAoYXNvYy0+c3RybW91dCA9PSBOVUxMKSB7CisJCS8qIGJpZyB0cm91YmxlIG5vIG1lbW9yeSAq
LworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlmb3IgKGkgPSAwOyBpIDwg
YXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKKwkJLyoKKwkJICogaW5ib3VuZCBzaWRlIG11c3Qg
YmUgc2V0IHRvIDB4ZmZmZiwgYWxzbyBOT1RFIHdoZW4gd2UgZ2V0CisJCSAqIHRoZSBJTklULUFD
SyBiYWNrIChmb3IgSU5JVCBzZW5kZXIpIHdlIE1VU1QgcmVkdWNlIHRoZQorCQkgKiBjb3VudCAo
c3RyZWFtb3V0Y250KSBidXQgZmlyc3QgY2hlY2sgaWYgd2Ugc2VudCB0byBhbnkgb2YKKwkJICog
dGhlIHVwcGVyIHN0cmVhbXMgdGhhdCB3ZXJlIGRyb3BwZWQgKGlmIHNvbWUgd2VyZSkuIFRob3Nl
CisJCSAqIHRoYXQgd2VyZSBkcm9wcGVkIG11c3QgYmUgbm90aWZpZWQgdG8gdGhlIHVwcGVyIGxh
eWVyIGFzCisJCSAqIGZhaWxlZCB0byBzZW5kLgorCQkgKi8KKwkJYXNvYy0+c3RybW91dFtpXS5u
ZXh0X21pZF9vcmRlcmVkID0gMDsKKwkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVy
ZWQgPSAwOworCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKKwkJYXNv
Yy0+c3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVU
QUlMRURfU1RSX1NUQVRTKQorCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7
IGorKykgeworCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7CisJCQlh
c29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbal0gPSAwOworCQl9CisjZWxzZQorCQlh
c29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0gMDsKKwkJYXNvYy0+c3RybW91dFtp
XS5hYmFuZG9uZWRfdW5zZW50WzBdID0gMDsKKyNlbmRpZgorCQlhc29jLT5zdHJtb3V0W2ldLnNp
ZCA9IGk7CisJCWFzb2MtPnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7CisJCWFz
b2MtPnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOSU5HOworCQlhc29jLT5zc19m
dW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybW91dFtpXSwgTlVM
TCk7CisJfQorCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgYXNvYywgMCk7
CisKKwkvKiBOb3cgdGhlIG1hcHBpbmcgYXJyYXkgKi8KKwlhc29jLT5tYXBwaW5nX2FycmF5X3Np
emUgPSBTQ1RQX0lOSVRJQUxfTUFQUElOR19BUlJBWTsKKwlTQ1RQX01BTExPQyhhc29jLT5tYXBw
aW5nX2FycmF5LCB1aW50OF90ICosIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSwKKwkJICAgIFND
VFBfTV9NQVApOworCWlmIChhc29jLT5tYXBwaW5nX2FycmF5ID09IE5VTEwpIHsKKwkJU0NUUF9G
UkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJNTyk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOworCQlyZXR1cm4g
KEVOT01FTSk7CisJfQorCW1lbXNldChhc29jLT5tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBw
aW5nX2FycmF5X3NpemUpOworCVNDVFBfTUFMTE9DKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIHVp
bnQ4X3QgKiwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAorCSAgICBTQ1RQX01fTUFQKTsKKwlp
ZiAoYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9PSBOVUxMKSB7CisJCVNDVFBfRlJFRShhc29jLT5z
dHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwg
U0NUUF9NX01BUCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNl
dChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwor
CisJLyogTm93IHRoZSBpbml0IG9mIHRoZSBvdGhlciBvdXRxdWV1ZXMgKi8KKwlUQUlMUV9JTklU
KCZhc29jLT5mcmVlX2NodW5rcyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1
ZXVlKTsKKwlUQUlMUV9JTklUKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSk7CisJVEFJTFFfSU5J
VCgmYXNvYy0+c2VuZF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+c2VudF9xdWV1ZSk7CisJ
VEFJTFFfSU5JVCgmYXNvYy0+cmVzZXRIZWFkKTsKKwlhc29jLT5tYXhfaW5ib3VuZF9zdHJlYW1z
ID0gaW5wLT5zY3RwX2VwLm1heF9vcGVuX3N0cmVhbXNfaW50b21lOworCVRBSUxRX0lOSVQoJmFz
b2MtPmFzY29uZl9xdWV1ZSk7CisJLyogYXV0aGVudGljYXRpb24gZmllbGRzICovCisJYXNvYy0+
YXV0aGluZm8ucmFuZG9tID0gTlVMTDsKKwlhc29jLT5hdXRoaW5mby5hY3RpdmVfa2V5aWQgPSAw
OworCWFzb2MtPmF1dGhpbmZvLmFzc29jX2tleSA9IE5VTEw7CisJYXNvYy0+YXV0aGluZm8uYXNz
b2Nfa2V5aWQgPSAwOworCWFzb2MtPmF1dGhpbmZvLnJlY3Zfa2V5ID0gTlVMTDsKKwlhc29jLT5h
dXRoaW5mby5yZWN2X2tleWlkID0gMDsKKwlMSVNUX0lOSVQoJmFzb2MtPnNoYXJlZF9rZXlzKTsK
Kwlhc29jLT5tYXJrZWRfcmV0cmFucyA9IDA7CisJYXNvYy0+cG9ydCA9IGlucC0+c2N0cF9lcC5w
b3J0OworCWFzb2MtPnRpbW9pbml0ID0gMDsKKwlhc29jLT50aW1vZGF0YSA9IDA7CisJYXNvYy0+
dGltb3NhY2sgPSAwOworCWFzb2MtPnRpbW9zaHV0ZG93biA9IDA7CisJYXNvYy0+dGltb2hlYXJ0
YmVhdCA9IDA7CisJYXNvYy0+dGltb2Nvb2tpZSA9IDA7CisJYXNvYy0+dGltb3NodXRkb3duYWNr
ID0gMDsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+c3RhcnRfdGltZSk7CisJ
YXNvYy0+ZGlzY29udGludWl0eV90aW1lID0gYXNvYy0+c3RhcnRfdGltZTsKKwlmb3IgKGkgPSAw
OyBpIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGkrKykgeworCQlhc29jLT5hYmFuZG9uZWRfdW5z
ZW50W2ldID0gMDsKKwkJYXNvYy0+YWJhbmRvbmVkX3NlbnRbaV0gPSAwOworCX0KKwkvKiBzYV9p
Z25vcmUgTUVNTEVBSyB7bWVtb3J5IGlzIHB1dCBpbiB0aGUgYXNzb2MgbWFwcGluZyBhcnJheSBh
bmQgZnJlZWQgbGF0ZXIgd2hlbgorCSAqIHRoZSBhc3NvY2lhdGlvbiBpcyBmcmVlZC4KKwkgKi8K
KwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJdW5zaWduZWQgaW50IGksIGxpbWl0OworCisJ
U0NUUF9QUklOVEYoIk1hcHBpbmcgYXJyYXkgc2l6ZTogJWQsIGJhc2VUU046ICU4Ljh4LCBjdW1B
Y2s6ICU4Ljh4LCBoaWdoZXN0VFNOOiAoJTguOHgsICU4Ljh4KS5cbiIsCisJICAgICAgICAgICAg
YXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAorCSAgICAgICAgICAgIGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24sCisJICAgICAgICAgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sCisJICAgICAg
ICAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwKKwkgICAgICAgICAgICBhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKTsKKwlmb3IgKGxpbWl0ID0gYXNvYy0+bWFwcGluZ19h
cnJheV9zaXplOyBsaW1pdCA+IDE7IGxpbWl0LS0pIHsKKwkJaWYgKGFzb2MtPm1hcHBpbmdfYXJy
YXlbbGltaXQgLSAxXSAhPSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlTQ1RQX1BSSU5URigi
UmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBh
c29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0
OyBpKyspIHsKKwkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5tYXBwaW5nX2FycmF5W2ld
LCAoKGkgKyAxKSAlIDE2KSA/ICcgJyA6ICdcbicpOworCX0KKwlpZiAobGltaXQgJSAxNikKKwkJ
U0NUUF9QUklOVEYoIlxuIik7CisJZm9yIChsaW1pdCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6
ZTsgbGltaXQgPiAxOyBsaW1pdC0tKSB7CisJCWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5W2xp
bWl0IC0gMV0pIHsKKwkJCWJyZWFrOworCQl9CisJfQorCVNDVFBfUFJJTlRGKCJOb24gcmVuZWdh
YmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5t
YXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7CisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKysp
IHsKKwkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5ucl9tYXBwaW5nX2FycmF5W2ldLCAo
KGkgKyAxKSAlIDE2KSA/ICcgJzogJ1xuJyk7CisJfQorCWlmIChsaW1pdCAlIDE2KQorCQlTQ1RQ
X1BSSU5URigiXG4iKTsKK30KKworaW50CitzY3RwX2V4cGFuZF9tYXBwaW5nX2FycmF5KHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1aW50MzJfdCBuZWVkZWQpCit7CisJLyogbWFwcGlu
ZyBhcnJheSBuZWVkcyB0byBncm93ICovCisJdWludDhfdCAqbmV3X2FycmF5MSwgKm5ld19hcnJh
eTI7CisJdWludDMyX3QgbmV3X3NpemU7CisKKwluZXdfc2l6ZSA9IGFzb2MtPm1hcHBpbmdfYXJy
YXlfc2l6ZSArICgobmVlZGVkKzcpLzggKyBTQ1RQX01BUFBJTkdfQVJSQVlfSU5DUik7CisJU0NU
UF9NQUxMT0MobmV3X2FycmF5MSwgdWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7CisJ
U0NUUF9NQUxMT0MobmV3X2FycmF5MiwgdWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7
CisJaWYgKChuZXdfYXJyYXkxID09IE5VTEwpIHx8IChuZXdfYXJyYXkyID09IE5VTEwpKSB7CisJ
CS8qIGNhbid0IGdldCBtb3JlLCBmb3JnZXQgaXQgKi8KKwkJU0NUUF9QUklOVEYoIk5vIG1lbW9y
eSBmb3IgZXhwYW5zaW9uIG9mIFNDVFAgbWFwcGluZyBhcnJheSAlZFxuIiwgbmV3X3NpemUpOwor
CQlpZiAobmV3X2FycmF5MSkgeworCQkJU0NUUF9GUkVFKG5ld19hcnJheTEsIFNDVFBfTV9NQVAp
OworCQl9CisJCWlmIChuZXdfYXJyYXkyKSB7CisJCQlTQ1RQX0ZSRUUobmV3X2FycmF5MiwgU0NU
UF9NX01BUCk7CisJCX0KKwkJcmV0dXJuICgtMSk7CisJfQorCW1lbXNldChuZXdfYXJyYXkxLCAw
LCBuZXdfc2l6ZSk7CisJbWVtc2V0KG5ld19hcnJheTIsIDAsIG5ld19zaXplKTsKKwltZW1jcHko
bmV3X2FycmF5MSwgYXNvYy0+bWFwcGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXpl
KTsKKwltZW1jcHkobmV3X2FycmF5MiwgYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgYXNvYy0+bWFw
cGluZ19hcnJheV9zaXplKTsKKwlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9N
X01BUCk7CisJU0NUUF9GUkVFKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwor
CWFzb2MtPm1hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkxOworCWFzb2MtPm5yX21hcHBpbmdfYXJy
YXkgPSBuZXdfYXJyYXkyOworCWFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSA9IG5ld19zaXplOwor
CXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfaXRlcmF0b3Jfd29yayhzdHJ1
Y3Qgc2N0cF9pdGVyYXRvciAqaXQpCit7CisJaW50IGl0ZXJhdGlvbl9jb3VudCA9IDA7CisJaW50
IGlucF9za2lwID0gMDsKKwlpbnQgZmlyc3RfaW4gPSAxOworCXN0cnVjdCBzY3RwX2lucGNiICp0
aW5wOworCisJU0NUUF9JTlBfSU5GT19STE9DSygpOworCVNDVFBfSVRFUkFUT1JfTE9DSygpOwor
CXNjdHBfaXRfY3RsLmN1cl9pdCA9IGl0OworCWlmIChpdC0+aW5wKSB7CisJCVNDVFBfSU5QX1JM
T0NLKGl0LT5pbnApOworCQlTQ1RQX0lOUF9ERUNSX1JFRihpdC0+aW5wKTsKKwl9CisJaWYgKGl0
LT5pbnAgPT0gTlVMTCkgeworCQkvKiBpdGVyYXRvciBpcyBjb21wbGV0ZSAqLworZG9uZV93aXRo
X2l0ZXJhdG9yOgorCQlzY3RwX2l0X2N0bC5jdXJfaXQgPSBOVUxMOworCQlTQ1RQX0lURVJBVE9S
X1VOTE9DSygpOworCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJaWYgKGl0LT5mdW5jdGlv
bl9hdGVuZCAhPSBOVUxMKSB7CisJCQkoKml0LT5mdW5jdGlvbl9hdGVuZCkgKGl0LT5wb2ludGVy
LCBpdC0+dmFsKTsKKwkJfQorCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKKwkJcmV0dXJu
OworCX0KK3NlbGVjdF9hX25ld19lcDoKKwlpZiAoZmlyc3RfaW4pIHsKKwkJZmlyc3RfaW4gPSAw
OworCX0gZWxzZSB7CisJCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOworCX0KKwl3aGlsZSAoKChp
dC0+cGNiX2ZsYWdzKSAmJgorCSAgICAgICAgKChpdC0+aW5wLT5zY3RwX2ZsYWdzICYgaXQtPnBj
Yl9mbGFncykgIT0gaXQtPnBjYl9mbGFncykpIHx8CisJICAgICAgICgoaXQtPnBjYl9mZWF0dXJl
cykgJiYKKwkJKChpdC0+aW5wLT5zY3RwX2ZlYXR1cmVzICYgaXQtPnBjYl9mZWF0dXJlcykgIT0g
aXQtPnBjYl9mZWF0dXJlcykpKSB7CisJCS8qIGVuZHBvaW50IGZsYWdzIG9yIGZlYXR1cmVzIGRv
bid0IG1hdGNoLCBzbyBrZWVwIGxvb2tpbmcgKi8KKwkJaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAm
IFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+
aW5wKTsKKwkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOworCQl9CisJCXRpbnAgPSBpdC0+aW5w
OworCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7CisJCVNDVFBfSU5Q
X1JVTkxPQ0sodGlucCk7CisJCWlmIChpdC0+aW5wID09IE5VTEwpIHsKKwkJCWdvdG8gZG9uZV93
aXRoX2l0ZXJhdG9yOworCQl9CisJCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOworCX0KKwkvKiBu
b3cgZ28gdGhyb3VnaCBlYWNoIGFzc29jIHdoaWNoIGlzIGluIHRoZSBkZXNpcmVkIHN0YXRlICov
CisJaWYgKGl0LT5kb25lX2N1cnJlbnRfZXAgPT0gMCkgeworCQlpZiAoaXQtPmZ1bmN0aW9uX2lu
cCAhPSBOVUxMKQorCQkJaW5wX3NraXAgPSAoKml0LT5mdW5jdGlvbl9pbnApKGl0LT5pbnAsIGl0
LT5wb2ludGVyLCBpdC0+dmFsKTsKKwkJaXQtPmRvbmVfY3VycmVudF9lcCA9IDE7CisJfQorCWlm
IChpdC0+c3RjYiA9PSBOVUxMKSB7CisJCS8qIHJ1biB0aGUgcGVyIGluc3RhbmNlIGZ1bmN0aW9u
ICovCisJCWl0LT5zdGNiID0gTElTVF9GSVJTVCgmaXQtPmlucC0+c2N0cF9hc29jX2xpc3QpOwor
CX0KKwlpZiAoKGlucF9za2lwKSB8fCBpdC0+c3RjYiA9PSBOVUxMKSB7CisJCWlmIChpdC0+ZnVu
Y3Rpb25faW5wX2VuZCAhPSBOVUxMKSB7CisJCQlpbnBfc2tpcCA9ICgqaXQtPmZ1bmN0aW9uX2lu
cF9lbmQpKGl0LT5pbnAsCisJCQkJCQkJICAgaXQtPnBvaW50ZXIsCisJCQkJCQkJICAgaXQtPnZh
bCk7CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKKwkJZ290byBub19zdGNiOwor
CX0KKwl3aGlsZSAoaXQtPnN0Y2IpIHsKKwkJU0NUUF9UQ0JfTE9DSyhpdC0+c3RjYik7CisJCWlm
IChpdC0+YXNvY19zdGF0ZSAmJiAoKGl0LT5zdGNiLT5hc29jLnN0YXRlICYgaXQtPmFzb2Nfc3Rh
dGUpICE9IGl0LT5hc29jX3N0YXRlKSkgeworCQkJLyogbm90IGluIHRoZSByaWdodCBzdGF0ZS4u
LiBrZWVwIGxvb2tpbmcgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7CisJCQlnb3Rv
IG5leHRfYXNzb2M7CisJCX0KKwkJLyogc2VlIGlmIHdlIGhhdmUgbGltaXRlZCBvdXQgdGhlIGl0
ZXJhdG9yIGxvb3AgKi8KKwkJaXRlcmF0aW9uX2NvdW50Kys7CisJCWlmIChpdGVyYXRpb25fY291
bnQgPiBTQ1RQX0lURVJBVE9SX01BWF9BVF9PTkNFKSB7CisJCQkvKiBQYXVzZSB0byBsZXQgb3Ro
ZXJzIGdyYWIgdGhlIGxvY2sgKi8KKwkJCWF0b21pY19hZGRfaW50KCZpdC0+c3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKGl0LT5zdGNiKTsKKwkJCVNDVFBfSU5QX0lO
Q1JfUkVGKGl0LT5pbnApOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKKwkJCVNDVFBf
SVRFUkFUT1JfVU5MT0NLKCk7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCVNDVFBf
SU5QX0lORk9fUkxPQ0soKTsKKwkJCVNDVFBfSVRFUkFUT1JfTE9DSygpOworCQkJaWYgKHNjdHBf
aXRfY3RsLml0ZXJhdG9yX2ZsYWdzKSB7CisJCQkJLyogV2Ugd29uJ3QgYmUgc3RheWluZyBoZXJl
ICovCisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaXQtPmlucCk7CisJCQkJYXRvbWljX2FkZF9pbnQo
Jml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQor
CQkJCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAmCisJCQkJICAgU0NUUF9JVEVSQVRP
Ul9NVVNUX0VYSVQpIHsKKwkJCQkJZ290byBkb25lX3dpdGhfaXRlcmF0b3I7CisJCQkJfQorI2Vu
ZGlmCisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYKKwkJCQkgICBTQ1RQX0lU
RVJBVE9SX1NUT1BfQ1VSX0lUKSB7CisJCQkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICY9
IH5TQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUOworCQkJCQlnb3RvIGRvbmVfd2l0aF9pdGVyYXRv
cjsKKwkJCQl9CisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYKKwkJCQkgICBT
Q1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lOUCkgeworCQkJCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9m
bGFncyAmPSB+U0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JTlA7CisJCQkJCWdvdG8gbm9fc3RjYjsK
KwkJCQl9CisJCQkJLyogSWYgd2UgcmVhY2ggaGVyZSBodWg/ICovCisJCQkJU0NUUF9QUklOVEYo
IlVua25vd24gaXQgY3RsIGZsYWcgJXhcbiIsCisJCQkJCSAgICBzY3RwX2l0X2N0bC5pdGVyYXRv
cl9mbGFncyk7CisJCQkJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgPSAwOworCQkJfQorCQkJ
U0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpdC0+aW5wKTsK
KwkJCVNDVFBfVENCX0xPQ0soaXQtPnN0Y2IpOworCQkJYXRvbWljX2FkZF9pbnQoJml0LT5zdGNi
LT5hc29jLnJlZmNudCwgLTEpOworCQkJaXRlcmF0aW9uX2NvdW50ID0gMDsKKwkJfQorCisJCS8q
IHJ1biBmdW5jdGlvbiBvbiB0aGlzIG9uZSAqLworCQkoKml0LT5mdW5jdGlvbl9hc3NvYykoaXQt
PmlucCwgaXQtPnN0Y2IsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKworCQkvKgorCQkgKiB3ZSBs
aWUgaGVyZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGhhdmUgaXRzIG93biB0eXBlIGJ1dAorCQkgKiBm
aXJzdCBJIG11c3QgdmVyaWZ5IHRoYXQgdGhpcyB3b24ndCBlZmZlY3QgdGhpbmdzIDotMAorCQkg
Ki8KKwkJaWYgKGl0LT5ub19jaHVua19vdXRwdXQgPT0gMCkKKwkJCXNjdHBfY2h1bmtfb3V0cHV0
KGl0LT5pbnAsIGl0LT5zdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCisJCVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7CisJbmV4dF9hc3NvYzoKKwkJaXQt
PnN0Y2IgPSBMSVNUX05FWFQoaXQtPnN0Y2IsIHNjdHBfdGNibGlzdCk7CisJCWlmIChpdC0+c3Rj
YiA9PSBOVUxMKSB7CisJCQkvKiBSdW4gbGFzdCBmdW5jdGlvbiAqLworCQkJaWYgKGl0LT5mdW5j
dGlvbl9pbnBfZW5kICE9IE5VTEwpIHsKKwkJCQlpbnBfc2tpcCA9ICgqaXQtPmZ1bmN0aW9uX2lu
cF9lbmQpKGl0LT5pbnAsCisJCQkJCQkJCSAgIGl0LT5wb2ludGVyLAorCQkJCQkJCQkgICBpdC0+
dmFsKTsKKwkJCX0KKwkJfQorCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGl0LT5pbnApOworIG5vX3N0
Y2I6CisJLyogZG9uZSB3aXRoIGFsbCBhc3NvY3Mgb24gdGhpcyBlbmRwb2ludCwgbW92ZSBvbiB0
byBuZXh0IGVuZHBvaW50ICovCisJaXQtPmRvbmVfY3VycmVudF9lcCA9IDA7CisJaWYgKGl0LT5p
dGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQlpdC0+aW5w
ID0gTlVMTDsKKwl9IGVsc2UgeworCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBf
bGlzdCk7CisJfQorCWlmIChpdC0+aW5wID09IE5VTEwpIHsKKwkJZ290byBkb25lX3dpdGhfaXRl
cmF0b3I7CisJfQorCWdvdG8gc2VsZWN0X2FfbmV3X2VwOworfQorCit2b2lkCitzY3RwX2l0ZXJh
dG9yX3dvcmtlcih2b2lkKQoreworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwgKm5pdDsKKwor
CS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIFdRIGxvY2sgaW4gcGxhY2UgKi8K
KworCXNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcgPSAxOworCVRBSUxRX0ZPUkVBQ0hfU0FG
RShpdCwgJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgc2N0cF9ueHRfaXRyLCBuaXQpIHsKKwkJ
Lyogbm93IGxldHMgd29yayBvbiB0aGlzIG9uZSAqLworCQlUQUlMUV9SRU1PVkUoJnNjdHBfaXRf
Y3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7CisJCVNDVFBfSVBJX0lURVJBVE9S
X1dRX1VOTE9DSygpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMTAwMAorCQlDVVJWTkVUX1NFVChpdC0+dm4pOworI2VuZGlmCisJCXNjdHBfaXRl
cmF0b3Jfd29yayhpdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAxMDAwCisJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCVNDVFBfSVBJ
X0lURVJBVE9SX1dRX0xPQ0soKTsKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKHNj
dHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYgU0NUUF9JVEVSQVRPUl9NVVNUX0VYSVQpIHsKKwkJ
CWJyZWFrOworCQl9CisjZW5kaWYKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJ
c2N0cF9pdF9jdGwuaXRlcmF0b3JfcnVubmluZyA9IDA7CisJcmV0dXJuOworfQorCisKK3N0YXRp
YyB2b2lkCitzY3RwX2hhbmRsZV9hZGRyX3dxKHZvaWQpCit7CisJLyogZGVhbCB3aXRoIHRoZSBB
RERSIHdxIGZyb20gdGhlIHJ0c29jayBjYWxscyAqLworCXN0cnVjdCBzY3RwX2xhZGRyICp3aSwg
Km53aTsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsKKworCVNDVFBfTUFMTE9D
KGFzYywgc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICosCisJCSAgICBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX2l0ZXJhdG9yKSwgU0NUUF9NX0FTQ19JVCk7CisJaWYgKGFzYyA9PSBOVUxM
KSB7CisJCS8qIFRyeSBsYXRlciwgbm8gbWVtb3J5ICovCisJCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX0FERFJfV1EsCisJCQkJIChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKU5VTEwsCisJ
CQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLAorCQkJCSAoc3RydWN0IHNjdHBfbmV0cyAqKU5V
TEwpOworCQlyZXR1cm47CisJfQorCUxJU1RfSU5JVCgmYXNjLT5saXN0X29mX3dvcmspOworCWFz
Yy0+Y250ID0gMDsKKworCUxJU1RfRk9SRUFDSF9TQUZFKHdpLCAmU0NUUF9CQVNFX0lORk8oYWRk
cl93cSksIHNjdHBfbnh0X2FkZHIsIG53aSkgeworCQlMSVNUX1JFTU9WRSh3aSwgc2N0cF9ueHRf
YWRkcik7CisJCUxJU1RfSU5TRVJUX0hFQUQoJmFzYy0+bGlzdF9vZl93b3JrLCB3aSwgc2N0cF9u
eHRfYWRkcik7CisJCWFzYy0+Y250Kys7CisJfQorCisJaWYgKGFzYy0+Y250ID09IDApIHsKKwkJ
U0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJfSBlbHNlIHsKKwkJaW50IHJldDsKKwor
CQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VwLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2Is
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogTm8gZXAgZW5kIGZvciBi
b3VuZGFsbCAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUENCX0FOWV9G
RUFUVVJFUywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FTT0NfQU5ZX1NU
QVRFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYXNjLCAwLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VuZCwgTlVM
TCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCVNDVFBfUFJJTlRGKCJGYWlsZWQgdG8gaW5pdGlhdGUg
aXRlcmF0b3IgZm9yIGhhbmRsZV9hZGRyX3dxXG4iKTsKKwkJCS8qIEZyZWVpbmcgaWYgd2UgYXJl
IHN0b3BwaW5nIG9yIHB1dCBiYWNrIG9uIHRoZSBhZGRyX3dxLiAqLworCQkJaWYgKFNDVFBfQkFT
RV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKKwkJCQlzY3RwX2FzY29uZl9pdGVy
YXRvcl9lbmQoYXNjLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJTElTVF9GT1JFQUNIKHdpLCAmYXNj
LT5saXN0X29mX3dvcmssIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQkJTElTVF9JTlNFUlRfSEVBRCgm
U0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwkJCQl9CisJCQkJ
U0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJCQl9CisJCX0KKwl9Cit9CisKK3ZvaWQK
K3NjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0
cnVjdCBzY3RwX3RpbWVyICp0bXI7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29j
a2V0ICpzbzsKKyNlbmRpZgorCWludCBkaWRfb3V0cHV0OworCWludCB0eXBlOworCisJdG1yID0g
KHN0cnVjdCBzY3RwX3RpbWVyICopdDsKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKil0bXIt
PmVwOworCXN0Y2IgPSAoc3RydWN0IHNjdHBfdGNiICopdG1yLT50Y2I7CisJbmV0ID0gKHN0cnVj
dCBzY3RwX25ldHMgKil0bXItPm5ldDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlDVVJWTkVUX1NFVCgoc3RydWN0IHZuZXQgKil0bXIt
PnZuZXQpOworI2VuZGlmCisJZGlkX291dHB1dCA9IDE7CisKKyNpZmRlZiBTQ1RQX0FVRElUSU5H
X0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEYwLCAodWludDhfdCkgdG1yLT50eXBlKTsKKwlz
Y3RwX2F1ZGl0aW5nKDMsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCisJLyogc2FuaXR5IGNo
ZWNrcy4uLiAqLworCWlmICh0bXItPnNlbGYgIT0gKHZvaWQgKil0bXIpIHsKKwkJLyoKKwkJICog
U0NUUF9QUklOVEYoIlN0YWxlIFNDVFAgdGltZXIgZmlyZWQgKCVwKSwgaWdub3JpbmcuLi5cbiIs
CisJCSAqICAgICAgICAgICAgICh2b2lkICopdG1yKTsKKwkJICovCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCUNVUlZORVRfUkVTVE9S
RSgpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDE7
CisJaWYgKCFTQ1RQX0lTX1RJTUVSX1RZUEVfVkFMSUQodG1yLT50eXBlKSkgeworCQkvKgorCQkg
KiBTQ1RQX1BSSU5URigiU0NUUCB0aW1lciBmaXJlZCB3aXRoIGludmFsaWQgdHlwZTogMHgleFxu
IiwKKwkJICogdG1yLT50eXBlKTsKKwkJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlm
CisJCXJldHVybjsKKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDI7CisJaWYgKCh0bXIt
PnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FERFJfV1EpICYmIChpbnAgPT0gTlVMTCkpIHsKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJ
Q1VSVk5FVF9SRVNUT1JFKCk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwkvKiBpZiB0aGlzIGlz
IGFuIGl0ZXJhdG9yIHRpbWVvdXQsIGdldCB0aGUgc3RydWN0IGFuZCBjbGVhciBpbnAgKi8KKwl0
bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwMzsKKwlpZiAoaW5wKSB7CisJCVNDVFBfSU5QX0lOQ1Jf
UkVGKGlucCk7CisJCWlmICgoaW5wLT5zY3RwX3NvY2tldCA9PSBOVUxMKSAmJgorCQkgICAgKCh0
bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0lOUEtJTEwpICYmCisJCSAgICAgKHRtci0+dHlw
ZSAhPSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgJiYKKwkJICAgICAodG1yLT50eXBlICE9IFNDVFBf
VElNRVJfVFlQRV9TRU5EKSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBF
X1JFQ1YpICYmCisJCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
KSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOKSAmJgor
CQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLKSAmJgorCQkg
ICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQpICYmCisJCSAg
ICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwpKSkgeworCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA4MDEwMDAKKwkJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCQlyZXR1
cm47CisJCX0KKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDQ7CisJaWYgKHN0Y2IpIHsK
KwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJaWYgKHN0Y2ItPmFz
b2Muc3RhdGUgPT0gMCkgeworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAt
MSk7CisJCQlpZiAoaW5wKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJ
CUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCQlyZXR1cm47CisJCX0KKwl9CisJdHlwZSA9
IHRtci0+dHlwZTsKKwl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwNTsKKwlTQ1RQREJHKFNDVFBf
REVCVUdfVElNRVIxLCAiVGltZXIgdHlwZSAlZCBnb2VzIG9mZlxuIiwgdHlwZSk7CisJaWYgKCFT
Q1RQX09TX1RJTUVSX0FDVElWRSgmdG1yLT50aW1lcikpIHsKKwkJaWYgKGlucCkgeworCQkJU0NU
UF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCQlpZiAoc3RjYikgeworCQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJQ1VSVk5FVF9SRVNUT1JFKCk7Cisj
ZW5kaWYKKwkJcmV0dXJuOworCX0KKwl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwNjsKKworCWlm
IChzdGNiKSB7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19hZGRfaW50KCZzdGNi
LT5hc29jLnJlZmNudCwgLTEpOworCQlpZiAoKHR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FTT0NL
SUxMKSAmJgorCQkgICAgKChzdGNiLT5hc29jLnN0YXRlID09IDApIHx8CisJCSAgICAgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSkpIHsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCWlmIChpbnApIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihp
bnApOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMTAwMAorCQkJQ1VSVk5FVF9SRVNUT1JFKCk7CisjZW5kaWYKKwkJCXJldHVybjsKKwkJ
fQorCX0gZWxzZSBpZiAoaW5wICE9IE5VTEwpIHsKKwkJaWYgKHR5cGUgIT0gU0NUUF9USU1FUl9U
WVBFX0lOUEtJTEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCX0KKwl9IGVsc2Ugewor
CQlTQ1RQX1dRX0FERFJfTE9DSygpOworCX0KKwkvKiByZWNvcmQgaW4gc3RvcHBlZCB3aGF0IHQt
byBvY2N1cnJlZCAqLworCXRtci0+c3RvcHBlZF9mcm9tID0gdHlwZTsKKworCS8qIG1hcmsgYXMg
YmVpbmcgc2VydmljZWQgbm93ICovCisJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmdG1yLT50
aW1lcikpIHsKKwkJLyoKKwkJICogQ2FsbG91dCBoYXMgYmVlbiByZXNjaGVkdWxlZC4KKwkJICov
CisJCWdvdG8gZ2V0X291dDsKKwl9CisJaWYgKCFTQ1RQX09TX1RJTUVSX0FDVElWRSgmdG1yLT50
aW1lcikpIHsKKwkJLyoKKwkJICogTm90IGFjdGl2ZSwgc28gbm8gYWN0aW9uLgorCQkgKi8KKwkJ
Z290byBnZXRfb3V0OworCX0KKwlTQ1RQX09TX1RJTUVSX0RFQUNUSVZBVEUoJnRtci0+dGltZXIp
OworCisJLyogY2FsbCB0aGUgaGFuZGxlciBmb3IgdGhlIGFwcHJvcHJpYXRlIHRpbWVyIHR5cGUg
Ki8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9BRERSX1dROgorCQlz
Y3RwX2hhbmRsZV9hZGRyX3dxKCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NF
TkQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7CisJCQlicmVhazsK
KwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vZGF0YSk7CisJCXN0Y2ItPmFzb2MudGlt
b2RhdGErKzsKKwkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAtLTsKKwkJaWYgKHN0Y2It
PmFzb2MubnVtX3NlbmRfdGltZXJzX3VwIDwgMCkgeworCQkJc3RjYi0+YXNvYy5udW1fc2VuZF90
aW1lcnNfdXAgPSAwOworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCQlpZiAo
c2N0cF90M3J4dF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gdW5s
b2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCisJCQlnb3RvIG91dF9kZWNyOworCQl9CisJCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQlz
Y3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCQlzY3RwX2NodW5rX291
dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
CisJCWlmICgoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPT0gMCkgJiYKKwkJICAgIChz
dGNiLT5hc29jLnNlbnRfcXVldWVfY250ID4gMCkpIHsKKwkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoazsKKworCQkJLyoKKwkJCSAqIHNhZmVndWFyZC4gSWYgdGhlcmUgb24gc29tZSBvbiB0
aGUgc2VudCBxdWV1ZQorCQkJICogc29tZXdoZXJlIGJ1dCBubyB0aW1lcnMgcnVubmluZyBzb21l
dGhpbmcgaXMKKwkJCSAqIHdyb25nLi4uIHNvIHdlIHN0YXJ0IGEgdGltZXIgb24gdGhlIGZpcnN0
IGNodW5rCisJCQkgKiBvbiB0aGUgc2VuZCBxdWV1ZSBvbiB3aGF0ZXZlciBuZXQgaXQgaXMgc2Vu
dCB0by4KKwkJCSAqLworCQkJY2hrID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VudF9xdWV1
ZSk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2Is
CisJCQkgICAgY2hrLT53aG9Ubyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZ
UEVfSU5JVDoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJy
ZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9pbml0KTsKKwkJc3RjYi0+YXNv
Yy50aW1vaW5pdCsrOworCQlpZiAoc2N0cF90MWluaXRfdGltZXIoaW5wLCBzdGNiLCBuZXQpKSB7
CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJCWdvdG8gb3V0
X2RlY3I7CisJCX0KKwkJLyogV2UgZG8gb3V0cHV0IGJ1dCBub3QgaGVyZSAqLworCQlkaWRfb3V0
cHV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUkVDVjoKKwkJaWYgKChz
dGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3RpbW9zYWNrKTsKKwkJc3RjYi0+YXNvYy50aW1vc2FjaysrOworCQlz
Y3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworI2lmZGVmIFNDVFBfQVVE
SVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRp
ZgorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU0FDS19U
TVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkgeworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKHNjdHBfc2h1dGRvd25fdGltZXIoaW5wLCBzdGNiLCBuZXQpKSB7
CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJCWdvdG8gb3V0
X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3NodXRkb3duKTsKKwkJc3Rj
Yi0+YXNvYy50aW1vc2h1dGRvd24rKzsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJ
c2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfVE1SLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQ6CisJCWlm
ICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJ
CWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9oZWFydGJlYXQpOworCQlz
dGNiLT5hc29jLnRpbW9oZWFydGJlYXQrKzsKKwkJaWYgKHNjdHBfaGVhcnRiZWF0X3RpbWVyKGlu
cCwgc3RjYiwgbmV0KSkgeworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25l
ICovCisJCQlnb3RvIG91dF9kZWNyOworCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVE
CisJCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQpOworI2VuZGlmCisJCWlmICghKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT0hCKSkgeworCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCk7CisJCQlzY3RwX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0NPT0tJRToKKwkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisK
KwkJaWYgKHNjdHBfY29va2llX3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgeworCQkJLyogbm8gbmVl
ZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCisJCQlnb3RvIG91dF9kZWNyOworCQl9CisJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9jb29raWUpOworCQlzdGNiLT5hc29jLnRpbW9jb29r
aWUrKzsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBp
bnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwkJLyoKKwkJICogV2UgY29uc2lkZXIgVDMgYW5kIENv
b2tpZSB0aW1lciBwcmV0dHkgbXVjaCB0aGUgc2FtZSB3aXRoCisJCSAqIHJlc3BlY3QgdG8gd2hl
cmUgZnJvbSBpbiBjaHVua19vdXRwdXQuCisJCSAqLworCQlzY3RwX2NodW5rX291dHB1dChpbnAs
IHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRToKKwkJeworCQkJc3RydWN0IHRpbWV2
YWwgdHY7CisJCQlpbnQgaSwgc2VjcmV0OworCQkJaWYgKGlucCA9PSBOVUxMKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vc2VjcmV0KTsKKwkJCSh2b2lk
KVNDVFBfR0VUVElNRV9USU1FVkFMKCZ0dik7CisJCQlpbnAtPnNjdHBfZXAudGltZV9vZl9zZWNy
ZXRfY2hhbmdlID0gdHYudHZfc2VjOworCQkJaW5wLT5zY3RwX2VwLmxhc3Rfc2VjcmV0X251bWJl
ciA9CisJCQkgICAgaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcjsKKwkJCWlucC0+
c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXIrKzsKKwkJCWlmIChpbnAtPnNjdHBfZXAuY3Vy
cmVudF9zZWNyZXRfbnVtYmVyID49CisJCQkgICAgU0NUUF9IT1dfTUFOWV9TRUNSRVRTKSB7CisJ
CQkJaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlciA9IDA7CisJCQl9CisJCQlzZWNy
ZXQgPSAoaW50KWlucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXI7CisJCQlmb3IgKGkg
PSAwOyBpIDwgU0NUUF9OVU1CRVJfT0ZfU0VDUkVUUzsgaSsrKSB7CisJCQkJaW5wLT5zY3RwX2Vw
LnNlY3JldF9rZXlbc2VjcmV0XVtpXSA9CisJCQkJICAgIHNjdHBfc2VsZWN0X2luaXRpYWxfVFNO
KCZpbnAtPnNjdHBfZXApOworCQkJfQorCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfTkVXQ09PS0lFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCX0KKwkJZGlkX291dHB1dCA9IDA7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRToKKwkJaWYgKChzdGNi
ID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3RpbW9wYXRobXR1KTsKKwkJc2N0cF9wYXRobXR1X3RpbWVyKGlucCwgc3Rj
YiwgbmV0KTsKKwkJZGlkX291dHB1dCA9IDA7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOQUNLOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkg
eworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNjdHBfc2h1dGRvd25hY2tfdGltZXIoaW5wLCBzdGNi
LCBuZXQpKSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJ
CWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3NodXRkb3du
YWNrKTsKKwkJc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2srKzsKKyNpZmRlZiBTQ1RQX0FVRElU
SU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYK
KwkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfQUNL
X1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZ
UEVfU0hVVERPV05HVUFSRDoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkp
IHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zaHV0ZG93bmd1
YXJkKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZGlhZ19pbmZvX2NvZGUpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTaHV0
ZG93biBndWFyZCB0aW1lciBleHBpcmVkIik7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24o
aW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCS8qIG5vIG5lZWQgdG8g
dW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCQlnb3RvIG91dF9kZWNyOworCisJY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfU1RSUkVTRVQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5V
TEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2N0cF9zdHJyZXNldF90aW1lcihpbnAsIHN0
Y2IsIG5ldCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLwor
CQkJZ290byBvdXRfZGVjcjsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vc3RybXJz
dCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TVFJS
U1RfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJf
VFlQRV9BU0NPTkY6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7CisJ
CQlicmVhazsKKwkJfQorCQlpZiAoc2N0cF9hc2NvbmZfdGltZXIoaW5wLCBzdGNiLCBuZXQpKSB7
CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUgKi8KKwkJCWdvdG8gb3V0
X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2FzY29uZik7CisjaWZkZWYg
U0NUUF9BVURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQp
OworI2VuZGlmCisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJP
TV9BU0NPTkZfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVhazsKKwljYXNlIFNDVFBf
VElNRVJfVFlQRV9QUklNX0RFTEVURUQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09
IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlzY3RwX2RlbGV0ZV9wcmltX3RpbWVyKGlucCwg
c3RjYiwgbmV0KTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2RlbHByaW0pOworCQlicmVh
azsKKworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRToKKwkJaWYgKChzdGNiID09IE5V
TEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3RpbW9hdXRvY2xvc2UpOworCQlzY3RwX2F1dG9jbG9zZV90aW1lcihpbnAsIHN0Y2Is
IG5ldCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9B
VVRPQ0xPU0VfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlkaWRfb3V0cHV0ID0gMDsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEw6CisJCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAoaW5wID09IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc190aW1vYXNzb2NraWxsKTsKKwkJLyogQ2FuIHdlIGZyZWUgaXQgeWV0PyAqLworCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwsCisJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUFVUSUwgKyBTQ1RQX0xPQ18xKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJ
KHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzIpOworI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCS8qCisJCSAqIGZyZWUgYXNvYywg
YWx3YXlzIHVubG9ja3MgKG9yIGRlc3Ryb3kncykgc28gcHJldmVudAorCQkgKiBkdXBsaWNhdGUg
dW5sb2NrIG9yIHVubG9jayBvZiBhIGZyZWUgbXR4IDotMAorCQkgKi8KKwkJc3RjYiA9IE5VTEw7
CisJCWdvdG8gb3V0X25vX2RlY3I7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSU5QS0lMTDoKKwkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2lucGtpbGwpOworCQlpZiAoaW5wID09IE5VTEwpIHsK
KwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIHNwZWNpYWwgY2FzZSwgdGFrZSBhd2F5IG91ciBp
bmNyZW1lbnQgc2luY2UgV0UgYXJlIHRoZQorCQkgKiBraWxsZXIKKwkJICovCisJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5QS0lM
TCwgaW5wLCBOVUxMLCBOVUxMLAorCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElM
ICsgU0NUUF9MT0NfMyk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCVNDVFBfU09DS0VUX0xP
Q0soU0NUUF9JTlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJc2N0cF9pbnBjYl9mcmVlKGlucCwg
U0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCisJCQkJU0NUUF9DQUxMRURfRlJPTV9JTlBLSUxM
X1RJTUVSKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKFND
VFBfSU5QX1NPKGlucCksIDEpOworI2VuZGlmCisJCWlucCA9IE5VTEw7CisJCWdvdG8gb3V0X25v
X2RlY3I7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwgInNjdHBfdGlt
ZW91dF9oYW5kbGVyOnVua25vd24gdGltZXIgJWRcbiIsCisJCQl0eXBlKTsKKwkJYnJlYWs7CisJ
fQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4RjEsICh1
aW50OF90KSB0eXBlKTsKKwlpZiAoaW5wKQorCQlzY3RwX2F1ZGl0aW5nKDUsIGlucCwgc3RjYiwg
bmV0KTsKKyNlbmRpZgorCWlmICgoZGlkX291dHB1dCkgJiYgc3RjYikgeworCQkvKgorCQkgKiBO
b3cgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgY29udHJvbCBjaHVuayBjaGFpbiBpZiBhbgorCQkg
KiBFQ05FIGlzIG9uIGl0LiBJdCBtdXN0IGJlIG1hcmtlZCBhcyBVTlNFTlQgYWdhaW4gc28gbmV4
dAorCQkgKiBjYWxsIHdpbGwgY29udGludWUgdG8gc2VuZCBpdCB1bnRpbCBzdWNoIHRpbWUgdGhh
dCB3ZSBnZXQKKwkJICogYSBDV1IsIHRvIHJlbW92ZSBpdC4gSXQgaXMsIGhvd2V2ZXIsIGxlc3Mg
bGlrZWx5IHRoYXQgd2UKKwkJICogd2lsbCBmaW5kIGEgZWNuIGVjaG8gb24gdGhlIGNoYWluIHRo
b3VnaC4KKwkJICovCisJCXNjdHBfZml4X2Vjbl9lY2hvKCZzdGNiLT5hc29jKTsKKwl9CitnZXRf
b3V0OgorCWlmIChzdGNiKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9IGVsc2UgaWYg
KGlucCAhPSBOVUxMKSB7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwl9IGVsc2UgeworCQlT
Q1RQX1dRX0FERFJfVU5MT0NLKCk7CisJfQorCitvdXRfZGVjcjoKKwlpZiAoaW5wKSB7CisJCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJfQorCitvdXRfbm9fZGVjcjoKKwlTQ1RQREJHKFNDVFBf
REVCVUdfVElNRVIxLCAiVGltZXIgbm93IGNvbXBsZXRlICh0eXBlID0gJWQpXG4iLCB0eXBlKTsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAK
KwlDVVJWTkVUX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit2b2lkCitzY3RwX3RpbWVyX3N0YXJ0
KGludCB0X3R5cGUsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDMyX3QgdG9fdGlja3M7CisJ
c3RydWN0IHNjdHBfdGltZXIgKnRtcjsKKworCWlmICgodF90eXBlICE9IFNDVFBfVElNRVJfVFlQ
RV9BRERSX1dRKSAmJiAoaW5wID09IE5VTEwpKQorCQlyZXR1cm47CisKKwl0bXIgPSBOVUxMOwor
CWlmIChzdGNiKSB7CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCX0KKwlzd2l0Y2gg
KHRfdHlwZSkgeworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FERFJfV1E6CisJCS8qIE9ubHkgMSB0
aWNrIGF3YXkgOi0pICovCisJCXRtciA9ICZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxX3RpbWVyKTsK
KwkJdG9fdGlja3MgPSBTQ1RQX0FERFJFU1NfVElDS19ERUxBWTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1RJTUVSX1RZUEVfU0VORDoKKwkJLyogSGVyZSB3ZSB1c2UgdGhlIFJUTyB0aW1lciAqLwor
CQl7CisJCQlpbnQgcnRvX3ZhbDsKKworCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0g
TlVMTCkpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJ
CQlpZiAobmV0LT5SVE8gPT0gMCkgeworCQkJCXJ0b192YWwgPSBzdGNiLT5hc29jLmluaXRpYWxf
cnRvOworCQkJfSBlbHNlIHsKKwkJCQlydG9fdmFsID0gbmV0LT5SVE87CisJCQl9CisJCQl0b190
aWNrcyA9IE1TRUNfVE9fVElDS1MocnRvX3ZhbCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1RJTUVSX1RZUEVfSU5JVDoKKwkJLyoKKwkJICogSGVyZSB3ZSB1c2UgdGhlIElOSVQgdGltZXIg
ZGVmYXVsdCB1c3VhbGx5IGFib3V0IDEKKwkJICogbWludXRlLgorCQkgKi8KKwkJaWYgKChzdGNi
ID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAm
bmV0LT5yeHRfdGltZXI7CisJCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IE1T
RUNfVE9fVElDS1Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190
aWNrcyA9IE1TRUNfVE9fVElDS1MobmV0LT5SVE8pOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NU
UF9USU1FUl9UWVBFX1JFQ1Y6CisJCS8qCisJCSAqIEhlcmUgd2UgdXNlIHRoZSBEZWxheWVkLUFj
ayB0aW1lciB2YWx1ZSBmcm9tIHRoZSBpbnAKKwkJICogdXN1c3VhbGx5IGFib3V0IDIwMG1zLgor
CQkgKi8KKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZz
dGNiLT5hc29jLmRhY2tfdGltZXI7CisJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhzdGNiLT5h
c29jLmRlbGF5ZWRfYWNrKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERP
V046CisJCS8qIEhlcmUgd2UgdXNlIHRoZSBSVE8gb2YgdGhlIGRlc3RpbmF0aW9uLiAqLworCQlp
ZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9CisJ
CWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Moc3RjYi0+
YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNrcyA9IE1TRUNfVE9fVElD
S1MobmV0LT5SVE8pOworCQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgorCQkvKgorCQkgKiB0aGUgbmV0IGlzIHVz
ZWQgaGVyZSBzbyB0aGF0IHdlIGNhbiBhZGQgaW4gdGhlIFJUTy4gRXZlbgorCQkgKiB0aG91Z2gg
d2UgdXNlIGEgZGlmZmVyZW50IHRpbWVyLiBXZSBhbHNvIGFkZCB0aGUgSEIgdGltZXIKKwkJICog
UExVUyBhIHJhbmRvbSBqaXR0ZXIuCisJCSAqLworCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5l
dCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJdWludDMyX3Qgcm5kdmFs
OworCQkJdWludDMyX3Qgaml0dGVyOworCisJCQlpZiAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBf
QUREUl9OT0hCKSAmJgorCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09O
RklSTUVEKSkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJ
CQkJdG9fdGlja3MgPSBzdGNiLT5hc29jLmluaXRpYWxfcnRvOworCQkJfSBlbHNlIHsKKwkJCQl0
b190aWNrcyA9IG5ldC0+UlRPOworCQkJfQorCQkJcm5kdmFsID0gc2N0cF9zZWxlY3RfaW5pdGlh
bF9UU04oJmlucC0+c2N0cF9lcCk7CisJCQlqaXR0ZXIgPSBybmR2YWwgJSB0b190aWNrczsKKwkJ
CWlmIChqaXR0ZXIgPj0gKHRvX3RpY2tzID4+IDEpKSB7CisJCQkJdG9fdGlja3MgPSB0b190aWNr
cyArIChqaXR0ZXIgLSAodG9fdGlja3MgPj4gMSkpOworCQkJfSBlbHNlIHsKKwkJCQl0b190aWNr
cyA9IHRvX3RpY2tzIC0gaml0dGVyOworCQkJfQorCQkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1VOQ09ORklSTUVEKSAmJgorCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSkgeworCQkJCXRvX3RpY2tzICs9IG5ldC0+aGVhcnRfYmVhdF9kZWxheTsKKwkJ
CX0KKwkJCS8qCisJCQkgKiBOb3cgd2UgbXVzdCBjb252ZXJ0IHRoZSB0b190aWNrcyB0aGF0IGFy
ZSBub3cgaW4KKwkJCSAqIG1zIHRvIHRpY2tzLgorCQkJICovCisJCQl0b190aWNrcyA9IE1TRUNf
VE9fVElDS1ModG9fdGlja3MpOworCQkJdG1yID0gJm5ldC0+aGJfdGltZXI7CisJCX0KKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFOgorCQkvKgorCQkgKiBIZXJlIHdlIGNh
biB1c2UgdGhlIFJUTyB0aW1lciBmcm9tIHRoZSBuZXR3b3JrIHNpbmNlIG9uZQorCQkgKiBSVFQg
d2FzIGNvbXBlbGV0ZS4gSWYgYSByZXRyYW4gaGFwcGVuZWQgdGhlbiB3ZSB3aWxsIGJlCisJCSAq
IHVzaW5nIHRoZSBSVE8gaW5pdGlhbCB2YWx1ZS4KKwkJICovCisJCWlmICgoc3RjYiA9PSBOVUxM
KSB8fCAobmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKG5ldC0+UlRPID09
IDApIHsKKwkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhzdGNiLT5hc29jLmluaXRpYWxfcnRv
KTsKKwkJfSBlbHNlIHsKKwkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhuZXQtPlJUTyk7CisJ
CX0KKwkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJf
VFlQRV9ORVdDT09LSUU6CisJCS8qCisJCSAqIG5vdGhpbmcgbmVlZGVkIGJ1dCB0aGUgZW5kcG9p
bnQgaGVyZSB1c3VzdWFsbHkgYWJvdXQgNjAKKwkJICogbWludXRlcy4KKwkJICovCisJCXRtciA9
ICZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZTsKKwkJdG9fdGlja3MgPSBpbnAtPnNjdHBf
ZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9TSUdOQVRVUkVdOworCQlicmVhazsKKwlj
YXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJ
cmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyOworCQl0b190
aWNrcyA9IE1TRUNfVE9fVElDS1MoU0NUUF9BU09DX0tJTExfVElNRU9VVCk7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOUEtJTEw6CisJCS8qCisJCSAqIFRoZSBpbnAgaXMgc2V0
dXAgdG8gZGllLiBXZSByZS11c2UgdGhlIHNpZ25hdHVyZV9jaGFnZQorCQkgKiB0aW1lciBzaW5j
ZSB0aGF0IGhhcyBzdG9wcGVkIGFuZCB3ZSBhcmUgaW4gdGhlIEdPTkUKKwkJICogc3RhdGUuCisJ
CSAqLworCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7CisJCXRvX3RpY2tz
ID0gTVNFQ19UT19USUNLUyhTQ1RQX0lOUF9LSUxMX1RJTUVPVVQpOworCQlicmVhazsKKwljYXNl
IFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0U6CisJCS8qCisJCSAqIEhlcmUgd2UgdXNlIHRo
ZSB2YWx1ZSBmb3VuZCBpbiB0aGUgRVAgZm9yIFBNVFUgdXN1c3VhbGx5CisJCSAqIGFib3V0IDEw
IG1pbnV0ZXMuCisJCSAqLworCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkg
eworCQkJcmV0dXJuOworCQl9CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9f
UE1UVUQpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0b190aWNrcyA9IGlucC0+c2N0cF9lcC5zY3Rw
X3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1BNVFVdOworCQl0bXIgPSAmbmV0LT5wbXR1X3RpbWVy
OworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSzoKKwkJLyogSGVy
ZSB3ZSB1c2UgdGhlIFJUTyBvZiB0aGUgZGVzdGluYXRpb24gKi8KKwkJaWYgKChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAobmV0LT5SVE8g
PT0gMCkgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9y
dG8pOworCQl9IGVsc2UgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsK
KwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCS8qCisJCSAqIEhlcmUgd2UgdXNlIHRoZSBlbmRwb2lu
dHMgc2h1dGRvd24gZ3VhcmQgdGltZXIgdXN1YWxseQorCQkgKiBhYm91dCAzIG1pbnV0ZXMuCisJ
CSAqLworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGlucC0+
c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dOXSA9PSAwKSB7
CisJCQl0b190aWNrcyA9IDUgKiBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MubWF4cnRvKTsKKwkJ
fSBlbHNlIHsKKwkJCXRvX3RpY2tzID0gaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1ND
VFBfVElNRVJfTUFYU0hVVERPV05dOworCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLnNodXRfZ3Vh
cmRfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VUOgorCQkv
KgorCQkgKiBIZXJlIHRoZSB0aW1lciBjb21lcyBmcm9tIHRoZSBzdGNiIGJ1dCBpdHMgdmFsdWUg
aXMgZnJvbQorCQkgKiB0aGUgbmV0J3MgUlRPLgorCQkgKi8KKwkJaWYgKChzdGNiID09IE5VTEwp
IHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAobmV0LT5SVE8gPT0g
MCkgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8p
OworCQl9IGVsc2UgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKKwkJ
fQorCQl0bXIgPSAmc3RjYi0+YXNvYy5zdHJyZXNldF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1RJTUVSX1RZUEVfQVNDT05GOgorCQkvKgorCQkgKiBIZXJlIHRoZSB0aW1lciBjb21lcyBm
cm9tIHRoZSBzdGNiIGJ1dCBpdHMgdmFsdWUgaXMgZnJvbQorCQkgKiB0aGUgbmV0J3MgUlRPLgor
CQkgKi8KKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVy
bjsKKwkJfQorCQlpZiAobmV0LT5SVE8gPT0gMCkgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJ
Q0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8pOworCQl9IGVsc2UgeworCQkJdG9fdGlja3MgPSBN
U0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hc2NvbmZf
dGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRDoKKwkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQor
CQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCXRt
ciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmltX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBf
VElNRVJfVFlQRV9BVVRPQ0xPU0U6CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVybjsK
KwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyA9PSAwKSB7CisJCQkv
KgorCQkJICogUmVhbGx5IGFuIGVycm9yIHNpbmNlIHN0Y2IgaXMgTk9UIHNldCB0bworCQkJICog
YXV0b2Nsb3NlCisJCQkgKi8KKwkJCXJldHVybjsKKwkJfQorCQl0b190aWNrcyA9IHN0Y2ItPmFz
b2Muc2N0cF9hdXRvY2xvc2VfdGlja3M7CisJCXRtciA9ICZzdGNiLT5hc29jLmF1dG9jbG9zZV90
aW1lcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwg
IiVzOiBVbmtub3duIHRpbWVyIHR5cGUgJWRcbiIsCisJCQlfX2Z1bmNfXywgdF90eXBlKTsKKwkJ
cmV0dXJuOworCQlicmVhazsKKwl9CisJaWYgKCh0b190aWNrcyA8PSAwKSB8fCAodG1yID09IE5V
TEwpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIlczogJWQ6c29mdHdhcmUgZXJy
b3IgdG9fdGlja3M6JWQgdG1yOiVwIG5vdCBzZXQgPz9cbiIsCisJCQlfX2Z1bmNfXywgdF90eXBl
LCB0b190aWNrcywgKHZvaWQgKil0bXIpOworCQlyZXR1cm47CisJfQorCWlmIChTQ1RQX09TX1RJ
TUVSX1BFTkRJTkcoJnRtci0+dGltZXIpKSB7CisJCS8qCisJCSAqIHdlIGRvIE5PVCBhbGxvdyB5
b3UgdG8gaGF2ZSBpdCBhbHJlYWR5IHJ1bm5pbmcuIGlmIGl0IGlzCisJCSAqIHdlIGxlYXZlIHRo
ZSBjdXJyZW50IG9uZSB1cCB1bmNoYW5nZWQKKwkJICovCisJCXJldHVybjsKKwl9CisJLyogQXQg
dGhpcyBwb2ludCB3ZSBjYW4gcHJvY2VlZCAqLworCWlmICh0X3R5cGUgPT0gU0NUUF9USU1FUl9U
WVBFX1NFTkQpIHsKKwkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXArKzsKKwl9CisJdG1y
LT5zdG9wcGVkX2Zyb20gPSAwOworCXRtci0+dHlwZSA9IHRfdHlwZTsKKwl0bXItPmVwID0gKHZv
aWQgKilpbnA7CisJdG1yLT50Y2IgPSAodm9pZCAqKXN0Y2I7CisJdG1yLT5uZXQgPSAodm9pZCAq
KW5ldDsKKwl0bXItPnNlbGYgPSAodm9pZCAqKXRtcjsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwl0bXItPnZuZXQgPSAodm9pZCAqKWN1
cnZuZXQ7CisjZW5kaWYKKyNpZm5kZWYgX19QYW5kYV9fCisJdG1yLT50aWNrcyA9IHNjdHBfZ2V0
X3RpY2tfY291bnQoKTsKKyNlbmRpZgorCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RBUlQoJnRtci0+
dGltZXIsIHRvX3RpY2tzLCBzY3RwX3RpbWVvdXRfaGFuZGxlciwgdG1yKTsKKwlyZXR1cm47Cit9
CisKK3ZvaWQKK3NjdHBfdGltZXJfc3RvcChpbnQgdF90eXBlLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1
aW50MzJfdCBmcm9tKQoreworCXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7CisKKwlpZiAoKHRfdHlw
ZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSkgJiYKKwkgICAgKGlucCA9PSBOVUxMKSkKKwkJ
cmV0dXJuOworCisJdG1yID0gTlVMTDsKKwlpZiAoc3RjYikgeworCQlTQ1RQX1RDQl9MT0NLX0FT
U0VSVChzdGNiKTsKKwl9CisJc3dpdGNoICh0X3R5cGUpIHsKKwljYXNlIFNDVFBfVElNRVJfVFlQ
RV9BRERSX1dROgorCQl0bXIgPSAmU0NUUF9CQVNFX0lORk8oYWRkcl93cV90aW1lcik7CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAobmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdG1yID0gJm5ldC0+cnh0X3Rp
bWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9JTklUOgorCQlpZiAoKHN0Y2Ig
PT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZu
ZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUkVDVjoKKwkJ
aWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNiLT5hc29j
LmRhY2tfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgor
CQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9
CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZ
UEVfSEVBUlRCRUFUOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewor
CQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZuZXQtPmhiX3RpbWVyOworCQlicmVhazsKKwljYXNl
IFNDVFBfVElNRVJfVFlQRV9DT09LSUU6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09
IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOworCQli
cmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUU6CisJCS8qIG5vdGhpbmcgbmVl
ZGVkIGJ1dCB0aGUgZW5kcG9pbnQgaGVyZSAqLworCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25h
dHVyZV9jaGFuZ2U7CisJCS8qCisJCSAqIFdlIHJlLXVzZSB0aGUgbmV3Y29va2llIHRpbWVyIGZv
ciB0aGUgSU5QIGtpbGwgdGltZXIuIFdlCisJCSAqIG11c3QgYXNzdXJlIHRoYXQgd2UgZG8gbm90
IGtpbGwgaXQgYnkgYWNjaWRlbnQuCisJCSAqLworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJf
VFlQRV9BU09DS0lMTDoKKwkJLyoKKwkJICogU3RvcCB0aGUgYXNvYyBraWxsIHRpbWVyLgorCQkg
Ki8KKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNi
LT5hc29jLnN0cnJlc2V0X3RpbWVyOworCQlicmVhazsKKworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X0lOUEtJTEw6CisJCS8qCisJCSAqIFRoZSBpbnAgaXMgc2V0dXAgdG8gZGllLiBXZSByZS11c2Ug
dGhlIHNpZ25hdHVyZV9jaGFnZQorCQkgKiB0aW1lciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVkIGFu
ZCB3ZSBhcmUgaW4gdGhlIEdPTkUKKwkJICogc3RhdGUuCisJCSAqLworCQl0bXIgPSAmaW5wLT5z
Y3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X1BBVEhNVFVSQUlTRToKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsK
KwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmbmV0LT5wbXR1X3RpbWVyOworCQlicmVhazsKKwlj
YXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSzoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8
IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGlt
ZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5z
aHV0X2d1YXJkX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNF
VDoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNi
LT5hc29jLnN0cnJlc2V0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9B
U0NPTkY6CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAm
c3RjYi0+YXNvYy5hc2NvbmZfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X1BSSU1fREVMRVRFRDoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJ
CXRtciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmltX3RpbWVyOworCQlicmVhazsKKwljYXNlIFND
VFBfVElNRVJfVFlQRV9BVVRPQ0xPU0U6CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVy
bjsKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hdXRvY2xvc2VfdGltZXI7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIlczogVW5rbm93biB0aW1l
ciB0eXBlICVkXG4iLAorCQkJX19mdW5jX18sIHRfdHlwZSk7CisJCWJyZWFrOworCX0KKwlpZiAo
dG1yID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHRtci0+dHlwZSAhPSB0X3R5cGUp
ICYmIHRtci0+dHlwZSkgeworCQkvKgorCQkgKiBPayB3ZSBoYXZlIGEgdGltZXIgdGhhdCBpcyB1
bmRlciBqb2ludCB1c2UuIENvb2tpZSB0aW1lcgorCQkgKiBwZXIgY2hhbmNlIHdpdGggdGhlIFNF
TkQgdGltZXIuIFdlIHRoZXJlZm9yZSBhcmUgTk9UCisJCSAqIHJ1bm5pbmcgdGhlIHRpbWVyIHRo
YXQgdGhlIGNhbGxlciB3YW50cyBzdG9wcGVkLiAgU28ganVzdAorCQkgKiByZXR1cm4uCisJCSAq
LworCQlyZXR1cm47CisJfQorCWlmICgodF90eXBlID09IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAm
JiAoc3RjYiAhPSBOVUxMKSkgeworCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cC0tOwor
CQlpZiAoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPCAwKSB7CisJCQlzdGNiLT5hc29j
Lm51bV9zZW5kX3RpbWVyc191cCA9IDA7CisJCX0KKwl9CisJdG1yLT5zZWxmID0gTlVMTDsKKwl0
bXItPnN0b3BwZWRfZnJvbSA9IGZyb207CisJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZ0bXIt
PnRpbWVyKTsKKwlyZXR1cm47Cit9CisKK3VpbnQzMl90CitzY3RwX2NhbGN1bGF0ZV9sZW4oc3Ry
dWN0IG1idWYgKm0pCit7CisJdWludDMyX3QgdGxlbiA9IDA7CisJc3RydWN0IG1idWYgKmF0Owor
CisJYXQgPSBtOworCXdoaWxlIChhdCkgeworCQl0bGVuICs9IFNDVFBfQlVGX0xFTihhdCk7CisJ
CWF0ID0gU0NUUF9CVUZfTkVYVChhdCk7CisJfQorCXJldHVybiAodGxlbik7Cit9CisKK3ZvaWQK
K3NjdHBfbXR1X3NpemVfcmVzZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdWludDMyX3QgbXR1KQoreworCS8qCisJICogUmVzZXQg
dGhlIFAtTVRVIHNpemUgb24gdGhpcyBhc3NvY2lhdGlvbiwgdGhpcyBpbnZvbHZlcyBjaGFuZ2lu
ZworCSAqIHRoZSBhc29jIE1UVSwgZ29pbmcgdGhyb3VnaCBBTlkgY2h1bmsrb3ZlcmhlYWQgbGFy
Z2VyIHRoYW4gbXR1IHRvCisJICogYWxsb3cgdGhlIERGIGZsYWcgdG8gYmUgY2xlYXJlZC4KKwkg
Ki8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJdW5zaWduZWQgaW50IGVmZl9tdHUs
IG92aDsKKworCWFzb2MtPnNtYWxsZXN0X210dSA9IG10dTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJb3ZoID0gU0NUUF9NSU5fT1ZFUkhFQUQ7
CisJfSBlbHNlIHsKKwkJb3ZoID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJfQorCWVmZl9tdHUg
PSBtdHUgLSBvdmg7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3Rw
X25leHQpIHsKKwkJaWYgKGNoay0+c2VuZF9zaXplID4gZWZmX210dSkgeworCQkJY2hrLT5mbGFn
cyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJfQorCX0KKwlUQUlMUV9GT1JFQUNIKGNo
aywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5zZW5kX3NpemUg
PiBlZmZfbXR1KSB7CisJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwor
CQl9CisJfQorfQorCisKKy8qCisgKiBnaXZlbiBhbiBhc3NvY2lhdGlvbiBhbmQgc3RhcnRpbmcg
dGltZSBvZiB0aGUgY3VycmVudCBSVFQgcGVyaW9kIHJldHVybgorICogUlRPIGluIG51bWJlciBv
ZiBtc2VjcyBuZXQgc2hvdWxkIHBvaW50IHRvIHRoZSBjdXJyZW50IG5ldHdvcmsKKyAqLworCit1
aW50MzJfdAorc2N0cF9jYWxjdWxhdGVfcnRvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwKKwkJICAgc3RydWN0IHRpbWV2YWwgKm9sZCwKKwkJICAgaW50IHJ0dF9mcm9tX3NhY2spCit7
CisJLyotCisJICogZ2l2ZW4gYW4gYXNzb2NpYXRpb24gYW5kIHRoZSBzdGFydGluZyB0aW1lIG9m
IHRoZSBjdXJyZW50IFJUVAorCSAqIHBlcmlvZCAoaW4gdmFsdWUxL3ZhbHVlMikgcmV0dXJuIFJU
TyBpbiBudW1iZXIgb2YgbXNlY3MuCisJICovCisJaW50MzJfdCBydHQ7IC8qIFJUVCBpbiBtcyAq
LworCXVpbnQzMl90IG5ld19ydG87CisJaW50IGZpcnN0X21lYXN1cmUgPSAwOworCXN0cnVjdCB0
aW1ldmFsIG5vdzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogMS4gY2FsY3Vs
YXRlIG5ldyBSVFQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIGdldCB0aGUg
Y3VycmVudCB0aW1lICovCisJaWYgKHN0Y2ItPmFzb2MudXNlX3ByZWNpc2VfdGltZSkgeworCQko
dm9pZClTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5vdyk7CisJfSBlbHNlIHsKKwkJKHZvaWQpU0NU
UF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7CisJfQorCXRpbWV2YWxzdWIoJm5vdywgb2xkKTsKKwkv
KiBzdG9yZSB0aGUgY3VycmVudCBSVFQgaW4gdXMgKi8KKwluZXQtPnJ0dCA9ICh1aW50NjRfdCkx
MDAwMDAwICogKHVpbnQ2NF90KW5vdy50dl9zZWMgKworCSAgICAgICAgICAgKHVpbnQ2NF90KW5v
dy50dl91c2VjOworCS8qIGNvbXB1dGUgcnR0IGluIG1zICovCisJcnR0ID0gKGludDMyX3QpKG5l
dC0+cnR0IC8gMTAwMCk7CisJaWYgKChhc29jLT5jY19mdW5jdGlvbnMuc2N0cF9ydHRfY2FsY3Vs
YXRlZCkgJiYgKHJ0dF9mcm9tX3NhY2sgPT0gU0NUUF9SVFRfRlJPTV9EQVRBKSkgeworCQkvKiBU
ZWxsIHRoZSBDQyBtb2R1bGUgdGhhdCBhIG5ldyB1cGRhdGUgaGFzIGp1c3Qgb2NjdXJyZWQgZnJv
bSBhIHNhY2sgKi8KKwkJKCphc29jLT5jY19mdW5jdGlvbnMuc2N0cF9ydHRfY2FsY3VsYXRlZCko
c3RjYiwgbmV0LCAmbm93KTsKKwl9CisJLyogRG8gd2UgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGxh
bj8gV2UgZG8gdGhpcyBvbmx5CisJICogb24gc2Fja3MgaS5lLiBSVFQgYmVpbmcgZGV0ZXJtaW5l
ZCBmcm9tIGRhdGEgbm90CisJICogbm9uLWRhdGEgKEhCL0lOSVQtPklOSVRBQ0spLgorCSAqLwor
CWlmICgocnR0X2Zyb21fc2FjayA9PSBTQ1RQX1JUVF9GUk9NX0RBVEEpICYmCisJICAgIChuZXQt
Pmxhbl90eXBlID09IFNDVFBfTEFOX1VOS05PV04pKSB7CisJCWlmIChuZXQtPnJ0dCA+IFNDVFBf
TE9DQUxfTEFOX1JUVCkgeworCQkJbmV0LT5sYW5fdHlwZSA9IFNDVFBfTEFOX0lOVEVSTkVUOwor
CQl9IGVsc2UgeworCQkJbmV0LT5sYW5fdHlwZSA9IFNDVFBfTEFOX0xPQ0FMOworCQl9CisJfQor
CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAyLiB1cGRhdGUgUlRUVkFSICYg
U1JUVCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyotCisJICogQ29tcHV0
ZSB0aGUgc2NhbGVkIGF2ZXJhZ2UgbGFzdHNhIGFuZCB0aGUKKwkgKiBzY2FsZWQgdmFyaWFuY2Ug
bGFzdHN2IGFzIGRlc2NyaWJlZCBpbiB2YW4gSmFjb2Jzb24KKwkgKiBQYXBlciAiQ29uZ2VzdGlv
biBBdm9pZGFuY2UgYW5kIENvbnRyb2wiLCBBbm5leCBBLgorCSAqCisJICogKG5ldC0+bGFzdHNh
ID4+IFNDVFBfUlRUX1NISUZUKSBpcyB0aGUgc3J0dAorCSAqIChuZXQtPmxhc3RzYSA+PiBTQ1RQ
X1JUVF9WQVJfU0hJRlQpIGlzIHRoZSBydHR2YXIKKwkgKi8KKwlpZiAobmV0LT5SVE9fbWVhc3Vy
ZWQpIHsKKwkJcnR0IC09IChuZXQtPmxhc3RzYSA+PiBTQ1RQX1JUVF9TSElGVCk7CisJCW5ldC0+
bGFzdHNhICs9IHJ0dDsKKwkJaWYgKHJ0dCA8IDApIHsKKwkJCXJ0dCA9IC1ydHQ7CisJCX0KKwkJ
cnR0IC09IChuZXQtPmxhc3RzdiA+PiBTQ1RQX1JUVF9WQVJfU0hJRlQpOworCQluZXQtPmxhc3Rz
diArPSBydHQ7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX1JUVFZBUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJcnRvX2xvZ2dpbmcobmV0LCBTQ1RQX0xP
R19SVFRWQVIpOworCQl9CisJfSBlbHNlIHsKKwkJLyogRmlyc3QgUlRPIG1lYXN1cm1lbnQgKi8K
KwkJbmV0LT5SVE9fbWVhc3VyZWQgPSAxOworCQlmaXJzdF9tZWFzdXJlID0gMTsKKwkJbmV0LT5s
YXN0c2EgPSBydHQgPDwgU0NUUF9SVFRfU0hJRlQ7CisJCW5ldC0+bGFzdHN2ID0gKHJ0dCAvIDIp
IDw8IFNDVFBfUlRUX1ZBUl9TSElGVDsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfUlRUVkFSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlydG9fbG9nZ2lu
ZyhuZXQsIFNDVFBfTE9HX0lOSVRJQUxfUlRUKTsKKwkJfQorCX0KKwlpZiAobmV0LT5sYXN0c3Yg
PT0gMCkgeworCQluZXQtPmxhc3RzdiA9IFNDVFBfQ0xPQ0tfR1JBTlVMQVJJVFk7CisJfQorCW5l
d19ydG8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7CisJ
aWYgKChuZXdfcnRvID4gU0NUUF9TQVRfTkVUV09SS19NSU4pICYmCisJICAgIChzdGNiLT5hc29j
LnNhdF9uZXR3b3JrX2xvY2tvdXQgPT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5zYXRfbmV0d29yayA9
IDE7CisJfSBlbHNlIGlmICgoIWZpcnN0X21lYXN1cmUpICYmIHN0Y2ItPmFzb2Muc2F0X25ldHdv
cmspIHsKKwkJc3RjYi0+YXNvYy5zYXRfbmV0d29yayA9IDA7CisJCXN0Y2ItPmFzb2Muc2F0X25l
dHdvcmtfbG9ja291dCA9IDE7CisJfQorCS8qIGJvdW5kIGl0LCBwZXIgQzYvQzcgaW4gU2VjdGlv
biA1LjMuMSAqLworCWlmIChuZXdfcnRvIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKKwkJbmV3X3J0
byA9IHN0Y2ItPmFzb2MubWlucnRvOworCX0KKwlpZiAobmV3X3J0byA+IHN0Y2ItPmFzb2MubWF4
cnRvKSB7CisJCW5ld19ydG8gPSBzdGNiLT5hc29jLm1heHJ0bzsKKwl9CisJLyogd2UgYXJlIG5v
dyByZXR1cm5pbmcgdGhlIFJUTyAqLworCXJldHVybiAobmV3X3J0byk7Cit9CisKKy8qCisgKiBy
ZXR1cm4gYSBwb2ludGVyIHRvIGEgY29udGlndW91cyBwaWVjZSBvZiBkYXRhIGZyb20gdGhlIGdp
dmVuIG1idWYgY2hhaW4KKyAqIHN0YXJ0aW5nIGF0ICdvZmYnIGZvciAnbGVuJyBieXRlcy4gIElm
IHRoZSBkZXNpcmVkIHBpZWNlIHNwYW5zIG1vcmUgdGhhbgorICogb25lIG1idWYsIGEgY29weSBp
cyBtYWRlIGF0ICdwdHInLiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0aGUgYnVmZmVyIHNpemUK
KyAqIGlzID49ICdsZW4nIHJldHVybnMgTlVMTCBpZiB0aGVyZSB0aGVyZSBpc24ndCAnbGVuJyBi
eXRlcyBpbiB0aGUgY2hhaW4uCisgKi8KK2NhZGRyX3QKK3NjdHBfbV9nZXRwdHIoc3RydWN0IG1i
dWYgKm0sIGludCBvZmYsIGludCBsZW4sIHVpbnQ4X3QgKiBpbl9wdHIpCit7CisJdWludDMyX3Qg
Y291bnQ7CisJdWludDhfdCAqcHRyOworCisJcHRyID0gaW5fcHRyOworCWlmICgob2ZmIDwgMCkg
fHwgKGxlbiA8PSAwKSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qIGZpbmQgdGhlIGRlc2lyZWQg
c3RhcnQgbG9jYXRpb24gKi8KKwl3aGlsZSAoKG0gIT0gTlVMTCkgJiYgKG9mZiA+IDApKSB7CisJ
CWlmIChvZmYgPCBTQ1RQX0JVRl9MRU4obSkpCisJCQlicmVhazsKKwkJb2ZmIC09IFNDVFBfQlVG
X0xFTihtKTsKKwkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJfQorCWlmIChtID09IE5VTEwpCisJ
CXJldHVybiAoTlVMTCk7CisKKwkvKiBpcyB0aGUgY3VycmVudCBtYnVmIGxhcmdlIGVub3VnaCAo
ZWcuIGNvbnRpZ3VvdXMpPyAqLworCWlmICgoU0NUUF9CVUZfTEVOKG0pIC0gb2ZmKSA+PSBsZW4p
IHsKKwkJcmV0dXJuIChtdG9kKG0sIGNhZGRyX3QpICsgb2ZmKTsKKwl9IGVsc2UgeworCQkvKiBl
bHNlLCBpdCBzcGFucyBtb3JlIHRoYW4gb25lIG1idWYsIHNvIHNhdmUgYSB0ZW1wIGNvcHkuLi4g
Ki8KKwkJd2hpbGUgKChtICE9IE5VTEwpICYmIChsZW4gPiAwKSkgeworCQkJY291bnQgPSBtaW4o
U0NUUF9CVUZfTEVOKG0pIC0gb2ZmLCBsZW4pOworCQkJbWVtY3B5KHB0ciwgbXRvZChtLCBjYWRk
cl90KSArIG9mZiwgY291bnQpOworCQkJbGVuIC09IGNvdW50OworCQkJcHRyICs9IGNvdW50Owor
CQkJb2ZmID0gMDsKKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCWlmICgobSA9PSBO
VUxMKSAmJiAobGVuID4gMCkpCisJCQlyZXR1cm4gKE5VTEwpOworCQllbHNlCisJCQlyZXR1cm4g
KChjYWRkcl90KWluX3B0cik7CisJfQorfQorCisKKworc3RydWN0IHNjdHBfcGFyYW1oZHIgKgor
c2N0cF9nZXRfbmV4dF9wYXJhbShzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICBpbnQgb2Zmc2V0LAorICAg
IHN0cnVjdCBzY3RwX3BhcmFtaGRyICpwdWxsLAorICAgIGludCBwdWxsX2xpbWl0KQoreworCS8q
IFRoaXMganVzdCBwcm92aWRlcyBhIHR5cGVkIHNpZ25hdHVyZSB0byBQZXRlcidzIFB1bGwgcm91
dGluZSAqLworCXJldHVybiAoKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopc2N0cF9tX2dldHB0ciht
LCBvZmZzZXQsIHB1bGxfbGltaXQsCisJICAgICh1aW50OF90ICopIHB1bGwpKTsKK30KKworCitz
dHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9wYWRfdG9tYnVmKHN0cnVjdCBtYnVmICptLCBpbnQgcGFk
bGVuKQoreworCXN0cnVjdCBtYnVmICptX2xhc3Q7CisJY2FkZHJfdCBkcDsKKworCWlmIChwYWRs
ZW4gPiAzKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChwYWRsZW4gPD0gTV9UUkFJTElO
R1NQQUNFKG0pKSB7CisJCS8qCisJCSAqIFRoZSBlYXN5IHdheS4gV2UgaG9wZSB0aGUgbWFqb3Jp
dHkgb2YgdGhlIHRpbWUgd2UgaGl0CisJCSAqIGhlcmUgOikKKwkJICovCisJCW1fbGFzdCA9IG07
CisJfSBlbHNlIHsKKwkJLyogSGFyZCB3YXkgd2UgbXVzdCBncm93IHRoZSBtYnVmIGNoYWluICov
CisJCW1fbGFzdCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhwYWRsZW4sIDAsIE1fTk9XQUlULCAx
LCBNVF9EQVRBKTsKKwkJaWYgKG1fbGFzdCA9PSBOVUxMKSB7CisJCQlyZXR1cm4gKE5VTEwpOwor
CQl9CisJCVNDVFBfQlVGX0xFTihtX2xhc3QpID0gMDsKKwkJU0NUUF9CVUZfTkVYVChtX2xhc3Qp
ID0gTlVMTDsKKwkJU0NUUF9CVUZfTkVYVChtKSA9IG1fbGFzdDsKKwl9CisJZHAgPSBtdG9kKG1f
bGFzdCwgY2FkZHJfdCkgKyBTQ1RQX0JVRl9MRU4obV9sYXN0KTsKKwlTQ1RQX0JVRl9MRU4obV9s
YXN0KSArPSBwYWRsZW47CisJbWVtc2V0KGRwLCAwLCBwYWRsZW4pOworCXJldHVybiAobV9sYXN0
KTsKK30KKworc3RydWN0IG1idWYgKgorc2N0cF9wYWRfbGFzdG1idWYoc3RydWN0IG1idWYgKm0s
IGludCBwYWR2YWwsIHN0cnVjdCBtYnVmICpsYXN0X21idWYpCit7CisJLyogZmluZCB0aGUgbGFz
dCBtYnVmIGluIGNoYWluIGFuZCBwYWQgaXQgKi8KKwlzdHJ1Y3QgbWJ1ZiAqbV9hdDsKKworCWlm
IChsYXN0X21idWYgIT0gTlVMTCkgeworCQlyZXR1cm4gKHNjdHBfYWRkX3BhZF90b21idWYobGFz
dF9tYnVmLCBwYWR2YWwpKTsKKwl9IGVsc2UgeworCQlmb3IgKG1fYXQgPSBtOyBtX2F0OyBtX2F0
ID0gU0NUUF9CVUZfTkVYVChtX2F0KSkgeworCQkJaWYgKFNDVFBfQlVGX05FWFQobV9hdCkgPT0g
TlVMTCkgeworCQkJCXJldHVybiAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2F0LCBwYWR2YWwpKTsK
KwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9u
b3RpZnlfYXNzb2NfY2hhbmdlKHVpbnQxNl90IHN0YXRlLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CisgICAgdWludDE2X3QgZXJyb3IsIHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydCwgdWlu
dDhfdCBmcm9tX3BlZXIsIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYm
ICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgIFNDVFBfVU5VU0VECisjZW5kaWYK
KyAgICApCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX2Fzc29jX2No
YW5nZSAqc2FjOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCXVuc2ln
bmVkIGludCBub3RpZl9sZW47CisJdWludDE2X3QgYWJvcnRfbGVuOworCXVuc2lnbmVkIGludCBp
OworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJ
CXJldHVybjsKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKSB7CisJCW5vdGlmX2xlbiA9ICh1
bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7CisJCWlmIChhYm9y
dCAhPSBOVUxMKSB7CisJCQlhYm9ydF9sZW4gPSBudG9ocyhhYm9ydC0+Y2guY2h1bmtfbGVuZ3Ro
KTsKKwkJCS8qCisJCQkgKiBPbmx5IFNDVFBfQ0hVTktfQlVGRkVSX1NJWkUgYXJlIGd1YXJhbnRl
ZWQgdG8gYmUKKwkJCSAqIGNvbnRpZ3VvdXMuCisJCQkgKi8KKwkJCWlmIChhYm9ydF9sZW4gPiBT
Q1RQX0NIVU5LX0JVRkZFUl9TSVpFKSB7CisJCQkJYWJvcnRfbGVuID0gU0NUUF9DSFVOS19CVUZG
RVJfU0laRTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFib3J0X2xlbiA9IDA7CisJCX0KKwkJaWYg
KChzdGF0ZSA9PSBTQ1RQX0NPTU1fVVApIHx8IChzdGF0ZSA9PSBTQ1RQX1JFU1RBUlQpKSB7CisJ
CQlub3RpZl9sZW4gKz0gU0NUUF9BU1NPQ19TVVBQT1JUU19NQVg7CisJCX0gZWxzZSBpZiAoKHN0
YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fCAoc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykp
IHsKKwkJCW5vdGlmX2xlbiArPSBhYm9ydF9sZW47CisJCX0KKwkJbV9ub3RpZnkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2cobm90aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlm
IChtX25vdGlmeSA9PSBOVUxMKSB7CisJCQkvKiBSZXRyeSB3aXRoIHNtYWxsZXIgdmFsdWUuICov
CisJCQlub3RpZl9sZW4gPSAodW5zaWduZWQgaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19j
aGFuZ2UpOworCQkJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90aWZfbGVuLCAw
LCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCQlpZiAobV9ub3RpZnkgPT0gTlVMTCkgeworCQkJ
CWdvdG8gc2V0X2Vycm9yOworCQkJfQorCQl9CisJCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0g
TlVMTDsKKwkJc2FjID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICop
OworCQltZW1zZXQoc2FjLCAwLCBub3RpZl9sZW4pOworCQlzYWMtPnNhY190eXBlID0gU0NUUF9B
U1NPQ19DSEFOR0U7CisJCXNhYy0+c2FjX2ZsYWdzID0gMDsKKwkJc2FjLT5zYWNfbGVuZ3RoID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7CisJCXNhYy0+c2FjX3N0YXRlID0gc3Rh
dGU7CisJCXNhYy0+c2FjX2Vycm9yID0gZXJyb3I7CisJCS8qIFhYWCB2ZXJpZnkgdGhlc2Ugc3Ry
ZWFtIGNvdW50cyAqLworCQlzYWMtPnNhY19vdXRib3VuZF9zdHJlYW1zID0gc3RjYi0+YXNvYy5z
dHJlYW1vdXRjbnQ7CisJCXNhYy0+c2FjX2luYm91bmRfc3RyZWFtcyA9IHN0Y2ItPmFzb2Muc3Ry
ZWFtaW5jbnQ7CisJCXNhYy0+c2FjX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsK
KwkJaWYgKG5vdGlmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpKSB7CisJ
CQlpZiAoKHN0YXRlID09IFNDVFBfQ09NTV9VUCkgfHwgKHN0YXRlID09IFNDVFBfUkVTVEFSVCkp
IHsKKwkJCQlpID0gMDsKKwkJCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID09IDEp
IHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytdID0gU0NUUF9BU1NPQ19TVVBQT1JUU19QUjsKKwkJ
CQl9CisJCQkJaWYgKHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQgPT0gMSkgeworCQkJCQlzYWMt
PnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FVVEg7CisJCQkJfQorCQkJCWlm
IChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkgeworCQkJCQlzYWMtPnNhY19pbmZv
W2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORjsKKwkJCQl9CisJCQkJaWYgKHN0Y2It
PmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytdID0g
U0NUUF9BU1NPQ19TVVBQT1JUU19JTlRFUkxFQVZJTkc7CisJCQkJfQorCQkJCXNhYy0+c2FjX2lu
Zm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfTVVMVElCVUY7CisJCQkJaWYgKHN0Y2ItPmFz
b2MucmVjb25maWdfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytdID0g
U0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05GSUc7CisJCQkJfQorCQkJCXNhYy0+c2FjX2xlbmd0
aCArPSBpOworCQkJfSBlbHNlIGlmICgoc3RhdGUgPT0gU0NUUF9DT01NX0xPU1QpIHx8IChzdGF0
ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgeworCQkJCW1lbWNweShzYWMtPnNhY19pbmZvLCBh
Ym9ydCwgYWJvcnRfbGVuKTsKKwkJCQlzYWMtPnNhY19sZW5ndGggKz0gYWJvcnRfbGVuOworCQkJ
fQorCQl9CisJCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzYWMtPnNhY19sZW5ndGg7CisJCWNv
bnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9k
ZXN0aW5hdGlvbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3Rj
Yi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX25vdGlmeSk7CisJCWlmIChjb250cm9sICE9IE5VTEwpIHsKKwkJCWNvbnRyb2wtPmxl
bmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJCQljb250cm9sLT5zcGVjX2ZsYWdzID0g
TV9OT1RJRklDQVRJT047CisJCQkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwkJCWNvbnRy
b2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0
cF9lcCwgc3RjYiwKKwkJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCisJCQkgICAgICAgICAg
ICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NUUF9SRUFEX0xPQ0tfTk9U
X0hFTEQsCisJCQkgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOworCQl9IGVsc2UgeworCQkJ
c2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJfQorCX0KKwkvKgorCSAqIEZvciAxLXRvLTEgc3R5
bGUgc29ja2V0cywgd2Ugc2VuZCB1cCBhbmQgZXJyb3Igd2hlbiBhbiBBQk9SVAorCSAqIGNvbWVz
IGluLgorCSAqLworc2V0X2Vycm9yOgorCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkgICAgKChzdGF0ZSA9PSBT
Q1RQX0NPTU1fTE9TVCkgfHwgKHN0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSkgeworCQlT
T0NLX0xPQ0soc3RjYi0+c2N0cF9zb2NrZXQpOworCQlpZiAoZnJvbV9wZWVyKSB7CisJCQlpZiAo
U0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUNPTk5SRUZVU0VEKTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3IgPSBF
Q09OTlJFRlVTRUQ7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQ09OTlJFU0VUKTsKKwkJCQlzdGNiLT5z
Y3RwX3NvY2tldC0+c29fZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJfQorCQl9IGVsc2UgeworCQkJ
aWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJ
VCkgfHwKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVf
Q09PS0lFX0VDSE9FRCkpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRVRJTUVET1VUKTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tl
dC0+c29fZXJyb3IgPSBFVElNRURPVVQ7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQ09OTkFCT1JURUQp
OworCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19lcnJvciA9IEVDT05OQUJPUlRFRDsKKwkJCX0K
KwkJfQorCQlTT0NLX1VOTE9DSyhzdGNiLT5zY3RwX3NvY2tldCk7CisJfQorCS8qIFdha2UgQU5Z
IHNsZWVwZXJzICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwlpZiAoIXNv
X2xvY2tlZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VU
KSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJcmV0dXJuOworCQl9CisJfQor
I2VuZGlmCisJaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgorCSAgICAoKHN0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8
fCAoc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpKSB7CisJCXNvY2FudHJjdm1vcmUoc3Rj
Yi0+c2N0cF9zb2NrZXQpOworCX0KKwlzb3J3YWtldXAoc3RjYi0+c2N0cF9zb2NrZXQpOworCXNv
d3dha2V1cChzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJaWYgKCFzb19sb2NrZWQpIHsKKwkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKKwl9CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQKK3NjdHBf
bm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBz
dGF0ZSwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJfdCBlcnJvciwgaW50IHNvX2xv
Y2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorKQoreworCXN0cnVjdCBtYnVmICptX25v
dGlmeTsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsKKwlzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbDsKKworCWlmICgoc3RjYiA9PSBOVUxMKSB8fAorCSAgICBzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBBRERSRVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuOwor
CX0KKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBf
cGFkZHJfY2hhbmdlKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9
PSBOVUxMKQorCQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJc3BjID0g
bXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICopOworCW1lbXNldChzcGMs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpKTsKKwlzcGMtPnNwY190eXBlID0g
U0NUUF9QRUVSX0FERFJfQ0hBTkdFOworCXNwYy0+c3BjX2ZsYWdzID0gMDsKKwlzcGMtPnNwY19s
ZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlKTsKKwlzd2l0Y2ggKHNhLT5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJ
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfTkVF
RFNfTUFQUEVEX1Y0KSkgeworCQkJaW42X3Npbl8yX3Y0bWFwc2luNigoc3RydWN0IHNvY2thZGRy
X2luICopc2EsCisJCQkgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
JnNwYy0+c3BjX2FhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSgmc3BjLT5zcGNfYWFkZHIs
IHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCX0KKyNlbHNlCisJCW1lbWNweSgm
c3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYK
KwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworI2lm
ZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
KyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisJCW1lbWNweSgmc3BjLT5zcGNf
YWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCisjaWZkZWYgU0NUUF9F
TUJFRERFRF9WNl9TQ09QRQorCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3BjLT5z
cGNfYWFkZHI7CisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIp
KSB7CisJCQlpZiAoc2luNi0+c2luNl9zY29wZV9pZCA9PSAwKSB7CisJCQkJLyogcmVjb3ZlciBz
Y29wZV9pZCBmb3IgdXNlciAqLworI2lmZGVmIFNDVFBfS0FNRQorCQkJCSh2b2lkKXNhNl9yZWNv
dmVyc2NvcGUoc2luNik7CisjZWxzZQorCQkJCSh2b2lkKWluNl9yZWNvdmVyc2NvcGUoc2luNiwg
JnNpbjYtPnNpbjZfYWRkciwKKwkJCQkJCSAgICAgICBOVUxMKTsKKyNlbmRpZgorCQkJfSBlbHNl
IHsKKwkJCQkvKiBjbGVhciBlbWJlZGRlZCBzY29wZV9pZCBmb3IgdXNlciAqLworCQkJCWluNl9j
bGVhcnNjb3BlKCZzaW42LT5zaW42X2FkZHIpOworCQkJfQorCQl9CisjZW5kaWYgLyogU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSAqLworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoJnNwYy0+c3BjX2FhZGRyLCBz
YSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVm
YXVsdDoKKwkJLyogVFNOSCAqLworCQlicmVhazsKKwl9CisJc3BjLT5zcGNfc3RhdGUgPSBzdGF0
ZTsKKwlzcGMtPnNwY19lcnJvciA9IGVycm9yOworCXNwYy0+c3BjX2Fzc29jX2lkID0gc2N0cF9n
ZXRfYXNzb2NpZChzdGNiKTsKKworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFkZHJfY2hhbmdlKTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7
CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFf
ZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7CisJaWYgKGNvbnRy
b2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5
KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3Rp
ZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKKwkvKiBub3QgdGhh
dCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKKwlzY3Rw
X2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAorCSAgICAgICAgICAgICAgICAgIGNv
bnRyb2wsCisJICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEs
CisJICAgICAgICAgICAgICAgICAgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsCisJICAgICAgICAg
ICAgICAgICAgc29fbG9ja2VkKTsKK30KKworCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfc2Vu
ZF9mYWlsZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IHNlbnQsIHVpbnQzMl90IGVy
cm9yLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgaW50IHNvX2xvY2tlZAorI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisg
ICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7
CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKnNzZjsKKwlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxl
ZF9ldmVudCAqc3NmZTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2hraGRyOworCWludCBub3RpZmhkcl9sZW4sIGNoa19sZW4s
IGNoa2hkcl9sZW4sIHBhZGRpbmdfbGVuLCBwYXlsb2FkX2xlbjsKKworCWlmICgoc3RjYiA9PSBO
VUxMKSB8fAorCSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpICYmCisJICAgICBzY3RwX3N0Y2Jf
aXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5T
RU5ERkFJTEVWTlQpKSkgeworCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLworCQlyZXR1cm47CisJ
fQorCisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFND
VFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgeworCQlub3RpZmhkcl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCX0gZWxzZSB7CisJCW5vdGlmaGRy
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCk7CisJfQorCW1fbm90aWZ5ID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmaGRyX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJCXJl
dHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbm90aWZoZHJfbGVuOworCWlmIChzdGNi
LT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgeworCQljaGtoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2lkYXRhX2NodW5rKTsKKwl9IGVsc2UgeworCQljaGtoZHJfbGVuID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2RhdGFfY2h1bmspOworCX0KKwkvKiBVc2Ugc29tZSBkZWZhdWx0cyBpbiBjYXNlIHdl
IGNhbid0IGFjY2VzcyB0aGUgY2h1bmsgaGVhZGVyICovCisJaWYgKGNoay0+c2VuZF9zaXplID49
IGNoa2hkcl9sZW4pIHsKKwkJcGF5bG9hZF9sZW4gPSBjaGstPnNlbmRfc2l6ZSAtIGNoa2hkcl9s
ZW47CisJfSBlbHNlIHsKKwkJcGF5bG9hZF9sZW4gPSAwOworCX0KKwlwYWRkaW5nX2xlbiA9IDA7
CisJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7CisJCWNoa2hkciA9IG10b2QoY2hrLT5kYXRhLCBz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwkJaWYgKGNoa2hkciAhPSBOVUxMKSB7CisJCQljaGtf
bGVuID0gbnRvaHMoY2hraGRyLT5jaHVua19sZW5ndGgpOworCQkJaWYgKChjaGtfbGVuID49IGNo
a2hkcl9sZW4pICYmCisJCQkgICAgKGNoay0+c2VuZF9zaXplID49IGNoa19sZW4pICYmCisJCQkg
ICAgKGNoay0+c2VuZF9zaXplIC0gY2hrX2xlbiA8IDQpKSB7CisJCQkJcGFkZGluZ19sZW4gPSBj
aGstPnNlbmRfc2l6ZSAtIGNoa19sZW47CisJCQkJcGF5bG9hZF9sZW4gPSBjaGstPnNlbmRfc2l6
ZSAtIGNoa2hkcl9sZW4gLSBwYWRkaW5nX2xlbjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc2N0cF9z
dGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVD
Vk5TRU5ERkFJTEVWTlQpKSB7CisJCXNzZmUgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9z
ZW5kX2ZhaWxlZF9ldmVudCAqKTsKKwkJbWVtc2V0KHNzZmUsIDAsIG5vdGlmaGRyX2xlbik7CisJ
CXNzZmUtPnNzZmVfdHlwZSA9IFNDVFBfU0VORF9GQUlMRURfRVZFTlQ7CisJCWlmIChzZW50KSB7
CisJCQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1NFTlQ7CisJCX0gZWxzZSB7CisJCQlz
c2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKKwkJfQorCQlzc2ZlLT5zc2ZlX2xl
bmd0aCA9ICh1aW50MzJfdCkobm90aWZoZHJfbGVuICsgcGF5bG9hZF9sZW4pOworCQlzc2ZlLT5z
c2ZlX2Vycm9yID0gZXJyb3I7CisJCS8qIG5vdCBleGFjdGx5IHdoYXQgdGhlIHVzZXIgc2VudCBp
biwgYnV0IHNob3VsZCBiZSBjbG9zZSA6KSAqLworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCA9
IGNoay0+cmVjLmRhdGEuc2lkOworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzID0gY2hrLT5y
ZWMuZGF0YS5yY3ZfZmxhZ3M7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRfcHBpZCA9IGNoay0+cmVj
LmRhdGEucHBpZDsKKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9jb250ZXh0ID0gY2hrLT5yZWMuZGF0
YS5jb250ZXh0OworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNz
b2NpZChzdGNiKTsKKwkJc3NmZS0+c3NmZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3Rj
Yik7CisJfSBlbHNlIHsKKwkJc3NmID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfc2VuZF9m
YWlsZWQgKik7CisJCW1lbXNldChzc2YsIDAsIG5vdGlmaGRyX2xlbik7CisJCXNzZi0+c3NmX3R5
cGUgPSBTQ1RQX1NFTkRfRkFJTEVEOworCQlpZiAoc2VudCkgeworCQkJc3NmLT5zc2ZfZmxhZ3Mg
PSBTQ1RQX0RBVEFfU0VOVDsKKwkJfSBlbHNlIHsKKwkJCXNzZi0+c3NmX2ZsYWdzID0gU0NUUF9E
QVRBX1VOU0VOVDsKKwkJfQorCQlzc2YtPnNzZl9sZW5ndGggPSAodWludDMyX3QpKG5vdGlmaGRy
X2xlbiArIHBheWxvYWRfbGVuKTsKKwkJc3NmLT5zc2ZfZXJyb3IgPSBlcnJvcjsKKwkJLyogbm90
IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxkIGJlIGNsb3NlIDopICov
CisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3RyZWFtID0gY2hrLT5yZWMuZGF0YS5zaWQ7CisJCXNz
Zi0+c3NmX2luZm8uc2luZm9fc3NuID0gKHVpbnQxNl90KWNoay0+cmVjLmRhdGEubWlkOworCQlz
c2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJCXNz
Zi0+c3NmX2luZm8uc2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJc3NmLT5zc2Zf
aW5mby5zaW5mb19jb250ZXh0ID0gY2hrLT5yZWMuZGF0YS5jb250ZXh0OworCQlzc2YtPnNzZl9p
bmZvLnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJc3NmLT5zc2Zf
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCX0KKwlpZiAoY2hrLT5kYXRhICE9
IE5VTEwpIHsKKwkJLyogVHJpbSBvZmYgdGhlIHNjdHAgY2h1bmsgaGVhZGVyIChpdCBzaG91bGQg
YmUgdGhlcmUpICovCisJCWlmIChjaGstPnNlbmRfc2l6ZSA9PSBjaGtoZHJfbGVuICsgcGF5bG9h
ZF9sZW4gKyBwYWRkaW5nX2xlbikgeworCQkJbV9hZGooY2hrLT5kYXRhLCBjaGtoZHJfbGVuKTsK
KwkJCW1fYWRqKGNoay0+ZGF0YSwgLXBhZGRpbmdfbGVuKTsKKwkJCXNjdHBfbWJ1Zl9jcnVzaChj
aGstPmRhdGEpOworCQkJY2hrLT5zZW5kX3NpemUgLT0gKGNoa2hkcl9sZW4gKyBwYWRkaW5nX2xl
bik7CisJCX0KKwl9CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBjaGstPmRhdGE7CisJLyog
U3RlYWwgb2ZmIHRoZSBtYnVmICovCisJY2hrLT5kYXRhID0gTlVMTDsKKwkvKgorCSAqIEZvciB0
aGlzIGNhc2UsIHdlIGNoZWNrIHRoZSBhY3R1YWwgc29ja2V0IGJ1ZmZlciwgc2luY2UgdGhlIGFz
c29jCisJICogaXMgZ29pbmcgYXdheSB3ZSBkb24ndCB3YW50IHRvIG92ZXJmaWxsIHRoZSBzb2Nr
ZXQgYnVmZmVyIGZvciBhCisJICogbm9uLXJlYWRlcgorCSAqLworCWlmIChzY3RwX3Nic3BhY2Vf
ZmFpbGVkbXNncygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9u
b3RpZnkpKSB7CisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJLyog
YXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0
Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChjb250cm9sID09IE5V
TEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJl
dHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKKwlj
b250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90IHRoYXQgd2UgbmVl
ZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJc2N0cF9hZGRfdG9f
cmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgICAgICAgICAgICAgICBjb250cm9sLAor
CSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAorCSAgICAg
ICAgICAgICAgICAgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELAorCSAgICAgICAgICAgICAgICAg
IHNvX2xvY2tlZCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfbm90aWZ5X3NlbmRfZmFpbGVk
MihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGVycm9yLAorCQkJIHN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9f
QVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAg
ICkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQg
KnNzZjsKKwlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZTsKKwlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlpbnQgbm90aWZoZHJfbGVuOworCisJaWYgKChz
dGNiID09IE5VTEwpIHx8CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVCkgJiYKKwkgICAgIHNj
dHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19SRUNWTlNFTkRGQUlMRVZOVCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJCXJl
dHVybjsKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgeworCQlub3RpZmhkcl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCX0gZWxzZSB7CisJCW5v
dGlmaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCk7CisJfQorCW1fbm90
aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmaGRyX2xlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7CisJCS8qIG5vIHNwYWNlIGxlZnQg
Ki8KKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbm90aWZoZHJfbGVu
OworCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQ
X1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCkpIHsKKwkJc3NmZSA9IG10b2QobV9ub3RpZnks
IHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICopOworCQltZW1zZXQoc3NmZSwgMCwgbm90
aWZoZHJfbGVuKTsKKwkJc3NmZS0+c3NmZV90eXBlID0gU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDsK
KwkJc3NmZS0+c3NmZV9mbGFncyA9IFNDVFBfREFUQV9VTlNFTlQ7CisJCXNzZmUtPnNzZmVfbGVu
Z3RoID0gKHVpbnQzMl90KShub3RpZmhkcl9sZW4gKyBzcC0+bGVuZ3RoKTsKKwkJc3NmZS0+c3Nm
ZV9lcnJvciA9IGVycm9yOworCQkvKiBub3QgZXhhY3RseSB3aGF0IHRoZSB1c2VyIHNlbnQgaW4s
IGJ1dCBzaG91bGQgYmUgY2xvc2UgOikgKi8KKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9zaWQgPSBz
cC0+c2lkOworCQlpZiAoc3AtPnNvbWVfdGFrZW4pIHsKKwkJCXNzZmUtPnNzZmVfaW5mby5zbmRf
ZmxhZ3MgPSBTQ1RQX0RBVEFfTEFTVF9GUkFHOworCQl9IGVsc2UgeworCQkJc3NmZS0+c3NmZV9p
bmZvLnNuZF9mbGFncyA9IFNDVFBfREFUQV9OT1RfRlJBRzsKKwkJfQorCQlzc2ZlLT5zc2ZlX2lu
Zm8uc25kX3BwaWQgPSBzcC0+cHBpZDsKKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9jb250ZXh0ID0g
c3AtPmNvbnRleHQ7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRfYXNzb2NfaWQgPSBzY3RwX2dldF9h
c3NvY2lkKHN0Y2IpOworCQlzc2ZlLT5zc2ZlX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChz
dGNiKTsKKwl9IGVsc2UgeworCQlzc2YgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5k
X2ZhaWxlZCAqKTsKKwkJbWVtc2V0KHNzZiwgMCwgbm90aWZoZHJfbGVuKTsKKwkJc3NmLT5zc2Zf
dHlwZSA9IFNDVFBfU0VORF9GQUlMRUQ7CisJCXNzZi0+c3NmX2ZsYWdzID0gU0NUUF9EQVRBX1VO
U0VOVDsKKwkJc3NmLT5zc2ZfbGVuZ3RoID0gKHVpbnQzMl90KShub3RpZmhkcl9sZW4gKyBzcC0+
bGVuZ3RoKTsKKwkJc3NmLT5zc2ZfZXJyb3IgPSBlcnJvcjsKKwkJLyogbm90IGV4YWN0bHkgd2hh
dCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxkIGJlIGNsb3NlIDopICovCisJCXNzZi0+c3Nm
X2luZm8uc2luZm9fc3RyZWFtID0gc3AtPnNpZDsKKwkJc3NmLT5zc2ZfaW5mby5zaW5mb19zc24g
PSAwOworCQlpZiAoc3AtPnNvbWVfdGFrZW4pIHsKKwkJCXNzZi0+c3NmX2luZm8uc2luZm9fZmxh
Z3MgPSBTQ1RQX0RBVEFfTEFTVF9GUkFHOworCQl9IGVsc2UgeworCQkJc3NmLT5zc2ZfaW5mby5z
aW5mb19mbGFncyA9IFNDVFBfREFUQV9OT1RfRlJBRzsKKwkJfQorCQlzc2YtPnNzZl9pbmZvLnNp
bmZvX3BwaWQgPSBzcC0+cHBpZDsKKwkJc3NmLT5zc2ZfaW5mby5zaW5mb19jb250ZXh0ID0gc3At
PmNvbnRleHQ7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fYXNzb2NfaWQgPSBzY3RwX2dldF9hc3Nv
Y2lkKHN0Y2IpOworCQlzc2YtPnNzZl9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7
CisJfQorCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gc3AtPmRhdGE7CisKKwkvKiBTdGVhbCBv
ZmYgdGhlIG1idWYgKi8KKwlzcC0+ZGF0YSA9IE5VTEw7CisJLyoKKwkgKiBGb3IgdGhpcyBjYXNl
LCB3ZSBjaGVjayB0aGUgYWN0dWFsIHNvY2tldCBidWZmZXIsIHNpbmNlIHRoZSBhc3NvYworCSAq
IGlzIGdvaW5nIGF3YXkgd2UgZG9uJ3Qgd2FudCB0byBvdmVyZmlsbCB0aGUgc29ja2V0IGJ1ZmZl
ciBmb3IgYQorCSAqIG5vbi1yZWFkZXIKKwkgKi8KKwlpZiAoc2N0cF9zYnNwYWNlX2ZhaWxlZG1z
Z3MoJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpIDwgU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSkg
eworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCS8qIGFwcGVuZCB0
byBzb2NrZXQgKi8KKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJ
CS8qIG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJ
fQorCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+
c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAq
LworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCisJICAgIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tl
dC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsKK30KKwor
CisKK3N0YXRpYyB2b2lkCitzY3RwX25vdGlmeV9hZGFwdGF0aW9uX2xheWVyKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfYWRh
cHRhdGlvbl9ldmVudCAqc2FpOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
OworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29m
ZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCkpIHsK
KwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuOworCX0KKworCW1fbm90aWZ5ID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGlvbl9ldmVudCks
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJLyog
bm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7
CisJc2FpID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCAqKTsK
KwltZW1zZXQoc2FpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCkpOwor
CXNhaS0+c2FpX3R5cGUgPSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjsKKwlzYWktPnNhaV9m
bGFncyA9IDA7CisJc2FpLT5zYWlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0YXRp
b25fZXZlbnQpOworCXNhaS0+c2FpX2FkYXB0YXRpb25faW5kID0gc3RjYi0+YXNvYy5wZWVyc19h
ZGFwdGF0aW9uOworCXNhaS0+c2FpX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsK
KworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlv
bl9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOworCisJLyogYXBwZW5k
IHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChjb250cm9sID09IE5VTEwpIHsK
KwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsK
Kwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKKwljb250cm9s
LT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlz
ICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJc2N0cF9hZGRfdG9fcmVhZHEo
c3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgY29udHJvbCwKKwkgICAgJnN0Y2ItPnNjdHBfc29j
a2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworfQorCisvKiBUaGlzIGFsd2F5cyBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSByZWFkLXF1
ZXVlIExPQ0tFRCBpbiB0aGUgSU5QICovCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfcGFydGlh
bF9kZWxpdmVyeV9pbmRpY2F0aW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgZXJy
b3IsCisJCQkJCXVpbnQzMl90IHZhbCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICApCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBz
Y3RwX3BkYXBpX2V2ZW50ICpwZGFwaTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbDsKKwlzdHJ1Y3Qgc29ja2J1ZiAqc2I7CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkg
ICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENC
X0ZMQUdTX1BEQVBJRVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJu
OworCX0KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NP
Q0tFVF9DQU5UX1JFQUQpIHsKKwkJcmV0dXJuOworCX0KKworCW1fbm90aWZ5ID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCksIDAsIE1fTk9XQUlU
LCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJLyogbm8gc3BhY2UgbGVm
dCAqLworCQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJcGRhcGkgPSBt
dG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCAqKTsKKwltZW1zZXQocGRhcGks
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCkpOworCXBkYXBpLT5wZGFwaV90eXBl
ID0gU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOworCXBkYXBpLT5wZGFwaV9mbGFncyA9IDA7
CisJcGRhcGktPnBkYXBpX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCk7
CisJcGRhcGktPnBkYXBpX2luZGljYXRpb24gPSBlcnJvcjsKKwlwZGFwaS0+cGRhcGlfc3RyZWFt
ID0gKHZhbCA+PiAxNik7CisJcGRhcGktPnBkYXBpX3NlcSA9ICh2YWwgJiAweDAwMDBmZmZmKTsK
KwlwZGFwaS0+cGRhcGlfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NU
UF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCk7CisJ
U0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3Jl
YWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkJCQkJIDAs
IDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKKwkJCQkJIG1fbm90aWZ5KTsKKwlpZiAo
Y29udHJvbCA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9u
b3RpZnkpOworCQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTiht
X25vdGlmeSk7CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5v
dCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5Owor
CXNiID0gJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Y7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9z
YmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JB
TExPQywgU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSk7CisJfQorCXNjdHBfc2JhbGxvYyhzdGNiLCBz
YiwgbV9ub3RpZnkpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfc2Jsb2coc2IsIGNvbnRyb2wtPmRv
X25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwl9CisJY29u
dHJvbC0+ZW5kX2FkZGVkID0gMTsKKwlpZiAoc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpKQorCQlU
QUlMUV9JTlNFUlRfQUZURVIoJnN0Y2ItPnNjdHBfZXAtPnJlYWRfcXVldWUsIHN0Y2ItPmFzb2Mu
Y29udHJvbF9wZGFwaSwgIGNvbnRyb2wsIG5leHQpOworCWVsc2UgeworCQkvKiB3ZSByZWFsbHkg
c2hvdWxkIG5vdCBzZWUgdGhpcyBjYXNlICovCisJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5z
Y3RwX2VwLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwl9CisJaWYgKHN0Y2ItPnNjdHBf
ZXAgJiYgc3RjYi0+c2N0cF9zb2NrZXQpIHsKKwkJLyogVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRo
ZSBjYXNlICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oc3Rj
Yi0+c2N0cF9lcCk7CisJCWlmICghc29fbG9ja2VkKSB7CisJCQlhdG9taWNfYWRkX2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9T
T0NLRVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJaWYgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9CisjZW5kaWYKKwkJc2N0
cF9zb3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlpZiAoIXNv
X2xvY2tlZCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJfQorI2VuZGlmCisJ
fQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfc2h1dGRvd25fZXZlbnQoc3RydWN0IHNj
dHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBtYnVmICptX25vdGlmeTsKKwlzdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9ldmVudCAqc3NlOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
OworCisJLyoKKwkgKiBGb3IgVENQIG1vZGVsIEFORCBVRFAgY29ubmVjdGVkIHNvY2tldHMgd2Ug
d2lsbCBzZW5kIGFuIGVycm9yIHVwCisJICogd2hlbiBhbiBTSFVURE9XTiBjb21wbGV0ZXMKKwkg
Ki8KKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAorCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7CisJCS8qIG1hcmsgc29ja2V0IGNsb3NlZCBmb3IgcmVhZC93cml0ZSBh
bmQgd2FrZXVwISAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCQlzbyA9IFNDVFBfSU5QX1NP
KHN0Y2ItPnNjdHBfZXApOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwor
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURf
U09DS0VUKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJcmV0dXJuOworCQl9
CisjZW5kaWYKKwkJc29jYW50c2VuZG1vcmUoc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NP
Q0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJfQorCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZO
VCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuOworCX0KKworCW1fbm90
aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9l
dmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkK
KwkJLyogbm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisJc3NlID0gbXRvZChtX25vdGlmeSwg
c3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgKik7CisJbWVtc2V0KHNzZSwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KSk7CisJc3NlLT5zc2VfdHlwZSA9IFNDVFBfU0hVVERP
V05fRVZFTlQ7CisJc3NlLT5zc2VfZmxhZ3MgPSAwOworCXNzZS0+c3NlX2xlbmd0aCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCk7CisJc3NlLT5zc2VfYXNzb2NfaWQgPSBzY3Rw
X2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBO
VUxMOworCisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3Jl
YWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAs
IDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChj
b250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1f
bm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJ
c2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgY29udHJvbCwKKwkg
ICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxE
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfc2Vu
ZGVyX2RyeV9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX1VOVVNFRAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKK3sKKwlz
dHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCAqZXZl
bnQ7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7CisKKwlpZiAoKHN0Y2Ig
PT0gTlVMTCkgfHwKKwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVk
ICovCisJCXJldHVybjsKKwl9CisKKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhz
aXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkgeworCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwl9CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7CisJZXZlbnQgPSBtdG9k
KG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICopOworCW1lbXNldChldmVu
dCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQpKTsKKwlldmVudC0+c2Vu
ZGVyX2RyeV90eXBlID0gU0NUUF9TRU5ERVJfRFJZX0VWRU5UOworCWV2ZW50LT5zZW5kZXJfZHJ5
X2ZsYWdzID0gMDsKKwlldmVudC0+c2VuZGVyX2RyeV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNj
dHBfc2VuZGVyX2RyeV9ldmVudCk7CisJZXZlbnQtPnNlbmRlcl9kcnlfYXNzb2NfaWQgPSBzY3Rw
X2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9
IE5VTEw7CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNjdHBfYnVpbGRf
cmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwg
MCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7CisJaWYg
KGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG1f
bm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKKwkvKiBu
b3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsK
KwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLAorCSAgICAg
ICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9D
S19OT1RfSEVMRCwgc29fbG9ja2VkKTsKK30KKworCit2b2lkCitzY3RwX25vdGlmeV9zdHJlYW1f
cmVzZXRfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3QgbnVtYmVyaW4sIHVpbnQx
Nl90IG51bWJlcm91dCwgaW50IGZsYWcpCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0
cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCXN0cnVjdCBzY3RwX3N0cmVhbV9j
aGFuZ2VfZXZlbnQgKnN0cmFkZDsKKworCWlmICgoc3RjYiA9PSBOVUxMKSB8fAorCSAgICAoc2N0
cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdT
X1NUUkVBTV9DSEFOR0VFVk5UKSkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0
dXJuOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MucGVlcl9yZXFfb3V0KSAmJiBmbGFnKSB7CisJCS8q
IFBlZXIgbWFkZSB0aGUgcmVxdWVzdCwgZG9uJ3QgdGVsbCB0aGUgbG9jYWwgdXNlciAqLworCQlz
dGNiLT5hc29jLnBlZXJfcmVxX291dCA9IDA7CisJCXJldHVybjsKKwl9CisJc3RjYi0+YXNvYy5w
ZWVyX3JlcV9vdXQgPSAwOworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJCXJl
dHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlzdHJhZGQgPSBtdG9kKG1fbm90
aWZ5LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50ICopOworCW1lbXNldChzdHJhZGQs
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50KSk7CisJc3RyYWRkLT5z
dHJjaGFuZ2VfdHlwZSA9IFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDsKKwlzdHJhZGQtPnN0cmNo
YW5nZV9mbGFncyA9IGZsYWc7CisJc3RyYWRkLT5zdHJjaGFuZ2VfbGVuZ3RoID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpOworCXN0cmFkZC0+c3RyY2hhbmdlX2Fzc29j
X2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwlzdHJhZGQtPnN0cmNoYW5nZV9pbnN0cm1z
ID0gbnVtYmVyaW47CisJc3RyYWRkLT5zdHJjaGFuZ2Vfb3V0c3RybXMgPSBudW1iZXJvdXQ7CisJ
U0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdl
X2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisJaWYgKHNjdHBfc2Jz
cGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpIDwgU0NUUF9CVUZf
TEVOKG1fbm90aWZ5KSkgeworCQkvKiBubyBzcGFjZSAqLworCQlzY3RwX21fZnJlZW0obV9ub3Rp
ZnkpOworCQlyZXR1cm47CisJfQorCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KKwljb250cm9sID0g
c2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5j
b250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90
aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAqLworCQlzY3Rw
X21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxlbmd0aCA9IFND
VFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FU
SU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9
IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJICAg
IGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURf
TE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKwordm9pZAorc2N0cF9ub3Rp
Znlfc3RyZWFtX3Jlc2V0X3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHNlbmRp
bmdfdHNuLCB1aW50MzJfdCByZWN2X3RzbiwgaW50IGZsYWcpCit7CisJc3RydWN0IG1idWYgKm1f
bm90aWZ5OworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCXN0cnVjdCBz
Y3RwX2Fzc29jX3Jlc2V0X2V2ZW50ICpzdHJhc29jOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8
CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UKSkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQg
Ki8KKwkJcmV0dXJuOworCX0KKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXpl
b2Yoc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQpLCAwLCBNX05PV0FJVCwgMSwgTVRfREFU
QSk7CisJaWYgKG1fbm90aWZ5ID09IE5VTEwpCisJCS8qIG5vIHNwYWNlIGxlZnQgKi8KKwkJcmV0
dXJuOworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOworCXN0cmFzb2MgPSBtdG9kKG1fbm90
aWZ5LCBzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgKik7CisJbWVtc2V0KHN0cmFzb2Ms
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCkpOworCXN0cmFzb2MtPmFz
c29jcmVzZXRfdHlwZSA9IFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ7CisJc3RyYXNvYy0+YXNzb2Ny
ZXNldF9mbGFncyA9IGZsYWc7CisJc3RyYXNvYy0+YXNzb2NyZXNldF9sZW5ndGggPSBzaXplb2Yo
c3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQpOworCXN0cmFzb2MtPmFzc29jcmVzZXRfYXNz
b2NfaWQ9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJc3RyYXNvYy0+YXNzb2NyZXNldF9sb2Nh
bF90c24gPSBzZW5kaW5nX3RzbjsKKwlzdHJhc29jLT5hc3NvY3Jlc2V0X3JlbW90ZV90c24gPSBy
ZWN2X3RzbjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX3Jlc2V0X2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7CisJaWYg
KHNjdHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpIDwg
U0NUUF9CVUZfTEVOKG1fbm90aWZ5KSkgeworCQkvKiBubyBzcGFjZSAqLworCQlzY3RwX21fZnJl
ZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KKwlj
b250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlf
ZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3Rj
Yi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAq
LworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxl
bmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1f
Tk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRh
aWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsCisJICAgIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBT
Q1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKworCisKK3N0
YXRpYyB2b2lkCitzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgIGludCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKiBsaXN0LCBpbnQgZmxhZykKK3sK
KwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNv
bnRyb2w7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50ICpzdHJyZXNldDsKKwlpbnQg
bGVuOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZO
VCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJCXJldHVybjsKKwl9CisKKwltX25v
dGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFjZSBsZWZ0ICovCisJ
CXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlsZW4gPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSArIChudW1iZXJfZW50cmllcyAqIHNpemVvZih1
aW50MTZfdCkpOworCWlmIChsZW4gPiBNX1RSQUlMSU5HU1BBQ0UobV9ub3RpZnkpKSB7CisJCS8q
IG5ldmVyIGVub3VnaCByb29tICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVy
bjsKKwl9CisJc3RycmVzZXQgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfZXZlbnQgKik7CisJbWVtc2V0KHN0cnJlc2V0LCAwLCBsZW4pOworCXN0cnJlc2V0LT5zdHJy
ZXNldF90eXBlID0gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ7CisJc3RycmVzZXQtPnN0cnJlc2V0
X2ZsYWdzID0gZmxhZzsKKwlzdHJyZXNldC0+c3RycmVzZXRfbGVuZ3RoID0gbGVuOworCXN0cnJl
c2V0LT5zdHJyZXNldF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJaWYgKG51
bWJlcl9lbnRyaWVzKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50
cmllczsgaSsrKSB7CisJCQlzdHJyZXNldC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0gPSBudG9o
cyhsaXN0W2ldKTsKKwkJfQorCX0KKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbGVuOworCVND
VFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKKwlpZiAoc2N0cF9zYnNwYWNlKCZzdGNiLT5h
c29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkp
KSB7CisJCS8qIG5vIHNwYWNlICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVy
bjsKKwl9CisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3Jl
YWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAs
IDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChj
b250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1f
bm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90
IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJ
c2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgICAgICAgICAgICAg
ICBjb250cm9sLAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKwor
CitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9yKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgdWludDE2X3QgZXJyb3IsIHN0cnVjdCBzY3RwX2Vycm9yX2NodW5rICpjaHVuaykKK3sK
KwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmU7
CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7CisJdW5zaWduZWQgaW50IG5v
dGlmX2xlbjsKKwl1aW50MTZfdCBjaHVua19sZW47CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwK
KwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKSkgeworCQlyZXR1cm47CisJfQorCWlmIChjaHVuayAhPSBO
VUxMKSB7CisJCWNodW5rX2xlbiA9IG50b2hzKGNodW5rLT5jaC5jaHVua19sZW5ndGgpOworCQkv
KgorCQkgKiBPbmx5IFNDVFBfQ0hVTktfQlVGRkVSX1NJWkUgYXJlIGd1YXJhbnRlZWQgdG8gYmUK
KwkJICogY29udGlndW91cy4KKwkJICovCisJCWlmIChjaHVua19sZW4gPiBTQ1RQX0NIVU5LX0JV
RkZFUl9TSVpFKSB7CisJCQljaHVua19sZW4gPSBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFOworCQl9
CisJfSBlbHNlIHsKKwkJY2h1bmtfbGVuID0gMDsKKwl9CisJbm90aWZfbGVuID0gKHVuc2lnbmVk
IGludCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcikgKyBjaHVua19sZW4pOworCW1f
bm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7CisJCS8qIFJldHJ5IHdpdGggc21h
bGxlciB2YWx1ZS4gKi8KKwkJbm90aWZfbGVuID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0
IHNjdHBfcmVtb3RlX2Vycm9yKTsKKwkJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
bm90aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChtX25vdGlmeSA9PSBO
VUxMKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBO
VUxMOworCXNyZSA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqKTsK
KwltZW1zZXQoc3JlLCAwLCBub3RpZl9sZW4pOworCXNyZS0+c3JlX3R5cGUgPSBTQ1RQX1JFTU9U
RV9FUlJPUjsKKwlzcmUtPnNyZV9mbGFncyA9IDA7CisJc3JlLT5zcmVfbGVuZ3RoID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7CisJc3JlLT5zcmVfZXJyb3IgPSBlcnJvcjsKKwlz
cmUtPnNyZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJaWYgKG5vdGlmX2xl
biA+IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IpKSB7CisJCW1lbWNweShzcmUtPnNy
ZV9kYXRhLCBjaHVuaywgY2h1bmtfbGVuKTsKKwkJc3JlLT5zcmVfbGVuZ3RoICs9IGNodW5rX2xl
bjsKKwl9CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNyZS0+c3JlX2xlbmd0aDsKKwljb250
cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+
YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCAhPSBOVUxMKSB7CisJCWNvbnRyb2wtPmxlbmd0aCA9
IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElG
SUNBVElPTjsKKwkJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJCWNvbnRyb2wtPnRhaWxf
bWJ1ZiA9IG1fbm90aWZ5OworCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNi
LAorCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkgICAgICAgICAgICAgICAgICAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxE
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCXNjdHBfbV9mcmVlbShtX25vdGlm
eSk7CisJfQorfQorCisKK3ZvaWQKK3NjdHBfdWxwX25vdGlmeSh1aW50MzJfdCBub3RpZmljYXRp
b24sIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICB1aW50MzJfdCBlcnJvciwgdm9pZCAqZGF0
YSwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICkKK3sKKwlp
ZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKKwkgICAgKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpKSB7CisJCS8qIElmIHRoZSBzb2Nr
ZXQgaXMgZ29uZSB3ZSBhcmUgb3V0IG9mIGhlcmUgKi8KKwkJcmV0dXJuOworCX0KKyNpZiAoZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Yuc2Jfc3RhdGUg
JiBTQlNfQ0FOVFJDVk1PUkUpIHsKKyNlbHNlCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19z
dGF0ZSAmIFNTX0NBTlRSQ1ZNT1JFKSB7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NU
UF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2Vy
dChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfQorI2VuZGlmCisJaWYgKChzdGNiLT5h
c29jLnN0YXRlICYgU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkgICAgKHN0Y2ItPmFzb2Mu
c3RhdGUgJiAgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQlpZiAoKG5vdGlmaWNhdGlv
biA9PSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTikgfHwKKwkJICAgIChub3RpZmljYXRpb24g
PT0gU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQKSB8fAorCQkgICAgKG5vdGlmaWNhdGlvbiA9PSBT
Q1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVEKSkgeworCQkJLyogRG9uJ3QgcmVwb3J0IHRo
ZXNlIGluIGZyb250IHN0YXRlcyAqLworCQkJcmV0dXJuOworCQl9CisJfQorCXN3aXRjaCAobm90
aWZpY2F0aW9uKSB7CisJY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19VUDoKKwkJaWYgKHN0Y2ItPmFz
b2MuYXNzb2NfdXBfc2VudCA9PSAwKSB7CisJCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NU
UF9DT01NX1VQLCBzdGNiLCBlcnJvciwgTlVMTCwgMCwgc29fbG9ja2VkKTsKKwkJCXN0Y2ItPmFz
b2MuYXNzb2NfdXBfc2VudCA9IDE7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9u
ZWVkZWQgJiYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9zZW50ID09IDApKSB7CisJCQlzY3RwX25v
dGlmeV9hZGFwdGF0aW9uX2xheWVyKHN0Y2IpOworCQl9CisJCWlmIChzdGNiLT5hc29jLmF1dGhf
c3VwcG9ydGVkID09IDApIHsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVS
X0FVVEgsIHN0Y2IsIDAsCisJCQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKKwkJ
fQorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX0RPV046CisJCXNjdHBfbm90aWZ5
X2Fzc29jX2NoYW5nZShTQ1RQX1NIVVRET1dOX0NPTVAsIHN0Y2IsIGVycm9yLCBOVUxMLCAwLCBz
b19sb2NrZWQpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKHN0Y2ItPnNjdHBf
ZXAtPnJlY3ZfY2FsbGJhY2spIHsKKwkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQkJCXVu
aW9uIHNjdHBfc29ja3N0b3JlIGFkZHI7CisJCQkJc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7CisK
KwkJCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOworCQkJ
CW1lbXNldCgmcmN2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOworCQkJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCXN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQs
IGFkZHIsIE5VTEwsIDAsIHJjdiwgMCwgc3RjYi0+c2N0cF9lcC0+dWxwX2luZm8pOworCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7CisJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCQkJfQorCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElG
WV9JTlRFUkZBQ0VfRE9XTjoKKwkJeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJCQlu
ZXQgPSAoc3RydWN0IHNjdHBfbmV0cyAqKWRhdGE7CisJCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJf
Y2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9VTlJFQUNIQUJMRSwKKwkJCSAgICAoc3RydWN0IHNvY2th
ZGRyICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7CisJCQlicmVhazsKKwkJ
fQorCWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQOgorCQl7CisJCQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisKKwkJCW5ldCA9IChzdHJ1Y3Qgc2N0cF9uZXRzICopZGF0YTsKKwkJCXNjdHBf
bm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RjYiwgU0NUUF9BRERSX0FWQUlMQUJMRSwKKwkJCSAg
ICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7
CisJCQlicmVhazsKKwkJfQorCWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRDoK
KwkJeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJCQluZXQgPSAoc3RydWN0IHNjdHBf
bmV0cyAqKWRhdGE7CisJCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBf
QUREUl9DT05GSVJNRUQsCisJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2Fk
ZHIsIGVycm9yLCBzb19sb2NrZWQpOworCQkJYnJlYWs7CisJCX0KKwljYXNlIFNDVFBfTk9USUZZ
X1NQRUNJQUxfU1BfRkFJTDoKKwkJc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQyKHN0Y2IsIGVycm9y
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9w
ZW5kaW5nICopZGF0YSwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9T
RU5UX0RHX0ZBSUw6CisJCXNjdHBfbm90aWZ5X3NlbmRfZmFpbGVkKHN0Y2IsIDEsIGVycm9yLAor
CQkgICAgKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMOgorCQlzY3RwX25vdGlmeV9zZW5k
X2ZhaWxlZChzdGNiLCAwLCBlcnJvciwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNlIFND
VFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTjoKKwkJeworCQkJdWludDMyX3Qg
dmFsOworCQkJdmFsID0gKigodWludDMyX3QgKilkYXRhKTsKKworCQkJc2N0cF9ub3RpZnlfcGFy
dGlhbF9kZWxpdmVyeV9pbmRpY2F0aW9uKHN0Y2IsIGVycm9yLCB2YWwsIHNvX2xvY2tlZCk7CisJ
CWJyZWFrOworCQl9CisJY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRDoKKwkJaWYg
KCgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9DT09L
SUVfV0FJVCkgfHwKKwkJICAgICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykg
PT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hh
bmdlKFNDVFBfQ0FOVF9TVFJfQVNTT0MsIHN0Y2IsIGVycm9yLCBkYXRhLCAwLCBzb19sb2NrZWQp
OworCQl9IGVsc2UgeworCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ09NTV9MT1NU
LCBzdGNiLCBlcnJvciwgZGF0YSwgMCwgc29fbG9ja2VkKTsKKwkJfQorCQlicmVhazsKKwljYXNl
IFNDVFBfTk9USUZZX0FTU09DX1JFTV9BQk9SVEVEOgorCQlpZiAoKChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkgICAg
KChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJ
RV9FQ0hPRUQpKSB7CisJCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DQU5UX1NUUl9B
U1NPQywgc3RjYiwgZXJyb3IsIGRhdGEsIDEsIHNvX2xvY2tlZCk7CisJCX0gZWxzZSB7CisJCQlz
Y3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DT01NX0xPU1QsIHN0Y2IsIGVycm9yLCBkYXRh
LCAxLCBzb19sb2NrZWQpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfQVNTT0Nf
UkVTVEFSVDoKKwkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfUkVTVEFSVCwgc3RjYiwg
ZXJyb3IsIE5VTEwsIDAsIHNvX2xvY2tlZCk7CisJCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9y
dGVkID09IDApIHsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVSX0FVVEgs
IHN0Y2IsIDAsCisJCQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKKwkJfQorCQli
cmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9TRU5EOgorCQlzY3RwX25vdGlmeV9z
dHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksIFNDVFBfU1RSRUFN
X1JFU0VUX09VVEdPSU5HX1NTTik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfU1RSX1JF
U0VUX1JFQ1Y6CisJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50
MTZfdCAqKSBkYXRhKSwgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VUOgorCQlzY3RwX25vdGlmeV9zdHJl
YW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFN
X1JFU0VUX0ZBSUxFRCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9E
RU5JRURfT1VUOgorCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWlu
dDE2X3QgKikgZGF0YSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1f
UkVTRVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCkpOworCQlicmVhazsK
KwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfSU46CisJCXNjdHBfbm90aWZ5X3N0
cmVhbV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50MTZfdCAqKSBkYXRhKSwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgIChTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR3xTQ1RQX1NUUkVBTV9S
RVNFVF9GQUlMRUQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVO
SUVEX0lOOgorCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2
X3QgKikgZGF0YSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVT
RVRfSU5DT01JTkd8U0NUUF9TVFJFQU1fUkVTRVRfREVOSUVEKSk7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9OT1RJRllfQVNDT05GX0FERF9JUDoKKwkJc2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5n
ZShzdGNiLCBTQ1RQX0FERFJfQURERUQsIGRhdGEsCisJCSAgICBlcnJvciwgc29fbG9ja2VkKTsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9BU0NPTkZfREVMRVRFX0lQOgorCQlzY3RwX25v
dGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9SRU1PVkVELCBkYXRhLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOworCQlicmVhazsK
KwljYXNlIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWToKKwkJc2N0cF9ub3RpZnlfcGVl
cl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfTUFERV9QUklNLCBkYXRhLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNl
IFNDVFBfTk9USUZZX1BFRVJfU0hVVERPV046CisJCXNjdHBfbm90aWZ5X3NodXRkb3duX2V2ZW50
KHN0Y2IpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tFWToKKwkJc2N0
cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksIGVycm9yLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKHVpbnRwdHJfdClkYXRhLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNl
IFNDVFBfTk9USUZZX0FVVEhfRlJFRV9LRVk6CisJCXNjdHBfbm90aWZ5X2F1dGhlbnRpY2F0aW9u
KHN0Y2IsIFNDVFBfQVVUSF9GUkVFX0tFWSwgZXJyb3IsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh1aW50MTZfdCkodWludHB0cl90KWRhdGEsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNvX2xvY2tlZCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfTk9fUEVFUl9B
VVRIOgorCQlzY3RwX25vdGlmeV9hdXRoZW50aWNhdGlvbihzdGNiLCBTQ1RQX0FVVEhfTk9fQVVU
SCwgZXJyb3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkodWludHB0
cl90KWRhdGEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9OT1RJRllfU0VOREVSX0RSWToKKwkJc2N0cF9ub3RpZnlfc2VuZGVy
X2RyeV9ldmVudChzdGNiLCBzb19sb2NrZWQpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZ
X1JFTU9URV9FUlJPUjoKKwkJc2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9yKHN0Y2IsIGVycm9yLCBk
YXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VUSUwxLCAi
JXM6IHVua25vd24gbm90aWZpY2F0aW9uICV4aCAoJXUpXG4iLAorCQkJX19mdW5jX18sIG5vdGlm
aWNhdGlvbiwgbm90aWZpY2F0aW9uKTsKKwkJYnJlYWs7CisJfQkJCS8qIGVuZCBzd2l0Y2ggKi8K
K30KKwordm9pZAorc2N0cF9yZXBvcnRfYWxsX291dGJvdW5kKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgdWludDE2X3QgZXJyb3IsIGludCBob2xkc19sb2NrLCBpbnQgc29fbG9ja2VkCisjaWYgIWRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBT
Q1RQX1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7CisJc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3As
ICpuc3A7CisJaW50IGk7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJ
YXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRf
VE9fQkVfRlJFRUQpIHsKKwkJLyogYWxyZWFkeSBiZWluZyBmcmVlZCAqLworCQlyZXR1cm47CisJ
fQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2Nr
X2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91
bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKKwl9CisjZW5kaWYKKwlp
ZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09O
RSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfQUxMR09ORSkgfHwKKwkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURf
U09DS0VUKSkgeworCQlyZXR1cm47CisJfQorCS8qIG5vdyB0aHJvdWdoIGFsbCB0aGUgZ3VuayBm
cmVlaW5nIGNodW5rcyAqLworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VO
RF9MT0NLKHN0Y2IpOworCX0KKwkvKiBzZW50IHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLworCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGsp
IHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJ
CWFzb2MtPnNlbnRfcXVldWVfY250LS07CisJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JB
TV9OUl9BQ0tFRCkgeworCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNo
dW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNp
ZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0gZWxzZSB7CisJ
CQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMu
ZGF0YS5zaWQpOworI2VuZGlmCisJCQl9CisJCX0KKwkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7
CisJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKKwkJCXNjdHBfdWxw
X25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJCQkgICAgICAgICAgICAg
ICAgZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKKwkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQlzY3Rw
X21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJfQorCQl9CisJ
CXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKKwkJLypzYV9pZ25vcmUg
RlJFRURfTUVNT1JZKi8KKwl9CisJLyogcGVuZGluZyBzZW5kIHF1ZXVlIFNIT1VMRCBiZSBlbXB0
eSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25l
eHQsIG5jaGspIHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBf
bmV4dCk7CisJCWFzb2MtPnNlbmRfcXVldWVfY250LS07CisJCWlmIChhc29jLT5zdHJtb3V0W2No
ay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJYXNvYy0+c3RybW91
dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFO
VFMKKwkJfSBlbHNlIHsKKwkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lk
ICV1LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsKKyNlbmRpZgorCQl9CisJCWlmIChjaGstPmRhdGEg
IT0gTlVMTCkgeworCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIGNoaywgMSk7CisJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJCQkg
ICAgICAgICAgICAgICAgZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKKwkJCWlmIChjaGstPmRhdGEp
IHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQljaGstPmRhdGEgPSBOVUxMOwor
CQkJfQorCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKKwkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJZm9yIChpID0gMDsgaSA8IGFzb2MtPnN0
cmVhbW91dGNudDsgaSsrKSB7CisJCS8qIEZvciBlYWNoIHN0cmVhbSAqLworCQlvdXRzID0gJmFz
b2MtPnN0cm1vdXRbaV07CisJCS8qIGNsZWFuIHVwIGFueSBzZW5kcyB0aGVyZSAqLworCQlUQUlM
UV9GT1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNwKSB7CisJCQlhdG9t
aWNfc3VidHJhY3RfaW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKKwkJCVRBSUxRX1JF
TU9WRSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rp
b25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91dHMsIHNwLCBob2xk
c19sb2NrKTsKKwkJCXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2MsIHNwKTsKKwkJCWlm
IChzcC0+ZGF0YSkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQ
X0ZBSUwsIHN0Y2IsCisJCQkJCQllcnJvciwgKHZvaWQgKilzcCwgc29fbG9ja2VkKTsKKwkJCQlp
ZiAoc3AtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKKwkJCQkJc3AtPmRh
dGEgPSBOVUxMOworCQkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCQkJc3AtPmxlbmd0aCA9
IDA7CisJCQkJfQorCQkJfQorCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoc3AtPm5ldCk7CisJCQkJc3AtPm5ldCA9IE5VTEw7CisJCQl9CisJCQkvKiBGcmVlIHRo
ZSBjaHVuayAqLworCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOwor
CQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJfQorCX0KKworCWlmIChob2xkc19sb2Nr
ID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorfQorCit2b2lkCitz
Y3RwX2Fib3J0X25vdGlmaWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgZnJv
bV9wZWVyLCB1aW50MTZfdCBlcnJvciwKKwkJCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9y
dCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICkKK3sKKwlp
ZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2It
PnNjdHBfZXApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08o
c3RjYi0+c2N0cF9lcCkpOworCX0KKyNlbmRpZgorCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJICAgICgoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCisJICAgICAoc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpKSB7CisJCXN0
Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQ7CisJ
fQorCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSB8fAorCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RB
VEVfQ0xPU0VEX1NPQ0tFVCkpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBUZWxsIHRoZW0gd2UgbG9z
dCB0aGUgYXNvYyAqLworCXNjdHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdGNiLCBlcnJvciwgMSwg
c29fbG9ja2VkKTsKKwlpZiAoZnJvbV9wZWVyKSB7CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9BU1NPQ19SRU1fQUJPUlRFRCwgc3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOwor
CX0gZWxzZSB7CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRF
RCwgc3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOworCX0KK30KKwordm9pZAorc2N0cF9h
Ym9ydF9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVu
LAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNv
Y2thZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwg
c3RydWN0IG1idWYgKm9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAg
ICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKKyNlbmRp
ZgorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQp
Cit7CisJdWludDMyX3QgdnRhZzsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisJdnRh
ZyA9IDA7CisJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQl2dGFnID0gc3RjYi0+YXNvYy5wZWVyX3Z0
YWc7CisJCXZyZl9pZCA9IHN0Y2ItPmFzb2MudnJmX2lkOworCX0KKwlzY3RwX3NlbmRfYWJvcnQo
bSwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIHZ0YWcsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVt
LAorI2VuZGlmCisJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJaWYgKHN0Y2IgIT0g
TlVMTCkgeworCQkvKiBXZSBoYXZlIGEgVENCIHRvIGFib3J0LCBzZW5kIG5vdGlmaWNhdGlvbiB0
b28gKi8KKwkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMCwgMCwgTlVMTCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9S
VEVEOworCQkvKiBPaywgbm93IGxldHMgZnJlZSBpdCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlzbyA9IFNDVFBfSU5QX1NPKGlu
cCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENCX0xP
Q0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KyNlbmRpZgorCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7CisJCWlm
ICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKKwkJ
ICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9S
RUNFSVZFRCkpIHsKKwkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsK
KwkJfQorCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9D
LAorCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0Nf
NCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwl9Cit9CisjaWZkZWYg
U0NUUF9BU09DTE9HX09GX1RTTlMKK3ZvaWQKK3NjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisjaWZkZWYgTk9TSVlfUFJJTlRTCisJaW50IGk7CisJU0NU
UF9QUklOVEYoIkxhc3QgZXAgcmVhc29uOiV4XG4iLCBzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0
X2NvZGUpOworCVNDVFBfUFJJTlRGKCJJTiBib3VuZCBUU04gbG9nLWFhYVxuIik7CisJaWYgKChz
dGNiLT5hc29jLnRzbl9pbl9hdCA9PSAwKSAmJiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCA9
PSAwKSkgeworCQlTQ1RQX1BSSU5URigiTm9uZSByY3ZkXG4iKTsKKwkJZ290byBub25lX2luOwor
CX0KKwlpZiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCkgeworCQlmb3IgKGkgPSBzdGNiLT5h
c29jLnRzbl9pbl9hdDsgaSA8IFNDVFBfVFNOX0xPR19TSVpFOyBpKyspIHsKKwkJCVNDVFBfUFJJ
TlRGKCJUU046JXggc3RybTolZCBzZXE6JWQgZmxhZ3M6JXggc3o6JWRcbiIsCisJCQkJICAgIHN0
Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnRzbiwKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2db
aV0uc3RybSwKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc2VxLAorCQkJCSAgICBz
dGNiLT5hc29jLmluX3RzbmxvZ1tpXS5mbGdzLAorCQkJCSAgICBzdGNiLT5hc29jLmluX3Rzbmxv
Z1tpXS5zeik7CisJCX0KKwl9CisJaWYgKHN0Y2ItPmFzb2MudHNuX2luX2F0KSB7CisJCWZvciAo
aSA9IDA7IGkgPCBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSsrKSB7CisJCQlTQ1RQX1BSSU5URigi
VFNOOiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAorCQkJCSAgICBzdGNiLT5h
c29jLmluX3RzbmxvZ1tpXS50c24sCisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnN0
cm0sCisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnNlcSwKKwkJCQkgICAgc3RjYi0+
YXNvYy5pbl90c25sb2dbaV0uZmxncywKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0u
c3opOworCQl9CisJfQorIG5vbmVfaW46CisJU0NUUF9QUklOVEYoIk9VVCBib3VuZCBUU04gbG9n
LWFhYVxuIik7CisJaWYgKChzdGNiLT5hc29jLnRzbl9vdXRfYXQgPT0gMCkgJiYKKwkgICAgKHN0
Y2ItPmFzb2MudHNuX291dF93cmFwcGVkID09IDApKSB7CisJCVNDVFBfUFJJTlRGKCJOb25lIHNl
bnRcbiIpOworCX0KKwlpZiAoc3RjYi0+YXNvYy50c25fb3V0X3dyYXBwZWQpIHsKKwkJZm9yIChp
ID0gc3RjYi0+YXNvYy50c25fb3V0X2F0OyBpIDwgU0NUUF9UU05fTE9HX1NJWkU7IGkrKykgewor
CQkJU0NUUF9QUklOVEYoIlRTTjoleCBzdHJtOiVkIHNlcTolZCBmbGFnczoleCBzejolZFxuIiwK
KwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnRzbiwKKwkJCQkgICAgc3RjYi0+YXNv
Yy5vdXRfdHNubG9nW2ldLnN0cm0sCisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5z
ZXEsCisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5mbGdzLAorCQkJCSAgICBzdGNi
LT5hc29jLm91dF90c25sb2dbaV0uc3opOworCQl9CisJfQorCWlmIChzdGNiLT5hc29jLnRzbl9v
dXRfYXQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2MudHNuX291dF9hdDsgaSsrKSB7
CisJCQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4i
LAorCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0udHNuLAorCQkJCSAgICBzdGNiLT5h
c29jLm91dF90c25sb2dbaV0uc3RybSwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ld
LnNlcSwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLmZsZ3MsCisJCQkJICAgIHN0
Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5zeik7CisJCX0KKwl9CisjZW5kaWYKK30KKyNlbmRpZgor
Cit2b2lkCitzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IG1idWYgKm9wX2VyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZAor
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlz
dHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhpbnApOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xv
Y2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fz
c2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlpZiAoc3RjYiA9PSBOVUxMKSB7
CisJCS8qIEdvdCB0byBoYXZlIGEgVENCICovCisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJaWYgKExJU1RfRU1QVFkoJmlucC0+c2N0cF9h
c29jX2xpc3QpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJaWYgKCFzb19sb2NrZWQp
IHsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJfQorI2VuZGlmCisJCQkJc2N0
cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCisJCQkJCQlTQ1RQ
X0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJ
aWYgKCFzb19sb2NrZWQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQl9
CisjZW5kaWYKKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJc3RjYi0+YXNvYy5z
dGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOworCX0KKwkvKiBub3RpZnkgdGhlIHBlZXIg
Ki8KKwlzY3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2Vyciwgc29fbG9ja2VkKTsKKwlTQ1RQ
X1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7CisJaWYgKChTQ1RQX0dFVF9TVEFU
RSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCSAgICAoU0NUUF9HRVRfU1RB
VEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCVND
VFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwl9CisJLyogbm90aWZ5IHRo
ZSB1bHAgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSA9PSAwKSB7CisJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEws
IHNvX2xvY2tlZCk7CisJfQorCS8qIG5vdyBmcmVlIHRoZSBhc29jICovCisjaWZkZWYgU0NUUF9B
U09DTE9HX09GX1RTTlMKKwlzY3RwX3ByaW50X291dF90cmFja19sb2coc3RjYik7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
KwlpZiAoIXNvX2xvY2tlZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEp
OworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJfQorI2VuZGlmCisJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwg
c3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBVVElMICsgU0NUUF9MT0NfNSk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJaWYgKCFzb19sb2NrZWQpIHsKKwkJU0NUUF9TT0NL
RVRfVU5MT0NLKHNvLCAxKTsKKwl9CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9oYW5kbGVfb290
YihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAg
ICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAorICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAg
ICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwg
dWludDE2X3QgZmlibnVtLAorI2VuZGlmCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9p
ZCwgdWludDE2X3QgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1
ZjsKKwl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKKwlpbnQgY29udGFpbnNfaW5pdF9jaHVuazsK
KworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19vdXRvZnRoZWJsdWUpOworCS8qIEdl
bmVyYXRlIGEgVE8gYWRkcmVzcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLworCWlmIChpbnAgJiYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgeworCQlpZiAo
TElTVF9FTVBUWSgmaW5wLT5zY3RwX2Fzb2NfbGlzdCkpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwkJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJ
CXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAorCQkJCQlT
Q1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJfQor
CX0KKwljb250YWluc19pbml0X2NodW5rID0gMDsKKwljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCSAgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3Qg
KikgJiBjaHVua19idWYpOworCXdoaWxlIChjaCAhPSBOVUxMKSB7CisJCWNoa19sZW5ndGggPSBu
dG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkg
eworCQkJLyogYnJlYWsgdG8gYWJvcnQgbGFuZCAqLworCQkJYnJlYWs7CisJCX0KKwkJc3dpdGNo
IChjaC0+Y2h1bmtfdHlwZSkgeworCQljYXNlIFNDVFBfSU5JVDoKKwkJCWNvbnRhaW5zX2luaXRf
Y2h1bmsgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKKwkJCS8q
IHdlIGRvbid0IHJlc3BvbmQgdG8gcGt0LWRyb3BwZWQgKi8KKwkJCXJldHVybjsKKwkJY2FzZSBT
Q1RQX0FCT1JUX0FTU09DSUFUSU9OOgorCQkJLyogd2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIEFC
T1JUIHRvIGFuIEFCT1JUICovCisJCQlyZXR1cm47CisJCWNhc2UgU0NUUF9TSFVURE9XTl9DT01Q
TEVURToKKwkJCS8qCisJCQkgKiB3ZSBpZ25vcmUgaXQgc2luY2Ugd2UgYXJlIG5vdCB3YWl0aW5n
IGZvciBpdCBhbmQKKwkJCSAqIHBlZXIgaXMgZ29uZQorCQkJICovCisJCQlyZXR1cm47CisJCWNh
c2UgU0NUUF9TSFVURE9XTl9BQ0s6CisJCQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUyKHNy
YywgZHN0LCBzaCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJcmV0dXJuOworCQlk
ZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5n
dGgpOworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zm
c2V0LAorCQkgICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKKwl9CisJ
aWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9PSAwKSB8fAorCSAgICAoKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09IDEpICYmCisJICAgICAoY29udGFpbnNf
aW5pdF9jaHVuayA9PSAwKSkpIHsKKwkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgc3JjLCBk
c3QsIHNoLCAwLCBjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJfQorfQorCisvKgorICogY2hlY2sgdGhlIGluYm91bmQgZGF0
YWdyYW0gdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbiBhYm9ydCBpbnNpZGUgaXQsCisgKiBp
ZiB0aGVyZSBpcyByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KKyAqLworaW50CitzY3RwX2lzX3Ro
ZXJlX2FuX2Fib3J0X2hlcmUoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHVpbnQzMl90ICog
dnRhZ2ZpbGwpCit7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0cnVjdCBzY3RwX2lu
aXRfY2h1bmsgKmluaXRfY2hrLCBjaHVua19idWY7CisJaW50IG9mZnNldDsKKwl1bnNpZ25lZCBp
bnQgY2hrX2xlbmd0aDsKKworCW9mZnNldCA9IGlwaGxlbiArIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cik7CisJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNl
dCwgc2l6ZW9mKCpjaCksCisJICAgICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKKwl3aGlsZSAo
Y2ggIT0gTlVMTCkgeworCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7CisJ
CWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKCpjaCkpIHsKKwkJCS8qIHBhY2tldCBpcyBwcm9iYWJs
eSBjb3JydXB0ICovCisJCQlicmVhazsKKwkJfQorCQkvKiB3ZSBzZWVtIHRvIGJlIG9rLCBpcyBp
dCBhbiBhYm9ydD8gKi8KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQUJPUlRfQVNTT0NJ
QVRJT04pIHsKKwkJCS8qIHllcCwgdGVsbCB0aGVtICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJ
CWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJCS8qIG5lZWQgdG8g
dXBkYXRlIHRoZSBWdGFnICovCisJCQlpbml0X2NoayA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5r
ICopc2N0cF9tX2dldHB0cihtLAorCQkJICAgIG9mZnNldCwgc2l6ZW9mKCppbml0X2NoayksICh1
aW50OF90ICopICYgY2h1bmtfYnVmKTsKKwkJCWlmIChpbml0X2NoayAhPSBOVUxMKSB7CisJCQkJ
KnZ0YWdmaWxsID0gbnRvaGwoaW5pdF9jaGstPmluaXQuaW5pdGlhdGVfdGFnKTsKKwkJCX0KKwkJ
fQorCQkvKiBOb3BlLCBtb3ZlIHRvIHRoZSBuZXh0IGNodW5rICovCisJCW9mZnNldCArPSBTQ1RQ
X1NJWkUzMihjaGtfbGVuZ3RoKTsKKwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3Rw
X21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJICAgIHNpemVvZigqY2gpLCAodWludDhfdCAqKSAmIGNo
dW5rX2J1Zik7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBjdXJyZW50bHkgKDIvMDIp
LCBpZmFfYWRkciBlbWJlZHMgc2NvcGVfaWQncyBhbmQgZG9uJ3QgaGF2ZSBzaW42X3Njb3BlX2lk
CisgKiBzZXQgKGkuZS4gaXQncyAwKSBzbywgY3JlYXRlIHRoaXMgZnVuY3Rpb24gdG8gY29tcGFy
ZSBsaW5rIGxvY2FsIHNjb3BlcworICovCisjaWZkZWYgSU5FVDYKK3VpbnQzMl90CitzY3RwX2lz
X3NhbWVfc2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjEsIHN0cnVjdCBzb2NrYWRkcl9p
bjYgKmFkZHIyKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKl9fVXNlcnNw
YWNlX18gUmV0dXJuaW5nIDEgaGVyZSBhbHdheXMgKi8KKyNlbmRpZgorI2lmIGRlZmluZWQoU0NU
UF9FTUJFRERFRF9WNl9TQ09QRSkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGEsIGI7CisKKwkvKiBz
YXZlIGNvcGllcyAqLworCWEgPSAqYWRkcjE7CisJYiA9ICphZGRyMjsKKworCWlmIChhLnNpbjZf
c2NvcGVfaWQgPT0gMCkKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJaWYgKHNhNl9yZWNvdmVyc2NvcGUo
JmEpKSB7CisjZWxzZQorCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYSwgJmEuc2luNl9hZGRyLCBO
VUxMKSkgeworI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLworCQkJLyogY2FuJ3QgZ2V0IHNjb3Bl
LCBzbyBjYW4ndCBtYXRjaCAqLworCQkJcmV0dXJuICgwKTsKKwkJfQorCWlmIChiLnNpbjZfc2Nv
cGVfaWQgPT0gMCkKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoJmIp
KSB7CisjZWxzZQorCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYiwgJmIuc2luNl9hZGRyLCBOVUxM
KSkgeworI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLworCQkJLyogY2FuJ3QgZ2V0IHNjb3BlLCBz
byBjYW4ndCBtYXRjaCAqLworCQkJcmV0dXJuICgwKTsKKwkJfQorCWlmIChhLnNpbjZfc2NvcGVf
aWQgIT0gYi5zaW42X3Njb3BlX2lkKQorCQlyZXR1cm4gKDApOworI2Vsc2UKKwlpZiAoYWRkcjEt
PnNpbjZfc2NvcGVfaWQgIT0gYWRkcjItPnNpbjZfc2NvcGVfaWQpCisJCXJldHVybiAoMCk7Cisj
ZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCisJcmV0dXJuICgxKTsKK30KKwor
I2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKy8qCisgKiByZXR1cm5zIGEgc29j
a2FkZHJfaW42IHdpdGggZW1iZWRkZWQgc2NvcGUgcmVjb3ZlcmVkIGFuZCByZW1vdmVkCisgKi8K
K3N0cnVjdCBzb2NrYWRkcl9pbjYgKgorc2N0cF9yZWNvdmVyX3Njb3BlKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKmFkZHIsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnN0b3JlKQoreworCS8qIGNoZWNrIGFu
ZCBzdHJpcCBlbWJlZGRlZCBzY29wZSBqdW5rICovCisJaWYgKGFkZHItPnNpbjZfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2Fk
ZHIpKSB7CisJCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7CisJCQkJKnN0b3JlID0g
KmFkZHI7CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJaWYgKCFzYTZfcmVjb3ZlcnNjb3BlKHN0b3Jl
KSkgeworI2Vsc2UKKwkJCQlpZiAoIWluNl9yZWNvdmVyc2NvcGUoc3RvcmUsICZzdG9yZS0+c2lu
Nl9hZGRyLAorCQkJCSAgICBOVUxMKSkgeworI2VuZGlmIC8qIFNDVFBfS0FNRSAqLworCQkJCQkv
KiB1c2UgdGhlIHJlY292ZXJlZCBzY29wZSAqLworCQkJCQlhZGRyID0gc3RvcmU7CisJCQkJfQor
CQkJfSBlbHNlIHsKKwkJCQkvKiBlbHNlLCByZXR1cm4gdGhlIG9yaWdpbmFsICJ0byIgYWRkciAq
LworCQkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIpOworCQkJfQorCQl9CisJfQor
CXJldHVybiAoYWRkcik7Cit9CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwor
I2VuZGlmCisKKy8qCisgKiBhcmUgdGhlIHR3byBhZGRyZXNzZXMgdGhlIHNhbWU/ICBjdXJyZW50
bHkgYSAic2NvcGVsZXNzIiBjaGVjayByZXR1cm5zOiAxCisgKiBpZiBzYW1lLCAwIGlmIG5vdAor
ICovCitpbnQKK3NjdHBfY21wYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwgc3RydWN0IHNvY2th
ZGRyICpzYTIpCit7CisKKwkvKiBtdXN0IGJlIHZhbGlkICovCisJaWYgKHNhMSA9PSBOVUxMIHx8
IHNhMiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJLyogbXVzdCBiZSB0aGUgc2FtZSBmYW1p
bHkgKi8KKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCisJCXJldHVybiAo
MCk7CisKKwlzd2l0Y2ggKHNhMS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFG
X0lORVQ2OgorCXsKKwkJLyogSVB2NiBhZGRyZXNzZXMgKi8KKwkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNl8xLCAqc2luNl8yOworCisJCXNpbjZfMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
c2ExOworCQlzaW42XzIgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKKwkJcmV0dXJuIChT
Q1RQNl9BUkVfQUREUl9FUVVBTChzaW42XzEsCisJCSAgICBzaW42XzIpKTsKKwl9CisjZW5kaWYK
KyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJLyogSVB2NCBhZGRyZXNzZXMgKi8K
KwkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fMSwgKnNpbl8yOworCisJCXNpbl8xID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKXNhMTsKKwkJc2luXzIgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2Ey
OworCQlyZXR1cm4gKHNpbl8xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luXzItPnNpbl9hZGRyLnNf
YWRkcik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZf
Q09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubl8xLCAqc2Nvbm5fMjsKKwor
CQlzY29ubl8xID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2ExOworCQlzY29ubl8yID0gKHN0
cnVjdCBzb2NrYWRkcl9jb25uICopc2EyOworCQlyZXR1cm4gKHNjb25uXzEtPnNjb25uX2FkZHIg
PT0gc2Nvbm5fMi0+c2Nvbm5fYWRkcik7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogd2Ug
ZG9uJ3QgZG8gdGhlc2UuLi4gKi8KKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBf
cHJpbnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworI2lmZGVmIElORVQ2CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJY2hh
ciBpcDZidWZbSU5FVDZfQUREUlNUUkxFTl07CisjZW5kaWYKKyNlbmRpZgorCisJc3dpdGNoIChz
YS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilzYTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBfUFJJTlRGKCJJUHY2IGFk
ZHJlc3M6ICV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4OnBvcnQ6JWQgc2NvcGU6JXVcbiIsCisJCQkg
ICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlswXSksCisJCQkgICAgbnRvaHMoc2lu
Ni0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRy
LnM2X2FkZHIxNlsyXSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsz
XSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls0XSksCisJCQkgICAg
bnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls1XSksCisJCQkgICAgbnRvaHMoc2luNi0+
c2luNl9hZGRyLnM2X2FkZHIxNls2XSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2
X2FkZHIxNls3XSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9wb3J0KSwKKwkJCSAgICBzaW42
LT5zaW42X3Njb3BlX2lkKTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJlc3M6ICVz
OnBvcnQ6JWQgc2NvcGU6JXVcbiIsCisJCQkgICAgaXA2X3NwcmludGYoaXA2YnVmLCAmc2luNi0+
c2luNl9hZGRyKSwKKwkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAorCQkJICAgIHNpbjYt
PnNpbjZfc2NvcGVfaWQpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoIklQdjYgYWRkcmVzczogJXM6
cG9ydDolZCBzY29wZToldVxuIiwKKwkJCSAgICBpcDZfc3ByaW50Zigmc2luNi0+c2luNl9hZGRy
KSwKKwkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAorCQkJICAgIHNpbjYtPnNpbjZfc2Nv
cGVfaWQpOworI2VuZGlmCisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5F
VAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQl1bnNp
Z25lZCBjaGFyICpwOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwkJcCA9
ICh1bnNpZ25lZCBjaGFyICopJnNpbi0+c2luX2FkZHI7CisJCVNDVFBfUFJJTlRGKCJJUHY0IGFk
ZHJlc3M6ICV1LiV1LiV1LiV1OiVkXG4iLAorCQkJICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10s
IG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9j
b25uICpzY29ubjsKKworCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOworCQlT
Q1RQX1BSSU5URigiQUZfQ09OTiBhZGRyZXNzOiAlcFxuIiwgc2Nvbm4tPnNjb25uX2FkZHIpOwor
CQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlTQ1RQX1BSSU5URigiP1xuIik7CisJ
CWJyZWFrOworCX0KK30KKwordm9pZAorc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAo
c3RydWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsCisgICAgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19p
bnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIGludCB3YWl0ZmxhZ3MpCit7CisJ
LyoKKwkgKiBnbyB0aHJvdWdoIG91ciBvbGQgSU5QIGFuZCBwdWxsIG9mZiBhbnkgY29udHJvbCBz
dHJ1Y3R1cmVzIHRoYXQKKwkgKiBiZWxvbmcgdG8gc3RjYiBhbmQgbW92ZSB0aGVuIHRvIHRoZSBu
ZXcgaW5wLgorCSAqLworCXN0cnVjdCBzb2NrZXQgKm9sZF9zbywgKm5ld19zbzsKKwlzdHJ1Y3Qg
c2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jdGw7CisJc3RydWN0IHNjdHBfcmVhZGhl
YWQgdG1wX3F1ZXVlOworCXN0cnVjdCBtYnVmICptOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
IHx8IGRlZmluZWQoX19BUFBMRV9fKQorCWludCBlcnJvciA9IDA7CisjZW5kaWYKKworCW9sZF9z
byA9IG9sZF9pbnAtPnNjdHBfc29ja2V0OworCW5ld19zbyA9IG5ld19pbnAtPnNjdHBfc29ja2V0
OworCVRBSUxRX0lOSVQoJnRtcF9xdWV1ZSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPCA3MDAwMDAKKwlTT0NLQlVGX0xPQ0soJihvbGRfc28tPnNvX3JjdikpOworI2Vu
ZGlmCisJZXJyb3IgPSBzYmxvY2soJm9sZF9zby0+c29fcmN2LCB3YWl0ZmxhZ3MpOworI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwCisJU09DS0JV
Rl9VTkxPQ0soJihvbGRfc28tPnNvX3JjdikpOworI2VuZGlmCisJaWYgKGVycm9yKSB7CisJCS8q
IEdhaywgY2FuJ3QgZ2V0IHNibG9jaywgd2UgaGF2ZSBhIHByb2JsZW0uCisJCSAqIGRhdGEgd2ls
bCBiZSBsZWZ0IHN0cmFuZGVkLi4gYW5kIHdlCisJCSAqIGRvbid0IGRhcmUgbG9vayBhdCBpdCBz
aW5jZSB0aGUKKwkJICogb3RoZXIgdGhyZWFkIG1heSBiZSByZWFkaW5nIHNvbWV0aGluZy4KKwkJ
ICogT2ggd2VsbCwgaXRzIGEgc2NyZXdlZCB1cCBhcHAgdGhhdCBkb2VzCisJCSAqIGEgcGVlbG9m
ZiBPUiBhIGFjY2VwdCB3aGlsZSByZWFkaW5nCisJCSAqIGZyb20gdGhlIG1haW4gc29ja2V0Li4u
IGFjdHVhbGx5IGl0cworCQkgKiBvbmx5IHRoZSBwZWVsb2ZmKCkgY2FzZSwgc2luY2UgSSB0aGlu
aworCQkgKiByZWFkIHdpbGwgZmFpbCBvbiBhIGxpc3RlbmluZyBzb2NrZXQuLgorCQkgKi8KKwkJ
cmV0dXJuOworCX0KKyNlbmRpZgorCS8qIGxvY2sgdGhlIHNvY2tldCBidWZmZXJzICovCisJU0NU
UF9JTlBfUkVBRF9MT0NLKG9sZF9pbnApOworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAm
b2xkX2lucC0+cmVhZF9xdWV1ZSwgbmV4dCwgbmN0bCkgeworCQkvKiBQdWxsIG9mZiBhbGwgZm9y
IG91dCB0YXJnZXQgc3RjYiAqLworCQlpZiAoY29udHJvbC0+c3RjYiA9PSBzdGNiKSB7CisJCQkv
KiByZW1vdmUgaXQgd2Ugd2FudCBpdCAqLworCQkJVEFJTFFfUkVNT1ZFKCZvbGRfaW5wLT5yZWFk
X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCVRBSUxRX0lOU0VSVF9UQUlMKCZ0bXBfcXVldWUs
IGNvbnRyb2wsIG5leHQpOworCQkJbSA9IGNvbnRyb2wtPmRhdGE7CisJCQl3aGlsZSAobSkgewor
CQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfc2Jsb2coJm9sZF9zby0+c29fcmN2LCBjb250cm9s
LT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsU0NUUF9CVUZfTEVO
KG0pKTsKKwkJCQl9CisJCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgc3RjYiwgJm9sZF9zby0+c29f
cmN2LCBtKTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX3NibG9nKCZvbGRfc28tPnNvX3Jj
diwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQs
IDApOworCQkJCX0KKwkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJCX0KKwkJfQorCX0KKwlT
Q1RQX0lOUF9SRUFEX1VOTE9DSyhvbGRfaW5wKTsKKwkvKiBSZW1vdmUgdGhlIHNiLWxvY2sgb24g
dGhlIG9sZCBzb2NrZXQgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDcwMDAwMAorCVNPQ0tCVUZfTE9DSygmKG9sZF9zby0+c29fcmN2KSk7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlzYnVubG9jaygmb2xkX3NvLT5zb19yY3YsIDEp
OworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXNidW5sb2NrKCZvbGRfc28t
PnNvX3Jjdik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDcwMDAwMAorCVNPQ0tCVUZfVU5MT0NLKCYob2xkX3NvLT5zb19yY3YpKTsKKyNl
bmRpZgorCS8qIE5vdyB3ZSBtb3ZlIHRoZW0gb3ZlciB0byB0aGUgbmV3IHNvY2tldCBidWZmZXIg
Ki8KKwlTQ1RQX0lOUF9SRUFEX0xPQ0sobmV3X2lucCk7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNv
bnRyb2wsICZ0bXBfcXVldWUsIG5leHQsIG5jdGwpIHsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJm5l
d19pbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQltID0gY29udHJvbC0+ZGF0YTsK
KwkJd2hpbGUgKG0pIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygmbmV3X3NvLT5z
b19yY3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCQUxM
T0MsIFNDVFBfQlVGX0xFTihtKSk7CisJCQl9CisJCQlzY3RwX3NiYWxsb2Moc3RjYiwgJm5ld19z
by0+c29fcmN2LCBtKTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygmbmV3X3NvLT5z
b19yY3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVT
VUxULCAwKTsKKwkJCX0KKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJfQorCVNDVFBf
SU5QX1JFQURfVU5MT0NLKG5ld19pbnApOworfQorCit2b2lkCitzY3RwX3dha2V1cF90aGVfcmVh
ZF9zb2NrZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCisgICAgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorKQorewor
CWlmICgoaW5wICE9IE5VTEwpICYmIChpbnAtPnNjdHBfc29ja2V0ICE9IE5VTEwpKSB7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0
cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJaWYgKCFzb19s
b2NrZWQpIHsKKwkJCWlmIChzdGNiKSB7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCQlTQ1RQX1NP
Q0tFVF9MT0NLKHNvLCAxKTsKKwkJCWlmIChzdGNiKSB7CisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQl9
CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsK
KwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQor
I2VuZGlmCisJCXNjdHBfc29yd2FrZXVwKGlucCwgaW5wLT5zY3RwX3NvY2tldCk7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCWlmICgh
c29fbG9ja2VkKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQl9CisjZW5kaWYK
Kwl9Cit9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCit2b2lkCitzY3RwX2ludm9rZV9y
ZWN2X2NhbGxiYWNrKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBpbnBfcmVhZF9sb2NrX2hlbGQpCit7CisJdWludDMyX3QgcGRfcG9pbnQsIGxl
bmd0aDsKKworCWlmICgoaW5wLT5yZWN2X2NhbGxiYWNrID09IE5VTEwpIHx8CisJICAgIChzdGNi
ID09IE5VTEwpIHx8CisJICAgIChzdGNiLT5zY3RwX3NvY2tldCA9PSBOVUxMKSkgeworCQlyZXR1
cm47CisJfQorCisJbGVuZ3RoID0gY29udHJvbC0+bGVuZ3RoOworCWlmIChzdGNiICE9IE5VTEwg
JiYgc3RjYi0+c2N0cF9zb2NrZXQgIT0gTlVMTCkgeworCQlwZF9wb2ludCA9IG1pbihTQ1RQX1NC
X0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCkgPj4gU0NUUF9QQVJUSUFMX0RFTElWRVJZX1NI
SUZULAorCQkJICAgICAgIHN0Y2ItPnNjdHBfZXAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQpOwor
CX0gZWxzZSB7CisJCXBkX3BvaW50ID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCX0K
KwlpZiAoKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB8fCAobGVuZ3RoID49IHBkX3BvaW50KSkg
eworCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwkJc3RydWN0IG1idWYgKm07CisJCWNoYXIgKmJ1ZmZl
cjsKKwkJc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7CisJCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFk
ZHI7CisJCWludCBmbGFnczsKKworCQlpZiAoKGJ1ZmZlciA9IG1hbGxvYyhsZW5ndGgpKSA9PSBO
VUxMKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKSB7
CisJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJfQorCQlzbyA9IHN0Y2ItPnNjdHBfc29j
a2V0OworCQlmb3IgKG0gPSBjb250cm9sLT5kYXRhOyBtOyBtID0gU0NUUF9CVUZfTkVYVChtKSkg
eworCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgY29udHJvbC0+c3RjYiwgJnNvLT5zb19yY3YsIG0p
OworCQl9CisJCW1fY29weWRhdGEoY29udHJvbC0+ZGF0YSwgMCwgbGVuZ3RoLCBidWZmZXIpOwor
CQltZW1zZXQoJnJjdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKTsKKwkJcmN2LnJj
dl9zaWQgPSBjb250cm9sLT5zaW5mb19zdHJlYW07CisJCXJjdi5yY3Zfc3NuID0gKHVpbnQxNl90
KWNvbnRyb2wtPm1pZDsKKwkJcmN2LnJjdl9mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOwor
CQlyY3YucmN2X3BwaWQgPSBjb250cm9sLT5zaW5mb19wcGlkOworCQlyY3YucmN2X3RzbiA9IGNv
bnRyb2wtPnNpbmZvX3RzbjsKKwkJcmN2LnJjdl9jdW10c24gPSBjb250cm9sLT5zaW5mb19jdW10
c247CisJCXJjdi5yY3ZfY29udGV4dCA9IGNvbnRyb2wtPnNpbmZvX2NvbnRleHQ7CisJCXJjdi5y
Y3ZfYXNzb2NfaWQgPSBjb250cm9sLT5zaW5mb19hc3NvY19pZDsKKwkJbWVtc2V0KCZhZGRyLCAw
LCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJc3dpdGNoIChjb250cm9sLT53aG9G
cm9tLT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9J
TkVUOgorCQkJYWRkci5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjsKKwkJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCWFkZHIu
c2luNiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luNjsKKwkJCWJyZWFrOworI2Vu
ZGlmCisJCWNhc2UgQUZfQ09OTjoKKwkJCWFkZHIuc2Nvbm4gPSBjb250cm9sLT53aG9Gcm9tLT5y
by5fbF9hZGRyLnNjb25uOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhZGRyLnNhID0gY29u
dHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zYTsKKwkJCWJyZWFrOworCQl9CisJCWZsYWdzID0g
MDsKKwkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB7CisJCQlmbGFncyB8PSBNU0dfRU9S
OworCQl9CisJCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKKwkJ
CWZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047CisJCX0KKwkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wt
PmRhdGEpOworCQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJY29udHJvbC0+dGFpbF9tYnVmID0g
TlVMTDsKKwkJY29udHJvbC0+bGVuZ3RoID0gMDsKKwkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCkg
eworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5zY3RwX2VwLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBu
ZXh0KTsKKwkJCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2Fk
ZHIoY29udHJvbC0+d2hvRnJvbSk7CisJCQljb250cm9sLT53aG9Gcm9tID0gTlVMTDsKKwkJCXNj
dHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCQl9CisJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJaWYgKGlu
cF9yZWFkX2xvY2tfaGVsZCA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwor
CQl9CisJCWlucC0+cmVjdl9jYWxsYmFjayhzbywgYWRkciwgYnVmZmVyLCBsZW5ndGgsIHJjdiwg
ZmxhZ3MsIGlucC0+dWxwX2luZm8pOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJfQorfQorI2VuZGlmCisKK3Zv
aWQKK3NjdHBfYWRkX3RvX3JlYWRxKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9s
LAorICAgIHN0cnVjdCBzb2NrYnVmICpzYiwKKyAgICBpbnQgZW5kLAorICAgIGludCBpbnBfcmVh
ZF9sb2NrX2hlbGQsCisgICAgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRp
ZgorICAgICkKK3sKKwkvKgorCSAqIEhlcmUgd2UgbXVzdCBwbGFjZSB0aGUgY29udHJvbCBvbiB0
aGUgZW5kIG9mIHRoZSBzb2NrZXQgcmVhZAorCSAqIHF1ZXVlIEFORCBpbmNyZW1lbnQgc2JfY2Mg
c28gdGhhdCBzZWxlY3Qgd2lsbCB3b3JrIHByb3Blcmx5IG9uCisJICogcmVhZC4KKwkgKi8KKwlz
dHJ1Y3QgbWJ1ZiAqbSwgKnByZXYgPSBOVUxMOworCisJaWYgKGlucCA9PSBOVUxMKSB7CisJCS8q
IEdhaywgVFNOSCEhICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiR2FrLCBpbnAgTlVM
TCBvbiBhZGRfdG9fcmVhZHEiKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorI2lmIGRlZmluZWQo
X19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lO
UF9TTyhpbnApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08o
aW5wKSk7CisJfQorI2VuZGlmCisJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQorCQlTQ1RQ
X0lOUF9SRUFEX0xPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0NBTlRfUkVBRCkgeworCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+
d2hvRnJvbSk7CisJCWlmIChjb250cm9sLT5kYXRhKSB7CisJCQlzY3RwX21fZnJlZW0oY29udHJv
bC0+ZGF0YSk7CisJCQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJfQorCQlzY3RwX2ZyZWVfYV9y
ZWFkcShzdGNiLCBjb250cm9sKTsKKwkJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQorCQkJ
U0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIShjb250cm9s
LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pKSB7CisJCWF0b21pY19hZGRfaW50KCZpbnAt
PnRvdGFsX3JlY3ZzLCAxKTsKKwkJaWYgKCFjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IpIHsKKwkJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT50b3RhbF9yZWN2cywgMSk7CisJCX0KKwl9CisJbSA9IGNv
bnRyb2wtPmRhdGE7CisJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOworCWNvbnRyb2wtPmxlbmd0
aCA9IDA7CisJd2hpbGUgKG0pIHsKKwkJaWYgKFNDVFBfQlVGX0xFTihtKSA9PSAwKSB7CisJCQkv
KiBTa2lwIG1idWZzIHdpdGggTk8gbGVuZ3RoICovCisJCQlpZiAocHJldiA9PSBOVUxMKSB7CisJ
CQkJLyogRmlyc3Qgb25lICovCisJCQkJY29udHJvbC0+ZGF0YSA9IHNjdHBfbV9mcmVlKG0pOwor
CQkJCW0gPSBjb250cm9sLT5kYXRhOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHBy
ZXYpID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9
CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJ
CX0KKwkJCWNvbnRpbnVlOworCQl9CisJCXByZXYgPSBtOworCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0
cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0df
U0JBTExPQywgU0NUUF9CVUZfTEVOKG0pKTsKKwkJfQorCQlzY3RwX3NiYWxsb2Moc3RjYiwgc2Is
IG0pOworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9T
Ql9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3Jl
Zl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOworCQl9CisJCWF0b21pY19h
ZGRfaW50KCZjb250cm9sLT5sZW5ndGgsIFNDVFBfQlVGX0xFTihtKSk7CisJCW0gPSBTQ1RQX0JV
Rl9ORVhUKG0pOworCX0KKwlpZiAocHJldiAhPSBOVUxMKSB7CisJCWNvbnRyb2wtPnRhaWxfbWJ1
ZiA9IHByZXY7CisJfSBlbHNlIHsKKwkJLyogRXZlcnl0aGluZyBnb3QgY29sbGFwc2VkIG91dD8/
ICovCisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJc2N0cF9m
cmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7CisJCWlmIChpbnBfcmVhZF9sb2NrX2hlbGQgPT0g
MCkKKwkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisJCXJldHVybjsKKwl9CisJaWYgKGVu
ZCkgeworCQljb250cm9sLT5lbmRfYWRkZWQgPSAxOworCX0KKwlUQUlMUV9JTlNFUlRfVEFJTCgm
aW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwljb250cm9sLT5vbl9yZWFkX3EgPSAx
OworCWlmIChpbnBfcmVhZF9sb2NrX2hlbGQgPT0gMCkKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0so
aW5wKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2N0cF9pbnZva2VfcmVjdl9jYWxs
YmFjayhpbnAsIHN0Y2IsIGNvbnRyb2wsIGlucF9yZWFkX2xvY2tfaGVsZCk7CisjZW5kaWYKKwlp
ZiAoaW5wICYmIGlucC0+c2N0cF9zb2NrZXQpIHsKKwkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29j
a2V0KGlucCwgc3RjYiwgc29fbG9ja2VkKTsKKwl9Cit9CisKKy8qKioqKioqKioqKioqSE9MRCBU
SElTIENPTU1FTlQgRk9SIFBBVENIIEZJTEUgT0YKKyAqKioqKioqKioqKioqQUxURVJOQVRFIFJP
VVRJTkcgQ09ERQorICovCisKKy8qKioqKioqKioqKioqSE9MRCBUSElTIENPTU1FTlQgRk9SIEVO
RCBPRiBQQVRDSCBGSUxFIE9GCisgKioqKioqKioqKioqKkFMVEVSTkFURSBST1VUSU5HIENPREUK
KyAqLworCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2dlbmVyYXRlX2NhdXNlKHVpbnQxNl90IGNvZGUs
IGNoYXIgKmluZm8pCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IHNjdHBfZ2VuX2Vycm9y
X2NhdXNlICpjYXVzZTsKKwlzaXplX3QgaW5mb19sZW47CisJdWludDE2X3QgbGVuOworCisJaWYg
KChjb2RlID09IDApIHx8IChpbmZvID09IE5VTEwpKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQor
CWluZm9fbGVuID0gc3RybGVuKGluZm8pOworCWlmIChpbmZvX2xlbiA+IChTQ1RQX01BWF9DQVVT
RV9MRU5HVEggLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSkgeworCQlyZXR1cm4gKE5V
TEwpOworCX0KKwlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikg
KyBpbmZvX2xlbik7CisJbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4sIDAsIE1fTk9XQUlU
LCAxLCBNVF9EQVRBKTsKKwlpZiAobSAhPSBOVUxMKSB7CisJCVNDVFBfQlVGX0xFTihtKSA9IGxl
bjsKKwkJY2F1c2UgPSBtdG9kKG0sIHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqKTsKKwkJ
Y2F1c2UtPmNvZGUgPSBodG9ucyhjb2RlKTsKKwkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKGxlbik7
CisJCW1lbWNweShjYXVzZS0+aW5mbywgaW5mbywgaW5mb19sZW4pOworCX0KKwlyZXR1cm4gKG0p
OworfQorCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2dlbmVyYXRlX25vX3VzZXJfZGF0YV9jYXVzZSh1
aW50MzJfdCB0c24pCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IHNjdHBfZXJyb3Jfbm9f
dXNlcl9kYXRhICpub191c2VyX2RhdGFfY2F1c2U7CisJdWludDE2X3QgbGVuOworCisJbGVuID0g
KHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9ub191c2VyX2RhdGEpOworCW0gPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYg
KG0gIT0gTlVMTCkgeworCQlTQ1RQX0JVRl9MRU4obSkgPSBsZW47CisJCW5vX3VzZXJfZGF0YV9j
YXVzZSA9IG10b2QobSwgc3RydWN0IHNjdHBfZXJyb3Jfbm9fdXNlcl9kYXRhICopOworCQlub191
c2VyX2RhdGFfY2F1c2UtPmNhdXNlLmNvZGUgPSBodG9ucyhTQ1RQX0NBVVNFX05PX1VTRVJfREFU
QSk7CisJCW5vX3VzZXJfZGF0YV9jYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMobGVuKTsKKwkJ
bm9fdXNlcl9kYXRhX2NhdXNlLT50c24gPSBodG9ubCh0c24pOworCX0KKwlyZXR1cm4gKG0pOwor
fQorCisjaWZkZWYgU0NUUF9NQkNOVF9MT0dHSU5HCit2b2lkCitzY3RwX2ZyZWVfYnVmc3BhY2Uo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAg
ICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsIGludCBjaGtfY250KQoreworCWlmICh0cDEt
PmRhdGEgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWFzb2MtPmNodW5rc19vbl9vdXRfcXVl
dWUgLT0gY2hrX2NudDsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9NQkNOVF9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmNudChTQ1RQX0xP
R19NQkNOVF9ERUNSRUFTRSwKKwkJCSAgICAgICBhc29jLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6
ZSwKKwkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCSAgICAgICAwLAorCQkJICAgICAgIHRw
MS0+bWJjbnQpOworCX0KKwlpZiAoYXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPj0gdHAx
LT5ib29rX3NpemUpIHsKKwkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnRvdGFsX291dHB1dF9xdWV1
ZV9zaXplLCAtdHAxLT5ib29rX3NpemUpOworCX0gZWxzZSB7CisJCWFzb2MtPnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplID0gMDsKKwl9CisKKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgJiYgKCgoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB8fAor
CQkJCSAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkpKSkgeworCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA+PSB0cDEtPmJv
b2tfc2l6ZSkgeworCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyAtPSB0cDEtPmJv
b2tfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2Mg
PSAwOworCisJCX0KKwl9Cit9CisKKyNlbmRpZgorCitpbnQKK3NjdHBfcmVsZWFzZV9wcl9zY3Rw
X2NodW5rKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAx
LAorCQkJICAgdWludDhfdCBzZW50LCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBM
RV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCSAgIFNDVFBfVU5VU0VE
CisjZW5kaWYKKwkpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGsgPSBOVUxMLCAqdHAyOworCXN0cnVjdCBzY3RwX3N0cmVhbV9x
dWV1ZV9wZW5kaW5nICpzcDsKKwl1aW50MzJfdCBtaWQ7CisJdWludDE2X3Qgc2lkOworCXVpbnQ4
X3QgZm91bmRlb20gPSAwOworCWludCByZXRfc3ogPSAwOworCWludCBub3Rkb25lOworCWludCBk
b193YWtldXBfcm91dGluZSA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAoc29f
bG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkp
OworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3Rw
X2VwKSk7CisJfQorI2VuZGlmCisJc2lkID0gdHAxLT5yZWMuZGF0YS5zaWQ7CisJbWlkID0gdHAx
LT5yZWMuZGF0YS5taWQ7CisJaWYgKHNlbnQgfHwgISh0cDEtPnJlYy5kYXRhLnJjdl9mbGFncyAm
IFNDVFBfREFUQV9GSVJTVF9GUkFHKSkgeworCQlzdGNiLT5hc29jLmFiYW5kb25lZF9zZW50WzBd
Kys7CisJCXN0Y2ItPmFzb2MuYWJhbmRvbmVkX3NlbnRbUFJfU0NUUF9QT0xJQ1kodHAxLT5mbGFn
cyldKys7CisJCXN0Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5kb25lZF9zZW50WzBdKys7Cisj
aWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJc3RjYi0+YXNvYy5zdHJtb3V0
W3NpZF0uYWJhbmRvbmVkX3NlbnRbUFJfU0NUUF9QT0xJQ1kodHAxLT5mbGFncyldKys7CisjZW5k
aWYKKwl9IGVsc2UgeworCQlzdGNiLT5hc29jLmFiYW5kb25lZF91bnNlbnRbMF0rKzsKKwkJc3Rj
Yi0+YXNvYy5hYmFuZG9uZWRfdW5zZW50W1BSX1NDVFBfUE9MSUNZKHRwMS0+ZmxhZ3MpXSsrOwor
CQlzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50WzBdKys7CisjaWYgZGVm
aW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0u
YWJhbmRvbmVkX3Vuc2VudFtQUl9TQ1RQX1BPTElDWSh0cDEtPmZsYWdzKV0rKzsKKyNlbmRpZgor
CX0KKwlkbyB7CisJCXJldF9zeiArPSB0cDEtPmJvb2tfc2l6ZTsKKwkJaWYgKHRwMS0+ZGF0YSAh
PSBOVUxMKSB7CisJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJ
CQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRwMSk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRf
ZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJCXNjdHBfZnJlZV9idWZzcGFjZShzdGNiLCAm
c3RjYi0+YXNvYywgdHAxLCAxKTsKKwkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSB0cDEtPnNl
bmRfc2l6ZTsKKwkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfcGVlcl9jaHVua19vaCk7CisJCQlpZiAoc2VudCkgeworCQkJCXNjdHBfdWxwX25vdGlmeShT
Q1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsIDAsIHRwMSwgc29fbG9ja2VkKTsKKwkJCX0g
ZWxzZSB7CisJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMLCBz
dGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7CisJCQl9CisJCQlpZiAodHAxLT5kYXRhKSB7CisJCQkJ
c2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7CisJCQkJdHAxLT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJ
CWRvX3dha2V1cF9yb3V0aW5lID0gMTsKKwkJCWlmIChQUl9TQ1RQX0JVRl9FTkFCTEVEKHRwMS0+
ZmxhZ3MpKSB7CisJCQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlLS07CisJ
CQl9CisJCX0KKwkJdHAxLT5zZW50ID0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQOworCQlpZiAoKHRw
MS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PQorCQkgICAgU0NU
UF9EQVRBX05PVF9GUkFHKSB7CisJCQkvKiBub3QgZnJhZydlZCB3ZSBhZSBkb25lICAgKi8KKwkJ
CW5vdGRvbmUgPSAwOworCQkJZm91bmRlb20gPSAxOworCQl9IGVsc2UgaWYgKHRwMS0+cmVjLmRh
dGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgeworCQkJLyogZW5kIG9mIGZyYWcs
IHdlIGFyZSBkb25lICovCisJCQlub3Rkb25lID0gMDsKKwkJCWZvdW5kZW9tID0gMTsKKwkJfSBl
bHNlIHsKKwkJCS8qCisJCQkgKiBJdHMgYSBiZWdpbiBvciBtaWRkbGUgcGllY2UsIHdlIG11c3Qg
bWFyayBhbGwgb2YKKwkJCSAqIGl0CisJCQkgKi8KKwkJCW5vdGRvbmUgPSAxOworCQkJdHAxID0g
VEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4dCk7CisJCX0KKwl9IHdoaWxlICh0cDEgJiYgbm90ZG9u
ZSk7CisJaWYgKGZvdW5kZW9tID09IDApIHsKKwkJLyoKKwkJICogVGhlIG11bHRpLXBhcnQgbWVz
c2FnZSB3YXMgc2NhdHRlcmVkIGFjcm9zcyB0aGUgc2VuZCBhbmQKKwkJICogc2VudCBxdWV1ZS4K
KwkJICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0cDEsICZzdGNiLT5hc29jLnNlbmRfcXVldWUs
IHNjdHBfbmV4dCwgdHAyKSB7CisJCQlpZiAoKHRwMS0+cmVjLmRhdGEuc2lkICE9IHNpZCkgfHwK
KwkJCSAgICAoIVNDVFBfTUlEX0VRKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkLCB0cDEtPnJl
Yy5kYXRhLm1pZCwgbWlkKSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIHNhdmUgdG8gY2hr
IGluIGNhc2Ugd2UgaGF2ZSBzb21lIG9uIHN0cmVhbSBvdXQKKwkJCSAqIHF1ZXVlLiBJZiBzbyBh
bmQgd2UgaGF2ZSBhbiB1bi10cmFuc21pdHRlZCBvbmUKKwkJCSAqIHdlIGRvbid0IGhhdmUgdG8g
ZnVkZ2UgdGhlIFRTTi4KKwkJCSAqLworCQkJY2hrID0gdHAxOworCQkJcmV0X3N6ICs9IHRwMS0+
Ym9va19zaXplOworCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCB0cDEs
IDEpOworCQkJaWYgKHNlbnQpIHsKKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VO
VF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7CisJCQl9IGVsc2UgeworCQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCwgc3RjYiwgMCwgdHAxLCBz
b19sb2NrZWQpOworCQkJfQorCQkJaWYgKHRwMS0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbSh0
cDEtPmRhdGEpOworCQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQkvKiBObyBmbGlnaHQg
aW52b2x2ZWQgaGVyZSBib29rIHRoZSBzaXplIHRvIDAgKi8KKwkJCXRwMS0+Ym9va19zaXplID0g
MDsKKwkJCWlmICh0cDEtPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcp
IHsKKwkJCQlmb3VuZGVvbSA9IDE7CisJCQl9CisJCQlkb193YWtldXBfcm91dGluZSA9IDE7CisJ
CQl0cDEtPnNlbnQgPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVA7CisJCQlUQUlMUV9SRU1PVkUoJnN0
Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgdHAxLCBzY3RwX25leHQpOworCQkJLyogb24gdG8gdGhlIHNl
bnQgcXVldWUgc28gd2UgY2FuIHdhaXQgZm9yIGl0IHRvIGJlIHBhc3NlZCBieS4gKi8KKwkJCVRB
SUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHRwMSwKKwkJCQkJICBzY3Rw
X25leHQpOworCQkJc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudC0tOworCQkJc3RjYi0+YXNvYy5z
ZW50X3F1ZXVlX2NudCsrOworCQl9CisJfQorCWlmIChmb3VuZGVvbSA9PSAwKSB7CisJCS8qCisJ
CSAqIFN0aWxsIG5vIGVvbSBmb3VuZC4gVGhhdCBtZWFucyB0aGVyZQorCQkgKiBpcyBzdHVmZiBs
ZWZ0IG9uIHRoZSBzdHJlYW0gb3V0IHF1ZXVlLi4geXVjay4KKwkJICovCisJCVNDVFBfVENCX1NF
TkRfTE9DSyhzdGNiKTsKKwkJc3RycSA9ICZzdGNiLT5hc29jLnN0cm1vdXRbc2lkXTsKKwkJc3Ag
PSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOworCQlpZiAoc3AgIT0gTlVMTCkgeworCQkJ
c3AtPmRpc2NhcmRfcmVzdCA9IDE7CisJCQkvKgorCQkJICogV2UgbWF5IG5lZWQgdG8gcHV0IGEg
Y2h1bmsgb24gdGhlCisJCQkgKiBxdWV1ZSB0aGF0IGhvbGRzIHRoZSBUU04gdGhhdAorCQkJICog
d291bGQgaGF2ZSBiZWVuIHNlbnQgd2l0aCB0aGUgTEFTVAorCQkJICogYml0LgorCQkJICovCisJ
CQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCQkvKiBZZXAsIHdlIGhhdmUgdG8gKi8KKwkJCQlzY3Rw
X2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwkJCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCQkJ
Lyogd2UgYXJlIGhvc2VkLiBBbGwgd2UgY2FuCisJCQkJCSAqIGRvIGlzIG5vdGhpbmcuLiB3aGlj
aCB3aWxsCisJCQkJCSAqIGNhdXNlIGFuIGFib3J0IGlmIHRoZSBwZWVyIGlzCisJCQkJCSAqIHBh
eWluZyBhdHRlbnRpb24uCisJCQkJCSAqLworCQkJCQlnb3RvIG9oX3dlbGw7CisJCQkJfQorCQkJ
CW1lbXNldChjaGssIDAsIHNpemVvZigqY2hrKSk7CisJCQkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxh
Z3MgPSAwOworCQkJCWNoay0+c2VudCA9IFNDVFBfRk9SV0FSRF9UU05fU0tJUDsKKwkJCQljaGst
PmFzb2MgPSAmc3RjYi0+YXNvYzsKKwkJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQg
PT0gMCkgeworCQkJCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJ
CQkJCWNoay0+cmVjLmRhdGEubWlkID0gMDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNoay0+cmVj
LmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7
CisJCQkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgeworCQkJCQkJY2hr
LT5yZWMuZGF0YS5taWQgPSBzdHJxLT5uZXh0X21pZF91bm9yZGVyZWQ7CisJCQkJCX0gZWxzZSB7
CisJCQkJCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7CisJCQkJ
CX0KKwkJCQl9CisJCQkJY2hrLT5yZWMuZGF0YS5zaWQgPSBzcC0+c2lkOworCQkJCWNoay0+cmVj
LmRhdGEucHBpZCA9IHNwLT5wcGlkOworCQkJCWNoay0+cmVjLmRhdGEuY29udGV4dCA9IHNwLT5j
b250ZXh0OworCQkJCWNoay0+ZmxhZ3MgPSBzcC0+YWN0X2ZsYWdzOworCQkJCWNoay0+d2hvVG8g
PSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKQor
CQkJCWNoay0+cmVjLmRhdGEudHNuID0gYXRvbWljX2ZldGNoYWRkX2ludCgmc3RjYi0+YXNvYy5z
ZW5kaW5nX3NlcSwgMSk7CisjZWxzZQorCQkJCWNoay0+cmVjLmRhdGEudHNuID0gc3RjYi0+YXNv
Yy5zZW5kaW5nX3NlcSsrOworI2VuZGlmCisJCQkJc3RycS0+Y2h1bmtzX29uX3F1ZXVlcysrOwor
CQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnNlbnRfcXVldWUsIGNoaywgc2N0cF9u
ZXh0KTsKKwkJCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfY250Kys7CisJCQkJc3RjYi0+YXNvYy5w
cl9zY3RwX2NudCsrOworCQkJfQorCQkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgfD0gU0NUUF9E
QVRBX0xBU1RfRlJBRzsKKwkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkg
eworCQkJCWNoay0+cmVjLmRhdGEucmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9VTk9SREVSRUQ7CisJ
CQl9CisJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCWlmICgo
c3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpID09IDApIHsKKwkJCQkJc3RycS0+bmV4
dF9taWRfb3JkZXJlZCsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKHNwLT5zaW5mb19m
bGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCXN0cnEtPm5leHRfbWlkX3Vub3JkZXJlZCsr
OworCQkJCX0gZWxzZSB7CisJCQkJCXN0cnEtPm5leHRfbWlkX29yZGVyZWQrKzsKKwkJCQl9CisJ
CQl9CisJCW9oX3dlbGw6CisJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkvKiBQdWxsIGFueSBkYXRh
IHRvIGZyZWUgdXAgdGhlIFNCIGFuZAorCQkJCSAqIGFsbG93IHNlbmRlciB0byAiYWRkIG1vcmUi
IHdoaWxlIHdlCisJCQkJICogd2lsbCB0aHJvdyBhd2F5IDotKQorCQkJCSAqLworCQkJCXNjdHBf
ZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCBzcCk7CisJCQkJcmV0X3N6ICs9IHNw
LT5sZW5ndGg7CisJCQkJZG9fd2FrZXVwX3JvdXRpbmUgPSAxOworCQkJCXNwLT5zb21lX3Rha2Vu
ID0gMTsKKwkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOworCQkJCXNwLT5kYXRhID0gTlVMTDsK
KwkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCQlzcC0+bGVuZ3RoID0gMDsKKwkJCX0KKwkJ
fQorCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJaWYgKGRvX3dha2V1cF9yb3V0
aW5lKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+
c2N0cF9lcCk7CisJCWlmICghc29fbG9ja2VkKSB7CisJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUg
JiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCQkvKiBhc3NvYyB3YXMgZnJlZWQgd2hp
bGUgd2Ugd2VyZSB1bmxvY2tlZCAqLworCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJ
CQkJcmV0dXJuIChyZXRfc3opOworCQkJfQorCQl9CisjZW5kaWYKKwkJc2N0cF9zb3d3YWtldXAo
c3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlpZiAoIXNvX2xvY2tlZCkgewor
CQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJfQorI2VuZGlmCisJfQorCXJldHVybiAo
cmV0X3N6KTsKK30KKworLyoKKyAqIGNoZWNrcyB0byBzZWUgaWYgdGhlIGdpdmVuIGFkZHJlc3Ms
IHNhLCBpcyBvbmUgdGhhdCBpcyBjdXJyZW50bHkga25vd24gYnkKKyAqIHRoZSBrZXJuZWwgbm90
ZTogY2FuJ3QgZGlzdGluZ3Vpc2ggdGhlIHNhbWUgYWRkcmVzcyBvbiBtdWx0aXBsZSBpbnRlcmZh
Y2VzCisgKiBhbmQgZG9lc24ndCBoYW5kbGUgbXVsdGlwbGUgYWRkcmVzc2VzIHdpdGggZGlmZmVy
ZW50IHpvbmUvc2NvcGUgaWQncyBub3RlOgorICogaWZhX2lmd2l0aGFkZHIoKSBjb21wYXJlcyB0
aGUgZW50aXJlIHNvY2thZGRyIHN0cnVjdAorICovCitzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9m
aW5kX2lmYV9pbl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsCisJCSAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7
CisKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJfQor
CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRk
cikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlmIChhZGRy
LT5zYV9mYW1pbHkgIT0gbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpCisJCQljb250
aW51ZTsKKyNpZmRlZiBJTkVUCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewor
CQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PQor
CQkJICAgIGxhZGRyLT5pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyLnNfYWRkcikgeworCQkJCS8q
IGZvdW5kIGhpbS4gKi8KKwkJCQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJcmV0dXJuIChsYWRkci0+aWZhKTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYgKGFkZHItPnNhX2ZhbWls
eSA9PSBBRl9JTkVUNikgeworCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopYWRkciwKKwkJCQkJCSAmbGFkZHItPmlmYS0+YWRkcmVzcy5zaW42KSkgewor
CQkJCS8qIGZvdW5kIGhpbS4gKi8KKwkJCQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJcmV0dXJuIChsYWRkci0+aWZhKTsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCWlmICgoKHN0cnVjdCBzb2Nr
YWRkcl9jb25uICopYWRkciktPnNjb25uX2FkZHIgPT0gbGFkZHItPmlmYS0+YWRkcmVzcy5zY29u
bi5zY29ubl9hZGRyKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJCWlmIChob2xkc19sb2Nr
ID09IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCX0KKwkJCQlyZXR1cm4g
KGxhZGRyLT5pZmEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwl9CisJaWYgKGhv
bGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfQorCXJldHVybiAo
TlVMTCk7Cit9CisKK3VpbnQzMl90CitzY3RwX2dldF9pZmFfaGFzaF92YWwoc3RydWN0IHNvY2th
ZGRyICphZGRyKQoreworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAor
CWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCXNpbiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQlyZXR1cm4gKHNpbi0+c2luX2FkZHIuc19h
ZGRyIF4gKHNpbi0+c2luX2FkZHIuc19hZGRyID4+IDE2KSk7CisJfQorI2VuZGlmCisjaWZkZWYg
SU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
KwkJdWludDMyX3QgaGFzaF9vZl9hZGRyOworCisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKWFkZHI7CisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0ZyZWVCU0QpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgJiYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJaGFzaF9vZl9hZGRyID0gKHNpbjYtPnNp
bjZfYWRkci5zNl9hZGRyMzJbMF0gKworCQkJCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMV0g
KworCQkJCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMl0gKworCQkJCXNpbjYtPnNpbjZfYWRk
ci5zNl9hZGRyMzJbM10pOworI2Vsc2UKKwkJaGFzaF9vZl9hZGRyID0gKCgodWludDMyX3QgKikm
c2luNi0+c2luNl9hZGRyKVswXSArCisJCQkJKCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIp
WzFdICsKKwkJCQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMl0gKworCQkJCSgodWlu
dDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVszXSk7CisjZW5kaWYKKwkJaGFzaF9vZl9hZGRyID0g
KGhhc2hfb2ZfYWRkciBeIChoYXNoX29mX2FkZHIgPj4gMTYpKTsKKwkJcmV0dXJuIChoYXNoX29m
X2FkZHIpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFG
X0NPTk46CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisJCXVpbnRwdHJfdCB0
ZW1wOworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJdGVtcCA9
ICh1aW50cHRyX3Qpc2Nvbm4tPnNjb25uX2FkZHI7CisJCXJldHVybiAoKHVpbnQzMl90KSh0ZW1w
IF4gKHRlbXAgPj4gMTYpKSk7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQor
CXJldHVybiAoMCk7Cit9CisKK3N0cnVjdCBzY3RwX2lmYSAqCitzY3RwX2ZpbmRfaWZhX2J5X2Fk
ZHIoc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCB2cmZfaWQsIGludCBob2xkc19sb2Nr
KQoreworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCXN0cnVjdCBzY3RwX3ZyZiAqdnJm
OworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKmhhc2hfaGVhZDsKKwl1aW50MzJfdCBoYXNoX29mX2Fk
ZHI7CisKKwlpZiAoaG9sZHNfbG9jayA9PSAwKQorCQlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisK
Kwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCWlm
IChob2xkc19sb2NrID09IDApCisJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisKKwloYXNoX29mX2FkZHIgPSBzY3RwX2dldF9pZmFfaGFzaF92YWwoYWRk
cik7CisKKwloYXNoX2hlYWQgPSAmdnJmLT52cmZfYWRkcl9oYXNoWyhoYXNoX29mX2FkZHIgJiB2
cmYtPnZyZl9hZGRyX2hhc2htYXJrKV07CisJaWYgKGhhc2hfaGVhZCA9PSBOVUxMKSB7CisJCVND
VFBfUFJJTlRGKCJoYXNoX29mX2FkZHI6JXggbWFzazoleCB0YWJsZToleCAtICIsCisJCQkgICAg
aGFzaF9vZl9hZGRyLCAodWludDMyX3QpdnJmLT52cmZfYWRkcl9oYXNobWFyaywKKwkJCSAgICAo
dWludDMyX3QpKGhhc2hfb2ZfYWRkciAmIHZyZi0+dnJmX2FkZHJfaGFzaG1hcmspKTsKKwkJc2N0
cF9wcmludF9hZGRyZXNzKGFkZHIpOworCQlTQ1RQX1BSSU5URigiTm8gc3VjaCBidWNrZXQgZm9y
IGFkZHJlc3NcbiIpOworCQlpZiAoaG9sZHNfbG9jayA9PSAwKQorCQkJU0NUUF9JUElfQUREUl9S
VU5MT0NLKCk7CisKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJTElTVF9GT1JFQUNIKHNjdHBfaWZh
cCwgaGFzaF9oZWFkLCBuZXh0X2J1Y2tldCkgeworCQlpZiAoYWRkci0+c2FfZmFtaWx5ICE9IHNj
dHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpCisJCQljb250aW51ZTsKKyNpZmRlZiBJTkVU
CisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJaWYgKCgoc3RydWN0IHNv
Y2thZGRyX2luICopYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJICAgIHNjdHBfaWZhcC0+
YWRkcmVzcy5zaW4uc2luX2FkZHIuc19hZGRyKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJ
CWlmIChob2xkc19sb2NrID09IDApCisJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQkJ
CXJldHVybiAoc2N0cF9pZmFwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWZk
ZWYgSU5FVDYKKwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJaWYgKFND
VFA2X0FSRV9BRERSX0VRVUFMKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciwKKwkJCQkJCSAm
c2N0cF9pZmFwLT5hZGRyZXNzLnNpbjYpKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJCWlm
IChob2xkc19sb2NrID09IDApCisJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQkJCXJl
dHVybiAoc2N0cF9pZmFwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsK
KwkJCWlmICgoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkciktPnNjb25uX2FkZHIgPT0gc2N0
cF9pZmFwLT5hZGRyZXNzLnNjb25uLnNjb25uX2FkZHIpIHsKKwkJCQkvKiBmb3VuZCBoaW0uICov
CisJCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkKKwkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7
CisJCQkJcmV0dXJuIChzY3RwX2lmYXApOworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYK
Kwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkKKwkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJ
cmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfdXNlcl9yY3ZkKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDMyX3QgKmZyZWVkX3NvX2ZhciwgaW50IGhvbGRfcmxvY2ssCisJ
ICAgICAgIHVpbnQzMl90IHJ3bmRfcmVxKQoreworCS8qIFVzZXIgcHVsbGVkIHNvbWUgZGF0YSwg
ZG8gd2UgbmVlZCBhIHJ3bmQgdXBkYXRlPyAqLworCWludCByX3VubG9ja2VkID0gMDsKKwl1aW50
MzJfdCBkaWYsIHJ3bmQ7CisJc3RydWN0IHNvY2tldCAqc28gPSBOVUxMOworCisJaWYgKHN0Y2Ig
PT0gTlVMTCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKKworCWlmIChzdGNiLT5hc29jLnN0YXRlICYgKFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQgfAorCQkJCVNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQgfAorCQkJCVNDVFBfU1RB
VEVfU0hVVERPV05fQUNLX1NFTlQpKSB7CisJCS8qIFByZS1jaGVjayBJZiB3ZSBhcmUgZnJlZWlu
ZyBubyB1cGRhdGUgKi8KKwkJZ290byBub19sb2NrOworCX0KKwlTQ1RQX0lOUF9JTkNSX1JFRihz
dGNiLT5zY3RwX2VwKTsKKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKKwkJZ290byBvdXQ7CisJfQorCXNv
ID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZ290byBvdXQ7CisJ
fQorCWF0b21pY19hZGRfaW50KCZzdGNiLT5mcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QsICpmcmVl
ZF9zb19mYXIpOworCS8qIEhhdmUgeW91IGhhdmUgZnJlZWQgZW5vdWdoIHRvIGxvb2sgKi8KKwkq
ZnJlZWRfc29fZmFyID0gMDsKKwkvKiBZZXAsIGl0cyB3b3J0aCBhIGxvb2sgYW5kIHRoZSBsb2Nr
IG92ZXJoZWFkICovCisKKwkvKiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJ3bmQgd291bGQgYmUgKi8K
Kwlyd25kID0gc2N0cF9jYWxjX3J3bmQoc3RjYiwgJnN0Y2ItPmFzb2MpOworCWlmIChyd25kID49
IHN0Y2ItPmFzb2MubXlfbGFzdF9yZXBvcnRlZF9yd25kKSB7CisJCWRpZiA9IHJ3bmQgLSBzdGNi
LT5hc29jLm15X2xhc3RfcmVwb3J0ZWRfcnduZDsKKwl9IGVsc2UgeworCQlkaWYgPSAwOworCX0K
KwlpZiAoZGlmID49IHJ3bmRfcmVxKSB7CisJCWlmIChob2xkX3Jsb2NrKSB7CisJCQlTQ1RQX0lO
UF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJCXJfdW5sb2NrZWQgPSAxOworCQl9CisJ
CWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewor
CQkJLyoKKwkJCSAqIE9uZSBsYXN0IGNoZWNrIGJlZm9yZSB3ZSBhbGxvdyB0aGUgZ3V5IHBvc3Np
Ymx5CisJCQkgKiB0byBnZXQgaW4uIFRoZXJlIGlzIGEgcmFjZSwgd2hlcmUgdGhlIGd1eSBoYXMg
bm90CisJCQkgKiByZWFjaGVkIHRoZSBnYXRlLiBJbiB0aGF0IGNhc2UKKwkJCSAqLworCQkJZ290
byBvdXQ7CisJCX0KKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3Rh
dGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQkvKiBObyByZXBvcnRzIGhl
cmUgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWdvdG8gb3V0OworCQl9CisJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3d1X3NhY2tzX3NlbnQpOworCQlzY3RwX3NlbmRfc2FjayhzdGNi
LCBTQ1RQX1NPX0xPQ0tFRCk7CisKKwkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwg
c3RjYiwKKwkJCQkgIFNDVFBfT1VUUFVUX0ZST01fVVNSX1JDVkQsIFNDVFBfU09fTE9DS0VEKTsK
KwkJLyogbWFrZSBzdXJlIG5vIHRpbWVyIGlzIHJ1bm5pbmcgKi8KKwkJc2N0cF90aW1lcl9zdG9w
KFNDVFBfVElNRVJfVFlQRV9SRUNWLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCQkgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNik7CisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwl9IGVsc2UgeworCQkvKiBVcGRhdGUgaG93IG11Y2ggd2UgaGF2ZSBw
ZW5kaW5nICovCisJCXN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdCA9IGRpZjsKKwl9Cisg
b3V0OgorCWlmIChzbyAmJiByX3VubG9ja2VkICYmIGhvbGRfcmxvY2spIHsKKwkJU0NUUF9JTlBf
UkVBRF9MT0NLKHN0Y2ItPnNjdHBfZXApOworCX0KKworCVNDVFBfSU5QX0RFQ1JfUkVGKHN0Y2It
PnNjdHBfZXApOworIG5vX2xvY2s6CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAtMSk7CisJcmV0dXJuOworfQorCitpbnQKK3NjdHBfc29yZWN2bXNnKHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgIHN0cnVjdCB1aW8gKnVpbywKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wLAorICAgIHN0
cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICBpbnQgZnJvbWxlbiwKKyAgICBpbnQgKm1zZ19mbGFn
cywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKKyAgICBpbnQgZmlsbGluZ19z
aW5mbykKK3sKKwkvKgorCSAqIE1TRyBmbGFncyB3ZSB3aWxsIGxvb2sgYXQgTVNHX0RPTlRXQUlU
IC0gbm9uLWJsb2NraW5nIElPLgorCSAqIE1TR19QRUVLIC0gTG9vayBkb24ndCB0b3VjaCA6LUQg
KG9ubHkgdmFsaWQgd2l0aCBPVVQgbWJ1ZiBjb3B5CisJICogbXA9TlVMTCB0aHVzIHVpbyBpcyB0
aGUgY29weSBtZXRob2QgdG8gdXNlcmxhbmQpIE1TR19XQUlUQUxMIC0gPz8KKwkgKiBPbiB0aGUg
d2F5IG91dCB3ZSBtYXkgc2VuZCBvdXQgYW55IGNvbWJpbmF0aW9uIG9mOgorCSAqIE1TR19OT1RJ
RklDQVRJT04gTVNHX0VPUgorCSAqCisJICovCisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9IE5V
TEw7CisJaW50IG15X2xlbiA9IDA7CisJaW50IGNwX2xlbiA9IDAsIGVycm9yID0gMDsKKwlzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCA9IE5VTEwsICpjdGwgPSBOVUxMLCAqbnh0
ID0gTlVMTDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNi
ID0gTlVMTDsKKwlpbnQgd2FrZXVwX3JlYWRfc29ja2V0ID0gMDsKKwlpbnQgZnJlZWNudF9hcHBs
aWVkID0gMDsKKwlpbnQgb3V0X2ZsYWdzID0gMCwgaW5fZmxhZ3MgPSAwOworCWludCBibG9ja19h
bGxvd2VkID0gMTsKKwl1aW50MzJfdCBmcmVlZF9zb19mYXIgPSAwOworCXVpbnQzMl90IGNvcGll
ZF9zb19mYXIgPSAwOworCWludCBpbl9lZW9yX21vZGUgPSAwOworCWludCBub19yY3ZfbmVlZGVk
ID0gMDsKKwl1aW50MzJfdCByd25kX3JlcSA9IDA7CisJaW50IGhvbGRfc2Jsb2NrID0gMDsKKwlp
bnQgaG9sZF9ybG9jayA9IDA7CisJc3NpemVfdCBzbGVuID0gMDsKKwl1aW50MzJfdCBoZWxkX2xl
bmd0aCA9IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNzAwMDAwCisJaW50IHNvY2tidWZfbG9jayA9IDA7CisjZW5kaWYKKworCWlmICh1aW8gPT0g
TlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKG1zZ19m
bGFncykgeworCQlpbl9mbGFncyA9ICptc2dfZmxhZ3M7CisJCWlmIChpbl9mbGFncyAmIE1TR19Q
RUVLKQorCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVhZF9wZWVrcyk7CisJfSBlbHNlIHsKKwkJ
aW5fZmxhZ3MgPSAwOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQ
UExFX0xFT1BBUkQpCisJc2xlbiA9IHVpby0+dWlvX3Jlc2lkOworI2Vsc2UKKwlzbGVuID0gdWlv
X3Jlc2lkKHVpbyk7CisjZW5kaWYKKyNlbHNlCisJc2xlbiA9IHVpby0+dWlvX3Jlc2lkOworI2Vu
ZGlmCisKKwkvKiBQdWxsIGluIGFuZCBzZXQgdXAgb3VyIGludCBmbGFncyAqLworCWlmIChpbl9m
bGFncyAmIE1TR19PT0IpIHsKKwkJLyogT3V0IG9mIGJhbmQncyBOT1Qgc3VwcG9ydGVkICovCisJ
CXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCWlmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgJiYg
KG1wICE9IE5VTEwpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYg
KChpbl9mbGFncyAmIChNU0dfRE9OVFdBSVQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMAorCQkJIHwgTVNHX05CSU8KKyNlbmRpZgorCQkgICAg
ICkpIHx8CisJICAgIFNDVFBfU09fSVNfTkJJTyhzbykpIHsKKwkJYmxvY2tfYWxsb3dlZCA9IDA7
CisJfQorCS8qIHNldHVwIHRoZSBlbmRwb2ludCAqLworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBj
YiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFRkFVTFQpOworCQlyZXR1
cm4gKEVGQVVMVCk7CisJfQorCXJ3bmRfcmVxID0gKFNDVFBfU0JfTElNSVRfUkNWKHNvKSA+PiBT
Q1RQX1JXTkRfSElXQVRfU0hJRlQpOworCS8qIE11c3QgYmUgYXQgbGVhc3QgYSBNVFUncyB3b3J0
aCAqLworCWlmIChyd25kX3JlcSA8IFNDVFBfTUlOX1JXTkQpCisJCXJ3bmRfcmVxID0gU0NUUF9N
SU5fUldORDsKKwlpbl9lZW9yX21vZGUgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19FWFBMSUNJVF9FT1IpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1JFQ1ZfUldORF9MT0dHSU5HX0VOQUJMRSkgeworI2lmIGRlZmluZWQo
X19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJc2N0cF9taXNjX2ludHMo
U0NUUF9TT1JFQ1ZfRU5URVIsCisJCQkgICAgICAgcnduZF9yZXEsIGluX2Vlb3JfbW9kZSwgc28t
PnNvX3Jjdi5zYl9jYywgdWlvLT51aW9fcmVzaWQpOworI2Vsc2UKKwkJc2N0cF9taXNjX2ludHMo
U0NUUF9TT1JFQ1ZfRU5URVIsCisJCQkgICAgICAgcnduZF9yZXEsIGluX2Vlb3JfbW9kZSwgc28t
PnNvX3Jjdi5zYl9jYywgdWlvX3Jlc2lkKHVpbykpOworI2VuZGlmCisjZWxzZQorCQlzY3RwX21p
c2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRFUiwKKwkJCSAgICAgICByd25kX3JlcSwgaW5fZWVvcl9t
b2RlLCBzby0+c29fcmN2LnNiX2NjLCAodWludDMyX3QpdWlvLT51aW9fcmVzaWQpOworI2VuZGlm
CisJfQorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcw
MDAwMCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jj
dik7CisJaG9sZF9zYmxvY2sgPSAxOworI2VuZGlmCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmU0NUUF9SRUNWX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCXNjdHBfbWlz
Y19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAgcnduZF9yZXEsIGJsb2NrX2Fs
bG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpby0+dWlvX3Jlc2lkKTsKKyNlbHNlCisJCXNjdHBf
bWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAgcnduZF9yZXEsIGJsb2Nr
X2FsbG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpb19yZXNpZCh1aW8pKTsKKyNlbmRpZgorI2Vs
c2UKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVJQTCwKKwkJCSAgICAgICByd25k
X3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNvX3Jjdi5zYl9jYywgKHVpbnQzMl90KXVpby0+dWlv
X3Jlc2lkKTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWVycm9yID0g
c2Jsb2NrKCZzby0+c29fcmN2LCBTQkxPQ0tXQUlUKGluX2ZsYWdzKSk7CisjZW5kaWYKKworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCisJZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIChibG9j
a19hbGxvd2VkID8gU0JMX1dBSVQgOiAwKSk7CisjZW5kaWYKKwlpZiAoZXJyb3IpIHsKKwkJZ290
byByZWxlYXNlX3VubG9ja2VkOworCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKKyAgICAgICAgc29ja2J1Zl9sb2NrID0gMTsKKyNlbmRp
ZgorIHJlc3RhcnQ6CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uIDwgNzAwMDAwKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKGhvbGRfc2Jsb2Nr
ID09IDApIHsKKwkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJaG9sZF9zYmxvY2sgPSAx
OworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNidW5sb2NrKCZzby0+c29f
cmN2LCAxKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPCA3MDAwMDAKKwlzYnVubG9jaygmc28tPnNvX3Jjdik7CisjZW5kaWYKKworIHJl
c3RhcnRfbm9zYmxvY2tzOgorCWlmIChob2xkX3NibG9jayA9PSAwKSB7CisJCVNPQ0tCVUZfTE9D
Sygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMTsKKwl9CisJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgeworCQlnb3RvIG91dDsKKwl9
CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAw
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCWlmICgoc28tPnNvX3Jjdi5zYl9zdGF0ZSAmIFNC
U19DQU5UUkNWTU9SRSkgJiYgKHNvLT5zb19yY3Yuc2JfY2MgPT0gMCkpIHsKKyNlbHNlCisJaWYg
KChzby0+c29fc3RhdGUgJiBTU19DQU5UUkNWTU9SRSkgJiYgKHNvLT5zb19yY3Yuc2JfY2MgPT0g
MCkpIHsKKyNlbmRpZgorCQlpZiAoc28tPnNvX2Vycm9yKSB7CisJCQllcnJvciA9IHNvLT5zb19l
cnJvcjsKKwkJCWlmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkKKwkJCQlzby0+c29fZXJy
b3IgPSAwOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAoc28tPnNvX3Jjdi5zYl9j
YyA9PSAwKSB7CisJCQkJLyogaW5kaWNhdGUgRU9GICovCisJCQkJZXJyb3IgPSAwOworCQkJCWdv
dG8gb3V0OworCQkJfQorCQl9CisJfQorCWlmIChzby0+c29fcmN2LnNiX2NjIDw9IGhlbGRfbGVu
Z3RoKSB7CisJCWlmIChzby0+c29fZXJyb3IpIHsKKwkJCWVycm9yID0gc28tPnNvX2Vycm9yOwor
CQkJaWYgKChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSB7CisJCQkJc28tPnNvX2Vycm9yID0g
MDsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICgoc28tPnNvX3Jjdi5zYl9jYyA9PSAw
KSAmJgorCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAorCQkgICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkp
IHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSA9
PSAwKSB7CisJCQkJLyogRm9yIGFjdGl2ZSBvcGVuIHNpZGUgY2xlYXIgZmxhZ3MgZm9yIHJlLXVz
ZQorCQkJCSAqIHBhc3NpdmUgb3BlbiBpcyBibG9ja2VkIGJ5IGNvbm5lY3QuCisJCQkJICovCisJ
CQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19BQk9SVEVEKSB7CisJ
CQkJCS8qIFlvdSB3ZXJlIGFib3J0ZWQsIHBhc3NpdmUgc2lkZSBhbHdheXMgaGl0cyBoZXJlICov
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UFVUSUwsIEVDT05OUkVTRVQpOworCQkJCQllcnJvciA9IEVDT05OUkVTRVQ7CisJCQkJfQorCQkJ
CXNvLT5zb19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElORyB8CisJCQkJCQkgIFNTX0lTRElTQ09O
TkVDVElORyB8CisJCQkJCQkgIFNTX0lTQ09ORklSTUlORyB8CisJCQkJCQkgIFNTX0lTQ09OTkVD
VEVEKTsKKwkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1dBU19DT05ORUNURUQpID09IDApIHsKKwkJCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVOT1RDT05OKTsK
KwkJCQkJCWVycm9yID0gRU5PVENPTk47CisJCQkJCX0KKwkJCQl9CisJCQkJZ290byBvdXQ7CisJ
CQl9CisJCX0KKwkJaWYgKGJsb2NrX2FsbG93ZWQpIHsKKwkJCWVycm9yID0gc2J3YWl0KCZzby0+
c29fcmN2KTsKKwkJCWlmIChlcnJvcikgeworCQkJCWdvdG8gb3V0OworCQkJfQorCQkJaGVsZF9s
ZW5ndGggPSAwOworCQkJZ290byByZXN0YXJ0X25vc2Jsb2NrczsKKwkJfSBlbHNlIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVX
T1VMREJMT0NLKTsKKwkJCWVycm9yID0gRVdPVUxEQkxPQ0s7CisJCQlnb3RvIG91dDsKKwkJfQor
CX0KKwlpZiAoaG9sZF9zYmxvY2sgPT0gMSkgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jj
dik7CisJCWhvbGRfc2Jsb2NrID0gMDsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJZXJy
b3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwCisJ
ZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIChibG9ja19hbGxvd2VkID8gTV9XQUlUT0sgOiAw
KSk7CisjZW5kaWYKKwkvKiB3ZSBwb3NzaWJseSBoYXZlIGRhdGEgd2UgY2FuIHJlYWQgKi8KKwkv
KnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgmaW5wLT5y
ZWFkX3F1ZXVlKTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8qIFRoaXMgY291bGQgYmUg
aGFwcGVuaW5nIHNpbmNlCisJCSAqIHRoZSBhcHBlbmRlciBkaWQgdGhlIGluY3JlbWVudCBidXQg
YXMgbm90CisJCSAqIHlldCBkaWQgdGhlIHRhaWxxIGluc2VydCBvbnRvIHRoZSByZWFkX3F1ZXVl
CisJCSAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SRUFEX0xPQ0so
aW5wKTsKKwkJfQorCQljb250cm9sID0gVEFJTFFfRklSU1QoJmlucC0+cmVhZF9xdWV1ZSk7CisJ
CWlmICgoY29udHJvbCA9PSBOVUxMKSAmJiAoc28tPnNvX3Jjdi5zYl9jYyAhPSAwKSkgeworI2lm
ZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJIdWgsIGl0cyBub24gemVybyBhbmQgbm90aGluZyBv
biBjb250cm9sPyIpOworI2VuZGlmCisJCQlzby0+c29fcmN2LnNiX2NjID0gMDsKKwkJfQorCQlT
Q1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQlob2xkX3Jsb2NrID0gMDsKKwkJZ290byByZXN0
YXJ0OworCX0KKworCWlmICgoY29udHJvbC0+bGVuZ3RoID09IDApICYmCisJICAgIChjb250cm9s
LT5kb19ub3RfcmVmX3N0Y2IpKSB7CisJCS8qIENsZWFuIHVwIGNvZGUgZm9yIGZyZWVpbmcgYXNz
b2MgdGhhdCBsZWZ0IGJlaGluZCBhIHBkYXBpLi4KKwkJICogbWF5YmUgYSBwZWVyIGluIEVFT1Ig
dGhhdCBqdXN0IGNsb3NlZCBhZnRlciBzZW5kaW5nIGFuZAorCQkgKiBuZXZlciBpbmRpY2F0ZWQg
YSBFT1IuCisJCSAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7CisJCQlob2xkX3Jsb2NrID0g
MTsKKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCQl9CisJCWNvbnRyb2wtPmhlbGRfbGVu
Z3RoID0gMDsKKwkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCS8qIEhtbSB0aGVyZSBpcyBkYXRh
IGhlcmUgLi4gZml4ICovCisJCQlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJCQlpbnQgY250ID0gMDsK
KwkJCW1fdG1wID0gY29udHJvbC0+ZGF0YTsKKwkJCXdoaWxlIChtX3RtcCkgeworCQkJCWNudCAr
PSBTQ1RQX0JVRl9MRU4obV90bXApOworCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBO
VUxMKSB7CisJCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fdG1wOworCQkJCQljb250cm9sLT5l
bmRfYWRkZWQgPSAxOworCQkJCX0KKwkJCQltX3RtcCA9IFNDVFBfQlVGX05FWFQobV90bXApOwor
CQkJfQorCQkJY29udHJvbC0+bGVuZ3RoID0gY250OworCQl9IGVsc2UgeworCQkJLyogcmVtb3Zl
IGl0ICovCisJCQlUQUlMUV9SRU1PVkUoJmlucC0+cmVhZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7
CisJCQkvKiBBZGQgYmFjayBhbnkgaGlkZGVuZCBkYXRhICovCisJCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoY29udHJvbC0+d2hvRnJvbSk7CisJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250
cm9sKTsKKwkJfQorCQlpZiAoaG9sZF9ybG9jaykgeworCQkJaG9sZF9ybG9jayA9IDA7CisJCQlT
Q1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQl9CisJCWdvdG8gcmVzdGFydDsKKwl9CisJaWYg
KChjb250cm9sLT5sZW5ndGggPT0gMCkgJiYKKwkgICAgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAx
KSkgeworCQkvKiBEbyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIChjb250cm9sLT5wZGFwaV9h
Ym9ydGVkID09IDEpPyAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7CisJCQlob2xkX3Jsb2Nr
ID0gMTsKKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCQl9CisJCVRBSUxRX1JFTU9WRSgm
aW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJaWYgKGNvbnRyb2wtPmRhdGEpIHsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygiY29udHJvbC0+ZGF0YSBub3QgbnVsbCBidXQg
Y29udHJvbC0+bGVuZ3RoID09IDAiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiU3RyYW5nZSwg
ZGF0YSBsZWZ0IGluIHRoZSBjb250cm9sIGJ1ZmZlci4gQ2xlYW5pbmcgdXAuXG4iKTsKKwkJCXNj
dHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKKwkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOworI2Vu
ZGlmCisJCX0KKwkJaWYgKGNvbnRyb2wtPmF1eF9kYXRhKSB7CisJCQlzY3RwX21fZnJlZSAoY29u
dHJvbC0+YXV4X2RhdGEpOworCQkJY29udHJvbC0+YXV4X2RhdGEgPSBOVUxMOworCQl9CisjaWZk
ZWYgSU5WQVJJQU5UUworCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisJCQlwYW5pYygiQWJv
dXQgdG8gZnJlZSBjdGw6JXAgc286JXAgYW5kIGl0cyBpbiAlZCIsCisJCQkgICAgICBjb250cm9s
LCBzbywgY29udHJvbC0+b25fc3RybV9xKTsKKwkJfQorI2VuZGlmCisJCXNjdHBfZnJlZV9yZW1v
dGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29u
dHJvbCk7CisJCWlmIChob2xkX3Jsb2NrKSB7CisJCQlob2xkX3Jsb2NrID0gMDsKKwkJCVNDVFBf
SU5QX1JFQURfVU5MT0NLKGlucCk7CisJCX0KKwkJZ290byByZXN0YXJ0OworCX0KKwlpZiAoY29u
dHJvbC0+bGVuZ3RoID09IDApIHsKKwkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpKSAmJgorCQkgICAgKGZpbGxpbmdfc2luZm8pKSB7
CisJCQkvKiBmaW5kIGEgbW9yZSBzdWl0YWJsZSBvbmUgdGhlbiB0aGlzICovCisJCQljdGwgPSBU
QUlMUV9ORVhUKGNvbnRyb2wsIG5leHQpOworCQkJd2hpbGUgKGN0bCkgeworCQkJCWlmICgoY3Rs
LT5zdGNiICE9IGNvbnRyb2wtPnN0Y2IpICYmIChjdGwtPmxlbmd0aCkgJiYKKwkJCQkgICAgKGN0
bC0+c29tZV90YWtlbiB8fAorCQkJCSAgICAgKGN0bC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FU
SU9OKSB8fAorCQkJCSAgICAgKChjdGwtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJgorCQkJCSAg
ICAgIChjdGwtPnN0Y2ItPmFzb2Muc3RybWluW2N0bC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9z
dGFydGVkID09IDApKSkKKwkJCQkJKSB7CisJCQkJCS8qLQorCQkJCQkgKiBJZiB3ZSBoYXZlIGEg
ZGlmZmVyZW50IFRDQiBuZXh0LCBhbmQgdGhlcmUgaXMgZGF0YQorCQkJCQkgKiBwcmVzZW50LiBJ
ZiB3ZSBoYXZlIGFscmVhZHkgdGFrZW4gc29tZSAocGRhcGkpLCBPUiB3ZSBjYW4KKwkJCQkJICog
cmVmIHRoZSB0Y2IgYW5kIG5vIGRlbGl2ZXJ5IGFzIHN0YXJ0ZWQgb24gdGhpcyBzdHJlYW0sIHdl
CisJCQkJCSAqIHRha2UgaXQuIE5vdGUgd2UgYWxsb3cgYSBub3RpZmljYXRpb24gb24gYSBkaWZm
ZXJlbnQKKwkJCQkJICogYXNzb2MgdG8gYmUgZGVsaXZlcmVkLi4KKwkJCQkJICovCisJCQkJCWNv
bnRyb2wgPSBjdGw7CisJCQkJCWdvdG8gZm91bmRfb25lOworCQkJCX0gZWxzZSBpZiAoKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpKSAmJgor
CQkJCQkgICAoY3RsLT5sZW5ndGgpICYmCisJCQkJCSAgICgoY3RsLT5zb21lX3Rha2VuKSB8fAor
CQkJCQkgICAgKChjdGwtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJgorCQkJCQkgICAgICgoY3Rs
LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pID09IDApICYmCisJCQkJCSAgICAgKGN0bC0+
c3RjYi0+YXNvYy5zdHJtaW5bY3RsLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPT0g
MCkpKSkgeworCQkJCQkvKi0KKwkJCQkJICogSWYgd2UgaGF2ZSB0aGUgc2FtZSB0Y2IsIGFuZCB0
aGVyZSBpcyBkYXRhIHByZXNlbnQsIGFuZCB3ZQorCQkJCQkgKiBoYXZlIHRoZSBzdHJtIGludGVy
bGVhdmUgZmVhdHVyZSBwcmVzZW50LiBUaGVuIGlmIHdlIGhhdmUKKwkJCQkJICogdGFrZW4gc29t
ZSAocGRhcGkpIG9yIHdlIGNhbiByZWZlciB0byB0aHQgdGNiIEFORCB3ZSBoYXZlCisJCQkJCSAq
IG5vdCBzdGFydGVkIGEgZGVsaXZlcnkgZm9yIHRoaXMgc3RyZWFtLCB3ZSBjYW4gdGFrZSBpdC4K
KwkJCQkJICogTm90ZSB3ZSBkbyBOT1QgYWxsb3cgYSBub3RpZmljYWl0b24gb24gdGhlIHNhbWUg
YXNzb2MgdG8KKwkJCQkJICogYmUgZGVsaXZlcmVkLgorCQkJCQkgKi8KKwkJCQkJY29udHJvbCA9
IGN0bDsKKwkJCQkJZ290byBmb3VuZF9vbmU7CisJCQkJfQorCQkJCWN0bCA9IFRBSUxRX05FWFQo
Y3RsLCBuZXh0KTsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBpZiB3ZSByZWFjaCBoZXJlLCBub3Qg
c3VpdGFibGUgcmVwbGFjZW1lbnQgaXMgYXZhaWxhYmxlCisJCSAqIDxvcj4gZnJhZ21lbnQgaW50
ZXJsZWF2ZSBpcyBOT1Qgb24uIFNvIHN0dWZmIHRoZSBzYl9jYworCQkgKiBpbnRvIHRoZSBvdXIg
aGVsZCBjb3VudCwgYW5kIGl0cyB0aW1lIHRvIHNsZWVwIGFnYWluLgorCQkgKi8KKwkJaGVsZF9s
ZW5ndGggPSBzby0+c29fcmN2LnNiX2NjOworCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IHNvLT5z
b19yY3Yuc2JfY2M7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJLyogQ2xlYXIgdGhlIGhlbGQgbGVu
Z3RoIHNpbmNlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkICovCisJY29udHJvbC0+aGVsZF9s
ZW5ndGggPSAwOworIGZvdW5kX29uZToKKwkvKgorCSAqIElmIHdlIHJlYWNoIGhlcmUsIGNvbnRy
b2wgaGFzIGEgc29tZSBkYXRhIGZvciB1cyB0byByZWFkIG9mZi4KKwkgKiBOb3RlIHRoYXQgc3Rj
YiBDT1VMRCBiZSBOVUxMLgorCSAqLworCWlmIChob2xkX3Jsb2NrID09IDApIHsKKwkJaG9sZF9y
bG9jayA9IDE7CisJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCX0KKwljb250cm9sLT5zb21l
X3Rha2VuKys7CisJc3RjYiA9IGNvbnRyb2wtPnN0Y2I7CisJaWYgKHN0Y2IpIHsKKwkJaWYgKChj
b250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKKwkJICAgIChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkpIHsKKwkJCWlmIChmcmVlY250X2FwcGxp
ZWQgPT0gMCkKKwkJCQlzdGNiID0gTlVMTDsKKwkJfSBlbHNlIGlmIChjb250cm9sLT5kb19ub3Rf
cmVmX3N0Y2IgPT0gMCkgeworCQkJLyogeW91IGNhbid0IGZyZWUgaXQgb24gbWUgcGxlYXNlICov
CisJCQkvKgorCQkJICogVGhlIGxvY2sgb24gdGhlIHNvY2tldCBidWZmZXIgcHJvdGVjdHMgdXMg
c28gdGhlCisJCQkgKiBmcmVlIGNvZGUgd2lsbCBzdG9wLiBCdXQgc2luY2Ugd2UgdXNlZCB0aGUg
c29ja2V0YnVmCisJCQkgKiBsb2NrIGFuZCB0aGUgc2VuZGVyIHVzZXMgdGhlIHRjYl9sb2NrIHRv
IGluY3JlbWVudCwKKwkJCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBhdG9taWMgYWRkIHRvIHRoZSBy
ZWZjbnQKKwkJCSAqLworCQkJaWYgKGZyZWVjbnRfYXBwbGllZCkgeworI2lmZGVmIElOVkFSSUFO
VFMKKwkJCQlwYW5pYygicmVmY250IGFscmVhZHkgaW5jcmVtZW50ZWQiKTsKKyNlbHNlCisJCQkJ
U0NUUF9QUklOVEYoInJlZmNudCBhbHJlYWR5IGluY3JlbWVudGVkP1xuIik7CisjZW5kaWYKKwkJ
CX0gZWxzZSB7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJ
CQlmcmVlY250X2FwcGxpZWQgPSAxOworCQkJfQorCQkJLyoKKwkJCSAqIFNldHVwIHRvIHJlbWVt
YmVyIGhvdyBtdWNoIHdlIGhhdmUgbm90IHlldCB0b2xkCisJCQkgKiB0aGUgcGVlciBvdXIgcndu
ZCBoYXMgb3BlbmVkIHVwLiBOb3RlIHdlIGdyYWIKKwkJCSAqIHRoZSB2YWx1ZSBmcm9tIHRoZSB0
Y2IgZnJvbSBsYXN0IHRpbWUuCisJCQkgKiBOb3RlIHRvbyB0aGF0IHNhY2sgc2VuZGluZyBjbGVh
cnMgdGhpcyB3aGVuIGEgc2FjaworCQkJICogaXMgc2VudCwgd2hpY2ggaXMgZmluZS4gT25jZSB3
ZSBoaXQgdGhlIHJ3bmRfcmVxLAorCQkJICogd2UgdGhlbiB3aWxsIGdvIHRvIHRoZSBzY3RwX3Vz
ZXJfcmN2ZCgpIHRoYXQgd2lsbAorCQkJICogbm90IGxvY2sgdW50aWwgaXQgS05PV3MgaXQgTVVT
VCBzZW5kIGEgV1VQLVNBQ0suCisJCQkgKi8KKwkJCWZyZWVkX3NvX2ZhciA9IHN0Y2ItPmZyZWVk
X2J5X3NvcmN2X3NpbmNlbGFzdDsKKwkJCXN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdCA9
IDA7CisJCX0KKwl9CisJaWYgKHN0Y2IgJiYKKwkgICAgKChjb250cm9sLT5zcGVjX2ZsYWdzICYg
TV9OT1RJRklDQVRJT04pID09IDApICYmCisJICAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9
PSAwKSB7CisJCXN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0uZGVsaXZl
cnlfc3RhcnRlZCA9IDE7CisJfQorCisJLyogRmlyc3QgbGV0cyBnZXQgb2ZmIHRoZSBzaW5mbyBh
bmQgc29ja2FkZHIgaW5mbyAqLworCWlmICgoc2luZm8gIT0gTlVMTCkgJiYgKGZpbGxpbmdfc2lu
Zm8gIT0gMCkpIHsKKwkJc2luZm8tPnNpbmZvX3N0cmVhbSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVh
bTsKKwkJc2luZm8tPnNpbmZvX3NzbiA9ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJCXNpbmZv
LT5zaW5mb19mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOworCQlzaW5mby0+c2luZm9fcHBp
ZCA9IGNvbnRyb2wtPnNpbmZvX3BwaWQ7CisJCXNpbmZvLT5zaW5mb19jb250ZXh0ID1jb250cm9s
LT5zaW5mb19jb250ZXh0OworCQlzaW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IGNvbnRyb2wtPnNp
bmZvX3RpbWV0b2xpdmU7CisJCXNpbmZvLT5zaW5mb190c24gPSBjb250cm9sLT5zaW5mb190c247
CisJCXNpbmZvLT5zaW5mb19jdW10c24gPSBjb250cm9sLT5zaW5mb19jdW10c247CisJCXNpbmZv
LT5zaW5mb19hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lkOworCQlueHQgPSBUQUlM
UV9ORVhUKGNvbnRyb2wsIG5leHQpOworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfRVhUX1JDVklORk8pIHx8CisJCSAgICBzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTykpIHsKKwkJCXN0cnVjdCBzY3RwX2V4dHJjdmlu
Zm8gKnNfZXh0cmE7CisJCQlzX2V4dHJhID0gKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKilzaW5m
bzsKKwkJCWlmICgobnh0KSAmJgorCQkJICAgIChueHQtPmxlbmd0aCkpIHsKKwkJCQlzX2V4dHJh
LT5zZXJpbmZvX25leHRfZmxhZ3MgPSBTQ1RQX05FWFRfTVNHX0FWQUlMOworCQkJCWlmIChueHQt
PnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJc19leHRyYS0+c2VyaW5mb19u
ZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEOworCQkJCX0KKwkJCQlpZiAo
bnh0LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKKwkJCQkJc19leHRyYS0+c2VyaW5m
b19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJ
CQlzX2V4dHJhLT5zZXJpbmZvX25leHRfYWlkID0gbnh0LT5zaW5mb19hc3NvY19pZDsKKwkJCQlz
X2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gbnh0LT5sZW5ndGg7CisJCQkJc19leHRyYS0+
c2VyaW5mb19uZXh0X3BwaWQgPSBueHQtPnNpbmZvX3BwaWQ7CisJCQkJc19leHRyYS0+c2VyaW5m
b19uZXh0X3N0cmVhbSA9IG54dC0+c2luZm9fc3RyZWFtOworCQkJCWlmIChueHQtPnRhaWxfbWJ1
ZiAhPSBOVUxMKSB7CisJCQkJCWlmIChueHQtPmVuZF9hZGRlZCkgeworCQkJCQkJc19leHRyYS0+
c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNDT01QTEVURTsKKwkJCQkJfQor
CQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgZXhwbGljaXRseSAwIHRoaXMsIHNpbmNlIHRo
ZSBtZW1jcHkgZ290CisJCQkJICogc29tZSBvdGhlciB0aGluZ3MgYmV5b25kIHRoZSBvbGRlciBz
aW5mb18KKwkJCQkgKiB0aGF0IGlzIG9uIHRoZSBjb250cm9sJ3Mgc3RydWN0dXJlIDotRAorCQkJ
CSAqLworCQkJCW54dCA9IE5VTEw7CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzID0g
U0NUUF9OT19ORVhUX01TRzsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfYWlkID0gMDsKKwkJ
CQlzX2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gMDsKKwkJCQlzX2V4dHJhLT5zZXJpbmZv
X25leHRfcHBpZCA9IDA7CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X3N0cmVhbSA9IDA7CisJ
CQl9CisJCX0KKwkJLyoKKwkJICogdXBkYXRlIG9mZiB0aGUgcmVhbCBjdXJyZW50IGN1bS1hY2ss
IGlmIHdlIGhhdmUgYW4gc3RjYi4KKwkJICovCisJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9z
dGNiID09IDApICYmIHN0Y2IpCisJCQlzaW5mby0+c2luZm9fY3VtdHNuID0gc3RjYi0+YXNvYy5j
dW11bGF0aXZlX3RzbjsKKwkJLyoKKwkJICogbWFzayBvZmYgdGhlIGhpZ2ggYml0cywgd2Uga2Vl
cCB0aGUgYWN0dWFsIGNodW5rIGJpdHMgaW4KKwkJICogdGhlcmUuCisJCSAqLworCQlzaW5mby0+
c2luZm9fZmxhZ3MgJj0gMHgwMGZmOworCQlpZiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgp
ICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJc2luZm8tPnNpbmZvX2ZsYWdzIHw9IFNDVFBf
VU5PUkRFUkVEOworCQl9CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJeworCQlp
bnQgaW5kZXgsIG5ld2luZGV4OworCQlzdHJ1Y3Qgc2N0cF9wY2J0c25fcmxvZyAqZW50cnk7CisJ
CWRvIHsKKwkJCWluZGV4ID0gaW5wLT5yZWFkbG9nX2luZGV4OworCQkJbmV3aW5kZXggPSBpbmRl
eCArIDE7CisJCQlpZiAobmV3aW5kZXggPj0gU0NUUF9SRUFEX0xPR19TSVpFKSB7CisJCQkJbmV3
aW5kZXggPSAwOworCQkJfQorCQl9IHdoaWxlIChhdG9taWNfY21wc2V0X2ludCgmaW5wLT5yZWFk
bG9nX2luZGV4LCBpbmRleCwgbmV3aW5kZXgpID09IDApOworCQllbnRyeSA9ICZpbnAtPnJlYWRs
b2dbaW5kZXhdOworCQllbnRyeS0+dnRhZyA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lkOworCQll
bnRyeS0+c3RybSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKKwkJZW50cnktPnNlcSA9ICh1aW50
MTZfdCljb250cm9sLT5taWQ7CisJCWVudHJ5LT5zeiA9IGNvbnRyb2wtPmxlbmd0aDsKKwkJZW50
cnktPmZsZ3MgPSBjb250cm9sLT5zaW5mb19mbGFnczsKKwl9CisjZW5kaWYKKwlpZiAoKGZyb21s
ZW4gPiAwKSAmJiAoZnJvbSAhPSBOVUxMKSkgeworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9y
ZTsKKwkJc2l6ZV90IGxlbjsKKworCQlzd2l0Y2ggKGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2Fk
ZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJ
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCXN0b3JlLnNpbjYgPSBjb250
cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjY7CisJCQkJc3RvcmUuc2luNi5zaW42X3BvcnQg
PSBjb250cm9sLT5wb3J0X2Zyb207CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJ
CQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgeworCQkJCQlsZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCWluNl9zaW5fMl92NG1hcHNpbjYoJmNvbnRy
b2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luLAorCQkJCQkJCSAgICAmc3RvcmUuc2luNik7CisJ
CQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOworCQkJCX0gZWxz
ZSB7CisJCQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJCQlzdG9yZS5z
aW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjsKKwkJCQkJc3RvcmUuc2luLnNp
bl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOworCQkJCX0KKyNlbHNlCisJCQkJbGVuID0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQkJc3RvcmUuc2luID0gY29udHJvbC0+d2hvRnJv
bS0+cm8uX2xfYWRkci5zaW47CisJCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gY29udHJvbC0+cG9y
dF9mcm9tOworI2VuZGlmCisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKKwkJCQlzdG9yZS5zY29ubiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIu
c2Nvbm47CisJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IGNvbnRyb2wtPnBvcnRfZnJvbTsK
KwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlsZW4gPSAwOworCQkJCWJyZWFr
OworCQl9CisJCW1lbWNweShmcm9tLCAmc3RvcmUsIG1pbigoc2l6ZV90KWZyb21sZW4sIGxlbikp
OworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKyNpZmRlZiBJTkVUNgorCQl7
CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGxzYTYsICpmcm9tNjsKKworCQkJZnJvbTYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKWZyb207CisJCQlzY3RwX3JlY292ZXJfc2NvcGVfbWFjKGZyb202
LCAoJmxzYTYpKTsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwl9CisJaWYgKGhvbGRfcmxvY2spIHsK
KwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaG9sZF9ybG9jayA9IDA7CisJfQorCWlm
IChob2xkX3NibG9jaykgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRf
c2Jsb2NrID0gMDsKKwl9CisJLyogbm93IGNvcHkgb3V0IHdoYXQgZGF0YSB3ZSBjYW4gKi8KKwlp
ZiAobXAgPT0gTlVMTCkgeworCQkvKiBjb3B5IG91dCBlYWNoIG1idWYgaW4gdGhlIGNoYWluIHVw
IHRvIGxlbmd0aCAqLworCWdldF9tb3JlX2RhdGE6CisJCW0gPSBjb250cm9sLT5kYXRhOworCQl3
aGlsZSAobSkgeworCQkJLyogTW92ZSBvdXQgYWxsIHdlIGNhbiAqLworI2lmIGRlZmluZWQoX19B
UFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCWNwX2xlbiA9IChpbnQpdWlv
LT51aW9fcmVzaWQ7CisjZWxzZQorCQkJY3BfbGVuID0gKGludCl1aW9fcmVzaWQodWlvKTsKKyNl
bmRpZgorI2Vsc2UKKwkJCWNwX2xlbiA9IChpbnQpdWlvLT51aW9fcmVzaWQ7CisjZW5kaWYKKwkJ
CW15X2xlbiA9IChpbnQpU0NUUF9CVUZfTEVOKG0pOworCQkJaWYgKGNwX2xlbiA+IG15X2xlbikg
eworCQkJCS8qIG5vdCBlbm91Z2ggaW4gdGhpcyBidWYgKi8KKwkJCQljcF9sZW4gPSBteV9sZW47
CisJCQl9CisJCQlpZiAoaG9sZF9ybG9jaykgeworCQkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlu
cCk7CisJCQkJaG9sZF9ybG9jayA9IDA7CisJCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
CQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDApOworI2VuZGlmCisJCQlpZiAoY3BfbGVuID4gMCkK
KwkJCQllcnJvciA9IHVpb21vdmUobXRvZChtLCBjaGFyICopLCBjcF9sZW4sIHVpbyk7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pCisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAwKTsKKyNlbmRpZgor
CQkJLyogcmUtcmVhZCAqLworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9HT05FKSB7CisJCQkJZ290byByZWxlYXNlOworCQkJfQorCisJCQlpZiAoKGNvbnRy
b2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNiICYmCisJCQkgICAgc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCQlub19yY3ZfbmVlZGVk
ID0gMTsKKwkJCX0KKwkJCWlmIChlcnJvcikgeworCQkJCS8qIGVycm9yIHdlIGFyZSBvdXQgb2Yg
aGVyZSAqLworCQkJCWdvdG8gcmVsZWFzZTsKKwkJCX0KKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhp
bnApOworCQkJaG9sZF9ybG9jayA9IDE7CisJCQlpZiAoY3BfbGVuID09IFNDVFBfQlVGX0xFTiht
KSkgeworCQkJCWlmICgoU0NUUF9CVUZfTkVYVChtKT09IE5VTEwpICYmCisJCQkJICAgIChjb250
cm9sLT5lbmRfYWRkZWQpKSB7CisJCQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOworCQkJCQlpZiAo
KGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAgJiYKKwkJCQkJICAgIChjb250cm9sLT5z
dGNiICE9IE5VTEwpICYmCisJCQkJCSAgICAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElG
SUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5zdGNiLT5hc29jLnN0cm1pbltjb250cm9s
LT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCQkJCX0KKwkJCQlpZiAoY29u
dHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQkJCW91dF9mbGFncyB8PSBN
U0dfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJCQkvKiB3ZSBhdGUgdXAgdGhlIG1idWYgKi8KKwkJ
CQlpZiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgeworCQkJCQkvKiBqdXN0IGxvb2tpbmcgKi8KKwkJ
CQkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJCQkJCWNvcGllZF9zb19mYXIgKz0gY3BfbGVuOwor
CQkJCX0gZWxzZSB7CisJCQkJCS8qIGRpc3Bvc2Ugb2YgdGhlIG1idWYgKi8KKwkJCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19FTkFC
TEUpIHsKKwkJCQkJCXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsCisJCQkJCQkgICBjb250cm9sLT5k
b19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsIFNDVFBfQlVGX0xFTiht
KSk7CisJCQkJCX0KKwkJCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgc3RjYiwgJnNvLT5zb19yY3Ys
IG0pOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9zYmxvZygmc28tPnNvX3JjdiwKKwkJ
CQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVT
VUxULCAwKTsKKwkJCQkJfQorCQkJCQljb3BpZWRfc29fZmFyICs9IGNwX2xlbjsKKwkJCQkJZnJl
ZWRfc29fZmFyICs9IGNwX2xlbjsKKwkJCQkJZnJlZWRfc29fZmFyICs9IE1TSVpFOworCQkJCQlh
dG9taWNfc3VidHJhY3RfaW50KCZjb250cm9sLT5sZW5ndGgsIGNwX2xlbik7CisJCQkJCWNvbnRy
b2wtPmRhdGEgPSBzY3RwX21fZnJlZShtKTsKKwkJCQkJbSA9IGNvbnRyb2wtPmRhdGE7CisJCQkJ
CS8qIGJlZW4gdGhyb3VnaCBpdCBhbGwsIG11c3QgaG9sZCBzYiBsb2NrIG9rIHRvIG51bGwgdGFp
bCAqLworCQkJCQlpZiAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSB7CisjaWZkZWYgSU5WQVJJQU5U
UworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCQlpZiAoKGNvbnRyb2wtPmVuZF9hZGRl
ZCA9PSAwKSB8fAorCQkJCQkJICAgIChUQUlMUV9ORVhUKGNvbnRyb2wsIG5leHQpID09IE5VTEwp
KSB7CisJCQkJCQkJLyogSWYgdGhlIGVuZCBpcyBub3QgYWRkZWQsIE9SIHRoZQorCQkJCQkJCSAq
IG5leHQgaXMgTk9UIG51bGwgd2UgTVVTVCBoYXZlIHRoZSBsb2NrLgorCQkJCQkJCSAqLworCQkJ
CQkJCWlmIChtdHhfb3duZWQoJmlucC0+aW5wX3JkYXRhX210eCkgPT0gMCkgeworCQkJCQkJCQlw
YW5pYygiSG1tIHdlIGRvbid0IG93biB0aGUgbG9jaz8iKTsKKwkJCQkJCQl9CisJCQkJCQl9Cisj
ZW5kaWYKKyNlbmRpZgorCQkJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gTlVMTDsKKyNpZmRlZiBJ
TlZBUklBTlRTCisJCQkJCQlpZiAoKGNvbnRyb2wtPmVuZF9hZGRlZCkgJiYgKChvdXRfZmxhZ3Mg
JiBNU0dfRU9SKSA9PSAwKSkgeworCQkJCQkJCXBhbmljKCJlbmRfYWRkZWQsIG5vdGhpbmcgbGVm
dCBhbmQgbm8gTVNHX0VPUiIpOworCQkJCQkJfQorI2VuZGlmCisJCQkJCX0KKwkJCQl9CisJCQl9
IGVsc2UgeworCQkJCS8qIERvIHdlIG5lZWQgdG8gdHJpbSB0aGUgbWJ1Zj8gKi8KKwkJCQlpZiAo
Y29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQkJCW91dF9mbGFncyB8
PSBNU0dfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJCQlpZiAoKGluX2ZsYWdzICYgTVNHX1BFRUsp
ID09IDApIHsKKwkJCQkJU0NUUF9CVUZfUkVTVl9VRihtLCBjcF9sZW4pOworCQkJCQlTQ1RQX0JV
Rl9MRU4obSkgLT0gY3BfbGVuOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9zYmxvZygm
c28tPnNvX3JjdiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0df
U0JGUkVFLCBjcF9sZW4pOworCQkJCQl9CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnNvLT5z
b19yY3Yuc2JfY2MsIGNwX2xlbik7CisJCQkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNi
ID09IDApICYmCisJCQkJCSAgICBzdGNiKSB7CisJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnNiX2NjLCBjcF9sZW4pOworCQkJCQl9CisJCQkJCWNvcGllZF9zb19mYXIgKz0g
Y3BfbGVuOworCQkJCQlmcmVlZF9zb19mYXIgKz0gY3BfbGVuOworCQkJCQlmcmVlZF9zb19mYXIg
Kz0gTVNJWkU7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2
LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLAorCQkJCQkJCSAgIFNDVFBfTE9H
X1NCUkVTVUxULCAwKTsKKwkJCQkJfQorCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZjb250cm9s
LT5sZW5ndGgsIGNwX2xlbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29waWVkX3NvX2ZhciArPSBj
cF9sZW47CisJCQkJfQorCQkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQo
QVBQTEVfTEVPUEFSRCkKKwkJCWlmICgob3V0X2ZsYWdzICYgTVNHX0VPUikgfHwgKHVpby0+dWlv
X3Jlc2lkID09IDApKSB7CisjZWxzZQorCQkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB8fCAo
dWlvX3Jlc2lkKHVpbykgPT0gMCkpIHsKKyNlbmRpZgorI2Vsc2UKKwkJCWlmICgob3V0X2ZsYWdz
ICYgTVNHX0VPUikgfHwgKHVpby0+dWlvX3Jlc2lkID09IDApKSB7CisjZW5kaWYKKwkJCQlicmVh
azsKKwkJCX0KKwkJCWlmICgoKHN0Y2IpICYmIChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSAm
JgorCQkJICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKKwkJCSAgICAoZnJl
ZWRfc29fZmFyID49IHJ3bmRfcmVxKSkgeworCQkJCXNjdHBfdXNlcl9yY3ZkKHN0Y2IsICZmcmVl
ZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsKKwkJCX0KKwkJfSAvKiBlbmQgd2hpbGUo
bSkgKi8KKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGxvb2tlZCBhdCBpdCBhbGwg
YW5kIHdlIGVpdGhlciBoYXZlCisJCSAqIGEgTVNHX0VPUi9vciByZWFkIGFsbCB0aGUgdXNlciB3
YW50cy4uLiA8T1I+CisJCSAqIGNvbnRyb2wtPmxlbmd0aCA9PSAwLgorCQkgKi8KKwkJaWYgKChv
dXRfZmxhZ3MgJiBNU0dfRU9SKSAmJiAoKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApKSB7CisJ
CQkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgY29udHJvbCAqLworCQkJaWYgKGNvbnRyb2wtPmxl
bmd0aCA9PSAwKSB7CisJCQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJCXBhbmljKCJjb250cm9sLT5kYXRhIG5vdCBudWxsIGF0IHJlYWQgZW9yPyIpOworI2Vs
c2UKKwkJCQkJU0NUUF9QUklOVEYoIlN0cmFuZ2UsIGRhdGEgbGVmdCBpbiB0aGUgY29udHJvbCBi
dWZmZXIgLi4gaW52YXJpZW50cyB3b3VsZCBwYW5pYz9cbiIpOworCQkJCQlzY3RwX21fZnJlZW0o
Y29udHJvbC0+ZGF0YSk7CisJCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOworI2VuZGlmCisJCQkJ
fQorCQkJZG9uZV93aXRoX2NvbnRyb2w6CisJCQkJaWYgKGhvbGRfcmxvY2sgPT0gMCkgeworCQkJ
CQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCQkJaG9sZF9ybG9jayA9IDE7CisJCQkJfQor
CQkJCVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCQkv
KiBBZGQgYmFjayBhbnkgaGlkZGVuZCBkYXRhICovCisJCQkJaWYgKGNvbnRyb2wtPmhlbGRfbGVu
Z3RoKSB7CisJCQkJCWhlbGRfbGVuZ3RoID0gMDsKKwkJCQkJY29udHJvbC0+aGVsZF9sZW5ndGgg
PSAwOworCQkJCQl3YWtldXBfcmVhZF9zb2NrZXQgPSAxOworCQkJCX0KKwkJCQlpZiAoY29udHJv
bC0+YXV4X2RhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWUgKGNvbnRyb2wtPmF1eF9kYXRhKTsKKwkJ
CQkJY29udHJvbC0+YXV4X2RhdGEgPSBOVUxMOworCQkJCX0KKwkJCQlub19yY3ZfbmVlZGVkID0g
Y29udHJvbC0+ZG9fbm90X3JlZl9zdGNiOworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250
cm9sLT53aG9Gcm9tKTsKKwkJCQljb250cm9sLT5kYXRhID0gTlVMTDsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQkJCQlwYW5pYygiQWJvdXQgdG8g
ZnJlZSBjdGw6JXAgc286JXAgYW5kIGl0cyBpbiAlZCIsCisJCQkJCSAgICAgIGNvbnRyb2wsIHNv
LCBjb250cm9sLT5vbl9zdHJtX3EpOworCQkJCX0KKyNlbmRpZgorCQkJCXNjdHBfZnJlZV9hX3Jl
YWRxKHN0Y2IsIGNvbnRyb2wpOworCQkJCWNvbnRyb2wgPSBOVUxMOworCQkJCWlmICgoZnJlZWRf
c29fZmFyID49IHJ3bmRfcmVxKSAmJgorCQkJCSAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkKKwkJ
CQkJc2N0cF91c2VyX3JjdmQoc3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9sZF9ybG9jaywgcnduZF9y
ZXEpOworCisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogVGhlIHVzZXIgZGlkIG5vdCByZWFk
IGFsbCBvZiB0aGlzCisJCQkJICogbWVzc2FnZSwgdHVybiBvZmYgdGhlIHJldHVybmVkIE1TR19F
T1IKKwkJCQkgKiBzaW5jZSB3ZSBhcmUgbGVhdmluZyBtb3JlIGJlaGluZCBvbiB0aGUKKwkJCQkg
KiBjb250cm9sIHRvIHJlYWQuCisJCQkJICovCisjaWZkZWYgSU5WQVJJQU5UUworCQkJCWlmIChj
b250cm9sLT5lbmRfYWRkZWQgJiYKKwkJCQkgICAgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkgJiYK
KwkJCQkgICAgKGNvbnRyb2wtPnRhaWxfbWJ1ZiA9PSBOVUxMKSkgeworCQkJCQlwYW5pYygiR2Fr
LCBjb250cm9sLT5sZW5ndGggaXMgY29ycnVwdD8iKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlub19y
Y3ZfbmVlZGVkID0gY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiOworCQkJCW91dF9mbGFncyAmPSB+
TVNHX0VPUjsKKwkJCX0KKwkJfQorCQlpZiAob3V0X2ZsYWdzICYgTVNHX0VPUikgeworCQkJZ290
byByZWxlYXNlOworCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBM
RV9MRU9QQVJEKQorCQlpZiAoKHVpby0+dWlvX3Jlc2lkID09IDApIHx8CisjZWxzZQorCQlpZiAo
KHVpb19yZXNpZCh1aW8pID09IDApIHx8CisjZW5kaWYKKyNlbHNlCisJCWlmICgodWlvLT51aW9f
cmVzaWQgPT0gMCkgfHwKKyNlbmRpZgorCQkgICAgKChpbl9lZW9yX21vZGUpICYmCisJCSAgICAg
KGNvcGllZF9zb19mYXIgPj0gKHVpbnQzMl90KW1heChzby0+c29fcmN2LnNiX2xvd2F0LCAxKSkp
KSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKwkJLyoKKwkJICogSWYgSSBoaXQgaGVyZSB0aGUg
cmVjZWl2ZXIgd2FudHMgbW9yZSBhbmQgdGhpcyBtZXNzYWdlIGlzCisJCSAqIE5PVCBkb25lIChw
ZC1hcGkpLiBTbyB0d28gcXVlc3Rpb25zLiBDYW4gd2UgYmxvY2s/IGlmIG5vdAorCQkgKiB3ZSBh
cmUgZG9uZS4gRGlkIHRoZSB1c2VyIE5PVCBzZXQgTVNHX1dBSVRBTEw/CisJCSAqLworCQlpZiAo
YmxvY2tfYWxsb3dlZCA9PSAwKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKwkJLyoKKwkJICog
V2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGEgYSBmZXcgdGhpbmdzOiAtIFdlIGRvbid0CisJ
CSAqIHNidW5sb2NrKCkgc28gd2UgZG9uJ3QgZ2V0IHNvbWVvbmUgZWxzZSByZWFkaW5nLiAtIFdl
CisJCSAqIG11c3QgYmUgc3VyZSB0byBhY2NvdW50IGZvciB0aGUgY2FzZSB3aGVyZSB3aGF0IGlz
IGFkZGVkCisJCSAqIGlzIE5PVCB0byBvdXIgY29udHJvbCB3aGVuIHdlIHdha2V1cC4KKwkJICov
CisKKwkJLyogRG8gd2UgbmVlZCB0byB0ZWxsIHRoZSB0cmFuc3BvcnQgYSByd25kIHVwZGF0ZSBt
aWdodCBiZQorCQkgKiBuZWVkZWQgYmVmb3JlIHdlIGdvIHRvIHNsZWVwPworCQkgKi8KKwkJaWYg
KCgoc3RjYikgJiYgKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApICYmCisJCSAgICAoKGZyZWVk
X3NvX2ZhciA+PSByd25kX3JlcSkgJiYKKwkJICAgICAoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNi
ID09IDApICYmCisJCSAgICAgKG5vX3Jjdl9uZWVkZWQgPT0gMCkpKSB7CisJCQlzY3RwX3VzZXJf
cmN2ZChzdGNiLCAmZnJlZWRfc29fZmFyLCBob2xkX3Jsb2NrLCByd25kX3JlcSk7CisJCX0KKwl3
YWl0X3NvbWVfbW9yZToKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCWlmIChzby0+c29fcmN2
LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKyNl
bHNlCisJCWlmIChzby0+c29fc3RhdGUgJiBTU19DQU5UUkNWTU9SRSkgeworCQkJZ290byByZWxl
YXNlOworCQl9CisjZW5kaWYKKworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfU09DS0VUX0dPTkUpCisJCQlnb3RvIHJlbGVhc2U7CisKKwkJaWYgKGhvbGRfcmxvY2sgPT0g
MSkgeworCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJCWhvbGRfcmxvY2sgPSAwOwor
CQl9CisJCWlmIChob2xkX3NibG9jayA9PSAwKSB7CisJCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19y
Y3YpOworCQkJaG9sZF9zYmxvY2sgPSAxOworCQl9CisJCWlmICgoY29waWVkX3NvX2ZhcikgJiYg
KGNvbnRyb2wtPmxlbmd0aCA9PSAwKSAmJgorCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkpKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJ
CX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJc2J1bmxvY2soJnNvLT5zb19yY3YsIDEpOwor
I2VuZGlmCisJCWlmIChzby0+c29fcmN2LnNiX2NjIDw9IGNvbnRyb2wtPmhlbGRfbGVuZ3RoKSB7
CisJCQllcnJvciA9IHNid2FpdCgmc28tPnNvX3Jjdik7CisJCQlpZiAoZXJyb3IpIHsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCWdvdG8gcmVsZWFzZTsKKyNlbHNlCisJCQkJZ290byBy
ZWxlYXNlX3VubG9ja2VkOworI2VuZGlmCisJCQl9CisJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9
IDA7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJZXJyb3IgPSBzYmxvY2soJnNvLT5z
b19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsKKyNlbmRpZgorCQlpZiAoaG9sZF9zYmxvY2sp
IHsKKwkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKKwkJCWhvbGRfc2Jsb2NrID0gMDsK
KwkJfQorCQlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsKKwkJCS8qIHN0aWxsIG5vdGhpbmcg
aGVyZSAqLworCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB7CisJCQkJLyogaGUgYWJv
cnRlZCwgb3IgaXMgZG9uZSBpLmUuZGlkIGEgc2h1dGRvd24gKi8KKwkJCQlvdXRfZmxhZ3MgfD0g
TVNHX0VPUjsKKwkJCQlpZiAoY29udHJvbC0+cGRhcGlfYWJvcnRlZCkgeworCQkJCQlpZiAoKGNv
bnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBN
X05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5zdGNiLT5hc29jLnN0cm1pbltj
b250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCisJCQkJCW91dF9m
bGFncyB8PSBNU0dfVFJVTkM7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKChjb250cm9sLT5kb19u
b3RfcmVmX3N0Y2IgPT0gMCkgJiYgKChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJ
T04pID09IDApKQorCQkJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5zdHJtaW5bY29udHJvbC0+c2lu
Zm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJCQl9CisJCQkJZ290byBkb25lX3dp
dGhfY29udHJvbDsKKwkJCX0KKwkJCWlmIChzby0+c29fcmN2LnNiX2NjID4gaGVsZF9sZW5ndGgp
IHsKKwkJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IHNvLT5zb19yY3Yuc2JfY2M7CisJCQkJaGVs
ZF9sZW5ndGggPSAwOworCQkJfQorCQkJZ290byB3YWl0X3NvbWVfbW9yZTsKKwkJfSBlbHNlIGlm
IChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKKwkJCS8qIHdlIG11c3QgcmUtc3luYyBzaW5jZSBk
YXRhCisJCQkgKiBpcyBwcm9iYWJseSBiZWluZyBhZGRlZAorCQkJICovCisJCQlTQ1RQX0lOUF9S
RUFEX0xPQ0soaW5wKTsKKwkJCWlmICgoY29udHJvbC0+bGVuZ3RoID4gMCkgJiYgKGNvbnRyb2wt
PmRhdGEgPT0gTlVMTCkpIHsKKwkJCQkvKiBiaWcgdHJvdWJsZS4uIHdlIGhhdmUgdGhlIGxvY2sg
YW5kIGl0cyBjb3JydXB0PyAqLworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQlwYW5pYyAoIkltcG9z
c2libGUgZGF0YT09TlVMTCBsZW5ndGggIT0wIik7CisjZW5kaWYKKwkJCQlvdXRfZmxhZ3MgfD0g
TVNHX0VPUjsKKwkJCQlvdXRfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQkJCWNvbnRyb2wtPmxlbmd0
aCA9IDA7CisJCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJCQlnb3RvIGRvbmVfd2l0
aF9jb250cm9sOworCQkJfQorCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJCS8qIFdl
IHdpbGwgZmFsbCBhcm91bmQgdG8gZ2V0IG1vcmUgZGF0YSAqLworCQl9CisJCWdvdG8gZ2V0X21v
cmVfZGF0YTsKKwl9IGVsc2UgeworCQkvKi0KKwkJICogR2l2ZSBjYWxsZXIgYmFjayB0aGUgbWJ1
ZiBjaGFpbiwKKwkJICogc3RvcmUgaW4gdWlvX3Jlc2lkIHRoZSBsZW5ndGgKKwkJICovCisJCXdh
a2V1cF9yZWFkX3NvY2tldCA9IDA7CisJCWlmICgoY29udHJvbC0+ZW5kX2FkZGVkID09IDApIHx8
CisJCSAgICAoVEFJTFFfTkVYVChjb250cm9sLCBuZXh0KSA9PSBOVUxMKSkgeworCQkJLyogTmVl
ZCB0byBnZXQgcmxvY2sgKi8KKwkJCWlmIChob2xkX3Jsb2NrID09IDApIHsKKwkJCQlTQ1RQX0lO
UF9SRUFEX0xPQ0soaW5wKTsKKwkJCQlob2xkX3Jsb2NrID0gMTsKKwkJCX0KKwkJfQorCQlpZiAo
Y29udHJvbC0+ZW5kX2FkZGVkKSB7CisJCQlvdXRfZmxhZ3MgfD0gTVNHX0VPUjsKKwkJCWlmICgo
Y29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkgICAgKGNvbnRyb2wtPnN0Y2Ig
IT0gTlVMTCkgJiYKKwkJCSAgICAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElP
TikgPT0gMCkpCisJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5zdHJtaW5bY29udHJvbC0+c2luZm9f
c3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJfQorCQlpZiAoY29udHJvbC0+c3BlY19m
bGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQlvdXRfZmxhZ3MgfD0gTVNHX05PVElGSUNBVElP
TjsKKwkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFS
RCkKKwkJdWlvLT51aW9fcmVzaWQgPSBjb250cm9sLT5sZW5ndGg7CisjZWxzZQorCQl1aW9fc2V0
cmVzaWQodWlvLCBjb250cm9sLT5sZW5ndGgpOworI2VuZGlmCisjZWxzZQorCQl1aW8tPnVpb19y
ZXNpZCA9IGNvbnRyb2wtPmxlbmd0aDsKKyNlbmRpZgorCQkqbXAgPSBjb250cm9sLT5kYXRhOwor
CQltID0gY29udHJvbC0+ZGF0YTsKKwkJd2hpbGUgKG0pIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJ
c2N0cF9zYmxvZygmc28tPnNvX3JjdiwKKwkJCQkgICBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/
TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsIFNDVFBfQlVGX0xFTihtKSk7CisJCQl9CisJCQlz
Y3RwX3NiZnJlZShjb250cm9sLCBzdGNiLCAmc28tPnNvX3JjdiwgbSk7CisJCQlmcmVlZF9zb19m
YXIgKz0gU0NUUF9CVUZfTEVOKG0pOworCQkJZnJlZWRfc29fZmFyICs9IE1TSVpFOworCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19F
TkFCTEUpIHsKKwkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LAorCQkJCSAgIGNvbnRyb2wtPmRv
X25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCX0KKwkJ
CW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCWNvbnRyb2wtPmRhdGEgPSBjb250cm9sLT50
YWlsX21idWYgPSBOVUxMOworCQljb250cm9sLT5sZW5ndGggPSAwOworCQlpZiAob3V0X2ZsYWdz
ICYgTVNHX0VPUikgeworCQkJLyogRG9uZSB3aXRoIHRoaXMgY29udHJvbCAqLworCQkJZ290byBk
b25lX3dpdGhfY29udHJvbDsKKwkJfQorCX0KKyByZWxlYXNlOgorCWlmIChob2xkX3Jsb2NrID09
IDEpIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaG9sZF9ybG9jayA9IDA7CisJ
fQorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAw
MCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChob2xkX3NibG9jayA9PSAwKSB7CisJ
CVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMTsKKwl9CisjZWxz
ZQorCWlmIChob2xkX3NibG9jayA9PSAxKSB7CisJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2
KTsKKwkJaG9sZF9zYmxvY2sgPSAwOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorCXNidW5sb2NrKCZzby0+c29fcmN2LCAxKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwlzYnVubG9jaygmc28tPnNvX3Jjdik7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJc29ja2J1Zl9sb2NrID0gMDsKKyNl
bmRpZgorI2VuZGlmCisKKyByZWxlYXNlX3VubG9ja2VkOgorCWlmIChob2xkX3NibG9jaykgewor
CQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMDsKKwl9CisJ
aWYgKChzdGNiKSAmJiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgeworCQlpZiAoKGZyZWVk
X3NvX2ZhciA+PSByd25kX3JlcSkgJiYKKwkJICAgIChjb250cm9sICYmIChjb250cm9sLT5kb19u
b3RfcmVmX3N0Y2IgPT0gMCkpICYmCisJCSAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkKKwkJCXNj
dHBfdXNlcl9yY3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsK
Kwl9Cisgb3V0OgorCWlmIChtc2dfZmxhZ3MpIHsKKwkJKm1zZ19mbGFncyA9IG91dF9mbGFnczsK
Kwl9CisJaWYgKCgob3V0X2ZsYWdzICYgTVNHX0VPUikgPT0gMCkgJiYKKwkgICAgKChpbl9mbGFn
cyAmIE1TR19QRUVLKSA9PSAwKSAmJgorCSAgICAoc2luZm8pICYmCisJICAgIChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykgfHwKKwkgICAgIHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKSkpIHsKKwkJc3Ry
dWN0IHNjdHBfZXh0cmN2aW5mbyAqc19leHRyYTsKKwkJc19leHRyYSA9IChzdHJ1Y3Qgc2N0cF9l
eHRyY3ZpbmZvICopc2luZm87CisJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9mbGFncyA9IFNDVFBf
Tk9fTkVYVF9NU0c7CisJfQorCWlmIChob2xkX3Jsb2NrID09IDEpIHsKKwkJU0NUUF9JTlBfUkVB
RF9VTkxPQ0soaW5wKTsKKwl9CisJaWYgKGhvbGRfc2Jsb2NrKSB7CisJCVNPQ0tCVUZfVU5MT0NL
KCZzby0+c29fcmN2KTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gNzAwMDAwCisJaWYgKHNvY2tidWZfbG9jaykgeworCQlzYnVubG9jaygmc28t
PnNvX3Jjdik7CisJfQorI2VuZGlmCisKKwlpZiAoZnJlZWNudF9hcHBsaWVkKSB7CisJCS8qCisJ
CSAqIFRoZSBsb2NrIG9uIHRoZSBzb2NrZXQgYnVmZmVyIHByb3RlY3RzIHVzIHNvIHRoZSBmcmVl
CisJCSAqIGNvZGUgd2lsbCBzdG9wLiBCdXQgc2luY2Ugd2UgdXNlZCB0aGUgc29ja2V0YnVmIGxv
Y2sgYW5kCisJCSAqIHRoZSBzZW5kZXIgdXNlcyB0aGUgdGNiX2xvY2sgdG8gaW5jcmVtZW50LCB3
ZSBuZWVkIHRvIHVzZQorCQkgKiB0aGUgYXRvbWljIGFkZCB0byB0aGUgcmVmY250LgorCQkgKi8K
KwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzdGNi
IGZvciByZWZjbnQgaGFzIGdvbmUgTlVMTD8iKTsKKwkJCWdvdG8gc3RhZ2VfbGVmdDsKKyNlbHNl
CisJCQlnb3RvIHN0YWdlX2xlZnQ7CisjZW5kaWYKKwkJfQorCQkvKiBTYXZlIHRoZSB2YWx1ZSBi
YWNrIGZvciBuZXh0IHRpbWUgKi8KKwkJc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0g
ZnJlZWRfc29fZmFyOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsK
Kwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmU0NUUF9SRUNW
X1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJaWYgKHN0Y2IpIHsKKwkJCXNjdHBfbWlzY19pbnRz
KFNDVFBfU09SRUNWX0RPTkUsCisJCQkJICAgICAgIGZyZWVkX3NvX2ZhciwKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCQkJICAgICAgICgodWlv
KSA/IChzbGVuIC0gdWlvLT51aW9fcmVzaWQpIDogc2xlbiksCisjZWxzZQorCQkJCSAgICAgICAo
KHVpbykgPyAoc2xlbiAtIHVpb19yZXNpZCh1aW8pKSA6IHNsZW4pLAorI2VuZGlmCisjZWxzZQor
CQkJCSAgICAgICAodWludDMyX3QpKCh1aW8pID8gKHNsZW4gLSB1aW8tPnVpb19yZXNpZCkgOiBz
bGVuKSwKKyNlbmRpZgorCQkJCSAgICAgICBzdGNiLT5hc29jLm15X3J3bmQsCisJCQkJICAgICAg
IHNvLT5zb19yY3Yuc2JfY2MpOworCQl9IGVsc2UgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9T
T1JFQ1ZfRE9ORSwKKwkJCQkgICAgICAgZnJlZWRfc29fZmFyLAorI2lmIGRlZmluZWQoX19BUFBM
RV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCQkgICAgICAgKCh1aW8pID8gKHNs
ZW4gLSB1aW8tPnVpb19yZXNpZCkgOiBzbGVuKSwKKyNlbHNlCisJCQkJICAgICAgICgodWlvKSA/
IChzbGVuIC0gdWlvX3Jlc2lkKHVpbykpIDogc2xlbiksCisjZW5kaWYKKyNlbHNlCisJCQkJICAg
ICAgICh1aW50MzJfdCkoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlvX3Jlc2lkKSA6IHNsZW4pLAor
I2VuZGlmCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIHNvLT5zb19yY3Yuc2JfY2MpOworCQl9
CisJfQorIHN0YWdlX2xlZnQ6CisJaWYgKHdha2V1cF9yZWFkX3NvY2tldCkgeworCQlzY3RwX3Nv
cndha2V1cChpbnAsIHNvKTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKworI2lmZGVmIFND
VFBfTUJVRl9MT0dHSU5HCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX21fZnJlZShzdHJ1Y3QgbWJ1ZiAq
bSkKK3sKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9N
QlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JRlJFRSk7
CisJfQorCXJldHVybiAobV9mcmVlKG0pKTsKK30KKwordm9pZAorc2N0cF9tX2ZyZWVtKHN0cnVj
dCBtYnVmICptYikKK3sKKwl3aGlsZSAobWIgIT0gTlVMTCkKKwkJbWIgPSBzY3RwX21fZnJlZSht
Yik7Cit9CisKKyNlbmRpZgorCitpbnQKK3NjdHBfZHluYW1pY19zZXRfcHJpbWFyeShzdHJ1Y3Qg
c29ja2FkZHIgKnNhLCB1aW50MzJfdCB2cmZfaWQpCit7CisJLyogR2l2ZW4gYSBsb2NhbCBhZGRy
ZXNzLiBGb3IgYWxsIGFzc29jaWF0aW9ucworCSAqIHRoYXQgaG9sZHMgdGhlIGFkZHJlc3MsIHJl
cXVlc3QgYSBwZWVyLXNldC1wcmltYXJ5LgorCSAqLworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOwor
CXN0cnVjdCBzY3RwX2xhZGRyICp3aTsKKworCWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihz
YSwgdnJmX2lkLCAwKTsKKwlpZiAoaWZhID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVBRERSTk9UQVZBSUwpOwor
CQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCX0KKwkvKiBOb3cgdGhhdCB3ZSBoYXZlIHRoZSBp
ZmEgd2UgbXVzdCBhd2FrZW4gdGhlCisJICogaXRlcmF0b3Igd2l0aCB0aGlzIG1lc3NhZ2UuCisJ
ICovCisJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRyKSwg
c3RydWN0IHNjdHBfbGFkZHIpOworCWlmICh3aSA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOworCQly
ZXR1cm4gKEVOT01FTSk7CisJfQorCS8qIE5vdyBpbmNyIHRoZSBjb3VudCBhbmQgaW50IHdpIHN0
cnVjdHVyZSAqLworCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOworCW1lbXNldCh3aSwgMCwgc2l6
ZW9mKCp3aSkpOworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ3aS0+c3RhcnRfdGltZSk7
CisJd2ktPmlmYSA9IGlmYTsKKwl3aS0+YWN0aW9uID0gU0NUUF9TRVRfUFJJTV9BRERSOworCWF0
b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKworCS8qIE5vdyBhZGQgaXQgdG8gdGhl
IHdvcmsgcXVldWUgKi8KKwlTQ1RQX1dRX0FERFJfTE9DSygpOworCS8qCisJICogU2hvdWxkIHRo
aXMgcmVhbGx5IGJlIGEgdGFpbHE/IEFzIGl0IGlzIHdlIHdpbGwgcHJvY2VzcyB0aGUKKwkgKiBu
ZXdlc3QgZmlyc3QgOi0wCisJICovCisJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8o
YWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9BRERSX1dRLAorCQkJIChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKU5VTEwsCisJCQkgKHN0
cnVjdCBzY3RwX3RjYiAqKU5VTEwsCisJCQkgKHN0cnVjdCBzY3RwX25ldHMgKilOVUxMKTsKKwlT
Q1RQX1dRX0FERFJfVU5MT0NLKCk7CisJcmV0dXJuICgwKTsKK30KKworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKy8qIG5vIHNjdHBfc29yZWNlaXZlIGZvciBfX1VzZXJzcGFjZV9fIG5vdyAq
LworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwX3NvcmVj
ZWl2ZSgJc3RydWN0IHNvY2tldCAqc28sCisJCXN0cnVjdCBzb2NrYWRkciAqKnBzYSwKKwkJc3Ry
dWN0IHVpbyAqdWlvLAorCQlzdHJ1Y3QgbWJ1ZiAqKm1wMCwKKwkJc3RydWN0IG1idWYgKipjb250
cm9scCwKKwkJaW50ICpmbGFnc3ApCit7CisJaW50IGVycm9yLCBmcm9tbGVuOworCXVpbnQ4X3Qg
c29ja2J1ZlsyNTZdOworCXN0cnVjdCBzb2NrYWRkciAqZnJvbTsKKwlzdHJ1Y3Qgc2N0cF9leHRy
Y3ZpbmZvIHNpbmZvOworCWludCBmaWxsaW5nX3NpbmZvID0gMTsKKwlpbnQgZmxhZ3M7CisJc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5z
b19wY2I7CisJLyogcGlja3VwIHRoZSBhc3NvYyB3ZSBhcmUgcmVhZGluZyBmcm9tICovCisJaWYg
KGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYg
KChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQp
ICYmCisJICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJD
VklORk8pICYmCisJICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVk5YVElORk8pKSB8fAorCSAgICAoY29udHJvbHAgPT0gTlVMTCkpIHsKKwkJLyogdXNlciBk
b2VzIG5vdCB3YW50IHRoZSBzbmRyY3YgY3RsICovCisJCWZpbGxpbmdfc2luZm8gPSAwOworCX0K
KwlpZiAocHNhKSB7CisJCWZyb20gPSAoc3RydWN0IHNvY2thZGRyICopc29ja2J1ZjsKKwkJZnJv
bWxlbiA9IHNpemVvZihzb2NrYnVmKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlmcm9tLT5zYV9s
ZW4gPSAwOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZnJvbSA9IE5VTEw7CisJCWZyb21sZW4gPSAw
OworCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCVNDVFBfU09DS0VUX0xPQ0soc28sIDEp
OworI2VuZGlmCisJaWYgKGZpbGxpbmdfc2luZm8pIHsKKwkJbWVtc2V0KCZzaW5mbywgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsKKwl9CisJaWYgKGZsYWdzcCAhPSBOVUxMKSB7
CisJCWZsYWdzID0gKmZsYWdzcDsKKwl9IGVsc2UgeworCQlmbGFncyA9IDA7CisJfQorCWVycm9y
ID0gc2N0cF9zb3JlY3Ztc2coc28sIHVpbywgbXAwLCBmcm9tLCBmcm9tbGVuLCAmZmxhZ3MsCisJ
ICAgIChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopJnNpbmZvLCBmaWxsaW5nX3NpbmZvKTsKKwlp
ZiAoZmxhZ3NwICE9IE5VTEwpIHsKKwkJKmZsYWdzcCA9IGZsYWdzOworCX0KKwlpZiAoY29udHJv
bHAgIT0gTlVMTCkgeworCQkvKiBjb3B5IGJhY2sgdGhlIHNpbmZvIGluIGEgQ01TRyBmb3JtYXQg
Ki8KKwkJaWYgKGZpbGxpbmdfc2luZm8gJiYgKChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pID09
IDApKSB7CisJCQkqY29udHJvbHAgPSBzY3RwX2J1aWxkX2N0bF9uY2h1bmsoaW5wLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICop
JnNpbmZvKTsKKwkJfSBlbHNlIHsKKwkJCSpjb250cm9scCA9IE5VTEw7CisJCX0KKwl9CisJaWYg
KHBzYSkgeworCQkvKiBjb3B5IGJhY2sgdGhlIGFkZHJlc3MgaW5mbyAqLworI2lmZGVmIEhBVkVf
U0FfTEVOCisJCWlmIChmcm9tICYmIGZyb20tPnNhX2xlbikgeworI2Vsc2UKKwkJaWYgKGZyb20p
IHsKKyNlbmRpZgorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+IDUwMDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJCSpwc2EgPSBzb2R1cHNvY2th
ZGRyKGZyb20sIE1fTk9XQUlUKTsKKyNlbHNlCisJCQkqcHNhID0gZHVwX3NvY2thZGRyKGZyb20s
IG1wMCA9PSAwKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJKnBzYSA9IE5VTEw7CisJCX0KKwl9
CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNl
bmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCisKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPCA2MDMwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisv
KgorICogR2VuZXJhbCByb3V0aW5lIHRvIGFsbG9jYXRlIGEgaGFzaCB0YWJsZSB3aXRoIGNvbnRy
b2wgb2YgbWVtb3J5IGZsYWdzLgorICogaXMgaW4gNy4wIGFuZCBiZXlvbmQgZm9yIHN1cmUgOi0p
CisgKi8KK3ZvaWQgKgorc2N0cF9oYXNoaW5pdF9mbGFncyhpbnQgZWxlbWVudHMsIHN0cnVjdCBt
YWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdV9sb25nICpoYXNobWFzaywg
aW50IGZsYWdzKQoreworCWxvbmcgaGFzaHNpemU7CisJTElTVF9IRUFEKGdlbmVyaWMsIGdlbmVy
aWMpICpoYXNodGJsOworCWludCBpOworCisKKwlpZiAoZWxlbWVudHMgPD0gMCkgeworI2lmZGVm
IElOVkFSSUFOVFMKKwkJcGFuaWMoImhhc2hpbml0OiBiYWQgZWxlbWVudHMiKTsKKyNlbHNlCisJ
CVNDVFBfUFJJTlRGKCJoYXNoaW5pdDogYmFkIGVsZW1lbnRzPyIpOworCQllbGVtZW50cyA9IDE7
CisjZW5kaWYKKwl9CisJZm9yIChoYXNoc2l6ZSA9IDE7IGhhc2hzaXplIDw9IGVsZW1lbnRzOyBo
YXNoc2l6ZSA8PD0gMSkKKwkJY29udGludWU7CisJaGFzaHNpemUgPj49IDE7CisJaWYgKGZsYWdz
ICYgSEFTSF9XQUlUT0spCisJCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNoc2l6ZSAqIHNp
emVvZigqaGFzaHRibCksIHR5cGUsIE1fV0FJVE9LKTsKKwllbHNlIGlmIChmbGFncyAmIEhBU0hf
Tk9XQUlUKQorCQloYXNodGJsID0gbWFsbG9jKCh1X2xvbmcpaGFzaHNpemUgKiBzaXplb2YoKmhh
c2h0YmwpLCB0eXBlLCBNX05PV0FJVCk7CisJZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlw
YW5pYygiZmxhZyBpbmNvcnJlY3QgaW4gaGFzaGluaXRfZmxhZ3MiKTsKKyNlbHNlCisJCXJldHVy
biAoTlVMTCk7CisjZW5kaWYKKwl9CisKKwkvKiBubyBtZW1vcnk/ICovCisJaWYgKGhhc2h0Ymwg
PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoc2l6ZTsg
aSsrKQorCQlMSVNUX0lOSVQoJmhhc2h0YmxbaV0pOworCSpoYXNobWFzayA9IGhhc2hzaXplIC0g
MTsKKwlyZXR1cm4gKGhhc2h0YmwpOworfQorI2VuZGlmCisKKyNlbHNlIC8qICBfX1VzZXJzcGFj
ZV9fIGlmZGVmIGFib3ZlIHNjdHBfc29yZWNlaXZlICovCisvKgorICogX19Vc2Vyc3BhY2VfXyBE
ZWZpbmluZyBzY3RwX2hhc2hpbml0X2ZsYWdzKCkgYW5kIHNjdHBfaGFzaGRlc3Ryb3koKSBmb3Ig
dXNlcmxhbmQuCisgKiBOT1RFOiBXZSBkb24ndCB3YW50IG11bHRpcGxlIGRlZmluaXRpb25zIGhl
cmUuIFNvIHNjdHBfaGFzaGluaXRfZmxhZ3MoKSBhYm92ZSBmb3IKKyAqX19GcmVlQlNEX18gbXVz
dCBiZSBleGNsdWRlZC4KKyAqCisgKi8KKwordm9pZCAqCitzY3RwX2hhc2hpbml0X2ZsYWdzKGlu
dCBlbGVtZW50cywgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLAorICAgICAgICAgICAgICAgICAg
ICB1X2xvbmcgKmhhc2htYXNrLCBpbnQgZmxhZ3MpCit7CisJbG9uZyBoYXNoc2l6ZTsKKwlMSVNU
X0hFQUQoZ2VuZXJpYywgZ2VuZXJpYykgKmhhc2h0Ymw7CisJaW50IGk7CisKKwlpZiAoZWxlbWVu
dHMgPD0gMCkgeworCQlTQ1RQX1BSSU5URigiaGFzaGluaXQ6IGJhZCBlbGVtZW50cz8iKTsKKyNp
ZmRlZiBJTlZBUklBTlRTCisJCXJldHVybiAoTlVMTCk7CisjZWxzZQorCQllbGVtZW50cyA9IDE7
CisjZW5kaWYKKwl9CisJZm9yIChoYXNoc2l6ZSA9IDE7IGhhc2hzaXplIDw9IGVsZW1lbnRzOyBo
YXNoc2l6ZSA8PD0gMSkKKwkJY29udGludWU7CisJaGFzaHNpemUgPj49IDE7CisJLypjYW5ub3Qg
dXNlIE1BTExPQyBoZXJlIGJlY2F1c2UgaXQgaGFzIHRvIGJlIGRlY2xhcmVkIG9yIGRlZmluZWQK
KwkgIHVzaW5nIE1BTExPQ19ERUNMQVJFIG9yIE1BTExPQ19ERUZJTkUgZmlyc3QuICovCisJaWYg
KGZsYWdzICYgSEFTSF9XQUlUT0spCisJCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNoc2l6
ZSAqIHNpemVvZigqaGFzaHRibCkpOworCWVsc2UgaWYgKGZsYWdzICYgSEFTSF9OT1dBSVQpCisJ
CWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNoc2l6ZSAqIHNpemVvZigqaGFzaHRibCkpOwor
CWVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJU0NUUF9QUklOVEYoImZsYWcgaW5jb3JyZWN0
IGluIGhhc2hpbml0X2ZsYWdzLlxuIik7CisjZW5kaWYKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisK
KwkvKiBubyBtZW1vcnk/ICovCisJaWYgKGhhc2h0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxM
KTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoc2l6ZTsgaSsrKQorCQlMSVNUX0lOSVQoJmhhc2h0
YmxbaV0pOworCSpoYXNobWFzayA9IGhhc2hzaXplIC0gMTsKKwlyZXR1cm4gKGhhc2h0YmwpOwor
fQorCisKK3ZvaWQKK3NjdHBfaGFzaGRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxs
b2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKQoreworCUxJU1RfSEVBRChnZW5lcmljLCBn
ZW5lcmljKSAqaGFzaHRibCwgKmhwOworCisJaGFzaHRibCA9IHZoYXNodGJsOworCWZvciAoaHAg
PSBoYXNodGJsOyBocCA8PSAmaGFzaHRibFtoYXNobWFza107IGhwKyspCisJCWlmICghTElTVF9F
TVBUWShocCkpIHsKKwkJCVNDVFBfUFJJTlRGKCJoYXNoZGVzdHJveTogaGFzaCBub3QgZW1wdHku
XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCUZSRUUoaGFzaHRibCwgdHlwZSk7Cit9CisKKwordm9p
ZAorc2N0cF9oYXNoZnJlZWRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2NfdHlw
ZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKQoreworCUxJU1RfSEVBRChnZW5lcmljLCBnZW5lcmlj
KSAqaGFzaHRibC8qLCAqaHAqLzsKKwkvKgorCUxJU1RfRU5UUlkodHlwZSkgKnN0YXJ0LCAqdGVt
cDsKKwkgKi8KKwloYXNodGJsID0gdmhhc2h0Ymw7CisJLyogQXBwYXJlbnRseSB0ZW1wIGlzIG5v
dCBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIHNvIGF0dGVtcHRzIHRvCisJICAgZnJlZSBpdCByZXN1
bHRzIGluIGVycm9yLgorCWZvciAoaHAgPSBoYXNodGJsOyBocCA8PSAmaGFzaHRibFtoYXNobWFz
a107IGhwKyspCisJCWlmICghTElTVF9FTVBUWShocCkpIHsKKwkJCXN0YXJ0ID0gTElTVF9GSVJT
VChocCk7CisJCQl3aGlsZSAoc3RhcnQgIT0gTlVMTCkgeworCQkJCXRlbXAgPSBzdGFydDsKKwkJ
CQlzdGFydCA9IHN0YXJ0LT5sZV9uZXh0OworCQkJCVNDVFBfUFJJTlRGKCIlczogJXAgXG4iLCBf
X2Z1bmNfXywgKHZvaWQgKil0ZW1wKTsKKwkJCQlGUkVFKHRlbXAsIHR5cGUpOworCQkJfQorCQl9
CisJICovCisJRlJFRShoYXNodGJsLCB0eXBlKTsKK30KKworCisjZW5kaWYKKworCitpbnQKK3Nj
dHBfY29ubmVjdHhfaGVscGVyX2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2Nr
YWRkciAqYWRkciwKKwkJCSBpbnQgdG90YWRkciwgaW50ICplcnJvcikKK3sKKwlpbnQgYWRkZWQg
PSAwOworCWludCBpOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNvY2thZGRy
ICpzYTsKKwlzaXplX3QgaW5jciA9IDA7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OworI2VuZGlmCisKKwlzYSA9IGFkZHI7CisJaW5wID0gc3RjYi0+c2N0cF9lcDsKKwkqZXJyb3Ig
PSAwOworCWZvciAoaSA9IDA7IGkgPCB0b3RhZGRyOyBpKyspIHsKKwkJc3dpdGNoIChzYS0+c2Ff
ZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlpbmNyID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7
CisJCQlpZiAoKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpIHx8CisJCQkgICAg
KHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8CisJCQkgICAgSU5f
TVVMVElDQVNUKG50b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsK
KwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAor
CQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ183
KTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfbm93OworCQkJfQorCQkJaWYg
KHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29jLnBvcnQsCisJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCS8qIGFz
c29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9pZClzY3RwX2Zy
ZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ184KTsKKwkJCQkqZXJyb3IgPSBF
Tk9CVUZTOworCQkJCWdvdG8gb3V0X25vdzsKKwkJCX0KKwkJCWFkZGVkKys7CisJCQlicmVhazsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlpbmNyID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
c2E7CisJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikgfHwK
KwkJCSAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwg
RUlOVkFMKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1B
TF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBT
Q1RQX0xPQ185KTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfbm93OworCQkJ
fQorCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29j
LnBvcnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgewor
CQkJCS8qIGFzc29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9p
ZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xMCk7CisJCQkJ
KmVycm9yID0gRU5PQlVGUzsKKwkJCQlnb3RvIG91dF9ub3c7CisJCQl9CisJCQlhZGRlZCsrOwor
CQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZf
Q09OTjoKKwkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQkJaWYgKHNj
dHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5hc29jLnBvcnQsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCS8qIGFzc29j
IGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVf
YXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xMSk7CisJCQkJKmVycm9yID0gRU5P
QlVGUzsKKwkJCQlnb3RvIG91dF9ub3c7CisJCQl9CisJCQlhZGRlZCsrOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXNhID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSgoY2FkZHJfdClzYSArIGluY3IpOworCX0KKyBvdXRfbm93OgorCXJldHVybiAoYWRkZWQp
OworfQorCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9jb25uZWN0eF9oZWxwZXJfZmluZChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCQkgIHVuc2lnbmVk
IGludCAqdG90YWRkciwKKwkJCSAgdW5zaWduZWQgaW50ICpudW1fdjQsIHVuc2lnbmVkIGludCAq
bnVtX3Y2LCBpbnQgKmVycm9yLAorCQkJICB1bnNpZ25lZCBpbnQgbGltaXQsIGludCAqYmFkX2Fk
ZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBO
VUxMOworCXVuc2lnbmVkIGludCBpbmNyLCBhdCwgaTsKKworCWF0ID0gMDsKKwlzYSA9IGFkZHI7
CisJKmVycm9yID0gKm51bV92NiA9ICpudW1fdjQgPSAwOworCS8qIGFjY291bnQgYW5kIHZhbGlk
YXRlIGFkZHJlc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCAqdG90YWRkcjsgaSsrKSB7CisJCXN3
aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJ
aW5jciA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjaWZkZWYg
SEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3IpIHsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwor
CQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAxOworCQkJCXJldHVybiAoTlVM
TCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y0KSArPSAxOworCQkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJCWlm
IChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCS8qIE11c3Qg
YmUgbm9uLW1hcHBlZCBmb3IgY29ubmVjdHggKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJCSplcnJvciA9
IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAxOworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJ
CQlpbmNyID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjaWZk
ZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3IpIHsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwp
OworCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAxOworCQkJCXJldHVybiAo
TlVMTCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y2KSArPSAxOworCQkJYnJlYWs7CisJCX0K
KyNlbmRpZgorCQlkZWZhdWx0OgorCQkJKnRvdGFkZHIgPSBpOworCQkJaW5jciA9IDA7CisJCQkv
KiB3ZSBhcmUgZG9uZSAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkgPT0gKnRvdGFkZHIpIHsK
KwkJCWJyZWFrOworCQl9CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJ
aWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJLyogQWxyZWFkeSBoYXZlIG9yIGFtIGJyaW5nIHVwIGFu
IGFzc29jaWF0aW9uICovCisJCQlyZXR1cm4gKHN0Y2IpOworCQl9IGVsc2UgeworCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCQlpZiAoKGF0ICsgaW5jcikgPiBsaW1pdCkgeworCQkJ
KnRvdGFkZHIgPSBpOworCQkJYnJlYWs7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KXNhICsgaW5jcik7CisJfQorCXJldHVybiAoKHN0cnVjdCBzY3RwX3RjYiAqKU5V
TEwpOworfQorCisvKgorICogc2N0cF9iaW5keChBREQpIGZvciBvbmUgYWRkcmVzcy4KKyAqIGFz
c3VtZXMgYWxsIGFyZ3VtZW50cyBhcmUgdmFsaWQvY2hlY2tlZCBieSBjYWxsZXIuCisgKi8KK3Zv
aWQKK3NjdHBfYmluZHhfYWRkX2FkZHJlc3Moc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCisJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzY3RwX2Fzc29jX3Qg
YXNzb2NfaWQsCisJCSAgICAgICB1aW50MzJfdCB2cmZfaWQsIGludCAqZXJyb3IsIHZvaWQgKnAp
Cit7CisJc3RydWN0IHNvY2thZGRyICphZGRyX3RvdXNlOworI2lmIGRlZmluZWQoSU5FVCkgJiYg
ZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2VuZGlmCisjaWZkZWYg
U0NUUF9NVlJGCisJaW50IGksIGZuZCA9IDA7CisjZW5kaWYKKworCS8qIHNlZSBpZiB3ZSdyZSBi
b3VuZCBhbGwgYWxyZWFkeSEgKi8KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRBTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJKmVycm9yID0gRUlOVkFMOworCQlyZXR1cm47
CisJfQorI2lmZGVmIFNDVFBfTVZSRgorCS8qIElzIHRoZSBWUkYgb25lIHdlIGhhdmUgKi8KKwlm
b3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCWlmICh2cmZfaWQgPT0gaW5w
LT5tX3ZyZl9pZHNbaV0pIHsKKwkJCWZuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAo
IWZuZCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBVVElMLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJCXJldHVybjsKKwl9Cisj
ZW5kaWYKKwlhZGRyX3RvdXNlID0gc2E7CisjaWZkZWYgSU5FVDYKKwlpZiAoc2EtPnNhX2ZhbWls
eSA9PSBBRl9JTkVUNikgeworI2lmZGVmIElORVQKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NjsKKworI2VuZGlmCisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJKmVycm9yID0gRUlO
VkFMOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgeworCQkJLyogY2FuIG9ubHkgYmluZCB2NiBv
biBQRl9JTkVUNiBzb2NrZXRzICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJKmVycm9yID0gRUlOVkFMOwor
CQkJcmV0dXJuOworCQl9CisjaWZkZWYgSU5FVAorCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilhZGRyX3RvdXNlOworCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpICYmCisJCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkJLyogY2FuJ3QgYmlu
ZCB2NC1tYXBwZWQgb24gUEZfSU5FVCBzb2NrZXRzICovCisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCQkqZXJy
b3IgPSBFSU5WQUw7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwg
c2luNik7CisJCQlhZGRyX3RvdXNlID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47CisJCX0KKyNl
bmRpZgorCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9J
TkVUKSB7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJ
CQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJCQkv
KiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lORVQgc29ja2V0cyAqLworCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSpl
cnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZgorCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisjaWYgIShkZWZpbmVkKF9fUGFu
ZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkK
KwkJaWYgKHAgPT0gTlVMTCkgeworCQkJLyogQ2FuJ3QgZ2V0IHByb2MgZm9yIE5ldC9PcGVuIEJT
RCAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQVVRJTCwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsKKwkJfQor
I2VuZGlmCisJCSplcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgYWRkcl90b3VzZSwgTlVMTCwg
cCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBObyBsb2NrcyByZXF1aXJlZCBoZXJlIHNpbmNl
IGJpbmQgYW5kIG1nbXRfZXBfc2EKKwkgKiBhbGwgZG8gdGhlaXIgb3duIGxvY2tpbmcuIElmIHdl
IGRvIHNvbWV0aGluZyBmb3IKKwkgKiB0aGUgRklYOiBiZWxvdyB3ZSBtYXkgbmVlZCB0byBsb2Nr
IGluIHRoYXQgY2FzZS4KKwkgKi8KKwlpZiAoYXNzb2NfaWQgPT0gMCkgeworCQkvKiBhZGQgdGhl
IGFkZHJlc3MgKi8KKwkJc3RydWN0IHNjdHBfaW5wY2IgKmxlcDsKKwkJc3RydWN0IHNvY2thZGRy
X2luICpsc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfdG91c2U7CisKKwkJLyogdmFs
aWRhdGUgdGhlIGluY29taW5nIHBvcnQgKi8KKwkJaWYgKChsc2luLT5zaW5fcG9ydCAhPSAwKSAm
JgorCQkgICAgKGxzaW4tPnNpbl9wb3J0ICE9IGlucC0+c2N0cF9scG9ydCkpIHsKKwkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZB
TCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKiB1
c2VyIHNwZWNpZmllZCAwIHBvcnQsIHNldCBpdCB0byBleGlzdGluZyBwb3J0ICovCisJCQlsc2lu
LT5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJfQorCisJCWxlcCA9IHNjdHBfcGNiX2Zp
bmRlcChhZGRyX3RvdXNlLCAxLCAwLCB2cmZfaWQpOworCQlpZiAobGVwICE9IE5VTEwpIHsKKwkJ
CS8qCisJCQkgKiBXZSBtdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQKKwkJCSAqIHNpbmNlIHdl
IGhhdmUgdGhlIGVwIGFscmVhZHkgYW5kCisJCQkgKiBhcmUgYmluZGluZy4gTm8gcmVtb3ZlIGdv
aW5nIG9uCisJCQkgKiBoZXJlLgorCQkJICovCisJCQlTQ1RQX0lOUF9ERUNSX1JFRihsZXApOwor
CQl9CisJCWlmIChsZXAgPT0gaW5wKSB7CisJCQkvKiBhbHJlYWR5IGJvdW5kIHRvIGl0Li4gb2sg
Ki8KKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChsZXAgPT0gTlVMTCkgeworCQkJKChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilhZGRyX3RvdXNlKS0+c2luX3BvcnQgPSAwOworCQkJKmVycm9yID0gc2N0
cF9hZGRyX21nbXRfZXBfc2EoaW5wLCBhZGRyX3RvdXNlLAorCQkJCQkJICAgICAgU0NUUF9BRERf
SVBfQUREUkVTUywKKwkJCQkJCSAgICAgIHZyZl9pZCwgTlVMTCk7CisJCX0gZWxzZSB7CisJCQkq
ZXJyb3IgPSBFQUREUklOVVNFOworCQl9CisJCWlmICgqZXJyb3IpCisJCQlyZXR1cm47CisJfSBl
bHNlIHsKKwkJLyoKKwkJICogRklYOiBkZWNpZGUgd2hldGhlciB3ZSBhbGxvdyBhc3NvYyBiYXNl
ZAorCQkgKiBiaW5keAorCQkgKi8KKwl9Cit9CisKKy8qCisgKiBzY3RwX2JpbmR4KERFTEVURSkg
Zm9yIG9uZSBhZGRyZXNzLgorICogYXNzdW1lcyBhbGwgYXJndW1lbnRzIGFyZSB2YWxpZC9jaGVj
a2VkIGJ5IGNhbGxlci4KKyAqLwordm9pZAorc2N0cF9iaW5keF9kZWxldGVfYWRkcmVzcyhzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzY3RwX2Fzc29j
X3QgYXNzb2NfaWQsCisJCQkgIHVpbnQzMl90IHZyZl9pZCwgaW50ICplcnJvcikKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHJfdG91c2U7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElO
RVQ2KQorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRlZiBTQ1RQX01WUkYK
KwlpbnQgaSwgZm5kID0gMDsKKyNlbmRpZgorCisJLyogc2VlIGlmIHdlJ3JlIGJvdW5kIGFsbCBh
bHJlYWR5ISAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFM
TCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBVVElMLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJCXJldHVybjsKKwl9CisjaWZk
ZWYgU0NUUF9NVlJGCisJLyogSXMgdGhlIFZSRiBvbmUgd2UgaGF2ZSAqLworCWZvciAoaSA9IDA7
IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJaWYgKHZyZl9pZCA9PSBpbnAtPm1fdnJmX2lk
c1tpXSkgeworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmICghZm5kKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUws
IEVJTlZBTCk7CisJCSplcnJvciA9IEVJTlZBTDsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCWFk
ZHJfdG91c2UgPSBzYTsKKyNpZmRlZiBJTkVUNgorCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisjaWZkZWYgSU5FVAorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VuZGlm
CisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoc2EtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQly
ZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EX1Y2KSA9PSAwKSB7CisJCQkvKiBjYW4gb25seSBiaW5kIHY2IG9uIFBGX0lORVQ2
IHNvY2tldHMgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47
CisJCX0KKyNpZmRlZiBJTkVUCisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHJf
dG91c2U7CisJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJ
CSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQkvKiBjYW4ndCBiaW5kIG1hcHBlZC12
NCBvbiBQRl9JTkVUIHNvY2tldHMgKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJCSplcnJvciA9IEVJTlZB
TDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpbjZfc2luNl8yX3Npbigmc2luLCBzaW42KTsKKwkJ
CWFkZHJfdG91c2UgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJfQorI2VuZGlmCisJfQor
I2VuZGlmCisjaWZkZWYgSU5FVAorCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKyNp
ZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoc2EtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsK
KwkJfQorI2VuZGlmCisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9V
TkRfVjYpICYmCisJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCS8qIGNhbid0IGJp
bmQgdjQgb24gUEZfSU5FVCBzb2NrZXRzICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJKmVycm9yID0gRUlO
VkFMOworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyoKKwkgKiBObyBsb2NrIHJlcXVp
cmVkIG1nbXRfZXBfc2EgZG9lcyBpdHMgb3duIGxvY2tpbmcuCisJICogSWYgdGhlIEZJWDogYmVs
b3cgaXMgZXZlciBjaGFuZ2VkIHdlIG1heSBuZWVkIHRvCisJICogbG9jayBiZWZvcmUgY2FsbGlu
ZyBhc3NvY2lhdGlvbiBsZXZlbCBiaW5kaW5nLgorCSAqLworCWlmIChhc3NvY19pZCA9PSAwKSB7
CisJCS8qIGRlbGV0ZSB0aGUgYWRkcmVzcyAqLworCQkqZXJyb3IgPSBzY3RwX2FkZHJfbWdtdF9l
cF9zYShpbnAsIGFkZHJfdG91c2UsCisJCQkJCSAgICAgIFNDVFBfREVMX0lQX0FERFJFU1MsCisJ
CQkJCSAgICAgIHZyZl9pZCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRklYOiBkZWNp
ZGUgd2hldGhlciB3ZSBhbGxvdyBhc3NvYyBiYXNlZAorCQkgKiBiaW5keAorCQkgKi8KKwl9Cit9
CisKKy8qCisgKiByZXR1cm5zIHRoZSB2YWxpZCBsb2NhbCBhZGRyZXNzIGNvdW50IGZvciBhbiBh
c3NvYywgdGFraW5nIGludG8gYWNjb3VudAorICogYWxsIHNjb3BpbmcgcnVsZXMKKyAqLworaW50
CitzY3RwX2xvY2FsX2FkZHJfY291bnQoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCWludCBs
b29wYmFja19zY29wZTsKKyNpZiBkZWZpbmVkKElORVQpCisJaW50IGlwdjRfbG9jYWxfc2NvcGUs
IGlwdjRfYWRkcl9sZWdhbDsKKyNlbmRpZgorI2lmIGRlZmluZWQgKElORVQ2KQorCWludCBsb2Nh
bF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7CisjZW5kaWYKKwlzdHJ1Y3Qg
c2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3Rw
X2lmYSAqc2N0cF9pZmE7CisJaW50IGNvdW50ID0gMDsKKworCS8qIFR1cm4gb24gYWxsIHRoZSBh
cHByb3ByaWF0ZSBzY29wZXMgKi8KKwlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUu
bG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWlwdjRfbG9jYWxfc2NvcGUgPSBz
dGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJaXB2NF9hZGRyX2xlZ2FsID0gc3Rj
Yi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2
KQorCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKKwlzaXRlX3Nj
b3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCWlwdjZfYWRkcl9sZWdhbCA9IHN0
Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRy
X2xlZ2FsOworI2VuZGlmCisJU0NUUF9JUElfQUREUl9STE9DSygpOworCXZyZiA9IHNjdHBfZmlu
ZF92cmYoc3RjYi0+YXNvYy52cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQkvKiBubyB2
cmYsIG5vIGFkZHJlc3NlcyAqLworCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJu
ICgwKTsKKwl9CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EQUxMKSB7CisJCS8qCisJCSAqIGJvdW5kIGFsbCBjYXNlOiBnbyB0aHJvdWdoIGFs
bCBpZm5zIG9uIHRoZSB2cmYKKwkJICovCisJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+
aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCWlmICgobG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYKKwkJ
CSAgICBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCQljb250aW51ZTsKKwkJ
CX0KKwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lm
YSkgeworCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzY3RwX2lmYSkpCisJ
CQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJaWYgKGlwdjRfYWRkcl9s
ZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCQkJCXNpbiA9ICZz
Y3RwX2lmYS0+YWRkcmVzcy5zaW47CisJCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0g
MCkgeworCQkJCQkJCS8qIHNraXAgdW5zcGVjaWZpZWQgYWRkcnMgKi8KKwkJCQkJCQljb250aW51
ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9j
aGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7
CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmICgoaXB2NF9sb2NhbF9zY29wZSA9PSAwKSAmJgor
CQkJCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkgeworCQkJ
CQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJLyogY291bnQgdGhpcyBvbmUgKi8KKwkJCQkJ
CWNvdW50Kys7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQli
cmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJaWYg
KGlwdjZfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwor
I2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1F
KQorCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OworI2VuZGlmCisJCQkJCQlzaW42ID0g
JnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJ
RUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoc3RjYi0+c2N0
cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZz
aW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNlbmRp
ZgorCQkJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJCQkJCWlmIChsb2NhbF9zY29wZSA9PSAwKQorCQkJCQkJCQljb250aW51ZTsKKyNpZiBkZWZp
bmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCisJCQkJCQkJaWYgKHNpbjYtPnNpbjZfc2NvcGVf
aWQgPT0gMCkgeworI2lmZGVmIFNDVFBfS0FNRQorCQkJCQkJCQlpZiAoc2E2X3JlY292ZXJzY29w
ZShzaW42KSAhPSAwKQorCQkJCQkJCQkJLyoKKwkJCQkJCQkJCSAqIGJhZCBsaW5rCisJCQkJCQkJ
CQkgKiBsb2NhbAorCQkJCQkJCQkJICogYWRkcmVzcworCQkJCQkJCQkJICovCisJCQkJCQkJCQlj
b250aW51ZTsKKyNlbHNlCisJCQkJCQkJCWxzYTYgPSAqc2luNjsKKwkJCQkJCQkJaWYgKGluNl9y
ZWNvdmVyc2NvcGUoJmxzYTYsCisJCQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZsc2E2LnNp
bjZfYWRkciwKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgTlVMTCkpCisJCQkJCQkJCQkv
KgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJCQkJCQkJCSAqIGxvY2FsCisJCQkJCQkJCQkgKiBh
ZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQlzaW42ID0g
JmxzYTY7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJCQkJfQorI2VuZGlmIC8qIFNDVFBf
RU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAw
KSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikp
KSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvKiBjb3VudCB0aGlzIG9uZSAq
LworCQkJCQkJY291bnQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWlmIChjb25uX2FkZHJf
bGVnYWwpIHsKKwkJCQkJCWNvdW50Kys7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJ
CQlkZWZhdWx0OgorCQkJCQkvKiBUU05IICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJ
fQorCX0gZWxzZSB7CisJCS8qCisJCSAqIHN1YnNldCBib3VuZCBjYXNlCisJCSAqLworCQlzdHJ1
Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJCUxJU1RfRk9SRUFDSChsYWRkciwgJnN0Y2ItPnNjdHBf
ZXAtPnNjdHBfYWRkcl9saXN0LAorCQkJICAgICBzY3RwX254dF9hZGRyKSB7CisJCQlpZiAoc2N0
cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkpIHsKKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJCS8qIGNvdW50IHRoaXMgb25lICovCisJCQljb3VudCsrOworCQl9CisJfQorCVND
VFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJldHVybiAoY291bnQpOworfQorCisjaWYgZGVmaW5l
ZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwordm9pZAorc2N0cF9sb2dfdHJhY2UodWludDMyX3Qg
c3Vic3lzLCBjb25zdCBjaGFyICpzdHIgU0NUUF9VTlVTRUQsIHVpbnQzMl90IGEsIHVpbnQzMl90
IGIsIHVpbnQzMl90IGMsIHVpbnQzMl90IGQsIHVpbnQzMl90IGUsIHVpbnQzMl90IGYpCit7CisJ
dWludDMyX3Qgc2F2ZWluZGV4LCBuZXdpbmRleDsKKworI2lmIGRlZmluZWQoX19XaW5kb3dzX18p
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpID09IE5VTEwpIHsKKwkJcmV0dXJuOwor
CX0KKwlkbyB7CisJCXNhdmVpbmRleCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5pbmRl
eDsKKwkJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUpIHsKKwkJCW5ld2lu
ZGV4ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5ld2luZGV4ID0gc2F2ZWluZGV4ICsgMTsKKwkJfQor
CX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+
aW5kZXgsIHNhdmVpbmRleCwgbmV3aW5kZXgpID09IDApOworCWlmIChzYXZlaW5kZXggPj0gU0NU
UF9NQVhfTE9HR0lOR19TSVpFKSB7CisJCXNhdmVpbmRleCA9IDA7CisJfQorCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnRpbWVzdGFtcCA9IFNDVFBfR0VUX0NZ
Q0xFQ09VTlQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0u
c3Vic3lzID0gc3Vic3lzOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZl
aW5kZXhdLnBhcmFtc1swXSA9IGE7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5
W3NhdmVpbmRleF0ucGFyYW1zWzFdID0gYjsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+
ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMl0gPSBjOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1szXSA9IGQ7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzRdID0gZTsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbNV0gPSBmOworI2Vsc2UKKwlk
byB7CisJCXNhdmVpbmRleCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmluZGV4OworCQlp
ZiAoc2F2ZWluZGV4ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgeworCQkJbmV3aW5kZXggPSAx
OworCQl9IGVsc2UgeworCQkJbmV3aW5kZXggPSBzYXZlaW5kZXggKyAxOworCQl9CisJfSB3aGls
ZSAoYXRvbWljX2NtcHNldF9pbnQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmluZGV4LCBz
YXZlaW5kZXgsIG5ld2luZGV4KSA9PSAwKTsKKwlpZiAoc2F2ZWluZGV4ID49IFNDVFBfTUFYX0xP
R0dJTkdfU0laRSkgeworCQlzYXZlaW5kZXggPSAwOworCX0KKwlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnRpbWVzdGFtcCA9IFNDVFBfR0VUX0NZQ0xFQ09VTlQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5zdWJzeXMgPSBz
dWJzeXM7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJh
bXNbMF0gPSBhOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0u
cGFyYW1zWzFdID0gYjsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5k
ZXhdLnBhcmFtc1syXSA9IGM7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2
ZWluZGV4XS5wYXJhbXNbM10gPSBkOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5
W3NhdmVpbmRleF0ucGFyYW1zWzRdID0gZTsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5l
bnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s1XSA9IGY7CisjZW5kaWYKK30KKworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwNDQKK3N0
YXRpYyB2b2lkCitzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tldChzdHJ1Y3QgbWJ1ZiAqbSwg
aW50IG9mZiwgc3RydWN0IGlucGNiICppbnAsCisgICAgY29uc3Qgc3RydWN0IHNvY2thZGRyICpz
YSBTQ1RQX1VOVVNFRCwgdm9pZCAqY3R4IFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBpcCAqaXBo
OworI2lmZGVmIElORVQ2CisJc3RydWN0IGlwNl9oZHIgKmlwNjsKKyNlbmRpZgorCXN0cnVjdCBt
YnVmICpzcCwgKmxhc3Q7CisJc3RydWN0IHVkcGhkciAqdWhkcjsKKwl1aW50MTZfdCBwb3J0Owor
CisJaWYgKChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpID09IDApIHsKKwkJLyogQ2FuJ3QgaGFuZGxl
IG9uZSB0aGF0IGlzIG5vdCBhIHBrdCBoZHIgKi8KKwkJZ290byBvdXQ7CisJfQorCS8qIFB1bGwg
dGhlIHNyYyBwb3J0ICovCisJaXBoID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJdWhkciA9IChz
dHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwaCArIG9mZik7CisJcG9ydCA9IHVoZHItPnVoX3Nw
b3J0OworCS8qIFNwbGl0IG91dCB0aGUgbWJ1ZiBjaGFpbi4gTGVhdmUgdGhlCisJICogSVAgaGVh
ZGVyIGluIG0sIHBsYWNlIHRoZQorCSAqIHJlc3QgaW4gdGhlIHNwLgorCSAqLworCXNwID0gbV9z
cGxpdChtLCBvZmYsIE1fTk9XQUlUKTsKKwlpZiAoc3AgPT0gTlVMTCkgeworCQkvKiBHYWssIGRy
b3AgcGFja2V0LCB3ZSBjYW4ndCBkbyBhIHNwbGl0ICovCisJCWdvdG8gb3V0OworCX0KKwlpZiAo
c3AtPm1fcGt0aGRyLmxlbiA8IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcikpIHsKKwkJLyogR2FrLCBwYWNrZXQgY2FuJ3QgaGF2ZSBhbiBTQ1RQIGhlYWRlciBp
biBpdCAtIHRvbyBzbWFsbCAqLworCQltX2ZyZWVtKHNwKTsKKwkJZ290byBvdXQ7CisJfQorCS8q
IE5vdyBwdWxsIHVwIHRoZSBVRFAgaGVhZGVyIGFuZCBTQ1RQIGhlYWRlciB0b2dldGhlciAqLwor
CXNwID0gbV9wdWxsdXAoc3AsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcikpOworCWlmIChzcCA9PSBOVUxMKSB7CisJCS8qIEdhayBwdWxsdXAgZmFpbGVkICov
CisJCWdvdG8gb3V0OworCX0KKwkvKiBUcmltIG91dCB0aGUgVURQIGhlYWRlciAqLworCW1fYWRq
KHNwLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCisJLyogTm93IHJlY29uc3RydWN0IHRoZSBt
YnVmIGNoYWluICovCisJZm9yIChsYXN0ID0gbTsgbGFzdC0+bV9uZXh0OyBsYXN0ID0gbGFzdC0+
bV9uZXh0KTsKKwlsYXN0LT5tX25leHQgPSBzcDsKKwltLT5tX3BrdGhkci5sZW4gKz0gc3AtPm1f
cGt0aGRyLmxlbjsKKwkvKgorCSAqIFRoZSBDU1VNX0RBVEFfVkFMSUQgZmxhZ3MgaW5kaWNhdGVz
IHRoYXQgdGhlIEhXIGNoZWNrZWQgdGhlCisJICogVURQIGNoZWNrc3VtIGFuZCBpdCB3YXMgdmFs
aWQuCisJICogU2luY2UgQ1NVTV9EQVRBX1ZBTElEID09IENTVU1fU0NUUF9WQUxJRCB0aGlzIHdv
dWxkIGltcGx5IHRoYXQKKwkgKiB0aGUgSFcgYWxzbyB2ZXJpZmllZCB0aGUgU0NUUCBjaGVja3N1
bS4gVGhlcmVmb3JlLCBjbGVhciB0aGUgYml0LgorCSAqLworI2lmIF9fRnJlZUJTRF92ZXJzaW9u
ID4gMTAwMDA0OQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAorCSAgICAgICAgInNj
dHBfcmVjdl91ZHBfdHVubmVsZWRfcGFja2V0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2
ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JWIuXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIu
bGVuLAorCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCisJICAgICAgICAoaW50
KW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MsIENTVU1fQklUUyk7CisjZWxzZQorCVNDVFBEQkcoU0NU
UF9ERUJVR19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFj
a2V0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdz
IDB4JXguXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgaWZfbmFtZSht
LT5tX3BrdGhkci5yY3ZpZiksCisJICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNl
bmRpZgorCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgJj0gfkNTVU1fREFUQV9WQUxJRDsKKwlpcGgg
PSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwlzd2l0Y2ggKGlwaC0+aXBfdikgeworI2lmZGVmIElO
RVQKKwljYXNlIElQVkVSU0lPTjoKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMDAwMDAwCisJ
CWlwaC0+aXBfbGVuID0gaHRvbnMobnRvaHMoaXBoLT5pcF9sZW4pIC0gc2l6ZW9mKHN0cnVjdCB1
ZHBoZHIpKTsKKyNlbHNlCisJCWlwaC0+aXBfbGVuIC09IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsK
KyNlbmRpZgorCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIHBvcnQpOworCQlicmVhazsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBJUFY2X1ZFUlNJT04gPj4gNDoKKwkJaXA2ID0g
bXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJaXA2LT5pcDZfcGxlbiA9IGh0b25zKG50b2hz
KGlwNi0+aXA2X3BsZW4pIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwkJc2N0cDZfaW5wdXRf
d2l0aF9wb3J0KCZtLCAmb2ZmLCBwb3J0KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0Ogor
CQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKyBvdXQ6CisJbV9mcmVlbShtKTsK
K30KKyNlbmRpZgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAwMAorI2lmZGVmIElO
RVQKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3ZfaWNtcF90dW5uZWxlZF9wYWNrZXQoaW50IGNtZCwg
c3RydWN0IHNvY2thZGRyICpzYSwgdm9pZCAqdmlwLCB2b2lkICpjdHggU0NUUF9VTlVTRUQpCit7
CisJc3RydWN0IGlwICpvdXRlcl9pcCwgKmlubmVyX2lwOworCXN0cnVjdCBzY3RwaGRyICpzaDsK
KwlzdHJ1Y3QgaWNtcCAqaWNtcDsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBfbmV0cyAq
bmV0OworCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOworCXN0cnVjdCBzb2NrYWRkcl9pbiBz
cmMsIGRzdDsKKwl1aW50OF90IHR5cGUsIGNvZGU7CisKKwlpbm5lcl9pcCA9IChzdHJ1Y3QgaXAg
Kil2aXA7CisJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClpbm5lcl9pcCAtCisJICAg
IChzaXplb2Yoc3RydWN0IGljbXApIC0gc2l6ZW9mKHN0cnVjdCBpcCkpKTsKKwlvdXRlcl9pcCA9
IChzdHJ1Y3QgaXAgKikoKGNhZGRyX3QpaWNtcCAtIHNpemVvZihzdHJ1Y3QgaXApKTsKKwlpZiAo
bnRvaHMob3V0ZXJfaXAtPmlwX2xlbikgPAorCSAgICBzaXplb2Yoc3RydWN0IGlwKSArIDggKyAo
aW5uZXJfaXAtPmlwX2hsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsgOCkgeworCQly
ZXR1cm47CisJfQorCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlubmVyX2lwICsg
KGlubmVyX2lwLT5pcF9obCA8PCAyKSk7CisJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikodWRwICsg
MSk7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzcmMu
c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc3JjLnNpbl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNyYy5zaW5fcG9ydCA9IHNo
LT5zcmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBpbm5lcl9pcC0+aXBfc3JjOworCW1lbXNldCgm
ZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0LnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9wb3J0Owor
CWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7CisJLyoKKwkgKiAnZHN0JyBob2xkcyB0
aGUgZGVzdCBvZiB0aGUgcGFja2V0IHRoYXQgZmFpbGVkIHRvIGJlIHNlbnQuCisJICogJ3NyYycg
aG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2UgcmV2ZXJzZQorCSAqIHRo
ZSBkc3QgYW5kIHRoZSBzcmMgaW4gdGhlIGxvb2t1cC4KKwkgKi8KKwlpbnAgPSBOVUxMOworCW5l
dCA9IE5VTEw7CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2EoKHN0cnVjdCBz
b2NrYWRkciAqKSZkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJmlucCwgJm5ldCwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0RFRkFVTFRfVlJGSUQpOworCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCSAgICAobmV0ICE9
IE5VTEwpICYmCisJICAgIChpbnAgIT0gTlVMTCkpIHsKKwkJLyogQ2hlY2sgdGhlIFVEUCBwb3J0
IG51bWJlcnMgKi8KKwkJaWYgKCh1ZHAtPnVoX2Rwb3J0ICE9IG5ldC0+cG9ydCkgfHwKKwkJICAg
ICh1ZHAtPnVoX3Nwb3J0ICE9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVs
aW5nX3BvcnQpKSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJldHVybjsKKwkJ
fQorCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLworCQlpZiAobnRvaGwoc2gtPnZf
dGFnKSAhPSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtdXN0IGJlIHRoZSB2ZXJpZmljYXRpb24g
dGFnIHVzZWQKKwkJCSAqIGZvciBzZW5kaW5nIG91dCBwYWNrZXRzLiBXZSBkb24ndAorCQkJICog
Y29uc2lkZXIgcGFja2V0cyByZWZsZWN0aW5nIHRoZQorCQkJICogdmVyaWZpY2F0aW9uIHRhZy4K
KwkJCSAqLworCQkJaWYgKG50b2hsKHNoLT52X3RhZykgIT0gc3RjYi0+YXNvYy5wZWVyX3Z0YWcp
IHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVs
c2UgeworCQkJaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pID49CisJCQkgICAgc2l6ZW9mKHN0
cnVjdCBpcCkgKworCQkJICAgIDggKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpICsgOCArIDIwKSB7
CisJCQkJLyoKKwkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdlCisJCQkJICog
Z290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQorCQkJCSAqIGluaXRpYXRlIHRhZyBtYXRjaGVz
LgorCQkJCSAqLworCQkJCWNoID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKikoc2ggKyAxKTsK
KwkJCQlpZiAoKGNoLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikgfHwKKwkJCQkg
ICAgKG50b2hsKGNoLT5pbml0LmluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5teV92dGFnKSkg
eworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJCQl9CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47CisJCQl9CisJ
CX0KKwkJdHlwZSA9IGljbXAtPmljbXBfdHlwZTsKKwkJY29kZSA9IGljbXAtPmljbXBfY29kZTsK
KwkJaWYgKCh0eXBlID09IElDTVBfVU5SRUFDSCkgJiYKKwkJICAgIChjb2RlID09IElDTVBfVU5S
RUFDSF9QT1JUKSkgeworCQkJY29kZSA9IElDTVBfVU5SRUFDSF9QUk9UT0NPTDsKKwkJfQorCQlz
Y3RwX25vdGlmeShpbnAsIHN0Y2IsIG5ldCwgdHlwZSwgY29kZSwKKwkJICAgICAgICAgICAgbnRv
aHMoaW5uZXJfaXAtPmlwX2xlbiksCisJCSAgICAgICAgICAgICh1aW50MzJfdCludG9ocyhpY21w
LT5pY21wX25leHRtdHUpKTsKKwl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCisJCS8qCisJCSAqIFhYWCBtdXN0IGJlIGZpeGVk
IGZvciA1LnggYW5kIGhpZ2hlciwgbGVhdmUgZm9yCisJCSAqIDQueAorCQkgKi8KKwkJaWYgKFBS
Q19JU19SRURJUkVDVChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKKwkJCWluX3J0Y2hhbmdlKChz
dHJ1Y3QgaW5wY2IgKilpbnAsCisJCQkgICAgaW5ldGN0bGVycm1hcFtjbWRdKTsKKwkJfQorI2Vu
ZGlmCisJCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQkvKiByZWR1
Y2UgcmVmLWNvdW50ICovCisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJU0NUUF9JTlBfREVD
Ul9SRUYoaW5wKTsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJfQorCQlpZiAoc3RjYikg
eworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJfQorCXJldHVybjsKK30KKyNlbmRp
ZgorCisjaWZkZWYgSU5FVDYKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3ZfaWNtcDZfdHVubmVsZWRf
cGFja2V0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQgKmQsIHZvaWQgKmN0eCBT
Q1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3QgaXA2Y3RscGFyYW0gKmlwNmNwOworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKKwlzdHJ1Y3Qgc2N0cGhkciBzaDsKKwlzdHJ1Y3QgdWRwaGRyIHVkcDsKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW42IHNyYywgZHN0OworCXVpbnQ4X3QgdHlwZSwgY29kZTsKKworCWlwNmNwID0g
KHN0cnVjdCBpcDZjdGxwYXJhbSAqKWQ7CisJLyoKKwkgKiBYWFg6IFdlIGFzc3VtZSB0aGF0IHdo
ZW4gSVBWNiBpcyBub24gTlVMTCwgTSBhbmQgT0ZGIGFyZQorCSAqIHZhbGlkLgorCSAqLworCWlm
IChpcDZjcC0+aXA2Y19tID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBDaGVjayBpZiB3
ZSBjYW4gc2FmZWx5IGV4YW1pbmUgdGhlIHBvcnRzIGFuZCB0aGUKKwkgKiB2ZXJpZmljYXRpb24g
dGFnIG9mIHRoZSBTQ1RQIGNvbW1vbiBoZWFkZXIuCisJICovCisJaWYgKGlwNmNwLT5pcDZjX20t
Pm1fcGt0aGRyLmxlbiA8CisJICAgIGlwNmNwLT5pcDZjX29mZiArIHNpemVvZihzdHJ1Y3QgdWRw
aGRyKSsgb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSkgeworCQlyZXR1cm47CisJ
fQorCS8qIENvcHkgb3V0IHRoZSBVRFAgaGVhZGVyLiAqLworCW1lbXNldCgmdWRwLCAwLCBzaXpl
b2Yoc3RydWN0IHVkcGhkcikpOworCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJICAgaXA2
Y3AtPmlwNmNfb2ZmLAorCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkciksCisJCSAgIChjYWRkcl90
KSZ1ZHApOworCS8qIENvcHkgb3V0IHRoZSBwb3J0IG51bWJlcnMgYW5kIHRoZSB2ZXJpZmljYXRp
b24gdGFnLiAqLworCW1lbXNldCgmc2gsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCW1f
Y29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJICAgaXA2Y3AtPmlwNmNfb2ZmICsgc2l6ZW9mKHN0
cnVjdCB1ZHBoZHIpLAorCQkgICBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQxNl90KSAr
IHNpemVvZih1aW50MzJfdCksCisJCSAgIChjYWRkcl90KSZzaCk7CisJbWVtc2V0KCZzcmMsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJc3JjLnNpbjZfZmFtaWx5ID0gQUZfSU5F
VDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNyYy5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKyNlbmRpZgorCXNyYy5zaW42X3BvcnQgPSBzaC5zcmNfcG9ydDsKKwlz
cmMuc2luNl9hZGRyID0gaXA2Y3AtPmlwNmNfaXA2LT5pcDZfc3JjOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJaWYgKGluNl9zZXRzY29wZSgmc3JjLnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNf
bS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKyNlbmRpZgor
CW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCWRzdC5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlkc3Quc2luNl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlkc3Quc2luNl9wb3J0ID0g
c2guZGVzdF9wb3J0OworCWRzdC5zaW42X2FkZHIgPSBpcDZjcC0+aXA2Y19pcDYtPmlwNl9kc3Q7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9h
ZGRyLCBpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkgeworCQlyZXR1
cm47CisJfQorI2VuZGlmCisJaW5wID0gTlVMTDsKKwluZXQgPSBOVUxMOworCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsIFNDVFBf
REVGQVVMVF9WUkZJRCk7CisJaWYgKChzdGNiICE9IE5VTEwpICYmCisJICAgIChuZXQgIT0gTlVM
TCkgJiYKKwkgICAgKGlucCAhPSBOVUxMKSkgeworCQkvKiBDaGVjayB0aGUgVURQIHBvcnQgbnVt
YmVycyAqLworCQlpZiAoKHVkcC51aF9kcG9ydCAhPSBuZXQtPnBvcnQpIHx8CisJCSAgICAodWRw
LnVoX3Nwb3J0ICE9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3Bv
cnQpKSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJldHVybjsKKwkJfQorCQkv
KiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLworCQlpZiAobnRvaGwoc2gudl90YWcpICE9
IDApIHsKKwkJCS8qCisJCQkgKiBUaGlzIG11c3QgYmUgdGhlIHZlcmlmaWNhdGlvbiB0YWcgdXNl
ZCBmb3IKKwkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRvbid0IGNvbnNpZGVyCisJCQkg
KiBwYWNrZXRzIHJlZmxlY3RpbmcgdGhlIHZlcmlmaWNhdGlvbiB0YWcuCisJCQkgKi8KKwkJCWlm
IChudG9obChzaC52X3RhZykgIT0gc3RjYi0+YXNvYy5wZWVyX3Z0YWcpIHsKKwkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVsc2UgeworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCQlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIubGVuID49CisJ
CQkgICAgaXA2Y3AtPmlwNmNfb2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9pbml0LCBhX3J3bmQpKSB7CisJCQkJLyoK
KwkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdlCisJCQkJICogZ290IGFuIElO
SVQgY2h1bmsgYW5kIGlmIHRoZQorCQkJCSAqIGluaXRpYXRlIHRhZyBtYXRjaGVzLgorCQkJCSAq
LworCQkJCXVpbnQzMl90IGluaXRpYXRlX3RhZzsKKwkJCQl1aW50OF90IGNodW5rX3R5cGU7CisK
KwkJCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCisJCQkJCSAgIGlwNmNwLT5pcDZjX29mZiAr
CisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArCisJCQkJCSAgIHNpemVvZihzdHJ1Y3Qg
c2N0cGhkciksCisJCQkJCSAgIHNpemVvZih1aW50OF90KSwKKwkJCQkJICAgKGNhZGRyX3QpJmNo
dW5rX3R5cGUpOworCQkJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJCQkJICAgaXA2Y3At
PmlwNmNfb2ZmICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJCQkJICAgc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSArCisJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciksCisJCQkJCSAgIHNpemVvZih1aW50MzJfdCksCisJCQkJCSAgIChjYWRkcl90KSZpbml0aWF0
ZV90YWcpOworCQkJCWlmICgoY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHx8CisJCQkJ
ICAgIChudG9obChpbml0aWF0ZV90YWcpICE9IHN0Y2ItPmFzb2MubXlfdnRhZykpIHsKKwkJCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfSBlbHNlIHsK
KwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworCQkJfQorI2Vsc2UKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCXR5cGUg
PSBpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfdHlwZTsKKwkJY29kZSA9IGlwNmNwLT5pcDZjX2lj
bXA2LT5pY21wNl9jb2RlOworCQlpZiAoKHR5cGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0gpICYmCisJ
CSAgICAoY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1BPUlQpKSB7CisJCQl0eXBlID0gSUNN
UDZfUEFSQU1fUFJPQjsKKwkJCWNvZGUgPSBJQ01QNl9QQVJBTVBST0JfTkVYVEhFQURFUjsKKwkJ
fQorCQlzY3RwNl9ub3RpZnkoaW5wLCBzdGNiLCBuZXQsIHR5cGUsIGNvZGUsCisJCQkgICAgIG50
b2hsKGlwNmNwLT5pcDZjX2ljbXA2LT5pY21wNl9tdHUpKTsKKwl9IGVsc2UgeworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCisJCWlmIChQUkNf
SVNfUkVESVJFQ1QoY21kKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQlpbjZfcnRjaGFuZ2UoKHN0
cnVjdCBpbjZwY2IgKilpbnAsCisJCQkgICAgaW5ldDZjdGxlcnJtYXBbY21kXSk7CisJCX0KKyNl
bmRpZgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgeworCQkJLyogcmVk
dWNlIGlucCdzIHJlZi1jb3VudCAqLworCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCX0KKwkJaWYg
KHN0Y2IpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCX0KK30KKyNlbmRpZgor
I2VuZGlmCisKK3ZvaWQKK3NjdHBfb3Zlcl91ZHBfc3RvcCh2b2lkKQoreworCS8qCisJICogVGhp
cyBmdW5jdGlvbiBhc3N1bWVzIHN5c2N0bCBjYWxsZXIgaG9sZHMgc2N0cF9zeXNjdGxfaW5mb19s
b2NrKCkgZm9yIHdyaXR0aW5nIQorCSAqLworI2lmZGVmIElORVQKKwlpZiAoU0NUUF9CQVNFX0lO
Rk8odWRwNF90dW5fc29ja2V0KSAhPSBOVUxMKSB7CisJCXNvY2xvc2UoU0NUUF9CQVNFX0lORk8o
dWRwNF90dW5fc29ja2V0KSk7CisJCVNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgPSBO
VUxMOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBfQkFTRV9JTkZPKHVkcDZf
dHVuX3NvY2tldCkgIT0gTlVMTCkgeworCQlzb2Nsb3NlKFNDVFBfQkFTRV9JTkZPKHVkcDZfdHVu
X3NvY2tldCkpOworCQlTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpID0gTlVMTDsKKwl9
CisjZW5kaWYKK30KKworaW50CitzY3RwX292ZXJfdWRwX3N0YXJ0KHZvaWQpCit7CisjaWYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAwMDQ0CisJdWludDE2X3QgcG9ydDsKKwlpbnQgcmV0OworI2lm
ZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisjZW5kaWYKKwkvKgorCSAqIFRoaXMgZnVuY3Rp
b24gYXNzdW1lcyBzeXNjdGwgY2FsbGVyIGhvbGRzIHNjdHBfc3lzY3RsX2luZm9fbG9jaygpIGZv
ciB3cml0dGluZyEKKwkgKi8KKwlwb3J0ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5u
ZWxpbmdfcG9ydCk7CisJaWYgKG50b2hzKHBvcnQpID09IDApIHsKKwkJLyogTXVzdCBoYXZlIGEg
cG9ydCBzZXQgKi8KKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNpZmRlZiBJTkVUCisJaWYgKFND
VFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgIT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IHJ1
bm5pbmcgLS0gbXVzdCBzdG9wIGZpcnN0ICovCisJCXJldHVybiAoRUFMUkVBRFkpOworCX0KKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBfQkFTRV9JTkZPKHVkcDZfdHVuX3NvY2tldCkg
IT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IHJ1bm5pbmcgLS0gbXVzdCBzdG9wIGZpcnN0ICovCisJ
CXJldHVybiAoRUFMUkVBRFkpOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwlpZiAoKHJldCA9
IHNvY3JlYXRlKFBGX0lORVQsICZTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAorCSAg
ICAgICAgICAgICAgICAgICAgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsCisJICAgICAgICAgICAg
ICAgICAgICBjdXJ0aHJlYWQtPnRkX3VjcmVkLCBjdXJ0aHJlYWQpKSkgeworCQlzY3RwX292ZXJf
dWRwX3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKwkvKiBDYWxsIHRoZSBzcGVjaWFsIFVE
UCBob29rLiAqLworCWlmICgocmV0ID0gdWRwX3NldF9rZXJuZWxfdHVubmVsaW5nKFNDVFBfQkFT
RV9JTkZPKHVkcDRfdHVuX3NvY2tldCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2N0cF9yZWN2X3VkcF90dW5uZWxlZF9wYWNrZXQsCisjaWYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gMTEwMDAwMAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBf
cmVjdl9pY21wX3R1bm5lbGVkX3BhY2tldCwKKyNlbmRpZgorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwpKSkgeworCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0
dXJuIChyZXQpOworCX0KKwkvKiBPaywgd2UgaGF2ZSBhIHNvY2tldCwgYmluZCBpdCB0byB0aGUg
cG9ydC4gKi8KKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwor
CXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJc2luLnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworCXNpbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQpOworCWlmICgocmV0ID0g
c29iaW5kKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCksCisJICAgICAgICAgICAgICAg
ICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIGN1cnRocmVhZCkpKSB7CisJCXNjdHBfb3Zlcl91
ZHBfc3RvcCgpOworCQlyZXR1cm4gKHJldCk7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlp
ZiAoKHJldCA9IHNvY3JlYXRlKFBGX0lORVQ2LCAmU0NUUF9CQVNFX0lORk8odWRwNl90dW5fc29j
a2V0KSwKKwkgICAgICAgICAgICAgICAgICAgIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQLAorCSAg
ICAgICAgICAgICAgICAgICAgY3VydGhyZWFkLT50ZF91Y3JlZCwgY3VydGhyZWFkKSkpIHsKKwkJ
c2N0cF9vdmVyX3VkcF9zdG9wKCk7CisJCXJldHVybiAocmV0KTsKKwl9CisJLyogQ2FsbCB0aGUg
c3BlY2lhbCBVRFAgaG9vay4gKi8KKwlpZiAoKHJldCA9IHVkcF9zZXRfa2VybmVsX3R1bm5lbGlu
ZyhTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFja2V0LAorI2lmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDExMDAwMDAKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzY3RwX3JlY3ZfaWNtcDZfdHVubmVsZWRfcGFja2V0LAorI2VuZGlmCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpKSB7CisJCXNjdHBfb3Zlcl91ZHBfc3Rv
cCgpOworCQlyZXR1cm4gKHJldCk7CisJfQorCS8qIE9rLCB3ZSBoYXZlIGEgc29ja2V0LCBiaW5k
IGl0IHRvIHRoZSBwb3J0LiAqLworCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKKwlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OworCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlzaW42LnNpbjZfcG9ydCA9IGh0b25z
KHBvcnQpOworCWlmICgocmV0ID0gc29iaW5kKFNDVFBfQkFTRV9JTkZPKHVkcDZfdHVuX3NvY2tl
dCksCisJICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42LCBjdXJ0aHJl
YWQpKSkgeworCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKyNl
bmRpZgorCXJldHVybiAoMCk7CisjZWxzZQorCXJldHVybiAoRU5PVFNVUCk7CisjZW5kaWYKK30K
KyNlbmRpZgorCisvKgorICogc2N0cF9taW5fbXR1ICgpcmV0dXJucyB0aGUgbWluaW11bSBvZiBh
bGwgbm9uLXplcm8gYXJndW1lbnRzLgorICogSWYgYWxsIGFyZ3VtZW50cyBhcmUgemVybywgemVy
byBpcyByZXR1cm5lZC4KKyAqLwordWludDMyX3QKK3NjdHBfbWluX210dSh1aW50MzJfdCBtdHUx
LCB1aW50MzJfdCBtdHUyLCB1aW50MzJfdCBtdHUzKQoreworCWlmIChtdHUxID4gMCkgeworCQlp
ZiAobXR1MiA+IDApIHsKKwkJCWlmIChtdHUzID4gMCkgeworCQkJCXJldHVybiAobWluKG10dTEs
IG1pbihtdHUyLCBtdHUzKSkpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1cm4gKG1pbihtdHUxLCBt
dHUyKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobXR1MyA+IDApIHsKKwkJCQlyZXR1cm4g
KG1pbihtdHUxLCBtdHUzKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVybiAobXR1MSk7CisJCQl9
CisJCX0KKwl9IGVsc2UgeworCQlpZiAobXR1MiA+IDApIHsKKwkJCWlmIChtdHUzID4gMCkgewor
CQkJCXJldHVybiAobWluKG10dTIsIG10dTMpKTsKKwkJCX0gZWxzZSB7CisJCQkJcmV0dXJuICht
dHUyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldHVybiAobXR1Myk7CisJCX0KKwl9Cit9CisK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQordm9pZAorc2N0cF9oY19zZXRfbXR1KHVuaW9uIHNj
dHBfc29ja3N0b3JlICphZGRyLCB1aW50MTZfdCBmaWJudW0sIHVpbnQzMl90IG10dSkKK3sKKwlz
dHJ1Y3QgaW5fY29ubmluZm8gaW5jOworCisJbWVtc2V0KCZpbmMsIDAsIHNpemVvZihzdHJ1Y3Qg
aW5fY29ubmluZm8pKTsKKwlpbmMuaW5jX2ZpYm51bSA9IGZpYm51bTsKKwlzd2l0Y2ggKGFkZHIt
PnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCWluYy5pbmNf
ZmFkZHIgPSBhZGRyLT5zaW4uc2luX2FkZHI7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwljYXNlIEFGX0lORVQ2OgorCQlpbmMuaW5jX2ZsYWdzIHw9IElOQ19JU0lQVjY7CisJCWlu
Yy5pbmM2X2ZhZGRyID0gYWRkci0+c2luNi5zaW42X2FkZHI7CisJCWJyZWFrOworI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwl0Y3BfaGNfdXBkYXRlbXR1KCZpbmMsICh1X2xvbmcp
bXR1KTsKK30KKwordWludDMyX3QKK3NjdHBfaGNfZ2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9y
ZSAqYWRkciwgdWludDE2X3QgZmlibnVtKQoreworCXN0cnVjdCBpbl9jb25uaW5mbyBpbmM7CisK
KwltZW1zZXQoJmluYywgMCwgc2l6ZW9mKHN0cnVjdCBpbl9jb25uaW5mbykpOworCWluYy5pbmNf
ZmlibnVtID0gZmlibnVtOworCXN3aXRjaCAoYWRkci0+c2Euc2FfZmFtaWx5KSB7CisjaWZkZWYg
SU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaW5jLmluY19mYWRkciA9IGFkZHItPnNpbi5zaW5fYWRk
cjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWlu
Yy5pbmNfZmxhZ3MgfD0gSU5DX0lTSVBWNjsKKwkJaW5jLmluYzZfZmFkZHIgPSBhZGRyLT5zaW42
LnNpbjZfYWRkcjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlyZXR1cm4gKDApOwor
CX0KKwlyZXR1cm4gKCh1aW50MzJfdCl0Y3BfaGNfZ2V0bXR1KCZpbmMpKTsKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi42OWZlNDg0OTgxYzFjNGZlMGVlZjQyOTUwODA1MmEz
N2NjYWFmMmQ0IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0
aWwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaApAQCAtMCww
ICsxLDQzMCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwdXRpbC5oIDMyNDYxNSAyMDE3LTEwLTE0IDEwOjAy
OjU5WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9VVElMX0hf
CisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfVVRJTF9IXworCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKKyNkZWZpbmUgU0NUUF9SRUFEX0xPQ0tfSEVMRCAx
CisjZGVmaW5lIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxEIDAKKworI2lmZGVmIFNDVFBfQVNPQ0xP
R19PRl9UU05TCit2b2lkIHNjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IpOworI2VuZGlmCisKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORworc3RydWN0IG1idWYg
KnNjdHBfbV9mcmVlKHN0cnVjdCBtYnVmICptKTsKK3ZvaWQgc2N0cF9tX2ZyZWVtKHN0cnVjdCBt
YnVmICptKTsKKyNlbHNlCisjZGVmaW5lIHNjdHBfbV9mcmVlIG1fZnJlZQorI2RlZmluZSBzY3Rw
X21fZnJlZW0gbV9mcmVlbQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0Vf
QlVGKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKK3ZvaWQKK3NjdHBfbG9nX3RyYWNlKHVpbnQzMl90
IGZyLCBjb25zdCBjaGFyICpzdHIgU0NUUF9VTlVTRUQsIHVpbnQzMl90IGEsIHVpbnQzMl90IGIs
IHVpbnQzMl90IGMsIHVpbnQzMl90IGQsIHVpbnQzMl90IGUsIHVpbnQzMl90IGYpOworI2VuZGlm
CisKKyNkZWZpbmUgc2N0cF9nZXRfYXNzb2NpZChzdGNiKSAoKHNjdHBfYXNzb2NfdClzdGNiLT5h
c29jLmFzc29jX2lkKQorCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5cGVzCisgKi8KK2ludDMy
X3QKK3NjdHBfbWFwX2Fzc29jX3N0YXRlKGludCk7CisKK3VpbnQzMl90CitzY3RwX2dldF9pZmFf
aGFzaF92YWwoc3RydWN0IHNvY2thZGRyICphZGRyKTsKKworc3RydWN0IHNjdHBfaWZhICoKK3Nj
dHBfZmluZF9pZmFfaW5fZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNvY2thZGRy
ICphZGRyLCBpbnQgaG9sZF9sb2NrKTsKKworc3RydWN0IHNjdHBfaWZhICoKK3NjdHBfZmluZF9p
ZmFfYnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90IHZyZl9pZCwgaW50IGhv
bGRzX2xvY2spOworCit1aW50MzJfdCBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTihzdHJ1Y3Qgc2N0
cF9wY2IgKik7CisKK3VpbnQzMl90IHNjdHBfc2VsZWN0X2FfdGFnKHN0cnVjdCBzY3RwX2lucGNi
ICosIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgaW50KTsKKworaW50IHNjdHBfaW5p
dF9hc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50MzJfdCwg
dWludDMyX3QsIHVpbnQxNl90KTsKKwordm9pZCBzY3RwX2ZpbGxfcmFuZG9tX3N0b3JlKHN0cnVj
dCBzY3RwX3BjYiAqKTsKKwordm9pZAorc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X2FkZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IG51bWJlcmluLAorCQkJICAgICB1aW50MTZfdCBu
dW1iZXJvdXQsIGludCBmbGFnKTsKK3ZvaWQKK3NjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF90c24o
c3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZW5kaW5nX3RzbiwgdWludDMyX3QgcmVj
dl90c24sIGludCBmbGFnKTsKKwordm9pZAorc2N0cF90aW1lcl9zdGFydChpbnQsIHN0cnVjdCBz
Y3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7
CisKK3ZvaWQKK3NjdHBfdGltZXJfc3RvcChpbnQsIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVj
dCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgdWludDMyX3QpOworCitpbnQK
K3NjdHBfZHluYW1pY19zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJfdCB2
cmZfaWQpOworCit2b2lkCitzY3RwX210dV9zaXplX3Jlc2V0KHN0cnVjdCBzY3RwX2lucGNiICos
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVpbnQzMl90KTsKKwordm9pZAorc2N0cF93YWtl
dXBfdGhlX3JlYWRfc29ja2V0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAh
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisp
OworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3RwX2ludm9rZV9yZWN2X2Nh
bGxiYWNrKHN0cnVjdCBzY3RwX2lucGNiICosCisgICAgc3RydWN0IHNjdHBfdGNiICosCisgICAg
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKiwKKyAgICBpbnQpOworCisjZW5kaWYKK3ZvaWQK
K3NjdHBfYWRkX3RvX3JlYWRxKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAor
ICAgIHN0cnVjdCBzb2NrYnVmICpzYiwKKyAgICBpbnQgZW5kLAorICAgIGludCBpbnByZWFkX2xv
Y2tlZCwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAg
KTsKKwordm9pZCBzY3RwX2l0ZXJhdG9yX3dvcmtlcih2b2lkKTsKKwordWludDMyX3Qgc2N0cF9n
ZXRfcHJldl9tdHUodWludDMyX3QpOwordWludDMyX3Qgc2N0cF9nZXRfbmV4dF9tdHUodWludDMy
X3QpOworCit2b2lkCitzY3RwX3RpbWVvdXRfaGFuZGxlcih2b2lkICopOworCit1aW50MzJfdAor
c2N0cF9jYWxjdWxhdGVfcnRvKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IHRpbWV2YWwgKiwgaW50KTsK
KwordWludDMyX3Qgc2N0cF9jYWxjdWxhdGVfbGVuKHN0cnVjdCBtYnVmICopOworCitjYWRkcl90
IHNjdHBfbV9nZXRwdHIoc3RydWN0IG1idWYgKiwgaW50LCBpbnQsIHVpbnQ4X3QgKik7CisKK3N0
cnVjdCBzY3RwX3BhcmFtaGRyICoKK3NjdHBfZ2V0X25leHRfcGFyYW0oc3RydWN0IG1idWYgKiwg
aW50LAorICAgIHN0cnVjdCBzY3RwX3BhcmFtaGRyICosIGludCk7CisKK3N0cnVjdCBtYnVmICoK
K3NjdHBfYWRkX3BhZF90b21idWYoc3RydWN0IG1idWYgKiwgaW50KTsKKworc3RydWN0IG1idWYg
Kgorc2N0cF9wYWRfbGFzdG1idWYoc3RydWN0IG1idWYgKiwgaW50LCBzdHJ1Y3QgbWJ1ZiAqKTsK
Kwordm9pZCBzY3RwX3VscF9ub3RpZnkodWludDMyX3QsIHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50
MzJfdCwgdm9pZCAqLCBpbnQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQorICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKyAgICApOworCit2
b2lkCitzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
b2xkX2lucCwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV3X2lucCwKKyAgICBzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIGludCB3YWl0ZmxhZ3MpOworCisKK3ZvaWQgc2N0cF9zdG9wX3RpbWVyc19m
b3Jfc2h1dGRvd24oc3RydWN0IHNjdHBfdGNiICopOworCit2b2lkIHNjdHBfcmVwb3J0X2FsbF9v
dXRib3VuZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDE2X3QsIGludCwgaW50CisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQ
X1VOVVNFRAorI2VuZGlmCisgICAgKTsKKworaW50IHNjdHBfZXhwYW5kX21hcHBpbmdfYXJyYXko
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdWludDMyX3QpOworCit2b2lkIHNjdHBfYWJvcnRf
bm90aWZpY2F0aW9uKHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50OF90LCB1aW50MTZfdCwKKwkJCSAg
ICAgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKiwgaW50CisjaWYgIWRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2Vu
ZGlmCisgICAgKTsKKworLyogV2UgYWJvcnQgcmVzcG9uZGluZyB0byBhbiBJUCBwYWNrZXQgZm9y
IHNvbWUgcmVhc29uICovCit2b2lkCitzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0cnVjdCBzY3Rw
X2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLAorICAgICAgICAgICAg
ICAgICAgICAgICBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IG1idWYgKiwKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LCB1
aW50MzJfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2
X3QpOworCisKKy8qIFdlIGNob29zZSB0byBhYm9ydCB2aWEgdXNlciBpbnB1dCAqLwordm9pZAor
c2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0
cF90Y2IgKiwKKyAgICBzdHJ1Y3QgbWJ1ZiAqLCBpbnQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgIFNDVFBfVU5VU0VECisjZW5k
aWYKKyk7CisKK3ZvaWQgc2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwK
KyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRy
ICosCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBf
aW5wY2IgKiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqLAorI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3Qs
IHVpbnQxNl90LAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIHVpbnQx
Nl90KTsKKworaW50IHNjdHBfY29ubmVjdHhfaGVscGVyX2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBpbnQgdG90YWRkciwgaW50ICplcnJvcik7
CisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Nvbm5lY3R4X2hlbHBlcl9maW5kKHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICB1bnNpZ25lZCBpbnQg
KnRvdGFkZHIsIHVuc2lnbmVkIGludCAqbnVtX3Y0LCB1bnNpZ25lZCBpbnQgKm51bV92NiwKKyAg
ICBpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbGltaXQsIGludCAqYmFkX2FkZHIpOworCitpbnQg
c2N0cF9pc190aGVyZV9hbl9hYm9ydF9oZXJlKHN0cnVjdCBtYnVmICosIGludCwgdWludDMyX3Qg
Kik7CisjaWZkZWYgSU5FVDYKK3VpbnQzMl90IHNjdHBfaXNfc2FtZV9zY29wZShzdHJ1Y3Qgc29j
a2FkZHJfaW42ICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CisKKyNpZiBkZWZpbmVkKFNDVFBf
RU1CRURERURfVjZfU0NPUEUpCitzdHJ1Y3Qgc29ja2FkZHJfaW42ICoKK3NjdHBfcmVjb3Zlcl9z
Y29wZShzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CisKKyNp
ZmRlZiBTQ1RQX0tBTUUKKyNkZWZpbmUgc2N0cF9yZWNvdmVyX3Njb3BlX21hYyhhZGRyLCBzdG9y
ZSkgZG8geyBcCisJIGlmICgoYWRkci0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpICYmIFwKKwkg
ICAgIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2FkZHIpKSkgeyBcCisJCSpz
dG9yZSA9ICphZGRyOyBcCisJCWlmIChhZGRyLT5zaW42X3Njb3BlX2lkID09IDApIHsgXAorCQkJ
aWYgKCFzYTZfcmVjb3ZlcnNjb3BlKHN0b3JlKSkgeyBcCisJCQkJYWRkciA9IHN0b3JlOyBcCisJ
CQl9IFwKKwkJfSBlbHNlIHsgXAorCQkJaW42X2NsZWFyc2NvcGUoJmFkZHItPnNpbjZfYWRkcik7
IFwKKwkJCWFkZHIgPSBzdG9yZTsgXAorCQl9IFwKKwkgfSBcCit9IHdoaWxlICgwKQorI2Vsc2UK
KyNkZWZpbmUgc2N0cF9yZWNvdmVyX3Njb3BlX21hYyhhZGRyLCBzdG9yZSkgZG8geyBcCisJaWYg
KChhZGRyLT5zaW42X2ZhbWlseSA9PSBBRl9JTkVUNikgJiYgXAorCSAgICAoSU42X0lTX1NDT1BF
X0xJTktMT0NBTCgmYWRkci0+c2luNl9hZGRyKSkpIHsgXAorCQkqc3RvcmUgPSAqYWRkcjsgXAor
CQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7IFwKKwkJCWlmICghaW42X3JlY292ZXJz
Y29wZShzdG9yZSwgJnN0b3JlLT5zaW42X2FkZHIsIFwKKwkJCQkJICAgICAgTlVMTCkpIHsgXAor
CQkJCWFkZHIgPSBzdG9yZTsgXAorCQkJfSBcCisJCX0gZWxzZSB7IFwKKwkJCWluNl9jbGVhcnNj
b3BlKCZhZGRyLT5zaW42X2FkZHIpOyBcCisJCQlhZGRyID0gc3RvcmU7IFwKKwkJfSBcCisJfSBc
Cit9IHdoaWxlICgwKQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCitpbnQgc2N0cF9jbXBhZGRy
KHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisKK3ZvaWQgc2N0cF9wcmlu
dF9hZGRyZXNzKHN0cnVjdCBzb2NrYWRkciAqKTsKKworaW50CitzY3RwX3JlbGVhc2VfcHJfc2N0
cF9jaHVuayhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqLAorICAg
IHVpbnQ4X3QsIGludAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorKTsKKworc3RydWN0IG1i
dWYgKnNjdHBfZ2VuZXJhdGVfY2F1c2UodWludDE2X3QsIGNoYXIgKik7CitzdHJ1Y3QgbWJ1ZiAq
c2N0cF9nZW5lcmF0ZV9ub191c2VyX2RhdGFfY2F1c2UodWludDMyX3QpOworCit2b2lkIHNjdHBf
YmluZHhfYWRkX2FkZHJlc3Moc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisJCQkgICAgc3RydWN0IHNvY2thZGRyICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAor
CQkJICAgIHVpbnQzMl90IHZyZl9pZCwgaW50ICplcnJvciwgdm9pZCAqcCk7Cit2b2lkIHNjdHBf
YmluZHhfZGVsZXRlX2FkZHJlc3Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJCSAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKnNhLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsCisJCQkgICAgICAgdWlu
dDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yKTsKKworaW50IHNjdHBfbG9jYWxfYWRkcl9jb3VudChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOworCisjaWZkZWYgU0NUUF9NQkNOVF9MT0dHSU5HCit2b2lk
CitzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICosCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqLCBpbnQpOworCisjZWxzZQor
I2RlZmluZSBzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgdHAxLCBjaGtfY250KSAgXAor
ZG8geyBcCisJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7IFwKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmKChhc29jKS0+Y2h1bmtzX29uX291dF9xdWV1ZSksIGNoa19jbnQpOyBcCisJCWlmICgoYXNv
YyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHRwMS0+Ym9va19zaXplKSB7IFwKKwkJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJigoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKSwgdHAx
LT5ib29rX3NpemUpOyBcCisJCX0gZWxzZSB7IFwKKwkJCShhc29jKS0+dG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUgPSAwOyBcCisJCX0gXAorCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgJiYgKChzdGNi
LT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwgXAorCQkg
ICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSkpIHsgXAorCQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPj0gdHAxLT5i
b29rX3NpemUpIHsgXAorCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigoc3RjYiktPnNjdHBfc29j
a2V0LT5zb19zbmQuc2JfY2MpLCB0cDEtPmJvb2tfc2l6ZSk7IFwKKwkJCX0gZWxzZSB7IFwKKwkJ
CQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0gMDsgXAorCQkJfSBcCisJCX0gXAor
CX0gXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNkZWZpbmUgc2N0cF9mcmVlX3NwYnVmc3Bh
Y2Uoc3RjYiwgYXNvYywgc3ApICBcCitkbyB7IFwKKwlpZiAoc3AtPmRhdGEgIT0gTlVMTCkgeyBc
CisJCWlmICgoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHNwLT5sZW5ndGgpIHsg
XAorCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6
ZSwgc3AtPmxlbmd0aCk7IFwKKwkJfSBlbHNlIHsgXAorCQkJKGFzb2MpLT50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSA9IDA7IFwKKwkJfSBcCisJCWlmIChzdGNiLT5zY3RwX3NvY2tldCAmJiAoKHN0
Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fCBcCisJ
CSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpKSkgeyBcCisJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA+PSBzcC0+
bGVuZ3RoKSB7IFwKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5zY3RwX3NvY2tldC0+
c29fc25kLnNiX2NjLHNwLT5sZW5ndGgpOyBcCisJCQl9IGVsc2UgeyBcCisJCQkJc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7IFwKKwkJCX0gXAorCQl9IFwKKwl9IFwKK30gd2hp
bGUgKDApCisKKyNkZWZpbmUgc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwgc3opICBcCitkbyB7IFwK
KwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSxzeik7
IFwKKwlpZiAoKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpICYmIFwKKwkgICAgKChzdGNiLT5z
Y3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwgXAorCSAgICAg
KHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkp
IHsgXAorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyxz
eik7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKy8qIGZ1bmN0aW9ucyB0byBzdGFydC9zdG9wIHVk
cCB0dW5uZWxpbmcgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVC
U0RfXykKK3ZvaWQgc2N0cF9vdmVyX3VkcF9zdG9wKHZvaWQpOworaW50IHNjdHBfb3Zlcl91ZHBf
c3RhcnQodm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQordm9pZCBzY3Rw
X292ZXJfdWRwX3Jlc3RhcnQodm9pZCk7CisjZW5kaWYKKworaW50CitzY3RwX3NvcmVjZWl2ZShz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcHNhLAorICAgIHN0cnVjdCB1aW8g
KnVpbywKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wMCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqKmNvbnRyb2xw
LAorICAgIGludCAqZmxhZ3NwKTsKKwordm9pZAorc2N0cF9taXNjX2ludHModWludDhfdCBmcm9t
LCB1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBkKTsKKwordm9p
ZAorc2N0cF93YWtldXBfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICB1aW50MzJfdCB3
YWtlX2NudCwgaW50IGZyb20pOworCit2b2lkIHNjdHBfbG9nX3N0cm1fZGVsX2FsdChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIGludCk7CisKK3Zv
aWQgc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgYWN0aW9u
KTsKKworCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKK3ZvaWQKK3NjdHBfbG9nX21iKHN0cnVj
dCBtYnVmICptLCBpbnQgZnJvbSk7CisKK3ZvaWQKK3NjdHBfbG9nX21iYyhzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGZyb20pOworI2VuZGlmCisKK3ZvaWQKK3NjdHBfc2Jsb2coc3RydWN0IHNvY2tidWYg
KnNiLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGZyb20sIGludCBpbmNyKTsKKwor
dm9pZAorc2N0cF9sb2dfc3RybV9kZWwoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRy
b2wsCisgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnBvc2NoaywKKyAgICBpbnQgZnJv
bSk7Cit2b2lkIHNjdHBfbG9nX2N3bmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9uZXRzICosIGludCwgdWludDhfdCk7Cit2b2lkIHJ0b19sb2dnaW5nKHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgaW50IGZyb20pOworCit2b2lkIHNjdHBfbG9nX2Nsb3Npbmcoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQxNl90IGxvYyk7CisKK3ZvaWQg
c2N0cF9sb2dfbG9jayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQ4X3QgZnJvbSk7Cit2b2lkIHNjdHBfbG9nX21heGJ1cnN0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQsIGludCwgdWludDhfdCk7Cit2b2lkIHNj
dHBfbG9nX2Jsb2NrKHVpbnQ4X3QsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHNpemVfdCk7
Cit2b2lkIHNjdHBfbG9nX3J3bmQodWludDhfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJf
dCk7Cit2b2lkIHNjdHBfbG9nX3J3bmRfc2V0KHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MzJfdCwg
dWludDMyX3QsIHVpbnQzMl90KTsKK2ludCBzY3RwX2ZpbGxfc3RhdF9sb2codm9pZCAqLCBzaXpl
X3QgKik7Cit2b2lkIHNjdHBfbG9nX2ZyKHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIGlu
dCk7Cit2b2lkIHNjdHBfbG9nX3NhY2sodWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWlu
dDE2X3QsIHVpbnQxNl90LCBpbnQpOwordm9pZCBzY3RwX2xvZ19tYXAodWludDMyX3QsIHVpbnQz
Ml90LCB1aW50MzJfdCwgaW50KTsKK3ZvaWQgc2N0cF9wcmludF9tYXBwaW5nX2FycmF5KHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKK3ZvaWQgc2N0cF9jbHJfc3RhdF9sb2codm9pZCk7
CisKKworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAordm9pZAorc2N0cF9hdWRpdGluZyhp
bnQsIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBz
Y3RwX25ldHMgKik7Cit2b2lkIHNjdHBfYXVkaXRfbG9nKHVpbnQ4X3QsIHVpbnQ4X3QpOworCisj
ZW5kaWYKK3VpbnQzMl90IHNjdHBfbWluX210dSh1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90
KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQordm9pZCBzY3RwX2hjX3NldF9tdHUodW5pb24g
c2N0cF9zb2Nrc3RvcmUgKiwgdWludDE2X3QsIHVpbnQzMl90KTsKK3VpbnQzMl90IHNjdHBfaGNf
Z2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqLCB1aW50MTZfdCk7CisjZW5kaWYKKyNlbmRp
ZgkJCQkvKiBfS0VSTkVMICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2
L3NjdHA2X3VzcnJlcS5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4
YzUzOTEuLjVhNTdmZDZlN2IzNTM5MzBmYWI4MDBiZGI1YTdlZTk3ZDExYmJkNjEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMKKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwpAQCAtMCwwICsxLDE4NzAg
QEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAq
IENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3
YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisg
KiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9f
RnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhl
YWQvc3lzL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jIDMzMjI3MyAyMDE4LTA0LTA4IDEyOjA4OjIw
WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNp
ZmRlZiBJTkVUNgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNl
bmRpZgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1ZGUgPG5l
dGluZXQ2L3NjdHA2X3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vp
by5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291
dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9jcmMzMi5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBBUFBMRV9GSUxFX05PIDkK
KyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitleHRlcm4gc3RydWN0IHByb3Rv
c3cgaW5ldHN3W107CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQoraW50IGlwNl92Nm9ubHk9MDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCit2b2lkCitpbjZfc2luNl8yX3NpbihzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnNpbiwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKK3sKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJdWludDMyX3QgdGVtcDsKKyNlbmRpZgorCW1lbXNl
dChzaW4sIDAsIHNpemVvZigqc2luKSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLT5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4tPnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworCXNpbi0+c2luX3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXRlbXAgPSBzaW42LT5zaW42X2FkZHIuczZf
YWRkcjE2WzddOworCXRlbXAgPSB0ZW1wIDw8IDE2OworCXRlbXAgPSB0ZW1wIHwgc2luNi0+c2lu
Nl9hZGRyLnM2X2FkZHIxNls2XTsKKwlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IHRlbXA7CisjZWxz
ZQorCXNpbi0+c2luX2FkZHIuc19hZGRyID0gc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlszXTsK
KyNlbmRpZgorfQorCit2b2lkCitpbjZfc2luNl8yX3Npbl9pbl9zb2NrKHN0cnVjdCBzb2NrYWRk
ciAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX3A7CisJc3RydWN0IHNvY2thZGRy
X2luNiBzaW42OworCisJLyogc2F2ZSBvcmlnaW5hbCBzb2NrYWRkcl9pbjYgYWRkciBhbmQgY29u
dmVydCBpdCB0byBzb2NrYWRkcl9pbiAgKi8KKwlzaW42ID0gKihzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopbmFtOworCXNpbl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5hbTsKKwlpbjZfc2luNl8y
X3NpbihzaW5fcCwgJnNpbjYpOworfQorCit2b2lkCitpbjZfc2luXzJfdjRtYXBzaW42KHN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42KQoreworCW1lbXNl
dChzaW42LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworIAlzaW42LT5zaW42X2Zh
bWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlzaW42LT5zaW42X2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCXNpbjYtPnNpbjZfcG9ydCA9
IHNpbi0+c2luX3BvcnQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCSgo
dWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVswXSA9IDA7CisJKCh1aW50MzJfdCAqKSZzaW42
LT5zaW42X2FkZHIpWzFdID0gMDsKKwkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMl0g
PSBodG9ubCgweGZmZmYpOworCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVszXSA9IHNp
bi0+c2luX2FkZHIuc19hZGRyOworI2Vsc2UKKyAJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsw
XSA9IDA7CisJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsxXSA9IDA7CisgCXNpbjYtPnNpbjZf
YWRkci5zNl9hZGRyMzJbMl0gPSBodG9ubCgweGZmZmYpOworCXNpbjYtPnNpbjZfYWRkci5zNl9h
ZGRyMzJbM10gPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKyNlbmRpZgorfQorI2VuZGlmCisjZW5k
aWYKKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3NjdHA2X2lucHV0X3dpdGhfcG9ydChzdHJ1
Y3QgbWJ1ZiAqKmlfcGFrLCBpbnQgKm9mZnAsIHVpbnQxNl90IHBvcnQpCisjZWxpZiBkZWZpbmVk
KCBfX1BhbmRhX18pCitzY3RwNl9pbnB1dChwYWtoYW5kbGVfdHlwZSAqaV9wYWspCisjZWxzZQor
c2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8pCisj
ZW5kaWYKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgaXBobGVuOworCXVpbnQzMl90IHZyZl9p
ZDsKKwl1aW50OF90IGVjbl9iaXRzOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJ
c3RydWN0IGlwNl9oZHIgKmlwNjsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2g7CisJc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKmNoOworCWludCBsZW5ndGgsIG9mZnNldDsKKwl1aW50OF90IGNvbXB1dGVfY3Jj
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJdWludDMyX3QgbWZsb3dpZDsKKwl1aW50OF90
IG1mbG93dHlwZTsKKwl1aW50MTZfdCBmaWJudW07CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykpCisJdWludDE2X3QgcG9ydCA9IDA7Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0
cyB0aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAqLworCWlwaGxlbiA9IHNp
emVvZihzdHJ1Y3QgaXA2X2hkcik7CisjZWxzZQorCWlwaGxlbiA9ICpvZmZwOworI2VuZGlmCisJ
aWYgKFNDVFBfR0VUX1BLVF9WUkZJRCgqaV9wYWssIHZyZl9pZCkpIHsKKwkJU0NUUF9SRUxFQVNF
X1BLVCgqaV9wYWspOworCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisJfQorCW0gPSBTQ1RQX0hF
QURFUl9UT19DSEFJTigqaV9wYWspOworI2lmZGVmIF9fUGFuZGFfXworCVNDVFBfREVUQUNIX0hF
QURFUl9GUk9NX0NIQUlOKCppX3Bhayk7CisJKHZvaWQpU0NUUF9SRUxFQVNFX0hFQURFUigqaV9w
YWspOworI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkvKiBMb2cgaW4gYW55IGlu
cHV0IG1idWZzICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19tYmMobSwgU0NUUF9NQlVG
X0lOUFVUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCisJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJB
Q0lORykgeworCQlzY3RwX3BhY2tldF9sb2cobSk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkKKwlTQ1RQREJHKFND
VFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2Yg
bGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCViLlxuIiwKKwkgICAg
ICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIGlmX25hbWUobS0+bV9wa3RoZHIucmN2aWYp
LAorCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCBDU1VNX0JJVFMpOworI2Vs
aWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJU0NUUERCRyhTQ1RQX0RFQlVHX0NSQ09G
RkxPQUQsCisJICAgICAgICAic2N0cDZfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAlZCByZWNl
aXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5tX3BrdGhk
ci5sZW4sCisJICAgICAgICBpZl9uYW1lKG0tPm1fcGt0aGRyLnJjdmlmKSwKKwkgICAgICAgIG0t
Pm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2Vsc2UKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZG
TE9BRCwKKwkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2Vp
dmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRy
LmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKKwkgICAgICAgIG0t
Pm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwNl9p
bnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzJWQgd2l0aCBjc3VtX2Zs
YWdzIDB4JXguXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgbS0+bV9w
a3RoZHIucmN2aWYtPmlmX25hbWUsCisJICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfdW5p
dCwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX1dpbmRvd3NfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAg
ICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGgg
Y3N1bV9mbGFncyAweCV4LlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAg
IG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1f
ZmxhZ3MpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwltZmxvd2lkID0gbS0+
bV9wa3RoZHIuZmxvd2lkOworCW1mbG93dHlwZSA9IE1fSEFTSFRZUEVfR0VUKG0pOworCWZpYm51
bSA9IE1fR0VURklCKG0pOworI2VuZGlmCisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tl
dHMpOworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMpOworCS8qIEdl
dCBJUCwgU0NUUCwgYW5kIGZpcnN0IGNodW5rIGhlYWRlciB0b2dldGhlciBpbiB0aGUgZmlyc3Qg
bWJ1Zi4gKi8KKwlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwlpcDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRy
ICopOworCUlQNl9FWFRIRFJfR0VUKHNoLCBzdHJ1Y3Qgc2N0cGhkciAqLCBtLCBpcGhsZW4sCisJ
CSAgICAgICAoaW50KShzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2NodW5raGRyKSkpOworCWlmIChzaCA9PSBOVUxMKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2hkcm9wcyk7CisJCXJldHVybiAoSVBQUk9UT19ET05FKTsKKwl9CisJY2ggPSAoc3RydWN0IHNj
dHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwlv
ZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwltZW1zZXQoJnNyYywgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlzcmMuc2luNl9mYW1pbHkgPSBBRl9JTkVU
NjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJc3JjLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOworI2VuZGlmCisJc3JjLnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlz
cmMuc2luNl9hZGRyID0gaXA2LT5pcDZfc3JjOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisJLyogWFhYOiBUaGlzIGNvZGUgc2hvdWxkIGFsc28gYmUg
dXNlZCBvbiBBcHBsZSAqLworI2VuZGlmCisJaWYgKGluNl9zZXRzY29wZSgmc3JjLnNpbjZfYWRk
ciwgbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKKwkJZ290byBvdXQ7CisJfQorI2Vu
ZGlmCisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJZHN0
LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWRzdC5zaW42
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCWRzdC5zaW42X3Bv
cnQgPSBzaC0+ZGVzdF9wb3J0OworCWRzdC5zaW42X2FkZHIgPSBpcDYtPmlwNl9kc3Q7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkvKiBYWFg6IFRo
aXMgY29kZSBzaG91bGQgYWxzbyBiZSB1c2VkIG9uIEFwcGxlICovCisjZW5kaWYKKwlpZiAoaW42
X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBtLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkg
eworCQlnb3RvIG91dDsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBk
ZWZpbmVkKE5GQUlUSCkgJiYgMCA8IE5GQUlUSAorCWlmIChmYWl0aHByZWZpeCgmZHN0LnNpbjZf
YWRkcikpIHsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisjZW5kaWYKKwlsZW5ndGggPSBudG9o
cyhpcDYtPmlwNl9wbGVuKSArIGlwaGxlbjsKKwkvKiBWYWxpZGF0ZSBtYnVmIGNoYWluIGxlbmd0
aCB3aXRoIElQIHBheWxvYWQgbGVuZ3RoLiAqLworCWlmIChTQ1RQX0hFQURFUl9MRU4obSkgIT0g
bGVuZ3RoKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCSAgICAgICAgInNjdHA2
X2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwgbGVuZ3RoLCBTQ1RQX0hF
QURFUl9MRU4obSkpOworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQlnb3RvIG91
dDsKKwl9CisJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmaXA2LT5pcDZfZHN0KSkgeworCQln
b3RvIG91dDsKKwl9CisJZWNuX2JpdHMgPSAoKG50b2hsKGlwNi0+aXA2X2Zsb3cpID4+IDIwKSAm
IDB4MDAwMDAwZmYpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMDAwMAorCWlmIChtLT5tX3BrdGhkci5jc3VtX2ZsYWdzICYgQ1NVTV9TQ1RQX1ZB
TElEKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7CisJCWNvbXB1dGVfY3Jj
ID0gMDsKKwl9IGVsc2UgeworI2Vsc2UKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2Nz
dW1fb25fbG9vcGJhY2spICYmCisJICAgIChJTjZfQVJFX0FERFJfRVFVQUwoJnNyYy5zaW42X2Fk
ZHIsICZkc3Quc2luNl9hZGRyKSkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3Jj
KTsKKwkJY29tcHV0ZV9jcmMgPSAwOworCX0gZWxzZSB7CisjZW5kaWYKKwkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAxOworCX0KKwlzY3RwX2NvbW1v
bl9pbnB1dF9wcm9jZXNzaW5nKCZtLCBpcGhsZW4sIG9mZnNldCwgbGVuZ3RoLAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbXB1dGVfY3JjLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNuX2JpdHMsCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOworIG91dDoKKwlpZiAobSkgeworCQlzY3RwX21fZnJlZW0o
bSk7CisJfQorCXJldHVybiAoSVBQUk9UT19ET05FKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBM
RV9fKQoraW50CitzY3RwNl9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKmlfcGFrLCBpbnQgKm9mZnApCit7
CisJcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9mZnAsIDApKTsKK30KKyNl
bmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK2ludAorc2N0cDZfaW5wdXQoc3RydWN0
IG1idWYgKippX3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQpCit7CisJcmV0
dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9mZnAsIDApKTsKK30KKyNlbmRpZgor
Cit2b2lkCitzY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LAorICAgICAgICAgICAgIHVpbnQ4X3QgaWNtcDZfdHlwZSwKKyAgICAgICAgICAgICB1aW50
OF90IGljbXA2X2NvZGUsCisgICAgICAgICAgICAgdWludDMyX3QgbmV4dF9tdHUpCit7CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc3Ry
dWN0IHNvY2tldCAqc287CisjZW5kaWYKKwlpbnQgdGltZXJfc3RvcHBlZDsKKworCXN3aXRjaCAo
aWNtcDZfdHlwZSkgeworCWNhc2UgSUNNUDZfRFNUX1VOUkVBQ0g6CisJCWlmICgoaWNtcDZfY29k
ZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFKSB8fAorCQkgICAgKGljbXA2X2NvZGUgPT0g
SUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4pIHx8CisJCSAgICAoaWNtcDZfY29kZSA9PSBJQ01QNl9E
U1RfVU5SRUFDSF9CRVlPTkRTQ09QRSkgfHwKKwkJICAgIChpY21wNl9jb2RlID09IElDTVA2X0RT
VF9VTlJFQUNIX0FERFIpKSB7CisJCQkvKiBNYXJrIHRoZSBuZXQgdW5yZWFjaGFibGUuICovCisJ
CQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCS8qIE9r
IHRoYXQgZGVzdGluYXRpb24gaXMgbm90IHJlYWNoYWJsZSAqLworCQkJCW5ldC0+ZGVzdF9zdGF0
ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBf
QUREUl9QRjsKKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04s
CisJCQkJICAgICAgICAgICAgICAgIHN0Y2IsIDAsICh2b2lkICopbmV0LCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQkJfQorCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJYnJlYWs7CisJ
Y2FzZSBJQ01QNl9QQVJBTV9QUk9COgorCQkvKiBUcmVhdCBpdCBsaWtlIGFuIEFCT1JULiAqLwor
CQlpZiAoaWNtcDZfY29kZSA9PSBJQ01QNl9QQVJBTVBST0JfTkVYVEhFQURFUikgeworCQkJc2N0
cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMSwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCSh2b2lkKXNjdHBfZnJl
ZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJCSAgICAgIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzIpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJ
CWJyZWFrOworCWNhc2UgSUNNUDZfUEFDS0VUX1RPT19CSUc6CisJCWlmIChuZXQtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfTk9fUE1UVUQpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90aW1l
ci50aW1lcikpIHsKKwkJCXRpbWVyX3N0b3BwZWQgPSAxOworCQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAorCQkJICAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzEpOworCQl9IGVsc2Ugewor
CQkJdGltZXJfc3RvcHBlZCA9IDA7CisJCX0KKwkJLyogVXBkYXRlIHRoZSBwYXRoIE1UVS4gKi8K
KwkJaWYgKG5ldC0+cG9ydCkgeworCQkJbmV4dF9tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
OworCQl9CisJCWlmIChuZXQtPm10dSA+IG5leHRfbXR1KSB7CisJCQluZXQtPm10dSA9IG5leHRf
bXR1OworCQl9CisJCS8qIFVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gTVRVICovCisJCWlmIChzdGNi
LT5hc29jLnNtYWxsZXN0X210dSA+IG5leHRfbXR1KSB7CisJCQlzY3RwX3BhdGhtdHVfYWRqdXN0
bWVudChzdGNiLCBuZXh0X210dSk7CisJCX0KKwkJLyogRmluYWxseSwgc3RhcnQgdGhlIFBNVFUg
dGltZXIgaWYgaXQgd2FzIHJ1bm5pbmcgYmVmb3JlLiAqLworCQlpZiAodGltZXJfc3RvcHBlZCkg
eworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAs
IHN0Y2IsIG5ldCk7CisJCX0KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJyZWFrOworCX0KK30KKwordm9p
ZAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRl
ZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9FTENBUElUQU4pCitz
Y3RwNl9jdGxpbnB1dChpbnQgY21kLCBzdHJ1Y3Qgc29ja2FkZHIgKnBrdGRzdCwgdm9pZCAqZCwg
c3RydWN0IGlmbmV0ICppZnAgU0NUUF9VTlVTRUQpCisjZWxzZQorc2N0cDZfY3RsaW5wdXQoaW50
IGNtZCwgc3RydWN0IHNvY2thZGRyICpwa3Rkc3QsIHZvaWQgKmQpCisjZW5kaWYKK3sKKwlzdHJ1
Y3QgaXA2Y3RscGFyYW0gKmlwNmNwOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0
IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cGhk
ciBzaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OworCisjaWZkZWYgSEFWRV9TQV9M
RU4KKwlpZiAocGt0ZHN0LT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwKKwkgICAgcGt0ZHN0LT5z
YV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisjZWxzZQorCWlmIChwa3Rk
c3QtPnNhX2ZhbWlseSAhPSBBRl9JTkVUNikgeworI2VuZGlmCisJCXJldHVybjsKKwl9CisKKwlp
ZiAoKHVuc2lnbmVkKWNtZCA+PSBQUkNfTkNNRFMpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoUFJD
X0lTX1JFRElSRUNUKGNtZCkpIHsKKwkJZCA9IE5VTEw7CisJfSBlbHNlIGlmIChpbmV0NmN0bGVy
cm1hcFtjbWRdID09IDApIHsKKwkJcmV0dXJuOworCX0KKwkvKiBJZiB0aGUgcGFyYW1ldGVyIGlz
IGZyb20gaWNtcDYsIGRlY29kZSBpdC4gKi8KKwlpZiAoZCAhPSBOVUxMKSB7CisJCWlwNmNwID0g
KHN0cnVjdCBpcDZjdGxwYXJhbSAqKWQ7CisJfSBlbHNlIHsKKwkJaXA2Y3AgPSAoc3RydWN0IGlw
NmN0bHBhcmFtICopTlVMTDsKKwl9CisKKwlpZiAoaXA2Y3AgIT0gTlVMTCkgeworCQkvKgorCQkg
KiBYWFg6IFdlIGFzc3VtZSB0aGF0IHdoZW4gSVBWNiBpcyBub24gTlVMTCwgTSBhbmQgT0ZGIGFy
ZQorCQkgKiB2YWxpZC4KKwkJICovCisJCWlmIChpcDZjcC0+aXA2Y19tID09IE5VTEwpIHsKKwkJ
CXJldHVybjsKKwkJfQorCisJCS8qIENoZWNrIGlmIHdlIGNhbiBzYWZlbHkgZXhhbWluZSB0aGUg
cG9ydHMgYW5kIHRoZQorCQkgKiB2ZXJpZmljYXRpb24gdGFnIG9mIHRoZSBTQ1RQIGNvbW1vbiBo
ZWFkZXIuCisJCSAqLworCQlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIubGVuIDwKKwkJICAg
IChpbnQzMl90KShpcDZjcC0+aXA2Y19vZmYgKyBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hl
Y2tzdW0pKSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ29weSBvdXQgdGhlIHBvcnQgbnVt
YmVycyBhbmQgdGhlIHZlcmlmaWNhdGlvbiB0YWcuICovCisJCW1lbXNldCgmc2gsIDAsIHNpemVv
ZihzaCkpOworCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCisJCSAgICAgICAgICAgaXA2Y3At
PmlwNmNfb2ZmLAorCQkgICAgICAgICAgIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDE2
X3QpICsgc2l6ZW9mKHVpbnQzMl90KSwKKwkJICAgICAgICAgICAoY2FkZHJfdCkmc2gpOworCQlt
ZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJc3JjLnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlzcmMuc2luNl9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJc3JjLnNpbjZfcG9ydCA9
IHNoLnNyY19wb3J0OworCQlzcmMuc2luNl9hZGRyID0gaXA2Y3AtPmlwNmNfaXA2LT5pcDZfc3Jj
OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCWlmIChpbjZfc2V0c2NvcGUoJnNyYy5zaW42
X2FkZHIsIGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLnJjdmlmLCBOVUxMKSAhPSAwKSB7CisJCQly
ZXR1cm47CisJCX0KKyNlbmRpZgorCQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKKwkJZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9T
SU42X0xFTgorCQlkc3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Cisj
ZW5kaWYKKwkJZHN0LnNpbjZfcG9ydCA9IHNoLmRlc3RfcG9ydDsKKwkJZHN0LnNpbjZfYWRkciA9
IGlwNmNwLT5pcDZjX2lwNi0+aXA2X2RzdDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlp
ZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5y
Y3ZpZiwgTlVMTCkgIT0gMCkgeworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJaW5wID0gTlVM
TDsKKwkJbmV0ID0gTlVMTDsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eo
KHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmaW5wLCAmbmV0LCAxLCBTQ1RQX0RFRkFVTFRfVlJGSUQpOworCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYKKwkJICAgIChuZXQgIT0gTlVMTCkgJiYKKwkJICAgIChpbnAgIT0g
TlVMTCkpIHsKKwkJCS8qIENoZWNrIHRoZSB2ZXJpZmljYXRpb24gdGFnICovCisJCQlpZiAobnRv
aGwoc2gudl90YWcpICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgbXVzdCBiZSB0aGUgdmVy
aWZpY2F0aW9uIHRhZyB1c2VkIGZvcgorCQkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRv
bid0IGNvbnNpZGVyCisJCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmljYXRpb24g
dGFnLgorCQkJCSAqLworCQkJCWlmIChudG9obChzaC52X3RhZykgIT0gc3RjYi0+YXNvYy5wZWVy
X3Z0YWcpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlyZXR1cm47CisJCQkJ
fQorCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCWlmIChpcDZjcC0+
aXA2Y19tLT5tX3BrdGhkci5sZW4gPj0KKwkJCQkgICAgaXA2Y3AtPmlwNmNfb2ZmICsgc2l6ZW9m
KHN0cnVjdCBzY3RwaGRyKSArCisJCQkJICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcikgKworCQkJCSAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihz
dHJ1Y3Qgc2N0cF9pbml0LCBhX3J3bmQpKSB7CisJCQkJCS8qCisJCQkJCSAqIEluIHRoaXMgY2Fz
ZSB3ZSBjYW4gY2hlY2sgaWYgd2UKKwkJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRo
ZQorCQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KKwkJCQkJICovCisJCQkJCXVpbnQzMl90
IGluaXRpYXRlX3RhZzsKKwkJCQkJdWludDhfdCBjaHVua190eXBlOworCisJCQkJCW1fY29weWRh
dGEoaXA2Y3AtPmlwNmNfbSwKKwkJCQkJICAgICAgICAgICBpcDZjcC0+aXA2Y19vZmYgKworCQkJ
CQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkciksCisJCQkJCSAgICAgICAgICAgc2l6
ZW9mKHVpbnQ4X3QpLAorCQkJCQkgICAgICAgICAgIChjYWRkcl90KSZjaHVua190eXBlKTsKKwkJ
CQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAorCQkJCQkgICAgICAgICAgIGlwNmNwLT5pcDZj
X29mZiArCisJCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArCisJCQkJCSAg
ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwKKwkJCQkJICAgICAgICAgICBz
aXplb2YodWludDMyX3QpLAorCQkJCQkgICAgICAgICAgIChjYWRkcl90KSZpbml0aWF0ZV90YWcp
OworCQkJCQlpZiAoKGNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB8fAorCQkJCQkgICAg
KG50b2hsKGluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5teV92dGFnKSkgeworCQkJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJcmV0dXJuOworCQkJCQl9CisJCQkJfSBlbHNlIHsK
KwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlyZXR1cm47CisJCQkJfQorI2Vsc2UK
KwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworI2VuZGlmCisJCQl9CisJ
CQlzY3RwNl9ub3RpZnkoaW5wLCBzdGNiLCBuZXQsCisJCQkgICAgICAgICAgICAgaXA2Y3AtPmlw
NmNfaWNtcDYtPmljbXA2X3R5cGUsCisJCQkgICAgICAgICAgICAgaXA2Y3AtPmlwNmNfaWNtcDYt
PmljbXA2X2NvZGUsCisJCQkgICAgICAgICAgICAgbnRvaGwoaXA2Y3AtPmlwNmNfaWNtcDYtPmlj
bXA2X210dSkpOworCQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uIDwgNTAwMDAwCisJCQlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkgJiYgKGlu
cCAhPSBOVUxMKSkgeworCQkJCWluNl9ydGNoYW5nZSgoc3RydWN0IGluNnBjYiAqKWlucCwKKwkJ
CQkgICAgaW5ldDZjdGxlcnJtYXBbY21kXSk7CisJCQl9CisjZW5kaWYKKwkJCWlmICgoc3RjYiA9
PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQkJLyogcmVkdWNlIGlucCdzIHJlZi1jb3Vu
dCAqLworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5w
KTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoc3RjYikgeworCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZgorCisvKgor
ICogdGhpcyByb3V0aW5lIGNhbiBwcm9iYWJseSBiZSBjb2xsYXNwZWQgaW50byB0aGUgb25lIGlu
IHNjdHBfdXNlcnJlcS5jCisgKiBzaW5jZSB0aGV5IGRvIHRoZSBzYW1lIHRoaW5nIGFuZCBub3cg
d2UgbG9va3VwIHdpdGggYSBzb2NrYWRkcgorICovCisjaWZkZWYgX19GcmVlQlNEX18KK3N0YXRp
YyBpbnQKK3NjdHA2X2dldGNyZWQoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKwlzdHJ1Y3QgeHVj
cmVkIHh1YzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHJzWzJdOworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX3RjYiAqc3Rj
YjsKKwlpbnQgZXJyb3I7CisJdWludDMyX3QgdnJmX2lkOworCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJdnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklE
OworI2Vsc2UKKwl2cmZfaWQgPSBwYW5kYV9nZXRfdnJmX2Zyb21fY2FsbCgpOyAvKiBmcm9tIGNv
bm5lY3R4IGNhbGw/ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCisJZXJyb3IgPSBwcml2X2NoZWNrKHJlcS0+dGQsIFBS
SVZfTkVUSU5FVF9HRVRDUkVEKTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCWVycm9yID0gc3VzZXIocmVxLT50ZCk7CisjZWxzZQor
CWVycm9yID0gc3VzZXIocmVxLT5wKTsKKyNlbmRpZgorCWlmIChlcnJvcikKKwkJcmV0dXJuIChl
cnJvcik7CisKKwlpZiAocmVxLT5uZXdsZW4gIT0gc2l6ZW9mKGFkZHJzKSkgeworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJ
TlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYgKHJlcS0+b2xkbGVuICE9IHNpemVv
ZihzdHJ1Y3QgdWNyZWQpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOwor
CX0KKwllcnJvciA9IFNZU0NUTF9JTihyZXEsIGFkZHJzLCBzaXplb2YoYWRkcnMpKTsKKwlpZiAo
ZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9u
X2FkZHJfc2Eoc2luNnRvc2EoJmFkZHJzWzFdKSwKKwkgICAgc2luNnRvc2EoJmFkZHJzWzBdKSwK
KwkgICAgJmlucCwgJm5ldCwgMSwgdnJmX2lkKTsKKwlpZiAoc3RjYiA9PSBOVUxMIHx8IGlucCA9
PSBOVUxMIHx8IGlucC0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQlpZiAoKGlucCAhPSBOVUxM
KSAmJiAoc3RjYiA9PSBOVUxMKSkgeworCQkJLyogcmVkdWNlIHJlZi1jb3VudCAqLworCQkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQlnb3RvIGNy
ZWRfY2FuX2NvbnQ7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVOT0VOVCk7CisJCWVycm9yID0gRU5PRU5UOworCQln
b3RvIG91dDsKKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCS8qIFdlIHVzZSB0aGUgd3Jp
dGUgbG9jayBoZXJlLCBvbmx5CisJICogc2luY2UgaW4gdGhlIGVycm9yIGxlZyB3ZSBuZWVkIGl0
LgorCSAqIElmIHdlIHVzZWQgUkxPQ0ssIHRoZW4gd2Ugd291bGQgaGF2ZQorCSAqIHRvIHdsb2Nr
L2RlY3IvdW5sb2NrL3Jsb2NrLiBXaGljaAorCSAqIGluIHRoZW9yeSBjb3VsZCBjcmVhdGUgYSBo
b2xlLiBCZXR0ZXIKKwkgKiB0byB1c2UgaGlnaGVyIHdsb2NrLgorCSAqLworCVNDVFBfSU5QX1dM
T0NLKGlucCk7CisgY3JlZF9jYW5fY29udDoKKwllcnJvciA9IGNyX2NhbnNlZXNvY2tldChyZXEt
PnRkLT50ZF91Y3JlZCwgaW5wLT5zY3RwX3NvY2tldCk7CisJaWYgKGVycm9yKSB7CisJCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKKwkJZ290byBvdXQ7CisJfQorCWNydTJ4KGlucC0+c2N0cF9zb2Nr
ZXQtPnNvX2NyZWQsICZ4dWMpOworCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwllcnJvciA9IFNZ
U0NUTF9PVVQocmVxLCAmeHVjLCBzaXplb2Yoc3RydWN0IHh1Y3JlZCkpOworb3V0OgorCXJldHVy
biAoZXJyb3IpOworfQorCitTWVNDVExfUFJPQyhfbmV0X2luZXQ2X3NjdHA2LCBPSURfQVVUTywg
Z2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JXLAorICAgIDAsIDAsCisgICAgc2N0
cDZfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBvZiBhIFNDVFA2IGNvbm5lY3Rp
b24iKTsKKworI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIHNhbWUgYXMgdGhlIHNjdHBfYWJvcnQo
KSBjb3VsZCBiZSBtYWRlIGNvbW1vbiAqLworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0YXRp
YyB2b2lkCisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQoraW50CisjZWxzZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwNl9hYm9ydChzdHJ1Y3Qgc29j
a2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVpbnQzMl90IGZsYWdzOwor
CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5V
TEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVJTlZBTCk7CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlyZXR1cm47
CisjZWxzZQorCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9Cisgc2N0cF9tdXN0X3RyeV9h
Z2FpbjoKKwlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5H
CisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKKyNlbmRpZgorCWlmICgoKGZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJICAgIChhdG9taWNfY21w
c2V0X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkgeworI2lmZGVmIFNDVFBf
TE9HX0NMT1NJTkcKKwkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE2KTsKKyNlbmRpZgor
CQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9BQk9SVCwKKwkJCQlT
Q1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7CisJCVNPQ0tfTE9DSyhzbyk7CisJCVND
VFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7CisJCS8qIHNhbWUgZm9yIHRoZSByY3Ygb25lcywgdGhl
eSBhcmUgb25seQorCQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9zZWxlY3QuCisJCSAqLwor
CQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQlz
by0+c29fdXNlY291bnQtLTsKKyNlbHNlCisJCS8qIE5vdyBudWxsIG91dCB0aGUgcmVmZXJlbmNl
LCB3ZSBhcmUgY29tcGxldGVseSBkZXRhY2hlZC4gKi8KKwkJc28tPnNvX3BjYiA9IE5VTEw7Cisj
ZW5kaWYKKwkJU09DS19VTkxPQ0soc28pOworCX0gZWxzZSB7CisJCWZsYWdzID0gaW5wLT5zY3Rw
X2ZsYWdzOworCQlpZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDAp
IHsKKwkJCWdvdG8gc2N0cF9tdXN0X3RyeV9hZ2FpbjsKKwkJfQorCX0KKyNpZiAoZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pCisJcmV0dXJuOworI2Vsc2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9CisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3N0
YXRpYyBpbnQKK3NjdHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBf
VU5VU0VELCBzdHJ1Y3QgdGhyZWFkICpwIFNDVFBfVU5VU0VEKQorI2VsaWYgZGVmaW5lZChfX1Bh
bmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cDZfYXR0YWNoKHN0cnVj
dCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIHVpbnQzMl90IHZyZl9pZCkKKyNl
bGlmIGRlZmluZWQoX19XaW5kb3dzX18pCitzdGF0aWMgaW50CitzY3RwNl9hdHRhY2goc3RydWN0
IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgUEtUSFJFQUQgcCBTQ1RQX1VOVVNF
RCkKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwNl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGlu
dCBwcm90byBTQ1RQX1VOVVNFRCwgc3RydWN0IHByb2MgKnAgU0NUUF9VTlVTRUQpCisjZW5kaWYK
K3sKKwlzdHJ1Y3QgaW42cGNiICppbnA2OworCWludCBlcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwl1aW50MzJfdCB2cmZfaWQgPSBTQ1RQX0RFRkFVTFRfVlJGSUQ7CisjZW5kaWYKKworCWlu
cCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCAhPSBOVUxMKSB7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZf
VVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKHNvLT5zb19z
bmQuc2JfaGl3YXQgPT0gMCB8fCBzby0+c29fcmN2LnNiX2hpd2F0ID09IDApIHsKKwkJZXJyb3Ig
PSBTQ1RQX1NPUkVTRVJWRShzbywgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFjZSksIFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJu
IChlcnJvcik7CisJfQorCWVycm9yID0gc2N0cF9pbnBjYl9hbGxvYyhzbywgdnJmX2lkKTsKKwlp
ZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpbnAtPnNjdHBfZmxhZ3MgfD0g
U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSB2NiEgKi8KKwlpbnA2ID0gKHN0cnVjdCBp
bjZwY2IgKilpbnA7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBWNjsKKyNlbHNlCisJaW5wLT5pbnBfdmZsYWcgfD0g
SU5QX0lQVjY7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1BhbmRhX18pCisJaW5wNi0+aW42cF9o
b3BzID0gLTE7CS8qIHVzZSBrZXJuZWwgZGVmYXVsdCAqLworCWlucDYtPmluNnBfY2tzdW0gPSAt
MTsJLyoganVzdCB0byBiZSBzdXJlICovCisjZW5kaWYKKyNpZmRlZiBJTkVUCisJLyoKKwkgKiBY
WFg6IHVnbHkhISBJUHY0IFRUTCBpbml0aWFsaXphdGlvbiBpcyBuZWNlc3NhcnkgZm9yIGFuIElQ
djYKKwkgKiBzb2NrZXQgYXMgd2VsbCwgYmVjYXVzZSB0aGUgc29ja2V0IG1heSBiZSBib3VuZCB0
byBhbiBJUHY2CisJICogd2lsZGNhcmQgYWRkcmVzcywgd2hpY2ggbWF5IG1hdGNoIGFuIElQdjQt
bWFwcGVkIElQdjYgYWRkcmVzcy4KKwkgKi8KKwlpbnA2LT5pbnBfaXBfdHRsID0gTU9EVUxFX0dM
T0JBTChpcF9kZWZ0dGwpOworI2VuZGlmCisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCXJldHVy
biAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA1MDAwMDAKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqcCkKK3sKKyNlbGlmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGludAorc2N0cDZfYmlu
ZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgcHJvYyAq
cCkKK3sKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CitpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRk
ciwgdm9pZCAqIHApCit7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorc3RhdGljIGludAor
c2N0cDZfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBQS1RI
UkVBRCBwKQoreworI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQoreworCXN0cnVjdCBzb2NrYWRk
ciAqYWRkciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik6IE5VTEw7CisKKyNl
bmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IGluNnBjYiAqaW5wNjsKKwlp
bnQgZXJyb3I7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlm
IChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0K
KworI2lmICFkZWZpbmVkKF9fV2luZG93c19fKQorCWlmIChhZGRyKSB7CisJCXN3aXRjaCAoYWRk
ci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFW
RV9TQV9MRU4KKwkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjZW5k
aWYKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNp
ZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CQl9CisjZW5kaWYKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFM
KTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCX0KKyNlbmRpZgorCWlucDYgPSAoc3RydWN0
IGluNnBjYiAqKWlucDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CWlucDYtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjQ7CisJaW5wNi0+aW5wX3ZmbGFnIHw9IElOUF9J
UFY2OworI2Vsc2UKKwlpbnAtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjQ7CisJaW5wLT5pbnBfdmZs
YWcgfD0gSU5QX0lQVjY7CisjZW5kaWYKKwlpZiAoKGFkZHIgIT0gTlVMTCkgJiYgKFNDVFBfSVBW
Nl9WNk9OTFkoaW5wNikgPT0gMCkpIHsKKwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCS8qIGJpbmRpbmcgdjQgYWRkciB0byB2NiBz
b2NrZXQsIHNvIHJlc2V0IGZsYWdzICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJCWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJCWlucDYtPmlucF92
ZmxhZyAmPSB+SU5QX0lQVjY7CisjZWxzZQorCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7
CisJCQlpbnAtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjY7CisjZW5kaWYKKwkJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNl9wOworCisJCQlzaW42X3AgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFk
ZHI7CisKKwkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNl9wLT5zaW42X2FkZHIp
KSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpbnA2LT5p
bnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZWxzZQorCQkJCWlucC0+aW5wX3ZmbGFnIHw9IElOUF9J
UFY0OworI2VuZGlmCisJCQl9CisjaWZkZWYgSU5FVAorCQkJaWYgKElONl9JU19BRERSX1Y0TUFQ
UEVEKCZzaW42X3AtPnNpbjZfYWRkcikpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwor
CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNl9wKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJ
CQlpbnA2LT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OworI2Vsc2UKKwkJCQlpbnAtPmlucF92Zmxh
ZyB8PSBJTlBfSVBWNDsKKwkJCQlpbnAtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjY7CisjZW5kaWYK
KwkJCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4s
IE5VTEwsIHApOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJCQlicmVhazsK
KwkJfQorI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCX0gZWxzZSBpZiAoYWRk
ciAhPSBOVUxMKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZfcDsKKworCQkvKiBJUFY2
X1Y2T05MWSBzb2NrZXQgKi8KKyNpZmRlZiBJTkVUCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgeworCQkJLyogY2FuJ3QgYmluZCB2NCBhZGRyIHRvIHY2IG9ubHkgc29ja2V0ISAq
LworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
Nl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKyNlbmRpZgorCQlz
aW42X3AgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisKKwkJaWYgKElONl9JU19BRERS
X1Y0TUFQUEVEKCZzaW42X3AtPnNpbjZfYWRkcikpIHsKKwkJCS8qIGNhbid0IGJpbmQgdjQtbWFw
cGVkIGFkZHJzIGVpdGhlciEgKi8KKwkJCS8qIE5PVEU6IHdlIGRvbid0IHN1cHBvcnQgU0lJVCAq
LworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
Nl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJZXJyb3Ig
PSBzY3RwX2lucGNiX2JpbmQoc28sIGFkZHIsIE5VTEwsIHApOworCXJldHVybiAoZXJyb3IpOwor
fQorCisKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2
OTAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHZvaWQKKyNlbHNlCit2b2lkCisj
ZW5kaWYKK3NjdHA2X2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCXNjdHBfY2xvc2Uoc28p
OworfQorCisvKiBUaGlzIGNvdWxkIGJlIG1hZGUgY29tbW9uIHdpdGggc2N0cF9kZXRhY2goKSBz
aW5jZSB0aGV5IGFyZSBpZGVudGljYWwgKi8KKyNlbHNlCisKKyNpZiAhZGVmaW5lZChfX1BhbmRh
X18pCitzdGF0aWMKKyNlbmRpZgoraW50CitzY3RwNl9kZXRhY2goc3RydWN0IHNvY2tldCAqc28p
Cit7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNjdHBfY2xvc2Uoc28pOworCXJldHVy
biAoMCk7CisjZWxzZQorCXJldHVybiAoc2N0cF9kZXRhY2goc28pKTsKKyNlbmRpZgorfQorCisj
ZW5kaWYKKworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKK3N0YXRpYworI2VuZGlmCitpbnQKK3NjdHA2X2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAq
c28pCit7CisJcmV0dXJuIChzY3RwX2Rpc2Nvbm5lY3Qoc28pKTsKK30KKworCitpbnQKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3NjdHBf
c2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHRocmVh
ZCAqcCk7CisKKyNlbHNlCitzY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3Ms
IHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYg
KmNvbnRyb2wsIHN0cnVjdCBwcm9jICpwKTsKKworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1Bh
bmRhX18pICYmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAw
MAorc3RhdGljIGludAorc2N0cDZfc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBz
dHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgIHN0cnVjdCBtYnVmICpj
b250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKQoreworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwNl9zZW5kKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
CisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCBwcm9jICpwKQoreworI2Vsc2UKK3N0
YXRpYyBpbnQKK3NjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0
IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuYW0sCisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0
cnVjdCBwcm9jICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG5hbSA/IG10b2QobmFt
LCBzdHJ1Y3Qgc29ja2FkZHIgKik6IE5VTEw7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOworCXN0cnVjdCBpbjZwY2IgKmlucDY7CisKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKyNlbmRpZiAvKiBJTkVUICovCisJLyogTm8gU1BMIG5lZWRlZCBzaW5j
ZSBzY3RwX291dHB1dCBkb2VzIHRoaXMgKi8KKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCWlmIChjb250cm9sKSB7CisJCQlT
Q1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJY29udHJvbCA9IE5VTEw7CisJCX0KKwkJU0NU
UF9SRUxFQVNFX1BLVChtKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9
CisJaW5wNiA9IChzdHJ1Y3QgaW42cGNiICopaW5wOworCS8qCisJICogRm9yIHRoZSBUQ1AgbW9k
ZWwgd2UgbWF5IGdldCBhIE5VTEwgYWRkciwgaWYgd2UgYXJlIGEgY29ubmVjdGVkCisJICogc29j
a2V0IHRoYXRzIG9rLgorCSAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQ09OTkVDVEVEKSAmJgorCSAgICAoYWRkciA9PSBOVUxMKSkgeworCQlnb3RvIGNvbm5lY3Rl
ZF90eXBlOworCX0KKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCVNDVFBfUkVMRUFTRV9QS1QobSk7
CisJCWlmIChjb250cm9sKSB7CisJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJY29u
dHJvbCA9IE5VTEw7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVERVNUQUREUlJFUSk7CisJCXJldHVybiAoRURFU1RB
RERSUkVRKTsKKwl9CisjaWZkZWYgSU5FVAorCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq
KWFkZHI7CisJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJLyoKKwkJICogaWYgSVBW
Nl9WNk9OTFkgZmxhZywgd2UgZGlzY2FyZCBkYXRhZ3JhbXMgZGVzdGluZWQgdG8gYQorCQkgKiB2
NCBhZGRyIG9yIHY0LW1hcHBlZCBhZGRyCisJCSAqLworCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJ
CWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJ
TlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJaWYgKElONl9JU19BRERSX1Y0
TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisK
KwkJLyogY29udmVydCB2NC1tYXBwZWQgaW50byB2NCBhZGRyIGFuZCBzZW5kICovCisJCWluNl9z
aW42XzJfc2luKCZzaW4sIHNpbjYpOworCQlyZXR1cm4gKHNjdHBfc2VuZG0oc28sIGZsYWdzLCBt
LCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgY29udHJvbCwgcCkpOworCX0KKyNlbmRpZgkJCQkv
KiBJTkVUICovCitjb25uZWN0ZWRfdHlwZToKKwkvKiBub3cgd2hhdCBhYm91dCBjb250cm9sICov
CisJaWYgKGNvbnRyb2wpIHsKKwkJaWYgKGlucC0+Y29udHJvbCkgeworCQkJU0NUUF9QUklOVEYo
Imh1aD8gY29udHJvbCBzZXQ/XG4iKTsKKwkJCVNDVFBfUkVMRUFTRV9QS1QoaW5wLT5jb250cm9s
KTsKKwkJCWlucC0+Y29udHJvbCA9IE5VTEw7CisJCX0KKwkJaW5wLT5jb250cm9sID0gY29udHJv
bDsKKwl9CisJLyogUGxhY2UgdGhlIGRhdGEgKi8KKwlpZiAoaW5wLT5wa3QpIHsKKwkJU0NUUF9C
VUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07CisJCWlucC0+cGt0X2xhc3QgPSBtOworCX0gZWxz
ZSB7CisJCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07CisJfQorCWlmICgKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwkvKiBGcmVlQlNEIGFuZCBN
YWNPU1ggdXNlcyBhIGZsYWcgcGFzc2VkICovCisJICAgICgoZmxhZ3MgJiBQUlVTX01PUkVUT0NP
TUUpID09IDApCisjZWxzZQorCSAgICAxCQkJLyogT3BlbiBCU0QgZG9lcyBub3QgaGF2ZSBhbnkg
Im1vcmUgdG8gY29tZSIKKwkJCQkgKiBpbmRpY2F0aW9uICovCisjZW5kaWYKKwkgICAgKSB7CisJ
CS8qCisJCSAqIG5vdGUgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIHRoaXMgY29kZSB3aWxsIG9u
bHkgYmUgdXNlZAorCQkgKiBieSBPcGVuQlNELCBOZXRCU0QgYW5kIEZyZWVCU0QgaGF2ZSBtZXRo
b2RzIGZvcgorCQkgKiByZS1kZWZpbmluZyBzb3NlbmQoKSB0byB1c2Ugc2N0cF9zb3NlbmQoKS4g
IE9uZSBjYW4KKwkJICogb3B0aW9uYWx5IHN3aXRjaCBiYWNrIHRvIHRoaXMgY29kZSAoYnkgY2hh
bmdpbmcgYmFjayB0aGUKKwkJICogZGVmaW5pbml0aW9ucyBidXQgdGhpcyBpcyBub3QgYWR2aXNh
YmxlLgorCQkgKi8KKwkJaW50IHJldDsKKworCQlyZXQgPSBzY3RwX291dHB1dChpbnAsIGlucC0+
cGt0LCBhZGRyLCBpbnAtPmNvbnRyb2wsIHAsIGZsYWdzKTsKKwkJaW5wLT5wa3QgPSBOVUxMOwor
CQlpbnAtPmNvbnRyb2wgPSBOVUxMOworCQlyZXR1cm4gKHJldCk7CisJfSBlbHNlIHsKKwkJcmV0
dXJuICgwKTsKKwl9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorc3RhdGljIGludAorc2N0cDZfY29ubmVjdChzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdGhyZWFkICpwKQor
eworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCitzdGF0
aWMgaW50CitzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsIHN0cnVjdCBwcm9jICpwKQoreworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCitpbnQK
K3NjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwg
dm9pZCAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCitzdGF0aWMgaW50CitzY3Rw
Nl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIFBLVEhS
RUFEIHApCit7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHA2X2Nvbm5l
Y3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwl2b2lkICpw
ID0gTlVMTDsKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKwlzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOworI2VuZGlmCisJdWludDMy
X3QgdnJmX2lkOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBpbjZwY2IgKmlucDY7
CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9y
ZTsKKyNlbmRpZgorCisjaWZkZWYgSU5FVAorCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKXNvLT5z
b19wY2I7CisjZW5kaWYKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwor
CWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUNPTk5SRVNFVCk7CisJCXJldHVybiAoRUNPTk5S
RVNFVCk7CS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlCisJCQkJCSAqIG5v
dCBzZXR1cD8gKi8KKwl9CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJ
cmV0dXJuIChFSU5WQUwpOworCX0KKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzd2l0Y2gg
KGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYg
SEFWRV9TQV9MRU4KKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKyNlbmRp
ZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZmRl
ZiBIQVZFX1NBX0xFTgorCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKyNl
bmRpZgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisJfQorI2VuZGlmCisKKwl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJ
U0NUUF9BU09DX0NSRUFURV9MT0NLKGlucCk7CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpID09CisJICAgIFNDVFBf
UENCX0ZMQUdTX1VOQk9VTkQpIHsKKwkJLyogQmluZCBhIGVwaGVtZXJhbCBwb3J0ICovCisJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJZXJyb3IgPSBzY3RwNl9iaW5kKHNvLCBOVUxMLCBwKTsK
KwkJaWYgKGVycm9yKSB7CisJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCisJCQly
ZXR1cm4gKGVycm9yKTsKKwkJfQorCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCX0KKwlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCisJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7CisJCS8qIFdlIGFyZSBhbHJl
YWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUREUklOVVNFKTsK
KwkJcmV0dXJuIChFQUREUklOVVNFKTsKKwl9CisjaWZkZWYgSU5FVAorCXNpbjYgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWFkZHI7CisJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJ
LyoKKwkJICogaWYgSVBWNl9WNk9OTFkgZmxhZywgaWdub3JlIGNvbm5lY3Rpb25zIGRlc3RpbmVk
IHRvIGEgdjQKKwkJICogYWRkciBvciB2NC1tYXBwZWQgYWRkcgorCQkgKi8KKwkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlT
Q1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4g
KEVJTlZBTCk7CisJCX0KKwkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2Fk
ZHIpKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VO
TE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9
CisJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCS8qIGNv
bnZlcnQgdjQtbWFwcGVkIGludG8gdjQgYWRkciAqLworCQlpbjZfc2luNl8yX3Npbigmc3RvcmUu
c2luLCBzaW42KTsKKwkJYWRkciA9ICZzdG9yZS5zYTsKKwl9CisjZW5kaWYJCQkJLyogSU5FVCAq
LworCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9h
c29jX2xpc3QpOworCQlpZiAoc3RjYikgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJfQor
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwor
CQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9l
cF9hZGRyKCZpbnAsIGFkZHIsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlpZiAoc3RjYiA9PSBOVUxM
KSB7CisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
KwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJfQorCX0KKworCWlmIChzdGNiICE9IE5VTEwp
IHsKKwkJLyogQWxyZWFkeSBoYXZlIG9yIGFtIGJyaW5nIHVwIGFuIGFzc29jaWF0aW9uICovCisJ
CVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9V
U1JSRVEsIEVBTFJFQURZKTsKKwkJcmV0dXJuIChFQUxSRUFEWSk7CisJfQorCS8qIFdlIGFyZSBH
T09EIHRvIGdvICovCisJc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhpbnAsIGFkZHIsICZlcnJvciwg
MCwgdnJmX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnByZV9vcGVu
X3N0cmVhbV9jb3VudCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wb3J0
LCBwKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJLyogR2FrISBubyBtZW1vcnkgKi8KKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlmIChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJ
LyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLworCQlzb2lz
Y29ubmVjdGluZyhzbyk7CisJfQorCXN0Y2ItPmFzb2Muc3RhdGUgPSBTQ1RQX1NUQVRFX0NPT0tJ
RV9XQUlUOworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVfZW50
ZXJlZCk7CisKKwkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZm9yIHRo
ZSBhc3NvYyAqLworCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhpbnAsIHN0Y2IpOworCisJ
c2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NLRUQpOworCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3RhdGljIGludAorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKQorc2N0cDZfZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICoqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VsaWYgZGVmaW5lZChf
X1BhbmRhX18pCitzY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopYWRkcjsKKyNlbHNlCitzY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3QgbWJ1ZiAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSBtdG9kKG5h
bSwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICpp
bnA7CisJdWludDMyX3QgdnJmX2lkOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisKKyNp
ZmRlZiBTQ1RQX0tBTUUKKwlpbnQgZXJyb3I7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisKKwkv
KgorCSAqIERvIHRoZSBtYWxsb2MgZmlyc3QgaW4gY2FzZSBpdCBibG9ja3MuCisJICovCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pCisJU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kiwgc2l6ZW9mKCpzaW42KSk7CisJaWYgKHNpbjYgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0p
OworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCisJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2lu
NikpOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luNik7CisJbWVtc2V0
KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworI2VuZGlmCisJc2luNi0+c2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yo
KnNpbjYpOworI2VuZGlmCisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNi
OworCWlmIChpbnAgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1F
KHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VU
KTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlzaW42LT5zaW42X3BvcnQgPSBpbnAtPnNj
dHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxM
KSB7CisJCS8qIEZvciB0aGUgYm91bmQgYWxsIGNhc2UgeW91IGdldCBiYWNrIDAgKi8KKwkJaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgeworCQkJc3RydWN0
IHNjdHBfdGNiICpzdGNiOworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luX2E2OworCQkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCQkJaW50IGZuZDsKKwkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZp
bnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCQkJU0NUUF9GUkVFX1NPTkFNRShzaW42
KTsKKyNlbmRpZgorCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOworCQkJCXJldHVybiAoRU5PRU5UKTsKKwkJCX0K
KwkJCWZuZCA9IDA7CisJCQlzaW5fYTYgPSBOVUxMOworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZz
dGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlpZiAoc2luX2E2ID09IE5VTEwpCisJCQkJ
CS8qIHRoaXMgd2lsbCBtYWtlIGNvdmVyaXR5IGhhcHB5ICovCisJCQkJCWNvbnRpbnVlOworCisJ
CQkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQkJZm5kID0gMTsK
KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCghZm5kKSB8fCAoc2luX2E2ID09IE5V
TEwpKSB7CisJCQkJLyogcHVudCAqLworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKKwkJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVO
T0VOVCk7CisJCQkJcmV0dXJuIChFTk9FTlQpOworCQkJfQorCQkJdnJmX2lkID0gaW5wLT5kZWZf
dnJmX2lkOworCQkJc2N0cF9pZmEgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAs
IHN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywgbmV0LCAwLCB2cmZfaWQpOworCQkJaWYg
KHNjdHBfaWZhKSB7CisJCQkJc2luNi0+c2luNl9hZGRyID0gc2N0cF9pZmEtPmFkZHJlc3Muc2lu
Ni5zaW42X2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGb3IgdGhlIGJvdW5kIGFsbCBj
YXNlIHlvdSBnZXQgYmFjayAwICovCisJCQltZW1zZXQoJnNpbjYtPnNpbjZfYWRkciwgMCwgc2l6
ZW9mKHNpbjYtPnNpbjZfYWRkcikpOworCQl9CisJfSBlbHNlIHsKKwkJLyogVGFrZSB0aGUgZmly
c3QgSVB2NiBhZGRyZXNzIGluIHRoZSBsaXN0ICovCisJCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRk
cjsKKwkJaW50IGZuZCA9IDA7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2Fk
ZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luX2E7
CisKKwkJCQlzaW5fYSA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJc2luNi0+c2lu
Nl9hZGRyID0gc2luX2EtPnNpbjZfYWRkcjsKKwkJCQlmbmQgPSAxOworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisJCWlmICghZm5kKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCQlTQ1RQX0ZSRUVfU09OQU1F
KHNpbjYpOworI2VuZGlmCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRU5PRU5U
KTsKKwkJCXJldHVybiAoRU5PRU5UKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJLyogU2NvcGluZyB0aGluZ3MgZm9yIHY2ICovCisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9T
Q09QRQorI2lmZGVmIFNDVFBfS0FNRQorCWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNjb3BlKHNp
bjYpKSAhPSAwKSB7CisJCVNDVFBfRlJFRV9TT05BTUUoc2luNik7CisJCXJldHVybiAoZXJyb3Ip
OworCX0KKyNlbHNlCisJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikpCisJCS8qIHNraXAgaWZwIGNoZWNrIGJlbG93ICovCisJCWluNl9yZWNvdmVyc2NvcGUoc2lu
NiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CisJZWxzZQorCQlzaW42LT5zaW42X3Njb3BlX2lk
ID0gMDsJLyogWFhYICovCisjZW5kaWYgLyogU0NUUF9LQU1FICovCisjZW5kaWYgLyogU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCSgqYWRkcikgPSAoc3RydWN0IHNv
Y2thZGRyICopc2luNjsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKK3NjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKiphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisjZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKK3NjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopYWRkcjsKKyNlbHNlCitzY3RwNl9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0g
bXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CisjZW5kaWYKKwlpbnQgZm5kOworCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbl9hNjsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0
cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisjaWZkZWYgU0NU
UF9LQU1FCisJaW50IGVycm9yOworI2VuZGlmCisKKwkvKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGlu
IGNhc2UgaXQgYmxvY2tzLiAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCVNDVFBfTUFMTE9DX1NPTkFNRShz
aW42LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHNpemVvZiAqc2luNik7CisJaWYgKHNpbjYgPT0g
TlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCisJbWVt
c2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9
IHNpemVvZigqc2luNik7CisJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworI2VuZGlm
CisJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJ
c2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisKKwlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmICgoaW5wID09IE5VTEwpIHx8CisJICAgICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSA9PSAwKSkgeworCQkv
KiBVRFAgdHlwZSBhbmQgbGlzdGVuZXJzIHdpbGwgZHJvcCBvdXQgaGVyZSAqLworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9UQ09OTik7
CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAoc3RjYikgeworCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOworCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2Vu
ZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJZm5k
ID0gMDsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJ
aWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCWZuZCA9IDE7CisJCQlz
aW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCXNpbjYtPnNpbjZfYWRkciA9IHNpbl9h
Ni0+c2luNl9hZGRyOworCQkJYnJlYWs7CisJCX0KKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCWlmICghZm5kKSB7CisJCS8qIE5vIElQdjQgYWRkcmVzcyAqLworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQor
CQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOworCQlyZXR1
cm4gKEVOT0VOVCk7CisJfQorI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKyNpZmRlZiBT
Q1RQX0tBTUUKKwlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZShzaW42KSkgIT0gMCkgewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBl
cnJvcik7CisJCXJldHVybiAoZXJyb3IpOworCX0KKyNlbHNlCisJaW42X3JlY292ZXJzY29wZShz
aW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KKyNl
bmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJKmFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKK3N0YXRpYyBpbnQKK3NjdHA2X2luNmdldGFkZHIoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSkKK3sKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQor
aW50CitzY3RwNl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
Km5hbSwgdWludDMyX3QgKm5hbWVsZW4pCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbmFt
OworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwNl9pbjZnZXRhZGRyKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworI2lmZGVmIElORVQKKwlzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOworI2VuZGlm
CisjZWxzZQorc3RhdGljIGludAorc2N0cDZfaW42Z2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IG1idWYgKm5hbSkKK3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyICphZGRy
ID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNlbmRpZgorI2VuZGlmCisJc3RydWN0
IGluNnBjYiAqaW5wNiA9IHNvdG9pbjZwY2Ioc28pOworCWludCBlcnJvcjsKKworCWlmIChpbnA2
ID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJ
LyogYWxsb3cgdjYgYWRkcmVzc2VzIHByZWNlZGVuY2UgKi8KKwllcnJvciA9IHNjdHA2X2dldGFk
ZHIoc28sIG5hbSk7CisjaWZkZWYgSU5FVAorCWlmIChlcnJvcikgeworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQor
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vsc2UKKwkJc3RydWN0IHNvY2thZGRyX2lu
NiBzaW42OworI2VuZGlmCisKKwkJLyogdHJ5IHY0IG5leHQgaWYgdjYgZmFpbGVkICovCisJCWVy
cm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJu
IChlcnJvcik7CisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYs
IHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKKwkJaWYgKHNpbjYgPT0gTlVM
TCkgeworCQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJ
fQorCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikqbmFtLCBzaW42
KTsKKwkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKKwkJKm5hbSA9IChzdHJ1Y3Qgc29ja2FkZHIg
KilzaW42OworI2Vsc2UKKwkJaW42X3Npbl8yX3Y0bWFwc2luNigoc3RydWN0IHNvY2thZGRyX2lu
ICopYWRkciwgJnNpbjYpOworCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKKwkJbWVtY3B5KGFkZHIsICZzaW42LCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOworI2VuZGlmCisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJKm5h
bWVsZW4gPSBuYW0tPnNhX2xlbjsKKyNlbmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKK3N0YXRpYyBpbnQKK3NjdHA2X2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pCit7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykK
K2ludAorc2N0cDZfZ2V0cGVlcmFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqbmFtLCB1aW50MzJfdCAqbmFtZWxlbikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopbmFtOworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50
CitzY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkK
K3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVj
dCBzb2NrYWRkciAqKTsKKyNlbmRpZgorI2Vsc2UKK3N0YXRpYworaW50CitzY3RwNl9nZXRwZWVy
YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsK
KyNlbmRpZgorCisjZW5kaWYKKwlzdHJ1Y3QgaW42cGNiICppbnA2ID0gc290b2luNnBjYihzbyk7
CisJaW50IGVycm9yOworCisJaWYgKGlucDYgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJ
CXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwkvKiBhbGxvdyB2NiBhZGRyZXNzZXMgcHJlY2VkZW5j
ZSAqLworCWVycm9yID0gc2N0cDZfcGVlcmFkZHIoc28sIG5hbSk7CisjaWZkZWYgSU5FVAorCWlm
IChlcnJvcikgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owor
I2Vsc2UKKwkJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKwkJLyogdHJ5IHY0
IG5leHQgaWYgdjYgZmFpbGVkICovCisJCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsK
KwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQor
CQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCBzaXplb2Yg
KnNpbjYpOworCQlpZiAoc2luNiA9PSBOVUxMKSB7CisJCQlTQ1RQX0ZSRUVfU09OQU1FKCpuYW0p
OworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCWluNl9zaW5fMl92NG1hcHNpbjYoKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOworCQlTQ1RQX0ZSRUVfU09OQU1FKCpuYW0pOwor
CQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7CisjZWxzZQorCQlpbjZfc2luXzJfdjRt
YXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyLCAmc2luNik7CisJCVNDVFBfQlVGX0xF
TihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQltZW1jcHkoYWRkciwgJnNp
bjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwl9CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fUGFuZGFfXykKKwkqbmFtZWxlbiA9IG5hbS0+c2FfbGVuOworI2VuZGlmCisJ
cmV0dXJuIChlcnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0cnVjdCBwcl91c3JyZXFzIHNj
dHA2X3VzcnJlcXMgPSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkucHJ1X2Fib3J0ID0g
c2N0cDZfYWJvcnQsCisJLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKKwkucHJ1X2F0dGFjaCA9
IHNjdHA2X2F0dGFjaCwKKwkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAorCS5wcnVfY29ubmVjdCA9
IHNjdHA2X2Nvbm5lY3QsCisJLnBydV9jb250cm9sID0gaW42X2NvbnRyb2wsCisjaWYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gNjkwMDAwCisJLnBydV9jbG9zZSA9IHNjdHA2X2Nsb3NlLAorCS5wcnVf
ZGV0YWNoID0gc2N0cDZfY2xvc2UsCisJLnBydV9zb3BvbGwgPSBzb3BvbGxfZ2VuZXJpYywKKwku
cHJ1X2ZsdXNoID0gc2N0cF9mbHVzaCwKKyNlbHNlCisJLnBydV9kZXRhY2ggPSBzY3RwNl9kZXRh
Y2gsCisJLnBydV9zb3BvbGwgPSBzb3BvbGwsCisjZW5kaWYKKwkucHJ1X2Rpc2Nvbm5lY3QgPSBz
Y3RwNl9kaXNjb25uZWN0LAorCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCisJLnBydV9wZWVy
YWRkciA9IHNjdHA2X2dldHBlZXJhZGRyLAorCS5wcnVfc2VuZCA9IHNjdHA2X3NlbmQsCisJLnBy
dV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCisJLnBydV9zb2NrYWRkciA9IHNjdHA2X2luNmdl
dGFkZHIsCisJLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKKwkucHJ1X3NvcmVjZWl2ZSA9IHNj
dHBfc29yZWNlaXZlCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkucHJ1X2Fib3J0ID0gc2N0
cDZfYWJvcnQsCisJLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKKwkucHJ1X2F0dGFjaCA9IHNj
dHA2X2F0dGFjaCwKKwkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAorCS5wcnVfY29ubmVjdCA9IHNj
dHA2X2Nvbm5lY3QsCisJLnBydV9jb25uZWN0MiA9IHBydV9jb25uZWN0Ml9ub3RzdXBwLAorCS5w
cnVfY29udHJvbCA9IGluNl9jb250cm9sLAorCS5wcnVfZGV0YWNoID0gc2N0cDZfZGV0YWNoLAor
CS5wcnVfZGlzY29ubmVjdCA9IHNjdHA2X2Rpc2Nvbm5lY3QsCisJLnBydV9saXN0ZW4gPSBzY3Rw
X2xpc3RlbiwKKwkucHJ1X3BlZXJhZGRyID0gc2N0cDZfZ2V0cGVlcmFkZHIsCisJLnBydV9yY3Zk
ID0gTlVMTCwKKwkucHJ1X3Jjdm9vYiA9IHBydV9yY3Zvb2Jfbm90c3VwcCwKKwkucHJ1X3NlbmQg
PSBzY3RwNl9zZW5kLAorCS5wcnVfc2Vuc2UgPSBwcnVfc2Vuc2VfbnVsbCwKKwkucHJ1X3NodXRk
b3duID0gc2N0cF9zaHV0ZG93biwKKwkucHJ1X3NvY2thZGRyID0gc2N0cDZfaW42Z2V0YWRkciwK
KwkucHJ1X3Nvc2VuZCA9IHNjdHBfc29zZW5kLAorCS5wcnVfc29yZWNlaXZlID0gc2N0cF9zb3Jl
Y2VpdmUsCisJLnBydV9zb3BvbGwgPSBzb3BvbGwKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18p
CisJc2N0cDZfYWJvcnQsCisJc2N0cF9hY2NlcHQsCisJc2N0cDZfYXR0YWNoLAorCXNjdHA2X2Jp
bmQsCisJc2N0cDZfY29ubmVjdCwKKwlwcnVfY29ubmVjdDJfbm90c3VwcCwKKwlOVUxMLAorCU5V
TEwsCisJc2N0cDZfZGlzY29ubmVjdCwKKwlzY3RwX2xpc3RlbiwKKwlzY3RwNl9nZXRwZWVyYWRk
ciwKKwlOVUxMLAorCXBydV9yY3Zvb2Jfbm90c3VwcCwKKwlOVUxMLAorCXBydV9zZW5zZV9udWxs
LAorCXNjdHBfc2h1dGRvd24sCisJc2N0cF9mbHVzaCwKKwlzY3RwNl9pbjZnZXRhZGRyLAorCXNj
dHBfc29zZW5kLAorCXNjdHBfc29yZWNlaXZlLAorCXNvcG9sbF9nZW5lcmljLAorCU5VTEwsCisJ
c2N0cDZfY2xvc2UKKyNlbmRpZgorfTsKKworI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwNl91c3JyZXEoc28sIHJlcSwgbSwgbmFt
LCBjb250cm9sLCBwKQorCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCByZXE7CisJc3RydWN0IG1i
dWYgKm0sICpuYW0sICpjb250cm9sOworCXN0cnVjdCBwcm9jICpwOworeworCWludCBzOworCWlu
dCBlcnJvciA9IDA7CisJaW50IGZhbWlseTsKKwl1aW50MzJfdCB2cmZfaWQ7CisJZmFtaWx5ID0g
c28tPnNvX3Byb3RvLT5wcl9kb21haW4tPmRvbV9mYW1pbHk7CisKKwlpZiAocmVxID09IFBSVV9D
T05UUk9MKSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoKKwkJCWVycm9y
ID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJICAgIChzdHJ1Y3Qg
aWZuZXQgKiljb250cm9sCisJCQkgICAgKTsKKyNpZmRlZiBJTkVUNgorCQljYXNlIFBGX0lORVQ2
OgorCQkJZXJyb3IgPSBpbjZfY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJ
ICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sLCBwKTsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNS
UkVRLCBFQUZOT1NVUFBPUlQpOworCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCX0KKwkJcmV0
dXJuIChlcnJvcik7CisJfQorCXN3aXRjaCAocmVxKSB7CisJY2FzZSBQUlVfQVRUQUNIOgorCQll
cnJvciA9IHNjdHA2X2F0dGFjaChzbywgZmFtaWx5LCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVf
REVUQUNIOgorCQllcnJvciA9IHNjdHA2X2RldGFjaChzbyk7CisJCWJyZWFrOworCWNhc2UgUFJV
X0JJTkQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJu
IChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cDZfYmluZChzbywgbmFtLCBwKTsKKwkJYnJl
YWs7CisJY2FzZSBQUlVfTElTVEVOOgorCQllcnJvciA9IHNjdHBfbGlzdGVuKHNvLCBwKTsKKwkJ
YnJlYWs7CisJY2FzZSBQUlVfQ09OTkVDVDoKKwkJaWYgKG5hbSA9PSBOVUxMKSB7CisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEs
IEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwkJZXJyb3IgPSBzY3RwNl9jb25u
ZWN0KHNvLCBuYW0sIHApOworCQlicmVhazsKKwljYXNlIFBSVV9ESVNDT05ORUNUOgorCQllcnJv
ciA9IHNjdHA2X2Rpc2Nvbm5lY3Qoc28pOworCQlicmVhazsKKwljYXNlIFBSVV9BQ0NFUFQ6CisJ
CWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwp
OworCQl9CisJCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7CisJCWJyZWFrOworCWNhc2Ug
UFJVX1NIVVRET1dOOgorCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOworCQlicmVhazsKKwor
CWNhc2UgUFJVX1JDVkQ6CisJCS8qCisJCSAqIEZvciBPcGVuQlNEIGFuZCBOZXRCU0QsIHRoaXMg
aXMgcmVhbCB1Z2x5LiBUaGUgKG1idWYgKikKKwkJICogbmFtIHRoYXQgaXMgcGFzc2VkIChieSBz
b3JlY2VpdmUoKSkgaXMgdGhlIGludCBmbGFncyBjYXN0CisJCSAqIGFzIGEgKG1idWYgKikgeXVj
ayEKKwkJICovCisJCWVycm9yID0gc2N0cF91c3JfcmVjdmQoc28sIChpbnQpKChsb25nKW5hbSkp
OworCQlicmVhazsKKworCWNhc2UgUFJVX1NFTkQ6CisJCS8qIEZsYWdzIGFyZSBpZ25vcmVkICov
CisJCWVycm9yID0gc2N0cDZfc2VuZChzbywgMCwgbSwgbmFtLCBjb250cm9sLCBwKTsKKwkJYnJl
YWs7CisJY2FzZSBQUlVfQUJPUlQ6CisJCWVycm9yID0gc2N0cDZfYWJvcnQoc28pOworCQlicmVh
azsKKworCWNhc2UgUFJVX1NFTlNFOgorCQllcnJvciA9IDA7CisJCWJyZWFrOworCWNhc2UgUFJV
X1JDVk9PQjoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsK
KwkJYnJlYWs7CisJY2FzZSBQUlVfU0VORE9PQjoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQll
cnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBQUlVfUEVFUkFERFI6CisJCWVy
cm9yID0gc2N0cDZfZ2V0cGVlcmFkZHIoc28sIG5hbSk7CisJCWJyZWFrOworCWNhc2UgUFJVX1NP
Q0tBRERSOgorCQllcnJvciA9IHNjdHA2X2luNmdldGFkZHIoc28sIG5hbSk7CisJCWJyZWFrOwor
CWNhc2UgUFJVX1NMT1dUSU1POgorCQllcnJvciA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJ
CWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zhci5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4
YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zYzQyODVkMjljYjc4YmUxM2ZiMGE2YmU2ODY3Y2NmNjc5
ODA2OWU4IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zh
ci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdmFyLmgKQEAgLTAs
MCArMSw5MyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldDYvc2N0cDZfdmFyLmggMzE3NDU3IDIwMTctMDQtMjYgMTk6
MjY6NDBaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVDZfU0NUUDZfVkFS
X0hfCisjZGVmaW5lIF9ORVRJTkVUNl9TQ1RQNl9WQVJfSF8KKworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKyNpZmRlZiBJTkVUCitleHRlcm4gdm9pZCBpbjZfc2luNl8yX3NpbihzdHJ1Y3Qg
c29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKK2V4dGVybiB2b2lkIGluNl9z
aW42XzJfc2luX2luX3NvY2soc3RydWN0IHNvY2thZGRyICopOworZXh0ZXJuIHZvaWQgaW42X3Np
bl8yX3Y0bWFwc2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luNiAq
KTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfS0VSTkVMKQorCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK1NZU0NU
TF9ERUNMKF9uZXRfaW5ldDZfc2N0cDYpOworZXh0ZXJuIHN0cnVjdCBwcl91c3JyZXFzIHNjdHA2
X3VzcnJlcXM7CisjZWxzZQoraW50IHNjdHA2X3VzcnJlcShzdHJ1Y3Qgc29ja2V0ICosIGludCwg
c3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKik7CisjZW5kaWYKKwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQoraW50IHNjdHA2X2lucHV0KHN0cnVjdCBtYnVmICoqLCBp
bnQgKik7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9wb3J0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwg
dWludDE2X3QpOworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCitpbnQgc2N0cDZfaW5wdXQgKHBh
a2hhbmRsZV90eXBlICopOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPCA5MDIwMDAKK2ludCBzY3RwNl9pbnB1dCBfX1AoKHN0cnVjdCBtYnVmICoqLCBp
bnQgKiwgaW50KSk7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9wb3J0IF9fUCgoc3RydWN0IG1idWYg
KiosIGludCAqLCB1aW50MTZfdCkpOworI2Vsc2UKK2ludCBzY3RwNl9pbnB1dChzdHJ1Y3QgbWJ1
ZiAqKiwgaW50ICosIGludCk7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9wb3J0KHN0cnVjdCBtYnVm
ICoqLCBpbnQgKiwgdWludDE2X3QpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK2ludCBzY3RwNl9vdXRwdXQKK19fUCgoc3Ry
dWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAg
IHN0cnVjdCBtYnVmICosIHN0cnVjdCBwcm9jICopKTsKK3ZvaWQgc2N0cDZfY3RsaW5wdXQgX19Q
KChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICopKTsKKyNlbHNlCitpbnQgc2N0cDZfb3V0
cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2NrYWRkciAq
LAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgcHJvYyAqKTsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQo
QVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQ
UExFX01PVU5UQUlOTElPTikgJiYgIWRlZmluZWQoQVBQTEVfRUxDQVBJVEFOKQordm9pZCBzY3Rw
Nl9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICosIHN0cnVjdCBpZm5ldCAq
IFNDVFBfVU5VU0VEKTsKKyNlbHNlCit2b2lkIHNjdHA2X2N0bGlucHV0KGludCwgc3RydWN0IHNv
Y2thZGRyICosIHZvaWQgKik7CisjZW5kaWYKKyNlbmRpZgorI2lmICEoZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pKQorZXh0ZXJuIHZvaWQgaW42X3Npbl8yX3Y0bWFw
c2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKK2V4dGVy
biB2b2lkIGluNl9zaW42XzJfc2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopOworZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9zaW5faW5fc29jayhzdHJ1Y3Qgc29j
a2FkZHIgKik7CisjZW5kaWYKK3ZvaWQgc2N0cDZfbm90aWZ5KHN0cnVjdCBzY3RwX2lucGNiICos
IHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosCisgICAgICAgICAgICAgICAg
ICB1aW50OF90LCB1aW50OF90LCB1aW50MzJfdCk7CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi91c2VyX2F0b21pYy5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4
YzUzOTEuLjg5NzM5YzRlOTA4MmM3NmM5NjU1YTk0NDJkN2I4YmRmMTBjYjAwMDYgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfYXRvbWljLmgKQEAgLTAsMCArMSwzMTYgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1
bWFpcmEgS2FtYWwKKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgor
ICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1VTRVJfQVRPTUlDX0hfCisjZGVmaW5lIF9VU0VS
X0FUT01JQ19IXworCisvKiBfX1VzZXJzcGFjZV9fIHZlcnNpb24gb2Ygc3lzL2kzODYvaW5jbHVk
ZS9hdG9taWMuaCBnb2VzIGhlcmUgKi8KKworLyogVE9ETyBJbiB0aGUgZnV0dXJlLCBtaWdodCB3
YW50IHRvIG5vdCB1c2UgaTM4NiBzcGVjaWZpYyBhc3NlbWJseS4KKyAqICAgIFRoZSBvcHRpb25z
IGluY2x1ZGU6CisgKiAgICAgICAtIGltcGxlbWVudCB0aGVtIGdlbmVyaWNhbGx5IChidXQgbWF5
YmUgbm90IHRydWx5IGF0b21pYz8pIGluIHVzZXJzcGFjZQorICogICAgICAgLSBoYXZlIGlmZGVm
J3MgZm9yIF9fVXNlcnNwYWNlX2FyY2hfIHBlcmhhcHMgKE9TIGlzbid0IGVub3VnaC4uLikKKyAq
LworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIGF0
b21pY19hZGRfaW50KGFkZHIsIHZhbCkgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFk
ZHIsIChMT05HKXZhbCkKKyNkZWZpbmUgYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCB2YWwpIElu
dGVybG9ja2VkRXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLCAoTE9ORyl2YWwpCisjZGVmaW5lIGF0
b21pY19zdWJ0cmFjdF9pbnQoYWRkciwgdmFsKSAgIEludGVybG9ja2VkRXhjaGFuZ2VBZGQoKExQ
TE9ORylhZGRyLC0oKExPTkcpdmFsKSkKKyNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBl
eHAsIHNyYykgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKExQTE9ORylkc3QsIHNyYywgZXhw
KQorI2RlZmluZSBTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoYWRkcikgKEludGVy
bG9ja2VkRXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLCAoLTFMKSkgPT0gMSkKKyNlbHNlCisjaW5j
bHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2RlZmluZSBhdG9taWNfYWRkX2ludChhZGRyLCB2
YWwpIE9TQXRvbWljQWRkMzJCYXJyaWVyKHZhbCwgKGludDMyX3QgKilhZGRyKQorI2RlZmluZSBh
dG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIHZhbCkgT1NBdG9taWNBZGQzMkJhcnJpZXIodmFsLCAo
aW50MzJfdCAqKWFkZHIpCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoYWRkciwgdmFsKSBP
U0F0b21pY0FkZDMyQmFycmllcigtdmFsLCAoaW50MzJfdCAqKWFkZHIpCisjZGVmaW5lIGF0b21p
Y19jbXBzZXRfaW50KGRzdCwgZXhwLCBzcmMpIE9TQXRvbWljQ29tcGFyZUFuZFN3YXBJbnRCYXJy
aWVyKGV4cCwgc3JjLCAoaW50ICopZHN0KQorI2RlZmluZSBTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hF
Q0tfUkVGQ09VTlQoYWRkcikgKGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLTEpID09IDApCisj
ZW5kaWYKKworI2lmIGRlZmluZWQoSU5WQVJJQU5UUykKKyNkZWZpbmUgU0NUUF9TQVZFX0FUT01J
Q19ERUNSRU1FTlQoYWRkciwgdmFsKSBcCit7IFwKKwlpbnQzMl90IG5ld3ZhbDsgXAorCW5ld3Zh
bCA9IGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLXZhbCk7IFwKKwlpZiAobmV3dmFsIDwgMCkg
eyBcCisJCXBhbmljKCJDb3VudGVyIGdvZXMgbmVnYXRpdmUiKTsgXAorCX0gXAorfQorI2Vsc2UK
KyNkZWZpbmUgU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoYWRkciwgdmFsKSBcCit7IFwKKwlp
bnQzMl90IG5ld3ZhbDsgXAorCW5ld3ZhbCA9IGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLXZh
bCk7IFwKKwlpZiAobmV3dmFsIDwgMCkgeyBcCisJCSphZGRyID0gMDsgXAorCX0gXAorfQorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorc3RhdGljIHZvaWQgYXRv
bWljX2luaXQodm9pZCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19t
dHggKi8KKyNlbHNlCisvLyBXZWJLaXQgY2hhbmdlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIGF0b21p
Y19pbml0CisvLyBzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQodm9pZCkge30gLyogZW1w
dHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyNlbmRpZgorCisjZWxzZQor
LyogVXNpbmcgZ2NjIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgYXRvbWljIG1lbW9yeSBvcGVyYXRp
b25zCisgICBSZWZlcmVuY2U6IGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjEu
MC9nY2MvQXRvbWljLUJ1aWx0aW5zLmh0bWwKKyAgIFJlcXVpcmVzIGdjYyB2ZXJzaW9uIDQuMS4w
CisgICBjb21waWxlIHdpdGggLW1hcmNoPWk0ODYKKyAqLworCisvKkF0b21pY2FsbHkgYWRkIFYg
dG8gKlAuKi8KKyNkZWZpbmUgYXRvbWljX2FkZF9pbnQoUCwgVikJICh2b2lkKSBfX3N5bmNfZmV0
Y2hfYW5kX2FkZChQLCBWKQorCisvKkF0b21pY2FsbHkgc3VidHJhY2UgViBmcm9tICpQLiovCisj
ZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoUCwgVikgKHZvaWQpIF9fc3luY19mZXRjaF9hbmRf
c3ViKFAsIFYpCisKKy8qCisgKiBBdG9taWNhbGx5IGFkZCB0aGUgdmFsdWUgb2YgdiB0byB0aGUg
aW50ZWdlciBwb2ludGVkIHRvIGJ5IHAgYW5kIHJldHVybgorICogdGhlIHByZXZpb3VzIHZhbHVl
IG9mICpwLgorICovCisjZGVmaW5lIGF0b21pY19mZXRjaGFkZF9pbnQocCwgdikgX19zeW5jX2Zl
dGNoX2FuZF9hZGQocCwgdikKKworLyogRm9sbG93aW5nIGV4cGxhbmF0aW9uIGZyb20gc3JjL3N5
cy9pMzg2L2luY2x1ZGUvYXRvbWljLmgsCisgKiBmb3IgYXRvbWljIGNvbXBhcmUgYW5kIHNldAor
ICoKKyAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAoYWxsIDMyIGJpdCB3b3JkcykKKyAq
CisgKiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3VjY2VzcworICovCisKKyNk
ZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgX19zeW5jX2Jvb2xfY29tcGFy
ZV9hbmRfc3dhcChkc3QsIGV4cCwgc3JjKQorCisjZGVmaW5lIFNDVFBfREVDUkVNRU5UX0FORF9D
SEVDS19SRUZDT1VOVChhZGRyKSAoYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtMSkgPT0gMSkK
KyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjZGVmaW5lIFNDVFBfU0FWRV9BVE9NSUNfREVDUkVN
RU5UKGFkZHIsIHZhbCkgXAoreyBcCisJaW50MzJfdCBvbGR2YWw7IFwKKwlvbGR2YWwgPSBhdG9t
aWNfZmV0Y2hhZGRfaW50KGFkZHIsIC12YWwpOyBcCisJaWYgKG9sZHZhbCA8IHZhbCkgeyBcCisJ
CXBhbmljKCJDb3VudGVyIGdvZXMgbmVnYXRpdmUiKTsgXAorCX0gXAorfQorI2Vsc2UKKyNkZWZp
bmUgU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoYWRkciwgdmFsKSBcCit7IFwKKwlpbnQzMl90
IG9sZHZhbDsgXAorCW9sZHZhbCA9IGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLXZhbCk7IFwK
KwlpZiAob2xkdmFsIDwgdmFsKSB7IFwKKwkJKmFkZHIgPSAwOyBcCisJfSBcCit9CisjZW5kaWYK
K3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAvKiBlbXB0eSB3aGVuIHdl
IGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLworI2VuZGlmCisKKyNpZiAwIC8qIHVzaW5nIGxp
YmF0b21pY19vcHMgKi8KKyNpbmNsdWRlICJ1c2VyX2luY2x1ZGUvYXRvbWljX29wcy5oIgorCisv
KkF0b21pY2FsbHkgYWRkIGluY3IgdG8gKlAsIGFuZCByZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVl
IG9mICpQLiovCisjZGVmaW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSBBT19mZXRjaF9hbmRfYWRk
KChBT190KilQLCBWKQorCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoUCwgVikgQU9fZmV0
Y2hfYW5kX2FkZCgoQU9fdCopUCwgLShWKSkKKworLyoKKyAqIEF0b21pY2FsbHkgYWRkIHRoZSB2
YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0dXJuCisgKiB0
aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KKyNkZWZpbmUgYXRvbWljX2ZldGNoYWRkX2lu
dChwLCB2KSBBT19mZXRjaF9hbmRfYWRkKChBT190KilwLCB2KQorCisvKiBBdG9taWNhbGx5IGNv
bXBhcmUgKmFkZHIgdG8gb2xkX3ZhbCwgYW5kIHJlcGxhY2UgKmFkZHIgYnkgbmV3X3ZhbAorICAg
aWYgdGhlIGZpcnN0IGNvbXBhcmlzb24gc3VjY2VlZHMuICBSZXR1cm5zIG5vbnplcm8gaWYgdGhl
IGNvbXBhcmlzb24KKyAgIHN1Y2NlZWRlZCBhbmQgKmFkZHIgd2FzIHVwZGF0ZWQuCisqLworLyog
Rm9sbG93aW5nIEV4cGxhbmF0aW9uIGZyb20gc3JjL3N5cy9pMzg2L2luY2x1ZGUvYXRvbWljLmgs
IHdoaWNoCisgICBtYXRjaGVzIHRoYXQgb2YgQU9fY29tcGFyZV9hbmRfc3dhcCBhYm92ZS4KKyAq
IEF0b21pYyBjb21wYXJlIGFuZCBzZXQsIHVzZWQgYnkgdGhlIG11dGV4IGZ1bmN0aW9ucworICoK
KyAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAoYWxsIDMyIGJpdCB3b3JkcykKKyAqCisg
KiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3VjY2VzcworICovCisKKyNkZWZp
bmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgQU9fY29tcGFyZV9hbmRfc3dhcCgo
QU9fdCopZHN0LCBleHAsIHNyYykKKworc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkg
e30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyNlbmRpZiAv
KiBjbG9zaW5nICNpZiBmb3IgbGliYXRvbWljICovCisKKyNpZiAwIC8qIHVzaW5nIGF0b21pY19t
dHggKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworZXh0ZXJuIHVzZXJsYW5kX211dGV4X3Qg
YXRvbWljX210eDsKKworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCitzdGF0
aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlv
bigmYXRvbWljX210eCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7
CisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZhdG9taWNfbXR4KTsKK30KK3N0YXRpYyBpbmxpbmUg
dm9pZCBhdG9taWNfbG9jaygpIHsKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7
Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3VubG9jaygpIHsKKwlMZWF2ZUNyaXRpY2Fs
U2VjdGlvbigmYXRvbWljX210eCk7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGF0b21p
Y19pbml0KCkgeworCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0cjsKKworCXB0aHJlYWRf
bXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOworI2lmZGVmIElOVkFSSUFOVFMKKwlwdGhyZWFk
X211dGV4YXR0cl9zZXR0eXBlKCZtdXRleF9hdHRyLCBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sp
OworI2VuZGlmCisJcHRocmVhZF9tdXRleF9pbml0KCZhY2NlcHRfbXR4LCAmbXV0ZXhfYXR0cik7
CisJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhfYXR0cik7Cit9CitzdGF0aWMgaW5s
aW5lIHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7CisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95
KCZhdG9taWNfbXR4KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfbG9jaygpIHsKKyNp
ZmRlZiBJTlZBUklBTlRTCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJmF0b21pY19tdHgp
ID09IDAsICgiYXRvbWljX2xvY2s6IGF0b21pY19tdHggYWxyZWFkeSBsb2NrZWQiKSkKKyNlbHNl
CisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZhdG9taWNfbXR4KTsKKyNlbmRpZgorfQorc3Rh
dGljIGlubGluZSB2b2lkIGF0b21pY191bmxvY2soKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCUtB
U1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJmF0b21pY19tdHgpID09IDAsICgiYXRvbWljX3Vu
bG9jazogYXRvbWljX210eCBub3QgbG9ja2VkIikpCisjZWxzZQorCSh2b2lkKXB0aHJlYWRfbXV0
ZXhfdW5sb2NrKCZhdG9taWNfbXR4KTsKKyNlbmRpZgorfQorI2VuZGlmCisvKgorICogRm9yIHVz
ZXJsYW5kLCBhbHdheXMgdXNlIGxvY2sgcHJlZml4ZXMgc28gdGhhdCB0aGUgYmluYXJpZXMgd2ls
bCBydW4KKyAqIG9uIGJvdGggU01QIGFuZCAhU01QIHN5c3RlbXMuCisgKi8KKworI2RlZmluZQlN
UExPQ0tFRAkibG9jayA7ICIKKworLyoKKyAqIEF0b21pY2FsbHkgYWRkIHRoZSB2YWx1ZSBvZiB2
IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0dXJuCisgKiB0aGUgcHJldmlv
dXMgdmFsdWUgb2YgKnAuCisgKi8KK3N0YXRpYyBfX2lubGluZSB1X2ludAorYXRvbWljX2ZldGNo
YWRkX2ludCh2b2xhdGlsZSB2b2lkICpuLCB1X2ludCB2KQoreworCWludCAqcCA9IChpbnQgKikg
bjsKKwlhdG9taWNfbG9jaygpOworCV9fYXNtIF9fdm9sYXRpbGUoCisJIgkiIE1QTE9DS0VEICIJ
CSIKKwkiCXhhZGRsCSUwLCAlMSA7CSIKKwkiIyBhdG9taWNfZmV0Y2hhZGRfaW50IgorCTogIity
IiAodiksCQkJLyogMCAocmVzdWx0KSAqLworCSAgIj1tIiAoKnApCQkJLyogMSAqLworCTogIm0i
ICgqcCkpOwkJCS8qIDIgKi8KKwlhdG9taWNfdW5sb2NrKCk7CisKKwlyZXR1cm4gKHYpOworfQor
CisKKyNpZmRlZiBDUFVfRElTQUJMRV9DTVBYQ0hHCisKK3N0YXRpYyBfX2lubGluZSBpbnQKK2F0
b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cCwgdV9pbnQgc3Jj
KQoreworCXVfY2hhciByZXM7CisKKwlhdG9taWNfbG9jaygpOworCV9fYXNtIF9fdm9sYXRpbGUo
CisJIglwdXNoZmwgOwkJIgorCSIJY2xpIDsJCQkiCisJIgljbXBsCSUzLCU0IDsJCSIKKwkiCWpu
ZQkxZiA7CQkiCisJIgltb3ZsCSUyLCUxIDsJCSIKKwkiMToJCQkJIgorCSIgICAgICAgc2V0ZQkl
MCA7CQkiCisJIglwb3BmbCA7CQkJIgorCSIjIGF0b21pY19jbXBzZXRfaW50IgorCTogIj1xIiAo
cmVzKSwJCQkvKiAwICovCisJICAiPW0iICgqZHN0KQkJCS8qIDEgKi8KKwk6ICJyIiAoc3JjKSwJ
CQkvKiAyICovCisJICAiciIgKGV4cCksCQkJLyogMyAqLworCSAgIm0iICgqZHN0KQkJCS8qIDQg
Ki8KKwk6ICJtZW1vcnkiKTsKKwlhdG9taWNfdW5sb2NrKCk7CisKKwlyZXR1cm4gKHJlcyk7Cit9
CisKKyNlbHNlIC8qICFDUFVfRElTQUJMRV9DTVBYQ0hHICovCisKK3N0YXRpYyBfX2lubGluZSBp
bnQKK2F0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50IGV4cCwgdV9p
bnQgc3JjKQoreworCWF0b21pY19sb2NrKCk7CisJdV9jaGFyIHJlczsKKworCV9fYXNtIF9fdm9s
YXRpbGUoCisJIgkiIE1QTE9DS0VEICIJCSIKKwkiCWNtcHhjaGdsICUyLCUxIDsJIgorCSIJc2V0
ZQklMCA7CQkiCisJIjE6CQkJCSIKKwkiIyBhdG9taWNfY21wc2V0X2ludCIKKwk6ICI9YSIgKHJl
cyksCQkJLyogMCAqLworCSAgIj1tIiAoKmRzdCkJCQkvKiAxICovCisJOiAiciIgKHNyYyksCQkJ
LyogMiAqLworCSAgImEiIChleHApLAkJCS8qIDMgKi8KKwkgICJtIiAoKmRzdCkJCQkvKiA0ICov
CisJOiAibWVtb3J5Iik7CisJYXRvbWljX3VubG9jaygpOworCisJcmV0dXJuIChyZXMpOworfQor
CisjZW5kaWYgLyogQ1BVX0RJU0FCTEVfQ01QWENIRyAqLworCisjZGVmaW5lIGF0b21pY19hZGRf
aW50KFAsIFYpCSBkbyB7ICAgXAorCQlhdG9taWNfbG9jaygpOyAgICAgICAgICBcCisJCSgqKHVf
aW50ICopKFApICs9IChWKSk7IFwKKwkJYXRvbWljX3VubG9jaygpOyAgICAgICAgXAorfSB3aGls
ZSgwKQorI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpICBkbyB7ICAgXAorCQlhdG9t
aWNfbG9jaygpOyAgICAgICAgICAgIFwKKwkJKCoodV9pbnQgKikoUCkgLT0gKFYpKTsgICBcCisJ
CWF0b21pY191bmxvY2soKTsgICAgICAgICAgXAorfSB3aGlsZSgwKQorCisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYwppbmRleCBlNjlkZTI5YmIyZDFk
NjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43NjdjNGJhNGQ0M2ZmYmE3NWEyMzA3NDEwNTll
NGU5M2EwODY4ZTYzIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJv
bm1lbnQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYwpAQCAt
MCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9m
ZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0
IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
MiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogX19V
c2Vyc3BhY2VfXyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgIWRlZmluZWQgKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX29zX3VzZXJzcGFjZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNlcl9lbnZpcm9ubWVu
dC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLyogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiBk
ZWZpbmVzIE1JTiAqLworI2lmICFkZWZpbmVkKE1JTikKKyNkZWZpbmUgTUlOKGFyZzEsYXJnMikg
KChhcmcxKSA8IChhcmcyKSA/IChhcmcxKSA6IChhcmcyKSkKKyNlbmRpZgorI2luY2x1ZGUgPHN0
cmluZy5oPgorCisjZGVmaW5lIHVIWiAxMDAwCisKKy8qIFNlZSB1c2VyX2luY2x1ZGUvdXNlcl9l
bnZpcm9ubWVudC5oIGZvciBjb21tZW50cyBhYm91dCB0aGVzZSB2YXJpYWJsZXMgKi8KK2ludCBt
YXhzb2NrZXRzID0gMjU2MDA7CitpbnQgaHogPSB1SFo7CitpbnQgaXBfZGVmdHRsID0gNjQ7Citp
bnQgaXBwb3J0X2ZpcnN0YXV0byA9IDQ5MTUyLCBpcHBvcnRfbGFzdGF1dG8gPSA2NTUzNTsKK2lu
dCBubWJjbHVzdGVycyA9IDY1NTM2OworCisvKiBTb3VyY2UgaXBfb3V0cHV0LmMuIGV4dGVybidk
IGluIGlwX3Zhci5oICovCit1X3Nob3J0IGlwX2lkID0gMDsgLypfX1VzZXJzcGFjZV9fIFRPRE8g
U2hvdWxkIGl0IGJlIGluaXRpYWxpemVkIHRvIHplcm8/ICovCisKKy8qIHVzZWQgaW4gdXNlcl9p
bmNsdWRlL3VzZXJfYXRvbWljLmggaW4gb3JkZXIgdG8gbWFrZSB0aGUgb3BlcmF0aW9ucworICog
ZGVmaW5lZCB0aGVyZSB0cnVseSBhdG9taWMKKyAqLwordXNlcmxhbmRfbXV0ZXhfdCBhdG9taWNf
bXR4OworCisvKiBJZiB0aGUgZW50cm9weSBkZXZpY2UgaXMgbm90IGxvYWRlZCwgbWFrZSBhIHRv
a2VuIGVmZm9ydCB0bworICogcHJvdmlkZSBfc29tZV8ga2luZCBvZiByYW5kb21uZXNzLiBUaGlz
IHNob3VsZCBvbmx5IGJlIHVzZWQKKyAqIGluc2lkZSBvdGhlciBSTkcncywgbGlrZSBhcmM0cmFu
ZG9tKDkpLgorICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKK3N0YXRpYyBpbnQKK3JlYWRfcmFuZG9tX3Bob255
KHZvaWQgKmJ1ZiwgaW50IGNvdW50KQoreworCWlmIChjb3VudCA+PSAwKSB7CisJCWFyYzRyYW5k
b21fYnVmKGJ1ZiwgY291bnQpOworCX0KKwlyZXR1cm4gKGNvdW50KTsKK30KKyNlbHNlCitzdGF0
aWMgaW50CityZWFkX3JhbmRvbV9waG9ueSh2b2lkICpidWYsIGludCBjb3VudCkKK3sKKwl1aW50
MzJfdCByYW5kdmFsOworCWludCBzaXplLCBpOworCisJLyogc3JhbmRvbSgpIGlzIGNhbGxlZCBp
biBrZXJuL2luaXRfbWFpbi5jOnByb2MwX3Bvc3QoKSAqLworCisJLyogRmlsbCBidWZbXSB3aXRo
IHJhbmRvbSg5KSBvdXRwdXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrPSAoaW50KXNp
emVvZih1aW50MzJfdCkpIHsKKwkJcmFuZHZhbCA9IHJhbmRvbSgpOworCQlzaXplID0gTUlOKGNv
dW50IC0gaSwgKGludClzaXplb2YodWludDMyX3QpKTsKKwkJbWVtY3B5KCYoKGNoYXIgKilidWYp
W2ldLCAmcmFuZHZhbCwgKHNpemVfdClzaXplKTsKKwl9CisKKwlyZXR1cm4gKGNvdW50KTsKK30K
KyNlbmRpZgorCitzdGF0aWMgaW50ICgqcmVhZF9mdW5jKSh2b2lkICosIGludCkgPSByZWFkX3Jh
bmRvbV9waG9ueTsKKworLyogVXNlcmxhbmQtdmlzaWJsZSB2ZXJzaW9uIG9mIHJlYWRfcmFuZG9t
ICovCitpbnQKK3JlYWRfcmFuZG9tKHZvaWQgKmJ1ZiwgaW50IGNvdW50KQoreworCXJldHVybiAo
KCpyZWFkX2Z1bmMpKGJ1ZiwgY291bnQpKTsKK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52
aXJvbm1lbnQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
Li5jMTFhZDJjNDFmZmQ1YjEwMzI0YjAwZjE5NjA0ZDJmMWQ5ZjQwM2Y0IDEwMDc1NQotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaApAQCAtMCwwICsxLDExNyBAQAorLyotCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIw
MTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdl
bGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgor
ICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVVNFUl9FTlZJUk9OTUVOVF9IXworI2Rl
ZmluZSBfVVNFUl9FTlZJUk9OTUVOVF9IXworLyogX19Vc2Vyc3BhY2VfXyAqLworI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgorCisjaWZkZWYgX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRAorI2lmbmRlZiBf
U1lTX01VVEVYX0hfCisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjZW5kaWYKKyNlbmRpZgorI2lm
IGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSAibmV0aW5ldC9zY3Rw
X29zX3VzZXJzcGFjZS5oIgorI2VuZGlmCisKKy8qIG1heHNvY2tldHMgaXMgdXNlZCBpbiBTQ1RQ
X1pPTkVfSU5JVCBjYWxsLiBJdCByZWZlcnMgdG8KKyAqIGtlcm4uaXBjLm1heHNvY2tldHMga2Vy
bmVsIGVudmlyb25tZW50IHZhcmlhYmxlLgorICovCitleHRlcm4gaW50IG1heHNvY2tldHM7CisK
Ky8qIGludCBoejsgaXMgZGVjbGFyZWQgaW4gc3lzL2tlcm4vc3Vicl9wYXJhbS5jIGFuZCByZWZl
cnMgdG8ga2VybmVsIHRpbWVyIGZyZXF1ZW5jeS4KKyAqIFNlZSBodHRwOi8vaXZvcmFzLnNoYXJh
bmV0Lm9yZy9mcmVlYnNkL3Ztd2FyZS5odG1sIGZvciBhZGRpdGlvbmFsIGluZm8gYWJvdXQga2Vy
bi5oegorICogaHogaXMgaW5pdGlhbGl6ZWQgaW4gdm9pZCBpbml0X3BhcmFtMSh2b2lkKSBpbiB0
aGF0IGZpbGUuCisgKi8KK2V4dGVybiBpbnQgaHo7CisKKworLyogVGhlIGZvbGxvd2luZyB0d28g
aW50cyBkZWZpbmUgYSByYW5nZSBvZiBhdmFpbGFibGUgZXBoZW1lcmFsIHBvcnRzLiAqLworZXh0
ZXJuIGludCBpcHBvcnRfZmlyc3RhdXRvLCBpcHBvcnRfbGFzdGF1dG87CisKKy8qIG5tYmNsdXN0
ZXJzIGlzIHVzZWQgaW4gc2N0cF91c3JyZXEuYyAoZS5nLiwgc2N0cF9pbml0KS4gSW4gdGhlIEZy
ZWVCU0Qga2VybmVsLAorICogIHRoaXMgaXMgMTAyNCArIG1heHVzZXJzICogNjQuCisgKi8KK2V4
dGVybiBpbnQgbm1iY2x1c3RlcnM7CisKKyNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKyNkZWZpbmUgbWluKGEsYikgKChhKT4oYik/KGIpOihhKSkKKyNkZWZpbmUgbWF4KGEs
YikgKChhKT4oYik/KGEpOihiKSkKKyNlbmRpZgorCitleHRlcm4gaW50IHJlYWRfcmFuZG9tKHZv
aWQgKmJ1ZiwgaW50IGNvdW50KTsKKworLyogZXJybm8ncyBtYXkgZGlmZmVyIHBlciBPUy4gIGVy
cm5vLmggbm93IGluY2x1ZGVkIGluIHNjdHBfb3NfdXNlcnNwYWNlLmggKi8KKy8qIFNvdXJjZTog
L3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oICovCisvKiAjZGVmaW5lCUVOT1NQQwkJMjggKi8JCS8q
IE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisvKiAjZGVmaW5lCUVOT0JVRlMJCTU1ICovCQkv
KiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisvKiAjZGVmaW5lCUVOT01FTQkJMTIgKi8J
CS8qIENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgKi8KKy8qICNkZWZpbmUJRUFDQ0VTCQkxMyAqLwkJ
LyogUGVybWlzc2lvbiBkZW5pZWQgKi8KKy8qICNkZWZpbmUJRUZBVUxUCQkxNCAqLwkJLyogQmFk
IGFkZHJlc3MgKi8KKy8qICNkZWZpbmUJRUhPU1RET1dOCTY0ICovCQkvKiBIb3N0IGlzIGRvd24g
Ki8KKy8qICNkZWZpbmUJRUhPU1RVTlJFQUNICTY1ICovCQkvKiBObyByb3V0ZSB0byBob3N0ICov
CisKKy8qIFNvdXJjZSBpcF9vdXRwdXQuYy4gZXh0ZXJuJ2QgaW4gaXBfdmFyLmggKi8KK2V4dGVy
biB1X3Nob3J0IGlwX2lkOworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNk
ZWZpbmUgSVBWNl9WRVJTSU9OICAgICAgICAgICAgMHg2MAorI2VuZGlmCisKKyNpZiBkZWZpbmVk
KElOVkFSSUFOVFMpCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBpbmxpbmUgdm9pZAor
dGVybWluYXRlX25vbl9ncmFjZWZ1bCh2b2lkKSB7CisJYWJvcnQoKTsKK30KKworI2RlZmluZSBw
YW5pYyguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJU0NUUF9QUklOVEYoIiVzKCk6
ICIsIF9fRlVOQ1RJT05fXyk7XAorCQlTQ1RQX1BSSU5URihfX1ZBX0FSR1NfXyk7ICAgICAgICAg
ICBcCisJCVNDVFBfUFJJTlRGKCJcbiIpOyAgICAgICAgICAgICAgICAgIFwKKwkJdGVybWluYXRl
X25vbl9ncmFjZWZ1bCgpOyAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBLQVNT
RVJUKGNvbmQsIGFyZ3MpICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKwkJaWYgKCEoY29uZCkpIHsgICAgICAgXAorCQkJcGFuaWMgYXJncyA7IFwKKwkJfSAgICAg
ICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBLQVNTRVJUKGNv
bmQsIGFyZ3MpCisjZW5kaWYKKworLyogbmVjZXNzYXJ5IGZvciBzY3RwX3BjYi5jICovCitleHRl
cm4gaW50IGlwX2RlZnR0bDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi91c2VyX2lucGNiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaW5wY2IuaAppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi44MWI1ZDIxMmQ3MDlmNGRk
MjQ0ODliOGRmMjExNGFjNTU2OTk4ZGUzIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L3VzZXJfaW5wY2IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaW5wY2IuaApAQCAt
MCwwICsxLDM3OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTAsIDE5
OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglA
KCMpaW5fcGNiLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICogJEZyZWVCU0Q6IHNyYy9zeXMv
bmV0aW5ldC9pbl9wY2IuaCx2IDEuMTAwLjIuMSAyMDA3LzEyLzA3IDA1OjQ2OjA4IGttYWN5IEV4
cCAkCisgKi8KKworI2lmbmRlZiBfVVNFUl9JTlBDQl9IXworI2RlZmluZSBfVVNFUl9JTlBDQl9I
XworCisjaW5jbHVkZSA8dXNlcl9yb3V0ZS5oPiAvKiB3YXMgPG5ldC9yb3V0ZS5oPiAqLworCisj
ZGVmaW5lCWluNnBjYgkJaW5wY2IJLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8K
KyNkZWZpbmUJaW42cF9zcAkJaW5wX3NwCS8qIGZvciBLQU1FIHNyYyBzeW5jIG92ZXIgQlNEKidz
ICovCitzdHJ1Y3QgaW5wY2Jwb2xpY3k7CisKKy8qCisgKiBTdHJ1Y3QgaW5wY2IgaXMgdGhlIG9t
bW9uIHN0cnVjdHVyZSBwY2IgZm9yIHRoZSBJbnRlcm5ldCBQcm90b2NvbAorICogaW1wbGVtZW50
YXRpb24uCisgKgorICogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIGZvcmVpZ24gaG9zdCB0YWJsZSBl
bnRyaWVzLCBsb2NhbCBhbmQgZm9yZWlnbiBzb2NrZXQKKyAqIG51bWJlcnMsIGFuZCBwb2ludGVy
cyB1cCAodG8gYSBzb2NrZXQgc3RydWN0dXJlKSBhbmQgZG93biAodG8gYQorICogcHJvdG9jb2wt
c3BlY2lmaWMgY29udHJvbCBibG9jaykgYXJlIHN0b3JlZCBoZXJlLgorICovCitMSVNUX0hFQUQo
aW5wY2JoZWFkLCBpbnBjYik7CitMSVNUX0hFQUQoaW5wY2Jwb3J0aGVhZCwgaW5wY2Jwb3J0KTsK
KworLyoKKyAqIFBDQiB3aXRoIEFGX0lORVQ2IG51bGwgYmluZCdlZCBsYWRkciBjYW4gcmVjZWl2
ZSBBRl9JTkVUIGlucHV0IHBhY2tldC4KKyAqIFNvLCBBRl9JTkVUNiBudWxsIGxhZGRyIGlzIGFs
c28gdXNlZCBhcyBBRl9JTkVUIG51bGwgbGFkZHIsIGJ5IHV0aWxpemluZworICogdGhlIGZvbGxv
d2luZyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBpbl9hZGRyXzRpbjYgeworCXVfaW50MzJfdAlp
YTQ2X3BhZDMyWzNdOworCXN0cnVjdAlpbl9hZGRyCWlhNDZfYWRkcjQ7Cit9OworCisvKgorICog
Tk9URTogaXB2NiBhZGRycyBzaG91bGQgYmUgNjQtYml0IGFsaWduZWQsIHBlciBSRkMgMjU1My4g
IGluX2Nvbm5pbmZvIGhhcworICogc29tZSBleHRyYSBwYWRkaW5nIHRvIGFjY29tcGxpc2ggdGhp
cy4KKyAqLworc3RydWN0IGluX2VuZHBvaW50cyB7CisJdV9pbnQxNl90CWllX2Zwb3J0OwkJLyog
Zm9yZWlnbiBwb3J0ICovCisJdV9pbnQxNl90CWllX2xwb3J0OwkJLyogbG9jYWwgcG9ydCAqLwor
CS8qIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LCBsb2NhbCBhbmQgZm9yZWlnbiBhZGRyICovCisJ
dW5pb24geworCQkvKiBmb3JlaWduIGhvc3QgdGFibGUgZW50cnkgKi8KKwkJc3RydWN0CWluX2Fk
ZHJfNGluNiBpZTQ2X2ZvcmVpZ247CisJCXN0cnVjdAlpbjZfYWRkciBpZTZfZm9yZWlnbjsKKwl9
IGllX2RlcGVuZGZhZGRyOworCXVuaW9uIHsKKwkJLyogbG9jYWwgaG9zdCB0YWJsZSBlbnRyeSAq
LworCQlzdHJ1Y3QJaW5fYWRkcl80aW42IGllNDZfbG9jYWw7CisJCXN0cnVjdAlpbjZfYWRkciBp
ZTZfbG9jYWw7CisJfSBpZV9kZXBlbmRsYWRkcjsKKyNkZWZpbmUJaWVfZmFkZHIJaWVfZGVwZW5k
ZmFkZHIuaWU0Nl9mb3JlaWduLmlhNDZfYWRkcjQKKyNkZWZpbmUJaWVfbGFkZHIJaWVfZGVwZW5k
bGFkZHIuaWU0Nl9sb2NhbC5pYTQ2X2FkZHI0CisjZGVmaW5lCWllNl9mYWRkcglpZV9kZXBlbmRm
YWRkci5pZTZfZm9yZWlnbgorI2RlZmluZQlpZTZfbGFkZHIJaWVfZGVwZW5kbGFkZHIuaWU2X2xv
Y2FsCit9OworCisvKgorICogWFhYIFRoZSBkZWZpbmVzIGZvciBpbmNfKiBhcmUgaGFja3MgYW5k
IHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRpcmVjdAorICogcmVmZXJlbmNlcy4KKyAqLworc3RydWN0
IGluX2Nvbm5pbmZvIHsKKwl1X2ludDhfdAlpbmNfZmxhZ3M7CisJdV9pbnQ4X3QJaW5jX2xlbjsK
Kwl1X2ludDE2X3QJaW5jX3BhZDsJLyogWFhYIGFsaWdubWVudCBmb3IgaW5fZW5kcG9pbnRzICov
CisJLyogcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQgKi8KKwlzdHJ1Y3QJaW5fZW5kcG9pbnRzIGlu
Y19pZTsKK307CisjZGVmaW5lIGluY19pc2lwdjYJaW5jX2ZsYWdzCS8qIHRlbXAgY29tcGF0aWJp
bGl0eSAqLworI2RlZmluZQlpbmNfZnBvcnQJaW5jX2llLmllX2Zwb3J0CisjZGVmaW5lCWluY19s
cG9ydAlpbmNfaWUuaWVfbHBvcnQKKyNkZWZpbmUJaW5jX2ZhZGRyCWluY19pZS5pZV9mYWRkcgor
I2RlZmluZQlpbmNfbGFkZHIJaW5jX2llLmllX2xhZGRyCisjZGVmaW5lCWluYzZfZmFkZHIJaW5j
X2llLmllNl9mYWRkcgorI2RlZmluZQlpbmM2X2xhZGRyCWluY19pZS5pZTZfbGFkZHIKKworc3Ry
dWN0CWljbXA2X2ZpbHRlcjsKKworc3RydWN0IGlucGNiIHsKKwlMSVNUX0VOVFJZKGlucGNiKSBp
bnBfaGFzaDsJLyogaGFzaCBsaXN0ICovCisJTElTVF9FTlRSWShpbnBjYikgaW5wX2xpc3Q7CS8q
IGxpc3QgZm9yIGFsbCBQQ0JzIG9mIHRoaXMgcHJvdG8gKi8KKwl2b2lkCSppbnBfcHBjYjsJCS8q
IHBvaW50ZXIgdG8gcGVyLXByb3RvY29sIHBjYiAqLworCXN0cnVjdAlpbnBjYmluZm8gKmlucF9w
Y2JpbmZvOwkvKiBQQ0IgbGlzdCBpbmZvICovCisJc3RydWN0CXNvY2tldCAqaW5wX3NvY2tldDsJ
LyogYmFjayBwb2ludGVyIHRvIHNvY2tldCAqLworCisJdV9pbnQzMl90CWlucF9mbG93OworCWlu
dAlpbnBfZmxhZ3M7CQkvKiBnZW5lcmljIElQL2RhdGFncmFtIGZsYWdzICovCisKKwl1X2NoYXIJ
aW5wX3ZmbGFnOwkJLyogSVAgdmVyc2lvbiBmbGFnICh2NC92NikgKi8KKyNkZWZpbmUJSU5QX0lQ
VjQJMHgxCisjZGVmaW5lCUlOUF9JUFY2CTB4MgorI2RlZmluZQlJTlBfSVBWNlBST1RPCTB4NAkJ
Lyogb3BlbmVkIHVuZGVyIElQdjYgcHJvdG9jb2wgKi8KKyNkZWZpbmUJSU5QX1RJTUVXQUlUCTB4
OAkJLyogLi4gcHJvYmFibHkgZG9lc24ndCBnbyBoZXJlICovCisjZGVmaW5lCUlOUF9PTkVTQkNB
U1QJMHgxMAkJLyogc2VuZCBhbGwtb25lcyBicm9hZGNhc3QgKi8KKyNkZWZpbmUJSU5QX0RST1BQ
RUQJMHgyMAkJLyogcHJvdG9jb2wgZHJvcCBmbGFnICovCisjZGVmaW5lCUlOUF9TT0NLUkVGCTB4
NDAJCS8qIHN0cm9uZyBzb2NrZXQgcmVmZXJlbmNlICovCisjZGVmaW5lIElOUF9DT05OICAgICAg
ICAweDgwCisJdV9jaGFyCWlucF9pcF90dGw7CQkvKiB0aW1lIHRvIGxpdmUgcHJvdG8gKi8KKwl1
X2NoYXIJaW5wX2lwX3A7CQkvKiBwcm90b2NvbCBwcm90byAqLworCXVfY2hhcglpbnBfaXBfbWlu
dHRsOwkJLyogbWluaW11bSBUVEwgb3IgZHJvcCAqLworCXVpbnQzMl90IGlucF9pc3BhcmUxOwkJ
LyogY29ubmVjdGlvbiBpZCAvIHF1ZXVlIGlkICovCisJdm9pZAkqaW5wX3BzcGFyZVsyXTsJCS8q
IHJ0ZW50cnkgLyBnZW5lcmFsIHVzZSAqLworCisJLyogTG9jYWwgYW5kIGZvcmVpZ24gcG9ydHMs
IGxvY2FsIGFuZCBmb3JlaWduIGFkZHIuICovCisJc3RydWN0CWluX2Nvbm5pbmZvIGlucF9pbmM7
CisKKwkJCQkJLyogbGlzdCBmb3IgdGhpcyBQQ0IncyBsb2NhbCBwb3J0ICovCisJc3RydWN0CWxh
YmVsICppbnBfbGFiZWw7CS8qIE1BQyBsYWJlbCAqLworCXN0cnVjdAlpbnBjYnBvbGljeSAqaW5w
X3NwOyAgICAvKiBmb3IgSVBTRUMgKi8KKworCS8qIFByb3RvY29sLWRlcGVuZGVudCBwYXJ0OyBv
cHRpb25zLiAqLworCXN0cnVjdCB7CisJCXVfY2hhcglpbnA0X2lwX3RvczsJCS8qIHR5cGUgb2Yg
c2VydmljZSBwcm90byAqLworCQlzdHJ1Y3QJbWJ1ZiAqaW5wNF9vcHRpb25zOwkvKiBJUCBvcHRp
b25zICovCisJCXN0cnVjdAlpcF9tb3B0aW9ucyAqaW5wNF9tb3B0aW9uczsgLyogSVAgbXVsdGlj
YXN0IG9wdGlvbnMgKi8KKwl9IGlucF9kZXBlbmQ0OworI2RlZmluZQlpbnBfZnBvcnQJaW5wX2lu
Yy5pbmNfZnBvcnQKKyNkZWZpbmUJaW5wX2xwb3J0CWlucF9pbmMuaW5jX2xwb3J0CisjZGVmaW5l
CWlucF9mYWRkcglpbnBfaW5jLmluY19mYWRkcgorI2RlZmluZQlpbnBfbGFkZHIJaW5wX2luYy5p
bmNfbGFkZHIKKyNkZWZpbmUJaW5wX2lwX3RvcwlpbnBfZGVwZW5kNC5pbnA0X2lwX3RvcworI2Rl
ZmluZQlpbnBfb3B0aW9ucwlpbnBfZGVwZW5kNC5pbnA0X29wdGlvbnMKKyNkZWZpbmUJaW5wX21v
cHRpb25zCWlucF9kZXBlbmQ0LmlucDRfbW9wdGlvbnMKKwlzdHJ1Y3QgeworCQkvKiBJUCBvcHRp
b25zICovCisJCXN0cnVjdAltYnVmICppbnA2X29wdGlvbnM7CisJCS8qIElQNiBvcHRpb25zIGZv
ciBvdXRnb2luZyBwYWNrZXRzICovCisJCXN0cnVjdAlpcDZfcGt0b3B0cyAqaW5wNl9vdXRwdXRv
cHRzOworCQkvKiBJUCBtdWx0aWNhc3Qgb3B0aW9ucyAqLworI2lmIDAKKwkJc3RydWN0CWlwNl9t
b3B0aW9ucyAqaW5wNl9tb3B0aW9uczsKKyNlbmRpZgorCQkvKiBJQ01QdjYgY29kZSB0eXBlIGZp
bHRlciAqLworCQlzdHJ1Y3QJaWNtcDZfZmlsdGVyICppbnA2X2ljbXA2ZmlsdDsKKwkJLyogSVBW
Nl9DSEVDS1NVTSBzZXRzb2Nrb3B0ICovCisJCWludAlpbnA2X2Nrc3VtOworCQlzaG9ydAlpbnA2
X2hvcHM7CisJfSBpbnBfZGVwZW5kNjsKKwlMSVNUX0VOVFJZKGlucGNiKSBpbnBfcG9ydGxpc3Q7
CisJc3RydWN0CWlucGNicG9ydCAqaW5wX3BoZDsJLyogaGVhZCBvZiB0aGlzIGxpc3QgKi8KKyNk
ZWZpbmUgaW5wX3plcm9fc2l6ZSBvZmZzZXRvZihzdHJ1Y3QgaW5wY2IsIGlucF9nZW5jbnQpCisJ
c3RydWN0IG10eAlpbnBfbXR4OworCisjZGVmaW5lCWluNnBfZmFkZHIJaW5wX2luYy5pbmM2X2Zh
ZGRyCisjZGVmaW5lCWluNnBfbGFkZHIJaW5wX2luYy5pbmM2X2xhZGRyCisjZGVmaW5lCWluNnBf
aG9wcwlpbnBfZGVwZW5kNi5pbnA2X2hvcHMJLyogZGVmYXVsdCBob3AgbGltaXQgKi8KKyNkZWZp
bmUJaW42cF9pcDZfbnh0CWlucF9pcF9wCisjZGVmaW5lCWluNnBfZmxvd2luZm8JaW5wX2Zsb3cK
KyNkZWZpbmUJaW42cF92ZmxhZwlpbnBfdmZsYWcKKyNkZWZpbmUJaW42cF9vcHRpb25zCWlucF9k
ZXBlbmQ2LmlucDZfb3B0aW9ucworI2RlZmluZQlpbjZwX291dHB1dG9wdHMJaW5wX2RlcGVuZDYu
aW5wNl9vdXRwdXRvcHRzCisjaWYgMAorI2RlZmluZQlpbjZwX21vcHRpb25zCWlucF9kZXBlbmQ2
LmlucDZfbW9wdGlvbnMKKyNlbmRpZgorI2RlZmluZQlpbjZwX2ljbXA2ZmlsdAlpbnBfZGVwZW5k
Ni5pbnA2X2ljbXA2ZmlsdAorI2RlZmluZQlpbjZwX2Nrc3VtCWlucF9kZXBlbmQ2LmlucDZfY2tz
dW0KKyNkZWZpbmUJaW42cF9mbGFncwlpbnBfZmxhZ3MgIC8qIGZvciBLQU1FIHNyYyBzeW5jIG92
ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfc29ja2V0CWlucF9zb2NrZXQgIC8qIGZvciBLQU1F
IHNyYyBzeW5jIG92ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfbHBvcnQJaW5wX2xwb3J0ICAv
KiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLworI2RlZmluZQlpbjZwX2Zwb3J0CWlu
cF9mcG9ydCAgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KKyNkZWZpbmUJaW42
cF9wcGNiCWlucF9wcGNiICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLworfTsK
Ky8qCisgKiBUaGUgcmFuZ2Ugb2YgdGhlIGdlbmVyYXRpb24gY291bnQsIGFzIHVzZWQgaW4gdGhp
cyBpbXBsZW1lbnRhdGlvbiwgaXMgOWUxOS4KKyAqIFdlIHdvdWxkIGhhdmUgdG8gY3JlYXRlIDMw
MCBiaWxsaW9uIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgZm9yIHRoaXMgbnVtYmVyCisgKiB0byBy
b2xsIG92ZXIgaW4gYSB5ZWFyLiAgVGhpcyBzZWVtcyBzdWZmaWNpZW50bHkgdW5saWtlbHkgdGhh
dCB3ZSBzaW1wbHkKKyAqIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGggdGhhdCBwb3NzaWJp
bGl0eS4KKyAqLworCitzdHJ1Y3QgaW5wY2Jwb3J0IHsKKwlMSVNUX0VOVFJZKGlucGNicG9ydCkg
cGhkX2hhc2g7CisJc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsKKwl1X3Nob3J0IHBoZF9w
b3J0OworfTsKKworLyoKKyAqIEdsb2JhbCBkYXRhIHN0cnVjdHVyZSBmb3IgZWFjaCBoaWdoLWxl
dmVsIHByb3RvY29sIChVRFAsIFRDUCwgLi4uKSBpbiBib3RoCisgKiBJUHY0IGFuZCBJUHY2LiAg
SG9sZHMgaW5wY2IgbGlzdHMgYW5kIGluZm9ybWF0aW9uIGZvciBtYW5hZ2luZyB0aGVtLgorICov
CitzdHJ1Y3QgaW5wY2JpbmZvIHsKKwkvKgorCSAqIEdsb2JhbCBsaXN0IG9mIGlucGNicyBvbiB0
aGUgcHJvdG9jb2wuCisJICovCisJc3RydWN0IGlucGNiaGVhZAkqaXBpX2xpc3RoZWFkOworCXVf
aW50CQkJIGlwaV9jb3VudDsKKworCS8qCisJICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBoYXNo
ZWQgYnkgbG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGFuZAorCSAqIHBvcnQgbnVtYmVycy4K
KwkgKi8KKwlzdHJ1Y3QgaW5wY2JoZWFkCSppcGlfaGFzaGJhc2U7CisJdV9sb25nCQkJIGlwaV9o
YXNobWFzazsKKworCS8qCisJICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBoYXNoZWQgYnkgb25s
eSBsb2NhbCBwb3J0IG51bWJlci4KKwkgKi8KKwlzdHJ1Y3QgaW5wY2Jwb3J0aGVhZAkqaXBpX3Bv
cnRoYXNoYmFzZTsKKwl1X2xvbmcJCQkgaXBpX3BvcnRoYXNobWFzazsKKworCS8qCisJICogRmll
bGRzIGFzc29jaWF0ZWQgd2l0aCBwb3J0IGxvb2t1cCBhbmQgYWxsb2NhdGlvbi4KKwkgKi8KKwl1
X3Nob3J0CQkJIGlwaV9sYXN0cG9ydDsKKwl1X3Nob3J0CQkJIGlwaV9sYXN0bG93OworCXVfc2hv
cnQJCQkgaXBpX2xhc3RoaTsKKworCS8qCisJICogVU1BIHpvbmUgZnJvbSB3aGljaCBpbnBjYnMg
YXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm90b2NvbC4KKwkgKi8KKwlzdHJ1Y3QJdW1hX3pvbmUJ
KmlwaV96b25lOworCisJLyoKKwkgKiBHZW5lcmF0aW9uIGNvdW50LS1pbmNyZW1lbnRlZCBlYWNo
IHRpbWUgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZAorCSAqIG9yIGZyZWVkLgorCSAqLworCXN0
cnVjdCBtdHgJCSBpcGlfbXR4OworCisJLyoKKwkgKiB2aW1hZ2UgMQorCSAqIGdlbmVyYWwgdXNl
IDEKKwkgKi8KKwl2b2lkIAkJCSppcGlfcHNwYXJlWzJdOworfTsKKworI2RlZmluZSBJTlBfTE9D
S19JTklUKGlucCwgZCwgdCkgXAorCW10eF9pbml0KCYoaW5wKS0+aW5wX210eCwgKGQpLCAodCks
IE1UWF9ERUYgfCBNVFhfUkVDVVJTRSB8IE1UWF9EVVBPSykKKyNkZWZpbmUgSU5QX0xPQ0tfREVT
VFJPWShpbnApCW10eF9kZXN0cm95KCYoaW5wKS0+aW5wX210eCkKKyNkZWZpbmUgSU5QX0xPQ0so
aW5wKQkJbXR4X2xvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJTlBfVU5MT0NLKGlucCkJ
CW10eF91bmxvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJTlBfTE9DS19BU1NFUlQoaW5w
KQltdHhfYXNzZXJ0KCYoaW5wKS0+aW5wX210eCwgTUFfT1dORUQpCisjZGVmaW5lCUlOUF9VTkxP
Q0tfQVNTRVJUKGlucCkJbXR4X2Fzc2VydCgmKGlucCktPmlucF9tdHgsIE1BX05PVE9XTkVEKQor
CisjZGVmaW5lIElOUF9JTkZPX0xPQ0tfSU5JVChpcGksIGQpIFwKKwltdHhfaW5pdCgmKGlwaSkt
PmlwaV9tdHgsIChkKSwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNFKQorI2RlZmluZSBJTlBf
SU5GT19MT0NLX0RFU1RST1koaXBpKSAgbXR4X2Rlc3Ryb3koJihpcGkpLT5pcGlfbXR4KQorI2Rl
ZmluZSBJTlBfSU5GT19STE9DSyhpcGkpCW10eF9sb2NrKCYoaXBpKS0+aXBpX210eCkKKyNkZWZp
bmUgSU5QX0lORk9fV0xPQ0soaXBpKQltdHhfbG9jaygmKGlwaSktPmlwaV9tdHgpCisjZGVmaW5l
IElOUF9JTkZPX1JVTkxPQ0soaXBpKQltdHhfdW5sb2NrKCYoaXBpKS0+aXBpX210eCkKKyNkZWZp
bmUgSU5QX0lORk9fV1VOTE9DSyhpcGkpCW10eF91bmxvY2soJihpcGkpLT5pcGlfbXR4KQorI2Rl
ZmluZSBJTlBfSU5GT19STE9DS19BU1NFUlQoaXBpKQltdHhfYXNzZXJ0KCYoaXBpKS0+aXBpX210
eCwgTUFfT1dORUQpCisjZGVmaW5lIElOUF9JTkZPX1dMT0NLX0FTU0VSVChpcGkpCW10eF9hc3Nl
cnQoJihpcGkpLT5pcGlfbXR4LCBNQV9PV05FRCkKKyNkZWZpbmUgSU5QX0lORk9fVU5MT0NLX0FT
U0VSVChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9OT1RPV05FRCkKKworI2Rl
ZmluZSBJTlBfUENCSEFTSChmYWRkciwgbHBvcnQsIGZwb3J0LCBtYXNrKSBcCisJKCgoZmFkZHIp
IF4gKChmYWRkcikgPj4gMTYpIF4gbnRvaHMoKGxwb3J0KSBeIChmcG9ydCkpKSAmIChtYXNrKSkK
KyNkZWZpbmUgSU5QX1BDQlBPUlRIQVNIKGxwb3J0LCBtYXNrKSBcCisJKG50b2hzKChscG9ydCkp
ICYgKG1hc2spKQorCisvKiBmbGFncyBpbiBpbnBfZmxhZ3M6ICovCisjZGVmaW5lCUlOUF9SRUNW
T1BUUwkJMHgwMQkvKiByZWNlaXZlIGluY29taW5nIElQIG9wdGlvbnMgKi8KKyNkZWZpbmUJSU5Q
X1JFQ1ZSRVRPUFRTCQkweDAyCS8qIHJlY2VpdmUgSVAgb3B0aW9ucyBmb3IgcmVwbHkgKi8KKyNk
ZWZpbmUJSU5QX1JFQ1ZEU1RBRERSCQkweDA0CS8qIHJlY2VpdmUgSVAgZHN0IGFkZHJlc3MgKi8K
KyNkZWZpbmUJSU5QX0hEUklOQ0wJCTB4MDgJLyogdXNlciBzdXBwbGllcyBlbnRpcmUgSVAgaGVh
ZGVyICovCisjZGVmaW5lCUlOUF9ISUdIUE9SVAkJMHgxMAkvKiB1c2VyIHdhbnRzICJoaWdoIiBw
b3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0xPV1BPUlQJCTB4MjAJLyogdXNlciB3YW50cyAi
bG93IiBwb3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0FOT05QT1JUCQkweDQwCS8qIHBvcnQg
Y2hvc2VuIGZvciB1c2VyICovCisjZGVmaW5lCUlOUF9SRUNWSUYJCTB4ODAJLyogcmVjZWl2ZSBp
bmNvbWluZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUJSU5QX01UVURJU0MJCTB4MTAwCS8qIHVzZXIg
Y2FuIGRvIE1UVSBkaXNjb3ZlcnkgKi8KKyNkZWZpbmUJSU5QX0ZBSVRICQkweDIwMAkvKiBhY2Nl
cHQgRkFJVEgnZWQgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJSU5QX1JFQ1ZUVEwJCTB4NDAwCS8q
IHJlY2VpdmUgaW5jb21pbmcgSVAgVFRMICovCisjZGVmaW5lCUlOUF9ET05URlJBRwkJMHg4MDAJ
LyogZG9uJ3QgZnJhZ21lbnQgcGFja2V0ICovCisKKyNkZWZpbmUgSU42UF9JUFY2X1Y2T05MWQkw
eDAwODAwMCAvKiByZXN0cmljdCBBRl9JTkVUNiBzb2NrZXQgZm9yIHY2ICovCisKKyNkZWZpbmUJ
SU42UF9QS1RJTkZPCQkweDAxMDAwMCAvKiByZWNlaXZlIElQNiBkc3QgYW5kIEkvRiAqLworI2Rl
ZmluZQlJTjZQX0hPUExJTUlUCQkweDAyMDAwMCAvKiByZWNlaXZlIGhvcGxpbWl0ICovCisjZGVm
aW5lCUlONlBfSE9QT1BUUwkJMHgwNDAwMDAgLyogcmVjZWl2ZSBob3AtYnktaG9wIG9wdGlvbnMg
Ki8KKyNkZWZpbmUJSU42UF9EU1RPUFRTCQkweDA4MDAwMCAvKiByZWNlaXZlIGRzdCBvcHRpb25z
IGFmdGVyIHJ0aGRyICovCisjZGVmaW5lCUlONlBfUlRIRFIJCTB4MTAwMDAwIC8qIHJlY2VpdmUg
cm91dGluZyBoZWFkZXIgKi8KKyNkZWZpbmUJSU42UF9SVEhEUkRTVE9QVFMJMHgyMDAwMDAgLyog
cmVjZWl2ZSBkc3RvcHRpb25zIGJlZm9yZSBydGhkciAqLworI2RlZmluZQlJTjZQX1RDTEFTUwkJ
MHg0MDAwMDAgLyogcmVjZWl2ZSB0cmFmZmljIGNsYXNzIHZhbHVlICovCisjZGVmaW5lCUlONlBf
QVVUT0ZMT1dMQUJFTAkweDgwMDAwMCAvKiBhdHRhY2ggZmxvd2xhYmVsIGF1dG9tYXRpY2FsbHkg
Ki8KKyNkZWZpbmUJSU42UF9SRkMyMjkyCQkweDQwMDAwMDAwIC8qIHVzZWQgUkZDMjI5MiBBUEkg
b24gdGhlIHNvY2tldCAqLworI2RlZmluZQlJTjZQX01UVQkJMHg4MDAwMDAwMCAvKiByZWNlaXZl
IHBhdGggTVRVICovCisKKyNkZWZpbmUJSU5QX0NPTlRST0xPUFRTCQkoSU5QX1JFQ1ZPUFRTfElO
UF9SRUNWUkVUT1BUU3xJTlBfUkVDVkRTVEFERFJ8XAorCQkJCSBJTlBfUkVDVklGfElOUF9SRUNW
VFRMfFwKKwkJCQkgSU42UF9QS1RJTkZPfElONlBfSE9QTElNSVR8SU42UF9IT1BPUFRTfFwKKwkJ
CQkgSU42UF9EU1RPUFRTfElONlBfUlRIRFJ8SU42UF9SVEhEUkRTVE9QVFN8XAorCQkJCSBJTjZQ
X1RDTEFTU3xJTjZQX0FVVE9GTE9XTEFCRUx8SU42UF9SRkMyMjkyfFwKKwkJCQkgSU42UF9NVFUp
CisjZGVmaW5lCUlOUF9VTk1BUFBBQkxFT1BUUwkoSU42UF9IT1BPUFRTfElONlBfRFNUT1BUU3xJ
TjZQX1JUSERSfFwKKwkJCQkgSU42UF9UQ0xBU1N8SU42UF9BVVRPRkxPV0xBQkVMKQorCisgLyog
Zm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KKyNkZWZpbmUJSU42UF9ISUdIUE9SVAkJ
SU5QX0hJR0hQT1JUCisjZGVmaW5lCUlONlBfTE9XUE9SVAkJSU5QX0xPV1BPUlQKKyNkZWZpbmUJ
SU42UF9BTk9OUE9SVAkJSU5QX0FOT05QT1JUCisjZGVmaW5lCUlONlBfUkVDVklGCQlJTlBfUkVD
VklGCisjZGVmaW5lCUlONlBfTVRVRElTQwkJSU5QX01UVURJU0MKKyNkZWZpbmUJSU42UF9GQUlU
SAkJSU5QX0ZBSVRICisjZGVmaW5lCUlONlBfQ09OVFJPTE9QVFMgSU5QX0NPTlRST0xPUFRTCisJ
LyoKKwkgKiBzb2NrZXQgQUYgdmVyc2lvbiBpcyB7bmV3ZXIgdGhhbixvciBpbmNsdWRlfQorCSAq
IGFjdHVhbCBkYXRhZ3JhbSBBRiB2ZXJzaW9uCisJICovCisKKyNkZWZpbmUJSU5QTE9PS1VQX1dJ
TERDQVJECTEKKyNkZWZpbmUJc290b2lucGNiKHNvKQkoKHN0cnVjdCBpbnBjYiAqKShzbyktPnNv
X3BjYikKKyNkZWZpbmUJc290b2luNnBjYihzbykJc290b2lucGNiKHNvKSAvKiBmb3IgS0FNRSBz
cmMgc3luYyBvdmVyIEJTRConcyAqLworCisjZGVmaW5lCUlOUF9TT0NLQUYoc28pIHNvLT5zb19w
cm90by0+cHJfZG9tYWluLT5kb21fZmFtaWx5CisKKyNkZWZpbmUJSU5QX0NIRUNLX1NPQ0tBRihz
bywgYWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKKworLyogI2lmZGVmIF9LRVJORUwgKi8KK2V4
dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkaGlnaDsKK2V4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVk
bG93OworZXh0ZXJuIGludAlpcHBvcnRfbG93Zmlyc3RhdXRvOworZXh0ZXJuIGludAlpcHBvcnRf
bG93bGFzdGF1dG87CitleHRlcm4gaW50CWlwcG9ydF9maXJzdGF1dG87CitleHRlcm4gaW50CWlw
cG9ydF9sYXN0YXV0bzsKK2V4dGVybiBpbnQJaXBwb3J0X2hpZmlyc3RhdXRvOworZXh0ZXJuIGlu
dAlpcHBvcnRfaGlsYXN0YXV0bzsKK2V4dGVybiBzdHJ1Y3QgY2FsbG91dCBpcHBvcnRfdGlja19j
YWxsb3V0OworCit2b2lkCWluX3BjYnB1cmdlaWYwKHN0cnVjdCBpbnBjYmluZm8gKiwgc3RydWN0
IGlmbmV0ICopOworaW50CWluX3BjYmFsbG9jKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IGlucGNi
aW5mbyAqKTsKK2ludAlpbl9wY2JiaW5kKHN0cnVjdCBpbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc3RydWN0IHVjcmVkICopOworaW50CWluX3BjYmNvbm5lY3Qoc3RydWN0IGlucGNiICosIHN0
cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdWNyZWQgKik7Cit2b2lkCWluX3BjYmRldGFjaChzdHJ1
Y3QgaW5wY2IgKik7Cit2b2lkCWluX3BjYmRpc2Nvbm5lY3Qoc3RydWN0IGlucGNiICopOwordm9p
ZAlpbl9wY2Jkcm9wKHN0cnVjdCBpbnBjYiAqKTsKK3ZvaWQJaW5fcGNiZnJlZShzdHJ1Y3QgaW5w
Y2IgKik7CitpbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5wY2IgKik7CitzdHJ1Y3QgaW5wY2Ig
KgorCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2JpbmZvICosCisJICAgIHN0cnVjdCBp
bl9hZGRyLCB1X2ludCwgaW50KTsKK3N0cnVjdCBpbnBjYiAqCisJaW5fcGNibG9va3VwX2hhc2go
c3RydWN0IGlucGNiaW5mbyAqLCBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQsCisJICAgIHN0cnVjdCBp
bl9hZGRyLCB1X2ludCwgaW50LCBzdHJ1Y3QgaWZuZXQgKik7Cit2b2lkCWluX3BjYm5vdGlmeWFs
bChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRkciwKKwkgICAgaW50LCBz
dHJ1Y3QgaW5wY2IgKigqKShzdHJ1Y3QgaW5wY2IgKiwgaW50KSk7Cit2b2lkCWluX3BjYnJlaGFz
aChzdHJ1Y3QgaW5wY2IgKik7Cit2b2lkCWluX3BjYnNldHNvbGFiZWwoc3RydWN0IHNvY2tldCAq
c28pOworaW50CWluX2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKipuYW0pOworaW50CWluX2dldHNvY2thZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKipuYW0pOwordm9pZAlpbl9wY2Jzb3NldGxhYmVsKHN0cnVjdCBzb2NrZXQgKnNv
KTsKK3ZvaWQJaW5fcGNicmVtbGlzdHMoc3RydWN0IGlucGNiICppbnApOwordm9pZAlpcHBvcnRf
dGljayh2b2lkICp4dHApOworCisvKgorICogRGVidWdnaW5nIHJvdXRpbmVzIGNvbXBpbGVkIGlu
IHdoZW4gRERCIGlzIHByZXNlbnQuCisgKi8KK3ZvaWQJZGJfcHJpbnRfaW5wY2Ioc3RydWN0IGlu
cGNiICppbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRlbnQpOworCisvKiAjZW5kaWYgIF9L
RVJORUwgKi8KKworI2VuZGlmIC8qICFfTkVUSU5FVF9JTl9QQ0JfSF8gKi8KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L3VzZXJfaXA2X3Zhci5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4
YzUzOTEuLmY1ZTRhNjBlNGYyN2M1NmU2NmFiMTM5M2VjMGE2ODFjZWI3OTFlYTIgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmgKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX2lwNl92YXIuaApAQCAtMCwwICsxLDEyNiBAQAorLyotCisgKiBDb3B5cmln
aHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworLyot
CisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqICAgICAgVGhlIFJlZ2VudHMg
b2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUg
bmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9VU0VSX0lQ
Nl9WQVJfSF8KKyNkZWZpbmUgX1VTRVJfSVA2X1ZBUl9IXworCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorc3RydWN0IGlwNl9oZHIgeworCXVuaW9uIHsKKwkJc3RydWN0IGlw
Nl9oZHJjdGwgeworCQkJdV9pbnQzMl90IGlwNl91bjFfZmxvdzsJLyogMjAgYml0cyBvZiBmbG93
LUlEICovCisJCQl1X2ludDE2X3QgaXA2X3VuMV9wbGVuOwkvKiBwYXlsb2FkIGxlbmd0aCAqLwor
CQkJdV9pbnQ4X3QgIGlwNl91bjFfbnh0OwkvKiBuZXh0IGhlYWRlciAqLworCQkJdV9pbnQ4X3Qg
IGlwNl91bjFfaGxpbTsJLyogaG9wIGxpbWl0ICovCisJCX0gaXA2X3VuMTsKKwkJdV9pbnQ4X3Qg
aXA2X3VuMl92ZmM7CS8qIDQgYml0cyB2ZXJzaW9uLCB0b3AgNCBiaXRzIGNsYXNzICovCisJfSBp
cDZfY3RsdW47CisJc3RydWN0IGluNl9hZGRyIGlwNl9zcmM7CS8qIHNvdXJjZSBhZGRyZXNzICov
CisJc3RydWN0IGluNl9hZGRyIGlwNl9kc3Q7CS8qIGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KK307
CisjZGVmaW5lIGlwNl92ZmMJCWlwNl9jdGx1bi5pcDZfdW4yX3ZmYworI2RlZmluZSBpcDZfZmxv
dwlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2Zsb3cKKyNkZWZpbmUgaXA2X3BsZW4JaXA2X2N0
bHVuLmlwNl91bjEuaXA2X3VuMV9wbGVuCisjZGVmaW5lIGlwNl9ueHQJCWlwNl9jdGx1bi5pcDZf
dW4xLmlwNl91bjFfbnh0CisjZGVmaW5lIGlwNl9obGltCWlwNl9jdGx1bi5pcDZfdW4xLmlwNl91
bjFfaGxpbQorI2RlZmluZSBpcDZfaG9wcwlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2hsaW0K
KworI2RlZmluZSBJUFY2X1ZFUlNJT04JCTB4NjAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBzNl9hZGRyMTYgdS5Xb3JkCisjZW5kaWYKKyNp
ZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0xpbnV4KQorI2RlZmluZSBzNl9hZGRyOCAgX191Nl9hZGRyLl9fdTZfYWRkcjgKKyNk
ZWZpbmUgczZfYWRkcjE2IF9fdTZfYWRkci5fX3U2X2FkZHIxNgorI2RlZmluZSBzNl9hZGRyMzIg
X191Nl9hZGRyLl9fdTZfYWRkcjMyCisjZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQorc3RydWN0IHJvdXRlX2luNiB7
CisJc3RydWN0CXJ0ZW50cnkgKnJvX3J0OworCXN0cnVjdAlsbGVudHJ5ICpyb19sbGU7CisJc3Ry
dWN0CWluNl9hZGRyICpyb19pYTY7CisJaW50CQlyb19mbGFnczsKKwlzdHJ1Y3QJc29ja2FkZHJf
aW42IHJvX2RzdDsKK307CisjZW5kaWYKKyNkZWZpbmUgSVA2X0VYVEhEUl9HRVQodmFsLCB0eXAs
IG0sIG9mZiwgbGVuKSBcCitkbyB7CQkJCQkJCQkJXAorCXN0cnVjdCBtYnVmICp0OwkJCQkJCQlc
CisJaW50IHRtcDsJCQkJCQkJXAorCWlmICgobSktPm1fbGVuID49IChvZmYpICsgKGxlbikpCQkJ
CVwKKwkJKHZhbCkgPSAodHlwKShtdG9kKChtKSwgY2FkZHJfdCkgKyAob2ZmKSk7CQlcCisJZWxz
ZSB7CQkJCQkJCQlcCisJCXQgPSBtX3B1bGxkb3duKChtKSwgKG9mZiksIChsZW4pLCAmdG1wKTsJ
CVwKKwkJaWYgKHQpIHsJCQkJCQlcCisJCQlLQVNTRVJUKHQtPm1fbGVuID49IHRtcCArIChsZW4p
LAkJXAorCQkJICAgICAgICAoIm1fcHVsbGRvd24gbWFsZnVuY3Rpb24iKSk7CQlcCisJCQkodmFs
KSA9ICh0eXApKG10b2QodCwgY2FkZHJfdCkgKyB0bXApOwkJXAorCQl9IGVsc2UgewkJCQkJCVwK
KwkJCSh2YWwpID0gKHR5cClOVUxMOwkJCQlcCisJCQkobSkgPSBOVUxMOwkJCQkJXAorCQl9CQkJ
CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIV9VU0VSX0lQNl9W
QVJfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXBfaWNtcC5oCmluZGV4IGU2OWRlMjliYjJkMWQ2
NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmY2ZmQ1NDg3ZTJiY2UzYzBhZWI4MThhNmFlNGNi
ZTEyM2ZhODU0NGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcF9pY21w
LmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwX2ljbXAuaApAQCAtMCwwICsxLDIy
NSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdl
bnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3Ig
dGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworI2lmbmRlZiBfVVNF
Ul9JUF9JQ01QX0hfCisjZGVmaW5lIF9VU0VSX0lQX0lDTVBfSF8KKworLyoKKyAqIEludGVyZmFj
ZSBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgRGVmaW5pdGlvbnMuCisgKiBQZXIgUkZDIDc5Miwg
U2VwdGVtYmVyIDE5ODEuCisgKi8KKworLyoKKyAqIEludGVybmFsIG9mIGFuIElDTVAgUm91dGVy
IEFkdmVydGlzZW1lbnQKKyAqLworc3RydWN0IGljbXBfcmFfYWRkciB7CisJdV9pbnQzMl90IGly
YV9hZGRyOworCXVfaW50MzJfdCBpcmFfcHJlZmVyZW5jZTsKK307CisKKy8qCisgKiBTdHJ1Y3R1
cmUgb2YgYW4gaWNtcCBoZWFkZXIuCisgKi8KK3N0cnVjdCBpY21waGRyIHsKKwl1X2NoYXIJaWNt
cF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKwl1X2NoYXIJaWNtcF9j
b2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLworCXVfc2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMg
Y29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KK307CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisjcHJhZ21hIHBhY2sgKHB1c2gsIDEpCitzdHJ1Y3QgaWNtcDZfaGRy
IHsKKwl1X2ludDhfdCBpY21wNl90eXBlOworCXVfaW50OF90IGljbXA2X2NvZGU7CisJdV9pbnQx
Nl90IGljbXA2X2Nrc3VtOworCXVuaW9uIHsKKwkJdV9pbnQzMl90IGljbXA2X3VuX2RhdGEzMlsx
XTsKKwkJdV9pbnQxNl90IGljbXA2X3VuX2RhdGExNlsyXTsKKwkJdV9pbnQ4X3QgaWNtcDZfdW5f
ZGF0YThbNF07CisJfSBpY21wNl9kYXRhdW47Cit9OworI3ByYWdtYSBwYWNrKHBvcCkKKworI2Rl
ZmluZSBpY21wNl9kYXRhMzIgaWNtcDZfZGF0YXVuLmljbXA2X3VuX2RhdGEzMgorI2RlZmluZSBp
Y21wNl9tdHUgaWNtcDZfZGF0YTMyWzBdCisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBvZiBh
biBpY21wIHBhY2tldC4KKyAqCisgKiBYWFg6IHNob3VsZCBzdGFydCB3aXRoIGEgc3RydWN0IGlj
bXBoZHIuCisgKi8KK3N0cnVjdCBpY21wIHsKKwl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBv
ZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKwl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIg
Y29kZSAqLworCXVfc2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBv
ZiBzdHJ1Y3QgKi8KKwl1bmlvbiB7CisJCXVfY2hhciBpaF9wcHRyOwkJCS8qIElDTVBfUEFSQU1Q
Uk9CICovCisJCXN0cnVjdCBpbl9hZGRyIGloX2d3YWRkcjsJLyogSUNNUF9SRURJUkVDVCAqLwor
CQlzdHJ1Y3QgaWhfaWRzZXEgeworCQkJdWludDE2X3QJaWNkX2lkOwkvKiBuZXR3b3JrIGZvcm1h
dCAqLworCQkJdWludDE2X3QJaWNkX3NlcTsgLyogbmV0d29yayBmb3JtYXQgKi8KKwkJfSBpaF9p
ZHNlcTsKKwkJaW50IGloX3ZvaWQ7CisKKwkJLyogSUNNUF9VTlJFQUNIX05FRURGUkFHIC0tIFBh
dGggTVRVIERpc2NvdmVyeSAoUkZDMTE5MSkgKi8KKwkJc3RydWN0IGloX3BtdHUgeworCQkJdWlu
dDE2X3QgaXBtX3ZvaWQ7CS8qIG5ldHdvcmsgZm9ybWF0ICovCisJCQl1aW50MTZfdCBpcG1fbmV4
dG10dTsJLyogbmV0d29yayBmb3JtYXQgKi8KKwkJfSBpaF9wbXR1OworCisJCXN0cnVjdCBpaF9y
dHJhZHYgeworCQkJdV9jaGFyIGlydF9udW1fYWRkcnM7CisJCQl1X2NoYXIgaXJ0X3dwYTsKKwkJ
CXVfaW50MTZfdCBpcnRfbGlmZXRpbWU7CisJCX0gaWhfcnRyYWR2OworCX0gaWNtcF9odW47Cisj
ZGVmaW5lCWljbXBfcHB0cglpY21wX2h1bi5paF9wcHRyCisjZGVmaW5lCWljbXBfZ3dhZGRyCWlj
bXBfaHVuLmloX2d3YWRkcgorI2RlZmluZQlpY21wX2lkCQlpY21wX2h1bi5paF9pZHNlcS5pY2Rf
aWQKKyNkZWZpbmUJaWNtcF9zZXEJaWNtcF9odW4uaWhfaWRzZXEuaWNkX3NlcQorI2RlZmluZQlp
Y21wX3ZvaWQJaWNtcF9odW4uaWhfdm9pZAorI2RlZmluZQlpY21wX3Btdm9pZAlpY21wX2h1bi5p
aF9wbXR1LmlwbV92b2lkCisjZGVmaW5lCWljbXBfbmV4dG10dQlpY21wX2h1bi5paF9wbXR1Lmlw
bV9uZXh0bXR1CisjZGVmaW5lCWljbXBfbnVtX2FkZHJzCWljbXBfaHVuLmloX3J0cmFkdi5pcnRf
bnVtX2FkZHJzCisjZGVmaW5lCWljbXBfd3BhCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfd3BhCisj
ZGVmaW5lCWljbXBfbGlmZXRpbWUJaWNtcF9odW4uaWhfcnRyYWR2LmlydF9saWZldGltZQorCXVu
aW9uIHsKKwkJc3RydWN0IGlkX3RzIHsJCQkvKiBJQ01QIFRpbWVzdGFtcCAqLworCQkJLyoKKwkJ
CSAqIFRoZSBuZXh0IDMgZmllbGRzIGFyZSBpbiBuZXR3b3JrIGZvcm1hdCwKKwkJCSAqIG1pbGxp
c2Vjb25kcyBzaW5jZSAwMDowMCBHTVQKKwkJCSAqLworCQkJdWludDMyX3QgaXRzX290aW1lOwkv
KiBPcmlnaW5hdGUgKi8KKwkJCXVpbnQzMl90IGl0c19ydGltZTsJLyogUmVjZWl2ZSAqLworCQkJ
dWludDMyX3QgaXRzX3R0aW1lOwkvKiBUcmFuc21pdCAqLworCQl9IGlkX3RzOworCQlzdHJ1Y3Qg
aWRfaXAgIHsKKwkJCXN0cnVjdCBpcCBpZGlfaXA7CisJCQkvKiBvcHRpb25zIGFuZCB0aGVuIDY0
IGJpdHMgb2YgZGF0YSAqLworCQl9IGlkX2lwOworCQlzdHJ1Y3QgaWNtcF9yYV9hZGRyIGlkX3Jh
ZHY7CisJCXVfaW50MzJfdCBpZF9tYXNrOworCQljaGFyCWlkX2RhdGFbMV07CisJfSBpY21wX2R1
bjsKKyNkZWZpbmUJaWNtcF9vdGltZQlpY21wX2R1bi5pZF90cy5pdHNfb3RpbWUKKyNkZWZpbmUJ
aWNtcF9ydGltZQlpY21wX2R1bi5pZF90cy5pdHNfcnRpbWUKKyNkZWZpbmUJaWNtcF90dGltZQlp
Y21wX2R1bi5pZF90cy5pdHNfdHRpbWUKKyNkZWZpbmUJaWNtcF9pcAkJaWNtcF9kdW4uaWRfaXAu
aWRpX2lwCisjZGVmaW5lCWljbXBfcmFkdglpY21wX2R1bi5pZF9yYWR2CisjZGVmaW5lCWljbXBf
bWFzawlpY21wX2R1bi5pZF9tYXNrCisjZGVmaW5lCWljbXBfZGF0YQlpY21wX2R1bi5pZF9kYXRh
Cit9OworCisvKgorICogTG93ZXIgYm91bmRzIG9uIHBhY2tldCBsZW5ndGhzIGZvciB2YXJpb3Vz
IHR5cGVzLgorICogRm9yIHRoZSBlcnJvciBhZHZpY2UgcGFja2V0cyBtdXN0IGZpcnN0IGluc3Vy
ZSB0aGF0IHRoZQorICogcGFja2V0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSByZXR1
cm5lZCBpcCBoZWFkZXIuCisgKiBPbmx5IHRoZW4gY2FuIHdlIGRvIHRoZSBjaGVjayB0byBzZWUg
aWYgNjQgYml0cyBvZiBwYWNrZXQKKyAqIGRhdGEgaGF2ZSBiZWVuIHJldHVybmVkLCBzaW5jZSB3
ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm5lZAorICogaXAgaGVhZGVyIGxlbmd0aC4KKyAqLwor
I2RlZmluZQlJQ01QX01JTkxFTgk4CQkJCS8qIGFicyBtaW5pbXVtICovCisjZGVmaW5lCUlDTVBf
VFNMRU4JKDggKyAzICogc2l6ZW9mICh1aW50MzJfdCkpCS8qIHRpbWVzdGFtcCAqLworI2RlZmlu
ZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVzcyBtYXNrICovCisjZGVmaW5lCUlDTVBfQURW
TEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWluICovCisjZGVmaW5lCUlD
TVBfQURWTEVOKHApCSg4ICsgKChwKS0+aWNtcF9pcC5pcF9obCA8PCAyKSArIDgpCisJLyogTi5C
LjogbXVzdCBzZXBhcmF0ZWx5IGNoZWNrIHRoYXQgaXBfaGwgPj0gNSAqLworCisvKgorICogRGVm
aW5pdGlvbiBvZiB0eXBlIGFuZCBjb2RlIGZpZWxkIHZhbHVlcy4KKyAqLworI2RlZmluZQlJQ01Q
X0VDSE9SRVBMWQkJMAkJLyogZWNobyByZXBseSAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0gJCTMJ
CS8qIGRlc3QgdW5yZWFjaGFibGUsIGNvZGVzOiAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX05F
VAkwCQkvKiBiYWQgbmV0ICovCisjZGVmaW5lCQlJQ01QX1VOUkVBQ0hfSE9TVAkxCQkvKiBiYWQg
aG9zdCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1BST1RPQ09MCTIJCS8qIGJhZCBwcm90b2Nv
bCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1BPUlQJMwkJLyogYmFkIHBvcnQgKi8KKyNkZWZp
bmUJCUlDTVBfVU5SRUFDSF9ORUVERlJBRwk0CQkvKiBJUF9ERiBjYXVzZWQgZHJvcCAqLworI2Rl
ZmluZQkJSUNNUF9VTlJFQUNIX1NSQ0ZBSUwJNQkJLyogc3JjIHJvdXRlIGZhaWxlZCAqLworI2Rl
ZmluZQkJSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOIDYJCS8qIHVua25vd24gbmV0ICovCisjZGVm
aW5lCQlJQ01QX1VOUkVBQ0hfSE9TVF9VTktOT1dOIDcJCS8qIHVua25vd24gaG9zdCAqLworI2Rl
ZmluZQkJSUNNUF9VTlJFQUNIX0lTT0xBVEVECTgJCS8qIHNyYyBob3N0IGlzb2xhdGVkICovCisj
ZGVmaW5lCQlJQ01QX1VOUkVBQ0hfTkVUX1BST0hJQgk5CQkvKiBwcm9oaWJpdGVkIGFjY2VzcyAq
LworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1RfUFJPSElCIDEwCQkvKiBkaXR0byAqLworI2Rl
ZmluZQkJSUNNUF9VTlJFQUNIX1RPU05FVAkxMQkJLyogYmFkIHRvcyBmb3IgbmV0ICovCisjZGVm
aW5lCQlJQ01QX1VOUkVBQ0hfVE9TSE9TVAkxMgkJLyogYmFkIHRvcyBmb3IgaG9zdCAqLworI2Rl
ZmluZQkJSUNNUF9VTlJFQUNIX0ZJTFRFUl9QUk9ISUIgMTMJCS8qIGFkbWluIHByb2hpYiAqLwor
I2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1RfUFJFQ0VERU5DRSAxNAkJLyogaG9zdCBwcmVjIHZp
by4gKi8KKyNkZWZpbmUJCUlDTVBfVU5SRUFDSF9QUkVDRURFTkNFX0NVVE9GRiAxNQkvKiBwcmVj
IGN1dG9mZiAqLworI2RlZmluZQlJQ01QX1NPVVJDRVFVRU5DSAk0CQkvKiBwYWNrZXQgbG9zdCwg
c2xvdyBkb3duICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1QJCTUJCS8qIHNob3J0ZXIgcm91dGUs
IGNvZGVzOiAqLworI2RlZmluZQkJSUNNUF9SRURJUkVDVF9ORVQJMAkJLyogZm9yIG5ldHdvcmsg
Ki8KKyNkZWZpbmUJCUlDTVBfUkVESVJFQ1RfSE9TVAkxCQkvKiBmb3IgaG9zdCAqLworI2RlZmlu
ZQkJSUNNUF9SRURJUkVDVF9UT1NORVQJMgkJLyogZm9yIHRvcyBhbmQgbmV0ICovCisjZGVmaW5l
CQlJQ01QX1JFRElSRUNUX1RPU0hPU1QJMwkJLyogZm9yIHRvcyBhbmQgaG9zdCAqLworI2RlZmlu
ZQlJQ01QX0FMVEhPU1RBRERSCTYJCS8qIGFsdGVybmF0ZSBob3N0IGFkZHJlc3MgKi8KKyNkZWZp
bmUJSUNNUF9FQ0hPCQk4CQkvKiBlY2hvIHNlcnZpY2UgKi8KKyNkZWZpbmUJSUNNUF9ST1VURVJB
RFZFUlQJOQkJLyogcm91dGVyIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZpbmUJCUlDTVBfUk9VVEVS
QURWRVJUX05PUk1BTAkJMAkvKiBub3JtYWwgYWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZQkJSUNN
UF9ST1VURVJBRFZFUlRfTk9ST1VURV9DT01NT04JMTYJLyogc2VsZWN0aXZlIHJvdXRpbmcgKi8K
KyNkZWZpbmUJSUNNUF9ST1VURVJTT0xJQ0lUCTEwCQkvKiByb3V0ZXIgc29saWNpdGF0aW9uICov
CisjZGVmaW5lCUlDTVBfVElNWENFRUQJCTExCQkvKiB0aW1lIGV4Y2VlZGVkLCBjb2RlOiAqLwor
I2RlZmluZQkJSUNNUF9USU1YQ0VFRF9JTlRSQU5TCTAJCS8qIHR0bD09MCBpbiB0cmFuc2l0ICov
CisjZGVmaW5lCQlJQ01QX1RJTVhDRUVEX1JFQVNTCTEJCS8qIHR0bD09MCBpbiByZWFzcyAqLwor
I2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBiYWQgKi8KKyNkZWZpbmUJ
CUlDTVBfUEFSQU1QUk9CX0VSUkFUUFRSIDAJCS8qIGVycm9yIGF0IHBhcmFtIHB0ciAqLworI2Rl
ZmluZQkJSUNNUF9QQVJBTVBST0JfT1BUQUJTRU5UIDEJCS8qIHJlcS4gb3B0LiBhYnNlbnQgKi8K
KyNkZWZpbmUJCUlDTVBfUEFSQU1QUk9CX0xFTkdUSCAyCQkJLyogYmFkIGxlbmd0aCAqLworI2Rl
ZmluZQlJQ01QX1RTVEFNUAkJMTMJCS8qIHRpbWVzdGFtcCByZXF1ZXN0ICovCisjZGVmaW5lCUlD
TVBfVFNUQU1QUkVQTFkJMTQJCS8qIHRpbWVzdGFtcCByZXBseSAqLworI2RlZmluZQlJQ01QX0lS
RVEJCTE1CQkvKiBpbmZvcm1hdGlvbiByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfSVJFUVJFUExZ
CQkxNgkJLyogaW5mb3JtYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVRCQkxNwkJ
LyogYWRkcmVzcyBtYXNrIHJlcXVlc3QgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVQTFkJCTE4CQkv
KiBhZGRyZXNzIG1hc2sgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9UUkFDRVJPVVRFCQkzMAkJLyog
dHJhY2Vyb3V0ZSAqLworI2RlZmluZQlJQ01QX0RBVEFDT05WRVJSCTMxCQkvKiBkYXRhIGNvbnZl
cnNpb24gZXJyb3IgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVESVJFQ1QJMzIJCS8qIG1vYmls
ZSBob3N0IHJlZGlyZWN0ICovCisjZGVmaW5lCUlDTVBfSVBWNl9XSEVSRUFSRVlPVQkzMwkJLyog
SVB2NiB3aGVyZS1hcmUteW91ICovCisjZGVmaW5lCUlDTVBfSVBWNl9JQU1IRVJFCTM0CQkvKiBJ
UHY2IGktYW0taGVyZSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVFVRVNUCTM1CQkvKiBt
b2JpbGUgcmVnaXN0cmF0aW9uIHJlcSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVBMWQkz
NgkJLyogbW9iaWxlIHJlZ2lzdHJhdGlvbiByZXBseSAqLworI2RlZmluZQlJQ01QX1NLSVAJCTM5
CQkvKiBTS0lQICovCisjZGVmaW5lCUlDTVBfUEhPVFVSSVMJCTQwCQkvKiBQaG90dXJpcyAqLwor
I2RlZmluZQkJSUNNUF9QSE9UVVJJU19VTktOT1dOX0lOREVYCTEJLyogdW5rbm93biBzZWMgaW5k
ZXggKi8KKyNkZWZpbmUJCUlDTVBfUEhPVFVSSVNfQVVUSF9GQUlMRUQJMgkvKiBhdXRoIGZhaWxl
ZCAqLworI2RlZmluZQkJSUNNUF9QSE9UVVJJU19ERUNSWVBUX0ZBSUxFRAkzCS8qIGRlY3J5cHQg
ZmFpbGVkICovCisKKyNkZWZpbmUJSUNNUF9NQVhUWVBFCQk0MAorCisjZGVmaW5lCUlDTVBfSU5G
T1RZUEUodHlwZSkgXAorCSgodHlwZSkgPT0gSUNNUF9FQ0hPUkVQTFkgfHwgKHR5cGUpID09IElD
TVBfRUNITyB8fCBcCisJKHR5cGUpID09IElDTVBfUk9VVEVSQURWRVJUIHx8ICh0eXBlKSA9PSBJ
Q01QX1JPVVRFUlNPTElDSVQgfHwgXAorCSh0eXBlKSA9PSBJQ01QX1RTVEFNUCB8fCAodHlwZSkg
PT0gSUNNUF9UU1RBTVBSRVBMWSB8fCBcCisJKHR5cGUpID09IElDTVBfSVJFUSB8fCAodHlwZSkg
PT0gSUNNUF9JUkVRUkVQTFkgfHwgXAorCSh0eXBlKSA9PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUp
ID09IElDTVBfTUFTS1JFUExZKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX21hbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21hbGxvYy5o
CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjczOTA0Y2E1
YjQ3YmJiNThiOGZiNmI5ZjZiYmM0NDRmZDZkMjIxMTkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvdXNlcl9tYWxsb2MuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWFs
bG9jLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkz
CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQ29w
eXJpZ2h0IChjKSAyMDA1IFJvYmVydCBOLiBNLiBXYXRzb24KKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisvKiBUaGlzIGZp
bGUgaGFzIGJlZW4gcmVuYW1lZCB1c2VyX21hbGxvYy5oIGZvciBVc2Vyc3BhY2UgKi8KKyNpZm5k
ZWYgX1VTRVJfTUFMTE9DX0hfCisjZGVmaW5lCV9VU0VSX01BTExPQ19IXworCisvKl9fVXNlcnNw
YWNlX18qLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lm
ICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2luY2x1ZGUgPHN0cmluZ3MuaD4K
KyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgX01T
Q19WRVIgPj0gMTYwMAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VsaWYgZGVmaW5lZChTQ1RQX1NU
RElOVF9JTkNMVURFKQorI2luY2x1ZGUgU0NUUF9TVERJTlRfSU5DTFVERQorI2Vsc2UKKyNkZWZp
bmUgdWludDMyX3QgdW5zaWduZWQgX19pbnQzMgorI2RlZmluZSB1aW50NjRfdCB1bnNpZ25lZCBf
X2ludDY0CisjZW5kaWYKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisKKyNkZWZpbmUJ
TUlOQUxMT0NTSVpFCVVNQV9TTUFMTEVTVF9VTklUCisKKy8qCisgKiBmbGFncyB0byBtYWxsb2Mu
CisgKi8KKyNkZWZpbmUJTV9OT1dBSVQJMHgwMDAxCQkvKiBkbyBub3QgYmxvY2sgKi8KKyNkZWZp
bmUJTV9XQUlUT0sJMHgwMDAyCQkvKiBvayB0byBibG9jayAqLworI2RlZmluZQlNX1pFUk8JCTB4
MDEwMAkJLyogYnplcm8gdGhlIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUJTV9OT1ZNCQkweDAyMDAJ
CS8qIGRvbid0IGFzayBWTSBmb3IgcGFnZXMgKi8KKyNkZWZpbmUJTV9VU0VfUkVTRVJWRQkweDA0
MDAJCS8qIGNhbiBhbGxvYyBvdXQgb2YgcmVzZXJ2ZSBtZW1vcnkgKi8KKworI2RlZmluZQlNX01B
R0lDCQk4Nzc5ODM5NzcJLyogdGltZSB3aGVuIGZpcnN0IGRlZmluZWQgOi0pICovCisKKy8qCisg
KiBUd28gbWFsbG9jIHR5cGUgc3RydWN0dXJlcyBhcmUgcHJlc2VudDogbWFsbG9jX3R5cGUsIHdo
aWNoIGlzIHVzZWQgYnkgYQorICogdHlwZSBvd25lciB0byBkZWNsYXJlIHRoZSB0eXBlLCBhbmQg
bWFsbG9jX3R5cGVfaW50ZXJuYWwsIHdoaWNoIGhvbGRzCisgKiBtYWxsb2Mtb3duZWQgc3RhdGlz
dGljcyBhbmQgb3RoZXIgQUJJLXNlbnNpdGl2ZSBmaWVsZHMsIHN1Y2ggYXMgdGhlIHNldCBvZgor
ICogbWFsbG9jIHN0YXRpc3RpY3MgaW5kZXhlZCBieSB0aGUgY29tcGlsZS10aW1lIE1BWENQVSBj
b25zdGFudC4KKyAqIEFwcGxpY2F0aW9ucyBzaG91bGQgYXZvaWQgaW50cm9kdWNpbmcgZGVwZW5k
ZW5jZSBvbiB0aGUgYWxsb2NhdG9yIHByaXZhdGUKKyAqIGRhdGEgbGF5b3V0IGFuZCBzaXplLgor
ICoKKyAqIFRoZSBtYWxsb2NfdHlwZSBrc19uZXh0IGZpZWxkIGlzIHByb3RlY3RlZCBieSBtYWxs
b2NfbXR4LiAgT3RoZXIgZmllbGRzIGluCisgKiBtYWxsb2NfdHlwZSBhcmUgc3RhdGljIGFmdGVy
IGluaXRpYWxpemF0aW9uIHNvIHVuc3luY2hyb25pemVkLgorICoKKyAqIFN0YXRpc3RpY3MgaW4g
bWFsbG9jX3R5cGVfc3RhdHMgYXJlIHdyaXR0ZW4gb25seSB3aGVuIGhvbGRpbmcgYSBjcml0aWNh
bAorICogc2VjdGlvbiBhbmQgcnVubmluZyBvbiB0aGUgQ1BVIGFzc29jaWF0ZWQgd2l0aCB0aGUg
aW5kZXggaW50byB0aGUgc3RhdAorICogYXJyYXksIGJ1dCByZWFkIGxvY2stZnJlZSByZXN1bHRp
bmcgaW4gcG9zc2libGUgKG1pbm9yKSByYWNlcywgd2hpY2ggdGhlCisgKiBtb25pdG9yaW5nIGFw
cCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQuCisgKi8KK3N0cnVjdCBtYWxsb2NfdHlwZV9zdGF0
cyB7CisJdWludDY0X3QJbXRzX21lbWFsbG9jZWQ7CS8qIEJ5dGVzIGFsbG9jYXRlZCBvbiBDUFUu
ICovCisJdWludDY0X3QJbXRzX21lbWZyZWVkOwkvKiBCeXRlcyBmcmVlZCBvbiBDUFUuICovCisJ
dWludDY0X3QJbXRzX251bWFsbG9jczsJLyogTnVtYmVyIG9mIGFsbG9jYXRlcyBvbiBDUFUuICov
CisJdWludDY0X3QJbXRzX251bWZyZWVzOwkvKiBudW1iZXIgb2YgZnJlZXMgb24gQ1BVLiAqLwor
CXVpbnQ2NF90CW10c19zaXplOwkvKiBCaXRtYXNrIG9mIHNpemVzIGFsbG9jYXRlZCBvbiBDUFUu
ICovCisJdWludDY0X3QJX210c19yZXNlcnZlZDE7CS8qIFJlc2VydmVkIGZpZWxkLiAqLworCXVp
bnQ2NF90CV9tdHNfcmVzZXJ2ZWQyOwkvKiBSZXNlcnZlZCBmaWVsZC4gKi8KKwl1aW50NjRfdAlf
bXRzX3Jlc2VydmVkMzsJLyogUmVzZXJ2ZWQgZmllbGQuICovCit9OworCisjaWZuZGVmIE1BWENQ
VSAvKiBuZWNlc3Nhcnkgb24gTGludXggKi8KKyNkZWZpbmUgTUFYQ1BVIDQgLyogYXJiaXRyYXJ5
PyAqLworI2VuZGlmCisKK3N0cnVjdCBtYWxsb2NfdHlwZV9pbnRlcm5hbCB7CisJc3RydWN0IG1h
bGxvY190eXBlX3N0YXRzCW10aV9zdGF0c1tNQVhDUFVdOworfTsKKworLyoKKyAqIEFCSS1jb21w
YXRpYmxlIHZlcnNpb24gb2YgdGhlIG9sZCAnc3RydWN0IG1hbGxvY190eXBlJywgb25seSBhbGwg
c3RhdHMgYXJlCisgKiBub3cgbWFsbG9jLW1hbmFnZWQgaW4gbWFsbG9jLW93bmVkIG1lbW9yeSBy
YXRoZXIgdGhhbiBpbiBjYWxsZXIgbWVtb3J5LCBzbworICogYXMgdG8gYXZvaWQgQUJJIGlzc3Vl
cy4gIFRoZSBrc19uZXh0IHBvaW50ZXIgaXMgcmV1c2VkIGFzIGEgcG9pbnRlciB0byB0aGUKKyAq
IGludGVybmFsIGRhdGEgaGFuZGxlLgorICovCitzdHJ1Y3QgbWFsbG9jX3R5cGUgeworCXN0cnVj
dCBtYWxsb2NfdHlwZSAqa3NfbmV4dDsJLyogTmV4dCBpbiBnbG9iYWwgY2hhaW4uICovCisJdV9s
b25nCQkgX2tzX21lbXVzZTsJLyogTm8gbG9uZ2VyIHVzZWQuICovCisJdV9sb25nCQkgX2tzX3Np
emU7CS8qIE5vIGxvbmdlciB1c2VkLiAqLworCXVfbG9uZwkJIF9rc19pbnVzZTsJLyogTm8gbG9u
Z2VyIHVzZWQuICovCisJdWludDY0X3QJIF9rc19jYWxsczsJLyogTm8gbG9uZ2VyIHVzZWQuICov
CisJdV9sb25nCQkgX2tzX21heHVzZWQ7CS8qIE5vIGxvbmdlciB1c2VkLiAqLworCXVfbG9uZwkJ
IGtzX21hZ2ljOwkvKiBEZXRlY3QgcHJvZ3JhbW1lciBlcnJvci4gKi8KKwljb25zdCBjaGFyCSpr
c19zaG9ydGRlc2M7CS8qIFByaW50YWJsZSB0eXBlIG5hbWUuICovCisKKwkvKgorCSAqIHN0cnVj
dCBtYWxsb2NfdHlwZSB3YXMgdGVybWluYXRlZCB3aXRoIGEgc3RydWN0IG10eCwgd2hpY2ggaXMg
bm8KKwkgKiBsb25nZXIgcmVxdWlyZWQuICBGb3IgQUJJIHJlYXNvbnMsIGNvbnRpbnVlIHRvIGZs
ZXNoIG91dCB0aGUgZnVsbAorCSAqIHNpemUgb2YgdGhlIG9sZCBzdHJ1Y3R1cmUsIGJ1dCByZXVz
ZSB0aGUgX2xvX2NsYXNzIGZpZWxkIGZvciBvdXIKKwkgKiBpbnRlcm5hbCBkYXRhIGhhbmRsZS4K
KwkgKi8KKwl2b2lkCQkqa3NfaGFuZGxlOwkvKiBQcml2LiBkYXRhLCB3YXMgbG9fY2xhc3MuICov
CisJY29uc3QgY2hhcgkqX2xvX25hbWU7CisJY29uc3QgY2hhcgkqX2xvX3R5cGU7CisJdV9pbnQJ
CSBfbG9fZmxhZ3M7CisJdm9pZAkJKl9sb19saXN0X25leHQ7CisJc3RydWN0IHdpdG5lc3MJKl9s
b193aXRuZXNzOworCXVpbnRwdHJfdAkgX210eF9sb2NrOworCXVfaW50CQkgX210eF9yZWN1cnNl
OworfTsKKworLyoKKyAqIFN0YXRpc3RpY3Mgc3RydWN0dXJlIGhlYWRlcnMgZm9yIHVzZXIgc3Bh
Y2UuICBUaGUga2Vybi5tYWxsb2Mgc3lzY3RsCisgKiBleHBvc2VzIGEgc3RydWN0dXJlIHN0cmVh
bSBjb25zaXN0aW5nIG9mIGEgc3RyZWFtIGhlYWRlciwgdGhlbiBhIHNlcmllcyBvZgorICogbWFs
bG9jIHR5cGUgaGVhZGVycyBhbmQgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzIChxdWFudGl0eSBtYXhj
cHVzKS4gIEZvcgorICogY29udmVuaWVuY2UsIHRoZSBrZXJuZWwgd2lsbCBwcm92aWRlIHRoZSBj
dXJyZW50IHZhbHVlIG9mIG1heGNwdXMgYXQgdGhlCisgKiBoZWFkIG9mIHRoZSBzdHJlYW0uCisg
Ki8KKyNkZWZpbmUJTUFMTE9DX1RZUEVfU1RSRUFNX1ZFUlNJT04JMHgwMDAwMDAwMQorc3RydWN0
IG1hbGxvY190eXBlX3N0cmVhbV9oZWFkZXIgeworCXVpbnQzMl90CW10c2hfdmVyc2lvbjsJLyog
U3RyZWFtIGZvcm1hdCB2ZXJzaW9uLiAqLworCXVpbnQzMl90CW10c2hfbWF4Y3B1czsJLyogVmFs
dWUgb2YgTUFYQ1BVIGZvciBzdHJlYW0uICovCisJdWludDMyX3QJbXRzaF9jb3VudDsJLyogTnVt
YmVyIG9mIHJlY29yZHMuICovCisJdWludDMyX3QJX210c2hfcGFkOwkvKiBQYWQvcmVzZXJ2ZWQg
ZmllbGQuICovCit9OworCisjZGVmaW5lCU1BTExPQ19NQVhfTkFNRQkzMgorc3RydWN0IG1hbGxv
Y190eXBlX2hlYWRlciB7CisJY2hhcgkJCQltdGhfbmFtZVtNQUxMT0NfTUFYX05BTUVdOworfTsK
KworLyogX19Vc2Vyc3BhY2VfXworTm90aWNlIHRoYXQgYXQgcGxhY2VzIGl0IHVzZXMgaWZkZWYg
X0tFUk5FTC4gVGhhdCBsaW5lIGNhbm5vdCBiZQorcmVtb3ZlZCBiZWNhdXNlIGl0IGNhdXNlcyBj
b25mbGljdHMgd2l0aCBtYWxsb2MgZGVmaW5pdGlvbiBpbgorL3Vzci9pbmNsdWRlL21hbGxvYy5o
LCB3aGljaCBlc3NlbnRpYWxseSBzYXlzIHRoYXQgbWFsbG9jLmggaGFzCitiZWVuIG92ZXJyaWRk
ZW4gYnkgc3RkbGliLmguIFdlIHdpbGwgbmVlZCB0byB1c2UgbmFtZXMgbGlrZQordXNlcl9tYWxs
b2MuaCBmb3IgaXNvbGF0aW5nIGtlcm5lbCBpbnRlcmZhY2UgaGVhZGVycy4gdXNpbmcKK29yaWdp
bmFsIG5hbWVzIGxpa2UgbWFsbG9jLmggaW4gYSB1c2VyX2luY2x1ZGUgaGVhZGVyIGNhbiBiZQor
Y29uZnVzaW5nLCBBbGwgdXNlcnNwYWNlIGhlYWRlciBmaWxlcyBhcmUgYmVpbmcgcGxhY2VkIGlu
IC4vdXNlcl9pbmNsdWRlCitCZXR0ZXIgc3RpbGwgdG8gcmVtb3ZlIGZyb20gdXNlcl9pbmNsdWRl
LmggYWxsIGlycmVsZXZhbnQgY29kZSBzdWNoCithcyB0aGF0IGluIHRoZSBibG9jayBzdGFydGlu
ZyB3aXRoICNpZmRlZiBfS0VSTkVMLiBJIGFtIG9ubHkgbGVhdmluZworaXQgaW4gZm9yIHRoZSB0
aW1lIGJlaW5nIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW4gdGhpcyBmaWxlCit0aGF0
IGtlcm5lbCB1c2VzLgorCitTdGFydCBjb3B5OiBDb3BpZWQgY29kZSBmb3IgX19Vc2Vyc3BhY2Vf
XyAqLworI2RlZmluZQlNQUxMT0NfREVGSU5FKHR5cGUsIHNob3J0ZGVzYywgbG9uZ2Rlc2MpCQkJ
XAorCXN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdID0gewkJCQkJXAorCQl7IE5VTEwsIDAsIDAs
IDAsIDAsIDAsIE1fTUFHSUMsIHNob3J0ZGVzYywgTlVMTCwgTlVMTCwJXAorCQkgICAgTlVMTCwg
MCwgTlVMTCwgTlVMTCwgMCwgMCB9CQkJCVwKKwl9CisKKy8qIFJlbW92ZWQgImV4dGVybiIgaW4g
X19Vc2Vyc3BhY2VfXyBjb2RlICovCisvKiBJZiB3ZSBuZWVkIHRvIHVzZSBNQUxMT0NfREVDTEFS
RSBiZWZvcmUgdXNpbmcgTUFMTE9DIHRoZW4KKyAgIHdlIGhhdmUgdG8gcmVtb3ZlIGV4dGVybi4K
KyAgICAgSW4gL3Vzci9pbmNsdWRlL3N5cy9tYWxsb2MuaCB0aGVyZSBpcyB0aGlzIGRlZmluaXRp
b246CisgICAgICNkZWZpbmUgICAgTUFMTE9DX0RFQ0xBUkUodHlwZSkgXAorICAgICAgICBleHRl
cm4gc3RydWN0IG1hbGxvY190eXBlIHR5cGVbMV0KKyAgICAgYW5kIGxvYWRlciBpcyB1bmFibGUg
dG8gZmluZCB0aGUgZXh0ZXJuIG1hbGxvY190eXBlIGJlY2F1c2UKKyAgICAgaXQgbWF5IGJlIGRl
ZmluZWQgaW4gb25lIG9mIGtlcm5lbCBvYmplY3QgZmlsZXMuCisgICAgIEl0IHNlZW1zIHRoYXQg
TUFMTE9DX0RFQ0xBUkUgYW5kIE1BTExPQ19ERUZJTkUgY2Fubm90IGJlIHVzZWQgYXQKKyAgICAg
dGhlIHNhbWUgdGltZSBmb3Igc2FtZSAidHlwZSIgdmFyaWFibGUuIEFsc28sIGluIFJhbmRhbGwn
cyBhcmNoaXRlY3R1cmUKKyAgICAgZG9jdW1lbnQsIHdoZXJlIGl0IHNwZWNpZmllcyBPL1Mgc3Bl
Y2lmaWMgbWFjcm9zIGFuZCBmdW5jdGlvbnMsIGl0IHNheXMKKyAgICAgdGhhdCB0aGUgbmFtZSBp
biBTQ1RQX01BTExPQyBkb2VzIG5vdCBoYXZlIHRvIGJlIHVzZWQuCisqLworI2RlZmluZQlNQUxM
T0NfREVDTEFSRSh0eXBlKSBcCisJZXh0ZXJuIHN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdCisK
KyNkZWZpbmUJRlJFRShhZGRyLCB0eXBlKSBmcmVlKChhZGRyKSkKKworLyogY2hhbmdlZCBkZWZp
bml0aW9ucyBvZiBNQUxMT0MgYW5kIEZSRUUgKi8KKy8qIFVzaW5nIG1lbXNldCBpZiBmbGFnIE1f
WkVSTyBpcyBzcGVjaWZpZWQuIFRvZG86IE1fV0FJVE9LIGFuZCBNX05PV0FJVCAqLworI2RlZmlu
ZQlNQUxMT0Moc3BhY2UsIGNhc3QsIHNpemUsIHR5cGUsIGZsYWdzKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICgoc3BhY2UpID0gKGNhc3QpbWFsbG9jKCh1X2xvbmcpKHNpemUpKSk7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsJCQkJCQkJCVwKKyAgICAgICAg
aWYgKGZsYWdzICYgTV9aRVJPKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisJICBtZW1zZXQoc3BhY2UsMCxzaXplKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwl9CQkJCQkJCQlcCisgICAgfSB3aGlsZSAoMCk7CisKKwor
LyogRW5kIGNvcHk6IENvcGllZCBjb2RlIGZvciBfX1VzZXJzcGFjZV9fICovCisKKyNpZiAwCisj
aWZkZWYgX0tFUk5FTAorI2RlZmluZQlNQUxMT0NfREVGSU5FKHR5cGUsIHNob3J0ZGVzYywgbG9u
Z2Rlc2MpCQkJXAorCXN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdID0gewkJCQkJXAorCQl7IE5V
TEwsIDAsIDAsIDAsIDAsIDAsIE1fTUFHSUMsIHNob3J0ZGVzYywgTlVMTCwgTlVMTCwJXAorCQkg
ICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwgMCB9CQkJCVwKKwl9OwkJCQkJCQkJXAorCVNZU0lO
SVQodHlwZSMjX2luaXQsIFNJX1NVQl9LTUVNLCBTSV9PUkRFUl9TRUNPTkQsIG1hbGxvY19pbml0
LAlcCisJICAgIHR5cGUpOwkJCQkJCQlcCisJU1lTVU5JTklUKHR5cGUjI191bmluaXQsIFNJX1NV
Ql9LTUVNLCBTSV9PUkRFUl9BTlksCQlcCisJICAgIG1hbGxvY191bmluaXQsIHR5cGUpCisKKwor
I2RlZmluZQlNQUxMT0NfREVDTEFSRSh0eXBlKSBcCisJZXh0ZXJuIHN0cnVjdCBtYWxsb2NfdHlw
ZSB0eXBlWzFdCisKK01BTExPQ19ERUNMQVJFKE1fQ0FDSEUpOworTUFMTE9DX0RFQ0xBUkUoTV9E
RVZCVUYpOworTUFMTE9DX0RFQ0xBUkUoTV9URU1QKTsKKworTUFMTE9DX0RFQ0xBUkUoTV9JUDZP
UFQpOyAvKiBmb3IgSU5FVDYgKi8KK01BTExPQ19ERUNMQVJFKE1fSVA2TkRQKTsgLyogZm9yIElO
RVQ2ICovCisKKy8qCisgKiBEZXByZWNhdGVkIG1hY3JvIHZlcnNpb25zIG9mIG5vdC1xdWl0ZS1t
YWxsb2MoKSBhbmQgZnJlZSgpLgorICovCisjZGVmaW5lCU1BTExPQyhzcGFjZSwgY2FzdCwgc2l6
ZSwgdHlwZSwgZmxhZ3MpIFwKKwkoKHNwYWNlKSA9IChjYXN0KW1hbGxvYygodV9sb25nKShzaXpl
KSwgKHR5cGUpLCAoZmxhZ3MpKSkKKyNkZWZpbmUJRlJFRShhZGRyLCB0eXBlKSBmcmVlKChhZGRy
KSwgKHR5cGUpKQorCisvKgorICogWFhYIHRoaXMgc2hvdWxkIGJlIGRlY2xhcmVkIGluIDxzeXMv
dWlvLmg+LCBidXQgdGhhdCB0ZW5kcyB0byBmYWlsCisgKiBiZWNhdXNlIDxzeXMvdWlvLmg+IGlz
IGluY2x1ZGVkIGluIGEgaGVhZGVyIGJlZm9yZSB0aGUgc291cmNlIGZpbGUKKyAqIGhhcyBhIGNo
YW5jZSB0byBpbmNsdWRlIDxzeXMvbWFsbG9jLmg+IHRvIGdldCBNQUxMT0NfREVDTEFSRSgpIGRl
ZmluZWQuCisgKi8KK01BTExPQ19ERUNMQVJFKE1fSU9WKTsKKworZXh0ZXJuIHN0cnVjdCBtdHgg
bWFsbG9jX210eDsKKworLyogWFhYIHN0cnVjdCBtYWxsb2NfdHlwZSBpcyB1bnVzZWQgZm9yIGNv
bnRpZyooKS4gKi8KK3ZvaWQJY29udGlnZnJlZSh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNp
emUsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSk7Cit2b2lkCSpjb250aWdtYWxsb2ModW5zaWdu
ZWQgbG9uZyBzaXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIGludCBmbGFncywKKwkgICAg
dm1fcGFkZHJfdCBsb3csIHZtX3BhZGRyX3QgaGlnaCwgdW5zaWduZWQgbG9uZyBhbGlnbm1lbnQs
CisJICAgIHVuc2lnbmVkIGxvbmcgYm91bmRhcnkpOwordm9pZAlmcmVlKHZvaWQgKmFkZHIsIHN0
cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSk7Cit2b2lkCSptYWxsb2ModW5zaWduZWQgbG9uZyBzaXpl
LCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIGludCBmbGFncyk7Cit2b2lkCW1hbGxvY19pbml0
KHZvaWQgKik7CitpbnQJbWFsbG9jX2xhc3RfZmFpbCh2b2lkKTsKK3ZvaWQJbWFsbG9jX3R5cGVf
YWxsb2NhdGVkKHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdW5zaWduZWQgbG9uZyBzaXplKTsK
K3ZvaWQJbWFsbG9jX3R5cGVfZnJlZWQoc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1bnNpZ25l
ZCBsb25nIHNpemUpOwordm9pZAltYWxsb2NfdW5pbml0KHZvaWQgKik7Cit2b2lkCSpyZWFsbG9j
KHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IG1hbGxvY190eXBlICp0eXBl
LAorCSAgICBpbnQgZmxhZ3MpOwordm9pZAkqcmVhbGxvY2Yodm9pZCAqYWRkciwgdW5zaWduZWQg
bG9uZyBzaXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsCisJICAgIGludCBmbGFncyk7CisK
KworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogIV9TWVNfTUFMTE9D
X0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5
YWU3NzVhZDhjMmU0OGM1MzkxLi5hNjNhODg5Yjc1MTNlYmM1OWM5Zjg2ZjZiNWU0MzMxZjlmYTVh
MjY1IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmMKQEAgLTAsMCArMSwxNTkzIEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk4OCwgMTk5MworICogICAgICBUaGUgUmVnZW50
cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9y
IHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAg
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKy8qCisgKiAgX19V
c2Vyc3BhY2VfXyB2ZXJzaW9uIG9mIC91c3Ivc3JjL3N5cy9rZXJuL2tlcm5fbWJ1Zi5jCisgKiAg
V2UgYXJlIGluaXRpYWxpemluZyB0d28gem9uZXMgZm9yIE1idWZzIGFuZCBDbHVzdGVycy4KKyAq
CisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5j
bHVkZSA8c3lzL3BhcmFtLmg+IFRoaXMgZGVmaW5lcyBNU0laRSAyNTYgKi8KKyNpZiAhZGVmaW5l
ZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisjaW5jbHVkZSAidW1lbS5oIgorI2VuZGlmCisjaW5j
bHVkZSAidXNlcl9tYnVmLmgiCisjaW5jbHVkZSAidXNlcl9lbnZpcm9ubWVudC5oIgorI2luY2x1
ZGUgInVzZXJfYXRvbWljLmgiCisjaW5jbHVkZSAibmV0aW5ldC9zY3RwX3BjYi5oIgorCitzdHJ1
Y3QgbWJzdGF0IG1ic3RhdDsKKyNkZWZpbmUgS0lQQ19NQVhfTElOS0hEUiAgICAgICAgNCAgICAg
ICAvKiBpbnQ6IG1heCBsZW5ndGggb2YgbGluayBoZWFkZXIgKHNlZSBzeXMvc3lzY2x0LmgpICov
CisjZGVmaW5lIEtJUENfTUFYX1BST1RPSERSCTUJLyogaW50OiBtYXggbGVuZ3RoIG9mIG5ldHdv
cmsgaGVhZGVyIChzZWUgc3lzL3N5c2NsdC5oKSovCitpbnQgbWF4X2xpbmtoZHIgPSBLSVBDX01B
WF9MSU5LSERSOworaW50IG1heF9wcm90b2hkciA9IEtJUENfTUFYX1BST1RPSERSOyAvKiBTaXpl
IG9mIGxhcmdlc3QgcHJvdG9jb2wgbGF5ZXIgaGVhZGVyLiAqLworCisvKgorICogWm9uZXMgZnJv
bSB3aGljaCB3ZSBhbGxvY2F0ZS4KKyAqLworc2N0cF96b25lX3QJem9uZV9tYnVmOworc2N0cF96
b25lX3QJem9uZV9jbHVzdDsKK3NjdHBfem9uZV90CXpvbmVfZXh0X3JlZmNudDsKKworLyogX19V
c2Vyc3BhY2VfXyBjbHVzdF9tYl9hcmdzIHdpbGwgYmUgcGFzc2VkIGFzIGNhbGxiYWNrIGRhdGEg
dG8gbWJfY3Rvcl9jbHVzdAorICogYW5kIG1iX2R0b3JfY2x1c3QuCisgKiBOb3RlOiBJIGhhZCB0
byB1c2Ugc3RydWN0IGNsdXN0X2FyZ3MgYXMgYW4gZW5jYXBzdWxhdGlvbiBmb3IgYW4gbWJ1ZiBw
b2ludGVyLgorICogc3RydWN0IG1idWYgKiBjbHVzdF9tYl9hcmdzOyBkb2VzIG5vdCB3b3JrLgor
ICovCitzdHJ1Y3QgY2x1c3RfYXJncyBjbHVzdF9tYl9hcmdzOworCisKKy8qIF9fVXNlcnNwYWNl
X18KKyAqIExvY2FsIHByb3RvdHlwZXMuCisgKi8KK3N0YXRpYyBpbnQJbWJfY3Rvcl9tYnVmKHZv
aWQgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludCAgICAgIG1iX2N0b3JfY2x1c3Qodm9pZCAq
LCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAltYl9kdG9yX21idWYodm9pZCAqLCAgdm9pZCAq
KTsKK3N0YXRpYyB2b2lkCW1iX2R0b3JfY2x1c3Qodm9pZCAqLCB2b2lkICopOworCisKKy8qKioq
KioqKioqKioqKioqKiBGdW5jdGlvbnMgdGFrZW4gZnJvbSB1c2VyX21idWYuaCAqKioqKioqKioq
KioqLworCitzdGF0aWMgaW50IG1idWZfY29uc3RydWN0b3JfZHVwKHN0cnVjdCBtYnVmICptLCBp
bnQgcGt0aGRyLCBzaG9ydCB0eXBlKQoreworCWludCBmbGFncyA9IHBrdGhkcjsKKwlpZiAodHlw
ZSA9PSBNVF9OT0lOSVQpCisJCXJldHVybiAoMCk7CisKKwltLT5tX25leHQgPSBOVUxMOworCW0t
Pm1fbmV4dHBrdCA9IE5VTEw7CisJbS0+bV9sZW4gPSAwOworCW0tPm1fZmxhZ3MgPSBmbGFnczsK
KwltLT5tX3R5cGUgPSB0eXBlOworCWlmIChmbGFncyAmIE1fUEtUSERSKSB7CisJCW0tPm1fZGF0
YSA9IG0tPm1fcGt0ZGF0OworCQltLT5tX3BrdGhkci5yY3ZpZiA9IE5VTEw7CisJCW0tPm1fcGt0
aGRyLmxlbiA9IDA7CisJCW0tPm1fcGt0aGRyLmhlYWRlciA9IE5VTEw7CisJCW0tPm1fcGt0aGRy
LmNzdW1fZmxhZ3MgPSAwOworCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAwOworCQltLT5tX3Br
dGhkci50c29fc2Vnc3ogPSAwOworCQltLT5tX3BrdGhkci5ldGhlcl92dGFnID0gMDsKKwkJU0xJ
U1RfSU5JVCgmbS0+bV9wa3RoZHIudGFncyk7CisJfSBlbHNlCisJCW0tPm1fZGF0YSA9IG0tPm1f
ZGF0OworCisJcmV0dXJuICgwKTsKK30KKworLyogX19Vc2Vyc3BhY2VfXyAqLworc3RydWN0IG1i
dWYgKgorbV9nZXQoaW50IGhvdywgc2hvcnQgdHlwZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbXJldDsK
KyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlzdHJ1Y3QgbWJfYXJncyBtYnVm
X21iX2FyZ3M7CisKKwkvKiBUaGUgZm9sbG93aW5nIHNldHRlciBmdW5jdGlvbiBpcyBub3QgeWV0
IGJlaW5nIGVuY2xvc2VkIHdpdGhpbgorCSAqICNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SIC0g
I2VuZGlmLCB1bnRpbCBJIGhhdmUgdGhvcm91Z2hseSB0ZXN0ZWQKKwkgKiBtYl9kdG9yX21idWYu
IFNlZSBjb21tZW50IHRoZXJlCisJICovCisJbWJ1Zl9tYl9hcmdzLmZsYWdzID0gMDsKKwltYnVm
X21iX2FyZ3MudHlwZSA9IHR5cGU7CisjZW5kaWYKKwkvKiBNYnVmIG1hc3RlciB6b25lLCB6b25l
X21idWYsIGhhcyBhbHJlYWR5IGJlZW4KKwkgKiBjcmVhdGVkIGluIG1idWZfaW5pdGlhbGl6ZSgp
ICovCisJbXJldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9tYnVmLCBzdHJ1Y3QgbWJ1Zik7CisjaWYg
ZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJbWJfY3Rvcl9tYnVmKG1yZXQsICZtYnVm
X21iX2FyZ3MsIDApOworI2VuZGlmCisJLyptcmV0ID0gICgoc3RydWN0IG1idWYgKil1bWVtX2Nh
Y2hlX2FsbG9jKHpvbmVfbWJ1ZiwgVU1FTV9ERUZBVUxUKSk7Ki8KKworCS8qIFRoZXJlIGFyZSBj
YXNlcyB3aGVuIGFuIG9iamVjdCBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgQ1BVJ3MKKwkgKiBs
b2FkZWQgbWFnYXppbmUgYW5kIGluIHRob3NlIGNhc2VzIHRoZSBvYmplY3QncyBjb25zdHJ1Y3Rv
ciBpcyBub3QgYXBwbGllZC4KKwkgKiBJZiB0aGF0IGlzIHRoZSBjYXNlLCB0aGVuIHdlIGFyZSBk
dXBsaWNhdGluZyBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiBoZXJlLAorCSAqIHNvIHRoYXQg
dGhlIG1idWYgaXMgcHJvcGVybHkgY29uc3RydWN0ZWQgYmVmb3JlIHJldHVybmluZyBpdC4KKwkg
Ki8KKwlpZiAobXJldCkgeworI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKKwkJaWYgKCEgKG1y
ZXQtPm1fdHlwZSA9PSB0eXBlKSApIHsKKwkJCW1idWZfY29uc3RydWN0b3JfZHVwKG1yZXQsIDAs
IHR5cGUpOworCQl9CisjZWxzZQorCQltYnVmX2NvbnN0cnVjdG9yX2R1cChtcmV0LCAwLCB0eXBl
KTsKKyNlbmRpZgorCisJfQorCXJldHVybiBtcmV0OworfQorCisKKy8qIF9fVXNlcnNwYWNlX18g
Ki8KK3N0cnVjdCBtYnVmICoKK21fZ2V0aGRyKGludCBob3csIHNob3J0IHR5cGUpCit7CisJc3Ry
dWN0IG1idWYgKm1yZXQ7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJc3Ry
dWN0IG1iX2FyZ3MgbWJ1Zl9tYl9hcmdzOworCisJLyogVGhlIGZvbGxvd2luZyBzZXR0ZXIgZnVu
Y3Rpb24gaXMgbm90IHlldCBiZWluZyBlbmNsb3NlZCB3aXRoaW4KKwkgKiAjaWYgVVNJTkdfTUJV
Rl9DT05TVFJVQ1RPUiAtICNlbmRpZiwgdW50aWwgSSBoYXZlIHRob3JvdWdobHkgdGVzdGVkCisJ
ICogbWJfZHRvcl9tYnVmLiBTZWUgY29tbWVudCB0aGVyZQorCSAqLworCW1idWZfbWJfYXJncy5m
bGFncyA9IE1fUEtUSERSOworCW1idWZfbWJfYXJncy50eXBlID0gdHlwZTsKKyNlbmRpZgorCW1y
ZXQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfbWJ1Ziwgc3RydWN0IG1idWYpOworI2lmIGRlZmluZWQo
U0NUUF9TSU1QTEVfQUxMT0NBVE9SKQorCW1iX2N0b3JfbWJ1ZihtcmV0LCAmbWJ1Zl9tYl9hcmdz
LCAwKTsKKyNlbmRpZgorCS8qbXJldCA9ICgoc3RydWN0IG1idWYgKil1bWVtX2NhY2hlX2FsbG9j
KHpvbmVfbWJ1ZiwgVU1FTV9ERUZBVUxUKSk7Ki8KKwkvKiBUaGVyZSBhcmUgY2FzZXMgd2hlbiBh
biBvYmplY3QgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IENQVSdzCisJICogbG9hZGVkIG1hZ2F6
aW5lIGFuZCBpbiB0aG9zZSBjYXNlcyB0aGUgb2JqZWN0J3MgY29uc3RydWN0b3IgaXMgbm90IGFw
cGxpZWQuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhlbiB3ZSBhcmUgZHVwbGljYXRpbmcg
Y29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gaGVyZSwKKwkgKiBzbyB0aGF0IHRoZSBtYnVmIGlz
IHByb3Blcmx5IGNvbnN0cnVjdGVkIGJlZm9yZSByZXR1cm5pbmcgaXQuCisJICovCisJaWYgKG1y
ZXQpIHsKKyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJCWlmICghICgobXJldC0+bV9mbGFn
cyAmIE1fUEtUSERSKSAmJiAobXJldC0+bV90eXBlID09IHR5cGUpKSApIHsKKwkJCW1idWZfY29u
c3RydWN0b3JfZHVwKG1yZXQsIE1fUEtUSERSLCB0eXBlKTsKKwkJfQorI2Vsc2UKKwkJbWJ1Zl9j
b25zdHJ1Y3Rvcl9kdXAobXJldCwgTV9QS1RIRFIsIHR5cGUpOworI2VuZGlmCisJfQorCXJldHVy
biBtcmV0OworfQorCisvKiBfX1VzZXJzcGFjZV9fICovCitzdHJ1Y3QgbWJ1ZiAqCittX2ZyZWUo
c3RydWN0IG1idWYgKm0pCit7CisKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IG0tPm1fbmV4dDsKKworCWlm
IChtLT5tX2ZsYWdzICYgTV9FWFQpCisJCW1iX2ZyZWVfZXh0KG0pOworCWVsc2UgaWYgKChtLT5t
X2ZsYWdzICYgTV9OT0ZSRUUpID09IDApIHsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9D
QVRPUikKKwkJbWJfZHRvcl9tYnVmKG0sIE5VTEwpOworI2VuZGlmCisJCVNDVFBfWk9ORV9GUkVF
KHpvbmVfbWJ1ZiwgbSk7CisJfQorCQkvKnVtZW1fY2FjaGVfZnJlZSh6b25lX21idWYsIG0pOyov
CisJcmV0dXJuIChuKTsKK30KKworCitzdGF0aWMgdm9pZAorY2x1c3RfY29uc3RydWN0b3JfZHVw
KGNhZGRyX3QgbV9jbHVzdCwgc3RydWN0IG1idWYqIG0pCit7CisJdV9pbnQgKnJlZmNudDsKKwlp
bnQgdHlwZSwgc2l6ZTsKKworCWlmIChtID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBB
c3NpZ25pbmcgY2x1c3RlciBvZiBNQ0xCWVRFUy4gVE9ETzogQWRkIGp1bWJvIGZyYW1lIGZ1bmN0
aW9uYWxpdHkgKi8KKwl0eXBlID0gRVhUX0NMVVNURVI7CisJc2l6ZSA9IE1DTEJZVEVTOworCisJ
cmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9yZWZjbnQsIHVfaW50KTsKKwkvKnJlZmNu
dCA9ICh1X2ludCAqKXVtZW1fY2FjaGVfYWxsb2Moem9uZV9leHRfcmVmY250LCBVTUVNX0RFRkFV
TFQpOyovCisjaWYgIWRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQorCWlmIChyZWZjbnQg
PT0gTlVMTCkgeworCQl1bWVtX3JlYXAoKTsKKwkJcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25l
X2V4dF9yZWZjbnQsIHVfaW50KTsKKwkJLypyZWZjbnQgPSAodV9pbnQgKil1bWVtX2NhY2hlX2Fs
bG9jKHpvbmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLworCX0KKyNlbmRpZgorCSpyZWZj
bnQgPSAxOworCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltX2NsdXN0OworCW0tPm1fZGF0
YSA9IG0tPm1fZXh0LmV4dF9idWY7CisJbS0+bV9mbGFncyB8PSBNX0VYVDsKKwltLT5tX2V4dC5l
eHRfZnJlZSA9IE5VTEw7CisJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOworCW0tPm1fZXh0LmV4
dF9zaXplID0gc2l6ZTsKKwltLT5tX2V4dC5leHRfdHlwZSA9IHR5cGU7CisJbS0+bV9leHQucmVm
X2NudCA9IHJlZmNudDsKKwlyZXR1cm47Cit9CisKKworLyogX19Vc2Vyc3BhY2VfXyAqLwordm9p
ZAorbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdykKK3sKKwljYWRkcl90IG1jbHVzdF9y
ZXQ7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJc3RydWN0IGNsdXN0X2Fy
Z3MgY2x1c3RfbWJfYXJnc19sOworI2VuZGlmCisJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6ICVwIG1idWYgYWxyZWFkeSBoYXMgY2x1c3Rl
clxuIiwgX19mdW5jX18sICh2b2lkICopbSk7CisJfQorCW0tPm1fZXh0LmV4dF9idWYgPSAoY2hh
ciAqKU5VTEw7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJY2x1c3RfbWJf
YXJnc19sLnBhcmVudF9tYnVmID0gbTsKKyNlbmRpZgorCW1jbHVzdF9yZXQgPSBTQ1RQX1pPTkVf
R0VUKHpvbmVfY2x1c3QsIGNoYXIpOworI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9S
KQorCW1iX2N0b3JfY2x1c3QobWNsdXN0X3JldCwgJmNsdXN0X21iX2FyZ3NfbCwgMCk7CisjZW5k
aWYKKwkvKm1jbHVzdF9yZXQgPSB1bWVtX2NhY2hlX2FsbG9jKHpvbmVfY2x1c3QsIFVNRU1fREVG
QVVMVCk7Ki8KKwkvKgorCSBPbiBhIGNsdXN0ZXIgYWxsb2NhdGlvbiBmYWlsdXJlLCBjYWxsIHVt
ZW1fcmVhcCgpIGFuZCByZXRyeS4KKwkgKi8KKworCWlmIChtY2x1c3RfcmV0ID09IE5VTEwpIHsK
KyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJLyoJbWNsdXN0X3JldCA9IFND
VFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7CisJCW1iX2N0b3JfY2x1c3QobWNsdXN0X3Jl
dCwgJmNsdXN0X21iX2FyZ3MsIDApOworI2Vsc2UqLworCQl1bWVtX3JlYXAoKTsKKwkJbWNsdXN0
X3JldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7CisjZW5kaWYKKwkJLyptY2x1
c3RfcmV0ID0gdW1lbV9jYWNoZV9hbGxvYyh6b25lX2NsdXN0LCBVTUVNX0RFRkFVTFQpOyovCisJ
CWlmIChOVUxMID09IG1jbHVzdF9yZXQpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJN
ZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNfXyk7CisJCX0KKwl9CisK
KyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJaWYgKChtLT5tX2V4dC5leHRfYnVmID09IE5V
TEwpKSB7CisJCWNsdXN0X2NvbnN0cnVjdG9yX2R1cChtY2x1c3RfcmV0LCBtKTsKKwl9CisjZWxz
ZQorCWNsdXN0X2NvbnN0cnVjdG9yX2R1cChtY2x1c3RfcmV0LCBtKTsKKyNlbmRpZgorfQorCitz
dHJ1Y3QgbWJ1ZiAqCittX2dldG0yKHN0cnVjdCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaG93LCBz
aG9ydCB0eXBlLCBpbnQgZmxhZ3MsIGludCBhbGxvbmVidWYpCit7CisJc3RydWN0IG1idWYgKm1i
LCAqbm0gPSBOVUxMLCAqbXRhaWwgPSBOVUxMOworCWludCBzaXplID0gMCwgbWJ1Zl90aHJlc2hv
bGQsIHNwYWNlX25lZWRlZCA9IGxlbjsKKworCUtBU1NFUlQobGVuID49IDAsICgiJXM6IGxlbiBp
cyA8IDAiLCBfX2Z1bmNfXykpOworCisJLyogVmFsaWRhdGUgZmxhZ3MuICovCisJZmxhZ3MgJj0g
KE1fUEtUSERSIHwgTV9FT1IpOworCisJLyogUGFja2V0IGhlYWRlciBtYnVmIG11c3QgYmUgZmly
c3QgaW4gY2hhaW4uICovCisJaWYgKChmbGFncyAmIE1fUEtUSERSKSAmJiBtICE9IE5VTEwpIHsK
KwkJZmxhZ3MgJj0gfk1fUEtUSERSOworCX0KKworCWlmIChhbGxvbmVidWYgPT0gMCkKKwkJbWJ1
Zl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQp
OworCWVsc2UKKwkJbWJ1Zl90aHJlc2hvbGQgPSAxOworCisJLyogTG9vcCBhbmQgYXBwZW5kIG1h
eGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwuICovCisJd2hpbGUgKGxlbiA+IDAp
IHsKKwkJaWYgKCghYWxsb25lYnVmICYmIGxlbiA+PSBNQ0xCWVRFUykgfHwgKGxlbiA+IChpbnQp
KCgobWJ1Zl90aHJlc2hvbGQgLSAxKSAqIE1MRU4pICsgTUhMRU4pKSkgeworCQkJbWIgPSBtX2dl
dGhkcihob3csIHR5cGUpOworCQkJTUNMR0VUKG1iLCBob3cpOworCQkJc2l6ZSA9IE1DTEJZVEVT
OworCQkJLy9TQ1RQX0JVRl9MRU4obWIpID0gTUNMQllURVM7CisJCX0gZWxzZSBpZiAoZmxhZ3Mg
JiBNX1BLVEhEUikgeworCQkJbWIgPSBtX2dldGhkcihob3csIHR5cGUpOworCQkJaWYgKGxlbiA8
IE1ITEVOKSB7CisJCQkJc2l6ZSA9IGxlbjsKKwkJCX0gZWxzZSB7CisJCQkJc2l6ZSA9IE1ITEVO
OworCQkJfQorCQl9IGVsc2UgeworCQkJbWIgPSBtX2dldChob3csIHR5cGUpOworCQkJaWYgKGxl
biA8IE1MRU4pIHsKKwkJCQlzaXplID0gbGVuOworCQkJfSBlbHNlIHsKKwkJCQlzaXplID0gTUxF
TjsKKwkJCX0KKwkJfQorCisJCS8qIEZhaWwgdGhlIHdob2xlIG9wZXJhdGlvbiBpZiBvbmUgbWJ1
ZiBjYW4ndCBiZSBhbGxvY2F0ZWQuICovCisJCWlmIChtYiA9PSBOVUxMKSB7CisJCQlpZiAobm0g
IT0gTlVMTCkKKwkJCQltX2ZyZWVtKG5tKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCQlp
ZiAoYWxsb25lYnVmICE9IDAgJiYgc2l6ZSA8IHNwYWNlX25lZWRlZCkgeworCQkJbV9mcmVlbSht
KTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCQkvKiBCb29rIGtlZXBpbmcuICovCisJCWxl
biAtPSBzaXplOworCQlpZiAobXRhaWwgIT0gTlVMTCkKKwkJCW10YWlsLT5tX25leHQgPSBtYjsK
KwkJZWxzZQorCQkJbm0gPSBtYjsKKwkJbXRhaWwgPSBtYjsKKwkJZmxhZ3MgJj0gfk1fUEtUSERS
OyAgICAgLyogT25seSB2YWxpZCBvbiB0aGUgZmlyc3QgbWJ1Zi4gKi8KKwl9CisJaWYgKGZsYWdz
ICYgTV9FT1IpIHsKKwkJbXRhaWwtPm1fZmxhZ3MgfD0gTV9FT1I7ICAvKiBPbmx5IHZhbGlkIG9u
IHRoZSBsYXN0IG1idWYuICovCisJfQorCisJLyogSWYgbWJ1ZiB3YXMgc3VwcGxpZWQsIGFwcGVu
ZCBuZXcgY2hhaW4gdG8gdGhlIGVuZCBvZiBpdC4gKi8KKwlpZiAobSAhPSBOVUxMKSB7CisJCWZv
ciAobXRhaWwgPSBtOyBtdGFpbC0+bV9uZXh0ICE9IE5VTEw7IG10YWlsID0gbXRhaWwtPm1fbmV4
dCk7CisJCW10YWlsLT5tX25leHQgPSBubTsKKwkJbXRhaWwtPm1fZmxhZ3MgJj0gfk1fRU9SOwor
CX0gZWxzZSB7CisJCW0gPSBubTsKKwl9CisKKwlyZXR1cm4gKG0pOworfQorCisvKgorICogQ29w
eSB0aGUgY29udGVudHMgb2YgdWlvIGludG8gYSBwcm9wZXJseSBzaXplZCBtYnVmIGNoYWluLgor
ICovCitzdHJ1Y3QgbWJ1ZiAqCittX3Vpb3RvbWJ1ZihzdHJ1Y3QgdWlvICp1aW8sIGludCBob3cs
IGludCBsZW4sIGludCBhbGlnbiwgaW50IGZsYWdzKQoreworCXN0cnVjdCBtYnVmICptLCAqbWI7
CisJaW50IGVycm9yLCBsZW5ndGg7CisJc3NpemVfdCB0b3RhbDsKKwlpbnQgcHJvZ3Jlc3MgPSAw
OworCisJLyoKKwkgKiBsZW4gY2FuIGJlIHplcm8gb3IgYW4gYXJiaXRyYXJ5IGxhcmdlIHZhbHVl
IGJvdW5kIGJ5CisJICogdGhlIHRvdGFsIGRhdGEgc3VwcGxpZWQgYnkgdGhlIHVpby4KKwkgKi8K
KwlpZiAobGVuID4gMCkKKwkJdG90YWwgPSBtaW4odWlvLT51aW9fcmVzaWQsIGxlbik7CisJZWxz
ZQorCQl0b3RhbCA9IHVpby0+dWlvX3Jlc2lkOworCS8qCisJICogVGhlIHNtYWxsZXN0IHVuaXQg
cmV0dXJuZWQgYnkgbV9nZXRtMigpIGlzIGEgc2luZ2xlIG1idWYKKwkgKiB3aXRoIHBrdGhkci4g
IFdlIGNhbid0IGFsaWduIHBhc3QgaXQuCisJICovCisJaWYgKGFsaWduID49IE1ITEVOKQorCQly
ZXR1cm4gKE5VTEwpOworCS8qCisJICogR2l2ZSB1cyB0aGUgZnVsbCBhbGxvY2F0aW9uIG9yIG5v
dGhpbmcuCisJICogSWYgbGVuIGlzIHplcm8gcmV0dXJuIHRoZSBzbWFsbGVzdCBlbXB0eSBtYnVm
LgorCSAqLworCW0gPSBtX2dldG0yKE5VTEwsIChpbnQpbWF4KHRvdGFsICsgYWxpZ24sIDEpLCBo
b3csIE1UX0RBVEEsIGZsYWdzLCAwKTsKKwlpZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwp
OworCW0tPm1fZGF0YSArPSBhbGlnbjsKKworCS8qIEZpbGwgYWxsIG1idWZzIHdpdGggdWlvIGRh
dGEgYW5kIHVwZGF0ZSBoZWFkZXIgaW5mb3JtYXRpb24uICovCisJZm9yIChtYiA9IG07IG1iICE9
IE5VTEw7IG1iID0gbWItPm1fbmV4dCkgeworCQlsZW5ndGggPSAoaW50KW1pbihNX1RSQUlMSU5H
U1BBQ0UobWIpLCB0b3RhbCAtIHByb2dyZXNzKTsKKwkJZXJyb3IgPSB1aW9tb3ZlKG10b2QobWIs
IHZvaWQgKiksIGxlbmd0aCwgdWlvKTsKKwkJaWYgKGVycm9yKSB7CisJCQltX2ZyZWVtKG0pOwor
CQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJCW1iLT5tX2xlbiA9IGxlbmd0aDsKKwkJcHJvZ3Jl
c3MgKz0gbGVuZ3RoOworCQlpZiAoZmxhZ3MgJiBNX1BLVEhEUikKKwkJCW0tPm1fcGt0aGRyLmxl
biArPSBsZW5ndGg7CisJfQorCUtBU1NFUlQocHJvZ3Jlc3MgPT0gdG90YWwsICgiJXM6IHByb2dy
ZXNzICE9IHRvdGFsIiwgX19mdW5jX18pKTsKKworCXJldHVybiAobSk7Cit9CisKK3VfaW50Citt
X2xlbmd0aChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVmICoqbGFzdCkKK3sKKwlzdHJ1Y3Qg
bWJ1ZiAqbTsKKwl1X2ludCBsZW47CisKKwlsZW4gPSAwOworCWZvciAobSA9IG0wOyBtICE9IE5V
TEw7IG0gPSBtLT5tX25leHQpIHsKKwkJbGVuICs9IG0tPm1fbGVuOworCQlpZiAobS0+bV9uZXh0
ID09IE5VTEwpCisJCQlicmVhazsKKwl9CisJaWYgKGxhc3QgIT0gTlVMTCkKKwkqbGFzdCA9IG07
CisJcmV0dXJuIChsZW4pOworfQorCitzdHJ1Y3QgbWJ1ZiAqCittX2xhc3Qoc3RydWN0IG1idWYg
Km0pCit7CisJd2hpbGUgKG0tPm1fbmV4dCkgeworCQltID0gbS0+bV9uZXh0OworCX0KKwlyZXR1
cm4gKG0pOworfQorCisvKgorICogVW5saW5rIGEgdGFnIGZyb20gdGhlIGxpc3Qgb2YgdGFncyBh
c3NvY2lhdGVkIHdpdGggYW4gbWJ1Zi4KKyAqLworc3RhdGljIF9faW5saW5lIHZvaWQKK21fdGFn
X3VubGluayhzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1fdGFnICp0KQoreworCisJU0xJU1RfUkVN
T1ZFKCZtLT5tX3BrdGhkci50YWdzLCB0LCBtX3RhZywgbV90YWdfbGluayk7Cit9CisKKy8qCisg
KiBSZWNsYWltIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSB0YWcuCisgKi8KK3N0YXRpYyBf
X2lubGluZSB2b2lkCittX3RhZ19mcmVlKHN0cnVjdCBtX3RhZyAqdCkKK3sKKworCSgqdC0+bV90
YWdfZnJlZSkodCk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGNvbnRlbnRzIG9mIGEgdGFnLiAg
Tm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZmlsbCBpbiB0aGUgZnJlZQorICogbWV0aG9kOyB0aGUg
Y2FsbGVyIGlzIGV4cGVjdGVkIHRvIGRvIHRoYXQuCisgKgorICogWFhYIHByb2JhYmx5IHNob3Vs
ZCBiZSBjYWxsZWQgbV90YWdfaW5pdCwgYnV0IHRoYXQgd2FzIGFscmVhZHkgdGFrZW4uCisgKi8K
K3N0YXRpYyBfX2lubGluZSB2b2lkCittX3RhZ19zZXR1cChzdHJ1Y3QgbV90YWcgKnQsIHVfaW50
MzJfdCBjb29raWUsIGludCB0eXBlLCBpbnQgbGVuKQoreworCisJdC0+bV90YWdfaWQgPSB0eXBl
OworCXQtPm1fdGFnX2xlbiA9IGxlbjsKKwl0LT5tX3RhZ19jb29raWUgPSBjb29raWU7Cit9CisK
Ky8qKioqKioqKioqKiogRW5kIGZ1bmN0aW9ucyBmcm9tIHVzZXJfbWJ1Zi5oICAqKioqKioqKioq
KioqKioqKiovCisKKworCisvKioqKioqKioqKioqIEVuZCBmdW5jdGlvbnMgdG8gc3Vic3RpdHV0
ZSB1bWVtX2NhY2hlX2FsbG9jIGFuZCB1bWVtX2NhY2hlX2ZyZWUgKioqKioqKioqKioqKiovCisK
K3ZvaWQKK21idWZfaW5pdGlhbGl6ZSh2b2lkICpkdW1teSkKK3sKKworCS8qCisJICogX19Vc2Vy
c3BhY2VfX0NvbmZpZ3VyZSBVTUEgem9uZXMgZm9yIE1idWZzIGFuZCBDbHVzdGVycy4KKwkgKiAo
VE9ETzogbV9nZXRjbCgpIC0gdXNpbmcgcGFja2V0IHNlY29uZGFyeSB6b25lKS4KKwkgKiBUaGVy
ZSBpcyBubyBwcm92aXNpb24gZm9yIHRyYXNoX2luaXQgYW5kIHRyYXNoX2ZpbmkgaW4gdW1lbS4K
KwkgKgorCSAqLworIC8qIHpvbmVfbWJ1ZiA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfTUVNX05B
TUUsIE1TSVpFLCAwLAorCQkJCW1iX2N0b3JfbWJ1ZiwgbWJfZHRvcl9tYnVmLCBOVUxMLAorCQkJ
CSZtYnVmX21iX2FyZ3MsCisJCQkJTlVMTCwgMCk7CisJem9uZV9tYnVmID0gdW1lbV9jYWNoZV9j
cmVhdGUoTUJVRl9NRU1fTkFNRSwgTVNJWkUsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5V
TEwsIDApOyovCisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJU0NUUF9aT05F
X0lOSVQoem9uZV9tYnVmLCBNQlVGX01FTV9OQU1FLCBNU0laRSwgMCk7CisjZWxzZQorCXpvbmVf
bWJ1ZiA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfTUVNX05BTUUsIE1TSVpFLCAwLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1iX2N0b3JfbWJ1ZiwgbWJfZHRvcl9tYnVmLCBOVUxM
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VVUxMLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsIDApOworI2VuZGlmCisJLyp6b25lX2V4dF9yZWZjbnQgPSB1
bWVtX2NhY2hlX2NyZWF0ZShNQlVGX0VYVFJFRkNOVF9NRU1fTkFNRSwgc2l6ZW9mKHVfaW50KSwg
MCwKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLAorCQkJCU5VTEwsCisJCQkJTlVMTCwgMCk7Ki8KKwlT
Q1RQX1pPTkVfSU5JVCh6b25lX2V4dF9yZWZjbnQsIE1CVUZfRVhUUkVGQ05UX01FTV9OQU1FLCBz
aXplb2YodV9pbnQpLCAwKTsKKworICAvKnpvbmVfY2x1c3QgPSB1bWVtX2NhY2hlX2NyZWF0ZShN
QlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAwLAorCQkJCSBtYl9jdG9yX2NsdXN0LCBt
Yl9kdG9yX2NsdXN0LCBOVUxMLAorCQkJCSAmY2x1c3RfbWJfYXJncywKKwkJCQkgTlVMTCwgMCk7
CisJem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSwg
TUNMQllURVMsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsMCk7Ki8KKyNpZiBkZWZp
bmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlTQ1RQX1pPTkVfSU5JVCh6b25lX2NsdXN0LCBN
QlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAwKTsKKyNlbHNlCisJem9uZV9jbHVzdCA9
IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSwgTUNMQllURVMsIDAsCisJ
CQkJCQkJCSAgIG1iX2N0b3JfY2x1c3QsIG1iX2R0b3JfY2x1c3QsIE5VTEwsCisJCQkJCQkJCSAg
ICZjbHVzdF9tYl9hcmdzLAorCQkJCQkJCQkgICBOVUxMLCAwKTsKKyNlbmRpZgorCisJLyogdW1h
X3ByZWFsbG9jKCkgZ29lcyBoZXJlLi4uICovCisKKwkvKiBfX1VzZXJzcGFjZV9fIEFkZCB1bWVt
X3JlYXAgaGVyZSBmb3IgbG93IG1lbW9yeSBzaXR1YXRpb24/CisJICoKKwkgKi8KKworCisJLyoK
KwkgKiBbUmVdc2V0IGNvdW50ZXJzIGFuZCBsb2NhbCBzdGF0aXN0aWNzIGtub2JzLgorCSAqCisJ
ICovCisKKwltYnN0YXQubV9tYnVmcyA9IDA7CisJbWJzdGF0Lm1fbWNsdXN0cyA9IDA7CisJbWJz
dGF0Lm1fZHJhaW4gPSAwOworCW1ic3RhdC5tX21zaXplID0gTVNJWkU7CisJbWJzdGF0Lm1fbWNs
Ynl0ZXMgPSBNQ0xCWVRFUzsKKwltYnN0YXQubV9taW5jbHNpemUgPSBNSU5DTFNJWkU7CisJbWJz
dGF0Lm1fbWxlbiA9IE1MRU47CisJbWJzdGF0Lm1fbWhsZW4gPSBNSExFTjsKKwltYnN0YXQubV9u
dW10eXBlcyA9IE1UX05UWVBFUzsKKworCW1ic3RhdC5tX21jZmFpbCA9IG1ic3RhdC5tX21wZmFp
bCA9IDA7CisJbWJzdGF0LnNmX2lvY250ID0gMDsKKwltYnN0YXQuc2ZfYWxsb2N3YWl0ID0gbWJz
dGF0LnNmX2FsbG9jZmFpbCA9IDA7CisKK30KKworCisKKy8qCisgKiBfX1VzZXJzcGFjZV9fCisg
KgorICogQ29uc3RydWN0b3IgZm9yIE1idWYgbWFzdGVyIHpvbmUuIFdlIGhhdmUgYSBkaWZmZXJl
bnQgY29uc3RydWN0b3IKKyAqIGZvciBhbGxvY2F0aW5nIHRoZSBjbHVzdGVyLgorICoKKyAqIFRo
ZSAnYXJnJyBwb2ludGVyIHBvaW50cyB0byBhIG1iX2FyZ3Mgc3RydWN0dXJlIHdoaWNoCisgKiBj
b250YWlucyBjYWxsLXNwZWNpZmljIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhl
CisgKiBtYnVmIGFsbG9jYXRpb24gQVBJLiAgU2VlIHVzZXJfbWJ1Zi5oLgorICoKKyAqIFRoZSBm
bGdzIHBhcmFtZXRlciBiZWxvdyBjYW4gYmUgVU1FTV9ERUZBVUxUIG9yIFVNRU1fTk9GQUlMIGRl
cGVuZGluZyBvbiB3aGF0CisgKiB3YXMgcGFzc2VkIHdoZW4gdW1lbV9jYWNoZV9hbGxvYyB3YXMg
Y2FsbGVkLgorICogVE9ETzogVXNlIFVNRU1fTk9GQUlMIGluIHVtZW1fY2FjaGVfYWxsb2MgYW5k
IGFsc28gZGVmaW5lIGEgZmFpbHVyZSBoYW5kbGVyCisgKiBhbmQgY2FsbCB1bWVtX25vZmFpbF9j
YWxsYmFjayhteV9mYWlsdXJlX2hhbmRsZXIpIGluIHRoZSBzdGFjayBpbml0aWFsaXphdGlvbiBy
b3V0aW5lcworICogVGhlIGFkdmFudGFnZSBvZiB1c2luZyBVTUVNX05PRkFJTCBpcyB0aGF0IHdl
IGRvbid0IGhhdmUgdG8gY2hlY2sgaWYgdW1lbV9jYWNoZV9hbGxvYworICogd2FzIHN1Y2Nlc3Nm
dWwgb3Igbm90LiBUaGUgZmFpbHVyZSBoYW5kbGVyIHdvdWxkIHRha2UgY2FyZSBvZiBpdCwgaWYg
d2UgdXNlIHRoZSBVTUVNX05PRkFJTAorICogZmxhZy4KKyAqCisgKiBOT1RFIFJlZjogaHR0cDov
L2RvY3Muc3VuLmNvbS9hcHAvZG9jcy9kb2MvODE5LTIyNDMvNm40aTA5OXAyP2w9ZW4mYT12aWV3
JnE9dW1lbV96YWxsb2MpCisgKiBUaGUgdW1lbV9ub2ZhaWxfY2FsbGJhY2soKSBmdW5jdGlvbiBz
ZXRzIHRoZSAqKnByb2Nlc3Mtd2lkZSoqIFVNRU1fTk9GQUlMIGNhbGxiYWNrLgorICogSXQgYWxz
byBtZW50aW9ucyB0aGF0IHVtZW1fbm9mYWlsX2NhbGxiYWNrIGlzIEV2b2x2aW5nLgorICoKKyAq
Lworc3RhdGljIGludAorbWJfY3Rvcl9tYnVmKHZvaWQgKm1lbSwgdm9pZCAqYXJnLCBpbnQgZmxn
cykKK3sKKyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJc3RydWN0IG1idWYgKm07CisJc3Ry
dWN0IG1iX2FyZ3MgKmFyZ3M7CisKKwlpbnQgZmxhZ3M7CisJc2hvcnQgdHlwZTsKKworCW0gPSAo
c3RydWN0IG1idWYgKiltZW07CisJYXJncyA9IChzdHJ1Y3QgbWJfYXJncyAqKWFyZzsKKwlmbGFn
cyA9IGFyZ3MtPmZsYWdzOworCXR5cGUgPSBhcmdzLT50eXBlOworCisJLyoKKwkgKiBUaGUgbWJ1
ZiBpcyBpbml0aWFsaXplZCBsYXRlci4KKwkgKgorCSAqLworCWlmICh0eXBlID09IE1UX05PSU5J
VCkKKwkJcmV0dXJuICgwKTsKKworCW0tPm1fbmV4dCA9IE5VTEw7CisJbS0+bV9uZXh0cGt0ID0g
TlVMTDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9mbGFncyA9IGZsYWdzOworCW0tPm1fdHlwZSA9
IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKKwkJbS0+bV9kYXRhID0gbS0+bV9wa3Rk
YXQ7CisJCW0tPm1fcGt0aGRyLnJjdmlmID0gTlVMTDsKKwkJbS0+bV9wa3RoZHIubGVuID0gMDsK
KwkJbS0+bV9wa3RoZHIuaGVhZGVyID0gTlVMTDsKKwkJbS0+bV9wa3RoZHIuY3N1bV9mbGFncyA9
IDA7CisJCW0tPm1fcGt0aGRyLmNzdW1fZGF0YSA9IDA7CisJCW0tPm1fcGt0aGRyLnRzb19zZWdz
eiA9IDA7CisJCW0tPm1fcGt0aGRyLmV0aGVyX3Z0YWcgPSAwOworCQlTTElTVF9JTklUKCZtLT5t
X3BrdGhkci50YWdzKTsKKwl9IGVsc2UKKwkJbS0+bV9kYXRhID0gbS0+bV9kYXQ7CisjZW5kaWYK
KwlyZXR1cm4gKDApOworfQorCisKKy8qCisgKiBfX1VzZXJzcGFjZV9fCisgKiBUaGUgTWJ1ZiBt
YXN0ZXIgem9uZSBkZXN0cnVjdG9yLgorICogVGhpcyB3b3VsZCBiZSBjYWxsZWQgaW4gcmVzcG9u
c2UgdG8gdW1lbV9jYWNoZV9kZXN0cm95CisgKiBUT0RPOiBSZWNoZWNrIGlmIHRoaXMgaXMgd2hh
dCB3ZSB3YW50IHRvIGRvIGluIHRoaXMgZGVzdHJ1Y3Rvci4KKyAqIChOb3RlOiB0aGUgbnVtYmVy
IG9mIHRpbWVzIG1iX2R0b3JfbWJ1ZiBpcyBjYWxsZWQgaXMgZXF1YWwgdG8gdGhlCisgKiBudW1i
ZXIgb2YgaW5kaXZpZHVhbCBtYnVmcyBhbGxvY2F0ZWQgZnJvbSB6b25lX21idWYuCisgKi8KK3N0
YXRpYyB2b2lkCittYl9kdG9yX21idWYodm9pZCAqbWVtLCB2b2lkICphcmcpCit7CisJc3RydWN0
IG1idWYgKm07CisKKwltID0gKHN0cnVjdCBtYnVmICopbWVtOworCWlmICgobS0+bV9mbGFncyAm
IE1fUEtUSERSKSAhPSAwKSB7CisJCW1fdGFnX2RlbGV0ZV9jaGFpbihtLCBOVUxMKTsKKwl9Cit9
CisKKworLyogX19Vc2Vyc3BhY2VfXworICogVGhlIENsdXN0ZXIgem9uZSBjb25zdHJ1Y3Rvci4K
KyAqCisgKiBIZXJlIHRoZSAnYXJnJyBwb2ludGVyIHBvaW50cyB0byB0aGUgTWJ1ZiB3aGljaCB3
ZQorICogYXJlIGNvbmZpZ3VyaW5nIGNsdXN0ZXIgc3RvcmFnZSBmb3IuICBJZiAnYXJnJyBpcwor
ICogZW1wdHkgd2UgYWxsb2NhdGUganVzdCB0aGUgY2x1c3RlciB3aXRob3V0IHNldHRpbmcKKyAq
IHRoZSBtYnVmIHRvIGl0LiAgU2VlIG1idWYuaC4KKyAqLworc3RhdGljIGludAorbWJfY3Rvcl9j
bHVzdCh2b2lkICptZW0sIHZvaWQgKmFyZywgaW50IGZsZ3MpCit7CisKKyNpZiBVU0lOR19NQlVG
X0NPTlNUUlVDVE9SCisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IGNsdXN0X2FyZ3MgKiBjbGE7
CisJdV9pbnQgKnJlZmNudDsKKwlpbnQgdHlwZSwgc2l6ZTsKKwlzY3RwX3pvbmVfdCB6b25lOwor
CisJLyogQXNzaWduaW5nIGNsdXN0ZXIgb2YgTUNMQllURVMuIFRPRE86IEFkZCBqdW1ibyBmcmFt
ZSBmdW5jdGlvbmFsaXR5ICovCisJdHlwZSA9IEVYVF9DTFVTVEVSOworCXpvbmUgPSB6b25lX2Ns
dXN0OworCXNpemUgPSBNQ0xCWVRFUzsKKworCWNsYSA9IChzdHJ1Y3QgY2x1c3RfYXJncyAqKWFy
ZzsKKwltID0gY2xhLT5wYXJlbnRfbWJ1ZjsKKworCXJlZmNudCA9IFNDVFBfWk9ORV9HRVQoem9u
ZV9leHRfcmVmY250LCB1X2ludCk7CisJLypyZWZjbnQgPSAodV9pbnQgKil1bWVtX2NhY2hlX2Fs
bG9jKHpvbmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLworCSpyZWZjbnQgPSAxOworCisJ
aWYgKG0gIT0gTlVMTCkgeworCQltLT5tX2V4dC5leHRfYnVmID0gKGNhZGRyX3QpbWVtOworCQlt
LT5tX2RhdGEgPSBtLT5tX2V4dC5leHRfYnVmOworCQltLT5tX2ZsYWdzIHw9IE1fRVhUOworCQlt
LT5tX2V4dC5leHRfZnJlZSA9IE5VTEw7CisJCW0tPm1fZXh0LmV4dF9hcmdzID0gTlVMTDsKKwkJ
bS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCQltLT5tX2V4dC5leHRfdHlwZSA9IHR5cGU7CisJ
CW0tPm1fZXh0LnJlZl9jbnQgPSByZWZjbnQ7CisJfQorI2VuZGlmCisJcmV0dXJuICgwKTsKK30K
KworLyogX19Vc2Vyc3BhY2VfXyAqLworc3RhdGljIHZvaWQKK21iX2R0b3JfY2x1c3Qodm9pZCAq
bWVtLCB2b2lkICphcmcpCit7CisKKyAgLyogbWVtIGlzIG9mIHR5cGUgY2FkZHJfdC4gIEluIHN5
cy90eXBlcy5oIHdlIGhhdmUgdHlwZWRlZiBjaGFyICogY2FkZHJfdDsgICovCisgIC8qIG1iX2R0
b3JfY2x1c3QgaXMgY2FsbGVkIGF0IHRpbWUgb2YgdW1lbV9jYWNoZV9kZXN0cm95KCkgKHRoZSBu
dW1iZXIgb2YgdGltZXMKKyAgICogbWJfZHRvcl9jbHVzdCBpcyBjYWxsZWQgaXMgZXF1YWwgdG8g
dGhlIG51bWJlciBvZiBpbmRpdmlkdWFsIG1idWZzIGFsbG9jYXRlZAorICAgKiBmcm9tIHpvbmVf
Y2x1c3QuIFNpbWlsYXJseSBmb3IgbWJfZHRvcl9tYnVmKS4KKyAgICogQXQgdGhpcyBwb2ludCB0
aGUgZm9sbG93aW5nOgorICAgKiAgc3RydWN0IG1idWYgKm07CisgICAqICAgbSA9IChzdHJ1Y3Qg
bWJ1ZiAqKWFyZzsKKyAgICogIGFzc2VydCAoKihtLT5tX2V4dC5yZWZfY250KSA9PSAwKTsgaXMg
bm90IG1lYW5pbmdmdWwgc2luY2UgIG0tPm1fZXh0LnJlZl9jbnQgPSBOVUxMOworICAgKiAgaGFz
IGJlZW4gZG9uZSBpbiBtYl9mcmVlX2V4dCgpLgorICAgKi8KKworfQorCisKKworCisvKiBVbmxp
bmsgYW5kIGZyZWUgYSBwYWNrZXQgdGFnLiAqLwordm9pZAorbV90YWdfZGVsZXRlKHN0cnVjdCBt
YnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCit7CisJS0FTU0VSVChtICYmIHQsICgibV90YWdfZGVs
ZXRlOiBudWxsIGFyZ3VtZW50LCBtICVwIHQgJXAiLCAodm9pZCAqKW0sICh2b2lkICopdCkpOwor
CW1fdGFnX3VubGluayhtLCB0KTsKKwltX3RhZ19mcmVlKHQpOworfQorCisKKy8qIFVubGluayBh
bmQgZnJlZSBhIHBhY2tldCB0YWcgY2hhaW4sIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gdGFnLiAqLwor
dm9pZAorbV90YWdfZGVsZXRlX2NoYWluKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQp
Cit7CisKKwlzdHJ1Y3QgbV90YWcgKnAsICpxOworCisJS0FTU0VSVChtLCAoIm1fdGFnX2RlbGV0
ZV9jaGFpbjogbnVsbCBtYnVmIikpOworCWlmICh0ICE9IE5VTEwpCisJCXAgPSB0OworCWVsc2UK
KwkJcCA9IFNMSVNUX0ZJUlNUKCZtLT5tX3BrdGhkci50YWdzKTsKKwlpZiAocCA9PSBOVUxMKQor
CQlyZXR1cm47CisJd2hpbGUgKChxID0gU0xJU1RfTkVYVChwLCBtX3RhZ19saW5rKSkgIT0gTlVM
TCkKKwkJbV90YWdfZGVsZXRlKG0sIHEpOworCW1fdGFnX2RlbGV0ZShtLCBwKTsKK30KKworI2lm
IDAKK3N0YXRpYyB2b2lkCitzY3RwX3ByaW50X21idWZfY2hhaW4oc3RydWN0IG1idWYgKm0pCit7
CisJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJQcmludGluZyBtYnVmIGNoYWluICVw
LlxuIiwgKHZvaWQgKiltKTsKKwlmb3IoOyBtOyBtPW0tPm1fbmV4dCkgeworCQlTQ1RQX0RFQlVH
X1VTUihTQ1RQX0RFQlVHX1VTUiwgIiVwOiBtX2xlbiA9ICVsZCwgbV90eXBlID0gJXgsIG1fbmV4
dCA9ICVwLlxuIiwgKHZvaWQgKiltLCBtLT5tX2xlbiwgbS0+bV90eXBlLCAodm9pZCAqKW0tPm1f
bmV4dCk7CisJCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCisJCQlTQ1RQX0RFQlVHX1VTUihTQ1RQ
X0RFQlVHX1VTUiwgIiVwOiBleHRlbmRfc2l6ZSA9ICVkLCBleHRlbmRfYnVmZmVyID0gJXAsIHJl
Zl9jbnQgPSAlZC5cbiIsICh2b2lkICopbSwgbS0+bV9leHQuZXh0X3NpemUsICh2b2lkICopbS0+
bV9leHQuZXh0X2J1ZiwgKihtLT5tX2V4dC5yZWZfY250KSk7CisJfQorfQorI2VuZGlmCisKKy8q
CisgKiBGcmVlIGFuIGVudGlyZSBjaGFpbiBvZiBtYnVmcyBhbmQgYXNzb2NpYXRlZCBleHRlcm5h
bCBidWZmZXJzLCBpZgorICogYXBwbGljYWJsZS4KKyAqLwordm9pZAorbV9mcmVlbShzdHJ1Y3Qg
bWJ1ZiAqbWIpCit7CisJd2hpbGUgKG1iICE9IE5VTEwpCisJCW1iID0gbV9mcmVlKG1iKTsKK30K
KworLyoKKyAqIF9fVXNlcnNwYWNlX18KKyAqIGNsZWFuIG1idWZzIHdpdGggTV9FWFQgc3RvcmFn
ZSBhdHRhY2hlZCB0byB0aGVtCisgKiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgMS4KKyAq
Lwordm9pZAorbWJfZnJlZV9leHQoc3RydWN0IG1idWYgKm0pCit7CisKKwlpbnQgc2tpcG1idWY7
CisKKwlLQVNTRVJUKChtLT5tX2ZsYWdzICYgTV9FWFQpID09IE1fRVhULCAoIiVzOiBNX0VYVCBu
b3Qgc2V0IiwgX19mdW5jX18pKTsKKwlLQVNTRVJUKG0tPm1fZXh0LnJlZl9jbnQgIT0gTlVMTCwg
KCIlczogcmVmX2NudCBub3Qgc2V0IiwgX19mdW5jX18pKTsKKworCS8qCisJICogY2hlY2sgaWYg
dGhlIGhlYWRlciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3RlcgorCSAqLworCXNraXBtYnVmID0g
KG0tPm1fZmxhZ3MgJiBNX05PRlJFRSk7CisKKwkvKiBGcmVlIHRoZSBleHRlcm5hbCBhdHRhY2hl
ZCBzdG9yYWdlIGlmIHRoaXMKKwkgKiBtYnVmIGlzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdC4K
KwkgKl9fVXNlcnNwYWNlX18gVE9ETzoganVtYm8gZnJhbWVzCisJICoKKwkqLworCS8qIE5PVEU6
IFdlIGhhZCB0aGUgc2FtZSBjb2RlIHRoYXQgU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNP
VU5UCisJICAgICAgICAgcmVkdWNlcyB0byBoZXJlIGJlZm9yZSBidXQgdGhlIElQSE9ORSBtYWxs
b2MgY29tbWl0IGhhZCBjaGFuZ2VkCisJICAgICAgICAgdGhpcyB0byBjb21wYXJlIHRvIDAgaW5z
dGVhZCBvZiAxIChzZWUgbmV4dCBsaW5lKS4gIFdoeT8KKwkgICAgICAgIC4gLi4gdGhpcyBjYXVz
ZWQgYSBodWdlIG1lbW9yeSBsZWFrIGluIExpbnV4LgorCSovCisjaWZkZWYgSVBIT05FCisJaWYg
KGF0b21pY19mZXRjaGFkZF9pbnQobS0+bV9leHQucmVmX2NudCwgLTEpID09IDApCisjZWxzZQor
CWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQobS0+bV9leHQucmVmX2NudCkp
CisjZW5kaWYKKwl7CisJCWlmIChtLT5tX2V4dC5leHRfdHlwZSA9PSBFWFRfQ0xVU1RFUil7Cisj
aWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJCQltYl9kdG9yX2NsdXN0KG0tPm1f
ZXh0LmV4dF9idWYsICZjbHVzdF9tYl9hcmdzKTsKKyNlbmRpZgorCQkJU0NUUF9aT05FX0ZSRUUo
em9uZV9jbHVzdCwgbS0+bV9leHQuZXh0X2J1Zik7CisJCQlTQ1RQX1pPTkVfRlJFRSh6b25lX2V4
dF9yZWZjbnQsICh1X2ludCopbS0+bV9leHQucmVmX2NudCk7CisJCQltLT5tX2V4dC5yZWZfY250
ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChza2lwbWJ1ZikKKwkJcmV0dXJuOworCisKKwkvKiBf
X1VzZXJzcGFjZV9fIEFsc28gZnJlZWluZyB0aGUgc3RvcmFnZSBmb3IgcmVmX2NudAorCSAqIEZy
ZWUgdGhpcyBtYnVmIGJhY2sgdG8gdGhlIG1idWYgem9uZSB3aXRoIGFsbCBtX2V4dAorCSAqIGlu
Zm9ybWF0aW9uIHB1cmdlZC4KKwkgKi8KKwltLT5tX2V4dC5leHRfYnVmID0gTlVMTDsKKwltLT5t
X2V4dC5leHRfZnJlZSA9IE5VTEw7CisJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOworCW0tPm1f
ZXh0LnJlZl9jbnQgPSBOVUxMOworCW0tPm1fZXh0LmV4dF9zaXplID0gMDsKKwltLT5tX2V4dC5l
eHRfdHlwZSA9IDA7CisJbS0+bV9mbGFncyAmPSB+TV9FWFQ7CisjaWYgZGVmaW5lZChTQ1RQX1NJ
TVBMRV9BTExPQ0FUT1IpCisJbWJfZHRvcl9tYnVmKG0sIE5VTEwpOworI2VuZGlmCisJU0NUUF9a
T05FX0ZSRUUoem9uZV9tYnVmLCBtKTsKKworCS8qdW1lbV9jYWNoZV9mcmVlKHpvbmVfbWJ1Ziwg
bSk7Ki8KK30KKworLyoKKyAqICJNb3ZlIiBtYnVmIHBrdGhkciBmcm9tICJmcm9tIiB0byAidG8i
LgorICogImZyb20iIG11c3QgaGF2ZSBNX1BLVEhEUiBzZXQsIGFuZCAidG8iIG11c3QgYmUgZW1w
dHkuCisgKi8KK3ZvaWQKK21fbW92ZV9wa3RoZHIoc3RydWN0IG1idWYgKnRvLCBzdHJ1Y3QgbWJ1
ZiAqZnJvbSkKK3sKKworCXRvLT5tX2ZsYWdzID0gKGZyb20tPm1fZmxhZ3MgJiBNX0NPUFlGTEFH
UykgfCAodG8tPm1fZmxhZ3MgJiBNX0VYVCk7CisJaWYgKCh0by0+bV9mbGFncyAmIE1fRVhUKSA9
PSAwKQorCQl0by0+bV9kYXRhID0gdG8tPm1fcGt0ZGF0OworCXRvLT5tX3BrdGhkciA9IGZyb20t
Pm1fcGt0aGRyOwkJLyogZXNwZWNpYWxseSB0YWdzICovCisJU0xJU1RfSU5JVCgmZnJvbS0+bV9w
a3RoZHIudGFncyk7CS8qIHB1cmdlIHRhZ3MgZnJvbSBzcmMgKi8KKwlmcm9tLT5tX2ZsYWdzICY9
IH5NX1BLVEhEUjsKK30KKworCisvKgorICogUmVhcmFuZ2UgYW4gbWJ1ZiBjaGFpbiBzbyB0aGF0
IGxlbiBieXRlcyBhcmUgY29udGlndW91cworICogYW5kIGluIHRoZSBkYXRhIGFyZWEgb2YgYW4g
bWJ1ZiAoc28gdGhhdCBtdG9kIGFuZCBkdG9tCisgKiB3aWxsIHdvcmsgZm9yIGEgc3RydWN0dXJl
IG9mIHNpemUgbGVuKS4gIFJldHVybnMgdGhlIHJlc3VsdGluZworICogbWJ1ZiBjaGFpbiBvbiBz
dWNjZXNzLCBmcmVlcyBpdCBhbmQgcmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCisgKiBJZiB0aGVy
ZSBpcyByb29tLCBpdCB3aWxsIGFkZCB1cCB0byBtYXhfcHJvdG9oZHItbGVuIGV4dHJhIGJ5dGVz
IHRvIHRoZQorICogY29udGlndW91cyByZWdpb24gaW4gYW4gYXR0ZW1wdCB0byBhdm9pZCBiZWlu
ZyBjYWxsZWQgbmV4dCB0aW1lLgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX3B1bGx1cChzdHJ1Y3Qg
bWJ1ZiAqbiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgY291bnQ7CisJaW50
IHNwYWNlOworCisJLyoKKwkgKiBJZiBmaXJzdCBtYnVmIGhhcyBubyBjbHVzdGVyLCBhbmQgaGFz
IHJvb20gZm9yIGxlbiBieXRlcworCSAqIHdpdGhvdXQgc2hpZnRpbmcgY3VycmVudCBkYXRhLCBw
dWxsdXAgaW50byBpdCwKKwkgKiBvdGhlcndpc2UgYWxsb2NhdGUgYSBuZXcgbWJ1ZiB0byBwcmVw
ZW5kIHRvIHRoZSBjaGFpbi4KKwkgKi8KKwlpZiAoKG4tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCAm
JgorCSAgICBuLT5tX2RhdGEgKyBsZW4gPCAmbi0+bV9kYXRbTUxFTl0gJiYgbi0+bV9uZXh0KSB7
CisJCWlmIChuLT5tX2xlbiA+PSBsZW4pCisJCQlyZXR1cm4gKG4pOworCQltID0gbjsKKwkJbiA9
IG4tPm1fbmV4dDsKKwkJbGVuIC09IG0tPm1fbGVuOworCX0gZWxzZSB7CisJCWlmIChsZW4gPiBN
SExFTikKKwkJCWdvdG8gYmFkOworCQlNR0VUKG0sIE1fTk9XQUlULCBuLT5tX3R5cGUpOworCQlp
ZiAobSA9PSBOVUxMKQorCQkJZ290byBiYWQ7CisJCW0tPm1fbGVuID0gMDsKKwkJaWYgKG4tPm1f
ZmxhZ3MgJiBNX1BLVEhEUikKKwkJCU1fTU9WRV9QS1RIRFIobSwgbik7CisJfQorCXNwYWNlID0g
KGludCkoJm0tPm1fZGF0W01MRU5dIC0gKG0tPm1fZGF0YSArIG0tPm1fbGVuKSk7CisJZG8gewor
CQljb3VudCA9IG1pbihtaW4obWF4KGxlbiwgbWF4X3Byb3RvaGRyKSwgc3BhY2UpLCBuLT5tX2xl
bik7CisJCW1lbWNweShtdG9kKG0sIGNhZGRyX3QpICsgbS0+bV9sZW4sbXRvZChuLCBjYWRkcl90
KSwgKHVfaW50KWNvdW50KTsKKwkJbGVuIC09IGNvdW50OworCQltLT5tX2xlbiArPSBjb3VudDsK
KwkJbi0+bV9sZW4gLT0gY291bnQ7CisJCXNwYWNlIC09IGNvdW50OworCQlpZiAobi0+bV9sZW4p
CisJCQluLT5tX2RhdGEgKz0gY291bnQ7CisJCWVsc2UKKwkJCW4gPSBtX2ZyZWUobik7CisJfSB3
aGlsZSAobGVuID4gMCAmJiBuKTsKKwlpZiAobGVuID4gMCkgeworCQkodm9pZCkgbV9mcmVlKG0p
OworCQlnb3RvIGJhZDsKKwl9CisJbS0+bV9uZXh0ID0gbjsKKwlyZXR1cm4gKG0pOworYmFkOgor
CW1fZnJlZW0obik7CisJbWJzdGF0Lm1fbXBmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVuY3ku
ICovCisJcmV0dXJuIChOVUxMKTsKK30KKworCitzdGF0aWMgc3RydWN0IG1idWYgKgorbV9kdXAx
KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgd2FpdCkKK3sKKwlzdHJ1Y3Qg
bWJ1ZiAqbiA9IE5VTEw7CisJaW50IGNvcHloZHI7CisKKwlpZiAobGVuID4gTUNMQllURVMpCisJ
CXJldHVybiBOVUxMOworCWlmIChvZmYgPT0gMCAmJiAobS0+bV9mbGFncyAmIE1fUEtUSERSKSAh
PSAwKQorCQljb3B5aGRyID0gMTsKKwllbHNlCisJCWNvcHloZHIgPSAwOworCWlmIChsZW4gPj0g
TUlOQ0xTSVpFKSB7CisJCWlmIChjb3B5aGRyID09IDEpIHsKKwkJCW1fY2xnZXQobiwgd2FpdCk7
IC8qIFRPRE86IGluY2x1ZGUgY29kZSBmb3IgY29weWluZyB0aGUgaGVhZGVyICovCisJCQltX2R1
cF9wa3RoZHIobiwgbSwgd2FpdCk7CisJCX0gZWxzZQorCQkJbV9jbGdldChuLCB3YWl0KTsKKwl9
IGVsc2UgeworCQlpZiAoY29weWhkciA9PSAxKQorCQkJbiA9IG1fZ2V0aGRyKHdhaXQsIG0tPm1f
dHlwZSk7CisJCWVsc2UKKwkJCW4gPSBtX2dldCh3YWl0LCBtLT5tX3R5cGUpOworCX0KKwlpZiAo
IW4pCisJCXJldHVybiBOVUxMOyAvKiBFTk9CVUZTICovCisKKwlpZiAoY29weWhkciAmJiAhbV9k
dXBfcGt0aGRyKG4sIG0sIHdhaXQpKSB7CisJCW1fZnJlZShuKTsKKwkJcmV0dXJuIE5VTEw7CisJ
fQorCW1fY29weWRhdGEobSwgb2ZmLCBsZW4sIG10b2QobiwgY2FkZHJfdCkpOworCW4tPm1fbGVu
ID0gbGVuOworCXJldHVybiBuOworfQorCisKKy8qIFRha2VuIGZyb20gc3lzL2tlcm4vdWlwY19t
YnVmMi5jICovCitzdHJ1Y3QgbWJ1ZiAqCittX3B1bGxkb3duKHN0cnVjdCBtYnVmICptLCBpbnQg
b2ZmLCBpbnQgbGVuLCBpbnQgKm9mZnApCit7CisJc3RydWN0IG1idWYgKm4sICpvOworCWludCBo
bGVuLCB0bGVuLCBvbGVuOworCWludCB3cml0YWJsZTsKKworCS8qIGNoZWNrIGludmFsaWQgYXJn
dW1lbnRzLiAqLworCUtBU1NFUlQobSwgKCJtID09IE5VTEwgaW4gbV9wdWxsZG93bigpIikpOwor
CWlmIChsZW4gPiBNQ0xCWVRFUykgeworCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gTlVMTDsgICAg
LyogaW1wb3NzaWJsZSAqLworCX0KKworI2lmZGVmIFBVTExET1dOX0RFQlVHCisJeworCQlzdHJ1
Y3QgbWJ1ZiAqdDsKKwkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJiZWZvcmU6Iik7
CisJCWZvciAodCA9IG07IHQ7IHQgPSB0LT5tX25leHQpCisJCQlTQ1RQX0RFQlVHX1VTUihTQ1RQ
X0RFQlVHX1VTUiwgIiAlZCIsIHQtPm1fbGVuKTsKKwkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJV
R19VU1IsICJcbiIpOworCX0KKyNlbmRpZgorCW4gPSBtOworCXdoaWxlIChuICE9IE5VTEwgJiYg
b2ZmID4gMCkgeworCQlpZiAobi0+bV9sZW4gPiBvZmYpCisJCQlicmVhazsKKwkJb2ZmIC09IG4t
Pm1fbGVuOworCQluID0gbi0+bV9uZXh0OworCX0KKwkvKiBiZSBzdXJlIHRvIHBvaW50IG5vbi1l
bXB0eSBtYnVmICovCisJd2hpbGUgKG4gIT0gTlVMTCAmJiBuLT5tX2xlbiA9PSAwKQorCQluID0g
bi0+bV9uZXh0OworCWlmICghbikgeworCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gTlVMTDsgICAg
LyogbWJ1ZiBjaGFpbiB0b28gc2hvcnQgKi8KKwl9CisKKwl3cml0YWJsZSA9IDA7CisJaWYgKChu
LT5tX2ZsYWdzICYgTV9FWFQpID09IDAgfHwKKwkgICAgKG4tPm1fZXh0LmV4dF90eXBlID09IEVY
VF9DTFVTVEVSICYmIE1fV1JJVEFCTEUobikpKQorCQl3cml0YWJsZSA9IDE7CisKKwkvKgorCSAq
IHRoZSB0YXJnZXQgZGF0YSBpcyBvbiA8biwgb2ZmPi4KKwkgKiBpZiB3ZSBnb3QgZW5vdWdoIGRh
dGEgb24gdGhlIG1idWYgIm4iLCB3ZSdyZSBkb25lLgorCSAqLworCWlmICgob2ZmID09IDAgfHwg
b2ZmcCkgJiYgbGVuIDw9IG4tPm1fbGVuIC0gb2ZmICYmIHdyaXRhYmxlKQorCQlnb3RvIG9rOwor
CisJLyoKKwkgKiB3aGVuIGxlbiA8PSBuLT5tX2xlbiAtIG9mZiBhbmQgb2ZmICE9IDAsIGl0IGlz
IGEgc3BlY2lhbCBjYXNlLgorCSAqIGxlbiBieXRlcyBmcm9tIDxuLCBvZmY+IHNpdHMgaW4gc2lu
Z2xlIG1idWYsIGJ1dCB0aGUgY2FsbGVyIGRvZXMKKwkgKiBub3QgbGlrZSB0aGUgc3RhcnRpbmcg
cG9zaXRpb24gKG9mZikuCisJICogY2hvcCB0aGUgY3VycmVudCBtYnVmIGludG8gdHdvIHBpZWNl
cywgc2V0IG9mZiB0byAwLgorCSAqLworCWlmIChsZW4gPD0gbi0+bV9sZW4gLSBvZmYpIHsKKwkJ
byA9IG1fZHVwMShuLCBvZmYsIG4tPm1fbGVuIC0gb2ZmLCBNX05PV0FJVCk7CisJCWlmIChvID09
IE5VTEwpIHsKKwkJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICov
CisJCX0KKwkJbi0+bV9sZW4gPSBvZmY7CisJCW8tPm1fbmV4dCA9IG4tPm1fbmV4dDsKKwkJbi0+
bV9uZXh0ID0gbzsKKwkJbiA9IG4tPm1fbmV4dDsKKwkJb2ZmID0gMDsKKwkJZ290byBvazsKKwl9
CisJLyoKKwkgKiB3ZSBuZWVkIHRvIHRha2UgaGxlbiBmcm9tIDxuLCBvZmY+IGFuZCB0bGVuIGZy
b20gPG4tPm1fbmV4dCwgMD4sCisJICogYW5kIGNvbnN0cnVjdCBjb250aWd1b3VzIG1idWYgd2l0
aCBtX2xlbiA9PSBsZW4uCisJICogbm90ZSB0aGF0IGhsZW4gKyB0bGVuID09IGxlbiwgYW5kIHRs
ZW4gPiAwLgorCSAqLworCWhsZW4gPSBuLT5tX2xlbiAtIG9mZjsKKwl0bGVuID0gbGVuIC0gaGxl
bjsKKworCS8qCisJICogZW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggdHJhaWxpbmcgZGF0YSBv
biBtYnVmIGNoYWluLgorCSAqIGlmIG5vdCwgd2UgY2FuIGRvIG5vdGhpbmcgYWJvdXQgdGhlIGNo
YWluLgorCSAqLworCW9sZW4gPSAwOworCWZvciAobyA9IG4tPm1fbmV4dDsgbyAhPSBOVUxMOyBv
ID0gby0+bV9uZXh0KQorCQlvbGVuICs9IG8tPm1fbGVuOworCWlmIChobGVuICsgb2xlbiA8IGxl
bikgeworCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBjaGFpbiB0b28g
c2hvcnQgKi8KKwl9CisKKwkvKgorCSAqIGVhc3kgY2FzZXMgZmlyc3QuCisJICogd2UgbmVlZCB0
byB1c2UgbV9jb3B5ZGF0YSgpIHRvIGdldCBkYXRhIGZyb20gPG4tPm1fbmV4dCwgMD4uCisJICov
CisJaWYgKChvZmYgPT0gMCB8fCBvZmZwKSAmJiBNX1RSQUlMSU5HU1BBQ0UobikgPj0gdGxlbgor
CSAgICAmJiB3cml0YWJsZSkgeworCQltX2NvcHlkYXRhKG4tPm1fbmV4dCwgMCwgdGxlbiwgbXRv
ZChuLCBjYWRkcl90KSArIG4tPm1fbGVuKTsKKwkJbi0+bV9sZW4gKz0gdGxlbjsKKwkJbV9hZGoo
bi0+bV9uZXh0LCB0bGVuKTsKKwkJZ290byBvazsKKwl9CisKKwlpZiAoKG9mZiA9PSAwIHx8IG9m
ZnApICYmIE1fTEVBRElOR1NQQUNFKG4tPm1fbmV4dCkgPj0gaGxlbgorCSAgICAmJiB3cml0YWJs
ZSkgeworCQluLT5tX25leHQtPm1fZGF0YSAtPSBobGVuOworCQluLT5tX25leHQtPm1fbGVuICs9
IGhsZW47CisJCW1lbWNweSggbXRvZChuLT5tX25leHQsIGNhZGRyX3QpLCBtdG9kKG4sIGNhZGRy
X3QpICsgb2ZmLGhsZW4pOworCQluLT5tX2xlbiAtPSBobGVuOworCQluID0gbi0+bV9uZXh0Owor
CQlvZmYgPSAwOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogbm93LCB3ZSBuZWVkIHRvIGRv
IHRoZSBoYXJkIHdheS4gIGRvbid0IG1fY29weSBhcyB0aGVyZSdzIG5vIHJvb20KKwkgKiBvbiBi
b3RoIGVuZC4KKwkgKi8KKwlpZiAobGVuID4gTUxFTikKKwkJbV9jbGdldChvLCBNX05PV0FJVCk7
CisJCS8qIG8gPSBtX2dldGNsKE1fTk9XQUlULCBtLT5tX3R5cGUsIDApOyovCisJZWxzZQorCQlv
ID0gbV9nZXQoTV9OT1dBSVQsIG0tPm1fdHlwZSk7CisJaWYgKCFvKSB7CisJCW1fZnJlZW0obSk7
CisJCXJldHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICovCisJfQorCS8qIGdldCBobGVuIGZyb20g
PG4sIG9mZj4gaW50byA8bywgMD4gKi8KKwlvLT5tX2xlbiA9IGhsZW47CisJbWVtY3B5KG10b2Qo
bywgY2FkZHJfdCksIG10b2QobiwgY2FkZHJfdCkgKyBvZmYsIGhsZW4pOworCW4tPm1fbGVuIC09
IGhsZW47CisJLyogZ2V0IHRsZW4gZnJvbSA8bi0+bV9uZXh0LCAwPiBpbnRvIDxvLCBobGVuPiAq
LworCW1fY29weWRhdGEobi0+bV9uZXh0LCAwLCB0bGVuLCBtdG9kKG8sIGNhZGRyX3QpICsgby0+
bV9sZW4pOworCW8tPm1fbGVuICs9IHRsZW47CisJbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKKwlv
LT5tX25leHQgPSBuLT5tX25leHQ7CisJbi0+bV9uZXh0ID0gbzsKKwluID0gbzsKKwlvZmYgPSAw
Oworb2s6CisjaWZkZWYgUFVMTERPV05fREVCVUcKKwl7CisJCXN0cnVjdCBtYnVmICp0OworCQlT
Q1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgImFmdGVyOiIpOworCQlmb3IgKHQgPSBtOyB0
OyB0ID0gdC0+bV9uZXh0KQorCQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICIlYyVk
IiwgdCA9PSBuID8gJyonIDogJyAnLCB0LT5tX2xlbik7CisJCVNDVFBfREVCVUdfVVNSKFNDVFBf
REVCVUdfVVNSLCAiIChvZmY9JWQpXG4iLCBvZmYpOworCX0KKyNlbmRpZgorCWlmIChvZmZwKQor
CQkqb2ZmcCA9IG9mZjsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIEF0dGFjaCB0aGUgdGhlIGNs
dXN0ZXIgZnJvbSAqbSB0byAqbiwgc2V0IHVwIG1fZXh0IGluICpuCisgKiBhbmQgYnVtcCB0aGUg
cmVmY291bnQgb2YgdGhlIGNsdXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lkCittYl9kdXBjbChzdHJ1
Y3QgbWJ1ZiAqbiwgc3RydWN0IG1idWYgKm0pCit7CisJS0FTU0VSVCgobS0+bV9mbGFncyAmIE1f
RVhUKSA9PSBNX0VYVCwgKCIlczogTV9FWFQgbm90IHNldCIsIF9fZnVuY19fKSk7CisJS0FTU0VS
VChtLT5tX2V4dC5yZWZfY250ICE9IE5VTEwsICgiJXM6IHJlZl9jbnQgbm90IHNldCIsIF9fZnVu
Y19fKSk7CisJS0FTU0VSVCgobi0+bV9mbGFncyAmIE1fRVhUKSA9PSAwLCAoIiVzOiBNX0VYVCBz
ZXQiLCBfX2Z1bmNfXykpOworCisJaWYgKCoobS0+bV9leHQucmVmX2NudCkgPT0gMSkKKwkJKiht
LT5tX2V4dC5yZWZfY250KSArPSAxOworCWVsc2UKKwkJYXRvbWljX2FkZF9pbnQobS0+bV9leHQu
cmVmX2NudCwgMSk7CisJbi0+bV9leHQuZXh0X2J1ZiA9IG0tPm1fZXh0LmV4dF9idWY7CisJbi0+
bV9leHQuZXh0X2ZyZWUgPSBtLT5tX2V4dC5leHRfZnJlZTsKKwluLT5tX2V4dC5leHRfYXJncyA9
IG0tPm1fZXh0LmV4dF9hcmdzOworCW4tPm1fZXh0LmV4dF9zaXplID0gbS0+bV9leHQuZXh0X3Np
emU7CisJbi0+bV9leHQucmVmX2NudCA9IG0tPm1fZXh0LnJlZl9jbnQ7CisJbi0+bV9leHQuZXh0
X3R5cGUgPSBtLT5tX2V4dC5leHRfdHlwZTsKKwluLT5tX2ZsYWdzIHw9IE1fRVhUOworfQorCisK
Ky8qCisgKiBNYWtlIGEgY29weSBvZiBhbiBtYnVmIGNoYWluIHN0YXJ0aW5nICJvZmYwIiBieXRl
cyBmcm9tIHRoZSBiZWdpbm5pbmcsCisgKiBjb250aW51aW5nIGZvciAibGVuIiBieXRlcy4gIElm
IGxlbiBpcyBNX0NPUFlBTEwsIGNvcHkgdG8gZW5kIG9mIG1idWYuCisgKiBUaGUgd2FpdCBwYXJh
bWV0ZXIgaXMgYSBjaG9pY2Ugb2YgTV9UUllXQUlUL01fTk9XQUlUIGZyb20gY2FsbGVyLgorICog
Tm90ZSB0aGF0IHRoZSBjb3B5IGlzIHJlYWQtb25seSwgYmVjYXVzZSBjbHVzdGVycyBhcmUgbm90
IGNvcGllZCwKKyAqIG9ubHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQu
CisgKi8KKworc3RydWN0IG1idWYgKgorbV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZjAs
IGludCBsZW4sIGludCB3YWl0KQoreworCXN0cnVjdCBtYnVmICpuLCAqKm5wOworCWludCBvZmYg
PSBvZmYwOworCXN0cnVjdCBtYnVmICp0b3A7CisJaW50IGNvcHloZHIgPSAwOworCisJS0FTU0VS
VChvZmYgPj0gMCwgKCJtX2NvcHltLCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKKwlLQVNTRVJU
KGxlbiA+PSAwLCAoIm1fY29weW0sIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOworCUtBU1NFUlQo
bSAhPSBOVUxMLCAoIm1fY29weW0sIG0gaXMgTlVMTCIpKTsKKworI2lmICFkZWZpbmVkKElOVkFS
SUFOVFMpCisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKyNlbmRpZgor
CWlmIChvZmYgPT0gMCAmJiBtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJCWNvcHloZHIgPSAxOwor
CXdoaWxlIChvZmYgPiAwKSB7CisJCUtBU1NFUlQobSAhPSBOVUxMLCAoIm1fY29weW0sIG9mZnNl
dCA+IHNpemUgb2YgbWJ1ZiBjaGFpbiIpKTsKKwkJaWYgKG9mZiA8IG0tPm1fbGVuKQorCQkJYnJl
YWs7CisJCW9mZiAtPSBtLT5tX2xlbjsKKwkJbSA9IG0tPm1fbmV4dDsKKwl9CisJbnAgPSAmdG9w
OworCXRvcCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKG0gPT0gTlVMTCkgeworCQkJ
S0FTU0VSVChsZW4gPT0gTV9DT1BZQUxMLCAoIm1fY29weW0sIGxlbmd0aCA+IHNpemUgb2YgbWJ1
ZiBjaGFpbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5aGRyKQorCQkJTUdFVEhEUihu
LCB3YWl0LCBtLT5tX3R5cGUpOworCQllbHNlCisJCQlNR0VUKG4sIHdhaXQsIG0tPm1fdHlwZSk7
CisJCSpucCA9IG47CisJCWlmIChuID09IE5VTEwpCisJCQlnb3RvIG5vc3BhY2U7CisJCWlmIChj
b3B5aGRyKSB7CisJCQlpZiAoIW1fZHVwX3BrdGhkcihuLCBtLCB3YWl0KSkKKwkJCQlnb3RvIG5v
c3BhY2U7CisJCQlpZiAobGVuID09IE1fQ09QWUFMTCkKKwkJCQluLT5tX3BrdGhkci5sZW4gLT0g
b2ZmMDsKKwkJCWVsc2UKKwkJCQluLT5tX3BrdGhkci5sZW4gPSBsZW47CisJCQljb3B5aGRyID0g
MDsKKwkJfQorCQluLT5tX2xlbiA9IG1pbihsZW4sIG0tPm1fbGVuIC0gb2ZmKTsKKwkJaWYgKG0t
Pm1fZmxhZ3MgJiBNX0VYVCkgeworCQkJbi0+bV9kYXRhID0gbS0+bV9kYXRhICsgb2ZmOworCQkJ
bWJfZHVwY2wobiwgbSk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG10b2QobiwgY2FkZHJfdCksIG10
b2QobSwgY2FkZHJfdCkgKyBvZmYsICh1X2ludCluLT5tX2xlbik7CisJCWlmIChsZW4gIT0gTV9D
T1BZQUxMKQorCQkJbGVuIC09IG4tPm1fbGVuOworCQlvZmYgPSAwOworCQltID0gbS0+bV9uZXh0
OworCQlucCA9ICZuLT5tX25leHQ7CisJfQorCWlmICh0b3AgPT0gTlVMTCkKKwkJbWJzdGF0Lm1f
bWNmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVuY3kuICovCisKKwlyZXR1cm4gKHRvcCk7Citu
b3NwYWNlOgorCW1fZnJlZW0odG9wKTsKKwltYnN0YXQubV9tY2ZhaWwrKzsJLyogWFhYOiBObyBj
b25zaXN0ZW5jeS4gKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK2ludAorbV90YWdfY29weV9j
aGFpbihzdHJ1Y3QgbWJ1ZiAqdG8sIHN0cnVjdCBtYnVmICpmcm9tLCBpbnQgaG93KQoreworCXN0
cnVjdCBtX3RhZyAqcCwgKnQsICp0cHJldiA9IE5VTEw7CisKKwlLQVNTRVJUKHRvICYmIGZyb20s
ICgibV90YWdfY29weV9jaGFpbjogbnVsbCBhcmd1bWVudCwgdG8gJXAgZnJvbSAlcCIsICh2b2lk
ICopdG8sICh2b2lkICopZnJvbSkpOworCW1fdGFnX2RlbGV0ZV9jaGFpbih0bywgTlVMTCk7CisJ
U0xJU1RfRk9SRUFDSChwLCAmZnJvbS0+bV9wa3RoZHIudGFncywgbV90YWdfbGluaykgeworCQl0
ID0gbV90YWdfY29weShwLCBob3cpOworCQlpZiAodCA9PSBOVUxMKSB7CisJCQltX3RhZ19kZWxl
dGVfY2hhaW4odG8sIE5VTEwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJaWYgKHRwcmV2ID09IE5V
TEwpCisJCQlTTElTVF9JTlNFUlRfSEVBRCgmdG8tPm1fcGt0aGRyLnRhZ3MsIHQsIG1fdGFnX2xp
bmspOworCQllbHNlCisJCQlTTElTVF9JTlNFUlRfQUZURVIodHByZXYsIHQsIG1fdGFnX2xpbmsp
OworCQl0cHJldiA9IHQ7CisJfQorCXJldHVybiAxOworfQorCisvKgorICogRHVwbGljYXRlICJm
cm9tIidzIG1idWYgcGt0aGRyIGluICJ0byIuCisgKiAiZnJvbSIgbXVzdCBoYXZlIE1fUEtUSERS
IHNldCwgYW5kICJ0byIgbXVzdCBiZSBlbXB0eS4KKyAqIEluIHBhcnRpY3VsYXIsIHRoaXMgZG9l
cyBhIGRlZXAgY29weSBvZiB0aGUgcGFja2V0IHRhZ3MuCisgKi8KK2ludAorbV9kdXBfcGt0aGRy
KHN0cnVjdCBtYnVmICp0bywgc3RydWN0IG1idWYgKmZyb20sIGludCBob3cpCit7CisKKwlLQVNT
RVJUKHRvLCAoIm1fZHVwX3BrdGhkcjogdG8gaXMgTlVMTCIpKTsKKwlLQVNTRVJUKGZyb20sICgi
bV9kdXBfcGt0aGRyOiBmcm9tIGlzIE5VTEwiKSk7CisJdG8tPm1fZmxhZ3MgPSAoZnJvbS0+bV9m
bGFncyAmIE1fQ09QWUZMQUdTKSB8ICh0by0+bV9mbGFncyAmIE1fRVhUKTsKKwlpZiAoKHRvLT5t
X2ZsYWdzICYgTV9FWFQpID09IDApCisJCXRvLT5tX2RhdGEgPSB0by0+bV9wa3RkYXQ7CisJdG8t
Pm1fcGt0aGRyID0gZnJvbS0+bV9wa3RoZHI7CisJU0xJU1RfSU5JVCgmdG8tPm1fcGt0aGRyLnRh
Z3MpOworCXJldHVybiAobV90YWdfY29weV9jaGFpbih0bywgZnJvbSwgTUJUT00oaG93KSkpOwor
fQorCisvKiBDb3B5IGEgc2luZ2xlIHRhZy4gKi8KK3N0cnVjdCBtX3RhZyAqCittX3RhZ19jb3B5
KHN0cnVjdCBtX3RhZyAqdCwgaW50IGhvdykKK3sKKwlzdHJ1Y3QgbV90YWcgKnA7CisKKwlLQVNT
RVJUKHQsICgibV90YWdfY29weTogbnVsbCB0YWciKSk7CisJcCA9IG1fdGFnX2FsbG9jKHQtPm1f
dGFnX2Nvb2tpZSwgdC0+bV90YWdfaWQsIHQtPm1fdGFnX2xlbiwgaG93KTsKKwlpZiAocCA9PSBO
VUxMKQorCQlyZXR1cm4gKE5VTEwpOworCW1lbWNweShwICsgMSwgdCArIDEsIHQtPm1fdGFnX2xl
bik7IC8qIENvcHkgdGhlIGRhdGEgKi8KKwlyZXR1cm4gcDsKK30KKworLyogR2V0IGEgcGFja2V0
IHRhZyBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBzcGVjaWZpZWQgZGF0YSBmb2xsb3dpbmcuICovCitz
dHJ1Y3QgbV90YWcgKgorbV90YWdfYWxsb2ModV9pbnQzMl90IGNvb2tpZSwgaW50IHR5cGUsIGlu
dCBsZW4sIGludCB3YWl0KQoreworCXN0cnVjdCBtX3RhZyAqdDsKKworCWlmIChsZW4gPCAwKQor
CQlyZXR1cm4gTlVMTDsKKwl0ID0gbWFsbG9jKGxlbiArIHNpemVvZihzdHJ1Y3QgbV90YWcpKTsK
KwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltX3RhZ19zZXR1cCh0LCBjb29raWUs
IHR5cGUsIGxlbik7CisJdC0+bV90YWdfZnJlZSA9IG1fdGFnX2ZyZWVfZGVmYXVsdDsKKwlyZXR1
cm4gdDsKK30KKworLyogRnJlZSBhIHBhY2tldCB0YWcuICovCit2b2lkCittX3RhZ19mcmVlX2Rl
ZmF1bHQoc3RydWN0IG1fdGFnICp0KQoreworICBmcmVlKHQpOworfQorCisvKgorICogQ29weSBk
YXRhIGZyb20gYSBidWZmZXIgYmFjayBpbnRvIHRoZSBpbmRpY2F0ZWQgbWJ1ZiBjaGFpbiwKKyAq
IHN0YXJ0aW5nICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZywgZXh0ZW5kaW5nIHRoZSBt
YnVmCisgKiBjaGFpbiBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQKK21fY29weWJhY2soc3RydWN0
IG1idWYgKm0wLCBpbnQgb2ZmLCBpbnQgbGVuLCBjYWRkcl90IGNwKQoreworCWludCBtbGVuOwor
CXN0cnVjdCBtYnVmICptID0gbTAsICpuOworCWludCB0b3RsZW4gPSAwOworCisJaWYgKG0wID09
IE5VTEwpCisJCXJldHVybjsKKwl3aGlsZSAob2ZmID4gKG1sZW4gPSBtLT5tX2xlbikpIHsKKwkJ
b2ZmIC09IG1sZW47CisJCXRvdGxlbiArPSBtbGVuOworCQlpZiAobS0+bV9uZXh0ID09IE5VTEwp
IHsKKwkJCW4gPSBtX2dldChNX05PV0FJVCwgbS0+bV90eXBlKTsKKwkJCWlmIChuID09IE5VTEwp
CisJCQkJZ290byBvdXQ7CisJCQltZW1zZXQobXRvZChuLCBjYWRkcl90KSwgMCwgTUxFTik7CisJ
CQluLT5tX2xlbiA9IG1pbihNTEVOLCBsZW4gKyBvZmYpOworCQkJbS0+bV9uZXh0ID0gbjsKKwkJ
fQorCQltID0gbS0+bV9uZXh0OworCX0KKwl3aGlsZSAobGVuID4gMCkgeworCQltbGVuID0gbWlu
IChtLT5tX2xlbiAtIG9mZiwgbGVuKTsKKwkJbWVtY3B5KG9mZiArIG10b2QobSwgY2FkZHJfdCks
IGNwLCAodV9pbnQpbWxlbik7CisJCWNwICs9IG1sZW47CisJCWxlbiAtPSBtbGVuOworCQltbGVu
ICs9IG9mZjsKKwkJb2ZmID0gMDsKKwkJdG90bGVuICs9IG1sZW47CisJCWlmIChsZW4gPT0gMCkK
KwkJCWJyZWFrOworCQlpZiAobS0+bV9uZXh0ID09IE5VTEwpIHsKKwkJCW4gPSBtX2dldChNX05P
V0FJVCwgbS0+bV90eXBlKTsKKwkJCWlmIChuID09IE5VTEwpCisJCQkJYnJlYWs7CisJCQluLT5t
X2xlbiA9IG1pbihNTEVOLCBsZW4pOworCQkJbS0+bV9uZXh0ID0gbjsKKwkJfQorCQltID0gbS0+
bV9uZXh0OworCX0KK291dDoJaWYgKCgobSA9IG0wKS0+bV9mbGFncyAmIE1fUEtUSERSKSAmJiAo
bS0+bV9wa3RoZHIubGVuIDwgdG90bGVuKSkKKwkJbS0+bV9wa3RoZHIubGVuID0gdG90bGVuOwor
fQorCisKKy8qCisgKiBMZXNzZXItdXNlZCBwYXRoIGZvciBNX1BSRVBFTkQ6CisgKiBhbGxvY2F0
ZSBuZXcgbWJ1ZiB0byBwcmVwZW5kIHRvIGNoYWluLAorICogY29weSBqdW5rIGFsb25nLgorICov
CitzdHJ1Y3QgbWJ1ZiAqCittX3ByZXBlbmQoc3RydWN0IG1idWYgKm0sIGludCBsZW4sIGludCBo
b3cpCit7CisJc3RydWN0IG1idWYgKm1uOworCisJaWYgKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikK
KwkJTUdFVEhEUihtbiwgaG93LCBtLT5tX3R5cGUpOworCWVsc2UKKwkJTUdFVChtbiwgaG93LCBt
LT5tX3R5cGUpOworCWlmIChtbiA9PSBOVUxMKSB7CisJCW1fZnJlZW0obSk7CisJCXJldHVybiAo
TlVMTCk7CisJfQorCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJCU1fTU9WRV9QS1RIRFIo
bW4sIG0pOworCW1uLT5tX25leHQgPSBtOworCW0gPSBtbjsKKwlpZiAobS0+bV9mbGFncyAmIE1f
UEtUSERSKSB7CisJCWlmIChsZW4gPCBNSExFTikKKwkJCU1IX0FMSUdOKG0sIGxlbik7CisJfSBl
bHNlIHsKKwkJaWYgKGxlbiA8IE1MRU4pCisJCQlNX0FMSUdOKG0sIGxlbik7CisJfQorCW0tPm1f
bGVuID0gbGVuOworCXJldHVybiAobSk7Cit9CisKKy8qCisgKiBDb3B5IGRhdGEgZnJvbSBhbiBt
YnVmIGNoYWluIHN0YXJ0aW5nICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZywKKyAqIGNv
bnRpbnVpbmcgZm9yICJsZW4iIGJ5dGVzLCBpbnRvIHRoZSBpbmRpY2F0ZWQgYnVmZmVyLgorICov
Cit2b2lkCittX2NvcHlkYXRhKGNvbnN0IHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVu
LCBjYWRkcl90IGNwKQoreworCXVfaW50IGNvdW50OworCisJS0FTU0VSVChvZmYgPj0gMCwgKCJt
X2NvcHlkYXRhLCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKKwlLQVNTRVJUKGxlbiA+PSAwLCAo
Im1fY29weWRhdGEsIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOworCXdoaWxlIChvZmYgPiAwKSB7
CisJCUtBU1NFUlQobSAhPSBOVUxMLCAoIm1fY29weWRhdGEsIG9mZnNldCA+IHNpemUgb2YgbWJ1
ZiBjaGFpbiIpKTsKKwkJaWYgKG9mZiA8IG0tPm1fbGVuKQorCQkJYnJlYWs7CisJCW9mZiAtPSBt
LT5tX2xlbjsKKwkJbSA9IG0tPm1fbmV4dDsKKwl9CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJS0FT
U0VSVChtICE9IE5VTEwsICgibV9jb3B5ZGF0YSwgbGVuZ3RoID4gc2l6ZSBvZiBtYnVmIGNoYWlu
IikpOworCQljb3VudCA9IG1pbihtLT5tX2xlbiAtIG9mZiwgbGVuKTsKKwkJbWVtY3B5KGNwLCBt
dG9kKG0sIGNhZGRyX3QpICsgb2ZmLCBjb3VudCk7CisJCWxlbiAtPSBjb3VudDsKKwkJY3AgKz0g
Y291bnQ7CisJCW9mZiA9IDA7CisJCW0gPSBtLT5tX25leHQ7CisJfQorfQorCisKKy8qCisgKiBD
b25jYXRlbmF0ZSBtYnVmIGNoYWluIG4gdG8gbS4KKyAqIEJvdGggY2hhaW5zIG11c3QgYmUgb2Yg
dGhlIHNhbWUgdHlwZSAoZS5nLiBNVF9EQVRBKS4KKyAqIEFueSBtX3BrdGhkciBpcyBub3QgdXBk
YXRlZC4KKyAqLwordm9pZAorbV9jYXQoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuKQor
eworCXdoaWxlIChtLT5tX25leHQpCisJCW0gPSBtLT5tX25leHQ7CisJd2hpbGUgKG4pIHsKKwkJ
aWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCB8fAorCQkgICAgbS0+bV9kYXRhICsgbS0+bV9sZW4gKyBu
LT5tX2xlbiA+PSAmbS0+bV9kYXRbTUxFTl0pIHsKKwkJCS8qIGp1c3Qgam9pbiB0aGUgdHdvIGNo
YWlucyAqLworCQkJbS0+bV9uZXh0ID0gbjsKKwkJCXJldHVybjsKKwkJfQorCQkvKiBzcGxhdCB0
aGUgZGF0YSBmcm9tIG9uZSBpbnRvIHRoZSBvdGhlciAqLworCQltZW1jcHkobXRvZChtLCBjYWRk
cl90KSArIG0tPm1fbGVuLCBtdG9kKG4sIGNhZGRyX3QpLCAodV9pbnQpbi0+bV9sZW4pOworCQlt
LT5tX2xlbiArPSBuLT5tX2xlbjsKKwkJbiA9IG1fZnJlZShuKTsKKwl9Cit9CisKKwordm9pZAor
bV9hZGooc3RydWN0IG1idWYgKm1wLCBpbnQgcmVxX2xlbikKK3sKKwlpbnQgbGVuID0gcmVxX2xl
bjsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgY291bnQ7CisKKwlpZiAoKG0gPSBtcCkgPT0gTlVM
TCkKKwkJcmV0dXJuOworCWlmIChsZW4gPj0gMCkgeworCQkvKgorCQkgKiBUcmltIGZyb20gaGVh
ZC4KKwkJICovCisJCXdoaWxlIChtICE9IE5VTEwgJiYgbGVuID4gMCkgeworCQkJaWYgKG0tPm1f
bGVuIDw9IGxlbikgeworCQkJCWxlbiAtPSBtLT5tX2xlbjsKKwkJCQltLT5tX2xlbiA9IDA7CisJ
CQkJbSA9IG0tPm1fbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJbS0+bV9sZW4gLT0gbGVuOworCQkJ
CW0tPm1fZGF0YSArPSBsZW47CisJCQkJbGVuID0gMDsKKwkJCX0KKwkJfQorCQltID0gbXA7CisJ
CWlmIChtcC0+bV9mbGFncyAmIE1fUEtUSERSKQorCQkJbS0+bV9wa3RoZHIubGVuIC09IChyZXFf
bGVuIC0gbGVuKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUcmltIGZyb20gdGFpbC4gIFNjYW4g
dGhlIG1idWYgY2hhaW4sCisJCSAqIGNhbGN1bGF0aW5nIGl0cyBsZW5ndGggYW5kIGZpbmRpbmcg
dGhlIGxhc3QgbWJ1Zi4KKwkJICogSWYgdGhlIGFkanVzdG1lbnQgb25seSBhZmZlY3RzIHRoaXMg
bWJ1ZiwgdGhlbiBqdXN0CisJCSAqIGFkanVzdCBhbmQgcmV0dXJuLiAgT3RoZXJ3aXNlLCByZXNj
YW4gYW5kIHRydW5jYXRlCisJCSAqIGFmdGVyIHRoZSByZW1haW5pbmcgc2l6ZS4KKwkJICovCisJ
CWxlbiA9IC1sZW47CisJCWNvdW50ID0gMDsKKwkJZm9yICg7OykgeworCQkJY291bnQgKz0gbS0+
bV9sZW47CisJCQlpZiAobS0+bV9uZXh0ID09IChzdHJ1Y3QgbWJ1ZiAqKTApCisJCQkJYnJlYWs7
CisJCQltID0gbS0+bV9uZXh0OworCQl9CisJCWlmIChtLT5tX2xlbiA+PSBsZW4pIHsKKwkJCW0t
Pm1fbGVuIC09IGxlbjsKKwkJCWlmIChtcC0+bV9mbGFncyAmIE1fUEtUSERSKQorCQkJCW1wLT5t
X3BrdGhkci5sZW4gLT0gbGVuOworCQkJcmV0dXJuOworCQl9CisJCWNvdW50IC09IGxlbjsKKwkJ
aWYgKGNvdW50IDwgMCkKKwkJCWNvdW50ID0gMDsKKwkJLyoKKwkJICogQ29ycmVjdCBsZW5ndGgg
Zm9yIGNoYWluIGlzICJjb3VudCIuCisJCSAqIEZpbmQgdGhlIG1idWYgd2l0aCBsYXN0IGRhdGEs
IGFkanVzdCBpdHMgbGVuZ3RoLAorCQkgKiBhbmQgdG9zcyBkYXRhIGZyb20gcmVtYWluaW5nIG1i
dWZzIG9uIGNoYWluLgorCQkgKi8KKwkJbSA9IG1wOworCQlpZiAobS0+bV9mbGFncyAmIE1fUEtU
SERSKQorCQkJbS0+bV9wa3RoZHIubGVuID0gY291bnQ7CisJCWZvciAoOyBtOyBtID0gbS0+bV9u
ZXh0KSB7CisJCQlpZiAobS0+bV9sZW4gPj0gY291bnQpIHsKKwkJCQltLT5tX2xlbiA9IGNvdW50
OworCQkJCWlmIChtLT5tX25leHQgIT0gTlVMTCkgeworCQkJCQltX2ZyZWVtKG0tPm1fbmV4dCk7
CisJCQkJCW0tPm1fbmV4dCA9IE5VTEw7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQkJY291
bnQgLT0gbS0+bV9sZW47CisJCX0KKwl9Cit9CisKKworLyogbV9zcGxpdCBpcyB1c2VkIHdpdGhp
biBzY3RwX2hhbmRsZV9jb29raWVfZWNoby4gKi8KKworLyoKKyAqIFBhcnRpdGlvbiBhbiBtYnVm
IGNoYWluIGluIHR3byBwaWVjZXMsIHJldHVybmluZyB0aGUgdGFpbCAtLQorICogYWxsIGJ1dCB0
aGUgZmlyc3QgbGVuMCBieXRlcy4gIEluIGNhc2Ugb2YgZmFpbHVyZSwgaXQgcmV0dXJucyBOVUxM
IGFuZAorICogYXR0ZW1wdHMgdG8gcmVzdG9yZSB0aGUgY2hhaW4gdG8gaXRzIG9yaWdpbmFsIHN0
YXRlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIG1idWZzIG1pZ2h0IGJlIHJlYWQt
b25seSwgYmVjYXVzZSB0aGUgbmV3CisgKiBtYnVmIGNhbiBlbmQgdXAgc2hhcmluZyBhbiBtYnVm
IGNsdXN0ZXIgd2l0aCB0aGUgb3JpZ2luYWwgbWJ1ZiBpZgorICogdGhlICJicmVha2luZyBwb2lu
dCIgaGFwcGVucyB0byBsaWUgd2l0aGluIGEgY2x1c3RlciBtYnVmLiBVc2UgdGhlCisgKiBNX1dS
SVRBQkxFKCkgbWFjcm8gdG8gY2hlY2sgZm9yIHRoaXMgY2FzZS4KKyAqLworc3RydWN0IG1idWYg
KgorbV9zcGxpdChzdHJ1Y3QgbWJ1ZiAqbTAsIGludCBsZW4wLCBpbnQgd2FpdCkKK3sKKwlzdHJ1
Y3QgbWJ1ZiAqbSwgKm47CisJdV9pbnQgbGVuID0gbGVuMCwgcmVtYWluOworCisJLyogTUJVRl9D
SEVDS1NMRUVQKHdhaXQpOyAqLworCWZvciAobSA9IG0wOyBtICYmIChpbnQpbGVuID4gbS0+bV9s
ZW47IG0gPSBtLT5tX25leHQpCisJCWxlbiAtPSBtLT5tX2xlbjsKKwlpZiAobSA9PSBOVUxMKQor
CQlyZXR1cm4gKE5VTEwpOworCXJlbWFpbiA9IG0tPm1fbGVuIC0gbGVuOworCWlmIChtMC0+bV9m
bGFncyAmIE1fUEtUSERSKSB7CisJCU1HRVRIRFIobiwgd2FpdCwgbTAtPm1fdHlwZSk7CisJCWlm
IChuID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQluLT5tX3BrdGhkci5yY3ZpZiA9IG0w
LT5tX3BrdGhkci5yY3ZpZjsKKwkJbi0+bV9wa3RoZHIubGVuID0gbTAtPm1fcGt0aGRyLmxlbiAt
IGxlbjA7CisJCW0wLT5tX3BrdGhkci5sZW4gPSBsZW4wOworCQlpZiAobS0+bV9mbGFncyAmIE1f
RVhUKQorCQkJZ290byBleHRwYWNrZXQ7CisJCWlmIChyZW1haW4gPiBNSExFTikgeworCQkJLyog
bSBjYW4ndCBiZSB0aGUgbGVhZCBwYWNrZXQgKi8KKwkJCU1IX0FMSUdOKG4sIDApOworCQkJbi0+
bV9uZXh0ID0gbV9zcGxpdChtLCBsZW4sIHdhaXQpOworCQkJaWYgKG4tPm1fbmV4dCA9PSBOVUxM
KSB7CisJCQkJKHZvaWQpIG1fZnJlZShuKTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBlbHNl
IHsKKwkJCQluLT5tX2xlbiA9IDA7CisJCQkJcmV0dXJuIChuKTsKKwkJCX0KKwkJfSBlbHNlCisJ
CQlNSF9BTElHTihuLCByZW1haW4pOworCX0gZWxzZSBpZiAocmVtYWluID09IDApIHsKKwkJbiA9
IG0tPm1fbmV4dDsKKwkJbS0+bV9uZXh0ID0gTlVMTDsKKwkJcmV0dXJuIChuKTsKKwl9IGVsc2Ug
eworCQlNR0VUKG4sIHdhaXQsIG0tPm1fdHlwZSk7CisJCWlmIChuID09IE5VTEwpCisJCQlyZXR1
cm4gKE5VTEwpOworCQlNX0FMSUdOKG4sIHJlbWFpbik7CisJfQorZXh0cGFja2V0OgorCWlmICht
LT5tX2ZsYWdzICYgTV9FWFQpIHsKKwkJbi0+bV9kYXRhID0gbS0+bV9kYXRhICsgbGVuOworCQlt
Yl9kdXBjbChuLCBtKTsKKwl9IGVsc2UgeworCQltZW1jcHkobXRvZChuLCBjYWRkcl90KSwgbXRv
ZChtLCBjYWRkcl90KSArIGxlbiwgcmVtYWluKTsKKwl9CisJbi0+bV9sZW4gPSByZW1haW47CisJ
bS0+bV9sZW4gPSBsZW47CisJbi0+bV9uZXh0ID0gbS0+bV9uZXh0OworCW0tPm1fbmV4dCA9IE5V
TEw7CisJcmV0dXJuIChuKTsKK30KKworCisKKworaW50CitwYWNrX3NlbmRfYnVmZmVyKGNhZGRy
X3QgYnVmZmVyLCBzdHJ1Y3QgbWJ1ZiogbWIpeworCisJaW50IGNvdW50X3RvX2NvcHk7CisJaW50
IHRvdGFsX2NvdW50X2NvcGllZCA9IDA7CisJaW50IG9mZnNldCA9IDA7CisKKwlkbyB7CisJCWNv
dW50X3RvX2NvcHkgPSBtYi0+bV9sZW47CisJCW1lbWNweShidWZmZXIrb2Zmc2V0LCBtdG9kKG1i
LCBjYWRkcl90KSwgY291bnRfdG9fY29weSk7CisJCW9mZnNldCArPSBjb3VudF90b19jb3B5Owor
CQl0b3RhbF9jb3VudF9jb3BpZWQgKz0gY291bnRfdG9fY29weTsKKwkJbWIgPSBtYi0+bV9uZXh0
OworCX0gd2hpbGUobWIpOworCisJcmV0dXJuICh0b3RhbF9jb3VudF9jb3BpZWQpOworfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvdXNlcl9tYnVmLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uOWM1ZDBkN2VmNDVhMmQ5Y2ZjZDc5ZDlmNWM4NzlhMTlkZmQxNjY2ZiAxMDA3NTUK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfbWJ1Zi5oCkBAIC0wLDAgKzEsNDQwIEBACisvKi0KKyAqIENvcHlyaWdodCAo
YykgMTk4MiwgMTk4NiwgMTk4OCwgMTk5MworICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5p
dmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
KyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
CisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYgX1VTRVJfTUJVRl9IXwor
I2RlZmluZSBfVVNFUl9NQlVGX0hfCisKKy8qIF9fVXNlcnNwYWNlX18gaGVhZGVyIGZpbGUgZm9y
IG1idWZzICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9B
TExPQ0FUT1IpCisjaW5jbHVkZSAidW1lbS5oIgorI2VuZGlmCisjaW5jbHVkZSAidXNlcl9tYWxs
b2MuaCIKKyNpbmNsdWRlICJuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgiCisKKyNkZWZpbmUg
VVNJTkdfTUJVRl9DT05TVFJVQ1RPUiAwCisKKy8qIEZvciBMaW51eCAqLworI2lmbmRlZiBNU0la
RQorI2RlZmluZSBNU0laRSAyNTYKKy8qICNkZWZpbmUgTVNJWkUgMTAyNCAqLworI2VuZGlmCisj
aWZuZGVmIE1DTEJZVEVTCisjZGVmaW5lIE1DTEJZVEVTIDIwNDgKKyNlbmRpZgorCitzdHJ1Y3Qg
bWJ1ZiAqIG1fZ2V0aGRyKGludCBob3csIHNob3J0IHR5cGUpOworc3RydWN0IG1idWYgKiBtX2dl
dChpbnQgaG93LCBzaG9ydCB0eXBlKTsKK3N0cnVjdCBtYnVmICogbV9mcmVlKHN0cnVjdCBtYnVm
ICptKTsKK3ZvaWQgbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdyk7CitzdHJ1Y3QgbWJ1
ZiAqIG1fZ2V0bTIoc3RydWN0IG1idWYgKm0sIGludCBsZW4sIGludCBob3csIHNob3J0IHR5cGUs
IGludCBmbGFncywgaW50IGFsbG9uZWJ1Zik7CitzdHJ1Y3QgbWJ1ZiAqbV91aW90b21idWYoc3Ry
dWN0IHVpbyAqdWlvLCBpbnQgaG93LCBpbnQgbGVuLCBpbnQgYWxpZ24sIGludCBmbGFncyk7Cit1
X2ludCBtX2xlbmd0aChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVmICoqbGFzdCk7CitzdHJ1
Y3QgbWJ1ZiAqbV9sYXN0KHN0cnVjdCBtYnVmICptKTsKKworLyogbWJ1ZiBpbml0aWFsaXphdGlv
biBmdW5jdGlvbiAqLwordm9pZCBtYnVmX2luaXRpYWxpemUodm9pZCAqKTsKKworI2RlZmluZQlN
X01PVkVfUEtUSERSKHRvLCBmcm9tKQltX21vdmVfcGt0aGRyKCh0byksIChmcm9tKSkKKyNkZWZp
bmUJTUdFVChtLCBob3csIHR5cGUpCSgobSkgPSBtX2dldCgoaG93KSwgKHR5cGUpKSkKKyNkZWZp
bmUJTUdFVEhEUihtLCBob3csIHR5cGUpCSgobSkgPSBtX2dldGhkcigoaG93KSwgKHR5cGUpKSkK
KyNkZWZpbmUJTUNMR0VUKG0sIGhvdykJCW1fY2xnZXQoKG0pLCAoaG93KSkKKworCisjZGVmaW5l
IE1fSERSX1BBRCAoKHNpemVvZihpbnRwdHJfdCk9PTQpID8gMiA6IDYpIC8qIG1vZGlmaWVkIGZv
ciBfX1VzZXJzcGFjZV9fICovCisKKy8qIExlbmd0aCB0byBtX2NvcHkgdG8gY29weSBhbGwuICov
CisjZGVmaW5lCU1fQ09QWUFMTAkxMDAwMDAwMDAwCisKKy8qIHVtZW1fY2FjaGVfdCBpcyBkZWZp
bmVkIGluIHVzZXJfaW5jbHVkZS91bWVtLmggYXMKKyAqIHR5cGVkZWYgc3RydWN0IHVtZW1fY2Fj
aGUgdW1lbV9jYWNoZV90OworICogTm90ZTp1bWVtX3pvbmVfdCBpcyBhIHBvaW50ZXIuCisgKi8K
KyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKK3R5cGVkZWYgc2l6ZV90IHNjdHBf
em9uZV90OworI2Vsc2UKK3R5cGVkZWYgdW1lbV9jYWNoZV90ICpzY3RwX3pvbmVfdDsKKyNlbmRp
ZgorCitleHRlcm4gc2N0cF96b25lX3Qgem9uZV9tYnVmOworZXh0ZXJuIHNjdHBfem9uZV90IHpv
bmVfY2x1c3Q7CitleHRlcm4gc2N0cF96b25lX3Qgem9uZV9leHRfcmVmY250OworCisvKi0KKyAq
IE1hY3JvcyBmb3IgdHlwZSBjb252ZXJzaW9uOgorICogbXRvZChtLCB0KQktLSBDb252ZXJ0IG1i
dWYgcG9pbnRlciB0byBkYXRhIHBvaW50ZXIgb2YgY29ycmVjdCB0eXBlLgorICogZHRvbSh4KQkt
LSBDb252ZXJ0IGRhdGEgcG9pbnRlciB3aXRoaW4gbWJ1ZiB0byBtYnVmIHBvaW50ZXIgKFhYWCku
CisgKi8KKyNkZWZpbmUJbXRvZChtLCB0KQkoKHQpKChtKS0+bV9kYXRhKSkKKyNkZWZpbmUJZHRv
bSh4KQkJKChzdHJ1Y3QgbWJ1ZiAqKSgoaW50cHRyX3QpKHgpICYgfihNU0laRS0xKSkpCisKK3N0
cnVjdCBtYl9hcmdzIHsKKwlpbnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBtYnVmIGJlaW5nIGFsbG9j
YXRlZCAqLworCXNob3J0CXR5cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWluZyBhbGxvY2F0ZWQgKi8K
K307CisKK3N0cnVjdCBjbHVzdF9hcmdzIHsKKwlzdHJ1Y3QgbWJ1ZiAqIHBhcmVudF9tYnVmOwor
fTsKKworc3RydWN0IG1idWYgKiAgICBtX3NwbGl0KHN0cnVjdCBtYnVmICosIGludCwgaW50KTsK
K3ZvaWQgICAgICAgICAgICAgbV9jYXQoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuKTsK
K3ZvaWQJCSBtX2FkaihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwordm9pZCAgbWJfZnJlZV9leHQoc3Ry
dWN0IG1idWYgKik7Cit2b2lkICBtX2ZyZWVtKHN0cnVjdCBtYnVmICopOworc3RydWN0IG1fdGFn
CSptX3RhZ19hbGxvYyh1X2ludDMyX3QsIGludCwgaW50LCBpbnQpOworc3RydWN0IG1idWYJKm1f
Y29weW0oc3RydWN0IG1idWYgKiwgaW50LCBpbnQsIGludCk7Cit2b2lkCQkgbV9jb3B5YmFjayhz
dHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY2FkZHJfdCk7CitzdHJ1Y3QgbWJ1ZgkqbV9wdWxsdXAo
c3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBtYnVmCSptX3B1bGxkb3duKHN0cnVjdCBtYnVm
ICosIGludCBvZmYsIGludCBsZW4sIGludCAqb2ZmcCk7CitpbnQJCSBtX2R1cF9wa3RoZHIoc3Ry
dWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBtX3RhZwkqbV90YWdfY29w
eShzdHJ1Y3QgbV90YWcgKiwgaW50KTsKK2ludAkJIG1fdGFnX2NvcHlfY2hhaW4oc3RydWN0IG1i
dWYgKiwgc3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBtYnVmCSptX3ByZXBlbmQoc3RydWN0
IG1idWYgKiwgaW50LCBpbnQpOwordm9pZAkJIG1fY29weWRhdGEoY29uc3Qgc3RydWN0IG1idWYg
KiwgaW50LCBpbnQsIGNhZGRyX3QpOworCisjZGVmaW5lIE1CVUZfTUVNX05BTUUgIm1idWYiCisj
ZGVmaW5lIE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSAibWJ1Zl9jbHVzdGVyIgorI2RlZmluZQlNQlVG
X0VYVFJFRkNOVF9NRU1fTkFNRQkibWJ1Zl9leHRfcmVmY250IgorCisjZGVmaW5lCU1UX05PSU5J
VAkyNTUJLyogTm90IGEgdHlwZSBidXQgYSBmbGFnIHRvIGFsbG9jYXRlCisJCQkJICAgYSBub24t
aW5pdGlhbGl6ZWQgbWJ1ZiAqLworCisvKgorICogR2VuZXJhbCBtYnVmIGFsbG9jYXRvciBzdGF0
aXN0aWNzIHN0cnVjdHVyZS4KKyAqIF9fVXNlcnNwYWNlX18gbWJzdGF0IG1heSBiZSB1c2VmdWwg
Zm9yIGdhdGhlcmluZyBzdGF0aXN0aWNzLgorICogSW4gdGhlIGtlcm5lbCBtYW55IG9mIHRoZXNl
IHN0YXRpc3RpY3MgYXJlIG5vIGxvbmdlciB1c2VkIGFzCisgKiB0aGV5IHRyYWNrIGFsbG9jYXRv
ciBzdGF0aXN0aWNzIHRocm91Z2gga2VybmVsIFVNQSdzIGJ1aWx0IGluIHN0YXRpc3RpY3MgbWVj
aGFuaXNtLgorICovCitzdHJ1Y3QgbWJzdGF0IHsKKwl1X2xvbmcJbV9tYnVmczsJLyogWFhYICov
CisJdV9sb25nCW1fbWNsdXN0czsJLyogWFhYICovCisKKwl1X2xvbmcJbV9kcmFpbjsJLyogdGlt
ZXMgZHJhaW5lZCBwcm90b2NvbHMgZm9yIHNwYWNlICovCisJdV9sb25nCW1fbWNmYWlsOwkvKiBY
WFg6IHRpbWVzIG1fY29weW0gZmFpbGVkICovCisJdV9sb25nCW1fbXBmYWlsOwkvKiBYWFg6IHRp
bWVzIG1fcHVsbHVwIGZhaWxlZCAqLworCXVfbG9uZwltX21zaXplOwkvKiBsZW5ndGggb2YgYW4g
bWJ1ZiAqLworCXVfbG9uZwltX21jbGJ5dGVzOwkvKiBsZW5ndGggb2YgYW4gbWJ1ZiBjbHVzdGVy
ICovCisJdV9sb25nCW1fbWluY2xzaXplOwkvKiBtaW4gbGVuZ3RoIG9mIGRhdGEgdG8gYWxsb2Nh
dGUgYSBjbHVzdGVyICovCisJdV9sb25nCW1fbWxlbjsJCS8qIGxlbmd0aCBvZiBkYXRhIGluIGFu
IG1idWYgKi8KKwl1X2xvbmcJbV9taGxlbjsJLyogbGVuZ3RoIG9mIGRhdGEgaW4gYSBoZWFkZXIg
bWJ1ZiAqLworCisJLyogTnVtYmVyIG9mIG1idHlwZXMgKGdpdmVzICMgZWxlbXMgaW4gbWJ0eXBl
c1tdIGFycmF5OiAqLworCXNob3J0CW1fbnVtdHlwZXM7CisKKwkvKiBYWFg6IFNlbmRmaWxlIHN0
YXRzIHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8gdGhlaXIgb3duIHN0cnVjdCAqLworCXVfbG9u
ZwlzZl9pb2NudDsJLyogdGltZXMgc2VuZGZpbGUgaGFkIHRvIGRvIGRpc2sgSS9PICovCisJdV9s
b25nCXNmX2FsbG9jZmFpbDsJLyogdGltZXMgc2ZidWYgYWxsb2NhdGlvbiBmYWlsZWQgKi8KKwl1
X2xvbmcJc2ZfYWxsb2N3YWl0OwkvKiB0aW1lcyBzZmJ1ZiBhbGxvY2F0aW9uIGhhZCB0byB3YWl0
ICovCit9OworCisKKy8qCisgKiBNYnVmcyBhcmUgb2YgYSBzaW5nbGUgc2l6ZSwgTVNJWkUgKHN5
cy9wYXJhbS5oKSwgd2hpY2ggaW5jbHVkZXMgb3ZlcmhlYWQuCisgKiBBbiBtYnVmIG1heSBhZGQg
YSBzaW5nbGUgIm1idWYgY2x1c3RlciIgb2Ygc2l6ZSBNQ0xCWVRFUyAoYWxzbyBpbgorICogc3lz
L3BhcmFtLmgpLCB3aGljaCBoYXMgbm8gYWRkaXRpb25hbCBvdmVyaGVhZCBhbmQgaXMgdXNlZCBp
bnN0ZWFkIG9mIHRoZQorICogaW50ZXJuYWwgZGF0YSBhcmVhOyB0aGlzIGlzIGRvbmUgd2hlbiBh
dCBsZWFzdCBNSU5DTFNJWkUgb2YgZGF0YSBtdXN0IGJlCisgKiBzdG9yZWQuICBBZGRpdGlvbmFs
bHksIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGEgc2VwYXJhdGUgYnVmZmVyCisgKiBleHRl
cm5hbGx5IGFuZCBhdHRhY2ggaXQgdG8gdGhlIG1idWYgaW4gYSB3YXkgc2ltaWxhciB0byB0aGF0
IG9mIG1idWYKKyAqIGNsdXN0ZXJzLgorICovCisjZGVmaW5lCU1MRU4JCSgoaW50KShNU0laRSAt
IHNpemVvZihzdHJ1Y3QgbV9oZHIpKSkJLyogbm9ybWFsIGRhdGEgbGVuICovCisjZGVmaW5lCU1I
TEVOCQkoKGludCkoTUxFTiAtIHNpemVvZihzdHJ1Y3QgcGt0aGRyKSkpCS8qIGRhdGEgbGVuIHcv
cGt0aGRyICovCisjZGVmaW5lCU1JTkNMU0laRQkoKGludCkoTUhMRU4gKyAxKSkJLyogc21hbGxl
c3QgYW1vdW50IHRvIHB1dCBpbiBjbHVzdGVyICovCisjZGVmaW5lCU1fTUFYQ09NUFJFU1MJKE1I
TEVOIC8gMikJLyogbWF4IGFtb3VudCB0byBjb3B5IGZvciBjb21wcmVzc2lvbiAqLworCisKKy8q
CisgKiBIZWFkZXIgcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2ZXJ5IG1idWYuCisgKi8K
K3N0cnVjdCBtX2hkciB7CisJc3RydWN0IG1idWYJKm1oX25leHQ7CS8qIG5leHQgYnVmZmVyIGlu
IGNoYWluICovCisJc3RydWN0IG1idWYJKm1oX25leHRwa3Q7CS8qIG5leHQgY2hhaW4gaW4gcXVl
dWUvcmVjb3JkICovCisJY2FkZHJfdAkJIG1oX2RhdGE7CS8qIGxvY2F0aW9uIG9mIGRhdGEgKi8K
KwlpbnQJCSBtaF9sZW47CS8qIGFtb3VudCBvZiBkYXRhIGluIHRoaXMgbWJ1ZiAqLworCWludAkJ
IG1oX2ZsYWdzOwkvKiBmbGFnczsgc2VlIGJlbG93ICovCisJc2hvcnQJCSBtaF90eXBlOwkvKiB0
eXBlIG9mIGRhdGEgaW4gdGhpcyBtYnVmICovCisJdWludDhfdCAgICAgICAgICBwYWRbTV9IRFJf
UEFEXTsvKiB3b3JkIGFsaWduICAgICAgICAgICAgICAgICAgKi8KK307CisKKy8qCisgKiBQYWNr
ZXQgdGFnIHN0cnVjdHVyZSAoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4KKyAqLworc3RydWN0IG1f
dGFnIHsKKwlTTElTVF9FTlRSWShtX3RhZykJbV90YWdfbGluazsJLyogTGlzdCBvZiBwYWNrZXQg
dGFncyAqLworCXVfaW50MTZfdAkJbV90YWdfaWQ7CS8qIFRhZyBJRCAqLworCXVfaW50MTZfdAkJ
bV90YWdfbGVuOwkvKiBMZW5ndGggb2YgZGF0YSAqLworCXVfaW50MzJfdAkJbV90YWdfY29va2ll
OwkvKiBBQkkvTW9kdWxlIElEICovCisJdm9pZAkJCSgqbV90YWdfZnJlZSkoc3RydWN0IG1fdGFn
ICopOworfTsKKworLyoKKyAqIFJlY29yZC9wYWNrZXQgaGVhZGVyIGluIGZpcnN0IG1idWYgb2Yg
Y2hhaW47IHZhbGlkIG9ubHkgaWYgTV9QS1RIRFIgaXMgc2V0LgorICovCitzdHJ1Y3QgcGt0aGRy
IHsKKwlzdHJ1Y3QgaWZuZXQJKnJjdmlmOwkJLyogcmN2IGludGVyZmFjZSAqLworCS8qIHZhcmlh
YmxlcyBmb3IgaXAgYW5kIHRjcCByZWFzc2VtYmx5ICovCisJdm9pZAkJKmhlYWRlcjsJLyogcG9p
bnRlciB0byBwYWNrZXQgaGVhZGVyICovCisJaW50CQkgbGVuOwkJLyogdG90YWwgcGFja2V0IGxl
bmd0aCAqLworCS8qIHZhcmlhYmxlcyBmb3IgaGFyZHdhcmUgY2hlY2tzdW0gKi8KKwlpbnQJCSBj
c3VtX2ZsYWdzOwkvKiBmbGFncyByZWdhcmRpbmcgY2hlY2tzdW0gKi8KKwlpbnQJCSBjc3VtX2Rh
dGE7CS8qIGRhdGEgZmllbGQgdXNlZCBieSBjc3VtIHJvdXRpbmVzICovCisJdV9pbnQxNl90CSB0
c29fc2Vnc3o7CS8qIFRTTyBzZWdtZW50IHNpemUgKi8KKwl1X2ludDE2X3QJIGV0aGVyX3Z0YWc7
CS8qIEV0aGVybmV0IDgwMi4xcCtxIHZsYW4gdGFnICovCisJU0xJU1RfSEVBRChwYWNrZXRfdGFn
cywgbV90YWcpIHRhZ3M7IC8qIGxpc3Qgb2YgcGFja2V0IHRhZ3MgKi8KK307CisKKy8qCisgKiBE
ZXNjcmlwdGlvbiBvZiBleHRlcm5hbCBzdG9yYWdlIG1hcHBlZCBpbnRvIG1idWY7IHZhbGlkIG9u
bHkgaWYgTV9FWFQgaXMKKyAqIHNldC4KKyAqLworc3RydWN0IG1fZXh0IHsKKwljYWRkcl90CQkg
ZXh0X2J1ZjsJLyogc3RhcnQgb2YgYnVmZmVyICovCisJdm9pZAkJKCpleHRfZnJlZSkJLyogZnJl
ZSByb3V0aW5lIGlmIG5vdCB0aGUgdXN1YWwgKi8KKwkJCSAgICAodm9pZCAqLCB2b2lkICopOwor
CXZvaWQJCSpleHRfYXJnczsJLyogb3B0aW9uYWwgYXJndW1lbnQgcG9pbnRlciAqLworCXVfaW50
CQkgZXh0X3NpemU7CS8qIHNpemUgb2YgYnVmZmVyLCBmb3IgZXh0X2ZyZWUgKi8KKwl2b2xhdGls
ZSB1X2ludAkqcmVmX2NudDsJLyogcG9pbnRlciB0byByZWYgY291bnQgaW5mbyAqLworCWludAkJ
IGV4dF90eXBlOwkvKiB0eXBlIG9mIGV4dGVybmFsIHN0b3JhZ2UgKi8KK307CisKKworLyoKKyAq
IFRoZSBjb3JlIG9mIHRoZSBtYnVmIG9iamVjdCBhbG9uZyB3aXRoIHNvbWUgc2hvcnRjdXQgZGVm
aW5lZCBmb3IgcHJhY3RpY2FsCisgKiBwdXJwb3Nlcy4KKyAqLworc3RydWN0IG1idWYgeworCXN0
cnVjdCBtX2hkcgltX2hkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJCQlzdHJ1Y3QgcGt0aGRy
CU1IX3BrdGhkcjsJLyogTV9QS1RIRFIgc2V0ICovCisJCQl1bmlvbiB7CisJCQkJc3RydWN0IG1f
ZXh0CU1IX2V4dDsJLyogTV9FWFQgc2V0ICovCisJCQkJY2hhcgkJTUhfZGF0YWJ1ZltNSExFTl07
CisJCQl9IE1IX2RhdDsKKwkJfSBNSDsKKwkJY2hhcglNX2RhdGFidWZbTUxFTl07CQkvKiAhTV9Q
S1RIRFIsICFNX0VYVCAqLworCX0gTV9kYXQ7Cit9OworCisjZGVmaW5lCW1fbmV4dAkJbV9oZHIu
bWhfbmV4dAorI2RlZmluZQltX2xlbgkJbV9oZHIubWhfbGVuCisjZGVmaW5lCW1fZGF0YQkJbV9o
ZHIubWhfZGF0YQorI2RlZmluZQltX3R5cGUJCW1faGRyLm1oX3R5cGUKKyNkZWZpbmUJbV9mbGFn
cwkJbV9oZHIubWhfZmxhZ3MKKyNkZWZpbmUJbV9uZXh0cGt0CW1faGRyLm1oX25leHRwa3QKKyNk
ZWZpbmUJbV9hY3QJCW1fbmV4dHBrdAorI2RlZmluZQltX3BrdGhkcglNX2RhdC5NSC5NSF9wa3Ro
ZHIKKyNkZWZpbmUJbV9leHQJCU1fZGF0Lk1ILk1IX2RhdC5NSF9leHQKKyNkZWZpbmUJbV9wa3Rk
YXQJTV9kYXQuTUguTUhfZGF0Lk1IX2RhdGFidWYKKyNkZWZpbmUJbV9kYXQJCU1fZGF0Lk1fZGF0
YWJ1ZgorCisKKy8qCisgKiBtYnVmIGZsYWdzLgorICovCisjZGVmaW5lCU1fRVhUCQkweDAwMDEJ
LyogaGFzIGFzc29jaWF0ZWQgZXh0ZXJuYWwgc3RvcmFnZSAqLworI2RlZmluZQlNX1BLVEhEUgkw
eDAwMDIJLyogc3RhcnQgb2YgcmVjb3JkICovCisjZGVmaW5lCU1fRU9SCQkweDAwMDQJLyogZW5k
IG9mIHJlY29yZCAqLworI2RlZmluZQlNX1JET05MWQkweDAwMDgJLyogYXNzb2NpYXRlZCBkYXRh
IGlzIG1hcmtlZCByZWFkLW9ubHkgKi8KKyNkZWZpbmUJTV9QUk9UTzEJMHgwMDEwCS8qIHByb3Rv
Y29sLXNwZWNpZmljICovCisjZGVmaW5lCU1fUFJPVE8yCTB4MDAyMAkvKiBwcm90b2NvbC1zcGVj
aWZpYyAqLworI2RlZmluZQlNX1BST1RPMwkweDAwNDAJLyogcHJvdG9jb2wtc3BlY2lmaWMgKi8K
KyNkZWZpbmUJTV9QUk9UTzQJMHgwMDgwCS8qIHByb3RvY29sLXNwZWNpZmljICovCisjZGVmaW5l
CU1fUFJPVE81CTB4MDEwMAkvKiBwcm90b2NvbC1zcGVjaWZpYyAqLworI2RlZmluZQlNX0ZSRUVM
SVNUCTB4ODAwMAkvKiBtYnVmIGlzIG9uIHRoZSBmcmVlIGxpc3QgKi8KKworCisvKgorICogRmxh
Z3MgY29waWVkIHdoZW4gY29weWluZyBtX3BrdGhkci4KKyAqLworI2RlZmluZQlNX0NPUFlGTEFH
UwkoTV9QS1RIRFJ8TV9FT1J8TV9SRE9OTFl8TV9QUk9UTzF8TV9QUk9UTzF8TV9QUk9UTzJ8XAor
CQkJICAgIE1fUFJPVE8zfE1fUFJPVE80fE1fUFJPVE81fFwKKwkJCSAgICBNX0JDQVNUfE1fTUNB
U1R8TV9GUkFHfE1fRklSU1RGUkFHfE1fTEFTVEZSQUd8XAorCQkJICAgIE1fVkxBTlRBR3xNX1BS
T01JU0MpCisKKworLyoKKyAqIG1idWYgcGt0aGRyIGZsYWdzIChhbHNvIHN0b3JlZCBpbiBtX2Zs
YWdzKS4KKyAqLworI2RlZmluZQlNX0JDQVNUCQkweDAyMDAJLyogc2VuZC9yZWNlaXZlZCBhcyBs
aW5rLWxldmVsIGJyb2FkY2FzdCAqLworI2RlZmluZQlNX01DQVNUCQkweDA0MDAJLyogc2VuZC9y
ZWNlaXZlZCBhcyBsaW5rLWxldmVsIG11bHRpY2FzdCAqLworI2RlZmluZQlNX0ZSQUcJCTB4MDgw
MAkvKiBwYWNrZXQgaXMgYSBmcmFnbWVudCBvZiBhIGxhcmdlciBwYWNrZXQgKi8KKyNkZWZpbmUJ
TV9GSVJTVEZSQUcJMHgxMDAwCS8qIHBhY2tldCBpcyBmaXJzdCBmcmFnbWVudCAqLworI2RlZmlu
ZQlNX0xBU1RGUkFHCTB4MjAwMAkvKiBwYWNrZXQgaXMgbGFzdCBmcmFnbWVudCAqLworI2RlZmlu
ZQlNX1ZMQU5UQUcJMHgxMDAwMAkvKiBldGhlcl92dGFnIGlzIHZhbGlkICovCisjZGVmaW5lCU1f
UFJPTUlTQwkweDIwMDAwCS8qIHBhY2tldCB3YXMgbm90IGZvciB1cyAqLworI2RlZmluZQlNX05P
RlJFRQkweDQwMDAwCS8qIGRvIG5vdCBmcmVlIG1idWYgLSBpdCBpcyBlbWJlZGRlZCBpbiB0aGUg
Y2x1c3RlciAqLworCisKKy8qCisgKiBFeHRlcm5hbCBidWZmZXIgdHlwZXM6IGlkZW50aWZ5IGV4
dF9idWYgdHlwZS4KKyAqLworI2RlZmluZQlFWFRfQ0xVU1RFUgkxCS8qIG1idWYgY2x1c3RlciAq
LworI2RlZmluZQlFWFRfU0ZCVUYJMgkvKiBzZW5kZmlsZSgyKSdzIHNmX2J1ZnMgKi8KKyNkZWZp
bmUJRVhUX0pVTUJPUAkzCS8qIGp1bWJvIGNsdXN0ZXIgNDA5NiBieXRlcyAqLworI2RlZmluZQlF
WFRfSlVNQk85CTQJLyoganVtYm8gY2x1c3RlciA5MjE2IGJ5dGVzICovCisjZGVmaW5lCUVYVF9K
VU1CTzE2CTUJLyoganVtYm8gY2x1c3RlciAxNjE4NCBieXRlcyAqLworI2RlZmluZQlFWFRfUEFD
S0VUCTYJLyogbWJ1ZitjbHVzdGVyIGZyb20gcGFja2V0IHpvbmUgKi8KKyNkZWZpbmUJRVhUX01C
VUYJNwkvKiBleHRlcm5hbCBtYnVmIHJlZmVyZW5jZSAoTV9JT1ZFQykgKi8KKyNkZWZpbmUJRVhU
X05FVF9EUlYJMTAwCS8qIGN1c3RvbSBleHRfYnVmIHByb3ZpZGVkIGJ5IG5ldCBkcml2ZXIocykg
Ki8KKyNkZWZpbmUJRVhUX01PRF9UWVBFCTIwMAkvKiBjdXN0b20gbW9kdWxlJ3MgZXh0X2J1ZiB0
eXBlICovCisjZGVmaW5lCUVYVF9ESVNQT1NBQkxFCTMwMAkvKiBjYW4gdGhyb3cgdGhpcyBidWZm
ZXIgYXdheSB3L3BhZ2UgZmxpcHBpbmcgKi8KKyNkZWZpbmUJRVhUX0VYVFJFRgk0MDAJLyogaGFz
IGV4dGVybmFsbHkgbWFpbnRhaW5lZCByZWZfY250IHB0ciAqLworCisKKy8qCisgKiBtYnVmIHR5
cGVzLgorICovCisjZGVmaW5lCU1UX05PVE1CVUYJMAkvKiBVU0VEIElOVEVSTkFMTFkgT05MWSEg
T2JqZWN0IGlzIG5vdCBtYnVmICovCisjZGVmaW5lCU1UX0RBVEEJCTEJLyogZHluYW1pYyAoZGF0
YSkgYWxsb2NhdGlvbiAqLworI2RlZmluZQlNVF9IRUFERVIJTVRfREFUQQkvKiBwYWNrZXQgaGVh
ZGVyLCB1c2UgTV9QS1RIRFIgaW5zdGVhZCAqLworI2RlZmluZQlNVF9TT05BTUUJOAkvKiBzb2Nr
ZXQgbmFtZSAqLworI2RlZmluZQlNVF9DT05UUk9MCTE0CS8qIGV4dHJhLWRhdGEgcHJvdG9jb2wg
bWVzc2FnZSAqLworI2RlZmluZQlNVF9PT0JEQVRBCTE1CS8qIGV4cGVkaXRlZCBkYXRhICAqLwor
I2RlZmluZQlNVF9OVFlQRVMJMTYJLyogbnVtYmVyIG9mIG1idWYgdHlwZXMgZm9yIG1idHlwZXNb
XSAqLworCisjZGVmaW5lCU1UX05PSU5JVAkyNTUJLyogTm90IGEgdHlwZSBidXQgYSBmbGFnIHRv
IGFsbG9jYXRlCisJCQkJICAgYSBub24taW5pdGlhbGl6ZWQgbWJ1ZiAqLworCisvKgorICogX19V
c2Vyc3BhY2VfXyBmbGFncyBsaWtlIE1fTk9XQUlUIGFyZSBkZWZpbmVkIGluIG1hbGxvYy5oCisg
KiBGbGFncyBsaWtlIHRoZXNlIGFyZSB1c2VkIGluIGZ1bmN0aW9ucyBsaWtlIHVtYV96YWxsb2Mo
KQorICogYnV0IGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBpbiB1c2VybGFuZCB1bWVtCisgKiBG
bGFncyBzcGVjaWZ5aW5nIGhvdyBhbiBhbGxvY2F0aW9uIHNob3VsZCBiZSBtYWRlLgorICoKKyAq
IFRoZSBmbGFnIHRvIHVzZSBpcyBhcyBmb2xsb3dzOgorICogLSBNX0RPTlRXQUlUIG9yIE1fTk9X
QUlUIGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gbm90IGJsb2NrIGFsbG9jYXRpb24uCisg
KiAtIE1fV0FJVCBvciBNX1dBSVRPSyBvciBNX1RSWVdBSVQgZnJvbSB3aGVyZXZlciBpdCBpcyBz
YWZlIHRvIGJsb2NrLgorICoKKyAqIE1fRE9OVFdBSVQvTV9OT1dBSVQgbWVhbnMgdGhhdCB3ZSB3
aWxsIG5vdCBibG9jayB0aGUgdGhyZWFkIGV4cGxpY2l0bHkgYW5kCisgKiBpZiB3ZSBjYW5ub3Qg
YWxsb2NhdGUgaW1tZWRpYXRlbHkgd2UgbWF5IHJldHVybiBOVUxMLCB3aGVyZWFzCisgKiBNX1dB
SVQvTV9XQUlUT0svTV9UUllXQUlUIG1lYW5zIHRoYXQgaWYgd2UgY2Fubm90IGFsbG9jYXRlIHJl
c291cmNlcyB3ZQorICogd2lsbCBibG9jayB1bnRpbCB0aGV5IGFyZSBhdmFpbGFibGUsIGFuZCB0
aHVzIG5ldmVyIHJldHVybiBOVUxMLgorICoKKyAqIFhYWCBFdmVudHVhbGx5IGp1c3QgcGhhc2Ug
dGhpcyBvdXQgdG8gdXNlIE1fV0FJVE9LL01fTk9XQUlULgorICovCisjZGVmaW5lCU1CVE9NKGhv
dykJKGhvdykKKwordm9pZAkJIG1fdGFnX2RlbGV0ZShzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbV90
YWcgKik7Cit2b2lkCQkgbV90YWdfZGVsZXRlX2NoYWluKHN0cnVjdCBtYnVmICosIHN0cnVjdCBt
X3RhZyAqKTsKK3ZvaWQJCSBtX21vdmVfcGt0aGRyKHN0cnVjdCBtYnVmICosIHN0cnVjdCBtYnVm
ICopOwordm9pZAkJIG1fdGFnX2ZyZWVfZGVmYXVsdChzdHJ1Y3QgbV90YWcgKik7CisKK2V4dGVy
biBpbnQgbWF4X2xpbmtoZHI7ICAgIC8qIExhcmdlc3QgbGluay1sZXZlbCBoZWFkZXIgKi8KK2V4
dGVybiBpbnQgbWF4X3Byb3RvaGRyOyAvKiBTaXplIG9mIGxhcmdlc3QgcHJvdG9jb2wgbGF5ZXIg
aGVhZGVyLiBTZWUgdXNlcl9tYnVmLmMgKi8KKworZXh0ZXJuIHN0cnVjdCBtYnN0YXQJbWJzdGF0
OwkJLyogR2VuZXJhbCBtYnVmIHN0YXRzL2luZm9zICovCisKKworLyoKKyAqIEV2YWx1YXRlIFRS
VUUgaWYgaXQncyBzYWZlIHRvIHdyaXRlIHRvIHRoZSBtYnVmIG0ncyBkYXRhIHJlZ2lvbiAodGhp
cyBjYW4KKyAqIGJlIGJvdGggdGhlIGxvY2FsIGRhdGEgcGF5bG9hZCwgb3IgYW4gZXh0ZXJuYWwg
YnVmZmVyIGFyZWEsIGRlcGVuZGluZyBvbgorICogd2hldGhlciBNX0VYVCBpcyBzZXQpLgorICov
CisjZGVmaW5lCU1fV1JJVEFCTEUobSkJKCEoKG0pLT5tX2ZsYWdzICYgTV9SRE9OTFkpICYmCQkJ
XAorCQkJICghKCgobSktPm1fZmxhZ3MgJiBNX0VYVCkpIHx8CQkJXAorCQkJICgqKChtKS0+bV9l
eHQucmVmX2NudCkgPT0gMSkpICkJCVwKKworCisvKgorICogQ29tcHV0ZSB0aGUgYW1vdW50IG9m
IHNwYWNlIGF2YWlsYWJsZSBiZWZvcmUgdGhlIGN1cnJlbnQgc3RhcnQgb2YgZGF0YSBpbgorICog
YW4gbWJ1Zi4KKyAqCisgKiBUaGUgTV9XUklUQUJMRSgpIGlzIGEgdGVtcG9yYXJ5LCBjb25zZXJ2
YXRpdmUgc2FmZXR5IG1lYXN1cmU6IHRoZSBidXJkZW4KKyAqIG9mIGNoZWNraW5nIHdyaXRhYmls
aXR5IG9mIHRoZSBtYnVmIGRhdGEgYXJlYSByZXN0cyBzb2xlbHkgd2l0aCB0aGUgY2FsbGVyLgor
ICovCisjZGVmaW5lCU1fTEVBRElOR1NQQUNFKG0pCQkJCQkJXAorCSgobSktPm1fZmxhZ3MgJiBN
X0VYVCA/CQkJCQkJXAorCSAgICAoTV9XUklUQUJMRShtKSA/IChtKS0+bV9kYXRhIC0gKG0pLT5t
X2V4dC5leHRfYnVmIDogMCk6CVwKKwkgICAgKG0pLT5tX2ZsYWdzICYgTV9QS1RIRFIgPyAobSkt
Pm1fZGF0YSAtIChtKS0+bV9wa3RkYXQgOglcCisJICAgIChtKS0+bV9kYXRhIC0gKG0pLT5tX2Rh
dCkKKworLyoKKyAqIENvbXB1dGUgdGhlIGFtb3VudCBvZiBzcGFjZSBhdmFpbGFibGUgYWZ0ZXIg
dGhlIGVuZCBvZiBkYXRhIGluIGFuIG1idWYuCisgKgorICogVGhlIE1fV1JJVEFCTEUoKSBpcyBh
IHRlbXBvcmFyeSwgY29uc2VydmF0aXZlIHNhZmV0eSBtZWFzdXJlOiB0aGUgYnVyZGVuCisgKiBv
ZiBjaGVja2luZyB3cml0YWJpbGl0eSBvZiB0aGUgbWJ1ZiBkYXRhIGFyZWEgcmVzdHMgc29sZWx5
IHdpdGggdGhlIGNhbGxlci4KKyAqLworI2RlZmluZQlNX1RSQUlMSU5HU1BBQ0UobSkJCQkJCQlc
CisJKChtKS0+bV9mbGFncyAmIE1fRVhUID8JCQkJCQlcCisJICAgIChNX1dSSVRBQkxFKG0pID8g
KG0pLT5tX2V4dC5leHRfYnVmICsgKG0pLT5tX2V4dC5leHRfc2l6ZQlcCisJCS0gKChtKS0+bV9k
YXRhICsgKG0pLT5tX2xlbikgOiAwKSA6CQkJXAorCSAgICAmKG0pLT5tX2RhdFtNTEVOXSAtICgo
bSktPm1fZGF0YSArIChtKS0+bV9sZW4pKQorCisKKworLyoKKyAqIEFycmFuZ2UgdG8gcHJlcGVu
ZCBzcGFjZSBvZiBzaXplIHBsZW4gdG8gbWJ1ZiBtLiAgSWYgYSBuZXcgbWJ1ZiBtdXN0IGJlCisg
KiBhbGxvY2F0ZWQsIGhvdyBzcGVjaWZpZXMgd2hldGhlciB0byB3YWl0LiAgSWYgdGhlIGFsbG9j
YXRpb24gZmFpbHMsIHRoZQorICogb3JpZ2luYWwgbWJ1ZiBjaGFpbiBpcyBmcmVlZCBhbmQgbSBp
cyBzZXQgdG8gTlVMTC4KKyAqLworI2RlZmluZQlNX1BSRVBFTkQobSwgcGxlbiwgaG93KSBkbyB7
CQkJCQlcCisJc3RydWN0IG1idWYgKipfbW1wID0gJihtKTsJCQkJCVwKKwlzdHJ1Y3QgbWJ1ZiAq
X21tID0gKl9tbXA7CQkJCQlcCisJaW50IF9tcGxlbiA9IChwbGVuKTsJCQkJCQlcCisJaW50IF9f
bWhvdyA9IChob3cpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoTV9MRUFESU5HU1BBQ0UoX21t
KSA+PSBfbXBsZW4pIHsJCQkJXAorCQlfbW0tPm1fZGF0YSAtPSBfbXBsZW47CQkJCQlcCisJCV9t
bS0+bV9sZW4gKz0gX21wbGVuOwkJCQkJXAorCX0gZWxzZQkJCQkJCQkJXAorCQlfbW0gPSBtX3By
ZXBlbmQoX21tLCBfbXBsZW4sIF9fbWhvdyk7CQkJXAorCWlmIChfbW0gIT0gTlVMTCAmJiBfbW0t
Pm1fZmxhZ3MgJiBNX1BLVEhEUikJCQlcCisJCV9tbS0+bV9wa3RoZHIubGVuICs9IF9tcGxlbjsJ
CQkJXAorCSpfbW1wID0gX21tOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisvKgorICogU2V0IHRo
ZSBtX2RhdGEgcG9pbnRlciBvZiBhIG5ld2x5LWFsbG9jYXRlZCBtYnVmIChtX2dldC9NR0VUKSB0
byBwbGFjZSBhbgorICogb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgc2l6ZSBhdCB0aGUgZW5kIG9m
IHRoZSBtYnVmLCBsb25nd29yZCBhbGlnbmVkLgorICovCisjZGVmaW5lCU1fQUxJR04obSwgbGVu
KSBkbyB7CQkJCQkJXAorICAgICAgICBLQVNTRVJUKCEoKG0pLT5tX2ZsYWdzICYgKE1fUEtUSERS
fE1fRVhUKSksICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXM6IE1f
QUxJR04gbm90IG5vcm1hbCBtYnVmIiwgX19mdW5jX18pKTsgICAgICAgICAgICAgXAorICAgICAg
ICBLQVNTRVJUKChtKS0+bV9kYXRhID09IChtKS0+bV9kYXQsICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXM6IE1fQUxJR04gbm90IGEgdmlyZ2luIG1i
dWYiLCBfX2Z1bmNfXykpOyAgICAgICAgICAgXAorCShtKS0+bV9kYXRhICs9IChNTEVOIC0gKGxl
bikpICYgfihzaXplb2YobG9uZykgLSAxKTsJCVwKK30gd2hpbGUgKDApCisKKy8qCisgKiBBcyBh
Ym92ZSwgZm9yIG1idWZzIGFsbG9jYXRlZCB3aXRoIG1fZ2V0aGRyL01HRVRIRFIgb3IgaW5pdGlh
bGl6ZWQgYnkKKyAqIE1fRFVQL01PVkVfUEtUSERSLgorICovCisjZGVmaW5lCU1IX0FMSUdOKG0s
IGxlbikgZG8gewkJCQkJCVwKKyAgICAgICAgS0FTU0VSVCgobSktPm1fZmxhZ3MgJiBNX1BLVEhE
UiAmJiAhKChtKS0+bV9mbGFncyAmIE1fRVhUKSwgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVz
OiBNSF9BTElHTiBub3QgUEtUSERSIG1idWYiLCBfX2Z1bmNfXykpOyAgICAgICAgICAgIFwKKyAg
ICAgICAgS0FTU0VSVCgobSktPm1fZGF0YSA9PSAobSktPm1fcGt0ZGF0LCAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVzOiBNSF9BTElHTiBub3QgYSB2aXJn
aW4gbWJ1ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgIFwKKwkobSktPm1fZGF0YSArPSAoTUhMRU4g
LSAobGVuKSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwkJXAorfSB3aGlsZSAoMCkKKworI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcXVldWUuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLjQ0Zjg5OTQ5MDI2NjE5MGI4Yzc4NjFhYjAyYjI3ZmY3MzJiMjE3ZGQg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCkBAIC0wLDAgKzEsNjM5IEBACisvKi0KKyAqIENv
cHlyaWdodCAoYykgMTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkg
b2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0
aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRy
aWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV
Q0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9VU0VSX1FVRVVFX0hfCisjZGVmaW5lCV9V
U0VSX1FVRVVFX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBmb3VyIHR5cGVzIG9mIGRh
dGEgc3RydWN0dXJlczogc2luZ2x5LWxpbmtlZCBsaXN0cywKKyAqIHNpbmdseS1saW5rZWQgdGFp
bCBxdWV1ZXMsIGxpc3RzIGFuZCB0YWlsIHF1ZXVlcy4KKyAqCisgKiBBIHNpbmdseS1saW5rZWQg
bGlzdCBpcyBoZWFkZWQgYnkgYSBzaW5nbGUgZm9yd2FyZCBwb2ludGVyLiBUaGUgZWxlbWVudHMK
KyAqIGFyZSBzaW5nbHkgbGlua2VkIGZvciBtaW5pbXVtIHNwYWNlIGFuZCBwb2ludGVyIG1hbmlw
dWxhdGlvbiBvdmVyaGVhZCBhdAorICogdGhlIGV4cGVuc2Ugb2YgTyhuKSByZW1vdmFsIGZvciBh
cmJpdHJhcnkgZWxlbWVudHMuIE5ldyBlbGVtZW50cyBjYW4gYmUKKyAqIGFkZGVkIHRvIHRoZSBs
aXN0IGFmdGVyIGFuIGV4aXN0aW5nIGVsZW1lbnQgb3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3Qu
CisgKiBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIGxpc3Qgc2hv
dWxkIHVzZSB0aGUgZXhwbGljaXQKKyAqIG1hY3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGlt
dW0gZWZmaWNpZW5jeS4gQSBzaW5nbHktbGlua2VkIGxpc3QgbWF5CisgKiBvbmx5IGJlIHRyYXZl
cnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uICBTaW5nbHktbGlua2VkIGxpc3RzIGFyZSBp
ZGVhbAorICogZm9yIGFwcGxpY2F0aW9ucyB3aXRoIGxhcmdlIGRhdGFzZXRzIGFuZCBmZXcgb3Ig
bm8gcmVtb3ZhbHMgb3IgZm9yCisgKiBpbXBsZW1lbnRpbmcgYSBMSUZPIHF1ZXVlLgorICoKKyAq
IEEgc2luZ2x5LWxpbmtlZCB0YWlsIHF1ZXVlIGlzIGhlYWRlZCBieSBhIHBhaXIgb2YgcG9pbnRl
cnMsIG9uZSB0byB0aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QgYW5kIHRoZSBvdGhlciB0byB0aGUg
dGFpbCBvZiB0aGUgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZQorICogc2luZ2x5IGxpbmtlZCBmb3Ig
bWluaW11bSBzcGFjZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQgdGhlCisg
KiBleHBlbnNlIG9mIE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcgZWxl
bWVudHMgY2FuIGJlIGFkZGVkCisgKiB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBlbGVt
ZW50LCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlCisgKiBlbmQgb2YgdGhlIGxp
c3QuIEVsZW1lbnRzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgaGVhZCBvZiB0aGUgdGFpbCBxdWV1
ZQorICogc2hvdWxkIHVzZSB0aGUgZXhwbGljaXQgbWFjcm8gZm9yIHRoaXMgcHVycG9zZSBmb3Ig
b3B0aW11bSBlZmZpY2llbmN5LgorICogQSBzaW5nbHktbGlua2VkIHRhaWwgcXVldWUgbWF5IG9u
bHkgYmUgdHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KKyAqIFNpbmdseS1saW5r
ZWQgdGFpbCBxdWV1ZXMgYXJlIGlkZWFsIGZvciBhcHBsaWNhdGlvbnMgd2l0aCBsYXJnZSBkYXRh
c2V0cworICogYW5kIGZldyBvciBubyByZW1vdmFscyBvciBmb3IgaW1wbGVtZW50aW5nIGEgRklG
TyBxdWV1ZS4KKyAqCisgKiBBIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2luZ2xlIGZvcndhcmQgcG9p
bnRlciAob3IgYW4gYXJyYXkgb2YgZm9yd2FyZAorICogcG9pbnRlcnMgZm9yIGEgaGFzaCB0YWJs
ZSBoZWFkZXIpLiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQKKyAqIHNvIHRoYXQgYW4g
YXJiaXRyYXJ5IGVsZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KKyAqIHRy
YXZlcnNlIHRoZSBsaXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJl
Zm9yZQorICogb3IgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCBvciBhdCB0aGUgaGVhZCBvZiB0
aGUgbGlzdC4gQSBsaXN0CisgKiBtYXkgb25seSBiZSB0cmF2ZXJzZWQgaW4gdGhlIGZvcndhcmQg
ZGlyZWN0aW9uLgorICoKKyAqIEEgdGFpbCBxdWV1ZSBpcyBoZWFkZWQgYnkgYSBwYWlyIG9mIHBv
aW50ZXJzLCBvbmUgdG8gdGhlIGhlYWQgb2YgdGhlCisgKiBsaXN0IGFuZCB0aGUgb3RoZXIgdG8g
dGhlIHRhaWwgb2YgdGhlIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUgZG91Ymx5CisgKiBsaW5rZWQg
c28gdGhhdCBhbiBhcmJpdHJhcnkgZWxlbWVudCBjYW4gYmUgcmVtb3ZlZCB3aXRob3V0IGEgbmVl
ZCB0bworICogdHJhdmVyc2UgdGhlIGxpc3QuIE5ldyBlbGVtZW50cyBjYW4gYmUgYWRkZWQgdG8g
dGhlIGxpc3QgYmVmb3JlIG9yCisgKiBhZnRlciBhbiBleGlzdGluZyBlbGVtZW50LCBhdCB0aGUg
aGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlIGVuZCBvZgorICogdGhlIGxpc3QuIEEgdGFpbCBx
dWV1ZSBtYXkgYmUgdHJhdmVyc2VkIGluIGVpdGhlciBkaXJlY3Rpb24uCisgKgorICogRm9yIGRl
dGFpbHMgb24gdGhlIHVzZSBvZiB0aGVzZSBtYWNyb3MsIHNlZSB0aGUgcXVldWUoMykgbWFudWFs
IHBhZ2UuCisgKgorICoKKyAqCQkJCVNMSVNUCUxJU1QJU1RBSUxRCVRBSUxRCisgKiBfSEVBRAkJ
CSsJKwkrCSsKKyAqIF9IRUFEX0lOSVRJQUxJWkVSCQkrCSsJKwkrCisgKiBfRU5UUlkJCQkrCSsJ
KwkrCisgKiBfSU5JVAkJCSsJKwkrCSsKKyAqIF9FTVBUWQkJCSsJKwkrCSsKKyAqIF9GSVJTVAkJ
CSsJKwkrCSsKKyAqIF9ORVhUCQkJKwkrCSsJKworICogX1BSRVYJCQktCS0JLQkrCisgKiBfTEFT
VAkJCS0JLQkrCSsKKyAqIF9GT1JFQUNICQkJKwkrCSsJKworICogX0ZPUkVBQ0hfU0FGRQkJKwkr
CSsJKworICogX0ZPUkVBQ0hfUkVWRVJTRQkJLQktCS0JKworICogX0ZPUkVBQ0hfUkVWRVJTRV9T
QUZFCS0JLQktCSsKKyAqIF9JTlNFUlRfSEVBRAkJCSsJKwkrCSsKKyAqIF9JTlNFUlRfQkVGT1JF
CQktCSsJLQkrCisgKiBfSU5TRVJUX0FGVEVSCQkrCSsJKwkrCisgKiBfSU5TRVJUX1RBSUwJCQkt
CS0JKwkrCisgKiBfQ09OQ0FUCQkJLQktCSsJKworICogX1JFTU9WRV9BRlRFUgkJKwktCSsJLQor
ICogX1JFTU9WRV9IRUFECQkJKwktCSsJLQorICogX1JFTU9WRQkJCSsJKwkrCSsKKyAqIF9TV0FQ
CQkJKwkrCSsJKworICoKKyAqLworI2lmZGVmIFFVRVVFX01BQ1JPX0RFQlVHCisvKiBTdG9yZSB0
aGUgbGFzdCAyIHBsYWNlcyB0aGUgcXVldWUgZWxlbWVudCBvciBoZWFkIHdhcyBhbHRlcmVkICov
CitzdHJ1Y3QgcW1fdHJhY2UgeworCWNoYXIgKiBsYXN0ZmlsZTsKKwlpbnQgbGFzdGxpbmU7CisJ
Y2hhciAqIHByZXZmaWxlOworCWludCBwcmV2bGluZTsKK307CisKKyNkZWZpbmUJVFJBQ0VCVUYJ
c3RydWN0IHFtX3RyYWNlIHRyYWNlOworI2RlZmluZQlUUkFTSElUKHgpCWRvIHsoeCkgPSAodm9p
ZCAqKS0xO30gd2hpbGUgKDApCisjZGVmaW5lCVFNRF9TQVZFTElOSyhuYW1lLCBsaW5rKQl2b2lk
ICoqbmFtZSA9ICh2b2lkICopJihsaW5rKQorCisjZGVmaW5lCVFNRF9UUkFDRV9IRUFEKGhlYWQp
IGRvIHsJCQkJCVwKKwkoaGVhZCktPnRyYWNlLnByZXZsaW5lID0gKGhlYWQpLT50cmFjZS5sYXN0
bGluZTsJCVwKKwkoaGVhZCktPnRyYWNlLnByZXZmaWxlID0gKGhlYWQpLT50cmFjZS5sYXN0Zmls
ZTsJCVwKKwkoaGVhZCktPnRyYWNlLmxhc3RsaW5lID0gX19MSU5FX187CQkJCVwKKwkoaGVhZCkt
PnRyYWNlLmxhc3RmaWxlID0gX19GSUxFX187CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJ
UU1EX1RSQUNFX0VMRU0oZWxlbSkgZG8gewkJCQkJXAorCShlbGVtKS0+dHJhY2UucHJldmxpbmUg
PSAoZWxlbSktPnRyYWNlLmxhc3RsaW5lOwkJXAorCShlbGVtKS0+dHJhY2UucHJldmZpbGUgPSAo
ZWxlbSktPnRyYWNlLmxhc3RmaWxlOwkJXAorCShlbGVtKS0+dHJhY2UubGFzdGxpbmUgPSBfX0xJ
TkVfXzsJCQkJXAorCShlbGVtKS0+dHJhY2UubGFzdGZpbGUgPSBfX0ZJTEVfXzsJCQkJXAorfSB3
aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUJUU1EX1RSQUNFX0VMRU0oZWxlbSkKKyNkZWZpbmUJ
UU1EX1RSQUNFX0hFQUQoaGVhZCkKKyNkZWZpbmUJUU1EX1NBVkVMSU5LKG5hbWUsIGxpbmspCisj
ZGVmaW5lCVRSQUNFQlVGCisjZGVmaW5lCVRSQVNISVQoeCkKKyNlbmRpZgkvKiBRVUVVRV9NQUNS
T19ERUJVRyAqLworCisvKgorICogU2luZ2x5LWxpbmtlZCBMaXN0IGRlY2xhcmF0aW9ucy4KKyAq
LworI2RlZmluZQlTTElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJ
CQkJCQkJXAorCXN0cnVjdCB0eXBlICpzbGhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlc
Cit9CisKKyNkZWZpbmUJU0xJU1RfSEVBRF9JTklUSUFMSVpFUihoZWFkKQkJCQkJXAorCXsgTlVM
TCB9CisKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmIGRlZmluZWQg
KFNMSVNUX0VOVFJZKQorI3VuZGVmIFNMSVNUX0VOVFJZCisjZW5kaWYKKyNlbmRpZgorCisjZGVm
aW5lCVNMSVNUX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3Qg
dHlwZSAqc2xlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKK30KKworLyoKKyAqIFNpbmds
eS1saW5rZWQgTGlzdCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJU0xJU1RfRU1QVFkoaGVhZCkJ
KChoZWFkKS0+c2xoX2ZpcnN0ID09IE5VTEwpCisKKyNkZWZpbmUJU0xJU1RfRklSU1QoaGVhZCkJ
KChoZWFkKS0+c2xoX2ZpcnN0KQorCisjZGVmaW5lCVNMSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBm
aWVsZCkJCQkJCVwKKwlmb3IgKCh2YXIpID0gU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAg
ICAodmFyKTsJCQkJCQkJXAorCSAgICAodmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSkK
KworI2RlZmluZQlTTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlc
CisJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcikgJiYg
KCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0g
KHR2YXIpKQorCisjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfUFJFVlBUUih2YXIsIHZhcnAsIGhlYWQs
IGZpZWxkKQkJCVwKKwlmb3IgKCh2YXJwKSA9ICZTTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisJ
ICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7CQkJCQlcCisJICAgICh2YXJwKSA9ICZTTElT
VF9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZpbmUJU0xJU1RfSU5JVChoZWFkKSBkbyB7CQkJ
CQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAorfSB3aGlsZSAoMCkKKwor
I2RlZmluZQlTTElTVF9JTlNFUlRfQUZURVIoc2xpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlc
CisJU0xJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gU0xJU1RfTkVYVCgoc2xpc3RlbG0pLCBmaWVs
ZCk7CVwKKwlTTElTVF9ORVhUKChzbGlzdGVsbSksIGZpZWxkKSA9IChlbG0pOwkJCQlcCit9IHdo
aWxlICgwKQorCisjZGVmaW5lCVNMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRv
IHsJCQlcCisJU0xJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gU0xJU1RfRklSU1QoKGhlYWQpKTsJ
CQlcCisJU0xJU1RfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJCQkJXAorfSB3aGlsZSAoMCkKKwor
I2RlZmluZQlTTElTVF9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQuc2xlX25leHQpCisK
KyNkZWZpbmUJU0xJU1RfUkVNT1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmllbGQpIGRvIHsJCQlcCisJ
UU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5zbGVfbmV4dCk7CQkJXAorCWlmIChT
TElTVF9GSVJTVCgoaGVhZCkpID09IChlbG0pKSB7CQkJCVwKKwkJU0xJU1RfUkVNT1ZFX0hFQUQo
KGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJc3Ry
dWN0IHR5cGUgKmN1cmVsbSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQlcCisJCXdoaWxlIChTTElT
VF9ORVhUKGN1cmVsbSwgZmllbGQpICE9IChlbG0pKQkJXAorCQkJY3VyZWxtID0gU0xJU1RfTkVY
VChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU0xJU1RfUkVNT1ZFX0FGVEVSKGN1cmVsbSwgZmllbGQp
OwkJCVwKKwl9CQkJCQkJCQlcCisJVFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAorfSB3aGlsZSAo
MCkKKworI2RlZmluZSBTTElTVF9SRU1PVkVfQUZURVIoZWxtLCBmaWVsZCkgZG8gewkJCQlcCisJ
U0xJU1RfTkVYVChlbG0sIGZpZWxkKSA9CQkJCQlcCisJICAgIFNMSVNUX05FWFQoU0xJU1RfTkVY
VChlbG0sIGZpZWxkKSwgZmllbGQpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU0xJU1Rf
UkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkg
PSBTTElTVF9ORVhUKFNMSVNUX0ZJUlNUKChoZWFkKSksIGZpZWxkKTsJXAorfSB3aGlsZSAoMCkK
KworI2RlZmluZSBTTElTVF9TV0FQKGhlYWQxLCBoZWFkMiwgdHlwZSkgZG8gewkJCQlcCisJc3Ry
dWN0IHR5cGUgKnN3YXBfZmlyc3QgPSBTTElTVF9GSVJTVChoZWFkMSk7CQkJXAorCVNMSVNUX0ZJ
UlNUKGhlYWQxKSA9IFNMSVNUX0ZJUlNUKGhlYWQyKTsJCQlcCisJU0xJU1RfRklSU1QoaGVhZDIp
ID0gc3dhcF9maXJzdDsJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIFNpbmdseS1saW5rZWQg
VGFpbCBxdWV1ZSBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJU1RBSUxRX0hFQUQobmFtZSwg
dHlwZSkJCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJc3RydWN0IHR5cGUgKnN0cWhf
Zmlyc3Q7LyogZmlyc3QgZWxlbWVudCAqLwkJCVwKKwlzdHJ1Y3QgdHlwZSAqKnN0cWhfbGFzdDsv
KiBhZGRyIG9mIGxhc3QgbmV4dCBlbGVtZW50ICovCQlcCit9CisKKyNkZWZpbmUJU1RBSUxRX0hF
QURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwsICYoaGVhZCkuc3RxaF9maXJzdCB9
CisKKyNkZWZpbmUJU1RBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwK
KwlzdHJ1Y3QgdHlwZSAqc3RxZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCit9CisKKy8q
CisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZnVuY3Rpb25zLgorICovCisjZGVmaW5lCVNU
QUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7CQkJCVwKKwlpZiAoIVNUQUlMUV9FTVBUWSgo
aGVhZDIpKSkgewkJCQkJXAorCQkqKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9m
aXJzdDsJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJXAor
CQlTVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQor
CisjZGVmaW5lCVNUQUlMUV9FTVBUWShoZWFkKQkoKGhlYWQpLT5zdHFoX2ZpcnN0ID09IE5VTEwp
CisKKyNkZWZpbmUJU1RBSUxRX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnN0cWhfZmlyc3QpCisKKyNk
ZWZpbmUJU1RBSUxRX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJXAorCWZvcigodmFyKSA9
IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgKHZhcik7CQkJCQkJCVwKKwkgICAodmFy
KSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKworI2RlZmluZQlTVEFJTFFfRk9SRUFD
SF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAoKHZhcikgPSBTVEFJTFFf
RklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIpID0gU1RBSUxRX05FWFQo
KHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCVNU
QUlMUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJU1RBSUxRX0ZJUlNUKChoZWFkKSkgPSBOVUxM
OwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCVwK
K30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VSVF9BRlRFUihoZWFkLCB0cWVsbSwg
ZWxtLCBmaWVsZCkgZG8gewkJXAorCWlmICgoU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFNU
QUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSkgPT0gTlVMTClcCisJCShoZWFkKS0+c3RxaF9sYXN0
ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJU1RBSUxRX05FWFQoKHRxZWxtKSwg
ZmllbGQpID0gKGVsbSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VS
VF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKChTVEFJTFFfTkVYVCgoZWxt
KSwgZmllbGQpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSkpID09IE5VTEwpCVwKKwkJKGhlYWQpLT5z
dHFoX2xhc3QgPSAmU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwlTVEFJTFFfRklSU1Qo
KGhlYWQpKSA9IChlbG0pOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfSU5T
RVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlTVEFJTFFfTkVYVCgoZWxtKSwg
ZmllbGQpID0gTlVMTDsJCQkJXAorCSooaGVhZCktPnN0cWhfbGFzdCA9IChlbG0pOwkJCQkJXAor
CShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQkJXAorfSB3
aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfTEFTVChoZWFkLCB0eXBlLCBmaWVsZCkJCQkJCVwK
KwkoU1RBSUxRX0VNUFRZKChoZWFkKSkgPwkJCQkJCVwKKwkJTlVMTCA6CQkJCQkJCVwKKwkgICAg
ICAgICgoc3RydWN0IHR5cGUgKikodm9pZCAqKQkJCQlcCisJCSgoY2hhciAqKSgoaGVhZCktPnN0
cWhfbGFzdCkgLSBfX29mZnNldG9mKHN0cnVjdCB0eXBlLCBmaWVsZCkpKSkKKworI2RlZmluZQlT
VEFJTFFfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLnN0cWVfbmV4dCkKKworI2RlZmlu
ZQlTVEFJTFFfUkVNT1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmllbGQpIGRvIHsJCQlcCisJUU1EX1NB
VkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5zdHFlX25leHQpOwkJCVwKKwlpZiAoU1RBSUxR
X0ZJUlNUKChoZWFkKSkgPT0gKGVsbSkpIHsJCQkJXAorCQlTVEFJTFFfUkVNT1ZFX0hFQUQoKGhl
YWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJc3RydWN0
IHR5cGUgKmN1cmVsbSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJXAorCQl3aGlsZSAoU1RBSUxR
X05FWFQoY3VyZWxtLCBmaWVsZCkgIT0gKGVsbSkpCQlcCisJCQljdXJlbG0gPSBTVEFJTFFfTkVY
VChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU1RBSUxRX1JFTU9WRV9BRlRFUihoZWFkLCBjdXJlbG0s
IGZpZWxkKTsJCVwKKwl9CQkJCQkJCQlcCisJVFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAorfSB3
aGlsZSAoMCkKKworI2RlZmluZSBTVEFJTFFfUkVNT1ZFX0FGVEVSKGhlYWQsIGVsbSwgZmllbGQp
IGRvIHsJCQlcCisJaWYgKChTVEFJTFFfTkVYVChlbG0sIGZpZWxkKSA9CQkJCQlcCisJICAgICBT
VEFJTFFfTkVYVChTVEFJTFFfTkVYVChlbG0sIGZpZWxkKSwgZmllbGQpKSA9PSBOVUxMKQlcCisJ
CShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCit9IHdo
aWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9SRU1PVkVfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJ
CQlcCisJaWYgKChTVEFJTFFfRklSU1QoKGhlYWQpKSA9CQkJCQlcCisJICAgICBTVEFJTFFfTkVY
VChTVEFJTFFfRklSU1QoKGhlYWQpKSwgZmllbGQpKSA9PSBOVUxMKQkJXAorCQkoaGVhZCktPnN0
cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQpKTsJCVwKK30gd2hpbGUgKDApCisKKyNkZWZp
bmUgU1RBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlKSBkbyB7CQkJCVwKKwlzdHJ1Y3QgdHlw
ZSAqc3dhcF9maXJzdCA9IFNUQUlMUV9GSVJTVChoZWFkMSk7CQkJXAorCXN0cnVjdCB0eXBlICoq
c3dhcF9sYXN0ID0gKGhlYWQxKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDEp
ID0gU1RBSUxRX0ZJUlNUKGhlYWQyKTsJCQlcCisJKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQy
KS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJ
XAorCShoZWFkMiktPnN0cWhfbGFzdCA9IHN3YXBfbGFzdDsJCQkJCVwKKwlpZiAoU1RBSUxRX0VN
UFRZKGhlYWQxKSkJCQkJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJTVCho
ZWFkMSk7CQlcCisJaWYgKFNUQUlMUV9FTVBUWShoZWFkMikpCQkJCQlcCisJCShoZWFkMiktPnN0
cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoaGVhZDIpOwkJXAorfSB3aGlsZSAoMCkKKworCisvKgor
ICogTGlzdCBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJTElTVF9IRUFEKG5hbWUsIHR5cGUp
CQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsaF9maXJzdDsJ
LyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKworI2RlZmluZQlMSVNUX0hFQURfSU5JVElBTEla
RVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisjZGVmaW5lCUxJU1RfRU5UUlkodHlwZSkJCQkJ
CQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsZV9uZXh0OwkvKiBuZXh0IGVs
ZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipsZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZp
b3VzIG5leHQgZWxlbWVudCAqLwlcCit9CisKKy8qCisgKiBMaXN0IGZ1bmN0aW9ucy4KKyAqLwor
CisjaWYgZGVmaW5lZChJTlZBUklBTlRTKQorI2RlZmluZQlRTURfTElTVF9DSEVDS19IRUFEKGhl
YWQsIGZpZWxkKSBkbyB7CQkJCQlcCisJaWYgKExJU1RfRklSU1QoKGhlYWQpKSAhPSBOVUxMICYm
CQkJCQlcCisJICAgIExJU1RfRklSU1QoKGhlYWQpKS0+ZmllbGQubGVfcHJldiAhPQkJCQlcCisJ
ICAgICAmTElTVF9GSVJTVCgoaGVhZCkpKQkJCQkJCVwKKwkJcGFuaWMoIkJhZCBsaXN0IGhlYWQg
JXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsICh2b2lkICopKGhlYWQpKTsJXAorfSB3aGlsZSAoMCkK
KworI2RlZmluZQlRTURfTElTVF9DSEVDS19ORVhUKGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlp
ZiAoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCAmJgkJCQkJXAorCSAgICBMSVNUX05F
WFQoKGVsbSksIGZpZWxkKS0+ZmllbGQubGVfcHJldiAhPQkJCQlcCisJICAgICAmKChlbG0pLT5m
aWVsZC5sZV9uZXh0KSkJCQkJCQlcCisJICAgICAJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBuZXh0
LT5wcmV2ICE9IGVsbSIsICh2b2lkICopKGVsbSkpOwlcCit9IHdoaWxlICgwKQorCisjZGVmaW5l
CVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkgZG8gewkJCQkJXAorCWlmICgqKGVsbSkt
PmZpZWxkLmxlX3ByZXYgIT0gKGVsbSkpCQkJCQlcCisJCXBhbmljKCJCYWQgbGluayBlbG0gJXAg
cHJldi0+bmV4dCAhPSBlbG0iLCAodm9pZCAqKShlbG0pKTsJXAorfSB3aGlsZSAoMCkKKyNlbHNl
CisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQpCisjZGVmaW5lCVFNRF9M
SVNUX0NIRUNLX05FWFQoZWxtLCBmaWVsZCkKKyNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfUFJFVihl
bG0sIGZpZWxkKQorI2VuZGlmIC8qIChJTlZBUklBTlRTKSAqLworCisjZGVmaW5lCUxJU1RfRU1Q
VFkoaGVhZCkJKChoZWFkKS0+bGhfZmlyc3QgPT0gTlVMTCkKKworI2RlZmluZQlMSVNUX0ZJUlNU
KGhlYWQpCSgoaGVhZCktPmxoX2ZpcnN0KQorCisjZGVmaW5lCUxJU1RfRk9SRUFDSCh2YXIsIGhl
YWQsIGZpZWxkKQkJCQkJXAorCWZvciAoKHZhcikgPSBMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwK
KwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxk
KSkKKworI2RlZmluZQlMSVNUX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJ
CVwKKwlmb3IgKCh2YXIpID0gTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYm
ICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0g
KHR2YXIpKQorCisjZGVmaW5lCUxJU1RfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAorCUxJU1RfRklS
U1QoKGhlYWQpKSA9IE5VTEw7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCUxJU1RfSU5T
RVJUX0FGVEVSKGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJUU1EX0xJU1RfQ0hFQ0tf
TkVYVChsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoKExJU1RfTkVYVCgoZWxtKSwgZmllbGQp
ID0gTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpKSAhPSBOVUxMKVwKKwkJTElTVF9ORVhUKChs
aXN0ZWxtKSwgZmllbGQpLT5maWVsZC5sZV9wcmV2ID0JCVwKKwkJICAgICZMSVNUX05FWFQoKGVs
bSksIGZpZWxkKTsJCQkJXAorCUxJU1RfTkVYVCgobGlzdGVsbSksIGZpZWxkKSA9IChlbG0pOwkJ
CQlcCisJKGVsbSktPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQp
OwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlMSVNUX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwg
ZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfTElTVF9DSEVDS19QUkVWKGxpc3RlbG0sIGZpZWxk
KTsJCQkJXAorCShlbG0pLT5maWVsZC5sZV9wcmV2ID0gKGxpc3RlbG0pLT5maWVsZC5sZV9wcmV2
OwkJXAorCUxJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0
ZWxtKS0+ZmllbGQubGVfcHJldiA9IChlbG0pOwkJCQlcCisJKGxpc3RlbG0pLT5maWVsZC5sZV9w
cmV2ID0gJkxJU1RfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmlu
ZQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQkJXAorCVFNRF9MSVNU
X0NIRUNLX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJCVwKKwlpZiAoKExJU1RfTkVYVCgoZWxtKSwg
ZmllbGQpID0gTElTVF9GSVJTVCgoaGVhZCkpKSAhPSBOVUxMKQlcCisJCUxJU1RfRklSU1QoKGhl
YWQpKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05FWFQoKGVsbSksIGZpZWxkKTtcCisJTElTVF9G
SVJTVCgoaGVhZCkpID0gKGVsbSk7CQkJCQlcCisJKGVsbSktPmZpZWxkLmxlX3ByZXYgPSAmTElT
VF9GSVJTVCgoaGVhZCkpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJTElTVF9ORVhUKGVs
bSwgZmllbGQpCSgoZWxtKS0+ZmllbGQubGVfbmV4dCkKKworI2RlZmluZQlMSVNUX1JFTU9WRShl
bG0sIGZpZWxkKSBkbyB7CQkJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVs
ZC5sZV9uZXh0KTsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZHByZXYsIChlbG0pLT5maWVsZC5sZV9w
cmV2KTsJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKTsJCQkJXAorCVFNRF9M
SVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoTElTVF9ORVhUKChlbG0pLCBm
aWVsZCkgIT0gTlVMTCkJCQkJXAorCQlMSVNUX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQubGVf
cHJldiA9IAkJXAorCQkgICAgKGVsbSktPmZpZWxkLmxlX3ByZXY7CQkJCVwKKwkqKGVsbSktPmZp
ZWxkLmxlX3ByZXYgPSBMSVNUX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwlUUkFTSElUKCpvbGRu
ZXh0KTsJCQkJCQlcCisJVFJBU0hJVCgqb2xkcHJldik7CQkJCQkJXAorfSB3aGlsZSAoMCkKKwor
I2RlZmluZSBMSVNUX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlLCBmaWVsZCkgZG8gewkJCVwKKwlz
dHJ1Y3QgdHlwZSAqc3dhcF90bXAgPSBMSVNUX0ZJUlNUKChoZWFkMSkpOwkJCVwKKwlMSVNUX0ZJ
UlNUKChoZWFkMSkpID0gTElTVF9GSVJTVCgoaGVhZDIpKTsJCQlcCisJTElTVF9GSVJTVCgoaGVh
ZDIpKSA9IHN3YXBfdG1wOwkJCQkJXAorCWlmICgoc3dhcF90bXAgPSBMSVNUX0ZJUlNUKChoZWFk
MSkpKSAhPSBOVUxMKQkJCVwKKwkJc3dhcF90bXAtPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9GSVJT
VCgoaGVhZDEpKTsJCVwKKwlpZiAoKHN3YXBfdG1wID0gTElTVF9GSVJTVCgoaGVhZDIpKSkgIT0g
TlVMTCkJCQlcCisJCXN3YXBfdG1wLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQy
KSk7CQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGFpbCBxdWV1ZSBkZWNsYXJhdGlvbnMuCisg
Ki8KKyNkZWZpbmUJVEFJTFFfSEVBRChuYW1lLCB0eXBlKQkJCQkJCVwKK3N0cnVjdCBuYW1lIHsJ
CQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqdHFoX2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJ
XAorCXN0cnVjdCB0eXBlICoqdHFoX2xhc3Q7CS8qIGFkZHIgb2YgbGFzdCBuZXh0IGVsZW1lbnQg
Ki8JCVwKKwlUUkFDRUJVRgkJCQkJCQlcCit9CisKKyNkZWZpbmUJVEFJTFFfSEVBRF9JTklUSUFM
SVpFUihoZWFkKQkJCQkJXAorCXsgTlVMTCwgJihoZWFkKS50cWhfZmlyc3QgfQorCisjZGVmaW5l
CVRBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlw
ZSAqdHFlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKKwlzdHJ1Y3QgdHlwZSAqKnRxZV9w
cmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCisJVFJBQ0VCVUYJ
CQkJCQkJXAorfQorCisvKgorICogVGFpbCBxdWV1ZSBmdW5jdGlvbnMuCisgKi8KKyNpZiBkZWZp
bmVkKElOVkFSSUFOVFMpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19IRUFEKGhlYWQsIGZpZWxk
KSBkbyB7CQkJCQlcCisJaWYgKCFUQUlMUV9FTVBUWShoZWFkKSAmJgkJCQkJCVwKKwkgICAgVEFJ
TFFfRklSU1QoKGhlYWQpKS0+ZmllbGQudHFlX3ByZXYgIT0JCQkJXAorCSAgICAgJlRBSUxRX0ZJ
UlNUKChoZWFkKSkpCQkJCQkJXAorCQlwYW5pYygiQmFkIHRhaWxxIGhlYWQgJXAgZmlyc3QtPnBy
ZXYgIT0gaGVhZCIsICh2b2lkICopKGhlYWQpKTsJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlR
TURfVEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBmaWVsZCkgZG8gewkJCQkJXAorCWlmICgqKGhlYWQp
LT50cWhfbGFzdCAhPSBOVUxMKQkJCQkJCVwKKwkgICAgCXBhbmljKCJCYWQgdGFpbHEgTkVYVCgl
cC0+dHFoX2xhc3QpICE9IE5VTEwiLCAodm9pZCAqKShoZWFkKSk7IAlcCit9IHdoaWxlICgwKQor
CisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpIGRvIHsJCQkJCVwKKwlp
ZiAoVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpICE9IE5VTEwgJiYJCQkJCVwKKwkgICAgVEFJTFFf
TkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiAhPQkJCQlcCisJICAgICAmKChlbG0p
LT5maWVsZC50cWVfbmV4dCkpCQkJCQkJXAorCQlwYW5pYygiQmFkIGxpbmsgZWxtICVwIG5leHQt
PnByZXYgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7CVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJ
UU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkgZG8gewkJCQkJXAorCWlmICgqKGVsbSkt
PmZpZWxkLnRxZV9wcmV2ICE9IChlbG0pKQkJCQkJXAorCQlwYW5pYygiQmFkIGxpbmsgZWxtICVw
IHByZXYtPm5leHQgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7CVwKK30gd2hpbGUgKDApCisjZWxz
ZQorI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkKKyNkZWZpbmUJUU1E
X1RBSUxRX0NIRUNLX1RBSUwoaGVhZCwgaGVhZG5hbWUpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVD
S19ORVhUKGVsbSwgZmllbGQpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmll
bGQpCisjZW5kaWYgLyogKElOVkFSSUFOVFMpICovCisKKyNkZWZpbmUJVEFJTFFfQ09OQ0FUKGhl
YWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAorCWlmICghVEFJTFFfRU1QVFkoaGVhZDIpKSB7
CQkJCQlcCisJCSooaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9maXJzdDsJCVwKKwkJ
KGhlYWQyKS0+dHFoX2ZpcnN0LT5maWVsZC50cWVfcHJldiA9IChoZWFkMSktPnRxaF9sYXN0Owlc
CisJCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2xhc3Q7CQkJXAorCQlUQUlMUV9J
TklUKChoZWFkMikpOwkJCQkJXAorCQlRTURfVFJBQ0VfSEVBRChoZWFkMSk7CQkJCQlcCisJCVFN
RF9UUkFDRV9IRUFEKGhlYWQyKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisj
ZGVmaW5lCVRBSUxRX0VNUFRZKGhlYWQpCSgoaGVhZCktPnRxaF9maXJzdCA9PSBOVUxMKQorCisj
ZGVmaW5lCVRBSUxRX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnRxaF9maXJzdCkKKworI2RlZmluZQlU
QUlMUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9yICgodmFyKSA9IFRBSUxR
X0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBU
QUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSF9TQUZFKHZh
ciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVh
ZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVs
ZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmluZQlUQUlMUV9GT1JFQUNI
X1JFVkVSU0UodmFyLCBoZWFkLCBoZWFkbmFtZSwgZmllbGQpCQlcCisJZm9yICgodmFyKSA9IFRB
SUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJXAorCSAgICAodmFyKTsJCQkJCQkJXAorCSAg
ICAodmFyKSA9IFRBSUxRX1BSRVYoKHZhciksIGhlYWRuYW1lLCBmaWVsZCkpCisKKyNkZWZpbmUJ
VEFJTFFfRk9SRUFDSF9SRVZFUlNFX1NBRkUodmFyLCBoZWFkLCBoZWFkbmFtZSwgZmllbGQsIHR2
YXIpCVwKKwlmb3IgKCh2YXIpID0gVEFJTFFfTEFTVCgoaGVhZCksIGhlYWRuYW1lKTsJCQlcCisJ
ICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9QUkVWKCh2YXIpLCBoZWFkbmFtZSwgZmllbGQp
LCAxKTsJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmluZQlUQUlMUV9JTklUKGhlYWQp
IGRvIHsJCQkJCQlcCisJVEFJTFFfRklSU1QoKGhlYWQpKSA9IE5VTEw7CQkJCQlcCisJKGhlYWQp
LT50cWhfbGFzdCA9ICZUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCVwKKwlRTURfVFJBQ0VfSEVBRCho
ZWFkKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0lOU0VSVF9BRlRFUiho
ZWFkLCBsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQlcCisJUU1EX1RBSUxRX0NIRUNLX05FWFQo
bGlzdGVsbSwgZmllbGQpOwkJCQlcCisJaWYgKChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBU
QUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQpKSAhPSBOVUxMKVwKKwkJVEFJTFFfTkVYVCgoZWxt
KSwgZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJXAorCQkgICAgJlRBSUxRX05FWFQoKGVsbSks
IGZpZWxkKTsJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQkoaGVhZCktPnRxaF9sYXN0ID0gJlRB
SUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwkJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQlc
CisJfQkJCQkJCQkJXAorCVRBSUxRX05FWFQoKGxpc3RlbG0pLCBmaWVsZCkgPSAoZWxtKTsJCQkJ
XAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9ICZUQUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQp
OwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAorCVFNRF9UUkFDRV9F
TEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJVEFJTFFf
SU5TRVJUX0JFRk9SRShsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVFNRF9UQUlMUV9D
SEVDS19QUkVWKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9
IChsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlcCisJVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQp
ID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAoZWxtKTsJ
CQkJXAorCShsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFfTkVYVCgoZWxtKSwgZmll
bGQpOwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAorCVFNRF9UUkFD
RV9FTEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJVEFJ
TFFfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfVEFJTFFfQ0hF
Q0tfSEVBRChoZWFkLCBmaWVsZCk7CQkJCVwKKwlpZiAoKFRBSUxRX05FWFQoKGVsbSksIGZpZWxk
KSA9IFRBSUxRX0ZJUlNUKChoZWFkKSkpICE9IE5VTEwpCVwKKwkJVEFJTFFfRklSU1QoKGhlYWQp
KS0+ZmllbGQudHFlX3ByZXYgPQkJCVwKKwkJICAgICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7
CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfTkVYVCgo
ZWxtKSwgZmllbGQpOwkJXAorCVRBSUxRX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwKKwko
ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFfRklSU1QoKGhlYWQpKTsJCQlcCisJUU1EX1RS
QUNFX0hFQUQoaGVhZCk7CQkJCQkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJ
CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRfVEFJTChoZWFkLCBlbG0s
IGZpZWxkKSBkbyB7CQkJXAorCVFNRF9UQUlMUV9DSEVDS19UQUlMKGhlYWQsIGZpZWxkKTsJCQkJ
XAorCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IE5VTEw7CQkJCVwKKwkoZWxtKS0+ZmllbGQu
dHFlX3ByZXYgPSAoaGVhZCktPnRxaF9sYXN0OwkJCVwKKwkqKGhlYWQpLT50cWhfbGFzdCA9IChl
bG0pOwkJCQkJXAorCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQp
OwkJCVwKKwlRTURfVFJBQ0VfSEVBRChoZWFkKTsJCQkJCQlcCisJUU1EX1RSQUNFX0VMRU0oJihl
bG0pLT5maWVsZCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0xBU1QoaGVh
ZCwgaGVhZG5hbWUpCQkJCQlcCisJKCooKChzdHJ1Y3QgaGVhZG5hbWUgKikoKGhlYWQpLT50cWhf
bGFzdCkpLT50cWhfbGFzdCkpCisKKyNkZWZpbmUJVEFJTFFfTkVYVChlbG0sIGZpZWxkKSAoKGVs
bSktPmZpZWxkLnRxZV9uZXh0KQorCisjZGVmaW5lCVRBSUxRX1BSRVYoZWxtLCBoZWFkbmFtZSwg
ZmllbGQpCQkJCVwKKwkoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgoZWxtKS0+ZmllbGQudHFlX3By
ZXYpKS0+dHFoX2xhc3QpKQorCisjZGVmaW5lCVRBSUxRX1JFTU9WRShoZWFkLCBlbG0sIGZpZWxk
KSBkbyB7CQkJCVwKKwlRTURfU0FWRUxJTksob2xkbmV4dCwgKGVsbSktPmZpZWxkLnRxZV9uZXh0
KTsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZHByZXYsIChlbG0pLT5maWVsZC50cWVfcHJldik7CQkJ
XAorCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpOwkJCQlcCisJUU1EX1RBSUxRX0NI
RUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoKFRBSUxRX05FWFQoKGVsbSksIGZpZWxk
KSkgIT0gTlVMTCkJCQkJXAorCQlUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCktPmZpZWxkLnRxZV9w
cmV2ID0gCQlcCisJCSAgICAoZWxtKS0+ZmllbGQudHFlX3ByZXY7CQkJCVwKKwllbHNlIHsJCQkJ
CQkJCVwKKwkJKGhlYWQpLT50cWhfbGFzdCA9IChlbG0pLT5maWVsZC50cWVfcHJldjsJCVwKKwkJ
UU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCSooZWxtKS0+ZmllbGQu
dHFlX3ByZXYgPSBUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJVFJBU0hJVCgqb2xkbmV4
dCk7CQkJCQkJXAorCVRSQVNISVQoKm9sZHByZXYpOwkJCQkJCVwKKwlRTURfVFJBQ0VfRUxFTSgm
KGVsbSktPmZpZWxkKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgVEFJTFFfU1dBUCho
ZWFkMSwgaGVhZDIsIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAorCXN0cnVjdCB0eXBlICpzd2FwX2Zp
cnN0ID0gKGhlYWQxKS0+dHFoX2ZpcnN0OwkJCVwKKwlzdHJ1Y3QgdHlwZSAqKnN3YXBfbGFzdCA9
IChoZWFkMSktPnRxaF9sYXN0OwkJCVwKKwkoaGVhZDEpLT50cWhfZmlyc3QgPSAoaGVhZDIpLT50
cWhfZmlyc3Q7CQkJXAorCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2xhc3Q7CQkJ
CVwKKwkoaGVhZDIpLT50cWhfZmlyc3QgPSBzd2FwX2ZpcnN0OwkJCQlcCisJKGhlYWQyKS0+dHFo
X2xhc3QgPSBzd2FwX2xhc3Q7CQkJCQlcCisJaWYgKChzd2FwX2ZpcnN0ID0gKGhlYWQxKS0+dHFo
X2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9maXJzdC0+ZmllbGQudHFlX3ByZXYgPSAmKGhl
YWQxKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVhZDEpLT50cWhfbGFzdCA9
ICYoaGVhZDEpLT50cWhfZmlyc3Q7CQlcCisJaWYgKChzd2FwX2ZpcnN0ID0gKGhlYWQyKS0+dHFo
X2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9maXJzdC0+ZmllbGQudHFlX3ByZXYgPSAmKGhl
YWQyKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVhZDIpLT50cWhfbGFzdCA9
ICYoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYgLyogIV9TWVNf
UVVFVUVfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3Ro
cmVhZC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMKaW5kZXggZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZWEwYzEwZWZkZjk2ZGU4YmVi
YjQwMmJlNmM0MjlhZGQwODNhNzNlZCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91
c2VyX3JlY3ZfdGhyZWFkLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhy
ZWFkLmMKQEAgLTAsMCArMSwxNTAwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEw
IEJyYWQgUGVub2ZmCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBIdW1haXJhIEthbWFsCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIKKyAqIENvcHlyaWdodCAo
YykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8
c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJh
Z29uRmx5KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OZXRCU0QpCisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2Vsc2UKKyNpbmNs
dWRlIDx1c2VyX2lwNl92YXIuaD4KKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KKyNpZiAwCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5r
Lmg+CisjaWZkZWYgSEFWRV9MSU5VWF9JRl9BRERSX0gKKyNpbmNsdWRlIDxsaW51eC9pZl9hZGRy
Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisjaW5jbHVkZSA8bGlu
dXgvcnRuZXRsaW5rLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+
CisjZW5kaWYKKy8qIGxvY2FsIG1hY3JvcyBhbmQgZGF0YXR5cGVzIHVzZWQgdG8gZ2V0IElQIGFk
ZHJlc3NlcyBzeXN0ZW0gaW5kZXBlbmRlbnRseSAqLworI2lmICFkZWZpbmVkKElQX1BLVElORk8g
KSAmJiAhIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpCisjIGVycm9yICJDYW4ndCBkZXRlcm1pbmUg
c29ja2V0IG9wdGlvbiB0byB1c2UgdG8gZ2V0IFVEUCBJUCIKKyNlbmRpZgorCit2b2lkIHJlY3Zf
dGhyZWFkX2Rlc3Ryb3kodm9pZCk7CisjZGVmaW5lIE1BWExFTl9NQlVGX0NIQUlOIDMyIC8qIFdo
YXQgc2hvdWxkIHRoaXMgdmFsdWUgYmU/ICovCisjZGVmaW5lIFJPVU5EVVAoYSwgc2l6ZSkgKCgo
YSkgJiAoKHNpemUpLTEpKSA/ICgxICsgKChhKSB8ICgoc2l6ZSktMSkpKSA6IChhKSkKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19E
cmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKyNkZWZpbmUgTkVY
VF9TQShhcCkgYXAgPSAoc3RydWN0IHNvY2thZGRyICopIFwKKwkoKGNhZGRyX3QpIGFwICsgKGFw
LT5zYV9sZW4gPyBST1VORFVQKGFwLT5zYV9sZW4sIHNpemVvZiAodWludDMyX3QpKSA6IHNpemVv
Zih1aW50MzJfdCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Rhcndp
bikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfRnJlZUJTRCkKK3N0YXRpYyB2b2lkCitzY3RwX2dldF9ydGFkZHJzKGludCBhZGRy
cywgc3RydWN0IHNvY2thZGRyICpzYSwgc3RydWN0IHNvY2thZGRyICoqcnRpX2luZm8pCit7CisJ
aW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRBWF9NQVg7IGkrKykgeworCQlpZiAoYWRkcnMg
JiAoMSA8PCBpKSkgeworCQkJcnRpX2luZm9baV0gPSBzYTsKKwkJCU5FWFRfU0Eoc2EpOworCQl9
IGVsc2UgeworCQkJcnRpX2luZm9baV0gPSBOVUxMOworCQl9CisJfQorfQorCitzdGF0aWMgdm9p
ZAorc2N0cF9oYW5kbGVfaWZhbXNnKHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgc2hvcnQg
aW5kZXgsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJaW50IHJjOworCXN0cnVjdCBpZmFkZHJz
ICppZmEsICppZmFzOworCisJLyogaGFuZGxlIG9ubHkgdGhlIHR5cGVzIHdlIHdhbnQgKi8KKwlp
ZiAoKHR5cGUgIT0gUlRNX05FV0FERFIpICYmICh0eXBlICE9IFJUTV9ERUxBRERSKSkgeworCQly
ZXR1cm47CisJfQorCisJcmMgPSBnZXRpZmFkZHJzKCZpZmFzKTsKKwlpZiAocmMgIT0gMCkgewor
CQlyZXR1cm47CisJfQorCWZvciAoaWZhID0gaWZhczsgaWZhOyBpZmEgPSBpZmEtPmlmYV9uZXh0
KSB7CisJCWlmIChpbmRleCA9PSBpZl9uYW1ldG9pbmRleChpZmEtPmlmYV9uYW1lKSkgeworCQkJ
YnJlYWs7CisJCX0KKwl9CisJaWYgKGlmYSA9PSBOVUxMKSB7CisJCWZyZWVpZmFkZHJzKGlmYXMp
OworCQlyZXR1cm47CisJfQorCisJLyogcmVsYXkgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgY2hh
bmdlIHRvIHRoZSBiYXNlIGNvZGUgKi8KKwlpZiAodHlwZSA9PSBSVE1fTkVXQUREUikgeworCQko
dm9pZClzY3RwX2FkZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
X25hbWV0b2luZGV4KGlmYS0+aWZhX25hbWUpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9uYW1lLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzYSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgMSk7CisJfSBlbHNlIHsKKwkJc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZihTQ1RQ
X0RFRkFVTFRfVlJGSUQsIGlmYS0+aWZhX2FkZHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAg
aWZfbmFtZXRvaW5kZXgoaWZhLT5pZmFfbmFtZSksCisJCSAgICAgICAgICAgICAgICAgICAgICAg
aWZhLT5pZmFfbmFtZSk7CisJfQorCWZyZWVpZmFkZHJzKGlmYXMpOworfQorCitzdGF0aWMgdm9p
ZCAqCityZWN2X2Z1bmN0aW9uX3JvdXRlKHZvaWQgKmFyZykKK3sKKwlzc2l6ZV90IHJldDsKKwlz
dHJ1Y3QgaWZhX21zZ2hkciAqaWZhOworCWNoYXIgcnRfYnVmZmVyWzEwMjRdOworCXN0cnVjdCBz
b2NrYWRkciAqc2EsICpydGlfaW5mb1tSVEFYX01BWF07CisKKwlzY3RwX3VzZXJzcGFjZV9zZXRf
dGhyZWFkbmFtZSgiU0NUUCBhZGRyIG1vbiIpOworCisJd2hpbGUgKDEpIHsKKwkJbWVtc2V0KHJ0
X2J1ZmZlciwgMCwgc2l6ZW9mKHJ0X2J1ZmZlcikpOworCQlyZXQgPSByZWN2KFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3JvdXRlKSwgcnRfYnVmZmVyLCBzaXplb2YocnRfYnVmZmVyKSwgMCk7CisK
KwkJaWYgKHJldCA+IDApIHsKKwkJCWlmYSA9IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBydF9idWZm
ZXI7CisJCQlpZiAoaWZhLT5pZmFtX3R5cGUgIT0gUlRNX0RFTEFERFIgJiYgaWZhLT5pZmFtX3R5
cGUgIT0gUlRNX05FV0FERFIpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNhID0gKHN0cnVj
dCBzb2NrYWRkciAqKSAoaWZhICsgMSk7CisJCQlzY3RwX2dldF9ydGFkZHJzKGlmYS0+aWZhbV9h
ZGRycywgc2EsIHJ0aV9pbmZvKTsKKwkJCXN3aXRjaCAoaWZhLT5pZmFtX3R5cGUpIHsKKwkJCWNh
c2UgUlRNX0RFTEFERFI6CisJCQljYXNlIFJUTV9ORVdBRERSOgorCQkJCXNjdHBfaGFuZGxlX2lm
YW1zZyhpZmEtPmlmYW1fdHlwZSwgaWZhLT5pZmFtX2luZGV4LCBydGlfaW5mb1tSVEFYX0lGQV0p
OworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBpZ25vcmUgdGhpcyByb3V0aW5nIGV2
ZW50ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHJldCA8IDApIHsKKwkJCWlmIChl
cnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRpZgorCisjaWYgMAorLyog
VGhpcyBkb2VzIG5vdCB5ZXQgd29yayBvbiBMaW51eCAqLworc3RhdGljIHZvaWQgKgorcmVjdl9m
dW5jdGlvbl9yb3V0ZSh2b2lkICphcmcpCit7CisJaW50IGxlbjsKKwljaGFyIGJ1Zls0MDk2XTsK
KwlzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYsIHNpemVvZihidWYpIH07CisJc3RydWN0IG1zZ2hk
ciBtc2c7CisJc3RydWN0IG5sbXNnaGRyICpuaDsKKwlzdHJ1Y3QgaWZhZGRybXNnICpydG1zZzsK
KwlzdHJ1Y3QgcnRhdHRyICpydGF0cDsKKwlzdHJ1Y3QgaW5fYWRkciAqaW5wOworCXN0cnVjdCBz
b2NrYWRkcl9ubCBzYW5sOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhOwor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7CisjZW5kaWYK
KworCWZvciAoOzspIHsKKwkJbWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOworCQlzYW5s
Lm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisJCXNhbmwubmxfZ3JvdXBzID0gUlRNR1JQX0lQVjZf
SUZBRERSIHwgUlRNR1JQX0lQVjRfSUZBRERSOworCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0
cnVjdCBtc2doZHIpKTsKKwkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikmc2FubDsKKwkJbXNnLm1z
Z19uYW1lbGVuID0gc2l6ZW9mKHNhbmwpOworCQltc2cubXNnX2lvdiA9ICZpb3Y7CisJCW1zZy5t
c2dfaW92bGVuID0gMTsKKwkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKKwkJbXNnLm1zZ19jb250
cm9sbGVuID0gMDsKKworCQlsZW4gPSByZWN2bXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jv
dXRlKSwgJm1zZywgMCk7CisKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdB
SU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
KwkJZm9yIChuaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOyBOTE1TR19PSyAobmgsIGxlbik7
CisJCQluaCA9IE5MTVNHX05FWFQgKG5oLCBsZW4pKSB7CisJCQlpZiAobmgtPm5sbXNnX3R5cGUg
PT0gTkxNU0dfRE9ORSkKKwkJCQlicmVhazsKKworCQkJaWYgKG5oLT5ubG1zZ190eXBlID09IFJU
TV9ORVdBRERSIHx8IG5oLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERSKSB7CisJCQkJcnRtc2cg
PSAoc3RydWN0IGlmYWRkcm1zZyAqKU5MTVNHX0RBVEEobmgpOworCQkJCXJ0YXRwID0gKHN0cnVj
dCBydGF0dHIgKilJRkFfUlRBKHJ0bXNnKTsKKwkJCQlpZiAocnRhdHAtPnJ0YV90eXBlID09IElG
QV9BRERSRVNTKSB7CisJCQkJCWlucCA9IChzdHJ1Y3QgaW5fYWRkciAqKVJUQV9EQVRBKHJ0YXRw
KTsKKwkJCQkJc3dpdGNoIChydG1zZy0+aWZhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJ
Y2FzZSBBRl9JTkVUOgorCQkJCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopbWFsbG9jKHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCQkJCXNhLT5zaW5fZmFtaWx5ID0gcnRtc2ct
PmlmYV9mYW1pbHk7CisJCQkJCQlzYS0+c2luX3BvcnQgPSAwOworCQkJCQkJbWVtY3B5KCZzYS0+
c2luX2FkZHIsIGlucCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJCQkJCQlzY3RwX2hhbmRs
ZV9pZmFtc2cobmgtPm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKilzYSk7CisJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJCQlzYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKW1hbGxvYyhzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQkJc2E2LT5zaW42X2ZhbWlseSA9IHJ0bXNn
LT5pZmFfZmFtaWx5OworCQkJCQkJc2E2LT5zaW42X3BvcnQgPSAwOworCQkJCQkJbWVtY3B5KCZz
YTYtPnNpbjZfYWRkciwgaW5wLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQkJCQlzY3Rw
X2hhbmRsZV9pZmFtc2cobmgtPm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qg
c29ja2FkZHIgKilzYTYpOworCQkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQkJZGVmYXVsdDoKKwkJ
CQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJBZGRyZXNzIGZhbWlseSAlZCBub3Qgc3VwcG9y
dGVkLlxuIiwgcnRtc2ctPmlmYV9mYW1pbHkpOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9
CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRpZgorCisjaWZkZWYgSU5F
VAorc3RhdGljIHZvaWQgKgorcmVjdl9mdW5jdGlvbl9yYXcodm9pZCAqYXJnKQoreworCXN0cnVj
dCBtYnVmICoqcmVjdm1idWY7CisJc3RydWN0IGlwICppcGhkcjsKKwlzdHJ1Y3Qgc2N0cGhkciAq
c2g7CisJdWludDE2X3QgcG9ydDsKKwlpbnQgb2Zmc2V0LCBlY24gPSAwOworCWludCBjb21wdXRl
X2NyYyA9IDE7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0cnVjdCBzb2NrYWRkcl9p
biBzcmMsIGRzdDsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXVuc2ln
bmVkIGludCBuY291bnRlcjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgaW92ZWMgcmVj
dl9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisjZWxzZQorCVdTQUJVRiByZWN2X2lvdmVjW01B
WExFTl9NQlVGX0NIQUlOXTsKKwlpbnQgblJlc3VsdCwgbV9FcnJvckNvZGU7CisJRFdPUkQgZmxh
Z3M7CisJRFdPUkQgbmNvdW50ZXI7CisJc3RydWN0IHNvY2thZGRyX2luIGZyb207CisJaW50IGZy
b21sZW47CisjZW5kaWYKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0
byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KKwlp
bnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBv
ZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG47CisJdW5zaWduZWQgaW50IGlv
dmxlbiA9IE1DTEJZVEVTOworCWludCB3YW50X2V4dCA9IChpb3ZsZW4gPiBNTEVOKT8gMSA6IDA7
CisJaW50IHdhbnRfaGVhZGVyID0gMDsKKworCXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRuYW1l
KCJTQ1RQL0lQNCByY3YiKTsKKworCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7CisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KworCXJlY3ZtYnVmID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSAqIE1BWExFTl9NQlVG
X0NIQUlOKTsKKworCXdoaWxlICgxKSB7CisJCWZvciAoaSA9IDA7IGkgPCB0b19maWxsOyBpKysp
IHsKKwkJCS8qIE5vdCBnZXR0aW5nIHRoZSBwYWNrZXQgaGVhZGVyLiBUZXN0cyB3aXRoIGNoYWlu
IG9mIG9uZSBydW4KKwkJCSAgIGFzIHVzdWFsIHdpdGhvdXQgaGF2aW5nIHRoZSBwYWNrZXQgaGVh
ZGVyLgorCQkJICAgSGF2ZSB0cmllZCBib3RoIHNlbmRpbmcgYW5kIHJlY2VpdmluZworCQkJICov
CisJCQlyZWN2bWJ1ZltpXSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhpb3ZsZW4sIHdhbnRfaGVh
ZGVyLCBNX05PV0FJVCwgd2FudF9leHQsIE1UX0RBVEEpOworI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisJCQlyZWN2X2lvdmVjW2ldLmlvdl9iYXNlID0gKGNhZGRyX3QpcmVj
dm1idWZbaV0tPm1fZGF0YTsKKwkJCXJlY3ZfaW92ZWNbaV0uaW92X2xlbiA9IGlvdmxlbjsKKyNl
bHNlCisJCQlyZWN2X2lvdmVjW2ldLmJ1ZiA9IChjYWRkcl90KXJlY3ZtYnVmW2ldLT5tX2RhdGE7
CisJCQlyZWN2X2lvdmVjW2ldLmxlbiA9IGlvdmxlbjsKKyNlbmRpZgorCQl9CisJCXRvX2ZpbGwg
PSAwOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJZmxhZ3MgPSAwOwor
CQluY291bnRlciA9IDA7CisJCWZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KwkJbWVtc2V0KCZmcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisKKwkJblJl
c3VsdCA9IFdTQVJlY3ZGcm9tKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCByZWN2
X2lvdmVjLCBNQVhMRU5fTUJVRl9DSEFJTiwgJm5jb3VudGVyLCAmZmxhZ3MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmZnJvbSwgJmZyb21sZW4sIE5VTEwsIE5VTEwpOworCQlpZiAoblJlc3VsdCAhPSAw
KSB7CisJCQltX0Vycm9yQ29kZSA9IFdTQUdldExhc3RFcnJvcigpOworCQkJaWYgKG1fRXJyb3JD
b2RlID09IFdTQUVUSU1FRE9VVCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChtX0Vy
cm9yQ29kZSA9PSBXU0FFTk9UU09DSykgfHwgKG1fRXJyb3JDb2RlID09IFdTQUVJTlRSKSkgewor
CQkJCWJyZWFrOworCQkJfQorCQl9CisJCW4gPSBuY291bnRlcjsKKyNlbHNlCisJCW1lbXNldCgm
bXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOworCQltc2cubXNnX25hbWUgPSBOVUxMOwor
CQltc2cubXNnX25hbWVsZW4gPSAwOworCQltc2cubXNnX2lvdiA9IHJlY3ZfaW92ZWM7CisJCW1z
Zy5tc2dfaW92bGVuID0gTUFYTEVOX01CVUZfQ0hBSU47CisJCW1zZy5tc2dfY29udHJvbCA9IE5V
TEw7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCW5jb3VudGVyID0gbiA9IHJlY3Ztc2co
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksICZtc2csIDApOworCQlpZiAobiA8IDAp
IHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCQlTQ1RQX0hFQURFUl9MRU4ocmVjdm1i
dWZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFsIHBhY2tldCAqLworCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19p
bnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQgaW50KW4gPD0gaW92bGVuKSB7CisJCQlTQ1RQ
X0JVRl9MRU4ocmVjdm1idWZbMF0pID0gbjsKKwkJCSh0b19maWxsKSsrOworCQl9IGVsc2Ugewor
CQkJaSA9IDA7CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbMF0pID0gaW92bGVuOworCisJCQlu
Y291bnRlciAtPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkodG9fZmlsbCkrKzsKKwkJCWRv
IHsKKwkJCQlyZWN2bWJ1ZltpXS0+bV9uZXh0ID0gcmVjdm1idWZbaSsxXTsKKwkJCQlTQ1RQX0JV
Rl9MRU4ocmVjdm1idWZbaV0tPm1fbmV4dCkgPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkJ
aSsrOworCQkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQkodG9fZmls
bCkrKzsKKwkJCX0gd2hpbGUgKG5jb3VudGVyID4gMCk7CisJCX0KKworCQlpcGhkciA9IG10b2Qo
cmVjdm1idWZbMF0sIHN0cnVjdCBpcCAqKTsKKwkJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNh
ZGRyX3QpaXBoZHIgKyBzaXplb2Yoc3RydWN0IGlwKSk7CisJCWNoID0gKHN0cnVjdCBzY3RwX2No
dW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCW9mZnNl
dCA9IHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKworCQlpZiAo
aXBoZHItPmlwX3RvcyAhPSAwKSB7CisJCQllY24gPSBpcGhkci0+aXBfdG9zICYgMHgwMjsKKwkJ
fQorCisJCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJ
ZHN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQlkc3Qu
c2luX2FkZHIgPSBpcGhkci0+aXBfZHN0OworCQlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9wb3J0
OworCisJCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJ
c3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQlzcmMu
c2luX2FkZHIgPSBpcGhkci0+aXBfc3JjOworCQlzcmMuc2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7
CisKKwkJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9hZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8K
KwkJaWYgKElOX01VTFRJQ0FTVChudG9obChkc3Quc2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCW1f
ZnJlZW0ocmVjdm1idWZbMF0pOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKFNDVFBfSVNfSVRf
QlJPQURDQVNUKGRzdC5zaW5fYWRkciwgcmVjdm1idWZbMF0pKSB7CisJCQltX2ZyZWVtKHJlY3Zt
YnVmWzBdKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcG9ydCA9IDA7CisKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgorCQkgICAgKChJTjRfSVNM
T09QQkFDS19BRERSRVNTKCZzcmMuc2luX2FkZHIpICYmCisJCSAgICAgIElONF9JU0xPT1BCQUNL
X0FERFJFU1MoJmRzdC5zaW5fYWRkcikpIHx8CisJCSAgICAgKHNyYy5zaW5fYWRkci5zX2FkZHIg
PT0gZHN0LnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQljb21wdXRlX2NyYyA9IDA7CisJCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQl9IGVsc2UgeworCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJfQorCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6
IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVuY19fLCBuKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZyB3aXRoIG9mZj0l
ZFxuIiwgb2Zmc2V0KTsKKwkJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmcmVjdm1idWZb
MF0sIHNpemVvZihzdHJ1Y3QgaXApLCBvZmZzZXQsIG4sCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2gsIGNoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVf
Y3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjbiwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIHBvcnQpOworCQlpZiAocmVjdm1i
dWZbMF0pIHsKKwkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOworCQl9CisJfQorCWZvciAoaSA9IDA7
IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsrKSB7CisJCW1fZnJlZShyZWN2bWJ1ZltpXSk7CisJ
fQorCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLworCWZyZWUocmVjdm1idWYpOworCXJldHVy
biAoTlVMTCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSU5FVDYpCitzdGF0aWMgdm9pZCAq
CityZWN2X2Z1bmN0aW9uX3JhdzYodm9pZCAqYXJnKQoreworCXN0cnVjdCBtYnVmICoqcmVjdm1i
dWY2OworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJdW5zaWduZWQgaW50
IG5jb3VudGVyID0gMDsKKwlzdHJ1Y3QgaW92ZWMgcmVjdl9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJ
Tl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGNtc2doZHIgKmNtc2dwdHI7CisJY2hh
ciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKV07CisjZWxz
ZQorCVdTQUJVRiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKKwlpbnQgblJlc3VsdCwg
bV9FcnJvckNvZGU7CisJRFdPUkQgZmxhZ3M7CisJRFdPUkQgbmNvdW50ZXIgPSAwOworCXN0cnVj
dCBzb2NrYWRkcl9pbjYgZnJvbTsKKwlpbnQgZnJvbWxlbjsKKwlHVUlEIFdTQVJlY3ZNc2dfR1VJ
RCA9IFdTQUlEX1dTQVJFQ1ZNU0c7CisJTFBGTl9XU0FSRUNWTVNHIFdTQVJlY3ZNc2c7CisJV1NB
Q01TR0hEUiAqY21zZ3B0cjsKKwlXU0FNU0cgbXNnOworCWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0
XTsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJc3RydWN0IHNjdHBo
ZHIgKnNoOworCWludCBvZmZzZXQ7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCS8qSW5p
dGlhbGx5IHRoZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRlZC4KKwkgIHRv
X2ZpbGwgaW5kaWNhdGVzIHRoaXMgYW1vdW50LiAqLworCWludCB0b19maWxsID0gTUFYTEVOX01C
VUZfQ0hBSU47CisJLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBpbiB0aGUgY2hh
aW4gKi8KKwlpbnQgaSwgbjsKKwlpbnQgY29tcHV0ZV9jcmMgPSAxOworCXVuc2lnbmVkIGludCBp
b3ZsZW4gPSBNQ0xCWVRFUzsKKwlpbnQgd2FudF9leHQgPSAoaW92bGVuID4gTUxFTik/IDEgOiAw
OworCWludCB3YW50X2hlYWRlciA9IDA7CisKKwlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFt
ZSgiU0NUUC9JUDYgcmN2Iik7CisKKwlyZWN2bWJ1ZjYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBt
YnVmICopICogTUFYTEVOX01CVUZfQ0hBSU4pOworCisJZm9yICg7OykgeworCQlmb3IgKGkgPSAw
OyBpIDwgdG9fZmlsbDsgaSsrKSB7CisJCQkvKiBOb3QgZ2V0dGluZyB0aGUgcGFja2V0IGhlYWRl
ci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUgcnVuCisJCQkgICBhcyB1c3VhbCB3aXRob3V0IGhh
dmluZyB0aGUgcGFja2V0IGhlYWRlci4KKwkJCSAgIEhhdmUgdHJpZWQgYm90aCBzZW5kaW5nIGFu
ZCByZWNlaXZpbmcKKwkJCSAqLworCQkJcmVjdm1idWY2W2ldID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4dCwgTVRfREFUQSk7Cisj
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCXJlY3ZfaW92ZWNbaV0uaW92
X2Jhc2UgPSAoY2FkZHJfdClyZWN2bWJ1ZjZbaV0tPm1fZGF0YTsKKwkJCXJlY3ZfaW92ZWNbaV0u
aW92X2xlbiA9IGlvdmxlbjsKKyNlbHNlCisJCQlyZWN2X2lvdmVjW2ldLmJ1ZiA9IChjYWRkcl90
KXJlY3ZtYnVmNltpXS0+bV9kYXRhOworCQkJcmVjdl9pb3ZlY1tpXS5sZW4gPSBpb3ZsZW47Cisj
ZW5kaWYKKwkJfQorCQl0b19maWxsID0gMDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dp
bmRvd3MpCisJCWZsYWdzID0gMDsKKwkJbmNvdW50ZXIgPSAwOworCQlmcm9tbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQltZW1zZXQoJmZyb20sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSk7CisJCW5SZXN1bHQgPSBXU0FJb2N0bChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwNiksIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsCisJCSAg
ICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZ19HVUlELCBzaXplb2YgV1NBUmVjdk1zZ19HVUlE
LAorCQkgICAgICAgICAgICAgICAgICAgJldTQVJlY3ZNc2csIHNpemVvZiBXU0FSZWN2TXNnLAor
CQkgICAgICAgICAgICAgICAgICAgJm5jb3VudGVyLCBOVUxMLCBOVUxMKTsKKwkJaWYgKG5SZXN1
bHQgPT0gMCkgeworCQkJbXNnLm5hbWUgPSAodm9pZCAqKSZzcmM7CisJCQltc2cubmFtZWxlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCW1zZy5scEJ1ZmZlcnMgPSByZWN2X2lv
dmVjOworCQkJbXNnLmR3QnVmZmVyQ291bnQgPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJCW1zZy5D
b250cm9sLmxlbiA9IHNpemVvZiBDb250cm9sQnVmZmVyOworCQkJbXNnLkNvbnRyb2wuYnVmID0g
Q29udHJvbEJ1ZmZlcjsKKwkJCW1zZy5kd0ZsYWdzID0gMDsKKwkJCW5SZXN1bHQgPSBXU0FSZWN2
TXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgJm1zZywgJm5jb3VudGVyLCBO
VUxMLCBOVUxMKTsKKwkJfQorCQlpZiAoblJlc3VsdCAhPSAwKSB7CisJCQltX0Vycm9yQ29kZSA9
IFdTQUdldExhc3RFcnJvcigpOworCQkJaWYgKG1fRXJyb3JDb2RlID09IFdTQUVUSU1FRE9VVCkK
KwkJCQljb250aW51ZTsKKwkJCWlmIChtX0Vycm9yQ29kZSA9PSBXU0FFTk9UU09DSyB8fCBtX0Vy
cm9yQ29kZSA9PSBXU0FFSU5UUikKKwkJCQlicmVhazsKKwkJfQorCQluID0gbmNvdW50ZXI7Cisj
ZWxzZQorCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKKwkJbWVtc2V0
KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCW1lbXNldCgmZHN0LCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQltZW1zZXQoY21zZ2J1ZiwgMCwgQ01T
R19TUEFDRShzaXplb2YgKHN0cnVjdCBpbjZfcGt0aW5mbykpKTsKKwkJbXNnLm1zZ19uYW1lID0g
KHZvaWQgKikmc3JjOworCQltc2cubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNik7CisJCW1zZy5tc2dfaW92ID0gcmVjdl9pb3ZlYzsKKwkJbXNnLm1zZ19pb3ZsZW4gPSBN
QVhMRU5fTUJVRl9DSEFJTjsKKwkJbXNnLm1zZ19jb250cm9sID0gKHZvaWQgKiljbXNnYnVmOwor
CQltc2cubXNnX2NvbnRyb2xsZW4gPSAoc29ja2xlbl90KUNNU0dfTEVOKHNpemVvZiAoc3RydWN0
IGluNl9wa3RpbmZvKSk7CisJCW1zZy5tc2dfZmxhZ3MgPSAwOworCisJCW5jb3VudGVyID0gbiA9
IHJlY3Ztc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAmbXNnLCAwKTsKKwkJ
aWYgKG4gPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJCQkJY29udGludWU7CisJ
CQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYKKwkJU0NUUF9IRUFERVJf
TEVOKHJlY3ZtYnVmNlswXSkgPSBuOyAvKiBsZW5ndGggb2YgdG90YWwgcGFja2V0ICovCisJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKKwkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX2lucGFja2V0cyk7CisKKwkJaWYgKCh1bnNpZ25lZCBpbnQpbiA8PSBpb3ZsZW4p
IHsKKwkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbMF0pID0gbjsKKwkJCSh0b19maWxsKSsrOwor
CQl9IGVsc2UgeworCQkJaSA9IDA7CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWY2WzBdKSA9IGlv
dmxlbjsKKworCQkJbmNvdW50ZXIgLT0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOworCQkJKHRvX2Zp
bGwpKys7CisJCQlkbyB7CisJCQkJcmVjdm1idWY2W2ldLT5tX25leHQgPSByZWN2bWJ1ZjZbaSsx
XTsKKwkJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWY2W2ldLT5tX25leHQpID0gbWluKG5jb3VudGVy
LCBpb3ZsZW4pOworCQkJCWkrKzsKKwkJCQluY291bnRlciAtPSBtaW4obmNvdW50ZXIsIGlvdmxl
bik7CisJCQkJKHRvX2ZpbGwpKys7CisJCQl9IHdoaWxlIChuY291bnRlciA+IDApOworCQl9CisK
KwkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZ3B0ciAhPSBOVUxMOyBj
bXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKKwkJCWlmICgoY21zZ3B0ci0+
Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYpICYmIChjbXNncHRyLT5jbXNnX3R5cGUgPT0gSVBW
Nl9QS1RJTkZPKSkgeworCQkJCXN0cnVjdCBpbjZfcGt0aW5mbyAqIGluZm87CisKKwkJCQlpbmZv
ID0gKHN0cnVjdCBpbjZfcGt0aW5mbyAqKUNNU0dfREFUQShjbXNncHRyKTsKKwkJCQltZW1jcHko
KHZvaWQgKikmZHN0LnNpbjZfYWRkciwgKGNvbnN0IHZvaWQgKikgJihpbmZvLT5pcGk2X2FkZHIp
LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkv
KiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLworCQlpZiAo
SU42X0lTX0FERFJfTVVMVElDQVNUKCZkc3Quc2luNl9hZGRyKSkgeworCQkJbV9mcmVlbShyZWN2
bWJ1ZjZbMF0pOworCQkJY29udGludWU7CisJCX0KKworCQlzaCA9IG10b2QocmVjdm1idWY2WzBd
LCBzdHJ1Y3Qgc2N0cGhkciAqKTsKKwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNh
ZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKTsKKworCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJCWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KTsKKyNlbmRpZgorCQlkc3Quc2luNl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKKworCQlzcmMuc2lu
Nl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCXNyYy5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlzcmMuc2luNl9wb3J0
ID0gc2gtPnNyY19wb3J0OworCQlpZiAobWVtY21wKCZzcmMuc2luNl9hZGRyLCAmZHN0LnNpbjZf
YWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApIHsKKwkJCWNvbXB1dGVfY3JjID0g
MDsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7CisJCX0gZWxzZSB7CisJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOworCQl9CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICIlczogUmVjZWl2ZWQgJWQgYnl0ZXMuIiwgX19mdW5jX18sIG4pOworCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiIC0gY2FsbGluZyBzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5n
IHdpdGggb2ZmPSVkXG4iLCBvZmZzZXQpOworCQlzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5n
KCZyZWN2bWJ1ZjZbMF0sIDAsIG9mZnNldCwgbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaCwgY2gsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcHV0ZV9jcmMs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIDApOworCQlpZiAocmVjdm1idWY2WzBdKSB7
CisJCQltX2ZyZWVtKHJlY3ZtYnVmNlswXSk7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IE1B
WExFTl9NQlVGX0NIQUlOOyBpKyspIHsKKwkJbV9mcmVlKHJlY3ZtYnVmNltpXSk7CisJfQorCS8q
IGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLworCWZyZWUocmVjdm1idWY2KTsKKwlyZXR1cm4gKE5V
TEwpOworfQorI2VuZGlmCisKKyNpZmRlZiBJTkVUCitzdGF0aWMgdm9pZCAqCityZWN2X2Z1bmN0
aW9uX3VkcCh2b2lkICphcmcpCit7CisJc3RydWN0IG1idWYgKip1ZHByZWN2bWJ1ZjsKKwkvKklu
aXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0
b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9N
QlVGX0NIQUlOOworCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNo
YWluICovCisJaW50IGksIG4sIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllU
RVM7CisJaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKKwlpbnQgd2FudF9o
ZWFkZXIgPSAwOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwl1aW50MTZfdCBwb3J0OworCXN0cnVj
dCBzY3RwX2NodW5raGRyICpjaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7CisjaWYg
ZGVmaW5lZChJUF9QS1RJTkZPKQorCWNoYXIgY21zZ2J1ZltDTVNHX1NQQUNFKHNpemVvZihzdHJ1
Y3QgaW5fcGt0aW5mbykpXTsKKyNlbHNlCisJY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9m
KHN0cnVjdCBpbl9hZGRyKSldOworI2VuZGlmCisJaW50IGNvbXB1dGVfY3JjID0gMTsKKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXVuc2lnbmVkIGludCBuY291bnRlcjsK
KwlzdHJ1Y3QgaW92ZWMgaW92W01BWExFTl9NQlVGX0NIQUlOXTsKKwlzdHJ1Y3QgbXNnaGRyIG1z
ZzsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKKyNlbHNlCisJR1VJRCBXU0FSZWN2TXNnX0dV
SUQgPSBXU0FJRF9XU0FSRUNWTVNHOworCUxQRk5fV1NBUkVDVk1TRyBXU0FSZWN2TXNnOworCWNo
YXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKKwlXU0FCVUYgaW92W01BWExFTl9NQlVGX0NIQUlOXTsK
KwlXU0FNU0cgbXNnOworCWludCBuUmVzdWx0LCBtX0Vycm9yQ29kZTsKKwlXU0FDTVNHSERSICpj
bXNncHRyOworCURXT1JEIG5jb3VudGVyOworI2VuZGlmCisKKwlzY3RwX3VzZXJzcGFjZV9zZXRf
dGhyZWFkbmFtZSgiU0NUUC9VRFAvSVA0IHJjdiIpOworCisJdWRwcmVjdm1idWYgPSBtYWxsb2Mo
c2l6ZW9mKHN0cnVjdCBtYnVmICopICogTUFYTEVOX01CVUZfQ0hBSU4pOworCisJd2hpbGUgKDEp
IHsKKwkJZm9yIChpID0gMDsgaSA8IHRvX2ZpbGw7IGkrKykgeworCQkJLyogTm90IGdldHRpbmcg
dGhlIHBhY2tldCBoZWFkZXIuIFRlc3RzIHdpdGggY2hhaW4gb2Ygb25lIHJ1bgorCQkJICAgYXMg
dXN1YWwgd2l0aG91dCBoYXZpbmcgdGhlIHBhY2tldCBoZWFkZXIuCisJCQkgICBIYXZlIHRyaWVk
IGJvdGggc2VuZGluZyBhbmQgcmVjZWl2aW5nCisJCQkgKi8KKwkJCXVkcHJlY3ZtYnVmW2ldID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50
X2V4dCwgTVRfREFUQSk7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJ
CWlvdltpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXVkcHJlY3ZtYnVmW2ldLT5tX2RhdGE7CisJCQlp
b3ZbaV0uaW92X2xlbiA9IGlvdmxlbjsKKyNlbHNlCisJCQlpb3ZbaV0uYnVmID0gKGNhZGRyX3Qp
dWRwcmVjdm1idWZbaV0tPm1fZGF0YTsKKwkJCWlvdltpXS5sZW4gPSBpb3ZsZW47CisjZW5kaWYK
KwkJfQorCQl0b19maWxsID0gMDsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKKyNlbHNlCisJCW1l
bXNldCgmbXNnLCAwLCBzaXplb2YoV1NBTVNHKSk7CisjZW5kaWYKKwkJbWVtc2V0KCZzcmMsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJbWVtc2V0KGNtc2didWYsIDAsIHNpemVvZihjbXNnYnVm
KSk7CisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQltc2cubXNnX25h
bWUgPSAodm9pZCAqKSZzcmM7CisJCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOworCQltc2cubXNnX2lvdiA9IGlvdjsKKwkJbXNnLm1zZ19pb3ZsZW4gPSBNQVhM
RU5fTUJVRl9DSEFJTjsKKwkJbXNnLm1zZ19jb250cm9sID0gKHZvaWQgKiljbXNnYnVmOworCQlt
c2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZ2J1Zik7CisJCW1zZy5tc2dfZmxhZ3MgPSAw
OworCisJCW5jb3VudGVyID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cCksICZtc2csIDApOworCQlpZiAobiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4p
IHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNl
bHNlCisJCW5SZXN1bHQgPSBXU0FJb2N0bChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3Rw
KSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKKwkJICZXU0FSZWN2TXNnX0dV
SUQsIHNpemVvZiBXU0FSZWN2TXNnX0dVSUQsCisJCSAmV1NBUmVjdk1zZywgc2l6ZW9mIFdTQVJl
Y3ZNc2csCisJCSAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQlpZiAoblJlc3VsdCA9PSAwKSB7
CisJCQltc2cubmFtZSA9ICh2b2lkICopJnNyYzsKKwkJCW1zZy5uYW1lbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7CisJCQltc2cubHBCdWZmZXJzID0gaW92OworCQkJbXNnLmR3QnVm
ZmVyQ291bnQgPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJCW1zZy5Db250cm9sLmxlbiA9IHNpemVv
ZiBDb250cm9sQnVmZmVyOworCQkJbXNnLkNvbnRyb2wuYnVmID0gQ29udHJvbEJ1ZmZlcjsKKwkJ
CW1zZy5kd0ZsYWdzID0gMDsKKwkJCW5SZXN1bHQgPSBXU0FSZWN2TXNnKFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApLCAmbXNnLCAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQl9CisJ
CWlmIChuUmVzdWx0ICE9IDApIHsKKwkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7
CisJCQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKSB7CisJCQkJY29udGludWU7CisJ
CQl9CisJCQlpZiAoKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLKSB8fCAobV9FcnJvckNvZGUg
PT0gV1NBRUlOVFIpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbiA9IG5jb3VudGVyOwor
I2VuZGlmCisJCVNDVFBfSEVBREVSX0xFTih1ZHByZWN2bWJ1ZlswXSkgPSBuOyAvKiBsZW5ndGgg
b2YgdG90YWwgcGFja2V0ICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsK
KwkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7CisKKwkJaWYgKCh1
bnNpZ25lZCBpbnQpbiA8PSBpb3ZsZW4pIHsKKwkJCVNDVFBfQlVGX0xFTih1ZHByZWN2bWJ1Zlsw
XSkgPSBuOworCQkJKHRvX2ZpbGwpKys7CisJCX0gZWxzZSB7CisJCQlpID0gMDsKKwkJCVNDVFBf
QlVGX0xFTih1ZHByZWN2bWJ1ZlswXSkgPSBpb3ZsZW47CisKKwkJCW5jb3VudGVyIC09IG1pbihu
Y291bnRlciwgaW92bGVuKTsKKwkJCSh0b19maWxsKSsrOworCQkJZG8geworCQkJCXVkcHJlY3Zt
YnVmW2ldLT5tX25leHQgPSB1ZHByZWN2bWJ1ZltpKzFdOworCQkJCVNDVFBfQlVGX0xFTih1ZHBy
ZWN2bWJ1ZltpXS0+bV9uZXh0KSA9IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQlpKys7CisJ
CQkJbmNvdW50ZXIgLT0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOworCQkJCSh0b19maWxsKSsrOwor
CQkJfSB3aGlsZSAobmNvdW50ZXIgPiAwKTsKKwkJfQorCisJCWZvciAoY21zZ3B0ciA9IENNU0df
RklSU1RIRFIoJm1zZyk7IGNtc2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZt
c2csIGNtc2dwdHIpKSB7CisjaWYgZGVmaW5lZChJUF9QS1RJTkZPKQorCQkJaWYgKChjbXNncHRy
LT5jbXNnX2xldmVsID09IElQUFJPVE9fSVApICYmIChjbXNncHRyLT5jbXNnX3R5cGUgPT0gSVBf
UEtUSU5GTykpIHsKKwkJCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbzsKKworCQkJCWRzdC5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlkc3Quc2luX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJaW5mbyA9IChzdHJ1Y3Qg
aW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbXNncHRyKTsKKwkJCQltZW1jcHkoKHZvaWQgKikmZHN0
LnNpbl9hZGRyLCAoY29uc3Qgdm9pZCAqKSYoaW5mby0+aXBpX2FkZHIpLCBzaXplb2Yoc3RydWN0
IGluX2FkZHIpKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbHNlCisJCQlpZiAoKGNtc2dwdHItPmNt
c2dfbGV2ZWwgPT0gSVBQUk9UT19JUCkgJiYgKGNtc2dwdHItPmNtc2dfdHlwZSA9PSBJUF9SRUNW
RFNUQUREUikpIHsKKwkJCQlzdHJ1Y3QgaW5fYWRkciAqYWRkcjsKKworCQkJCWRzdC5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlkc3Quc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJYWRkciA9IChzdHJ1Y3QgaW5f
YWRkciAqKUNNU0dfREFUQShjbXNncHRyKTsKKwkJCQltZW1jcHkoKHZvaWQgKikmZHN0LnNpbl9h
ZGRyLCAoY29uc3Qgdm9pZCAqKWFkZHIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQkJCWJy
ZWFrOworCQkJfQorI2VuZGlmCisJCX0KKworCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2Fk
Y2FzdHMgb3IgbXVsdGljYXN0cyAqLworCQlpZiAoSU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5f
YWRkci5zX2FkZHIpKSkgeworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1ZlswXSk7CisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAoU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LnNpbl9hZGRyLCB1ZHByZWN2
bWJ1ZlswXSkpIHsKKwkJCW1fZnJlZW0odWRwcmVjdm1idWZbMF0pOworCQkJY29udGludWU7CisJ
CX0KKworCQkvKm9mZnNldCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0
IHNjdHBfY2h1bmtoZHIpOyovCisJCXNoID0gbXRvZCh1ZHByZWN2bWJ1ZlswXSwgc3RydWN0IHNj
dHBoZHIgKik7CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsg
c2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCW9mZnNldCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cik7CisJCXBvcnQgPSBzcmMuc2luX3BvcnQ7CisJCXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9y
dDsKKwkJZHN0LnNpbl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKKwkJaWYgKHNyYy5zaW5fYWRkci5z
X2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikgeworCQkJY29tcHV0ZV9jcmMgPSAwOworCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3JlY3Zzd2NyYyk7CisJCX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IiVzOiBSZWNlaXZlZCAlZCBieXRlcy4iLCBfX2Z1bmNfXywgbik7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19VU1IsICIgLSBjYWxsaW5nIHNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmcgd2l0aCBv
ZmY9JWRcbiIsIG9mZnNldCk7CisJCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJnVkcHJl
Y3ZtYnVmWzBdLCAwLCBvZmZzZXQsIG4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2gsIGNoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9ERUZBVUxUX1ZSRklELCBwb3J0KTsKKwkJaWYgKHVkcHJlY3ZtYnVmWzBdKSB7
CisJCQltX2ZyZWVtKHVkcHJlY3ZtYnVmWzBdKTsKKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwg
TUFYTEVOX01CVUZfQ0hBSU47IGkrKykgeworCQltX2ZyZWUodWRwcmVjdm1idWZbaV0pOworCX0K
KwkvKiBmcmVlIHRoZSBhcnJheSBpdHNlbGYgKi8KKwlmcmVlKHVkcHJlY3ZtYnVmKTsKKwlyZXR1
cm4gKE5VTEwpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKElORVQ2KQorc3RhdGljIHZvaWQg
KgorcmVjdl9mdW5jdGlvbl91ZHA2KHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqKnVkcHJl
Y3ZtYnVmNjsKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBh
bGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KKwlpbnQgdG9f
ZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNo
IG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG4sIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQg
aW92bGVuID0gTUNMQllURVM7CisJaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDog
MDsKKwlpbnQgd2FudF9oZWFkZXIgPSAwOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7
CisJc3RydWN0IHNjdHBoZHIgKnNoOworCXVpbnQxNl90IHBvcnQ7CisJc3RydWN0IHNjdHBfY2h1
bmtoZHIgKmNoOworCWNoYXIgY21zZ2J1ZltDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9w
a3RpbmZvKSldOworCWludCBjb21wdXRlX2NyYyA9IDE7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKwl1bnNpZ25lZCBpbnQgbmNvdW50ZXI7CisJc3RydWN0IGlvdmVjIGlv
dltNQVhMRU5fTUJVRl9DSEFJTl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGNtc2do
ZHIgKmNtc2dwdHI7CisjZWxzZQorCUdVSUQgV1NBUmVjdk1zZ19HVUlEID0gV1NBSURfV1NBUkVD
Vk1TRzsKKwlMUEZOX1dTQVJFQ1ZNU0cgV1NBUmVjdk1zZzsKKwljaGFyIENvbnRyb2xCdWZmZXJb
MTAyNF07CisJV1NBQlVGIGlvdltNQVhMRU5fTUJVRl9DSEFJTl07CisJV1NBTVNHIG1zZzsKKwlp
bnQgblJlc3VsdCwgbV9FcnJvckNvZGU7CisJRFdPUkQgbmNvdW50ZXI7CisJV1NBQ01TR0hEUiAq
Y21zZ3B0cjsKKyNlbmRpZgorCisJc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAv
VURQL0lQNiByY3YiKTsKKworCXVkcHJlY3ZtYnVmNiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1i
dWYgKikgKiBNQVhMRU5fTUJVRl9DSEFJTik7CisJd2hpbGUgKDEpIHsKKwkJZm9yIChpID0gMDsg
aSA8IHRvX2ZpbGw7IGkrKykgeworCQkJLyogTm90IGdldHRpbmcgdGhlIHBhY2tldCBoZWFkZXIu
IFRlc3RzIHdpdGggY2hhaW4gb2Ygb25lIHJ1bgorCQkJICAgYXMgdXN1YWwgd2l0aG91dCBoYXZp
bmcgdGhlIHBhY2tldCBoZWFkZXIuCisJCQkgICBIYXZlIHRyaWVkIGJvdGggc2VuZGluZyBhbmQg
cmVjZWl2aW5nCisJCQkgKi8KKwkJCXVkcHJlY3ZtYnVmNltpXSA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhpb3ZsZW4sIHdhbnRfaGVhZGVyLCBNX05PV0FJVCwgd2FudF9leHQsIE1UX0RBVEEpOwor
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlpb3ZbaV0uaW92X2Jhc2Ug
PSAoY2FkZHJfdCl1ZHByZWN2bWJ1ZjZbaV0tPm1fZGF0YTsKKwkJCWlvdltpXS5pb3ZfbGVuID0g
aW92bGVuOworI2Vsc2UKKwkJCWlvdltpXS5idWYgPSAoY2FkZHJfdCl1ZHByZWN2bWJ1ZjZbaV0t
Pm1fZGF0YTsKKwkJCWlvdltpXS5sZW4gPSBpb3ZsZW47CisjZW5kaWYKKwkJfQorCQl0b19maWxs
ID0gMDsKKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCW1lbXNldCgm
bXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOworI2Vsc2UKKwkJbWVtc2V0KCZtc2csIDAs
IHNpemVvZihXU0FNU0cpKTsKKyNlbmRpZgorCQltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKwkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7CisJCW1lbXNldChjbXNnYnVmLCAwLCBDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0
IGluNl9wa3RpbmZvKSkpOworCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KwkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikmc3JjOworCQltc2cubXNnX25hbWVsZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCW1zZy5tc2dfaW92ID0gaW92OworCQltc2cubXNn
X2lvdmxlbiA9IE1BWExFTl9NQlVGX0NIQUlOOworCQltc2cubXNnX2NvbnRyb2wgPSAodm9pZCAq
KWNtc2didWY7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IChzb2NrbGVuX3QpQ01TR19MRU4oc2l6
ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKTsKKwkJbXNnLm1zZ19mbGFncyA9IDA7CisKKwkJbmNv
dW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksICZt
c2csIDApOworCQlpZiAobiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQlj
b250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbHNlCisJCW5S
ZXN1bHQgPSBXU0FJb2N0bChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIFNJT19H
RVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsCisJCSAgICAgICAgICAgICAgICAgICAmV1NB
UmVjdk1zZ19HVUlELCBzaXplb2YgV1NBUmVjdk1zZ19HVUlELAorCQkgICAgICAgICAgICAgICAg
ICAgJldTQVJlY3ZNc2csIHNpemVvZiBXU0FSZWN2TXNnLAorCQkgICAgICAgICAgICAgICAgICAg
Jm5jb3VudGVyLCBOVUxMLCBOVUxMKTsKKwkJaWYgKG5SZXN1bHQgPT0gU09DS0VUX0VSUk9SKSB7
CisJCQltX0Vycm9yQ29kZSA9IFdTQUdldExhc3RFcnJvcigpOworCQkJV1NBUmVjdk1zZyA9IE5V
TEw7CisJCX0KKwkJaWYgKG5SZXN1bHQgPT0gMCkgeworCQkJbXNnLm5hbWUgPSAodm9pZCAqKSZz
cmM7CisJCQltc2cubmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCW1z
Zy5scEJ1ZmZlcnMgPSBpb3Y7CisJCQltc2cuZHdCdWZmZXJDb3VudCA9IE1BWExFTl9NQlVGX0NI
QUlOOworCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mIENvbnRyb2xCdWZmZXI7CisJCQltc2cu
Q29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOworCQkJbXNnLmR3RmxhZ3MgPSAwOworCQkJblJl
c3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCAmbXNn
LCAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQl9CisJCWlmIChuUmVzdWx0ICE9IDApIHsKKwkJ
CW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCQlpZiAobV9FcnJvckNvZGUgPT0g
V1NBRVRJTUVET1VUKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKG1fRXJyb3JDb2Rl
ID09IFdTQUVOT1RTT0NLKSB8fCAobV9FcnJvckNvZGUgPT0gV1NBRUlOVFIpKSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKwkJbiA9IG5jb3VudGVyOworI2VuZGlmCisJCVNDVFBfSEVBREVSX0xF
Tih1ZHByZWN2bWJ1ZjZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFsIHBhY2tldCAqLworCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVI2NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQgaW50KW4gPD0gaW92bGVu
KSB7CisJCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWY2WzBdKSA9IG47CisJCQkodG9fZmlsbCkr
KzsKKwkJfSBlbHNlIHsKKwkJCWkgPSAwOworCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmNlsw
XSkgPSBpb3ZsZW47CisKKwkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJ
CSh0b19maWxsKSsrOworCQkJZG8geworCQkJCXVkcHJlY3ZtYnVmNltpXS0+bV9uZXh0ID0gdWRw
cmVjdm1idWY2W2krMV07CisJCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmNltpXS0+bV9uZXh0
KSA9IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQlpKys7CisJCQkJbmNvdW50ZXIgLT0gbWlu
KG5jb3VudGVyLCBpb3ZsZW4pOworCQkJCSh0b19maWxsKSsrOworCQkJfSB3aGlsZSAobmNvdW50
ZXIgPiAwKTsKKwkJfQorCisJCWZvciAoY21zZ3B0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNt
c2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtc2dwdHIpKSB7CisJ
CQlpZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUFY2KSAmJiAoY21zZ3B0ci0+
Y21zZ190eXBlID09IElQVjZfUEtUSU5GTykpIHsKKwkJCQlzdHJ1Y3QgaW42X3BrdGluZm8gKmlu
Zm87CisKKwkJCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZf
TEVOCisJCQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2Vu
ZGlmCisJCQkJaW5mbyA9IChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNHX0RBVEEoY21zZ3B0cik7
CisJCQkJLypkc3Quc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90
dW5uZWxpbmdfcG9ydCkpOyovCisJCQkJbWVtY3B5KCh2b2lkICopJmRzdC5zaW42X2FkZHIsIChj
b25zdCB2b2lkICopJihpbmZvLT5pcGk2X2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
CisJCQl9CisJCX0KKworCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVs
dGljYXN0cyAqLworCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZkc3Quc2luNl9hZGRyKSkg
eworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1ZjZbMF0pOworCQkJY29udGludWU7CisJCX0KKworCQlz
aCA9IG10b2QodWRwcmVjdm1idWY2WzBdLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKKwkJY2ggPSAoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIp
KTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKworCQlwb3J0ID0gc3JjLnNp
bjZfcG9ydDsKKwkJc3JjLnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJZHN0LnNpbjZfcG9y
dCA9IHNoLT5kZXN0X3BvcnQ7CisJCWlmICgobWVtY21wKCZzcmMuc2luNl9hZGRyLCAmZHN0LnNp
bjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CisJCQljb21wdXRlX2Ny
YyA9IDA7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQl9IGVsc2Ugewor
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJfQorCQlTQ1RQREJHKFNDVFBf
REVCVUdfVVNSLCAiJXM6IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVuY19fLCBuKTsKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21tb25faW5wdXRfcHJvY2Vz
c2luZyB3aXRoIG9mZj0lZFxuIiwgKGludClzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwkJc2N0
cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmdWRwcmVjdm1idWY2WzBdLCAwLCBvZmZzZXQsIG4s
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3Qs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklE
LCBwb3J0KTsKKwkJaWYgKHVkcHJlY3ZtYnVmNlswXSkgeworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1
ZjZbMF0pOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsr
KSB7CisJCW1fZnJlZSh1ZHByZWN2bWJ1ZjZbaV0pOworCX0KKwkvKiBmcmVlIHRoZSBhcnJheSBp
dHNlbGYgKi8KKwlmcmVlKHVkcHJlY3ZtYnVmNik7CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRp
ZgorCisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKK3N0YXRpYyB2b2lkCitz
ZXRSZWNlaXZlQnVmZmVyU2l6ZShTT0NLRVQgc2ZkLCBpbnQgbmV3X3NpemUpCisjZWxzZQorc3Rh
dGljIHZvaWQKK3NldFJlY2VpdmVCdWZmZXJTaXplKGludCBzZmQsIGludCBuZXdfc2l6ZSkKKyNl
bmRpZgoreworCWludCBjaCA9IG5ld19zaXplOworCisJaWYgKHNldHNvY2tvcHQgKHNmZCwgU09M
X1NPQ0tFVCwgU09fUkNWQlVGLCAodm9pZCopJmNoLCBzaXplb2YoY2gpKSA8IDApIHsKKyNpZiBk
ZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNS
LCAiQ2FuJ3Qgc2V0IHJlY3YtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExh
c3RFcnJvcigpKTsKKyNlbHNlCisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQg
cmVjdi1idWZmZXJzIHNpemUgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworI2VuZGlmCisJfQor
CXJldHVybjsKK30KKworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCitzdGF0
aWMgdm9pZAorc2V0U2VuZEJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50IG5ld19zaXplKQorI2Vs
c2UKK3N0YXRpYyB2b2lkCitzZXRTZW5kQnVmZmVyU2l6ZShpbnQgc2ZkLCBpbnQgbmV3X3NpemUp
CisjZW5kaWYKK3sKKwlpbnQgY2ggPSBuZXdfc2l6ZTsKKworCWlmIChzZXRzb2Nrb3B0IChzZmQs
IFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9mKGNoKSkgPCAwKSB7Cisj
aWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIkNhbid0IHNldCBzZW5kLWJ1ZmZlcnMgc2l6ZSAoZXJybm8gPSAlZCkuXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
c2V0IHNlbmQtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgor
CX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgU09DS0VUX1RJTUVPVVQgMTAwIC8qIGluIG1zICov
Cit2b2lkCityZWN2X3RocmVhZF9pbml0KHZvaWQpCit7CisjaWYgZGVmaW5lZChJTkVUKQorCXN0
cnVjdCBzb2NrYWRkcl9pbiBhZGRyX2lwdjQ7CisJY29uc3QgaW50IGhkcmluY2wgPSAxOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHJfaXB2NjsK
KyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwljb25zdCBpbnQg
b24gPSAxOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlz
dHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCisJbWVtc2V0KCZ0aW1lb3V0LCAwLCBzaXplb2Yoc3Ry
dWN0IHRpbWV2YWwpKTsKKwl0aW1lb3V0LnR2X3NlYyAgPSAoU09DS0VUX1RJTUVPVVQgLyAxMDAw
KTsKKwl0aW1lb3V0LnR2X3VzZWMgPSAoU09DS0VUX1RJTUVPVVQgJSAxMDAwKSAqIDEwMDA7Cisj
ZWxzZQorCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU09DS0VUX1RJTUVPVVQ7IC8qIFRpbWVvdXQg
aW4gbWlsbGlzZWNvbmRzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Rh
cndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUp
ID09IC0xKSB7CisJCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gc29ja2V0
KEFGX1JPVVRFLCBTT0NLX1JBVywgMCkpID09IC0xKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3QgY3JlYXRlIHJvdXRpbmcgc29ja2V0IChlcnJubyA9ICVkKS5cbiIsIGVycm5v
KTsKKwkJfQorI2lmIDAKKwkJc3RydWN0IHNvY2thZGRyX25sIHNhbmw7CisKKwkJaWYgKChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19SQVcs
IE5FVExJTktfUk9VVEUpKSA8IDApIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4n
dCBjcmVhdGUgcm91dGluZyBzb2NrZXQgKGVycm5vID0gJWQuXG4iLCBlcnJubyk7CisJCX0KKwkJ
bWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOworCQlzYW5sLm5sX2ZhbWlseSA9IEFGX05F
VExJTks7CisJCXNhbmwubmxfZ3JvdXBzID0gMDsKKyNpZmRlZiBJTkVUCisJCXNhbmwubmxfZ3Jv
dXBzIHw9IFJUTUdSUF9JUFY0X0lGQUREUjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCXNhbmwu
bmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKKyNlbmRpZgorCQlpZiAoYmluZChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNhbmwsIHNp
emVvZihzYW5sKSkgPCAwKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmlu
ZCByb3V0aW5nIHNvY2tldCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQljbG9zZShTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOworCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpID0gLTE7CisJCX0KKyNlbmRpZgorCQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpICE9IC0xKSB7CisJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yb3V0ZSksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLChjb25zdCB2b2lkKikmdGltZW91dCwg
c2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSkgPCAwKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHJvdXRpbmcgc29ja2V0IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJY2xvc2Vz
b2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKKyNlbHNlCisJCQkJY2xvc2Uo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKKyNlbmRpZgorCQkJCVNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3JvdXRlKSA9IC0xOworCQkJfQorCQl9CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChJTkVUKQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9PSAtMSkg
eworCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfUkFXLCBJUFBST1RPX1NDVFApKSA9PSAtMSkgeworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVh
dGUgcmF3IHNvY2tldCBmb3IgSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSByYXcg
c29ja2V0IGZvciBJUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQl9IGVs
c2UgeworCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFNDVFAgc29ja2V0ICovCisJ
CQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgSVBQUk9U
T19JUCwgSVBfSERSSU5DTCwoY29uc3Qgdm9pZCopJmhkcmluY2wsIHNpemVvZihpbnQpKSA8IDAp
IHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9IRFJJTkNMIChlcnJubyA9ICVkKS5cbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKKwkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQg
SVBfSERSSU5DTCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfcmF3c2N0cCkgPSAtMTsKKwkJCX0gZWxzZSBpZiAoc2V0c29ja29wdChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChjb25zdCB2
b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7CisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7CisJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cCkpOworI2Vsc2UKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0
IHRpbWVvdXQgb24gc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8p
OworCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApKTsKKyNlbmRpZgor
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7CisJCQl9IGVsc2Ugewor
CQkJCW1lbXNldCgodm9pZCAqKSZhZGRyX2lwdjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlhZGRyX2lwdjQuc2luX2xlbiAgICAgICAg
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCQlhZGRyX2lwdjQuc2lu
X2ZhbWlseSAgICAgID0gQUZfSU5FVDsKKwkJCQlhZGRyX2lwdjQuc2luX3BvcnQgICAgICAgID0g
aHRvbnMoMCk7CisJCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9B
TlkpOworCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCAoY29u
c3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVy
cm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCQljbG9zZXNvY2tldChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZWxzZQorCQkJCQlTQ1RQREJHKFNDVFBf
REVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8gPSAlZCku
XG4iLCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
KTsKKyNlbmRpZgorCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSA9IC0xOwor
CQkJCX0gZWxzZSB7CisJCQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJCXNldFNlbmRCdWZmZXJT
aXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLIElz
IHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBz
ZXQgdG8gNjRLPyAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCkgPT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV91ZHBzY3RwKSA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpID09
IC0xKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVy
cm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJDYW4ndCBjcmVhdGUgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJu
byA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQl9IGVsc2UgeworI2lmIGRlZmluZWQoSVBf
UEtUSU5GTykKKwkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNj
dHApLCBJUFBST1RPX0lQLCBJUF9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXpl
b2YoaW50KSkgPCAwKSB7CisjZWxzZQorCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCksIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAoY29uc3Qgdm9p
ZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaWYgZGVmaW5lZChJUF9QS1RJTkZPKQorCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBfUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFND
VFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UK
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1JFQ1ZEU1RBRERSIG9u
IHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJy
b3IoKSk7CisjZW5kaWYKKwkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSk7CisjZWxzZQorI2lmIGRlZmluZWQoSVBfUEtUSU5GTykKKwkJCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL1VE
UC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbHNlCisJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9SRUNWRFNUQUREUiBvbiBzb2NrZXQgZm9yIFNDVFAv
VURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworI2VuZGlmCisJCQkJY2xvc2UoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKKwkJCX0gZWxzZSBpZiAoc2V0c29ja29wdChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNWVElNRU8sIChj
b25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7CisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJD
YW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQp
LlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApKTsKKyNlbHNlCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAl
ZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cCkpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsK
KwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NCwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQkJCWFkZHJfaXB2NC5z
aW5fbGVuICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJ
CWFkZHJfaXB2NC5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworCQkJCWFkZHJfaXB2NC5zaW5f
cG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19w
b3J0KSk7CisJCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9BTlkp
OworCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCAoY29uc3Qg
c3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikp
IDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChl
cnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQkJY2xvc2Vzb2NrZXQoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2Vsc2UKKwkJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9
ICVkKS5cbiIsIGVycm5vKTsKKwkJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cCkpOworI2VuZGlmCisJCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApID0g
LTE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEyOEsgKi8KKwkJCQkJc2V0U2VuZEJ1
ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEy
OEsgSXMgdGhpcyBzZXR0aW5nIG5ldC5pbmV0LnJhdy5tYXhkZ3JhbSB2YWx1ZT8gU2hvdWxkIGl0
IGJlIHNldCB0byA2NEs/ICovCisJCQkJfQorCQkJfQorCQl9CisJfQorI2VuZGlmCisjaWYgZGVm
aW5lZChJTkVUNikKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID09IC0x
KSB7CisJCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gc29ja2V0KEFG
X0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19TQ1RQKSkgPT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
Y3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RF
cnJvcigpKTsKKyNlbHNlCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRl
IHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgor
CQl9IGVsc2UgeworCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFNDVFAgc29ja2V0
ICovCisjaWYgZGVmaW5lZChJUFY2X1JFQ1ZQS1RJTkZPKQorCQkJaWYgKHNldHNvY2tvcHQoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfUkVDVlBL
VElORk8sIChjb25zdCB2b2lkICopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2Vsc2UKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUkVDVlBLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYg
KGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHA2KSk7CisjZW5kaWYKKwkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdz
Y3RwNikgPSAtMTsKKwkJCX0gZWxzZSB7CisjZWxzZQorCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfUEtUSU5GTywo
Y29uc3Qgdm9pZCopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJ
UFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NB
R2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgSVBWNl9QS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKKwkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwor
I2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7CisJCQl9
IGVsc2UgeworI2VuZGlmCisJCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY29uc3Qgdm9pZCopJm9u
LCAoc29ja2xlbl90KXNpemVvZihvbikpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2
X1Y2T05MWSBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRM
YXN0RXJyb3IoKSk7CisjZWxzZQorCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qg
c2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIs
IGVycm5vKTsKKyNlbmRpZgorCQkJCX0KKwkJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNiksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLCAoY29uc3Qgdm9p
ZCAqKSZ0aW1lb3V0LCBzaXplb2YodGltZW91dCkpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNl
dCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKKwkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpKTsKKyNlbHNlCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBz
ZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJu
byk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5k
aWYKKwkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpID0gLTE7CisJCQkJfSBl
bHNlIHsKKwkJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQkJCWFkZHJfaXB2Ni5zaW42
X2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCQkJ
CWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7CisJCQkJCWFkZHJfaXB2Ni5z
aW42X3BvcnQgICAgICAgID0gaHRvbnMoMCk7CisJCQkJCWFkZHJfaXB2Ni5zaW42X2FkZHIgICAg
ICAgID0gaW42YWRkcl9hbnk7CisJCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyX2lwdjYsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0
IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJ
CQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKKyNlbHNl
CisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFND
VFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2VuZGlmCisJCQkJCQlTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNldFJlY2VpdmVC
dWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgU0JfUkFXKTsgLyog
MTI4SyAqLworCQkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcu
bWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAqLworCQkJCQl9CisJCQkJ
fQorCQkJfQorCQl9CisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikg
PT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgPSBzb2Nr
ZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gLTEpIHsKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAi
Q2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJy
bm8pOworI2VuZGlmCisJCX0KKyNpZiBkZWZpbmVkKElQVjZfUkVDVlBLVElORk8pCisJCWlmIChz
ZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgSVBQUk9UT19JUFY2
LCBJUFY2X1JFQ1ZQS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkg
PCAwKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3Ig
U0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOworI2Vsc2UKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9SRUNWUEtUSU5GTyBvbiBz
b2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQkJY2xv
c2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0gZWxzZSB7CisjZWxzZQorCQlp
ZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9f
SVBWNiwgSVBWNl9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkg
PCAwKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQ
L1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCWNsb3Nl
c29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZWxzZQorCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZv
ciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCWNsb3NlKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZW5kaWYKKwkJCVNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOworCQl9IGVsc2UgeworI2VuZGlmCisJCQlpZiAoc2V0
c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIElQUFJPVE9fSVBWNiwg
SVBWNl9WNk9OTFksIChjb25zdCB2b2lkICopJm9uLCAoc29ja2xlbl90KXNpemVvZihvbikpIDwg
MCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9V
RFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9WNk9OTFkgb24gc29ja2V0
IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQkJ
fQorCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCBT
T0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGltZW91dCwgc2l6ZW9mKHRp
bWVvdXQpKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3Ig
U0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQkJ
Y2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbHNlCisJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBm
b3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJCVNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOworCQkJfSBlbHNlIHsKKwkJCQltZW1zZXQoKHZv
aWQgKikmYWRkcl9pcHY2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVm
IEhBVkVfU0lONl9MRU4KKwkJCQlhZGRyX2lwdjYuc2luNl9sZW4gICAgICAgICA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAg
ICAgID0gQUZfSU5FVDY7CisJCQkJYWRkcl9pcHY2LnNpbjZfcG9ydCAgICAgICAgPSBodG9ucyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQkJYWRkcl9pcHY2
LnNpbjZfYWRkciAgICAgICAgPSBpbjZhZGRyX2FueTsKKwkJCQlpZiAoYmluZChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcl9p
cHY2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0
IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExh
c3RFcnJvcigpKTsKKwkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cDYpKTsKKyNlbHNlCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBiaW5k
IHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJ
CWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZW5kaWYKKwkJCQkJ
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCQkJfSBlbHNlIHsKKwkJ
CQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYp
LCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJCXNldFNlbmRCdWZmZXJTaXplKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgU0JfUkFXKTsgLyogMTI4SyBJcyB0aGlzIHNldHRpbmcg
bmV0LmluZXQucmF3Lm1heGRncmFtIHZhbHVlPyBTaG91bGQgaXQgYmUgc2V0IHRvIDY0Sz8gKi8K
KwkJCQl9CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSAhPSAtMSkgeworCQlpbnQg
cmM7CisKKwkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVhdGUoJlNDVFBfQkFT
RV9WQVIocmVjdnRocmVhZHJvdXRlKSwgJnJlY3ZfZnVuY3Rpb25fcm91dGUpKSkgeworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IHJvdXRpbmcgdGhyZWFkICglZCkuXG4i
LCByYyk7CisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOworCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7CisJCX0KKwl9CisjZW5kaWYKKyNlbmRp
ZgorI2lmIGRlZmluZWQoSU5FVCkKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cCkgIT0gLTEpIHsKKwkJaW50IHJjOworCisJCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJl
YWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCAmcmVjdl9mdW5jdGlvbl9y
YXcpKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IFNDVFAvSVB2
NCByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKwkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
KTsKKyNlbHNlCisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Cisj
ZW5kaWYKKwkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7CisJCX0KKwl9
CisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7CisJCWludCBy
YzsKKworCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFkX2NyZWF0ZSgmU0NUUF9CQVNF
X1ZBUihyZWN2dGhyZWFkdWRwKSwgJnJlY3ZfZnVuY3Rpb25fdWRwKSkpIHsKKwkJCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL1VEUC9JUHY0IHJlY3YgdGhyZWFkICgl
ZCkuXG4iLCByYyk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJY2xv
c2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2Vsc2UKKwkJCWNs
b3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKKyNlbmRpZgorCQkJU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKKwkJfQorCX0KKyNlbmRpZgorI2lmIGRl
ZmluZWQoSU5FVDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSAhPSAt
MSkgeworCQlpbnQgcmM7CisKKwkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVh
dGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJhdzYpLCAmcmVjdl9mdW5jdGlvbl9yYXc2KSkp
IHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL0lQdjYgcmVj
diB0aHJlYWQgKCVkKS5cbiIsIHJjKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwor
I2Vsc2UKKwkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5k
aWYKKwkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9IC0xOworCQl9CisJfQor
CWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpIHsKKwkJaW50IHJj
OworCisJCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0Vf
VkFSKHJlY3Z0aHJlYWR1ZHA2KSwgJnJlY3ZfZnVuY3Rpb25fdWRwNikpKSB7CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc3RhcnQgU0NUUC9VRFAvSVB2NiByZWN2IHRocmVhZCAo
JWQpLlxuIiwgcmMpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCWNs
b3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZWxzZQorCQkJ
Y2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgorCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0KKwl9CisjZW5kaWYKK30K
Kwordm9pZAorcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKQoreworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RyYWdvbkZseSkgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVm
aW5lZChJTkVUNikKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpICE9IC0xKSB7
CisJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7CisJfQorI2VuZGlmCisj
ZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHApICE9IC0xKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZWxzZQorCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZW5kaWYKKwl9CisJaWYg
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7CisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwKSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSk7CisjZW5kaWYKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWlmIChT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHA2KSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwNikpOworI2VuZGlmCisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwNikgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWNs
b3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZWxzZQorCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOworI2VuZGlmCisJfQorI2Vu
ZGlmCit9CisjZWxzZQoraW50IGZvbzsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVj
dl90aHJlYWQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
Li42MWNkZjE3MjExMmM1MWFjMGZlM2JjYWZmOGI0ODU1Y2Y3YTYwYWNmIDEwMDc1NQotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaApAQCAtMCwwICsxLDM0IEBACisvKi0KKyAqIENvcHly
aWdodCAoYykgMjAxMiBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0IChjKSAyMDEyIElyZW5l
IFJ1ZW5nZWxlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisg
KiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9VU0VSX1JF
Q1ZfVEhSRUFEX0hfCisjZGVmaW5lCV9VU0VSX1JFQ1ZfVEhSRUFEX0hfCisKK3ZvaWQgcmVjdl90
aHJlYWRfaW5pdCh2b2lkKTsKK3ZvaWQgcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKTsKKworI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcm91dGUuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlh
ZTc3NWFkOGMyZTQ4YzUzOTEuLjgyYjA3ZDc2OWE5Y2VjMzljMDQxM2YwZjU0OWM0ZDIwNjJkN2Zl
NWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCkBAIC0wLDAgKzEsMTMwIEBACisvKi0KKyAq
IENvcHlyaWdodCAoYykgMTk4MCwgMTk4NiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVu
aXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2Yg
aXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICog
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisg
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQor
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9VU0VSX1JPVVRFX0hfCisj
ZGVmaW5lIF9VU0VSX1JPVVRFX0hfCisKKy8qCisgKiBLZXJuZWwgcmVzaWRlbnQgcm91dGluZyB0
YWJsZXMuCisgKgorICogVGhlIHJvdXRpbmcgdGFibGVzIGFyZSBpbml0aWFsaXplZCB3aGVuIGlu
dGVyZmFjZSBhZGRyZXNzZXMKKyAqIGFyZSBzZXQgYnkgbWFraW5nIGVudHJpZXMgZm9yIGFsbCBk
aXJlY3RseSBjb25uZWN0ZWQgaW50ZXJmYWNlcy4KKyAqLworCisvKgorICogQSByb3V0ZSBjb25z
aXN0cyBvZiBhIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIGEgcmVmZXJlbmNlCisgKiB0byBhIHJv
dXRpbmcgZW50cnkuICBUaGVzZSBhcmUgb2Z0ZW4gaGVsZCBieSBwcm90b2NvbHMKKyAqIGluIHRo
ZWlyIGNvbnRyb2wgYmxvY2tzLCBlLmcuIGlucGNiLgorICovCisKK3N0cnVjdCBzY3RwX3JvdXRl
IHsKKwlzdHJ1Y3QJc2N0cF9ydGVudHJ5ICpyb19ydDsKKwlzdHJ1Y3QJc29ja2FkZHIgcm9fZHN0
OworfTsKKworLyoKKyAqIFRoZXNlIG51bWJlcnMgYXJlIHVzZWQgYnkgcmVsaWFibGUgcHJvdG9j
b2xzIGZvciBkZXRlcm1pbmluZworICogcmV0cmFuc21pc3Npb24gYmVoYXZpb3IgYW5kIGFyZSBp
bmNsdWRlZCBpbiB0aGUgcm91dGluZyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBzY3RwX3J0X21l
dHJpY3NfbGl0ZSB7CisJdWludDMyX3Qgcm14X210dTsJLyogTVRVIGZvciB0aGlzIHBhdGggKi8K
KyNpZiAwCisJdV9sb25nCXJteF9leHBpcmU7CS8qIGxpZmV0aW1lIGZvciByb3V0ZSwgZS5nLiBy
ZWRpcmVjdCAqLworCXVfbG9uZwlybXhfcGtzZW50OwkvKiBwYWNrZXRzIHNlbnQgdXNpbmcgdGhp
cyByb3V0ZSAqLworI2VuZGlmCit9OworCisvKgorICogV2UgZGlzdGluZ3Vpc2ggYmV0d2VlbiBy
b3V0ZXMgdG8gaG9zdHMgYW5kIHJvdXRlcyB0byBuZXR3b3JrcywKKyAqIHByZWZlcnJpbmcgdGhl
IGZvcm1lciBpZiBhdmFpbGFibGUuICBGb3IgZWFjaCByb3V0ZSB3ZSBpbmZlcgorICogdGhlIGlu
dGVyZmFjZSB0byB1c2UgZnJvbSB0aGUgZ2F0ZXdheSBhZGRyZXNzIHN1cHBsaWVkIHdoZW4KKyAq
IHRoZSByb3V0ZSB3YXMgZW50ZXJlZC4gIFJvdXRlcyB0aGF0IGZvcndhcmQgcGFja2V0cyB0aHJv
dWdoCisgKiBnYXRld2F5cyBhcmUgbWFya2VkIHNvIHRoYXQgdGhlIG91dHB1dCByb3V0aW5lcyBr
bm93IHRvIGFkZHJlc3MgdGhlCisgKiBnYXRld2F5IHJhdGhlciB0aGFuIHRoZSB1bHRpbWF0ZSBk
ZXN0aW5hdGlvbi4KKyAqLworc3RydWN0IHNjdHBfcnRlbnRyeSB7CisjaWYgMAorCXN0cnVjdAly
YWRpeF9ub2RlIHJ0X25vZGVzWzJdOwkvKiB0cmVlIGdsdWUsIGFuZCBvdGhlciB2YWx1ZXMgKi8K
KwkvKgorCSAqIFhYWCBzdHJ1Y3QgcnRlbnRyeSBtdXN0IGJlZ2luIHdpdGggYSBzdHJ1Y3QgcmFk
aXhfbm9kZSAob3IgdHdvISkKKwkgKiBiZWNhdXNlIHRoZSBjb2RlIGRvZXMgc29tZSBjYXN0cyBv
ZiBhICdzdHJ1Y3QgcmFkaXhfbm9kZSAqJworCSAqIHRvIGEgJ3N0cnVjdCBydGVudHJ5IConCisJ
ICovCisjZGVmaW5lCXJ0X2tleShyKQkoKigoc3RydWN0IHNvY2thZGRyICoqKSgmKHIpLT5ydF9u
b2Rlcy0+cm5fa2V5KSkpCisjZGVmaW5lCXJ0X21hc2socikJKCooKHN0cnVjdCBzb2NrYWRkciAq
KikoJihyKS0+cnRfbm9kZXMtPnJuX21hc2spKSkKKwlzdHJ1Y3QJc29ja2FkZHIgKnJ0X2dhdGV3
YXk7CS8qIHZhbHVlICovCisJdV9sb25nCXJ0X2ZsYWdzOwkJLyogdXAvZG93bj8sIGhvc3QvbmV0
ICovCisjZW5kaWYKKwlzdHJ1Y3QJaWZuZXQgKnJ0X2lmcDsJCS8qIHRoZSBhbnN3ZXI6IGludGVy
ZmFjZSB0byB1c2UgKi8KKwlzdHJ1Y3QJaWZhZGRyICpydF9pZmE7CQkvKiB0aGUgYW5zd2VyOiBp
bnRlcmZhY2UgYWRkcmVzcyB0byB1c2UgKi8KKwlzdHJ1Y3QJc2N0cF9ydF9tZXRyaWNzX2xpdGUg
cnRfcm14OwkvKiBtZXRyaWNzIHVzZWQgYnkgcngnaW5nIHByb3RvY29scyAqLworCWxvbmcJcnRf
cmVmY250OwkJLyogIyBoZWxkIHJlZmVyZW5jZXMgKi8KKyNpZiAwCisJc3RydWN0CXNvY2thZGRy
ICpydF9nZW5tYXNrOwkvKiBmb3IgZ2VuZXJhdGlvbiBvZiBjbG9uZWQgcm91dGVzICovCisJY2Fk
ZHJfdAlydF9sbGluZm87CQkvKiBwb2ludGVyIHRvIGxpbmsgbGV2ZWwgaW5mbyBjYWNoZSAqLwor
CXN0cnVjdAlydGVudHJ5ICpydF9nd3JvdXRlOwkvKiBpbXBsaWVkIGVudHJ5IGZvciBnYXRld2F5
ZWQgcm91dGVzICovCisJc3RydWN0CXJ0ZW50cnkgKnJ0X3BhcmVudDsgCS8qIGNsb25pbmcgcGFy
ZW50IG9mIHRoaXMgcm91dGUgKi8KKyNlbmRpZgorCXN0cnVjdAltdHggcnRfbXR4OwkJLyogbXV0
ZXggZm9yIHJvdXRpbmcgZW50cnkgKi8KK307CisKKyNkZWZpbmUJUlRfTE9DS19JTklUKF9ydCkJ
bXR4X2luaXQoJihfcnQpLT5ydF9tdHgsICJydGVudHJ5IiwgTlVMTCwgTVRYX0RFRiB8IE1UWF9E
VVBPSykKKyNkZWZpbmUJUlRfTE9DSyhfcnQpCQltdHhfbG9jaygmKF9ydCktPnJ0X210eCkKKyNk
ZWZpbmUJUlRfVU5MT0NLKF9ydCkJCW10eF91bmxvY2soJihfcnQpLT5ydF9tdHgpCisjZGVmaW5l
CVJUX0xPQ0tfREVTVFJPWShfcnQpCW10eF9kZXN0cm95KCYoX3J0KS0+cnRfbXR4KQorI2RlZmlu
ZQlSVF9MT0NLX0FTU0VSVChfcnQpCW10eF9hc3NlcnQoJihfcnQpLT5ydF9tdHgsIE1BX09XTkVE
KQorCisjZGVmaW5lCVJUX0FERFJFRihfcnQpCWRvIHsJCQkJCVwKKwlSVF9MT0NLX0FTU0VSVChf
cnQpOwkJCQkJXAorCUtBU1NFUlQoKF9ydCktPnJ0X3JlZmNudCA+PSAwLAkJCQlcCisJCSgibmVn
YXRpdmUgcmVmY250ICVsZCIsIChfcnQpLT5ydF9yZWZjbnQpKTsJXAorCShfcnQpLT5ydF9yZWZj
bnQrKzsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lCVJUX1JFTVJFRihfcnQpCWRvIHsJCQkJ
CVwKKwlSVF9MT0NLX0FTU0VSVChfcnQpOwkJCQkJXAorCUtBU1NFUlQoKF9ydCktPnJ0X3JlZmNu
dCA+IDAsCQkJCVwKKwkJKCJib2d1cyByZWZjbnQgJWxkIiwgKF9ydCktPnJ0X3JlZmNudCkpOwlc
CisJKF9ydCktPnJ0X3JlZmNudC0tOwkJCQkJXAorfSB3aGlsZSAoMCkKKyNkZWZpbmUJUlRGUkVF
X0xPQ0tFRChfcnQpIGRvIHsJCQkJCVwKKwkJaWYgKChfcnQpLT5ydF9yZWZjbnQgPD0gMSkgewkJ
CVwKKwkJCXJ0ZnJlZShfcnQpOwkJCQlcCisJCX0gZWxzZSB7CQkJCQlcCisJCQlSVF9SRU1SRUYo
X3J0KTsJCQkJXAorCQkJUlRfVU5MT0NLKF9ydCk7CQkJCVwKKwkJfQkJCQkJCVwKKwkJLyogZ3Vh
cmQgYWdhaW5zdCBpbnZhbGlkIHJlZnMgKi8JCVwKKwkJX3J0ID0gTlVMTDsJCQkJCVwKKwl9IHdo
aWxlICgwKQorI2RlZmluZQlSVEZSRUUoX3J0KSBkbyB7CQkJCQlcCisJCVJUX0xPQ0soX3J0KTsJ
CQkJCVwKKwkJUlRGUkVFX0xPQ0tFRChfcnQpOwkJCQlcCit9IHdoaWxlICgwKQorI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MS4uOWZlNjk3NmEwYzc4N2ZiNmQwZTU5ZjJhZWExMDMxMmU1NzU2YzZiNCAx
MDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldC5jCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYwpAQCAtMCwwICsxLDM2ODAgQEAKKy8qLQorICog
Q29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkzCisgKiAgICAgIFRoZSBS
ZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDQgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQ29weXJpZ2h0IChjKSAyMDA0LTIwMDgg
Um9iZXJ0IE4uIE0uIFdhdHNvbgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5v
ZmYKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEgS2FtYWwKKyAqIENvcHlyaWdo
dCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQ29weXJpZ2h0IChjKSAyMDExLTIw
MTIgTWljaGFlbCBUdWV4ZW4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BlZWxvZmYuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZmRlZiBJTkVUNgorI2luY2x1ZGUgPG5ldGluZXQ2
L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNE
KQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19MaW51eCkKKyNkZWZpbmUgX19GQVZPUl9CU0QgICAgLyogKG9uIFVidW50dSBhdCBsZWFz
dCkgZW5hYmxlcyBVRFAgaGVhZGVyIGZpZWxkIG5hbWVzIGxpa2UgQlNEIGluIFJGQyA3NjggKi8K
KyNlbmRpZgorI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmIGRlZmlu
ZWQgSU5FVCB8fCBkZWZpbmVkIElORVQ2CisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRp
ZgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX3NvY2tldHZh
ci5oPgorI2VuZGlmCit1c2VybGFuZF9tdXRleF90IGFjY2VwdF9tdHg7Cit1c2VybGFuZF9jb25k
X3QgYWNjZXB0X2NvbmQ7CisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1
ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisKK01BTExPQ19ERUZJTkUoTV9QQ0IsICJzY3RwX3Bj
YiIsICJzY3RwIHBjYiIpOworTUFMTE9DX0RFRklORShNX1NPTkFNRSwgInNjdHBfc29uYW1lIiwg
InNjdHAgc29uYW1lIik7CisjZGVmaW5lIE1BWExFTl9NQlVGX0NIQUlOICAzMgorCisvKiBQcm90
b3R5cGVzICovCitleHRlcm4gaW50IHNjdHBfc29zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCB1aW8gKnVpbywKKyAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2wsIGludCBmbGFncywKKyAg
ICAgICAgICAgICAgICAgICAgICAgLyogcHJvYyBpcyBhIGR1bW15IGluIF9fVXNlcnNwYWNlX18g
YW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0byBzY3RwX2xvd2VyX3Nvc2VuZCAqLworICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgcHJvYyAqcCk7CisKK2V4dGVybiBpbnQgc2N0cF9hdHRhY2go
c3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3QgdnJmX2lkKTsKK2V4dGVybiBp
bnQgc2N0cGNvbm5fYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8sIHVpbnQzMl90
IHZyZl9pZCk7CisKK3ZvaWQKK3VzcnNjdHBfaW5pdCh1aW50MTZfdCBwb3J0LAorICAgICAgICAg
ICAgIGludCAoKmNvbm5fb3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiksCisgICAgICAgICAgICAgdm9pZCAo
KmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKQoreworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJV1NBREFUQSB3c2FEYXRhOworCisJaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQoMiwyKSwg
JndzYURhdGEpICE9IDApIHsKKwkJU0NUUF9QUklOVEYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsK
KwkJZXhpdCAoLTEpOworCX0KKyNlbmRpZgorCUluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZSgm
YWNjZXB0X2NvbmQpOworCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJmFjY2VwdF9tdHgpOwor
I2Vsc2UKKwlwdGhyZWFkX211dGV4YXR0cl90IG11dGV4X2F0dHI7CisKKwlwdGhyZWFkX211dGV4
YXR0cl9pbml0KCZtdXRleF9hdHRyKTsKKyNpZmRlZiBJTlZBUklBTlRTCisJcHRocmVhZF9tdXRl
eGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKTsKKyNl
bmRpZgorCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWNjZXB0X210eCwgJm11dGV4X2F0dHIpOworCXB0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4X2F0dHIpOworCXB0aHJlYWRfY29uZF9pbml0
KCZhY2NlcHRfY29uZCwgTlVMTCk7CisjZW5kaWYKKwlzY3RwX2luaXQocG9ydCwgY29ubl9vdXRw
dXQsIGRlYnVnX3ByaW50Zik7Cit9CisKKworLyogVGFrZW4gZnJvbSAgdXNyL3NyYy9zeXMva2Vy
bi91aXBjX3NvY2tidWYuYyBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18qLworLyoKKyAq
IFNvY2FudHNlbmRtb3JlIGluZGljYXRlcyB0aGF0IG5vIG1vcmUgZGF0YSB3aWxsIGJlIHNlbnQg
b24gdGhlIHNvY2tldDsgaXQKKyAqIHdvdWxkIG5vcm1hbGx5IGJlIGFwcGxpZWQgdG8gYSBzb2Nr
ZXQgd2hlbiB0aGUgdXNlciBpbmZvcm1zIHRoZSBzeXN0ZW0KKyAqIHRoYXQgbm8gbW9yZSBkYXRh
IGlzIHRvIGJlIHNlbnQsIGJ5IHRoZSBwcm90b2NvbCBjb2RlIChpbiBjYXNlCisgKiBQUlVfU0hV
VERPV04pLiAgU29jYW50cmN2bW9yZSBpbmRpY2F0ZXMgdGhhdCBubyBtb3JlIGRhdGEgd2lsbCBi
ZQorICogcmVjZWl2ZWQsIGFuZCB3aWxsIG5vcm1hbGx5IGJlIGFwcGxpZWQgdG8gdGhlIHNvY2tl
dCBieSBhIHByb3RvY29sIHdoZW4gaXQKKyAqIGRldGVjdHMgdGhhdCB0aGUgcGVlciB3aWxsIHNl
bmQgbm8gbW9yZSBkYXRhLiAgRGF0YSBxdWV1ZWQgZm9yIHJlYWRpbmcgaW4KKyAqIHRoZSBzb2Nr
ZXQgbWF5IHlldCBiZSByZWFkLgorICovCisKK3ZvaWQgc29jYW50cmN2bW9yZV9sb2NrZWQoc3Ry
dWN0IHNvY2tldCAqc28pCit7CisJU09DS0JVRl9MT0NLX0FTU0VSVCgmc28tPnNvX3Jjdik7CisJ
c28tPnNvX3Jjdi5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFJDVk1PUkU7CisJc29yd2FrZXVwX2xvY2tl
ZChzbyk7Cit9CisKK3ZvaWQgc29jYW50cmN2bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlT
T0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOworCXNvY2FudHJjdm1vcmVfbG9ja2VkKHNvKTsKK30K
Kwordm9pZAorc29jYW50c2VuZG1vcmVfbG9ja2VkKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCVNP
Q0tCVUZfTE9DS19BU1NFUlQoJnNvLT5zb19zbmQpOworCXNvLT5zb19zbmQuc2Jfc3RhdGUgfD0g
U0JTX0NBTlRTRU5ETU9SRTsKKwlzb3d3YWtldXBfbG9ja2VkKHNvKTsKK30KKwordm9pZAorc29j
YW50c2VuZG1vcmUoc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS0JVRl9MT0NLKCZzby0+c29f
c25kKTsKKwlzb2NhbnRzZW5kbW9yZV9sb2NrZWQoc28pOworfQorCisKKworLyogVGFrZW4gZnJv
bSAgdXNyL3NyYy9zeXMva2Vybi91aXBjX3NvY2tidWYuYyBhbmQgY2FsbGVkIHdpdGhpbiBzY3Rw
X2xvd2VyX3Nvc2VuZC4KKyAqLworaW50CitzYndhaXQoc3RydWN0IHNvY2tidWYgKnNiKQorewor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgLyogX19Vc2Vyc3BhY2VfXyAqLworCisJU09DS0JV
Rl9MT0NLX0FTU0VSVChzYik7CisKKwlzYi0+c2JfZmxhZ3MgfD0gU0JfV0FJVDsKKyNpZiBkZWZp
bmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCWlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxl
Q1MoJihzYi0+c2JfY29uZCksICYoc2ItPnNiX210eCksIElORklOSVRFKSkKKwkJcmV0dXJuIDA7
CisJZWxzZQorCQlyZXR1cm4gLTE7CisjZWxzZQorCXJldHVybiAocHRocmVhZF9jb25kX3dhaXQo
JihzYi0+c2JfY29uZCksICYoc2ItPnNiX210eCkpKTsKKyNlbmRpZgorCisjZWxzZQorCVNPQ0tC
VUZfTE9DS19BU1NFUlQoc2IpOworCisJc2ItPnNiX2ZsYWdzIHw9IFNCX1dBSVQ7CisJcmV0dXJu
IChtc2xlZXAoJnNiLT5zYl9jYywgJnNiLT5zYl9tdHgsCisJICAgIChzYi0+c2JfZmxhZ3MgJiBT
Ql9OT0lOVFIpID8gUFNPQ0sgOiBQU09DSyB8IFBDQVRDSCwgInNid2FpdCIsCisJICAgIHNiLT5z
Yl90aW1lbykpOworI2VuZGlmCit9CisKKworCisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tl
cm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8K
K3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICoKK3NvYWxsb2Modm9pZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0
ICpzbzsKKworCS8qCisJICogc29hbGxvYygpIHNldHMgb2Ygc29ja2V0IGxheWVyIHN0YXRlIGZv
ciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2NyZWF0ZSgpIGFuZCBzb25ld2Nvbm4o
KS4KKwkgKgorCSAqIHNvZGVhbGxvYygpIHRlYXJzIGRvd24gc29ja2V0IGxheWVyIHN0YXRlIGZv
ciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2ZyZWUoKSBhbmQgc29uZXdjb25uKCku
CisJICogX19Vc2Vyc3BhY2VfXyBUT0RPIDogTWFrZSBzdXJlIHNvIGlzIHByb3Blcmx5IGRlYWxs
b2NhdGVkCisJICogd2hlbiB0ZWFyaW5nIGRvd24gdGhlIGNvbm5lY3Rpb24uCisJICovCisKKwlz
byA9IChzdHJ1Y3Qgc29ja2V0ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2V0KSk7CisKKwlp
ZiAoc28gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwltZW1zZXQoc28sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2V0KSk7CisKKwkvKiBfX1VzZXJzcGFjZV9fIEluaXRpYWxpemluZyB0
aGUgc29ja2V0IGxvY2tzIGhlcmUgKi8KKwlTT0NLQlVGX0xPQ0tfSU5JVCgmc28tPnNvX3NuZCwg
InNvX3NuZCIpOworCVNPQ0tCVUZfTE9DS19JTklUKCZzby0+c29fcmN2LCAic29fcmN2Iik7CisJ
U09DS0JVRl9DT05EX0lOSVQoJnNvLT5zb19zbmQpOworCVNPQ0tCVUZfQ09ORF9JTklUKCZzby0+
c29fcmN2KTsKKwlTT0NLX0NPTkRfSU5JVChzbyk7IC8qIHRpbWVvX2NvbmQgKi8KKworCS8qIF9f
VXNlcnNwYWNlX18gQW55IHJlZiBjb3VudGluZyByZXF1aXJlZCBoZXJlPyBXaWxsIHdlIGhhdmUg
YW55IHVzZSBmb3IgYWlvam9icT8KKwkgICBXaGF0IGFib3V0IGdlbmNudCBhbmQgbnVtb3BlbnNv
Y2tldHM/Ki8KKwlUQUlMUV9JTklUKCZzby0+c29fYWlvam9icSk7CisJcmV0dXJuIChzbyk7Cit9
CisKK3N0YXRpYyB2b2lkCitzb2RlYWxsb2Moc3RydWN0IHNvY2tldCAqc28pCit7CisKKwlLQVNT
RVJUKHNvLT5zb19jb3VudCA9PSAwLCAoInNvZGVhbGxvYygpOiBzb19jb3VudCAlZCIsIHNvLT5z
b19jb3VudCkpOworCUtBU1NFUlQoc28tPnNvX3BjYiA9PSBOVUxMLCAoInNvZGVhbGxvYygpOiBz
b19wY2IgIT0gTlVMTCIpKTsKKworCVNPQ0tCVUZfQ09ORF9ERVNUUk9ZKCZzby0+c29fc25kKTsK
KwlTT0NLQlVGX0NPTkRfREVTVFJPWSgmc28tPnNvX3Jjdik7CisKKwlTT0NLX0NPTkRfREVTVFJP
WShzbyk7CisKKwlTT0NLQlVGX0xPQ0tfREVTVFJPWSgmc28tPnNvX3NuZCk7CisJU09DS0JVRl9M
T0NLX0RFU1RST1koJnNvLT5zb19yY3YpOworCisJZnJlZShzbyk7Cit9CisKKy8qIFRha2VuIGZy
b20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1Vz
ZXJzcGFjZV9fCisgKi8KK3ZvaWQKK3NvZnJlZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1
Y3Qgc29ja2V0ICpoZWFkOworCisJQUNDRVBUX0xPQ0tfQVNTRVJUKCk7CisJU09DS19MT0NLX0FT
U0VSVChzbyk7CisJLyogU1NfTk9GRFJFRiB1bnNldCBpbiBhY2NlcHQgY2FsbC4gIHRoaXMgY29u
ZGl0aW9uIHNlZW1zIGlycmVsZXZlbnQKKwkgKiAgZm9yIF9fVXNlcnNwYWNlX18uLi4KKwkgKi8K
KwlpZiAoc28tPnNvX2NvdW50ICE9IDAgfHwKKwkgICAgKHNvLT5zb19zdGF0ZSAmIFNTX1BST1RP
UkVGKSB8fCAoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVApKSB7CisJCVNPQ0tfVU5MT0NLKHNvKTsK
KwkJQUNDRVBUX1VOTE9DSygpOworCQlyZXR1cm47CisJfQorCWhlYWQgPSBzby0+c29faGVhZDsK
KwlpZiAoaGVhZCAhPSBOVUxMKSB7CisJCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUgJiBTUV9DT01Q
KSAhPSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgIT0gMCwKKwkJICAg
ICgic29mcmVlOiBzb19oZWFkICE9IE5VTEwsIGJ1dCBuZWl0aGVyIFNRX0NPTVAgbm9yICIKKwkJ
ICAgICJTUV9JTkNPTVAiKSk7CisJCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUgJiBTUV9DT01QKSA9
PSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgPT0gMCwKKwkJICAgICgi
c29mcmVlOiBzby0+c29fcXN0YXRlIGlzIFNRX0NPTVAgYW5kIGFsc28gU1FfSU5DT01QIikpOwor
CQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3QpOworCQloZWFkLT5z
b19pbmNxbGVuLS07CisJCXNvLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsKKwkJc28tPnNvX2hl
YWQgPSBOVUxMOworCX0KKwlLQVNTRVJUKChzby0+c29fcXN0YXRlICYgU1FfQ09NUCkgPT0gMCAm
JgorCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgPT0gMCwKKwkgICAgKCJzb2ZyZWU6
IHNvX2hlYWQgPT0gTlVMTCwgYnV0IHN0aWxsIFNRX0NPTVAoJWQpIG9yIFNRX0lOQ09NUCglZCki
LAorCSAgICBzby0+c29fcXN0YXRlICYgU1FfQ09NUCwgc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09N
UCkpOworCWlmIChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fQUNDRVBUQ09OTikgeworCQlLQVNT
RVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2NvbXApKSwgKCJzb2ZyZWU6IHNvX2NvbXAgcG9wdWxh
dGVkIikpOworCQlLQVNTRVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2luY29tcCkpLCAoInNvZnJl
ZTogc29fY29tcCBwb3B1bGF0ZWQiKSk7CisJfQorCVNPQ0tfVU5MT0NLKHNvKTsKKwlBQ0NFUFRf
VU5MT0NLKCk7CisJc2N0cF9jbG9zZShzbyk7IC8qIHdhcy4uLiAgICBzY3RwX2RldGFjaChzbyk7
ICovCisJLyoKKwkgKiBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGFzc3VtZSB0aGF0IG5vIG90aGVy
IHJlZmVyZW5jZXMgdG8gdGhpcworCSAqIHNvY2tldCBleGlzdCBhbnl3aGVyZSBlbHNlIGluIHRo
ZSBzdGFjay4gIFRoZXJlZm9yZSwgbm8gbG9ja3MgbmVlZAorCSAqIHRvIGJlIGFjcXVpcmVkIG9y
IGhlbGQuCisJICoKKwkgKiBXZSB1c2VkIHRvIGRvIGEgbG90IG9mIHNvY2tldCBidWZmZXIgYW5k
IHNvY2tldCBsb2NraW5nIGhlcmUsIGFzCisJICogd2VsbCBhcyBpbnZva2Ugc29yZmx1c2goKSBh
bmQgcGVyZm9ybSB3YWtldXBzLiAgVGhlIGRpcmVjdCBjYWxsIHRvCisJICogZG9tX2Rpc3Bvc2Uo
KSBhbmQgc2JyZWxlYXNlX2ludGVybmFsKCkgYXJlIGFuIGlubGluaW5nIG9mIHdoYXQgd2FzCisJ
ICogbmVjZXNzYXJ5IGZyb20gc29yZmx1c2goKS4KKwkgKgorCSAqIE5vdGljZSB0aGF0IHRoZSBz
b2NrZXQgYnVmZmVyIGFuZCBrcXVldWUgc3RhdGUgYXJlIHRvcm4gZG93bgorCSAqIGJlZm9yZSBj
YWxsaW5nIHBydV9kZXRhY2guICBUaGlzIG1lYW5zIHRoYXQgcHJvdG9jb2xzIHNob2xkIG5vdAor
CSAqIGFzc3VtZSB0aGV5IGNhbiBwZXJmb3JtIHNvY2tldCB3YWtldXBzLCBldGMsIGluIHRoZWly
IGRldGFjaCBjb2RlLgorCSAqLworCXNvZGVhbGxvYyhzbyk7Cit9CisKKworCisvKiBUYWtlbiBm
cm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgKi8KK3ZvaWQKK3NvYWJvcnQoc3RydWN0
IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKElORVQ2KQorCWlucCA9IChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EX1Y2KSB7CisJCXNjdHA2X2Fib3J0KHNvKTsKKwl9IGVsc2UgeworI2lmIGRlZmluZWQo
SU5FVCkKKwkJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwl9CisjZWxpZiBkZWZpbmVkKElORVQp
CisJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwlBQ0NFUFRfTE9DSygpOworCVNPQ0tfTE9DSyhz
byk7CisJc29mcmVlKHNvKTsKK30KKworCisvKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9rZXJu
L3VpcGNfc29ja2V0LmMgYW5kIGNhbGxlZCB3aXRoaW4gc2N0cF9jb25uZWN0IChzY3RwX3VzcnJl
cS5jKS4KKyAqICBXZSB1c2Ugc2N0cF9jb25uZWN0IGZvciBzZW5kX29uZV9pbml0X3JlYWwgaW4g
bXMxLgorICovCit2b2lkCitzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwor
CVNPQ0tfTE9DSyhzbyk7CisJc28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05ORUNURUR8U1NfSVNE
SVNDT05ORUNUSU5HKTsKKwlzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNUSU5HOworCVNPQ0tf
VU5MT0NLKHNvKTsKK30KKworLyogVGFrZW4gZnJvbSAgdXNyL3NyYy9zeXMva2Vybi91aXBjX3Nv
Y2tldC5jIGFuZCBjYWxsZWQgd2l0aGluIHNjdHBfZGlzY29ubmVjdCAoc2N0cF91c3JyZXEuYyku
CisgKiAgVE9ETyBEbyB3ZSB1c2Ugc2N0cF9kaXNjb25uZWN0PworICovCit2b2lkCitzb2lzZGlz
Y29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKworICAgICAgICAvKgorICAgICAgICAg
KiBOb3RlOiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IFNPQ0tfTE9DSyhzbykgYW5kCisgICAgICAg
ICAqIFNPQ0tCVUZfTE9DSygmc28tPnNvX3JjdikgYXJlIHRoZSBzYW1lLgorICAgICAgICAgKi8K
KyAgICAgICAgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKyAgICAgICAgc28tPnNvX3N0YXRl
ICY9IH5TU19JU0NPTk5FQ1RJTkc7CisgICAgICAgIHNvLT5zb19zdGF0ZSB8PSBTU19JU0RJU0NP
Tk5FQ1RJTkc7CisgICAgICAgIHNvLT5zb19yY3Yuc2Jfc3RhdGUgfD0gU0JTX0NBTlRSQ1ZNT1JF
OworICAgICAgICBzb3J3YWtldXBfbG9ja2VkKHNvKTsKKyAgICAgICAgU09DS0JVRl9MT0NLKCZz
by0+c29fc25kKTsKKyAgICAgICAgc28tPnNvX3NuZC5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFNFTkRN
T1JFOworICAgICAgICBzb3d3YWtldXBfbG9ja2VkKHNvKTsKKyAgICAgICAgd2FrZXVwKCJkdW1t
eSIsc28pOworICAgICAgICAvKiByZXF1aXJlcyAyIGFyZ3MgYnV0IHRoaXMgd2FzIGluIG9yaWcg
Ki8KKyAgICAgICAgLyogd2FrZXVwKCZzby0+c29fdGltZW8pOyAqLworfQorCisKKy8qIFRha2Vu
IGZyb20gc3lzL2tlcm4va2Vybl9zeW5jaC5jIGFuZAorICAgbW9kaWZpZWQgZm9yIF9fVXNlcnNw
YWNlX18KKyovCisKKy8qCisgKiBNYWtlIGFsbCB0aHJlYWRzIHNsZWVwaW5nIG9uIHRoZSBzcGVj
aWZpZWQgaWRlbnRpZmllciBydW5uYWJsZS4KKyAqIEFzc29jaWF0aW5nIHdha2V1cCB3aXRoIHNv
X3RpbWVvIGlkZW50aWZpZXIgYW5kIHRpbWVvX2NvbmQKKyAqIGNvbmRpdGlvbiB2YXJpYWJsZS4g
VE9ETy4gSWYgd2UgdXNlIGl0ZXJhdG9yIHRocmVhZCB0aGVuIHdlIG5lZWQgdG8KKyAqIG1vZGlm
eSB3YWtldXAgc28gaXQgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gaXRlcmF0b3IgaWRlbnRpZmll
ciBhbmQKKyAqIHRpbWVvIGlkZW50aWZpZXIuCisgKi8KK3ZvaWQKK3dha2V1cCh2b2lkICppZGVu
dCwgc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS19MT0NLKHNvKTsKKyNpZiBkZWZpbmVkIChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmKHNvKS0+
dGltZW9fY29uZCk7CisjZWxzZQorCXB0aHJlYWRfY29uZF9icm9hZGNhc3QoJihzbyktPnRpbWVv
X2NvbmQpOworI2VuZGlmCisJU09DS19VTkxPQ0soc28pOworfQorCisKKy8qCisgKiBNYWtlIGEg
dGhyZWFkIHNsZWVwaW5nIG9uIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBydW5uYWJsZS4KKyAq
IE1heSB3YWtlIG1vcmUgdGhhbiBvbmUgdGhyZWFkIGlmIGEgdGFyZ2V0IHRocmVhZCBpcyBjdXJy
ZW50bHkKKyAqIHN3YXBwZWQgb3V0LgorICovCit2b2lkCit3YWtldXBfb25lKHZvaWQgKmlkZW50
KQoreworCS8qIF9fVXNlcnNwYWNlX18gQ2hlY2s6IFdlIGFyZSB1c2luZyBhY2NlcHRfY29uZCBm
b3Igd2FrZXVwX29uZS4KKwkgIEl0IHNlZW1zIHRoYXQgd2FrZXVwX29uZSBpcyBvbmx5IGNhbGxl
ZCB3aXRoaW4KKwkgIHNvaXNjb25uZWN0ZWQoKSBhbmQgc29uZXdjb25uKCkgd2l0aCBpZGVudCAm
aGVhZC0+c29fdGltZW8KKwkgIGhlYWQgaXMgc28tPnNvX2hlYWQsIHdoaWNoIGlzIGJhY2sgcG9p
bnRlciB0byBsaXN0ZW4gc29ja2V0CisJICBUaGlzIHNlZW1zIHRvIGluZGljYXRlIHRoYXQgdGhl
IHVzZSBvZiBhY2NlcHRfY29uZCBpcyBjb3JyZWN0CisJICBzaW5jZSBzb2NrZXQgd2hlcmUgYWNj
ZXB0cyBvY2N1ciBpcyBzb19oZWFkIGluIGFsbAorCSAgc3Vic2lkaWFyeSBzb2NrZXRzLgorCSAq
LworCUFDQ0VQVF9MT0NLKCk7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KwlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJmFjY2VwdF9jb25kKTsKKyNlbHNlCisJcHRocmVh
ZF9jb25kX2Jyb2FkY2FzdCgmYWNjZXB0X2NvbmQpOworI2VuZGlmCisJQUNDRVBUX1VOTE9DSygp
OworfQorCisKKy8qIENhbGxlZCB3aXRoaW4gc2N0cF9wcm9jZXNzX2Nvb2tpZV9bZXhpc3Rpbmcv
bmV3XSAqLwordm9pZAorc29pc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1
Y3Qgc29ja2V0ICpoZWFkOworCisJQUNDRVBUX0xPQ0soKTsKKwlTT0NLX0xPQ0soc28pOworCXNv
LT5zb19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkd8U1NfSVND
T05GSVJNSU5HKTsKKwlzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNURUQ7CisJaGVhZCA9IHNv
LT5zb19oZWFkOworCWlmIChoZWFkICE9IE5VTEwgJiYgKHNvLT5zb19xc3RhdGUgJiBTUV9JTkNP
TVApKSB7CisJCVNPQ0tfVU5MT0NLKHNvKTsKKwkJVEFJTFFfUkVNT1ZFKCZoZWFkLT5zb19pbmNv
bXAsIHNvLCBzb19saXN0KTsKKwkJaGVhZC0+c29faW5jcWxlbi0tOworCQlzby0+c29fcXN0YXRl
ICY9IH5TUV9JTkNPTVA7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZoZWFkLT5zb19jb21wLCBzbywg
c29fbGlzdCk7CisJCWhlYWQtPnNvX3FsZW4rKzsKKwkJc28tPnNvX3FzdGF0ZSB8PSBTUV9DT01Q
OworCQlBQ0NFUFRfVU5MT0NLKCk7CisJCXNvcndha2V1cChoZWFkKTsKKwkJd2FrZXVwX29uZSgm
aGVhZC0+c29fdGltZW8pOworCQlyZXR1cm47CisJfQorCVNPQ0tfVU5MT0NLKHNvKTsKKwlBQ0NF
UFRfVU5MT0NLKCk7CisJd2FrZXVwKCZzby0+c29fdGltZW8sIHNvKTsKKwlzb3J3YWtldXAoc28p
OworCXNvd3dha2V1cChzbyk7CisKK30KKworLyogY2FsbGVkIHdpdGhpbiBzY3RwX2hhbmRsZV9j
b29raWVfZWNobyAqLworCitzdHJ1Y3Qgc29ja2V0ICoKK3NvbmV3Y29ubihzdHJ1Y3Qgc29ja2V0
ICpoZWFkLCBpbnQgY29ubnN0YXR1cykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwlpbnQgb3Zl
cjsKKworCUFDQ0VQVF9MT0NLKCk7CisJb3ZlciA9IChoZWFkLT5zb19xbGVuID4gMyAqIGhlYWQt
PnNvX3FsaW1pdCAvIDIpOworCUFDQ0VQVF9VTkxPQ0soKTsKKyNpZmRlZiBSRUdSRVNTSU9OCisJ
aWYgKHJlZ3Jlc3Npb25fc29uZXdjb25uX2Vhcmx5dGVzdCAmJiBvdmVyKQorI2Vsc2UKKwlpZiAo
b3ZlcikKKyNlbmRpZgorCQlyZXR1cm4gKE5VTEwpOworCXNvID0gc29hbGxvYygpOworCWlmIChz
byA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXNvLT5zb19oZWFkID0gaGVhZDsKKwlzby0+
c29fdHlwZSA9IGhlYWQtPnNvX3R5cGU7CisJc28tPnNvX29wdGlvbnMgPSBoZWFkLT5zb19vcHRp
b25zICZ+IFNDVFBfU09fQUNDRVBUQ09OTjsKKwlzby0+c29fbGluZ2VyID0gaGVhZC0+c29fbGlu
Z2VyOworCXNvLT5zb19zdGF0ZSA9IGhlYWQtPnNvX3N0YXRlIHwgU1NfTk9GRFJFRjsKKwlzby0+
c29fZG9tID0gaGVhZC0+c29fZG9tOworI2lmZGVmIE1BQworCVNPQ0tfTE9DSyhoZWFkKTsKKwlt
YWNfY3JlYXRlX3NvY2tldF9mcm9tX3NvY2tldChoZWFkLCBzbyk7CisJU09DS19VTkxPQ0soaGVh
ZCk7CisjZW5kaWYKKwlpZiAoc29yZXNlcnZlKHNvLCBoZWFkLT5zb19zbmQuc2JfaGl3YXQsIGhl
YWQtPnNvX3Jjdi5zYl9oaXdhdCkpIHsKKwkJc29kZWFsbG9jKHNvKTsKKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisJc3dpdGNoIChoZWFkLT5zb19kb20pIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9J
TkVUOgorCQlpZiAoc2N0cF9hdHRhY2goc28sIElQUFJPVE9fU0NUUCwgU0NUUF9ERUZBVUxUX1ZS
RklEKSkgeworCQkJc29kZWFsbG9jKHNvKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJl
YWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWlmIChzY3RwNl9h
dHRhY2goc28sIElQUFJPVE9fU0NUUCwgU0NUUF9ERUZBVUxUX1ZSRklEKSkgeworCQkJc29kZWFs
bG9jKHNvKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwljYXNl
IEFGX0NPTk46CisJCWlmIChzY3RwY29ubl9hdHRhY2goc28sIElQUFJPVE9fU0NUUCwgU0NUUF9E
RUZBVUxUX1ZSRklEKSkgeworCQkJc29kZWFsbG9jKHNvKTsKKwkJCXJldHVybiAoTlVMTCk7CisJ
CX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc29kZWFsbG9jKHNvKTsKKwkJcmV0dXJuIChOVUxM
KTsKKwkJYnJlYWs7CisJfQorCXNvLT5zb19yY3Yuc2JfbG93YXQgPSBoZWFkLT5zb19yY3Yuc2Jf
bG93YXQ7CisJc28tPnNvX3NuZC5zYl9sb3dhdCA9IGhlYWQtPnNvX3NuZC5zYl9sb3dhdDsKKwlz
by0+c29fcmN2LnNiX3RpbWVvID0gaGVhZC0+c29fcmN2LnNiX3RpbWVvOworCXNvLT5zb19zbmQu
c2JfdGltZW8gPSBoZWFkLT5zb19zbmQuc2JfdGltZW87CisJc28tPnNvX3Jjdi5zYl9mbGFncyB8
PSBoZWFkLT5zb19yY3Yuc2JfZmxhZ3MgJiBTQl9BVVRPU0laRTsKKwlzby0+c29fc25kLnNiX2Zs
YWdzIHw9IGhlYWQtPnNvX3NuZC5zYl9mbGFncyAmIFNCX0FVVE9TSVpFOworCXNvLT5zb19zdGF0
ZSB8PSBjb25uc3RhdHVzOworCUFDQ0VQVF9MT0NLKCk7CisJaWYgKGNvbm5zdGF0dXMpIHsKKwkJ
VEFJTFFfSU5TRVJUX1RBSUwoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsKKwkJc28tPnNv
X3FzdGF0ZSB8PSBTUV9DT01QOworCQloZWFkLT5zb19xbGVuKys7CisJfSBlbHNlIHsKKwkJLyoK
KwkJICogS2VlcCByZW1vdmluZyBzb2NrZXRzIGZyb20gdGhlIGhlYWQgdW50aWwgdGhlcmUncyBy
b29tIGZvcgorCQkgKiB1cyB0byBpbnNlcnQgb24gdGhlIHRhaWwuICBJbiBwcmUtbG9ja2luZyBy
ZXZpc2lvbnMsIHRoaXMKKwkJICogd2FzIGEgc2ltcGxlIGlmICgpLCBidXQgYXMgd2UgY291bGQg
YmUgcmFjaW5nIHdpdGggb3RoZXIKKwkJICogdGhyZWFkcyBhbmQgc29hYm9ydCgpIHJlcXVpcmVz
IGRyb3BwaW5nIGxvY2tzLCB3ZSBtdXN0CisJCSAqIGxvb3Agd2FpdGluZyBmb3IgdGhlIGNvbmRp
dGlvbiB0byBiZSB0cnVlLgorCQkgKi8KKwkJd2hpbGUgKGhlYWQtPnNvX2luY3FsZW4gPiBoZWFk
LT5zb19xbGltaXQpIHsKKwkJCXN0cnVjdCBzb2NrZXQgKnNwOworCQkJc3AgPSBUQUlMUV9GSVJT
VCgmaGVhZC0+c29faW5jb21wKTsKKwkJCVRBSUxRX1JFTU9WRSgmaGVhZC0+c29faW5jb21wLCBz
cCwgc29fbGlzdCk7CisJCQloZWFkLT5zb19pbmNxbGVuLS07CisJCQlzcC0+c29fcXN0YXRlICY9
IH5TUV9JTkNPTVA7CisJCQlzcC0+c29faGVhZCA9IE5VTEw7CisJCQlBQ0NFUFRfVU5MT0NLKCk7
CisJCQlzb2Fib3J0KHNwKTsKKwkJCUFDQ0VQVF9MT0NLKCk7CisJCX0KKwkJVEFJTFFfSU5TRVJU
X1RBSUwoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3QpOworCQlzby0+c29fcXN0YXRlIHw9
IFNRX0lOQ09NUDsKKwkJaGVhZC0+c29faW5jcWxlbisrOworCX0KKwlBQ0NFUFRfVU5MT0NLKCk7
CisJaWYgKGNvbm5zdGF0dXMpIHsKKwkJc29yd2FrZXVwKGhlYWQpOworCQl3YWtldXBfb25lKCZo
ZWFkLT5zb190aW1lbyk7CisJfQorCXJldHVybiAoc28pOworCit9CisKKy8qIEZyb20gL3NyYy9z
eXMvc3lzL3N5c3Byb3RvLmggKi8KK3N0cnVjdCBzY3RwX2dlbmVyaWNfc2VuZG1zZ19hcmdzIHsK
KwlpbnQgc2Q7CisJY2FkZHJfdCBtc2c7CisJaW50IG1sZW47CisJY2FkZHJfdCB0bzsKKwlzb2Nr
bGVuX3QgdG9sZW47ICAvKiB3YXMgX19zb2NrbGVuX3QgKi8KKwlzdHJ1Y3Qgc2N0cF9zbmRyY3Zp
bmZvICogc2luZm87CisJaW50IGZsYWdzOworfTsKKworc3RydWN0IHNjdHBfZ2VuZXJpY19yZWN2
bXNnX2FyZ3MgeworICAgICAgICBpbnQgc2Q7CisgICAgICAgIHN0cnVjdCBpb3ZlYyAqaW92Owor
ICAgICAgICBpbnQgaW92bGVuOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207CisgICAg
ICAgIHNvY2tsZW5fdCAqZnJvbWxlbmFkZHI7IC8qIHdhcyBfX3NvY2tsZW5fdCAqLworICAgICAg
ICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKKyAgICAgICAgaW50ICptc2dfZmxhZ3M7
Cit9OworCisKKyAvKgorICAgU291cmNlOiAvc3JjL3N5cy9nbnUvZnMveGZzL0ZyZWVCU0QveGZz
X2lvY3RsLmMKKyAqLworc3RhdGljIF9faW5saW5lX18gaW50Citjb3B5X3RvX3VzZXIodm9pZCAq
ZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pIHsKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7CisJ
cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAorY29weV9mcm9tX3VzZXIodm9p
ZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pIHsKKwltZW1jcHkoZHN0LCBzcmMsIGxlbik7
CisJcmV0dXJuIDA7Cit9CisKKy8qCisgUmVmZXJlbmNlczoKKyBzcmMvc3lzL2Rldi9sbWMvaWZf
bG1jLmg6Cisgc3JjL3N5cy9wb3dlcnBjL3Bvd2VycGMvY29weWlub3V0LmMKKyBzcmMvc3lzL3N5
cy9zeXN0bS5oCisqLworIyBkZWZpbmUgY29weWluKHUsIGssIGxlbikJY29weV9mcm9tX3VzZXIo
aywgdSwgbGVuKQorCisvKiBSZWZlcmVuY2VzOgorICAgc3JjL3N5cy9wb3dlcnBjL3Bvd2VycGMv
Y29weWlub3V0LmMKKyAgIHNyYy9zeXMvc3lzL3N5c3RtLmgKKyovCisjIGRlZmluZSBjb3B5b3V0
KGssIHUsIGxlbikJY29weV90b191c2VyKHUsIGssIGxlbikKKworCisvKiBjb3B5aW5pb3YgZGVm
aW5pdGlvbiBjb3BpZWQvbW9kaWZpZWQgZnJvbSBzcmMvc3lzL2tlcm4va2Vybl9zdWJyLmMgKi8K
K2ludAorY29weWluaW92KHN0cnVjdCBpb3ZlYyAqaW92cCwgdV9pbnQgaW92Y250LCBzdHJ1Y3Qg
aW92ZWMgKippb3YsIGludCBlcnJvcikKK3sKKwl1X2ludCBpb3ZsZW47CisKKwkqaW92ID0gTlVM
TDsKKwlpZiAoaW92Y250ID4gVUlPX01BWElPVikKKwkJcmV0dXJuIChlcnJvcik7CisJaW92bGVu
ID0gaW92Y250ICogc2l6ZW9mIChzdHJ1Y3QgaW92ZWMpOworCSppb3YgPSBtYWxsb2MoaW92bGVu
KTsgLyosIE1fSU9WLCBNX1dBSVRPSyk7ICovCisJZXJyb3IgPSBjb3B5aW4oaW92cCwgKmlvdiwg
aW92bGVuKTsKKwlpZiAoZXJyb3IpIHsKKwkJZnJlZSgqaW92KTsgLyosIE1fSU9WKTsgKi8KKwkJ
KmlvdiA9IE5VTEw7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisvKiAoX19Vc2Vyc3BhY2Vf
XykgdmVyc2lvbiBvZiB1aW9tb3ZlICovCitpbnQKK3Vpb21vdmUodm9pZCAqY3AsIGludCBuLCBz
dHJ1Y3QgdWlvICp1aW8pCit7CisJc3RydWN0IGlvdmVjICppb3Y7CisJc2l6ZV90IGNudDsKKwlp
bnQgZXJyb3IgPSAwOworCisJaWYgKCh1aW8tPnVpb19ydyAhPSBVSU9fUkVBRCkgJiYKKwkgICAg
KHVpby0+dWlvX3J3ICE9IFVJT19XUklURSkpIHsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwor
CXdoaWxlIChuID4gMCAmJiB1aW8tPnVpb19yZXNpZCkgeworCQlpb3YgPSB1aW8tPnVpb19pb3Y7
CisJCWNudCA9IGlvdi0+aW92X2xlbjsKKwkJaWYgKGNudCA9PSAwKSB7CisJCQl1aW8tPnVpb19p
b3YrKzsKKwkJCXVpby0+dWlvX2lvdmNudC0tOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNu
dCA+IChzaXplX3QpbikKKwkJCWNudCA9IG47CisKKwkJc3dpdGNoICh1aW8tPnVpb19zZWdmbGcp
IHsKKworCQljYXNlIFVJT19VU0VSU1BBQ0U6CisJCQlpZiAodWlvLT51aW9fcncgPT0gVUlPX1JF
QUQpCisJCQkJZXJyb3IgPSBjb3B5b3V0KGNwLCBpb3YtPmlvdl9iYXNlLCBjbnQpOworCQkJZWxz
ZQorCQkJCWVycm9yID0gY29weWluKGlvdi0+aW92X2Jhc2UsIGNwLCBjbnQpOworCQkJaWYgKGVy
cm9yKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBVSU9fU1lTU1BBQ0U6CisJ
CQlpZiAodWlvLT51aW9fcncgPT0gVUlPX1JFQUQpCisJCQkJbWVtY3B5KGlvdi0+aW92X2Jhc2Us
IGNwLCBjbnQpOworCQkJZWxzZQorCQkJCW1lbWNweShjcCwgaW92LT5pb3ZfYmFzZSwgY250KTsK
KwkJCWJyZWFrOworCQl9CisJCWlvdi0+aW92X2Jhc2UgPSAoY2hhciAqKWlvdi0+aW92X2Jhc2Ug
KyBjbnQ7CisJCWlvdi0+aW92X2xlbiAtPSBjbnQ7CisJCXVpby0+dWlvX3Jlc2lkIC09IGNudDsK
KwkJdWlvLT51aW9fb2Zmc2V0ICs9IChvZmZfdCljbnQ7CisJCWNwID0gKGNoYXIgKiljcCArIGNu
dDsKKwkJbiAtPSAoaW50KWNudDsKKwl9CitvdXQ6CisJcmV0dXJuIChlcnJvcik7Cit9CisKKwor
LyogU291cmNlOiBzcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jICovCitpbnQKK2dldHNvY2th
ZGRyKHN0cnVjdCBzb2NrYWRkciAqKm5hbXAsIGNhZGRyX3QgdWFkZHIsIHNpemVfdCBsZW4pCit7
CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlpbnQgZXJyb3I7CisKKwlpZiAobGVuID4gU09DS19N
QVhBRERSTEVOKQorCQlyZXR1cm4gKEVOQU1FVE9PTE9ORyk7CisJaWYgKGxlbiA8IG9mZnNldG9m
KHN0cnVjdCBzb2NrYWRkciwgc2FfZGF0YSkpCisJCXJldHVybiAoRUlOVkFMKTsKKwlNQUxMT0Mo
c2EsIHN0cnVjdCBzb2NrYWRkciAqLCBsZW4sIE1fU09OQU1FLCBNX1dBSVRPSyk7CisJZXJyb3Ig
PSBjb3B5aW4odWFkZHIsIHNhLCBsZW4pOworCWlmIChlcnJvcikgeworCQlGUkVFKHNhLCBNX1NP
TkFNRSk7CisJfSBlbHNlIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlzYS0+c2FfbGVuID0gbGVu
OworI2VuZGlmCisJCSpuYW1wID0gc2E7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitpbnQK
K3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGxldmVsLCBpbnQgb3B0
aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9uX3ZhbHVlLCBzb2NrbGVu
X3QgKm9wdGlvbl9sZW4pOworCitzY3RwX2Fzc29jX3QKK3VzcnNjdHBfZ2V0YXNzb2NpZChzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCXN0cnVjdCBzY3RwX3Bh
ZGRyaW5mbyBzcDsKKwlzb2NrbGVuX3Qgc2l6OworI2lmbmRlZiBIQVZFX1NBX0xFTgorCXNpemVf
dCBzYV9sZW47CisjZW5kaWYKKworCS8qIEZpcnN0IGdldCB0aGUgYXNzb2MgaWQgKi8KKwlzaXog
PSBzaXplb2Yoc3ApOworCW1lbXNldCgmc3AsIDAsIHNpemVvZihzcCkpOworI2lmZGVmIEhBVkVf
U0FfTEVOCisJbWVtY3B5KChjYWRkcl90KSZzcC5zcGluZm9fYWRkcmVzcywgc2EsIHNhLT5zYV9s
ZW4pOworI2Vsc2UKKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2Fz
ZSBBRl9JTkVUOgorCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJYnJl
YWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCXNhX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIEFGX0NP
Tk46CisJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXNhX2xlbiA9IDA7CisJCWJyZWFrOworCX0KKwltZW1jcHkoKGNhZGRyX3Qp
JnNwLnNwaW5mb19hZGRyZXNzLCBzYSwgc2FfbGVuKTsKKyNlbmRpZgorCWlmICh1c3JzY3RwX2dl
dHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTywgJnNw
LCAmc2l6KSAhPSAwKSB7CisJCS8qIFdlIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IDAgY2FuIG5l
dmVyIGJlIHJldHVybmVkICovCisJCXJldHVybiAoKHNjdHBfYXNzb2NfdCkgMCk7CisJfQorCXJl
dHVybiAoc3Auc3BpbmZvX2Fzc29jX2lkKTsKK30KKworCisvKiBUYWtlbiBmcm9tICAvc3JjL2xp
Yi9saWJjL25ldC9zY3RwX3N5c19jYWxscy5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNw
YWNlX18KKyAqIGNhbGxpbmcgc2N0cF9nZW5lcmljX3NlbmRtc2cgZnJvbSB0aGlzIGZ1bmN0aW9u
CisgKi8KK3NzaXplX3QKK3VzZXJzcGFjZV9zY3RwX3NlbmRtc2coc3RydWN0IHNvY2tldCAqc28s
CisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCisgICAgICAgICAgICAg
ICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2Nr
YWRkciAqdG8sCisgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCB0b2xlbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IHBwaWQsCisgICAgICAgICAgICAgICAgICAgICAg
IHVfaW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQxNl90IHN0cmVh
bV9ubywKKyAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IHRpbWV0b2xpdmUsCisgICAg
ICAgICAgICAgICAgICAgICAgIHVfaW50MzJfdCBjb250ZXh0KQoreworCXN0cnVjdCBzY3RwX3Nu
ZHJjdmluZm8gc25kcmN2aW5mbywgKnNpbmZvID0gJnNuZHJjdmluZm87CisJc3RydWN0IHVpbyBh
dWlvOworCXN0cnVjdCBpb3ZlYyBpb3ZbMV07CisKKwltZW1zZXQoc2luZm8sIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7CisJc2luZm8tPnNpbmZvX3BwaWQgPSBwcGlkOworCXNp
bmZvLT5zaW5mb19mbGFncyA9IGZsYWdzOworCXNpbmZvLT5zaW5mb19zdHJlYW0gPSBzdHJlYW1f
bm87CisJc2luZm8tPnNpbmZvX3RpbWV0b2xpdmUgPSB0aW1ldG9saXZlOworCXNpbmZvLT5zaW5m
b19jb250ZXh0ID0gY29udGV4dDsKKwlzaW5mby0+c2luZm9fYXNzb2NfaWQgPSAwOworCisKKwkv
KiBQZXJmb3JtIGVycm9yIGNoZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8pICovCisJaWYgKHRvbGVu
ID4gU09DS19NQVhBRERSTEVOKSB7CisJCWVycm5vID0gRU5BTUVUT09MT05HOworCQlyZXR1cm4g
KC0xKTsKKwl9CisJaWYgKCh0b2xlbiA+IDApICYmCisJICAgICgodG8gPT0gTlVMTCkgfHwgKHRv
bGVuIDwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkpKSB7CisJCWVycm5vID0g
RUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGRhdGEgPT0gTlVMTCkgeworCQllcnJu
byA9IEVGQVVMVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIEFkZGluZyB0aGUgZm9sbG93aW5n
IGFzIHBhcnQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBpbiBjYXNlIHRoZSBhcHBsaWNhdGlv
bgorCSAgIGRvZXMgbm90IGRvIGl0IHdoZW4gcHJlcGFyaW5nIHRoZSBkZXN0aW5hdGlvbiBhZGRy
ZXNzLiovCisjaWZkZWYgSEFWRV9TQV9MRU4KKwlpZiAodG8gIT0gTlVMTCkgeworCQl0by0+c2Ff
bGVuID0gdG9sZW47CisJfQorI2VuZGlmCisKKwlpb3ZbMF0uaW92X2Jhc2UgPSAoY2FkZHJfdClk
YXRhOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92ID0gIGlvdjsKKwlh
dWlvLnVpb19pb3ZjbnQgPSAxOworCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19VU0VSU1BBQ0U7CisJ
YXVpby51aW9fcncgPSBVSU9fV1JJVEU7CisJYXVpby51aW9fb2Zmc2V0ID0gMDsJCQkvKiBYWFgg
Ki8KKwlhdWlvLnVpb19yZXNpZCA9IGxlbjsKKwllcnJubyA9IHNjdHBfbG93ZXJfc29zZW5kKHNv
LCB0bywgJmF1aW8sIE5VTEwsIE5VTEwsIDAsIHNpbmZvKTsKKwlpZiAoZXJybm8gPT0gMCkgewor
CQlyZXR1cm4gKGxlbiAtIGF1aW8udWlvX3Jlc2lkKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKC0x
KTsKKwl9Cit9CisKKworc3NpemVfdAordXNyc2N0cF9zZW5kdihzdHJ1Y3Qgc29ja2V0ICpzbywK
KyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgc2l6ZV90IGxl
biwKKyAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICp0bywKKyAgICAgICAgICAgICAgaW50
IGFkZHJjbnQsCisgICAgICAgICAgICAgIHZvaWQgKmluZm8sCisgICAgICAgICAgICAgIHNvY2ts
ZW5fdCBpbmZvbGVuLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgaW5mb3R5cGUsCisgICAg
ICAgICAgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNpbmZvOwor
CXN0cnVjdCB1aW8gYXVpbzsKKwlzdHJ1Y3QgaW92ZWMgaW92WzFdOworCWludCB1c2Vfc2luZm87
CisJc2N0cF9hc3NvY190ICphc3NvY19pZDsKKworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVycm5v
ID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWVy
cm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJbWVtc2V0KCZzaW5mbywgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKKwlhc3NvY19pZCA9IE5VTEw7CisJdXNlX3Np
bmZvID0gMDsKKwlzd2l0Y2ggKGluZm90eXBlKSB7CisJY2FzZSBTQ1RQX1NFTkRWX05PSU5GTzoK
KwkJaWYgKChpbmZvbGVuICE9IDApIHx8IChpbmZvICE9IE5VTEwpKSB7CisJCQllcnJubyA9IEVJ
TlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9TRU5EVl9T
TkRJTkZPOgorCQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0gc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZGluZm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsK
KwkJfQorCQlzaW5mby5zaW5mb19zdHJlYW0gPSAoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZv
KS0+c25kX3NpZDsKKwkJc2luZm8uc2luZm9fZmxhZ3MgPSAoKHN0cnVjdCBzY3RwX3NuZGluZm8g
KilpbmZvKS0+c25kX2ZsYWdzOworCQlzaW5mby5zaW5mb19wcGlkID0gKChzdHJ1Y3Qgc2N0cF9z
bmRpbmZvICopaW5mbyktPnNuZF9wcGlkOworCQlzaW5mby5zaW5mb19jb250ZXh0ID0gKChzdHJ1
Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9jb250ZXh0OworCQlzaW5mby5zaW5mb19hc3Nv
Y19pZCA9ICgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWluZm8pLT5zbmRfYXNzb2NfaWQ7CisJCWFz
c29jX2lkID0gJigoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25kX2Fzc29jX2lkKTsK
KwkJdXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRWX1BSSU5GTzoKKwkJ
aWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcmlu
Zm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzaW5m
by5zaW5mb19zdHJlYW0gPSAwOworCQlzaW5mby5zaW5mb19mbGFncyA9IFBSX1NDVFBfUE9MSUNZ
KCgoc3RydWN0IHNjdHBfcHJpbmZvICopaW5mbyktPnByX3BvbGljeSk7CisJCXNpbmZvLnNpbmZv
X3RpbWV0b2xpdmUgPSAoKHN0cnVjdCBzY3RwX3ByaW5mbyAqKWluZm8pLT5wcl92YWx1ZTsKKwkJ
dXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRWX0FVVEhJTkZPOgorCQll
cnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJY2FzZSBTQ1RQX1NFTkRWX1NQQToKKwkJ
aWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5k
dl9zcGEpKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlp
ZiAoKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfZmxhZ3MgJiBTQ1RQX1NF
TkRfU05ESU5GT19WQUxJRCkgeworCQkJc2luZm8uc2luZm9fc3RyZWFtID0gKChzdHJ1Y3Qgc2N0
cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfc2lkOworCQkJc2luZm8uc2lu
Zm9fZmxhZ3MgPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9zbmRpbmZv
LnNuZF9mbGFnczsKKwkJCXNpbmZvLnNpbmZvX3BwaWQgPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3Nw
YSAqKWluZm8pLT5zZW5kdl9zbmRpbmZvLnNuZF9wcGlkOworCQkJc2luZm8uc2luZm9fY29udGV4
dCA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX2Nv
bnRleHQ7CisJCQlzaW5mby5zaW5mb19hc3NvY19pZCA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3Bh
ICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX2Fzc29jX2lkOworCQkJYXNzb2NfaWQgPSAmKCgo
c3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX2Fzc29jX2lk
KTsKKwkJfSBlbHNlIHsKKwkJCXNpbmZvLnNpbmZvX2ZsYWdzID0gMDsKKwkJCXNpbmZvLnNpbmZv
X3N0cmVhbSA9IDA7CisJCX0KKwkJaWYgKCgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbykt
PnNlbmR2X2ZsYWdzICYgU0NUUF9TRU5EX1BSSU5GT19WQUxJRCkgeworCQkJc2luZm8uc2luZm9f
ZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+
c2VuZHZfcHJpbmZvLnByX3BvbGljeSk7CisJCQlzaW5mby5zaW5mb190aW1ldG9saXZlID0gKChz
dHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfcHJpbmZvLnByX3ZhbHVlOworCQl9
CisJCWlmICgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9mbGFncyAmIFND
VFBfU0VORF9BVVRISU5GT19WQUxJRCkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4g
KC0xKTsKKwkJfQorCQl1c2Vfc2luZm8gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJu
byA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogUGVyZm9ybSBlcnJvciBjaGVj
a3Mgb24gZGVzdGluYXRpb24gKHRvKSAqLworCWlmIChhZGRyY250ID4gMSkgeworCQllcnJubyA9
IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaW92WzBdLmlvdl9iYXNlID0gKGNhZGRy
X3QpZGF0YTsKKwlpb3ZbMF0uaW92X2xlbiA9IGxlbjsKKworCWF1aW8udWlvX2lvdiA9ICBpb3Y7
CisJYXVpby51aW9faW92Y250ID0gMTsKKwlhdWlvLnVpb19zZWdmbGcgPSBVSU9fVVNFUlNQQUNF
OworCWF1aW8udWlvX3J3ID0gVUlPX1dSSVRFOworCWF1aW8udWlvX29mZnNldCA9IDA7CQkJLyog
WFhYICovCisJYXVpby51aW9fcmVzaWQgPSBsZW47CisJZXJybm8gPSBzY3RwX2xvd2VyX3Nvc2Vu
ZChzbywgdG8sICZhdWlvLCBOVUxMLCBOVUxMLCBmbGFncywgdXNlX3NpbmZvID8gJnNpbmZvIDog
TlVMTCk7CisJaWYgKGVycm5vID09IDApIHsKKwkJaWYgKCh0byAhPSBOVUxMKSAmJiAoYXNzb2Nf
aWQgIT0gTlVMTCkpIHsKKwkJCSphc3NvY19pZCA9IHVzcnNjdHBfZ2V0YXNzb2NpZChzbywgdG8p
OworCQl9CisJCXJldHVybiAobGVuIC0gYXVpby51aW9fcmVzaWQpOworCX0gZWxzZSB7CisJCXJl
dHVybiAoLTEpOworCX0KK30KKworCitzc2l6ZV90Cit1c2Vyc3BhY2Vfc2N0cF9zZW5kbWJ1Zihz
dHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1Y3QgbWJ1ZiogbWJ1ZmRhdGEsCisgICAgc2l6ZV90
IGxlbiwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAorICAgIHNvY2tsZW5fdCB0b2xlbiwKKyAg
ICB1X2ludDMyX3QgcHBpZCwKKyAgICB1X2ludDMyX3QgZmxhZ3MsCisgICAgdV9pbnQxNl90IHN0
cmVhbV9ubywKKyAgICB1X2ludDMyX3QgdGltZXRvbGl2ZSwKKyAgICB1X2ludDMyX3QgY29udGV4
dCkKK3sKKworICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2aW5mbywgKnNpbmZvID0g
JnNuZHJjdmluZm87CisgICAgLyogICAgc3RydWN0IHVpbyBhdWlvOworICAgICAgICAgIHN0cnVj
dCBpb3ZlYyBpb3ZbMV07ICovCisgICAgaW50IGVycm9yID0gMDsKKyAgICBpbnQgdWZsYWdzID0g
MDsKKyAgICBzc2l6ZV90IHJldHZhbDsKKworICAgIHNpbmZvLT5zaW5mb19wcGlkID0gcHBpZDsK
KyAgICBzaW5mby0+c2luZm9fZmxhZ3MgPSBmbGFnczsKKyAgICBzaW5mby0+c2luZm9fc3RyZWFt
ID0gc3RyZWFtX25vOworICAgIHNpbmZvLT5zaW5mb190aW1ldG9saXZlID0gdGltZXRvbGl2ZTsK
KyAgICBzaW5mby0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7CisgICAgc2luZm8tPnNpbmZvX2Fz
c29jX2lkID0gMDsKKworICAgIC8qIFBlcmZvcm0gZXJyb3IgY2hlY2tzIG9uIGRlc3RpbmF0aW9u
ICh0bykgKi8KKyAgICBpZiAodG9sZW4gPiBTT0NLX01BWEFERFJMRU4peworICAgICAgICBlcnJv
ciA9IChFTkFNRVRPT0xPTkcpOworICAgICAgICBnb3RvIHNlbmRtc2dfcmV0dXJuOworICAgIH0K
KyAgICBpZiAodG9sZW4gPCAoc29ja2xlbl90KW9mZnNldG9mKHN0cnVjdCBzb2NrYWRkciwgc2Ff
ZGF0YSkpeworICAgICAgICBlcnJvciA9IChFSU5WQUwpOworICAgICAgICBnb3RvIHNlbmRtc2df
cmV0dXJuOworICAgIH0KKyAgICAvKiBBZGRpbmcgdGhlIGZvbGxvd2luZyBhcyBwYXJ0IG9mIGRl
ZmVuc2l2ZSBwcm9ncmFtbWluZywgaW4gY2FzZSB0aGUgYXBwbGljYXRpb24KKyAgICAgICBkb2Vz
IG5vdCBkbyBpdCB3aGVuIHByZXBhcmluZyB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4qLworI2lm
ZGVmIEhBVkVfU0FfTEVOCisgICAgdG8tPnNhX2xlbiA9IHRvbGVuOworI2VuZGlmCisKKyAgICBl
cnJvciA9IHNjdHBfbG93ZXJfc29zZW5kKHNvLCB0bywgTlVMTC8qdWlvKi8sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IG1idWYgKiltYnVmZGF0YSwgKHN0cnVjdCBtYnVm
ICopTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmbGFncywgc2luZm8pOwor
c2VuZG1zZ19yZXR1cm46CisgICAgLyogVE9ETzogTmVlZHMgYSBjb25kaXRpb24gZm9yIG5vbi1i
bG9ja2luZyB3aGVuIGVycm9yIGlzIEVXT1VMREJMT0NLICovCisgICAgaWYgKDAgPT0gZXJyb3Ip
CisgICAgICAgIHJldHZhbCA9IGxlbjsKKyAgICBlbHNlIGlmIChlcnJvciA9PSBFV09VTERCTE9D
SykgeworICAgICAgICBlcnJubyA9IEVXT1VMREJMT0NLOworICAgICAgICByZXR2YWwgPSAtMTsK
KyAgICB9IGVsc2UgeworICAgICAgICBTQ1RQX1BSSU5URigiJXM6IGVycm9yID0gJWRcbiIsIF9f
ZnVuY19fLCBlcnJvcik7CisgICAgICAgIGVycm5vID0gZXJyb3I7CisgICAgICAgIHJldHZhbCA9
IC0xOworICAgIH0KKyAgICByZXR1cm4gKHJldHZhbCk7CisKK30KKworCisvKiB0YWtlbiBmcm9t
IHVzci5saWIvc2N0cF9zeXNfY2FsbHMuYyBhbmQgbmVlZGVkIGhlcmUgKi8KKyNkZWZpbmUgICAg
ICAgIFNDVFBfU01BTExfSU9WRUNfU0laRSAyCisKKy8qIFRha2VuIGZyb20gIC9zcmMvbGliL2xp
YmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKKyAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2Vf
XworICogY2FsbGluZyBzY3RwX2dlbmVyaWNfcmVjdm1zZyBmcm9tIHRoaXMgZnVuY3Rpb24KKyAq
Lworc3NpemVfdAordXNlcnNwYWNlX3NjdHBfcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0ICpzbywKKyAg
ICB2b2lkICpkYnVmLAorICAgIHNpemVfdCBsZW4sCisgICAgc3RydWN0IHNvY2thZGRyICpmcm9t
LAorICAgIHNvY2tsZW5fdCAqZnJvbWxlbnAsCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAq
c2luZm8sCisgICAgaW50ICptc2dfZmxhZ3MpCit7CisJc3RydWN0IHVpbyBhdWlvOworCXN0cnVj
dCBpb3ZlYyBpb3ZbU0NUUF9TTUFMTF9JT1ZFQ19TSVpFXTsKKwlzdHJ1Y3QgaW92ZWMgKnRpb3Y7
CisJaW50IGlvdmxlbiA9IDE7CisJaW50IGVycm9yID0gMDsKKwlzc2l6ZV90IHVsZW47CisJaW50
IGk7CisJc29ja2xlbl90IGZyb21sZW47CisKKwlpb3ZbMF0uaW92X2Jhc2UgPSBkYnVmOworCWlv
dlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92ID0gaW92OworCWF1aW8udWlvX2lv
dmNudCA9IGlvdmxlbjsKKwlhdWlvLnVpb19zZWdmbGcgPSBVSU9fVVNFUlNQQUNFOworCWF1aW8u
dWlvX3J3ID0gVUlPX1JFQUQ7CisJYXVpby51aW9fb2Zmc2V0ID0gMDsJCQkvKiBYWFggKi8KKwlh
dWlvLnVpb19yZXNpZCA9IDA7CisJdGlvdiA9IGlvdjsKKwlmb3IgKGkgPSAwOyBpIDxpb3ZsZW47
IGkrKywgdGlvdisrKSB7CisJCWlmICgoYXVpby51aW9fcmVzaWQgKz0gdGlvdi0+aW92X2xlbikg
PCAwKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfUFJJTlRGKCIlczogZXJyb3IgPSAl
ZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCXVsZW4g
PSBhdWlvLnVpb19yZXNpZDsKKwlpZiAoZnJvbWxlbnAgIT0gTlVMTCkgeworCQlmcm9tbGVuID0g
KmZyb21sZW5wOworCX0gZWxzZSB7CisJCWZyb21sZW4gPSAwOworCX0KKwllcnJvciA9IHNjdHBf
c29yZWN2bXNnKHNvLCAmYXVpbywgKHN0cnVjdCBtYnVmICoqKU5VTEwsCisJCSAgICBmcm9tLCBm
cm9tbGVuLCBtc2dfZmxhZ3MsCisJCSAgICAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKXNpbmZv
LCAxKTsKKworCWlmIChlcnJvcikgeworCQlpZiAoKGF1aW8udWlvX3Jlc2lkICE9IHVsZW4pICYm
CisJCSAgICAoZXJyb3IgPT0gRUlOVFIgfHwKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19O
ZXRCU0QpCisJCSAgICAgZXJyb3IgPT0gRVJFU1RBUlQgfHwKKyNlbmRpZgorCQkgICAgIGVycm9y
ID09IEVXT1VMREJMT0NLKSkgeworCQkJZXJyb3IgPSAwOworCQl9CisJfQorCWlmICgoZnJvbWxl
bnAgIT0gTlVMTCkgJiYgKGZyb21sZW4gPiAwKSAmJiAoZnJvbSAhPSBOVUxMKSkgeworCQlzd2l0
Y2ggKGZyb20tPnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJY2FzZSBBRl9JTkVU
OgorCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQlicmVhazsK
KyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJCWNhc2UgQUZfSU5FVDY6CisJCQkqZnJvbWxl
bnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQlicmVhazsKKyNlbmRpZgorCQlj
YXNlIEFGX0NPTk46CisJCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkqZnJvbWxlbnAgPSAwOworCQkJYnJlYWs7CisJ
CX0KKwkJaWYgKCpmcm9tbGVucCA+IGZyb21sZW4pIHsKKwkJCSpmcm9tbGVucCA9IGZyb21sZW47
CisJCX0KKwl9CisJaWYgKGVycm9yID09IDApIHsKKwkJLyogcmVhZHkgcmV0dXJuIHZhbHVlICov
CisJCXJldHVybiAodWxlbiAtIGF1aW8udWlvX3Jlc2lkKTsKKwl9IGVsc2UgeworCQlTQ1RQX1BS
SU5URigiJXM6IGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CisJCXJldHVybiAoLTEp
OworCX0KK30KKworc3NpemVfdAordXNyc2N0cF9yZWN2dihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAg
ICB2b2lkICpkYnVmLAorICAgIHNpemVfdCBsZW4sCisgICAgc3RydWN0IHNvY2thZGRyICpmcm9t
LAorICAgIHNvY2tsZW5fdCAqZnJvbWxlbnAsCisgICAgdm9pZCAqaW5mbywKKyAgICBzb2NrbGVu
X3QgKmluZm9sZW4sCisgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwKKyAgICBpbnQgKm1zZ19m
bGFncykKK3sKKwlzdHJ1Y3QgdWlvIGF1aW87CisJc3RydWN0IGlvdmVjIGlvdltTQ1RQX1NNQUxM
X0lPVkVDX1NJWkVdOworCXN0cnVjdCBpb3ZlYyAqdGlvdjsKKwlpbnQgaW92bGVuID0gMTsKKwlz
c2l6ZV90IHVsZW47CisJaW50IGk7CisJc29ja2xlbl90IGZyb21sZW47CisJc3RydWN0IHNjdHBf
cmN2aW5mbyAqcmN2OworCXN0cnVjdCBzY3RwX3JlY3Z2X3JuICpybjsKKwlzdHJ1Y3Qgc2N0cF9l
eHRyY3ZpbmZvIHNlaW5mbzsKKworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUJBREY7
CisJCXJldHVybiAoLTEpOworCX0KKwlpb3ZbMF0uaW92X2Jhc2UgPSBkYnVmOworCWlvdlswXS5p
b3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92ID0gaW92OworCWF1aW8udWlvX2lvdmNudCA9
IGlvdmxlbjsKKwlhdWlvLnVpb19zZWdmbGcgPSBVSU9fVVNFUlNQQUNFOworCWF1aW8udWlvX3J3
ID0gVUlPX1JFQUQ7CisJYXVpby51aW9fb2Zmc2V0ID0gMDsJCQkvKiBYWFggKi8KKwlhdWlvLnVp
b19yZXNpZCA9IDA7CisJdGlvdiA9IGlvdjsKKwlmb3IgKGkgPSAwOyBpIDxpb3ZsZW47IGkrKywg
dGlvdisrKSB7CisJCWlmICgoYXVpby51aW9fcmVzaWQgKz0gdGlvdi0+aW92X2xlbikgPCAwKSB7
CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCXVsZW4gPSBh
dWlvLnVpb19yZXNpZDsKKwlpZiAoZnJvbWxlbnAgIT0gTlVMTCkgeworCQlmcm9tbGVuID0gKmZy
b21sZW5wOworCX0gZWxzZSB7CisJCWZyb21sZW4gPSAwOworCX0KKwllcnJubyA9IHNjdHBfc29y
ZWN2bXNnKHNvLCAmYXVpbywgKHN0cnVjdCBtYnVmICoqKU5VTEwsCisJCSAgICBmcm9tLCBmcm9t
bGVuLCBtc2dfZmxhZ3MsCisJCSAgICAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKSZzZWluZm8s
IDEpOworCWlmIChlcnJubykgeworCQlpZiAoKGF1aW8udWlvX3Jlc2lkICE9IHVsZW4pICYmCisJ
CSAgICAoZXJybm8gPT0gRUlOVFIgfHwKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRC
U0QpCisJCSAgICAgZXJybm8gPT0gRVJFU1RBUlQgfHwKKyNlbmRpZgorCQkgICAgIGVycm5vID09
IEVXT1VMREJMT0NLKSkgeworCQkJZXJybm8gPSAwOworCQl9CisJfQorCWlmICgoKm1zZ19mbGFn
cyAmIE1TR19OT1RJRklDQVRJT04pID09IDApIHsKKwkJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
KworCQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCQlpZiAoc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pICYmCisJCSAgICBz
Y3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykgJiYKKwkJ
ICAgICppbmZvbGVuID49IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JlY3Z2X3JuKSAm
JgorCQkgICAgc2VpbmZvLnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfQVZBSUwp
IHsKKwkJCXJuID0gKHN0cnVjdCBzY3RwX3JlY3Z2X3JuICopaW5mbzsKKwkJCXJuLT5yZWN2dl9y
Y3ZpbmZvLnJjdl9zaWQgPSBzZWluZm8uc2luZm9fc3RyZWFtOworCQkJcm4tPnJlY3Z2X3Jjdmlu
Zm8ucmN2X3NzbiA9IHNlaW5mby5zaW5mb19zc247CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3Zf
ZmxhZ3MgPSBzZWluZm8uc2luZm9fZmxhZ3M7CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfcHBp
ZCA9IHNlaW5mby5zaW5mb19wcGlkOworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X2NvbnRleHQg
PSBzZWluZm8uc2luZm9fY29udGV4dDsKKwkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl90c24gPSBz
ZWluZm8uc2luZm9fdHNuOworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X2N1bXRzbiA9IHNlaW5m
by5zaW5mb19jdW10c247CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3ZfYXNzb2NfaWQgPSBzZWlu
Zm8uc2luZm9fYXNzb2NfaWQ7CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfc2lkID0gc2VpbmZv
LnNyZWluZm9fbmV4dF9zdHJlYW07CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfZmxhZ3MgPSAw
OworCQkJaWYgKHNlaW5mby5zcmVpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0lTX1VO
T1JERVJFRCkgeworCQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFncyB8PSBTQ1RQX1VOT1JE
RVJFRDsKKwkJCX0KKwkJCWlmIChzZWluZm8uc3JlaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhU
X01TR19JU19OT1RJRklDQVRJT04pIHsKKwkJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfZmxhZ3Mg
fD0gU0NUUF9OT1RJRklDQVRJT047CisJCQl9CisJCQlpZiAoc2VpbmZvLnNyZWluZm9fbmV4dF9m
bGFncyAmIFNDVFBfTkVYVF9NU0dfSVNDT01QTEVURSkgeworCQkJCXJuLT5yZWN2dl9ueHRpbmZv
Lm54dF9mbGFncyB8PSBTQ1RQX0NPTVBMRVRFOworCQkJfQorCQkJcm4tPnJlY3Z2X254dGluZm8u
bnh0X3BwaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0X3BwaWQ7CisJCQlybi0+cmVjdnZfbnh0aW5m
by5ueHRfbGVuZ3RoID0gc2VpbmZvLnNyZWluZm9fbmV4dF9sZW5ndGg7CisJCQlybi0+cmVjdnZf
bnh0aW5mby5ueHRfYXNzb2NfaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0X2FpZDsKKwkJCSppbmZv
bGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOworCQkJKmluZm90
eXBlID0gU0NUUF9SRUNWVl9STjsKKwkJfSBlbHNlIGlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykgJiYKKwkJICAgICAgICAgICAqaW5mb2xlbiA+
PSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSkgeworCQkJcmN2ID0gKHN0
cnVjdCBzY3RwX3JjdmluZm8gKilpbmZvOworCQkJcmN2LT5yY3Zfc2lkID0gc2VpbmZvLnNpbmZv
X3N0cmVhbTsKKwkJCXJjdi0+cmN2X3NzbiA9IHNlaW5mby5zaW5mb19zc247CisJCQlyY3YtPnJj
dl9mbGFncyA9IHNlaW5mby5zaW5mb19mbGFnczsKKwkJCXJjdi0+cmN2X3BwaWQgPSBzZWluZm8u
c2luZm9fcHBpZDsKKwkJCXJjdi0+cmN2X2NvbnRleHQgPSBzZWluZm8uc2luZm9fY29udGV4dDsK
KwkJCXJjdi0+cmN2X3RzbiA9IHNlaW5mby5zaW5mb190c247CisJCQlyY3YtPnJjdl9jdW10c24g
PSBzZWluZm8uc2luZm9fY3VtdHNuOworCQkJcmN2LT5yY3ZfYXNzb2NfaWQgPSBzZWluZm8uc2lu
Zm9fYXNzb2NfaWQ7CisJCQkqaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X3JjdmluZm8pOworCQkJKmluZm90eXBlID0gU0NUUF9SRUNWVl9SQ1ZJTkZPOworCQl9IGVsc2Ug
eworCQkJKmluZm90eXBlID0gU0NUUF9SRUNWVl9OT0lORk87CisJCQkqaW5mb2xlbiA9IDA7CisJ
CX0KKwl9CisJaWYgKChmcm9tbGVucCAhPSBOVUxMKSAmJiAoZnJvbWxlbiA+IDApICYmIChmcm9t
ICE9IE5VTEwpKSB7CisJCXN3aXRjaCAoZnJvbS0+c2FfZmFtaWx5KSB7CisjaWYgZGVmaW5lZChJ
TkVUKQorCQljYXNlIEFGX0lORVQ6CisJCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJY2FzZSBB
Rl9JTkVUNjoKKwkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJ
CWJyZWFrOworI2VuZGlmCisJCWNhc2UgQUZfQ09OTjoKKwkJCSpmcm9tbGVucCA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCSpmcm9tbGVu
cCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKmZyb21sZW5wID4gZnJvbWxlbikgeworCQkJ
KmZyb21sZW5wID0gZnJvbWxlbjsKKwkJfQorCX0KKwlpZiAoZXJybm8gPT0gMCkgeworCQkvKiBy
ZWFkeSByZXR1cm4gdmFsdWUgKi8KKwkJcmV0dXJuICh1bGVuIC0gYXVpby51aW9fcmVzaWQpOwor
CX0gZWxzZSB7CisJCXJldHVybiAoLTEpOworCX0KK30KKworCisKKworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYwor
ICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKiBzb2NyZWF0ZSByZXR1cm5zIGEg
c29ja2V0LiAgVGhlIHNvY2tldCBzaG91bGQgYmUKKyAqIGNsb3NlZCB3aXRoIHNvY2xvc2UoKS4K
KyAqLworaW50Citzb2NyZWF0ZShpbnQgZG9tLCBzdHJ1Y3Qgc29ja2V0ICoqYXNvLCBpbnQgdHlw
ZSwgaW50IHByb3RvKQoreworCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBlcnJvcjsKKworCWlm
ICgoZG9tICE9IEFGX0NPTk4pICYmIChkb20gIT0gQUZfSU5FVCkgJiYgKGRvbSAhPSBBRl9JTkVU
NikpIHsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoKHR5cGUgIT0gU09DS19TVFJFQU0p
ICYmICh0eXBlICE9IFNPQ0tfU0VRUEFDS0VUKSkgeworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQor
CWlmIChwcm90byAhPSBJUFBST1RPX1NDVFApIHsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwor
CXNvID0gc29hbGxvYygpOworCWlmIChzbyA9PSBOVUxMKSB7CisJCXJldHVybiAoRU5PQlVGUyk7
CisJfQorCisJLyoKKwkgKiBzb19pbmNvbXAgcmVwcmVzZW50cyBhIHF1ZXVlIG9mIGNvbm5lY3Rp
b25zIHRoYXQKKwkgKiBtdXN0IGJlIGNvbXBsZXRlZCBhdCBwcm90b2NvbCBsZXZlbCBiZWZvcmUg
YmVpbmcKKwkgKiByZXR1cm5lZC4gc29fY29tcCBmaWVsZCBoZWFkcyBhIGxpc3Qgb2Ygc29ja2V0
cworCSAqIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHJldHVybmVkIHRvIHRoZSBsaXN0ZW5pbmcgcHJv
Y2VzcworCSAqX19Vc2Vyc3BhY2VfXyBUaGVzZSBxdWV1ZXMgYXJlIGJlaW5nIHVzZWQgYXQgYSBu
dW1iZXIgb2YgcGxhY2VzIGxpa2UgYWNjZXB0IGV0Yy4KKwkgKi8KKwlUQUlMUV9JTklUKCZzby0+
c29faW5jb21wKTsKKwlUQUlMUV9JTklUKCZzby0+c29fY29tcCk7CisJc28tPnNvX3R5cGUgPSB0
eXBlOworCXNvLT5zb19jb3VudCA9IDE7CisJc28tPnNvX2RvbSA9IGRvbTsKKwkvKgorCSAqIEF1
dG8tc2l6aW5nIG9mIHNvY2tldCBidWZmZXJzIGlzIG1hbmFnZWQgYnkgdGhlIHByb3RvY29scyBh
bmQKKwkgKiB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgbXVzdCBiZSBzZXQgaW4gdGhlIHBydV9hdHRh
Y2ggZnVuY3Rpb24uCisJICogRm9yIF9fVXNlcnNwYWNlX18gVGhlIHBydV9hdHRhY2ggZnVuY3Rp
b24gaW4gdGhpcyBjYXNlIGlzIHNjdHBfYXR0YWNoLgorCSAqLworCXN3aXRjaCAoZG9tKSB7Cisj
aWYgZGVmaW5lZChJTkVUKQorCWNhc2UgQUZfSU5FVDoKKwkJZXJyb3IgPSBzY3RwX2F0dGFjaChz
bywgcHJvdG8sIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVm
aW5lZChJTkVUNikKKwljYXNlIEFGX0lORVQ2OgorCQllcnJvciA9IHNjdHA2X2F0dGFjaChzbywg
cHJvdG8sIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBBRl9D
T05OOgorCQllcnJvciA9IHNjdHBjb25uX2F0dGFjaChzbywgcHJvdG8sIFNDVFBfREVGQVVMVF9W
UkZJRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQli
cmVhazsKKwl9CisJaWYgKGVycm9yKSB7CisJCUtBU1NFUlQoc28tPnNvX2NvdW50ID09IDEsICgi
c29jcmVhdGU6IHNvX2NvdW50ICVkIiwgc28tPnNvX2NvdW50KSk7CisJCXNvLT5zb19jb3VudCA9
IDA7CisJCXNvZGVhbGxvYyhzbyk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKwkqYXNvID0gc287
CisJcmV0dXJuICgwKTsKK30KKyNlbHNlCisvKiBUaGUga2VybmVsIHZlcnNpb24gZm9yIHJlZmVy
ZW5jZSBpcyBiZWxvdy4gVGhlICNlbHNlCisgICBzaG91bGQgYmUgcmVtb3ZlZCBvbmNlIHRoZSBf
X1VzZXJzcGFjZV9fCisgICB2ZXJzaW9uIGlzIHRlc3RlZC4KKyAqIHNvY3JlYXRlIHJldHVybnMg
YSBzb2NrZXQgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgVGhlIHNvY2tldCBzaG91bGQgYmUKKyAq
IGNsb3NlZCB3aXRoIHNvY2xvc2UoKS4KKyAqLworaW50Citzb2NyZWF0ZShpbnQgZG9tLCBzdHJ1
Y3Qgc29ja2V0ICoqYXNvLCBpbnQgdHlwZSwgaW50IHByb3RvLAorICAgIHN0cnVjdCB1Y3JlZCAq
Y3JlZCwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IHByb3Rvc3cgKnBycDsKKwlzdHJ1
Y3Qgc29ja2V0ICpzbzsKKwlpbnQgZXJyb3I7CisKKwlpZiAocHJvdG8pCisJCXBycCA9IHBmZmlu
ZHByb3RvKGRvbSwgcHJvdG8sIHR5cGUpOworCWVsc2UKKwkJcHJwID0gcGZmaW5kdHlwZShkb20s
IHR5cGUpOworCisJaWYgKHBycCA9PSBOVUxMIHx8IHBycC0+cHJfdXNycmVxcy0+cHJ1X2F0dGFj
aCA9PSBOVUxMIHx8CisJICAgIHBycC0+cHJfdXNycmVxcy0+cHJ1X2F0dGFjaCA9PSBwcnVfYXR0
YWNoX25vdHN1cHApCisJCXJldHVybiAoRVBST1RPTk9TVVBQT1JUKTsKKworCWlmIChqYWlsZWQo
Y3JlZCkgJiYgamFpbF9zb2NrZXRfdW5peGlwcm91dGVfb25seSAmJgorCSAgICBwcnAtPnByX2Rv
bWFpbi0+ZG9tX2ZhbWlseSAhPSBQRl9MT0NBTCAmJgorCSAgICBwcnAtPnByX2RvbWFpbi0+ZG9t
X2ZhbWlseSAhPSBQRl9JTkVUICYmCisJICAgIHBycC0+cHJfZG9tYWluLT5kb21fZmFtaWx5ICE9
IFBGX1JPVVRFKSB7CisJCXJldHVybiAoRVBST1RPTk9TVVBQT1JUKTsKKwl9CisKKwlpZiAocHJw
LT5wcl90eXBlICE9IHR5cGUpCisJCXJldHVybiAoRVBST1RPVFlQRSk7CisJc28gPSBzb2FsbG9j
KCk7CisJaWYgKHNvID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7CisKKwlUQUlMUV9JTklU
KCZzby0+c29faW5jb21wKTsKKwlUQUlMUV9JTklUKCZzby0+c29fY29tcCk7CisJc28tPnNvX3R5
cGUgPSB0eXBlOworCXNvLT5zb19jcmVkID0gY3Job2xkKGNyZWQpOworCXNvLT5zb19wcm90byA9
IHBycDsKKyNpZmRlZiBNQUMKKwltYWNfY3JlYXRlX3NvY2tldChjcmVkLCBzbyk7CisjZW5kaWYK
Kwlrbmxpc3RfaW5pdCgmc28tPnNvX3Jjdi5zYl9zZWwuc2lfbm90ZSwgU09DS0JVRl9NVFgoJnNv
LT5zb19yY3YpLAorCSAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwlrbmxpc3RfaW5pdCgmc28tPnNv
X3NuZC5zYl9zZWwuc2lfbm90ZSwgU09DS0JVRl9NVFgoJnNvLT5zb19zbmQpLAorCSAgICBOVUxM
LCBOVUxMLCBOVUxMKTsKKwlzby0+c29fY291bnQgPSAxOworCS8qCisJICogQXV0by1zaXppbmcg
b2Ygc29ja2V0IGJ1ZmZlcnMgaXMgbWFuYWdlZCBieSB0aGUgcHJvdG9jb2xzIGFuZAorCSAqIHRo
ZSBhcHByb3ByaWF0ZSBmbGFncyBtdXN0IGJlIHNldCBpbiB0aGUgcHJ1X2F0dGFjaCBmdW5jdGlv
bi4KKwkgKi8KKwllcnJvciA9ICgqcHJwLT5wcl91c3JyZXFzLT5wcnVfYXR0YWNoKShzbywgcHJv
dG8sIHRkKTsKKwlpZiAoZXJyb3IpIHsKKwkJS0FTU0VSVChzby0+c29fY291bnQgPT0gMSwgKCJz
b2NyZWF0ZTogc29fY291bnQgJWQiLAorCQkgICAgc28tPnNvX2NvdW50KSk7CisJCXNvLT5zb19j
b3VudCA9IDA7CisJCXNvZGVhbGxvYyhzbyk7CisJCXJldHVybiAoZXJyb3IpOworCX0KKwkqYXNv
ID0gc287CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCisKKworCisvKiBUYWtlbiBmcm9tICAv
c3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJz
cGFjZV9fCisgKiBSZW1vdmluZyBzdHJ1Y3QgdGhyZWFkIHRkLgorICovCitzdHJ1Y3Qgc29ja2V0
ICoKK3VzZXJzcGFjZV9zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCkK
K3sKKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CisKKwllcnJubyA9IHNvY3JlYXRlKGRvbWFp
biwgJnNvLCB0eXBlLCBwcm90b2NvbCk7CisJaWYgKGVycm5vKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCS8qCisJICogVGhlIG9yaWdpbmFsIHNvY2tldCBjYWxsIHJldHVybnMgdGhlIGZpbGUg
ZGVzY3JpcHRvciBmZC4KKwkgKiB0ZC0+dGRfcmV0dmFsWzBdID0gZmQuCisJICogV2UgYXJlIHJl
dHVybmluZyBzdHJ1Y3Qgc29ja2V0ICpzby4KKwkgKi8KKwlyZXR1cm4gKHNvKTsKK30KKworc3Ry
dWN0IHNvY2tldCAqCit1c3JzY3RwX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHBy
b3RvY29sLAorCSAgICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1
bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCBm
bGFncywgdm9pZCAqdWxwX2luZm8pLAorCSAgICAgICBpbnQgKCpzZW5kX2NiKShzdHJ1Y3Qgc29j
a2V0ICpzb2NrLCB1aW50MzJfdCBzYl9mcmVlKSwKKwkgICAgICAgdWludDMyX3Qgc2JfdGhyZXNo
b2xkLAorCSAgICAgICB2b2lkICp1bHBfaW5mbykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwor
CWlmICgocHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSAmJiAoU0NUUF9CQVNFX1ZBUihzY3RwX3Bj
Yl9pbml0aWFsaXplZCkgPT0gMCkpIHsKKwkJZXJybm8gPSBFUFJPVE9OT1NVUFBPUlQ7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCWlmICgocmVjZWl2ZV9jYiA9PSBOVUxMKSAmJgorCSAgICAoKHNl
bmRfY2IgIT0gTlVMTCkgfHwgKHNiX3RocmVzaG9sZCAhPSAwKSB8fCAodWxwX2luZm8gIT0gTlVM
TCkpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKGRv
bWFpbiA9PSBBRl9DT05OKSAmJiAoU0NUUF9CQVNFX1ZBUihjb25uX291dHB1dCkgPT0gTlVMTCkp
IHsKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWVycm5v
ID0gc29jcmVhdGUoZG9tYWluLCAmc28sIHR5cGUsIHByb3RvY29sKTsKKwlpZiAoZXJybm8pIHsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoKKwkgKiBUaGUgb3JpZ2luYWwgc29ja2V0IGNhbGwg
cmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLgorCSAqIHRkLT50ZF9yZXR2YWxbMF0gPSBm
ZC4KKwkgKiBXZSBhcmUgcmV0dXJuaW5nIHN0cnVjdCBzb2NrZXQgKnNvLgorCSAqLworCXJlZ2lz
dGVyX3JlY3ZfY2Ioc28sIHJlY2VpdmVfY2IpOworCXJlZ2lzdGVyX3NlbmRfY2Ioc28sIHNiX3Ro
cmVzaG9sZCwgc2VuZF9jYik7CisJcmVnaXN0ZXJfdWxwX2luZm8oc28sIHVscF9pbmZvKTsKKwly
ZXR1cm4gKHNvKTsKK30KKworCit1X2xvbmcJc2JfbWF4ID0gU0JfTUFYOwordV9sb25nIHNiX21h
eF9hZGogPQorICAgICAgIFNCX01BWCAqIE1DTEJZVEVTIC8gKE1TSVpFICsgTUNMQllURVMpOyAv
KiBhZGp1c3RlZCBzYl9tYXggKi8KKworc3RhdGljCXVfbG9uZyBzYl9lZmZpY2llbmN5ID0gODsJ
LyogcGFyYW1ldGVyIGZvciBzYnJlc2VydmUoKSAqLworCisvKgorICogQWxsb3QgbWJ1ZnMgdG8g
YSBzb2NrYnVmLiAgQXR0ZW1wdCB0byBzY2FsZSBtYm1heCBzbyB0aGF0IG1iY250IGRvZXNuJ3QK
KyAqIGJlY29tZSBsaW1pdGluZyBpZiBidWZmZXJpbmcgZWZmaWNpZW5jeSBpcyBuZWFyIHRoZSBu
b3JtYWwgY2FzZS4KKyAqLworaW50CitzYnJlc2VydmVfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpz
YiwgdV9sb25nIGNjLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlTT0NLQlVGX0xPQ0tfQVNTRVJU
KHNiKTsKKwlzYi0+c2JfbWJtYXggPSAodV9pbnQpbWluKGNjICogc2JfZWZmaWNpZW5jeSwgc2Jf
bWF4KTsKKwlzYi0+c2JfaGl3YXQgPSAodV9pbnQpY2M7CisJaWYgKHNiLT5zYl9sb3dhdCA+IChp
bnQpc2ItPnNiX2hpd2F0KQorCQlzYi0+c2JfbG93YXQgPSAoaW50KXNiLT5zYl9oaXdhdDsKKwly
ZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50CitzYnJlc2VydmUoc3RydWN0IHNvY2tidWYgKnNi
LCB1X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvKQoreworCWludCBlcnJvcjsKKworCVNPQ0tC
VUZfTE9DSyhzYik7CisJZXJyb3IgPSBzYnJlc2VydmVfbG9ja2VkKHNiLCBjYywgc28pOworCVNP
Q0tCVUZfVU5MT0NLKHNiKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKK2ludAorc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcgc25k
Y2MsIHVfbG9uZyByY3ZjYykKK3sKKwlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOworCVNPQ0tC
VUZfTE9DSygmc28tPnNvX3Jjdik7CisJc28tPnNvX3NuZC5zYl9oaXdhdCA9ICh1aW50MzJfdClz
bmRjYzsKKwlzby0+c29fcmN2LnNiX2hpd2F0ID0gKHVpbnQzMl90KXJjdmNjOworCisJaWYgKHNi
cmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNuZGNjLCBzbykgPT0gMCkgeworCQlnb3RvIGJh
ZDsKKwl9CisJaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19yY3YsIHJjdmNjLCBzbykgPT0g
MCkgeworCQlnb3RvIGJhZDsKKwl9CisJaWYgKHNvLT5zb19yY3Yuc2JfbG93YXQgPT0gMCkKKwkJ
c28tPnNvX3Jjdi5zYl9sb3dhdCA9IDE7CisJaWYgKHNvLT5zb19zbmQuc2JfbG93YXQgPT0gMCkK
KwkJc28tPnNvX3NuZC5zYl9sb3dhdCA9IE1DTEJZVEVTOworCWlmIChzby0+c29fc25kLnNiX2xv
d2F0ID4gKGludClzby0+c29fc25kLnNiX2hpd2F0KQorCQlzby0+c29fc25kLnNiX2xvd2F0ID0g
KGludClzby0+c29fc25kLnNiX2hpd2F0OworCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsK
KwlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3NuZCk7CisJcmV0dXJuICgwKTsKKworIGJhZDoKKwlT
T0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQp
OworCXJldHVybiAoRU5PQlVGUyk7Cit9CisjZWxzZSAvKiBrZXJuZWwgdmVyc2lvbiBmb3IgcmVm
ZXJlbmNlICovCitpbnQKK3NvcmVzZXJ2ZShzdHJ1Y3Qgc29ja2V0ICpzbywgdV9sb25nIHNuZGNj
LCB1X2xvbmcgcmN2Y2MpCit7CisJc3RydWN0IHRocmVhZCAqdGQgPSBjdXJ0aHJlYWQ7CisKKwlT
T0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOworCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJ
aWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNuZGNjLCBzbywgdGQpID09IDApCisJ
CWdvdG8gYmFkOworCWlmIChzYnJlc2VydmVfbG9ja2VkKCZzby0+c29fcmN2LCByY3ZjYywgc28s
IHRkKSA9PSAwKQorCQlnb3RvIGJhZDI7CisJaWYgKHNvLT5zb19yY3Yuc2JfbG93YXQgPT0gMCkK
KwkJc28tPnNvX3Jjdi5zYl9sb3dhdCA9IDE7CisJaWYgKHNvLT5zb19zbmQuc2JfbG93YXQgPT0g
MCkKKwkJc28tPnNvX3NuZC5zYl9sb3dhdCA9IE1DTEJZVEVTOworCWlmIChzby0+c29fc25kLnNi
X2xvd2F0ID4gc28tPnNvX3NuZC5zYl9oaXdhdCkKKwkJc28tPnNvX3NuZC5zYl9sb3dhdCA9IHNv
LT5zb19zbmQuc2JfaGl3YXQ7CisJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3YpOworCVNPQ0tC
VUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwlyZXR1cm4gKDApOworYmFkMjoKKwlzYnJlbGVhc2Vf
bG9ja2VkKCZzby0+c29fc25kLCBzbyk7CitiYWQ6CisJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19y
Y3YpOworCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwlyZXR1cm4gKEVOT0JVRlMpOwor
fQorI2VuZGlmCisKKworCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3Nv
Y2tidWYuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KKworI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQKK3Nvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2J1ZiAqc2IpCit7CisKKwlTT0NLQlVGX0xPQ0tfQVNTRVJUKHNiKTsKKworCXNi
LT5zYl9mbGFncyAmPSB+U0JfU0VMOworCWlmIChzYi0+c2JfZmxhZ3MgJiBTQl9XQUlUKSB7CisJ
CXNiLT5zYl9mbGFncyAmPSB+U0JfV0FJVDsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorCQlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJihzYiktPnNiX2NvbmQpOworI2Vs
c2UKKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmKHNiKS0+c2JfY29uZCk7CisjZW5kaWYKKwl9
CisJU09DS0JVRl9VTkxPQ0soc2IpOworCS8qX19Vc2Vyc3BhY2VfXyB3aGF0IHRvZG8gYWJvdXQg
c29fdXBjYWxsPyovCisKK30KKyNlbHNlIC8qIGtlcm5lbCB2ZXJzaW9uIGZvciByZWZlcmVuY2Ug
Ki8KKy8qCisgKiBXYWtldXAgcHJvY2Vzc2VzIHdhaXRpbmcgb24gYSBzb2NrZXQgYnVmZmVyLiAg
RG8gYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbgorICogdmlhIFNJR0lPIGlmIHRoZSBzb2NrZXQg
aGFzIHRoZSBTU19BU1lOQyBmbGFnIHNldC4KKyAqCisgKiBDYWxsZWQgd2l0aCB0aGUgc29ja2V0
IGJ1ZmZlciBsb2NrIGhlbGQ7IHdpbGwgcmVsZWFzZSB0aGUgbG9jayBieSB0aGUgZW5kCisgKiBv
ZiB0aGUgZnVuY3Rpb24uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIGFjcXVpcmUgdGhlIHNv
Y2tldCBidWZmZXIgbG9jaworICogd2hpbGUgdGVzdGluZyBmb3IgdGhlIG5lZWQgZm9yIHZhcmlv
dXMgc29ydHMgb2Ygd2FrZXVwIGFuZCBob2xkIGl0IHRocm91Z2gKKyAqIHRvIHRoZSBwb2ludCB3
aGVyZSBpdCdzIG5vIGxvbmdlciByZXF1aXJlZC4gIFdlIGN1cnJlbnRseSBob2xkIHRoZSBsb2Nr
CisgKiB0aHJvdWdoIGNhbGxzIG91dCB0byBvdGhlciBzdWJzeXN0ZW1zICh3aXRoIHRoZSBleGNl
cHRpb24gb2Yga3F1ZXVlKSwgYW5kCisgKiB0aGVuIHJlbGVhc2UgaXQgdG8gYXZvaWQgbG9jayBv
cmRlciBpc3N1ZXMuICBJdCdzIG5vdCBjbGVhciB0aGF0J3MKKyAqIGNvcnJlY3QuCisgKi8KK3Zv
aWQKK3Nvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2J1ZiAqc2IpCit7CisK
KwlTT0NLQlVGX0xPQ0tfQVNTRVJUKHNiKTsKKworCXNlbHdha2V1cHByaSgmc2ItPnNiX3NlbCwg
UFNPQ0spOworCXNiLT5zYl9mbGFncyAmPSB+U0JfU0VMOworCWlmIChzYi0+c2JfZmxhZ3MgJiBT
Ql9XQUlUKSB7CisJCXNiLT5zYl9mbGFncyAmPSB+U0JfV0FJVDsKKwkJd2FrZXVwKCZzYi0+c2Jf
Y2MpOworCX0KKwlLTk9URV9MT0NLRUQoJnNiLT5zYl9zZWwuc2lfbm90ZSwgMCk7CisJU09DS0JV
Rl9VTkxPQ0soc2IpOworCWlmICgoc28tPnNvX3N0YXRlICYgU1NfQVNZTkMpICYmIHNvLT5zb19z
aWdpbyAhPSBOVUxMKQorCQlwZ3NpZ2lvKCZzby0+c29fc2lnaW8sIFNJR0lPLCAwKTsKKwlpZiAo
c2ItPnNiX2ZsYWdzICYgU0JfVVBDQUxMKQorCQkoKnNvLT5zb191cGNhbGwpKHNvLCBzby0+c29f
dXBjYWxsYXJnLCBNX05PV0FJVCk7CisJaWYgKHNiLT5zYl9mbGFncyAmIFNCX0FJTykKKwkJYWlv
X3N3YWtlKHNvLCBzYik7CisJbXR4X2Fzc2VydChTT0NLQlVGX01UWChzYiksIE1BX05PVE9XTkVE
KTsKK30KKyNlbmRpZgorCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3Nv
Y2tldC5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAqLworCitpbnQKK3Nv
YmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0pCit7CisJc3dpdGNo
IChuYW0tPnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwljYXNlIEFGX0lORVQ6CisJ
CXJldHVybiAoc2N0cF9iaW5kKHNvLCBuYW0pKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYp
CisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChzY3RwNl9iaW5kKHNvLCBuYW0sIE5VTEwpKTsK
KyNlbmRpZgorCWNhc2UgQUZfQ09OTjoKKwkJcmV0dXJuIChzY3RwY29ubl9iaW5kKHNvLCBuYW0p
KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRUFGTk9TVVBQT1JUOworCX0KK30KKworLyogVGFrZW4g
ZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKKyAqIGFuZCBtb2RpZmllZCBmb3Ig
X19Vc2Vyc3BhY2VfXworICovCisKK2ludAordXNyc2N0cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIGludCBuYW1lbGVuKQoreworCXN0cnVjdCBzb2NrYWRk
ciAqc2E7CisKKwlpZiAoc28gPT0gTlVMTCkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4g
KC0xKTsKKwl9CisJaWYgKChlcnJubyA9IGdldHNvY2thZGRyKCZzYSwgKGNhZGRyX3QpbmFtZSwg
bmFtZWxlbikpICE9IDApCisJCXJldHVybiAoLTEpOworCisJZXJybm8gPSBzb2JpbmQoc28sIHNh
KTsKKwlGUkVFKHNhLCBNX1NPTkFNRSk7CisJaWYgKGVycm5vKSB7CisJCXJldHVybiAoLTEpOwor
CX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitpbnQKK3VzZXJzcGFjZV9iaW5kKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIGludCBuYW1lbGVuKQorewor
CXJldHVybiAodXNyc2N0cF9iaW5kKHNvLCBuYW1lLCBuYW1lbGVuKSk7Cit9CisKKy8qIFRha2Vu
IGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBf
X1VzZXJzcGFjZV9fCisgKi8KKworaW50Citzb2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGJhY2tsb2cpCit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJcmV0dXJuIChFQkFERik7CisJfSBl
bHNlIHsKKwkJcmV0dXJuIChzY3RwX2xpc3RlbihzbywgYmFja2xvZywgTlVMTCkpOworCX0KK30K
KworCitpbnQKK3NvbGlzdGVuX3Byb3RvX2NoZWNrKHN0cnVjdCBzb2NrZXQgKnNvKQoreworCisJ
U09DS19MT0NLX0FTU0VSVChzbyk7CisKKwlpZiAoc28tPnNvX3N0YXRlICYgKFNTX0lTQ09OTkVD
VEVEIHwgU1NfSVNDT05ORUNUSU5HIHwKKwkgICAgU1NfSVNESVNDT05ORUNUSU5HKSkKKwkJcmV0
dXJuIChFSU5WQUwpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQgc29tYXhjb25uID0g
U09NQVhDT05OOworCit2b2lkCitzb2xpc3Rlbl9wcm90byhzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGJhY2tsb2cpCit7CisKKwlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsKKworCWlmIChiYWNrbG9nIDwg
MCB8fCBiYWNrbG9nID4gc29tYXhjb25uKQorCQliYWNrbG9nID0gc29tYXhjb25uOworCXNvLT5z
b19xbGltaXQgPSBiYWNrbG9nOworCXNvLT5zb19vcHRpb25zIHw9IFNDVFBfU09fQUNDRVBUQ09O
TjsKK30KKworCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxz
LmMKKyAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICovCisKK2ludAordXNyc2N0
cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQoreworCWVycm5vID0gc29s
aXN0ZW4oc28sIGJhY2tsb2cpOworCWlmIChlcnJubykgeworCQlyZXR1cm4gKC0xKTsKKwl9IGVs
c2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworaW50Cit1c2Vyc3BhY2VfbGlzdGVuKHN0cnVj
dCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZykKK3sKKwlyZXR1cm4gKHVzcnNjdHBfbGlzdGVuKHNv
LCBiYWNrbG9nKSk7Cit9CisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2Nr
ZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KKworaW50Citzb2Fj
Y2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKQoreworCWludCBl
cnJvcjsKKworCVNPQ0tfTE9DSyhzbyk7CisJS0FTU0VSVCgoc28tPnNvX3N0YXRlICYgU1NfTk9G
RFJFRikgIT0gMCwgKCJzb2FjY2VwdDogIU5PRkRSRUYiKSk7CisJc28tPnNvX3N0YXRlICY9IH5T
U19OT0ZEUkVGOworCVNPQ0tfVU5MT0NLKHNvKTsKKwllcnJvciA9IHNjdHBfYWNjZXB0KHNvLCBu
YW0pOworCXJldHVybiAoZXJyb3IpOworfQorCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMv
a2Vybi91aXBjX3N5c2NhbGxzLmMKKyAqIGtlcm5fYWNjZXB0IG1vZGlmaWVkIGZvciBfX1VzZXJz
cGFjZV9fCisgKi8KK2ludAordXNlcl9hY2NlcHQoc3RydWN0IHNvY2tldCAqaGVhZCwgIHN0cnVj
dCBzb2NrYWRkciAqKm5hbWUsIHNvY2tsZW5fdCAqbmFtZWxlbiwgc3RydWN0IHNvY2tldCAqKnB0
cl9hY2NlcHRfcmV0X3NvY2spCit7CisJc3RydWN0IHNvY2thZGRyICpzYSA9IE5VTEw7CisJaW50
IGVycm9yOworCXN0cnVjdCBzb2NrZXQgKnNvID0gTlVMTDsKKworCisJaWYgKG5hbWUpIHsKKwkJ
Km5hbWUgPSBOVUxMOworCX0KKworCWlmICgoaGVhZC0+c29fb3B0aW9ucyAmIFNDVFBfU09fQUND
RVBUQ09OTikgPT0gMCkgeworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBkb25lOworCX0KKwor
CUFDQ0VQVF9MT0NLKCk7CisJaWYgKChoZWFkLT5zb19zdGF0ZSAmIFNTX05CSU8pICYmIFRBSUxR
X0VNUFRZKCZoZWFkLT5zb19jb21wKSkgeworCQlBQ0NFUFRfVU5MT0NLKCk7CisJCWVycm9yID0g
RVdPVUxEQkxPQ0s7CisJCWdvdG8gbm9jb25uZWN0aW9uOworCX0KKwl3aGlsZSAoVEFJTFFfRU1Q
VFkoJmhlYWQtPnNvX2NvbXApICYmIGhlYWQtPnNvX2Vycm9yID09IDApIHsKKwkJaWYgKGhlYWQt
PnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgeworCQkJaGVhZC0+c29fZXJyb3Ig
PSBFQ09OTkFCT1JURUQ7CisJCQlicmVhazsKKwkJfQorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCisJCWlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoJmFjY2VwdF9jb25k
LCAmYWNjZXB0X210eCwgSU5GSU5JVEUpKQorCQkJZXJyb3IgPSAwOworCQllbHNlCisJCQllcnJv
ciA9IEdldExhc3RFcnJvcigpOworI2Vsc2UKKwkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdCgm
YWNjZXB0X2NvbmQsICZhY2NlcHRfbXR4KTsKKyNlbmRpZgorCQlpZiAoZXJyb3IpIHsKKwkJCUFD
Q0VQVF9VTkxPQ0soKTsKKwkJCWdvdG8gbm9jb25uZWN0aW9uOworCQl9CisJfQorCWlmIChoZWFk
LT5zb19lcnJvcikgeworCQllcnJvciA9IGhlYWQtPnNvX2Vycm9yOworCQloZWFkLT5zb19lcnJv
ciA9IDA7CisJCUFDQ0VQVF9VTkxPQ0soKTsKKwkJZ290byBub2Nvbm5lY3Rpb247CisJfQorCXNv
ID0gVEFJTFFfRklSU1QoJmhlYWQtPnNvX2NvbXApOworCUtBU1NFUlQoIShzby0+c29fcXN0YXRl
ICYgU1FfSU5DT01QKSwgKCJhY2NlcHQxOiBzbyBTUV9JTkNPTVAiKSk7CisJS0FTU0VSVChzby0+
c29fcXN0YXRlICYgU1FfQ09NUCwgKCJhY2NlcHQxOiBzbyBub3QgU1FfQ09NUCIpKTsKKworCS8q
CisJICogQmVmb3JlIGNoYW5naW5nIHRoZSBmbGFncyBvbiB0aGUgc29ja2V0LCB3ZSBoYXZlIHRv
IGJ1bXAgdGhlCisJICogcmVmZXJlbmNlIGNvdW50LiAgT3RoZXJ3aXNlLCBpZiB0aGUgcHJvdG9j
b2wgY2FsbHMgc29mcmVlKCksCisJICogdGhlIHNvY2tldCB3aWxsIGJlIHJlbGVhc2VkIGR1ZSB0
byBhIHplcm8gcmVmY291bnQuCisJICovCisJU09DS19MT0NLKHNvKTsJCQkvKiBzb3JlZigpIGFu
ZCBzb19zdGF0ZSB1cGRhdGUgKi8KKwlzb3JlZihzbyk7CQkJLyogZmlsZSBkZXNjcmlwdG9yIHJl
ZmVyZW5jZSAqLworCisJVEFJTFFfUkVNT1ZFKCZoZWFkLT5zb19jb21wLCBzbywgc29fbGlzdCk7
CisJaGVhZC0+c29fcWxlbi0tOworCXNvLT5zb19zdGF0ZSB8PSAoaGVhZC0+c29fc3RhdGUgJiBT
U19OQklPKTsKKwlzby0+c29fcXN0YXRlICY9IH5TUV9DT01QOworCXNvLT5zb19oZWFkID0gTlVM
TDsKKwlTT0NLX1VOTE9DSyhzbyk7CisJQUNDRVBUX1VOTE9DSygpOworCisKKwkvKgorCSAqIFRo
ZSBvcmlnaW5hbCBhY2NlcHQgcmV0dXJucyBmZCB2YWx1ZSB2aWEgdGQtPnRkX3JldHZhbFswXSA9
IGZkOworCSAqIHdlIHdpbGwgcmV0dXJuIHRoZSBzb2NrZXQgZm9yIGFjY2VwdGVkIGNvbm5lY3Rp
b24uCisJICovCisKKwllcnJvciA9IHNvYWNjZXB0KHNvLCAmc2EpOworCWlmIChlcnJvcikgewor
CQkvKgorCQkgKiByZXR1cm4gYSBuYW1lbGVuIG9mIHplcm8gZm9yIG9sZGVyIGNvZGUgd2hpY2gg
bWlnaHQKKwkJICogaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBhY2NlcHQuCisJCSAqLwor
CQlpZiAobmFtZSkKKwkJCSpuYW1lbGVuID0gMDsKKwkJZ290byBub2Nvbm5lY3Rpb247CisJfQor
CWlmIChzYSA9PSBOVUxMKSB7CisJCWlmIChuYW1lKQorCQkJKm5hbWVsZW4gPSAwOworCQlnb3Rv
IGRvbmU7CisJfQorCWlmIChuYW1lKSB7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJLyogY2hlY2sg
c2FfbGVuIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQgKi8KKwkJaWYgKCpuYW1lbGVuID4gc2EtPnNh
X2xlbikgeworCQkJKm5hbWVsZW4gPSBzYS0+c2FfbGVuOworCQl9CisjZWxzZQorCQlzb2NrbGVu
X3Qgc2FfbGVuOworCisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJ
Y2FzZSBBRl9JTkVUOgorCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJ
CQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlzYV9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQlicmVhazsKKyNlbmRpZgorCQlj
YXNlIEFGX0NPTk46CisJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwor
CQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzYV9sZW4gPSAwOworCQkJYnJlYWs7CisJCX0KKwkJ
aWYgKCpuYW1lbGVuID4gc2FfbGVuKSB7CisJCQkqbmFtZWxlbiA9IHNhX2xlbjsKKwkJfQorI2Vu
ZGlmCisJCSpuYW1lID0gc2E7CisJCXNhID0gTlVMTDsKKwl9Citub2Nvbm5lY3Rpb246CisJaWYg
KHNhKSB7CisJCUZSRUUoc2EsIE1fU09OQU1FKTsKKwl9CisKK2RvbmU6CisJKnB0cl9hY2NlcHRf
cmV0X3NvY2sgPSBzbzsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworCisKKy8qIFRha2VuIGZyb20g
IC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNl
cnNwYWNlX18KKyAqLworLyoKKyAqIGFjY2VwdDEoKQorICovCitzdGF0aWMgaW50CithY2NlcHQx
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFuYW1lLCBzb2NrbGVuX3QgKmFu
YW1lbGVuLCBzdHJ1Y3Qgc29ja2V0ICoqcHRyX2FjY2VwdF9yZXRfc29jaykKK3sKKwlzdHJ1Y3Qg
c29ja2FkZHIgKm5hbWU7CisJc29ja2xlbl90IG5hbWVsZW47CisJaW50IGVycm9yOworCisJaWYg
KHNvID09IE5VTEwpIHsKKwkJcmV0dXJuIChFQkFERik7CisJfQorCWlmIChhbmFtZSA9PSBOVUxM
KSB7CisJCXJldHVybiAodXNlcl9hY2NlcHQoc28sIE5VTEwsIE5VTEwsIHB0cl9hY2NlcHRfcmV0
X3NvY2spKTsKKwl9CisKKwllcnJvciA9IGNvcHlpbihhbmFtZWxlbiwgJm5hbWVsZW4sIHNpemVv
ZiAobmFtZWxlbikpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwllcnJvciA9
IHVzZXJfYWNjZXB0KHNvLCAmbmFtZSwgJm5hbWVsZW4sIHB0cl9hY2NlcHRfcmV0X3NvY2spOwor
CisJLyoKKwkgKiByZXR1cm4gYSBuYW1lbGVuIG9mIHplcm8gZm9yIG9sZGVyIGNvZGUgd2hpY2gg
bWlnaHQKKwkgKiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFjY2VwdC4KKwkgKi8KKwlp
ZiAoZXJyb3IpIHsKKwkJKHZvaWQpIGNvcHlvdXQoJm5hbWVsZW4sCisJCSAgICBhbmFtZWxlbiwg
c2l6ZW9mKCphbmFtZWxlbikpOworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisKKwlpZiAoZXJyb3Ig
PT0gMCAmJiBuYW1lICE9IE5VTEwpIHsKKwkJZXJyb3IgPSBjb3B5b3V0KG5hbWUsIGFuYW1lLCBu
YW1lbGVuKTsKKwl9CisJaWYgKGVycm9yID09IDApIHsKKwkJZXJyb3IgPSBjb3B5b3V0KCZuYW1l
bGVuLCBhbmFtZWxlbiwgc2l6ZW9mKG5hbWVsZW4pKTsKKwl9CisKKwlpZiAobmFtZSkgeworCQlG
UkVFKG5hbWUsIE1fU09OQU1FKTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKK3N0cnVjdCBz
b2NrZXQgKgordXNyc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqYW5hbWUsIHNvY2tsZW5fdCAqYW5hbWVsZW4pCit7CisJc3RydWN0IHNvY2tldCAqYWNjZXB0
X3JldHVybl9zb2NrID0gTlVMTDsKKworCWVycm5vID0gYWNjZXB0MShzbywgYW5hbWUsIGFuYW1l
bGVuLCAmYWNjZXB0X3JldHVybl9zb2NrKTsKKwlpZiAoZXJybm8pIHsKKwkJcmV0dXJuIChOVUxM
KTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKGFjY2VwdF9yZXR1cm5fc29jayk7CisJfQorfQorCitz
dHJ1Y3Qgc29ja2V0ICoKK3VzZXJzcGFjZV9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqYW5hbWUsIHNvY2tsZW5fdCAqYW5hbWVsZW4pCit7CisJcmV0dXJuICh1c3Jz
Y3RwX2FjY2VwdChzbywgYW5hbWUsIGFuYW1lbGVuKSk7Cit9CisKK3N0cnVjdCBzb2NrZXQgKgor
dXNyc2N0cF9wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKmhlYWQsIHNjdHBfYXNzb2NfdCBpZCkKK3sK
KwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCWlmICgoZXJybm8gPSBzY3RwX2Nhbl9wZWVsX29mZiho
ZWFkLCBpZCkpICE9IDApIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChzbyA9IHNvbmV3
Y29ubihoZWFkLCBTU19JU0NPTk5FQ1RFRCkpID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJQUNDRVBUX0xPQ0soKTsKKwlTT0NLX0xPQ0soc28pOworCXNvcmVmKHNvKTsKKwlUQUlM
UV9SRU1PVkUoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsKKwloZWFkLT5zb19xbGVuLS07
CisJc28tPnNvX3N0YXRlIHw9IChoZWFkLT5zb19zdGF0ZSAmIFNTX05CSU8pOworCXNvLT5zb19x
c3RhdGUgJj0gflNRX0NPTVA7CisJc28tPnNvX2hlYWQgPSBOVUxMOworCVNPQ0tfVU5MT0NLKHNv
KTsKKwlBQ0NFUFRfVU5MT0NLKCk7CisJaWYgKChlcnJubyA9IHNjdHBfZG9fcGVlbG9mZihoZWFk
LCBzbywgaWQpKSAhPSAwKSB7CisJCXNvLT5zb19jb3VudCA9IDA7CisJCXNvZGVhbGxvYyhzbyk7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCXJldHVybiAoc28pOworfQorCitpbnQKK3NvZGlzY29u
bmVjdChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoKHNvLT5zb19z
dGF0ZSAmIFNTX0lTQ09OTkVDVEVEKSA9PSAwKQorCQlyZXR1cm4gKEVOT1RDT05OKTsKKwlpZiAo
c28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNUSU5HKQorCQlyZXR1cm4gKEVBTFJFQURZKTsK
KwllcnJvciA9IHNjdHBfZGlzY29ubmVjdChzbyk7CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2lu
dAordXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb25vZmYp
Cit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7
CisJfQorCVNPQ0tfTE9DSyhzbyk7CisJaWYgKG9ub2ZmICE9IDApIHsKKwkJc28tPnNvX3N0YXRl
IHw9IFNTX05CSU87CisJfSBlbHNlIHsKKwkJc28tPnNvX3N0YXRlICY9IH5TU19OQklPOworCX0K
KwlTT0NLX1VOTE9DSyhzbyk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit1c3JzY3RwX2dldF9u
b25fYmxvY2tpbmcoc3RydWN0IHNvY2tldCAqc28pCit7CisJaW50IHJlc3VsdDsKKworCWlmIChz
byA9PSBOVUxMKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlTT0NL
X0xPQ0soc28pOworCWlmIChzby0+c29fc3RhdGUgJiBTU19OQklPKSB7CisJCXJlc3VsdCA9IDE7
CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gMDsKKwl9CisJU09DS19VTkxPQ0soc28pOworCXJldHVy
biAocmVzdWx0KTsKK30KKworaW50Citzb2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqbmFtKQoreworCWludCBlcnJvcjsKKworCWlmIChzby0+c29fb3B0aW9ucyAm
IFNDVFBfU09fQUNDRVBUQ09OTikKKwkJcmV0dXJuIChFT1BOT1RTVVBQKTsKKwkvKgorCSAqIElm
IHByb3RvY29sIGlzIGNvbm5lY3Rpb24tYmFzZWQsIGNhbiBvbmx5IGNvbm5lY3Qgb25jZS4KKwkg
KiBPdGhlcndpc2UsIGlmIGNvbm5lY3RlZCwgdHJ5IHRvIGRpc2Nvbm5lY3QgZmlyc3QuICBUaGlz
IGFsbG93cworCSAqIHVzZXIgdG8gZGlzY29ubmVjdCBieSBjb25uZWN0aW5nIHRvLCBlLmcuLCBh
IG51bGwgYWRkcmVzcy4KKwkgKi8KKwlpZiAoc28tPnNvX3N0YXRlICYgKFNTX0lTQ09OTkVDVEVE
fFNTX0lTQ09OTkVDVElORykgJiYgKGVycm9yID0gc29kaXNjb25uZWN0KHNvKSkpIHsKKwkJZXJy
b3IgPSBFSVNDT05OOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFByZXZlbnQgYWNjdW11bGF0ZWQg
ZXJyb3IgZnJvbSBwcmV2aW91cyBjb25uZWN0aW9uIGZyb20KKwkJICogYml0aW5nIHVzLgorCQkg
Ki8KKwkJc28tPnNvX2Vycm9yID0gMDsKKwkJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgeworI2lm
IGRlZmluZWQoSU5FVCkKKwkJY2FzZSBBRl9JTkVUOgorCQkJZXJyb3IgPSBzY3RwX2Nvbm5lY3Qo
c28sIG5hbSk7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJCWNhc2Ug
QUZfSU5FVDY6CisJCQllcnJvciA9IHNjdHA2X2Nvbm5lY3Qoc28sIG5hbSk7CisJCQlicmVhazsK
KyNlbmRpZgorCQljYXNlIEFGX0NPTk46CisJCQllcnJvciA9IHNjdHBjb25uX2Nvbm5lY3Qoc28s
IG5hbSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycm9yID0gRUFGTk9TVVBQT1JUOwor
CQl9CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKKworCitpbnQgdXNlcl9jb25uZWN0KHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworCWludCBlcnJvcjsKKwlp
bnQgaW50ZXJydXB0ZWQgPSAwOworCisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJyb3IgPSBFQkFE
RjsKKwkJZ290byBkb25lMTsKKwl9CisJaWYgKHNvLT5zb19zdGF0ZSAmIFNTX0lTQ09OTkVDVElO
RykgeworCQllcnJvciA9IEVBTFJFQURZOworCQlnb3RvIGRvbmUxOworCX0KKworCWVycm9yID0g
c29jb25uZWN0KHNvLCBzYSk7CisJaWYgKGVycm9yKSB7CisJCWdvdG8gYmFkOworCX0KKwlpZiAo
KHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pICYmIChzby0+c29fc3RhdGUgJiBTU19JU0NPTk5FQ1RJ
TkcpKSB7CisJCWVycm9yID0gRUlOUFJPR1JFU1M7CisJCWdvdG8gZG9uZTE7CisJfQorCisJU09D
S19MT0NLKHNvKTsKKwl3aGlsZSAoKHNvLT5zb19zdGF0ZSAmIFNTX0lTQ09OTkVDVElORykgJiYg
c28tPnNvX2Vycm9yID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQlpZiAoU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKFNPQ0tfQ09ORChzbyksIFNPQ0tfTVRY
KHNvKSwgSU5GSU5JVEUpKQorCQkJZXJyb3IgPSAwOworCQllbHNlCisJCQllcnJvciA9IC0xOwor
I2Vsc2UKKwkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdChTT0NLX0NPTkQoc28pLCBTT0NLX01U
WChzbykpOworI2VuZGlmCisJCWlmIChlcnJvcikgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfTmV0QlNEKQorCQkJaWYgKGVycm9yID09IEVJTlRSKSB7CisjZWxzZQorCQkJaWYgKGVycm9y
ID09IEVJTlRSIHx8IGVycm9yID09IEVSRVNUQVJUKSB7CisjZW5kaWYKKwkJCQlpbnRlcnJ1cHRl
ZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZXJyb3IgPT0gMCkgeworCQll
cnJvciA9IHNvLT5zb19lcnJvcjsKKwkJc28tPnNvX2Vycm9yID0gMDsKKwl9CisJU09DS19VTkxP
Q0soc28pOworCitiYWQ6CisJaWYgKCFpbnRlcnJ1cHRlZCkgeworCQlzby0+c29fc3RhdGUgJj0g
flNTX0lTQ09OTkVDVElORzsKKwl9CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNE
KQorCWlmIChlcnJvciA9PSBFUkVTVEFSVCkgeworCQllcnJvciA9IEVJTlRSOworCX0KKyNlbmRp
ZgorZG9uZTE6CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludCB1c3JzY3RwX2Nvbm5lY3Qoc3Ry
dWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJ
c3RydWN0IHNvY2thZGRyICpzYTsKKworCWVycm5vID0gZ2V0c29ja2FkZHIoJnNhLCAoY2FkZHJf
dCluYW1lLCBuYW1lbGVuKTsKKwlpZiAoZXJybm8pCisJCXJldHVybiAoLTEpOworCisJZXJybm8g
PSB1c2VyX2Nvbm5lY3Qoc28sIHNhKTsKKwlGUkVFKHNhLCBNX1NPTkFNRSk7CisJaWYgKGVycm5v
KSB7CisJCXJldHVybiAoLTEpOworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitp
bnQgdXNlcnNwYWNlX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAq
bmFtZSwgaW50IG5hbWVsZW4pCit7CisJcmV0dXJuICh1c3JzY3RwX2Nvbm5lY3Qoc28sIG5hbWUs
IG5hbWVsZW4pKTsKK30KKworI2RlZmluZSBTQ1RQX1NUQUNLX0JVRl9TSVpFICAgICAgICAgMjA0
OAorCit2b2lkCit1c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKSB7CisJaWYgKHNvICE9
IE5VTEwpIHsKKwkJaWYgKHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19BQ0NFUFRDT05OKSB7CisJ
CQlzdHJ1Y3Qgc29ja2V0ICpzcDsKKworCQkJQUNDRVBUX0xPQ0soKTsKKwkJCXdoaWxlICgoc3Ag
PSBUQUlMUV9GSVJTVCgmc28tPnNvX2NvbXApKSAhPSBOVUxMKSB7CisJCQkJVEFJTFFfUkVNT1ZF
KCZzby0+c29fY29tcCwgc3AsIHNvX2xpc3QpOworCQkJCXNvLT5zb19xbGVuLS07CisJCQkJc3At
PnNvX3FzdGF0ZSAmPSB+U1FfQ09NUDsKKwkJCQlzcC0+c29faGVhZCA9IE5VTEw7CisJCQkJQUND
RVBUX1VOTE9DSygpOworCQkJCXNvYWJvcnQoc3ApOworCQkJCUFDQ0VQVF9MT0NLKCk7CisJCQl9
CisJCQlBQ0NFUFRfVU5MT0NLKCk7CisJCX0KKwkJQUNDRVBUX0xPQ0soKTsKKwkJU09DS19MT0NL
KHNvKTsKKwkJc29yZWxlKHNvKTsKKwl9Cit9CisKK3ZvaWQKK3VzZXJzcGFjZV9jbG9zZShzdHJ1
Y3Qgc29ja2V0ICpzbykKK3sKKwl1c3JzY3RwX2Nsb3NlKHNvKTsKK30KKworaW50Cit1c3JzY3Rw
X3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQoreworCWlmICghKGhvdyA9PSBT
SFVUX1JEIHx8IGhvdyA9PSBTSFVUX1dSIHx8IGhvdyA9PSBTSFVUX1JEV1IpKSB7CisJCWVycm5v
ID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJy
bm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCXNjdHBfZmx1c2goc28sIGhvdyk7CisJ
aWYgKGhvdyAhPSBTSFVUX1dSKQorCQkgc29jYW50cmN2bW9yZShzbyk7CisJaWYgKGhvdyAhPSBT
SFVUX1JEKSB7CisJCWVycm5vID0gc2N0cF9zaHV0ZG93bihzbyk7CisJCWlmIChlcnJubykgewor
CQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCXJl
dHVybiAoMCk7Cit9CisKK2ludAordXNlcnNwYWNlX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgaG93KQoreworCXJldHVybiAodXNyc2N0cF9zaHV0ZG93bihzbywgaG93KSk7Cit9CisK
K2ludAordXNyc2N0cF9maW5pc2godm9pZCkKK3sKKwlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3Bj
Yl9pbml0aWFsaXplZCkgPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoU0NUUF9JTlBf
SU5GT19UUllMT0NLKCkpIHsKKwkJaWYgKCFMSVNUX0VNUFRZKCZTQ1RQX0JBU0VfSU5GTyhsaXN0
aGVhZCkpKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCXJldHVybiAoLTEpOwor
CQl9CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCX0gZWxzZSB7CisJCXJldHVybiAoLTEp
OworCX0KKwlzY3RwX2ZpbmlzaCgpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKKwlEZWxldGVDb25kaXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQpOworCURlbGV0ZUNyaXRp
Y2FsU2VjdGlvbigmYWNjZXB0X210eCk7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO
RVQ2KQorCVdTQUNsZWFudXAoKTsKKyNlbmRpZgorI2Vsc2UKKwlwdGhyZWFkX2NvbmRfZGVzdHJv
eSgmYWNjZXB0X2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmYWNjZXB0X210eCk7Cisj
ZW5kaWYKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3VzZXJzcGFjZV9maW5pc2godm9pZCkKK3sK
KwlyZXR1cm4gKHVzcnNjdHBfZmluaXNoKCkpOworfQorCisvKiBuZWVkZWQgZnJvbSBzY3RwX3Vz
cnJlcS5jICovCitpbnQKK3NjdHBfc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFt
ZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0c2l6ZSwgdm9pZCAqcCk7CisKK2ludAordXNyc2N0
cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFt
ZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvcHRpb25fdmFsdWUsIHNvY2tsZW5f
dCBvcHRpb25fbGVuKQoreworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUJBREY7CisJ
CXJldHVybiAoLTEpOworCX0KKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTT0xfU09DS0VUOgor
CXsKKwkJc3dpdGNoIChvcHRpb25fbmFtZSkgeworCQljYXNlIFNPX1JDVkJVRjoKKwkJCWlmIChv
cHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5vID0gRUlOVkFM
OworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9zaXplOworCisJ
CQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCWlmICgqYnVmX3NpemUgPCAx
KSB7CisJCQkJCWVycm5vID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJ
c2JyZXNlcnZlKCZzby0+c29fcmN2LCAodV9sb25nKSpidWZfc2l6ZSwgc28pOworCQkJCXJldHVy
biAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19TTkRCVUY6CisJCQlpZiAob3B0aW9u
X2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIHsKKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJ
CQlyZXR1cm4gKC0xKTsKKwkJCX0gZWxzZSB7CisJCQkJaW50ICpidWZfc2l6ZTsKKworCQkJCWJ1
Zl9zaXplID0gKGludCAqKW9wdGlvbl92YWx1ZTsKKwkJCQlpZiAoKmJ1Zl9zaXplIDwgMSkgewor
CQkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCXNicmVz
ZXJ2ZSgmc28tPnNvX3NuZCwgKHVfbG9uZykqYnVmX3NpemUsIHNvKTsKKwkJCQlyZXR1cm4gKDAp
OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU09fTElOR0VSOgorCQkJaWYgKG9wdGlvbl9sZW4g
PCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3QgbGluZ2VyKSkgeworCQkJCWVycm5vID0gRUlOVkFM
OworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgbGluZ2VyICpsOwor
CisJCQkJbCA9IChzdHJ1Y3QgbGluZ2VyICopb3B0aW9uX3ZhbHVlOworCQkJCXNvLT5zb19saW5n
ZXIgPSBsLT5sX2xpbmdlcjsKKwkJCQlpZiAobC0+bF9vbm9mZikgeworCQkJCQlzby0+c29fb3B0
aW9ucyB8PSBTQ1RQX1NPX0xJTkdFUjsKKwkJCQl9IGVsc2UgeworCQkJCQlzby0+c29fb3B0aW9u
cyAmPSB+U0NUUF9TT19MSU5HRVI7CisJCQkJfQorCQkJCXJldHVybiAoMCk7CisJCQl9CisJCWRl
ZmF1bHQ6CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCWNh
c2UgSVBQUk9UT19TQ1RQOgorCQllcnJubyA9IHNjdHBfc2V0b3B0KHNvLCBvcHRpb25fbmFtZSwg
KHZvaWQgKikgb3B0aW9uX3ZhbHVlLCAoc2l6ZV90KW9wdGlvbl9sZW4sIE5VTEwpOworCQlpZiAo
ZXJybm8pIHsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsKKwkJ
fQorCWRlZmF1bHQ6CisJCWVycm5vID0gRU5PUFJPVE9PUFQ7CisJCXJldHVybiAoLTEpOworCX0K
K30KKworaW50Cit1c2Vyc3BhY2Vfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGxl
dmVsLCBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpv
cHRpb25fdmFsdWUsIHNvY2tsZW5fdCBvcHRpb25fbGVuKQoreworCXJldHVybiAodXNyc2N0cF9z
ZXRzb2Nrb3B0KHNvLCBsZXZlbCwgb3B0aW9uX25hbWUsIG9wdGlvbl92YWx1ZSwgb3B0aW9uX2xl
bikpOworfQorCisvKiBuZWVkZWQgZnJvbSBzY3RwX3VzcnJlcS5jICovCitpbnQKK3NjdHBfZ2V0
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qg
Km9wdHNpemUsCisJICAgIHZvaWQgKnApOworCitpbnQKK3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1
Y3Qgc29ja2V0ICpzbywgaW50IGxldmVsLCBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAg
ICAgICAgdm9pZCAqb3B0aW9uX3ZhbHVlLCBzb2NrbGVuX3QgKm9wdGlvbl9sZW4pCit7CisJaWYg
KHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlm
IChvcHRpb25fbGVuID09IE5VTEwpIHsKKwkJZXJybm8gPSBFRkFVTFQ7CisJCXJldHVybiAoLTEp
OworCX0KKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTT0xfU09DS0VUOgorCQlzd2l0Y2ggKG9w
dGlvbl9uYW1lKSB7CisJCWNhc2UgU09fUkNWQlVGOgorCQkJaWYgKCpvcHRpb25fbGVuIDwgKHNv
Y2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAo
LTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9zaXplOworCisJCQkJYnVmX3NpemUgPSAo
aW50ICopb3B0aW9uX3ZhbHVlOworCQkJCSpidWZfc2l6ZSA9IHNvLT5zb19yY3Yuc2JfaGl3YXQ7
OworCQkJCSpvcHRpb25fbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwkJCQlyZXR1cm4g
KDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU09fU05EQlVGOgorCQkJaWYgKCpvcHRpb25f
bGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJ
CXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9zaXplOworCisJCQkJYnVm
X3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCSpidWZfc2l6ZSA9IHNvLT5zb19zbmQu
c2JfaGl3YXQ7CisJCQkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCQkJ
CXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19MSU5HRVI6CisJCQlpZiAo
Km9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3QgbGluZ2VyKSkgeworCQkJCWVy
cm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3Qg
bGluZ2VyICpsOworCisJCQkJbCA9IChzdHJ1Y3QgbGluZ2VyICopb3B0aW9uX3ZhbHVlOworCQkJ
CWwtPmxfbGluZ2VyID0gc28tPnNvX2xpbmdlcjsKKwkJCQlpZiAoc28tPnNvX29wdGlvbnMgJiBT
Q1RQX1NPX0xJTkdFUikgeworCQkJCQlsLT5sX29ub2ZmID0gMTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlsLT5sX29ub2ZmID0gMDsKKwkJCQl9CisJCQkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNp
emVvZihzdHJ1Y3QgbGluZ2VyKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQlkZWZhdWx0Ogor
CQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCWNhc2UgSVBQUk9UT19T
Q1RQOgorCXsKKwkJc2l6ZV90IGxlbjsKKworCQlsZW4gPSAoc2l6ZV90KSpvcHRpb25fbGVuOwor
CQllcnJubyA9IHNjdHBfZ2V0b3B0KHNvLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCAmbGVu
LCBOVUxMKTsKKwkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KWxlbjsKKwkJaWYgKGVycm5vKSB7
CisJCQlyZXR1cm4gKC0xKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAoMCk7CisJCX0KKwl9CisJ
ZGVmYXVsdDoKKwkJZXJybm8gPSBFTk9QUk9UT09QVDsKKwkJcmV0dXJuICgtMSk7CisJfQorfQor
CitpbnQKK3VzZXJzcGFjZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWws
IGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wdGlvbl92YWx1
ZSwgc29ja2xlbl90ICpvcHRpb25fbGVuKQoreworCXJldHVybiAodXNyc2N0cF9nZXRzb2Nrb3B0
KHNvLCBsZXZlbCwgb3B0aW9uX25hbWUsIG9wdGlvbl92YWx1ZSwgb3B0aW9uX2xlbikpOworfQor
CitpbnQKK3VzcnNjdHBfb3B0X2luZm8oc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBp
ZCwgaW50IG9wdCwgdm9pZCAqYXJnLCBzb2NrbGVuX3QgKnNpemUpCit7CisJaWYgKGFyZyA9PSBO
VUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKChpZCA9
PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJICAgIChpZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsK
KwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKwlzd2l0Y2ggKG9wdCkgewor
CWNhc2UgU0NUUF9SVE9JTkZPOgorCQkoKHN0cnVjdCBzY3RwX3J0b2luZm8gKilhcmcpLT5zcnRv
X2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BU1NPQ0lORk86CisJCSgoc3Ry
dWN0IHNjdHBfYXNzb2NwYXJhbXMgKilhcmcpLT5zYXNvY19hc3NvY19pZCA9IGlkOworCQlicmVh
azsKKwljYXNlIFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29j
cGFyYW1zICopYXJnKS0+c2Fzb2NfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X1BSSU1BUllfQUREUjoKKwkJKChzdHJ1Y3Qgc2N0cF9zZXRwcmltICopYXJnKS0+c3NwX2Fzc29j
X2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9QRUVSX0FERFJfUEFSQU1TOgorCQkoKHN0
cnVjdCBzY3RwX3BhZGRycGFyYW1zICopYXJnKS0+c3BwX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9NQVhTRUc6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcp
LT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfQVVUSF9LRVk6CisJCSgoc3Ry
dWN0IHNjdHBfYXV0aGtleSAqKWFyZyktPnNjYV9hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwlj
YXNlIFNDVFBfQVVUSF9BQ1RJVkVfS0VZOgorCQkoKHN0cnVjdCBzY3RwX2F1dGhrZXlpZCAqKWFy
ZyktPnNjYWN0X2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9ERUxBWUVEX1NB
Q0s6CisJCSgoc3RydWN0IHNjdHBfc2Fja19pbmZvICopYXJnKS0+c2Fja19hc3NvY19pZCA9IGlk
OworCQlicmVhazsKKwljYXNlIFNDVFBfQ09OVEVYVDoKKwkJKChzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFUVVM6
CisJCSgoc3RydWN0IHNjdHBfc3RhdHVzICopYXJnKS0+c3N0YXRfYXNzb2NfaWQgPSBpZDsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTzoKKwkJKChzdHJ1Y3Qgc2N0cF9w
YWRkcmluZm8gKilhcmcpLT5zcGluZm9fYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1BFRVJfQVVUSF9DSFVOS1M6CisJCSgoc3RydWN0IHNjdHBfYXV0aGNodW5rcyAqKWFyZykt
PmdhdXRoX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9MT0NBTF9BVVRIX0NI
VU5LUzoKKwkJKChzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICopYXJnKS0+Z2F1dGhfYXNzb2NfaWQg
PSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVPVVRTOgorCQkoKHN0cnVjdCBzY3RwX3Rp
bWVvdXRzICopYXJnKS0+c3RpbW9fYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0VWRU5UOgorCQkoKHN0cnVjdCBzY3RwX2V2ZW50ICopYXJnKS0+c2VfYXNzb2NfaWQgPSBpZDsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX0RFRkFVTFRfU05ESU5GTzoKKwkJKChzdHJ1Y3Qgc2N0cF9z
bmRpbmZvICopYXJnKS0+c25kX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9E
RUZBVUxUX1BSSU5GTzoKKwkJKChzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyAqKWFyZyktPnBy
X2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9QRUVSX0FERFJfVEhMRFM6CisJ
CSgoc3RydWN0IHNjdHBfcGFkZHJ0aGxkcyAqKWFyZyktPnNwdF9hc3NvY19pZCA9IGlkOworCQli
cmVhazsKKwljYXNlIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVDoKKwkJKChzdHJ1Y3Qgc2N0
cF91ZHBlbmNhcHMgKilhcmcpLT5zdWVfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX0VDTl9TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5h
c3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU1VQUE9SVEVEOgorCQkoKHN0
cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX0FVVEhfU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICop
YXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FTQ09ORl9TVVBQT1JU
RUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOwor
CQlicmVhazsKKwljYXNlIFNDVFBfUkVDT05GSUdfU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X05SU0FDS19TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5h
c3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUEtURFJPUF9TVVBQT1JURUQ6CisJ
CSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOworCQlicmVh
azsKKwljYXNlIFNDVFBfTUFYX0JVUlNUOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICop
YXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0VOQUJMRV9TVFJFQU1f
UkVTRVQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlk
OworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU1RSRUFNX1NUQVRVUzoKKwkJKChzdHJ1Y3Qgc2N0
cF9wcnN0YXR1cyAqKWFyZyktPnNwcnN0YXRfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1BSX0FTU09DX1NUQVRVUzoKKwkJKChzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyAqKWFyZykt
PnNwcnN0YXRfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX01BWF9DV05EOgor
CQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJl
YWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAodXNyc2N0cF9nZXRzb2Nrb3B0
KHNvLCBJUFBST1RPX1NDVFAsIG9wdCwgYXJnLCBzaXplKSk7Cit9CisKK2ludAordXNyc2N0cF9z
ZXRfdWxwaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2luZm8pCit7CisJcmV0dXJu
IChyZWdpc3Rlcl91bHBfaW5mbyhzbywgdWxwX2luZm8pKTsKK30KKworaW50Cit1c3JzY3RwX2Jp
bmR4KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNu
dCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcyAqZ2FkZHJzOworCXN0
cnVjdCBzb2NrYWRkciAqc2E7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vu
ZGlmCisJaW50IGk7CisJc2l6ZV90IGFyZ3N6OworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5l
ZChJTkVUNikKKwl1aW50MTZfdCBzcG9ydCA9IDA7CisjZW5kaWYKKworCS8qIHZhbGlkYXRlIHRo
ZSBmbGFncyAqLworCWlmICgoZmxhZ3MgIT0gU0NUUF9CSU5EWF9BRERfQUREUikgJiYKKwkgICAg
KGZsYWdzICE9IFNDVFBfQklORFhfUkVNX0FERFIpKSB7CisJCWVycm5vID0gRUZBVUxUOworCQly
ZXR1cm4gKC0xKTsKKwl9CisJLyogdmFsaWRhdGUgdGhlIGFkZHJlc3MgY291bnQgYW5kIGxpc3Qg
Ki8KKwlpZiAoKGFkZHJjbnQgPD0gMCkgfHwgKGFkZHJzID09IE5VTEwpKSB7CisJCWVycm5vID0g
RUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogRmlyc3QgcHJlLXNjcmVlbiB0aGUgYWRk
cmVzc2VzICovCisJc2EgPSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7
CisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVU
OgorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoc2EtPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOwor
CQkJfQorI2VuZGlmCisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CisJCQlpZiAo
c2luLT5zaW5fcG9ydCkgeworCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9yIHNhdmUgKi8K
KwkJCQlpZiAoc3BvcnQpIHsKKwkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9ydCAqLworCQkJ
CQlpZiAoc3BvcnQgIT0gc2luLT5zaW5fcG9ydCkgeworCQkJCQkJZXJybm8gPSBFSU5WQUw7CisJ
CQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8qIHNhdmUgb2Zm
IHRoZSBwb3J0ICovCisJCQkJCXNwb3J0ID0gc2luLT5zaW5fcG9ydDsKKwkJCQl9CisJCQl9Cisj
aWZuZGVmIEhBVkVfU0FfTEVOCisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qp
c2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgor
CQkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQkJ
ZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisjZW5kaWYKKwkJCXNpbjYg
PSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOworCQkJaWYgKHNpbjYtPnNpbjZfcG9ydCkgewor
CQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9yIHNhdmUgKi8KKwkJCQlpZiAoc3BvcnQpIHsK
KwkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9ydCAqLworCQkJCQlpZiAoc3BvcnQgIT0gc2lu
Ni0+c2luNl9wb3J0KSB7CisJCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQkJCXJldHVybiAoLTEp
OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogc2F2ZSBvZmYgdGhlIHBvcnQgKi8KKwkJ
CQkJc3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisJCQkJfQorCQkJfQorI2lmbmRlZiBIQVZFX1NB
X0xFTgorCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVs
dDoKKwkJCS8qIEludmFsaWQgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWVkLiAqLworCQkJZXJybm8g
PSBFQUZOT1NVUFBPUlQ7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorI2lmZGVmIEhBVkVfU0FfTEVO
CisJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5zYV9sZW4pOwor
I2VuZGlmCisJfQorCWFyZ3N6ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgKwor
CSAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsKKwlpZiAoKGdhZGRycyA9
IChzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKiltYWxsb2MoYXJnc3opKSA9PSBOVUxMKSB7CisJ
CWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc2EgPSBhZGRyczsKKwlmb3Ig
KGkgPSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCXNpemVf
dCBzYV9sZW47CisjZW5kaWYKKwkJbWVtc2V0KGdhZGRycywgMCwgYXJnc3opOworCQlnYWRkcnMt
PnNnZXRfYXNzb2NfaWQgPSAwOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCW1lbWNweShnYWRkcnMt
PmFkZHIsIHNhLCBzYS0+c2FfbGVuKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisJCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKKwkJCXN3aXRjaCAoZ2FkZHJz
LT5hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJ
c2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsKKwkJCQlzaW4tPnNpbl9w
b3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBB
Rl9JTkVUNjoKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilnYWRkcnMtPmFkZHI7
CisJCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0K
KwkJfQorI2VuZGlmCisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwg
ZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgeworCQkJZnJlZShnYWRkcnMp
OworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KXNhICsgc2EtPnNhX2xlbik7CisjZWxzZQorCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsK
KyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFG
X0lORVQ2OgorCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJYnJl
YWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXNhX2xlbiA9IDA7CisJCQlicmVhazsKKwkJfQor
CQltZW1jcHkoZ2FkZHJzLT5hZGRyLCBzYSwgc2FfbGVuKTsKKwkJLyoKKwkJICogTm93LCBpZiB0
aGVyZSB3YXMgYSBwb3J0IG1lbnRpb25lZCwgYXNzdXJlIHRoYXQgdGhlCisJCSAqIGZpcnN0IGFk
ZHJlc3MgaGFzIHRoYXQgcG9ydCB0byBtYWtlIHN1cmUgaXQgZmFpbHMgb3IKKwkJICogc3VjY2Vl
ZHMgY29ycmVjdGx5LgorCQkgKi8KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
CisJCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKKwkJCXN3aXRjaCAoZ2FkZHJzLT5h
ZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsKKwkJCQlzaW4tPnNpbl9wb3J0
ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilnYWRkcnMtPmFkZHI7CisJ
CQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCX0KKwkJ
fQorI2VuZGlmCisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgZmxh
Z3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgeworCQkJZnJlZShnYWRkcnMpOwor
CQkJcmV0dXJuICgtMSk7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90
KXNhICsgc2FfbGVuKTsKKyNlbmRpZgorCX0KKwlmcmVlKGdhZGRycyk7CisJcmV0dXJuICgwKTsK
K30KKworaW50Cit1c3JzY3RwX2Nvbm5lY3R4KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAg
ICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNudCwKKyAgICAg
ICAgICAgICAgICAgc2N0cF9hc3NvY190ICppZCkKK3sKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJY2hhciBidWZbU0NUUF9TVEFDS19CVUZfU0laRV07CisJaW50IGksIHJl
dCwgY250LCAqYWE7CisJY2hhciAqY3B0bzsKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmF0Owor
CXNjdHBfYXNzb2NfdCAqcF9pZDsKKwlzaXplX3QgbGVuID0gc2l6ZW9mKGludCk7CisKKwkvKiB2
YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlzdCAqLworCWlmICgoYWRkcnMgPT0gTlVM
TCkgfHwgKGFkZHJjbnQgPD0gMCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEp
OworCX0KKwlhdCA9IGFkZHJzOworCWNudCA9IDA7CisJY3B0byA9ICgoY2FkZHJfdClidWYgKyBz
aXplb2YoaW50KSk7CisJLyogdmFsaWRhdGUgYWxsIHRoZSBhZGRyZXNzZXMgYW5kIGdldCB0aGUg
c2l6ZSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsKKwkJc3dpdGNoIChhdC0+
c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9T
QV9MRU4KKwkJCWlmIChhdC0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7
CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisjZW5kaWYKKwkJ
CWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWlmIChsZW4gPiBTQ1RQX1NU
QUNLX0JVRl9TSVpFKSB7CisJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJcmV0dXJuICgtMSk7CisJ
CQl9CisJCQltZW1jcHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJ
CWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJ
CWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhdCArIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9J
TkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYgKGF0LT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgt
MSk7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQ
RUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWF0KS0+c2luNl9hZGRyKSkgeworCQkJCWxlbiAr
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCQlpZiAobGVuID4gU0NUUF9TVEFDS19C
VUZfU0laRSkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJ
fQorCQkJCWluNl9zaW42XzJfc2luKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiljcHRvLCAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWF0KTsKKwkJCQljcHRvID0gKChjYWRkcl90KWNwdG8gKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJCQl9IGVsc2UgeworCQkJCWxlbiArPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisJCQkJaWYgKGxlbiA+IFNDVFBfU1RBQ0tfQlVGX1NJWkUpIHsK
KwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQltZW1j
cHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQkJY3B0byA9ICgo
Y2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCX0KKyNlbHNl
CisJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJaWYgKGxlbiA+IFND
VFBfU1RBQ0tfQlVGX1NJWkUpIHsKKwkJCQllcnJubyA9IEVOT01FTTsKKwkJCQlyZXR1cm4gKC0x
KTsKKwkJCX0KKwkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KTsKKwkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KSk7CisjZW5kaWYKKwkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhdCArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0
OgorCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQljbnQrKzsKKwl9
CisJYWEgPSAoaW50ICopYnVmOworCSphYSA9IGNudDsKKwlyZXQgPSB1c3JzY3RwX3NldHNvY2tv
cHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9DT05ORUNUX1gsICh2b2lkICopYnVmLCAoc29ja2xl
bl90KWxlbik7CisJaWYgKChyZXQgPT0gMCkgJiYgaWQpIHsKKwkJcF9pZCA9IChzY3RwX2Fzc29j
X3QgKilidWY7CisJCSppZCA9ICpwX2lkOworCX0KKwlyZXR1cm4gKHJldCk7CisjZWxzZQorCWVy
cm5vID0gRUlOVkFMOworCXJldHVybiAoLTEpOworI2VuZGlmCit9CisKK2ludAordXNyc2N0cF9n
ZXRwYWRkcnMoc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBpZCwgc3RydWN0IHNvY2th
ZGRyICoqcmFkZHJzKQoreworCXN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcyAqYWRkcnM7CisJc3Ry
dWN0IHNvY2thZGRyICpzYTsKKwlzY3RwX2Fzc29jX3QgYXNvYzsKKwljYWRkcl90IGxpbTsKKwlz
b2NrbGVuX3Qgb3B0X2xlbjsKKwlpbnQgY250OworCisJaWYgKHJhZGRycyA9PSBOVUxMKSB7CisJ
CWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYXNvYyA9IGlkOworCW9wdF9s
ZW4gPSAoc29ja2xlbl90KXNpemVvZihzY3RwX2Fzc29jX3QpOworCWlmICh1c3JzY3RwX2dldHNv
Y2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9HRVRfUkVNT1RFX0FERFJfU0laRSwgJmFzb2Ms
ICZvcHRfbGVuKSAhPSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBzaXplIHJlcXVpcmVk
IGlzIHJldHVybmVkIGluICdhc29jJyAqLworCW9wdF9sZW4gPSAoc29ja2xlbl90KSgoc2l6ZV90
KWFzb2MgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKSk7CisJYWRkcnMgPSBjYWxs
b2MoMSwgKHNpemVfdClvcHRfbGVuKTsKKwlpZiAoYWRkcnMgPT0gTlVMTCkgeworCQllcnJubyA9
IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFkZHJzLT5zZ2V0X2Fzc29jX2lkID0gaWQ7
CisJLyogTm93IGxldHMgZ2V0IHRoZSBhcnJheSBvZiBhZGRyZXNzZXMgKi8KKwlpZiAodXNyc2N0
cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BFRVJfQUREUkVTU0VTLCBh
ZGRycywgJm9wdF9sZW4pICE9IDApIHsKKwkJZnJlZShhZGRycyk7CisJCXJldHVybiAoLTEpOwor
CX0KKwkqcmFkZHJzID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRycy0+YWRkclswXTsKKwljbnQg
PSAwOworCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRycy0+YWRkclswXTsKKwlsaW0gPSAo
Y2FkZHJfdClhZGRycyArIG9wdF9sZW47CisjaWZkZWYgSEFWRV9TQV9MRU4KKwl3aGlsZSAoKChj
YWRkcl90KXNhIDwgbGltKSAmJiAoc2EtPnNhX2xlbiA+IDApKSB7CisJCXNhID0gKHN0cnVjdCBz
b2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5zYV9sZW4pOworI2Vsc2UKKwl3aGlsZSAoKGNh
ZGRyX3Qpc2EgPCBsaW0pIHsKKwkJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCQljYXNlIEFGX0lORVQ6CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qp
c2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiko
KGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJY2FzZSBBRl9DT05OOgorCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCQlicmVhazsKKwkJZGVm
YXVsdDoKKwkJCXJldHVybiAoY250KTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJY250Kys7
CisJfQorCXJldHVybiAoY250KTsKK30KKwordm9pZAordXNyc2N0cF9mcmVlcGFkZHJzKHN0cnVj
dCBzb2NrYWRkciAqYWRkcnMpCit7CisJLyogVGFrZSBhd2F5IHRoZSBoaWRkZW4gYXNzb2NpYXRp
b24gaWQgKi8KKwl2b2lkICpmcl9hZGRyOworCisJZnJfYWRkciA9ICh2b2lkICopKChjYWRkcl90
KWFkZHJzIC0gc2l6ZW9mKHNjdHBfYXNzb2NfdCkpOworCS8qIE5vdyBmcmVlIGl0ICovCisJZnJl
ZShmcl9hZGRyKTsKK30KKworaW50Cit1c3JzY3RwX2dldGxhZGRycyhzdHJ1Y3Qgc29ja2V0ICpz
bywgc2N0cF9hc3NvY190IGlkLCBzdHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpCit7CisJc3RydWN0
IHNjdHBfZ2V0YWRkcmVzc2VzICphZGRyczsKKwljYWRkcl90IGxpbTsKKwlzdHJ1Y3Qgc29ja2Fk
ZHIgKnNhOworCXNpemVfdCBzaXplX29mX2FkZHJlc3NlczsKKwlzb2NrbGVuX3Qgb3B0X2xlbjsK
KwlpbnQgY250OworCisJaWYgKHJhZGRycyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUZBVUxUOwor
CQlyZXR1cm4gKC0xKTsKKwl9CisJc2l6ZV9vZl9hZGRyZXNzZXMgPSAwOworCW9wdF9sZW4gPSAo
c29ja2xlbl90KXNpemVvZihpbnQpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc28sIElQUFJP
VE9fU0NUUCwgU0NUUF9HRVRfTE9DQUxfQUREUl9TSVpFLCAmc2l6ZV9vZl9hZGRyZXNzZXMsICZv
cHRfbGVuKSAhPSAwKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJ
aWYgKHNpemVfb2ZfYWRkcmVzc2VzID09IDApIHsKKwkJZXJybm8gPSBFTk9UQ09OTjsKKwkJcmV0
dXJuICgtMSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KShzaXplX29mX2FkZHJlc3NlcyAr
CisJICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSkg
KworCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2Vz
KSk7CisJYWRkcnMgPSBjYWxsb2MoMSwgKHNpemVfdClvcHRfbGVuKTsKKwlpZiAoYWRkcnMgPT0g
TlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFkZHJzLT5z
Z2V0X2Fzc29jX2lkID0gaWQ7CisJLyogTm93IGxldHMgZ2V0IHRoZSBhcnJheSBvZiBhZGRyZXNz
ZXMgKi8KKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VU
X0xPQ0FMX0FERFJFU1NFUywgYWRkcnMsICZvcHRfbGVuKSAhPSAwKSB7CisJCWZyZWUoYWRkcnMp
OworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCSpyYWRkcnMgPSAoc3Ry
dWN0IHNvY2thZGRyICopJmFkZHJzLT5hZGRyWzBdOworCWNudCA9IDA7CisJc2EgPSAoc3RydWN0
IHNvY2thZGRyICopJmFkZHJzLT5hZGRyWzBdOworCWxpbSA9IChjYWRkcl90KWFkZHJzICsgb3B0
X2xlbjsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXdoaWxlICgoKGNhZGRyX3Qpc2EgPCBsaW0pICYm
IChzYS0+c2FfbGVuID4gMCkpIHsKKwkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90
KXNhICsgc2EtPnNhX2xlbik7CisjZWxzZQorCXdoaWxlICgoY2FkZHJfdClzYSA8IGxpbSkgewor
CQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoK
KwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBB
Rl9JTkVUNjoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIEFGX0NP
Tk46CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIChj
bnQpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQljbnQrKzsKKwl9CisJcmV0dXJuIChjbnQp
OworfQorCit2b2lkCit1c3JzY3RwX2ZyZWVsYWRkcnMoc3RydWN0IHNvY2thZGRyICphZGRycykK
K3sKKwkvKiBUYWtlIGF3YXkgdGhlIGhpZGRlbiBhc3NvY2lhdGlvbiBpZCAqLworCXZvaWQgKmZy
X2FkZHI7CisKKwlmcl9hZGRyID0gKHZvaWQgKikoKGNhZGRyX3QpYWRkcnMgLSBzaXplb2Yoc2N0
cF9hc3NvY190KSk7CisJLyogTm93IGZyZWUgaXQgKi8KKwlmcmVlKGZyX2FkZHIpOworfQorCisj
aWZkZWYgSU5FVAordm9pZAorc2N0cF91c2Vyc3BhY2VfaXBfb3V0cHV0KGludCAqcmVzdWx0LCBz
dHJ1Y3QgbWJ1ZiAqb19wYWssCisgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9yb3V0ZV90
ICpybywgdm9pZCAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZf
aWQpCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IG1idWYgKm1fb3JpZzsKKwlpbnQgaW92
Y250OworCWludCBzZW5kX2xlbjsKKwlpbnQgbGVuOworCWludCBzZW5kX2NvdW50OworCXN0cnVj
dCBpcCAqaXA7CisJc3RydWN0IHVkcGhkciAqdWRwOworI2lmICFkZWZpbmVkIChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQorCWludCByZXM7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0
OworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJV1NBTVNHIHdpbl9tc2df
aGRyOworCURXT1JEIHdpbl9zZW50X2xlbjsKKwlXU0FCVUYgc2VuZF9pb3ZlY1tNQVhMRU5fTUJV
Rl9DSEFJTl07CisJV1NBQlVGIHdpbmJ1ZjsKKyNlbHNlCisJc3RydWN0IGlvdmVjIHNlbmRfaW92
ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOworCXN0cnVjdCBtc2doZHIgbXNnX2hkcjsKKyNlbmRpZgor
CWludCB1c2VfdWRwX3R1bm5lbGluZzsKKworCSpyZXN1bHQgPSAwOworCisJbSA9IFNDVFBfSEVB
REVSX1RPX0NIQUlOKG9fcGFrKTsKKwltX29yaWcgPSBtOworCisJbGVuID0gc2l6ZW9mKHN0cnVj
dCBpcCk7CisJaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikgeworCQlpZiAoKG0gPSBtX3B1bGx1
cChtLCBsZW4pKSA9PSAwKSB7CisJCQlTQ1RQX1BSSU5URigiQ2FuIG5vdCBnZXQgdGhlIElQIGhl
YWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOworCQkJcmV0dXJuOworCQl9CisJfQorCWlwID0g
bXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJdXNlX3VkcF90dW5uZWxpbmcgPSAoaXAtPmlwX3AgPT0g
SVBQUk9UT19VRFApOworCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7CisJCWxlbiA9IHNpemVv
ZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQlpZiAoU0NUUF9CVUZfTEVO
KG0pIDwgbGVuKSB7CisJCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7CisJCQkJ
U0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBVRFAvSVAgaGVhZGVyIGluIHRoZSBmaXJzdCBt
YnVmLlxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAq
KTsKKwkJfQorCQl1ZHAgPSAoc3RydWN0IHVkcGhkciAqKShpcCArIDEpOworCX0gZWxzZSB7CisJ
CXVkcCA9IE5VTEw7CisJfQorCisJaWYgKCF1c2VfdWRwX3R1bm5lbGluZykgeworCQlpZiAoaXAt
PmlwX3NyYy5zX2FkZHIgPT0gSU5BRERSX0FOWSkgeworCQkJLyogVE9ETyBnZXQgYWRkciBvZiBv
dXRnb2luZyBpbnRlcmZhY2UgKi8KKwkJCVNDVFBfUFJJTlRGKCJXaHkgZGlkIHRoZSBTQ1RQIGlt
cGxlbWVudGF0aW9uIGRpZCBub3QgY2hvb3NlIGEgc291cmNlIGFkZHJlc3M/XG4iKTsKKwkJfQor
CQkvKiBUT0RPIG5lZWQgdG8gd29ycnkgYWJvdXQgcm8tPnJvX2RzdCBhcyBpbiBpcF9vdXRwdXQ/
ICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZCAoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykgfHwgKGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYg
KF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMzApKQorCQkvKiBuZWVkIHRvIHB1dCBjZXJ0YWlu
IGZpZWxkcyBpbnRvIG5ldHdvcmsgb3JkZXIgZm9yIExpbnV4ICovCisJCWlwLT5pcF9sZW4gPSBo
dG9ucyhpcC0+aXBfbGVuKTsKKyNlbmRpZgorCX0KKworCW1lbXNldCgodm9pZCAqKSZkc3QsIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlkc3Quc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisJZHN0LnNpbl9hZGRyLnNfYWRkciA9IGlwLT5pcF9kc3Quc19hZGRyOworI2lmZGVmIEhBVkVf
U0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5k
aWYKKwlpZiAodXNlX3VkcF90dW5uZWxpbmcpIHsKKwkJZHN0LnNpbl9wb3J0ID0gdWRwLT51aF9k
cG9ydDsKKwl9IGVsc2UgeworCQlkc3Quc2luX3BvcnQgPSAwOworCX0KKworCS8qIHR3ZWFrIHRo
ZSBtYnVmIGNoYWluICovCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7CisJCW1fYWRqKG0sIHNp
emVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwl9CisKKwlzZW5kX2xl
biA9IFNDVFBfSEVBREVSX0xFTihtKTsgLyogbGVuZ3RoIG9mIGVudGlyZSBwYWNrZXQgKi8KKwlz
ZW5kX2NvdW50ID0gMDsKKwlmb3IgKGlvdmNudCA9IDA7IG0gIT0gTlVMTCAmJiBpb3ZjbnQgPCBN
QVhMRU5fTUJVRl9DSEFJTjsgbSA9IG0tPm1fbmV4dCwgaW92Y250KyspIHsKKyNpZiAhZGVmaW5l
ZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmlvdl9iYXNl
ID0gKGNhZGRyX3QpbS0+bV9kYXRhOworCQlzZW5kX2lvdmVjW2lvdmNudF0uaW92X2xlbiA9IFND
VFBfQlVGX0xFTihtKTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0uaW92X2xl
bjsKKyNlbHNlCisJCXNlbmRfaW92ZWNbaW92Y250XS5idWYgPSAoY2FkZHJfdCltLT5tX2RhdGE7
CisJCXNlbmRfaW92ZWNbaW92Y250XS5sZW4gPSBTQ1RQX0JVRl9MRU4obSk7CisJCXNlbmRfY291
bnQgKz0gc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbjsKKyNlbmRpZgorCX0KKworCWlmIChtICE9IE5V
TEwpIHsKKwkJU0NUUF9QUklOVEYoIm1idWYgY2hhaW4gY291bGRuJ3QgYmUgY29waWVkIGNvbXBs
ZXRlbHlcbiIpOworCQlnb3RvIGZyZWVfbWJ1ZjsKKwl9CisKKyNpZiAhZGVmaW5lZCAoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwltc2dfaGRyLm1zZ19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAq
KSAmZHN0OworCW1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKKwltc2dfaGRyLm1zZ19pb3YgPSBzZW5kX2lvdmVjOworCW1zZ19oZHIubXNnX2lvdmxlbiA9
IGlvdmNudDsKKwltc2dfaGRyLm1zZ19jb250cm9sID0gTlVMTDsKKwltc2dfaGRyLm1zZ19jb250
cm9sbGVuID0gMDsKKwltc2dfaGRyLm1zZ19mbGFncyA9IDA7CisKKwlpZiAoKCF1c2VfdWRwX3R1
bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApICE9IC0xKSkgewor
CQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksICZt
c2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IGVycm5v
OworCQl9CisJfQorCWlmICgodXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV91ZHBzY3RwKSAhPSAtMSkpIHsKKwkJaWYgKChyZXMgPSBzZW5kbXNnKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCAmbXNnX2hkciwgTVNHX0RPTlRXQUlUKSkgIT0gc2Vu
ZF9sZW4pIHsKKwkJCSpyZXN1bHQgPSBlcnJubzsKKwkJfQorCX0KKyNlbHNlCisJd2luX21zZ19o
ZHIubmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRzdDsKKwl3aW5fbXNnX2hkci5uYW1lbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJd2luX21zZ19oZHIubHBCdWZmZXJzID0g
KExQV1NBQlVGKXNlbmRfaW92ZWM7CisJd2luX21zZ19oZHIuZHdCdWZmZXJDb3VudCA9IGlvdmNu
dDsKKwl3aW5idWYubGVuID0gMDsKKwl3aW5idWYuYnVmID0gTlVMTDsKKwl3aW5fbXNnX2hkci5D
b250cm9sID0gd2luYnVmOworCXdpbl9tc2dfaGRyLmR3RmxhZ3MgPSAwOworCisJaWYgKCghdXNl
X3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSAhPSAt
MSkpIHsKKwkJaWYgKFdTQVNlbmRUbyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwg
KExQV1NBQlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRy
LmR3RmxhZ3MsIHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5V
TEwsIE5VTEwpICE9IDApIHsKKwkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJfSBl
bHNlIGlmICh3aW5fc2VudF9sZW4gIT0gc2VuZF9sZW4pIHsKKwkJCSpyZXN1bHQgPSBXU0FHZXRM
YXN0RXJyb3IoKTsKKwkJfQorCX0KKwlpZiAoKHVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgIT0gLTEpKSB7CisJCWlmIChXU0FTZW5kVG8oU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIChMUFdTQUJVRikgc2VuZF9pb3ZlYywgaW92
Y250LCAmd2luX3NlbnRfbGVuLCB3aW5fbXNnX2hkci5kd0ZsYWdzLCB3aW5fbXNnX2hkci5uYW1l
LCAoaW50KSB3aW5fbXNnX2hkci5uYW1lbGVuLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisJCQkqcmVz
dWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCX0gZWxzZSBpZiAod2luX3NlbnRfbGVuICE9IHNl
bmRfbGVuKSB7CisJCQkqcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCX0KKwl9CisjZW5k
aWYKK2ZyZWVfbWJ1ZjoKKwlzY3RwX21fZnJlZW0obV9vcmlnKTsKK30KKyNlbmRpZgorCisjaWYg
ZGVmaW5lZCAoSU5FVDYpCit2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQoaW50ICpyZXN1
bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0Y2IsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlz
dHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqbV9vcmlnOworCWludCBpb3ZjbnQ7CisJaW50
IHNlbmRfbGVuOworCWludCBsZW47CisJaW50IHNlbmRfY291bnQ7CisJc3RydWN0IGlwNl9oZHIg
KmlwNjsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisjaWYgIWRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisJaW50IHJlczsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgZHN0Owor
I2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJV1NBTVNHIHdpbl9tc2dfaGRy
OworCURXT1JEIHdpbl9zZW50X2xlbjsKKwlXU0FCVUYgc2VuZF9pb3ZlY1tNQVhMRU5fTUJVRl9D
SEFJTl07CisJV1NBQlVGIHdpbmJ1ZjsKKyNlbHNlCisJc3RydWN0IGlvdmVjIHNlbmRfaW92ZWNb
TUFYTEVOX01CVUZfQ0hBSU5dOworCXN0cnVjdCBtc2doZHIgbXNnX2hkcjsKKyNlbmRpZgorCWlu
dCB1c2VfdWRwX3R1bm5lbGluZzsKKworCSpyZXN1bHQgPSAwOworCisJbSA9IFNDVFBfSEVBREVS
X1RPX0NIQUlOKG9fcGFrKTsKKwltX29yaWcgPSBtOworCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBp
cDZfaGRyKTsKKworCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsKKwkJaWYgKChtID0gbV9w
dWxsdXAobSwgbGVuKSkgPT0gMCkgeworCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBJ
UCBoZWFkZXIgaW4gdGhlIGZpcnN0IG1idWYuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwor
CWlwNiA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7CisJdXNlX3VkcF90dW5uZWxpbmcgPSAo
aXA2LT5pcDZfbnh0ID09IElQUFJPVE9fVURQKTsKKworCWlmICh1c2VfdWRwX3R1bm5lbGluZykg
eworCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
OworCQlpZiAoU0NUUF9CVUZfTEVOKG0pIDwgbGVuKSB7CisJCQlpZiAoKG0gPSBtX3B1bGx1cCht
LCBsZW4pKSA9PSAwKSB7CisJCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBVRFAvSVAg
aGVhZGVyIGluIHRoZSBmaXJzdCBtYnVmLlxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaXA2
ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJfQorCQl1ZHAgPSAoc3RydWN0IHVkcGhk
ciAqKShpcDYgKyAxKTsKKwl9IGVsc2UgeworCQl1ZHAgPSBOVUxMOworCX0KKworCWlmICghdXNl
X3VkcF90dW5uZWxpbmcpIHsKKwkJaWYgKGlwNi0+aXA2X3NyYy5zNl9hZGRyID09IGluNmFkZHJf
YW55LnM2X2FkZHIpIHsKKwkJCS8qIFRPRE8gZ2V0IGFkZHIgb2Ygb3V0Z29pbmcgaW50ZXJmYWNl
ICovCisJCQlTQ1RQX1BSSU5URigiV2h5IGRpZCB0aGUgU0NUUCBpbXBsZW1lbnRhdGlvbiBkaWQg
bm90IGNob29zZSBhIHNvdXJjZSBhZGRyZXNzP1xuIik7CisJCX0KKwkJLyogVE9ETyBuZWVkIHRv
IHdvcnJ5IGFib3V0IHJvLT5yb19kc3QgYXMgaW4gaXBfb3V0cHV0PyAqLworCX0KKworCW1lbXNl
dCgodm9pZCAqKSZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJZHN0LnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJZHN0LnNpbjZfYWRkciA9IGlwNi0+aXA2X2RzdDsKKyNp
ZmRlZiBIQVZFX1NJTjZfTEVOCisJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOworI2VuZGlmCisKKwlpZiAodXNlX3VkcF90dW5uZWxpbmcpIHsKKwkJZHN0LnNpbjZf
cG9ydCA9IHVkcC0+dWhfZHBvcnQ7CisJfSBlbHNlIHsKKwkJZHN0LnNpbjZfcG9ydCA9IDA7CisJ
fQorCisJLyogdHdlYWsgdGhlIG1idWYgY2hhaW4gKi8KKwlpZiAodXNlX3VkcF90dW5uZWxpbmcp
IHsKKwkJbV9hZGoobSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIHNpemVvZihzdHJ1Y3QgdWRw
aGRyKSk7CisJfSBlbHNlIHsKKwkgIG1fYWRqKG0sIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwor
CX0KKworCXNlbmRfbGVuID0gU0NUUF9IRUFERVJfTEVOKG0pOyAvKiBsZW5ndGggb2YgZW50aXJl
IHBhY2tldCAqLworCXNlbmRfY291bnQgPSAwOworCWZvciAoaW92Y250ID0gMDsgbSAhPSBOVUxM
ICYmIGlvdmNudCA8IE1BWExFTl9NQlVGX0NIQUlOOyBtID0gbS0+bV9uZXh0LCBpb3ZjbnQrKykg
eworI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlzZW5kX2lvdmVjW2lv
dmNudF0uaW92X2Jhc2UgPSAoY2FkZHJfdCltLT5tX2RhdGE7CisJCXNlbmRfaW92ZWNbaW92Y250
XS5pb3ZfbGVuID0gU0NUUF9CVUZfTEVOKG0pOworCQlzZW5kX2NvdW50ICs9IHNlbmRfaW92ZWNb
aW92Y250XS5pb3ZfbGVuOworI2Vsc2UKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmJ1ZiA9IChjYWRk
cl90KW0tPm1fZGF0YTsKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbiA9IFNDVFBfQlVGX0xFTiht
KTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0ubGVuOworI2VuZGlmCisJfQor
CWlmIChtICE9IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIm1idWYgY2hhaW4gY291bGRuJ3QgYmUg
Y29waWVkIGNvbXBsZXRlbHlcbiIpOworCQlnb3RvIGZyZWVfbWJ1ZjsKKwl9CisKKyNpZiAhZGVm
aW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwltc2dfaGRyLm1zZ19uYW1lID0gKHN0cnVj
dCBzb2NrYWRkciAqKSAmZHN0OworCW1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7CisJbXNnX2hkci5tc2dfaW92ID0gc2VuZF9pb3ZlYzsKKwltc2dfaGRy
Lm1zZ19pb3ZsZW4gPSBpb3ZjbnQ7CisJbXNnX2hkci5tc2dfY29udHJvbCA9IE5VTEw7CisJbXNn
X2hkci5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnX2hkci5tc2dfZmxhZ3MgPSAwOworCisJaWYg
KCghdXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3Rw
NikgIT0gLTEpKSB7CisJCWlmICgocmVzID0gc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwNiksICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgeworCQkJ
KnJlc3VsdCA9IGVycm5vOworCQl9CisJfQorCWlmICgodXNlX3VkcF90dW5uZWxpbmcpICYmIChT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpKSB7CisJCWlmICgocmVzID0g
c2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksICZtc2dfaGRyLCBNU0df
RE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IGVycm5vOworCQl9CisJfQor
I2Vsc2UKKwl3aW5fbXNnX2hkci5uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmZHN0OworCXdp
bl9tc2dfaGRyLm5hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJd2luX21z
Z19oZHIubHBCdWZmZXJzID0gKExQV1NBQlVGKXNlbmRfaW92ZWM7CisJd2luX21zZ19oZHIuZHdC
dWZmZXJDb3VudCA9IGlvdmNudDsKKwl3aW5idWYubGVuID0gMDsKKwl3aW5idWYuYnVmID0gTlVM
TDsKKwl3aW5fbXNnX2hkci5Db250cm9sID0gd2luYnVmOworCXdpbl9tc2dfaGRyLmR3RmxhZ3Mg
PSAwOworCisJaWYgKCghdXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwNikgIT0gLTEpKSB7CisJCWlmIChXU0FTZW5kVG8oU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cDYpLCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9z
ZW50X2xlbiwgd2luX21zZ19oZHIuZHdGbGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2lu
X21zZ19oZHIubmFtZWxlbiwgTlVMTCwgTlVMTCkgIT0gMCkgeworCQkJKnJlc3VsdCA9IFdTQUdl
dExhc3RFcnJvcigpOworCQl9IGVsc2UgaWYgKHdpbl9zZW50X2xlbiAhPSBzZW5kX2xlbikgewor
CQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworCQl9CisJfQorCWlmICgodXNlX3VkcF90
dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpKSB7
CisJCWlmIChXU0FTZW5kVG8oU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpLCAoTFBX
U0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9zZW50X2xlbiwgd2luX21zZ19oZHIuZHdG
bGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2luX21zZ19oZHIubmFtZWxlbiwgTlVMTCwg
TlVMTCkgIT0gMCkgeworCQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworCQl9IGVsc2Ug
aWYgKHdpbl9zZW50X2xlbiAhPSBzZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IFdTQUdldExhc3RF
cnJvcigpOworCQl9CisJfQorI2VuZGlmCitmcmVlX21idWY6CisJc2N0cF9tX2ZyZWVtKG1fb3Jp
Zyk7Cit9CisjZW5kaWYKKwordm9pZAordXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKHZvaWQgKmFk
ZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisKKwltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSAwOwor
CXNjb25uLnNjb25uX2FkZHIgPSBhZGRyOworCXNjdHBfYWRkX2FkZHJfdG9fdnJmKFNDVFBfREVG
QVVMVF9WUkZJRCwKKwkgICAgICAgICAgICAgICAgICAgICBOVUxMLAorCSAgICAgICAgICAgICAg
ICAgICAgIDB4ZmZmZmZmZmYsCisJICAgICAgICAgICAgICAgICAgICAgMCwKKwkgICAgICAgICAg
ICAgICAgICAgICAiY29ubiIsCisJICAgICAgICAgICAgICAgICAgICAgTlVMTCwKKwkgICAgICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLAorCSAgICAgICAgICAgICAg
ICAgICAgIDAsCisJICAgICAgICAgICAgICAgICAgICAgMCk7Cit9CisKK3ZvaWQKK3VzcnNjdHBf
ZGVyZWdpc3Rlcl9hZGRyZXNzKHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4g
c2Nvbm47CisKKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
KTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVO
CisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRp
ZgorCXNjb25uLnNjb25uX3BvcnQgPSAwOworCXNjb25uLnNjb25uX2FkZHIgPSBhZGRyOworCXNj
dHBfZGVsX2FkZHJfZnJvbV92cmYoU0NUUF9ERUZBVUxUX1ZSRklELAorCSAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwKKwkgICAgICAgICAgICAgICAgICAg
ICAgIDB4ZmZmZmZmZmYsCisJICAgICAgICAgICAgICAgICAgICAgICAiY29ubiIpOworfQorCisj
ZGVmaW5lIFBSRUFNQkxFX0ZPUk1BVCAiXG4lYyAlMDJkOiUwMmQ6JTAyZC4lMDZsZCAiCisjZGVm
aW5lIFBSRUFNQkxFX0xFTkdUSCAxOQorI2RlZmluZSBIRUFERVIgIjAwMDAgIgorI2RlZmluZSBU
UkFJTEVSICIjIFNDVFBfUEFDS0VUXG4iCisKK2NoYXIgKgordXNyc2N0cF9kdW1wcGFja2V0KGNv
bnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IG91dGJvdW5kKQoreworCXNpemVfdCBpLCBw
b3M7CisJY2hhciAqZHVtcF9idWYsICpwYWNrZXQ7CisJc3RydWN0IHRtIHQ7CisjaWZkZWYgX1dJ
TjMyCisJc3RydWN0IHRpbWViIHRiOworI2Vsc2UKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKwl0aW1l
X3Qgc2VjOworI2VuZGlmCisKKwlpZiAoKGxlbiA9PSAwKSB8fCAoYnVmID09IE5VTEwpKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCWlmICgoZHVtcF9idWYgPSBtYWxsb2MoUFJFQU1CTEVfTEVO
R1RIICsgc3RybGVuKEhFQURFUikgKyAzICogbGVuICsgc3RybGVuKFRSQUlMRVIpICsgMSkpID09
IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJcG9zID0gMDsKKyNpZmRlZiBfV0lOMzIK
KwlmdGltZSgmdGIpOworCWxvY2FsdGltZV9zKCZ0LCAmdGIudGltZSk7CisJX3NucHJpbnRmX3Mo
ZHVtcF9idWYsIFBSRUFNQkxFX0xFTkdUSCArIDEsIFBSRUFNQkxFX0xFTkdUSCwgUFJFQU1CTEVf
Rk9STUFULAorCSAgICAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAorCSAgICAgICAgICAg
IHQudG1faG91ciwgdC50bV9taW4sIHQudG1fc2VjLCAobG9uZykoMTAwMCAqIHRiLm1pbGxpdG0p
KTsKKyNlbHNlCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJc2VjID0gKHRpbWVfdCl0di50
dl9zZWM7CisJbG9jYWx0aW1lX3IoKGNvbnN0IHRpbWVfdCAqKSZzZWMsICZ0KTsKKwlzbnByaW50
ZihkdW1wX2J1ZiwgUFJFQU1CTEVfTEVOR1RIICsgMSwgUFJFQU1CTEVfRk9STUFULAorCSAgICAg
ICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAorCSAgICAgICAgIHQudG1faG91ciwgdC50bV9taW4s
IHQudG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKKyNlbmRpZgorCXBvcyArPSBQUkVBTUJMRV9M
RU5HVEg7CisjaWZkZWYgX1dJTjMyCisJc3RybmNweV9zKGR1bXBfYnVmICsgcG9zLCBzdHJsZW4o
SEVBREVSKSArIDEsIEhFQURFUiwgc3RybGVuKEhFQURFUikpOworI2Vsc2UKKwlzdHJjcHkoZHVt
cF9idWYgKyBwb3MsIEhFQURFUik7CisjZW5kaWYKKwlwb3MgKz0gc3RybGVuKEhFQURFUik7CisJ
cGFja2V0ID0gKGNoYXIgKilidWY7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCXVp
bnQ4X3QgYnl0ZSwgbG93LCBoaWdoOworCisJCWJ5dGUgPSAodWludDhfdClwYWNrZXRbaV07CisJ
CWhpZ2ggPSBieXRlIC8gMTY7CisJCWxvdyA9IGJ5dGUgJSAxNjsKKwkJZHVtcF9idWZbcG9zKytd
ID0gaGlnaCA8IDEwID8gJzAnICsgaGlnaCA6ICdhJyArIChoaWdoIC0gMTApOworCQlkdW1wX2J1
Zltwb3MrK10gPSBsb3cgPCAxMCA/ICcwJyArIGxvdyA6ICdhJyArIChsb3cgLSAxMCk7CisJCWR1
bXBfYnVmW3BvcysrXSA9ICcgJzsKKwl9CisjaWZkZWYgX1dJTjMyCisJc3RybmNweV9zKGR1bXBf
YnVmICsgcG9zLCBzdHJsZW4oVFJBSUxFUikgKyAxLCBUUkFJTEVSLCBzdHJsZW4oVFJBSUxFUikp
OworI2Vsc2UKKwlzdHJjcHkoZHVtcF9idWYgKyBwb3MsIFRSQUlMRVIpOworI2VuZGlmCisJcG9z
ICs9IHN0cmxlbihUUkFJTEVSKTsKKwlkdW1wX2J1Zltwb3MrK10gPSAnXDAnOworCXJldHVybiAo
ZHVtcF9idWYpOworfQorCit2b2lkCit1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGNoYXIgKmJ1ZikK
K3sKKwlmcmVlKGJ1Zik7Cit9CisKK3ZvaWQKK3VzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2Fk
KHZvaWQpCit7CisJU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9IDE7Cit9CisKK3Zv
aWQKK3VzcnNjdHBfZGlzYWJsZV9jcmMzMmNfb2ZmbG9hZCh2b2lkKQoreworCVNDVFBfQkFTRV9W
QVIoY3JjMzJjX29mZmxvYWRlZCkgPSAwOworfQorCisvKiBDb21wdXRlIHRoZSBDUkMzMkMgaW4g
bmV0d29yayBieXRlIG9yZGVyICovCit1aW50MzJfdAordXNyc2N0cF9jcmMzMmModm9pZCAqYnVm
ZmVyLCBzaXplX3QgbGVuZ3RoKQoreworCXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOworCisJ
YmFzZSA9IGNhbGN1bGF0ZV9jcmMzMmMoMHhmZmZmZmZmZiwgKHVuc2lnbmVkIGNoYXIgKilidWZm
ZXIsICh1bnNpZ25lZCBpbnQpIGxlbmd0aCk7CisJYmFzZSA9IHNjdHBfZmluYWxpemVfY3JjMzJj
KGJhc2UpOworCXJldHVybiAoYmFzZSk7Cit9CisKK3ZvaWQKK3VzcnNjdHBfY29ubmlucHV0KHZv
aWQgKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCBlY25f
Yml0cykKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzcmMsIGRzdDsKKwlzdHJ1Y3QgbWJ1ZiAq
bTsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2g7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCisJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOworCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVI2NChzY3Rwc19pbnBhY2tldHMpOworCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKTsKKwlzcmMuc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZF
X1NDT05OX0xFTgorCXNyYy5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
OworI2VuZGlmCisJc3JjLnNjb25uX2FkZHIgPSBhZGRyOworCW1lbXNldCgmZHN0LCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlkc3Quc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsK
KyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCWRzdC5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pOworI2VuZGlmCisJZHN0LnNjb25uX2FkZHIgPSBhZGRyOworCWlmICgobSA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZygodW5zaWduZWQgaW50KWxlbmd0aCwgMSwgTV9OT1dBSVQs
IDAsIE1UX0RBVEEpKSA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJbV9jb3B5YmFjayhtLCAw
LCAoaW50KWxlbmd0aCwgKGNhZGRyX3QpYnVmZmVyKTsKKwlpZiAoU0NUUF9CVUZfTEVOKG0pIDwg
KGludCkoc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hk
cikpKSB7CisJCWlmICgobSA9IG1fcHVsbHVwKG0sIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSkgPT0gTlVMTCkgeworCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfaGRyb3BzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlzaCA9IG10b2QobSwgc3Ry
dWN0IHNjdHBoZHIgKik7OworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90
KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJc3JjLnNjb25uX3BvcnQgPSBzaC0+c3Jj
X3BvcnQ7CisJZHN0LnNjb25uX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OworCXNjdHBfY29tbW9uX2lu
cHV0X3Byb2Nlc3NpbmcoJm0sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkciksIChpbnQpbGVuZ3Ro
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0gMSA/IDAgOiAx
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNuX2JpdHMsCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIDApOworCWlmIChtKSB7CisJCXNj
dHBfbV9mcmVlbShtKTsKKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5lIFVTUlNDVFBfVFVOQUJM
RV9TRVRfREVGKF9fZmllbGQsIF9fcHJlZml4KSAgIFwKK2ludCB1c3JzY3RwX3R1bmFibGVfc2V0
XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKSAgXAoreyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCh2YWx1ZSA8IF9fcHJlZml4IyNf
TUlOKSB8fCAgICAgICAgICAgICAgXAorCSAgICAodmFsdWUgPiBfX3ByZWZpeCMjX01BWCkpIHsg
ICAgICAgICAgICAgIFwKKwkJZXJybm8gPSBFSU5WQUw7ICAgICAgICAgICAgICAgICAgICAgIFwK
KwkJcmV0dXJuICgtMSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IGVsc2UgeyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCVNDVFBfQkFTRV9TWVNDVEwoX19m
aWVsZCkgPSB2YWx1ZTsgICBcCisJCXJldHVybiAoMCk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQor
CitVU1JTQ1RQX1RVTkFCTEVfU0VUX0RFRihzY3RwX2hhc2h0YmxzaXplLCBTQ1RQQ1RMX1RDQkhB
U0hTSVpFKQorVVNSU0NUUF9UVU5BQkxFX1NFVF9ERUYoc2N0cF9wY2J0YmxzaXplLCBTQ1RQQ1RM
X1BDQkhBU0hTSVpFKQorVVNSU0NUUF9UVU5BQkxFX1NFVF9ERUYoc2N0cF9jaHVua3NjYWxlLCBT
Q1RQQ1RMX0NIVU5LU0NBTEUpCisKKyNkZWZpbmUgVVNSU0NUUF9TWVNDVExfU0VUX0RFRihfX2Zp
ZWxkLCBfX3ByZWZpeCkgICAgXAoraW50IHVzcnNjdHBfc3lzY3RsX3NldF8gIyMgX19maWVsZCh1
aW50MzJfdCB2YWx1ZSkgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKwlpZiAoKHZhbHVlIDwgX19wcmVmaXgjI19NSU4pIHx8ICAgICAg
ICAgICAgICBcCisJICAgICh2YWx1ZSA+IF9fcHJlZml4IyNfTUFYKSkgeyAgICAgICAgICAgICAg
XAorCQllcnJubyA9IEVJTlZBTDsgICAgICAgICAgICAgICAgICAgICAgXAorCQlyZXR1cm4gKC0x
KTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwkJU0NUUF9CQVNFX1NZU0NUTChfX2ZpZWxkKSA9IHZhbHVl
OyAgIFwKKwkJcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKyNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwdXNoCisj
cHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdHlwZS1saW1pdHMiCisjZW5kaWYKK1VT
UlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9zZW5kc3BhY2UsIFNDVFBDVExfTUFYREdSQU0pCitV
U1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcmVjdnNwYWNlLCBTQ1RQQ1RMX1JFQ1ZTUEFDRSkK
K1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hdXRvX2FzY29uZiwgU0NUUENUTF9BVVRPQVND
T05GKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2Vjbl9lbmFibGUsIFNDVFBDVExfRUNO
X0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wcl9lbmFibGUsIFNDVFBDVExf
UFJfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2F1dGhfZW5hYmxlLCBTQ1RQ
Q1RMX0FVVEhfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2FzY29uZl9lbmFi
bGUsIFNDVFBDVExfQVNDT05GX0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9y
ZWNvbmZpZ19lbmFibGUsIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX25yc2Fja19lbmFibGUsIFNDVFBDVExfTlJTQUNLX0VOQUJMRSkKK1VTUlND
VFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wa3Rkcm9wX2VuYWJsZSwgU0NUUENUTF9QS1REUk9QX0VO
QUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrLCBT
Q1RQQ1RMX0xPT1BCQUNLX05PQ1NVTSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wZWVy
X2NodW5rX29oLCBTQ1RQQ1RMX1BFRVJfQ0hLT0gpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfbWF4X2J1cnN0X2RlZmF1bHQsIFNDVFBDVExfTUFYQlVSU1QpCitVU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSwgU0NUUENUTF9NQVhDSFVOS1MpCitVU1JT
Q1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWluX3NwbGl0X3BvaW50LCBTQ1RQQ1RMX01JTl9TUExJ
VF9QT0lOVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWxheWVkX3NhY2tfdGltZV9k
ZWZhdWx0LCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FKQorVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX3NhY2tfZnJlcV9kZWZhdWx0LCBTQ1RQQ1RMX1NBQ0tfRlJFUSkKK1VTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0LCBTQ1RQQ1RMX1NZU19SRVNP
VVJDRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCwg
U0NUUENUTF9BU09DX1JFU09VUkNFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2hlYXJ0
YmVhdF9pbnRlcnZhbF9kZWZhdWx0LCBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTCkKK1VTUlND
VFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCwgU0NUUENUTF9Q
TVRVX1JBSVNFX1RJTUUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfc2h1dGRvd25fZ3Vh
cmRfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUUpCitVU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQsIFNDVFBDVExfU0VDUkVU
X0xJRkVUSU1FKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0b19tYXhfZGVmYXVsdCwg
U0NUUENUTF9SVE9fTUFYKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0b19taW5fZGVm
YXVsdCwgU0NUUENUTF9SVE9fTUlOKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0b19p
bml0aWFsX2RlZmF1bHQsIFNDVFBDVExfUlRPX0lOSVRJQUwpCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVE9fTUFYKQorVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQsIFNDVFBD
VExfVkFMSURfQ09PS0lFX0xJRkUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaW5pdF9y
dHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVFhfTUFYKQorVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCwgU0NUUENUTF9BU1NPQ19SVFhfTUFYKQor
VVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0LCBTQ1RQQ1RM
X1BBVEhfUlRYX01BWCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hZGRfbW9yZV90aHJl
c2hvbGQsIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENUTF9JTkNPTUlOR19TVFJF
QU1TKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25yX291dGdvaW5nX3N0cmVhbXNfZGVm
YXVsdCwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX2NtdF9vbl9vZmYsIFNDVFBDVExfQ01UX09OX09GRikKK1VTUlNDVFBfU1lTQ1RMX1NFVF9E
RUYoc2N0cF9jbXRfdXNlX2RhYywgU0NUUENUTF9DTVRfVVNFX0RBQykKK1VTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCwgU0NUUENUTF9DV05EX01BWEJV
UlNUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25hdF9mcmllbmRseSwgU0NUUENUTF9O
QVRfRlJJRU5ETFkpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfTDJfYWJjX3ZhcmlhYmxl
LCBTQ1RQQ1RMX0FCQ19MX1ZBUikKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9tYnVmX3Ro
cmVzaG9sZF9jb3VudCwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGUykKK1VTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF9kb19kcmFpbiwgU0NUUENUTF9ET19TQ1RQX0RSQUlOKQorVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX2hiX21heGJ1cnN0LCBTQ1RQQ1RMX0hCX01BWF9CVVJTVCkKK1VT
UlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCwg
U0NUUENUTF9BQk9SVF9BVF9MSU1JVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9taW5f
cmVzaWR1YWwsIFNDVFBDVExfTUlOX1JFU0lEVUFMKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX21heF9yZXRyYW5fY2h1bmssIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOSykKK1VTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9sb2dnaW5nX2xldmVsLCBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUwp
CitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUsIFNDVFBDVExf
REVGQVVMVF9DQ19NT0RVTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVmYXVsdF9m
cmFnX2ludGVybGVhdmUsIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkUpCitVU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfbW9iaWxpdHlfYmFzZSwgU0NUUENUTF9NT0JJTElUWV9CQVNF
KQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmLCBTQ1RQ
Q1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2lu
aXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5LCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUUykKK1VT
UlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQsIFNDVFBDVExfVURQ
X1RVTk5FTElOR19QT1JUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2VuYWJsZV9zYWNr
X2ltbWVkaWF0ZWx5LCBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFKQorVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX3Z0YWdfdGltZV93YWl0LCBTQ1RQQ1RMX1RJTUVfV0FJVCkKK1VT
UlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ibGFja2hvbGUsIFNDVFBDVExfQkxBQ0tIT0xFKQor
VVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2RpYWdfaW5mb19jb2RlLCBTQ1RQQ1RMX0RJQUdf
SU5GT19DT0RFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2ZyX21heF9idXJzdF9kZWZh
dWx0LCBTQ1RQQ1RMX0ZSTUFYQlVSU1QpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcGF0
aF9wZl90aHJlc2hvbGQsIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTEQpCitVU1JTQ1RQX1NZU0NU
TF9TRVRfREVGKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUsIFNDVFBDVExfREVGQVVMVF9TU19NT0RV
TEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0dmFyX2J3LCBTQ1RQQ1RMX1JUVFZB
Ul9CVykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ydHR2YXJfcnR0LCBTQ1RQQ1RMX1JU
VFZBUl9SVFQpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0dmFyX2VxcmV0LCBTQ1RQ
Q1RMX1JUVFZBUl9FUVJFVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9zdGVhZHlfc3Rl
cCwgU0NUUENUTF9SVFRWQVJfU1RFQURZUykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF91
c2VfZGNjY19lY24sIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ04pCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfYnVmZmVyX3NwbGl0dGluZywgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HKQorVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2luaXRpYWxfY3duZCwgU0NUUENUTF9JTklUSUFMX0NX
TkQpCisjaWZkZWYgU0NUUF9ERUJVRworVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2RlYnVn
X29uLCBTQ1RQQ1RMX0RFQlVHKQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI2VuZGlmCisKKyNkZWZpbmUg
VVNSU0NUUF9TWVNDVExfR0VUX0RFRihfX2ZpZWxkKSBcCit1aW50MzJfdCB1c3JzY3RwX3N5c2N0
bF9nZXRfICMjIF9fZmllbGQodm9pZCkgeyBcCisJcmV0dXJuIFNDVFBfQkFTRV9TWVNDVEwoX19m
aWVsZCk7IFwKK30KKworVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3NlbmRzcGFjZSkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9yZWN2c3BhY2UpCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfYXV0b19hc2NvbmYpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbXVsdGlw
bGVfYXNjb25mcykKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9lY25fZW5hYmxlKQorVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3ByX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9hdXRoX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hc2NvbmZf
ZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3JlY29uZmlnX2VuYWJsZSkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ucnNhY2tfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExf
R0VUX0RFRihzY3RwX3BrdGRyb3BfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X25vX2NzdW1fb25fbG9vcGJhY2spCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcGVlcl9j
aHVua19vaCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCkK
K1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX2hhc2h0YmxzaXplKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX3BjYnRibHNpemUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWluX3NwbGl0
X3BvaW50KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2NodW5rc2NhbGUpCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCkKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3No
dXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9z
ZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydG9f
bWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcnRvX21pbl9kZWZhdWx0
KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCkKK1VTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBf
YWRkX21vcmVfdGhyZXNob2xkKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX25yX2luY29t
aW5nX3N0cmVhbXNfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ucl9vdXRn
b2luZ19zdHJlYW1zX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfY210X29u
X29mZikKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9jbXRfdXNlX2RhYykKK1VTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCkKK1VTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9uYXRfZnJpZW5kbHkpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNj
dHBfTDJfYWJjX3ZhcmlhYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX21idWZfdGhy
ZXNob2xkX2NvdW50KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RvX2RyYWluKQorVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2hiX21heGJ1cnN0KQorVVNSU0NUUF9TWVNDVExfR0VU
X0RFRihzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0KQorVVNSU0NUUF9TWVNDVExf
R0VUX0RFRihzY3RwX21pbl9yZXNpZHVhbCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9t
YXhfcmV0cmFuX2NodW5rKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2xvZ2dpbmdfbGV2
ZWwpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfbW9iaWxpdHlfYmFzZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZikKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0
cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0
cF91ZHBfdHVubmVsaW5nX3BvcnQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZW5hYmxl
X3NhY2tfaW1tZWRpYXRlbHkpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdnRhZ190aW1l
X3dhaXQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYmxhY2tob2xlKQorVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX2RpYWdfaW5mb19jb2RlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X3BhdGhfcGZfdGhyZXNob2xkKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlZmF1bHRf
c3NfbW9kdWxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0dHZhcl9idykKK1VTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfcnR0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX3J0dHZhcl9lcXJldCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9zdGVhZHlf
c3RlcCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF91c2VfZGNjY19lY24pCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfYnVmZmVyX3NwbGl0dGluZykKK1VTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9pbml0aWFsX2N3bmQpCisjaWZkZWYgU0NUUF9ERUJVRworVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX2RlYnVnX29uKQorI2VuZGlmCisKK3ZvaWQgdXNyc2N0cF9nZXRfc3Rh
dChzdHJ1Y3Qgc2N0cHN0YXQgKnN0YXQpCit7CisJKnN0YXQgPSBTQ1RQX0JBU0VfU1RBVFM7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZmZjODI3MGVmZGE0NmY4YmNjOTllOWI1MTg0MjY1ZjA2
OGYyOWM5NCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tldHZhci5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaApAQCAtMCwwICsxLDg2
MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTAsIDE5OTMKKyAqCVRo
ZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0
eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQor
ICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8KKworLyogX19V
c2Vyc3BhY2VfXyB2ZXJzaW9uIG9mIDxzeXMvc29ja2V0dmFyLmg+IGdvZXMgaGVyZS4qLworCisj
aWZuZGVmIF9VU0VSX1NPQ0tFVFZBUl9IXworI2RlZmluZSBfVVNFUl9TT0NLRVRWQVJfSF8KKwor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKQorI2luY2x1ZGUgPHN5cy90eXBlcy5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qICNpbmNsdWRlIDxzeXMvc2VsaW5m
by5oPiAqLyAvKl9fVXNlcnNwYWNlX18gYWx0ZXJuYXRpdmU/Ki8JLyogZm9yIHN0cnVjdCBzZWxp
bmZvICovCisvKiAjaW5jbHVkZSA8c3lzL19sb2NrLmg+ICB3YXMgMCBieXRlIGZpbGUgKi8KKy8q
ICNpbmNsdWRlIDxzeXMvX211dGV4Lmg+IHdhcyAwIGJ5dGUgZmlsZSAqLworLyogI2luY2x1ZGUg
PHN5cy9fc3guaD4gKi8gLypfX1VzZXJzcGFjZV9fIGFsdGVybmF0aXZlPyovCisjaWYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19G
cmVlQlNEKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpICYmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wpCisj
aW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisjZGVmaW5lIFNPQ0tfTUFYQUREUkxFTiAyNTUK
KyNpZiAhZGVmaW5lZChNU0dfTk9USUZJQ0FUSU9OKQorI2RlZmluZSBNU0dfTk9USUZJQ0FUSU9O
IDB4MjAwMCAgICAgICAgIC8qIFNDVFAgbm90aWZpY2F0aW9uICovCisjZW5kaWYKKyNkZWZpbmUg
U0NUUF9TT19MSU5HRVIgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX1NPX0FDQ0VQVENPTk4gMHgw
MDAyCisjZGVmaW5lIFNTX0NBTlRSQ1ZNT1JFIDB4MDIwCisjZGVmaW5lIFNTX0NBTlRTRU5ETU9S
RSAweDAxMAorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVC
U0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgfHwgZGVmaW5lZCAoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQorI2RlZmlu
ZSBVSU9fTUFYSU9WIDEwMjQKKyNkZWZpbmUgRVJFU1RBUlQgKC0xKQorI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X05ldEJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkKK2VudW0JdWlvX3J3
IHsgVUlPX1JFQUQsIFVJT19XUklURSB9OworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19OZXRCU0QpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09wZW5CU0QpCisvKiBT
ZWdtZW50IGZsYWcgdmFsdWVzLiAqLworZW51bSB1aW9fc2VnIHsKKwlVSU9fVVNFUlNQQUNFLAkJ
LyogZnJvbSB1c2VyIGRhdGEgc3BhY2UgKi8KKwlVSU9fU1lTU1BBQ0UJCS8qIGZyb20gc3lzdGVt
IHNwYWNlICovCit9OworI2VuZGlmCisKK3N0cnVjdCBwcm9jIHsKKyAgICBpbnQgc3R1YjsgLyog
c3RydWN0IHByb2MgaXMgYSBkdW1teSBmb3IgX19Vc2Vyc3BhY2VfXyAqLworfTsKKworTUFMTE9D
X0RFQ0xBUkUoTV9BQ0NGKTsKK01BTExPQ19ERUNMQVJFKE1fUENCKTsKK01BTExPQ19ERUNMQVJF
KE1fU09OQU1FKTsKKworLyogX19Vc2Vyc3BhY2VfXyBBcmUgdGhlc2UgYWxsIHRoZSBmaWVsZHMg
d2UgbmVlZD8KKyAqIFJlbW92aW5nIHN0cnVjdCB0aHJlYWQgKnVpb190ZDsgICAgb3duZXIgZmll
bGQKKyovCitzdHJ1Y3QgdWlvIHsKKyAgICBzdHJ1Y3QJaW92ZWMgKnVpb19pb3Y7CQkvKiBzY2F0
dGVyL2dhdGhlciBsaXN0ICovCisgICAgaW50CQl1aW9faW92Y250OwkJLyogbGVuZ3RoIG9mIHNj
YXR0ZXIvZ2F0aGVyIGxpc3QgKi8KKyAgICBvZmZfdAl1aW9fb2Zmc2V0OwkJLyogb2Zmc2V0IGlu
IHRhcmdldCBvYmplY3QgKi8KKyAgICBzc2l6ZV90IAl1aW9fcmVzaWQ7CQkvKiByZW1haW5pbmcg
Ynl0ZXMgdG8gcHJvY2VzcyAqLworICAgIGVudW0JdWlvX3NlZyB1aW9fc2VnZmxnOwkvKiBhZGRy
ZXNzIHNwYWNlICovCisgICAgZW51bQl1aW9fcncgdWlvX3J3OwkJLyogb3BlcmF0aW9uICovCit9
OworCisKKy8qIF9fVXNlcnNwYWNlX18gKi8KKworLyoKKyAqIEtlcm5lbCBzdHJ1Y3R1cmUgcGVy
IHNvY2tldC4KKyAqIENvbnRhaW5zIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVyIHF1ZXVlcywKKyAq
IGhhbmRsZSBvbiBwcm90b2NvbCBhbmQgcG9pbnRlciB0byBwcm90b2NvbAorICogcHJpdmF0ZSBk
YXRhIGFuZCBlcnJvciBpbmZvcm1hdGlvbi4KKyAqLworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCisjZGVmaW5lIEFGX1JPVVRFICAxNwordHlwZWRlZiBfX2ludDMyIHBpZF90
OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpZF90OworZW51bSBzaWdUeXBlIHsKKwlTSUdO
QUwgPSAwLAorCUJST0FEQ0FTVCA9IDEsCisJTUFYX0VWRU5UUyA9IDIKK307CisjZW5kaWYKKwor
LyotCisgKiBMb2NraW5nIGtleSB0byBzdHJ1Y3Qgc29ja2V0OgorICogKGEpIGNvbnN0YW50IGFm
dGVyIGFsbG9jYXRpb24sIG5vIGxvY2tpbmcgcmVxdWlyZWQuCisgKiAoYikgbG9ja2VkIGJ5IFNP
Q0tfTE9DSyhzbykuCisgKiAoYykgbG9ja2VkIGJ5IFNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdiku
CisgKiAoZCkgbG9ja2VkIGJ5IFNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCkuCisgKiAoZSkgbG9j
a2VkIGJ5IEFDQ0VQVF9MT0NLKCkuCisgKiAoZikgbm90IGxvY2tlZCBzaW5jZSBpbnRlZ2VyIHJl
YWRzL3dyaXRlcyBhcmUgYXRvbWljLgorICogKGcpIHVzZWQgb25seSBhcyBhIHNsZWVwL3dha2V1
cCBhZGRyZXNzLCBubyB2YWx1ZS4KKyAqIChoKSBsb2NrZWQgYnkgZ2xvYmFsIG11dGV4IHNvX2ds
b2JhbF9tdHguCisgKi8KK3N0cnVjdCBzb2NrZXQgeworCWludAlzb19jb3VudDsJCS8qIChiKSBy
ZWZlcmVuY2UgY291bnQgKi8KKwlzaG9ydAlzb190eXBlOwkJLyogKGEpIGdlbmVyaWMgdHlwZSwg
c2VlIHNvY2tldC5oICovCisJc2hvcnQJc29fb3B0aW9uczsJCS8qIGZyb20gc29ja2V0IGNhbGws
IHNlZSBzb2NrZXQuaCAqLworCXNob3J0CXNvX2xpbmdlcjsJCS8qIHRpbWUgdG8gbGluZ2VyIHdo
aWxlIGNsb3NpbmcgKi8KKwlzaG9ydAlzb19zdGF0ZTsJCS8qIChiKSBpbnRlcm5hbCBzdGF0ZSBm
bGFncyBTU18qICovCisJaW50CXNvX3FzdGF0ZTsJCS8qIChlKSBpbnRlcm5hbCBzdGF0ZSBmbGFn
cyBTUV8qICovCisJdm9pZAkqc29fcGNiOwkJLyogcHJvdG9jb2wgY29udHJvbCBibG9jayAqLwor
CWludAlzb19kb207CisvKgorICogVmFyaWFibGVzIGZvciBjb25uZWN0aW9uIHF1ZXVpbmcuCisg
KiBTb2NrZXQgd2hlcmUgYWNjZXB0cyBvY2N1ciBpcyBzb19oZWFkIGluIGFsbCBzdWJzaWRpYXJ5
IHNvY2tldHMuCisgKiBJZiBzb19oZWFkIGlzIDAsIHNvY2tldCBpcyBub3QgcmVsYXRlZCB0byBh
biBhY2NlcHQuCisgKiBGb3IgaGVhZCBzb2NrZXQgc29faW5jb21wIHF1ZXVlcyBwYXJ0aWFsbHkg
Y29tcGxldGVkIGNvbm5lY3Rpb25zLAorICogd2hpbGUgc29fY29tcCBpcyBhIHF1ZXVlIG9mIGNv
bm5lY3Rpb25zIHJlYWR5IHRvIGJlIGFjY2VwdGVkLgorICogSWYgYSBjb25uZWN0aW9uIGlzIGFi
b3J0ZWQgYW5kIGl0IGhhcyBzb19oZWFkIHNldCwgdGhlbgorICogaXQgaGFzIHRvIGJlIHB1bGxl
ZCBvdXQgb2YgZWl0aGVyIHNvX2luY29tcCBvciBzb19jb21wLgorICogV2UgYWxsb3cgY29ubmVj
dGlvbnMgdG8gcXVldWUgdXAgYmFzZWQgb24gY3VycmVudCBxdWV1ZSBsZW5ndGhzCisgKiBhbmQg
bGltaXQgb24gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBmb3IgdGhpcyBzb2NrZXQuCisg
Ki8KKwlzdHJ1Y3QJc29ja2V0ICpzb19oZWFkOwkvKiAoZSkgYmFjayBwb2ludGVyIHRvIGxpc3Rl
biBzb2NrZXQgKi8KKwlUQUlMUV9IRUFEKCwgc29ja2V0KSBzb19pbmNvbXA7CS8qIChlKSBxdWV1
ZSBvZiBwYXJ0aWFsIHVuYWNjZXB0ZWQgY29ubmVjdGlvbnMgKi8KKwlUQUlMUV9IRUFEKCwgc29j
a2V0KSBzb19jb21wOwkvKiAoZSkgcXVldWUgb2YgY29tcGxldGUgdW5hY2NlcHRlZCBjb25uZWN0
aW9ucyAqLworCVRBSUxRX0VOVFJZKHNvY2tldCkgc29fbGlzdDsJLyogKGUpIGxpc3Qgb2YgdW5h
Y2NlcHRlZCBjb25uZWN0aW9ucyAqLworCXVfc2hvcnQJc29fcWxlbjsJCS8qIChlKSBudW1iZXIg
b2YgdW5hY2NlcHRlZCBjb25uZWN0aW9ucyAqLworCXVfc2hvcnQJc29faW5jcWxlbjsJCS8qIChl
KSBudW1iZXIgb2YgdW5hY2NlcHRlZCBpbmNvbXBsZXRlCisJCQkJCSAgIGNvbm5lY3Rpb25zICov
CisJdV9zaG9ydAlzb19xbGltaXQ7CQkvKiAoZSkgbWF4IG51bWJlciBxdWV1ZWQgY29ubmVjdGlv
bnMgKi8KKwlzaG9ydAlzb190aW1lbzsJCS8qIChnKSBjb25uZWN0aW9uIHRpbWVvdXQgKi8KKwl1
c2VybGFuZF9jb25kX3QgdGltZW9fY29uZDsgICAgICAvKiB0aW1lb19jb25kIGNvbmRpdGlvbiB2
YXJpYWJsZSBiZWluZyB1c2VkIGluIHdha2V1cCAqLworCisJdV9zaG9ydAlzb19lcnJvcjsJCS8q
IChmKSBlcnJvciBhZmZlY3RpbmcgY29ubmVjdGlvbiAqLworCXN0cnVjdAlzaWdpbyAqc29fc2ln
aW87CS8qIFtzZ10gaW5mb3JtYXRpb24gZm9yIGFzeW5jIEkvTyBvcgorCQkJCQkgICBvdXQgb2Yg
YmFuZCBkYXRhIChTSUdVUkcpICovCisJdV9sb25nCXNvX29vYm1hcms7CQkvKiAoYykgY2hhcnMg
dG8gb29iIG1hcmsgKi8KKwlUQUlMUV9IRUFEKCwgYWlvY2JsaXN0KSBzb19haW9qb2JxOyAvKiBB
SU8gb3BzIHdhaXRpbmcgb24gc29ja2V0ICovCisvKgorICogVmFyaWFibGVzIGZvciBzb2NrZXQg
YnVmZmVyaW5nLgorICovCisJc3RydWN0IHNvY2tidWYgeworCQkvKiBfX1VzZXJzcGFjZV9fIE1h
bnkgb2YgdGhlc2UgZmllbGRzIG1heQorCQkgKiBub3QgYmUgcmVxdWlyZWQgZm9yIHRoZSBzY3Rw
IHN0YWNrLgorCQkgKiBDb21tZW50aW5nIG91dCB0aGUgZm9sbG93aW5nLgorCQkgKiBJbmNsdWRp
bmcgcHRocmVhZCBtdXRleCBhbmQgY29uZGl0aW9uIHZhcmlhYmxlIHRvIGJlCisJCSAqIHVzZWQg
Ynkgc2J3YWl0LCBzb3J3YWtldXAgYW5kIHNvd3dha2V1cC4KKwkJKi8KKwkJLyogc3RydWN0CXNl
bGluZm8gc2Jfc2VsOyovIC8qIHByb2Nlc3Mgc2VsZWN0aW5nIHJlYWQvd3JpdGUgKi8KKwkJLyog
c3RydWN0CW10eCBzYl9tdHg7Ki8JLyogc29ja2J1ZiBsb2NrICovCisJCS8qIHN0cnVjdAlzeCBz
Yl9zeDsqLwkvKiBwcmV2ZW50IEkvTyBpbnRlcmxhY2luZyAqLworCQl1c2VybGFuZF9jb25kX3Qg
c2JfY29uZDsgLyogc29ja2J1ZiBjb25kaXRpb24gdmFyaWFibGUgKi8KKwkJdXNlcmxhbmRfbXV0
ZXhfdCBzYl9tdHg7IC8qIHNvY2tidWYgbG9jayBhc3NvY2lhdGVkIHdpdGggc2JfY29uZCAqLwor
CQlzaG9ydAlzYl9zdGF0ZTsJLyogKGMvZCkgc29ja2V0IHN0YXRlIG9uIHNvY2tidWYgKi8KKyNk
ZWZpbmUJc2Jfc3RhcnR6ZXJvCXNiX21iCisJCXN0cnVjdAltYnVmICpzYl9tYjsJLyogKGMvZCkg
dGhlIG1idWYgY2hhaW4gKi8KKwkJc3RydWN0CW1idWYgKnNiX21idGFpbDsgLyogKGMvZCkgdGhl
IGxhc3QgbWJ1ZiBpbiB0aGUgY2hhaW4gKi8KKwkJc3RydWN0CW1idWYgKnNiX2xhc3RyZWNvcmQ7
CS8qIChjL2QpIGZpcnN0IG1idWYgb2YgbGFzdAorCQkJCQkJICogcmVjb3JkIGluIHNvY2tldCBi
dWZmZXIgKi8KKwkJc3RydWN0CW1idWYgKnNiX3NuZHB0cjsgLyogKGMvZCkgcG9pbnRlciBpbnRv
IG1idWYgY2hhaW4gKi8KKwkJdV9pbnQJc2Jfc25kcHRyb2ZmOwkvKiAoYy9kKSBieXRlIG9mZnNl
dCBvZiBwdHIgaW50byBjaGFpbiAqLworCQl1X2ludAlzYl9jYzsJCS8qIChjL2QpIGFjdHVhbCBj
aGFycyBpbiBidWZmZXIgKi8KKwkJdV9pbnQJc2JfaGl3YXQ7CS8qIChjL2QpIG1heCBhY3R1YWwg
Y2hhciBjb3VudCAqLworCQl1X2ludAlzYl9tYmNudDsJLyogKGMvZCkgY2hhcnMgb2YgbWJ1ZnMg
dXNlZCAqLworCQl1X2ludAlzYl9tYm1heDsJLyogKGMvZCkgbWF4IGNoYXJzIG9mIG1idWZzIHRv
IHVzZSAqLworCQl1X2ludAlzYl9jdGw7CQkvKiAoYy9kKSBub24tZGF0YSBjaGFycyBpbiBidWZm
ZXIgKi8KKwkJaW50CXNiX2xvd2F0OwkvKiAoYy9kKSBsb3cgd2F0ZXIgbWFyayAqLworCQlpbnQJ
c2JfdGltZW87CS8qIChjL2QpIHRpbWVvdXQgZm9yIHJlYWQvd3JpdGUgKi8KKwkJc2hvcnQJc2Jf
ZmxhZ3M7CS8qIChjL2QpIGZsYWdzLCBzZWUgYmVsb3cgKi8KKwl9IHNvX3Jjdiwgc29fc25kOwor
LyoKKyAqIENvbnN0YW50cyBmb3Igc2JfZmxhZ3MgZmllbGQgb2Ygc3RydWN0IHNvY2tidWYuCisg
Ki8KKyNkZWZpbmUJU0JfTUFYCQkoMjU2KjEwMjQpCS8qIGRlZmF1bHQgZm9yIG1heCBjaGFycyBp
biBzb2NrYnVmICovCisjZGVmaW5lIFNCX1JBVyAgICAgICAgICAoNjQqMTAyNCoyKSAgICAvKkFs
aWduaW5nIHNvLT5zb19yY3Yuc2JfaGl3YXQgd2l0aCB0aGUgcmVjZWl2ZSBidWZmZXIgc2l6ZSBv
ZiByYXcgc29ja2V0Ki8KKy8qCisgKiBDb25zdGFudHMgZm9yIHNiX2ZsYWdzIGZpZWxkIG9mIHN0
cnVjdCBzb2NrYnVmLgorICovCisjZGVmaW5lCVNCX1dBSVQJCTB4MDQJCS8qIHNvbWVvbmUgaXMg
d2FpdGluZyBmb3IgZGF0YS9zcGFjZSAqLworI2RlZmluZQlTQl9TRUwJCTB4MDgJCS8qIHNvbWVv
bmUgaXMgc2VsZWN0aW5nICovCisjZGVmaW5lCVNCX0FTWU5DCTB4MTAJCS8qIEFTWU5DIEkvTywg
bmVlZCBzaWduYWxzICovCisjZGVmaW5lCVNCX1VQQ0FMTAkweDIwCQkvKiBzb21lb25lIHdhbnRz
IGFuIHVwY2FsbCAqLworI2RlZmluZQlTQl9OT0lOVFIJMHg0MAkJLyogb3BlcmF0aW9ucyBub3Qg
aW50ZXJydXB0aWJsZSAqLworI2RlZmluZQlTQl9BSU8JCTB4ODAJCS8qIEFJTyBvcGVyYXRpb25z
IHF1ZXVlZCAqLworI2RlZmluZQlTQl9LTk9URQkweDEwMAkJLyoga2VybmVsIG5vdGUgYXR0YWNo
ZWQgKi8KKyNkZWZpbmUJU0JfQVVUT1NJWkUJMHg4MDAJCS8qIGF1dG9tYXRpY2FsbHkgc2l6ZSBz
b2NrZXQgYnVmZmVyICovCisKKwl2b2lkCSgqc29fdXBjYWxsKShzdHJ1Y3Qgc29ja2V0ICosIHZv
aWQgKiwgaW50KTsKKwl2b2lkCSpzb191cGNhbGxhcmc7CisJc3RydWN0CXVjcmVkICpzb19jcmVk
OwkJLyogKGEpIHVzZXIgY3JlZGVudGlhbHMgKi8KKwlzdHJ1Y3QJbGFiZWwgKnNvX2xhYmVsOwkv
KiAoYikgTUFDIGxhYmVsIGZvciBzb2NrZXQgKi8KKwlzdHJ1Y3QJbGFiZWwgKnNvX3BlZXJsYWJl
bDsJLyogKGIpIGNhY2hlZCBNQUMgbGFiZWwgZm9yIHBlZXIgKi8KKwkvKiBOQjogZ2VuZXJhdGlv
biBjb3VudCBtdXN0IG5vdCBiZSBmaXJzdC4gKi8KKwl1aW50MzJfdCBzb19nZW5jbnQ7CQkvKiAo
aCkgZ2VuZXJhdGlvbiBjb3VudCAqLworCXZvaWQJKnNvX2VtdWxkYXRhOwkJLyogKGIpIHByaXZh
dGUgZGF0YSBmb3IgZW11bGF0b3JzICovCisgCXN0cnVjdCBzb19hY2NmIHsKKwkJc3RydWN0CWFj
Y2VwdF9maWx0ZXIgKnNvX2FjY2VwdF9maWx0ZXI7CisJCXZvaWQJKnNvX2FjY2VwdF9maWx0ZXJf
YXJnOwkvKiBzYXZlZCBmaWx0ZXIgYXJncyAqLworCQljaGFyCSpzb19hY2NlcHRfZmlsdGVyX3N0
cjsJLyogc2F2ZWQgdXNlciBhcmdzICovCisJfSAqc29fYWNjZjsKK307CisKKyNkZWZpbmUgU0Jf
RU1QVFlfRklYVVAoc2IpIGRvIHsJCQkJCQlcCisJaWYgKChzYiktPnNiX21iID09IE5VTEwpIHsJ
CQkJCVwKKwkJKHNiKS0+c2JfbWJ0YWlsID0gTlVMTDsJCQkJCVwKKwkJKHNiKS0+c2JfbGFzdHJl
Y29yZCA9IE5VTEw7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkK
KworLyoKKyAqIEdsb2JhbCBhY2NlcHQgbXV0ZXggdG8gc2VyaWFsaXplIGFjY2VzcyB0byBhY2Nl
cHQgcXVldWVzIGFuZAorICogZmllbGRzIGFzc29jaWF0ZWQgd2l0aCBtdWx0aXBsZSBzb2NrZXRz
LiAgVGhpcyBhbGxvd3MgdXMgdG8KKyAqIGF2b2lkIGRlZmluaW5nIGEgbG9jayBvcmRlciBiZXR3
ZWVuIGxpc3RlbiBhbmQgYWNjZXB0IHNvY2tldHMKKyAqIHVudGlsIHN1Y2ggdGltZSBhcyBpdCBw
cm92ZXMgdG8gYmUgYSBnb29kIGlkZWEuCisgKi8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCitleHRlcm4gdXNlcmxhbmRfbXV0ZXhfdCBhY2NlcHRfbXR4OworZXh0ZXJuIHVz
ZXJsYW5kX2NvbmRfdCBhY2NlcHRfY29uZDsKKyNkZWZpbmUgQUNDRVBUX0xPQ0tfQVNTRVJUKCkK
KyNkZWZpbmUJQUNDRVBUX0xPQ0soKSBkbyB7IFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmYWNj
ZXB0X210eCk7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCUFDQ0VQVF9VTkxPQ0soKQlkbyB7IFwK
KwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYWNjZXB0X210eCk7IFwKK30gd2hpbGUgKDApCisjZGVm
aW5lCUFDQ0VQVF9VTkxPQ0tfQVNTRVJUKCkKKyNlbHNlCitleHRlcm4gdXNlcmxhbmRfbXV0ZXhf
dCBhY2NlcHRfbXR4OworCitleHRlcm4gdXNlcmxhbmRfY29uZF90IGFjY2VwdF9jb25kOworI2lm
ZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUJQUNDRVBUX0xPQ0soKQlLQVNTRVJUKHB0aHJlYWRfbXV0
ZXhfbG9jaygmYWNjZXB0X210eCkgPT0gMCwgKCIlczogYWNjZXB0X210eCBhbHJlYWR5IGxvY2tl
ZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUJQUNDRVBUX1VOTE9DSygpCUtBU1NFUlQocHRocmVhZF9t
dXRleF91bmxvY2soJmFjY2VwdF9tdHgpID09IDAsICgiJXM6IGFjY2VwdF9tdHggbm90IGxvY2tl
ZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lCUFDQ0VQVF9MT0NLKCkgICAodm9pZClwdGhy
ZWFkX211dGV4X2xvY2soJmFjY2VwdF9tdHgpCisjZGVmaW5lCUFDQ0VQVF9VTkxPQ0soKSAodm9p
ZClwdGhyZWFkX211dGV4X3VubG9jaygmYWNjZXB0X210eCkKKyNlbmRpZgorI2RlZmluZQlBQ0NF
UFRfTE9DS19BU1NFUlQoKSBcCisgICAgICAgICAgS0FTU0VSVChwdGhyZWFkX211dGV4X3RyeWxv
Y2soJmFjY2VwdF9tdHgpID09IEVCVVNZLCAoIiVzOiBhY2NlcHRfbXR4IG5vdCBsb2NrZWQiLCBf
X2Z1bmNfXykpCisjZGVmaW5lCUFDQ0VQVF9VTkxPQ0tfQVNTRVJUKCkgZG8geyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkg
IEtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKCZhY2NlcHRfbXR4KSA9PSAwLCAoIiVzOiBh
Y2NlcHRfbXR4ICBsb2NrZWQiLCBfX2Z1bmNfXykpOyBcCisJICAodm9pZClwdGhyZWFkX211dGV4
X3VubG9jaygmYWNjZXB0X210eCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2VuZGlmCisKKy8qCisgKiBQZXIt
c29ja2V0IGJ1ZmZlciBtdXRleCB1c2VkIHRvIHByb3RlY3QgbW9zdCBmaWVsZHMgaW4gdGhlIHNv
Y2tldAorICogYnVmZmVyLgorICovCisjZGVmaW5lCVNPQ0tCVUZfTVRYKF9zYikgKCYoX3NiKS0+
c2JfbXR4KQorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIFNP
Q0tCVUZfTE9DS19JTklUKF9zYiwgX25hbWUpIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9u
KFNPQ0tCVUZfTVRYKF9zYikpCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19ERVNUUk9ZKF9zYikgRGVs
ZXRlQ3JpdGljYWxTZWN0aW9uKFNPQ0tCVUZfTVRYKF9zYikpCisjZGVmaW5lIFNPQ0tCVUZfQ09O
RF9JTklUKF9zYikgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zYiktPnNiX2NvbmQp
KQorI2RlZmluZSBTT0NLQlVGX0NPTkRfREVTVFJPWShfc2IpIERlbGV0ZUNvbmRpdGlvblZhcmlh
YmxlKCgmKF9zYiktPnNiX2NvbmQpKQorI2RlZmluZSBTT0NLX0NPTkRfSU5JVChfc28pIEluaXRp
YWxpemVDb25kaXRpb25WYXJpYWJsZSgoJihfc28pLT50aW1lb19jb25kKSkKKyNkZWZpbmUgU09D
S19DT05EX0RFU1RST1koX3NvKSBEZWxldGVDb25kaXRpb25WYXJpYWJsZSgoJihfc28pLT50aW1l
b19jb25kKSkKKyNkZWZpbmUgU09DS19DT05EKF9zbykgKCYoX3NvKS0+dGltZW9fY29uZCkKKyNl
bHNlCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTT0NLQlVGX0xPQ0tfSU5JVChfc2IsIF9u
YW1lKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXB0aHJlYWRfbXV0
ZXhhdHRyX3QgbXV0ZXhfYXR0cjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleF9hdHRyKTsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUo
Jm11dGV4X2F0dHIsIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyk7ICBcCisJcHRocmVhZF9tdXRl
eF9pbml0KFNPQ0tCVUZfTVRYKF9zYiksICZtdXRleF9hdHRyKTsgICAgICAgICAgICAgICAgIFwK
KwlwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRleF9hdHRyKTsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19J
TklUKF9zYiwgX25hbWUpIFwKKwlwdGhyZWFkX211dGV4X2luaXQoU09DS0JVRl9NVFgoX3NiKSwg
TlVMTCkKKyNlbmRpZgorI2RlZmluZSBTT0NLQlVGX0xPQ0tfREVTVFJPWShfc2IpIHB0aHJlYWRf
bXV0ZXhfZGVzdHJveShTT0NLQlVGX01UWChfc2IpKQorI2RlZmluZSBTT0NLQlVGX0NPTkRfSU5J
VChfc2IpIHB0aHJlYWRfY29uZF9pbml0KCgmKF9zYiktPnNiX2NvbmQpLCBOVUxMKQorI2RlZmlu
ZSBTT0NLQlVGX0NPTkRfREVTVFJPWShfc2IpIHB0aHJlYWRfY29uZF9kZXN0cm95KCgmKF9zYikt
PnNiX2NvbmQpKQorI2RlZmluZSBTT0NLX0NPTkRfSU5JVChfc28pIHB0aHJlYWRfY29uZF9pbml0
KCgmKF9zbyktPnRpbWVvX2NvbmQpLCBOVUxMKQorI2RlZmluZSBTT0NLX0NPTkRfREVTVFJPWShf
c28pIHB0aHJlYWRfY29uZF9kZXN0cm95KCgmKF9zbyktPnRpbWVvX2NvbmQpKQorI2RlZmluZSBT
T0NLX0NPTkQoX3NvKSAoJihfc28pLT50aW1lb19jb25kKQorI2VuZGlmCisvKl9fVXNlcnNwYWNl
X18gU09DS0JVRl9MT0NLKF9zYikgaXMgbm93IGRlZmluZWQgaW4gbmV0aW5ldC9zY3RwX3Byb2Nl
c3NfbG9jay5oICovCisKKy8qICNkZWZpbmUJU09DS0JVRl9PV05FRChfc2IpCQltdHhfb3duZWQo
U09DS0JVRl9NVFgoX3NiKSkgdW51c2VkICovCisvKl9fVXNlcnNwYWNlX18gU09DS0JVRl9VTkxP
Q0soX3NiKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8K
KworLypfX1VzZXJzcGFjZV9fIFNPQ0tCVUZfTE9DS19BU1NFUlQoX3NiKSBpcyBub3cgZGVmaW5l
ZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KKworLyogI2RlZmluZQlTT0NLQlVG
X1VOTE9DS19BU1NFUlQoX3NiKQltdHhfYXNzZXJ0KFNPQ0tCVUZfTVRYKF9zYiksIE1BX05PVE9X
TkVEKSAgIHVudXNlZCAqLworCisvKgorICogUGVyLXNvY2tldCBtdXRleDogd2UgcmV1c2UgdGhl
IHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBtdXRleCBmb3Igc3BhY2UKKyAqIGVmZmljaWVuY3kuICBU
aGlzIGRlY2lzaW9uIHNob3VsZCBwcm9iYWJseSBiZSByZXZpc2l0ZWQgYXMgd2Ugb3B0aW1pemUK
KyAqIGxvY2tpbmcgZm9yIHRoZSBzb2NrZXQgY29kZS4KKyAqLworI2RlZmluZQlTT0NLX01UWChf
c28pCQkJU09DS0JVRl9NVFgoJihfc28pLT5zb19yY3YpCisvKl9fVXNlcnNwYWNlX18gU09DS19M
T0NLKF9zbykgaXMgbm93IGRlZmluZWQgaW4gbmV0aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5oICov
CisKKy8qICNkZWZpbmUJU09DS19PV05FRChfc28pCQkJU09DS0JVRl9PV05FRCgmKF9zbyktPnNv
X3JjdikgdW51c2VkICovCisvKl9fVXNlcnNwYWNlX18gU09DS19VTkxPQ0soX3NvKSBpcyBub3cg
ZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KKworI2RlZmluZQlTT0NL
X0xPQ0tfQVNTRVJUKF9zbykJCVNPQ0tCVUZfTE9DS19BU1NFUlQoJihfc28pLT5zb19yY3YpCisK
Ky8qCisgKiBTb2NrZXQgc3RhdGUgYml0cy4KKyAqCisgKiBIaXN0b3JpY2FsbHksIHRoaXMgYml0
cyB3ZXJlIGFsbCBrZXB0IGluIHRoZSBzb19zdGF0ZSBmaWVsZC4gIEZvcgorICogbG9ja2luZyBy
ZWFzb25zLCB0aGV5IGFyZSBub3cgaW4gbXVsdGlwbGUgZmllbGRzLCBhcyB0aGV5IGFyZQorICog
bG9ja2VkIGRpZmZlcmVudGx5LiAgc29fc3RhdGUgbWFpbnRhaW5zIGJhc2ljIHNvY2tldCBzdGF0
ZSBwcm90ZWN0ZWQKKyAqIGJ5IHRoZSBzb2NrZXQgbG9jay4gIHNvX3FzdGF0ZSBob2xkcyBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgc29ja2V0CisgKiBhY2NlcHQgcXVldWVzLiAgRWFjaCBzb2NrZXQg
YnVmZmVyIGFsc28gaGFzIGEgc3RhdGUgZmllbGQgaG9sZGluZworICogaW5mb3JtYXRpb24gcmVs
ZXZhbnQgdG8gdGhhdCBzb2NrZXQgYnVmZmVyIChjYW4ndCBzZW5kLCByY3YpLiAgTWFueQorICog
ZmllbGRzIHdpbGwgYmUgcmVhZCB3aXRob3V0IGxvY2tzIHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ug
YW5kIGF2b2lkCisgKiBsb2NrIG9yZGVyIGlzc3Vlcy4gIEhvd2V2ZXIsIHRoaXMgYXBwcm9hY2gg
bXVzdCBiZSB1c2VkIHdpdGggY2F1dGlvbi4KKyAqLworI2RlZmluZQlTU19OT0ZEUkVGCQkweDAw
MDEJLyogbm8gZmlsZSB0YWJsZSByZWYgYW55IG1vcmUgKi8KKyNkZWZpbmUJU1NfSVNDT05ORUNU
RUQJCTB4MDAwMgkvKiBzb2NrZXQgY29ubmVjdGVkIHRvIGEgcGVlciAqLworI2RlZmluZQlTU19J
U0NPTk5FQ1RJTkcJCTB4MDAwNAkvKiBpbiBwcm9jZXNzIG9mIGNvbm5lY3RpbmcgdG8gcGVlciAq
LworI2RlZmluZQlTU19JU0RJU0NPTk5FQ1RJTkcJMHgwMDA4CS8qIGluIHByb2Nlc3Mgb2YgZGlz
Y29ubmVjdGluZyAqLworI2RlZmluZQlTU19OQklPCQkJMHgwMTAwCS8qIG5vbi1ibG9ja2luZyBv
cHMgKi8KKyNkZWZpbmUJU1NfQVNZTkMJCTB4MDIwMAkvKiBhc3luYyBpL28gbm90aWZ5ICovCisj
ZGVmaW5lCVNTX0lTQ09ORklSTUlORwkJMHgwNDAwCS8qIGRlY2lkaW5nIHRvIGFjY2VwdCBjb25u
ZWN0aW9uIHJlcSAqLworI2RlZmluZQlTU19JU0RJU0NPTk5FQ1RFRAkweDIwMDAJLyogc29ja2V0
IGRpc2Nvbm5lY3RlZCBmcm9tIHBlZXIgKi8KKy8qCisgKiBQcm90b2NvbHMgY2FuIG1hcmsgYSBz
b2NrZXQgYXMgU1NfUFJPVE9SRUYgdG8gaW5kaWNhdGUgdGhhdCwgZm9sbG93aW5nCisgKiBwcnVf
ZGV0YWNoLCB0aGV5IHN0aWxsIHdhbnQgdGhlIHNvY2tldCB0byBwZXJzaXN0LCBhbmQgd2lsbCBm
cmVlIGl0CisgKiB0aGVtc2VsdmVzIHdoZW4gdGhleSBhcmUgZG9uZS4gIFByb3RvY29scyBzaG91
bGQgb25seSBldmVyIGNhbGwgc29mcmVlKCkKKyAqIGZvbGxvd2luZyBzZXR0aW5nIHRoaXMgZmxh
ZyBpbiBwcnVfZGV0YWNoKCksIGFuZCBuZXZlciBvdGhlcndpc2UsIGFzCisgKiBzb2ZyZWUoKSBi
eXBhc3NlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLgorICovCisjZGVmaW5lCVNTX1BST1RP
UkVGCQkweDQwMDAJLyogc3Ryb25nIHByb3RvY29sIHJlZmVyZW5jZSAqLworCisvKgorICogU29j
a2V0IHN0YXRlIGJpdHMgbm93IHN0b3JlZCBpbiB0aGUgc29ja2V0IGJ1ZmZlciBzdGF0ZSBmaWVs
ZC4KKyAqLworI2RlZmluZQlTQlNfQ0FOVFNFTkRNT1JFCTB4MDAxMAkvKiBjYW4ndCBzZW5kIG1v
cmUgZGF0YSB0byBwZWVyICovCisjZGVmaW5lCVNCU19DQU5UUkNWTU9SRQkJMHgwMDIwCS8qIGNh
bid0IHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gcGVlciAqLworI2RlZmluZQlTQlNfUkNWQVRNQVJL
CQkweDAwNDAJLyogYXQgbWFyayBvbiBpbnB1dCAqLworCisvKgorICogU29ja2V0IHN0YXRlIGJp
dHMgc3RvcmVkIGluIHNvX3FzdGF0ZS4KKyAqLworI2RlZmluZQlTUV9JTkNPTVAJCTB4MDgwMAkv
KiB1bmFjY2VwdGVkLCBpbmNvbXBsZXRlIGNvbm5lY3Rpb24gKi8KKyNkZWZpbmUJU1FfQ09NUAkJ
CTB4MTAwMAkvKiB1bmFjY2VwdGVkLCBjb21wbGV0ZSBjb25uZWN0aW9uICovCisKKy8qCisgKiBF
eHRlcm5hbGl6ZWQgZm9ybSBvZiBzdHJ1Y3Qgc29ja2V0IHVzZWQgYnkgdGhlIHN5c2N0bCgzKSBp
bnRlcmZhY2UuCisgKi8KK3N0cnVjdCB4c29ja2V0IHsKKwlzaXplX3QJeHNvX2xlbjsJLyogbGVu
Z3RoIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0CXNvY2tldCAqeHNvX3NvOwkvKiBtYWtl
cyBhIGNvbnZlbmllbnQgaGFuZGxlIHNvbWV0aW1lcyAqLworCXNob3J0CXNvX3R5cGU7CisJc2hv
cnQJc29fb3B0aW9uczsKKwlzaG9ydAlzb19saW5nZXI7CisJc2hvcnQJc29fc3RhdGU7CisJY2Fk
ZHJfdAlzb19wY2I7CQkvKiBhbm90aGVyIGNvbnZlbmllbnQgaGFuZGxlICovCisJaW50CXhzb19w
cm90b2NvbDsKKwlpbnQJeHNvX2ZhbWlseTsKKwl1X3Nob3J0CXNvX3FsZW47CisJdV9zaG9ydAlz
b19pbmNxbGVuOworCXVfc2hvcnQJc29fcWxpbWl0OworCXNob3J0CXNvX3RpbWVvOworCXVfc2hv
cnQJc29fZXJyb3I7CisJcGlkX3QJc29fcGdpZDsKKwl1X2xvbmcJc29fb29ibWFyazsKKwlzdHJ1
Y3QgeHNvY2tidWYgeworCQl1X2ludAlzYl9jYzsKKwkJdV9pbnQJc2JfaGl3YXQ7CisJCXVfaW50
CXNiX21iY250OworCQl1X2ludAlzYl9tYm1heDsKKwkJaW50CXNiX2xvd2F0OworCQlpbnQJc2Jf
dGltZW87CisJCXNob3J0CXNiX2ZsYWdzOworCX0gc29fcmN2LCBzb19zbmQ7CisJdWlkX3QJc29f
dWlkOwkJLyogWFhYICovCit9OworCisjaWYgZGVmaW5lZChfS0VSTkVMKQorCisKKy8qCisgKiBN
YWNyb3MgZm9yIHNvY2tldHMgYW5kIHNvY2tldCBidWZmZXJpbmcuCisgKi8KKworLyoKKyAqIERv
IHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBvdGhlciBzaWRlIHdoZW4gSS9PIGlzIHBvc3NpYmxlPwor
ICovCisjZGVmaW5lCXNiX25vdGlmeShzYikJKCgoc2IpLT5zYl9mbGFncyAmIChTQl9XQUlUIHwg
U0JfU0VMIHwgU0JfQVNZTkMgfCBcCisgICAgU0JfVVBDQUxMIHwgU0JfQUlPIHwgU0JfS05PVEUp
KSAhPSAwKQorCisvKgorICogSG93IG11Y2ggc3BhY2UgaXMgdGhlcmUgaW4gYSBzb2NrZXQgYnVm
ZmVyIChzby0+c29fc25kIG9yIHNvLT5zb19yY3YpPworICogVGhpcyBpcyBwcm9ibGVtYXRpY2Fs
IGlmIHRoZSBmaWVsZHMgYXJlIHVuc2lnbmVkLCBhcyB0aGUgc3BhY2UgbWlnaHQKKyAqIHN0aWxs
IGJlIG5lZ2F0aXZlIChjYyA+IGhpd2F0IG9yIG1iY250ID4gbWJtYXgpLiAgU2hvdWxkIGRldGVj
dAorICogb3ZlcmZsb3cgYW5kIHJldHVybiAwLiAgU2hvdWxkIHVzZSAibG1pbiIgYnV0IGl0IGRv
ZXNuJ3QgZXhpc3Qgbm93LgorICovCisjZGVmaW5lCXNic3BhY2Uoc2IpIFwKKyAgICAoKGxvbmcp
IGltaW4oKGludCkoKHNiKS0+c2JfaGl3YXQgLSAoc2IpLT5zYl9jYyksIFwKKwkgKGludCkoKHNi
KS0+c2JfbWJtYXggLSAoc2IpLT5zYl9tYmNudCkpKQorCisvKiBkbyB3ZSBoYXZlIHRvIHNlbmQg
YWxsIGF0IG9uY2Ugb24gYSBzb2NrZXQ/ICovCisjZGVmaW5lCXNvc2VuZGFsbGF0b25jZShzbykg
XAorICAgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MgJiBQUl9BVE9NSUMpCisKKy8qIGNhbiB3
ZSByZWFkIHNvbWV0aGluZyBmcm9tIHNvPyAqLworI2RlZmluZQlzb3JlYWRhYmxlKHNvKSBcCisg
ICAgKChzbyktPnNvX3Jjdi5zYl9jYyA+PSAoc28pLT5zb19yY3Yuc2JfbG93YXQgfHwgXAorCSgo
c28pLT5zb19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpIHx8IFwKKwkhVEFJTFFfRU1Q
VFkoJihzbyktPnNvX2NvbXApIHx8IChzbyktPnNvX2Vycm9yKQorCisvKiBjYW4gd2Ugd3JpdGUg
c29tZXRoaW5nIHRvIHNvPyAqLworI2RlZmluZQlzb3dyaXRlYWJsZShzbykgXAorICAgICgoc2Jz
cGFjZSgmKHNvKS0+c29fc25kKSA+PSAoc28pLT5zb19zbmQuc2JfbG93YXQgJiYgXAorCSgoKHNv
KS0+c29fc3RhdGUmU1NfSVNDT05ORUNURUQpIHx8IFwKKwkgICgoc28pLT5zb19wcm90by0+cHJf
ZmxhZ3MmUFJfQ09OTlJFUVVJUkVEKT09MCkpIHx8IFwKKyAgICAgKChzbyktPnNvX3NuZC5zYl9z
dGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8IFwKKyAgICAgKHNvKS0+c29fZXJyb3IpCisKKy8q
IGFkanVzdCBjb3VudGVycyBpbiBzYiByZWZsZWN0aW5nIGFsbG9jYXRpb24gb2YgbSAqLworI2Rl
ZmluZQlzYmFsbG9jKHNiLCBtKSB7IFwKKwkoc2IpLT5zYl9jYyArPSAobSktPm1fbGVuOyBcCisJ
aWYgKChtKS0+bV90eXBlICE9IE1UX0RBVEEgJiYgKG0pLT5tX3R5cGUgIT0gTVRfT09CREFUQSkg
XAorCQkoc2IpLT5zYl9jdGwgKz0gKG0pLT5tX2xlbjsgXAorCShzYiktPnNiX21iY250ICs9IE1T
SVpFOyBcCisJaWYgKChtKS0+bV9mbGFncyAmIE1fRVhUKSBcCisJCShzYiktPnNiX21iY250ICs9
IChtKS0+bV9leHQuZXh0X3NpemU7IFwKK30KKworLyogYWRqdXN0IGNvdW50ZXJzIGluIHNiIHJl
ZmxlY3RpbmcgZnJlZWluZyBvZiBtICovCisjZGVmaW5lCXNiZnJlZShzYiwgbSkgeyBcCisJKHNi
KS0+c2JfY2MgLT0gKG0pLT5tX2xlbjsgXAorCWlmICgobSktPm1fdHlwZSAhPSBNVF9EQVRBICYm
IChtKS0+bV90eXBlICE9IE1UX09PQkRBVEEpIFwKKwkJKHNiKS0+c2JfY3RsIC09IChtKS0+bV9s
ZW47IFwKKwkoc2IpLT5zYl9tYmNudCAtPSBNU0laRTsgXAorCWlmICgobSktPm1fZmxhZ3MgJiBN
X0VYVCkgXAorCQkoc2IpLT5zYl9tYmNudCAtPSAobSktPm1fZXh0LmV4dF9zaXplOyBcCisJaWYg
KChzYiktPnNiX3NuZHB0ciA9PSAobSkpIHsgXAorCQkoc2IpLT5zYl9zbmRwdHIgPSBOVUxMOyBc
CisJCShzYiktPnNiX3NuZHB0cm9mZiA9IDA7IFwKKwl9IFwKKwlpZiAoKHNiKS0+c2Jfc25kcHRy
b2ZmICE9IDApIFwKKwkJKHNiKS0+c2Jfc25kcHRyb2ZmIC09IChtKS0+bV9sZW47IFwKK30KKwor
LyoKKyAqIHNvcmVmKCkvc29yZWxlKCkgcmVmLWNvdW50IHRoZSBzb2NrZXQgc3RydWN0dXJlLiAg
Tm90ZSB0aGF0IHlvdSBtdXN0CisgKiBzdGlsbCBleHBsaWNpdGx5IGNsb3NlIHRoZSBzb2NrZXQs
IGJ1dCB0aGUgbGFzdCByZWYgY291bnQgd2lsbCBmcmVlCisgKiB0aGUgc3RydWN0dXJlLgorICov
CisjZGVmaW5lCXNvcmVmKHNvKSBkbyB7CQkJCQkJCVwKKwlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsJ
CQkJCQlcCisJKysoc28pLT5zb19jb3VudDsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5l
CXNvcmVsZShzbykgZG8gewkJCQkJCQlcCisJQUNDRVBUX0xPQ0tfQVNTRVJUKCk7CQkJCQkJXAor
CVNPQ0tfTE9DS19BU1NFUlQoc28pOwkJCQkJCVwKKwlLQVNTRVJUKChzbyktPnNvX2NvdW50ID4g
MCwgKCJzb3JlbGUiKSk7CQkJXAorCWlmICgtLShzbyktPnNvX2NvdW50ID09IDApCQkJCQlcCisJ
CXNvZnJlZShzbyk7CQkJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQlTT0NLX1VOTE9DSyhzbyk7
CQkJCQlcCisJCUFDQ0VQVF9VTkxPQ0soKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgw
KQorCisjZGVmaW5lCXNvdHJ5ZnJlZShzbykgZG8gewkJCQkJCVwKKwlBQ0NFUFRfTE9DS19BU1NF
UlQoKTsJCQkJCQlcCisJU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAorCWlmICgoc28pLT5z
b19jb3VudCA9PSAwKQkJCQkJXAorCQlzb2ZyZWUoc28pOwkJCQkJCVwKKwllbHNlIHsJCQkJCQkJ
CVwKKwkJU09DS19VTkxPQ0soc28pOwkJCQkJXAorCQlBQ0NFUFRfVU5MT0NLKCk7CQkJCQlcCisJ
fQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCisvKgorICogSW4gc29yd2FrZXVwKCkgYW5kIHNvd3dh
a2V1cCgpLCBhY3F1aXJlIHRoZSBzb2NrZXQgYnVmZmVyIGxvY2sgdG8KKyAqIGF2b2lkIGEgbm9u
LWF0b21pYyB0ZXN0LWFuZC13YWtldXAuICBIb3dldmVyLCBzb3dha2V1cCBpcworICogcmVzcG9u
c2libGUgZm9yIHJlbGVhc2luZyB0aGUgbG9jayBpZiBpdCBpcyBjYWxsZWQuICBXZSB1bmxvY2sg
b25seQorICogaWYgd2UgZG9uJ3QgY2FsbCBpbnRvIHNvd2FrZXVwLiAgSWYgYW55IGNvZGUgaXMg
aW50cm9kdWNlZCB0aGF0CisgKiBkaXJlY3RseSBpbnZva2VzIHRoZSB1bmRlcmx5aW5nIHNvd2Fr
ZXVwKCkgcHJpbWl0aXZlcywgaXQgbXVzdAorICogbWFpbnRhaW4gdGhlIHNhbWUgc2VtYW50aWNz
LgorICovCisjZGVmaW5lCXNvcndha2V1cF9sb2NrZWQoc28pIGRvIHsJCQkJCVwKKwlTT0NLQlVG
X0xPQ0tfQVNTRVJUKCYoc28pLT5zb19yY3YpOwkJCQlcCisJaWYgKHNiX25vdGlmeSgmKHNvKS0+
c29fcmN2KSkJCQkJCVwKKwkJc293YWtldXAoKHNvKSwgJihzbyktPnNvX3Jjdik7CSAJCQlcCisJ
ZWxzZQkJCQkJCQkJXAorCQlTT0NLQlVGX1VOTE9DSygmKHNvKS0+c29fcmN2KTsJCQkJXAorfSB3
aGlsZSAoMCkKKworI2RlZmluZQlzb3J3YWtldXAoc28pIGRvIHsJCQkJCQlcCisJU09DS0JVRl9M
T0NLKCYoc28pLT5zb19yY3YpOwkJCQkJXAorCXNvcndha2V1cF9sb2NrZWQoc28pOwkJCQkJCVwK
K30gd2hpbGUgKDApCisKKyNkZWZpbmUJc293d2FrZXVwX2xvY2tlZChzbykgZG8gewkJCQkJXAor
CVNPQ0tCVUZfTE9DS19BU1NFUlQoJihzbyktPnNvX3NuZCk7CQkJCVwKKwlpZiAoc2Jfbm90aWZ5
KCYoc28pLT5zb19zbmQpKQkJCQkJXAorCQlzb3dha2V1cCgoc28pLCAmKHNvKS0+c29fc25kKTsg
CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCVNPQ0tCVUZfVU5MT0NLKCYoc28pLT5zb19zbmQpOwkJ
CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCXNvd3dha2V1cChzbykgZG8gewkJCQkJCVwKKwlT
T0NLQlVGX0xPQ0soJihzbyktPnNvX3NuZCk7CQkJCQlcCisJc293d2FrZXVwX2xvY2tlZChzbyk7
CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEFyZ3VtZW50IHN0cnVjdHVyZSBmb3Igc29z
ZXRvcHQgZXQgc2VxLiAgVGhpcyBpcyBpbiB0aGUgS0VSTkVMCisgKiBzZWN0aW9uIGJlY2F1c2Ug
aXQgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHVzZXIgY29kZS4KKyAqLworZW51bSBzb3B0X2Rp
ciB7IFNPUFRfR0VULCBTT1BUX1NFVCB9Oworc3RydWN0IHNvY2tvcHQgeworCWVudW0Jc29wdF9k
aXIgc29wdF9kaXI7IC8qIGlzIHRoaXMgYSBnZXQgb3IgYSBzZXQ/ICovCisJaW50CXNvcHRfbGV2
ZWw7CS8qIHNlY29uZCBhcmcgb2YgW2dzXWV0c29ja29wdCAqLworCWludAlzb3B0X25hbWU7CS8q
IHRoaXJkIGFyZyBvZiBbZ3NdZXRzb2Nrb3B0ICovCisJdm9pZCAgICpzb3B0X3ZhbDsJLyogZm91
cnRoIGFyZyBvZiBbZ3NdZXRzb2Nrb3B0ICovCisJc2l6ZV90CXNvcHRfdmFsc2l6ZTsJLyogKGFs
bW9zdCkgZmlmdGggYXJnIG9mIFtnc11ldHNvY2tvcHQgKi8KKwlzdHJ1Y3QJdGhyZWFkICpzb3B0
X3RkOyAvKiBjYWxsaW5nIHRocmVhZCBvciBudWxsIGlmIGtlcm5lbCAqLworfTsKKworc3RydWN0
IGFjY2VwdF9maWx0ZXIgeworCWNoYXIJYWNjZl9uYW1lWzE2XTsKKwl2b2lkCSgqYWNjZl9jYWxs
YmFjaykKKwkJKHN0cnVjdCBzb2NrZXQgKnNvLCB2b2lkICphcmcsIGludCB3YWl0ZmxhZyk7CisJ
dm9pZCAqCSgqYWNjZl9jcmVhdGUpCisJCShzdHJ1Y3Qgc29ja2V0ICpzbywgY2hhciAqYXJnKTsK
Kwl2b2lkCSgqYWNjZl9kZXN0cm95KQorCQkoc3RydWN0IHNvY2tldCAqc28pOworCVNMSVNUX0VO
VFJZKGFjY2VwdF9maWx0ZXIpIGFjY2ZfbmV4dDsKK307CisKK2V4dGVybiBpbnQJbWF4c29ja2V0
czsKK2V4dGVybiB1X2xvbmcJc2JfbWF4OworZXh0ZXJuIHN0cnVjdCB1bWFfem9uZSAqc29ja2V0
X3pvbmU7CitleHRlcm4gc29fZ2VuX3Qgc29fZ2VuY250OworCitzdHJ1Y3QgbWJ1ZjsKK3N0cnVj
dCBzb2NrYWRkcjsKK3N0cnVjdCB1Y3JlZDsKK3N0cnVjdCB1aW87CisKKy8qCisgKiBGcm9tIHVp
cGNfc29ja2V0IGFuZCBmcmllbmRzCisgKi8KK2ludAlkb19nZXRvcHRfYWNjZXB0X2ZpbHRlcihz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpOworaW50CWRvX3NldG9wdF9h
Y2NlcHRfZmlsdGVyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCk7Citp
bnQJc29fc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGxldmVsLCBpbnQgb3B0bmFt
ZSwKKwkgICAgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0bGVuKTsKK2ludAlzb2NrYXJncyhzdHJ1
Y3QgbWJ1ZiAqKm1wLCBjYWRkcl90IGJ1ZiwgaW50IGJ1ZmxlbiwgaW50IHR5cGUpOworaW50CWdl
dHNvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqKm5hbXAsIGNhZGRyX3QgdWFkZHIsIHNpemVfdCBs
ZW4pOwordm9pZAlzYmFwcGVuZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptKTsK
K3ZvaWQJc2JhcHBlbmRfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0p
Owordm9pZAlzYmFwcGVuZHN0cmVhbShzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICpt
KTsKK3ZvaWQJc2JhcHBlbmRzdHJlYW1fbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0
IG1idWYgKm0pOworaW50CXNiYXBwZW5kYWRkcihzdHJ1Y3Qgc29ja2J1ZiAqc2IsIGNvbnN0IHN0
cnVjdCBzb2NrYWRkciAqYXNhLAorCSAgICBzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVmICpj
b250cm9sKTsKK2ludAlzYmFwcGVuZGFkZHJfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgY29u
c3Qgc3RydWN0IHNvY2thZGRyICphc2EsCisJICAgIHN0cnVjdCBtYnVmICptMCwgc3RydWN0IG1i
dWYgKmNvbnRyb2wpOworaW50CXNiYXBwZW5kY29udHJvbChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0
cnVjdCBtYnVmICptMCwKKwkgICAgc3RydWN0IG1idWYgKmNvbnRyb2wpOworaW50CXNiYXBwZW5k
Y29udHJvbF9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbTAsCisJICAg
IHN0cnVjdCBtYnVmICpjb250cm9sKTsKK3ZvaWQJc2JhcHBlbmRyZWNvcmQoc3RydWN0IHNvY2ti
dWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbTApOwordm9pZAlzYmFwcGVuZHJlY29yZF9sb2NrZWQoc3Ry
dWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbTApOwordm9pZAlzYmNoZWNrKHN0cnVjdCBz
b2NrYnVmICpzYik7Cit2b2lkCXNiY29tcHJlc3Moc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3Qg
bWJ1ZiAqbSwgc3RydWN0IG1idWYgKm4pOworc3RydWN0IG1idWYgKgorCXNiY3JlYXRlY29udHJv
bChjYWRkcl90IHAsIGludCBzaXplLCBpbnQgdHlwZSwgaW50IGxldmVsKTsKK3ZvaWQJc2JkZXN0
cm95KHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzYmRyb3Ao
c3RydWN0IHNvY2tidWYgKnNiLCBpbnQgbGVuKTsKK3ZvaWQJc2Jkcm9wX2xvY2tlZChzdHJ1Y3Qg
c29ja2J1ZiAqc2IsIGludCBsZW4pOwordm9pZAlzYmRyb3ByZWNvcmQoc3RydWN0IHNvY2tidWYg
KnNiKTsKK3ZvaWQJc2Jkcm9wcmVjb3JkX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwordm9p
ZAlzYmZsdXNoKHN0cnVjdCBzb2NrYnVmICpzYik7Cit2b2lkCXNiZmx1c2hfbG9ja2VkKHN0cnVj
dCBzb2NrYnVmICpzYik7Cit2b2lkCXNicmVsZWFzZShzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVj
dCBzb2NrZXQgKnNvKTsKK3ZvaWQJc2JyZWxlYXNlX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2Is
IHN0cnVjdCBzb2NrZXQgKnNvKTsKK2ludAlzYnJlc2VydmUoc3RydWN0IHNvY2tidWYgKnNiLCB1
X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvLAorCSAgICBzdHJ1Y3QgdGhyZWFkICp0ZCk7Citp
bnQJc2JyZXNlcnZlX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfbG9uZyBjYywgc3RydWN0
IHNvY2tldCAqc28sCisJICAgIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3N0cnVjdCBtYnVmICoKKwlz
YnNuZHB0cihzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfaW50IG9mZiwgdV9pbnQgbGVuLCB1X2ludCAq
bW9mZik7Cit2b2lkCXNidG94c29ja2J1ZihzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCB4c29j
a2J1ZiAqeHNiKTsKK2ludAlzYndhaXQoc3RydWN0IHNvY2tidWYgKnNiKTsKK2ludAlzYmxvY2so
c3RydWN0IHNvY2tidWYgKnNiLCBpbnQgZmxhZ3MpOwordm9pZAlzYnVubG9jayhzdHJ1Y3Qgc29j
a2J1ZiAqc2IpOwordm9pZAlzb2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNvKTsKK2ludAlzb2FjY2Vw
dChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFtKTsKK2ludAlzb2NoZWNr
dWlkKHN0cnVjdCBzb2NrZXQgKnNvLCB1aWRfdCB1aWQpOworaW50CXNvYmluZChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0sIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3ZvaWQJ
c29jYW50cmN2bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNvY2FudHJjdm1vcmVfbG9j
a2VkKHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJc29jYW50c2VuZG1vcmUoc3RydWN0IHNvY2tl
dCAqc28pOwordm9pZAlzb2NhbnRzZW5kbW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAqc28pOwor
aW50CXNvY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pOworaW50CXNvY29ubmVjdChzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0sIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAlz
b2Nvbm5lY3QyKHN0cnVjdCBzb2NrZXQgKnNvMSwgc3RydWN0IHNvY2tldCAqc28yKTsKK2ludAlz
b2Nvd19zZXR1cChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCB1aW8gKnVpbyk7CitpbnQJc29jcmVh
dGUoaW50IGRvbSwgc3RydWN0IHNvY2tldCAqKmFzbywgaW50IHR5cGUsIGludCBwcm90bywKKwkg
ICAgc3RydWN0IHVjcmVkICpjcmVkLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7CitpbnQJc29kaXNjb25u
ZWN0KHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0cnVjdAlzb2NrYWRkciAqc29kdXBzb2NrYWRkcihj
b25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBpbnQgbWZsYWdzKTsKK3ZvaWQJc29mcmVlKHN0cnVj
dCBzb2NrZXQgKnNvKTsKK2ludAlzb2dldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2tvcHQgKnNvcHQpOwordm9pZAlzb2hhc291dG9mYmFuZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2
b2lkCXNvaXNjb25uZWN0ZWQoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2lzY29ubmVjdGlu
ZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNvaXNkaXNjb25uZWN0ZWQoc3RydWN0IHNvY2tl
dCAqc28pOwordm9pZAlzb2lzZGlzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7CitpbnQJ
c29saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nLCBzdHJ1Y3QgdGhyZWFkICp0
ZCk7Cit2b2lkCXNvbGlzdGVuX3Byb3RvKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZyk7
CitpbnQJc29saXN0ZW5fcHJvdG9fY2hlY2soc3RydWN0IHNvY2tldCAqc28pOworc3RydWN0IHNv
Y2tldCAqCisJc29uZXdjb25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGludCBjb25uc3RhdHVzKTsK
K2ludAlzb29wdGNvcHlpbihzdHJ1Y3Qgc29ja29wdCAqc29wdCwgdm9pZCAqYnVmLCBzaXplX3Qg
bGVuLCBzaXplX3QgbWlubGVuKTsKK2ludAlzb29wdGNvcHlvdXQoc3RydWN0IHNvY2tvcHQgKnNv
cHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKy8qIFhYWDsgcHJlcGFyZSBtYnVm
IGZvciAoX19GcmVlQlNEX18gPCAzKSByb3V0aW5lcy4gKi8KK2ludAlzb29wdF9nZXRtKHN0cnVj
dCBzb2Nrb3B0ICpzb3B0LCBzdHJ1Y3QgbWJ1ZiAqKm1wKTsKK2ludAlzb29wdF9tY29weWluKHN0
cnVjdCBzb2Nrb3B0ICpzb3B0LCBzdHJ1Y3QgbWJ1ZiAqbSk7CitpbnQJc29vcHRfbWNvcHlvdXQo
c3RydWN0IHNvY2tvcHQgKnNvcHQsIHN0cnVjdCBtYnVmICptKTsKKworaW50CXNvcG9sbChzdHJ1
Y3Qgc29ja2V0ICpzbywgaW50IGV2ZW50cywgc3RydWN0IHVjcmVkICphY3RpdmVfY3JlZCwKKwkg
ICAgc3RydWN0IHRocmVhZCAqdGQpOworaW50CXNvcG9sbF9nZW5lcmljKHN0cnVjdCBzb2NrZXQg
KnNvLCBpbnQgZXZlbnRzLAorCSAgICBzdHJ1Y3QgdWNyZWQgKmFjdGl2ZV9jcmVkLCBzdHJ1Y3Qg
dGhyZWFkICp0ZCk7CitpbnQJc29yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKipwYWRkciwgc3RydWN0IHVpbyAqdWlvLAorCSAgICBzdHJ1Y3QgbWJ1ZiAqKm1wMCwg
c3RydWN0IG1idWYgKipjb250cm9scCwgaW50ICpmbGFnc3ApOworaW50CXNvcmVjZWl2ZV9nZW5l
cmljKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipwYWRkciwKKwkgICAgc3Ry
dWN0IHVpbyAqdWlvLCBzdHJ1Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1idWYgKipjb250cm9scCwK
KwkgICAgaW50ICpmbGFnc3ApOworaW50CXNvcmVzZXJ2ZShzdHJ1Y3Qgc29ja2V0ICpzbywgdV9s
b25nIHNuZGNjLCB1X2xvbmcgcmN2Y2MpOwordm9pZAlzb3JmbHVzaChzdHJ1Y3Qgc29ja2V0ICpz
byk7CitpbnQJc29zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
IHN0cnVjdCB1aW8gKnVpbywKKwkgICAgc3RydWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNv
bnRyb2wsIGludCBmbGFncywKKwkgICAgc3RydWN0IHRocmVhZCAqdGQpOworaW50CXNvc2VuZF9k
Z3JhbShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorCSAgICBzdHJ1
Y3QgdWlvICp1aW8sIHN0cnVjdCBtYnVmICp0b3AsIHN0cnVjdCBtYnVmICpjb250cm9sLAorCSAg
ICBpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAlzb3NlbmRfZ2VuZXJpYyhzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorCSAgICBzdHJ1Y3QgdWlvICp1
aW8sIHN0cnVjdCBtYnVmICp0b3AsIHN0cnVjdCBtYnVmICpjb250cm9sLAorCSAgICBpbnQgZmxh
Z3MsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAlzb3NldG9wdChzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2tvcHQgKnNvcHQpOworaW50CXNvc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc28s
IGludCBob3cpOwordm9pZAlzb3RveHNvY2tldChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHhz
b2NrZXQgKnhzbyk7Cit2b2lkCXNvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2J1ZiAqc2IpOworCisjaWZkZWYgU09DS0JVRl9ERUJVRwordm9pZAlzYmxhc3RyZWNvcmRjaGso
c3RydWN0IHNvY2tidWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOworI2RlZmluZQlTQkxBU1RSRUNP
UkRDSEsoc2IpCXNibGFzdHJlY29yZGNoaygoc2IpLCBfX0ZJTEVfXywgX19MSU5FX18pCisKK3Zv
aWQJc2JsYXN0bWJ1ZmNoayhzdHJ1Y3Qgc29ja2J1ZiAqLCBjb25zdCBjaGFyICosIGludCk7Cisj
ZGVmaW5lCVNCTEFTVE1CVUZDSEsoc2IpCXNibGFzdG1idWZjaGsoKHNiKSwgX19GSUxFX18sIF9f
TElORV9fKQorI2Vsc2UKKyNkZWZpbmUJU0JMQVNUUkVDT1JEQ0hLKHNiKSAgICAgIC8qIG5vdGhp
bmcgKi8KKyNkZWZpbmUJU0JMQVNUTUJVRkNISyhzYikgICAgICAgIC8qIG5vdGhpbmcgKi8KKyNl
bmRpZiAvKiBTT0NLQlVGX0RFQlVHICovCisKKy8qCisgKiBBY2NlcHQgZmlsdGVyIGZ1bmN0aW9u
cyAoZHVoKS4KKyAqLworaW50CWFjY2VwdF9maWx0X2FkZChzdHJ1Y3QgYWNjZXB0X2ZpbHRlciAq
ZmlsdCk7CitpbnQJYWNjZXB0X2ZpbHRfZGVsKGNoYXIgKm5hbWUpOworc3RydWN0CWFjY2VwdF9m
aWx0ZXIgKmFjY2VwdF9maWx0X2dldChjaGFyICpuYW1lKTsKKyNpZmRlZiBBQ0NFUFRfRklMVEVS
X01PRAorI2lmZGVmIFNZU0NUTF9ERUNMCitTWVNDVExfREVDTChfbmV0X2luZXRfYWNjZik7Cisj
ZW5kaWYKK2ludAlhY2NlcHRfZmlsdF9nZW5lcmljX21vZF9ldmVudChtb2R1bGVfdCBtb2QsIGlu
dCBldmVudCwgdm9pZCAqZGF0YSk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKwor
CisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAgIF9fVXNlcnNwYWNlX18g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qIHRo
aXMgbmV3IF9fVXNlcnNwYWNlX18gc2VjdGlvbiBpcyB0byBjb3B5IHBvcnRpb25zIG9mIHRoZSBf
S0VSTkVMIGJsb2NrCisgKiAgYWJvdmUgaW50bywgYXZvaWRpbmcgaGF2aW5nIHRvIHBvcnQgdGhl
IGVudGlyZSB0aGluZyBhdCBvbmNlLi4uCisgKiAgRm9yIGZ1bmN0aW9uIHByb3RvdHlwZXMsIHRo
ZSBmdWxsIGJvZGllcyBhcmUgaW4gdXNlcl9zb2NrZXQuYyAuCisgKi8KKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLSBmdW5jdGlvbiBwcm90b3R5cGVzIChpbXBs
ZW1lbnRlZCBpbiB1c2VyX3NvY2tldC5jKSAtLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KK3ZvaWQJc29pc2Nvbm5l
Y3Rpbmcoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2lzZGlzY29ubmVjdGluZyhzdHJ1Y3Qg
c29ja2V0ICpzbyk7Cit2b2lkCXNvaXNjb25uZWN0ZWQoc3RydWN0IHNvY2tldCAqc28pOworc3Ry
dWN0IHNvY2tldCAqIHNvbmV3Y29ubihzdHJ1Y3Qgc29ja2V0ICpoZWFkLCBpbnQgY29ubnN0YXR1
cyk7Cit2b2lkCXNvY2FudHJjdm1vcmUoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2NhbnRz
ZW5kbW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7CisKKworCisvKiAtLS0tLS0tLS0tLS0tLSAqLwor
LyogLS0tIG1hY3JvcyAtLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUJc29y
ZWYoc28pIGRvIHsJCQkJCQkJXAorCVNPQ0tfTE9DS19BU1NFUlQoc28pOwkJCQkJCVwKKwkrKyhz
byktPnNvX2NvdW50OwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJc29yZWxlKHNvKSBk
byB7CQkJCQkJCVwKKwlBQ0NFUFRfTE9DS19BU1NFUlQoKTsJCQkJCQlcCisJU09DS19MT0NLX0FT
U0VSVChzbyk7CQkJCQkJXAorCUtBU1NFUlQoKHNvKS0+c29fY291bnQgPiAwLCAoInNvcmVsZSIp
KTsJCQlcCisJaWYgKC0tKHNvKS0+c29fY291bnQgPT0gMCkJCQkJCVwKKwkJc29mcmVlKHNvKTsJ
CQkJCQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCVNPQ0tfVU5MT0NLKHNvKTsJCQkJCVwKKwkJQUND
RVBUX1VOTE9DSygpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUgKDApCisKKworLyogcmVw
bGFjaW5nIGltaW4gd2l0aCBtaW4gKHVzZXJfZW52aXJvbm1lbnQuaCkgKi8KKyNkZWZpbmUJc2Jz
cGFjZShzYikgXAorICAgICgobG9uZykgbWluKChpbnQpKChzYiktPnNiX2hpd2F0IC0gKHNiKS0+
c2JfY2MpLCBcCisJIChpbnQpKChzYiktPnNiX21ibWF4IC0gKHNiKS0+c2JfbWJjbnQpKSkKKwor
LyogZG8gd2UgaGF2ZSB0byBzZW5kIGFsbCBhdCBvbmNlIG9uIGEgc29ja2V0PyAqLworI2RlZmlu
ZQlzb3NlbmRhbGxhdG9uY2Uoc28pIFwKKyAgICAoKHNvKS0+c29fcHJvdG8tPnByX2ZsYWdzICYg
UFJfQVRPTUlDKQorCisvKiBjYW4gd2UgcmVhZCBzb21ldGhpbmcgZnJvbSBzbz8gKi8KKyNkZWZp
bmUJc29yZWFkYWJsZShzbykgXAorICAgICgoaW50KSgoc28pLT5zb19yY3Yuc2JfY2MpID49IChz
byktPnNvX3Jjdi5zYl9sb3dhdCB8fCBcCisJKChzbyktPnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19D
QU5UUkNWTU9SRSkgfHwgXAorCSFUQUlMUV9FTVBUWSgmKHNvKS0+c29fY29tcCkgfHwgKHNvKS0+
c29fZXJyb3IpCisKKyNpZiAwICAvKiAgb3JpZ2luYWwgKi8KKyNkZWZpbmUgUFJfQ09OTlJFUVVJ
UkVEIDB4MDQgIC8qIGZyb20gc3lzL3Byb3Rvc3cuaCAibmVlZGVkIiBmb3Igc293cml0ZWFibGUg
Ki8KKyNkZWZpbmUJc293cml0ZWFibGUoc28pIFwKKyAgICAoKHNic3BhY2UoJihzbyktPnNvX3Nu
ZCkgPj0gKHNvKS0+c29fc25kLnNiX2xvd2F0ICYmIFwKKwkoKChzbyktPnNvX3N0YXRlJlNTX0lT
Q09OTkVDVEVEKSB8fCBcCisJICAoKHNvKS0+c29fcHJvdG8tPnByX2ZsYWdzJlBSX0NPTk5SRVFV
SVJFRCk9PTApKSB8fCBcCisgICAgICgoc28pLT5zb19zbmQuc2Jfc3RhdGUgJiBTQlNfQ0FOVFNF
TkRNT1JFKSB8fCBcCisgICAgIChzbyktPnNvX2Vycm9yKQorI2Vsc2UgIC8qIGxpbmUgd2l0aCBQ
Ul9DT05OUkVRVUlSRUQgcmVtb3ZlZCAqLworLyogY2FuIHdlIHdyaXRlIHNvbWV0aGluZyB0byBz
bz8gKi8KKyNkZWZpbmUJc293cml0ZWFibGUoc28pIFwKKyAgICAoKHNic3BhY2UoJihzbyktPnNv
X3NuZCkgPj0gKHNvKS0+c29fc25kLnNiX2xvd2F0ICYmIFwKKyAgICAgICgoKHNvKS0+c29fc3Rh
dGUmU1NfSVNDT05ORUNURUQpKSkgfHwgICAgICAgICAgICAgIFwKKyAgICAgKChzbyktPnNvX3Nu
ZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8IFwKKyAgICAgKHNvKS0+c29fZXJyb3Ip
CisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc29saXN0ZW5fcHJvdG8oc3RydWN0IHNvY2tldCAqc28s
IGludCBiYWNrbG9nKTsKK2V4dGVybiBpbnQgc29saXN0ZW5fcHJvdG9fY2hlY2soc3RydWN0IHNv
Y2tldCAqc28pOworZXh0ZXJuIGludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGJhY2tsb2csIHN0cnVjdCBwcm9jICpwKTsKK2V4dGVybiB2b2lkIHNvY2FudHJjdm1vcmVfbG9j
a2VkKHN0cnVjdCBzb2NrZXQgKnNvKTsKK2V4dGVybiBpbnQgc2N0cF9iaW5kKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBzY3RwNl9iaW5kKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHZvaWQgKnByb2MpOworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2V4dGVybiBpbnQgc2N0cGNvbm5fYmluZChzdHJ1Y3Qg
c29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKTsKKyNlbmRpZgorZXh0ZXJuIGludCBz
Y3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqYWRkcik7Citl
eHRlcm4gaW50IHNjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8sIHVpbnQz
Ml90IHZyZl9pZCk7CitleHRlcm4gaW50IHNjdHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywg
aW50IHByb3RvLCB1aW50MzJfdCB2cmZfaWQpOworZXh0ZXJuIGludCBzY3RwX2Fib3J0KHN0cnVj
dCBzb2NrZXQgKnNvKTsKK2V4dGVybiBpbnQgc2N0cDZfYWJvcnQoc3RydWN0IHNvY2tldCAqc28p
OworZXh0ZXJuIHZvaWQgc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbyk7CitleHRlcm4gaW50
IHNvYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOworZXh0
ZXJuIGludCBzb2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2cpOworZXh0ZXJu
IGludCAgc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcgc25kY2MsIHVfbG9uZyBy
Y3ZjYyk7CitleHRlcm4gdm9pZCBzb3dha2V1cChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2tidWYgKnNiKTsKK2V4dGVybiB2b2lkIHdha2V1cCh2b2lkICppZGVudCwgc3RydWN0IHNvY2tl
dCAqc28pOyAvKl9fVXNlcnNwYWNlX18gKi8KK2V4dGVybiBpbnQgdWlvbW92ZSh2b2lkICpjcCwg
aW50IG4sIHN0cnVjdCB1aW8gKnVpbyk7CitleHRlcm4gaW50IHNid2FpdChzdHJ1Y3Qgc29ja2J1
ZiAqc2IpOworZXh0ZXJuIGludCBzb2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pOworZXh0
ZXJuIGludCBzb2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFt
KTsKK2V4dGVybiBpbnQgc2N0cF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKTsKK2V4dGVy
biBpbnQgc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIpOworZXh0ZXJuIGludCBzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2V4dGVybiBpbnQg
c2N0cGNvbm5fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRy
KTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgc2N0cF9maW5pc2godm9pZCk7CisKKy8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogLS0tLS0gIG1h
Y3JvcyBjb3BpZWQgZnJvbSBhYm92ZSAtLS0tICovCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIERvIHdlIG5lZWQgdG8gbm90
aWZ5IHRoZSBvdGhlciBzaWRlIHdoZW4gSS9PIGlzIHBvc3NpYmxlPworICovCisjZGVmaW5lCXNi
X25vdGlmeShzYikJKCgoc2IpLT5zYl9mbGFncyAmIChTQl9XQUlUIHwgU0JfU0VMIHwgU0JfQVNZ
TkMgfCBcCisgICAgU0JfVVBDQUxMIHwgU0JfQUlPIHwgU0JfS05PVEUpKSAhPSAwKQorCisKKy8q
CisgKiBJbiBzb3J3YWtldXAoKSBhbmQgc293d2FrZXVwKCksIGFjcXVpcmUgdGhlIHNvY2tldCBi
dWZmZXIgbG9jayB0bworICogYXZvaWQgYSBub24tYXRvbWljIHRlc3QtYW5kLXdha2V1cC4gIEhv
d2V2ZXIsIHNvd2FrZXVwIGlzCisgKiByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBsb2Nr
IGlmIGl0IGlzIGNhbGxlZC4gIFdlIHVubG9jayBvbmx5CisgKiBpZiB3ZSBkb24ndCBjYWxsIGlu
dG8gc293YWtldXAuICBJZiBhbnkgY29kZSBpcyBpbnRyb2R1Y2VkIHRoYXQKKyAqIGRpcmVjdGx5
IGludm9rZXMgdGhlIHVuZGVybHlpbmcgc293YWtldXAoKSBwcmltaXRpdmVzLCBpdCBtdXN0Cisg
KiBtYWludGFpbiB0aGUgc2FtZSBzZW1hbnRpY3MuCisgKi8KKyNkZWZpbmUJc29yd2FrZXVwX2xv
Y2tlZChzbykgZG8gewkJCQkJXAorCVNPQ0tCVUZfTE9DS19BU1NFUlQoJihzbyktPnNvX3Jjdik7
CQkJCVwKKwlpZiAoc2Jfbm90aWZ5KCYoc28pLT5zb19yY3YpKQkJCQkJXAorCQlzb3dha2V1cCgo
c28pLCAmKHNvKS0+c29fcmN2KTsJIAkJCVwKKwllbHNlCQkJCQkJCQlcCisJCVNPQ0tCVUZfVU5M
T0NLKCYoc28pLT5zb19yY3YpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCXNvcndha2V1
cChzbykgZG8gewkJCQkJCVwKKwlTT0NLQlVGX0xPQ0soJihzbyktPnNvX3Jjdik7CQkJCQlcCisJ
c29yd2FrZXVwX2xvY2tlZChzbyk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlzb3d3
YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlcCisJU09DS0JVRl9MT0NLX0FTU0VSVCgmKHNvKS0+
c29fc25kKTsJCQkJXAorCWlmIChzYl9ub3RpZnkoJihzbyktPnNvX3NuZCkpCQkJCQlcCisJCXNv
d2FrZXVwKChzbyksICYoc28pLT5zb19zbmQpOyAJCQkJXAorCWVsc2UJCQkJCQkJCVwKKwkJU09D
S0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJ
c293d2FrZXVwKHNvKSBkbyB7CQkJCQkJXAorCVNPQ0tCVUZfTE9DSygmKHNvKS0+c29fc25kKTsJ
CQkJCVwKKwlzb3d3YWtldXBfbG9ja2VkKHNvKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisKKwor
I2VuZGlmIC8qIF9fVXNlcnNwYWNlX18gKi8KKworI2VuZGlmIC8qICFfU1lTX1NPQ0tFVFZBUl9I
XyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3VtYS5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c2VyX3VtYS5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLjFiZGVmZGI4MDk2OGFlOWM0OWVmNGViMGEyNWZhMWE5Y2U5YTRiNDIg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL3VzZXJfdW1hLmgKQEAgLTAsMCArMSw5OCBAQAorLyotCisgKiBDb3B5cmln
aHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAg
SHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVy
CisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICog
U1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVVNFUl9VTUFfSF8KKyNkZWZpbmUgX1VTRVJf
VU1BX0hfCisKKyNkZWZpbmUgVU1BX1pGTEFHX0ZVTEwJCTB4NDAwMDAwMDAJLyogUmVhY2hlZCB1
el9tYXhwYWdlcyAqLworI2RlZmluZSBVTUFfQUxJR05fUFRSCShzaXplb2Yodm9pZCAqKSAtIDEp
CS8qIEFsaWdubWVudCBmaXQgZm9yIHB0ciAqLworCisvKiBfX1VzZXJzcGFjZV9fIEFsbCB0aGVz
ZSBkZWZpbml0aW9ucyB3aWxsIGNoYW5nZSBmb3IKK3VzZXJzcGFjZSBVbml2ZXJzYWwgTWVtb3J5
IEFsbG9jYXRvciAoVU1BKS4gVGhlc2UgYXJlIGluY2x1ZGVkCitmb3IgcmVmZXJlbmNlIHB1cnBv
c2VzIGFuZCB0byBhdm9pZCBjb21waWxlIGVycm9ycyBmb3IgdGhlIHRpbWUgYmVpbmcuCisqLwor
dHlwZWRlZiBpbnQgKCp1bWFfY3Rvcikodm9pZCAqbWVtLCBpbnQgc2l6ZSwgdm9pZCAqYXJnLCBp
bnQgZmxhZ3MpOwordHlwZWRlZiB2b2lkICgqdW1hX2R0b3IpKHZvaWQgKm1lbSwgaW50IHNpemUs
IHZvaWQgKmFyZyk7Cit0eXBlZGVmIGludCAoKnVtYV9pbml0KSh2b2lkICptZW0sIGludCBzaXpl
LCBpbnQgZmxhZ3MpOwordHlwZWRlZiB2b2lkICgqdW1hX2ZpbmkpKHZvaWQgKm1lbSwgaW50IHNp
emUpOwordHlwZWRlZiBzdHJ1Y3QgdW1hX3pvbmUgKiB1bWFfem9uZV90OwordHlwZWRlZiBzdHJ1
Y3QgdW1hX2tlZyAqIHVtYV9rZWdfdDsKKworc3RydWN0IHVtYV9jYWNoZSB7CisgICAgaW50IHN0
dWI7IC8qIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLworfTsKKworc3RydWN0IHVtYV9rZWcgeworICAg
IGludCBzdHViOyAvKiBUT0RPIF9fVXNlcnNwYWNlX18gKi8KK307CisKK3N0cnVjdCB1bWFfem9u
ZSB7CisJY2hhcgkJKnV6X25hbWU7CS8qIFRleHQgbmFtZSBvZiB0aGUgem9uZSAqLworCXN0cnVj
dCBtdHgJKnV6X2xvY2s7CS8qIExvY2sgZm9yIHRoZSB6b25lIChrZWcncyBsb2NrKSAqLworCXVt
YV9rZWdfdAl1el9rZWc7CQkvKiBPdXIgdW5kZXJseWluZyBLZWcgKi8KKworCUxJU1RfRU5UUlko
dW1hX3pvbmUpCXV6X2xpbms7CS8qIExpc3Qgb2YgYWxsIHpvbmVzIGluIGtlZyAqLworCUxJU1Rf
SEVBRCgsdW1hX2J1Y2tldCkJdXpfZnVsbF9idWNrZXQ7CS8qIGZ1bGwgYnVja2V0cyAqLworCUxJ
U1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnJlZV9idWNrZXQ7CS8qIEJ1Y2tldHMgZm9yIGZyZWVz
ICovCisKKwl1bWFfY3Rvcgl1el9jdG9yOwkvKiBDb25zdHJ1Y3RvciBmb3IgZWFjaCBhbGxvY2F0
aW9uICovCisJdW1hX2R0b3IJdXpfZHRvcjsJLyogRGVzdHJ1Y3RvciAqLworCXVtYV9pbml0CXV6
X2luaXQ7CS8qIEluaXRpYWxpemVyIGZvciBlYWNoIGl0ZW0gKi8KKwl1bWFfZmluaQl1el9maW5p
OwkvKiBEaXNjYXJkcyBtZW1vcnkgKi8KKworCXVfaW50NjRfdAl1el9hbGxvY3M7CS8qIFRvdGFs
IG51bWJlciBvZiBhbGxvY2F0aW9ucyAqLworCXVfaW50NjRfdAl1el9mcmVlczsJLyogVG90YWwg
bnVtYmVyIG9mIGZyZWVzICovCisJdV9pbnQ2NF90CXV6X2ZhaWxzOwkvKiBUb3RhbCBudW1iZXIg
b2YgYWxsb2MgZmFpbHVyZXMgKi8KKwl1aW50MTZfdAl1el9maWxsczsJLyogT3V0c3RhbmRpbmcg
YnVja2V0IGZpbGxzICovCisJdWludDE2X3QJdXpfY291bnQ7CS8qIEhpZ2hlc3QgdmFsdWUgdWJf
cHRyIGNhbiBoYXZlICovCisKKwkvKgorCSAqIFRoaXMgSEFTIHRvIGJlIHRoZSBsYXN0IGl0ZW0g
YmVjYXVzZSB3ZSBhZGp1c3QgdGhlIHpvbmUgc2l6ZQorCSAqIGJhc2VkIG9uIE5DUFUgYW5kIHRo
ZW4gYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgem9uZXMuCisJICovCisJc3RydWN0IHVtYV9j
YWNoZQl1el9jcHVbMV07CS8qIFBlciBjcHUgY2FjaGVzICovCit9OworCisvKiBQcm90b3R5cGUg
Ki8KK3VtYV96b25lX3QKK3VtYV96Y3JlYXRlKGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCB1bWFf
Y3RvciBjdG9yLCB1bWFfZHRvciBkdG9yLAorCSAgICB1bWFfaW5pdCB1bWluaXQsIHVtYV9maW5p
IGZpbmksIGludCBhbGlnbiwgdV9pbnQzMl90IGZsYWdzKTsKKworCisjZGVmaW5lIHVtYV96b25l
X3NldF9tYXgoem9uZSwgbnVtYmVyKSAvKiBzdHViIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLworCit1
bWFfem9uZV90Cit1bWFfemNyZWF0ZShjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdW1hX2N0b3Ig
Y3RvciwgdW1hX2R0b3IgZHRvciwKKwkgICAgdW1hX2luaXQgdW1pbml0LCB1bWFfZmluaSBmaW5p
LCBpbnQgYWxpZ24sIHVfaW50MzJfdCBmbGFncykKK3sKKyAgICByZXR1cm4gTlVMTDsgLyogc3R1
YiBUT0RPIF9fVXNlcnNwYWNlX18uIEFsc28gcGxhY2UgaW1wbGVtZW50YXRpb24gaW4gYSBzZXBh
cmF0ZSAuYyBmaWxlICovCisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi91c3JzY3RwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzcnNjdHAuaAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5lOTMzYzE0NWVmYjUwNzQzN2Ni
MGFiMWFiZjE3NTk1ZjkzOTNhYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
cnNjdHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzcnNjdHAuaApAQCAtMCwwICsxLDEy
ODAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYKKyAqIENv
cHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEgS2FtYWwKKyAqIENvcHlyaWdodCAoYykgMjAx
MS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFl
bCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX19VU1JT
Q1RQX0hfXworI2RlZmluZSBfX1VTUlNDVFBfSF9fCisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4
dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2lmZGVmIF9XSU4zMgorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmco
ZGlzYWJsZTogNDIwMCkKKyNlbmRpZgorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8
d3MydGNwaXAuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvaW4uaD4KKyNlbmRpZgorCisjaWZuZGVmIE1TR19OT1RJRklDQVRJT04KKy8qIFRoaXMg
ZGVmaW5pdGlvbiBNVVNUIGJlIGluIHN5bmMgd2l0aCB1c3JzY3RwbGliL3VzZXJfc29ja2V0dmFy
LmggKi8KKyNkZWZpbmUgTVNHX05PVElGSUNBVElPTiAweDIwMDAKKyNlbmRpZgorCisjaWZuZGVm
IElQUFJPVE9fU0NUUAorLyogVGhpcyBpcyB0aGUgSUFOQSBhc3NpZ25lZCBwcm90b2NvbCBudW1i
ZXIgb2YgU0NUUC4gKi8KKyNkZWZpbmUgSVBQUk9UT19TQ1RQIDEzMgorI2VuZGlmCisKKyNpZmRl
ZiBfV0lOMzIKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZFUiA+PSAxNjAwCisjaW5j
bHVkZSA8c3RkaW50Lmg+CisjZWxpZiBkZWZpbmVkKFNDVFBfU1RESU5UX0lOQ0xVREUpCisjaW5j
bHVkZSBTQ1RQX1NURElOVF9JTkNMVURFCisjZWxzZQorI2RlZmluZSB1aW50OF90ICAgdW5zaWdu
ZWQgX19pbnQ4CisjZGVmaW5lIHVpbnQxNl90ICB1bnNpZ25lZCBfX2ludDE2CisjZGVmaW5lIHVp
bnQzMl90ICB1bnNpZ25lZCBfX2ludDMyCisjZGVmaW5lIHVpbnQ2NF90ICB1bnNpZ25lZCBfX2lu
dDY0CisjZGVmaW5lIGludDE2X3QgICBfX2ludDE2CisjZGVmaW5lIGludDMyX3QgICBfX2ludDMy
CisjZW5kaWYKKworI2RlZmluZSBzc2l6ZV90ICAgX19pbnQ2NAorI2RlZmluZSBNU0dfRU9SICAg
MHg4CisjaWZuZGVmIEVXT1VMREJMT0NLCisjZGVmaW5lIEVXT1VMREJMT0NLICBXU0FFV09VTERC
TE9DSworI2VuZGlmCisjaWZuZGVmIEVJTlBST0dSRVNTCisjZGVmaW5lIEVJTlBST0dSRVNTICBX
U0FFSU5QUk9HUkVTUworI2VuZGlmCisjZGVmaW5lIFNIVVRfUkQgICAgMQorI2RlZmluZSBTSFVU
X1dSICAgIDIKKyNkZWZpbmUgU0hVVF9SRFdSICAzCisjZW5kaWYKKwordHlwZWRlZiB1aW50MzJf
dCBzY3RwX2Fzc29jX3Q7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfTVNDX1ZF
UikKKyNwcmFnbWEgcGFjayAocHVzaCwgMSkKKyNkZWZpbmUgU0NUUF9QQUNLRUQKKyNlbHNlCisj
ZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZW5kaWYKKworc3Ry
dWN0IHNjdHBfY29tbW9uX2hlYWRlciB7CisJdWludDE2X3Qgc291cmNlX3BvcnQ7CisJdWludDE2
X3QgZGVzdGluYXRpb25fcG9ydDsKKwl1aW50MzJfdCB2ZXJpZmljYXRpb25fdGFnOworCXVpbnQz
Ml90IGNyYzMyYzsKK30gU0NUUF9QQUNLRUQ7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYgZGVm
aW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgcGFjayhwb3ApCisjZW5kaWYKKyN1bmRlZiBTQ1RQX1BB
Q0tFRAorCisjZGVmaW5lIEFGX0NPTk4gMTIzCisvKiBUaGUgZGVmaW5pdGlvbiBvZiBzdHJ1Y3Qg
c29ja2FkZHJfY29ubiBNVVNUIGJlIGluCisgKiB0dW5lIHdpdGggb3RoZXIgc29ja2FkZHJfKiBz
dHJ1Y3R1cmVzLgorICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19CaXRy
aWdfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKQorc3Ry
dWN0IHNvY2thZGRyX2Nvbm4geworCXVpbnQ4X3Qgc2Nvbm5fbGVuOworCXVpbnQ4X3Qgc2Nvbm5f
ZmFtaWx5OworCXVpbnQxNl90IHNjb25uX3BvcnQ7CisJdm9pZCAqc2Nvbm5fYWRkcjsKK307Cisj
ZWxzZQorc3RydWN0IHNvY2thZGRyX2Nvbm4geworCXVpbnQxNl90IHNjb25uX2ZhbWlseTsKKwl1
aW50MTZfdCBzY29ubl9wb3J0OworCXZvaWQgKnNjb25uX2FkZHI7Cit9OworI2VuZGlmCisKK3Vu
aW9uIHNjdHBfc29ja3N0b3JlIHsKKyNpZiBkZWZpbmVkKElORVQpCisJc3RydWN0IHNvY2thZGRy
X2luIHNpbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJc3RydWN0IHNvY2thZGRyX2lu
NiBzaW42OworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisJc3RydWN0IHNv
Y2thZGRyIHNhOworfTsKKworI2RlZmluZSBTQ1RQX0ZVVFVSRV9BU1NPQyAgMAorI2RlZmluZSBT
Q1RQX0NVUlJFTlRfQVNTT0MgMQorI2RlZmluZSBTQ1RQX0FMTF9BU1NPQyAgICAgMgorCisvKioq
ICBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyB0byB1c2UgdGhlIHNvY2tldCBBUEkgICoqKi8K
KworI2RlZmluZSBTQ1RQX0FMSUdOX1JFU1ZfUEFEIDkyCisjZGVmaW5lIFNDVFBfQUxJR05fUkVT
Vl9QQURfU0hPUlQgNzYKKworc3RydWN0IHNjdHBfcmN2aW5mbyB7CisJdWludDE2X3QgcmN2X3Np
ZDsKKwl1aW50MTZfdCByY3Zfc3NuOworCXVpbnQxNl90IHJjdl9mbGFnczsKKwl1aW50MzJfdCBy
Y3ZfcHBpZDsKKwl1aW50MzJfdCByY3ZfdHNuOworCXVpbnQzMl90IHJjdl9jdW10c247CisJdWlu
dDMyX3QgcmN2X2NvbnRleHQ7CisJc2N0cF9hc3NvY190IHJjdl9hc3NvY19pZDsKK307CisKK3N0
cnVjdCBzY3RwX254dGluZm8geworCXVpbnQxNl90IG54dF9zaWQ7CisJdWludDE2X3Qgbnh0X2Zs
YWdzOworCXVpbnQzMl90IG54dF9wcGlkOworCXVpbnQzMl90IG54dF9sZW5ndGg7CisJc2N0cF9h
c3NvY190IG54dF9hc3NvY19pZDsKK307CisKKyNkZWZpbmUgU0NUUF9OT19ORVhUX01TRyAgICAg
ICAgICAgMHgwMDAwCisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfQVZBSUwgICAgICAgIDB4MDAwMQor
I2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9O
RVhUX01TR19JU19VTk9SREVSRUQgMHgwMDA0CisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNfTk9U
SUZJQ0FUSU9OIDB4MDAwOAorCitzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiB7CisJc3RydWN0IHNjdHBf
cmN2aW5mbyByZWN2dl9yY3ZpbmZvOworCXN0cnVjdCBzY3RwX254dGluZm8gcmVjdnZfbnh0aW5m
bzsKK307CisKKyNkZWZpbmUgU0NUUF9SRUNWVl9OT0lORk8gIDAKKyNkZWZpbmUgU0NUUF9SRUNW
Vl9SQ1ZJTkZPIDEKKyNkZWZpbmUgU0NUUF9SRUNWVl9OWFRJTkZPIDIKKyNkZWZpbmUgU0NUUF9S
RUNWVl9STiAgICAgIDMKKworI2RlZmluZSBTQ1RQX1NFTkRWX05PSU5GTyAgIDAKKyNkZWZpbmUg
U0NUUF9TRU5EVl9TTkRJTkZPICAxCisjZGVmaW5lIFNDVFBfU0VORFZfUFJJTkZPICAgMgorI2Rl
ZmluZSBTQ1RQX1NFTkRWX0FVVEhJTkZPIDMKKyNkZWZpbmUgU0NUUF9TRU5EVl9TUEEgICAgICA0
CisKKyNkZWZpbmUgU0NUUF9TRU5EX1NORElORk9fVkFMSUQgIDB4MDAwMDAwMDEKKyNkZWZpbmUg
U0NUUF9TRU5EX1BSSU5GT19WQUxJRCAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9TRU5EX0FV
VEhJTkZPX1ZBTElEIDB4MDAwMDAwMDQKKworc3RydWN0IHNjdHBfc25kX2FsbF9jb21wbGV0ZXMg
eworCXVpbnQxNl90IHNhbGxfc3RyZWFtOworCXVpbnQxNl90IHNhbGxfZmxhZ3M7CisJdWludDMy
X3Qgc2FsbF9wcGlkOworCXVpbnQzMl90IHNhbGxfY29udGV4dDsKKwl1aW50MzJfdCBzYWxsX251
bV9zZW50OworCXVpbnQzMl90IHNhbGxfbnVtX2ZhaWxlZDsKK307CisKK3N0cnVjdCBzY3RwX3Nu
ZGluZm8geworCXVpbnQxNl90IHNuZF9zaWQ7CisJdWludDE2X3Qgc25kX2ZsYWdzOworCXVpbnQz
Ml90IHNuZF9wcGlkOworCXVpbnQzMl90IHNuZF9jb250ZXh0OworCXNjdHBfYXNzb2NfdCBzbmRf
YXNzb2NfaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wcmluZm8geworCXVpbnQxNl90IHByX3BvbGlj
eTsKKwl1aW50MzJfdCBwcl92YWx1ZTsKK307CisKK3N0cnVjdCBzY3RwX2F1dGhpbmZvIHsKKwl1
aW50MTZfdCBhdXRoX2tleW51bWJlcjsKK307CisKK3N0cnVjdCBzY3RwX3NlbmR2X3NwYSB7CisJ
dWludDMyX3Qgc2VuZHZfZmxhZ3M7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzZW5kdl9zbmRpbmZv
OworCXN0cnVjdCBzY3RwX3ByaW5mbyBzZW5kdl9wcmluZm87CisJc3RydWN0IHNjdHBfYXV0aGlu
Zm8gc2VuZHZfYXV0aGluZm87Cit9OworCitzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgeworCXN0cnVj
dCBzb2NrYWRkcl9zdG9yYWdlIHN1ZV9hZGRyZXNzOworCXVpbnQzMl90IHN1ZV9hc3NvY19pZDsK
Kwl1aW50MTZfdCBzdWVfcG9ydDsKK307CisKKy8qKioqKioqKiAgTm90aWZpY2F0aW9ucyAgKioq
KioqKioqKioqKiovCisKKy8qIG5vdGlmaWNhdGlvbiB0eXBlcyAqLworI2RlZmluZSBTQ1RQX0FT
U09DX0NIQU5HRSAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIFNDVFBfUEVFUl9BRERS
X0NIQU5HRSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgICAg
ICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEICAgICAgICAgICAg
ICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfU0hVVERPV05fRVZFTlQgICAgICAgICAgICAgICAw
eDAwMDUKKyNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04gICAgICAgIDB4MDAwNgor
I2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQgICAgICAgMHgwMDA3CisjZGVmaW5l
IFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQgICAgICAgICAweDAwMDgKKyNkZWZpbmUgU0NUUF9T
VFJFQU1fUkVTRVRfRVZFTlQgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBTQ1RQX1NFTkRFUl9E
UllfRVZFTlQgICAgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIFNDVFBfTk9USUZJQ0FUSU9OU19T
VE9QUEVEX0VWRU5UICAweDAwMGIKKyNkZWZpbmUgU0NUUF9BU1NPQ19SRVNFVF9FVkVOVCAgICAg
ICAgICAgIDB4MDAwYworI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQgICAgICAgICAg
MHgwMDBkCisjZGVmaW5lIFNDVFBfU0VORF9GQUlMRURfRVZFTlQgICAgICAgICAgICAweDAwMGUK
KworLyogbm90aWZpY2F0aW9uIGV2ZW50IHN0cnVjdHVyZXMgKi8KKworCisvKiBhc3NvY2lhdGlv
biBjaGFuZ2UgZXZlbnQgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSB7CisJdWludDE2X3Qg
c2FjX3R5cGU7CisJdWludDE2X3Qgc2FjX2ZsYWdzOworCXVpbnQzMl90IHNhY19sZW5ndGg7CisJ
dWludDE2X3Qgc2FjX3N0YXRlOworCXVpbnQxNl90IHNhY19lcnJvcjsKKwl1aW50MTZfdCBzYWNf
b3V0Ym91bmRfc3RyZWFtczsKKwl1aW50MTZfdCBzYWNfaW5ib3VuZF9zdHJlYW1zOworCXNjdHBf
YXNzb2NfdCBzYWNfYXNzb2NfaWQ7CisJdWludDhfdCBzYWNfaW5mb1tdOyAvKiBub3QgYXZhaWxh
YmxlIHlldCAqLworfTsKKworLyogc2FjX3N0YXRlIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0NP
TU1fVVAgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0NPTU1fTE9TVCAgICAgIDB4MDAwMgor
I2RlZmluZSBTQ1RQX1JFU1RBUlQgICAgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX1NIVVRET1dO
X0NPTVAgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0NBTlRfU1RSX0FTU09DIDB4MDAwNQorCisvKiBz
YWNfaW5mbyB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19QUiAgICAgICAg
MHgwMQorI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FVVEggICAgICAweDAyCisjZGVmaW5l
IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9BU1NPQ19T
VVBQT1JUU19NVUxUSUJVRiAgMHgwNAorI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NP
TkZJRyAweDA1CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfTUFYICAgICAgIDB4MDUKKwor
LyogQWRkcmVzcyBldmVudCAqLworc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHsKKwl1aW50MTZf
dCBzcGNfdHlwZTsKKwl1aW50MTZfdCBzcGNfZmxhZ3M7CisJdWludDMyX3Qgc3BjX2xlbmd0aDsK
KwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGNfYWFkZHI7CisJdWludDMyX3Qgc3BjX3N0YXRl
OworCXVpbnQzMl90IHNwY19lcnJvcjsKKwlzY3RwX2Fzc29jX3Qgc3BjX2Fzc29jX2lkOworCXVp
bnQ4X3Qgc3BjX3BhZGRpbmdbNF07Cit9OworCisvKiBwYWRkciBzdGF0ZSB2YWx1ZXMgKi8KKyNk
ZWZpbmUgU0NUUF9BRERSX0FWQUlMQUJMRSAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0FERFJfVU5S
RUFDSEFCTEUgMHgwMDAyCisjZGVmaW5lIFNDVFBfQUREUl9SRU1PVkVEICAgICAweDAwMDMKKyNk
ZWZpbmUgU0NUUF9BRERSX0FEREVEICAgICAgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0FERFJfTUFE
RV9QUklNICAgMHgwMDA1CisjZGVmaW5lIFNDVFBfQUREUl9DT05GSVJNRUQgICAweDAwMDYKKwor
LyogcmVtb3RlIGVycm9yIGV2ZW50cyAqLworc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yIHsKKwl1
aW50MTZfdCBzcmVfdHlwZTsKKwl1aW50MTZfdCBzcmVfZmxhZ3M7CisJdWludDMyX3Qgc3JlX2xl
bmd0aDsKKwl1aW50MTZfdCBzcmVfZXJyb3I7CisJc2N0cF9hc3NvY190IHNyZV9hc3NvY19pZDsK
Kwl1aW50OF90IHNyZV9kYXRhWzRdOworfTsKKworLyogc2h1dGRvd24gZXZlbnQgKi8KK3N0cnVj
dCBzY3RwX3NodXRkb3duX2V2ZW50IHsKKwl1aW50MTZfdCBzc2VfdHlwZTsKKwl1aW50MTZfdCBz
c2VfZmxhZ3M7CisJdWludDMyX3Qgc3NlX2xlbmd0aDsKKwlzY3RwX2Fzc29jX3Qgc3NlX2Fzc29j
X2lkOworfTsKKworLyogQWRhcHRhdGlvbiBsYXllciBpbmRpY2F0aW9uICovCitzdHJ1Y3Qgc2N0
cF9hZGFwdGF0aW9uX2V2ZW50IHsKKwl1aW50MTZfdCBzYWlfdHlwZTsKKwl1aW50MTZfdCBzYWlf
ZmxhZ3M7CisJdWludDMyX3Qgc2FpX2xlbmd0aDsKKwl1aW50MzJfdCBzYWlfYWRhcHRhdGlvbl9p
bmQ7CisJc2N0cF9hc3NvY190IHNhaV9hc3NvY19pZDsKK307CisKKy8qIFBhcnRpYWwgZGVsaXZl
cnkgZXZlbnQgKi8KK3N0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHsKKwl1aW50MTZfdCBwZGFwaV90
eXBlOworCXVpbnQxNl90IHBkYXBpX2ZsYWdzOworCXVpbnQzMl90IHBkYXBpX2xlbmd0aDsKKwl1
aW50MzJfdCBwZGFwaV9pbmRpY2F0aW9uOworCXVpbnQzMl90IHBkYXBpX3N0cmVhbTsKKwl1aW50
MzJfdCBwZGFwaV9zZXE7CisJc2N0cF9hc3NvY190IHBkYXBpX2Fzc29jX2lkOworfTsKKworLyog
aW5kaWNhdGlvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0FCT1JU
RUQgIDB4MDAwMQorCisvKiBTQ1RQIGF1dGhlbnRpY2F0aW9uIGV2ZW50ICovCitzdHJ1Y3Qgc2N0
cF9hdXRoa2V5X2V2ZW50IHsKKwl1aW50MTZfdCBhdXRoX3R5cGU7CisJdWludDE2X3QgYXV0aF9m
bGFnczsKKwl1aW50MzJfdCBhdXRoX2xlbmd0aDsKKwl1aW50MTZfdCBhdXRoX2tleW51bWJlcjsK
Kwl1aW50MzJfdCBhdXRoX2luZGljYXRpb247CisJc2N0cF9hc3NvY190IGF1dGhfYXNzb2NfaWQ7
Cit9OworCisvKiBpbmRpY2F0aW9uIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0FVVEhfTkVXX0tF
WSAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0FVVEhfTk9fQVVUSCAgIDB4MDAwMgorI2RlZmluZSBT
Q1RQX0FVVEhfRlJFRV9LRVkgIDB4MDAwMworCisvKiBTQ1RQIHNlbmRlciBkcnkgZXZlbnQgKi8K
K3N0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgeworCXVpbnQxNl90IHNlbmRlcl9kcnlfdHlw
ZTsKKwl1aW50MTZfdCBzZW5kZXJfZHJ5X2ZsYWdzOworCXVpbnQzMl90IHNlbmRlcl9kcnlfbGVu
Z3RoOworCXNjdHBfYXNzb2NfdCBzZW5kZXJfZHJ5X2Fzc29jX2lkOworfTsKKworCisvKiBTdHJl
YW0gcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQgKi8K
K3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCB7CisJdWludDE2X3Qgc3RycmVzZXRfdHlw
ZTsKKwl1aW50MTZfdCBzdHJyZXNldF9mbGFnczsKKwl1aW50MzJfdCBzdHJyZXNldF9sZW5ndGg7
CisJc2N0cF9hc3NvY190IHN0cnJlc2V0X2Fzc29jX2lkOworCXVpbnQxNl90IHN0cnJlc2V0X3N0
cmVhbV9saXN0W107Cit9OworCisvKiBmbGFncyBpbiBzdHJlYW1fcmVzZXRfZXZlbnQgKHN0cnJl
c2V0X2ZsYWdzKSAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR19TU04gIDB4
MDAwMQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04gIDB4MDAwMgorI2Rl
ZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9ERU5JRUQgICAgICAgIDB4MDAwNCAvKiBTQ1RQX1NUUlJF
U0VUX0ZBSUxFRCAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9GQUlMRUQgICAgICAgIDB4
MDAwOCAvKiBTQ1RQX1NUUlJFU0VUX0ZBSUxFRCAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFO
R0VEX0RFTklFRCAgICAgIDB4MDAxMAorCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09N
SU5HICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lORyAg
ICAgIDB4MDAwMDAwMDIKKworCisvKiBBc3NvYyByZXNldCBldmVudCAtIHN1YnNjcmliZSB0byBT
Q1RQX0FTU09DX1JFU0VUX0VWRU5UICovCitzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCB7
CisJdWludDE2X3QgYXNzb2NyZXNldF90eXBlOworCXVpbnQxNl90IGFzc29jcmVzZXRfZmxhZ3M7
CisJdWludDMyX3QgYXNzb2NyZXNldF9sZW5ndGg7CisJc2N0cF9hc3NvY190IGFzc29jcmVzZXRf
YXNzb2NfaWQ7CisJdWludDMyX3QgYXNzb2NyZXNldF9sb2NhbF90c247CisJdWludDMyX3QgYXNz
b2NyZXNldF9yZW1vdGVfdHNuOworfTsKKworI2RlZmluZSBTQ1RQX0FTU09DX1JFU0VUX0RFTklF
RCAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRfRkFJTEVEICAgICAgICAw
eDAwMDgKKworCisvKiBTdHJlYW0gY2hhbmdlIGV2ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfU1RS
RUFNX0NIQU5HRV9FVkVOVCAqLworc3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCB7CisJ
dWludDE2X3Qgc3RyY2hhbmdlX3R5cGU7CisJdWludDE2X3Qgc3RyY2hhbmdlX2ZsYWdzOworCXVp
bnQzMl90IHN0cmNoYW5nZV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHN0cmNoYW5nZV9hc3NvY19p
ZDsKKwl1aW50MTZfdCBzdHJjaGFuZ2VfaW5zdHJtczsKKwl1aW50MTZfdCBzdHJjaGFuZ2Vfb3V0
c3RybXM7Cit9OworCisjZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9ERU5JRUQJMHgwMDA0Cisj
ZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQJMHgwMDA4CisKKworLyogU0NUUCBzZW5k
IGZhaWxlZCBldmVudCAqLworc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgeworCXVpbnQx
Nl90IHNzZmVfdHlwZTsKKwl1aW50MTZfdCBzc2ZlX2ZsYWdzOworCXVpbnQzMl90IHNzZmVfbGVu
Z3RoOworCXVpbnQzMl90IHNzZmVfZXJyb3I7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzc2ZlX2lu
Zm87CisJc2N0cF9hc3NvY190IHNzZmVfYXNzb2NfaWQ7CisJdWludDhfdCAgc3NmZV9kYXRhW107
Cit9OworCisvKiBmbGFnIHRoYXQgaW5kaWNhdGVzIHN0YXRlIG9mIGRhdGEgKi8KKyNkZWZpbmUg
U0NUUF9EQVRBX1VOU0VOVCAgMHgwMDAxCS8qIGlucXVldWUgbmV2ZXIgb24gd2lyZSAqLworI2Rl
ZmluZSBTQ1RQX0RBVEFfU0VOVCAgICAweDAwMDIJLyogb24gd2lyZSBhdCBmYWlsdXJlICovCisK
Ky8qIFNDVFAgZXZlbnQgb3B0aW9uICovCitzdHJ1Y3Qgc2N0cF9ldmVudCB7CisJc2N0cF9hc3Nv
Y190ICAgc2VfYXNzb2NfaWQ7CisJdWludDE2X3QgICAgICAgc2VfdHlwZTsKKwl1aW50OF90ICAg
ICAgICBzZV9vbjsKK307CisKK3VuaW9uIHNjdHBfbm90aWZpY2F0aW9uIHsKKwlzdHJ1Y3Qgc2N0
cF90bHYgeworCQl1aW50MTZfdCBzbl90eXBlOworCQl1aW50MTZfdCBzbl9mbGFnczsKKwkJdWlu
dDMyX3Qgc25fbGVuZ3RoOworCX0gc25faGVhZGVyOworCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5n
ZSBzbl9hc3NvY19jaGFuZ2U7CisJc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHNuX3BhZGRyX2No
YW5nZTsKKwlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igc25fcmVtb3RlX2Vycm9yOworCXN0cnVj
dCBzY3RwX3NodXRkb3duX2V2ZW50IHNuX3NodXRkb3duX2V2ZW50OworCXN0cnVjdCBzY3RwX2Fk
YXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlvbl9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9wZGFwaV9l
dmVudCBzbl9wZGFwaV9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHNuX2F1dGhf
ZXZlbnQ7CisJc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCBzbl9zZW5kZXJfZHJ5X2V2ZW50
OworCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHNuX3NlbmRfZmFpbGVkX2V2ZW50Owor
CXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCBzbl9zdHJyZXNldF9ldmVudDsKKwlzdHJ1
Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgc25fYXNzb2NyZXNldF9ldmVudDsKKwlzdHJ1Y3Qg
c2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHNuX3N0cmNoYW5nZV9ldmVudDsKK307CisKK3N0cnVj
dCBzY3RwX2V2ZW50X3N1YnNjcmliZSB7CisJdWludDhfdCBzY3RwX2RhdGFfaW9fZXZlbnQ7CisJ
dWludDhfdCBzY3RwX2Fzc29jaWF0aW9uX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hZGRyZXNzX2V2
ZW50OworCXVpbnQ4X3Qgc2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQ7CisJdWludDhfdCBzY3RwX3Bl
ZXJfZXJyb3JfZXZlbnQ7CisJdWludDhfdCBzY3RwX3NodXRkb3duX2V2ZW50OworCXVpbnQ4X3Qg
c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hZGFwdGF0aW9uX2xh
eWVyX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hdXRoZW50aWNhdGlvbl9ldmVudDsKKwl1aW50OF90
IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKKwl1aW50OF90IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50
OworfTsKKworCisKKy8qIEZsYWdzIHRoYXQgZ28gaW50byB0aGUgc2luZm8tPnNpbmZvX2ZsYWdz
IGZpZWxkICovCisjZGVmaW5lIFNDVFBfTk9USUZJQ0FUSU9OICAgICAweDAwMTAgLyogbmV4dCBt
ZXNzYWdlIGlzIGEgbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFNDVFBfQ09NUExFVEUgICAgICAg
ICAweDAwMjAgLyogbmV4dCBtZXNzYWdlIGlzIGNvbXBsZXRlICovCisjZGVmaW5lIFNDVFBfRU9G
ICAgICAgICAgICAgICAweDAxMDAgLyogU3RhcnQgc2h1dGRvd24gcHJvY2VkdXJlcyAqLworI2Rl
ZmluZSBTQ1RQX0FCT1JUICAgICAgICAgICAgMHgwMjAwIC8qIFNlbmQgYW4gQUJPUlQgdG8gcGVl
ciAqLworI2RlZmluZSBTQ1RQX1VOT1JERVJFRCAgICAgICAgMHgwNDAwIC8qIE1lc3NhZ2UgaXMg
dW4tb3JkZXJlZCAqLworI2RlZmluZSBTQ1RQX0FERFJfT1ZFUiAgICAgICAgMHgwODAwIC8qIE92
ZXJyaWRlIHRoZSBwcmltYXJ5LWFkZHJlc3MgKi8KKyNkZWZpbmUgU0NUUF9TRU5EQUxMICAgICAg
ICAgIDB4MTAwMCAvKiBTZW5kIHRoaXMgb24gYWxsIGFzc29jaWF0aW9ucyAqLworI2RlZmluZSBT
Q1RQX0VPUiAgICAgICAgICAgICAgMHgyMDAwIC8qIGVuZCBvZiBtZXNzYWdlIHNpZ25hbCAqLwor
I2RlZmluZSBTQ1RQX1NBQ0tfSU1NRURJQVRFTFkgMHg0MDAwIC8qIFNldCBJLUJpdCAqLworCisj
ZGVmaW5lIElOVkFMSURfU0lORk9fRkxBRyh4KSAoKCh4KSAmIDB4ZmZmZmZmZjAgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KFNDVFBfRU9GIHwgU0NUUF9BQk9SVCB8
IFNDVFBfVU5PUkRFUkVEIHxcCisJCQkJICAgICAgICBTQ1RQX0FERFJfT1ZFUiB8IFNDVFBfU0VO
REFMTCB8IFNDVFBfRU9SIHxcCisJCQkJCVNDVFBfU0FDS19JTU1FRElBVEVMWSkpICE9IDApCisv
KiBmb3IgdGhlIGVuZHBvaW50ICovCisKKy8qIFRoZSBsb3dlciBieXRlIGlzIGFuIGVudW1lcmF0
aW9uIG9mIFBSLVNDVFAgcG9saWNpZXMgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX05PTkUgMHgw
MDAwIC8qIFJlbGlhYmxlIHRyYW5zZmVyICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9UVEwgIDB4
MDAwMSAvKiBUaW1lIGJhc2VkIFBSLVNDVFAgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX0JVRiAg
MHgwMDAyIC8qIEJ1ZmZlciBiYXNlZCBQUi1TQ1RQICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9S
VFggIDB4MDAwMyAvKiBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIGJhc2VkIFBSLVNDVFAgKi8K
KworI2RlZmluZSBQUl9TQ1RQX1BPTElDWSh4KSAgICAgICAgICgoeCkgJiAweDBmKQorI2RlZmlu
ZSBQUl9TQ1RQX0VOQUJMRUQoeCkgICAgICAgIChQUl9TQ1RQX1BPTElDWSh4KSAhPSBTQ1RQX1BS
X1NDVFBfTk9ORSkKKyNkZWZpbmUgUFJfU0NUUF9UVExfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9Q
T0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX1RUTCkKKyNkZWZpbmUgUFJfU0NUUF9CVUZfRU5BQkxF
RCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX0JVRikKKyNkZWZpbmUg
UFJfU0NUUF9SVFhfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9T
Q1RQX1JUWCkKKyNkZWZpbmUgUFJfU0NUUF9JTlZBTElEX1BPTElDWSh4KSAoUFJfU0NUUF9QT0xJ
Q1koeCkgPiBTQ1RQX1BSX1NDVFBfUlRYKQorCisKKy8qCisgKiB1c2VyIHNvY2tldCBvcHRpb25z
OiBzb2NrZXQgQVBJIGRlZmluZWQKKyAqLworLyoKKyAqIHJlYWQtd3JpdGUgb3B0aW9ucworICov
CisjZGVmaW5lIFNDVFBfUlRPSU5GTyAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQorI2Rl
ZmluZSBTQ1RQX0FTU09DSU5GTyAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUg
U0NUUF9JTklUTVNHICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAzCisjZGVmaW5lIFNDVFBf
Tk9ERUxBWSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0FVVE9D
TE9TRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUgU0NUUF9QUklNQVJZX0FE
RFIgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIFNDVFBfQURBUFRBVElPTl9MQVlF
UiAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTICAg
ICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgU0NUUF9QRUVSX0FERFJfUEFSQU1TICAgICAgICAg
ICAweDAwMDAwMDBhCisvKiBhbmNpbGxhcnkgZGF0YS9ub3RpZmljYXRpb24gaW50ZXJlc3Qgb3B0
aW9ucyAqLworLyogV2l0aG91dCB0aGlzIGFwcGxpZWQgd2Ugd2lsbCBnaXZlIFY0IGFuZCBWNiBh
ZGRyZXNzZXMgb24gYSBWNiBzb2NrZXQgKi8KKyNkZWZpbmUgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0
X0FERFIgICAgICAweDAwMDAwMDBkCisjZGVmaW5lIFNDVFBfTUFYU0VHICAgICAgICAgICAgICAg
ICAgICAgMHgwMDAwMDAwZQorI2RlZmluZSBTQ1RQX0RFTEFZRURfU0FDSyAgICAgICAgICAgICAg
IDB4MDAwMDAwMGYKKyNkZWZpbmUgU0NUUF9GUkFHTUVOVF9JTlRFUkxFQVZFICAgICAgICAweDAw
MDAwMDEwCisjZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCAgICAgMHgwMDAwMDAx
MQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQX0hNQUNfSURFTlQg
ICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgU0NUUF9BVVRIX0FDVElWRV9LRVkg
ICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIFNDVFBfQVVUT19BU0NPTkYgICAgICAgICAg
ICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBTQ1RQX01BWF9CVVJTVCAgICAgICAgICAgICAgICAg
IDB4MDAwMDAwMTkKKy8qIGFzc29jIGxldmVsIGNvbnRleHQgKi8KKyNkZWZpbmUgU0NUUF9DT05U
RVhUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFhCisvKiBleHBsaWNpdCBFT1Igc2lnbmFs
bGluZyAqLworI2RlZmluZSBTQ1RQX0VYUExJQ0lUX0VPUiAgICAgICAgICAgICAgIDB4MDAwMDAw
MWIKKyNkZWZpbmUgU0NUUF9SRVVTRV9QT1JUICAgICAgICAgICAgICAgICAweDAwMDAwMDFjCisK
KyNkZWZpbmUgU0NUUF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFlCisjZGVm
aW5lIFNDVFBfUkVDVlJDVklORk8gICAgICAgICAgICAgICAgMHgwMDAwMDAxZgorI2RlZmluZSBT
Q1RQX1JFQ1ZOWFRJTkZPICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9E
RUZBVUxUX1NORElORk8gICAgICAgICAgICAweDAwMDAwMDIxCisjZGVmaW5lIFNDVFBfREVGQVVM
VF9QUklORk8gICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBTQ1RQX1JFTU9URV9VRFBf
RU5DQVBTX1BPUlQgICAgIDB4MDAwMDAwMjQKKworI2RlZmluZSBTQ1RQX0VOQUJMRV9TVFJFQU1f
UkVTRVQgICAgICAgIDB4MDAwMDA5MDAgLyogc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKi8KKwor
LyogUGx1Z2dhYmxlIFN0cmVhbSBTY2hlZHVsaW5nIFNvY2tldCBvcHRpb24gKi8KKyNkZWZpbmUg
U0NUUF9QTFVHR0FCTEVfU1MgICAgICAgICAgICAgICAweDAwMDAxMjAzCisjZGVmaW5lIFNDVFBf
U1NfVkFMVUUgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwNAorCisvKgorICogcmVhZC1vbmx5
IG9wdGlvbnMKKyAqLworI2RlZmluZSBTQ1RQX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgIDB4
MDAwMDAxMDAKKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8gICAgICAgICAweDAwMDAw
MTAxCisvKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ICovCisjZGVmaW5lIFNDVFBfUEVFUl9BVVRI
X0NIVU5LUyAgICAgICAgICAgMHgwMDAwMDEwMgorI2RlZmluZSBTQ1RQX0xPQ0FMX0FVVEhfQ0hV
TktTICAgICAgICAgIDB4MDAwMDAxMDMKKyNkZWZpbmUgU0NUUF9HRVRfQVNTT0NfTlVNQkVSICAg
ICAgICAgICAweDAwMDAwMTA0CisjZGVmaW5lIFNDVFBfR0VUX0FTU09DX0lEX0xJU1QgICAgICAg
ICAgMHgwMDAwMDEwNQorI2RlZmluZSBTQ1RQX1RJTUVPVVRTICAgICAgICAgICAgICAgICAgIDB4
MDAwMDAxMDYKKyNkZWZpbmUgU0NUUF9QUl9TVFJFQU1fU1RBVFVTICAgICAgICAgICAweDAwMDAw
MTA3CisjZGVmaW5lIFNDVFBfUFJfQVNTT0NfU1RBVFVTICAgICAgICAgICAgMHgwMDAwMDEwOAor
CisvKgorICogd3JpdGUtb25seSBvcHRpb25zCisgKi8KKyNkZWZpbmUgU0NUUF9TRVRfUEVFUl9Q
UklNQVJZX0FERFIgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFNDVFBfQVVUSF9DSFVOSyAgICAg
ICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBTQ1RQX0FVVEhfS0VZICAgICAgICAgICAg
ICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgU0NUUF9BVVRIX0RFQUNUSVZBVEVfS0VZICAgICAg
ICAweDAwMDAwMDFkCisjZGVmaW5lIFNDVFBfQVVUSF9ERUxFVEVfS0VZICAgICAgICAgICAgMHgw
MDAwMDAxNgorI2RlZmluZSBTQ1RQX1JFU0VUX1NUUkVBTVMgICAgICAgICAgICAgIDB4MDAwMDA5
MDEgLyogc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqLworI2RlZmluZSBTQ1RQX1JFU0VUX0FT
U09DICAgICAgICAgICAgICAgIDB4MDAwMDA5MDIgLyogc2N0cF9hc3NvY190ICovCisjZGVmaW5l
IFNDVFBfQUREX1NUUkVBTVMgICAgICAgICAgICAgICAgMHgwMDAwMDkwMyAvKiBzdHJ1Y3Qgc2N0
cF9hZGRfc3RyZWFtcyAqLworCitzdHJ1Y3Qgc2N0cF9pbml0bXNnIHsKKwl1aW50MTZfdCBzaW5p
dF9udW1fb3N0cmVhbXM7CisJdWludDE2X3Qgc2luaXRfbWF4X2luc3RyZWFtczsKKwl1aW50MTZf
dCBzaW5pdF9tYXhfYXR0ZW1wdHM7CisJdWludDE2X3Qgc2luaXRfbWF4X2luaXRfdGltZW87Cit9
OworCitzdHJ1Y3Qgc2N0cF9ydG9pbmZvIHsKKwlzY3RwX2Fzc29jX3Qgc3J0b19hc3NvY19pZDsK
Kwl1aW50MzJfdCBzcnRvX2luaXRpYWw7CisJdWludDMyX3Qgc3J0b19tYXg7CisJdWludDMyX3Qg
c3J0b19taW47Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyB7CisJc2N0cF9hc3NvY190
IHNhc29jX2Fzc29jX2lkOworCXVpbnQzMl90IHNhc29jX3BlZXJfcnduZDsKKwl1aW50MzJfdCBz
YXNvY19sb2NhbF9yd25kOworCXVpbnQzMl90IHNhc29jX2Nvb2tpZV9saWZlOworCXVpbnQxNl90
IHNhc29jX2Fzb2NtYXhyeHQ7CisJdWludDE2X3Qgc2Fzb2NfbnVtYmVyX3BlZXJfZGVzdGluYXRp
b25zOworfTsKKworc3RydWN0IHNjdHBfc2V0cHJpbSB7CisJc3RydWN0IHNvY2thZGRyX3N0b3Jh
Z2Ugc3NwX2FkZHI7CisJc2N0cF9hc3NvY190IHNzcF9hc3NvY19pZDsKKwl1aW50OF90IHNzcF9w
YWRkaW5nWzRdOworfTsKKworc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbiB7CisJdWludDMyX3Qg
ICBzc2JfYWRhcHRhdGlvbl9pbmQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyB7CisJ
c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3BwX2FkZHJlc3M7CisJc2N0cF9hc3NvY190IHNwcF9h
c3NvY19pZDsKKwl1aW50MzJfdCBzcHBfaGJpbnRlcnZhbDsKKwl1aW50MzJfdCBzcHBfcGF0aG10
dTsKKwl1aW50MzJfdCBzcHBfZmxhZ3M7CisJdWludDMyX3Qgc3BwX2lwdjZfZmxvd2xhYmVsOwor
CXVpbnQxNl90IHNwcF9wYXRobWF4cnh0OworCXVpbnQ4X3Qgc3BwX2RzY3A7Cit9OworCisjZGVm
aW5lIFNQUF9IQl9FTkFCTEUgICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTUFBfSEJfRElTQUJM
RSAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1BQX0hCX0RFTUFORCAgICAgICAweDAwMDAwMDA0
CisjZGVmaW5lIFNQUF9QTVRVRF9FTkFCTEUgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTUFBfUE1U
VURfRElTQUJMRSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1BQX0hCX1RJTUVfSVNfWkVSTyAweDAw
MDAwMDgwCisjZGVmaW5lIFNQUF9JUFY2X0ZMT1dMQUJFTCAgMHgwMDAwMDEwMAorI2RlZmluZSBT
UFBfRFNDUCAgICAgICAgICAgIDB4MDAwMDAyMDAKKworLyogVXNlZCBmb3IgU0NUUF9NQVhTRUcs
IFNDVFBfTUFYX0JVUlNULCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQsIGFuZCBTQ1RQX0NPTlRF
WFQgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7
CisJdWludDMyX3QgYXNzb2NfdmFsdWU7Cit9OworCisvKiBUbyBlbmFibGUgc3RyZWFtIHJlc2V0
ICovCisjZGVmaW5lIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEgIDB4MDAwMDAwMDEKKyNk
ZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfQVNTT0NfUkVRICAgMHgwMDAwMDAwMgorI2RlZmluZSBT
Q1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRICAweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfRU5B
QkxFX1ZBTFVFX01BU0sgICAgICAgIDB4MDAwMDAwMDcKKworc3RydWN0IHNjdHBfcmVzZXRfc3Ry
ZWFtcyB7CisJc2N0cF9hc3NvY190IHNyc19hc3NvY19pZDsKKwl1aW50MTZfdCBzcnNfZmxhZ3M7
CisJdWludDE2X3Qgc3JzX251bWJlcl9zdHJlYW1zOyAgLyogMCA9PSBBTEwgKi8KKwl1aW50MTZf
dCBzcnNfc3RyZWFtX2xpc3RbXTsgICAvKiBsaXN0IGlmIHN0cnJzdF9udW1fc3RyZWFtcyBpcyBu
b3QgMCAqLworfTsKKworc3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgeworCXNjdHBfYXNzb2NfdAlz
YXNfYXNzb2NfaWQ7CisJdWludDE2X3QJc2FzX2luc3RybXM7CisJdWludDE2X3QJc2FzX291dHN0
cm1zOworfTsKKworc3RydWN0IHNjdHBfaG1hY2FsZ28geworCXVpbnQzMl90IHNobWFjX251bWJl
cl9vZl9pZGVudHM7CisJdWludDE2X3Qgc2htYWNfaWRlbnRzW107Cit9OworCisvKiBBVVRIIGht
YWNfaWQgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfUlNWRCAgICAweDAwMDAKKyNkZWZp
bmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSAgICAweDAwMDEJLyogZGVmYXVsdCwgbWFuZGF0b3J5
ICovCisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NiAgMHgwMDAzCisjZGVmaW5lIFND
VFBfQVVUSF9ITUFDX0lEX1NIQTIyNCAgMHgwMDA0CisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTM4NCAgMHgwMDA1CisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTUxMiAgMHgwMDA2
CisKKworc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKKwlzY3RwX2Fzc29jX3Qgc2Fja19hc3NvY19p
ZDsKKwl1aW50MzJfdCBzYWNrX2RlbGF5OworCXVpbnQzMl90IHNhY2tfZnJlcTsKK307CisKK3N0
cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvIHsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDMy
X3QgcHJfdmFsdWU7CisJc2N0cF9hc3NvY190IHByX2Fzc29jX2lkOworfTsKKworc3RydWN0IHNj
dHBfcGFkZHJpbmZvIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGluZm9fYWRkcmVzczsK
KwlzY3RwX2Fzc29jX3Qgc3BpbmZvX2Fzc29jX2lkOworCWludDMyX3Qgc3BpbmZvX3N0YXRlOwor
CXVpbnQzMl90IHNwaW5mb19jd25kOworCXVpbnQzMl90IHNwaW5mb19zcnR0OworCXVpbnQzMl90
IHNwaW5mb19ydG87CisJdWludDMyX3Qgc3BpbmZvX210dTsKK307CisKK3N0cnVjdCBzY3RwX3N0
YXR1cyB7CisJc2N0cF9hc3NvY190IHNzdGF0X2Fzc29jX2lkOworCWludDMyX3QgIHNzdGF0X3N0
YXRlOworCXVpbnQzMl90IHNzdGF0X3J3bmQ7CisJdWludDE2X3Qgc3N0YXRfdW5hY2tkYXRhOwor
CXVpbnQxNl90IHNzdGF0X3BlbmRkYXRhOworCXVpbnQxNl90IHNzdGF0X2luc3RybXM7CisJdWlu
dDE2X3Qgc3N0YXRfb3V0c3RybXM7CisJdWludDMyX3Qgc3N0YXRfZnJhZ21lbnRhdGlvbl9wb2lu
dDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gc3N0YXRfcHJpbWFyeTsKK307CisKKy8qCisgKiB1
c2VyIHN0YXRlIHZhbHVlcworICovCisjZGVmaW5lIFNDVFBfQ0xPU0VEICAgICAgICAgICAgIDB4
MDAwMAorI2RlZmluZSBTQ1RQX0JPVU5EICAgICAgICAgICAgICAweDEwMDAKKyNkZWZpbmUgU0NU
UF9MSVNURU4gICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFNDVFBfQ09PS0lFX1dBSVQgICAg
ICAgIDB4MDAwMgorI2RlZmluZSBTQ1RQX0NPT0tJRV9FQ0hPRUQgICAgICAweDAwMDQKKyNkZWZp
bmUgU0NUUF9FU1RBQkxJU0hFRCAgICAgICAgMHgwMDA4CisjZGVmaW5lIFNDVFBfU0hVVERPV05f
U0VOVCAgICAgIDB4MDAxMAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1JFQ0VJVkVEICAweDAwMjAK
KyNkZWZpbmUgU0NUUF9TSFVURE9XTl9BQ0tfU0VOVCAgMHgwMDQwCisjZGVmaW5lIFNDVFBfU0hV
VERPV05fUEVORElORyAgIDB4MDA4MAorCisKKyNkZWZpbmUgU0NUUF9BQ1RJVkUgICAgICAgMHgw
MDAxICAvKiBTQ1RQX0FERFJfUkVBQ0hBQkxFICovCisjZGVmaW5lIFNDVFBfSU5BQ1RJVkUgICAg
IDB4MDAwMiAgLyogbmVpdGhlciBTQ1RQX0FERFJfUkVBQ0hBQkxFCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbm9yIFNDVFBfQUREUl9VTkNPTkZJUk1FRCAqLworI2RlZmlu
ZSBTQ1RQX1VOQ09ORklSTUVEICAweDAyMDAgIC8qIFNDVFBfQUREUl9VTkNPTkZJUk1FRCAqLwor
CitzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzIHsKKwlzY3RwX2Fzc29jX3QgZ2F1dGhfYXNzb2NfaWQ7
CisvKgl1aW50MzJfdCBnYXV0aF9udW1iZXJfb2ZfY2h1bmtzOyBub3QgYXZhaWxhYmxlICovCisJ
dWludDhfdCAgZ2F1dGhfY2h1bmtzW107Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY19pZHMgewor
CXVpbnQzMl90IGdhaWRzX251bWJlcl9vZl9pZHM7CisJc2N0cF9hc3NvY190IGdhaWRzX2Fzc29j
X2lkW107Cit9OworCitzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSB7CisJc3RydWN0IHNvY2thZGRy
X3N0b3JhZ2Ugc3NwcF9hZGRyOworCXNjdHBfYXNzb2NfdCBzc3BwX2Fzc29jX2lkOworCXVpbnQ4
X3Qgc3NwcF9wYWRkaW5nWzRdOworfTsKKworc3RydWN0IHNjdHBfYXV0aGNodW5rIHsKKwl1aW50
OF90IHNhdXRoX2NodW5rOworfTsKKworCitzdHJ1Y3Qgc2N0cF9nZXRfbm9uY2VfdmFsdWVzIHsK
KwlzY3RwX2Fzc29jX3QgZ25fYXNzb2NfaWQ7CisJdWludDMyX3QgZ25fcGVlcnNfdGFnOworCXVp
bnQzMl90IGduX2xvY2FsX3RhZzsKK307CisKKworLyoKKyAqIE1haW4gU0NUUCBjaHVuayB0eXBl
cworICovCisvKioqKioqKioqKioqMHgwMCBzZXJpZXMgKioqKioqKioqKiovCisjZGVmaW5lIFND
VFBfREFUQSAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NUUF9JTklUSUFUSU9OICAgICAg
ICAgMHgwMQorI2RlZmluZSBTQ1RQX0lOSVRJQVRJT05fQUNLICAgICAweDAyCisjZGVmaW5lIFND
VFBfU0VMRUNUSVZFX0FDSyAgICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9IRUFSVEJFQVRfUkVRVUVT
VCAgMHgwNAorI2RlZmluZSBTQ1RQX0hFQVJUQkVBVF9BQ0sgICAgICAweDA1CisjZGVmaW5lIFND
VFBfQUJPUlRfQVNTT0NJQVRJT04gIDB4MDYKKyNkZWZpbmUgU0NUUF9TSFVURE9XTiAgICAgICAg
ICAgMHgwNworI2RlZmluZSBTQ1RQX1NIVVRET1dOX0FDSyAgICAgICAweDA4CisjZGVmaW5lIFND
VFBfT1BFUkFUSU9OX0VSUk9SICAgIDB4MDkKKyNkZWZpbmUgU0NUUF9DT09LSUVfRUNITyAgICAg
ICAgMHgwYQorI2RlZmluZSBTQ1RQX0NPT0tJRV9BQ0sgICAgICAgICAweDBiCisjZGVmaW5lIFND
VFBfRUNOX0VDSE8gICAgICAgICAgIDB4MGMKKyNkZWZpbmUgU0NUUF9FQ05fQ1dSICAgICAgICAg
ICAgMHgwZAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFICAweDBlCisvKiBSRkM0ODk1
ICovCisjZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT04gICAgIDB4MGYKKy8qIEVZIG5yX3NhY2sg
Y2h1bmsgaWQqLworI2RlZmluZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0sgICAweDEwCisvKioqKioq
KioqKioqMHg0MCBzZXJpZXMgKioqKioqKioqKiovCisvKioqKioqKioqKioqMHg4MCBzZXJpZXMg
KioqKioqKioqKiovCisvKiBSRkM1MDYxICovCisjZGVmaW5lCVNDVFBfQVNDT05GX0FDSyAgICAg
ICAgIDB4ODAKKy8qIGRyYWZ0LWlldGYtc3Rld2FydC1wa3RkcnBzY3RwICovCisjZGVmaW5lIFND
VFBfUEFDS0VUX0RST1BQRUQgICAgIDB4ODEKKy8qIGRyYWZ0LWlldGYtc3Rld2FydC1zdHJyZXNl
dC14eHggKi8KKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVQgICAgICAgMHg4MgorCisvKiBSRkM0
ODIwICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDVFBfUEFEX0NIVU5LICAg
ICAgICAgIDB4ODQKKy8qKioqKioqKioqKioweGMwIHNlcmllcyAqKioqKioqKioqKi8KKy8qIFJG
QzM3NTggKi8KKyNkZWZpbmUgU0NUUF9GT1JXQVJEX0NVTV9UU04gICAgMHhjMAorLyogUkZDNTA2
MSAqLworI2RlZmluZSBTQ1RQX0FTQ09ORiAgICAgICAgICAgICAweGMxCisKK3N0cnVjdCBzY3Rw
X2F1dGhrZXkgeworCXNjdHBfYXNzb2NfdCBzY2FfYXNzb2NfaWQ7CisJdWludDE2X3Qgc2NhX2tl
eW51bWJlcjsKKwl1aW50MTZfdCBzY2Ffa2V5bGVuZ3RoOworCXVpbnQ4X3QgIHNjYV9rZXlbXTsK
K307CisKK3N0cnVjdCBzY3RwX2F1dGhrZXlpZCB7CisJc2N0cF9hc3NvY190IHNjYWN0X2Fzc29j
X2lkOworCXVpbnQxNl90IHNjYWN0X2tleW51bWJlcjsKK307CisKK3N0cnVjdCBzY3RwX2NjX29w
dGlvbiB7CisJaW50IG9wdGlvbjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhaWRfdmFsdWU7
Cit9OworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgeworCXNjdHBfYXNzb2NfdCBhc3NvY19p
ZDsKKwl1aW50MTZfdCBzdHJlYW1faWQ7CisJdWludDE2X3Qgc3RyZWFtX3ZhbHVlOworfTsKKwor
c3RydWN0IHNjdHBfdGltZW91dHMgeworCXNjdHBfYXNzb2NfdCBzdGltb19hc3NvY19pZDsKKwl1
aW50MzJfdCBzdGltb19pbml0OworCXVpbnQzMl90IHN0aW1vX2RhdGE7CisJdWludDMyX3Qgc3Rp
bW9fc2FjazsKKwl1aW50MzJfdCBzdGltb19zaHV0ZG93bjsKKwl1aW50MzJfdCBzdGltb19oZWFy
dGJlYXQ7CisJdWludDMyX3Qgc3RpbW9fY29va2llOworCXVpbnQzMl90IHN0aW1vX3NodXRkb3du
YWNrOworfTsKKworc3RydWN0IHNjdHBfcHJzdGF0dXMgeworCXNjdHBfYXNzb2NfdCBzcHJzdGF0
X2Fzc29jX2lkOworCXVpbnQxNl90IHNwcnN0YXRfc2lkOworCXVpbnQxNl90IHNwcnN0YXRfcG9s
aWN5OworCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudDsKKwl1aW50NjRfdCBzcHJz
dGF0X2FiYW5kb25lZF9zZW50OworfTsKKworLyogU3RhbmRhcmQgVENQIENvbmdlc3Rpb24gQ29u
dHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX1JGQzI1ODEgICAgICAgICAweDAwMDAwMDAwCisvKiBI
aWdoIFNwZWVkIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKEZsb3lkKSAqLworI2RlZmluZSBTQ1RQ
X0NDX0hTVENQICAgICAgICAgICAweDAwMDAwMDAxCisvKiBIVENQIENvbmdlc3Rpb24gQ29udHJv
bCAqLworI2RlZmluZSBTQ1RQX0NDX0hUQ1AgICAgICAgICAgICAweDAwMDAwMDAyCisvKiBSVEND
IENvbmdlc3Rpb24gQ29udHJvbCAtIFJGQzI1ODEgcGx1cyAqLworI2RlZmluZSBTQ1RQX0NDX1JU
Q0MgICAgICAgICAgICAweDAwMDAwMDAzCisKKyNkZWZpbmUgU0NUUF9DQ19PUFRfUlRDQ19TRVRN
T0RFIDB4MDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9DQ19PUFRfVVNFX0RDQ0NfRUMgIDB4MDAwMDIw
MDEKKyNkZWZpbmUgU0NUUF9DQ19PUFRfU1RFQURZX1NURVAgIDB4MDAwMDIwMDIKKworI2RlZmlu
ZSBTQ1RQX0NNVF9PRkYgICAgICAgICAgICAwCisjZGVmaW5lIFNDVFBfQ01UX0JBU0UgICAgICAg
ICAgIDEKKyNkZWZpbmUgU0NUUF9DTVRfUlBWMSAgICAgICAgICAgMgorI2RlZmluZSBTQ1RQX0NN
VF9SUFYyICAgICAgICAgICAzCisjZGVmaW5lIFNDVFBfQ01UX01QVENQICAgICAgICAgIDQKKyNk
ZWZpbmUgU0NUUF9DTVRfTUFYICAgICAgICAgICAgU0NUUF9DTVRfTVBUQ1AKKworLyogUlMgLSBT
dXBwb3J0ZWQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlcyBmb3IgcGx1Z2dhYmxlCisgKiBzdHJl
YW0gc2NoZWR1bGluZworICovCisvKiBEZWZhdWx0IHNpbXBsZSByb3VuZC1yb2JpbiAqLworI2Rl
ZmluZSBTQ1RQX1NTX0RFRkFVTFQgICAgICAgICAgICAgMHgwMDAwMDAwMAorLyogUmVhbCByb3Vu
ZC1yb2JpbiAqLworI2RlZmluZSBTQ1RQX1NTX1JPVU5EX1JPQklOICAgICAgICAgMHgwMDAwMDAw
MQorLyogUmVhbCByb3VuZC1yb2JpbiBwZXIgcGFja2V0ICovCisjZGVmaW5lIFNDVFBfU1NfUk9V
TkRfUk9CSU5fUEFDS0VUICAweDAwMDAwMDAyCisvKiBQcmlvcml0eSAqLworI2RlZmluZSBTQ1RQ
X1NTX1BSSU9SSVRZICAgICAgICAgICAgMHgwMDAwMDAwMworLyogRmFpciBCYW5kd2lkdGggKi8K
KyNkZWZpbmUgU0NUUF9TU19GQUlSX0JBTkRXSVRIICAgICAgIDB4MDAwMDAwMDQKKy8qIEZpcnN0
LWNvbWUsIGZpcnN0LXNlcnZlICovCisjZGVmaW5lIFNDVFBfU1NfRklSU1RfQ09NRSAgICAgICAg
ICAweDAwMDAwMDA1CisKKy8qKioqKioqKioqKioqKioqKioqKiBTeXN0ZW0gY2FsbHMgKioqKioq
KioqKioqKi8KKworc3RydWN0IHNvY2tldDsKKwordm9pZAordXNyc2N0cF9pbml0KHVpbnQxNl90
LAorICAgICAgICAgICAgIGludCAoKikodm9pZCAqYWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3Qg
bGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpLAorICAgICAgICAgICAgIHZvaWQg
KCopKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisKK3N0cnVjdCBzb2NrZXQgKgordXNyc2N0
cF9zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2NvbCwKKyAgICAgICAgICAg
ICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29j
a3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbywgaW50IGZsYWdzLCB2b2lkICp1
bHBfaW5mbyksCisgICAgICAgICAgICAgICBpbnQgKCpzZW5kX2NiKShzdHJ1Y3Qgc29ja2V0ICpz
b2NrLCB1aW50MzJfdCBzYl9mcmVlKSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHNiX3RocmVz
aG9sZCwKKyAgICAgICAgICAgICAgIHZvaWQgKnVscF9pbmZvKTsKKworaW50Cit1c3JzY3RwX3Nl
dHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgICAgaW50IGxldmVs
LAorICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpvcHRpb25fdmFsdWUsCisgICAgICAgICAgICAgICAgICAgc29ja2xlbl90
IG9wdGlvbl9sZW4pOworCitpbnQKK3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpz
bywKKyAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgaW50
IG9wdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wdGlvbl92YWx1ZSwKKyAg
ICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKm9wdGlvbl9sZW4pOworCitpbnQKK3VzcnNjdHBf
b3B0X2luZm8oc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgIHNjdHBfYXNzb2Nf
dCBpZCwKKyAgICAgICAgICAgICAgICAgaW50IG9wdCwKKyAgICAgICAgICAgICAgICAgdm9pZCAq
YXJnLAorICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKnNpemUpOworCitpbnQKK3VzcnNjdHBf
Z2V0cGFkZHJzKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgICAgc2N0cF9hc3Nv
Y190IGlkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICoqcmFkZHJzKTsKKwor
dm9pZAordXNyc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMpOworCitpbnQK
K3VzcnNjdHBfZ2V0bGFkZHJzKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgICAg
c2N0cF9hc3NvY190IGlkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICoqcmFk
ZHJzKTsKKwordm9pZAordXNyc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMp
OworCitzc2l6ZV90Cit1c3JzY3RwX3NlbmR2KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAg
ICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICBzaXplX3QgbGVuLAorICAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAorICAgICAgICAgICAgICBpbnQgYWRkcmNudCwK
KyAgICAgICAgICAgICAgdm9pZCAqaW5mbywKKyAgICAgICAgICAgICAgc29ja2xlbl90IGluZm9s
ZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZvdHlwZSwKKyAgICAgICAgICAgICAg
aW50IGZsYWdzKTsKKworc3NpemVfdAordXNyc2N0cF9yZWN2dihzdHJ1Y3Qgc29ja2V0ICpzbywK
KyAgICAgICAgICAgICAgdm9pZCAqZGJ1ZiwKKyAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAg
ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgICAgICAgICAgICBzb2NrbGVu
X3QgKiBmcm9tbGVuLAorICAgICAgICAgICAgICB2b2lkICppbmZvLAorICAgICAgICAgICAgICBz
b2NrbGVuX3QgKmluZm9sZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqaW5mb3R5cGUs
CisgICAgICAgICAgICAgIGludCAqbXNnX2ZsYWdzKTsKKworaW50Cit1c3JzY3RwX2JpbmQoc3Ry
dWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpuYW1lLAorICAg
ICAgICAgICAgIHNvY2tsZW5fdCBuYW1lbGVuKTsKKworI2RlZmluZSBTQ1RQX0JJTkRYX0FERF9B
RERSIDB4MDAwMDgwMDEKKyNkZWZpbmUgU0NUUF9CSU5EWF9SRU1fQUREUiAweDAwMDA4MDAyCisK
K2ludAordXNyc2N0cF9iaW5keChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgc3Ry
dWN0IHNvY2thZGRyICphZGRycywKKyAgICAgICAgICAgICAgaW50IGFkZHJjbnQsCisgICAgICAg
ICAgICAgIGludCBmbGFncyk7CisKK2ludAordXNyc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAq
c28sCisgICAgICAgICAgICAgICBpbnQgYmFja2xvZyk7CisKK3N0cnVjdCBzb2NrZXQgKgordXNy
c2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHIgKiBhbmFtZSwKKyAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGFuYW1lbGVuKTsKKwor
c3RydWN0IHNvY2tldCAqCit1c3JzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqLCBzY3RwX2Fz
c29jX3QpOworCitpbnQKK3VzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCisgICAgICAgICAgICAgICAgc29ja2xl
bl90IG5hbWVsZW4pOworCitpbnQKK3VzcnNjdHBfY29ubmVjdHgoc3RydWN0IHNvY2tldCAqc28s
CisgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsIGludCBhZGRy
Y250LAorICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgKmlkKTsKKwordm9pZAordXNyc2N0
cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbyk7CisKK3NjdHBfYXNzb2NfdAordXNyc2N0cF9nZXRh
c3NvY2lkKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICopOworCitpbnQKK3VzcnNj
dHBfZmluaXNoKHZvaWQpOworCitpbnQKK3VzcnNjdHBfc2h1dGRvd24oc3RydWN0IHNvY2tldCAq
c28sIGludCBob3cpOworCit2b2lkCit1c3JzY3RwX2Nvbm5pbnB1dCh2b2lkICosIGNvbnN0IHZv
aWQgKiwgc2l6ZV90LCB1aW50OF90KTsKKworaW50Cit1c3JzY3RwX3NldF9ub25fYmxvY2tpbmco
c3RydWN0IHNvY2tldCAqLCBpbnQpOworCitpbnQKK3VzcnNjdHBfZ2V0X25vbl9ibG9ja2luZyhz
dHJ1Y3Qgc29ja2V0ICopOworCit2b2lkCit1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3Modm9pZCAq
KTsKKwordm9pZAordXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3Modm9pZCAqKTsKKworaW50Cit1
c3JzY3RwX3NldF91bHBpbmZvKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAqKTsKKworI2RlZmluZSBT
Q1RQX0RVTVBfT1VUQk9VTkQgMQorI2RlZmluZSBTQ1RQX0RVTVBfSU5CT1VORCAgMAorCitjaGFy
ICoKK3VzcnNjdHBfZHVtcHBhY2tldChjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKKwordm9p
ZAordXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihjaGFyICopOworCit2b2lkCit1c3JzY3RwX2VuYWJs
ZV9jcmMzMmNfb2ZmbG9hZCh2b2lkKTsKKwordm9pZAordXNyc2N0cF9kaXNhYmxlX2NyYzMyY19v
ZmZsb2FkKHZvaWQpOworCit1aW50MzJfdAordXNyc2N0cF9jcmMzMmModm9pZCAqLCBzaXplX3Qp
OworCisjZGVmaW5lIFVTUlNDVFBfVFVOQUJMRV9ERUNMKF9fZmllbGQpICAgICAgICAgICAgICAg
XAoraW50IHVzcnNjdHBfdHVuYWJsZV9zZXRfICMjIF9fZmllbGQodWludDMyX3QgdmFsdWUpO1wK
K3VpbnQzMl90IHVzcnNjdHBfc3lzY3RsX2dldF8gIyMgX19maWVsZCh2b2lkKTsKKworVVNSU0NU
UF9UVU5BQkxFX0RFQ0woc2N0cF9oYXNodGJsc2l6ZSkKK1VTUlNDVFBfVFVOQUJMRV9ERUNMKHNj
dHBfcGNidGJsc2l6ZSkKK1VTUlNDVFBfVFVOQUJMRV9ERUNMKHNjdHBfY2h1bmtzY2FsZSkKKwor
I2RlZmluZSBVU1JTQ1RQX1NZU0NUTF9ERUNMKF9fZmllbGQpICAgICAgICAgICAgICAgXAoraW50
IHVzcnNjdHBfc3lzY3RsX3NldF8gIyMgX19maWVsZCh1aW50MzJfdCB2YWx1ZSk7XAordWludDMy
X3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyBfX2ZpZWxkKHZvaWQpOworCitVU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfc2VuZHNwYWNlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3JlY3ZzcGFj
ZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hdXRvX2FzY29uZikKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9tdWx0aXBsZV9hc2NvbmZzKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2Vj
bl9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcHJfZW5hYmxlKQorVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX2F1dGhfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2Fz
Y29uZl9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcmVjb25maWdfZW5hYmxlKQor
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX25yc2Fja19lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfcGt0ZHJvcF9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbm9fY3N1
bV9vbl9sb29wYmFjaykKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wZWVyX2NodW5rX29oKQor
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21heF9idXJzdF9kZWZhdWx0KQorVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfbWluX3NwbGl0X3BvaW50KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlbGF5ZWRfc2Fj
a190aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2Fja19mcmVxX2RlZmF1
bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCkKK1VT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCkKK1VTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnRv
X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3J0b19taW5fZGVmYXVsdCkK
K1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KQorVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVD
TChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfYXNzb2Nf
cnR4X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3BhdGhfcnR4X21heF9k
ZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkKK1VT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpCitVU1JT
Q1RQX1NZU0NUTF9ERUNMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KQorVVNSU0NU
UF9TWVNDVExfREVDTChzY3RwX2NtdF9vbl9vZmYpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
Y210X3VzZV9kYWMpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4
YnVyc3QpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbmF0X2ZyaWVuZGx5KQorVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX0wyX2FiY192YXJpYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0
cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kb19kcmFp
bikKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oYl9tYXhidXJzdCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkKK1VTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9taW5fcmVzaWR1YWwpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X3Jl
dHJhbl9jaHVuaykKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9sb2dnaW5nX2xldmVsKQorVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfY2NfbW9kdWxlKQorVVNSU0NUUF9TWVNDVExf
REVDTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKQorVVNSU0NUUF9TWVNDVExfREVDTChz
Y3RwX21vYmlsaXR5X2Jhc2UpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbW9iaWxpdHlfZmFz
dGhhbmRvZmYpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJp
ZW5kbHkpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KQorVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5KQorVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX3Z0YWdfdGltZV93YWl0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3Rw
X2JsYWNraG9sZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kaWFnX2luZm9fY29kZSkKK1VT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkKK1VTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0
cF9kZWZhdWx0X3NzX21vZHVsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfYncp
CitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnR0dmFyX3J0dCkKK1VTUlNDVFBfU1lTQ1RMX0RF
Q0woc2N0cF9ydHR2YXJfZXFyZXQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc3RlYWR5X3N0
ZXApCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNlX2RjY2NfZWNuKQorVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
aW5pdGlhbF9jd25kKQorI2lmZGVmIFNDVFBfREVCVUcKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0
cF9kZWJ1Z19vbikKKy8qIE1vcmUgc3BlY2lmaWMgdmFsdWVzIGNhbiBiZSBmb3VuZCBpbiBzY3Rw
X2NvbnN0YW50cywgYnV0CisgKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUg
QVBJLgorICovCisjZGVmaW5lIFNDVFBfREVCVUdfTk9ORSAweDAwMDAwMDAwCisjZGVmaW5lIFND
VFBfREVCVUdfQUxMICAweGZmZmZmZmZmCisjZW5kaWYKKyN1bmRlZiBVU1JTQ1RQX1NZU0NUTF9E
RUNMCitzdHJ1Y3Qgc2N0cF90aW1ldmFsIHsKKwl1aW50MzJfdCB0dl9zZWM7CisJdWludDMyX3Qg
dHZfdXNlYzsKK307CisKK3N0cnVjdCBzY3Rwc3RhdCB7CisJc3RydWN0IHNjdHBfdGltZXZhbCBz
Y3Rwc19kaXNjb250aW51aXR5dGltZTsgLyogc2N0cFN0YXRzIDE4IChUaW1lU3RhbXApICovCisJ
LyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3MyAqLworCXVpbnQzMl90ICBzY3Rwc19jdXJyZXN0
YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDEgICAoR2F1Z2UzMikgKi8KKwl1aW50MzJfdCAg
c2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAgLyogc2N0cFN0YXRzICAyIChDb3VudGVyMzIpICov
CisJdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRlc3RhYjsKKwl1aW50MzJfdCAgc2N0cHNfY29sbGlz
aW9uZXN0YWI7CisJdWludDMyX3QgIHNjdHBzX3Bhc3NpdmVlc3RhYjsgICAgICAgIC8qIHNjdHBT
dGF0cyAgMyAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19hYm9ydGVkOyAgICAgICAg
ICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2h1
dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0YXRzICA1IChDb3VudGVyMzIpICovCisJdWludDMy
X3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAgICAgIC8qIHNjdHBTdGF0cyAgNiAoQ291bnRlcjMy
KSAqLworCXVpbnQzMl90ICBzY3Rwc19jaGVja3N1bWVycm9yczsgICAgICAvKiBzY3RwU3RhdHMg
IDcgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0Y29udHJvbGNodW5rczsgICAg
Lyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX291dG9yZGVy
Y2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAgOSAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBz
Y3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgMTAgKENvdW50ZXI2NCkgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9sY2h1bmtzOyAgICAgLyogc2N0cFN0YXRzIDExIChD
b3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX2lub3JkZXJjaHVua3M7ICAgICAgIC8qIHNj
dHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19pbnVub3JkZXJjaHVu
a3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNf
ZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0cFN0YXRzIDE0IChDb3VudGVyNjQpICovCisJdWlu
dDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsgICAgICAgIC8qIHNjdHBTdGF0cyAxNSAoQ291bnRl
cjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19vdXRwYWNrZXRzOyAgICAgICAgICAvKiBzY3RwU3Rh
dHMgMTYgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5wYWNrZXRzOyAgICAgICAg
ICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVyNjQpICovCisKKwkvKiBpbnB1dCBzdGF0aXN0aWNz
OiAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2cGFja2V0czsgICAgICAgICAvKiB0b3RhbCBpbnB1
dCBwYWNrZXRzICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0YWdyYW1zOyAgICAg
ICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2
cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBwYWNrZXRzIHRoYXQgaGFkIGRhdGEgKi8KKwl1aW50
MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAgICAgICAgLyogdG90YWwgaW5wdXQgU0FDSyBjaHVu
a3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmRhdGE7ICAgICAgICAgICAgLyogdG90YWwg
aW5wdXQgREFUQSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmR1cGRhdGE7ICAg
ICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGljYXRlIERBVEEgY2h1bmtzICovCisJdWludDMyX3Qg
IHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIGlucHV0IEhCIGNodW5rcyAgICAg
ICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXRhY2s7ICAgIC8qIHRvdGFsIGlucHV0
IEhCLUFDSyBjaHVua3MgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZlY25lOyAgICAgICAgICAg
IC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtzICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zh
dXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEFVVEggY2h1bmtzICAgICovCisJdWludDMy
X3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsgICAgIC8qIHRvdGFsIGlucHV0IGNodW5rcyBtaXNz
aW5nIEFVVEggKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxobWFjaWQ7ICAgICAgLyogdG90
YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBpZHMgcmVjZWl2ZWQgKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgc2VjcmV0
IGlkcyByZWNlaXZlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2YXV0aGZhaWxlZDsgICAgICAv
KiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWlsZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmV4
cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIHJlY2VpdmVzIGFsbCBvbmUgY2h1bmsg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3NtOyAgICAgICAgLyogdG90YWwgZmFzdCBw
YXRoIG11bHRpLXBhcnQgZGF0YSAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2X3NwYXJlOyAgICAg
ICAgICAvKiBmb3JtZXJseSBzY3Rwc19yZWN2bm9jcmMgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVj
dnN3Y3JjOworCXVpbnQzMl90ICBzY3Rwc19yZWN2aHdjcmM7CisKKwkvKiBvdXRwdXQgc3RhdGlz
dGljczogKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHBhY2tldHM7ICAgICAgICAgLyogdG90YWwg
b3V0cHV0IHBhY2tldHMgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNhY2tzOyAgICAg
ICAgICAgLyogdG90YWwgb3V0cHV0IFNBQ0tzICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZGRhdGE7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IERBVEEgY2h1bmtzICAgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZHJldHJhbnNkYXRhOyAgICAgLyogdG90YWwgb3V0cHV0IHJldHJh
bnNtaXR0ZWQgREFUQSBjaHVua3MgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZGZhc3RyZXRyYW5z
OyAgICAgLyogdG90YWwgb3V0cHV0IGZhc3QgcmV0cmFuc21pdHRlZCBEQVRBIGNodW5rcyAqLwor
CXVpbnQzMl90ICBzY3Rwc19zZW5kbXVsdGZhc3RyZXRyYW5zOyAvKiB0b3RhbCBGUidzIHRoYXQg
aGFwcGVuZWQgbW9yZSB0aGFuIG9uY2UKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICogdG8gc2FtZSBjaHVuayAodS1kZWwgbXVsdGktZnIgYWxnbykuCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kaGVh
cnRiZWF0OyAgICAgICAvKiB0b3RhbCBvdXRwdXQgSEIgY2h1bmtzICAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kZWNuZTsgICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgRUNORSBjaHVua3Mg
ICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZGF1dGg7ICAgICAgICAgICAgLyogdG90YWwgb3V0
cHV0IEFVVEggY2h1bmtzIEZJWE1FICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZGVycm9yczsg
ICAgICAgICAgLyogaXBfb3V0cHV0IGVycm9yIGNvdW50ZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZF9zcGFyZTsgICAgICAgICAgLyogZm9ybWVybHkgc2N0cHNfc2VuZG5vY3JjICovCisJdWlu
dDMyX3QgIHNjdHBzX3NlbmRzd2NyYzsKKwl1aW50MzJfdCAgc2N0cHNfc2VuZGh3Y3JjOworCS8q
IFBDS0RST1BSRVAgc3RhdGlzdGljczogKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGZtYm94OyAg
ICAgICAgICAgLyogUGFja2V0IGRyb3AgZnJvbSBtaWRkbGUgYm94ICovCisJdWludDMyX3QgIHNj
dHBzX3BkcnBmZWhvczsgICAgICAgICAgIC8qIFAtZHJvcCBmcm9tIGVuZCBob3N0ICovCisJdWlu
dDMyX3QgIHNjdHBzX3BkcnBtYmRhOyAgICAgICAgICAgIC8qIFAtZHJvcHMgd2l0aCBkYXRhICov
CisJdWludDMyX3QgIHNjdHBzX3BkcnBtYmN0OyAgICAgICAgICAgIC8qIFAtZHJvcHMsIG5vbi1k
YXRhLCBub24tZW5kaG9zdCAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwYndycHQ7ICAgICAgICAg
ICAvKiBQLWRyb3AsIG5vbi1lbmRob3N0LCBiYW5kd2lkdGggcmVwIG9ubHkgKi8KKwl1aW50MzJf
dCAgc2N0cHNfcGRycGNydXB0OyAgICAgICAgICAgLyogUC1kcm9wLCBub3QgZW5vdWdoIGZvciBj
aHVuayBoZWFkZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycG5lZGF0OyAgICAgICAgICAgLyog
UC1kcm9wLCBub3QgZW5vdWdoIGRhdGEgdG8gY29uZmlybSAqLworCXVpbnQzMl90ICBzY3Rwc19w
ZHJwcGRicms7ICAgICAgICAgICAvKiBQLWRyb3AsIHdoZXJlIHByb2Nlc3NfY2h1bmtfZHJvcCBz
YWlkIGJyZWFrICovCisJdWludDMyX3QgIHNjdHBzX3BkcnB0c25uZjsgICAgICAgICAgIC8qIFAt
ZHJvcCwgY291bGQgbm90IGZpbmQgVFNOICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBkbmZuZDsg
ICAgICAgICAgIC8qIFAtZHJvcCwgYXR0ZW1wdCByZXZlcnNlIFRTTiBsb29rdXAgKi8KKwl1aW50
MzJfdCAgc2N0cHNfcGRycGRpd25wOyAgICAgICAgICAgLyogUC1kcm9wLCBlLWhvc3QgY29uZmly
bXMgemVyby1yd25kICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBkaXpydzsgICAgICAgICAgIC8q
IFAtZHJvcCwgbWlkYm94IGNvbmZpcm1zIG5vIHNwYWNlICovCisJdWludDMyX3QgIHNjdHBzX3Bk
cnBiYWRkOyAgICAgICAgICAgIC8qIFAtZHJvcCwgZGF0YSBkaWQgbm90IG1hdGNoIFRTTiAqLwor
CXVpbnQzMl90ICBzY3Rwc19wZHJwbWFyazsgICAgICAgICAgICAvKiBQLWRyb3AsIFRTTidzIG1h
cmtlZCBmb3IgRmFzdCBSZXRyYW4gKi8KKwkvKiB0aW1lb3V0cyAqLworCXVpbnQzMl90ICBzY3Rw
c190aW1vaXRlcmF0b3I7ICAgICAgICAvKiBOdW1iZXIgb2YgaXRlcmF0b3IgdGltZXJzIHRoYXQg
ZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2RhdGE7ICAgICAgICAgICAgLyogTnVtYmVy
IG9mIFQzIGRhdGEgdGltZSBvdXRzICovCisJdWludDMyX3QgIHNjdHBzX3RpbW93aW5kb3dwcm9i
ZTsgICAgIC8qIE51bWJlciBvZiB3aW5kb3cgcHJvYmUgKFQzKSB0aW1lcnMgdGhhdCBmaXJlZCAq
LworCXVpbnQzMl90ICBzY3Rwc190aW1vaW5pdDsgICAgICAgICAgICAvKiBOdW1iZXIgb2YgSU5J
VCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2FjazsgICAgICAg
ICAgICAvKiBOdW1iZXIgb2Ygc2FjayB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBz
Y3Rwc190aW1vc2h1dGRvd247ICAgICAgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gdGltZXJzIHRo
YXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2hlYXJ0YmVhdDsgICAgICAgLyogTnVt
YmVyIG9mIGhlYXJ0YmVhdCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190
aW1vY29va2llOyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYSBjb29raWUgdGltZW91dCBm
aXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2VjcmV0OyAgICAgICAgICAvKiBOdW1iZXIg
b2YgdGltZXMgYW4gZW5kcG9pbnQgY2hhbmdlZCBpdHMgY29va2llIHNlY3JldCovCisJdWludDMy
X3QgIHNjdHBzX3RpbW9wYXRobXR1OyAgICAgICAgIC8qIE51bWJlciBvZiBQTVRVIHRpbWVycyB0
aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zaHV0ZG93bmFjazsgICAgIC8qIE51
bWJlciBvZiBzaHV0ZG93biBhY2sgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0
cHNfdGltb3NodXRkb3duZ3VhcmQ7ICAgLyogTnVtYmVyIG9mIHNodXRkb3duIGd1YXJkIHRpbWVy
cyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zdHJtcnN0OyAgICAgICAgIC8q
IE51bWJlciBvZiBzdHJlYW0gcmVzZXQgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAg
c2N0cHNfdGltb2Vhcmx5ZnI7ICAgICAgICAgLyogTnVtYmVyIG9mIGVhcmx5IEZSIHRpbWVycyB0
aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9hc2NvbmY7ICAgICAgICAgIC8qIE51
bWJlciBvZiB0aW1lcyBhbiBhc2NvbmYgdGltZXIgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNf
dGltb2RlbHByaW07CSAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgcHJpbV9kZWxldGVkIHRpbWVy
IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9hdXRvY2xvc2U7ICAgICAgIC8qIE51bWJl
ciBvZiB0aW1lcyBhdXRvIGNsb3NlIHRpbWVyIGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3Rp
bW9hc3NvY2tpbGw7ICAgICAgIC8qIE51bWJlciBvZiBhc29jIGZyZWUgdGltZXJzIGV4cGlyZWQg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2lucGtpbGw7ICAgICAgICAgLyogTnVtYmVyIG9mIGlu
cCBmcmVlIHRpbWVycyBleHBpcmVkICovCisJLyogZm9ybWVyIGVhcmx5IEZSIGNvdW50ZXJzICov
CisJdWludDMyX3QgIHNjdHBzX3NwYXJlWzExXTsKKwkvKiBvdGhlcnMgKi8KKwl1aW50MzJfdCAg
c2N0cHNfaGRyb3BzOyAgICAgICAgICAgICAgLyogcGFja2V0IHNob3J0ZXIgdGhhbiBoZWFkZXIg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfYmFkc3VtOyAgICAgICAgICAgICAgLyogY2hlY2tzdW0gZXJy
b3IgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfbm9wb3J0OyAgICAgICAgICAgICAg
Lyogbm8gZW5kcG9pbnQgZm9yIHBvcnQgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkdnRh
ZzsgICAgICAgICAgICAgLyogYmFkIHYtdGFnICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJf
dCAgc2N0cHNfYmFkc2lkOyAgICAgICAgICAgICAgLyogYmFkIFNJRCAgICAgICAgICAgICAgICAg
ICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfbm9tZW07ICAgICAgICAgICAgICAgLyogbm8gbWVtb3J5
ICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfZmFzdHJldHJhbnNpbnJ0dDsg
ICAgLyogbnVtYmVyIG9mIG11bHRpcGxlIEZSIGluIGEgUlRUIHdpbmRvdyAqLworCXVpbnQzMl90
ICBzY3Rwc19tYXJrZWRyZXRyYW5zOworCXVpbnQzMl90ICBzY3Rwc19uYWdsZXNlbnQ7ICAgICAg
ICAgICAvKiBuYWdsZSBhbGxvd2VkIHNlbmRpbmcgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19u
YWdsZXF1ZXVlZDsgICAgICAgICAvKiBuYWdsZSBkb2Vzbid0IGFsbG93IHNlbmRpbmcgKi8KKwl1
aW50MzJfdCAgc2N0cHNfbWF4YnVyc3RxdWV1ZWQ7ICAgICAgLyogbWF4IGJ1cnN0IGRvZXNuJ3Qg
YWxsb3cgc2VuZGluZyAqLworCXVpbnQzMl90ICBzY3Rwc19pZm5vbWVtcXVldWVkOyAgICAgICAv
KiBsb29rIGFoZWFkIHRlbGxzIHVzIG5vIG1lbW9yeSBpbgorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBpbnRlcmZhY2UgcmluZyBidWZmZXIgT1Igd2UgaGFkIGEKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2VuZCBlcnJvciBhbmQgYXJl
IHF1ZXVpbmcgb25lIHNlbmQuCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc193aW5kb3dwcm9iZWQ7ICAgICAgICAvKiB0b3RhbCBudW1i
ZXIgb2Ygd2luZG93IHByb2JlcyBzZW50ICovCisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJy
OyAgICAgICAgIC8qIHRvdGFsIHRpbWVzIGFuIG91dHB1dCBlcnJvciBjYXVzZXMgdXMKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gY2xhbXAgZG93biBvbiBuZXh0
IHVzZXIgc2VuZC4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJ
dWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJydXNyOyAgICAgIC8qIHRvdGFsIHRpbWVzIHNjdHBf
c2VuZGVycm9ycyB3ZXJlIGNhdXNlZCBmcm9tCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqIGEgdXNlciBzZW5kIGZyb20gYSB1c2VyIGludm9rZWQgc2VuZCBub3QKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYSBzYWNrIHJlc3BvbnNlCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rw
c19kYXRhZHJvcGNoa2xtdDsgICAgICAvKiBOdW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUgdG8g
Y2h1bmsgbGltaXQgcmVhY2hlZCAqLworCXVpbnQzMl90ICBzY3Rwc19kYXRhZHJvcHJ3bmQ7ICAg
ICAgICAvKiBOdW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUgdG8gcnduZCBsaW1pdCByZWFjaGVk
ICovCisJdWludDMyX3QgIHNjdHBzX2VjbmVyZWR1Y2VkY3duZDsgICAgIC8qIE51bWJlciBvZiB0
aW1lcyBhIEVDTiByZWR1Y2VkIHRoZSBjd25kICovCisJdWludDMyX3QgIHNjdHBzX3Z0YWdleHBy
ZXNzOyAgICAgICAgIC8qIFVzZWQgZXhwcmVzcyBsb29rdXAgdmlhIHZ0YWcgKi8KKwl1aW50MzJf
dCAgc2N0cHNfdnRhZ2JvZ3VzOyAgICAgICAgICAgLyogQ29sbGlzaW9uIGluIGV4cHJlc3MgbG9v
a3VwLiAqLworCXVpbnQzMl90ICBzY3Rwc19wcmltYXJ5X3JhbmRyeTsgICAgICAvKiBOdW1iZXIg
b2YgdGltZXMgdGhlIHNlbmRlciByYW4gZHJ5IG9mIHVzZXIgZGF0YSBvbiBwcmltYXJ5ICovCisJ
dWludDMyX3QgIHNjdHBzX2NtdF9yYW5kcnk7ICAgICAgICAgIC8qIFNhbWUgZm9yIGFib3ZlICov
CisJdWludDMyX3QgIHNjdHBzX3Nsb3dwYXRoX3NhY2s7ICAgICAgIC8qIFNhY2tzIHRoZSBzbG93
IHdheSAqLworCXVpbnQzMl90ICBzY3Rwc193dV9zYWNrc19zZW50OyAgICAgICAvKiBXaW5kb3cg
VXBkYXRlIG9ubHkgc2Fja3Mgc2VudCAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2Zs
YWdzOyAgICAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBzaW5mb19mbGFncyAhPTAgKi8KKwl1aW50
MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF91bm9yZDsgICAgLyogbnVtYmVyIG9mIHVub3JkZXJlZCBz
ZW5kcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2VvZjsgICAgICAvKiBudW1iZXIg
b2Ygc2VuZHMgd2l0aCBFT0YgZmxhZyBzZXQgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0
aF9hYm9ydDsgICAgLyogbnVtYmVyIG9mIHNlbmRzIHdpdGggQUJPUlQgZmxhZyBzZXQgKi8KKwl1
aW50MzJfdCAgc2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHM7LyogbnVtYmVyIG9mIHRpbWVzIHBy
b3RvY29sIGRyYWluIGNhbGxlZCAqLworCXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbnNf
ZG9uZTsvKiBudW1iZXIgb2YgdGltZXMgd2UgZGlkIGEgcHJvdG9jb2wgZHJhaW4gKi8KKwl1aW50
MzJfdCAgc2N0cHNfcmVhZF9wZWVrczsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIHJlY3Yg
d2FzIGNhbGxlZCB3aXRoIHBlZWsgKi8KKwl1aW50MzJfdCAgc2N0cHNfY2FjaGVkX2NoazsgICAg
ICAgICAgLyogTnVtYmVyIG9mIGNhY2hlZCBjaHVua3MgdXNlZCAqLworCXVpbnQzMl90ICBzY3Rw
c19jYWNoZWRfc3RybW9xOyAgICAgICAvKiBOdW1iZXIgb2YgY2FjaGVkIHN0cmVhbSBvcSdzIHVz
ZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfbGVmdF9hYmFuZG9uOyAgICAgICAgLyogTnVtYmVyIG9m
IHVucmVhZCBtZXNzYWdlcyBhYmFuZG9uZWQgYnkgY2xvc2UgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZF9idXJzdF9hdm9pZDsgICAgLyogVW51c2VkICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRf
Y3duZF9hdm9pZDsgICAgIC8qIFNlbmQgY3duZCBmdWxsICBhdm9pZGFuY2UsIGFscmVhZHkgbWF4
IGJ1cnN0IGluZmxpZ2h0IHRvIG5ldCAqLworCXVpbnQzMl90ICBzY3Rwc19md2R0c25fbWFwX292
ZXI7ICAgICAvKiBudW1iZXIgb2YgbWFwIGFycmF5IG92ZXItcnVucyB2aWEgZndkLXRzbidzICov
CisJdWludDMyX3QgIHNjdHBzX3F1ZXVlX3VwZF9lY25lOyAgICAgIC8qIE51bWJlciBvZiB0aW1l
cyB3ZSBxdWV1ZWQgb3IgdXBkYXRlZCBhbiBFQ04gY2h1bmsgb24gc2VuZCBxdWV1ZSAqLworCXVp
bnQzMl90ICBzY3Rwc19yZXNlcnZlZFszMV07ICAgICAgICAvKiBGdXR1cmUgQUJJIGNvbXBhdCAt
IHJlbW92ZSBpbnQncyBmcm9tIGhlcmUgd2hlbiBhZGRpbmcgbmV3ICovCit9OworCit2b2lkCit1
c3JzY3RwX2dldF9zdGF0KHN0cnVjdCBzY3Rwc3RhdCAqKTsKKworI2lmZGVmIF9XSU4zMgorI2lm
ZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGVmYXVsdDogNDIwMCkKKyNlbmRpZgorI2Vu
ZGlmCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGli
cmFyeS1jb21waWxhdGlvbi1lcnJvcnMucGF0Y2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5w
YXRjaAppbmRleCA5MzY0NzExNTRhNTk0Yjc1MGFjYmE1OGY3MzAzYTAzYjRmNzRkYmM3Li5kYTUw
OTI3ZGU5YjU1NGZmN2I4ZjMwYmU4NGQ1ZmMxYzM3YmFkODJhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNv
bXBpbGF0aW9uLWVycm9ycy5wYXRjaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
V2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5wYXRj
aApAQCAtMSw2NyArMSw4IEBACi1Gcm9tIGJlNzFhNTRkYTliMGFlN2YzNzllZmYwMzc3MzUzNzlj
OWU4NWU5Y2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBZb3Vlbm4gRmFibGV0IDx5
b3Vlbm5AYXBwbGUuY29tPgotRGF0ZTogVGh1LCAxNCBEZWMgMjAxNyAxMzo0NDo0MSAtMDgwMAot
U3ViamVjdDogW1BBVENIIDIvOF0gRml4aW5nIHVzcmN0cCBsaWJyYXJ5IGNvbXBpbGF0aW9uIGVy
cm9ycwotCi0tLS0KLSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfaW5wdXQuYyAgICB8IDggKysrKysrLS0KLSAuLi4vU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMgICB8IDUgKysrLS0K
LSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
cGNiLmMgICAgICB8IDEgLQotIC4uLi9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIHwgMyArKy0KLSA0IGZpbGVzIGNoYW5nZWQsIDEx
IGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCi1pbmRl
eCAwNjQ5ZWMyZTMyNS4uZTRiYjUxMzc4ZGMgMTAwNzU1Ci0tLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfaW5wdXQuYwotKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKLUBAIC0x
NzI4LDEwICsxNzI4LDEyIEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1i
dWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gCQkJCSAqIGRvbid0IGRvdWJsZSB0aGlu
Z3MKLSAJCQkJICovCi0gCQkJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKLSsJCQkJc3RydWN0IHRp
bWV2YWwgdGltZV9lbnRlcmVkOwotIAkJCQluZXQtPlJUTyA9IHNjdHBfY2FsY3VsYXRlX3J0byhz
dGNiLCBhc29jLCBuZXQsCi0tCQkJCQkJCSAgICAgICZjb29raWUtPnRpbWVfZW50ZXJlZCwKLSsJ
CQkJCQkJICAgICAgJnRpbWVfZW50ZXJlZCwKLSAJCQkJCQkJICAgICAgc2N0cF9hbGlnbl91bnNh
ZmVfbWFrZWNvcHksCi0gCQkJCQkJCSAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOwotKwkJ
CQljb29raWUtPnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50ZXJlZDsKLSAKLSAJCQkJaWYgKHN0Y2It
PmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYKLSAJCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSkgewotQEAgLTI0ODEsOSArMjQ4Mywx
MSBAQCBzY3RwX3Byb2Nlc3NfY29va2llX25ldyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwg
aW50IG9mZnNldCwKLSAJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGlt
ZV9lbnRlcmVkKTsKLSAJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewot
IAkJLyogY2FsY3VsYXRlIHRoZSBSVFQgYW5kIHNldCB0aGUgZW5jYXBzIHBvcnQgKi8KLSsJCXN0
cnVjdCB0aW1ldmFsIHRpbWVfZW50ZXJlZDsKLSAJCSgqbmV0cCktPlJUTyA9IHNjdHBfY2FsY3Vs
YXRlX3J0byhzdGNiLCBhc29jLCAqbmV0cCwKLS0JCQkJCQkgICZjb29raWUtPnRpbWVfZW50ZXJl
ZCwgc2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCi0rCQkJCQkJICAmdGltZV9lbnRlcmVkLCBz
Y3RwX2FsaWduX3Vuc2FmZV9tYWtlY29weSwKLSAJCQkJCQkgIFNDVFBfUlRUX0ZST01fTk9OX0RB
VEEpOwotKwkJY29va2llLT50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0gCX0KLSAJLyog
cmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwotIAlzY3RwX3NlbmRfY29va2llX2FjayhzdGNi
KTsKLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKLWluZGV4IDkwYjBiZjNkNjM2Li5mNjQ2Y2EzYTNjNiAx
MDA3NTUKLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYwotKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX291dHB1dC5jCi1AQCAtNjAyNCw4ICs2MDI0LDkgQEAgc2N0cF9zZW5k
X2luaXRpYXRlX2FjayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gCW1lbXNldCgmc3RjLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKSk7
Ci0gCi0gCS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0tCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZzdGMudGltZV9lbnRlcmVkKTsKLS0KLSsJc3RydWN0IHRpbWV2YWwgdGltZV9l
bnRlcmVkOwotKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdGltZV9lbnRlcmVkKTsKLSsJ
c3RjLnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50ZXJlZDsKLSAJLyogcG9wdWxhdGUgYW55IHRpZSB0
YWdzICovCi0gCWlmIChhc29jICE9IE5VTEwpIHsKLSAJCS8qIHVubG9jayBiZWZvcmUgdGFnIHNl
bGVjdGlvbnMgKi8KLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKLWluZGV4IDllOWZjYTA2YzRkLi5kMGM3NzBlMzA3
OCAxMDA3NTUKLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYwotKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3BjYi5jCi1AQCAtNjgwOSw3ICs2ODA5LDYgQEAgc2N0cF9wY2JfaW5p
dCgpCitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYworaW5kZXggNmVmY2JhYjkx
ZTguLmY4ZGQwMjQwYWYzIDEwMDc1NQorLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcGNiLmMKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5j
CitAQCAtNjg1Miw3ICs2ODUyLDYgQEAgc2N0cF9wY2JfaW5pdCgpCiAgI2VuZGlmCiAgI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKICAJbWJ1Zl9pbml0aWFsaXplKE5VTEwpOwpAQCAtNjksMjAg
KzEwLDExMCBAQCBpbmRleCA5ZTlmY2EwNmM0ZC4uZDBjNzcwZTMwNzggMTAwNzU1CiAgI2lmIGRl
ZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKICAJcmVjdl90aHJlYWRfaW5pdCgpOwogICNl
bmRpZgotZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfYXRvbWljLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2Vy
X2F0b21pYy5oCi1pbmRleCBiODQxNWM2MDQ3ZS4uZjM0NDA1NWRjNWIgMTAwNzU1Ci0tLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c2VyX2F0b21pYy5oCi0rKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCitkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi91c2VyX2F0b21pYy5oCitpbmRleCA3N2VhNzdiNjcxYS4uODk3MzljNGU5MDggMTAw
NzU1CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfYXRvbWljLmgKKysrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAogQEAgLTgwLDcgKzgwLDggQEAKICAjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotIHN0YXRpYyB2b2lkIGF0b21pY19pbml0KCkg
e30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyBzdGF0aWMg
dm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAvKiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcg
YXRvbWljX210eCAqLwogICNlbHNlCi0tc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkg
e30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KLSsvLyBXZWJL
aXQgY2hhbmdlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0IE1hY09TIG1hY3JvLgot
Ky8vIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCgpIHt9IC8qIGVtcHR5IHdoZW4gd2Ug
YXJlIG5vdCB1c2luZyBhdG9taWNfbXR4ICovCistc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19p
bml0KHZvaWQpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9taWNfbXR4ICov
CisrLy8gV2ViS2l0IGNoYW5nZSwgdGhpcyBjb25mbGljdHMgd2l0aCBhdG9taWNfaW5pdAorKy8v
IHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAvKiBlbXB0eSB3aGVuIHdl
IGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwogICNlbmRpZgogIAogICNlbHNlCi0tLSAKLTIu
MTMuNSAoQXBwbGUgR2l0LTk0KQotCitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGlicmFyeS1jb21waWxhdGlvbi1lcnJv
cnMucGF0Y2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5n
LXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5wYXRjaAoraW5kZXggOTM2NDcxMTU0
YTUuLmU2OWRlMjliYjJkIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGlicmFyeS1jb21waWxhdGlvbi1lcnJvcnMucGF0
Y2gKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9XZWJLaXQvMDAwMi1GaXhpbmct
dXNyY3RwLWxpYnJhcnktY29tcGlsYXRpb24tZXJyb3JzLnBhdGNoCitAQCAtMSw4OCArMCwwIEBA
CistRnJvbSBiZTcxYTU0ZGE5YjBhZTdmMzc5ZWZmMDM3NzM1Mzc5YzllODVlOWNiIE1vbiBTZXAg
MTcgMDA6MDA6MDAgMjAwMQorLUZyb206IFlvdWVubiBGYWJsZXQgPHlvdWVubkBhcHBsZS5jb20+
CistRGF0ZTogVGh1LCAxNCBEZWMgMjAxNyAxMzo0NDo0MSAtMDgwMAorLVN1YmplY3Q6IFtQQVRD
SCAyLzhdIEZpeGluZyB1c3JjdHAgbGlicmFyeSBjb21waWxhdGlvbiBlcnJvcnMKKy0KKy0tLS0K
Ky0gLi4uL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2lucHV0LmMgICAgfCA4ICsrKysrKy0tCistIC4uLi9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYyAgIHwgNSArKystLQorLSAuLi4vU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgICAg
ICB8IDEgLQorLSAuLi4vbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNlcl9hdG9taWMuaCB8IDMgKystCistIDQgZmlsZXMgY2hhbmdlZCwgMTEgaW5zZXJ0
aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKy0KKy1kaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2lucHV0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYworLWluZGV4IDA2
NDllYzJlMzI1Li5lNGJiNTEzNzhkYyAxMDA3NTUKKy0tLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfaW5wdXQuYworLSsrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jCistQEAgLTE3
MjgsMTAgKzE3MjgsMTIgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKy0gCQkJCSAqIGRvbid0IGRvdWJsZSB0aGlu
Z3MKKy0gCQkJCSAqLworLSAJCQkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOworLSsJCQkJc3RydWN0
IHRpbWV2YWwgdGltZV9lbnRlcmVkOworLSAJCQkJbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9y
dG8oc3RjYiwgYXNvYywgbmV0LAorLS0JCQkJCQkJICAgICAgJmNvb2tpZS0+dGltZV9lbnRlcmVk
LAorLSsJCQkJCQkJICAgICAgJnRpbWVfZW50ZXJlZCwKKy0gCQkJCQkJCSAgICAgIHNjdHBfYWxp
Z25fdW5zYWZlX21ha2Vjb3B5LAorLSAJCQkJCQkJICAgICAgU0NUUF9SVFRfRlJPTV9OT05fREFU
QSk7CistKwkJCQljb29raWUtPnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50ZXJlZDsKKy0gCistIAkJ
CQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorLSAJCQkJICAgIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSkgeworLUBAIC0y
NDgxLDkgKzI0ODMsMTEgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcoc3RydWN0IG1idWYgKm0s
IGludCBpcGhsZW4sIGludCBvZmZzZXQsCistIAkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgm
c3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworLSAJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0
cCAhPSBOVUxMKSkgeworLSAJCS8qIGNhbGN1bGF0ZSB0aGUgUlRUIGFuZCBzZXQgdGhlIGVuY2Fw
cyBwb3J0ICovCistKwkJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOworLSAJCSgqbmV0cCkt
PlJUTyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCAqbmV0cCwKKy0tCQkJCQkJICAm
Y29va2llLT50aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fdW5zYWZlX21ha2Vjb3B5LAorLSsJCQkJ
CQkgICZ0aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fdW5zYWZlX21ha2Vjb3B5LAorLSAJCQkJCQkg
IFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworLSsJCWNvb2tpZS0+dGltZV9lbnRlcmVkID0gdGlt
ZV9lbnRlcmVkOworLSAJfQorLSAJLyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLworLSAJ
c2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7CistZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9vdXRwdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYworLWluZGV4
IDkwYjBiZjNkNjM2Li5mNjQ2Y2EzYTNjNiAxMDA3NTUKKy0tLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfb3V0cHV0LmMKKy0rKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKy1A
QCAtNjAyNCw4ICs2MDI0LDkgQEAgc2N0cF9zZW5kX2luaXRpYXRlX2FjayhzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCistIAltZW1zZXQoJnN0YywgMCwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSkpOworLSAKKy0gCS8qIHRoZSB0aW1lIEkgYnVp
bHQgY29va2llICovCistLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjLnRpbWVfZW50
ZXJlZCk7CistLQorLSsJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOworLSsJKHZvaWQpU0NU
UF9HRVRUSU1FX1RJTUVWQUwoJnRpbWVfZW50ZXJlZCk7CistKwlzdGMudGltZV9lbnRlcmVkID0g
dGltZV9lbnRlcmVkOworLSAJLyogcG9wdWxhdGUgYW55IHRpZSB0YWdzICovCistIAlpZiAoYXNv
YyAhPSBOVUxMKSB7CistIAkJLyogdW5sb2NrIGJlZm9yZSB0YWcgc2VsZWN0aW9ucyAqLworLWRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcGNiLmMKKy1pbmRleCA5ZTlmY2EwNmM0ZC4uZDBjNzcwZTMwNzggMTAwNzU1CistLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCistKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3BjYi5jCistQEAgLTY4MDksNyArNjgwOSw2IEBAIHNjdHBfcGNiX2luaXQoKQorLSAjZW5k
aWYKKy0gI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy0gCW1idWZfaW5pdGlhbGl6ZShOVUxM
KTsKKy0tCWF0b21pY19pbml0KCk7CistICNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCistIAlyZWN2X3RocmVhZF9pbml0KCk7CistICNlbmRpZgorLWRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c2VyX2F0b21pYy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorLWluZGV4IGI4NDE1
YzYwNDdlLi5mMzQ0MDU1ZGM1YiAxMDA3NTUKKy0tLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5o
CistKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorLUBAIC04MCw3ICs4MCw4IEBACistICNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCistIHN0YXRpYyB2b2lkIGF0b21pY19p
bml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKy0g
I2Vsc2UKKy0tc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hl
biB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKy0rLy8gV2ViS2l0IGNoYW5nZSwgdGhp
cyBjb25mbGljdHMgd2l0aCBhdG9taWNfaW5pdCBNYWNPUyBtYWNyby4KKy0rLy8gc3RhdGljIGlu
bGluZSB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5n
IGF0b21pY19tdHggKi8KKy0gI2VuZGlmCistIAorLSAjZWxzZQorLS0tIAorLTIuMTMuNSAoQXBw
bGUgR2l0LTk0KQorLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL2xp
YndlYnJ0Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL2xpYndlYnJ0Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDIyOTI4MmNh
N2NkOTRjMjdkZWRlMjdhOTA2N2I4MWQwM2JhMDU4NGMuLmI3NTc0ZDNhMTNhNzcwZWUyMTAxZmRi
ZmIyNTJkYTFiYzI0Mjg4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9saWJ3ZWJydGMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvbGlid2VicnRjLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTQz
MzcsNyArNDMzNyw3IEBACiAJCTQxNDVGNjFBMUZFMUYzOEMwMEVCOUNBRiAvKiB2aWRlb19kZWNv
ZGVyX2ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdmlkZW9fZGVj
b2Rlcl9mYWN0b3J5Lmg7IHBhdGggPSB2aWRlb19jb2RlY3MvdmlkZW9fZGVjb2Rlcl9mYWN0b3J5
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNDVGNjFCMUZFMUYzOEQwMEVCOUNB
RiAvKiB2aWRlb19lbmNvZGVyX2ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gdmlkZW9fZW5jb2Rlcl9mYWN0b3J5Lmg7IHBhdGggPSB2aWRlb19jb2RlY3MvdmlkZW9f
ZW5jb2Rlcl9mYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNDVGNjFD
MUZFMUYzOEQwMEVCOUNBRiAvKiB2aWRlb19lbmNvZGVyLmNjICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdmlkZW9fZW5jb2Rlci5jYzsgcGF0aCA9IHZpZGVvX2NvZGVjcy92
aWRlb19lbmNvZGVyLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0MTRENzExMjFF
NEFFOTgyMDAyM0U1MjYgLyogdXNlcl9zb2NrZXQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gdXNlcl9zb2NrZXQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDE0
RDcxMTIxRTRBRTk4MjAwMjNFNTI2IC8qIHVzZXJfc29ja2V0LmMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuYzsgbmFtZSA9IHVzZXJfc29ja2V0LmM7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfc29j
a2V0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEQ3MTE1MUU0QUVBQ0QwMDIz
RTUyNiAvKiBzY3RwX2luZGF0YS5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IHBhdGggPSBz
Y3RwX2luZGF0YS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0MTRENzExODFFNEFF
QjExMDAyM0U1MjYgLyogc2N0cF91c2Vyc3BhY2UuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gc2N0cF91c2Vyc3BhY2UuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDE0RkI4NjcyMTZCQjc2NjAwMUY1NDkyIC8qIFJUQ1J0cEZyYWdtZW50YXRpb25IZWFkZXIrUHJp
dmF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9ICJSVENSdHBGcmFnbWVudGF0aW9uSGVhZGVy
K1ByaXZhdGUubW0iOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTg4MiwyMiArNTg4
MiwyMiBAQAogCQk1QzRCNEFBMTFFNDJDNTJEMDAyNjUxQzggLyogcmVwYWNrZXRpemVyX2RlbW8u
YyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcmVwYWNrZXRpemVyX2RlbW8uYzsg
cGF0aCA9IHNyYy9yZXBhY2tldGl6ZXJfZGVtby5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1QzRCNEFBMjFFNDJDNTJEMDAyNjUxQzggLyogcmVwYWNrZXRpemVyLmMgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHJlcGFja2V0aXplci5jOyBwYXRoID0gc3JjL3JlcGFj
a2V0aXplci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzRCNEFBMzFFNDJDNTJE
MDAyNjUxQzggLyogdGFuc2lnX3RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IHRhbnNpZ190YWJsZS5oOyBwYXRoID0gc3JjL3RhbnNpZ190YWJsZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1QzRCNEFDQjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9hdG9t
aWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXNlcl9hdG9taWMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBQ0MxRTQyQzlENjAwMjY1MUM4IC8qIHVz
ZXJfZW52aXJvbm1lbnQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdXNlcl9l
bnZpcm9ubWVudC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1QzRCNEFDRDFFNDJD
OUQ2MDAyNjUxQzggLyogdXNlcl9lbnZpcm9ubWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSB1c2VyX2Vudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTVDNEI0QUNFMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2lucGNiLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVzZXJfaW5wY2IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNUM0QjRBQ0YxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfaXBfaWNtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX2lwX2ljbXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDAxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfaXA2X3Zh
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX2lwNl92YXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDExRTQyQzlENjAwMjY1MUM4IC8qIHVz
ZXJfbWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVzZXJfbWFsbG9j
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQyMUU0MkM5RDYwMDI2NTFD
OCAvKiB1c2VyX21idWYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdXNlcl9t
YnVmLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQzMUU0MkM5RDYwMDI2
NTFDOCAvKiB1c2VyX21idWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXNl
cl9tYnVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQ0MUU0MkM5RDYw
MDI2NTFDOCAvKiB1c2VyX3F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IHVzZXJfcXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDUxRTQy
QzlENjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJlYWQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5jOyBwYXRoID0gdXNlcl9yZWN2X3RocmVhZC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk1QzRCNEFENjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yZWN2X3RocmVhZC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX3JlY3ZfdGhyZWFkLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQ3MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3Jv
dXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVzZXJfcm91dGUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDkxRTQyQzlENjAwMjY1MUM4IC8qIHVz
ZXJfc29ja2V0dmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVzZXJfc29j
a2V0dmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QURBMUU0MkM5RDYw
MDI2NTFDOCAvKiB1c2VyX3VtYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
c2VyX3VtYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1QzRCNEFEQjFFNDJDOUQ2
MDAyNjUxQzggLyogdXNyc2N0cC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1
c3JzY3RwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUNCMUU0MkM5RDYw
MDI2NTFDOCAvKiB1c2VyX2F0b21pYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSB1c2VyX2F0b21pYy5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFDQzFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9l
bnZpcm9ubWVudC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1c2VyX2Vudmly
b25tZW50LmM7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYzsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBQ0QxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfZW52
aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl9lbnZpcm9u
bWVudC5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUNFMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2lucGNi
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfaW5wY2IuaDsgcGF0aCA9
IHVzcnNjdHBsaWIvdXNlcl9pbnBjYi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1
QzRCNEFDRjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9pcF9pY21wLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfaXBfaWNtcC5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2Vy
X2lwX2ljbXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDAxRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfaXA2X3Zhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSB1c2VyX2lwNl92YXIuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUQxMUU0MkM5RDYwMDI2NTFDOCAvKiB1
c2VyX21hbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSB1c2VyX21hbGxv
Yy5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX21hbGxvYy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk1QzRCNEFEMjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9tYnVmLmMgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVzZXJfbWJ1Zi5jOyBwYXRoID0gdXNyc2N0cGxp
Yi91c2VyX21idWYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDMxRTQy
QzlENjAwMjY1MUM4IC8qIHVzZXJfbWJ1Zi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSB1c2VyX21idWYuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9tYnVmLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUQ0MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3F1
ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfcXVldWUuaDsgcGF0
aCA9IHVzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk1QzRCNEFENTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yZWN2X3RocmVhZC5jICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1c2VyX3JlY3ZfdGhyZWFkLmM7IHBhdGggPSB1c3Jz
Y3RwbGliL3VzZXJfcmVjdl90aHJlYWQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM0QjRBRDYxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJlYWQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl9yZWN2X3RocmVhZC5oOyBwYXRoID0gdXNyc2N0
cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEI0QUQ3MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3JvdXRlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IHVzZXJfcm91dGUuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9yb3V0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFEOTFFNDJDOUQ2MDAyNjUx
QzggLyogdXNlcl9zb2NrZXR2YXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
dXNlcl9zb2NrZXR2YXIuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBREExRTQyQzlENjAwMjY1MUM4IC8qIHVz
ZXJfdW1hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfdW1hLmg7IHBh
dGggPSB1c3JzY3RwbGliL3VzZXJfdW1hLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTVDNEI0QURCMUU0MkM5RDYwMDI2NTFDOCAvKiB1c3JzY3RwLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IHVzcnNjdHAuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNyc2N0cC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzRCNEFFRTFFNDJDOUVGMDAyNjUxQzggLyog
c2N0cF9hc2NvbmYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9hc2Nv
bmYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0QjRBRUYxRTQyQzlFRjAwMjY1
MUM4IC8qIHNjdHBfYXNjb25mLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHNj
dHBfYXNjb25mLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTVDNEI0QUYwMUU0MkM5
RUYwMDI2NTFDOCAvKiBzY3RwX2F1dGguYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRo
ID0gc2N0cF9hdXRoLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDk0Nyw3ICsx
MDk0Nyw4IEBACiAJCQkJNUM0QjRCMTYxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHB1dGlsLmMgKi8s
CiAJCQkJNUM0QjRCMTcxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHB1dGlsLmggKi8sCiAJCQkpOwot
CQkJcGF0aCA9IG5ldGluZXQ7CisJCQluYW1lID0gbmV0aW5ldDsKKwkJCXBhdGggPSB1c3JzY3Rw
bGliL25ldGluZXQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OwogCQk1QzRCNEI0
MjFFNDJDOUY2MDAyNjUxQzggLyogbmV0aW5ldDYgKi8gPSB7CkBAIC0xMDk1Niw3ICsxMDk1Nyw4
IEBACiAJCQkJNUM0QjRCNDMxRTQyQ0EwMDAwMjY1MUM4IC8qIHNjdHA2X3VzcnJlcS5jICovLAog
CQkJCTVDNEI0QjQ0MUU0MkNBMDAwMDI2NTFDOCAvKiBzY3RwNl92YXIuaCAqLywKIAkJCSk7Ci0J
CQlwYXRoID0gbmV0aW5ldDY7CisJCQluYW1lID0gbmV0aW5ldDY7CisJCQlwYXRoID0gdXNyc2N0
cGxpYi9uZXRpbmV0NjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CiAJCTVDNEI0
QjU3MUU0MzFDMjAwMDI2NTFDOCAvKiBzZGsgKi8gPSB7CkBAIC0xNzU4Nyw2ICsxNzU4OSw3IEBA
CiAJCQkJCVNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC8sCiAJ
CQkJCVNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLAogCQkJCQlTb3VyY2Uv
dGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy9pbmNsdWRlLywKKwkJCQkJU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliLywKIAkJCQkpOwogCQkJCVBST0RVQ1Rf
TkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CiAJCQl9OwpAQCAtMTc2MDEsNiArMTc2MDQsNyBAQAog
CQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvLAogCQkJ
CQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLywKIAkJCQkJU291cmNlL3Ro
aXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZS8sCisJCQkJCVNvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi8sCiAJCQkJKTsKIAkJCQlQUk9EVUNUX05B
TUUgPSAiJChUQVJHRVRfTkFNRSkiOwogCQkJfTsKQEAgLTE3NjE1LDYgKzE3NjE5LDcgQEAKIAkJ
CQkJU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0LywKIAkJCQkJ
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8sCiAJCQkJCVNvdXJjZS90aGly
ZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL2luY2x1ZGUvLAorCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvLAogCQkJCSk7CiAJCQkJUFJPRFVDVF9OQU1F
ID0gIiQoVEFSR0VUX05BTUUpIjsKIAkJCX07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357701</attachid>
            <date>2018-12-19 11:42:52 -0800</date>
            <delta_ts>2018-12-19 17:48:27 -0800</delta_ts>
            <desc>Update CMake</desc>
            <filename>bug-192863-20181219114249.patch</filename>
            <type>text/plain</type>
            <size>6528766</size>
            <attacher name="youenn fablet">youennf</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM5MjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvQ2hhbmdlTG9nIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL0NoYW5n
ZUxvZwppbmRleCA5MGZmYzQ1ODAwODFhYzRhMTQwOTIwNjY3NjZlNWNmNjBmZGZkZTM0Li5jYzlk
ZWVlOWM2MDdiNzMzYWYyNGYwODcyZDA1OGJhYzg0NDIwY2QwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMiBAQAorMjAxOC0xMi0xOSAgWW91ZW5uIEZh
YmxldCAgPHlvdWVubkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVmcmVzaCB1c3JzY3RwbGliIHRv
IE03MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTky
ODYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBT
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC86IFJlc3luY2VkIHRvIENocm9tZSBNNzIgYnJhbmNo
LgorCiAyMDE4LTEyLTE5ICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZXN5bmMgbGlic3J0cCB0byBNNzIKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9D
TWFrZUxpc3RzLnR4dAppbmRleCA2YzA4NTZlNTNjZDY4YjhlYmE1MmEwZWIxMDE5NGUxY2QxZGU2
YzY4Li5iN2E0ZTUyY2JlZjc0NjQ5NDVhN2UyN2ZhMGU5OTA4NThhZTgzOTY0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL0NNYWtlTGlzdHMudHh0CkBAIC0zMjEsMjkgKzMyMSwyOSBA
QCBzZXQod2VicnRjX1NPVVJDRVMKICAgICBTb3VyY2UvdGhpcmRfcGFydHkvbGlieXV2L3NvdXJj
ZS92aWRlb19jb21tb24uY2MKICAgICBTb3VyY2UvdGhpcmRfcGFydHkvcm5ub2lzZS9zcmMva2lz
c19mZnQuY2MKICAgICBTb3VyY2UvdGhpcmRfcGFydHkvcm5ub2lzZS9zcmMvcm5uX3ZhZF93ZWln
aHRzLmNjCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfYXNjb25mLmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9hdXRoLmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jCi0gICAgU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMKLSAg
ICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMz
Mi5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfaW5kYXRhLmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbnB1dC5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYwotICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYwotICAgIFNvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwotICAgIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9u
cy5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfc3lzY3RsLmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF90aW1lci5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c3JyZXEuYwotICAgIFNvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5jCi0gICAgU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwotICAg
IFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5j
Ci0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX21idWYuYwot
ICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVh
ZC5jCi0gICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3NvY2tl
dC5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9hc2NvbmYuYworICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5jCisgICAgU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRk
ci5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9jYWxsb3V0LmMKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jCisgICAgU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jcmMzMi5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYworICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYworICAgIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
b3V0cHV0LmMKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMKKyAgICBTb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3No
YTEuYworICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfc3NfZnVuY3Rpb25zLmMKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jCisgICAgU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF90aW1lci5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYworICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNycmVxLmMKKyAgICBT
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwdXRpbC5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCisgICAgU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYworICAgIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuYwor
ICAgIFNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2Vy
X3JlY3ZfdGhyZWFkLmMKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYwogICAgIFNvdXJjZS93ZWJydGMvYXBpL2F1ZGlvL2F1
ZGlvX2ZyYW1lLmNjCiAgICAgU291cmNlL3dlYnJ0Yy9hcGkvYXVkaW9fY29kZWNzL0wxNi9hdWRp
b19kZWNvZGVyX0wxNi5jYwogICAgIFNvdXJjZS93ZWJydGMvYXBpL2F1ZGlvX2NvZGVjcy9MMTYv
YXVkaW9fZW5jb2Rlcl9MMTYuY2MKQEAgLTE0MTAsNyArMTQxMCw4IEBAIHRhcmdldF9pbmNsdWRl
X2RpcmVjdG9yaWVzKHdlYnJ0YyBQUklWQVRFCiAgICAgU291cmNlL3RoaXJkX3BhcnR5L29wdXMv
c3JjL3NpbGsvZmxvYXQKICAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cAogICAgIFNvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIKLSAgICBTb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIKKyAgICBTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldAogICAgIFNvdXJjZS93ZWJydGMKICAgICBTb3Vy
Y2Uvd2VicnRjL2NvbW1vbl9hdWRpby9yZXNhbXBsZXIvaW5jbHVkZQogICAgIFNvdXJjZS93ZWJy
dGMvY29tbW9uX2F1ZGlvL3NpZ25hbF9wcm9jZXNzaW5nL2luY2x1ZGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9CVUlM
RC5nbiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC9CVUlMRC5nbgppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1
MzkxLi45NGYyNjc4NmUxZDgxNDM5OGIxMDBjMTU0MTQwYTI4ZDhiZDM2MjRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
QlVJTEQuZ24KKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL0JVSUxELmduCkBAIC0wLDAgKzEsMTQ2IEBACisjIENvcHlyaWdodCAyMDE0
IFRoZSBDaHJvbWl1bSBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2Ugb2YgdGhp
cyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgY2Fu
IGJlCisjIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUuCisKK2ltcG9ydCgiLy9idWlsZC90b29s
Y2hhaW4vdG9vbGNoYWluLmduaSIpCisKK2NvbmZpZygidXNyc2N0cF9jb25maWciKSB7CisgIGlu
Y2x1ZGVfZGlycyA9IFsKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliIiwKKyAgICAidXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQiLAorICBdCit9CisKK2NvbmZpZygidXNyc2N0cF93YXJu
aW5ncyIpIHsKKyAgaWYgKGlzX2NsYW5nKSB7CisgICAgY2ZsYWdzID0gWworICAgICAgIyBhdG9t
aWNfaW5pdCBpbiB1c2VyX2F0b21pYy5oIGlzIGEgc3RhdGljIGZ1bmN0aW9uIGluIGEgaGVhZGVy
LgorICAgICAgIi1Xbm8tdW51c2VkLWZ1bmN0aW9uIiwKKworICAgICAgIyBVc2Ugb2YgZGVwcmVj
YXRlZCBPU0F0b21pYyogZnVuY3Rpb25zIGluIHVzZXJfYXRvbWljLmguIFRoaXMgaXMKKyAgICAg
ICMgd2hhdCB0aGV5IGRpZCBpbiBjb25maWd1cmUuYWMuIFdlIGNhbiByZW1vdmUgdGhpcyBvbmNl
CisgICAgICAjIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvaXNzdWVzLzE3NyBp
cyBmaXhlZC4KKyAgICAgICItV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIiwKKyAgICBdCisg
IH0KK30KKworc3RhdGljX2xpYnJhcnkoInVzcnNjdHAiKSB7CisgIHNvdXJjZXMgPSBbCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHAuaCIsCisgICAgInVzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9hdXRoLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2F1dGguaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
YnNkX2FkZHIuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNk
X2FkZHIuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91
dC5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0Lmgi
LAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5j
IiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaCIs
CisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuYyIsCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuaCIsCisgICAgInVzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaGVhZGVyLmgiLAorICAgICJ1c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jIiwKKyAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfaW5wdXQuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfaW5wdXQuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfbG9ja191c2Vyc3BhY2UuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfb3MuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3Nf
dXNlcnNwYWNlLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291
dHB1dC5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQu
aCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMiLAorICAg
ICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5oIiwKKyAgICAidXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMiLAorICAgICJ1c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuaCIsCisgICAgInVzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmgiLAorICAgICJ1c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfc2hhMS5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9zc19mdW5jdGlvbnMuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfc3RydWN0cy5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9zeXNjdGwuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
c3lzY3RsLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVy
LmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgiLAor
ICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oIiwKKyAgICAidXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYyIsCisgICAgInVzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNycmVxLmMiLAorICAgICJ1c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Zhci5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cHV0aWwuYyIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHB1dGlsLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0
cDZfdXNycmVxLmMiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZf
dmFyLmgiLAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaCIsCisgICAg
InVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmMiLAorICAgICJ1c3JzY3Rw
bGliL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5oIiwKKyAgICAidXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfaW5wY2IuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lw
Nl92YXIuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwX2ljbXAuaCIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21hbGxvYy5oIiwKKyAgICAidXNyc2N0cGxp
Yi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfbWJ1Zi5oIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcXVldWUuaCIsCisg
ICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMiLAorICAgICJ1c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5oIiwKKyAgICAidXNyc2N0cGxpYi91
c3JzY3RwbGliL3VzZXJfcm91dGUuaCIsCisgICAgInVzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2Vy
X3NvY2tldC5jIiwKKyAgICAidXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgi
LAorICAgICJ1c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl91bWEuaCIsCisgICAgInVzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c3JzY3RwLmgiLAorICBdCisKKyAgZGVmaW5lcyA9IFsKKyAgICAiU0NU
UF9QUk9DRVNTX0xFVkVMX0xPQ0tTIiwKKyAgICAiU0NUUF9TSU1QTEVfQUxMT0NBVE9SIiwKKyAg
ICAiU0NUUF9VU0VfT1BFTlNTTF9TSEExIiwKKyAgICAiX19Vc2Vyc3BhY2VfXyIsCisKKyAgICAj
ICJTQ1RQX0RFQlVHIiwgIyBVbmNvbW1lbnQgZm9yIFNDVFAgZGVidWdnaW5nLgorICBdCisKKyAg
Y29uZmlncyAtPSBbICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpjaHJvbWl1bV9jb2RlIiBdCisg
IGNvbmZpZ3MgKz0gWworICAgICIvL2J1aWxkL2NvbmZpZy9jb21waWxlcjpub19jaHJvbWl1bV9j
b2RlIiwKKworICAgICMgVGhlc2UgbXVzdCBiZSBhZnRlciBub19jaHJvbWl1bV9jb2RlIGZvciB3
YXJuaW5nIGZsYWdzIHRvIGJlIG9yZGVyZWQKKyAgICAjIGNvcnJlY3RseS4KKyAgICAiLy9idWls
ZC9jb25maWcvY29tcGlsZXI6bm9faW5jb21wYXRpYmxlX3BvaW50ZXJfd2FybmluZ3MiLAorICAg
ICI6dXNyc2N0cF93YXJuaW5ncyIsCisgIF0KKworICBwdWJsaWNfY29uZmlncyA9IFsgIjp1c3Jz
Y3RwX2NvbmZpZyIgXQorCisgIGNmbGFncyA9IFsKKyAgICAiLVVJTkVUIiwKKyAgICAiLVVJTkVU
NiIsCisgIF0KKworICBpZiAoaXNfbGludXggfHwgaXNfYW5kcm9pZCkgeworICAgIGRlZmluZXMg
Kz0gWworICAgICAgIl9fVXNlcnNwYWNlX29zX0xpbnV4IiwKKyAgICAgICJfR05VX1NPVVJDRSIs
CisgICAgXQorICB9IGVsc2UgaWYgKGlzX21hYyB8fCBpc19pb3MpIHsKKyAgICBkZWZpbmVzICs9
IFsKKyAgICAgICJIQVZFX1NBX0xFTiIsCisgICAgICAiSEFWRV9TQ09OTl9MRU4iLAorICAgICAg
Il9fQVBQTEVfVVNFX1JGQ18yMjkyIiwKKyAgICAgICJfX1VzZXJzcGFjZV9vc19EYXJ3aW4iLAor
ICAgIF0KKyAgICBjZmxhZ3MgKz0gWyAiLVVfX0FQUExFX18iIF0KKyAgfQorCisgIGlmIChpc193
aW4pIHsKKyAgICBkZWZpbmVzICs9IFsgIl9fVXNlcnNwYWNlX29zX1dpbmRvd3MiIF0KKyAgfSBl
bHNlIHsKKyAgICBkZWZpbmVzICs9IFsgIk5PTl9XSU5ET1dTX0RFRklORSIgXQorICB9CisKKyAg
aWYgKGlzX2Z1Y2hzaWEpIHsKKyAgICBkZWZpbmVzICs9IFsgIl9fVXNlcnNwYWNlX29zX0Z1Y2hz
aWEiIF0KKyAgfQorICBkZXBzID0gWworICAgICIvL3RoaXJkX3BhcnR5L2JvcmluZ3NzbCIsCisg
IF0KK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9DTWFrZUxpc3RzLnR4dApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMGY3MTgzMzU0MjNkODU1Y2EyNTM1ZjQ3Y2UwNDk0NWUyZjc4
ZjFjZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvQ01ha2VM
aXN0cy50eHQKKysrIC9kZXYvbnVsbApAQCAtMSwyNDQgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQg
KEMpIDIwMTUtMjAxNSBPbGVnIEFsZXhlZW5rb3YKLSMgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcg
RmVsaXggV2VpbnJhbmsKLSMKLSMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSMKLSMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0jIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotIyBhcmUgbWV0OgotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0jIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSMgMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSMgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCi0jICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgotIwotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNU
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSMgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKLSMgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSMgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0jIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0jIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkKLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotIyBTVUNIIERBTUFHRS4KLSMKLQotY21ha2Vf
bWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuNikKLXByb2plY3QodXNyc2N0cGxpYikKLQotIyBE
ZWJ1ZyBidWlsZCB0eXBlIGFzIGRlZmF1bHQKLWlmIChOT1QgQ01BS0VfQlVJTERfVFlQRSkKLSAg
ICBtZXNzYWdlKFNUQVRVUyAiTm8gYnVpbGQgdHlwZSBzZWxlY3RlZCwgdXNpbmcgREVCVUciKQot
ICAgIHNldChDTUFLRV9CVUlMRF9UWVBFICJERUJVRyIpCi1lbmRpZiAoKQotCi1pbmNsdWRlKENo
ZWNrU3RydWN0SGFzTWVtYmVyKQotaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQotaW5jbHVkZShD
aGVja0luY2x1ZGVGaWxlcykKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjCi0jIENIRUNLIE9QVElPTlMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotb3B0aW9uKElOVkFSSUFOVFMgIkFkZCBydW50
aW1lIGNoZWNrcyIgMCkKLWlmIChJTlZBUklBTlRTKQotICAgIGFkZF9kZWZpbml0aW9ucygtRElO
VkFSSUFOVFMpCi1lbmRpZiAoKQotCi1vcHRpb24oU0NUUF9ERUJVRyAiUHJvdmlkZSBkZWJ1ZyBp
bmZvcm1hdGlvbiIgMSkKLWlmIChTQ1RQX0RFQlVHKQotICAgIGFkZF9kZWZpbml0aW9ucygtRFND
VFBfREVCVUcpCi1lbmRpZiAoKQotCi1vcHRpb24oSU5FVCAiU3VwcG9ydCBJUHY0IiAxKQotaWYg
KElORVQpCi0gICAgYWRkX2RlZmluaXRpb25zKC1ESU5FVCkKLWVuZGlmICgpCi0KLW9wdGlvbihJ
TkVUNiAiU3VwcG9ydCBJUHY2IiAxKQotaWYgKElORVQ2KQotICAgIGFkZF9kZWZpbml0aW9ucygt
RElORVQ2KQotZW5kaWYgKCkKLQotb3B0aW9uKFNDVFBfU0lNUExFX0FMTE9DQVRPUiAiICIgMSkK
LWlmIChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9T
SU1QTEVfQUxMT0NBVE9SKQotZW5kaWYgKCkKLQotb3B0aW9uKFNDVFBfUFJPQ0VTU19MRVZFTF9M
T0NLUyAiICIgMSkKLWlmIChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0gICAgYWRkX2RlZmlu
aXRpb25zKC1EU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQotZW5kaWYgKCkKLQotb3B0aW9uKFND
VFBfV0lUSF9OT19DU1VNICJEaXNhYmxlIFNDVFAgY2hlY2tzdW0iIDApCi1pZiAoU0NUUF9XSVRI
X05PX0NTVU0pCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9XSVRIX05PX0NTVU0pCi1lbmRp
ZiAoKQotCi1vcHRpb24oU0NUUF9NQlVGX0xPR0dJTkcgIiAiIDApCi1pZiAoU0NUUF9NQlVGX0xP
R0dJTkcpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9NQlVGX0xPR0dJTkcpCi1lbmRpZiAo
KQotCi1vcHRpb24oU0NUUF9QQUNLRVRfTE9HR0lORyAiICIgMCkKLWlmIChTQ1RQX1BBQ0tFVF9M
T0dHSU5HKQotICAgIGFkZF9kZWZpbml0aW9ucygtRFNDVFBfUEFDS0VUX0xPR0dJTkcpCi1lbmRp
ZiAoKQotCi1vcHRpb24oU0NUUF9TT19MT0NLX1RFU1RJTkcgIiAiIDApCi1pZiAoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci1lbmRpZiAoKQotCi1vcHRpb24oU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAiICIgMCkKLWlmIChT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFKQotICAgIGFkZF9kZWZpbml0aW9ucygtRFNDVFBfRU1CRURE
RURfVjZfU0NPUEUpCi1lbmRpZiAoKQotCi1vcHRpb24oU0NUUF9LQU1FICIgIiAwKQotaWYgKFND
VFBfS0FNRSkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURTQ1RQX0tBTUUpCi1lbmRpZiAoKQotCi1v
cHRpb24oV0VSUk9SICJXYXJuaW5nIGFzIGVycm9yIiAxKQotCi1vcHRpb24oTElOS19QUk9HUkFN
U19TVEFUSUMgIkxpbmsgZXhhbXBsZSBwcm9ncmFtcyBzdGF0aWMiIDApCi0KLW9wdGlvbihCVUlM
RF9QUk9HUkFNUyAiQnVpbGQgZXhhbXBsZSBwcm9ncmFtcyIgMSkKLQotb3B0aW9uKFNBTklUSVpF
Ul9BRERSRVNTICJDb21waWxlIHdpdGggYWRkcmVzcyBzYW5pdGl6ZXIiIDApCi0KLW9wdGlvbihT
QU5JVElaRVJfTUVNT1JZICJDb21waWxlIHdpdGggbWVtb3J5IHNhbml0aXplciIgMCkKLQotaWYg
KFNBTklUSVpFUl9BRERSRVNTIEFORCBTQU5JVElaRVJfTUVNT1JZKQotICAgIG1lc3NhZ2UoRkFU
QUxfRVJST1IgIkNhbiBub3QgY29tcGlsZSB3aXRoIGJvdGggc2FuaXRpemVyIG9wdGlvbnMiKQot
ZW5kaWYgKCkKLQotaWYgKExJTktfUFJPR1JBTVNfU1RBVElDIE9SIFdJTjMyKQotICAgIHNldChQ
Uk9HUkFNU19MSU5LX0xJQlJBUlkgInVzcnNjdHAtc3RhdGljIikKLWVsc2UgKCkKLSAgICBzZXQo
UFJPR1JBTVNfTElOS19MSUJSQVJZICJ1c3JzY3RwIikKLWVuZGlmICgpCi0KLQotIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDSEVDSyBGT1IgVFlQ
RVMgQU5EIEZVTkNUSU9OUwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIwotCi1jaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvcXVldWUuaCIgSEFWRV9TWVNf
UVVFVUVfSCkKLWlmIChIQVZFX1NZU19RVUVVRV9IKQotICAgIGFkZF9kZWZpbml0aW9ucygtREhB
VkVfU1lTX1FVRVVFX0gpCi1lbmRpZiAoKQotCi1jaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvc29j
a2V0Lmg7bGludXgvaWZfYWRkci5oIiBIQVZFX0xJTlVYX0lGX0FERFJfSCkKLWlmIChIQVZFX0xJ
TlVYX0lGX0FERFJfSCkKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX0xJTlVYX0lGX0FERFJf
SCkKLWVuZGlmICgpCi0KLWNoZWNrX2luY2x1ZGVfZmlsZXMoInN5cy9zb2NrZXQuaDtsaW51eC9y
dG5ldGxpbmsuaCIgSEFWRV9MSU5VWF9SVE5FVExJTktfSCkKLWlmIChIQVZFX0xJTlVYX1JUTkVU
TElOS19IKQotICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfTElOVVhfUlRORVRMSU5LX0gpCi1l
bmRpZiAoKQotCi1jaGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvdHlwZXMuaDtuZXRpbmV0L2luLmg7
bmV0aW5ldC9pcC5oO25ldGluZXQvaXBfaWNtcC5oIiBIQVZFX05FVElORVRfSVBfSUNNUF9IKQot
aWYgKEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gpCi0gICAgYWRkX2RlZmluaXRpb25zKC1ESEFWRV9O
RVRJTkVUX0lQX0lDTVBfSCkKLWVuZGlmICgpCi0KLWNoZWNrX2luY2x1ZGVfZmlsZXMoInN0ZGF0
b21pYy5oIiBIQVZFX1NUREFUT01JQ19IKQotaWYgKEhBVkVfU1REQVRPTUlDX0gpCi0gICAgYWRk
X2RlZmluaXRpb25zKC1ESEFWRV9TVERBVE9NSUNfSCkKLWVuZGlmICgpCi0KLQotIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDSEVDSyBTVFJVQ1Qg
TUVNQkVSUwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IwotCi1zZXQgKENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICIke0NNQUtFX1NPVVJDRV9ESVJ9L3Vz
cnNjdHBsaWIiKQotY2hlY2tfaW5jbHVkZV9maWxlKHVzcnNjdHAuaCBIQVZFX1VTUlNDVFBfSCkK
LWlmIChOT1QgSEFWRV9VU1JTQ1RQX0gpCi0gICAgbWVzc2FnZShGQVRBTF9FUlJPUiAidXNyc2N0
cC5oIG5vdCBmb3VuZCIpCi1lbmRpZiAoKQotCi1jaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3Ry
dWN0IHNvY2thZGRyIiAic2FfbGVuIiAic3lzL3R5cGVzLmg7c3lzL3NvY2tldC5oIiBIQVZFX1NB
X0xFTikKLWlmIChIQVZFX1NBX0xFTikKLSAgICBtZXNzYWdlKFNUQVRVUyAiSEFWRV9TQV9MRU4i
KQotICAgIGFkZF9kZWZpbml0aW9ucygtREhBVkVfU0FfTEVOKQotZW5kaWYgKCkKLQotY2hlY2tf
c3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9pbiIgInNpbl9sZW4iICJzeXMvdHlw
ZXMuaDtuZXRpbmV0L2luLmgiIEhBVkVfU0lOX0xFTikKLWlmIChIQVZFX1NJTl9MRU4pCi0gICAg
bWVzc2FnZShTVEFUVVMgIkhBVkVfU0lOX0xFTiIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1ESEFW
RV9TSU5fTEVOKQotZW5kaWYgKCkKLQotY2hlY2tfc3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBz
b2NrYWRkcl9pbjYiICJzaW42X2xlbiIgInN5cy90eXBlcy5oO25ldGluZXQvaW4uaCIgSEFWRV9T
SU42X0xFTikKLWlmIChIQVZFX1NJTjZfTEVOKQotICAgIG1lc3NhZ2UoU1RBVFVTICJIQVZFX1NJ
TjZfTEVOIikKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURIQVZFX1NJTjZfTEVOKQotZW5kaWYgKCkK
LQotY2hlY2tfc3RydWN0X2hhc19tZW1iZXIoInN0cnVjdCBzb2NrYWRkcl9jb25uIiAic2Nvbm5f
bGVuIiAidXNyc2N0cC5oIiBIQVZFX1NDT05OX0xFTikKLWlmIChIQVZFX1NDT05OX0xFTikKLSAg
ICBtZXNzYWdlKFNUQVRVUyAiSEFWRV9TQ09OTl9MRU4iKQotICAgIGFkZF9kZWZpbml0aW9ucygt
REhBVkVfU0NPTk5fTEVOKQotZW5kaWYgKCkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIENPTVBJTEVSIFNFVFRJTkdTCi0jIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgU0VUVElOR1MgRk9S
IFVOSVggQ09NUElMRVIKLWlmICgieCR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIFNUUkVRVUFMICJ4
Q2xhbmciIE9SICJ4JHtDTUFLRV9DX0NPTVBJTEVSX0lEfSIgU1RSRVFVQUwgInhHTlUiKQotICAg
IHNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtc3RkPWM5OSAtcGVkYW50
aWMgLVdhbGwgLVdleHRyYSAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0aCAt
V2luaXQtc2VsZiAtV25vLXVudXNlZC1mdW5jdGlvbiAtV25vLXVudXNlZC1wYXJhbWV0ZXIiKQot
ICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtc3RkPWM5OSAtcGVk
YW50aWMgLVdhbGwgLVdleHRyYSAtV2Zsb2F0LWVxdWFsIC1Xc2hhZG93IC1XcG9pbnRlci1hcml0
aCAtV2luaXQtc2VsZiAtV25vLXVudXNlZC1mdW5jdGlvbiAtV25vLXVudXNlZC1wYXJhbWV0ZXIi
KQotCi0gICAgaWYgKFdFUlJPUikKLSAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFL
RV9DX0ZMQUdTfSAgIC1XZXJyb3IiKQotICAgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NN
QUtFX0NYWF9GTEFHU30gLVdlcnJvciIpCi0gICAgZW5kaWYgKCkKLQotICAgIGlmIChTQU5JVEla
RVJfQUREUkVTUykKLSAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdT
fSAgIC1mc2FuaXRpemU9YWRkcmVzcyAtTzEgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcgLVdu
by1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiKQotICAgICAgICBzZXQoQ01BS0VfQ1hYX0ZMQUdT
ICIke0NNQUtFX0NYWF9GTEFHU30gLWZzYW5pdGl6ZT1hZGRyZXNzIC1PMSAtZm5vLW9taXQtZnJh
bWUtcG9pbnRlciAtZyAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIpCi0gICAgZW5kaWYg
KCkKLQotICAgIGlmIChTQU5JVElaRVJfTUVNT1JZKQotICAgICAgICAjIG1heWJlIGFkZCAiLWZQ
SUUgLXBpZSIgaGVyZQotICAgICAgICBzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxB
R1N9ICAgLWZzYW5pdGl6ZT1tZW1vcnkgLWZuby1vbWl0LWZyYW1lLXBvaW50ZXIgLWcgLVduby1h
ZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucyIp
Ci0gICAgICAgIHNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtZnNhbml0
aXplPW1lbW9yeSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciAtZyAtV25vLWFkZHJlc3Mtb2YtcGFj
a2VkLW1lbWJlciAtZnNhbml0aXplLW1lbW9yeS10cmFjay1vcmlnaW5zIikKLSAgICBlbmRpZiAo
KQotZW5kaWYgKCkKLQotIyBTRVRUSU5HUyBGT1IgVklTVUFMIFNUVURJTyBDT01QSUxFUgotaWYg
KCJ4JHtDTUFLRV9DX0NPTVBJTEVSX0lEfSIgU1RSRVFVQUwgInhNU1ZDIikKLSAgICBpZiAoQ01B
S0VfQ19GTEFHUyBNQVRDSEVTICIvV1swLTRdIikKLSAgICAgICAgc3RyaW5nKFJFR0VYIFJFUExB
Q0UgIi9XWzAtNF0iICIvVzMiIENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30iKQotICAg
IGVsc2UgKCkKLSAgICAgICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gL1cz
IikKLSAgICBlbmRpZiAoKQotCi0gICAgaWYgKFdFUlJPUikKLSAgICAgICAgc2V0KENNQUtFX0Nf
RkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gL1dYIikKLSAgICBlbmRpZiAoKQotZW5kaWYgKCkKLQot
Ci0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIElO
Q0xVREUgU1VCRElSUwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIwotCi1hZGRfc3ViZGlyZWN0b3J5KHVzcnNjdHBsaWIpCi0KLWlmIChCVUlMRF9QUk9H
UkFNUykKLSAgICBhZGRfc3ViZGlyZWN0b3J5KHByb2dyYW1zKQotZW5kaWYgKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9MSUNFTlNFIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL0xJQ0VOU0UKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uZjYxNGJlOWUyMmNjNDYzMjczYTNiNDhjZTEwNThkNmEwM2QwZDJkMiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL0xJQ0VOU0UKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL0xJQ0VOU0UKQEAgLTAsMCArMSwzMCBAQAorKENvcGllZCBmcm9tIHRo
ZSBDT1BZUklHSFQgZmlsZSBvZgoraHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9zY3RwLXJlZmlt
cGwvc291cmNlL2Jyb3dzZS90cnVuay9DT1BZUklHSFQpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitDb3B5cmlnaHQgKGMpIDIwMDEsIDIwMDIgQ2lzY28gU3lzdGVtcywgSW5jLgorQ29weXJp
Z2h0IChjKSAyMDAyLTEyIFJhbmRhbGwgUi4gU3Rld2FydAorQ29weXJpZ2h0IChjKSAyMDAyLTEy
IE1pY2hhZWwgVHVleGVuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9MSUNFTlNFLm1kIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL0xJ
Q0VOU0UubWQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEyZDFmOTg5Y2ZmYTllNmU2
NzJjMGEzOGVjZjg5Yzc2MmM0NzUzMjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL0xJQ0VOU0UubWQKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi1D
b3B5cmlnaHQgKGMpIDIwMTUsICBSYW5kYWxsIFN0ZXdhcnQgYW5kIE1pY2hhZWwgVHVleGVuCi1B
bGwgcmlnaHRzIHJlc2VydmVkLgotCi1SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLW1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotCi0q
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwgdGhpcwotICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLQotKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24K
LSAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
Ci0KLSogTmVpdGhlciB0aGUgbmFtZSBvZiB1c3JzY3RwIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0KLVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgotQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi1ESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi1GT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTAotREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLVNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCi1DQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLAotT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLU9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFr
ZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvTWFrZWZpbGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5ZTE3
ZTIyYzRmNzhkZmJiNTYyY2U1NjRkOWE1YWE1Zjc3ZTAyNmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEs
MzQgKzAsMCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgot
IwotIyBBbGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0j
IGFyZSBtZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBw
cm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotIyAgICBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdh
cmUKLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0j
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBB
UkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0jIFNVQ0ggREFNQUdFLgotIwotCi1TVUJESVJTID0gdXNyc2N0cGxpYiBw
cm9ncmFtcwotRVhUUkFfRElTVCA9IGJvb3RzdHJhcCBNYWtlZmlsZS5ubWFrZQotQUNMT0NBTF9B
TUZMQUdTID0gLUkgbTQKLSMgcGtnY29uZmlnX0RBVEEgPSB1c3JzY3RwLnBjCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
TWFrZWZpbGUubm1ha2UgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvTWFrZWZpbGUubm1ha2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDZmOWQ3MDE0Nzg0OThlZDJmYjQxYzI5ZWQ1MjEyMGY3MzgyNGMxOTIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01ha2VmaWxlLm5tYWtlCisrKyAvZGV2
L251bGwKQEAgLTEsNDUgKzAsMCBAQAotIw0KLSMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWlj
aGFlbCBUdWV4ZW4NCi0jDQotIyBBbGwgcmlnaHRzIHJlc2VydmVkLg0KLSMNCi0jIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dA0KLSMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zDQotIyBhcmUgbWV0Og0KLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0jICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCi0j
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0DQotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlDQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KLSMgMy4g
TmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250
cmlidXRvcnMNCi0jICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQ0KLSMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uDQotIw0KLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQNCi0jIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQ0KLSMgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UNCi0jIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFDQotIyBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTA0KLSMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMNCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQ0KLSMgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QNCi0jIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkNCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YNCi0jIFNV
Q0ggREFNQUdFLg0KLSMNCi0NCi1hbGw6DQotCWNkIHVzcnNjdHBsaWINCi0Jbm1ha2UgLWYgTWFr
ZWZpbGUubm1ha2UNCi0JY2QgLi4NCi0JY2QgcHJvZ3JhbXMNCi0Jbm1ha2UgYWxsIC1mIE1ha2Vm
aWxlLm5tYWtlDQotCWNkIC4uDQotDQotY2xlYW46DQotCWNkIHVzcnNjdHBsaWINCi0Jbm1ha2Ug
Y2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCi0JY2QgLi4NCi0JY2QgcHJvZ3JhbXMNCi0Jbm1ha2Ug
Y2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCi0JY2QgLi4NCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvTWFudWFsLm1kIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01h
bnVhbC5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWFjYWU0MjE3ZjI3YWI1MWRj
MjM5YmZmZDViMDg5ODQxMDdiMmIxYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvTWFudWFsLm1kCisrKyAvZGV2L251bGwKQEAgLTEsNzc5ICswLDAgQEAKLSMg
U0NUUCB1c2VyLWxhbmQgaW1wbGVtZW50YXRpb24gKHVzcnNjdHApCi0KLVNDVFAgaXMgYSBtZXNz
YWdlIG9yaWVudGVkLCByZWxpYWJsZSB0cmFuc3BvcnQgcHJvdG9jb2wgd2l0aCBkaXJlY3Qgc3Vw
cG9ydCBmb3IgbXVsdGlob21pbmcgdGhhdCBydW5zIG9uIHRvcCBvZiBJUCBvciBVRFAsIGFuZCBz
dXBwb3J0cyBib3RoIHY0IGFuZCB2NiB2ZXJzaW9ucy4KLQotTGlrZSBUQ1AsIFNDVFAgcHJvdmlk
ZXMgcmVsaWFibGUsIGNvbm5lY3Rpb24gb3JpZW50ZWQgZGF0YSBkZWxpdmVyeSB3aXRoIGNvbmdl
c3Rpb24gY29udHJvbC4gVW5saWtlIFRDUCwgU0NUUCBhbHNvIHByb3ZpZGVzIG1lc3NhZ2UgYm91
bmRhcnkgcHJlc2VydmF0aW9uLCBvcmRlcmVkIGFuZCB1bm9yZGVyZWQgbWVzc2FnZSBkZWxpdmVy
eSwgbXVsdGktc3RyZWFtaW5nIGFuZCBtdWx0aS1ob21pbmcuIERldGVjdGlvbiBvZiBkYXRhIGNv
cnJ1cHRpb24sIGxvc3Mgb2YgZGF0YSBhbmQgZHVwbGljYXRpb24gb2YgZGF0YSBpcyBhY2hpZXZl
ZCBieSB1c2luZyBjaGVja3N1bXMgYW5kIHNlcXVlbmNlIG51bWJlcnMuIEEgc2VsZWN0aXZlIHJl
dHJhbnNtaXNzaW9uIG1lY2hhbmlzbSBpcyBhcHBsaWVkIHRvIGNvcnJlY3QgbG9zcyBvciBjb3Jy
dXB0aW9uIG9mIGRhdGEuCi0KLUluIHRoaXMgbWFudWFsIHRoZSBzb2NrZXQgQVBJIGZvciB0aGUg
U0NUUCBVc2VyLWxhbmQgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBkZXNjcmliZWQuICBJdCBpcyBi
YXNlZCBvbiBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLiBU
aGUgbWFpbiBmb2N1cyBvZiB0aGlzIGRvY3VtZW50IGlzIG9uIHBvaW50aW5nIG91dCB0aGUgZGlm
ZmVyZW5jZXMgdG8gdGhlIFNDVFAgU29ja2V0cyBBUEkuIEZvciBhbGwgYXNwZWN0cyBvZiB0aGUg
c29ja2V0cyBBUEkgdGhhdCBhcmUgbm90IG1lbnRpb25lZCBpbiB0aGlzIGRvY3VtZW50LCBwbGVh
c2UgcmVmZXIgdG8gW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4
KS4gUXVlc3Rpb25zIGFib3V0IFNDVFAgaXRzZWxmIGNhbiBob3BlZnVsbHkgYmUgYW5zd2VyZWQg
YnkgW1JGQyA0OTYwXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0OTYwKS4KLQotIyMg
R2V0dGluZyBTdGFydGVkCi1UaGUgdXNlci1sYW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBG
cmVlQlNEIDEwLjAsIFVidW50dSAxMS4xMCwgV2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCBhbmQg
TWFjIE9TIFggMTAuNy4gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgdXNlci1sYW5kIHN0YWNr
IGlzIHByb3ZpZGVkIG9uIFtnaXRodWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNj
dHApLiBEb3dubG9hZCB0aGUgdGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91
ciBjaG9pY2UuIFRoZSB0YXJiYWxsIGNvbnRhaW5zIGFsbCB0aGUgc291cmNlcyB0byBidWlsZCB0
aGUgbGlidXNyc2N0cCwgd2hpY2ggaGFzIHRvIGJlIGxpbmtlZCB0byB0aGUgb2JqZWN0IGZpbGUg
b2YgYW4gZXhhbXBsZSBwcm9ncmFtLiBJbiBhZGRpdGlvbiB0aGVyZSBhcmUgdHdvIGFwcGxpY2F0
aW9ucyBpbiB0aGUgZm9sZGVyIGBwcm9ncmFtc2AgdGhhdCBjYW4gYmUgYnVpbHQgYW5kIHJ1bi4K
LQotIyMjIEJ1aWxkaW5nIHRoZSBMaWJyYXJ5IGFuZCB0aGUgQXBwbGljYXRpb25zCi0jIyMjIFVu
aXgtbGlrZSBPcGVyYXRpbmcgU3lzdGVtcwotSW4gdGhlIGZvbGRlciBgdXNyc2N0cGAgdHlwZQot
Ci0gICAgJCAuL2Jvb3RzdHJhcAotICAgICQgLi9jb25maWd1cmUKLSAgICAkIG1ha2UKLQotTm93
LCB0aGUgbGlicmFyeSBgbGlidXNyc2N0cC5sYWAgaGFzIGJlZW4gYnVpbHQgaW4gdGhlIHN1YmRp
cmVjdG9yeSBgdXNyc2N0cGxpYmAsIGFuZCB0aGUgZXhhbXBsZSBwcm9ncmFtcyBhcmUgcmVhZHkg
dG8gcnVuIGZyb20gdGhlIHN1YmRpcmVjdG9yeSBgcHJvZ3JhbXNgLgotCi1JZiB5b3UgaGF2ZSBy
b290IHByaXZpbGVnZXMgb3IgYXJlIGluIHRoZSBzdWRvZXIgZ3JvdXAsIHlvdSBjYW4gaW5zdGFs
bCB0aGUgbGlicmFyeSBpbiBgL3Vzci9sb2NhbC9saWJgIGFuZCBjb3B5IHRoZSBoZWFkZXIgZmls
ZSB0byBgL3Vzci9pbmNsdWRlYCB3aXRoIHRoZSBjb21tYW5kCi0KLSAgICAkIHN1ZG8gbWFrZSBp
bnN0YWxsCi0KLSMjIyMgV2luZG93cwotT24gV2luZG93cyB5b3UgbmVlZCBhIGNvbXBpbGVyIGxp
a2UgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uIFlvdSBjYW4gYnVpbGQgdGhlIGxpYnJhcnkgYW5k
IHRoZSBleGFtcGxlIHByb2dyYW1zIHdpdGggdGhlIGNvbW1hbmQgbGluZSB0b29sIG9mIHRoZSBj
b21waWxlciBieSB0eXBpbmcKLQotICAgICQgbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UKLQotaW4g
dGhlIGRpcmVjdG9yeSBgdXNyc2N0cGAuCi0KLSMjIyMgQ01ha2UKLUNyZWF0ZSBhIGRpcmVjdG9y
eSBvdXRzaWRlIHRoZSBgdXNyc2N0cGAgZGlyZWN0b3J5LCBlbnRlciBpdCBhbmQgZ2VuZXJhdGUg
ZmlsZXMgYnkgdHlwaW5nCi0KLSAgICAkIGNtYWtlIDxwYXRoLXRvLXVzcnNjdHAtc291cmNlcz4K
LSAgICAkIGNtYWtlIC0tYnVpbGQgLgotCi1CeSBkZWZhdWx0IENNYWtlIGdlbmVyYXRlcyBhIERF
QlVHIGJ1aWxkIHdpdGggdmVyYm9zZSBvdXRwdXQuCi0KLSMjIyBSdW5uaW5nIHRoZSBUZXN0IFBy
b2dyYW1zCi0KLVNldmVyYWwgdGVzdCBwcm9ncmFtcyBhcmUgaW5jbHVkZWQsIGluY2x1ZGluZyBh
IGRpc2NhcmQgc2VydmVyIGFuZCBhIGNsaWVudC4gWW91IGNhbiBydW4gYm90aCB0byBzZW5kIGRh
dGEgZnJvbSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBm
cm9tIHN0ZGluIGFuZCBzZW5kcyB0aGVtIHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUg
bWVzc2FnZSBpbiB0aGUgdGVybWluYWwgYW5kIGRpc2NhcmRzIGl0LiBUaGUgc291cmNlcyBvZiB0
aGUgc2VydmVyIGFyZSBhbHNvIHByb3ZpZGVkIFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vc2N0
cGxhYi91c3JzY3RwL2Jsb2IvbWFzdGVyL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMpIGFuZCB0
aG9zZSBvZiB0aGUgY2xpZW50IFtoZXJlXShodHRwczovL2dpdGh1Yi5jb20vc2N0cGxhYi91c3Jz
Y3RwL2Jsb2IvbWFzdGVyL3Byb2dyYW1zL2NsaWVudC5jKS4KLQotIyMjIFVzaW5nIFVEUCBFbmNh
cHN1bGF0aW9uCi0KLUJvdGggcHJvZ3JhbXMgY2FuIGVpdGhlciBzZW5kIGRhdGEgb3ZlciBTQ1RQ
IGRpcmVjdGx5IG9yIHVzZSBVRFAgZW5jYXBzdWxhdGlvbiwgdGh1cyBlbmNhcHN1bGF0aW5nIHRo
ZSBTQ1RQIHBhY2tldCBpbiBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24g
bG9vcGJhY2sgb3IgaW4gYSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkgTkFUIGJveGVzIGlu
dm9sdmVkLiBJbiBhbGwgb3RoZXIgY2FzZXMgaXQgaXMgYmV0dGVyIHRvIHVzZSBVRFAgZW5jYXBz
dWxhdGlvbi4KLQotVGhlIHVzYWdlIG9mIHRoZSBgZGlzY2FyZF9zZXJ2ZXJgIGlzCi0KLSAgICAk
IGRpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydCByZW1vdGVfZW5jYXBzX3BvcnRdCi0K
LUZvciBVRFAgZW5jYXBzdWxhdGlvbiB0aGUgcG9ydHMgaGF2ZSB0byBiZSBzcGVjaWZpZWQuIFRo
ZSBsb2NhbCBhbmQgcmVtb3RlIGVuY2Fwc3VsYXRpb24gcG9ydHMgY2FuIGJlIGFyYml0cmFyaWx5
IHNldC4gRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2FsbAotCi0gICAgJCAuL2Rpc2NhcmRfc2VydmVy
IDExMTExIDIyMjIyCi0KLW9uIGEgVW5peC1saWtlIE9TIGFuZAotCi0gICAgJCBkaXNjYXJkX3Nl
cnZlci5leGUgMTExMTEgMjIyMjIKLQotb24gV2luZG93cy4KLQotVGhlIGNsaWVudCBuZWVkcyB0
d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLCB0aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgaXRzIHBv
cnQuIEl0cyB1c2FnZSBpcwotCi0gICAgJCBjbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQg
W2xvY2FsX3BvcnQgbG9jYWxfZW5jYXBzX3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XQotCi1UaGUg
cmVtb3RlIGFkZHJlc3MgaXMgdGhlIHNlcnZlcidzIGFkZHJlc3MuIElmIGNsaWVudCBhbmQgc2Vy
dmVyIGFyZSBzdGFydGVkIG9uIHRoZSBzYW1lIG1hY2hpbmUsIHRoZSBsb29wYmFjayBhZGRyZXNz
IGAxMjcuMC4wLjFgIGNhbiBiZSB1c2VkIGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwg
YWRkcmVzcyBvbiBXaW5kb3dzLiBUaGUgZGlzY2FyZCBwb3J0IGlzIDksIHRodXMgOSBoYXMgdG8g
YmUgdGFrZW4gYXMgcmVtb3RlIHBvcnQuIFRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIGhhdmUgdG8g
bWF0Y2ggdGhvc2Ugb2YgdGhlIHNlcnZlciwgaS5lLiB0aGUgc2VydmVyJ3MgYGxvY2FsX2VuY2Fw
c19wb3J0YCBpcyB0aGUgY2xpZW50J3MgYHJlbW90ZV9lbmNhcHNfcG9ydGAgYW5kIHZpY2UgdmVy
c2EuIFRodXMsIHRoZSBjbGllbnQgY2FuIGJlIHN0YXJ0ZWQgd2l0aAotCi0gICAgJCAuL2NsaWVu
dCAxMjcuMC4wLjEgOSAwIDIyMjIyIDExMTExCi0KLW9uIGEgVW5peC1saWtlIE9TIGFuZAotCi0g
ICAgJCBjbGllbnQuZXhlIDE5Mi4xNjguMC4xIDkgMCAyMjIyMiAxMTExMQotCi1vbiBXaW5kb3dz
IHByb3ZpZGVkIHlvdXIgbG9jYWwgSVAgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KLQotIyMjIFNl
bmRpbmcgb3ZlciBTQ1RQCi0KLVRvIHNlbmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgeW91IG1p
Z2h0IG5lZWQgcm9vdCBwcml2aWxlZ2VzIGJlY2F1c2UgcmF3IHNvY2tldHMgYXJlIHVzZWQuIFRo
dXMgaW5zdGVhZCBvZiBzcGVjaWZ5aW5nIHRoZSBlbmNhcHN1bGF0aW9uIHBvcnRzIHlvdSBoYXZl
IHRvIHN0YXJ0IHRoZSBwcm9ncmFtcyBwcmVwZW5kaW5nIGBzdWRvYCBvciBpbiBjYXNlIG9mIFdp
bmRvd3Mgc3RhcnQgdGhlIHByb2dyYW0gZnJvbSBhbiBhZG1pbmlzdHJhdG9yIGNvbnNvbGUuCi0K
LSMjIyBVc2luZyB0aGUgQ2FsbGJhY2sgQVBJCi0KLUluc3RlYWQgb2YgYXNraW5nIGNvbnN0YW50
bHkgZm9yIG5ldyBkYXRhLCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0IGlzIHRyaWdn
ZXJlZCBieSBTQ1RQLiBBIGNhbGxiYWNrIGZ1bmN0aW9uIGhhcyB0byBiZSByZWdpc3RlcmVkIHRo
YXQgd2lsbCBiZSBjYWxsZWQgd2hlbmV2ZXIgZGF0YSBpcyByZWFkeSB0byBiZSBkZWxpdmVyZWQg
dG8gdGhlIGFwcGxpY2F0aW9uLgotCi1UaGUgYGRpc2NhcmRfc2VydmVyYCBoYXMgYSBmbGFnIHRv
IHN3aXRjaCBiZXR3ZWVuIHRoZSB0d28gbW9kaS4gSWYgIGB1c2VfY2JgIGlzIHNldCB0byAxLCB0
aGUgY2FsbGJhY2sgQVBJIHdpbGwgYmUgdXNlZC4gVG8gY2hhbmdlIHRoZSBzZXR0aW5nLCBqdXN0
IHNldCB0aGUgZmxhZyBhbmQgY29tcGlsZSB0aGUgcHJvZ3JhbSBhZ2Fpbi4KLQotCi0jIyBCYXNp
YyBPcGVyYXRpb25zCi0KLUFsbCBzeXN0ZW0gY2FsbHMgc3RhcnQgd2l0aCB0aGUgcHJlZml4IGB1
c3JzY3RwX2AgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tIHRoZSBrZXJuZWwgdmFyaWFudHMuIFNv
bWUgb2YgdGhlbSBhcmUgY2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFu
ZHMgaW4gdGhlIHVzZXJsYW5kIGVudmlyb25tZW50LgotCi0jIyBEaWZmZXJlbmNlcyB0byBSRkMg
NjQ1OAotCi0jIyMgdXNyc2N0cF9pbml0KCkKLQotRXZlcnkgYXBwbGljYXRpb24gaGFzIHRvIHN0
YXJ0IHdpdGggYHVzcnNjdHBfaW5pdCgpYC4gVGhpcyBmdW5jdGlvbiBjYWxscyBgc2N0cF9pbml0
KClgIGFuZCByZXNlcnZlcyB0aGUgbWVtb3J5IG5lY2Vzc2FyeSB0byBhZG1pbmlzdGVyIHRoZSBk
YXRhIHRyYW5zZmVyLiBUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzCi0KLWBgYGMKLXZvaWQgdXNy
c2N0cF9pbml0KHVpbnQxNl90IHVkcF9wb3J0KQotYGBgCi0KLUFzIGl0IGlzIG5vdCBhbHdheXMg
cG9zc2libGUgdG8gc2VuZCBkYXRhIGRpcmVjdGx5IG92ZXIgU0NUUCBiZWNhdXNlIG5vdCBhbGwg
TkFUIGJveGVzIGNhbiBwcm9jZXNzIFNDVFAgcGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQg
b3ZlciBVRFAuIFRvIGVuY2Fwc3VsYXRlIFNDVFAgaW50byBVRFAgYSBVRFAgcG9ydCBoYXMgdG8g
YmUgc3BlY2lmaWVkLCB0byB3aGljaCB0aGUgZGF0YWdyYW1zIGNhbiBiZSBzZW50LiBUaGlzIGxv
Y2FsIFVEUCBwb3J0ICBpcyBzZXQgd2l0aCB0aGUgcGFyYW1ldGVyIGB1ZHBfcG9ydGAuIFRoZSBk
ZWZhdWx0IHZhbHVlIGlzIDk4OTksIHRoZSBzdGFuZGFyZCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0
LiBJZiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFz
IHRvIGJlIHNldCB0byAwLgotCi0jIyMgdXNyc2N0cF9maW5pc2goKQotCi1BdCB0aGUgZW5kIG9m
IHRoZSBwcm9ncmFtIGB1c3JzY3RwX2ZpbmlzaCgpYCBzaG91bGQgYmUgY2FsbGVkIHRvIGZyZWUg
YWxsIHRoZSBtZW1vcnkgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQgYmVmb3JlLiBUaGUgZnVuY3Rp
b24gcHJvdG90eXBlIGlzCi0KLWBgYGMKLWludCB1c3JzY3RwX2ZpbmlzaCh2b2lkKQotYGBgCi0K
LVRoZSByZXR1cm4gY29kZSBpcyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJy
b3IuCi0KLSMjIyB1c3JzY3RwX3NvY2tldCgpCi0KLUEgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NU
UCBlbmRwb2ludCBpcyBhIHNvY2tldC4gSXMgaXQgY3JlYXRlZCB3aXRoIGB1c3JzY3RwX3NvY2tl
dCgpYC4gVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcwotCi1gYGBjCi1zdHJ1Y3Qgc29ja2V0ICoK
LXVzcnNjdHBfc29ja2V0KGludCBkb21haW4sCi0gICAgICAgICAgICAgICBpbnQgdHlwZSwKLSAg
ICAgICAgICAgICAgIGludCBwcm90b2NvbCwKLSAgICAgICAgICAgICAgIGludCAoKnJlY2VpdmVf
Y2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dCBkYXRhbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
cmN2aW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncyksCi0g
ICAgICAgICAgICAgICBpbnQgKCpzZW5kX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2JfZnJlZSksCi0gICAgICAgICAgICAg
ICB1aW50MzJfdCBzYl90aHJlc2hvbGQpCi1gYGAKLQotYW5kIHRoZSBhcmd1bWVudHMgdGFrZW4g
ZnJvbSBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpIGFyZQot
Ci0qIGRvbWFpbjogUEZfSU5FVCBvciBQRl9JTkVUNiBjYW4gYmUgdXNlZC4KLSogdHlwZTogSW4g
Y2FzZSBvZiBhIG9uZS10by1tYW55IHN0eWxlIHNvY2tldCBpdCBpcyBTT0NLX1NFUVBBQ0tFVCwg
aW4gY2FzZSBvZiBhIG9uZS10by1vbmUgc3R5bGUKLXNvY2tldCBpdCBpcyBTT0NLX1NUUkVBTS4g
Rm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoZSBkaWZmZXJlbmNlcyBiZXR3ZWVuIHRoZSBzb2NrZXQg
dHlwZXMgcGxlYXNlCi1yZWZlciB0byBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9o
dG1sL3JmYzY0NTgpLgotKiBwcm90b2NvbDogU2V0IElQUFJPVE9fU0NUUC4KLQotSW4gdXNyc2N0
cCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZC4gVGhlIGZ1bmN0aW9uIHBvaW50ZXJzIG9mIHRo
ZSByZWNlaXZlIGFuZCBzZW5kIGNhbGxiYWNrcyBhcmUgbmV3IGFyZ3VtZW50cyB0byB0aGUgc29j
a2V0IGNhbGwuIFRoZXkgYXJlIE5VTEwsIGlmIG5vIGNhbGxiYWNrIEFQSSBpcyB1c2VkLiBUaGUg
YHNiX3RocmVzaG9sZGAgc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiB0aGUg
c2VuZCBzb2NrZXQgYnVmZmVyIGJlZm9yZSB0aGUgc2VuZCBmdW5jdGlvbiBpbiB0aGUgYXBwbGlj
YXRpb24gaXMgY2FsbGVkLiBJZiBhIHNlbmQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgc3BlY2lmaWVk
IGFuZCBgc2JfdGhyZXNob2xkYCBpcyAwLCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVy
IHRoZXJlIGlzIHJvb20gaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlci4KLQotT24gc3VjY2VzcyBg
dXNyc2N0cF9zb2NrZXQoKWAgcmV0dXJucyB0aGUgcG9pbnRlciB0byB0aGUgbmV3IHNvY2tldCBp
biB0aGUgYHN0cnVjdCBzb2NrZXRgIGRhdGEgdHlwZS4gSXQgd2lsbCBiZSBuZWVkZWQgaW4gYWxs
IG90aGVyIHN5c3RlbSBjYWxscy4gSW4gY2FzZSBvZiBhIGZhaWx1cmUgTlVMTCBpcyByZXR1cm5l
ZCBhbmQgZXJybm8gaXMgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgotCi0jIyMg
dXNyc2N0cF9jbG9zZSgpCi0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgYHVzcnNjdHBfY2xv
c2UoKWAgaXMKLQotYGBgYwotdm9pZCB1c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKQot
IGBgYAotVGh1cyB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZSBhYnNlbmNlIG9mIGEgcmV0dXJu
IGNvZGUuCi0KLSMjIFNhbWUgRnVuY3Rpb25hbGl0eSBhcyBSRkMgNjQ1OAotCi1UaGUgZm9sbG93
aW5nIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlaXIga2VybmVs
IHBlbmRhbnRzLiBUaGVyZSBwcm90b3R5cGVzCi1hcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dp
bmcgc3Vic2VjdGlvbnMuIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHBsZWFzZSByZWZlciB0
byBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLgotCi0jIyMg
dXNyc2N0cF9iaW5kKCkKLQotYGBgYwotaW50Ci11c3JzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAq
c28sCi0gICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgIHNv
Y2tsZW5fdCBhZGRybGVuKQotYGBgCi0KLSogc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyBy
ZXR1cm5lZCBieSBgdXNyc2N0cF9zb2NrZXQoKWAuCi0qIGFkZHI6IFRoZSBhZGRyZXNzIHN0cnVj
dHVyZSAoYHN0cnVjdCBzb2NrYWRkcl9pbmAgZm9yIGFuIElQdjQgYWRkcmVzcyBvciBgc3RydWN0
IHNvY2thZGRyX2luNmAgZm9yIGFuIElQdjYgYWRkcmVzcykuCi0qIGFkZHJsZW46IFRoZSBzaXpl
IG9mIHRoZSBhZGRyZXNzIHN0cnVjdHVyZS4KLQotYHVzcnNjdHBfYmluZCgpYCByZXR1cm5zIDAg
b24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KLQotIyMjIHVzcnNjdHBfbGlz
dGVuKCkKLQotYGBgYwotaW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAg
ICAgICAgICAgICAgIGludCBiYWNrbG9nKQotYGBgCi0KLSogc286IFBvaW50ZXIgdG8gdGhlIHNv
Y2tldCBhcyByZXR1cm5lZCBieSBgdXNyc2N0cF9zb2NrZXQoKWAuCi0qIGJhY2tsb2c6IElmIGJh
Y2tsb2cgaXMgbm9uLXplcm8sIGVuYWJsZSBsaXN0ZW5pbmcsIGVsc2UgZGlzYWJsZSBsaXN0ZW5p
bmcuCi0KLWB1c3JzY3RwX2xpc3RlbigpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4g
Y2FzZSBvZiBhbiBlcnJvci4KLQotIyMjIHVzcnNjdHBfYWNjZXB0KCkKLQotYGBgYwotc3RydWN0
IHNvY2tldCAqCi11c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkciAqIGFkZHIsCi0gICAgICAgICAgICAgICBzb2NrbGVuX3QgKiBh
ZGRybGVuKQotYGBgCi0KLSogc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBi
eSBgdXNyc2N0cF9zb2NrZXQoKWAuCi0qIGFkZHI6IE9uIHJldHVybiwgIHRoZSBwcmltYXJ5IGFk
ZHJlc3Mgb2YgdGhlIHBlZXIgKGBzdHJ1Y3Qgc29ja2FkZHJfaW5gIGZvciBhbiBJUHY0IGFkZHJl
c3Mgb3IgYHN0cnVjdCBzb2NrYWRkcl9pbjZgIGZvciBhbiBJUHY2IGFkZHJlc3MpLgotKiBhZGRy
bGVuOiBTaXplIG9mIHRoZSByZXR1cm5lZCBhZGRyZXNzIHN0cnVjdHVyZS4KLQotYHVzcnNjdHBf
YWNjZXB0KClgIHJldHVybnMgdGhlIGFjY2VwdGVkIHNvY2tldCBvbiBzdWNjZXNzIGFuZCBOVUxM
IGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLSMjIyB1c3JzY3RwX2Nvbm5lY3QoKQotCi1gYGBjCi1p
bnQKLXVzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCi0gICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4p
Ci1gYGAKLQotKiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3Jz
Y3RwX3NvY2tldCgpYC4KLSogbmFtZTogQWRkcmVzcyBvZiB0aGUgcGVlciB0byBjb25uZWN0IHRv
IChgc3RydWN0IHNvY2thZGRyX2luYCBmb3IgYW4gSVB2NCBhZGRyZXNzIG9yIGBzdHJ1Y3Qgc29j
a2FkZHJfaW42YCBmb3IgYW4gSVB2NiBhZGRyZXNzKS4KLSogYWRkcmxlbjogU2l6ZSBvZiB0aGUg
cGVlcidzIGFkZHJlc3MuCi0KLXVzcnNjdHBfY29ubmVjdCgpIHJldHVybnMgMCBvbiBzdWNjZXNz
IGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgotCi0jIyMgdXNyc2N0cF9zaHV0ZG93bigpCi0K
LWBgYGMKLWludAotdXNyc2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdykK
LWBgYAotCi0qIHNvOiBQb2ludGVyIHRvIHRoZSBzb2NrZXQgb2YgdGhlIGFzc29jaWF0aW9uIHRv
IGJlIGNsb3NlZAotKiBob3c6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBzaHV0ZG93bi4gIFRoZSB2
YWx1ZXMgYXJlIGFzIGZvbGxvd3M6Ci0gICogU0hVVF9SRDogIERpc2FibGVzIGZ1cnRoZXIgcmVj
ZWl2ZSBvcGVyYXRpb25zLiAgTm8gU0NUUCBwcm90b2NvbCBhY3Rpb24gaXMgdGFrZW4uCi0gICog
U0hVVF9XUjogIERpc2FibGVzIGZ1cnRoZXIgc2VuZCBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVz
IHRoZSBTQ1RQIHNodXRkb3duIHNlcXVlbmNlLgotICAqIFNIVVRfUkRXUjogIERpc2FibGVzIGZ1
cnRoZXIgc2VuZCBhbmQgcmVjZWl2ZSBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVzIHRoZSBTQ1RQ
IHNodXRkb3duIHNlcXVlbmNlLgotCi1gdXNyc2N0cF9saXN0ZW4oKWAgcmV0dXJucyAwIG9uIHN1
Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLSMjIFNlbmRpbmcgYW5kIFJlY2Vp
dmluZyBEYXRhCi1TaW5jZSB0aGUgcHVibGljYXRpb24gb2YgW1JGQyA2NDU4XShodHRwOi8vdG9v
bHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSB0aGVyZSBpcyBvbmx5IG9uZSBmdW5jdGlvbiBmb3Ig
c2VuZGluZyBhbmQgb25lIGZvciByZWNlaXZpbmcKLXRoYXQgaXMgbm90IGRlcHJlY2F0ZWQuIFRo
ZXJlZm9yZSwgb25seSB0aGVzZSB0d28gYXJlIGRlc2NyaWJlZCBoZXJlLgotCi0jIyMgdXNyc2N0
cF9zZW5kdigpCi0KLWBgYGMKLXNzaXplX3QKLXVzcnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAq
c28sCi0gICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgIHNpemVf
dCBsZW4sCi0gICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsCi0gICAgICAgICAg
ICAgIGludCBhZGRyY250LAotICAgICAgICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAg
ICBzb2NrbGVuX3QgaW5mb2xlbiwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90eXBl
LAotICAgICAgICAgICAgICBpbnQgZmxhZ3MpCi1gYGAKLQotKiBzbzogVGhlIHNvY2tldCB0byBz
ZW5kIGRhdGEgb24uCi0qIGRhdGE6IEFzIGl0IGlzIG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRh
dGEgaW4gYSBidWZmZXIgYW5kIG5vdCBhIGBzdHJ1Y3QgaW92ZWNgIGRhdGEgc3RydWN0dXJlLCB3
ZSBjaG9zZSB0byBwYXNzIHRoZSBkYXRhIGFzIGEgdm9pZCBwb2ludGVyLgotKiBsZW46IExlbmd0
aCBvZiB0aGUgZGF0YS4KLSogYWRkcnM6IEluIHRoaXMgdmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1v
c3Qgb25lIGRlc3RpbmF0aW9uIGFkZHJlc3MgaXMgc3VwcG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBh
IGNvbm5lY3RlZCBzb2NrZXQsIHRoZSBwYXJhbWV0ZXIgYGFkZHJzYCBjYW4gYmUgc2V0IHRvIE5V
TEwuCi0qIGFkZHJjbnQ6IE51bWJlciBvZiBhZGRyZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJl
c3MgaXMgc3VwcG9ydGVkLCBhZGRyY250IGlzIDAgaWYgYWRkcnMgaXMgTlVMTCBhbmQgMSBvdGhl
cndpc2UuCi0qIGluZm86IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBz
dG9yZWQgaW4gYHZvaWQgKmluZm9gLiBUaGUgZGF0YSB0eXBlcyBgc3RydWN0IHNjdHBfc25kaW5m
b2AsIGBzdHJ1Y3Qgc2N0cF9wcmluZm9gLCBhbmQgYHN0cnVjdCBzY3RwX3NlbmR2X3NwYWAgYXJl
IHN1cHBvcnRlZCBhcyBkZWZpbmVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNjQ1OCkuIFN1cHBvcnQgZm9yIGBzdHJ1Y3Qgc2N0cF9hdXRoaW5mb2AgaXMgbm90
IGltcGxlbWVudGVkIHlldCwgdGhlcmVmb3JlLCBlcnJubyBpcyBzZXQgRUlOVkFMIGFuZCAtMSB3
aWxsIGJlIHJldHVybmVkLCBpZiBpdCBpcyB1c2VkLgotKiBpbmZvbGVuOiBMZW5ndGggb2YgaW5m
byBpbiBieXRlcy4KLSogaW5mb3R5cGU6IElkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGluZm9y
bWF0aW9uIHByb3ZpZGVkIGluIGluZm8uIFBvc3NpYmxlIHZhbHVlcyBhcmUKLSAgKiBTQ1RQX1NF
TkRWX05PSU5GTwotICAqIFNDVFBfU0VORFZfU05ESU5GTwotICAqIFNDVFBfU0VORFZfUFJJTkZP
Ci0gICogU0NUUF9TRU5EVl9TUEEgKEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSBy
ZWZlciB0byBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLikK
LSogZmxhZ3M6IEZsYWdzIGFzIGRlc2NyaWJlZCBpbiBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5p
ZXRmLm9yZy9odG1sL3JmYzY0NTgpLgotCi1gdXNyc2N0cF9zZW5kdigpYCByZXR1cm5zIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgc2VudCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBUaGUgdmFy
aWFibGUgZXJybm8gaXMgdGhlbiBzZXQgYXBwcm9wcmlhdGVseS4KLQotIyMjIHVzcnNjdHBfcmVj
dnYoKQotCi1gYGBjCi1zc2l6ZV90Ci11c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAot
ICAgICAgICAgICAgIHZvaWQgKmRidWYsCi0gICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCi0gICAgICAgICAgICAgc29ja2xlbl90ICog
ZnJvbWxlbiwKLSAgICAgICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAgIHNvY2tsZW5f
dCAqaW5mb2xlbiwKLSAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBlLAotICAgICAg
ICAgICAgIGludCAqbXNnX2ZsYWdzKQotYGBgCi0KLSogc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2
ZSBkYXRhIG9uLgotKiBkYnVmOiBBbmFsb2cgdG8gYHVzcnNjdHBfc2VuZHYoKWAgdGhlIGRhdGEg
aXMgcmV0dXJuZWQgaW4gYSBidWZmZXIuCi0qIGxlbjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4g
Ynl0ZXMuCi0qIGZyb206IEEgcG9pbnRlciB0byBhbiBhZGRyZXNzIHRvIGJlIGZpbGxlZCB3aXRo
IHRoZSBzZW5kZXIgb2YgdGhlIHJlY2VpdmVkIG1lc3NhZ2UncyBhZGRyZXNzLgotKiBmcm9tbGVu
OiBBbiBpbi9vdXQgcGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIGZyb20gbGVuZ3RoLgotKiBpbmZv
OiBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBob2xkIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBy
ZWNlaXZlZCBtZXNzYWdlLiAgVGhlIHN0cnVjdHVyZSB0eXBlIG9mIGluZm8gaXMgZGV0ZXJtaW5l
ZCBieSB0aGUgaW5mb3R5cGUgcGFyYW1ldGVyLiBUaGUgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBg
aW5mb2AgaGF2ZSB0byBiZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBzcGVjaWZpZWQgaW4g
W1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4KLSogaW5mb2xl
bjogIEFuIGluL291dCBwYXJhbWV0ZXIgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0aGUgaW5mbyBi
dWZmZXIuCi0qIGluZm90eXBlOiAgT24gcmV0dXJuLCBgKmluZm90eXBlYCBpcyBzZXQgdG8gdGhl
IHR5cGUgb2YgdGhlIGluZm8gYnVmZmVyLiAgVGhlIGN1cnJlbnQgZGVmaW5lZCB2YWx1ZXMgYXJl
Ci0gICogU0NUUF9SRUNWVl9OT0lORk8KLSAgKiBTQ1RQX1JFQ1ZWX1JDVklORk8KLSAgKiBTQ1RQ
X1JFQ1ZWX05YVElORk8KLSAgKiBTQ1RQX1JFQ1ZWX1JOIChBIGRldGFpbGVkIGRlc2NyaXB0aW9u
IGlzIGdpdmVuIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1
OCkpCi0qIGZsYWdzOiBBIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBh
bnkgbWVzc2FnZSBmbGFncyAoZS5nLiwgYE1TR19OT1RJRklDQVRJT05gKS4gIE5vdGUgdGhhdCB0
aGlzIGZpZWxkIGlzIGFuIGluL291dCBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2
ZSBtYXkgYWxzbyBiZSBwYXNzZWQgaW50byB0aGUgdmFsdWUgKGUuZy4sIGBNU0dfRU9SYCkuICBS
ZXR1cm5pbmcgZnJvbSB0aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZSB3aWxsIGRpZmZlciBmcm9t
IGl0cyBvcmlnaW5hbCB2YWx1ZS4KLQotYHVzcnNjdHBfcmVjdnYoKWAgcmV0dXJucyB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHNlbnQsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgVGhlIHZhcmlh
YmxlIGVycm5vIGlzIHRoZW4gc2V0IGFwcHJvcHJpYXRlbHkuCi0KLSMjIFNvY2tldCBPcHRpb25z
Ci1Tb2NrZXQgb3B0aW9ucyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Ig
b2Ygc29ja2V0IGNhbGxzLgotVGhlaXIgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGluIFtSRkMgNjQ1
OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuIFRoZSBmdW5jdGlvbnMgdG8g
Z2V0IG9yIHNldCB0aGVtIGFyZQotCi1gYGBjCi1pbnQKLXVzcnNjdHBfZ2V0c29ja29wdChzdHJ1
Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKLSAgICAgICAg
ICAgICAgICAgICAgIGludCBvcHRuYW1lLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0
dmFsLAotICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpvcHRsZW4pCi1gYGAKLWFuZAot
YGBgYwotaW50Ci11c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAg
ICAgICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFt
ZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdHZhbCwKLSAgICAgICAgICAg
ICAgICAgICAgIHNvY2tsZW5fdCBvcHRsZW4pCi1gYGAKLQotYW5kIHRoZSBhcmd1bWVudHMgYXJl
Ci0qIHNvOiAgVGhlIHNvY2tldCBvZiB0eXBlIHN0cnVjdCBzb2NrZXQuCi0qIGxldmVsOiAgU2V0
IHRvIElQUFJPVE9fU0NUUCBmb3IgYWxsIFNDVFAgb3B0aW9ucy4KLSogb3B0bmFtZTogIFRoZSBv
cHRpb24gbmFtZSBhcyBzcGVjaWZpZWQgaW4gVGhlIFNvY2tldCBPcHRpb25zIHRhYmxlIGJlbG93
LgotKiBvcHR2YWw6IFRoZSBidWZmZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24g
YXMgc3BlY2lmaWVkIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIFNvY2tldCBPcHRpb25zIGJlbG93
LgotKiBvcHRsZW46ICBUaGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChvciB0aGUgbGVuZ3RoIG9mIHRo
ZSBvcHRpb24gcmV0dXJuZWQgaW4gY2FzZSBvZiBgdXNyc2N0cF9nZXRzb2Nrb3B0YCkuCi0KLVRo
ZXNlIGZ1bmN0aW9ucyByZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVy
cm9yLgotCi0jIyMgU29ja2V0IE9wdGlvbnMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKLQotT3B0aW9u
IHwgRGF0YXR5cGUgfCByL3cKLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLQotU0NUUF9SVE9JTkZP
IHwgc3RydWN0IHNjdHBfcnRvaW5mbyB8IHIvdwotU0NUUF9BU1NPQ0lORk8gfCBzdHJ1Y3Qgc2N0
cF9hc3NvY3BhcmFtcyB8IHIvdwotU0NUUF9JTklUTVNHIHwgc3RydWN0IHNjdHBfaW5pdG1zZyB8
IHIvdwotU0NUUF9OT0RFTEFZIHwgaW50IHwgci93Ci1TQ1RQX0FVVE9DTE9TRSB8IGludCB8IHIv
dwotU0NUUF9QUklNQVJZX0FERFIgfCBzdHJ1Y3Qgc2N0cF9zZXRwcmltIHwgci93Ci1TQ1RQX0FE
QVBUQVRJT05fTEFZRVIgfCBzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIHwgci93Ci1TQ1RQX0RJ
U0FCTEVfRlJBR01FTlRTIHwgaW50IHwgci93Ci1TQ1RQX1BFRVJfQUREUl9QQVJBTVMgfCBzdHJ1
Y3Qgc2N0cF9wYWRkcnBhcmFtcyB8IHIvdwotU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgfCBp
bnQgfCByL3cKLVNDVFBfTUFYU0VHIHwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgfCByL3cKLVND
VFBfREVMQVlFRF9TQUNLIHwgc3RydWN0IHNjdHBfc2Fja19pbmZvIHwgci93Ci1TQ1RQX0ZSQUdN
RU5UX0lOVEVSTEVBVkUgfCBpbnQgfCByL3cKLVNDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCB8
IGludCB8IHIvdwotU0NUUF9ITUFDX0lERU5UIHwgc3RydWN0IHNjdHBfaG1hY2FsZ28gfCByL3cK
LVNDVFBfQVVUSF9BQ1RJVkVfS0VZIHwgc3RydWN0IHNjdHBfYXV0aGtleWlkIHwgci93Ci1TQ1RQ
X0FVVE9fQVNDT05GIHwgaW50IHwgci93Ci1TQ1RQX01BWF9CVVJTVCB8IHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlIHwgci93Ci1TQ1RQX0NPTlRFWFQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8
IHIvdwotU0NUUF9FWFBMSUNJVF9FT1IgfCBpbnQgfCByL3cKLVNDVFBfUkVVU0VfUE9SVCB8IGlu
dCB8IHIvdwotU0NUUF9FVkVOVCB8IHN0cnVjdCBzY3RwX2V2ZW50IHwgci93Ci1TQ1RQX1JFQ1ZS
Q1ZJTkZPIHwgaW50IHwgci93Ci1TQ1RQX1JFQ1ZOWFRJTkZPIHwgaW50IHwgci93Ci1TQ1RQX0RF
RkFVTFRfU05ESU5GTyB8IHN0cnVjdCBzY3RwX3NuZGluZm8gfCByL3cKLVNDVFBfREVGQVVMVF9Q
UklORk8gfCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyB8IHIvdwotU0NUUF9SRU1PVEVfVURQ
X0VOQ0FQU19QT1JUIHwgaW50IHwgci93Ci1TQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQgfCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdwotU0NUUF9TVEFUVVMgfCBzdHJ1Y3Qgc2N0cF9zdGF0
dXMgfCByCi1TQ1RQX0dFVF9QRUVSX0FERFJfSU5GTyB8IHN0cnVjdCBzY3RwX3BhZGRyaW5mbyB8
IHIKLVNDVFBfUEVFUl9BVVRIX0NIVU5LUyB8IHN0cnVjdCBzY3RwX2F1dGhjaHVua3MgfCByCi1T
Q1RQX0xPQ0FMX0FVVEhfQ0hVTktTIHwgc3RydWN0IHNjdHBfYXV0aGNodW5rcyB8IHIKLVNDVFBf
R0VUX0FTU09DX05VTUJFUiB8IHVpbnQzMl90IHwgcgotU0NUUF9HRVRfQVNTT0NfSURfTElTVCB8
IHN0cnVjdCBzY3RwX2Fzc29jX2lkcyB8IHIKLVNDVFBfUkVTRVRfU1RSRUFNUyB8IHN0cnVjdCBz
Y3RwX3Jlc2V0X3N0cmVhbXMgfCB3Ci1TQ1RQX1JFU0VUX0FTU09DIHwgc3RydWN0IHNjdHBfYXNz
b2NfdCB8IHcKLVNDVFBfQUREX1NUUkVBTVMgfCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB8IHcK
LQotRnVydGhlciB1c2FnZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gW1JGQyA2NDU4XSh0b29s
cy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLCBbUkZDIDY1MjVdKHRvb2xzLmlldGYub3JnL2h0bWwv
cmZjNjUyNSksIGFuZCBbZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwLXVkcC1lbmNhcHMtMDNdKGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC1pZXRmLXRzdndnLXNjdHAtdWRwLWVuY2Fwcy0w
MykgKHdvcmsgaW4gcHJvZ3Jlc3MpLgotCi0jIyBTeXNjdGwgdmFyaWFibGVzCi0KLUluIGtlcm5l
bCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBmb3IgaW5zdGFuY2UgRnJlZUJTRCwgaXQgaXMgcG9zc2li
bGUgdG8gY2hhbmdlIHBhcmFtZXRlcnMgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoZXNlIHBh
cmFtZXRlcnMgYXJlIGNhbGxlZCBzeXNjdGwgdmFyaWFibGVzLgotCi1JbiB1c3JzY3RwIGFwcGxp
Y2F0aW9ucyBjYW4gc2V0IG9yIHJldHJpZXZlIHRoZXNlIHZhcmlhYmxlcyB3aXRoIHRoZSBmdW5j
dGlvbnMKLWBgYGMKLXZvaWQgdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyAodWludDMyX3QgdmFsdWUp
Ci1gYGAKLWFuZAotYGBgYwotdWludDMyX3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkK
LWBgYAotcmVzcGVjdGl2ZWx5LCB3aGVyZSBgIyNgIHN0YW5kcyBmb3IgdGhlIG5hbWUgb2YgdGhl
IHZhcmlhYmxlLgotCi1JbiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYSBzaG9ydCBkZXNjcmlw
dGlvbiBvZiB0aGUgcGFyYW1ldGVycyB3aWxsIGJlIGdpdmVuLgotCi0jIyBNYW5pcHVsYXRlIE1l
bW9yeQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zZW5kc3BhY2UoKQotVGhlIHNwYWNl
IG9mIHRoZSBhdmFpbGFibGUgc2VuZCBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVm
YXVsdCB2YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBgMl4z
MiAtIDFgIGJ5dGVzLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3JlY3ZzcGFjZSgp
Ci1UaGUgc3BhY2Ugb2YgdGhlIGF2YWlsYWJsZSByZWNlaXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdl
ZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0ZXMgdG8gYSB2YWx1ZSBiZXR3
ZWVuIDAgYW5kIGAyXjMyIC0gMWAgYnl0ZXMuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfaGFzaHRibHNpemUoKQotVGhlIFRDQiAoVGhyZWFkIENvbnRyb2wgQmxvY2spIGhhc2ggdGFi
bGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25lIFRDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2Fu
IGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFs
dWUgaXMgMSwwMjQgYnl0ZXMuIEEgVENCIGNvbnRhaW5zIGZvciBpbnN0YW5jZSBwb2ludGVycyB0
byB0aGUgc29ja2V0LCB0aGUgZW5kcG9pbnQsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NvY2lh
dGlvbiBhbmQgc29tZSBzdGF0aXN0aWMgZGF0YS4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9wY2J0YmxzaXplKCkKLVRoZSBQQ0IgKFByb3RvY29sIENvbnRyb2wgQmxvY2spIGhhc2gg
dGFibGUgc2l6ZXMsIGkuZS4gdGhlIHNpemUgb2Ygb25lIFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwg
Y2FuIGJlIHR1bmVkIGJldHdlZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQg
dmFsdWUgaXMgMjU2IGJ5dGVzLiBUaGUgUENCIGNvbnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBj
aGFyYWN0ZXJpemUgYW4gZW5kcG9pbnQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
c3lzdGVtX2ZyZWVfcmVzY19saW1pdCgpCi1UaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGlt
dW0gbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNl
dCBiZXR3ZWVuIDAgYW5kIGAyXjMyIC0gMWAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuCi0K
LSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQoKQotVGhp
cyBwYXJhbWV0ZXJzIHR1bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2Vz
IGluIGFuIGFzc29jaWF0aW9uLiBJdCBjYW4gYmUgc2V0IGJldHdlZW4gMCBhbmQgYDJeMzIgLSAx
YC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfbWJ1Zl90aHJlc2hvbGRfY291bnQoKQotRGF0YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVy
YWwgbWJ1ZnMgY2FuIGJlIGNoYWluZWQgdG9nZXRoZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBz
bWFsbCBtYnVmcyBpbiBhIGNoYWluIGNhbiBiZSBzZXQgd2l0aCB0aGlzIHBhcmFtZXRlciwgYmVm
b3JlIGFuIG1idWYgY2x1c2V0IGlzIHVzZWQuIFRoZSBkZWZhdWx0IGlzIDUuCi0KLSMjIyMgdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfYWRkX21vcmVfdGhyZXNob2xkKCkKLVRCRAotVGhpcyBwYXJh
bWV0ZXIgY29uZmlndXJlcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hv
dWxkIGJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBp
cyAxNDUyIGJ5dGVzLgotCi0KLSMjIENvbmZpZ3VyZSBSVE8KLVRoZSByZXRyYW5zbWlzc2lvbiB0
aW1lb3V0IChSVE8pLCBpLmUuIHRoZSB0aW1lIHRoYXQgY29udHJvbHMgdGhlIHJldHJhbnNtaXNz
aW9uIG9mIG1lc3NhZ2VzLCBoYXMgc2V2ZXJhbCBwYXJhbWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFu
Z2VkLCBmb3IgZXhhbXBsZSB0byBzaG9ydGVuIHRoZSB0aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlz
IHJldHJhbnNtaXR0ZWQuIFRoZSByYW5nZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4g
MCBhbmQgYDJeMzIgLSAxYG1zLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0b19t
YXhfZGVmYXVsdCgpCi1UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21p
c3Npb24gdGltZW91dCBpbiBtcyBpcyA2MCwwMDAgKDYwc2VjcykuCi0KLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfcnRvX21pbl9kZWZhdWx0KCkKLVRoZSBkZWZhdWx0IHZhbHVlIGZvciB0
aGUgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDEsMDAwICgxc2VjKS4K
LQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KCkKLVRo
ZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGlu
IG1zIGlzIDMsMDAwICgzc2VjKS4gVGhpcyB2YWx1ZSBpcyBvbmx5IG5lZWRlZCBiZWZvcmUgdGhl
IGZpcnN0IGNhbGN1bGF0aW9uIG9mIGEgcm91bmQgdHJpcCB0aW1lIHRvb2sgcGxhY2UuCi0KLSMj
IyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQoKQotVGhlIGRl
ZmF1bHQgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFu
IElOSVQgY2h1bmsgaW4gbXMgaXMgNjAsMDAwICg2MHNlY3MpLgotCi0KLSMjIFNldCBUaW1lcnMK
LSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCgp
Ci1BIGNvb2tpZSBoYXMgYSBzcGVjaWZpZWQgbGlmZSB0aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBj
b29raWUgaXMgbm90IHZhbGlkIGFueSBtb3JlIGFuZCBhbiBBQk9SVCBpcyBzZW50LiBUaGUgZGVm
YXVsdCB2YWx1ZSBpbiBtcyBpcyA2MCwwMDAgKDYwc2VjcykuCi0KLSMjIyMgdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQoKQotU2V0IHRoZSBkZWZhdWx0
IHRpbWUgYmV0d2VlbiB0d28gaGVhcnRiZWF0cy4gVGhlIGRlZmF1bHQgaXMgMzAsMDAwbXMuCi0K
LSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0
KCkKLUlmIGEgU0hVVERPV04gaXMgbm90IGFuc3dlcmVkIHdpdGggYSBTSFVURE9XTi1BQ0sgd2hp
bGUgdGhlIHNodXRkb3duIGd1YXJkIHRpbWVyIGlzIHN0aWxsIHJ1bm5pbmcsIHRoZSBhc3NvY2lh
dGlvbiB3aWxsIGJlIGFib3J0ZWQgYWZ0ZXIgdGhlIGRlZmF1bHQgb2YgMTgwc2Vjcy4KLQotIyMj
IyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCgpCi1UQkQK
LVRvIHNldCB0aGUgc2l6ZSBvZiB0aGUgcGFja2V0cyB0byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3Nz
aWJsZSwgdGhlIG1heGltdW0gdHJhbnNmZXIgdW5pdCAoTVRVKSBvZiB0aGUgY29tcGxldGUgcGF0
aCBoYXMgdG8gYmUga25vd24uIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRo
IG10dSBkaXNjb3ZlcnkgaXMgNjAwc2Vjcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCgpCi1UQkQKLVRoZSBkZWZhdWx0IHNlY3JldCBsaWZl
dGltZSBvZiBhIHNlcnZlciBpcyAzNjAwc2Vjcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF92dGFnX3RpbWVfd2FpdCgpCi1UQkQKLVZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJs
ZXMgaXQuIERlZmF1bHQ6IDYwc2VjcwotCi0KLSMjIFNldCBGYWlsdXJlIExpbWl0cwotVHJhbnNt
aXNzaW9ucyBhbmQgcmV0cmFuc21pc3Npb25zIG9mIG1lc3NhZ2VzIG1pZ2h0IGZhaWwuIFRvIHBy
b3RlY3QgdGhlIHN5c3RlbSBhZ2FpbnN0IHRvbyBtYW55IHJldHJhbnNtaXNzaW9ucywgbGltaXRz
IGhhdmUgdG8gYmUgZGVmaW5lZC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9pbml0
X3J0eF9tYXhfZGVmYXVsdCgpCi1UaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5z
bWlzc2lvbnMgb2YgYW4gSU5JVCBjaHVua3MgaXMgOCwgYmVmb3JlIGFuIEFCT1JUIGlzIHNlbnQu
Ci0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KCkK
LVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5z
bWlzc2lvbnMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBpcyBhYm9ydGVkLiBUaGUgZGVmYXVsdCB2
YXVsZSBpcyAxMC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wYXRoX3J0eF9tYXhf
ZGVmYXVsdCgpCi1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRo
IGZhaWx1cmVzIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4gVGhlIGRlZmF1bHQg
dmFsdWUgaXMgNS4gTm90aWNlIHRoYXQgdGhlIG51bWJlciBvZiBwYXRocyBtdWx0aXBsaWVkIGJ5
IHRoaXMgdmFsdWUgc2hvdWxkIGJlIGVxdWFsIHRvIGBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVs
dGAuIFRoYXQgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGdvb2QgZm9y
IHR3byBwYXRocy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfcmV0cmFuX2No
dW5rKCkKLVRoZSBwYXJhbWV0ZXIgY29uZmlndXJlcyBob3cgbWFueSB0aW1lcyBhbiB1bmx1Y2t5
IGNodW5rIGNhbiBiZSByZXRyYW5zbWl0dGVkIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRz
LiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gMzAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfcGF0aF9wZl90aHJlc2hvbGQoKQotVEJECi1EZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0
aHJlc2hvbGQuIERlZmF1bHQ6IDY1NTM1CQkKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCgpCi1UQkQKLVdoZW4gb25lLTItb25lIGhp
dHMgcWxpbWl0IGFib3J0LiBEZWZhdWx0OiAwCi0KLQotIyMgQ29udHJvbCB0aGUgU2VuZGluZyBv
ZiBTQUNLcwotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCgp
Ci1UaGUgU0FDSyBmcmVxdWVuY3kgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBh
cmUgYXdhaXRlZCwgYmVmb3JlIGEgU0FDSyBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAy
LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1
bHQoKQotQXMgYSBTQUNLIChTZWxlY3RpdmUgQWNrbm93bGVnbWVudCkgaXMgc2VudCBhZnRlciBl
dmVyeSBvdGhlciBwYWNrZXQsIGEgdGltZXIgaXMgc2V0IHRvIHNlbmQgYSBTQUNLIGluIGNhc2Ug
YW5vdGhlciBwYWNrZXQgZG9lcyBub3QgYXJyaXZlIGluIGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2
YWx1ZSBmb3IgdGhpcyB0aW1lciBpcyAyMDBtcy4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9zdHJpY3Rfc2Fja3MoKQotVEJECi1UaGlzIGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250
cm9sbGluZyBvZiB0aGUgY29oZXJlbmNlIG9mIFNBQ0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQg
dmFsdWUgaXMgMSAob24pLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25yX3NhY2tf
b25fb2ZmKCkKLUlmIGEgc2xvdyBob3N0cyByZWNlaXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBp
dCBpcyBwb3NzaWJsZSB0aGF0IGl0cyByZWNlaXZlciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IGRh
dGEgY2FuIG9ubHkgYmUgYWNjZXB0ZWQgaWYgb25lIGNodW5rIHdpdGggYSBoaWdoZXIgVFNOIChU
cmFuc21pc3Npb24gU2VxdWVuY2UgTnVtYmVyKSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gYWNr
bm93bGVkZ2VkIGlzIGRyb3BwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHNlbmRlciBoYXMgdG8g
c3RvcmUgZGF0YSwgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgaW4gY2FzZSB0
aGV5IGhhdmUgdG8gYmUgcmV0cmFuc21pdHRlZC4gSWYgdGhpcyBiZWhhdmlvciBpcyBub3QgbmVj
ZXNzYXJ5LCBub24tcmVuZWdhYmxlIFNBQ0tzIGNhbiBiZSB0dXJuZWQgb24uIEJ5IGRlZmF1bHQg
dGhlIHVzZSBvZiBub24tcmVuZWdhYmxlIFNBQ0tzIGlzIHR1cm5lZCBvZmYuCi0KLSMjIyMgdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkoKQotSW4gc29tZSBj
YXNlcyBpdCBpcyBub3QgZGVzaXJhYmxlIHRvIHdhaXQgZm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4
cGlyZSBiZWZvcmUgYSBTQUNLIGlzIHNlbnQuIEluIHRoZXNlIGNhc2VzIGEgYml0IGNhbGxlZCBT
QUNLLUlNTUVESUFURUxZIChzZWUgW2RyYWZ0LXR1ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1tZWRp
YXRlbHktMDldKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC10dWV4ZW4tdHN2d2ct
c2N0cC1zYWNrLWltbWVkaWF0ZWx5LTA5KSkgY2FuIGJlIHNldCB0byBwcm92b2tlIHRoZSBpbnN0
YW50IHNlbmRpbmcgb2YgYSBTQUNLLiBUaGUgZGVmYXVsdCBpcyB0byB0dXJuIGl0IG9mZi4KLQot
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9MMl9hYmNfdmFyaWFibGUoKQotVEJECi1TQ1RQ
IEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwpLiBEZWZhdWx0OiAxCi0KLSMjIENoYW5nZSBN
YXggQnVyc3QKLU1heCBidXJzdCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRz
IHRoYXQgbWF5IGJlIHNlbnQgaW4gb25lIGZsaWdodC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCgpCi1UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1
cnN0IGlzIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMg
YSBmbGlnaHQgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyBwYXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkg
YW5vdGhlciBvbmUsIHNlZSB0aGUgbmV4dCBwYXJhZ3JhcGguCi0KLSMjIyMgdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QoKQotVGhlIHVzZSBvZiBtYXggYnVy
c3QgaXMgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IChjd25kKS4g
VGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGJ5IGRlZmF1bHQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfaGJfbWF4YnVyc3QoKQotSGVhcnRiZWF0cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVy
aWZ5IGEgcGF0aC4gVGhlaXIgbnVtYmVyIGNhbiBiZSBsaW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0
LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KCkK
LUluIHRoZSBzdGF0ZSBvZiBmYXN0IHJldHJhbnNtaXNzaW9uIHRoZSBudW1iZXIgb2YgcGFja2V0
IGJ1cnN0cyBjYW4gYmUgbGltaXRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNC4KLQotCi0jIyBI
YW5kbGUgQ2h1bmtzCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3BlZXJfY2h1bmtfb2go
KQotSW4gb3JkZXIgdG8ga2VlcCB0cmFjayBvZiB0aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2
ZXIgd2luZG93LCB0aGUgc2VuZGVyIGNhbGN1bGF0ZXMgdGhlIHdpbmRvdyBieSBzdWJ0cmFjdGlu
ZyB0aGUgYW1vdW50IG9mIGRhdGEgc2VudC4gWWV0LCBzb21lIE9TcyByZWR1Y2UgdGhlIHJlY2Vp
dmVyIHdpbmRvdyBieSB0aGUgcmVhbCBzcGFjZSBuZWVkZWQgdG8gc3RvcmUgdGhlIGRhdGEuIFRo
aXMgcGFyYW1ldGVyIHNldHMgdGhlIGFkZGl0aW9uYWwgYW1vdW50IHRvIGRlYml0IHRoZSBwZWVy
J3MgcmVjZWl2ZXIgd2luZG93IHBlciBjaHVuayBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAy
NTYsIHdoaWNoIGlzIHRoZSB2YWx1ZSBuZWVkZWQgYnkgRnJlZUJTRC4KLQotIyMjIyB1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKCkKLVRoaXMgcGFyYW1ldGVyIHNl
dHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNodW5rcyB0aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFz
c29jaWF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyA1MTIuCi0KLSMjIyMgdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfbWluX3NwbGl0X3BvaW50KCkKLVRCRAotVGhlIG1pbmltdW0gc2l6ZSB3aGVu
IHNwbGl0dGluZyBhIGNodW5rIGlzIDI5MDQgYnl0ZXMgYnkgZGVmYXVsdC4KLQotIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9jaHVua3NjYWxlKCkKLVRCRAotVGhpcyBwYXJhbWV0ZXIgY2Fu
IGJlIHR1bmVkIGZvciBzY2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBU
aGUgZGVmYXVsdCBpczEwLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21pbl9yZXNp
ZHVhbCgpCi1UQkQKLVRoaXMgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBv
ZiB0aGUgcmVzaWR1YWwgZGF0YSBjaHVuayBpbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHNwbGl0
LiBUaGUgZGVmYXVsdCBpcyAxNDUyLgotCi0KLSMjIENhbGN1bGF0ZSBSVFQKLVRoZSBjYWxjdWxh
dGlvbiBvZiB0aGUgcm91bmQgdHJpcCB0aW1lIChSVFQpIGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJh
bWV0ZXJzLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9idygpCi1UQkQK
LVNoaWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjLiBEZWZhdWx0OiA0Ci0K
LSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcnR0dmFyX3J0dCgpCi1UQkQKLVNoaWZ0IGFt
b3VudCBmb3IgcnR0IHNtb290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVsdDogNQotCi0jIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9lcXJldCgpCi1UQkQKLVdoYXQgdG8gcmV0dXJu
IHdoZW4gcnR0IGFuZCBidyBhcmUgdW5jaGFuZ2VkLiBEZWZhdWx0OiAwCi0KLQotIyMgSW5mbHVl
bmNlIHRoZSBDb25nZXN0aW9uIENvbnRyb2wKLVRoZSBjb25nZXN0aW9uIGNvbnRyb2wgc2hvdWxk
IHByb3RlY3QgdGhlIG5ldHdvcmsgYWdhaW5zdCBmYXN0IHNlbmRlcnMuCi0KLSMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZQotRXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmlj
YXRpb25zIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdC4KLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWZhdWx0X2NjX21vZHVsZSgpCi1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBkZWZh
dWx0IGFsZ29yaXRobSBmb3IgdGhlIGNvbmdlc3Rpb24gY29udHJvbC4gRGVmYXVsdCBpcyAwLCBp
LmUuIHRoZSBvbmUgc3BlY2lmaWVkIGluIFtSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNDk2MCkuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdGlhbF9j
d25kKCkKLVNldCB0aGUgaW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVm
YXVsdCBpcyAzLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VzZV9kY2NjX2Vjbigp
Ci1UQkQKLUVuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTi4gRGVmYXVsdDogMQotCi0j
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3N0ZWFkeV9zdGVwKCkKLVRCRAotSG93IG1hbnkg
dGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZC4gRGVmYXVsdDogMjAK
LQotCi0jIyBDb25maWd1cmUgQVVUSCBhbmQgQURELUlQCi1BbiBpbXBvcnRhbnQgZXh0ZW5zaW9u
IG9mIFNDVFAgaXMgdGhlIGR5bmFtaWMgYWRkcmVzcyByZWNvbmZpZ3VyYXRpb24gKHNlZSBbUkZD
IDUwNjFdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzUwNjEpKSwgYWxzbyBrbm93biBh
cyBBREQtSVAsIHdoaWNoIGFsbG93cyB0aGUgY2hhbmdpbmcgb2YgYWRkcmVzc2VzIGR1cmluZyB0
aGUgbGlmZXRpbWUgb2YgYW4gYXNzb2NpYXRpb24uIEZvciB0aGlzIGZlYXR1cmUgdGhlIEFVVEgg
ZXh0ZW5zaW9uIChzZWUgW1JGQyA0ODk1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0
ODk1KSkgaXMgbmVjZXNzYXJ5LgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2F1dG9f
YXNjb25mKCkKLUlmIFNDVFAgQXV0by1BU0NPTkYgaXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5m
b3JtZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3IGFkZHJlc3MKLWlzIGFkZGVkIG9yIHJlbW92
ZWQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCi0KLSMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfbXVsdGlwbGVfYXNjb25mcygpCi1CeSBkZWZhdWx0IHRoZSBzZW5kaW5n
IG9mIG11bHRpcGxlIEFTQ09ORnMgaXMgZGlzYWJsZWQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfYXV0aF9kaXNhYmxlKCkKLVRoZSB1c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFs
bHkgdHVybmVkIG9uLCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0
byAxLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2FzY29uZl9hdXRoX25vY2hrKCkK
LUl0IGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSB0aGUgcmVxdWlyZW1lbnQgdG8gdXNlIEFV
VEggaW4gY29uanVuY3Rpb24gd2l0aCBBREQtSVAgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlcgot
dG8gMS4KLQotCi0jIyBDb25jdXJyZW50IE11bHRpcGF0aCBUcmFuc2ZlciAoQ01UKQotQSBwcm9t
aW5lbnQgZmVhdHVyZSBvZiBTQ1RQIGlzIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugc2V2ZXJhbCBh
ZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGFzc29jaWF0aW9uLiBPbmUgaXMgdGhlIHByaW1hcnkgcGF0
aCwgYW5kIHRoZSBvdGhlcnMgYXJlIG5lZWRlZCBpbiBjYXNlIG9mIGEgcGF0aCBmYWlsdXJlLiBV
c2luZyBDTVQgdGhlIGRhdGEgaXMgc2VudCBvbiBzZXZlcmFsIHBhdGhzIHRvIGVuaGFuY2UgdGhl
IHRocm91Z2hwdXQuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfY210X29uX29mZigp
Ci1UbyB0dXJuIENNVCBvbiwgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0byAxLgotCi0j
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2NtdF91c2VfZGFjKCkKLVRvIHVzZSBkZWxheWVk
IGFja25vd2xlZGdtZW50cyB3aXRoIENNVCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRv
IDEuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYnVmZmVyX3NwbGl0dGluZygpCi1G
b3IgQ01UIGl0IG1ha2VzIHNlbnNlIHRvIHNwbGl0IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZl
ciB0byBoYXZlIHNoYXJlcyBmb3IgZWFjaCBwYXRoLiBCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRp
bmcgaXMgdHVybmVkIG9mZi4KLQotCi0jIyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5B
VCkKLVRvIGJlIGFibGUgdG8gcGFzcyBOQVQgYm94ZXMsIHRoZSBib3hlcyBoYXZlIHRvIGhhbmRs
ZSBTQ1RQIHBhY2tldHMgaW4gYSBzcGVjaWZpYyB3YXkuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfbmF0X2ZyaWVuZGx5KCkKLVNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVm
YXVsdDoxCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdHNfaW5jbHVkZV9uYXRf
ZnJpZW5kbHkoKQotRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlv
biBvbiBJTklUcy4gRGVmYXVsdDogMAotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3Vk
cF90dW5uZWxpbmdfcG9ydCgpCi1TZXQgdGhlIFNDVFAvVURQIHR1bm5lbGluZyBwb3J0LiBEZWZh
dWx0OiA5ODk5Ci0KLSMjIFNDVFAgTW9iaWxpdHkKLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfbW9iaWxpdHlfYmFzZSgpCi1UQkQKLUVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkuIERlZmF1
bHQ6IDAKLQotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21vYmlsaXR5X2Zhc3RoYW5k
b2ZmKCkKLVRCRAotRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmLiBkZWZhdWx0OiAwCi0KLQotIyMg
TWlzY2VsbGFuZW91cwotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xv
b3BiYWNrKCkKLUNhbGN1bGF0aW5nIHRoZSBjaGVja3N1bSBmb3IgcGFja2V0cyBzZW50IG9uIGxv
b3BiYWNrIGlzIHR1cm5lZCBvZmYgYnkgZGVmYXVsdC4gVG8gdHVybiBpdCBvbiwgc2V0IHRoaXMg
cGFyYW1ldGVyIHRvIDAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbnJfb3V0Z29p
bmdfc3RyZWFtc19kZWZhdWx0KCkKLVRoZSBwZWVyIGlzIG5vdGlmaWVkIGFib3V0IHRoZSBudW1i
ZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyBpbiB0aGUgSU5JVCBvciBJTklULUFDSyBjaHVuay4gVGhl
IGRlZmF1bHQgaXMgMTAuCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZG9fZHJhaW4o
KQotRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNh
bGxzLiBEZWZhdWx0OiAxCQkKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3Rf
ZGF0YV9vcmRlcigpCi1UQkQKLUVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlm
IGNvbnRyb2wgaW5zaWRlIGRhdGEuIERlZmF1bHQ6IDAKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWZhdWx0X3NzX21vZHVsZSgpCi1TZXQgdGhlIGRlZmF1bHQgc3RyZWFtIHNjaGVk
dWxpbmcgbW9kdWxlLiBJbXBsZW1lbnRlZCBtb2R1bGVzIGFyZToKLSogU0NUUF9TU19ERUZBVUxU
Ci0qIFNDVFBfU1NfUk9VTkRfUk9CSU4KLSogU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQKLSog
U0NUUF9TU19QUklPUklUWQotKiBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgKLSogU0NUUF9TU19GSVJT
VF9DT01FCi0KLSMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVmYXVsdF9mcmFnX2ludGVy
bGVhdmUoKQotVEJECi1EZWZhdWx0IGZyYWdtZW50IGludGVybGVhdmUgbGV2ZWwuIERlZmF1bHQ6
IDEKLQotIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoKQotVEJECi1FbmFi
bGUgU0NUUCBibGFja2hvbGluZy4gRGVmYXVsdDogMAotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2xvZ2dpbmdfbGV2ZWwoKQotU2V0IHRoZSBsb2dnaW5nIGxldmVsLiBUaGUgZGVmYXVs
dCBpcyAwLgotCi0jIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKCkKLVR1cm4g
ZGVidWcgb3V0cHV0IG9uIG9yIG9mZi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0
YWluIGRlYnVnIG91dHB1dCwgYFNDVFBfREVCVUdgIGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxl
IGZsYWcuCi0KLQotIyMjIHN5c2N0bCB2YXJpYWJsZXMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKLQot
UGFyYW1ldGVyIHwgTWVhbmluZyB8IERlZmF1bHQgVmFsdWUKLS0tLS0tLS0tLSB8IC0tLS0tLS0g
fCAtLS0tLS0tLS0tLS0tCi1zY3RwX3NlbmRzcGFjZSB8IFNlbmQgYnVmZmVyIHNwYWNlIHwgMTg2
NDEzNQotc2N0cF9yZWN2c3BhY2UgfCBSZWNlaXZlIGJ1ZmZlciBzcGFjZSB8IDE4NjQxMzUKLXNj
dHBfaGFzaHRibHNpemUgfCBUdW5hYmxlIGZvciBUQ0IgaGFzaCB0YWJsZSBzaXplcyB8IDEwMjQK
LXNjdHBfcGNidGJsc2l6ZSB8IFR1bmFibGUgZm9yIFBDQiBoYXNoIHRhYmxlIHNpemVzIHwgMjU2
Ci1zY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQgfCBDYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBz
eXN0ZW0gfCAxMDAwCi1zY3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0IHwgQ2FzaGVkIHJlc291cmNl
cyBpbiBhbiBhc3NvY2lhdGlvbiB8IDEwCi1zY3RwX3J0b19tYXhfZGVmYXVsdCB8IERlZmF1bHQg
dmFsdWUgZm9yIFJUT19tYXggfCA2MDAwMG1zCi1zY3RwX3J0b19taW5fZGVmYXVsdCB8IERlZmF1
bHQgdmFsdWUgZm9yIFJUT19taW4gfCAxMDAwbXMKLXNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCB8
IERlZmF1bHQgdmFsdWUgZm9yIFJUT19pbml0aWFsIHwgMzAwMG1zCi1zY3RwX2luaXRfcnRvX21h
eF9kZWZhdWx0IHwgRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gUlRPIGZvciBzZW5kaW5n
IGFuIElOSVQgfCA2MDAwMG1zCi1zY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQgfCBWYWxp
ZCBjb29raWUgbGlmZSB0aW1lIHwgNjAwMDBtcwotc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCB8
IE1heGltdW0gbnVtYmVyIG9mIElOSVQgcmV0cmFuc21pc3Npb25zIHwgOAotc2N0cF9hc3NvY19y
dHhfbWF4X2RlZmF1bHQgfCBNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25z
IGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZCB8IDEwCi1zY3RwX3BhdGhfcnR4X21h
eF9kZWZhdWx0IHwgTWF4aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJhbnNtaXNzaW9ucyBiZWZv
cmUgYSBwYXRoIGZhaWxzIHwgNQotc2N0cF9lY25fZW5hYmxlIHwgRW5hYmxpbmcgZXhwbGljaXQg
Y29uZ2VzdGlvbiBub3RpZmljYXRpb25zIHwgMQotc2N0cF9zdHJpY3Rfc2Fja3MgfCBDb250cm9s
IHRoZSBjb2hlcmVuY2Ugb2YgU0FDS3MgfCAxCi1zY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1
bHQgfCBEZWZhdWx0IGRlbGF5ZWQgU0FDSyB0aW1lciB8IDIwMG1zCi1zY3RwX3NhY2tfZnJlcV9k
ZWZhdWx0IHwgRGVmYXVsdCBTQUNLIGZyZXF1ZW5jeSB8IDIKLXNjdHBfbnJfc2Fja19vbl9vZmYg
fCBUdXJuIG5vbi1yZW5lZ2FibGUgU0FDS3Mgb24gb3Igb2ZmIHwgMAotc2N0cF9lbmFibGVfc2Fj
a19pbW1lZGlhdGVseSB8IEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJp
dCB8IDAKLXNjdHBfbm9fY3N1bV9vbl9sb29wYmFjayB8IEVuYWJsZSB0aGUgY29tcGlsYXRpb24g
b2YgdGhlIGNoZWNrc3VtIG9uIHBhY2tldHMgc2VudCBvbiBsb29wYmFjayB8IDEKLXNjdHBfcGVl
cl9jaHVua19vaCB8IEFtb3VudCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBzZW50IHwg
MjU2Ci1zY3RwX21heF9idXJzdF9kZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAg
ZW5kcG9pbnRzIHwgMAotc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCB8IFVzZSBtYXggYnVy
c3QgYmFzZWQgb24gdGhlIHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IHwgMQotc2N0cF9o
Yl9tYXhidXJzdCB8IENvbmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0IHwgNAotc2N0cF9t
YXhfY2h1bmtzX29uX3F1ZXVlIHwgRGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29j
IHwgNTEyCi1zY3RwX21pbl9zcGxpdF9wb2ludCB8IE1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGlu
ZyBhIGNodW5rIHwgMjkwNAotc2N0cF9jaHVua3NjYWxlIHwgVHVuYWJsZSBmb3IgU2NhbGluZyBv
ZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNzYWdlcyB8IDEwCi1zY3RwX21idWZfdGhyZXNob2xk
X2NvdW50IHwgTWF4aW11bSBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMgaW4gYSBjaGFpbiB8IDUKLXNj
dHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQgfCBEZWFmdWx0IHRpbWUgYmV0d2VlbiB0d28g
SGVhcnRiZWF0cyB8IDMwMDAwbXMKLXNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQgfCBEZWZh
dWx0IFBNVFUgcmFpc2UgdGltZXIgfCA2MDBzZWNzCi1zY3RwX3NodXRkb3duX2d1YXJkX3RpbWVf
ZGVmYXVsdCB8IERlZmF1bHQgc2h1dGRvd24gZ3VhcmQgdGltZXIgfCAxODBzZWNzCi1zY3RwX3Nl
Y3JldF9saWZldGltZV9kZWZhdWx0IHwgRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgfCAzNjAwc2Vj
cwotc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQgfCBUaHJlc2hvbGQgd2hlbiBtb3JlIHNwYWNlIHNo
b3VsZCBiZSBhZGRlZCB0byBhIHNvY2tldCBzZW5kIGJ1ZmZlciB8IDE0NTIKLXNjdHBfbnJfb3V0
Z29pbmdfc3RyZWFtc19kZWZhdWx0IHwgRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFt
cyB8IDEwCi1zY3RwX2NtdF9vbl9vZmYgfCBUdXJuIENNVCBvbiBvciBvZmYuIHwgMAotc2N0cF9j
bXRfdXNlX2RhYyB8IFVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50IGZvciBDTVQgfCAwCi1zY3Rw
X2ZyX21heF9idXJzdF9kZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9p
bnRzIHdoZW4gZmFzdCByZXRyYW5zbWl0dGluZyB8IDQKLXNjdHBfYXV0b19hc2NvbmYgfCBFbmFi
bGUgU0NUUCBBdXRvLUFTQ09ORiB8IDEKLXNjdHBfbXVsdGlwbGVfYXNjb25mcyB8IEVuYWJsZSBT
Q1RQIE11bGlwbGUtQVNDT05GcyB8IDAKLXNjdHBfYXNjb25mX2F1dGhfbm9jaGsgfCBEaXNhYmxl
IFNDVFAgQVNDT05GIEFVVEggcmVxdWlyZW1lbnQgfCAwCi1zY3RwX2F1dGhfZGlzYWJsZSB8IERp
c2FibGUgU0NUUCBBVVRIIGZ1bmN0aW9uIHwgMAotc2N0cF9uYXRfZnJpZW5kbHkgfCBTQ1RQIE5B
VCBmcmllbmRseSBvcGVyYXRpb24gfCAxCi1zY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5
IHwgRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklU
cy4gfCAwCi1zY3RwX3VkcF90dW5uZWxpbmdfcG9ydCB8IFNldCB0aGUgU0NUUC9VRFAgdHVubmVs
aW5nIHBvcnQgfCA5ODk5Ci1zY3RwX2RvX2RyYWluIHwgRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAg
c2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzIHwgMQotc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdCB8IFdoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0IHwgMAot
c2N0cF9zdHJpY3RfZGF0YV9vcmRlciB8IEVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFi
b3J0IGlmIGNvbnRyb2wgaW5zaWRlIGRhdGEgfCAwCi1zY3RwX21pbl9yZXNpZHVhbCB8IE1pbmlt
dW0gcmVzaWR1YWwgZGF0YSBjaHVuayBpbiBzZWNvbmQgcGFydCBvZiBzcGxpdCB8IDE0NTIKLXNj
dHBfbWF4X3JldHJhbl9jaHVuayB8IE1heGltdW0gdGltZXMgYW4gdW5sdWNreSBjaHVuayBjYW4g
YmUgcmV0cmFuc21pdHRlZCBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGFib3J0cyB8IDMwCi1zY3Rw
X2RlZmF1bHRfY2NfbW9kdWxlIHwgRGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHwg
MAotc2N0cF9kZWZhdWx0X3NzX21vZHVsZSB8IERlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9k
dWxlIHwgMAotc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSB8IERlZmF1bHQgZnJhZ21lbnQg
aW50ZXJsZWF2ZSBsZXZlbCB8IDEKLXNjdHBfbW9iaWxpdHlfYmFzZSB8IEVuYWJsZSBTQ1RQIGJh
c2UgbW9iaWxpdHkgfCAwCi1zY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmIHwgRW5hYmxlIFNDVFAg
ZmFzdCBoYW5kb2ZmIHwgMAotc2N0cF9MMl9hYmNfdmFyaWFibGUgfCBTQ1RQIEFCQyBtYXggaW5j
cmVhc2UgcGVyIFNBQ0sgKEwpIHwgMQotc2N0cF92dGFnX3RpbWVfd2FpdCB8IFZ0YWcgdGltZSB3
YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIHwgNjBzZWNzCi1zY3RwX2JsYWNraG9sZSB8IEVuYWJs
ZSBTQ1RQIGJsYWNraG9saW5nIHwgMAotc2N0cF9wYXRoX3BmX3RocmVzaG9sZCB8IERlZmF1bHQg
cG90ZW50aWFsbHkgZmFpbGVkIHRocmVzaG9sZCB8IDY1NTM1Ci1zY3RwX3J0dHZhcl9idyB8IFNo
aWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNAotc2N0cF9ydHR2YXJf
cnR0IHwgU2hpZnQgYW1vdW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNQotc2N0
cF9ydHR2YXJfZXFyZXQgIHwgV2hhdCB0byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3IGFyZSB1bmNo
YW5nZWQgfCAwCi1zY3RwX3N0ZWFkeV9zdGVwIHwgSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2Vz
IHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZCB8IDIwCi1zY3RwX3VzZV9kY2NjX2VjbiB8IEVuYWJs
ZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTiB8IDEKLXNjdHBfYnVmZmVyX3NwbGl0dGluZyB8
IEVuYWJsZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHNwbGl0dGluZyB8IDAKLXNjdHBfaW5pdGlhbF9j
d25kIHwgSW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzIHwgMwotc2N0cF9sb2dnaW5n
X2xldmVsIHwgTG9nZ2luZyBsZXZlbCB8IDAKLXNjdHBfZGVidWdfb24gfCBUdXJucyBkZWJ1ZyBv
dXRwdXQgb24gb3Igb2ZmLiB8IDAKLQotIyMgRXhhbXBsZXMKLQotU2VlIGh0dHBzOi8vZ2l0aHVi
LmNvbS9zY3RwbGFiL3VzcnNjdHAvdHJlZS9tYXN0ZXIvcHJvZ3JhbXMKLQotCi0jIyBSZWZlcmVu
Y2VzCi0KLSMjIyMgU0NUUAotUi4gU3Rld2FydDo8L2JyPgotYFN0cmVhbSBDb250cm9sIFRyYW5z
bWlzc2lvbiBQcm90b2NvbGAuPC9icj4KLVtSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3Jn
L2h0bWwvcmZjNDk2MCksIFNlcHRlbWJlciAyMDA3LgotCi0jIyMjIGF1dGgKLU0uIFTDvHhlbiwg
Ui4gU3Rld2FydCwgUC4gTGVpLCBhbmQgRS4gUmVzY29ybGE6PC9icj4KLWBBdXRoZW50aWNhdGVk
IENodW5rcyBmb3IgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NU
UClgLjwvYnI+Ci1bUkZDIDQ4OTVdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4OTUp
LCBBdWd1c3QgMjAwNy4KLQotIyMjIyBhZGRpcAotUi4gU3Rld2FydCwgUS4gWGllLCBNLiBUw7x4
ZW4sIFMuIE1hcnV5YW1hLCBhbmQgTS4gS296dWthOjwvYnI+Ci1gU3RyZWFtIENvbnRyb2wgVHJh
bnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBEeW5hbWljIEFkZHJlc3MgUmVjb25maWd1cmF0aW9u
YC48L2JyPgotW1JGQyA1MDYxXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MDYxKSwg
U2VwdGVtYmVyIDIwMDcuCi0KLSMjIyMgc29ja2V0QVBJCi1SLiBTdGV3YXJ0LCBNLiBUw7x4ZW4s
IEsuIFBvb24sIGFuZCBWLiBZYXNldmljaDo8L2JyPgotYFNvY2tldHMgQVBJIEV4dGVuc2lvbnMg
Zm9yIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApYC48L2Jy
PgotW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSwgRGV6ZW1i
ZXIgMjAxMS4KLQotIyMjIyBzdHJlYW1SZXNldAotUi4gU3Rld2FydCwgTS4gVMO8eGVuLCBhbmQg
UC4gTGVpOjwvYnI+Ci1gU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQ
KSBTdHJlYW0gUmVjb25maWd1cmF0aW9uYC48L2JyPgotW1JGQyA2NTI1XShodHRwOi8vdG9vbHMu
aWV0Zi5vcmcvaHRtbC9yZmM2NTI1KSwgRmVicnVhcnkgMjAxMi4KLQotIyMjIyB1ZHBlbmNhcHMK
LU0uIFTDvHhlbiBhbmQgUi4gU3Rld2FydDwvYnI+Ci1gVURQIEVuY2Fwc3VsYXRpb24gb2YgU3Ry
ZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBQYWNrZXRzIGZvciBFbmQt
SG9zdCB0byBFbmQtSG9zdCBDb21tdW5pY2F0aW9uYDwvYnI+Ci1bUkZDIDY5NTFdKGh0dHBzOi8v
dG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTUxKSwgTWF5IDIwMTMuCi0KLSMjIyMgc2Fjay1pbW0K
LU0uIFTDvHhlbiwgSS4gUsO8bmdlbGVyLCBhbmQgUi4gU3Rld2FydDo8L2JyPgotYFNBQ0stSU1N
RURJQVRFTFkgRXh0ZW5zaW9uIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFBy
b3RvY29sYDwvYnI+Ci1bUkZDIDcwNTNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3
MDUzKSwgTm92ZW1iZXIgMjAxMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9NYW51YWwudGV4IGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL01hbnVhbC50ZXgKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MjE1OTM5ODYyNWUzMGNkMzEzOWJmYTIzM2Y4
ZjU2MzdmNzMwZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L01hbnVhbC50ZXgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzMwICswLDAgQEAKLSUKLSUgQ29weXJp
Z2h0IChDKSAyMDEyLTIwMTUgSXJlbmUgUnVlbmdlbGVyCi0lIENvcHlyaWdodCAoQykgMjAxMi0y
MDE1IE1pY2hhZWwgVHVleGVuCi0lCi0lIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0lCi0lIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotJSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSUgYXJlIG1ldDoKLSUgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSUgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotJSAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotJSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0lICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0lIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0lICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotJSAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSUKLSUgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJP
SkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSUgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0lIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0lIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0lIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0l
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0lIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotJSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotJSBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi0lIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSUgU1VDSCBEQU1BR0UuCi0lCi1cZG9j
dW1lbnRjbGFzc1thNHBhcGVyXXthcnRpY2xlfQotJQotXHVzZXBhY2thZ2V7bG9uZ3RhYmxlfQot
JQotXHRpdGxle1NvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBJbXBsZW1lbnRhdGlv
biAodXNyc2N0cCl9Ci1cYXV0aG9ye0kuflJcInVuZ2VsZXIlCi0gICAgICAgIFx0aGFua3N7TVwi
dW5zdGVyIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcywKLSAgICAgICAgICAgICAgICBE
ZXBhcnRtZW50IG9mIEVsZWN0cmljYWwgRW5naW5lZXJpbmcKLSAgICAgICAgICAgICAgICBhbmQg
Q29tcHV0ZXIgU2NpZW5jZSwKLSAgICAgICAgICAgICAgICBTdGVnZXJ3YWxkc3RyLn4zOSwKLSAg
ICAgICAgICAgICAgICBELTQ4NTY1IFN0ZWluZnVydCwKLSAgICAgICAgICAgICAgICBHZXJtYW55
LAotICAgICAgICAgICAgICAgIFx0ZXh0dHR7aS5ydWVuZ2VsZXJAZmgtbXVlbnN0ZXIuZGV9Ln0K
LSAgICAgICAgXGFuZAotICAgICAgICBNLn5UXCJ1eGVuJQotICAgICAgICBcdGhhbmtze01cInVu
c3RlciBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsCi0gICAgICAgICAgICAgICAgRGVw
YXJ0bWVudCBvZiBFbGVjdHJpY2FsIEVuZ2luZWVyaW5nCi0gICAgICAgICAgICAgICAgYW5kIENv
bXB1dGVyIFNjaWVuY2UsCi0gICAgICAgICAgICAgICAgU3RlZ2Vyd2FsZHN0ci5+MzksCi0gICAg
ICAgICAgICAgICAgRC00ODU2NSBTdGVpbmZ1cnQsCi0gICAgICAgICAgICAgICAgR2VybWFueSwK
LSAgICAgICAgICAgICAgICBcdGV4dHR0e3R1ZXhlbkBmaC1tdWVuc3Rlci5kZX0ufQotfQotJQot
XGJlZ2lue2RvY3VtZW50fQotXHNldGNvdW50ZXJ7c2VjbnVtZGVwdGh9ezR9Ci1cc2V0Y291bnRl
cnt0b2NkZXB0aH17NH0KLVxtYWtldGl0bGUKLVx0YWJsZW9mY29udGVudHMKLQotXHNlY3Rpb257
SW50cm9kdWN0aW9ufQotSW4gdGhpcyBtYW51YWwgdGhlIHNvY2tldCBBUEkgZm9yIHRoZSBTQ1RQ
IFVzZXItbGFuZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRlc2NyaWJlZC4gCi1JdCBpcyBiYXNl
ZCBvbiBSRkMgNjQ1OH5cY2l0ZXtzb2NrZXRBUEl9LiBUaGUgbWFpbiBmb2N1cyBvZiB0aGlzIGRv
Y3VtZW50IGlzIG9uIHBvaW50aW5nIG91dAotIHRoZSBkaWZmZXJlbmNlcyB0byB0aGUgU0NUUCBT
b2NrZXRzIEFQSS4gRm9yIGFsbCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQSSB0aGF0IGFyZSBu
b3QKLSBtZW50aW9uZWQgaW4gdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4
LiBRdWVzdGlvbnMgYWJvdXQgU0NUUCBjYW4gaG9wZWZ1bGx5IGJlCi0gYW5zd2VyZWQgYnkgUkZD
fjQ5NjB+XGNpdGV7U0NUUH0uCi0gCi1cc2VjdGlvbntHZXR0aW5nIFN0YXJ0ZWR9Ci1UaGUgVXNl
ci1sYW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAsIFVidW50dSAxMS4x
MCwgV2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCAKLWFuZCBNQUMgT1MgWCAxMC43LgotVGhlIGN1
cnJlbnQgdmVyc2lvbiBvZiB0aGUgVXNlci1sYW5kIHN0YWNrIGlzIHByb3ZpZGVkIG9uIFx0ZXh0
aXR7aHR0cDovL3NjdHAuZmgtbXVlbnN0ZXIuZGUvc2N0cC11c2VyLWxhbmQtc3RhY2suaHRtbH0u
Ci1Eb3dubG9hZCB0aGUgdGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xkZXIgb2YgeW91ciBj
aG9pY2UuIAotVGhlIHRhcmJhbGwgY29udGFpbnMgYWxsIHRoZSBzb3VyY2VzIHRvIGJ1aWxkIHRo
ZSBsaWJ1c3JzY3RwLCB3aGljaCBoYXMgdG8gYmUgbGlua2VkIHRvIHRoZSBvYmplY3QgZmlsZSBv
ZiBhbiAKLWV4YW1wbGUgcHJvZ3JhbS4gSW4gYWRkaXRpb24gdGhlcmUgYXJlIHR3byBhcHBsaWNh
dGlvbnMgaW4gdGhlIGZvbGRlciBcdGV4dGl0e3Byb2dyYW1zfSB0aGF0IGNhbiBiZSBidWlsdCBh
bmQgcnVuLgotIAotXHN1YnNlY3Rpb257QnVpbGRpbmcgdGhlIExpYnJhcnkgYW5kIHRoZSBBcHBs
aWNhdGlvbnN9Ci1cc3Vic3Vic2VjdGlvbntVbml4LWxpa2UgT3BlcmF0aW5nIFN5c3RlbXN9Ci1J
biB0aGUgZm9sZGVyIFx0ZXh0aXR7dXNyc2N0cH0gdHlwZQotXGJlZ2lue3ZlcmJhdGltfQotLi9i
b290c3RyYXAKLS4vY29uZmlndXJlCi1tYWtlCi1cZW5ke3ZlcmJhdGltfQotTm93LCB0aGUgbGli
cmFyeSBcdGV4dGl0e2xpYnVzcnNjdHAubGF9IGhhcyBiZWVuIGJ1aWx0IGluIHRoZSBzdWJkaXJl
Y3RvcnkgXHRleHRpdHt1c3JzY3RwbGlifSwgYW5kIHRoZSBleGFtcGxlIAotcHJvZ3JhbXMgYXJl
IHJlYWR5IHRvIHJ1biBmcm9tIHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHtwcm9ncmFtc30uCi0K
LUlmIHlvdSBoYXZlIHJvb3QgcHJpdmlsZWdlcyBvciBhcmUgaW4gdGhlIHN1ZG9lciBncm91cCwg
eW91IGNhbiBpbnN0YWxsIHRoZSBsaWJyYXJ5IGluIFx0ZXh0aXR7L3Vzci9sb2NhbC9saWJ9IAot
YW5kIGNvcHkgdGhlIGhlYWRlciBmaWxlIHRvIFx0ZXh0aXR7L3Vzci9pbmNsdWRlfSB3aXRoIHRo
ZSBjb21tYW5kCi1cYmVnaW57dmVyYmF0aW19Ci1zdWRvIG1ha2UgaW5zdGFsbAotXGVuZHt2ZXJi
YXRpbX0KLQotXHN1YnN1YnNlY3Rpb257V2luZG93c30KLU9uIFdpbmRvd3MgeW91IG5lZWQgYSBj
b21waWxlciBsaWtlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBZb3UgY2FuIGJ1aWxkIHRoZSBs
aWJyYXJ5IGFuZCB0aGUKLWV4YW1wbGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29tbWFuZCBsaW5lIHRv
b2wgb2YgdGhlIGNvbXBpbGVyIGJ5IHR5cGluZwotXGJlZ2lue3ZlcmJhdGltfQotbm1ha2UgLWYg
TWFrZWZpbGUubm1ha2UKLVxlbmR7dmVyYmF0aW19Ci1pbiB0aGUgZGlyZWN0b3J5IFx0ZXh0aXR7
dXNyc2N0cH0uCi0KLVxzdWJzZWN0aW9ue1J1bm5pbmcgdGhlIFRlc3QgUHJvZ3JhbXN9Ci1UaGVy
ZSBhcmUgdHdvIHRlc3QgcHJvZ3JhbXMgaW5jbHVkZWQsIGEgZGlzY2FyZCBzZXJ2ZXIgYW5kIGEg
Y2xpZW50LiBZb3UgY2FuIHJ1biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRoZQotY2xpZW50IHRv
IHRoZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGluIGFuZCBzZW5kcyB0
aGVtIHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZQotaW4gdGhlIHRlcm1p
bmFsIGFuZCBkaXNjYXJkcyBpdC4gVGhlIHNvdXJjZXMgb2YgdGhlIHNlcnZlciBhcmUgYWxzbyBw
cm92aWRlZCBpbiBTZWN0aW9uflxyZWZ7c2VydmVyfSBhbmQgdGhvc2UKLW9mIHRoZSBjbGllbnQg
aW4gU2VjdGlvbn5ccmVme2NsaWVudH0uCi0KLVxzdWJzdWJzZWN0aW9ue1VzaW5nIFVEUCBFbmNh
cHN1bGF0aW9ufQotQm90aCBwcm9ncmFtcyBjYW4gZWl0aGVyIHNlbmQgZGF0YSBvdmVyIFNDVFAg
ZGlyZWN0bHkgb3IgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCB0aHVzIGVuY2Fwc3VsYXRpbmcgdGhl
Ci1TQ1RQIHBhY2tldCBpbiBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1vZGUgd29ya3Mgb24g
bG9vcGJhY2sgb3IgaW4gYSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkgCi1OQVQgYm94ZXMg
aW52b2x2ZWQuIEluIGFsbCBvdGhlciBjYXNlcyBpdCBpcyBiZXR0ZXIgdG8gdXNlIFVEUCBlbmNh
cHN1bGF0aW9uLgotCi1UaGUgdXNhZ2Ugb2YgdGhlIGRpc2NhcmRcX3NlcnZlciBpcwotXGJlZ2lu
e3ZlcmJhdGltfQotZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0IHJlbW90ZV9lbmNh
cHNfcG9ydF0KLVxlbmR7dmVyYmF0aW19Ci1Gb3IgVURQIGVuY2Fwc3VsYXRpb24gdGhlIHBvcnRz
IGhhdmUgdG8gYmUgc3BlY2lmaWVkLiBUaGUgbG9jYWwgYW5kIHJlbW90ZSBlbmNhcHN1bGF0aW9u
IHBvcnRzIGNhbiBiZSBhcmJpdHJhcmlseQotc2V0LgotRm9yIGV4YW1wbGUsIHlvdSBjYW4gY2Fs
bAotXGJlZ2lue3ZlcmJhdGltfQotLi9kaXNjYXJkX3NlcnZlciAxMTExMSAyMjIyMgotXGVuZHt2
ZXJiYXRpbX0KLW9uIGEgVW5peC1saWtlIE9TIGFuZAotXGJlZ2lue3ZlcmJhdGltfQotZGlzY2Fy
ZF9zZXJ2ZXIuZXhlIDExMTExIDIyMjIyCi1cZW5ke3ZlcmJhdGltfQotb24gV2luZG93cy4KLQot
VGhlIGNsaWVudCBuZWVkcyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLCB0aGUgc2VydmVyJ3Mg
YWRkcmVzcyBhbmQgaXRzIHBvcnQuCi1JdHMgdXNhZ2UgaXMKLVxiZWdpbnt2ZXJiYXRpbX0KLWNs
aWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2NhbF9lbmNhcHNfcG9y
dCByZW1vdGVfZW5jYXBzX3BvcnRdCi1cZW5ke3ZlcmJhdGltfQotVGhlIHJlbW90ZSBhZGRyZXNz
IGlzIHRoZSBzZXJ2ZXIncyBhZGRyZXNzLiBJZiBjbGllbnQgYW5kIHNlcnZlciBhcmUgc3RhcnRl
ZCBvbiB0aGUgc2FtZSBtYWNoaW5lLAotdGhlIGxvb3BiYWNrIGFkZHJlc3MgMTI3LjAuMC4xIGNh
biBiZSB1c2VkIGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRkcmVzcyBvbiBXaW5k
b3dzLgotVGhlIGRpc2NhcmQgcG9ydCBpcyA5LCB0aHVzIDkgaGFzIHRvIGJlIHRha2VuIGFzIHJl
bW90ZSBwb3J0LiBUaGUgZW5jYXBzdWxhdGlvbiBwb3J0cyBoYXZlIHRvCi1tYXRjaCB0aG9zZSBv
ZiB0aGUgc2VydmVyLCBpLmUuIHRoZSBzZXJ2ZXIncyBsb2NhbFxfZW5jYXBzXF9wb3J0IGlzIHRo
ZSBjbGllbnQncwotcmVtb3RlXF9lbmNhcHNcX3BvcnQgYW5kIHZpY2UgdmVyc2EuIFRodXMsIHRo
ZSBjbGllbnQgY2FuIGJlIHN0YXJ0ZWQgd2l0aAotXGJlZ2lue3ZlcmJhdGltfQotLi9jbGllbnQg
MTI3LjAuMC4xIDkgMCAyMjIyMiAxMTExMQotXGVuZHt2ZXJiYXRpbX0KLW9uIGEgVW5peC1saWtl
IE9TIGFuZAotXGJlZ2lue3ZlcmJhdGltfQotY2xpZW50LmV4ZSAxOTIuMTY4LjAuMSA5IDAgMjIy
MjIgMTExMTEKLVxlbmR7dmVyYmF0aW19Ci1vbiBXaW5kb3dzIHByb3ZpZGVkIHlvdXIgbG9jYWwg
SVAgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KLQotXHN1YnN1YnNlY3Rpb257U2VuZGluZyBvdmVy
IFNDVFB9Ci1UbyBzZW5kIGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IHlvdSBtaWdodCBuZWVkIHJv
b3QgcHJpdmlsZWdlcyBiZWNhdXNlIHJhdyBzb2NrZXRzIGFyZSB1c2VkLgotVGh1cyBpbnN0ZWFk
IG9mIHNwZWNpZnlpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgeW91IGhhdmUgdG8gc3RhcnQg
dGhlIHByb2dyYW1zIHByZXBlbmRpbmcgCi1cdGV4dHR0e3N1ZG99IG9yIGluIGNhc2Ugb2YgV2lu
ZG93cyBzdGFydCB0aGUgcHJvZ3JhbSBmcm9tIGFuIGFkbWluaXN0cmF0b3IgY29uc29sZS4KLQot
XHN1YnN1YnNlY3Rpb257VXNpbmcgdGhlIENhbGxiYWNrIEFQSX0KLUluc3RlYWQgb2YgYXNraW5n
IGNvbnN0YW50bHkgZm9yIG5ldyBkYXRhLCBhIGNhbGxiYWNrIEFQSSBjYW4gYmUgdXNlZCB0aGF0
IGlzIHRyaWdnZXJlZCBieSAKLVNDVFAuIEEgY2FsbGJhY2sgZnVuY3Rpb24gaGFzIHRvIGJlIHJl
Z2lzdGVyZWQgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBkYXRhIGlzIHJlYWR5IHRvCi1i
ZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgotCi1UaGUgZGlzY2FyZFxfc2VydmVyIGhh
cyBhIGZsYWcgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3byBtb2RpLiBJZiAgdXNlXF9jYiBpcyBz
ZXQgdG8gMSwgdGhlCi1jYWxsYmFjayBBUEkgd2lsbCBiZSB1c2VkLiBUbyBjaGFuZ2UgdGhlIHNl
dHRpbmcsIGp1c3Qgc2V0IHRoZSBmbGFnIGFuZCBjb21waWxlIHRoZSBwcm9ncmFtIGFnYWluLgot
Ci0KLQotCi1cc2VjdGlvbntCYXNpYyBPcGVyYXRpb25zfQotQWxsIHN5c3RlbSBjYWxscyBzdGFy
dCB3aXRoIHRoZSBwcmVmaXggXHRleHRpdHt1c3JzY3RwXF99IHRvIGRpc3Rpbmd1aXNoIHRoZW0g
ZnJvbSB0aGUga2VybmVsIHZhcmlhbnRzLiAKLVNvbWUgb2YgdGhlbSBhcmUgY2hhbmdlZCB0byBh
Y2NvdW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJsYW5kIGVudmlyb25t
ZW50LiAKLQotXHN1YnNlY3Rpb257RGlmZmVyZW5jZXMgdG8gUkZDIDY0NTh9Ci1cc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9pbml0KCl9Ci1FdmVyeSBhcHBsaWNhdGlvbiBoYXMgdG8gc3RhcnQgd2l0
aCBcdGV4dGl0e3VzcnNjdHBcX2luaXQoKX0uIFRoaXMgZnVuY3Rpb24gY2FsbHMgXHRleHRpdHtz
Y3RwXF9pbml0KCl9IGFuZCByZXNlcnZlcwotdGhlIG1lbW9yeSBuZWNlc3NhcnkgdG8gYWRtaW5p
c3RlciB0aGUgZGF0YSB0cmFuc2Zlci4KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMgCi1cYmVn
aW57dmVyYmF0aW19Ci12b2lkCi11c3JzY3RwX2luaXQodWludDE2X3QgdWRwX3BvcnQpCi1cZW5k
e3ZlcmJhdGltfQotQXMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzZW5kIGRhdGEgZGly
ZWN0bHkgb3ZlciBTQ1RQIGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2FuCi1wcm9jZXNzIFND
VFAgcGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRvIGVuY2Fwc3VsYXRl
IFNDVFAgaW50byBVRFAKLWEgVURQIHBvcnQgaGFzIHRvIGJlIHNwZWNpZmllZCwgdG8gd2hpY2gg
dGhlIGRhdGFncmFtcyBjYW4gYmUgc2VudC4gVGhpcyBsb2NhbCBVRFAgcG9ydCAgaXMgc2V0IAot
d2l0aCB0aGUgcGFyYW1ldGVyIFx0ZXh0dHR7dWRwXF9wb3J0fS4gVGhlIGRlZmF1bHQgdmFsdWUg
aXMgOTg5OSwgdGhlIHN0YW5kYXJkIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQuCi1JZiBVRFAgZW5j
YXBzdWxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFzIHRvIGJlIHNldCB0
byAwLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9maW5pc2goKX0KLUF0IHRoZSBlbmQgb2Yg
dGhlIHByb2dyYW0gXHRleHRpdHt1c3JzY3RwXF9maW5pc2goKX0gc2hvdWxkIGJlIGNhbGxlZCB0
byBmcmVlIGFsbCB0aGUgbWVtb3J5IHRoYXQgaGFzIGJlZW4KLWFsbG9jYXRlZCBiZWZvcmUuCi1U
aGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzIAotXGJlZ2lue3ZlcmJhdGltfQotaW50Ci11c3JzY3Rw
X2ZpbmlzaCh2b2lkKS4KLVxlbmR7dmVyYmF0aW19Ci1UaGUgcmV0dXJuIGNvZGUgaXMgMCBvbiBz
dWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgotCi1cc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zb2NrZXQoKX0KLUEgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBlbmRwb2ludCBpcyBh
IHNvY2tldC4gSXMgaXQgY3JlYXRlZCB3aXRoIFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9Lgot
VGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcyAKLVxiZWdpbnt2ZXJiYXRpbX0KLXN0cnVjdCBzb2Nr
ZXQgKgotdXNyc2N0cF9zb2NrZXQoaW50IGRvbWFpbiwgCi0gICAgICAgICAgICAgICBpbnQgdHlw
ZSwgCi0gICAgICAgICAgICAgICBpbnQgcHJvdG9jb2wsCi0gICAgICAgICAgICAgICBpbnQgKCpy
ZWNlaXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNpemVfdCBkYXRhbGVuLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3JjdmluZm8sIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IGZsYWdzKSwKLSAgICAgICAgICAgICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNv
Y2ssIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2JfZnJlZSksCi0g
ICAgICAgICAgICAgICB1aW50MzJfdCBzYl90aHJlc2hvbGQpLgotXGVuZHt2ZXJiYXRpbX0KLWFu
ZCB0aGUgYXJndW1lbnRzIHRha2VuIGZyb20gUkZDfjY0NTggYXJlCi1cYmVnaW57aXRlbWl6ZX0K
LVxpdGVtICBkb21haW46IFBGXF9JTkVUIG9yIFBGXF9JTkVUNiBjYW4gYmUgdXNlZC4KLVxpdGVt
IHR5cGU6IEluIGNhc2Ugb2YgYSBvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQgaXQgaXMgU09DS1xf
U0VRUEFDS0VULCBpbiBjYXNlIG9mIGEgb25lLXRvLW9uZSBzdHlsZSAKLXNvY2tldCBpdCBpcyBT
T0NLXF9TVFJFQU0uIEZvciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2Vl
biB0aGUgc29ja2V0IHR5cGVzIHBsZWFzZQotcmVmZXIgdG8gUkZDfjY0NTguCi1caXRlbSBwcm90
b2NvbDogU2V0IElQUFJPVE9cX1NDVFAuCi1cZW5ke2l0ZW1pemV9Ci0KLUluIHVzcnNjdHAgYSBj
YWxsYmFjayBBUEkgY2FuIGJlIHVzZWQuIFRoZSBmdW5jdGlvbiBwb2ludGVycyBvZiB0aGUgcmVj
ZWl2ZSBhbmQgc2VuZCBjYWxsYmFja3MKLWFyZSBuZXcgYXJndW1lbnRzIHRvIHRoZSBzb2NrZXQg
Y2FsbC4gVGhleSBhcmUgTlVMTCwgaWYgbm8gY2FsbGJhY2sgQVBJIGlzIHVzZWQuIFRoZSBzYlxf
dGhyZXNob2xkIAotc3BlY2lmaWVzIHRoZSBhbW91bnQgb2YgZnJlZSBzcGFjZSBpbiB0aGUgc2Vu
ZCBzb2NrZXQgYnVmZmVyIGJlZm9yZSB0aGUgc2VuZCBmdW5jdGlvbiBpbiB0aGUgCi1hcHBsaWNh
dGlvbiBpcyBjYWxsZWQuIElmIGEgc2VuZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBzcGVjaWZpZWQg
YW5kIHNiXF90aHJlc2hvbGQgaXMgMCwgdGhlIGZ1bmN0aW9uIGlzCi1jYWxsZWQgd2hlbmV2ZXIg
dGhlcmUgaXMgcm9vbSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyLgotCi1PbiBzdWNjZXNzIFx0
ZXh0aXR7dXNyc2N0cFxfc29ja2V0KCl9IHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBz
b2NrZXQgaW4gdGhlIFx0ZXh0dHR7c3RydWN0IHNvY2tldH0gZGF0YSB0eXBlLiAKLUl0IHdpbGwg
YmUgbmVlZGVkIGluIGFsbCBvdGhlciBzeXN0ZW0gY2FsbHMuIEluIGNhc2Ugb2YgYSBmYWlsdXJl
IE5VTEwgaXMgcmV0dXJuZWQgYW5kCi1lcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVy
cm9yIGNvZGUuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX2Nsb3NlKCl9Ci0KLVRoZSBmdW5j
dGlvbiBwcm90b3R5cGUgb2YgXHRleHRpdHt1c3JzY3RwXF9jbG9zZSgpfSBpcyAKLVxiZWdpbnt2
ZXJiYXRpbX0gICAKLXZvaWQKLXVzcnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pLgotIFxl
bmR7dmVyYmF0aW19Ci1UaHVzIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIGFic2VuY2Ugb2Yg
YSByZXR1cm4gY29kZS4gCi0gCi1cc3Vic2VjdGlvbntTYW1lIEZ1bmN0aW9uYWxpdHkgYXMgUkZD
IDY0NTh9Ci1UaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxp
dHkgYXMgdGhlaXIga2VybmVsIHBlbmRhbnRzLiBUaGVyZSBwcm90b3R5cGVzCi1hcmUgZGVzY3Jp
YmVkIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0
aW9uIHBsZWFzZSByZWZlciB0byBSRkN+NjQ1OC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
YmluZCgpfQotVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2JpbmQo
KX0gaXMgCi1cYmVnaW57dmVyYmF0aW19Ci1pbnQKLXVzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0
ICpzbywKLSAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgICAgICAgICAg
c29ja2xlbl90IGFkZHJsZW4pLgotXGVuZHt2ZXJiYXRpbX0gICAgIAotVGhlIGFyZ3VtZW50cyBh
cmUKLVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyBy
ZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KLVxpdGVtIGFkZHI6IFRoZSBh
ZGRyZXNzIHN0cnVjdHVyZSAoc3RydWN0IHNvY2thZGRyXF9pbiBmb3IgYW4gSVB2NCBhZGRyZXNz
Ci0gICAgICBvciBzdHJ1Y3Qgc29ja2FkZHJcX2luNiBmb3IgYW4gSVB2NiBhZGRyZXNzKS4KLVxp
dGVtIGFkZHJsZW46IFRoZSBzaXplIG9mIHRoZSBhZGRyZXNzIHN0cnVjdHVyZS4KLVxlbmR7aXRl
bWl6ZX0KLVx0ZXh0aXR7dXNyc2N0cFxfYmluZCgpfSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQg
LTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfbGlzdGVu
KCl9Ci1UaGUgZnVuY3Rpb24gcHJvdG90eXBlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfbGlzdGVuKCl9
IGlzIAotXGJlZ2lue3ZlcmJhdGltfQotaW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0
ICpzbywKLSAgICAgICAgICAgICAgIGludCBiYWNrbG9nKS4KLSBcZW5ke3ZlcmJhdGltfSAgICAg
IAotVGhlIGFyZ3VtZW50cyBhcmUKLVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFBvaW50ZXIg
dG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4K
LVxpdGVtIGJhY2tsb2c6IElmIGJhY2tsb2cgaXMgbm9uLXplcm8sIGVuYWJsZSBsaXN0ZW5pbmcs
IGVsc2UgZGlzYWJsZQotICAgICAgbGlzdGVuaW5nLgotXGVuZHtpdGVtaXplfQotXHRleHRpdHt1
c3JzY3RwXF9saXN0ZW4oKX0gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2Yg
YW4gZXJyb3IuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX2FjY2VwdCgpfQotVGhlIGZ1bmN0
aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2FjY2VwdCgpfSBpcyAKLVxiZWdpbnt2
ZXJiYXRpbX0gICAgICAgICAgICAgICAgCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfYWNjZXB0
KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogYWRk
ciwKLSAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGFkZHJsZW4pLgotIFxlbmR7dmVyYmF0aW19
Ci0gVGhlIGFyZ3VtZW50cyBhcmUKLVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFBvaW50ZXIg
dG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4K
LVxpdGVtIGFkZHI6IE9uIHJldHVybiwgIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIHBlZXIg
KHN0cnVjdCBzb2NrYWRkclxfaW4gZm9yIGFuIElQdjQgYWRkcmVzcyBvcgotICAgICAgc3RydWN0
IHNvY2thZGRyXF9pbjYgZm9yIGFuIElQdjYgYWRkcmVzcykuCi1caXRlbSBhZGRybGVuOiBTaXpl
IG9mIHRoZSByZXR1cm5lZCBhZGRyZXNzIHN0cnVjdHVyZS4KLVxlbmR7aXRlbWl6ZX0KLVx0ZXh0
aXR7dXNyc2N0cFxfYWNjZXB0KCl9IHJldHVybnMgdGhlIGFjY2VwdGVkIHNvY2tldCBvbiBzdWNj
ZXNzIGFuZCBOVUxMIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX2Nvbm5lY3QoKX0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgXHRleHRpdHt1c3JzY3Rw
XF9jb25uZWN0KCl9IGlzIAotXGJlZ2lue3ZlcmJhdGltfSAgICAgCi1pbnQKLXVzcnNjdHBfY29u
bmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
Km5hbWUsCi0gICAgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCi0gXGVuZHt2ZXJiYXRp
bX0KLVRoZSBhcmd1bWVudHMgYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIHNvOiBQb2ludGVy
IHRvIHRoZSBzb2NrZXQgYXMgcmV0dXJuZWQgYnkgXHRleHRpdHt1c3JzY3RwXF9zb2NrZXQoKX0u
Ci0gXGl0ZW0gbmFtZTogQWRkcmVzcyBvZiB0aGUgcGVlciB0byBjb25uZWN0IHRvIChzdHJ1Y3Qg
c29ja2FkZHJcX2luIGZvciBhbiBJUHY0IGFkZHJlc3Mgb3IKLSAgICAgIHN0cnVjdCBzb2NrYWRk
clxfaW42IGZvciBhbiBJUHY2IGFkZHJlc3MpLgotXGl0ZW0gYWRkcmxlbjogU2l6ZSBvZiB0aGUg
cGVlcidzIGFkZHJlc3MuCi1cZW5ke2l0ZW1pemV9Ci1cdGV4dGl0e3VzcnNjdHBcX2Nvbm5lY3Qo
KX0gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3NodXRkb3duKCl9IAotVGhlIGZ1bmN0aW9uIHByb3RvdHlw
ZSBvZiBcdGV4dGl0e3VzcnNjdHBcX3NodXRkb3duKCl9IGlzIAotXGJlZ2lue3ZlcmJhdGltfSAg
IAotaW50Ci11c3JzY3RwX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KS4KLVxl
bmR7dmVyYmF0aW19Ci1UaGUgYXJndW1lbnRzIGFyZQotXGJlZ2lue2l0ZW1pemV9Ci1caXRlbSBz
bzogUG9pbnRlciB0byB0aGUgc29ja2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQu
Ci1caXRlbSBob3c6IFNwZWNpZmllcyB0aGUgdHlwZSBvZiBzaHV0ZG93bi4gIFRoZSB2YWx1ZXMg
YXJlIGFzIGZvbGxvd3M6Ci1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIFNIVVRcX1JEOiAgRGlzYWJs
ZXMgZnVydGhlciByZWNlaXZlIG9wZXJhdGlvbnMuICBObyBTQ1RQIHByb3RvY29sCi0gICAgICAg
ICBhY3Rpb24gaXMgdGFrZW4uCi1caXRlbSBTSFVUXF9XUjogIERpc2FibGVzIGZ1cnRoZXIgc2Vu
ZCBvcGVyYXRpb25zLCBhbmQgaW5pdGlhdGVzIHRoZSBTQ1RQCi0gICAgICAgICBzaHV0ZG93biBz
ZXF1ZW5jZS4KLVxpdGVtIFNIVVRcX1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJl
Y2VpdmUgb3BlcmF0aW9ucywgYW5kCi0gICAgICAgICBpbml0aWF0ZXMgdGhlIFNDVFAgc2h1dGRv
d24gc2VxdWVuY2UuCi1cZW5ke2l0ZW1pemV9Ci1cZW5ke2l0ZW1pemV9Ci1cdGV4dGl0e3VzcnNj
dHBcX2xpc3RlbigpfSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBl
cnJvci4KLQotXHNlY3Rpb257U2VuZGluZyBhbmQgUmVjZWl2aW5nIERhdGF9Ci1TaW5jZSB0aGUg
cHVibGljYXRpb24gb2YgUkZDfjY0NTggdGhlcmUgaXMgb25seSBvbmUgZnVuY3Rpb24gZm9yIHNl
bmRpbmcgYW5kIG9uZSBmb3IgcmVjZWl2aW5nCi10aGF0IGlzIG5vdCBkZXByZWNhdGVkLiBUaGVy
ZWZvcmUsIG9ubHkgdGhlc2UgdHdvIGFyZSBkZXNjcmliZWQgaGVyZS4KLQotXHN1YnNlY3Rpb257
dXNyc2N0cFxfc2VuZHYoKX0KLVRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMKLVxiZWdpbnt2ZXJi
YXRpbX0KLXNzaXplX3QKLXVzcnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAg
ICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAg
ICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsCi0gICAgICAgICAgICAgIGludCBhZGRy
Y250LAotICAgICAgICAgICAgICB2b2lkICppbmZvLAotICAgICAgICAgICAgICBzb2NrbGVuX3Qg
aW5mb2xlbiwKLSAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90eXBlLAotICAgICAgICAg
ICAgICBpbnQgZmxhZ3MpLgotXGVuZHt2ZXJiYXRpbX0KLVRoZSBhcmd1bWVudHMgYXJlCi1cYmVn
aW57aXRlbWl6ZX0KLVxpdGVtIHNvOiBUaGUgc29ja2V0IHRvIHNlbmQgZGF0YSBvbi4KLVxpdGVt
IGRhdGE6IEFzIGl0IGlzIG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRhdGEgaW4gYSBidWZmZXIg
YW5kIG5vdCBhIFx0ZXh0dHR7c3RydWN0IGlvdmVjfSBkYXRhIHN0cnVjdHVyZSwgd2UKLWNob3Nl
IHRvIHBhc3MgdGhlIGRhdGEgYXMgYSB2b2lkIHBvaW50ZXIuCi1caXRlbSBsZW46IExlbmd0aCBv
ZiB0aGUgZGF0YS4KLVxpdGVtIGFkZHJzOiBJbiB0aGlzIHZlcnNpb24gb2YgdXNyc2N0cCBhdCBt
b3N0IG9uZSBkZXN0aW5hdGlvbiBhZGRyZXNzIGlzIHN1cHBvcnRlZC4gSW4gdGhlIGNhc2Ugb2Yg
YSBjb25uZWN0ZWQKLXNvY2tldCwgdGhlIHBhcmFtZXRlciBcdGV4dHR0e2FkZHJzfSBjYW4gYmUg
c2V0IHRvIE5VTEwuCi1caXRlbSBhZGRyY250OiBOdW1iZXIgb2YgYWRkcmVzc2VzLiBBcyBhdCBt
b3N0IG9uZSBhZGRyZXNzIGlzIHN1cHBvcnRlZCwgYWRkcmNudCBpcyAwIGlmIGFkZHJzIGlzIE5V
TEwgYW5kIAotMSBvdGhlcndpc2UuCi1caXRlbSBpbmZvOiBBZGRpdGlvbmFsIGluZm9ybWF0aW9u
IGZvciBhIG1lc3NhZ2UgaXMgc3RvcmVkIGluIFx0ZXh0dHR7dm9pZCAqaW5mb30uIFRoZSBkYXRh
IHR5cGVzIFx0ZXh0dHR7c3RydWN0fnNjdHBcX3NuZGluZm99LAotXHRleHR0dHtzdHJ1Y3R+c2N0
cFxfcHJpbmZvfSwgYW5kIFx0ZXh0dHR7c3RydWN0fSBcbGluZWJyZWFrIFx0ZXh0dHR7c2N0cFxf
c2VuZHZcX3NwYX0gYXJlIHN1cHBvcnRlZCBhcyBkZWZpbmVkIGluIAotUkZDfjY0NTguIFN1cHBv
cnQgZm9yIFx0ZXh0dHR7c3RydWN0c2N0cFxfYXV0aGluZm99IGlzIG5vdCBpbXBsZW1lbnRlZCB5
ZXQsIHRoZXJlZm9yZSwgZXJybm8gaXMgc2V0IEVJTlZBTAotYW5kIC0xIHdpbGwgYmUgcmV0dXJu
ZWQsIGlmIGl0IGlzIHVzZWQuCi1caXRlbSBpbmZvbGVuOiBMZW5ndGggb2YgaW5mbyBpbiBieXRl
cy4KLVxpdGVtIGluZm90eXBlOiBJZGVudGlmaWVzIHRoZSB0eXBlIG9mIHRoZSBpbmZvcm1hdGlv
biBwcm92aWRlZCBpbiBpbmZvLiBQb3NzaWJsZSB2YWx1ZXMgYXJlCi1TQ1RQXF9TRU5EVlxfTk9J
TkZPLCBTQ1RQXF9TRU5EVlxfU05ESU5GTywgXGxpbmVicmVhayBTQ1RQXF9TRU5EVlxfUFJJTkZP
LCBTQ1RQXF9TRU5EVlxfU1BBLiAKLUZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSBy
ZWZlciB0byBSRkN+NjQ1OC4KLVxpdGVtIGZsYWdzOiBGbGFncyBhcyBkZXNjcmliZWQgaW4gUkZD
fjY0NTguCi1cZW5ke2l0ZW1pemV9Ci0KLVx0ZXh0aXR7dXNyc2N0cFxfc2VuZHYoKX0gcmV0dXJu
cyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsIG9yIC0xIGlmIGFuIGVycm9yCi1vY2N1cnJlZC4g
IFRoZSB2YXJpYWJsZSBlcnJubyBpcyB0aGVuIHNldCBhcHByb3ByaWF0ZWx5LgotCi1cc3Vic2Vj
dGlvbnt1c3JzY3RwXF9yZWN2digpfQotVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcwotXGJlZ2lu
e3ZlcmJhdGltfQotc3NpemVfdAotdXNyc2N0cF9yZWN2dihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAg
ICAgICAgICAgICB2b2lkICpkYnVmLAotICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLAotICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZy
b21sZW4sCi0gICAgICAgICAgICAgdm9pZCAqaW5mbywKLSAgICAgICAgICAgICBzb2NrbGVuX3Qg
KmluZm9sZW4sCi0gICAgICAgICAgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwKLSAgICAgICAg
ICAgICBpbnQgKm1zZ19mbGFncykuCi1cZW5ke3ZlcmJhdGltfQotVGhlIGFyZ3VtZW50cyBhcmUK
LVxiZWdpbntpdGVtaXplfQotXGl0ZW0gc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9u
LgotXGl0ZW0gZGJ1ZjogQW5hbG9nIHRvIFx0ZXh0aXR7dXNyc2N0cFxfc2VuZHYoKX0gdGhlIGRh
dGEgaXMgcmV0dXJuZWQgaW4gYSBidWZmZXIuCi1caXRlbSBsZW46IExlbmd0aCBvZiB0aGUgYnVm
ZmVyIGluIGJ5dGVzLgotXGl0ZW0gZnJvbTogQSBwb2ludGVyIHRvIGFuIGFkZHJlc3MgdG8gYmUg
ZmlsbGVkIHdpdGggdGhlIHNlbmRlciBvZiB0aGUKLSAgICAgIHJlY2VpdmVkIG1lc3NhZ2UncyBh
ZGRyZXNzLgotXGl0ZW0gZnJvbWxlbjogQW4gaW4vb3V0IHBhcmFtZXRlciBkZXNjcmliaW5nIHRo
ZSBmcm9tIGxlbmd0aC4KLVxpdGVtIGluZm86IEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIGhv
bGQgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIHJlY2VpdmVkCi0gICAgICBtZXNzYWdlLiAgVGhlIHN0
cnVjdHVyZSB0eXBlIG9mIGluZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUKLSAgICAgIGluZm90eXBl
IHBhcmFtZXRlci4gVGhlIGF0dHJpYnV0ZXMgcmV0dXJuZWQgaW4gXHRleHR0dHtpbmZvfSBoYXZl
IHRvIGJlIAotICAgICAgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgc3BlY2lmaWVkIGluIFJG
Q342NDU4LgotXGl0ZW0gaW5mb2xlbjogIEFuIGluL291dCBwYXJhbWV0ZXIgZGVzY3JpYmluZyB0
aGUgc2l6ZSBvZiB0aGUgaW5mbyBidWZmZXIuCi1caXRlbSBpbmZvdHlwZTogIE9uIHJldHVybiwg
KmluZm90eXBlIGlzIHNldCB0byB0aGUgdHlwZSBvZiB0aGUgaW5mbwotICAgICAgYnVmZmVyLiAg
VGhlIGN1cnJlbnQgZGVmaW5lZCB2YWx1ZXMgYXJlIFNDVFBcX1JFQ1ZWXF9OT0lORk8sIAotICAg
ICAgU0NUUFxfUkVDVlZcX1JDVklORk8sIFNDVFBcX1JFQ1ZWXF9OWFRJTkZPLCBhbmQKLSAgICAg
IFNDVFBcX1JFQ1ZWXF9STi4gQSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBpcyBnaXZlbiBpbiBSRkN+
NjQ1OC4KLVxpdGVtIGZsYWdzOiBBIHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQg
d2l0aCBhbnkgbWVzc2FnZSBmbGFncwotICAgICAgKGUuZy4sIE1TR1xfTk9USUZJQ0FUSU9OKS4g
IE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzIGFuIGluL291dAotICAgICAgcGFyYW1ldGVyLiAgT3B0
aW9ucyBmb3IgdGhlIHJlY2VpdmUgbWF5IGFsc28gYmUgcGFzc2VkIGludG8gdGhlCi0gICAgICB2
YWx1ZSAoZS5nLiwgTVNHXF9FT1IpLiAgUmV0dXJuaW5nIGZyb20gdGhlIGNhbGwsIHRoZSBmbGFn
cycgdmFsdWUKLSAgICAgIHdpbGwgZGlmZmVyIGZyb20gaXRzIG9yaWdpbmFsIHZhbHVlLgotXGVu
ZHtpdGVtaXplfQotCi1cdGV4dGl0e3VzcnNjdHBcX3JlY3Z2KCl9IHJldHVybnMgdGhlIG51bWJl
ciBvZiBieXRlcyBzZW50LCBvciAtMSBpZiBhbiBlcnJvcgotb2NjdXJyZWQuICBUaGUgdmFyaWFi
bGUgZXJybm8gaXMgdGhlbiBzZXQgYXBwcm9wcmlhdGVseS4KLQotICAKLQotXHNlY3Rpb257U29j
a2V0IE9wdGlvbnN9Ci1Tb2NrZXQgb3B0aW9ucyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1
bHQgYmVoYXZpb3Igb2Ygc29ja2V0IGNhbGxzLgotVGhlaXIgYmVoYXZpb3IgaXMgc3BlY2lmaWVk
IGluIFJGQ342NDU4LiBUaGUgZnVuY3Rpb25zIHRvIGdldCBvciBzZXQgdGhlbSBhcmUKLQotXGJl
Z2lue3ZlcmJhdGltfQotaW50Ci11c3JzY3RwX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28s
Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBp
bnQgb3B0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wdHZhbCwKLSAgICAgICAg
ICAgICAgICAgICAgIHNvY2tsZW5fdCAqb3B0bGVuKQotXGVuZHt2ZXJiYXRpbX0KLWFuZAotXGJl
Z2lue3ZlcmJhdGltfQotaW50Ci11c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28s
Ci0gICAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAgICBp
bnQgb3B0bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdHZhbCwKLSAg
ICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCBvcHRsZW4pLgotXGVuZHt2ZXJiYXRpbX0KLQot
YW5kIHRoZSBhcmd1bWVudHMgYXJlCi1cYmVnaW57aXRlbWl6ZX0KLVxpdGVtIHNvOiAgVGhlIHNv
Y2tldCBvZiB0eXBlIHN0cnVjdCBzb2NrZXQuCi1caXRlbSBsZXZlbDogIFNldCB0byBJUFBST1RP
XF9TQ1RQIGZvciBhbGwgU0NUUCBvcHRpb25zLgotXGl0ZW0gb3B0bmFtZTogIFRoZSBvcHRpb24g
bmFtZSBhcyBzcGVjaWZpZWQgaW4gVGFibGV+XHJlZntvcHRpb25zfS4KLVxpdGVtIG9wdHZhbDog
VGhlIGJ1ZmZlciB0byBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbiBhcyBzcGVjaWZpZWQg
aW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgVGFibGV+XHJlZntvcHRpb25zfS4KLVxpdGVtIG9wdGxl
bjogIFRoZSBzaXplIG9mIHRoZSBidWZmZXIgKG9yIHRoZSBsZW5ndGggb2YgdGhlIG9wdGlvbgot
ICAgICAgcmV0dXJuZWQgaW4gY2FzZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2dldHNvY2tvcHR9KS4K
LVxlbmR7aXRlbWl6ZX0KLQotVGhlc2UgZnVuY3Rpb25zIHJldHVybiAwIG9uIHN1Y2Nlc3MgYW5k
IC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCi0KLVxiZWdpbntsb25ndGFibGV9e3xsfGx8Y3x9IAot
XGhsaW5lCi17XGJmc2VyaWVzIE9wdGlvbn0me1xiZnNlcmllcyBEYXRhdHlwZX0gJntcYmZzZXJp
ZXMgci93fVx0YWJ1bGFybmV3bGluZSAKLVxlbmRoZWFkCi1caGxpbmUKLVNDVFBcX1JUT0lORk8m
c3RydWN0IHNjdHBcX3J0b2luZm8mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfQVNT
T0NJTkZPJnN0cnVjdCBzY3RwXF9hc3NvY3BhcmFtcyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Ci1TQ1RQXF9JTklUTVNHJnN0cnVjdCBzY3RwXF9pbml0bXNnJnIvd1x0YWJ1bGFybmV3bGluZSBc
aGxpbmUKLVNDVFBcX05PREVMQVkmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBc
X0FVVE9DTE9TRSZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUFJJTUFSWVxf
QUREUiZzdHJ1Y3Qgc2N0cFxfc2V0cHJpbSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQ
XF9BREFQVEFUSU9OXF9MQVlFUiZzdHJ1Y3Qgc2N0cFxfc2V0YWRhcHRhdGlvbiZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9ESVNBQkxFXF9GUkFHTUVOVFMmaW50JnIvd1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLVNDVFBcX1BFRVJcX0FERFJcX1BBUkFNUyZzdHJ1Y3Qgc2N0cFxfcGFk
ZHJwYXJhbXMmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfSVxfV0FOVFxfTUFQUEVE
XF9WNFxfQUREUiZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfTUFYU0VHJnN0
cnVjdCBzY3RwXF9hc3NvY1xfdmFsdWUmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxf
REVMQVlFRFxfU0FDSyZzdHJ1Y3Qgc2N0cFxfc2Fja1xfaW5mbyZyL3dcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCi1TQ1RQXF9GUkFHTUVOVFxfSU5URVJMRUFWRSZpbnQmci93XHRhYnVsYXJuZXdsaW5l
IFxobGluZQotU0NUUFxfUEFSVElBTFxfREVMSVZFUllcX1BPSU5UJmludCZyL3dcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCi1TQ1RQXF9ITUFDXF9JREVOVCZzdHJ1Y3Qgc2N0cFxfaG1hY2FsZ28mci93
XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfQVVUSFxfQUNUSVZFXF9LRVkmc3RydWN0IHNj
dHBcX2F1dGhrZXlpZCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9BVVRPXF9BU0NP
TkYmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX01BWFxfQlVSU1Qmc3RydWN0
IHNjdHBcX2Fzc29jXF92YWx1ZSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9DT05U
RVhUJnN0cnVjdCBzY3RwXF9hc3NvY1xfdmFsdWUmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQot
U0NUUFxfRVhQTElDSVRcX0VPUiZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxf
UkVVU0VcX1BPUlQmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0VWRU5UJnN0
cnVjdCBzY3RwXF9ldmVudCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1TQ1RQXF9SRUNWUkNW
SU5GTyZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfUkVDVk5YVElORk8maW50
JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0RFRkFVTFRcX1NORElORk8mc3RydWN0
IHNjdHBcX3NuZGluZm8mci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfREVGQVVMVFxf
UFJJTkZPJnN0cnVjdCBzY3RwXF9kZWZhdWx0XF9wcmluZm8mci93XHRhYnVsYXJuZXdsaW5lIFxo
bGluZQotU0NUUFxfUkVNT1RFXF9VRFBcX0VOQ0FQU1xfUE9SVCZpbnQmci93XHRhYnVsYXJuZXds
aW5lIFxobGluZQotU0NUUFxfRU5BQkxFXF9TVFJFQU1cX1JFU0VUJnN0cnVjdCBzY3RwXF9hc3Nv
Y1xfdmFsdWUmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQotU0NUUFxfU1RBVFVTJnN0cnVjdCBz
Y3RwXF9zdGF0dXMmclx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfUEVFUlxfQURE
UlxfSU5GTyZzdHJ1Y3Qgc2N0cFxfcGFkZHJpbmZvJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1T
Q1RQXF9QRUVSXF9BVVRIXF9DSFVOS1Mmc3RydWN0IHNjdHBcX2F1dGhjaHVua3Mmclx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLVNDVFBcX0xPQ0FMXF9BVVRIXF9DSFVOS1Mmc3RydWN0IHNjdHBcX2F1
dGhjaHVua3Mmclx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfQVNTT0NcX05VTUJF
UiZ1aW50MzJcX3Qmclx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0dFVFxfQVNTT0NcX0lE
XF9MSVNUJnN0cnVjdCBzY3RwXF9hc3NvY1xfaWRzJnJcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1T
Q1RQXF9SRVNFVFxfU1RSRUFNUyZzdHJ1Y3Qgc2N0cFxfcmVzZXRcX3N0cmVhbXMmd1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLVNDVFBcX1JFU0VUXF9BU1NPQyZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3Qm
d1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLVNDVFBcX0FERFxfU1RSRUFNUyZzdHJ1Y3Qgc2N0cFxf
YWRkXF9zdHJlYW1zJndcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi1cY2FwdGlvbntTb2NrZXQgT3B0
aW9ucyBzdXBwb3J0ZWQgYnkgdXNyc2N0cH0KLVxsYWJlbHtvcHRpb25zfQotXGVuZHtsb25ndGFi
bGV9Ci1BbiBvdmVydmlldyBvZiB0aGUgc3VwcG9ydGVkIG9wdGlvbnMgaXMgZ2l2ZW4gaW4gVGFi
bGV+XHJlZntvcHRpb25zfS4gVGhlaXIgdXNlIGlzIGRlc2NyaWJlZCBpbiBSRkN+NjQ1OH5cY2l0
ZXtzb2NrZXRBUEl9LCBSRkN+NjUyNX5cY2l0ZXtzdHJlYW1SZXNldH0sIGFuZH5cY2l0ZXt1ZHBl
bmNhcHN9LgotCi1cc2VjdGlvbntTeXNjdGwgdmFyaWFibGVzfQotCi1JbiBrZXJuZWwgaW1wbGVt
ZW50YXRpb25zIGxpa2UgZm9yIGluc3RhbmNlIEZyZWVCU0QsIGl0IGlzIHBvc3NpYmxlIHRvIGNo
YW5nZSBwYXJhbWV0ZXJzCi1pbiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gVGhlc2UgcGFyYW1ldGVy
cyBhcmUgY2FsbGVkIHN5c2N0bCB2YXJpYWJsZXMuCi0KLUluIHVzcnNjdHAgYXBwbGljYXRpb25z
IGNhbiBzZXQgb3IgcmV0cmlldmUgdGhlc2UgdmFyaWFibGVzIHdpdGggdGhlIGZ1bmN0aW9ucwot
XGJlZ2lue3ZlcmJhdGltfQotdm9pZAotdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyAodWludDMyX3Qg
dmFsdWUpCi1cZW5ke3ZlcmJhdGltfQotYW5kCi1cYmVnaW57dmVyYmF0aW19Ci11aW50MzJfdAot
dXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkKLVxlbmR7dmVyYmF0aW19Ci1yZXNwZWN0aXZl
bHksIHdoZXJlIFwjXCMgc3RhbmRzIGZvciB0aGUgbmFtZSBvZiB0aGUgdmFyaWFibGUuCi0KLUlu
IHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocyBhIHNob3J0IGRlc2NyaXB0aW9uIG9mIHRoZSBwYXJh
bWV0ZXJzIHdpbGwgYmUgZ2l2ZW4uCi0KLVxzdWJzZWN0aW9ue01hbmlwdWxhdGUgTWVtb3J5fQot
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3NlbmRzcGFjZSgpfQot
VGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFibGUgc2VuZCBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJv
bSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAyNjIsMTQ0IGJ5dGVzCi10byBhIHZhbHVlIGJldHdlZW4g
MCBhbmQgJDJeezMyfS0xJCBieXRlcy4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX3JlY3ZzcGFjZSgpfQotVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFibGUgcmVj
ZWl2ZSBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAyNjIs
MTQ0IGJ5dGVzCi10byBhIHZhbHVlIGJldHdlZW4gMCBhbmQgJDJeezMyfS0xJCBieXRlcy4KLQot
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2hhc2h0YmxzaXplKCl9
Ci1UaGUgVENCIChUaHJlYWQgQ29udHJvbCBCbG9jaykgaGFzaCB0YWJsZSBzaXplcywgaS5lLiB0
aGUgc2l6ZSBvZiBvbmUgVENCIGluIHRoZSBoYXNoIHRhYmxlLCBjYW4gYmUgdHVuZWQgYmV0d2Vl
biAKLTEgYW5kICQyXnszMn0tMSQgYnl0ZXMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEsMDI0IGJ5
dGVzLiBBIFRDQiBjb250YWlucyBmb3IgaW5zdGFuY2UgcG9pbnRlcnMgdG8gdGhlIHNvY2tldCwg
dGhlCi1lbmRwb2ludCwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGFzc29jaWF0aW9uIGFuZCBzb21l
IHN0YXRpc3RpYyBkYXRhLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxf
c2N0cFxfcGNidGJsc2l6ZSgpfQotVGhlIFBDQiAoUHJvdG9jb2wgQ29udHJvbCBCbG9jaykgaGFz
aCB0YWJsZSBzaXplcywgaS5lLiB0aGUgc2l6ZSBvZiBvbmUgUENCIGluIHRoZSBoYXNoIHRhYmxl
LCBjYW4gYmUgdHVuZWQgYmV0d2VlbiAKLTEgYW5kICQyXnszMn0tMSQgYnl0ZXMuIFRoZSBkZWZh
dWx0IHZhbHVlIGlzIDI1NiBieXRlcy4gVGhlIFBDQiBjb250YWlucyBhbGwgdmFyaWFibGVzIHRo
YXQgY2hhcmFjdGVyaXplIGFuIGVuZHBvaW50LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfc3lzdGVtXF9mcmVlXF9yZXNjXF9saW1pdCgpfQotVGhpcyBwYXJh
bWV0ZXJzIHR1bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIHRo
ZSBzeXN0ZW0uIEl0IGNhbiBiZSBzZXQgYmV0d2VlbiAKLTAgYW5kICQyXnszMn0tMSQuIFRoZSBk
ZWZhdWx0IHZhbHVlIGlzIDEwMDAuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9hc29jXF9mcmVlXF9yZXNjXF9saW1pdCgpfQotVGhpcyBwYXJhbWV0ZXJzIHR1
bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0
aW9uLiBJdCBjYW4gYmUgc2V0IGJldHdlZW4gCi0wIGFuZCAkMl57MzJ9LTEkLiBUaGUgZGVmYXVs
dCB2YWx1ZSBpcyAxMC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX21idWZcX3RocmVzaG9sZFxfY291bnQoKX0KLURhdGEgaXMgc3RvcmVkIGluIG1idWZzLiBT
ZXZlcmFsIG1idWZzIGNhbiBiZSBjaGFpbmVkIHRvZ2V0aGVyLiBUaGUgbWF4aW11bSBudW1iZXIg
b2Ygc21hbGwgbWJ1ZnMgaW4gYSBjaGFpbgotY2FuIGJlIHNldCB3aXRoIHRoaXMgcGFyYW1ldGVy
LCBiZWZvcmUgYW4gbWJ1ZiBjbHVzZXQgaXMgdXNlZC4gVGhlIGRlZmF1bHQgaXMgNS4KLQotXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2FkZFxfbW9yZVxfdGhyZXNo
b2xkKCl9Ci1UQkQKLVRoaXMgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgdGhlIHRocmVzaG9sZCBiZWxv
dyB3aGljaCBtb3JlIHNwYWNlIHNob3VsZCBiZSBhZGRlZCB0byBhIHNvY2tldCBzZW5kIGJ1ZmZl
ci4KLVRoZSBkZWZhdWx0IHZhbHVlIGlzIDE0NTIgYnl0ZXMuCi0KLQotXHN1YnNlY3Rpb257Q29u
ZmlndXJlIFJUT30KLVRoZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBpLmUuIHRoZSB0
aW1lIHRoYXQgY29udHJvbHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2VzLCBoYXMKLXNl
dmVyYWwgcGFyYW1ldGVycywgdGhhdCBjYW4gYmUgY2hhbmdlZCwgZm9yIGV4YW1wbGUgdG8gc2hv
cnRlbiB0aGUgdGltZSwgYmVmb3JlIGEgbWVzc2FnZSBpcwotcmV0cmFuc21pdHRlZC4gVGhlIHJh
bmdlIG9mIHRoZXNlIHBhcmFtZXRlcnMgaXMgYmV0d2VlbiAwIGFuZCAkMl57MzJ9LTEkfm1zLiAK
LQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0b1xfbWF4XF9k
ZWZhdWx0KCl9Ci1UaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Np
b24gdGltZW91dCBpbiBtcyBpcyA2MCwwMDAgKDYwfnNlY3MpLiAKLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0b1xfbWluXF9kZWZhdWx0KCl9Ci1UaGUgZGVm
YXVsdCB2YWx1ZSBmb3IgdGhlIG1pbmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyBp
cyAxLDAwMCAoMX5zZWMpLiAKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX3J0b1xfaW5pdGlhbFxfZGVmYXVsdCgpfQotVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRo
ZSBpbml0aWFsIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgaW4gbXMgaXMgMywwMDAgKDN+c2VjKS4g
VGhpcyB2YWx1ZSBpcyBvbmx5Ci1uZWVkZWQgYmVmb3JlIHRoZSBmaXJzdCBjYWxjdWxhdGlvbiBv
ZiBhIHJvdW5kIHRyaXAgdGltZSB0b29rIHBsYWNlLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zeXNjdGxcX3NldFxfc2N0cFxfaW5pdFxfcnRvXF9tYXhcX2RlZmF1bHQoKX0KLVRoZSBkZWZh
dWx0IHZhbHVlIGZvciB0aGUgbWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGZvciBhbiBJ
TklUIGNodW5rIGluIG1zIGlzIDYwLDAwMCAoNjB+c2VjcykuIAotCi0KLVxzdWJzZWN0aW9ue1Nl
dCBUaW1lcnN9Ci1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdmFs
aWRcX2Nvb2tpZVxfbGlmZVxfZGVmYXVsdCgpfQotQSBjb29raWUgaGFzIGEgc3BlY2lmaWVkIGxp
ZmUgdGltZS4gSWYgaXQgZXhwaXJlcyB0aGUgY29va2llIGlzIG5vdCB2YWxpZCBhbnkgbW9yZSBh
bmQgYW4gQUJPUlQgaXMgc2VudC4KLVRoZSBkZWZhdWx0IHZhbHVlIGluIG1zIGlzIDYwLDAwMCAo
NjB+c2VjcykuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9o
ZWFydGJlYXRcX2ludGVydmFsXF9kZWZhdWx0KCl9Ci1TZXQgdGhlIGRlZmF1bHQgdGltZSBiZXR3
ZWVuIHR3byBoZWFydGJlYXRzLiBUaGUgZGVmYXVsdCBpcyAzMCwwMDB+bXMuCi0KLVxzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zaHV0ZG93blxfZ3VhcmRcX3RpbWVc
X2RlZmF1bHQoKX0KLUlmIGEgU0hVVERPV04gaXMgbm90IGFuc3dlcmVkIHdpdGggYSBTSFVURE9X
Ti1BQ0sgd2hpbGUgdGhlIHNodXRkb3duIGd1YXJkIHRpbWVyIGlzIHN0aWxsCi1ydW5uaW5nLCB0
aGUgYXNzb2NpYXRpb24gd2lsbCBiZSBhYm9ydGVkIGFmdGVyIHRoZSBkZWZhdWx0IG9mIDE4MH5z
ZWNzLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcG10dVxf
cmFpc2VcX3RpbWVcX2RlZmF1bHQoKX0KLVRCRAotVG8gc2V0IHRoZSBzaXplIG9mIHRoZSBwYWNr
ZXRzIHRvIHRoZSBoaWdoZXN0IHZhbHVlIHBvc3NpYmxlLCB0aGUgbWF4aW11bSB0cmFuc2ZlciB1
bml0IChNVFUpCi1vZiB0aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25vd24uIFRoZSBkZWZh
dWx0IHRpbWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3ZlcnkKLWlzIDYwMH5zZWNz
LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc2VjcmV0XF9s
aWZldGltZVxfZGVmYXVsdCgpfQotVEJECi1UaGUgZGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgb2Yg
YSBzZXJ2ZXIgaXMgMzYwMH5zZWNzLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfdnRhZ1xfdGltZVxfd2FpdCgpfQotVEJECi1WdGFnIHRpbWUgd2FpdCB0aW1l
LCAwIGRpc2FibGVzIGl0LiBEZWZhdWx0OiA2MH5zZWNzCi0KLQotXHN1YnNlY3Rpb257U2V0IEZh
aWx1cmUgTGltaXRzfQotVHJhbnNtaXNzaW9ucyBhbmQgcmV0cmFuc21pc3Npb25zIG9mIG1lc3Nh
Z2VzIG1pZ2h0IGZhaWwuIFRvIHByb3RlY3QgdGhlIHN5c3RlbSBhZ2FpbnN0IHRvbyBtYW55Ci1y
ZXRyYW5zbWlzc2lvbnMsIGxpbWl0cyBoYXZlIHRvIGJlIGRlZmluZWQuCi0KLVxzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9pbml0XF9ydHhcX21heFxfZGVmYXVsdCgp
fQotVGhlIGRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIG9mIGFuIElO
SVQgY2h1bmtzIGlzIDgsIGJlZm9yZSBhbiBBQk9SVCBpcyBzZW50LgotCi1cc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXNzb2NcX3J0eFxfbWF4XF9kZWZhdWx0KCl9
Ci1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFu
c21pc3Npb25zIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4KLVRoZSBkZWZhdWx0
IHZhdWxlIGlzIDEwLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0
cFxfcGF0aFxfcnR4XF9tYXhcX2RlZmF1bHQoKX0KLVRoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIHBhdGggZmFpbHVyZXMgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBpcyBh
Ym9ydGVkLgotVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4gTm90aWNlIHRoYXQgdGhlIG51bWJlciBv
ZiBwYXRocyBtdWx0aXBsaWVkIGJ5IHRoaXMgdmFsdWUgc2hvdWxkIGJlIAotZXF1YWwgdG8gc2N0
cFxfYXNzb2NcX3J0eFxfbWF4XF9kZWZhdWx0LiBUaGF0IG1lYW5zIHRoYXQgdGhlIGRlZmF1bHQg
Y29uZmlndXJhdGlvbiBpcyBnb29kIGZvciB0d28gCi1wYXRocy4KLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21heFxfcmV0cmFuXF9jaHVuaygpfQotVGhlIHBh
cmFtZXRlciBjb25maWd1cmVzIGhvdyBtYW55IHRpbWVzIGFuIHVubHVja3kgY2h1bmsgY2FuIGJl
IHJldHJhbnNtaXR0ZWQgYmVmb3JlIHRoZSAKLWFzc29jaWF0aW9uIGFib3J0cy4gVGhlIGRlZmF1
bHQgaXMgc2V0IHRvIDMwLgotCQkJCQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9z
ZXRcX3NjdHBcX3BhdGhcX3BmXF90aHJlc2hvbGQoKX0KLVRCRAotRGVmYXVsdCBwb3RlbnRpYWxs
eSBmYWlsZWQgdGhyZXNob2xkLiBEZWZhdWx0OiA2NTUzNQkJCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hYm9ydFxfaWZcX29uZVxfMlxfb25lXF9oaXRzXF9s
aW1pdCgpfQotVEJECi1XaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBhYm9ydC4gRGVmYXVsdDog
MAotCi0JCQotXHN1YnNlY3Rpb257Q29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLc30KLVxzdWJz
dWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zYWNrXF9mcmVxXF9kZWZhdWx0
KCl9Ci1UaGUgU0FDSyBmcmVxdWVuY3kgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhh
dCBhcmUgYXdhaXRlZCwgYmVmb3JlIGEgU0FDSyBpcyBzZW50LiAKLVRoZSBkZWZhdWx0IHZhbHVl
IGlzIDIuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWxh
eWVkXF9zYWNrXF90aW1lXF9kZWZhdWx0KCl9Ci1BcyBhIFNBQ0sgKFNlbGVjdGl2ZSBBY2tub3ds
ZWdtZW50KSBpcyBzZW50IGFmdGVyIGV2ZXJ5IG90aGVyIHBhY2tldCwgYSB0aW1lciBpcyBzZXQg
dG8gc2VuZCBhCi1TQUNLIGluIGNhc2UgYW5vdGhlciBwYWNrZXQgZG9lcyBub3QgYXJyaXZlIGlu
IGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0aW1lciBpcwotMjAwfm1zLgot
Ci1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc3RyaWN0XF9zYWNr
cygpfQotVEJECi1UaGlzIGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUg
Y29oZXJlbmNlIG9mIFNBQ0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMKLTEgKG9u
KS4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX25yXF9zYWNr
XF9vblxfb2ZmKCl9Ci1JZiBhIHNsb3cgaG9zdHMgcmVjZWl2ZXMgZGF0YSBvbiBhIGxvc3N5IGxp
bmsgaXQgaXMgcG9zc2libGUgdGhhdCBpdHMgcmVjZWl2ZXIgd2luZG93IGlzIGZ1bGwgYW5kIG5l
dyAKLWRhdGEgY2FuIG9ubHkgYmUgYWNjZXB0ZWQgaWYgb25lIGNodW5rIHdpdGggYSBoaWdoZXIg
VFNOIChUcmFuc21pc3Npb24gU2VxdWVuY2UgTnVtYmVyKSB0aGF0IGhhcyAKLXByZXZpb3VzbHkg
YmVlbiBhY2tub3dsZWRnZWQgaXMgZHJvcHBlZC4gQXMgYSBjb25zZXF1ZW5jZSB0aGUgc2VuZGVy
IGhhcyB0byBzdG9yZSBkYXRhLCBldmVuIGlmCi10aGV5IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQg
aW4gY2FzZSB0aGV5IGhhdmUgdG8gYmUgcmV0cmFuc21pdHRlZC4gSWYgdGhpcyBiZWhhdmlvciBp
cyBub3QgbmVjZXNzYXJ5LAotbm9uLXJlbmVnYWJsZSBTQUNLcyBjYW4gYmUgdHVybmVkIG9uLiAK
LUJ5IGRlZmF1bHQgdGhlIHVzZSBvZiBub24tcmVuZWdhYmxlIFNBQ0tzIGlzIHR1cm5lZCBvZmYu
Ci0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9lbmFibGVcX3Nh
Y2tcX2ltbWVkaWF0ZWx5KCl9Ci1JbiBzb21lIGNhc2VzIGl0IGlzIG5vdCBkZXNpcmFibGUgdG8g
d2FpdCBmb3IgdGhlIFNBQ0sgdGltZXIgdG8gZXhwaXJlIGJlZm9yZSBhIFNBQ0sgaXMgc2VudC4g
SW4gdGhlc2UKLWNhc2VzIGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZflxjaXRle3NhY2st
aW1tfSBjYW4gYmUgc2V0IHRvIHByb3Zva2UgdGhlIGluc3RhbnQgc2VuZGluZyBvZiBhIFNBQ0su
IAotVGhlIGRlZmF1bHQgaXMgdG8gdHVybiBpdCBvZmYuIAotCi1cc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfTDJcX2FiY1xfdmFyaWFibGUoKX0KLVRCRAotU0NUUCBB
QkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChMKS4gRGVmYXVsdDogMQotCi1cc3Vic2VjdGlvbntD
aGFuZ2UgTWF4IEJ1cnN0fQotTWF4IGJ1cnN0IGRlZmluZXMgdGhlIG1heGltdW0gbnVtYmVyIG9m
IHBhY2tldHMgdGhhdCBtYXkgYmUgc2VudCBpbiBvbmUgZmxpZ2h0LgotCi1cc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWF4XF9idXJzdFxfZGVmYXVsdCgpfQotVGhl
IGRlZmF1bHQgdmFsdWUgZm9yIG1heCBidXJzdCBpcyAwLCB3aGljaCBtZWFucyB0aGF0IHRoZSBu
dW1iZXIgb2YgcGFja2V0cyBzZW50IGFzIGEgZmxpZ2h0Ci1pcyBub3QgbGltaXRlZCBieSB0aGlz
IHBhcmFtZXRlciwgYnV0IG1heSBiZSBieSBhbm90aGVyIG9uZSwgc2VlIHRoZSBuZXh0IHBhcmFn
cmFwaC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3VzZVxf
Y3duZFxfYmFzZWRcX21heGJ1cnN0KCl9Ci1UaGUgdXNlIG9mIG1heCBidXJzdCBpcyBiYXNlZCBv
biB0aGUgc2l6ZSBvZiB0aGUgY29uZ2VzdGlvbiB3aW5kb3cgKGN3bmQpLiAKLVRoaXMgcGFyYW1l
dGVyIGlzIHNldCBieSBkZWZhdWx0LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfaGJcX21heGJ1cnN0KCl9Ci1IZWFydGJlYXRzIGFyZSBtb3N0bHkgdXNlZCB0
byB2ZXJpZnkgYSBwYXRoLiBUaGVpciBudW1iZXIgY2FuIGJlIGxpbWl0ZWQuIFRoZSBkZWZhdWx0
IGlzIDQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9mclxf
bWF4XF9idXJzdFxfZGVmYXVsdCgpfQotSW4gdGhlIHN0YXRlIG9mIGZhc3QgcmV0cmFuc21pc3Np
b24gdGhlIG51bWJlciBvZiBwYWNrZXQgYnVyc3RzIGNhbiBiZSBsaW1pdGVkLiBUaGUgZGVmYXVs
dAotdmFsdWUgaXMgNC4KLQotCi1cc3Vic2VjdGlvbntIYW5kbGUgQ2h1bmtzfQotXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3BlZXJcX2NodW5rXF9vaCgpfQotSW4g
b3JkZXIgdG8ga2VlcCB0cmFjayBvZiB0aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2lu
ZG93LCB0aGUgc2VuZGVyIGNhbGN1bGF0ZXMgdGhlIHdpbmRvdyBieQotc3VidHJhY3RpbmcgdGhl
IGFtb3VudCBvZiBkYXRhIHNlbnQuIFlldCwgc29tZSBPU3MgcmVkdWNlIHRoZSByZWNlaXZlciB3
aW5kb3cgYnkgdGhlIHJlYWwgc3BhY2UgbmVlZGVkCi10byBzdG9yZSB0aGUgZGF0YS4gVGhpcyBw
YXJhbWV0ZXIgc2V0cyB0aGUgYWRkaXRpb25hbCBhbW91bnQgdG8gZGViaXQgdGhlIHBlZXIncyBy
ZWNlaXZlciB3aW5kb3cgcGVyCi1jaHVuayBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYs
IHdoaWNoIGlzIHRoZSB2YWx1ZSBuZWVkZWQgYnkgRnJlZUJTRC4KLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21heFxfY2h1bmtzXF9vblxfcXVldWUoKX0KLVRo
aXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNodW5rcyB0aGF0IGNhbiBi
ZSBxdWV1ZWQgcGVyIGFzc29jaWF0aW9uLiBUaGUgZGVmYXVsdCAKLXZhbHVlIGlzIDUxMi4KLQot
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21pblxfc3BsaXRcX3Bv
aW50KCl9Ci1UQkQKLVRoZSBtaW5pbXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayBpcyAy
OTA0IGJ5dGVzIGJ5IGRlZmF1bHQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9jaHVua3NjYWxlKCl9Ci1UQkQKLVRoaXMgcGFyYW1ldGVyIGNhbiBiZSB0dW5l
ZCBmb3Igc2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtzIGFuZCBtZXNzYWdlcy4gVGhlIGRlZmF1
bHQgaXMxMC4JCQotCQkJCQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX21pblxfcmVzaWR1YWwoKX0KLVRCRAotVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJlcyB0aGUg
bWluaW11bSBzaXplIG9mIHRoZSByZXNpZHVhbCBkYXRhIGNodW5rIGluIHRoZSBzZWNvbmQKLXBh
cnQgb2YgdGhlIHNwbGl0LiBUaGUgZGVmYXVsdCBpcyAxNDUyLgotCi0KLVxzdWJzZWN0aW9ue0Nh
bGN1bGF0ZSBSVFR9Ci1UaGUgY2FsY3VsYXRpb24gb2YgdGhlIHJvdW5kIHRyaXAgdGltZSAoUlRU
KSBkZXBlbmRzIG9uIHNldmVyYWwgcGFyYW1ldGVycy4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0dHZhclxfYncoKX0KLVRCRAotU2hpZnQgYW1vdW50IGZv
ciBidyBzbW9vdGhpbmcgb24gcnR0IGNhbGMuIERlZmF1bHQ6IDQKLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3J0dHZhclxfcnR0KCl9Ci1UQkQKLVNoaWZ0IGFt
b3VudCBmb3IgcnR0IHNtb290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVsdDogNQotCi1cc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnR0dmFyXF9lcXJldCgpfQotVEJE
Ci1XaGF0IHRvIHJldHVybiB3aGVuIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZC4gRGVmYXVsdDog
MAotCi0KLVxzdWJzZWN0aW9ue0luZmx1ZW5jZSB0aGUgQ29uZ2VzdGlvbiBDb250cm9sfQotVGhl
IGNvbmdlc3Rpb24gY29udHJvbCBzaG91bGQgcHJvdGVjdCB0aGUgbmV0d29yayBhZ2FpbnN0IGZh
c3Qgc2VuZGVycy4gCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3Rw
XF9lY25cX2VuYWJsZX0KLUV4cGxpY2l0IGNvbmdlc3Rpb24gbm90aWZpY2F0aW9ucyBhcmUgdHVy
bmVkIG9uIGJ5IGRlZmF1bHQuCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0
XF9zY3RwXF9kZWZhdWx0XF9jY1xfbW9kdWxlKCl9Ci1UaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBk
ZWZhdWx0IGFsZ29yaXRobSBmb3IgdGhlIGNvbmdlc3Rpb24gY29udHJvbC4KLURlZmF1bHQgaXMg
MCwgaS5lLiB0aGUgb25lIHNwZWNpZmllZCBpbiBSRkN+NDk2MC4KLQotXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2luaXRpYWxcX2N3bmQoKX0KLVNldCB0aGUgaW5p
dGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVmYXVsdCBpcyAzLgotCi1cc3Vi
c3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdXNlXF9kY2NjXF9lY24oKX0K
LVRCRAotRW5hYmxlIGZvciBSVENDIENDIGRhdGFjZW50ZXIgRUNOLiBEZWZhdWx0OiAxCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zdGVhZHlcX3N0ZXAoKX0K
LVRCRAotSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3du
ZC4gRGVmYXVsdDogMjAKLQotCi1cc3Vic2VjdGlvbntDb25maWd1cmUgQVVUSCBhbmQgQURELUlQ
fQotQW4gaW1wb3J0YW50IGV4dGVuc2lvbiBvZiBTQ1RQIGlzIHRoZSBkeW5hbWljIGFkZHJlc3Mg
cmVjb25maWd1cmF0aW9uflxjaXRle2FkZGlwfSwgYWxzbyBrbm93biBhcwotQURELUlQLCB3aGlj
aCBhbGxvd3MgdGhlIGNoYW5naW5nIG9mIGFkZHJlc3NlcyBkdXJpbmcgdGhlIGxpZmV0aW1lIG9m
IGFuIGFzc29jaWF0aW9uLgotRm9yIHRoaXMgZmVhdHVyZSB0aGUgQVVUSCBleHRlbnNpb25+XGNp
dGV7YXV0aH0gaXMgbmVjZXNzYXJ5LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxc
X3NldFxfc2N0cFxfYXV0b1xfYXNjb25mKCl9Ci1JZiBTQ1RQIEF1dG8tQVNDT05GIGlzIGVuYWJs
ZWQsIHRoZSBwZWVyIGlzIGluZm9ybWVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhIG5ldyBhZGRyZXNz
Ci1pcyBhZGRlZCBvciByZW1vdmVkLiBUaGlzIGZlYXR1cmUgaXMgZW5hYmxlZCBieSBkZWZhdWx0
LgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbXVsdGlwbGVc
X2FzY29uZnMoKX0KLUJ5IGRlZmF1bHQgdGhlIHNlbmRpbmcgb2YgbXVsdGlwbGUgQVNDT05GcyBp
cyBkaXNhYmxlZC4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBc
X2F1dGhcX2Rpc2FibGUoKX0KLVRoZSB1c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFsbHkgdHVy
bmVkIG9uLCBjYW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxLgot
Ci1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXNjb25mXF9hdXRo
XF9ub2NoaygpfQotSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBkaXNhYmxlIHRoZSByZXF1aXJlbWVu
dCB0byB1c2UgQVVUSCBpbiBjb25qdW5jdGlvbiB3aXRoIEFERC1JUCBieSBzZXR0aW5nIHRoaXMg
cGFyYW1ldGVyCi10byAxLgotCi0KLVxzdWJzZWN0aW9ue0NvbmN1cnJlbnQgTXVsdGlwYXRoIFRy
YW5zZmVyIChDTVQpfQotQSBwcm9taW5lbnQgZmVhdHVyZSBvZiBTQ1RQIGlzIHRoZSBwb3NzaWJp
bGl0eSB0byB1c2Ugc2V2ZXJhbCBhZGRyZXNzZXMgZm9yIHRoZSBzYW1lIGFzc29jaWF0aW9uLgot
T25lIGlzIHRoZSBwcmltYXJ5IHBhdGgsIGFuZCB0aGUgb3RoZXJzIGFyZSBuZWVkZWQgaW4gY2Fz
ZSBvZiBhIHBhdGggZmFpbHVyZS4gVXNpbmcgQ01UIHRoZSBkYXRhIGlzIHNlbnQgCi1vbiBzZXZl
cmFsIHBhdGhzIHRvIGVuaGFuY2UgdGhlIHRocm91Z2hwdXQuCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9jbXRcX29uXF9vZmYoKX0KLVRvIHR1cm4gQ01UIG9u
LCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCi0KLVxzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9jbXRcX3VzZVxfZGFjKCl9Ci1UbyB1c2UgZGVsYXll
ZCBhY2tub3dsZWRnbWVudHMgd2l0aCBDTVQgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0
byAxLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYnVmZmVy
XF9zcGxpdHRpbmcoKX0KLUZvciBDTVQgaXQgbWFrZXMgc2Vuc2UgdG8gc3BsaXQgdGhlIHNlbmQg
YW5kIHJlY2VpdmUgYnVmZmVyIHRvIGhhdmUgc2hhcmVzIGZvciBlYWNoIHBhdGguIAotQnkgZGVm
YXVsdCBidWZmZXIgc3BsaXR0aW5nIGlzIHR1cm5lZCBvZmYuCi0KLQotXHN1YnNlY3Rpb257TmV0
d29yayBBZGRyZXNzIFRyYW5zbGF0aW9uIChOQVQpfQotVG8gYmUgYWJsZSB0byBwYXNzIE5BVCBi
b3hlcywgdGhlIGJveGVzIGhhdmUgdG8gaGFuZGxlIFNDVFAgcGFja2V0cyBpbiBhIHNwZWNpZmlj
IHdheS4KLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX25hdFxf
ZnJpZW5kbHkoKX0KLVNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVmYXVsdDoxCi0KLVxz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9pbml0c1xfaW5jbHVkZVxf
bmF0XF9mcmllbmRseSgpfQotRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQ
IG9wdGlvbiBvbiBJTklUcy4gRGVmYXVsdDogMAotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9z
eXNjdGxcX3NldFxfc2N0cFxfdWRwXF90dW5uZWxpbmdcX3BvcnQoKX0KLVNldCB0aGUgU0NUUC9V
RFAgdHVubmVsaW5nIHBvcnQuIERlZmF1bHQ6IDk4OTkKLQotXHN1YnNlY3Rpb257U0NUUCBNb2Jp
bGl0eX0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tb2JpbGl0
eVxfYmFzZSgpfQotVEJECi1FbmFibGUgU0NUUCBiYXNlIG1vYmlsaXR5LiBEZWZhdWx0OiAwCi0K
LQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21vYmlsaXR5XF9m
YXN0aGFuZG9mZigpfQotVEJECi1FbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYuIGRlZmF1bHQ6IDAK
LQotCi1cc3Vic2VjdGlvbntNaXNjZWxsYW5lb3VzfQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX25vXF9jc3VtXF9vblxfbG9vcGJhY2soKX0KLUNhbGN1bGF0aW5n
IHRoZSBjaGVja3N1bSBmb3IgcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrIGlzIHR1cm5lZCBvZmYg
YnkgZGVmYXVsdC4KLVRvIHR1cm4gaXQgb24sIHNldCB0aGlzIHBhcmFtZXRlciB0byAwLgotCi1c
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbnJcX291dGdvaW5nXF9z
dHJlYW1zXF9kZWZhdWx0KCl9Ci1UaGUgcGVlciBpcyBub3RpZmllZCBhYm91dCB0aGUgbnVtYmVy
IG9mIG91dGdvaW5nIHN0cmVhbXMgaW4gdGhlIElOSVQgb3IgSU5JVC1BQ0sgY2h1bmsuCi1UaGUg
ZGVmYXVsdCBpcyAxMC4gCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9z
Y3RwXF9kb1xfZHJhaW4oKX0KLURldGVybWluZXMgd2hldGhlciBTQ1RQIHNob3VsZCByZXNwb25k
IHRvIHRoZSBkcmFpbiBjYWxscy4gRGVmYXVsdDogMQkJCi0KLVxzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zdHJpY3RcX2RhdGFcX29yZGVyKCl9Ci1UQkQKLUVuZm9y
Y2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRlIGRhdGEuIERl
ZmF1bHQ6IDAKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Rl
ZmF1bHRcX3NzXF9tb2R1bGUoKX0KLVNldCB0aGUgZGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBt
b2R1bGUuIEltcGxlbWVudGVkIG1vZHVsZXMgYXJlOgotU0NUUFxfU1NcX0RFRkFVTFQsIFNDVFBc
X1NTXF9ST1VORFxfUk9CSU4sIFNDVFBcX1NTXF9ST1VORFxfUk9CSU5cX1BBQ0tFVCwKLVNDVFBc
X1NTXF9QUklPUklUWSwgU0NUUFxfU1NcX0ZBSVJcX0JBTkRXSVRILCBhbmQgU0NUUFxfU1NcX0ZJ
UlNUXF9DT01FLgotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxf
ZGVmYXVsdFxfZnJhZ1xfaW50ZXJsZWF2ZSgpfQotVEJECi1EZWZhdWx0IGZyYWdtZW50IGludGVy
bGVhdmUgbGV2ZWwuIERlZmF1bHQ6IDEKLQotXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX2JsYWNraG9sZSgpfQotVEJECi1FbmFibGUgU0NUUCBibGFja2hvbGluZy4g
RGVmYXVsdDogMAotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxf
bG9nZ2luZ1xfbGV2ZWwoKX0KLVNldCB0aGUgbG9nZ2luZyBsZXZlbC4gVGhlIGRlZmF1bHQgaXMg
MC4KLQotCi1cc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZGVidWdc
X29uKCl9Ci1UdXJuIGRlYnVnIG91dHB1dCBvbiBvciBvZmYuIEl0IGlzIGRpc2FibGVkIGJ5IGRl
ZmF1bHQuIFRvIG9idGFpbiBkZWJ1ZyBvdXRwdXQsCi1TQ1RQXF9ERUJVRyBoYXMgdG8gYmUgc2V0
IGFzIGEgY29tcGlsZSBmbGFnLgotCi0JCQkJCQkKLSVUaGUgZm9sbG93aW5nIHZhcmlhYmxlcyBh
cmUgc3VwcG9ydGVkOgotJVxiZWdpbntsb25ndGFibGV9e3xsfGx8Y3x9IAotJVxobGluZQotJXtc
YmZzZXJpZXMgUGFyYW1ldGVyfSZ7XGJmc2VyaWVzIE1lYW5pbmd9JntcYmZzZXJpZXMgRGVmYXVs
dCBWYWx1ZX0gXHRhYnVsYXJuZXdsaW5lIAotJVxlbmRoZWFkCi0lXGhsaW5lCi0lc2N0cFxfc2Vu
ZHNwYWNlJlNlbmQgYnVmZmVyIHNwYWNlJjE4NjQxMzVcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0l
c2N0cFxfcmVjdnNwYWNlJlJlY2VpdmUgYnVmZmVyIHNwYWNlJjE4NjQxMzUgXHRhYnVsYXJuZXds
aW5lIFxobGluZQotJXNjdHBcX2hhc2h0YmxzaXplJlR1bmFibGUgZm9yIFRDQiBoYXNoIHRhYmxl
IHNpemVzJjEwMjQgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3BjYnRibHNpemUmVHVu
YWJsZSBmb3IgUENCIGhhc2ggdGFibGUgc2l6ZXMmMjU2IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9zeXN0ZW1cX2ZyZWVcX3Jlc2NcX2xpbWl0JkNhY2hlZCByZXNvdXJjZXMgaW4gdGhl
IHN5c3RlbSYxMDAwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9hc29jXF9mcmVlXF9y
ZXNjXF9saW1pdCZDYXNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0aW9uJjEwIFx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ydG9cX21heFxfZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZv
ciBSVE9cX21heCY2MDAwMH5tcyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfcnRvXF9t
aW5cX2RlZmF1bHQmRGVmYXVsdCB2YWx1ZSBmb3IgUlRPXF9taW4mMTAwMH5tcyBcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCi0lc2N0cFxfcnRvXF9pbml0aWFsXF9kZWZhdWx0JkRlZmF1bHQgdmFsdWUg
Zm9yIFJUT1xfaW5pdGlhbCYzMDAwfm1zIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9p
bml0XF9ydG9cX21heFxfZGVmYXVsdCZEZWZhdWx0IHZhbHVlIGZvciB0aGUgbWF4aW11bSBSVE8m
NjAwMDB+bXMgXHRhYnVsYXJuZXdsaW5lCi0gJSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJmZvciBzZW5kaW5nIGFuIElOSVQmIFx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKLSVzY3RwXF92YWxpZFxfY29va2llXF9saWZlXF9kZWZhdWx0JlZhbGlkIGNvb2tp
ZSBsaWZlIHRpbWUmNjAwMDB+bXMgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2luaXRc
X3J0eFxfbWF4XF9kZWZhdWx0Jk1heGltdW0gbnVtYmVyIG9mIElOSVQgcmV0cmFuc21pc3Npb25z
JjggXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2Fzc29jXF9ydHhcX21heFxfZGVmYXVs
dCZNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zJjEwXHRhYnVsYXJuZXds
aW5lCi0lCQkJCQkJJiBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGlzIGFib3J0ZWQmXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQotJXNjdHBcX3BhdGhcX3J0eFxfbWF4XF9kZWZhdWx0Jk1heGltdW0gbnVt
YmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMmNVx0YWJ1bGFybmV3bGluZQotJQkJCQkJCSZi
ZWZvcmUgYSBwYXRoIGZhaWxzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9lY25cX2Vu
YWJsZSZFbmFibGluZyBleHBsaWNpdCBjb25nZXN0aW9uIG5vdGlmaWNhdGlvbnMmMVx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zdHJpY3RcX3NhY2tzJkNvbnRyb2wgdGhlIGNvaGVyZW5j
ZSBvZiBTQUNLcyYxIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9kZWxheWVkXF9zYWNr
XF90aW1lXF9kZWZhdWx0JkRlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVyJjIwMH5tc1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zYWNrXF9mcmVxXF9kZWZhdWx0JkRlZmF1bHQgU0FDSyBm
cmVxdWVuY3kmMiBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfbnJcX3NhY2tcX29uXF9v
ZmYmVHVybiBub24tcmVuZWdhYmxlIFNBQ0tzIG9uIG9yIG9mZiYwIFx0YWJ1bGFybmV3bGluZSBc
aGxpbmUKLSVzY3RwXF9lbmFibGVcX3NhY2tcX2ltbWVkaWF0ZWx5JkVuYWJsZSBzZW5kaW5nIG9m
IHRoZSBTQUNLLSYwIFx0YWJ1bGFybmV3bGluZSAJCQkJCQkmSU1NRURJQVRFTFkgYml0LiZcdGFi
dWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfbm9cX2NzdW1cX29uXF9sb29wYmFjayZFbmFibGUg
dGhlIGNvbXBpbGF0aW9uIG9mIHRoZSBjaGVja3N1bSBvbiYxIFx0YWJ1bGFybmV3bGluZQotJQkJ
CQkJCSZwYWNrZXRzIHNlbnQgb24gbG9vcGJhY2smXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNj
dHBcX3BlZXJcX2NodW5rXF9vaCZBbW91bnQgdG8gZGViaXQgcGVlcnMgcnduZCBwZXIgY2h1bmsg
c2VudCYyNTYgXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX21heFxfYnVyc3RcX2RlZmF1
bHQmRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzJjAgXHRhYnVsYXJuZXdsaW5l
IFxobGluZQotJXNjdHBcX3VzZVxfY3duZFxfYmFzZWRcX21heGJ1cnN0JlVzZSBtYXggYnVyc3Qg
YmFzZWQgb24gdGhlIHNpemUgb2YgJjFcdGFidWxhcm5ld2xpbmUJCQkJJQkJCQkJCQkmdGhlIGNv
bmdlc3Rpb24gd2luZG93Jlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9oYlxfbWF4YnVy
c3QmQ29uZmlybWF0aW9uIEhlYXJ0YmVhdCBtYXggYnVyc3QmNCBcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCi0lc2N0cFxfbWF4XF9jaHVua3NcX29uXF9xdWV1ZSZEZWZhdWx0IG1heCBjaHVua3Mgb24g
cXVldWUgcGVyIGFzb2MmNTEyIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9taW5cX3Nw
bGl0XF9wb2ludCZNaW5pbXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayYyOTA0IFx0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9jaHVua3NjYWxlJlR1bmFibGUgZm9yIFNjYWxpbmcg
b2YgbnVtYmVyIG9mIGNodW5rcyBhbmQmMTBcdGFidWxhcm5ld2xpbmUgCi0lCQkJCQkJJm1lc3Nh
Z2VzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9tYnVmXF90aHJlc2hvbGRcX2NvdW50
Jk1heGltdW0gbnVtYmVyIG9mIHNtYWxsIG1idWZzIGluIGEgY2hhaW4mNVx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKLSVzY3RwXF9oZWFydGJlYXRcX2ludGVydmFsXF9kZWZhdWx0JkRlYWZ1bHQgdGlt
ZSBiZXR3ZWVuIHR3byBIZWFydGJlYXRzJjMwMDAwfm1zXHRhYnVsYXJuZXdsaW5lIFxobGluZQot
JXNjdHBcX3BtdHVcX3JhaXNlXF90aW1lXF9kZWZhdWx0JkRlZmF1bHQgUE1UVSByYWlzZSB0aW1l
ciY2MDB+c2Vjc1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zaHV0ZG93blxfZ3VhcmRc
X3RpbWVcX2RlZmF1bHQmRGVmYXVsdCBzaHV0ZG93biBndWFyZCB0aW1lciYxODB+c2Vjc1x0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9zZWNyZXRcX2xpZmV0aW1lXF9kZWZhdWx0JkRlZmF1
bHQgc2VjcmV0IGxpZmV0aW1lJjM2MDB+c2VjcyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0
cFxfYWRkXF9tb3JlXF90aHJlc2hvbGQmVGhyZXNob2xkIHdoZW4gbW9yZSBzcGFjZSBzaG91bGQg
JjE0NTJcdGFidWxhcm5ld2xpbmUgCi0lCQkJCQkJJmJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQg
YnVmZmVyJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9uclxfb3V0Z29pbmdcX3N0cmVh
bXNcX2RlZmF1bHQmRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyYxMFx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9jbXRcX29uXF9vZmYmVHVybiBDTVQgb24gb3Igb2ZmLiYw
XHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2NtdFxfdXNlXF9kYWMmVXNlIGRlbGF5ZWQg
YWNrbm93bGVkZ21lbnQgZm9yIENNVCYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2Zy
XF9tYXhcX2J1cnN0XF9kZWZhdWx0JkRlZmF1bHQgbWF4IGJ1cnN0IGZvciBTQ1RQIGVuZHBvaW50
cyB3aGVuICY0XHRhYnVsYXJuZXdsaW5lCi0lCQkJCQkJJmZhc3QgcmV0cmFuc21pdHRpbmcmXHRh
YnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2F1dG9cX2FzY29uZiZFbmFibGUgU0NUUCBBdXRv
LUFTQ09ORiYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX211bHRpcGxlXF9hc2NvbmZz
JkVuYWJsZSBTQ1RQIE11bGlwbGUtQVNDT05GcyYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVz
Y3RwXF9hc2NvbmZcX2F1dGhcX25vY2hrJkRpc2FibGUgU0NUUCBBU0NPTkYgQVVUSCByZXF1aXJl
bWVudCYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2F1dGhcX2Rpc2FibGUmRGlzYWJs
ZSBTQ1RQIEFVVEggZnVuY3Rpb24mMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9uYXRc
X2ZyaWVuZGx5JlNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiYxXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQotJXNjdHBcX2luaXRzXF9pbmNsdWRlXF9uYXRcX2ZyaWVuZGx5JkVuYWJsZSBzZW5kaW5n
IG9mIHRoZSBuYXQtZnJpZW5kbHkgJjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZTQ1RQIG9wdGlv
biBvbiBJTklUcy4mXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3VkcFxfdHVubmVsaW5n
XF9wb3J0JlNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQmOTg5OVx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKLSVzY3RwXF9kb1xfZHJhaW4mRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxk
IHJlc3BvbmQmMVx0YWJ1bGFybmV3bGluZQotJQkJCQkJJnRvIHRoZSBkcmFpbiBjYWxscyZcdGFi
dWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfYWJvcnRcX2lmXF9vbmVcXzJcX29uZVxfaGl0c1xf
bGltaXQmV2hlbiBvbmUtMi1vbmUgaGl0cyBxbGltaXQgYWJvcnQmMCBcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCi0lc2N0cFxfc3RyaWN0XF9kYXRhXF9vcmRlciZFbmZvcmNlIHN0cmljdCBkYXRhIG9y
ZGVyaW5nLCBhYm9ydCBpZiBjb250cm9sJjBcdGFidWxhcm5ld2xpbmUKLSUJCQkJCSZpbnNpZGUg
ZGF0YSZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfbWluXF9yZXNpZHVhbCZNaW5pbXVt
IHJlc2lkdWFsIGRhdGEgY2h1bmsgaW4gc2Vjb25kJjE0NTJcdGFidWxhcm5ld2xpbmUKLSUJCQkJ
CSZwYXJ0IG9mIHNwbGl0Jlx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9tYXhcX3JldHJh
blxfY2h1bmsmTWF4aW11bSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSYzMFx0YWJ1bGFy
bmV3bGluZQotJQkJCQkmIHJldHJhbnNtaXR0ZWQgYmVmb3JlIHRoZSBhc3NvY2lhdGlvbiBhYm9y
dHMmXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2RlZmF1bHRcX2NjXF9tb2R1bGUmRGVm
YXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0l
c2N0cFxfZGVmYXVsdFxfc3NcX21vZHVsZSZEZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVs
ZSYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9kZWZhdWx0XF9mcmFnXF9pbnRlcmxl
YXZlJkRlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZlbCYxXHRhYnVsYXJuZXdsaW5lIFxo
bGluZQotJXNjdHBcX21vYmlsaXR5XF9iYXNlJkVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkmMFx0
YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9tb2JpbGl0eVxfZmFzdGhhbmRvZmYmRW5hYmxl
IFNDVFAgZmFzdCBoYW5kb2ZmJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxfTDJcX2Fi
Y1xfdmFyaWFibGUmU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChMKSYxXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQotJXNjdHBcX3Z0YWdcX3RpbWVcX3dhaXQmVnRhZyB0aW1lIHdhaXQgdGlt
ZSwgMCBkaXNhYmxlcyBpdC4mNjB+c2Vjc1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9i
bGFja2hvbGUmRW5hYmxlIFNDVFAgYmxhY2tob2xpbmcmMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
LSVzY3RwXF9wYXRoXF9wZlxfdGhyZXNob2xkJkRlZmF1bHQgcG90ZW50aWFsbHkgZmFpbGVkIHRo
cmVzaG9sZCY2NTUzNVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ydHR2YXJcX2J3JlNo
aWZ0IGFtb3VudCBmb3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjJjQgXHRhYnVsYXJuZXdsaW5l
IFxobGluZQotJXNjdHBcX3J0dHZhclxfcnR0JlNoaWZ0IGFtb3VudCBmb3IgcnR0IHNtb290aGlu
ZyBvbiBydHQgY2FsYyY1IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9ydHR2YXJcX2Vx
cmV0ICZXaGF0IHRvIHJldHVybiB3aGVuIHJ0dCBhbmQgYncgYXJlJjBcdGFidWxhcm5ld2xpbmUK
LSUJCQkJCSZ1bmNoYW5nZWQmXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX3N0ZWFkeVxf
c3RlcCZIb3cgbWFueSB0aGUgc2FtZXMgaXQgdGFrZXMgdG8gdHJ5IHN0ZXAmMjBcdGFidWxhcm5l
d2xpbmUKLSUJCQkJCSZkb3duIG9mIGN3bmQmXHRhYnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBc
X3VzZVxfZGNjY1xfZWNuJkVuYWJsZSBmb3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTiYxIFx0YWJ1
bGFybmV3bGluZSBcaGxpbmUKLSVzY3RwXF9idWZmZXJcX3NwbGl0dGluZyZFbmFibGUgc2VuZC9y
ZWNlaXZlIGJ1ZmZlciBzcGxpdHRpbmcmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCi0lc2N0cFxf
aW5pdGlhbFxfY3duZCZJbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGluIE1UVXMmM1x0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKLSVzY3RwXF9sb2dnaW5nXF9sZXZlbCZMb2dnaW5nIGxldmVsJjAgXHRh
YnVsYXJuZXdsaW5lIFxobGluZQotJXNjdHBcX2RlYnVnXF9vbiZUdXJucyBkZWJ1ZyBvdXRwdXQg
b24gb3Igb2ZmLiYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKLQotJVxjYXB0aW9ue1N5c2N0bCB2
YXJpYWJsZXMgc3VwcG9ydGVkIGJ5IHVzcnNjdHB9Ci0lXGVuZHtsb25ndGFibGV9Ci0KLVxzZWN0
aW9ue0V4YW1wbGVzfQotXHN1YnNlY3Rpb257RGlzY2FyZCBTZXJ2ZXJ9XGxhYmVse3NlcnZlcn0K
LVxiZWdpbnt2ZXJiYXRpbX0KLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVs
IFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
Ci0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNI
QUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBE
QU1BR0UuCi0gKi8KLQotLyoKLSAqIFVzYWdlOiBkaXNjYXJkX3NlcnZlciBbbG9jYWxfZW5jYXBz
X3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCi0gKi8KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0j
aW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3R5
cGVzLmg+Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDx1
bmlzdGQuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5o
PgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgot
Ci0jZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCi0KLWNvbnN0IGludCB1c2VfY2IgPSAwOwotCi1z
dGF0aWMgaW50Ci1yZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29j
a3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1
Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzKQotewotICAgIGNoYXIgbmFtZVtJTkVUNl9B
RERSU1RSTEVOXTsKLQotICAgIGlmIChkYXRhKSB7Ci0gICAgICAgIGlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKLSAgICAgICAgICAgIHByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0
aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBz
dHJlYW0gJWQgd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgIlNTTiAldSBhbmQgVFNOICV1LCBQ
UElEICVkLCBjb250ZXh0ICV1LlxuIiwKLSAgICAgICAgICAgICAgICAgICAoaW50KWRhdGFsZW4s
Ci0gICAgICAgICAgICAgICAgICAgYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCA/Ci0gICAg
ICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmYWRkci5zaW4uc2luX2FkZHIs
IG5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxF
Tik6Ci0gICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2lu
Ni5zaW42X2FkZHIsIG5hbWUsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5F
VDZfQUREUlNUUkxFTiksCi0gICAgICAgICAgICAgICAgICAgbnRvaHMoYWRkci5zaW4uc2luX3Bv
cnQpLAotICAgICAgICAgICAgICAgICAgIHJjdi5yY3Zfc2lkLAotICAgICAgICAgICAgICAgICAg
IHJjdi5yY3Zfc3NuLAotICAgICAgICAgICAgICAgICAgIHJjdi5yY3ZfdHNuLAotICAgICAgICAg
ICAgICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCi0gICAgICAgICAgICAgICAgICAgcmN2LnJj
dl9jb250ZXh0KTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKGRhdGEpOwotICAgIH0KLSAgICBy
ZXR1cm4gMTsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gICAg
c3RydWN0IHNvY2tldCAqc29jazsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0gICAg
c3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLSAgICBzdHJ1Y3Qgc2N0cF9ldmVudCBldmVu
dDsKLSAgICB1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAotCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9FUlJPUiwKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAotCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVH07Ci0gICAgdW5z
aWduZWQgaW50IGk7Ci0gICAgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7Ci0gICAgY29uc3Qg
aW50IG9uID0gMTsKLSAgICBpbnQgbiwgZmxhZ3M7Ci0gICAgc29ja2xlbl90IGZyb21fbGVuOwot
ICAgIGNoYXIgYnVmZmVyW0JVRkZFUl9TSVpFXTsKLSAgICBjaGFyIG5hbWVbSU5FVDZfQUREUlNU
UkxFTl07Ci0gICAgc3RydWN0IHNjdHBfcmVjdnZfcm4gcm47Ci0gICAgc29ja2xlbl90IGluZm9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOwotICAgIHN0cnVjdCBzY3RwX3Jjdmlu
Zm8gcmN2OwotICAgIHN0cnVjdCBzY3RwX254dGluZm8gbnh0OwotICAgIHVuc2lnbmVkIGludCBp
bmZvdHlwZSA9IDA7Ci0KLSAgICBpZiAoYXJnYyA+IDEpIHsKLSAgICAgICAgdXNyc2N0cF9pbml0
KGF0b2koYXJndlsxXSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzcnNjdHBfaW5pdCg5ODk5
KTsKLSAgICB9Ci0gICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oMCk7Ci0gICAg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwotCi0gICAgaWYgKChzb2NrID0g
dXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJUFBST1RPX1NDVFAsIAot
ICAgIAkgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5V
TEwsIDApKSA9PSBOVUxMKSB7Ci0gICAgICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tldCIpOwot
ICAgIH0KLSAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNv
bnN0IHZvaWQqKSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0gICAgICAgIHBl
cnJvcigic2V0c29ja29wdCIpOwotICAgIH0KLSAgICBtZW1zZXQoJmF2LCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUpKTsKLSAgICBhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FTU09D
OwotICAgIGF2LmFzc29jX3ZhbHVlID0gNDc7Ci0KLSAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlKSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigic2V0c29ja29wdCIpOwotICAgIH0K
LSAgICBpZiAoYXJnYyA+IDIpIHsKLSAgICAgICAgbWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKLSAgICAgICAgZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2Zh
bWlseSA9IEFGX0lORVQ2OwotICAgICAgICBlbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFy
Z3ZbMl0pKTsKLSAgICAgICAgaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgewot
ICAgICAgICAgICAgcGVycm9yKCJzZXRzb2Nrb3B0Iik7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
bWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7Ci0gICAgZXZlbnQuc2VfYXNzb2NfaWQg
PSBTQ1RQX0ZVVFVSRV9BU1NPQzsKLSAgICBldmVudC5zZV9vbiA9IDE7Ci0gICAgZm9yIChpID0g
MDsgaSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90
KSk7IGkrKykgewotICAgICAgICBldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07Ci0gICAg
ICAgIGlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5U
LCAmZXZlbnQsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg
c2N0cF9ldmVudCkpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2Vfc2V0c29j
a29wdCIpOwotICAgICAgICB9Ci0gICAgfQotICAgIG1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotICAgIGFk
ZHIuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLSAgICBh
ZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgYWRkci5zaW42X3BvcnQgPSBodG9ucyg5
KTsKLSAgICBhZGRyLnNpbjZfYWRkciA9IGluNmFkZHJfYW55OwotICAgIGlmICh1c3JzY3RwX2Jp
bmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCAKLSAgICAgICAgICAgICAgICAgICAg
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0gICAgICAgIHBlcnJvcigidXNl
cnNwYWNlX2JpbmQiKTsKLSAgICB9Ci0gICAgaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwg
MCkgewotICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9saXN0ZW4iKTsKLSAgICB9Ci0gICAgd2hp
bGUgKDEpIHsKLSAgICAgICAgaWYgKHVzZV9jYikgewotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0gICAgICAgICAgICBTbGVlcCgxKjEwMDApOwotI2Vsc2UKLSAgICAgICAg
ICAgIHNsZWVwKDEpOwotI2VuZGlmCi0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBmcm9t
X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgICAgICAg
ICAgZmxhZ3MgPSAwOwotICAgICAgICAgICAgcm4ucmVjdnZfcmN2aW5mbyA9IHJjdjsKLSAgICAg
ICAgICAgIHJuLnJlY3Z2X254dGluZm8gPSBueHQ7Ci0gICAgICAgICAgICBuID0gdXNyc2N0cF9y
ZWN2dihzb2NrLCAodm9pZCopYnVmZmVyLCBCVUZGRVJfU0laRSwgCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmZnJvbV9sZW4sICh2b2lk
ICopJnJuLAotCSAgICAgICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFn
cyk7Ci0gICAgICAgICAgICBpZiAobiA+IDApIHsKLSAgICAgICAgICAgICAgICBpZiAoZmxhZ3Mg
JiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiTm90aWZp
Y2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIG4pOwotICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiTXNnIG9mIGxlbmd0aCAlZCByZWNl
aXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAi
JWQgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAlZCwgY29udGV4dCAldSwgIgotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImNvbXBsZXRlICVkLlxuIiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5F
VDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3NpZCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3NzbiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJuLnJlY3Z2X3JjdmluZm8ucmN2X3RzbiwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG50b2hsKHJuLnJlY3Z2X3JjdmluZm8ucmN2X3BwaWQpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcm4ucmVjdnZfcmN2aW5mby5yY3ZfY29udGV4dCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChmbGFncyAmIE1TR19FT1IpID8gMSA6IDApOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICB1c3JzY3RwX2Ns
b3NlKHNvY2spOwotICAgIHdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZiBkZWZp
bmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotICAgICAgICBTbGVlcCgxMDAwKTsKLSNlbHNl
Ci0gICAgICAgIHNsZWVwKDEpOwotI2VuZGlmCi0gICAgfQotICAgIHJldHVybiAoMCk7Ci19Ci0K
LVxlbmR7dmVyYmF0aW19Ci0KLVxzdWJzZWN0aW9ue0NsaWVudH1cbGFiZWx7Y2xpZW50fQotXGJl
Z2lue3ZlcmJhdGltfQotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVl
eGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBS
T0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vKgotICogVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBb
bG9jYWxfZW5jYXBzX3BvcnQgcmVtb3RlX2VuY2Fwc19wb3J0XQotICovCi0KLSNpbmNsdWRlIDxz
dGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5k
aWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+
Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0K
LWludCBkb25lID0gMDsKLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpz
b2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBz
aXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncykKLXsKLSAg
ICBpZiAoZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIGRvbmUgPSAxOwotICAgICAgICB1c3JzY3Rw
X2Nsb3NlKHNvY2spOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHdyaXRlKGZpbGVubyhzdGRvdXQp
LCBkYXRhLCBkYXRhbGVuKTsKLSAgICAgICAgZnJlZShkYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJu
IDE7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICAgIHN0cnVj
dCBzb2NrZXQgKnNvY2s7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OwotICAgIHN0cnVj
dCBzb2NrYWRkcl9pbjYgYWRkcjY7Ci0gICAgc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsK
LSAgICBjaGFyIGJ1ZmZlcls4MF07Ci0KLSAgICBpZiAoYXJnYyA+IDMpIHsKLSAgICAgICAgdXNy
c2N0cF9pbml0KGF0b2koYXJndlszXSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHVzcnNjdHBf
aW5pdCg5ODk5KTsKLSAgICB9Ci0gICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24o
MCk7Ci0gICAgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwotICAgIGlmICgo
c29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAs
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfY2IsIE5VTEwsIDApKSA9
PSBOVUxMKSB7Ci0gICAgICAgIHBlcnJvcigidXNlcnNwYWNlX3NvY2tldCBpcHY2Iik7Ci0gICAg
fQotICAgIGlmIChhcmdjID4gNCkgewotICAgICAgICBtZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOwotICAgICAgICBlbmNhcHMuc3VlX2FkZHJlc3Muc3Nf
ZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgICAgIGVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2ko
YXJndls0XSkpOwotICAgICAgICBpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9f
U0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoY29uc3Qgdm9pZCopJmVuY2FwcywgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7
Ci0gICAgICAgICAgICBwZXJyb3IoInNldHNvY2tvcHQiKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBtZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
LSAgICBtZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KSk7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi0gICAgYWRkcjQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOwotICAgIGFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOwotI2VuZGlmCi0gICAgYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0gICAgYWRkcjYu
c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICBhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2ko
YXJndlsyXSkpOwotICAgIGFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwot
ICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09
IDEpIHsKLSAgICAgICAgaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRy
ICopJmFkZHI2LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpIDwgMCkgewotICAgICAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2VfY29ubmVj
dCIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsx
XSwgJmFkZHI0LnNpbl9hZGRyKSA9PSAxKSB7Ci0gICAgICAgIGlmICh1c3JzY3RwX2Nvbm5lY3Qo
c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNCwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotICAgICAgICAgICAgcGVy
cm9yKCJ1c2Vyc3BhY2VfY29ubmVjdCIpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgcHJpbnRmKCJJbGxlZ2FsIGRlc3RpbmF0aW9uIGFkZHJlc3MuXG4iKTsKLSAgICB9Ci0gICAg
d2hpbGUgKChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikgIT0gTlVMTCkgJiYg
IWRvbmUpIHsKLSAgICAgICAgdXNyc2N0cF9zZW5kdihzb2NrLCBidWZmZXIsIHN0cmxlbihidWZm
ZXIpLCBOVUxMLCAwLAotCQkJCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIFNDVFBfU0VORFZf
Tk9JTkZPLCAwKTsKLSAgICB9Ci0gICAgaWYgKCFkb25lKSB7Ci0gICAgICAgIHVzcnNjdHBfc2h1
dGRvd24oc29jaywgU0hVVF9XUik7Ci0gICAgfQotICAgIHdoaWxlICghZG9uZSkgewotI2lmIGRl
ZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0gICAgICAgIFNsZWVwKDEqMTAwMCk7Ci0j
ZWxzZQotICAgICAgICBzbGVlcCgxKTsKLSNlbmRpZgotICAgIH0KLSAgICB3aGlsZSAodXNyc2N0
cF9maW5pc2goKSAhPSAwKSB7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LSAgICAgICAgU2xlZXAoMTAwMCk7Ci0jZWxzZQotICAgICAgICBzbGVlcCgxKTsKLSNlbmRpZgot
ICAgIH0KLSAgICByZXR1cm4oMCk7Ci19Ci0KLVxlbmR7dmVyYmF0aW19Ci1cYmlibGlvZ3JhcGh5
c3R5bGV7cGxhaW59Ci0lCi1cYmVnaW57dGhlYmlibGlvZ3JhcGh5fXs5OX0KLQotXGJpYml0ZW17
c29ja2V0QVBJfQotUi5+U3Rld2FydCwgTS5+VFwidXhlbiwgSy5+UG9vbiwgYW5kIFYufllhc2V2
aWNoOgotXHRleHRpdHtTb2NrZXRzIEFQSSBFeHRlbnNpb25zIGZvciB0aGUgU3RyZWFtIENvbnRy
b2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKX0uCi1SRkN+NjQ1OCwgRGV6ZW1iZXJ+MjAx
MS4KLQotXGJpYml0ZW17U0NUUH0KLVIuflN0ZXdhcnQ6Ci1cdGV4dGl0e1N0cmVhbSBDb250cm9s
IFRyYW5zbWlzc2lvbiBQcm90b2NvbH0uCi1SRkN+NDk2MCwgU2VwdGVtYmVyfjIwMDcuCi0KLQot
XGJpYml0ZW17YXV0aH0KLU0uflRcInV4ZW4sIFIuflN0ZXdhcnQsIFAufkxlaSwgYW5kIEUuflJl
c2NvcmxhOgotXHRleHRpdHtBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhlIFN0cmVhbSBDb250
cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCl9LgotUkZDfjQ4OTUsIEF1Z3VzdH4yMDA3
LgotCi1cYmliaXRlbXtzdHJlYW1SZXNldH0KLVIuflN0ZXdhcnQsIE0uflRcInV4ZW4sIGFuZCBQ
Ln5MZWk6Ci1cdGV4dGl0e1N0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NU
UCkgU3RyZWFtIFJlY29uZmlndXJhdGlvbn0uCi1SRkN+NjUyNSwgRmVicnVhcnl+MjAxMi4KLQot
Ci1cYmliaXRlbXthZGRpcH0KLVIuflN0ZXdhcnQsICBRLn5YaWUsIE0uflRcInV4ZW4sIFMufk1h
cnV5YW1hLCBhbmQgTS5+S296dWthOgotXHRleHRpdHtTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Np
b24gUHJvdG9jb2wgKFNDVFApIER5bmFtaWMgQWRkcmVzcyBSZWNvbmZpZ3VyYXRpb259LgotUkZD
fjUwNjEsIFNlcHRlbWJlcn4yMDA3LgotCi1cYmliaXRlbXtzYWNrLWltbX0KLU0uflRcInV4ZW4s
IEkuflJcInVuZ2VsZXIsIGFuZCBSLn5TdGV3YXJ0OgotXHRleHRpdHtTQUNLLUlNTUVESUFURUxZ
IEV4dGVuc2lvbiBmb3IgdGhlIFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbH0u
Ci1kcmFmdC10dWV4ZW4tdHN2d2ctc2N0cC1zYWNrLWltbWVkaWF0ZWx5LTA5ICh3b3JrIGluIHBy
b2dyZXNzKSwgQXByaWx+MjAxMi4KLQotXGJpYml0ZW17dWRwZW5jYXBzfQotTS5+VFwidXhlbiBh
bmQgUi5+U3Rld2FydAotXHRleHRpdHtVRFAgRW5jYXBzdWxhdGlvbiBvZiBTQ1RQIFBhY2tldHNs
fS4KLWRyYWZ0LWlldGYtdHN2d2ctc2N0cC11ZHAtZW5jYXBzLTAzICh3b3JrIGluIHByb2dyZXNz
KSwgTWFyY2h+MjAxMi4KLQotXGVuZHt0aGViaWJsaW9ncmFwaHl9Ci1cZW5ke2RvY3VtZW50fQpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL09XTkVSUyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9PV05FUlMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1
YWQ4YzJlNDhjNTM5MS4uZTgxM2IwNzk2ODBhMDdiZGYyZTY1ODQxNzRlZDFhNGZlOTRjNzRiZSAx
MDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL09XTkVSUworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvT1dORVJTCkBAIC0wLDAgKzEsMyBAQAorcHRoYXRjaGVyQGNo
cm9taXVtLm9yZworamlheWxAY2hyb21pdW0ub3JnCitsZGl4b25AY2hyb21pdW0ub3JnCmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvUkVBRE1FLmNocm9taXVtIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL1JFQURNRS5jaHJvbWl1bQppbmRleCBlNjlkZTI5YmIyZDFk
NjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4yNGIwYmRmNDVmN2FkMGZiYzQ2OGY4MTExNTZm
N2ViMjcxNjY4ZjMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLmNocm9taXVtCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9SRUFETUUuY2hyb21p
dW0KQEAgLTAsMCArMSwyMCBAQAorTmFtZTogdXNyc2N0cAorVVJMOiBodHRwOi8vZ2l0aHViLmNv
bS9zY3RwbGFiL3VzcnNjdHAKK1ZlcnNpb246IDAKK0RhdGU6IEp1biAyMiwgMjAxOAorUmV2aXNp
b246IDdhOGJjOWE5MGNhOTY2MzRhYTU2ZWU3MTI4NTZkOTdmMjdkOTAzZjgKK0xpY2Vuc2U6IE5l
dyBCU0QKK0xpY2Vuc2UgRmlsZTogTElDRU5TRQorU2VjdXJpdHkgQ3JpdGljYWw6IHllcworCitE
ZXNjcmlwdGlvbjoKK1RoZSB1c3JzY3RwbGliIHByb3ZpZGVzIGltcGxlbWVudGF0aW9uIG9mIFND
VFAgcHJvdG9jb2wgd2hpY2ggZnVsbHkgc3VwcG9ydHMKK1JGQyAyOTYwCithcyB3ZWxsIGFzIHVw
ZGF0ZXMgYW5kIGVuaGFuY2VtZW50cyBmcm9tIHRoZSBmb2xsb3dpbmcgSW50ZXJuZXQgRHJhZnRz
OgorICAgZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwY3N1bS0wNS50eHQKKyAgIGRyYWZ0LWlldGYtdHN2
d2ctc2N0cGltcGd1aWRlLTA1LnR4dAorICAgZHJhZnQtaWV0Zi10c3Z3Zy1zY3Rwc29ja2V0LTA0
LnR4dAorICAgZHJhZnQtaWV0Zi10c3Z3Zy1hZGRpcC1zY3RwLTA1LnR4dAorICAgZHJhZnQtc3Rl
d2FydC1wcnNjdHAtMDAudHh0CisgICBkcmFmdC1zdGV3YXJ0LXRzdndnLXNjdHBpcHY2LTAwLnR4
dAorICAgZHJhZnQtaXllbmdhci1zY3RwLWNhY2MtMDAudHh0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvUkVBRE1FLm1k
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L1JFQURNRS5tZApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmZjMTY0YzVhOTI0MmU5
YzY3ZGJkZGE5ZGJlNWRkZjRmNzM0NWZjNS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvUkVBRE1FLm1kCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0j
IHVzcnNjdHAKLQotVGhpcyBpcyBhIHVzZXJsYW5kIFNDVFAgc3RhY2sgc3VwcG9ydGluZyBGcmVl
QlNELCBMaW51eCwgTWFjIE9TIFggYW5kIFdpbmRvd3MuCi0KLVNlZSBbbWFudWFsXShNYW51YWwu
bWQpIGZvciBtb3JlIGluZm9ybWF0aW9uLgotCi1UaGUgc3RhdHVzIG9mIGNvbnRpbnVvdXMgaW50
ZWdyYXRpb24gdGVzdGluZyBpcyBhdmFpbGFibGUgZnJvbSBbZ3JpZF0oaHR0cDovLzIxMi4yMDEu
MTIxLjExMDoxODAxMC9ncmlkKSBhbmQgW3dhdGVyZmFsbF0oaHR0cDovLzIxMi4yMDEuMTIxLjEx
MDoxODAxMC93YXRlcmZhbGwpLgotSWYgeW91IGFyZSBvbmx5IGludGVyZXN0ZWQgaW4gYSBzaW5n
bGUgYnJhbmNoLCBqdXN0IGFwcGVuZCBgP2JyYW5jaD1CUkFOQ0hOQU1FYCB0byB0aGUgVVJMLCBm
b3IgZXhhbXBsZSBbd2F0ZXJmYWxsXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL3dhdGVy
ZmFsbD9icmFuY2g9bWFzdGVyKS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9ib290c3RyYXAgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvYm9vdHN0cmFwCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OWM3YmJhYmQ5MDM5MDkyZjY1Y2Q1MGJmNDk0MTQx
MjRkYTRiMWI3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9i
b290c3RyYXAKKysrIC9kZXYvbnVsbApAQCAtMSw2NiArMCwwIEBACi0jISAvYmluL3NoCi0jCi0j
IENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCi0jCi0jIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0jICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBu
YW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0jICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotIyAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0jIEFSRSBESVNDTEFJTUVELglJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0j
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotIyBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMg
U1VDSCBEQU1BR0UuCi0jCi0KLSNiYWlsIG91dCBvbiBlcnJvcgotc2V0IC1lCi0KLSNkZXRlY3Qg
KGcpbGlidG9vbGl6ZQotaWYgd2hpY2ggbGlidG9vbGl6ZSA+L2Rldi9udWxsCi10aGVuCi0JX0xJ
QlRPT0xJWkU9YHdoaWNoIGxpYnRvb2xpemVgCi1lbGlmIHdoaWNoIGdsaWJ0b29saXplID4vZGV2
L251bGwKLXRoZW4KLQlfTElCVE9PTElaRT1gd2hpY2ggZ2xpYnRvb2xpemVgCi1lbHNlCi0JZWNo
byAiRVJST1I6IEkgY2Fubm90IGZpbmQgbGlidG9vbGl6ZSBvciBnbGlidG9vbGl6ZSEiCi0JZXhp
dCAxCi1maQotCi0jZXhlY3V0ZSAoZylsaWJ0b29saXplCi0ke19MSUJUT09MSVpFfQotCi0jZXhl
Y3V0ZSBhY2xvY2FsCi1pZiBbIC1lIC91c3IvbG9jYWwvc2hhcmUvYWNsb2NhbCBdCi10aGVuCi0g
ICBhY2xvY2FsIC1JIC91c3IvbG9jYWwvc2hhcmUvYWNsb2NhbAotZWxpZiBbIC1lIC91c3Ivc2hh
cmUvYWNsb2NhbCBdCi10aGVuCi0gICBhY2xvY2FsIC1JIC91c3Ivc2hhcmUvYWNsb2NhbAotZWxz
ZQotICAgYWNsb2NhbAotZmkKLQotI2V4ZWN1dGUgYXV0b2NvbmYKLWF1dG9jb25mCi0KLSNnZW5l
cmF0ZSB0aGUgLi9jb25maWd1cmUKLWF1dG9tYWtlIC0tZm9yZWlnbiAtLWFkZC1taXNzaW5nIC0t
Y29weQotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvY29uZmlndXJlLmFjIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL2NvbmZpZ3VyZS5hYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMjMzOWVhN2I2NDU5M2MzOGNmNDdkYTI3Yjk3YTEzZDU4YTg2ZDAz
NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvY29uZmlndXJl
LmFjCisrKyAvZGV2L251bGwKQEAgLTEsMTk1ICswLDAgQEAKLWRubAotZG5sIENvcHlyaWdodCAo
QykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCi1kbmwKLWRubCBBbGwgcmlnaHRzIHJlc2VydmVk
LgotZG5sCi1kbmwgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci1kbmwgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi1kbmwgYXJlIG1ldDoKLWRubCAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotZG5sICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLWRubCAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotZG5sICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LWRubCAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotZG5sIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2pl
Y3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi1kbmwgICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
Ci1kbmwgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi1kbmwK
LWRubCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAotZG5sIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotZG5sIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi1kbmwgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLWRubCBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotZG5sIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCi1kbmwgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi1kbmwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLWRubCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi1kbmwgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotZG5sIFNVQ0ggREFNQUdFLgotZG5s
Ci0KLUFDX0lOSVQoW2xpYnVzcnNjdHBdLCBbMC45LjMuMF0pCi1BTV9JTklUX0FVVE9NQUtFCi0K
LUFDX1BST0dfQ0MKLUFDX1BST0dfTElCVE9PTAotQUNfQ0FOT05JQ0FMX0hPU1QKLUFDX0NPTkZJ
R19NQUNST19ESVIoW200XSkKLQotZG5sIERpc2FibGUgcGtnX2NvbmZpZyBzdXBwb3J0IGZvciBu
b3cKLWRubCBQS0dfUFJPR19QS0dfQ09ORklHCi1kbmwgUEtHX0lOU1RBTExESVIKLQotTElCQ0ZM
QUdTPSItRFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyAtRFNDVFBfU0lNUExFX0FMTE9DQVRPUiAt
RF9fVXNlcnNwYWNlX18iCi1BUFBDRkxBR1M9IiIKLQotY2FzZSAkaG9zdF9vcyBpbgotZGFyd2lu
KikKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlv
bnMgLVduby1hZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIgLURfX0FQUExFX1VTRV9SRkNfMjI5MiIK
LSAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19BUFBMRV9fIC1EX19Vc2Vyc3BhY2Vfb3NfRGFy
d2luIgotICA7OwotZHJhZ29uZmx5KikKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1wdGhy
ZWFkIgotICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX0RyYWdvbkZseV9fIC1EX19Vc2Vyc3Bh
Y2Vfb3NfRHJhZ29uRmx5IgotICA7OwotZnJlZWJzZCopCi0gIENGTEFHUz0iJENGTEFHUyAtc3Rk
PWM5OSAtcHRocmVhZCIKLSAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXEgY2xhbmc7IHRoZW4K
LSAgICBDRkxBR1M9IiRDRkxBR1MgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9uIC1Xbm8tYWRk
cmVzcy1vZi1wYWNrZWQtbWVtYmVyIgotICAgIExERkxBR1M9IiRMREZMQUdTIC1RdW51c2VkLWFy
Z3VtZW50cyIKLSAgZmkKLSAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19GcmVlQlNEX18gLURf
X1VzZXJzcGFjZV9vc19GcmVlQlNEIgotICA7OwotbGludXgqKQotICBDRkxBR1M9IiRDRkxBR1Mg
LXN0ZD1jOTkgLXB0aHJlYWQgLURfR05VX1NPVVJDRSIKLSAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdT
IC1EX19Vc2Vyc3BhY2Vfb3NfTGludXgiCi0gIDs7Ci1uZXRic2QqKQotICBDRkxBR1M9IiRDRkxB
R1MgLXN0ZD1jOTkgLXB0aHJlYWQiCi0gIExJQkNGTEFHUz0iJExJQkNGTEFHUyAtVV9fTmV0QlNE
X18gLURfX1VzZXJzcGFjZV9vc19OZXRCU0QiCi0gIDs7Ci1vcGVuYnNkKikKLSAgQ0ZMQUdTPSIk
Q0ZMQUdTIC1zdGQ9Yzk5IC1wdGhyZWFkIgotICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX09w
ZW5CU0RfXyAtRF9fVXNlcnNwYWNlX29zX09wZW5CU0QiCi0gIDs7Ci1zb2xhcmlzKikKLSAgQ0ZM
QUdTPSIkQ0ZMQUdTIC1EX1hQRzRfMiIKLSAgOzsKLWVzYWMKLQotaWYgdGVzdCAieCRHQ0MiID0g
Inh5ZXMiIC1vICJ4JENDIiA9ICJ4Y2xhbmciIDsgdGhlbgotICAgICAgICBhY19zdXBwb3J0c19n
Y2NfZmxhZ3M9eWVzCi1maQotCi1pZiB0ZXN0ICJ4JGFjX3N1cHBvcnRzX2djY19mbGFncyIgPSAi
eHllcyIgOyB0aGVuCi0gICAgICAgIENGTEFHUz0iJENGTEFHUyAtcGVkYW50aWMgLVdhbGwiCi1m
aQotCi1BQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB3ZSBzaG91bGQgdHJlYXQgY29tcGlsZXIgd2Fy
bmluZ3MgYXMgZXJyb3JzKQotQUNfQVJHX0VOQUJMRSh3YXJuaW5ncy1hcy1lcnJvcnMsCi0gIEFD
X0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtd2FybmluZ3MtYXMtZXJyb3JzXSwKLSAgICAgICAgICAg
ICAgICAgIFt0cmVhdCB3YXJuaW5ncyBhcyBlcnJvcnMgKG9ubHkgZm9yIEdDQyBvciBjbGFuZykg
QDw6QGRlZmF1bHQ9eWVzQDo+QF0pLAotICAgIGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnM9JGVu
YWJsZXZhbCxlbmFibGVfd2FybmluZ3NfYXNfZXJyb3JzPXllcykKLWlmIHRlc3QgIngkYWNfc3Vw
cG9ydHNfZ2NjX2ZsYWdzIiA9ICJ4eWVzIiAtYSB4JGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnMg
PSB4eWVzOyB0aGVuCi0gICAgICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgICAgICBDRkxBR1M9
IiRDRkxBR1MgLVdlcnJvciIKLWVsc2UKLSAgICAgICAgQUNfTVNHX1JFU1VMVChubykKLWZpCi0K
LUFDX0FSR19FTkFCTEUoaW52YXJpYW50cywKLSAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1p
bnZhcmlhbnRzXSwKLSAgICAgICAgICAgICAgICAgIFthZGQgYWRkaXRpb25hbCBydW50aW1lIGNo
ZWNrcyBAPDpAZGVmYXVsdD1ub0A6PkBdKSwKLSAgICBlbmFibGVfaW52YXJpYW50cz0kZW5hYmxl
dmFsLGVuYWJsZV9pbnZhcmlhbnRzPW5vKQotaWYgdGVzdCB4JGVuYWJsZV9pbnZhcmlhbnRzID0g
eHllczsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoSU5WQVJJQU5UUywgMSwgW0FkZCBhZGRpdGlv
bmFsIHJ1bnRpbWUgY2hlY2tzXSkKLWZpCi0KLUFDX0FSR19FTkFCTEUoZGVidWcsCi0gIEFDX0hF
TFBfU1RSSU5HKCBbLS1lbmFibGUtZGVidWddLAotICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUg
ZGVidWcgaW5mb3JtYXRpb24gQDw6QGRlZmF1bHQ9eWVzQDo+QF0pLAotICAgIGVuYWJsZV9kZWJ1
Zz0kZW5hYmxldmFsLGVuYWJsZV9kZWJ1Zz15ZXMpCi1pZiB0ZXN0IHgkZW5hYmxlX2RlYnVnID0g
eHllczsgdGhlbgotICAgICAgICBBQ19ERUZJTkUoU0NUUF9ERUJVRywgMSwgW1Byb3ZpZGUgZGVi
dWcgaW5mb3JtYXRpb25dKQotICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLWcgLU8wIgotZmkKLQot
QUNfQVJHX0VOQUJMRShpbmV0LAotICBBQ19IRUxQX1NUUklORyggWy0tZW5hYmxlLWluZXRdLAot
ICAgICAgICAgICAgICAgICAgW1N1cHBvcnQgSVB2NCBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCi0g
ICAgZW5hYmxlX2luZXQ9JGVuYWJsZXZhbCxlbmFibGVfaW5ldD15ZXMpCi1pZiB0ZXN0IHgkZW5h
YmxlX2luZXQgPSB4eWVzOyB0aGVuCi0gICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElO
RVQiCi0gICAgICAgIEFDX0RFRklORShJTkVULCAxLCBbU3VwcG9ydCBJUHY0XSkKLWZpCi0KLUFD
X0FSR19FTkFCTEUoaW5ldDYsCi0gIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtaW5ldDZdLAot
ICAgICAgICAgICAgICAgICAgW1N1cHBvcnQgSVB2NiBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCi0g
ICAgZW5hYmxlX2luZXQ2PSRlbmFibGV2YWwsZW5hYmxlX2luZXQ2PXllcykKLWlmIHRlc3QgeCRl
bmFibGVfaW5ldDYgPSB4eWVzOyB0aGVuCi0gICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAt
RElORVQ2IgotICAgICAgICBBQ19ERUZJTkUoSU5FVDYsIDEsIFtTdXBwb3J0IElQdjZdKQotZmkK
LQotQUNfQVJHX0VOQUJMRShwcm9ncmFtcywKLSAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1w
cm9ncmFtc10sCi0gICAgICAgICAgICAgICAgICBbYnVpbGQgZXhhbXBsZSBwcm9ncmFtcyBAPDpA
ZGVmYXVsdD15ZXNAOj5AXSksCi0gICAgZW5hYmxlX3Byb2dyYW1zPSRlbmFibGV2YWwsZW5hYmxl
X3Byb2dyYW1zPXllcykKLWlmIHRlc3QgeCRlbmFibGVfcHJvZ3JhbXMgPSB4eWVzOyB0aGVuCi0g
ICAgICAgIEFDX0NPTkZJR19GSUxFUyhwcm9ncmFtcy9NYWtlZmlsZSkKLWZpCi0KLUFDX0NIRUNL
X1RZUEUoc2l6ZV90KQotQUNfQ0hFQ0tfVFlQRShzc2l6ZV90KQotCi1BQ19DSEVDS19GVU5DUyhz
b2NrZXQsICwgQUNfQ0hFQ0tfTElCKHNvY2tldCwgc29ja2V0KSkKLUFDX0NIRUNLX0ZVTkNTKGlu
ZXRfYWRkciwgLCBBQ19DSEVDS19MSUIobnNsLCBpbmV0X2FkZHIpKQotCi1BQ19DSEVDS19IRUFE
RVJTKHN0ZGF0b21pYy5oKQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvcXVldWUuaCkKLUFDX0NIRUNL
X0hFQURFUlMobGludXgvaWZfYWRkci5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5o
Pl0pCi1BQ19DSEVDS19IRUFERVJTKGxpbnV4L3J0bmV0bGluay5oLCBbXSwgW10sIFsjaW5jbHVk
ZSA8c3lzL3NvY2tldC5oPl0pCi1BQ19DSEVDS19IRUFERVJTKG5ldGluZXQvaXBfaWNtcC5oLCBb
XSwgW10sIFsjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPl0pCi0KLUFDX0NIRUNLX01FTUJFUihzdHJ1
Y3Qgc29ja2FkZHIuc2FfbGVuLAotICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1NBX0xF
TiwgMSwgW0RlZmluZSB0aGlzIGlmIHlvdXIgc3RhY2sgaGFzIHNhX2xlbiBpbiBzb2NrYWRkciBz
dHJ1Y3QuXSksLAotICAgICAgICAgICAgICAgIFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotICAg
ICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICAgICAgICAgICAgICAgICNl
bmRpZgotICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCi0KLUFDX0NI
RUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHJfaW4uc2luX2xlbiwKLSAgICAgICAgICAgICAgICBB
Q19ERUZJTkUoSEFWRV9TSU5fTEVOLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciBJUHY0IGhhcyBz
aW5fbGVuIGluIHNvY2thZGRyX2luIHN0cnVjdC5dKSwsCi0gICAgICAgICAgICAgICAgWyNpZmRl
ZiBIQVZFX1NZU19UWVBFU19ICi0gICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KLSAgICAgICAgICAgICAgICAgI2VuZGlmCi0gICAgICAgICAgICAgICAgICNpbmNsdWRlIDxu
ZXRpbmV0L2luLmg+XSkKLQotQUNfQ0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkcl9pbjYuc2lu
Nl9sZW4sCi0gICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfU0lONl9MRU4sIDEsIFtEZWZp
bmUgdGhpcyBpZiB5b3VyIElQdjYgaGFzIHNpbjZfbGVuIGluIHNvY2thZGRyX2luNiBzdHJ1Y3Qu
XSksLAotICAgICAgICAgICAgICAgIFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAotICAgICAgICAg
ICAgICAgICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0gICAgICAgICAgICAgICAgICNlbmRpZgot
ICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPl0pCi0KLUFDX0NIRUNLX01F
TUJFUihzdHJ1Y3Qgc29ja2FkZHJfY29ubi5zY29ubl9sZW4sCi0gICAgICAgICAgICAgICAgQUNf
REVGSU5FKEhBVkVfU0NPTk5fTEVOLCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciB1c2VybGFuZCBz
dGFjayBoYXMgc2Nvbm5fbGVuIGluIHNvY2thZGRyX2Nvbm4gc3RydWN0Ll0pLCwKLSAgICAgICAg
ICAgICAgICBbI2luY2x1ZGUgInVzcnNjdHBsaWIvdXNyc2N0cC5oIl0pCi0KLUFDX01TR19DSEVD
S0lORyhmb3Igc29ja2xlbl90KQotQUNfVFJZX0NPTVBJTEUoWyNpZmRlZiBIQVZFX1NZU19UWVBF
U19ICi0gICAgICAgICAgICAgICAgI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotICAgICAgICAgICAg
ICAgICNlbmRpZgotICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKLSAg
ICAgICAgICAgICAgIFtzb2NrbGVuX3QgeDsgeCA9IDE7IHJldHVybiAoKGludCl4KTtdLAotICAg
ICAgICAgICAgICAgW0FDX01TR19SRVNVTFQoeWVzKV0sCi0gICAgICAgICAgICAgICBbQUNfTVNH
X1JFU1VMVChpbnQpCi0gICAgICAgICAgICAgICAgQUNfREVGSU5FKHNvY2tsZW5fdCwgaW50LCBb
RGVmaW5lIGEgdHlwZSBmb3Igc29ja2xlbl90Ll0pXSkKLQotQUNfQ19CSUdFTkRJQU4KLQotQUNf
U1VCU1QoW0xJQkNGTEFHU10pCi1BQ19TVUJTVChbQVBQQ0ZMQUdTXSkKLWRubCBBQ19DT05GSUdf
RklMRVMoW3VzcnNjdHAucGNdKQotQUNfT1VUUFVUKE1ha2VmaWxlIHVzcnNjdHBsaWIvTWFrZWZp
bGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvbG9jYWxjaGFuZ2VzLnBhdGNoIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL2xvY2FsY2hhbmdlcy5wYXRjaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4
YzJlNDhjNTM5MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMApkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk1YjViOWJhODkyMmQxNTRlZGUxMjg3MGJi
NDdmY2Q1YWMzODgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC9wcm9ncmFtcy8uZ2l0YXR0cmlidXRlcworKysgL2Rldi9udWxsCkBAIC0xLDEwICswLDAgQEAK
LWRpc2NhcmRfc2VydmVyLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotZWNob19zZXJ2
ZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1la3JfY2xpZW50LmMgc3ZuLXByb3Bl
cnRpZXM9YWxsb3ctdGFicz1vbgotZWtyX2xvb3AuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJz
PW9uCi1la3JfbG9vcF9vZmZsb2FkLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotZWty
X3BlZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1la3Jfc2VydmVyLmMgc3ZuLXBy
b3BlcnRpZXM9YWxsb3ctdGFicz1vbgotcnRjd2ViLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFi
cz1vbgotdGVzdF90aW1lci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXRzY3RwLmMg
c3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL0NNYWtlTGlz
dHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAzMDI2ZGRjZTFiZGRjZDg2YjA4ZjE1OGVmYWI0OWNlNTgwODE0NDM3Li4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4
dAorKysgL2Rldi9udWxsCkBAIC0xLDk5ICswLDAgQEAKLSMKLSMgQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTUgT2xlZyBBbGV4ZWVua292Ci0jIENvcHlyaWdodCAoQykgMjAxNS0yMDE3IEZlbGl4IFdl
aW5yYW5rCi0jCi0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0jCi0jIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSMgYXJlIG1ldDoKLSMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0jIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0jICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSMKLSMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0jIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCi0jIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0jIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0jIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotIyBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0jIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSMgU1VDSCBEQU1BR0UuCi0jCi0KLQotIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBJTkNMVURFIE1PRFVMRVMK
LSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaW5j
bHVkZShDaGVja0luY2x1ZGVGaWxlKQotCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgQ0hFQ0sgSU5DTFVERVMKLSMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaW5jbHVkZV9kaXJlY3Rvcmllcygk
e0NNQUtFX1NPVVJDRV9ESVJ9L3VzcnNjdHBsaWIpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBPUyBERVBFTkRFTlQKLSMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotaWYgKCR7Q01BS0VfU1lT
VEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURfR05VX1NP
VVJDRSkKLWVuZGlmICgpCi0KLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEYXJ3
aW4iKQotICAgIGFkZF9kZWZpbml0aW9ucygtRF9fQVBQTEVfVVNFX1JGQ18yMjkyKQotZW5kaWYg
KCkKLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
Ci0jIE1JU0MKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKLQotZmluZF9wYWNrYWdlKFRocmVhZHMpCi0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBQUk9HUkFNUwotIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi1zZXQoQ0hFQ0tfUFJPR1JBTVMKLSAg
ICBjbGllbnQuYwotICAgIGRheXRpbWVfc2VydmVyLmMKLSAgICBkaXNjYXJkX3NlcnZlci5jCi0g
ICAgZWNob19zZXJ2ZXIuYwotICAgIGVrcl9jbGllbnQuYwotICAgIGVrcl9sb29wX29mZmxvYWQu
YwotICAgIGVrcl9sb29wLmMKLSAgICBla3JfcGVlci5jCi0gICAgZWtyX3NlcnZlci5jCi0gICAg
aHR0cF9jbGllbnQuYwotICAgIHJ0Y3dlYi5jCi0gICAgdGVzdF9saWJtZ210LmMKLSAgICB0ZXN0
X3RpbWVyLmMKLSAgICB0c2N0cC5jCi0pCi0KLWZvcmVhY2ggKFNPVVJDRV9GSUxFICR7Q0hFQ0tf
UFJPR1JBTVN9KQotICAgIGdldF9maWxlbmFtZV9jb21wb25lbnQoU09VUkNFX0ZJTEVfV0UgJHtT
T1VSQ0VfRklMRX0gTkFNRV9XRSkKLSAgICBhZGRfZXhlY3V0YWJsZSgKLSAgICAgICAgJHtTT1VS
Q0VfRklMRV9XRX0KLSAgICAgICAgJHtTT1VSQ0VfRklMRX0KLSAgICApCi0KLSAgICB0YXJnZXRf
bGlua19saWJyYXJpZXMoJHtTT1VSQ0VfRklMRV9XRX0KLSAgICAgICAgJHtQUk9HUkFNU19MSU5L
X0xJQlJBUll9Ci0gICAgICAgICR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0KLSAgICApCi1lbmRm
b3JlYWNoICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvTWFrZWZpbGUuYW0gYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvTWFrZWZp
bGUuYW0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ1YzI0OGZiYTNlOWM4NjhjMzk2
YjM3ZjM2MmYwMTFmNjI5MDNiZTUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3Byb2dyYW1zL01ha2VmaWxlLmFtCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAs
MCBAQAotIwotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotIwotIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgotIwotIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0jIGFyZSBt
ZXQ6Ci0jIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0jICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotIyAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSMg
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0jCi0jIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECi0jIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotIyBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotIyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKLSMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotIyBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0jIFNVQ0ggREFNQUdFLgotIwotCi1BTV9DUFBGTEFHUyA9IC1JJChzcmNkaXIpLy4u
L3VzcnNjdHBsaWIKLUVYVFJBX0RJU1QgPSBNYWtlZmlsZS5ubWFrZSB0c2N0cC5jIGRheXRpbWVf
c2VydmVyLmMgZGlzY2FyZF9zZXJ2ZXIuYyBlY2hvX3NlcnZlci5jIGNsaWVudC5jIHJ0Y3dlYi5j
IGVrcl9jbGllbnQuYyBla3Jfc2VydmVyLmMgZWtyX2xvb3AuYyBla3JfbG9vcF9vZmZsb2FkLmMg
dGVzdF9saWJtZ210LmMgaHR0cF9jbGllbnQuYwotCi1ub2luc3RfUFJPR1JBTVMgPSB0c2N0cCBk
YXl0aW1lX3NlcnZlciBkaXNjYXJkX3NlcnZlciBlY2hvX3NlcnZlciBjbGllbnQgcnRjd2ViIGVr
cl9jbGllbnQgZWtyX3NlcnZlciBla3JfcGVlciBla3JfbG9vcCBla3JfbG9vcF9vZmZsb2FkIHRl
c3RfbGlibWdtdCB0ZXN0X3RpbWVyIGh0dHBfY2xpZW50Ci10ZXN0X2xpYm1nbXRfU09VUkNFUyA9
IHRlc3RfbGlibWdtdC5jCi10ZXN0X2xpYm1nbXRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVz
cnNjdHAubGEKLXRlc3RfdGltZXJfU09VUkNFUyA9IHRlc3RfdGltZXIuYwotdGVzdF90aW1lcl9M
REFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQotdHNjdHBfU09VUkNFUyA9IHRzY3Rw
LmMKLXRzY3RwX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1kYXl0aW1lX3Nl
cnZlcl9TT1VSQ0VTID0gZGF5dGltZV9zZXJ2ZXIuYwotZGF5dGltZV9zZXJ2ZXJfTERBREQgPSAu
Li91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLWRpc2NhcmRfc2VydmVyX1NPVVJDRVMgPSBkaXNj
YXJkX3NlcnZlci5jCi1kaXNjYXJkX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNy
c2N0cC5sYQotZWNob19zZXJ2ZXJfU09VUkNFUyA9IGVjaG9fc2VydmVyLmMKLWVjaG9fc2VydmVy
X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1jbGllbnRfU09VUkNFUyA9IGNs
aWVudC5jCi1jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLXJ0Y3dl
Yl9TT1VSQ0VTID0gcnRjd2ViLmMKLXJ0Y3dlYl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNy
c2N0cC5sYQotZWtyX3NlcnZlcl9TT1VSQ0VTID0gZWtyX3NlcnZlci5jCi1la3Jfc2VydmVyX0xE
QUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1la3JfY2xpZW50X1NPVVJDRVMgPSBl
a3JfY2xpZW50LmMKLWVrcl9jbGllbnRfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAu
bGEKLWVrcl9wZWVyX1NPVVJDRVMgPSBla3JfcGVlci5jCi1la3JfcGVlcl9MREFERCA9IC4uL3Vz
cnNjdHBsaWIvbGlidXNyc2N0cC5sYQotZWtyX2xvb3BfU09VUkNFUyA9IGVrcl9sb29wLmMKLWVr
cl9sb29wX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCi1la3JfbG9vcF9vZmZs
b2FkX1NPVVJDRVMgPSBla3JfbG9vcF9vZmZsb2FkLmMKLWVrcl9sb29wX29mZmxvYWRfTERBREQg
PSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKLWh0dHBfY2xpZW50X1NPVVJDRVMgPSBodHRw
X2NsaWVudC5jCi1odHRwX2NsaWVudF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5s
YQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3Byb2dyYW1zL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL01ha2VmaWxlLm5t
YWtlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMWM0MTFjZWY2ODllYjg4Yjk4YjRm
ZjY4ZmViNDBmOWI0ZjgzNjRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC9wcm9ncmFtcy9NYWtlZmlsZS5ubWFrZQorKysgL2Rldi9udWxsCkBAIC0xLDEyNiAr
MCwwIEBACi0jDQotIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbg0KLSMN
Ci0jIEFsbCByaWdodHMgcmVzZXJ2ZWQuDQotIw0KLSMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQotIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMN
Ci0jIGFyZSBtZXQ6DQotIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KLSMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLg0KLSMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQNCi0j
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUNCi0jICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uDQotIyAzLiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycw0KLSMgICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlDQotIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4NCi0jDQotIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORA0KLSMgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFDQotIyBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQ0KLSMgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCi0jIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMDQotIyBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUw0KLSMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pDQotIyBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVA0KLSMg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQ0KLSMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KLSMgU1VDSCBEQU1BR0UuDQotIw0K
LQ0KLUNGTEFHUz0vVzMgL1dYIC9JLi5cdXNyc2N0cGxpYg0KLQ0KLUNWQVJTRExMPS1ESU5FVCAt
RElORVQ2DQotDQotTElOS0ZMQUdTPS9MSUJQQVRIOi4uXHVzcnNjdHBsaWIgdXNyc2N0cC5saWIN
Ci0NCi0uYy5vYmo6Og0KLQkkKENDKSAkKENWQVJTRExMKSAkKENGTEFHUykgLUZkLlwgLWMgJDwN
Ci0NCi1hbGw6IFwNCi0JY2xpZW50IFwNCi0JZGF5dGltZV9zZXJ2ZXIgXA0KLQlkaXNjYXJkX3Nl
cnZlciBcDQotCWVjaG9fc2VydmVyIFwNCi0JdHNjdHAgXA0KLQlydGN3ZWIgXA0KLQlla3JfY2xp
ZW50IFwNCi0JZWtyX3NlcnZlciBcDQotCWVrcl9wZWVyIFwNCi0JZWtyX2xvb3AgXA0KLQl0ZXN0
X2xpYm1nbXQgXA0KLQlodHRwX2NsaWVudA0KLQ0KLWNsaWVudDoNCi0JJChDQykgJChDRkxBR1Mp
ICQoQ1ZBUlNETEwpIC1jIGNsaWVudC5jDQotCWxpbmsgLW91dDpjbGllbnQuZXhlIGNsaWVudC5v
YmogJChMSU5LRkxBR1MpDQotDQotZGF5dGltZV9zZXJ2ZXI6DQotCSQoQ0MpICQoQ0ZMQUdTKSAk
KENWQVJTRExMKSAtYyBkYXl0aW1lX3NlcnZlci5jDQotCWxpbmsgLW91dDpkYXl0aW1lX3NlcnZl
ci5leGUgZGF5dGltZV9zZXJ2ZXIub2JqICQoTElOS0ZMQUdTKQ0KLQ0KLWRpc2NhcmRfc2VydmVy
Og0KLQkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZGlzY2FyZF9zZXJ2ZXIuYw0KLQls
aW5rIC1vdXQ6ZGlzY2FyZF9zZXJ2ZXIuZXhlIGRpc2NhcmRfc2VydmVyLm9iaiAkKExJTktGTEFH
UykNCi0NCi1lY2hvX3NlcnZlcjoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVj
aG9fc2VydmVyLmMNCi0JbGluayAtb3V0OmVjaG9fc2VydmVyLmV4ZSBlY2hvX3NlcnZlci5vYmog
JChMSU5LRkxBR1MpDQotDQotdHNjdHA6DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAt
YyB0c2N0cC5jDQotCWxpbmsgLW91dDp0c2N0cC5leGUgdHNjdHAub2JqICQoTElOS0ZMQUdTKQ0K
LQ0KLXJ0Y3dlYjoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIHJ0Y3dlYi5jDQot
CWxpbmsgLW91dDpydGN3ZWIuZXhlIHJ0Y3dlYi5vYmogJChMSU5LRkxBR1MpDQotDQotZWtyX2Ns
aWVudDoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9jbGllbnQuYw0KLQls
aW5rIC1vdXQ6ZWtyX2NsaWVudC5leGUgZWtyX2NsaWVudC5vYmogJChMSU5LRkxBR1MpDQotDQot
ZWtyX3NlcnZlcjoNCi0JJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9zZXJ2ZXIu
Yw0KLQlsaW5rIC1vdXQ6ZWtyX3NlcnZlci5leGUgZWtyX3NlcnZlci5vYmogJChMSU5LRkxBR1Mp
DQotDQotZWtyX3BlZXI6DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBla3JfcGVl
ci5jDQotCWxpbmsgLW91dDpla3JfcGVlci5leGUgZWtyX3BlZXIub2JqICQoTElOS0ZMQUdTKQ0K
LQ0KLWVrcl9sb29wOg0KLQkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX2xvb3Au
Yw0KLQlsaW5rIC1vdXQ6ZWtyX2xvb3AuZXhlIGVrcl9sb29wLm9iaiAkKExJTktGTEFHUykNCi0N
Ci10ZXN0X2xpYm1nbXQ6DQotCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyB0ZXN0X2xp
Ym1nbXQuYw0KLQlsaW5rIC1vdXQ6dGVzdF9saWJtZ210LmV4ZSB0ZXN0X2xpYm1nbXQub2JqICQo
TElOS0ZMQUdTKQ0KLQ0KLWh0dHBfY2xpZW50Og0KLQkkKENDKSAkKENGTEFHUykgJChDVkFSU0RM
TCkgLWMgaHR0cF9jbGllbnQuYw0KLQlsaW5rIC1vdXQ6aHR0cF9jbGllbnQuZXhlIGh0dHBfY2xp
ZW50Lm9iaiAkKExJTktGTEFHUykNCi0NCi1jbGVhbjoNCi0JZGVsIC9GIGNsaWVudC5leGUNCi0J
ZGVsIC9GIGNsaWVudC5vYmoNCi0JZGVsIC9GIGRheXRpbWVfc2VydmVyLmV4ZQ0KLQlkZWwgL0Yg
ZGF5dGltZV9zZXJ2ZXIub2JqDQotCWRlbCAvRiBkaXNjYXJkX3NlcnZlci5leGUNCi0JZGVsIC9G
IGRpc2NhcmRfc2VydmVyLm9iag0KLQlkZWwgL0YgZWNob19zZXJ2ZXIuZXhlDQotCWRlbCAvRiBl
Y2hvX3NlcnZlci5vYmoNCi0JZGVsIC9GIHRzY3RwLmV4ZQ0KLQlkZWwgL0YgdHNjdHAub2JqDQot
CWRlbCAvRiBydGN3ZWIuZXhlDQotCWRlbCAvRiBydGN3ZWIub2JqDQotCWRlbCAvRiBla3JfY2xp
ZW50LmV4ZQ0KLQlkZWwgL0YgZWtyX2NsaWVudC5vYmoNCi0JZGVsIC9GIGVrcl9zZXJ2ZXIuZXhl
DQotCWRlbCAvRiBla3Jfc2VydmVyLm9iag0KLQlkZWwgL0YgZWtyX3BlZXIuZXhlDQotCWRlbCAv
RiBla3JfcGVlci5vYmoNCi0JZGVsIC9GIGVrcl9sb29wLmV4ZQ0KLQlkZWwgL0YgZWtyX2xvb3Au
b2JqDQotCWRlbCAvRiB0ZXN0X2xpYm1nbXQuZXhlDQotCWRlbCAvRiB0ZXN0X2xpYm1nbXQub2Jq
DQotCWRlbCAvRiBodHRwX2NsaWVudC5leGUNCi0JZGVsIC9GIGh0dHBfY2xpZW50Lm9iag0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC9wcm9ncmFtcy9jbGllbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9jbGllbnQuYwpkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGRjYWQ2ZjM3YTk1MjQyYWJmNDRkY2EzOTY0Njg5M2Y3NzNhOTdh
OS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMv
Y2xpZW50LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRo
ZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT
JycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKgotICogVXNhZ2U6IGNsaWVu
dCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0
XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgot
I2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxpby5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi1pbnQgZG9uZSA9IDA7
Ci0KLSNpZmRlZiBfV0lOMzIKLXR5cGVkZWYgY2hhciogY2FkZHJfdDsKLSNlbmRpZgotCi1zdGF0
aWMgaW50Ci1yZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0
b3JlIGFkZHIsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qg
c2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQlpZiAoZGF0
YSA9PSBOVUxMKSB7Ci0JCWRvbmUgPSAxOwotCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwotCX0gZWxz
ZSB7Ci0jaWZkZWYgX1dJTjMyCi0JCV93cml0ZShfZmlsZW5vKHN0ZG91dCksIGRhdGEsICh1bnNp
Z25lZCBpbnQpZGF0YWxlbik7Ci0jZWxzZQotCQlpZiAod3JpdGUoZmlsZW5vKHN0ZG91dCksIGRh
dGEsIGRhdGFsZW4pIDwgMCkgewotCQkJcGVycm9yKCJ3cml0ZSIpOwotCQl9Ci0jZW5kaWYKLQkJ
ZnJlZShkYXRhKTsKLQl9Ci0JcmV0dXJuICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNv
bnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwg
Zm9ybWF0KTsKLQl2cHJpbnRmKGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAot
bWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotCXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci0J
c3RydWN0IHNvY2thZGRyICphZGRyLCAqYWRkcnM7Ci0Jc3RydWN0IHNvY2thZGRyX2luIGFkZHI0
OwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7Ci0Jc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVu
Y2FwczsKLQlzdHJ1Y3Qgc2N0cHN0YXQgc3RhdDsKLQljaGFyIGJ1ZmZlcls4MF07Ci0JaW50IGks
IG47Ci0KLQlpZiAoYXJnYyA8IDMpIHsKLQkJcHJpbnRmKCIlcyIsICJVc2FnZTogY2xpZW50IHJl
bW90ZV9hZGRyIHJlbW90ZV9wb3J0IGxvY2FsX3BvcnQgbG9jYWxfZW5jYXBzX3BvcnQgcmVtb3Rl
X2VuY2Fwc19wb3J0XG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChhcmdjID4gNCkgewot
CQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzRdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9IGVs
c2UgewotCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9Ci0jaWZk
ZWYgU0NUUF9ERUJVRwotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVC
VUdfTk9ORSk7Ci0jZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7
Ci0JaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU1RSRUFNLCBJUFBS
T1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7Ci0JCXBlcnJv
cigidXNyc2N0cF9zb2NrZXQiKTsKLQl9Ci0JaWYgKGFyZ2MgPiAzKSB7Ci0JCW1lbXNldCgodm9p
ZCAqKSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZF
X1NJTjZfTEVOCi0JCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OwotI2VuZGlmCi0JCWFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0JCWFkZHI2LnNpbjZf
cG9ydCA9IGh0b25zKGF0b2koYXJndlszXSkpOwotCQlhZGRyNi5zaW42X2FkZHIgPSBpbjZhZGRy
X2FueTsKLQkJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgewotCQkJcGVycm9yKCJiaW5kIik7
Ci0JCX0KLQl9Ci0JaWYgKGFyZ2MgPiA1KSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkg
PSBBRl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzVdKSk7Ci0J
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9V
RFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihz
dHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigic2V0c29ja29wdCIpOwot
CQl9Ci0JfQotCW1lbXNldCgodm9pZCAqKSZhZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOwotCW1lbXNldCgodm9pZCAqKSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlhZGRyNC5zaW5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRkcjYu
c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQlhZGRyNC5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCWFk
ZHI0LnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JYWRkcjYuc2luNl9wb3J0ID0g
aHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgYXJndlsxXSwg
JmFkZHI2LnNpbjZfYWRkcikgPT0gMSkgewotCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChz
dHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAw
KSB7Ci0JCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOwotCQl9Ci0JfSBlbHNlIGlmIChpbmV0
X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJmFkZHI0LnNpbl9hZGRyKSA9PSAxKSB7Ci0JCWlmICh1
c3JzY3RwX2Nvbm5lY3Qoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsK
LQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ZigiSWxsZWdhbCBkZXN0aW5hdGlvbiBhZGRyZXNzLlxu
Iik7Ci0JfQotCWlmICgobiA9IHVzcnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycykpIDwg
MCkgewotCQlwZXJyb3IoInVzcnNjdHBfZ2V0bGFkZHJzIik7Ci0JfSBlbHNlIHsKLQkJYWRkciA9
IGFkZHJzOwotCQlwcmludGYoIkxvY2FsIGFkZHJlc3NlczogIik7Ci0JCWZvciAoaSA9IDA7IGkg
PCBuOyBpKyspIHsKLQkJCWlmIChpID4gMCkgewotCQkJCXByaW50ZigiJXMiLCAiLCAiKTsKLQkJ
CX0KLQkJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0JCQljYXNlIEFGX0lORVQ6Ci0JCQl7
Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0JCQkJY2hhciBidWZbSU5FVF9BRERSU1RS
TEVOXTsKLQkJCQljb25zdCBjaGFyICpuYW1lOwotCi0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKWFkZHI7Ci0JCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRk
ciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOwotCQkJCXByaW50ZigiJXMiLCBuYW1lKTsKLSNpZm5k
ZWYgSEFWRV9TQV9MRU4KLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClh
ZGRyICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotI2VuZGlmCi0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7Ci0JCQkJY2hhciBidWZbSU5FVDZfQUREUlNUUkxFTl07Ci0JCQkJY29uc3QgY2hhciAqbmFt
ZTsKLQotCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJbmFtZSA9
IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RS
TEVOKTsKLQkJCQlwcmludGYoIiVzIiwgbmFtZSk7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCQkJ
YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSk7Ci0jZW5kaWYKLQkJCQlicmVhazsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJCWFkZHIgPSAoc3RydWN0IHNv
Y2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOwotI2VuZGlmCi0JCX0KLQkJ
cHJpbnRmKCIuXG4iKTsKLQkJdXNyc2N0cF9mcmVlbGFkZHJzKGFkZHJzKTsKLQl9Ci0JaWYgKChu
ID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywgMCwgJmFkZHJzKSkgPCAwKSB7Ci0JCXBlcnJvcigi
dXNyc2N0cF9nZXRwYWRkcnMiKTsKLQl9IGVsc2UgewotCQlhZGRyID0gYWRkcnM7Ci0JCXByaW50
ZigiUGVlciBhZGRyZXNzZXM6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCQlp
ZiAoaSA+IDApIHsKLQkJCQlwcmludGYoIiVzIiwgIiwgIik7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGFk
ZHItPnNhX2ZhbWlseSkgewotCQkJY2FzZSBBRl9JTkVUOgotCQkJewotCQkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOwotCQkJCWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07Ci0JCQkJY29uc3Qg
Y2hhciAqbmFtZTsKLQotCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJ
CW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERS
U1RSTEVOKTsKLQkJCQlwcmludGYoIiVzIiwgbmFtZSk7Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0J
CQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKLSNlbmRpZgotCQkJCWJyZWFrOwotCQkJfQotCQkJY2FzZSBBRl9J
TkVUNjoKLQkJCXsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQkJCWNoYXIgYnVm
W0lORVQ2X0FERFJTVFJMRU5dOwotCQkJCWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJCQlzaW42ID0g
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5F
VDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7Ci0JCQkJcHJpbnRm
KCIlcyIsIG5hbWUpOwotI2lmbmRlZiBIQVZFX1NBX0xFTgotCQkJCWFkZHIgPSAoc3RydWN0IHNv
Y2thZGRyICopKChjYWRkcl90KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwot
I2VuZGlmCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQot
I2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJf
dClhZGRyICsgYWRkci0+c2FfbGVuKTsKLSNlbmRpZgotCQl9Ci0JCXByaW50ZigiLlxuIik7Ci0J
CXVzcnNjdHBfZnJlZXBhZGRycyhhZGRycyk7Ci0JfQotCXdoaWxlICgoZmdldHMoYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSwgc3RkaW4pICE9IE5VTEwpICYmICFkb25lKSB7Ci0JCXVzcnNjdHBfc2Vu
ZHYoc29jaywgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSwgTlVMTCwgMCwgTlVMTCwgMCwgU0NUUF9T
RU5EVl9OT0lORk8sIDApOwotCX0KLQlpZiAoIWRvbmUpIHsKLQkJaWYgKHVzcnNjdHBfc2h1dGRv
d24oc29jaywgU0hVVF9XUikgPCAwKSB7Ci0JCQlwZXJyb3IoInVzcnNjdHBfc2h1dGRvd24iKTsK
LQkJfQotCX0KLQl3aGlsZSAoIWRvbmUpIHsKLSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMSoxMDAw
KTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQotCXVzcnNjdHBfZ2V0X3N0YXQoJnN0
YXQpOwotCXByaW50ZigiTnVtYmVyIG9mIHBhY2tldHMgKHNlbnQvcmVjZWl2ZWQpOiAoJXUvJXUp
LlxuIiwKLQkgICAgICAgc3RhdC5zY3Rwc19vdXRwYWNrZXRzLCBzdGF0LnNjdHBzX2lucGFja2V0
cyk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlT
bGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQotCXJldHVybigwKTsK
LX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlci5jIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2RheXRpbWVf
c2VydmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4YTBmY2I0NmQyZTRlZmUy
NzZlMmZlZjhjYTIyYjVhYmIzMzE1ODguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3Byb2dyYW1zL2RheXRpbWVfc2VydmVyLmMKKysrIC9kZXYvbnVsbApAQCAt
MSwxMzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEzIE1pY2hhZWwgVHVl
eGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBS
T0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqLwotCi0vKgotICogVXNhZ2U6IGRheXRpbWVfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9y
dF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9D
UlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgot
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHRpbWUuaD4KLSNpZm5kZWYgX1dJTjMy
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUg
PHVzcnNjdHAuaD4KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4u
KQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRmKGZv
cm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLSNkZWZpbmUgREFZVElNRV9QUElEIDQwCi1p
bnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2Nr
LCAqY29ubl9zb2NrOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCXN0cnVjdCBzY3RwX3Vk
cGVuY2FwcyBlbmNhcHM7Ci0Jc29ja2xlbl90IGFkZHJfbGVuOwotCWNoYXIgYnVmZmVyWzgwXTsK
LQl0aW1lX3Qgbm93OwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKLQotCWlmIChhcmdj
ID4gMSkgewotCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRm
KTsKLQl9IGVsc2UgewotCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsK
LQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29u
KFNDVFBfREVCVUdfTk9ORSk7Ci0jZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFj
a2hvbGUoMik7Ci0KLQlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBTT0NLX1NU
UkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgewotCQlw
ZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JfQotCWlmIChhcmdjID4gMikgewotCQltZW1zZXQo
JmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOwotCQllbmNhcHMuc3Vl
X2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMo
YXRvaShhcmd2WzJdKSk7Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19T
Q1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAo
c29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJv
cigic2V0c29ja29wdCIpOwotCQl9Ci0JfQotCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JYWRkci5zaW5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQlhZGRyLnNpbl9mYW1p
bHkgPSBBRl9JTkVUOwotCWFkZHIuc2luX3BvcnQgPSBodG9ucygxMyk7Ci0JYWRkci5zaW5fYWRk
ci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChz
dHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkg
ewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCX0KLQlpZiAodXNyc2N0cF9saXN0ZW4oc29j
aywgMSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKLQl9Ci0Jd2hpbGUgKDEp
IHsKLQkJYWRkcl9sZW4gPSAwOwotCQlpZiAoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHNv
Y2ssIE5VTEwsICZhZGRyX2xlbikpID09IE5VTEwpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXRp
bWUoJm5vdyk7Ci0jaWZkZWYgX1dJTjMyCi0JCV9zbnByaW50ZihidWZmZXIsIHNpemVvZihidWZm
ZXIpLCAiJXMiLCBjdGltZSgmbm93KSk7Ci0jZWxzZQotCQlzbnByaW50ZihidWZmZXIsIHNpemVv
ZihidWZmZXIpLCAiJXMiLCBjdGltZSgmbm93KSk7Ci0jZW5kaWYKLQkJc25kaW5mby5zbmRfc2lk
ID0gMDsKLQkJc25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCQlzbmRpbmZvLnNuZF9wcGlkID0gaHRv
bmwoREFZVElNRV9QUElEKTsKLQkJc25kaW5mby5zbmRfY29udGV4dCA9IDA7Ci0JCXNuZGluZm8u
c25kX2Fzc29jX2lkID0gMDsKLQkJdXNyc2N0cF9zZW5kdihjb25uX3NvY2ssIGJ1ZmZlciwgc3Ry
bGVuKGJ1ZmZlciksIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCi0JCSAgICAgICAgICAgICAg
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5G
TywgMCk7Ci0JCXVzcnNjdHBfY2xvc2UoY29ubl9zb2NrKTsKLQl9Ci0JdXNyc2N0cF9jbG9zZShz
b2NrKTsKLQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0J
CVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuICgw
KTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Rpc2Nh
cmRfc2VydmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJjNjdjZDVmYWExZTY5
ZGI4MWQ3YzU5ZDcwOWY0NjFmNzZlODcxNzEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMKKysrIC9kZXYvbnVsbApA
QCAtMSwyNDggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwg
VHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0vKgotICogVXNhZ2U6IGRpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNhcHNf
cG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5l
IF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2lu
Y2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5o
PgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgot
I2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0j
ZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQwCi0KLWNvbnN0IGludCB1c2VfY2IgPSAwOwotCi1zdGF0
aWMgaW50Ci1yZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0
b3JlIGFkZHIsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qg
c2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQljaGFyIG5h
bWVidWZbSU5FVDZfQUREUlNUUkxFTl07Ci0JY29uc3QgY2hhciAqbmFtZTsKLQl1aW50MTZfdCBw
b3J0OwotCi0JaWYgKGRhdGEpIHsKLQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgewot
CQkJcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwgKGludClk
YXRhbGVuKTsKLQkJfSBlbHNlIHsKLQkJCXN3aXRjaCAoYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNp
ZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6Ci0JCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVU
LCAmYWRkci5zaW4uc2luX2FkZHIsIG5hbWVidWYsIElORVRfQUREUlNUUkxFTik7Ci0JCQkJcG9y
dCA9IG50b2hzKGFkZHIuc2luLnNpbl9wb3J0KTsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYs
ICZhZGRyLnNpbjYuc2luNl9hZGRyLCBuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOKSwKLQkJCQlw
b3J0ID0gbnRvaHMoYWRkci5zaW42LnNpbjZfcG9ydCk7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJ
CWNhc2UgQUZfQ09OTjoKLSNpZmRlZiBfV0lOMzIKLQkJCQlfc25wcmludGYobmFtZWJ1ZiwgSU5F
VDZfQUREUlNUUkxFTiwgIiVwIiwgYWRkci5zY29ubi5zY29ubl9hZGRyKTsKLSNlbHNlCi0JCQkJ
c25wcmludGYobmFtZWJ1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIiVwIiwgYWRkci5zY29ubi5zY29u
bl9hZGRyKTsKLSNlbmRpZgotCQkJCW5hbWUgPSBuYW1lYnVmOwotCQkJCXBvcnQgPSBudG9ocyhh
ZGRyLnNjb25uLnNjb25uX3BvcnQpOwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQluYW1l
ID0gTlVMTDsKLQkJCQlwb3J0ID0gMDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXByaW50ZigiTXNn
IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAl
dSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKLQkJCSAgICAgICAoaW50KWRh
dGFsZW4sCi0JCQkgICAgICAgbmFtZSwKLQkJCSAgICAgICBwb3J0LAotCQkJICAgICAgIHJjdi5y
Y3Zfc2lkLAotCQkJICAgICAgIHJjdi5yY3Zfc3NuLAotCQkJICAgICAgIHJjdi5yY3ZfdHNuLAot
CQkJICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCi0JCQkgICAgICAgcmN2LnJjdl9jb250ZXh0
KTsKLQkJfQotCQlmcmVlKGRhdGEpOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi12b2lkCi1kZWJ1
Z19wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZh
X3N0YXJ0KGFwLCBmb3JtYXQpOwotCXZwcmludGYoZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsK
LX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0Jc3RydWN0IHNvY2tl
dCAqc29jazsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0Jc3RydWN0IHNjdHBfdWRwZW5j
YXBzIGVuY2FwczsKLQlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKLQl1aW50MTZfdCBldmVudF90
eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9QRUVSX0FERFJfQ0hBTkdFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9S
RU1PVEVfRVJST1IsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VW
RU5ULAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJ
T04sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZF
TlR9OwotCXVuc2lnbmVkIGludCBpOwotCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OwotCWNv
bnN0IGludCBvbiA9IDE7Ci0Jc3NpemVfdCBuOwotCWludCBmbGFnczsKLQlzb2NrbGVuX3QgZnJv
bV9sZW47Ci0JY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOwotCWNoYXIgbmFtZVtJTkVUNl9BRERS
U1RSTEVOXTsKLQlzb2NrbGVuX3QgaW5mb2xlbjsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdl9p
bmZvOwotCXVuc2lnbmVkIGludCBpbmZvdHlwZTsKLQotCWlmIChhcmdjID4gMSkgewotCQl1c3Jz
Y3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9IGVsc2Ugewot
CQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKLQl9Ci0jaWZkZWYgU0NU
UF9ERUJVRwotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfQUxM
KTsKLSNlbmRpZgotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKLQotCWlm
ICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NFUVBBQ0tFVCwgSVBQUk9U
T19TQ1RQLCB1c2VfY2I/cmVjZWl2ZV9jYjpOVUxMLCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkg
ewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JfQotCWlmICh1c3JzY3RwX3NldHNvY2tv
cHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiwgKGNvbnN0
IHZvaWQqKSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNy
c2N0cF9zZXRzb2Nrb3B0IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSIik7Ci0JfQotCW1lbXNl
dCgmYXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOwotCWF2LmFzc29jX2lk
ID0gU0NUUF9BTExfQVNTT0M7Ci0JYXYuYXNzb2NfdmFsdWUgPSA0NzsKLQotCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQsIChjb25zdCB2b2lk
KikmYXYsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7
Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfQ09OVEVYVCIpOwotCX0KLQlpZiAo
dXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNWUkNWSU5GTywg
Jm9uLCBzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFND
VFBfUkVDVlJDVklORk8iKTsKLQl9Ci0JaWYgKGFyZ2MgPiAyKSB7Ci0JCW1lbXNldCgmZW5jYXBz
LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVz
cy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShh
cmd2WzJdKSk7Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBT
Q1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigidXNy
c2N0cF9zZXRzb2Nrb3B0IFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCIpOwotCQl9Ci0JfQot
CW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fzc29jX2lkID0g
U0NUUF9GVVRVUkVfQVNTT0M7Ci0JZXZlbnQuc2Vfb24gPSAxOwotCWZvciAoaSA9IDA7IGkgPCAo
dW5zaWduZWQgaW50KShzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCkpOyBpKysp
IHsKLQkJZXZlbnQuc2VfdHlwZSA9IGV2ZW50X3R5cGVzW2ldOwotCQlpZiAodXNyc2N0cF9zZXRz
b2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBzaXplb2Yoc3Ry
dWN0IHNjdHBfZXZlbnQpKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFND
VFBfRVZFTlQiKTsKLQkJfQotCX0KLQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRkci5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCWFkZHIuc2luNl9mYW1p
bHkgPSBBRl9JTkVUNjsKLQlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKDkpOwotCWFkZHIuc2luNl9h
ZGRyID0gaW42YWRkcl9hbnk7Ci0JaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2th
ZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0JCXBlcnJv
cigidXNyc2N0cF9iaW5kIik7Ci0JfQotCWlmICh1c3JzY3RwX2xpc3Rlbihzb2NrLCAxKSA8IDAp
IHsKLQkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOwotCX0KLQl3aGlsZSAoMSkgewotCQlpZiAo
dXNlX2NiKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQlTbGVlcCgxKjEwMDApOwotI2Vsc2UKLQkJCXNs
ZWVwKDEpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJZmxhZ3MgPSAwOwotCQkJaW5mb2xlbiA9IChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOwotCQkJbiA9IHVzcnNjdHBfcmVj
dnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikg
JmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCi0JCQkgICAgICAgICAgICAgICAg
ICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwotCQkJaWYgKG4gPiAwKSB7Ci0JCQkJaWYg
KGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgewotCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBv
ZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7Ci0JCQkJ
fSBlbHNlIHsKLQkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgewotCQkJ
CQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJl
YW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxl
dGUgJWQuXG4iLAotCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCi0JCQkJCQkg
ICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9B
RERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAotCQkJCQkJICAgICAgICByY3ZfaW5m
by5yY3Zfc2lkLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAotCQkJCQkJICAgICAg
ICByY3ZfaW5mby5yY3ZfdHNuLAotCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3ZfcHBp
ZCksCi0JCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAotCQkJCQkJICAgICAgICAo
ZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXByaW50Zigi
TXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRlICVkLlxuIiwK
LQkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAotCQkJCQkJICAgICAgICBpbmV0
X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQUREUlNUUkxFTiks
IG50b2hzKGFkZHIuc2luNl9wb3J0KSwKLQkJCQkJCSAgICAgICAgKGZsYWdzICYgTVNHX0VPUikg
PyAxIDogMCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQot
CQl9Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkg
IT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEp
OwotI2VuZGlmCi0JfQotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWNob19z
ZXJ2ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAxZWFiMTkzYTVkMzQ1OGE4NzA1MDM2MTcyOTg4OGYxMmNjYTFhZjEzLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9lY2hvX3NlcnZlci5j
CisrKyAvZGV2L251bGwKQEAgLTEsMjc4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMg
b2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAot
ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQu
CUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUK
LSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
Ci0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotLyoKLSAqIFVzYWdlOiBkaXNjYXJkX3NlcnZl
ciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCi0gKi8KLQotI2lmZGVm
IF9XSU4zMgotI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwotI2VuZGlmCi0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNp
bmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZm5kZWYgX1dJTjMy
Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2luY2x1ZGUg
PHVzcnNjdHAuaD4KLQotI2RlZmluZSBCVUZGRVJfU0laRSAxMDI0MAotCi1jb25zdCBpbnQgdXNl
X2NiID0gMDsKLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1
bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXplX3Qg
ZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2lu
Zm8pCi17Ci0JY2hhciBuYW1lYnVmW0lORVQ2X0FERFJTVFJMRU5dOwotCWNvbnN0IGNoYXIgKm5h
bWU7Ci0JdWludDE2X3QgcG9ydDsKLQotCWlmIChkYXRhKSB7Ci0JCWlmIChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pIHsKLQkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNl
aXZlZC5cbiIsIChpbnQpZGF0YWxlbik7Ci0JCX0gZWxzZSB7Ci0JCQlzd2l0Y2ggKGFkZHIuc2Eu
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCW5hbWUgPSBp
bmV0X250b3AoQUZfSU5FVCwgJmFkZHIuc2luLnNpbl9hZGRyLCBuYW1lYnVmLCBJTkVUX0FERFJT
VFJMRU4pOwotCQkJCXBvcnQgPSBudG9ocyhhZGRyLnNpbi5zaW5fcG9ydCk7Ci0JCQkJYnJlYWs7
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQluYW1lID0gaW5l
dF9udG9wKEFGX0lORVQ2LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFtZWJ1ZiwgSU5FVDZfQURE
UlNUUkxFTiksCi0JCQkJcG9ydCA9IG50b2hzKGFkZHIuc2luNi5zaW42X3BvcnQpOwotCQkJCWJy
ZWFrOwotI2VuZGlmCi0JCQljYXNlIEFGX0NPTk46Ci0jaWZkZWYgX1dJTjMyCi0JCQkJX3NucHJp
bnRmKG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIsIGFkZHIuc2Nvbm4uc2Nvbm5fYWRk
cik7Ci0jZWxzZQotCQkJCXNucHJpbnRmKG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4sICIlcCIs
IGFkZHIuc2Nvbm4uc2Nvbm5fYWRkcik7Ci0jZW5kaWYKLQkJCQluYW1lID0gbmFtZWJ1ZjsKLQkJ
CQlwb3J0ID0gbnRvaHMoYWRkci5zY29ubi5zY29ubl9wb3J0KTsKLQkJCQlicmVhazsKLQkJCWRl
ZmF1bHQ6Ci0JCQkJbmFtZSA9IE5VTEw7Ci0JCQkJcG9ydCA9IDA7Ci0JCQkJYnJlYWs7Ci0JCQl9
Ci0JCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJl
YW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldS5cbiIsCi0J
CQkgICAgICAgKGludClkYXRhbGVuLAotCQkJICAgICAgIG5hbWUsCi0JCQkgICAgICAgcG9ydCwK
LQkJCSAgICAgICByY3YucmN2X3NpZCwKLQkJCSAgICAgICByY3YucmN2X3NzbiwKLQkJCSAgICAg
ICByY3YucmN2X3RzbiwKLQkJCSAgICAgICBudG9obChyY3YucmN2X3BwaWQpLAotCQkJICAgICAg
IHJjdi5yY3ZfY29udGV4dCk7Ci0JCQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQkJc3RydWN0
IHNjdHBfc25kaW5mbyBzbmRfaW5mbzsKLQotCQkJCXNuZF9pbmZvLnNuZF9zaWQgPSByY3YucmN2
X3NpZDsKLQkJCQlzbmRfaW5mby5zbmRfZmxhZ3MgPSAwOwotCQkJCWlmIChyY3YucmN2X2ZsYWdz
ICYgU0NUUF9VTk9SREVSRUQpIHsKLQkJCQkJc25kX2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5P
UkRFUkVEOwotCQkJCX0KLQkJCQlzbmRfaW5mby5zbmRfcHBpZCA9IHJjdi5yY3ZfcHBpZDsKLQkJ
CQlzbmRfaW5mby5zbmRfY29udGV4dCA9IDA7Ci0JCQkJc25kX2luZm8uc25kX2Fzc29jX2lkID0g
cmN2LnJjdl9hc3NvY19pZDsKLQkJCQlpZiAodXNyc2N0cF9zZW5kdihzb2NrLCBkYXRhLCBkYXRh
bGVuLCBOVUxMLCAwLCAmc25kX2luZm8sIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NU
UF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKLQkJCQkJcGVycm9yKCJzY3RwX3NlbmR2Iik7Ci0J
CQkJfQotCQkJfQotCQl9Ci0JCWZyZWUoZGF0YSk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZv
aWQKLWRlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFw
OwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9l
bmQoYXApOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1
Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQlzdHJ1Y3Qgc2N0
cF91ZHBlbmNhcHMgZW5jYXBzOwotCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OwotCXVpbnQxNl90
IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX1JFTU9URV9FUlJPUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hV
VERPV05fRVZFTlQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05f
SU5ESUNBVElPTiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJ
VkVSWV9FVkVOVH07Ci0JdW5zaWduZWQgaW50IGk7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
YXY7Ci0JY29uc3QgaW50IG9uID0gMTsKLQlzc2l6ZV90IG47Ci0JaW50IGZsYWdzOwotCXNvY2ts
ZW5fdCBmcm9tX2xlbjsKLQljaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07Ci0JY2hhciBuYW1lW0lO
RVQ2X0FERFJTVFJMRU5dOwotCXNvY2tsZW5fdCBpbmZvbGVuOwotCXN0cnVjdCBzY3RwX3Jjdmlu
Zm8gcmN2X2luZm87Ci0JdW5zaWduZWQgaW50IGluZm90eXBlOwotCi0JaWYgKGFyZ2MgPiAxKSB7
Ci0JCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0g
ZWxzZSB7Ci0JCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOwotCX0KLSNp
ZmRlZiBTQ1RQX0RFQlVHCi0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9E
RUJVR19OT05FKTsKLSNlbmRpZgotCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgy
KTsKLQotCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NFUVBBQ0tF
VCwgSVBQUk9UT19TQ1RQLCB1c2VfY2I/cmVjZWl2ZV9jYjpOVUxMLCBOVUxMLCAwLCBOVUxMKSkg
PT0gTlVMTCkgewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JfQotCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQURE
UiwgKGNvbnN0IHZvaWQqKSZvbiwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBl
cnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSIik7Ci0J
fQotCW1lbXNldCgmYXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpOwotCWF2
LmFzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7Ci0JYXYuYXNzb2NfdmFsdWUgPSA0NzsKLQotCWlm
ICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0NPTlRFWFQsIChj
b25zdCB2b2lkKikmYXYsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfQ09OVEVYVCIpOwot
CX0KLQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRUNW
UkNWSU5GTywgJm9uLCBzaXplb2YoaW50KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZXRz
b2Nrb3B0IFNDVFBfUkVDVlJDVklORk8iKTsKLQl9Ci0JaWYgKGFyZ2MgPiAyKSB7Ci0JCW1lbXNl
dCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5z
dWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsKLQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRv
bnMoYXRvaShhcmd2WzJdKSk7Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9U
T19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQsIChjb25zdCB2b2lkKikmZW5jYXBz
LCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBl
cnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0IFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCIpOwot
CQl9Ci0JfQotCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fz
c29jX2lkID0gU0NUUF9GVVRVUkVfQVNTT0M7Ci0JZXZlbnQuc2Vfb24gPSAxOwotCWZvciAoaSA9
IDA7IGkgPCAodW5zaWduZWQgaW50KShzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZf
dCkpOyBpKyspIHsKLQkJZXZlbnQuc2VfdHlwZSA9IGV2ZW50X3R5cGVzW2ldOwotCQlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FVkVOVCwgJmV2ZW50LCBz
aXplb2Yoc3RydWN0IHNjdHBfZXZlbnQpKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZXRz
b2Nrb3B0IFNDVFBfRVZFTlQiKTsKLQkJfQotCX0KLQltZW1zZXQoKHZvaWQgKikmYWRkciwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JYWRk
ci5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCWFkZHIu
c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLQlhZGRyLnNpbjZfcG9ydCA9IGh0b25zKDcpOwotCWFk
ZHIuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0JaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3Ry
dWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7
Ci0JCXBlcnJvcigidXNyc2N0cF9iaW5kIik7Ci0JfQotCWlmICh1c3JzY3RwX2xpc3Rlbihzb2Nr
LCAxKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOwotCX0KLQl3aGlsZSAoMSkg
ewotCQlpZiAodXNlX2NiKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQlTbGVlcCgxKjEwMDApOwotI2Vs
c2UKLQkJCXNsZWVwKDEpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlmcm9tX2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJZmxhZ3MgPSAwOwotCQkJaW5m
b2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOwotCQkJbiA9IHVz
cnNjdHBfcmVjdnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29j
a2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCi0JCQkgICAgICAg
ICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwotCQkJaWYgKG4gPiAwKSB7
Ci0JCQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgewotCQkJCQlwcmludGYoIk5vdGlm
aWNhdGlvbiBvZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcp
bik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5G
TykgewotCQkJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczol
dSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAl
dSwgY29tcGxldGUgJWQuXG4iLAotCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4s
Ci0JCQkJCQkgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1l
LCBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAotCQkJCQkJICAgICAg
ICByY3ZfaW5mby5yY3Zfc2lkLAotCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAotCQkJ
CQkJICAgICAgICByY3ZfaW5mby5yY3ZfdHNuLAotCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5m
by5yY3ZfcHBpZCksCi0JCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAotCQkJCQkJ
ICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKLQkJCQkJCWlmIChmbGFncyAmIE1T
R19FT1IpIHsKLQkJCQkJCQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZF9pbmZvOwotCi0JCQkJCQkJ
c25kX2luZm8uc25kX3NpZCA9IHJjdl9pbmZvLnJjdl9zaWQ7Ci0JCQkJCQkJc25kX2luZm8uc25k
X2ZsYWdzID0gMDsKLQkJCQkJCQlpZiAocmN2X2luZm8ucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVS
RUQpIHsKLQkJCQkJCQkJc25kX2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOwotCQkJ
CQkJCX0KLQkJCQkJCQlzbmRfaW5mby5zbmRfcHBpZCA9IHJjdl9pbmZvLnJjdl9wcGlkOwotCQkJ
CQkJCXNuZF9pbmZvLnNuZF9jb250ZXh0ID0gMDsKLQkJCQkJCQlzbmRfaW5mby5zbmRfYXNzb2Nf
aWQgPSByY3ZfaW5mby5yY3ZfYXNzb2NfaWQ7Ci0JCQkJCQkJaWYgKHVzcnNjdHBfc2VuZHYoc29j
aywgYnVmZmVyLCAoc2l6ZV90KW4sIE5VTEwsIDAsICZzbmRfaW5mbywgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7Ci0J
CQkJCQkJCXBlcnJvcigic2N0cF9zZW5kdiIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLQkJCQkJfSBl
bHNlIHsKLQkJCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6
JXUsIGNvbXBsZXRlICVkLlxuIiwKLQkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylu
LAotCQkJCQkJICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFt
ZSwgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKLQkJCQkJCSAgICAg
ICAgKGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9IGVsc2Ug
ewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0Jd2hp
bGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAw
KTsKLSNlbHNlCi0JCXNsZWVwKDEpOwotI2VuZGlmCi0JfQotCXJldHVybiAoMCk7Ci19CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvcHJvZ3JhbXMvZWtyX2NsaWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9jbGllbnQuYwpkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWNlZjQwYzU5NGMzZTY4MGM0Y2Q3MTlhYjA0NTVkYTAw
MzNlMjA0Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJv
Z3JhbXMvZWtyX2NsaWVudC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzE2ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
Ci0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQot
ICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9X
SU4zMgotI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwotI2VuZGlmCi0jaW5jbHVkZSA8
c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNs
dWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZm5kZWYgX1dJTjMyCi0j
aW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRl
IDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4K
LSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNs
dWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5l
IE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCi0jZGVmaW5lIEJVRkZFUl9TSVpFIDgwCi0jZGVmaW5l
IERJU0NBUkRfUFBJRCAzOQotCi0jaWZkZWYgX1dJTjMyCi1zdGF0aWMgRFdPUkQgV0lOQVBJCi0j
ZWxzZQotc3RhdGljIHZvaWQgKgotI2VuZGlmCi1oYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCi17
Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUICpmZHA7Ci0jZWxzZQotCWludCAqZmRwOwotI2VuZGlm
Ci0JY2hhciAqZHVtcF9idWY7Ci0Jc3NpemVfdCBsZW5ndGg7Ci0JY2hhciBidWZbTUFYX1BBQ0tF
VF9TSVpFXTsKLQotI2lmZGVmIF9XSU4zMgotCWZkcCA9IChTT0NLRVQgKilhcmc7Ci0jZWxzZQot
CWZkcCA9IChpbnQgKilhcmc7Ci0jZW5kaWYKLQlmb3IgKDs7KSB7Ci0jaWYgZGVmaW5lZChfX05l
dEJTRF9fKQotCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKLSNlbmRpZgotCQlsZW5ndGggPSByZWN2
KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKLQkJaWYgKGxlbmd0aCA+IDApIHsKLQkJ
CWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCAoc2l6ZV90KWxlbmd0aCwg
U0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBOVUxMKSB7Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlcyIs
IGR1bXBfYnVmKTsKLQkJCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGR1bXBfYnVmKTsKLQkJCX0K
LQkJCXVzcnNjdHBfY29ubmlucHV0KGZkcCwgYnVmLCAoc2l6ZV90KWxlbmd0aCwgMCk7Ci0JCX0K
LQl9Ci0jaWZkZWYgX1dJTjMyCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJldHVybiAoTlVMTCk7Ci0j
ZW5kaWYKLX0KLQotc3RhdGljIGludAotY29ubl9vdXRwdXQodm9pZCAqYWRkciwgdm9pZCAqYnVm
LCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpCi17Ci0JY2hhciAq
ZHVtcF9idWY7Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUICpmZHA7Ci0jZWxzZQotCWludCAqZmRw
OwotI2VuZGlmCi0KLSNpZmRlZiBfV0lOMzIKLQlmZHAgPSAoU09DS0VUICopYWRkcjsKLSNlbHNl
Ci0JZmRwID0gKGludCAqKWFkZHI7Ci0jZW5kaWYKLQlpZiAoKGR1bXBfYnVmID0gdXNyc2N0cF9k
dW1wcGFja2V0KGJ1ZiwgbGVuZ3RoLCBTQ1RQX0RVTVBfT1VUQk9VTkQpKSAhPSBOVUxMKSB7Ci0J
CWZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7Ci0JCXVzcnNjdHBfZnJlZWR1bXBidWZm
ZXIoZHVtcF9idWYpOwotCX0KLSNpZmRlZiBfV0lOMzIKLQlpZiAoc2VuZCgqZmRwLCBidWYsIChp
bnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcmV0dXJuIChXU0FHZXRMYXN0RXJy
b3IoKSk7Ci0jZWxzZQotCWlmIChzZW5kKCpmZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKLQkJ
cmV0dXJuIChlcnJubyk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0KLX0K
LQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAotICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwg
c3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0K
LQlpZiAoZGF0YSkgewotCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQlwcmlu
dGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4p
OwotCQl9IGVsc2UgewotCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAl
cDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4
dCAldS5cbiIsCi0JCQkgICAgICAgKGludClkYXRhbGVuLAotCQkJICAgICAgIGFkZHIuc2Nvbm4u
c2Nvbm5fYWRkciwKLQkJCSAgICAgICBudG9ocyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAotCQkJ
ICAgICAgIHJjdi5yY3Zfc2lkLAotCQkJICAgICAgIHJjdi5yY3Zfc3NuLAotCQkJICAgICAgIHJj
di5yY3ZfdHNuLAotCQkJICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCi0JCQkgICAgICAgcmN2
LnJjdl9jb250ZXh0KTsKLQkJfQotCQlmcmVlKGRhdGEpOwotCX0gZWxzZSB7Ci0JCXVzcnNjdHBf
ZGVyZWdpc3Rlcl9hZGRyZXNzKHVscF9pbmZvKTsKLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQl9
Ci0JcmV0dXJuICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJp
bnRmKGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywg
Y2hhciAqYXJndltdKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0Jc3RydWN0IHNvY2th
ZGRyX2Nvbm4gc2Nvbm47Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUIGZkOwotI2Vsc2UKLQlpbnQg
ZmQ7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2V0ICpzOwotI2lmZGVmIF9XSU4zMgotCUhBTkRMRSB0
aWQ7Ci0jZWxzZQotCXB0aHJlYWRfdCB0aWQ7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZv
IHNuZGluZm87Ci0JY2hhciBidWZmZXJbQlVGRkVSX1NJWkVdOwotI2lmZGVmIF9XSU4zMgotCVdT
QURBVEEgd3NhRGF0YTsKLSNlbmRpZgotCi0JaWYgKGFyZ2MgPCA0KSB7Ci0JCXByaW50ZigiZXJy
b3I6IHRoaXMgcHJvZ3JhbSByZXF1aXJlcyA0IGFyZ3VtZW50cyFcbiIpOwotCQlleGl0KEVYSVRf
RkFJTFVSRSk7Ci0JfQotCi0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQo
MiwyKSwgJndzYURhdGEpICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7
Ci0JCWV4aXQgKEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0KDAsIGNv
bm5fb3V0cHV0LCBkZWJ1Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29j
a2V0ICovCi0jaWZkZWYgX1dJTjMyCi0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RH
UkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7Ci0JCXByaW50Zigic29ja2V0
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vs
c2UKLQlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkg
PCAwKSB7Ci0JCXBlcnJvcigic29ja2V0Iik7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZzaW4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7
Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKLSNlbmRpZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwot
CWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7
Ci0JCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQot
I2lmZGVmIF9XSU4zMgotCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImJp
bmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9Ci0j
ZWxzZQotCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQl9Ci0jZW5kaWYKLQlt
ZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbi5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4uc2luX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0Jc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRv
aShhcmd2WzRdKSk7Ci0JaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5f
YWRkci5zX2FkZHIpKXsKLQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKLQkJ
ZXhpdCgxKTsKLQl9Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9S
KSB7Ci0JCXByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOwotCX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBlcnJvcigi
Y29ubmVjdCIpOwotCX0KLSNlbmRpZgotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOwotI2VuZGlmCi0JdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKLQl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3Mo
KHZvaWQgKikmZmQpOwotI2lmZGVmIF9XSU4zMgotCXRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCAw
LCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkLCAwLCBOVUxMKTsKLSNlbHNlCi0JcHRocmVh
ZF9jcmVhdGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCk7Ci0jZW5k
aWYKLQlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9U
T19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmQpKSA9PSBOVUxMKSB7Ci0JCXBlcnJvcigi
dXNyc2N0cF9zb2NrZXQiKTsKLQl9Ci0KLQltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVm
IEhBVkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKLSNlbmRpZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucygwKTsKLQlzY29ubi5z
Y29ubl9hZGRyID0gTlVMTDsKLQlpZiAodXNyc2N0cF9iaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgewotCQlwZXJyb3Io
InVzcnNjdHBfYmluZCIpOwotCX0KLQotCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpOwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYg
SEFWRV9TQ09OTl9MRU4KLQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUwMDEpOwotCXNjb25u
LnNjb25uX2FkZHIgPSAmZmQ7Ci0JaWYgKHVzcnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2th
ZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVy
cm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKLQl9Ci0JbWVtc2V0KGJ1ZmZlciwgJ0EnLCBCVUZGRVJf
U0laRSk7Ci0Jc25kaW5mby5zbmRfc2lkID0gMTsKLQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7Ci0J
c25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERJU0NBUkRfUFBJRCk7Ci0Jc25kaW5mby5zbmRfY29u
dGV4dCA9IDA7Ci0Jc25kaW5mby5zbmRfYXNzb2NfaWQgPSAwOwotCWlmICh1c3JzY3RwX3NlbmR2
KHMsIGJ1ZmZlciwgQlVGRkVSX1NJWkUsIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCi0JICAg
ICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFND
VFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOwot
CX0KLQotCXVzcnNjdHBfc2h1dGRvd24ocywgU0hVVF9XUik7Ci0Jd2hpbGUgKHVzcnNjdHBfZmlu
aXNoKCkgIT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNs
ZWVwKDEpOwotI2VuZGlmCi0JfQotI2lmZGVmIF9XSU4zMgotCVRlcm1pbmF0ZVRocmVhZCh0aWQs
IDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkLCBJTkZJTklURSk7Ci0JaWYgKGNsb3Nlc29j
a2V0KGZkKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxl
ZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLQlXU0FDbGVhbnVw
KCk7Ci0jZWxzZQotCXB0aHJlYWRfY2FuY2VsKHRpZCk7Ci0JcHRocmVhZF9qb2luKHRpZCwgTlVM
TCk7Ci0JaWYgKGNsb3NlKGZkKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCX0KLSNlbmRp
ZgotCXJldHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWtyX2xvb3AuYyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy9la3JfbG9vcC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OThlODk5MWI4N2Q4
NWQ0ZDJhYWM5NzU1MzdhYTAxZWY5MTMwMGRkLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfbG9vcC5jCisrKyAvZGV2L251bGwKQEAgLTEs
NTM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhl
bgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwot
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9K
RUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRI
RSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
Ci0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmZGVmIF9XSU4zMgotI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwot
I2VuZGlmCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
LSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotI2lu
Y2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbHNlCi0jaW5jbHVkZSA8
d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNy
c2N0cC5oPgotCi0jZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCi0jZGVmaW5lIExJTkVf
TEVOR1RIICgxPDwyMCkKLSNkZWZpbmUgRElTQ0FSRF9QUElEIDM5Ci0KLSNpZmRlZiBfV0lOMzIK
LXN0YXRpYyBEV09SRCBXSU5BUEkKLSNlbHNlCi1zdGF0aWMgdm9pZCAqCi0jZW5kaWYKLWhhbmRs
ZV9wYWNrZXRzKHZvaWQgKmFyZykKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNl
bHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQljaGFyICpkdW1wX2J1ZjsKLQlzc2l6ZV90IGxlbmd0
aDsKLQljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOwotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0g
KFNPQ0tFVCAqKWFyZzsKLSNlbHNlCi0JZmRwID0gKGludCAqKWFyZzsKLSNlbmRpZgotCWZvciAo
OzspIHsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwot
I2VuZGlmCi0JCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOwot
CQlpZiAobGVuZ3RoID4gMCkgewotCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tl
dChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKLQkJ
CQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7Ci0JCQkJdXNyc2N0cF9mcmVlZHVt
cGJ1ZmZlcihkdW1wX2J1Zik7Ci0JCQl9Ci0JCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1Ziwg
KHNpemVfdClsZW5ndGgsIDApOwotCQl9Ci0JfQotI2lmZGVmIF9XSU4zMgotCXJldHVybiAwOwot
I2Vsc2UKLQlyZXR1cm4gKE5VTEwpOwotI2VuZGlmCi19Ci0KLXN0YXRpYyBpbnQKLWNvbm5fb3V0
cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0b3MsIHVp
bnQ4X3Qgc2V0X2RmKQotewotCWNoYXIgKmR1bXBfYnVmOwotI2lmZGVmIF9XSU4zMgotCVNPQ0tF
VCAqZmRwOwotI2Vsc2UKLQlpbnQgKmZkcDsKLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi0JZmRw
ID0gKFNPQ0tFVCAqKWFkZHI7Ci0jZWxzZQotCWZkcCA9IChpbnQgKilhZGRyOwotI2VuZGlmCi0J
aWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIGxlbmd0aCwgU0NUUF9EVU1Q
X09VVEJPVU5EKSkgIT0gTlVMTCkgewotCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1
Zik7Ci0JCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwotCX0KLSNpZmRlZiBfV0lO
MzIKLQlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1Ip
IHsKLQkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCWlmIChzZW5kKCpmZHAs
IGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKLQkJcmV0dXJuIChlcnJubyk7Ci0jZW5kaWYKLQl9IGVs
c2UgewotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAot
ICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBm
bGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0JcHJpbnRmKCJNZXNzYWdlICVwIHJlY2VpdmVkIG9u
IHNvY2sgPSAlcC5cbiIsIGRhdGEsICh2b2lkICopc29jayk7Ci0JaWYgKGRhdGEpIHsKLQkJaWYg
KChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pID09IDApIHsKLQkJCXByaW50ZigiTWVzc3NhZ2Ug
b2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUg
YW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgZmxhZ3MgJXguXG4iLAotCQkJICAgICAg
IChpbnQpZGF0YWxlbiwKLQkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCi0JCQkgICAg
ICAgbnRvaHMoYWRkci5zY29ubi5zY29ubl9wb3J0KSwKLQkJCSAgICAgICByY3YucmN2X3NpZCwK
LQkJCSAgICAgICByY3YucmN2X3NzbiwKLQkJCSAgICAgICByY3YucmN2X3RzbiwKLQkJCSAgICAg
ICBudG9obChyY3YucmN2X3BwaWQpLAotCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCwKLQkJCSAg
ICAgICBmbGFncyk7Ci0JCX0KLQkJZnJlZShkYXRhKTsKLQl9IGVsc2UgewotCQl1c3JzY3RwX2Rl
cmVnaXN0ZXJfYWRkcmVzcyh1bHBfaW5mbyk7Ci0JCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0JfQot
CXJldHVybiAoMSk7Ci19Ci0KLSNpZiAwCi1zdGF0aWMgdm9pZAotcHJpbnRfYWRkcmVzc2VzKHN0
cnVjdCBzb2NrZXQgKnNvY2spCi17Ci0JaW50IGksIG47Ci0Jc3RydWN0IHNvY2thZGRyICphZGRy
cywgKmFkZHI7Ci0KLQluID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFkZHJzKTsKLQlh
ZGRyID0gYWRkcnM7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQlzd2l0Y2ggKGFkZHIt
PnNhX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOwotCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5h
bWU7Ci0KLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJbmFtZSA9IGlu
ZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJMRU4pOwot
CQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKLQkJCWJyZWFr
OwotCQl9Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7Ci0JCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQkJCWNvbnN0IGNoYXIgKm5hbWU7
Ci0KLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQluYW1lID0gaW5l
dF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJTVFJMRU4p
OwotCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkpOwotCQkJ
YnJlYWs7Ci0JCX0KLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqc2Nvbm47Ci0KLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJ
CXByaW50ZigiJXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNjb25uX3Bv
cnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYoIlVua25vd24gZmFt
aWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7Ci0JCQlicmVhazsKLQkJfQotCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKLQkJaWYgKGkg
IT0gbiAtIDEpIHsKLQkJCXByaW50ZigiLCIpOwotCQl9Ci0JfQotCWlmIChuID4gMCkgewotCQl1
c3JzY3RwX2ZyZWVsYWRkcnMoYWRkcnMpOwotCX0KLQlwcmludGYoIjwtPiIpOwotCW4gPSB1c3Jz
Y3RwX2dldHBhZGRycyhzb2NrLCAwLCAmYWRkcnMpOwotCWFkZHIgPSBhZGRyczsKLQlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0JCWNhc2Ug
QUZfSU5FVDoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0JCQljaGFyIGJ1ZltJ
TkVUX0FERFJTVFJMRU5dOwotCQkJY29uc3QgY2hhciAqbmFtZTsKLQotCQkJc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4t
PnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7Ci0JCQlwcmludGYoIiVzOiVkIiwgbmFt
ZSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBBRl9JTkVU
NjoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQkJCWNoYXIgYnVmW0lORVQ2
X0FERFJTVFJMRU5dOwotCQkJY29uc3QgY2hhciAqbmFtZTsKLQotCQkJc2luNiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopYWRkcjsKLQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42
LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7Ci0JCQlwcmludGYoIiVzOiVkIiwg
bmFtZSwgbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIEFG
X0NPTk46Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJc2Nvbm4g
PSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOwotCQkJcHJpbnRmKCIlcDolZCIsIHNjb25u
LT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0K
LQkJZGVmYXVsdDoKLQkJCXByaW50ZigiVW5rbm93biBmYW1pbHk6ICVkIiwgYWRkci0+c2FfZmFt
aWx5KTsKLQkJCWJyZWFrOwotCQl9Ci0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRk
cl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOwotCQlpZiAoaSAhPSBuIC0gMSkgewotCQkJcHJpbnRm
KCIsIik7Ci0JCX0KLQl9Ci0JaWYgKG4gPiAwKSB7Ci0JCXVzcnNjdHBfZnJlZXBhZGRycyhhZGRy
cyk7Ci0JfQotCXByaW50ZigiXG4iKTsKLX0KLSNlbmRpZgotCi12b2lkCi1kZWJ1Z19wcmludGYo
Y29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCXZhX3N0YXJ0KGFw
LCBmb3JtYXQpOwotCXZwcmludGYoZm9ybWF0LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLX0KLQotaW50
Ci1tYWluKHZvaWQpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luIHNpbl9zLCBzaW5fYzsKLQlzdHJ1
Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgZmRfYywgZmRf
czsKLSNlbHNlCi0JaW50IGZkX2MsIGZkX3M7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2V0ICpzX2Ms
ICpzX3MsICpzX2w7Ci0jaWZkZWYgX1dJTjMyCi0JSEFORExFIHRpZF9jLCB0aWRfczsKLSNlbHNl
Ci0JcHRocmVhZF90IHRpZF9jLCB0aWRfczsKLSNlbmRpZgotCWludCBjdXJfYnVmX3NpemUsIHNu
ZF9idWZfc2l6ZSwgcmN2X2J1Zl9zaXplOwotCXNvY2tsZW5fdCBvcHRfbGVuOwotCXN0cnVjdCBz
Y3RwX3NuZGluZm8gc25kaW5mbzsKLQljaGFyICpsaW5lOwotI2lmZGVmIF9XSU4zMgotCVdTQURB
VEEgd3NhRGF0YTsKLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFL
RVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxl
ZFxuIik7Ci0JCWV4aXQgKEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0
KDAsIGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBV
RFAgc29ja2V0ICovCi0jaWZkZWYgX1dJTjMyCi0JaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQs
IFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKLQkJcHJpbnRm
KCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQlwcmludGYo
InNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwot
CQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZkX2MgPSBzb2NrZXQoQUZf
SU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBzb2NrZXQoQUZfSU5F
VCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVycm9yKCJzb2NrZXQiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotCW1lbXNldCgmc2luX2MsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW5fYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
LSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW5fYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7Ci0jZW5kaWYKLQlzaW5fYy5zaW5fcG9ydCA9IGh0b25zKDk5MDApOwotCXNpbl9j
LnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7Ci0JbWVtc2V0KCZzaW5f
cywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbl9zLnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbl9zLnNpbl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMoOTkwMSk7
Ci0Jc2luX3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsKLSNpZmRl
ZiBfV0lOMzIKLQlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiYmlu
ZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQlleGl0
KEVYSVRfRkFJTFVSRSk7Ci0JfQotCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJ
cHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0jZWxzZQotCWlmIChiaW5kKGZkX2MsIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDAp
IHsKLQkJcGVycm9yKCJiaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGJp
bmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpIDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJS
T1IpIHsKLQkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JaWYgKGNvbm5lY3Qo
ZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBl
cnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImNvbm5lY3QiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoY29ubmVjdChmZF9zLCAoc3RydWN0IHNv
Y2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBl
cnJvcigiY29ubmVjdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0jaWZk
ZWYgX1dJTjMyCi0JdGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRz
LCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKTsKLQl0aWRfcyA9IENyZWF0ZVRocmVhZChOVUxMLCAw
LCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwpOwotI2Vsc2UKLQlpZiAo
cHRocmVhZF9jcmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZk
X2MpKSB7Ci0JCXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQotCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZoYW5kbGVf
cGFja2V0cywgKHZvaWQgKikmZmRfcykpIHsKLQkJcGVycm9yKCJwdGhyZWFkX2NyZWF0ZSB0aWRf
cyIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfTsKLSNlbmRpZgotI2lmZGVmIFNDVFBfREVC
VUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7Ci0j
ZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOwotCXVzcnNjdHBf
cmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9jKTsKLQl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJl
c3MoKHZvaWQgKikmZmRfcyk7Ci0JaWYgKChzX2MgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfYykpID09
IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwotCQlleGl0KEVYSVRfRkFJTFVS
RSk7Ci0JfQotCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOwotCWN1cl9idWZfc2l6
ZSA9IDA7Ci0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9TT0NLRVQsIFNPX1NOREJV
RiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfZ2V0
c29ja29wdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXByaW50ZigiQ2hhbmdlIHNl
bmQgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKLQlzbmRfYnVm
X3NpemUgPSAxPDwyMDsgLyogMSBNQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19jLCBT
T0xfU09DS0VULCBTT19TTkRCVUYsICZzbmRfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsK
LQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwot
CX0KLQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAw
OwotCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZj
dXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tv
cHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3Vy
X2J1Zl9zaXplKTsKLQlpZiAoKHNfbCA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RS
RUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZmZF9zKSkgPT0gTlVMTCkg
ewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9
Ci0Jb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7Ci0JY3VyX2J1Zl9zaXplID0gMDsK
LQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3Vy
X2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0
Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JcHJpbnRmKCJDaGFuZ2UgcmVjZWl2ZSBz
b2NrZXQgYnVmZmVyIHNpemUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUpOwotCXJjdl9idWZfc2l6
ZSA9IDE8PDE2OyAvKiA2NCBLQiAqLwotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc19sLCBTT0xf
U09DS0VULCBTT19SQ1ZCVUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihpbnQpKSA8IDApIHsKLQkJ
cGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJfYnVmX3NpemUgPSAwOwot
CWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZjdXJf
YnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRvICVkLlxuIiwgY3VyX2J1
Zl9zaXplKTsKLQkvKiBCaW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KLQltZW1zZXQoJnNjb25uLCAw
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBB
Rl9DT05OOwotI2lmZGVmIEhBVkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9u
cyg1MDAxKTsKLQlzY29ubi5zY29ubl9hZGRyID0gJmZkX2M7Ci0JaWYgKHVzcnNjdHBfYmluZChz
X2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bikpIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCQlleGl0KEVYSVRfRkFJTFVS
RSk7Ci0JfQotCS8qIEJpbmQgdGhlIHNlcnZlciBzaWRlLiAqLwotCW1lbXNldCgmc2Nvbm4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFG
X0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25z
KDUwMDEpOwotCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfczsKLQlpZiAodXNyc2N0cF9iaW5kKHNf
bCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9iaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0JLyogTWFrZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICovCi0JaWYgKHVzcnNjdHBf
bGlzdGVuKHNfbCwgMSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKLQkJZXhp
dChFWElUX0ZBSUxVUkUpOwotCX0KLQkvKiBJbml0aWF0ZSB0aGUgaGFuZHNoYWtlICovCi0JbWVt
c2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nv
bm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25u
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29u
bl9wb3J0ID0gaHRvbnMoNTAwMSk7Ci0Jc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOwotCWlmICh1
c3JzY3RwX2Nvbm5lY3Qoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKHNfcyA9IHVzcnNjdHBfYWNjZXB0KHNf
bCwgTlVMTCwgTlVMTCkpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwot
CQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXVzcnNjdHBfY2xvc2Uoc19sKTsKLQlpZiAoKGxp
bmUgPSBtYWxsb2MoTElORV9MRU5HVEgpKSA9PSBOVUxMKSB7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0JbWVtc2V0KGxpbmUsICdBJywgTElORV9MRU5HVEgpOwotCXNuZGluZm8uc25kX3Np
ZCA9IDE7Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCXNuZGluZm8uc25kX3BwaWQgPSBodG9u
bChESVNDQVJEX1BQSUQpOwotCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOwotCXNuZGluZm8uc25k
X2Fzc29jX2lkID0gMDsKLQkvKiBTZW5kIGEgMSBNQiBtZXNzYWdlICovCi0JaWYgKHVzcnNjdHBf
c2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywK
LQkgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8p
LCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYi
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlmcmVlKGxpbmUpOwotCXVzcnNjdHBfc2h1
dGRvd24oc19jLCBTSFVUX1dSKTsKLQotCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsK
LSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQlzbGVlcCgxKTsKLSNlbmRp
ZgotCX0KLSNpZmRlZiBfV0lOMzIKLQlUZXJtaW5hdGVUaHJlYWQodGlkX2MsIDApOwotCVdhaXRG
b3JTaW5nbGVPYmplY3QodGlkX2MsIElORklOSVRFKTsKLQlUZXJtaW5hdGVUaHJlYWQodGlkX3Ms
IDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkX3MsIElORklOSVRFKTsKLQlpZiAoY2xvc2Vz
b2NrZXQoZmRfYykgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlpZiAoY2xvc2Vzb2NrZXQoZmRfcykgPT0gU09DS0VUX0VSUk9SKSB7
Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlXU0FDbGVhbnVwKCk7
Ci0jZWxzZQotCXB0aHJlYWRfY2FuY2VsKHRpZF9jKTsKLQlwdGhyZWFkX2pvaW4odGlkX2MsIE5V
TEwpOwotCXB0aHJlYWRfY2FuY2VsKHRpZF9zKTsKLQlwdGhyZWFkX2pvaW4odGlkX3MsIE5VTEwp
OwotCWlmIChjbG9zZShmZF9jKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCQlleGl0KEVY
SVRfRkFJTFVSRSk7Ci0JfQotCWlmIChjbG9zZShmZF9zKSA8IDApIHsKLQkJcGVycm9yKCJjbG9z
ZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfbG9vcF9vZmZsb2FkLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvZWtyX2xvb3Bf
b2ZmbG9hZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NWY3ZDdmYzY5NDViNzVh
MDYwNWQ3ODVlYTU5NWQ3OGQ2NjE2YzZhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfbG9vcF9vZmZsb2FkLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw1NTkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwg
VHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
LSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5J
TkdTCi0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lu
Y2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1ZGUgPHN5cy90eXBl
cy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8
bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1ZGUgPGVycm5vLmg+
Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2Vsc2UKLSNpbmNs
dWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKLSNpbmNsdWRl
IDx1c3JzY3RwLmg+Ci0KLSNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwxNikKLSNkZWZpbmUg
TElORV9MRU5HVEggKDE8PDIwKQotI2RlZmluZSBESVNDQVJEX1BQSUQgMzkKLQotI2lmZGVmIF9X
SU4zMgotc3RhdGljIERXT1JEIFdJTkFQSQotI2Vsc2UKLXN0YXRpYyB2b2lkICoKLSNlbmRpZgot
aGFuZGxlX3BhY2tldHModm9pZCAqYXJnKQotewotI2lmZGVmIF9XSU4zMgotCVNPQ0tFVCAqZmRw
OwotI2Vsc2UKLQlpbnQgKmZkcDsKLSNlbmRpZgotCWNoYXIgKmR1bXBfYnVmZmVyOwotCXN0cnVj
dCBzY3RwX2NvbW1vbl9oZWFkZXIgKmhkcjsKLQlzc2l6ZV90IGxlbmd0aDsKLQljaGFyIGJ1ZmZl
cltNQVhfUEFDS0VUX1NJWkVdOwotCXVpbnQzMl90IHJlY2VpdmVkX2NyYzMyYywgY29tcHV0ZWRf
Y3JjMzJjOwotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFyZzsKLSNlbHNlCi0J
ZmRwID0gKGludCAqKWFyZzsKLSNlbmRpZgotCWZvciAoOzspIHsKLSNpZiBkZWZpbmVkKF9fTmV0
QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0aCA9IHJlY3Yo
KmZkcCwgYnVmZmVyLCBNQVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAobGVuZ3RoID4gMCkgewot
CQkJaWYgKChkdW1wX2J1ZmZlciA9IHVzcnNjdHBfZHVtcHBhY2tldChidWZmZXIsIChzaXplX3Qp
bGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKLQkJCQkvL2ZwcmludGYoc3Rk
ZXJyLCAiJXMiLCBkdW1wX2J1ZmZlcik7Ci0JCQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1w
X2J1ZmZlcik7Ci0JCQl9Ci0JCQlpZiAoKHNpemVfdClsZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NvbW1vbl9oZWFkZXIpKSB7Ci0JCQkJaGRyID0gKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFk
ZXIgKilidWZmZXI7Ci0JCQkJcmVjZWl2ZWRfY3JjMzJjID0gaGRyLT5jcmMzMmM7Ci0JCQkJaGRy
LT5jcmMzMmMgPSBodG9ubCgwKTsKLQkJCQljb21wdXRlZF9jcmMzMmMgPSB1c3JzY3RwX2NyYzMy
YyhidWZmZXIsIChzaXplX3QpbGVuZ3RoKTsKLQkJCQloZHItPmNyYzMyYyA9IHJlY2VpdmVkX2Ny
YzMyYzsKLQkJCQlpZiAocmVjZWl2ZWRfY3JjMzJjID09IGNvbXB1dGVkX2NyYzMyYykgewotCQkJ
CQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAsIGJ1ZmZlciwgKHNpemVfdClsZW5ndGgsIDApOwotCQkJ
CX0gZWxzZSB7Ci0JCQkJCWZwcmludGYoc3RkZXJyLCAiV3JvbmcgQ1JDMzJjOiBleHBlY3RlZCAl
MDh4IHJlY2VpdmVkICUwOHhcbiIsCi0JCQkJCSAgICAgICAgbnRvaGwoY29tcHV0ZWRfY3JjMzJj
KSwgbnRvaGwocmVjZWl2ZWRfY3JjMzJjKSk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlmcHJp
bnRmKHN0ZGVyciwgIlBhY2tldCB0b28gc2hvcnQ6IGxlbmd0aCAlenUiLCAoc2l6ZV90KWxlbmd0
aCk7Ci0JCQl9Ci0JCX0KLQl9Ci0jaWZkZWYgX1dJTjMyCi0JcmV0dXJuIDA7Ci0jZWxzZQotCXJl
dHVybiAoTlVMTCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludAotY29ubl9vdXRwdXQodm9pZCAq
YWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBz
ZXRfZGYpCi17Ci0JY2hhciAqZHVtcF9idWZmZXI7Ci0Jc3RydWN0IHNjdHBfY29tbW9uX2hlYWRl
ciAqaGRyOwotI2lmZGVmIF9XSU4zMgotCVNPQ0tFVCAqZmRwOwotI2Vsc2UKLQlpbnQgKmZkcDsK
LSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFkZHI7Ci0jZWxzZQot
CWZkcCA9IChpbnQgKilhZGRyOwotI2VuZGlmCi0JaWYgKGxlbmd0aCA+PSBzaXplb2Yoc3RydWN0
IHNjdHBfY29tbW9uX2hlYWRlcikpIHsKLQkJaGRyID0gKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFk
ZXIgKilidWZmZXI7Ci0JCWhkci0+Y3JjMzJjID0gdXNyc2N0cF9jcmMzMmMoYnVmZmVyLCAoc2l6
ZV90KWxlbmd0aCk7Ci0JfQotCWlmICgoZHVtcF9idWZmZXIgPSB1c3JzY3RwX2R1bXBwYWNrZXQo
YnVmZmVyLCBsZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKLQkJLy9mcHJp
bnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWZmZXIpOwotCQl1c3JzY3RwX2ZyZWVkdW1wYnVmZmVy
KGR1bXBfYnVmZmVyKTsKLQl9Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKHNlbmQoKmZkcCwgYnVmZmVy
LCAoaW50KWxlbmd0aCwgMCkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXJldHVybiAoV1NBR2V0TGFz
dEVycm9yKCkpOwotI2Vsc2UKLQlpZiAoc2VuZCgqZmRwLCBidWZmZXIsIGxlbmd0aCwgMCkgPCAw
KSB7Ci0JCXJldHVybiAoZXJybm8pOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsK
LQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXJlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5p
b24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRh
dGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZv
KQotewotCXByaW50ZigiTWVzc2FnZSAlcCByZWNlaXZlZCBvbiBzb2NrID0gJXAuXG4iLCBkYXRh
LCAodm9pZCAqKXNvY2spOwotCWlmIChkYXRhKSB7Ci0JCWlmICgoZmxhZ3MgJiBNU0dfTk9USUZJ
Q0FUSU9OKSA9PSAwKSB7Ci0JCQlwcmludGYoIk1lc3NzYWdlIG9mIGxlbmd0aCAlZCByZWNlaXZl
ZCB2aWEgJXA6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJXUs
IGNvbnRleHQgJXUsIGZsYWdzICV4LlxuIiwKLQkJCSAgICAgICAoaW50KWRhdGFsZW4sCi0JCQkg
ICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAotCQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4u
c2Nvbm5fcG9ydCksCi0JCQkgICAgICAgcmN2LnJjdl9zaWQsCi0JCQkgICAgICAgcmN2LnJjdl9z
c24sCi0JCQkgICAgICAgcmN2LnJjdl90c24sCi0JCQkgICAgICAgbnRvaGwocmN2LnJjdl9wcGlk
KSwKLQkJCSAgICAgICByY3YucmN2X2NvbnRleHQsCi0JCQkgICAgICAgZmxhZ3MpOwotCQl9Ci0J
CWZyZWUoZGF0YSk7Ci0JfSBlbHNlIHsKLQkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3ModWxw
X2luZm8pOwotCQl1c3JzY3RwX2Nsb3NlKHNvY2spOwotCX0KLQlyZXR1cm4gKDEpOwotfQotCi0j
aWYgMAotc3RhdGljIHZvaWQKLXByaW50X2FkZHJlc3NlcyhzdHJ1Y3Qgc29ja2V0ICpzb2NrKQot
ewotCWludCBpLCBuOwotCXN0cnVjdCBzb2NrYWRkciAqYWRkcnMsICphZGRyOwotCi0JbiA9IHVz
cnNjdHBfZ2V0bGFkZHJzKHNvY2ssIDAsICZhZGRycyk7Ci0JYWRkciA9IGFkZHJzOwotCWZvciAo
aSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLQkJY2Fz
ZSBBRl9JTkVUOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJCWNoYXIgYnVm
W0lORVRfQUREUlNUUkxFTl07Ci0JCQljb25zdCBjaGFyICpuYW1lOwotCi0JCQlzaW4gPSAoc3Ry
dWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwgJnNp
bi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKLQkJCXByaW50ZigiJXM6JWQiLCBu
YW1lLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJfQotCQljYXNlIEFGX0lO
RVQ2OgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQkJY2hhciBidWZbSU5F
VDZfQUREUlNUUkxFTl07Ci0JCQljb25zdCBjaGFyICpuYW1lOwotCi0JCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNp
bjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKLQkJCXByaW50ZigiJXM6JWQi
LCBuYW1lLCBudG9ocyhzaW42LT5zaW42X3BvcnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2Ug
QUZfQ09OTjoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0JCQlzY29u
biA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7Ci0JCQlwcmludGYoIiVwOiVkIiwgc2Nv
bm4tPnNjb25uX2FkZHIsIG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7Ci0JCQlicmVhazsKLQkJ
fQotCQlkZWZhdWx0OgotCQkJcHJpbnRmKCJVbmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5zYV9m
YW1pbHkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNh
ZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7Ci0JCWlmIChpICE9IG4gLSAxKSB7Ci0JCQlwcmlu
dGYoIiwiKTsKLQkJfQotCX0KLQlpZiAobiA+IDApIHsKLQkJdXNyc2N0cF9mcmVlbGFkZHJzKGFk
ZHJzKTsKLQl9Ci0JcHJpbnRmKCI8LT4iKTsKLQluID0gdXNyc2N0cF9nZXRwYWRkcnMoc29jaywg
MCwgJmFkZHJzKTsKLQlhZGRyID0gYWRkcnM7Ci0JZm9yIChpID0gMDsgaSA8IG47IGkrKykgewot
CQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotCQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKLQkJ
CWNvbnN0IGNoYXIgKm5hbWU7Ci0KLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRy
OwotCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVU
X0FERFJTVFJMRU4pOwotCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3Bv
cnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7Ci0JCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQkJCWNv
bnN0IGNoYXIgKm5hbWU7Ci0KLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7
Ci0JCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElO
RVQ2X0FERFJTVFJMRU4pOwotCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNp
bjZfcG9ydCkpOwotCQkJYnJlYWs7Ci0JCX0KLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQlzdHJ1
Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9j
b25uICopYWRkcjsKLQkJCXByaW50ZigiJXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMo
c2Nvbm4tPnNjb25uX3BvcnQpKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWRlZmF1bHQ6Ci0JCQlwcmlu
dGYoIlVua25vd24gZmFtaWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7Ci0JCQlicmVhazsKLQkJ
fQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2Ff
bGVuKTsKLQkJaWYgKGkgIT0gbiAtIDEpIHsKLQkJCXByaW50ZigiLCIpOwotCQl9Ci0JfQotCWlm
IChuID4gMCkgewotCQl1c3JzY3RwX2ZyZWVwYWRkcnMoYWRkcnMpOwotCX0KLQlwcmludGYoIlxu
Iik7Ci19Ci0jZW5kaWYKLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJpbnRm
KGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbih2b2lkKQotewotCXN0
cnVjdCBzb2NrYWRkcl9pbiBzaW5fcywgc2luX2M7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nv
bm47Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUIGZkX2MsIGZkX3M7Ci0jZWxzZQotCWludCBmZF9j
LCBmZF9zOwotI2VuZGlmCi0Jc3RydWN0IHNvY2tldCAqc19jLCAqc19zLCAqc19sOwotI2lmZGVm
IF9XSU4zMgotCUhBTkRMRSB0aWRfYywgdGlkX3M7Ci0jZWxzZQotCXB0aHJlYWRfdCB0aWRfYywg
dGlkX3M7Ci0jZW5kaWYKLQlpbnQgY3VyX2J1Zl9zaXplLCBzbmRfYnVmX3NpemUsIHJjdl9idWZf
c2l6ZTsKLQlzb2NrbGVuX3Qgb3B0X2xlbjsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87
Ci0JY2hhciAqbGluZTsKLSNpZmRlZiBfV0lOMzIKLQlXU0FEQVRBIHdzYURhdGE7Ci0jZW5kaWYK
LQotI2lmZGVmIF9XSU4zMgotCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIsMiksICZ3c2FEYXRh
KSAhPSAwKSB7Ci0JCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOwotCQlleGl0IChFWElU
X0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotCXVzcnNjdHBfaW5pdCgwLCBjb25uX291dHB1dCwgZGVi
dWdfcHJpbnRmKTsKLQl1c3JzY3RwX2VuYWJsZV9jcmMzMmNfb2ZmbG9hZCgpOwotCS8qIHNldCB1
cCBhIGNvbm5lY3RlZCBVRFAgc29ja2V0ICovCi0jaWZkZWYgX1dJTjMyCi0JaWYgKChmZF9jID0g
c29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NL
RVQpIHsKLQkJcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdl
dExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3MgPSBz
b2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tF
VCkgewotCQlwcmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2Vsc2UKLQlpZiAoKGZk
X2MgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJ
cGVycm9yKCJzb2NrZXQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKGZkX3Mg
PSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKLQkJcGVy
cm9yKCJzb2NrZXQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotCW1lbXNl
dCgmc2luX2MsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW5fYy5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW5fYy5zaW5fbGVuID0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQlzaW5fYy5zaW5fcG9ydCA9IGh0b25z
KDk4OTkpOwotCXNpbl9jLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7
Ci0JbWVtc2V0KCZzaW5fcywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbl9z
LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbl9zLnNpbl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNpbl9zLnNpbl9wb3J0
ID0gaHRvbnMoOTkwMSk7Ci0Jc2luX3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xP
T1BCQUNLKTsKLSNpZmRlZiBfV0lOMzIKLQlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRy
ICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7
Ci0JCXByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVy
cm9yKCkpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCWlmIChiaW5kKGZkX3MsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NL
RVRfRVJST1IpIHsKLQkJcHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0jZWxzZQotCWlm
IChiaW5kKGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKSA8IDApIHsKLQkJcGVycm9yKCJiaW5kIik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJF
KTsKLQl9Ci0JaWYgKGJpbmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZk
X2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJy
b3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9
Ci0JaWYgKGNvbm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImNvbm5lY3Qo
KSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJy
b3IoImNvbm5lY3QiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoY29ubmVjdChm
ZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSkgPCAwKSB7Ci0JCXBlcnJvcigiY29ubmVjdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0J
fQotI2VuZGlmCi0jaWZkZWYgX1dJTjMyCi0JdGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwg
JmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKTsKLQl0aWRfcyA9IENyZWF0
ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwp
OwotI2Vsc2UKLQlpZiAocHRocmVhZF9jcmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tl
dHMsICh2b2lkICopJmZkX2MpKSB7Ci0JCXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsK
LQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQotCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3Ms
IE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfcykpIHsKLQkJcGVycm9yKCJwdGhy
ZWFkX2NyZWF0ZSB0aWRfcyIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfTsKLSNlbmRpZgot
I2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQ
X0RFQlVHX0FMTCk7Ci0jZW5kaWYKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9lY25fZW5hYmxl
KDApOwotCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZF9jKTsKLQl1c3JzY3Rw
X3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRfcyk7Ci0JaWYgKChzX2MgPSB1c3JzY3RwX3Nv
Y2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxM
LCAwLCAmZmRfYykpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOwotCQll
eGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQp
OwotCWN1cl9idWZfc2l6ZSA9IDA7Ci0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2MsIFNPTF9T
T0NLRVQsIFNPX1NOREJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgewotCQlwZXJy
b3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXBy
aW50ZigiQ2hhbmdlIHNlbmQgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9z
aXplKTsKLQlzbmRfYnVmX3NpemUgPSAxPDwyMDsgLyogMSBNQiAqLwotCWlmICh1c3JzY3RwX3Nl
dHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZzbmRfYnVmX3NpemUsIHNpemVv
ZihpbnQpKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChF
WElUX0ZBSUxVUkUpOwotCX0KLQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQlj
dXJfYnVmX3NpemUgPSAwOwotCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VU
LCBTT19TTkRCVUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1
c3JzY3RwX2dldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYo
InRvICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKLQlpZiAoKHNfbCA9IHVzcnNjdHBfc29ja2V0KEFG
X0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsICZm
ZF9zKSkgPT0gTlVMTCkgewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKLQl9Ci0Jb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7Ci0JY3Vy
X2J1Zl9zaXplID0gMDsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwg
U09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7Ci0JCXBlcnJvcigidXNy
c2N0cF9nZXRzb2Nrb3B0Iik7Ci0JCWV4aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JcHJpbnRmKCJD
aGFuZ2UgcmVjZWl2ZSBzb2NrZXQgYnVmZmVyIHNpemUgZnJvbSAlZCAiLCBjdXJfYnVmX3NpemUp
OwotCXJjdl9idWZfc2l6ZSA9IDE8PDE2OyAvKiA2NCBLQiAqLwotCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc19sLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZyY3ZfYnVmX3NpemUsIHNpemVvZihp
bnQpKSA8IDApIHsKLQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQiKTsKLQkJZXhpdChFWElU
X0ZBSUxVUkUpOwotCX0KLQlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKLQljdXJf
YnVmX3NpemUgPSAwOwotCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19sLCBTT0xfU09DS0VULCBT
T19SQ1ZCVUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKLQkJcGVycm9yKCJ1c3Jz
Y3RwX2dldHNvY2tvcHQiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlwcmludGYoInRv
ICVkLlxuIiwgY3VyX2J1Zl9zaXplKTsKLQkvKiBCaW5kIHRoZSBjbGllbnQgc2lkZS4gKi8KLQlt
ZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQlzY29ubi5z
Y29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVmIEhBVkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nv
bm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCXNjb25uLnNj
b25uX3BvcnQgPSBodG9ucyg1MDAxKTsKLQlzY29ubi5zY29ubl9hZGRyID0gJmZkX2M7Ci0JaWYg
KHVzcnNjdHBfYmluZChzX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOwotCQll
eGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCS8qIEJpbmQgdGhlIHNlcnZlciBzaWRlLiAqLwotCW1l
bXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCXNjb25uLnNj
b25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQlzY29ubi5zY29u
bl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlmCi0Jc2Nvbm4uc2Nv
bm5fcG9ydCA9IGh0b25zKDUwMDEpOwotCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfczsKLQlpZiAo
dXNyc2N0cF9iaW5kKHNfbCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9iaW5kIik7Ci0JCWV4
aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JLyogTWFrZSBzZXJ2ZXIgc2lkZSBwYXNzaXZlLi4uICov
Ci0JaWYgKHVzcnNjdHBfbGlzdGVuKHNfbCwgMSkgPCAwKSB7Ci0JCXBlcnJvcigidXNyc2N0cF9s
aXN0ZW4iKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQkvKiBJbml0aWF0ZSB0aGUgaGFu
ZHNoYWtlICovCi0JbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xF
TgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5k
aWYKLQlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoNTAwMSk7Ci0Jc2Nvbm4uc2Nvbm5fYWRkciA9
ICZmZF9jOwotCWlmICh1c3JzY3RwX2Nvbm5lY3Qoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNj
b25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9yKCJ1c3Jz
Y3RwX2Nvbm5lY3QiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoKHNfcyA9IHVz
cnNjdHBfYWNjZXB0KHNfbCwgTlVMTCwgTlVMTCkpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1c3Jz
Y3RwX2FjY2VwdCIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCXVzcnNjdHBfY2xvc2Uo
c19sKTsKLQlpZiAoKGxpbmUgPSBtYWxsb2MoTElORV9MRU5HVEgpKSA9PSBOVUxMKSB7Ci0JCWV4
aXQoRVhJVF9GQUlMVVJFKTsKLQl9Ci0JbWVtc2V0KGxpbmUsICdBJywgTElORV9MRU5HVEgpOwot
CXNuZGluZm8uc25kX3NpZCA9IDE7Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCXNuZGluZm8u
c25kX3BwaWQgPSBodG9ubChESVNDQVJEX1BQSUQpOwotCXNuZGluZm8uc25kX2NvbnRleHQgPSAw
OwotCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsKLQkvKiBTZW5kIGEgMSBNQiBtZXNzYWdlICov
Ci0JaWYgKHVzcnNjdHBfc2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZv
aWQgKikmc25kaW5mbywKLQkgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlwZXJyb3Io
InVzcnNjdHBfc2VuZHYiKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlmcmVlKGxpbmUp
OwotCXVzcnNjdHBfc2h1dGRvd24oc19jLCBTSFVUX1dSKTsKLQotCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKLSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQlz
bGVlcCgxKTsKLSNlbmRpZgotCX0KLSNpZmRlZiBfV0lOMzIKLQlUZXJtaW5hdGVUaHJlYWQodGlk
X2MsIDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkX2MsIElORklOSVRFKTsKLQlUZXJtaW5h
dGVUaHJlYWQodGlkX3MsIDApOwotCVdhaXRGb3JTaW5nbGVPYmplY3QodGlkX3MsIElORklOSVRF
KTsKLQlpZiAoY2xvc2Vzb2NrZXQoZmRfYykgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50Zigi
Y2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigp
KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KLQlpZiAoY2xvc2Vzb2NrZXQoZmRfcykgPT0g
U09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJv
cjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0K
LQlXU0FDbGVhbnVwKCk7Ci0jZWxzZQotCXB0aHJlYWRfY2FuY2VsKHRpZF9jKTsKLQlwdGhyZWFk
X2pvaW4odGlkX2MsIE5VTEwpOwotCXB0aHJlYWRfY2FuY2VsKHRpZF9zKTsKLQlwdGhyZWFkX2pv
aW4odGlkX3MsIE5VTEwpOwotCWlmIChjbG9zZShmZF9jKSA8IDApIHsKLQkJcGVycm9yKCJjbG9z
ZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotCWlmIChjbG9zZShmZF9zKSA8IDApIHsK
LQkJcGVycm9yKCJjbG9zZSIpOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0J
cmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9la3JfcGVlci5jIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vr
cl9wZWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIzY2ZlNjJkOGJlM2Q2YzM0
MmFhZjQ5ZTk0M2ExOTMxZGVlZWUyMGMuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9wZWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1Mzgg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwgVHVleGVuCi0g
KgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIgdGhlIG5h
bWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCi0gKiAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1Qg
QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBS
T0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0g
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jZW5k
aWYKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0
ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2luY2x1
ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8cHRocmVhZC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgot
I2Vsc2UKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5k
aWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0KLSNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgxPDwx
NikKLSNkZWZpbmUgTElORV9MRU5HVEggODAKLSNkZWZpbmUgRElTQ0FSRF9QUElEIDM5Ci0KLSNp
ZmRlZiBfV0lOMzIKLXN0YXRpYyBEV09SRCBXSU5BUEkKLSNlbHNlCi1zdGF0aWMgdm9pZCAqCi0j
ZW5kaWYKLWhhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NL
RVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQlzc2l6ZV90IGxlbmd0aDsKLQlj
aGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOwotCi0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tF
VCAqKWFyZzsKLSNlbHNlCi0JZmRwID0gKGludCAqKWFyZzsKLSNlbmRpZgotCWZvciAoOzspIHsK
LSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0JCXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotI2VuZGlm
Ci0JCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAo
bGVuZ3RoID4gMCkgewotCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVu
Z3RoLCAwKTsKLQkJfQotCX0KLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0
dXJuIChOVUxMKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50Ci1jb25uX291dHB1dCh2b2lkICph
ZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNl
dF9kZikKLXsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7
Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4zMgotCWZkcCA9IChTT0NLRVQgKilhZGRyOwotI2Vsc2UK
LQlmZHAgPSAoaW50ICopYWRkcjsKLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCWlmIChzZW5kKCpm
ZHAsIGJ1ZmZlciwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikgewotCQlyZXR1cm4g
KFdTQUdldExhc3RFcnJvcigpKTsKLSNlbHNlCi0JaWYgKHNlbmQoKmZkcCwgYnVmZmVyLCBsZW5n
dGgsIDApIDwgMCkgewotCQlyZXR1cm4gKGVycm5vKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXJl
dHVybiAoMCk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5n
ZV9ldmVudChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNhYykKLXsKLQl1bnNpZ25lZCBpbnQg
aSwgbjsKLQotCXByaW50ZigiQXNzb2NpYXRpb24gY2hhbmdlICIpOwotCXN3aXRjaCAoc2FjLT5z
YWNfc3RhdGUpIHsKLQljYXNlIFNDVFBfQ09NTV9VUDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fVVAi
KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0NPTU1fTE9TVDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1f
TE9TVCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfUkVTVEFSVDoKLQkJcHJpbnRmKCJTQ1RQX1JF
U1RBUlQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6Ci0JCXByaW50Zigi
U0NUUF9TSFVURE9XTl9DT01QIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NP
QzoKLQkJcHJpbnRmKCJTQ1RQX0NBTlRfU1RSX0FTU09DIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6
Ci0JCXByaW50ZigiVU5LTk9XTiIpOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCIsIHN0cmVhbXMg
KGluL291dCkgPSAoJXUvJXUpIiwKLQkgICAgICAgc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zLCBz
YWMtPnNhY19vdXRib3VuZF9zdHJlYW1zKTsKLQluID0gc2FjLT5zYWNfbGVuZ3RoIC0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7Ci0JaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0gU0NU
UF9DT01NX1VQKSB8fAotCSAgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfUkVTVEFSVCkpICYm
IChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIHN1cHBvcnRzIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBu
OyBpKyspIHsKLQkJCXN3aXRjaCAoc2FjLT5zYWNfaW5mb1tpXSkgewotCQkJY2FzZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX1BSOgotCQkJCXByaW50ZigiIFBSIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNl
IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVUSDoKLQkJCQlwcmludGYoIiBBVVRIIik7Ci0JCQkJYnJl
YWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOgotCQkJCXByaW50ZigiIEFT
Q09ORiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVG
OgotCQkJCXByaW50ZigiIE1VTFRJQlVGIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNT
T0NfU1VQUE9SVFNfUkVfQ09ORklHOgotCQkJCXByaW50ZigiIFJFLUNPTkZJRyIpOwotCQkJCWJy
ZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGYoIiBVTktOT1dOKDB4JTAyeCkiLCBzYWMtPnNh
Y19pbmZvW2ldKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKChzYWMtPnNh
Y19zdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkgfHwKLQkgICAgICAgICAgICAoc2FjLT5zYWNfc3Rh
dGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpICYmIChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIEFC
T1JUID0iKTsKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQkJcHJpbnRmKCIgMHglMDJ4
Iiwgc2FjLT5zYWNfaW5mb1tpXSk7Ci0JCX0KLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlpZiAoKHNh
Yy0+c2FjX3N0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpIHx8Ci0JICAgIChzYWMtPnNhY19z
dGF0ZSA9PSBTQ1RQX1NIVVRET1dOX0NPTVApIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBT
Q1RQX0NPTU1fTE9TVCkpIHsKLQkJZXhpdCgwKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMg
dm9pZAotaGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfcGFkZHJf
Y2hhbmdlICpzcGMpCi17Ci0JY2hhciBhZGRyX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQljb25z
dCBjaGFyICphZGRyOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0Jc3dpdGNoIChz
cGMtPnNwY19hYWRkci5zc19mYW1pbHkpIHsKLQljYXNlIEFGX0lORVQ6Ci0JCXNpbiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKikmc3BjLT5zcGNfYWFkZHI7Ci0JCWFkZHIgPSBpbmV0X250b3AoQUZf
SU5FVCwgJnNpbi0+c2luX2FkZHIsIGFkZHJfYnVmLCBJTkVUX0FERFJTVFJMRU4pOwotCQlicmVh
azsKLQljYXNlIEFGX0lORVQ2OgotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmc3Bj
LT5zcGNfYWFkZHI7Ci0JCWFkZHIgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2Fk
ZHIsIGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9DT05O
OgotCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKSZzcGMtPnNwY19hYWRkcjsKLSNp
ZmRlZiBfV0lOMzIKLQkJX3NucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAi
LCBzY29ubi0+c2Nvbm5fYWRkcik7Ci0jZWxzZQotCQlzbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZf
QUREUlNUUkxFTiwgIiVwIiwgc2Nvbm4tPnNjb25uX2FkZHIpOwotI2VuZGlmCi0JCWFkZHIgPSBh
ZGRyX2J1ZjsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLSNpZmRlZiBfV0lOMzIKLQkJX3NucHJpbnRm
KGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNw
Y19hYWRkci5zc19mYW1pbHkpOwotI2Vsc2UKLQkJc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FE
RFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSk7
Ci0jZW5kaWYKLQkJYWRkciA9IGFkZHJfYnVmOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCJQZWVy
IGFkZHJlc3MgJXMgaXMgbm93ICIsIGFkZHIpOwotCXN3aXRjaCAoc3BjLT5zcGNfc3RhdGUpIHsK
LQljYXNlIFNDVFBfQUREUl9BVkFJTEFCTEU6Ci0JCXByaW50ZigiU0NUUF9BRERSX0FWQUlMQUJM
RSIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfQUREUl9VTlJFQUNIQUJMRToKLQkJcHJpbnRmKCJT
Q1RQX0FERFJfVU5SRUFDSEFCTEUiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FERFJfUkVNT1ZF
RDoKLQkJcHJpbnRmKCJTQ1RQX0FERFJfUkVNT1ZFRCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBf
QUREUl9BRERFRDoKLQkJcHJpbnRmKCJTQ1RQX0FERFJfQURERUQiKTsKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX0FERFJfTUFERV9QUklNOgotCQlwcmludGYoIlNDVFBfQUREUl9NQURFX1BSSU0iKTsK
LQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FERFJfQ09ORklSTUVEOgotCQlwcmludGYoIlNDVFBfQURE
Ul9DT05GSVJNRUQiKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJpbnRmKCJVTktOT1dOIik7
Ci0JCWJyZWFrOwotCX0KLQlwcmludGYoIiAoZXJyb3IgPSAweCUwOHgpLlxuIiwgc3BjLT5zcGNf
ZXJyb3IpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9zZW5kX2ZhaWxlZF9l
dmVudChzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZSkKLXsKLQlzaXplX3QgaSwg
bjsKLQotCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1VOU0VOVCkgewotCQlwcmlu
dGYoIlVuc2VudCAiKTsKLQl9Ci0JaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfU0VO
VCkgewotCQlwcmludGYoIlNlbnQgIik7Ci0JfQotCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgfihT
Q1RQX0RBVEFfU0VOVCB8IFNDVFBfREFUQV9VTlNFTlQpKSB7Ci0JCXByaW50ZigiKGZsYWdzID0g
JXgpICIsIHNzZmUtPnNzZmVfZmxhZ3MpOwotCX0KLQlwcmludGYoIm1lc3NhZ2Ugd2l0aCBQUElE
ID0gJXUsIFNJRCA9ICV1LCBmbGFnczogMHglMDR4IGR1ZSB0byBlcnJvciA9IDB4JTA4eCIsCi0J
ICAgICAgIG50b2hsKHNzZmUtPnNzZmVfaW5mby5zbmRfcHBpZCksIHNzZmUtPnNzZmVfaW5mby5z
bmRfc2lkLAotCSAgICAgICBzc2ZlLT5zc2ZlX2luZm8uc25kX2ZsYWdzLCBzc2ZlLT5zc2ZlX2Vy
cm9yKTsKLQluID0gc3NmZS0+c3NmZV9sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9m
YWlsZWRfZXZlbnQpOwotCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKLQkJcHJpbnRmKCIgMHgl
MDJ4Iiwgc3NmZS0+c3NmZV9kYXRhW2ldKTsKLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlyZXR1cm47
Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfbm90aWZpY2F0aW9uKHVuaW9uIHNjdHBfbm90aWZp
Y2F0aW9uICpub3RpZiwgc2l6ZV90IG4pCi17Ci0JaWYgKG5vdGlmLT5zbl9oZWFkZXIuc25fbGVu
Z3RoICE9ICh1aW50MzJfdCluKSB7Ci0JCXJldHVybjsKLQl9Ci0Jc3dpdGNoIChub3RpZi0+c25f
aGVhZGVyLnNuX3R5cGUpIHsKLQljYXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgotCQloYW5kbGVfYXNz
b2NpYXRpb25fY2hhbmdlX2V2ZW50KCYobm90aWYtPnNuX2Fzc29jX2NoYW5nZSkpOwotCQlicmVh
azsKLQljYXNlIFNDVFBfUEVFUl9BRERSX0NIQU5HRToKLQkJaGFuZGxlX3BlZXJfYWRkcmVzc19j
aGFuZ2VfZXZlbnQoJihub3RpZi0+c25fcGFkZHJfY2hhbmdlKSk7Ci0JCWJyZWFrOwotCWNhc2Ug
U0NUUF9SRU1PVEVfRVJST1I6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoK
LQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjoKLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9B
VVRIRU5USUNBVElPTl9FVkVOVDoKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZF
TlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQ6Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKLQkJaGFuZGxlX3NlbmRfZmFp
bGVkX2V2ZW50KCYobm90aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7Ci0JCWJyZWFrOwotCWNh
c2UgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ6Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BU1NPQ19S
RVNFVF9FVkVOVDoKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6Ci0J
CWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLX0KLQotc3RhdGljIGludAotcmVjZWl2
ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lk
ICpkYXRhLAotICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyBy
Y3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0JaWYgKGRhdGEpIHsKLQkJaWYgKGZs
YWdzICYgTVNHX05PVElGSUNBVElPTikgewotCQkJaGFuZGxlX25vdGlmaWNhdGlvbigodW5pb24g
c2N0cF9ub3RpZmljYXRpb24gKilkYXRhLCBkYXRhbGVuKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50
ZigiTXNnIG9mIGxlbmd0aCAlZCByZWNlaXZlZCB2aWEgJXA6JXUgb24gc3RyZWFtICV1IHdpdGgg
U1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAotCQkJICAgICAgIChp
bnQpZGF0YWxlbiwKLQkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCi0JCQkgICAgICAg
bnRvaHMoYWRkci5zY29ubi5zY29ubl9wb3J0KSwKLQkJCSAgICAgICByY3YucmN2X3NpZCwKLQkJ
CSAgICAgICByY3YucmN2X3NzbiwKLQkJCSAgICAgICByY3YucmN2X3RzbiwKLQkJCSAgICAgICBu
dG9obChyY3YucmN2X3BwaWQpLAotCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCk7Ci0JCX0KLQkJ
ZnJlZShkYXRhKTsKLQl9IGVsc2UgewotCQl1c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyh1bHBf
aW5mbyk7Ci0JCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZv
aWQKLWRlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFw
OwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9l
bmQoYXApOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gc2luOwotCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotCXN0cnVj
dCBzY3RwX2V2ZW50IGV2ZW50OwotCXVpbnQxNl90IGV2ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NP
Q19DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BFRVJfQUREUl9DSEFO
R0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UfTsK
LQl1bnNpZ25lZCBpbnQgaTsKLSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgZmQ7Ci0jZWxzZQotCWlu
dCBmZDsKLSNlbmRpZgotCXN0cnVjdCBzb2NrZXQgKnM7Ci0jaWZkZWYgX1dJTjMyCi0JSEFORExF
IHRpZDsKLSNlbHNlCi0JcHRocmVhZF90IHRpZDsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX3NuZGlu
Zm8gc25kaW5mbzsKLQljaGFyIGxpbmVbTElORV9MRU5HVEhdOwotI2lmZGVmIF9XSU4zMgotCVdT
QURBVEEgd3NhRGF0YTsKLSNlbmRpZgotCi0JaWYgKGFyZ2MgPCA0KSB7Ci0JCXByaW50ZigiZXJy
b3I6IHRoaXMgcHJvZ3JhbSByZXF1aXJlcyA0IGFyZ3VtZW50cyFcbiIpOwotCQlleGl0KEVYSVRf
RkFJTFVSRSk7Ci0JfQotCi0jaWZkZWYgX1dJTjMyCi0JaWYgKFdTQVN0YXJ0dXAoTUFLRVdPUkQo
MiwyKSwgJndzYURhdGEpICE9IDApIHsKLQkJcHJpbnRmKCJXU0FTdGFydHVwIGZhaWxlZFxuIik7
Ci0JCWV4aXQgKEVYSVRfRkFJTFVSRSk7Ci0JfQotI2VuZGlmCi0JdXNyc2N0cF9pbml0KDAsIGNv
bm5fb3V0cHV0LCBkZWJ1Z19wcmludGYpOwotCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAgc29j
a2V0ICovCi0jaWZkZWYgX1dJTjMyCi0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RH
UkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7Ci0JCXByaW50Zigic29ja2V0
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vs
c2UKLQlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkg
PCAwKSB7Ci0JCXBlcnJvcigic29ja2V0Iik7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZzaW4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7
Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKLSNlbmRpZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwot
CWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbMV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7
Ci0JCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4aXQoMSk7Ci0JfQot
I2lmZGVmIF9XSU4zMgotCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgewotCQlwcmludGYoImJp
bmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9Ci0j
ZWxzZQotCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImJpbmQiKTsKLQl9Ci0jZW5kaWYKLQlt
ZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCXNpbi5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW4uc2luX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0Jc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRv
aShhcmd2WzRdKSk7Ci0JaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5f
YWRkci5zX2FkZHIpKXsKLQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKLQkJ
ZXhpdCgxKTsKLQl9Ci0jaWZkZWYgX1dJTjMyCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9S
KSB7Ci0JCXByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0
TGFzdEVycm9yKCkpOwotCX0KLSNlbHNlCi0JaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCXBlcnJvcigi
Y29ubmVjdCIpOwotCX0KLSNlbmRpZgotI2lmZGVmIF9XSU4zMgotCXRpZCA9IENyZWF0ZVRocmVh
ZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkLCAwLCBOVUxMKTsKLSNlbHNl
Ci0JcHRocmVhZF9jcmVhdGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZm
ZCk7Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
ZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKLSNlbmRpZgotCXVzcnNjdHBfcmVnaXN0ZXJfYWRk
cmVzcygodm9pZCAqKSZmZCk7Ci0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgw
KTsKLQlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9U
T19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmQpKSA9PSBOVUxMKSB7Ci0JCXBlcnJvcigi
dXNyc2N0cF9zb2NrZXQiKTsKLQl9Ci0JLyogRW5hYmxlIHRoZSBldmVudHMgb2YgaW50ZXJlc3Qu
ICovCi0JaWYgKHVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzLCAxKSA8IDApIHsKLQkJcGVycm9y
KCJ1c3JzY3RwX3NldF9ub25fYmxvY2tpbmciKTsKLQl9Ci0JbWVtc2V0KCZldmVudCwgMCwgc2l6
ZW9mKGV2ZW50KSk7Ci0JZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKLQlldmVu
dC5zZV9vbiA9IDE7Ci0JZm9yIChpID0gMDsgaSA8IHNpemVvZihldmVudF90eXBlcykvc2l6ZW9m
KHVpbnQxNl90KTsgaSsrKSB7Ci0JCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKLQkJ
aWYgKHVzcnNjdHBfc2V0c29ja29wdChzLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVu
dCwgc2l6ZW9mKGV2ZW50KSkgPCAwKSB7Ci0JCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FVkVO
VCIpOwotCQl9Ci0JfQotCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubikpOwotCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09O
Tl9MRU4KLQlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwot
I2VuZGlmCi0Jc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOwotCXNjb25u
LnNjb25uX2FkZHIgPSAmZmQ7Ci0JaWYgKHVzcnNjdHBfYmluZChzLCAoc3RydWN0IHNvY2thZGRy
ICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJcGVycm9y
KCJ1c3JzY3RwX2JpbmQiKTsKLQl9Ci0JbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBI
QVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzZdKSk7
Ci0Jc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZDsKLQlpZiAodXNyc2N0cF9jb25uZWN0KHMsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkg
ewotCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOwotCX0KLQlmb3IgKDs7KSB7Ci0jaWZkZWYg
X1dJTjMyCi0JCWlmIChnZXRzX3MobGluZSwgTElORV9MRU5HVEgpID09IE5VTEwpIHsKLSNlbHNl
Ci0JCWlmIChmZ2V0cyhsaW5lLCBMSU5FX0xFTkdUSCwgc3RkaW4pID09IE5VTEwpIHsKLSNlbmRp
ZgotCQkJaWYgKHVzcnNjdHBfc2h1dGRvd24ocywgU0hVVF9XUikgPCAwKSB7Ci0JCQkJcGVycm9y
KCJ1c3JzY3RwX3NodXRkb3duIik7Ci0JCQl9Ci0JCQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAh
PSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQkJU2xlZXAoMTAwMCk7Ci0jZWxzZQotCQkJCXNsZWVw
KDEpOwotI2VuZGlmCi0JCQl9Ci0JCQlicmVhazsKLQkJfQotCQlzbmRpbmZvLnNuZF9zaWQgPSAx
OwotCQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7Ci0JCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChE
SVNDQVJEX1BQSUQpOwotCQlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKLQkJc25kaW5mby5zbmRf
YXNzb2NfaWQgPSAwOwotCQlpZiAodXNyc2N0cF9zZW5kdihzLCBsaW5lLCBzdHJsZW4obGluZSks
IE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAo
c29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZP
LCAwKSA8IDApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOwotCQl9Ci0JfQotCXdoaWxl
ICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKLSNpZmRlZiBfV0lOMzIKLQkJU2xlZXAoMTAwMCk7
Ci0jZWxzZQotCQlzbGVlcCgxKTsKLSNlbmRpZgotCX0KLSNpZmRlZiBfV0lOMzIKLQlUZXJtaW5h
dGVUaHJlYWQodGlkLCAwKTsKLQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUpOwot
CWlmIChjbG9zZXNvY2tldChmZCkgPT0gU09DS0VUX0VSUk9SKSB7Ci0JCXByaW50ZigiY2xvc2Vz
b2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQl9
Ci0JV1NBQ2xlYW51cCgpOwotI2Vsc2UKLQlwdGhyZWFkX2NhbmNlbCh0aWQpOwotCXB0aHJlYWRf
am9pbih0aWQsIE5VTEwpOwotCWlmIChjbG9zZShmZCkgPCAwKSB7Ci0JCXBlcnJvcigiY2xvc2Ui
KTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9z
ZXJ2ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC9wcm9ncmFtcy9la3Jfc2VydmVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAyZjAyYjFjZjIxNmRhMzc3NWU5OTQ0ZmY2MTk0YTczMjIzOWQ2NzIuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYwor
KysgL2Rldi9udWxsCkBAIC0xLDI5OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LTIwMTMgTWljaGFlbCBUdWV4ZW4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9m
IGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELglJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0g
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfV0lOMzIKLSNkZWZpbmUgX0NSVF9T
RUNVUkVfTk9fV0FSTklOR1MKLSNlbmRpZgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
LSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNp
bmNsdWRlIDxlcnJuby5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNpbmNsdWRlIDx1bmlzdGQu
aD4KLSNlbHNlCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgot
I2VuZGlmCi0jaW5jbHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAo
MTw8MTYpCi0KLSNpZmRlZiBfV0lOMzIKLXN0YXRpYyBEV09SRCBXSU5BUEkKLSNlbHNlCi1zdGF0
aWMgdm9pZCAqCi0jZW5kaWYKLWhhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKLXsKLSNpZmRlZiBf
V0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYKLQljaGFyIGJ1
ZltNQVhfUEFDS0VUX1NJWkVdOwotCWNoYXIgKmR1bXBfYnVmOwotCXNzaXplX3QgbGVuZ3RoOwot
Ci0jaWZkZWYgX1dJTjMyCi0JZmRwID0gKFNPQ0tFVCAqKWFyZzsKLSNlbHNlCi0JZmRwID0gKGlu
dCAqKWFyZzsKLSNlbmRpZgotCWZvciAoOzspIHsKLSNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCi0J
CXB0aHJlYWRfdGVzdGNhbmNlbCgpOwotI2VuZGlmCi0JCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVm
LCBNQVhfUEFDS0VUX1NJWkUsIDApOwotCQlpZiAobGVuZ3RoID4gMCkgewotCQkJaWYgKChkdW1w
X2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBf
SU5CT1VORCkpICE9IE5VTEwpIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYp
OwotCQkJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOwotCQkJfQotCQkJdXNyc2N0
cF9jb25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKLQkJfQotCX0KLSNpZmRl
ZiBfV0lOMzIKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotfQot
Ci1zdGF0aWMgaW50Ci1jb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBs
ZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKLXsKLQljaGFyICpkdW1wX2J1ZjsK
LSNpZmRlZiBfV0lOMzIKLQlTT0NLRVQgKmZkcDsKLSNlbHNlCi0JaW50ICpmZHA7Ci0jZW5kaWYK
LQotI2lmZGVmIF9XSU4zMgotCWZkcCA9IChTT0NLRVQgKilhZGRyOwotI2Vsc2UKLQlmZHAgPSAo
aW50ICopYWRkcjsKLSNlbmRpZgotCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQo
YnVmLCBsZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKLQkJZnByaW50Zihz
dGRlcnIsICIlcyIsIGR1bXBfYnVmKTsKLQkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1
Zik7Ci0JfQotI2lmZGVmIF9XSU4zMgotCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgs
IDApID09IFNPQ0tFVF9FUlJPUikgewotCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKLSNl
bHNlCi0JaWYgKHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgewotCQlyZXR1cm4gKGVy
cm5vKTsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi1zdGF0aWMg
aW50Ci1yZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnMsIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFk
ZHIsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9y
Y3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKLXsKLQotCWlmIChkYXRhKSB7
Ci0JCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKLQkJCXByaW50ZigiTm90aWZpY2F0
aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7Ci0JCX0gZWxzZSB7
Ci0JCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVh
bSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKLQkJ
CSAgICAgICAoaW50KWRhdGFsZW4sCi0JCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAot
CQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCi0JCQkgICAgICAgcmN2LnJj
dl9zaWQsCi0JCQkgICAgICAgcmN2LnJjdl9zc24sCi0JCQkgICAgICAgcmN2LnJjdl90c24sCi0J
CQkgICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKLQkJCSAgICAgICByY3YucmN2X2NvbnRleHQp
OwotCQl9Ci0JCWZyZWUoZGF0YSk7Ci0JfSBlbHNlIHsKLQkJdXNyc2N0cF9jbG9zZShzKTsKLQl9
Ci0JcmV0dXJuICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1h
dCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsKLQl2cHJp
bnRmKGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludAotbWFpbihpbnQgYXJnYywg
Y2hhciAqYXJndltdKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0Jc3RydWN0IHNvY2th
ZGRyX2Nvbm4gc2Nvbm47Ci0jaWZkZWYgX1dJTjMyCi0JU09DS0VUIGZkOwotI2Vsc2UKLQlpbnQg
ZmQ7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29ja2V0ICpzOwotI2lmZGVmIF9XSU4zMgotCUhBTkRMRSB0
aWQ7Ci0jZWxzZQotCXB0aHJlYWRfdCB0aWQ7Ci0jZW5kaWYKLSNpZmRlZiBfV0lOMzIKLQlXU0FE
QVRBIHdzYURhdGE7Ci0jZW5kaWYKLQotCWlmIChhcmdjIDwgNCkgewotCQlwcmludGYoImVycm9y
OiB0aGlzIHByb2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKLQkJZXhpdChFWElUX0ZB
SUxVUkUpOwotCX0KLQotI2lmZGVmIF9XSU4zMgotCWlmIChXU0FTdGFydHVwKE1BS0VXT1JEKDIs
MiksICZ3c2FEYXRhKSAhPSAwKSB7Ci0JCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRcbiIpOwot
CQlleGl0IChFWElUX0ZBSUxVUkUpOwotCX0KLSNlbmRpZgotCXVzcnNjdHBfaW5pdCgwLCBjb25u
X291dHB1dCwgZGVidWdfcHJpbnRmKTsKLQkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tl
dCAqLwotI2lmZGVmIF9XSU4zMgotCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JB
TSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgewotCQlwcmludGYoInNvY2tldCgp
IGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLSNlbHNl
Ci0JaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCkpIDwg
MCkgewotCQlwZXJyb3IoInNvY2tldCIpOwotCX0KLSNlbmRpZgotCW1lbXNldCgmc2luLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0Jc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwot
I2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbik7Ci0jZW5kaWYKLQlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKLQlp
ZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpewot
CQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOwotCQlleGl0KDEpOwotCX0KLSNp
ZmRlZiBfV0lOMzIKLQlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJiaW5k
KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JfQotI2Vs
c2UKLQlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSA8IDApIHsKLQkJcGVycm9yKCJiaW5kIik7Ci0JfQotI2VuZGlmCi0JbWVt
c2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2ZhbWls
eSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0Jc2luLnNpbl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2ko
YXJndls0XSkpOwotCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZzaW4uc2luX2Fk
ZHIuc19hZGRyKSl7Ci0JCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCWV4
aXQoMSk7Ci0JfQotI2lmZGVmIF9XSU4zMgotCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2th
ZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikg
ewotCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExh
c3RFcnJvcigpKTsKLQl9Ci0jZWxzZQotCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNvY2thZGRy
ICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotCQlwZXJyb3IoImNv
bm5lY3QiKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JdXNyc2N0cF9zeXNjdGxf
c2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19OT05FKTsKLSNlbmRpZgotCXVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX2Vjbl9lbmFibGUoMCk7Ci0JdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2
b2lkICopJmZkKTsKLSNpZmRlZiBfV0lOMzIKLQl0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwg
JmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCwgMCwgTlVMTCk7Ci0jZWxzZQotCXB0aHJlYWRf
Y3JlYXRlKCZ0aWQsIE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpOwotI2VuZGlm
Ci0JaWYgKChzID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9f
U0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKLQkJcGVycm9yKCJ1
c3JzY3RwX3NvY2tldCIpOwotCX0KLQltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKTsKLQlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwotI2lmZGVmIEhB
VkVfU0NPTk5fTEVOCi0Jc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKLSNlbmRpZgotCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKLQlzY29ubi5z
Y29ubl9hZGRyID0gKHZvaWQgKikmZmQ7Ci0JaWYgKHVzcnNjdHBfYmluZChzLCAoc3RydWN0IHNv
Y2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKLQkJ
cGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKLQl9Ci0JaWYgKHVzcnNjdHBfbGlzdGVuKHMsIDEpIDwg
MCkgewotCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7Ci0JfQotCXdoaWxlICgxKSB7Ci0JCWlm
ICh1c3JzY3RwX2FjY2VwdChzLCBOVUxMLCBOVUxMKSA9PSBOVUxMKSB7Ci0JCQlwZXJyb3IoInVz
cnNjdHBfYWNjZXB0Iik7Ci0JCX0KLQl9Ci0JdXNyc2N0cF9jbG9zZShzKTsKLQl1c3JzY3RwX2Rl
cmVnaXN0ZXJfYWRkcmVzcygodm9pZCAqKSZmZCk7Ci0Jd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkg
IT0gMCkgewotI2lmZGVmIF9XSU4zMgotCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCXNsZWVwKDEp
OwotI2VuZGlmCi0JfQotI2lmZGVmIF9XSU4zMgotCVRlcm1pbmF0ZVRocmVhZCh0aWQsIDApOwot
CVdhaXRGb3JTaW5nbGVPYmplY3QodGlkLCBJTkZJTklURSk7Ci0JaWYgKGNsb3Nlc29ja2V0KGZk
KSA9PSBTT0NLRVRfRVJST1IpIHsKLQkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRo
IGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCX0KLQlXU0FDbGVhbnVwKCk7Ci0j
ZWxzZQotCXB0aHJlYWRfY2FuY2VsKHRpZCk7Ci0JcHRocmVhZF9qb2luKHRpZCwgTlVMTCk7Ci0J
aWYgKGNsb3NlKGZkKSA8IDApIHsKLQkJcGVycm9yKCJjbG9zZSIpOwotCX0KLSNlbmRpZgotCXJl
dHVybiAoMCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvaHR0cF9jbGllbnQuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9o
dHRwX2NsaWVudC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZGZkMWVlN2RkODVi
NjQ1MmRhNDA1ZDBmZWNhN2RkZWFiNmRlNWZlLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9odHRwX2NsaWVudC5jCisrKyAvZGV2L251bGwKQEAg
LTEsMjI5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgRmVsaXggV2VpbnJhbmsK
LSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
LSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICovCi0KLS8qCi0gKiBVc2FnZTogaHR0cF9jbGllbnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQg
W2xvY2FsX3BvcnRdIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0gW3Vy
aV0KLSAqLwotCi0jaWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdT
Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1
ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2lmbmRlZiBfV0lOMzIKLSNpbmNs
dWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmbmRlZiBf
V0lOMzIKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgot
I2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2Vsc2UKLSNpbmNsdWRlIDxpby5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8dXNyc2N0cC5oPgotCi1pbnQgZG9uZSA9IDA7Ci1zdGF0aWMgY29uc3QgY2hhciAq
cmVxdWVzdF9wcmVmaXggPSAiR0VUIjsKLXN0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3Bvc3Rm
aXggPSAiSFRUUC8xLjBcclxuVXNlci1hZ2VudDogbGlidXNyc2N0cFxyXG5Db25uZWN0aW9uOiBj
bG9zZVxyXG5cclxuIjsKLWNoYXIgcmVxdWVzdFs1MTJdOwotCi0jaWZkZWYgX1dJTjMyCi10eXBl
ZGVmIGNoYXIqIGNhZGRyX3Q7Ci0jZW5kaWYKLQotc3RhdGljIGludAotcmVjZWl2ZV9jYihzdHJ1
Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAot
ICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBm
bGFncywgdm9pZCAqdWxwX2luZm8pCi17Ci0JaWYgKGRhdGEgPT0gTlVMTCkgewotCQlkb25lID0g
MTsKLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQl9IGVsc2UgewotI2lmZGVmIF9XSU4zMgotCQlf
d3JpdGUoX2ZpbGVubyhzdGRvdXQpLCBkYXRhLCAodW5zaWduZWQgaW50KWRhdGFsZW4pOwotI2Vs
c2UKLQkJaWYgKHdyaXRlKGZpbGVubyhzdGRvdXQpLCBkYXRhLCBkYXRhbGVuKSA8IDApIHsKLQkJ
CXBlcnJvcigid3JpdGUiKTsKLQkJfQotI2VuZGlmCi0JCWZyZWUoZGF0YSk7Ci0JfQotCXJldHVy
biAoMSk7Ci19Ci0KLXZvaWQKLWRlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikK
LXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0JdnByaW50Zihmb3Jt
YXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKmFy
Z3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRy
NDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI2OwotCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBl
bmNhcHM7Ci0JaW50IHJlc3VsdDsKLQotICAgIGlmIChhcmdjIDwgMykgewotICAgICAgICBwcmlu
dGYoIlVzYWdlOiBodHRwX2NsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9y
dF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XSBbdXJpXVxuIik7Ci0g
ICAgICAgIHJldHVybihFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotCXJlc3VsdCA9IDA7Ci0JaWYg
KGFyZ2MgPiA0KSB7Ci0JCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbNF0pLCBOVUxMLCBkZWJ1Z19w
cmludGYpOwotCX0gZWxzZSB7Ci0JCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmlu
dGYpOwotCX0KLQotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9k
ZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7Ci0jZW5kaWYKLQotCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2JsYWNraG9sZSgyKTsKLQotCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQ2
LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBOVUxMKSkg
PT0gTlVMTCkgewotCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7Ci0JCXJlc3VsdCA9IDE7Ci0J
CWdvdG8gb3V0OwotCX0KLQotCWlmIChhcmdjID4gMykgewotCQltZW1zZXQoKHZvaWQgKikmYWRk
cjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jaWZkZWYgSEFWRV9TSU42X0xF
TgotCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRp
ZgotCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCQlhZGRyNi5zaW42X3BvcnQgPSBo
dG9ucyhhdG9pKGFyZ3ZbM10pKTsKLQkJYWRkcjYuc2luNl9hZGRyID0gaW42YWRkcl9hbnk7Ci0J
CWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKLQkJCXBlcnJvcigiYmluZCIpOwotCQkJdXNy
c2N0cF9jbG9zZShzb2NrKTsKLQkJCXJlc3VsdCA9IDI7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0K
LQotCWlmIChhcmdjID4gNSkgewotCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3VkcGVuY2FwcykpOwotCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5F
VDY7Ci0JCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndls1XSkpOwotCQlpZiAodXNy
c2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQX0VOQ0FQ
U19QT1JULCAoY29uc3Qgdm9pZCAqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3VkcGVuY2FwcykpIDwgMCkgewotCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7Ci0JCQl1c3Jz
Y3RwX2Nsb3NlKHNvY2spOwotCQkJcmVzdWx0ID0gMzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQot
Ci0JaWYgKGFyZ2MgPiA2KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCV9zbnByaW50ZihyZXF1ZXN0LCBz
aXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCBhcmd2WzZdLCByZXF1
ZXN0X3Bvc3RmaXgpOwotI2Vsc2UKLQkJc25wcmludGYocmVxdWVzdCwgc2l6ZW9mKHJlcXVlc3Qp
LCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwgcmVxdWVzdF9wb3N0Zml4KTsK
LSNlbmRpZgotCX0gZWxzZSB7Ci0jaWZkZWYgX1dJTjMyCi0JCV9zbnByaW50ZihyZXF1ZXN0LCBz
aXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3Rf
cG9zdGZpeCk7Ci0jZWxzZQotCQlzbnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIl
cyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCk7Ci0jZW5kaWYK
LQl9Ci0KLQlwcmludGYoIlxuSFRUUCByZXF1ZXN0OlxuJXNcbiIsIHJlcXVlc3QpOwotCXByaW50
ZigiXG5IVFRQIHJlc3BvbnNlOlxuIik7Ci0KLQltZW1zZXQoKHZvaWQgKikmYWRkcjQsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQltZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JYWRkcjQu
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0jaWZkZWYgSEFW
RV9TSU42X0xFTgotCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OwotI2VuZGlmCi0JYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0JYWRkcjYuc2luNl9mYW1p
bHkgPSBBRl9JTkVUNjsKLQlhZGRyNC5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwot
CWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOwotCWlmIChpbmV0X3B0b24o
QUZfSU5FVDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09IDEpIHsKLQkJaWYgKHVzcnNj
dHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI2LCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIDwgMCkgewotCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKLQkJ
CXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0JCQlyZXN1bHQgPSA0OwotCQkJZ290byBvdXQ7Ci0JCX0K
LQl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIp
ID09IDEpIHsKLQkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICop
JmFkZHI0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7Ci0JCQlwZXJyb3IoInVz
cnNjdHBfY29ubmVjdCIpOwotCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJCXJlc3VsdCA9IDU7
Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0gZWxzZSB7Ci0JCXByaW50ZigiSWxsZWdhbCBkZXN0aW5h
dGlvbiBhZGRyZXNzXG4iKTsKLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJcmVzdWx0ID0gNjsK
LQkJZ290byBvdXQ7Ci0JfQotCi0JLyogc2VuZCBHRVQgcmVxdWVzdCAqLwotCWlmICh1c3JzY3Rw
X3NlbmR2KHNvY2ssIHJlcXVlc3QsIHN0cmxlbihyZXF1ZXN0KSwgTlVMTCwgMCwgTlVMTCwgMCwg
U0NUUF9TRU5EVl9OT0lORk8sIDApIDwgMCkgewotCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsK
LQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJcmVzdWx0ID0gNjsKLQkJZ290byBvdXQ7Ci0JfQot
Ci0Jd2hpbGUgKCFkb25lKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEqMTAwMCk7Ci0jZWxz
ZQotCQlzbGVlcCgxKTsKLSNlbmRpZgotCX0KLW91dDoKLQl3aGlsZSAodXNyc2N0cF9maW5pc2go
KSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAo
MSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChyZXN1bHQpOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1z
L3J0Y3dlYi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3Byb2dyYW1zL3J0Y3dlYi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAxZTBiNzM0MTI5YmU4ODdkMDY3OTJiNzVmYjU0YWQxMjc1ODRkOGE1Li4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy9ydGN3ZWIuYworKysgL2Rl
di9udWxsCkBAIC0xLDE1MTcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
MyBNaWNoYWVsIFR1ZXhlbgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTMgSXJlbmUgUnVlbmdl
bGVyCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
Ci0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBS
T0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqCi0gKiAkSWQ6IHJ0Y3dlYi5jLHYgMS4yNiAyMDEyLTA3LTE3IDEzOjUwOjAyIHR1ZXhl
biBFeHAgJAotICovCi0KLS8qCi0gKiBnY2MgLVdhbGwgLXN0ZD1jOTkgLXBlZGFudGljIC1vIHJ0
Y3dlYiBydGN3ZWIuYyAtbHVzcnNjdHAKLSAqLwotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0j
aWZkZWYgX1dJTjMyCi0jZGVmaW5lIF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCi0jaW5jbHVkZSA8
d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2luY2x1ZGUgPGNydGRiZy5oPgot
I2Vsc2UKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgot
I2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0j
ZW5kaWYKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5j
bHVkZSA8dXNyc2N0cC5oPgotCi0jZGVmaW5lIExJTkVfTEVOR1RIICgxMDI0KQotI2RlZmluZSBC
VUZGRVJfU0laRSAoMTw8MTYpCi0jZGVmaW5lIE5VTUJFUl9PRl9DSEFOTkVMUyAoMTAwKQotI2Rl
ZmluZSBOVU1CRVJfT0ZfU1RSRUFNUyAoMTAwKQotCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9QUElE
X0NPTlRST0wgICA1MAotI2RlZmluZSBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkcgNTEKLSNk
ZWZpbmUgREFUQV9DSEFOTkVMX1BQSURfQklOQVJZICAgIDUyCi0KLSNkZWZpbmUgREFUQV9DSEFO
TkVMX0NMT1NFRCAgICAgMAotI2RlZmluZSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORyAxCi0jZGVm
aW5lIERBVEFfQ0hBTk5FTF9PUEVOICAgICAgIDIKLSNkZWZpbmUgREFUQV9DSEFOTkVMX0NMT1NJ
TkcgICAgMwotCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JFUSAweDAwMDAwMDAx
Ci0jZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUCAweDAwMDAwMDAyCi0jZGVmaW5l
IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSyAweDAwMDAwMDA0Ci0KLXN0cnVjdCBjaGFubmVs
IHsKLQl1aW50MzJfdCBpZDsKLQl1aW50MzJfdCBwcl92YWx1ZTsKLQl1aW50MTZfdCBwcl9wb2xp
Y3k7Ci0JdWludDE2X3QgaV9zdHJlYW07Ci0JdWludDE2X3Qgb19zdHJlYW07Ci0JdWludDhfdCB1
bm9yZGVyZWQ7Ci0JdWludDhfdCBzdGF0ZTsKLQl1aW50MzJfdCBmbGFnczsKLX07Ci0KLXN0cnVj
dCBwZWVyX2Nvbm5lY3Rpb24gewotCXN0cnVjdCBjaGFubmVsIGNoYW5uZWxzW05VTUJFUl9PRl9D
SEFOTkVMU107Ci0Jc3RydWN0IGNoYW5uZWwgKmlfc3RyZWFtX2NoYW5uZWxbTlVNQkVSX09GX1NU
UkVBTVNdOwotCXN0cnVjdCBjaGFubmVsICpvX3N0cmVhbV9jaGFubmVsW05VTUJFUl9PRl9TVFJF
QU1TXTsKLQl1aW50MTZfdCBvX3N0cmVhbV9idWZmZXJbTlVNQkVSX09GX1NUUkVBTVNdOwotCXVp
bnQzMl90IG9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOwotI2lmZGVmIF9XSU4zMgotCUNSSVRJQ0FM
X1NFQ1RJT04gbXV0ZXg7Ci0jZWxzZQotCXB0aHJlYWRfbXV0ZXhfdCBtdXRleDsKLSNlbmRpZgot
CXN0cnVjdCBzb2NrZXQgKnNvY2s7Ci19IHBlZXJfY29ubmVjdGlvbjsKLQotI2RlZmluZSBEQVRB
X0NIQU5ORUxfT1BFTl9SRVFVRVNUICAwCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BP
TlNFIDEKLSNkZWZpbmUgREFUQV9DSEFOTkVMX0FDSyAgICAgICAgICAgMgotCi0jZGVmaW5lIERB
VEFfQ0hBTk5FTF9SRUxJQUJMRSAgICAgICAgICAgICAgICAwCi0jZGVmaW5lIERBVEFfQ0hBTk5F
TF9SRUxJQUJMRV9TVFJFQU0gICAgICAgICAxCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9VTlJFTElB
QkxFICAgICAgICAgICAgICAyCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxF
X1JFWE1JVCAzCi0jZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEICA0
Ci0KLSNkZWZpbmUgREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9XRUQgMHgwMDAx
Ci0KLSNpZm5kZWYgX1dJTjMyCi0jZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBh
Y2tlZCkpCi0jZWxzZQotI3ByYWdtYSBwYWNrIChwdXNoLCAxKQotI2RlZmluZSBTQ1RQX1BBQ0tF
RAotI2VuZGlmCi0KLXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0IHsKLQl1
aW50OF90IG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICovCi0JdWludDhf
dCBjaGFubmVsX3R5cGU7Ci0JdWludDE2X3QgZmxhZ3M7Ci0JdWludDE2X3QgcmVsaWFiaWxpdHlf
cGFyYW1zOwotCWludDE2X3QgcHJpb3JpdHk7Ci0JY2hhciBsYWJlbFtdOwotfSBTQ1RQX1BBQ0tF
RDsKLQotc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlIHsKLQl1aW50OF90
ICBtc2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX09QRU5fUkVTUE9OU0UgKi8KLQl1aW50OF90ICBl
cnJvcjsKLQl1aW50MTZfdCBmbGFnczsKLQl1aW50MTZfdCByZXZlcnNlX3N0cmVhbTsKLX0gU0NU
UF9QQUNLRUQ7Ci0KLXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrIHsKLQl1aW50OF90ICBt
c2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX0FDSyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotI2lmZGVm
IF9XSU4zMgotI3ByYWdtYSBwYWNrKHBvcCkKLSNlbmRpZgotCi0jdW5kZWYgU0NUUF9QQUNLRUQK
LQotc3RhdGljIHZvaWQKLWluaXRfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rp
b24gKnBjKQotewotCXVpbnQzMl90IGk7Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQlm
b3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxTOyBpKyspIHsKLQkJY2hhbm5lbCA9ICYo
cGMtPmNoYW5uZWxzW2ldKTsKLQkJY2hhbm5lbC0+aWQgPSBpOwotCQljaGFubmVsLT5zdGF0ZSA9
IERBVEFfQ0hBTk5FTF9DTE9TRUQ7Ci0JCWNoYW5uZWwtPnByX3BvbGljeSA9IFNDVFBfUFJfU0NU
UF9OT05FOwotCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7Ci0JCWNoYW5uZWwtPmlfc3RyZWFtID0g
MDsKLQkJY2hhbm5lbC0+b19zdHJlYW0gPSAwOwotCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwot
CQljaGFubmVsLT5mbGFncyA9IDA7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfU1RS
RUFNUzsgaSsrKSB7Ci0JCXBjLT5pX3N0cmVhbV9jaGFubmVsW2ldID0gTlVMTDsKLQkJcGMtPm9f
c3RyZWFtX2NoYW5uZWxbaV0gPSBOVUxMOwotCQlwYy0+b19zdHJlYW1fYnVmZmVyW2ldID0gMDsK
LQl9Ci0JcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyID0gMDsKLQlwYy0+c29jayA9IE5VTEw7
Ci0jaWZkZWYgX1dJTjMyCi0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkp
OwotI2Vsc2UKLQlwdGhyZWFkX211dGV4X2luaXQoJnBjLT5tdXRleCwgTlVMTCk7Ci0jZW5kaWYK
LX0KLQotc3RhdGljIHZvaWQKLWxvY2tfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5l
Y3Rpb24gKnBjKQotewotI2lmZGVmIF9XSU4zMgotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYocGMt
Pm11dGV4KSk7Ci0jZWxzZQotCXB0aHJlYWRfbXV0ZXhfbG9jaygmcGMtPm11dGV4KTsKLSNlbmRp
ZgotfQotCi1zdGF0aWMgdm9pZAotdW5sb2NrX3BlZXJfY29ubmVjdGlvbihzdHJ1Y3QgcGVlcl9j
b25uZWN0aW9uICpwYykKLXsKLSNpZmRlZiBfV0lOMzIKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigm
KHBjLT5tdXRleCkpOwotI2Vsc2UKLQlwdGhyZWFkX211dGV4X3VubG9jaygmcGMtPm11dGV4KTsK
LSNlbmRpZgotfQotCi1zdGF0aWMgc3RydWN0IGNoYW5uZWwgKgotZmluZF9jaGFubmVsX2J5X2lf
c3RyZWFtKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCB1aW50MTZfdCBpX3N0cmVhbSkKLXsK
LQlpZiAoaV9zdHJlYW0gPCBOVU1CRVJfT0ZfU1RSRUFNUykgewotCQlyZXR1cm4gKHBjLT5pX3N0
cmVhbV9jaGFubmVsW2lfc3RyZWFtXSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9
Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgY2hhbm5lbCAqCi1maW5kX2NoYW5uZWxfYnlfb19zdHJlYW0o
c3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsIHVpbnQxNl90IG9fc3RyZWFtKQotewotCWlmIChv
X3N0cmVhbSA8IE5VTUJFUl9PRl9TVFJFQU1TKSB7Ci0JCXJldHVybiAocGMtPm9fc3RyZWFtX2No
YW5uZWxbb19zdHJlYW1dKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLX0KLQot
c3RhdGljIHN0cnVjdCBjaGFubmVsICoKLWZpbmRfZnJlZV9jaGFubmVsKHN0cnVjdCBwZWVyX2Nv
bm5lY3Rpb24gKnBjKQotewotCXVpbnQzMl90IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVS
X09GX0NIQU5ORUxTOyBpKyspIHsKLQkJaWYgKHBjLT5jaGFubmVsc1tpXS5zdGF0ZSA9PSBEQVRB
X0NIQU5ORUxfQ0xPU0VEKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoaSA9PSBOVU1CRVJf
T0ZfQ0hBTk5FTFMpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKCYo
cGMtPmNoYW5uZWxzW2ldKSk7Ci0JfQotfQotCi1zdGF0aWMgdWludDE2X3QKLWZpbmRfZnJlZV9v
X3N0cmVhbShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKLXsKLQlzdHJ1Y3Qgc2N0cF9zdGF0
dXMgc3RhdHVzOwotCXVpbnQzMl90IGksIGxpbWl0OwotCXNvY2tsZW5fdCBsZW47Ci0KLQlsZW4g
PSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOwotCWlmICh1c3JzY3RwX2dl
dHNvY2tvcHQocGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0dXMsICZs
ZW4pIDwgMCkgewotCQlwZXJyb3IoImdldHNvY2tvcHQiKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0J
aWYgKHN0YXR1cy5zc3RhdF9vdXRzdHJtcyA8IE5VTUJFUl9PRl9TVFJFQU1TKSB7Ci0JCWxpbWl0
ID0gc3RhdHVzLnNzdGF0X291dHN0cm1zOwotCX0gZWxzZSB7Ci0JCWxpbWl0ID0gTlVNQkVSX09G
X1NUUkVBTVM7Ci0JfQotCS8qIHN0cmVhbSBpZCAwIGlzIHJlc2VydmVkICovCi0JZm9yIChpID0g
MTsgaSA8IGxpbWl0OyBpKyspIHsKLQkJaWYgKHBjLT5vX3N0cmVhbV9jaGFubmVsW2ldID09IE5V
TEwpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IGxpbWl0KSB7Ci0JCXJldHVybiAo
MCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgodWludDE2X3QpaSk7Ci0JfQotfQotCi1zdGF0aWMg
dm9pZAotcmVxdWVzdF9tb3JlX29fc3RyZWFtcyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykK
LXsKLQlzdHJ1Y3Qgc2N0cF9zdGF0dXMgc3RhdHVzOwotCXN0cnVjdCBzY3RwX2FkZF9zdHJlYW1z
IHNhczsKLQl1aW50MzJfdCBpLCBvX3N0cmVhbXNfbmVlZGVkOwotCXNvY2tsZW5fdCBsZW47Ci0K
LQlvX3N0cmVhbXNfbmVlZGVkID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5O
RUxTOyBpKyspIHsKLQkJaWYgKChwYy0+Y2hhbm5lbHNbaV0uc3RhdGUgPT0gREFUQV9DSEFOTkVM
X0NPTk5FQ1RJTkcpICYmCi0JCSAgICAocGMtPmNoYW5uZWxzW2ldLm9fc3RyZWFtID09IDApKSB7
Ci0JCQlvX3N0cmVhbXNfbmVlZGVkKys7Ci0JCX0KLQl9Ci0JbGVuID0gKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc3RhdHVzKTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2Nr
LCBJUFBST1RPX1NDVFAsIFNDVFBfU1RBVFVTLCAmc3RhdHVzLCAmbGVuKSA8IDApIHsKLQkJcGVy
cm9yKCJnZXRzb2Nrb3B0Iik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKHN0YXR1cy5zc3RhdF9vdXRz
dHJtcyArIG9fc3RyZWFtc19uZWVkZWQgPiBOVU1CRVJfT0ZfU1RSRUFNUykgewotCQlvX3N0cmVh
bXNfbmVlZGVkID0gTlVNQkVSX09GX1NUUkVBTVMgLSBzdGF0dXMuc3N0YXRfb3V0c3RybXM7Ci0J
fQotCWlmIChvX3N0cmVhbXNfbmVlZGVkID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQo
JnNhcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zKSk7Ci0Jc2FzLnNhc19pbnN0
cm1zID0gMDsKLQlzYXMuc2FzX291dHN0cm1zID0gKHVpbnQxNl90KW9fc3RyZWFtc19uZWVkZWQ7
IC8qIFhYWCBlcm9yIGhhbmRsaW5nICovCi0JaWYgKHVzcnNjdHBfc2V0c29ja29wdChwYy0+c29j
aywgSVBQUk9UT19TQ1RQLCBTQ1RQX0FERF9TVFJFQU1TLCAmc2FzLCAoc29ja2xlbl90KXNpemVv
ZihzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcykpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQi
KTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50Ci1zZW5kX29wZW5fcmVxdWVzdF9tZXNz
YWdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQxNl90IG9fc3RyZWFtLCB1aW50OF90IHVub3Jk
ZXJlZCwgdWludDE2X3QgcHJfcG9saWN5LCB1aW50MzJfdCBwcl92YWx1ZSkKLXsKLQkvKiBYWFg6
IFRoaXMgc2hvdWxkIGJlIGVuY29kZWQgaW4gYSBiZXR0ZXIgd2F5ICovCi0Jc3RydWN0IHJ0Y3dl
Yl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgcmVxOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc25k
aW5mbzsKLQotCW1lbXNldCgmcmVxLCAwLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5l
bF9vcGVuX3JlcXVlc3QpKTsKLQlyZXEubXNnX3R5cGUgPSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFV
RVNUOwotCXN3aXRjaCAocHJfcG9saWN5KSB7Ci0JY2FzZSBTQ1RQX1BSX1NDVFBfTk9ORToKLQkJ
LyogWFhYOiBXaGF0IGFib3V0IERBVEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gKi8KLQkJcmVx
LmNoYW5uZWxfdHlwZSA9IERBVEFfQ0hBTk5FTF9SRUxJQUJMRTsKLQkJYnJlYWs7Ci0JY2FzZSBT
Q1RQX1BSX1NDVFBfVFRMOgotCQkvKiBYWFg6IFdoYXQgYWJvdXQgREFUQV9DSEFOTkVMX1VOUkVM
SUFCTEUgKi8KLQkJcmVxLmNoYW5uZWxfdHlwZSA9IERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElB
QkxFX1RJTUVEOwotCQlicmVhazsKLQljYXNlIFNDVFBfUFJfU0NUUF9SVFg6Ci0JCXJlcS5jaGFu
bmVsX3R5cGUgPSBEQVRBX0NIQU5ORUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQ7Ci0JCWJyZWFr
OwotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0JfQotCXJlcS5mbGFncyA9IGh0b25zKDApOwot
CWlmICh1bm9yZGVyZWQpIHsKLQkJcmVxLmZsYWdzIHw9IGh0b25zKERBVEFfQ0hBTk5FTF9GTEFH
X09VVF9PRl9PUkRFUl9BTExPV0VEKTsKLQl9Ci0JcmVxLnJlbGlhYmlsaXR5X3BhcmFtcyA9IGh0
b25zKCh1aW50MTZfdClwcl92YWx1ZSk7IC8qIFhYWCBXaHkgMTYtYml0ICovCi0JcmVxLnByaW9y
aXR5ID0gaHRvbnMoMCk7IC8qIFhYWDogYWRkIHN1cHBvcnQgKi8KLQltZW1zZXQoJnNuZGluZm8s
IDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7Ci0Jc25kaW5mby5zbmRfc2lkID0gb19z
dHJlYW07Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKLQlzbmRpbmZvLnNuZF9wcGlk
ID0gaHRvbmwoREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTCk7Ci0JaWYgKHVzcnNjdHBfc2VuZHYo
c29jaywKLQkgICAgICAgICAgICAgICAgICAmcmVxLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRh
Y2hhbm5lbF9vcGVuX3JlcXVlc3QpLAotCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCi0JICAg
ICAgICAgICAgICAgICAgJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3Nu
ZGluZm8pLAotCSAgICAgICAgICAgICAgICAgIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7
Ci0JCXBlcnJvcigic2N0cF9zZW5kdiIpOwotCQlyZXR1cm4gKDApOwotCX0gZWxzZSB7Ci0JCXJl
dHVybiAoMSk7Ci0JfQotfQotCi1zdGF0aWMgaW50Ci1zZW5kX29wZW5fcmVzcG9uc2VfbWVzc2Fn
ZShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1aW50MTZfdCBvX3N0cmVhbSwgdWludDE2X3QgaV9zdHJl
YW0pCi17Ci0JLyogWFhYOiBUaGlzIHNob3VsZCBiZSBlbmNvZGVkIGluIGEgYmV0dGVyIHdheSAq
LwotCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSByc3A7Ci0Jc3RydWN0
IHNjdHBfc25kaW5mbyBzbmRpbmZvOwotCi0JbWVtc2V0KCZyc3AsIDAsIHNpemVvZihzdHJ1Y3Qg
cnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UpKTsKLQlyc3AubXNnX3R5cGUgPSBEQVRB
X0NIQU5ORUxfT1BFTl9SRVNQT05TRTsKLQlyc3AuZXJyb3IgPSAwOwotCXJzcC5mbGFncyA9IGh0
b25zKDApOwotCXJzcC5yZXZlcnNlX3N0cmVhbSA9IGh0b25zKGlfc3RyZWFtKTsKLQltZW1zZXQo
JnNuZGluZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSk7Ci0Jc25kaW5mby5zbmRf
c2lkID0gb19zdHJlYW07Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0VPUjsKLQlzbmRpbmZv
LnNuZF9wcGlkID0gaHRvbmwoREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTCk7Ci0JaWYgKHVzcnNj
dHBfc2VuZHYoc29jaywKLQkgICAgICAgICAgICAgICAgICAmcnNwLCBzaXplb2Yoc3RydWN0IHJ0
Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlKSwKLQkgICAgICAgICAgICAgICAgICBOVUxM
LCAwLAotCSAgICAgICAgICAgICAgICAgICZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9zbmRpbmZvKSwKLQkgICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRWX1NORElORk8s
IDApIDwgMCkgewotCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsKLQkJcmV0dXJuICgwKTsKLQl9IGVs
c2UgewotCQlyZXR1cm4gKDEpOwotCX0KLX0KLQotc3RhdGljIGludAotc2VuZF9vcGVuX2Fja19t
ZXNzYWdlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQxNl90IG9fc3RyZWFtKQotewotCS8qIFhY
WDogVGhpcyBzaG91bGQgYmUgZW5jb2RlZCBpbiBhIGJldHRlciB3YXkgKi8KLQlzdHJ1Y3QgcnRj
d2ViX2RhdGFjaGFubmVsX2FjayBhY2s7Ci0Jc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOwot
Ci0JbWVtc2V0KCZhY2ssIDAsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2Fjaykp
OwotCWFjay5tc2dfdHlwZSA9IERBVEFfQ0hBTk5FTF9BQ0s7Ci0JbWVtc2V0KCZzbmRpbmZvLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpOwotCXNuZGluZm8uc25kX3NpZCA9IG9fc3Ry
ZWFtOwotCXNuZGluZm8uc25kX2ZsYWdzID0gU0NUUF9FT1I7Ci0Jc25kaW5mby5zbmRfcHBpZCA9
IGh0b25sKERBVEFfQ0hBTk5FTF9QUElEX0NPTlRST0wpOwotCWlmICh1c3JzY3RwX3NlbmR2KHNv
Y2ssCi0JICAgICAgICAgICAgICAgICAgJmFjaywgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNo
YW5uZWxfYWNrKSwKLQkgICAgICAgICAgICAgICAgICBOVUxMLCAwLAotCSAgICAgICAgICAgICAg
ICAgICZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwKLQkg
ICAgICAgICAgICAgICAgICBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgewotCQlwZXJyb3Io
InNjdHBfc2VuZHYiKTsKLQkJcmV0dXJuICgwKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKDEpOwot
CX0KLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfZGVmZXJyZWRfbWVzc2FnZXMoc3RydWN0IHBlZXJf
Y29ubmVjdGlvbiAqcGMpCi17Ci0JdWludDMyX3QgaTsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5l
bDsKLQotCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgewotCQljaGFu
bmVsID0gJihwYy0+Y2hhbm5lbHNbaV0pOwotCQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NI
QU5ORUxfRkxBR1NfU0VORF9SRVEpIHsKLQkJCWlmIChzZW5kX29wZW5fcmVxdWVzdF9tZXNzYWdl
KHBjLT5zb2NrLCBjaGFubmVsLT5vX3N0cmVhbSwgY2hhbm5lbC0+dW5vcmRlcmVkLCBjaGFubmVs
LT5wcl9wb2xpY3ksIGNoYW5uZWwtPnByX3ZhbHVlKSkgewotCQkJCWNoYW5uZWwtPmZsYWdzICY9
IH5EQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SRVE7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChlcnJu
byAhPSBFQUdBSU4pIHsKLQkJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQkJCX0KLQkJ
CX0KLQkJfQotCQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9S
U1ApIHsKLQkJCWlmIChzZW5kX29wZW5fcmVzcG9uc2VfbWVzc2FnZShwYy0+c29jaywgY2hhbm5l
bC0+b19zdHJlYW0sIGNoYW5uZWwtPmlfc3RyZWFtKSkgewotCQkJCWNoYW5uZWwtPmZsYWdzICY9
IH5EQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1A7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChlcnJu
byAhPSBFQUdBSU4pIHsKLQkJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQkJCX0KLQkJ
CX0KLQkJfQotCQlpZiAoY2hhbm5lbC0+ZmxhZ3MgJiBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9B
Q0spIHsKLQkJCWlmIChzZW5kX29wZW5fYWNrX21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwtPm9f
c3RyZWFtKSkgewotCQkJCWNoYW5uZWwtPmZsYWdzICY9IH5EQVRBX0NIQU5ORUxfRkxBR1NfU0VO
RF9BQ0s7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChlcnJubyAhPSBFQUdBSU4pIHsKLQkJCQkJLyog
WFhYOiBlcnJvciBoYW5kbGluZyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm47Ci19
Ci0KLXN0YXRpYyBzdHJ1Y3QgY2hhbm5lbCAqCi1vcGVuX2NoYW5uZWwoc3RydWN0IHBlZXJfY29u
bmVjdGlvbiAqcGMsIHVpbnQ4X3QgdW5vcmRlcmVkLCB1aW50MTZfdCBwcl9wb2xpY3ksIHVpbnQz
Ml90IHByX3ZhbHVlKQotewotCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOwotCXVpbnQxNl90IG9f
c3RyZWFtOwotCi0JaWYgKChwcl9wb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCi0JICAg
IChwcl9wb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX1RUTCkgJiYKLQkgICAgKHByX3BvbGljeSAhPSBT
Q1RQX1BSX1NDVFBfUlRYKSkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKHVub3JkZXJl
ZCAhPSAwKSAmJiAodW5vcmRlcmVkICE9IDEpKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlm
ICgocHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9OT05FKSAmJiAocHJfdmFsdWUgIT0gMCkpIHsK
LQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKChjaGFubmVsID0gZmluZF9mcmVlX2NoYW5uZWwo
cGMpKSA9PSBOVUxMKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW9fc3RyZWFtID0gZmluZF9m
cmVlX29fc3RyZWFtKHBjKTsKLQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DT05ORUNU
SU5HOwotCWNoYW5uZWwtPnVub3JkZXJlZCA9IHVub3JkZXJlZDsKLQljaGFubmVsLT5wcl9wb2xp
Y3kgPSBwcl9wb2xpY3k7Ci0JY2hhbm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1ZTsKLQljaGFubmVs
LT5vX3N0cmVhbSA9IG9fc3RyZWFtOwotCWNoYW5uZWwtPmZsYWdzID0gMDsKLQlpZiAob19zdHJl
YW0gPT0gMCkgewotCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKLQl9IGVsc2UgewotCQlp
ZiAoc2VuZF9vcGVuX3JlcXVlc3RfbWVzc2FnZShwYy0+c29jaywgb19zdHJlYW0sIHVub3JkZXJl
ZCwgcHJfcG9saWN5LCBwcl92YWx1ZSkpIHsKLQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3Ry
ZWFtXSA9IGNoYW5uZWw7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7Ci0J
CQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKLQkJCQljaGFubmVs
LT5mbGFncyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SRVE7Ci0JCQl9IGVsc2UgewotCQkJ
CWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKLQkJCQljaGFubmVsLT51bm9y
ZGVyZWQgPSAwOwotCQkJCWNoYW5uZWwtPnByX3BvbGljeSA9IDA7Ci0JCQkJY2hhbm5lbC0+cHJf
dmFsdWUgPSAwOwotCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKLQkJCQljaGFubmVsLT5mbGFn
cyA9IDA7Ci0JCQkJY2hhbm5lbCA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjaGFu
bmVsKTsKLX0KLQotc3RhdGljIGludAotc2VuZF91c2VyX21lc3NhZ2Uoc3RydWN0IHBlZXJfY29u
bmVjdGlvbiAqcGMsIHN0cnVjdCBjaGFubmVsICpjaGFubmVsLCBjaGFyICptZXNzYWdlLCBzaXpl
X3QgbGVuZ3RoKQotewotCXN0cnVjdCBzY3RwX3NlbmR2X3NwYSBzcGE7Ci0KLQlpZiAoY2hhbm5l
bCA9PSBOVUxMKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmICgoY2hhbm5lbC0+c3RhdGUgIT0g
REFUQV9DSEFOTkVMX09QRU4pICYmCi0JICAgIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5O
RUxfQ09OTkVDVElORykpIHsKLQkJLyogWFhYOiBXaGF0IHRvIGRvIGluIG90aGVyIHN0YXRlcyAq
LwotCQlyZXR1cm4gKDApOwotCX0KLQotCW1lbXNldCgmc3BhLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfc2VuZHZfc3BhKSk7Ci0Jc3BhLnNlbmR2X3NuZGluZm8uc25kX3NpZCA9IGNoYW5uZWwtPm9f
c3RyZWFtOwotCWlmICgoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4pICYmCi0J
ICAgIChjaGFubmVsLT51bm9yZGVyZWQpKSB7Ci0JCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9mbGFn
cyA9IFNDVFBfRU9SIHwgU0NUUF9VTk9SREVSRUQ7Ci0JfSBlbHNlIHsKLQkJc3BhLnNlbmR2X3Nu
ZGluZm8uc25kX2ZsYWdzID0gU0NUUF9FT1I7Ci0JfQotCXNwYS5zZW5kdl9zbmRpbmZvLnNuZF9w
cGlkID0gaHRvbmwoREFUQV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HKTsKLQlzcGEuc2VuZHZfZmxh
Z3MgPSBTQ1RQX1NFTkRfU05ESU5GT19WQUxJRDsKLQlpZiAoKGNoYW5uZWwtPnByX3BvbGljeSA9
PSBTQ1RQX1BSX1NDVFBfVFRMKSB8fAotCSAgICAoY2hhbm5lbC0+cHJfcG9saWN5ID09IFNDVFBf
UFJfU0NUUF9SVFgpKSB7Ci0JCXNwYS5zZW5kdl9wcmluZm8ucHJfcG9saWN5ID0gY2hhbm5lbC0+
cHJfcG9saWN5OwotCQlzcGEuc2VuZHZfcHJpbmZvLnByX3ZhbHVlID0gY2hhbm5lbC0+cHJfdmFs
dWU7Ci0JCXNwYS5zZW5kdl9mbGFncyB8PSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEOwotCX0KLQlp
ZiAodXNyc2N0cF9zZW5kdihwYy0+c29jaywKLQkgICAgICAgICAgICAgICAgICBtZXNzYWdlLCBs
ZW5ndGgsCi0JICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKLQkgICAgICAgICAgICAgICAgICAm
c3BhLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpLAotCSAgICAgICAg
ICAgICAgICAgIFNDVFBfU0VORFZfU1BBLCAwKSA8IDApIHsKLQkJcGVycm9yKCJzY3RwX3NlbmR2
Iik7Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgxKTsKLQl9Ci19Ci0KLXN0
YXRpYyB2b2lkCi1yZXNldF9vdXRnb2luZ19zdHJlYW0oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAq
cGMsIHVpbnQxNl90IG9fc3RyZWFtKQotewotCXVpbnQzMl90IGk7Ci0KLQlmb3IgKGkgPSAwOyBp
IDwgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOyBpKyspIHsKLQkJaWYgKHBjLT5vX3N0cmVh
bV9idWZmZXJbaV0gPT0gb19zdHJlYW0pIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlwYy0+b19z
dHJlYW1fYnVmZmVyW3BjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlcisrXSA9IG9fc3RyZWFtOwot
CXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNlbmRfb3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHN0
cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQotewotCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMg
KnNyczsKLQl1aW50MzJfdCBpOwotCXNpemVfdCBsZW47Ci0KLQlpZiAocGMtPm9fc3RyZWFtX2J1
ZmZlcl9jb3VudGVyID09IDApIHsKLQkJcmV0dXJuOwotCX0KLQlsZW4gPSBzaXplb2Yoc2N0cF9h
c3NvY190KSArICgyICsgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyKSAqIHNpemVvZih1aW50
MTZfdCk7Ci0Jc3JzID0gKHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKiltYWxsb2MobGVuKTsK
LQlpZiAoc3JzID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoc3JzLCAwLCBsZW4p
OwotCXNycy0+c3JzX2ZsYWdzID0gU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkc7Ci0Jc3JzLT5z
cnNfbnVtYmVyX3N0cmVhbXMgPSBwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXI7Ci0JZm9yIChp
ID0gMDsgaSA8IHBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlcjsgaSsrKSB7Ci0JCXNycy0+c3Jz
X3N0cmVhbV9saXN0W2ldID0gcGMtPm9fc3RyZWFtX2J1ZmZlcltpXTsKLQl9Ci0JaWYgKHVzcnNj
dHBfc2V0c29ja29wdChwYy0+c29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFU0VUX1NUUkVBTVMs
IHNycywgKHNvY2tsZW5fdClsZW4pIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQiKTsKLQl9
IGVsc2UgewotCQlmb3IgKGkgPSAwOyBpIDwgcGMtPm9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOyBp
KyspIHsKLQkJCXNycy0+c3JzX3N0cmVhbV9saXN0W2ldID0gMDsKLQkJfQotCQlwYy0+b19zdHJl
YW1fYnVmZmVyX2NvdW50ZXIgPSAwOwotCX0KLQlmcmVlKHNycyk7Ci0JcmV0dXJuOwotfQotCi1z
dGF0aWMgdm9pZAotY2xvc2VfY2hhbm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3Ry
dWN0IGNoYW5uZWwgKmNoYW5uZWwpCi17Ci0JaWYgKGNoYW5uZWwgPT0gTlVMTCkgewotCQlyZXR1
cm47Ci0JfQotCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BFTikgewotCQly
ZXR1cm47Ci0JfQotCXJlc2V0X291dGdvaW5nX3N0cmVhbShwYywgY2hhbm5lbC0+b19zdHJlYW0p
OwotCXNlbmRfb3V0Z29pbmdfc3RyZWFtX3Jlc2V0KHBjKTsKLQljaGFubmVsLT5zdGF0ZSA9IERB
VEFfQ0hBTk5FTF9DTE9TSU5HOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9v
cGVuX3JlcXVlc3RfbWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVz
dCAqcmVxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0Jc3RydWN0IGNo
YW5uZWwgKmNoYW5uZWw7Ci0JdWludDMyX3QgcHJfdmFsdWU7Ci0JdWludDE2X3QgcHJfcG9saWN5
OwotCXVpbnQxNl90IG9fc3RyZWFtOwotCXVpbnQ4X3QgdW5vcmRlcmVkOwotCi0JaWYgKChjaGFu
bmVsID0gZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBpX3N0cmVhbSkpKSB7Ci0JCXByaW50
ZigiaGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdlOiBjaGFubmVsICVkIGlzIGluIHN0YXRlICVk
IGluc3RlYWQgb2YgQ0xPU0VELlxuIiwKLQkJICAgICAgIGNoYW5uZWwtPmlkLCBjaGFubmVsLT5z
dGF0ZSk7Ci0JCS8qIFhYWDogc29tZSBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfQot
CWlmICgoY2hhbm5lbCA9IGZpbmRfZnJlZV9jaGFubmVsKHBjKSkgPT0gTlVMTCkgewotCQkvKiBY
WFg6IHNvbWUgZXJyb3IgaGFuZGxpbmcgKi8KLQkJcmV0dXJuOwotCX0KLQlzd2l0Y2ggKHJlcS0+
Y2hhbm5lbF90eXBlKSB7Ci0JY2FzZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEU6Ci0JCXByX3BvbGlj
eSA9IFNDVFBfUFJfU0NUUF9OT05FOwotCQlicmVhazsKLQkvKiBYWFggRG9lc24ndCBtYWtlIHNl
bnNlICovCi0JY2FzZSBEQVRBX0NIQU5ORUxfUkVMSUFCTEVfU1RSRUFNOgotCQlwcl9wb2xpY3kg
PSBTQ1RQX1BSX1NDVFBfTk9ORTsKLQkJYnJlYWs7Ci0JLyogWFhYIERvZXNuJ3QgbWFrZSBzZW5z
ZSAqLwotCWNhc2UgREFUQV9DSEFOTkVMX1VOUkVMSUFCTEU6Ci0JCXByX3BvbGljeSA9IFNDVFBf
UFJfU0NUUF9UVEw7Ci0JCWJyZWFrOwotCWNhc2UgREFUQV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFC
TEVfUkVYTUlUOgotCQlwcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfUlRYOwotCQlicmVhazsKLQlj
YXNlIERBVEFfQ0hBTk5FTF9QQVJUSUFMX1JFTElBQkxFX1RJTUVEOgotCQlwcl9wb2xpY3kgPSBT
Q1RQX1BSX1NDVFBfVFRMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcl9wb2xpY3kgPSBTQ1RQ
X1BSX1NDVFBfTk9ORTsKLQkJLyogWFhYIGVycm9yIGhhbmRsaW5nICovCi0JCWJyZWFrOwotCX0K
LQlwcl92YWx1ZSA9IG50b2hzKHJlcS0+cmVsaWFiaWxpdHlfcGFyYW1zKTsKLQlpZiAobnRvaHMo
cmVxLT5mbGFncykgJiBEQVRBX0NIQU5ORUxfRkxBR19PVVRfT0ZfT1JERVJfQUxMT1dFRCkgewot
CQl1bm9yZGVyZWQgPSAxOwotCX0gZWxzZSB7Ci0JCXVub3JkZXJlZCA9IDA7Ci0JfQotCW9fc3Ry
ZWFtID0gZmluZF9mcmVlX29fc3RyZWFtKHBjKTsKLQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hB
Tk5FTF9DT05ORUNUSU5HOwotCWNoYW5uZWwtPnVub3JkZXJlZCA9IHVub3JkZXJlZDsKLQljaGFu
bmVsLT5wcl9wb2xpY3kgPSBwcl9wb2xpY3k7Ci0JY2hhbm5lbC0+cHJfdmFsdWUgPSBwcl92YWx1
ZTsKLQljaGFubmVsLT5pX3N0cmVhbSA9IGlfc3RyZWFtOwotCWNoYW5uZWwtPm9fc3RyZWFtID0g
b19zdHJlYW07Ci0JY2hhbm5lbC0+ZmxhZ3MgPSAwOwotCXBjLT5pX3N0cmVhbV9jaGFubmVsW2lf
c3RyZWFtXSA9IGNoYW5uZWw7Ci0JaWYgKG9fc3RyZWFtID09IDApIHsKLQkJcmVxdWVzdF9tb3Jl
X29fc3RyZWFtcyhwYyk7Ci0JfSBlbHNlIHsKLQkJaWYgKHNlbmRfb3Blbl9yZXNwb25zZV9tZXNz
YWdlKHBjLT5zb2NrLCBvX3N0cmVhbSwgaV9zdHJlYW0pKSB7Ci0JCQlwYy0+b19zdHJlYW1fY2hh
bm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOwotCQl9IGVsc2UgewotCQkJaWYgKGVycm5vID09IEVB
R0FJTikgewotCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JT
UDsKLQkJCQlwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOwotCQkJfSBl
bHNlIHsKLQkJCQkvKiBYWFg6IFNpZ25hbCBlcnJvciB0byB0aGUgb3RoZXIgZW5kLiAqLwotCQkJ
CXBjLT5pX3N0cmVhbV9jaGFubmVsW2lfc3RyZWFtXSA9IE5VTEw7Ci0JCQkJY2hhbm5lbC0+c3Rh
dGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOwotCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7Ci0J
CQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gMDsKLQkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7Ci0J
CQkJY2hhbm5lbC0+aV9zdHJlYW0gPSAwOwotCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKLQkJ
CQljaGFubmVsLT5mbGFncyA9IDA7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1o
YW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29w
ZW5fcmVzcG9uc2UgKnJzcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxl
bmd0aCwgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0JdWludDE2X3Qgb19zdHJlYW07Ci0Jc3RydWN0
IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQlvX3N0cmVhbSA9IG50b2hzKHJzcC0+cmV2ZXJzZV9zdHJl
YW0pOwotCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfb19zdHJlYW0ocGMsIG9fc3RyZWFtKTsK
LQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0JCS8qIFhYWDogaW1wcm92ZSBlcnJvciBoYW5kbGlu
ZyAqLwotCQlwcmludGYoImhhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2U6IENhbid0IGZpbmQg
Y2hhbm5lbCBmb3Igb3V0Z29pbmcgc3RlYW0gJWQuXG4iLCBvX3N0cmVhbSk7Ci0JCXJldHVybjsK
LQl9Ci0JaWYgKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSB7Ci0J
CS8qIFhYWDogaW1wcm92ZSBlcnJvciBoYW5kbGluZyAqLwotCQlwcmludGYoImhhbmRsZV9vcGVu
X3Jlc3BvbnNlX21lc3NhZ2U6IENoYW5uZWwgd2l0aCBpZCAlZCBmb3Igb3V0Z29pbmcgc3RlYW0g
JWQgaXMgaW4gc3RhdGUgJWQuXG4iLCBjaGFubmVsLT5pZCwgb19zdHJlYW0sIGNoYW5uZWwtPnN0
YXRlKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBjLCBp
X3N0cmVhbSkpIHsKLQkJLyogWFhYOiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICovCi0JCXByaW50
ZigiaGFuZGxlX29wZW5fcmVzcG9uc2VfbWVzc2FnZTogQ2hhbm5lbCBjb2xsaXNpb24gZm9yIGNo
YW5uZWwgd2l0aCBpZCAlZCBhbmQgc3RyZWFtcyAoaW4vb3V0KSA9ICglZC8lZCkuXG4iLCBjaGFu
bmVsLT5pZCwgaV9zdHJlYW0sIG9fc3RyZWFtKTsKLQkJcmV0dXJuOwotCX0KLQljaGFubmVsLT5p
X3N0cmVhbSA9IGlfc3RyZWFtOwotCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47
Ci0JcGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJlYW1dID0gY2hhbm5lbDsKLQlpZiAoc2VuZF9v
cGVuX2Fja19tZXNzYWdlKHBjLT5zb2NrLCBvX3N0cmVhbSkpIHsKLQkJY2hhbm5lbC0+ZmxhZ3Mg
PSAwOwotCX0gZWxzZSB7Ci0JCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9GTEFHU19T
RU5EX0FDSzsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX29wZW5fYWNr
X21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsCi0gICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjayAqYWNrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90IGxlbmd0aCwgdWludDE2X3QgaV9zdHJlYW0pCi17Ci0Jc3RydWN0IGNo
YW5uZWwgKmNoYW5uZWw7Ci0KLQljaGFubmVsID0gZmluZF9jaGFubmVsX2J5X2lfc3RyZWFtKHBj
LCBpX3N0cmVhbSk7Ci0JaWYgKGNoYW5uZWwgPT0gTlVMTCkgewotCQkvKiBYWFg6IHNvbWUgZXJy
b3IgaGFuZGxpbmcgKi8KLQkJcmV0dXJuOwotCX0KLQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFU
QV9DSEFOTkVMX09QRU4pIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY2hhbm5lbC0+c3RhdGUgIT0g
REFUQV9DSEFOTkVMX0NPTk5FQ1RJTkcpIHsKLQkJLyogWFhYOiBlcnJvciBoYW5kbGluZyAqLwot
CQlyZXR1cm47Ci0JfQotCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX09QRU47Ci0JcmV0
dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX3Vua25vd25fbWVzc2FnZShjaGFyICptc2cs
IHNpemVfdCBsZW5ndGgsIHVpbnQxNl90IGlfc3RyZWFtKQotewotCS8qIFhYWDogU2VuZCBhbiBl
cnJvciBtZXNzYWdlICovCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2RhdGFf
bWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywKLSAgICAgICAgICAgICAgICAgICAg
Y2hhciAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50MTZfdCBpX3N0cmVhbSkKLXsKLQlzdHJ1
Y3QgY2hhbm5lbCAqY2hhbm5lbDsKLQotCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJl
YW0ocGMsIGlfc3RyZWFtKTsKLQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0JCS8qIFhYWDogU29t
ZSBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChjaGFubmVsLT5zdGF0ZSA9
PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgewotCQkvKiBJbXBsaWNpdCBBQ0sgKi8KLQkJY2hh
bm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfT1BFTjsKLQl9Ci0JaWYgKGNoYW5uZWwtPnN0YXRl
ICE9IERBVEFfQ0hBTk5FTF9PUEVOKSB7Ci0JCS8qIFhYWDogV2hhdCBhYm91dCBvdGhlciBzdGF0
ZXM/ICovCi0JCS8qIFhYWDogU29tZSBlcnJvciBoYW5kbGluZyAqLwotCQlyZXR1cm47Ci0JfSBl
bHNlIHsKLQkJLyogQXNzdW1pbmcgREFUQV9DSEFOTkVMX1BQSURfRE9NU1RSSU5HICovCi0JCS8q
IFhYWDogUHJvdGVjdCBmb3Igbm9uIDAgdGVybWluYXRlZCBidWZmZXIgKi8KLQkJcHJpbnRmKCJN
ZXNzYWdlIHJlY2VpdmVkIG9mIGxlbmd0aCAlenUgb24gY2hhbm5lbCB3aXRoIGlkICVkOiAlLipz
XG4iLAotCQkgICAgICAgbGVuZ3RoLCBjaGFubmVsLT5pZCwgKGludClsZW5ndGgsIGJ1ZmZlcik7
Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLWhhbmRsZV9tZXNzYWdlKHN0cnVjdCBw
ZWVyX2Nvbm5lY3Rpb24gKnBjLCBjaGFyICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQzMl90
IHBwaWQsIHVpbnQxNl90IGlfc3RyZWFtKQotewotCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxf
b3Blbl9yZXF1ZXN0ICpyZXE7Ci0Jc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3Bv
bnNlICpyc3A7Ci0Jc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKmFjaywgKm1zZzsKLQot
CXN3aXRjaCAocHBpZCkgewotCWNhc2UgREFUQV9DSEFOTkVMX1BQSURfQ09OVFJPTDoKLQkJaWYg
KGxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpIHsKLQkJCXJl
dHVybjsKLQkJfQotCQltc2cgPSAoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKilidWZm
ZXI7Ci0JCXN3aXRjaCAobXNnLT5tc2dfdHlwZSkgewotCQljYXNlIERBVEFfQ0hBTk5FTF9PUEVO
X1JFUVVFU1Q6Ci0JCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5u
ZWxfb3Blbl9yZXF1ZXN0KSkgewotCQkJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmc/ICovCi0JCQkJ
cmV0dXJuOwotCQkJfQotCQkJcmVxID0gKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9y
ZXF1ZXN0ICopYnVmZmVyOwotCQkJaGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdlKHBjLCByZXEs
IGxlbmd0aCwgaV9zdHJlYW0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX09QRU5f
UkVTUE9OU0U6Ci0JCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5u
ZWxfb3Blbl9yZXNwb25zZSkpIHsKLQkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nPyAqLwotCQkJ
CXJldHVybjsKLQkJCX0KLQkJCXJzcCA9IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5f
cmVzcG9uc2UgKilidWZmZXI7Ci0JCQloYW5kbGVfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLCBy
c3AsIGxlbmd0aCwgaV9zdHJlYW0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX0FD
SzoKLQkJCWlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sp
KSB7Ci0JCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZz8gKi8KLQkJCQlyZXR1cm47Ci0JCQl9Ci0J
CQlhY2sgPSAoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2sgKilidWZmZXI7Ci0JCQloYW5k
bGVfb3Blbl9hY2tfbWVzc2FnZShwYywgYWNrLCBsZW5ndGgsIGlfc3RyZWFtKTsKLQkJCWJyZWFr
OwotCQlkZWZhdWx0OgotCQkJaGFuZGxlX3Vua25vd25fbWVzc2FnZShidWZmZXIsIGxlbmd0aCwg
aV9zdHJlYW0pOwotCQkJYnJlYWs7Ci0JCX0KLQkJYnJlYWs7Ci0JY2FzZSBEQVRBX0NIQU5ORUxf
UFBJRF9ET01TVFJJTkc6Ci0JY2FzZSBEQVRBX0NIQU5ORUxfUFBJRF9CSU5BUlk6Ci0JCWhhbmRs
ZV9kYXRhX21lc3NhZ2UocGMsIGJ1ZmZlciwgbGVuZ3RoLCBpX3N0cmVhbSk7Ci0JCWJyZWFrOwot
CWRlZmF1bHQ6Ci0JCXByaW50ZigiTWVzc2FnZSBvZiBsZW5ndGggJXp1LCBQUElEICV1IG9uIHN0
cmVhbSAldSByZWNlaXZlZC5cbiIsCi0JCSAgICAgICBsZW5ndGgsIHBwaWQsIGlfc3RyZWFtKTsK
LQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2Fzc29jaWF0aW9uX2NoYW5n
ZV9ldmVudChzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UgKnNhYykKLXsKLQl1bnNpZ25lZCBpbnQg
aSwgbjsKLQotCXByaW50ZigiQXNzb2NpYXRpb24gY2hhbmdlICIpOwotCXN3aXRjaCAoc2FjLT5z
YWNfc3RhdGUpIHsKLQljYXNlIFNDVFBfQ09NTV9VUDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1fVVAi
KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0NPTU1fTE9TVDoKLQkJcHJpbnRmKCJTQ1RQX0NPTU1f
TE9TVCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfUkVTVEFSVDoKLQkJcHJpbnRmKCJTQ1RQX1JF
U1RBUlQiKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0NPTVA6Ci0JCXByaW50Zigi
U0NUUF9TSFVURE9XTl9DT01QIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DQU5UX1NUUl9BU1NP
QzoKLQkJcHJpbnRmKCJTQ1RQX0NBTlRfU1RSX0FTU09DIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6
Ci0JCXByaW50ZigiVU5LTk9XTiIpOwotCQlicmVhazsKLQl9Ci0JcHJpbnRmKCIsIHN0cmVhbXMg
KGluL291dCkgPSAoJXUvJXUpIiwKLQkgICAgICAgc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zLCBz
YWMtPnNhY19vdXRib3VuZF9zdHJlYW1zKTsKLQluID0gc2FjLT5zYWNfbGVuZ3RoIC0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7Ci0JaWYgKCgoc2FjLT5zYWNfc3RhdGUgPT0gU0NU
UF9DT01NX1VQKSB8fAotCSAgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfUkVTVEFSVCkpICYm
IChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIHN1cHBvcnRzIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBu
OyBpKyspIHsKLQkJCXN3aXRjaCAoc2FjLT5zYWNfaW5mb1tpXSkgewotCQkJY2FzZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX1BSOgotCQkJCXByaW50ZigiIFBSIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNl
IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVUSDoKLQkJCQlwcmludGYoIiBBVVRIIik7Ci0JCQkJYnJl
YWs7Ci0JCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOgotCQkJCXByaW50ZigiIEFT
Q09ORiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVG
OgotCQkJCXByaW50ZigiIE1VTFRJQlVGIik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlIFNDVFBfQVNT
T0NfU1VQUE9SVFNfUkVfQ09ORklHOgotCQkJCXByaW50ZigiIFJFLUNPTkZJRyIpOwotCQkJCWJy
ZWFrOwotCQkJZGVmYXVsdDoKLQkJCQlwcmludGYoIiBVTktOT1dOKDB4JTAyeCkiLCBzYWMtPnNh
Y19pbmZvW2ldKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKChzYWMtPnNh
Y19zdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkgfHwKLQkgICAgICAgICAgICAoc2FjLT5zYWNfc3Rh
dGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpICYmIChuID4gMCkpIHsKLQkJcHJpbnRmKCIsIEFC
T1JUID0iKTsKLQkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgewotCQkJcHJpbnRmKCIgMHglMDJ4
Iiwgc2FjLT5zYWNfaW5mb1tpXSk7Ci0JCX0KLQl9Ci0JcHJpbnRmKCIuXG4iKTsKLQlpZiAoKHNh
Yy0+c2FjX3N0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpIHx8Ci0JICAgIChzYWMtPnNhY19z
dGF0ZSA9PSBTQ1RQX1NIVVRET1dOX0NPTVApIHx8Ci0JICAgIChzYWMtPnNhY19zdGF0ZSA9PSBT
Q1RQX0NPTU1fTE9TVCkpIHsKLQkJZXhpdCgwKTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMg
dm9pZAotaGFuZGxlX3BlZXJfYWRkcmVzc19jaGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfcGFkZHJf
Y2hhbmdlICpzcGMpCi17Ci0JY2hhciBhZGRyX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKLQljb25z
dCBjaGFyICphZGRyOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0KLQlzd2l0Y2ggKHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSkgewotCWNh
c2UgQUZfSU5FVDoKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzcGMtPnNwY19hYWRk
cjsKLQkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYWRkcl9idWYs
IElORVRfQUREUlNUUkxFTik7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSU5FVDY6Ci0JCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGMtPnNwY19hYWRkcjsKLQkJYWRkciA9IGluZXRfbnRv
cChBRl9JTkVUNiwgJnNpbjYtPnNpbjZfYWRkciwgYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4p
OwotCQlicmVhazsKLQlkZWZhdWx0OgotI2lmZGVmIF9XSU4zMgotCQlfc25wcmludGYoYWRkcl9i
dWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIsIHNwYy0+c3BjX2FhZGRy
LnNzX2ZhbWlseSk7Ci0jZWxzZQotCQlzbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxF
TiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKLSNlbmRp
ZgotCQlhZGRyID0gYWRkcl9idWY7Ci0JCWJyZWFrOwotCX0KLQlwcmludGYoIlBlZXIgYWRkcmVz
cyAlcyBpcyBub3cgIiwgYWRkcik7Ci0Jc3dpdGNoIChzcGMtPnNwY19zdGF0ZSkgewotCWNhc2Ug
U0NUUF9BRERSX0FWQUlMQUJMRToKLQkJcHJpbnRmKCJTQ1RQX0FERFJfQVZBSUxBQkxFIik7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9BRERSX1VOUkVBQ0hBQkxFOgotCQlwcmludGYoIlNDVFBfQURE
Ul9VTlJFQUNIQUJMRSIpOwotCQlicmVhazsKLQljYXNlIFNDVFBfQUREUl9SRU1PVkVEOgotCQlw
cmludGYoIlNDVFBfQUREUl9SRU1PVkVEIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BRERSX0FE
REVEOgotCQlwcmludGYoIlNDVFBfQUREUl9BRERFRCIpOwotCQlicmVhazsKLQljYXNlIFNDVFBf
QUREUl9NQURFX1BSSU06Ci0JCXByaW50ZigiU0NUUF9BRERSX01BREVfUFJJTSIpOwotCQlicmVh
azsKLQljYXNlIFNDVFBfQUREUl9DT05GSVJNRUQ6Ci0JCXByaW50ZigiU0NUUF9BRERSX0NPTkZJ
Uk1FRCIpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlwcmludGYoIlVOS05PV04iKTsKLQkJYnJl
YWs7Ci0JfQotCXByaW50ZigiIChlcnJvciA9IDB4JTA4eCkuXG4iLCBzcGMtPnNwY19lcnJvcik7
Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotaGFuZGxlX2FkYXB0YXRpb25faW5kaWNhdGlv
bihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50ICpzYWkpCi17Ci0JcHJpbnRmKCJBZGFwdGF0
aW9uIGluZGljYXRpb246ICV4LlxuIiwgc2FpLT4gc2FpX2FkYXB0YXRpb25faW5kKTsKLQlyZXR1
cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfc2h1dGRvd25fZXZlbnQoc3RydWN0IHNjdHBf
c2h1dGRvd25fZXZlbnQgKnNzZSkKLXsKLQlwcmludGYoIlNodXRkb3duIGV2ZW50LlxuIik7Ci0J
LyogWFhYOiBub3RpZnkgYWxsIGNoYW5uZWxzLiAqLwotCXJldHVybjsKLX0KLQotc3RhdGljIHZv
aWQKLWhhbmRsZV9zdHJlYW1fcmVzZXRfZXZlbnQoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMs
IHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCAqc3RycnN0KQotewotCXVpbnQzMl90IG4s
IGk7Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQluID0gKHN0cnJzdC0+c3RycmVzZXRf
bGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCkpIC8gc2l6ZW9m
KHVpbnQxNl90KTsKLQlwcmludGYoIlN0cmVhbSByZXNldCBldmVudDogZmxhZ3MgPSAleCwgIiwg
c3RycnN0LT5zdHJyZXNldF9mbGFncyk7Ci0JaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBT
Q1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR19TU04pIHsKLQkJaWYgKHN0cnJzdC0+c3RycmVzZXRf
ZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJCXByaW50ZigiaW5j
b21pbmcvIik7Ci0JCX0KLQkJcHJpbnRmKCJpbmNvbWluZyAiKTsKLQl9Ci0JaWYgKHN0cnJzdC0+
c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJcHJp
bnRmKCJvdXRnb2luZyAiKTsKLQl9Ci0JcHJpbnRmKCJzdHJlYW0gaWRzID0gIik7Ci0JZm9yIChp
ID0gMDsgaSA8IG47IGkrKykgewotCQlpZiAoaSA+IDApIHsKLQkJCXByaW50ZigiLCAiKTsKLQkJ
fQotCQlwcmludGYoIiVkIiwgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSk7Ci0JfQot
CXByaW50ZigiLlxuIik7Ci0JaWYgKCEoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RS
RUFNX1JFU0VUX0RFTklFRCkgJiYKLQkgICAgIShzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NU
UF9TVFJFQU1fUkVTRVRfRkFJTEVEKSkgewotCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0J
CQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5H
X1NTTikgewotCQkJCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIHN0cnJz
dC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0pOwotCQkJCWlmIChjaGFubmVsICE9IE5VTEwpIHsK
LQkJCQkJcGMtPmlfc3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+aV9zdHJlYW1dID0gTlVMTDsKLQkJ
CQkJY2hhbm5lbC0+aV9zdHJlYW0gPSAwOwotCQkJCQlpZiAoY2hhbm5lbC0+b19zdHJlYW0gPT0g
MCkgewotCQkJCQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7Ci0JCQkJ
CQljaGFubmVsLT5wcl92YWx1ZSA9IDA7Ci0JCQkJCQljaGFubmVsLT51bm9yZGVyZWQgPSAwOwot
CQkJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOwotCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NI
QU5ORUxfQ0xPU0VEOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaWYgKGNoYW5uZWwtPnN0YXRlID09
IERBVEFfQ0hBTk5FTF9PUEVOKSB7Ci0JCQkJCQkJcmVzZXRfb3V0Z29pbmdfc3RyZWFtKHBjLCBj
aGFubmVsLT5vX3N0cmVhbSk7Ci0JCQkJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxf
Q0xPU0lORzsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJLyogWFhYOiBXaGF0IHRvIGRvPyAqLwot
CQkJCQkJfQotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQkJaWYgKHN0cnJzdC0+c3RycmVzZXRfZmxh
Z3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04pIHsKLQkJCQljaGFubmVsID0gZmlu
ZF9jaGFubmVsX2J5X29fc3RyZWFtKHBjLCBzdHJyc3QtPnN0cnJlc2V0X3N0cmVhbV9saXN0W2ld
KTsKLQkJCQlpZiAoY2hhbm5lbCAhPSBOVUxMKSB7Ci0JCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVs
W2NoYW5uZWwtPm9fc3RyZWFtXSA9IE5VTEw7Ci0JCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsK
LQkJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtID09IDApIHsKLQkJCQkJCWNoYW5uZWwtPnByX3Bv
bGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOwotCQkJCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwot
CQkJCQkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKLQkJCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsK
LQkJCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NFRDsKLQkJCQkJfQotCQkJ
CX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfc3Ry
ZWFtX2NoYW5nZV9ldmVudChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IHNjdHBf
c3RyZWFtX2NoYW5nZV9ldmVudCAqc3RyY2hnKQotewotCXVpbnQxNl90IG9fc3RyZWFtOwotCXVp
bnQzMl90IGk7Ci0Jc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7Ci0KLQlwcmludGYoIlN0cmVhbSBj
aGFuZ2UgZXZlbnQ6IHN0cmVhbXMgKGluL291dCkgPSAoJXUvJXUpLCBmbGFncyA9ICV4LlxuIiwK
LQkgICAgICAgc3RyY2hnLT5zdHJjaGFuZ2VfaW5zdHJtcywgc3RyY2hnLT5zdHJjaGFuZ2Vfb3V0
c3RybXMsIHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVS
X09GX0NIQU5ORUxTOyBpKyspIHsKLQkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKLQkJ
aWYgKChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgJiYKLQkJICAg
IChjaGFubmVsLT5vX3N0cmVhbSA9PSAwKSkgewotCQkJaWYgKChzdHJjaGctPnN0cmNoYW5nZV9m
bGFncyAmIFNDVFBfU1RSRUFNX0NIQU5HRV9ERU5JRUQpIHx8Ci0JCQkgICAgKHN0cmNoZy0+c3Ry
Y2hhbmdlX2ZsYWdzICYgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRCkpIHsKLQkJCQkvKiBYWFg6
IFNpZ25hbCB0byB0aGUgb3RoZXIgZW5kLiAqLwotCQkJCWlmIChjaGFubmVsLT5pX3N0cmVhbSAh
PSAwKSB7Ci0JCQkJCXBjLT5pX3N0cmVhbV9jaGFubmVsW2NoYW5uZWwtPmlfc3RyZWFtXSA9IE5V
TEw7Ci0JCQkJfQotCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7Ci0JCQkJY2hhbm5lbC0+cHJf
cG9saWN5ID0gU0NUUF9QUl9TQ1RQX05PTkU7Ci0JCQkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOwot
CQkJCWNoYW5uZWwtPmlfc3RyZWFtID0gMDsKLQkJCQljaGFubmVsLT5vX3N0cmVhbSA9IDA7Ci0J
CQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOwotCQkJCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVM
X0NMT1NFRDsKLQkJCX0gZWxzZSB7Ci0JCQkJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0o
cGMpOwotCQkJCWlmIChvX3N0cmVhbSAhPSAwKSB7Ci0JCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0g
b19zdHJlYW07Ci0JCQkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7
Ci0JCQkJCWlmIChjaGFubmVsLT5pX3N0cmVhbSA9PSAwKSB7Ci0JCQkJCQljaGFubmVsLT5mbGFn
cyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SRVE7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlj
aGFubmVsLT5mbGFncyB8PSBEQVRBX0NIQU5ORUxfRkxBR1NfU0VORF9SU1A7Ci0JCQkJCX0KLQkJ
CQl9IGVsc2UgewotCQkJCQkvKiBXZSB3aWxsIG5vdCBmaW5kIG1vcmUgLi4uICovCi0JCQkJCWJy
ZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1o
YW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqc3JlKQot
ewotCXNpemVfdCBpLCBuOwotCi0JbiA9IHNyZS0+c3JlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZW1vdGVfZXJyb3IpOwotCXByaW50ZigiUmVtb3RlIEVycm9yIChlcnJvciA9IDB4JTA0
eCk6ICIsIHNyZS0+c3JlX2Vycm9yKTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXBy
aW50ZigiIDB4JTAyeCIsIHNyZS0+IHNyZV9kYXRhW2ldKTsKLQl9Ci0JcHJpbnRmKCIuXG4iKTsK
LQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1oYW5kbGVfc2VuZF9mYWlsZWRfZXZlbnQoc3Ry
dWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmUpCi17Ci0Jc2l6ZV90IGksIG47Ci0KLQlp
ZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9VTlNFTlQpIHsKLQkJcHJpbnRmKCJVbnNl
bnQgIik7Ci0JfQotCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRBX1NFTlQpIHsKLQkJ
cHJpbnRmKCJTZW50ICIpOwotCX0KLQlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIH4oU0NUUF9EQVRB
X1NFTlQgfCBTQ1RQX0RBVEFfVU5TRU5UKSkgewotCQlwcmludGYoIihmbGFncyA9ICV4KSAiLCBz
c2ZlLT5zc2ZlX2ZsYWdzKTsKLQl9Ci0JcHJpbnRmKCJtZXNzYWdlIHdpdGggUFBJRCA9ICV1LCBT
SUQgPSAldSwgZmxhZ3M6IDB4JTA0eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgiLAotCSAgICAgICBu
dG9obChzc2ZlLT5zc2ZlX2luZm8uc25kX3BwaWQpLCBzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCwK
LQkgICAgICAgc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncywgc3NmZS0+c3NmZV9lcnJvcik7Ci0J
biA9IHNzZmUtPnNzZmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2
ZW50KTsKLQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7Ci0JCXByaW50ZigiIDB4JTAyeCIsIHNz
ZmUtPnNzZmVfZGF0YVtpXSk7Ci0JfQotCXByaW50ZigiLlxuIik7Ci0JcmV0dXJuOwotfQotCi1z
dGF0aWMgdm9pZAotaGFuZGxlX25vdGlmaWNhdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpw
YywgdW5pb24gc2N0cF9ub3RpZmljYXRpb24gKm5vdGlmLCBzaXplX3QgbikKLXsKLQlpZiAobm90
aWYtPnNuX2hlYWRlci5zbl9sZW5ndGggIT0gKHVpbnQzMl90KW4pIHsKLQkJcmV0dXJuOwotCX0K
LQlzd2l0Y2ggKG5vdGlmLT5zbl9oZWFkZXIuc25fdHlwZSkgewotCWNhc2UgU0NUUF9BU1NPQ19D
SEFOR0U6Ci0JCWhhbmRsZV9hc3NvY2lhdGlvbl9jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fYXNz
b2NfY2hhbmdlKSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9QRUVSX0FERFJfQ0hBTkdFOgotCQlo
YW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9wYWRkcl9jaGFuZ2Up
KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKLQkJaGFuZGxlX3JlbW90ZV9l
cnJvcl9ldmVudCgmKG5vdGlmLT5zbl9yZW1vdGVfZXJyb3IpKTsKLQkJYnJlYWs7Ci0JY2FzZSBT
Q1RQX1NIVVRET1dOX0VWRU5UOgotCQloYW5kbGVfc2h1dGRvd25fZXZlbnQoJihub3RpZi0+c25f
c2h1dGRvd25fZXZlbnQpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNB
VElPTjoKLQkJaGFuZGxlX2FkYXB0YXRpb25faW5kaWNhdGlvbigmKG5vdGlmLT5zbl9hZGFwdGF0
aW9uX2V2ZW50KSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5U
OgotCQlicmVhazsKLQljYXNlIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQ6Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9TRU5ERVJfRFJZX0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZJ
Q0FUSU9OU19TVE9QUEVEX0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfU0VORF9GQUlMRURf
RVZFTlQ6Ci0JCWhhbmRsZV9zZW5kX2ZhaWxlZF9ldmVudCgmKG5vdGlmLT5zbl9zZW5kX2ZhaWxl
ZF9ldmVudCkpOwotCQlicmVhazsKLQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UOgotCQlo
YW5kbGVfc3RyZWFtX3Jlc2V0X2V2ZW50KHBjLCAmKG5vdGlmLT5zbl9zdHJyZXNldF9ldmVudCkp
OwotCQlzZW5kX2RlZmVycmVkX21lc3NhZ2VzKHBjKTsKLQkJc2VuZF9vdXRnb2luZ19zdHJlYW1f
cmVzZXQocGMpOwotCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKLQkJYnJlYWs7Ci0JY2Fz
ZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UOgotCQlicmVhazsKLQljYXNlIFNDVFBfU1RSRUFNX0NI
QU5HRV9FVkVOVDoKLQkJaGFuZGxlX3N0cmVhbV9jaGFuZ2VfZXZlbnQocGMsICYobm90aWYtPnNu
X3N0cmNoYW5nZV9ldmVudCkpOwotCQlzZW5kX2RlZmVycmVkX21lc3NhZ2VzKHBjKTsKLQkJc2Vu
ZF9vdXRnb2luZ19zdHJlYW1fcmVzZXQocGMpOwotCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBj
KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAot
cHJpbnRfc3RhdHVzKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQotewotCXN0cnVjdCBzY3Rw
X3N0YXR1cyBzdGF0dXM7Ci0Jc29ja2xlbl90IGxlbjsKLQl1aW50MzJfdCBpOwotCXN0cnVjdCBj
aGFubmVsICpjaGFubmVsOwotCi0JbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBf
c3RhdHVzKTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAs
IFNDVFBfU1RBVFVTLCAmc3RhdHVzLCAmbGVuKSA8IDApIHsKLQkJcGVycm9yKCJnZXRzb2Nrb3B0
Iik7Ci0JCXJldHVybjsKLQl9Ci0JcHJpbnRmKCJBc3NvY2lhdGlvbiBzdGF0ZTogIik7Ci0Jc3dp
dGNoIChzdGF0dXMuc3N0YXRfc3RhdGUpIHsKLQljYXNlIFNDVFBfQ0xPU0VEOgotCQlwcmludGYo
IkNMT1NFRFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9CT1VORDoKLQkJcHJpbnRmKCJCT1VO
RFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9MSVNURU46Ci0JCXByaW50ZigiTElTVEVOXG4i
KTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0NPT0tJRV9XQUlUOgotCQlwcmludGYoIkNPT0tJRV9X
QUlUXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX0NPT0tJRV9FQ0hPRUQ6Ci0JCXByaW50Zigi
Q09PS0lFX0VDSE9FRFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9FU1RBQkxJU0hFRDoKLQkJ
cHJpbnRmKCJFU1RBQkxJU0hFRFxuIik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9TSFVURE9XTl9Q
RU5ESU5HOgotCQlwcmludGYoIlNIVVRET1dOX1BFTkRJTkdcbiIpOwotCQlicmVhazsKLQljYXNl
IFNDVFBfU0hVVERPV05fU0VOVDoKLQkJcHJpbnRmKCJTSFVURE9XTl9TRU5UXG4iKTsKLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX1JFQ0VJVkVEOgotCQlwcmludGYoIlNIVVRET1dOX1JF
Q0VJVkVEXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NIVVRET1dOX0FDS19TRU5UOgotCQlw
cmludGYoIlNIVVRET1dOX0FDS19TRU5UXG4iKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcHJp
bnRmKCJVTktOT1dOXG4iKTsKLQkJYnJlYWs7Ci0JfQotCXByaW50ZigiTnVtYmVyIG9mIHN0cmVh
bXMgKGkvbykgPSAoJXUvJXUpXG4iLAotCSAgICAgICBzdGF0dXMuc3N0YXRfaW5zdHJtcywgc3Rh
dHVzLnNzdGF0X291dHN0cm1zKTsKLQlmb3IgKGkgPSAwOyBpIDwgTlVNQkVSX09GX0NIQU5ORUxT
OyBpKyspIHsKLQkJY2hhbm5lbCA9ICYocGMtPmNoYW5uZWxzW2ldKTsKLQkJaWYgKGNoYW5uZWwt
PnN0YXRlID09IERBVEFfQ0hBTk5FTF9DTE9TRUQpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXBy
aW50ZigiQ2hhbm5lbCB3aXRoIGlkID0gJXU6IHN0YXRlICIsIGNoYW5uZWwtPmlkKTsKLQkJc3dp
dGNoIChjaGFubmVsLT5zdGF0ZSkgewotCQljYXNlIERBVEFfQ0hBTk5FTF9DTE9TRUQ6Ci0JCQlw
cmludGYoIkNMT1NFRCIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgREFUQV9DSEFOTkVMX0NPTk5FQ1RJ
Tkc6Ci0JCQlwcmludGYoIkNPTk5FQ1RJTkciKTsKLQkJCWJyZWFrOwotCQljYXNlIERBVEFfQ0hB
Tk5FTF9PUEVOOgotCQkJcHJpbnRmKCJPUEVOIik7Ci0JCQlicmVhazsKLQkJY2FzZSBEQVRBX0NI
QU5ORUxfQ0xPU0lORzoKLQkJCXByaW50ZigiQ0xPU0lORyIpOwotCQkJYnJlYWs7Ci0JCWRlZmF1
bHQ6Ci0JCQlwcmludGYoIlVOS05PV04oJWQpIiwgY2hhbm5lbC0+c3RhdGUpOwotCQkJYnJlYWs7
Ci0JCX0KLQkJcHJpbnRmKCIsIGZsYWdzID0gMHglMDh4LCBzdHJlYW0gaWQgKGluL291dCk6ICgl
dS8ldSksICIsCi0JCSAgICAgICBjaGFubmVsLT5mbGFncywKLQkJICAgICAgIGNoYW5uZWwtPmlf
c3RyZWFtLAotCQkgICAgICAgY2hhbm5lbC0+b19zdHJlYW0pOwotCQlpZiAoY2hhbm5lbC0+dW5v
cmRlcmVkKSB7Ci0JCQlwcmludGYoInVub3JkZXJlZCwgIik7Ci0JCX0gZWxzZSB7Ci0JCQlwcmlu
dGYoIm9yZGVyZWQsICIpOwotCQl9Ci0JCXN3aXRjaCAoY2hhbm5lbC0+cHJfcG9saWN5KSB7Ci0J
CWNhc2UgU0NUUF9QUl9TQ1RQX05PTkU6Ci0JCQlwcmludGYoInJlbGlhYmxlLlxuIik7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX1BSX1NDVFBfVFRMOgotCQkJcHJpbnRmKCJ1bnJlbGlhYmxlICh0
aW1lb3V0ICV1bXMpLlxuIiwgY2hhbm5lbC0+cHJfdmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2Ug
U0NUUF9QUl9TQ1RQX1JUWDoKLQkJCXByaW50ZigidW5yZWxpYWJsZSAobWF4LiAldSBydHgpLlxu
IiwgY2hhbm5lbC0+cHJfdmFsdWUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlwcmludGYo
InVua293biBwb2xpY3kgJXUuXG4iLCBjaGFubmVsLT5wcl9wb2xpY3kpOwotCQkJYnJlYWs7Ci0J
CX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXJlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywg
dW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90
IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9p
bmZvKQotewotCXN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjOwotCi0JcGMgPSAoc3RydWN0IHBl
ZXJfY29ubmVjdGlvbiAqKXVscF9pbmZvOwotCi0JaWYgKGRhdGEpIHsKLQkJbG9ja19wZWVyX2Nv
bm5lY3Rpb24ocGMpOwotCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQloYW5k
bGVfbm90aWZpY2F0aW9uKHBjLCAodW5pb24gc2N0cF9ub3RpZmljYXRpb24gKilkYXRhLCBkYXRh
bGVuKTsKLQkJfSBlbHNlIHsKLQkJCWhhbmRsZV9tZXNzYWdlKHBjLCBkYXRhLCBkYXRhbGVuLCBu
dG9obChyY3YucmN2X3BwaWQpLCByY3YucmN2X3NpZCk7Ci0JCX0KLQkJdW5sb2NrX3BlZXJfY29u
bmVjdGlvbihwYyk7Ci0JfQotCXJldHVybiAoMSk7Ci19Ci0KLXZvaWQKLWRlYnVnX3ByaW50Zihj
b25zdCBjaGFyICpmb3JtYXQsIC4uLikKLXsKLQl2YV9saXN0IGFwOwotCi0JdmFfc3RhcnQoYXAs
IGZvcm1hdCk7Ci0JdnByaW50Zihmb3JtYXQsIGFwKTsKLQl2YV9lbmQoYXApOwotfQotCi1pbnQK
LW1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKLXsKLQlzdHJ1Y3Qgc29ja2V0ICpzb2NrOwot
CXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCXNvY2tsZW5fdCBhZGRyX2xlbjsKLQljaGFyIGxp
bmVbTElORV9MRU5HVEggKyAxXTsKLQl1bnNpZ25lZCBpbnQgdW5vcmRlcmVkLCBwb2xpY3ksIHZh
bHVlLCBpZCwgc2Vjb25kczsKLQl1bnNpZ25lZCBpbnQgaTsKLQlzdHJ1Y3QgY2hhbm5lbCAqY2hh
bm5lbDsKLQljb25zdCBpbnQgb24gPSAxOwotCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2Owot
CXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OwotCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyBlbmNhcHM7
Ci0Jc3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOwotCXVpbnQxNl90IGV2ZW50X3R5cGVzW10g
PSB7U0NUUF9BU1NPQ19DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BF
RVJfQUREUl9DSEFOR0UsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1JFTU9URV9F
UlJPUiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERPV05fRVZFTlQsCi0J
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiwKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0VORF9GQUlMRURfRVZFTlQsCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCwKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVH07Ci0JY2hhciBhZGRyYnVm
W0lORVRfQUREUlNUUkxFTl07Ci0KLQlpZiAoYXJnYyA+IDEpIHsKLQkJdXNyc2N0cF9pbml0KGF0
b2koYXJndlsxXSksIE5VTEwsIGRlYnVnX3ByaW50Zik7Ci0JfSBlbHNlIHsKLQkJdXNyc2N0cF9p
bml0KDk4OTksIE5VTEwsIGRlYnVnX3ByaW50Zik7Ci0JfQotI2lmZGVmIFNDVFBfREVCVUcKLQl1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOwotI2VuZGlm
Ci0JdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwotCi0JaWYgKChzb2NrID0g
dXNyc2N0cF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2
ZV9jYiwgTlVMTCwgMCwgJnBlZXJfY29ubmVjdGlvbikpID09IE5VTEwpIHsKLQkJcGVycm9yKCJz
b2NrZXQiKTsKLQl9Ci0JaW5pdF9wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0J
aWYgKGFyZ2MgPiAyKSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
dWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsK
LQkJZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7Ci0JCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BP
UlQsIChjb25zdCB2b2lkKikmZW5jYXBzLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF91
ZHBlbmNhcHMpKSA8IDApIHsKLQkJCXBlcnJvcigic2V0c29ja29wdCIpOwotCQl9Ci0JfQotCWlm
ICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJTkZP
LCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKLQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBfUkVD
VlJDVklORk8iKTsKLQl9Ci0JaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfRVhQTElDSVRfRU9SLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKLQkJcGVycm9y
KCJzZXRzb2Nrb3B0IFNDVFBfRVhQTElDSVRfRU9SIik7Ci0JfQotCS8qIEFsbG93IHJlc2V0dGlu
ZyBzdHJlYW1zLiAqLwotCWF2LmFzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7Ci0JYXYuYXNzb2Nf
dmFsdWUgPSBTQ1RQX0VOQUJMRV9SRVNFVF9TVFJFQU1fUkVRIHwgU0NUUF9FTkFCTEVfQ0hBTkdF
X0FTU09DX1JFUTsKLQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwg
U0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VULCAmYXYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSkpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FTkFCTEVfU1RSRUFNX1JF
U0VUIik7Ci0JfQotCS8qIEVuYWJsZSB0aGUgZXZlbnRzIG9mIGludGVyZXN0LiAqLwotCW1lbXNl
dCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOwotCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9B
TExfQVNTT0M7Ci0JZXZlbnQuc2Vfb24gPSAxOwotCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZXZl
bnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCk7IGkrKykgewotCQlldmVudC5zZV90eXBlID0gZXZl
bnRfdHlwZXNbaV07Ci0JCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgewotCQkJcGVycm9yKCJz
ZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKLQkJfQotCX0KLQltZW1zZXQoJmluaXRtc2csIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKSk7Ci0JaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXMg
PSA1OwotCWluaXRtc2cuc2luaXRfbWF4X2luc3RyZWFtcyA9IDY1NTM1OwotCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lOSVRNU0csICZpbml0bXNnLCBz
aXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpIDwgMCkgewotCQlwZXJyb3IoInNldHNvY2tvcHQg
U0NUUF9JTklUTVNHIik7Ci0JfQotCi0JaWYgKGFyZ2MgPT0gNSkgewotCQkvKiBvcGVyYXRpbmcg
YXMgY2xpZW50ICovCi0JCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpOwotCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgot
CQlhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQlp
ZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzNdLCAmYWRkci5zaW5fYWRkci5zX2FkZHIpKXsK
LQkJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7Ci0JCQlleGl0KDEpOwotCQl9
Ci0JCWFkZHIuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNF0pKTsKLQkJaWYgKHVzcnNjdHBf
Y29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKSA8IDApIHsKLQkJCXBlcnJvcigiY29ubmVjdCIpOwotCQl9Ci0KLQkJcHJpbnRm
KCJDb25uZWN0ZWQgdG8gJXM6JWQuXG4iLCBpbmV0X250b3AoQUZfSU5FVCwgJihhZGRyLnNpbl9h
ZGRyKSwgYWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW5fcG9ydCkpOwot
CX0gZWxzZSBpZiAoYXJnYyA9PSA0KSB7Ci0JCXN0cnVjdCBzb2NrZXQgKmNvbm5fc29jazsKLQot
CQkvKiBvcGVyYXRpbmcgYXMgc2VydmVyICovCi0JCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpOwotCQlhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVm
IEhBVkVfU0lOX0xFTgotCQlhZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKLSNlbmRpZgotCQlhZGRyLnNpbl9hZGRyLnNfYWRkciA9IElOQUREUl9BTlk7Ci0JCWFkZHIu
c2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbM10pKTsKLQkJaWYgKHVzcnNjdHBfYmluZChzb2Nr
LCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8
IDApIHsKLQkJCXBlcnJvcigiYmluZCIpOwotCQl9Ci0JCWlmICh1c3JzY3RwX2xpc3Rlbihzb2Nr
LCAxKSA8IDApIHsKLQkJCXBlcnJvcigibGlzdGVuIik7Ci0JCX0KLQkJYWRkcl9sZW4gPSAoc29j
a2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQltZW1zZXQoJmFkZHIsIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJaWYgKChjb25uX3NvY2sgPSB1c3JzY3RwX2Fj
Y2VwdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHIsICZhZGRyX2xlbikpID09IE5VTEwp
IHsKLQkJCXBlcnJvcigiYWNjZXB0Iik7Ci0JCX0KLQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKLQkJ
c29jayA9IGNvbm5fc29jazsKLQkJcHJpbnRmKCJDb25uZWN0ZWQgdG8gJXM6JWQuXG4iLCBpbmV0
X250b3AoQUZfSU5FVCwgJihhZGRyLnNpbl9hZGRyKSwgYWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVO
KSwgbnRvaHMoYWRkci5zaW5fcG9ydCkpOwotCX0gZWxzZSB7Ci0JCXByaW50ZigiVXNhZ2U6ICVz
IGxvY2FsX3VkcF9wb3J0IHJlbW90ZV91ZHBfcG9ydCBsb2NhbF9wb3J0IHdoZW4gb3BlcmF0aW5n
IGFzIHNlcnZlclxuIgotCQkgICAgICAgIiAgICAgICAlcyBsb2NhbF91ZHBfcG9ydCByZW1vdGVf
dWRwX3BvcnQgcmVtb3RlX2FkZHIgcmVtb3RlX3BvcnQgd2hlbiBvcGVyYXRpbmcgYXMgY2xpZW50
XG4iLAotCQkgICAgICAgYXJndlswXSwgYXJndlswXSk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0J
bG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JcGVlcl9jb25uZWN0aW9u
LnNvY2sgPSBzb2NrOwotCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7
Ci0KLQlmb3IgKDs7KSB7Ci0jaWZkZWYgX1dJTjMyCi0JCWlmIChnZXRzX3MobGluZSwgTElORV9M
RU5HVEgpID09IE5VTEwpIHsKLSNlbHNlCi0JCWlmIChmZ2V0cyhsaW5lLCBMSU5FX0xFTkdUSCwg
c3RkaW4pID09IE5VTEwpIHsKLSNlbmRpZgotCQkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywg
U0hVVF9XUikgPCAwKSB7Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NodXRkb3duIik7Ci0JCQl9Ci0J
CQl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCQkJU2xl
ZXAoMTAwMCk7Ci0jZWxzZQotCQkJCXNsZWVwKDEpOwotI2VuZGlmCi0JCQl9Ci0JCQlicmVhazsK
LQkJfQotCQlpZiAoc3RybmNtcChsaW5lLCAiPyIsIHN0cmxlbigiPyIpKSA9PSAwIHx8Ci0JCSAg
ICBzdHJuY21wKGxpbmUsICJoZWxwIiwgc3RybGVuKCJoZWxwIikpID09IDApIHsKLQkJCXByaW50
ZigiQ29tbWFuZHM6XG4iCi0JCQkgICAgICAgIm9wZW4gdW5vcmRlcmVkIHByX3BvbGljeSBwcl92
YWx1ZSAtIG9wZW5zIGEgY2hhbm5lbFxuIgotCQkJICAgICAgICJjbG9zZSBjaGFubmVsIC0gY2xv
c2VzIHRoZSBjaGFubmVsXG4iCi0JCQkgICAgICAgInNlbmQgY2hhbm5lbDpzdHJpbmcgLSBzZW5k
cyBzdHJpbmcgdXNpbmcgY2hhbm5lbFxuIgotCQkJICAgICAgICJzdGF0dXMgLSBwcmludHMgdGhl
IHN0YXR1c1xuIgotCQkJICAgICAgICJzbGVlcCBuIC0gc2xlZXAgZm9yIG4gc2Vjb25kc1xuIgot
CQkJICAgICAgICJoZWxwIC0gdGhpcyBtZXNzYWdlXG4iKTsKLQkJfSBlbHNlIGlmIChzdHJuY21w
KGxpbmUsICJzdGF0dXMiLCBzdHJsZW4oInN0YXR1cyIpKSA9PSAwKSB7Ci0JCQlsb2NrX3BlZXJf
Y29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKLQkJCXByaW50X3N0YXR1cygmcGVlcl9jb25u
ZWN0aW9uKTsKLQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0J
CX0gZWxzZSBpZiAoc3RybmNtcChsaW5lLCAicXVpdCIsIHN0cmxlbigicXVpdCIpKSA9PSAwKSB7
Ci0JCQlpZiAodXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsKLQkJCQlwZXJy
b3IoInVzcnNjdHBfc2h1dGRvd24iKTsKLQkJCX0KLQkJCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgp
ICE9IDApIHsKLSNpZmRlZiBfV0lOMzIKLQkJCQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCQkJc2xl
ZXAoMSk7Ci0jZW5kaWYKLQkJCX0KLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKHNzY2FuZihsaW5l
LCAib3BlbiAldSAldSAldSIsICZ1bm9yZGVyZWQsICZwb2xpY3ksICZ2YWx1ZSkgPT0gMykgewot
CQkJbG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JCQljaGFubmVsID0g
b3Blbl9jaGFubmVsKCZwZWVyX2Nvbm5lY3Rpb24sICh1aW50OF90KXVub3JkZXJlZCwgKHVpbnQx
Nl90KXBvbGljeSwgKHVpbnQzMl90KXZhbHVlKTsKLQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24o
JnBlZXJfY29ubmVjdGlvbik7Ci0JCQlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7Ci0JCQkJcHJpbnRm
KCJDcmVhdGluZyBjaGFubmVsIGZhaWxlZC5cbiIpOwotCQkJfSBlbHNlIHsKLQkJCQlwcmludGYo
IkNoYW5uZWwgd2l0aCBpZCAldSBjcmVhdGVkLlxuIiwgY2hhbm5lbC0+aWQpOwotCQkJfQotCQl9
IGVsc2UgaWYgKHNzY2FuZihsaW5lLCAiY2xvc2UgJXUiLCAmaWQpID09IDEpIHsKLQkJCWlmIChp
ZCA8IE5VTUJFUl9PRl9DSEFOTkVMUykgewotCQkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVy
X2Nvbm5lY3Rpb24pOwotCQkJCWNsb3NlX2NoYW5uZWwoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJf
Y29ubmVjdGlvbi5jaGFubmVsc1tpZF0pOwotCQkJCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBl
ZXJfY29ubmVjdGlvbik7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJzZW5kICV1
IiwgJmlkKSA9PSAxKSB7Ci0JCQlpZiAoaWQgPCBOVU1CRVJfT0ZfQ0hBTk5FTFMpIHsKLQkJCQlj
aGFyICptc2c7Ci0KLQkJCQltc2cgPSBzdHJzdHIobGluZSwgIjoiKTsKLQkJCQlpZiAobXNnKSB7
Ci0JCQkJCW1zZysrOwotCQkJCQlsb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9u
KTsKLSNpZmRlZiBfV0lOMzIKLQkJCQkJaWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5l
Y3Rpb24sICZwZWVyX2Nvbm5lY3Rpb24uY2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpKSkg
ewotI2Vsc2UKLQkJCQkJaWYgKHNlbmRfdXNlcl9tZXNzYWdlKCZwZWVyX2Nvbm5lY3Rpb24sICZw
ZWVyX2Nvbm5lY3Rpb24uY2hhbm5lbHNbaWRdLCBtc2csIHN0cmxlbihtc2cpIC0gMSkpIHsKLSNl
bmRpZgotCQkJCQkJcHJpbnRmKCJNZXNzYWdlIHNlbnQuXG4iKTsKLQkJCQkJfSBlbHNlIHsKLQkJ
CQkJCXByaW50ZigiTWVzc2FnZSBzZW5kaW5nIGZhaWxlZC5cbiIpOwotCQkJCQl9Ci0JCQkJCXVu
bG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7Ci0JCQkJfQotCQkJfQotCQl9
IGVsc2UgaWYgKHNzY2FuZihsaW5lLCAic2xlZXAgJXUiLCAmc2Vjb25kcykgPT0gMSkgewotI2lm
ZGVmIF9XSU4zMgotCQkJU2xlZXAoc2Vjb25kcyAqIDEwMDApOwotI2Vsc2UKLQkJCXNsZWVwKHNl
Y29uZHMpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlwcmludGYoIlVua25vd24gY29tbWFuZDog
JXMiLCBsaW5lKTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1z
L3Rlc3RfbGlibWdtdC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCBkZTVlMGYwMmE4MGRmYmQ5ZDEyNDQ3NWEyNjVmYjZhZDQzODMzNGY1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90ZXN0
X2xpYm1nbXQuYworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4KLSAqCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5h
bWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiAgICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfV0lOMzIKLSNp
bmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2luY2x1ZGUgInVzcnNjdHAuaCIKLQotaW50Ci1t
YWluKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewot
CQl1c3JzY3RwX2luaXQoMCwgTlVMTCwgTlVMTCk7Ci0JCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgp
ICE9IDApIHsKLSNpZmRlZiBfV0lOMzIKLQkJCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJCXNsZWVw
KDEpOwotI2VuZGlmCi0JCX0KLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFt
cy90ZXN0X3RpbWVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvcHJvZ3JhbXMvdGVzdF90aW1lci5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBiYTJjYjUwMTBmYmE2ZDNmOTJiZTBhMTY2YWIwOTVlN2E2NDkyOTgzLi4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90ZXN0X3Rp
bWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDE2IE1pY2hhZWwgVHVleGVuCi0gKgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCi0gKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKLSAqICAgIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECi0g
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4J
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQot
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
LSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpZm5kZWYgX1dJTjMyCi0jaW5jbHVk
ZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDx1c3JzY3RwLmg+Ci0KLWludAotbWFpbih2
b2lkKSAKLXsKLQlpbnQgaTsKLQl2b2lkICpwOwotCi0JdXNyc2N0cF9pbml0KDAsIE5VTEwsIE5V
TEwpOwotI2lmZGVmIFNDVFBfREVCVUcKLQl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19v
bihTQ1RQX0RFQlVHX0FMTCk7Ci0jZW5kaWYKLQlwcmludGYoIkVudGVyaW5nIHRoZSBsb29wXG4i
KTsKLQlwID0gJmk7Ci0JZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0JCXVzcnNjdHBf
cmVnaXN0ZXJfYWRkcmVzcyhwKTsKLQkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3MocCk7Ci0J
fQotCXByaW50ZigiRXhpdGVkIHRoZSBsb29wXG4iKTsKLQl3aGlsZSAodXNyc2N0cF9maW5pc2go
KSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vsc2UKLQkJc2xlZXAo
MSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC9wcm9ncmFtcy90c2N0
cC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3Byb2dyYW1zL3RzY3RwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg5ODEx
YzE3ZTk3NjYwNTczZTAzODE4YTY3NjA2NmExZjJhMWJkNzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Byb2dyYW1zL3RzY3RwLmMKKysrIC9kZXYvbnVsbApA
QCAtMSw4MjUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNS0yMDEzIE1pY2hhZWwg
VHVleGVuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBJcmVuZSBSdWVuZ2VsZXIKLSAqCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVD
VCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx3aW5zb2Nr
Mi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVk
ZSA8Y3J0ZGJnLmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5
cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0
Lmg+Ci0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdGRp
by5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUg
PHNpZ25hbC5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0jaWZkZWYgTElOVVgKLSNpbmNsdWRlIDxn
ZXRvcHQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHVzcnNjdHAuaD4KLQotLyogZ2xvYmFsIGZvciB0
aGUgc2VuZCBjYWxsYmFjaywgYnV0IHVzZWQgaW4ga2VybmVsIHZlcnNpb24gYXMgd2VsbCAqLwot
c3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtYmVyX29mX21lc3NhZ2VzOwotc3RhdGljIGNoYXIgKmJ1
ZmZlcjsKLXN0YXRpYyBpbnQgbGVuZ3RoOwotc3RhdGljIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1v
dGVfYWRkcjsKLXN0YXRpYyBpbnQgdW5vcmRlcmVkOwotdWludDMyX3Qgb3B0dmFsID0gMTsKLXN0
cnVjdCBzb2NrZXQgKnBzb2NrID0gTlVMTDsKLQotc3RhdGljIHN0cnVjdCB0aW1ldmFsIHN0YXJ0
X3RpbWU7Ci11bnNpZ25lZCBpbnQgcnVudGltZSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBt
ZXNzYWdlcyA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGZpcnN0X2xlbmd0aCA9IDA7
Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHN1bSA9IDA7Ci1zdGF0aWMgdW5zaWduZWQgaW50
IHVzZV9jYiA9IDA7Ci0KLSNpZm5kZWYgdGltZXJzdWIKLSNkZWZpbmUgdGltZXJzdWIodHZwLCB1
dnAsIHZ2cCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkbyB7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkodnZw
KS0+dHZfc2VjID0gKHR2cCktPnR2X3NlYyAtICh1dnApLT50dl9zZWM7ICAgIFwKLQkJKHZ2cCkt
PnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyAtICh1dnApLT50dl91c2VjOyBcCi0JCWlmICgodnZw
KS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJKHZ2cCktPnR2
X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJKHZ2cCktPnR2X3VzZWMgKz0g
MTAwMDAwMDsgICAgICAgICAgICAgICAgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLQl9IHdoaWxlICgwKQotI2VuZGlmCi0KLQotY2hhciBV
c2FnZVtdID0KLSJVc2FnZTogdHNjdHAgW29wdGlvbnNdIFthZGRyZXNzXVxuIgotIk9wdGlvbnM6
XG4iCi0iICAgICAgICAtYSAgICAgICAgICAgICBzZXQgYWRhcHRhdGlvbiBsYXllciBpbmRpY2F0
aW9uXG4iCi0iICAgICAgICAtYyAgICAgICAgICAgICB1c2UgY2FsbGJhY2sgQVBJXG4iCi0iICAg
ICAgICAtRSAgICAgICAgICAgICBsb2NhbCBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0IChkZWZhdWx0
IDk4OTkpXG4iCi0iICAgICAgICAtZiAgICAgICAgICAgICBmcmFnbWVudGF0aW9uIHBvaW50XG4i
Ci0iICAgICAgICAtbCAgICAgICAgICAgICBzaXplIG9mIHNlbmQvcmVjZWl2ZSBidWZmZXJcbiIK
LSIgICAgICAgIC1MICAgICAgICAgICAgIGJpbmQgdG8gbG9jYWwgSVAgKGRlZmF1bHQgSU5BRERS
X0FOWSlcbiIKLSIgICAgICAgIC1uICAgICAgICAgICAgIG51bWJlciBvZiBtZXNzYWdlcyBzZW50
ICgwIG1lYW5zIGluZmluaXRlKS9yZWNlaXZlZFxuIgotIiAgICAgICAgLUQgICAgICAgICAgICAg
dHVybnMgTmFnbGUgb2ZmXG4iCi0iICAgICAgICAtUiAgICAgICAgICAgICBzb2NrZXQgcmVjdiBi
dWZmZXJcbiIKLSIgICAgICAgIC1TICAgICAgICAgICAgIHNvY2tldCBzZW5kIGJ1ZmZlclxuIgot
IiAgICAgICAgLVQgICAgICAgICAgICAgdGltZSB0byBzZW5kIG1lc3NhZ2VzXG4iCi0iICAgICAg
ICAtdSAgICAgICAgICAgICB1c2UgdW5vcmRlcmVkIHVzZXIgbWVzc2FnZXNcbiIKLSIgICAgICAg
IC1VICAgICAgICAgICAgIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0XG4iCi0iICAgICAg
ICAtdiAgICAgICAgICAgICB2ZXJib3NlXG4iCi0iICAgICAgICAtViAgICAgICAgICAgICB2ZXJ5
IHZlcmJvc2VcbiIKLTsKLQotI2RlZmluZSBERUZBVUxUX0xFTkdUSCAgICAgICAgICAgICAxMDI0
Ci0jZGVmaW5lIERFRkFVTFRfTlVNQkVSX09GX01FU1NBR0VTIDEwMjQKLSNkZWZpbmUgREVGQVVM
VF9QT1JUICAgICAgICAgICAgICAgNTAwMQotI2RlZmluZSBCVUZGRVJTSVpFICAgICAgICAgICAg
ICAgICAoMTw8MTYpCi0KLXN0YXRpYyBpbnQgdmVyYm9zZSwgdmVyeV92ZXJib3NlOwotc3RhdGlj
IHVuc2lnbmVkIGludCBkb25lOwotCi12b2lkIHN0b3Bfc2VuZGVyKGludCBzaWcpCi17Ci0JZG9u
ZSA9IDE7Ci19Ci0KLSNpZmRlZiBfV0lOMzIKLXN0YXRpYyB2b2lkCi1nZXR0aW1lb2ZkYXkoc3Ry
dWN0IHRpbWV2YWwgKnR2LCB2b2lkICppZ25vcmUpCi17Ci0Jc3RydWN0IHRpbWViIHRiOwotCi0J
ZnRpbWUoJnRiKTsKLQl0di0+dHZfc2VjID0gKGxvbmcpdGIudGltZTsKLSAJdHYtPnR2X3VzZWMg
PSB0Yi5taWxsaXRtICogMTAwMDsKLX0KLSNlbmRpZgotCi0jaWZkZWYgX1dJTjMyCi1zdGF0aWMg
RFdPUkQgV0lOQVBJCi0jZWxzZQotc3RhdGljIHZvaWQgKgotI2VuZGlmCi1oYW5kbGVfY29ubmVj
dGlvbih2b2lkICphcmcpCi17Ci0Jc3NpemVfdCBuOwotCWNoYXIgKmJ1ZjsKLSNpZmRlZiBfV0lO
MzIKLQlIQU5ETEUgdGlkOwotI2Vsc2UKLQlwdGhyZWFkX3QgdGlkOwotI2VuZGlmCi0Jc3RydWN0
IHNvY2tldCAqY29ubl9zb2NrOwotCXN0cnVjdCB0aW1ldmFsIHRpbWVfc3RhcnQsIHRpbWVfbm93
LCB0aW1lX2RpZmY7Ci0JZG91YmxlIHNlY29uZHM7Ci0JdW5zaWduZWQgbG9uZyByZWN2X2NhbGxz
ID0gMDsKLQl1bnNpZ25lZCBsb25nIG5vdGlmaWNhdGlvbnMgPSAwOwotCWludCBmbGFnczsKLQlz
dHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKLQlzb2NrbGVuX3QgbGVuOwotCXVuaW9uIHNjdHBfbm90
aWZpY2F0aW9uICpzbnA7Ci0Jc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICpzcGM7Ci0Jc3RydWN0
IHRpbWV2YWwgbm90ZV90aW1lOwotCXVuc2lnbmVkIGludCBpbmZvdHlwZTsKLQlzdHJ1Y3Qgc2N0
cF9yZWN2dl9ybiBybjsKLQlzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9y
ZWN2dl9ybik7Ci0KLQljb25uX3NvY2sgPSAqKHN0cnVjdCBzb2NrZXQgKiopYXJnOwotI2lmZGVm
IF9XSU4zMgotCXRpZCA9IEdldEN1cnJlbnRUaHJlYWQoKTsKLSNlbHNlCi0JdGlkID0gcHRocmVh
ZF9zZWxmKCk7Ci0JcHRocmVhZF9kZXRhY2godGlkKTsKLSNlbmRpZgotCi0JYnVmID0gbWFsbG9j
KEJVRkZFUlNJWkUpOwotCWZsYWdzID0gMDsKLQlsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOwotCWluZm90eXBlID0gMDsKLQltZW1zZXQoJnJuLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfcmVjdnZfcm4pKTsKLQluID0gdXNyc2N0cF9yZWN2dihjb25uX3NvY2ssIGJ1
ZiwgQlVGRkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikm
cm4sCi0JICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOwotCi0J
Z2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCBOVUxMKTsKLQl3aGlsZSAobiA+IDApIHsKLQkJcmVj
dl9jYWxscysrOwotCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7Ci0JCQlub3RpZmlj
YXRpb25zKys7Ci0JCQlnZXR0aW1lb2ZkYXkoJm5vdGVfdGltZSwgTlVMTCk7Ci0JCQlwcmludGYo
Im5vdGlmaWNhdGlvbiBhcnJpdmVkIGF0ICVmXG4iLCBub3RlX3RpbWUudHZfc2VjKyhkb3VibGUp
bm90ZV90aW1lLnR2X3VzZWMvMTAwMDAwMC4wKTsKLQkJCXNucCA9ICh1bmlvbiBzY3RwX25vdGlm
aWNhdGlvbiAqKWJ1ZjsKLQkJCWlmIChzbnAtPnNuX2hlYWRlci5zbl90eXBlPT1TQ1RQX1BFRVJf
QUREUl9DSEFOR0UpCi0JCQl7Ci0JCQkJc3BjID0gJnNucC0+c25fcGFkZHJfY2hhbmdlOwotCQkJ
CXByaW50ZigiU0NUUF9QRUVSX0FERFJfQ0hBTkdFOiBzdGF0ZT0lZCwgZXJyb3I9JWRcbiIsc3Bj
LT5zcGNfc3RhdGUsIHNwYy0+c3BjX2Vycm9yKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmICh2
ZXJ5X3ZlcmJvc2UpIHsKLQkJCQlwcmludGYoIk1lc3NhZ2UgcmVjZWl2ZWRcbiIpOwotCQkJfQot
CQkJc3VtICs9IG47Ci0JCQlpZiAoZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQkJbWVzc2FnZXMrKzsK
LQkJCQlpZiAoZmlyc3RfbGVuZ3RoID09IDApCi0JCQkJCWZpcnN0X2xlbmd0aCA9IHN1bTsKLQkJ
CX0KLQkJfQotCQlmbGFncyA9IDA7Ci0JCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbik7Ci0JCWluZm9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZfcm4pOwot
CQlpbmZvdHlwZSA9IDA7Ci0JCW1lbXNldCgmcm4sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2
dl9ybikpOwotCQluID0gdXNyc2N0cF9yZWN2dihjb25uX3NvY2ssICh2b2lkICopIGJ1ZiwgQlVG
RkVSU0laRSwgKHN0cnVjdCBzb2NrYWRkciAqKSAmYWRkciwgJmxlbiwgKHZvaWQgKikmcm4sCi0J
CSAgICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFncyk7Ci0JfQotCWlm
IChuIDwgMCkKLQkJcGVycm9yKCJzY3RwX3JlY3Z2Iik7Ci0JZ2V0dGltZW9mZGF5KCZ0aW1lX25v
dywgTlVMTCk7Ci0JdGltZXJzdWIoJnRpbWVfbm93LCAmdGltZV9zdGFydCwgJnRpbWVfZGlmZik7
Ci0Jc2Vjb25kcyA9IHRpbWVfZGlmZi50dl9zZWMgKyAoZG91YmxlKXRpbWVfZGlmZi50dl91c2Vj
LzEwMDAwMDAuMDsKLQlwcmludGYoIiVsbHUsICVsdSwgJWx1LCAlbHUsICVsbHUsICVmLCAlZlxu
IiwKLQkgICAgICAgIGZpcnN0X2xlbmd0aCwgbWVzc2FnZXMsIHJlY3ZfY2FsbHMsIG5vdGlmaWNh
dGlvbnMsIHN1bSwgc2Vjb25kcywgKGRvdWJsZSlmaXJzdF9sZW5ndGggKiAoZG91YmxlKW1lc3Nh
Z2VzIC8gc2Vjb25kcyk7Ci0JZmZsdXNoKHN0ZG91dCk7Ci0JdXNyc2N0cF9jbG9zZShjb25uX3Nv
Y2spOwotCWZyZWUoYnVmKTsKLSNpZmRlZiBfV0lOMzIKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0
dXJuIChOVUxMKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50Ci1zZW5kX2NiKHN0cnVjdCBzb2Nr
ZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUpIHsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGlu
Zm87Ci0KLQlpZiAoKG1lc3NhZ2VzID09IDApICYgdmVyYm9zZSkgewotCQlwcmludGYoIlN0YXJ0
IHNlbmRpbmcgIik7Ci0JCWlmIChudW1iZXJfb2ZfbWVzc2FnZXMgPiAwKSB7Ci0JCQlwcmludGYo
IiVsZCBtZXNzYWdlcyAiLCAobG9uZyludW1iZXJfb2ZfbWVzc2FnZXMpOwotCQl9Ci0JCWlmIChy
dW50aW1lID4gMCkgewotCQkJcHJpbnRmKCJmb3IgJXUgc2Vjb25kcyAuLi4iLCBydW50aW1lKTsK
LQkJfQotCQlwcmludGYoIlxuIik7Ci0JCWZmbHVzaChzdGRvdXQpOwotCX0KLQotCXNuZGluZm8u
c25kX3NpZCA9IDA7Ci0Jc25kaW5mby5zbmRfZmxhZ3MgPSAwOwotCWlmICh1bm9yZGVyZWQgIT0g
MCkgewotCQlzbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKLQl9Ci0Jc25kaW5m
by5zbmRfcHBpZCA9IDA7Ci0Jc25kaW5mby5zbmRfY29udGV4dCA9IDA7Ci0Jc25kaW5mby5zbmRf
YXNzb2NfaWQgPSAwOwotCi0Jd2hpbGUgKCFkb25lICYmICgobnVtYmVyX29mX21lc3NhZ2VzID09
IDApIHx8IChtZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpKSB7Ci0JCWlmICh2
ZXJ5X3ZlcmJvc2UpIHsKLQkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUuXG4i
LCBtZXNzYWdlcyArIDEpOwotCQl9Ci0KLQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZl
ciwgbGVuZ3RoLAotCQkgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopICZyZW1v
dGVfYWRkciwgMSwKLQkJICAgICAgICAgICAgICAgICAgKHZvaWQgKikmc25kaW5mbywgKHNvY2ts
ZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywKLQkJ
ICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7Ci0JCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sg
JiYgZXJybm8gIT0gRUFHQUlOKSB7Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2IChjYikiKTsK
LQkJCQlleGl0KDEpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAodmVyeV92ZXJib3NlKXsKLQkJCQkJ
cHJpbnRmKCJFV09VTERCTE9DSyBvciBFQUdBSU4gZm9yIG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdp
bGwgcmV0cnlcbiIsIG1lc3NhZ2VzICsgMSk7Ci0JCQkJfQotCQkJCS8qIHNlbmQgdW50aWwgRVdP
VUxEQkxPQ0sgdGhlbiBleGl0IGNhbGxiYWNrLiAqLwotCQkJCXJldHVybiAoMSk7Ci0JCQl9Ci0J
CX0KLQkJbWVzc2FnZXMrKzsKLQl9Ci0JaWYgKChkb25lID09IDEpIHx8IChtZXNzYWdlcyA9PSAo
bnVtYmVyX29mX21lc3NhZ2VzIC0gMSkpKSB7Ci0JCWlmICh2ZXJ5X3ZlcmJvc2UpCi0JCQlwcmlu
dGYoIlNlbmRpbmcgZmluYWwgbWVzc2FnZSBudW1iZXIgJWx1LlxuIiwgbWVzc2FnZXMgKyAxKTsK
LQotCQlzbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQX0VPRjsKLQkJaWYgKHVzcnNjdHBfc2VuZHYo
cHNvY2ssIGJ1ZmZlciwgbGVuZ3RoLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwg
MSwKLQkJICAgICAgICAgICAgICAgICAgKHZvaWQgKikmc25kaW5mbywgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywKLQkJICAgICAgICAg
ICAgICAgICAgMCkgPCAwKSB7Ci0JCQlpZiAoZXJybm8gIT0gRVdPVUxEQkxPQ0sgJiYgZXJybm8g
IT0gRUFHQUlOKSB7Ci0JCQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2IChjYikiKTsKLQkJCQlleGl0
KDEpOwotCQkJfSBlbHNlIHsKLQkJCQlpZiAodmVyeV92ZXJib3NlKXsKLQkJCQkJcHJpbnRmKCJF
V09VTERCTE9DSyBvciBFQUdBSU4gZm9yIGZpbmFsIG1lc3NhZ2UgbnVtYmVyICVsdSAtIHdpbGwg
cmV0cnlcbiIsIG1lc3NhZ2VzICsgMSk7Ci0JCQkJfQotCQkJCS8qIHNlbmQgdW50aWwgRVdPVUxE
QkxPQ0sgdGhlbiBleGl0IGNhbGxiYWNrLiAqLwotCQkJCXJldHVybiAoMSk7Ci0JCQl9Ci0JCX0K
LQkJbWVzc2FnZXMrKzsKLQkJZG9uZSA9IDI7Ci0JfQotCi0JcmV0dXJuICgxKTsKLX0KLQotc3Rh
dGljIGludAotc2VydmVyX3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0
cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4s
IHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewot
CXN0cnVjdCB0aW1ldmFsIG5vdywgZGlmZl90aW1lOwotCWRvdWJsZSBzZWNvbmRzOwotCi0JaWYg
KGRhdGEgPT0gTlVMTCkgewotCQlnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0JCXRpbWVyc3Vi
KCZub3csICZzdGFydF90aW1lLCAmZGlmZl90aW1lKTsKLQkJc2Vjb25kcyA9IGRpZmZfdGltZS50
dl9zZWMgKyAoZG91YmxlKWRpZmZfdGltZS50dl91c2VjLzEwMDAwMDAuMDsKLQkJcHJpbnRmKCIl
bGx1LCAlbHUsICVsbHUsICVmLCAlZlxuIiwKLQkJCWZpcnN0X2xlbmd0aCwgbWVzc2FnZXMsIHN1
bSwgc2Vjb25kcywgKGRvdWJsZSlmaXJzdF9sZW5ndGggKiAoZG91YmxlKW1lc3NhZ2VzIC8gc2Vj
b25kcyk7Ci0JCXVzcnNjdHBfY2xvc2Uoc29jayk7Ci0JCWZpcnN0X2xlbmd0aCA9IDA7Ci0JCXN1
bSA9IDA7Ci0JCW1lc3NhZ2VzID0gMDsKLQkJcmV0dXJuICgxKTsKLQl9Ci0JaWYgKGZpcnN0X2xl
bmd0aCA9PSAwKSB7Ci0JCWZpcnN0X2xlbmd0aCA9ICh1bnNpZ25lZCBpbnQpZGF0YWxlbjsKLQkJ
Z2V0dGltZW9mZGF5KCZzdGFydF90aW1lLCBOVUxMKTsKLQl9Ci0Jc3VtICs9IGRhdGFsZW47Ci0J
bWVzc2FnZXMrKzsKLQotCWZyZWUoZGF0YSk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGlu
dAotY2xpZW50X3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nr
c3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVj
dCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQotewotCWZyZWUo
ZGF0YSk7Ci0JcmV0dXJuICgxKTsKLX0KLQotdm9pZAotZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQl2YV9zdGFydChhcCwgZm9ybWF0KTsK
LQl2cHJpbnRmKGZvcm1hdCwgYXApOwotCXZhX2VuZChhcCk7Ci19Ci0KLWludCBtYWluKGludCBh
cmdjLCBjaGFyICoqYXJndikKLXsKLSNpZm5kZWYgX1dJTjMyCi0JaW50IGM7Ci0jZW5kaWYKLQlz
b2NrbGVuX3QgYWRkcl9sZW47Ci0Jc3RydWN0IHNvY2thZGRyX2luIGxvY2FsX2FkZHI7Ci0Jc3Ry
dWN0IHRpbWV2YWwgdGltZV9zdGFydCwgdGltZV9ub3csIHRpbWVfZGlmZjsKLQlpbnQgY2xpZW50
OwotCXVpbnQxNl90IGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0LCBwb3J0LCBsb2NhbF91ZHBfcG9y
dCwgcmVtb3RlX3VkcF9wb3J0OwotCWludCByY3ZidWZzaXplPTAsIHNuZGJ1ZnNpemU9MCwgbXly
Y3ZidWZzaXplLCBteXNuZGJ1ZnNpemU7Ci0Jc29ja2xlbl90IGludGxlbjsKLQlkb3VibGUgc2Vj
b25kczsKLQlkb3VibGUgdGhyb3VnaHB1dDsKLQlpbnQgbm9kZWxheSA9IDA7Ci0Jc3RydWN0IHNj
dHBfYXNzb2NfdmFsdWUgYXY7Ci0Jc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKLQlzdHJ1
Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87Ci0jaWZkZWYgX1dJTjMyCi0JdW5zaWduZWQgbG9uZyBz
cmNBZGRyOwotCUhBTkRMRSB0aWQ7Ci0jZWxzZQotCWluX2FkZHJfdCBzcmNBZGRyOwotCXB0aHJl
YWRfdCB0aWQ7Ci0jZW5kaWYKLQlpbnQgZnJhZ3BvaW50ID0gMDsKLQlzdHJ1Y3Qgc2N0cF9zZXRh
ZGFwdGF0aW9uIGluZCA9IHswfTsKLSNpZmRlZiBfV0lOMzIKLQljaGFyICpvcHQ7Ci0JaW50IG9w
dGluZDsKLSNlbmRpZgotCXVub3JkZXJlZCA9IDA7Ci0KLQlsZW5ndGggPSBERUZBVUxUX0xFTkdU
SDsKLQludW1iZXJfb2ZfbWVzc2FnZXMgPSBERUZBVUxUX05VTUJFUl9PRl9NRVNTQUdFUzsKLQlw
b3J0ID0gREVGQVVMVF9QT1JUOwotCXJlbW90ZV91ZHBfcG9ydCA9IDA7Ci0JbG9jYWxfdWRwX3Bv
cnQgPSA5ODk5OwotCXZlcmJvc2UgPSAwOwotCXZlcnlfdmVyYm9zZSA9IDA7Ci0Jc3JjQWRkciA9
IGh0b25sKElOQUREUl9BTlkpOwotCi0JbWVtc2V0KCh2b2lkICopICZyZW1vdGVfYWRkciwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCW1lbXNldCgodm9pZCAqKSAmbG9jYWxfYWRk
ciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCi0jaWZuZGVmIF9XSU4zMgotCXdo
aWxlICgoYyA9IGdldG9wdChhcmdjLCBhcmd2LCAiYTpjcDpsOkU6ZjpMOm46UjpTOlQ6dVU6dlZE
IikpICE9IC0xKQotCQlzd2l0Y2goYykgewotCQkJY2FzZSAnYSc6Ci0JCQkJaW5kLnNzYl9hZGFw
dGF0aW9uX2luZCA9IGF0b2kob3B0YXJnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ2MnOgotCQkJ
CXVzZV9jYiA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdsJzoKLQkJCQlsZW5ndGggPSBhdG9p
KG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICduJzoKLQkJCQludW1iZXJfb2ZfbWVzc2Fn
ZXMgPSBhdG9pKG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdwJzoKLQkJCQlwb3J0ID0g
YXRvaShvcHRhcmcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnRSc6Ci0JCQkJbG9jYWxfdWRwX3Bv
cnQgPSBhdG9pKG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdmJzoKLQkJCQlmcmFncG9p
bnQgPSBhdG9pKG9wdGFyZyk7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdMJzoKLQkJCQlpbmV0X3B0
b24oQUZfSU5FVCwgb3B0YXJnLCAmc3JjQWRkcik7Ci0JCQkJYnJlYWs7Ci0JCQljYXNlICdSJzoK
LQkJCQlyY3ZidWZzaXplID0gYXRvaShvcHRhcmcpOwotCQkJCWJyZWFrOwotCQkJY2FzZSAnUyc6
Ci0JCQkJc25kYnVmc2l6ZSA9IGF0b2kob3B0YXJnKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ1Qn
OgotCQkJCXJ1bnRpbWUgPSBhdG9pKG9wdGFyZyk7Ci0JCQkJbnVtYmVyX29mX21lc3NhZ2VzID0g
MDsKLQkJCQlicmVhazsKLQkJCWNhc2UgJ3UnOgotCQkJCXVub3JkZXJlZCA9IDE7Ci0JCQkJYnJl
YWs7Ci0JCQljYXNlICdVJzoKLQkJCQlyZW1vdGVfdWRwX3BvcnQgPSBhdG9pKG9wdGFyZyk7Ci0J
CQkJYnJlYWs7Ci0JCQljYXNlICd2JzoKLQkJCQl2ZXJib3NlID0gMTsKLQkJCQlicmVhazsKLQkJ
CWNhc2UgJ1YnOgotCQkJCXZlcmJvc2UgPSAxOwotCQkJCXZlcnlfdmVyYm9zZSA9IDE7Ci0JCQkJ
YnJlYWs7Ci0JCQljYXNlICdEJzoKLQkJCQlub2RlbGF5ID0gMTsKLQkJCQlicmVhazsKLQkJCWRl
ZmF1bHQ6Ci0JCQkJZnByaW50ZihzdGRlcnIsICIlcyIsIFVzYWdlKTsKLQkJCQlleGl0KDEpOwot
CQl9Ci0jZWxzZQotCWZvciAob3B0aW5kID0gMTsgb3B0aW5kIDwgYXJnYzsgb3B0aW5kKyspIHsK
LQkJaWYgKGFyZ3Zbb3B0aW5kXVswXSA9PSAnLScpIHsKLQkJCXN3aXRjaCAoYXJndltvcHRpbmRd
WzFdKSB7Ci0JCQkJY2FzZSAnYSc6Ci0JCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJ
CQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQg
PSBhcmd2W29wdGluZF07Ci0JCQkJCWluZC5zc2JfYWRhcHRhdGlvbl9pbmQgPSBhdG9pKG9wdCk7
Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ2MnOgotCQkJCQl1c2VfY2IgPSAxOwotCQkJCQlicmVh
azsKLQkJCQljYXNlICdsJzoKLQkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKLQkJCQkJCXBy
aW50ZigiJXMiLCBVc2FnZSk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFy
Z3Zbb3B0aW5kXTsKLQkJCQkJbGVuZ3RoID0gYXRvaShvcHQpOwotCQkJCQlicmVhazsKLQkJCQlj
YXNlICdwJzoKLQkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKLQkJCQkJCXByaW50ZigiJXMi
LCBVc2FnZSk7Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFyZ3Zbb3B0aW5k
XTsKLQkJCQkJcG9ydCA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnbic6Ci0J
CQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwot
CQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCW51
bWJlcl9vZl9tZXNzYWdlcyA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnZic6
Ci0JCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2Up
OwotCQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJ
CWZyYWdwb2ludCA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnTCc6Ci0JCQkJ
CWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJ
CQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCWluZXRf
cHRvbihBRl9JTkVULCBvcHQsICZzcmNBZGRyKTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnVSc6
Ci0JCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2Up
OwotCQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJ
CXJlbW90ZV91ZHBfcG9ydCA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnRSc6
Ci0JCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2Up
OwotCQkJCQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJ
CWxvY2FsX3VkcF9wb3J0ID0gYXRvaShvcHQpOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdSJzoK
LQkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKLQkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7
Ci0JCQkJCQlleGl0KDEpOwotCQkJCQl9Ci0JCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKLQkJCQkJ
cmN2YnVmc2l6ZSA9IGF0b2kob3B0KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAnUyc6Ci0JCQkJ
CWlmICgrK29wdGluZCA+PSBhcmdjKSB7Ci0JCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOwotCQkJ
CQkJZXhpdCgxKTsKLQkJCQkJfQotCQkJCQlvcHQgPSBhcmd2W29wdGluZF07Ci0JCQkJCXNuZGJ1
ZnNpemUgPSBhdG9pKG9wdCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgJ1QnOgotCQkJCQlpZiAo
KytvcHRpbmQgPj0gYXJnYykgewotCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKLQkJCQkJCWV4
aXQoMSk7Ci0JCQkJCX0KLQkJCQkJb3B0ID0gYXJndltvcHRpbmRdOwotCQkJCQlydW50aW1lID0g
YXRvaShvcHQpOwotCQkJCQludW1iZXJfb2ZfbWVzc2FnZXMgPSAwOwotCQkJCQlicmVhazsKLQkJ
CQljYXNlICd1JzoKLQkJCQkJdW5vcmRlcmVkID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSAn
dic6Ci0JCQkJCXZlcmJvc2UgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlICdWJzoKLQkJCQkJ
dmVyYm9zZSA9IDE7Ci0JCQkJCXZlcnlfdmVyYm9zZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNh
c2UgJ0QnOgotCQkJCQlub2RlbGF5ID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJZGVmYXVsdDoKLQkJ
CQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKLQkJCQkJZXhpdCgxKTsKLQkJCX0KLQkJfSBlbHNlIHsK
LQkJCWJyZWFrOwotCQl9Ci0JfQotI2VuZGlmCi0JaWYgKG9wdGluZCA9PSBhcmdjKSB7Ci0JCWNs
aWVudCA9IDA7Ci0JCWxvY2FsX3BvcnQgPSBwb3J0OwotCQlyZW1vdGVfcG9ydCA9IDA7Ci0JfSBl
bHNlIHsKLQkJY2xpZW50ID0gMTsKLQkJbG9jYWxfcG9ydCA9IDA7Ci0JCXJlbW90ZV9wb3J0ID0g
cG9ydDsKLQl9Ci0JbG9jYWxfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZF
X1NJTl9MRU4KLQlsb2NhbF9hZGRyLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKLSNlbmRpZgotCWxvY2FsX2FkZHIuc2luX3BvcnQgPSBodG9ucyhsb2NhbF9wb3J0KTsKLQls
b2NhbF9hZGRyLnNpbl9hZGRyLnNfYWRkciA9IHNyY0FkZHI7Ci0KLQl1c3JzY3RwX2luaXQobG9j
YWxfdWRwX3BvcnQsIE5VTEwsIGRlYnVnX3ByaW50Zik7Ci0jaWZkZWYgU0NUUF9ERUJVRwotCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfQUxMKTsKLSNlbmRpZgot
CXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKLQl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSgxKTsKLQotCWlmIChjbGllbnQpIHsKLQkJ
aWYgKHVzZV9jYikgewotCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9JTkVULCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBjbGllbnRfcmVjZWl2ZV9jYiwgc2VuZF9jYiwgbGVu
Z3RoLCBOVUxMKSkpIHsKLQkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7Ci0JCQkJZXhpdCgxKTsK
LQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5F
VCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7Ci0J
CQkJcGVycm9yKCJ1c2VyX3NvY2tldCIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCX0KLQl9IGVs
c2UgewotCQlpZiAodXNlX2NiKSB7Ci0JCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0KEFG
X0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIHNlcnZlcl9yZWNlaXZlX2NiLCBOVUxM
LCAwLCBOVUxMKSkpIHsKLQkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7Ci0JCQkJZXhpdCgxKTsK
LQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmICghKHBzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5F
VCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgTlVMTCwgTlVMTCwgMCwgTlVMTCkpKSB7Ci0J
CQkJcGVycm9yKCJ1c2VyX3NvY2tldCIpOwotCQkJCWV4aXQoMSk7Ci0JCQl9Ci0JCX0KLQl9Ci0K
LQlpZiAodXNyc2N0cF9iaW5kKHBzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmxvY2FsX2FkZHIs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSAtMSkgewotCQlwZXJyb3IoInVzcnNjdHBf
YmluZCIpOwotCQlleGl0KDEpOwotCX0KLQotCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ss
IElQUFJPVE9fU0NUUCwgU0NUUF9BREFQVEFUSU9OX0xBWUVSLCAoY29uc3Qgdm9pZCopJmluZCwg
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbikpIDwgMCkgewotCQlw
ZXJyb3IoInNldHNvY2tvcHQiKTsKLQl9Ci0KLQlpZiAoIWNsaWVudCkgewotCQlpZiAocmN2YnVm
c2l6ZSkgewotCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09f
UkNWQlVGLCAmcmN2YnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgewotCQkJCXBlcnJvcigic2V0
c29ja29wdDogcmN2YnVmIik7Ci0JCQl9Ci0JCX0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCWludGxl
biA9IHNpemVvZihpbnQpOwotCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NP
Q0tFVCwgU09fUkNWQlVGLCAmbXlyY3ZidWZzaXplLCAoc29ja2xlbl90ICopJmludGxlbikgPCAw
KSB7Ci0JCQkJcGVycm9yKCJnZXRzb2Nrb3B0OiByY3ZidWYiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
ZnByaW50ZihzdGRvdXQsIlJlY2VpdmUgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlyY3ZidWZzaXpl
KTsKLQkJCX0KLQkJfQotCi0JCWlmICh1c3JzY3RwX2xpc3Rlbihwc29jaywgMSkgPCAwKSB7Ci0J
CQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7Ci0JCQlleGl0KDEpOwotCQl9Ci0KLQkJd2hpbGUg
KDEpIHsKLQkJCW1lbXNldCgmcmVtb3RlX2FkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKLQkJCWFkZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQlpZiAo
dXNlX2NiKSB7Ci0JCQkJc3RydWN0IHNvY2tldCAqY29ubl9zb2NrOwotCi0JCQkJaWYgKChjb25u
X3NvY2sgPSB1c3JzY3RwX2FjY2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3Rl
X2FkZHIsICZhZGRyX2xlbikpPT0gTlVMTCkgewotCQkJCQlwZXJyb3IoInVzcnNjdHBfYWNjZXB0
Iik7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3RydWN0IHNvY2tl
dCAqKmNvbm5fc29jazsKLQotCQkJCWNvbm5fc29jayA9IChzdHJ1Y3Qgc29ja2V0ICoqKW1hbGxv
YyhzaXplb2Yoc3RydWN0IHNvY2tldCAqKSk7Ci0JCQkJaWYgKCgqY29ubl9zb2NrID0gdXNyc2N0
cF9hY2NlcHQocHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90ZV9hZGRyLCAmYWRkcl9s
ZW4pKT09IE5VTEwpIHsKLQkJCQkJcGVycm9yKCJ1c3JzY3RwX2FjY2VwdCIpOwotCQkJCQljb250
aW51ZTsKLQkJCQl9Ci0jaWZkZWYgX1dJTjMyCi0JCQkJdGlkID0gQ3JlYXRlVGhyZWFkKE5VTEws
IDAsICZoYW5kbGVfY29ubmVjdGlvbiwgKHZvaWQgKiljb25uX3NvY2ssIDAsIE5VTEwpOwotI2Vs
c2UKLQkJCQlwdGhyZWFkX2NyZWF0ZSgmdGlkLCBOVUxMLCAmaGFuZGxlX2Nvbm5lY3Rpb24sICh2
b2lkICopY29ubl9zb2NrKTsKLSNlbmRpZgotCQkJfQotCQkJaWYgKHZlcmJvc2UpIHsKLQkJCQkv
LyBjb25zdCBjaGFyICppbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRz
dCwgc29ja2xlbl90IHNpemUpCi0JCQkJLy9pbmV0X250b2EocmVtb3RlX2FkZHIuc2luX2FkZHIp
Ci0JCQkJY2hhciBhZGRyYnVmW0lORVRfQUREUlNUUkxFTl07Ci0JCQkJcHJpbnRmKCJDb25uZWN0
aW9uIGFjY2VwdGVkIGZyb20gJXM6JWRcbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKHJlbW90ZV9h
ZGRyLnNpbl9hZGRyKSwgYWRkcmJ1ZiwgSU5FVF9BRERSU1RSTEVOKSwgbnRvaHMocmVtb3RlX2Fk
ZHIuc2luX3BvcnQpKTsKLQkJCX0KLQkJfQotCQkvL3VzcnNjdHBfY2xvc2UocHNvY2spOyAvLyB1
bnJlYWNoYWJsZQotCX0gZWxzZSB7Ci0JCW1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0
IHNjdHBfdWRwZW5jYXBzKSk7Ci0JCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9J
TkVUOwotCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhyZW1vdGVfdWRwX3BvcnQpOwotCQlpZiAo
dXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9F
TkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgewotCQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7Ci0JCX0K
LQotCQlyZW1vdGVfYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9M
RU4KLQkJcmVtb3RlX2FkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwot
I2VuZGlmCi0JCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3Zbb3B0aW5kXSwgJnJlbW90ZV9h
ZGRyLnNpbl9hZGRyLnNfYWRkcikpewotCQkJcHJpbnRmKCJlcnJvcjogaW52YWxpZCBkZXN0aW5h
dGlvbiBhZGRyZXNzXG4iKTsKLQkJCWV4aXQoMSk7Ci0JCX0KLQkJcmVtb3RlX2FkZHIuc2luX3Bv
cnQgPSBodG9ucyhyZW1vdGVfcG9ydCk7Ci0KLQkJLyogVE9ETyBmcmFncG9pbnQgc3R1ZmYgKi8K
LQkJaWYgKG5vZGVsYXkgPT0gMSkgewotCQkJb3B0dmFsID0gMTsKLQkJfSBlbHNlIHsKLQkJCW9w
dHZhbCA9IDA7Ci0JCX0KLQkJdXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAs
IFNDVFBfTk9ERUxBWSwgJm9wdHZhbCwgc2l6ZW9mKGludCkpOwotCi0JCWlmIChmcmFncG9pbnQp
IHsKLQkJCWF2LmFzc29jX2lkID0gMDsKLQkJCWF2LmFzc29jX3ZhbHVlID0gZnJhZ3BvaW50Owot
CQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX01BWFNF
RywgJmF2LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsKLQkJCQlwZXJy
b3IoInNldHNvY2tvcHQ6IFNDVFBfTUFYU0VHIik7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc25kYnVm
c2l6ZSkgewotCQkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChwc29jaywgU09MX1NPQ0tFVCwgU09f
U05EQlVGLCAmc25kYnVmc2l6ZSwgc2l6ZW9mKGludCkpIDwgMCkgewotCQkJCXBlcnJvcigic2V0
c29ja29wdDogc25kYnVmIik7Ci0JCQl9Ci0JCX0KLQkJaWYgKHZlcmJvc2UpIHsKLQkJCWludGxl
biA9IHNpemVvZihpbnQpOwotCQkJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwc29jaywgU09MX1NP
Q0tFVCwgU09fU05EQlVGLCAmbXlzbmRidWZzaXplLCAoc29ja2xlbl90ICopJmludGxlbikgPCAw
KSB7Ci0JCQkJcGVycm9yKCJzZXRzb2Nrb3B0OiBTT19TTkRCVUYiKTsKLQkJCX0gZWxzZSB7Ci0J
CQkJZnByaW50ZihzdGRvdXQsIlNlbmQgYnVmZmVyIHNpemU6ICVkLlxuIiwgbXlzbmRidWZzaXpl
KTsKLQkJCX0KLQkJfQotCi0JCWJ1ZmZlciA9IG1hbGxvYyhsZW5ndGgpOwotCQltZW1zZXQoYnVm
ZmVyLCAnYicsIGxlbmd0aCk7Ci0KLQkJaWYgKHVzcnNjdHBfY29ubmVjdChwc29jaywgKHN0cnVj
dCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9
PSAtMSApIHsKLQkJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7Ci0JCQlleGl0KDEpOwotCQl9
Ci0KLQkJZ2V0dGltZW9mZGF5KCZ0aW1lX3N0YXJ0LCBOVUxMKTsKLQotCQlkb25lID0gMDsKLQot
CQlpZiAocnVudGltZSA+IDApIHsKLSNpZm5kZWYgX1dJTjMyCi0JCQlzaWduYWwoU0lHQUxSTSwg
c3RvcF9zZW5kZXIpOwotCQkJYWxhcm0ocnVudGltZSk7Ci0jZWxzZQotCQkJcHJpbnRmKCJZb3Ug
Y2Fubm90IHNldCB0aGUgcnVudGltZSBpbiBXaW5kb3dzIHlldFxuIik7Ci0JCQlleGl0KC0xKTsK
LSNlbmRpZgotCQl9Ci0KLQkJaWYgKHVzZV9jYikgewotCQkJd2hpbGUgKGRvbmUgPCAyICYmICht
ZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpIHsKLSNpZmRlZiBfV0lOMzIKLQkJ
CQlTbGVlcCgxMDAwKTsKLSNlbHNlCi0JCQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQkJCX0KLQkJfSBl
bHNlIHsKLQkJCXNuZGluZm8uc25kX3NpZCA9IDA7Ci0JCQlzbmRpbmZvLnNuZF9mbGFncyA9IDA7
Ci0JCQlpZiAodW5vcmRlcmVkICE9IDApIHsKLQkJCQlzbmRpbmZvLnNuZF9mbGFncyB8PSBTQ1RQ
X1VOT1JERVJFRDsKLQkJCX0KLQkJCXNuZGluZm8uc25kX3BwaWQgPSAwOwotCQkJc25kaW5mby5z
bmRfY29udGV4dCA9IDA7Ci0JCQlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7Ci0JCQlpZiAodmVy
Ym9zZSkgewotCQkJCXByaW50ZigiU3RhcnQgc2VuZGluZyAiKTsKLQkJCQlpZiAobnVtYmVyX29m
X21lc3NhZ2VzID4gMCkgewotCQkJCQlwcmludGYoIiVsZCBtZXNzYWdlcyAiLCAobG9uZyludW1i
ZXJfb2ZfbWVzc2FnZXMpOwotCQkJCX0KLQkJCQlpZiAocnVudGltZSA+IDApIHsKLQkJCQkJcHJp
bnRmKCJmb3IgJXUgc2Vjb25kcyAuLi4iLCBydW50aW1lKTsKLQkJCQl9Ci0JCQkJcHJpbnRmKCJc
biIpOwotCQkJCWZmbHVzaChzdGRvdXQpOwotCQkJfQotCQkJd2hpbGUgKCFkb25lICYmICgobnVt
YmVyX29mX21lc3NhZ2VzID09IDApIHx8IChtZXNzYWdlcyA8IChudW1iZXJfb2ZfbWVzc2FnZXMg
LSAxKSkpKSB7Ci0JCQkJaWYgKHZlcnlfdmVyYm9zZSkgewotCQkJCQlwcmludGYoIlNlbmRpbmcg
bWVzc2FnZSBudW1iZXIgJWx1LlxuIiwgbWVzc2FnZXMgKyAxKTsKLQkJCQl9Ci0KLQkJCQlpZiAo
dXNyc2N0cF9zZW5kdihwc29jaywgYnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikg
JnJlbW90ZV9hZGRyLCAxLAotCQkJCSAgICAgICAgICAgICAgICAgICh2b2lkICopJnNuZGluZm8s
IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElO
Rk8sCi0JCQkJICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7Ci0JCQkJCXBlcnJvcigidXNyc2N0
cF9zZW5kdiIpOwotCQkJCQlleGl0KDEpOwotCQkJCX0KLQkJCQltZXNzYWdlcysrOwotCQkJfQot
CQkJaWYgKHZlcnlfdmVyYm9zZSkgewotCQkJCXByaW50ZigiU2VuZGluZyBtZXNzYWdlIG51bWJl
ciAlbHUuXG4iLCBtZXNzYWdlcyArIDEpOwotCQkJfQotCi0JCQlzbmRpbmZvLnNuZF9mbGFncyB8
PSBTQ1RQX0VPRjsKLQkJCWlmICh1c3JzY3RwX3NlbmR2KHBzb2NrLCBidWZmZXIsIGxlbmd0aCwg
KHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsIDEsCi0JCQkgICAgICAgICAgICAgICAg
ICAodm9pZCAqKSZzbmRpbmZvLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZv
KSwgU0NUUF9TRU5EVl9TTkRJTkZPLAotCQkJICAgICAgICAgICAgICAgICAgMCkgPCAwKSB7Ci0J
CQkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2Iik7Ci0JCQkJZXhpdCgxKTsKLQkJCX0KLQkJCW1lc3Nh
Z2VzKys7Ci0JCX0KLQkJZnJlZSAoYnVmZmVyKTsKLQotCQlpZiAodmVyYm9zZSkgewotCQkJcHJp
bnRmKCJDbG9zaW5nIHNvY2tldC5cbiIpOwotCQl9Ci0KLQkJdXNyc2N0cF9jbG9zZShwc29jayk7
Ci0JCWdldHRpbWVvZmRheSgmdGltZV9ub3csIE5VTEwpOwotCQl0aW1lcnN1YigmdGltZV9ub3cs
ICZ0aW1lX3N0YXJ0LCAmdGltZV9kaWZmKTsKLQkJc2Vjb25kcyA9IHRpbWVfZGlmZi50dl9zZWMg
KyAoZG91YmxlKXRpbWVfZGlmZi50dl91c2VjLzEwMDAwMDA7Ci0JCXByaW50ZigiJXMgb2YgJWxk
IG1lc3NhZ2VzIG9mIGxlbmd0aCAldSB0b29rICVmIHNlY29uZHMuXG4iLAotCQkgICAgICAgIlNl
bmRpbmciLCBtZXNzYWdlcywgbGVuZ3RoLCBzZWNvbmRzKTsKLQkJdGhyb3VnaHB1dCA9IChkb3Vi
bGUpbWVzc2FnZXMgKiAoZG91YmxlKWxlbmd0aCAvIHNlY29uZHM7Ci0JCXByaW50ZigiVGhyb3Vn
aHB1dCB3YXMgJWYgQnl0ZS9zZWMuXG4iLCB0aHJvdWdocHV0KTsKLQl9Ci0KLQl3aGlsZSAodXNy
c2N0cF9maW5pc2goKSAhPSAwKSB7Ci0jaWZkZWYgX1dJTjMyCi0JCVNsZWVwKDEwMDApOwotI2Vs
c2UKLQkJc2xlZXAoMSk7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cC5wYy5pbiBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwLnBjLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBh
MWVjZDJmNzRlYmY4YWUwMmIzMTQ5Y2E1MmU3NzhhNDdjMDY3NWFlLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwLnBjLmluCisrKyAvZGV2L251bGwK
QEAgLTEsMTIgKzAsMCBAQAotcHJlZml4PUBwcmVmaXhACi1leGVjX3ByZWZpeD1AZXhlY19wcmVm
aXhACi1saWJkaXI9QGxpYmRpckAKLWluY2x1ZGVkaXI9QGluY2x1ZGVkaXJACi0KLU5hbWU6IHVz
cnNjdHAKLURlc2NyaXB0aW9uOiBTQ1RQIGltcGxlbWVudGF0aW9uCi1VUkw6IGh0dHBzOi8vZ2l0
aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAKLVZlcnNpb246IEBWRVJTSU9OQAotUmVxdWlyZXM6IAot
TGliczogLUwke2xpYmRpcn0gLWx1c3JzY3RwCi1DZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQVBQ
Q0ZMQUdTQApkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGF0dHJpYnV0ZXMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8u
Z2l0YXR0cmlidXRlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMwMzZlYjRmNDEy
MTc3NjFiM2E5MTE4MWNjOTQ5YWI2NjIwMzc5Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8uZ2l0YXR0cmlidXRlcworKysgL2Rldi9udWxs
CkBAIC0xLDYgKzAsMCBAQAotdXNlcl9hdG9taWMuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJz
PW9uCi11c2VyX2lwX2ljbXAuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi11c2VyX21i
dWYuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi11c2VyX3JlY3ZfdGhyZWFkLmMgc3Zu
LXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotdXNlcl9zb2NrZXQuYyBzdm4tcHJvcGVydGllcz1h
bGxvdy10YWJzPW9uCi11c3JzY3RwLmggc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGlnbm9yZSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLy5naXRpZ25vcmUKaW5kZXgg
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNGEzODAxMzhkZjU5OWE0
YWZlZGU3MDk2ZWM4NWRmYzRhNzQ1N2U0MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvLmdpdGlnbm9y
ZQorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi8uZ2l0aWdub3JlCkBAIC0wLDAgKzEsNzcgQEAKKyMgT2JqZWN0IGZp
bGVzCisqLm8KKyoua28KKyoub2JqCisqLmVsZgorCisjIFByZWNvbXBpbGVkIEhlYWRlcnMKKyou
Z2NoCisqLnBjaAorCisjIExpYnJhcmllcworKi5saWIKKyouYQorKi5sYQorKi5sbworCisjIFNo
YXJlZCBvYmplY3RzIChpbmMuIFdpbmRvd3MgRExMcykKKyouZGxsCisqLnNvCisqLnNvLioKKyou
ZHlsaWIKKworIyBFeGVjdXRhYmxlcworKi5leGUKKyoub3V0CisqLmFwcAorKi5pKjg2CisqLng4
Nl82NAorKi5oZXgKKworIyBEZWJ1ZyBmaWxlcworKi5kU1lNCisKKyMgQXV0b21ha2UgYW5kIG1h
a2UgcmVsZWF0ZWQgc3R1ZmYKK01ha2VmaWxlCitNYWtlZmlsZS5pbgorLmRlcHMKKy5saWJzCisv
YXV0b200dGUuY2FjaGUKKy9hY2xvY2FsLm00CisvY29tcGlsZQorL2NvbmZpZ3VyZQorL2RlcGNv
bXAKKy9pbnN0YWxsLXNoCisvbWlzc2luZworL3N0YW1wLWgxCisvY29uZmlnLmd1ZXNzCisvY29u
ZmlnLmxvZworL2NvbmZpZy5zdGF0dXMKKy9jb25maWcuc3ViCisvbGlidG9vbAorL2x0bWFpbi5z
aAorL200CisvdXNyc2N0cC5wYworLmRpcnN0YW1wCisKKyMgYmluYXJpZXMKK3Byb2dyYW1zL2Ns
aWVudAorcHJvZ3JhbXMvZGF5dGltZV9zZXJ2ZXIKK3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyCitw
cm9ncmFtcy9lY2hvX3NlcnZlcgorcHJvZ3JhbXMvZWtyX2NsaWVudAorcHJvZ3JhbXMvZWtyX2xv
b3AKK3Byb2dyYW1zL2Vrcl9sb29wX29mZmxvYWQKK3Byb2dyYW1zL2Vrcl9wZWVyCitwcm9ncmFt
cy9la3Jfc2VydmVyCitwcm9ncmFtcy9odHRwX2NsaWVudAorcHJvZ3JhbXMvcnRjd2ViCitwcm9n
cmFtcy90c2N0cAorcHJvZ3JhbXMvdGVzdF9saWJtZ210Citwcm9ncmFtcy90ZXN0X3RpbWVyCisK
KyMgY2FsbGdyaW5kCitjYWxsZ3JpbmQub3V0KgorCisjIGNtYWtlIGJ1aWxkCisvYnVpbGQKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50
eHQKaW5kZXggOTQyZTAxYTgyNTYxMjY0OGQ1YjZjZWY1MmMwMDA0NGNjY2E4M2Y1OC4uYWNmNTA1
NWE0ZTI4MTkxZDI5YjgwYjQ5YjE5MmJiY2Q4M2ZlN2UwMyAxMDA2NDQKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
Q01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvQ01ha2VMaXN0cy50eHQKQEAgLTI5LDE2NiAr
MjksMjMwIEBACiAjIFNVQ0ggREFNQUdFLgogIwogCitwcm9qZWN0KHVzcnNjdHBsaWIpCitjbWFr
ZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy4wKQorCisjIERlYnVnIGJ1aWxkIHR5cGUgYXMg
ZGVmYXVsdAoraWYgKE5PVCBDTUFLRV9CVUlMRF9UWVBFKQorCW1lc3NhZ2UoU1RBVFVTICJObyBi
dWlsZCB0eXBlIHNlbGVjdGVkLCB1c2luZyBERUJVRyIpCisJc2V0KENNQUtFX0JVSUxEX1RZUEUg
IkRFQlVHIikKK2VuZGlmICgpCisKK2luY2x1ZGUoQ2hlY2tTdHJ1Y3RIYXNNZW1iZXIpCitpbmNs
dWRlKENoZWNrSW5jbHVkZUZpbGUpCitpbmNsdWRlKENoZWNrSW5jbHVkZUZpbGVzKQoraW5jbHVk
ZShDaGVja0NDb21waWxlckZsYWcpCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMKLSMgSU5DTFVERSBNT0RVTEVTIEFORCBTRVRUSU5HUworIyBDSEVD
SyBPUFRJT05TCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCiAKLXNldChWRVJTSU9OICIxLjAuMCIpCitvcHRpb24oc2N0cF9pbnZhcmlhbnRzICJBZGQg
cnVudGltZSBjaGVja3MiIDApCitpZiAoc2N0cF9pbnZhcmlhbnRzKQorCWFkZF9kZWZpbml0aW9u
cygtRElOVkFSSUFOVFMpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF9kZWJ1ZyAiUHJvdmlkZSBk
ZWJ1ZyBpbmZvcm1hdGlvbiIgMSkKK2lmIChzY3RwX2RlYnVnKQorCWFkZF9kZWZpbml0aW9ucygt
RFNDVFBfREVCVUcpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF9pbmV0ICJTdXBwb3J0IElQdjQi
IDEpCitpZiAoc2N0cF9pbmV0KQorCWFkZF9kZWZpbml0aW9ucygtRElORVQpCitlbmRpZiAoKQor
CitvcHRpb24oc2N0cF9pbmV0NiAiU3VwcG9ydCBJUHY2IiAxKQoraWYgKHNjdHBfaW5ldDYpCisJ
YWRkX2RlZmluaXRpb25zKC1ESU5FVDYpCitlbmRpZiAoKQorCitvcHRpb24oc2N0cF93ZXJyb3Ig
IlRyZWF0IHdhcm5pbmcgYXMgZXJyb3IiIDEpCisKK29wdGlvbihzY3RwX2xpbmtfcHJvZ3JhbXNf
c3RhdGljICJMaW5rIGV4YW1wbGUgcHJvZ3JhbXMgc3RhdGljIiAwKQogCi1zZXQocHJlZml4ICR7
Q01BS0VfSU5TVEFMTF9QUkVGSVh9KQotc2V0KGV4ZWNfcHJlZml4ICJcJHtwcmVmaXh9IikKLXNl
dChsaWJkaXIgIlwke2V4ZWNfcHJlZml4fS9saWIiKQotc2V0KGluY2x1ZGVkaXIgIlwke3ByZWZp
eH0vaW5jbHVkZS91c3JzY3RwIikKLXNldChDTUFLRV9SRVFVSVJFRF9JTkNMVURFUyAke0NNQUtF
X0NVUlJFTlRfU09VUkNFX0RJUn0pCi1zZXQoQ01BS0VfTUFDT1NYX1JQQVRIIDEpCitvcHRpb24o
c2N0cF9idWlsZF9wcm9ncmFtcyAiQnVpbGQgZXhhbXBsZSBwcm9ncmFtcyIgMSkKIAotYWRkX2Rl
ZmluaXRpb25zKC1EX19Vc2Vyc3BhY2VfXykKLWFkZF9kZWZpbml0aW9ucygtRF9fVXNlcnNwYWNl
X29zXyR7Q01BS0VfU1lTVEVNX05BTUV9KQorb3B0aW9uKHNjdHBfc2FuaXRpemVyX2FkZHJlc3Mg
IkNvbXBpbGUgd2l0aCBhZGRyZXNzIHNhbml0aXplciIgMCkKKworb3B0aW9uKHNjdHBfc2FuaXRp
emVyX21lbW9yeSAiQ29tcGlsZSB3aXRoIG1lbW9yeSBzYW5pdGl6ZXIiIDApCisKK2lmIChzY3Rw
X3Nhbml0aXplcl9hZGRyZXNzIEFORCBzY3RwX3Nhbml0aXplcl9tZW1vcnkpCisJbWVzc2FnZShG
QVRBTF9FUlJPUiAiQ2FuIG5vdCBjb21waWxlIHdpdGggYm90aCBzYW5pdGl6ZXIgb3B0aW9ucyIp
CitlbmRpZiAoKQorCitpZiAoc2N0cF9saW5rX3Byb2dyYW1zX3N0YXRpYyBPUiBXSU4zMikKKwlz
ZXQocHJvZ3JhbXNfbGlua19saWJyYXJ5ICJ1c3JzY3RwLXN0YXRpYyIpCitlbHNlICgpCisJc2V0
KHByb2dyYW1zX2xpbmtfbGlicmFyeSAidXNyc2N0cCIpCitlbmRpZiAoKQogCiAKICMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgT1MgREVQRU5ERU5U
CisjIENIRUNLIEZPUiBUWVBFUyBBTkQgRlVOQ1RJT05TCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBN
QVRDSEVTICJMaW51eCIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1EX0dOVV9TT1VSQ0UpCi0gICAg
I3NldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9ICAgICAtV25vLWFkZHJlc3Mtb2Yt
cGFja2VkLW1lbWJlciIpCi0gICAgI3NldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZM
QUdTfSAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIpCitjaGVja19pbmNsdWRlX2ZpbGVz
KCJzeXMvcXVldWUuaCIgaGF2ZV9zeXNfcXVldWVfaCkKK2lmIChoYXZlX3N5c19xdWV1ZV9oKQor
CWFkZF9kZWZpbml0aW9ucygtREhBVkVfU1lTX1FVRVVFX0gpCiBlbmRpZiAoKQogCi1pZiAoJHtD
TUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiRnJlZUJTRCIpCi0gICAgYWRkX2RlZmluaXRpb25z
KC1VX19GcmVlQlNEX18pCi0gICAgc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30g
ICAgIC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9w
dGlvbiIpCi0gICAgc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1Xbm8t
YWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVyIC1Xbm8tdW5rbm93bi13YXJuaW5nLW9wdGlvbiIpCitj
aGVja19pbmNsdWRlX2ZpbGVzKCJzeXMvc29ja2V0Lmg7bGludXgvaWZfYWRkci5oIiBoYXZlX2xp
bnV4X2lmX2FkZHJfaCkKK2lmIChoYXZlX2xpbnV4X2lmX2FkZHJfaCkKKwlhZGRfZGVmaW5pdGlv
bnMoLURIQVZFX0xJTlVYX0lGX0FERFJfSCkKIGVuZGlmICgpCiAKLWlmICgke0NNQUtFX1NZU1RF
TV9OQU1FfSBNQVRDSEVTICJEYXJ3aW4iKQotICAgIGFkZF9kZWZpbml0aW9ucygtVV9fQVBQTEVf
XykKLSAgICBhZGRfZGVmaW5pdGlvbnMoLURfX0FQUExFX1VTRV9SRkNfMjI5MikKLSAgICBzZXQo
Q01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAgICAgLVduby1hZGRyZXNzLW9mLXBhY2tl
ZC1tZW1iZXIgLVduby1kZXByZWNhdGVkLWRlY2xhcmF0aW9ucyIpCi0gICAgc2V0KENNQUtFX0NY
WF9GTEFHUyAiJHtDTUFLRV9DWFhfRkxBR1N9IC1Xbm8tYWRkcmVzcy1vZi1wYWNrZWQtbWVtYmVy
IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiKQorY2hlY2tfaW5jbHVkZV9maWxlcygic3lz
L3NvY2tldC5oO2xpbnV4L3J0bmV0bGluay5oIiBoYXZlX2xpbnV4X3J0bmV0bGlua19oKQoraWYg
KGhhdmVfbGludXhfcnRuZXRsaW5rX2gpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9MSU5VWF9S
VE5FVExJTktfSCkKIGVuZGlmICgpCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVT
ICJEcmFnb25GbHkiKQotICAgIGFkZF9kZWZpbml0aW9ucygtVV9fRHJhZ29uRmx5X18pCitjaGVj
a19pbmNsdWRlX2ZpbGVzKCJzeXMvdHlwZXMuaDtuZXRpbmV0L2luLmg7bmV0aW5ldC9pcC5oO25l
dGluZXQvaXBfaWNtcC5oIiBoYXZlX25ldGluZXRfaXBfaWNtcF9oKQoraWYgKGhhdmVfbmV0aW5l
dF9pcF9pY21wX2gpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9ORVRJTkVUX0lQX0lDTVBfSCkK
IGVuZGlmICgpCiAKLWlmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJOZXRCU0QiKQot
ICAgIGFkZF9kZWZpbml0aW9ucygtVV9fTmV0QlNEX18pCitjaGVja19pbmNsdWRlX2ZpbGVzKCJz
dGRhdG9taWMuaCIgaGF2ZV9zdGRhdG9taWNfaCkKK2lmIChoYXZlX3N0ZGF0b21pY19oKQorCWFk
ZF9kZWZpbml0aW9ucygtREhBVkVfU1REQVRPTUlDX0gpCiBlbmRpZiAoKQogCi1pZiAoJHtDTUFL
RV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiT3BlbkJTRCIpCi0gICAgYWRkX2RlZmluaXRpb25zKC1V
X19PcGVuQlNEX18pCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMKKyMgQ0hFQ0sgU1RSVUNUIE1FTUJFUlMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVT
ICIke0NNQUtFX1NPVVJDRV9ESVJ9L3VzcnNjdHBsaWIiKQorCitjaGVja19pbmNsdWRlX2ZpbGUo
dXNyc2N0cC5oIGhhdmVfdXNyc2N0cF9oKQoraWYgKE5PVCBoYXZlX3VzcnNjdHBfaCkKKwltZXNz
YWdlKEZBVEFMX0VSUk9SICJ1c3JzY3RwLmggbm90IGZvdW5kIikKK2VuZGlmICgpCisKK2NoZWNr
X3N0cnVjdF9oYXNfbWVtYmVyKCJzdHJ1Y3Qgc29ja2FkZHIiICJzYV9sZW4iICJzeXMvdHlwZXMu
aDtzeXMvc29ja2V0LmgiIGhhdmVfc2FfbGVuKQoraWYgKGhhdmVfc2FfbGVuKQorCW1lc3NhZ2Uo
U1RBVFVTICJoYXZlX3NhX2xlbiIpCisJYWRkX2RlZmluaXRpb25zKC1ESEFWRV9TQV9MRU4pCitl
bmRpZiAoKQorCitjaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2thZGRyX2luIiAi
c2luX2xlbiIgInN5cy90eXBlcy5oO25ldGluZXQvaW4uaCIgaGF2ZV9zaW5fbGVuKQoraWYgKGhh
dmVfc2luX2xlbikKKwltZXNzYWdlKFNUQVRVUyAiaGF2ZV9zaW5fbGVuIikKKwlhZGRfZGVmaW5p
dGlvbnMoLURIQVZFX1NJTl9MRU4pCitlbmRpZiAoKQorCitjaGVja19zdHJ1Y3RfaGFzX21lbWJl
cigic3RydWN0IHNvY2thZGRyX2luNiIgInNpbjZfbGVuIiAic3lzL3R5cGVzLmg7bmV0aW5ldC9p
bi5oIiBoYXZlX3NpbjZfbGVuKQoraWYgKGhhdmVfc2luNl9sZW4pCisJbWVzc2FnZShTVEFUVVMg
ImhhdmVfc2luNl9sZW4iKQorCWFkZF9kZWZpbml0aW9ucygtREhBVkVfU0lONl9MRU4pCitlbmRp
ZiAoKQorCitjaGVja19zdHJ1Y3RfaGFzX21lbWJlcigic3RydWN0IHNvY2thZGRyX2Nvbm4iICJz
Y29ubl9sZW4iICJ1c3JzY3RwLmgiIGhhdmVfc2Nvbm5fbGVuKQoraWYgKGhhdmVfc2Nvbm5fbGVu
KQorCW1lc3NhZ2UoU1RBVFVTICJIQVZFX1NDT05OX0xFTiIpCisJYWRkX2RlZmluaXRpb25zKC1E
SEFWRV9TQ09OTl9MRU4pCiBlbmRpZiAoKQogCiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgTElCUkFSWSBGSUxFUworIyBDT01QSUxFUiBTRVRU
SU5HUwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwog
Ci1pbmNsdWRlX2RpcmVjdG9yaWVzKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKLQotbGlz
dChBUFBFTkQgdXNyc2N0cF9yb290X0hFQURFUlMKLSAgICB1c2VyX2F0b21pYy5oCi0gICAgdXNl
cl9lbnZpcm9ubWVudC5oCi0gICAgdXNlcl9pbnBjYi5oCi0gICAgdXNlcl9pcF9pY21wLmgKLSAg
ICB1c2VyX2lwNl92YXIuaAotICAgIHVzZXJfbWFsbG9jLmgKLSAgICB1c2VyX21idWYuaAotICAg
IHVzZXJfcXVldWUuaAotICAgIHVzZXJfcmVjdl90aHJlYWQuaAotICAgIHVzZXJfcm91dGUuaAot
ICAgIHVzZXJfc29ja2V0dmFyLmgKLSAgICB1c2VyX3VtYS5oCi0gICAgdXNyc2N0cC5oCi0pCi0K
LWxpc3QoQVBQRU5EIHVzcnNjdHBfbmV0aW5ldF9IRUFERVJTCi0gICAgbmV0aW5ldC9zY3RwX2Fz
Y29uZi5oCi0gICAgbmV0aW5ldC9zY3RwX2F1dGguaAotICAgIG5ldGluZXQvc2N0cF9ic2RfYWRk
ci5oCi0gICAgbmV0aW5ldC9zY3RwX2NhbGxvdXQuaAotICAgIG5ldGluZXQvc2N0cF9jb25zdGFu
dHMuaAotICAgIG5ldGluZXQvc2N0cF9jcmMzMi5oCi0gICAgbmV0aW5ldC9zY3RwX2hlYWRlci5o
Ci0gICAgbmV0aW5ldC9zY3RwX2luZGF0YS5oCi0gICAgbmV0aW5ldC9zY3RwX2lucHV0LmgKLSAg
ICBuZXRpbmV0L3NjdHBfbG9ja191c2Vyc3BhY2UuaAotICAgIG5ldGluZXQvc2N0cF9vc191c2Vy
c3BhY2UuaAotICAgIG5ldGluZXQvc2N0cF9vcy5oCi0gICAgbmV0aW5ldC9zY3RwX291dHB1dC5o
Ci0gICAgbmV0aW5ldC9zY3RwX3BjYi5oCi0gICAgbmV0aW5ldC9zY3RwX3BlZWxvZmYuaAotICAg
IG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaAotICAgIG5ldGluZXQvc2N0cF9zaGExLmgKLSAg
ICBuZXRpbmV0L3NjdHBfc3RydWN0cy5oCi0gICAgbmV0aW5ldC9zY3RwX3N5c2N0bC5oCi0gICAg
bmV0aW5ldC9zY3RwX3RpbWVyLmgKLSAgICBuZXRpbmV0L3NjdHBfdWlvLmgKLSAgICBuZXRpbmV0
L3NjdHBfdmFyLmgKLSAgICBuZXRpbmV0L3NjdHB1dGlsLmgKLSAgICBuZXRpbmV0L3NjdHAuaAot
KQotCi1saXN0KEFQUEVORCB1c3JzY3RwX25ldGluZXQ2X0hFQURFUlMKLSAgICBuZXRpbmV0Ni9z
Y3RwNl92YXIuaAotKQotCi1saXN0KEFQUEVORCB1c3JzY3RwX0hFQURFUlMKLSAgICAke3VzcnNj
dHBfcm9vdF9IRUFERVJTfQotICAgICR7dXNyc2N0cF9uZXRpbmV0X0hFQURFUlN9Ci0gICAgJHt1
c3JzY3RwX25ldGluZXQ2X0hFQURFUlN9Ci0pCi0KLWxpc3QoQVBQRU5EIHVzcnNjdHBfU09VUkNF
UwotICAgIG5ldGluZXQvc2N0cF9hc2NvbmYuYwotICAgIG5ldGluZXQvc2N0cF9hdXRoLmMKLSAg
ICBuZXRpbmV0L3NjdHBfYnNkX2FkZHIuYwotICAgIG5ldGluZXQvc2N0cF9jYWxsb3V0LmMKLSAg
ICBuZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25zLmMKLSAgICBuZXRpbmV0L3NjdHBfY3JjMzIuYwot
ICAgIG5ldGluZXQvc2N0cF9pbmRhdGEuYwotICAgIG5ldGluZXQvc2N0cF9pbnB1dC5jCi0gICAg
bmV0aW5ldC9zY3RwX291dHB1dC5jCi0gICAgbmV0aW5ldC9zY3RwX3BjYi5jCi0gICAgbmV0aW5l
dC9zY3RwX3BlZWxvZmYuYwotICAgIG5ldGluZXQvc2N0cF9zaGExLmMKLSAgICBuZXRpbmV0L3Nj
dHBfc3NfZnVuY3Rpb25zLmMKLSAgICBuZXRpbmV0L3NjdHBfc3lzY3RsLmMKLSAgICBuZXRpbmV0
L3NjdHBfdGltZXIuYwotICAgIG5ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwotICAgIG5ldGluZXQv
c2N0cF91c3JyZXEuYwotICAgIG5ldGluZXQvc2N0cHV0aWwuYwotICAgIG5ldGluZXQ2L3NjdHA2
X3VzcnJlcS5jCi0gICAgdXNlcl9lbnZpcm9ubWVudC5jCi0gICAgdXNlcl9tYnVmLmMKLSAgICB1
c2VyX3JlY3ZfdGhyZWFkLmMKLSAgICB1c2VyX3NvY2tldC5jCi0pCi0KLWFkZF9saWJyYXJ5KHVz
cnNjdHAgU0hBUkVEICR7dXNyc2N0cF9TT1VSQ0VTfSAke3VzcnNjdHBfSEVBREVSU30pCi1hZGRf
bGlicmFyeSh1c3JzY3RwLXN0YXRpYyBTVEFUSUMgJHt1c3JzY3RwX1NPVVJDRVN9ICR7dXNyc2N0
cF9IRUFERVJTfSkKLQotaWYgKFdJTjMyKQotICAgIG1lc3NhZ2UoU1RBVFVTICJsaW5rIGxpYnJh
cnk6IHdzMl8zMiIpCi0gICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHVzcnNjdHAgd3MyXzMyKQot
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyh1c3JzY3RwLXN0YXRpYyB3czJfMzIpCi1lbmRpZiAo
KQotCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXModXNyc2N0cC1zdGF0aWMgUFJPUEVSVElFUyBPVVRQ
VVRfTkFNRSAidXNyc2N0cCIpCi1zZXRfdGFyZ2V0X3Byb3BlcnRpZXModXNyc2N0cCBQUk9QRVJU
SUVTIElNUE9SVF9TVUZGSVggIl9pbXBvcnQubGliIikKLXNldF90YXJnZXRfcHJvcGVydGllcyh1
c3JzY3RwIFBST1BFUlRJRVMgU09WRVJTSU9OIDEgVkVSU0lPTiAxLjAuMCkKLQotaWYgKE5PVCBE
RUZJTkVEIENNQUtFX0lOU1RBTExfTElCRElSKQotICAgIFNFVChDTUFLRV9JTlNUQUxMX0xJQkRJ
UiBsaWIpCisjIFNFVFRJTkdTIEZPUiBVTklYIENPTVBJTEVSCitpZiAoIiR7Q01BS0VfQ19DT01Q
SUxFUl9JRH0iIE1BVENIRVMgIkNsYW5nIiBPUiAiJHtDTUFLRV9DX0NPTVBJTEVSX0lEfSIgTUFU
Q0hFUyAiQXBwbGVDbGFuZyIgT1IgIiR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIE1BVENIRVMgIkdO
VSIpCisJc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1zdGQ9Yzk5IC1w
ZWRhbnRpYyAtV2FsbCAtV2V4dHJhIikKKwlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NY
WF9GTEFHU30gLXN0ZD1jOTkgLXBlZGFudGljIC1XYWxsIC1XZXh0cmEiKQorCisJY2hlY2tfY19j
b21waWxlcl9mbGFnKC1XZmxvYXQtZXF1YWwgaGFzX3dmbG9hdF9lcXVhbCkKKwlpZiAoaGFzX3dm
bG9hdF9lcXVhbCkKKwkJc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1X
ZmxvYXQtZXF1YWwiKQorCQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30g
LVdmbG9hdC1lcXVhbCIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV3No
YWRvdyBoYXNfd3NoYWRvdykKKwlpZiAoaGFzX3dzaGFkb3cpCisJCXNldChDTUFLRV9DX0ZMQUdT
ICAgIiR7Q01BS0VfQ19GTEFHU30gICAtV3NoYWRvdyIpCisJCXNldChDTUFLRV9DWFhfRkxBR1Mg
IiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV3NoYWRvdyIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29t
cGlsZXJfZmxhZygtV3BvaW50ZXItYXJpdGggaGFzX3dwb2ludGVyX2FyaXRpaCkKKwlpZiAoaGFz
X3dwb2ludGVyX2FyaXRpaCkKKwkJc2V0KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdT
fSAgIC1XcG9pbnRlci1hcml0aCIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hY
X0ZMQUdTfSAtV3BvaW50ZXItYXJpdGgiKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVy
X2ZsYWcoLVd1bnJlYWNoYWJsZS1jb2RlIGhhc193dW5yZWFjaGFibGVfY29kZSkKKwlpZiAoaGFz
X3d1bnJlYWNoYWJsZV9jb2RlKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxB
R1N9ICAgLVd1bnJlYWNoYWJsZS1jb2RlIikKKwkJc2V0KENNQUtFX0NYWF9GTEFHUyAiJHtDTUFL
RV9DWFhfRkxBR1N9IC1XdW5yZWFjaGFibGUtY29kZSIpCisJZW5kaWYgKCkKKworCWNoZWNrX2Nf
Y29tcGlsZXJfZmxhZygtV2luaXQtc2VsZiBoYXNfd2luaXRfc2VsZikKKwlpZiAoaGFzX3dpbml0
X3NlbGYpCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtV2luaXQt
c2VsZiIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV2luaXQt
c2VsZiIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJfZmxhZygtV25vLXVudXNlZC1m
dW5jdGlvbiBoYXNfd25vX3VudXNlZF9mdW5jdGlvbikKKwlpZiAoaGFzX3dub191bnVzZWRfZnVu
Y3Rpb24pCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01BS0VfQ19GTEFHU30gICAtV25vLXVu
dXNlZC1mdW5jdGlvbiIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdT
fSAtV25vLXVudXNlZC1mdW5jdGlvbiIpCisJZW5kaWYgKCkKKworCWNoZWNrX2NfY29tcGlsZXJf
ZmxhZygtV25vLXVudXNlZC1wYXJhbWV0ZXIgaGFzX3dub191bnVzZWRfcGFyYW1ldGVyKQorCWlm
IChoYXNfd25vX3VudXNlZF9wYXJhbWV0ZXIpCisJCXNldChDTUFLRV9DX0ZMQUdTICAgIiR7Q01B
S0VfQ19GTEFHU30gICAtV25vLXVudXNlZC1wYXJhbWV0ZXIiKQorCQlzZXQoQ01BS0VfQ1hYX0ZM
QUdTICIke0NNQUtFX0NYWF9GTEFHU30gLVduby11bnVzZWQtcGFyYW1ldGVyIikKKwllbmRpZiAo
KQorCisJY2hlY2tfY19jb21waWxlcl9mbGFnKC1Xbm8tdW5yZWFjaGFibGUtY29kZSBoYXNfd25v
X3VucmVhY2hhYmxlX2NvZGUpCisJaWYgKGhhc193bm9fdW5yZWFjaGFibGVfY29kZSkKKwkJc2V0
KENNQUtFX0NfRkxBR1MgICAiJHtDTUFLRV9DX0ZMQUdTfSAgIC1Xbm8tdW5yZWFjaGFibGUtY29k
ZSIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLXVucmVh
Y2hhYmxlLWNvZGUiKQorCWVuZGlmICgpCisKKwljaGVja19jX2NvbXBpbGVyX2ZsYWcoLVdzdHJp
Y3QtcHJvdG90eXBlcyBoYXNfd3N0cmljdF9wcm90b3R5cGVzKQorCWlmIChoYXNfd3N0cmljdF9w
cm90b3R5cGVzKQorCQlzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLVdz
dHJpY3QtcHJvdG90eXBlcyIpCisJCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZM
QUdTfSAtV3N0cmljdC1wcm90b3R5cGVzIikKKwllbmRpZiAoKQorCisJaWYgKHNjdHBfd2Vycm9y
KQorCQlzZXQoQ01BS0VfQ19GTEFHUyAgICIke0NNQUtFX0NfRkxBR1N9ICAgLVdlcnJvciIpCisJ
CXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV2Vycm9yIikKKwllbmRp
ZiAoKQorCisJaWYgKHNjdHBfc2FuaXRpemVyX2FkZHJlc3MpCisJCXNldChDTUFLRV9DX0ZMQUdT
ICAgIiR7Q01BS0VfQ19GTEFHU30gICAtZnNhbml0aXplPWFkZHJlc3MgLWZuby1vbWl0LWZyYW1l
LXBvaW50ZXIgLWciKQorCQlzZXQoQ01BS0VfQ1hYX0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30g
LWZzYW5pdGl6ZT1hZGRyZXNzIC1mbm8tb21pdC1mcmFtZS1wb2ludGVyIC1nIikKKwllbmRpZiAo
KQorCisJaWYgKHNjdHBfc2FuaXRpemVyX21lbW9yeSkKKwkJc2V0KENNQUtFX0NfRkxBR1MgICAi
JHtDTUFLRV9DX0ZMQUdTfSAgIC1mc2FuaXRpemU9bWVtb3J5IC1mbm8tb21pdC1mcmFtZS1wb2lu
dGVyIC1nIC1mc2FuaXRpemUtbWVtb3J5LXRyYWNrLW9yaWdpbnMiKQorCQlzZXQoQ01BS0VfQ1hY
X0ZMQUdTICIke0NNQUtFX0NYWF9GTEFHU30gLWZzYW5pdGl6ZT1tZW1vcnkgLWZuby1vbWl0LWZy
YW1lLXBvaW50ZXIgLWcgLWZzYW5pdGl6ZS1tZW1vcnktdHJhY2stb3JpZ2lucyIpCisJZW5kaWYg
KCkKK2VuZGlmICgpCisKKyMgU0VUVElOR1MgRk9SIFZJU1VBTCBTVFVESU8gQ09NUElMRVIKK2lm
ICgieCR7Q01BS0VfQ19DT01QSUxFUl9JRH0iIFNUUkVRVUFMICJ4TVNWQyIpCisJaWYgKENNQUtF
X0NfRkxBR1MgTUFUQ0hFUyAiL1dbMC00XSIpCisJCXN0cmluZyhSRUdFWCBSRVBMQUNFICIvV1sw
LTRdIiAiL1czIiBDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IikKKwllbHNlICgpCisJ
CXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XMyIpCisJZW5kaWYgKCkKKwor
CWlmIChXRVJST1IpCisJCXNldChDTUFLRV9DX0ZMQUdTICIke0NNQUtFX0NfRkxBR1N9IC9XWCIp
CisJZW5kaWYgKCkKIGVuZGlmICgpCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIwotIyBJTlNUQUxMIExJQlJBUlkgQU5EIEhFQURFUgorIyBJTkNM
VURFIFNVQkRJUlMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKIAotaW5zdGFsbChUQVJHRVRTIHVzcnNjdHAgdXNyc2N0cC1zdGF0aWMgREVTVElOQVRJ
T04gJHtDTUFLRV9JTlNUQUxMX0xJQkRJUn0pCi1pbnN0YWxsKEZJTEVTIHVzcnNjdHAuaCBERVNU
SU5BVElPTiBpbmNsdWRlKQorYWRkX3N1YmRpcmVjdG9yeSh1c3JzY3RwbGliKQorCitpZiAoc2N0
cF9idWlsZF9wcm9ncmFtcykKKwlhZGRfc3ViZGlyZWN0b3J5KHByb2dyYW1zKQorZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL0xJQ0VOU0UubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9MSUNFTlNFLm1kCmlu
ZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmEyZDFmOTg5Y2Zm
YTllNmU2NzJjMGEzOGVjZjg5Yzc2MmM0NzUzMjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL0xJQ0VO
U0UubWQKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvTElDRU5TRS5tZApAQCAtMCwwICsxLDI3IEBACitDb3B5cmln
aHQgKGMpIDIwMTUsICBSYW5kYWxsIFN0ZXdhcnQgYW5kIE1pY2hhZWwgVHVleGVuCitBbGwgcmln
aHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwgdGhpcworICBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKworKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyog
TmVpdGhlciB0aGUgbmFtZSBvZiB1c3JzY3RwIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAor
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9NYWtlZmlsZS5hbSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxlLmFtCmluZGV4IDg1MjQwYjdjZWE4ZjY2
YjA5YjM1ZWQwN2I3ZDJmNmZlY2U5YzUxNzEuLmU5ZTE3ZTIyYzRmNzhkZmJiNTYyY2U1NjRkOWE1
YWE1Zjc3ZTAyNmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxlLmFtCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL01ha2VmaWxlLmFtCkBAIC0yOCw1NCArMjgsNyBAQAogIyBTVUNIIERBTUFHRS4KICMKIAot
QVVUT01BS0VfT1BUSU9OUyAgICAgICA9IHN1YmRpci1vYmplY3RzCi1FWFRSQV9ESVNUICAgICAg
ICAgICAgID0gTWFrZWZpbGUubm1ha2UKLWxpYl9MVExJQlJBUklFUyAgICAgICAgPSBsaWJ1c3Jz
Y3RwLmxhCi1saWJ1c3JzY3RwX2xhX1NPVVJDRVMgID0gdXNlcl9hdG9taWMuaCBcCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlcl9lbnZpcm9ubWVudC5jIHVzZXJfZW52aXJvbm1lbnQuaCBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9pbnBjYi5oIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICB1c2VyX2lwX2ljbXAuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNl
cl9pcDZfdmFyLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWFsbG9jLmggXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfbWJ1Zi5jIFwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VyX21idWYuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9xdWV1
ZS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3JlY3ZfdGhyZWFkLmMgdXNlcl9y
ZWN2X3RocmVhZC5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3JvdXRlLmggXAot
ICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfc29ja2V0LmMgXAotICAgICAgICAgICAgICAg
ICAgICAgICAgIHVzZXJfc29ja2V0dmFyLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZXJfdW1hLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cC5oIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfYXNjb25mLmMgbmV0aW5ldC9zY3Rw
X2FzY29uZi5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfYXV0aC5j
IG5ldGluZXQvc2N0cF9hdXRoLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQv
c2N0cF9ic2RfYWRkci5jIG5ldGluZXQvc2N0cF9ic2RfYWRkci5oIFwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXRpbmV0L3NjdHBfY2FsbG91dC5jIG5ldGluZXQvc2N0cF9jYWxsb3V0Lmgg
XAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyBc
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIFwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfY3JjMzIuYyBuZXRpbmV0L3NjdHBf
Y3JjMzIuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2hlYWRlci5o
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfaW5kYXRhLmMgbmV0aW5l
dC9zY3RwX2luZGF0YS5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBf
aW5wdXQuYyBuZXRpbmV0L3NjdHBfaW5wdXQuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
bmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmggXAotICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldGluZXQvc2N0cF9vcy5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3Nj
dHBfb3NfdXNlcnNwYWNlLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0
cF9vdXRwdXQuYyBuZXRpbmV0L3NjdHBfb3V0cHV0LmggXAotICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldGluZXQvc2N0cF9wY2IuYyBuZXRpbmV0L3NjdHBfcGNiLmggXAotICAgICAgICAgICAg
ICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9wZWVsb2ZmLmMgbmV0aW5ldC9zY3RwX3BlZWxvZmYu
aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5o
IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfc2hhMS5jIG5ldGluZXQv
c2N0cF9zaGExLmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9zc19m
dW5jdGlvbnMuYyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3N0cnVj
dHMuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3N5c2N0bC5jIG5l
dGluZXQvc2N0cF9zeXNjdGwuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9z
Y3RwX3VzZXJzcGFjZS5jIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBf
dGltZXIuYyBuZXRpbmV0L3NjdHBfdGltZXIuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAg
bmV0aW5ldC9zY3RwX3Vpby5oIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3Nj
dHBfdXNycmVxLmMgXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF92YXIu
aCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwdXRpbC5jIG5ldGluZXQv
c2N0cHV0aWwuaCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvc2N0cDZfdmFy
LmggXAotICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCi1s
aWJ1c3JzY3RwX2xhX0NGTEFHUyA9ICQoTElCQ0ZMQUdTKQotbGlidXNyc2N0cF9sYV9MREZMQUdT
ID0gLXZlcnNpb24taW5mbyAxOjA6MAotaW5jbHVkZV9IRUFERVJTID0gdXNyc2N0cC5oCi0KK1NV
QkRJUlMgPSB1c3JzY3RwbGliIHByb2dyYW1zCitFWFRSQV9ESVNUID0gYm9vdHN0cmFwIE1ha2Vm
aWxlLm5tYWtlCitBQ0xPQ0FMX0FNRkxBR1MgPSAtSSBtNAorIyBwa2djb25maWdfREFUQSA9IHVz
cnNjdHAucGMKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtlIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
TWFrZWZpbGUubm1ha2UKaW5kZXggNDhkMmJkMTEwYzdlNWJjZjhiOWQ0YzliOGUzMDc5YWU1YmNm
ZmQ1MC4uNmY5ZDcwMTQ3ODQ5OGVkMmZiNDFjMjllZDUyMTIwZjczODI0YzE5MiAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UK
QEAgLTI4LDE1MiArMjgsMTggQEAKICMgU1VDSCBEQU1BR0UuDQogIw0KIA0KLUNGTEFHUz0vSS4g
L1czIC9XWA0KLQ0KLUNWQVJTRExMPS1EU0NUUF9ERUJVRyAtRFNDVFBfU0lNUExFX0FMTE9DQVRP
UiAtRFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUw0KLUNWQVJTRExMPSQoQ1ZBUlNETEwpIC1EX19V
c2Vyc3BhY2VfXyAtRF9fVXNlcnNwYWNlX29zX1dpbmRvd3MNCi1DVkFSU0RMTD0kKENWQVJTRExM
KSAtRElORVQgLURJTkVUNg0KLUNWQVJTRExMPSQoQ1ZBUlNETEwpIC1EX0xJQg0KLQ0KLUxJTktG
TEFHUz0vTElCUEFUSDouIFdzMl8zMi5saWINCi0NCi11c3JzY3RwX09CSkVDVFMgPSBcDQotCXVz
ZXJfZW52aXJvbm1lbnQub2JqIFwNCi0JdXNlcl9tYnVmLm9iaiBcDQotCXVzZXJfcmVjdl90aHJl
YWQub2JqIFwNCi0JdXNlcl9zb2NrZXQub2JqIFwNCi0Jc2N0cF9hc2NvbmYub2JqIFwNCi0Jc2N0
cF9hdXRoLm9iaiBcDQotCXNjdHBfYnNkX2FkZHIub2JqIFwNCi0Jc2N0cF9jYWxsb3V0Lm9iaiBc
DQotCXNjdHBfY2NfZnVuY3Rpb25zLm9iaiBcDQotCXNjdHBfY3JjMzIub2JqIFwNCi0Jc2N0cF9p
bmRhdGEub2JqIFwNCi0Jc2N0cF9pbnB1dC5vYmogXA0KLQlzY3RwX291dHB1dC5vYmogXA0KLQlz
Y3RwX3BjYi5vYmogXA0KLQlzY3RwX3BlZWxvZmYub2JqIFwNCi0Jc2N0cF9zaGExLm9iaiBcDQot
CXNjdHBfc3NfZnVuY3Rpb25zLm9iaiBcDQotCXNjdHBfc3lzY3RsLm9iaiBcDQotCXNjdHBfdGlt
ZXIub2JqIFwNCi0Jc2N0cF91c2Vyc3BhY2Uub2JqICBcDQotCXNjdHBfdXNycmVxLm9iaiBcDQot
CXNjdHB1dGlsLm9iaiBcDQotCXNjdHA2X3VzcnJlcS5vYmoNCi0NCi11c3JzY3RwX0hFQURFUlMg
PSBcDQotCXVzZXJfYXRvbWljLmggXA0KLQl1c2VyX2Vudmlyb25tZW50LmggXA0KLQl1c2VyX2lu
cGNiLmggXA0KLQl1c2VyX2lwNl92YXIuaCBcDQotCXVzZXJfbWFsbG9jLmggXA0KLQl1c2VyX21i
dWYuaCBcDQotCXVzZXJfcmVjdl90aHJlYWQuaCBcDQotCXVzZXJfcm91dGUuaCBcDQotCXVzZXJf
c29ja2V0dmFyLmggXA0KLQl1c2VyX3VtYS5oIFwNCi0JdXNlcl9xdWV1ZS5oIFwNCi0JdXNlcl9p
cF9pY21wLmggXA0KLQl1c2VyX2lwNl92YXIuaCBcDQotCW5ldGluZXRcc2N0cC5oIFwNCi0JbmV0
aW5ldFxzY3RwX2FzY29uZi5oIFwNCi0JbmV0aW5ldFxzY3RwX2F1dGguaCBcDQotCW5ldGluZXRc
c2N0cF9ic2RfYWRkci5oIFwNCi0JbmV0aW5ldFxzY3RwX2NhbGxvdXQuaCBcDQotCW5ldGluZXRc
c2N0cF9jb25zdGFudHMuaCBcDQotCW5ldGluZXRcc2N0cF9jcmMzMi5oIFwNCi0JbmV0aW5ldFxz
Y3RwX2hlYWRlci5oIFwNCi0JbmV0aW5ldFxzY3RwX2luZGF0YS5oIFwNCi0JbmV0aW5ldFxzY3Rw
X2lucHV0LmggXA0KLQluZXRpbmV0XHNjdHBfbG9ja191c2Vyc3BhY2UuaCBcDQotCW5ldGluZXRc
c2N0cF9vcy5oIFwNCi0JbmV0aW5ldFxzY3RwX29zX3VzZXJzcGFjZS5oIFwNCi0JbmV0aW5ldFxz
Y3RwX291dHB1dC5oIFwNCi0JbmV0aW5ldFxzY3RwX3BjYi5oIFwNCi0JbmV0aW5ldFxzY3RwX3Bl
ZWxvZmYuaCBcDQotCW5ldGluZXRcc2N0cF9wcm9jZXNzX2xvY2suaCBcDQotCW5ldGluZXRcc2N0
cF9zaGExLmggXA0KLQluZXRpbmV0XHNjdHBfc3RydWN0cy5oIFwNCi0JbmV0aW5ldFxzY3RwX3N5
c2N0bC5oIFwNCi0JbmV0aW5ldFxzY3RwX3RpbWVyLmggXA0KLQluZXRpbmV0XHNjdHBfdWlvLmgg
XA0KLQluZXRpbmV0XHNjdHBfdmFyLmggXA0KLQluZXRpbmV0XHNjdHB1dGlsLmggXA0KLQluZXRp
bmV0NlxzY3RwNl92YXIuaA0KLQ0KLXVzcnNjdHAubGliIDogJCh1c3JzY3RwX09CSkVDVFMpDQot
CWxpYiAvb3V0OnVzcnNjdHAubGliICQoTElOS0ZMQUdTKSAkKHVzcnNjdHBfT0JKRUNUUykNCi0N
Ci11c2VyX2Vudmlyb25tZW50Lm9iaiA6IHVzZXJfZW52aXJvbm1lbnQuYyAkKHVzcnNjdHBfSEVB
REVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfZW52aXJvbm1lbnQuYw0K
LQ0KLXVzZXJfbWJ1Zi5vYmogIDogdXNlcl9tYnVmLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNs
ICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyB1c2VyX21idWYuYw0KLQ0KLXVzZXJfcmVjdl90aHJl
YWQub2JqOiB1c2VyX3JlY3ZfdGhyZWFkLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZB
UlNETEwpICQoQ0ZMQUdTKSAtYyB1c2VyX3JlY3ZfdGhyZWFkLmMNCi0NCi11c2VyX3NvY2tldC5v
YmogOiB1c2VyX3NvY2tldC5jICQodXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAk
KENGTEFHUykgLWMgdXNlcl9zb2NrZXQuYw0KLQ0KLXNjdHBfYXNjb25mLm9iaiA6IG5ldGluZXRc
c2N0cF9hc2NvbmYuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxB
R1MpIC1jIG5ldGluZXRcc2N0cF9hc2NvbmYuYw0KLQ0KLXNjdHBfYXV0aC5vYmogOiBuZXRpbmV0
XHNjdHBfYXV0aC5jICQodXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFH
UykgLWMgbmV0aW5ldFxzY3RwX2F1dGguYw0KLQ0KLXNjdHBfYnNkX2FkZHIub2JqIDogbmV0aW5l
dFxzY3RwX2JzZF9hZGRyLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQo
Q0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfYnNkX2FkZHIuYw0KLQ0KLXNjdHBfY2FsbG91dC5vYmog
OiBuZXRpbmV0XHNjdHBfY2FsbG91dC5jICQodXNyc2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJT
RExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2NhbGxvdXQuYw0KLQ0KLXNjdHBfY2NfZnVu
Y3Rpb25zLm9iaiA6IG5ldGluZXRcc2N0cF9jY19mdW5jdGlvbnMuYyAkKHVzcnNjdHBfSEVBREVS
UykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9jY19mdW5jdGlv
bnMuYw0KLQ0KLXNjdHBfY3JjMzIub2JqIDogbmV0aW5ldFxzY3RwX2NyYzMyLmMgJCh1c3JzY3Rw
X0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfY3Jj
MzIuYw0KLQ0KLXNjdHBfaW5kYXRhLm9iaiA6IG5ldGluZXRcc2N0cF9pbmRhdGEuYyAkKHVzcnNj
dHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9p
bmRhdGEuYw0KLQ0KLXNjdHBfaW5wdXQub2JqIDogbmV0aW5ldFxzY3RwX2lucHV0LmMgJCh1c3Jz
Y3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBf
aW5wdXQuYw0KLQ0KLXNjdHBfb3V0cHV0Lm9iaiA6IG5ldGluZXRcc2N0cF9vdXRwdXQuYyAkKHVz
cnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0
cF9vdXRwdXQuYw0KLQ0KLXNjdHBfcGNiLm9iaiA6IG5ldGluZXRcc2N0cF9wY2IuYyAkKHVzcnNj
dHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9w
Y2IuYw0KLQ0KLXNjdHBfcGVlbG9mZi5vYmogOiBuZXRpbmV0XHNjdHBfcGVlbG9mZi5jICQodXNy
c2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3Rw
X3BlZWxvZmYuYw0KLQ0KLXNjdHBfc2hhMS5vYmogOiBuZXRpbmV0XHNjdHBfc2hhMS5jICQodXNy
c2N0cF9IRUFERVJTKQ0KLQljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3Rw
X3NoYTEuYw0KLQ0KLXNjdHBfc3NfZnVuY3Rpb25zLm9iaiA6IG5ldGluZXRcc2N0cF9zc19mdW5j
dGlvbnMuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1j
IG5ldGluZXRcc2N0cF9zc19mdW5jdGlvbnMuYw0KLQ0KLXNjdHBfc3lzY3RsLm9iaiA6IG5ldGlu
ZXRcc2N0cF9zeXNjdGwuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFSU0RMTCkgJChD
RkxBR1MpIC1jIG5ldGluZXRcc2N0cF9zeXNjdGwuYw0KLQ0KLXNjdHBfdGltZXIub2JqIDogbmV0
aW5ldFxzY3RwX3RpbWVyLmMgJCh1c3JzY3RwX0hFQURFUlMpDQotCWNsICQoQ1ZBUlNETEwpICQo
Q0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfdGltZXIuYw0KLQ0KLXNjdHBfdXNlcnNwYWNlLm9iaiA6
IG5ldGluZXRcc2N0cF91c2Vyc3BhY2UuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChDVkFS
U0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF91c2Vyc3BhY2UuYw0KLQ0KLXNjdHBfdXNy
cmVxLm9iaiA6IG5ldGluZXRcc2N0cF91c3JyZXEuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wg
JChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF91c3JyZXEuYw0KLQ0KLXNjdHB1
dGlsLm9iaiA6IG5ldGluZXRcc2N0cHV0aWwuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wgJChD
VkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cHV0aWwuYw0KLQ0KLXNjdHA2X3VzcnJl
cS5vYmogOiBuZXRpbmV0NlxzY3RwNl91c3JyZXEuYyAkKHVzcnNjdHBfSEVBREVSUykNCi0JY2wg
JChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXQ2XHNjdHA2X3VzcnJlcS5jDQorYWxsOg0K
KwljZCB1c3JzY3RwbGliDQorCW5tYWtlIC1mIE1ha2VmaWxlLm5tYWtlDQorCWNkIC4uDQorCWNk
IHByb2dyYW1zDQorCW5tYWtlIGFsbCAtZiBNYWtlZmlsZS5ubWFrZQ0KKwljZCAuLg0KIA0KIGNs
ZWFuOg0KLQlkZWwgKi5vYmoNCi0JZGVsIHVzcnNjdHAubGliDQorCWNkIHVzcnNjdHBsaWINCisJ
bm1ha2UgY2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCisJY2QgcHJvZ3JhbXMNCisJ
bm1ha2UgY2xlYW4gLWYgTWFrZWZpbGUubm1ha2UNCisJY2QgLi4NCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9NYW51YWwubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwubWQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0
MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNzA1NzM2ODg0NGRlZTMyNDBhMDNhNzI1YjA5OWRk
ODBhNmQyMWY1OSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFudWFsLm1kCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L01hbnVhbC5tZApAQCAtMCwwICsxLDc4NSBAQAorIyBTQ1RQIHVzZXItbGFuZCBpbXBsZW1lbnRh
dGlvbiAodXNyc2N0cCkKKworU0NUUCBpcyBhIG1lc3NhZ2Ugb3JpZW50ZWQsIHJlbGlhYmxlIHRy
YW5zcG9ydCBwcm90b2NvbCB3aXRoIGRpcmVjdCBzdXBwb3J0IGZvciBtdWx0aWhvbWluZyB0aGF0
IHJ1bnMgb24gdG9wIG9mIElQIG9yIFVEUCwgYW5kIHN1cHBvcnRzIGJvdGggdjQgYW5kIHY2IHZl
cnNpb25zLgorCitMaWtlIFRDUCwgU0NUUCBwcm92aWRlcyByZWxpYWJsZSwgY29ubmVjdGlvbiBv
cmllbnRlZCBkYXRhIGRlbGl2ZXJ5IHdpdGggY29uZ2VzdGlvbiBjb250cm9sLiBVbmxpa2UgVENQ
LCBTQ1RQIGFsc28gcHJvdmlkZXMgbWVzc2FnZSBib3VuZGFyeSBwcmVzZXJ2YXRpb24sIG9yZGVy
ZWQgYW5kIHVub3JkZXJlZCBtZXNzYWdlIGRlbGl2ZXJ5LCBtdWx0aS1zdHJlYW1pbmcgYW5kIG11
bHRpLWhvbWluZy4gRGV0ZWN0aW9uIG9mIGRhdGEgY29ycnVwdGlvbiwgbG9zcyBvZiBkYXRhIGFu
ZCBkdXBsaWNhdGlvbiBvZiBkYXRhIGlzIGFjaGlldmVkIGJ5IHVzaW5nIGNoZWNrc3VtcyBhbmQg
c2VxdWVuY2UgbnVtYmVycy4gQSBzZWxlY3RpdmUgcmV0cmFuc21pc3Npb24gbWVjaGFuaXNtIGlz
IGFwcGxpZWQgdG8gY29ycmVjdCBsb3NzIG9yIGNvcnJ1cHRpb24gb2YgZGF0YS4KKworSW4gdGhp
cyBtYW51YWwgdGhlIHNvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBpbXBsZW1lbnRh
dGlvbiB3aWxsIGJlIGRlc2NyaWJlZC4gIEl0IGlzIGJhc2VkIG9uIFtSRkMgNjQ1OF0oaHR0cDov
L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuIFRoZSBtYWluIGZvY3VzIG9mIHRoaXMgZG9j
dW1lbnQgaXMgb24gcG9pbnRpbmcgb3V0IHRoZSBkaWZmZXJlbmNlcyB0byB0aGUgU0NUUCBTb2Nr
ZXRzIEFQSS4gRm9yIGFsbCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQSSB0aGF0IGFyZSBub3Qg
bWVudGlvbmVkIGluIHRoaXMgZG9jdW1lbnQsIHBsZWFzZSByZWZlciB0byBbUkZDIDY0NThdKGh0
dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLiBRdWVzdGlvbnMgYWJvdXQgU0NUUCBp
dHNlbGYgY2FuIGhvcGVmdWxseSBiZSBhbnN3ZXJlZCBieSBbUkZDIDQ5NjBdKGh0dHA6Ly90b29s
cy5pZXRmLm9yZy9odG1sL3JmYzQ5NjApLgorCisjIyBHZXR0aW5nIFN0YXJ0ZWQKK1RoZSB1c2Vy
LWxhbmQgc3RhY2sgaGFzIGJlZW4gdGVzdGVkIG9uIEZyZWVCU0QgMTAuMCwgVWJ1bnR1IDExLjEw
LCBXaW5kb3dzIDcsIE1hYyBPUyBYIDEwLjYsIGFuZCBNYWMgT1MgWCAxMC43LiBUaGUgY3VycmVu
dCB2ZXJzaW9uIG9mIHRoZSB1c2VyLWxhbmQgc3RhY2sgaXMgcHJvdmlkZWQgb24gW2dpdGh1Yl0o
aHR0cHM6Ly9naXRodWIuY29tL3NjdHBsYWIvdXNyc2N0cCkuIERvd25sb2FkIHRoZSB0YXJiYWxs
IGFuZCB1bnRhciBpdCBpbiBhIGZvbGRlciBvZiB5b3VyIGNob2ljZS4gVGhlIHRhcmJhbGwgY29u
dGFpbnMgYWxsIHRoZSBzb3VyY2VzIHRvIGJ1aWxkIHRoZSBsaWJ1c3JzY3RwLCB3aGljaCBoYXMg
dG8gYmUgbGlua2VkIHRvIHRoZSBvYmplY3QgZmlsZSBvZiBhbiBleGFtcGxlIHByb2dyYW0uIElu
IGFkZGl0aW9uIHRoZXJlIGFyZSB0d28gYXBwbGljYXRpb25zIGluIHRoZSBmb2xkZXIgYHByb2dy
YW1zYCB0aGF0IGNhbiBiZSBidWlsdCBhbmQgcnVuLgorCisjIyMgQnVpbGRpbmcgdGhlIExpYnJh
cnkgYW5kIHRoZSBBcHBsaWNhdGlvbnMKKyMjIyMgVW5peC1saWtlIE9wZXJhdGluZyBTeXN0ZW1z
CitJbiB0aGUgZm9sZGVyIGB1c3JzY3RwYCB0eXBlCisKKyAgICAkIC4vYm9vdHN0cmFwCisgICAg
JCAuL2NvbmZpZ3VyZQorICAgICQgbWFrZQorCitOb3csIHRoZSBsaWJyYXJ5IGBsaWJ1c3JzY3Rw
LmxhYCBoYXMgYmVlbiBidWlsdCBpbiB0aGUgc3ViZGlyZWN0b3J5IGB1c3JzY3RwbGliYCwgYW5k
IHRoZSBleGFtcGxlIHByb2dyYW1zIGFyZSByZWFkeSB0byBydW4gZnJvbSB0aGUgc3ViZGlyZWN0
b3J5IGBwcm9ncmFtc2AuCisKK0lmIHlvdSBoYXZlIHJvb3QgcHJpdmlsZWdlcyBvciBhcmUgaW4g
dGhlIHN1ZG9lciBncm91cCwgeW91IGNhbiBpbnN0YWxsIHRoZSBsaWJyYXJ5IGluIGAvdXNyL2xv
Y2FsL2xpYmAgYW5kIGNvcHkgdGhlIGhlYWRlciBmaWxlIHRvIGAvdXNyL2luY2x1ZGVgIHdpdGgg
dGhlIGNvbW1hbmQKKworICAgICQgc3VkbyBtYWtlIGluc3RhbGwKKworIyMjIyBXaW5kb3dzCitP
biBXaW5kb3dzIHlvdSBuZWVkIGEgY29tcGlsZXIgbGlrZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRp
by4gWW91IGNhbiBidWlsZCB0aGUgbGlicmFyeSBhbmQgdGhlIGV4YW1wbGUgcHJvZ3JhbXMgd2l0
aCB0aGUgY29tbWFuZCBsaW5lIHRvb2wgb2YgdGhlIGNvbXBpbGVyIGJ5IHR5cGluZworCisgICAg
JCBubWFrZSAtZiBNYWtlZmlsZS5ubWFrZQorCitpbiB0aGUgZGlyZWN0b3J5IGB1c3JzY3RwYC4K
KworIyMjIyBDTWFrZQorQ3JlYXRlIGEgZGlyZWN0b3J5IG91dHNpZGUgdGhlIGB1c3JzY3RwYCBk
aXJlY3RvcnksIGVudGVyIGl0IGFuZCBnZW5lcmF0ZSBmaWxlcyBieSB0eXBpbmcKKworICAgICQg
Y21ha2UgPHBhdGgtdG8tdXNyc2N0cC1zb3VyY2VzPgorICAgICQgY21ha2UgLS1idWlsZCAuCisK
K0J5IGRlZmF1bHQgQ01ha2UgZ2VuZXJhdGVzIGEgREVCVUcgYnVpbGQgd2l0aCB2ZXJib3NlIG91
dHB1dC4KKworIyMjIFJ1bm5pbmcgdGhlIFRlc3QgUHJvZ3JhbXMKKworU2V2ZXJhbCB0ZXN0IHBy
b2dyYW1zIGFyZSBpbmNsdWRlZCwgaW5jbHVkaW5nIGEgZGlzY2FyZCBzZXJ2ZXIgYW5kIGEgY2xp
ZW50LiBZb3UgY2FuIHJ1biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRoZSBjbGllbnQgdG8gdGhl
IHNlcnZlci4gVGhlIGNsaWVudCByZWFkcyBkYXRhIGZyb20gc3RkaW4gYW5kIHNlbmRzIHRoZW0g
dG8gdGhlIHNlcnZlciwgd2hpY2ggcHJpbnRzIHRoZSBtZXNzYWdlIGluIHRoZSB0ZXJtaW5hbCBh
bmQgZGlzY2FyZHMgaXQuIFRoZSBzb3VyY2VzIG9mIHRoZSBzZXJ2ZXIgYXJlIGFsc28gcHJvdmlk
ZWQgW2hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvYmxvYi9tYXN0ZXIv
cHJvZ3JhbXMvZGlzY2FyZF9zZXJ2ZXIuYykgYW5kIHRob3NlIG9mIHRoZSBjbGllbnQgW2hlcmVd
KGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAvYmxvYi9tYXN0ZXIvcHJvZ3JhbXMv
Y2xpZW50LmMpLgorCisjIyMgVXNpbmcgVURQIEVuY2Fwc3VsYXRpb24KKworQm90aCBwcm9ncmFt
cyBjYW4gZWl0aGVyIHNlbmQgZGF0YSBvdmVyIFNDVFAgZGlyZWN0bHkgb3IgdXNlIFVEUCBlbmNh
cHN1bGF0aW9uLCB0aHVzIGVuY2Fwc3VsYXRpbmcgdGhlIFNDVFAgcGFja2V0IGluIGEgVURQIGRh
dGFncmFtLiBUaGUgZmlyc3QgbW9kZSB3b3JrcyBvbiBsb29wYmFjayBvciBpbiBhIHByb3RlY3Rl
ZCBzZXR1cCB3aXRob3V0IGFueSBOQVQgYm94ZXMgaW52b2x2ZWQuIEluIGFsbCBvdGhlciBjYXNl
cyBpdCBpcyBiZXR0ZXIgdG8gdXNlIFVEUCBlbmNhcHN1bGF0aW9uLgorCitUaGUgdXNhZ2Ugb2Yg
dGhlIGBkaXNjYXJkX3NlcnZlcmAgaXMKKworICAgICQgZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2Vu
Y2Fwc19wb3J0IHJlbW90ZV9lbmNhcHNfcG9ydF0KKworRm9yIFVEUCBlbmNhcHN1bGF0aW9uIHRo
ZSBwb3J0cyBoYXZlIHRvIGJlIHNwZWNpZmllZC4gVGhlIGxvY2FsIGFuZCByZW1vdGUgZW5jYXBz
dWxhdGlvbiBwb3J0cyBjYW4gYmUgYXJiaXRyYXJpbHkgc2V0LiBGb3IgZXhhbXBsZSwgeW91IGNh
biBjYWxsCisKKyAgICAkIC4vZGlzY2FyZF9zZXJ2ZXIgMTExMTEgMjIyMjIKKworb24gYSBVbml4
LWxpa2UgT1MgYW5kCisKKyAgICAkIGRpc2NhcmRfc2VydmVyLmV4ZSAxMTExMSAyMjIyMgorCitv
biBXaW5kb3dzLgorCitUaGUgY2xpZW50IG5lZWRzIHR3byBhZGRpdGlvbmFsIHBhcmFtZXRlcnMs
IHRoZSBzZXJ2ZXIncyBhZGRyZXNzIGFuZCBpdHMgcG9ydC4gSXRzIHVzYWdlIGlzCisKKyAgICAk
IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2NhbF9lbmNhcHNf
cG9ydCByZW1vdGVfZW5jYXBzX3BvcnRdCisKK1RoZSByZW1vdGUgYWRkcmVzcyBpcyB0aGUgc2Vy
dmVyJ3MgYWRkcmVzcy4gSWYgY2xpZW50IGFuZCBzZXJ2ZXIgYXJlIHN0YXJ0ZWQgb24gdGhlIHNh
bWUgbWFjaGluZSwgdGhlIGxvb3BiYWNrIGFkZHJlc3MgYDEyNy4wLjAuMWAgY2FuIGJlIHVzZWQg
Zm9yIFVuaXgtbGlrZSBPU3MgYW5kIHRoZSBsb2NhbCBhZGRyZXNzIG9uIFdpbmRvd3MuIFRoZSBk
aXNjYXJkIHBvcnQgaXMgOSwgdGh1cyA5IGhhcyB0byBiZSB0YWtlbiBhcyByZW1vdGUgcG9ydC4g
VGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgaGF2ZSB0byBtYXRjaCB0aG9zZSBvZiB0aGUgc2VydmVy
LCBpLmUuIHRoZSBzZXJ2ZXIncyBgbG9jYWxfZW5jYXBzX3BvcnRgIGlzIHRoZSBjbGllbnQncyBg
cmVtb3RlX2VuY2Fwc19wb3J0YCBhbmQgdmljZSB2ZXJzYS4gVGh1cywgdGhlIGNsaWVudCBjYW4g
YmUgc3RhcnRlZCB3aXRoCisKKyAgICAkIC4vY2xpZW50IDEyNy4wLjAuMSA5IDAgMjIyMjIgMTEx
MTEKKworb24gYSBVbml4LWxpa2UgT1MgYW5kCisKKyAgICAkIGNsaWVudC5leGUgMTkyLjE2OC4w
LjEgOSAwIDIyMjIyIDExMTExCisKK29uIFdpbmRvd3MgcHJvdmlkZWQgeW91ciBsb2NhbCBJUCBh
ZGRyZXNzIGlzIDE5Mi4xNjguMC4xLgorCisjIyMgU2VuZGluZyBvdmVyIFNDVFAKKworVG8gc2Vu
ZCBkYXRhIG92ZXIgU0NUUCBkaXJlY3RseSB5b3UgbWlnaHQgbmVlZCByb290IHByaXZpbGVnZXMg
YmVjYXVzZSByYXcgc29ja2V0cyBhcmUgdXNlZC4gVGh1cyBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcg
dGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgeW91IGhhdmUgdG8gc3RhcnQgdGhlIHByb2dyYW1zIHBy
ZXBlbmRpbmcgYHN1ZG9gIG9yIGluIGNhc2Ugb2YgV2luZG93cyBzdGFydCB0aGUgcHJvZ3JhbSBm
cm9tIGFuIGFkbWluaXN0cmF0b3IgY29uc29sZS4KKworIyMjIFVzaW5nIHRoZSBDYWxsYmFjayBB
UEkKKworSW5zdGVhZCBvZiBhc2tpbmcgY29uc3RhbnRseSBmb3IgbmV3IGRhdGEsIGEgY2FsbGJh
Y2sgQVBJIGNhbiBiZSB1c2VkIHRoYXQgaXMgdHJpZ2dlcmVkIGJ5IFNDVFAuIEEgY2FsbGJhY2sg
ZnVuY3Rpb24gaGFzIHRvIGJlIHJlZ2lzdGVyZWQgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZl
ciBkYXRhIGlzIHJlYWR5IHRvIGJlIGRlbGl2ZXJlZCB0byB0aGUgYXBwbGljYXRpb24uCisKK1Ro
ZSBgZGlzY2FyZF9zZXJ2ZXJgIGhhcyBhIGZsYWcgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3byBt
b2RpLiBJZiAgYHVzZV9jYmAgaXMgc2V0IHRvIDEsIHRoZSBjYWxsYmFjayBBUEkgd2lsbCBiZSB1
c2VkLiBUbyBjaGFuZ2UgdGhlIHNldHRpbmcsIGp1c3Qgc2V0IHRoZSBmbGFnIGFuZCBjb21waWxl
IHRoZSBwcm9ncmFtIGFnYWluLgorCisKKyMjIEJhc2ljIE9wZXJhdGlvbnMKKworQWxsIHN5c3Rl
bSBjYWxscyBzdGFydCB3aXRoIHRoZSBwcmVmaXggYHVzcnNjdHBfYCB0byBkaXN0aW5ndWlzaCB0
aGVtIGZyb20gdGhlIGtlcm5lbCB2YXJpYW50cy4gU29tZSBvZiB0aGVtIGFyZSBjaGFuZ2VkIHRv
IGFjY291bnQgZm9yIHRoZSBkaWZmZXJlbnQgZGVtYW5kcyBpbiB0aGUgdXNlcmxhbmQgZW52aXJv
bm1lbnQuCisKKyMjIERpZmZlcmVuY2VzIHRvIFJGQyA2NDU4CisKKyMjIyB1c3JzY3RwX2luaXQo
KQorCitFdmVyeSBhcHBsaWNhdGlvbiBoYXMgdG8gc3RhcnQgd2l0aCBgdXNyc2N0cF9pbml0KClg
LiBUaGlzIGZ1bmN0aW9uIGNhbGxzIGBzY3RwX2luaXQoKWAgYW5kIHJlc2VydmVzIHRoZSBtZW1v
cnkgbmVjZXNzYXJ5IHRvIGFkbWluaXN0ZXIgdGhlIGRhdGEgdHJhbnNmZXIuIFRoZSBmdW5jdGlv
biBwcm90b3R5cGUgaXMKKworYGBgYwordm9pZCB1c3JzY3RwX2luaXQodWludDE2X3QgdWRwX3Bv
cnQpCitgYGAKKworQXMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBzZW5kIGRhdGEgZGly
ZWN0bHkgb3ZlciBTQ1RQIGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2FuIHByb2Nlc3MgU0NU
UCBwYWNrZXRzLCB0aGUgZGF0YSBjYW4gYmUgc2VudCBvdmVyIFVEUC4gVG8gZW5jYXBzdWxhdGUg
U0NUUCBpbnRvIFVEUCBhIFVEUCBwb3J0IGhhcyB0byBiZSBzcGVjaWZpZWQsIHRvIHdoaWNoIHRo
ZSBkYXRhZ3JhbXMgY2FuIGJlIHNlbnQuIFRoaXMgbG9jYWwgVURQIHBvcnQgIGlzIHNldCB3aXRo
IHRoZSBwYXJhbWV0ZXIgYHVkcF9wb3J0YC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgOTg5OSwgdGhl
IHN0YW5kYXJkIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQuIElmIFVEUCBlbmNhcHN1bGF0aW9uIGlz
IG5vdCBuZWNlc3NhcnksIHRoZSBVRFAgcG9ydCBoYXMgdG8gYmUgc2V0IHRvIDAuCisKKyMjIyB1
c3JzY3RwX2ZpbmlzaCgpCisKK0F0IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gYHVzcnNjdHBfZmlu
aXNoKClgIHNob3VsZCBiZSBjYWxsZWQgdG8gZnJlZSBhbGwgdGhlIG1lbW9yeSB0aGF0IGhhcyBi
ZWVuIGFsbG9jYXRlZCBiZWZvcmUuIFRoZSBmdW5jdGlvbiBwcm90b3R5cGUgaXMKKworYGBgYwor
aW50IHVzcnNjdHBfZmluaXNoKHZvaWQpCitgYGAKKworVGhlIHJldHVybiBjb2RlIGlzIDAgb24g
c3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJvci4KKworIyMjIHVzcnNjdHBfc29ja2V0
KCkKKworQSByZXByZXNlbnRhdGlvbiBvZiBhbiBTQ1RQIGVuZHBvaW50IGlzIGEgc29ja2V0LiBJ
cyBpdCBjcmVhdGVkIHdpdGggYHVzcnNjdHBfc29ja2V0KClgLiBUaGUgZnVuY3Rpb24gcHJvdG90
eXBlIGlzOgorCitgYGBjCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfc29ja2V0KGludCBkb21h
aW4sCisgICAgICAgICAgICAgICBpbnQgdHlwZSwKKyAgICAgICAgICAgICAgIGludCBwcm90b2Nv
bCwKKyAgICAgICAgICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ss
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlvbiBzY3RwX3NvY2tzdG9yZSBh
ZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfcmN2aW5mbywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKnVscF9pbmZvKSwKKyAgICAgICAgICAgICAgIGludCAoKnNlbmRfY2IpKHN0
cnVjdCBzb2NrZXQgKnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBzYl9mcmVlKSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAg
ICAgICAgICAgIHZvaWQgKnVscF9pbmZvKQorYGBgCisKK1RoZSBhcmd1bWVudHMgdGFrZW4gZnJv
bSBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpIGFyZToKKwor
KiBkb21haW46IFBGX0lORVQgb3IgUEZfSU5FVDYgY2FuIGJlIHVzZWQuCisqIHR5cGU6IEluIGNh
c2Ugb2YgYSBvbmUtdG8tbWFueSBzdHlsZSBzb2NrZXQgaXQgaXMgU09DS19TRVFQQUNLRVQsIGlu
IGNhc2Ugb2YgYSBvbmUtdG8tb25lIHN0eWxlCitzb2NrZXQgaXQgaXMgU09DS19TVFJFQU0uIEZv
ciBhbiBleHBsYW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc29ja2V0IHR5
cGVzIHBsZWFzZQorcmVmZXIgdG8gW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmM2NDU4KS4KKyogcHJvdG9jb2w6IFNldCBJUFBST1RPX1NDVFAuCisKK0luIHVzcnNjdHAs
IGEgY2FsbGJhY2sgQVBJIGNhbiBiZSB1c2VkLgorCisqIFRoZSBmdW5jdGlvbiBwb2ludGVycyBv
ZiB0aGUgcmVjZWl2ZSBhbmQgc2VuZCBjYWxsYmFja3MgYXJlIG5ldyBhcmd1bWVudHMgdG8gdGhl
IHNvY2tldCBjYWxsLiBJZiBubyBjYWxsYmFjayBBUEkgaXMgdXNlZCwgdGhlc2UgbXVzdCBiZSBg
TlVMTGAuCisqIFRoZSBgc2JfdGhyZXNob2xkYCBzcGVjaWZpZXMgdGhlIGFtb3VudCBvZiBmcmVl
IHNwYWNlIGluIHRoZSBzZW5kIHNvY2tldCBidWZmZXIgYmVmb3JlIHRoZSBzZW5kIGZ1bmN0aW9u
IGluIHRoZSBhcHBsaWNhdGlvbiBpcyBjYWxsZWQuIElmIGEgc2VuZCBjYWxsYmFjayBmdW5jdGlv
biBpcyBzcGVjaWZpZWQgYW5kIGBzYl90aHJlc2hvbGRgIGlzIDAsIHRoZSBmdW5jdGlvbiBpcyBj
YWxsZWQgd2hlbmV2ZXIgdGhlcmUgaXMgcm9vbSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyLgor
KiBBZGRpdGlvbmFsIGRhdGEgbWF5IGJlIHBhc3NlZCBhbG9uZyB3aXRoaW4gdGhlIGB1bHBfaW5m
b2AgcGFyYW1ldGVyLiBUaGlzIHZhbHVlIHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBgcmVjZWl2ZV9j
YmAgd2hlbiBpdCBpcyBpbnZva2VkLgorCitPbiBzdWNjZXNzIGB1c3JzY3RwX3NvY2tldCgpYCBy
ZXR1cm5zIHRoZSBwb2ludGVyIHRvIHRoZSBuZXcgc29ja2V0IGluIHRoZSBgc3RydWN0IHNvY2tl
dGAgZGF0YSB0eXBlLiBJdCB3aWxsIGJlIG5lZWRlZCBpbiBhbGwgb3RoZXIgc3lzdGVtIGNhbGxz
LiBJbiBjYXNlIG9mIGEgZmFpbHVyZSBOVUxMIGlzIHJldHVybmVkIGFuZCBlcnJubyBpcyBzZXQg
dG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKKyMjIyB1c3JzY3RwX2Nsb3NlKCkKKwor
VGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBgdXNyc2N0cF9jbG9zZSgpYCBpcworCitgYGBjCit2
b2lkIHVzcnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pCisgYGBgCitUaHVzIHRoZSBvbmx5
IGRpZmZlcmVuY2UgaXMgdGhlIGFic2VuY2Ugb2YgYSByZXR1cm4gY29kZS4KKworIyMgU2FtZSBG
dW5jdGlvbmFsaXR5IGFzIFJGQyA2NDU4CisKK1RoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGhhdmUg
dGhlIHNhbWUgZnVuY3Rpb25hbGl0eSBhcyB0aGVpciBrZXJuZWwgcGVuZGFudHMuIFRoZXJlIHBy
b3RvdHlwZXMKK2FyZSBkZXNjcmliZWQgaW4gdGhlIGZvbGxvd2luZyBzdWJzZWN0aW9ucy4gRm9y
IGEgZGV0YWlsZWQgZGVzY3JpcHRpb24gcGxlYXNlIHJlZmVyIHRvIFtSRkMgNjQ1OF0oaHR0cDov
L3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuCisKKyMjIyB1c3JzY3RwX2JpbmQoKQorCitg
YGBjCitpbnQKK3VzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pCitg
YGAKKworKiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3Rw
X3NvY2tldCgpYC4KKyogYWRkcjogVGhlIGFkZHJlc3Mgc3RydWN0dXJlIChgc3RydWN0IHNvY2th
ZGRyX2luYCBmb3IgYW4gSVB2NCBhZGRyZXNzIG9yIGBzdHJ1Y3Qgc29ja2FkZHJfaW42YCBmb3Ig
YW4gSVB2NiBhZGRyZXNzKS4KKyogYWRkcmxlbjogVGhlIHNpemUgb2YgdGhlIGFkZHJlc3Mgc3Ry
dWN0dXJlLgorCitgdXNyc2N0cF9iaW5kKClgIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBp
biBjYXNlIG9mIGFuIGVycm9yLgorCisjIyMgdXNyc2N0cF9saXN0ZW4oKQorCitgYGBjCitpbnQK
K3VzcnNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgaW50IGJh
Y2tsb2cpCitgYGAKKworKiBzbzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5
IGB1c3JzY3RwX3NvY2tldCgpYC4KKyogYmFja2xvZzogSWYgYmFja2xvZyBpcyBub24temVybywg
ZW5hYmxlIGxpc3RlbmluZywgZWxzZSBkaXNhYmxlIGxpc3RlbmluZy4KKworYHVzcnNjdHBfbGlz
dGVuKClgIHJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgor
CisjIyMgdXNyc2N0cF9hY2NlcHQoKQorCitgYGBjCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBf
YWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy
ICogYWRkciwKKyAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGFkZHJsZW4pCitgYGAKKworKiBz
bzogUG9pbnRlciB0byB0aGUgc29ja2V0IGFzIHJldHVybmVkIGJ5IGB1c3JzY3RwX3NvY2tldCgp
YC4KKyogYWRkcjogT24gcmV0dXJuLCAgdGhlIHByaW1hcnkgYWRkcmVzcyBvZiB0aGUgcGVlciAo
YHN0cnVjdCBzb2NrYWRkcl9pbmAgZm9yIGFuIElQdjQgYWRkcmVzcyBvciBgc3RydWN0IHNvY2th
ZGRyX2luNmAgZm9yIGFuIElQdjYgYWRkcmVzcykuCisqIGFkZHJsZW46IFNpemUgb2YgdGhlIHJl
dHVybmVkIGFkZHJlc3Mgc3RydWN0dXJlLgorCitgdXNyc2N0cF9hY2NlcHQoKWAgcmV0dXJucyB0
aGUgYWNjZXB0ZWQgc29ja2V0IG9uIHN1Y2Nlc3MgYW5kIE5VTEwgaW4gY2FzZSBvZiBhbiBlcnJv
ci4KKworIyMjIHVzcnNjdHBfY29ubmVjdCgpCisKK2BgYGMKK2ludAordXNyc2N0cF9jb25uZWN0
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqbmFt
ZSwKKyAgICAgICAgICAgICAgICBzb2NrbGVuX3QgYWRkcmxlbikKK2BgYAorCisqIHNvOiBQb2lu
dGVyIHRvIHRoZSBzb2NrZXQgYXMgcmV0dXJuZWQgYnkgYHVzcnNjdHBfc29ja2V0KClgLgorKiBu
YW1lOiBBZGRyZXNzIG9mIHRoZSBwZWVyIHRvIGNvbm5lY3QgdG8gKGBzdHJ1Y3Qgc29ja2FkZHJf
aW5gIGZvciBhbiBJUHY0IGFkZHJlc3Mgb3IgYHN0cnVjdCBzb2NrYWRkcl9pbjZgIGZvciBhbiBJ
UHY2IGFkZHJlc3MpLgorKiBhZGRybGVuOiBTaXplIG9mIHRoZSBwZWVyJ3MgYWRkcmVzcy4KKwor
YHVzcnNjdHBfY29ubmVjdCgpYCByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBv
ZiBhbiBlcnJvci4KKworIyMjIHVzcnNjdHBfc2h1dGRvd24oKQorCitgYGBjCitpbnQKK3VzcnNj
dHBfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc28sIGludCBob3cpCitgYGAKKworKiBzbzogUG9p
bnRlciB0byB0aGUgc29ja2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQKKyogaG93
OiBTcGVjaWZpZXMgdGhlIHR5cGUgb2Ygc2h1dGRvd24uICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xs
b3dzOgorICAqIFNIVVRfUkQ6ICBEaXNhYmxlcyBmdXJ0aGVyIHJlY2VpdmUgb3BlcmF0aW9ucy4g
IE5vIFNDVFAgcHJvdG9jb2wgYWN0aW9uIGlzIHRha2VuLgorICAqIFNIVVRfV1I6ICBEaXNhYmxl
cyBmdXJ0aGVyIHNlbmQgb3BlcmF0aW9ucywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93
biBzZXF1ZW5jZS4KKyAgKiBTSFVUX1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJl
Y2VpdmUgb3BlcmF0aW9ucywgYW5kIGluaXRpYXRlcyB0aGUgU0NUUCBzaHV0ZG93biBzZXF1ZW5j
ZS4KKworYHVzcnNjdHBfc2h1dGRvd24oKWAgcmV0dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGlu
IGNhc2Ugb2YgYW4gZXJyb3IuCisKKyMjIFNlbmRpbmcgYW5kIFJlY2VpdmluZyBEYXRhCitTaW5j
ZSB0aGUgcHVibGljYXRpb24gb2YgW1JGQyA2NDU4XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRt
bC9yZmM2NDU4KSB0aGVyZSBpcyBvbmx5IG9uZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBhbmQgb25l
IGZvciByZWNlaXZpbmcKK3RoYXQgaXMgbm90IGRlcHJlY2F0ZWQuIFRoZXJlZm9yZSwgb25seSB0
aGVzZSB0d28gYXJlIGRlc2NyaWJlZCBoZXJlLgorCisjIyMgdXNyc2N0cF9zZW5kdigpCisKK2Bg
YGMKK3NzaXplX3QKK3VzcnNjdHBfc2VuZHYoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAg
ICAgIGNvbnN0IHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAg
ICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkcnMsCisgICAgICAgICAgICAgIGludCBhZGRyY250
LAorICAgICAgICAgICAgICB2b2lkICppbmZvLAorICAgICAgICAgICAgICBzb2NrbGVuX3QgaW5m
b2xlbiwKKyAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluZm90eXBlLAorICAgICAgICAgICAg
ICBpbnQgZmxhZ3MpCitgYGAKKworKiBzbzogVGhlIHNvY2tldCB0byBzZW5kIGRhdGEgb24uCisq
IGRhdGE6IEFzIGl0IGlzIG1vcmUgY29udmVuaWVudCB0byBzZW5kIGRhdGEgaW4gYSBidWZmZXIg
YW5kIG5vdCBhIGBzdHJ1Y3QgaW92ZWNgIGRhdGEgc3RydWN0dXJlLCB3ZSBjaG9zZSB0byBwYXNz
IHRoZSBkYXRhIGFzIGEgdm9pZCBwb2ludGVyLgorKiBsZW46IExlbmd0aCBvZiB0aGUgZGF0YS4K
KyogYWRkcnM6IEluIHRoaXMgdmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1vc3Qgb25lIGRlc3RpbmF0
aW9uIGFkZHJlc3MgaXMgc3VwcG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBhIGNvbm5lY3RlZCBzb2Nr
ZXQsIHRoZSBwYXJhbWV0ZXIgYGFkZHJzYCBjYW4gYmUgc2V0IHRvIE5VTEwuCisqIGFkZHJjbnQ6
IE51bWJlciBvZiBhZGRyZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJlc3MgaXMgc3VwcG9ydGVk
LCBhZGRyY250IGlzIDAgaWYgYWRkcnMgaXMgTlVMTCBhbmQgMSBvdGhlcndpc2UuCisqIGluZm86
IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBzdG9yZWQgaW4gYHZvaWQg
KmluZm9gLiBUaGUgZGF0YSB0eXBlcyBgc3RydWN0IHNjdHBfc25kaW5mb2AsIGBzdHJ1Y3Qgc2N0
cF9wcmluZm9gLCBhbmQgYHN0cnVjdCBzY3RwX3NlbmR2X3NwYWAgYXJlIHN1cHBvcnRlZCBhcyBk
ZWZpbmVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCku
IFN1cHBvcnQgZm9yIGBzdHJ1Y3Qgc2N0cF9hdXRoaW5mb2AgaXMgbm90IGltcGxlbWVudGVkIHll
dCwgdGhlcmVmb3JlLCBlcnJubyBpcyBzZXQgRUlOVkFMIGFuZCAtMSB3aWxsIGJlIHJldHVybmVk
LCBpZiBpdCBpcyB1c2VkLgorKiBpbmZvbGVuOiBMZW5ndGggb2YgaW5mbyBpbiBieXRlcy4KKyog
aW5mb3R5cGU6IElkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVk
IGluIGluZm8uIFBvc3NpYmxlIHZhbHVlcyBhcmUKKyAgKiBTQ1RQX1NFTkRWX05PSU5GTworICAq
IFNDVFBfU0VORFZfU05ESU5GTworICAqIFNDVFBfU0VORFZfUFJJTkZPCisgICogU0NUUF9TRU5E
Vl9TUEEgKEZvciBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIHBsZWFzZSByZWZlciB0byBbUkZDIDY0
NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY0NTgpLikKKyogZmxhZ3M6IEZsYWdz
IGFzIGRlc2NyaWJlZCBpbiBbUkZDIDY0NThdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3Jm
YzY0NTgpLgorCitgdXNyc2N0cF9zZW5kdigpYCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMg
c2VudCwgb3IgLTEgaWYgYW4gZXJyb3Igb2NjdXJyZWQuICBUaGUgdmFyaWFibGUgZXJybm8gaXMg
dGhlbiBzZXQgYXBwcm9wcmlhdGVseS4KKworIyMjIHVzcnNjdHBfcmVjdnYoKQorCitgYGBjCitz
c2l6ZV90Cit1c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgIHZv
aWQgKmRidWYsCisgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmZyb20sCisgICAgICAgICAgICAgc29ja2xlbl90ICogZnJvbWxlbiwKKyAgICAg
ICAgICAgICB2b2lkICppbmZvLAorICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKKyAg
ICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBlLAorICAgICAgICAgICAgIGludCAqbXNn
X2ZsYWdzKQorYGBgCisKKyogc286IFRoZSBzb2NrZXQgdG8gcmVjZWl2ZSBkYXRhIG9uLgorKiBk
YnVmOiBBbmFsb2cgdG8gYHVzcnNjdHBfc2VuZHYoKWAgdGhlIGRhdGEgaXMgcmV0dXJuZWQgaW4g
YSBidWZmZXIuCisqIGxlbjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCisqIGZyb206
IEEgcG9pbnRlciB0byBhbiBhZGRyZXNzIHRvIGJlIGZpbGxlZCB3aXRoIHRoZSBzZW5kZXIgb2Yg
dGhlIHJlY2VpdmVkIG1lc3NhZ2UncyBhZGRyZXNzLgorKiBmcm9tbGVuOiBBbiBpbi9vdXQgcGFy
YW1ldGVyIGRlc2NyaWJpbmcgdGhlIGZyb20gbGVuZ3RoLgorKiBpbmZvOiBBIHBvaW50ZXIgdG8g
dGhlIGJ1ZmZlciB0byBob2xkIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSByZWNlaXZlZCBtZXNzYWdl
LiAgVGhlIHN0cnVjdHVyZSB0eXBlIG9mIGluZm8gaXMgZGV0ZXJtaW5lZCBieSB0aGUgaW5mb3R5
cGUgcGFyYW1ldGVyLiBUaGUgYXR0cmlidXRlcyByZXR1cm5lZCBpbiBgaW5mb2AgaGF2ZSB0byBi
ZSBoYW5kbGVkIGluIHRoZSBzYW1lIHdheSBhcyBzcGVjaWZpZWQgaW4gW1JGQyA2NDU4XShodHRw
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KS4KKyogaW5mb2xlbjogIEFuIGluL291dCBw
YXJhbWV0ZXIgZGVzY3JpYmluZyB0aGUgc2l6ZSBvZiB0aGUgaW5mbyBidWZmZXIuCisqIGluZm90
eXBlOiAgT24gcmV0dXJuLCBgKmluZm90eXBlYCBpcyBzZXQgdG8gdGhlIHR5cGUgb2YgdGhlIGlu
Zm8gYnVmZmVyLiAgVGhlIGN1cnJlbnQgZGVmaW5lZCB2YWx1ZXMgYXJlCisgICogU0NUUF9SRUNW
Vl9OT0lORk8KKyAgKiBTQ1RQX1JFQ1ZWX1JDVklORk8KKyAgKiBTQ1RQX1JFQ1ZWX05YVElORk8K
KyAgKiBTQ1RQX1JFQ1ZWX1JOIChBIGRldGFpbGVkIGRlc2NyaXB0aW9uIGlzIGdpdmVuIGluIFtS
RkMgNjQ1OF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjQ1OCkpCisqIGZsYWdzOiBB
IHBvaW50ZXIgdG8gYW4gaW50ZWdlciB0byBiZSBmaWxsZWQgd2l0aCBhbnkgbWVzc2FnZSBmbGFn
cyAoZS5nLiwgYE1TR19OT1RJRklDQVRJT05gKS4gIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGlzIGFu
IGluL291dCBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2ZSBtYXkgYWxzbyBiZSBw
YXNzZWQgaW50byB0aGUgdmFsdWUgKGUuZy4sIGBNU0dfRU9SYCkuICBSZXR1cm5pbmcgZnJvbSB0
aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZSB3aWxsIGRpZmZlciBmcm9tIGl0cyBvcmlnaW5hbCB2
YWx1ZS4KKworYHVzcnNjdHBfcmVjdnYoKWAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNl
bnQsIG9yIC0xIGlmIGFuIGVycm9yIG9jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5vIGlzIHRo
ZW4gc2V0IGFwcHJvcHJpYXRlbHkuCisKKyMjIFNvY2tldCBPcHRpb25zCitTb2NrZXQgb3B0aW9u
cyBhcmUgdXNlZCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgYmVoYXZpb3Igb2Ygc29ja2V0IGNhbGxz
LgorVGhlaXIgYmVoYXZpb3IgaXMgc3BlY2lmaWVkIGluIFtSRkMgNjQ1OF0oaHR0cDovL3Rvb2xz
LmlldGYub3JnL2h0bWwvcmZjNjQ1OCkuIFRoZSBmdW5jdGlvbnMgdG8gZ2V0IG9yIHNldCB0aGVt
IGFyZQorCitgYGBjCitpbnQKK3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywK
KyAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGlu
dCBvcHRuYW1lLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0dmFsLAorICAgICAgICAg
ICAgICAgICAgICAgc29ja2xlbl90ICpvcHRsZW4pCitgYGAKK2FuZAorYGBgYworaW50Cit1c3Jz
Y3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgICAgICBp
bnQgbGV2ZWwsCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0bmFtZSwKKyAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdHZhbCwKKyAgICAgICAgICAgICAgICAgICAgIHNvY2ts
ZW5fdCBvcHRsZW4pCitgYGAKKworYW5kIHRoZSBhcmd1bWVudHMgYXJlCisqIHNvOiAgVGhlIHNv
Y2tldCBvZiB0eXBlIHN0cnVjdCBzb2NrZXQuCisqIGxldmVsOiAgU2V0IHRvIElQUFJPVE9fU0NU
UCBmb3IgYWxsIFNDVFAgb3B0aW9ucy4KKyogb3B0bmFtZTogIFRoZSBvcHRpb24gbmFtZSBhcyBz
cGVjaWZpZWQgaW4gVGhlIFNvY2tldCBPcHRpb25zIHRhYmxlIGJlbG93LgorKiBvcHR2YWw6IFRo
ZSBidWZmZXIgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBvcHRpb24gYXMgc3BlY2lmaWVkIGlu
IHRoZSBzZWNvbmQgY29sdW1uIG9mIFNvY2tldCBPcHRpb25zIGJlbG93LgorKiBvcHRsZW46ICBU
aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIChvciB0aGUgbGVuZ3RoIG9mIHRoZSBvcHRpb24gcmV0dXJu
ZWQgaW4gY2FzZSBvZiBgdXNyc2N0cF9nZXRzb2Nrb3B0YCkuCisKK1RoZXNlIGZ1bmN0aW9ucyBy
ZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCisjIyMgU29j
a2V0IE9wdGlvbnMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKKworT3B0aW9uIHwgRGF0YXR5cGUgfCBy
L3cKKy0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLQorU0NUUF9SVE9JTkZPIHwgc3RydWN0IHNjdHBf
cnRvaW5mbyB8IHIvdworU0NUUF9BU1NPQ0lORk8gfCBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyB8
IHIvdworU0NUUF9JTklUTVNHIHwgc3RydWN0IHNjdHBfaW5pdG1zZyB8IHIvdworU0NUUF9OT0RF
TEFZIHwgaW50IHwgci93CitTQ1RQX0FVVE9DTE9TRSB8IGludCB8IHIvdworU0NUUF9QUklNQVJZ
X0FERFIgfCBzdHJ1Y3Qgc2N0cF9zZXRwcmltIHwgci93CitTQ1RQX0FEQVBUQVRJT05fTEFZRVIg
fCBzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIHwgci93CitTQ1RQX0RJU0FCTEVfRlJBR01FTlRT
IHwgaW50IHwgci93CitTQ1RQX1BFRVJfQUREUl9QQVJBTVMgfCBzdHJ1Y3Qgc2N0cF9wYWRkcnBh
cmFtcyB8IHIvdworU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIgfCBpbnQgfCByL3cKK1NDVFBf
TUFYU0VHIHwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgfCByL3cKK1NDVFBfREVMQVlFRF9TQUNL
IHwgc3RydWN0IHNjdHBfc2Fja19pbmZvIHwgci93CitTQ1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUg
fCBpbnQgfCByL3cKK1NDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lOVCB8IGludCB8IHIvdworU0NU
UF9ITUFDX0lERU5UIHwgc3RydWN0IHNjdHBfaG1hY2FsZ28gfCByL3cKK1NDVFBfQVVUSF9BQ1RJ
VkVfS0VZIHwgc3RydWN0IHNjdHBfYXV0aGtleWlkIHwgci93CitTQ1RQX0FVVE9fQVNDT05GIHwg
aW50IHwgci93CitTQ1RQX01BWF9CVVJTVCB8IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHwgci93
CitTQ1RQX0NPTlRFWFQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSB8IHIvdworU0NUUF9FWFBM
SUNJVF9FT1IgfCBpbnQgfCByL3cKK1NDVFBfUkVVU0VfUE9SVCB8IGludCB8IHIvdworU0NUUF9F
VkVOVCB8IHN0cnVjdCBzY3RwX2V2ZW50IHwgci93CitTQ1RQX1JFQ1ZSQ1ZJTkZPIHwgaW50IHwg
ci93CitTQ1RQX1JFQ1ZOWFRJTkZPIHwgaW50IHwgci93CitTQ1RQX0RFRkFVTFRfU05ESU5GTyB8
IHN0cnVjdCBzY3RwX3NuZGluZm8gfCByL3cKK1NDVFBfREVGQVVMVF9QUklORk8gfCBzdHJ1Y3Qg
c2N0cF9kZWZhdWx0X3ByaW5mbyB8IHIvdworU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIHwg
aW50IHwgci93CitTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQgfCBzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSB8IHIvdworU0NUUF9TVEFUVVMgfCBzdHJ1Y3Qgc2N0cF9zdGF0dXMgfCByCitTQ1RQX0dF
VF9QRUVSX0FERFJfSU5GTyB8IHN0cnVjdCBzY3RwX3BhZGRyaW5mbyB8IHIKK1NDVFBfUEVFUl9B
VVRIX0NIVU5LUyB8IHN0cnVjdCBzY3RwX2F1dGhjaHVua3MgfCByCitTQ1RQX0xPQ0FMX0FVVEhf
Q0hVTktTIHwgc3RydWN0IHNjdHBfYXV0aGNodW5rcyB8IHIKK1NDVFBfR0VUX0FTU09DX05VTUJF
UiB8IHVpbnQzMl90IHwgcgorU0NUUF9HRVRfQVNTT0NfSURfTElTVCB8IHN0cnVjdCBzY3RwX2Fz
c29jX2lkcyB8IHIKK1NDVFBfUkVTRVRfU1RSRUFNUyB8IHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVh
bXMgfCB3CitTQ1RQX1JFU0VUX0FTU09DIHwgc3RydWN0IHNjdHBfYXNzb2NfdCB8IHcKK1NDVFBf
QUREX1NUUkVBTVMgfCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB8IHcKKworRnVydGhlciB1c2Fn
ZSBkZXRhaWxzIGFyZSBkZXNjcmliZWQgaW4gW1JGQyA2NDU4XSh0b29scy5pZXRmLm9yZy9odG1s
L3JmYzY0NTgpLCBbUkZDIDY1MjVdKHRvb2xzLmlldGYub3JnL2h0bWwvcmZjNjUyNSksIGFuZCBb
ZHJhZnQtaWV0Zi10c3Z3Zy1zY3RwLXVkcC1lbmNhcHMtMDNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5v
cmcvaHRtbC9kcmFmdC1pZXRmLXRzdndnLXNjdHAtdWRwLWVuY2Fwcy0wMykgKHdvcmsgaW4gcHJv
Z3Jlc3MpLgorCisjIyBTeXNjdGwgdmFyaWFibGVzCisKK0luIGtlcm5lbCBpbXBsZW1lbnRhdGlv
bnMgbGlrZSBmb3IgaW5zdGFuY2UgRnJlZUJTRCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBh
cmFtZXRlcnMgaW4gdGhlIG9wZXJhdGluZyBzeXN0ZW0uIFRoZXNlIHBhcmFtZXRlcnMgYXJlIGNh
bGxlZCBzeXNjdGwgdmFyaWFibGVzLgorCitJbiB1c3JzY3RwIGFwcGxpY2F0aW9ucyBjYW4gc2V0
IG9yIHJldHJpZXZlIHRoZXNlIHZhcmlhYmxlcyB3aXRoIHRoZSBmdW5jdGlvbnMKK2BgYGMKK3Zv
aWQgdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyAodWludDMyX3QgdmFsdWUpCitgYGAKK2FuZAorYGBg
YwordWludDMyX3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyAodm9pZCkKK2BgYAorcmVzcGVjdGl2
ZWx5LCB3aGVyZSBgIyNgIHN0YW5kcyBmb3IgdGhlIG5hbWUgb2YgdGhlIHZhcmlhYmxlLgorCitJ
biB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgcGFy
YW1ldGVycyB3aWxsIGJlIGdpdmVuLgorCisjIyBNYW5pcHVsYXRlIE1lbW9yeQorIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9zZW5kc3BhY2UoKQorVGhlIHNwYWNlIG9mIHRoZSBhdmFpbGFi
bGUgc2VuZCBidWZmZXIgY2FuIGJlIGNoYW5nZWQgZnJvbSBpdHMgZGVmYXVsdCB2YWx1ZSBvZiAy
NjIsMTQ0IGJ5dGVzIHRvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCBgMl4zMiAtIDFgIGJ5dGVzLgor
CisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3JlY3ZzcGFjZSgpCitUaGUgc3BhY2Ugb2Yg
dGhlIGF2YWlsYWJsZSByZWNlaXZlIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZh
dWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0ZXMgdG8gYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIGAyXjMy
IC0gMWAgYnl0ZXMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGFzaHRibHNpemUo
KQorVGhlIFRDQiAoVGhyZWFkIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGkuZS4g
dGhlIHNpemUgb2Ygb25lIFRDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJldHdl
ZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0
ZXMuIEEgVENCIGNvbnRhaW5zIGZvciBpbnN0YW5jZSBwb2ludGVycyB0byB0aGUgc29ja2V0LCB0
aGUgZW5kcG9pbnQsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBhc3NvY2lhdGlvbiBhbmQgc29tZSBz
dGF0aXN0aWMgZGF0YS4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wY2J0YmxzaXpl
KCkKK1RoZSBQQ0IgKFByb3RvY29sIENvbnRyb2wgQmxvY2spIGhhc2ggdGFibGUgc2l6ZXMsIGku
ZS4gdGhlIHNpemUgb2Ygb25lIFBDQiBpbiB0aGUgaGFzaCB0YWJsZSwgY2FuIGJlIHR1bmVkIGJl
dHdlZW4gMSBhbmQgYDJeMzIgLSAxYCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5
dGVzLiBUaGUgUENCIGNvbnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4g
ZW5kcG9pbnQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfc3lzdGVtX2ZyZWVfcmVz
Y19saW1pdCgpCitUaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGNh
Y2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJlIHNldCBiZXR3ZWVuIDAgYW5k
IGAyXjMyIC0gMWAuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwMDAuCisKKyMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQoKQorVGhpcyBwYXJhbWV0ZXJzIHR1
bmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzc29jaWF0
aW9uLiBJdCBjYW4gYmUgc2V0IGJldHdlZW4gMCBhbmQgYDJeMzIgLSAxYC4gVGhlIGRlZmF1bHQg
dmFsdWUgaXMgMTAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWJ1Zl90aHJlc2hv
bGRfY291bnQoKQorRGF0YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJl
IGNoYWluZWQgdG9nZXRoZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBh
IGNoYWluIGNhbiBiZSBzZXQgd2l0aCB0aGlzIHBhcmFtZXRlciwgYmVmb3JlIGFuIG1idWYgY2x1
c2V0IGlzIHVzZWQuIFRoZSBkZWZhdWx0IGlzIDUuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfYWRkX21vcmVfdGhyZXNob2xkKCkKK1RCRAorVGhpcyBwYXJhbWV0ZXIgY29uZmlndXJl
cyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ugc2hvdWxkIGJlIGFkZGVkIHRv
IGEgc29ja2V0IHNlbmQgYnVmZmVyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxNDUyIGJ5dGVzLgor
CisKKyMjIENvbmZpZ3VyZSBSVE8KK1RoZSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IChSVE8pLCBp
LmUuIHRoZSB0aW1lIHRoYXQgY29udHJvbHMgdGhlIHJldHJhbnNtaXNzaW9uIG9mIG1lc3NhZ2Vz
LCBoYXMgc2V2ZXJhbCBwYXJhbWV0ZXJzLCB0aGF0IGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBs
ZSB0byBzaG9ydGVuIHRoZSB0aW1lLCBiZWZvcmUgYSBtZXNzYWdlIGlzIHJldHJhbnNtaXR0ZWQu
IFRoZSByYW5nZSBvZiB0aGVzZSBwYXJhbWV0ZXJzIGlzIGJldHdlZW4gMCBhbmQgYDJeMzIgLSAx
YG1zLgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0b19tYXhfZGVmYXVsdCgpCitU
aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBp
biBtcyBpcyA2MCwwMDAgKDYwc2VjcykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
cnRvX21pbl9kZWZhdWx0KCkKK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgbWluaW11bSByZXRy
YW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDEsMDAwICgxc2VjKS4KKworIyMjIyB1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KCkKK1RoZSBkZWZhdWx0IHZhbHVl
IGZvciB0aGUgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDMsMDAwICgz
c2VjKS4gVGhpcyB2YWx1ZSBpcyBvbmx5IG5lZWRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGN1bGF0
aW9uIG9mIGEgcm91bmQgdHJpcCB0aW1lIHRvb2sgcGxhY2UuCisKKyMjIyMgdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQoKQorVGhlIGRlZmF1bHQgdmFsdWUgZm9y
IHRoZSBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4g
bXMgaXMgNjAsMDAwICg2MHNlY3MpLgorCisKKyMjIFNldCBUaW1lcnMKKyMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCgpCitBIGNvb2tpZSBoYXMg
YSBzcGVjaWZpZWQgbGlmZSB0aW1lLiBJZiBpdCBleHBpcmVzIHRoZSBjb29raWUgaXMgbm90IHZh
bGlkIGFueSBtb3JlIGFuZCBhbiBBQk9SVCBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpbiBt
cyBpcyA2MCwwMDAgKDYwc2VjcykuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGVh
cnRiZWF0X2ludGVydmFsX2RlZmF1bHQoKQorU2V0IHRoZSBkZWZhdWx0IHRpbWUgYmV0d2VlbiB0
d28gaGVhcnRiZWF0cy4gVGhlIGRlZmF1bHQgaXMgMzAsMDAwbXMuCisKKyMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KCkKK0lmIGEgU0hVVERP
V04gaXMgbm90IGFuc3dlcmVkIHdpdGggYSBTSFVURE9XTi1BQ0sgd2hpbGUgdGhlIHNodXRkb3du
IGd1YXJkIHRpbWVyIGlzIHN0aWxsIHJ1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxsIGJlIGFi
b3J0ZWQgYWZ0ZXIgdGhlIGRlZmF1bHQgb2YgMTgwc2Vjcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCgpCitUQkQKK1RvIHNldCB0aGUgc2l6
ZSBvZiB0aGUgcGFja2V0cyB0byB0aGUgaGlnaGVzdCB2YWx1ZSBwb3NzaWJsZSwgdGhlIG1heGlt
dW0gdHJhbnNmZXIgdW5pdCAoTVRVKSBvZiB0aGUgY29tcGxldGUgcGF0aCBoYXMgdG8gYmUga25v
d24uIFRoZSBkZWZhdWx0IHRpbWUgaW50ZXJ2YWwgZm9yIHRoZSBwYXRoIG10dSBkaXNjb3Zlcnkg
aXMgNjAwc2Vjcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zZWNyZXRfbGlmZXRp
bWVfZGVmYXVsdCgpCitUQkQKK1RoZSBkZWZhdWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZl
ciBpcyAzNjAwc2Vjcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF92dGFnX3RpbWVf
d2FpdCgpCitUQkQKK1Z0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERlZmF1bHQ6
IDYwc2VjcworCisKKyMjIFNldCBGYWlsdXJlIExpbWl0cworVHJhbnNtaXNzaW9ucyBhbmQgcmV0
cmFuc21pc3Npb25zIG9mIG1lc3NhZ2VzIG1pZ2h0IGZhaWwuIFRvIHByb3RlY3QgdGhlIHN5c3Rl
bSBhZ2FpbnN0IHRvbyBtYW55IHJldHJhbnNtaXNzaW9ucywgbGltaXRzIGhhdmUgdG8gYmUgZGVm
aW5lZC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVs
dCgpCitUaGUgZGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgYW4g
SU5JVCBjaHVua3MgaXMgOCwgYmVmb3JlIGFuIEFCT1JUIGlzIHNlbnQuCisKKyMjIyMgdXNyc2N0
cF9zeXNjdGxfc2V0X3NjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KCkKK1RoaXMgcGFyYW1ldGVy
IHNldHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3Jl
IHRoZSBhc3NvY2lhdGlvbiBpcyBhYm9ydGVkLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAxMC4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCgpCitUaGlz
IHBhcmFtZXRlciBzZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXRoIGZhaWx1cmVzIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNS4gTm90
aWNlIHRoYXQgdGhlIG51bWJlciBvZiBwYXRocyBtdWx0aXBsaWVkIGJ5IHRoaXMgdmFsdWUgc2hv
dWxkIGJlIGVxdWFsIHRvIGBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdGAuIFRoYXQgbWVhbnMg
dGhhdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGdvb2QgZm9yIHR3byBwYXRocy4KKwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfcmV0cmFuX2NodW5rKCkKK1RoZSBwYXJh
bWV0ZXIgY29uZmlndXJlcyBob3cgbWFueSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSBy
ZXRyYW5zbWl0dGVkIGJlZm9yZSB0aGUgYXNzb2NpYXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBp
cyBzZXQgdG8gMzAuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfcGF0aF9wZl90aHJl
c2hvbGQoKQorVEJECitEZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQuIERlZmF1
bHQ6IDY1NTM1CQkKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdCgpCitUQkQKK1doZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0
LiBEZWZhdWx0OiAwCisKKworIyMgQ29udHJvbCB0aGUgU2VuZGluZyBvZiBTQUNLcworIyMjIyB1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCgpCitUaGUgU0FDSyBmcmVx
dWVuY3kgZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHBhY2tldHMgdGhhdCBhcmUgYXdhaXRlZCwgYmVm
b3JlIGEgU0FDSyBpcyBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyLgorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQoKQorQXMgYSBTQUNL
IChTZWxlY3RpdmUgQWNrbm93bGVnbWVudCkgaXMgc2VudCBhZnRlciBldmVyeSBvdGhlciBwYWNr
ZXQsIGEgdGltZXIgaXMgc2V0IHRvIHNlbmQgYSBTQUNLIGluIGNhc2UgYW5vdGhlciBwYWNrZXQg
ZG9lcyBub3QgYXJyaXZlIGluIGR1ZSB0aW1lLiBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyB0
aW1lciBpcyAyMDBtcy4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3Rfc2Fj
a3MoKQorVEJECitUaGlzIGlzIGEgZmxhZyB0byB0dXJuIHRoZSBjb250cm9sbGluZyBvZiB0aGUg
Y29oZXJlbmNlIG9mIFNBQ0tzIG9uIG9yIG9mZi4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSAob24p
LgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX25yX3NhY2tfb25fb2ZmKCkKK0lmIGEg
c2xvdyBob3N0cyByZWNlaXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0
aGF0IGl0cyByZWNlaXZlciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IGRhdGEgY2FuIG9ubHkgYmUg
YWNjZXB0ZWQgaWYgb25lIGNodW5rIHdpdGggYSBoaWdoZXIgVFNOIChUcmFuc21pc3Npb24gU2Vx
dWVuY2UgTnVtYmVyKSB0aGF0IGhhcyBwcmV2aW91c2x5IGJlZW4gYWNrbm93bGVkZ2VkIGlzIGRy
b3BwZWQuIEFzIGEgY29uc2VxdWVuY2UgdGhlIHNlbmRlciBoYXMgdG8gc3RvcmUgZGF0YSwgZXZl
biBpZiB0aGV5IGhhdmUgYmVlbiBhY2tub3dsZWRnZWQgaW4gY2FzZSB0aGV5IGhhdmUgdG8gYmUg
cmV0cmFuc21pdHRlZC4gSWYgdGhpcyBiZWhhdmlvciBpcyBub3QgbmVjZXNzYXJ5LCBub24tcmVu
ZWdhYmxlIFNBQ0tzIGNhbiBiZSB0dXJuZWQgb24uIEJ5IGRlZmF1bHQgdGhlIHVzZSBvZiBub24t
cmVuZWdhYmxlIFNBQ0tzIGlzIHR1cm5lZCBvZmYuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0
X3NjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkoKQorSW4gc29tZSBjYXNlcyBpdCBpcyBub3Qg
ZGVzaXJhYmxlIHRvIHdhaXQgZm9yIHRoZSBTQUNLIHRpbWVyIHRvIGV4cGlyZSBiZWZvcmUgYSBT
QUNLIGlzIHNlbnQuIEluIHRoZXNlIGNhc2VzIGEgYml0IGNhbGxlZCBTQUNLLUlNTUVESUFURUxZ
IChzZWUgW2RyYWZ0LXR1ZXhlbi10c3Z3Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDldKGh0dHBz
Oi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9kcmFmdC10dWV4ZW4tdHN2d2ctc2N0cC1zYWNrLWltbWVk
aWF0ZWx5LTA5KSkgY2FuIGJlIHNldCB0byBwcm92b2tlIHRoZSBpbnN0YW50IHNlbmRpbmcgb2Yg
YSBTQUNLLiBUaGUgZGVmYXVsdCBpcyB0byB0dXJuIGl0IG9mZi4KKworIyMjIyB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9MMl9hYmNfdmFyaWFibGUoKQorVEJECitTQ1RQIEFCQyBtYXggaW5jcmVh
c2UgcGVyIFNBQ0sgKEwpLiBEZWZhdWx0OiAxCisKKyMjIENoYW5nZSBNYXggQnVyc3QKK01heCBi
dXJzdCBkZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBwYWNrZXRzIHRoYXQgbWF5IGJlIHNl
bnQgaW4gb25lIGZsaWdodC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9tYXhfYnVy
c3RfZGVmYXVsdCgpCitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbWF4IGJ1cnN0IGlzIDAsIHdoaWNo
IG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgYXMgYSBmbGlnaHQgaXMgbm90
IGxpbWl0ZWQgYnkgdGhpcyBwYXJhbWV0ZXIsIGJ1dCBtYXkgYmUgYnkgYW5vdGhlciBvbmUsIHNl
ZSB0aGUgbmV4dCBwYXJhZ3JhcGguCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfdXNl
X2N3bmRfYmFzZWRfbWF4YnVyc3QoKQorVGhlIHVzZSBvZiBtYXggYnVyc3QgaXMgYmFzZWQgb24g
dGhlIHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IChjd25kKS4gVGhpcyBwYXJhbWV0ZXIg
aXMgc2V0IGJ5IGRlZmF1bHQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaGJfbWF4
YnVyc3QoKQorSGVhcnRiZWF0cyBhcmUgbW9zdGx5IHVzZWQgdG8gdmVyaWZ5IGEgcGF0aC4gVGhl
aXIgbnVtYmVyIGNhbiBiZSBsaW1pdGVkLiBUaGUgZGVmYXVsdCBpcyA0LgorCisjIyMjIHVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KCkKK0luIHRoZSBzdGF0ZSBv
ZiBmYXN0IHJldHJhbnNtaXNzaW9uIHRoZSBudW1iZXIgb2YgcGFja2V0IGJ1cnN0cyBjYW4gYmUg
bGltaXRlZC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgNC4KKworCisjIyBIYW5kbGUgQ2h1bmtzCisj
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3BlZXJfY2h1bmtfb2goKQorSW4gb3JkZXIgdG8g
a2VlcCB0cmFjayBvZiB0aGUgcGVlcidzIGFkdmVydGlzZWQgcmVjZWl2ZXIgd2luZG93LCB0aGUg
c2VuZGVyIGNhbGN1bGF0ZXMgdGhlIHdpbmRvdyBieSBzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9m
IGRhdGEgc2VudC4gWWV0LCBzb21lIE9TcyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0
aGUgcmVhbCBzcGFjZSBuZWVkZWQgdG8gc3RvcmUgdGhlIGRhdGEuIFRoaXMgcGFyYW1ldGVyIHNl
dHMgdGhlIGFkZGl0aW9uYWwgYW1vdW50IHRvIGRlYml0IHRoZSBwZWVyJ3MgcmVjZWl2ZXIgd2lu
ZG93IHBlciBjaHVuayBzZW50LiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAyNTYsIHdoaWNoIGlzIHRo
ZSB2YWx1ZSBuZWVkZWQgYnkgRnJlZUJTRC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0
cF9tYXhfY2h1bmtzX29uX3F1ZXVlKCkKK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIG1heGltdW0g
bnVtYmVyIG9mIGNodW5rcyB0aGF0IGNhbiBiZSBxdWV1ZWQgcGVyIGFzc29jaWF0aW9uLiBUaGUg
ZGVmYXVsdCB2YWx1ZSBpcyA1MTIuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbWlu
X3NwbGl0X3BvaW50KCkKK1RCRAorVGhlIG1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNo
dW5rIGlzIDI5MDQgYnl0ZXMgYnkgZGVmYXVsdC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9jaHVua3NjYWxlKCkKK1RCRAorVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBz
Y2FsaW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEw
LgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21pbl9yZXNpZHVhbCgpCitUQkQKK1Ro
aXMgcGFyYW1ldGVyIGNvbmZpZ3VyZXMgdGhlIG1pbmltdW0gc2l6ZSBvZiB0aGUgcmVzaWR1YWwg
ZGF0YSBjaHVuayBpbiB0aGUgc2Vjb25kIHBhcnQgb2YgdGhlIHNwbGl0LiBUaGUgZGVmYXVsdCBp
cyAxNDUyLgorCisKKyMjIENhbGN1bGF0ZSBSVFQKK1RoZSBjYWxjdWxhdGlvbiBvZiB0aGUgcm91
bmQgdHJpcCB0aW1lIChSVFQpIGRlcGVuZHMgb24gc2V2ZXJhbCBwYXJhbWV0ZXJzLgorCisjIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3J0dHZhcl9idygpCitUQkQKK1NoaWZ0IGFtb3VudCBm
b3IgYncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjLiBEZWZhdWx0OiA0CisKKyMjIyMgdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfcnR0dmFyX3J0dCgpCitUQkQKK1NoaWZ0IGFtb3VudCBmb3IgcnR0IHNt
b290aGluZyBvbiBydHQgY2FsYy4gRGVmYXVsdDogNQorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX3J0dHZhcl9lcXJldCgpCitUQkQKK1doYXQgdG8gcmV0dXJuIHdoZW4gcnR0IGFuZCBi
dyBhcmUgdW5jaGFuZ2VkLiBEZWZhdWx0OiAwCisKKworIyMgSW5mbHVlbmNlIHRoZSBDb25nZXN0
aW9uIENvbnRyb2wKK1RoZSBjb25nZXN0aW9uIGNvbnRyb2wgc2hvdWxkIHByb3RlY3QgdGhlIG5l
dHdvcmsgYWdhaW5zdCBmYXN0IHNlbmRlcnMuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3Nj
dHBfZWNuX2VuYWJsZQorRXhwbGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIGFyZSB0dXJu
ZWQgb24gYnkgZGVmYXVsdC4KKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0
X2NjX21vZHVsZSgpCitUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBm
b3IgdGhlIGNvbmdlc3Rpb24gY29udHJvbC4gRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3Bl
Y2lmaWVkIGluIFtSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCku
CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdGlhbF9jd25kKCkKK1NldCB0aGUg
aW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzLiBUaGUgZGVmYXVsdCBpcyAzLgorCisj
IyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VzZV9kY2NjX2VjbigpCitUQkQKK0VuYWJsZSBm
b3IgUlRDQyBDQyBkYXRhY2VudGVyIEVDTi4gRGVmYXVsdDogMQorCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX3N0ZWFkeV9zdGVwKCkKK1RCRAorSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRh
a2VzIHRvIHRyeSBzdGVwIGRvd24gb2YgY3duZC4gRGVmYXVsdDogMjAKKworCisjIyBDb25maWd1
cmUgQVVUSCBhbmQgQURELUlQCitBbiBpbXBvcnRhbnQgZXh0ZW5zaW9uIG9mIFNDVFAgaXMgdGhl
IGR5bmFtaWMgYWRkcmVzcyByZWNvbmZpZ3VyYXRpb24gKHNlZSBbUkZDIDUwNjFdKGh0dHA6Ly90
b29scy5pZXRmLm9yZy9odG1sL3JmYzUwNjEpKSwgYWxzbyBrbm93biBhcyBBREQtSVAsIHdoaWNo
IGFsbG93cyB0aGUgY2hhbmdpbmcgb2YgYWRkcmVzc2VzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2Yg
YW4gYXNzb2NpYXRpb24uIEZvciB0aGlzIGZlYXR1cmUgdGhlIEFVVEggZXh0ZW5zaW9uIChzZWUg
W1JGQyA0ODk1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0ODk1KSkgaXMgbmVjZXNz
YXJ5LgorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2F1dG9fYXNjb25mKCkKK0lmIFND
VFAgQXV0by1BU0NPTkYgaXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5mb3JtZWQgYXV0b21hdGlj
YWxseSB3aGVuIGEgbmV3IGFkZHJlc3MKK2lzIGFkZGVkIG9yIHJlbW92ZWQuIFRoaXMgZmVhdHVy
ZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBf
bXVsdGlwbGVfYXNjb25mcygpCitCeSBkZWZhdWx0IHRoZSBzZW5kaW5nIG9mIG11bHRpcGxlIEFT
Q09ORnMgaXMgZGlzYWJsZWQuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYXV0aF9k
aXNhYmxlKCkKK1RoZSB1c2Ugb2YgQVVUSCwgd2hpY2ggaXMgbm9ybWFsbHkgdHVybmVkIG9uLCBj
YW4gYmUgZGlzYWJsZWQgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlciB0byAxLgorCisjIyMjIHVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2FzY29uZl9hdXRoX25vY2hrKCkKK0l0IGlzIGFsc28gcG9z
c2libGUgdG8gZGlzYWJsZSB0aGUgcmVxdWlyZW1lbnQgdG8gdXNlIEFVVEggaW4gY29uanVuY3Rp
b24gd2l0aCBBREQtSVAgYnkgc2V0dGluZyB0aGlzIHBhcmFtZXRlcgordG8gMS4KKworCisjIyBD
b25jdXJyZW50IE11bHRpcGF0aCBUcmFuc2ZlciAoQ01UKQorQSBwcm9taW5lbnQgZmVhdHVyZSBv
ZiBTQ1RQIGlzIHRoZSBwb3NzaWJpbGl0eSB0byB1c2Ugc2V2ZXJhbCBhZGRyZXNzZXMgZm9yIHRo
ZSBzYW1lIGFzc29jaWF0aW9uLiBPbmUgaXMgdGhlIHByaW1hcnkgcGF0aCwgYW5kIHRoZSBvdGhl
cnMgYXJlIG5lZWRlZCBpbiBjYXNlIG9mIGEgcGF0aCBmYWlsdXJlLiBVc2luZyBDTVQgdGhlIGRh
dGEgaXMgc2VudCBvbiBzZXZlcmFsIHBhdGhzIHRvIGVuaGFuY2UgdGhlIHRocm91Z2hwdXQuCisK
KyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfY210X29uX29mZigpCitUbyB0dXJuIENNVCBv
biwgdGhpcyBwYXJhbWV0ZXIgaGFzIHRvIGJlIHNldCB0byAxLgorCisjIyMjIHVzcnNjdHBfc3lz
Y3RsX3NldF9zY3RwX2NtdF91c2VfZGFjKCkKK1RvIHVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50
cyB3aXRoIENNVCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCisKKyMjIyMgdXNy
c2N0cF9zeXNjdGxfc2V0X3NjdHBfYnVmZmVyX3NwbGl0dGluZygpCitGb3IgQ01UIGl0IG1ha2Vz
IHNlbnNlIHRvIHNwbGl0IHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlciB0byBoYXZlIHNoYXJl
cyBmb3IgZWFjaCBwYXRoLiBCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRpbmcgaXMgdHVybmVkIG9m
Zi4KKworCisjIyBOZXR3b3JrIEFkZHJlc3MgVHJhbnNsYXRpb24gKE5BVCkKK1RvIGJlIGFibGUg
dG8gcGFzcyBOQVQgYm94ZXMsIHRoZSBib3hlcyBoYXZlIHRvIGhhbmRsZSBTQ1RQIHBhY2tldHMg
aW4gYSBzcGVjaWZpYyB3YXkuCisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbmF0X2Zy
aWVuZGx5KCkKK1NDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbi4gRGVmYXVsdDoxCisKKyMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkoKQorRW5h
YmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gRGVm
YXVsdDogMAorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX3VkcF90dW5uZWxpbmdfcG9y
dCgpCitTZXQgdGhlIFNDVFAvVURQIHR1bm5lbGluZyBwb3J0LiBEZWZhdWx0OiA5ODk5CisKKyMj
IFNDVFAgTW9iaWxpdHkKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbW9iaWxpdHlfYmFz
ZSgpCitUQkQKK0VuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkuIERlZmF1bHQ6IDAKKworCisjIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKCkKK1RCRAorRW5h
YmxlIFNDVFAgZmFzdCBoYW5kb2ZmLiBkZWZhdWx0OiAwCisKKworIyMgTWlzY2VsbGFuZW91cwor
IyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKCkKK0NhbGN1
bGF0aW5nIHRoZSBjaGVja3N1bSBmb3IgcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrIGlzIHR1cm5l
ZCBvZmYgYnkgZGVmYXVsdC4gVG8gdHVybiBpdCBvbiwgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDAu
CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZh
dWx0KCkKK1RoZSBwZWVyIGlzIG5vdGlmaWVkIGFib3V0IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcg
c3RyZWFtcyBpbiB0aGUgSU5JVCBvciBJTklULUFDSyBjaHVuay4gVGhlIGRlZmF1bHQgaXMgMTAu
CisKKyMjIyMgdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZG9fZHJhaW4oKQorRGV0ZXJtaW5lcyB3
aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxzLiBEZWZhdWx0OiAx
CQkKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9zdHJpY3RfZGF0YV9vcmRlcigpCitU
QkQKK0VuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wgaW5zaWRl
IGRhdGEuIERlZmF1bHQ6IDAKKworIyMjIyB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWZhdWx0
X3NzX21vZHVsZSgpCitTZXQgdGhlIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlLiBJ
bXBsZW1lbnRlZCBtb2R1bGVzIGFyZToKKyogU0NUUF9TU19ERUZBVUxUCisqIFNDVFBfU1NfUk9V
TkRfUk9CSU4KKyogU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQKKyogU0NUUF9TU19QUklPUklU
WQorKiBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgKKyogU0NUUF9TU19GSVJTVF9DT01FCisKKyMjIyMg
dXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUoKQorVEJECitE
ZWZhdWx0IGZyYWdtZW50IGludGVybGVhdmUgbGV2ZWwuIERlZmF1bHQ6IDEKKworIyMjIyB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoKQorVEJECitFbmFibGUgU0NUUCBibGFja2hv
bGluZy4gRGVmYXVsdDogMAorCisjIyMjIHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2xvZ2dpbmdf
bGV2ZWwoKQorU2V0IHRoZSBsb2dnaW5nIGxldmVsLiBUaGUgZGVmYXVsdCBpcyAwLgorCisjIyMj
IHVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKCkKK1R1cm4gZGVidWcgb3V0cHV0IG9u
IG9yIG9mZi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0YWluIGRlYnVnIG91dHB1
dCwgYFNDVFBfREVCVUdgIGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxlIGZsYWcuCisKKworIyMj
IHN5c2N0bCB2YXJpYWJsZXMgc3VwcG9ydGVkIGJ5IHVzcnNjdHAKKworUGFyYW1ldGVyIHwgTWVh
bmluZyB8IERlZmF1bHQgVmFsdWUKKy0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLS0tLS0t
CitzY3RwX3NlbmRzcGFjZSB8IFNlbmQgYnVmZmVyIHNwYWNlIHwgMTg2NDEzNQorc2N0cF9yZWN2
c3BhY2UgfCBSZWNlaXZlIGJ1ZmZlciBzcGFjZSB8IDE4NjQxMzUKK3NjdHBfaGFzaHRibHNpemUg
fCBUdW5hYmxlIGZvciBUQ0IgaGFzaCB0YWJsZSBzaXplcyB8IDEwMjQKK3NjdHBfcGNidGJsc2l6
ZSB8IFR1bmFibGUgZm9yIFBDQiBoYXNoIHRhYmxlIHNpemVzIHwgMjU2CitzY3RwX3N5c3RlbV9m
cmVlX3Jlc2NfbGltaXQgfCBDYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0gfCAxMDAwCitz
Y3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0IHwgQ2FzaGVkIHJlc291cmNlcyBpbiBhbiBhc3NvY2lh
dGlvbiB8IDEwCitzY3RwX3J0b19tYXhfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJUT19t
YXggfCA2MDAwMG1zCitzY3RwX3J0b19taW5fZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUgZm9yIFJU
T19taW4gfCAxMDAwbXMKK3NjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCB8IERlZmF1bHQgdmFsdWUg
Zm9yIFJUT19pbml0aWFsIHwgMzAwMG1zCitzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0IHwgRGVm
YXVsdCB2YWx1ZSBmb3IgdGhlIG1heGltdW0gUlRPIGZvciBzZW5kaW5nIGFuIElOSVQgfCA2MDAw
MG1zCitzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQgfCBWYWxpZCBjb29raWUgbGlmZSB0
aW1lIHwgNjAwMDBtcworc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCB8IE1heGltdW0gbnVtYmVy
IG9mIElOSVQgcmV0cmFuc21pc3Npb25zIHwgOAorc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQg
fCBNYXhpbXVtIG51bWJlciBvZiBmYWlsZWQgcmV0cmFuc21pc3Npb25zIGJlZm9yZSB0aGUgYXNz
b2NpYXRpb24gaXMgYWJvcnRlZCB8IDEwCitzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0IHwgTWF4
aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJhbnNtaXNzaW9ucyBiZWZvcmUgYSBwYXRoIGZhaWxz
IHwgNQorc2N0cF9lY25fZW5hYmxlIHwgRW5hYmxpbmcgZXhwbGljaXQgY29uZ2VzdGlvbiBub3Rp
ZmljYXRpb25zIHwgMQorc2N0cF9zdHJpY3Rfc2Fja3MgfCBDb250cm9sIHRoZSBjb2hlcmVuY2Ug
b2YgU0FDS3MgfCAxCitzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQgfCBEZWZhdWx0IGRl
bGF5ZWQgU0FDSyB0aW1lciB8IDIwMG1zCitzY3RwX3NhY2tfZnJlcV9kZWZhdWx0IHwgRGVmYXVs
dCBTQUNLIGZyZXF1ZW5jeSB8IDIKK3NjdHBfbnJfc2Fja19vbl9vZmYgfCBUdXJuIG5vbi1yZW5l
Z2FibGUgU0FDS3Mgb24gb3Igb2ZmIHwgMAorc2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSB8
IEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJpdCB8IDAKK3NjdHBfbm9f
Y3N1bV9vbl9sb29wYmFjayB8IEVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2YgdGhlIGNoZWNrc3Vt
IG9uIHBhY2tldHMgc2VudCBvbiBsb29wYmFjayB8IDEKK3NjdHBfcGVlcl9jaHVua19vaCB8IEFt
b3VudCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBzZW50IHwgMjU2CitzY3RwX21heF9i
dXJzdF9kZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHwgMAor
c2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCB8IFVzZSBtYXggYnVyc3QgYmFzZWQgb24gdGhl
IHNpemUgb2YgdGhlIGNvbmdlc3Rpb24gd2luZG93IHwgMQorc2N0cF9oYl9tYXhidXJzdCB8IENv
bmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0IHwgNAorc2N0cF9tYXhfY2h1bmtzX29uX3F1
ZXVlIHwgRGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jIHwgNTEyCitzY3RwX21p
bl9zcGxpdF9wb2ludCB8IE1pbmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIHwgMjkw
NAorc2N0cF9jaHVua3NjYWxlIHwgVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1
bmtzIGFuZCBtZXNzYWdlcyB8IDEwCitzY3RwX21idWZfdGhyZXNob2xkX2NvdW50IHwgTWF4aW11
bSBudW1iZXIgb2Ygc21hbGwgbWJ1ZnMgaW4gYSBjaGFpbiB8IDUKK3NjdHBfaGVhcnRiZWF0X2lu
dGVydmFsX2RlZmF1bHQgfCBEZWFmdWx0IHRpbWUgYmV0d2VlbiB0d28gSGVhcnRiZWF0cyB8IDMw
MDAwbXMKK3NjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQgfCBEZWZhdWx0IFBNVFUgcmFpc2Ug
dGltZXIgfCA2MDBzZWNzCitzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCB8IERlZmF1
bHQgc2h1dGRvd24gZ3VhcmQgdGltZXIgfCAxODBzZWNzCitzY3RwX3NlY3JldF9saWZldGltZV9k
ZWZhdWx0IHwgRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgfCAzNjAwc2Vjcworc2N0cF9hZGRfbW9y
ZV90aHJlc2hvbGQgfCBUaHJlc2hvbGQgd2hlbiBtb3JlIHNwYWNlIHNob3VsZCBiZSBhZGRlZCB0
byBhIHNvY2tldCBzZW5kIGJ1ZmZlciB8IDE0NTIKK3NjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19k
ZWZhdWx0IHwgRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyB8IDEwCitzY3RwX2Nt
dF9vbl9vZmYgfCBUdXJuIENNVCBvbiBvciBvZmYuIHwgMAorc2N0cF9jbXRfdXNlX2RhYyB8IFVz
ZSBkZWxheWVkIGFja25vd2xlZGdtZW50IGZvciBDTVQgfCAwCitzY3RwX2ZyX21heF9idXJzdF9k
ZWZhdWx0IHwgRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHdoZW4gZmFzdCBy
ZXRyYW5zbWl0dGluZyB8IDQKK3NjdHBfYXV0b19hc2NvbmYgfCBFbmFibGUgU0NUUCBBdXRvLUFT
Q09ORiB8IDEKK3NjdHBfbXVsdGlwbGVfYXNjb25mcyB8IEVuYWJsZSBTQ1RQIE11bGlwbGUtQVND
T05GcyB8IDAKK3NjdHBfYXNjb25mX2F1dGhfbm9jaGsgfCBEaXNhYmxlIFNDVFAgQVNDT05GIEFV
VEggcmVxdWlyZW1lbnQgfCAwCitzY3RwX2F1dGhfZGlzYWJsZSB8IERpc2FibGUgU0NUUCBBVVRI
IGZ1bmN0aW9uIHwgMAorc2N0cF9uYXRfZnJpZW5kbHkgfCBTQ1RQIE5BVCBmcmllbmRseSBvcGVy
YXRpb24gfCAxCitzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5IHwgRW5hYmxlIHNlbmRp
bmcgb2YgdGhlIG5hdC1mcmllbmRseSBTQ1RQIG9wdGlvbiBvbiBJTklUcy4gfCAwCitzY3RwX3Vk
cF90dW5uZWxpbmdfcG9ydCB8IFNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQgfCA5ODk5
CitzY3RwX2RvX2RyYWluIHwgRGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQg
dG8gdGhlIGRyYWluIGNhbGxzIHwgMQorc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCB8IFdoZW4gb25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0IHwgMAorc2N0cF9zdHJpY3RfZGF0
YV9vcmRlciB8IEVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNvbnRyb2wg
aW5zaWRlIGRhdGEgfCAwCitzY3RwX21pbl9yZXNpZHVhbCB8IE1pbmltdW0gcmVzaWR1YWwgZGF0
YSBjaHVuayBpbiBzZWNvbmQgcGFydCBvZiBzcGxpdCB8IDE0NTIKK3NjdHBfbWF4X3JldHJhbl9j
aHVuayB8IE1heGltdW0gdGltZXMgYW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRl
ZCBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGFib3J0cyB8IDMwCitzY3RwX2RlZmF1bHRfY2NfbW9k
dWxlIHwgRGVmYXVsdCBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlIHwgMAorc2N0cF9kZWZhdWx0
X3NzX21vZHVsZSB8IERlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlIHwgMAorc2N0cF9k
ZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSB8IERlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZl
bCB8IDEKK3NjdHBfbW9iaWxpdHlfYmFzZSB8IEVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkgfCAw
CitzY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmIHwgRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmIHwg
MAorc2N0cF9MMl9hYmNfdmFyaWFibGUgfCBTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sg
KEwpIHwgMQorc2N0cF92dGFnX3RpbWVfd2FpdCB8IFZ0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlz
YWJsZXMgaXQuIHwgNjBzZWNzCitzY3RwX2JsYWNraG9sZSB8IEVuYWJsZSBTQ1RQIGJsYWNraG9s
aW5nIHwgMAorc2N0cF9wYXRoX3BmX3RocmVzaG9sZCB8IERlZmF1bHQgcG90ZW50aWFsbHkgZmFp
bGVkIHRocmVzaG9sZCB8IDY1NTM1CitzY3RwX3J0dHZhcl9idyB8IFNoaWZ0IGFtb3VudCBmb3Ig
Yncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNAorc2N0cF9ydHR2YXJfcnR0IHwgU2hpZnQgYW1v
dW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIHwgNQorc2N0cF9ydHR2YXJfZXFyZXQg
IHwgV2hhdCB0byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3IGFyZSB1bmNoYW5nZWQgfCAwCitzY3Rw
X3N0ZWFkeV9zdGVwIHwgSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBzdGVwIGRv
d24gb2YgY3duZCB8IDIwCitzY3RwX3VzZV9kY2NjX2VjbiB8IEVuYWJsZSBmb3IgUlRDQyBDQyBk
YXRhY2VudGVyIEVDTiB8IDEKK3NjdHBfYnVmZmVyX3NwbGl0dGluZyB8IEVuYWJsZSBzZW5kL3Jl
Y2VpdmUgYnVmZmVyIHNwbGl0dGluZyB8IDAKK3NjdHBfaW5pdGlhbF9jd25kIHwgSW5pdGlhbCBj
b25nZXN0aW9uIHdpbmRvdyBpbiBNVFVzIHwgMworc2N0cF9sb2dnaW5nX2xldmVsIHwgTG9nZ2lu
ZyBsZXZlbCB8IDAKK3NjdHBfZGVidWdfb24gfCBUdXJucyBkZWJ1ZyBvdXRwdXQgb24gb3Igb2Zm
LiB8IDAKKworIyMgRXhhbXBsZXMKKworU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3Vz
cnNjdHAvdHJlZS9tYXN0ZXIvcHJvZ3JhbXMKKworCisjIyBSZWZlcmVuY2VzCisKKyMjIyMgU0NU
UAorUi4gU3Rld2FydDo8L2JyPgorYFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2Nv
bGAuPC9icj4KK1tSRkMgNDk2MF0oaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDk2MCks
IFNlcHRlbWJlciAyMDA3LgorCisjIyMjIGF1dGgKK00uIFTDvHhlbiwgUi4gU3Rld2FydCwgUC4g
TGVpLCBhbmQgRS4gUmVzY29ybGE6PC9icj4KK2BBdXRoZW50aWNhdGVkIENodW5rcyBmb3IgdGhl
IFN0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUClgLjwvYnI+CitbUkZD
IDQ4OTVdKGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQ4OTUpLCBBdWd1c3QgMjAwNy4K
KworIyMjIyBhZGRpcAorUi4gU3Rld2FydCwgUS4gWGllLCBNLiBUw7x4ZW4sIFMuIE1hcnV5YW1h
LCBhbmQgTS4gS296dWthOjwvYnI+CitgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3Rv
Y29sIChTQ1RQKSBEeW5hbWljIEFkZHJlc3MgUmVjb25maWd1cmF0aW9uYC48L2JyPgorW1JGQyA1
MDYxXShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM1MDYxKSwgU2VwdGVtYmVyIDIwMDcu
CisKKyMjIyMgc29ja2V0QVBJCitSLiBTdGV3YXJ0LCBNLiBUw7x4ZW4sIEsuIFBvb24sIGFuZCBW
LiBZYXNldmljaDo8L2JyPgorYFNvY2tldHMgQVBJIEV4dGVuc2lvbnMgZm9yIHRoZSBTdHJlYW0g
Q29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApYC48L2JyPgorW1JGQyA2NDU4XSho
dHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NDU4KSwgRGV6ZW1iZXIgMjAxMS4KKworIyMj
IyBzdHJlYW1SZXNldAorUi4gU3Rld2FydCwgTS4gVMO8eGVuLCBhbmQgUC4gTGVpOjwvYnI+Citg
U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25m
aWd1cmF0aW9uYC48L2JyPgorW1JGQyA2NTI1XShodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9y
ZmM2NTI1KSwgRmVicnVhcnkgMjAxMi4KKworIyMjIyB1ZHBlbmNhcHMKK00uIFTDvHhlbiBhbmQg
Ui4gU3Rld2FydDwvYnI+CitgVURQIEVuY2Fwc3VsYXRpb24gb2YgU3RyZWFtIENvbnRyb2wgVHJh
bnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBQYWNrZXRzIGZvciBFbmQtSG9zdCB0byBFbmQtSG9z
dCBDb21tdW5pY2F0aW9uYDwvYnI+CitbUkZDIDY5NTFdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcv
aHRtbC9yZmM2OTUxKSwgTWF5IDIwMTMuCisKKyMjIyMgc2Fjay1pbW0KK00uIFTDvHhlbiwgSS4g
UsO8bmdlbGVyLCBhbmQgUi4gU3Rld2FydDo8L2JyPgorYFNBQ0stSU1NRURJQVRFTFkgRXh0ZW5z
aW9uIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sYDwvYnI+Citb
UkZDIDcwNTNdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MDUzKSwgTm92ZW1iZXIg
MjAxMy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL01hbnVhbC50ZXggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9NYW51YWwu
dGV4CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjdlYzFl
MWY1M2IzMWU0ZWQxZDdkYjk2ODU3MjdjY2M5MWM1ZDBlM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L01hbnVhbC50ZXgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvTWFudWFsLnRleApAQCAtMCwwICsxLDEzMzMgQEAK
KyUKKyUgQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgSXJlbmUgUnVlbmdlbGVyCislIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE1IE1pY2hhZWwgVHVleGVuCislCislIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CislCislIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorJSBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyUgYXJlIG1ldDoKKyUgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyUg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorJSAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorJSAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCislICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CislIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCislICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorJSAgICB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyUKKyUgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyUgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCislIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCislIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCislIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCislIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCislIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorJSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorJSBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCislIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyUgU1VDSCBEQU1B
R0UuCislCitcZG9jdW1lbnRjbGFzc1thNHBhcGVyXXthcnRpY2xlfQorJQorXHVzZXBhY2thZ2V7
bG9uZ3RhYmxlfQorJQorXHRpdGxle1NvY2tldCBBUEkgZm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBJ
bXBsZW1lbnRhdGlvbiAodXNyc2N0cCl9CitcYXV0aG9ye0kuflJcInVuZ2VsZXIlCisgICAgICAg
IFx0aGFua3N7TVwidW5zdGVyIFVuaXZlcnNpdHkgb2YgQXBwbGllZCBTY2llbmNlcywKKyAgICAg
ICAgICAgICAgICBEZXBhcnRtZW50IG9mIEVsZWN0cmljYWwgRW5naW5lZXJpbmcKKyAgICAgICAg
ICAgICAgICBhbmQgQ29tcHV0ZXIgU2NpZW5jZSwKKyAgICAgICAgICAgICAgICBTdGVnZXJ3YWxk
c3RyLn4zOSwKKyAgICAgICAgICAgICAgICBELTQ4NTY1IFN0ZWluZnVydCwKKyAgICAgICAgICAg
ICAgICBHZXJtYW55LAorICAgICAgICAgICAgICAgIFx0ZXh0dHR7aS5ydWVuZ2VsZXJAZmgtbXVl
bnN0ZXIuZGV9Ln0KKyAgICAgICAgXGFuZAorICAgICAgICBNLn5UXCJ1eGVuJQorICAgICAgICBc
dGhhbmtze01cInVuc3RlciBVbml2ZXJzaXR5IG9mIEFwcGxpZWQgU2NpZW5jZXMsCisgICAgICAg
ICAgICAgICAgRGVwYXJ0bWVudCBvZiBFbGVjdHJpY2FsIEVuZ2luZWVyaW5nCisgICAgICAgICAg
ICAgICAgYW5kIENvbXB1dGVyIFNjaWVuY2UsCisgICAgICAgICAgICAgICAgU3RlZ2Vyd2FsZHN0
ci5+MzksCisgICAgICAgICAgICAgICAgRC00ODU2NSBTdGVpbmZ1cnQsCisgICAgICAgICAgICAg
ICAgR2VybWFueSwKKyAgICAgICAgICAgICAgICBcdGV4dHR0e3R1ZXhlbkBmaC1tdWVuc3Rlci5k
ZX0ufQorfQorJQorXGJlZ2lue2RvY3VtZW50fQorXHNldGNvdW50ZXJ7c2VjbnVtZGVwdGh9ezR9
Citcc2V0Y291bnRlcnt0b2NkZXB0aH17NH0KK1xtYWtldGl0bGUKK1x0YWJsZW9mY29udGVudHMK
KworXHNlY3Rpb257SW50cm9kdWN0aW9ufQorSW4gdGhpcyBtYW51YWwgdGhlIHNvY2tldCBBUEkg
Zm9yIHRoZSBTQ1RQIFVzZXItbGFuZCBpbXBsZW1lbnRhdGlvbiB3aWxsIGJlIGRlc2NyaWJlZC4g
CitJdCBpcyBiYXNlZCBvbiBSRkMgNjQ1OH5cY2l0ZXtzb2NrZXRBUEl9LiBUaGUgbWFpbiBmb2N1
cyBvZiB0aGlzIGRvY3VtZW50IGlzIG9uIHBvaW50aW5nIG91dAorIHRoZSBkaWZmZXJlbmNlcyB0
byB0aGUgU0NUUCBTb2NrZXRzIEFQSS4gRm9yIGFsbCBhc3BlY3RzIG9mIHRoZSBzb2NrZXRzIEFQ
SSB0aGF0IGFyZSBub3QKKyBtZW50aW9uZWQgaW4gdGhpcyBkb2N1bWVudCwgcGxlYXNlIHJlZmVy
IHRvIFJGQ342NDU4LiBRdWVzdGlvbnMgYWJvdXQgU0NUUCBjYW4gaG9wZWZ1bGx5IGJlCisgYW5z
d2VyZWQgYnkgUkZDfjQ5NjB+XGNpdGV7U0NUUH0uCisgCitcc2VjdGlvbntHZXR0aW5nIFN0YXJ0
ZWR9CitUaGUgVXNlci1sYW5kIHN0YWNrIGhhcyBiZWVuIHRlc3RlZCBvbiBGcmVlQlNEIDEwLjAs
IFVidW50dSAxMS4xMCwgV2luZG93cyA3LCBNYWMgT1MgWCAxMC42LCAKK2FuZCBNQUMgT1MgWCAx
MC43LgorVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgVXNlci1sYW5kIHN0YWNrIGlzIHByb3Zp
ZGVkIG9uIFx0ZXh0aXR7aHR0cDovL3NjdHAuZmgtbXVlbnN0ZXIuZGUvc2N0cC11c2VyLWxhbmQt
c3RhY2suaHRtbH0uCitEb3dubG9hZCB0aGUgdGFyYmFsbCBhbmQgdW50YXIgaXQgaW4gYSBmb2xk
ZXIgb2YgeW91ciBjaG9pY2UuIAorVGhlIHRhcmJhbGwgY29udGFpbnMgYWxsIHRoZSBzb3VyY2Vz
IHRvIGJ1aWxkIHRoZSBsaWJ1c3JzY3RwLCB3aGljaCBoYXMgdG8gYmUgbGlua2VkIHRvIHRoZSBv
YmplY3QgZmlsZSBvZiBhbiAKK2V4YW1wbGUgcHJvZ3JhbS4gSW4gYWRkaXRpb24gdGhlcmUgYXJl
IHR3byBhcHBsaWNhdGlvbnMgaW4gdGhlIGZvbGRlciBcdGV4dGl0e3Byb2dyYW1zfSB0aGF0IGNh
biBiZSBidWlsdCBhbmQgcnVuLgorIAorXHN1YnNlY3Rpb257QnVpbGRpbmcgdGhlIExpYnJhcnkg
YW5kIHRoZSBBcHBsaWNhdGlvbnN9Citcc3Vic3Vic2VjdGlvbntVbml4LWxpa2UgT3BlcmF0aW5n
IFN5c3RlbXN9CitJbiB0aGUgZm9sZGVyIFx0ZXh0aXR7dXNyc2N0cH0gdHlwZQorXGJlZ2lue3Zl
cmJhdGltfQorLi9ib290c3RyYXAKKy4vY29uZmlndXJlCittYWtlCitcZW5ke3ZlcmJhdGltfQor
Tm93LCB0aGUgbGlicmFyeSBcdGV4dGl0e2xpYnVzcnNjdHAubGF9IGhhcyBiZWVuIGJ1aWx0IGlu
IHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHt1c3JzY3RwbGlifSwgYW5kIHRoZSBleGFtcGxlIAor
cHJvZ3JhbXMgYXJlIHJlYWR5IHRvIHJ1biBmcm9tIHRoZSBzdWJkaXJlY3RvcnkgXHRleHRpdHtw
cm9ncmFtc30uCisKK0lmIHlvdSBoYXZlIHJvb3QgcHJpdmlsZWdlcyBvciBhcmUgaW4gdGhlIHN1
ZG9lciBncm91cCwgeW91IGNhbiBpbnN0YWxsIHRoZSBsaWJyYXJ5IGluIFx0ZXh0aXR7L3Vzci9s
b2NhbC9saWJ9IAorYW5kIGNvcHkgdGhlIGhlYWRlciBmaWxlIHRvIFx0ZXh0aXR7L3Vzci9pbmNs
dWRlfSB3aXRoIHRoZSBjb21tYW5kCitcYmVnaW57dmVyYmF0aW19CitzdWRvIG1ha2UgaW5zdGFs
bAorXGVuZHt2ZXJiYXRpbX0KKworXHN1YnN1YnNlY3Rpb257V2luZG93c30KK09uIFdpbmRvd3Mg
eW91IG5lZWQgYSBjb21waWxlciBsaWtlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLiBZb3UgY2Fu
IGJ1aWxkIHRoZSBsaWJyYXJ5IGFuZCB0aGUKK2V4YW1wbGUgcHJvZ3JhbXMgd2l0aCB0aGUgY29t
bWFuZCBsaW5lIHRvb2wgb2YgdGhlIGNvbXBpbGVyIGJ5IHR5cGluZworXGJlZ2lue3ZlcmJhdGlt
fQorbm1ha2UgLWYgTWFrZWZpbGUubm1ha2UKK1xlbmR7dmVyYmF0aW19CitpbiB0aGUgZGlyZWN0
b3J5IFx0ZXh0aXR7dXNyc2N0cH0uCisKK1xzdWJzZWN0aW9ue1J1bm5pbmcgdGhlIFRlc3QgUHJv
Z3JhbXN9CitUaGVyZSBhcmUgdHdvIHRlc3QgcHJvZ3JhbXMgaW5jbHVkZWQsIGEgZGlzY2FyZCBz
ZXJ2ZXIgYW5kIGEgY2xpZW50LiBZb3UgY2FuIHJ1biBib3RoIHRvIHNlbmQgZGF0YSBmcm9tIHRo
ZQorY2xpZW50IHRvIHRoZSBzZXJ2ZXIuIFRoZSBjbGllbnQgcmVhZHMgZGF0YSBmcm9tIHN0ZGlu
IGFuZCBzZW5kcyB0aGVtIHRvIHRoZSBzZXJ2ZXIsIHdoaWNoIHByaW50cyB0aGUgbWVzc2FnZQor
aW4gdGhlIHRlcm1pbmFsIGFuZCBkaXNjYXJkcyBpdC4gVGhlIHNvdXJjZXMgb2YgdGhlIHNlcnZl
ciBhcmUgYWxzbyBwcm92aWRlZCBpbiBTZWN0aW9uflxyZWZ7c2VydmVyfSBhbmQgdGhvc2UKK29m
IHRoZSBjbGllbnQgaW4gU2VjdGlvbn5ccmVme2NsaWVudH0uCisKK1xzdWJzdWJzZWN0aW9ue1Vz
aW5nIFVEUCBFbmNhcHN1bGF0aW9ufQorQm90aCBwcm9ncmFtcyBjYW4gZWl0aGVyIHNlbmQgZGF0
YSBvdmVyIFNDVFAgZGlyZWN0bHkgb3IgdXNlIFVEUCBlbmNhcHN1bGF0aW9uLCB0aHVzIGVuY2Fw
c3VsYXRpbmcgdGhlCitTQ1RQIHBhY2tldCBpbiBhIFVEUCBkYXRhZ3JhbS4gVGhlIGZpcnN0IG1v
ZGUgd29ya3Mgb24gbG9vcGJhY2sgb3IgaW4gYSBwcm90ZWN0ZWQgc2V0dXAgd2l0aG91dCBhbnkg
CitOQVQgYm94ZXMgaW52b2x2ZWQuIEluIGFsbCBvdGhlciBjYXNlcyBpdCBpcyBiZXR0ZXIgdG8g
dXNlIFVEUCBlbmNhcHN1bGF0aW9uLgorCitUaGUgdXNhZ2Ugb2YgdGhlIGRpc2NhcmRcX3NlcnZl
ciBpcworXGJlZ2lue3ZlcmJhdGltfQorZGlzY2FyZF9zZXJ2ZXIgW2xvY2FsX2VuY2Fwc19wb3J0
IHJlbW90ZV9lbmNhcHNfcG9ydF0KK1xlbmR7dmVyYmF0aW19CitGb3IgVURQIGVuY2Fwc3VsYXRp
b24gdGhlIHBvcnRzIGhhdmUgdG8gYmUgc3BlY2lmaWVkLiBUaGUgbG9jYWwgYW5kIHJlbW90ZSBl
bmNhcHN1bGF0aW9uIHBvcnRzIGNhbiBiZSBhcmJpdHJhcmlseQorc2V0LgorRm9yIGV4YW1wbGUs
IHlvdSBjYW4gY2FsbAorXGJlZ2lue3ZlcmJhdGltfQorLi9kaXNjYXJkX3NlcnZlciAxMTExMSAy
MjIyMgorXGVuZHt2ZXJiYXRpbX0KK29uIGEgVW5peC1saWtlIE9TIGFuZAorXGJlZ2lue3ZlcmJh
dGltfQorZGlzY2FyZF9zZXJ2ZXIuZXhlIDExMTExIDIyMjIyCitcZW5ke3ZlcmJhdGltfQorb24g
V2luZG93cy4KKworVGhlIGNsaWVudCBuZWVkcyB0d28gYWRkaXRpb25hbCBwYXJhbWV0ZXJzLCB0
aGUgc2VydmVyJ3MgYWRkcmVzcyBhbmQgaXRzIHBvcnQuCitJdHMgdXNhZ2UgaXMKK1xiZWdpbnt2
ZXJiYXRpbX0KK2NsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBbbG9jYWxfcG9ydCBsb2Nh
bF9lbmNhcHNfcG9ydCByZW1vdGVfZW5jYXBzX3BvcnRdCitcZW5ke3ZlcmJhdGltfQorVGhlIHJl
bW90ZSBhZGRyZXNzIGlzIHRoZSBzZXJ2ZXIncyBhZGRyZXNzLiBJZiBjbGllbnQgYW5kIHNlcnZl
ciBhcmUgc3RhcnRlZCBvbiB0aGUgc2FtZSBtYWNoaW5lLAordGhlIGxvb3BiYWNrIGFkZHJlc3Mg
MTI3LjAuMC4xIGNhbiBiZSB1c2VkIGZvciBVbml4LWxpa2UgT1NzIGFuZCB0aGUgbG9jYWwgYWRk
cmVzcyBvbiBXaW5kb3dzLgorVGhlIGRpc2NhcmQgcG9ydCBpcyA5LCB0aHVzIDkgaGFzIHRvIGJl
IHRha2VuIGFzIHJlbW90ZSBwb3J0LiBUaGUgZW5jYXBzdWxhdGlvbiBwb3J0cyBoYXZlIHRvCitt
YXRjaCB0aG9zZSBvZiB0aGUgc2VydmVyLCBpLmUuIHRoZSBzZXJ2ZXIncyBsb2NhbFxfZW5jYXBz
XF9wb3J0IGlzIHRoZSBjbGllbnQncworcmVtb3RlXF9lbmNhcHNcX3BvcnQgYW5kIHZpY2UgdmVy
c2EuIFRodXMsIHRoZSBjbGllbnQgY2FuIGJlIHN0YXJ0ZWQgd2l0aAorXGJlZ2lue3ZlcmJhdGlt
fQorLi9jbGllbnQgMTI3LjAuMC4xIDkgMCAyMjIyMiAxMTExMQorXGVuZHt2ZXJiYXRpbX0KK29u
IGEgVW5peC1saWtlIE9TIGFuZAorXGJlZ2lue3ZlcmJhdGltfQorY2xpZW50LmV4ZSAxOTIuMTY4
LjAuMSA5IDAgMjIyMjIgMTExMTEKK1xlbmR7dmVyYmF0aW19CitvbiBXaW5kb3dzIHByb3ZpZGVk
IHlvdXIgbG9jYWwgSVAgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMS4KKworXHN1YnN1YnNlY3Rpb257
U2VuZGluZyBvdmVyIFNDVFB9CitUbyBzZW5kIGRhdGEgb3ZlciBTQ1RQIGRpcmVjdGx5IHlvdSBt
aWdodCBuZWVkIHJvb3QgcHJpdmlsZWdlcyBiZWNhdXNlIHJhdyBzb2NrZXRzIGFyZSB1c2VkLgor
VGh1cyBpbnN0ZWFkIG9mIHNwZWNpZnlpbmcgdGhlIGVuY2Fwc3VsYXRpb24gcG9ydHMgeW91IGhh
dmUgdG8gc3RhcnQgdGhlIHByb2dyYW1zIHByZXBlbmRpbmcgCitcdGV4dHR0e3N1ZG99IG9yIGlu
IGNhc2Ugb2YgV2luZG93cyBzdGFydCB0aGUgcHJvZ3JhbSBmcm9tIGFuIGFkbWluaXN0cmF0b3Ig
Y29uc29sZS4KKworXHN1YnN1YnNlY3Rpb257VXNpbmcgdGhlIENhbGxiYWNrIEFQSX0KK0luc3Rl
YWQgb2YgYXNraW5nIGNvbnN0YW50bHkgZm9yIG5ldyBkYXRhLCBhIGNhbGxiYWNrIEFQSSBjYW4g
YmUgdXNlZCB0aGF0IGlzIHRyaWdnZXJlZCBieSAKK1NDVFAuIEEgY2FsbGJhY2sgZnVuY3Rpb24g
aGFzIHRvIGJlIHJlZ2lzdGVyZWQgdGhhdCB3aWxsIGJlIGNhbGxlZCB3aGVuZXZlciBkYXRhIGlz
IHJlYWR5IHRvCitiZSBkZWxpdmVyZWQgdG8gdGhlIGFwcGxpY2F0aW9uLgorCitUaGUgZGlzY2Fy
ZFxfc2VydmVyIGhhcyBhIGZsYWcgdG8gc3dpdGNoIGJldHdlZW4gdGhlIHR3byBtb2RpLiBJZiAg
dXNlXF9jYiBpcyBzZXQgdG8gMSwgdGhlCitjYWxsYmFjayBBUEkgd2lsbCBiZSB1c2VkLiBUbyBj
aGFuZ2UgdGhlIHNldHRpbmcsIGp1c3Qgc2V0IHRoZSBmbGFnIGFuZCBjb21waWxlIHRoZSBwcm9n
cmFtIGFnYWluLgorCisKKworCitcc2VjdGlvbntCYXNpYyBPcGVyYXRpb25zfQorQWxsIHN5c3Rl
bSBjYWxscyBzdGFydCB3aXRoIHRoZSBwcmVmaXggXHRleHRpdHt1c3JzY3RwXF99IHRvIGRpc3Rp
bmd1aXNoIHRoZW0gZnJvbSB0aGUga2VybmVsIHZhcmlhbnRzLiAKK1NvbWUgb2YgdGhlbSBhcmUg
Y2hhbmdlZCB0byBhY2NvdW50IGZvciB0aGUgZGlmZmVyZW50IGRlbWFuZHMgaW4gdGhlIHVzZXJs
YW5kIGVudmlyb25tZW50LiAKKworXHN1YnNlY3Rpb257RGlmZmVyZW5jZXMgdG8gUkZDIDY0NTh9
Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9pbml0KCl9CitFdmVyeSBhcHBsaWNhdGlvbiBoYXMg
dG8gc3RhcnQgd2l0aCBcdGV4dGl0e3VzcnNjdHBcX2luaXQoKX0uIFRoaXMgZnVuY3Rpb24gY2Fs
bHMgXHRleHRpdHtzY3RwXF9pbml0KCl9IGFuZCByZXNlcnZlcwordGhlIG1lbW9yeSBuZWNlc3Nh
cnkgdG8gYWRtaW5pc3RlciB0aGUgZGF0YSB0cmFuc2Zlci4KK1RoZSBmdW5jdGlvbiBwcm90b3R5
cGUgaXMgCitcYmVnaW57dmVyYmF0aW19Cit2b2lkCit1c3JzY3RwX2luaXQodWludDE2X3QgdWRw
X3BvcnQpCitcZW5ke3ZlcmJhdGltfQorQXMgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byBz
ZW5kIGRhdGEgZGlyZWN0bHkgb3ZlciBTQ1RQIGJlY2F1c2Ugbm90IGFsbCBOQVQgYm94ZXMgY2Fu
Citwcm9jZXNzIFNDVFAgcGFja2V0cywgdGhlIGRhdGEgY2FuIGJlIHNlbnQgb3ZlciBVRFAuIFRv
IGVuY2Fwc3VsYXRlIFNDVFAgaW50byBVRFAKK2EgVURQIHBvcnQgaGFzIHRvIGJlIHNwZWNpZmll
ZCwgdG8gd2hpY2ggdGhlIGRhdGFncmFtcyBjYW4gYmUgc2VudC4gVGhpcyBsb2NhbCBVRFAgcG9y
dCAgaXMgc2V0IAord2l0aCB0aGUgcGFyYW1ldGVyIFx0ZXh0dHR7dWRwXF9wb3J0fS4gVGhlIGRl
ZmF1bHQgdmFsdWUgaXMgOTg5OSwgdGhlIHN0YW5kYXJkIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQu
CitJZiBVRFAgZW5jYXBzdWxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5LCB0aGUgVURQIHBvcnQgaGFz
IHRvIGJlIHNldCB0byAwLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9maW5pc2goKX0KK0F0
IHRoZSBlbmQgb2YgdGhlIHByb2dyYW0gXHRleHRpdHt1c3JzY3RwXF9maW5pc2goKX0gc2hvdWxk
IGJlIGNhbGxlZCB0byBmcmVlIGFsbCB0aGUgbWVtb3J5IHRoYXQgaGFzIGJlZW4KK2FsbG9jYXRl
ZCBiZWZvcmUuCitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzIAorXGJlZ2lue3ZlcmJhdGltfQor
aW50Cit1c3JzY3RwX2ZpbmlzaCh2b2lkKS4KK1xlbmR7dmVyYmF0aW19CitUaGUgcmV0dXJuIGNv
ZGUgaXMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zb2NrZXQoKX0KK0EgcmVwcmVzZW50YXRpb24gb2YgYW4gU0NUUCBl
bmRwb2ludCBpcyBhIHNvY2tldC4gSXMgaXQgY3JlYXRlZCB3aXRoIFx0ZXh0aXR7dXNyc2N0cFxf
c29ja2V0KCl9LgorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpczoKK1xiZWdpbnt2ZXJiYXRpbX0K
K3N0cnVjdCBzb2NrZXQgKgordXNyc2N0cF9zb2NrZXQoaW50IGRvbWFpbiwgCisgICAgICAgICAg
ICAgICBpbnQgdHlwZSwgCisgICAgICAgICAgICAgICBpbnQgcHJvdG9jb2wsCisgICAgICAgICAg
ICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCAKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IGZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p
ZCAqdWxwX2luZm8pLAorICAgICAgICAgICAgICAgaW50ICgqc2VuZF9jYikoc3RydWN0IHNvY2tl
dCAqc29jaywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzYl9mcmVl
KSwKKyAgICAgICAgICAgICAgIHVpbnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAgICAgICAgICAg
IHZvaWQgKnVscF9pbmZvKS4KK1xlbmR7dmVyYmF0aW19CitUaGUgYXJndW1lbnRzIHRha2VuIGZy
b20gUkZDfjY0NTggYXJlOgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBkb21haW46IFBGXF9JTkVU
IG9yIFBGXF9JTkVUNiBjYW4gYmUgdXNlZC4KK1xpdGVtIHR5cGU6IEluIGNhc2Ugb2YgYSBvbmUt
dG8tbWFueSBzdHlsZSBzb2NrZXQgaXQgaXMgU09DS1xfU0VRUEFDS0VULCBpbiBjYXNlIG9mIGEg
b25lLXRvLW9uZSBzdHlsZSAKK3NvY2tldCBpdCBpcyBTT0NLXF9TVFJFQU0uIEZvciBhbiBleHBs
YW5hdGlvbiBvZiB0aGUgZGlmZmVyZW5jZXMgYmV0d2VlbiB0aGUgc29ja2V0IHR5cGVzIHBsZWFz
ZQorcmVmZXIgdG8gUkZDfjY0NTguCitcaXRlbSBwcm90b2NvbDogU2V0IElQUFJPVE9cX1NDVFAu
CitcZW5ke2l0ZW1pemV9CisKK0luIHVzcnNjdHAsIGEgY2FsbGJhY2sgQVBJIGNhbiBiZSB1c2Vk
LgorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBUaGUgZnVuY3Rpb24gcG9pbnRlcnMgb2YgdGhlIHJl
Y2VpdmUgYW5kIHNlbmQgY2FsbGJhY2tzIGFyZSBuZXcgYXJndW1lbnRzIHRvIHRoZSBzb2NrZXQg
Y2FsbC4gSWYgbm8gY2FsbGJhY2sgQVBJIGlzIHVzZWQsIHRoZXNlIG11c3QgYmUgXHRleHRpdHtO
VUxMfS4KK1xpdGVtIFRoZSBcdGV4dGl0e3NiXF90aHJlc2hvbGR9IHNwZWNpZmllcyB0aGUgYW1v
dW50IG9mIGZyZWUgc3BhY2UgaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlciBiZWZvcmUgdGhlIHNl
bmQgZnVuY3Rpb24gaW4gdGhlIGFwcGxpY2F0aW9uIGlzIGNhbGxlZC4gSWYgYSBzZW5kIGNhbGxi
YWNrIGZ1bmN0aW9uIGlzIHNwZWNpZmllZCBhbmQgXHRleHRpdHtzYlxfdGhyZXNob2xkfSBpcyAw
LCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGlzIHJvb20gaW4gdGhlIHNl
bmQgc29ja2V0IGJ1ZmZlci4KK1xpdGVtIEFkZGl0aW9uYWwgZGF0YSBtYXkgYmUgcGFzc2VkIGFs
b25nIHdpdGhpbiB0aGUgXHRleHRpdHt1bHBcX2luZm99IHBhcmFtZXRlci4gVGhpcyB2YWx1ZSB3
aWxsIGJlIHBhc3NlZCB0byB0aGUgXHRleHRpdHtyZWNlaXZlXF9jYn0gd2hlbiBpdCBpcyBpbnZv
a2VkLgorXGVuZHtpdGVtaXplfQorCitPbiBzdWNjZXNzIFx0ZXh0aXR7dXNyc2N0cFxfc29ja2V0
KCl9IHJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzb2NrZXQgaW4gdGhlIFx0ZXh0dHR7
c3RydWN0IHNvY2tldH0gZGF0YSB0eXBlLiAKK0l0IHdpbGwgYmUgbmVlZGVkIGluIGFsbCBvdGhl
ciBzeXN0ZW0gY2FsbHMuIEluIGNhc2Ugb2YgYSBmYWlsdXJlIE5VTEwgaXMgcmV0dXJuZWQgYW5k
CitlcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX2Nsb3NlKCl9CisKK1RoZSBmdW5jdGlvbiBwcm90b3R5cGUgb2YgXHRl
eHRpdHt1c3JzY3RwXF9jbG9zZSgpfSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0gICAKK3ZvaWQKK3Vz
cnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pLgorIFxlbmR7dmVyYmF0aW19CitUaHVzIHRo
ZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlIGFic2VuY2Ugb2YgYSByZXR1cm4gY29kZS4gCisgCitc
c3Vic2VjdGlvbntTYW1lIEZ1bmN0aW9uYWxpdHkgYXMgUkZDIDY0NTh9CitUaGUgZm9sbG93aW5n
IGZ1bmN0aW9ucyBoYXZlIHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkgYXMgdGhlaXIga2VybmVsIHBl
bmRhbnRzLiBUaGVyZSBwcm90b3R5cGVzCithcmUgZGVzY3JpYmVkIGluIHRoZSBmb2xsb3dpbmcg
c3Vic2VjdGlvbnMuIEZvciBhIGRldGFpbGVkIGRlc2NyaXB0aW9uIHBsZWFzZSByZWZlciB0byBS
RkN+NjQ1OC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfYmluZCgpfQorVGhlIGZ1bmN0aW9u
IHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBcX2JpbmQoKX0gaXMgCitcYmVnaW57dmVyYmF0
aW19CitpbnQKK3VzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgICAgICAgICAgc29ja2xlbl90IGFkZHJsZW4pLgor
XGVuZHt2ZXJiYXRpbX0gICAgIAorVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXplfQor
XGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1cm5lZCBieSBcdGV4dGl0e3Vz
cnNjdHBcX3NvY2tldCgpfS4KK1xpdGVtIGFkZHI6IFRoZSBhZGRyZXNzIHN0cnVjdHVyZSAoc3Ry
dWN0IHNvY2thZGRyXF9pbiBmb3IgYW4gSVB2NCBhZGRyZXNzCisgICAgICBvciBzdHJ1Y3Qgc29j
a2FkZHJcX2luNiBmb3IgYW4gSVB2NiBhZGRyZXNzKS4KK1xpdGVtIGFkZHJsZW46IFRoZSBzaXpl
IG9mIHRoZSBhZGRyZXNzIHN0cnVjdHVyZS4KK1xlbmR7aXRlbWl6ZX0KK1x0ZXh0aXR7dXNyc2N0
cFxfYmluZCgpfSByZXR1cm5zIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBlcnJv
ci4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfbGlzdGVuKCl9CitUaGUgZnVuY3Rpb24gcHJv
dG90eXBlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfbGlzdGVuKCl9IGlzIAorXGJlZ2lue3ZlcmJhdGlt
fQoraW50Cit1c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAg
IGludCBiYWNrbG9nKS4KKyBcZW5ke3ZlcmJhdGltfSAgICAgIAorVGhlIGFyZ3VtZW50cyBhcmUK
K1xiZWdpbntpdGVtaXplfQorXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1
cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KK1xpdGVtIGJhY2tsb2c6IElmIGJh
Y2tsb2cgaXMgbm9uLXplcm8sIGVuYWJsZSBsaXN0ZW5pbmcsIGVsc2UgZGlzYWJsZQorICAgICAg
bGlzdGVuaW5nLgorXGVuZHtpdGVtaXplfQorXHRleHRpdHt1c3JzY3RwXF9saXN0ZW4oKX0gcmV0
dXJucyAwIG9uIHN1Y2Nlc3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX2FjY2VwdCgpfQorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4
dGl0e3VzcnNjdHBcX2FjY2VwdCgpfSBpcyAKK1xiZWdpbnt2ZXJiYXRpbX0gICAgICAgICAgICAg
ICAgCitzdHJ1Y3Qgc29ja2V0ICoKK3VzcnNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLAor
ICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICogYWRkciwKKyAgICAgICAgICAgICAgIHNv
Y2tsZW5fdCAqIGFkZHJsZW4pLgorIFxlbmR7dmVyYmF0aW19CisgVGhlIGFyZ3VtZW50cyBhcmUK
K1xiZWdpbntpdGVtaXplfQorXGl0ZW0gc286IFBvaW50ZXIgdG8gdGhlIHNvY2tldCBhcyByZXR1
cm5lZCBieSBcdGV4dGl0e3VzcnNjdHBcX3NvY2tldCgpfS4KK1xpdGVtIGFkZHI6IE9uIHJldHVy
biwgIHRoZSBwcmltYXJ5IGFkZHJlc3Mgb2YgdGhlIHBlZXIgKHN0cnVjdCBzb2NrYWRkclxfaW4g
Zm9yIGFuIElQdjQgYWRkcmVzcyBvcgorICAgICAgc3RydWN0IHNvY2thZGRyXF9pbjYgZm9yIGFu
IElQdjYgYWRkcmVzcykuCitcaXRlbSBhZGRybGVuOiBTaXplIG9mIHRoZSByZXR1cm5lZCBhZGRy
ZXNzIHN0cnVjdHVyZS4KK1xlbmR7aXRlbWl6ZX0KK1x0ZXh0aXR7dXNyc2N0cFxfYWNjZXB0KCl9
IHJldHVybnMgdGhlIGFjY2VwdGVkIHNvY2tldCBvbiBzdWNjZXNzIGFuZCBOVUxMIGluIGNhc2Ug
b2YgYW4gZXJyb3IuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX2Nvbm5lY3QoKX0KK1RoZSBm
dW5jdGlvbiBwcm90b3R5cGUgb2YgXHRleHRpdHt1c3JzY3RwXF9jb25uZWN0KCl9IGlzIAorXGJl
Z2lue3ZlcmJhdGltfSAgICAgCitpbnQKK3VzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpz
bywKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCisgICAgICAgICAgICAg
ICAgc29ja2xlbl90IGFkZHJsZW4pCisgXGVuZHt2ZXJiYXRpbX0KK1RoZSBhcmd1bWVudHMgYXJl
CitcYmVnaW57aXRlbWl6ZX0KK1xpdGVtIHNvOiBQb2ludGVyIHRvIHRoZSBzb2NrZXQgYXMgcmV0
dXJuZWQgYnkgXHRleHRpdHt1c3JzY3RwXF9zb2NrZXQoKX0uCisgXGl0ZW0gbmFtZTogQWRkcmVz
cyBvZiB0aGUgcGVlciB0byBjb25uZWN0IHRvIChzdHJ1Y3Qgc29ja2FkZHJcX2luIGZvciBhbiBJ
UHY0IGFkZHJlc3Mgb3IKKyAgICAgIHN0cnVjdCBzb2NrYWRkclxfaW42IGZvciBhbiBJUHY2IGFk
ZHJlc3MpLgorXGl0ZW0gYWRkcmxlbjogU2l6ZSBvZiB0aGUgcGVlcidzIGFkZHJlc3MuCitcZW5k
e2l0ZW1pemV9CitcdGV4dGl0e3VzcnNjdHBcX2Nvbm5lY3QoKX0gcmV0dXJucyAwIG9uIHN1Y2Nl
c3MgYW5kIC0xIGluIGNhc2Ugb2YgYW4gZXJyb3IuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X3NodXRkb3duKCl9IAorVGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBvZiBcdGV4dGl0e3VzcnNjdHBc
X3NodXRkb3duKCl9IGlzIAorXGJlZ2lue3ZlcmJhdGltfSAgIAoraW50Cit1c3JzY3RwX3NodXRk
b3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KS4KK1xlbmR7dmVyYmF0aW19CitUaGUgYXJn
dW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9CitcaXRlbSBzbzogUG9pbnRlciB0byB0aGUgc29j
a2V0IG9mIHRoZSBhc3NvY2lhdGlvbiB0byBiZSBjbG9zZWQuCitcaXRlbSBob3c6IFNwZWNpZmll
cyB0aGUgdHlwZSBvZiBzaHV0ZG93bi4gIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3M6CitcYmVn
aW57aXRlbWl6ZX0KK1xpdGVtIFNIVVRcX1JEOiAgRGlzYWJsZXMgZnVydGhlciByZWNlaXZlIG9w
ZXJhdGlvbnMuICBObyBTQ1RQIHByb3RvY29sCisgICAgICAgICBhY3Rpb24gaXMgdGFrZW4uCitc
aXRlbSBTSFVUXF9XUjogIERpc2FibGVzIGZ1cnRoZXIgc2VuZCBvcGVyYXRpb25zLCBhbmQgaW5p
dGlhdGVzIHRoZSBTQ1RQCisgICAgICAgICBzaHV0ZG93biBzZXF1ZW5jZS4KK1xpdGVtIFNIVVRc
X1JEV1I6ICBEaXNhYmxlcyBmdXJ0aGVyIHNlbmQgYW5kIHJlY2VpdmUgb3BlcmF0aW9ucywgYW5k
CisgICAgICAgICBpbml0aWF0ZXMgdGhlIFNDVFAgc2h1dGRvd24gc2VxdWVuY2UuCitcZW5ke2l0
ZW1pemV9CitcZW5ke2l0ZW1pemV9CitcdGV4dGl0e3VzcnNjdHBcX3NodXRkb3duKCl9IHJldHVy
bnMgMCBvbiBzdWNjZXNzIGFuZCAtMSBpbiBjYXNlIG9mIGFuIGVycm9yLgorCitcc2VjdGlvbntT
ZW5kaW5nIGFuZCBSZWNlaXZpbmcgRGF0YX0KK1NpbmNlIHRoZSBwdWJsaWNhdGlvbiBvZiBSRkN+
NjQ1OCB0aGVyZSBpcyBvbmx5IG9uZSBmdW5jdGlvbiBmb3Igc2VuZGluZyBhbmQgb25lIGZvciBy
ZWNlaXZpbmcKK3RoYXQgaXMgbm90IGRlcHJlY2F0ZWQuIFRoZXJlZm9yZSwgb25seSB0aGVzZSB0
d28gYXJlIGRlc2NyaWJlZCBoZXJlLgorCitcc3Vic2VjdGlvbnt1c3JzY3RwXF9zZW5kdigpfQor
VGhlIGZ1bmN0aW9uIHByb3RvdHlwZSBpcworXGJlZ2lue3ZlcmJhdGltfQorc3NpemVfdAordXNy
c2N0cF9zZW5kdihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAq
ZGF0YSwKKyAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgc3RydWN0IHNv
Y2thZGRyICphZGRycywKKyAgICAgICAgICAgICAgaW50IGFkZHJjbnQsCisgICAgICAgICAgICAg
IHZvaWQgKmluZm8sCisgICAgICAgICAgICAgIHNvY2tsZW5fdCBpbmZvbGVuLAorICAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgaW5mb3R5cGUsCisgICAgICAgICAgICAgIGludCBmbGFncykuCitc
ZW5ke3ZlcmJhdGltfQorVGhlIGFyZ3VtZW50cyBhcmUKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0g
c286IFRoZSBzb2NrZXQgdG8gc2VuZCBkYXRhIG9uLgorXGl0ZW0gZGF0YTogQXMgaXQgaXMgbW9y
ZSBjb252ZW5pZW50IHRvIHNlbmQgZGF0YSBpbiBhIGJ1ZmZlciBhbmQgbm90IGEgXHRleHR0dHtz
dHJ1Y3QgaW92ZWN9IGRhdGEgc3RydWN0dXJlLCB3ZQorY2hvc2UgdG8gcGFzcyB0aGUgZGF0YSBh
cyBhIHZvaWQgcG9pbnRlci4KK1xpdGVtIGxlbjogTGVuZ3RoIG9mIHRoZSBkYXRhLgorXGl0ZW0g
YWRkcnM6IEluIHRoaXMgdmVyc2lvbiBvZiB1c3JzY3RwIGF0IG1vc3Qgb25lIGRlc3RpbmF0aW9u
IGFkZHJlc3MgaXMgc3VwcG9ydGVkLiBJbiB0aGUgY2FzZSBvZiBhIGNvbm5lY3RlZAorc29ja2V0
LCB0aGUgcGFyYW1ldGVyIFx0ZXh0dHR7YWRkcnN9IGNhbiBiZSBzZXQgdG8gTlVMTC4KK1xpdGVt
IGFkZHJjbnQ6IE51bWJlciBvZiBhZGRyZXNzZXMuIEFzIGF0IG1vc3Qgb25lIGFkZHJlc3MgaXMg
c3VwcG9ydGVkLCBhZGRyY250IGlzIDAgaWYgYWRkcnMgaXMgTlVMTCBhbmQgCisxIG90aGVyd2lz
ZS4KK1xpdGVtIGluZm86IEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZm9yIGEgbWVzc2FnZSBpcyBz
dG9yZWQgaW4gXHRleHR0dHt2b2lkICppbmZvfS4gVGhlIGRhdGEgdHlwZXMgXHRleHR0dHtzdHJ1
Y3R+c2N0cFxfc25kaW5mb30sCitcdGV4dHR0e3N0cnVjdH5zY3RwXF9wcmluZm99LCBhbmQgXHRl
eHR0dHtzdHJ1Y3R9IFxsaW5lYnJlYWsgXHRleHR0dHtzY3RwXF9zZW5kdlxfc3BhfSBhcmUgc3Vw
cG9ydGVkIGFzIGRlZmluZWQgaW4gCitSRkN+NjQ1OC4gU3VwcG9ydCBmb3IgXHRleHR0dHtzdHJ1
Y3RzY3RwXF9hdXRoaW5mb30gaXMgbm90IGltcGxlbWVudGVkIHlldCwgdGhlcmVmb3JlLCBlcnJu
byBpcyBzZXQgRUlOVkFMCithbmQgLTEgd2lsbCBiZSByZXR1cm5lZCwgaWYgaXQgaXMgdXNlZC4K
K1xpdGVtIGluZm9sZW46IExlbmd0aCBvZiBpbmZvIGluIGJ5dGVzLgorXGl0ZW0gaW5mb3R5cGU6
IElkZW50aWZpZXMgdGhlIHR5cGUgb2YgdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGluIGluZm8u
IFBvc3NpYmxlIHZhbHVlcyBhcmUKK1NDVFBcX1NFTkRWXF9OT0lORk8sIFNDVFBcX1NFTkRWXF9T
TkRJTkZPLCBcbGluZWJyZWFrIFNDVFBcX1NFTkRWXF9QUklORk8sIFNDVFBcX1NFTkRWXF9TUEEu
IAorRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcGxlYXNlIHJlZmVyIHRvIFJGQ342NDU4Lgor
XGl0ZW0gZmxhZ3M6IEZsYWdzIGFzIGRlc2NyaWJlZCBpbiBSRkN+NjQ1OC4KK1xlbmR7aXRlbWl6
ZX0KKworXHRleHRpdHt1c3JzY3RwXF9zZW5kdigpfSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0
ZXMgc2VudCwgb3IgLTEgaWYgYW4gZXJyb3IKK29jY3VycmVkLiAgVGhlIHZhcmlhYmxlIGVycm5v
IGlzIHRoZW4gc2V0IGFwcHJvcHJpYXRlbHkuCisKK1xzdWJzZWN0aW9ue3VzcnNjdHBcX3JlY3Z2
KCl9CitUaGUgZnVuY3Rpb24gcHJvdG90eXBlIGlzCitcYmVnaW57dmVyYmF0aW19Citzc2l6ZV90
Cit1c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAgIHZvaWQgKmRi
dWYsCisgICAgICAgICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2Fk
ZHIgKmZyb20sCisgICAgICAgICAgICAgc29ja2xlbl90ICogZnJvbWxlbiwKKyAgICAgICAgICAg
ICB2b2lkICppbmZvLAorICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKKyAgICAgICAg
ICAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBlLAorICAgICAgICAgICAgIGludCAqbXNnX2ZsYWdz
KS4KK1xlbmR7dmVyYmF0aW19CitUaGUgYXJndW1lbnRzIGFyZQorXGJlZ2lue2l0ZW1pemV9Citc
aXRlbSBzbzogVGhlIHNvY2tldCB0byByZWNlaXZlIGRhdGEgb24uCitcaXRlbSBkYnVmOiBBbmFs
b2cgdG8gXHRleHRpdHt1c3JzY3RwXF9zZW5kdigpfSB0aGUgZGF0YSBpcyByZXR1cm5lZCBpbiBh
IGJ1ZmZlci4KK1xpdGVtIGxlbjogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCitcaXRl
bSBmcm9tOiBBIHBvaW50ZXIgdG8gYW4gYWRkcmVzcyB0byBiZSBmaWxsZWQgd2l0aCB0aGUgc2Vu
ZGVyIG9mIHRoZQorICAgICAgcmVjZWl2ZWQgbWVzc2FnZSdzIGFkZHJlc3MuCitcaXRlbSBmcm9t
bGVuOiBBbiBpbi9vdXQgcGFyYW1ldGVyIGRlc2NyaWJpbmcgdGhlIGZyb20gbGVuZ3RoLgorXGl0
ZW0gaW5mbzogQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gaG9sZCB0aGUgYXR0cmlidXRlcyBv
ZiB0aGUgcmVjZWl2ZWQKKyAgICAgIG1lc3NhZ2UuICBUaGUgc3RydWN0dXJlIHR5cGUgb2YgaW5m
byBpcyBkZXRlcm1pbmVkIGJ5IHRoZQorICAgICAgaW5mb3R5cGUgcGFyYW1ldGVyLiBUaGUgYXR0
cmlidXRlcyByZXR1cm5lZCBpbiBcdGV4dHR0e2luZm99IGhhdmUgdG8gYmUgCisgICAgICBoYW5k
bGVkIGluIHRoZSBzYW1lIHdheSBhcyBzcGVjaWZpZWQgaW4gUkZDfjY0NTguCitcaXRlbSBpbmZv
bGVuOiAgQW4gaW4vb3V0IHBhcmFtZXRlciBkZXNjcmliaW5nIHRoZSBzaXplIG9mIHRoZSBpbmZv
IGJ1ZmZlci4KK1xpdGVtIGluZm90eXBlOiAgT24gcmV0dXJuLCAqaW5mb3R5cGUgaXMgc2V0IHRv
IHRoZSB0eXBlIG9mIHRoZSBpbmZvCisgICAgICBidWZmZXIuICBUaGUgY3VycmVudCBkZWZpbmVk
IHZhbHVlcyBhcmUgU0NUUFxfUkVDVlZcX05PSU5GTywgCisgICAgICBTQ1RQXF9SRUNWVlxfUkNW
SU5GTywgU0NUUFxfUkVDVlZcX05YVElORk8sIGFuZAorICAgICAgU0NUUFxfUkVDVlZcX1JOLiBB
IGRldGFpbGVkIGRlc2NyaXB0aW9uIGlzIGdpdmVuIGluIFJGQ342NDU4LgorXGl0ZW0gZmxhZ3M6
IEEgcG9pbnRlciB0byBhbiBpbnRlZ2VyIHRvIGJlIGZpbGxlZCB3aXRoIGFueSBtZXNzYWdlIGZs
YWdzCisgICAgICAoZS5nLiwgTVNHXF9OT1RJRklDQVRJT04pLiAgTm90ZSB0aGF0IHRoaXMgZmll
bGQgaXMgYW4gaW4vb3V0CisgICAgICBwYXJhbWV0ZXIuICBPcHRpb25zIGZvciB0aGUgcmVjZWl2
ZSBtYXkgYWxzbyBiZSBwYXNzZWQgaW50byB0aGUKKyAgICAgIHZhbHVlIChlLmcuLCBNU0dcX0VP
UikuICBSZXR1cm5pbmcgZnJvbSB0aGUgY2FsbCwgdGhlIGZsYWdzJyB2YWx1ZQorICAgICAgd2ls
bCBkaWZmZXIgZnJvbSBpdHMgb3JpZ2luYWwgdmFsdWUuCitcZW5ke2l0ZW1pemV9CisKK1x0ZXh0
aXR7dXNyc2N0cFxfcmVjdnYoKX0gcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHNlbnQsIG9y
IC0xIGlmIGFuIGVycm9yCitvY2N1cnJlZC4gIFRoZSB2YXJpYWJsZSBlcnJubyBpcyB0aGVuIHNl
dCBhcHByb3ByaWF0ZWx5LgorCisgIAorCitcc2VjdGlvbntTb2NrZXQgT3B0aW9uc30KK1NvY2tl
dCBvcHRpb25zIGFyZSB1c2VkIHRvIGNoYW5nZSB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBzb2Nr
ZXQgY2FsbHMuCitUaGVpciBiZWhhdmlvciBpcyBzcGVjaWZpZWQgaW4gUkZDfjY0NTguIFRoZSBm
dW5jdGlvbnMgdG8gZ2V0IG9yIHNldCB0aGVtIGFyZQorCitcYmVnaW57dmVyYmF0aW19CitpbnQK
K3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAg
ICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAgc29ja2xl
bl90ICpvcHRsZW4pCitcZW5ke3ZlcmJhdGltfQorYW5kCitcYmVnaW57dmVyYmF0aW19CitpbnQK
K3VzcnNjdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAg
ICAgIGludCBsZXZlbCwKKyAgICAgICAgICAgICAgICAgICAgIGludCBvcHRuYW1lLAorICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqb3B0dmFsLAorICAgICAgICAgICAgICAgICAgICAg
c29ja2xlbl90IG9wdGxlbikuCitcZW5ke3ZlcmJhdGltfQorCithbmQgdGhlIGFyZ3VtZW50cyBh
cmUKK1xiZWdpbntpdGVtaXplfQorXGl0ZW0gc286ICBUaGUgc29ja2V0IG9mIHR5cGUgc3RydWN0
IHNvY2tldC4KK1xpdGVtIGxldmVsOiAgU2V0IHRvIElQUFJPVE9cX1NDVFAgZm9yIGFsbCBTQ1RQ
IG9wdGlvbnMuCitcaXRlbSBvcHRuYW1lOiAgVGhlIG9wdGlvbiBuYW1lIGFzIHNwZWNpZmllZCBp
biBUYWJsZX5ccmVme29wdGlvbnN9LgorXGl0ZW0gb3B0dmFsOiBUaGUgYnVmZmVyIHRvIHN0b3Jl
IHRoZSB2YWx1ZSBvZiB0aGUgb3B0aW9uIGFzIHNwZWNpZmllZCBpbiB0aGUgc2Vjb25kIGNvbHVt
biBvZiBUYWJsZX5ccmVme29wdGlvbnN9LgorXGl0ZW0gb3B0bGVuOiAgVGhlIHNpemUgb2YgdGhl
IGJ1ZmZlciAob3IgdGhlIGxlbmd0aCBvZiB0aGUgb3B0aW9uCisgICAgICByZXR1cm5lZCBpbiBj
YXNlIG9mIFx0ZXh0aXR7dXNyc2N0cFxfZ2V0c29ja29wdH0pLgorXGVuZHtpdGVtaXplfQorCitU
aGVzZSBmdW5jdGlvbnMgcmV0dXJuIDAgb24gc3VjY2VzcyBhbmQgLTEgaW4gY2FzZSBvZiBhbiBl
cnJvci4KKworXGJlZ2lue2xvbmd0YWJsZX17fGx8bHxjfH0gCitcaGxpbmUKK3tcYmZzZXJpZXMg
T3B0aW9ufSZ7XGJmc2VyaWVzIERhdGF0eXBlfSAme1xiZnNlcmllcyByL3d9XHRhYnVsYXJuZXds
aW5lIAorXGVuZGhlYWQKK1xobGluZQorU0NUUFxfUlRPSU5GTyZzdHJ1Y3Qgc2N0cFxfcnRvaW5m
byZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9BU1NPQ0lORk8mc3RydWN0IHNjdHBc
X2Fzc29jcGFyYW1zJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0lOSVRNU0cmc3Ry
dWN0IHNjdHBcX2luaXRtc2cmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfTk9ERUxB
WSZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfQVVUT0NMT1NFJmludCZyL3dc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9QUklNQVJZXF9BRERSJnN0cnVjdCBzY3RwXF9z
ZXRwcmltJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0FEQVBUQVRJT05cX0xBWUVS
JnN0cnVjdCBzY3RwXF9zZXRhZGFwdGF0aW9uJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1ND
VFBcX0RJU0FCTEVcX0ZSQUdNRU5UUyZpbnQmci93XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NU
UFxfUEVFUlxfQUREUlxfUEFSQU1TJnN0cnVjdCBzY3RwXF9wYWRkcnBhcmFtcyZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9JXF9XQU5UXF9NQVBQRURcX1Y0XF9BRERSJmludCZyL3dc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9NQVhTRUcmc3RydWN0IHNjdHBcX2Fzc29jXF92
YWx1ZSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9ERUxBWUVEXF9TQUNLJnN0cnVj
dCBzY3RwXF9zYWNrXF9pbmZvJnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0ZSQUdN
RU5UXF9JTlRFUkxFQVZFJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9QQVJU
SUFMXF9ERUxJVkVSWVxfUE9JTlQmaW50JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBc
X0hNQUNcX0lERU5UJnN0cnVjdCBzY3RwXF9obWFjYWxnbyZyL3dcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCitTQ1RQXF9BVVRIXF9BQ1RJVkVcX0tFWSZzdHJ1Y3Qgc2N0cFxfYXV0aGtleWlkJnIvd1x0
YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0FVVE9cX0FTQ09ORiZpbnQmci93XHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorU0NUUFxfTUFYXF9CVVJTVCZzdHJ1Y3Qgc2N0cFxfYXNzb2NcX3ZhbHVl
JnIvd1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX0NPTlRFWFQmc3RydWN0IHNjdHBcX2Fz
c29jXF92YWx1ZSZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9FWFBMSUNJVFxfRU9S
JmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRVVTRVxfUE9SVCZpbnQmci93
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NUUFxfRVZFTlQmc3RydWN0IHNjdHBcX2V2ZW50JnIv
d1x0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1JFQ1ZSQ1ZJTkZPJmludCZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRUNWTlhUSU5GTyZpbnQmci93XHRhYnVsYXJuZXdsaW5l
IFxobGluZQorU0NUUFxfREVGQVVMVFxfU05ESU5GTyZzdHJ1Y3Qgc2N0cFxfc25kaW5mbyZyL3dc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9ERUZBVUxUXF9QUklORk8mc3RydWN0IHNjdHBc
X2RlZmF1bHRcX3ByaW5mbyZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9SRU1PVEVc
X1VEUFxfRU5DQVBTXF9QT1JUJmludCZyL3dcdGFidWxhcm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9F
TkFCTEVcX1NUUkVBTVxfUkVTRVQmc3RydWN0IHNjdHBcX2Fzc29jXF92YWx1ZSZyL3dcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCitTQ1RQXF9TVEFUVVMmc3RydWN0IHNjdHBcX3N0YXR1cyZyXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorU0NUUFxfR0VUXF9QRUVSXF9BRERSXF9JTkZPJnN0cnVjdCBzY3Rw
XF9wYWRkcmluZm8mclx0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1BFRVJcX0FVVEhcX0NI
VU5LUyZzdHJ1Y3Qgc2N0cFxfYXV0aGNodW5rcyZyXHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NU
UFxfTE9DQUxcX0FVVEhcX0NIVU5LUyZzdHJ1Y3Qgc2N0cFxfYXV0aGNodW5rcyZyXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorU0NUUFxfR0VUXF9BU1NPQ1xfTlVNQkVSJnVpbnQzMlxfdCZyXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorU0NUUFxfR0VUXF9BU1NPQ1xfSURcX0xJU1Qmc3RydWN0IHNjdHBc
X2Fzc29jXF9pZHMmclx0YWJ1bGFybmV3bGluZSBcaGxpbmUKK1NDVFBcX1JFU0VUXF9TVFJFQU1T
JnN0cnVjdCBzY3RwXF9yZXNldFxfc3RyZWFtcyZ3XHRhYnVsYXJuZXdsaW5lIFxobGluZQorU0NU
UFxfUkVTRVRcX0FTU09DJnN0cnVjdCBzY3RwXF9hc3NvY1xfdCZ3XHRhYnVsYXJuZXdsaW5lIFxo
bGluZQorU0NUUFxfQUREXF9TVFJFQU1TJnN0cnVjdCBzY3RwXF9hZGRcX3N0cmVhbXMmd1x0YWJ1
bGFybmV3bGluZSBcaGxpbmUKK1xjYXB0aW9ue1NvY2tldCBPcHRpb25zIHN1cHBvcnRlZCBieSB1
c3JzY3RwfQorXGxhYmVse29wdGlvbnN9CitcZW5ke2xvbmd0YWJsZX0KK0FuIG92ZXJ2aWV3IG9m
IHRoZSBzdXBwb3J0ZWQgb3B0aW9ucyBpcyBnaXZlbiBpbiBUYWJsZX5ccmVme29wdGlvbnN9LiBU
aGVpciB1c2UgaXMgZGVzY3JpYmVkIGluIFJGQ342NDU4flxjaXRle3NvY2tldEFQSX0sIFJGQ342
NTI1flxjaXRle3N0cmVhbVJlc2V0fSwgYW5kflxjaXRle3VkcGVuY2Fwc30uCisKK1xzZWN0aW9u
e1N5c2N0bCB2YXJpYWJsZXN9CisKK0luIGtlcm5lbCBpbXBsZW1lbnRhdGlvbnMgbGlrZSBmb3Ig
aW5zdGFuY2UgRnJlZUJTRCwgaXQgaXMgcG9zc2libGUgdG8gY2hhbmdlIHBhcmFtZXRlcnMKK2lu
IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiBUaGVzZSBwYXJhbWV0ZXJzIGFyZSBjYWxsZWQgc3lzY3Rs
IHZhcmlhYmxlcy4KKworSW4gdXNyc2N0cCBhcHBsaWNhdGlvbnMgY2FuIHNldCBvciByZXRyaWV2
ZSB0aGVzZSB2YXJpYWJsZXMgd2l0aCB0aGUgZnVuY3Rpb25zCitcYmVnaW57dmVyYmF0aW19Cit2
b2lkCit1c3JzY3RwX3N5c2N0bF9zZXRfICMjICh1aW50MzJfdCB2YWx1ZSkKK1xlbmR7dmVyYmF0
aW19CithbmQKK1xiZWdpbnt2ZXJiYXRpbX0KK3VpbnQzMl90Cit1c3JzY3RwX3N5c2N0bF9nZXRf
ICMjICh2b2lkKQorXGVuZHt2ZXJiYXRpbX0KK3Jlc3BlY3RpdmVseSwgd2hlcmUgXCNcIyBzdGFu
ZHMgZm9yIHRoZSBuYW1lIG9mIHRoZSB2YXJpYWJsZS4KKworSW4gdGhlIGZvbGxvd2luZyBwYXJh
Z3JhcGhzIGEgc2hvcnQgZGVzY3JpcHRpb24gb2YgdGhlIHBhcmFtZXRlcnMgd2lsbCBiZSBnaXZl
bi4KKworXHN1YnNlY3Rpb257TWFuaXB1bGF0ZSBNZW1vcnl9Citcc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfc2VuZHNwYWNlKCl9CitUaGUgc3BhY2Ugb2YgdGhlIGF2
YWlsYWJsZSBzZW5kIGJ1ZmZlciBjYW4gYmUgY2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVl
IG9mIDI2MiwxNDQgYnl0ZXMKK3RvIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAkMl57MzJ9LTEkIGJ5
dGVzLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcmVjdnNw
YWNlKCl9CitUaGUgc3BhY2Ugb2YgdGhlIGF2YWlsYWJsZSByZWNlaXZlIGJ1ZmZlciBjYW4gYmUg
Y2hhbmdlZCBmcm9tIGl0cyBkZWZhdWx0IHZhbHVlIG9mIDI2MiwxNDQgYnl0ZXMKK3RvIGEgdmFs
dWUgYmV0d2VlbiAwIGFuZCAkMl57MzJ9LTEkIGJ5dGVzLgorCitcc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfaGFzaHRibHNpemUoKX0KK1RoZSBUQ0IgKFRocmVhZCBD
b250cm9sIEJsb2NrKSBoYXNoIHRhYmxlIHNpemVzLCBpLmUuIHRoZSBzaXplIG9mIG9uZSBUQ0Ig
aW4gdGhlIGhhc2ggdGFibGUsIGNhbiBiZSB0dW5lZCBiZXR3ZWVuIAorMSBhbmQgJDJeezMyfS0x
JCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMSwwMjQgYnl0ZXMuIEEgVENCIGNvbnRhaW5z
IGZvciBpbnN0YW5jZSBwb2ludGVycyB0byB0aGUgc29ja2V0LCB0aGUKK2VuZHBvaW50LCBpbmZv
cm1hdGlvbiBhYm91dCB0aGUgYXNzb2NpYXRpb24gYW5kIHNvbWUgc3RhdGlzdGljIGRhdGEuCisK
K1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wY2J0YmxzaXplKCl9
CitUaGUgUENCIChQcm90b2NvbCBDb250cm9sIEJsb2NrKSBoYXNoIHRhYmxlIHNpemVzLCBpLmUu
IHRoZSBzaXplIG9mIG9uZSBQQ0IgaW4gdGhlIGhhc2ggdGFibGUsIGNhbiBiZSB0dW5lZCBiZXR3
ZWVuIAorMSBhbmQgJDJeezMyfS0xJCBieXRlcy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMjU2IGJ5
dGVzLiBUaGUgUENCIGNvbnRhaW5zIGFsbCB2YXJpYWJsZXMgdGhhdCBjaGFyYWN0ZXJpemUgYW4g
ZW5kcG9pbnQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9z
eXN0ZW1cX2ZyZWVcX3Jlc2NcX2xpbWl0KCl9CitUaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1h
eGltdW0gbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbS4gSXQgY2FuIGJl
IHNldCBiZXR3ZWVuIAorMCBhbmQgJDJeezMyfS0xJC4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAw
MC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2Fzb2NcX2Zy
ZWVcX3Jlc2NcX2xpbWl0KCl9CitUaGlzIHBhcmFtZXRlcnMgdHVuZXMgdGhlIG1heGltdW0gbnVt
YmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gYW4gYXNzb2NpYXRpb24uIEl0IGNhbiBiZSBzZXQg
YmV0d2VlbiAKKzAgYW5kICQyXnszMn0tMSQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDEwLgorCitc
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWJ1ZlxfdGhyZXNob2xk
XF9jb3VudCgpfQorRGF0YSBpcyBzdG9yZWQgaW4gbWJ1ZnMuIFNldmVyYWwgbWJ1ZnMgY2FuIGJl
IGNoYWluZWQgdG9nZXRoZXIuIFRoZSBtYXhpbXVtIG51bWJlciBvZiBzbWFsbCBtYnVmcyBpbiBh
IGNoYWluCitjYW4gYmUgc2V0IHdpdGggdGhpcyBwYXJhbWV0ZXIsIGJlZm9yZSBhbiBtYnVmIGNs
dXNldCBpcyB1c2VkLiBUaGUgZGVmYXVsdCBpcyA1LgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3Rw
XF9zeXNjdGxcX3NldFxfc2N0cFxfYWRkXF9tb3JlXF90aHJlc2hvbGQoKX0KK1RCRAorVGhpcyBw
YXJhbWV0ZXIgY29uZmlndXJlcyB0aGUgdGhyZXNob2xkIGJlbG93IHdoaWNoIG1vcmUgc3BhY2Ug
c2hvdWxkIGJlIGFkZGVkIHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyLgorVGhlIGRlZmF1bHQgdmFs
dWUgaXMgMTQ1MiBieXRlcy4KKworCitcc3Vic2VjdGlvbntDb25maWd1cmUgUlRPfQorVGhlIHJl
dHJhbnNtaXNzaW9uIHRpbWVvdXQgKFJUTyksIGkuZS4gdGhlIHRpbWUgdGhhdCBjb250cm9scyB0
aGUgcmV0cmFuc21pc3Npb24gb2YgbWVzc2FnZXMsIGhhcworc2V2ZXJhbCBwYXJhbWV0ZXJzLCB0
aGF0IGNhbiBiZSBjaGFuZ2VkLCBmb3IgZXhhbXBsZSB0byBzaG9ydGVuIHRoZSB0aW1lLCBiZWZv
cmUgYSBtZXNzYWdlIGlzCityZXRyYW5zbWl0dGVkLiBUaGUgcmFuZ2Ugb2YgdGhlc2UgcGFyYW1l
dGVycyBpcyBiZXR3ZWVuIDAgYW5kICQyXnszMn0tMSR+bXMuIAorCitcc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnRvXF9tYXhcX2RlZmF1bHQoKX0KK1RoZSBkZWZh
dWx0IHZhbHVlIGZvciB0aGUgbWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlz
IDYwLDAwMCAoNjB+c2VjcykuIAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfcnRvXF9taW5cX2RlZmF1bHQoKX0KK1RoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUg
bWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIGlzIDEsMDAwICgxfnNlYykuIAor
Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcnRvXF9pbml0aWFs
XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGluaXRpYWwgcmV0cmFuc21p
c3Npb24gdGltZW91dCBpbiBtcyBpcyAzLDAwMCAoM35zZWMpLiBUaGlzIHZhbHVlIGlzIG9ubHkK
K25lZWRlZCBiZWZvcmUgdGhlIGZpcnN0IGNhbGN1bGF0aW9uIG9mIGEgcm91bmQgdHJpcCB0aW1l
IHRvb2sgcGxhY2UuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3Rw
XF9pbml0XF9ydG9cX21heFxfZGVmYXVsdCgpfQorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoZSBt
YXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZm9yIGFuIElOSVQgY2h1bmsgaW4gbXMgaXMg
NjAsMDAwICg2MH5zZWNzKS4gCisKKworXHN1YnNlY3Rpb257U2V0IFRpbWVyc30KK1xzdWJzdWJz
ZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF92YWxpZFxfY29va2llXF9saWZlXF9k
ZWZhdWx0KCl9CitBIGNvb2tpZSBoYXMgYSBzcGVjaWZpZWQgbGlmZSB0aW1lLiBJZiBpdCBleHBp
cmVzIHRoZSBjb29raWUgaXMgbm90IHZhbGlkIGFueSBtb3JlIGFuZCBhbiBBQk9SVCBpcyBzZW50
LgorVGhlIGRlZmF1bHQgdmFsdWUgaW4gbXMgaXMgNjAsMDAwICg2MH5zZWNzKS4KKworXHN1YnN1
YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2hlYXJ0YmVhdFxfaW50ZXJ2YWxc
X2RlZmF1bHQoKX0KK1NldCB0aGUgZGVmYXVsdCB0aW1lIGJldHdlZW4gdHdvIGhlYXJ0YmVhdHMu
IFRoZSBkZWZhdWx0IGlzIDMwLDAwMH5tcy4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lz
Y3RsXF9zZXRcX3NjdHBcX3NodXRkb3duXF9ndWFyZFxfdGltZVxfZGVmYXVsdCgpfQorSWYgYSBT
SFVURE9XTiBpcyBub3QgYW5zd2VyZWQgd2l0aCBhIFNIVVRET1dOLUFDSyB3aGlsZSB0aGUgc2h1
dGRvd24gZ3VhcmQgdGltZXIgaXMgc3RpbGwKK3J1bm5pbmcsIHRoZSBhc3NvY2lhdGlvbiB3aWxs
IGJlIGFib3J0ZWQgYWZ0ZXIgdGhlIGRlZmF1bHQgb2YgMTgwfnNlY3MuCisKK1xzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wbXR1XF9yYWlzZVxfdGltZVxfZGVmYXVs
dCgpfQorVEJECitUbyBzZXQgdGhlIHNpemUgb2YgdGhlIHBhY2tldHMgdG8gdGhlIGhpZ2hlc3Qg
dmFsdWUgcG9zc2libGUsIHRoZSBtYXhpbXVtIHRyYW5zZmVyIHVuaXQgKE1UVSkKK29mIHRoZSBj
b21wbGV0ZSBwYXRoIGhhcyB0byBiZSBrbm93bi4gVGhlIGRlZmF1bHQgdGltZSBpbnRlcnZhbCBm
b3IgdGhlIHBhdGggbXR1IGRpc2NvdmVyeQoraXMgNjAwfnNlY3MuCisKK1xzdWJzdWJzZWN0aW9u
e3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zZWNyZXRcX2xpZmV0aW1lXF9kZWZhdWx0KCl9
CitUQkQKK1RoZSBkZWZhdWx0IHNlY3JldCBsaWZldGltZSBvZiBhIHNlcnZlciBpcyAzNjAwfnNl
Y3MuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF92dGFnXF90
aW1lXF93YWl0KCl9CitUQkQKK1Z0YWcgdGltZSB3YWl0IHRpbWUsIDAgZGlzYWJsZXMgaXQuIERl
ZmF1bHQ6IDYwfnNlY3MKKworCitcc3Vic2VjdGlvbntTZXQgRmFpbHVyZSBMaW1pdHN9CitUcmFu
c21pc3Npb25zIGFuZCByZXRyYW5zbWlzc2lvbnMgb2YgbWVzc2FnZXMgbWlnaHQgZmFpbC4gVG8g
cHJvdGVjdCB0aGUgc3lzdGVtIGFnYWluc3QgdG9vIG1hbnkKK3JldHJhbnNtaXNzaW9ucywgbGlt
aXRzIGhhdmUgdG8gYmUgZGVmaW5lZC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3Rs
XF9zZXRcX3NjdHBcX2luaXRcX3J0eFxfbWF4XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCBtYXhp
bXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbnMgb2YgYW4gSU5JVCBjaHVua3MgaXMgOCwgYmVm
b3JlIGFuIEFCT1JUIGlzIHNlbnQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9hc3NvY1xfcnR4XF9tYXhcX2RlZmF1bHQoKX0KK1RoaXMgcGFyYW1ldGVyIHNl
dHMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGZhaWxlZCByZXRyYW5zbWlzc2lvbnMgYmVmb3JlIHRo
ZSBhc3NvY2lhdGlvbiBpcyBhYm9ydGVkLgorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMTAuCisKK1xz
dWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9wYXRoXF9ydHhcX21heFxf
ZGVmYXVsdCgpfQorVGhpcyBwYXJhbWV0ZXIgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGF0
aCBmYWlsdXJlcyBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGlzIGFib3J0ZWQuCitUaGUgZGVmYXVs
dCB2YWx1ZSBpcyA1LiBOb3RpY2UgdGhhdCB0aGUgbnVtYmVyIG9mIHBhdGhzIG11bHRpcGxpZWQg
YnkgdGhpcyB2YWx1ZSBzaG91bGQgYmUgCitlcXVhbCB0byBzY3RwXF9hc3NvY1xfcnR4XF9tYXhc
X2RlZmF1bHQuIFRoYXQgbWVhbnMgdGhhdCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGlzIGdv
b2QgZm9yIHR3byAKK3BhdGhzLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfbWF4XF9yZXRyYW5cX2NodW5rKCl9CitUaGUgcGFyYW1ldGVyIGNvbmZpZ3VyZXMg
aG93IG1hbnkgdGltZXMgYW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuc21pdHRlZCBiZWZv
cmUgdGhlIAorYXNzb2NpYXRpb24gYWJvcnRzLiBUaGUgZGVmYXVsdCBpcyBzZXQgdG8gMzAuCisJ
CQkJCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfcGF0aFxfcGZc
X3RocmVzaG9sZCgpfQorVEJECitEZWZhdWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQu
IERlZmF1bHQ6IDY1NTM1CQkKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX2Fib3J0XF9pZlxfb25lXF8yXF9vbmVcX2hpdHNcX2xpbWl0KCl9CitUQkQKK1doZW4g
b25lLTItb25lIGhpdHMgcWxpbWl0IGFib3J0LiBEZWZhdWx0OiAwCisKKwkJCitcc3Vic2VjdGlv
bntDb250cm9sIHRoZSBTZW5kaW5nIG9mIFNBQ0tzfQorXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxf
c3lzY3RsXF9zZXRcX3NjdHBcX3NhY2tcX2ZyZXFcX2RlZmF1bHQoKX0KK1RoZSBTQUNLIGZyZXF1
ZW5jeSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IGFyZSBhd2FpdGVkLCBiZWZv
cmUgYSBTQUNLIGlzIHNlbnQuIAorVGhlIGRlZmF1bHQgdmFsdWUgaXMgMi4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RlbGF5ZWRcX3NhY2tcX3RpbWVcX2Rl
ZmF1bHQoKX0KK0FzIGEgU0FDSyAoU2VsZWN0aXZlIEFja25vd2xlZ21lbnQpIGlzIHNlbnQgYWZ0
ZXIgZXZlcnkgb3RoZXIgcGFja2V0LCBhIHRpbWVyIGlzIHNldCB0byBzZW5kIGEKK1NBQ0sgaW4g
Y2FzZSBhbm90aGVyIHBhY2tldCBkb2VzIG5vdCBhcnJpdmUgaW4gZHVlIHRpbWUuIFRoZSBkZWZh
dWx0IHZhbHVlIGZvciB0aGlzIHRpbWVyIGlzCisyMDB+bXMuCisKK1xzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9zdHJpY3RcX3NhY2tzKCl9CitUQkQKK1RoaXMgaXMg
YSBmbGFnIHRvIHR1cm4gdGhlIGNvbnRyb2xsaW5nIG9mIHRoZSBjb2hlcmVuY2Ugb2YgU0FDS3Mg
b24gb3Igb2ZmLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcworMSAob24pLgorCitcc3Vic3Vic2VjdGlv
bnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbnJcX3NhY2tcX29uXF9vZmYoKX0KK0lmIGEg
c2xvdyBob3N0cyByZWNlaXZlcyBkYXRhIG9uIGEgbG9zc3kgbGluayBpdCBpcyBwb3NzaWJsZSB0
aGF0IGl0cyByZWNlaXZlciB3aW5kb3cgaXMgZnVsbCBhbmQgbmV3IAorZGF0YSBjYW4gb25seSBi
ZSBhY2NlcHRlZCBpZiBvbmUgY2h1bmsgd2l0aCBhIGhpZ2hlciBUU04gKFRyYW5zbWlzc2lvbiBT
ZXF1ZW5jZSBOdW1iZXIpIHRoYXQgaGFzIAorcHJldmlvdXNseSBiZWVuIGFja25vd2xlZGdlZCBp
cyBkcm9wcGVkLiBBcyBhIGNvbnNlcXVlbmNlIHRoZSBzZW5kZXIgaGFzIHRvIHN0b3JlIGRhdGEs
IGV2ZW4gaWYKK3RoZXkgaGF2ZSBiZWVuIGFja25vd2xlZGdlZCBpbiBjYXNlIHRoZXkgaGF2ZSB0
byBiZSByZXRyYW5zbWl0dGVkLiBJZiB0aGlzIGJlaGF2aW9yIGlzIG5vdCBuZWNlc3NhcnksCitu
b24tcmVuZWdhYmxlIFNBQ0tzIGNhbiBiZSB0dXJuZWQgb24uIAorQnkgZGVmYXVsdCB0aGUgdXNl
IG9mIG5vbi1yZW5lZ2FibGUgU0FDS3MgaXMgdHVybmVkIG9mZi4KKworXHN1YnN1YnNlY3Rpb257
dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2VuYWJsZVxfc2Fja1xfaW1tZWRpYXRlbHkoKX0K
K0luIHNvbWUgY2FzZXMgaXQgaXMgbm90IGRlc2lyYWJsZSB0byB3YWl0IGZvciB0aGUgU0FDSyB0
aW1lciB0byBleHBpcmUgYmVmb3JlIGEgU0FDSyBpcyBzZW50LiBJbiB0aGVzZQorY2FzZXMgYSBi
aXQgY2FsbGVkIFNBQ0stSU1NRURJQVRFTFl+XGNpdGV7c2Fjay1pbW19IGNhbiBiZSBzZXQgdG8g
cHJvdm9rZSB0aGUgaW5zdGFudCBzZW5kaW5nIG9mIGEgU0FDSy4gCitUaGUgZGVmYXVsdCBpcyB0
byB0dXJuIGl0IG9mZi4gCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9z
Y3RwXF9MMlxfYWJjXF92YXJpYWJsZSgpfQorVEJECitTQ1RQIEFCQyBtYXggaW5jcmVhc2UgcGVy
IFNBQ0sgKEwpLiBEZWZhdWx0OiAxCisKK1xzdWJzZWN0aW9ue0NoYW5nZSBNYXggQnVyc3R9CitN
YXggYnVyc3QgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcGFja2V0cyB0aGF0IG1heSBi
ZSBzZW50IGluIG9uZSBmbGlnaHQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxf
c2V0XF9zY3RwXF9tYXhcX2J1cnN0XF9kZWZhdWx0KCl9CitUaGUgZGVmYXVsdCB2YWx1ZSBmb3Ig
bWF4IGJ1cnN0IGlzIDAsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNl
bnQgYXMgYSBmbGlnaHQKK2lzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgcGFyYW1ldGVyLCBidXQgbWF5
IGJlIGJ5IGFub3RoZXIgb25lLCBzZWUgdGhlIG5leHQgcGFyYWdyYXBoLgorCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfdXNlXF9jd25kXF9iYXNlZFxfbWF4YnVy
c3QoKX0KK1RoZSB1c2Ugb2YgbWF4IGJ1cnN0IGlzIGJhc2VkIG9uIHRoZSBzaXplIG9mIHRoZSBj
b25nZXN0aW9uIHdpbmRvdyAoY3duZCkuIAorVGhpcyBwYXJhbWV0ZXIgaXMgc2V0IGJ5IGRlZmF1
bHQuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9oYlxfbWF4
YnVyc3QoKX0KK0hlYXJ0YmVhdHMgYXJlIG1vc3RseSB1c2VkIHRvIHZlcmlmeSBhIHBhdGguIFRo
ZWlyIG51bWJlciBjYW4gYmUgbGltaXRlZC4gVGhlIGRlZmF1bHQgaXMgNC4KKworXHN1YnN1YnNl
Y3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2ZyXF9tYXhcX2J1cnN0XF9kZWZhdWx0
KCl9CitJbiB0aGUgc3RhdGUgb2YgZmFzdCByZXRyYW5zbWlzc2lvbiB0aGUgbnVtYmVyIG9mIHBh
Y2tldCBidXJzdHMgY2FuIGJlIGxpbWl0ZWQuIFRoZSBkZWZhdWx0Cit2YWx1ZSBpcyA0LgorCisK
K1xzdWJzZWN0aW9ue0hhbmRsZSBDaHVua3N9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNj
dGxcX3NldFxfc2N0cFxfcGVlclxfY2h1bmtcX29oKCl9CitJbiBvcmRlciB0byBrZWVwIHRyYWNr
IG9mIHRoZSBwZWVyJ3MgYWR2ZXJ0aXNlZCByZWNlaXZlciB3aW5kb3csIHRoZSBzZW5kZXIgY2Fs
Y3VsYXRlcyB0aGUgd2luZG93IGJ5CitzdWJ0cmFjdGluZyB0aGUgYW1vdW50IG9mIGRhdGEgc2Vu
dC4gWWV0LCBzb21lIE9TcyByZWR1Y2UgdGhlIHJlY2VpdmVyIHdpbmRvdyBieSB0aGUgcmVhbCBz
cGFjZSBuZWVkZWQKK3RvIHN0b3JlIHRoZSBkYXRhLiBUaGlzIHBhcmFtZXRlciBzZXRzIHRoZSBh
ZGRpdGlvbmFsIGFtb3VudCB0byBkZWJpdCB0aGUgcGVlcidzIHJlY2VpdmVyIHdpbmRvdyBwZXIK
K2NodW5rIHNlbnQuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDI1Niwgd2hpY2ggaXMgdGhlIHZhbHVl
IG5lZWRlZCBieSBGcmVlQlNELgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfbWF4XF9jaHVua3NcX29uXF9xdWV1ZSgpfQorVGhpcyBwYXJhbWV0ZXIgc2V0cyB0
aGUgbWF4aW11bSBudW1iZXIgb2YgY2h1bmtzIHRoYXQgY2FuIGJlIHF1ZXVlZCBwZXIgYXNzb2Np
YXRpb24uIFRoZSBkZWZhdWx0IAordmFsdWUgaXMgNTEyLgorCitcc3Vic3Vic2VjdGlvbnt1c3Jz
Y3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWluXF9zcGxpdFxfcG9pbnQoKX0KK1RCRAorVGhlIG1p
bmltdW0gc2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rIGlzIDI5MDQgYnl0ZXMgYnkgZGVmYXVs
dC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2NodW5rc2Nh
bGUoKX0KK1RCRAorVGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHR1bmVkIGZvciBzY2FsaW5nIG9mIG51
bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzLiBUaGUgZGVmYXVsdCBpczEwLgkJCisJCQkJCitc
c3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbWluXF9yZXNpZHVhbCgp
fQorVEJECitUaGlzIHBhcmFtZXRlciBjb25maWd1cmVzIHRoZSBtaW5pbXVtIHNpemUgb2YgdGhl
IHJlc2lkdWFsIGRhdGEgY2h1bmsgaW4gdGhlIHNlY29uZAorcGFydCBvZiB0aGUgc3BsaXQuIFRo
ZSBkZWZhdWx0IGlzIDE0NTIuCisKKworXHN1YnNlY3Rpb257Q2FsY3VsYXRlIFJUVH0KK1RoZSBj
YWxjdWxhdGlvbiBvZiB0aGUgcm91bmQgdHJpcCB0aW1lIChSVFQpIGRlcGVuZHMgb24gc2V2ZXJh
bCBwYXJhbWV0ZXJzLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0
cFxfcnR0dmFyXF9idygpfQorVEJECitTaGlmdCBhbW91bnQgZm9yIGJ3IHNtb290aGluZyBvbiBy
dHQgY2FsYy4gRGVmYXVsdDogNAorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfcnR0dmFyXF9ydHQoKX0KK1RCRAorU2hpZnQgYW1vdW50IGZvciBydHQgc21vb3Ro
aW5nIG9uIHJ0dCBjYWxjLiBEZWZhdWx0OiA1CisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5
c2N0bFxfc2V0XF9zY3RwXF9ydHR2YXJcX2VxcmV0KCl9CitUQkQKK1doYXQgdG8gcmV0dXJuIHdo
ZW4gcnR0IGFuZCBidyBhcmUgdW5jaGFuZ2VkLiBEZWZhdWx0OiAwCisKKworXHN1YnNlY3Rpb257
SW5mbHVlbmNlIHRoZSBDb25nZXN0aW9uIENvbnRyb2x9CitUaGUgY29uZ2VzdGlvbiBjb250cm9s
IHNob3VsZCBwcm90ZWN0IHRoZSBuZXR3b3JrIGFnYWluc3QgZmFzdCBzZW5kZXJzLiAKKworXHN1
YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2VjblxfZW5hYmxlfQorRXhw
bGljaXQgY29uZ2VzdGlvbiBub3RpZmljYXRpb25zIGFyZSB0dXJuZWQgb24gYnkgZGVmYXVsdC4K
KworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RlZmF1bHRcX2Nj
XF9tb2R1bGUoKX0KK1RoaXMgcGFyYW1ldGVyIHNldHMgdGhlIGRlZmF1bHQgYWxnb3JpdGhtIGZv
ciB0aGUgY29uZ2VzdGlvbiBjb250cm9sLgorRGVmYXVsdCBpcyAwLCBpLmUuIHRoZSBvbmUgc3Bl
Y2lmaWVkIGluIFJGQ340OTYwLgorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3Nl
dFxfc2N0cFxfaW5pdGlhbFxfY3duZCgpfQorU2V0IHRoZSBpbml0aWFsIGNvbmdlc3Rpb24gd2lu
ZG93IGluIE1UVXMuIFRoZSBkZWZhdWx0IGlzIDMuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBc
X3N5c2N0bFxfc2V0XF9zY3RwXF91c2VcX2RjY2NcX2VjbigpfQorVEJECitFbmFibGUgZm9yIFJU
Q0MgQ0MgZGF0YWNlbnRlciBFQ04uIERlZmF1bHQ6IDEKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX3N0ZWFkeVxfc3RlcCgpfQorVEJECitIb3cgbWFueSB0aGUg
c2FtZXMgaXQgdGFrZXMgdG8gdHJ5IHN0ZXAgZG93biBvZiBjd25kLiBEZWZhdWx0OiAyMAorCisK
K1xzdWJzZWN0aW9ue0NvbmZpZ3VyZSBBVVRIIGFuZCBBREQtSVB9CitBbiBpbXBvcnRhbnQgZXh0
ZW5zaW9uIG9mIFNDVFAgaXMgdGhlIGR5bmFtaWMgYWRkcmVzcyByZWNvbmZpZ3VyYXRpb25+XGNp
dGV7YWRkaXB9LCBhbHNvIGtub3duIGFzCitBREQtSVAsIHdoaWNoIGFsbG93cyB0aGUgY2hhbmdp
bmcgb2YgYWRkcmVzc2VzIGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgYW4gYXNzb2NpYXRpb24uCitG
b3IgdGhpcyBmZWF0dXJlIHRoZSBBVVRIIGV4dGVuc2lvbn5cY2l0ZXthdXRofSBpcyBuZWNlc3Nh
cnkuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hdXRvXF9h
c2NvbmYoKX0KK0lmIFNDVFAgQXV0by1BU0NPTkYgaXMgZW5hYmxlZCwgdGhlIHBlZXIgaXMgaW5m
b3JtZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3IGFkZHJlc3MKK2lzIGFkZGVkIG9yIHJlbW92
ZWQuIFRoaXMgZmVhdHVyZSBpcyBlbmFibGVkIGJ5IGRlZmF1bHQuCisKK1xzdWJzdWJzZWN0aW9u
e3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9tdWx0aXBsZVxfYXNjb25mcygpfQorQnkgZGVm
YXVsdCB0aGUgc2VuZGluZyBvZiBtdWx0aXBsZSBBU0NPTkZzIGlzIGRpc2FibGVkLgorCitcc3Vi
c3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYXV0aFxfZGlzYWJsZSgpfQor
VGhlIHVzZSBvZiBBVVRILCB3aGljaCBpcyBub3JtYWxseSB0dXJuZWQgb24sIGNhbiBiZSBkaXNh
YmxlZCBieSBzZXR0aW5nIHRoaXMgcGFyYW1ldGVyIHRvIDEuCisKK1xzdWJzdWJzZWN0aW9ue3Vz
cnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9hc2NvbmZcX2F1dGhcX25vY2hrKCl9CitJdCBpcyBh
bHNvIHBvc3NpYmxlIHRvIGRpc2FibGUgdGhlIHJlcXVpcmVtZW50IHRvIHVzZSBBVVRIIGluIGNv
bmp1bmN0aW9uIHdpdGggQURELUlQIGJ5IHNldHRpbmcgdGhpcyBwYXJhbWV0ZXIKK3RvIDEuCisK
KworXHN1YnNlY3Rpb257Q29uY3VycmVudCBNdWx0aXBhdGggVHJhbnNmZXIgKENNVCl9CitBIHBy
b21pbmVudCBmZWF0dXJlIG9mIFNDVFAgaXMgdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBzZXZlcmFs
IGFkZHJlc3NlcyBmb3IgdGhlIHNhbWUgYXNzb2NpYXRpb24uCitPbmUgaXMgdGhlIHByaW1hcnkg
cGF0aCwgYW5kIHRoZSBvdGhlcnMgYXJlIG5lZWRlZCBpbiBjYXNlIG9mIGEgcGF0aCBmYWlsdXJl
LiBVc2luZyBDTVQgdGhlIGRhdGEgaXMgc2VudCAKK29uIHNldmVyYWwgcGF0aHMgdG8gZW5oYW5j
ZSB0aGUgdGhyb3VnaHB1dC4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX2NtdFxfb25cX29mZigpfQorVG8gdHVybiBDTVQgb24sIHRoaXMgcGFyYW1ldGVyIGhh
cyB0byBiZSBzZXQgdG8gMS4KKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRc
X3NjdHBcX2NtdFxfdXNlXF9kYWMoKX0KK1RvIHVzZSBkZWxheWVkIGFja25vd2xlZGdtZW50cyB3
aXRoIENNVCB0aGlzIHBhcmFtZXRlciBoYXMgdG8gYmUgc2V0IHRvIDEuCisKK1xzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9idWZmZXJcX3NwbGl0dGluZygpfQorRm9y
IENNVCBpdCBtYWtlcyBzZW5zZSB0byBzcGxpdCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIg
dG8gaGF2ZSBzaGFyZXMgZm9yIGVhY2ggcGF0aC4gCitCeSBkZWZhdWx0IGJ1ZmZlciBzcGxpdHRp
bmcgaXMgdHVybmVkIG9mZi4KKworCitcc3Vic2VjdGlvbntOZXR3b3JrIEFkZHJlc3MgVHJhbnNs
YXRpb24gKE5BVCl9CitUbyBiZSBhYmxlIHRvIHBhc3MgTkFUIGJveGVzLCB0aGUgYm94ZXMgaGF2
ZSB0byBoYW5kbGUgU0NUUCBwYWNrZXRzIGluIGEgc3BlY2lmaWMgd2F5LgorCitcc3Vic3Vic2Vj
dGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbmF0XF9mcmllbmRseSgpfQorU0NUUCBO
QVQgZnJpZW5kbHkgb3BlcmF0aW9uLiBEZWZhdWx0OjEKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0
cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2luaXRzXF9pbmNsdWRlXF9uYXRcX2ZyaWVuZGx5KCl9CitF
bmFibGUgc2VuZGluZyBvZiB0aGUgbmF0LWZyaWVuZGx5IFNDVFAgb3B0aW9uIG9uIElOSVRzLiBE
ZWZhdWx0OiAwCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF91
ZHBcX3R1bm5lbGluZ1xfcG9ydCgpfQorU2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydC4g
RGVmYXVsdDogOTg5OQorCitcc3Vic2VjdGlvbntTQ1RQIE1vYmlsaXR5fQorXHN1YnN1YnNlY3Rp
b257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX21vYmlsaXR5XF9iYXNlKCl9CitUQkQKK0Vu
YWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkuIERlZmF1bHQ6IDAKKworCitcc3Vic3Vic2VjdGlvbnt1
c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfbW9iaWxpdHlcX2Zhc3RoYW5kb2ZmKCl9CitUQkQK
K0VuYWJsZSBTQ1RQIGZhc3QgaGFuZG9mZi4gZGVmYXVsdDogMAorCisKK1xzdWJzZWN0aW9ue01p
c2NlbGxhbmVvdXN9Citcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxf
bm9cX2NzdW1cX29uXF9sb29wYmFjaygpfQorQ2FsY3VsYXRpbmcgdGhlIGNoZWNrc3VtIGZvciBw
YWNrZXRzIHNlbnQgb24gbG9vcGJhY2sgaXMgdHVybmVkIG9mZiBieSBkZWZhdWx0LgorVG8gdHVy
biBpdCBvbiwgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIDAuCisKK1xzdWJzdWJzZWN0aW9ue3VzcnNj
dHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9uclxfb3V0Z29pbmdcX3N0cmVhbXNcX2RlZmF1bHQoKX0K
K1RoZSBwZWVyIGlzIG5vdGlmaWVkIGFib3V0IHRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFt
cyBpbiB0aGUgSU5JVCBvciBJTklULUFDSyBjaHVuay4KK1RoZSBkZWZhdWx0IGlzIDEwLiAKKwor
XHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3NjdHBcX2RvXF9kcmFpbigpfQor
RGV0ZXJtaW5lcyB3aGV0aGVyIFNDVFAgc2hvdWxkIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxz
LiBEZWZhdWx0OiAxCQkKKworXHN1YnN1YnNlY3Rpb257dXNyc2N0cFxfc3lzY3RsXF9zZXRcX3Nj
dHBcX3N0cmljdFxfZGF0YVxfb3JkZXIoKX0KK1RCRAorRW5mb3JjZSBzdHJpY3QgZGF0YSBvcmRl
cmluZywgYWJvcnQgaWYgY29udHJvbCBpbnNpZGUgZGF0YS4gRGVmYXVsdDogMAorCitcc3Vic3Vi
c2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfZGVmYXVsdFxfc3NcX21vZHVsZSgp
fQorU2V0IHRoZSBkZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZS4gSW1wbGVtZW50ZWQg
bW9kdWxlcyBhcmU6CitTQ1RQXF9TU1xfREVGQVVMVCwgU0NUUFxfU1NcX1JPVU5EXF9ST0JJTiwg
U0NUUFxfU1NcX1JPVU5EXF9ST0JJTlxfUEFDS0VULAorU0NUUFxfU1NcX1BSSU9SSVRZLCBTQ1RQ
XF9TU1xfRkFJUlxfQkFORFdJVEgsIGFuZCBTQ1RQXF9TU1xfRklSU1RcX0NPTUUuCisKK1xzdWJz
dWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWZhdWx0XF9mcmFnXF9pbnRl
cmxlYXZlKCl9CitUQkQKK0RlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSBsZXZlbC4gRGVmYXVs
dDogMQorCitcc3Vic3Vic2VjdGlvbnt1c3JzY3RwXF9zeXNjdGxcX3NldFxfc2N0cFxfYmxhY2to
b2xlKCl9CitUQkQKK0VuYWJsZSBTQ1RQIGJsYWNraG9saW5nLiBEZWZhdWx0OiAwCisKK1xzdWJz
dWJzZWN0aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9sb2dnaW5nXF9sZXZlbCgpfQor
U2V0IHRoZSBsb2dnaW5nIGxldmVsLiBUaGUgZGVmYXVsdCBpcyAwLgorCisKK1xzdWJzdWJzZWN0
aW9ue3VzcnNjdHBcX3N5c2N0bFxfc2V0XF9zY3RwXF9kZWJ1Z1xfb24oKX0KK1R1cm4gZGVidWcg
b3V0cHV0IG9uIG9yIG9mZi4gSXQgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gVG8gb2J0YWluIGRl
YnVnIG91dHB1dCwKK1NDVFBcX0RFQlVHIGhhcyB0byBiZSBzZXQgYXMgYSBjb21waWxlIGZsYWcu
CisKKwkJCQkJCQorJVRoZSBmb2xsb3dpbmcgdmFyaWFibGVzIGFyZSBzdXBwb3J0ZWQ6CislXGJl
Z2lue2xvbmd0YWJsZX17fGx8bHxjfH0gCislXGhsaW5lCisle1xiZnNlcmllcyBQYXJhbWV0ZXJ9
JntcYmZzZXJpZXMgTWVhbmluZ30me1xiZnNlcmllcyBEZWZhdWx0IFZhbHVlfSBcdGFidWxhcm5l
d2xpbmUgCislXGVuZGhlYWQKKyVcaGxpbmUKKyVzY3RwXF9zZW5kc3BhY2UmU2VuZCBidWZmZXIg
c3BhY2UmMTg2NDEzNVx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9yZWN2c3BhY2UmUmVj
ZWl2ZSBidWZmZXIgc3BhY2UmMTg2NDEzNSBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxf
aGFzaHRibHNpemUmVHVuYWJsZSBmb3IgVENCIGhhc2ggdGFibGUgc2l6ZXMmMTAyNCBcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcGNidGJsc2l6ZSZUdW5hYmxlIGZvciBQQ0IgaGFzaCB0
YWJsZSBzaXplcyYyNTYgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3N5c3RlbVxfZnJl
ZVxfcmVzY1xfbGltaXQmQ2FjaGVkIHJlc291cmNlcyBpbiB0aGUgc3lzdGVtJjEwMDAgXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2Fzb2NcX2ZyZWVcX3Jlc2NcX2xpbWl0JkNhc2hlZCBy
ZXNvdXJjZXMgaW4gYW4gYXNzb2NpYXRpb24mMTAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX3J0b1xfbWF4XF9kZWZhdWx0JkRlZmF1bHQgdmFsdWUgZm9yIFJUT1xfbWF4JjYwMDAwfm1z
IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9ydG9cX21pblxfZGVmYXVsdCZEZWZhdWx0
IHZhbHVlIGZvciBSVE9cX21pbiYxMDAwfm1zIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3Rw
XF9ydG9cX2luaXRpYWxcX2RlZmF1bHQmRGVmYXVsdCB2YWx1ZSBmb3IgUlRPXF9pbml0aWFsJjMw
MDB+bXMgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2luaXRcX3J0b1xfbWF4XF9kZWZh
dWx0JkRlZmF1bHQgdmFsdWUgZm9yIHRoZSBtYXhpbXVtIFJUTyY2MDAwMH5tcyBcdGFidWxhcm5l
d2xpbmUKKyAlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAmZm9yIHNlbmRpbmcgYW4gSU5JVCYgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3Zh
bGlkXF9jb29raWVcX2xpZmVcX2RlZmF1bHQmVmFsaWQgY29va2llIGxpZmUgdGltZSY2MDAwMH5t
cyBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfaW5pdFxfcnR4XF9tYXhcX2RlZmF1bHQm
TWF4aW11bSBudW1iZXIgb2YgSU5JVCByZXRyYW5zbWlzc2lvbnMmOCBcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCislc2N0cFxfYXNzb2NcX3J0eFxfbWF4XF9kZWZhdWx0Jk1heGltdW0gbnVtYmVyIG9m
IGZhaWxlZCByZXRyYW5zbWlzc2lvbnMmMTBcdGFidWxhcm5ld2xpbmUKKyUJCQkJCQkmIGJlZm9y
ZSB0aGUgYXNzb2NpYXRpb24gaXMgYWJvcnRlZCZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0
cFxfcGF0aFxfcnR4XF9tYXhcX2RlZmF1bHQmTWF4aW11bSBudW1iZXIgb2YgZmFpbGVkIHJldHJh
bnNtaXNzaW9ucyY1XHRhYnVsYXJuZXdsaW5lCislCQkJCQkJJmJlZm9yZSBhIHBhdGggZmFpbHMm
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2VjblxfZW5hYmxlJkVuYWJsaW5nIGV4cGxp
Y2l0IGNvbmdlc3Rpb24gbm90aWZpY2F0aW9ucyYxXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX3N0cmljdFxfc2Fja3MmQ29udHJvbCB0aGUgY29oZXJlbmNlIG9mIFNBQ0tzJjEgXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2RlbGF5ZWRcX3NhY2tcX3RpbWVcX2RlZmF1bHQmRGVm
YXVsdCBkZWxheWVkIFNBQ0sgdGltZXImMjAwfm1zXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX3NhY2tcX2ZyZXFcX2RlZmF1bHQmRGVmYXVsdCBTQUNLIGZyZXF1ZW5jeSYyIFx0YWJ1bGFy
bmV3bGluZSBcaGxpbmUKKyVzY3RwXF9uclxfc2Fja1xfb25cX29mZiZUdXJuIG5vbi1yZW5lZ2Fi
bGUgU0FDS3Mgb24gb3Igb2ZmJjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2VuYWJs
ZVxfc2Fja1xfaW1tZWRpYXRlbHkmRW5hYmxlIHNlbmRpbmcgb2YgdGhlIFNBQ0stJjAgXHRhYnVs
YXJuZXdsaW5lIAkJCQkJCSZJTU1FRElBVEVMWSBiaXQuJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
KyVzY3RwXF9ub1xfY3N1bVxfb25cX2xvb3BiYWNrJkVuYWJsZSB0aGUgY29tcGlsYXRpb24gb2Yg
dGhlIGNoZWNrc3VtIG9uJjEgXHRhYnVsYXJuZXdsaW5lCislCQkJCQkJJnBhY2tldHMgc2VudCBv
biBsb29wYmFjayZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcGVlclxfY2h1bmtcX29o
JkFtb3VudCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBzZW50JjI1NiBcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCislc2N0cFxfbWF4XF9idXJzdFxfZGVmYXVsdCZEZWZhdWx0IG1heCBidXJz
dCBmb3IgU0NUUCBlbmRwb2ludHMmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdXNl
XF9jd25kXF9iYXNlZFxfbWF4YnVyc3QmVXNlIG1heCBidXJzdCBiYXNlZCBvbiB0aGUgc2l6ZSBv
ZiAmMVx0YWJ1bGFybmV3bGluZQkJCQklCQkJCQkJCSZ0aGUgY29uZ2VzdGlvbiB3aW5kb3cmXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2hiXF9tYXhidXJzdCZDb25maXJtYXRpb24gSGVh
cnRiZWF0IG1heCBidXJzdCY0IFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9tYXhcX2No
dW5rc1xfb25cX3F1ZXVlJkRlZmF1bHQgbWF4IGNodW5rcyBvbiBxdWV1ZSBwZXIgYXNvYyY1MTIg
XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX21pblxfc3BsaXRcX3BvaW50Jk1pbmltdW0g
c2l6ZSB3aGVuIHNwbGl0dGluZyBhIGNodW5rJjI5MDQgXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
JXNjdHBcX2NodW5rc2NhbGUmVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtz
IGFuZCYxMFx0YWJ1bGFybmV3bGluZSAKKyUJCQkJCQkmbWVzc2FnZXMmXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX21idWZcX3RocmVzaG9sZFxfY291bnQmTWF4aW11bSBudW1iZXIgb2Yg
c21hbGwgbWJ1ZnMgaW4gYSBjaGFpbiY1XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2hl
YXJ0YmVhdFxfaW50ZXJ2YWxcX2RlZmF1bHQmRGVhZnVsdCB0aW1lIGJldHdlZW4gdHdvIEhlYXJ0
YmVhdHMmMzAwMDB+bXNcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcG10dVxfcmFpc2Vc
X3RpbWVcX2RlZmF1bHQmRGVmYXVsdCBQTVRVIHJhaXNlIHRpbWVyJjYwMH5zZWNzXHRhYnVsYXJu
ZXdsaW5lIFxobGluZQorJXNjdHBcX3NodXRkb3duXF9ndWFyZFxfdGltZVxfZGVmYXVsdCZEZWZh
dWx0IHNodXRkb3duIGd1YXJkIHRpbWVyJjE4MH5zZWNzXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
JXNjdHBcX3NlY3JldFxfbGlmZXRpbWVcX2RlZmF1bHQmRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUm
MzYwMH5zZWNzIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9hZGRcX21vcmVcX3RocmVz
aG9sZCZUaHJlc2hvbGQgd2hlbiBtb3JlIHNwYWNlIHNob3VsZCAmMTQ1Mlx0YWJ1bGFybmV3bGlu
ZSAKKyUJCQkJCQkmYmUgYWRkZWQgdG8gYSBzb2NrZXQgc2VuZCBidWZmZXImXHRhYnVsYXJuZXds
aW5lIFxobGluZQorJXNjdHBcX25yXF9vdXRnb2luZ1xfc3RyZWFtc1xfZGVmYXVsdCZEZWZhdWx0
IG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zJjEwXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX2NtdFxfb25cX29mZiZUdXJuIENNVCBvbiBvciBvZmYuJjBcdGFidWxhcm5ld2xpbmUgXGhs
aW5lCislc2N0cFxfY210XF91c2VcX2RhYyZVc2UgZGVsYXllZCBhY2tub3dsZWRnbWVudCBmb3Ig
Q01UJjBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfZnJcX21heFxfYnVyc3RcX2RlZmF1
bHQmRGVmYXVsdCBtYXggYnVyc3QgZm9yIFNDVFAgZW5kcG9pbnRzIHdoZW4gJjRcdGFidWxhcm5l
d2xpbmUKKyUJCQkJCQkmZmFzdCByZXRyYW5zbWl0dGluZyZcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfYXV0b1xfYXNjb25mJkVuYWJsZSBTQ1RQIEF1dG8tQVNDT05GJjFcdGFidWxhcm5l
d2xpbmUgXGhsaW5lCislc2N0cFxfbXVsdGlwbGVcX2FzY29uZnMmRW5hYmxlIFNDVFAgTXVsaXBs
ZS1BU0NPTkZzJjAgXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2FzY29uZlxfYXV0aFxf
bm9jaGsmRGlzYWJsZSBTQ1RQIEFTQ09ORiBBVVRIIHJlcXVpcmVtZW50JjBcdGFidWxhcm5ld2xp
bmUgXGhsaW5lCislc2N0cFxfYXV0aFxfZGlzYWJsZSZEaXNhYmxlIFNDVFAgQVVUSCBmdW5jdGlv
biYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX25hdFxfZnJpZW5kbHkmU0NUUCBOQVQg
ZnJpZW5kbHkgb3BlcmF0aW9uJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfaW5pdHNc
X2luY2x1ZGVcX25hdFxfZnJpZW5kbHkmRW5hYmxlIHNlbmRpbmcgb2YgdGhlIG5hdC1mcmllbmRs
eSAmMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJlNDVFAgb3B0aW9uIG9uIElOSVRzLiZcdGFidWxh
cm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdWRwXF90dW5uZWxpbmdcX3BvcnQmU2V0IHRoZSBTQ1RQ
L1VEUCB0dW5uZWxpbmcgcG9ydCY5ODk5XHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2Rv
XF9kcmFpbiZEZXRlcm1pbmVzIHdoZXRoZXIgU0NUUCBzaG91bGQgcmVzcG9uZCYxXHRhYnVsYXJu
ZXdsaW5lCislCQkJCQkmdG8gdGhlIGRyYWluIGNhbGxzJlx0YWJ1bGFybmV3bGluZSBcaGxpbmUK
KyVzY3RwXF9hYm9ydFxfaWZcX29uZVxfMlxfb25lXF9oaXRzXF9saW1pdCZXaGVuIG9uZS0yLW9u
ZSBoaXRzIHFsaW1pdCBhYm9ydCYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9zdHJp
Y3RcX2RhdGFcX29yZGVyJkVuZm9yY2Ugc3RyaWN0IGRhdGEgb3JkZXJpbmcsIGFib3J0IGlmIGNv
bnRyb2wmMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJmluc2lkZSBkYXRhJlx0YWJ1bGFybmV3bGlu
ZSBcaGxpbmUKKyVzY3RwXF9taW5cX3Jlc2lkdWFsJk1pbmltdW0gcmVzaWR1YWwgZGF0YSBjaHVu
ayBpbiBzZWNvbmQmMTQ1Mlx0YWJ1bGFybmV3bGluZQorJQkJCQkJJnBhcnQgb2Ygc3BsaXQmXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX21heFxfcmV0cmFuXF9jaHVuayZNYXhpbXVtIHRp
bWVzIGFuIHVubHVja3kgY2h1bmsgY2FuIGJlJjMwXHRhYnVsYXJuZXdsaW5lCislCQkJCSYgcmV0
cmFuc21pdHRlZCBiZWZvcmUgdGhlIGFzc29jaWF0aW9uIGFib3J0cyZcdGFidWxhcm5ld2xpbmUg
XGhsaW5lCislc2N0cFxfZGVmYXVsdFxfY2NcX21vZHVsZSZEZWZhdWx0IGNvbmdlc3Rpb24gY29u
dHJvbCBtb2R1bGUmMFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9kZWZhdWx0XF9zc1xf
bW9kdWxlJkRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlJjAgXHRhYnVsYXJuZXdsaW5l
IFxobGluZQorJXNjdHBcX2RlZmF1bHRcX2ZyYWdcX2ludGVybGVhdmUmRGVmYXVsdCBmcmFnbWVu
dCBpbnRlcmxlYXZlIGxldmVsJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfbW9iaWxp
dHlcX2Jhc2UmRW5hYmxlIFNDVFAgYmFzZSBtb2JpbGl0eSYwXHRhYnVsYXJuZXdsaW5lIFxobGlu
ZQorJXNjdHBcX21vYmlsaXR5XF9mYXN0aGFuZG9mZiZFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYm
MFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9MMlxfYWJjXF92YXJpYWJsZSZTQ1RQIEFC
QyBtYXggaW5jcmVhc2UgcGVyIFNBQ0sgKEwpJjFcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0
cFxfdnRhZ1xfdGltZVxfd2FpdCZWdGFnIHRpbWUgd2FpdCB0aW1lLCAwIGRpc2FibGVzIGl0LiY2
MH5zZWNzXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX2JsYWNraG9sZSZFbmFibGUgU0NU
UCBibGFja2hvbGluZyYwXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3BhdGhcX3BmXF90
aHJlc2hvbGQmRGVmYXVsdCBwb3RlbnRpYWxseSBmYWlsZWQgdGhyZXNob2xkJjY1NTM1XHRhYnVs
YXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3J0dHZhclxfYncmU2hpZnQgYW1vdW50IGZvciBidyBz
bW9vdGhpbmcgb24gcnR0IGNhbGMmNCBcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfcnR0
dmFyXF9ydHQmU2hpZnQgYW1vdW50IGZvciBydHQgc21vb3RoaW5nIG9uIHJ0dCBjYWxjJjUgXHRh
YnVsYXJuZXdsaW5lIFxobGluZQorJXNjdHBcX3J0dHZhclxfZXFyZXQgJldoYXQgdG8gcmV0dXJu
IHdoZW4gcnR0IGFuZCBidyBhcmUmMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJnVuY2hhbmdlZCZc
dGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfc3RlYWR5XF9zdGVwJkhvdyBtYW55IHRoZSBz
YW1lcyBpdCB0YWtlcyB0byB0cnkgc3RlcCYyMFx0YWJ1bGFybmV3bGluZQorJQkJCQkJJmRvd24g
b2YgY3duZCZcdGFidWxhcm5ld2xpbmUgXGhsaW5lCislc2N0cFxfdXNlXF9kY2NjXF9lY24mRW5h
YmxlIGZvciBSVENDIENDIGRhdGFjZW50ZXIgRUNOJjEgXHRhYnVsYXJuZXdsaW5lIFxobGluZQor
JXNjdHBcX2J1ZmZlclxfc3BsaXR0aW5nJkVuYWJsZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHNwbGl0
dGluZyYwIFx0YWJ1bGFybmV3bGluZSBcaGxpbmUKKyVzY3RwXF9pbml0aWFsXF9jd25kJkluaXRp
YWwgY29uZ2VzdGlvbiB3aW5kb3cgaW4gTVRVcyYzXHRhYnVsYXJuZXdsaW5lIFxobGluZQorJXNj
dHBcX2xvZ2dpbmdcX2xldmVsJkxvZ2dpbmcgbGV2ZWwmMCBcdGFidWxhcm5ld2xpbmUgXGhsaW5l
Cislc2N0cFxfZGVidWdcX29uJlR1cm5zIGRlYnVnIG91dHB1dCBvbiBvciBvZmYuJjAgXHRhYnVs
YXJuZXdsaW5lIFxobGluZQorCislXGNhcHRpb257U3lzY3RsIHZhcmlhYmxlcyBzdXBwb3J0ZWQg
YnkgdXNyc2N0cH0KKyVcZW5ke2xvbmd0YWJsZX0KKworXHNlY3Rpb257RXhhbXBsZXN9Citcc3Vi
c2VjdGlvbntEaXNjYXJkIFNlcnZlcn1cbGFiZWx7c2VydmVyfQorXGJlZ2lue3ZlcmJhdGltfQor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m
dHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgor
ICogVXNhZ2U6IGRpc2NhcmRfc2VydmVyIFtsb2NhbF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNh
cHNfcG9ydF0KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUg
PHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9p
bmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgQlVGRkVSX1NJ
WkUgMTAyNDAKKworY29uc3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQKK3JlY2VpdmVf
Y2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAq
ZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8gcmN2
LCBpbnQgZmxhZ3MpCit7CisgICAgY2hhciBuYW1lW0lORVQ2X0FERFJTVFJMRU5dOworCisgICAg
aWYgKGRhdGEpIHsKKyAgICAgICAgaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworICAg
ICAgICAgICAgcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVkIHJlY2VpdmVkLlxuIiwg
KGludClkYXRhbGVuKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50ZigiTXNn
IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBmcm9tICVzOiV1IG9uIHN0cmVhbSAlZCB3aXRoICIKKyAg
ICAgICAgICAgICAgICAgICAiU1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJWQsIGNvbnRleHQgJXUu
XG4iLAorICAgICAgICAgICAgICAgICAgIChpbnQpZGF0YWxlbiwKKyAgICAgICAgICAgICAgICAg
ICBhZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUID8KKyAgICAgICAgICAgICAgICAgICAgICAg
aW5ldF9udG9wKEFGX0lORVQsICZhZGRyLnNpbi5zaW5fYWRkciwgbmFtZSwgCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKToKKyAgICAgICAgICAgICAg
ICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci5zaW42LnNpbjZfYWRkciwgbmFtZSwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKSwKKyAg
ICAgICAgICAgICAgICAgICBudG9ocyhhZGRyLnNpbi5zaW5fcG9ydCksCisgICAgICAgICAgICAg
ICAgICAgcmN2LnJjdl9zaWQsCisgICAgICAgICAgICAgICAgICAgcmN2LnJjdl9zc24sCisgICAg
ICAgICAgICAgICAgICAgcmN2LnJjdl90c24sCisgICAgICAgICAgICAgICAgICAgbnRvaGwocmN2
LnJjdl9wcGlkKSwKKyAgICAgICAgICAgICAgICAgICByY3YucmN2X2NvbnRleHQpOworICAgICAg
ICB9CisgICAgICAgIGZyZWUoZGF0YSk7CisgICAgfQorICAgIHJldHVybiAxOworfQorCitpbnQK
K21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBzdHJ1Y3Qgc29ja2V0ICpzb2Nr
OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKyAgICBzdHJ1Y3Qgc2N0cF91ZHBlbmNh
cHMgZW5jYXBzOworICAgIHN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworICAgIHVpbnQxNl90IGV2
ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfUkVNT1RFX0VSUk9SLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfU0hVVERPV05fRVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UfTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhdjsKKyAgICBjb25zdCBpbnQgb24gPSAxOworICAgIGlu
dCBuLCBmbGFnczsKKyAgICBzb2NrbGVuX3QgZnJvbV9sZW47CisgICAgY2hhciBidWZmZXJbQlVG
RkVSX1NJWkVdOworICAgIGNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKKyAgICBzdHJ1Y3Qg
c2N0cF9yZWN2dl9ybiBybjsKKyAgICBzb2NrbGVuX3QgaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9yZWN2dl9ybik7CisgICAgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7CisgICAgc3RydWN0
IHNjdHBfbnh0aW5mbyBueHQ7CisgICAgdW5zaWduZWQgaW50IGluZm90eXBlID0gMDsKKworICAg
IGlmIChhcmdjID4gMSkgeworICAgICAgICB1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgdXNyc2N0cF9pbml0KDk4OTkpOworICAgIH0KKyAgICB1c3Jz
Y3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbigwKTsKKyAgICB1c3JzY3RwX3N5c2N0bF9zZXRf
c2N0cF9ibGFja2hvbGUoMik7CisKKyAgICBpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9J
TkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgCisgICAgCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgdXNlX2NiP3JlY2VpdmVfY2I6TlVMTCwgTlVMTCwgMCkpID09IE5VTEwpIHsK
KyAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2Vfc29ja2V0Iik7CisgICAgfQorICAgIGlmICh1c3Jz
Y3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRf
QUREUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCopJm9uLCAoc29j
a2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJzZXRzb2Nrb3B0Iik7
CisgICAgfQorICAgIG1lbXNldCgmYXYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSkpOworICAgIGF2LmFzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisgICAgYXYuYXNzb2NfdmFs
dWUgPSA0NzsKKworICAgIGlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX0NPTlRFWFQsIChjb25zdCB2b2lkKikmYXYsIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8IDApIHsK
KyAgICAgICAgcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisgICAgfQorICAgIGlmIChhcmdjID4gMikg
eworICAgICAgICBtZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2Fw
cykpOworICAgICAgICBlbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0gQUZfSU5FVDY7Cisg
ICAgICAgIGVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworICAgICAgICBp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQ
X0VOQ0FQU19QT1JULCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9p
ZCopJmVuY2FwcywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3Io
InNldHNvY2tvcHQiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtZW1zZXQoJmV2ZW50LCAwLCBz
aXplb2YoZXZlbnQpKTsKKyAgICBldmVudC5zZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FTU09D
OworICAgIGV2ZW50LnNlX29uID0gMTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGlu
dCkoc2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXplb2YodWludDE2X3QpKTsgaSsrKSB7CisgICAgICAg
IGV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKyAgICAgICAgaWYgKHVzcnNjdHBfc2V0
c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50KSkgPCAwKSB7
CisgICAgICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9zZXRzb2Nrb3B0Iik7CisgICAgICAgIH0K
KyAgICB9CisgICAgbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisgICAgYWRkci5zaW42X2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorICAgIGFkZHIuc2luNl9mYW1pbHkgPSBB
Rl9JTkVUNjsKKyAgICBhZGRyLnNpbjZfcG9ydCA9IGh0b25zKDkpOworICAgIGFkZHIuc2luNl9h
ZGRyID0gaW42YWRkcl9hbnk7CisgICAgaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNv
Y2thZGRyICopJmFkZHIsIAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJ1c2Vyc3BhY2VfYmluZCIpOworICAg
IH0KKyAgICBpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisgICAgICAgIHBlcnJv
cigidXNlcnNwYWNlX2xpc3RlbiIpOworICAgIH0KKyAgICB3aGlsZSAoMSkgeworICAgICAgICBp
ZiAodXNlX2NiKSB7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyAgICAg
ICAgICAgIFNsZWVwKDEqMTAwMCk7CisjZWxzZQorICAgICAgICAgICAgc2xlZXAoMSk7CisjZW5k
aWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZyb21fbGVuID0gKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgICAgICAgICBmbGFncyA9IDA7CisgICAg
ICAgICAgICBybi5yZWN2dl9yY3ZpbmZvID0gcmN2OworICAgICAgICAgICAgcm4ucmVjdnZfbnh0
aW5mbyA9IG54dDsKKyAgICAgICAgICAgIG4gPSB1c3JzY3RwX3JlY3Z2KHNvY2ssICh2b2lkKili
dWZmZXIsIEJVRkZFUl9TSVpFLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1
Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcm4sCisJICAgICAgICAg
ICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsKKyAgICAgICAgICAgIGlm
IChuID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04p
IHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJOb3RpZmljYXRpb24gb2YgbGVuZ3RoICVk
IHJlY2VpdmVkLlxuIiwgbik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24g
c3RyZWFtICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICIlZCB3aXRoIFNTTiAldSBhbmQg
VFNOICV1LCBQUElEICVkLCBjb250ZXh0ICV1LCAiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiY29tcGxldGUgJWQuXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRy
LCBuYW1lLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERS
U1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcm4ucmVjdnZfcmN2aW5mby5yY3Zfc2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
cm4ucmVjdnZfcmN2aW5mby5yY3Zfc3NuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcm4u
cmVjdnZfcmN2aW5mby5yY3ZfdHNuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbnRvaGwo
cm4ucmVjdnZfcmN2aW5mby5yY3ZfcHBpZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBy
bi5yZWN2dl9yY3ZpbmZvLnJjdl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
KGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorICAgIHVzcnNjdHBfY2xvc2Uoc29jayk7CisgICAgd2hp
bGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisgICAgICAgIFNsZWVwKDEwMDApOworI2Vsc2UKKyAgICAgICAgc2xlZXAoMSk7
CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuICgwKTsKK30KKworXGVuZHt2ZXJiYXRpbX0KKwor
XHN1YnNlY3Rpb257Q2xpZW50fVxsYWJlbHtjbGllbnR9CitcYmVnaW57dmVyYmF0aW19CisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJv
amVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2Fy
ZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBV
c2FnZTogY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9lbmNhcHNfcG9ydCBy
ZW1vdGVfZW5jYXBzX3BvcnRdCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8
c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8
c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2lu
ZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKworaW50IGRvbmUgPSAwOworCitz
dGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29j
a3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1
Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzKQoreworICAgIGlmIChkYXRhID09IE5VTEwp
IHsKKyAgICAgICAgZG9uZSA9IDE7CisgICAgICAgIHVzcnNjdHBfY2xvc2Uoc29jayk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgd3JpdGUoZmlsZW5vKHN0ZG91dCksIGRhdGEsIGRhdGFsZW4pOwor
ICAgICAgICBmcmVlKGRhdGEpOworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworaW50CittYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgc3RydWN0IHNvY2tldCAqc29jazsKKyAg
ICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjQ7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRy
NjsKKyAgICBzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBzOworICAgIGNoYXIgYnVmZmVyWzgw
XTsKKworICAgIGlmIChhcmdjID4gMykgeworICAgICAgICB1c3JzY3RwX2luaXQoYXRvaShhcmd2
WzNdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdXNyc2N0cF9pbml0KDk4OTkpOworICAgIH0K
KyAgICB1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbigwKTsKKyAgICB1c3JzY3RwX3N5
c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisgICAgaWYgKChzb2NrID0gdXNyc2N0cF9zb2Nr
ZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcmVjZWl2ZV9jYiwgTlVMTCwgMCkpID09IE5VTEwpIHsKKyAgICAgICAg
cGVycm9yKCJ1c2Vyc3BhY2Vfc29ja2V0IGlwdjYiKTsKKyAgICB9CisgICAgaWYgKGFyZ2MgPiA0
KSB7CisgICAgICAgIG1lbXNldCgmZW5jYXBzLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfdWRwZW5j
YXBzKSk7CisgICAgICAgIGVuY2Fwcy5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPSBBRl9JTkVUNjsK
KyAgICAgICAgZW5jYXBzLnN1ZV9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisgICAgICAg
IGlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFTU9URV9V
RFBfRU5DQVBTX1BPUlQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2
b2lkKikmZW5jYXBzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc29ja2xlbl90
KXNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKSA8IDApIHsKKyAgICAgICAgICAgIHBlcnJv
cigic2V0c29ja29wdCIpOworICAgICAgICB9CisgICAgfQorICAgIG1lbXNldCgodm9pZCAqKSZh
ZGRyNCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworICAgIG1lbXNldCgodm9pZCAq
KSZhZGRyNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19MaW51eCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KyAgICBhZGRyNC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgYWRk
cjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKyAgICBh
ZGRyNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lO
RVQ2OworICAgIGFkZHI0LnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisgICAgYWRk
cjYuc2luNl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisgICAgaWYgKGluZXRfcHRvbihB
Rl9JTkVUNiwgYXJndlsxXSwgJmFkZHI2LnNpbjZfYWRkcikgPT0gMSkgeworICAgICAgICBpZiAo
dXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcjYsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7
CisgICAgICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9jb25uZWN0Iik7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIp
ID09IDEpIHsKKyAgICAgICAgaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2th
ZGRyICopJmFkZHI0LCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSkgPCAwKSB7CisgICAgICAgICAgICBwZXJyb3IoInVzZXJzcGFjZV9jb25u
ZWN0Iik7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBwcmludGYoIklsbGVnYWwg
ZGVzdGluYXRpb24gYWRkcmVzcy5cbiIpOworICAgIH0KKyAgICB3aGlsZSAoKGZnZXRzKGJ1ZmZl
ciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSAhPSBOVUxMKSAmJiAhZG9uZSkgeworICAgICAgICB1
c3JzY3RwX3NlbmR2KHNvY2ssIGJ1ZmZlciwgc3RybGVuKGJ1ZmZlciksIE5VTEwsIDAsCisJCQkJ
ICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lORk8sIDApOworICAgIH0K
KyAgICBpZiAoIWRvbmUpIHsKKyAgICAgICAgdXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dS
KTsKKyAgICB9CisgICAgd2hpbGUgKCFkb25lKSB7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKyAgICAgICAgU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisgICAgICAgIHNsZWVw
KDEpOworI2VuZGlmCisgICAgfQorICAgIHdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsK
KyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorICAgICAgICBTbGVlcCgxMDAw
KTsKKyNlbHNlCisgICAgICAgIHNsZWVwKDEpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybigw
KTsKK30KKworXGVuZHt2ZXJiYXRpbX0KK1xiaWJsaW9ncmFwaHlzdHlsZXtwbGFpbn0KKyUKK1xi
ZWdpbnt0aGViaWJsaW9ncmFwaHl9ezk5fQorCitcYmliaXRlbXtzb2NrZXRBUEl9CitSLn5TdGV3
YXJ0LCBNLn5UXCJ1eGVuLCBLLn5Qb29uLCBhbmQgVi5+WWFzZXZpY2g6CitcdGV4dGl0e1NvY2tl
dHMgQVBJIEV4dGVuc2lvbnMgZm9yIHRoZSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJv
dG9jb2wgKFNDVFApfS4KK1JGQ342NDU4LCBEZXplbWJlcn4yMDExLgorCitcYmliaXRlbXtTQ1RQ
fQorUi5+U3Rld2FydDoKK1x0ZXh0aXR7U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3Rv
Y29sfS4KK1JGQ340OTYwLCBTZXB0ZW1iZXJ+MjAwNy4KKworCitcYmliaXRlbXthdXRofQorTS5+
VFwidXhlbiwgUi5+U3Rld2FydCwgUC5+TGVpLCBhbmQgRS5+UmVzY29ybGE6CitcdGV4dGl0e0F1
dGhlbnRpY2F0ZWQgQ2h1bmtzIGZvciB0aGUgU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFBy
b3RvY29sIChTQ1RQKX0uCitSRkN+NDg5NSwgQXVndXN0fjIwMDcuCisKK1xiaWJpdGVte3N0cmVh
bVJlc2V0fQorUi5+U3Rld2FydCwgTS5+VFwidXhlbiwgYW5kIFAufkxlaToKK1x0ZXh0aXR7U3Ry
ZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIChTQ1RQKSBTdHJlYW0gUmVjb25maWd1
cmF0aW9ufS4KK1JGQ342NTI1LCBGZWJydWFyeX4yMDEyLgorCisKK1xiaWJpdGVte2FkZGlwfQor
Ui5+U3Rld2FydCwgIFEuflhpZSwgTS5+VFwidXhlbiwgUy5+TWFydXlhbWEsIGFuZCBNLn5Lb3p1
a2E6CitcdGV4dGl0e1N0cmVhbSBDb250cm9sIFRyYW5zbWlzc2lvbiBQcm90b2NvbCAoU0NUUCkg
RHluYW1pYyBBZGRyZXNzIFJlY29uZmlndXJhdGlvbn0uCitSRkN+NTA2MSwgU2VwdGVtYmVyfjIw
MDcuCisKK1xiaWJpdGVte3NhY2staW1tfQorTS5+VFwidXhlbiwgSS5+UlwidW5nZWxlciwgYW5k
IFIuflN0ZXdhcnQ6CitcdGV4dGl0e1NBQ0stSU1NRURJQVRFTFkgRXh0ZW5zaW9uIGZvciB0aGUg
U3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sfS4KK2RyYWZ0LXR1ZXhlbi10c3Z3
Zy1zY3RwLXNhY2staW1tZWRpYXRlbHktMDkgKHdvcmsgaW4gcHJvZ3Jlc3MpLCBBcHJpbH4yMDEy
LgorCitcYmliaXRlbXt1ZHBlbmNhcHN9CitNLn5UXCJ1eGVuIGFuZCBSLn5TdGV3YXJ0CitcdGV4
dGl0e1VEUCBFbmNhcHN1bGF0aW9uIG9mIFNDVFAgUGFja2V0c2x9LgorZHJhZnQtaWV0Zi10c3Z3
Zy1zY3RwLXVkcC1lbmNhcHMtMDMgKHdvcmsgaW4gcHJvZ3Jlc3MpLCBNYXJjaH4yMDEyLgorCitc
ZW5ke3RoZWJpYmxpb2dyYXBoeX0KK1xlbmR7ZG9jdW1lbnR9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9SRUFETUUubWQgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9SRUFETUUubWQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMGYwZjhiMTZjNTE5Y2UwOWVkZjZjOWM0ZmVmMTZiMmNj
NDRiOTQ2NCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvUkVBRE1FLm1kCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL1JF
QURNRS5tZApAQCAtMCwwICsxLDkgQEAKKyMgdXNyc2N0cAorWyFbQ292ZXJpdHkgU2NhbiBCdWls
ZCBTdGF0dXNdKGh0dHBzOi8vc2Nhbi5jb3Zlcml0eS5jb20vcHJvamVjdHMvMTM0MzAvYmFkZ2Uu
c3ZnKV0oaHR0cHM6Ly9zY2FuLmNvdmVyaXR5LmNvbS9wcm9qZWN0cy91c3JzY3RwKQorCitUaGlz
IGlzIGEgdXNlcmxhbmQgU0NUUCBzdGFjayBzdXBwb3J0aW5nIEZyZWVCU0QsIExpbnV4LCBNYWMg
T1MgWCBhbmQgV2luZG93cy4KKworU2VlIFttYW51YWxdKE1hbnVhbC5tZCkgZm9yIG1vcmUgaW5m
b3JtYXRpb24uCisKK1RoZSBzdGF0dXMgb2YgY29udGludW91cyBpbnRlZ3JhdGlvbiB0ZXN0aW5n
IGlzIGF2YWlsYWJsZSBmcm9tIFtncmlkXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL2dy
aWQpIGFuZCBbd2F0ZXJmYWxsXShodHRwOi8vMjEyLjIwMS4xMjEuMTEwOjE4MDEwL3dhdGVyZmFs
bCkuCitJZiB5b3UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhIHNpbmdsZSBicmFuY2gsIGp1c3Qg
YXBwZW5kIGA/YnJhbmNoPUJSQU5DSE5BTUVgIHRvIHRoZSBVUkwsIGZvciBleGFtcGxlIFt3YXRl
cmZhbGxdKGh0dHA6Ly8yMTIuMjAxLjEyMS4xMTA6MTgwMTAvd2F0ZXJmYWxsP2JyYW5jaD1tYXN0
ZXIpLgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFwIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvYm9vdHN0cmFw
CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjg5YzdiYmFi
ZDkwMzkwOTJmNjVjZDUwYmY0OTQxNDEyNGRhNGIxYjcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL2Jv
b3RzdHJhcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9ib290c3RyYXAKQEAgLTAsMCArMSw2NiBAQAorIyEgL2Jp
bi9zaAorIworIyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorIworIyBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0
IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMg
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFT
IElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElT
Q0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworIyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorIyBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworCisjYmFpbCBvdXQgb24gZXJyb3IKK3NldCAtZQor
CisjZGV0ZWN0IChnKWxpYnRvb2xpemUKK2lmIHdoaWNoIGxpYnRvb2xpemUgPi9kZXYvbnVsbAor
dGhlbgorCV9MSUJUT09MSVpFPWB3aGljaCBsaWJ0b29saXplYAorZWxpZiB3aGljaCBnbGlidG9v
bGl6ZSA+L2Rldi9udWxsCit0aGVuCisJX0xJQlRPT0xJWkU9YHdoaWNoIGdsaWJ0b29saXplYAor
ZWxzZQorCWVjaG8gIkVSUk9SOiBJIGNhbm5vdCBmaW5kIGxpYnRvb2xpemUgb3IgZ2xpYnRvb2xp
emUhIgorCWV4aXQgMQorZmkKKworI2V4ZWN1dGUgKGcpbGlidG9vbGl6ZQorJHtfTElCVE9PTEla
RX0KKworI2V4ZWN1dGUgYWNsb2NhbAoraWYgWyAtZSAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwg
XQordGhlbgorICAgYWNsb2NhbCAtSSAvdXNyL2xvY2FsL3NoYXJlL2FjbG9jYWwKK2VsaWYgWyAt
ZSAvdXNyL3NoYXJlL2FjbG9jYWwgXQordGhlbgorICAgYWNsb2NhbCAtSSAvdXNyL3NoYXJlL2Fj
bG9jYWwKK2Vsc2UKKyAgIGFjbG9jYWwKK2ZpCisKKyNleGVjdXRlIGF1dG9jb25mCithdXRvY29u
ZgorCisjZ2VuZXJhdGUgdGhlIC4vY29uZmlndXJlCithdXRvbWFrZSAtLWZvcmVpZ24gLS1hZGQt
bWlzc2luZyAtLWNvcHkKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvY29uZmlndXJlLmFjIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvY29uZmlndXJlLmFjCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMy
ZTQ4YzUzOTEuLmE2YmZiZDkzZDc5NmQ3MmJmYzc2YmEzZjQ5ZWQ0YTA3YTdlY2M1MTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL2NvbmZpZ3VyZS5hYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9jb25maWd1cmUuYWMK
QEAgLTAsMCArMSwxOTUgQEAKK2RubAorZG5sIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hh
ZWwgVHVleGVuCitkbmwKK2RubCBBbGwgcmlnaHRzIHJlc2VydmVkLgorZG5sCitkbmwgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CitkbmwgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCitkbmwgYXJlIG1ldDoKK2RubCAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KK2RubCAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorZG5sICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RubCAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorZG5sIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCitkbmwgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCitkbmwgICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitkbmwKK2RubCBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorZG5sIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorZG5sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitkbmwgQVJFIERJU0NM
QUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKK2RubCBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorZG5sIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitkbmwgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCitkbmwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK2RubCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitk
bmwgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorZG5sIFNVQ0ggREFNQUdFLgorZG5sCisKK0FDX0lOSVQoW2xpYnVz
cnNjdHBdLCBbMC45LjMuMF0pCitBTV9JTklUX0FVVE9NQUtFCisKK0FDX1BST0dfQ0MKK0FDX1BS
T0dfTElCVE9PTAorQUNfQ0FOT05JQ0FMX0hPU1QKK0FDX0NPTkZJR19NQUNST19ESVIoW200XSkK
KworZG5sIERpc2FibGUgcGtnX2NvbmZpZyBzdXBwb3J0IGZvciBub3cKK2RubCBQS0dfUFJPR19Q
S0dfQ09ORklHCitkbmwgUEtHX0lOU1RBTExESVIKKworTElCQ0ZMQUdTPSItRFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUyAtRFNDVFBfU0lNUExFX0FMTE9DQVRPUiAtRF9fVXNlcnNwYWNlX18iCitB
UFBDRkxBR1M9IiIKKworY2FzZSAkaG9zdF9vcyBpbgorZGFyd2luKikKKyAgQ0ZMQUdTPSIkQ0ZM
QUdTIC1zdGQ9Yzk5IC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMgLURfX0FQUExFX1VTRV9S
RkNfMjI5MiIKKyAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19BUFBMRV9fIC1EX19Vc2Vyc3Bh
Y2Vfb3NfRGFyd2luIgorICA7OworZHJhZ29uZmx5KikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9
Yzk5IC1wdGhyZWFkIgorICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX0RyYWdvbkZseV9fIC1E
X19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5IgorICA7OworZnJlZWJzZCopCisgIENGTEFHUz0iJENG
TEFHUyAtc3RkPWM5OSAtcHRocmVhZCIKKyAgaWYgJENDIC0tdmVyc2lvbiB8IGdyZXAgLXEgY2xh
bmc7IHRoZW4KKyAgICBDRkxBR1M9IiRDRkxBR1MgLVduby11bmtub3duLXdhcm5pbmctb3B0aW9u
IgorICAgIExERkxBR1M9IiRMREZMQUdTIC1RdW51c2VkLWFyZ3VtZW50cyIKKyAgZmkKKyAgTElC
Q0ZMQUdTPSIkTElCQ0ZMQUdTIC1VX19GcmVlQlNEX18gLURfX1VzZXJzcGFjZV9vc19GcmVlQlNE
IgorICA7OworbGludXgqKQorICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQgLURf
R05VX1NPVVJDRSIKKyAgTElCQ0ZMQUdTPSIkTElCQ0ZMQUdTIC1EX19Vc2Vyc3BhY2Vfb3NfTGlu
dXgiCisgIDs7CituZXRic2QqKQorICBDRkxBR1M9IiRDRkxBR1MgLXN0ZD1jOTkgLXB0aHJlYWQi
CisgIExJQkNGTEFHUz0iJExJQkNGTEFHUyAtVV9fTmV0QlNEX18gLURfX1VzZXJzcGFjZV9vc19O
ZXRCU0QiCisgIDs7CitvcGVuYnNkKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1zdGQ9Yzk5IC1wdGhy
ZWFkIgorICBMSUJDRkxBR1M9IiRMSUJDRkxBR1MgLVVfX09wZW5CU0RfXyAtRF9fVXNlcnNwYWNl
X29zX09wZW5CU0QiCisgIDs7Citzb2xhcmlzKikKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1EX1hQRzRf
MiIKKyAgOzsKK2VzYWMKKworaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiIC1vICJ4JENDIiA9ICJ4
Y2xhbmciIDsgdGhlbgorICAgICAgICBhY19zdXBwb3J0c19nY2NfZmxhZ3M9eWVzCitmaQorCitp
ZiB0ZXN0ICJ4JGFjX3N1cHBvcnRzX2djY19mbGFncyIgPSAieHllcyIgOyB0aGVuCisgICAgICAg
IENGTEFHUz0iJENGTEFHUyAtcGVkYW50aWMgLVdhbGwiCitmaQorCitBQ19NU0dfQ0hFQ0tJTkco
d2hldGhlciB3ZSBzaG91bGQgdHJlYXQgY29tcGlsZXIgd2FybmluZ3MgYXMgZXJyb3JzKQorQUNf
QVJHX0VOQUJMRSh3YXJuaW5ncy1hcy1lcnJvcnMsCisgIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFi
bGUtd2FybmluZ3MtYXMtZXJyb3JzXSwKKyAgICAgICAgICAgICAgICAgIFt0cmVhdCB3YXJuaW5n
cyBhcyBlcnJvcnMgKG9ubHkgZm9yIEdDQyBvciBjbGFuZykgQDw6QGRlZmF1bHQ9eWVzQDo+QF0p
LAorICAgIGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnM9JGVuYWJsZXZhbCxlbmFibGVfd2Fybmlu
Z3NfYXNfZXJyb3JzPXllcykKK2lmIHRlc3QgIngkYWNfc3VwcG9ydHNfZ2NjX2ZsYWdzIiA9ICJ4
eWVzIiAtYSB4JGVuYWJsZV93YXJuaW5nc19hc19lcnJvcnMgPSB4eWVzOyB0aGVuCisgICAgICAg
IEFDX01TR19SRVNVTFQoeWVzKQorICAgICAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciIKK2Vs
c2UKKyAgICAgICAgQUNfTVNHX1JFU1VMVChubykKK2ZpCisKK0FDX0FSR19FTkFCTEUoaW52YXJp
YW50cywKKyAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1pbnZhcmlhbnRzXSwKKyAgICAgICAg
ICAgICAgICAgIFthZGQgYWRkaXRpb25hbCBydW50aW1lIGNoZWNrcyBAPDpAZGVmYXVsdD1ub0A6
PkBdKSwKKyAgICBlbmFibGVfaW52YXJpYW50cz0kZW5hYmxldmFsLGVuYWJsZV9pbnZhcmlhbnRz
PW5vKQoraWYgdGVzdCB4JGVuYWJsZV9pbnZhcmlhbnRzID0geHllczsgdGhlbgorICAgICAgICBB
Q19ERUZJTkUoSU5WQVJJQU5UUywgMSwgW0FkZCBhZGRpdGlvbmFsIHJ1bnRpbWUgY2hlY2tzXSkK
K2ZpCisKK0FDX0FSR19FTkFCTEUoZGVidWcsCisgIEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUt
ZGVidWddLAorICAgICAgICAgICAgICAgICAgW3Byb3ZpZGUgZGVidWcgaW5mb3JtYXRpb24gQDw6
QGRlZmF1bHQ9eWVzQDo+QF0pLAorICAgIGVuYWJsZV9kZWJ1Zz0kZW5hYmxldmFsLGVuYWJsZV9k
ZWJ1Zz15ZXMpCitpZiB0ZXN0IHgkZW5hYmxlX2RlYnVnID0geHllczsgdGhlbgorICAgICAgICBB
Q19ERUZJTkUoU0NUUF9ERUJVRywgMSwgW1Byb3ZpZGUgZGVidWcgaW5mb3JtYXRpb25dKQorICAg
ICAgICBDRkxBR1M9IiRDRkxBR1MgLWcgLU8wIgorZmkKKworQUNfQVJHX0VOQUJMRShpbmV0LAor
ICBBQ19IRUxQX1NUUklORyggWy0tZW5hYmxlLWluZXRdLAorICAgICAgICAgICAgICAgICAgW1N1
cHBvcnQgSVB2NCBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxlX2luZXQ9JGVuYWJs
ZXZhbCxlbmFibGVfaW5ldD15ZXMpCitpZiB0ZXN0IHgkZW5hYmxlX2luZXQgPSB4eWVzOyB0aGVu
CisgICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQiCisgICAgICAgIEFDX0RFRklO
RShJTkVULCAxLCBbU3VwcG9ydCBJUHY0XSkKK2ZpCisKK0FDX0FSR19FTkFCTEUoaW5ldDYsCisg
IEFDX0hFTFBfU1RSSU5HKCBbLS1lbmFibGUtaW5ldDZdLAorICAgICAgICAgICAgICAgICAgW1N1
cHBvcnQgSVB2NiBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisgICAgZW5hYmxlX2luZXQ2PSRlbmFi
bGV2YWwsZW5hYmxlX2luZXQ2PXllcykKK2lmIHRlc3QgeCRlbmFibGVfaW5ldDYgPSB4eWVzOyB0
aGVuCisgICAgICAgIEFQUENGTEFHUz0iJEFQUENGTEFHUyAtRElORVQ2IgorICAgICAgICBBQ19E
RUZJTkUoSU5FVDYsIDEsIFtTdXBwb3J0IElQdjZdKQorZmkKKworQUNfQVJHX0VOQUJMRShwcm9n
cmFtcywKKyAgQUNfSEVMUF9TVFJJTkcoIFstLWVuYWJsZS1wcm9ncmFtc10sCisgICAgICAgICAg
ICAgICAgICBbYnVpbGQgZXhhbXBsZSBwcm9ncmFtcyBAPDpAZGVmYXVsdD15ZXNAOj5AXSksCisg
ICAgZW5hYmxlX3Byb2dyYW1zPSRlbmFibGV2YWwsZW5hYmxlX3Byb2dyYW1zPXllcykKK2lmIHRl
c3QgeCRlbmFibGVfcHJvZ3JhbXMgPSB4eWVzOyB0aGVuCisgICAgICAgIEFDX0NPTkZJR19GSUxF
Uyhwcm9ncmFtcy9NYWtlZmlsZSkKK2ZpCisKK0FDX0NIRUNLX1RZUEUoc2l6ZV90KQorQUNfQ0hF
Q0tfVFlQRShzc2l6ZV90KQorCitBQ19DSEVDS19GVU5DUyhzb2NrZXQsICwgQUNfQ0hFQ0tfTElC
KHNvY2tldCwgc29ja2V0KSkKK0FDX0NIRUNLX0ZVTkNTKGluZXRfYWRkciwgLCBBQ19DSEVDS19M
SUIobnNsLCBpbmV0X2FkZHIpKQorCitBQ19DSEVDS19IRUFERVJTKHN0ZGF0b21pYy5oKQorQUNf
Q0hFQ0tfSEVBREVSUyhzeXMvcXVldWUuaCkKK0FDX0NIRUNLX0hFQURFUlMobGludXgvaWZfYWRk
ci5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitBQ19DSEVDS19IRUFERVJT
KGxpbnV4L3J0bmV0bGluay5oLCBbXSwgW10sIFsjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCitB
Q19DSEVDS19IRUFERVJTKG5ldGluZXQvaXBfaWNtcC5oLCBbXSwgW10sIFsjaW5jbHVkZSA8bmV0
aW5ldC9pcC5oPl0pCisKK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHIuc2FfbGVuLAor
ICAgICAgICAgICAgICAgIEFDX0RFRklORShIQVZFX1NBX0xFTiwgMSwgW0RlZmluZSB0aGlzIGlm
IHlvdXIgc3RhY2sgaGFzIHNhX2xlbiBpbiBzb2NrYWRkciBzdHJ1Y3QuXSksLAorICAgICAgICAg
ICAgICAgIFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorICAgICAgICAgICAgICAgICAjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAg
ICAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPl0pCisKK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29j
a2FkZHJfaW4uc2luX2xlbiwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9TSU5fTEVO
LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciBJUHY0IGhhcyBzaW5fbGVuIGluIHNvY2thZGRyX2lu
IHN0cnVjdC5dKSwsCisgICAgICAgICAgICAgICAgWyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisg
ICAgICAgICAgICAgICAgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgICAgICAgICAgICAg
I2VuZGlmCisgICAgICAgICAgICAgICAgICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+XSkKKworQUNf
Q0hFQ0tfTUVNQkVSKHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9sZW4sCisgICAgICAgICAgICAg
ICAgQUNfREVGSU5FKEhBVkVfU0lONl9MRU4sIDEsIFtEZWZpbmUgdGhpcyBpZiB5b3VyIElQdjYg
aGFzIHNpbjZfbGVuIGluIHNvY2thZGRyX2luNiBzdHJ1Y3QuXSksLAorICAgICAgICAgICAgICAg
IFsjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorICAgICAgICAgICAgICAgICAjaW5jbHVkZSA8c3lz
L3R5cGVzLmg+CisgICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAgICAjaW5j
bHVkZSA8bmV0aW5ldC9pbi5oPl0pCisKK0FDX0NIRUNLX01FTUJFUihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubi5zY29ubl9sZW4sCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfU0NPTk5fTEVO
LCAxLCBbRGVmaW5lIHRoaXMgaWYgeW91ciB1c2VybGFuZCBzdGFjayBoYXMgc2Nvbm5fbGVuIGlu
IHNvY2thZGRyX2Nvbm4gc3RydWN0Ll0pLCwKKyAgICAgICAgICAgICAgICBbI2luY2x1ZGUgInVz
cnNjdHBsaWIvdXNyc2N0cC5oIl0pCisKK0FDX01TR19DSEVDS0lORyhmb3Igc29ja2xlbl90KQor
QUNfVFJZX0NPTVBJTEUoWyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisgICAgICAgICAgICAgICAg
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorICAgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAg
ICAgICAgICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKKyAgICAgICAgICAgICAgIFtzb2NrbGVu
X3QgeDsgeCA9IDE7IHJldHVybiAoKGludCl4KTtdLAorICAgICAgICAgICAgICAgW0FDX01TR19S
RVNVTFQoeWVzKV0sCisgICAgICAgICAgICAgICBbQUNfTVNHX1JFU1VMVChpbnQpCisgICAgICAg
ICAgICAgICAgQUNfREVGSU5FKHNvY2tsZW5fdCwgaW50LCBbRGVmaW5lIGEgdHlwZSBmb3Igc29j
a2xlbl90Ll0pXSkKKworQUNfQ19CSUdFTkRJQU4KKworQUNfU1VCU1QoW0xJQkNGTEFHU10pCitB
Q19TVUJTVChbQVBQQ0ZMQUdTXSkKK2RubCBBQ19DT05GSUdfRklMRVMoW3VzcnNjdHAucGNdKQor
QUNfT1VUUFVUKE1ha2VmaWxlIHVzcnNjdHBsaWIvTWFrZWZpbGUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0Ly5naXRhdHRyaWJ1dGVzIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC8uZ2l0YXR0cmli
dXRlcwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjA4NGY2YjMxYWU4YTFmZTk1MTk5
NGQ4YzNhN2YyY2FmOTBhYmU3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ly5naXRhdHRyaWJ1dGVzCisrKyAvZGV2L251bGwK
QEAgLTEsMjAgKzAsMCBAQAotc2N0cC5oIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNj
dHBfYXNjb25mLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9hdXRoLmMgc3Zu
LXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9jYWxsb3V0LmMgc3ZuLXByb3BlcnRpZXM9
YWxsb3ctdGFicz1vbgotc2N0cF9jb25zdGFudHMuaCBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJz
PW9uCi1zY3RwX2hlYWRlci5oIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfaW5k
YXRhLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9pbnB1dC5jIHN2bi1wcm9w
ZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfb3NfdXNlcnNwYWNlLmggc3ZuLXByb3BlcnRpZXM9
YWxsb3ctdGFicz1vbgotc2N0cF9vdXRwdXQuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9u
Ci1zY3RwX291dHB1dC5oIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfcGNiLmMg
c3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF9zc19mdW5jdGlvbnMuYyBzdm4tcHJv
cGVydGllcz1hbGxvdy10YWJzPW9uCi1zY3RwX3N5c2N0bC5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93
LXRhYnM9b24KLXNjdHBfdGltZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1zY3Rw
X3VzZXJzcGFjZS5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNjdHBfdXNycmVxLmMg
c3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgotc2N0cF92YXIuaCBzdm4tcHJvcGVydGllcz1h
bGxvdy10YWJzPW9uCi1zY3RwdXRpbC5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLXNj
dHB1dGlsLmggc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHAuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMGUzODA1NDdhNDhmOGI5OWM3NTFmYzYwZTdlMjljYWViOTIwZDAz
Zi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDY2NyArMCwwIEBACi0vKi0KLSAq
IENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3
YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0g
KiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9f
RnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhl
YWQvc3lzL25ldGluZXQvc2N0cC5oIDI5NzY2MiAyMDE2LTA0LTA3IDA5OjEwOjM0WiBycnMgJCIp
OwotI2VuZGlmCi0KLSNpZm5kZWYgX05FVElORVRfU0NUUF9IXwotI2RlZmluZSBfTkVUSU5FVF9T
Q1RQX0hfCi0KLSNpZiAoZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfTGludXgpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSkKLSNpbmNsdWRlIDxz
dGRpbnQuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0KLQotI2lmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmli
dXRlX18oKHBhY2tlZCkpCi0jZWxzZQotI3ByYWdtYSBwYWNrIChwdXNoLCAxKQotI2RlZmluZSBT
Q1RQX1BBQ0tFRAotI2VuZGlmCi0KLS8qCi0gKiBTQ1RQIHByb3RvY29sIC0gUkZDNDk2MC4KLSAq
Lwotc3RydWN0IHNjdHBoZHIgewotCXVpbnQxNl90IHNyY19wb3J0OwkvKiBzb3VyY2UgcG9ydCAq
LwotCXVpbnQxNl90IGRlc3RfcG9ydDsJLyogZGVzdGluYXRpb24gcG9ydCAqLwotCXVpbnQzMl90
IHZfdGFnOwkJLyogdmVyaWZpY2F0aW9uIHRhZyBvZiBwYWNrZXQgKi8KLQl1aW50MzJfdCBjaGVj
a3N1bTsJLyogQ1JDMzJDIGNoZWNrc3VtICovCi0JLyogY2h1bmtzIGZvbGxvdy4uLiAqLwotfSBT
Q1RQX1BBQ0tFRDsKLQotLyoKLSAqIFNDVFAgQ2h1bmtzCi0gKi8KLXN0cnVjdCBzY3RwX2NodW5r
aGRyIHsKLQl1aW50OF90IGNodW5rX3R5cGU7CS8qIGNodW5rIHR5cGUgKi8KLQl1aW50OF90IGNo
dW5rX2ZsYWdzOwkvKiBjaHVuayBmbGFncyAqLwotCXVpbnQxNl90IGNodW5rX2xlbmd0aDsJLyog
Y2h1bmsgbGVuZ3RoICovCi0JLyogb3B0aW9uYWwgcGFyYW1zIGZvbGxvdyAqLwotfSBTQ1RQX1BB
Q0tFRDsKLQotLyoKLSAqIFNDVFAgY2h1bmsgcGFyYW1ldGVycwotICovCi1zdHJ1Y3Qgc2N0cF9w
YXJhbWhkciB7Ci0JdWludDE2X3QgcGFyYW1fdHlwZTsJLyogcGFyYW1ldGVyIHR5cGUgKi8KLQl1
aW50MTZfdCBwYXJhbV9sZW5ndGg7CS8qIHBhcmFtZXRlciBsZW5ndGggKi8KLX0gU0NUUF9QQUNL
RUQ7Ci0KLS8qCi0gKiB1c2VyIHNvY2tldCBvcHRpb25zOiBzb2NrZXQgQVBJIGRlZmluZWQKLSAq
LwotLyoKLSAqIHJlYWQtd3JpdGUgb3B0aW9ucwotICovCi0jZGVmaW5lIFNDVFBfUlRPSU5GTwkJ
CTB4MDAwMDAwMDEKLSNkZWZpbmUgU0NUUF9BU1NPQ0lORk8JCQkweDAwMDAwMDAyCi0jZGVmaW5l
IFNDVFBfSU5JVE1TRwkJCTB4MDAwMDAwMDMKLSNkZWZpbmUgU0NUUF9OT0RFTEFZCQkJMHgwMDAw
MDAwNAotI2RlZmluZSBTQ1RQX0FVVE9DTE9TRQkJCTB4MDAwMDAwMDUKLSNkZWZpbmUgU0NUUF9T
RVRfUEVFUl9QUklNQVJZX0FERFIJMHgwMDAwMDAwNgotI2RlZmluZSBTQ1RQX1BSSU1BUllfQURE
UgkJMHgwMDAwMDAwNwotI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fTEFZRVIJCTB4MDAwMDAwMDgK
LS8qIHNhbWUgYXMgYWJvdmUgKi8KLSNkZWZpbmUgU0NUUF9BREFQVElPTl9MQVlFUgkJMHgwMDAw
MDAwOAotI2RlZmluZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTCQkweDAwMDAwMDA5Ci0jZGVmaW5l
IFNDVFBfUEVFUl9BRERSX1BBUkFNUyAJCTB4MDAwMDAwMGEKLSNkZWZpbmUgU0NUUF9ERUZBVUxU
X1NFTkRfUEFSQU0JCTB4MDAwMDAwMGIKLS8qIGFuY2lsbGFyeSBkYXRhL25vdGlmaWNhdGlvbiBp
bnRlcmVzdCBvcHRpb25zICovCi0jZGVmaW5lIFNDVFBfRVZFTlRTCQkJMHgwMDAwMDAwYyAvKiBk
ZXByZWNhdGVkICovCi0vKiBXaXRob3V0IHRoaXMgYXBwbGllZCB3ZSB3aWxsIGdpdmUgVjQgYW5k
IFY2IGFkZHJlc3NlcyBvbiBhIFY2IHNvY2tldCAqLwotI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQ
RURfVjRfQUREUgkweDAwMDAwMDBkCi0jZGVmaW5lIFNDVFBfTUFYU0VHIAkJCTB4MDAwMDAwMGUK
LSNkZWZpbmUgU0NUUF9ERUxBWUVEX1NBQ0sgICAgICAgICAgICAgICAweDAwMDAwMDBmCi0jZGVm
aW5lIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRSAgICAgICAgMHgwMDAwMDAxMAotI2RlZmluZSBT
Q1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQgICAgIDB4MDAwMDAwMTEKLS8qIGF1dGhlbnRpY2F0
aW9uIHN1cHBvcnQgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0NIVU5LIAkJMHgwMDAwMDAxMgotI2Rl
ZmluZSBTQ1RQX0FVVEhfS0VZIAkJCTB4MDAwMDAwMTMKLSNkZWZpbmUgU0NUUF9ITUFDX0lERU5U
IAkJMHgwMDAwMDAxNAotI2RlZmluZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAJCTB4MDAwMDAwMTUK
LSNkZWZpbmUgU0NUUF9BVVRIX0RFTEVURV9LRVkgCQkweDAwMDAwMDE2Ci0jZGVmaW5lIFNDVFBf
VVNFX0VYVF9SQ1ZJTkZPCQkweDAwMDAwMDE3Ci0jZGVmaW5lIFNDVFBfQVVUT19BU0NPTkYJCTB4
MDAwMDAwMTggLyogcncgKi8KLSNkZWZpbmUgU0NUUF9NQVhCVVJTVAkJCTB4MDAwMDAwMTkgLyog
cncgKi8KLSNkZWZpbmUgU0NUUF9NQVhfQlVSU1QJCQkweDAwMDAwMDE5IC8qIHJ3ICovCi0vKiBh
c3NvYyBsZXZlbCBjb250ZXh0ICovCi0jZGVmaW5lIFNDVFBfQ09OVEVYVCAgICAgICAgICAgICAg
ICAgICAgMHgwMDAwMDAxYSAvKiBydyAqLwotLyogZXhwbGljaXQgRU9SIHNpZ25hbGxpbmcgKi8K
LSNkZWZpbmUgU0NUUF9FWFBMSUNJVF9FT1IgICAgICAgICAgICAgICAweDAwMDAwMDFiCi0jZGVm
aW5lIFNDVFBfUkVVU0VfUE9SVCAgICAgICAgICAgICAgICAgMHgwMDAwMDAxYyAvKiBydyAqLwot
I2RlZmluZSBTQ1RQX0FVVEhfREVBQ1RJVkFURV9LRVkJMHgwMDAwMDAxZAotI2RlZmluZSBTQ1RQ
X0VWRU5UICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWUKLSNkZWZpbmUgU0NUUF9SRUNW
UkNWSU5GTyAgICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFNDVFBfUkVDVk5YVElO
Rk8gICAgICAgICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5G
TyAgICAgICAgICAgIDB4MDAwMDAwMjEKLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAg
ICAgICAgICAweDAwMDAwMDIyCi0jZGVmaW5lIFNDVFBfUEVFUl9BRERSX1RITERTICAgICAgICAg
ICAgMHgwMDAwMDAyMwotI2RlZmluZSBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQgICAgIDB4
MDAwMDAwMjQKLSNkZWZpbmUgU0NUUF9FQ05fU1VQUE9SVEVEICAgICAgICAgICAgICAweDAwMDAw
MDI1Ci0jZGVmaW5lIFNDVFBfUFJfU1VQUE9SVEVEICAgICAgICAgICAgICAgMHgwMDAwMDAyNgot
I2RlZmluZSBTQ1RQX0FVVEhfU1VQUE9SVEVEICAgICAgICAgICAgIDB4MDAwMDAwMjcKLSNkZWZp
bmUgU0NUUF9BU0NPTkZfU1VQUE9SVEVEICAgICAgICAgICAweDAwMDAwMDI4Ci0jZGVmaW5lIFND
VFBfUkVDT05GSUdfU1VQUE9SVEVEICAgICAgICAgMHgwMDAwMDAyOQotI2RlZmluZSBTQ1RQX05S
U0FDS19TVVBQT1JURUQgICAgICAgICAgIDB4MDAwMDAwMzAKLSNkZWZpbmUgU0NUUF9QS1REUk9Q
X1NVUFBPUlRFRCAgICAgICAgICAweDAwMDAwMDMxCi0jZGVmaW5lIFNDVFBfTUFYX0NXTkQgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAzMgotCi0vKgotICogcmVhZC1vbmx5IG9wdGlvbnMKLSAq
LwotI2RlZmluZSBTQ1RQX1NUQVRVUwkJCTB4MDAwMDAxMDAKLSNkZWZpbmUgU0NUUF9HRVRfUEVF
Ul9BRERSX0lORk8JCTB4MDAwMDAxMDEKLS8qIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQgKi8KLSNk
ZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktTIAkJMHgwMDAwMDEwMgotI2RlZmluZSBTQ1RQX0xP
Q0FMX0FVVEhfQ0hVTktTIAkJMHgwMDAwMDEwMwotI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19OVU1C
RVIgICAgICAgICAgIDB4MDAwMDAxMDQgLyogcm8gKi8KLSNkZWZpbmUgU0NUUF9HRVRfQVNTT0Nf
SURfTElTVCAgICAgICAgICAweDAwMDAwMTA1IC8qIHJvICovCi0jZGVmaW5lIFNDVFBfVElNRU9V
VFMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNgotI2RlZmluZSBTQ1RQX1BSX1NUUkVBTV9T
VEFUVVMgICAgICAgICAgIDB4MDAwMDAxMDcKLSNkZWZpbmUgU0NUUF9QUl9BU1NPQ19TVEFUVVMg
ICAgICAgICAgICAweDAwMDAwMTA4Ci0KLS8qCi0gKiB1c2VyIHNvY2tldCBvcHRpb25zOiBCU0Qg
aW1wbGVtZW50YXRpb24gc3BlY2lmaWMKLSAqLwotLyoKLSAqIEJsb2NraW5nIEkvTyBpcyBlbmFi
bGVkIG9uIGFueSBUQ1AgdHlwZSBzb2NrZXQgYnkgZGVmYXVsdC4gRm9yIHRoZSBVRFAKLSAqIG1v
ZGVsIGlmIHRoaXMgaXMgdHVybmVkIG9uIHRoZW4gdGhlIHNvY2tldCBidWZmZXIgaXMgc2hhcmVk
IGZvciBzZW5kCi0gKiByZXNvdXJjZXMgYW1vbmdzdCBhbGwgYXNzb2NpYXRpb25zLiAgVGhlIGRl
ZmF1bHQgZm9yIHRoZSBVRFAgbW9kZWwgaXMgdGhhdAotICogaXMgU1NfTkJJTyBpcyBzZXQuICBX
aGljaCBtZWFucyBhbGwgYXNzb2NpYXRpb25zIGhhdmUgYSBzZXBhcmF0ZSBzZW5kCi0gKiBsaW1p
dCBCVVQgdGhleSB3aWxsIE5PVCBldmVyIEJMT0NLIGluc3RlYWQgeW91IHdpbGwgZ2V0IGFuIGVy
cm9yIGJhY2sKLSAqIEVBR0FJTiBpZiB5b3UgdHJ5IHRvIHNlbmQgdG9vIG11Y2guIElmIHlvdSB3
YW50IHRoZSBibG9ja2luZyBzZW1hbnRpY3MgeW91Ci0gKiBzZXQgdGhpcyBvcHRpb24gYXQgdGhl
IGNvc3Qgb2Ygc2hhcmluZyBvbmUgc29ja2V0IHNlbmQgYnVmZmVyIHNpemUgYW1vbmdzdAotICog
YWxsIGFzc29jaWF0aW9ucy4gUGVlbGVkIG9mZiBzb2NrZXRzIHR1cm4gdGhpcyBvcHRpb24gb2Zm
IGFuZCBibG9jay4gQnV0Ci0gKiBzaW5jZSBib3RoIFRDUCBhbmQgcGVlbGVkIG9mZiBzb2NrZXRz
IGhhdmUgb25seSBvbmUgYXNzb2MgcGVyIHNvY2tldCB0aGlzCi0gKiBpcyBmaW5lLiBJdCBwcm9i
YWJseSBkb2VzIE5PVCBtYWtlIHNlbnNlIHRvIHNldCB0aGlzIG9uIFNTX05CSU8gb24gYSBUQ1AK
LSAqIG1vZGVsIE9SIHBlZWxlZCBvZmYgVURQIG1vZGVsLCBidXQgd2UgZG8gYWxsb3cgeW91IHRv
IGRvIHNvLiBZb3UganVzdCB1c2UKLSAqIHRoZSBub3JtYWwgc3lzY2FsbCB0byB0b2dnbGUgU1Nf
TkJJTyB0aGUgd2F5IHlvdSB3YW50LgotICoKLSAqIEJsb2NraW5nIEkvTyBpcyBjb250cm9sbGVk
IGJ5IHRoZSBTU19OQklPIGZsYWcgb24gdGhlIHNvY2tldCBzdGF0ZSBzb19zdGF0ZQotICogZmll
bGQuCi0gKi8KLQotI2RlZmluZSBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQJMHgwMDAwMDkwMCAv
KiBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqLwotI2RlZmluZSBTQ1RQX1JFU0VUX1NUUkVBTVMJ
CTB4MDAwMDA5MDEgLyogc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqLwotI2RlZmluZSBTQ1RQ
X1JFU0VUX0FTU09DCQkweDAwMDAwOTAyIC8qIHNjdHBfYXNzb2NfdCAqLwotI2RlZmluZSBTQ1RQ
X0FERF9TVFJFQU1TCQkweDAwMDAwOTAzIC8qIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICovCi0K
LS8qIEZvciBlbmFibGUgc3RyZWFtIHJlc2V0ICovCi0jZGVmaW5lIFNDVFBfRU5BQkxFX1JFU0VU
X1NUUkVBTV9SRVEgCTB4MDAwMDAwMDEKLSNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfQVNTT0Nf
UkVRIAkweDAwMDAwMDAyCi0jZGVmaW5lIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEgCTB4
MDAwMDAwMDQKLSNkZWZpbmUgU0NUUF9FTkFCTEVfVkFMVUVfTUFTSwkJMHgwMDAwMDAwNwotLyog
Rm9yIHJlc2V0IHN0cmVhbXMgKi8KLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcJ
MHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lORwkweDAwMDAwMDAy
Ci0KLQotLyogaGVyZSBvbiBkb3duIGFyZSBtb3JlIGltcGxlbWVudGF0aW9uIHNwZWNpZmljICov
Ci0jZGVmaW5lIFNDVFBfU0VUX0RFQlVHX0xFVkVMCQkweDAwMDAxMDA1Ci0jZGVmaW5lIFNDVFBf
Q0xSX1NUQVRfTE9HICAgICAgICAgICAgICAgMHgwMDAwMTAwNwotLyogQ01UIE9OL09GRiBzb2Nr
ZXQgb3B0aW9uICovCi0jZGVmaW5lIFNDVFBfQ01UX09OX09GRiAgICAgICAgICAgICAgICAgMHgw
MDAwMTIwMAotI2RlZmluZSBTQ1RQX0NNVF9VU0VfREFDICAgICAgICAgICAgICAgIDB4MDAwMDEy
MDEKLS8qIEpSUyAtIFBsdWdnYWJsZSBDb25nZXN0aW9uIENvbnRyb2wgU29ja2V0IG9wdGlvbiAq
LwotI2RlZmluZSBTQ1RQX1BMVUdHQUJMRV9DQyAgICAgICAgICAgICAgIDB4MDAwMDEyMDIKLS8q
IFJTIC0gUGx1Z2dhYmxlIFN0cmVhbSBTY2hlZHVsaW5nIFNvY2tldCBvcHRpb24gKi8KLSNkZWZp
bmUgU0NUUF9QTFVHR0FCTEVfU1MJCTB4MDAwMDEyMDMKLSNkZWZpbmUgU0NUUF9TU19WQUxVRQkJ
CTB4MDAwMDEyMDQKLSNkZWZpbmUgU0NUUF9DQ19PUFRJT04JCQkweDAwMDAxMjA1IC8qIE9wdGlv
bnMgZm9yIENDIG1vZHVsZXMgKi8KLS8qIEZvciBJLURBVEEgKi8KLSNkZWZpbmUgU0NUUF9JTlRF
UkxFQVZJTkdfU1VQUE9SVEVECTB4MDAwMDEyMDYKLQotLyogcmVhZCBvbmx5ICovCi0jZGVmaW5l
IFNDVFBfR0VUX1NOREJVRl9VU0UJCTB4MDAwMDExMDEKLSNkZWZpbmUgU0NUUF9HRVRfU1RBVF9M
T0cJCTB4MDAwMDExMDMKLSNkZWZpbmUgU0NUUF9QQ0JfU1RBVFVTCQkJMHgwMDAwMTEwNAotI2Rl
ZmluZSBTQ1RQX0dFVF9OT05DRV9WQUxVRVMgICAgICAgICAgIDB4MDAwMDExMDUKLQotCi0vKiBT
cGVjaWFsIGhvb2sgZm9yIGR5bmFtaWNhbGx5IHNldHRpbmcgcHJpbWFyeSBmb3IgYWxsIGFzc29j
J3MsCi0gKiB0aGlzIGlzIGEgd3JpdGUgb25seSBvcHRpb24gdGhhdCByZXF1aXJlcyByb290IHBy
aXZpbGVnZS4KLSAqLwotI2RlZmluZSBTQ1RQX1NFVF9EWU5BTUlDX1BSSU1BUlkgICAgICAgIDB4
MDAwMDIwMDEKLQotLyogVlJGICh2aXJ0dWFsIHJvdXRlciBmZWF0dXJlKSBhbmQgbXVsdGktVlJG
IHN1cHBvcnQKLSAqIG9wdGlvbnMuIFZSRidzIHByb3ZpZGUgc3BsaXRzIHdpdGhpbiBhIHJvdXRl
cgotICogdGhhdCBnaXZlIHRoZSB2aWV3cyBvZiBtdWx0aXBsZSByb3V0ZXJzLiBBCi0gKiBzdGFu
ZGFyZCBob3N0LCB3aXRob3V0IFZSRiBzdXBwb3J0LCBpcyBqdXN0Ci0gKiBhIHNpbmdsZSBWUkYu
IElmIFZSRidzIGFyZSBzdXBwb3J0ZWQgdGhlbgotICogdGhlIHRyYW5zcG9ydCBtdXN0IGJlIFZS
RiBhd2FyZS4gVGhpcyBtZWFucwotICogdGhhdCBldmVyeSBzb2NrZXQgY2FsbCBjb21pbmcgaW4g
bXVzdCBiZSBkaXJlY3RlZAotICogd2l0aGluIHRoZSBlbmRwb2ludCB0byBvbmUgb2YgdGhlIFZS
RidzIGl0IGJlbG9uZ3MKLSAqIHRvLiBUaGUgZW5kcG9pbnQsIGJlZm9yZSBiaW5kaW5nLCBtYXkg
c2VsZWN0Ci0gKiB0aGUgImRlZmF1bHQiIFZSRiBpdCBpcyBpbiBieSB1c2luZyBhIHNldCBzb2Nr
ZXQKLSAqIG9wdGlvbiB3aXRoIFNDVFBfVlJGX0lELiBUaGlzIHdpbGwgYWxzbwotICogZ2V0IHBy
b3BhZ2F0ZWQgdG8gdGhlIGRlZmF1bHQgVlJGLiBPbmNlIHRoZQotICogZW5kcG9pbnQgYmluZHMg
YW4gYWRkcmVzcyB0aGVuIGl0IENBTk5PVCBhZGQKLSAqIGFkZGl0aW9uYWwgVlJGJ3MgdG8gYmVj
b21lIGEgTXVsdGktVlJGIGVuZHBvaW50LgotICoKLSAqIEJlZm9yZSBCSU5ESU5HIGFkZGl0aW9u
YWwgVlJGJ3MgY2FuIGJlIGFkZGVkIHdpdGgKLSAqIHRoZSBTQ1RQX0FERF9WUkZfSUQgY2FsbCBv
ciBkZWxldGVkIHdpdGgKLSAqIFNDVFBfREVMX1ZSRl9JRC4KLSAqCi0gKiBBc3NvY2lhdGlvbnMg
YXJlIEFMV0FZUyBjb250YWluZWQgaW5zaWRlIGEgc2luZ2xlCi0gKiBWUkYuIFRoZXkgY2Fubm90
IHJlc2lkZSBpbiB0d28gKG9yIG1vcmUpIFZSRidzLiBJbmNvbWluZwotICogcGFja2V0cywgYXNz
dW1pbmcgdGhlIHJvdXRlciBpcyBWUkYgYXdhcmUsIGNhbiBhbHdheXMKLSAqIHRlbGwgdXMgd2hh
dCBWUkYgdGhleSBhcnJpdmVkIG9uLiBBIGhvc3Qgbm90IHN1cHBvcnRpbmcKLSAqIGFueSBWUkYn
cyB3aWxsIGZpbmQgdGhhdCB0aGUgcGFja2V0cyBhbHdheXMgYXJyaXZlZCBvbiB0aGUKLSAqIHNp
bmdsZSBWUkYgdGhhdCB0aGUgaG9zdCBoYXMuCi0gKgotICovCi0KLSNkZWZpbmUgU0NUUF9WUkZf
SUQJCQkweDAwMDAzMDAxCi0jZGVmaW5lIFNDVFBfQUREX1ZSRl9JRAkJCTB4MDAwMDMwMDIKLSNk
ZWZpbmUgU0NUUF9HRVRfVlJGX0lEUwkJMHgwMDAwMzAwMwotI2RlZmluZSBTQ1RQX0dFVF9BU09D
X1ZSRiAgICAgICAgICAgICAgIDB4MDAwMDMwMDQKLSNkZWZpbmUgU0NUUF9ERUxfVlJGX0lEICAg
ICAgICAgICAgICAgICAweDAwMDAzMDA1Ci0KLS8qCi0gKiBJZiB5b3UgZW5hYmxlIHBhY2tldCBs
b2dnaW5nIHlvdSBjYW4gZ2V0Ci0gKiBhIHBvb3IgbWFucyBldGhlcmVhbCBvdXRwdXQgaW4gYmlu
YXJ5Ci0gKiBmb3JtLiBOb3RlIHRoaXMgaXMgYSBjb21waWxlIG9wdGlvbiB0bwotICogdGhlIGtl
cm5lbCwgIFNDVFBfUEFDS0VUX0xPR0dJTkcsIGFuZAotICogd2l0aG91dCBpdCBpbiB5b3VyIGtl
cm5lbCB5b3UKLSAqIHdpbGwgZ2V0IGEgRU9QTk9UU1VQUAotICovCi0jZGVmaW5lIFNDVFBfR0VU
X1BBQ0tFVF9MT0cgICAgICAgICAgICAgMHgwMDAwNDAwMQotCi0vKgotICogaGlkZGVuIGltcGxl
bWVudGF0aW9uIHNwZWNpZmljIG9wdGlvbnMgdGhlc2UgYXJlIE5PVCB1c2VyIHZpc2libGUgKHNo
b3VsZAotICogbW92ZSBvdXQgb2Ygc2N0cC5oKQotICovCi0vKiBzY3RwX2JpbmR4KCkgZmxhZ3Mg
YXMgaGlkZGVuIHNvY2tldCBvcHRpb25zICovCi0jZGVmaW5lIFNDVFBfQklORFhfQUREX0FERFIJ
CTB4MDAwMDgwMDEKLSNkZWZpbmUgU0NUUF9CSU5EWF9SRU1fQUREUgkJMHgwMDAwODAwMgotLyog
SGlkZGVuIHNvY2tldCBvcHRpb24gdGhhdCBnZXRzIHRoZSBhZGRyZXNzZXMgKi8KLSNkZWZpbmUg
U0NUUF9HRVRfUEVFUl9BRERSRVNTRVMJCTB4MDAwMDgwMDMKLSNkZWZpbmUgU0NUUF9HRVRfTE9D
QUxfQUREUkVTU0VTCTB4MDAwMDgwMDQKLS8qIHJldHVybiB0aGUgdG90YWwgY291bnQgaW4gYnl0
ZXMgbmVlZGVkIHRvIGhvbGQgYWxsIGxvY2FsIGFkZHJlc3NlcyBib3VuZCAqLwotI2RlZmluZSBT
Q1RQX0dFVF9MT0NBTF9BRERSX1NJWkUJMHgwMDAwODAwNQotLyogUmV0dXJuIHRoZSB0b3RhbCBj
b3VudCBpbiBieXRlcyBuZWVkZWQgdG8gaG9sZCB0aGUgcmVtb3RlIGFkZHJlc3MgKi8KLSNkZWZp
bmUgU0NUUF9HRVRfUkVNT1RFX0FERFJfU0laRQkweDAwMDA4MDA2Ci0vKiBoaWRkZW4gb3B0aW9u
IGZvciBjb25uZWN0eCAqLwotI2RlZmluZSBTQ1RQX0NPTk5FQ1RfWAkJCTB4MDAwMDgwMDcKLS8q
IGhpZGRlbiBvcHRpb24gZm9yIGNvbm5lY3R4X2RlbGF5ZWQsIHBhcnQgb2Ygc2VuZHggKi8KLSNk
ZWZpbmUgU0NUUF9DT05ORUNUX1hfREVMQVlFRAkJMHgwMDAwODAwOAotI2RlZmluZSBTQ1RQX0NP
Tk5FQ1RfWF9DT01QTEVURSAgICAgICAgIDB4MDAwMDgwMDkKLS8qIGhpZGRlbiBzb2NrZXQgb3B0
aW9uIGJhc2VkIHNjdHBfcGVlbG9mZiAqLwotI2RlZmluZSBTQ1RQX1BFRUxPRkYgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMDgwMGEKLS8qIHRoZSByZWFsIHdvcmtlciBmb3Igc2N0cF9nZXRhZGRy
bGVuKCkgKi8KLSNkZWZpbmUgU0NUUF9HRVRfQUREUl9MRU4gICAgICAgICAgICAgICAweDAwMDA4
MDBiCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0vKiB0ZW1wb3Jhcnkgd29ya2Fyb3VuZCBmb3Ig
QXBwbGUgbGlzdGVuKCkgaXNzdWUsIG5vIGFyZ3MgdXNlZCAqLwotI2RlZmluZSBTQ1RQX0xJU1RF
Tl9GSVgJCQkweDAwMDA4MDBjCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotLyog
d29ya2Fyb3VuZCBmb3IgQ3lnd2luIG9uIFdpbmRvd3M6IHJldHVybnMgdGhlIFNPQ0tFVCBoYW5k
bGUgKi8KLSNkZWZpbmUgU0NUUF9HRVRfSEFORExFCQkJMHgwMDAwODAwZAotI2VuZGlmCi0vKiBE
ZWJ1ZyB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIHB1cmdlZCAqLwotI2RlZmluZSBTQ1RQX1NFVF9J
TklUSUFMX0RCR19TRVEJMHgwMDAwOWYwMAotCi0vKiBKUlMgLSBTdXBwb3J0ZWQgY29uZ2VzdGlv
biBjb250cm9sIG1vZHVsZXMgZm9yIHBsdWdnYWJsZQotICogY29uZ2VzdGlvbiBjb250cm9sCi0g
Ki8KLS8qIFN0YW5kYXJkIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKi8KLSNkZWZpbmUgU0NUUF9D
Q19SRkMyNTgxCQkweDAwMDAwMDAwCi0vKiBIaWdoIFNwZWVkIFRDUCBDb25nZXN0aW9uIENvbnRy
b2wgKEZsb3lkKSAqLwotI2RlZmluZSBTQ1RQX0NDX0hTVENQCQkweDAwMDAwMDAxCi0vKiBIVENQ
IENvbmdlc3Rpb24gQ29udHJvbCAqLwotI2RlZmluZSBTQ1RQX0NDX0hUQ1AJCTB4MDAwMDAwMDIK
LS8qIFJUQ0MgQ29uZ2VzdGlvbiBDb250cm9sIC0gUkZDMjU4MSBwbHVzICovCi0jZGVmaW5lIFND
VFBfQ0NfUlRDQyAgICAgICAgICAgIDB4MDAwMDAwMDMKLQotI2RlZmluZSBTQ1RQX0NDX09QVF9S
VENDX1NFVE1PREUJMHgwMDAwMjAwMAotI2RlZmluZSBTQ1RQX0NDX09QVF9VU0VfRENDQ19FQ04J
MHgwMDAwMjAwMQotI2RlZmluZSBTQ1RQX0NDX09QVF9TVEVBRFlfU1RFUCAgICAgICAgIDB4MDAw
MDIwMDIKLQotI2RlZmluZSBTQ1RQX0NNVF9PRkYgICAgICAgICAgICAwCi0jZGVmaW5lIFNDVFBf
Q01UX0JBU0UgICAgICAgICAgIDEKLSNkZWZpbmUgU0NUUF9DTVRfUlBWMSAgICAgICAgICAgMgot
I2RlZmluZSBTQ1RQX0NNVF9SUFYyICAgICAgICAgICAzCi0jZGVmaW5lIFNDVFBfQ01UX01QVENQ
ICAgICAgICAgIDQKLSNkZWZpbmUgU0NUUF9DTVRfTUFYICAgICAgICAgICAgU0NUUF9DTVRfTVBU
Q1AKLQotLyogUlMgLSBTdXBwb3J0ZWQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlcyBmb3IgcGx1
Z2dhYmxlCi0gKiBzdHJlYW0gc2NoZWR1bGluZwotICovCi0vKiBEZWZhdWx0IHNpbXBsZSByb3Vu
ZC1yb2JpbiAqLwotI2RlZmluZSBTQ1RQX1NTX0RFRkFVTFQJCQkweDAwMDAwMDAwCi0vKiBSZWFs
IHJvdW5kLXJvYmluICovCi0jZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9CSU4JCTB4MDAwMDAwMDEK
LS8qIFJlYWwgcm91bmQtcm9iaW4gcGVyIHBhY2tldCAqLwotI2RlZmluZSBTQ1RQX1NTX1JPVU5E
X1JPQklOX1BBQ0tFVAkweDAwMDAwMDAyCi0vKiBQcmlvcml0eSAqLwotI2RlZmluZSBTQ1RQX1NT
X1BSSU9SSVRZCQkweDAwMDAwMDAzCi0vKiBGYWlyIEJhbmR3aWR0aCAqLwotI2RlZmluZSBTQ1RQ
X1NTX0ZBSVJfQkFORFdJVEgJCTB4MDAwMDAwMDQKLS8qIEZpcnN0LWNvbWUsIGZpcnN0LXNlcnZl
ICovCi0jZGVmaW5lIFNDVFBfU1NfRklSU1RfQ09NRQkJMHgwMDAwMDAwNQotCi0KLS8qIGZyYWdt
ZW50IGludGVybGVhdmUgY29uc3RhbnRzCi0gKiBzZXR0aW5nIG11c3QgYmUgb25lIG9mIHRoZXNl
IG9yCi0gKiBFSU5WQUwgcmV0dXJuZWQuCi0gKi8KLSNkZWZpbmUgU0NUUF9GUkFHX0xFVkVMXzAg
ICAgMHgwMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZSQUdfTEVWRUxfMSAgICAweDAwMDAwMDAxCi0j
ZGVmaW5lIFNDVFBfRlJBR19MRVZFTF8yICAgIDB4MDAwMDAwMDIKLQotLyoKLSAqIHVzZXIgc3Rh
dGUgdmFsdWVzCi0gKi8KLSNkZWZpbmUgU0NUUF9DTE9TRUQJCQkweDAwMDAKLSNkZWZpbmUgU0NU
UF9CT1VORAkJCTB4MTAwMAotI2RlZmluZSBTQ1RQX0xJU1RFTgkJCTB4MjAwMAotI2RlZmluZSBT
Q1RQX0NPT0tJRV9XQUlUCQkweDAwMDIKLSNkZWZpbmUgU0NUUF9DT09LSUVfRUNIT0VECQkweDAw
MDQKLSNkZWZpbmUgU0NUUF9FU1RBQkxJU0hFRAkJMHgwMDA4Ci0jZGVmaW5lIFNDVFBfU0hVVERP
V05fU0VOVAkJMHgwMDEwCi0jZGVmaW5lIFNDVFBfU0hVVERPV05fUkVDRUlWRUQJCTB4MDAyMAot
I2RlZmluZSBTQ1RQX1NIVVRET1dOX0FDS19TRU5UCQkweDAwNDAKLSNkZWZpbmUgU0NUUF9TSFVU
RE9XTl9QRU5ESU5HCQkweDAwODAKLQotLyoKLSAqIFNDVFAgb3BlcmF0aW9uYWwgZXJyb3IgY29k
ZXMgKHVzZXIgdmlzaWJsZSkKLSAqLwotI2RlZmluZSBTQ1RQX0NBVVNFX05PX0VSUk9SCQkweDAw
MDAKLSNkZWZpbmUgU0NUUF9DQVVTRV9JTlZBTElEX1NUUkVBTQkweDAwMDEKLSNkZWZpbmUgU0NU
UF9DQVVTRV9NSVNTSU5HX1BBUkFNCTB4MDAwMgotI2RlZmluZSBTQ1RQX0NBVVNFX1NUQUxFX0NP
T0tJRQkJMHgwMDAzCi0jZGVmaW5lIFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MJCTB4MDAwNAotI2Rl
ZmluZSBTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSCTB4MDAwNQotI2RlZmluZSBTQ1RQX0NB
VVNFX1VOUkVDT0dfQ0hVTksJMHgwMDA2Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJB
TQkweDAwMDcKLSNkZWZpbmUgU0NUUF9DQVVTRV9VTlJFQ09HX1BBUkFNCTB4MDAwOAotI2RlZmlu
ZSBTQ1RQX0NBVVNFX05PX1VTRVJfREFUQQkJMHgwMDA5Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfQ09P
S0lFX0lOX1NIVVRET1dOCTB4MDAwYQotI2RlZmluZSBTQ1RQX0NBVVNFX1JFU1RBUlRfV19ORVdB
RERSCTB4MDAwYgotI2RlZmluZSBTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVAkweDAwMGMK
LSNkZWZpbmUgU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04JMHgwMDBkCi0KLS8qIEVycm9y
IGNhdXNlcyBmcm9tIFJGQzUwNjEgKi8KLSNkZWZpbmUgU0NUUF9DQVVTRV9ERUxFVElOR19MQVNU
X0FERFIJMHgwMGEwCi0jZGVmaW5lIFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0UJMHgwMGEx
Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfREVMRVRJTkdfU1JDX0FERFIJMHgwMGEyCi0jZGVmaW5lIFND
VFBfQ0FVU0VfSUxMRUdBTF9BU0NPTkZfQUNLCTB4MDBhMwotI2RlZmluZSBTQ1RQX0NBVVNFX1JF
UVVFU1RfUkVGVVNFRAkweDAwYTQKLQotLyogRXJyb3IgY2F1c2VzIGZyb20gbmF0LWRyYWZ0ICov
Ci0jZGVmaW5lIFNDVFBfQ0FVU0VfTkFUX0NPTExJRElOR19TVEFURSAgMHgwMGIwCi0jZGVmaW5l
IFNDVFBfQ0FVU0VfTkFUX01JU1NJTkdfU1RBVEUgICAgMHgwMGIxCi0KLS8qIEVycm9yIGNhdXNl
cyBmcm9tIFJGQzQ4OTUgKi8KLSNkZWZpbmUgU0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFDSUQJ
MHgwMTA1Ci0KLS8qCi0gKiBlcnJvciBjYXVzZSBwYXJhbWV0ZXJzICh1c2VyIHZpc2libGUpCi0g
Ki8KLXN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSB7Ci0JdWludDE2X3QgY29kZTsKLQl1aW50
MTZfdCBsZW5ndGg7Ci0JdWludDhfdCBpbmZvW107Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qg
c2N0cF9lcnJvcl9jYXVzZSB7Ci0JdWludDE2X3QgY29kZTsKLQl1aW50MTZfdCBsZW5ndGg7Ci0J
Lyogb3B0aW9uYWwgY2F1c2Utc3BlY2lmaWMgaW5mbyBtYXkgZm9sbG93ICovCi19IFNDVFBfUEFD
S0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSB7Ci0Jc3RydWN0IHNjdHBf
ZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9JTlZBTElEX1NUUkVBTSAqLwot
CXVpbnQxNl90IHN0cmVhbV9pZDsJLyogc3RyZWFtIGlkIG9mIHRoZSBEQVRBIGluIGVycm9yICov
Ci0JdWludDE2X3QgcmVzZXJ2ZWQ7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJv
cl9taXNzaW5nX3BhcmFtIHsKLQlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29k
ZT1TQ1RQX0NBVVNFX01JU1NJTkdfUEFSQU0gKi8KLQl1aW50MzJfdCBudW1fbWlzc2luZ19wYXJh
bXM7CS8qIG51bWJlciBvZiBtaXNzaW5nIHBhcmFtZXRlcnMgKi8KLQl1aW50MTZfdCB0eXBlW107
Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUgewotCXN0
cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfU1RBTEVfQ09P
S0lFICovCi0JdWludDMyX3Qgc3RhbGVfdGltZTsJLyogdGltZSBpbiB1c2VjIG9mIHN0YWxlbmVz
cyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotc3RydWN0IHNjdHBfZXJyb3Jfb3V0X29mX3Jlc291cmNl
IHsKLQlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX09V
VF9PRl9SRVNPVVJDRVMgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2Vycm9yX3Vu
cmVzb2x2X2FkZHIgewotCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVND
VFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBz
Y3RwX2Vycm9yX3VucmVjb2duaXplZF9jaHVuayB7Ci0Jc3RydWN0IHNjdHBfZXJyb3JfY2F1c2Ug
Y2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9VTlJFQ09HX0NIVU5LICovCi0Jc3RydWN0IHNjdHBf
Y2h1bmtoZHIgY2g7LyogaGVhZGVyIGZyb20gY2h1bmsgaW4gZXJyb3IgKi8KLX0gU0NUUF9QQUNL
RUQ7Ci0KLXN0cnVjdCBzY3RwX2Vycm9yX25vX3VzZXJfZGF0YSB7Ci0Jc3RydWN0IHNjdHBfZXJy
b3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9OT19VU0VSX0RBVEEgKi8KLQl1aW50
MzJfdCB0c247CQkJLyogVFNOIG9mIHRoZSBlbXB0eSBkYXRhIGNodW5rICovCi19IFNDVFBfUEFD
S0VEOwotCi1zdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYyB7Ci0Jc3RydWN0IHNj
dHBfZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFD
SUQgKi8KLQl1aW50MTZfdCBobWFjX2lkOwotfSBTQ1RQX1BBQ0tFRDsKLQotLyoKLSAqIE1haW4g
U0NUUCBjaHVuayB0eXBlcyB3ZSBwbGFjZSB0aGVzZSBoZXJlIHNvIG5hdGQgYW5kIGYvdydzIGlu
IHVzZXIgbGFuZAotICogY2FuIGZpbmQgdGhlbS4KLSAqLwotLyoqKioqKioqKioqKjB4MDAgc2Vy
aWVzICoqKioqKioqKioqLwotI2RlZmluZSBTQ1RQX0RBVEEJCTB4MDAKLSNkZWZpbmUgU0NUUF9J
TklUSUFUSU9OCQkweDAxCi0jZGVmaW5lIFNDVFBfSU5JVElBVElPTl9BQ0sJMHgwMgotI2RlZmlu
ZSBTQ1RQX1NFTEVDVElWRV9BQ0sJMHgwMwotI2RlZmluZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNU
CTB4MDQKLSNkZWZpbmUgU0NUUF9IRUFSVEJFQVRfQUNLCTB4MDUKLSNkZWZpbmUgU0NUUF9BQk9S
VF9BU1NPQ0lBVElPTgkweDA2Ci0jZGVmaW5lIFNDVFBfU0hVVERPV04JCTB4MDcKLSNkZWZpbmUg
U0NUUF9TSFVURE9XTl9BQ0sJMHgwOAotI2RlZmluZSBTQ1RQX09QRVJBVElPTl9FUlJPUgkweDA5
Ci0jZGVmaW5lIFNDVFBfQ09PS0lFX0VDSE8JMHgwYQotI2RlZmluZSBTQ1RQX0NPT0tJRV9BQ0sJ
CTB4MGIKLSNkZWZpbmUgU0NUUF9FQ05fRUNITwkJMHgwYwotI2RlZmluZSBTQ1RQX0VDTl9DV1IJ
CTB4MGQKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9DT01QTEVURQkweDBlCi0vKiBSRkM0ODk1ICov
Ci0jZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT04gICAgIDB4MGYKLS8qIEVZIG5yX3NhY2sgY2h1
bmsgaWQqLwotI2RlZmluZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0sJMHgxMAotLyoqKioqKioqKioq
KjB4NDAgc2VyaWVzICoqKioqKioqKioqLwotI2RlZmluZSBTQ1RQX0lEQVRBCQkweDQwCi0vKioq
KioqKioqKioqMHg4MCBzZXJpZXMgKioqKioqKioqKiovCi0vKiBSRkM1MDYxICovCi0jZGVmaW5l
CVNDVFBfQVNDT05GX0FDSwkJMHg4MAotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXBrdGRycHNjdHAg
Ki8KLSNkZWZpbmUgU0NUUF9QQUNLRVRfRFJPUFBFRAkweDgxCi0vKiBkcmFmdC1pZXRmLXN0ZXdh
cnQtc3RycmVzZXQteHh4ICovCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUICAgICAgIDB4ODIK
LQotLyogUkZDNDgyMCAgICAgICAgICAgICAgICAgICAgICAgICAqLwotI2RlZmluZSBTQ1RQX1BB
RF9DSFVOSyAgICAgICAgICAweDg0Ci0vKioqKioqKioqKioqMHhjMCBzZXJpZXMgKioqKioqKioq
KiovCi0vKiBSRkMzNzU4ICovCi0jZGVmaW5lIFNDVFBfRk9SV0FSRF9DVU1fVFNOCTB4YzAKLS8q
IFJGQzUwNjEgKi8KLSNkZWZpbmUgU0NUUF9BU0NPTkYJCTB4YzEKLSNkZWZpbmUgU0NUUF9JRk9S
V0FSRF9DVU1fVFNOCTB4YzIKLQotLyogQUJPUlQgYW5kIFNIVVRET1dOIENPTVBMRVRFIEZMQUcg
Ki8KLSNkZWZpbmUgU0NUUF9IQURfTk9fVENCCQkweDAxCi0KLS8qIFBhY2tldCBkcm9wcGVkIGZs
YWdzICovCi0jZGVmaW5lIFNDVFBfRlJPTV9NSURETEVfQk9YCVNDVFBfSEFEX05PX1RDQgotI2Rl
ZmluZSBTQ1RQX0JBRENSQwkJMHgwMgotI2RlZmluZSBTQ1RQX1BBQ0tFVF9UUlVOQ0FURUQJMHgw
NAotCi0vKiBGbGFnIGZvciBFQ04gLUNXUiAqLwotI2RlZmluZSBTQ1RQX0NXUl9SRURVQ0VfT1ZF
UlJJREUgMHgwMQotI2RlZmluZSBTQ1RQX0NXUl9JTl9TQU1FX1dJTkRPVyAgMHgwMgotCi0jZGVm
aW5lIFNDVFBfU0FUX05FVFdPUktfTUlOCTQwMAkvKiBtaW4gbXMgZm9yIFJUVCB0byBzZXQgc2F0
ZWxsaXRlCi0JCQkJCSAqIHRpbWUgKi8KLSNkZWZpbmUgU0NUUF9TQVRfTkVUV09SS19CVVJTVF9J
TkNSICAyCS8qIGhvdyBtYW55IHRpbWVzIHRvIG11bHRpcGx5IG1heGJ1cnN0Ci0JCQkJCSAqIGlu
IHNhdCAqLwotCi0vKiBEYXRhIENodWNrIFNwZWNpZmljIEZsYWdzICovCi0jZGVmaW5lIFNDVFBf
REFUQV9GUkFHX01BU0sgICAgICAgIDB4MDMKLSNkZWZpbmUgU0NUUF9EQVRBX01JRERMRV9GUkFH
ICAgICAgMHgwMAotI2RlZmluZSBTQ1RQX0RBVEFfTEFTVF9GUkFHICAgICAgICAweDAxCi0jZGVm
aW5lIFNDVFBfREFUQV9GSVJTVF9GUkFHICAgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9EQVRBX05P
VF9GUkFHICAgICAgICAgMHgwMwotI2RlZmluZSBTQ1RQX0RBVEFfVU5PUkRFUkVEICAgICAgICAw
eDA0Ci0jZGVmaW5lIFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZIDB4MDgKLS8qIEVDTiBOb25j
ZTogU0FDSyBDaHVuayBTcGVjaWZpYyBGbGFncyAqLwotI2RlZmluZSBTQ1RQX1NBQ0tfTk9OQ0Vf
U1VNICAgICAgICAweDAxCi0KLS8qIENNVCBEQUMgYWxnb3JpdGhtIFNBQ0sgZmxhZyAqLwotI2Rl
ZmluZSBTQ1RQX1NBQ0tfQ01UX0RBQyAgICAgICAgICAweDgwCi0KLS8qCi0gKiBQQ0IgZmxhZ3Mg
KGluIHNjdHBfZmxhZ3MgYml0bWFzaykuCi0gKiBOb3RlIHRoZSBmZWF0dXJlcyBhbmQgZmxhZ3Mg
YXJlIG1lYW50Ci0gKiBmb3IgdXNlIGJ5IG5ldHN0YXQuCi0gKi8KLSNkZWZpbmUgU0NUUF9QQ0Jf
RkxBR1NfVURQVFlQRQkJMHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
CQkweDAwMDAwMDAyCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMCQkweDAwMDAwMDA0
Ci0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORwkweDAwMDAwMDA4Ci0jZGVmaW5lIFND
VFBfUENCX0ZMQUdTX1VOQk9VTkQJCTB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
Q0xPU0VfSVAgICAgICAgICAweDAwMDQwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBU19D
T05ORUNURUQgICAgMHgwMDA4MDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19XQVNfQUJPUlRF
RCAgICAgIDB4MDAxMDAwMDAKLS8qIFRDUCBtb2RlbCBzdXBwb3J0ICovCi0KLSNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfQ09OTkVDVEVECTB4MDAyMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
SU5fVENQUE9PTAkweDAwNDAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRQkw
eDAwODAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQJMHgwMTAwMDAwMAot
I2RlZmluZSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQJMHgwMjAwMDAwMAotI2RlZmluZSBTQ1RQ
X1BDQl9GTEFHU19CT1VORF9WNgkJMHgwNDAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19C
TE9DS0lOR19JTwkweDA4MDAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05F
CTB4MTAwMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUJMHgyMDAw
MDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFECTB4NDAwMDAwMDAK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JPVU5E
X0NPTk4gICAgICAgMHg4MDAwMDAwMAotCi0vKiBmbGFncyB0byBjb3B5IHRvIG5ldyBQQ0IgKi8K
LSNkZWZpbmUgU0NUUF9QQ0JfQ09QWV9GTEFHUwkJKFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMfFwK
LQkJCQkJIFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVHxcCi0JCQkJCSBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNnxcCi0JCQkJCSBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKQotI2Vsc2UKLQotLyog
ZmxhZ3MgdG8gY29weSB0byBuZXcgUENCICovCi0jZGVmaW5lIFNDVFBfUENCX0NPUFlfRkxBR1MJ
CShTQ1RQX1BDQl9GTEFHU19CT1VOREFMTHxcCi0JCQkJCSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5Q
VVR8XAotCQkJCQkgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpCi0jZW5kaWYKLQotLyoKLSAqIFBD
QiBGZWF0dXJlcyAoaW4gc2N0cF9mZWF0dXJlcyBiaXRtYXNrKQotICovCi0jZGVmaW5lIFNDVFBf
UENCX0ZMQUdTX0RPX05PVF9QTVRVRCAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMQotI2RlZmluZSBT
Q1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTyAgICAgICAweDAwMDAwMDAwMDAwMDAwMDIgLyogZGVw
cmVjYXRlZCAqLwotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJFQVQgICAweDAw
MDAwMDAwMDAwMDAwMDQKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFICAg
MHgwMDAwMDAwMDAwMDAwMDA4Ci0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RS
TVMgIDB4MDAwMDAwMDAwMDAwMDAxMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYg
ICAgICAgICAweDAwMDAwMDAwMDAwMDAwMjAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQVVUT19B
U0NPTkYgICAgICAgMHgwMDAwMDAwMDAwMDAwMDQwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1pF
Uk9fQ09QWV9BQ1RJVkUgIDB4MDAwMDAwMDAwMDAwMDA4MAotLyogc29ja2V0IG9wdGlvbnMgKi8K
LSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSAgICAgICAgICAgMHgwMDAwMDAwMDAwMDAw
MTAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSAgICAgICAgIDB4MDAwMDAwMDAw
MDAwMDIwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCAgICAweDAwMDAw
MDAwMDAwMDA0MDAgLyogZGVwcmVjYXRlZCAqLwotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNW
QVNTT0NFVk5UICAgICAweDAwMDAwMDAwMDAwMDA4MDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBBRERSRVZOVCAgICAgMHgwMDAwMDAwMDAwMDAxMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZQRUVSRVJSICAgICAgIDB4MDAwMDAwMDAwMDAwMjAwMAotI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19SRUNWU0VOREZBSUxFVk5UICAweDAwMDAwMDAwMDAwMDQwMDAgLyogZGVwcmVjYXRl
ZCAqLwotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UICAweDAwMDAwMDAw
MDAwMDgwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQURBUFRBVElPTkVWTlQgICAgMHgwMDAw
MDAwMDAwMDEwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCAgICAgICAgIDB4
MDAwMDAwMDAwMDAyMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCAgICAgICAg
ICAweDAwMDAwMDAwMDAwNDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VU
RVZOVCAgMHgwMDAwMDAwMDAwMDgwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05PX0ZSQUdN
RU5UICAgICAgIDB4MDAwMDAwMDAwMDEwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19FWFBM
SUNJVF9FT1IgICAgICAweDAwMDAwMDAwMDA0MDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
TkVFRFNfTUFQUEVEX1Y0ICAgMHgwMDAwMDAwMDAwODAwMDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZM
QUdTX01VTFRJUExFX0FTQ09ORlMgIDB4MDAwMDAwMDAwMTAwMDAwMAotI2RlZmluZSBTQ1RQX1BD
Ql9GTEFHU19QT1JUUkVVU0UgICAgICAgICAweDAwMDAwMDAwMDIwMDAwMDAKLSNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfRFJZRVZOVCAgICAgICAgICAgMHgwMDAwMDAwMDA0MDAwMDAwCi0jZGVmaW5l
IFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPICAgICAgIDB4MDAwMDAwMDAwODAwMDAwMAotI2Rl
ZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTyAgICAgICAweDAwMDAwMDAwMTAwMDAwMDAK
LSNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UICAgMHgwMDAwMDAwMDIwMDAw
MDAwCi0jZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UIDB4MDAwMDAwMDA0
MDAwMDAwMAotI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCAweDAwMDAw
MDAwODAwMDAwMDAKLQotLyotCi0gKiBtb2JpbGl0eV9mZWF0dXJlcyBwYXJhbWV0ZXJzIChieSBt
aWNjaGllKS5Ob3RlCi0gKiB0aGVzZSBmZWF0dXJlcyBhcmUgYXBwbGllZCBhZ2FpbnN0IHRoZQot
ICogc2N0cF9tb2JpbGl0eV9mZWF0dXJlcyBmbGFncy4uIG5vdCB0aGUgc2N0cF9mZWF0dXJlcwot
ICogZmxhZ3MuCi0gKi8KLSNkZWZpbmUgU0NUUF9NT0JJTElUWV9CQVNFICAgICAgICAgICAgICAg
MHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGICAgICAgICAweDAw
MDAwMDAyCi0jZGVmaW5lIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEICAgICAgIDB4MDAwMDAw
MDQKLQotCi0jZGVmaW5lIFNDVFBfU01BTExFU1RfUE1UVSA1MTIJIC8qIHNtYWxsZXN0IHBtdHUg
YWxsb3dlZCB3aGVuIGRpc2FibGluZyBQTVRVIGRpc2NvdmVyeSAqLwotCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI3ByYWdtYSBwYWNrKHBvcCkKLSNlbmRpZgotI3VuZGVm
IFNDVFBfUEFDS0VECi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0KLS8qIFRoaXMg
ZGljdGF0ZXMgdGhlIHNpemUgb2YgdGhlIHBhY2tldAotICogY29sbGVjdGlvbiBidWZmZXIuIFRo
aXMgb25seSBhcHBsaWVzCi0gKiBpZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HIGlzIGVuYWJsZWQgaW4K
LSAqIHlvdXIgY29uZmlnLgotICovCi0jZGVmaW5lIFNDVFBfUEFDS0VUX0xPR19TSVpFIDY1NTM2
Ci0KLS8qIE1heGltdW0gZGVsYXlzIGFuZCBzdWNoIGEgdXNlciBjYW4gc2V0IGZvciBvcHRpb25z
IHRoYXQKLSAqIHRha2UgbXMuCi0gKi8KLSNkZWZpbmUgU0NUUF9NQVhfU0FDS19ERUxBWSA1MDAg
LyogcGVyIFJGQzQ5NjAgKi8KLSNkZWZpbmUgU0NUUF9NQVhfSEJfSU5URVJWQUwgMTQ0MDAwMDAg
LyogNCBob3VycyBpbiBtcyAqLwotI2RlZmluZSBTQ1RQX01BWF9DT09LSUVfTElGRSAgMzYwMDAw
MCAvKiAxIGhvdXIgaW4gbXMgKi8KLQotCi0vKiBUeXBlcyBvZiBsb2dnaW5nL0tUUiB0cmFjaW5n
ICB0aGF0IGNhbiBiZSBlbmFibGVkIHZpYSB0aGUKLSAqIHN5c2N0bCBuZXQuaW5ldC5zY3RwLnNj
dHBfbG9nZ2luZy4gWW91IG11c3QgYWxzbyBlbmFibGUKLSAqIFNVQlNZUyB0cmFjaW5nLgotICog
Tm90ZSB0aGF0IHlvdSBtdXN0IGhhdmUgdGhlIFNDVFAgb3B0aW9uIGluIHRoZSBrZXJuZWwKLSAq
IHRvIGVuYWJsZSB0aGVzZSBhcyB3ZWxsLgotICovCi0jZGVmaW5lIFNDVFBfQkxLX0xPR0dJTkdf
RU5BQkxFCQkJCTB4MDAwMDAwMDEKLSNkZWZpbmUgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFCQkJ
MHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAwMDA0
Ci0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDAyMAotI2RlZmlu
ZSBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFCQkJCTB4MDAwMDAwNDAKLSNkZWZpbmUgU0NUUF9MT0NL
X0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDA4MAotI2RlZmluZSBTQ1RQX01BUF9MT0dHSU5HX0VO
QUJMRQkJCQkweDAwMDAwMTAwCi0jZGVmaW5lIFNDVFBfTUJDTlRfTE9HR0lOR19FTkFCTEUJCQkw
eDAwMDAwMjAwCi0jZGVmaW5lIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDA0MDAK
LSNkZWZpbmUgU0NUUF9OQUdMRV9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDA4MDAKLSNkZWZpbmUg
U0NUUF9SRUNWX1JXTkRfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAxMDAwCi0jZGVmaW5lIFNDVFBf
UlRUVkFSX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMjAwMAotI2RlZmluZSBTQ1RQX1NBQ0tfTE9H
R0lOR19FTkFCTEUJCQkweDAwMDA0MDAwCi0jZGVmaW5lIFNDVFBfU0FDS19SV05EX0xPR0dJTkdf
RU5BQkxFCQkJMHgwMDAwODAwMAotI2RlZmluZSBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFCQkJCTB4
MDAwMTAwMDAKLSNkZWZpbmUgU0NUUF9TVFJfTE9HR0lOR19FTkFCTEUJCQkJMHgwMDAyMDAwMAot
I2RlZmluZSBTQ1RQX1dBS0VfTE9HR0lOR19FTkFCTEUJCQkweDAwMDQwMDAwCi0jZGVmaW5lIFND
VFBfTE9HX01BWEJVUlNUX0VOQUJMRQkJCTB4MDAwODAwMDAKLSNkZWZpbmUgU0NUUF9MT0dfUldO
RF9FTkFCTEUgICAgCQkJMHgwMDEwMDAwMAotI2RlZmluZSBTQ1RQX0xPR19TQUNLX0FSUklWQUxT
X0VOQUJMRQkJCTB4MDAyMDAwMDAKLSNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hVTktfRU5BQkxFCQkJ
MHgwMDQwMDAwMAotI2RlZmluZSBTQ1RQX0xUUkFDRV9FUlJPUl9FTkFCTEUJCQkweDAwODAwMDAw
Ci0jZGVmaW5lIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORwkJCTB4MDEwMDAwMDAKLSNkZWZpbmUg
U0NUUF9USFJFU0hPTERfTE9HR0lORwkJCQkweDAyMDAwMDAwCi0jZGVmaW5lIFNDVFBfTE9HX0FU
X1NFTkRfMl9TQ1RQCQkJCTB4MDQwMDAwMDAKLSNkZWZpbmUgU0NUUF9MT0dfQVRfU0VORF8yX09V
VFEJCQkJMHgwODAwMDAwMAotI2RlZmluZSBTQ1RQX0xPR19UUllfQURWQU5DRQkJCQkweDEwMDAw
MDAwCi0KLSNlbmRpZgkJCQkvKiAhX05FVElORVRfU0NUUF9IXyAqLwpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29u
Zi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMjM0ODEwNjcwODkwNDI1OTFmZTBm
Nzk3MTcwM2UwZTlhNzc4MmY2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYuYworKysgL2Rldi9udWxsCkBA
IC0xLDM1NTAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lz
Y28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAy
MDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEp
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICog
ICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBT
eXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5o
PgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYXNjb25mLmMgMzIx
MjA0IDIwMTctMDctMTkgMTQ6Mjg6NThaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHB1dGlsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLQot
LyoKLSAqIGRlYnVnIGZsYWdzOgotICogU0NUUF9ERUJVR19BU0NPTkYxOiBwcm90b2NvbCBpbmZv
LCBnZW5lcmFsIGluZm8gYW5kIGVycm9ycwotICogU0NUUF9ERUJVR19BU0NPTkYyOiBkZXRhaWxl
ZCBpbmZvCi0gKi8KLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmluZSBBUFBMRV9GSUxF
X05PIDEKLSNlbmRpZgotCi0vKgotICogUkZDIDUwNjEKLSAqCi0gKiBBbiBBU0NPTkYgcGFyYW1l
dGVyIHF1ZXVlIGV4aXN0cyBwZXIgYXNvYyB3aGljaCBob2xkcyB0aGUgcGVuZGluZyBhZGRyZXNz
Ci0gKiBvcGVyYXRpb25zLiAgTGlzdHMgYXJlIHVwZGF0ZWQgdXBvbiByZWNlaXB0IG9mIEFTQ09O
Ri1BQ0suCi0gKgotICogQSByZXN0cmljdGVkX2FkZHJzIGxpc3QgZXhpc3RzIHBlciBhc3NvYyB0
byBob2xkIGxvY2FsIGFkZHJlc3NlcyB0aGF0IGFyZQotICogbm90ICh5ZXQpIHVzYWJsZSBieSB0
aGUgYXNzb2MgYXMgYSBzb3VyY2UgYWRkcmVzcy4gIFRoZXNlIGFkZHJlc3NlcyBhcmUKLSAqIGVp
dGhlciBwZW5kaW5nIGFuIEFTQ09ORiBvcGVyYXRpb24gKGFuZCBleGlzdCBvbiB0aGUgQVNDT05G
IHBhcmFtZXRlcgotICogcXVldWUpLCBvciB0aGV5IGFyZSBwZXJtYW5lbnRseSByZXN0cmljdGVk
ICh0aGUgcGVlciBoYXMgcmV0dXJuZWQgYW4KLSAqIEVSUk9SIGluZGljYXRpb24gdG8gYW4gQVND
T05GKEFERCksIG9yIHRoZSBwZWVyIGRvZXMgbm90IHN1cHBvcnQgQVNDT05GKS4KLSAqCi0gKiBE
ZWxldGVkIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGltbWVkaWF0ZWx5IHJlbW92ZWQgZnJvbSB0aGUg
bGlzdHMgYXMgdGhleSB3aWxsCi0gKiAoc2hvcnRseSkgbm8gbG9uZ2VyIGV4aXN0IGluIHRoZSBr
ZXJuZWwuICBXZSBzZW5kIEFTQ09ORnMgYXMgYSBjb3VydGVzeSwKLSAqIG9ubHkgaWYgYWxsb3dl
ZC4KLSAqLwotCi0vKgotICogQVNDT05GIHBhcmFtZXRlciBwcm9jZXNzaW5nLgotICogcmVzcG9u
c2VfcmVxdWlyZWQ6IHNldCBpZiBhIHJlcGx5IGlzIHJlcXVpcmVkIChlZy4gU1VDQ0VTU19SRVBP
UlQpLgotICogcmV0dXJucyBhIG1idWYgdG8gYW4gImVycm9yIiByZXNwb25zZSBwYXJhbWV0ZXIg
b3IgTlVMTC8ic3VjY2VzcyIgaWYgb2suCi0gKiBGSVg6IGFsbG9jYXRpbmcgdGhpcyBtYW55IG1i
dWZzIG9uIHRoZSBmbHkgaXMgcHJldHR5IGluZWZmaWNpZW50Li4uCi0gKi8KLXN0YXRpYyBzdHJ1
Y3QgbWJ1ZiAqCi1zY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKHVpbnQzMl90IGlkKQotewot
CXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1o
ZHIgKmFwaDsKLQotCW1fcmVwbHkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVj
dCBzY3RwX2FzY29uZl9wYXJhbWhkciksCi0JCQkJCTAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsK
LQlpZiAobV9yZXBseSA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAot
CQkJImFzY29uZl9zdWNjZXNzX3Jlc3BvbnNlOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOwotCQly
ZXR1cm4gKE5VTEwpOwotCX0KLQlhcGggPSBtdG9kKG1fcmVwbHksIHN0cnVjdCBzY3RwX2FzY29u
Zl9wYXJhbWhkciAqKTsKLQlhcGgtPmNvcnJlbGF0aW9uX2lkID0gaWQ7Ci0JYXBoLT5waC5wYXJh
bV90eXBlID0gaHRvbnMoU0NUUF9TVUNDRVNTX1JFUE9SVCk7Ci0JYXBoLT5waC5wYXJhbV9sZW5n
dGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKTsKLQlTQ1RQX0JVRl9MRU4o
bV9yZXBseSkgPSBhcGgtPnBoLnBhcmFtX2xlbmd0aDsKLQlhcGgtPnBoLnBhcmFtX2xlbmd0aCA9
IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKLQotCXJldHVybiAobV9yZXBseSk7Ci19Ci0K
LXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZSh1aW50MzJf
dCBpZCwgdWludDE2X3QgY2F1c2UsIHVpbnQ4X3QgKmVycm9yX3RsdiwKLQkJCSAgIHVpbnQxNl90
IHRsdl9sZW5ndGgpCi17Ci0Jc3RydWN0IG1idWYgKm1fcmVwbHkgPSBOVUxMOwotCXN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOwotCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICplcnJv
cjsKLQl1aW50OF90ICp0bHY7Ci0KLQltX3JlcGx5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKChz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArCi0JCQkJCSB0bHZfbGVuZ3RoICsK
LQkJCQkJIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkpLAotCQkJCQkwLCBNX05PV0FJ
VCwgMSwgTVRfREFUQSk7Ci0JaWYgKG1fcmVwbHkgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMSwKLQkJCSJhc2NvbmZfZXJyb3JfcmVzcG9uc2U6IGNvdWxkbid0IGdldCBt
YnVmIVxuIik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWFwaCA9IG10b2QobV9yZXBseSwgc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopOwotCWVycm9yID0gKHN0cnVjdCBzY3RwX2Vycm9y
X2NhdXNlICopKGFwaCArIDEpOwotCi0JYXBoLT5jb3JyZWxhdGlvbl9pZCA9IGlkOwotCWFwaC0+
cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfRVJST1JfQ0FVU0VfSU5EKTsKLQllcnJvci0+Y29k
ZSA9IGh0b25zKGNhdXNlKTsKLQllcnJvci0+bGVuZ3RoID0gdGx2X2xlbmd0aCArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSk7Ci0JYXBoLT5waC5wYXJhbV9sZW5ndGggPSBlcnJvci0+
bGVuZ3RoICsKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkcik7Ci0KLQlp
ZiAoYXBoLT5waC5wYXJhbV9sZW5ndGggPiBNTEVOKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLAotCQkJImFzY29uZl9lcnJvcl9yZXNwb25zZTogdGx2X2xlbmd0aCAoJXhoKSB0b28g
YmlnXG4iLAotCQkJdGx2X2xlbmd0aCk7Ci0JCXNjdHBfbV9mcmVlbShtX3JlcGx5KTsJLyogZGlz
Y2FyZCAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoZXJyb3JfdGx2ICE9IE5VTEwpIHsK
LQkJdGx2ID0gKHVpbnQ4X3QgKikgKGVycm9yICsgMSk7Ci0JCW1lbWNweSh0bHYsIGVycm9yX3Rs
diwgdGx2X2xlbmd0aCk7Ci0JfQotCVNDVFBfQlVGX0xFTihtX3JlcGx5KSA9IGFwaC0+cGgucGFy
YW1fbGVuZ3RoOwotCWVycm9yLT5sZW5ndGggPSBodG9ucyhlcnJvci0+bGVuZ3RoKTsKLQlhcGgt
PnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKLQotCXJldHVy
biAobV9yZXBseSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX3Byb2Nlc3NfYXNj
b25mX2FkZF9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyICphcGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIGludCBzZW5kX2hiLCBpbnQgcmVzcG9uc2VfcmVxdWlyZWQpCi17Ci0Jc3RydWN0IHNjdHBf
bmV0cyAqbmV0OwotCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKLQl1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSBzdG9yZTsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdWludDE2X3QgcGFy
YW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCi0JdWludDE2X3QgcGFyYW1fbGVuZ3RoOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyICpz
YTsKLQlpbnQgemVyb19hZGRyZXNzID0gMDsKLQlpbnQgYmFkX2FkZHJlc3MgPSAwOwotI2lmZGVm
IElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSAqdjRhZGRyOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OwotCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7Ci0jZW5kaWYKLQot
CWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JcGggPSAoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7Ci0JcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5w
YXJhbV90eXBlKTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JcGFyYW1f
bGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7Ci0jZW5kaWYKLQlzYSA9ICZzdG9yZS5z
YTsKLQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQX0lQVjRf
QUREUkVTUzoKLQkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFk
ZHJfcGFyYW0pKSB7Ci0JCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJldHVybiAoTlVM
TCk7Ci0JCX0KLQkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopcGg7Ci0J
CXNpbiA9ICZzdG9yZS5zaW47Ci0JCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Ci0JCXNp
bi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JCXNpbi0+c2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNpbi0+c2luX3Bv
cnQgPSBzdGNiLT5ycG9ydDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7
Ci0JCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJ
ICAgIElOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQliYWRf
YWRkcmVzcyA9IDE7Ci0JCX0KLQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9B
TlkpCi0JCQl6ZXJvX2FkZHJlc3MgPSAxOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
InByb2Nlc3NfYXNjb25mX2FkZF9pcDogYWRkaW5nICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9E
RUJVR19BU0NPTkYxLCBzYSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNl
IFNDVFBfSVBWNl9BRERSRVNTOgotCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKLQkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLwotCQkJ
cmV0dXJuIChOVUxMKTsKLQkJfQotCQl2NmFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0gKilwaDsKLQkJc2luNiA9ICZzdG9yZS5zaW42OwotCQltZW1zZXQoc2luNiwgMCwgc2l6ZW9m
KCpzaW42KSk7Ci0JCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9T
SU42X0xFTgotCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
LSNlbmRpZgotCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJbWVtY3B5KChjYWRk
cl90KSZzaW42LT5zaW42X2FkZHIsIHY2YWRkci0+YWRkciwKLQkJICAgIHNpemVvZihzdHJ1Y3Qg
aW42X2FkZHIpKTsKLQkJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRy
KSkgewotCQkJYmFkX2FkZHJlc3MgPSAxOwotCQl9Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBhZGRpbmcgIik7Ci0J
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKLQkJYnJlYWs7Ci0jZW5kaWYK
LQlkZWZhdWx0OgotCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5j
b3JyZWxhdGlvbl9pZCwKLQkJICAgIFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgKHVpbnQ4X3Qg
KikgYXBoLAotCQkgICAgYXBhcmFtX2xlbmd0aCk7Ci0JCXJldHVybiAobV9yZXBseSk7Ci0JfQkJ
CS8qIGVuZCBzd2l0Y2ggKi8KLQotCS8qIGlmIDAuMC4wLjAvOjowLCBhZGQgdGhlIHNvdXJjZSBh
ZGRyZXNzIGluc3RlYWQgKi8KLQlpZiAoemVyb19hZGRyZXNzICYmIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9uYXRfZnJpZW5kbHkpKSB7Ci0JCXNhID0gc3JjOwotCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwKLQkJICAgICAgICAicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiB1c2luZyBzb3VyY2Ug
YWRkciAiKTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKLQl9Ci0J
LyogYWRkIHRoZSBhZGRyZXNzICovCi0JaWYgKGJhZF9hZGRyZXNzKSB7Ci0JCW1fcmVwbHkgPSBz
Y3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAotCQkgICAgU0NU
UF9DQVVTRV9JTlZBTElEX1BBUkFNLCAodWludDhfdCAqKSBhcGgsCi0JCSAgICBhcGFyYW1fbGVu
Z3RoKTsKLQl9IGVsc2UgaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCAmbmV0LCBz
dGNiLT5hc29jLnBvcnQsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RP
Tk9UX1NFVFNDT1BFLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BRERS
X0RZTkFNSUNfQURERUQpICE9IDApIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0J
CQkicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBlcnJvciBhZGRpbmcgYWRkcmVzc1xuIik7Ci0JCW1f
cmVwbHkgPSBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAot
CQkgICAgU0NUUF9DQVVTRV9SRVNPVVJDRV9TSE9SVEFHRSwgKHVpbnQ4X3QgKikgYXBoLAotCQkg
ICAgYXBhcmFtX2xlbmd0aCk7Ci0JfSBlbHNlIHsKLQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICov
Ci0JCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQLCBzdGNiLCAwLCBz
YSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7Ci0JCQlt
X3JlcGx5ID0KLQkJCSAgICBzY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3BvbnNlKGFwaC0+Y29ycmVs
YXRpb25faWQpOwotCQl9Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BBVEhN
VFVSQUlTRSwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAg
ICAgIHN0Y2IsIG5ldCk7Ci0JCWlmIChzZW5kX2hiKSB7Ci0JCQlzY3RwX3NlbmRfaGIoc3RjYiwg
bmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQl9Ci0JfQotCXJldHVybiAobV9yZXBseSk7Ci19
Ci0KLXN0YXRpYyBpbnQKLXNjdHBfYXNjb25mX2RlbF9yZW1vdGVfYWRkcnNfZXhjZXB0KHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpzcmMpCi17Ci0Jc3RydWN0IHNjdHBf
bmV0cyAqc3JjX25ldCwgKm5ldDsKLQotCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFkZHJlc3Mg
ZXhpc3RzIGFzIGEgZGVzdGluYXRpb24gbmV0ICovCi0Jc3JjX25ldCA9IHNjdHBfZmluZG5ldChz
dGNiLCBzcmMpOwotCWlmIChzcmNfbmV0ID09IE5VTEwpIHsKLQkJLyogbm90IGZvdW5kICovCi0J
CXJldHVybiAoLTEpOwotCX0KLQotCS8qIGRlbGV0ZSBhbGwgZGVzdGluYXRpb24gYWRkcmVzc2Vz
IGV4Y2VwdCB0aGUgc291cmNlICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5l
dHMsIHNjdHBfbmV4dCkgewotCQlpZiAobmV0ICE9IHNyY19uZXQpIHsKLQkJCS8qIGRlbGV0ZSB0
aGlzIGFkZHJlc3MgKi8KLQkJCXNjdHBfcmVtb3ZlX25ldChzdGNiLCBuZXQpOwotCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkJImFzY29uZl9kZWxfcmVtb3RlX2FkZHJzX2V4Y2Vw
dDogZGVsZXRpbmcgIik7Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJ
CSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpOwotCQkJLyogbm90aWZ5
IHVwcGVyIGxheWVyICovCi0JCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNDT05GX0RF
TEVURV9JUCwgc3RjYiwgMCwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xf
YWRkciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi1z
dGF0aWMgc3RydWN0IG1idWYgKgotc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAoc3RydWN0
IHNvY2thZGRyICpzcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
aW50IHJlc3BvbnNlX3JlcXVpcmVkKQotewotCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsK
LQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7
Ci0JdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKLSNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCi0JdWludDE2X3QgcGFyYW1fbGVuZ3RoOwotI2VuZGlmCi0Jc3Ry
dWN0IHNvY2thZGRyICpzYTsKLQlpbnQgemVyb19hZGRyZXNzID0gMDsKLQlpbnQgcmVzdWx0Owot
I2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQlzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSAqdjRhZGRyOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OwotCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICp2NmFkZHI7Ci0jZW5k
aWYKLQotCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JcGgg
PSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7Ci0JcGFyYW1fdHlwZSA9IG50b2hz
KHBoLT5wYXJhbV90eXBlKTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0J
cGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7Ci0jZW5kaWYKLQlzYSA9ICZz
dG9yZS5zYTsKLQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQ
X0lQVjRfQUREUkVTUzoKLQkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
aXB2NGFkZHJfcGFyYW0pKSB7Ci0JCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJldHVy
biAoTlVMTCk7Ci0JCX0KLQkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICop
cGg7Ci0JCXNpbiA9ICZzdG9yZS5zaW47Ci0JCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7
Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JCXNp
bi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNpbi0+
c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHIt
PmFkZHI7Ci0JCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQotCQkJemVy
b19hZGRyZXNzID0gMTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vz
c19hc2NvbmZfZGVsZXRlX2lwOiBkZWxldGluZyAiKTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVC
VUdfQVNDT05GMSwgc2EpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBT
Q1RQX0lQVjZfQUREUkVTUzoKLQkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNj
dHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkvKiBpbnZhbGlkIHBhcmFtIHNpemUgKi8KLQkJCXJl
dHVybiAoTlVMTCk7Ci0JCX0KLQkJdjZhZGRyID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFt
ICopcGg7Ci0JCXNpbjYgPSAmc3RvcmUuc2luNjsKLQkJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigq
c2luNikpOwotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KLQkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0j
ZW5kaWYKLQkJc2luNi0+c2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCW1lbWNweSgmc2luNi0+
c2luNl9hZGRyLCB2NmFkZHItPmFkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCXpl
cm9fYWRkcmVzcyA9IDE7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nl
c3NfYXNjb25mX2RlbGV0ZV9pcDogZGVsZXRpbmcgIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RF
QlVHX0FTQ09ORjEsIHNhKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQltX3JlcGx5
ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKLQkJICAg
IFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFwaCwKLQkJICAgIGFw
YXJhbV9sZW5ndGgpOwotCQlyZXR1cm4gKG1fcmVwbHkpOwotCX0KLQotCS8qIG1ha2Ugc3VyZSB0
aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IGJlaW5nIGRlbGV0ZWQgKi8KLQlpZiAoc2N0cF9jbXBh
ZGRyKHNhLCBzcmMpKSB7Ci0JCS8qIHRyeWluZyB0byBkZWxldGUgdGhlIHNvdXJjZSBhZGRyZXNz
ISAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0
ZV9pcDogdHJpZWQgdG8gZGVsZXRlIHNvdXJjZSBhZGRyXG4iKTsKLQkJbV9yZXBseSA9IHNjdHBf
YXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCi0JCSAgICBTQ1RQX0NB
VVNFX0RFTEVUSU5HX1NSQ19BRERSLCAodWludDhfdCAqKSBhcGgsCi0JCSAgICBhcGFyYW1fbGVu
Z3RoKTsKLQkJcmV0dXJuIChtX3JlcGx5KTsKLQl9Ci0KLQkvKiBpZiBkZWxldGluZyAwLjAuMC4w
Lzo6MCwgZGVsZXRlIGFsbCBhZGRyZXNzZXMgZXhjZXB0IHNyYyBhZGRyICovCi0JaWYgKHplcm9f
YWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSkgewotCQlyZXN1
bHQgPSBzY3RwX2FzY29uZl9kZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdChzdGNiLCBzcmMpOwotCi0J
CWlmIChyZXN1bHQpIHsKLQkJCS8qIHNyYyBhZGRyZXNzIGRpZCBub3QgZXhpc3Q/ICovCi0JCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogc3Jj
IGFkZHIgZG9lcyBub3QgZXhpc3Q/XG4iKTsKLQkJCS8qIHdoYXQgZXJyb3IgdG8gcmVwbHkgd2l0
aD8/ICovCi0JCQltX3JlcGx5ID0KLQkJCSAgICBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShh
cGgtPmNvcnJlbGF0aW9uX2lkLAotCQkJICAgIFNDVFBfQ0FVU0VfUkVRVUVTVF9SRUZVU0VELCAo
dWludDhfdCAqKSBhcGgsCi0JCQkgICAgYXBhcmFtX2xlbmd0aCk7Ci0JCX0gZWxzZSBpZiAocmVz
cG9uc2VfcmVxdWlyZWQpIHsKLQkJCW1fcmVwbHkgPQotCQkJICAgIHNjdHBfYXNjb25mX3N1Y2Nl
c3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7Ci0JCX0KLQkJcmV0dXJuIChtX3JlcGx5
KTsKLQl9Ci0KLQkvKiBkZWxldGUgdGhlIGFkZHJlc3MgKi8KLQlyZXN1bHQgPSBzY3RwX2RlbF9y
ZW1vdGVfYWRkcihzdGNiLCBzYSk7Ci0JLyoKLQkgKiBub3RlIGlmIHJlc3VsdCA9PSAtMiwgdGhl
IGFkZHJlc3MgZG9lc24ndCBleGlzdCBpbiB0aGUgYXNvYyBidXQKLQkgKiBzaW5jZSBpdCdzIGJl
aW5nIGRlbGV0ZWQgYW55d2F5cywgd2UganVzdCBhY2sgdGhlIGRlbGV0ZSAtLSBidXQKLQkgKiB0
aGlzIHByb2JhYmx5IG1lYW5zIHNvbWV0aGluZyBoYXMgYWxyZWFkeSBnb25lIGF3cnkKLQkgKi8K
LQlpZiAocmVzdWx0ID09IC0xKSB7Ci0JCS8qIG9ubHkgb25lIGFkZHJlc3MgaW4gdGhlIGFzb2Mg
Ki8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2FzY29uZl9kZWxldGVf
aXA6IHRyaWVkIHRvIGRlbGV0ZSBsYXN0IElQIGFkZHIhXG4iKTsKLQkJbV9yZXBseSA9IHNjdHBf
YXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCi0JCSAgICBTQ1RQX0NB
VVNFX0RFTEVUSU5HX0xBU1RfQUREUiwgKHVpbnQ4X3QgKikgYXBoLAotCQkgICAgYXBhcmFtX2xl
bmd0aCk7Ci0JfSBlbHNlIHsKLQkJaWYgKHJlc3BvbnNlX3JlcXVpcmVkKSB7Ci0JCQltX3JlcGx5
ID0gc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkKTsKLQkJ
fQotCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9U
SUZZX0FTQ09ORl9ERUxFVEVfSVAsIHN0Y2IsIDAsIHNhLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CX0KLQlyZXR1cm4gKG1fcmVwbHkpOwotfQotCi1zdGF0aWMgc3RydWN0IG1idWYgKgotc2N0cF9w
cm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNyYywKLQkJCQlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKLQkJCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IGludCByZXNwb25zZV9yZXF1aXJlZCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9yZXBseSA9IE5VTEw7
Ci0JdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBo
OwotCXVpbnQxNl90IHBhcmFtX3R5cGUsIGFwYXJhbV9sZW5ndGg7Ci0jaWYgZGVmaW5lZChJTkVU
KSB8fCBkZWZpbmVkKElORVQ2KQotCXVpbnQxNl90IHBhcmFtX2xlbmd0aDsKLSNlbmRpZgotCXN0
cnVjdCBzb2NrYWRkciAqc2E7Ci0JaW50IHplcm9fYWRkcmVzcyA9IDA7Ci0jaWZkZWYgSU5FVAot
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICp2
NGFkZHI7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
Ci0Jc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2YWRkcjsKLSNlbmRpZgotCi0JYXBhcmFt
X2xlbmd0aCA9IG50b2hzKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKLQlwaCA9IChzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqKShhcGggKyAxKTsKLQlwYXJhbV90eXBlID0gbnRvaHMocGgtPnBhcmFtX3R5
cGUpOwotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlwYXJhbV9sZW5ndGgg
PSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKLSNlbmRpZgotCXNhID0gJnN0b3JlLnNhOwotCXN3
aXRjaCAocGFyYW1fdHlwZSkgewotI2lmZGVmIElORVQKLQljYXNlIFNDVFBfSVBWNF9BRERSRVNT
OgotCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJh
bSkpIHsKLQkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLwotCQkJcmV0dXJuIChOVUxMKTsKLQkJ
fQotCQl2NGFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaDsKLQkJc2luID0g
JnN0b3JlLnNpbjsKLQkJbWVtc2V0KHNpbiwgMCwgc2l6ZW9mKCpzaW4pKTsKLQkJc2luLT5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJc2luLT5zaW5fbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJc2luLT5zaW5fYWRkci5zX2Fk
ZHIgPSB2NGFkZHItPmFkZHI7Ci0JCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJf
QU5ZKQotCQkJemVyb19hZGRyZXNzID0gMTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
ICJwcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeTogIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RF
QlVHX0FTQ09ORjEsIHNhKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2Ug
U0NUUF9JUFY2X0FERFJFU1M6Ci0JCWlmIChwYXJhbV9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtKSkgewotCQkJLyogaW52YWxpZCBwYXJhbSBzaXplICovCi0JCQly
ZXR1cm4gKE5VTEwpOwotCQl9Ci0JCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSAqKXBoOwotCQlzaW42ID0gJnN0b3JlLnNpbjY7Ci0JCW1lbXNldChzaW42LCAwLCBzaXplb2Yo
KnNpbjYpKTsKLQkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJ
TjZfTEVOCi0JCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwot
I2VuZGlmCi0JCW1lbWNweSgoY2FkZHJfdCkmc2luNi0+c2luNl9hZGRyLCB2NmFkZHItPmFkZHIs
Ci0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQ
RUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7Ci0JCVNDVFBE
QkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6ICIpOwot
CQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7Ci0JCWJyZWFrOwotI2VuZGlm
Ci0JZGVmYXVsdDoKLQkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+
Y29ycmVsYXRpb25faWQsCi0JCSAgICBTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9BRERSLCAodWlu
dDhfdCAqKSBhcGgsCi0JCSAgICBhcGFyYW1fbGVuZ3RoKTsKLQkJcmV0dXJuIChtX3JlcGx5KTsK
LQl9Ci0KLQkvKiBpZiAwLjAuMC4wLzo6MCwgdXNlIHRoZSBzb3VyY2UgYWRkcmVzcyBpbnN0ZWFk
ICovCi0JaWYgKHplcm9fYWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVu
ZGx5KSkgewotCQlzYSA9IHNyYzsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQki
cHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHVzaW5nIHNvdXJjZSBhZGRyICIpOwotCQlTQ1RQ
REJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzcmMpOwotCX0KLQkvKiBzZXQgdGhlIHByaW1h
cnkgYWRkcmVzcyAqLwotCWlmIChzY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RjYiwgc2EsIE5VTEwp
ID09IDApIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkicHJvY2Vzc19hc2Nv
bmZfc2V0X3ByaW1hcnk6IHByaW1hcnkgYWRkcmVzcyBzZXRcbiIpOwotCQkvKiBub3RpZnkgdXBw
ZXIgbGF5ZXIgKi8KLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJ
TUFSWSwgc3RjYiwgMCwgc2EsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCWlmICgoc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkg
JiYKLQkJICAgICghKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9QRikpICYmCi0JCSAgICAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpKSB7Ci0JCQlz
Y3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJc3RjYi0+YXNv
Yy5hbHRlcm5hdGUgPSBOVUxMOwotCQl9Ci0JCWlmIChyZXNwb25zZV9yZXF1aXJlZCkgewotCQkJ
bV9yZXBseSA9IHNjdHBfYXNjb25mX3N1Y2Nlc3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9p
ZCk7Ci0JCX0KLQkJLyogTW9iaWxpdHkgYWRhcHRhdGlvbi4KLQkJICAgSWRlYWxseSwgd2hlbiB0
aGUgcmVjZXB0aW9uIG9mIFNFVCBQUklNQVJZIHdpdGggREVMRVRFIElQCi0JCSAgIEFERFJFU1Mg
b2YgdGhlIHByZXZpb3VzIHByaW1hcnkgZGVzdGluYXRpb24sIHVuYWNrbm93bGVkZ2VkCi0JCSAg
IERBVEEgYXJlIHJldHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkgdG8gdGhlIG5ldyBwcmltYXJ5Ci0J
CSAgIGRlc3RpbmF0aW9uIGZvciBzZWFtbGVzcyBoYW5kb3Zlci4KLQkJICAgSWYgdGhlIGRlc3Rp
bmF0aW9uIGlzIFVOQ09ORklSTUVEIGFuZCBtYXJrZWQgdG8gUkVRX1BSSU0sCi0JCSAgIFRoZSBy
ZXRyYW5zbWlzc2lvbiBvY2N1ciB3aGVuIHJlY2VwdGlvbiBvZiB0aGUKLQkJICAgSEVBUlRCRUFU
LUFDSy4gIChTZWUgc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2FjayBpbgotCQkgICBzY3RwX2lucHV0
LmMpCi0JCSAgIEFsc28sIHdoZW4gY2hhbmdlIG9mIHRoZSBwcmltYXJ5IGRlc3RpbmF0aW9uLCBp
dCBpcyBiZXR0ZXIKLQkJICAgdGhhdCBhbGwgc3Vic2VxdWVudCBuZXcgREFUQSBjb250YWluaW5n
IGFscmVhZHkgcXVldWVkIERBVEEKLQkJICAgYXJlIHRyYW5zbWl0dGVkIHRvIHRoZSBuZXcgcHJp
bWFyeSBkZXN0aW5hdGlvbi4gKGJ5IG1pY2NoaWUpCi0JCSAqLwotCQlpZiAoKHNjdHBfaXNfbW9i
aWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX01PQklMSVRZX0JBU0UpIHx8Ci0JCSAgICBzY3RwX2lzX21vYmlsaXR5
X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxp
dHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKSAmJgotCQkgICAgKHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmCi0JCSAgICAgU0NUUF9BRERSX1VOQ09O
RklSTUVEKSA9PSAwKSB7Ci0KLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUFJJ
TV9ERUxFVEVELAotCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEws
Ci0JCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMSk7
Ci0JCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCQkJ
CVNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7Ci0JCQkJc2N0cF9hc3NvY19pbW1lZGlhdGVf
cmV0cmFucyhzdGNiLAotCQkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJ
CX0KLQkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJ
CQkJU0NUUF9NT0JJTElUWV9CQVNFKSkgewotCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQo
c3RjYiwKLQkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKLQkJCX0KLQkJCXNjdHBf
ZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCXN0Y2ItPmFzb2Mu
ZGVsZXRlZF9wcmltYXJ5KTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGNvdWxkbid0IHNldCB0aGUg
cmVxdWVzdGVkIHByaW1hcnkgYWRkcmVzcyEgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsCi0JCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHNldCBwcmltYXJ5IGZhaWxlZCFc
biIpOwotCQkvKiBtdXN0IGhhdmUgYmVlbiBhbiBpbnZhbGlkIGFkZHJlc3MsIHNvIHJlcG9ydCAq
LwotCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlv
bl9pZCwKLQkJICAgIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50OF90ICopIGFw
aCwKLQkJICAgIGFwYXJhbV9sZW5ndGgpOwotCX0KLQotCXJldHVybiAobV9yZXBseSk7Ci19Ci0K
LS8qCi0gKiBoYW5kbGVzIGFuIEFTQ09ORiBjaHVuay4KLSAqIGlmIGFsbCBwYXJhbWV0ZXJzIGFy
ZSBwcm9jZXNzZWQgb2ssIHNlbmQgYSBwbGFpbiAoZW1wdHkpIEFTQ09ORi1BQ0sKLSAqLwotdm9p
ZAotc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICptLCB1bnNpZ25lZCBpbnQgb2Zmc2V0
LAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLAotCQkgICBzdHJ1Y3Qg
c2N0cF9hc2NvbmZfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSAgIGludCBm
aXJzdCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQl1aW50MzJfdCBzZXJp
YWxfbnVtOwotCXN0cnVjdCBtYnVmICpuLCAqbV9hY2ssICptX3Jlc3VsdCwgKm1fdGFpbDsKLQlz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICphY2tfY3A7Ci0Jc3RydWN0IHNjdHBfYXNjb25m
X3BhcmFtaGRyICphcGg7Ci0Jc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnBfYWRkcjsKLQl1
bnNpZ25lZCBpbnQgYXNjb25mX2xpbWl0LCBjbnQ7Ci0JaW50IGVycm9yID0gMDsJCS8qIGRpZCBh
biBlcnJvciBvY2N1cj8gKi8KLQotCS8qIGFzY29uZiBwYXJhbSBidWZmZXIgKi8KLQl1aW50OF90
IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07Ci0Jc3RydWN0IHNjdHBfYXNjb25m
X2FjayAqYWNrLCAqYWNrX25leHQ7Ci0KLQkvKiB2ZXJpZnkgbWluaW11bSBsZW5ndGggKi8KLQlp
ZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25m
X2NodW5rKSkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNj
b25mOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIsCi0JCQludG9ocyhjcC0+Y2guY2h1bmtfbGVu
Z3RoKSk7Ci0JCXJldHVybjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCXNlcmlhbF9udW0g
PSBudG9obChjcC0+c2VyaWFsX251bWJlcik7Ci0KLQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+YXNj
b25mX3NlcV9pbiwgc2VyaWFsX251bSkpIHsKLQkJLyogZ290IGEgZHVwbGljYXRlIEFTQ09ORiAq
LwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNjb25mOiBnb3Qg
ZHVwbGljYXRlIHNlcmlhbCBudW1iZXIgPSAleGhcbiIsCi0JCQlzZXJpYWxfbnVtKTsKLQkJcmV0
dXJuOwotCX0gZWxzZSBpZiAoc2VyaWFsX251bSAhPSAoYXNvYy0+YXNjb25mX3NlcV9pbiArIDEp
KSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29uZjogaW5jb3Jy
ZWN0IHNlcmlhbCBudW1iZXIgPSAleGggKGV4cGVjdGVkIG5leHQgPSAleGgpXG4iLAotCQkJc2Vy
aWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9pbiArIDEpOwotCQlyZXR1cm47Ci0JfQotCi0JLyog
aXQncyB0aGUgZXhwZWN0ZWQgIm5leHQiIHNlcXVlbmNlIG51bWJlciwgc28gcHJvY2VzcyBpdCAq
LwotCWFzb2MtPmFzY29uZl9zZXFfaW4gPSBzZXJpYWxfbnVtOwkvKiB1cGRhdGUgc2VxdWVuY2Ug
Ki8KLQkvKiBnZXQgbGVuZ3RoIG9mIGFsbCB0aGUgcGFyYW0ncyBpbiB0aGUgQVNDT05GICovCi0J
YXNjb25mX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7Ci0JU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCSJoYW5kbGVfYXNjb25mOiBhc2NvbmZfbGltaXQ9
JXUsIHNlcXVlbmNlPSV4aFxuIiwKLQkJYXNjb25mX2xpbWl0LCBzZXJpYWxfbnVtKTsKLQotCWlm
IChmaXJzdCkgewotCQkvKiBkZWxldGUgb2xkIGNhY2hlICovCi0JCVNDVFBEQkcoU0NUUF9ERUJV
R19BU0NPTkYxLCJoYW5kbGVfYXNjb25mOiBOb3cgcHJvY2Vzc2luZyBmaXJzdCBBU0NPTkYuIFRy
eSB0byBkZWxldGUgb2xkIGNhY2hlXG4iKTsKLQotCQlUQUlMUV9GT1JFQUNIX1NBRkUoYWNrLCAm
YXNvYy0+YXNjb25mX2Fja19zZW50LCBuZXh0LCBhY2tfbmV4dCkgewotCQkJaWYgKGFjay0+c2Vy
aWFsX251bWJlciA9PSBzZXJpYWxfbnVtKQotCQkJCWJyZWFrOwotCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FTQ09ORjEsImhhbmRsZV9hc2NvbmY6IGRlbGV0ZSBvbGQoJXUpIDwgZmlyc3QoJXUpXG4i
LAotCQkJICAgIGFjay0+c2VyaWFsX251bWJlciwgc2VyaWFsX251bSk7Ci0JCQlUQUlMUV9SRU1P
VkUoJmFzb2MtPmFzY29uZl9hY2tfc2VudCwgYWNrLCBuZXh0KTsKLQkJCWlmIChhY2stPmRhdGEg
IT0gTlVMTCkgewotCQkJCXNjdHBfbV9mcmVlbShhY2stPmRhdGEpOwotCQkJfQotCQkJU0NUUF9a
T05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25mX2FjayksIGFjayk7Ci0JCX0K
LQl9Ci0KLQltX2FjayA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBf
YXNjb25mX2Fja19jaHVuayksIDAsCi0JCQkJICAgICAgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwot
CWlmIChtX2FjayA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJ
ImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBtYnVmIVxuIik7Ci0JCXJldHVybjsKLQl9Ci0J
bV90YWlsID0gbV9hY2s7CQkvKiBjdXJyZW50IHJlcGx5IGNoYWluJ3MgdGFpbCAqLwotCi0JLyog
ZmlsbCBpbiBBU0NPTkYtQUNLIGhlYWRlciAqLwotCWFja19jcCA9IG10b2QobV9hY2ssIHN0cnVj
dCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKik7Ci0JYWNrX2NwLT5jaC5jaHVua190eXBlID0gU0NU
UF9BU0NPTkZfQUNLOwotCWFja19jcC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwotCWFja19jcC0+c2Vy
aWFsX251bWJlciA9IGh0b25sKHNlcmlhbF9udW0pOwotCS8qIHNldCBpbml0aWFsIGxlbmd0aHMg
KGVnLiBqdXN0IGFuIEFTQ09ORi1BQ0spLCBudG9oeCBhdCB0aGUgZW5kISAqLwotCVNDVFBfQlVG
X0xFTihtX2FjaykgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7Ci0JYWNr
X2NwLT5jaC5jaHVua19sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVu
ayk7Ci0KLQkvKiBza2lwIHRoZSBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKi8KLQlvZmZzZXQg
Kz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayk7Ci0JcF9hZGRyID0gKHN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciksICh1aW50OF90ICopJmFwYXJhbV9idWYpOwotCWlmIChwX2FkZHIg
PT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJoYW5kbGVfYXNj
b25mOiBjb3VsZG4ndCBnZXQgbG9va3VwIGFkZHIhXG4iKTsKLQkJLyogcmVzcG9uZCB3aXRoIGEg
bWlzc2luZy9pbnZhbGlkIG1hbmRhdG9yeSBwYXJhbWV0ZXIgZXJyb3IgKi8KLQkJcmV0dXJuOwot
CX0KLQkvKiBwYXJhbV9sZW5ndGggaXMgYWxyZWFkeSB2YWxpZGF0ZWQgaW4gcHJvY2Vzc19jb250
cm9sLi4uICovCi0Jb2Zmc2V0ICs9IG50b2hzKHBfYWRkci0+cGgucGFyYW1fbGVuZ3RoKTsJLyog
c2tpcCBsb29rdXAgYWRkciAqLwotCS8qIGdldCBwb2ludGVyIHRvIGZpcnN0IGFzY29uZiBwYXJh
bSBpbiBBU0NPTkYgKi8KLQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0
cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIp
LCAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKLQlpZiAoYXBoID09IE5VTEwpIHsKLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJFbXB0eSBBU0NPTkYgcmVjZWl2ZWQ/XG4iKTsKLQkJZ290
byBzZW5kX3JlcGx5OwotCX0KLQkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRlcnMgKi8K
LQljbnQgPSAwOwotCXdoaWxlIChhcGggIT0gTlVMTCkgewotCQl1bnNpZ25lZCBpbnQgcGFyYW1f
bGVuZ3RoLCBwYXJhbV90eXBlOwotCi0JCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFt
X3R5cGUpOwotCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0J
CWlmIChvZmZzZXQgKyBwYXJhbV9sZW5ndGggPiBhc2NvbmZfbGltaXQpIHsKLQkJCS8qIHBhcmFt
ZXRlciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCi0JCQlzY3RwX21fZnJlZW0obV9hY2sp
OwotCQkJcmV0dXJuOwotCQl9Ci0JCW1fcmVzdWx0ID0gTlVMTDsKLQotCQlpZiAocGFyYW1fbGVu
Z3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUpIGxhcmdlciB0aGFuIGJ1ZmZlciBz
aXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0JCQlyZXR1
cm47Ci0JCX0KLQkJaWYgKHBhcmFtX2xlbmd0aCA8PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1o
ZHIpKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IHBh
cmFtIGxlbmd0aCAoJXUpIHRvbyBzaG9ydFxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCXNjdHBfbV9m
cmVlbShtX2Fjayk7Ci0JCX0KLQkJLyogZ2V0IHRoZSBlbnRpcmUgcGFyYW1ldGVyICovCi0JCWFw
aCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNl
dCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKLQkJaWYgKGFwaCA9PSBOVUxMKSB7Ci0JCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBl
bnRpcmUgcGFyYW1cbiIpOwotCQkJc2N0cF9tX2ZyZWVtKG1fYWNrKTsKLQkJCXJldHVybjsKLQkJ
fQotCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKLQkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgot
CQkJbV9yZXN1bHQgPSBzY3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzcmMsIGFwaCwgc3RjYiwK
LQkJCSAgICAoY250IDwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSksIGVycm9y
KTsKLQkJCWNudCsrOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9ERUxfSVBfQUREUkVTUzoKLQkJ
CW1fcmVzdWx0ID0gc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxldGVfaXAoc3JjLCBhcGgsIHN0Y2Is
Ci0JCQkgICAgZXJyb3IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FUlJPUl9DQVVTRV9JTkQ6
Ci0JCQkvKiBub3QgdmFsaWQgaW4gYW4gQVNDT05GIGNodW5rICovCi0JCQlicmVhazsKLQkJY2Fz
ZSBTQ1RQX1NFVF9QUklNX0FERFI6Ci0JCQltX3Jlc3VsdCA9IHNjdHBfcHJvY2Vzc19hc2NvbmZf
c2V0X3ByaW1hcnkoc3JjLCBhcGgsCi0JCQkgICAgc3RjYiwgZXJyb3IpOwotCQkJYnJlYWs7Ci0J
CWNhc2UgU0NUUF9OQVRfVlRBR1M6Ci0JCSAgICAgICAgU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsICJoYW5kbGVfYXNjb25mOiBzZWVzIGEgTkFUIFZUQUcgc3RhdGUgcGFyYW1ldGVyXG4iKTsK
LQkJICAgICAgICBicmVhazsKLQkJY2FzZSBTQ1RQX1NVQ0NFU1NfUkVQT1JUOgotCQkJLyogbm90
IHZhbGlkIGluIGFuIEFTQ09ORiBjaHVuayAqLwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9VTFBf
QURBUFRBVElPTjoKLQkJCS8qIEZJWCAqLwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZiAo
KHBhcmFtX3R5cGUgJiAweDgwMDApID09IDApIHsKLQkJCQkvKiBCZWVuIHRvbGQgdG8gU1RPUCBh
dCB0aGlzIHBhcmFtICovCi0JCQkJYXNjb25mX2xpbWl0ID0gb2Zmc2V0OwotCQkJCS8qCi0JCQkJ
ICogRklYIEZJWCAtIFdlIG5lZWQgdG8gY2FsbAotCQkJCSAqIHNjdHBfYXJldGhlcmVfdW5yZWNv
Z25pemVkX3BhcmFtZXRlcnMoKQotCQkJCSAqIHRvIGdldCBhIG9wZXJyIGFuZCBzZW5kIGl0IGZv
ciBhbnkKLQkJCQkgKiBwYXJhbSdzIHdpdGggdGhlIDB4NDAwMCBiaXQgc2V0IE9SIGRvIGl0Ci0J
CQkJICogaGVyZSBvdXJzZWx2ZXMuLi4gbm90ZSB3ZSBzdGlsbCBtdXN0IFNUT1AKLQkJCQkgKiBp
ZiB0aGUgMHg4MDAwIGJpdCBpcyBjbGVhci4KLQkJCQkgKi8KLQkJCX0KLQkJCS8qIHVua25vd24v
aW52YWxpZCBwYXJhbSB0eXBlICovCi0JCQlicmVhazsKLQkJfSAvKiBzd2l0Y2ggKi8KLQotCQkv
KiBhZGQgYW55IChlcnJvcikgcmVzdWx0IHRvIHRoZSByZXBseSBtYnVmIGNoYWluICovCi0JCWlm
IChtX3Jlc3VsdCAhPSBOVUxMKSB7Ci0JCQlTQ1RQX0JVRl9ORVhUKG1fdGFpbCkgPSBtX3Jlc3Vs
dDsKLQkJCW1fdGFpbCA9IG1fcmVzdWx0OwotCQkJLyogdXBkYXRlIGxlbmd0aHMsIG1ha2Ugc3Vy
ZSBpdCdzIGFsaWduZWQgdG9vICovCi0JCQlTQ1RQX0JVRl9MRU4obV9yZXN1bHQpID0gU0NUUF9T
SVpFMzIoU0NUUF9CVUZfTEVOKG1fcmVzdWx0KSk7Ci0JCQlhY2tfY3AtPmNoLmNodW5rX2xlbmd0
aCArPSBTQ1RQX0JVRl9MRU4obV9yZXN1bHQpOwotCQkJLyogc2V0IGZsYWcgdG8gZm9yY2Ugc3Vj
Y2VzcyByZXBvcnRzICovCi0JCQllcnJvciA9IDE7Ci0JCX0KLQkJb2Zmc2V0ICs9IFNDVFBfU0la
RTMyKHBhcmFtX2xlbmd0aCk7Ci0JCS8qIHVwZGF0ZSByZW1haW5pbmcgQVNDT05GIG1lc3NhZ2Ug
bGVuZ3RoIHRvIHByb2Nlc3MgKi8KLQkJaWYgKG9mZnNldCA+PSBhc2NvbmZfbGltaXQpIHsKLQkJ
CS8qIG5vIG1vcmUgZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJ
LyogZ2V0IHBvaW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFyYW0gKi8KLQkJYXBoID0gKHN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksCi0JCSAgICAodWludDhfdCAqKSZhcGFy
YW1fYnVmKTsKLQkJaWYgKGFwaCA9PSBOVUxMKSB7Ci0JCQkvKiBjYW4ndCBnZXQgYW4gYXNjb25m
IHBhcmFtaGRyICovCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmY6IGNhbid0IGdldCBhc2NvbmYgcGFyYW0gaGRyIVxuIik7Ci0JCQkvKiBGSVggTUUgLSBhZGQg
ZXJyb3IgaGVyZS4uLiAqLwotCQl9Ci0JfQotCi0gc2VuZF9yZXBseToKLQlhY2tfY3AtPmNoLmNo
dW5rX2xlbmd0aCA9IGh0b25zKGFja19jcC0+Y2guY2h1bmtfbGVuZ3RoKTsKLQkvKiBzYXZlIHRo
ZSBBU0NPTkYtQUNLIHJlcGx5ICovCi0JYWNrID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9hc2NvbmZfYWNrKSwKLQkgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fjayk7Ci0J
aWYgKGFjayA9PSBOVUxMKSB7Ci0JCXNjdHBfbV9mcmVlbShtX2Fjayk7Ci0JCXJldHVybjsKLQl9
Ci0JYWNrLT5zZXJpYWxfbnVtYmVyID0gc2VyaWFsX251bTsKLQlhY2stPmxhc3Rfc2VudF90byA9
IE5VTEw7Ci0JYWNrLT5kYXRhID0gbV9hY2s7Ci0JYWNrLT5sZW4gPSAwOwotCWZvciAobiA9IG1f
YWNrOyBuICE9IE5VTEw7IG4gPSBTQ1RQX0JVRl9ORVhUKG4pKSB7Ci0JCWFjay0+bGVuICs9IFND
VFBfQlVGX0xFTihuKTsKLQl9Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25m
X2Fja19zZW50LCBhY2ssIG5leHQpOwotCi0JLyogc2VlIGlmIGxhc3RfY29udHJvbF9jaHVua19m
cm9tIGlzIHNldCBwcm9wZXJseSAodXNlIElQIHNyYyBhZGRyKSAqLwotCWlmIChzdGNiLT5hc29j
Lmxhc3RfY29udHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsKLQkJLyoKLQkJICogdGhpcyBjb3Vs
ZCBoYXBwZW4gaWYgdGhlIHNvdXJjZSBhZGRyZXNzIHdhcyBqdXN0IG5ld2x5Ci0JCSAqIGFkZGVk
Ci0JCSAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGxv
b2tpbmcgdXAgbmV0IGZvciBJUCBzb3VyY2UgYWRkcmVzc1xuIik7Ci0JCVNDVFBEQkcoU0NUUF9E
RUJVR19BU0NPTkYxLCAiTG9va2luZyBmb3IgSVAgc291cmNlOiAiKTsKLQkJU0NUUERCR19BRERS
KFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKLQkJLyogbG9vayB1cCB0aGUgZnJvbSBhZGRyZXNz
ICovCi0JCXN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSBzY3RwX2ZpbmRuZXQo
c3RjYiwgc3JjKTsKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JCWlmIChzdGNiLT5hc29jLmxhc3RfY29u
dHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYx
LCAiaGFuZGxlX2FzY29uZjogSVAgc291cmNlIGFkZHJlc3Mgbm90IGZvdW5kPyFcbiIpOwotCQl9
Ci0jZW5kaWYKLQl9Ci19Ci0KLS8qCi0gKiBkb2VzIHRoZSBhZGRyZXNzIG1hdGNoPyByZXR1cm5z
IDAgaWYgbm90LCAxIGlmIHNvCi0gKi8KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9hc2NvbmZfYWRk
cl9tYXRjaChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWEsIHN0cnVjdCBzb2NrYWRkciAqc2Ep
Ci17Ci0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lO
RVQ2OgotCXsKLQkJLyogWFhYIHNjb3BlaWQgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7Ci0KLQkJaWYgKChhYS0+YXAuYWRkcnAucGgu
cGFyYW1fdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgJiYKLQkJICAgIChtZW1jbXAoJmFhLT5h
cC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbjZf
YWRkcikpID09IDApKSB7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
KnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQotCQlpZiAoKGFhLT5hcC5hZGRycC5w
aC5wYXJhbV90eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSAmJgotCQkgICAgKG1lbWNtcCgmYWEt
PmFwLmFkZHJwLmFkZHIsICZzaW4tPnNpbl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9h
ZGRyKSkgPT0gMCkpIHsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlm
Ci0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBkb2Vz
IHRoZSBhZGRyZXNzIG1hdGNoPyByZXR1cm5zIDAgaWYgbm90LCAxIGlmIHNvCi0gKi8KLXN0YXRp
YyB1aW50MzJfdAotc2N0cF9hZGRyX21hdGNoKHN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaCwgc3Ry
dWN0IHNvY2thZGRyICpzYSkKLXsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
Ci0JdWludDE2X3QgcGFyYW1fdHlwZSwgcGFyYW1fbGVuZ3RoOwotCi0JcGFyYW1fdHlwZSA9IG50
b2hzKHBoLT5wYXJhbV90eXBlKTsKLQlwYXJhbV9sZW5ndGggPSBudG9ocyhwaC0+cGFyYW1fbGVu
Z3RoKTsKLSNlbmRpZgotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQ2Ci0J
Y2FzZSBBRl9JTkVUNjoKLQl7Ci0JCS8qIFhYWCBzY29wZWlkICovCi0JCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQlzdHJ1Y3Qgc2N0cF9p
cHY2YWRkcl9wYXJhbSAqdjZhZGRyOwotCi0JCXY2YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRk
cl9wYXJhbSAqKXBoOwotCQlpZiAoKHBhcmFtX3R5cGUgPT0gU0NUUF9JUFY2X0FERFJFU1MpICYm
Ci0JCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSkpICYmCi0JCSAgICAobWVtY21wKCZ2NmFkZHItPmFkZHIsICZzaW42LT5zaW42X2FkZHIsCi0J
CSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkpIHsKLQkJCXJldHVybiAoMSk7Ci0J
CX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7
Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOwot
CQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOwotCi0JCXY0YWRkciA9IChzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoOwotCQlpZiAoKHBhcmFtX3R5cGUgPT0gU0NUUF9J
UFY0X0FERFJFU1MpICYmCi0JCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSkpICYmCi0JCSAgICAobWVtY21wKCZ2NGFkZHItPmFkZHIsICZzaW4t
PnNpbl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCkpIHsKLQkJCXJl
dHVybiAoMSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJYnJlYWs7
Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0vKgotICogQ2xlYW51cCBmb3Igbm9uLXJlc3BvbmRlZC9P
UCBFUlInZCBBU0NPTkYKLSAqLwotdm9pZAotc2N0cF9hc2NvbmZfY2xlYW51cChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKgotCSAqIGNsZWFyIG91
dCBhbnkgZXhpc3RpbmcgYXNjb25mcyBnb2luZyBvdXQKLQkgKi8KLQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJU0NU
UF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMik7Ci0Jc3RjYi0+YXNvYy5hc2NvbmZfc2Vx
X291dF9hY2tlZCA9IHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQ7Ci0JLyogcmVtb3ZlIHRoZSBv
bGQgQVNDT05GIG9uIG91ciBvdXRib3VuZCBxdWV1ZSAqLwotCXNjdHBfdG9zc19vbGRfYXNjb25m
KHN0Y2IpOwotfQotCi0vKgotICogY2xlYW51cCBhbnkgY2FjaGVkIHNvdXJjZSBhZGRyZXNzZXMg
dGhhdCBtYXkgYmUgdG9wb2xvZ2ljYWxseQotICogaW5jb3JyZWN0IGFmdGVyIGEgbmV3IGFkZHJl
c3MgaGFzIGJlZW4gYWRkZWQgdG8gdGhpcyBpbnRlcmZhY2UuCi0gKi8KLXN0YXRpYyB2b2lkCi1z
Y3RwX2FzY29uZl9uZXRzX2NsZWFudXAoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9pZm4gKmlmbikKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkvKgotCSAqIElkZWFs
bHksIHdlIHdhbnQgdG8gb25seSBjbGVhciBjYWNoZWQgcm91dGVzIGFuZCBzb3VyY2UgYWRkcmVz
c2VzCi0JICogdGhhdCBhcmUgdG9wb2xvZ2ljYWxseSBpbmNvcnJlY3QuICBCdXQgc2luY2UgdGhl
cmUgaXMgbm8gZWFzeSB3YXkKLQkgKiB0byBrbm93IHdoZXRoZXIgdGhlIG5ld2x5IGFkZGVkIGFk
ZHJlc3Mgb24gdGhlIGlmbiB3b3VsZCBjYXVzZSBhCi0JICogcm91dGluZyBjaGFuZ2UgKGkuZS4g
YSBuZXcgZWdyZXNzIGludGVyZmFjZSB3b3VsZCBiZSBjaG9zZW4pCi0JICogd2l0aG91dCBkb2lu
ZyBhIG5ldyByb3V0aW5nIGxvb2t1cCBhbmQgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLAotCSAq
IHdlIHdpbGwgKGZvciBub3cpIGp1c3QgZmx1c2ggYW55IGNhY2hlZCByb3V0ZSB1c2luZyBhIGRp
ZmZlcmVudAotCSAqIGlmbiAoYW5kIGNhY2hlZCBzb3VyY2UgYWRkcnMpIGFuZCBsZXQgb3V0cHV0
IHJlLWNob29zZSB0aGVtIGR1cmluZwotCSAqIHRoZSBuZXh0IHNlbmQgb24gdGhhdCBuZXQuCi0J
ICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewot
CQkvKgotCQkgKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIChhbmQgY2FjaGVkIHNvdXJjZSBhZGRy
ZXNzKSBpZiB0aGUKLQkJICogcm91dGUncyBpbnRlcmZhY2UgaXMgTk9UIHRoZSBzYW1lIGFzIHRo
ZSBhZGRyZXNzIGNoYW5nZS4KLQkJICogSWYgaXQncyB0aGUgc2FtZSBpbnRlcmZhY2UsIGp1c3Qg
Y2xlYXIgdGhlIGNhY2hlZCBzb3VyY2UKLQkJICogYWRkcmVzcy4KLQkJICovCi0JCWlmIChTQ1RQ
X1JPVVRFX0hBU19WQUxJRF9JRk4oJm5ldC0+cm8pICYmCi0JCSAgICAoKGlmbiA9PSBOVUxMKSB8
fAotCQkgICAgIChTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKCZuZXQtPnJvKSAhPSBpZm4t
Pmlmbl9pbmRleCkpKSB7Ci0JCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlICovCi0JCQlSVEZS
RUUobmV0LT5yby5yb19ydCk7Ci0JCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJfQotCQkvKiBj
bGVhciBhbnkgY2FjaGVkIHNvdXJjZSBhZGRyZXNzICovCi0JCWlmIChuZXQtPnNyY19hZGRyX3Nl
bGVjdGVkKSB7Ci0JCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQluZXQtPnJv
Ll9zX2FkZHIgPSBOVUxMOwotCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCX0KLQl9
Ci19Ci0KLQotdm9pZAotc2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKmRzdG5ldCkKLXsKLQlpbnQgZXJyb3I7Ci0KLQlp
ZiAoZHN0bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7Ci0JCXJldHVy
bjsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5ID09IE5VTEwpIHsKLQkJcmV0
dXJuOwotCX0KLQotCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpIHsK
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJhc3NvY19pbW1lZGlhdGVfcmV0cmFuczog
RGVsZXRlZCBwcmltYXJ5IGlzICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYx
LCAmc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnktPnJvLl9sX2FkZHIuc2EpOwotCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgIkN1cnJlbnQgUHJpbWFyeSBpcyAiKTsKLQkJU0NUUERCR19B
RERSKFNDVFBfREVCVUdfQVNDT05GMSwgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+
cm8uX2xfYWRkci5zYSk7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwg
c3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQlzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeSwKLQkJ
CQlTQ1RQX0ZST01fU0NUUF9BU0NPTkYgKyBTQ1RQX0xPQ18zKTsKLQkJc3RjYi0+YXNvYy5udW1f
c2VuZF90aW1lcnNfdXAtLTsKLQkJaWYgKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwIDwg
MCkgewotCQkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPSAwOwotCQl9Ci0JCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCQllcnJvciA9IHNjdHBfdDNyeHRfdGltZXIoc3RjYi0+
c2N0cF9lcCwgc3RjYiwKLQkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOwotCQlpZiAo
ZXJyb3IpIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHN0Y2ItPnNjdHBfZXApOwotCQkJcmV0dXJu
OwotCQl9Ci0JCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotI2lmZGVmIFNDVFBfQVVESVRJ
TkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0aW5nKDQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIHN0Y2It
PmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKLSNlbmRpZgotCQlzY3RwX2NodW5rX291dHB1dChzdGNi
LT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OwotCQlpZiAoKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID09IDApICYmCi0JCSAgICAo
c3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCA+IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGs7Ci0KLQkJCWNoayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUp
OwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9l
cCwKLQkJCQkJIHN0Y2IsIGNoay0+d2hvVG8pOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgdWludDE2X3QpOwotCi12b2lkCi1zY3RwX25l
dF9pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCkKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQlTQ1RQREJHKFND
VFBfREVCVUdfQVNDT05GMSwgIm5ldF9pbW1lZGlhdGVfcmV0cmFuczogUlRPIGlzICVkXG4iLCBu
ZXQtPlJUTyk7Ci0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXQsCi0JICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0FTQ09O
RiArIFNDVFBfTE9DXzQpOwotCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRp
YWxfY2NfcGFyYW0oc3RjYiwgbmV0KTsKLQluZXQtPmVycm9yX2NvdW50ID0gMDsKLQlUQUlMUV9G
T1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChj
aGstPndob1RvID09IG5ldCkgewotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVT
RU5EKSB7Ci0JCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQkJc2N0cF91
Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJc2N0cF9m
bGlnaHRfc2l6ZV9kZWNyZWFzZShjaGspOwotCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNl
KHN0Y2IsIGNoayk7Ci0JCQkJbmV0LT5tYXJrZWRfcmV0cmFucysrOwotCQkJCXN0Y2ItPmFzb2Mu
bWFya2VkX3JldHJhbnMrKzsKLQkJCX0KLQkJfQotCX0KLQlpZiAobmV0LT5tYXJrZWRfcmV0cmFu
cykgewotCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNj
dHBfcGF0aF9jaGVja19hbmRfcmVhY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9pZmEgKm5ld2lmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JaW50IGFkZHJudW0s
IGNoYW5nZWQ7Ci0KLQkvKiAgIElmIG51bWJlciBvZiBsb2NhbCB2YWxpZCBhZGRyZXNzZXMgaXMg
MSwgdGhlIHZhbGlkIGFkZHJlc3MgaXMKLQkgICAgIHByb2JhYmx5IG5ld2x5IGFkZGVkIGFkZHJl
c3MuCi0JICAgICBTZXZlcmFsIHZhbGlkIGFkZHJlc3NlcyBpbiB0aGlzIGFzc29jaWF0aW9uLiAg
QSBzb3VyY2UgYWRkcmVzcwotCSAgICAgbWF5IG5vdCBiZSBjaGFuZ2VkLiAgQWRkaXRpb25hbGx5
LCB0aGV5IGNhbiBiZSBjb25maWd1cmVkIG9uIGEKLQkgICAgIHNhbWUgaW50ZXJmYWNlIGFzICJh
bGlhcyIgYWRkcmVzc2VzLiAgKGJ5IG1pY2NoaWUpCi0JICovCi0JYWRkcm51bSA9IHNjdHBfbG9j
YWxfYWRkcl9jb3VudChzdGNiKTsKLQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInBfY2hl
Y2tfcmVhY3QoKTogJWQgbG9jYWwgYWRkcmVzc2VzXG4iLAotCQlhZGRybnVtKTsKLQlpZiAoYWRk
cm51bSA9PSAxKSB7Ci0JCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQpIHsKLQkJCS8qIGNsZWFyIGFueSBjYWNoZWQgcm91dGUgYW5kIHNvdXJjZSBhZGRyZXNz
ICovCi0JCQlpZiAobmV0LT5yby5yb19ydCkgewotCQkJCVJURlJFRShuZXQtPnJvLnJvX3J0KTsK
LQkJCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJCX0KLQkJCWlmIChuZXQtPnNyY19hZGRyX3Nl
bGVjdGVkKSB7Ci0JCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOwotCQkJCW5ldC0+
cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQl9
Ci0JCQkvKiBSZXRyYW5zbWl0IHVuYWNrbm93bGVkZ2VkIERBVEEgY2h1bmtzIGltbWVkaWF0ZWx5
ICovCi0JCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRP
RkYpKSB7Ci0JCQkJc2N0cF9uZXRfaW1tZWRpYXRlX3JldHJhbnMoc3RjYiwgbmV0KTsKLQkJCX0K
LQkJCS8qIGFsc28sIFNFVCBQUklNQVJZIGlzIG1heWJlIGFscmVhZHkgc2VudCAqLwotCQl9Ci0J
CXJldHVybjsKLQl9Ci0KLQkvKiBNdWx0aXBsZSBsb2NhbCBhZGRyZXNzZXMgZXhzaXN0IGluIHRo
ZSBhc3NvY2lhdGlvbi4gICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMs
IHNjdHBfbmV4dCkgewotCQkvKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIGFuZCBzb3VyY2UgYWRk
cmVzcyAqLwotCQlpZiAobmV0LT5yby5yb19ydCkgewotCQkJUlRGUkVFKG5ldC0+cm8ucm9fcnQp
OwotCQkJbmV0LT5yby5yb19ydCA9IE5VTEw7Ci0JCX0KLQkJaWYgKG5ldC0+c3JjX2FkZHJfc2Vs
ZWN0ZWQpIHsKLQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCW5ldC0+cm8u
X3NfYWRkciA9IE5VTEw7Ci0JCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQkJfQotCQkv
KiBDaGVjayBpZiB0aGUgbmV4dGhvcCBpcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBuZXcgYWRkcmVz
cy4KLQkJICAgSWYgdGhlIG5ldyBhZGRyZXNzIGlzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJl
bnQgbmV4dGhvcCwKLQkJICAgdGhlIHBhdGggd2lsbCBiZSBjaGFuZ2VkLgotCQkgICBJZiB0aGUg
bmV3IGFkZHJlc3MgaXMgTk9UIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQKLQkJICAgbmV4
dGhvcCwgdGhlIHBhdGggd2lsbCBub3QgYmUgY2hhbmdlZC4KLQkJICovCi0JCVNDVFBfUlRBTExP
Qygoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCi0JCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmRlZl92
cmZfaWQsCi0JCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmZpYm51bSk7Ci0JCWlmIChuZXQtPnJvLnJv
X3J0ID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQljaGFuZ2VkID0gMDsKLQkJc3dpdGNoIChu
ZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lO
RVQ6Ci0JCQlpZiAoc2N0cF92NHNyY19tYXRjaF9uZXh0aG9wKG5ld2lmYSwgKHNjdHBfcm91dGVf
dCAqKSZuZXQtPnJvKSkgewotCQkJCWNoYW5nZWQgPSAxOwotCQkJfQotCQkJYnJlYWs7Ci0jZW5k
aWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQkJaWYgKHNjdHBfdjZzcmNfbWF0
Y2hfbmV4dGhvcCgKLQkJCSAgICAmbmV3aWZhLT5hZGRyZXNzLnNpbjYsIChzY3RwX3JvdXRlX3Qg
KikmbmV0LT5ybykpIHsKLQkJCQljaGFuZ2VkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlm
Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQkvKiBpZiB0aGUgbmV3bHkgYWRkZWQgYWRk
cmVzcyBkb2VzIG5vdCByZWxhdGUgcm91dGluZwotCQkgICBpbmZvcm1hdGlvbiwgd2Ugc2tpcC4K
LQkJICovCi0JCWlmIChjaGFuZ2VkID09IDApCi0JCQljb250aW51ZTsKLQkJLyogUmV0cmFuc21p
dCB1bmFja25vd2xlZGdlZCBEQVRBIGNodW5rcyBpbW1lZGlhdGVseSAqLwotCQlpZiAoc2N0cF9p
c19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikpIHsKLQkJCXNjdHBfbmV0
X2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsIG5ldCk7Ci0JCX0KLQkJLyogU2VuZCBTRVQgUFJJTUFS
WSBmb3IgdGhpcyBuZXcgYWRkcmVzcyAqLwotCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbikgewotCQkJKHZvaWQpc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBu
ZXdpZmEsCi0JCQkJCQkgICAgIFNDVFBfU0VUX1BSSU1fQUREUik7Ci0JCX0KLQl9Ci19Ci0jZW5k
aWYgLyogX19GcmVlQlNEX18gIF9fQVBQTEVfXyAgX19Vc2Vyc3BhY2VfXyAqLwotCi0vKgotICog
cHJvY2VzcyBhbiBBREQvREVMRVRFIElQIGFjayBmcm9tIHBlZXIuCi0gKiBhZGRyOiBjb3JyZXNw
b25kaW5nIHNjdHBfaWZhIHRvIHRoZSBhZGRyZXNzIGJlaW5nIGFkZGVkL2RlbGV0ZWQuCi0gKiB0
eXBlOiBTQ1RQX0FERF9JUF9BRERSRVNTIG9yIFNDVFBfREVMX0lQX0FERFJFU1MuCi0gKiBmbGFn
OiAxPXN1Y2Nlc3MsIDA9ZmFpbHVyZS4KLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfYXNjb25mX2Fk
ZHJfbWdtdF9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKmFkZHIs
IHVpbnQzMl90IGZsYWcpCi17Ci0JLyoKLQkgKiBkbyB0aGUgbmVjZXNzYXJ5IGFzb2MgbGlzdCB3
b3JrLSBpZiB3ZSBnZXQgYSBmYWlsdXJlIGluZGljYXRpb24sCi0JICogbGVhdmUgdGhlIGFkZHJl
c3Mgb24gdGhlIGFzc29jJ3MgcmVzdHJpY3RlZCBsaXN0LiAgSWYgd2UgZ2V0IGEKLQkgKiBzdWNj
ZXNzIGluZGljYXRpb24sIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSByZXN0cmljdGVkIGxp
c3QuCi0JICovCi0JLyoKLQkgKiBOb3RlOiB0aGlzIHdpbGwgb25seSBvY2N1ciBmb3IgQUREX0lQ
X0FERFJFU1MsIHNpbmNlCi0JICogREVMX0lQX0FERFJFU1MgaXMgbmV2ZXIgYWN0dWFsbHkgYWRk
ZWQgdG8gdGhlIGxpc3QuLi4KLQkgKi8KLQlpZiAoZmxhZykgewotCQkvKiBzdWNjZXNzIGNhc2Us
IHNvIHJlbW92ZSBmcm9tIHRoZSByZXN0cmljdGVkIGxpc3QgKi8KLQkJc2N0cF9kZWxfbG9jYWxf
YWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFkZHIpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJaWYgKHNj
dHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKLQkJICAgIHNjdHBfaXNf
bW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7Ci0JCQlzY3RwX3BhdGhf
Y2hlY2tfYW5kX3JlYWN0KHN0Y2IsIGFkZHIpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYgLyog
X19GcmVlQlNEX18gX19BUFBMRV9fIF9fVXNlcnNwYWNlX18gKi8KLQkJLyogY2xlYXIgYW55IGNh
Y2hlZC90b3BvbG9naWNhbGx5IGluY29ycmVjdCBzb3VyY2UgYWRkcmVzc2VzICovCi0JCXNjdHBf
YXNjb25mX25ldHNfY2xlYW51cChzdGNiLCBhZGRyLT5pZm5fcCk7Ci0JfQotCS8qIGVsc2UsIGxl
YXZlIGl0IG9uIHRoZSBsaXN0ICovCi19Ci0KLS8qCi0gKiBhZGQgYW4gYXNjb25mIGFkZC9kZWxl
dGUvc2V0IHByaW1hcnkgSVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlLgotICogdHlw
ZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBfU0VUX1BS
SU1fQUREUi4KLSAqIHJldHVybnMgMCBpZiBxdWV1ZWQsIC0xIGlmIG5vdCBxdWV1ZWQvcmVtb3Zl
ZC4KLSAqIE5PVEU6IGlmIGFkZGluZywgYnV0IGEgZGVsZXRlIGZvciB0aGUgc2FtZSBhZGRyZXNz
IGlzIGFscmVhZHkgc2NoZWR1bGVkCi0gKiAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkg
cmVtb3ZlIGl0IGZyb20gcXVldWUuICBTYW1lIGZvciBkZWxldGluZwotICogYW4gYWRkcmVzcyBh
bHJlYWR5IHNjaGVkdWxlZCBmb3IgYWRkLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZv
dW5kLAotICogaWdub3JlIHRoZSBuZXcgb25lLgotICovCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29u
Zl9xdWV1ZV9tZ210KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEs
Ci0JCSAgICAgICB1aW50MTZfdCB0eXBlKQotewotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICph
YSwgKmFhX25leHQ7Ci0KLQkvKiBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXNuJ3QgYWxyZWFkeSBp
biB0aGUgcXVldWUgKi8KLQlUQUlMUV9GT1JFQUNIX1NBRkUoYWEsICZzdGNiLT5hc29jLmFzY29u
Zl9xdWV1ZSwgbmV4dCwgYWFfbmV4dCkgewotCQkvKiBhZGRyZXNzIG1hdGNoPyAqLwotCQlpZiAo
c2N0cF9hc2NvbmZfYWRkcl9tYXRjaChhYSwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkKLQkJCWNv
bnRpbnVlOwotCQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIGJ1dCBub3Qgc2Vu
dD8KLQkJICogcGFzcyB0aGUgcmVxdWVzdCBhbHJlYWR5IHNlbnQgaW4gb3JkZXIgdG8gcmVzb2x2
ZSB0aGUgZm9sbG93aW5nIGNhc2U6Ci0JCSAqICAxLiBhcnJpdmFsIG9mIEFERCwgdGhlbiBzZW50
Ci0JCSAqICAyLiBhcnJpdmFsIG9mIERFTC4gd2UgY2FuJ3QgcmVtb3ZlIHRoZSBBREQgcmVxdWVz
dCBhbHJlYWR5IHNlbnQKLQkJICogIDMuIGFycml2YWwgb2YgQURECi0JCSAqLwotCQlpZiAoYWEt
PmFwLmFwaC5waC5wYXJhbV90eXBlID09IHR5cGUgJiYgYWEtPnNlbnQgPT0gMCkgewotCQkJcmV0
dXJuICgtMSk7Ci0JCX0KLQkJLyogaXMgdGhlIG5lZ2F0aXZlIHJlcXVlc3QgYWxyZWFkeSBpbiBx
dWV1ZSwgYW5kIG5vdCBzZW50ICovCi0JCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0g
U0NUUF9BRERfSVBfQUREUkVTUykgJiYKLQkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUg
PT0gU0NUUF9ERUxfSVBfQUREUkVTUykpIHsKLQkJCS8qIGFkZCByZXF1ZXN0ZWQsIGRlbGV0ZSBh
bHJlYWR5IHF1ZXVlZCAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1
ZSwgYWEsIG5leHQpOwotCQkJLyogcmVtb3ZlIHRoZSBpZmEgZnJvbSB0aGUgcmVzdHJpY3RlZCBs
aXN0ICovCi0JCQlzY3RwX2RlbF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKLQkJ
CS8qIGZyZWUgdGhlIGFzY29uZiBwYXJhbSAqLwotCQkJU0NUUF9GUkVFKGFhLCBTQ1RQX01fQVND
X0FERFIpOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJhc2NvbmZfcXVldWVfbWdt
dDogYWRkIHJlbW92ZXMgcXVldWVkIGVudHJ5XG4iKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0J
CWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgJiYK
LQkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykp
IHsKLQkJCS8qIGRlbGV0ZSByZXF1ZXN0ZWQsIGFkZCBhbHJlYWR5IHF1ZXVlZCAqLwotCQkJVEFJ
TFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQkJLyogcmVt
b3ZlIHRoZSBhYS0+aWZhIGZyb20gdGhlIHJlc3RyaWN0ZWQgbGlzdCAqLwotCQkJc2N0cF9kZWxf
bG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEpOwotCQkJLyogZnJlZSB0aGUgYXNj
b25mIHBhcmFtICovCi0JCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7Ci0JCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1ZV9tZ210OiBkZWxldGUgcmVtb3Zl
cyBxdWV1ZWQgZW50cnlcbiIpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQl9IC8qIGZvciBlYWNo
IGFhICovCi0KLQkvKiBhZGRpbmcgbmV3IHJlcXVlc3QgdG8gdGhlIHF1ZXVlICovCi0JU0NUUF9N
QUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAotCQkgICAg
U0NUUF9NX0FTQ19BRERSKTsKLQlpZiAoYWEgPT0gTlVMTCkgewotCQkvKiBkaWRuJ3QgZ2V0IG1l
bW9yeSAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImFzY29uZl9xdWV1ZV9tZ210
OiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JYWEtPnNw
ZWNpYWxfZGVsID0gMDsKLQkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBhcmFtZXRlciBmaWVs
ZHMgKi8KLQkvKiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQiIGR1cmluZyBzZW5k
ICovCi0JYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gdHlwZTsKLQlhYS0+aWZhID0gaWZhOwot
CWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKLQkvKiBjb3JyZWxhdGlvbl9pZCBm
aWxsZWQgaW4gZHVyaW5nIHNlbmQgcm91dGluZSBsYXRlci4uLiAqLwotCXN3aXRjaCAoaWZhLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7
Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9ICZpZmEtPmFkZHJlc3Mu
c2luNjsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsK
LQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0pKTsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0pOwotCQltZW1jcHkoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9h
ZGRyLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlicmVhazsKLQl9Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCXsKLQkJc3RydWN0IHNvY2thZGRy
X2luICpzaW47Ci0KLQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCWFhLT5hcC5hZGRycC5w
aC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7Ci0JCWFhLT5hcC5hZGRycC5waC5wYXJh
bV9sZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSk7Ci0JCWFhLT5h
cC5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhk
cikgKwotCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKLQkJbWVtY3B5
KCZhYS0+YXAuYWRkcnAuYWRkciwgJnNpbi0+c2luX2FkZHIsCi0JCSAgICAgICBzaXplb2Yoc3Ry
dWN0IGluX2FkZHIpKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogaW52
YWxpZCBmYW1pbHkhICovCi0JCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKLQkJc2N0
cF9mcmVlX2lmYShpZmEpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JYWEtPnNlbnQgPSAwOwkJLyog
Y2xlYXIgc2VudCBmbGFnICovCi0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5hc2Nv
bmZfcXVldWUsIGFhLCBuZXh0KTsKLSNpZmRlZiBTQ1RQX0RFQlVHCi0JaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FTQ09ORjIpIHsKLQkJaWYgKHR5cGUg
PT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkJU0NUUF9QUklOVEYoImFzY29uZl9xdWV1ZV9t
Z210OiBpbnNlcnRlZCBhc2NvbmYgQUREX0lQX0FERFJFU1M6ICIpOwotCQkJU0NUUERCR19BRERS
KFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7Ci0JCX0gZWxzZSBpZiAodHlw
ZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQlTQ1RQX1BSSU5URigiYXNjb25mX3F1ZXVl
X21nbXQ6IGFwcGVuZGVkIGFzY29uZiBERUxfSVBfQUREUkVTUzogIik7Ci0JCQlTQ1RQREJHX0FE
RFIoU0NUUF9ERUJVR19BU0NPTkYyLCAmaWZhLT5hZGRyZXNzLnNhKTsKLQkJfSBlbHNlIHsKLQkJ
CVNDVFBfUFJJTlRGKCJhc2NvbmZfcXVldWVfbWdtdDogYXBwZW5kZWQgYXNjb25mIFNFVF9QUklN
X0FERFI6ICIpOwotCQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRk
cmVzcy5zYSk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotLyoKLSAq
IGFkZCBhbiBhc2NvbmYgb3BlcmF0aW9uIGZvciB0aGUgZ2l2ZW4gaWZhIGFuZCB0eXBlLgotICog
dHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQX0FERFJFU1MsIFNDVFBfU0VU
X1BSSU1fQUREUi4KLSAqIHJldHVybnMgMCBpZiBjb21wbGV0ZWQsIC0xIGlmIG5vdCBjb21wbGV0
ZWQsIDEgaWYgaW1tZWRpYXRlIHNlbmQgaXMKLSAqIGFkdmlzYWJsZS4KLSAqLwotc3RhdGljIGlu
dAotc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfaWZhICppZmEsCi0JCSAgICAgIHVpbnQxNl90IHR5cGUpCi17Ci0JdWludDMyX3Qgc3RhdHVz
OwotCWludCBwZW5kaW5nX2RlbGV0ZV9xdWV1ZWQgPSAwOwotCWludCBsYXN0OwotCi0JLyogc2Vl
IGlmIHBlZXIgc3VwcG9ydHMgQVNDT05GICovCi0JaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBv
cnRlZCA9PSAwKSB7Ci0JCXJldHVybiAoLTEpOwotCX0KLQotCS8qCi0JICogaWYgdGhpcyBpcyBk
ZWxldGluZyB0aGUgbGFzdCBhZGRyZXNzIGZyb20gdGhlIGFzc29jLCBtYXJrIGl0IGFzCi0JICog
cGVuZGluZy4KLQkgKi8KLQlpZiAoKHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgJiYgIXN0
Y2ItPmFzb2MuYXNjb25mX2RlbF9wZW5kaW5nKSB7Ci0JCWlmIChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJCWxhc3QgPSAoc2N0cF9sb2Nh
bF9hZGRyX2NvdW50KHN0Y2IpID09IDApOwotCQl9IGVsc2UgewotCQkJbGFzdCA9IChzY3RwX2xv
Y2FsX2FkZHJfY291bnQoc3RjYikgPT0gMSk7Ci0JCX0KLQkJaWYgKGxhc3QpIHsKLQkJCS8qIHNl
dCB0aGUgcGVuZGluZyBkZWxldGUgaW5mbyBvbmx5ICovCi0JCQlzdGNiLT5hc29jLmFzY29uZl9k
ZWxfcGVuZGluZyA9IDE7Ci0JCQlzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nID0g
aWZhOwotCQkJYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOwotCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjIsCi0JCQkJImFzY29uZl9xdWV1ZV9hZGQ6IG1hcmsgZGVsZXRlIGxh
c3QgYWRkcmVzcyBwZW5kaW5nXG4iKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JfQotCi0JLyog
cXVldWUgYW4gYXNjb25mIHBhcmFtZXRlciAqLwotCXN0YXR1cyA9IHNjdHBfYXNjb25mX3F1ZXVl
X21nbXQoc3RjYiwgaWZhLCB0eXBlKTsKLQotCS8qCi0JICogaWYgdGhpcyBpcyBhbiBhZGQsIGFu
ZCB0aGVyZSBpcyBhIGRlbGV0ZSBhbHNvIHBlbmRpbmcgKGkuZS4gdGhlCi0JICogbGFzdCBsb2Nh
bCBhZGRyZXNzIGlzIGJlaW5nIGNoYW5nZWQpLCBxdWV1ZSB0aGUgcGVuZGluZyBkZWxldGUgdG9v
LgotCSAqLwotCWlmICgodHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSAmJiBzdGNiLT5hc29j
LmFzY29uZl9kZWxfcGVuZGluZyAmJiAoc3RhdHVzID09IDApKSB7Ci0JCS8qIHF1ZXVlIGluIHRo
ZSBwZW5kaW5nIGRlbGV0ZSAqLwotCQlpZiAoc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLAot
CQkJCQkgICBzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9wZW5kaW5nLAotCQkJCQkgICBTQ1RQ
X0RFTF9JUF9BRERSRVNTKSA9PSAwKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwg
ImFzY29uZl9xdWV1ZV9hZGQ6IHF1ZWluZyBwZW5kaW5nIGRlbGV0ZVxuIik7Ci0JCQlwZW5kaW5n
X2RlbGV0ZV9xdWV1ZWQgPSAxOwotCQkJLyogY2xlYXIgb3V0IHRoZSBwZW5kaW5nIGRlbGV0ZSBp
bmZvICovCi0JCQlzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyA9IDA7Ci0JCQlzY3RwX2Zy
ZWVfaWZhKHN0Y2ItPmFzb2MuYXNjb25mX2FkZHJfZGVsX3BlbmRpbmcpOwotCQkJc3RjYi0+YXNv
Yy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZyA9IE5VTEw7Ci0JCX0KLQl9Ci0KLQlpZiAocGVuZGlu
Z19kZWxldGVfcXVldWVkKSB7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJLyoKLQkJICog
c2luY2Ugd2Uga25vdyB0aGF0IHRoZSBvbmx5L2xhc3QgYWRkcmVzcyBpcyBub3cgYmVpbmcKLQkJ
ICogY2hhbmdlZCBpbiB0aGlzIGNhc2UsIHJlc2V0IHRoZSBjd25kL3J0byBvbiBhbGwgbmV0cyB0
bwotCQkgKiBzdGFydCBhcyBhIG5ldyBhZGRyZXNzIGFuZCBwYXRoLiAgQWxzbyBjbGVhciB0aGUg
ZXJyb3IKLQkJICogY291bnRzIHRvIGdpdmUgdGhlIGFzc29jIHRoZSBiZXN0IGNoYW5jZSB0byBj
b21wbGV0ZSB0aGUKLQkJICogYWRkcmVzcyBjaGFuZ2UuCi0JCSAqLwotCQlUQUlMUV9GT1JFQUNI
KG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQlzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsCi0JCQkJCQkJCQkgIG5ldCk7
Ci0JCQluZXQtPlJUTyA9IDA7Ci0JCQluZXQtPmVycm9yX2NvdW50ID0gMDsKLQkJfQotCQlzdGNi
LT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJICAgICAgIHN0Y2ItPmFzb2Mub3Zl
cmFsbF9lcnJvcl9jb3VudCwKLQkJCQkgICAgICAgMCwKLQkJCQkgICAgICAgU0NUUF9GUk9NX1ND
VFBfQVNDT05GLAotCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCX0KLQotCQkvKiBxdWV1ZSBpbiBh
biBhZHZpc29yeSBzZXQgcHJpbWFyeSB0b28gKi8KLQkJKHZvaWQpc2N0cF9hc2NvbmZfcXVldWVf
bWdtdChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUik7Ci0JCS8qIGxldCBjYWxsZXIga25v
dyB3ZSBzaG91bGQgc2VuZCB0aGlzIG91dCBpbW1lZGlhdGVseSAqLwotCQlzdGF0dXMgPSAxOwot
CX0KLQlyZXR1cm4gKHN0YXR1cyk7Ci19Ci0KLS8qLQotICogYWRkIGFuIGFzY29uZiBkZWxldGUg
SVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlIGJ5IHNvY2thZGRyIGFuZAotICogcG9z
c2libHkgd2l0aCBubyBzY3RwX2lmYSBhdmFpbGFibGUuICBUaGlzIGlzIG9ubHkgY2FsbGVkIGJ5
IHRoZSByb3V0aW5lCi0gKiB0aGF0IGNoZWNrcyB0aGUgYWRkcmVzc2VzIGluIGFuIElOSVQtQUNL
IGFnYWluc3QgdGhlIGN1cnJlbnQgYWRkcmVzcyBsaXN0LgotICogcmV0dXJucyAwIGlmIGNvbXBs
ZXRlZCwgbm9uLXplcm8gaWYgbm90IGNvbXBsZXRlZC4KLSAqIE5PVEU6IGlmIGFuIGFkZCBpcyBh
bHJlYWR5IHNjaGVkdWxlZCAoYW5kIG5vdCB5ZXQgc2VudCBvdXQpLCBzaW1wbHkKLSAqIHJlbW92
ZSBpdCBmcm9tIHF1ZXVlLiAgSWYgYSBkdXBsaWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5kLCBpZ25v
cmUgdGhlCi0gKiBuZXcgb25lLgotICovCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9xdWV1ZV9z
YV9kZWxldGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQotewot
CXN0cnVjdCBzY3RwX2lmYSAqaWZhOwotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFh
X25leHQ7Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybiAoLTEpOwotCX0KLQkvKiBz
ZWUgaWYgcGVlciBzdXBwb3J0cyBBU0NPTkYgKi8KLQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3Vw
cG9ydGVkID09IDApIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIG1ha2Ugc3VyZSB0aGUgcmVx
dWVzdCBpc24ndCBhbHJlYWR5IGluIHRoZSBxdWV1ZSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShh
YSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7Ci0JCS8qIGFkZHJl
c3MgbWF0Y2g/ICovCi0JCWlmIChzY3RwX2FzY29uZl9hZGRyX21hdGNoKGFhLCBzYSkgPT0gMCkK
LQkJCWNvbnRpbnVlOwotCQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlIChzZW50
IG9yIG5vdCkgKi8KLQkJaWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0RFTF9J
UF9BRERSRVNTKSB7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkvKiBpcyB0aGUgbmVnYXRpdmUg
cmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlLCBhbmQgbm90IHNlbnQgKi8KLQkJaWYgKGFhLT5zZW50
ID09IDEpCi0JCQljb250aW51ZTsKLQkJaWYgKGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBT
Q1RQX0FERF9JUF9BRERSRVNTKSB7Ci0JCQkvKiBhZGQgYWxyZWFkeSBxdWV1ZWQsIHNvIHJlbW92
ZSBleGlzdGluZyBlbnRyeSAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9x
dWV1ZSwgYWEsIG5leHQpOwotCQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IGFhLT5pZmEpOwotCQkJLyogZnJlZSB0aGUgZW50cnkgKi8KLQkJCVNDVFBfRlJFRShhYSwgU0NU
UF9NX0FTQ19BRERSKTsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JfSAvKiBmb3IgZWFjaCBhYSAq
LwotCi0JLyogZmluZCBhbnkgZXhpc3RpbmcgaWZhLS0gTk9URSBpZmEgQ0FOIGJlIGFsbG93ZWQg
dG8gYmUgTlVMTCAqLwotCWlmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihzYSwgc3RjYi0+YXNv
Yy52cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQotCS8qIGFkZGluZyBuZXcgcmVxdWVz
dCB0byB0aGUgcXVldWUgKi8KLQlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBfYXNjb25mX2Fk
ZHIgKiwgc2l6ZW9mKCphYSksCi0JCSAgICBTQ1RQX01fQVNDX0FERFIpOwotCWlmIChhYSA9PSBO
VUxMKSB7Ci0JCS8qIGRpZG4ndCBnZXQgbWVtb3J5ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLAotCQkJInNjdHBfYXNjb25mX3F1ZXVlX3NhX2RlbGV0ZTogZmFpbGVkIHRvIGdldCBt
ZW1vcnkhXG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWFhLT5zcGVjaWFsX2RlbCA9IDA7Ci0J
LyogZmlsbCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzICovCi0JLyogdG9wIGxl
dmVsIGVsZW1lbnRzIGFyZSAibmV0d29ya2VkIiBkdXJpbmcgc2VuZCAqLwotCWFhLT5hcC5hcGgu
cGgucGFyYW1fdHlwZSA9IFNDVFBfREVMX0lQX0FERFJFU1M7Ci0JYWEtPmlmYSA9IGlmYTsKLQlp
ZiAoaWZhKQotCQlhdG9taWNfYWRkX2ludCgmaWZhLT5yZWZjb3VudCwgMSk7Ci0JLyogY29ycmVs
YXRpb25faWQgZmlsbGVkIGluIGR1cmluZyBzZW5kIHJvdXRpbmUgbGF0ZXIuLi4gKi8KLQlzd2l0
Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0Jewot
CQkvKiBJUHY2IGFkZHJlc3MgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFt
X3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0
aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKTsKLQkJYWEtPmFwLmFwaC5w
aC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCW1lbWNweSgmYWEtPmFwLmFkZHJw
LmFkZHIsICZzaW42LT5zaW42X2FkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0Jewot
CQkvKiBJUHY0IGFkZHJlc3MgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopc2E7Ci0KLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQ
X0lQVjRfQUREUkVTUzsKLQkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yo
c3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKTsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5n
dGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9pcHY0YWRkcl9wYXJhbSk7Ci0JCW1lbWNweSgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW4t
PnNpbl9hZGRyLAotCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCWJyZWFrOwotCX0K
LSNlbmRpZgotCWRlZmF1bHQ6Ci0JCS8qIGludmFsaWQgZmFtaWx5ISAqLwotCQlTQ1RQX0ZSRUUo
YWEsIFNDVFBfTV9BU0NfQUREUik7Ci0JCWlmIChpZmEpCi0JCQlzY3RwX2ZyZWVfaWZhKGlmYSk7
Ci0JCXJldHVybiAoLTEpOwotCX0KLQlhYS0+c2VudCA9IDA7CQkvKiBjbGVhciBzZW50IGZsYWcg
Ki8KLQotCS8qIGRlbGV0ZSBnb2VzIHRvIHRoZSBiYWNrIG9mIHRoZSBxdWV1ZSAqLwotCVRBSUxR
X0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCi0JLyog
c2FfaWdub3JlIE1FTUxFQUsge21lbW9yeSBpcyBwdXQgb24gdGhlIHRhaWxxfSAqLwotCXJldHVy
biAoMCk7Ci19Ci0KLS8qCi0gKiBmaW5kIGEgc3BlY2lmaWMgYXNjb25mIHBhcmFtIG9uIG91ciAi
c2VudCIgcXVldWUKLSAqLwotc3RhdGljIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICoKLXNjdHBf
YXNjb25mX2ZpbmRfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBjb3JyZWxh
dGlvbl9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWE7Ci0KLQlUQUlMUV9GT1JF
QUNIKGFhLCAmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIG5leHQpIHsKLQkJaWYgKGFhLT5hcC5h
cGguY29ycmVsYXRpb25faWQgPT0gY29ycmVsYXRpb25faWQgJiYKLQkJICAgIGFhLT5zZW50ID09
IDEpIHsKLQkJCS8qIGZvdW5kIGl0ICovCi0JCQlyZXR1cm4gKGFhKTsKLQkJfQotCX0KLQkvKiBk
aWRuJ3QgZmluZCBpdCAqLwotCXJldHVybiAoTlVMTCk7Ci19Ci0KLS8qCi0gKiBwcm9jZXNzIGFu
IFNDVFBfRVJST1JfQ0FVU0VfSU5EIGZvciBhIEFTQ09ORi1BQ0sgcGFyYW1ldGVyIGFuZCBkbwot
ICogbm90aWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUgZXJyb3IgcmVzcG9uc2UKLSAqLwotc3RhdGlj
IHZvaWQKLXNjdHBfYXNjb25mX3Byb2Nlc3NfZXJyb3Ioc3RydWN0IHNjdHBfdGNiICpzdGNiIFND
VFBfVU5VU0VELAotCQkJICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCkKLXsKLQlz
dHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqZWg7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOwot
CXVpbnQxNl90IHBhcmFtX3R5cGU7Ci0JdWludDE2X3QgZXJyb3JfY29kZTsKLQotCWVoID0gKHN0
cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKGFwaCArIDEpOwotCXBoID0gKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopKGVoICsgMSk7Ci0JLyogdmFsaWRhdGUgbGVuZ3RocyAqLwotCWlmIChodG9ucyhl
aC0+bGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkgPgotCSAgICBodG9u
cyhhcGgtPnBoLnBhcmFtX2xlbmd0aCkpIHsKLQkJLyogaW52YWxpZCBlcnJvciBjYXVzZSBsZW5n
dGggKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkiYXNjb25mX3Byb2Nlc3Nf
ZXJyb3I6IGNhdXNlIGVsZW1lbnQgdG9vIGxvbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmICho
dG9ucyhwaC0+cGFyYW1fbGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgPgot
CSAgICBodG9ucyhlaC0+bGVuZ3RoKSkgewotCQkvKiBpbnZhbGlkIGluY2x1ZGVkIFRMViBsZW5n
dGggKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkiYXNjb25mX3Byb2Nlc3Nf
ZXJyb3I6IGluY2x1ZGVkIFRMViB0b28gbG9uZ1xuIik7Ci0JCXJldHVybjsKLQl9Ci0JLyogd2hp
Y2ggZXJyb3IgY29kZSA/ICovCi0JZXJyb3JfY29kZSA9IG50b2hzKGVoLT5jb2RlKTsKLQlwYXJh
bV90eXBlID0gbnRvaHMoYXBoLT5waC5wYXJhbV90eXBlKTsKLQkvKiBGSVg6IHRoaXMgc2hvdWxk
IGdvIGJhY2sgdXAgdGhlIFJFTU9URV9FUlJPUiBVTFAgbm90aWZ5ICovCi0Jc3dpdGNoIChlcnJv
cl9jb2RlKSB7Ci0JY2FzZSBTQ1RQX0NBVVNFX1JFU09VUkNFX1NIT1JUQUdFOgotCQkvKiB3ZSBh
bGxvdyBvdXJzZWx2ZXMgdG8gInRyeSBhZ2FpbiIgZm9yIHRoaXMgZXJyb3IgKi8KLQkJYnJlYWs7
Ci0JZGVmYXVsdDoKLQkJLyogcGVlciBjYW4ndCBoYW5kbGUgaXQuLi4gKi8KLQkJc3dpdGNoIChw
YXJhbV90eXBlKSB7Ci0JCWNhc2UgU0NUUF9BRERfSVBfQUREUkVTUzoKLQkJY2FzZSBTQ1RQX0RF
TF9JUF9BRERSRVNTOgotCQljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKLQkJCWJyZWFrOwotCQlk
ZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBwcm9jZXNzIGFuIGFzY29u
ZiBxdWV1ZSBwYXJhbS4KLSAqIGFwYXJhbTogcGFyYW1ldGVyIHRvIHByb2Nlc3MsIHdpbGwgYmUg
cmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KLSAqIGZsYWc6IDE9c3VjY2VzcyBjYXNlLCAwPWZhaWx1
cmUgY2FzZQotICovCi1zdGF0aWMgdm9pZAotc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2so
c3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJICAgICAgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIg
KmFwYXJhbSwgdWludDMyX3QgZmxhZykKLXsKLQl1aW50MTZfdCBwYXJhbV90eXBlOwotCi0JLyog
cHJvY2VzcyB0aGlzIHBhcmFtICovCi0JcGFyYW1fdHlwZSA9IGFwYXJhbS0+YXAuYXBoLnBoLnBh
cmFtX3R5cGU7Ci0Jc3dpdGNoIChwYXJhbV90eXBlKSB7Ci0JY2FzZSBTQ1RQX0FERF9JUF9BRERS
RVNTOgotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJwcm9jZXNzX3BhcmFtX2Fj
azogYWRkZWQgSVAgYWRkcmVzc1xuIik7Ci0JCXNjdHBfYXNjb25mX2FkZHJfbWdtdF9hY2soc3Rj
YiwgYXBhcmFtLT5pZmEsIGZsYWcpOwotCQlicmVhazsKLQljYXNlIFNDVFBfREVMX0lQX0FERFJF
U1M6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nlc3NfcGFyYW1fYWNr
OiBkZWxldGVkIElQIGFkZHJlc3NcbiIpOwotCQkvKiBub3RoaW5nIHJlYWxseSB0byBkby4uLiBs
aXN0cyBhbHJlYWR5IHVwZGF0ZWQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NFVF9QUklNX0FE
RFI6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJInByb2Nlc3NfcGFyYW1fYWNr
OiBzZXQgcHJpbWFyeSBJUCBhZGRyZXNzXG4iKTsKLQkJLyogbm90aGluZyB0byBkby4uLiBwZWVy
IG1heSBzdGFydCB1c2luZyB0aGlzIGFkZHIgKi8KLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyog
c2hvdWxkIE5FVkVSIGhhcHBlbiAqLwotCQlicmVhazsKLQl9Ci0KLQkvKiByZW1vdmUgdGhlIHBh
cmFtIGFuZCBmcmVlIGl0ICovCi0JVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1
ZSwgYXBhcmFtLCBuZXh0KTsKLQlpZiAoYXBhcmFtLT5pZmEpCi0JCXNjdHBfZnJlZV9pZmEoYXBh
cmFtLT5pZmEpOwotCVNDVFBfRlJFRShhcGFyYW0sIFNDVFBfTV9BU0NfQUREUik7Ci19Ci0KLS8q
Ci0gKiBjbGVhbnVwIGZyb20gYSBiYWQgYXNjb25mIGFjayBwYXJhbWV0ZXIKLSAqLwotc3RhdGlj
IHZvaWQKLXNjdHBfYXNjb25mX2Fja19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9V
TlVTRUQpCi17Ci0JLyogYXNzdW1lIHBlZXIgZG9lc24ndCByZWFsbHkga25vdyBob3cgdG8gZG8g
YXNjb25mcyAqLwotCS8qIFhYWCB3ZSBjb3VsZCBmcmVlIHRoZSBwZW5kaW5nIHF1ZXVlIGhlcmUg
Ki8KLQotfQotCi12b2lkCi1zY3RwX2hhbmRsZV9hc2NvbmZfYWNrKHN0cnVjdCBtYnVmICptLCBp
bnQgb2Zmc2V0LAotCQkgICAgICAgc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayAqY3AsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50
ICphYm9ydF9ub191bmxvY2spCi17Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0J
dWludDMyX3Qgc2VyaWFsX251bTsKLQl1aW50MTZfdCBhY2tfbGVuZ3RoOwotCXN0cnVjdCBzY3Rw
X2FzY29uZl9wYXJhbWhkciAqYXBoOwotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFh
X25leHQ7Ci0JdWludDMyX3QgbGFzdF9lcnJvcl9pZCA9IDA7CS8qIGxhc3QgZXJyb3IgY29ycmVs
YXRpb24gaWQgKi8KLQl1aW50MzJfdCBpZDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYXA7
Ci0KLQkvKiBhc2NvbmYgcGFyYW0gYnVmZmVyICovCi0JdWludDhfdCBhcGFyYW1fYnVmW1NDVFBf
UEFSQU1fQlVGRkVSX1NJWkVdOwotCi0JLyogdmVyaWZ5IG1pbmltdW0gbGVuZ3RoICovCi0JaWYg
KG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9h
Y2tfY2h1bmspKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImhhbmRsZV9h
c2NvbmZfYWNrOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIsCi0JCQludG9ocyhjcC0+Y2guY2h1
bmtfbGVuZ3RoKSk7Ci0JCXJldHVybjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCXNlcmlh
bF9udW0gPSBudG9obChjcC0+c2VyaWFsX251bWJlcik7Ci0KLQkvKgotCSAqIE5PVEU6IHdlIG1h
eSB3YW50IHRvIGhhbmRsZSB0aGlzIGRpZmZlcmVudGx5LSBjdXJyZW50bHksIHdlIHdpbGwKLQkg
KiBhYm9ydCB3aGVuIHdlIGdldCBhbiBhY2sgZm9yIHRoZSBleHBlY3RlZCBzZXJpYWwgbnVtYmVy
ICsgMSAoZWcuCi0JICogd2UgZGlkbid0IHNlbmQgaXQpLCBwcm9jZXNzIGFuIGFjayBub3JtYWxs
eSBpZiBpdCBpcyB0aGUgZXhwZWN0ZWQKLQkgKiBzZXJpYWwgbnVtYmVyLCBhbmQgcmUtc2VuZCB0
aGUgcHJldmlvdXMgYWNrIGZvciAqQUxMKiBvdGhlcgotCSAqIHNlcmlhbCBudW1iZXJzCi0JICov
Ci0KLQkvKgotCSAqIGlmIHRoZSBzZXJpYWwgbnVtYmVyIGlzIHRoZSBuZXh0IGV4cGVjdGVkLCBi
dXQgSSBkaWRuJ3Qgc2VuZCBpdCwKLQkgKiBhYm9ydCB0aGUgYXNvYywgc2luY2Ugc29tZW9uZSBw
cm9iYWJseSBqdXN0IGhpamFja2VkIHVzLi4uCi0JICovCi0JaWYgKHNlcmlhbF9udW0gPT0gKGFz
b2MtPmFzY29uZl9zZXFfb3V0ICsgMSkpIHsKLQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJY2hh
ciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgdW5leHBlY3RlZCBuZXh0IHNlcmlhbCBudW1iZXIh
IEFib3J0aW5nIGFzb2MhXG4iKTsKLQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk5ldmVy
IHNlbnQgc2VyaWFsIG51bWJlciAlOC44eCIsCi0JCQkgc2VyaWFsX251bSk7Ci0JCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7
Ci0JCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJy
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJu
OwotCX0KLQlpZiAoc2VyaWFsX251bSAhPSBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCArIDEp
IHsKLQkJLyogZ290IGEgZHVwbGljYXRlL3VuZXhwZWN0ZWQgQVNDT05GLUFDSyAqLwotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgZHVwbGljYXRl
L3VuZXhwZWN0ZWQgc2VyaWFsIG51bWJlciA9ICV4aCAoZXhwZWN0ZWQgPSAleGgpXG4iLAotCQkJ
c2VyaWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNrZWQgKyAxKTsKLQkJcmV0dXJuOwot
CX0KLQotCWlmIChzZXJpYWxfbnVtID09IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMSkgewotCQkv
KiBzdG9wIG91ciB0aW1lciAqLwotCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0FT
Q09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCVNDVFBfRlJPTV9TQ1RQX0FTQ09O
RiArIFNDVFBfTE9DXzUpOwotCX0KLQotCS8qIHByb2Nlc3MgdGhlIEFTQ09ORi1BQ0sgY29udGVu
dHMgKi8KLQlhY2tfbGVuZ3RoID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgLQotCSAgICBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7Ci0Jb2Zmc2V0ICs9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKTsKLQkvKiBwcm9jZXNzIHRocm91Z2ggYWxsIHBh
cmFtZXRlcnMgKi8KLQl3aGlsZSAoYWNrX2xlbmd0aCA+PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNj
b25mX3BhcmFtaGRyKSkgewotCQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBl
OwotCi0JCS8qIGdldCBwb2ludGVyIHRvIG5leHQgYXNjb25mIHBhcmFtZXRlciAqLwotCQlhcGgg
PSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQs
Ci0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7
Ci0JCWlmIChhcGggPT0gTlVMTCkgewotCQkJLyogY2FuJ3QgZ2V0IGFuIGFzY29uZiBwYXJhbWhk
ciAqLwotCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOwotCQkJcmV0dXJuOwotCQl9Ci0J
CXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOwotCQlwYXJhbV9sZW5ndGgg
PSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JCWlmIChwYXJhbV9sZW5ndGggPiBhY2tf
bGVuZ3RoKSB7Ci0JCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7Ci0JCQlyZXR1cm47Ci0J
CX0KLQkJaWYgKHBhcmFtX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsK
LQkJCXNjdHBfYXNjb25mX2Fja19jbGVhcihzdGNiKTsKLQkJCXJldHVybjsKLQkJfQotCQkvKiBn
ZXQgdGhlIGNvbXBsZXRlIHBhcmFtZXRlci4uLiAqLwotCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6
ZW9mKGFwYXJhbV9idWYpKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCQki
cGFyYW0gbGVuZ3RoICgldSkgbGFyZ2VyIHRoYW4gYnVmZmVyIHNpemUhXG4iLCBwYXJhbV9sZW5n
dGgpOwotCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2IpOwotCQkJcmV0dXJuOwotCQl9Ci0J
CWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9m
ZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKLQkJaWYgKGFwaCA9PSBOVUxMKSB7Ci0J
CQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogY29y
cmVsYXRpb25faWQgaXMgdHJhbnNwYXJlbnQgdG8gcGVlciwgbm8gbnRvaGwgbmVlZGVkICovCi0J
CWlkID0gYXBoLT5jb3JyZWxhdGlvbl9pZDsKLQotCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKLQkJ
Y2FzZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKLQkJCWxhc3RfZXJyb3JfaWQgPSBpZDsKLQkJCS8q
IGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1ZSAqLwotCQkJ
YXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKLQkJCWlmIChhcCA9PSBOVUxM
KSB7Ci0JCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUhICovCi0JCQkJ
YnJlYWs7Ci0JCQl9Ci0JCQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIGZhaWxlZCBmbGFnICov
Ci0JCQlzY3RwX2FzY29uZl9wcm9jZXNzX3BhcmFtX2FjayhzdGNiLCBhcCwgMCk7Ci0JCQkvKiBw
cm9jZXNzIHRoZSBlcnJvciByZXNwb25zZSAqLwotCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19lcnJv
cihzdGNiLCBhcGgpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9SVDoKLQkJ
CS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBhcmFtIGluIG91ciBxdWV1ZSAqLwot
CQkJYXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2IsIGlkKTsKLQkJCWlmIChhcCA9PSBO
VUxMKSB7Ci0JCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhpcyBpbiBvdXIgcXVldWUhICovCi0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBwcm9jZXNzIHRoZSBwYXJhbWV0ZXIsIHN1Y2Nlc3MgZmxh
ZyAqLwotCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwgYXAsIDEpOwotCQkJ
YnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQkJLyogc3dpdGNoICovCi0KLQkJLyog
dXBkYXRlIHJlbWFpbmluZyBBU0NPTkYtQUNLIG1lc3NhZ2UgbGVuZ3RoIHRvIHByb2Nlc3MgKi8K
LQkJYWNrX2xlbmd0aCAtPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOwotCQlpZiAoYWNrX2xl
bmd0aCA8PSAwKSB7Ci0JCQkvKiBubyBtb3JlIGRhdGEgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJ
CWJyZWFrOwotCQl9Ci0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwYXJhbV9sZW5ndGgpOwotCX0g
Lyogd2hpbGUgKi8KLQotCS8qCi0JICogaWYgdGhlcmUgYXJlIGFueSAic2VudCIgcGFyYW1zIHN0
aWxsIG9uIHRoZSBxdWV1ZSwgdGhlc2UgYXJlCi0JICogaW1wbGljaXRseSAic3VjY2VzcyIsIG9y
ICJmYWlsZWQiIChpZiB3ZSBnb3QgYW4gZXJyb3IgYmFjaykgLi4uCi0JICogc28gcHJvY2VzcyB0
aGVzZSBhcHByb3ByaWF0ZWx5Ci0JICoKLQkgKiB3ZSBhc3N1bWUgdGhhdCB0aGUgY29ycmVsYXRp
b25faWQncyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nCi0JICogYmVnaW5uaW5nIGZyb20g
MSBhbmQgdGhhdCB3ZSBkb24ndCBoYXZlICp0aGF0KiBtYW55IG91dHN0YW5kaW5nCi0JICogYXQg
YW55IGdpdmVuIHRpbWUKLQkgKi8KLQlpZiAobGFzdF9lcnJvcl9pZCA9PSAwKQotCQlsYXN0X2Vy
cm9yX2lkLS07CS8qIHNldCB0byAibWF4IiB2YWx1ZSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShh
YSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBhYV9uZXh0KSB7Ci0JCWlmIChhYS0+
c2VudCA9PSAxKSB7Ci0JCQkvKgotCQkJICogaW1wbGljaXRseSBzdWNjZXNzZnVsIG9yIGZhaWxl
ZCBpZiBjb3JyZWxhdGlvbl9pZAotCQkJICogPCBsYXN0X2Vycm9yX2lkLCB0aGVuIHN1Y2Nlc3Mg
ZWxzZSwgZmFpbHVyZQotCQkJICovCi0JCQlpZiAoYWEtPmFwLmFwaC5jb3JyZWxhdGlvbl9pZCA8
IGxhc3RfZXJyb3JfaWQpCi0JCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9hY2soc3RjYiwg
YWEsIDEpOwotCQkJZWxzZQotCQkJCXNjdHBfYXNjb25mX3Byb2Nlc3NfcGFyYW1fYWNrKHN0Y2Is
IGFhLCAwKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBzaW5jZSB3ZSBhbHdheXMgcHJvY2Vz
cyBpbiBvcmRlciAoRklGTyBxdWV1ZSkgaWYKLQkJCSAqIHdlIHJlYWNoIG9uZSB0aGF0IGhhc24n
dCBiZWVuIHNlbnQsIHRoZSByZXN0Ci0JCQkgKiBzaG91bGQgbm90IGhhdmUgYmVlbiBzZW50IGVp
dGhlci4gc28sIHdlJ3JlCi0JCQkgKiBkb25lLi4uCi0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0J
fQotCi0JLyogdXBkYXRlIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0byB1c2UgKi8KLQlhc29j
LT5hc2NvbmZfc2VxX291dF9hY2tlZCsrOwotCS8qIHJlbW92ZSB0aGUgb2xkIEFTQ09ORiBvbiBv
dXIgb3V0Ym91bmQgcXVldWUgKi8KLQlzY3RwX3Rvc3Nfb2xkX2FzY29uZihzdGNiKTsKLQlpZiAo
IVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSkpIHsKLSNpZmRlZiBTQ1RQX1RJ
TUVSX0JBU0VEX0FTQ09ORgotCQkvKiB3ZSBoYXZlIG1vcmUgcGFyYW1zLCBzbyByZXN0YXJ0IG91
ciB0aW1lciAqLwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIHN0
Y2ItPnNjdHBfZXAsCi0JCQkJIHN0Y2IsIG5ldCk7Ci0jZWxzZQotCQkvKiB3ZSBoYXZlIG1vcmUg
cGFyYW1zLCBzbyBzZW5kIG91dCBtb3JlICovCi0JCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgbmV0
LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7Ci0jZW5kaWYKLQl9Ci19Ci0KLSNpZmRlZiBJTkVUNgot
c3RhdGljIHVpbnQzMl90Ci1zY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NiwgKm5ldDY7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JaWYgKHNhLT5zYV9mYW1pbHkg
IT0gQUZfSU5FVDYpIHsKLQkJLyogd3JvbmcgZmFtaWx5ICovCi0JCXJldHVybiAoMCk7Ci0JfQot
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCWlmIChJTjZfSVNfQUREUl9MSU5L
TE9DQUwoJnNpbjYtPnNpbjZfYWRkcikgPT0gMCkgewotCQkvKiBub3QgbGluayBsb2NhbCBhZGRy
ZXNzICovCi0JCXJldHVybiAoMCk7Ci0JfQotCS8qIGh1bnQgdGhyb3VnaCBvdXIgZGVzdGluYXRp
b24gbmV0cyBsaXN0IGZvciB0aGlzIHNjb3BlX2lkICovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZz
dGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHIgKiko
Jm5ldC0+cm8uX2xfYWRkcikpLT5zYV9mYW1pbHkgIT0KLQkJICAgIEFGX0lORVQ2KQotCQkJY29u
dGludWU7Ci0JCW5ldDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7
Ci0JCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ldDYtPnNpbjZfYWRkcikgPT0gMCkKLQkJ
CWNvbnRpbnVlOwotCQlpZiAoc2N0cF9pc19zYW1lX3Njb3BlKHNpbjYsIG5ldDYpKSB7Ci0JCQkv
KiBmb3VuZCBvbmUgKi8KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0JLyogZGlkbid0IGZpbmQg
b25lICovCi0JcmV0dXJuICgwKTsKLX0KLSNlbmRpZgotCi0vKgotICogYWRkcmVzcyBtYW5hZ2Vt
ZW50IGZ1bmN0aW9ucwotICovCi1zdGF0aWMgdm9pZAotc2N0cF9hZGRyX21nbXRfYXNzb2Moc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkgICAgIHN0cnVj
dCBzY3RwX2lmYSAqaWZhLCB1aW50MTZfdCB0eXBlLCBpbnQgYWRkcl9sb2NrZWQpCi17Ci0JaW50
IHN0YXR1czsKLQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRB
TEwpID09IDAgfHwKLQkgICAgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X0RPX0FTQ09ORikpIHsKLQkJLyogc3Vic2V0IGJvdW5kLCBubyBBU0NPTkYgYWxsb3dlZCBjYXNl
LCBzbyBpZ25vcmUgKi8KLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIG5vdGU6IHdlIGtub3cgdGhp
cyBpcyBub3QgdGhlIHN1YnNldCBib3VuZCwgbm8gQVNDT05GIGNhc2UgZWcuCi0JICogdGhpcyBp
cyBib3VuZGFsbCBvciBzdWJzZXQgYm91bmQgdy9BU0NPTkYgYWxsb3dlZAotCSAqLwotCi0JLyog
Zmlyc3QsIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlzIElQdjQgb3IgSVB2NiBhbmQgbm90
IGphaWxlZCAqLwotCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVm
IElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAo
cHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCSAgICAgICAgICAg
ICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApIHsKLQkJCXJldHVy
bjsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCWNhc2UgQUZf
SU5FVDoKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAocHJpc29uX2NoZWNrX2lwNChp
bnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICZpZmEtPmFk
ZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQli
cmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0jaWZkZWYgSU5FVDYKLQkv
KiBtYWtlIHN1cmUgd2UncmUgImFsbG93ZWQiIHRvIGFkZCB0aGlzIHR5cGUgb2YgYWRkciAqLwot
CWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCS8qIGludmFs
aWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkKLQkJCXJldHVybjsKLQkJLyogaXMgdGhl
IHY2IGFkZHIgcmVhbGx5IHZhbGlkID8gKi8KLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBT
Q1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotI2VuZGlmCi0J
LyogcHV0IHRoaXMgYWRkcmVzcyBvbiB0aGUgInBlbmRpbmcvZG8gbm90IHVzZSB5ZXQiIGxpc3Qg
Ki8KLQlzY3RwX2FkZF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgaWZhKTsKLQkvKgotCSAq
IGNoZWNrIGFkZHJlc3Mgc2NvcGUgaWYgYWRkcmVzcyBpcyBvdXQgb2Ygc2NvcGUsIGRvbid0IHF1
ZXVlCi0JICogYW55dGhpbmcuLi4gbm90ZTogdGhpcyB3b3VsZCBsZWF2ZSB0aGUgYWRkcmVzcyBv
biBib3RoIGlucCBhbmQKLQkgKiBhc29jIGxpc3RzCi0JICovCi0Jc3dpdGNoIChpZmEtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlzaW42ID0gJmlmYS0+YWRkcmVzcy5zaW42
OwotCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJ
CS8qIHdlIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KLQkJCXJldHVybjsKLQkJfQotCQlp
ZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQlpZiAoc3Rj
Yi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwKSB7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJ
LyogaXMgaXQgdGhlIHJpZ2h0IGxpbmsgbG9jYWwgc2NvcGU/ICovCi0JCQlpZiAoc2N0cF9pc19z
Y29wZWlkX2luX25ldHMoc3RjYiwgJmlmYS0+YWRkcmVzcy5zYSkgPT0gMCkgewotCQkJCXJldHVy
bjsKLQkJCX0KLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID09IDAgJiYK
LQkJICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJcmV0
dXJuOwotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQljYXNlIEFGX0lO
RVQ6Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJc3RydWN0IGluNnBjYiAqaW5w
NjsKLQotCQlpbnA2ID0gKHN0cnVjdCBpbjZwY2IgKikmaW5wLT5pcF9pbnAuaW5wOwotCQkvKiBp
bnZhbGlkIGlmIHdlIGFyZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KLQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKLQkJICAgIFNDVFBfSVBWNl9WNk9O
TFkoaW5wNikpCi0JCQlyZXR1cm47Ci0KLQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCWlm
IChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7Ci0JCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQg
YWRkcmVzc2VzICovCi0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2
NF9sb2NhbF9zY29wZSA9PSAwICYmCi0JCSAgICBJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+
c2luX2FkZHIpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVm
YXVsdDoKLQkJLyogZWxzZSwgbm90IEFGX0lORVQgb3IgQUZfSU5FVDYsIHNvIHNraXAgKi8KLQkJ
cmV0dXJuOwotCX0KLQotCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyZXNzIGFkZC9k
ZWxldGUgKi8KLQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9f
QVNDT05GKSkgewotCQkvKiBkb2VzIHRoZSBwZWVyIGRvIGFzY29uZj8gKi8KLQkJaWYgKHN0Y2It
PmFzb2MuYXNjb25mX3N1cHBvcnRlZCkgewotCQkJLyogcXVldWUgYW4gYXNjb25mIGZvciB0aGlz
IGFkZHIgKi8KLQkJCXN0YXR1cyA9IHNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsIHR5
cGUpOwotCi0JCQkvKgotCQkJICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4gc3RhdGUs
IHNlbmQgb3V0IHRoZQotCQkJICogQVNDT05GLiAgSWYgaW4gdGhlIG5vbi1vcGVuIHN0YXRlLCB0
aGVzZSB3aWxsIGJlCi0JCQkgKiBzZW50IHdoZW4gdGhlIHN0YXRlIGdvZXMgb3Blbi4KLQkJCSAq
LwotCQkJaWYgKHN0YXR1cyA9PSAwICYmCi0JCQkgICAgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+
YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkJICAgICAoU0NUUF9HRVRfU1RBVEUoJnN0
Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSkgewotI2lmZGVmIFND
VFBfVElNRVJfQkFTRURfQVNDT05GCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfQVNDT05GLCBpbnAsCi0JCQkJICAgIHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbik7Ci0jZWxzZQotCQkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgTlVMTCwgYWRkcl9sb2Nr
ZWQpOwotI2VuZGlmCi0JCQl9Ci0JCX0KLQl9Ci19Ci0KLQotaW50Ci1zY3RwX2FzY29uZl9pdGVy
YXRvcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpwdHIsIHVpbnQzMl90IHZhbCBT
Q1RQX1VOVVNFRCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsKLQlzdHJ1
Y3Qgc2N0cF9pZmEgKmlmYTsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbDsKLQlpbnQgY250X2ludmFs
aWQgPSAwOwotCi0JYXNjID0gKHN0cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciAqKXB0cjsKLQlM
SVNUX0ZPUkVBQ0gobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyKSB7Ci0JCWlm
YSA9IGwtPmlmYTsKLQkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZk
ZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCS8qIGludmFsaWQgaWYgd2UncmUgbm90IGEg
djYgZW5kcG9pbnQgKi8KLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpID09IDApIHsKLQkJCQljbnRfaW52YWxpZCsrOwotCQkJCWlmIChhc2MtPmNudCA9
PSBjbnRfaW52YWxpZCkKLQkJCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlm
Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCS8qIGludmFsaWQgaWYgd2Ug
YXJlIGEgdjYgb25seSBlbmRwb2ludCAqLwotCQkJc3RydWN0IGluNnBjYiAqaW5wNjsKLQkJCWlu
cDYgPSAoc3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7Ci0JCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJICAgIFNDVFBfSVBWNl9W
Nk9OTFkoaW5wNikpIHsKLQkJCQljbnRfaW52YWxpZCsrOwotCQkJCWlmIChhc2MtPmNudCA9PSBj
bnRfaW52YWxpZCkKLQkJCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0jZW5k
aWYKLQkJZGVmYXVsdDoKLQkJCS8qIGludmFsaWQgYWRkcmVzcyBmYW1pbHkgKi8KLQkJCWNudF9p
bnZhbGlkKys7Ci0JCQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCi0JCQkJcmV0dXJuICgx
KTsKLQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2FzY29uZl9p
dGVyYXRvcl9lcF9lbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLCB1aW50MzJf
dCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNj
dHBfYXNjb25mX2l0ZXJhdG9yICphc2M7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxh
ZGRyLCAqbDsKLQotCS8qIE9ubHkgZm9yIHNwZWNpZmljIGNhc2Ugbm90IGJvdW5kIGFsbCAqLwot
CWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7Ci0JTElTVF9GT1JFQUNI
KGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRkcikgewotCQlpZmEgPSBsLT5pZmE7
Ci0JCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkJTElTVF9GT1JF
QUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwKLQkJCQkgICAgIHNjdHBfbnh0X2FkZHIp
IHsKLQkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKLQkJCQkJbGFkZHItPmFjdGlvbiA9IDA7
Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJfQotCQl9IGVsc2UgaWYgKGwtPmFjdGlvbiA9PSBT
Q1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+
c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIsIG5sYWRkcikgewotCQkJCS8qIHJlbW92ZSBv
bmx5IGFmdGVyIGFsbCBndXlzIGFyZSBkb25lICovCi0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZh
KSB7Ci0JCQkJCXNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoaW5wLCBpZmEpOwotCQkJCX0KLQkJCX0K
LQkJfQotCX0KLQlyZXR1cm4gKDApOwotfQotCi12b2lkCi1zY3RwX2FzY29uZl9pdGVyYXRvcl9z
dGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAg
dm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfYXNj
b25mX2l0ZXJhdG9yICphc2M7Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBf
bGFkZHIgKmw7Ci0JaW50IGNudF9pbnZhbGlkID0gMDsKLQlpbnQgdHlwZSwgc3RhdHVzOwotCWlu
dCBudW1fcXVldWVkID0gMDsKLQotCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3Ig
KilwdHI7Ci0JTElTVF9GT1JFQUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRk
cikgewotCQlpZmEgPSBsLT5pZmE7Ci0JCXR5cGUgPSBsLT5hY3Rpb247Ci0KLQkJLyogYWRkcmVz
cydzIHZyZl9pZCBtdXN0IGJlIHRoZSB2cmZfaWQgb2YgdGhlIGFzc29jICovCi0JCWlmIChpZmEt
PnZyZl9pZCAhPSBzdGNiLT5hc29jLnZyZl9pZCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQkv
KiBTYW1lIGNoZWNrcyBhZ2FpbiBmb3IgYXNzb2MgKi8KLQkJc3dpdGNoIChpZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJewotCQkJ
LyogaW52YWxpZCBpZiB3ZSdyZSBub3QgYSB2NiBlbmRwb2ludCAqLwotCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKLQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9WNikgPT0gMCkgewotCQkJCWNudF9pbnZhbGlkKys7Ci0JCQkJaWYgKGFzYy0+Y250
ID09IGNudF9pbnZhbGlkKQotCQkJCQlyZXR1cm47Ci0JCQkJZWxzZQotCQkJCQljb250aW51ZTsK
LQkJCX0KLQkJCXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQlpZiAoSU42X0lTX0FERFJf
VU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKiB3ZSBza2lwIHVuc3BlY2lm
ZWQgYWRkcmVzc2VzICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwK
LQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKLQkJCQlj
b250aW51ZTsKLQkJCX0KLSNlbmRpZgotCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2lu
Ni0+c2luNl9hZGRyKSkgewotCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlID09
IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCS8qIGlzIGl0IHRoZSByaWdodCBsaW5r
IGxvY2FsIHNjb3BlPyAqLwotCQkJCWlmIChzY3RwX2lzX3Njb3BlaWRfaW5fbmV0cyhzdGNiLCAm
aWZhLT5hZGRyZXNzLnNhKSA9PSAwKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJ
CWJyZWFrOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJewot
CQkJLyogaW52YWxpZCBpZiB3ZSBhcmUgYSB2NiBvbmx5IGVuZHBvaW50ICovCi0JCQlzdHJ1Y3Qg
aW42cGNiICppbnA2OwotCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCWlucDYgPSAo
c3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7Ci0JCQkvKiBpbnZhbGlkIGlmIHdlIGFy
ZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpICYmCi0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnA2KSkKLQkJ
CQljb250aW51ZTsKLQotCQkJc2luID0gJmlmYS0+YWRkcmVzcy5zaW47Ci0JCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgPT0gMCkgewotCQkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNz
ZXMgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJ
aWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAg
ICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLSNlbmRpZgotCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAw
ICYmCi0JCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgewotCQkJ
CWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9WNikgJiYKLQkJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7Ci0JCQkJY250
X2ludmFsaWQrKzsKLQkJCQlpZiAoYXNjLT5jbnQgPT0gY250X2ludmFsaWQpCi0JCQkJCXJldHVy
bjsKLQkJCQllbHNlCi0JCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRp
ZgotCQlkZWZhdWx0OgotCQkJLyogaW52YWxpZCBhZGRyZXNzIGZhbWlseSAqLwotCQkJY250X2lu
dmFsaWQrKzsKLQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKLQkJCQlyZXR1cm47Ci0J
CQllbHNlCi0JCQkJY29udGludWU7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICh0eXBlID09IFND
VFBfQUREX0lQX0FERFJFU1MpIHsKLQkJCS8qIHByZXZlbnQgdGhpcyBhZGRyZXNzIGZyb20gYmVp
bmcgdXNlZCBhcyBhIHNvdXJjZSAqLwotCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIGlmYSk7Ci0JCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7
Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJc2N0cF9ydGVudHJ5X3QgKnJ0OwotCi0JCQkJ
LyogZGVsZXRlIHRoaXMgYWRkcmVzcyBpZiBjYWNoZWQgKi8KLQkJCQlpZiAobmV0LT5yby5fc19h
ZGRyID09IGlmYSkgewotCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJ
CW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAw
OwotCQkJCQlydCA9IG5ldC0+cm8ucm9fcnQ7Ci0JCQkJCWlmIChydCkgewotCQkJCQkJUlRGUkVF
KHJ0KTsKLQkJCQkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJ
CSAqIE5vdyB3ZSBkZWxldGVkIG91ciBzcmMgYWRkcmVzcywKLQkJCQkJICogc2hvdWxkIHdlIG5v
dCBhbHNvIG5vdyByZXNldCB0aGUKLQkJCQkJICogY3duZC9ydG8gdG8gc3RhcnQgYXMgaWYgaXRz
IGEgbmV3Ci0JCQkJCSAqIGFkZHJlc3M/Ci0JCQkJCSAqLwotCQkJCQlzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7Ci0JCQkJCW5ldC0+
UlRPID0gMDsKLQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBfU0VUX1BS
SU1fQUREUikgewotCQkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRBTEwpID09IDApIHsKLQkJCQkvKiBtdXN0IHZhbGlkYXRlIHRoZSBpZmEgaXMg
aW4gdGhlIGVwICovCi0JCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChzdGNiLT5zY3RwX2VwLCBp
ZmEpID09IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBO
ZWVkIHRvIGNoZWNrIHNjb3BlcyBmb3IgdGhpcyBndXkgKi8KLQkJCQlpZiAoc2N0cF9pc19hZGRy
ZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJCQkJY29u
dGludWU7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCS8qIHF1ZXVlIGFuIGFzY29uZiBmb3IgdGhpcyBh
ZGRyZXNzIGFkZC9kZWxldGUgKi8KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0RPX0FTQ09ORikgJiYKLQkJICAgIHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRl
ZCA9PSAxKSB7Ci0JCQkvKiBxdWV1ZSBhbiBhc2NvbmYgZm9yIHRoaXMgYWRkciAqLwotCQkJc3Rh
dHVzID0gc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0Y2IsIGlmYSwgdHlwZSk7Ci0JCQkvKgotCQkJ
ICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4gc3RhdGUsIHVwZGF0ZSB0aGUKLQkJCSAq
IGNvdW50IG9mIHF1ZXVlZCBwYXJhbXMuICBJZiBpbiB0aGUgbm9uLW9wZW4gc3RhdGUsCi0JCQkg
KiB0aGVzZSBnZXQgc2VudCB3aGVuIHRoZSBhc3NvYyBnb2VzIG9wZW4uCi0JCQkgKi8KLQkJCWlm
ICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJ
CSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05f
UkVDRUlWRUQpKSB7Ci0JCQkJaWYgKHN0YXR1cyA+PSAwKSB7Ci0JCQkJCW51bV9xdWV1ZWQrKzsK
LQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoKLQkgKiBJZiB3ZSBoYXZlIHF1ZXVlZCBwYXJhbXMg
aW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0IGFuIEFTQ09ORi4KLQkgKi8KLQlpZiAobnVtX3F1
ZXVlZCA+IDApIHsKLQkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBOVUxMLCBTQ1RQX0FERFJfTk9U
X0xPQ0tFRCk7Ci0JfQotfQotCi12b2lkCi1zY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQodm9pZCAq
cHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2l0
ZXJhdG9yICphc2M7Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIg
KmwsICpubDsKLQotCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7Ci0J
TElTVF9GT1JFQUNIX1NBRkUobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBzY3RwX254dF9hZGRyLCBu
bCkgewotCQlpZmEgPSBsLT5pZmE7Ci0JCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQURE
UkVTUykgewotCQkJLyogQ2xlYXIgdGhlIGRlZmVyIHVzZSBmbGFnICovCi0JCQlpZmEtPmxvY2Fs
aWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOwotCQl9Ci0JCXNjdHBfZnJlZV9pZmEo
aWZhKTsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBs
KTsKLQkJU0NUUF9ERUNSX0xBRERSX0NPVU5UKCk7Ci0JfQotCVNDVFBfRlJFRShhc2MsIFNDVFBf
TV9BU0NfSVQpOwotfQotCi0vKgotICogc2EgaXMgdGhlIHNvY2thZGRyIHRvIGFzayB0aGUgcGVl
ciB0byBzZXQgcHJpbWFyeSB0by4KLSAqIHJldHVybnM6IDAgPSBjb21wbGV0ZWQsIC0xID0gZXJy
b3IKLSAqLwotaW50MzJfdAotc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpzYSkKLXsKLQl1aW50MzJfdCB2cmZfaWQ7
Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0KLQkvKiBmaW5kIHRoZSBpZmEgZm9yIHRoZSBkZXNp
cmVkIHNldCBwcmltYXJ5ICovCi0JdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7Ci0JaWZhID0g
c2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCB2cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsK
LQlpZiAoaWZhID09IE5VTEwpIHsKLQkJLyogSW52YWxpZCBhZGRyZXNzICovCi0JCXJldHVybiAo
LTEpOwotCX0KLQotCS8qIHF1ZXVlIGFuIEFTQ09ORjpTRVRfUFJJTV9BRERSIHRvIGJlIHNlbnQg
Ki8KLQlpZiAoIXNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1f
QUREUikpIHsKLQkJLyogc2V0IHByaW1hcnkgcXVldWluZyBzdWNjZWVkZWQgKi8KLQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCQkic2V0X3ByaW1hcnlfaXBfYWRkcmVzc19zYTogcXVl
dWVkIG9uIHRjYj0lcCwgIiwKLQkJCSh2b2lkICopc3RjYik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQ
X0RFQlVHX0FTQ09ORjEsIHNhKTsKLQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykg
PT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29j
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgewotI2lmZGVmIFNDVFBfVElNRVJf
QkFTRURfQVNDT05GCi0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYs
Ci0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkgc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uKTsKLSNlbHNlCi0JCQlzY3RwX3NlbmRfYXNjb25mKHN0Y2IsIE5VTEwsIFNDVFBf
QUREUl9OT1RfTE9DS0VEKTsKLSNlbmRpZgotCQl9Ci0JfSBlbHNlIHsKLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FTQ09ORjEsICJzZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhOiBmYWlsZWQgdG8gYWRk
IHRvIHF1ZXVlIG9uIHRjYj0lcCwgIiwKLQkJCSh2b2lkICopc3RjYik7Ci0JCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAo
MCk7Ci19Ci0KLXZvaWQKLXNjdHBfc2V0X3ByaW1hcnlfaXBfYWRkcmVzcyhzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JLyogZ28gdGhyb3VnaCBh
bGwgb3VyIFBDQidzICovCi0JTElTVF9GT1JFQUNIKGlucCwgJlNDVFBfQkFTRV9JTkZPKGxpc3Ro
ZWFkKSwgc2N0cF9saXN0KSB7Ci0JCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQotCQkvKiBwcm9j
ZXNzIGZvciBhbGwgYXNzb2NpYXRpb25zIGZvciB0aGlzIGVuZHBvaW50ICovCi0JCUxJU1RfRk9S
RUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkvKiBx
dWV1ZSBhbiBBU0NPTkY6U0VUX1BSSU1fQUREUiB0byBiZSBzZW50ICovCi0JCQlpZiAoIXNjdHBf
YXNjb25mX3F1ZXVlX2FkZChzdGNiLCBpZmEsCi0JCQkJCQkgICBTQ1RQX1NFVF9QUklNX0FERFIp
KSB7Ci0JCQkJLyogc2V0IHByaW1hcnkgcXVldWluZyBzdWNjZWVkZWQgKi8KLQkJCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgInNldF9wcmltYXJ5X2lwX2FkZHJlc3M6IHF1ZXVlZCBvbiBz
dGNiPSVwLCAiLAotCQkJCQkodm9pZCAqKXN0Y2IpOwotCQkJCVNDVFBEQkdfQUREUihTQ1RQX0RF
QlVHX0FTQ09ORjEsICZpZmEtPmFkZHJlc3Muc2EpOwotCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUo
JnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkgICAgKFNDVFBfR0VUX1NU
QVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgewotI2lm
ZGVmIFNDVFBfVElNRVJfQkFTRURfQVNDT05GCi0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX0FTQ09ORiwKLQkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJCQkg
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLSNlbHNlCi0JCQkJCXNjdHBfc2VuZF9h
c2NvbmYoc3RjYiwgTlVMTCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOwotI2VuZGlmCi0JCQkJfQot
CQkJfQotCQl9IC8qIGZvciBlYWNoIHN0Y2IgKi8KLQl9IC8qIGZvciBlYWNoIGlucCAqLwotfQot
Ci1pbnQKLXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfaWZhICpzY3RwX2lmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpu
Y2hrOwotCXVuc2lnbmVkIGludCBvZmZzZXQsIGFzY29uZl9saW1pdDsKLQlzdHJ1Y3Qgc2N0cF9h
c2NvbmZfY2h1bmsgKmFjcDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKLQl1
aW50OF90IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07Ci0Jc3RydWN0IHNjdHBf
cGFyYW1oZHIgKnBoOwotCWludCBhZGRfY250LCBkZWxfY250OwotCXVpbnQxNl90IGxhc3RfcGFy
YW1fdHlwZTsKLQotCWFkZF9jbnQgPSBkZWxfY250ID0gMDsKLQlsYXN0X3BhcmFtX3R5cGUgPSAw
OwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZzdGNiLT5hc29jLmFzY29uZl9zZW5kX3F1ZXVl
LCBzY3RwX25leHQsIG5jaGspIHsKLQkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImlzX2FkZHJfcGVuZGluZzogTm8gbWJ1ZiBkYXRhP1xu
Iik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlvZmZzZXQgPSAwOwotCQlhY3AgPSBtdG9kKGNoay0+
ZGF0YSwgc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICopOwotCQlvZmZzZXQgKz0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2FzY29uZl9jaHVuayk7Ci0JCWFzY29uZl9saW1pdCA9IG50b2hzKGFjcC0+Y2gu
Y2h1bmtfbGVuZ3RoKTsKLQkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0
cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCBhcGFy
YW1fYnVmKTsKLQkJaWYgKHBoID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NP
TkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBjb3VsZG4ndCBnZXQgbG9va3VwIGFkZHIhXG4iKTsKLQkJ
CWNvbnRpbnVlOwotCQl9Ci0JCW9mZnNldCArPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKLQot
CQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihjaGst
PmRhdGEsIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksIGFwYXJh
bV9idWYpOwotCQlpZiAoYXBoID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NP
TkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBFbXB0eSBBU0NPTkYgd2lsbCBiZSBzZW50P1xuIik7Ci0J
CQljb250aW51ZTsKLQkJfQotCQl3aGlsZSAoYXBoICE9IE5VTEwpIHsKLQkJCXVuc2lnbmVkIGlu
dCBwYXJhbV9sZW5ndGgsIHBhcmFtX3R5cGU7Ci0KLQkJCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgt
PnBoLnBhcmFtX3R5cGUpOwotCQkJcGFyYW1fbGVuZ3RoID0gbnRvaHMoYXBoLT5waC5wYXJhbV9s
ZW5ndGgpOwotCQkJaWYgKG9mZnNldCArIHBhcmFtX2xlbmd0aCA+IGFzY29uZl9saW1pdCkgewot
CQkJCS8qIHBhcmFtZXRlciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCi0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7Ci0JCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IHBhcmFtIGxlbmd0
aCAoJXUpIGxhcmdlciB0aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCQli
cmVhazsKLQkJCX0KLQkJCWlmIChwYXJhbV9sZW5ndGggPD0gc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5k
aW5nOiBwYXJhbSBsZW5ndGgoJXUpIHRvbyBzaG9ydFxuIiwgcGFyYW1fbGVuZ3RoKTsKLQkJCQli
cmVhazsKLQkJCX0KLQotCQkJYXBoID0gKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKXNj
dHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHBhcmFtX2xlbmd0aCwgYXBhcmFtX2J1Zik7
Ci0JCQlpZiAoYXBoID09IE5VTEwpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
ImlzX2FkZHJfcGVuZGluZzogY291bGRuJ3QgZ2V0IGVudGlyZSBwYXJhbVxuIik7Ci0JCQkJYnJl
YWs7Ci0JCQl9Ci0KLQkJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKGFwaCArIDEpOwot
CQkJaWYgKHNjdHBfYWRkcl9tYXRjaChwaCwgJnNjdHBfaWZhLT5hZGRyZXNzLnNhKSAhPSAwKSB7
Ci0JCQkJc3dpdGNoIChwYXJhbV90eXBlKSB7Ci0JCQkJY2FzZSBTQ1RQX0FERF9JUF9BRERSRVNT
OgotCQkJCQlhZGRfY250Kys7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NUUF9ERUxfSVBfQURE
UkVTUzoKLQkJCQkJZGVsX2NudCsrOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQkJbGFzdF9wYXJhbV90eXBlID0gcGFyYW1fdHlwZTsKLQkJCX0KLQot
CQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBhcmFtX2xlbmd0aCk7Ci0JCQlpZiAob2Zmc2V0ID49
IGFzY29uZl9saW1pdCkgewotCQkJCS8qIG5vIG1vcmUgZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAq
LwotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogZ2V0IHBvaW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFy
YW0gKi8KLQkJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilzY3RwX21fZ2V0
cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRy
KSwgYXBhcmFtX2J1Zik7Ci0JCX0KLQl9Ci0KLQkvKiB3ZSB3YW50IHRvIGZpbmQgdGhlIHNlcXVl
bmNlcyB3aGljaCBjb25zaXN0IG9mIEFERCAtPiBERUwgLT4gQUREIG9yIERFTCAtPiBBREQgKi8K
LQlpZiAoYWRkX2NudCA+IGRlbF9jbnQgfHwKLQkgICAgKGFkZF9jbnQgPT0gZGVsX2NudCAmJiBs
YXN0X3BhcmFtX3R5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykpIHsKLQkJcmV0dXJuICgxKTsK
LQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqCi1zY3RwX2Zp
bmRfdmFsaWRfbG9jYWxhZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFkZHJfbG9ja2Vk
KQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNj
dHBfaWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLQlpZiAoYWRkcl9sb2NrZWQg
PT0gU0NUUF9BRERSX05PVF9MT0NLRUQpCi0JCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLQl2cmYg
PSBzY3RwX2ZpbmRfdnJmKHN0Y2ItPmFzb2MudnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsK
LQkJaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQotCQkJU0NUUF9JUElf
QUREUl9SVU5MT0NLKCk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCUxJU1RfRk9SRUFDSChzY3Rw
X2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUu
bG9vcGJhY2tfc2NvcGUgPT0gMCAmJgotCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9p
Zm4pKSB7Ci0JCQkvKiBTa2lwIGlmIGxvb3BiYWNrX3Njb3BlIG5vdCBzZXQgKi8KLQkJCWNvbnRp
bnVlOwotCQl9Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBu
ZXh0X2lmYSkgewotCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsK
LSNpZmRlZiBJTkVUCi0JCQljYXNlIEFGX0lORVQ6Ci0JCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUu
aXB2NF9hZGRyX2xlZ2FsKSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCQkJ
CXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47Ci0JCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNf
YWRkciA9PSAwKSB7Ci0JCQkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJ
CQljb250aW51ZTsKLQkJCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCWlmIChw
cmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJ
CSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQljb250
aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0JCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9j
YWxfc2NvcGUgPT0gMCAmJgotCQkJCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNp
bl9hZGRyKSkKLQkJCQkJCWNvbnRpbnVlOwotCi0JCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzY3RwX2lmYSkgJiYKLQkJCQkJICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmco
c3RjYiwgc2N0cF9pZmEpKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQkvKiBmb3VuZCBhIHZhbGlk
IGxvY2FsIHY0IGFkZHJlc3MgdG8gdXNlICovCi0JCQkJCWlmIChhZGRyX2xvY2tlZCA9PSBTQ1RQ
X0FERFJfTk9UX0xPQ0tFRCkKLQkJCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOwotCQkJCQly
ZXR1cm4gKCZzY3RwX2lmYS0+YWRkcmVzcy5zYSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJaWYgKHN0Y2ItPmFzb2Muc2Nv
cGUuaXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0K
LQkJCQkJaWYgKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9JRkFfVU5VU0VB
QkxFKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCi0JCQkJCXNpbjYgPSAmc2N0cF9pZmEt
PmFkZHJlc3Muc2luNjsKLQkJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5z
aW42X2FkZHIpKSB7Ci0JCQkJCQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0J
CQkJCQljb250aW51ZTsKLQkJCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCWlm
IChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0J
CQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKLQkJCQkJ
CWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUubG9j
YWxfc2NvcGUgPT0gMCAmJgotCQkJCQkgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5z
aW42X2FkZHIpKQotCQkJCQkJY29udGludWU7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnNjb3BlLnNp
dGVfc2NvcGUgPT0gMCAmJgotCQkJCQkgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5z
aW42X2FkZHIpKQotCQkJCQkJY29udGludWU7Ci0KLQkJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0
cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgotCQkJCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGlu
ZyhzdGNiLCBzY3RwX2lmYSkpKQotCQkJCQkJY29udGludWU7Ci0JCQkJCS8qIGZvdW5kIGEgdmFs
aWQgbG9jYWwgdjYgYWRkcmVzcyB0byB1c2UgKi8KLQkJCQkJaWYgKGFkZHJfbG9ja2VkID09IFND
VFBfQUREUl9OT1RfTE9DS0VEKQotCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJ
CXJldHVybiAoJnNjdHBfaWZhLT5hZGRyZXNzLnNhKTsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0jZW5k
aWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogbm8gdmFsaWQg
YWRkcmVzc2VzIGZvdW5kICovCi0JaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9D
S0VEKQotCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi1z
dGF0aWMgc3RydWN0IHNvY2thZGRyICoKLXNjdHBfZmluZF92YWxpZF9sb2NhbGFkZHJfZXAoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCUxJ
U1RfRk9SRUFDSChsYWRkciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254
dF9hZGRyKSB7Ci0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCS8qIGlzIHRoZSBhZGRyZXNzIHJlc3RyaWN0ZWQgPyAqLwotCQlpZiAoc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkgJiYKLQkJICAgICghc2N0cF9pc19hZGRyX3Bl
bmRpbmcoc3RjYiwgbGFkZHItPmlmYSkpKQotCQkJY29udGludWU7Ci0KLQkJLyogZm91bmQgYSB2
YWxpZCBsb2NhbCBhZGRyZXNzIHRvIHVzZSAqLwotCQlyZXR1cm4gKCZsYWRkci0+aWZhLT5hZGRy
ZXNzLnNhKTsKLQl9Ci0JLyogbm8gdmFsaWQgYWRkcmVzc2VzIGZvdW5kICovCi0JcmV0dXJuIChO
VUxMKTsKLX0KLQotLyoKLSAqIGJ1aWxkcyBhbiBBU0NPTkYgY2h1bmsgZnJvbSBxdWV1ZWQgQVND
T05GIHBhcmFtcy4KLSAqIHJldHVybnMgTlVMTCBvbiBlcnJvciAobm8gbWJ1Ziwgbm8gQVNDT05G
IHBhcmFtcyBxdWV1ZWQsIGV0YykuCi0gKi8KLXN0cnVjdCBtYnVmICoKLXNjdHBfY29tcG9zZV9h
c2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgKnJldGxlbiwgaW50IGFkZHJfbG9ja2Vk
KQotewotCXN0cnVjdCBtYnVmICptX2FzY29uZiwgKm1fYXNjb25mX2NoazsKLQlzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWRkciAqYWE7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICphY3A7Ci0Jc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGg7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FkZHJf
cGFyYW0gKmFhcDsKLQl1aW50MzJfdCBwX2xlbmd0aDsKLQl1aW50MzJfdCBjb3JyZWxhdGlvbl9p
ZCA9IDE7CS8qIDAgaXMgcmVzZXJ2ZWQuLi4gKi8KLQljYWRkcl90IHB0ciwgbG9va3VwX3B0cjsK
LQl1aW50OF90IGxvb2t1cF91c2VkID0gMDsKLQotCS8qIGFyZSB0aGVyZSBhbnkgYXNjb25mIHBh
cmFtcyB0byBzZW5kPyAqLwotCVRBSUxRX0ZPUkVBQ0goYWEsICZzdGNiLT5hc29jLmFzY29uZl9x
dWV1ZSwgbmV4dCkgewotCQlpZiAoYWEtPnNlbnQgPT0gMCkKLQkJCWJyZWFrOwotCX0KLQlpZiAo
YWEgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCS8qCi0JICogZ2V0IGEgY2h1bmsgaGVh
ZGVyIG1idWYgYW5kIGEgY2x1c3RlciBmb3IgdGhlIGFzY29uZiBwYXJhbXMgc2luY2UKLQkgKiBp
dCdzIHNpbXBsZXIgdG8gZmlsbCBpbiB0aGUgYXNjb25mIGNodW5rIGhlYWRlciBsb29rdXAgYWRk
cmVzcyBvbgotCSAqIHRoZSBmbHkKLQkgKi8KLQltX2FzY29uZl9jaGsgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksIDAsIE1fTk9XQUlULCAx
LCBNVF9EQVRBKTsKLQlpZiAobV9hc2NvbmZfY2hrID09IE5VTEwpIHsKLQkJLyogbm8gbWJ1Zidz
ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImNvbXBvc2VfYXNjb25mOiBj
b3VsZG4ndCBnZXQgY2h1bmsgbWJ1ZiFcbiIpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQltX2Fz
Y29uZiA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOwotCWlmIChtX2FzY29uZiA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1idWYncyAqLwotCQlT
Q1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKLQkJCSJjb21wb3NlX2FzY29uZjogY291bGRuJ3Qg
Z2V0IG1idWYhXG4iKTsKLQkJc2N0cF9tX2ZyZWVtKG1fYXNjb25mX2Noayk7Ci0JCXJldHVybiAo
TlVMTCk7Ci0JfQotCVNDVFBfQlVGX0xFTihtX2FzY29uZl9jaGspID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2FzY29uZl9jaHVuayk7Ci0JU0NUUF9CVUZfTEVOKG1fYXNjb25mKSA9IDA7Ci0JYWNwID0g
bXRvZChtX2FzY29uZl9jaGssIHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqKTsKLQltZW1zZXQo
YWNwLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSk7Ci0JLyogc2F2ZSBwb2lu
dGVycyB0byBsb29rdXAgYWRkcmVzcyBhbmQgYXNjb25mIHBhcmFtcyAqLwotCWxvb2t1cF9wdHIg
PSAoY2FkZHJfdCkoYWNwICsgMSk7CS8qIGFmdGVyIHRoZSBoZWFkZXIgKi8KLQlwdHIgPSBtdG9k
KG1fYXNjb25mLCBjYWRkcl90KTsJLyogYmVnaW5uaW5nIG9mIGNsdXN0ZXIgKi8KLQotCS8qIGZp
bGwgaW4gY2h1bmsgaGVhZGVyIGluZm8gKi8KLQlhY3AtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0FT
Q09ORjsKLQlhY3AtPmNoLmNodW5rX2ZsYWdzID0gMDsKLQlhY3AtPnNlcmlhbF9udW1iZXIgPSBo
dG9ubChzdGNiLT5hc29jLmFzY29uZl9zZXFfb3V0KTsKLQlzdGNiLT5hc29jLmFzY29uZl9zZXFf
b3V0Kys7Ci0KLQkvKiBhZGQgcGFyYW1ldGVycy4uLiB1cCB0byBzbWFsbGVzdCBNVFUgYWxsb3dl
ZCAqLwotCVRBSUxRX0ZPUkVBQ0goYWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCkg
ewotCQlpZiAoYWEtPnNlbnQpCi0JCQljb250aW51ZTsKLQkJLyogZ2V0IHRoZSBwYXJhbWV0ZXIg
bGVuZ3RoICovCi0JCXBfbGVuZ3RoID0gU0NUUF9TSVpFMzIoYWEtPmFwLmFwaC5waC5wYXJhbV9s
ZW5ndGgpOwotCQkvKiB3aWxsIGl0IGZpdCBpbiBjdXJyZW50IGNodW5rPyAqLwotCQlpZiAoKFND
VFBfQlVGX0xFTihtX2FzY29uZikgKyBwX2xlbmd0aCA+IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1
KSB8fAotCQkgICAgKFNDVFBfQlVGX0xFTihtX2FzY29uZikgKyBwX2xlbmd0aCA+IE1DTEJZVEVT
KSkgewotCQkJLyogd29uJ3QgZml0LCBzbyB3ZSdyZSBkb25lIHdpdGggdGhpcyBjaHVuayAqLwot
CQkJYnJlYWs7Ci0JCX0KLQkJLyogYXNzaWduIChhbmQgc3RvcmUpIGEgY29ycmVsYXRpb24gaWQg
Ki8KLQkJYWEtPmFwLmFwaC5jb3JyZWxhdGlvbl9pZCA9IGNvcnJlbGF0aW9uX2lkKys7Ci0KLQkJ
LyoKLQkJICogZmlsbCBpbiBhZGRyZXNzIGlmIHdlJ3JlIGRvaW5nIGEgZGVsZXRlIHRoaXMgaXMg
YSBzaW1wbGUKLQkJICogd2F5IGZvciB1cyB0byBmaWxsIGluIHRoZSBjb3JyZWxhdGlvbiBhZGRy
ZXNzLCB3aGljaAotCQkgKiBzaG91bGQgb25seSBiZSB1c2VkIGJ5IHRoZSBwZWVyIGlmIHdlJ3Jl
IGRlbGV0aW5nIG91cgotCQkgKiBzb3VyY2UgYWRkcmVzcyBhbmQgYWRkaW5nIGEgbmV3IGFkZHJl
c3MgKGUuZy4gcmVudW1iZXJpbmcKLQkJICogY2FzZSkKLQkJICovCi0JCWlmIChsb29rdXBfdXNl
ZCA9PSAwICYmCi0JCSAgICAoYWEtPnNwZWNpYWxfZGVsID09IDApICYmCi0JCSAgICBhYS0+YXAu
YXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgewotCQkJc3RydWN0IHNj
dHBfaXB2NmFkZHJfcGFyYW0gKmxvb2t1cDsKLQkJCXVpbnQxNl90IHBfc2l6ZSwgYWRkcl9zaXpl
OwotCi0JCQlsb29rdXAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilsb29rdXBfcHRy
OwotCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0KLQkJCSAgICBodG9ucyhhYS0+YXAuYWRkcnAu
cGgucGFyYW1fdHlwZSk7Ci0JCQlpZiAoYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPT0gU0NU
UF9JUFY2X0FERFJFU1MpIHsKLQkJCQkvKiBjb3B5IElQdjYgYWRkcmVzcyAqLwotCQkJCXBfc2l6
ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCQkJYWRkcl9zaXplID0g
c2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGNvcHkgSVB2NCBh
ZGRyZXNzICovCi0JCQkJcF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFt
KTsKLQkJCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwotCQkJfQotCQkJbG9v
a3VwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihwX3NpemUpKTsKLQkJCW1l
bWNweShsb29rdXAtPmFkZHIsICZhYS0+YXAuYWRkcnAuYWRkciwgYWRkcl9zaXplKTsKLQkJCVND
VFBfQlVGX0xFTihtX2FzY29uZl9jaGspICs9IFNDVFBfU0laRTMyKHBfc2l6ZSk7Ci0JCQlsb29r
dXBfdXNlZCA9IDE7Ci0JCX0KLQkJLyogY29weSBpbnRvIGN1cnJlbnQgc3BhY2UgKi8KLQkJbWVt
Y3B5KHB0ciwgJmFhLT5hcCwgcF9sZW5ndGgpOwotCi0JCS8qIG5ldHdvcmsgZWxlbWVudHMgYW5k
IHVwZGF0ZSBsZW5ndGhzICovCi0JCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIg
KilwdHI7Ci0JCWFhcCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSAqKXB0cjsKLQkJ
LyogY29ycmVsYXRpb25faWQgaXMgdHJhbnNwYXJlbnQgdG8gcGVlciwgbm8gaHRvbmwgbmVlZGVk
ICovCi0JCWFwaC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKGFwaC0+cGgucGFyYW1fdHlwZSk7Ci0J
CWFwaC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMoYXBoLT5waC5wYXJhbV9sZW5ndGgpOwotCQlh
YXAtPmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBodG9ucyhhYXAtPmFkZHJwLnBoLnBhcmFtX3R5cGUp
OwotCQlhYXAtPmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFhcC0+YWRkcnAucGgucGFy
YW1fbGVuZ3RoKTsKLQotCQlTQ1RQX0JVRl9MRU4obV9hc2NvbmYpICs9IFNDVFBfU0laRTMyKHBf
bGVuZ3RoKTsKLQkJcHRyICs9IFNDVFBfU0laRTMyKHBfbGVuZ3RoKTsKLQotCQkvKgotCQkgKiB0
aGVzZSBwYXJhbXMgYXJlIHJlbW92ZWQgb2ZmIHRoZSBwZW5kaW5nIGxpc3QgdXBvbgotCQkgKiBn
ZXR0aW5nIGFuIEFTQ09ORi1BQ0sgYmFjayBmcm9tIHRoZSBwZWVyLCBqdXN0IHNldCBmbGFnCi0J
CSAqLwotCQlhYS0+c2VudCA9IDE7Ci0JfQotCS8qIGNoZWNrIHRvIHNlZSBpZiB0aGUgbG9va3Vw
IGFkZHIgaGFzIGJlZW4gcG9wdWxhdGVkIHlldCAqLwotCWlmIChsb29rdXBfdXNlZCA9PSAwKSB7
Ci0JCS8qIE5PVEU6IGlmIHRoZSBhZGRyZXNzIHBhcmFtIGlzIG9wdGlvbmFsLCBjYW4gc2tpcCB0
aGlzLi4uICovCi0JCS8qIGFkZCBhbnkgdmFsaWQgKGV4aXN0aW5nKSBhZGRyZXNzLi4uICovCi0J
CXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpsb29rdXA7Ci0JCXVpbnQxNl90IHBfc2l6ZSwg
YWRkcl9zaXplOwotCQlzdHJ1Y3Qgc29ja2FkZHIgKmZvdW5kX2FkZHI7Ci0JCWNhZGRyX3QgYWRk
cl9wdHI7Ci0KLQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VOREFMTCkKLQkJCWZvdW5kX2FkZHIgPSBzY3RwX2ZpbmRfdmFsaWRfbG9jYWxhZGRyKHN0
Y2IsCi0JCQkJCQkJICAgICAgIGFkZHJfbG9ja2VkKTsKLQkJZWxzZQotCQkJZm91bmRfYWRkciA9
IHNjdHBfZmluZF92YWxpZF9sb2NhbGFkZHJfZXAoc3RjYik7Ci0KLQkJbG9va3VwID0gKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtICopbG9va3VwX3B0cjsKLQkJaWYgKGZvdW5kX2FkZHIgIT0g
TlVMTCkgewotCQkJc3dpdGNoIChmb3VuZF9hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVU
NgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkvKiBjb3B5IElQdjYgYWRkcmVzcyAqLwotCQkJCWxv
b2t1cC0+cGgucGFyYW1fdHlwZSA9Ci0JCQkJICAgIGh0b25zKFNDVFBfSVBWNl9BRERSRVNTKTsK
LQkJCQlwX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pOwotCQkJCWFk
ZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwotCQkJCWFkZHJfcHRyID0gKGNhZGRy
X3QpJigoc3RydWN0IHNvY2thZGRyX2luNiAqKQotCQkJCSAgICBmb3VuZF9hZGRyKS0+c2luNl9h
ZGRyOwotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgot
CQkJCS8qIGNvcHkgSVB2NCBhZGRyZXNzICovCi0JCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0K
LQkJCQkgICAgaHRvbnMoU0NUUF9JUFY0X0FERFJFU1MpOwotCQkJCXBfc2l6ZSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7Ci0JCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVj
dCBpbl9hZGRyKTsKLQkJCQlhZGRyX3B0ciA9IChjYWRkcl90KSYoKHN0cnVjdCBzb2NrYWRkcl9p
biAqKQotCQkJCSAgICBmb3VuZF9hZGRyKS0+c2luX2FkZHI7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYK
LQkJCWRlZmF1bHQ6Ci0JCQkJcF9zaXplID0gMDsKLQkJCQlhZGRyX3NpemUgPSAwOwotCQkJCWFk
ZHJfcHRyID0gTlVMTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCWxvb2t1cC0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMoU0NUUF9TSVpFMzIocF9zaXplKSk7Ci0JCQltZW1jcHkobG9va3VwLT5hZGRy
LCBhZGRyX3B0ciwgYWRkcl9zaXplKTsKLQkJCVNDVFBfQlVGX0xFTihtX2FzY29uZl9jaGspICs9
IFNDVFBfU0laRTMyKHBfc2l6ZSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiB1aCBvaC4uLiBkb24ndCBo
YXZlIGFueSBhZGRyZXNzPz8gKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJ
CSJjb21wb3NlX2FzY29uZjogbm8gbG9va3VwIGFkZHIhXG4iKTsKLQkJCS8qIFhYWCBmb3Igbm93
LCB3ZSBzZW5kIGEgSVB2NCBhZGRyZXNzIG9mIDAuMC4wLjAgKi8KLQkJCWxvb2t1cC0+cGgucGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfSVBWNF9BRERSRVNTKTsKLQkJCWxvb2t1cC0+cGgucGFyYW1f
bGVuZ3RoID0gaHRvbnMoU0NUUF9TSVpFMzIoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3Bh
cmFtKSkpOwotCQkJbWVtc2V0KGxvb2t1cC0+YWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRy
KSk7Ci0JCQlTQ1RQX0JVRl9MRU4obV9hc2NvbmZfY2hrKSArPSBTQ1RQX1NJWkUzMihzaXplb2Yo
c3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKTsKLQkJfQotCX0KLQkvKiBjaGFpbiBpdCBhbGwg
dG9nZXRoZXIgKi8KLQlTQ1RQX0JVRl9ORVhUKG1fYXNjb25mX2NoaykgPSBtX2FzY29uZjsKLQkq
cmV0bGVuID0gU0NUUF9CVUZfTEVOKG1fYXNjb25mX2NoaykgKyBTQ1RQX0JVRl9MRU4obV9hc2Nv
bmYpOwotCWFjcC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoKnJldGxlbik7Ci0KLQlyZXR1cm4g
KG1fYXNjb25mX2Noayk7Ci19Ci0KLS8qCi0gKiBzZWN0aW9uIHRvIGhhbmRsZSBhZGRyZXNzIGNo
YW5nZXMgYmVmb3JlIGFuIGFzc29jaWF0aW9uIGlzIHVwIGVnLiBjaGFuZ2VzCi0gKiBkdXJpbmcg
SU5JVC9JTklULUFDSy9DT09LSUUtRUNITyBoYW5kc2hha2UKLSAqLwotCi0vKgotICogcHJvY2Vz
c2VzIHRoZSAobG9jYWwpIGFkZHJlc3NlcyBpbiB0aGUgSU5JVC1BQ0sgY2h1bmsKLSAqLwotc3Rh
dGljIHZvaWQKLXNjdHBfcHJvY2Vzc19pbml0YWNrX2FkZHJlc3NlcyhzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBtYnVmICptLAotICAgIHVuc2lnbmVkIGludCBvZmZzZXQsIHVuc2lnbmVk
IGludCBsZW5ndGgpCi17Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgdG1wX3BhcmFtLCAqcGg7Ci0J
dWludDE2X3QgcGxlbiwgcHR5cGU7Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQl1bmlv
biBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzY3RwX2lwdjZh
ZGRyX3BhcmFtIGFkZHI2X3N0b3JlOwotI2VuZGlmCi0jaWZkZWYgSU5FVAotCXN0cnVjdCBzY3Rw
X2lwdjRhZGRyX3BhcmFtIGFkZHI0X3N0b3JlOwotI2VuZGlmCi0KLQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMiwgInByb2Nlc3NpbmcgaW5pdC1hY2sgYWRkcmVzc2VzXG4iKTsKLQlpZiAoc3Rj
YiA9PSBOVUxMKSAvKiBVbi1uZWVkZWQgY2hlY2sgZm9yIFNBICovCi0JCXJldHVybjsKLQotCS8q
IGNvbnZlcnQgdG8gdXBwZXIgYm91bmQgKi8KLQlsZW5ndGggKz0gb2Zmc2V0OwotCi0JaWYgKChv
ZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSA+IGxlbmd0aCkgewotCQlyZXR1
cm47Ci0JfQotCS8qIGdvIHRocm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sgKi8K
LQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKQotCSAgICAgc2N0cF9tX2dldHB0cihtLCBv
ZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCi0JICAgICAgICAgICAgICAgICAg
ICh1aW50OF90ICopJnRtcF9wYXJhbSk7Ci0Jd2hpbGUgKHBoICE9IE5VTEwpIHsKLQkJcHR5cGUg
PSBudG9ocyhwaC0+cGFyYW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3Ro
KTsKLQkJc3dpdGNoIChwdHlwZSkgewotI2lmZGVmIElORVQ2Ci0JCWNhc2UgU0NUUF9JUFY2X0FE
RFJFU1M6Ci0JCXsKLQkJCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICphNnA7Ci0KLQkJCS8q
IGdldCB0aGUgZW50aXJlIElQdjYgYWRkcmVzcyBwYXJhbSAqLwotCQkJYTZwID0gKHN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtICopCi0JCQkgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCi0J
CQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKLQkJCSAgICAodWludDhf
dCAqKSZhZGRyNl9zdG9yZSk7Ci0JCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0pIHx8Ci0JCQkgICAgYTZwID09IE5VTEwpIHsKLQkJCQlyZXR1cm47Ci0JCQl9
Ci0JCQltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKLQkJ
CXN0b3JlLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVO
Ci0JCQlzdG9yZS5zaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwot
I2VuZGlmCi0JCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJbWVtY3B5
KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgYTZwLT5hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRy
KSk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQljYXNlIFNDVFBfSVBW
NF9BRERSRVNTOgotCQl7Ci0JCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqYTRwOwotCi0J
CQkvKiBnZXQgdGhlIGVudGlyZSBJUHY0IGFkZHJlc3MgcGFyYW0gKi8KLQkJCWE0cCA9IChzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJ
CQkJICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pLAotCQkJCQkJCQkJICAodWlu
dDhfdCAqKSZhZGRyNF9zdG9yZSk7Ci0JCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
aXB2NGFkZHJfcGFyYW0pIHx8Ci0JCQkgICAgYTRwID09IE5VTEwpIHsKLQkJCQlyZXR1cm47Ci0J
CQl9Ci0JCQltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsK
LQkJCXN0b3JlLnNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4K
LQkJCXN0b3JlLnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5k
aWYKLQkJCXN0b3JlLnNpbi5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJc3RvcmUuc2luLnNp
bl9hZGRyLnNfYWRkciA9IGE0cC0+YWRkcjsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVm
YXVsdDoKLQkJCWdvdG8gbmV4dF9hZGRyOwotCQl9Ci0KLQkJLyogc2VlIGlmIHRoaXMgYWRkcmVz
cyByZWFsbHkgKHN0aWxsKSBleGlzdHMgKi8KLQkJc2N0cF9pZmEgPSBzY3RwX2ZpbmRfaWZhX2J5
X2FkZHIoJnN0b3JlLnNhLCBzdGNiLT5hc29jLnZyZl9pZCwKLQkJCQkJCSBTQ1RQX0FERFJfTk9U
X0xPQ0tFRCk7Ci0JCWlmIChzY3RwX2lmYSA9PSBOVUxMKSB7Ci0JCQkvKiBhZGRyZXNzIGRvZXNu
J3QgZXhpc3QgYW55bW9yZSAqLwotCQkJaW50IHN0YXR1czsKLQotCQkJLyogYXJlIEFTQ09ORnMg
YWxsb3dlZCA/ICovCi0JCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAot
CQkJICAgIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpICYmCi0JCQkgICAgc3RjYi0+YXNvYy5h
c2NvbmZfc3VwcG9ydGVkKSB7Ci0JCQkJLyogcXVldWUgYW4gQVNDT05GIERFTF9JUF9BRERSRVNT
ICovCi0JCQkJc3RhdHVzID0gc2N0cF9hc2NvbmZfcXVldWVfc2FfZGVsZXRlKHN0Y2IsICZzdG9y
ZS5zYSk7Ci0JCQkJLyoKLQkJCQkgKiBpZiBxdWV1ZWQgb2ssIGFuZCBpbiBjb3JyZWN0IHN0YXRl
LCBzZW5kCi0JCQkJICogb3V0IHRoZSBBU0NPTkYuCi0JCQkJICovCi0JCQkJaWYgKHN0YXR1cyA9
PSAwICYmCi0JCQkJICAgIFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PQotCQkJCSAgICBT
Q1RQX1NUQVRFX09QRU4pIHsKLSNpZmRlZiBTQ1RQX1RJTUVSX0JBU0VEX0FTQ09ORgotCQkJCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsCi0JCQkJCQkJIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsCi0JCQkJCQkJIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0j
ZWxzZQotCQkJCQlzY3RwX3NlbmRfYXNjb25mKHN0Y2IsIE5VTEwsIFNDVFBfQUREUl9OT1RfTE9D
S0VEKTsKLSNlbmRpZgotCQkJCX0KLQkJCX0KLQkJfQotCi1uZXh0X2FkZHI6Ci0JCS8qCi0JCSAq
IFNhbml0eSBjaGVjazogIE1ha2Ugc3VyZSB0aGUgbGVuZ3RoIGlzbid0IDAsIG90aGVyd2lzZQot
CQkgKiB3ZSdsbCBiZSBzdHVjayBpbiB0aGlzIGxvb3AgZm9yIGEgbG9uZyB0aW1lLi4uCi0JCSAq
LwotCQlpZiAoU0NUUF9TSVpFMzIocGxlbikgPT0gMCkgewotCQkJU0NUUF9QUklOVEYoInByb2Nl
c3NfaW5pdGFja19hZGRyczogYmFkIGxlbiAoJWQpIHR5cGU9JXhoXG4iLAotCQkJCSAgICBwbGVu
LCBwdHlwZSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogZ2V0IG5leHQgcGFyYW1ldGVyICovCi0J
CW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJaWYgKChvZmZzZXQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIpKSA+IGxlbmd0aCkKLQkJCXJldHVybjsKLQkJcGggPSAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkJICAgIHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciksICh1aW50OF90ICopJnRtcF9wYXJhbSk7Ci0JfSAvKiB3aGls
ZSAqLwotfQotCi0vKiBGSVggTUU6IG5lZWQgdG8gdmVyaWZ5IHJldHVybiByZXN1bHQgZm9yIHY2
IGFkZHJlc3MgdHlwZSBpZiB2NiBkaXNhYmxlZCAqLwotLyoKLSAqIGNoZWNrcyB0byBzZWUgaWYg
YSBzcGVjaWZpYyBhZGRyZXNzIGlzIGluIHRoZSBpbml0YWNrIGFkZHJlc3MgbGlzdCByZXR1cm5z
Ci0gKiAxIGlmIGZvdW5kLCAwIGlmIG5vdAotICovCi1zdGF0aWMgdWludDMyX3QKLXNjdHBfYWRk
cl9pbl9pbml0YWNrKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IGxl
bmd0aCwgc3RydWN0IHNvY2thZGRyICpzYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciB0bXBf
cGFyYW0sICpwaDsKLQl1aW50MTZfdCBwbGVuLCBwdHlwZTsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0
IHNvY2thZGRyX2luICpzaW47Ci0Jc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKmE0cDsKLQlz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSBhZGRyNF9zdG9yZTsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSAqYTZwOwotCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHI2X3N0b3JlOwotI2lm
ZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjZfdG1w
OwotI2VuZGlmCi0jZW5kaWYKLQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElO
RVQKLQljYXNlIEFGX0lORVQ6Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNl
IEFGX0lORVQ2OgotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0J
fQotCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsICJmaW5kX2luaXRhY2tfYWRkcjogc3Rh
cnRpbmcgc2VhcmNoIGZvciAiKTsKLQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYyLCBz
YSk7Ci0JLyogY29udmVydCB0byB1cHBlciBib3VuZCAqLwotCWxlbmd0aCArPSBvZmZzZXQ7Ci0K
LQlpZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVuZ3RoKSB7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJImZpbmRfaW5pdGFja19hZGRyOiBp
bnZhbGlkIG9mZnNldD9cbiIpOwotCQlyZXR1cm4gKDApOwotCX0KLQkvKiBnbyB0aHJvdWdoIHRo
ZSBhZGRyZXNzZXMgaW4gdGhlIGluaXQtYWNrICovCi0JcGggPSAoc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyKSwgKHVpbnQ4X3QgKikgJiB0bXBfcGFyYW0pOwotCXdoaWxlIChwaCAhPSBOVUxMKSB7
Ci0JCXB0eXBlID0gbnRvaHMocGgtPnBhcmFtX3R5cGUpOwotCQlwbGVuID0gbnRvaHMocGgtPnBh
cmFtX2xlbmd0aCk7Ci0JCXN3aXRjaCAocHR5cGUpIHsKLSNpZmRlZiBJTkVUNgotCQljYXNlIFND
VFBfSVBWNl9BRERSRVNTOgotCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJ
CQkvKiBnZXQgdGhlIGVudGlyZSBJUHY2IGFkZHJlc3MgcGFyYW0gKi8KLQkJCQlpZiAocGxlbiAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkJCWJyZWFrOwotCQkJ
CX0KLQkJCQkvKiBnZXQgdGhlIGVudGlyZSBJUHY2IGFkZHJlc3MgcGFyYW0gKi8KLQkJCQlhNnAg
PSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKikKLQkJCQkgICAgICBzY3RwX21fZ2V0cHRy
KG0sIG9mZnNldCwKLQkJCQkgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9p
cHY2YWRkcl9wYXJhbSksCi0JCQkJICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZhZGRy
Nl9zdG9yZSk7Ci0JCQkJaWYgKGE2cCA9PSBOVUxMKSB7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJ
fQotCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotI2lmZGVmIFNDVFBfRU1C
RURERURfVjZfU0NPUEUKLQkJCQlpZiAoSU42X0lTX1NDT1BFX0xJTktMT0NBTCgmc2luNi0+c2lu
Nl9hZGRyKSkgewotCQkJCQkvKiBjcmVhdGUgYSBjb3B5IGFuZCBjbGVhciBzY29wZSAqLwotCQkJ
CQltZW1jcHkoJnNpbjZfdG1wLCBzaW42LAotCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKLQkJCQkJc2luNiA9ICZzaW42X3RtcDsKLQkJCQkJaW42X2NsZWFyc2NvcGUo
JnNpbjYtPnNpbjZfYWRkcik7Ci0JCQkJfQotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NP
UEUgKi8KLQkJCQlpZiAobWVtY21wKCZzaW42LT5zaW42X2FkZHIsIGE2cC0+YWRkciwKLQkJCQkg
ICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKSB7Ci0JCQkJCS8qIGZvdW5k
IGl0ICovCi0JCQkJCXJldHVybiAoMSk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0jZW5kaWYg
LyogSU5FVDYgKi8KLSNpZmRlZiBJTkVUCi0JCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6Ci0JCQlp
ZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQkJaWYgKHBsZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyog
Z2V0IHRoZSBlbnRpcmUgSVB2NCBhZGRyZXNzIHBhcmFtICovCi0JCQkJYTRwID0gKHN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtICopCi0JCQkJICAgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQs
Ci0JCQkJICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFy
YW0pLAotCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmYWRkcjRfc3RvcmUpOwot
CQkJCWlmIChhNHAgPT0gTlVMTCkgewotCQkJCQlyZXR1cm4gKDApOwotCQkJCX0KLQkJCQlzaW4g
PSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRy
ID09IGE0cC0+YWRkcikgewotCQkJCQkvKiBmb3VuZCBpdCAqLwotCQkJCQlyZXR1cm4gKDEpOwot
CQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJ
fQotCQkvKiBnZXQgbmV4dCBwYXJhbWV0ZXIgKi8KLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBs
ZW4pOwotCQlpZiAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSA+IGxlbmd0
aCkgewotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KQotCQkgICAgc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciksCi0JCSAgICAodWludDhfdCAqKSAmIHRtcF9wYXJhbSk7Ci0JfSAvKiB3aGlsZSAqLwot
CS8qIG5vdCBmb3VuZCEgKi8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogbWFrZXMgc3VyZSB0
aGF0IHRoZSBjdXJyZW50IGVuZHBvaW50IGxvY2FsIGFkZHIgbGlzdCBpcyBjb25zaXN0ZW50IHdp
dGgKLSAqIHRoZSBuZXcgYXNzb2NpYXRpb24gKGVnLiBzdWJzZXQgYm91bmQsIGFzY29uZiBhbGxv
d2VkKSBhZGRzIGFkZHJlc3NlcyBhcwotICogbmVjZXNzYXJ5Ci0gKi8KLXN0YXRpYyB2b2lkCi1z
Y3RwX2NoZWNrX2FkZHJlc3NfbGlzdF9lcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBt
YnVmICptLCBpbnQgb2Zmc2V0LAotICAgIGludCBsZW5ndGgsIHN0cnVjdCBzb2NrYWRkciAqaW5p
dF9hZGRyKQotewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCS8qIGdvIHRocm91Z2gg
dGhlIGVuZHBvaW50IGxpc3QgKi8KLQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5zY3RwX2Vw
LT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkvKiBiZSBwYXJhbm9pZCBhbmQg
dmFsaWRhdGUgdGhlIGxhZGRyICovCi0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCVND
VFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkJCSJjaGVja19hZGRyX2xpc3RfZXA6IGxhZGRy
LT5pZmEgaXMgTlVMTCIpOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxhZGRyLT5pZmEgPT0g
TlVMTCkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJjaGVja19hZGRyX2xpc3Rf
ZXA6IGxhZGRyLT5pZmEtPmlmYV9hZGRyIGlzIE5VTEwiKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0J
CS8qIGRvIGkgaGF2ZSBpdCBpbXBsaWNpdGx5PyAqLwotCQlpZiAoc2N0cF9jbXBhZGRyKCZsYWRk
ci0+aWZhLT5hZGRyZXNzLnNhLCBpbml0X2FkZHIpKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQkv
KiBjaGVjayB0byBzZWUgaWYgaW4gdGhlIGluaXQtYWNrICovCi0JCWlmICghc2N0cF9hZGRyX2lu
X2luaXRhY2sobSwgb2Zmc2V0LCBsZW5ndGgsICZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKSkgewot
CQkJLyogdHJ5IHRvIGFkZCBpdCAqLwotCQkJc2N0cF9hZGRyX21nbXRfYXNzb2Moc3RjYi0+c2N0
cF9lcCwgc3RjYiwgbGFkZHItPmlmYSwKLQkJCSAgICBTQ1RQX0FERF9JUF9BRERSRVNTLCBTQ1RQ
X0FERFJfTk9UX0xPQ0tFRCk7Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBtYWtlcyBzdXJlIHRoYXQg
dGhlIGN1cnJlbnQga2VybmVsIGFkZHJlc3MgbGlzdCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIG5l
dwotICogYXNzb2NpYXRpb24gKHdpdGggYWxsIGFkZHJzIGJvdW5kKSBhZGRzIGFkZHJlc3NlcyBh
cyBuZWNlc3NhcnkKLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfY2hlY2tfYWRkcmVzc19saXN0X2Fs
bChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAotICAg
IGludCBsZW5ndGgsIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9hZGRyLAotICAgIHVpbnQxNl90IGxv
Y2FsX3Njb3BlLCB1aW50MTZfdCBzaXRlX3Njb3BlLAotICAgIHVpbnQxNl90IGlwdjRfc2NvcGUs
IHVpbnQxNl90IGxvb3BiYWNrX3Njb3BlKQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVM
TDsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9p
ZmE7Ci0JdWludDMyX3QgdnJmX2lkOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
KnNpbjsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
LSNlbmRpZgotCi0JaWYgKHN0Y2IpIHsKLQkJdnJmX2lkID0gc3RjYi0+YXNvYy52cmZfaWQ7Ci0J
fSBlbHNlIHsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7Ci0JdnJmID0g
c2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlTQ1RQX0lQSV9B
RERSX1JVTkxPQ0soKTsKLQkJcmV0dXJuOwotCX0KLQkvKiBnbyB0aHJvdWdoIGFsbCBvdXIga25v
d24gaW50ZXJmYWNlcyAqLwotCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwg
bmV4dF9pZm4pIHsKLQkJaWYgKGxvb3BiYWNrX3Njb3BlID09IDAgJiYgU0NUUF9JRk5fSVNfSUZU
X0xPT1Aoc2N0cF9pZm4pKSB7Ci0JCQkvKiBza2lwIGxvb3BiYWNrIGludGVyZmFjZSAqLwotCQkJ
Y29udGludWU7Ci0JCX0KLQkJLyogZ28gdGhyb3VnaCBlYWNoIGludGVyZmFjZSBhZGRyZXNzICov
Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkg
ewotCQkJLyogZG8gaSBoYXZlIGl0IGltcGxpY2l0bHk/ICovCi0JCQlpZiAoc2N0cF9jbXBhZGRy
KCZzY3RwX2lmYS0+YWRkcmVzcy5zYSwgaW5pdF9hZGRyKSkgewotCQkJCWNvbnRpbnVlOwotCQkJ
fQotCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJ
TkVUCi0JCQljYXNlIEFGX0lORVQ6Ci0JCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2It
PnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
JnNpbi0+c2luX2FkZHIpICE9IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0J
CQkJaWYgKChpcHY0X3Njb3BlID09IDApICYmCi0JCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJF
U1MoJnNpbi0+c2luX2FkZHIpKSkgewotCQkJCQkvKiBwcml2YXRlIGFkZHJlc3Mgbm90IGluIHNj
b3BlICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCXNpbjYgPSAmc2N0cF9pZmEtPmFkZHJlc3Mu
c2luNjsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2
KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJICAgICAgICAgICAgICAg
ICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0j
ZW5kaWYKLQkJCQlpZiAoKGxvY2FsX3Njb3BlID09IDApICYmCi0JCQkJICAgIChJTjZfSVNfQURE
Ul9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0K
LQkJCQlpZiAoKHNpdGVfc2NvcGUgPT0gMCkgJiYKLQkJCQkgICAgKElONl9JU19BRERSX1NJVEVM
T0NBTCgmc2luNi0+c2luNl9hZGRyKSkpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJy
ZWFrOwotI2VuZGlmCi0JCQlkZWZhdWx0OgotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogY2hlY2sg
dG8gc2VlIGlmIGluIHRoZSBpbml0LWFjayAqLwotCQkJaWYgKCFzY3RwX2FkZHJfaW5faW5pdGFj
ayhtLCBvZmZzZXQsIGxlbmd0aCwgJnNjdHBfaWZhLT5hZGRyZXNzLnNhKSkgewotCQkJCS8qIHRy
eSB0byBhZGQgaXQgKi8KLQkJCQlzY3RwX2FkZHJfbWdtdF9hc3NvYyhzdGNiLT5zY3RwX2VwLCBz
dGNiLAotCQkJCSAgICBzY3RwX2lmYSwgU0NUUF9BRERfSVBfQUREUkVTUywKLQkJCQkgICAgU0NU
UF9BRERSX0xPQ0tFRCk7Ci0JCQl9Ci0JCX0gLyogZW5kIGZvcmVhY2ggaWZhICovCi0JfSAvKiBl
bmQgZm9yZWFjaCBpZm4gKi8KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLX0KLQotLyoKLSAq
IHZhbGlkYXRlcyBhbiBpbml0LWFjayBjaHVuayAoZnJvbSBhIGNvb2tpZS1lY2hvKSB3aXRoIGN1
cnJlbnQgYWRkcmVzc2VzCi0gKiBhZGRzIGFkZHJlc3NlcyBmcm9tIHRoZSBpbml0LWFjayBpbnRv
IG91ciBsb2NhbCBhZGRyZXNzIGxpc3QsIGlmIG5lZWRlZAotICogcXVldWVzIGFzY29uZiBhZGRz
L2RlbGV0ZXMgYWRkcmVzc2VzIGFzIG5lZWRlZCBhbmQgbWFrZXMgYXBwcm9wcmlhdGUgbGlzdAot
ICogY2hhbmdlcyBmb3Igc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIG0sIG9mZnNldDogcG9pbnRz
IHRvIHRoZSBzdGFydCBvZiB0aGUKLSAqIGFkZHJlc3MgbGlzdCBpbiBhbiBpbml0LWFjayBjaHVu
ayBsZW5ndGg6IHRvdGFsIGxlbmd0aCBvZiB0aGUgYWRkcmVzcwotICogcGFyYW1zIG9ubHkgaW5p
dF9hZGRyOiBhZGRyZXNzIHdoZXJlIG15IElOSVQtQUNLIHdhcyBzZW50IGZyb20KLSAqLwotdm9p
ZAotc2N0cF9jaGVja19hZGRyZXNzX2xpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IG9mZnNldCwKLSAgICBpbnQgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKmlu
aXRfYWRkciwKLSAgICB1aW50MTZfdCBsb2NhbF9zY29wZSwgdWludDE2X3Qgc2l0ZV9zY29wZSwK
LSAgICB1aW50MTZfdCBpcHY0X3Njb3BlLCB1aW50MTZfdCBsb29wYmFja19zY29wZSkKLXsKLQkv
KiBwcm9jZXNzIHRoZSBsb2NhbCBhZGRyZXNzZXMgaW4gdGhlIGluaXRhY2sgKi8KLQlzY3RwX3By
b2Nlc3NfaW5pdGFja19hZGRyZXNzZXMoc3RjYiwgbSwgb2Zmc2V0LCBsZW5ndGgpOwotCi0JaWYg
KHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewot
CQkvKiBib3VuZCBhbGwgY2FzZSAqLwotCQlzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdF9hbGwoc3Rj
YiwgbSwgb2Zmc2V0LCBsZW5ndGgsIGluaXRfYWRkciwKLQkJICAgIGxvY2FsX3Njb3BlLCBzaXRl
X3Njb3BlLCBpcHY0X3Njb3BlLCBsb29wYmFja19zY29wZSk7Ci0JfSBlbHNlIHsKLQkJLyogc3Vi
c2V0IGJvdW5kIGNhc2UgKi8KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2Vw
LAotCQkgICAgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgewotCQkJLyogYXNjb25mJ3MgYWxs
b3dlZCAqLwotCQkJc2N0cF9jaGVja19hZGRyZXNzX2xpc3RfZXAoc3RjYiwgbSwgb2Zmc2V0LCBs
ZW5ndGgsCi0JCQkgICAgaW5pdF9hZGRyKTsKLQkJfQotCQkvKiBlbHNlLCBubyBhc2NvbmZzIGFs
bG93ZWQsIHNvIHdoYXQgd2Ugc2VudCBpcyB3aGF0IHdlIGdldCAqLwotCX0KLX0KLQotLyoKLSAq
IHNjdHBfYmluZHgoKSBzdXBwb3J0Ci0gKi8KLXVpbnQzMl90Ci1zY3RwX2FkZHJfbWdtdF9lcF9z
YShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLAotICAgIHVpbnQz
Ml90IHR5cGUsIHVpbnQzMl90IHZyZl9pZCwgc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCi17
Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxh
ZGRyOwotCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQlpZiAoc2EtPnNhX2xlbiA9PSAwKSB7Ci0JCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYs
IEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0jZW5kaWYKLQlpZiAoc2N0cF9pZmFw
KSB7Ci0JCWlmYSA9IHNjdHBfaWZhcDsKLQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9BRERfSVBf
QUREUkVTUykgewotCQkvKiBGb3IgYW4gYWRkIHRoZSBhZGRyZXNzIE1VU1QgYmUgb24gdGhlIHN5
c3RlbSAqLwotCQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoc2EsIHZyZl9pZCwgU0NUUF9B
RERSX05PVF9MT0NLRUQpOwotCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNT
KSB7Ci0JCS8qIEZvciBhIGRlbGV0ZSB3ZSBuZWVkIHRvIGZpbmQgaXQgaW4gdGhlIGlucCAqLwot
CQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2luX2VwKGlucCwgc2EsIFNDVFBfQUREUl9OT1RfTE9DS0VE
KTsKLQl9IGVsc2UgewotCQlpZmEgPSBOVUxMOwotCX0KLQlpZiAoaWZhICE9IE5VTEwpIHsKLQkJ
aWYgKHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgewotCQkJc2N0cF9hZGRfbG9jYWxfYWRk
cl9lcChpbnAsIGlmYSwgdHlwZSk7Ci0JCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9B
RERSRVNTKSB7Ci0JCQlpZiAoaW5wLT5sYWRkcl9jb3VudCA8IDIpIHsKLQkJCQkvKiBjYW4ndCBk
ZWxldGUgdGhlIGxhc3QgbG9jYWwgYWRkcmVzcyAqLwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVJTlZBTCk7Ci0JCQkJcmV0
dXJuIChFSU5WQUwpOwotCQkJfQotCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2Fk
ZHJfbGlzdCwKLQkJCQkgICAgIHNjdHBfbnh0X2FkZHIpIHsKLQkJCQlpZiAoaWZhID09IGxhZGRy
LT5pZmEpIHsKLQkJCQkJLyogTWFyayBpbiB0aGUgZGVsZXRlICovCi0JCQkJCWxhZGRyLT5hY3Rp
b24gPSB0eXBlOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoTElTVF9FTVBUWSgmaW5wLT5zY3Rw
X2Fzb2NfbGlzdCkpIHsKLQkJCS8qCi0JCQkgKiBUaGVyZSBpcyBubyBuZWVkIHRvIHN0YXJ0IHRo
ZSBpdGVyYXRvciBpZgotCQkJICogdGhlIGlucCBoYXMgbm8gYXNzb2NpYXRpb25zLgotCQkJICov
Ci0JCQlpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkJTElTVF9GT1JFQUNI
X1NBRkUobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIp
IHsKLQkJCQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQkJCQlzY3RwX2RlbF9sb2NhbF9h
ZGRyX2VwKGlucCwgaWZhKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXN0
cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciAqYXNjOwotCQkJc3RydWN0IHNjdHBfbGFkZHIgKndp
OwotCQkJaW50IHJldDsKLQotCQkJU0NUUF9NQUxMT0MoYXNjLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZf
aXRlcmF0b3IgKiwKLQkJCSAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRl
cmF0b3IpLAotCQkJICAgICAgICAgICAgU0NUUF9NX0FTQ19JVCk7Ci0JCQlpZiAoYXNjID09IE5V
TEwpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfQVNDT05GLCBFTk9NRU0pOwotCQkJCXJldHVybiAoRU5PTUVNKTsKLQkJCX0KLQkJCXdp
ID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0cnVjdCBz
Y3RwX2xhZGRyKTsKLQkJCWlmICh3aSA9PSBOVUxMKSB7Ci0JCQkJU0NUUF9GUkVFKGFzYywgU0NU
UF9NX0FTQ19JVCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX0FTQ09ORiwgRU5PTUVNKTsKLQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQl9
Ci0JCQlMSVNUX0lOSVQoJmFzYy0+bGlzdF9vZl93b3JrKTsKLQkJCWFzYy0+Y250ID0gMTsKLQkJ
CVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOwotCQkJd2ktPmlmYSA9IGlmYTsKLQkJCXdpLT5hY3Rp
b24gPSB0eXBlOwotCQkJYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOwotCQkJTElT
VF9JTlNFUlRfSEVBRCgmYXNjLT5saXN0X29mX3dvcmssIHdpLCBzY3RwX254dF9hZGRyKTsKLQkJ
CXJldCA9IHNjdHBfaW5pdGlhdGVfaXRlcmF0b3Ioc2N0cF9hc2NvbmZfaXRlcmF0b3JfZXAsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2Is
Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0ZXJhdG9yX2Vw
X2VuZCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QQ0JfQU5ZX0ZMQUdT
LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1BDQl9BTllfRkVBVFVSRVMs
Ci0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQVNPQ19BTllfU1RBVEUsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopYXNjLCAwLAotCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQsIGlucCwgMCk7
Ci0JCQlpZiAocmV0KSB7Ci0JCQkJU0NUUF9QUklOVEYoIkZhaWxlZCB0byBpbml0aWF0ZSBpdGVy
YXRvciBmb3IgYWRkcl9tZ210X2VwX3NhXG4iKTsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFRkFVTFQpOwotCQkJCSAgICAg
ICAgICAgICAgICAgICAgc2N0cF9hc2NvbmZfaXRlcmF0b3JfZW5kKGFzYywgMCk7Ci0JCQkJcmV0
dXJuIChFRkFVTFQpOwotCQkJfQotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsKLQkJLyog
aW52YWxpZCBhZGRyZXNzISAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiwgRUFERFJOT1RBVkFJTCk7Ci0JCXJldHVybiAoRUFE
RFJOT1RBVkFJTCk7Ci0JfQotfQotCi12b2lkCi1zY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91
cGRhdGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJCSAgc3RydWN0IHNjdHBfbmV0cyAqbmV0
KQotewotCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYTsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhcDsKLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfdGFnX3BhcmFtICp2dGFnOwotI2lmZGVmIElO
RVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICp0bzY7Ci0jZW5kaWYKLQlpZiAobmV0ID09IE5VTEwpIHsKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRh
dGU6IE1pc3NpbmcgbmV0XG4iKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAic2N0cF9hc2NvbmZfc2VuZF9uYXRfc3Rh
dGVfdXBkYXRlOiBNaXNzaW5nIHN0Y2JcbiIpOwotCQlyZXR1cm47Ci0JfQotICAvKiBOZWVkIHRv
IGhhdmUgaW4gdGhlIGFzY29uZjoKLSAgICogLSB2dGFncGFyYW0obXlfdnRhZy9wZWVyX3Z0YWcp
Ci0gICAqIC0gYWRkKDAuMC4wLjApCi0gICAqIC0gZGVsKDAuMC4wLjApCi0gICAqIC0gQW55IGds
b2JhbCBhZGRyZXNzZXMgYWRkKGFkZHIpCi0gICAqLwotCVNDVFBfTUFMTE9DKGFhLCBzdHJ1Y3Qg
c2N0cF9hc2NvbmZfYWRkciAqLCBzaXplb2YoKmFhKSwKLQkgICAgICAgICAgICBTQ1RQX01fQVND
X0FERFIpOwotCWlmIChhYSA9PSBOVUxMKSB7Ci0JCS8qIGRpZG4ndCBnZXQgbWVtb3J5ICovCi0J
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkgICAgICAgICJzY3RwX2FzY29uZl9zZW5k
X25hdF9zdGF0ZV91cGRhdGU6IGZhaWxlZCB0byBnZXQgbWVtb3J5IVxuIik7Ci0JCXJldHVybjsK
LQl9Ci0JYWEtPnNwZWNpYWxfZGVsID0gMDsKLQkvKiBmaWxsIGluIGFzY29uZiBhZGRyZXNzIHBh
cmFtZXRlciBmaWVsZHMgKi8KLQkvKiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJuZXR3b3JrZWQi
IGR1cmluZyBzZW5kICovCi0JYWEtPmlmYSA9IE5VTEw7Ci0JYWEtPnNlbnQgPSAwOwkJLyogY2xl
YXIgc2VudCBmbGFnICovCi0JdnRhZyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfdGFnX3BhcmFtICop
JmFhLT5hcC5hcGg7Ci0JdnRhZy0+YXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX05BVF9WVEFHUzsK
LQl2dGFnLT5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl90
YWdfcGFyYW0pOwotCXZ0YWctPmxvY2FsX3Z0YWcgPSBodG9ubChzdGNiLT5hc29jLm15X3Z0YWcp
OwotCXZ0YWctPnJlbW90ZV92dGFnID0gaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpOwotCVRB
SUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCi0J
U0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAot
CSAgICAgICAgICAgIFNDVFBfTV9BU0NfQUREUik7Ci0JaWYgKGFhID09IE5VTEwpIHsKLQkJLyog
ZGlkbid0IGdldCBtZW1vcnkgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCSAg
ICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRvIGdldCBt
ZW1vcnkhXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1zZXQoYWEsIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc2NvbmZfYWRkcikpOwotCS8qIGZpbGwgaW4gYXNjb25mIGFkZHJlc3MgcGFyYW1ldGVy
IGZpZWxkcyAqLwotCS8qIEFERCgwLjAuMC4wKSAqLwotCXN3aXRjaCAobmV0LT5yby5fbF9hZGRy
LnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWFhLT5hcC5h
cGgucGgucGFyYW1fdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1M7Ci0JCWFhLT5hcC5hcGgucGgu
cGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pOwot
CQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNF9BRERSRVNTOwotCQlhYS0+
YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSk7Ci0JCS8qIE5vIG5lZWQgdG8gYWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAu
MC4wICovCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEs
IG5leHQpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoK
LQkJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gU0NUUF9BRERfSVBfQUREUkVTUzsKLQkJYWEt
PmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJf
cGFyYW0pOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNl9BRERSRVNT
OwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9p
cHY2YWRkcl9wYXJhbSk7Ci0JCS8qIE5vIG5lZWQgdG8gYWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1
c2luZyAwLjAuMC4wICovCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9x
dWV1ZSwgYWEsIG5leHQpOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAotCQkgICAgICAgICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0
ZV91cGRhdGU6IHVua25vd24gYWRkcmVzcyBmYW1pbHlcbiIpOwotCQlTQ1RQX0ZSRUUoYWEsIFND
VFBfTV9BU0NfQUREUik7Ci0JCXJldHVybjsKLQl9Ci0JU0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBz
Y3RwX2FzY29uZl9hZGRyICosIHNpemVvZigqYWEpLAotCSAgICAgICAgICAgIFNDVFBfTV9BU0Nf
QUREUik7Ci0JaWYgKGFhID09IE5VTEwpIHsKLQkJLyogZGlkbid0IGdldCBtZW1vcnkgKi8KLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCi0JCSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRf
bmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4iKTsKLQkJcmV0dXJuOwot
CX0KLQltZW1zZXQoYWEsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcikpOwotCS8q
IGZpbGwgaW4gYXNjb25mIGFkZHJlc3MgcGFyYW1ldGVyIGZpZWxkcyAqLwotCS8qIEFERCgwLjAu
MC4wKSAqLwotCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVm
IElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9IFNDVFBf
QUREX0lQX0FERFJFU1M7Ci0JCWFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1f
dHlwZSA9IFNDVFBfSVBWNF9BRERSRVNTOwotCQlhYS0+YXAuYWRkcnAucGgucGFyYW1fbGVuZ3Ro
ID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7Ci0JCS8qIE5vIG5lZWQgdG8g
YWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAuMC4wICovCi0JCVRBSUxRX0lOU0VSVF9U
QUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQlicmVhazsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV90
eXBlID0gU0NUUF9ERUxfSVBfQUREUkVTUzsKLQkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGgg
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pOwotCQlhYS0+YXAuYWRkcnAu
cGgucGFyYW1fdHlwZSA9IFNDVFBfSVBWNl9BRERSRVNTOwotCQlhYS0+YXAuYWRkcnAucGgucGFy
YW1fbGVuZ3RoID0gc2l6ZW9mIChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7Ci0JCS8qIE5v
IG5lZWQgdG8gYWRkIGFuIGFkZHJlc3MsIHdlIGFyZSB1c2luZyAwLjAuMC4wICovCi0JCVRBSUxR
X0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOwotCQlicmVh
azsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAotCQkg
ICAgICAgICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IHVua25vd24gYWRkcmVz
cyBmYW1pbHlcbiIpOwotCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7Ci0JCXJldHVy
bjsKLQl9Ci0JLyogTm93IHdlIG11c3QgaHVudCB0aGUgYWRkcmVzc2VzIGFuZCBhZGQgYWxsIGds
b2JhbCBhZGRyZXNzZXMgKi8KLQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKLQkJ
c3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7Ci0JCXVpbnQzMl90IHZyZl9pZDsKLQotCQl2cmZf
aWQgPSBzdGNiLT5zY3RwX2VwLT5kZWZfdnJmX2lkOwotCQl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZy
Zl9pZCk7Ci0JCWlmICh2cmYgPT0gTlVMTCkgewotCQkJZ290byBza2lwX3Jlc3Q7Ci0JCX0KLQot
CQlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmbnAsICZ2cmYt
Pmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmFwLCAmc2N0cF9p
Zm5wLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotCQkJCXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNz
LnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJCXRv
ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW47Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJ
CQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3Jl
ZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnRvLT5zaW5fYWRkcikgIT0gMCkgewotCQkJ
CQkJY29udGludWU7Ci0JCQkJCX0KLSNlbmRpZgotCQkJCQlpZiAoSU40X0lTUFJJVkFURV9BRERS
RVNTKCZ0by0+c2luX2FkZHIpKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAo
SU40X0lTTE9PUEJBQ0tfQUREUkVTUygmdG8tPnNpbl9hZGRyKSkgewotCQkJCQkJY29udGludWU7
Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZf
SU5FVDY6Ci0JCQkJCXRvNiA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNjsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihzdGNiLT5zY3RwX2VwLT5p
cF9pbnAuaW5wLmlucF9jcmVkLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAmdG82LT5zaW42
X2FkZHIpICE9IDApIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJaWYg
KElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCWNvbnRpbnVl
OwotCQkJCQl9Ci0JCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnRvNi0+c2luNl9hZGRy
KSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlk
ZWZhdWx0OgotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJc2N0cF9hc2NvbmZfcXVldWVfbWdt
dChzdGNiLCBzY3RwX2lmYXAsIFNDVFBfQUREX0lQX0FERFJFU1MpOwotCQkJfQotCQl9Ci0JCVND
VFBfSVBJX0FERFJfUlVOTE9DSygpOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBzY3RwX2xhZGRyICps
YWRkcjsKLQotCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5zY3RwX2VwLT5zY3RwX2FkZHJf
bGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJ
CWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NU
UF9CRUlOR19ERUxFVEVEKQotCQkJCS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBieSB0aGUgc3lz
dGVtLCBkb250Ci0JCQkJICogbGlzdC4KLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJCWlmIChs
YWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKLQkJCQkvKiBBZGRyZXNzIGJl
aW5nIGRlbGV0ZWQgb24gdGhpcyBlcAotCQkJCSAqIGRvbid0IGxpc3QuCi0JCQkJICovCi0JCQkJ
Y29udGludWU7Ci0JCQl9Ci0JCQlzY3RwX2lmYXAgPSBsYWRkci0+aWZhOwotCQkJc3dpdGNoIChz
Y3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBB
Rl9JTkVUOgotCQkJCXRvID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW47Ci0JCQkJaWYgKElONF9J
U1BSSVZBVEVfQUREUkVTUygmdG8tPnNpbl9hZGRyKSkgewotCQkJCQljb250aW51ZTsKLQkJCQl9
Ci0JCQkJaWYgKElONF9JU0xPT1BCQUNLX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKLQkJCQkJ
Y29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCWNh
c2UgQUZfSU5FVDY6Ci0JCQkJdG82ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42OwotCQkJCWlm
IChJTjZfSVNfQUREUl9MT09QQkFDSygmdG82LT5zaW42X2FkZHIpKSB7Ci0JCQkJCWNvbnRpbnVl
OwotCQkJCX0KLQkJCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZ0bzYtPnNpbjZfYWRkcikp
IHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlmCi0JCQlkZWZhdWx0
OgotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBz
Y3RwX2lmYXAsIFNDVFBfQUREX0lQX0FERFJFU1MpOwotCQl9Ci0JfQotIHNraXBfcmVzdDoKLQkv
KiBOb3cgd2UgbXVzdCBzZW5kIHRoZSBhc2NvbmYgaW50byB0aGUgcXVldWUgKi8KLQlzY3RwX3Nl
bmRfYXNjb25mKHN0Y2IsIG5ldCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOwotfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2FzY29uZi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2OWFjY2QyYjg1MmQzOTAy
M2Y0Yjc4NDMwMWFkMDU4ZjNjMGExN2Q3Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hc2NvbmYuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5
IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0g
KiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4K
LSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lz
Y28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2FzY29uZi5o
IDMwOTYwNyAyMDE2LTEyLTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0KLSNpZm5k
ZWYgX05FVElORVRfU0NUUF9BU0NPTkZfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9BU0NPTkZf
SF8KLQotI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCi0v
KgotICogZnVuY3Rpb24gcHJvdG90eXBlcwotICovCi1leHRlcm4gdm9pZCBzY3RwX2FzY29uZl9j
bGVhbnVwKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1leHRlcm4g
c3RydWN0IG1idWYgKnNjdHBfY29tcG9zZV9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICosIGludCAq
LCBpbnQpOwotCi1leHRlcm4gdm9pZAotc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICos
IHVuc2lnbmVkIGludCwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfYXNjb25mX2NodW5rICosIHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOwotCi1leHRl
cm4gdm9pZAotc2N0cF9oYW5kbGVfYXNjb25mX2FjayhzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVj
dCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKiwKLSAgICAgc3RydWN0IHNjdHBfdGNiICosIHN0cnVj
dCBzY3RwX25ldHMgKiwgaW50ICopOwotCi1leHRlcm4gdWludDMyX3QKLXNjdHBfYWRkcl9tZ210
X2VwX3NhKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLAotCQkgICAgIHVp
bnQzMl90LCB1aW50MzJfdCwgc3RydWN0IHNjdHBfaWZhICopOwotCi0KLWV4dGVybiBpbnQgc2N0
cF9hc2NvbmZfaXRlcmF0b3JfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdm9pZCAqcHRyLAot
CQkJCSAgIHVpbnQzMl90IHZhbCk7Ci1leHRlcm4gdm9pZCBzY3RwX2FzY29uZl9pdGVyYXRvcl9z
dGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCQkJICAgICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotCQkJCSAgICAgIHZvaWQgKnB0ciwgdWludDMyX3QgdHlwZSk7Ci1leHRlcm4gdm9pZCBz
Y3RwX2FzY29uZl9pdGVyYXRvcl9lbmQodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwpOwotCi0KLWV4
dGVybiBpbnQzMl90Ci1zY3RwX3NldF9wcmltYXJ5X2lwX2FkZHJlc3Nfc2Eoc3RydWN0IHNjdHBf
dGNiICosCi0gICAgc3RydWN0IHNvY2thZGRyICopOwotCi1leHRlcm4gdm9pZAotc2N0cF9zZXRf
cHJpbWFyeV9pcF9hZGRyZXNzKHN0cnVjdCBzY3RwX2lmYSAqaWZhKTsKLQotZXh0ZXJuIHZvaWQK
LXNjdHBfY2hlY2tfYWRkcmVzc19saXN0KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAq
LCBpbnQsIGludCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1
aW50MTZfdCwgdWludDE2X3QpOwotCi1leHRlcm4gdm9pZAotc2N0cF9hc3NvY19pbW1lZGlhdGVf
cmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotZXh0ZXJuIHZvaWQKLXNjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotI2VuZGlmCi0KLWV4dGVybiB2b2lkCi1z
Y3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkJCSAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQotZXh0ZXJuIGludAotc2N0cF9pc19hZGRy
X3BlbmRpbmcoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKLSNlbmRpZgkJ
CQkvKiBfS0VSTkVMICovCi0KLSNlbmRpZgkJCQkvKiAhX05FVElORVRfU0NUUF9BU0NPTkZfSF8g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfYXV0aC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMDNhY2U1
NzM3NDE2N2U4MjEyYjZlMDAwNDQ2YjFjNGM5YjJlODU0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmMKKysr
IC9kZXYvbnVsbApAQCAtMSwyMzQ3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAx
LTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X2F1dGguYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgot
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Ci0KLSNpZmRlZiBTQ1RQX0RFQlVHCi0j
ZGVmaW5lIFNDVFBfQVVUSF9ERUJVRwkJKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikg
JiBTQ1RQX0RFQlVHX0FVVEgxKQotI2RlZmluZSBTQ1RQX0FVVEhfREVCVUcyCShTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGVidWdfb24pICYgU0NUUF9ERUJVR19BVVRIMikKLSNlbmRpZiAvKiBTQ1RQ
X0RFQlVHICovCi0KLQotdm9pZAotc2N0cF9jbGVhcl9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xp
c3RfdCAqY2hrbGlzdCkKLXsKLQltZW1zZXQoY2hrbGlzdCwgMCwgc2l6ZW9mKCpjaGtsaXN0KSk7
Ci0JLyogY2hrbGlzdC0+bnVtX2NodW5rcyA9IDA7ICovCi19Ci0KLXNjdHBfYXV0aF9jaGtsaXN0
X3QgKgotc2N0cF9hbGxvY19jaHVua2xpc3Qodm9pZCkKLXsKLQlzY3RwX2F1dGhfY2hrbGlzdF90
ICpjaGtsaXN0OwotCi0JU0NUUF9NQUxMT0MoY2hrbGlzdCwgc2N0cF9hdXRoX2Noa2xpc3RfdCAq
LCBzaXplb2YoKmNoa2xpc3QpLAotCQkgICAgU0NUUF9NX0FVVEhfQ0wpOwotCWlmIChjaGtsaXN0
ID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAic2N0cF9hbGxvY19jaHVu
a2xpc3Q6IGZhaWxlZCB0byBnZXQgbWVtb3J5IVxuIik7Ci0JfSBlbHNlIHsKLQkJc2N0cF9jbGVh
cl9jaHVua2xpc3QoY2hrbGlzdCk7Ci0JfQotCXJldHVybiAoY2hrbGlzdCk7Ci19Ci0KLXZvaWQK
LXNjdHBfZnJlZV9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKLXsKLQlpZiAo
bGlzdCAhPSBOVUxMKQotCQlTQ1RQX0ZSRUUobGlzdCwgU0NUUF9NX0FVVEhfQ0wpOwotfQotCi1z
Y3RwX2F1dGhfY2hrbGlzdF90ICoKLXNjdHBfY29weV9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xp
c3RfdCAqbGlzdCkKLXsKLQlzY3RwX2F1dGhfY2hrbGlzdF90ICpuZXdfbGlzdDsKLQotCWlmIChs
aXN0ID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQkvKiBnZXQgYSBuZXcgbGlzdCAqLwot
CW5ld19saXN0ID0gc2N0cF9hbGxvY19jaHVua2xpc3QoKTsKLQlpZiAobmV3X2xpc3QgPT0gTlVM
TCkKLQkJcmV0dXJuIChOVUxMKTsKLQkvKiBjb3B5IGl0ICovCi0JbWVtY3B5KG5ld19saXN0LCBs
aXN0LCBzaXplb2YoKm5ld19saXN0KSk7Ci0KLQlyZXR1cm4gKG5ld19saXN0KTsKLX0KLQotCi0v
KgotICogYWRkIGEgY2h1bmsgdG8gdGhlIHJlcXVpcmVkIGNodW5rcyBsaXN0Ci0gKi8KLWludAot
c2N0cF9hdXRoX2FkZF9jaHVuayh1aW50OF90IGNodW5rLCBzY3RwX2F1dGhfY2hrbGlzdF90ICps
aXN0KQotewotCWlmIChsaXN0ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0JLyogaXMgY2h1
bmsgcmVzdHJpY3RlZD8gKi8KLQlpZiAoKGNodW5rID09IFNDVFBfSU5JVElBVElPTikgfHwKLQkg
ICAgKGNodW5rID09IFNDVFBfSU5JVElBVElPTl9BQ0spIHx8Ci0JICAgIChjaHVuayA9PSBTQ1RQ
X1NIVVRET1dOX0NPTVBMRVRFKSB8fAotCSAgICAoY2h1bmsgPT0gU0NUUF9BVVRIRU5USUNBVElP
TikpIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChsaXN0LT5jaHVua3NbY2h1bmtdID09IDAp
IHsKLQkJbGlzdC0+Y2h1bmtzW2NodW5rXSA9IDE7Ci0JCWxpc3QtPm51bV9jaHVua3MrKzsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFA6IGFkZGVkIGNodW5rICV1ICgweCUw
MngpIHRvIEF1dGggbGlzdFxuIiwKLQkJCWNodW5rLCBjaHVuayk7Ci0JfQotCXJldHVybiAoMCk7
Ci19Ci0KLS8qCi0gKiBkZWxldGUgYSBjaHVuayBmcm9tIHRoZSByZXF1aXJlZCBjaHVua3MgbGlz
dAotICovCi1pbnQKLXNjdHBfYXV0aF9kZWxldGVfY2h1bmsodWludDhfdCBjaHVuaywgc2N0cF9h
dXRoX2Noa2xpc3RfdCAqbGlzdCkKLXsKLQlpZiAobGlzdCA9PSBOVUxMKQotCQlyZXR1cm4gKC0x
KTsKLQotCWlmIChsaXN0LT5jaHVua3NbY2h1bmtdID09IDEpIHsKLQkJbGlzdC0+Y2h1bmtzW2No
dW5rXSA9IDA7Ci0JCWxpc3QtPm51bV9jaHVua3MtLTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FV
VEgxLAotCQkJIlNDVFA6IGRlbGV0ZWQgY2h1bmsgJXUgKDB4JTAyeCkgZnJvbSBBdXRoIGxpc3Rc
biIsCi0JCQljaHVuaywgY2h1bmspOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zaXplX3QKLXNj
dHBfYXV0aF9nZXRfY2hrbGlzdF9zaXplKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3Qp
Ci17Ci0JaWYgKGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQllbHNlCi0JCXJldHVybiAo
bGlzdC0+bnVtX2NodW5rcyk7Ci19Ci0KLS8qCi0gKiByZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVy
IGFuZCBsaXN0IG9mIHJlcXVpcmVkIGNodW5rcyBjYWxsZXIgbXVzdAotICogZ3VhcmFudGVlIHB0
ciBoYXMgc3BhY2UgZm9yIHVwIHRvIDI1NiBieXRlcwotICovCi1pbnQKLXNjdHBfc2VyaWFsaXpl
X2F1dGhfY2h1bmtzKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0
cikKLXsKLQlpbnQgaSwgY291bnQgPSAwOwotCi0JaWYgKGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJu
ICgwKTsKLQotCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQlpZiAobGlzdC0+Y2h1bmtz
W2ldICE9IDApIHsKLQkJCSpwdHIrKyA9IGk7Ci0JCQljb3VudCsrOwotCQl9Ci0JfQotCXJldHVy
biAoY291bnQpOwotfQotCi1pbnQKLXNjdHBfcGFja19hdXRoX2NodW5rcyhjb25zdCBzY3RwX2F1
dGhfY2hrbGlzdF90ICpsaXN0LCB1aW50OF90ICpwdHIpCi17Ci0JaW50IGksIHNpemUgPSAwOwot
Ci0JaWYgKGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJuICgwKTsKLQotCWlmIChsaXN0LT5udW1fY2h1
bmtzIDw9IDMyKSB7Ci0JCS8qIGp1c3QgbGlzdCB0aGVtLCBvbmUgYnl0ZSBlYWNoICovCi0JCWZv
ciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7
Ci0JCQkJKnB0cisrID0gaTsKLQkJCQlzaXplKys7Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlp
bnQgaW5kZXgsIG9mZnNldDsKLQotCQkvKiBwYWNrIGludG8gYSAzMiBieXRlIGJpdGZpZWxkICov
Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAh
PSAwKSB7Ci0JCQkJaW5kZXggPSBpIC8gODsKLQkJCQlvZmZzZXQgPSBpICUgODsKLQkJCQlwdHJb
aW5kZXhdIHw9ICgxIDw8IG9mZnNldCk7Ci0JCQl9Ci0JCX0KLQkJc2l6ZSA9IDMyOwotCX0KLQly
ZXR1cm4gKHNpemUpOwotfQotCi1pbnQKLXNjdHBfdW5wYWNrX2F1dGhfY2h1bmtzKGNvbnN0IHVp
bnQ4X3QgKnB0ciwgdWludDhfdCBudW1fY2h1bmtzLAotICAgIHNjdHBfYXV0aF9jaGtsaXN0X3Qg
Kmxpc3QpCi17Ci0JaW50IGk7Ci0JaW50IHNpemU7Ci0KLQlpZiAobGlzdCA9PSBOVUxMKQotCQly
ZXR1cm4gKDApOwotCi0JaWYgKG51bV9jaHVua3MgPD0gMzIpIHsKLQkJLyoganVzdCBwdWxsIHRo
ZW0sIG9uZSBieXRlIGVhY2ggKi8KLQkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykg
ewotCQkJKHZvaWQpc2N0cF9hdXRoX2FkZF9jaHVuaygqcHRyKyssIGxpc3QpOwotCQl9Ci0JCXNp
emUgPSBudW1fY2h1bmtzOwotCX0gZWxzZSB7Ci0JCWludCBpbmRleCwgb2Zmc2V0OwotCi0JCS8q
IHVucGFjayBmcm9tIGEgMzIgYnl0ZSBiaXRmaWVsZCAqLwotCQlmb3IgKGluZGV4ID0gMDsgaW5k
ZXggPCAzMjsgaW5kZXgrKykgewotCQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA4OyBvZmZz
ZXQrKykgewotCQkJCWlmIChwdHJbaW5kZXhdICYgKDEgPDwgb2Zmc2V0KSkgewotCQkJCQkodm9p
ZClzY3RwX2F1dGhfYWRkX2NodW5rKChpbmRleCAqIDgpICsgb2Zmc2V0LCBsaXN0KTsKLQkJCQl9
Ci0JCQl9Ci0JCX0KLQkJc2l6ZSA9IDMyOwotCX0KLQlyZXR1cm4gKHNpemUpOwotfQotCi0KLS8q
Ci0gKiBhbGxvY2F0ZSBzdHJ1Y3R1cmUgc3BhY2UgZm9yIGEga2V5IG9mIGxlbmd0aCBrZXlsZW4K
LSAqLwotc2N0cF9rZXlfdCAqCi1zY3RwX2FsbG9jX2tleSh1aW50MzJfdCBrZXlsZW4pCi17Ci0J
c2N0cF9rZXlfdCAqbmV3X2tleTsKLQotCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBfa2V5X3Qg
Kiwgc2l6ZW9mKCpuZXdfa2V5KSArIGtleWxlbiwKLQkJICAgIFNDVFBfTV9BVVRIX0tZKTsKLQlp
ZiAobmV3X2tleSA9PSBOVUxMKSB7Ci0JCS8qIG91dCBvZiBtZW1vcnkgKi8KLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JbmV3X2tleS0+a2V5bGVuID0ga2V5bGVuOwotCXJldHVybiAobmV3X2tleSk7
Ci19Ci0KLXZvaWQKLXNjdHBfZnJlZV9rZXkoc2N0cF9rZXlfdCAqa2V5KQotewotCWlmIChrZXkg
IT0gTlVMTCkKLQkJU0NUUF9GUkVFKGtleSxTQ1RQX01fQVVUSF9LWSk7Ci19Ci0KLXZvaWQKLXNj
dHBfcHJpbnRfa2V5KHNjdHBfa2V5X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKQotewotCXVpbnQz
Ml90IGk7Ci0KLQlpZiAoa2V5ID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIiVzOiBbTnVsbCBr
ZXldXG4iLCBzdHIpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfUFJJTlRGKCIlczogbGVuICV1LCAi
LCBzdHIsIGtleS0+a2V5bGVuKTsKLQlpZiAoa2V5LT5rZXlsZW4pIHsKLQkJZm9yIChpID0gMDsg
aSA8IGtleS0+a2V5bGVuOyBpKyspCi0JCQlTQ1RQX1BSSU5URigiJTAyeCIsIGtleS0+a2V5W2ld
KTsKLQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JfSBlbHNlIHsKLQkJU0NUUF9QUklOVEYoIltOdWxs
IGtleV1cbiIpOwotCX0KLX0KLQotdm9pZAotc2N0cF9zaG93X2tleShzY3RwX2tleV90ICprZXks
IGNvbnN0IGNoYXIgKnN0cikKLXsKLQl1aW50MzJfdCBpOwotCi0JaWYgKGtleSA9PSBOVUxMKSB7
Ci0JCVNDVFBfUFJJTlRGKCIlczogW051bGwga2V5XVxuIiwgc3RyKTsKLQkJcmV0dXJuOwotCX0K
LQlTQ1RQX1BSSU5URigiJXM6IGxlbiAldSwgIiwgc3RyLCBrZXktPmtleWxlbik7Ci0JaWYgKGtl
eS0+a2V5bGVuKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBrZXktPmtleWxlbjsgaSsrKQotCQkJU0NU
UF9QUklOVEYoIiUwMngiLCBrZXktPmtleVtpXSk7Ci0JCVNDVFBfUFJJTlRGKCJcbiIpOwotCX0g
ZWxzZSB7Ci0JCVNDVFBfUFJJTlRGKCJbTnVsbCBrZXldXG4iKTsKLQl9Ci19Ci0KLXN0YXRpYyB1
aW50MzJfdAotc2N0cF9nZXRfa2V5bGVuKHNjdHBfa2V5X3QgKmtleSkKLXsKLQlpZiAoa2V5ICE9
IE5VTEwpCi0JCXJldHVybiAoa2V5LT5rZXlsZW4pOwotCWVsc2UKLQkJcmV0dXJuICgwKTsKLX0K
LQotLyoKLSAqIGdlbmVyYXRlIGEgbmV3IHJhbmRvbSBrZXkgb2YgbGVuZ3RoICdrZXlsZW4nCi0g
Ki8KLXNjdHBfa2V5X3QgKgotc2N0cF9nZW5lcmF0ZV9yYW5kb21fa2V5KHVpbnQzMl90IGtleWxl
bikKLXsKLQlzY3RwX2tleV90ICpuZXdfa2V5OwotCi0JbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5
KGtleWxlbik7Ci0JaWYgKG5ld19rZXkgPT0gTlVMTCkgewotCQkvKiBvdXQgb2YgbWVtb3J5ICov
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCVNDVFBfUkVBRF9SQU5ET00obmV3X2tleS0+a2V5LCBr
ZXlsZW4pOwotCW5ld19rZXktPmtleWxlbiA9IGtleWxlbjsKLQlyZXR1cm4gKG5ld19rZXkpOwot
fQotCi1zY3RwX2tleV90ICoKLXNjdHBfc2V0X2tleSh1aW50OF90ICprZXksIHVpbnQzMl90IGtl
eWxlbikKLXsKLQlzY3RwX2tleV90ICpuZXdfa2V5OwotCi0JbmV3X2tleSA9IHNjdHBfYWxsb2Nf
a2V5KGtleWxlbik7Ci0JaWYgKG5ld19rZXkgPT0gTlVMTCkgewotCQkvKiBvdXQgb2YgbWVtb3J5
ICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW1lbWNweShuZXdfa2V5LT5rZXksIGtleSwga2V5
bGVuKTsKLQlyZXR1cm4gKG5ld19rZXkpOwotfQotCi0vKi0KLSAqIGdpdmVuIHR3byBrZXlzIG9m
IHZhcmlhYmxlIHNpemUsIGNvbXB1dGUgd2hpY2gga2V5IGlzICJsYXJnZXIvc21hbGxlciIKLSAq
IHJldHVybnM6ICAxIGlmIGtleTEgPiBrZXkyCi0gKiAgICAgICAgICAtMSBpZiBrZXkxIDwga2V5
MgotICogICAgICAgICAgIDAgaWYga2V5MSA9IGtleTIKLSAqLwotc3RhdGljIGludAotc2N0cF9j
b21wYXJlX2tleShzY3RwX2tleV90ICprZXkxLCBzY3RwX2tleV90ICprZXkyKQotewotCXVpbnQz
Ml90IG1heGxlbjsKLQl1aW50MzJfdCBpOwotCXVpbnQzMl90IGtleTFsZW4sIGtleTJsZW47Ci0J
dWludDhfdCAqa2V5XzEsICprZXlfMjsKLQl1aW50OF90IHZhbDEsIHZhbDI7Ci0KLQkvKiBzYW5p
dHkvbGVuZ3RoIGNoZWNrICovCi0Ja2V5MWxlbiA9IHNjdHBfZ2V0X2tleWxlbihrZXkxKTsKLQlr
ZXkybGVuID0gc2N0cF9nZXRfa2V5bGVuKGtleTIpOwotCWlmICgoa2V5MWxlbiA9PSAwKSAmJiAo
a2V5MmxlbiA9PSAwKSkKLQkJcmV0dXJuICgwKTsKLQllbHNlIGlmIChrZXkxbGVuID09IDApCi0J
CXJldHVybiAoLTEpOwotCWVsc2UgaWYgKGtleTJsZW4gPT0gMCkKLQkJcmV0dXJuICgxKTsKLQot
CWlmIChrZXkxbGVuIDwga2V5MmxlbikgewotCQltYXhsZW4gPSBrZXkybGVuOwotCX0gZWxzZSB7
Ci0JCW1heGxlbiA9IGtleTFsZW47Ci0JfQotCWtleV8xID0ga2V5MS0+a2V5OwotCWtleV8yID0g
a2V5Mi0+a2V5OwotCS8qIGNoZWNrIGZvciBudW1lcmljIGVxdWFsaXR5ICovCi0JZm9yIChpID0g
MDsgaSA8IG1heGxlbjsgaSsrKSB7Ci0JCS8qIGxlZnQtcGFkIHdpdGggemVyb3MgKi8KLQkJdmFs
MSA9IChpIDwgKG1heGxlbiAtIGtleTFsZW4pKSA/IDAgOiAqKGtleV8xKyspOwotCQl2YWwyID0g
KGkgPCAobWF4bGVuIC0ga2V5MmxlbikpID8gMCA6ICooa2V5XzIrKyk7Ci0JCWlmICh2YWwxID4g
dmFsMikgewotCQkJcmV0dXJuICgxKTsKLQkJfSBlbHNlIGlmICh2YWwxIDwgdmFsMikgewotCQkJ
cmV0dXJuICgtMSk7Ci0JCX0KLQl9Ci0JLyoga2V5cyBhcmUgZXF1YWwgdmFsdWUsIHNvIGNoZWNr
IGxlbmd0aHMgKi8KLQlpZiAoa2V5MWxlbiA9PSBrZXkybGVuKQotCQlyZXR1cm4gKDApOwotCWVs
c2UgaWYgKGtleTFsZW4gPCBrZXkybGVuKQotCQlyZXR1cm4gKC0xKTsKLQllbHNlCi0JCXJldHVy
biAoMSk7Ci19Ci0KLS8qCi0gKiBnZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGVkIGtleWluZyBtYXRl
cmlhbCBiYXNlZCBvbiB0aGUgdHdvIGtleXMgYW5kIHRoZQotICogc2hhcmVkIGtleSAoaWYgYXZh
aWxhYmxlKS4gZHJhZnQtaWV0Zi10c3Z3Zy1hdXRoIHNwZWNpZmllcyB0aGUgc3BlY2lmaWMKLSAq
IG9yZGVyIGZvciBjb25jYXRlbmF0aW9uCi0gKi8KLXNjdHBfa2V5X3QgKgotc2N0cF9jb21wdXRl
X2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlfdCAqa2V5Miwgc2N0cF9rZXlfdCAq
c2hhcmVkKQotewotCXVpbnQzMl90IGtleWxlbjsKLQlzY3RwX2tleV90ICpuZXdfa2V5OwotCXVp
bnQ4X3QgKmtleV9wdHI7Ci0KLQlrZXlsZW4gPSBzY3RwX2dldF9rZXlsZW4oa2V5MSkgKyBzY3Rw
X2dldF9rZXlsZW4oa2V5MikgKwotCSAgICBzY3RwX2dldF9rZXlsZW4oc2hhcmVkKTsKLQotCWlm
IChrZXlsZW4gPiAwKSB7Ci0JCS8qIGdldCBzcGFjZSBmb3IgdGhlIG5ldyBrZXkgKi8KLQkJbmV3
X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JCWlmIChuZXdfa2V5ID09IE5VTEwpIHsK
LQkJCS8qIG91dCBvZiBtZW1vcnkgKi8KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJbmV3X2tl
eS0+a2V5bGVuID0ga2V5bGVuOwotCQlrZXlfcHRyID0gbmV3X2tleS0+a2V5OwotCX0gZWxzZSB7
Ci0JCS8qIGFsbCBrZXlzIGVtcHR5L251bGw/ISAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQot
CS8qIGNvbmNhdGVuYXRlIHRoZSBrZXlzICovCi0JaWYgKHNjdHBfY29tcGFyZV9rZXkoa2V5MSwg
a2V5MikgPD0gMCkgewotCQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MSArIGtleTIgKi8KLQkJaWYg
KHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7Ci0JCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5r
ZXksIHNoYXJlZC0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47Ci0JCX0K
LQkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkxKSkgewotCQkJbWVtY3B5KGtleV9wdHIsIGtleTEt
PmtleSwga2V5MS0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0ga2V5MS0+a2V5bGVuOwotCQl9Ci0J
CWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MikpIHsKLQkJCW1lbWNweShrZXlfcHRyLCBrZXkyLT5r
ZXksIGtleTItPmtleWxlbik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBrZXkgaXMgc2hhcmVkICsg
a2V5MiArIGtleTEgKi8KLQkJaWYgKHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7Ci0JCQltZW1j
cHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0g
c2hhcmVkLT5rZXlsZW47Ci0JCX0KLQkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkyKSkgewotCQkJ
bWVtY3B5KGtleV9wdHIsIGtleTItPmtleSwga2V5Mi0+a2V5bGVuKTsKLQkJCWtleV9wdHIgKz0g
a2V5Mi0+a2V5bGVuOwotCQl9Ci0JCWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MSkpIHsKLQkJCW1l
bWNweShrZXlfcHRyLCBrZXkxLT5rZXksIGtleTEtPmtleWxlbik7Ci0JCX0KLQl9Ci0JcmV0dXJu
IChuZXdfa2V5KTsKLX0KLQotCi1zY3RwX3NoYXJlZGtleV90ICoKLXNjdHBfYWxsb2Nfc2hhcmVk
a2V5KHZvaWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqbmV3X2tleTsKLQotCVNDVFBfTUFMTE9D
KG5ld19rZXksIHNjdHBfc2hhcmVka2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSwKLQkJICAgIFND
VFBfTV9BVVRIX0tZKTsKLQlpZiAobmV3X2tleSA9PSBOVUxMKSB7Ci0JCS8qIG91dCBvZiBtZW1v
cnkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbmV3X2tleS0+a2V5aWQgPSAwOwotCW5ld19r
ZXktPmtleSA9IE5VTEw7Ci0JbmV3X2tleS0+cmVmY291bnQgPSAxOwotCW5ld19rZXktPmRlYWN0
aXZhdGVkID0gMDsKLQlyZXR1cm4gKG5ld19rZXkpOwotfQotCi12b2lkCi1zY3RwX2ZyZWVfc2hh
cmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpCi17Ci0JaWYgKHNrZXkgPT0gTlVMTCkKLQkJ
cmV0dXJuOwotCi0JaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmc2tleS0+
cmVmY291bnQpKSB7Ci0JCWlmIChza2V5LT5rZXkgIT0gTlVMTCkKLQkJCXNjdHBfZnJlZV9rZXko
c2tleS0+a2V5KTsKLQkJU0NUUF9GUkVFKHNrZXksIFNDVFBfTV9BVVRIX0tZKTsKLQl9Ci19Ci0K
LXNjdHBfc2hhcmVka2V5X3QgKgotc2N0cF9maW5kX3NoYXJlZGtleShzdHJ1Y3Qgc2N0cF9rZXlo
ZWFkICpzaGFyZWRfa2V5cywgdWludDE2X3Qga2V5X2lkKQotewotCXNjdHBfc2hhcmVka2V5X3Qg
KnNrZXk7Ci0KLQlMSVNUX0ZPUkVBQ0goc2tleSwgc2hhcmVkX2tleXMsIG5leHQpIHsKLQkJaWYg
KHNrZXktPmtleWlkID09IGtleV9pZCkKLQkJCXJldHVybiAoc2tleSk7Ci0JfQotCXJldHVybiAo
TlVMTCk7Ci19Ci0KLWludAotc2N0cF9pbnNlcnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhl
YWQgKnNoYXJlZF9rZXlzLAotCQkgICAgICBzY3RwX3NoYXJlZGtleV90ICpuZXdfc2tleSkKLXsK
LQlzY3RwX3NoYXJlZGtleV90ICpza2V5OwotCi0JaWYgKChzaGFyZWRfa2V5cyA9PSBOVUxMKSB8
fCAobmV3X3NrZXkgPT0gTlVMTCkpCi0JCXJldHVybiAoRUlOVkFMKTsKLQotCS8qIGluc2VydCBp
bnRvIGFuIGVtcHR5IGxpc3Q/ICovCi0JaWYgKExJU1RfRU1QVFkoc2hhcmVkX2tleXMpKSB7Ci0J
CUxJU1RfSU5TRVJUX0hFQUQoc2hhcmVkX2tleXMsIG5ld19za2V5LCBuZXh0KTsKLQkJcmV0dXJu
ICgwKTsKLQl9Ci0JLyogaW5zZXJ0IGludG8gdGhlIGV4aXN0aW5nIGxpc3QsIG9yZGVyZWQgYnkg
a2V5IGlkICovCi0JTElTVF9GT1JFQUNIKHNrZXksIHNoYXJlZF9rZXlzLCBuZXh0KSB7Ci0JCWlm
IChuZXdfc2tleS0+a2V5aWQgPCBza2V5LT5rZXlpZCkgewotCQkJLyogaW5zZXJ0IGl0IGJlZm9y
ZSBoZXJlICovCi0JCQlMSVNUX0lOU0VSVF9CRUZPUkUoc2tleSwgbmV3X3NrZXksIG5leHQpOwot
CQkJcmV0dXJuICgwKTsKLQkJfSBlbHNlIGlmIChuZXdfc2tleS0+a2V5aWQgPT0gc2tleS0+a2V5
aWQpIHsKLQkJCS8qIHJlcGxhY2UgdGhlIGV4aXN0aW5nIGtleSAqLwotCQkJLyogdmVyaWZ5IHRo
aXMga2V5ICpjYW4qIGJlIHJlcGxhY2VkICovCi0JCQlpZiAoKHNrZXktPmRlYWN0aXZhdGVkKSAm
JiAoc2tleS0+cmVmY291bnQgPiAxKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwK
LQkJCQkJImNhbid0IHJlcGxhY2Ugc2hhcmVkIGtleSBpZCAldVxuIiwKLQkJCQkJbmV3X3NrZXkt
PmtleWlkKTsKLQkJCQlyZXR1cm4gKEVCVVNZKTsKLQkJCX0KLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19BVVRIMSwKLQkJCQkicmVwbGFjaW5nIHNoYXJlZCBrZXkgaWQgJXVcbiIsCi0JCQkJbmV3X3Nr
ZXktPmtleWlkKTsKLQkJCUxJU1RfSU5TRVJUX0JFRk9SRShza2V5LCBuZXdfc2tleSwgbmV4dCk7
Ci0JCQlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsKLQkJCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tl
eSk7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCWlmIChMSVNUX05FWFQoc2tleSwgbmV4dCkgPT0g
TlVMTCkgewotCQkJLyogYmVsb25ncyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0ICovCi0JCQlMSVNU
X0lOU0VSVF9BRlRFUihza2V5LCBuZXdfc2tleSwgbmV4dCk7Ci0JCQlyZXR1cm4gKDApOwotCQl9
Ci0JfQotCS8qIHNob3VsZG4ndCByZWFjaCBoZXJlICovCi0JcmV0dXJuIChFSU5WQUwpOwotfQot
Ci12b2lkCi1zY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
MTZfdCBrZXlfaWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQgdGhl
IHNoYXJlZCBrZXkgKi8KLQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5z
aGFyZWRfa2V5cywga2V5X2lkKTsKLQotCS8qIGJ1bXAgdGhlIHJlZiBjb3VudCAqLwotCWlmIChz
a2V5KSB7Ci0JCWF0b21pY19hZGRfaW50KCZza2V5LT5yZWZjb3VudCwgMSk7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19BVVRIMiwKLQkJCSIlczogc3RjYiAlcCBrZXkgJXUgcmVmY291bnQgYWNxdWly
ZSB0byAlZFxuIiwKLQkJCV9fZnVuY19fLCAodm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVm
Y291bnQpOwotCX0KLX0KLQotdm9pZAotc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lkLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VOVVNF
RAotI2VuZGlmCi0pCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQgdGhl
IHNoYXJlZCBrZXkgKi8KLQlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5z
aGFyZWRfa2V5cywga2V5X2lkKTsKLQotCS8qIGRlY3JlbWVudCB0aGUgcmVmIGNvdW50ICovCi0J
aWYgKHNrZXkpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgyLAotCQkJIiVzOiBzdGNiICVw
IGtleSAldSByZWZjb3VudCByZWxlYXNlIHRvICVkXG4iLAotCQkJX19mdW5jX18sICh2b2lkICop
c3RjYiwga2V5X2lkLCBza2V5LT5yZWZjb3VudCk7Ci0KLQkJLyogc2VlIGlmIGEgbm90aWZpY2F0
aW9uIHNob3VsZCBiZSBnZW5lcmF0ZWQgKi8KLQkJaWYgKChza2V5LT5yZWZjb3VudCA8PSAyKSAm
JiAoc2tleS0+ZGVhY3RpdmF0ZWQpKSB7Ci0JCQkvKiBub3RpZnkgVUxQIHRoYXQga2V5IGlzIG5v
IGxvbmdlciB1c2VkICovCi0JCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVF
X0tFWSwgc3RjYiwKLQkJCQkJa2V5X2lkLCAwLCBzb19sb2NrZWQpOwotCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FVVEgyLAotCQkJCSIlczogc3RjYiAlcCBrZXkgJXUgbm8gbG9uZ2VyIHVzZWQsICVk
XG4iLAotCQkJCV9fZnVuY19fLCAodm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQp
OwotCQl9Ci0JCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7Ci0JfQotfQotCi1zdGF0aWMgc2N0
cF9zaGFyZWRrZXlfdCAqCi1zY3RwX2NvcHlfc2hhcmVka2V5KGNvbnN0IHNjdHBfc2hhcmVka2V5
X3QgKnNrZXkpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqbmV3X3NrZXk7Ci0KLQlpZiAoc2tleSA9
PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCW5ld19za2V5ID0gc2N0cF9hbGxvY19zaGFyZWRr
ZXkoKTsKLQlpZiAobmV3X3NrZXkgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQlpZiAoc2tl
eS0+a2V5ICE9IE5VTEwpCi0JCW5ld19za2V5LT5rZXkgPSBzY3RwX3NldF9rZXkoc2tleS0+a2V5
LT5rZXksIHNrZXktPmtleS0+a2V5bGVuKTsKLQllbHNlCi0JCW5ld19za2V5LT5rZXkgPSBOVUxM
OwotCW5ld19za2V5LT5rZXlpZCA9IHNrZXktPmtleWlkOwotCXJldHVybiAobmV3X3NrZXkpOwot
fQotCi1pbnQKLXNjdHBfY29weV9za2V5bGlzdChjb25zdCBzdHJ1Y3Qgc2N0cF9rZXloZWFkICpz
cmMsIHN0cnVjdCBzY3RwX2tleWhlYWQgKmRlc3QpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tl
eSwgKm5ld19za2V5OwotCWludCBjb3VudCA9IDA7Ci0KLQlpZiAoKHNyYyA9PSBOVUxMKSB8fCAo
ZGVzdCA9PSBOVUxMKSkKLQkJcmV0dXJuICgwKTsKLQlMSVNUX0ZPUkVBQ0goc2tleSwgc3JjLCBu
ZXh0KSB7Ci0JCW5ld19za2V5ID0gc2N0cF9jb3B5X3NoYXJlZGtleShza2V5KTsKLQkJaWYgKG5l
d19za2V5ICE9IE5VTEwpIHsKLQkJCWlmIChzY3RwX2luc2VydF9zaGFyZWRrZXkoZGVzdCwgbmV3
X3NrZXkpKSB7Ci0JCQkJc2N0cF9mcmVlX3NoYXJlZGtleShuZXdfc2tleSk7Ci0JCQl9IGVsc2Ug
ewotCQkJCWNvdW50Kys7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChjb3VudCk7Ci19Ci0KLQot
c2N0cF9obWFjbGlzdF90ICoKLXNjdHBfYWxsb2NfaG1hY2xpc3QodWludDE2X3QgbnVtX2htYWNz
KQotewotCXNjdHBfaG1hY2xpc3RfdCAqbmV3X2xpc3Q7Ci0JaW50IGFsbG9jX3NpemU7Ci0KLQlh
bGxvY19zaXplID0gc2l6ZW9mKCpuZXdfbGlzdCkgKyBudW1faG1hY3MgKiBzaXplb2YobmV3X2xp
c3QtPmhtYWNbMF0pOwotCVNDVFBfTUFMTE9DKG5ld19saXN0LCBzY3RwX2htYWNsaXN0X3QgKiwg
YWxsb2Nfc2l6ZSwKLQkJICAgIFNDVFBfTV9BVVRIX0hMKTsKLQlpZiAobmV3X2xpc3QgPT0gTlVM
TCkgewotCQkvKiBvdXQgb2YgbWVtb3J5ICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW5ld19s
aXN0LT5tYXhfYWxnbyA9IG51bV9obWFjczsKLQluZXdfbGlzdC0+bnVtX2FsZ28gPSAwOwotCXJl
dHVybiAobmV3X2xpc3QpOwotfQotCi12b2lkCi1zY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFj
bGlzdF90ICpsaXN0KQotewotCWlmIChsaXN0ICE9IE5VTEwpIHsKLQkJU0NUUF9GUkVFKGxpc3Qs
U0NUUF9NX0FVVEhfSEwpOwotCQlsaXN0ID0gTlVMTDsKLQl9Ci19Ci0KLWludAotc2N0cF9hdXRo
X2FkZF9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFjX2lkKQotewot
CWludCBpOwotCWlmIChsaXN0ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCWlmIChsaXN0LT5u
dW1fYWxnbyA9PSBsaXN0LT5tYXhfYWxnbykgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEs
Ci0JCQkiU0NUUDogSE1BQyBpZCBsaXN0IGZ1bGwsIGlnbm9yaW5nIGFkZCAldVxuIiwgaG1hY19p
ZCk7Ci0JCXJldHVybiAoLTEpOwotCX0KLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NI
QTI1NikKLQlpZiAoKGhtYWNfaWQgIT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgJiYKLQkgICAg
KGhtYWNfaWQgIT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMjU2KSkgewotI2Vsc2UKLQlpZiAoaG1h
Y19pZCAhPSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKSB7Ci0jZW5kaWYKLQkJcmV0dXJuICgtMSk7
Ci0JfQotCS8qIE5vdyBpcyBpdCBhbHJlYWR5IGluIHRoZSBsaXN0ICovCi0JZm9yIChpID0gMDsg
aSA8IGxpc3QtPm51bV9hbGdvOyBpKyspIHsKLQkJaWYgKGxpc3QtPmhtYWNbaV0gPT0gaG1hY19p
ZCkgewotCQkJLyogYWxyZWFkeSBpbiBsaXN0ICovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCX0K
LQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsICJTQ1RQOiBhZGQgSE1BQyBpZCAldSB0byBsaXN0
XG4iLCBobWFjX2lkKTsKLQlsaXN0LT5obWFjW2xpc3QtPm51bV9hbGdvKytdID0gaG1hY19pZDsK
LQlyZXR1cm4gKDApOwotfQotCi1zY3RwX2htYWNsaXN0X3QgKgotc2N0cF9jb3B5X2htYWNsaXN0
KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCkKLXsKLQlzY3RwX2htYWNsaXN0X3QgKm5ld19saXN0Owot
CWludCBpOwotCi0JaWYgKGxpc3QgPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQkvKiBnZXQg
YSBuZXcgbGlzdCAqLwotCW5ld19saXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdChsaXN0LT5tYXhf
YWxnbyk7Ci0JaWYgKG5ld19saXN0ID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0JLyogY29w
eSBpdCAqLwotCW5ld19saXN0LT5tYXhfYWxnbyA9IGxpc3QtPm1heF9hbGdvOwotCW5ld19saXN0
LT5udW1fYWxnbyA9IGxpc3QtPm51bV9hbGdvOwotCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1f
YWxnbzsgaSsrKQotCQluZXdfbGlzdC0+aG1hY1tpXSA9IGxpc3QtPmhtYWNbaV07Ci0JcmV0dXJu
IChuZXdfbGlzdCk7Ci19Ci0KLXNjdHBfaG1hY2xpc3RfdCAqCi1zY3RwX2RlZmF1bHRfc3VwcG9y
dGVkX2htYWNsaXN0KHZvaWQpCi17Ci0Jc2N0cF9obWFjbGlzdF90ICpuZXdfbGlzdDsKLQotI2lm
IGRlZmluZWQoU0NUUF9TVVBQT1JUX0hNQUNfU0hBMjU2KQotCW5ld19saXN0ID0gc2N0cF9hbGxv
Y19obWFjbGlzdCgyKTsKLSNlbHNlCi0JbmV3X2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KDEp
OwotI2VuZGlmCi0JaWYgKG5ld19saXN0ID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0jaWYg
ZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCi0JLyogV2UgcHJlZmVyIFNIQTI1Niwg
c28gbGlzdCBpdCBmaXJzdCAqLwotCSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lkKG5ld19saXN0
LCBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTYpOwotI2VuZGlmCi0JKHZvaWQpc2N0cF9hdXRoX2Fk
ZF9obWFjaWQobmV3X2xpc3QsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEpOwotCXJldHVybiAobmV3
X2xpc3QpOwotfQotCi0vKi0KLSAqIEhNQUMgYWxnb3MgYXJlIGxpc3RlZCBpbiBwcmlvcml0eS9w
cmVmZXJlbmNlIG9yZGVyCi0gKiBmaW5kIHRoZSBiZXN0IEhNQUMgaWQgdG8gdXNlIGZvciB0aGUg
cGVlciBiYXNlZCBvbiBsb2NhbCBzdXBwb3J0Ci0gKi8KLXVpbnQxNl90Ci1zY3RwX25lZ290aWF0
ZV9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpwZWVyLCBzY3RwX2htYWNsaXN0X3QgKmxvY2FsKQot
ewotCWludCBpLCBqOwotCi0JaWYgKChsb2NhbCA9PSBOVUxMKSB8fCAocGVlciA9PSBOVUxMKSkK
LQkJcmV0dXJuIChTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEKTsKLQotCWZvciAoaSA9IDA7IGkgPCBw
ZWVyLT5udW1fYWxnbzsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBsb2NhbC0+bnVtX2FsZ287
IGorKykgewotCQkJaWYgKHBlZXItPmhtYWNbaV0gPT0gbG9jYWwtPmhtYWNbal0pIHsKLQkJCQkv
KiBmb3VuZCB0aGUgImJlc3QiIG9uZSAqLwotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwK
LQkJCQkJIlNDVFA6IG5lZ290aWF0ZWQgcGVlciBITUFDIGlkICV1XG4iLAotCQkJCQlwZWVyLT5o
bWFjW2ldKTsKLQkJCQlyZXR1cm4gKHBlZXItPmhtYWNbaV0pOwotCQkJfQotCQl9Ci0JfQotCS8q
IGRpZG4ndCBmaW5kIG9uZSEgKi8KLQlyZXR1cm4gKFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQpOwot
fQotCi0vKi0KLSAqIHNlcmlhbGl6ZSB0aGUgSE1BQyBhbGdvIGxpc3QgYW5kIHJldHVybiBzcGFj
ZSB1c2VkCi0gKiBjYWxsZXIgbXVzdCBndWFyYW50ZWUgcHRyIGhhcyBhcHByb3ByaWF0ZSBzcGFj
ZQotICovCi1pbnQKLXNjdHBfc2VyaWFsaXplX2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlz
dCwgdWludDhfdCAqcHRyKQotewotCWludCBpOwotCXVpbnQxNl90IGhtYWNfaWQ7Ci0KLQlpZiAo
bGlzdCA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCi0JZm9yIChpID0gMDsgaSA8IGxpc3QtPm51
bV9hbGdvOyBpKyspIHsKLQkJaG1hY19pZCA9IGh0b25zKGxpc3QtPmhtYWNbaV0pOwotCQltZW1j
cHkocHRyLCAmaG1hY19pZCwgc2l6ZW9mKGhtYWNfaWQpKTsKLQkJcHRyICs9IHNpemVvZihobWFj
X2lkKTsKLQl9Ci0JcmV0dXJuIChsaXN0LT5udW1fYWxnbyAqIHNpemVvZihobWFjX2lkKSk7Ci19
Ci0KLWludAotc2N0cF92ZXJpZnlfaG1hY19wYXJhbSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2Fs
Z28gKmhtYWNzLCB1aW50MzJfdCBudW1faG1hY3MpCi17Ci0JdWludDMyX3QgaTsKLQotCWZvciAo
aSA9IDA7IGkgPCBudW1faG1hY3M7IGkrKykgewotCQlpZiAobnRvaHMoaG1hY3MtPmhtYWNfaWRz
W2ldKSA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExKSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0J
fQotCXJldHVybiAoLTEpOwotfQotCi1zY3RwX2F1dGhpbmZvX3QgKgotc2N0cF9hbGxvY19hdXRo
aW5mbyh2b2lkKQotewotCXNjdHBfYXV0aGluZm9fdCAqbmV3X2F1dGhpbmZvOwotCi0JU0NUUF9N
QUxMT0MobmV3X2F1dGhpbmZvLCBzY3RwX2F1dGhpbmZvX3QgKiwgc2l6ZW9mKCpuZXdfYXV0aGlu
Zm8pLAotCQkgICAgU0NUUF9NX0FVVEhfSUYpOwotCi0JaWYgKG5ld19hdXRoaW5mbyA9PSBOVUxM
KSB7Ci0JCS8qIG91dCBvZiBtZW1vcnkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JbWVtc2V0
KG5ld19hdXRoaW5mbywgMCwgc2l6ZW9mKCpuZXdfYXV0aGluZm8pKTsKLQlyZXR1cm4gKG5ld19h
dXRoaW5mbyk7Ci19Ci0KLXZvaWQKLXNjdHBfZnJlZV9hdXRoaW5mbyhzY3RwX2F1dGhpbmZvX3Qg
KmF1dGhpbmZvKQotewotCWlmIChhdXRoaW5mbyA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlpZiAo
YXV0aGluZm8tPnJhbmRvbSAhPSBOVUxMKQotCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yYW5k
b20pOwotCWlmIChhdXRoaW5mby0+cGVlcl9yYW5kb20gIT0gTlVMTCkKLQkJc2N0cF9mcmVlX2tl
eShhdXRoaW5mby0+cGVlcl9yYW5kb20pOwotCWlmIChhdXRoaW5mby0+YXNzb2Nfa2V5ICE9IE5V
TEwpCi0JCXNjdHBfZnJlZV9rZXkoYXV0aGluZm8tPmFzc29jX2tleSk7Ci0JaWYgKGF1dGhpbmZv
LT5yZWN2X2tleSAhPSBOVUxMKQotCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yZWN2X2tleSk7
Ci0KLQkvKiBXZSBhcmUgTk9UIGR5bmFtaWNhbGx5IGFsbG9jYXRpbmcgYXV0aGluZm8ncyByaWdo
dCBub3cuLi4gKi8KLQkvKiBTQ1RQX0ZSRUUoYXV0aGluZm8sIFNDVFBfTV9BVVRIXz8/KTsgKi8K
LX0KLQotCi11aW50MzJfdAotc2N0cF9nZXRfYXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19h
bGdvKQotewotCWludCBzaXplOwotCi0Jc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2No
dW5rKSArIHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOwotCXJldHVybiAoU0NU
UF9TSVpFMzIoc2l6ZSkpOwotfQotCi11aW50MzJfdAotc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVu
KHVpbnQxNl90IGhtYWNfYWxnbykKLXsKLQlzd2l0Y2ggKGhtYWNfYWxnbykgewotCWNhc2UgU0NU
UF9BVVRIX0hNQUNfSURfU0hBMToKLQkJcmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEx
KTsKLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQljYXNlIFNDVFBfQVVU
SF9ITUFDX0lEX1NIQTI1NjoKLQkJcmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYp
OwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3Qg
ZG8gYW55dGhpbmcgKi8KLQkJcmV0dXJuICgwKTsKLQl9IC8qIGVuZCBzd2l0Y2ggKi8KLX0KLQot
c3RhdGljIGlubGluZSBpbnQKLXNjdHBfZ2V0X2htYWNfYmxvY2tfbGVuKHVpbnQxNl90IGhtYWNf
YWxnbykKLXsKLQlzd2l0Y2ggKGhtYWNfYWxnbykgewotCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURf
U0hBMToKLQkJcmV0dXJuICg2NCk7Ci0jaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEy
NTYpCi0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTY6Ci0JCXJldHVybiAoNjQpOwotI2Vu
ZGlmCi0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgotCWRlZmF1bHQ6Ci0JCS8qIHVua25v
d24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRoaW5nICovCi0JCXJldHVybiAoMCk7Ci0J
fSAvKiBlbmQgc3dpdGNoICovCi19Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0vKiBf
X1VzZXJzcGFjZV9fIFNIQTFfSW5pdCBpcyBkZWZpbmVkIGluIGxpYmNyeXB0by5hIChsaWJzc2wt
ZGV2IG9uIFVidW50dSkgKi8KLSNlbmRpZgotc3RhdGljIHZvaWQKLXNjdHBfaG1hY19pbml0KHVp
bnQxNl90IGhtYWNfYWxnbywgc2N0cF9oYXNoX2NvbnRleHRfdCAqY3R4KQotewotCXN3aXRjaCAo
aG1hY19hbGdvKSB7Ci0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgotCQlTQ1RQX1NIQTFf
SU5JVCgmY3R4LT5zaGExKTsKLQkJYnJlYWs7Ci0jaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1B
Q19TSEEyNTYpCi0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEEyNTY6Ci0JCVNDVFBfU0hBMjU2
X0lOSVQoJmN0eC0+c2hhMjU2KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIFNDVFBfQVVUSF9I
TUFDX0lEX1JTVkQ6Ci0JZGVmYXVsdDoKLQkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2Fu
J3QgZG8gYW55dGhpbmcgKi8KLQkJcmV0dXJuOwotCX0gLyogZW5kIHN3aXRjaCAqLwotfQotCi1z
dGF0aWMgdm9pZAotc2N0cF9obWFjX3VwZGF0ZSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFz
aF9jb250ZXh0X3QgKmN0eCwKLSAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuKQot
ewotCXN3aXRjaCAoaG1hY19hbGdvKSB7Ci0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgot
CQlTQ1RQX1NIQTFfVVBEQVRFKCZjdHgtPnNoYTEsIHRleHQsIHRleHRsZW4pOwotCQlicmVhazsK
LSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQljYXNlIFNDVFBfQVVUSF9I
TUFDX0lEX1NIQTI1NjoKLQkJU0NUUF9TSEEyNTZfVVBEQVRFKCZjdHgtPnNoYTI1NiwgdGV4dCwg
dGV4dGxlbik7Ci0JCWJyZWFrOwotI2VuZGlmCi0JY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZE
OgotCWRlZmF1bHQ6Ci0JCS8qIHVua25vd24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRo
aW5nICovCi0JCXJldHVybjsKLQl9IC8qIGVuZCBzd2l0Y2ggKi8KLX0KLQotc3RhdGljIHZvaWQK
LXNjdHBfaG1hY19maW5hbCh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3Qg
KmN0eCwKLSAgICB1aW50OF90ICpkaWdlc3QpCi17Ci0Jc3dpdGNoIChobWFjX2FsZ28pIHsKLQlj
YXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTE6Ci0JCVNDVFBfU0hBMV9GSU5BTChkaWdlc3QsICZj
dHgtPnNoYTEpOwotCQlicmVhazsKLSNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1
NikKLQljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKLQkJU0NUUF9TSEEyNTZfRklOQUwo
ZGlnZXN0LCAmY3R4LT5zaGEyNTYpOwotCQlicmVhazsKLSNlbmRpZgotCWNhc2UgU0NUUF9BVVRI
X0hNQUNfSURfUlNWRDoKLQlkZWZhdWx0OgotCQkvKiB1bmtub3duIEhNQUMgYWxnb3JpdGhtOiBj
YW4ndCBkbyBhbnl0aGluZyAqLwotCQlyZXR1cm47Ci0JfSAvKiBlbmQgc3dpdGNoICovCi19Ci0K
LS8qLQotICogS2V5ZWQtSGFzaGluZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbjogRklQUyAx
OTggKFJGQyAyMTA0KQotICoKLSAqIENvbXB1dGUgdGhlIEhNQUMgZGlnZXN0IHVzaW5nIHRoZSBk
ZXNpcmVkIGhhc2gga2V5LCB0ZXh0LCBhbmQgSE1BQwotICogYWxnb3JpdGhtLiAgUmVzdWx0aW5n
IGRpZ2VzdCBpcyBwbGFjZWQgaW4gJ2RpZ2VzdCcgYW5kIGRpZ2VzdCBsZW5ndGgKLSAqIGlzIHJl
dHVybmVkLCBpZiB0aGUgSE1BQyB3YXMgcGVyZm9ybWVkLgotICoKLSAqIFdBUk5JTkc6IGl0IGlz
IHVwIHRvIHRoZSBjYWxsZXIgdG8gc3VwcGx5IHN1ZmZpY2llbnQgc3BhY2UgdG8gaG9sZCB0aGUK
LSAqIHJlc3VsdGFudCBkaWdlc3QuCi0gKi8KLXVpbnQzMl90Ci1zY3RwX2htYWModWludDE2X3Qg
aG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbiwKLSAgICB1aW50OF90ICp0
ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpCi17Ci0JdWludDMyX3QgZGln
ZXN0bGVuOwotCXVpbnQzMl90IGJsb2NrbGVuOwotCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4Owot
CXVpbnQ4X3QgaXBhZFsxMjhdLCBvcGFkWzEyOF07CS8qIGtleWVkIGhhc2ggaW5uZXIvb3V0ZXIg
cGFkcyAqLwotCXVpbnQ4X3QgdGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCXVpbnQz
Ml90IGk7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KLQlp
ZiAoKGtleSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApIHx8ICh0ZXh0ID09IE5VTEwpIHx8Ci0J
ICAgICh0ZXh0bGVuID09IDApIHx8IChkaWdlc3QgPT0gTlVMTCkpIHsKLQkJLyogY2FuJ3QgZG8g
SE1BQyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0IG9yIGRpZ2VzdCBzdG9yZSAqLwotCQlyZXR1cm4g
KDApOwotCX0KLQkvKiB2YWxpZGF0ZSB0aGUgaG1hYyBhbGdvIGFuZCBnZXQgdGhlIGRpZ2VzdCBs
ZW5ndGggKi8KLQlkaWdlc3RsZW4gPSBzY3RwX2dldF9obWFjX2RpZ2VzdF9sZW4oaG1hY19hbGdv
KTsKLQlpZiAoZGlnZXN0bGVuID09IDApCi0JCXJldHVybiAoMCk7Ci0KLQkvKiBoYXNoIHRoZSBr
ZXkgaWYgaXQgaXMgbG9uZ2VyIHRoYW4gdGhlIGhhc2ggYmxvY2sgc2l6ZSAqLwotCWJsb2NrbGVu
ID0gc2N0cF9nZXRfaG1hY19ibG9ja19sZW4oaG1hY19hbGdvKTsKLQlpZiAoa2V5bGVuID4gYmxv
Y2tsZW4pIHsKLQkJc2N0cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQkJc2N0cF9obWFj
X3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtleSwga2V5bGVuKTsKLQkJc2N0cF9obWFjX2ZpbmFs
KGhtYWNfYWxnbywgJmN0eCwgdGVtcCk7Ci0JCS8qIHNldCB0aGUgaGFzaGVkIGtleSBhcyB0aGUg
a2V5ICovCi0JCWtleWxlbiA9IGRpZ2VzdGxlbjsKLQkJa2V5ID0gdGVtcDsKLQl9Ci0JLyogaW5p
dGlhbGl6ZSB0aGUgaW5uZXIvb3V0ZXIgcGFkcyB3aXRoIHRoZSBrZXkgYW5kICJhcHBlbmQiIHpl
cm9lcyAqLwotCW1lbXNldChpcGFkLCAwLCBibG9ja2xlbik7Ci0JbWVtc2V0KG9wYWQsIDAsIGJs
b2NrbGVuKTsKLQltZW1jcHkoaXBhZCwga2V5LCBrZXlsZW4pOwotCW1lbWNweShvcGFkLCBrZXks
IGtleWxlbik7Ci0KLQkvKiBYT1IgdGhlIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICov
Ci0JZm9yIChpID0gMDsgaSA8IGJsb2NrbGVuOyBpKyspIHsKLQkJaXBhZFtpXSBePSAweDM2Owot
CQlvcGFkW2ldIF49IDB4NWM7Ci0JfQotCi0JLyogcGVyZm9ybSBpbm5lciBoYXNoICovCi0Jc2N0
cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxn
bywgJmN0eCwgaXBhZCwgYmxvY2tsZW4pOwotCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAm
Y3R4LCB0ZXh0LCB0ZXh0bGVuKTsKLQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0
ZW1wKTsKLQotCS8qIHBlcmZvcm0gb3V0ZXIgaGFzaCAqLwotCXNjdHBfaG1hY19pbml0KGhtYWNf
YWxnbywgJmN0eCk7Ci0Jc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIG9wYWQsIGJs
b2NrbGVuKTsKLQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgdGVtcCwgZGlnZXN0
bGVuKTsKLQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCBkaWdlc3QpOwotCi0JcmV0
dXJuIChkaWdlc3RsZW4pOwotfQotCi0vKiBtYnVmIHZlcnNpb24gKi8KLXVpbnQzMl90Ci1zY3Rw
X2htYWNfbSh1aW50MTZfdCBobWFjX2FsZ28sIHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5bGVu
LAotICAgIHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBtX29mZnNldCwgdWludDhfdCAqZGlnZXN0
LCB1aW50MzJfdCB0cmFpbGVyKQotewotCXVpbnQzMl90IGRpZ2VzdGxlbjsKLQl1aW50MzJfdCBi
bG9ja2xlbjsKLQlzY3RwX2hhc2hfY29udGV4dF90IGN0eDsKLQl1aW50OF90IGlwYWRbMTI4XSwg
b3BhZFsxMjhdOwkvKiBrZXllZCBoYXNoIGlubmVyL291dGVyIHBhZHMgKi8KLQl1aW50OF90IHRl
bXBbU0NUUF9BVVRIX0RJR0VTVF9MRU5fTUFYXTsKLQl1aW50MzJfdCBpOwotCXN0cnVjdCBtYnVm
ICptX3RtcDsKLQotCS8qIHNhbml0eSBjaGVjayB0aGUgbWF0ZXJpYWwgYW5kIGxlbmd0aCAqLwot
CWlmICgoa2V5ID09IE5VTEwpIHx8IChrZXlsZW4gPT0gMCkgfHwgKG0gPT0gTlVMTCkgfHwgKGRp
Z2VzdCA9PSBOVUxMKSkgewotCQkvKiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRl
eHQgb3IgZGlnZXN0IHN0b3JlICovCi0JCXJldHVybiAoMCk7Ci0JfQotCS8qIHZhbGlkYXRlIHRo
ZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLwotCWRpZ2VzdGxlbiA9IHNj
dHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOwotCWlmIChkaWdlc3RsZW4gPT0gMCkK
LQkJcmV0dXJuICgwKTsKLQotCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0
aGUgaGFzaCBibG9jayBzaXplICovCi0JYmxvY2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xl
bihobWFjX2FsZ28pOwotCWlmIChrZXlsZW4gPiBibG9ja2xlbikgewotCQlzY3RwX2htYWNfaW5p
dChobWFjX2FsZ28sICZjdHgpOwotCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwg
a2V5LCBrZXlsZW4pOwotCQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsK
LQkJLyogc2V0IHRoZSBoYXNoZWQga2V5IGFzIHRoZSBrZXkgKi8KLQkJa2V5bGVuID0gZGlnZXN0
bGVuOwotCQlrZXkgPSB0ZW1wOwotCX0KLQkvKiBpbml0aWFsaXplIHRoZSBpbm5lci9vdXRlciBw
YWRzIHdpdGggdGhlIGtleSBhbmQgImFwcGVuZCIgemVyb2VzICovCi0JbWVtc2V0KGlwYWQsIDAs
IGJsb2NrbGVuKTsKLQltZW1zZXQob3BhZCwgMCwgYmxvY2tsZW4pOwotCW1lbWNweShpcGFkLCBr
ZXksIGtleWxlbik7Ci0JbWVtY3B5KG9wYWQsIGtleSwga2V5bGVuKTsKLQotCS8qIFhPUiB0aGUg
a2V5IHdpdGggaXBhZCBhbmQgb3BhZCB2YWx1ZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgYmxvY2ts
ZW47IGkrKykgewotCQlpcGFkW2ldIF49IDB4MzY7Ci0JCW9wYWRbaV0gXj0gMHg1YzsKLQl9Ci0K
LQkvKiBwZXJmb3JtIGlubmVyIGhhc2ggKi8KLQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZj
dHgpOwotCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCBpcGFkLCBibG9ja2xlbik7
Ci0JLyogZmluZCB0aGUgY29ycmVjdCBzdGFydGluZyBtYnVmIGFuZCBvZmZzZXQgKGdldCBzdGFy
dCBvZiB0ZXh0KSAqLwotCW1fdG1wID0gbTsKLQl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYmICht
X29mZnNldCA+PSAodWludDMyX3QpIFNDVFBfQlVGX0xFTihtX3RtcCkpKSB7Ci0JCW1fb2Zmc2V0
IC09IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7
Ci0JfQotCS8qIG5vdyB1c2UgdGhlIHJlc3Qgb2YgdGhlIG1idWYgY2hhaW4gZm9yIHRoZSB0ZXh0
ICovCi0Jd2hpbGUgKG1fdG1wICE9IE5VTEwpIHsKLQkJaWYgKChTQ1RQX0JVRl9ORVhUKG1fdG1w
KSA9PSBOVUxMKSAmJiB0cmFpbGVyKSB7Ci0JCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywg
JmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAotCQkJCQkgU0NUUF9CVUZf
TEVOKG1fdG1wKSAtICh0cmFpbGVyK21fb2Zmc2V0KSk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX2ht
YWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zm
c2V0LAotCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtIG1fb2Zmc2V0KTsKLQkJfQotCi0JCS8q
IGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLwot
CQltX29mZnNldCA9IDA7Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotCXNj
dHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIHRlbXApOwotCi0JLyogcGVyZm9ybSBvdXRl
ciBoYXNoICovCi0Jc2N0cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQlzY3RwX2htYWNf
dXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgb3BhZCwgYmxvY2tsZW4pOwotCXNjdHBfaG1hY191cGRh
dGUoaG1hY19hbGdvLCAmY3R4LCB0ZW1wLCBkaWdlc3RsZW4pOwotCXNjdHBfaG1hY19maW5hbCho
bWFjX2FsZ28sICZjdHgsIGRpZ2VzdCk7Ci0KLQlyZXR1cm4gKGRpZ2VzdGxlbik7Ci19Ci0KLS8q
LQotICogdmVyaWZ5IHRoZSBITUFDIGRpZ2VzdCB1c2luZyB0aGUgZGVzaXJlZCBoYXNoIGtleSwg
dGV4dCwgYW5kIEhNQUMKLSAqIGFsZ29yaXRobS4KLSAqIFJldHVybnMgLTEgb24gZXJyb3IsIDAg
b24gc3VjY2Vzcy4KLSAqLwotaW50Ci1zY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxn
bywgdWludDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCi0gICAgdWludDhfdCAqdGV4dCwgdWlu
dDMyX3QgdGV4dGxlbiwKLSAgICB1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikK
LXsKLQl1aW50MzJfdCBsZW47Ci0JdWludDhfdCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01B
WF07Ci0KLQkvKiBzYW5pdHkgY2hlY2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KLQlpZiAo
KGtleSA9PSBOVUxMKSB8fCAoa2V5bGVuID09IDApIHx8Ci0JICAgICh0ZXh0ID09IE5VTEwpIHx8
ICh0ZXh0bGVuID09IDApIHx8IChkaWdlc3QgPT0gTlVMTCkpIHsKLQkJLyogY2FuJ3QgZG8gSE1B
QyB3aXRoIGVtcHR5IGtleSBvciB0ZXh0IG9yIGRpZ2VzdCAqLwotCQlyZXR1cm4gKC0xKTsKLQl9
Ci0JbGVuID0gc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKGhtYWNfYWxnbyk7Ci0JaWYgKChsZW4g
PT0gMCkgfHwgKGRpZ2VzdGxlbiAhPSBsZW4pKQotCQlyZXR1cm4gKC0xKTsKLQotCS8qIGNvbXB1
dGUgdGhlIGV4cGVjdGVkIGhhc2ggKi8KLQlpZiAoc2N0cF9obWFjKGhtYWNfYWxnbywga2V5LCBr
ZXlsZW4sIHRleHQsIHRleHRsZW4sIHRlbXApICE9IGxlbikKLQkJcmV0dXJuICgtMSk7Ci0KLQlp
ZiAobWVtY21wKGRpZ2VzdCwgdGVtcCwgZGlnZXN0bGVuKSAhPSAwKQotCQlyZXR1cm4gKC0xKTsK
LQllbHNlCi0JCXJldHVybiAoMCk7Ci19Ci0KLQotLyoKLSAqIGNvbXB1dGVzIHRoZSByZXF1ZXN0
ZWQgSE1BQyB1c2luZyBhIGtleSBzdHJ1Y3QgKHdoaWNoIG1heSBiZSBtb2RpZmllZCBpZgotICog
dGhlIGtleWxlbiBleGNlZWRzIHRoZSBITUFDIGJsb2NrIGxlbikuCi0gKi8KLXVpbnQzMl90Ci1z
Y3RwX2NvbXB1dGVfaG1hYyh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgdWlu
dDhfdCAqdGV4dCwKLSAgICB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpCi17Ci0J
dWludDMyX3QgZGlnZXN0bGVuOwotCXVpbnQzMl90IGJsb2NrbGVuOwotCXNjdHBfaGFzaF9jb250
ZXh0X3QgY3R4OwotCXVpbnQ4X3QgdGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCi0J
Lyogc2FuaXR5IGNoZWNrICovCi0JaWYgKChrZXkgPT0gTlVMTCkgfHwgKHRleHQgPT0gTlVMTCkg
fHwgKHRleHRsZW4gPT0gMCkgfHwKLQkgICAgKGRpZ2VzdCA9PSBOVUxMKSkgewotCQkvKiBjYW4n
dCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICovCi0JCXJl
dHVybiAoMCk7Ci0JfQotCS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGln
ZXN0IGxlbmd0aCAqLwotCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFj
X2FsZ28pOwotCWlmIChkaWdlc3RsZW4gPT0gMCkKLQkJcmV0dXJuICgwKTsKLQotCS8qIGhhc2gg
dGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICovCi0JYmxv
Y2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOwotCWlmIChrZXktPmtl
eWxlbiA+IGJsb2NrbGVuKSB7Ci0JCXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7Ci0J
CXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCBrZXktPmtleSwga2V5LT5rZXlsZW4p
OwotCQlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKLQkJLyogc2F2ZSB0
aGUgaGFzaGVkIGtleSBhcyB0aGUgbmV3IGtleSAqLwotCQlrZXktPmtleWxlbiA9IGRpZ2VzdGxl
bjsKLQkJbWVtY3B5KGtleS0+a2V5LCB0ZW1wLCBrZXktPmtleWxlbik7Ci0JfQotCXJldHVybiAo
c2N0cF9obWFjKGhtYWNfYWxnbywga2V5LT5rZXksIGtleS0+a2V5bGVuLCB0ZXh0LCB0ZXh0bGVu
LAotCSAgICBkaWdlc3QpKTsKLX0KLQotLyogbWJ1ZiB2ZXJzaW9uICovCi11aW50MzJfdAotc2N0
cF9jb21wdXRlX2htYWNfbSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgc3Ry
dWN0IG1idWYgKm0sCi0gICAgdWludDMyX3QgbV9vZmZzZXQsIHVpbnQ4X3QgKmRpZ2VzdCkKLXsK
LQl1aW50MzJfdCBkaWdlc3RsZW47Ci0JdWludDMyX3QgYmxvY2tsZW47Ci0Jc2N0cF9oYXNoX2Nv
bnRleHRfdCBjdHg7Ci0JdWludDhfdCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07Ci0K
LQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAoKGtleSA9PSBOVUxMKSB8fCAobSA9PSBOVUxMKSB8
fCAoZGlnZXN0ID09IE5VTEwpKSB7Ci0JCS8qIGNhbid0IGRvIEhNQUMgd2l0aCBlbXB0eSBrZXkg
b3IgdGV4dCBvciBkaWdlc3Qgc3RvcmUgKi8KLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyogdmFsaWRh
dGUgdGhlIGhtYWMgYWxnbyBhbmQgZ2V0IHRoZSBkaWdlc3QgbGVuZ3RoICovCi0JZGlnZXN0bGVu
ID0gc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKGhtYWNfYWxnbyk7Ci0JaWYgKGRpZ2VzdGxlbiA9
PSAwKQotCQlyZXR1cm4gKDApOwotCi0JLyogaGFzaCB0aGUga2V5IGlmIGl0IGlzIGxvbmdlciB0
aGFuIHRoZSBoYXNoIGJsb2NrIHNpemUgKi8KLQlibG9ja2xlbiA9IHNjdHBfZ2V0X2htYWNfYmxv
Y2tfbGVuKGhtYWNfYWxnbyk7Ci0JaWYgKGtleS0+a2V5bGVuID4gYmxvY2tsZW4pIHsKLQkJc2N0
cF9obWFjX2luaXQoaG1hY19hbGdvLCAmY3R4KTsKLQkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2Fs
Z28sICZjdHgsIGtleS0+a2V5LCBrZXktPmtleWxlbik7Ci0JCXNjdHBfaG1hY19maW5hbChobWFj
X2FsZ28sICZjdHgsIHRlbXApOwotCQkvKiBzYXZlIHRoZSBoYXNoZWQga2V5IGFzIHRoZSBuZXcg
a2V5ICovCi0JCWtleS0+a2V5bGVuID0gZGlnZXN0bGVuOwotCQltZW1jcHkoa2V5LT5rZXksIHRl
bXAsIGtleS0+a2V5bGVuKTsKLQl9Ci0JcmV0dXJuIChzY3RwX2htYWNfbShobWFjX2FsZ28sIGtl
eS0+a2V5LCBrZXktPmtleWxlbiwgbSwgbV9vZmZzZXQsIGRpZ2VzdCwgMCkpOwotfQotCi1pbnQK
LXNjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQx
Nl90IGlkKQotewotCWludCBpOwotCi0JaWYgKChsaXN0ID09IE5VTEwpIHx8IChpZCA9PSBTQ1RQ
X0FVVEhfSE1BQ19JRF9SU1ZEKSkKLQkJcmV0dXJuICgwKTsKLQotCWZvciAoaSA9IDA7IGkgPCBs
aXN0LT5udW1fYWxnbzsgaSsrKQotCQlpZiAobGlzdC0+aG1hY1tpXSA9PSBpZCkKLQkJCXJldHVy
biAoMSk7Ci0KLQkvKiBub3QgaW4gdGhlIGxpc3QgKi8KLQlyZXR1cm4gKDApOwotfQotCi0KLS8q
LQotICogY2xlYXIgYW55IGNhY2hlZCBrZXkocykgaWYgdGhleSBtYXRjaCB0aGUgZ2l2ZW4ga2V5
IGlkIG9uIGFuIGFzc29jaWF0aW9uLgotICogdGhlIGNhY2hlZCBrZXkocykgd2lsbCBiZSByZWNv
bXB1dGVkIGFuZCByZS1jYWNoZWQgYXQgbmV4dCB1c2UuCi0gKiBBU1NVTUVTIFRDQl9MT0NLIGlz
IGFscmVhZHkgaGVsZAotICovCi12b2lkCi1zY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlpZiAoc3RjYiA9PSBOVUxMKQotCQly
ZXR1cm47Ci0KLQlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCkg
ewotCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5KTsKLQkJc3Rj
Yi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkgPSBOVUxMOwotCX0KLQlpZiAoa2V5aWQgPT0gc3Rj
Yi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkKSB7Ci0JCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNv
Yy5hdXRoaW5mby5yZWN2X2tleSk7Ci0JCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPSBO
VUxMOwotCX0KLX0KLQotLyotCi0gKiBjbGVhciBhbnkgY2FjaGVkIGtleShzKSBpZiB0aGV5IG1h
dGNoIHRoZSBnaXZlbiBrZXkgaWQgZm9yIGFsbCBhc3NvY3Mgb24KLSAqIGFuIGVuZHBvaW50Lgot
ICogQVNTVU1FUyBJTlBfV0xPQ0sgaXMgYWxyZWFkeSBoZWxkCi0gKi8KLXZvaWQKLXNjdHBfY2xl
YXJfY2FjaGVka2V5c19lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCkK
LXsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0KLQlpZiAoaW5wID09IE5VTEwpCi0JCXJldHVy
bjsKLQotCS8qIGNsZWFyIHRoZSBjYWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIG9uIHRoaXMgaW5z
dGFuY2UgKi8KLQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBf
dGNibGlzdCkgewotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlzY3RwX2NsZWFyX2NhY2hlZGtl
eXMoc3RjYiwga2V5aWQpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JfQotfQotCi0vKi0K
LSAqIGRlbGV0ZSBhIHNoYXJlZCBrZXkgZnJvbSBhbiBhc3NvY2lhdGlvbgotICogQVNTVU1FUyBU
Q0JfTE9DSyBpcyBhbHJlYWR5IGhlbGQKLSAqLwotaW50Ci1zY3RwX2RlbGV0ZV9zaGFyZWRrZXko
c3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtl
eV90ICpza2V5OwotCi0JaWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBp
cyB0aGUga2V5aWQgdGhlIGFzc29jIGFjdGl2ZSBzZW5kaW5nIGtleSAqLwotCWlmIChrZXlpZCA9
PSBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkv
KiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCi0Jc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJnN0
Y2ItPmFzb2Muc2hhcmVkX2tleXMsIGtleWlkKTsKLQlpZiAoc2tleSA9PSBOVUxMKQotCQlyZXR1
cm4gKC0xKTsKLQotCS8qIGFyZSB0aGVyZSBvdGhlciByZWZjb3VudCBob2xkZXJzIG9uIHRoZSBr
ZXk/ICovCi0JaWYgKHNrZXktPnJlZmNvdW50ID4gMSkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBy
ZW1vdmUgaXQgKi8KLQlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsKLQlzY3RwX2ZyZWVfc2hhcmVk
a2V5KHNrZXkpOwkvKiBmcmVlcyBza2V5LT5rZXkgYXMgd2VsbCAqLwotCi0JLyogY2xlYXIgYW55
IGNhY2hlZCBrZXlzICovCi0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIGtleWlkKTsKLQly
ZXR1cm4gKDApOwotfQotCi0vKi0KLSAqIGRlbGV0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVu
ZHBvaW50Ci0gKiBBU1NVTUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKLSAqLwotaW50Ci1z
Y3RwX2RlbGV0ZV9zaGFyZWRrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qg
a2V5aWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCWlmIChpbnAgPT0gTlVMTCkK
LQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBpcyB0aGUga2V5aWQgdGhlIGFjdGl2ZSBzZW5kaW5nIGtl
eSBvbiB0aGUgZW5kcG9pbnQgKi8KLQlpZiAoa2V5aWQgPT0gaW5wLT5zY3RwX2VwLmRlZmF1bHRf
a2V5aWQpCi0JCXJldHVybiAoLTEpOwotCi0JLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLwotCXNr
ZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlk
KTsKLQlpZiAoc2tleSA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQotCS8qIGVuZHBvaW50IGtl
eXMgYXJlIG5vdCByZWZjb3VudGVkICovCi0KLQkvKiByZW1vdmUgaXQgKi8KLQlMSVNUX1JFTU9W
RShza2V5LCBuZXh0KTsKLQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBmcmVlcyBza2V5
LT5rZXkgYXMgd2VsbCAqLwotCi0JLyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICovCi0Jc2N0cF9j
bGVhcl9jYWNoZWRrZXlzX2VwKGlucCwga2V5aWQpOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qLQot
ICogc2V0IHRoZSBhY3RpdmUga2V5IG9uIGFuIGFzc29jaWF0aW9uCi0gKiBBU1NVTUVTIFRDQl9M
T0NLIGlzIGFscmVhZHkgaGVsZAotICovCi1pbnQKLXNjdHBfYXV0aF9zZXRhY3RpdmVrZXkoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtleV90
ICpza2V5ID0gTlVMTDsKLQotCS8qIGZpbmQgdGhlIGtleSBvbiB0aGUgYXNzb2MgKi8KLQlza2V5
ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5aWQpOwot
CWlmIChza2V5ID09IE5VTEwpIHsKLQkJLyogdGhhdCBrZXkgZG9lc24ndCBleGlzdCAqLwotCQly
ZXR1cm4gKC0xKTsKLQl9Ci0JaWYgKChza2V5LT5kZWFjdGl2YXRlZCkgJiYgKHNrZXktPnJlZmNv
dW50ID4gMSkpIHsKLQkJLyogY2FuJ3QgcmVhY3RpdmF0ZSBhIGRlYWN0aXZhdGVkIGtleSB3aXRo
IG90aGVyIHJlZmNvdW50cyAqLwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQkvKiBzZXQgdGhlIChu
ZXcpIGFjdGl2ZSBrZXkgKi8KLQlzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCA9IGtl
eWlkOwotCS8qIHJlc2V0IHRoZSBkZWFjdGl2YXRlZCBmbGFnICovCi0Jc2tleS0+ZGVhY3RpdmF0
ZWQgPSAwOwotCi0JcmV0dXJuICgwKTsKLX0KLQotLyotCi0gKiBzZXQgdGhlIGFjdGl2ZSBrZXkg
b24gYW4gZW5kcG9pbnQKLSAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAotICov
Ci1pbnQKLXNjdHBfYXV0aF9zZXRhY3RpdmVrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
dWludDE2X3Qga2V5aWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKLQotCS8qIGZpbmQg
dGhlIGtleSAqLwotCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZpbnAtPnNjdHBfZXAuc2hh
cmVkX2tleXMsIGtleWlkKTsKLQlpZiAoc2tleSA9PSBOVUxMKSB7Ci0JCS8qIHRoYXQga2V5IGRv
ZXNuJ3QgZXhpc3QgKi8KLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlucC0+c2N0cF9lcC5kZWZhdWx0
X2tleWlkID0ga2V5aWQ7Ci0JcmV0dXJuICgwKTsKLX0KLQotLyotCi0gKiBkZWFjdGl2YXRlcyBh
IHNoYXJlZCBrZXkgZnJvbSB0aGUgYXNzb2NpYXRpb24KLSAqIEFTU1VNRVMgSU5QX1dMT0NLIGlz
IGFscmVhZHkgaGVsZAotICovCi1pbnQKLXNjdHBfZGVhY3Rfc2hhcmVka2V5KHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpCi17Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsK
LQotCWlmIChzdGNiID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0JLyogaXMgdGhlIGtleWlk
IHRoZSBhc3NvYyBhY3RpdmUgc2VuZGluZyBrZXkgKi8KLQlpZiAoa2V5aWQgPT0gc3RjYi0+YXNv
Yy5hdXRoaW5mby5hY3RpdmVfa2V5aWQpCi0JCXJldHVybiAoLTEpOwotCi0JLyogZG9lcyB0aGUg
a2V5IGV4aXN0PyAqLwotCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNo
YXJlZF9rZXlzLCBrZXlpZCk7Ci0JaWYgKHNrZXkgPT0gTlVMTCkKLQkJcmV0dXJuICgtMSk7Ci0K
LQkvKiBhcmUgdGhlcmUgb3RoZXIgcmVmY291bnQgaG9sZGVycyBvbiB0aGUga2V5PyAqLwotCWlm
IChza2V5LT5yZWZjb3VudCA9PSAxKSB7Ci0JCS8qIG5vIG90aGVyIHVzZXJzLCBzZW5kIGEgbm90
aWZpY2F0aW9uIGZvciB0aGlzIGtleSAqLwotCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
QVVUSF9GUkVFX0tFWSwgc3RjYiwga2V5aWQsIDAsCi0JCQkJU0NUUF9TT19MT0NLRUQpOwotCX0K
LQotCS8qIG1hcmsgdGhlIGtleSBhcyBkZWFjdGl2YXRlZCAqLwotCXNrZXktPmRlYWN0aXZhdGVk
ID0gMTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qLQotICogZGVhY3RpdmF0ZXMgYSBzaGFyZWQg
a2V5IGZyb20gdGhlIGVuZHBvaW50Ci0gKiBBU1NVTUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhl
bGQKLSAqLwotaW50Ci1zY3RwX2RlYWN0X3NoYXJlZGtleV9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCB1aW50MTZfdCBrZXlpZCkKLXsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5OwotCi0JaWYg
KGlucCA9PSBOVUxMKQotCQlyZXR1cm4gKC0xKTsKLQotCS8qIGlzIHRoZSBrZXlpZCB0aGUgYWN0
aXZlIHNlbmRpbmcga2V5IG9uIHRoZSBlbmRwb2ludCAqLwotCWlmIChrZXlpZCA9PSBpbnAtPnNj
dHBfZXAuZGVmYXVsdF9rZXlpZCkKLQkJcmV0dXJuICgtMSk7Ci0KLQkvKiBkb2VzIHRoZSBrZXkg
ZXhpc3Q/ICovCi0Jc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJmlucC0+c2N0cF9lcC5zaGFy
ZWRfa2V5cywga2V5aWQpOwotCWlmIChza2V5ID09IE5VTEwpCi0JCXJldHVybiAoLTEpOwotCi0J
LyogZW5kcG9pbnQga2V5cyBhcmUgbm90IHJlZmNvdW50ZWQgKi8KLQotCS8qIHJlbW92ZSBpdCAq
LwotCUxJU1RfUkVNT1ZFKHNrZXksIG5leHQpOwotCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7
CS8qIGZyZWVzIHNrZXktPmtleSBhcyB3ZWxsICovCi0KLQlyZXR1cm4gKDApOwotfQotCi0vKgot
ICogZ2V0IGxvY2FsIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgZnJvbSBjb29raWUgKGZyb20g
SU5JVC1BQ0spCi0gKi8KLXZvaWQKLXNjdHBfYXV0aF9nZXRfY29va2llX3BhcmFtcyhzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLAotICAgIHVpbnQzMl90IG9mZnNldCwgdWlu
dDMyX3QgbGVuZ3RoKQotewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCB0bXBfcGFyYW07
Ci0JdWludDE2X3QgcGxlbiwgcHR5cGU7Ci0JdWludDhfdCByYW5kb21fc3RvcmVbU0NUUF9QQVJB
TV9CVUZGRVJfU0laRV07Ci0Jc3RydWN0IHNjdHBfYXV0aF9yYW5kb20gKnBfcmFuZG9tID0gTlVM
TDsKLQl1aW50MTZfdCByYW5kb21fbGVuID0gMDsKLQl1aW50OF90IGhtYWNzX3N0b3JlW1NDVFBf
UEFSQU1fQlVGRkVSX1NJWkVdOwotCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjcyA9
IE5VTEw7Ci0JdWludDE2X3QgaG1hY3NfbGVuID0gMDsKLQl1aW50OF90IGNodW5rc19zdG9yZVtT
Q1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNo
dW5rcyA9IE5VTEw7Ci0JdWludDE2X3QgbnVtX2NodW5rcyA9IDA7Ci0Jc2N0cF9rZXlfdCAqbmV3
X2tleTsKLQl1aW50MzJfdCBrZXlsZW47Ci0KLQkvKiBjb252ZXJ0IHRvIHVwcGVyIGJvdW5kICov
Ci0JbGVuZ3RoICs9IG9mZnNldDsKLQotCXBoZHIgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRy
KSwgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKLQl3aGlsZSAocGhkciAhPSBOVUxMKSB7Ci0JCXB0
eXBlID0gbnRvaHMocGhkci0+cGFyYW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJh
bV9sZW5ndGgpOwotCi0JCWlmICgocGxlbiA9PSAwKSB8fCAob2Zmc2V0ICsgcGxlbiA+IGxlbmd0
aCkpCi0JCQlicmVhazsKLQotCQlpZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKLQkJCWlmIChw
bGVuID4gc2l6ZW9mKHJhbmRvbV9zdG9yZSkpCi0JCQkJYnJlYWs7Ci0JCQlwaGRyID0gc2N0cF9n
ZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCi0JCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
cmFuZG9tX3N0b3JlLCBwbGVuKTsKLQkJCWlmIChwaGRyID09IE5VTEwpCi0JCQkJcmV0dXJuOwot
CQkJLyogc2F2ZSB0aGUgcmFuZG9tIGFuZCBsZW5ndGggZm9yIHRoZSBrZXkgKi8KLQkJCXBfcmFu
ZG9tID0gKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICopcGhkcjsKLQkJCXJhbmRvbV9sZW4gPSBw
bGVuIC0gc2l6ZW9mKCpwX3JhbmRvbSk7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFD
X0xJU1QpIHsKLQkJCXVpbnQxNl90IG51bV9obWFjczsKLQkJCXVpbnQxNl90IGk7Ci0KLQkJCWlm
IChwbGVuID4gc2l6ZW9mKGhtYWNzX3N0b3JlKSkKLQkJCQlicmVhazsKLQkJCXBoZHIgPSBzY3Rw
X2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KilobWFjc19zdG9yZSwgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKQotCQkJCXJldHVybjsK
LQkJCS8qIHNhdmUgdGhlIGhtYWNzIGxpc3QgYW5kIG51bSBmb3IgdGhlIGtleSAqLwotCQkJaG1h
Y3MgPSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKilwaGRyOwotCQkJaG1hY3NfbGVuID0g
cGxlbiAtIHNpemVvZigqaG1hY3MpOwotCQkJbnVtX2htYWNzID0gaG1hY3NfbGVuIC8gc2l6ZW9m
KGhtYWNzLT5obWFjX2lkc1swXSk7Ci0JCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBO
VUxMKQotCQkJCXNjdHBfZnJlZV9obWFjbGlzdChzdGNiLT5hc29jLmxvY2FsX2htYWNzKTsKLQkJ
CXN0Y2ItPmFzb2MubG9jYWxfaG1hY3MgPSBzY3RwX2FsbG9jX2htYWNsaXN0KG51bV9obWFjcyk7
Ci0JCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKSB7Ci0JCQkJZm9yIChpID0g
MDsgaSA8IG51bV9obWFjczsgaSsrKSB7Ci0JCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lk
KHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MsCi0JCQkJCSAgICBudG9ocyhobWFjcy0+aG1hY19pZHNb
aV0pKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9DSFVOS19MSVNU
KSB7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkKLQkJ
CQlicmVhazsKLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAg
ICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiljaHVua3Nfc3RvcmUsIHBsZW4pOwotCQkJaWYgKHBo
ZHIgPT0gTlVMTCkKLQkJCQlyZXR1cm47Ci0JCQljaHVua3MgPSAoc3RydWN0IHNjdHBfYXV0aF9j
aHVua19saXN0ICopcGhkcjsKLQkJCW51bV9jaHVua3MgPSBwbGVuIC0gc2l6ZW9mKCpjaHVua3Mp
OwotCQkJLyogc2F2ZSBjaHVua3MgbGlzdCBhbmQgbnVtIGZvciB0aGUga2V5ICovCi0JCQlpZiAo
c3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxMKQotCQkJCXNjdHBfY2xlYXJfY2h1
bmtsaXN0KHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MpOwotCQkJZWxzZQotCQkJCXN0Y2It
PmFzb2MubG9jYWxfYXV0aF9jaHVua3MgPSBzY3RwX2FsbG9jX2NodW5rbGlzdCgpOwotCQkJZm9y
IChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgewotCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRf
Y2h1bmsoY2h1bmtzLT5jaHVua190eXBlc1tpXSwKLQkJCQkgICAgc3RjYi0+YXNvYy5sb2NhbF9h
dXRoX2NodW5rcyk7Ci0JCQl9Ci0JCX0KLQkJLyogZ2V0IG5leHQgcGFyYW1ldGVyICovCi0JCW9m
ZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJaWYgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9wYXJhbWhkcikgPiBsZW5ndGgpCi0JCQlicmVhazsKLQkJcGhkciA9IChzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBf
cGFyYW1oZHIpLAotCQkgICAgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKLQl9Ci0JLyogY29uY2F0
ZW5hdGUgdGhlIGZ1bGwgcmFuZG9tIGtleSAqLwotCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20p
ICsgcmFuZG9tX2xlbiArIHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuOwotCWlmIChjaHVua3Mg
IT0gTlVMTCkgewotCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKLQl9
Ci0JbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JaWYgKG5ld19rZXkgIT0gTlVM
TCkgewotCSAgICAvKiBjb3B5IGluIHRoZSBSQU5ET00gKi8KLQkgICAgaWYgKHBfcmFuZG9tICE9
IE5VTEwpIHsKLQkJa2V5bGVuID0gc2l6ZW9mKCpwX3JhbmRvbSkgKyByYW5kb21fbGVuOwotCQlt
ZW1jcHkobmV3X2tleS0+a2V5LCBwX3JhbmRvbSwga2V5bGVuKTsKLQkgICAgfQotCSAgICAvKiBh
cHBlbmQgaW4gdGhlIEFVVEggY2h1bmtzICovCi0JICAgIGlmIChjaHVua3MgIT0gTlVMTCkgewot
CQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBjaHVua3MsCi0JCSAgICAgICBzaXplb2Yo
KmNodW5rcykgKyBudW1fY2h1bmtzKTsKLQkJa2V5bGVuICs9IHNpemVvZigqY2h1bmtzKSArIG51
bV9jaHVua3M7Ci0JICAgIH0KLQkgICAgLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLwotCSAgICBp
ZiAoaG1hY3MgIT0gTlVMTCkgewotCQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBobWFj
cywKLQkJICAgICAgIHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuKTsKLQkgICAgfQotCX0KLQlp
ZiAoc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20gIT0gTlVMTCkKLQkJc2N0cF9mcmVlX2tleShz
dGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSk7Ci0Jc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20g
PSBuZXdfa2V5OwotCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tX2xlbiA9IHJhbmRvbV9sZW47
Ci0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nf
a2V5aWQpOwotCXNjdHBfY2xlYXJfY2FjaGVka2V5cyhzdGNiLCBzdGNiLT5hc29jLmF1dGhpbmZv
LnJlY3Zfa2V5aWQpOwotCi0JLyogbmVnb3RpYXRlIHdoYXQgSE1BQyB0byB1c2UgZm9yIHRoZSBw
ZWVyICovCi0Jc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQgPSBzY3RwX25lZ290aWF0ZV9obWFjaWQo
c3RjYi0+YXNvYy5wZWVyX2htYWNzLAotCSAgICBzdGNiLT5hc29jLmxvY2FsX2htYWNzKTsKLQot
CS8qIGNvcHkgZGVmYXVsdHMgZnJvbSB0aGUgZW5kcG9pbnQgKi8KLQkvKiBGSVggTUU6IHB1dCBp
biBjb29raWU/ICovCi0Jc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQgPSBzdGNiLT5z
Y3RwX2VwLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQ7Ci0JLyogY29weSBvdXQgdGhlIHNoYXJlZCBr
ZXkgbGlzdCAoYnkgcmVmZXJlbmNlKSBmcm9tIHRoZSBlbmRwb2ludCAqLwotCSh2b2lkKXNjdHBf
Y29weV9za2V5bGlzdCgmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zaGFyZWRfa2V5cywKLQkJCQkg
JnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMpOwotfQotCi0vKgotICogY29tcHV0ZSBhbmQgZmlsbCBp
biB0aGUgSE1BQyBkaWdlc3QgZm9yIGEgcGFja2V0Ci0gKi8KLXZvaWQKLXNjdHBfZmlsbF9obWFj
X2RpZ2VzdF9tKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBhdXRoX29mZnNldCwKLSAgICBzdHJ1
Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90
IGtleWlkKQotewotCXVpbnQzMl90IGRpZ2VzdGxlbjsKLQlzY3RwX3NoYXJlZGtleV90ICpza2V5
OwotCXNjdHBfa2V5X3QgKmtleTsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoYXV0aCA9PSBO
VUxMKSkKLQkJcmV0dXJuOwotCi0JLyogemVybyB0aGUgZGlnZXN0ICsgY2h1bmsgcGFkZGluZyAq
LwotCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7Ci0JbWVtc2V0KGF1dGgtPmhtYWMsIDAsIFNDVFBfU0laRTMyKGRpZ2VzdGxlbikp
OwotCi0JLyogaXMgdGhlIGRlc2lyZWQga2V5IGNhY2hlZD8gKi8KLQlpZiAoKGtleWlkICE9IHN0
Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5aWQpIHx8Ci0JICAgIChzdGNiLT5hc29jLmF1dGhp
bmZvLmFzc29jX2tleSA9PSBOVUxMKSkgewotCQlpZiAoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3Nv
Y19rZXkgIT0gTlVMTCkgewotCQkJLyogZnJlZSB0aGUgb2xkIGNhY2hlZCBrZXkgKi8KLQkJCXNj
dHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXkpOwotCQl9Ci0JCXNrZXkg
PSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlpZCk7Ci0J
CS8qIHRoZSBvbmx5IHdheSBza2V5IGlzIE5VTEwgaXMgaWYgbnVsbCBrZXkgaWQgMCBpcyB1c2Vk
ICovCi0JCWlmIChza2V5ICE9IE5VTEwpCi0JCQlrZXkgPSBza2V5LT5rZXk7Ci0JCWVsc2UKLQkJ
CWtleSA9IE5VTEw7Ci0JCS8qIGNvbXB1dGUgYSBuZXcgYXNzb2Mga2V5IGFuZCBjYWNoZSBpdCAq
LwotCQlzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleSA9Ci0JCSAgICBzY3RwX2NvbXB1dGVf
aGFzaGtleShzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSwKLQkJCQkJIHN0Y2ItPmFzb2MuYXV0
aGluZm8ucGVlcl9yYW5kb20sIGtleSk7Ci0JCXN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5
aWQgPSBrZXlpZDsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLCAiY2FjaGluZyBrZXkgaWQg
JXVcbiIsCi0JCQlzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleWlkKTsKLSNpZmRlZiBTQ1RQ
X0RFQlVHCi0JCWlmIChTQ1RQX0FVVEhfREVCVUcpCi0JCQlzY3RwX3ByaW50X2tleShzdGNiLT5h
c29jLmF1dGhpbmZvLmFzc29jX2tleSwKLQkJCQkgICAgICAgIkFzc29jIEtleSIpOwotI2VuZGlm
Ci0JfQotCi0JLyogc2V0IGluIHRoZSBhY3RpdmUga2V5IGlkICovCi0JYXV0aC0+c2hhcmVkX2tl
eV9pZCA9IGh0b25zKGtleWlkKTsKLQotCS8qIGNvbXB1dGUgYW5kIGZpbGwgaW4gdGhlIGRpZ2Vz
dCAqLwotCSh2b2lkKXNjdHBfY29tcHV0ZV9obWFjX20oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQs
IHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5LAotCQkJCSAgbSwgYXV0aF9vZmZzZXQsIGF1
dGgtPmhtYWMpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX3plcm9fbShzdHJ1Y3QgbWJ1ZiAq
bSwgdWludDMyX3QgbV9vZmZzZXQsIHVpbnQzMl90IHNpemUpCi17Ci0Jc3RydWN0IG1idWYgKm1f
dG1wOwotCXVpbnQ4X3QgKmRhdGE7Ci0KLQkvKiBzYW5pdHkgY2hlY2sgKi8KLQlpZiAobSA9PSBO
VUxMKQotCQlyZXR1cm47Ci0KLQkvKiBmaW5kIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIG1idWYgYW5k
IG9mZnNldCAoZ2V0IHN0YXJ0IHBvc2l0aW9uKSAqLwotCW1fdG1wID0gbTsKLQl3aGlsZSAoKG1f
dG1wICE9IE5VTEwpICYmIChtX29mZnNldCA+PSAodWludDMyX3QpIFNDVFBfQlVGX0xFTihtX3Rt
cCkpKSB7Ci0JCW1fb2Zmc2V0IC09IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCW1fdG1wID0gU0NU
UF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotCS8qIG5vdyB1c2UgdGhlIHJlc3Qgb2YgdGhlIG1idWYg
Y2hhaW4gKi8KLQl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYmIChzaXplID4gMCkpIHsKLQkJZGF0
YSA9IG10b2QobV90bXAsIHVpbnQ4X3QgKikgKyBtX29mZnNldDsKLQkJaWYgKHNpemUgPiAodWlu
dDMyX3QpIFNDVFBfQlVGX0xFTihtX3RtcCkpIHsKLQkJCW1lbXNldChkYXRhLCAwLCBTQ1RQX0JV
Rl9MRU4obV90bXApKTsKLQkJCXNpemUgLT0gU0NUUF9CVUZfTEVOKG1fdG1wKTsKLQkJfSBlbHNl
IHsKLQkJCW1lbXNldChkYXRhLCAwLCBzaXplKTsKLQkJCXNpemUgPSAwOwotCQl9Ci0JCS8qIGNs
ZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLwotCQlt
X29mZnNldCA9IDA7Ci0JCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JfQotfQotCi0v
Ki0KLSAqIHByb2Nlc3MgdGhlIGluY29taW5nIEF1dGhlbnRpY2F0aW9uIGNodW5rCi0gKiByZXR1
cm4gY29kZXM6Ci0gKiAgIC0xIG9uIGFueSBhdXRoZW50aWNhdGlvbiBlcnJvcgotICogICAgMCBv
biBhdXRoZW50aWNhdGlvbiB2ZXJpZmljYXRpb24KLSAqLwotaW50Ci1zY3RwX2hhbmRsZV9hdXRo
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCwKLSAg
ICBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQotewotCXVpbnQxNl90IGNodW5rbGVu
OwotCXVpbnQxNl90IHNoYXJlZF9rZXlfaWQ7Ci0JdWludDE2X3QgaG1hY19pZDsKLQlzY3RwX3No
YXJlZGtleV90ICpza2V5OwotCXVpbnQzMl90IGRpZ2VzdGxlbjsKLQl1aW50OF90IGRpZ2VzdFtT
Q1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCXVpbnQ4X3QgY29tcHV0ZWRfZGlnZXN0W1NDVFBf
QVVUSF9ESUdFU1RfTEVOX01BWF07Ci0KLQkvKiBhdXRoIGlzIGNoZWNrZWQgZm9yIE5VTEwgYnkg
Y2FsbGVyICovCi0JY2h1bmtsZW4gPSBudG9ocyhhdXRoLT5jaC5jaHVua19sZW5ndGgpOwotCWlm
IChjaHVua2xlbiA8IHNpemVvZigqYXV0aCkpIHsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVj
dmF1dGhmYWlsZWQpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdmF1dGgpOwotCi0JLyogZ2V0IHRoZSBhdXRoIHBhcmFtcyAqLwotCXNoYXJlZF9rZXlfaWQg
PSBudG9ocyhhdXRoLT5zaGFyZWRfa2V5X2lkKTsKLQlobWFjX2lkID0gbnRvaHMoYXV0aC0+aG1h
Y19pZCk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkiU0NUUCBBVVRIIENodW5rOiBz
aGFyZWQga2V5ICV1LCBITUFDIGlkICV1XG4iLAotCQlzaGFyZWRfa2V5X2lkLCBobWFjX2lkKTsK
LQotCS8qIGlzIHRoZSBpbmRpY2F0ZWQgSE1BQyBzdXBwb3J0ZWQ/ICovCi0JaWYgKCFzY3RwX2F1
dGhfaXNfc3VwcG9ydGVkX2htYWMoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywgaG1hY19pZCkpIHsK
LQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJc3RydWN0IHNjdHBfZXJyb3JfYXV0aF9pbnZhbGlk
X2htYWMgKmNhdXNlOwotCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZpdmFsaG1hY2lkKTsK
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFAgQXV0aDogdW5zdXBwb3J0ZWQg
SE1BQyBpZCAldVxuIiwKLQkJCWhtYWNfaWQpOwotCQkvKgotCQkgKiByZXBvcnQgdGhpcyBpbiBh
biBFcnJvciBDaHVuazogVW5zdXBwb3J0ZWQgSE1BQwotCQkgKiBJZGVudGlmaWVyCi0JCSAqLwot
CQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9y
X2F1dGhfaW52YWxpZF9obWFjKSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOwotCQlpZiAob3BfZXJyICE9IE5VTEwpIHsKLQkJCS8q
IHByZS1yZXNlcnZlIHNvbWUgc3BhY2UgKi8KLQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKLQkJCS8qIGZpbGwgaW4gdGhlIGVycm9yICov
Ci0JCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRf
aG1hYyAqKTsKLQkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9VTlNVUFBP
UlRFRF9ITUFDSUQpOwotCQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1
Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYykpOwotCQkJY2F1c2UtPmhtYWNfaWQgPSBu
dG9ocyhobWFjX2lkKTsKLQkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Vycm9yX2F1dGhfaW52YWxpZF9obWFjKTsKLQkJCS8qIHF1ZXVlIGl0ICovCi0JCQlzY3Rw
X3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOwotCQl9Ci0JCXJldHVybiAoLTEpOwotCX0KLQkv
KiBnZXQgdGhlIGluZGljYXRlZCBzaGFyZWQga2V5LCBpZiBhdmFpbGFibGUgKi8KLQlpZiAoKHN0
Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPT0gTlVMTCkgfHwKLQkgICAgKHN0Y2ItPmFzb2Mu
YXV0aGluZm8ucmVjdl9rZXlpZCAhPSBzaGFyZWRfa2V5X2lkKSkgewotCQkvKiBmaW5kIHRoZSBz
aGFyZWQga2V5IG9uIHRoZSBhc3NvYyBmaXJzdCAqLwotCQlza2V5ID0gc2N0cF9maW5kX3NoYXJl
ZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywKLQkJCQkJICAgc2hhcmVkX2tleV9pZCk7Ci0J
CS8qIGlmIHRoZSBzaGFyZWQga2V5IGlzbid0IGZvdW5kLCBkaXNjYXJkIHRoZSBjaHVuayAqLwot
CQlpZiAoc2tleSA9PSBOVUxMKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aXZhbGtl
eWlkKTsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCQkiU0NUUCBBdXRoOiB1bmtu
b3duIGtleSBpZCAldVxuIiwKLQkJCQlzaGFyZWRfa2V5X2lkKTsKLQkJCXJldHVybiAoLTEpOwot
CQl9Ci0JCS8qIGdlbmVyYXRlIGEgbm90aWZpY2F0aW9uIGlmIHRoaXMgaXMgYSBuZXcga2V5IGlk
ICovCi0JCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQgIT0gc2hhcmVkX2tleV9p
ZCkKLQkJCS8qCi0JCQkgKiBzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9ORVdfS0VZ
LCBzdGNiLAotCQkJICogc2hhcmVkX2tleV9pZCwgKHZvaWQKLQkJCSAqICopc3RjYi0+YXNvYy5h
dXRoaW5mby5yZWN2X2tleWlkKTsKLQkJCSAqLwotCQkJc2N0cF9ub3RpZnlfYXV0aGVudGljYXRp
b24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksCi0JCQkgICAgc2hhcmVkX2tleV9pZCwgc3RjYi0+
YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkLAotCQkJICAgIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0J
CS8qIGNvbXB1dGUgYSBuZXcgcmVjdiBhc3NvYyBrZXkgYW5kIGNhY2hlIGl0ICovCi0JCWlmIChz
dGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ICE9IE5VTEwpCi0JCQlzY3RwX2ZyZWVfa2V5KHN0
Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkpOwotCQlzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zf
a2V5ID0KLQkJICAgIHNjdHBfY29tcHV0ZV9oYXNoa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFu
ZG9tLAotCQkgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSwgc2tleS0+a2V5KTsK
LQkJc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkID0gc2hhcmVkX2tleV9pZDsKLSNpZmRl
ZiBTQ1RQX0RFQlVHCi0JCWlmIChTQ1RQX0FVVEhfREVCVUcpCi0JCQlzY3RwX3ByaW50X2tleShz
dGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LCAiUmVjdiBLZXkiKTsKLSNlbmRpZgotCX0KLQkv
KiB2YWxpZGF0ZSB0aGUgZGlnZXN0IGxlbmd0aCAqLwotCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2ht
YWNfZGlnZXN0X2xlbihobWFjX2lkKTsKLQlpZiAoY2h1bmtsZW4gPCAoc2l6ZW9mKCphdXRoKSAr
IGRpZ2VzdGxlbikpIHsKLQkJLyogaW52YWxpZCBkaWdlc3QgbGVuZ3RoICovCi0JCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3JlY3ZhdXRoZmFpbGVkKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgx
LAotCQkJIlNDVFAgQXV0aDogY2h1bmsgdG9vIHNob3J0IGZvciBITUFDXG4iKTsKLQkJcmV0dXJu
ICgtMSk7Ci0JfQotCS8qIHNhdmUgYSBjb3B5IG9mIHRoZSBkaWdlc3QsIHplcm8gdGhlIHBzZXVk
byBoZWFkZXIsIGFuZCB2YWxpZGF0ZSAqLwotCW1lbWNweShkaWdlc3QsIGF1dGgtPmhtYWMsIGRp
Z2VzdGxlbik7Ci0Jc2N0cF96ZXJvX20obSwgb2Zmc2V0ICsgc2l6ZW9mKCphdXRoKSwgU0NUUF9T
SVpFMzIoZGlnZXN0bGVuKSk7Ci0JKHZvaWQpc2N0cF9jb21wdXRlX2htYWNfbShobWFjX2lkLCBz
dGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LAotCSAgICBtLCBvZmZzZXQsIGNvbXB1dGVkX2Rp
Z2VzdCk7Ci0KLQkvKiBjb21wYXJlIHRoZSBjb21wdXRlZCBkaWdlc3Qgd2l0aCB0aGUgb25lIGlu
IHRoZSBBVVRIIGNodW5rICovCi0JaWYgKG1lbWNtcChkaWdlc3QsIGNvbXB1dGVkX2RpZ2VzdCwg
ZGlnZXN0bGVuKSAhPSAwKSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRoZmFpbGVk
KTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIlNDVFAgQXV0aDogSE1BQyBkaWdl
c3QgY2hlY2sgZmFpbGVkXG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19
Ci0KLS8qCi0gKiBHZW5lcmF0ZSBOT1RJRklDQVRJT04KLSAqLwotdm9pZAotc2N0cF9ub3RpZnlf
YXV0aGVudGljYXRpb24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBpbmRpY2F0aW9u
LAotCQkJICAgdWludDE2X3Qga2V5aWQsIHVpbnQxNl90IGFsdF9rZXlpZCwgaW50IHNvX2xvY2tl
ZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCi0JU0NUUF9VTlVTRUQKLSNlbmRpZgotKQotewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsK
LQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50ICphdXRoOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkgICAo
c3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05F
KSB8fAotCSAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKQot
CQkpIHsKLQkJLyogSWYgdGhlIHNvY2tldCBpcyBnb25lIHdlIGFyZSBvdXQgb2YgaGVyZSAqLwot
CQlyZXR1cm47Ci0JfQotCi0JaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCkpCi0JCS8qIGV2ZW50IG5vdCBlbmFi
bGVkICovCi0JCXJldHVybjsKLQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50KSwKLQkJCQkJICAwLCBNX05PV0FJVCwgMSwg
TVRfSEVBREVSKTsKLQlpZiAobV9ub3RpZnkgPT0gTlVMTCkKLQkJLyogbm8gc3BhY2UgbGVmdCAq
LwotCQlyZXR1cm47Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlhdXRoID0gbXRv
ZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYXV0aGtleV9ldmVudCAqKTsKLQltZW1zZXQoYXV0aCwg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQpKTsKLQlhdXRoLT5hdXRoX3R5cGUg
PSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOwotCWF1dGgtPmF1dGhfZmxhZ3MgPSAwOwotCWF1
dGgtPmF1dGhfbGVuZ3RoID0gc2l6ZW9mKCphdXRoKTsKLQlhdXRoLT5hdXRoX2tleW51bWJlciA9
IGtleWlkOwotCWF1dGgtPmF1dGhfYWx0a2V5bnVtYmVyID0gYWx0X2tleWlkOwotCWF1dGgtPmF1
dGhfaW5kaWNhdGlvbiA9IGluZGljYXRpb247Ci0JYXV0aC0+YXV0aF9hc3NvY19pZCA9IHNjdHBf
Z2V0X2Fzc29jaWQoc3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKCph
dXRoKTsKLQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0KLQkvKiBhcHBlbmQgdG8g
c29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQs
IDAsIDAsIDAsIG1fbm90aWZ5KTsKLQlpZiAoY29udHJvbCA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1l
bW9yeSAqLwotCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOwotCQlyZXR1cm47Ci0JfQotCWNvbnRy
b2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7Ci0JY29udHJvbC0+c3BlY19mbGFn
cyA9IE1fTk9USUZJQ0FUSU9OOwotCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwotCWNvbnRy
b2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OwotCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIGNvbnRyb2wsCi0JICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBT
Q1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsKLX0KLQotCi0vKi0KLSAqIHZhbGlk
YXRlcyB0aGUgQVVUSGVudGljYXRpb24gcmVsYXRlZCBwYXJhbWV0ZXJzIGluIGFuIElOSVQvSU5J
VC1BQ0sKLSAqIE5vdGU6IGN1cnJlbnRseSBvbmx5IHVzZWQgZm9yIElOSVQgYXMgSU5JVC1BQ0sg
aXMgaGFuZGxlZCBpbmxpbmUKLSAqIHdpdGggc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQo
KQotICovCi1pbnQKLXNjdHBfdmFsaWRhdGVfaW5pdF9hdXRoX3BhcmFtcyhzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IG9mZnNldCwgaW50IGxpbWl0KQotewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRy
LCBwYXJhbV9idWY7Ci0JdWludDE2X3QgcHR5cGUsIHBsZW47Ci0JaW50IHBlZXJfc3VwcG9ydHNf
YXNjb25mID0gMDsKLQlpbnQgcGVlcl9zdXBwb3J0c19hdXRoID0gMDsKLQlpbnQgZ290X3JhbmRv
bSA9IDAsIGdvdF9obWFjcyA9IDAsIGdvdF9jaGtsaXN0ID0gMDsKLQl1aW50OF90IHNhd19hc2Nv
bmYgPSAwOwotCXVpbnQ4X3Qgc2F3X2FzY29uZl9hY2sgPSAwOwotCi0JLyogZ28gdGhyb3VnaCBl
YWNoIG9mIHRoZSBwYXJhbXMuICovCi0JcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zm
c2V0LCAmcGFyYW1fYnVmLCBzaXplb2YocGFyYW1fYnVmKSk7Ci0Jd2hpbGUgKHBoZHIpIHsKLQkJ
cHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKLQkJcGxlbiA9IG50b2hzKHBoZHItPnBh
cmFtX2xlbmd0aCk7Ci0KLQkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgewotCQkJYnJlYWs7
Ci0JCX0KLQkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7Ci0JCQli
cmVhazsKLQkJfQotCQlpZiAocHR5cGUgPT0gU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKSB7Ci0J
CQkvKiBBIHN1cHBvcnRlZCBleHRlbnNpb24gY2h1bmsgKi8KLQkJCXN0cnVjdCBzY3RwX3N1cHBv
cnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOwotCQkJdWludDhfdCBsb2NhbF9z
dG9yZVtTQ1RQX1NNQUxMX0NIVU5LX1NUT1JFXTsKLQkJCWludCBudW1fZW50LCBpOwotCi0JCQlp
ZiAocGxlbiA+IHNpemVvZihsb2NhbF9zdG9yZSkpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZsb2NhbF9zdG9yZSwKLQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBsZW4pOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkgewotCQkJ
CXJldHVybiAoLTEpOwotCQkJfQotCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBv
cnRlZF9jaHVua190eXBlc19wYXJhbSAqKXBoZHI7Ci0JCQludW1fZW50ID0gcGxlbiAtIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsr
KSB7Ci0JCQkJc3dpdGNoIChwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7Ci0JCQkJY2Fz
ZSBTQ1RQX0FTQ09ORjoKLQkJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKLQkJCQkJcGVlcl9zdXBw
b3J0c19hc2NvbmYgPSAxOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBvbmUg
d2UgZG9uJ3QgY2FyZSBhYm91dCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxz
ZSBpZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKLQkJCS8qIGVuZm9yY2UgdGhlIHJhbmRvbSBs
ZW5ndGggKi8KLQkJCWlmIChwbGVuICE9IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20p
ICsKLQkJCQkgICAgIFNDVFBfQVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkpIHsKLQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkJCSJTQ1RQOiBpbnZhbGlkIFJBTkRPTSBsZW5cbiIp
OwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJZ290X3JhbmRvbSA9IDE7Ci0JCX0gZWxzZSBp
ZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfaG1hY19h
bGdvICpobWFjczsKLQkJCXVpbnQ4X3Qgc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07Ci0J
CQlpbnQgbnVtX2htYWNzOwotCi0JCQlpZiAocGxlbiA+IHNpemVvZihzdG9yZSkpIHsKLQkJCQli
cmVhazsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXN0b3Jl
LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBO
VUxMKSB7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9h
dXRoX2htYWNfYWxnbyAqKXBoZHI7Ci0JCQludW1faG1hY3MgPSAocGxlbiAtIHNpemVvZigqaG1h
Y3MpKSAvIHNpemVvZihobWFjcy0+aG1hY19pZHNbMF0pOwotCQkJLyogdmFsaWRhdGUgdGhlIGht
YWMgbGlzdCAqLwotCQkJaWYgKHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oaG1hY3MsIG51bV9obWFj
cykpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkJCSJTQ1RQOiBpbnZhbGlk
IEhNQUMgcGFyYW1cbiIpOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotCQkJZ290X2htYWNzID0g
MTsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0NIVU5LX0xJU1QpIHsKLQkJCXN0cnVjdCBz
Y3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOwotCQkJdWludDhfdCBjaHVua3Nfc3RvcmVbU0NU
UF9TTUFMTF9DSFVOS19TVE9SRV07Ci0JCQlpbnQgaSwgbnVtX2NodW5rczsKLQotCQkJaWYgKHBs
ZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJcGhkciA9
IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJICAgKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopY2h1bmtzX3N0b3JlLAotCQkJCQkJICAgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBO
VUxMKSB7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQkvKi0KLQkJCSAqIEZsaXAgdGhyb3Vn
aCB0aGUgbGlzdCBhbmQgbWFyayB0aGF0IHRoZQotCQkJICogcGVlciBzdXBwb3J0cyBhc2NvbmYv
YXNjb25mX2Fjay4KLQkJCSAqLwotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtf
bGlzdCAqKXBoZHI7Ci0JCQludW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigqY2h1bmtzKTsKLQkJ
CWZvciAoaSA9IDA7IGkgPCBudW1fY2h1bmtzOyBpKyspIHsKLQkJCQkvKiByZWNvcmQgYXNjb25m
L2FzY29uZi1hY2sgaWYgbGlzdGVkICovCi0JCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlwZXNbaV0g
PT0gU0NUUF9BU0NPTkYpCi0JCQkJCXNhd19hc2NvbmYgPSAxOwotCQkJCWlmIChjaHVua3MtPmNo
dW5rX3R5cGVzW2ldID09IFNDVFBfQVNDT05GX0FDSykKLQkJCQkJc2F3X2FzY29uZl9hY2sgPSAx
OwotCi0JCQl9Ci0JCQlpZiAobnVtX2NodW5rcykKLQkJCQlnb3RfY2hrbGlzdCA9IDE7Ci0JCX0K
LQotCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7Ci0JCWlmIChvZmZzZXQgPj0gbGltaXQp
IHsKLQkJCWJyZWFrOwotCQl9Ci0JCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNl
dCwgJnBhcmFtX2J1ZiwKLQkJICAgIHNpemVvZihwYXJhbV9idWYpKTsKLQl9Ci0JLyogdmFsaWRh
dGUgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgcGFyYW1ldGVycyAqLwotCWlmIChnb3RfcmFuZG9t
ICYmIGdvdF9obWFjcykgewotCQlwZWVyX3N1cHBvcnRzX2F1dGggPSAxOwotCX0gZWxzZSB7Ci0J
CXBlZXJfc3VwcG9ydHNfYXV0aCA9IDA7Ci0JfQotCWlmICghcGVlcl9zdXBwb3J0c19hdXRoICYm
IGdvdF9jaGtsaXN0KSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKLQkJCSJTQ1RQOiBw
ZWVyIHNlbnQgY2h1bmsgbGlzdCB3L28gQVVUSFxuIik7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlp
ZiAocGVlcl9zdXBwb3J0c19hc2NvbmYgJiYgIXBlZXJfc3VwcG9ydHNfYXV0aCkgewotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkiU0NUUDogcGVlciBzdXBwb3J0cyBBU0NPTkYgYnV0
IG5vdCBBVVRIXG4iKTsKLQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIGlmICgocGVlcl9zdXBwb3J0
c19hc2NvbmYpICYmIChwZWVyX3N1cHBvcnRzX2F1dGgpICYmCi0JCSAgICgoc2F3X2FzY29uZiA9
PSAwKSB8fCAoc2F3X2FzY29uZl9hY2sgPT0gMCkpKSB7Ci0JCXJldHVybiAoLTIpOwotCX0KLQly
ZXR1cm4gKDApOwotfQotCi12b2lkCi1zY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMoc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXVpbnQxNl90IGNo
dW5rc19sZW4gPSAwOwotCXVpbnQxNl90IGhtYWNzX2xlbiA9IDA7Ci0JdWludDE2X3QgcmFuZG9t
X2xlbiA9IFNDVFBfQVVUSF9SQU5ET01fU0laRV9ERUZBVUxUOwotCXNjdHBfa2V5X3QgKm5ld19r
ZXk7Ci0JdWludDE2X3Qga2V5bGVuOwotCi0JLyogaW5pdGlhbGl6ZSBobWFjIGxpc3QgZnJvbSBl
bmRwb2ludCAqLwotCXN0Y2ItPmFzb2MubG9jYWxfaG1hY3MgPSBzY3RwX2NvcHlfaG1hY2xpc3Qo
aW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKLQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAh
PSBOVUxMKSB7Ci0JCWhtYWNzX2xlbiA9IHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MtPm51bV9hbGdv
ICoKLQkJICAgIHNpemVvZihzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5obWFjWzBdKTsKLQl9Ci0J
LyogaW5pdGlhbGl6ZSBhdXRoIGNodW5rcyBsaXN0IGZyb20gZW5kcG9pbnQgKi8KLQlzdGNiLT5h
c29jLmxvY2FsX2F1dGhfY2h1bmtzID0KLQkgICAgc2N0cF9jb3B5X2NodW5rbGlzdChpbnAtPnNj
dHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwotCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1
bmtzICE9IE5VTEwpIHsKLQkJaW50IGk7Ci0JCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewot
CQkJaWYgKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MtPmNodW5rc1tpXSkKLQkJCQljaHVu
a3NfbGVuKys7Ci0JCX0KLQl9Ci0JLyogY29weSBkZWZhdWx0cyBmcm9tIHRoZSBlbmRwb2ludCAq
LwotCXN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkID0gaW5wLT5zY3RwX2VwLmRlZmF1
bHRfa2V5aWQ7Ci0KLQkvKiBjb3B5IG91dCB0aGUgc2hhcmVkIGtleSBsaXN0IChieSByZWZlcmVu
Y2UpIGZyb20gdGhlIGVuZHBvaW50ICovCi0JKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0KCZpbnAt
PnNjdHBfZXAuc2hhcmVkX2tleXMsCi0JCQkJICZzdGNiLT5hc29jLnNoYXJlZF9rZXlzKTsKLQot
CS8qIG5vdyBzZXQgdGhlIGNvbmNhdGVuYXRlZCBrZXkgKHJhbmRvbSArIGNodW5rcyArIGhtYWNz
KSAqLwotCS8qIGtleSBpbmNsdWRlcyBwYXJhbWV0ZXIgaGVhZGVycyAqLwotCWtleWxlbiA9ICgz
ICogc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgKyByYW5kb21fbGVuICsgY2h1bmtzX2xl
biArCi0JICAgIGhtYWNzX2xlbjsKLQluZXdfa2V5ID0gc2N0cF9hbGxvY19rZXkoa2V5bGVuKTsK
LQlpZiAobmV3X2tleSAhPSBOVUxMKSB7Ci0JCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQkJ
aW50IHBsZW47Ci0JCS8qIGdlbmVyYXRlIGFuZCBjb3B5IGluIHRoZSBSQU5ET00gKi8KLQkJcGgg
PSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiluZXdfa2V5LT5rZXk7Ci0JCXBoLT5wYXJhbV90eXBl
ID0gaHRvbnMoU0NUUF9SQU5ET00pOwotCQlwbGVuID0gc2l6ZW9mKCpwaCkgKyByYW5kb21fbGVu
OwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7Ci0JCVNDVFBfUkVBRF9SQU5ET00o
bmV3X2tleS0+a2V5ICsgc2l6ZW9mKCpwaCksIHJhbmRvbV9sZW4pOwotCQlrZXlsZW4gPSBwbGVu
OwotCi0JCS8qIGFwcGVuZCBpbiB0aGUgQVVUSCBjaHVua3MgKi8KLQkJLyogTk9URTogY3VycmVu
dGx5IHdlIGFsd2F5cyBoYXZlIGNodW5rcyB0byBsaXN0ICovCi0JCXBoID0gKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyICopKG5ld19rZXktPmtleSArIGtleWxlbik7Ci0JCXBoLT5wYXJhbV90eXBlID0g
aHRvbnMoU0NUUF9DSFVOS19MSVNUKTsKLQkJcGxlbiA9IHNpemVvZigqcGgpICsgY2h1bmtzX2xl
bjsKLQkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBsZW4pOwotCQlrZXlsZW4gKz0gc2l6ZW9m
KCpwaCk7Ci0JCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSB7Ci0JCQlpbnQgaTsK
LQkJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgewotCQkJCWlmIChzdGNiLT5hc29jLmxvY2Fs
X2F1dGhfY2h1bmtzLT5jaHVua3NbaV0pCi0JCQkJCW5ld19rZXktPmtleVtrZXlsZW4rK10gPSBp
OwotCQkJfQotCQl9Ci0KLQkJLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLwotCQlwaCA9IChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKShuZXdfa2V5LT5rZXkgKyBrZXlsZW4pOwotCQlwaC0+cGFyYW1f
dHlwZSA9IGh0b25zKFNDVFBfSE1BQ19MSVNUKTsKLQkJcGxlbiA9IHNpemVvZigqcGgpICsgaG1h
Y3NfbGVuOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7Ci0JCWtleWxlbiArPSBz
aXplb2YoKnBoKTsKLQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5s
b2NhbF9obWFjcywKLQkJCQkJbmV3X2tleS0+a2V5ICsga2V5bGVuKTsKLQl9Ci0JaWYgKHN0Y2It
PmFzb2MuYXV0aGluZm8ucmFuZG9tICE9IE5VTEwpCi0JICAgIHNjdHBfZnJlZV9rZXkoc3RjYi0+
YXNvYy5hdXRoaW5mby5yYW5kb20pOwotCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tID0gbmV3
X2tleTsKLQlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbV9sZW4gPSByYW5kb21fbGVuOwotfQot
Ci0KLSNpZmRlZiBTQ1RQX0hNQUNfVEVTVAotLyoKLSAqIEhNQUMgYW5kIGtleSBjb25jYXRlbmF0
aW9uIHRlc3RzCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX3ByaW50X2RpZ2VzdCh1aW50OF90ICpk
aWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbiwgY29uc3QgY2hhciAqc3RyKQotewotCXVpbnQzMl90
IGk7Ci0KLQlTQ1RQX1BSSU5URigiXG4lczogMHgiLCBzdHIpOwotCWlmIChkaWdlc3QgPT0gTlVM
TCkKLQkJcmV0dXJuOwotCi0JZm9yIChpID0gMDsgaSA8IGRpZ2VzdGxlbjsgaSsrKQotCQlTQ1RQ
X1BSSU5URigiJTAyeCIsIGRpZ2VzdFtpXSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfdGVzdF9o
bWFjKGNvbnN0IGNoYXIgKnN0ciwgdWludDE2X3QgaG1hY19pZCwgdWludDhfdCAqa2V5LAotICAg
IHVpbnQzMl90IGtleWxlbiwgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwKLSAgICB1
aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikKLXsKLQl1aW50OF90IGNvbXB1dGVk
X2RpZ2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwotCi0JU0NUUF9QUklOVEYoIlxuJXM6
Iiwgc3RyKTsKLQlzY3RwX2htYWMoaG1hY19pZCwga2V5LCBrZXlsZW4sIHRleHQsIHRleHRsZW4s
IGNvbXB1dGVkX2RpZ2VzdCk7Ci0Jc2N0cF9wcmludF9kaWdlc3QoZGlnZXN0LCBkaWdlc3RsZW4s
ICJFeHBlY3RlZCBkaWdlc3QiKTsKLQlzY3RwX3ByaW50X2RpZ2VzdChjb21wdXRlZF9kaWdlc3Qs
IGRpZ2VzdGxlbiwgIkNvbXB1dGVkIGRpZ2VzdCIpOwotCWlmIChtZW1jbXAoZGlnZXN0LCBjb21w
dXRlZF9kaWdlc3QsIGRpZ2VzdGxlbikgIT0gMCkgewotCQlTQ1RQX1BSSU5URigiXG5GQUlMRUQi
KTsKLQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIHsKLQkJU0NUUF9QUklOVEYoIlxuUEFTU0VEIik7
Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0KLS8qCi0gKiBSRkMgMjIwMjogSE1BQy1TSEExIHRl
c3QgY2FzZXMKLSAqLwotdm9pZAotc2N0cF90ZXN0X2htYWNfc2hhMSh2b2lkKQotewotCXVpbnQ4
X3QgKmRpZ2VzdDsKLQl1aW50OF90IGtleVsxMjhdOwotCXVpbnQzMl90IGtleWxlbjsKLQl1aW50
OF90IHRleHRbMTI4XTsKLQl1aW50MzJfdCB0ZXh0bGVuOwotCXVpbnQzMl90IGRpZ2VzdGxlbiA9
IDIwOwotCWludCBmYWlsZWQgPSAwOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDEKLQkg
KiBrZXkgPSAgICAgICAgICAgMHgwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiMGIw
YjBiCi0JICoga2V5X2xlbiA9ICAgICAgIDIwCi0JICogZGF0YSA9ICAgICAgICAgICJIaSBUaGVy
ZSIKLQkgKiBkYXRhX2xlbiA9ICAgICAgOAotCSAqIGRpZ2VzdCA9ICAgICAgICAweGI2MTczMTg2
NTUwNTcyNjRlMjhiYzBiNmZiMzc4YzhlZjE0NmJlMDAKLQkgKi8KLQlrZXlsZW4gPSAyMDsKLQlt
ZW1zZXQoa2V5LCAweDBiLCBrZXlsZW4pOwotCXRleHRsZW4gPSA4OwotCXN0cmNweSh0ZXh0LCAi
SGkgVGhlcmUiKTsKLQlkaWdlc3QgPSAiXHhiNlx4MTdceDMxXHg4Nlx4NTVceDA1XHg3Mlx4NjRc
eGUyXHg4Ylx4YzBceGI2XHhmYlx4MzdceDhjXHg4ZVx4ZjFceDQ2XHhiZVx4MDAiOwotCWlmIChz
Y3RwX3Rlc3RfaG1hYygiU0hBMSB0ZXN0IGNhc2UgMSIsIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTEs
IGtleSwga2V5bGVuLAotCSAgICB0ZXh0LCB0ZXh0bGVuLCBkaWdlc3QsIGRpZ2VzdGxlbikgPCAw
KQotCQlmYWlsZWQrKzsKLQotCS8qLQotCSAqIHRlc3RfY2FzZSA9ICAgICAyCi0JICoga2V5ID0g
ICAgICAgICAgICJKZWZlIgotCSAqIGtleV9sZW4gPSAgICAgICA0Ci0JICogZGF0YSA9ICAgICAg
ICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/IgotCSAqIGRhdGFfbGVuID0gICAgICAy
OAotCSAqIGRpZ2VzdCA9ICAgICAgICAweGVmZmNkZjZhZTVlYjJmYTJkMjc0MTZkNWYxODRkZjlj
MjU5YTdjNzkKLQkgKi8KLQlrZXlsZW4gPSA0OwotCXN0cmNweShrZXksICJKZWZlIik7Ci0JdGV4
dGxlbiA9IDI4OwotCXN0cmNweSh0ZXh0LCAid2hhdCBkbyB5YSB3YW50IGZvciBub3RoaW5nPyIp
OwotCWRpZ2VzdCA9ICJceGVmXHhmY1x4ZGZceDZhXHhlNVx4ZWJceDJmXHhhMlx4ZDJceDc0XHgx
Nlx4ZDVceGYxXHg4NFx4ZGZceDljXHgyNVx4OWFceDdjXHg3OSI7Ci0JaWYgKHNjdHBfdGVzdF9o
bWFjKCJTSEExIHRlc3QgY2FzZSAyIiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXls
ZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCi0JCWZhaWxl
ZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDMKLQkgKiBrZXkgPSAgICAgICAgICAg
MHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhCi0JICoga2V5X2xlbiA9
ICAgICAgIDIwCi0JICogZGF0YSA9ICAgICAgICAgIDB4ZGQgcmVwZWF0ZWQgNTAgdGltZXMKLQkg
KiBkYXRhX2xlbiA9ICAgICAgNTAKLQkgKiBkaWdlc3QgPSAgICAgICAgMHgxMjVkNzM0MmI5YWMx
MWNkOTFhMzlhZjQ4YWExN2I0ZjYzZjE3NWQzCi0JICovCi0Ja2V5bGVuID0gMjA7Ci0JbWVtc2V0
KGtleSwgMHhhYSwga2V5bGVuKTsKLQl0ZXh0bGVuID0gNTA7Ci0JbWVtc2V0KHRleHQsIDB4ZGQs
IHRleHRsZW4pOwotCWRpZ2VzdCA9ICJceDEyXHg1ZFx4NzNceDQyXHhiOVx4YWNceDExXHhjZFx4
OTFceGEzXHg5YVx4ZjRceDhhXHhhMVx4N2JceDRmXHg2M1x4ZjFceDc1XHhkMyI7Ci0JaWYgKHNj
dHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSAzIiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwg
a2V5LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDAp
Ci0JCWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDQKLQkgKiBrZXkgPSAg
ICAgICAgICAgMHgwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMwZDBlMGYxMDExMTIxMzE0MTUxNjE3
MTgxOQotCSAqIGtleV9sZW4gPSAgICAgICAyNQotCSAqIGRhdGEgPSAgICAgICAgICAweGNkIHJl
cGVhdGVkIDUwIHRpbWVzCi0JICogZGF0YV9sZW4gPSAgICAgIDUwCi0JICogZGlnZXN0ID0gICAg
ICAgIDB4NGM5MDA3ZjQwMjYyNTBjNmJjODQxNGY5YmY1MGM4NmMyZDcyMzVkYQotCSAqLwotCWtl
eWxlbiA9IDI1OwotCW1lbWNweShrZXksICJceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3XHgw
OFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwXHgxMVx4MTJceDEzXHgxNFx4MTVceDE2
XHgxN1x4MThceDE5Iiwga2V5bGVuKTsKLQl0ZXh0bGVuID0gNTA7Ci0JbWVtc2V0KHRleHQsIDB4
Y2QsIHRleHRsZW4pOwotCWRpZ2VzdCA9ICJceDRjXHg5MFx4MDdceGY0XHgwMlx4NjJceDUwXHhj
Nlx4YmNceDg0XHgxNFx4ZjlceGJmXHg1MFx4YzhceDZjXHgyZFx4NzJceDM1XHhkYSI7Ci0JaWYg
KHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA0IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hB
MSwga2V5LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8
IDApCi0JCWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDUKLQkgKiBrZXkg
PSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjMGMwYzBjCi0J
ICoga2V5X2xlbiA9ICAgICAgIDIwCi0JICogZGF0YSA9ICAgICAgICAgICJUZXN0IFdpdGggVHJ1
bmNhdGlvbiIKLQkgKiBkYXRhX2xlbiA9ICAgICAgMjAKLQkgKiBkaWdlc3QgPSAgICAgICAgMHg0
YzFhMDM0MjRiNTVlMDdmZTdmMjdiZTFkNThiYjkzMjRhOWE1YTA0Ci0JICogZGlnZXN0LTk2ID0g
ICAgIDB4NGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3YmUxCi0JICovCi0Ja2V5bGVuID0gMjA7Ci0JbWVt
c2V0KGtleSwgMHgwYywga2V5bGVuKTsKLQl0ZXh0bGVuID0gMjA7Ci0Jc3RyY3B5KHRleHQsICJU
ZXN0IFdpdGggVHJ1bmNhdGlvbiIpOwotCWRpZ2VzdCA9ICJceDRjXHgxYVx4MDNceDQyXHg0Ylx4
NTVceGUwXHg3Zlx4ZTdceGYyXHg3Ylx4ZTFceGQ1XHg4Ylx4YjlceDMyXHg0YVx4OWFceDVhXHgw
NCI7Ci0JaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA1IiwgU0NUUF9BVVRIX0hN
QUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGln
ZXN0bGVuKSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNlID0gICAgIDYK
LQkgKiBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcwotCSAqIGtleV9sZW4g
PSAgICAgICA4MAotCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBC
bG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IgotCSAqIGRhdGFfbGVuID0gICAgICA1NAot
CSAqIGRpZ2VzdCA9ICAgICAgICAweGFhNGFlNWUxNTI3MmQwMGU5NTcwNTYzN2NlOGEzYjU1ZWQ0
MDIxMTIKLQkgKi8KLQlrZXlsZW4gPSA4MDsKLQltZW1zZXQoa2V5LCAweGFhLCBrZXlsZW4pOwot
CXRleHRsZW4gPSA1NDsKLQlzdHJjcHkodGV4dCwgIlRlc3QgVXNpbmcgTGFyZ2VyIFRoYW4gQmxv
Y2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIpOwotCWRpZ2VzdCA9ICJceGFhXHg0YVx4ZTVc
eGUxXHg1Mlx4NzJceGQwXHgwZVx4OTVceDcwXHg1Nlx4MzdceGNlXHg4YVx4M2JceDU1XHhlZFx4
NDBceDIxXHgxMiI7Ci0JaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA2IiwgU0NU
UF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCi0JICAgIHRleHQsIHRleHRsZW4sIGRp
Z2VzdCwgZGlnZXN0bGVuKSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyotCi0JICogdGVzdF9jYXNl
ID0gICAgIDcKLQkgKiBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4MCB0aW1lcwotCSAq
IGtleV9sZW4gPSAgICAgICA4MAotCSAqIGRhdGEgPSAgICAgICAgICAiVGVzdCBVc2luZyBMYXJn
ZXIgVGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyIFRoYW4gT25lIEJsb2NrLVNpemUgRGF0
YSIKLQkgKiBkYXRhX2xlbiA9ICAgICAgNzMKLQkgKiBkaWdlc3QgPSAgICAgICAgMHhlOGU5OWQw
ZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxCi0JICovCi0Ja2V5bGVuID0gODA7Ci0J
bWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKLQl0ZXh0bGVuID0gNzM7Ci0Jc3RyY3B5KHRleHQs
ICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUgS2V5IGFuZCBMYXJnZXIgVGhhbiBP
bmUgQmxvY2stU2l6ZSBEYXRhIik7Ci0JZGlnZXN0ID0gIlx4ZThceGU5XHg5ZFx4MGZceDQ1XHgy
M1x4N2RceDc4XHg2ZFx4NmJceGJhXHhhN1x4OTZceDVjXHg3OFx4MDhceGJiXHhmZlx4MWFceDkx
IjsKLQlpZiAoc2N0cF90ZXN0X2htYWMoIlNIQTEgdGVzdCBjYXNlIDciLCBTQ1RQX0FVVEhfSE1B
Q19JRF9TSEExLCBrZXksIGtleWxlbiwKLQkgICAgdGV4dCwgdGV4dGxlbiwgZGlnZXN0LCBkaWdl
c3RsZW4pIDwgMCkKLQkJZmFpbGVkKys7Ci0KLQkvKiBkb25lIHdpdGggYWxsIHRlc3RzICovCi0J
aWYgKGZhaWxlZCkKLQkJU0NUUF9QUklOVEYoIlxuU0hBMSB0ZXN0IHJlc3VsdHM6ICVkIGNhc2Vz
IGZhaWxlZCIsIGZhaWxlZCk7Ci0JZWxzZQotCQlTQ1RQX1BSSU5URigiXG5TSEExIHRlc3QgcmVz
dWx0czogYWxsIHRlc3QgY2FzZXMgcGFzc2VkIik7Ci19Ci0KLS8qCi0gKiB0ZXN0IGFzc29jIGtl
eSBjb25jYXRlbmF0aW9uCi0gKi8KLXN0YXRpYyBpbnQKLXNjdHBfdGVzdF9rZXlfY29uY2F0ZW5h
dGlvbihzY3RwX2tleV90ICprZXkxLCBzY3RwX2tleV90ICprZXkyLAotICAgIHNjdHBfa2V5X3Qg
KmV4cGVjdGVkX2tleSkKLXsKLQlzY3RwX2tleV90ICprZXk7Ci0JaW50IHJldF92YWw7Ci0KLQlz
Y3RwX3Nob3dfa2V5KGtleTEsICJcbmtleTEiKTsKLQlzY3RwX3Nob3dfa2V5KGtleTIsICJcbmtl
eTIiKTsKLQlrZXkgPSBzY3RwX2NvbXB1dGVfaGFzaGtleShrZXkxLCBrZXkyLCBOVUxMKTsKLQlz
Y3RwX3Nob3dfa2V5KGV4cGVjdGVkX2tleSwgIlxuRXhwZWN0ZWQiKTsKLQlzY3RwX3Nob3dfa2V5
KGtleSwgIlxuQ29tcHV0ZWQiKTsKLQlpZiAobWVtY21wKGtleSwgZXhwZWN0ZWRfa2V5LCBleHBl
Y3RlZF9rZXktPmtleWxlbikgIT0gMCkgewotCQlTQ1RQX1BSSU5URigiXG5GQUlMRUQiKTsKLQkJ
cmV0X3ZhbCA9IC0xOwotCX0gZWxzZSB7Ci0JCVNDVFBfUFJJTlRGKCJcblBBU1NFRCIpOwotCQly
ZXRfdmFsID0gMDsKLQl9Ci0Jc2N0cF9mcmVlX2tleShrZXkxKTsKLQlzY3RwX2ZyZWVfa2V5KGtl
eTIpOwotCXNjdHBfZnJlZV9rZXkoZXhwZWN0ZWRfa2V5KTsKLQlzY3RwX2ZyZWVfa2V5KGtleSk7
Ci0JcmV0dXJuIChyZXRfdmFsKTsKLX0KLQotCi12b2lkCi1zY3RwX3Rlc3RfYXV0aGtleSh2b2lk
KQotewotCXNjdHBfa2V5X3QgKmtleTEsICprZXkyLCAqZXhwZWN0ZWRfa2V5OwotCWludCBmYWls
ZWQgPSAwOwotCi0JLyogdGVzdCBjYXNlIDEgKi8KLQlrZXkxID0gc2N0cF9zZXRfa2V5KCJceDAx
XHgwMVx4MDFceDAxIiwgNCk7Ci0Ja2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDJceDAzXHgw
NCIsIDQpOwotCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDFceDAxXHgwMVx4
MDFceDAyXHgwM1x4MDQiLCA4KTsKLQlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtl
eTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQotCQlmYWlsZWQrKzsKLQotCS8qIHRlc3QgY2Fz
ZSAyICovCi0Ja2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMSIsIDQpOwotCWtl
eTIgPSBzY3RwX3NldF9rZXkoIlx4MDIiLCAxKTsKLQlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9r
ZXkoIlx4MDBceDAwXHgwMFx4MDFceDAyIiwgNSk7Ci0JaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0
ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKLQkJZmFpbGVkKys7Ci0KLQkv
KiB0ZXN0IGNhc2UgMyAqLwotCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDEiLCAxKTsKLQlrZXky
ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAyIiwgNCk7Ci0JZXhwZWN0ZWRfa2V5ID0g
c2N0cF9zZXRfa2V5KCJceDAxXHgwMFx4MDBceDAwXHgwMiIsIDUpOwotCWlmIChzY3RwX3Rlc3Rf
a2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCi0JCWZhaWxl
ZCsrOwotCi0JLyogdGVzdCBjYXNlIDQgKi8KLQlrZXkxID0gc2N0cF9zZXRfa2V5KCJceDAwXHgw
MFx4MDBceDAxIiwgNCk7Ci0Ja2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMSIsIDEpOwotCWV4cGVj
dGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDBceDAwXHgwMFx4MDEiLCA1KTsKLQlpZiAo
c2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAw
KQotCQlmYWlsZWQrKzsKLQotCS8qIHRlc3QgY2FzZSA1ICovCi0Ja2V5MSA9IHNjdHBfc2V0X2tl
eSgiXHgwMSIsIDEpOwotCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDEiLCA0
KTsKLQlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4MDFceDAwXHgwMFx4MDBceDAxIiwg
NSk7Ci0JaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3Rl
ZF9rZXkpIDwgMCkKLQkJZmFpbGVkKys7Ci0KLQkvKiB0ZXN0IGNhc2UgNiAqLwotCWtleTEgPSBz
Y3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA3
IiwgMTEpOwotCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4
MDNceDA0XHgwNVx4MDZceDA4IiwgMTEpOwotCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgi
XHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDdceDAwXHgwMFx4MDBc
eDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwOCIsIDIyKTsKLQlpZiAoc2N0cF90ZXN0X2tl
eV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQotCQlmYWlsZWQr
KzsKLQotCS8qIHRlc3QgY2FzZSA3ICovCi0Ja2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBc
eDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDgiLCAxMSk7Ci0Ja2V5MiA9IHNjdHBf
c2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDciLCAx
MSk7Ci0JZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAwXHgwMVx4
MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDBceDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgw
NVx4MDZceDA4IiwgMjIpOwotCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oa2V5MSwg
a2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCi0JCWZhaWxlZCsrOwotCi0JLyogZG9uZSB3aXRoIGFs
bCB0ZXN0cyAqLwotCWlmIChmYWlsZWQpCi0JCVNDVFBfUFJJTlRGKCJcbktleSBjb25jYXRlbmF0
aW9uIHRlc3QgcmVzdWx0czogJWQgY2FzZXMgZmFpbGVkIiwgZmFpbGVkKTsKLQllbHNlCi0JCVND
VFBfUFJJTlRGKCJcbktleSBjb25jYXRlbmF0aW9uIHRlc3QgcmVzdWx0czogYWxsIHRlc3QgY2Fz
ZXMgcGFzc2VkIik7Ci19Ci0KLQotI2lmIGRlZmluZWQoU1RBTkRBTE9ORV9ITUFDX1RFU1QpCi1p
bnQKLW1haW4odm9pZCkKLXsKLQlzY3RwX3Rlc3RfaG1hY19zaGExKCk7Ci0Jc2N0cF90ZXN0X2F1
dGhrZXkoKTsKLX0KLQotI2VuZGlmIC8qIFNUQU5EQUxPTkVfSE1BQ19URVNUICovCi0KLSNlbmRp
ZiAvKiBTQ1RQX0hNQUNfVEVTVCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2F1dGguaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGIyNGY1MTQxZTgxYmNmZTY5NWJmMTdmYzhkOGVhMTRiNDM2NDYzZjMuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX2F1dGguaAorKysgL2Rldi9udWxsCkBAIC0xLDIxNiArMCwwIEBACi0vKi0KLSAq
IENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3
YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0g
KiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9f
RnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhl
YWQvc3lzL25ldGluZXQvc2N0cF9hdXRoLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1
ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0FVVEhfSF8KLSNkZWZp
bmUgX05FVElORVRfU0NUUF9BVVRIX0hfCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4K
LQotLyogZGlnZXN0IGxlbmd0aHMgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9MRU5fU0hB
MQkyMAotI2RlZmluZSBTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYJMzIKLSNkZWZpbmUgU0NU
UF9BVVRIX0RJR0VTVF9MRU5fTUFYCVNDVFBfQVVUSF9ESUdFU1RfTEVOX1NIQTI1NgotCi0vKiBy
YW5kb20gc2l6ZXMgKi8KLSNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX0RFRkFVTFQJMzIK
LSNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVECTMyCi0KLS8qIHVuaW9uIG9m
IGFsbCBzdXBwb3J0ZWQgSE1BQyBhbGdvcml0aG0gY29udGV4dHMgKi8KLXR5cGVkZWYgdW5pb24g
c2N0cF9oYXNoX2NvbnRleHQgewotCVNDVFBfU0hBMV9DVFggc2hhMTsKLSNpZiBkZWZpbmVkKFND
VFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKLQlTQ1RQX1NIQTI1Nl9DVFggc2hhMjU2OwotI2VuZGlm
Ci19IHNjdHBfaGFzaF9jb250ZXh0X3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHNjdHBfa2V5IHsKLQl1
aW50MzJfdCBrZXlsZW47Ci0JdWludDhfdCBrZXlbXTsKLX0gc2N0cF9rZXlfdDsKLQotdHlwZWRl
ZiBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5IHsKLQlMSVNUX0VOVFJZKHNjdHBfc2hhcmVkX2tleSkg
bmV4dDsKLQlzY3RwX2tleV90ICprZXk7CS8qIGtleSB0ZXh0ICovCi0JdWludDMyX3QgcmVmY291
bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCAqLwotCXVpbnQxNl90IGtleWlkOwkJLyogc2hhcmVkIGtl
eSBJRCAqLwotCXVpbnQ4X3QgZGVhY3RpdmF0ZWQ7CS8qIGtleSBpcyBkZWFjdGl2YXRlZCAqLwot
fSBzY3RwX3NoYXJlZGtleV90OwotCi1MSVNUX0hFQUQoc2N0cF9rZXloZWFkLCBzY3RwX3NoYXJl
ZF9rZXkpOwotCi0vKiBhdXRoZW50aWNhdGlvbiBjaHVua3MgbGlzdCAqLwotdHlwZWRlZiBzdHJ1
Y3Qgc2N0cF9hdXRoX2Noa2xpc3QgewotCXVpbnQ4X3QgY2h1bmtzWzI1Nl07Ci0JdWludDhfdCBu
dW1fY2h1bmtzOwotfSBzY3RwX2F1dGhfY2hrbGlzdF90OwotCi0vKiBobWFjIGFsZ29zIHN1cHBv
cnRlZCBsaXN0ICovCi10eXBlZGVmIHN0cnVjdCBzY3RwX2htYWNsaXN0IHsKLQl1aW50MTZfdCBt
YXhfYWxnbzsJLyogbWF4IGFsZ29yaXRobXMgYWxsb2NhdGVkICovCi0JdWludDE2X3QgbnVtX2Fs
Z287CS8qIG51bSBhbGdvcml0aG1zIHVzZWQgKi8KLQl1aW50MTZfdCBobWFjW107Ci19IHNjdHBf
aG1hY2xpc3RfdDsKLQotLyogYXV0aGVudGljYXRpb24gaW5mbyAqLwotdHlwZWRlZiBzdHJ1Y3Qg
c2N0cF9hdXRoaW5mb3JtYXRpb24gewotCXNjdHBfa2V5X3QgKnJhbmRvbTsJLyogbG9jYWwgcmFu
ZG9tIGtleSAoY29uY2F0ZW5hdGVkKSAqLwotCXVpbnQzMl90IHJhbmRvbV9sZW47CS8qIGxvY2Fs
IHJhbmRvbSBudW1iZXIgbGVuZ3RoIGZvciBwYXJhbSAqLwotCXNjdHBfa2V5X3QgKnBlZXJfcmFu
ZG9tOy8qIHBlZXIncyByYW5kb20ga2V5IChjb25jYXRlbmF0ZWQpICovCi0Jc2N0cF9rZXlfdCAq
YXNzb2Nfa2V5OwkvKiBjYWNoZWQgY29uY2F0ZW5hdGVkIHNlbmQga2V5ICovCi0Jc2N0cF9rZXlf
dCAqcmVjdl9rZXk7CS8qIGNhY2hlZCBjb25jYXRlbmF0ZWQgcmVjdiBrZXkgKi8KLQl1aW50MTZf
dCBhY3RpdmVfa2V5aWQ7CS8qIGFjdGl2ZSBzZW5kIGtleWlkICovCi0JdWludDE2X3QgYXNzb2Nf
a2V5aWQ7CS8qIGN1cnJlbnQgc2VuZCBrZXlpZCAoY2FjaGVkKSAqLwotCXVpbnQxNl90IHJlY3Zf
a2V5aWQ7CS8qIGxhc3QgcmVjdiBrZXlpZCAoY2FjaGVkKSAqLwotfSBzY3RwX2F1dGhpbmZvX3Q7
Ci0KLQotCi0vKgotICogTWFjcm9zCi0gKi8KLSNkZWZpbmUgc2N0cF9hdXRoX2lzX3JlcXVpcmVk
X2NodW5rKGNodW5rLCBsaXN0KSAoKGxpc3QgPT0gTlVMTCkgPyAoMCkgOiAobGlzdC0+Y2h1bmtz
W2NodW5rXSAhPSAwKSkKLQotLyoKLSAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotCi0vKiBz
b2NrZXQgb3B0aW9uIGFwaSBmdW5jdGlvbnMgKi8KLWV4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90
ICpzY3RwX2FsbG9jX2NodW5rbGlzdCh2b2lkKTsKLWV4dGVybiB2b2lkIHNjdHBfZnJlZV9jaHVu
a2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCk7Ci1leHRlcm4gdm9pZCBzY3RwX2Ns
ZWFyX2NodW5rbGlzdChzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0KTsKLWV4dGVybiBzY3Rw
X2F1dGhfY2hrbGlzdF90ICpzY3RwX2NvcHlfY2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3Qg
KmNoa2xpc3QpOwotZXh0ZXJuIGludCBzY3RwX2F1dGhfYWRkX2NodW5rKHVpbnQ4X3QgY2h1bmss
IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOwotZXh0ZXJuIGludCBzY3RwX2F1dGhfZGVsZXRl
X2NodW5rKHVpbnQ4X3QgY2h1bmssIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOwotZXh0ZXJu
IHNpemVfdCBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjb25zdCBzY3RwX2F1dGhfY2hrbGlz
dF90ICpsaXN0KTsKLWV4dGVybiBpbnQgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY29uc3Qg
c2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwKLSAgICB1aW50OF90ICpwdHIpOwotZXh0ZXJuIGlu
dCBzY3RwX3BhY2tfYXV0aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwK
LSAgICB1aW50OF90ICpwdHIpOwotZXh0ZXJuIGludCBzY3RwX3VucGFja19hdXRoX2NodW5rcyhj
b25zdCB1aW50OF90ICpwdHIsIHVpbnQ4X3QgbnVtX2NodW5rcywKLSAgICBzY3RwX2F1dGhfY2hr
bGlzdF90ICpsaXN0KTsKLQotLyoga2V5IGhhbmRsaW5nICovCi1leHRlcm4gc2N0cF9rZXlfdCAq
c2N0cF9hbGxvY19rZXkodWludDMyX3Qga2V5bGVuKTsKLWV4dGVybiB2b2lkIHNjdHBfZnJlZV9r
ZXkoc2N0cF9rZXlfdCAqa2V5KTsKLWV4dGVybiB2b2lkIHNjdHBfcHJpbnRfa2V5KHNjdHBfa2V5
X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKTsKLWV4dGVybiB2b2lkIHNjdHBfc2hvd19rZXkoc2N0
cF9rZXlfdCAqa2V5LCBjb25zdCBjaGFyICpzdHIpOwotZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBf
Z2VuZXJhdGVfcmFuZG9tX2tleSh1aW50MzJfdCBrZXlsZW4pOwotZXh0ZXJuIHNjdHBfa2V5X3Qg
KnNjdHBfc2V0X2tleSh1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbik7Ci1leHRlcm4gc2N0
cF9rZXlfdCAqc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlf
dCAqa2V5MiwKLSAgICBzY3RwX2tleV90ICpzaGFyZWQpOwotCi0vKiBzaGFyZWQga2V5IGhhbmRs
aW5nICovCi1leHRlcm4gc2N0cF9zaGFyZWRrZXlfdCAqc2N0cF9hbGxvY19zaGFyZWRrZXkodm9p
ZCk7Ci1leHRlcm4gdm9pZCBzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNr
ZXkpOwotZXh0ZXJuIHNjdHBfc2hhcmVka2V5X3QgKnNjdHBfZmluZF9zaGFyZWRrZXkoc3RydWN0
IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXMsCi0gICAgdWludDE2X3Qga2V5X2lkKTsKLWV4dGVy
biBpbnQgc2N0cF9pbnNlcnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9r
ZXlzLAotICAgIHNjdHBfc2hhcmVka2V5X3QgKm5ld19za2V5KTsKLWV4dGVybiBpbnQgc2N0cF9j
b3B5X3NrZXlsaXN0KGNvbnN0IHN0cnVjdCBzY3RwX2tleWhlYWQgKnNyYywKLSAgICBzdHJ1Y3Qg
c2N0cF9rZXloZWFkICpkZXN0KTsKLS8qIHJlZiBjb3VudHMgb24gc2hhcmVkIGtleXMsIGJ5IGtl
eSBpZCAqLwotZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwotZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9yZWxl
YXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQsCi0gICAgaW50IHNvX2xv
Y2tlZCk7Ci0KLQotLyogaG1hYyBsaXN0IGhhbmRsaW5nICovCi1leHRlcm4gc2N0cF9obWFjbGlz
dF90ICpzY3RwX2FsbG9jX2htYWNsaXN0KHVpbnQxNl90IG51bV9obWFjcyk7Ci1leHRlcm4gdm9p
ZCBzY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KTsKLWV4dGVybiBpbnQg
c2N0cF9hdXRoX2FkZF9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFj
X2lkKTsKLWV4dGVybiBzY3RwX2htYWNsaXN0X3QgKnNjdHBfY29weV9obWFjbGlzdChzY3RwX2ht
YWNsaXN0X3QgKmxpc3QpOwotZXh0ZXJuIHNjdHBfaG1hY2xpc3RfdCAqc2N0cF9kZWZhdWx0X3N1
cHBvcnRlZF9obWFjbGlzdCh2b2lkKTsKLWV4dGVybiB1aW50MTZfdCBzY3RwX25lZ290aWF0ZV9o
bWFjaWQoc2N0cF9obWFjbGlzdF90ICpwZWVyLAotICAgIHNjdHBfaG1hY2xpc3RfdCAqbG9jYWwp
OwotZXh0ZXJuIGludCBzY3RwX3NlcmlhbGl6ZV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxp
c3QsIHVpbnQ4X3QgKnB0cik7Ci1leHRlcm4gaW50IHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oc3Ry
dWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzLAotICAgIHVpbnQzMl90IG51bV9obWFjcyk7
Ci0KLWV4dGVybiBzY3RwX2F1dGhpbmZvX3QgKnNjdHBfYWxsb2NfYXV0aGluZm8odm9pZCk7Ci1l
eHRlcm4gdm9pZCBzY3RwX2ZyZWVfYXV0aGluZm8oc2N0cF9hdXRoaW5mb190ICphdXRoaW5mbyk7
Ci0KLS8qIGtleWVkLUhNQUMgZnVuY3Rpb25zICovCi1leHRlcm4gdWludDMyX3Qgc2N0cF9nZXRf
YXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19hbGdvKTsKLWV4dGVybiB1aW50MzJfdCBzY3Rw
X2dldF9obWFjX2RpZ2VzdF9sZW4odWludDE2X3QgaG1hY19hbGdvKTsKLWV4dGVybiB1aW50MzJf
dCBzY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtl
eWxlbiwKLSAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdl
c3QpOwotZXh0ZXJuIGludCBzY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWlu
dDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCi0gICAgdWludDhfdCAqdGV4dCwgdWludDMyX3Qg
dGV4dGxlbiwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCBkaWdlc3RsZW4pOwotZXh0ZXJuIHVp
bnQzMl90IHNjdHBfY29tcHV0ZV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9rZXlfdCAq
a2V5LAotICAgIHVpbnQ4X3QgKnRleHQsIHVpbnQzMl90IHRleHRsZW4sIHVpbnQ4X3QgKmRpZ2Vz
dCk7Ci1leHRlcm4gaW50IHNjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0
X3QgKmxpc3QsIHVpbnQxNl90IGlkKTsKLQotLyogbWJ1ZiB2ZXJzaW9ucyAqLwotZXh0ZXJuIHVp
bnQzMl90IHNjdHBfaG1hY19tKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4sCi0gICAgc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50
OF90ICpkaWdlc3QsIHVpbnQzMl90IHRyYWlsZXIpOwotZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29t
cHV0ZV9obWFjX20odWludDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksCi0gICAgc3Ry
dWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QpOwotCi0vKgot
ICogYXV0aGVudGljYXRpb24gcm91dGluZXMKLSAqLwotZXh0ZXJuIHZvaWQgc2N0cF9jbGVhcl9j
YWNoZWRrZXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwotZXh0ZXJu
IHZvaWQgc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVp
bnQxNl90IGtleWlkKTsKLWV4dGVybiBpbnQgc2N0cF9kZWxldGVfc2hhcmVka2V5KHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOwotZXh0ZXJuIGludCBzY3RwX2RlbGV0ZV9z
aGFyZWRrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOwotZXh0
ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDE2X3Qga2V5aWQpOwotZXh0ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5X2VwKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsKLWV4dGVybiBpbnQgc2N0cF9kZWFj
dF9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7Ci1leHRl
cm4gaW50IHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVp
bnQxNl90IGtleWlkKTsKLQotZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2dldF9jb29raWVfcGFyYW1z
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCi0gICAgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBsZW5ndGgpOwotZXh0ZXJuIHZvaWQgc2N0cF9maWxsX2htYWNfZGlnZXN0
X20oc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IGF1dGhfb2Zmc2V0LAotICAgIHN0cnVjdCBzY3Rw
X2F1dGhfY2h1bmsgKmF1dGgsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lk
KTsKLWV4dGVybiBzdHJ1Y3QgbWJ1ZiAqc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAq
bSwgc3RydWN0IG1idWYgKiptX2VuZCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0
aF9yZXQsIHVpbnQzMl90ICpvZmZzZXQsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
OF90IGNodW5rKTsKLWV4dGVybiBpbnQgc2N0cF9oYW5kbGVfYXV0aChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmNoLAotICAgIHN0cnVjdCBtYnVmICptLCB1
aW50MzJfdCBvZmZzZXQpOwotZXh0ZXJuIHZvaWQgc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24o
c3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHVpbnQzMl90IGluZGljYXRpb24sIHVpbnQxNl90
IGtleWlkLCB1aW50MTZfdCBhbHRfa2V5aWQsIGludCBzb19sb2NrZWQpOwotZXh0ZXJuIGludCBz
Y3RwX3ZhbGlkYXRlX2luaXRfYXV0aF9wYXJhbXMoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQs
Ci0gICAgaW50IGxpbWl0KTsKLWV4dGVybiB2b2lkIHNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFt
cyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7Ci0K
LS8qIHRlc3QgZnVuY3Rpb25zICovCi0jaWZkZWYgU0NUUF9ITUFDX1RFU1QKLWV4dGVybiB2b2lk
IHNjdHBfdGVzdF9obWFjX3NoYTEodm9pZCk7Ci1leHRlcm4gdm9pZCBzY3RwX3Rlc3RfYXV0aGtl
eSh2b2lkKTsKLSNlbmRpZgotI2VuZGlmIC8qIF9fU0NUUF9BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfYnNkX2FkZHIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODA1ZmRiODdkMGVj
NDMyZDY4NDQ2ZmQ2MGUyMWI2OTdiMWUzMmU5Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYworKysg
L2Rldi9udWxsCkBAIC0xLDExMTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEt
MjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0
OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFt
ZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUg
PHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBf
YnNkX2FkZHIuYyAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
dXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0j
aW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgotI2VuZGlmCi0KLS8qIERlY2xhcmUgYWxsIG9mIG91ciBt
YWxsb2MgbmFtZWQgdHlwZXMgKi8KLSNpZm5kZWYgX19QYW5kYV9fCi1NQUxMT0NfREVGSU5FKFND
VFBfTV9NQVAsICJzY3RwX21hcCIsICJzY3RwIGFzb2MgbWFwIGRlc2NyaXB0b3IiKTsKLU1BTExP
Q19ERUZJTkUoU0NUUF9NX1NUUk1JLCAic2N0cF9zdHJpIiwgInNjdHAgc3RyZWFtIGluIGFycmF5
Iik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9TVFJNTywgInNjdHBfc3RybyIsICJzY3RwIHN0cmVh
bSBvdXQgYXJyYXkiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9NX0FTQ19BRERSLCAic2N0cF9hYWRy
IiwgInNjdHAgYXNjb25mIGFkZHJlc3MiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9NX0FTQ19JVCwg
InNjdHBfYV9pdCIsICJzY3RwIGFzY29uZiBpdGVyYXRvciIpOwotTUFMTE9DX0RFRklORShTQ1RQ
X01fQVVUSF9DTCwgInNjdHBfYXRjbCIsICJzY3RwIGF1dGggY2h1bmtsaXN0Iik7Ci1NQUxMT0Nf
REVGSU5FKFNDVFBfTV9BVVRIX0tZLCAic2N0cF9hdGt5IiwgInNjdHAgYXV0aCBrZXkiKTsKLU1B
TExPQ19ERUZJTkUoU0NUUF9NX0FVVEhfSEwsICJzY3RwX2F0aG0iLCAic2N0cCBhdXRoIGhtYWMg
bGlzdCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fQVVUSF9JRiwgInNjdHBfYXRoaSIsICJzY3Rw
IGF1dGggaW5mbyIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fU1RSRVNFVCwgInNjdHBfc3RyZSIs
ICJzY3RwIHN0cmVhbSByZXNldCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fQ01TRywgInNjdHBf
Y21zZyIsICJzY3RwIENNU0cgYnVmZmVyIik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9DT1BZQUws
ICJzY3RwX2NwYWwiLCAic2N0cCBjb3B5IGFsbCIpOwotTUFMTE9DX0RFRklORShTQ1RQX01fVlJG
LCAic2N0cF92cmYiLCAic2N0cCB2cmYgc3RydWN0Iik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9J
RkEsICJzY3RwX2lmYSIsICJzY3RwIGlmYSBzdHJ1Y3QiKTsKLU1BTExPQ19ERUZJTkUoU0NUUF9N
X0lGTiwgInNjdHBfaWZuIiwgInNjdHAgaWZuIHN0cnVjdCIpOwotTUFMTE9DX0RFRklORShTQ1RQ
X01fVElNVywgInNjdHBfdGltdyIsICJzY3RwIHRpbWUgYmxvY2siKTsKLU1BTExPQ19ERUZJTkUo
U0NUUF9NX01WUkYsICJzY3RwX212cmYiLCAic2N0cCBtdnJmIHBjYiBsaXN0Iik7Ci1NQUxMT0Nf
REVGSU5FKFNDVFBfTV9JVEVSLCAic2N0cF9pdGVyIiwgInNjdHAgaXRlcmF0b3IgY29udHJvbCIp
OwotTUFMTE9DX0RFRklORShTQ1RQX01fU09DS09QVCwgInNjdHBfc29ja28iLCAic2N0cCBzb2Nr
ZXQgb3B0aW9uIik7Ci1NQUxMT0NfREVGSU5FKFNDVFBfTV9NQ09SRSwgInNjdHBfbWNvcmUiLCAi
c2N0cCBtY29yZSBxdWV1ZSIpOwotI2VuZGlmCi0KLS8qIEdsb2JhbCBOT04tVk5FVCBzdHJ1Y3R1
cmUgdGhhdCBjb250cm9scyB0aGUgaXRlcmF0b3IgKi8KLXN0cnVjdCBpdGVyYXRvcl9jb250cm9s
IHNjdHBfaXRfY3RsOwotCi0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCi1zdGF0aWMgdm9pZAot
c2N0cF9jbGVhbnVwX2l0cXVldWUodm9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQs
ICpuaXQ7Ci0KLQlUQUlMUV9GT1JFQUNIX1NBRkUoaXQsICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhl
YWQsIHNjdHBfbnh0X2l0ciwgbml0KSB7Ci0JCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVM
TCkgewotCQkJKCppdC0+ZnVuY3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7Ci0J
CX0KLQkJVEFJTFFfUkVNT1ZFKCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254
dF9pdHIpOwotCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKLQl9Ci19Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0vKl9fVXNlcnNwYWNlX18gVE9ETyBpZiB3ZSB1c2Ug
dGhyZWFkIGJhc2VkIGl0ZXJhdG9yCi0gKiB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB3YWtl
dXAgd2lsbCBuZWVkIHRvIGNoYW5nZS4KLSAqIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGltZW9f
Y29uZCBmb3IgaWRlbnQgc29fdGltZW8KLSAqIGJ1dCB0aGF0IGlzIG5vdCBzdWZmaWNpZW50IGlm
IHdlIG5lZWQgdG8gdXNlIGFub3RoZXIgaWRlbnQKLSAqIGxpa2Ugd2FrZXVwKCZzY3RwcGNiaW5m
by5pdGVyYXRvcl9ydW5uaW5nKTsKLSAqLwotI2VuZGlmCi0KLXZvaWQKLXNjdHBfd2FrZXVwX2l0
ZXJhdG9yKHZvaWQpCi17Ci0jaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCVdha2VBbGxDb25kaXRpb25WYXJp
YWJsZSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKLSNlbHNlCi0JcHRocmVhZF9jb25k
X2Jyb2FkY2FzdCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKLSNlbmRpZgotI2Vsc2UK
LQl3YWtldXAoJnNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcpOwotI2VuZGlmCi19Ci0KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1zdGF0aWMgdm9pZCAqCi0jZWxzZQotc3RhdGljIHZv
aWQKLSNlbmRpZgotc2N0cF9pdGVyYXRvcl90aHJlYWQodm9pZCAqdiBTQ1RQX1VOVVNFRCkKLXsK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5h
bWUoIlNDVFAgaXRlcmF0b3IiKTsKLSNlbmRpZgotCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0so
KTsKLQkvKiBJbiBGcmVlQlNEIHRoaXMgdGhyZWFkIG5ldmVyIHRlcm1pbmF0ZXMuICovCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlmb3IgKDs7KSB7Ci0jZWxzZQotCXdoaWxlICgoc2N0cF9p
dF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgPT0gMCkgewot
I2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJbXNsZWVwKCZzY3RwX2l0X2N0
bC5pdGVyYXRvcl9ydW5uaW5nLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAm
c2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCwKLSNlbGlmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKLQkJICAgICAgIHNjdHBfaXRfY3Rs
LmlwaV9pdGVyYXRvcl93cV9tdHgsCi0jZW5kaWYKLQkJICAgICAgIDAsICJ3YWl0aW5nX2Zvcl93
b3JrIiwgMCk7Ci0jZWxzZQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJ
U2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXAsICZz
Y3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LCBJTkZJTklURSk7Ci0jZWxzZQotCQlwdGhy
ZWFkX2NvbmRfd2FpdCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwLCAmc2N0cF9pdF9jdGwu
aXBpX2l0ZXJhdG9yX3dxX210eCk7Ci0jZW5kaWYKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCQlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9S
X01VU1RfRVhJVCkgewotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlzY3RwX2l0ZXJhdG9yX3dv
cmtlcigpOwotCX0KLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkvKiBOb3cgdGhpcyB0aHJl
YWQgbmVlZHMgdG8gYmUgdGVybWluYXRlZCAqLwotCXNjdHBfY2xlYW51cF9pdHF1ZXVlKCk7Ci0J
c2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9FWElURUQ7Ci0JU0NU
UF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CXNjdHBfd2FrZXVwX2l0ZXJhdG9yKCk7Ci0JcmV0dXJuIChOVUxMKTsKLSNlbHNlCi0Jd2FrZXVw
KCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyk7Ci0JdGhyZWFkX3Rlcm1pbmF0ZShjdXJyZW50
X3RocmVhZCgpKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JcGFuaWMoIkhtbS4gdGhyZWFkX3Rlcm1p
bmF0ZSgpIGNvbnRpbnVlcy4uLiIpOwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotfQotCi12b2lk
Ci1zY3RwX3N0YXJ0dXBfaXRlcmF0b3Iodm9pZCkKLXsKLQlpZiAoc2N0cF9pdF9jdGwudGhyZWFk
X3Byb2MpIHsKLQkJLyogWW91IG9ubHkgZ2V0IG9uZSAqLwotCQlyZXR1cm47Ci0JfQotCS8qIElu
aXRpYWxpemUgZ2xvYmFsIGxvY2tzIGhlcmUsIHRodXMgb25seSBvbmNlLiAqLwotCVNDVFBfSVRF
UkFUT1JfTE9DS19JTklUKCk7Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfSU5JVCgpOwotCVRBSUxR
X0lOSVQoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA3MDEwMDAKLQlrdGhyZWFkX2NyZWF0ZShzY3Rw
X2l0ZXJhdG9yX3RocmVhZCwKLSNlbHNlCi0Ja3Byb2NfY3JlYXRlKHNjdHBfaXRlcmF0b3JfdGhy
ZWFkLAotI2VuZGlmCi0JICAgICAgICAgICAgICh2b2lkICopTlVMTCwKLQkgICAgICAgICAgICAg
JnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLAotCSAgICAgICAgICAgICBSRlBST0MsCi0JICAgICAg
ICAgICAgIFNDVFBfS1RIUkVBRF9QQUdFUywKLQkgICAgICAgICAgICAgU0NUUF9LVFJIRUFEX05B
TUUpOwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0Ja2VybmVsX3RocmVhZF9zdGFydCgodGhy
ZWFkX2NvbnRpbnVlX3Qpc2N0cF9pdGVyYXRvcl90aHJlYWQsIE5VTEwsICZzY3RwX2l0X2N0bC50
aHJlYWRfcHJvYyk7Ci0jZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaWYgKHNjdHBfdXNl
cnNwYWNlX3RocmVhZF9jcmVhdGUoJnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCAmc2N0cF9pdGVy
YXRvcl90aHJlYWQpKSB7Ci0JCVNDVFBfUFJJTlRGKCJFUlJPUjogQ3JlYXRpbmcgc2N0cF9pdGVy
YXRvcl90aHJlYWQgZmFpbGVkLlxuIik7Ci0JfQotI2VuZGlmCi19Ci0KLSNpZmRlZiBJTkVUNgot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotLyogX19Vc2Vyc3BhY2VfXyBUT0RPLiBzdHJ1
Y3QgaW42X2lmYWRkciBpcyBkZWZpbmVkIGluIHN5cy9uZXRpbmV0Ni9pbjZfdmFyLmgKLSAgIGlw
Nl91c2VfZGVwcmVjYXRlZCBpcyBkZWZpbmVkIGFzICBpbnQgaXA2X3VzZV9kZXByZWNhdGVkID0g
MTsgaW4gL3NyYy9zeXMvbmV0aW5ldDYvaW42X3Byb3RvLmMKLSAqLwotdm9pZAotc2N0cF9nYXRo
ZXJfaW50ZXJuYWxfaWZhX2ZsYWdzKHN0cnVjdCBzY3RwX2lmYSAqaWZhKQotewotICAgIHJldHVy
bjsgLyogc3R1YiAqLwotfQotI2Vsc2UKLXZvaWQKLXNjdHBfZ2F0aGVyX2ludGVybmFsX2lmYV9m
bGFncyhzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsK
LQotCWlmYTYgPSAoc3RydWN0IGluNl9pZmFkZHIgKilpZmEtPmlmYTsKLQlpZmEtPmZsYWdzID0g
aWZhNi0+aWE2X2ZsYWdzOwotCWlmICghTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlcHJlY2F0ZWQp
KSB7Ci0JCWlmIChpZmEtPmZsYWdzICYKLQkJICAgIElONl9JRkZfREVQUkVDQVRFRCkgewotCQkJ
aWZhLT5sb2NhbGlmYV9mbGFncyB8PSBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRTsKLQkJfSBlbHNl
IHsKLQkJCWlmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOwot
CQl9Ci0JfSBlbHNlIHsKLQkJaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9V
TlVTRUFCTEU7Ci0JfQotCWlmIChpZmEtPmZsYWdzICYKLQkgICAgKElONl9JRkZfREVUQUNIRUQg
fAotCSAgICAgSU42X0lGRl9BTllDQVNUIHwKLQkgICAgIElONl9JRkZfTk9UUkVBRFkpKSB7Ci0J
CWlmYS0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0JfSBlbHNl
IHsKLQkJaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0J
fQotfQotI2VuZGlmIC8qIF9fVXNlcnNwYWNlX18gKi8KLSNlbmRpZiAvKiBJTkVUNiAqLwotCi0K
LSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotc3RhdGljIHVpbnQzMl90Ci1zY3RwX2lzX2Rl
c2lyZWRfaW50ZXJmYWNlX3R5cGUoc3RydWN0IGlmbmV0ICppZm4pCi17Ci0JaW50IHJlc3VsdDsK
LQotCS8qIGNoZWNrIHRoZSBpbnRlcmZhY2UgdHlwZSB0byBzZWUgaWYgaXQncyBvbmUgd2UgY2Fy
ZSBhYm91dCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXN3aXRjaChpZm5ldF90eXBlKGlm
bikpIHsKLSNlbHNlCi0Jc3dpdGNoIChpZm4tPmlmX3R5cGUpIHsKLSNlbmRpZgotCWNhc2UgSUZU
X0VUSEVSOgotCWNhc2UgSUZUX0lTTzg4MDIzOgotCWNhc2UgSUZUX0lTTzg4MDI0OgotCWNhc2Ug
SUZUX0lTTzg4MDI1OgotCWNhc2UgSUZUX0lTTzg4MDI2OgotCWNhc2UgSUZUX1NUQVJMQU46Ci0J
Y2FzZSBJRlRfUDEwOgotCWNhc2UgSUZUX1A4MDoKLQljYXNlIElGVF9IWToKLQljYXNlIElGVF9G
RERJOgotCWNhc2UgSUZUX1hFVEhFUjoKLQljYXNlIElGVF9JU0ROQkFTSUM6Ci0JY2FzZSBJRlRf
SVNETlBSSU1BUlk6Ci0JY2FzZSBJRlRfUFRQU0VSSUFMOgotCWNhc2UgSUZUX09USEVSOgotCWNh
c2UgSUZUX1BQUDoKLQljYXNlIElGVF9MT09QOgotCWNhc2UgSUZUX1NMSVA6Ci0JY2FzZSBJRlRf
R0lGOgotCWNhc2UgSUZUX0wyVkxBTjoKLQljYXNlIElGVF9TVEY6Ci0jaWYgIWRlZmluZWQoX19B
UFBMRV9fKQotCWNhc2UgSUZUX0lQOgotCWNhc2UgSUZUX0lQT1ZFUkNETEM6Ci0JY2FzZSBJRlRf
SVBPVkVSQ0xBVzoKLQljYXNlIElGVF9QUk9QVklSVFVBTDogLyogTmV0R3JhcGggVmlydHVhbCB0
b28gKi8KLQljYXNlIElGVF9WSVJUVUFMSVBBRERSRVNTOgotI2VuZGlmCi0JCXJlc3VsdCA9IDE7
Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJlc3VsdCA9IDA7Ci0JfQotCi0JcmV0dXJuIChyZXN1
bHQpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLWludAotc2N0cF9pc192
bXdhcmVfaW50ZXJmYWNlKHN0cnVjdCBpZm5ldCAqaWZuKQotewotCXJldHVybiAoc3RybmNtcChp
Zm5ldF9uYW1lKGlmbiksICJ2bW5ldCIsIDUpID09IDApOwotfQotI2VuZGlmCi0KLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWZkZWYgTUFMTE9DCi0jdW5kZWYgTUFMTE9D
Ci0jZGVmaW5lIE1BTExPQyh4KSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKHgpKQot
I2VuZGlmCi0jaWZkZWYgRlJFRQotI3VuZGVmIEZSRUUKLSNkZWZpbmUgRlJFRSh4KSBIZWFwRnJl
ZShHZXRQcm9jZXNzSGVhcCgpLCAwLCAoeCkpCi0jZW5kaWYKLXN0YXRpYyB2b2lkCi1zY3RwX2lu
aXRfaWZuc19mb3JfdnJmKGludCB2cmZpZCkKLXsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmlu
ZWQoSU5FVDYpCi0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQlEV09SRCBFcnIsIEFkYXB0
ZXJBZGRyc1NpemU7Ci0JUElQX0FEQVBURVJfQUREUkVTU0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFw
dDsKLQlQSVBfQURBUFRFUl9VTklDQVNUX0FERFJFU1MgcFVuaWNhc3Q7Ci0jZW5kaWYKLQotI2lm
ZGVmIElORVQKLQlBZGFwdGVyQWRkcnNTaXplID0gMDsKLQotCWlmICgoRXJyID0gR2V0QWRhcHRl
cnNBZGRyZXNzZXMoQUZfSU5FVCwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAh
PSAwKSB7Ci0JCWlmICgoRXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBF
UlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgewotCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJz
VjRBZGRyZXNzZXMoKSBzaXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsK
LQkJCVNDVFBfUFJJTlRGKCJlcnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIs
IEFkYXB0ZXJBZGRyc1NpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCi0JLyogQWxsb2NhdGUg
bWVtb3J5IGZyb20gc2l6aW5nIGluZm9ybWF0aW9uICovCi0JaWYgKChwQWRhcHRlckFkZHJzID0g
KFBJUF9BREFQVEVSX0FERFJFU1NFUykgR2xvYmFsQWxsb2MoR1BUUiwgQWRhcHRlckFkZHJzU2l6
ZSkpID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxu
Iik7Ci0JCXJldHVybjsKLQl9Ci0JLyogR2V0IGFjdHVhbCBhZGFwdGVyIGluZm9ybWF0aW9uICov
Ci0JaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVULCAwLCBOVUxMLCBwQWRh
cHRlckFkZHJzLCAmQWRhcHRlckFkZHJzU2l6ZSkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKLQkJU0NU
UF9QUklOVEYoIkdldEFkYXB0ZXJzVjRBZGRyZXNzZXMoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2Rl
ICVkXG4iLCBFcnIpOwotCQlGUkVFKHBBZGFwdGVyQWRkcnMpOwotCQlyZXR1cm47Ci0JfQotCS8q
IEVudW1lcmF0ZSB0aHJvdWdoIGVhY2ggcmV0dXJuZWQgYWRhcHRlciBhbmQgc2F2ZSBpdHMgaW5m
b3JtYXRpb24gKi8KLQlmb3IgKHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0
ID0gcEFkYXB0LT5OZXh0KSB7Ci0JCWlmIChwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4
MDIxMSB8fCBwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBFX0VUSEVSTkVUX0NTTUFDRCkgewotCQkJ
Zm9yIChwVW5pY2FzdCA9IHBBZGFwdC0+Rmlyc3RVbmljYXN0QWRkcmVzczsgcFVuaWNhc3Q7IHBV
bmljYXN0ID0gcFVuaWNhc3QtPk5leHQpIHsKLQkJCQlpZiAoSU40X0lTTElOS0xPQ0FMX0FERFJF
U1MoJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRy
KSktPnNpbl9hZGRyKSkpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXNjdHBfaWZhID0g
c2N0cF9hZGRfYWRkcl90b192cmYoMCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIE5VTEwsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHQtPklm
SW5kZXgsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocEFkYXB0LT5JZlR5
cGUgPT0gSUZfVFlQRV9JRUVFODAyMTEpP01JQl9JRl9UWVBFX0VUSEVSTkVUOnBBZGFwdC0+SWZU
eXBlLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5BZGFwdGVy
TmFtZSwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0JCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRy
LAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5GbGFncywKLQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwotCQkJCWlmIChzY3RwX2lmYSkg
ewotCQkJCQlzY3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7
Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCUZSRUUocEFkYXB0ZXJBZGRycyk7Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCUFkYXB0ZXJBZGRyc1NpemUgPSAwOwotCi0JaWYgKChFcnIgPSBHZXRBZGFw
dGVyc0FkZHJlc3NlcyhBRl9JTkVUNiwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUp
KSAhPSAwKSB7Ci0JCWlmICgoRXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAh
PSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgewotCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0
ZXJzVjZBZGRyZXNzZXMoKSBzaXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJy
KTsKLQkJCVNDVFBfUFJJTlRGKCJlcnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBF
cnIsIEFkYXB0ZXJBZGRyc1NpemUpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCS8qIEFsbG9jYXRl
IG1lbW9yeSBmcm9tIHNpemluZyBpbmZvcm1hdGlvbiAqLwotCWlmICgocEFkYXB0ZXJBZGRycyA9
IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1Np
emUpKSA9PSBOVUxMKSB7Ci0JCVNDVFBfUFJJTlRGKCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFc
biIpOwotCQlyZXR1cm47Ci0JfQotCS8qIEdldCBhY3R1YWwgYWRhcHRlciBpbmZvcm1hdGlvbiAq
LwotCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIDAsIE5VTEwsIHBB
ZGFwdGVyQWRkcnMsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VTUykgewotCQlT
Q1RQX1BSSU5URigiR2V0QWRhcHRlcnNWNkFkZHJlc3NlcygpIGZhaWxlZCB3aXRoIGVycm9yIGNv
ZGUgJWRcbiIsIEVycik7Ci0JCUZSRUUocEFkYXB0ZXJBZGRycyk7Ci0JCXJldHVybjsKLQl9Ci0J
LyogRW51bWVyYXRlIHRocm91Z2ggZWFjaCByZXR1cm5lZCBhZGFwdGVyIGFuZCBzYXZlIGl0cyBp
bmZvcm1hdGlvbiAqLwotCWZvciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRh
cHQgPSBwQWRhcHQtPk5leHQpIHsKLQkJaWYgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVF
RTgwMjExIHx8IHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfRVRIRVJORVRfQ1NNQUNEKSB7Ci0J
CQlmb3IgKHBVbmljYXN0ID0gcEFkYXB0LT5GaXJzdFVuaWNhc3RBZGRyZXNzOyBwVW5pY2FzdDsg
cFVuaWNhc3QgPSBwVW5pY2FzdC0+TmV4dCkgewotCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRk
cl90b192cmYoMCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0J
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHQtPklwdjZJZkluZGV4LAot
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBBZGFwdC0+SWZUeXBlID09IElG
X1RZUEVfSUVFRTgwMjExKT9NSUJfSUZfVFlQRV9FVEhFUk5FVDpwQWRhcHQtPklmVHlwZSwKLQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdC0+QWRhcHRlck5hbWUsCi0J
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcFVuaWNhc3QtPkFkZHJlc3MubHBTb2NrYWRkciwKLQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBBZGFwdC0+RmxhZ3MsCi0JCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKLQkJCQlpZiAoc2N0cF9pZmEpIHsKLQkJCQkJ
c2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOwotCQkJCX0K
LQkJCX0KLQkJfQotCX0KLQlGUkVFKHBBZGFwdGVyQWRkcnMpOwotI2VuZGlmCi19Ci0jZWxpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1zdGF0aWMgdm9pZAotc2N0cF9pbml0X2lmbnNfZm9yX3Zy
ZihpbnQgdnJmaWQpCi17Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCWlu
dCByYzsKLQlzdHJ1Y3QgaWZhZGRycyAqaWZhLCAqaWZhczsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhOwotCXVpbnQzMl90IGlmYV9mbGFnczsKLQotCXJjID0gZ2V0aWZhZGRycygmaWZhcyk7
Ci0JaWYgKHJjICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLQlmb3IgKGlmYSA9IGlmYXM7IGlmYTsg
aWZhID0gaWZhLT5pZmFfbmV4dCkgewotCQlpZiAoaWZhLT5pZmFfYWRkciA9PSBOVUxMKSB7Ci0J
CQljb250aW51ZTsKLQkJfQotI2lmICFkZWZpbmVkKElORVQpCi0JCWlmIChpZmEtPmlmYV9hZGRy
LT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKLQkJCS8qIG5vbiBpbmV0NiBza2lwICovCi0JCQlj
b250aW51ZTsKLQkJfQotI2VsaWYgIWRlZmluZWQoSU5FVDYpCi0JCWlmIChpZmEtPmlmYV9hZGRy
LT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewotCQkJLyogbm9uIGluZXQgc2tpcCAqLwotCQkJY29u
dGludWU7Ci0JCX0KLSNlbHNlCi0JCWlmICgoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFG
X0lORVQpICYmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpKSB7Ci0JCQkv
KiBub24gaW5ldC9pbmV0NiBza2lwICovCi0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0jaWYg
ZGVmaW5lZChJTkVUNikKLQkJaWYgKChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5F
VDYpICYmCi0JCSAgICBJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopaWZhLT5pZmFfYWRkciktPnNpbjZfYWRkcikpIHsKLQkJCS8qIHNraXAgdW5zcGVjaWZl
ZCBhZGRyZXNzZXMgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElO
RVQpCi0JCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgotCQkgICAg
KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2FkZHIuc19hZGRyID09
IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLQkJaWZhX2ZsYWdzID0gMDsKLQkJc2N0
cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBOVUxMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
X25hbWV0b2luZGV4KGlmYS0+aWZhX25hbWUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFt
ZSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhX2FkZHIsCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWZhX2ZsYWdzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDApOwotCQlpZiAoc2N0cF9pZmEpIHsKLQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAm
PSB+U0NUUF9BRERSX0RFRkVSX1VTRTsKLQkJfQotCX0KLQlmcmVlaWZhZGRycyhpZmFzKTsKLSNl
bmRpZgotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyB2b2lkCi1z
Y3RwX2luaXRfaWZuc19mb3JfdnJmKGludCB2cmZpZCkKLXsKLQkvKiBIZXJlIHdlIG11c3QgYXBw
bHkgQU5ZIGxvY2tzIG5lZWRlZCBieSB0aGUKLQkgKiBJRk4gd2UgYWNjZXNzIGFuZCBhbHNvIG1h
a2Ugc3VyZSB3ZSBsb2NrCi0JICogYW55IElGQSB0aGF0IGV4aXN0cyBhcyB3ZSBmbG9hdCB0aHJv
dWdoIHRoZQotCSAqIGxpc3Qgb2YgSUZBJ3MKLQkgKi8KLQlzdHJ1Y3QgaWZuZXQgKippZm5ldGxp
c3Q7Ci0JdWludDMyX3QgaSwgaiwgY291bnQ7Ci0JY2hhciBuYW1lW1NDVFBfSUZOQU1TSVpdOwot
CXN0cnVjdCBpZm5ldCAqaWZuOwotCXN0cnVjdCBpZmFkZHIgKippZmFkZHJsaXN0OwotCXN0cnVj
dCBpZmFkZHIgKmlmYTsKLQlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKLQlzdHJ1Y3Qgc2N0cF9p
ZmEgKnNjdHBfaWZhOwotCXVpbnQzMl90IGlmYV9mbGFnczsKLQotCWlmIChpZm5ldF9saXN0X2dl
dChJRk5FVF9GQU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKLQkJcmV0dXJu
OwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlpZm4gPSBpZm5ldGxpc3Rb
aV07Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2Vz
KSAmJiBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2UoaWZuKSkgewotCQkJY29udGludWU7Ci0JCX0K
LQkJaWYgKHNjdHBfaXNfZGVzaXJlZF9pbnRlcmZhY2VfdHlwZShpZm4pID09IDApIHsKLQkJCS8q
IG5vbiBkZXNpcmVkIHR5cGUgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChpZm5ldF9nZXRf
YWRkcmVzc19saXN0KGlmbiwgJmlmYWRkcmxpc3QpICE9IDApIHsKLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCWZvciAoaiA9IDA7IGlmYWRkcmxpc3Rbal0gIT0gTlVMTDsgaisrKSB7Ci0JCQlpZmEgPSBp
ZmFkZHJsaXN0W2pdOwotCQkJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgewotCQkJCWNvbnRp
bnVlOwotCQkJfQotCQkJaWYgKChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkg
JiYgKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUNikpIHsKLQkJCQkvKiBub24g
aW5ldC9pbmV0NiBza2lwICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAoaWZhLT5pZmFf
YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJaWYgKElONl9JU19BRERSX1VOU1BF
Q0lGSUVEKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRy
KSkgewotCQkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCWNvbnRpbnVl
OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopaWZh
LT5pZmFfYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7Ci0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLQkJCX0KLQkJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZf
SU5FVDYpIHsKLQkJCQlpZmE2ID0gKHN0cnVjdCBpbjZfaWZhZGRyICopaWZhOwotCQkJCWlmYV9m
bGFncyA9IGlmYTYtPmlhNl9mbGFnczsKLQkJCX0gZWxzZSB7Ci0JCQkJaWZhX2ZsYWdzID0gMDsK
LQkJCX0KLQkJCXNucHJpbnRmKG5hbWUsIFNDVFBfSUZOQU1TSVosICIlcyVkIiwgaWZuZXRfbmFt
ZShpZm4pLCBpZm5ldF91bml0KGlmbikpOwotCQkJc2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3Rv
X3ZyZih2cmZpZCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilp
Zm4sIC8qIFhYWCAqLwotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF9p
bmRleChpZm4pLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF90eXBl
KGlmbiksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZhLCAvKiBYWFggKi8KLQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfYWRkciwKLQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWZhX2ZsYWdzLAotCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwKTsKLQkJCWlmIChzY3RwX2lmYSkgewotCQkJCXNjdHBfaWZhLT5sb2Nh
bGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVSX1VTRTsKLQkJCX0KLQkJfQotCQlpZm5ldF9m
cmVlX2FkZHJlc3NfbGlzdChpZmFkZHJsaXN0KTsKLQl9Ci0JaWZuZXRfbGlzdF9mcmVlKGlmbmV0
bGlzdCk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi1zdGF0aWMgdm9p
ZAotc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJmaWQpCi17Ci0JLyogSGVyZSB3ZSBtdXN0
IGFwcGx5IEFOWSBsb2NrcyBuZWVkZWQgYnkgdGhlCi0JICogSUZOIHdlIGFjY2VzcyBhbmQgYWxz
byBtYWtlIHN1cmUgd2UgbG9jawotCSAqIGFueSBJRkEgdGhhdCBleGlzdHMgYXMgd2UgZmxvYXQg
dGhyb3VnaCB0aGUKLQkgKiBsaXN0IG9mIElGQSdzCi0JICovCi0Jc3RydWN0IGlmbmV0ICppZm47
Ci0Jc3RydWN0IGlmYWRkciAqaWZhOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0JdWlu
dDMyX3QgaWZhX2ZsYWdzOwotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IGluNl9pZmFkZHIgKmlmYTY7
Ci0jZW5kaWYKLQotCUlGTkVUX1JMT0NLKCk7Ci0JVEFJTFFfRk9SRUFDSChpZm4sICZNT0RVTEVf
R0xPQkFMKGlmbmV0KSwgaWZfbGluaykgewotCQlpZiAoc2N0cF9pc19kZXNpcmVkX2ludGVyZmFj
ZV90eXBlKGlmbikgPT0gMCkgewotCQkJLyogbm9uIGRlc2lyZWQgdHlwZSAqLwotCQkJY29udGlu
dWU7Ci0JCX0KLSNpZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwICYmIF9fRnJlZUJTRF92
ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMAotCQlJRl9BRERS
X1JMT0NLKGlmbik7Ci0jZWxzZQotCQlJRl9BRERSX0xPQ0soaWZuKTsKLSNlbmRpZgotCQlUQUlM
UV9GT1JFQUNIKGlmYSwgJmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5rKSB7Ci0JCQlpZiAoaWZh
LT5pZmFfYWRkciA9PSBOVUxMKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzd2l0Y2ggKGlm
YS0+aWZhX2FkZHItPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoK
LQkJCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2FkZHIu
c19hZGRyID09IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWJyZWFrOwotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJaWYgKElONl9JU19BRERSX1VO
U1BFQ0lGSUVEKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9h
ZGRyKSkgewotCQkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCi0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLQkJCQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCXN3aXRjaCAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYg
SU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCWlmYV9mbGFncyA9IDA7Ci0JCQkJYnJlYWs7Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlpZmE2ID0gKHN0cnVj
dCBpbjZfaWZhZGRyICopaWZhOwotCQkJCWlmYV9mbGFncyA9IGlmYTYtPmlhNl9mbGFnczsKLQkJ
CQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQlpZmFfZmxhZ3MgPSAwOwotCQkJCWJy
ZWFrOwotCQkJfQotCQkJc2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpZm4sCi0JCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmbi0+aWZfaW5kZXgsCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmbi0+aWZfdHlwZSwKLQkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWZuLT5pZl94bmFtZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHZvaWQgKilpZmEsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
YS0+aWZhX2FkZHIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmYV9mbGFn
cywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Ci0JCQlpZiAoc2N0cF9p
ZmEpIHsKLQkJCQlzY3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9V
U0U7Ci0JCQl9Ci0JCX0KLSNpZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwICYmIF9fRnJl
ZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMAotCQlJ
Rl9BRERSX1JVTkxPQ0soaWZuKTsKLSNlbHNlCi0JCUlGX0FERFJfVU5MT0NLKGlmbik7Ci0jZW5k
aWYKLQl9Ci0JSUZORVRfUlVOTE9DSygpOwotfQotI2VuZGlmCi0KLXZvaWQKLXNjdHBfaW5pdF92
cmZfbGlzdChpbnQgdnJmaWQpCi17Ci0JaWYgKHZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKQotCQkv
KiBjYW4ndCBkbyB0aGF0ICovCi0JCXJldHVybjsKLQotCS8qIERvbid0IGNhcmUgYWJvdXQgcmV0
dXJuIGhlcmUgKi8KLQkodm9pZClzY3RwX2FsbG9jYXRlX3ZyZih2cmZpZCk7Ci0KLQkvKiBOb3cg
d2UgbmVlZCB0byBidWlsZCBhbGwgdGhlIGlmbidzCi0JICogZm9yIHRoaXMgdnJmIGFuZCB0aGVy
ZSBhZGRyZXNzZXMKLQkgKi8KLQlzY3RwX2luaXRfaWZuc19mb3JfdnJmKHZyZmlkKTsKLX0KLQot
dm9pZAotc2N0cF9hZGRyX2NoYW5nZShzdHJ1Y3QgaWZhZGRyICppZmEsIGludCBjbWQpCi17Ci0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotICAgICAgICByZXR1cm47Ci0jZWxzZQotCXVpbnQz
Ml90IGlmYV9mbGFncyA9IDA7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFs
aXplZCkgPT0gMCkgewotCQlyZXR1cm47Ci0JfQotCS8qIEJTRCBvbmx5IGhhcyBvbmUgVlJGLCBp
ZiB0aGlzIGNoYW5nZXMKLQkgKiB3ZSB3aWxsIG5lZWQgdG8gaG9vayBpbiB0aGUgcmlnaHQKLQkg
KiB0aGluZ3MgaGVyZSB0byBnZXQgdGhlIGlkIHRvIHBhc3MgdG8KLQkgKiB0aGUgYWRkcmVzcyBt
YW5hZ2VtZW50IHJvdXRpbmUuCi0JICovCi0JaWYgKFNDVFBfQkFTRV9WQVIoZmlyc3RfdGltZSkg
PT0gMCkgewotCQkvKiBTcGVjaWFsIHRlc3QgdG8gc2VlIGlmIG15IDo6MSB3aWxsIHNob3d1cCB3
aXRoIHRoaXMgKi8KLQkJU0NUUF9CQVNFX1ZBUihmaXJzdF90aW1lKSA9IDE7Ci0JCXNjdHBfaW5p
dF9pZm5zX2Zvcl92cmYoU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQl9Ci0KLQlpZiAoKGNtZCAhPSBS
VE1fQUREKSAmJiAoY21kICE9IFJUTV9ERUxFVEUpKSB7Ci0JCS8qIGRvbid0IGtub3cgd2hhdCB0
byBkbyB3aXRoIHRoaXMgKi8KLQkJcmV0dXJuOwotCX0KLQotCWlmIChpZmEtPmlmYV9hZGRyID09
IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90
eXBlKGlmYS0+aWZhX2lmcCkgPT0gMCkgewotCQkvKiBub24gZGVzaXJlZCB0eXBlICovCi0JCXJl
dHVybjsKLQl9Ci0Jc3dpdGNoIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJ
TkVUCi0JY2FzZSBBRl9JTkVUOgotCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilpZmEtPmlm
YV9hZGRyKS0+c2luX2FkZHIuc19hZGRyID09IDApIHsKLQkJCXJldHVybjsKLQkJfQotCQlicmVh
azsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaWZhX2ZsYWdzID0g
KChzdHJ1Y3QgaW42X2lmYWRkciAqKWlmYSktPmlhNl9mbGFnczsKLQkJaWYgKElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2lu
Nl9hZGRyKSkgewotCQkJLyogc2tpcCB1bnNwZWNpZmVkIGFkZHJlc3NlcyAqLwotCQkJcmV0dXJu
OwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogbm9uIGluZXQvaW5ldDYg
c2tpcCAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChjbWQgPT0gUlRNX0FERCkgewotCQkodm9pZClz
Y3RwX2FkZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsICh2b2lkICopaWZhLT5pZmFf
aWZwLAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZm5ldF9pbmRleChpZmEtPmlmYV9pZnApLCBpZm5ldF90eXBlKGlmYS0+aWZhX2lmcCksIGlm
bmV0X25hbWUoaWZhLT5pZmFfaWZwKSwKLSNlbHNlCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmYS0+aWZhX2lmcC0+aWZfaW5kZXgsIGlmYS0+aWZhX2lmcC0+aWZfdHlwZSwgaWZhLT5p
ZmFfaWZwLT5pZl94bmFtZSwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAo
dm9pZCAqKWlmYSwgaWZhLT5pZmFfYWRkciwgaWZhX2ZsYWdzLCAxKTsKLQl9IGVsc2UgewotCi0J
CXNjdHBfZGVsX2FkZHJfZnJvbV92cmYoU0NUUF9ERUZBVUxUX1ZSRklELCBpZmEtPmlmYV9hZGRy
LAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIGlmbmV0
X2luZGV4KGlmYS0+aWZhX2lmcCksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZuZXRfbmFt
ZShpZmEtPmlmYV9pZnApKTsKLSNlbHNlCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5p
ZmFfaWZwLT5pZl9pbmRleCwKLQkJICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9pZnAt
PmlmX3huYW1lKTsKLSNlbmRpZgotCi0JCS8qIFdlIGRvbid0IGJ1bXAgcmVmY291bnQgaGVyZSBz
byB3aGVuIGl0IGNvbXBsZXRlcwotCQkgKiB0aGUgZmluYWwgZGVsZXRlIHdpbGwgaGFwcGVuLgot
CQkgKi8KLQl9Ci0jZW5kaWYKLX0KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi12b2lkCi1z
Y3RwX2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhpbnQgKCpwcmVkKShzdHJ1Y3QgaWZuZXQgKiksIGlu
dCBhZGQpCi17Ci0Jc3RydWN0IGlmbmV0ICppZm47Ci0Jc3RydWN0IGlmYWRkciAqaWZhOwotCi0J
SUZORVRfUkxPQ0soKTsKLQlUQUlMUV9GT1JFQUNIKGlmbiwgJk1PRFVMRV9HTE9CQUwoaWZuZXQp
LCBpZl9saW5rKSB7Ci0JCWlmICghKCpwcmVkKShpZm4pKSB7Ci0JCQljb250aW51ZTsKLQkJfQot
CQlUQUlMUV9GT1JFQUNIKGlmYSwgJmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5rKSB7Ci0JCQlz
Y3RwX2FkZHJfY2hhbmdlKGlmYSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUpOwotCQl9Ci0J
fQotCUlGTkVUX1JVTkxPQ0soKTsKLX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
dm9pZAotc2N0cF9hZGRfb3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3RydWN0IGlmbmV0
ICopLCBpbnQgYWRkKQotewotCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKLQlzdHJ1Y3QgaWZh
ZGRyICoqaWZhZGRybGlzdDsKLQl1aW50MzJfdCBpLCBqLCBjb3VudDsKLQotCWlmIChpZm5ldF9s
aXN0X2dldChJRk5FVF9GQU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKLQkJ
cmV0dXJuOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlpZiAoISgqcHJl
ZCkoaWZuZXRsaXN0W2ldKSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGlmbmV0X2dldF9h
ZGRyZXNzX2xpc3QoaWZuZXRsaXN0W2ldLCAmaWZhZGRybGlzdCkgIT0gMCkgewotCQkJY29udGlu
dWU7Ci0JCX0KLQkJZm9yIChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBqKyspIHsKLQkJ
CXNjdHBfYWRkcl9jaGFuZ2UoaWZhZGRybGlzdFtqXSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxF
VEUpOwotCQl9Ci0JCWlmbmV0X2ZyZWVfYWRkcmVzc19saXN0KGlmYWRkcmxpc3QpOwotCX0KLQlp
Zm5ldF9saXN0X2ZyZWUoaWZuZXRsaXN0KTsKLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQotc3RydWN0
IG1idWYgKgotc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHVuc2lnbmVkIGludCBzcGFjZV9uZWVkZWQs
IGludCB3YW50X2hlYWRlciwKLQkJICAgICAgaW50IGhvdywgaW50IGFsbG9uZWJ1ZiwgaW50IHR5
cGUpCi17Ci0gICAgc3RydWN0IG1idWYgKm0gPSBOVUxMOwotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQotICAvKgotICAgKiBfX1VzZXJzcGFjZV9fCi0gICAqIFVzaW5nIG1fY2xnZXQsIHdo
aWNoIGNyZWF0ZXMgYW5kIG1idWYgYW5kIGEgY2x1c3RlciBhbmQKLSAgICogaG9va3MgdGhvc2Ug
dG9nZXRoZXIuCi0gICAqIFRPRE86IFRoaXMgZG9lcyBub3QgeWV0IGhhdmUgZnVuY3Rpb25hbGl0
eSBmb3IganVtYm8gcGFja2V0cy4KLSAgICoKLSAgICovCi0KLQlpbnQgbWJ1Zl90aHJlc2hvbGQ7
Ci0JaWYgKHdhbnRfaGVhZGVyKSB7Ci0JCU1HRVRIRFIobSwgaG93LCB0eXBlKTsKLQl9IGVsc2Ug
ewotCQlNR0VUKG0sIGhvdywgdHlwZSk7Ci0JfQotCWlmIChtID09IE5VTEwpIHsKLQkJcmV0dXJu
IChOVUxMKTsKLQl9Ci0JaWYgKGFsbG9uZWJ1ZiA9PSAwKQotCQltYnVmX3RocmVzaG9sZCA9IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCk7Ci0JZWxzZQotCQltYnVm
X3RocmVzaG9sZCA9IDE7Ci0KLQotCWlmICgoaW50KXNwYWNlX25lZWRlZCA+ICgoKG1idWZfdGhy
ZXNob2xkIC0gMSkgKiBNTEVOKSArIE1ITEVOKSkgewotCQlNQ0xHRVQobSwgaG93KTsKLQkJaWYg
KG0gPT0gTlVMTCkgewotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCi0JCWlmIChTQ1RQX0JVRl9J
U19FWFRFTkRFRChtKSA9PSAwKSB7Ci0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5V
TEwpOwotCQl9Ci0JfQotCVNDVFBfQlVGX0xFTihtKSA9IDA7Ci0JU0NUUF9CVUZfTkVYVChtKSA9
IFNDVFBfQlVGX05FWFRfUEtUKG0pID0gTlVMTDsKLQotCS8qIF9fVXNlcnNwYWNlX18KLQkgKiBD
aGVjayBpZiBhbnl0aGluZyBuZWVkIHRvIGJlIGRvbmUgdG8gZW5zdXJlIGxvZ2dpbmcgd29ya3MK
LQkgKi8KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9s
b2dfbWIobSwgU0NUUF9NQlVGX0lBTExPQyk7Ci0JfQotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDExMDAwNTIKLQltID0gIG1fZ2V0bTIo
TlVMTCwgc3BhY2VfbmVlZGVkLCBob3csIHR5cGUsIHdhbnRfaGVhZGVyID8gTV9QS1RIRFIgOiAw
KTsKLQlpZiAobSA9PSBOVUxMKSB7Ci0JCS8qIGJhZCwgbm8gbWVtb3J5ICovCi0JCXJldHVybiAo
bSk7Ci0JfQotCWlmIChhbGxvbmVidWYpIHsKLQkJaWYgKFNDVFBfQlVGX1NJWkUobSkgPCBzcGFj
ZV9uZWVkZWQpIHsKLQkJCW1fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JfQot
CWlmIChTQ1RQX0JVRl9ORVhUKG0pKSB7Ci0JCXNjdHBfbV9mcmVlbShTQ1RQX0JVRl9ORVhUKG0p
KTsKLQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7Ci0JfQotI2lmZGVmIFNDVFBfTUJVRl9MT0dH
SU5HCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJV
Rl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9DKTsK
LQl9Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID4gNjAyMDAwCi0JbSA9ICBtX2dldG0yKE5VTEwsIHNwYWNlX25lZWRlZCwgaG93LCB0eXBl
LCB3YW50X2hlYWRlciA/IE1fUEtUSERSIDogMCk7Ci0JaWYgKG0gPT0gTlVMTCkgewotCQkvKiBi
YWQsIG5vIG1lbW9yeSAqLwotCQlyZXR1cm4gKG0pOwotCX0KLQlpZiAoYWxsb25lYnVmKSB7Ci0J
CWludCBzaXo7Ci0JCWlmIChTQ1RQX0JVRl9JU19FWFRFTkRFRChtKSkgewotCQkJc2l6ID0gU0NU
UF9CVUZfRVhURU5EX1NJWkUobSk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAod2FudF9oZWFkZXIpCi0J
CQkJc2l6ID0gTUhMRU47Ci0JCQllbHNlCi0JCQkJc2l6ID0gTUxFTjsKLQkJfQotCQlpZiAoc2l6
IDwgc3BhY2VfbmVlZGVkKSB7Ci0JCQltX2ZyZWVtKG0pOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJ
fQotCX0KLQlpZiAoU0NUUF9CVUZfTkVYVChtKSkgewotCQlzY3RwX21fZnJlZW0oU0NUUF9CVUZf
TkVYVChtKSk7Ci0JCVNDVFBfQlVGX05FWFQobSkgPSBOVUxMOwotCX0KLSNpZmRlZiBTQ1RQX01C
VUZfTE9HR0lORwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWIobSwgU0NUUF9NQlVGX0lB
TExPQyk7Ci0JfQotI2VuZGlmCi0jZWxzZQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDYwMTAwMAotCWludCBhbG9jX3NpemU7Ci0JaW50IGluZGV4ID0g
MDsKLSNlbmRpZgotCWludCBtYnVmX3RocmVzaG9sZDsKLQlpZiAod2FudF9oZWFkZXIpIHsKLQkJ
TUdFVEhEUihtLCBob3csIHR5cGUpOwotCX0gZWxzZSB7Ci0JCU1HRVQobSwgaG93LCB0eXBlKTsK
LQl9Ci0JaWYgKG0gPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoYWxsb25l
YnVmID09IDApCi0JCW1idWZfdGhyZXNob2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21idWZf
dGhyZXNob2xkX2NvdW50KTsKLQllbHNlCi0JCW1idWZfdGhyZXNob2xkID0gMTsKLQotCi0JaWYg
KHNwYWNlX25lZWRlZCA+ICgoKG1idWZfdGhyZXNob2xkIC0gMSkgKiBNTEVOKSArIE1ITEVOKSkg
ewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDYwMTAw
MAotCXRyeV9hZ2FpbjoKLQkJaW5kZXggPSA0OwotCQlpZiAoc3BhY2VfbmVlZGVkIDw9IE1DTEJZ
VEVTKSB7Ci0JCQlhbG9jX3NpemUgPSBNQ0xCWVRFUzsKLQkJfSBlbHNlIHsKLQkJCWFsb2Nfc2l6
ZSA9IE1KVU1QQUdFU0laRTsKLQkJCWluZGV4ID0gNTsKLQkJfQotCQltX2NsamdldChtLCBob3cs
IGFsb2Nfc2l6ZSk7Ci0JCWlmIChtID09IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0K
LQkJaWYgKFNDVFBfQlVGX0lTX0VYVEVOREVEKG0pID09IDApIHsKLQkJCWlmICgoYWxvY19zaXpl
ICE9IE1DTEJZVEVTKSAmJgotCQkJICAgKGFsbG9uZWJ1ZiA9PSAwKSkgewotCQkJCWFsb2Nfc2l6
ZSAtPSAxMDsKLQkJCQlnb3RvIHRyeV9hZ2FpbjsKLQkJCX0KLQkJCXNjdHBfbV9mcmVlbShtKTsK
LQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLSNlbHNlCi0JCU1DTEdFVChtLCBob3cpOwotCQlpZiAo
bSA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChTQ1RQX0JVRl9JU19F
WFRFTkRFRChtKSA9PSAwKSB7Ci0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlyZXR1cm4gKE5VTEwp
OwotCQl9Ci0jZW5kaWYKLQl9Ci0JU0NUUF9CVUZfTEVOKG0pID0gMDsKLQlTQ1RQX0JVRl9ORVhU
KG0pID0gU0NUUF9CVUZfTkVYVF9QS1QobSkgPSBOVUxMOwotI2lmZGVmIFNDVFBfTUJVRl9MT0dH
SU5HCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJV
Rl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19tYihtLCBTQ1RQX01CVUZfSUFMTE9DKTsK
LQl9Ci0jZW5kaWYKLSNlbmRpZgotCXJldHVybiAobSk7Ci19Ci0KLQotI2lmZGVmIFNDVFBfUEFD
S0VUX0xPR0dJTkcKLXZvaWQKLXNjdHBfcGFja2V0X2xvZyhzdHJ1Y3QgbWJ1ZiAqbSkKLXsKLQlp
bnQgKmxlbmF0LCB0aGlzb25lOwotCXZvaWQgKmNvcHl0bzsKLQl1aW50MzJfdCAqdGlja190b2Nr
OwotCWludCBsZW5ndGg7Ci0JaW50IHRvdGFsX2xlbjsKLQlpbnQgZ3JhYmJlZF9sb2NrID0gMDsK
LQlpbnQgdmFsdWUsIG5ld3ZhbCwgdGhpc2VuZCwgdGhpc2JlZ2luOwotCS8qCi0JICogQnVmZmVy
IGxheW91dC4KLQkgKiAtc2l6ZW9mIHRoaXMgZW50cnkgKHRvdGFsX2xlbikKLQkgKiAtcHJldmlv
dXMgZW5kICAgICAgKHZhbHVlKQotCSAqIC10aWNrcyBvZiBsb2cgICAgICAodGlja3MpCi0JICog
byAtaXAgcGFja2V0Ci0JICogbyAtYXMgbG9nZ2VkCi0JICogLSB3aGVyZSB0aGlzIHN0YXJ0ZWQg
KHRoaXNiZWdpbikKLQkgKiB4IDwtLWVuZCBwb2ludHMgaGVyZQotCSAqLwotCWxlbmd0aCA9IFND
VFBfSEVBREVSX0xFTihtKTsKLQl0b3RhbF9sZW4gPSBTQ1RQX1NJWkUzMigobGVuZ3RoICsgKDQg
KiBzaXplb2YoaW50KSkpKTsKLQkvKiBMb2cgYSBwYWNrZXQgdG8gdGhlIGJ1ZmZlci4gKi8KLQlp
ZiAodG90YWxfbGVuPiBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgewotCQkvKiBDYW4ndCBsb2cgdGhp
cyBwYWNrZXQgSSBoYXZlIG5vdCBhIGJ1ZmZlciBiaWcgZW5vdWdoICovCi0JCXJldHVybjsKLQl9
Ci0JaWYgKGxlbmd0aCA8IChpbnQpKFNDVFBfTUlOX1Y0X09WRVJIRUFEICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmspKSkgewotCQlyZXR1cm47Ci0JfQotCWF0b21pY19hZGRf
aW50KCZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycyksIDEpOwotIHRyeV9hZ2FpbjoK
LQlpZiAoU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpID4gU0NUUF9QS1RMT0dfV1JJ
VEVSU19ORUVEX0xPQ0spIHsKLQkJU0NUUF9JUF9QS1RMT0dfTE9DSygpOwotCQlncmFiYmVkX2xv
Y2sgPSAxOwotCWFnYWluX2xvY2tlZDoKLQkJdmFsdWUgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9s
b2dfZW5kKTsKLQkJbmV3dmFsID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCkgKyB0b3Rh
bF9sZW47Ci0JCWlmIChuZXd2YWwgPj0gU0NUUF9QQUNLRVRfTE9HX1NJWkUpIHsKLQkJCS8qIHdl
IHdyYXBwZWQgKi8KLQkJCXRoaXNiZWdpbiA9IDA7Ci0JCQl0aGlzZW5kID0gdG90YWxfbGVuOwot
CQl9IGVsc2UgewotCQkJdGhpc2JlZ2luID0gU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCk7
Ci0JCQl0aGlzZW5kID0gbmV3dmFsOwotCQl9Ci0JCWlmICghKGF0b21pY19jbXBzZXRfaW50KCZT
Q1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSwgdmFsdWUsIHRoaXNlbmQpKSkgewotCQkJZ290
byBhZ2Fpbl9sb2NrZWQ7Ci0JCX0KLQl9IGVsc2UgewotCQl2YWx1ZSA9IFNDVFBfQkFTRV9WQVIo
cGFja2V0X2xvZ19lbmQpOwotCQluZXd2YWwgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5k
KSArIHRvdGFsX2xlbjsKLQkJaWYgKG5ld3ZhbCA+PSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgewot
CQkJLyogd2Ugd3JhcHBlZCAqLwotCQkJdGhpc2JlZ2luID0gMDsKLQkJCXRoaXNlbmQgPSB0b3Rh
bF9sZW47Ci0JCX0gZWxzZSB7Ci0JCQl0aGlzYmVnaW4gPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9s
b2dfZW5kKTsKLQkJCXRoaXNlbmQgPSBuZXd2YWw7Ci0JCX0KLQkJaWYgKCEoYXRvbWljX2NtcHNl
dF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpLCB2YWx1ZSwgdGhpc2VuZCkpKSB7
Ci0JCQlnb3RvIHRyeV9hZ2FpbjsKLQkJfQotCX0KLQkvKiBTYW5pdHkgY2hlY2sgKi8KLQlpZiAo
dGhpc2VuZCA+PSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgewotCQlTQ1RQX1BSSU5URigiSW5zYW5p
dHkgc3RvcHMgYSBsb2cgdGhpc2JlZ2luOiVkIHRoaXNlbmQ6JWQgd3JpdGVyczolZCBsb2NrOiVk
IGVuZDolZFxuIiwKLQkJICAgICAgICAgICAgdGhpc2JlZ2luLAotCQkgICAgICAgICAgICB0aGlz
ZW5kLAotCQkgICAgICAgICAgICBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycyksCi0J
CSAgICAgICAgICAgIGdyYWJiZWRfbG9jaywKLQkJICAgICAgICAgICAgU0NUUF9CQVNFX1ZBUihw
YWNrZXRfbG9nX2VuZCkpOwotCQlTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSA9IDA7Ci0J
CWdvdG8gbm9fbG9nOwotCi0JfQotCWxlbmF0ID0gKGludCAqKSZTQ1RQX0JBU0VfVkFSKHBhY2tl
dF9sb2dfYnVmZmVyKVt0aGlzYmVnaW5dOwotCSpsZW5hdCA9IHRvdGFsX2xlbjsKLQlsZW5hdCsr
OwotCSpsZW5hdCA9IHZhbHVlOwotCWxlbmF0Kys7Ci0JdGlja190b2NrID0gKHVpbnQzMl90ICop
bGVuYXQ7Ci0JbGVuYXQrKzsKLQkqdGlja190b2NrID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwot
CWNvcHl0byA9ICh2b2lkICopbGVuYXQ7Ci0JdGhpc29uZSA9IHRoaXNlbmQgLSBzaXplb2YoaW50
KTsKLQlsZW5hdCA9IChpbnQgKikmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2J1ZmZlcilbdGhp
c29uZV07Ci0JKmxlbmF0ID0gdGhpc2JlZ2luOwotCWlmIChncmFiYmVkX2xvY2spIHsKLQkJU0NU
UF9JUF9QS1RMT0dfVU5MT0NLKCk7Ci0JCWdyYWJiZWRfbG9jayA9IDA7Ci0JfQotCW1fY29weWRh
dGEobSwgMCwgbGVuZ3RoLCAoY2FkZHJfdCljb3B5dG8pOwotIG5vX2xvZzoKLQlpZiAoZ3JhYmJl
ZF9sb2NrKSB7Ci0JCVNDVFBfSVBfUEtUTE9HX1VOTE9DSygpOwotCX0KLQlhdG9taWNfc3VidHJh
Y3RfaW50KCZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycyksIDEpOwotfQotCi0KLWlu
dAotc2N0cF9jb3B5X291dF9wYWNrZXRfbG9nKHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCkK
LXsKLQkvKiBXZSB3aW5kIHRocm91Z2ggdGhlIHBhY2tldCBsb2cgc3RhcnRpbmcgYXQKLQkgKiBz
dGFydCBjb3B5aW5nIHVwIHRvIGxlbmd0aCBieXRlcyBvdXQuCi0JICogV2UgcmV0dXJuIHRoZSBu
dW1iZXIgb2YgYnl0ZXMgY29waWVkLgotCSAqLwotCWludCB0b2NvcHksIHRoaXNfY29weTsKLQlp
bnQgKmxlbmF0OwotCWludCBkaWRfZGVsYXkgPSAwOwotCi0JdG9jb3B5ID0gbGVuZ3RoOwotCWlm
IChsZW5ndGggPCAoaW50KSgyICogc2l6ZW9mKGludCkpKSB7Ci0JCS8qIG5vdCBlbm91Z2ggcm9v
bSAqLwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xP
Q0spIHsKLQkJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJz
KSwgU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spOwotCWFnYWluOgotCQlpZiAoKGRpZF9k
ZWxheSA9PSAwKSAmJiAoU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpICE9IFNDVFBf
UEtUTE9HX1dSSVRFUlNfTkVFRF9MT0NLKSkgewotCQkJLyogd2UgZGVsYXkgaGVyZSBmb3IganVz
dCBhIG1vbWVudCBob3BpbmcgdGhlIHdyaXRlcihzKSB0aGF0IHdlcmUKLQkJCSAqIHByZXNlbnQg
d2hlbiB3ZSBlbnRlcmVkIHdpbGwgaGF2ZSBsZWZ0IGFuZCB3ZSBvbmx5IGhhdmUKLQkJCSAqIGxv
Y2tpbmcgb25lcyB0aGF0IHdpbGwgY29udGVuZCB3aXRoIHVzIGZvciB0aGUgbG9jay4gVGhpcwot
CQkJICogZG9lcyBub3QgYXNzdXJlIDEwMCUgYWNjZXNzLCBidXQgaXRzIGdvb2QgZW5vdWdoIGZv
cgotCQkJICogYSBsb2dnaW5nIGZhY2lsaXR5IGxpa2UgdGhpcy4KLQkJCSAqLwotCQkJZGlkX2Rl
bGF5ID0gMTsKLQkJCURFTEFZKDEwKTsKLQkJCWdvdG8gYWdhaW47Ci0JCX0KLQl9Ci0JU0NUUF9J
UF9QS1RMT0dfTE9DSygpOwotCWxlbmF0ID0gKGludCAqKXRhcmdldDsKLQkqbGVuYXQgPSBTQ1RQ
X0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKTsKLQlsZW5hdCsrOwotCXRoaXNfY29weSA9IG1pbigo
bGVuZ3RoIC0gc2l6ZW9mKGludCkpLCBTQ1RQX1BBQ0tFVF9MT0dfU0laRSk7Ci0JbWVtY3B5KCh2
b2lkICopbGVuYXQsICh2b2lkICopU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2J1ZmZlciksIHRo
aXNfY29weSk7Ci0JaWYgKFNDVFBfUEtUTE9HX1dSSVRFUlNfTkVFRF9MT0NLKSB7Ci0JCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwKLQkJCQkg
ICAgU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spOwotCX0KLQlTQ1RQX0lQX1BLVExPR19V
TkxPQ0soKTsKLQlyZXR1cm4gKHRoaXNfY29weSArIHNpemVvZihpbnQpKTsKLX0KLQotI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9ic2RfYWRkci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBl
MDQ4M2E0Njg3OTRkMmVkYzRjYzIwOGY3MmIzZTE2YzFhMWZjOGQzLi4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2Rf
YWRkci5oCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1
ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhl
ciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0g
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK
LSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwot
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRp
bmV0L3NjdHBfYnNkX2FkZHIuaCAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQi
KTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfQlNEX0FERFJfSF8KLSNkZWZpbmUg
X05FVElORVRfU0NUUF9CU0RfQUREUl9IXwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5o
PgotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0KLWV4
dGVybiBzdHJ1Y3QgaXRlcmF0b3JfY29udHJvbCBzY3RwX2l0X2N0bDsKLXZvaWQgc2N0cF93YWtl
dXBfaXRlcmF0b3Iodm9pZCk7Ci0KLXZvaWQgc2N0cF9zdGFydHVwX2l0ZXJhdG9yKHZvaWQpOwot
Ci0KLSNpZmRlZiBJTkVUNgotdm9pZCBzY3RwX2dhdGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3Moc3Ry
dWN0IHNjdHBfaWZhICppZmEpOwotI2VuZGlmCi0KLSNpZmRlZiAgU0NUUF9QQUNLRVRfTE9HR0lO
RwotCi12b2lkIHNjdHBfcGFja2V0X2xvZyhzdHJ1Y3QgbWJ1ZiAqbSk7Ci1pbnQgc2N0cF9jb3B5
X291dF9wYWNrZXRfbG9nKHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCk7Ci0KLSNlbmRpZgot
Ci0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQotdm9pZCBzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBp
ZmFkZHIgKmlmYSwgaW50IGNtZCk7Ci0jZW5kaWYKLQotdm9pZCBzY3RwX2FkZF9vcl9kZWxfaW50
ZXJmYWNlcyhpbnQgKCpwcmVkKShzdHJ1Y3QgaWZuZXQgKiksIGludCBhZGQpOwotCi0jZW5kaWYK
LSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM1NWYxYjQxM2Y0MGVjMjg0MDZkNTVhYzkzMWY0NThkMWNiODM0YzAuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2NhbGxvdXQuYworKysgL2Rldi9udWxsCkBAIC0xLDIyNCArMCwwIEBACi0vKi0KLSAqIENvcHly
aWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hh
ZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBO
ZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZCAoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2luY2x1ZGUgPHVuaXN0
ZC5oPgotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfTmFDbCkKLSNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxz
dGRsaWIuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1
ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9wY2IuaD4KLSNlbHNlCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfcGNiLmg+Ci0jZW5kaWYKLQotLyoKLSAqIENhbGxvdXQvVGltZXIgcm91dGluZXMgZm9yIE9T
IHRoYXQgZG9lc24ndCBoYXZlIHRoZW0KLSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1zdGF0aWMgaW50IHRpY2tzID0gMDsKLSNlbHNlCi1leHRl
cm4gaW50IHRpY2tzOwotI2VuZGlmCi0KLWludCBzY3RwX2dldF90aWNrX2NvdW50KHZvaWQpIHsK
LQlpbnQgcmV0OwotCi0JU0NUUF9USU1FUlFfTE9DSygpOwotCXJldCA9IHRpY2tzOwotCVNDVFBf
VElNRVJRX1VOTE9DSygpOwotCXJldHVybiByZXQ7Ci19Ci0KLS8qCi0gKiBTQ1RQX1RJTUVSUV9M
T0NLIHByb3RlY3RzOgotICogLSBTQ1RQX0JBU0VfSU5GTyhjYWxscXVldWUpCi0gKiAtIHNjdHBf
b3NfdGltZXJfbmV4dDogbmV4dCB0aW1lciB0byBjaGVjawotICovCi1zdGF0aWMgc2N0cF9vc190
aW1lcl90ICpzY3RwX29zX3RpbWVyX25leHQgPSBOVUxMOwotCi12b2lkCi1zY3RwX29zX3RpbWVy
X2luaXQoc2N0cF9vc190aW1lcl90ICpjKQotewotCW1lbXNldChjLCAwLCBzaXplb2YoKmMpKTsK
LX0KLQotdm9pZAotc2N0cF9vc190aW1lcl9zdGFydChzY3RwX29zX3RpbWVyX3QgKmMsIGludCB0
b190aWNrcywgdm9pZCAoKmZ0bikgKHZvaWQgKiksCi0gICAgICAgICAgICAgICAgICAgIHZvaWQg
KmFyZykKLXsKLQkvKiBwYXJhbm9pYSAqLwotCWlmICgoYyA9PSBOVUxMKSB8fCAoZnRuID09IE5V
TEwpKQotCSAgICByZXR1cm47Ci0KLQlTQ1RQX1RJTUVSUV9MT0NLKCk7Ci0JLyogY2hlY2sgdG8g
c2VlIGlmIHdlJ3JlIHJlc2NoZWR1bGluZyBhIHRpbWVyICovCi0JaWYgKGMtPmNfZmxhZ3MgJiBT
Q1RQX0NBTExPVVRfUEVORElORykgewotCQlpZiAoYyA9PSBzY3RwX29zX3RpbWVyX25leHQpIHsK
LQkJCXNjdHBfb3NfdGltZXJfbmV4dCA9IFRBSUxRX05FWFQoYywgdHFlKTsKLQkJfQotCQlUQUlM
UV9SRU1PVkUoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSksIGMsIHRxZSk7Ci0JCS8qCi0JCSAq
IHBhcnQgb2YgdGhlIG5vcm1hbCAic3RvcCBhIHBlbmRpbmcgY2FsbG91dCIgcHJvY2VzcwotCQkg
KiBpcyB0byBjbGVhciB0aGUgQ0FMTE9VVF9BQ1RJVkUgYW5kIENBTExPVVRfUEVORElORwotCQkg
KiBmbGFncy4gIFdlIGRvbid0IGJvdGhlciBzaW5jZSB3ZSBhcmUgc2V0dGluZyB0aGVzZQotCQkg
KiBiZWxvdyBhbmQgd2Ugc3RpbGwgaG9sZCB0aGUgbG9jay4KLQkJICovCi0JfQotCi0JLyoKLQkg
KiBXZSBjb3VsZCB1bmxvY2svc3BseCBoZXJlIGFuZCBsb2NrL3NwbCBhdCB0aGUgVEFJTFFfSU5T
RVJUX1RBSUwsCi0JICogYnV0IHRoZXJlJ3Mgbm8gcG9pbnQgc2luY2UgZG9pbmcgdGhpcyBzZXR1
cCBkb2Vzbid0IHRha2UgbXVjaCB0aW1lLgotCSAqLwotCWlmICh0b190aWNrcyA8PSAwKQotCQl0
b190aWNrcyA9IDE7Ci0KLQljLT5jX2FyZyA9IGFyZzsKLQljLT5jX2ZsYWdzID0gKFNDVFBfQ0FM
TE9VVF9BQ1RJVkUgfCBTQ1RQX0NBTExPVVRfUEVORElORyk7Ci0JYy0+Y19mdW5jID0gZnRuOwot
CWMtPmNfdGltZSA9IHRpY2tzICsgdG9fdGlja3M7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJlNDVFBf
QkFTRV9JTkZPKGNhbGxxdWV1ZSksIGMsIHRxZSk7Ci0JU0NUUF9USU1FUlFfVU5MT0NLKCk7Ci19
Ci0KLWludAotc2N0cF9vc190aW1lcl9zdG9wKHNjdHBfb3NfdGltZXJfdCAqYykKLXsKLQlTQ1RQ
X1RJTUVSUV9MT0NLKCk7Ci0JLyoKLQkgKiBEb24ndCBhdHRlbXB0IHRvIGRlbGV0ZSBhIGNhbGxv
dXQgdGhhdCdzIG5vdCBvbiB0aGUgcXVldWUuCi0JICovCi0JaWYgKCEoYy0+Y19mbGFncyAmIFND
VFBfQ0FMTE9VVF9QRU5ESU5HKSkgewotCQljLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRfQUNU
SVZFOwotCQlTQ1RQX1RJTUVSUV9VTkxPQ0soKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JYy0+Y19m
bGFncyAmPSB+KFNDVFBfQ0FMTE9VVF9BQ1RJVkUgfCBTQ1RQX0NBTExPVVRfUEVORElORyk7Ci0J
aWYgKGMgPT0gc2N0cF9vc190aW1lcl9uZXh0KSB7Ci0JCXNjdHBfb3NfdGltZXJfbmV4dCA9IFRB
SUxRX05FWFQoYywgdHFlKTsKLQl9Ci0JVEFJTFFfUkVNT1ZFKCZTQ1RQX0JBU0VfSU5GTyhjYWxs
cXVldWUpLCBjLCB0cWUpOwotCVNDVFBfVElNRVJRX1VOTE9DSygpOwotCXJldHVybiAoMSk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV90aWNrKGludCBkZWx0YSkKLXsKLQlzY3RwX29z
X3RpbWVyX3QgKmM7Ci0Jdm9pZCAoKmNfZnVuYykodm9pZCAqKTsKLQl2b2lkICpjX2FyZzsKLQot
CVNDVFBfVElNRVJRX0xPQ0soKTsKLQkvKiB1cGRhdGUgb3VyIHRpY2sgY291bnQgKi8KLQl0aWNr
cyArPSBkZWx0YTsKLQljID0gVEFJTFFfRklSU1QoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSkp
OwotCXdoaWxlIChjKSB7Ci0JCWlmIChjLT5jX3RpbWUgPD0gdGlja3MpIHsKLQkJCXNjdHBfb3Nf
dGltZXJfbmV4dCA9IFRBSUxRX05FWFQoYywgdHFlKTsKLQkJCVRBSUxRX1JFTU9WRSgmU0NUUF9C
QVNFX0lORk8oY2FsbHF1ZXVlKSwgYywgdHFlKTsKLQkJCWNfZnVuYyA9IGMtPmNfZnVuYzsKLQkJ
CWNfYXJnID0gYy0+Y19hcmc7Ci0JCQljLT5jX2ZsYWdzICY9IH5TQ1RQX0NBTExPVVRfUEVORElO
RzsKLQkJCVNDVFBfVElNRVJRX1VOTE9DSygpOwotCQkJY19mdW5jKGNfYXJnKTsKLQkJCVNDVFBf
VElNRVJRX0xPQ0soKTsKLQkJCWMgPSBzY3RwX29zX3RpbWVyX25leHQ7Ci0JCX0gZWxzZSB7Ci0J
CQljID0gVEFJTFFfTkVYVChjLCB0cWUpOwotCQl9Ci0JfQotCXNjdHBfb3NfdGltZXJfbmV4dCA9
IE5VTEw7Ci0JU0NUUF9USU1FUlFfVU5MT0NLKCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLXZvaWQKLXNjdHBfdGltZW91dCh2b2lkICphcmcgU0NUUF9VTlVTRUQpCi17Ci0Jc2N0cF9o
YW5kbGVfdGljayhTQ1RQX0JBU0VfVkFSKHNjdHBfbWFpbl90aW1lcl90aWNrcykpOwotCXNjdHBf
c3RhcnRfbWFpbl90aW1lcigpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0jZGVmaW5lIFRJTUVPVVRfSU5URVJWQUwgMTAKLQotdm9pZCAqCi11c2VyX3NjdHBfdGlt
ZXJfaXRlcmF0ZSh2b2lkICphcmcpCi17Ci0Jc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUo
IlNDVFAgdGltZXIiKTsKLQlmb3IgKDs7KSB7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLQkJU2xlZXAoVElNRU9VVF9JTlRFUlZBTCk7Ci0jZWxzZQotCQlzdHJ1Y3QgdGlt
ZXZhbCB0aW1lb3V0OwotCi0JCXRpbWVvdXQudHZfc2VjICA9IDA7Ci0JCXRpbWVvdXQudHZfdXNl
YyA9IDEwMDAgKiBUSU1FT1VUX0lOVEVSVkFMOwotCQlzZWxlY3QoMCwgTlVMTCwgTlVMTCwgTlVM
TCwgJnRpbWVvdXQpOwotI2VuZGlmCi0JCWlmIChTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9z
aG91bGRfZXhpdCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCXNjdHBfaGFuZGxlX3RpY2soTVNFQ19U
T19USUNLUyhUSU1FT1VUX0lOVEVSVkFMKSk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXZv
aWQKLXNjdHBfc3RhcnRfdGltZXIodm9pZCkKLXsKLQkvKgotCSAqIE5vIG5lZWQgdG8gZG8gU0NU
UF9USU1FUlFfTE9DS19JTklUKCk7Ci0JICogaGVyZSwgaXQgaXMgYmVpbmcgZG9uZSBpbiBzY3Rw
X3BjYl9pbml0KCkKLQkgKi8KLQlpbnQgcmM7Ci0KLQlyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVh
ZF9jcmVhdGUoJlNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwgdXNlcl9zY3RwX3RpbWVyX2l0
ZXJhdGUpOwotCWlmIChyYykgewotCQlTQ1RQX1BSSU5URigiRVJST1I7IHJldHVybiBjb2RlIGZy
b20gc2N0cF90aHJlYWRfY3JlYXRlKCkgaXMgJWRcbiIsIHJjKTsKLQl9Ci19Ci0KLSNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQuaCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9jYWxsb3V0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzY0
YzkwOTgyY2JhZmRkNDU3ZmY4NDJmOWRjOGI3NjBhZTllMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxvdXQu
aAorKysgL2Rldi9udWxsCkBAIC0xLDEwOCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pF
Q1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIk
RnJlZUJTRCQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfQ0FMTE9VVF8KLSNk
ZWZpbmUgX05FVElORVRfU0NUUF9DQUxMT1VUXwotCi0vKgotICogTk9URTogdGhlIGZvbGxvd2lu
ZyBNQUNST1MgYXJlIHJlcXVpcmVkIGZvciBsb2NraW5nIHRoZSBjYWxsb3V0Ci0gKiBxdWV1ZSBh
bG9uZyB3aXRoIGEgbG9jay9tdXRleCBpbiB0aGUgT1Mgc3BlY2lmaWMgaGVhZGVycyBhbmQKLSAq
IGltcGxlbWVudGF0aW9uIGZpbGVzOjoKLSAqIC0gU0NUUF9USU1FUlFfTE9DSygpCi0gKiAtIFND
VFBfVElNRVJRX1VOTE9DSygpCi0gKiAtIFNDVFBfVElNRVJRX0xPQ0tfSU5JVCgpCi0gKiAtIFND
VFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpCi0gKi8KLQotI2RlZmluZSBfU0NUUF9ORUVEU19DQUxM
T1VUXyAxCi0KLSNkZWZpbmUgU0NUUF9USUNLU19QRVJfRkFTVFRJTU8gMjAJLyogY2FsbGVkIGFi
b3V0IGV2ZXJ5IDIwbXMgKi8KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0soKSAg
ICAgICAgICBFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQot
I2RlZmluZSBTQ1RQX1RJTUVSUV9VTkxPQ0soKSAgICAgICAgTGVhdmVDcml0aWNhbFNlY3Rpb24o
JlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19JTklU
KCkgICAgIEluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4
KSkKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCkgIERlbGV0ZUNyaXRpY2FsU2Vj
dGlvbigmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQotI2Vsc2UKLSNpZmRlZiBJTlZBUklBTlRT
Ci0jZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0soKSAgICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0
ZXhfbG9jaygmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKSA9PSAwLCAoIiVzOiB0aW1lcl9tdHgg
YWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCi0jZGVmaW5lIFNDVFBfVElNRVJRX1VOTE9DSygp
ICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfVkFSKHRpbWVy
X210eCkpID09IDAsICgiJXM6IHRpbWVyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQotI2Vs
c2UKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DSygpICAgICAgICAgICh2b2lkKXB0aHJlYWRfbXV0
ZXhfbG9jaygmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQotI2RlZmluZSBTQ1RQX1RJTUVSUV9V
TkxPQ0soKSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9WQVIo
dGltZXJfbXR4KSkKLSNlbmRpZgotI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKSAgICAg
KHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCksICZTQ1RQ
X0JBU0VfVkFSKG10eF9hdHRyKSkKLSNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCkg
ICh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpKQot
I2VuZGlmCi0jZW5kaWYKLQotaW50IHNjdHBfZ2V0X3RpY2tfY291bnQodm9pZCk7Ci0KLVRBSUxR
X0hFQUQoY2FsbG91dGxpc3QsIHNjdHBfY2FsbG91dCk7Ci0KLXN0cnVjdCBzY3RwX2NhbGxvdXQg
ewotCVRBSUxRX0VOVFJZKHNjdHBfY2FsbG91dCkgdHFlOwotCWludCBjX3RpbWU7CQkvKiB0aWNr
cyB0byB0aGUgZXZlbnQgKi8KLQl2b2lkICpjX2FyZzsJCS8qIGZ1bmN0aW9uIGFyZ3VtZW50ICov
Ci0Jdm9pZCAoKmNfZnVuYykodm9pZCAqKTsJLyogZnVuY3Rpb24gdG8gY2FsbCAqLwotCWludCBj
X2ZsYWdzOwkJLyogc3RhdGUgb2YgdGhpcyBlbnRyeSAqLwotfTsKLXR5cGVkZWYgc3RydWN0IHNj
dHBfY2FsbG91dCBzY3RwX29zX3RpbWVyX3Q7Ci0KLSNkZWZpbmUJU0NUUF9DQUxMT1VUX0FDVElW
RQkweDAwMDIJLyogY2FsbG91dCBpcyBjdXJyZW50bHkgYWN0aXZlICovCi0jZGVmaW5lCVNDVFBf
Q0FMTE9VVF9QRU5ESU5HCTB4MDAwNAkvKiBjYWxsb3V0IGlzIHdhaXRpbmcgZm9yIHRpbWVvdXQg
Ki8KLQotdm9pZCBzY3RwX29zX3RpbWVyX2luaXQoc2N0cF9vc190aW1lcl90ICp0bXIpOwotdm9p
ZCBzY3RwX29zX3RpbWVyX3N0YXJ0KHNjdHBfb3NfdGltZXJfdCAqLCBpbnQsIHZvaWQgKCopKHZv
aWQgKiksIHZvaWQgKik7Ci1pbnQgc2N0cF9vc190aW1lcl9zdG9wKHNjdHBfb3NfdGltZXJfdCAq
KTsKLQotI2RlZmluZSBTQ1RQX09TX1RJTUVSX0lOSVQJc2N0cF9vc190aW1lcl9pbml0Ci0jZGVm
aW5lIFNDVFBfT1NfVElNRVJfU1RBUlQJc2N0cF9vc190aW1lcl9zdGFydAotI2RlZmluZSBTQ1RQ
X09TX1RJTUVSX1NUT1AJc2N0cF9vc190aW1lcl9zdG9wCi0vKiBNVCBGSVhNRTogSXMgdGhlIGZv
bGxvd2luZyBjb3JyZWN0PyAqLwotI2RlZmluZSBTQ1RQX09TX1RJTUVSX1NUT1BfRFJBSU4gU0NU
UF9PU19USU1FUl9TVE9QCi0jZGVmaW5lCVNDVFBfT1NfVElNRVJfUEVORElORyh0bXIpICgodG1y
KS0+Y19mbGFncyAmIFNDVFBfQ0FMTE9VVF9QRU5ESU5HKQotI2RlZmluZQlTQ1RQX09TX1RJTUVS
X0FDVElWRSh0bXIpICgodG1yKS0+Y19mbGFncyAmIFNDVFBfQ0FMTE9VVF9BQ1RJVkUpCi0jZGVm
aW5lCVNDVFBfT1NfVElNRVJfREVBQ1RJVkFURSh0bXIpICgodG1yKS0+Y19mbGFncyAmPSB+U0NU
UF9DQUxMT1VUX0FDVElWRSkKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0
cF9zdGFydF90aW1lcih2b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotdm9p
ZCBzY3RwX3RpbWVvdXQodm9pZCAqKTsKLSNlbmRpZgotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jY19mdW5jdGlvbnMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWNlNzQ2NGQ0
YTkwYjQyOWU1ZTFkNGM1NDNmN2Q0NTkxNjBjYzIwZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2NfZnVuY3Rpb25z
LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNTA2ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChj
KSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4
ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIg
dGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICog
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0g
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNp
bmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5l
dC9zY3RwX2NjX2Z1bmN0aW9ucy5jIDMxMDU5MCAyMDE2LTEyLTI2IDExOjA2OjQxWiB0dWV4ZW4g
JCIpOwotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVy
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9vdXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfaW5kYXRhLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRo
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9kdHJhY2VfZGVjbGFyZS5oPgotI2VuZGlmCi0KLSNkZWZpbmUgU0hJRlRfTVBUQ1BfTVVM
VElfTiA0MAotI2RlZmluZSBTSElGVF9NUFRDUF9NVUxUSV9aIDE2Ci0jZGVmaW5lIFNISUZUX01Q
VENQX01VTFRJIDgKLQotc3RhdGljIHZvaWQKLXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc3NvYywgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWlm
ICgoYXNzb2MtPm1heF9jd25kID4gMCkgJiYKLQkgICAgKG5ldC0+Y3duZCA+IGFzc29jLT5tYXhf
Y3duZCkgJiYKLQkgICAgKG5ldC0+Y3duZCA+IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcikpKSkgewotCQluZXQtPmN3bmQgPSBhc3NvYy0+bWF4X2N3bmQgOwotCQlpZiAobmV0LT5j
d25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpIHsKLQkJCW5ldC0+Y3du
ZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJfQotCX0KLX0KLQotc3Rh
dGljIHZvaWQKLXNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
c29jOwotCXVpbnQzMl90IGN3bmRfaW5fbXR1OwotCi0JYXNzb2MgPSAmc3RjYi0+YXNvYzsKLQlj
d25kX2luX210dSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpOwotCWlmIChj
d25kX2luX210dSA9PSAwKSB7Ci0JCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2Yg
UkZDIDQ5NjAgaXMgdXNlZC4gKi8KLQkJbmV0LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBt
YXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7Ci0JfSBlbHNlIHsKLQkJLyoK
LQkJICogV2UgdGFrZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQotCQkg
KiBpbml0aWFsIGNvbmdlc3Rpb24gd2luZG93LgotCQkgKi8KLQkJaWYgKChhc3NvYy0+bWF4X2J1
cnN0ID4gMCkgJiYgKGN3bmRfaW5fbXR1ID4gYXNzb2MtPm1heF9idXJzdCkpCi0JCQljd25kX2lu
X210dSA9IGFzc29jLT5tYXhfYnVyc3Q7Ci0JCW5ldC0+Y3duZCA9IChuZXQtPm10dSAtIHNpemVv
ZihzdHJ1Y3Qgc2N0cGhkcikpICogY3duZF9pbl9tdHU7Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5z
Y3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc2N0
cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCS8qIEluIGNhc2Ugb2YgcmVzb3Vy
Y2UgcG9vbGluZyBpbml0aWFsaXplIGFwcHJvcHJpYXRlbHkgKi8KLQkJbmV0LT5jd25kIC89IGFz
c29jLT5udW1uZXRzOwotCQlpZiAobmV0LT5jd25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVj
dCBzY3RwaGRyKSkpIHsKLQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKLQkJfQotCX0KLQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc3NvYywgbmV0KTsK
LQluZXQtPnNzdGhyZXNoID0gYXNzb2MtPnBlZXJzX3J3bmQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JU0RUX1BST0JFNShzY3RwLCBj
d25kLCBuZXQsIGluaXQsCi0JICAgICAgICAgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5z
Y3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCi0JICAgICAg
ICAgIDAsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYKLQkgICAgKFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRXxTQ1RQX0NXTkRf
TE9HR0lOR19FTkFCTEUpKSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NX
TkRfSU5JVElBTElaQVRJT04pOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7Ci0JdWludDMyX3QgdF9zc3RocmVzaCwgdF9jd25kOwotCXVpbnQ2NF90IHRfdWN3bmRf
c2J3OwotCi0JLyogTVQgRklYTUU6IERvbid0IGNvbXB1dGUgdGhpcyBvdmVyIGFuZCBvdmVyIGFn
YWluICovCi0JdF9zc3RocmVzaCA9IDA7Ci0JdF9jd25kID0gMDsKLQl0X3Vjd25kX3NidyA9IDA7
Ci0JaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAg
KGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYyKSkgewotCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkJdF9zc3RocmVzaCArPSBuZXQt
PnNzdGhyZXNoOwotCQkJdF9jd25kICs9IG5ldC0+Y3duZDsKLQkJCWlmIChuZXQtPmxhc3RzYSA+
IDApIHsKLQkJCQl0X3Vjd25kX3NidyArPSAodWludDY0X3QpbmV0LT5jd25kIC8gKHVpbnQ2NF90
KW5ldC0+bGFzdHNhOwotCQkJfQotCQl9Ci0JCWlmICh0X3Vjd25kX3NidyA9PSAwKSB7Ci0JCQl0
X3Vjd25kX3NidyA9IDE7Ci0JCX0KLQl9Ci0KLQkvKi0KLQkgKiBDTVQgZmFzdCByZWNvdmVyeSBj
b2RlLiBOZWVkIHRvIGRlYnVnLiAoKHNjdHBfY210X29uX29mZiA+IDApICYmCi0JICogKG5ldC0+
ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9PSAwKSkpCi0JICovCi0JVEFJTFFfRk9SRUFDSChu
ZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9s
b3NzX3JlY292ZXJ5ID09IDApIHx8Ci0JCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkp
IHsKLQkJCS8qIG91dCBvZiBhIFJGQzI1ODIgRmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCi0JCQlp
ZiAobmV0LT5uZXRfYWNrID4gMCkgewotCQkJCS8qCi0JCQkJICogcGVyIHNlY3Rpb24gNy4yLjMs
IGFyZSB0aGVyZSBhbnkKLQkJCQkgKiBkZXN0aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJh
bnNtaXQKLQkJCQkgKiB0byB0aGVtLiBJZiBzbyB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKLQkJCQkg
KiBhZGp1c3Qgc3N0aHJlc2ggYW5kIGN3bmQuCi0JCQkJICovCi0JCQkJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqbGNoazsKLQkJCQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7Ci0KLQkJCQlpZiAo
KGFzb2MtPnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYxKSB8fAotCQkJCSAgICAoYXNv
Yy0+c2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCQkJCWlmIChhc29jLT5z
Y3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgewotCQkJCQkJbmV0LT5zc3RocmVzaCA9
ICh1aW50MzJfdCkoKCh1aW50NjRfdCk0ICoKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+bXR1ICoKLQkJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKLQotCQkJCQl9Ci0J
CQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMikgewotCQkJCQkJ
dWludDMyX3Qgc3J0dDsKLQotCQkJCQkJc3J0dCA9IG5ldC0+bGFzdHNhOwotCQkJCQkJLyogbGFz
dHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KLQkJCQkJCWlmIChzcnR0ID09
IDApIHsKLQkJCQkJCQlzcnR0ID0gMTsKLQkJCQkJCX0KLQkJCQkJCS8qIFNob3J0IFZlcnNpb24g
PT4gRXF1YWwgdG8gQ29udGVsIFZlcnNpb24gTUJlICovCi0JCQkJCQluZXQtPnNzdGhyZXNoID0g
KHVpbnQzMl90KSAoKCh1aW50NjRfdCk0ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVpbnQ2NF90KW5ldC0+bXR1ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLwotCQkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICgodWludDY0X3Qpc3J0dCAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRfdWN3bmRfc2J3KSk7Ci0JCQkJCQkJCQkgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLzsK
LQkJCQkJfQotCQkJCQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCi0JCQkJCSAgICAo
bmV0LT5zc3RocmVzaCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7Ci0JCQkJCQluZXQtPnNz
dGhyZXNoID0gbmV0LT5jd25kIC0gdF9jd25kIC8gMjsKLQkJCQkJfQotCQkJCQlpZiAobmV0LT5z
c3RocmVzaCA8IG5ldC0+bXR1KSB7Ci0JCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7Ci0J
CQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsK
LQkJCQkJaWYgKG5ldC0+c3N0aHJlc2ggPCAobmV0LT5tdHUgKiAyKSkgewotCQkJCQkJbmV0LT5z
c3RocmVzaCA9IDIgKiBuZXQtPm10dTsKLQkJCQkJfQotCQkJCX0KLQkJCQluZXQtPmN3bmQgPSBu
ZXQtPnNzdGhyZXNoOwotCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0J
CQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGZyLAotCQkJCQkgIHN0Y2ItPmFzb2MubXlf
dnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkp
LCBuZXQsCi0JCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQkJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5B
QkxFKSB7Ci0JCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3
bmQpLAotCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX0ZSKTsKLQkJCQl9Ci0JCQkJbGNoayA9IFRB
SUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1ZXVlKTsKLQotCQkJCW5ldC0+cGFydGlhbF9ieXRlc19h
Y2tlZCA9IDA7Ci0JCQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLwotCQkJCWFz
b2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOwotCQkJCWlmIChsY2hrID09IE5VTEwp
IHsKLQkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLwotCQkJCQlhc29jLT5mYXN0X3Jl
Y292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlh
c29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQot
Ci0JCQkJLyoKLQkJCQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KLQkJ
CQkgKiByZWNvdmVyeSB2YXJpYWJsZS4KLQkJCQkgKi8KLQkJCQluZXQtPmZhc3RfcmV0cmFuX2xv
c3NfcmVjb3ZlcnkgPSAxOwotCi0JCQkJaWYgKGxjaGsgPT0gTlVMTCkgewotCQkJCQkvKiBNYXJr
IGVuZCBvZiB0aGUgd2luZG93ICovCi0JCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29j
LT5zZW5kaW5nX3NlcSAtIDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5
X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0
LAotCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQ
X0xPQ18xKTsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJ
CQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV0LT5u
ZXRfYWNrID4gMCkgewotCQkJLyoKLQkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZl
IGRvbmUgYSBjd25kCi0JCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMg
YWN0aW9uLgotCQkJICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0
KTsKLQkJfQotCX0KLX0KLQotLyogRGVmaW5lcyBmb3IgaW5zdGFudGFuZW91cyBidyBkZWNpc2lv
bnMgKi8KLSNkZWZpbmUgU0NUUF9JTlNUX0xPT1NJTkcgMSAvKiBMb3NpbmcgdG8gb3RoZXIgZmxv
d3MgKi8KLSNkZWZpbmUgU0NUUF9JTlNUX05FVVRSQUwgMiAvKiBOZXV0cmFsLCBubyBpbmRpY2F0
aW9uICovCi0jZGVmaW5lIFNDVFBfSU5TVF9HQUlOSU5HIDMgLyogR2FpbmluZywgc3RlcCBkb3du
IHBvc3NpYmxlICovCi0KLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMzAwMAotc3RhdGljIGludAotY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LAotCSAgIHVpbnQ2NF90
IHJ0dF9vZmZzZXQsIHVpbnQ2NF90IHZ0YWcsIHVpbnQ4X3QgaW5zdF9pbmQpCi0jZWxzZQotc3Rh
dGljIGludAotY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LAotCSAgIHVpbnQ2NF90IHJ0dF9vZmZz
ZXQsIHVpbnQ4X3QgaW5zdF9pbmQpCi0jZW5kaWYKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQl1aW50NjRfdCBvdGgsIHByb2JlcG9p
bnQ7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMzAwMAotCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMy
KTsKLSNlbmRpZgotCWlmIChuZXQtPnJ0dCA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCArIHJ0
dF9vZmZzZXQpIHsKLQkJLyoKLQkJICogcnR0IGluY3JlYXNlZAotCQkgKiB3ZSBkb24ndCB1cGRh
dGUgYncuLiBzbyB3ZSBkb24ndAotCQkgKiB1cGRhdGUgdGhlIHJ0dCBlaXRoZXIuCi0JCSAqLwot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAot
CQkvKiBQcm9iZSBwb2ludCA1ICovCi0JCXByb2JlcG9pbnQgfD0gICgoNSA8PCAxNikgfCAxKTsK
LQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKLQkJCSAgdnRhZywKLQkJCSAg
KChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkJICAoKG5ldC0+Y2NfbW9k
LnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCi0JCQkgIG5ldC0+ZmxpZ2h0X3NpemUs
Ci0JCQkgIHByb2JlcG9pbnQpOwotI2VuZGlmCi0JCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVh
ZHlfc3RlcCkgJiYgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgewotCQkJaWYgKG5l
dC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID09IDUpCi0JCQkJbmV0LT5jY19tb2QucnRj
Yy5zdGVwX2NudCsrOwotCQkJZWxzZQotCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAx
OwotCQkJbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSA1OwotCQkJaWYgKChuZXQt
PmNjX21vZC5ydGNjLnN0ZXBfY250ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8
Ci0JCQkgICAgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID4gbmV0LT5jY19tb2QucnRjYy5z
dGVhZHlfc3RlcCkgJiYKLQkJCSAgICAgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ICUgbmV0
LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgPT0gMCkpKSB7Ci0JCQkJLyogVHJ5IGEgc3RlcCBk
b3duICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAzMDAwCi0JCQkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwotCQkJCW90aCA8
PD0gMTY7Ci0JCQkJb3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7Ci0JCQkJb3RoIDw8
PSAxNjsKLQkJCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7Ci0JCQkJ
U0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAsCi0JCQkJCSAgdnRhZywKLQkJCQkJ
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkJCSAgKChuZXQtPmNj
X21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJCQkgIG90aCwKLQkJCQkJ
ICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQkJCWlmIChuZXQtPmN3bmQgPiAoNCAqIG5ldC0+bXR1
KSkgewotCQkJCQluZXQtPmN3bmQgLT0gbmV0LT5tdHU7Ci0JCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mu
dm9sX3JlZHVjZSsrOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9j
bnQgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCQlyZXR1cm4gKDEpOwotCX0KLQlpZiAobmV0LT5y
dHQgPCBuZXQtPmNjX21vZC5ydGNjLmxid19ydHQtcnR0X29mZnNldCkgewotCQkvKgotCQkgKiBy
dHQgZGVjcmVhc2VkLCB0aGVyZSBjb3VsZCBiZSBtb3JlIHJvb20uCi0JCSAqIHdlIHVwZGF0ZSBi
b3RoIHRoZSBidyBhbmQgdGhlIHJ0dCBoZXJlIHRvCi0JCSAqIGxvY2sgdGhpcyBpbiBhcyBhIGdv
b2Qgc3RlcCBkb3duLgotCQkgKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJLyogUHJvYmUgcG9pbnQgNiAqLwotCQlwcm9iZXBvaW50
IHw9ICAoKDYgPDwgMTYpIHwgMCk7Ci0JCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2
YXIsCi0JCQkgIHZ0YWcsCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3
KSwKLQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAot
CQkJICBuZXQtPmZsaWdodF9zaXplLAotCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQlpZiAo
bmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQkJb3RoID0gbmV0LT5jY19tb2QucnRj
Yy52b2xfcmVkdWNlOwotCQkJb3RoIDw8PSAxNjsKLQkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNj
LnN0ZXBfY250OwotCQkJb3RoIDw8PSAxNjsKLQkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLmxh
c3Rfc3RlcF9zdGF0ZTsKLQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAot
CQkJCSAgdnRhZywKLQkJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwK
LQkJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJ
CQkgIG90aCwKLQkJCQkgIHByb2JlcG9pbnQpOwotI2VuZGlmCi0JCQlpZiAoKG5ldC0+Y2NfbW9k
LnJ0Y2MubGFzdF9zdGVwX3N0YXRlID09IDUpICYmCi0JCQkgICAgKG5ldC0+Y2NfbW9kLnJ0Y2Mu
c3RlcF9jbnQgPiBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSkgewotCQkJCS8qIFN0ZXAg
ZG93biB3b3JrZWQgKi8KLQkJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID0gMDsKLQkJCQly
ZXR1cm4gKDEpOwotCQkJfSBlbHNlIHsKLQkJCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9z
dGF0ZSA9IDY7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCQl9Ci0JCX0K
LQkJbmV0LT5jY19tb2QucnRjYy5sYncgPSBuYnc7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0
dCA9IG5ldC0+cnR0OwotCQluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5j
d25kOwotCQlpZiAoaW5zdF9pbmQgPT0gU0NUUF9JTlNUX0dBSU5JTkcpCi0JCQlyZXR1cm4gKDEp
OwotCQllbHNlIGlmIChpbnN0X2luZCA9PSBTQ1RQX0lOU1RfTkVVVFJBTCkKLQkJCXJldHVybiAo
MSk7Ci0JCWVsc2UKLQkJCXJldHVybiAoMCk7Ci0JfQotCS8qIE9rIGJ3IGFuZCBydHQgcmVtYWlu
ZWQgdGhlIHNhbWUgLi4gbm8gdXBkYXRlIHRvIGFueQotCSAqLwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCS8qIFByb2JlIHBvaW50IDcg
Ki8KLQlwcm9iZXBvaW50IHw9ICAoKDcgPDwgMTYpIHwgbmV0LT5jY19tb2QucnRjYy5yZXRfZnJv
bV9lcSk7Ci0JU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKLQkJICB2dGFnLAot
CQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJICAoKG5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCi0JCSAgbmV0LT5mbGlnaHRfc2l6
ZSwKLQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVh
ZHlfc3RlcCkgJiYgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgewotCQlpZiAobmV0
LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPT0gNSkKLQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mu
c3RlcF9jbnQrKzsKLQkJZWxzZQotCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDE7Ci0J
CW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gNTsKLQkJaWYgKChuZXQtPmNjX21v
ZC5ydGNjLnN0ZXBfY250ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8Ci0JCSAg
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPiBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9z
dGVwKSAmJgotCQkgICAgICgobmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCAlIG5ldC0+Y2NfbW9k
LnJ0Y2Muc3RlYWR5X3N0ZXApID09IDApKSkgewotCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCi0J
CQlpZiAobmV0LT5jd25kID4gKDQgKiBuZXQtPm10dSkpIHsKLQkJCQluZXQtPmN3bmQgLT0gbmV0
LT5tdHU7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlKys7Ci0JCQkJcmV0dXJuICgx
KTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCQl9
Ci0JCX0KLQl9Ci0JaWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKQotCQlyZXR1cm4g
KDEpOwotCWVsc2UgaWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9ORVVUUkFMKQotCQlyZXR1cm4g
KDEpOwotCWVsc2UKLQkJcmV0dXJuICgoaW50KW5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEp
OwotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAzMDAwCi1zdGF0aWMgaW50Ci1jY19id19kZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0
LAotCSAgICAgICB1aW50NjRfdCB2dGFnLCB1aW50OF90IGluc3RfaW5kKQotI2Vsc2UKLXN0YXRp
YyBpbnQKLWNjX2J3X2RlY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncsIHVpbnQ2NF90IHJ0dF9vZmZzZXQs
Ci0JICAgICAgIHVpbnQ4X3QgaW5zdF9pbmQpCi0jZW5kaWYKLXsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQl1aW50NjRfdCBvdGgsIHBy
b2JlcG9pbnQ7Ci0jZW5kaWYKLQotCS8qIEJhbmR3aWR0aCBkZWNyZWFzZWQuKi8KLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQlwcm9iZXBv
aW50ID0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCAzMik7Ci0jZW5kaWYKLQlpZiAobmV0LT5y
dHQgID4gbmV0LT5jY19tb2QucnRjYy5sYndfcnR0K3J0dF9vZmZzZXQpIHsKLQkJLyogcnR0IGlu
Y3JlYXNlZCAqLwotCQkvKiBEaWQgd2UgYWRkIG1vcmUgKi8KLQkJaWYgKChuZXQtPmN3bmQgPiBu
ZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0KSAmJgotCQkgICAgKGluc3RfaW5kICE9IFND
VFBfSU5TVF9MT09TSU5HKSkgewotCQkJLyogV2UgY2F1c2VkIGl0IG1heWJlLi4gYmFjayBvZmY/
ICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCi0JCQkvKiBQUk9CRSBQT0lOVCAxICovCi0JCQlwcm9iZXBvaW50IHw9ICAoKDEgPDwgMTYp
IHwgMSk7Ci0JCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJCSAgdnRh
ZywKLQkJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKLQkJCQkgICgo
bmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCQkgIG5ldC0+
ZmxpZ2h0X3NpemUsCi0JCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQkJaWYgKG5ldC0+Y2Nf
bW9kLnJ0Y2MucmV0X2Zyb21fZXEpIHsKLQkJCQkvKiBTd2l0Y2ggb3ZlciB0byBDQSBpZiB3ZSBh
cmUgbGVzcyBhZ2dyZXNzaXZlICovCi0JCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZC0xOwot
CQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCQl9Ci0JCQlyZXR1cm4gKDEpOwot
CQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCi0JCS8qIFByb2JlIHBvaW50IDIgKi8KLQkJcHJvYmVwb2ludCB8PSAgKCgyIDw8IDE2KSB8
IDApOwotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkJICB2dGFnLAot
CQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRf
c2l6ZSwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJLyogU29tZW9uZSBlbHNlIC0gZmln
aHQgZm9yIG1vcmU/ICovCi0JCWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0J
CQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7Ci0JCQlvdGggPDw9IDE2OwotCQkJ
b3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7Ci0JCQlvdGggPDw9IDE2OwotCQkJb3Ro
IHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOwotCQkJU0RUX1BST0JFNShzY3Rw
LCBjd25kLCBuZXQsIHJ0dHN0ZXAsCi0JCQkJICB2dGFnLAotCQkJCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQg
PDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJCSAgb3RoLAotCQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5k
aWYKLQkJCS8qIERpZCB3ZSB2b2x1bnRhcmlseSBnaXZlIHVwIHNvbWU/IGlmIHNvIHRha2UKLQkJ
CSAqIG9uZSBiYWNrIHBsZWFzZQotCQkJICovCi0JCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9s
X3JlZHVjZSkgJiYKLQkJCSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7Ci0J
CQkJbmV0LT5jd25kICs9IG5ldC0+bXR1OwotCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZz
dGNiLT5hc29jLCBuZXQpOwotCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOwotCQkJ
fQotCQkJbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAyOwotCQkJbmV0LT5jY19t
b2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JCX0KLQkJZ290byBvdXRfZGVjaXNpb247Ci0JfSBlbHNl
ICBpZiAobmV0LT5ydHQgIDwgbmV0LT5jY19tb2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsK
LQkJLyogYncgJiBydHQgZGVjcmVhc2VkICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCS8qIFByb2JlIHBvaW50IDMgKi8KLQkJcHJv
YmVwb2ludCB8PSAgKCgzIDw8IDE2KSB8IDApOwotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5l
dCwgcnR0dmFyLAotCQkJICB2dGFnLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMy
KSB8IG5idyksCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+
cnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYK
LQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCW90aCA9IG5ldC0+Y2Nf
bW9kLnJ0Y2Mudm9sX3JlZHVjZTsKLQkJCW90aCA8PD0gMTY7Ci0JCQlvdGggfD0gbmV0LT5jY19t
b2QucnRjYy5zdGVwX2NudDsKLQkJCW90aCA8PD0gMTY7Ci0JCQlvdGggfD0gbmV0LT5jY19tb2Qu
cnRjYy5sYXN0X3N0ZXBfc3RhdGU7Ci0JCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0
c3RlcCwKLQkJCQkgIHZ0YWcsCi0JCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8
IG5idyksCi0JCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0
dCksCi0JCQkJICBvdGgsCi0JCQkJICBwcm9iZXBvaW50KTsKLSNlbmRpZgotCQkJaWYgKChuZXQt
PmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UpICYmCi0JCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5T
VF9HQUlOSU5HKSkgewotCQkJCW5ldC0+Y3duZCArPSBuZXQtPm10dTsKLQkJCQlzY3RwX2VuZm9y
Y2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQkJCQluZXQtPmNjX21vZC5ydGNjLnZv
bF9yZWR1Y2UtLTsKLQkJCX0KLQkJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0g
MzsKLQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOwotCQl9Ci0JCWdvdG8gb3V0X2Rl
Y2lzaW9uOwotCX0KLQkvKiBUaGUgYncgZGVjcmVhc2VkIGJ1dCBydHQgc3RheWVkIHRoZSBzYW1l
ICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCi0JLyogUHJvYmUgcG9pbnQgNCAqLwotCXByb2JlcG9pbnQgfD0gICgoNCA8PCAxNikgfCAw
KTsKLQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAotCQkgIHZ0YWcsCi0JCSAg
KChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkgICgobmV0LT5jY19tb2Qu
cnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJICBuZXQtPmZsaWdodF9zaXplLAot
CQkgIHByb2JlcG9pbnQpOwotI2VuZGlmCi0JaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0
ZXApIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDMwMDAKLQkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOwotCQlvdGggPDw9IDE2
OwotCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudDsKLQkJb3RoIDw8PSAxNjsKLQkJ
b3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOwotCQlTRFRfUFJPQkU1KHNj
dHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKLQkJCSAgdnRhZywKLQkJCSAgKChuZXQtPmNjX21vZC5y
dGNjLmxidyA8PCAzMikgfCBuYncpLAotCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8
PCAzMikgfCBuZXQtPnJ0dCksCi0JCQkgIG90aCwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYK
LQkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UpICYmCi0JCSAgICAoaW5zdF9pbmQg
IT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7Ci0JCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQlz
Y3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQkJCW5ldC0+Y2NfbW9k
LnJ0Y2Mudm9sX3JlZHVjZS0tOwotCQl9Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0
YXRlID0gNDsKLQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7Ci0JfQotb3V0X2RlY2lz
aW9uOgotCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ID0gbmJ3OwotCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
X3J0dCA9IG5ldC0+cnR0OwotCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSBuZXQt
PmN3bmQ7Ci0JaWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKSB7Ci0JCXJldHVybiAo
MSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKLXN0YXRpYyBpbnQKLWNjX2J3
X2luY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1
aW50NjRfdCBuYncsIHVpbnQ2NF90IHZ0YWcpCi0jZWxzZQotc3RhdGljIGludAotY2NfYndfaW5j
cmVhc2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsIHVpbnQ2NF90IG5idykKLSNlbmRpZgotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXVpbnQ2NF90IG90aCwgcHJvYmVwb2lu
dDsKLQotI2VuZGlmCi0JLyogQlcgaW5jcmVhc2VkLCBzbyB1cGRhdGUgYW5kCi0JICogcmV0dXJu
IDAsIHNpbmNlIGFsbCBhY3Rpb25zIGluCi0JICogb3VyIHRhYmxlIHNheSB0byBkbyB0aGUgbm9y
bWFsIENDCi0JICogdXBkYXRlLiBOb3RlIHRoYXQgd2UgcGF5IG5vIGF0dGVudGlvbiB0bwotCSAq
IHRoZSBpbnN0X2luZCBzaW5jZSBvdXIgb3ZlcmFsbCBzdW0gaXMgaW5jcmVhc2luZy4KLQkgKi8K
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAK
LQkvKiBQUk9CRSBQT0lOVCAwICovCi0JcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3du
ZCkgPDwgMzIpOwotCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCi0JCSAgdnRh
ZywKLQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCSAgKChuZXQt
PmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkgIG5ldC0+ZmxpZ2h0
X3NpemUsCi0JCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQlpZiAobmV0LT5jY19tb2QucnRjYy5z
dGVhZHlfc3RlcCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMzAwMAotCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7Ci0JCW90
aCA8PD0gMTY7Ci0JCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OwotCQlvdGggPDw9
IDE2OwotCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7Ci0JCVNEVF9Q
Uk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAotCQkJICB2dGFnLAotCQkJICAoKG5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5s
YndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKLQkJCSAgb3RoLAotCQkJICBwcm9iZXBvaW50KTsK
LSNlbmRpZgotCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7Ci0JCW5ldC0+
Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOwotCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2Ug
PSAwOwotCX0KLQluZXQtPmNjX21vZC5ydGNjLmxidyA9IG5idzsKLQluZXQtPmNjX21vZC5ydGNj
Lmxid19ydHQgPSBuZXQtPnJ0dDsKLQluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0g
bmV0LT5jd25kOwotCXJldHVybiAoMCk7Ci19Ci0KLS8qIFJUQ0MgQWxnb3JpdGhtIHRvIGxpbWl0
IGdyb3d0aCBvZiBjd25kLCByZXR1cm4KLSAqIHRydWUgaWYgeW91IHdhbnQgdG8gTk9UIGFsbG93
IGN3bmQgZ3Jvd3RoCi0gKi8KLXN0YXRpYyBpbnQKLWNjX2J3X2xpbWl0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncpCi17Ci0JdWludDY0
X3QgYndfb2Zmc2V0LCBydHRfb2Zmc2V0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXVpbnQ2NF90IHByb2JlcG9pbnQsIHJ0dCwgdnRh
ZzsKLSNlbmRpZgotCXVpbnQ2NF90IGJ5dGVzX2Zvcl90aGlzX3J0dCwgaW5zdF9idzsKLQl1aW50
NjRfdCBkaXYsIGluc3Rfb2ZmOwotCWludCBid19zaGlmdDsKLQl1aW50OF90IGluc3RfaW5kOwot
CWludCByZXQ7Ci0JLyotCi0JICogSGVyZSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSB3YW50Ci0JICog
dG8gbGltaXQgY3duZCBncm93dGggZHVlIHRvIGluY3JlYXNlCi0JICogaW4gb3ZlcmFsbCBydHQg
YnV0IG5vIGluY3JlYXNlIGluIGJ3LgotCSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRhYmxlIHRv
IGZpZ3VyZQotCSAqIG91dCB3aGF0IHdlIHNob3VsZCBkby4gV2hlbiB3ZSByZXR1cm4KLQkgKiAw
LCBjYyB1cGRhdGUgZ29lcyBvbiBhcyBwbGFubmVkLiBJZiB3ZQotCSAqIHJldHVybiAxLCB0aGVu
IG5vIGNjIHVwZGF0ZSBoYXBwZW5zIGFuZCBjd25kCi0JICogc3RheXMgd2hlcmUgaXQgaXMgYXQu
Ci0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgQlcgICAgfCAg
ICBSVFQgICB8IEFjdGlvbgotCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgot
CSAqICAgSU5DICAgfCAgICBJTkMgICB8IHJldHVybiAwCi0JICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCSAqICAgSU5DICAgfCAgICBTQU1FICB8IHJldHVybiAwCi0JICog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgSU5DICAgfCAgICBERUNS
ICB8IHJldHVybiAwCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAq
ICAgU0FNRSAgfCAgICBJTkMgICB8IHJldHVybiAxCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCSAqICAgU0FNRSAgfCAgICBTQU1FICB8IHJldHVybiAxCi0JICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgU0FNRSAgfCAgICBERUNSICB8
IHJldHVybiAwCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAg
REVDUiAgfCAgICBJTkMgICB8IHJldHVybiAwIG9yIDEgYmFzZWQgb24gaWYgd2UgY2F1c2VkLgot
CSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIERFQ1IgIHwgICAg
U0FNRSAgfCByZXR1cm4gMAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQkgKiAgIERFQ1IgIHwgICAgREVDUiAgfCByZXR1cm4gMAotCSAqIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQkgKgotCSAqIFdlIGFyZSBhIGJpdCBmdXp6IG9uIHdoYXQgYW4g
aW5jcmVhc2Ugb3IKLQkgKiBkZWNyZWFzZSBpcy4gRm9yIEJXIGl0IGlzIHRoZSBzYW1lIGlmCi0J
ICogaXQgZGlkIG5vdCBjaGFuZ2Ugd2l0aGluIDEvNjR0aC4gRm9yCi0JICogUlRUIGl0IHN0YXll
ZCB0aGUgc2FtZSBpZiBpdCBkaWQgbm90Ci0JICogY2hhbmdlIHdpdGhpbiAxLzMybmQKLQkgKi8K
LQlid19zaGlmdCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpOwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXJ0dCA9IHN0
Y2ItPmFzb2MubXlfdnRhZzsKLQl2dGFnID0gKHJ0dCA8PCAzMikgfCAoKCh1aW50MzJfdCkoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9scG9ydCkpIDw8IDE2KSB8IChzdGNiLT5ycG9ydCk7Ci0JcHJvYmVw
b2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOwotCXJ0dCA9IG5ldC0+cnR0Owot
I2VuZGlmCi0JaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2spIHsKLQkJbmV0
LT5jY19tb2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjayA9IDA7Ci0JCWJ5dGVzX2Zvcl90aGlzX3J0
dCA9IG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXMgLSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVz
X2F0X2xhc3RfcnR0YzsKLQkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMg
PSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzOwotCQlpZiAobmV0LT5ydHQpIHsKLQkJCWRpdiA9
IG5ldC0+cnR0IC8gMTAwMDsKLQkJCWlmIChkaXYpIHsKLQkJCQlpbnN0X2J3ID0gYnl0ZXNfZm9y
X3RoaXNfcnR0IC8gZGl2OwotCQkJCWluc3Rfb2ZmID0gaW5zdF9idyA+PiBid19zaGlmdDsKLQkJ
CQlpZiAoaW5zdF9idyA+IG5idykKLQkJCQkJaW5zdF9pbmQgPSBTQ1RQX0lOU1RfR0FJTklORzsK
LQkJCQllbHNlIGlmICgoaW5zdF9idytpbnN0X29mZikgPCBuYncpCi0JCQkJCWluc3RfaW5kID0g
U0NUUF9JTlNUX0xPT1NJTkc7Ci0JCQkJZWxzZQotCQkJCQlpbnN0X2luZCA9IFNDVFBfSU5TVF9O
RVVUUkFMOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDgwMzAwMAotCQkJCXByb2JlcG9pbnQgfD0gICgoMHhiIDw8IDE2KSB8IGluc3RfaW5kKTsKLSNl
bmRpZgotCQkJfSBlbHNlIHsKLQkJCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9p
bnN0X2luZDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDMwMDAKLQkJCQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gKHVpbnQ2NF90KShu
ZXQtPnJ0dCk7Ci0JCQkJLyogQ2FuJ3QgZGV0ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8KLQkJCQlw
cm9iZXBvaW50IHw9ICAoKDB4YyA8PCAxNikgfCBpbnN0X2luZCk7Ci0jZW5kaWYKLQkJCX0KLQkJ
fSBlbHNlIHsKLQkJCWluc3RfaW5kID0gbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kOwot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAot
CQkJaW5zdF9idyA9IGJ5dGVzX2Zvcl90aGlzX3J0dDsKLQkJCS8qIENhbid0IGRldGVybWluZSBk
byBub3QgY2hhbmdlICovCi0JCQlwcm9iZXBvaW50IHw9ICAoKDB4ZCA8PCAxNikgfCBpbnN0X2lu
ZCk7Ci0jZW5kaWYKLQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMzAwMAotCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAot
CQkJICB2dGFnLAotCQkJICAoKG5idyA8PCAzMikgfCBpbnN0X2J3KSwKLQkJCSAgKChuZXQtPmNj
X21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgcnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwK
LQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvKiBObyBydHQgbWVhc3Vy
ZW1lbnQsIHVzZSBsYXN0IG9uZSAqLwotCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFz
dF9pbnN0X2luZDsKLQl9Ci0JYndfb2Zmc2V0ID0gbmV0LT5jY19tb2QucnRjYy5sYncgPj4gYndf
c2hpZnQ7Ci0JaWYgKG5idyA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ICsgYndfb2Zmc2V0KSB7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0J
CXJldCA9IGNjX2J3X2luY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCB2dGFnKTsKLSNlbHNlCi0JCXJl
dCA9IGNjX2J3X2luY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3KTsKLSNlbmRpZgotCQlnb3RvIG91dDsK
LQl9Ci0JcnR0X29mZnNldCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA+PiBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCk7Ci0JaWYgKG5idyA8IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
IC0gYndfb2Zmc2V0KSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAzMDAwCi0JCXJldCA9IGNjX2J3X2RlY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCBy
dHRfb2Zmc2V0LCB2dGFnLCBpbnN0X2luZCk7Ci0jZWxzZQotCQlyZXQgPSBjY19id19kZWNyZWFz
ZShzdGNiLCBuZXQsIG5idywgcnR0X29mZnNldCwgaW5zdF9pbmQpOwotI2VuZGlmCi0JCWdvdG8g
b3V0OwotCX0KLQkvKiBJZiB3ZSByZWFjaCBoZXJlIHRoZW4KLQkgKiB3ZSBhcmUgaW4gYSBzaXR1
YXRpb24gd2hlcmUKLQkgKiB0aGUgYncgc3RheWVkIHRoZSBzYW1lLgotCSAqLwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXJldCA9IGNj
X2J3X3NhbWUoc3RjYiwgbmV0LCBuYncsIHJ0dF9vZmZzZXQsIHZ0YWcsIGluc3RfaW5kKTsKLSNl
bHNlCi0JcmV0ID0gY2NfYndfc2FtZShzdGNiLCBuZXQsIG5idywgcnR0X29mZnNldCwgaW5zdF9p
bmQpOwotI2VuZGlmCi1vdXQ6Ci0JbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kID0gaW5z
dF9pbmQ7Ci0JcmV0dXJuIChyZXQpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9zYWNrX2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJICAgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkJICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVu
ZWdlZF9hbGwgU0NUUF9VTlVTRUQsIGludCB3aWxsX2V4aXQsIGludCB1c2VfcnRjYykKLXsKLQlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JaW50IG9sZF9jd25kOwotI2VuZGlmCi0JdWludDMyX3Qg
dF9zc3RocmVzaCwgdF9jd25kLCBpbmNyOwotCXVpbnQ2NF90IHRfdWN3bmRfc2J3OwotCXVpbnQ2
NF90IHRfcGF0aF9tcHRjcDsKLQl1aW50NjRfdCBtcHRjcF9saWtlX2FscGhhOwotCXVpbnQzMl90
IHNydHQ7Ci0JdWludDY0X3QgbWF4X3BhdGg7Ci0KLQkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0
ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4gKi8KLQl0X3NzdGhyZXNoID0gMDsKLQl0X2N3bmQg
PSAwOwotCXRfdWN3bmRfc2J3ID0gMDsKLQl0X3BhdGhfbXB0Y3AgPSAwOwotCW1wdGNwX2xpa2Vf
YWxwaGEgPSAxOwotCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRf
UlBWMSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQ
VjIpIHx8Ci0JICAgIChzdGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9NUFRD
UCkpIHsKLQkJbWF4X3BhdGggPSAwOwotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2Mu
bmV0cywgc2N0cF9uZXh0KSB7Ci0JCQl0X3NzdGhyZXNoICs9IG5ldC0+c3N0aHJlc2g7Ci0JCQl0
X2N3bmQgKz0gbmV0LT5jd25kOwotCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBk
ZXZpZGUgLi4uKi8KLQkJCXNydHQgPSBuZXQtPmxhc3RzYTsKLQkJCWlmIChzcnR0ID4gMCkgewot
CQkJCXVpbnQ2NF90IHRtcDsKLQotCQkJCXRfdWN3bmRfc2J3ICs9ICh1aW50NjRfdCluZXQtPmN3
bmQgLyAodWludDY0X3Qpc3J0dDsKLQkJCQl0X3BhdGhfbXB0Y3AgKz0gKCgodWludDY0X3QpbmV0
LT5jd25kKSA8PCBTSElGVF9NUFRDUF9NVUxUSV9aKSAvCi0JCQkJICAgICAgICAgICAgICAgICgo
KHVpbnQ2NF90KW5ldC0+bXR1KSAqICh1aW50NjRfdClzcnR0KTsKLQkJCQl0bXAgPSAoKCh1aW50
NjRfdCluZXQtPmN3bmQpIDw8IFNISUZUX01QVENQX01VTFRJX04pIC8KLQkJCQkgICAgICAoKHVp
bnQ2NF90KW5ldC0+bXR1ICogKHVpbnQ2NF90KShzcnR0ICogc3J0dCkpOwotCQkJCWlmICh0bXAg
PiBtYXhfcGF0aCkgewotCQkJCQltYXhfcGF0aCA9IHRtcDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJ
aWYgKHRfcGF0aF9tcHRjcCA+IDApIHsKLQkJCW1wdGNwX2xpa2VfYWxwaGEgPSBtYXhfcGF0aCAv
ICh0X3BhdGhfbXB0Y3AgKiB0X3BhdGhfbXB0Y3ApOwotCQl9IGVsc2UgewotCQkJbXB0Y3BfbGlr
ZV9hbHBoYSA9IDE7Ci0JCX0KLQl9Ci0JaWYgKHRfc3N0aHJlc2ggPT0gMCkgewotCQl0X3NzdGhy
ZXNoID0gMTsKLQl9Ci0JaWYgKHRfdWN3bmRfc2J3ID09IDApIHsKLQkJdF91Y3duZF9zYncgPSAx
OwotCX0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIHVwZGF0ZSBjd25k
IGFuZCBFYXJseSBGUiAgICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlU
QUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCi0jaWZkZWYgSkFO
QV9DTVRfRkFTVF9SRUNPVkVSWQotCQkvKgotCQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBO
ZWVkIHRvIGRlYnVnLgotCQkgKi8KLQkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVy
eSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7Ci0JCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+
bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8Ci0JCQkgICAgU0NUUF9U
U05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pKSB7Ci0JCQkJ
bmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQkv
KiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KLQkJ
aWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2df
Y3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKLQkJCX0KLQkJCWNv
bnRpbnVlOwotCQl9Ci0jaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQotICAgICAgICAgICAg
ICAgIC8qIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUKLQkJICovCi0JCS8qCi0JCSAgaWYgKHNjdHBf
Y210X29uX29mZiA+IDAgJiYgbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIG5ldC0+
d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPT0gMCkgewotCQkgIEBAQCBEbyBzb21ldGhpbmcKLQkJ
ICB9Ci0JCSAgZWxzZSBpZiAoc2N0cF9jbXRfb25fb2ZmID09IDAgJiYgYXNvYy0+ZmFzdF9yZXRy
YW5fbG9zc19yZWNvdmVyeSAmJiB3aWxsX2V4aXQgPT0gMCkgewotCQkqLwotI2VuZGlmCi0KLQkJ
aWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKLQkJICAgICh3aWxsX2V4aXQg
PT0gMCkgJiYKLQkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkpIHsKLQkJCS8qCi0J
CQkgKiBJZiB3ZSBhcmUgaW4gbG9zcyByZWNvdmVyeSB3ZSBza2lwIGFueSBjd25kCi0JCQkgKiB1
cGRhdGUKLQkJCSAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qCi0JCSAqIERpZCBhbnkgbWVhc3Vy
ZW1lbnRzIGdvIG9uIGZvciB0aGlzIG5ldHdvcms/Ci0JCSAqLwotCQlpZiAodXNlX3J0Y2MgJiYg
KG5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA+IDApKSB7Ci0JCQl1aW50NjRfdCBuYnc7
Ci0JCQkvKgotCQkJICogQXQgdGhpcyBwb2ludCBvdXIgYndfYnl0ZXMgaGFzIGJlZW4gdXBkYXRl
ZAotCQkJICogYnkgaW5jb21pbmcgc2FjayBpbmZvcm1hdGlvbi4KLQkJCSAqCi0JCQkgKiBCdXQg
b3VyIGJ3IG1heSBub3QgeWV0IGJlIHNldC4KLQkJCSAqCi0JCQkgKi8KLQkJCWlmICgobmV0LT5j
Y19tb2QucnRjYy5uZXdfdG90X3RpbWUvMTAwMCkgPiAwKSB7Ci0JCQkJbmJ3ID0gbmV0LT5jY19t
b2QucnRjYy5id19ieXRlcy8obmV0LT5jY19tb2QucnRjYy5uZXdfdG90X3RpbWUvMTAwMCk7Ci0J
CQl9IGVsc2UgewotCQkJCW5idyA9IG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXM7Ci0JCQl9Ci0J
CQlpZiAobmV0LT5jY19tb2QucnRjYy5sYncpIHsKLQkJCQlpZiAoY2NfYndfbGltaXQoc3RjYiwg
bmV0LCBuYncpKSB7Ci0JCQkJCS8qIEhvbGQgaGVyZSwgbm8gdXBkYXRlICovCi0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsK
LQotCQkJCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKLQkJCQlw
cm9iZXBvaW50IHw9ICAoKDB4YSA8PCAxNikgfCAwKTsKLQkJCQl2dGFnID0gKG5ldC0+cnR0IDw8
IDMyKSB8Ci0JCQkJCSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwg
MTYpIHwKLQkJCQkJKHN0Y2ItPnJwb3J0KTsKLQotCQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwg
bmV0LCBydHR2YXIsCi0JCQkJCSAgdnRhZywKLQkJCQkJICBuYncsCi0JCQkJCSAgKChuZXQtPmNj
X21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAotCQkJCQkgIG5ldC0+ZmxpZ2h0
X3NpemUsCi0JCQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQkJCQluZXQtPmNjX21vZC5ydGNj
LmxidyA9IG5idzsKLQkJCQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBuZXQtPnJ0dDsKLQkJ
CQlpZiAobmV0LT5jY19tb2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjaykgewotCQkJCQluZXQtPmNj
X21vZC5ydGNjLnJ0dF9zZXRfdGhpc19zYWNrID0gMDsKLQkJCQkJbmV0LT5jY19tb2QucnRjYy5i
d19ieXRlc19hdF9sYXN0X3J0dGMgPSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzOwotCQkJCX0K
LQkJCX0KLQkJfQotCQkvKgotCQkgKiBDTVQ6IENVQyBhbGdvcml0aG0uIFVwZGF0ZSBjd25kIGlm
IHBzZXVkby1jdW1hY2sgaGFzCi0JCSAqIG1vdmVkLgotCQkgKi8KLQkJaWYgKGFjY3VtX21vdmVk
IHx8Ci0JCSAgICAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmIG5ldC0+bmV3X3BzZXVk
b19jdW1hY2spKSB7Ci0JCQkvKiBJZiB0aGUgY3VtdWxhdGl2ZSBhY2sgbW92ZWQgd2UgY2FuIHBy
b2NlZWQgKi8KLQkJCWlmIChuZXQtPmN3bmQgPD0gbmV0LT5zc3RocmVzaCkgewotCQkJCS8qIFdl
IGFyZSBpbiBzbG93IHN0YXJ0ICovCi0JCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5l
dF9hY2sgPj0gbmV0LT5jd25kKSB7Ci0JCQkJCXVpbnQzMl90IGxpbWl0OwotCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JCQkJCW9sZF9j
d25kID0gbmV0LT5jd25kOwotI2VuZGlmCi0JCQkJCXN3aXRjaCAoYXNvYy0+c2N0cF9jbXRfb25f
b2ZmKSB7Ci0JCQkJCWNhc2UgU0NUUF9DTVRfUlBWMToKLQkJCQkJCWxpbWl0ID0gKHVpbnQzMl90
KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpICoKLQkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAodWludDY0X3QpdF9zc3RocmVzaCk7Ci0JCQkJCQlpbmNyID0gKHVpbnQzMl90
KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgKHVp
bnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRf
dCl0X3NzdGhyZXNoKTsKLQkJCQkJCWlmIChpbmNyID4gbGltaXQpIHsKLQkJCQkJCQlpbmNyID0g
bGltaXQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoaW5jciA9PSAwKSB7Ci0JCQkJCQkJaW5jciA9IDE7
Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKLQkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYyOgotCQkJCQkJ
LyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uKi8KLQkJCQkJCXNydHQg
PSBuZXQtPmxhc3RzYTsKLQkJCQkJCWlmIChzcnR0ID09IDApIHsKLQkJCQkJCQlzcnR0ID0gMTsK
LQkJCQkJCX0KLQkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoK
LQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9MMl9hYmNfdmFyaWFibGUpICoKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90
KW5ldC0+Y3duZCkgLwotCQkJCQkJICAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAq
IHRfdWN3bmRfc2J3KSk7Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgLyogSU5DUkVBU0UgRkFD
VE9SICovCi0JCQkJCQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAq
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLwotCQkJCQkJ
ICAgICAgICAgICAgICAgICAgKCh1aW50NjRfdClzcnR0ICogdF91Y3duZF9zYncpKTsKLQkJCQkJ
CSAgICAgICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLwotCQkJCQkJaWYgKGluY3Ig
PiBsaW1pdCkgewotCQkJCQkJCWluY3IgPSBsaW1pdDsKLQkJCQkJCX0KLQkJCQkJCWlmIChpbmNy
ID09IDApIHsKLQkJCQkJCQlpbmNyID0gMTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQlj
YXNlIFNDVFBfQ01UX01QVENQOgotCQkJCQkJbGltaXQgPSAodWludDMyX3QpKCgodWludDY0X3Qp
bmV0LT5tdHUgKgotCQkJCQkJICAgICAgICAgICAgICAgICAgICBtcHRjcF9saWtlX2FscGhhICoK
LQkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9MMl9hYmNfdmFyaWFibGUpKSA+PgotCQkJCQkJICAgICAgICAgICAgICAgICAgIFNISUZUX01Q
VENQX01VTFRJKTsKLQkJCQkJCWluY3IgID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0
X2FjayAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgIG1wdGNwX2xpa2VfYWxwaGEpID4+Ci0J
CQkJCQkgICAgICAgICAgICAgICAgICAgU0hJRlRfTVBUQ1BfTVVMVEkpOwotCQkJCQkJaWYgKGlu
Y3IgPiBsaW1pdCkgewotCQkJCQkJCWluY3IgPSBsaW1pdDsKLQkJCQkJCX0KLQkJCQkJCWlmIChp
bmNyID4gbmV0LT5uZXRfYWNrKSB7Ci0JCQkJCQkJaW5jciA9IG5ldC0+bmV0X2FjazsKLQkJCQkJ
CX0KLQkJCQkJCWlmIChpbmNyID4gbmV0LT5tdHUpIHsKLQkJCQkJCQlpbmNyID0gbmV0LT5tdHU7
Ci0JCQkJCQl9Ci0JCQkJCQlicmVhazsKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCWluY3IgPSBuZXQt
Pm5ldF9hY2s7Ci0JCQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX0wyX2FiY192YXJpYWJsZSkpIHsKLQkJCQkJCQlpbmNyID0gbmV0LT5tdHUgKiBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwot
CQkJCQl9Ci0JCQkJCW5ldC0+Y3duZCArPSBpbmNyOwotCQkJCQlzY3RwX2VuZm9yY2VfY3duZF9s
aW1pdChhc29jLCBuZXQpOwotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIG5ldCwgaW5jciwKLQkJCQkJCSAgICAgICAgICAgICAgU0NUUF9DV05EX0xPR19GUk9N
X1NTKTsKLQkJCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMzAwMAotCQkJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAotCQkJ
CQkgICAgICAgICAgc3RjYi0+YXNvYy5teV92dGFnLAotCQkJCQkgICAgICAgICAgKChzdGNiLT5z
Y3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAotCQkJCQkgICAgICAg
ICAgbmV0LAotCQkJCQkgICAgICAgICAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQkJ
CQl9IGVsc2UgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfU1Mp
OwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlv
biBhdm9pZGFuY2UgKi8KLQkJCQkvKgotCQkJCSAqIEFkZCB0byBwYmEKLQkJCQkgKi8KLQkJCSAg
ICAgICAgbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKLQotCQkJCWlm
ICgobmV0LT5mbGlnaHRfc2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2Vk
ID49IG5ldC0+Y3duZCkpIHsKLQkJCQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkIC09IG5ldC0+
Y3duZDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDMwMDAKLQkJCQkJb2xkX2N3bmQgPSBuZXQtPmN3bmQ7Ci0jZW5kaWYKLQkJCQkJc3dpdGNoIChh
c29jLT5zY3RwX2NtdF9vbl9vZmYpIHsKLQkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYxOgotCQkJCQkJ
aW5jciA9ICh1aW50MzJfdCkoKCh1aW50NjRfdCluZXQtPm10dSAqCi0JCQkJCQkgICAgICAgICAg
ICAgICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KLQkJCQkJCSAgICAgICAgICAgICAg
ICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKLQkJCQkJCWlmIChpbmNyID09IDApIHsKLQkJCQkJ
CQlpbmNyID0gMTsKLQkJCQkJCX0KLQkJCQkJCWJyZWFrOwotCQkJCQljYXNlIFNDVFBfQ01UX1JQ
VjI6Ci0JCQkJCQkvKiBsYXN0c2E+PjM7ICB3ZSBkb24ndCBuZWVkIHRvIGRpdmlkZSAuLi4gKi8K
LQkJCQkJCXNydHQgPSBuZXQtPmxhc3RzYTsKLQkJCQkJCWlmIChzcnR0ID09IDApIHsKLQkJCQkJ
CQlzcnR0ID0gMTsKLQkJCQkJCX0KLQkJCQkJCWluY3IgPSAodWludDMyX3QpKCh1aW50NjRfdClu
ZXQtPm10dSAqCi0JCQkJCQkgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5jd25kIC8K
LQkJCQkJCSAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqCi0JCQkJCQkgICAgICAg
ICAgICAgICAgICAgdF91Y3duZF9zYncpKTsKLQkJCQkJCSAgICAgICAgICAgICAgICAgIC8qIElO
Q1JFQVNFIEZBQ1RPUiAqLwotCQkJCQkJaWYgKGluY3IgPT0gMCkgewotCQkJCQkJCWluY3IgPSAx
OwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWNhc2UgU0NUUF9DTVRfTVBUQ1A6Ci0JCQkJ
CQlpbmNyID0gKHVpbnQzMl90KSgobXB0Y3BfbGlrZV9hbHBoYSAqCi0JCQkJCQkgICAgICAgICAg
ICAgICAgICAgKHVpbnQ2NF90KSBuZXQtPmN3bmQpID4+Ci0JCQkJCQkgICAgICAgICAgICAgICAg
ICBTSElGVF9NUFRDUF9NVUxUSSk7Ci0JCQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1KSB7Ci0JCQkJ
CQkJaW5jciA9IG5ldC0+bXR1OwotCQkJCQkJfQotCQkJCQkJYnJlYWs7Ci0JCQkJCWRlZmF1bHQ6
Ci0JCQkJCQlpbmNyID0gbmV0LT5tdHU7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQluZXQt
PmN3bmQgKz0gaW5jcjsKLQkJCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoYXNvYywgbmV0KTsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAK
LQkJCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGFjaywKLQkJCQkJCSAgc3RjYi0+YXNv
Yy5teV92dGFnLAotCQkJCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwg
KHN0Y2ItPnJwb3J0KSksCi0JCQkJCQkgIG5ldCwKLQkJCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3du
ZCk7Ci0jZW5kaWYKLQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfY3duZChzdGNi
LCBuZXQsIG5ldC0+bXR1LAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfRlJPTV9DQSk7Ci0J
CQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19j
d25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0df
Tk9BRFZfQ0EpOwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJM
RSkgewotCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJCQkJICAgICAg
U0NUUF9DV05EX0xPR19OT19DVU1BQ0spOwotCQkJfQotCQl9Ci0JfQotfQotCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi1zdGF0aWMgdm9p
ZAotc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLSNlbHNlCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3Vw
ZGF0ZV9leGl0X3BmX2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKLSNlbmRpZgotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCWludCBvbGRfY3duZDsKLQotCW9sZF9j
d25kID0gbmV0LT5jd25kOwotI2VuZGlmCi0JbmV0LT5jd25kID0gbmV0LT5tdHU7Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JU0RUX1BS
T0JFNShzY3RwLCBjd25kLCBuZXQsIGFjaywKLQkgICAgICAgICAgc3RjYi0+YXNvYy5teV92dGFn
LCAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksIG5l
dCwKLQkgICAgICAgICAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7Ci0jZW5kaWYKLQlTQ1RQREJHKFND
VFBfREVCVUdfSU5EQVRBMSwgIkRlc3RpbmF0aW9uICVwIG1vdmVkIGZyb20gUEYgdG8gcmVhY2hh
YmxlIHdpdGggY3duZCAlZC5cbiIsCi0JICAgICAgICAodm9pZCAqKW5ldCwgbmV0LT5jd25kKTsK
LX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWludCBvbGRfY3du
ZCA9IG5ldC0+Y3duZDsKLQl1aW50MzJfdCB0X3NzdGhyZXNoLCB0X2N3bmQ7Ci0JdWludDY0X3Qg
dF91Y3duZF9zYnc7Ci0KLQkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5k
IG92ZXIgYWdhaW4gKi8KLQl0X3NzdGhyZXNoID0gMDsKLQl0X2N3bmQgPSAwOwotCWlmICgoc3Rj
Yi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKLQkgICAgKHN0Y2It
PmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7Ci0JCXN0cnVjdCBzY3Rw
X25ldHMgKmxuZXQ7Ci0JCXVpbnQzMl90IHNydHQ7Ci0KLQkJdF91Y3duZF9zYncgPSAwOwotCQlU
QUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJdF9z
c3RocmVzaCArPSBsbmV0LT5zc3RocmVzaDsKLQkJCXRfY3duZCArPSBsbmV0LT5jd25kOwotCQkJ
c3J0dCA9IGxuZXQtPmxhc3RzYTsKLQkJCS8qIGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8g
ZGl2aWRlIC4uLiAqLwotCQkJaWYgKHNydHQgPiAwKSB7Ci0JCQkJdF91Y3duZF9zYncgKz0gKHVp
bnQ2NF90KWxuZXQtPmN3bmQgLyAodWludDY0X3Qpc3J0dDsKLQkJCX0KLQkJfQotCQlpZiAodF9z
c3RocmVzaCA8IDEpIHsKLQkJCXRfc3N0aHJlc2ggPSAxOwotCQl9Ci0JCWlmICh0X3Vjd25kX3Ni
dyA8IDEpIHsKLQkJCXRfdWN3bmRfc2J3ID0gMTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zY3Rw
X2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgewotCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50
MzJfdCkoKCh1aW50NjRfdCk0ICoKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWlu
dDY0X3QpbmV0LT5tdHUgKgotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRf
dCluZXQtPnNzdGhyZXNoKSAvCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0
X3QpdF9zc3RocmVzaCk7Ci0JCX0gZWxzZSB7Ci0JCQl1aW50NjRfdCBjY19kZWx0YTsKLQotCQkJ
c3J0dCA9IG5ldC0+bGFzdHNhOwotCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBk
aXZpZGUgLi4uICovCi0JCQlpZiAoc3J0dCA9PSAwKSB7Ci0JCQkJc3J0dCA9IDE7Ci0JCQl9Ci0J
CQljY19kZWx0YSA9IHRfdWN3bmRfc2J3ICogKHVpbnQ2NF90KXNydHQgLyAyOwotCQkJaWYgKGNj
X2RlbHRhIDwgdF9jd25kKSB7Ci0JCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKHVpbnQ2
NF90KXRfY3duZCAtIGNjX2RlbHRhKTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0LT5zc3RocmVzaCAg
PSBuZXQtPm10dTsKLQkJCX0KLQkJfQotCQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYm
Ci0JCSAgICAobmV0LT5zc3RocmVzaCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7Ci0JCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC0gdF9jd25kIC8gMjsKLQkJfQotCQlpZiAobmV0LT5z
c3RocmVzaCA8IG5ldC0+bXR1KSB7Ci0JCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7Ci0JCX0K
LQl9IGVsc2UgewotCQluZXQtPnNzdGhyZXNoID0gbWF4KG5ldC0+Y3duZCAvIDIsIDQgKiBuZXQt
Pm10dSk7Ci0JfQotCW5ldC0+Y3duZCA9IG5ldC0+bXR1OwotCW5ldC0+cGFydGlhbF9ieXRlc19h
Y2tlZCA9IDA7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAzMDAwCi0JU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHRvLAotCQkgIHN0Y2ItPmFz
b2MubXlfdnRhZywKLQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0
Y2ItPnJwb3J0KSksCi0JCSAgbmV0LAotCQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOwotI2VuZGlm
Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9N
T05JVE9SX0VOQUJMRSkgewotCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5jd25kIC0g
b2xkX2N3bmQsIFNDVFBfQ1dORF9MT0dfRlJPTV9SVFgpOwotCX0KLX0KLQotc3RhdGljIHZvaWQK
LXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG9fY29tbW9uKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotCQkJCQkgICAgaW50IGluX3dpbmRvdywgaW50
IG51bV9wa3RfbG9zdCwgaW50IHVzZV9ydGNjKQotewotCWludCBvbGRfY3duZCA9IG5ldC0+Y3du
ZDsKLQlpZiAoKHVzZV9ydGNjKSAmJiAobmV0LT5sYW5fdHlwZSA9PSBTQ1RQX0xBTl9MT0NBTCkg
JiYgKG5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2RjY2NfZWNuKSkgewotCQkvKiBEYXRhIGNlbnRlciBD
b25nZXN0aW9uIENvbnRyb2wgKi8KLQkJaWYgKGluX3dpbmRvdyA9PSAwKSB7Ci0JCQkvKiBHbyB0
byBDQSB3aXRoIHRoZSBjd25kIGF0IHRoZSBwb2ludCB3ZSBzZW50Ci0JCQkgKiB0aGUgVFNOIHRo
YXQgd2FzIG1hcmtlZCB3aXRoIGEgQ0UuCi0JCQkgKi8KLQkJCWlmIChuZXQtPmVjbl9wcmV2X2N3
bmQgPCBuZXQtPmN3bmQpIHsKLQkJCQkvKiBSZXN0b3JlIHRvIHByZXYgY3duZCAqLwotCQkJCW5l
dC0+Y3duZCA9IG5ldC0+ZWNuX3ByZXZfY3duZCAtIChuZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7
Ci0JCQl9IGVsc2UgewotCQkJCS8qIEp1c3QgY3V0IGluIDEvMiAqLwotCQkJCW5ldC0+Y3duZCAv
PSAyOwotCQkJfQotCQkJLyogRHJvcCB0byBDQSAqLwotCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+
Y3duZCAtIChudW1fcGt0X2xvc3QgKiBuZXQtPm10dSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJ
c2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dO
RF9MT0dfRlJPTV9TQVQpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogRnVydGhlciB0dW5pbmcg
ZG93biByZXF1aXJlZCBvdmVyIHRoZSBkcmFzdGljIG9yaWdpbmFsIGN1dCAqLwotCQkJbmV0LT5z
c3RocmVzaCAtPSAobmV0LT5tdHUgKiBudW1fcGt0X2xvc3QpOwotCQkJbmV0LT5jd25kIC09IChu
ZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2df
Y3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJP
TV9TQVQpOwotCQkJfQotCi0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRj
d25kKTsKLQl9ICBlbHNlIHsKLQkJaWYgKGluX3dpbmRvdyA9PSAwKSB7Ci0JCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19lY25lcmVkdWNlZGN3bmQpOwotCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3du
ZCAvIDI7Ci0JCQlpZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7Ci0JCQkJbmV0LT5zc3Ro
cmVzaCA9IG5ldC0+bXR1OwotCQkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRpbWVyIGFzIHdlbGws
IHRvIHNsb3cgdXMgZG93biAqLwotCQkJCW5ldC0+UlRPIDw8PSAxOwotCQkJfQotCQkJbmV0LT5j
d25kID0gbmV0LT5zc3RocmVzaDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDMwMDAKLQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBlY24s
Ci0JCQkJICBzdGNiLT5hc29jLm15X3Z0YWcsCi0JCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
bHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksCi0JCQkJICBuZXQsCi0JCQkJICBvbGRfY3du
ZCwgbmV0LT5jd25kKTsKLSNlbmRpZgotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3
bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01f
U0FUKTsKLQkJCX0KLQkJfQotCX0KLQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0Jc3RydWN0IHNj
dHBfbmV0cyAqbmV0LCBzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKLQl1aW50MzJfdCAq
Ym90dGxlX2J3LCB1aW50MzJfdCAqb25fcXVldWUpCi17Ci0JdWludDMyX3QgYndfYXZhaWw7Ci0J
dW5zaWduZWQgaW50IGluY3I7Ci0JaW50IG9sZF9jd25kID0gbmV0LT5jd25kOwotCi0JLyogZ2V0
IGJvdHRsZSBuZWNrIGJ3ICovCi0JKmJvdHRsZV9idyA9IG50b2hsKGNwLT5ib3R0bGVfYncpOwot
CS8qIGFuZCB3aGF0cyBvbiBxdWV1ZSAqLwotCSpvbl9xdWV1ZSA9IG50b2hsKGNwLT5jdXJyZW50
X29ucSk7Ci0JLyoKLQkgKiBhZGp1c3QgdGhlIG9uLXF1ZXVlIGlmIG91ciBmbGlnaHQgaXMgbW9y
ZSBpdCBjb3VsZCBiZQotCSAqIHRoYXQgdGhlIHJvdXRlciBoYXMgbm90IHlldCBnb3R0ZW4gZGF0
YSAiaW4tZmxpZ2h0IiB0byBpdAotCSAqLwotCWlmICgqb25fcXVldWUgPCBuZXQtPmZsaWdodF9z
aXplKSB7Ci0JCSpvbl9xdWV1ZSA9IG5ldC0+ZmxpZ2h0X3NpemU7Ci0JfQotCS8qIHJ0dCBpcyBt
ZWFzdXJlZCBpbiBtaWNybyBzZWNvbmRzLCBib3R0bGVfYncgaW4gYnl0ZXMgcGVyIHNlY29uZCAq
LwotCWJ3X2F2YWlsID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KSgqYm90dGxlX2J3KSAqIG5ldC0+
cnR0KSAvICh1aW50NjRfdCkxMDAwMDAwKTsKLQlpZiAoYndfYXZhaWwgPiAqYm90dGxlX2J3KSB7
Ci0JCS8qCi0JCSAqIENhcCB0aGUgZ3Jvd3RoIHRvIG5vIG1vcmUgdGhhbiB0aGUgYm90dGxlIG5l
Y2suCi0JCSAqIFRoaXMgY2FuIGhhcHBlbiBhcyBSVFQgc2xpZGVzIHVwIGR1ZSB0byBxdWV1ZXMu
Ci0JCSAqIEl0IGFsc28gbWVhbnMgaWYgeW91IGhhdmUgbW9yZSB0aGFuIGEgMSBzZWNvbmQKLQkJ
ICogUlRUIHdpdGggYSBlbXB0eSBxdWV1ZSB5b3Ugd2lsbCBiZSBsaW1pdGVkIHRvIHRoZQotCQkg
KiBib3R0bGVfYncgcGVyIHNlY29uZCBubyBtYXR0ZXIgaWYgb3RoZXIgcG9pbnRzCi0JCSAqIGhh
dmUgMS8yIHRoZSBSVFQgYW5kIHlvdSBjb3VsZCBnZXQgbW9yZSBvdXQuLi4KLQkJICovCi0JCWJ3
X2F2YWlsID0gKmJvdHRsZV9idzsKLQl9Ci0JaWYgKCpvbl9xdWV1ZSA+IGJ3X2F2YWlsKSB7Ci0J
CS8qCi0JCSAqIE5vIHJvb20gZm9yIGFueXRoaW5nIGVsc2UgZG9uJ3QgYWxsb3cgYW55dGhpbmcK
LQkJICogZWxzZSB0byBiZSAiYWRkZWQgdG8gdGhlIGZpcmUiLgotCQkgKi8KLQkJaW50IHNlZ19p
bmZsaWdodCwgc2VnX29ucXVldWUsIG15X3BvcnRpb247Ci0KLQkJbmV0LT5wYXJ0aWFsX2J5dGVz
X2Fja2VkID0gMDsKLQkJLyogaG93IG11Y2ggYXJlIHdlIG92ZXIgcXVldWUgc2l6ZT8gKi8KLQkJ
aW5jciA9ICpvbl9xdWV1ZSAtIGJ3X2F2YWlsOwotCQlpZiAoc3RjYi0+YXNvYy5zZWVuX2Ffc2Fj
a190aGlzX3BrdCkgewotCQkJLyoKLQkJCSAqIHVuZG8gYW55IGN3bmQgYWRqdXN0bWVudCB0aGF0
IHRoZSBzYWNrCi0JCQkgKiBtaWdodCBoYXZlIG1hZGUKLQkJCSAqLwotCQkJbmV0LT5jd25kID0g
bmV0LT5wcmV2X2N3bmQ7Ci0JCX0KLQkJLyogTm93IGhvdyBtdWNoIG9mIHRoYXQgaXMgbWluZT8g
Ki8KLQkJc2VnX2luZmxpZ2h0ID0gbmV0LT5mbGlnaHRfc2l6ZSAvIG5ldC0+bXR1OwotCQlzZWdf
b25xdWV1ZSA9ICpvbl9xdWV1ZSAvIG5ldC0+bXR1OwotCQlteV9wb3J0aW9uID0gKGluY3IgKiBz
ZWdfaW5mbGlnaHQpIC8gc2VnX29ucXVldWU7Ci0KLQkJLyogSGF2ZSBJIG1hZGUgYW4gYWRqdXN0
bWVudCBhbHJlYWR5ICovCi0JCWlmIChuZXQtPmN3bmQgPiBuZXQtPmZsaWdodF9zaXplKSB7Ci0J
CQkvKgotCQkJICogZm9yIHRoaXMgZmxpZ2h0IEkgbWFkZSBhbiBhZGp1c3RtZW50IHdlCi0JCQkg
KiBuZWVkIHRvIGRlY3JlYXNlIHRoZSBwb3J0aW9uIGJ5IGEgc2hhcmUKLQkJCSAqIG91ciBwcmV2
aW91cyBhZGp1c3RtZW50LgotCQkJICovCi0JCQlpbnQgZGlmZl9hZGo7Ci0KLQkJCWRpZmZfYWRq
ID0gbmV0LT5jd25kIC0gbmV0LT5mbGlnaHRfc2l6ZTsKLQkJCWlmIChkaWZmX2FkaiA+IG15X3Bv
cnRpb24pCi0JCQkJbXlfcG9ydGlvbiA9IDA7Ci0JCQllbHNlCi0JCQkJbXlfcG9ydGlvbiAtPSBk
aWZmX2FkajsKLQkJfQotCQkvKgotCQkgKiBiYWNrIGRvd24gdG8gdGhlIHByZXZpb3VzIGN3bmQg
KGFzc3VtZSB3ZSBoYXZlCi0JCSAqIGhhZCBhIHNhY2sgYmVmb3JlIHRoaXMgcGFja2V0KS4gbWlu
dXMgd2hhdCBldmVyCi0JCSAqIHBvcnRpb24gb2YgdGhlIG92ZXJhZ2UgaXMgbXkgZmF1bHQuCi0J
CSAqLwotCQluZXQtPmN3bmQgLT0gbXlfcG9ydGlvbjsKLQotCQkvKiB3ZSB3aWxsIE5PVCBiYWNr
IGRvd24gbW9yZSB0aGFuIDEgTVRVICovCi0JCWlmIChuZXQtPmN3bmQgPD0gbmV0LT5tdHUpIHsK
LQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1OwotCQl9Ci0JCS8qIGZvcmNlIGludG8gQ0EgKi8KLQkJ
bmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIDE7Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogVGFr
ZSAxLzQgb2YgdGhlIHNwYWNlIGxlZnQgb3IgbWF4IGJ1cnN0IHVwIC4uCi0JCSAqIHdoaWNoZXZl
ciBpcyBsZXNzLgotCQkgKi8KLQkJaW5jciA9IChid19hdmFpbCAtICpvbl9xdWV1ZSkgPj4gMjsK
LQkJaWYgKChzdGNiLT5hc29jLm1heF9idXJzdCA+IDApICYmCi0JCSAgICAoc3RjYi0+YXNvYy5t
YXhfYnVyc3QgKiBuZXQtPm10dSA8IGluY3IpKSB7Ci0JCQlpbmNyID0gc3RjYi0+YXNvYy5tYXhf
YnVyc3QgKiBuZXQtPm10dTsKLQkJfQotCQluZXQtPmN3bmQgKz0gaW5jcjsKLQl9Ci0JaWYgKG5l
dC0+Y3duZCA+IGJ3X2F2YWlsKSB7Ci0JCS8qIFdlIGNhbid0IGV4Y2VlZCB0aGUgcGlwZSBzaXpl
ICovCi0JCW5ldC0+Y3duZCA9IGJ3X2F2YWlsOwotCX0KLQlpZiAobmV0LT5jd25kIDwgbmV0LT5t
dHUpIHsKLQkJLyogV2UgYWx3YXlzIGhhdmUgMSBNVFUgKi8KLQkJbmV0LT5jd25kID0gbmV0LT5t
dHU7Ci0JfQotCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotCWlm
IChuZXQtPmN3bmQgLSBvbGRfY3duZCAhPSAwKSB7Ci0JCS8qIGxvZyBvbmx5IGNoYW5nZXMgKi8K
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAK
LQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHBkLAotCQkJICBzdGNiLT5hc29jLm15X3Z0
YWcsCi0JCQkgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+cnBv
cnQpKSwKLQkJCSAgbmV0LAotCQkJICBvbGRfY3duZCwgbmV0LT5jd25kKTsKLSNlbmRpZgotCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklU
T1JfRU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9s
ZF9jd25kKSwKLQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKLQkJfQotCX0KLX0KLQotc3Rh
dGljIHZvaWQKLXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGJ1cnN0X2xpbWl0KQot
ewotCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0
LT5jd25kKQotCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kOwotCWlmIChidXJzdF9saW1pdCkg
ewotCQluZXQtPmN3bmQgPSAobmV0LT5mbGlnaHRfc2l6ZSArIChidXJzdF9saW1pdCAqIG5ldC0+
bXR1KSk7Ci0JCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCQlT
RFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYmwsCi0JCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywK
LQkJCSAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkp
LAotCQkJICBuZXQsCi0JCQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOwotI2VuZGlmCi0JCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9F
TkFCTEUpIHsKLQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3
bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fQlJTVCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJ
ICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotCQkJICAgIGludCBhY2N1bV9tb3Zl
ZCwgaW50IHJlbmVnZWRfYWxsLCBpbnQgd2lsbF9leGl0KQotewotCS8qIFBhc3NpbmcgYSB6ZXJv
IGFyZ3VtZW50IGluIGxhc3QgZGlzYWJsZXMgdGhlIHJ0Y2MgYWxnb3JpdGhtICovCi0Jc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1vbihzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVu
ZWdlZF9hbGwsIHdpbGxfZXhpdCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0
cyAqbmV0LAotCWludCBpbl93aW5kb3csIGludCBudW1fcGt0X2xvc3QpCi17Ci0JLyogUGFzc2lu
ZyBhIHplcm8gYXJndW1lbnQgaW4gbGFzdCBkaXNhYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8K
LQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvX2NvbW1vbihzdGNiLCBuZXQsIGluX3dp
bmRvdywgbnVtX3BrdF9sb3N0LCAwKTsKLX0KLQotLyogSGVyZSBzdGFydHMgdGhlIFJUQ0NWQVIg
dHlwZSBDQyBpbnZlbnRlZCBieSBSUlMgd2hpY2gKLSAqIGlzIGEgc2xpZ2h0IG1vZCB0byBSRkMy
NTgxLiBXZSByZXVzZSBhIGNvbW1vbiByb3V0aW5lIG9yCi0gKiB0d28gc2luY2UgdGhlc2UgYWxn
b3JpdGhtcyBhcmUgc28gY2xvc2UgYW5kIG5lZWQgdG8KLSAqIHJlbWFpbiB0aGUgc2FtZS4KLSAq
Lwotc3RhdGljIHZvaWQKLXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobyhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJCQkgICAgIGludCBp
bl93aW5kb3csIGludCBudW1fcGt0X2xvc3QpCi17Ci0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9l
Y25fZWNob19jb21tb24oc3RjYiwgbmV0LCBpbl93aW5kb3csIG51bV9wa3RfbG9zdCwgMSk7Ci19
Ci0KLQotc3RhdGljCi12b2lkIHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2Vk
KHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJCQkJICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsg
KnRwMSkKLXsKLQluZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzICs9IHRwMS0+c2VuZF9zaXplOwot
fQotCi1zdGF0aWMgdm9pZAotc2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2soc3Ry
dWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELAotCQkJCSAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQpCi17Ci0JaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA+IDApIHsKLQkJ
LyogV2UgaGFkIGEgYncgbWVhc3VybWVudCBnb2luZyBvbiAqLwotCQlzdHJ1Y3QgdGltZXZhbCBs
dGxzOwotCQlTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJmx0bHMpOwotCQl0aW1ldmFsc3ViKCZsdGxz
LCAmbmV0LT5jY19tb2QucnRjYy50bHMpOwotCQluZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGlt
ZSA9IChsdGxzLnR2X3NlYyAqIDEwMDAwMDApICsgbHRscy50dl91c2VjOwotCX0KLX0KLQotc3Rh
dGljIHZvaWQKLXNjdHBfY3duZF9uZXdfcnRjY190cmFuc21pc3Npb25fYmVnaW5zKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKLQkJCQkgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAotCXVp
bnQ2NF90IHZ0YWcsIHByb2JlcG9pbnQ7Ci0KLSNlbmRpZgotCWlmIChuZXQtPmNjX21vZC5ydGNj
LmxidykgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDgwMzAwMAotCQkvKiBDbGVhciB0aGUgb2xkIGJ3Li4gd2Ugd2VudCB0byAwIGluLWZsaWdodCAq
LwotCQl2dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8ICgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2Vw
LT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKLQkJCShzdGNiLT5ycG9ydCk7Ci0JCXByb2JlcG9pbnQg
PSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKLQkJLyogUHJvYmUgcG9pbnQgOCAqLwot
CQlwcm9iZXBvaW50IHw9ICAoKDggPDwgMTYpIHwgMCk7Ci0JCVNEVF9QUk9CRTUoc2N0cCwgY3du
ZCwgbmV0LCBydHR2YXIsCi0JCQkgIHZ0YWcsCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncg
PDwgMzIpIHwgMCksCi0JCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5l
dC0+cnR0KSwKLQkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKLQkJCSAgcHJvYmVwb2ludCk7Ci0jZW5k
aWYKLQkJbmV0LT5jY19tb2QucnRjYy5sYndfcnR0ID0gMDsKLQkJbmV0LT5jY19tb2QucnRjYy5j
d25kX2F0X2J3X3NldCA9IDA7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ID0gMDsKLQkJbmV0LT5j
Y19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSAwOwotCQluZXQtPmNjX21vZC5ydGNj
LnZvbF9yZWR1Y2UgPSAwOwotCQluZXQtPmNjX21vZC5ydGNjLmJ3X3RvdF90aW1lID0gMDsKLQkJ
bmV0LT5jY19tb2QucnRjYy5id19ieXRlcyA9IDA7Ci0JCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25l
ZWRzX3NldCA9IDA7Ci0JCWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7Ci0JCQlu
ZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAwOwotCQkJbmV0LT5jY19tb2QucnRjYy5zdGVw
X2NudCA9IDA7Ci0JCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7Ci0JCX0K
LQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpIHsKLQkJCS8qIGxlc3MgYWdncmVz
c2l2ZSBvbmUgLSByZXNldCBjd25kIHRvbyAqLwotCQkJdWludDMyX3QgY3duZF9pbl9tdHUsIGN3
bmQ7Ci0KLQkJCWN3bmRfaW5fbXR1ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3du
ZCk7Ci0JCQlpZiAoY3duZF9pbl9tdHUgPT0gMCkgewotCQkJCS8qIFVzaW5nIDAgbWVhbnMgdGhh
dCB0aGUgdmFsdWUgb2YgUkZDIDQ5NjAgaXMgdXNlZC4gKi8KLQkJCQljd25kID0gbWluKChuZXQt
Pm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7Ci0JCQl9
IGVsc2UgewotCQkJCS8qCi0JCQkJICogV2UgdGFrZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3Qg
bGltaXQgYW5kIHRoZQotCQkJCSAqIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cuCi0JCQkJICov
Ci0JCQkJaWYgKChzdGNiLT5hc29jLm1heF9idXJzdCA+IDApICYmIChjd25kX2luX210dSA+IHN0
Y2ItPmFzb2MubWF4X2J1cnN0KSkKLQkJCQkJY3duZF9pbl9tdHUgPSBzdGNiLT5hc29jLm1heF9i
dXJzdDsKLQkJCQljd25kID0gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkgKiBj
d25kX2luX210dTsKLQkJCX0KLQkJCWlmIChuZXQtPmN3bmQgPiBjd25kKSB7Ci0JCQkJLyogT25s
eSBzZXQgaWYgd2UgYXJlIG5vdCBhIHRpbWVvdXQgKGkuZS4gZG93biB0byAxIG10dSkgKi8KLQkJ
CQluZXQtPmN3bmQgPSBjd25kOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9zZXRfcnRjY19pbml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAg
ICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JdWludDY0X3QgdnRhZywgcHJvYmVwb2lu
dDsKLQotI2VuZGlmCi0Jc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOwotCXN0
Y2ItPmFzb2MudXNlX3ByZWNpc2VfdGltZSA9IDE7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCi0JcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90
KW5ldC0+Y3duZCkgPDwgMzIpOwotCXByb2JlcG9pbnQgfD0gICgoOSA8PCAxNikgfCAwKTsKLQl2
dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8Ci0JCSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5z
Y3RwX2xwb3J0KSkgPDwgMTYpIHwKLQkJKHN0Y2ItPnJwb3J0KTsKLQlTRFRfUFJPQkU1KHNjdHAs
IGN3bmQsIG5ldCwgcnR0dmFyLAotCQkgIHZ0YWcsCi0JCSAgMCwKLQkJICAwLAotCQkgIDAsCi0J
CSAgcHJvYmVwb2ludCk7Ci0jZW5kaWYKLQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSAwOwot
CW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2Mu
dm9sX3JlZHVjZSA9IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5sYncgPSAwOwotCW5ldC0+Y2NfbW9k
LnJ0Y2Mudm9sX3JlZHVjZSA9IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0
X3J0dGMgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2MuYndfdG90X3RpbWUgPSAwOwotCW5ldC0+Y2Nf
bW9kLnJ0Y2MuYndfYnl0ZXMgPSAwOwotCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9
IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9ydHR2YXJfZXFyZXQpOwotCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXAgPSBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfc3RlYWR5X3N0ZXApOwotCW5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2RjY2Nf
ZWNuID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9kY2NjX2Vjbik7Ci0JbmV0LT5jY19tb2Qu
cnRjYy5zdGVwX2NudCA9IDA7Ci0JbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAw
OwotCi0KLX0KLQotc3RhdGljIGludAotc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbihzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZXRvcmdldCwKLQkJCSAgICAgc3RydWN0IHNjdHBfY2Nf
b3B0aW9uICpjY19vcHQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCWlmIChzZXRvcmdl
dCA9PSAxKSB7Ci0JCS8qIGEgc2V0ICovCi0JCWlmIChjY19vcHQtPm9wdGlvbiA9PSBTQ1RQX0ND
X09QVF9SVENDX1NFVE1PREUpIHsKLQkJCWlmICgoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFs
dWUgIT0gMCkgJiYKLQkJCSAgICAoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMSkp
IHsKLQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQl9Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0
Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5yZXRfZnJv
bV9lcSA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOwotCQkJfQotCQl9IGVsc2UgaWYg
KGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDTikgewotCQkJaWYgKChj
Y19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSAhPSAwKSAmJgotCQkJICAgIChjY19vcHQtPmFp
ZF92YWx1ZS5hc3NvY192YWx1ZSAhPSAxKSkgewotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCX0K
LQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJ
CQluZXQtPmNjX21vZC5ydGNjLnVzZV9kY2NjX2VjbiA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29j
X3ZhbHVlOwotCQkJfQotCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BU
X1NURUFEWV9TVEVQKSB7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywg
c2N0cF9uZXh0KSB7Ci0JCQkJbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCA9IGNjX29wdC0+
YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0dXJuIChFSU5W
QUwpOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogYSBnZXQgKi8KLQkJaWYgKGNjX29wdC0+b3B0aW9u
ID09IFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9ERSkgewotCQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0
Y2ItPmFzb2MubmV0cyk7Ci0JCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKEVGQVVM
VCk7Ci0JCQl9Ci0JCQljY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSA9IG5ldC0+Y2NfbW9k
LnJ0Y2MucmV0X2Zyb21fZXE7Ci0JCX0gZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9D
Q19PUFRfVVNFX0RDQ0NfRUNOKSB7Ci0JCQluZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5u
ZXRzKTsKLQkJCWlmIChuZXQgPT0gTlVMTCkgewotCQkJCXJldHVybiAoRUZBVUxUKTsKLQkJCX0K
LQkJCWNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlID0gbmV0LT5jY19tb2QucnRjYy51c2Vf
ZGNjY19lY247Ci0JCX0gZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfU1RF
QURZX1NURVApIHsKLQkJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwotCQkJ
aWYgKG5ldCA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChFRkFVTFQpOwotCQkJfQotCQkJY2Nfb3B0
LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgPSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwOwot
CQl9IGVsc2UgewotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoMCk7Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBkYXRlX3J0Y2NfcGFja2V0X3RyYW5zbWl0dGVk
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCWlmIChuZXQt
PmNjX21vZC5ydGNjLnRsc19uZWVkc19zZXQgPT0gMCkgewotCQlTQ1RQX0dFVFBUSU1FX1RJTUVW
QUwoJm5ldC0+Y2NfbW9kLnJ0Y2MudGxzKTsKLQkJbmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNf
c2V0ID0gMjsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0
ZXJfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jLAotCQkJCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCwgaW50IHdp
bGxfZXhpdCkKLXsKLQkvKiBQYXNzaW5nIGEgb25lIGFyZ3VtZW50IGF0IHRoZSBsYXN0IGVuYWJs
ZXMgdGhlIHJ0Y2MgYWxnb3JpdGhtICovCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2Nv
bW1vbihzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdCwgMSk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3J0dF9ydGNjX2NhbGN1bGF0ZWQoc3RydWN0IHNjdHBf
dGNiICpzdGNiIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAq
bm93IFNDVFBfVU5VU0VEKQotewotCW5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2sg
PSAxOwotfQotCi0vKiBIZXJlIHN0YXJ0cyBTYWxseSBGbG95ZHMgSFMtVENQICovCi0KLXN0cnVj
dCBzY3RwX2hzX3JhaXNlX2Ryb3AgewotCWludDMyX3QgY3duZDsKLQlpbnQ4X3QgaW5jcmVhc2U7
Ci0JaW50OF90IGRyb3BfcGVyY2VudDsKLX07Ci0KLSNkZWZpbmUgU0NUUF9IU19UQUJMRV9TSVpF
IDczCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2N0cF9oc19yYWlzZV9kcm9wIHNjdHBfY3duZF9h
ZGp1c3RbU0NUUF9IU19UQUJMRV9TSVpFXSA9IHsKLQl7MzgsIDEsIDUwfSwJCS8qIDAgICAqLwot
CXsxMTgsIDIsIDQ0fSwJCS8qIDEgICAqLwotCXsyMjEsIDMsIDQxfSwJCS8qIDIgICAqLwotCXsz
NDcsIDQsIDM4fSwJCS8qIDMgICAqLwotCXs0OTUsIDUsIDM3fSwJCS8qIDQgICAqLwotCXs2NjMs
IDYsIDM1fSwJCS8qIDUgICAqLwotCXs4NTEsIDcsIDM0fSwJCS8qIDYgICAqLwotCXsxMDU4LCA4
LCAzM30sCQkvKiA3ICAgKi8KLQl7MTI4NCwgOSwgMzJ9LAkJLyogOCAgICovCi0JezE1MjksIDEw
LCAzMX0sCQkvKiA5ICAgKi8KLQl7MTc5MywgMTEsIDMwfSwJCS8qIDEwICAqLwotCXsyMDc2LCAx
MiwgMjl9LAkJLyogMTEgICovCi0JezIzNzgsIDEzLCAyOH0sCQkvKiAxMiAgKi8KLQl7MjY5OSwg
MTQsIDI4fSwJCS8qIDEzICAqLwotCXszMDM5LCAxNSwgMjd9LAkJLyogMTQgICovCi0JezMzOTks
IDE2LCAyN30sCQkvKiAxNSAgKi8KLQl7Mzc3OCwgMTcsIDI2fSwJCS8qIDE2ICAqLwotCXs0MTc3
LCAxOCwgMjZ9LAkJLyogMTcgICovCi0JezQ1OTYsIDE5LCAyNX0sCQkvKiAxOCAgKi8KLQl7NTAz
NiwgMjAsIDI1fSwJCS8qIDE5ICAqLwotCXs1NDk3LCAyMSwgMjR9LAkJLyogMjAgICovCi0JezU5
NzksIDIyLCAyNH0sCQkvKiAyMSAgKi8KLQl7NjQ4MywgMjMsIDIzfSwJCS8qIDIyICAqLwotCXs3
MDA5LCAyNCwgMjN9LAkJLyogMjMgICovCi0Jezc1NTgsIDI1LCAyMn0sCQkvKiAyNCAgKi8KLQl7
ODEzMCwgMjYsIDIyfSwJCS8qIDI1ICAqLwotCXs4NzI2LCAyNywgMjJ9LAkJLyogMjYgICovCi0J
ezkzNDYsIDI4LCAyMX0sCQkvKiAyNyAgKi8KLQl7OTk5MSwgMjksIDIxfSwJCS8qIDI4ICAqLwot
CXsxMDY2MSwgMzAsIDIxfSwJLyogMjkgICovCi0JezExMzU4LCAzMSwgMjB9LAkvKiAzMCAgKi8K
LQl7MTIwODIsIDMyLCAyMH0sCS8qIDMxICAqLwotCXsxMjgzNCwgMzMsIDIwfSwJLyogMzIgICov
Ci0JezEzNjE0LCAzNCwgMTl9LAkvKiAzMyAgKi8KLQl7MTQ0MjQsIDM1LCAxOX0sCS8qIDM0ICAq
LwotCXsxNTI2NSwgMzYsIDE5fSwJLyogMzUgICovCi0JezE2MTM3LCAzNywgMTl9LAkvKiAzNiAg
Ki8KLQl7MTcwNDIsIDM4LCAxOH0sCS8qIDM3ICAqLwotCXsxNzk4MSwgMzksIDE4fSwJLyogMzgg
ICovCi0JezE4OTU1LCA0MCwgMTh9LAkvKiAzOSAgKi8KLQl7MTk5NjUsIDQxLCAxN30sCS8qIDQw
ICAqLwotCXsyMTAxMywgNDIsIDE3fSwJLyogNDEgICovCi0JezIyMTAxLCA0MywgMTd9LAkvKiA0
MiAgKi8KLQl7MjMyMzAsIDQ0LCAxN30sCS8qIDQzICAqLwotCXsyNDQwMiwgNDUsIDE2fSwJLyog
NDQgICovCi0JezI1NjE4LCA0NiwgMTZ9LAkvKiA0NSAgKi8KLQl7MjY4ODEsIDQ3LCAxNn0sCS8q
IDQ2ICAqLwotCXsyODE5MywgNDgsIDE2fSwJLyogNDcgICovCi0JezI5NTU3LCA0OSwgMTV9LAkv
KiA0OCAgKi8KLQl7MzA5NzUsIDUwLCAxNX0sCS8qIDQ5ICAqLwotCXszMjQ1MCwgNTEsIDE1fSwJ
LyogNTAgICovCi0JezMzOTg2LCA1MiwgMTV9LAkvKiA1MSAgKi8KLQl7MzU1ODYsIDUzLCAxNH0s
CS8qIDUyICAqLwotCXszNzI1MywgNTQsIDE0fSwJLyogNTMgICovCi0JezM4OTkyLCA1NSwgMTR9
LAkvKiA1NCAgKi8KLQl7NDA4MDgsIDU2LCAxNH0sCS8qIDU1ICAqLwotCXs0MjcwNywgNTcsIDEz
fSwJLyogNTYgICovCi0JezQ0Njk0LCA1OCwgMTN9LAkvKiA1NyAgKi8KLQl7NDY3NzYsIDU5LCAx
M30sCS8qIDU4ICAqLwotCXs0ODk2MSwgNjAsIDEzfSwJLyogNTkgICovCi0JezUxMjU4LCA2MSwg
MTN9LAkvKiA2MCAgKi8KLQl7NTM2NzcsIDYyLCAxMn0sCS8qIDYxICAqLwotCXs1NjIzMCwgNjMs
IDEyfSwJLyogNjIgICovCi0JezU4OTMyLCA2NCwgMTJ9LAkvKiA2MyAgKi8KLQl7NjE3OTksIDY1
LCAxMn0sCS8qIDY0ICAqLwotCXs2NDg1MSwgNjYsIDExfSwJLyogNjUgICovCi0JezY4MTEzLCA2
NywgMTF9LAkvKiA2NiAgKi8KLQl7NzE2MTcsIDY4LCAxMX0sCS8qIDY3ICAqLwotCXs3NTQwMSwg
NjksIDEwfSwJLyogNjggICovCi0Jezc5NTE3LCA3MCwgMTB9LAkvKiA2OSAgKi8KLQl7ODQwMzUs
IDcxLCAxMH0sCS8qIDcwICAqLwotCXs4OTA1MywgNzIsIDEwfSwJLyogNzEgICovCi0Jezk0NzE3
LCA3MywgOX0JCS8qIDcyICAqLwotfTsKLQotc3RhdGljIHZvaWQKLXNjdHBfaHNfY3duZF9pbmNy
ZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlp
bnQgY3VyX3ZhbCwgaSwgaW5keCwgaW5jcjsKLQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7Ci0K
LQljdXJfdmFsID0gbmV0LT5jd25kID4+IDEwOwotCWluZHggPSBTQ1RQX0hTX1RBQkxFX1NJWkUg
LSAxOwotCi0JaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsKLQkJLyog
bm9ybWFsIG1vZGUgKi8KLQkJaWYgKG5ldC0+bmV0X2FjayA+IG5ldC0+bXR1KSB7Ci0JCQluZXQt
PmN3bmQgKz0gbmV0LT5tdHU7Ci0JCX0gZWxzZSB7Ci0JCQluZXQtPmN3bmQgKz0gbmV0LT5uZXRf
YWNrOwotCQl9Ci0JfSBlbHNlIHsKLQkJZm9yIChpID0gbmV0LT5sYXN0X2hzX3VzZWQ7IGkgPCBT
Q1RQX0hTX1RBQkxFX1NJWkU7IGkrKykgewotCQkJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRq
dXN0W2ldLmN3bmQpIHsKLQkJCQlpbmR4ID0gaTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlu
ZXQtPmxhc3RfaHNfdXNlZCA9IGluZHg7Ci0JCWluY3IgPSAoKChpbnQzMl90KXNjdHBfY3duZF9h
ZGp1c3RbaW5keF0uaW5jcmVhc2UpIDw8IDEwKTsKLQkJbmV0LT5jd25kICs9IGluY3I7Ci0JfQot
CXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwotCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUp
IHsKLQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFND
VFBfQ1dORF9MT0dfRlJPTV9TUyk7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oc19jd25k
X2RlY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCWludCBjdXJfdmFsLCBpLCBpbmR4OwotCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQot
CWN1cl92YWwgPSBuZXQtPmN3bmQgPj4gMTA7Ci0JaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRq
dXN0WzBdLmN3bmQpIHsKLQkJLyogbm9ybWFsIG1vZGUgKi8KLQkJbmV0LT5zc3RocmVzaCA9IG5l
dC0+Y3duZCAvIDI7Ci0JCWlmIChuZXQtPnNzdGhyZXNoIDwgKG5ldC0+bXR1ICogMikpIHsKLQkJ
CW5ldC0+c3N0aHJlc2ggPSAyICogbmV0LT5tdHU7Ci0JCX0KLQkJbmV0LT5jd25kID0gbmV0LT5z
c3RocmVzaDsKLQl9IGVsc2UgewotCQkvKiBkcm9wIGJ5IHRoZSBwcm9wZXIgYW1vdW50ICovCi0J
CW5ldC0+c3N0aHJlc2ggPSBuZXQtPmN3bmQgLSAoaW50KSgobmV0LT5jd25kIC8gMTAwKSAqCi0J
CSAgICAoaW50MzJfdClzY3RwX2N3bmRfYWRqdXN0W25ldC0+bGFzdF9oc191c2VkXS5kcm9wX3Bl
cmNlbnQpOwotCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOwotCQkvKiBub3cgd2hlcmUgYXJl
IHdlICovCi0JCWluZHggPSBuZXQtPmxhc3RfaHNfdXNlZDsKLQkJY3VyX3ZhbCA9IG5ldC0+Y3du
ZCA+PiAxMDsKLQkJLyogcmVzZXQgd2hlcmUgd2UgYXJlIGluIHRoZSB0YWJsZSAqLwotCQlpZiAo
Y3VyX3ZhbCA8IHNjdHBfY3duZF9hZGp1c3RbMF0uY3duZCkgewotCQkJLyogZmVlbCBvdXQgb2Yg
aHMgKi8KLQkJCW5ldC0+bGFzdF9oc191c2VkID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9
IGluZHg7IGkgPj0gMTsgaS0tKSB7Ci0JCQkJaWYgKGN1cl92YWwgPiBzY3RwX2N3bmRfYWRqdXN0
W2kgLSAxXS5jd25kKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCW5ldC0+bGFzdF9o
c191c2VkID0gaW5keDsKLQkJfQotCX0KLQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+
YXNvYywgbmV0KTsKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAo
bmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fRlIpOwotCX0KLX0KLQot
c3RhdGljIHZvaWQKLXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCS8qCi0JICogQ01UIGZh
c3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0byBkZWJ1Zy4gKChzY3RwX2NtdF9vbl9vZmYgPiAwKSAm
JgotCSAqIChuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPT0gMCkpKQotCSAqLwotCVRB
SUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0JCWlmICgoYXNvYy0+
ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSA9PSAwKSB8fAotCQkgICAgKGFzb2MtPnNjdHBfY210
X29uX29mZiA+IDApKSB7Ci0JCQkvKiBvdXQgb2YgYSBSRkMyNTgyIEZhc3QgcmVjb3Zlcnkgd2lu
ZG93PyAqLwotCQkJaWYgKG5ldC0+bmV0X2FjayA+IDApIHsKLQkJCQkvKgotCQkJCSAqIHBlciBz
ZWN0aW9uIDcuMi4zLCBhcmUgdGhlcmUgYW55Ci0JCQkJICogZGVzdGluYXRpb25zIHRoYXQgaGFk
IGEgZmFzdCByZXRyYW5zbWl0Ci0JCQkJICogdG8gdGhlbS4gSWYgc28gd2hhdCB3ZSBuZWVkIHRv
IGRvIGlzCi0JCQkJICogYWRqdXN0IHNzdGhyZXNoIGFuZCBjd25kLgotCQkJCSAqLwotCQkJCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7Ci0KLQkJCQlzY3RwX2hzX2N3bmRfZGVjcmVhc2Uo
c3RjYiwgbmV0KTsKLQotCQkJCWxjaGsgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VuZF9xdWV1ZSk7
Ci0KLQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwotCQkJCS8qIFR1cm4gb24gZmFz
dCByZWNvdmVyeSB3aW5kb3cgKi8KLQkJCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5
ID0gMTsKLQkJCQlpZiAobGNoayA9PSBOVUxMKSB7Ci0JCQkJCS8qIE1hcmsgZW5kIG9mIHRoZSB3
aW5kb3cgKi8KLQkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3Nl
cSAtIDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hr
LT5yZWMuZGF0YS50c24gLSAxOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogQ01UIGZhc3QgcmVj
b3ZlcnkgLS0gcGVyIGRlc3RpbmF0aW9uCi0JCQkJICogcmVjb3ZlcnkgdmFyaWFibGUuCi0JCQkJ
ICovCi0JCQkJbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKLQotCQkJCWlmIChs
Y2hrID09IE5VTEwpIHsKLQkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLwotCQkJCQlu
ZXQtPmZhc3RfcmVjb3ZlcnlfdHNuID0gYXNvYy0+c2VuZGluZ19zZXEgLSAxOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAx
OwotCQkJCX0KLQotCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKLQkJ
CQkJCXN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfQ0NfRlVOQ1RJT05TICsgU0NUUF9MT0NfMik7Ci0JCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKLQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQp
OwotCQkJfQotCQl9IGVsc2UgaWYgKG5ldC0+bmV0X2FjayA+IDApIHsKLQkJCS8qCi0JCQkgKiBN
YXJrIGEgcGVnIHRoYXQgd2UgV09VTEQgaGF2ZSBkb25lIGEgY3duZAotCQkJICogcmVkdWN0aW9u
IGJ1dCBSRkMyNTgyIHByZXZlbnRlZCB0aGlzIGFjdGlvbi4KLQkJCSAqLwotCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfZmFzdHJldHJhbnNpbnJ0dCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
CQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSBpbnQgYWNjdW1fbW92ZWQsIGlu
dCByZW5lZ2VkX2FsbCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKLXsKLQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQ7Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiB1cGRh
dGUgY3duZCBhbmQgRWFybHkgRlIgICAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0JVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQotI2lm
ZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKLQkJLyoKLQkJICogQ01UIGZhc3QgcmVjb3Zlcnkg
Y29kZS4gTmVlZCB0byBkZWJ1Zy4KLQkJICovCi0JCWlmIChuZXQtPmZhc3RfcmV0cmFuX2xvc3Nf
cmVjb3ZlcnkgJiYgbmV0LT5uZXdfcHNldWRvX2N1bWFjaykgewotCQkJaWYgKFNDVFBfVFNOX0dF
KGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSB8fAotCQkJICAg
IFNDVFBfVFNOX0dFKG5ldC0+cHNldWRvX2N1bWFjayxuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSkg
ewotCQkJCW5ldC0+d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAxOwotCQkJfQotCQl9Ci0jZW5k
aWYKLQkJLyogaWYgbm90aGluZyB3YXMgYWNrZWQgb24gdGhpcyBkZXN0aW5hdGlvbiBza2lwIGl0
ICovCi0JCWlmIChuZXQtPm5ldF9hY2sgPT0gMCkgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7Ci0JCQl9
Ci0JCQljb250aW51ZTsKLQkJfQotI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKLSAgICAg
ICAgICAgICAgICAvKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlCi0JCSAqLwotCQkvKgotCQlpZiAo
c2N0cF9jbXRfb25fb2ZmID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYg
bmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9PSAwKSB7Ci0JCSAgICBAQEAgRG8gc29tZXRo
aW5nCi0JCSB9Ci0JCSBlbHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0
X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7Ci0JCSovCi0jZW5kaWYK
LQotCQkgaWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKLQkJICAgICAod2ls
bF9leGl0ID09IDApICYmCi0JCSAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgewot
CQkJLyoKLQkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQK
LQkJCSAqIHVwZGF0ZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCX0KLQkJLyoKLQkJICogQ01UOiBD
VUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcwotCQkgKiBtb3Zl
ZC4KLQkJICovCi0JCWlmIChhY2N1bV9tb3ZlZCB8fAotCQkgICAgKChhc29jLT5zY3RwX2NtdF9v
bl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgewotCQkJLyogSWYgdGhlIGN1
bXVsYXRpdmUgYWNrIG1vdmVkIHdlIGNhbiBwcm9jZWVkICovCi0JCQlpZiAobmV0LT5jd25kIDw9
IG5ldC0+c3N0aHJlc2gpIHsKLQkJCQkvKiBXZSBhcmUgaW4gc2xvdyBzdGFydCAqLwotCQkJCWlm
IChuZXQtPmZsaWdodF9zaXplICsgbmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgewotCQkJCQlz
Y3RwX2hzX2N3bmRfaW5jcmVhc2Uoc3RjYiwgbmV0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAot
CQkJCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNl
IHsKLQkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8KLQkJCQluZXQtPnBh
cnRpYWxfYnl0ZXNfYWNrZWQgKz0gbmV0LT5uZXRfYWNrOwotCQkJCWlmICgobmV0LT5mbGlnaHRf
c2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCi0JCQkJICAgIChuZXQtPnBhcnRp
YWxfYnl0ZXNfYWNrZWQgPj0gbmV0LT5jd25kKSkgewotCQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNf
YWNrZWQgLT0gbmV0LT5jd25kOwotCQkJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQkJCXNj
dHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJ
CQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJCQkJCQlTQ1RQX0NXTkRf
TE9HX0ZST01fQ0EpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKLQkJCQkJCQlTQ1RQ
X0NXTkRfTE9HX05PQURWX0NBKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCi0J
CQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKLQkJCX0KLQkJfQotCX0KLX0KLQotCi0vKgot
ICogSC1UQ1AgY29uZ2VzdGlvbiBjb250cm9sLiBUaGUgYWxnb3JpdGhtIGlzIGRldGFpbGVkIGlu
OgotICogUi5OLlNob3J0ZW4sIEQuSi5MZWl0aDoKLSAqICAgIkgtVENQOiBUQ1AgZm9yIGhpZ2gt
c3BlZWQgYW5kIGxvbmctZGlzdGFuY2UgbmV0d29ya3MiCi0gKiAgIFByb2MuIFBGTERuZXQsIEFy
Z29ubmUsIDIwMDQuCi0gKiBodHRwOi8vd3d3LmhhbWlsdG9uLmllL25ldC9odGNwMy5wZGYKLSAq
LwotCi0KLXN0YXRpYyBpbnQgdXNlX3J0dF9zY2FsaW5nID0gMTsKLXN0YXRpYyBpbnQgdXNlX2Jh
bmR3aWR0aF9zd2l0Y2ggPSAxOwotCi1zdGF0aWMgaW5saW5lIGludAotYmV0d2Vlbih1aW50MzJf
dCBzZXExLCB1aW50MzJfdCBzZXEyLCB1aW50MzJfdCBzZXEzKQotewotCXJldHVybiAoc2VxMyAt
IHNlcTIgPj0gc2VxMSAtIHNlcTIpOwotfQotCi1zdGF0aWMgaW5saW5lIHVpbnQzMl90Ci1odGNw
X2NvbmdfdGltZShzdHJ1Y3QgaHRjcCAqY2EpCi17Ci0JcmV0dXJuIChzY3RwX2dldF90aWNrX2Nv
dW50KCkgLSBjYS0+bGFzdF9jb25nKTsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdAotaHRj
cF9jY291bnQoc3RydWN0IGh0Y3AgKmNhKQotewotCXJldHVybiAoaHRjcF9jb25nX3RpbWUoY2Ep
L2NhLT5taW5SVFQpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQKLWh0Y3BfcmVzZXQoc3RydWN0
IGh0Y3AgKmNhKQotewotCWNhLT51bmRvX2xhc3RfY29uZyA9IGNhLT5sYXN0X2Nvbmc7Ci0JY2Et
PnVuZG9fbWF4UlRUID0gY2EtPm1heFJUVDsKLQljYS0+dW5kb19vbGRfbWF4QiA9IGNhLT5vbGRf
bWF4QjsKLQljYS0+bGFzdF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotfQotCi0jaWZk
ZWYgU0NUUF9OT1RfVVNFRAotCi1zdGF0aWMgdWludDMyX3QKLWh0Y3BfY3duZF91bmRvKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCW5ldC0+Y2NfbW9k
Lmh0Y3BfY2EubGFzdF9jb25nID0gbmV0LT5jY19tb2QuaHRjcF9jYS51bmRvX2xhc3RfY29uZzsK
LQluZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19t
YXhSVFQ7Ci0JbmV0LT5jY19tb2QuaHRjcF9jYS5vbGRfbWF4QiA9IG5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EudW5kb19vbGRfbWF4QjsKLQlyZXR1cm4gKG1heChuZXQtPmN3bmQsICgobmV0LT5zc3RocmVz
aC9uZXQtPm10dTw8NykvbmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhKSpuZXQtPm10dSkpOwotfQot
Ci0jZW5kaWYKLQotc3RhdGljIGlubGluZSB2b2lkCi1tZWFzdXJlX3J0dChzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQpCi17Ci0JdWludDMyX3Qgc3J0dCA9IG5ldC0+bGFzdHNhPj5TQ1RQX1JUVF9TSElG
VDsKLQotCS8qIGtlZXAgdHJhY2sgb2YgbWluaW11bSBSVFQgc2VlbiBzbyBmYXIsIG1pblJUVCBp
cyB6ZXJvIGF0IGZpcnN0ICovCi0JaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID4gc3J0
dCB8fCAhbmV0LT5jY19tb2QuaHRjcF9jYS5taW5SVFQpCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
bWluUlRUID0gc3J0dDsKLQotCS8qIG1heCBSVFQgKi8KLQlpZiAobmV0LT5mYXN0X3JldHJhbl9p
cCA9PSAwICYmIG5ldC0+c3N0aHJlc2ggPCAweEZGRkYgJiYgaHRjcF9jY291bnQoJm5ldC0+Y2Nf
bW9kLmh0Y3BfY2EpID4gMykgewotCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPCBu
ZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVCkKLQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRU
ID0gbmV0LT5jY19tb2QuaHRjcF9jYS5taW5SVFQ7Ci0JCWlmIChuZXQtPmNjX21vZC5odGNwX2Nh
Lm1heFJUVCA8IHNydHQgJiYgc3J0dCA8PSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCtNU0VD
X1RPX1RJQ0tTKDIwKSkKLQkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gc3J0dDsKLQl9
Ci19Ci0KLXN0YXRpYyB2b2lkCi1tZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNj
dHBfbmV0cyAqbmV0KQotewotCXVpbnQzMl90IG5vdyA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsK
LQotCWlmIChuZXQtPmZhc3RfcmV0cmFuX2lwID09IDApCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
Ynl0ZXNfYWNrZWQgPSBuZXQtPm5ldF9hY2s7Ci0KLQlpZiAoIXVzZV9iYW5kd2lkdGhfc3dpdGNo
KQotCQlyZXR1cm47Ci0KLQkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLwot
CS8qIEpSUyAtIG5vdCAxMDAlIHN1cmUgb2YgdGhpcyBzdGF0ZW1lbnQgKi8KLQlpZiAobmV0LT5m
YXN0X3JldHJhbl9pcCA9PSAxKSB7Ci0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ID0g
MDsKLQkJbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0dGltZSA9IG5vdzsKLQkJcmV0dXJuOwotCX0K
LQotCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ICs9IG5ldC0+bmV0X2FjazsKLQlpZiAo
KG5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ID49IG5ldC0+Y3duZCAtICgoKG5ldC0+Y2Nf
bW9kLmh0Y3BfY2EuYWxwaGEgPj4gNykgPyAobmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA+PiA3
KSA6IDEpICogbmV0LT5tdHUpKSAmJgotCSAgICAobm93IC0gbmV0LT5jY19tb2QuaHRjcF9jYS5s
YXN0dGltZSA+PSBuZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVCkgJiYKLQkgICAgKG5ldC0+Y2Nf
bW9kLmh0Y3BfY2EubWluUlRUID4gMCkpIHsKLQkJdWludDMyX3QgY3VyX0JpID0gbmV0LT5jY19t
b2QuaHRjcF9jYS5ieXRlY291bnQvbmV0LT5tdHUqaHovKG5vdyAtIG5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EubGFzdHRpbWUpOwotCi0JCWlmIChodGNwX2Njb3VudCgmbmV0LT5jY19tb2QuaHRjcF9jYSkg
PD0gMykgewotCQkJLyoganVzdCBhZnRlciBiYWNrb2ZmICovCi0JCQluZXQtPmNjX21vZC5odGNw
X2NhLm1pbkIgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1heEIgPSBuZXQtPmNjX21vZC5odGNwX2Nh
LkJpID0gY3VyX0JpOwotCQl9IGVsc2UgewotCQkJbmV0LT5jY19tb2QuaHRjcF9jYS5CaSA9ICgz
Km5ldC0+Y2NfbW9kLmh0Y3BfY2EuQmkgKyBjdXJfQmkpLzQ7Ci0JCQlpZiAobmV0LT5jY19tb2Qu
aHRjcF9jYS5CaSA+IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKLQkJCQluZXQtPmNjX21vZC5o
dGNwX2NhLm1heEIgPSBuZXQtPmNjX21vZC5odGNwX2NhLkJpOwotCQkJaWYgKG5ldC0+Y2NfbW9k
Lmh0Y3BfY2EubWluQiA+IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKLQkJCQluZXQtPmNjX21v
ZC5odGNwX2NhLm1pbkIgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1heEI7Ci0JCX0KLQkJbmV0LT5j
Y19tb2QuaHRjcF9jYS5ieXRlY291bnQgPSAwOwotCQluZXQtPmNjX21vZC5odGNwX2NhLmxhc3R0
aW1lID0gbm93OwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1odGNwX2JldGFfdXBkYXRl
KHN0cnVjdCBodGNwICpjYSwgdWludDMyX3QgbWluUlRULCB1aW50MzJfdCBtYXhSVFQpCi17Ci0J
aWYgKHVzZV9iYW5kd2lkdGhfc3dpdGNoKSB7Ci0JCXVpbnQzMl90IG1heEIgPSBjYS0+bWF4QjsK
LQkJdWludDMyX3Qgb2xkX21heEIgPSBjYS0+b2xkX21heEI7Ci0JCWNhLT5vbGRfbWF4QiA9IGNh
LT5tYXhCOwotCi0JCWlmICghYmV0d2Vlbig1Km1heEIsIDQqb2xkX21heEIsIDYqb2xkX21heEIp
KSB7Ci0JCQljYS0+YmV0YSA9IEJFVEFfTUlOOwotCQkJY2EtPm1vZGVzd2l0Y2ggPSAwOwotCQkJ
cmV0dXJuOwotCQl9Ci0JfQotCi0JaWYgKGNhLT5tb2Rlc3dpdGNoICYmIG1pblJUVCA+ICh1aW50
MzJfdClNU0VDX1RPX1RJQ0tTKDEwKSAmJiBtYXhSVFQpIHsKLQkJY2EtPmJldGEgPSAobWluUlRU
PDw3KS9tYXhSVFQ7Ci0JCWlmIChjYS0+YmV0YSA8IEJFVEFfTUlOKQotCQkJY2EtPmJldGEgPSBC
RVRBX01JTjsKLQkJZWxzZSBpZiAoY2EtPmJldGEgPiBCRVRBX01BWCkKLQkJCWNhLT5iZXRhID0g
QkVUQV9NQVg7Ci0JfSBlbHNlIHsKLQkJY2EtPmJldGEgPSBCRVRBX01JTjsKLQkJY2EtPm1vZGVz
d2l0Y2ggPSAxOwotCX0KLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1odGNwX2FscGhhX3VwZGF0
ZShzdHJ1Y3QgaHRjcCAqY2EpCi17Ci0JdWludDMyX3QgbWluUlRUID0gY2EtPm1pblJUVDsKLQl1
aW50MzJfdCBmYWN0b3IgPSAxOwotCXVpbnQzMl90IGRpZmYgPSBodGNwX2NvbmdfdGltZShjYSk7
Ci0KLQlpZiAoZGlmZiA+ICh1aW50MzJfdCloeikgewotCQlkaWZmIC09IGh6OwotCQlmYWN0b3Ig
PSAxKyAoIDEwKmRpZmYgKyAoKGRpZmYvMikqKGRpZmYvMikvaHopKS9oejsKLQl9Ci0KLQlpZiAo
dXNlX3J0dF9zY2FsaW5nICYmIG1pblJUVCkgewotCQl1aW50MzJfdCBzY2FsZSA9IChoejw8Mykv
KDEwKm1pblJUVCk7Ci0JCXNjYWxlID0gbWluKG1heChzY2FsZSwgMVU8PDIpLCAxMFU8PDMpOyAv
KiBjbGFtcGluZyByYXRpbyB0byBpbnRlcnZhbCBbMC41LDEwXTw8MyAqLwotCQlmYWN0b3IgPSAo
ZmFjdG9yPDwzKS9zY2FsZTsKLQkJaWYgKCFmYWN0b3IpCi0JCQlmYWN0b3IgPSAxOwotCX0KLQot
CWNhLT5hbHBoYSA9IDIqZmFjdG9yKigoMTw8NyktY2EtPmJldGEpOwotCWlmICghY2EtPmFscGhh
KQotCQljYS0+YWxwaGEgPSBBTFBIQV9CQVNFOwotfQotCi0vKiBBZnRlciB3ZSBoYXZlIHRoZSBy
dHQgZGF0YSB0byBjYWxjdWxhdGUgYmV0YSwgd2UnZCBzdGlsbCBwcmVmZXIgdG8gd2FpdCBvbmUK
LSAqIHJ0dCBiZWZvcmUgd2UgYWRqdXN0IG91ciBiZXRhIHRvIGVuc3VyZSB3ZSBhcmUgd29ya2lu
ZyBmcm9tIGEgY29uc2lzdGVudAotICogZGF0YS4KLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIHNob3Vs
ZCBiZSBjYWxsZWQgd2hlbiB3ZSBoaXQgYSBjb25nZXN0aW9uIGV2ZW50IHNpbmNlIG9ubHkgYXQK
LSAqIHRoYXQgcG9pbnQgZG8gd2UgcmVhbGx5IGhhdmUgYSByZWFsIHNlbnNlIG9mIG1heFJUVCAo
dGhlIHF1ZXVlcyBlbiByb3V0ZQotICogd2VyZSBnZXR0aW5nIGp1c3QgdG9vIGZ1bGwgbm93KS4K
LSAqLwotc3RhdGljIHZvaWQKLWh0Y3BfcGFyYW1fdXBkYXRlKHN0cnVjdCBzY3RwX25ldHMgKm5l
dCkKLXsKLQl1aW50MzJfdCBtaW5SVFQgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVDsKLQl1
aW50MzJfdCBtYXhSVFQgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVDsKLQotCWh0Y3BfYmV0
YV91cGRhdGUoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EsIG1pblJUVCwgbWF4UlRUKTsKLQlodGNwX2Fs
cGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9jYSk7Ci0KLQkvKiBhZGQgc2xvd2x5IGZhZGlu
ZyBtZW1vcnkgZm9yIG1heFJUVCB0byBhY2NvbW1vZGF0ZSByb3V0aW5nIGNoYW5nZXMgZXRjICov
Ci0JaWYgKG1pblJUVCA+IDAgJiYgbWF4UlRUID4gbWluUlRUKQotCQluZXQtPmNjX21vZC5odGNw
X2NhLm1heFJUVCA9IG1pblJUVCArICgobWF4UlRULW1pblJUVCkqOTUpLzEwMDsKLX0KLQotc3Rh
dGljIHVpbnQzMl90Ci1odGNwX3JlY2FsY19zc3RocmVzaChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Ci17Ci0JaHRjcF9wYXJhbV91cGRhdGUobmV0KTsKLQlyZXR1cm4gKG1heCgoKG5ldC0+Y3duZC9u
ZXQtPm10dSAqIG5ldC0+Y2NfbW9kLmh0Y3BfY2EuYmV0YSkgPj4gNykqbmV0LT5tdHUsIDJVKm5l
dC0+bXR1KSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1odGNwX2NvbmdfYXZvaWQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JLyotCi0JICogSG93IHRvIGhh
bmRsZSB0aGVzZSBmdW5jdGlvbnM/Ci0gICAgICAgICAqCWlmICghdGNwX2lzX2N3bmRfbGltaXRl
ZChzaywgaW5fZmxpZ2h0KSkgUlJTIC0gZ29vZCBxdWVzdGlvbi4KLQkgKgkJcmV0dXJuOwotCSAq
LwotICAgICAgICBpZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKLQkJLyogV2UgYXJl
IGluIHNsb3cgc3RhcnQgKi8KLQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sg
Pj0gbmV0LT5jd25kKSB7Ci0JCQlpZiAobmV0LT5uZXRfYWNrID4gKG5ldC0+bXR1ICogU0NUUF9C
QVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkpKSB7Ci0JCQkJbmV0LT5jd25kICs9IChu
ZXQtPm10dSAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpKTsKLQkJCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklU
T1JfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKLQkJ
CQkJCVNDVFBfQ1dORF9MT0dfRlJPTV9TUyk7Ci0JCQkJfQotCi0JCQl9IGVsc2UgewotCQkJCW5l
dC0+Y3duZCArPSBuZXQtPm5ldF9hY2s7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgewotCQkJCQlzY3RwX2xv
Z19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQkJU0NUUF9DV05EX0xPR19GUk9N
X1NTKTsKLQkJCQl9Ci0KLQkJCX0KLQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5h
c29jLCBuZXQpOwotCQl9IGVsc2UgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2N3
bmQoc3RjYiwgbmV0LCBuZXQtPm5ldF9hY2ssCi0JCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1Mp
OwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJbWVhc3VyZV9ydHQobmV0KTsKLQotCQkvKiBJbiBk
YW5nZXJvdXMgYXJlYSwgaW5jcmVhc2Ugc2xvd2x5LgotCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyBu
ZXQtPmN3bmQgKz0gYWxwaGEgLyBuZXQtPmN3bmQKLQkJICovCi0JCS8qIFdoYXQgaXMgc25kX2N3
bmRfY250Pz8gKi8KLQkJaWYgKCgobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkL25ldC0+bXR1ICog
bmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSkgPj4gNykqbmV0LT5tdHUgPj0gbmV0LT5jd25kKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKi0KLQkJCSAqIERvZXMgU0NUUCBoYXZlIGEgY3du
ZCBjbGFtcD8KLQkJCSAqIGlmIChuZXQtPnNuZF9jd25kIDwgbmV0LT5zbmRfY3duZF9jbGFtcCkg
LSBOb3BlIChSUlMpLgotCQkJICovCi0JCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7Ci0JCQluZXQt
PnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwotCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0
Y2ItPmFzb2MsIG5ldCk7Ci0JCQlodGNwX2FscGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9j
YSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9D
V05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+
bXR1LAotCQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fQ0EpOwotCQkJfQotCQl9IGVsc2UgewotCQkJ
bmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKLQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUp
IHsKLQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAotCQkJCQlTQ1RQ
X0NXTkRfTE9HX05PQURWX0NBKTsKLQkJCX0KLQkJfQotCi0JCW5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
Ynl0ZXNfYWNrZWQgPSBuZXQtPm10dTsKLQl9Ci19Ci0KLSNpZmRlZiBTQ1RQX05PVF9VU0VECi0v
KiBMb3dlciBib3VuZCBvbiBjb25nZXN0aW9uIHdpbmRvdy4gKi8KLXN0YXRpYyB1aW50MzJfdAot
aHRjcF9taW5fY3duZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCkKLXsKLQlyZXR1cm4gKG5ldC0+c3N0aHJlc2gpOwotfQotI2VuZGlmCi0KLXN0YXRpYyB2b2lk
Ci1odGNwX2luaXQoc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCW1lbXNldCgmbmV0LT5jY19t
b2QuaHRjcF9jYSwgMCwgc2l6ZW9mKHN0cnVjdCBodGNwKSk7Ci0JbmV0LT5jY19tb2QuaHRjcF9j
YS5hbHBoYSA9IEFMUEhBX0JBU0U7Ci0JbmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhID0gQkVUQV9N
SU47Ci0JbmV0LT5jY19tb2QuaHRjcF9jYS5ieXRlc19hY2tlZCA9IG5ldC0+bXR1OwotCW5ldC0+
Y2NfbW9kLmh0Y3BfY2EubGFzdF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOwotfQotCi1z
dGF0aWMgdm9pZAotc2N0cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qCi0JICogV2UgdGFrZSB0aGUg
bWF4IG9mIHRoZSBidXJzdCBsaW1pdCB0aW1lcyBhIE1UVSBvciB0aGUKLQkgKiBJTklUSUFMX0NX
TkQuIFdlIHRoZW4gbGltaXQgdGhpcyB0byA0IE1UVSdzIG9mIHNlbmRpbmcuCi0JICovCi0JbmV0
LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5J
VElBTF9DV05EKSk7Ci0JbmV0LT5zc3RocmVzaCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLQlz
Y3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKLQlodGNwX2luaXQobmV0
KTsKLQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiAoU0NUUF9D
V05EX01PTklUT1JfRU5BQkxFfFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkpIHsKLQkJc2N0cF9s
b2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTik7Ci0JfQotfQot
Ci1zdGF0aWMgdm9pZAotc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotCQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSBpbnQg
YWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkK
LXsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkvKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqLwotCS8qIHVwZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAgICovCi0JLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNj
dHBfbmV4dCkgewotCi0jaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQotCQkvKgotCQkgKiBD
TVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgotCQkgKi8KLQkJaWYgKG5ldC0+
ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7Ci0J
CQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVy
eV90c24pIHx8Ci0JCQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFz
dF9yZWNvdmVyeV90c24pKSB7Ci0JCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7
Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRl
c3RpbmF0aW9uIHNraXAgaXQgKi8KLQkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7Ci0JCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0df
RlJPTV9TQUNLKTsKLQkJCX0KLQkJCWNvbnRpbnVlOwotCQl9Ci0jaWZkZWYgSkFOQV9DTVRfRkFT
VF9SRUNPVkVSWQotICAgICAgICAgICAgICAgIC8qIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUKLQkJ
ICovCi0JCS8qCi0JCWlmIChzY3RwX2NtdF9vbl9vZmYgPiAwICYmIG5ldC0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSAmJiBuZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID09IDApIHsKLQkJ
ICAgIEBAQCBEbyBzb21ldGhpbmcKLQkJIH0KLQkJIGVsc2UgaWYgKHNjdHBfY210X29uX29mZiA9
PSAwICYmIGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgd2lsbF9leGl0ID09IDAp
IHsKLQkJKi8KLSNlbmRpZgotCi0JCWlmIChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5
ICYmCi0JCSAgICB3aWxsX2V4aXQgPT0gMCAmJgotCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29m
ZiA9PSAwKSkgewotCQkJLyoKLQkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNr
aXAgYW55IGN3bmQKLQkJCSAqIHVwZGF0ZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCX0KLQkJLyoK
LQkJICogQ01UOiBDVUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhh
cwotCQkgKiBtb3ZlZC4KLQkJICovCi0JCWlmIChhY2N1bV9tb3ZlZCB8fAotCQkgICAgKChhc29j
LT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgewotCQkJ
aHRjcF9jb25nX2F2b2lkKHN0Y2IsIG5ldCk7Ci0JCQltZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hw
dXQobmV0KTsKLQkJfSBlbHNlIHsKLQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIG5ldCwgbmV0LT5tdHUsCi0JCQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKLQkJ
CX0KLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRl
cl9mcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jKQotewotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkvKgotCSAqIENNVCBmYXN0IHJlY292
ZXJ5IGNvZGUuIE5lZWQgdG8gZGVidWcuICgoc2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgKiAo
bmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID09IDApKSkKLQkgKi8KLQlUQUlMUV9GT1JF
QUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoKGFzb2MtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkgPT0gMCkgfHwKLQkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYg
PiAwKSkgewotCQkJLyogb3V0IG9mIGEgUkZDMjU4MiBGYXN0IHJlY292ZXJ5IHdpbmRvdz8gKi8K
LQkJCWlmIChuZXQtPm5ldF9hY2sgPiAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBwZXIgc2VjdGlvbiA3
LjIuMywgYXJlIHRoZXJlIGFueQotCQkJCSAqIGRlc3RpbmF0aW9ucyB0aGF0IGhhZCBhIGZhc3Qg
cmV0cmFuc21pdAotCQkJCSAqIHRvIHRoZW0uIElmIHNvIHdoYXQgd2UgbmVlZCB0byBkbyBpcwot
CQkJCSAqIGFkanVzdCBzc3RocmVzaCBhbmQgY3duZC4KLQkJCQkgKi8KLQkJCQlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpsY2hrOwotCQkJCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCQkJ
CS8qIEpSUyAtIHJlc2V0IGFzIGlmIHN0YXRlIHdlcmUgY2hhbmdlZCAqLwotCQkJCWh0Y3BfcmVz
ZXQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2EpOwotCQkJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2Fs
Y19zc3RocmVzaChuZXQpOwotCQkJCW5ldC0+Y3duZCA9IG5ldC0+c3N0aHJlc2g7Ci0JCQkJc2N0
cF9lbmZvcmNlX2N3bmRfbGltaXQoYXNvYywgbmV0KTsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7Ci0JCQkJ
CXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAotCQkJCQkJ
U0NUUF9DV05EX0xPR19GUk9NX0ZSKTsKLQkJCQl9Ci0JCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5zZW5kX3F1ZXVlKTsKLQotCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0J
CQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLwotCQkJCWFzb2MtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOwotCQkJCWlmIChsY2hrID09IE5VTEwpIHsKLQkJCQkJLyog
TWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLwotCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9
IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlhc29jLT5mYXN0X3Jl
Y292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJLyoKLQkJ
CQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KLQkJCQkgKiByZWNvdmVy
eSB2YXJpYWJsZS4KLQkJCQkgKi8KLQkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnkg
PSAxOwotCi0JCQkJaWYgKGxjaGsgPT0gTlVMTCkgewotCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUg
d2luZG93ICovCi0JCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3Nl
cSAtIDE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGst
PnJlYy5kYXRhLnRzbiAtIDE7Ci0JCQkJfQotCi0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9TRU5ELAotCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18zKTsKLQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAotCQkJCQkJIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkg
ewotCQkJLyoKLQkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25k
Ci0JCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgotCQkJ
ICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKLQkJfQotCX0K
LX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JCWludCBv
bGRfY3duZCA9IG5ldC0+Y3duZDsKLQotCQkvKiBKUlMgLSByZXNldCBhcyBpZiB0aGUgc3RhdGUg
d2VyZSBiZWluZyBjaGFuZ2VkIHRvIHRpbWVvdXQgKi8KLQkJaHRjcF9yZXNldCgmbmV0LT5jY19t
b2QuaHRjcF9jYSk7Ci0JCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQp
OwotCQluZXQtPmN3bmQgPSBuZXQtPm10dTsKLQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0g
MDsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dO
RF9NT05JVE9SX0VOQUJMRSkgewotCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+Y3du
ZCAtIG9sZF9jd25kLCBTQ1RQX0NXTkRfTE9HX0ZST01fUlRYKTsKLQkJfQotfQotCi1zdGF0aWMg
dm9pZAotc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKLQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVt
X3BrdF9sb3N0IFNDVFBfVU5VU0VEKQotewotCWludCBvbGRfY3duZDsKLQlvbGRfY3duZCA9IG5l
dC0+Y3duZDsKLQotCS8qIEpSUyAtIHJlc2V0IGhjdHAgYXMgaWYgc3RhdGUgY2hhbmdlZCAqLwot
CWlmIChpbl93aW5kb3cgPT0gMCkgewotCQlodGNwX3Jlc2V0KCZuZXQtPmNjX21vZC5odGNwX2Nh
KTsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKLQkJbmV0LT5zc3Ro
cmVzaCA9IGh0Y3BfcmVjYWxjX3NzdGhyZXNoKG5ldCk7Ci0JCWlmIChuZXQtPnNzdGhyZXNoIDwg
bmV0LT5tdHUpIHsKLQkJCW5ldC0+c3N0aHJlc2ggPSBuZXQtPm10dTsKLQkJCS8qIGhlcmUgYmFj
ayBvZmYgdGhlIHRpbWVyIGFzIHdlbGwsIHRvIHNsb3cgdXMgZG93biAqLwotCQkJbmV0LT5SVE8g
PDw9IDE7Ci0JCX0KLQkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKLQkJc2N0cF9lbmZvcmNl
X2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5ldCk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKLQkJCXNjdHBf
bG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9H
X0ZST01fU0FUKTsKLQkJfQotCX0KLX0KLQotY29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25z
IHNjdHBfY2NfZnVuY3Rpb25zW10gPSB7Ci17Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXNjdHBfc2V0X2luaXRpYWxfY2NfcGFy
YW0sCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrLAotCXNjdHBfY3duZF91cGRhdGVfZXhp
dF9wZl9jb21tb24sCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKLQlzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX3RpbWVvdXQsCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKLQlz
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAotCXNjdHBfY3duZF91cGRhdGVf
YWZ0ZXJfb3V0cHV0LAotI2Vsc2UKLQkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBf
c2V0X2luaXRpYWxfY2NfcGFyYW0sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayA9IHNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKLQkuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmID0g
c2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmX2NvbW1vbiwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9mciA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfdGltZW91dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCwKLQkuc2N0cF9jd25k
X3VwZGF0ZV9hZnRlcl9lY25fZWNobyA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8s
Ci0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1
dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAotI2VuZGlmCi19LAotewotI2lmIGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlz
Y3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAotCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfc2Fj
aywKLQlzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGZfY29tbW9uLAotCXNjdHBfaHNfY3duZF91cGRh
dGVfYWZ0ZXJfZnIsCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAotCXNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8sCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRf
ZHJvcHBlZCwKLQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKLSNlbHNlCi0JLnNjdHBf
c2V0X2luaXRpYWxfY2NfcGFyYW0gPSBzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAotCS5zY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3NhY2sgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ss
Ci0JLnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9j
b21tb24sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2hzX2N3bmRfdXBkYXRl
X2FmdGVyX2ZyLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX3RpbWVvdXQsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8g
PSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAotCS5zY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX3BhY2tldF9kcm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBl
ZCwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX291dHB1dCwKLSNlbmRpZgotfSwKLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9odGNwX3NldF9pbml0aWFsX2Nj
X3BhcmFtLAotCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrLAotCXNjdHBfY3duZF91
cGRhdGVfZXhpdF9wZl9jb21tb24sCi0Jc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAot
CXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAotCXNjdHBfaHRjcF9jd25kX3Vw
ZGF0ZV9hZnRlcl9lY25fZWNobywKLQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9w
cGVkLAotCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAotI2Vsc2UKLQkuc2N0cF9zZXRf
aW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfaHRjcF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKLQkuc2N0
cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrID0gc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3Nh
Y2ssCi0JLnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9w
Zl9jb21tb24sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2h0Y3BfY3duZF91
cGRhdGVfYWZ0ZXJfZnIsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNjdHBf
aHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVy
X2Vjbl9lY2hvID0gc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAotCS5zY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9wYWNrZXRfZHJvcHBlZCwKLQkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKLSNlbmRpZgotfSwKLXsKLSNpZiBkZWZpbmVkKF9f
V2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9zZXRf
cnRjY19pbml0aWFsX2NjX3BhcmFtLAotCXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9zYWNr
LAotCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCi0Jc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9mciwKLQlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCi0Jc2N0cF9jd25kX3Vw
ZGF0ZV9ydGNjX2FmdGVyX2Vjbl9lY2hvLAotCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0
X2Ryb3BwZWQsCi0Jc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQsCi0Jc2N0cF9jd25kX3Vw
ZGF0ZV9ydGNjX3BhY2tldF90cmFuc21pdHRlZCwKLQlzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfdHNu
X2Fja25vd2xlZGdlZCwKLQlzY3RwX2N3bmRfbmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2JlZ2lucywK
LQlzY3RwX2N3bmRfcHJlcGFyZV9ydGNjX25ldF9mb3Jfc2FjaywKLQlzY3RwX2N3bmRfcnRjY19z
b2NrZXRfb3B0aW9uLAotCXNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAotI2Vsc2UKLQkuc2N0cF9z
ZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfc2V0X3J0Y2NfaW5pdGlhbF9jY19wYXJhbSwKLQku
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrID0gc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVy
X3NhY2ssCi0JLnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhp
dF9wZl9jb21tb24sCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX2ZyLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCi0JLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2Vj
aG8gPSBzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfZWNuX2VjaG8sCi0JLnNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tl
dF9kcm9wcGVkLAotCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfb3V0cHV0LAotCS5zY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRl
ZCA9IHNjdHBfY3duZF91cGRhdGVfcnRjY19wYWNrZXRfdHJhbnNtaXR0ZWQsCi0JLnNjdHBfY3du
ZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCA9IHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNr
bm93bGVkZ2VkLAotCS5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMgPSBzY3RwX2N3
bmRfbmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2JlZ2lucywKLQkuc2N0cF9jd25kX3ByZXBhcmVfbmV0
X2Zvcl9zYWNrID0gc2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2ssCi0JLnNjdHBf
Y3duZF9zb2NrZXRfb3B0aW9uID0gc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbiwKLQkuc2N0
cF9ydHRfY2FsY3VsYXRlZCA9IHNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAotI2VuZGlmCi19Ci19
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCA5YWZjOWJkNmZkYjlhMzA5OTM3OGNjZWQ3OTMyYjE1ZjMwODYxYWVlLi4wMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9j
b25zdGFudHMuaAorKysgL2Rldi9udWxsCkBAIC0xLDExMDMgKzAsMCBAQAotLyotCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNo
YWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykg
TmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVC
U0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5
cy9uZXRpbmV0L3NjdHBfY29uc3RhbnRzLmggMzIwMjYzIDIwMTctMDYtMjMgMDk6Mjc6MzFaIHR1
ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NPTlNUQU5UU19IXwot
I2RlZmluZSBfTkVUSU5FVF9TQ1RQX0NPTlNUQU5UU19IXwotCi0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotZXh0ZXJuIHZvaWQgZ2V0d2ludGltZW9mZGF5KHN0cnVjdCB0aW1l
dmFsICp0dik7Ci0jZW5kaWYKLQotLyogSUFOQSBhc3NpZ25lZCBwb3J0IG51bWJlciBmb3IgU0NU
UCBvdmVyIFVEUCBlbmNhcHN1bGF0aW9uICovCi0jZGVmaW5lIFNDVFBfT1ZFUl9VRFBfVFVOTkVM
SU5HX1BPUlQgOTg5OQotCi0vKiBOdW1iZXIgb2YgcGFja2V0cyB0byBnZXQgYmVmb3JlIHNhY2sg
c2VudCBieSBkZWZhdWx0ICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9TQUNLX0ZSRVEgMgotCi0v
KiBBZGRyZXNzIGxpbWl0IC0gVGhpcyB2YXJpYWJsZSBpcyBjYWxjdWxhdGVkCi0gKiBiYXNlZCBv
biBhbiA2NTUzNSBieXRlIG1heCBpcCBwYWNrZXQuIFdlIHRha2Ugb3V0IDEwMCBieXRlcwotICog
Zm9yIHRoZSBjb29raWUsIDQwIGJ5dGVzIGZvciBhIHY2IGhlYWRlciBhbmQgMzIKLSAqIGJ5dGVz
IGZvciB0aGUgaW5pdCBzdHJ1Y3R1cmUuIEEgc2Vjb25kIGluaXQgc3RydWN0dXJlCi0gKiBmb3Ig
dGhlIGluaXQtYWNrIGFuZCB0aGVuIGZpbmFsbHkgYSB0aGlyZCBvbmUgZm9yIHRoZQotICogaW1i
ZWRkZWQgaW5pdC4gVGhpcyB5ZWlsZHMgMTAwKzQwKygzICogMzIpID0gMjM2IGJ5dGVzLgotICog
VGhpcyBsZWF2ZXMgNjUyOTkgYnl0ZXMgZm9yIGFkZHJlc3Nlcy4gV2UgdGhyb3cgb3V0IHRoZSAy
OTkgYnl0ZXMuCi0gKiBOb3cgd2hhdGV2ZXIgd2Ugc2VuZCBpbiB0aGUgSU5JVCgpIHdlIG5lZWQg
dG8gYWxsb3cgdG8gZ2V0IGJhY2sgaW4gdGhlCi0gKiBJTklULUFDSyBwbHVzIGFsbCB0aGUgdmFs
dWVzIGZyb20gSU5JVCBhbmQgSU5JVC1BQ0sKLSAqIGxpc3RlZCBpbiB0aGUgY29va2llLiBQbHVz
IHdlIG5lZWQgc29tZSBvdmVyaGVhZCBmb3IKLSAqIG1heWJlIGNvcGllZCBwYXJhbWV0ZXJzIGlu
IHRoZSBDT09LSUUuIElmIHdlCi0gKiBhbGxvdyAxMDgwIGFkZHJlc3NlcywgYW5kIGVhY2ggc2lk
ZSBoYXMgMTA4MCBWNiBhZGRyZXNzZXMKLSAqIHRoYXQgd2lsbCBiZSAyMTYwMCBieXRlcy4gSW4g
dGhlIElOSVQtQUNLIHdlIHdpbGwKLSAqIHNlZSB0aGUgSU5JVC1BQ0sgMjE2MDAgKyA0MzIwMCBp
biB0aGUgY29va2llLiBUaGlzIGxlYXZlcwotICogYWJvdXQgNTAwIGJ5dGVzIHNsYWNrIGZvciBt
aXNjIHRoaW5ncyBpbiB0aGUgY29va2llLgotICovCi0jZGVmaW5lIFNDVFBfQUREUkVTU19MSU1J
VCAxMDgwCi0KLS8qIFdlIG5lZWQgYXQgbGVhc3QgMmsgb2Ygc3BhY2UgZm9yIHVzLCBpbml0cwot
ICogbGFyZ2VyIHRoYW4gdGhhdCBsZXRzIGFib3J0LgotICovCi0jZGVmaW5lIFNDVFBfTEFSR0VT
VF9JTklUX0FDQ0VQVEVEICg2NTUzNSAtIDIwNDgpCi0KLS8qIExhcmdlc3QgbGVuZ3RoIG9mIGEg
Y2h1bmsgKi8KLSNkZWZpbmUgU0NUUF9NQVhfQ0hVTktfTEVOR1RIIDB4ZmZmZgotLyogTGFyZ2Vz
dCBsZW5ndGggb2YgYW4gZXJyb3IgY2F1c2UgKi8KLSNkZWZpbmUgU0NUUF9NQVhfQ0FVU0VfTEVO
R1RIIDB4ZmZmZgotLyogTnVtYmVyIG9mIGFkZHJlc3NlcyB3aGVyZSB3ZSBqdXN0IHNraXAgdGhl
IGNvdW50aW5nICovCi0jZGVmaW5lIFNDVFBfQ09VTlRfTElNSVQgNDAKLQotI2RlZmluZSBTQ1RQ
X1pFUk9fQ09QWV9USUNLX0RFTEFZICgoKDEwMCAqIGh6KSArIDk5OSkgLyAxMDAwKQotI2RlZmlu
ZSBTQ1RQX1pFUk9fQ09QWV9TRU5EUV9USUNLX0RFTEFZICgoKDEwMCAqIGh6KSArIDk5OSkgLyAx
MDAwKQotCi0vKiBOdW1iZXIgb2YgdGlja3MgdG8gZGVsYXkgYmVmb3JlIHJ1bm5pbmcKLSAqIGl0
ZXJhdG9yIG9uIGFuIGFkZHJlc3MgY2hhbmdlLgotICovCi0jZGVmaW5lIFNDVFBfQUREUkVTU19U
SUNLX0RFTEFZIDIKLQotI2RlZmluZSBTQ1RQX1ZFUlNJT05fU1RSSU5HICJLQU1FLUJTRCAxLjEi
Ci0vKiAjZGVmaW5lIFNDVFBfQVVESVRJTkdfRU5BQkxFRCAxIHVzZWQgZm9yIGRlYnVnL2F1ZGl0
aW5nICovCi0jZGVmaW5lIFNDVFBfQVVESVRfU0laRSAyNTYKLQotCi0jZGVmaW5lIFNDVFBfS1RS
SEVBRF9OQU1FICJzY3RwX2l0ZXJhdG9yIgotI2RlZmluZSBTQ1RQX0tUSFJFQURfUEFHRVMgMAot
Ci0jZGVmaW5lIFNDVFBfTUNPUkVfTkFNRSAic2N0cF9jb3JlX3dvcmtlciIKLQotCi0vKiBJZiB5
b3Ugc3VwcG9ydCBNdWx0aS1WUkYgaG93IGJpZyB0bwotICogbWFrZSB0aGUgaW5pdGlhbCBhcnJh
eSBvZiBWUkYncyB0by4KLSAqLwotI2RlZmluZSBTQ1RQX0RFRkFVTFRfVlJGX1NJWkUgNAotCi0v
KiBjb25zdGFudHMgZm9yIHJ0byBjYWxjICovCi0jZGVmaW5lIHNjdHBfYWxpZ25fc2FmZV9ub2Nv
cHkgMAotI2RlZmluZSBzY3RwX2FsaWduX3Vuc2FmZV9tYWtlY29weSAxCi0KLS8qIEpSUyAtIFZh
bHVlcyBkZWZpbmVkIGZvciB0aGUgSFRDUCBhbGdvcml0aG0gKi8KLSNkZWZpbmUgQUxQSEFfQkFT
RQkoMTw8NykgIC8qIDEuMCB3aXRoIHNoaWZ0IDw8IDcgKi8KLSNkZWZpbmUgQkVUQV9NSU4JKDE8
PDYpICAvKiAwLjUgd2l0aCBzaGlmdCA8PCA3ICovCi0jZGVmaW5lIEJFVEFfTUFYCTEwMgkvKiAw
Ljggd2l0aCBzaGlmdCA8PCA3ICovCi0KLS8qIFBsYWNlcyB0aGF0IENXTkQgbG9nIGNhbiBoYXBw
ZW4gZnJvbSAqLwotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fRlIJMQotI2RlZmluZSBTQ1RQ
X0NXTkRfTE9HX0ZST01fUlRYCTIKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX0JSU1QJMwot
I2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fU1MJNAotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZS
T01fQ0EJNQotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUCTYKLSNkZWZpbmUgU0NUUF9C
TE9DS19MT0dfSU5UT19CTEsgNwotI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19PVVRPRl9CTEsgOAot
I2RlZmluZSBTQ1RQX0JMT0NLX0xPR19DSEVDSyAgICAgOQotI2RlZmluZSBTQ1RQX1NUUl9MT0df
RlJPTV9JTlRPX1NUUkQgMTAKLSNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVMIDEx
Ci0jZGVmaW5lIFNDVFBfU1RSX0xPR19GUk9NX0lOU0VSVF9IRCAxMgotI2RlZmluZSBTQ1RQX1NU
Ul9MT0dfRlJPTV9JTlNFUlRfTUQgMTMKLSNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJU
X1RMIDE0Ci0jZGVmaW5lIFNDVFBfU1RSX0xPR19GUk9NX01BUktfVFNOICAxNQotI2RlZmluZSBT
Q1RQX1NUUl9MT0dfRlJPTV9FWFBSU19ERUwgMTYKLSNkZWZpbmUgU0NUUF9GUl9MT0dfQklHR0VT
VF9UU05TICAgIDE3Ci0jZGVmaW5lIFNDVFBfRlJfTE9HX1NUUklLRV9URVNUICAgICAxOAotI2Rl
ZmluZSBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTksgICAgMTkKLSNkZWZpbmUgU0NUUF9GUl9UM19U
SU1FT1VUICAgICAgICAgIDIwCi0jZGVmaW5lIFNDVFBfTUFQX1BSRVBBUkVfU0xJREUgICAgICAy
MQotI2RlZmluZSBTQ1RQX01BUF9TTElERV9GUk9NICAgICAgICAgMjIKLSNkZWZpbmUgU0NUUF9N
QVBfU0xJREVfUkVTVUxUICAgICAgIDIzCi0jZGVmaW5lIFNDVFBfTUFQX1NMSURFX0NMRUFSRUQJ
ICAgIDI0Ci0jZGVmaW5lIFNDVFBfTUFQX1NMSURFX05PTkUgICAgICAgICAyNQotI2RlZmluZSBT
Q1RQX0ZSX1QzX01BUktfVElNRSAgICAgICAgMjYKLSNkZWZpbmUgU0NUUF9GUl9UM19NQVJLRUQg
ICAgICAgICAgIDI3Ci0jZGVmaW5lIFNDVFBfRlJfVDNfU1RPUFBFRCAgICAgICAgICAyOAotI2Rl
ZmluZSBTQ1RQX0ZSX01BUktFRCAgICAgICAgICAgICAgMzAKLSNkZWZpbmUgU0NUUF9DV05EX0xP
R19OT0FEVl9TUyAgICAgIDMxCi0jZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EgICAgICAz
MgotI2RlZmluZSBTQ1RQX01BWF9CVVJTVF9BUFBMSUVEICAgICAgMzMKLSNkZWZpbmUgU0NUUF9N
QVhfSUZQX0FQUExJRUQgICAgICAgIDM0Ci0jZGVmaW5lIFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NU
T1AgICAzNQotI2RlZmluZSBTQ1RQX0lOQ1JFQVNFX1BFRVJfUldORCAgICAgMzYKLSNkZWZpbmUg
U0NUUF9ERUNSRUFTRV9QRUVSX1JXTkQgICAgIDM3Ci0jZGVmaW5lIFNDVFBfU0VUX1BFRVJfUldO
RF9WSUFfU0FDSyAzOAotI2RlZmluZSBTQ1RQX0xPR19NQkNOVF9JTkNSRUFTRSAgICAgMzkKLSNk
ZWZpbmUgU0NUUF9MT0dfTUJDTlRfREVDUkVBU0UgICAgIDQwCi0jZGVmaW5lIFNDVFBfTE9HX01C
Q05UX0NIS1NFVCAgICAgICA0MQotI2RlZmluZSBTQ1RQX0xPR19ORVdfU0FDSyAgICAgICAgICAg
NDIKLSNkZWZpbmUgU0NUUF9MT0dfVFNOX0FDS0VEICAgICAgICAgIDQzCi0jZGVmaW5lIFNDVFBf
TE9HX1RTTl9SRVZPS0VEICAgICAgICA0NAotI2RlZmluZSBTQ1RQX0xPR19MT0NLX1RDQiAgICAg
ICAgICAgNDUKLSNkZWZpbmUgU0NUUF9MT0dfTE9DS19JTlAgICAgICAgICAgIDQ2Ci0jZGVmaW5l
IFNDVFBfTE9HX0xPQ0tfU09DSyAgICAgICAgICA0NwotI2RlZmluZSBTQ1RQX0xPR19MT0NLX1NP
Q0tCVUZfUiAgICAgNDgKLSNkZWZpbmUgU0NUUF9MT0dfTE9DS19TT0NLQlVGX1MgICAgIDQ5Ci0j
ZGVmaW5lIFNDVFBfTE9HX0xPQ0tfQ1JFQVRFICAgICAgICA1MAotI2RlZmluZSBTQ1RQX0xPR19J
TklUSUFMX1JUVCAgICAgICAgNTEKLSNkZWZpbmUgU0NUUF9MT0dfUlRUVkFSICAgICAgICAgICAg
IDUyCi0jZGVmaW5lIFNDVFBfTE9HX1NCQUxMT0MgICAgICAgICAgICA1MwotI2RlZmluZSBTQ1RQ
X0xPR19TQkZSRUUgICAgICAgICAgICAgNTQKLSNkZWZpbmUgU0NUUF9MT0dfU0JSRVNVTFQgICAg
ICAgICAgIDU1Ci0jZGVmaW5lIFNDVFBfRlJfRFVQRUQgICAgICAgICAgICAgICA1NgotI2RlZmlu
ZSBTQ1RQX0ZSX01BUktFRF9FQVJMWSAgICAgICAgNTcKLSNkZWZpbmUgU0NUUF9GUl9DV05EX1JF
UE9SVCAgICAgICAgIDU4Ci0jZGVmaW5lIFNDVFBfRlJfQ1dORF9SRVBPUlRfU1RBUlQgICA1OQot
I2RlZmluZSBTQ1RQX0ZSX0NXTkRfUkVQT1JUX1NUT1AgICAgNjAKLSNkZWZpbmUgU0NUUF9DV05E
X0xPR19GUk9NX1NFTkQgICAgIDYxCi0jZGVmaW5lIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTiAg
ICA2MgotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fVDMgICAgICAgNjMKLSNkZWZpbmUgU0NU
UF9DV05EX0xPR19GUk9NX1NBQ0sgICAgIDY0Ci0jZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9fQ1VN
QUNLICAgICA2NQotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fUkVTRU5EICAgNjYKLSNkZWZp
bmUgU0NUUF9GUl9MT0dfQ0hFQ0tfU1RSSUtFICAgIDY3Ci0jZGVmaW5lIFNDVFBfU0VORF9OT1df
Q09NUExFVEVTICAgICA2OAotI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQg
NjkKLSNkZWZpbmUgU0NUUF9DV05EX0xPR19GSUxMX09VVFFfRklMTFMgIDcwCi0jZGVmaW5lIFND
VFBfTE9HX0ZSRUVfU0VOVCAgICAgICAgICAgICA3MQotI2RlZmluZSBTQ1RQX05BR0xFX0FQUExJ
RUQgICAgICAgICAgNzIKLSNkZWZpbmUgU0NUUF9OQUdMRV9TS0lQUEVEICAgICAgICAgIDczCi0j
ZGVmaW5lIFNDVFBfV0FLRVNORF9GUk9NX1NBQ0sgICAgICA3NAotI2RlZmluZSBTQ1RQX1dBS0VT
TkRfRlJPTV9GV0RUU04gICAgNzUKLSNkZWZpbmUgU0NUUF9OT1dBS0VfRlJPTV9TQUNLICAgICAg
IDc2Ci0jZGVmaW5lIFNDVFBfQ1dORExPR19QUkVTRU5EICAgICAgICA3NwotI2RlZmluZSBTQ1RQ
X0NXTkRMT0dfRU5EU0VORCAgICAgICAgNzgKLSNkZWZpbmUgU0NUUF9BVF9FTkRfT0ZfU0FDSyAg
ICAgICAgIDc5Ci0jZGVmaW5lIFNDVFBfUkVBU09OX0ZPUl9TQyAgICAgICAgICA4MAotI2RlZmlu
ZSBTQ1RQX0JMT0NLX0xPR19JTlRPX0JMS0EgICAgODEKLSNkZWZpbmUgU0NUUF9FTlRFUl9VU0VS
X1JFQ1YgICAgICAgIDgyCi0jZGVmaW5lIFNDVFBfVVNFUl9SRUNWX1NBQ0tTICAgICAgICA4Mwot
I2RlZmluZSBTQ1RQX1NPUkVDVl9CTE9DS1NBICAgICAgICAgODQKLSNkZWZpbmUgU0NUUF9TT1JF
Q1ZfQkxPQ0tTQiAgICAgICAgIDg1Ci0jZGVmaW5lIFNDVFBfU09SRUNWX0RPTkUgICAgICAgICAg
ICA4NgotI2RlZmluZSBTQ1RQX1NBQ0tfUldORF9VUERBVEUgICAgICAgODcKLSNkZWZpbmUgU0NU
UF9TT1JFQ1ZfRU5URVIgICAgICAgICAgIDg4Ci0jZGVmaW5lIFNDVFBfU09SRUNWX0VOVEVSUEwg
ICAgICAgICA4OQotI2RlZmluZSBTQ1RQX01CVUZfSU5QVVQgICAgICAgICAgICAgOTAKLSNkZWZp
bmUgU0NUUF9NQlVGX0lBTExPQyAgICAgICAgICAgIDkxCi0jZGVmaW5lIFNDVFBfTUJVRl9JRlJF
RSAgICAgICAgICAgICA5MgotI2RlZmluZSBTQ1RQX01CVUZfSUNPUFkgICAgICAgICAgICAgOTMK
LSNkZWZpbmUgU0NUUF9NQlVGX1NQTElUICAgICAgICAgICAgIDk0Ci0jZGVmaW5lIFNDVFBfU09S
Q1ZfRlJFRUNUTCAgICAgICAgICA5NQotI2RlZmluZSBTQ1RQX1NPUkNWX0RPRVNDUFkgICAgICAg
ICAgOTYKLSNkZWZpbmUgU0NUUF9TT1JDVl9ET0VTTENLICAgICAgICAgIDk3Ci0jZGVmaW5lIFND
VFBfU09SQ1ZfRE9FU0FESiAgICAgICAgICA5OAotI2RlZmluZSBTQ1RQX1NPUkNWX0JPVFdISUxF
ICAgICAgICAgOTkKLSNkZWZpbmUgU0NUUF9TT1JDVl9QQVNTQkYgICAgICAgICAgMTAwCi0jZGVm
aW5lIFNDVFBfU09SQ1ZfQURKRCAgICAgICAgICAgIDEwMQotI2RlZmluZSBTQ1RQX1VOS05PV05f
TUFYICAgICAgICAgICAxMDIKLSNkZWZpbmUgU0NUUF9SQU5EWV9TVFVGRiAgICAgICAgICAgMTAz
Ci0jZGVmaW5lIFNDVFBfUkFORFlfU1RVRkYxICAgICAgICAgIDEwNAotI2RlZmluZSBTQ1RQX1NU
Uk1PVVRfTE9HX0FTU0lHTgkgICAxMDUKLSNkZWZpbmUgU0NUUF9TVFJNT1VUX0xPR19TRU5ECSAg
IDEwNgotI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSAgICAxMDcKLSNkZWZpbmUgU0NU
UF9GTElHSFRfTE9HX1VQICAgICAgICAgMTA4Ci0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dO
X0dBUCAgIDEwOQotI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9SU05EICAxMTAKLSNkZWZp
bmUgU0NUUF9GTElHSFRfTE9HX1VQX1JTTkQgICAgMTExCi0jZGVmaW5lIFNDVFBfRkxJR0hUX0xP
R19ET1dOX1JTTkRfVE8gICAgMTEyCi0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1dQICAg
IDExMwotI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfVVBfUkVWT0tFICAxMTQKLSNkZWZpbmUgU0NU
UF9GTElHSFRfTE9HX0RPV05fUERSUCAgMTE1Ci0jZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dO
X1BNVFUgIDExNgotI2RlZmluZSBTQ1RQX1NBQ0tfTE9HX05PUk1BTAkgICAxMTcKLSNkZWZpbmUg
U0NUUF9TQUNLX0xPR19FWFBSRVNTCSAgIDExOAotI2RlZmluZSBTQ1RQX01BUF9UU05fRU5URVJT
ICAgICAgICAxMTkKLSNkZWZpbmUgU0NUUF9USFJFU0hPTERfQ0xFQVIgICAgICAgMTIwCi0jZGVm
aW5lIFNDVFBfVEhSRVNIT0xEX0lOQ1IgICAgICAgIDEyMQotI2RlZmluZSBTQ1RQX0ZMSUdIVF9M
T0dfRFdOX1dQX0ZXRCAxMjIKLSNkZWZpbmUgU0NUUF9GV0RfVFNOX0NIRUNLICAgICAgICAgMTIz
Ci0jZGVmaW5lIFNDVFBfTE9HX01BWF9UWVBFUyAxMjQKLS8qCi0gKiBUbyB0dXJuIG9uIHZhcmlv
dXMgbG9nZ2luZywgeW91IG11c3QgZmlyc3QgZW5hYmxlICdvcHRpb25zIEtUUicgYW5kCi0gKiB5
b3UgbWlnaHQgd2FudCB0byBidW1wIHRoZSBlbnRpcmVzICdvcHRpb25zIEtUUl9FTlRSSUVTPTgw
MDAwJy4KLSAqIFRvIGdldCBzb21ldGhpbmcgdG8gbG9nIHlvdSBkZWZpbmUgb25lIG9mIHRoZSBs
b2dnaW5nIGRlZmluZXMuCi0gKiAoc2VlIExJTlQpLgotICoKLSAqIFRoaXMgZ2V0cyB0aGUgY29t
cGlsZSBpbiBwbGFjZSwgYnV0IHlvdSBzdGlsbCBuZWVkIHRvIHR1cm4gdGhlCi0gKiBsb2dnaW5n
IGZsYWcgb24gdG9vIGluIHRoZSBzeXNjdGwgKHNlZSBpbiBzY3RwLmgpLgotICovCi0KLSNkZWZp
bmUgU0NUUF9MT0dfRVZFTlRfVU5LTk9XTiAwCi0jZGVmaW5lIFNDVFBfTE9HX0VWRU5UX0NXTkQg
IDEKLSNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfQkxPQ0sgMgotI2RlZmluZSBTQ1RQX0xPR19FVkVO
VF9TVFJNICAzCi0jZGVmaW5lIFNDVFBfTE9HX0VWRU5UX0ZSICAgIDQKLSNkZWZpbmUgU0NUUF9M
T0dfRVZFTlRfTUFQICAgNQotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQVhCVVJTVCA2Ci0jZGVm
aW5lIFNDVFBfTE9HX0VWRU5UX1JXTkQgIDcKLSNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUJDTlQg
OAotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TQUNLICA5Ci0jZGVmaW5lIFNDVFBfTE9HX0xPQ0tf
RVZFTlQgMTAKLSNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfUlRUICAxMQotI2RlZmluZSBTQ1RQX0xP
R19FVkVOVF9TQiAgIDEyCi0jZGVmaW5lIFNDVFBfTE9HX0VWRU5UX05BR0xFIDEzCi0jZGVmaW5l
IFNDVFBfTE9HX0VWRU5UX1dBS0UgMTQKLSNkZWZpbmUgU0NUUF9MT0dfTUlTQ19FVkVOVCAxNQot
I2RlZmluZSBTQ1RQX0xPR19FVkVOVF9DTE9TRSAxNgotI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9N
QlVGIDE3Ci0jZGVmaW5lIFNDVFBfTE9HX0NIVU5LX1BST0MgMTgKLSNkZWZpbmUgU0NUUF9MT0df
RVJST1JfUkVUICAxOQotCi0jZGVmaW5lIFNDVFBfTE9HX01BWF9FVkVOVCAyMAotCi0jZGVmaW5l
IFNDVFBfTE9DS19VTktOT1dOIDIKLQotCi0vKiBudW1iZXIgb2YgYXNzb2NpYXRpb25zIGJ5IGRl
ZmF1bHQgZm9yIHpvbmUgYWxsb2NhdGlvbiAqLwotI2RlZmluZSBTQ1RQX01BWF9OVU1fT0ZfQVNP
Qwk0MDAwMAotLyogaG93IG1hbnkgYWRkcmVzc2VzIHBlciBhc3NvYyByZW1vdGUgYW5kIGxvY2Fs
ICovCi0jZGVmaW5lIFNDVFBfU0NBTEVfRk9SX0FERFIJMgotCi0vKiBkZWZhdWx0IE1VTFRJUExF
X0FTQ09ORiBtb2RlIGVuYWJsZSgxKS9kaXNhYmxlKDApIHZhbHVlIChzeXNjdGwpICovCi0jZGVm
aW5lIFNDVFBfREVGQVVMVF9NVUxUSVBMRV9BU0NPTkZTCTAKLQotLyoKLSAqIFRocmVzaG9sZCBm
b3IgcnduZCB1cGRhdGVzLCB3ZSBoYXZlIHRvIHJlYWQgKHNiX2hpd2F0ID4+Ci0gKiBTQ1RQX1JX
TkRfSElXQVRfU0hJRlQpIGJlZm9yZSB3ZSB3aWxsIGxvb2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8g
c2VuZCBhCi0gKiB3aW5kb3cgdXBkYXRlIHNhY2suIFdoZW4gd2UgbG9vaywgd2UgY29tcGFyZSB0
aGUgbGFzdCByd25kIHdlIHNlbnQgdnMgdGhlCi0gKiBjdXJyZW50IHJ3bmQuIEl0IHRvbyBtdXN0
IGJlIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLiBVc2luZyAzIGRpdmRlcyB0aGUKLSAqIGhpd2F0
IGJ5IDgsIHNvIGZvciAyMDBrIHJ3bmQgd2UgbmVlZCB0byByZWFkIDI0ay4gRm9yIGEgNjRrIHJ3
bmQgd2UgbmVlZAotICogdG8gcmVhZCA4ay4gVGhpcyBzZWVtcyBhYm91dCByaWdodC4uIEkgaG9w
ZSA6LUQuLiB3ZSBkbyBzZXQgYQotICogbWluIG9mIGEgTVRVIG9uIGl0IHNvIGlmIHRoZSByd25k
IGlzIHJlYWwgc21hbGwgd2Ugd2lsbCBpbnNpc3QKLSAqIG9uIGEgZnVsbCBNVFUgb2YgMTUwMCBi
eXRlcy4KLSAqLwotI2RlZmluZSBTQ1RQX1JXTkRfSElXQVRfU0hJRlQgMwotCi0vKiBIb3cgbXVj
aCBvZiB0aGUgcnduZCBtdXN0IHRoZQotICogbWVzc2FnZSBiZSB0YWtpbmcgdXAgdG8gc3RhcnQg
cGFydGlhbCBkZWxpdmVyeS4KLSAqIFdlIGNhbGN1bGF0ZSB0aGlzIGJ5IHNoaWZpbmcgdGhlIGhp
X3dhdGVyIChyZWN2X3dpbikKLSAqIGxlZnQgdGhlIGZvbGxvd2luZyAuLiBzZXQgdG8gMSwgd2hl
biBhIG1lc3NhZ2UgaG9sZHMKLSAqIDEvMiB0aGUgcnduZC4gSWYgd2Ugc2V0IGl0IHRvIDIgd2hl
biBhIG1lc3NhZ2UgaG9sZHMKLSAqIDEvNCB0aGUgcnduZC4uLmV0Yy4uCi0gKi8KLQotI2RlZmlu
ZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQgMQotCi0vKgotICogZGVmYXVsdCBITUFDIGZv
ciBjb29raWVzLCBldGMuLi4gdXNlIG9uZSBvZiB0aGUgQVVUSCBITUFDIGlkJ3MKLSAqIFNDVFBf
SE1BQyBpcyB0aGUgSE1BQ19JRCB0byB1c2UKLSAqIFNDVFBfU0lHTkFUVVJFX1NJWkUgaXMgdGhl
IGRpZ2VzdCBsZW5ndGgKLSAqLwotI2RlZmluZSBTQ1RQX0hNQUMJCVNDVFBfQVVUSF9ITUFDX0lE
X1NIQTEKLSNkZWZpbmUgU0NUUF9TSUdOQVRVUkVfU0laRQlTQ1RQX0FVVEhfRElHRVNUX0xFTl9T
SEExCi0jZGVmaW5lIFNDVFBfU0lHTkFUVVJFX0FMT0NfU0laRSBTQ1RQX1NJR05BVFVSRV9TSVpF
Ci0KLS8qCi0gKiB0aGUgU0NUUCBwcm90b2NvbCBzaWduYXR1cmUgdGhpcyBpbmNsdWRlcyB0aGUg
dmVyc2lvbiBudW1iZXIgZW5jb2RlZCBpbgotICogdGhlIGxhc3QgNCBiaXRzIG9mIHRoZSBzaWdu
YXR1cmUuCi0gKi8KLSNkZWZpbmUgUFJPVE9fU0lHTkFUVVJFX0EJMHgzMDAwMDAwMAotI2RlZmlu
ZSBTQ1RQX1ZFUlNJT05fTlVNQkVSCTB4MwotCi0jZGVmaW5lIE1BWF9UU04JMHhmZmZmZmZmZgot
Ci0vKiBob3cgbWFueSBleGVjdXRpb25zIGV2ZXJ5IE4gdGljaydzICovCi0jZGVmaW5lIFNDVFBf
SVRFUkFUT1JfTUFYX0FUX09OQ0UgMjAKLQotLyogbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGJldHdl
ZW4gaXRlcmF0b3IgZXhlY3V0aW9ucyAqLwotI2RlZmluZSBTQ1RQX0lURVJBVE9SX1RJQ0tTIDEK
LQotLyoKLSAqIG9wdGlvbjogSWYgeW91IGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgeW91IHdp
bGwgcmVjZWl2ZSB0aGUgb2xkIGJlaGF2aW9yCi0gKiBvZiBvYmV5aW5nIGN3bmQgZm9yIHRoZSBm
YXN0IHJldHJhbnNtaXQgYWxnb3JpdGhtLiBXaXRoIHRoaXMgZGVmaW5lZCBhIEZSCi0gKiBoYXBw
ZW5zIHJpZ2h0IGF3YXkgd2l0aC1vdXQgd2FpdGluZyBmb3IgdGhlIGZsaWdodHNpemUgdG8gZHJv
cCBiZWxvdyB0aGUKLSAqIGN3bmQgdmFsdWUgKHdoaWNoIGlzIHJlZHVjZWQgYnkgdGhlIEZSIHRv
IDEvMiB0aGUgaW5mbGlnaHQgcGFja2V0cykuCi0gKi8KLSNkZWZpbmUgU0NUUF9JR05PUkVfQ1dO
RF9PTl9GUiAxCi0KLS8qCi0gKiBBZGRzIGltcGxlbWVudG9ycyBndWlkZSBiZWhhdmlvciB0byBv
bmx5IHVzZSBuZXdlc3QgaGlnaGVzdCB1cGRhdGUgaW4gU0FDSwotICogZ2FwIGFjaydzIHRvIGZp
Z3VyZSBvdXQgaWYgeW91IG5lZWQgdG8gc3Ryb2tlIGEgY2h1bmsgZm9yIEZSLgotICovCi0jZGVm
aW5lIFNDVFBfTk9fRlJfVU5MRVNTX1NFR01FTlRfU01BTExFUiAxCi0KLS8qIGRlZmF1bHQgbWF4
IEkgY2FuIGJ1cnN0IG91dCBhZnRlciBhIGZhc3QgcmV0cmFuc21pdCwgMCBkaXNhYmxlcyBpdCAq
LwotI2RlZmluZSBTQ1RQX0RFRl9NQVhfQlVSU1QgNAotI2RlZmluZSBTQ1RQX0RFRl9IQk1BWF9C
VVJTVCA0Ci0jZGVmaW5lIFNDVFBfREVGX0ZSTUFYX0JVUlNUIDQKLQotLyogUlRPIGNhbGN1bGF0
aW9uIGZsYWcgdG8gc2F5IGlmIGl0Ci0gKiBpcyBzYWZlIHRvIGRldGVybWluZSBsb2NhbCBsYW4g
b3Igbm90LgotICovCi0jZGVmaW5lIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEgMAotI2RlZmluZSBT
Q1RQX1JUVF9GUk9NX0RBVEEgICAgIDEKLQotI2RlZmluZSBQUl9TQ1RQX1VOT1JERVJFRF9GTEFH
IDB4MDAwMQotCi0vKiBJUCBoZHIgKDIwLzQwKSArIDEyKzIrMiAoZW5ldCkgKyBzY3RwIGNvbW1v
biAxMiAqLwotI2RlZmluZSBTQ1RQX0ZJUlNUX01CVUZfUkVTViA2OAotLyogUGFja2V0IHRyYW5z
bWl0IHN0YXRlcyBpbiB0aGUgc2VudCBmaWVsZCAqLwotI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1VO
U0VOVAkJMAotI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1NFTlQJCTEKLSNkZWZpbmUgU0NUUF9EQVRB
R1JBTV9SRVNFTkQxCQkyCS8qIG5vdCB1c2VkIChpbiBjb2RlLCBidXQgbWF5Ci0JCQkJCQkgKiBo
aXQgdGhpcyB2YWx1ZSkgKi8KLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQyCQkzCS8qIG5v
dCB1c2VkIChpbiBjb2RlLCBidXQgbWF5Ci0JCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkgKi8KLSNk
ZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQJCTQKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9BQ0tF
RAkJMTAwMTAKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9NQVJLRUQJCTIwMDEwCi0jZGVmaW5lIFND
VFBfRk9SV0FSRF9UU05fU0tJUAkJMzAwMTAKLSNkZWZpbmUgU0NUUF9EQVRBR1JBTV9OUl9BQ0tF
RAkJNDAwMTAKLQotLyogY2h1bmsgb3V0cHV0IHNlbmQgZnJvbSBsb2NhdGlvbnMgKi8KLSNkZWZp
bmUgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCAgICAgICAwCi0jZGVmaW5lIFNDVFBfT1VUUFVU
X0ZST01fVDMgICAgICAgCTEKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9JTlBVVF9FUlJPUiAg
ICAyCi0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ09OVFJPTF9QUk9DICAgMwotI2RlZmluZSBT
Q1RQX09VVFBVVF9GUk9NX1NBQ0tfVE1SICAgICAgIDQKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJP
TV9TSFVUX1RNUiAgICAgICA1Ci0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SICAgICAg
ICAgNgotI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfQUNLX1RNUiAgIDcKLSNkZWZpbmUg
U0NUUF9PVVRQVVRfRlJPTV9BU0NPTkZfVE1SICAgICA4Ci0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZS
T01fU1RSUlNUX1RNUiAgICAgOQotI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9U
TVIgIDEwCi0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fRUFSTFlfRlJfVE1SICAgMTEKLSNkZWZp
bmUgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRICAgICAxMgotI2RlZmluZSBTQ1RQX09VVFBV
VF9GUk9NX1VTUl9SQ1ZEICAgICAgIDEzCi0jZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lF
X0FDSyAgICAgMTQKLSNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9EUkFJTiAgICAgICAgICAxNQot
I2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcgICAgICAgIDE2Ci0jZGVmaW5lIFNDVFBf
T1VUUFVUX0ZST01fU09DS09QVCAgICAgICAgMTcKLQotLyogU0NUUCBjaHVuayB0eXBlcyBhcmUg
bW92ZWQgc2N0cC5oIGZvciBhcHBsaWNhdGlvbiAoTkFULCBGVykgdXNlICovCi0KLS8qIGFsaWdu
IHRvIDMyLWJpdCBzaXplcyAqLwotI2RlZmluZSBTQ1RQX1NJWkUzMih4KQkoKCgoeCkgKyAzKSA+
PiAyKSA8PCAyKQotCi0jZGVmaW5lIElTX1NDVFBfQ09OVFJPTChhKSAoKChhKS0+Y2h1bmtfdHlw
ZSAhPSBTQ1RQX0RBVEEpICYmICgoYSktPmNodW5rX3R5cGUgIT0gU0NUUF9JREFUQSkpCi0jZGVm
aW5lIElTX1NDVFBfREFUQShhKSAoKChhKS0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHx8ICgo
YSktPmNodW5rX3R5cGUgPT0gU0NUUF9JREFUQSkpCi0KLQotLyogU0NUUCBwYXJhbWV0ZXIgdHlw
ZXMgKi8KLS8qKioqKioqKioqKioqMHgwMDAwIHNlcmllcyoqKioqKioqKioqKiovCi0jZGVmaW5l
IFNDVFBfSEVBUlRCRUFUX0lORk8JCTB4MDAwMQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LSNkZWZpbmUgU0NUUF9DT05OX0FERFJFU1MgICAgICAgICAgICAgICAweDAwMDQKLSNlbmRpZgot
I2RlZmluZSBTQ1RQX0lQVjRfQUREUkVTUwkJMHgwMDA1Ci0jZGVmaW5lIFNDVFBfSVBWNl9BRERS
RVNTCQkweDAwMDYKLSNkZWZpbmUgU0NUUF9TVEFURV9DT09LSUUJCTB4MDAwNwotI2RlZmluZSBT
Q1RQX1VOUkVDT0dfUEFSQU0JCTB4MDAwOAotI2RlZmluZSBTQ1RQX0NPT0tJRV9QUkVTRVJWRQkJ
MHgwMDA5Ci0jZGVmaW5lIFNDVFBfSE9TVE5BTUVfQUREUkVTUwkJMHgwMDBiCi0jZGVmaW5lIFND
VFBfU1VQUE9SVEVEX0FERFJUWVBFCQkweDAwMGMKLQotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXRz
dndnLXN0cnJlc2V0LXh4eCAqLwotI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVAkw
eDAwMGQKLSNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfSU5fUkVRVUVTVAkweDAwMGUKLSNkZWZpbmUg
U0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVFU1QJMHgwMDBmCi0jZGVmaW5lIFNDVFBfU1RSX1JFU0VU
X1JFU1BPTlNFCQkweDAwMTAKLSNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1T
CTB4MDAxMQotI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUyAgIDB4MDAxMgot
Ci0jZGVmaW5lIFNDVFBfTUFYX1JFU0VUX1BBUkFNUyAyCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JF
U0VUX1RTTl9ERUxUQSAgICAweDEwMDAKLQotLyoqKioqKioqKioqKioweDQwMDAgc2VyaWVzKioq
KioqKioqKioqKi8KLQotLyoqKioqKioqKioqKioweDgwMDAgc2VyaWVzKioqKioqKioqKioqKi8K
LSNkZWZpbmUgU0NUUF9FQ05fQ0FQQUJMRQkJMHg4MDAwCi0KLS8qIGRyYWZ0LWlldGYtdHN2d2ct
YXV0aC14eHggKi8KLSNkZWZpbmUgU0NUUF9SQU5ET00JCQkweDgwMDIKLSNkZWZpbmUgU0NUUF9D
SFVOS19MSVNUCQkJMHg4MDAzCi0jZGVmaW5lIFNDVFBfSE1BQ19MSVNUCQkJMHg4MDA0Ci0vKgot
ICogZHJhZnQtaWV0Zi10c3Z3Zy1hZGRpcC1zY3RwLXh4IHBhcmFtPTB4ODAwOCAgbGVuPTB4Tk5O
TiBCeXRlIHwgQnl0ZSB8IEJ5dGUKLSAqIHwgQnl0ZSBCeXRlIHwgQnl0ZSAuLi4KLSAqCi0gKiBX
aGVyZSBlYWNoIGJ5dGUgaXMgYSBjaHVuayB0eXBlIGV4dGVuc2lvbiBzdXBwb3J0ZWQuIEZvciBl
eGFtcGxlLCB0byBzdXBwb3J0Ci0gKiBhbGwgY2h1bmtzIG9uZSB3b3VsZCBoYXZlIChpbiBoZXgp
OgotICoKLSAqIDgwIDAxIDAwIDA5IEMwIEMxIDgwIDgxIDgyIDAwIDAwIDAwCi0gKgotICogSGFz
IHRoZSBwYXJhbWV0ZXIuIEMwID0gUFItU0NUUCAgICAoUkZDMzc1OCkgQzEsIDgwID0gQVNDT05G
IChhZGRpcCBkcmFmdCkgODEKLSAqID0gUGFja2V0IERyb3AgODIgPSBTdHJlYW0gUmVzZXQgODMg
PSBBdXRoZW50aWNhdGlvbgotICovCi0jZGVmaW5lIFNDVFBfU1VQUE9SVEVEX0NIVU5LX0VYVCAg
ICAweDgwMDgKLQotLyoqKioqKioqKioqKioweEMwMDAgc2VyaWVzKioqKioqKioqKioqKi8KLSNk
ZWZpbmUgU0NUUF9QUlNDVFBfU1VQUE9SVEVECQkweGMwMDAKLS8qIGRyYWZ0LWlldGYtdHN2d2ct
YWRkaXAtc2N0cCAqLwotI2RlZmluZSBTQ1RQX0FERF9JUF9BRERSRVNTCQkweGMwMDEKLSNkZWZp
bmUgU0NUUF9ERUxfSVBfQUREUkVTUwkJMHhjMDAyCi0jZGVmaW5lIFNDVFBfRVJST1JfQ0FVU0Vf
SU5ECQkweGMwMDMKLSNkZWZpbmUgU0NUUF9TRVRfUFJJTV9BRERSCQkweGMwMDQKLSNkZWZpbmUg
U0NUUF9TVUNDRVNTX1JFUE9SVAkJMHhjMDA1Ci0jZGVmaW5lIFNDVFBfVUxQX0FEQVBUQVRJT04J
CTB4YzAwNgotLyogYmVoYXZlLW5hdC1kcmFmdCAqLwotI2RlZmluZSBTQ1RQX0hBU19OQVRfU1VQ
UE9SVCAgICAgICAgICAgIDB4YzAwNwotI2RlZmluZSBTQ1RQX05BVF9WVEFHUyAgICAgICAgICAg
ICAgICAgIDB4YzAwOAotCi0vKiBiaXRzIGZvciBUT1MgZmllbGQgKi8KLSNkZWZpbmUgU0NUUF9F
Q1QwX0JJVAkJMHgwMgotI2RlZmluZSBTQ1RQX0VDVDFfQklUCQkweDAxCi0jZGVmaW5lIFNDVFBf
Q0VfQklUUwkJMHgwMwotCi0vKiBiZWxvdyB0dXJucyBvZmYgYWJvdmUgKi8KLSNkZWZpbmUgU0NU
UF9GTEVYSUJMRV9BRERSRVNTCTB4MjAKLSNkZWZpbmUgU0NUUF9OT19IRUFSVEJFQVQJMHg0MAot
Ci0vKiBtYXNrIHRvIGdldCBzdGlja3kgKi8KLSNkZWZpbmUgU0NUUF9TVElDS1lfT1BUSU9OU19N
QVNLCTB4MGMKLQotCi0vKgotICogU0NUUCBzdGF0ZXMgZm9yIGludGVybmFsIHN0YXRlIG1hY2hp
bmUKLSAqLwotI2RlZmluZSBTQ1RQX1NUQVRFX0VNUFRZCQkweDAwMDAKLSNkZWZpbmUgU0NUUF9T
VEFURV9JTlVTRQkJMHgwMDAxCi0jZGVmaW5lIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQJCTB4MDAw
MgotI2RlZmluZSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQJMHgwMDA0Ci0jZGVmaW5lIFNDVFBf
U1RBVEVfT1BFTgkJCTB4MDAwOAotI2RlZmluZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQJMHgw
MDEwCi0jZGVmaW5lIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQJMHgwMDIwCi0jZGVmaW5l
IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQJMHgwMDQwCi0jZGVmaW5lIFNDVFBfU1RBVEVf
U0hVVERPV05fUEVORElORwkweDAwODAKLSNkZWZpbmUgU0NUUF9TVEFURV9DTE9TRURfU09DS0VU
CTB4MDEwMAotI2RlZmluZSBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEICAgIDB4MDIwMAot
I2RlZmluZSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQgICAgIDB4MDQwMAotI2RlZmluZSBT
Q1RQX1NUQVRFX1dBU19BQk9SVEVEICAgICAgICAgIDB4MDgwMAotI2RlZmluZSBTQ1RQX1NUQVRF
X0lOX0FDQ0VQVF9RVUVVRSAgICAgIDB4MTAwMAotI2RlZmluZSBTQ1RQX1NUQVRFX01BU0sJCQkw
eDAwN2YKLQotI2RlZmluZSBTQ1RQX0dFVF9TVEFURShhc29jKQkoKGFzb2MpLT5zdGF0ZSAmIFND
VFBfU1RBVEVfTUFTSykKLSNkZWZpbmUgU0NUUF9TRVRfU1RBVEUoYXNvYywgbmV3c3RhdGUpICAo
KGFzb2MpLT5zdGF0ZSA9ICgoYXNvYyktPnN0YXRlICYgflNDVFBfU1RBVEVfTUFTSykgfCAgbmV3
c3RhdGUpCi0jZGVmaW5lIFNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgc3Vic3RhdGUpICgoYXNv
YyktPnN0YXRlICY9IH5zdWJzdGF0ZSkKLSNkZWZpbmUgU0NUUF9BRERfU1VCU1RBVEUoYXNvYywg
c3Vic3RhdGUpICgoYXNvYyktPnN0YXRlIHw9IHN1YnN0YXRlKQotCi0vKiBTQ1RQIHJlYWNoYWJp
bGl0eSBzdGF0ZSBmb3IgZWFjaCBhZGRyZXNzICovCi0jZGVmaW5lIFNDVFBfQUREUl9SRUFDSEFC
TEUJCTB4MDAxCi0jZGVmaW5lIFNDVFBfQUREUl9OT19QTVRVRCAgICAgICAgICAgICAgMHgwMDIK
LSNkZWZpbmUgU0NUUF9BRERSX05PSEIJCQkweDAwNAotI2RlZmluZSBTQ1RQX0FERFJfQkVJTkdf
REVMRVRFRAkJMHgwMDgKLSNkZWZpbmUgU0NUUF9BRERSX05PVF9JTl9BU1NPQwkJMHgwMTAKLSNk
ZWZpbmUgU0NUUF9BRERSX09VVF9PRl9TQ09QRQkJMHgwODAKLSNkZWZpbmUgU0NUUF9BRERSX1VO
Q09ORklSTUVECQkweDIwMAotI2RlZmluZSBTQ1RQX0FERFJfUkVRX1BSSU1BUlkgICAgICAgICAg
IDB4NDAwCi0vKiBKUlMgNS8xMy8wNyAtIEFkZGVkIHBvdGVudGlhbGx5IGZhaWxlZCBzdGF0ZSBm
b3IgQ01UIFBGICovCi0jZGVmaW5lIFNDVFBfQUREUl9QRiAgICAgICAgICAgICAgICAgICAgMHg4
MDAKLQotLyogYm91bmQgYWRkcmVzcyB0eXBlcyAoZS5nLiB2YWxpZCBhZGRyZXNzIHR5cGVzIHRv
IGFsbG93KSAqLwotI2RlZmluZSBTQ1RQX0JPVU5EX1Y2CQkweDAxCi0jZGVmaW5lIFNDVFBfQk9V
TkRfVjQJCTB4MDIKLQotLyoKLSAqIHdoYXQgaXMgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIG1idWZz
IGluIGEgY2hhaW4gSSBhbGxvdyBiZWZvcmUgc3dpdGNoaW5nIHRvCi0gKiBhIGNsdXN0ZXIKLSAq
LwotI2RlZmluZSBTQ1RQX0RFRkFVTFRfTUJVRlNfSU5fQ0hBSU4gNQotCi0vKiBIb3cgbG9uZyBh
IGNvb2tpZSBsaXZlcyBpbiBtaWxsaS1zZWNvbmRzICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9D
T09LSUVfTElGRQk2MDAwMAotCi0vKiBNYXhpbXVtIHRoZSBtYXBwaW5nIGFycmF5IHdpbGwgIGdy
b3cgdG8gKFRTTiBtYXBwaW5nIGFycmF5KSAqLwotI2RlZmluZSBTQ1RQX01BUFBJTkdfQVJSQVkJ
NTEyCi0KLS8qIHNpemUgb2YgdGhlIGluaXRpYWwgbWFsbG9jIG9uIHRoZSBtYXBwaW5nIGFycmF5
ICovCi0jZGVmaW5lIFNDVFBfSU5JVElBTF9NQVBQSU5HX0FSUkFZICAxNgotLyogaG93IG11Y2gg
d2UgZ3JvdyB0aGUgbWFwcGluZyBhcnJheSBlYWNoIGNhbGwgKi8KLSNkZWZpbmUgU0NUUF9NQVBQ
SU5HX0FSUkFZX0lOQ1IgICAgIDMyCi0KLS8qCi0gKiBIZXJlIHdlIGRlZmluZSB0aGUgdGltZXIg
dHlwZXMgdXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gYXMgYXJndW1lbnRzIGluCi0gKiB0aGUg
c2V0L2dldCB0aW1lciB0eXBlIGNhbGxzLgotICovCi0jZGVmaW5lIFNDVFBfVElNRVJfSU5JVCAJ
MAotI2RlZmluZSBTQ1RQX1RJTUVSX1JFQ1YgCTEKLSNkZWZpbmUgU0NUUF9USU1FUl9TRU5EIAky
Ci0jZGVmaW5lIFNDVFBfVElNRVJfSEVBUlRCRUFUCTMKLSNkZWZpbmUgU0NUUF9USU1FUl9QTVRV
CQk0Ci0jZGVmaW5lIFNDVFBfVElNRVJfTUFYU0hVVERPV04JNQotI2RlZmluZSBTQ1RQX1RJTUVS
X1NJR05BVFVSRQk2Ci0vKgotICogbnVtYmVyIG9mIHRpbWVyIHR5cGVzIGluIHRoZSBiYXNlIFND
VFAgc3RydWN0dXJlIHVzZWQgaW4gdGhlIHNldC9nZXQgYW5kCi0gKiBoYXMgdGhlIGJhc2UgZGVm
YXVsdC4KLSAqLwotI2RlZmluZSBTQ1RQX05VTV9UTVJTCTcKLQotLyogdGltZXIgdHlwZXMgKi8K
LSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX05PTkUJCTAKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBF
X1NFTkQJCTEKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0lOSVQJCTIKLSNkZWZpbmUgU0NUUF9U
SU1FUl9UWVBFX1JFQ1YJCTMKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOCTQKLSNk
ZWZpbmUgU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVAk1Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQ
RV9DT09LSUUJCTYKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRQk3Ci0jZGVmaW5l
IFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UJOAotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV05BQ0sJOQotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfQVNDT05GCQkxMAotI2RlZmlu
ZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRAkxMQotI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfQVVUT0NMT1NFCTEyCi0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9FVkVOVFdBS0UJMTMKLSNk
ZWZpbmUgU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VUICAgICAgICAxNAotI2RlZmluZSBTQ1RQX1RJ
TUVSX1RZUEVfSU5QS0lMTCAgICAgICAgIDE1Ci0jZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9BU09D
S0lMTCAgICAgICAgMTYKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX0FERFJfV1EgICAgICAgICAx
NwotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfWkVST19DT1BZICAgICAgIDE4Ci0jZGVmaW5lIFND
VFBfVElNRVJfVFlQRV9aQ09QWV9TRU5EUSAgICAgMTkKLSNkZWZpbmUgU0NUUF9USU1FUl9UWVBF
X1BSSU1fREVMRVRFRCAgICAyMAotLyogYWRkIG5ldyB0aW1lcnMgaGVyZSAtIGFuZCBpbmNyZW1l
bnQgTEFTVCAqLwotI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTEFTVCAgICAgICAgICAgIDIxCi0K
LSNkZWZpbmUgU0NUUF9JU19USU1FUl9UWVBFX1ZBTElEKHQpCSgoKHQpID4gU0NUUF9USU1FUl9U
WVBFX05PTkUpICYmIFwKLQkJCQkJICgodCkgPCBTQ1RQX1RJTUVSX1RZUEVfTEFTVCkpCi0KLQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotLyogTnVtYmVyIG9mIHRpY2tzIHRvIHJ1biB0aGUgbWFp
biB0aW1lciBhdCBpbiBtc2VjICovCi0jZGVmaW5lIFNDVFBfTUFJTl9USU1FUl9ERUZBVUxUCQkx
MAotI2VuZGlmCi0KLS8qIG1heCBudW1iZXIgb2YgVFNOJ3MgZHVwJ2QgdGhhdCBJIHdpbGwgaG9s
ZCAqLwotI2RlZmluZSBTQ1RQX01BWF9EVVBfVFNOUwkyMAotCi0vKgotICogSGVyZSB3ZSBkZWZp
bmUgdGhlIHR5cGVzIHVzZWQgd2hlbiBzZXR0aW5nIHRoZSByZXRyeSBhbW91bnRzLgotICovCi0v
KiBIb3cgbWFueSBkcm9wIHJlLWF0dGVtcHRzIHdlIG1ha2Ugb24gIElOSVQvQ09PS0lFLUVDSE8g
Ki8KLSNkZWZpbmUgU0NUUF9SRVRSWV9EUk9QUEVEX1RIUkVTSCA0Ci0KLS8qCi0gKiBNYXhtaXVt
IG51bWJlciBvZiBjaHVua3MgYSBzaW5nbGUgYXNzb2NpYXRpb24gY2FuIGhhdmUgb24gaXQuIE5v
dGUgdGhhdAotICogdGhpcyBpcyBhIHNxdWlzaHkgbnVtYmVyIHNpbmNlIHRoZSBjb3VudCBjYW4g
cnVuIG92ZXIgdGhpcyBpZiB0aGUgdXNlcgotICogc2VuZHMgYSBsYXJnZSBtZXNzYWdlIGRvd24g
Li4gdGhlIGZyYWdtZW50ZWQgY2h1bmtzIGRvbid0IGNvdW50IHVudGlsCi0gKiBBRlRFUiB0aGUg
bWVzc2FnZSBpcyBvbiBxdWV1ZS4uIGl0IHdvdWxkIGJlIHRoZSBuZXh0IHNlbmQgdGhhdCBibG9j
a3MKLSAqIHRoaW5ncy4gVGhpcyBudW1iZXIgd2lsbCBnZXQgdHVuZWQgdXAgYXQgYm9vdCBpbiB0
aGUgc2N0cF9pbml0IGFuZCB1c2UgdGhlCi0gKiBudW1iZXIgb2YgY2x1c3RlcnMgYXMgYSBiYXNl
LiBUaGlzIHdheSBoaWdoIGJhbmR3aWR0aCBlbnZpcm9ubWVudHMgd2lsbAotICogbm90IGdldCBp
bXBhY3RlZCBieSB0aGUgbG93ZXIgYmFuZHdpZHRoIHNlbmRpbmcgYSBidW5jaCBvZiAxIGJ5dGUg
Y2h1bmtzCi0gKi8KLSNpZmRlZiBfX1BhbmRhX18KLSNkZWZpbmUgU0NUUF9BU09DX01BWF9DSFVO
S1NfT05fUVVFVUUgMTAyNDAKLSNlbHNlCi0jZGVmaW5lIFNDVFBfQVNPQ19NQVhfQ0hVTktTX09O
X1FVRVVFIDUxMgotI2VuZGlmCi0KLQotLyogVGhlIGNvbnZlcnNpb24gZnJvbSB0aW1lIHRvIHRp
Y2tzIGFuZCB2aWNlIHZlcnNhIGlzIGRvbmUgYnkgcm91bmRpbmcKLSAqIHVwd2FyZHMuIFRoaXMg
d2F5IHdlIGNhbiB0ZXN0IGluIHRoZSBjb2RlIHRoZSB0aW1lIHRvIGJlIHBvc2l0aXZlIGFuZAot
ICoga25vdyB0aGF0IHRoaXMgY29ycmVzcG9uZHMgdG8gYSBwb3NpdGl2ZSBudW1iZXIgb2YgdGlj
a3MuCi0gKi8KLSNkZWZpbmUgTVNFQ19UT19USUNLUyh4KSAoKGh6ID09IDEwMDApID8geCA6ICgo
KCh4KSAqIGh6KSArIDk5OSkgLyAxMDAwKSkKLSNkZWZpbmUgVElDS1NfVE9fTVNFQyh4KSAoKGh6
ID09IDEwMDApID8geCA6ICgoKCh4KSAqIDEwMDApICsgKGh6IC0gMSkpIC8gaHopKQotCi0jZGVm
aW5lIFNFQ19UT19USUNLUyh4KSAoKHgpICogaHopCi0jZGVmaW5lIFRJQ0tTX1RPX1NFQyh4KSAo
KCh4KSArIChoeiAtIDEpKSAvIGh6KQotCi0vKgotICogQmFzaWNhbGx5IHRoZSBtaW5pbXVtIGFt
b3VudCBvZiB0aW1lIGJlZm9yZSBJIGRvIGEgZWFybHkgRlIuIE1ha2luZyB0aGlzCi0gKiB2YWx1
ZSB0byBsb3cgd2lsbCBjYXVzZSBkdXBsaWNhdGUgcmV0cmFuc21pc3Npb25zLgotICovCi0jZGVm
aW5lIFNDVFBfTUlORlJfTVNFQ19USU1FUiAyNTAKLS8qIFRoZSBmbG9vciB0aGlzIHZhbHVlIGlz
IGFsbG93ZWQgdG8gZmFsbCB0byB3aGVuIHN0YXJ0aW5nIGEgdGltZXIuICovCi0jZGVmaW5lIFND
VFBfTUlORlJfTVNFQ19GTE9PUiAyMAotCi0vKiBpbml0IHRpbWVyIGRlZiA9IDEgc2VjICovCi0j
ZGVmaW5lIFNDVFBfSU5JVF9TRUMJMQotCi0vKiBzZW5kIHRpbWVyIGRlZiA9IDEgc2Vjb25kcyAq
LwotI2RlZmluZSBTQ1RQX1NFTkRfU0VDCTEKLQotLyogcmVjdiB0aW1lciBkZWYgPSAyMDBtcyAg
Ki8KLSNkZWZpbmUgU0NUUF9SRUNWX01TRUMJMjAwCi0KLS8qIDMwIHNlY29uZHMgKyBSVE8gKGlu
IG1zKSAqLwotI2RlZmluZSBTQ1RQX0hCX0RFRkFVTFRfTVNFQwkzMDAwMAotCi0vKgotICogVGhp
cyBpcyBob3cgbG9uZyBhIHNlY3JldCBsaXZlcywgTk9UIGhvdyBsb25nIGEgY29va2llIGxpdmVz
IGhvdyBtYW55Ci0gKiB0aWNrcyB0aGUgY3VycmVudCBzZWNyZXQgd2lsbCBsaXZlLgotICovCi0j
ZGVmaW5lIFNDVFBfREVGQVVMVF9TRUNSRVRfTElGRV9TRUMgMzYwMAotCi0jZGVmaW5lIFNDVFBf
UlRPX1VQUEVSX0JPVU5ECSg2MDAwMCkJLyogNjAgc2VjIGluIG1zICovCi0jZGVmaW5lIFNDVFBf
UlRPX0xPV0VSX0JPVU5ECSgxMDAwKQkvKiAxIHNlYyBpcyBtcyAqLwotI2RlZmluZSBTQ1RQX1JU
T19JTklUSUFMCSgzMDAwKQkvKiAzIHNlYyBpbiBtcyAqLwotCi0KLSNkZWZpbmUgU0NUUF9JTlBf
S0lMTF9USU1FT1VUIDIwCS8qIG51bWJlciBvZiBtcyB0byByZXRyeSBraWxsIG9mIGlucGNiICov
Ci0jZGVmaW5lIFNDVFBfQVNPQ19LSUxMX1RJTUVPVVQgMTAJLyogbnVtYmVyIG9mIG1zIHRvIHJl
dHJ5IGtpbGwgb2YgaW5wY2IgKi8KLQotI2RlZmluZSBTQ1RQX0RFRl9NQVhfSU5JVAkJOAotI2Rl
ZmluZSBTQ1RQX0RFRl9NQVhfU0VORAkJMTAKLSNkZWZpbmUgU0NUUF9ERUZfTUFYX1BBVEhfUlRY
CQk1Ci0jZGVmaW5lIFNDVFBfREVGX1BBVEhfUEZfVEhSRVNIT0xECVNDVFBfREVGX01BWF9QQVRI
X1JUWAotCi0jZGVmaW5lIFNDVFBfREVGX1BNVFVfUkFJU0VfU0VDCTYwMAkvKiAxMCBtaW4gYmV0
d2VlbiByYWlzZSBhdHRlbXB0cyAqLwotCi0KLS8qIEhvdyBtYW55IHN0cmVhbXMgSSByZXF1ZXN0
IGluaXRpYWxseSBieSBkZWZhdWx0ICovCi0jZGVmaW5lIFNDVFBfT1NUUkVBTV9JTklUSUFMIDEw
Ci0jZGVmaW5lIFNDVFBfSVNUUkVBTV9JTklUSUFMIDIwNDgKLQotLyoKLSAqIEhvdyBtYW55IHNt
YWxsZXN0X210dSdzIG5lZWQgdG8gaW5jcmVhc2UgYmVmb3JlIGEgd2luZG93IHVwZGF0ZSBzYWNr
IGlzCi0gKiBzZW50IChzaG91bGQgYmUgYSBwb3dlciBvZiAyKS4KLSAqLwotLyogU2VuZCB3aW5k
b3cgdXBkYXRlIChpbmNyICogdGhpcyA+IGhpd2F0KS4gU2hvdWxkIGJlIGEgcG93ZXIgb2YgMiAq
LwotI2RlZmluZSBTQ1RQX01JTklNQUxfUldORAkJKDQwOTYpCS8qIG1pbmltYWwgcnduZCAqLwot
Ci0jZGVmaW5lIFNDVFBfQUREUk1BWAkJMTYKLQotLyogU0NUUCBERUJVRyBTd2l0Y2ggcGFyYW1l
dGVycyAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSMQkweDAwMDAwMDAxCi0jZGVmaW5lIFND
VFBfREVCVUdfVElNRVIyCTB4MDAwMDAwMDIJLyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVC
VUdfVElNRVIzCTB4MDAwMDAwMDQJLyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfVElN
RVI0CTB4MDAwMDAwMDgKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQxCTB4MDAwMDAwMTAKLSNk
ZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQyCTB4MDAwMDAwMjAKLSNkZWZpbmUgU0NUUF9ERUJVR19P
VVRQVVQzCTB4MDAwMDAwNDAKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQ0CTB4MDAwMDAwODAK
LSNkZWZpbmUgU0NUUF9ERUJVR19VVElMMQkweDAwMDAwMTAwCi0jZGVmaW5lIFNDVFBfREVCVUdf
VVRJTDIJMHgwMDAwMDIwMAkvKiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJVR19BVVRIMQkw
eDAwMDAwNDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfQVVUSDIJMHgwMDAwMDgwMAkvKiB1bnVzZWQg
Ki8KLSNkZWZpbmUgU0NUUF9ERUJVR19JTlBVVDEJMHgwMDAwMTAwMAotI2RlZmluZSBTQ1RQX0RF
QlVHX0lOUFVUMgkweDAwMDAyMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfSU5QVVQzCTB4MDAwMDQw
MDAKLSNkZWZpbmUgU0NUUF9ERUJVR19JTlBVVDQJMHgwMDAwODAwMAkvKiB1bnVzZWQgKi8KLSNk
ZWZpbmUgU0NUUF9ERUJVR19BU0NPTkYxCTB4MDAwMTAwMDAKLSNkZWZpbmUgU0NUUF9ERUJVR19B
U0NPTkYyCTB4MDAwMjAwMDAKLSNkZWZpbmUgU0NUUF9ERUJVR19PVVRQVVQ1CTB4MDAwNDAwMDAJ
LyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfWFhYCQkweDAwMDgwMDAwCS8qIHVudXNl
ZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX1BDQjEJCTB4MDAxMDAwMDAKLSNkZWZpbmUgU0NUUF9E
RUJVR19QQ0IyCQkweDAwMjAwMDAwCS8qIHVudXNlZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX1BD
QjMJCTB4MDA0MDAwMDAKLSNkZWZpbmUgU0NUUF9ERUJVR19QQ0I0CQkweDAwODAwMDAwCi0jZGVm
aW5lIFNDVFBfREVCVUdfSU5EQVRBMQkweDAxMDAwMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfSU5E
QVRBMgkweDAyMDAwMDAwCS8qIHVudXNlZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX0lOREFUQTMJ
MHgwNDAwMDAwMAkvKiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJVR19DUkNPRkZMT0FECTB4
MDgwMDAwMDAJLyogdW51c2VkICovCi0jZGVmaW5lIFNDVFBfREVCVUdfVVNSUkVRMQkweDEwMDAw
MDAwCS8qIHVudXNlZCAqLwotI2RlZmluZSBTQ1RQX0RFQlVHX1VTUlJFUTIJMHgyMDAwMDAwMAkv
KiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9ERUJVR19QRUVMMQkweDQwMDAwMDAwCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotI2RlZmluZSBTQ1RQX0RFQlVHX1VTUiAJCTB4ODAwMDAwMDAK
LSNlbHNlCi0jZGVmaW5lIFNDVFBfREVCVUdfWFhYWFgJMHg4MDAwMDAwMAkvKiB1bnVzZWQgKi8K
LSNlbmRpZgotI2RlZmluZSBTQ1RQX0RFQlVHX0FMTAkJMHg3ZmYzZmZmZgotI2RlZmluZSBTQ1RQ
X0RFQlVHX05PSVNZCTB4MDAwNDAwMDAKLQotLyogV2hhdCBzZW5kZXIgbmVlZHMgdG8gc2VlIHRv
IGF2b2lkIFNXUyBvciB3ZSBjb25zaWRlciBwZWVycyByd25kIDAgKi8KLSNkZWZpbmUgU0NUUF9T
V1NfU0VOREVSX0RFRgkxNDIwCi0KLS8qCi0gKiBTV1MgaXMgc2NhbGVkIHRvIHRoZSBzYl9oaXdh
dCBvZiB0aGUgc29ja2V0LiBBIHZhbHVlIG9mIDIgaXMgaGl3YXQvNCwgMQotICogd291bGQgYmUg
aGl3YXQvMiBldGMuCi0gKi8KLS8qIFdoYXQgcmVjZWl2ZXIgbmVlZHMgdG8gc2VlIGluIHNvY2ti
dWYgb3Igd2UgdGVsbCBwZWVyIGl0cyAxICovCi0jZGVmaW5lIFNDVFBfU1dTX1JFQ0VJVkVSX0RF
RgkzMDAwCi0KLSNkZWZpbmUgU0NUUF9JTklUSUFMX0NXTkQgNDM4MAotCi0jZGVmaW5lIFNDVFBf
REVGQVVMVF9NVFUgMTUwMCAvKiBlbWVyZ2VuY3kgZGVmYXVsdCBNVFUgKi8KLS8qIGFtb3VudCBw
ZWVyIGlzIG9ibGlnYXRlZCB0byBoYXZlIGluIHJ3bmQgb3IgSSB3aWxsIGFib3J0ICovCi0jZGVm
aW5lIFNDVFBfTUlOX1JXTkQJMTUwMAotCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9NQVhTRUdNRU5U
IDY1NTM1Ci0KLSNkZWZpbmUgU0NUUF9DSFVOS19CVUZGRVJfU0laRQk1MTIKLSNkZWZpbmUgU0NU
UF9QQVJBTV9CVUZGRVJfU0laRQk1MTIKLQotLyogc21hbGwgY2h1bmsgc3RvcmUgZm9yIGxvb2tp
bmcgYXQgY2h1bmtfbGlzdCBpbiBhdXRoICovCi0jZGVmaW5lIFNDVFBfU01BTExfQ0hVTktfU1RP
UkUgMjYwCi0KLSNkZWZpbmUgU0NUUF9IT1dfTUFOWV9TRUNSRVRTCTIJLyogaG93IG1hbnkgc2Vj
cmV0cyBJIGtlZXAgKi8KLQotI2RlZmluZSBTQ1RQX05VTUJFUl9PRl9TRUNSRVRTCTgJLyogb3Ig
OCAqIDQgPSAzMiBvY3RldHMgKi8KLSNkZWZpbmUgU0NUUF9TRUNSRVRfU0laRQkzMgkvKiBudW1i
ZXIgb2Ygb2N0ZXRzIGluIGEgMjU2IGJpdHMgKi8KLQotCi0vKgotICogU0NUUCB1cHBlciBsYXll
ciBub3RpZmljYXRpb25zCi0gKi8KLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfVVAgICAgICAg
ICAgICAgICAgICAgICAxCi0jZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX0RPV04gICAgICAgICAg
ICAgICAgICAgMgotI2RlZmluZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiAgICAgICAgICAg
ICAgIDMKLSNkZWZpbmUgU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQICAgICAgICAgICAgICAgICA0
Ci0jZGVmaW5lIFNDVFBfTk9USUZZX1NFTlRfREdfRkFJTCAgICAgICAgICAgICAgICAgNQotI2Rl
ZmluZSBTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCAgICAgICAgICAgICAgIDYKLSNkZWZpbmUg
U0NUUF9OT1RJRllfU1BFQ0lBTF9TUF9GQUlMICAgICAgICAgICAgICA3Ci0jZGVmaW5lIFNDVFBf
Tk9USUZZX0FTU09DX0xPQ19BQk9SVEVEICAgICAgICAgICAgOAotI2RlZmluZSBTQ1RQX05PVElG
WV9BU1NPQ19SRU1fQUJPUlRFRCAgICAgICAgICAgIDkKLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNT
T0NfUkVTVEFSVCAgICAgICAgICAgICAgIDEwCi0jZGVmaW5lIFNDVFBfTk9USUZZX1BFRVJfU0hV
VERPV04gICAgICAgICAgICAgICAxMQotI2RlZmluZSBTQ1RQX05PVElGWV9BU0NPTkZfQUREX0lQ
ICAgICAgICAgICAgICAgMTIKLSNkZWZpbmUgU0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCAg
ICAgICAgICAgIDEzCi0jZGVmaW5lIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWSAgICAg
ICAgICAxNAotI2RlZmluZSBTQ1RQX05PVElGWV9QQVJUSUFMX0RFTFZJRVJZX0lORElDQVRJT04g
MTUKLSNkZWZpbmUgU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRCAgICAgICAgIDE2Ci0j
ZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9SRUNWICAgICAgICAgICAgICAxNwotI2RlZmlu
ZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfU0VORCAgICAgICAgICAgICAgMTgKLSNkZWZpbmUgU0NU
UF9OT1RJRllfU1RSX1JFU0VUX0ZBSUxFRF9PVVQgICAgICAgIDE5Ci0jZGVmaW5lIFNDVFBfTk9U
SUZZX1NUUl9SRVNFVF9GQUlMRURfSU4gICAgICAgICAyMAotI2RlZmluZSBTQ1RQX05PVElGWV9T
VFJfUkVTRVRfREVOSUVEX09VVCAgICAgICAgMjEKLSNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JF
U0VUX0RFTklFRF9JTiAgICAgICAgIDIyCi0jZGVmaW5lIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tF
WSAgICAgICAgICAgICAgICAyMwotI2RlZmluZSBTQ1RQX05PVElGWV9BVVRIX0ZSRUVfS0VZICAg
ICAgICAgICAgICAgMjQKLSNkZWZpbmUgU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRIICAgICAgICAg
ICAgICAgIDI1Ci0jZGVmaW5lIFNDVFBfTk9USUZZX1NFTkRFUl9EUlkgICAgICAgICAgICAgICAg
ICAyNgotI2RlZmluZSBTQ1RQX05PVElGWV9SRU1PVEVfRVJST1IgICAgICAgICAgICAgICAgMjcK
LQotLyogVGhpcyBpcyB0aGUgdmFsdWUgZm9yIG1lc3NhZ2VzIHRoYXQgYXJlIE5PVCBjb21wbGV0
ZWx5Ci0gKiBjb3BpZWQgZG93biB3aGVyZSB3ZSB3aWxsIHN0YXJ0IHRvIHNwbGl0IHRoZSBtZXNz
YWdlLgotICogU28sIHdpdGggb3VyIGRlZmF1bHQsIHdlIHNwbGl0IG9ubHkgaWYgdGhlIHBpZWNl
IHdlCi0gKiB3YW50IHRvIHRha2Ugd2lsbCBmaWxsIHVwIGEgZnVsbCBNVFUgKGFzc3VtaW5nCi0g
KiBhIDE1MDAgYnl0ZSBNVFUpLgotICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9TUExJVF9QT0lO
VF9NSU4gMjkwNAotCi0vKiBNYXhpbXVtIGxlbmd0aCBvZiBkaWFnbm9zdGljIGluZm9ybWF0aW9u
IGluIGVycm9yIGNhdXNlcyAqLwotI2RlZmluZSBTQ1RQX0RJQUdfSU5GT19MRU4gMTI4Ci0KLS8q
IEFCT1JUIENPREVTIGFuZCBvdGhlciB0ZWxsLXRhbGUgbG9jYXRpb24KLSAqIGNvZGVzIGFyZSBn
ZW5lcmF0ZWQgYnkgYWRkaW5nIHRoZSBiZWxvdwotICogdG8gdGhlIGluc3RhbmNlIGlkLgotICov
Ci0KLS8qIEZpbGUgZGVmaW5lcyAqLwotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9JTlBVVCAgICAg
ICAgMHgxMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9QQ0IgICAgICAgICAgMHgyMDAw
MDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgICAgICAgMHgzMDAwMDAwMAotI2Rl
ZmluZSBTQ1RQX0ZST01fU0NUUF9USU1FUiAgICAgICAgMHg0MDAwMDAwMAotI2RlZmluZSBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEgICAgICAgMHg1MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NU
UFVUSUwgICAgICAgICAgMHg2MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUDZfVVNSUkVR
ICAgICAgMHg3MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9BU0NPTkYgICAgICAgMHg4
MDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgICAgICAgMHg5MDAwMDAwMAot
I2RlZmluZSBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGICAgICAgMHhhMDAwMDAwMAotI2RlZmluZSBT
Q1RQX0ZST01fU0NUUF9QQU5EQSAgICAgICAgMHhiMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01f
U0NUUF9TWVNDVEwgICAgICAgMHhjMDAwMDAwMAotI2RlZmluZSBTQ1RQX0ZST01fU0NUUF9DQ19G
VU5DVElPTlMgMHhkMDAwMDAwMAotCi0vKiBMb2NhdGlvbiBJRCdzICovCi0jZGVmaW5lIFNDVFBf
TE9DXzEgIDB4MDAwMDAwMDEKLSNkZWZpbmUgU0NUUF9MT0NfMiAgMHgwMDAwMDAwMgotI2RlZmlu
ZSBTQ1RQX0xPQ18zICAweDAwMDAwMDAzCi0jZGVmaW5lIFNDVFBfTE9DXzQgIDB4MDAwMDAwMDQK
LSNkZWZpbmUgU0NUUF9MT0NfNSAgMHgwMDAwMDAwNQotI2RlZmluZSBTQ1RQX0xPQ182ICAweDAw
MDAwMDA2Ci0jZGVmaW5lIFNDVFBfTE9DXzcgIDB4MDAwMDAwMDcKLSNkZWZpbmUgU0NUUF9MT0Nf
OCAgMHgwMDAwMDAwOAotI2RlZmluZSBTQ1RQX0xPQ185ICAweDAwMDAwMDA5Ci0jZGVmaW5lIFND
VFBfTE9DXzEwIDB4MDAwMDAwMGEKLSNkZWZpbmUgU0NUUF9MT0NfMTEgMHgwMDAwMDAwYgotI2Rl
ZmluZSBTQ1RQX0xPQ18xMiAweDAwMDAwMDBjCi0jZGVmaW5lIFNDVFBfTE9DXzEzIDB4MDAwMDAw
MGQKLSNkZWZpbmUgU0NUUF9MT0NfMTQgMHgwMDAwMDAwZQotI2RlZmluZSBTQ1RQX0xPQ18xNSAw
eDAwMDAwMDBmCi0jZGVmaW5lIFNDVFBfTE9DXzE2IDB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9M
T0NfMTcgMHgwMDAwMDAxMQotI2RlZmluZSBTQ1RQX0xPQ18xOCAweDAwMDAwMDEyCi0jZGVmaW5l
IFNDVFBfTE9DXzE5IDB4MDAwMDAwMTMKLSNkZWZpbmUgU0NUUF9MT0NfMjAgMHgwMDAwMDAxNAot
I2RlZmluZSBTQ1RQX0xPQ18yMSAweDAwMDAwMDE1Ci0jZGVmaW5lIFNDVFBfTE9DXzIyIDB4MDAw
MDAwMTYKLSNkZWZpbmUgU0NUUF9MT0NfMjMgMHgwMDAwMDAxNwotI2RlZmluZSBTQ1RQX0xPQ18y
NCAweDAwMDAwMDE4Ci0jZGVmaW5lIFNDVFBfTE9DXzI1IDB4MDAwMDAwMTkKLSNkZWZpbmUgU0NU
UF9MT0NfMjYgMHgwMDAwMDAxYQotI2RlZmluZSBTQ1RQX0xPQ18yNyAweDAwMDAwMDFiCi0jZGVm
aW5lIFNDVFBfTE9DXzI4IDB4MDAwMDAwMWMKLSNkZWZpbmUgU0NUUF9MT0NfMjkgMHgwMDAwMDAx
ZAotI2RlZmluZSBTQ1RQX0xPQ18zMCAweDAwMDAwMDFlCi0jZGVmaW5lIFNDVFBfTE9DXzMxIDB4
MDAwMDAwMWYKLSNkZWZpbmUgU0NUUF9MT0NfMzIgMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0xP
Q18zMyAweDAwMDAwMDIxCi0jZGVmaW5lIFNDVFBfTE9DXzM0IDB4MDAwMDAwMjIKLSNkZWZpbmUg
U0NUUF9MT0NfMzUgMHgwMDAwMDAyMwotCi0KLS8qIEZyZWUgYXNzb2MgY29kZXMgKi8KLSNkZWZp
bmUgU0NUUF9OT1JNQUxfUFJPQyAgICAgIDAKLSNkZWZpbmUgU0NUUF9QQ0JGUkVFX05PRk9SQ0Ug
IDEKLSNkZWZpbmUgU0NUUF9QQ0JGUkVFX0ZPUkNFICAgIDIKLQotLyogRnJvbSBjb2RlcyBmb3Ig
YWRkaW5nIGFkZHJlc3NlcyAqLwotI2RlZmluZSBTQ1RQX0FERFJfSVNfQ09ORklSTUVEIDgKLSNk
ZWZpbmUgU0NUUF9BRERSX0RZTkFNSUNfQURERUQgNgotI2RlZmluZSBTQ1RQX0lOX0NPT0tJRV9Q
Uk9DIDEwMAotI2RlZmluZSBTQ1RQX0FMTE9DX0FTT0MgIDEKLSNkZWZpbmUgU0NUUF9MT0FEX0FE
RFJfMiAyCi0jZGVmaW5lIFNDVFBfTE9BRF9BRERSXzMgMwotI2RlZmluZSBTQ1RQX0xPQURfQURE
Ul80IDQKLSNkZWZpbmUgU0NUUF9MT0FEX0FERFJfNSA1Ci0KLSNkZWZpbmUgU0NUUF9ET05PVF9T
RVRTQ09QRSAwCi0jZGVmaW5lIFNDVFBfRE9fU0VUU0NPUEUgMQotCi0KLS8qIFRoaXMgdmFsdWUg
ZGV0ZXJtaW5lcyB0aGUgZGVmYXVsdCBmb3Igd2hlbgotICogd2UgdHJ5IHRvIGFkZCBtb3JlIG9u
IHRoZSBzZW5kIHF1ZXVlLiwgaWYKLSAqIHRoZXJlIGlzIHJvb20uIFRoaXMgcHJldmVudHMgdXMg
ZnJvbSBjeWNsaW5nCi0gKiBpbnRvIHRoZSBjb3B5X3Jlc3VtZSByb3V0aW5lIHRvIG9mdGVuIGlm
Ci0gKiB3ZSBoYXZlIG5vdCBnb3QgZW5vdWdoIHNwYWNlIHRvIGFkZCBhIGRlY2VudAotICogZW5v
dWdoIHNpemUgbWVzc2FnZS4gTm90ZSB0aGF0IGlmIHdlIGhhdmUgZW5vdWdoCi0gKiBzcGFjZSB0
byBjb21wbGV0ZSB0aGUgbWVzc2FnZSBjb3B5IHdlIHdpbGwgYWx3YXlzCi0gKiBhZGQgdG8gdGhl
IG1lc3NhZ2UsIG5vIG1hdHRlciB3aGF0IHRoZSBzaXplLiBJdHMKLSAqIG9ubHkgd2hlbiB3ZSBy
ZWFjaCB0aGUgcG9pbnQgdGhhdCB3ZSBoYXZlIHNvbWUgbGVmdAotICogdG8gYWRkLCB0aGVyZSBp
cyBvbmx5IHJvb20gZm9yIHBhcnQgb2YgaXQgdGhhdCB3ZQotICogd2lsbCB1c2UgdGhpcyB0aHJl
c2hvbGQuIEl0cyBhbHNvIGEgc3lzY3RsLgotICovCi0jZGVmaW5lIFNDVFBfREVGQVVMVF9BRERf
TU9SRSAxNDUyCi0KLSNpZm5kZWYgU0NUUF9QQ0JIQVNIU0laRQotLyogZGVmYXVsdCBudW1iZXIg
b2YgYXNzb2NpYXRpb24gaGFzaCBidWNrZXRzIGluIGVhY2ggZW5kcG9pbnQgKi8KLSNkZWZpbmUg
U0NUUF9QQ0JIQVNIU0laRSAyNTYKLSNlbmRpZgotI2lmbmRlZiBTQ1RQX1RDQkhBU0hTSVpFCi0j
ZGVmaW5lIFNDVFBfVENCSEFTSFNJWkUgMTAyNAotI2VuZGlmCi0KLSNpZm5kZWYgU0NUUF9DSFVO
S1FVRVVFX1NDQUxFCi0jZGVmaW5lIFNDVFBfQ0hVTktRVUVVRV9TQ0FMRSAxMAotI2VuZGlmCi0K
LSNpZmRlZiBfX0ZyZWVCU0RfXwotLyogY2xvY2sgdmFyaWFuY2UgaXMgMSBtcyAqLwotI2RlZmlu
ZSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZCTEKLSNlbHNlCi0vKiBjbG9jayB2YXJpYW5jZSBpcyAx
MCBtcyAqLwotI2RlZmluZSBTQ1RQX0NMT0NLX0dSQU5VTEFSSVRZCTEwCi0jZW5kaWYKLSNkZWZp
bmUgSVBfSERSX1NJWkUgNDAJCS8qIHdlIHVzZSB0aGUgc2l6ZSBvZiBhIElQNiBoZWFkZXIgaGVy
ZSB0aGlzCi0JCQkJICogZGV0cmFjdHMgYSBzbWFsbCBhbW91bnQgZm9yIGlwdjQgYnV0IGl0Ci0J
CQkJICogc2ltcGxpZmllcyB0aGUgaXB2NiBhZGRpdGlvbiAqLwotCi0vKiBBcmd1bWVudCBtYWdp
YyBudW1iZXIgZm9yIHNjdHBfaW5wY2JfZnJlZSgpICovCi0KLS8qIHRoaXJkIGFyZ3VtZW50ICov
Ci0jZGVmaW5lIFNDVFBfQ0FMTEVEX0RJUkVDVExZX05PQ01QU0VUICAgICAwCi0jZGVmaW5lIFND
VFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NFICAxCi0jZGVmaW5lIFNDVFBfQ0FMTEVEX0ZS
T01fSU5QS0lMTF9USU1FUiAgICAyCi0vKiBzZWNvbmQgYXJndW1lbnQgKi8KLSNkZWZpbmUgU0NU
UF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQgICAgICAgICAgMQotI2RlZmluZSBTQ1RQX0ZSRUVfU0hP
VUxEX1VTRV9HUkFDRUZVTF9DTE9TRSAwCi0KLSNpZm5kZWYgSVBQUk9UT19TQ1RQCi0jZGVmaW5l
IElQUFJPVE9fU0NUUCAxMzIJLyogdGhlIE9mZmljaWFsIElBTkEgbnVtYmVyIDotKSAqLwotI2Vu
ZGlmCQkJCS8qICFJUFBST1RPX1NDVFAgKi8KLQotI2RlZmluZSBTQ1RQX01BWF9EQVRBX0JVTkRM
SU5HCQkyNTYKLQotLyogbW9kdWxhciBjb21wYXJpc29uICovCi0vKiBTZWUgUkZDIDE5ODIgZm9y
IGRldGFpbHMuICovCi0jZGVmaW5lIFNDVFBfVUlOVDE2X0dUKGEsIGIpICgoKGEgPCBiKSAmJiAo
KHVpbnQxNl90KShiIC0gYSkgPiAoMVU8PDE1KSkpIHx8IFwKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgoYSA+IGIpICYmICgodWludDE2X3QpKGEgLSBiKSA8ICgxVTw8MTUpKSkpCi0j
ZGVmaW5lIFNDVFBfVUlOVDE2X0dFKGEsIGIpIChTQ1RQX1VJTlQxNl9HVChhLCBiKSB8fCAoYSA9
PSBiKSkKLSNkZWZpbmUgU0NUUF9VSU5UMzJfR1QoYSwgYikgKCgoYSA8IGIpICYmICgodWludDMy
X3QpKGIgLSBhKSA+ICgxVTw8MzEpKSkgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChhID4gYikgJiYgKCh1aW50MzJfdCkoYSAtIGIpIDwgKDFVPDwzMSkpKSkKLSNkZWZpbmUg
U0NUUF9VSU5UMzJfR0UoYSwgYikgKFNDVFBfVUlOVDMyX0dUKGEsIGIpIHx8IChhID09IGIpKQot
Ci0jZGVmaW5lIFNDVFBfU1NOX0dUKGEsIGIpIFNDVFBfVUlOVDE2X0dUKGEsIGIpCi0jZGVmaW5l
IFNDVFBfU1NOX0dFKGEsIGIpIFNDVFBfVUlOVDE2X0dFKGEsIGIpCi0jZGVmaW5lIFNDVFBfVFNO
X0dUKGEsIGIpIFNDVFBfVUlOVDMyX0dUKGEsIGIpCi0jZGVmaW5lIFNDVFBfVFNOX0dFKGEsIGIp
IFNDVFBfVUlOVDMyX0dFKGEsIGIpCi0jZGVmaW5lIFNDVFBfTUlEX0dUKGksIGEsIGIpICgoKGkp
ID09IDEpID8gU0NUUF9VSU5UMzJfR1QoYSwgYikgOiBTQ1RQX1VJTlQxNl9HVCgodWludDE2X3Qp
YSwgKHVpbnQxNl90KWIpKQotI2RlZmluZSBTQ1RQX01JRF9HRShpLCBhLCBiKSAoKChpKSA9PSAx
KSA/IFNDVFBfVUlOVDMyX0dFKGEsIGIpIDogU0NUUF9VSU5UMTZfR0UoKHVpbnQxNl90KWEsICh1
aW50MTZfdCliKSkKLSNkZWZpbmUgU0NUUF9NSURfRVEoaSwgYSwgYikgKCgoaSkgPT0gMSkgPyBh
ID09IGIgOiAodWludDE2X3QpYSA9PSAodWludDE2X3QpYikKLQotLyogTWFwcGluZyBhcnJheSBt
YW5pcHVsYXRpb24gcm91dGluZXMgKi8KLSNkZWZpbmUgU0NUUF9JU19UU05fUFJFU0VOVChhcnJ5
LCBnYXApICgoYXJyeVsoZ2FwID4+IDMpXSA+PiAoZ2FwICYgMHgwNykpICYgMHgwMSkKLSNkZWZp
bmUgU0NUUF9TRVRfVFNOX1BSRVNFTlQoYXJyeSwgZ2FwKSAoYXJyeVsoZ2FwID4+IDMpXSB8PSAo
MHgwMSA8PCAoKGdhcCAmIDB4MDcpKSkpCi0jZGVmaW5lIFNDVFBfVU5TRVRfVFNOX1BSRVNFTlQo
YXJyeSwgZ2FwKSAoYXJyeVsoZ2FwID4+IDMpXSAmPSAoKH4oMHgwMSA8PCAoKGdhcCAmIDB4MDcp
KSkpICYgMHhmZikpCi0jZGVmaW5lIFNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNuLCBtYXBw
aW5nX3RzbikgZG8geyBcCi0JICAgICAgICAgICAgICAgIGlmICh0c24gPj0gbWFwcGluZ190c24p
IHsgXAotCQkJCQkJZ2FwID0gdHNuIC0gbWFwcGluZ190c247IFwKLQkJCQkJfSBlbHNlIHsgXAot
CQkJCQkJZ2FwID0gKE1BWF9UU04gLSBtYXBwaW5nX3RzbikgKyB0c24gKyAxOyBcCi0JCQkJCX0g
XAotICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoMCkKLQotCi0jZGVmaW5lIFNDVFBfUkVUUkFO
X0RPTkUgLTEKLSNkZWZpbmUgU0NUUF9SRVRSQU5fRVhJVCAtMgotCi0vKgotICogVGhpcyB2YWx1
ZSBkZWZpbmVzIHRoZSBudW1iZXIgb2YgdnRhZyBibG9jayB0aW1lIHdhaXQgZW50cnkncyBwZXIg
bGlzdAotICogZWxlbWVudC4gIEVhY2ggZW50cnkgd2lsbCB0YWtlIDIgNCBieXRlIGludHMgKGFu
ZCBvZiBjb3Vyc2UgdGhlIG92ZXJoZWFkCi0gKiBvZiB0aGUgbmV4dCBwb2ludGVyIGFzIHdlbGwp
LiBVc2luZyAxNSBhcyBhbiBleGFtcGxlIHdpbGwgeWllbGQgKiAoKDggKgotICogMTUpICsgOCkg
b3IgMTI4IGJ5dGVzIG9mIG92ZXJoZWFkIGZvciBlYWNoIHRpbWV3YWl0IGJsb2NrIHRoYXQgZ2V0
cwotICogaW5pdGlhbGl6ZWQuIEluY3JlYXNpbmcgaXQgdG8gMzEgd291bGQgeWllbGQgMjU2IGJ5
dGVzIHBlciBibG9jay4KLSAqLwotI2RlZmluZSBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLIDE1
Ci0vKgotICogSWYgd2UgdXNlIHRoZSBTVEFDSyBvcHRpb24sIHdlIGhhdmUgYW4gYXJyYXkgb2Yg
dGhpcyBzaXplIGhlYWQgcG9pbnRlcnMuCi0gKiBUaGlzIGFycmF5IGlzIG1vZCdkIHRoZSB3aXRo
IHRoZSBzaXplIHRvIGZpbmQgd2hpY2ggYnVja2V0IGFuZCB0aGVuIGFsbAotICogZW50cmllcyBt
dXN0IGJlIHNlYXJjaGVkIHRvIHNlZSBpZiB0aGUgdGFnIGlzIGluIHRpbWVkIHdhaXQuIElmIHNv
IHdlCi0gKiByZWplY3QgaXQuCi0gKi8KLSNkZWZpbmUgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0la
RSAgIDMyCi0KLS8qCi0gKiBOdW1iZXIgb2Ygc2Vjb25kcyBvZiB0aW1lIHdhaXQgZm9yIGEgdnRh
Zy4KLSAqLwotI2RlZmluZSBTQ1RQX1RJTUVfV0FJVCA2MAotCi0vKiBIb3cgbWFueSBtaWNybyBz
ZWNvbmRzIGlzIHRoZSBjdXRvZmYgZnJvbQotICogbG9jYWwgbGFuIHR5cGUgcnR0J3MKLSAqLwot
IC8qCi0gICogV2UgYWxsb3cgOTAwdXMgZm9yIHRoZSBydHQuCi0gICovCi0jZGVmaW5lIFNDVFBf
TE9DQUxfTEFOX1JUVCA5MDAKLSNkZWZpbmUgU0NUUF9MQU5fVU5LTk9XTiAgMAotI2RlZmluZSBT
Q1RQX0xBTl9MT0NBTCAgICAxCi0jZGVmaW5lIFNDVFBfTEFOX0lOVEVSTkVUIDIKLQotI2RlZmlu
ZSBTQ1RQX1NFTkRfQlVGRkVSX1NQTElUVElORyAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfUkVD
Vl9CVUZGRVJfU1BMSVRUSU5HIDB4MDAwMDAwMDIKLQotLyogVGhlIHN5c3RlbSByZXRhaW5zIGEg
Y2FjaGUgb2YgZnJlZSBjaHVua3Mgc3VjaCB0bwotICogY3V0IGRvd24gb24gY2FsbHMgdGhlIG1l
bW9yeSBhbGxvY2F0aW9uIHN5c3RlbS4gVGhlcmUKLSAqIGlzIGEgcGVyIGFzc29jaWF0aW9uIGxp
bWl0IG9mIGZyZWUgaXRlbXMgYW5kIGEgb3ZlcmFsbAotICogc3lzdGVtIGxpbWl0LiBJZiBlaXRo
ZXIgb25lIGdldHMgaGl0IHRoZW4gdGhlIHJlc291cmNlCi0gKiBzdG9wcyBiZWluZyBjYWNoZWQu
Ci0gKi8KLQotI2RlZmluZSBTQ1RQX0RFRl9BU09DX1JFU0NfTElNSVQgMTAKLSNkZWZpbmUgU0NU
UF9ERUZfU1lTVEVNX1JFU0NfTElNSVQgMTAwMAotCi0vKi0KLSAqIGRlZmluZXMgZm9yIHNvY2tl
dCBsb2NrIHN0YXRlcy4KLSAqIFVzZWQgYnkgX19BUFBMRV9fIGFuZCBTQ1RQX1NPX0xPQ0tfVEVT
VElORwotICovCi0jZGVmaW5lIFNDVFBfU09fTE9DS0VECQkxCi0jZGVmaW5lIFNDVFBfU09fTk9U
X0xPQ0tFRAkwCi0KLQotI2RlZmluZSBTQ1RQX0hPTERTX0xPQ0sgMQotI2RlZmluZSBTQ1RQX05P
VF9MT0NLRUQgMAotCi0vKi0KLSAqIEZvciBhZGRyZXNzIGxvY2tzLCBkbyB3ZSBob2xkIHRoZSBs
b2NrPwotICovCi0jZGVmaW5lIFNDVFBfQUREUl9MT0NLRUQgMQotI2RlZmluZSBTQ1RQX0FERFJf
Tk9UX0xPQ0tFRCAwCi0KLSNkZWZpbmUgSU40X0lTUFJJVkFURV9BRERSRVNTKGEpIFwKLSAgICgo
KCh1aW50OF90ICopJihhKS0+c19hZGRyKVswXSA9PSAxMCkgfHwgXAotICAgICgoKCh1aW50OF90
ICopJihhKS0+c19hZGRyKVswXSA9PSAxNzIpICYmIFwKLSAgICAgKCgodWludDhfdCAqKSYoYSkt
PnNfYWRkcilbMV0gPj0gMTYpICYmIFwKLSAgICAgKCgodWludDhfdCAqKSYoYSktPnNfYWRkcilb
MV0gPD0gMzIpKSB8fCBcCi0gICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDE5
MikgJiYgXAotICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA9PSAxNjgpKSkKLQot
I2RlZmluZSBJTjRfSVNMT09QQkFDS19BRERSRVNTKGEpIFwKLSAgICAoKCh1aW50OF90ICopJihh
KS0+c19hZGRyKVswXSA9PSAxMjcpCi0KLSNkZWZpbmUgSU40X0lTTElOS0xPQ0FMX0FERFJFU1Mo
YSkgXAotICAgICgoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVswXSA9PSAxNjkpICYmIFwKLSAg
ICAgKCgodWludDhfdCAqKSYoYSktPnNfYWRkcilbMV0gPT0gMjU0KSkKLQotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVm
aW5lIFNDVFBfR0VUVElNRV9USU1FVkFMKHgpCWdldHdpbnRpbWVvZmRheSh4KQotI2RlZmluZSBT
Q1RQX0dFVFBUSU1FX1RJTUVWQUwoeCkgZ2V0d2ludGltZW9mZGF5KHgpIC8qIHRoaXMgZG9lc24n
dCBzZWVtIHRvIGV2ZXIgYmUgdXNlZC4uICovCi0jZWxzZQotI2RlZmluZSBTQ1RQX0dFVFRJTUVf
VElNRVZBTCh4KQlnZXR0aW1lb2ZkYXkoeCwgTlVMTCkKLSNkZWZpbmUgU0NUUF9HRVRQVElNRV9U
SU1FVkFMKHgpIGdldHRpbWVvZmRheSh4LCBOVUxMKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRl
ZmluZWQoX0tFUk5FTCkKLSNkZWZpbmUgU0NUUF9HRVRUSU1FX1RJTUVWQUwoeCkgKGdldG1pY3Jv
dXB0aW1lKHgpKQotI2RlZmluZSBTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoeCkgKG1pY3JvdXB0aW1l
KHgpKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLSNkZWZpbmUgc2N0cF9zb3d3YWtldXAoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0JCWlucC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUOyBcCi0JfSBlbHNlIHsgXAotCQlz
b3d3YWtldXAoc28pOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
I2RlZmluZSBzY3RwX3Nvd3dha2V1cF9sb2NrZWQoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0gICAgICAgICAg
ICAgICAgU09DS0JVRl9VTkxPQ0soJigoc28pLT5zb19zbmQpKTsgXAotCQlpbnAtPnNjdHBfZmxh
Z3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVDsgXAotCX0gZWxzZSB7IFwKLQkJc293d2Fr
ZXVwX2xvY2tlZChzbyk7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBzY3Rw
X3Nvd3dha2V1cF9sb2NrZWQoaW5wLCBzbykgXAotZG8geyBcCi0JaWYgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCi0gICAgICAgICAgICAgICAgU09DS0JV
Rl9VTkxPQ0soJigoc28pLT5zb19zbmQpKTsgXAotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9Q
Q0JfRkxBR1NfV0FLRU9VVFBVVDsgXAotCX0gZWxzZSB7IFwKLQkJc293d2FrZXVwKHNvKTsgXAot
CX0gXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIHNjdHBfc29yd2FrZXVwKGlucCwg
c28pIFwKLWRvIHsgXAotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05U
X1dBS0UpIHsgXAotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVU
OyBcCi0JfSBlbHNlIHsgXAotCQlzb3J3YWtldXAoc28pOyBcCi0JfSBcCi19IHdoaWxlICgwKQot
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotI2RlZmluZSBzY3RwX3Nvcndha2V1cF9sb2NrZWQoaW5wLCBz
bykgXAotZG8geyBcCi0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRf
V0FLRSkgeyBcCi0JCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7
IFwKLSAgICAgICAgICAgICAgICBTT0NLQlVGX1VOTE9DSygmKChzbyktPnNvX3JjdikpOyBcCi0J
fSBlbHNlIHsgXAotCQlzb3J3YWtldXBfbG9ja2VkKHNvKTsgXAotCX0gXAotfSB3aGlsZSAoMCkK
LSNlbHNlCi0KLSNkZWZpbmUgc2N0cF9zb3J3YWtldXBfbG9ja2VkKGlucCwgc28pIFwKLWRvIHsg
XAotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0UpIHsgXAot
CQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUOyBcCi0gICAgICAg
ICAgICAgICAgU09DS0JVRl9VTkxPQ0soJigoc28pLT5zb19yY3YpKTsgXAotCX0gZWxzZSB7IFwK
LQkJc29yd2FrZXVwKHNvKTsgXAotCX0gXAotfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0jZW5kaWYJ
CQkJLyogX0tFUk5FTCB8fCBfX1VzZXJzcGFjZV9fKi8KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIu
YwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjc1MzZmMTFkMGVlMWU4YWJiYjIwNzZi
MWI0OTg0NThlYjdiZTE1Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3JjMzIuYworKysgL2Rldi9udWxsCkBAIC0x
LDgyNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBT
eXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQgbm90aWNlLAotICogICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1z
LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19G
QlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfY3JjMzIuYyAzMTA1OTAgMjAx
Ni0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2NyYzMyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotCi0KLSNpZiAh
ZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLSNlbHNlCi0vKioKLSAqCi0gKiBSb3V0aW5lIERl
c2NyaXB0aW9uOgotICoKLSAqIENvbXB1dGVzIHRoZSBDUkMzMmMgY2hlY2tzdW0gZm9yIHRoZSBz
cGVjaWZpZWQgYnVmZmVyIHVzaW5nIHRoZSBzbGljaW5nIGJ5IDgKLSAqIGFsZ29yaXRobSBvdmVy
IDY0IGJpdCBxdWFudGl0aWVzLgotICoKLSAqIEFyZ3VtZW50czoKLSAqCi0gKgkJcF9ydW5uaW5n
X2NyYyAtIHBvaW50ZXIgdG8gdGhlIGluaXRpYWwgb3IgZmluYWwgcmVtYWluZGVyIHZhbHVlCi0g
KgkJCQl1c2VkIGluIENSQyBjb21wdXRhdGlvbnMuIEl0IHNob3VsZCBiZSBzZXQgdG8KLSAqCQkJ
CW5vbi1OVUxMIGlmIHRoZSBtb2RlIGFyZ3VtZW50IGlzIGVxdWFsIHRvIENPTlQgb3IgRU5ECi0g
KgkJcF9idWYgLSB0aGUgcGFja2V0IGJ1ZmZlciB3aGVyZSBjcmMgY29tcHV0YXRpb25zIGFyZSBi
ZWluZyBwZXJmb3JtZWQKLSAqCQlsZW5ndGggLSB0aGUgbGVuZ3RoIG9mIHBfYnVmIGluIGJ5dGVz
Ci0gKgkJaW5pdF9ieXRlcyAtIHRoZSBudW1iZXIgb2YgaW5pdGlhbCBieXRlcyB0aGF0IG5lZWQg
dG8gYmUgcHJvY2VzZWQgYmVmb3JlCi0gKgkJCQkJIGFsaWduaW5nIHBfYnVmIHRvIG11bHRpcGxl
cyBvZiA0IGJ5dGVzCi0gKgkJbW9kZSAtIGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzogQkVH
SU4sIENPTlQsIEVORCwgQk9EWSwgQUxJR04KLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKgotICoJ
CVRoZSBjb21wdXRlZCBDUkMzMmMgdmFsdWUKLSAqLwotCi0KLS8qCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDQtMjAwNiBJbnRlbCBDb3Jwb3JhdGlvbiAtIEFsbCBSaWdodHMgUmVzZXJ2ZWQKLSAqCi0g
KgotICogVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGlzIGxpY2Vuc2VkIHN1YmplY3QgdG8gdGhlIEJT
RCBMaWNlbnNlLCBhdmFpbGFibGUgYXQKLSAqIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGlj
ZW5zZXMvYnNkLWxpY2Vuc2UuaHRtbC4KLSAqCi0gKiBBYnN0cmFjdDoKLSAqCi0gKiBUYWJsZXMg
Zm9yIHNvZnR3YXJlIENSQyBnZW5lcmF0aW9uCi0gKi8KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcg
Q1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0g
KiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlh
bCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFs
IExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4u
Li4uLi4uLi4uIDMyIGJpdHMKLSAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4u
Li4uLi4gOCBzbGljZXMKLSAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4gOCA4IDggOCA4IDggOCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uIC5cCi0gKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4
MjU2X3RhYmxlcy5jCi0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxl
aWw4X28zMlsyNTZdID0KLXsKLQkweDAwMDAwMDAwLCAweEYyNkI4MzAzLCAweEUxM0I3MEY3LCAw
eDEzNTBGM0Y0LCAweEM3OUE5NzFGLCAweDM1RjExNDFDLCAweDI2QTFFN0U4LCAweEQ0Q0E2NEVC
LAotCTB4OEFEOTU4Q0YsIDB4NzhCMkRCQ0MsIDB4NkJFMjI4MzgsIDB4OTk4OUFCM0IsIDB4NEQ0
M0NGRDAsIDB4QkYyODRDRDMsIDB4QUM3OEJGMjcsIDB4NUUxMzNDMjQsCi0JMHgxMDVFQzc2Riwg
MHhFMjM1NDQ2QywgMHhGMTY1Qjc5OCwgMHgwMzBFMzQ5QiwgMHhEN0M0NTA3MCwgMHgyNUFGRDM3
MywgMHgzNkZGMjA4NywgMHhDNDk0QTM4NCwKLQkweDlBODc5RkEwLCAweDY4RUMxQ0EzLCAweDdC
QkNFRjU3LCAweDg5RDc2QzU0LCAweDVEMUQwOEJGLCAweEFGNzY4QkJDLCAweEJDMjY3ODQ4LCAw
eDRFNERGQjRCLAotCTB4MjBCRDhFREUsIDB4RDJENjBEREQsIDB4QzE4NkZFMjksIDB4MzNFRDdE
MkEsIDB4RTcyNzE5QzEsIDB4MTU0QzlBQzIsIDB4MDYxQzY5MzYsIDB4RjQ3N0VBMzUsCi0JMHhB
QTY0RDYxMSwgMHg1ODBGNTUxMiwgMHg0QjVGQTZFNiwgMHhCOTM0MjVFNSwgMHg2REZFNDEwRSwg
MHg5Rjk1QzIwRCwgMHg4Q0M1MzFGOSwgMHg3RUFFQjJGQSwKLQkweDMwRTM0OUIxLCAweEMyODhD
QUIyLCAweEQxRDgzOTQ2LCAweDIzQjNCQTQ1LCAweEY3NzlERUFFLCAweDA1MTI1REFELCAweDE2
NDJBRTU5LCAweEU0MjkyRDVBLAotCTB4QkEzQTExN0UsIDB4NDg1MTkyN0QsIDB4NUIwMTYxODks
IDB4QTk2QUUyOEEsIDB4N0RBMDg2NjEsIDB4OEZDQjA1NjIsIDB4OUM5QkY2OTYsIDB4NkVGMDc1
OTUsCi0JMHg0MTdCMURCQywgMHhCMzEwOUVCRiwgMHhBMDQwNkQ0QiwgMHg1MjJCRUU0OCwgMHg4
NkUxOEFBMywgMHg3NDhBMDlBMCwgMHg2N0RBRkE1NCwgMHg5NUIxNzk1NywKLQkweENCQTI0NTcz
LCAweDM5QzlDNjcwLCAweDJBOTkzNTg0LCAweEQ4RjJCNjg3LCAweDBDMzhEMjZDLCAweEZFNTM1
MTZGLCAweEVEMDNBMjlCLCAweDFGNjgyMTk4LAotCTB4NTEyNURBRDMsIDB4QTM0RTU5RDAsIDB4
QjAxRUFBMjQsIDB4NDI3NTI5MjcsIDB4OTZCRjREQ0MsIDB4NjRENENFQ0YsIDB4Nzc4NDNEM0Is
IDB4ODVFRkJFMzgsCi0JMHhEQkZDODIxQywgMHgyOTk3MDExRiwgMHgzQUM3RjJFQiwgMHhDOEFD
NzFFOCwgMHgxQzY2MTUwMywgMHhFRTBEOTYwMCwgMHhGRDVENjVGNCwgMHgwRjM2RTZGNywKLQkw
eDYxQzY5MzYyLCAweDkzQUQxMDYxLCAweDgwRkRFMzk1LCAweDcyOTY2MDk2LCAweEE2NUMwNDdE
LCAweDU0Mzc4NzdFLCAweDQ3Njc3NDhBLCAweEI1MENGNzg5LAotCTB4RUIxRkNCQUQsIDB4MTk3
NDQ4QUUsIDB4MEEyNEJCNUEsIDB4Rjg0RjM4NTksIDB4MkM4NTVDQjIsIDB4REVFRURGQjEsIDB4
Q0RCRTJDNDUsIDB4M0ZENUFGNDYsCi0JMHg3MTk4NTQwRCwgMHg4M0YzRDcwRSwgMHg5MEEzMjRG
QSwgMHg2MkM4QTdGOSwgMHhCNjAyQzMxMiwgMHg0NDY5NDAxMSwgMHg1NzM5QjNFNSwgMHhBNTUy
MzBFNiwKLQkweEZCNDEwQ0MyLCAweDA5MkE4RkMxLCAweDFBN0E3QzM1LCAweEU4MTFGRjM2LCAw
eDNDREI5QkRELCAweENFQjAxOERFLCAweERERTBFQjJBLCAweDJGOEI2ODI5LAotCTB4ODJGNjNC
NzgsIDB4NzA5REI4N0IsIDB4NjNDRDRCOEYsIDB4OTFBNkM4OEMsIDB4NDU2Q0FDNjcsIDB4Qjcw
NzJGNjQsIDB4QTQ1N0RDOTAsIDB4NTYzQzVGOTMsCi0JMHgwODJGNjNCNywgMHhGQTQ0RTBCNCwg
MHhFOTE0MTM0MCwgMHgxQjdGOTA0MywgMHhDRkI1RjRBOCwgMHgzRERFNzdBQiwgMHgyRThFODQ1
RiwgMHhEQ0U1MDc1QywKLQkweDkyQThGQzE3LCAweDYwQzM3RjE0LCAweDczOTM4Q0UwLCAweDgx
RjgwRkUzLCAweDU1MzI2QjA4LCAweEE3NTlFODBCLCAweEI0MDkxQkZGLCAweDQ2NjI5OEZDLAot
CTB4MTg3MUE0RDgsIDB4RUExQTI3REIsIDB4Rjk0QUQ0MkYsIDB4MEIyMTU3MkMsIDB4REZFQjMz
QzcsIDB4MkQ4MEIwQzQsIDB4M0VEMDQzMzAsIDB4Q0NCQkMwMzMsCi0JMHhBMjRCQjVBNiwgMHg1
MDIwMzZBNSwgMHg0MzcwQzU1MSwgMHhCMTFCNDY1MiwgMHg2NUQxMjJCOSwgMHg5N0JBQTFCQSwg
MHg4NEVBNTI0RSwgMHg3NjgxRDE0RCwKLQkweDI4OTJFRDY5LCAweERBRjk2RTZBLCAweEM5QTk5
RDlFLCAweDNCQzIxRTlELCAweEVGMDg3QTc2LCAweDFENjNGOTc1LCAweDBFMzMwQTgxLCAweEZD
NTg4OTgyLAotCTB4QjIxNTcyQzksIDB4NDA3RUYxQ0EsIDB4NTMyRTAyM0UsIDB4QTE0NTgxM0Qs
IDB4NzU4RkU1RDYsIDB4ODdFNDY2RDUsIDB4OTRCNDk1MjEsIDB4NjZERjE2MjIsCi0JMHgzOEND
MkEwNiwgMHhDQUE3QTkwNSwgMHhEOUY3NUFGMSwgMHgyQjlDRDlGMiwgMHhGRjU2QkQxOSwgMHgw
RDNEM0UxQSwgMHgxRTZEQ0RFRSwgMHhFQzA2NEVFRCwKLQkweEMzOEQyNkM0LCAweDMxRTZBNUM3
LCAweDIyQjY1NjMzLCAweEQwRERENTMwLCAweDA0MTdCMURCLCAweEY2N0MzMkQ4LCAweEU1MkND
MTJDLCAweDE3NDc0MjJGLAotCTB4NDk1NDdFMEIsIDB4QkIzRkZEMDgsIDB4QTg2RjBFRkMsIDB4
NUEwNDhERkYsIDB4OEVDRUU5MTQsIDB4N0NBNTZBMTcsIDB4NkZGNTk5RTMsIDB4OUQ5RTFBRTAs
Ci0JMHhEM0QzRTFBQiwgMHgyMUI4NjJBOCwgMHgzMkU4OTE1QywgMHhDMDgzMTI1RiwgMHgxNDQ5
NzZCNCwgMHhFNjIyRjVCNywgMHhGNTcyMDY0MywgMHgwNzE5ODU0MCwKLQkweDU5MEFCOTY0LCAw
eEFCNjEzQTY3LCAweEI4MzFDOTkzLCAweDRBNUE0QTkwLCAweDlFOTAyRTdCLCAweDZDRkJBRDc4
LCAweDdGQUI1RThDLCAweDhEQzBERDhGLAotCTB4RTMzMEE4MUEsIDB4MTE1QjJCMTksIDB4MDIw
QkQ4RUQsIDB4RjA2MDVCRUUsIDB4MjRBQTNGMDUsIDB4RDZDMUJDMDYsIDB4QzU5MTRGRjIsIDB4
MzdGQUNDRjEsCi0JMHg2OUU5RjBENSwgMHg5QjgyNzNENiwgMHg4OEQyODAyMiwgMHg3QUI5MDMy
MSwgMHhBRTczNjdDQSwgMHg1QzE4RTRDOSwgMHg0RjQ4MTczRCwgMHhCRDIzOTQzRSwKLQkweEYz
NkU2Rjc1LCAweDAxMDVFQzc2LCAweDEyNTUxRjgyLCAweEUwM0U5QzgxLCAweDM0RjRGODZBLCAw
eEM2OUY3QjY5LCAweEQ1Q0Y4ODlELCAweDI3QTQwQjlFLAotCTB4NzlCNzM3QkEsIDB4OEJEQ0I0
QjksIDB4OTg4QzQ3NEQsIDB4NkFFN0M0NEUsIDB4QkUyREEwQTUsIDB4NEM0NjIzQTYsIDB4NUYx
NkQwNTIsIDB4QUQ3RDUzNTEKLX07Ci0KLS8qCi0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFi
bGUgY3JjX3RhYmxlaWw4X28zMgotICovCi0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMg
bG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZv
bGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgotICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0g
Li4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVu
Z3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIFRSVUUKLSAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4u
Li4uLi4gMzIgYml0cwotICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4u
LiA4IHNsaWNlcwotICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4
IDggOCA4IDggOCA4IDgKLSAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4gLlwKLSAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZf
dGFibGVzLmMKLSAqLwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhf
bzQwWzI1Nl0gPQotewotCTB4MDAwMDAwMDAsIDB4MTNBMjk4NzcsIDB4Mjc0NTMwRUUsIDB4MzRF
N0E4OTksIDB4NEU4QTYxREMsIDB4NUQyOEY5QUIsIDB4NjlDRjUxMzIsIDB4N0E2REM5NDUsCi0J
MHg5RDE0QzNCOCwgMHg4RUI2NUJDRiwgMHhCQTUxRjM1NiwgMHhBOUYzNkIyMSwgMHhEMzlFQTI2
NCwgMHhDMDNDM0ExMywgMHhGNERCOTI4QSwgMHhFNzc5MEFGRCwKLQkweDNGQzVGMTgxLCAweDJD
Njc2OUY2LCAweDE4ODBDMTZGLCAweDBCMjI1OTE4LCAweDcxNEY5MDVELCAweDYyRUQwODJBLCAw
eDU2MEFBMEIzLCAweDQ1QTgzOEM0LAotCTB4QTJEMTMyMzksIDB4QjE3M0FBNEUsIDB4ODU5NDAy
RDcsIDB4OTYzNjlBQTAsIDB4RUM1QjUzRTUsIDB4RkZGOUNCOTIsIDB4Q0IxRTYzMEIsIDB4RDhC
Q0ZCN0MsCi0JMHg3RjhCRTMwMiwgMHg2QzI5N0I3NSwgMHg1OENFRDNFQywgMHg0QjZDNEI5Qiwg
MHgzMTAxODJERSwgMHgyMkEzMUFBOSwgMHgxNjQ0QjIzMCwgMHgwNUU2MkE0NywKLQkweEUyOUYy
MEJBLCAweEYxM0RCOENELCAweEM1REExMDU0LCAweEQ2Nzg4ODIzLCAweEFDMTU0MTY2LCAweEJG
QjdEOTExLCAweDhCNTA3MTg4LCAweDk4RjJFOUZGLAotCTB4NDA0RTEyODMsIDB4NTNFQzhBRjQs
IDB4NjcwQjIyNkQsIDB4NzRBOUJBMUEsIDB4MEVDNDczNUYsIDB4MUQ2NkVCMjgsIDB4Mjk4MTQz
QjEsIDB4M0EyM0RCQzYsCi0JMHhERDVBRDEzQiwgMHhDRUY4NDk0QywgMHhGQTFGRTFENSwgMHhF
OUJENzlBMiwgMHg5M0QwQjBFNywgMHg4MDcyMjg5MCwgMHhCNDk1ODAwOSwgMHhBNzM3MTg3RSwK
LQkweEZGMTdDNjA0LCAweEVDQjU1RTczLCAweEQ4NTJGNkVBLCAweENCRjA2RTlELCAweEIxOURB
N0Q4LCAweEEyM0YzRkFGLCAweDk2RDg5NzM2LCAweDg1N0EwRjQxLAotCTB4NjIwMzA1QkMsIDB4
NzFBMTlEQ0IsIDB4NDU0NjM1NTIsIDB4NTZFNEFEMjUsIDB4MkM4OTY0NjAsIDB4M0YyQkZDMTcs
IDB4MEJDQzU0OEUsIDB4MTg2RUNDRjksCi0JMHhDMEQyMzc4NSwgMHhEMzcwQUZGMiwgMHhFNzk3
MDc2QiwgMHhGNDM1OUYxQywgMHg4RTU4NTY1OSwgMHg5REZBQ0UyRSwgMHhBOTFENjZCNywgMHhC
QUJGRkVDMCwKLQkweDVEQzZGNDNELCAweDRFNjQ2QzRBLCAweDdBODNDNEQzLCAweDY5MjE1Q0E0
LCAweDEzNEM5NUUxLCAweDAwRUUwRDk2LCAweDM0MDlBNTBGLCAweDI3QUIzRDc4LAotCTB4ODA5
QzI1MDYsIDB4OTMzRUJENzEsIDB4QTdEOTE1RTgsIDB4QjQ3QjhEOUYsIDB4Q0UxNjQ0REEsIDB4
RERCNERDQUQsIDB4RTk1Mzc0MzQsIDB4RkFGMUVDNDMsCi0JMHgxRDg4RTZCRSwgMHgwRTJBN0VD
OSwgMHgzQUNERDY1MCwgMHgyOTZGNEUyNywgMHg1MzAyODc2MiwgMHg0MEEwMUYxNSwgMHg3NDQ3
Qjc4QywgMHg2N0U1MkZGQiwKLQkweEJGNTlENDg3LCAweEFDRkI0Q0YwLCAweDk4MUNFNDY5LCAw
eDhCQkU3QzFFLCAweEYxRDNCNTVCLCAweEUyNzEyRDJDLCAweEQ2OTY4NUI1LCAweEM1MzQxREMy
LAotCTB4MjI0RDE3M0YsIDB4MzFFRjhGNDgsIDB4MDUwODI3RDEsIDB4MTZBQUJGQTYsIDB4NkND
Nzc2RTMsIDB4N0Y2NUVFOTQsIDB4NEI4MjQ2MEQsIDB4NTgyMERFN0EsCi0JMHhGQkMzRkFGOSwg
MHhFODYxNjI4RSwgMHhEQzg2Q0ExNywgMHhDRjI0NTI2MCwgMHhCNTQ5OUIyNSwgMHhBNkVCMDM1
MiwgMHg5MjBDQUJDQiwgMHg4MUFFMzNCQywKLQkweDY2RDczOTQxLCAweDc1NzVBMTM2LCAweDQx
OTIwOUFGLCAweDUyMzA5MUQ4LCAweDI4NUQ1ODlELCAweDNCRkZDMEVBLCAweDBGMTg2ODczLCAw
eDFDQkFGMDA0LAotCTB4QzQwNjBCNzgsIDB4RDdBNDkzMEYsIDB4RTM0MzNCOTYsIDB4RjBFMUEz
RTEsIDB4OEE4QzZBQTQsIDB4OTkyRUYyRDMsIDB4QURDOTVBNEEsIDB4QkU2QkMyM0QsCi0JMHg1
OTEyQzhDMCwgMHg0QUIwNTBCNywgMHg3RTU3RjgyRSwgMHg2REY1NjA1OSwgMHgxNzk4QTkxQywg
MHgwNDNBMzE2QiwgMHgzMEREOTlGMiwgMHgyMzdGMDE4NSwKLQkweDg0NDgxOUZCLCAweDk3RUE4
MThDLCAweEEzMEQyOTE1LCAweEIwQUZCMTYyLCAweENBQzI3ODI3LCAweEQ5NjBFMDUwLCAweEVE
ODc0OEM5LCAweEZFMjVEMEJFLAotCTB4MTk1Q0RBNDMsIDB4MEFGRTQyMzQsIDB4M0UxOUVBQUQs
IDB4MkRCQjcyREEsIDB4NTdENkJCOUYsIDB4NDQ3NDIzRTgsIDB4NzA5MzhCNzEsIDB4NjMzMTEz
MDYsCi0JMHhCQjhERTg3QSwgMHhBODJGNzAwRCwgMHg5Q0M4RDg5NCwgMHg4RjZBNDBFMywgMHhG
NTA3ODlBNiwgMHhFNkE1MTFEMSwgMHhEMjQyQjk0OCwgMHhDMUUwMjEzRiwKLQkweDI2OTkyQkMy
LCAweDM1M0JCM0I1LCAweDAxREMxQjJDLCAweDEyN0U4MzVCLCAweDY4MTM0QTFFLCAweDdCQjFE
MjY5LCAweDRGNTY3QUYwLCAweDVDRjRFMjg3LAotCTB4MDRENDNDRkQsIDB4MTc3NkE0OEEsIDB4
MjM5MTBDMTMsIDB4MzAzMzk0NjQsIDB4NEE1RTVEMjEsIDB4NTlGQ0M1NTYsIDB4NkQxQjZEQ0Ys
IDB4N0VCOUY1QjgsCi0JMHg5OUMwRkY0NSwgMHg4QTYyNjczMiwgMHhCRTg1Q0ZBQiwgMHhBRDI3
NTdEQywgMHhENzRBOUU5OSwgMHhDNEU4MDZFRSwgMHhGMDBGQUU3NywgMHhFM0FEMzYwMCwKLQkw
eDNCMTFDRDdDLCAweDI4QjM1NTBCLCAweDFDNTRGRDkyLCAweDBGRjY2NUU1LCAweDc1OUJBQ0Ew
LCAweDY2MzkzNEQ3LCAweDUyREU5QzRFLCAweDQxN0MwNDM5LAotCTB4QTYwNTBFQzQsIDB4QjVB
Nzk2QjMsIDB4ODE0MDNFMkEsIDB4OTJFMkE2NUQsIDB4RTg4RjZGMTgsIDB4RkIyREY3NkYsIDB4
Q0ZDQTVGRjYsIDB4REM2OEM3ODEsCi0JMHg3QjVGREZGRiwgMHg2OEZENDc4OCwgMHg1QzFBRUYx
MSwgMHg0RkI4Nzc2NiwgMHgzNUQ1QkUyMywgMHgyNjc3MjY1NCwgMHgxMjkwOEVDRCwgMHgwMTMy
MTZCQSwKLQkweEU2NEIxQzQ3LCAweEY1RTk4NDMwLCAweEMxMEUyQ0E5LCAweEQyQUNCNERFLCAw
eEE4QzE3RDlCLCAweEJCNjNFNUVDLCAweDhGODQ0RDc1LCAweDlDMjZENTAyLAotCTB4NDQ5QTJF
N0UsIDB4NTczOEI2MDksIDB4NjNERjFFOTAsIDB4NzA3RDg2RTcsIDB4MEExMDRGQTIsIDB4MTlC
MkQ3RDUsIDB4MkQ1NTdGNEMsIDB4M0VGN0U3M0IsCi0JMHhEOThFRURDNiwgMHhDQTJDNzVCMSwg
MHhGRUNCREQyOCwgMHhFRDY5NDU1RiwgMHg5NzA0OEMxQSwgMHg4NEE2MTQ2RCwgMHhCMDQxQkNG
NCwgMHhBM0UzMjQ4MwotfTsKLQotLyoKLSAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBj
cmNfdGFibGVpbDhfbzQwCi0gKi8KLQotCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIENSQyBsb29r
dXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQotICogZm9sbG93
aW5nIG1vZGVsIHBhcmFtZXRlcnM6Ci0gKgotICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4u
Li4uLi4uLi4uLi4uLiAweDFFREM2RjQxCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGgg
PSAuLi4uLi4uLi4uIDMyIGJpdHMKLSAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4gVFJVRQotICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4u
LiAzMiBiaXRzCi0gKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgg
c2xpY2VzCi0gKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4
IDggOCA4IDggOAotICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAu
XAotICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJs
ZXMuYwotICovCi0KLXN0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNDhb
MjU2XSA9Ci17Ci0JMHgwMDAwMDAwMCwgMHhBNTQxOTI3RSwgMHg0RjZGNTIwRCwgMHhFQTJFQzA3
MywgMHg5RURFQTQxQSwgMHgzQjlGMzY2NCwgMHhEMUIxRjYxNywgMHg3NEYwNjQ2OSwKLQkweDM4
NTEzRUM1LCAweDlEMTBBQ0JCLCAweDc3M0U2Q0M4LCAweEQyN0ZGRUI2LCAweEE2OEY5QURGLCAw
eDAzQ0UwOEExLCAweEU5RTBDOEQyLCAweDRDQTE1QUFDLAotCTB4NzBBMjdEOEEsIDB4RDVFM0VG
RjQsIDB4M0ZDRDJGODcsIDB4OUE4Q0JERjksIDB4RUU3Q0Q5OTAsIDB4NEIzRDRCRUUsIDB4QTEx
MzhCOUQsIDB4MDQ1MjE5RTMsCi0JMHg0OEYzNDM0RiwgMHhFREIyRDEzMSwgMHgwNzlDMTE0Miwg
MHhBMkREODMzQywgMHhENjJERTc1NSwgMHg3MzZDNzUyQiwgMHg5OTQyQjU1OCwgMHgzQzAzMjcy
NiwKLQkweEUxNDRGQjE0LCAweDQ0MDU2OTZBLCAweEFFMkJBOTE5LCAweDBCNkEzQjY3LCAweDdG
OUE1RjBFLCAweERBREJDRDcwLCAweDMwRjUwRDAzLCAweDk1QjQ5RjdELAotCTB4RDkxNUM1RDEs
IDB4N0M1NDU3QUYsIDB4OTY3QTk3REMsIDB4MzMzQjA1QTIsIDB4NDdDQjYxQ0IsIDB4RTI4QUYz
QjUsIDB4MDhBNDMzQzYsIDB4QURFNUExQjgsCi0JMHg5MUU2ODY5RSwgMHgzNEE3MTRFMCwgMHhE
RTg5RDQ5MywgMHg3QkM4NDZFRCwgMHgwRjM4MjI4NCwgMHhBQTc5QjBGQSwgMHg0MDU3NzA4OSwg
MHhFNTE2RTJGNywKLQkweEE5QjdCODVCLCAweDBDRjYyQTI1LCAweEU2RDhFQTU2LCAweDQzOTk3
ODI4LCAweDM3NjkxQzQxLCAweDkyMjg4RTNGLCAweDc4MDY0RTRDLCAweERENDdEQzMyLAotCTB4
Qzc2NTgwRDksIDB4NjIyNDEyQTcsIDB4ODgwQUQyRDQsIDB4MkQ0QjQwQUEsIDB4NTlCQjI0QzMs
IDB4RkNGQUI2QkQsIDB4MTZENDc2Q0UsIDB4QjM5NUU0QjAsCi0JMHhGRjM0QkUxQywgMHg1QTc1
MkM2MiwgMHhCMDVCRUMxMSwgMHgxNTFBN0U2RiwgMHg2MUVBMUEwNiwgMHhDNEFCODg3OCwgMHgy
RTg1NDgwQiwgMHg4QkM0REE3NSwKLQkweEI3QzdGRDUzLCAweDEyODY2RjJELCAweEY4QThBRjVF
LCAweDVERTkzRDIwLCAweDI5MTk1OTQ5LCAweDhDNThDQjM3LCAweDY2NzYwQjQ0LCAweEMzMzc5
OTNBLAotCTB4OEY5NkMzOTYsIDB4MkFENzUxRTgsIDB4QzBGOTkxOUIsIDB4NjVCODAzRTUsIDB4
MTE0ODY3OEMsIDB4QjQwOUY1RjIsIDB4NUUyNzM1ODEsIDB4RkI2NkE3RkYsCi0JMHgyNjIxN0JD
RCwgMHg4MzYwRTlCMywgMHg2OTRFMjlDMCwgMHhDQzBGQkJCRSwgMHhCOEZGREZENywgMHgxREJF
NERBOSwgMHhGNzkwOEREQSwgMHg1MkQxMUZBNCwKLQkweDFFNzA0NTA4LCAweEJCMzFENzc2LCAw
eDUxMUYxNzA1LCAweEY0NUU4NTdCLCAweDgwQUVFMTEyLCAweDI1RUY3MzZDLCAweENGQzFCMzFG
LCAweDZBODAyMTYxLAotCTB4NTY4MzA2NDcsIDB4RjNDMjk0MzksIDB4MTlFQzU0NEEsIDB4QkNB
REM2MzQsIDB4Qzg1REEyNUQsIDB4NkQxQzMwMjMsIDB4ODczMkYwNTAsIDB4MjI3MzYyMkUsCi0J
MHg2RUQyMzg4MiwgMHhDQjkzQUFGQywgMHgyMUJENkE4RiwgMHg4NEZDRjhGMSwgMHhGMDBDOUM5
OCwgMHg1NTREMEVFNiwgMHhCRjYzQ0U5NSwgMHgxQTIyNUNFQiwKLQkweDhCMjc3NzQzLCAweDJF
NjZFNTNELCAweEM0NDgyNTRFLCAweDYxMDlCNzMwLCAweDE1RjlEMzU5LCAweEIwQjg0MTI3LCAw
eDVBOTY4MTU0LCAweEZGRDcxMzJBLAotCTB4QjM3NjQ5ODYsIDB4MTYzN0RCRjgsIDB4RkMxOTFC
OEIsIDB4NTk1ODg5RjUsIDB4MkRBOEVEOUMsIDB4ODhFOTdGRTIsIDB4NjJDN0JGOTEsIDB4Qzc4
NjJERUYsCi0JMHhGQjg1MEFDOSwgMHg1RUM0OThCNywgMHhCNEVBNThDNCwgMHgxMUFCQ0FCQSwg
MHg2NTVCQUVEMywgMHhDMDFBM0NBRCwgMHgyQTM0RkNERSwgMHg4Rjc1NkVBMCwKLQkweEMzRDQz
NDBDLCAweDY2OTVBNjcyLCAweDhDQkI2NjAxLCAweDI5RkFGNDdGLCAweDVEMEE5MDE2LCAweEY4
NEIwMjY4LCAweDEyNjVDMjFCLCAweEI3MjQ1MDY1LAotCTB4NkE2MzhDNTcsIDB4Q0YyMjFFMjks
IDB4MjUwQ0RFNUEsIDB4ODA0RDRDMjQsIDB4RjRCRDI4NEQsIDB4NTFGQ0JBMzMsIDB4QkJEMjdB
NDAsIDB4MUU5M0U4M0UsCi0JMHg1MjMyQjI5MiwgMHhGNzczMjBFQywgMHgxRDVERTA5RiwgMHhC
ODFDNzJFMSwgMHhDQ0VDMTY4OCwgMHg2OUFEODRGNiwgMHg4MzgzNDQ4NSwgMHgyNkMyRDZGQiwK
LQkweDFBQzFGMURELCAweEJGODA2M0EzLCAweDU1QUVBM0QwLCAweEYwRUYzMUFFLCAweDg0MUY1
NUM3LCAweDIxNUVDN0I5LCAweENCNzAwN0NBLCAweDZFMzE5NUI0LAotCTB4MjI5MENGMTgsIDB4
ODdEMTVENjYsIDB4NkRGRjlEMTUsIDB4QzhCRTBGNkIsIDB4QkM0RTZCMDIsIDB4MTkwRkY5N0Ms
IDB4RjMyMTM5MEYsIDB4NTY2MEFCNzEsCi0JMHg0QzQyRjc5QSwgMHhFOTAzNjVFNCwgMHgwMzJE
QTU5NywgMHhBNjZDMzdFOSwgMHhEMjlDNTM4MCwgMHg3N0REQzFGRSwgMHg5REYzMDE4RCwgMHgz
OEIyOTNGMywKLQkweDc0MTNDOTVGLCAweEQxNTI1QjIxLCAweDNCN0M5QjUyLCAweDlFM0QwOTJD
LCAweEVBQ0Q2RDQ1LCAweDRGOENGRjNCLCAweEE1QTIzRjQ4LCAweDAwRTNBRDM2LAotCTB4M0NF
MDhBMTAsIDB4OTlBMTE4NkUsIDB4NzM4RkQ4MUQsIDB4RDZDRTRBNjMsIDB4QTIzRTJFMEEsIDB4
MDc3RkJDNzQsIDB4RUQ1MTdDMDcsIDB4NDgxMEVFNzksCi0JMHgwNEIxQjRENSwgMHhBMUYwMjZB
QiwgMHg0QkRFRTZEOCwgMHhFRTlGNzRBNiwgMHg5QTZGMTBDRiwgMHgzRjJFODJCMSwgMHhENTAw
NDJDMiwgMHg3MDQxRDBCQywKLQkweEFEMDYwQzhFLCAweDA4NDc5RUYwLCAweEUyNjk1RTgzLCAw
eDQ3MjhDQ0ZELCAweDMzRDhBODk0LCAweDk2OTkzQUVBLCAweDdDQjdGQTk5LCAweEQ5RjY2OEU3
LAotCTB4OTU1NzMyNEIsIDB4MzAxNkEwMzUsIDB4REEzODYwNDYsIDB4N0Y3OUYyMzgsIDB4MEI4
OTk2NTEsIDB4QUVDODA0MkYsIDB4NDRFNkM0NUMsIDB4RTFBNzU2MjIsCi0JMHhEREE0NzEwNCwg
MHg3OEU1RTM3QSwgMHg5MkNCMjMwOSwgMHgzNzhBQjE3NywgMHg0MzdBRDUxRSwgMHhFNjNCNDc2
MCwgMHgwQzE1ODcxMywgMHhBOTU0MTU2RCwKLQkweEU1RjU0RkMxLCAweDQwQjREREJGLCAweEFB
OUExRENDLCAweDBGREI4RkIyLCAweDdCMkJFQkRCLCAweERFNkE3OUE1LCAweDM0NDRCOUQ2LCAw
eDkxMDUyQkE4Ci19OwotCi0vKgotICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190
YWJsZWlsOF9vNDgKLSAqLwotCi0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0
YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcg
bW9kZWwgcGFyYW1ldGVyczoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4u
Li4uLi4uLi4uIDB4MUVEQzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4u
Li4uLi4uLi4gMzIgYml0cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiBUUlVFCi0gKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMy
IGJpdHMKLSAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGlj
ZXMKLSAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4
IDggOCA4Ci0gKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCi0g
KiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5j
Ci0gKi8KLQotc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X281NlsyNTZd
ID0KLXsKLQkweDAwMDAwMDAwLCAweERENDVBQUI4LCAweEJGNjcyMzgxLCAweDYyMjI4OTM5LCAw
eDdCMjIzMUYzLCAweEE2Njc5QjRCLCAweEM0NDUxMjcyLCAweDE5MDBCOENBLAotCTB4RjY0NDYz
RTYsIDB4MkIwMUM5NUUsIDB4NDkyMzQwNjcsIDB4OTQ2NkVBREYsIDB4OEQ2NjUyMTUsIDB4NTAy
M0Y4QUQsIDB4MzIwMTcxOTQsIDB4RUY0NERCMkMsCi0JMHhFOTY0QjEzRCwgMHgzNDIxMUI4NSwg
MHg1NjAzOTJCQywgMHg4QjQ2MzgwNCwgMHg5MjQ2ODBDRSwgMHg0RjAzMkE3NiwgMHgyRDIxQTM0
RiwgMHhGMDY0MDlGNywKLQkweDFGMjBEMkRCLCAweEMyNjU3ODYzLCAweEEwNDdGMTVBLCAweDdE
MDI1QkUyLCAweDY0MDJFMzI4LCAweEI5NDc0OTkwLCAweERCNjVDMEE5LCAweDA2MjA2QTExLAot
CTB4RDcyNTE0OEIsIDB4MEE2MEJFMzMsIDB4Njg0MjM3MEEsIDB4QjUwNzlEQjIsIDB4QUMwNzI1
NzgsIDB4NzE0MjhGQzAsIDB4MTM2MDA2RjksIDB4Q0UyNUFDNDEsCi0JMHgyMTYxNzc2RCwgMHhG
QzI0RERENSwgMHg5RTA2NTRFQywgMHg0MzQzRkU1NCwgMHg1QTQzNDY5RSwgMHg4NzA2RUMyNiwg
MHhFNTI0NjUxRiwgMHgzODYxQ0ZBNywKLQkweDNFNDFBNUI2LCAweEUzMDQwRjBFLCAweDgxMjY4
NjM3LCAweDVDNjMyQzhGLCAweDQ1NjM5NDQ1LCAweDk4MjYzRUZELCAweEZBMDRCN0M0LCAweDI3
NDExRDdDLAotCTB4QzgwNUM2NTAsIDB4MTU0MDZDRTgsIDB4Nzc2MkU1RDEsIDB4QUEyNzRGNjks
IDB4QjMyN0Y3QTMsIDB4NkU2MjVEMUIsIDB4MEM0MEQ0MjIsIDB4RDEwNTdFOUEsCi0JMHhBQkE2
NUZFNywgMHg3NkUzRjU1RiwgMHgxNEMxN0M2NiwgMHhDOTg0RDZERSwgMHhEMDg0NkUxNCwgMHgw
REMxQzRBQywgMHg2RkUzNEQ5NSwgMHhCMkE2RTcyRCwKLQkweDVERTIzQzAxLCAweDgwQTc5NkI5
LCAweEUyODUxRjgwLCAweDNGQzBCNTM4LCAweDI2QzAwREYyLCAweEZCODVBNzRBLCAweDk5QTcy
RTczLCAweDQ0RTI4NENCLAotCTB4NDJDMkVFREEsIDB4OUY4NzQ0NjIsIDB4RkRBNUNENUIsIDB4
MjBFMDY3RTMsIDB4MzlFMERGMjksIDB4RTRBNTc1OTEsIDB4ODY4N0ZDQTgsIDB4NUJDMjU2MTAs
Ci0JMHhCNDg2OEQzQywgMHg2OUMzMjc4NCwgMHgwQkUxQUVCRCwgMHhENkE0MDQwNSwgMHhDRkE0
QkNDRiwgMHgxMkUxMTY3NywgMHg3MEMzOUY0RSwgMHhBRDg2MzVGNiwKLQkweDdDODM0QjZDLCAw
eEExQzZFMUQ0LCAweEMzRTQ2OEVELCAweDFFQTFDMjU1LCAweDA3QTE3QTlGLCAweERBRTREMDI3
LCAweEI4QzY1OTFFLCAweDY1ODNGM0E2LAotCTB4OEFDNzI4OEEsIDB4NTc4MjgyMzIsIDB4MzVB
MDBCMEIsIDB4RThFNUExQjMsIDB4RjFFNTE5NzksIDB4MkNBMEIzQzEsIDB4NEU4MjNBRjgsIDB4
OTNDNzkwNDAsCi0JMHg5NUU3RkE1MSwgMHg0OEEyNTBFOSwgMHgyQTgwRDlEMCwgMHhGN0M1NzM2
OCwgMHhFRUM1Q0JBMiwgMHgzMzgwNjExQSwgMHg1MUEyRTgyMywgMHg4Q0U3NDI5QiwKLQkweDYz
QTM5OUI3LCAweEJFRTYzMzBGLCAweERDQzRCQTM2LCAweDAxODExMDhFLCAweDE4ODFBODQ0LCAw
eEM1QzQwMkZDLCAweEE3RTY4QkM1LCAweDdBQTMyMTdELAotCTB4NTJBMEM5M0YsIDB4OEZFNTYz
ODcsIDB4RURDN0VBQkUsIDB4MzA4MjQwMDYsIDB4Mjk4MkY4Q0MsIDB4RjRDNzUyNzQsIDB4OTZF
NURCNEQsIDB4NEJBMDcxRjUsCi0JMHhBNEU0QUFEOSwgMHg3OUExMDA2MSwgMHgxQjgzODk1OCwg
MHhDNkM2MjNFMCwgMHhERkM2OUIyQSwgMHgwMjgzMzE5MiwgMHg2MEExQjhBQiwgMHhCREU0MTIx
MywKLQkweEJCQzQ3ODAyLCAweDY2ODFEMkJBLCAweDA0QTM1QjgzLCAweEQ5RTZGMTNCLCAweEMw
RTY0OUYxLCAweDFEQTNFMzQ5LCAweDdGODE2QTcwLCAweEEyQzRDMEM4LAotCTB4NEQ4MDFCRTQs
IDB4OTBDNUIxNUMsIDB4RjJFNzM4NjUsIDB4MkZBMjkyREQsIDB4MzZBMjJBMTcsIDB4RUJFNzgw
QUYsIDB4ODlDNTA5OTYsIDB4NTQ4MEEzMkUsCi0JMHg4NTg1RERCNCwgMHg1OEMwNzcwQywgMHgz
QUUyRkUzNSwgMHhFN0E3NTQ4RCwgMHhGRUE3RUM0NywgMHgyM0UyNDZGRiwgMHg0MUMwQ0ZDNiwg
MHg5Qzg1NjU3RSwKLQkweDczQzFCRTUyLCAweEFFODQxNEVBLCAweENDQTY5REQzLCAweDExRTMz
NzZCLCAweDA4RTM4RkExLCAweEQ1QTYyNTE5LCAweEI3ODRBQzIwLCAweDZBQzEwNjk4LAotCTB4
NkNFMTZDODksIDB4QjFBNEM2MzEsIDB4RDM4NjRGMDgsIDB4MEVDM0U1QjAsIDB4MTdDMzVEN0Es
IDB4Q0E4NkY3QzIsIDB4QThBNDdFRkIsIDB4NzVFMUQ0NDMsCi0JMHg5QUE1MEY2RiwgMHg0N0Uw
QTVENywgMHgyNUMyMkNFRSwgMHhGODg3ODY1NiwgMHhFMTg3M0U5QywgMHgzQ0MyOTQyNCwgMHg1
RUUwMUQxRCwgMHg4M0E1QjdBNSwKLQkweEY5MDY5NkQ4LCAweDI0NDMzQzYwLCAweDQ2NjFCNTU5
LCAweDlCMjQxRkUxLCAweDgyMjRBNzJCLCAweDVGNjEwRDkzLCAweDNENDM4NEFBLCAweEUwMDYy
RTEyLAotCTB4MEY0MkY1M0UsIDB4RDIwNzVGODYsIDB4QjAyNUQ2QkYsIDB4NkQ2MDdDMDcsIDB4
NzQ2MEM0Q0QsIDB4QTkyNTZFNzUsIDB4Q0IwN0U3NEMsIDB4MTY0MjRERjQsCi0JMHgxMDYyMjdF
NSwgMHhDRDI3OEQ1RCwgMHhBRjA1MDQ2NCwgMHg3MjQwQUVEQywgMHg2QjQwMTYxNiwgMHhCNjA1
QkNBRSwgMHhENDI3MzU5NywgMHgwOTYyOUYyRiwKLQkweEU2MjY0NDAzLCAweDNCNjNFRUJCLCAw
eDU5NDE2NzgyLCAweDg0MDRDRDNBLCAweDlEMDQ3NUYwLCAweDQwNDFERjQ4LCAweDIyNjM1Njcx
LCAweEZGMjZGQ0M5LAotCTB4MkUyMzgyNTMsIDB4RjM2NjI4RUIsIDB4OTE0NEExRDIsIDB4NEMw
MTBCNkEsIDB4NTUwMUIzQTAsIDB4ODg0NDE5MTgsIDB4RUE2NjkwMjEsIDB4MzcyMzNBOTksCi0J
MHhEODY3RTFCNSwgMHgwNTIyNEIwRCwgMHg2NzAwQzIzNCwgMHhCQTQ1Njg4QywgMHhBMzQ1RDA0
NiwgMHg3RTAwN0FGRSwgMHgxQzIyRjNDNywgMHhDMTY3NTk3RiwKLQkweEM3NDczMzZFLCAweDFB
MDI5OUQ2LCAweDc4MjAxMEVGLCAweEE1NjVCQTU3LCAweEJDNjUwMjlELCAweDYxMjBBODI1LCAw
eDAzMDIyMTFDLCAweERFNDc4QkE0LAotCTB4MzEwMzUwODgsIDB4RUM0NkZBMzAsIDB4OEU2NDcz
MDksIDB4NTMyMUQ5QjEsIDB4NEEyMTYxN0IsIDB4OTc2NENCQzMsIDB4RjU0NjQyRkEsIDB4Mjgw
M0U4NDIKLX07Ci0KLS8qCi0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxl
aWw4X281NgotICovCi0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxl
IHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2Rl
bCBwYXJhbWV0ZXJzOgotICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4u
Li4uLi4gMHgxRURDNkY0MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4u
Li4uLiAzMiBiaXRzCi0gKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IFRSVUUKLSAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0
cwotICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwot
ICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4
IDgKLSAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZp
bGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAq
LwotCi1zdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzY0WzI1Nl0gPQot
ewotCTB4MDAwMDAwMDAsIDB4MzgxMTZGQUMsIDB4NzAyMkRGNTgsIDB4NDgzM0IwRjQsIDB4RTA0
NUJFQjAsIDB4RDg1NEQxMUMsIDB4OTA2NzYxRTgsIDB4QTg3NjBFNDQsCi0JMHhDNTY3MEI5MSwg
MHhGRDc2NjQzRCwgMHhCNTQ1RDRDOSwgMHg4RDU0QkI2NSwgMHgyNTIyQjUyMSwgMHgxRDMzREE4
RCwgMHg1NTAwNkE3OSwgMHg2RDExMDVENSwKLQkweDhGMjI2MUQzLCAweEI3MzMwRTdGLCAweEZG
MDBCRThCLCAweEM3MTFEMTI3LCAweDZGNjdERjYzLCAweDU3NzZCMENGLCAweDFGNDUwMDNCLCAw
eDI3NTQ2Rjk3LAotCTB4NEE0NTZBNDIsIDB4NzI1NDA1RUUsIDB4M0E2N0I1MUEsIDB4MDI3NkRB
QjYsIDB4QUEwMEQ0RjIsIDB4OTIxMUJCNUUsIDB4REEyMjBCQUEsIDB4RTIzMzY0MDYsCi0JMHgx
QkE4QjU1NywgMHgyM0I5REFGQiwgMHg2QjhBNkEwRiwgMHg1MzlCMDVBMywgMHhGQkVEMEJFNywg
MHhDM0ZDNjQ0QiwgMHg4QkNGRDRCRiwgMHhCM0RFQkIxMywKLQkweERFQ0ZCRUM2LCAweEU2REVE
MTZBLCAweEFFRUQ2MTlFLCAweDk2RkMwRTMyLCAweDNFOEEwMDc2LCAweDA2OUI2RkRBLCAweDRF
QThERjJFLCAweDc2QjlCMDgyLAotCTB4OTQ4QUQ0ODQsIDB4QUM5QkJCMjgsIDB4RTRBODBCREMs
IDB4RENCOTY0NzAsIDB4NzRDRjZBMzQsIDB4NENERTA1OTgsIDB4MDRFREI1NkMsIDB4M0NGQ0RB
QzAsCi0JMHg1MUVEREYxNSwgMHg2OUZDQjBCOSwgMHgyMUNGMDA0RCwgMHgxOURFNkZFMSwgMHhC
MUE4NjFBNSwgMHg4OUI5MEUwOSwgMHhDMThBQkVGRCwgMHhGOTlCRDE1MSwKLQkweDM3NTE2QUFF
LCAweDBGNDAwNTAyLCAweDQ3NzNCNUY2LCAweDdGNjJEQTVBLCAweEQ3MTRENDFFLCAweEVGMDVC
QkIyLCAweEE3MzYwQjQ2LCAweDlGMjc2NEVBLAotCTB4RjIzNjYxM0YsIDB4Q0EyNzBFOTMsIDB4
ODIxNEJFNjcsIDB4QkEwNUQxQ0IsIDB4MTI3M0RGOEYsIDB4MkE2MkIwMjMsIDB4NjI1MTAwRDcs
IDB4NUE0MDZGN0IsCi0JMHhCODczMEI3RCwgMHg4MDYyNjREMSwgMHhDODUxRDQyNSwgMHhGMDQw
QkI4OSwgMHg1ODM2QjVDRCwgMHg2MDI3REE2MSwgMHgyODE0NkE5NSwgMHgxMDA1MDUzOSwKLQkw
eDdEMTQwMEVDLCAweDQ1MDU2RjQwLCAweDBEMzZERkI0LCAweDM1MjdCMDE4LCAweDlENTFCRTVD
LCAweEE1NDBEMUYwLCAweEVENzM2MTA0LCAweEQ1NjIwRUE4LAotCTB4MkNGOURGRjksIDB4MTRF
OEIwNTUsIDB4NUNEQjAwQTEsIDB4NjRDQTZGMEQsIDB4Q0NCQzYxNDksIDB4RjRBRDBFRTUsIDB4
QkM5RUJFMTEsIDB4ODQ4RkQxQkQsCi0JMHhFOTlFRDQ2OCwgMHhEMThGQkJDNCwgMHg5OUJDMEIz
MCwgMHhBMUFENjQ5QywgMHgwOURCNkFEOCwgMHgzMUNBMDU3NCwgMHg3OUY5QjU4MCwgMHg0MUU4
REEyQywKLQkweEEzREJCRTJBLCAweDlCQ0FEMTg2LCAweEQzRjk2MTcyLCAweEVCRTgwRURFLCAw
eDQzOUUwMDlBLCAweDdCOEY2RjM2LCAweDMzQkNERkMyLCAweDBCQURCMDZFLAotCTB4NjZCQ0I1
QkIsIDB4NUVBRERBMTcsIDB4MTY5RTZBRTMsIDB4MkU4RjA1NEYsIDB4ODZGOTBCMEIsIDB4QkVF
ODY0QTcsIDB4RjZEQkQ0NTMsIDB4Q0VDQUJCRkYsCi0JMHg2RUEyRDU1QywgMHg1NkIzQkFGMCwg
MHgxRTgwMEEwNCwgMHgyNjkxNjVBOCwgMHg4RUU3NkJFQywgMHhCNkY2MDQ0MCwgMHhGRUM1QjRC
NCwgMHhDNkQ0REIxOCwKLQkweEFCQzVERUNELCAweDkzRDRCMTYxLCAweERCRTcwMTk1LCAweEUz
RjY2RTM5LCAweDRCODA2MDdELCAweDczOTEwRkQxLCAweDNCQTJCRjI1LCAweDAzQjNEMDg5LAot
CTB4RTE4MEI0OEYsIDB4RDk5MURCMjMsIDB4OTFBMjZCRDcsIDB4QTlCMzA0N0IsIDB4MDFDNTBB
M0YsIDB4MzlENDY1OTMsIDB4NzFFN0Q1NjcsIDB4NDlGNkJBQ0IsCi0JMHgyNEU3QkYxRSwgMHgx
Q0Y2RDBCMiwgMHg1NEM1NjA0NiwgMHg2Q0Q0MEZFQSwgMHhDNEEyMDFBRSwgMHhGQ0IzNkUwMiwg
MHhCNDgwREVGNiwgMHg4QzkxQjE1QSwKLQkweDc1MEE2MDBCLCAweDREMUIwRkE3LCAweDA1MjhC
RjUzLCAweDNEMzlEMEZGLCAweDk1NEZERUJCLCAweEFENUVCMTE3LCAweEU1NkQwMUUzLCAweERE
N0M2RTRGLAotCTB4QjA2RDZCOUEsIDB4ODg3QzA0MzYsIDB4QzA0RkI0QzIsIDB4Rjg1RURCNkUs
IDB4NTAyOEQ1MkEsIDB4NjgzOUJBODYsIDB4MjAwQTBBNzIsIDB4MTgxQjY1REUsCi0JMHhGQTI4
MDFEOCwgMHhDMjM5NkU3NCwgMHg4QTBBREU4MCwgMHhCMjFCQjEyQywgMHgxQTZEQkY2OCwgMHgy
MjdDRDBDNCwgMHg2QTRGNjAzMCwgMHg1MjVFMEY5QywKLQkweDNGNEYwQTQ5LCAweDA3NUU2NUU1
LCAweDRGNkRENTExLCAweDc3N0NCQUJELCAweERGMEFCNEY5LCAweEU3MUJEQjU1LCAweEFGMjg2
QkExLCAweDk3MzkwNDBELAotCTB4NTlGM0JGRjIsIDB4NjFFMkQwNUUsIDB4MjlEMTYwQUEsIDB4
MTFDMDBGMDYsIDB4QjlCNjAxNDIsIDB4ODFBNzZFRUUsIDB4Qzk5NERFMUEsIDB4RjE4NUIxQjYs
Ci0JMHg5Qzk0QjQ2MywgMHhBNDg1REJDRiwgMHhFQ0I2NkIzQiwgMHhENEE3MDQ5NywgMHg3Q0Qx
MEFEMywgMHg0NEMwNjU3RiwgMHgwQ0YzRDU4QiwgMHgzNEUyQkEyNywKLQkweEQ2RDFERTIxLCAw
eEVFQzBCMThELCAweEE2RjMwMTc5LCAweDlFRTI2RUQ1LCAweDM2OTQ2MDkxLCAweDBFODUwRjNE
LCAweDQ2QjZCRkM5LCAweDdFQTdEMDY1LAotCTB4MTNCNkQ1QjAsIDB4MkJBN0JBMUMsIDB4NjM5
NDBBRTgsIDB4NUI4NTY1NDQsIDB4RjNGMzZCMDAsIDB4Q0JFMjA0QUMsIDB4ODNEMUI0NTgsIDB4
QkJDMERCRjQsCi0JMHg0MjVCMEFBNSwgMHg3QTRBNjUwOSwgMHgzMjc5RDVGRCwgMHgwQTY4QkE1
MSwgMHhBMjFFQjQxNSwgMHg5QTBGREJCOSwgMHhEMjNDNkI0RCwgMHhFQTJEMDRFMSwKLQkweDg3
M0MwMTM0LCAweEJGMkQ2RTk4LCAweEY3MUVERTZDLCAweENGMEZCMUMwLCAweDY3NzlCRjg0LCAw
eDVGNjhEMDI4LCAweDE3NUI2MERDLCAweDJGNEEwRjcwLAotCTB4Q0Q3OTZCNzYsIDB4RjU2ODA0
REEsIDB4QkQ1QkI0MkUsIDB4ODU0QURCODIsIDB4MkQzQ0Q1QzYsIDB4MTUyREJBNkEsIDB4NUQx
RTBBOUUsIDB4NjUwRjY1MzIsCi0JMHgwODFFNjBFNywgMHgzMDBGMEY0QiwgMHg3ODNDQkZCRiwg
MHg0MDJERDAxMywgMHhFODVCREU1NywgMHhEMDRBQjFGQiwgMHg5ODc5MDEwRiwgMHhBMDY4NkVB
MwotfTsKLQotLyoKLSAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhf
bzY0Ci0gKi8KLQotCi0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUgd2Fz
IGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQotICogZm9sbG93aW5nIG1vZGVsIHBh
cmFtZXRlcnM6Ci0gKgotICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4u
LiAweDFFREM2RjQxCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4u
IDMyIGJpdHMKLSAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJV
RQotICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCi0g
KiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCi0gKiBT
bGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDggOAot
ICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAotICogRmlsZSBO
YW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYwotICovCi0K
LXN0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vNzJbMjU2XSA9Ci17Ci0J
MHgwMDAwMDAwMCwgMHhFRjMwNkIxOSwgMHhEQjhDQTBDMywgMHgzNEJDQ0JEQSwgMHhCMkY1Mzc3
NywgMHg1REM1NUM2RSwgMHg2OTc5OTdCNCwgMHg4NjQ5RkNBRCwKLQkweDYwMDYxODFGLCAweDhG
MzY3MzA2LCAweEJCOEFCOERDLCAweDU0QkFEM0M1LCAweEQyRjMyRjY4LCAweDNEQzM0NDcxLCAw
eDA5N0Y4RkFCLCAweEU2NEZFNEIyLAotCTB4QzAwQzMwM0UsIDB4MkYzQzVCMjcsIDB4MUI4MDkw
RkQsIDB4RjRCMEZCRTQsIDB4NzJGOTA3NDksIDB4OURDOTZDNTAsIDB4QTk3NUE3OEEsIDB4NDY0
NUNDOTMsCi0JMHhBMDBBMjgyMSwgMHg0RjNBNDMzOCwgMHg3Qjg2ODhFMiwgMHg5NEI2RTNGQiwg
MHgxMkZGMUY1NiwgMHhGRENGNzQ0RiwgMHhDOTczQkY5NSwgMHgyNjQzRDQ4QywKLQkweDg1RjQx
NjhELCAweDZBQzQ3RDk0LCAweDVFNzhCNjRFLCAweEIxNDhERDU3LCAweDM3MDEyMUZBLCAweEQ4
MzE0QUUzLCAweEVDOEQ4MTM5LCAweDAzQkRFQTIwLAotCTB4RTVGMjBFOTIsIDB4MEFDMjY1OEIs
IDB4M0U3RUFFNTEsIDB4RDE0RUM1NDgsIDB4NTcwNzM5RTUsIDB4QjgzNzUyRkMsIDB4OEM4Qjk5
MjYsIDB4NjNCQkYyM0YsCi0JMHg0NUY4MjZCMywgMHhBQUM4NERBQSwgMHg5RTc0ODY3MCwgMHg3
MTQ0RUQ2OSwgMHhGNzBEMTFDNCwgMHgxODNEN0FERCwgMHgyQzgxQjEwNywgMHhDM0IxREExRSwK
LQkweDI1RkUzRUFDLCAweENBQ0U1NUI1LCAweEZFNzI5RTZGLCAweDExNDJGNTc2LCAweDk3MEIw
OURCLCAweDc4M0I2MkMyLCAweDRDODdBOTE4LCAweEEzQjdDMjAxLAotCTB4MEUwNDVCRUIsIDB4
RTEzNDMwRjIsIDB4RDU4OEZCMjgsIDB4M0FCODkwMzEsIDB4QkNGMTZDOUMsIDB4NTNDMTA3ODUs
IDB4Njc3RENDNUYsIDB4ODg0REE3NDYsCi0JMHg2RTAyNDNGNCwgMHg4MTMyMjhFRCwgMHhCNThF
RTMzNywgMHg1QUJFODgyRSwgMHhEQ0Y3NzQ4MywgMHgzM0M3MUY5QSwgMHgwNzdCRDQ0MCwgMHhF
ODRCQkY1OSwKLQkweENFMDg2QkQ1LCAweDIxMzgwMENDLCAweDE1ODRDQjE2LCAweEZBQjRBMDBG
LCAweDdDRkQ1Q0EyLCAweDkzQ0QzN0JCLCAweEE3NzFGQzYxLCAweDQ4NDE5Nzc4LAotCTB4QUUw
RTczQ0EsIDB4NDEzRTE4RDMsIDB4NzU4MkQzMDksIDB4OUFCMkI4MTAsIDB4MUNGQjQ0QkQsIDB4
RjNDQjJGQTQsIDB4Qzc3N0U0N0UsIDB4Mjg0NzhGNjcsCi0JMHg4QkYwNEQ2NiwgMHg2NEMwMjY3
RiwgMHg1MDdDRURBNSwgMHhCRjRDODZCQywgMHgzOTA1N0ExMSwgMHhENjM1MTEwOCwgMHhFMjg5
REFEMiwgMHgwREI5QjFDQiwKLQkweEVCRjY1NTc5LCAweDA0QzYzRTYwLCAweDMwN0FGNUJBLCAw
eERGNEE5RUEzLCAweDU5MDM2MjBFLCAweEI2MzMwOTE3LCAweDgyOEZDMkNELCAweDZEQkZBOUQ0
LAotCTB4NEJGQzdENTgsIDB4QTRDQzE2NDEsIDB4OTA3MEREOUIsIDB4N0Y0MEI2ODIsIDB4Rjkw
OTRBMkYsIDB4MTYzOTIxMzYsIDB4MjI4NUVBRUMsIDB4Q0RCNTgxRjUsCi0JMHgyQkZBNjU0Nywg
MHhDNENBMEU1RSwgMHhGMDc2QzU4NCwgMHgxRjQ2QUU5RCwgMHg5OTBGNTIzMCwgMHg3NjNGMzky
OSwgMHg0MjgzRjJGMywgMHhBREIzOTlFQSwKLQkweDFDMDhCN0Q2LCAweEYzMzhEQ0NGLCAweEM3
ODQxNzE1LCAweDI4QjQ3QzBDLCAweEFFRkQ4MEExLCAweDQxQ0RFQkI4LCAweDc1NzEyMDYyLCAw
eDlBNDE0QjdCLAotCTB4N0MwRUFGQzksIDB4OTMzRUM0RDAsIDB4QTc4MjBGMEEsIDB4NDhCMjY0
MTMsIDB4Q0VGQjk4QkUsIDB4MjFDQkYzQTcsIDB4MTU3NzM4N0QsIDB4RkE0NzUzNjQsCi0JMHhE
QzA0ODdFOCwgMHgzMzM0RUNGMSwgMHgwNzg4MjcyQiwgMHhFOEI4NEMzMiwgMHg2RUYxQjA5Riwg
MHg4MUMxREI4NiwgMHhCNTdEMTA1QywgMHg1QTREN0I0NSwKLQkweEJDMDI5RkY3LCAweDUzMzJG
NEVFLCAweDY3OEUzRjM0LCAweDg4QkU1NDJELCAweDBFRjdBODgwLCAweEUxQzdDMzk5LCAweEQ1
N0IwODQzLCAweDNBNEI2MzVBLAotCTB4OTlGQ0ExNUIsIDB4NzZDQ0NBNDIsIDB4NDI3MDAxOTgs
IDB4QUQ0MDZBODEsIDB4MkIwOTk2MkMsIDB4QzQzOUZEMzUsIDB4RjA4NTM2RUYsIDB4MUZCNTVE
RjYsCi0JMHhGOUZBQjk0NCwgMHgxNkNBRDI1RCwgMHgyMjc2MTk4NywgMHhDRDQ2NzI5RSwgMHg0
QjBGOEUzMywgMHhBNDNGRTUyQSwgMHg5MDgzMkVGMCwgMHg3RkIzNDVFOSwKLQkweDU5RjA5MTY1
LCAweEI2QzBGQTdDLCAweDgyN0MzMUE2LCAweDZENEM1QUJGLCAweEVCMDVBNjEyLCAweDA0MzVD
RDBCLCAweDMwODkwNkQxLCAweERGQjk2REM4LAotCTB4MzlGNjg5N0EsIDB4RDZDNkUyNjMsIDB4
RTI3QTI5QjksIDB4MEQ0QTQyQTAsIDB4OEIwM0JFMEQsIDB4NjQzM0Q1MTQsIDB4NTA4RjFFQ0Us
IDB4QkZCRjc1RDcsCi0JMHgxMjBDRUMzRCwgMHhGRDNDODcyNCwgMHhDOTgwNENGRSwgMHgyNkIw
MjdFNywgMHhBMEY5REI0QSwgMHg0RkM5QjA1MywgMHg3Qjc1N0I4OSwgMHg5NDQ1MTA5MCwKLQkw
eDcyMEFGNDIyLCAweDlEM0E5RjNCLCAweEE5ODY1NEUxLCAweDQ2QjYzRkY4LCAweEMwRkZDMzU1
LCAweDJGQ0ZBODRDLCAweDFCNzM2Mzk2LCAweEY0NDMwODhGLAotCTB4RDIwMERDMDMsIDB4M0Qz
MEI3MUEsIDB4MDk4QzdDQzAsIDB4RTZCQzE3RDksIDB4NjBGNUVCNzQsIDB4OEZDNTgwNkQsIDB4
QkI3OTRCQjcsIDB4NTQ0OTIwQUUsCi0JMHhCMjA2QzQxQywgMHg1RDM2QUYwNSwgMHg2OThBNjRE
RiwgMHg4NkJBMEZDNiwgMHgwMEYzRjM2QiwgMHhFRkMzOTg3MiwgMHhEQjdGNTNBOCwgMHgzNDRG
MzhCMSwKLQkweDk3RjhGQUIwLCAweDc4Qzg5MUE5LCAweDRDNzQ1QTczLCAweEEzNDQzMTZBLCAw
eDI1MERDREM3LCAweENBM0RBNkRFLCAweEZFODE2RDA0LCAweDExQjEwNjFELAotCTB4RjdGRUUy
QUYsIDB4MThDRTg5QjYsIDB4MkM3MjQyNkMsIDB4QzM0MjI5NzUsIDB4NDUwQkQ1RDgsIDB4QUEz
QkJFQzEsIDB4OUU4Nzc1MUIsIDB4NzFCNzFFMDIsCi0JMHg1N0Y0Q0E4RSwgMHhCOEM0QTE5Nywg
MHg4Qzc4NkE0RCwgMHg2MzQ4MDE1NCwgMHhFNTAxRkRGOSwgMHgwQTMxOTZFMCwgMHgzRThENUQz
QSwgMHhEMUJEMzYyMywKLQkweDM3RjJEMjkxLCAweEQ4QzJCOTg4LCAweEVDN0U3MjUyLCAweDAz
NEUxOTRCLCAweDg1MDdFNUU2LCAweDZBMzc4RUZGLCAweDVFOEI0NTI1LCAweEIxQkIyRTNDCi19
OwotCi0vKgotICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNzIK
LSAqLwotCi0KLQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2Vu
ZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCi0gKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1l
dGVyczoKLSAqCi0gKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4
MUVEQzZGNDEKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIg
Yml0cwotICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCi0g
KiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4uIDMyIGJpdHMKLSAqIE51
bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBzbGljZXMKLSAqIFNsaWNl
IExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDggOCA4IDggOCA4Ci0gKiBE
aXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5cCi0gKiBGaWxlIE5hbWUg
PSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxlcy5jCi0gKi8KLQotc3Rh
dGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X284MFsyNTZdID0KLXsKLQkweDAw
MDAwMDAwLCAweDY4MDMyQ0M4LCAweEQwMDY1OTkwLCAweEI4MDU3NTU4LCAweEE1RTBDNUQxLCAw
eENERTNFOTE5LCAweDc1RTY5QzQxLCAweDFERTVCMDg5LAotCTB4NEUyREZENTMsIDB4MjYyRUQx
OUIsIDB4OUUyQkE0QzMsIDB4RjYyODg4MEIsIDB4RUJDRDM4ODIsIDB4ODNDRTE0NEEsIDB4M0JD
QjYxMTIsIDB4NTNDODREREEsCi0JMHg5QzVCRkFBNiwgMHhGNDU4RDY2RSwgMHg0QzVEQTMzNiwg
MHgyNDVFOEZGRSwgMHgzOUJCM0Y3NywgMHg1MUI4MTNCRiwgMHhFOUJENjZFNywgMHg4MUJFNEEy
RiwKLQkweEQyNzYwN0Y1LCAweEJBNzUyQjNELCAweDAyNzA1RTY1LCAweDZBNzM3MkFELCAweDc3
OTZDMjI0LCAweDFGOTVFRUVDLCAweEE3OTA5QkI0LCAweENGOTNCNzdDLAotCTB4M0Q1QjgzQkQs
IDB4NTU1OEFGNzUsIDB4RUQ1RERBMkQsIDB4ODU1RUY2RTUsIDB4OThCQjQ2NkMsIDB4RjBCODZB
QTQsIDB4NDhCRDFGRkMsIDB4MjBCRTMzMzQsCi0JMHg3Mzc2N0VFRSwgMHgxQjc1NTIyNiwgMHhB
MzcwMjc3RSwgMHhDQjczMEJCNiwgMHhENjk2QkIzRiwgMHhCRTk1OTdGNywgMHgwNjkwRTJBRiwg
MHg2RTkzQ0U2NywKLQkweEExMDA3OTFCLCAweEM5MDM1NUQzLCAweDcxMDYyMDhCLCAweDE5MDUw
QzQzLCAweDA0RTBCQ0NBLCAweDZDRTM5MDAyLCAweEQ0RTZFNTVBLCAweEJDRTVDOTkyLAotCTB4
RUYyRDg0NDgsIDB4ODcyRUE4ODAsIDB4M0YyQkRERDgsIDB4NTcyOEYxMTAsIDB4NEFDRDQxOTks
IDB4MjJDRTZENTEsIDB4OUFDQjE4MDksIDB4RjJDODM0QzEsCi0JMHg3QUI3MDc3QSwgMHgxMkI0
MkJCMiwgMHhBQUIxNUVFQSwgMHhDMkIyNzIyMiwgMHhERjU3QzJBQiwgMHhCNzU0RUU2MywgMHgw
RjUxOUIzQiwgMHg2NzUyQjdGMywKLQkweDM0OUFGQTI5LCAweDVDOTlENkUxLCAweEU0OUNBM0I5
LCAweDhDOUY4RjcxLCAweDkxN0EzRkY4LCAweEY5NzkxMzMwLCAweDQxN0M2NjY4LCAweDI5N0Y0
QUEwLAotCTB4RTZFQ0ZEREMsIDB4OEVFRkQxMTQsIDB4MzZFQUE0NEMsIDB4NUVFOTg4ODQsIDB4
NDMwQzM4MEQsIDB4MkIwRjE0QzUsIDB4OTMwQTYxOUQsIDB4RkIwOTRENTUsCi0JMHhBOEMxMDA4
RiwgMHhDMEMyMkM0NywgMHg3OEM3NTkxRiwgMHgxMEM0NzVENywgMHgwRDIxQzU1RSwgMHg2NTIy
RTk5NiwgMHhERDI3OUNDRSwgMHhCNTI0QjAwNiwKLQkweDQ3RUM4NEM3LCAweDJGRUZBODBGLCAw
eDk3RUFERDU3LCAweEZGRTlGMTlGLCAweEUyMEM0MTE2LCAweDhBMEY2RERFLCAweDMyMEExODg2
LCAweDVBMDkzNDRFLAotCTB4MDlDMTc5OTQsIDB4NjFDMjU1NUMsIDB4RDlDNzIwMDQsIDB4QjFD
NDBDQ0MsIDB4QUMyMUJDNDUsIDB4QzQyMjkwOEQsIDB4N0MyN0U1RDUsIDB4MTQyNEM5MUQsCi0J
MHhEQkI3N0U2MSwgMHhCM0I0NTJBOSwgMHgwQkIxMjdGMSwgMHg2M0IyMEIzOSwgMHg3RTU3QkJC
MCwgMHgxNjU0OTc3OCwgMHhBRTUxRTIyMCwgMHhDNjUyQ0VFOCwKLQkweDk1OUE4MzMyLCAweEZE
OTlBRkZBLCAweDQ1OUNEQUEyLCAweDJEOUZGNjZBLCAweDMwN0E0NkUzLCAweDU4Nzk2QTJCLCAw
eEUwN0MxRjczLCAweDg4N0YzM0JCLAotCTB4RjU2RTBFRjQsIDB4OUQ2RDIyM0MsIDB4MjU2ODU3
NjQsIDB4NEQ2QjdCQUMsIDB4NTA4RUNCMjUsIDB4Mzg4REU3RUQsIDB4ODA4ODkyQjUsIDB4RTg4
QkJFN0QsCi0JMHhCQjQzRjNBNywgMHhEMzQwREY2RiwgMHg2QjQ1QUEzNywgMHgwMzQ2ODZGRiwg
MHgxRUEzMzY3NiwgMHg3NkEwMUFCRSwgMHhDRUE1NkZFNiwgMHhBNkE2NDMyRSwKLQkweDY5MzVG
NDUyLCAweDAxMzZEODlBLCAweEI5MzNBREMyLCAweEQxMzA4MTBBLCAweENDRDUzMTgzLCAweEE0
RDYxRDRCLCAweDFDRDM2ODEzLCAweDc0RDA0NERCLAotCTB4MjcxODA5MDEsIDB4NEYxQjI1Qzks
IDB4RjcxRTUwOTEsIDB4OUYxRDdDNTksIDB4ODJGOENDRDAsIDB4RUFGQkUwMTgsIDB4NTJGRTk1
NDAsIDB4M0FGREI5ODgsCi0JMHhDODM1OEQ0OSwgMHhBMDM2QTE4MSwgMHgxODMzRDREOSwgMHg3
MDMwRjgxMSwgMHg2REQ1NDg5OCwgMHgwNUQ2NjQ1MCwgMHhCREQzMTEwOCwgMHhENUQwM0RDMCwK
LQkweDg2MTg3MDFBLCAweEVFMUI1Q0QyLCAweDU2MUUyOThBLCAweDNFMUQwNTQyLCAweDIzRjhC
NUNCLCAweDRCRkI5OTAzLCAweEYzRkVFQzVCLCAweDlCRkRDMDkzLAotCTB4NTQ2RTc3RUYsIDB4
M0M2RDVCMjcsIDB4ODQ2ODJFN0YsIDB4RUM2QjAyQjcsIDB4RjE4RUIyM0UsIDB4OTk4RDlFRjYs
IDB4MjE4OEVCQUUsIDB4NDk4QkM3NjYsCi0JMHgxQTQzOEFCQywgMHg3MjQwQTY3NCwgMHhDQTQ1
RDMyQywgMHhBMjQ2RkZFNCwgMHhCRkEzNEY2RCwgMHhEN0EwNjNBNSwgMHg2RkE1MTZGRCwgMHgw
N0E2M0EzNSwKLQkweDhGRDkwOThFLCAweEU3REEyNTQ2LCAweDVGREY1MDFFLCAweDM3REM3Q0Q2
LCAweDJBMzlDQzVGLCAweDQyM0FFMDk3LCAweEZBM0Y5NUNGLCAweDkyM0NCOTA3LAotCTB4QzFG
NEY0REQsIDB4QTlGN0Q4MTUsIDB4MTFGMkFENEQsIDB4NzlGMTgxODUsIDB4NjQxNDMxMEMsIDB4
MEMxNzFEQzQsIDB4QjQxMjY4OUMsIDB4REMxMTQ0NTQsCi0JMHgxMzgyRjMyOCwgMHg3QjgxREZF
MCwgMHhDMzg0QUFCOCwgMHhBQjg3ODY3MCwgMHhCNjYyMzZGOSwgMHhERTYxMUEzMSwgMHg2NjY0
NkY2OSwgMHgwRTY3NDNBMSwKLQkweDVEQUYwRTdCLCAweDM1QUMyMkIzLCAweDhEQTk1N0VCLCAw
eEU1QUE3QjIzLCAweEY4NEZDQkFBLCAweDkwNENFNzYyLCAweDI4NDk5MjNBLCAweDQwNEFCRUYy
LAotCTB4QjI4MjhBMzMsIDB4REE4MUE2RkIsIDB4NjI4NEQzQTMsIDB4MEE4N0ZGNkIsIDB4MTc2
MjRGRTIsIDB4N0Y2MTYzMkEsIDB4Qzc2NDE2NzIsIDB4QUY2NzNBQkEsCi0JMHhGQ0FGNzc2MCwg
MHg5NEFDNUJBOCwgMHgyQ0E5MkVGMCwgMHg0NEFBMDIzOCwgMHg1OTRGQjJCMSwgMHgzMTRDOUU3
OSwgMHg4OTQ5RUIyMSwgMHhFMTRBQzdFOSwKLQkweDJFRDk3MDk1LCAweDQ2REE1QzVELCAweEZF
REYyOTA1LCAweDk2REMwNUNELCAweDhCMzlCNTQ0LCAweEUzM0E5OThDLCAweDVCM0ZFQ0Q0LCAw
eDMzM0NDMDFDLAotCTB4NjBGNDhEQzYsIDB4MDhGN0ExMEUsIDB4QjBGMkQ0NTYsIDB4RDhGMUY4
OUUsIDB4QzUxNDQ4MTcsIDB4QUQxNzY0REYsIDB4MTUxMjExODcsIDB4N0QxMTNENEYKLX07Ci0K
LS8qCi0gKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3RhYmxlaWw4X284MAotICov
Ci0KLQotCi0vKgotICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0
ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKLSAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJz
OgotICoKLSAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURD
NkY0MQotICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRz
Ci0gKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKLSAqIFRh
YmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cwotICogTnVtYmVy
IG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcwotICogU2xpY2UgTGVu
Z3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKLSAqIERpcmVj
dG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKLSAqIEZpbGUgTmFtZSA9IC4u
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMKLSAqLwotCi1zdGF0aWMg
Y29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzg4WzI1Nl0gPQotewotCTB4MDAwMDAw
MDAsIDB4NDkzQzdEMjcsIDB4OTI3OEZBNEUsIDB4REI0NDg3NjksIDB4MjExRDgyNkQsIDB4Njgy
MUZGNEEsIDB4QjM2NTc4MjMsIDB4RkE1OTA1MDQsCi0JMHg0MjNCMDREQSwgMHgwQjA3NzlGRCwg
MHhEMDQzRkU5NCwgMHg5OTdGODNCMywgMHg2MzI2ODZCNywgMHgyQTFBRkI5MCwgMHhGMTVFN0NG
OSwgMHhCODYyMDFERSwKLQkweDg0NzYwOUI0LCAweENENEE3NDkzLCAweDE2MEVGM0ZBLCAweDVG
MzI4RURELCAweEE1NkI4QkQ5LCAweEVDNTdGNkZFLCAweDM3MTM3MTk3LCAweDdFMkYwQ0IwLAot
CTB4QzY0RDBENkUsIDB4OEY3MTcwNDksIDB4NTQzNUY3MjAsIDB4MUQwOThBMDcsIDB4RTc1MDhG
MDMsIDB4QUU2Q0YyMjQsIDB4NzUyODc1NEQsIDB4M0MxNDA4NkEsCi0JMHgwRDAwNjU5OSwgMHg0
NDNDMThCRSwgMHg5Rjc4OUZENywgMHhENjQ0RTJGMCwgMHgyQzFERTdGNCwgMHg2NTIxOUFEMywg
MHhCRTY1MURCQSwgMHhGNzU5NjA5RCwKLQkweDRGM0I2MTQzLCAweDA2MDcxQzY0LCAweERENDM5
QjBELCAweDk0N0ZFNjJBLCAweDZFMjZFMzJFLCAweDI3MUE5RTA5LCAweEZDNUUxOTYwLCAweEI1
NjI2NDQ3LAotCTB4ODk3NjZDMkQsIDB4QzA0QTExMEEsIDB4MUIwRTk2NjMsIDB4NTIzMkVCNDQs
IDB4QTg2QkVFNDAsIDB4RTE1NzkzNjcsIDB4M0ExMzE0MEUsIDB4NzMyRjY5MjksCi0JMHhDQjRE
NjhGNywgMHg4MjcxMTVEMCwgMHg1OTM1OTJCOSwgMHgxMDA5RUY5RSwgMHhFQTUwRUE5QSwgMHhB
MzZDOTdCRCwgMHg3ODI4MTBENCwgMHgzMTE0NkRGMywKLQkweDFBMDBDQjMyLCAweDUzM0NCNjE1
LCAweDg4NzgzMTdDLCAweEMxNDQ0QzVCLCAweDNCMUQ0OTVGLCAweDcyMjEzNDc4LCAweEE5NjVC
MzExLCAweEUwNTlDRTM2LAotCTB4NTgzQkNGRTgsIDB4MTEwN0IyQ0YsIDB4Q0E0MzM1QTYsIDB4
ODM3RjQ4ODEsIDB4NzkyNjREODUsIDB4MzAxQTMwQTIsIDB4RUI1RUI3Q0IsIDB4QTI2MkNBRUMs
Ci0JMHg5RTc2QzI4NiwgMHhENzRBQkZBMSwgMHgwQzBFMzhDOCwgMHg0NTMyNDVFRiwgMHhCRjZC
NDBFQiwgMHhGNjU3M0RDQywgMHgyRDEzQkFBNSwgMHg2NDJGQzc4MiwKLQkweERDNERDNjVDLCAw
eDk1NzFCQjdCLCAweDRFMzUzQzEyLCAweDA3MDk0MTM1LCAweEZENTA0NDMxLCAweEI0NkMzOTE2
LCAweDZGMjhCRTdGLCAweDI2MTRDMzU4LAotCTB4MTcwMEFFQUIsIDB4NUUzQ0QzOEMsIDB4ODU3
ODU0RTUsIDB4Q0M0NDI5QzIsIDB4MzYxRDJDQzYsIDB4N0YyMTUxRTEsIDB4QTQ2NUQ2ODgsIDB4
RUQ1OUFCQUYsCi0JMHg1NTNCQUE3MSwgMHgxQzA3RDc1NiwgMHhDNzQzNTAzRiwgMHg4RTdGMkQx
OCwgMHg3NDI2MjgxQywgMHgzRDFBNTUzQiwgMHhFNjVFRDI1MiwgMHhBRjYyQUY3NSwKLQkweDkz
NzZBNzFGLCAweERBNEFEQTM4LCAweDAxMEU1RDUxLCAweDQ4MzIyMDc2LCAweEIyNkIyNTcyLCAw
eEZCNTc1ODU1LCAweDIwMTNERjNDLCAweDY5MkZBMjFCLAotCTB4RDE0REEzQzUsIDB4OTg3MURF
RTIsIDB4NDMzNTU5OEIsIDB4MEEwOTI0QUMsIDB4RjA1MDIxQTgsIDB4Qjk2QzVDOEYsIDB4NjIy
OERCRTYsIDB4MkIxNEE2QzEsCi0JMHgzNDAxOTY2NCwgMHg3RDNERUI0MywgMHhBNjc5NkMyQSwg
MHhFRjQ1MTEwRCwgMHgxNTFDMTQwOSwgMHg1QzIwNjkyRSwgMHg4NzY0RUU0NywgMHhDRTU4OTM2
MCwKLQkweDc2M0E5MkJFLCAweDNGMDZFRjk5LCAweEU0NDI2OEYwLCAweEFEN0UxNUQ3LCAweDU3
MjcxMEQzLCAweDFFMUI2REY0LCAweEM1NUZFQTlELCAweDhDNjM5N0JBLAotCTB4QjA3NzlGRDAs
IDB4Rjk0QkUyRjcsIDB4MjIwRjY1OUUsIDB4NkIzMzE4QjksIDB4OTE2QTFEQkQsIDB4RDg1NjYw
OUEsIDB4MDMxMkU3RjMsIDB4NEEyRTlBRDQsCi0JMHhGMjRDOUIwQSwgMHhCQjcwRTYyRCwgMHg2
MDM0NjE0NCwgMHgyOTA4MUM2MywgMHhEMzUxMTk2NywgMHg5QTZENjQ0MCwgMHg0MTI5RTMyOSwg
MHgwODE1OUUwRSwKLQkweDM5MDFGM0ZELCAweDcwM0Q4RURBLCAweEFCNzkwOUIzLCAweEUyNDU3
NDk0LCAweDE4MUM3MTkwLCAweDUxMjAwQ0I3LCAweDhBNjQ4QkRFLCAweEMzNThGNkY5LAotCTB4
N0IzQUY3MjcsIDB4MzIwNjhBMDAsIDB4RTk0MjBENjksIDB4QTA3RTcwNEUsIDB4NUEyNzc1NEEs
IDB4MTMxQjA4NkQsIDB4Qzg1RjhGMDQsIDB4ODE2M0YyMjMsCi0JMHhCRDc3RkE0OSwgMHhGNDRC
ODc2RSwgMHgyRjBGMDAwNywgMHg2NjMzN0QyMCwgMHg5QzZBNzgyNCwgMHhENTU2MDUwMywgMHgw
RTEyODI2QSwgMHg0NzJFRkY0RCwKLQkweEZGNENGRTkzLCAweEI2NzA4M0I0LCAweDZEMzQwNERE
LCAweDI0MDg3OUZBLCAweERFNTE3Q0ZFLCAweDk3NkQwMUQ5LCAweDRDMjk4NkIwLCAweDA1MTVG
Qjk3LAotCTB4MkUwMTVENTYsIDB4NjczRDIwNzEsIDB4QkM3OUE3MTgsIDB4RjU0NURBM0YsIDB4
MEYxQ0RGM0IsIDB4NDYyMEEyMUMsIDB4OUQ2NDI1NzUsIDB4RDQ1ODU4NTIsCi0JMHg2QzNBNTk4
QywgMHgyNTA2MjRBQiwgMHhGRTQyQTNDMiwgMHhCNzdFREVFNSwgMHg0RDI3REJFMSwgMHgwNDFC
QTZDNiwgMHhERjVGMjFBRiwgMHg5NjYzNUM4OCwKLQkweEFBNzc1NEUyLCAweEUzNEIyOUM1LCAw
eDM4MEZBRUFDLCAweDcxMzNEMzhCLCAweDhCNkFENjhGLCAweEMyNTZBQkE4LCAweDE5MTIyQ0Mx
LCAweDUwMkU1MUU2LAotCTB4RTg0QzUwMzgsIDB4QTE3MDJEMUYsIDB4N0EzNEFBNzYsIDB4MzMw
OEQ3NTEsIDB4Qzk1MUQyNTUsIDB4ODA2REFGNzIsIDB4NUIyOTI4MUIsIDB4MTIxNTU1M0MsCi0J
MHgyMzAxMzhDRiwgMHg2QTNENDVFOCwgMHhCMTc5QzI4MSwgMHhGODQ1QkZBNiwgMHgwMjFDQkFB
MiwgMHg0QjIwQzc4NSwgMHg5MDY0NDBFQywgMHhEOTU4M0RDQiwKLQkweDYxM0EzQzE1LCAweDI4
MDY0MTMyLCAweEYzNDJDNjVCLCAweEJBN0VCQjdDLCAweDQwMjdCRTc4LCAweDA5MUJDMzVGLCAw
eEQyNUY0NDM2LCAweDlCNjMzOTExLAotCTB4QTc3NzMxN0IsIDB4RUU0QjRDNUMsIDB4MzUwRkNC
MzUsIDB4N0MzM0I2MTIsIDB4ODY2QUIzMTYsIDB4Q0Y1NkNFMzEsIDB4MTQxMjQ5NTgsIDB4NUQy
RTM0N0YsCi0JMHhFNTRDMzVBMSwgMHhBQzcwNDg4NiwgMHg3NzM0Q0ZFRiwgMHgzRTA4QjJDOCwg
MHhDNDUxQjdDQywgMHg4RDZEQ0FFQiwgMHg1NjI5NEQ4MiwgMHgxRjE1MzBBNQotfTsKLQotLyoK
LSAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzg4Ci0gKi8KLQot
Ci1zdGF0aWMgdWludDMyX3QKLXNjdHBfY3JjMzJjX3NiOF82NF9iaXQodWludDMyX3QgY3JjLAot
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpwX2J1ZiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgdWludDMyX3QgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCBpbml0X2J5dGVzKQotewotCXVpbnQzMl90IGxpOwotCXVpbnQzMl90IHRlcm0x
LCB0ZXJtMjsKLQl1aW50MzJfdCBydW5uaW5nX2xlbmd0aDsKLQl1aW50MzJfdCBlbmRfYnl0ZXM7
Ci0KLQlydW5uaW5nX2xlbmd0aCA9ICgobGVuZ3RoIC0gaW5pdF9ieXRlcykgLyA4KSAqIDg7Ci0J
ZW5kX2J5dGVzID0gbGVuZ3RoIC0gaW5pdF9ieXRlcyAtIHJ1bm5pbmdfbGVuZ3RoOwotCi0JZm9y
IChsaSA9IDA7IGxpIDwgaW5pdF9ieXRlczsgbGkrKykKLQkJY3JjID0gc2N0cF9jcmNfdGFibGVp
bDhfbzMyWyhjcmMgXiAqcF9idWYrKykgJiAweDAwMDAwMEZGXSBeCi0JCSAgICAoY3JjID4+IDgp
OwotCWZvciAobGkgPSAwOyBsaSA8IHJ1bm5pbmdfbGVuZ3RoIC8gODsgbGkrKykgewotI2lmIEJZ
VEVfT1JERVIgPT0gQklHX0VORElBTgotCQljcmMgXj0gKnBfYnVmKys7Ci0JCWNyYyBePSAoKnBf
YnVmKyspIDw8IDg7Ci0JCWNyYyBePSAoKnBfYnVmKyspIDw8IDE2OwotCQljcmMgXj0gKCpwX2J1
ZisrKSA8PCAyNDsKLSNlbHNlCi0JCWNyYyBePSAqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmOwot
CQlwX2J1ZiArPSA0OwotI2VuZGlmCi0JCXRlcm0xID0gc2N0cF9jcmNfdGFibGVpbDhfbzg4W2Ny
YyAmIDB4MDAwMDAwRkZdIF4KLQkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X284MFsoY3JjID4+IDgp
ICYgMHgwMDAwMDBGRl07Ci0JCXRlcm0yID0gY3JjID4+IDE2OwotCQljcmMgPSB0ZXJtMSBeCi0J
CSAgICBzY3RwX2NyY190YWJsZWlsOF9vNzJbdGVybTIgJiAweDAwMDAwMEZGXSBeCi0JCSAgICBz
Y3RwX2NyY190YWJsZWlsOF9vNjRbKHRlcm0yID4+IDgpICYgMHgwMDAwMDBGRl07Ci0KLSNpZiBC
WVRFX09SREVSID09IEJJR19FTkRJQU4KLQkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4X281Nlsq
cF9idWYrK107Ci0JCWNyYyBePSBzY3RwX2NyY190YWJsZWlsOF9vNDhbKnBfYnVmKytdOwotCQlj
cmMgXj0gc2N0cF9jcmNfdGFibGVpbDhfbzQwWypwX2J1ZisrXTsKLQkJY3JjIF49IHNjdHBfY3Jj
X3RhYmxlaWw4X28zMlsqcF9idWYrK107Ci0jZWxzZQotCQl0ZXJtMSA9IHNjdHBfY3JjX3RhYmxl
aWw4X281NlsoKihjb25zdCB1aW50MzJfdCAqKSBwX2J1ZikgJiAweDAwMDAwMEZGXSBeCi0JCSAg
ICBzY3RwX2NyY190YWJsZWlsOF9vNDhbKCgqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmKSA+PiA4
KSAmIDB4MDAwMDAwRkZdOwotCi0JCXRlcm0yID0gKCooY29uc3QgdWludDMyX3QgKikgcF9idWYp
ID4+IDE2OwotCQljcmMgPSBjcmMgXgotCQkgICAgdGVybTEgXgotCQkgICAgc2N0cF9jcmNfdGFi
bGVpbDhfbzQwW3Rlcm0yICYgMHgwMDAwMDBGRl0gXgotCQkgICAgc2N0cF9jcmNfdGFibGVpbDhf
bzMyWyh0ZXJtMiA+PiA4KSAmIDB4MDAwMDAwRkZdOwotCQlwX2J1ZiArPSA0OwotI2VuZGlmCi0J
fQotCWZvciAobGkgPSAwOyBsaSA8IGVuZF9ieXRlczsgbGkrKykKLQkJY3JjID0gc2N0cF9jcmNf
dGFibGVpbDhfbzMyWyhjcmMgXiAqcF9idWYrKykgJiAweDAwMDAwMEZGXSBeCi0JCSAgICAoY3Jj
ID4+IDgpOwotCXJldHVybiAoY3JjKTsKLX0KLQotCi0vKioKLSAqCi0gKiBSb3V0aW5lIERlc2Ny
aXB0aW9uOgotICoKLSAqIHdhcm1zIHRoZSB0YWJsZXMKLSAqCi0gKiBBcmd1bWVudHM6Ci0gKgot
ICoJCW5vbmUKLSAqCi0gKiBSZXR1cm4gdmFsdWU6Ci0gKgotICoJCW5vbmUKLSAqLwotc3RhdGlj
IHVpbnQzMl90Ci1tdWx0aXRhYmxlX2NyYzMyYyh1aW50MzJfdCBjcmMzMmMsCi0gICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBpbnQgbGVuZ3RoKQotewotCXVpbnQzMl90IHRvX2V2ZW5fd29yZDsKLQotCWlmIChs
ZW5ndGggPT0gMCkgewotCQlyZXR1cm4gKGNyYzMyYyk7Ci0JfQotCXRvX2V2ZW5fd29yZCA9ICg0
IC0gKCgodWludHB0cl90KSBidWZmZXIpICYgMHgzKSk7Ci0JcmV0dXJuIChzY3RwX2NyYzMyY19z
YjhfNjRfYml0KGNyYzMyYywgYnVmZmVyLCBsZW5ndGgsIHRvX2V2ZW5fd29yZCkpOwotfQotCi1z
dGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfY1syNTZdID0gewotCTB4MDAwMDAwMDAsIDB4
RjI2QjgzMDMsIDB4RTEzQjcwRjcsIDB4MTM1MEYzRjQsCi0JMHhDNzlBOTcxRiwgMHgzNUYxMTQx
QywgMHgyNkExRTdFOCwgMHhENENBNjRFQiwKLQkweDhBRDk1OENGLCAweDc4QjJEQkNDLCAweDZC
RTIyODM4LCAweDk5ODlBQjNCLAotCTB4NEQ0M0NGRDAsIDB4QkYyODRDRDMsIDB4QUM3OEJGMjcs
IDB4NUUxMzNDMjQsCi0JMHgxMDVFQzc2RiwgMHhFMjM1NDQ2QywgMHhGMTY1Qjc5OCwgMHgwMzBF
MzQ5QiwKLQkweEQ3QzQ1MDcwLCAweDI1QUZEMzczLCAweDM2RkYyMDg3LCAweEM0OTRBMzg0LAot
CTB4OUE4NzlGQTAsIDB4NjhFQzFDQTMsIDB4N0JCQ0VGNTcsIDB4ODlENzZDNTQsCi0JMHg1RDFE
MDhCRiwgMHhBRjc2OEJCQywgMHhCQzI2Nzg0OCwgMHg0RTRERkI0QiwKLQkweDIwQkQ4RURFLCAw
eEQyRDYwRERELCAweEMxODZGRTI5LCAweDMzRUQ3RDJBLAotCTB4RTcyNzE5QzEsIDB4MTU0QzlB
QzIsIDB4MDYxQzY5MzYsIDB4RjQ3N0VBMzUsCi0JMHhBQTY0RDYxMSwgMHg1ODBGNTUxMiwgMHg0
QjVGQTZFNiwgMHhCOTM0MjVFNSwKLQkweDZERkU0MTBFLCAweDlGOTVDMjBELCAweDhDQzUzMUY5
LCAweDdFQUVCMkZBLAotCTB4MzBFMzQ5QjEsIDB4QzI4OENBQjIsIDB4RDFEODM5NDYsIDB4MjNC
M0JBNDUsCi0JMHhGNzc5REVBRSwgMHgwNTEyNURBRCwgMHgxNjQyQUU1OSwgMHhFNDI5MkQ1QSwK
LQkweEJBM0ExMTdFLCAweDQ4NTE5MjdELCAweDVCMDE2MTg5LCAweEE5NkFFMjhBLAotCTB4N0RB
MDg2NjEsIDB4OEZDQjA1NjIsIDB4OUM5QkY2OTYsIDB4NkVGMDc1OTUsCi0JMHg0MTdCMURCQywg
MHhCMzEwOUVCRiwgMHhBMDQwNkQ0QiwgMHg1MjJCRUU0OCwKLQkweDg2RTE4QUEzLCAweDc0OEEw
OUEwLCAweDY3REFGQTU0LCAweDk1QjE3OTU3LAotCTB4Q0JBMjQ1NzMsIDB4MzlDOUM2NzAsIDB4
MkE5OTM1ODQsIDB4RDhGMkI2ODcsCi0JMHgwQzM4RDI2QywgMHhGRTUzNTE2RiwgMHhFRDAzQTI5
QiwgMHgxRjY4MjE5OCwKLQkweDUxMjVEQUQzLCAweEEzNEU1OUQwLCAweEIwMUVBQTI0LCAweDQy
NzUyOTI3LAotCTB4OTZCRjREQ0MsIDB4NjRENENFQ0YsIDB4Nzc4NDNEM0IsIDB4ODVFRkJFMzgs
Ci0JMHhEQkZDODIxQywgMHgyOTk3MDExRiwgMHgzQUM3RjJFQiwgMHhDOEFDNzFFOCwKLQkweDFD
NjYxNTAzLCAweEVFMEQ5NjAwLCAweEZENUQ2NUY0LCAweDBGMzZFNkY3LAotCTB4NjFDNjkzNjIs
IDB4OTNBRDEwNjEsIDB4ODBGREUzOTUsIDB4NzI5NjYwOTYsCi0JMHhBNjVDMDQ3RCwgMHg1NDM3
ODc3RSwgMHg0NzY3NzQ4QSwgMHhCNTBDRjc4OSwKLQkweEVCMUZDQkFELCAweDE5NzQ0OEFFLCAw
eDBBMjRCQjVBLCAweEY4NEYzODU5LAotCTB4MkM4NTVDQjIsIDB4REVFRURGQjEsIDB4Q0RCRTJD
NDUsIDB4M0ZENUFGNDYsCi0JMHg3MTk4NTQwRCwgMHg4M0YzRDcwRSwgMHg5MEEzMjRGQSwgMHg2
MkM4QTdGOSwKLQkweEI2MDJDMzEyLCAweDQ0Njk0MDExLCAweDU3MzlCM0U1LCAweEE1NTIzMEU2
LAotCTB4RkI0MTBDQzIsIDB4MDkyQThGQzEsIDB4MUE3QTdDMzUsIDB4RTgxMUZGMzYsCi0JMHgz
Q0RCOUJERCwgMHhDRUIwMThERSwgMHhEREUwRUIyQSwgMHgyRjhCNjgyOSwKLQkweDgyRjYzQjc4
LCAweDcwOURCODdCLCAweDYzQ0Q0QjhGLCAweDkxQTZDODhDLAotCTB4NDU2Q0FDNjcsIDB4Qjcw
NzJGNjQsIDB4QTQ1N0RDOTAsIDB4NTYzQzVGOTMsCi0JMHgwODJGNjNCNywgMHhGQTQ0RTBCNCwg
MHhFOTE0MTM0MCwgMHgxQjdGOTA0MywKLQkweENGQjVGNEE4LCAweDNEREU3N0FCLCAweDJFOEU4
NDVGLCAweERDRTUwNzVDLAotCTB4OTJBOEZDMTcsIDB4NjBDMzdGMTQsIDB4NzM5MzhDRTAsIDB4
ODFGODBGRTMsCi0JMHg1NTMyNkIwOCwgMHhBNzU5RTgwQiwgMHhCNDA5MUJGRiwgMHg0NjYyOThG
QywKLQkweDE4NzFBNEQ4LCAweEVBMUEyN0RCLCAweEY5NEFENDJGLCAweDBCMjE1NzJDLAotCTB4
REZFQjMzQzcsIDB4MkQ4MEIwQzQsIDB4M0VEMDQzMzAsIDB4Q0NCQkMwMzMsCi0JMHhBMjRCQjVB
NiwgMHg1MDIwMzZBNSwgMHg0MzcwQzU1MSwgMHhCMTFCNDY1MiwKLQkweDY1RDEyMkI5LCAweDk3
QkFBMUJBLCAweDg0RUE1MjRFLCAweDc2ODFEMTRELAotCTB4Mjg5MkVENjksIDB4REFGOTZFNkEs
IDB4QzlBOTlEOUUsIDB4M0JDMjFFOUQsCi0JMHhFRjA4N0E3NiwgMHgxRDYzRjk3NSwgMHgwRTMz
MEE4MSwgMHhGQzU4ODk4MiwKLQkweEIyMTU3MkM5LCAweDQwN0VGMUNBLCAweDUzMkUwMjNFLCAw
eEExNDU4MTNELAotCTB4NzU4RkU1RDYsIDB4ODdFNDY2RDUsIDB4OTRCNDk1MjEsIDB4NjZERjE2
MjIsCi0JMHgzOENDMkEwNiwgMHhDQUE3QTkwNSwgMHhEOUY3NUFGMSwgMHgyQjlDRDlGMiwKLQkw
eEZGNTZCRDE5LCAweDBEM0QzRTFBLCAweDFFNkRDREVFLCAweEVDMDY0RUVELAotCTB4QzM4RDI2
QzQsIDB4MzFFNkE1QzcsIDB4MjJCNjU2MzMsIDB4RDBEREQ1MzAsCi0JMHgwNDE3QjFEQiwgMHhG
NjdDMzJEOCwgMHhFNTJDQzEyQywgMHgxNzQ3NDIyRiwKLQkweDQ5NTQ3RTBCLCAweEJCM0ZGRDA4
LCAweEE4NkYwRUZDLCAweDVBMDQ4REZGLAotCTB4OEVDRUU5MTQsIDB4N0NBNTZBMTcsIDB4NkZG
NTk5RTMsIDB4OUQ5RTFBRTAsCi0JMHhEM0QzRTFBQiwgMHgyMUI4NjJBOCwgMHgzMkU4OTE1Qywg
MHhDMDgzMTI1RiwKLQkweDE0NDk3NkI0LCAweEU2MjJGNUI3LCAweEY1NzIwNjQzLCAweDA3MTk4
NTQwLAotCTB4NTkwQUI5NjQsIDB4QUI2MTNBNjcsIDB4QjgzMUM5OTMsIDB4NEE1QTRBOTAsCi0J
MHg5RTkwMkU3QiwgMHg2Q0ZCQUQ3OCwgMHg3RkFCNUU4QywgMHg4REMwREQ4RiwKLQkweEUzMzBB
ODFBLCAweDExNUIyQjE5LCAweDAyMEJEOEVELCAweEYwNjA1QkVFLAotCTB4MjRBQTNGMDUsIDB4
RDZDMUJDMDYsIDB4QzU5MTRGRjIsIDB4MzdGQUNDRjEsCi0JMHg2OUU5RjBENSwgMHg5QjgyNzNE
NiwgMHg4OEQyODAyMiwgMHg3QUI5MDMyMSwKLQkweEFFNzM2N0NBLCAweDVDMThFNEM5LCAweDRG
NDgxNzNELCAweEJEMjM5NDNFLAotCTB4RjM2RTZGNzUsIDB4MDEwNUVDNzYsIDB4MTI1NTFGODIs
IDB4RTAzRTlDODEsCi0JMHgzNEY0Rjg2QSwgMHhDNjlGN0I2OSwgMHhENUNGODg5RCwgMHgyN0E0
MEI5RSwKLQkweDc5QjczN0JBLCAweDhCRENCNEI5LCAweDk4OEM0NzRELCAweDZBRTdDNDRFLAot
CTB4QkUyREEwQTUsIDB4NEM0NjIzQTYsIDB4NUYxNkQwNTIsIDB4QUQ3RDUzNTEsCi19OwotCi0K
LSNkZWZpbmUgU0NUUF9DUkMzMkMoYyxkKSAoYz0oYz4+OClec2N0cF9jcmNfY1soY14oZCkpJjB4
RkZdKQotCi1zdGF0aWMgdWludDMyX3QKLXNpbmdsZXRhYmxlX2NyYzMyYyh1aW50MzJfdCBjcmMz
MmMsCi0gICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmZmVyLAotICAg
ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCi17Ci0JdW5zaWduZWQgaW50IGk7
Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKLQkJU0NUUF9DUkMzMkMoY3JjMzJj
LCBidWZmZXJbaV0pOwotCX0KLQlyZXR1cm4gKGNyYzMyYyk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi11aW50MzJfdAotI2Vsc2UKLXN0YXRpYyB1aW50MzJfdAotI2VuZGlmCi1j
YWxjdWxhdGVfY3JjMzJjKHVpbnQzMl90IGNyYzMyYywKLSAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgY2hhciAqYnVmZmVyLAotICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgbGVu
Z3RoKQotewotCWlmIChsZW5ndGggPCA0KSB7Ci0JCXJldHVybiAoc2luZ2xldGFibGVfY3JjMzJj
KGNyYzMyYywgYnVmZmVyLCBsZW5ndGgpKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKG11bHRpdGFi
bGVfY3JjMzJjKGNyYzMyYywgYnVmZmVyLCBsZW5ndGgpKTsKLQl9Ci19Ci0jZW5kaWYgLyogRnJl
ZUJTRCA8IDgwMDAwIHx8IG90aGVyIE9TICovCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci11aW50MzJfdAotI2Vsc2UKLXN0YXRpYyB1aW50MzJfdAotI2VuZGlmCi1zY3RwX2ZpbmFsaXpl
X2NyYzMyYyh1aW50MzJfdCBjcmMzMmMpCi17Ci0JdWludDMyX3QgcmVzdWx0OwotCi0jaWYgQllU
RV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0JdWludDhfdCBieXRlMCwgYnl0ZTEsIGJ5dGUyLCBieXRl
MzsKLQotI2VuZGlmCi0JLyogQ29tcGxlbWVudCB0aGUgcmVzdWx0ICovCi0JcmVzdWx0ID0gfmNy
YzMyYzsKLSNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KLQkvKgotCSAqIEZvciBCSUctRU5E
SUFOLi4gYWthIE1vdG9yb2xhIGJ5dGUgb3JkZXIgdGhlIHJlc3VsdCBpcyBpbgotCSAqIGxpdHRs
ZS1lbmRpYW4gZm9ybS4gU28gd2UgbXVzdCBtYW51YWxseSBzd2FwIHRoZSBieXRlcy4gVGhlbiB3
ZQotCSAqIGNhbiBjYWxsIGh0b25sKCkgd2hpY2ggZG9lcyBub3RoaW5nLi4uCi0JICovCi0JYnl0
ZTAgPSByZXN1bHQgJiAweDAwMDAwMGZmOwotCWJ5dGUxID0gKHJlc3VsdCA+PiA4KSAmIDB4MDAw
MDAwZmY7Ci0JYnl0ZTIgPSAocmVzdWx0ID4+IDE2KSAmIDB4MDAwMDAwZmY7Ci0JYnl0ZTMgPSAo
cmVzdWx0ID4+IDI0KSAmIDB4MDAwMDAwZmY7Ci0JY3JjMzJjID0gKChieXRlMCA8PCAyNCkgfCAo
Ynl0ZTEgPDwgMTYpIHwgKGJ5dGUyIDw8IDgpIHwgYnl0ZTMpOwotI2Vsc2UKLQkvKgotCSAqIEZv
ciBJTlRFTCBwbGF0Zm9ybXMgdGhlIHJlc3VsdCBjb21lcyBvdXQgaW4gbmV0d29yayBvcmRlci4g
Tm8KLQkgKiBodG9ubCBpcyByZXF1aXJlZCBvciB0aGUgc3dhcCBhYm92ZS4gU28gd2Ugb3B0aW1p
emUgb3V0IGJvdGggdGhlCi0JICogaHRvbmwgYW5kIHRoZSBtYW51YWwgc3dhcCBhYm92ZS4KLQkg
Ki8KLQljcmMzMmMgPSByZXN1bHQ7Ci0jZW5kaWYKLQlyZXR1cm4gKGNyYzMyYyk7Ci19Ci0KLXVp
bnQzMl90Ci1zY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zm
c2V0KQotewotCS8qCi0JICogZ2l2ZW4gYSBtYnVmIGNoYWluIHdpdGggYSBwYWNrZXRoZWFkZXIg
b2Zmc2V0IGJ5ICdvZmZzZXQnCi0JICogcG9pbnRpbmcgYXQgYSBzY3RwaGRyICh3aXRoIGNzdW0g
c2V0IHRvIDApIGdvIHRocm91Z2ggdGhlIGNoYWluCi0JICogb2YgU0NUUF9CVUZfTkVYVCgpJ3Mg
YW5kIGNhbGN1bGF0ZSB0aGUgU0NUUCBjaGVja3N1bS4gVGhpcyBhbHNvCi0JICogaGFzIGEgc2lk
ZSBib251cyBhcyBpdCB3aWxsIGNhbGN1bGF0ZSB0aGUgdG90YWwgbGVuZ3RoIG9mIHRoZQotCSAq
IG1idWYgY2hhaW4uIE5vdGU6IGlmIG9mZnNldCBpcyBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG1i
dWYKLQkgKiBsZW5ndGgsIGNoZWNrc3VtPTEsIHBrdGxlbj0wIGlzIHJldHVybmVkIChpZS4gbm8g
cmVhbCBlcnJvciBjb2RlKQotCSAqLwotCXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOwotCXN0
cnVjdCBtYnVmICphdDsKLQotCWF0ID0gbTsKLQkvKiBmaW5kIHRoZSBjb3JyZWN0IG1idWYgYW5k
IG9mZnNldCBpbnRvIG1idWYgKi8KLQl3aGlsZSAoKGF0ICE9IE5VTEwpICYmIChvZmZzZXQgPiAo
dWludDMyX3QpIFNDVFBfQlVGX0xFTihhdCkpKSB7Ci0JCW9mZnNldCAtPSBTQ1RQX0JVRl9MRU4o
YXQpOwkvKiB1cGRhdGUgcmVtYWluaW5nIG9mZnNldAotCQkJCQkJICogbGVmdCAqLwotCQlhdCA9
IFNDVFBfQlVGX05FWFQoYXQpOwotCX0KLQl3aGlsZSAoYXQgIT0gTlVMTCkgewotCQlpZiAoKFND
VFBfQlVGX0xFTihhdCkgLSBvZmZzZXQpID4gMCkgewotCQkJYmFzZSA9IGNhbGN1bGF0ZV9jcmMz
MmMoYmFzZSwKLQkJCSAgICAodW5zaWduZWQgY2hhciAqKShTQ1RQX0JVRl9BVChhdCwgb2Zmc2V0
KSksCi0JCQkgICAgKHVuc2lnbmVkIGludCkoU0NUUF9CVUZfTEVOKGF0KSAtIG9mZnNldCkpOwot
CQl9Ci0JCWlmIChvZmZzZXQpIHsKLQkJCS8qIHdlIG9ubHkgb2Zmc2V0IG9uY2UgaW50byB0aGUg
Zmlyc3QgbWJ1ZiAqLwotCQkJaWYgKG9mZnNldCA8ICh1aW50MzJfdCkgU0NUUF9CVUZfTEVOKGF0
KSkKLQkJCQlvZmZzZXQgPSAwOwotCQkJZWxzZQotCQkJCW9mZnNldCAtPSBTQ1RQX0JVRl9MRU4o
YXQpOwotCQl9Ci0JCWF0ID0gU0NUUF9CVUZfTkVYVChhdCk7Ci0JfQotCWJhc2UgPSBzY3RwX2Zp
bmFsaXplX2NyYzMyYyhiYXNlKTsKLQlyZXR1cm4gKGJhc2UpOwotfQotI2VuZGlmCQkJCS8qICFk
ZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKSAqLwotCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotdm9pZAotc2N0cF9kZWxheWVkX2Nrc3VtKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBvZmZz
ZXQpCi17Ci0jaWYgZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLSNpZmRlZiBJTlZBUklBTlRT
Ci0JcGFuaWMoInNjdHBfZGVsYXllZF9ja3N1bSgpIGNhbGxlZCB3aGVuIHVzaW5nIG5vIFNDVFAg
Q1JDLiIpOwotI2VuZGlmCi0jZWxzZQotCXVpbnQzMl90IGNoZWNrc3VtOwotCi0JY2hlY2tzdW0g
PSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCBvZmZzZXQpOwotCVNDVFBfU1RBVF9ERUNSKHNjdHBz
X3NlbmRod2NyYyk7Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLQlvZmZzZXQg
Kz0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKLQotCWlmIChvZmZzZXQgKyBz
aXplb2YodWludDMyX3QpID4gKHVpbnQzMl90KSAobS0+bV9sZW4pKSB7Ci0JCVNDVFBfUFJJTlRG
KCJzY3RwX2RlbGF5ZWRfY2tzdW0oKTogbS0+bGVuOiAlZCwgIG9mZjogJWQuXG4iLAotCQkgICAg
ICAgICAgICAodWludDMyX3QpIG0tPm1fbGVuLCBvZmZzZXQpOwotCQkvKgotCQkgKiBYWFggdGhp
cyBzaG91bGRuJ3QgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgdGhlIGNvcnJlY3QKLQkJICogYmVo
YXZpb3IgbWF5IGJlIHRvIGluc2VydCB0aGUgY2hlY2tzdW0gaW4gdGhlIGFwcHJvcHJpYXRlCi0J
CSAqIG5leHQgbWJ1ZiBpbiB0aGUgY2hhaW4uCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCSoodWlu
dDMyX3QgKikgKG0tPm1fZGF0YSArIG9mZnNldCkgPSBjaGVja3N1bTsKLSNlbmRpZgotfQotI2Vu
ZGlmCi0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5oIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2NyYzMyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBi
MWNiYmI0ZjFlNjdiODVlMjUxZGE1MjI3ZWMwNDM0MGU0NjMzNmUuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMy
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cF9jcmMzMi5oIDMwOTYwNyAyMDE2LTEyLTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOwotI2Vu
ZGlmCi0KLSNpZm5kZWYgX05FVElORVRfU0NUUF9DUkMzMl9IXwotI2RlZmluZSBfTkVUSU5FVF9T
Q1RQX0NSQzMyX0hfCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpCi0jaWYgIWRlZmluZWQoU0NUUF9X
SVRIX05PX0NTVU0pCi11aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAq
LCB1aW50MzJfdCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotdm9pZCBzY3Rw
X2RlbGF5ZWRfY2tzdW0oc3RydWN0IG1idWYgKiwgdWludDMyX3Qgb2Zmc2V0KTsKLSNlbmRpZgot
I2VuZGlmCQkJCS8qIF9LRVJORUwgKi8KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYg
IWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi11aW50MzJfdCBjYWxjdWxhdGVfY3JjMzJjKHVp
bnQzMl90LCBjb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGludCk7Ci11aW50MzJfdCBz
Y3RwX2ZpbmFsaXplX2NyYzMyYyh1aW50MzJfdCk7Ci11aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9j
a3N1bShzdHJ1Y3QgbWJ1ZiAqLCB1aW50MzJfdCk7Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCQkJ
CS8qIF9fY3JjMzJjX2hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hl
YWRlci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAyMDAzMWU5Yjc2OTRjNmUwYjg5ZTQwNzY0NjFiMTA5YTg4NWJiMmI2Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9oZWFkZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDYwOSArMCwwIEBACi0vKi0K
LSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBT
dGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
Ci0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVm
IF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6
IGhlYWQvc3lzL25ldGluZXQvc2N0cF9oZWFkZXIuaCAzMDk2ODIgMjAxNi0xMi0wNyAxOTozMDo1
OVogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfSEVBREVSX0hf
Ci0jZGVmaW5lIF9ORVRJTkVUX1NDVFBfSEVBREVSX0hfCi0KLSNpZiBkZWZpbmVkKF9fV2luZG93
c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHBhY2tv
bi5oPgotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNs
dWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgotCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFja2Vk
KSkKLSNlbHNlCi0jcHJhZ21hIHBhY2sgKHB1c2gsIDEpCi0jZGVmaW5lIFNDVFBfUEFDS0VECi0j
ZW5kaWYKLQotLyoKLSAqIFBhcmFtZXRlciBzdHJ1Y3R1cmVzCi0gKi8KLXN0cnVjdCBzY3RwX2lw
djRhZGRyX3BhcmFtIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfSVBW
NF9QQVJBTV9UWVBFLCBsZW49OCAqLwotCXVpbnQzMl90IGFkZHI7CQkvKiBJUFY0IGFkZHJlc3Mg
Ki8KLX0gU0NUUF9QQUNLRUQ7Ci0KLSNkZWZpbmUgU0NUUF9WNl9BRERSX0JZVEVTIDE2Ci0KLQot
c3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8q
IHR5cGU9U0NUUF9JUFY2X1BBUkFNX1RZUEUsIGxlbj0yMCAqLwotCXVpbnQ4X3QgYWRkcltTQ1RQ
X1Y2X0FERFJfQllURVNdOwkvKiBJUFY2IGFkZHJlc3MgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLS8q
IENvb2tpZSBQcmVzZXJ2YXRpdmUgKi8KLXN0cnVjdCBzY3RwX2Nvb2tpZV9wZXJzZXJ2ZV9wYXJh
bSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0NPT0tJRV9QUkVTRVJW
RSwgbGVuPTggKi8KLQl1aW50MzJfdCB0aW1lOwkJLyogdGltZSBpbiBtcyB0byBleHRlbmQgY29v
a2llICovCi19IFNDVFBfUEFDS0VEOwotCi0jZGVmaW5lIFNDVFBfQVJSQVlfTUlOX0xFTiAxCi0v
KiBIb3N0IE5hbWUgQWRkcmVzcyAqLwotc3RydWN0IHNjdHBfaG9zdF9uYW1lX3BhcmFtIHsKLQlz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfSE9TVE5BTUVfQUREUkVTUyAqLwot
CWNoYXIgbmFtZVtTQ1RQX0FSUkFZX01JTl9MRU5dOwkJLyogaG9zdCBuYW1lICovCi19IFNDVFBf
UEFDS0VEOwotCi0vKgotICogVGhpcyBpcyB0aGUgbWF4aW11bSBwYWRkZWQgc2l6ZSBvZiBhIHMt
YS1wCi0gKiBzbyBwYXJhbWhlYWRyICsgMyBhZGRyZXNzIHR5cGVzICg2IGJ5dGVzKSArIDIgYnl0
ZSBwYWQgPSAxMgotICovCi0jZGVmaW5lIFNDVFBfTUFYX0FERFJfUEFSQU1TX1NJWkUgMTIKLS8q
IHN1cHBvcnRlZCBhZGRyZXNzIHR5cGUgKi8KLXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9hZGRyX3Bh
cmFtIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfU1VQUE9SVEVEX0FE
RFJUWVBFICovCi0JdWludDE2X3QgYWRkcl90eXBlWzJdOwkvKiBhcnJheSBvZiBzdXBwb3J0ZWQg
YWRkcmVzcyB0eXBlcyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotLyogaGVhcnRiZWF0IGluZm8gcGFy
YW1ldGVyICovCi1zdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfaW5mb19wYXJhbSB7Ci0Jc3RydWN0IHNj
dHBfcGFyYW1oZHIgcGg7Ci0JdWludDMyX3QgdGltZV92YWx1ZV8xOwotCXVpbnQzMl90IHRpbWVf
dmFsdWVfMjsKLQl1aW50MzJfdCByYW5kb21fdmFsdWUxOwotCXVpbnQzMl90IHJhbmRvbV92YWx1
ZTI7Ci0JdWludDhfdCBhZGRyX2ZhbWlseTsKLQl1aW50OF90IGFkZHJfbGVuOwotCS8qIG1ha2Ug
c3VyZSB0aGF0IHRoaXMgc3RydWN0dXJlIGlzIDQgYnl0ZSBhbGlnbmVkICovCi0JdWludDhfdCBw
YWRkaW5nWzJdOwotCWNoYXIgYWRkcmVzc1tTQ1RQX0FERFJNQVhdOwotfSBTQ1RQX1BBQ0tFRDsK
LQotCi0vKiBkcmFmdC1pZXRmLXRzdndnLXByc2N0cCAqLwotLyogUFItU0NUUCBzdXBwb3J0ZWQg
cGFyYW1ldGVyICovCi1zdHJ1Y3Qgc2N0cF9wcnNjdHBfc3VwcG9ydGVkX3BhcmFtIHsKLQlzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciBwaDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLQotLyogZHJhZnQtaWV0Zi10
c3Z3Zy1hZGRpcC1zY3RwICovCi1zdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgewkvKiBhbiBB
U0NPTkYgInBhcmFtZXRlciIgKi8KLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiBhIFNDVFAg
cGFyYW1ldGVyIGhlYWRlciAqLwotCXVpbnQzMl90IGNvcnJlbGF0aW9uX2lkOy8qIGNvcnJlbGF0
aW9uIGlkIGZvciB0aGlzIHBhcmFtICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9h
c2NvbmZfYWRkcl9wYXJhbSB7CS8qIGFuIEFTQ09ORiBhZGRyZXNzIHBhcmFtZXRlciAqLwotCXN0
cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciBhcGg7CS8qIGFzY29uZiAicGFyYW1ldGVyIiAqLwot
CXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFkZHJwOwkvKiBtYXggc3RvcmFnZSBzaXplICov
Ci19IFNDVFBfUEFDS0VEOwotCi0KLXN0cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0gewkvKiBh
biBBU0NPTkYgTkFULVZ0YWcgcGFyYW1ldGVyICovCi0Jc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyIGFwaDsJLyogYXNjb25mICJwYXJhbWV0ZXIiICovCi0gICAgICAgIHVpbnQzMl90IGxvY2Fs
X3Z0YWc7Ci0gICAgICAgIHVpbnQzMl90IHJlbW90ZV92dGFnOwotfSBTQ1RQX1BBQ0tFRDsKLQot
Ci1zdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtIHsJLyogYW4gQVNDT05GIGFkZHJlc3Mg
KHY0KSBwYXJhbWV0ZXIgKi8KLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgYXBoOwkvKiBh
c2NvbmYgInBhcmFtZXRlciIgKi8KLQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSBhZGRycDsJ
LyogbWF4IHN0b3JhZ2Ugc2l6ZSAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotI2RlZmluZSBTQ1RQX01B
WF9TVVBQT1JURURfRVhUIDI1NgotCi1zdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNf
cGFyYW0gewotCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGUgPSAweDgwMDggIGxlbiA9
IHggKi8KLQl1aW50OF90IGNodW5rX3R5cGVzW107Ci19IFNDVFBfUEFDS0VEOwotCi0KLS8qCi0g
KiBTdHJ1Y3R1cmVzIGZvciBEQVRBIGNodW5rcwotICovCi1zdHJ1Y3Qgc2N0cF9kYXRhIHsKLQl1
aW50MzJfdCB0c247Ci0JdWludDE2X3Qgc2lkOwotCXVpbnQxNl90IHNzbjsKLQl1aW50MzJfdCBw
cGlkOwotCS8qIHVzZXIgZGF0YSBmb2xsb3dzICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qg
c2N0cF9kYXRhX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0
cF9kYXRhIGRwOwotfSBTQ1RQX1BBQ0tFRDsKLQotc3RydWN0IHNjdHBfaWRhdGEgewotCXVpbnQz
Ml90IHRzbjsKLQl1aW50MTZfdCBzaWQ7Ci0JdWludDE2X3QgcmVzZXJ2ZWQ7CS8qIFdoZXJlIGRv
ZXMgdGhlIFNTTiBnbz8gKi8KLQl1aW50MzJfdCBtaWQ7Ci0JdW5pb24gewotCQl1aW50MzJfdCBw
cGlkOwotCQl1aW50MzJfdCBmc247CS8qIEZyYWdtZW50IFNlcXVlbmNlIE51bWJlciAqLwotCX0g
cHBpZF9mc247Ci0JLyogdXNlciBkYXRhIGZvbGxvd3MgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0
cnVjdCBzY3RwX2lkYXRhX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1
Y3Qgc2N0cF9pZGF0YSBkcDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLS8qCi0gKiBTdHJ1Y3R1cmVzIGZv
ciB0aGUgY29udHJvbCBjaHVua3MKLSAqLwotCi0vKiBJbml0aWF0ZSAoSU5JVCkvSW5pdGlhdGUg
QWNrIChJTklUIEFDSykgKi8KLXN0cnVjdCBzY3RwX2luaXQgewotCXVpbnQzMl90IGluaXRpYXRl
X3RhZzsJLyogaW5pdGlhdGUgdGFnICovCi0JdWludDMyX3QgYV9yd25kOwkvKiBhX3J3bmQgKi8K
LQl1aW50MTZfdCBudW1fb3V0Ym91bmRfc3RyZWFtczsJLyogT1MgKi8KLQl1aW50MTZfdCBudW1f
aW5ib3VuZF9zdHJlYW1zOwkvKiBNSVMgKi8KLQl1aW50MzJfdCBpbml0aWFsX3RzbjsJLyogSS1U
U04gKi8KLQkvKiBvcHRpb25hbCBwYXJhbSdzIGZvbGxvdyAqLwotfSBTQ1RQX1BBQ0tFRDsKLSNk
ZWZpbmUgU0NUUF9JREVOVElGSUNBVElPTl9TSVpFIDE2Ci0jZGVmaW5lIFNDVFBfQUREUkVTU19T
SVpFIDQKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVmaW5lIFNDVFBfUkVTRVJWRV9T
UEFDRSA1Ci0jZWxzZQotI2RlZmluZSBTQ1RQX1JFU0VSVkVfU1BBQ0UgNgotI2VuZGlmCi0vKiBz
dGF0ZSBjb29raWUgaGVhZGVyICovCi1zdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgewkvKiB0aGlz
IGlzIG91ciBkZWZpbml0aW9uLi4uICovCi0JdWludDhfdCBpZGVudGlmaWNhdGlvbltTQ1RQX0lE
RU5USUZJQ0FUSU9OX1NJWkVdOy8qIGlkIG9mIHdobyB3ZSBhcmUgKi8KLQlzdHJ1Y3QgdGltZXZh
bCB0aW1lX2VudGVyZWQ7CS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0JdWludDMyX3Qg
Y29va2llX2xpZmU7CS8qIGxpZmUgSSB3aWxsIGF3YXJkIHRoaXMgY29va2llICovCi0JdWludDMy
X3QgdGllX3RhZ19teV92dGFnOwkvKiBteSB0YWcgaW4gb2xkIGFzc29jaWF0aW9uICovCi0KLQl1
aW50MzJfdCB0aWVfdGFnX3BlZXJfdnRhZzsJLyogcGVlcnMgdGFnIGluIG9sZCBhc3NvY2lhdGlv
biAqLwotCXVpbnQzMl90IHBlZXJzX3Z0YWc7CS8qIHBlZXJzIHRhZyBpbiBJTklUIChmb3IgcXVp
Y2sgcmVmKSAqLwotCi0JdWludDMyX3QgbXlfdnRhZzsJLyogbXkgdGFnIGluIElOSVQtQUNLIChm
b3IgcXVpY2sgcmVmKSAqLwotCXVpbnQzMl90IGFkZHJlc3NbU0NUUF9BRERSRVNTX1NJWkVdOwkv
KiA0IGludHMvMTI4IGJpdHMgKi8KLQl1aW50MzJfdCBhZGRyX3R5cGU7CS8qIGFkZHJlc3MgdHlw
ZSAqLwotCXVpbnQzMl90IGxhZGRyZXNzW1NDVFBfQUREUkVTU19TSVpFXTsJLyogbXkgbG9jYWwg
ZnJvbSBhZGRyZXNzICovCi0JdWludDMyX3QgbGFkZHJfdHlwZTsJLyogbXkgbG9jYWwgZnJvbSBh
ZGRyZXNzIHR5cGUgKi8KLQl1aW50MzJfdCBzY29wZV9pZDsJLyogdjYgc2NvcGUgaWQgZm9yIGxp
bmstbG9jYWxzICovCi0KLQl1aW50MTZfdCBwZWVycG9ydDsJLyogcG9ydCBhZGRyZXNzIG9mIHRo
ZSBwZWVyIGluIHRoZSBJTklUICovCi0JdWludDE2X3QgbXlwb3J0OwkvKiBteSBwb3J0IGFkZHJl
c3MgdXNlZCBpbiB0aGUgSU5JVCAqLwotCXVpbnQ4X3QgaXB2NF9hZGRyX2xlZ2FsOy8qIEFyZSBW
NCBhZGRyIGxlZ2FsPyAqLwotCXVpbnQ4X3QgaXB2Nl9hZGRyX2xlZ2FsOy8qIEFyZSBWNiBhZGRy
IGxlZ2FsPyAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQl1aW50OF90IGNvbm5fYWRk
cl9sZWdhbDsKLSNlbmRpZgotCXVpbnQ4X3QgbG9jYWxfc2NvcGU7CS8qIElQdjYgbG9jYWwgc2Nv
cGUgZmxhZyAqLwotCXVpbnQ4X3Qgc2l0ZV9zY29wZTsJLyogSVB2NiBzaXRlIHNjb3BlIGZsYWcg
Ki8KLQotCXVpbnQ4X3QgaXB2NF9zY29wZTsJLyogSVB2NCBwcml2YXRlIGFkZHIgc2NvcGUgKi8K
LQl1aW50OF90IGxvb3BiYWNrX3Njb3BlOwkvKiBsb29wYmFjayBzY29wZSBpbmZvcm1hdGlvbiAq
LwotCXVpbnQ4X3QgcmVzZXJ2ZWRbU0NUUF9SRVNFUlZFX1NQQUNFXTsgICAgLyogQWxpZ24gdG8g
NjQgYml0cyAqLwotCS8qCi0JICogYXQgdGhlIGVuZCBpcyB0YWNrZWQgb24gdGhlIElOSVQgY2h1
bmsgYW5kIHRoZSBJTklULUFDSyBjaHVuawotCSAqIChtaW51cyB0aGUgY29va2llKS4KLQkgKi8K
LX0gU0NUUF9QQUNLRUQ7Ci0KLS8qIHN0YXRlIGNvb2tpZSBwYXJhbWV0ZXIgKi8KLXN0cnVjdCBz
Y3RwX3N0YXRlX2Nvb2tpZV9wYXJhbSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7Ci0Jc3Ry
dWN0IHNjdHBfc3RhdGVfY29va2llIGNvb2tpZTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBz
Y3RwX2luaXRfY2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXN0cnVjdCBzY3Rw
X2luaXQgaW5pdDsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2luaXRfbXNnIHsKLQlz
dHJ1Y3Qgc2N0cGhkciBzaDsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rIG1zZzsKLX0gU0NUUF9Q
QUNLRUQ7Ci0KLS8qIC4uLiB1c2VkIGZvciBib3RoIElOSVQgYW5kIElOSVQgQUNLICovCi0jZGVm
aW5lIHNjdHBfaW5pdF9hY2sJCXNjdHBfaW5pdAotI2RlZmluZSBzY3RwX2luaXRfYWNrX2NodW5r
CXNjdHBfaW5pdF9jaHVuawotI2RlZmluZSBzY3RwX2luaXRfYWNrX21zZwlzY3RwX2luaXRfbXNn
Ci0KLQotLyogU2VsZWN0aXZlIEFjayAoU0FDSykgKi8KLXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxv
Y2sgewotCXVpbnQxNl90IHN0YXJ0OwkJLyogR2FwIEFjayBibG9jayBzdGFydCAqLwotCXVpbnQx
Nl90IGVuZDsJCS8qIEdhcCBBY2sgYmxvY2sgZW5kICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1
Y3Qgc2N0cF9zYWNrIHsKLQl1aW50MzJfdCBjdW1fdHNuX2FjazsJLyogY3VtdWxhdGl2ZSBUU04g
QWNrICovCi0JdWludDMyX3QgYV9yd25kOwkvKiB1cGRhdGVkIGFfcnduZCBvZiBzZW5kZXIgKi8K
LQl1aW50MTZfdCBudW1fZ2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2YgR2FwIEFjayBibG9ja3Mg
Ki8KLQl1aW50MTZfdCBudW1fZHVwX3RzbnM7CS8qIG51bWJlciBvZiBkdXBsaWNhdGUgVFNOcyAq
LwotCS8qIHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sncyBmb2xsb3cgKi8KLQkvKiB1aW50MzJf
dCBkdXBsaWNhdGVfdHNuJ3MgZm9sbG93ICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0
cF9zYWNrX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9z
YWNrIHNhY2s7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9ucl9zYWNrIHsKLQl1aW50
MzJfdCBjdW1fdHNuX2FjazsJLyogY3VtdWxhdGl2ZSBUU04gQWNrICovCi0JdWludDMyX3QgYV9y
d25kOwkvKiB1cGRhdGVkIGFfcnduZCBvZiBzZW5kZXIgKi8KLQl1aW50MTZfdCBudW1fZ2FwX2Fj
a19ibGtzOwkvKiBudW1iZXIgb2YgR2FwIEFjayBibG9ja3MgKi8KLQl1aW50MTZfdCBudW1fbnJf
Z2FwX2Fja19ibGtzOwkvKiBudW1iZXIgb2YgTlIgR2FwIEFjayBibG9ja3MgKi8KLQl1aW50MTZf
dCBudW1fZHVwX3RzbnM7CS8qIG51bWJlciBvZiBkdXBsaWNhdGUgVFNOcyAqLwotCXVpbnQxNl90
IHJlc2VydmVkOwkvKiBub3QgY3VycmVudGx5IHVzZWQqLwotCS8qIHN0cnVjdCBzY3RwX2dhcF9h
Y2tfYmxvY2sncyBmb2xsb3cgKi8KLQkvKiB1aW50MzJfdCBkdXBsaWNhdGVfdHNuJ3MgZm9sbG93
ICovCi19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rIHsKLQlzdHJ1
Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrIG5yX3NhY2s7Ci19IFND
VFBfUEFDS0VEOwotCi0KLS8qIEhlYXJ0YmVhdCBSZXF1ZXN0IChIRUFSVEJFQVQpICovCi1zdHJ1
Y3Qgc2N0cF9oZWFydGJlYXQgewotCXN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9pbmZvX3BhcmFtIGhi
X2luZm87Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgewot
CXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXN0cnVjdCBzY3RwX2hlYXJ0YmVhdCBoZWFydGJl
YXQ7Ci19IFNDVFBfUEFDS0VEOwotCi0vKiAuLi4gdXNlZCBmb3IgSGVhcnRiZWF0IEFjayAoSEVB
UlRCRUFUIEFDSykgKi8KLSNkZWZpbmUgc2N0cF9oZWFydGJlYXRfYWNrCQlzY3RwX2hlYXJ0YmVh
dAotI2RlZmluZSBzY3RwX2hlYXJ0YmVhdF9hY2tfY2h1bmsJc2N0cF9oZWFydGJlYXRfY2h1bmsK
LQotCi0vKiBBYm9ydCBBc3Nzb2NpYXRpb24gKEFCT1JUKSAqLwotc3RydWN0IHNjdHBfYWJvcnRf
Y2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCS8qIG9wdGlvbmFsIGVycm9yIGNh
dXNlIG1heSBmb2xsb3cgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2Fib3J0X21z
ZyB7Ci0Jc3RydWN0IHNjdHBoZHIgc2g7Ci0Jc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgbXNnOwot
fSBTQ1RQX1BBQ0tFRDsKLQotCi0vKiBTaHV0ZG93biBBc3NvY2lhdGlvbiAoU0hVVERPV04pICov
Ci1zdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7
Ci0JdWludDMyX3QgY3VtdWxhdGl2ZV90c25fYWNrOwotfSBTQ1RQX1BBQ0tFRDsKLQotCi0vKiBT
aHV0ZG93biBBY2tub3dsZWRnbWVudCAoU0hVVERPV04gQUNLKSAqLwotc3RydWN0IHNjdHBfc2h1
dGRvd25fYWNrX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLX0gU0NUUF9QQUNL
RUQ7Ci0KLQotLyogT3BlcmF0aW9uIEVycm9yIChFUlJPUikgKi8KLXN0cnVjdCBzY3RwX2Vycm9y
X2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKLQkvKiBvcHRpb25hbCBlcnJvciBj
YXVzZXMgZm9sbG93ICovCi19IFNDVFBfUEFDS0VEOwotCi0KLS8qIENvb2tpZSBFY2hvIChDT09L
SUUgRUNITykgKi8KLXN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0
cF9jaHVua2hkciBjaDsKLQlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgY29va2llOwotfSBTQ1RQ
X1BBQ0tFRDsKLQotLyogQ29va2llIEFja25vd2xlZGdtZW50IChDT09LSUUgQUNLKSAqLwotc3Ry
dWN0IHNjdHBfY29va2llX2Fja19jaHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci19
IFNDVFBfUEFDS0VEOwotCi0vKiBFeHBsaWNpdCBDb25nZXN0aW9uIE5vdGlmaWNhdGlvbiBFY2hv
IChFQ05FKSAqLwotc3RydWN0IG9sZF9zY3RwX2VjbmVfY2h1bmsgewotCXN0cnVjdCBzY3RwX2No
dW5raGRyIGNoOwotCXVpbnQzMl90IHRzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3Rw
X2VjbmVfY2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQzMl90IHRzbjsK
LQl1aW50MzJfdCBudW1fcGt0c19zaW5jZV9jd3I7Ci19IFNDVFBfUEFDS0VEOwotCi0vKiBDb25n
ZXN0aW9uIFdpbmRvdyBSZWR1Y2VkIChDV1IpICovCi1zdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgewot
CXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQzMl90IHRzbjsKLX0gU0NUUF9QQUNLRUQ7
Ci0KLS8qIFNodXRkb3duIENvbXBsZXRlIChTSFVURE9XTiBDT01QTEVURSkgKi8KLXN0cnVjdCBz
Y3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsK
LX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlv
biB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7Ci0JdWludDMyX3QgaW5kaWNhdGlvbjsKLX0g
U0NUUF9QQUNLRUQ7Ci0KLS8qCi0gKiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAKLSAqLwot
LyogQWRkcmVzcy9TdHJlYW0gQ29uZmlndXJhdGlvbiBDaGFuZ2UgKEFTQ09ORikgKi8KLXN0cnVj
dCBzY3RwX2FzY29uZl9jaHVuayB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0JdWludDMy
X3Qgc2VyaWFsX251bWJlcjsKLQkvKiBsb29rdXAgYWRkcmVzcyBwYXJhbWV0ZXIgKG1hbmRhdG9y
eSkgKi8KLQkvKiBhc2NvbmYgcGFyYW1ldGVycyBmb2xsb3cgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0K
LS8qIEFkZHJlc3MvU3RyZWFtIENvbmZpZ3VyYXRpb24gQWNrbm93bGVkZ2UgKEFTQ09ORiBBQ0sp
ICovCi1zdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciBjaDsKLQl1aW50MzJfdCBzZXJpYWxfbnVtYmVyOwotCS8qIGFzY29uZiBwYXJhbWV0ZXJzIGZv
bGxvdyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQotLyogZHJhZnQtaWV0Zi10c3Z3Zy1wcnNjdHAgKi8K
LS8qIEZvcndhcmQgQ3VtdWxhdGl2ZSBUU04gKEZPUldBUkQgVFNOKSAqLwotc3RydWN0IHNjdHBf
Zm9yd2FyZF90c25fY2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQzMl90
IG5ld19jdW11bGF0aXZlX3RzbjsKLQkvKiBzdHJlYW0vc2VxdWVuY2UgcGFpcnMgKHNjdHBfc3Ry
c2VxKSBmb2xsb3cgKi8KLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0cnNlcSB7Ci0J
dWludDE2X3Qgc2lkOwotCXVpbnQxNl90IHNzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBz
Y3RwX3N0cnNlcV9taWQgewotCXVpbnQxNl90IHNpZDsKLQl1aW50MTZfdCBmbGFnczsKLQl1aW50
MzJfdCBtaWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9tc2cgewotCXN0cnVjdCBz
Y3RwaGRyIHNoOwotCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIG1zZzsKLX0gU0NUUF9Q
QUNLRUQ7Ci0KLS8qIHNob3VsZCBiZSBhIG11bHRpcGxlIG9mIDQgLSAxIGFrYSAzLzcvMTEgZXRj
LiAqLwotCi0jZGVmaW5lIFNDVFBfTlVNX0RCX1RPX1ZFUklGWSAzMQotCi1zdHJ1Y3Qgc2N0cF9j
aHVua19kZXNjIHsKLQl1aW50OF90IGNodW5rX3R5cGU7Ci0JdWludDhfdCBkYXRhX2J5dGVzW1ND
VFBfTlVNX0RCX1RPX1ZFUklGWV07Ci0JdWludDMyX3QgdHNuX2lmYW55OwotfSBTQ1RQX1BBQ0tF
RDsKLQotCi1zdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciBjaDsKLQl1aW50MzJfdCBib3R0bGVfYnc7Ci0JdWludDMyX3QgY3VycmVudF9vbnE7Ci0JdWlu
dDE2X3QgdHJ1bmNfbGVuOwotCXVpbnQxNl90IHJlc2VydmVkOwotCXVpbnQ4X3QgZGF0YVtdOwot
fSBTQ1RQX1BBQ0tFRDsKLQotLyoqKioqKioqKipTVFJFQU0gUkVTRVQgU1RVRkYgKioqKioqKioq
KioqKioqKioqLwotCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCB7Ci0Jc3RydWN0
IHNjdHBfcGFyYW1oZHIgcGg7Ci0JdWludDMyX3QgcmVxdWVzdF9zZXE7Ci19IFNDVFBfUEFDS0VE
OwotCi1zdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgewotCXN0cnVjdCBzY3Rw
X3BhcmFtaGRyIHBoOwotCXVpbnQzMl90IHJlcXVlc3Rfc2VxOwkvKiBtb25vdG9uaWNhbGx5IGlu
Y3JlYXNpbmcgc2VxIG5vICovCi0JdWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3Bv
bnNlLCB0aGUgcmVzcCBzZXEgbm8gKi8KLQl1aW50MzJfdCBzZW5kX3Jlc2V0X2F0X3RzbjsJLyog
bGFzdCBUU04gSSBhc3NpZ25lZCBvdXRib3VuZCAqLwotCXVpbnQxNl90IGxpc3Rfb2Zfc3RyZWFt
c1tdOwkvKiBpZiBub3QgYWxsIGxpc3Qgb2Ygc3RyZWFtcyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQot
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QgewotCXN0cnVjdCBzY3RwX3BhcmFt
aGRyIHBoOwotCXVpbnQzMl90IHJlcXVlc3Rfc2VxOwotCXVpbnQxNl90IGxpc3Rfb2Zfc3RyZWFt
c1tdOwkvKiBpZiBub3QgYWxsIGxpc3Qgb2Ygc3RyZWFtcyAqLwotfSBTQ1RQX1BBQ0tFRDsKLQot
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0IHsKLQlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBwaDsKLQl1aW50MzJfdCByZXF1ZXN0X3NlcTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7
Ci0JdWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0aGUgcmVzcCBzZXEg
bm8gKi8KLQl1aW50MzJfdCByZXN1bHQ7Ci19IFNDVFBfUEFDS0VEOwotCi1zdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNuIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKLQl1
aW50MzJfdCByZXNwb25zZV9zZXE7CS8qIGlmIGEgcmVzcG9uc2UsIHRoZSByZXNwIHNlcSBubyAq
LwotCXVpbnQzMl90IHJlc3VsdDsKLQl1aW50MzJfdCBzZW5kZXJzX25leHRfdHNuOwotCXVpbnQz
Ml90IHJlY2VpdmVyc19uZXh0X3RzbjsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9hZGRfc3RybSB7Ci0gIHN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOwotICB1aW50
MzJfdCByZXF1ZXN0X3NlcTsKLSAgdWludDE2X3QgbnVtYmVyX29mX3N0cmVhbXM7Ci0gIHVpbnQx
Nl90IHJlc2VydmVkOwotfSBTQ1RQX1BBQ0tFRDsKLQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VF9SRVNVTFRfTk9USElOR19UT19ETyAgIDB4MDAwMDAwMDAgLyogWFhYOiB1bnVzZWQgKi8KLSNk
ZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCAgICAgICAweDAwMDAwMDAx
Ci0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQgICAgICAgICAgMHgwMDAw
MDAwMgotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX19XUk9OR19TU04gIDB4
MDAwMDAwMDMgLyogWFhYOiB1bnVzZWQgKi8KLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVT
VUxUX0VSUl9JTl9QUk9HUkVTUyAweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VU
X1JFU1VMVF9FUlJfQkFEX1NFUU5PICAgMHgwMDAwMDAwNQotI2RlZmluZSBTQ1RQX1NUUkVBTV9S
RVNFVF9SRVNVTFRfSU5fUFJPR1JFU1MgICAgIDB4MDAwMDAwMDYgLyogWFhYOiB1bnVzZWQgKi8K
LQotLyoKLSAqIGNvbnZpZW5jZSBzdHJ1Y3R1cmVzLCBub3RlIHRoYXQgaWYgeW91IGFyZSBtYWtp
bmcgYSByZXF1ZXN0IGZvciBzcGVjaWZpYwotICogc3RyZWFtcyB0aGVuIHRoZSByZXF1ZXN0IHdp
bGwgbmVlZCB0byBiZSBhbiBvdmVybGF5IHN0cnVjdHVyZS4KLSAqLwotCi1zdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfdHNuX3JlcSB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7Ci0Jc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0IHNyX3JlcTsKLX0gU0NUUF9QQUNLRUQ7Ci0K
LXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwIHsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBj
aDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2Ugc3JfcmVzcDsKLX0gU0NUUF9Q
QUNLRUQ7Ci0KLS8qIHJlc3BvbmUgb25seSB2YWxpZCB3aXRoIGEgVFNOIHJlcXVlc3QgKi8KLXN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwX3RzbiB7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIg
Y2g7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiBzcl9yZXNwOwotfSBT
Q1RQX1BBQ0tFRDsKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCi0KLS8qCi0gKiBBdXRoZW50aWNhdGVkIGNodW5rcyBzdXBwb3J0IGRyYWZ0
LWlldGYtdHN2d2ctc2N0cC1hdXRoCi0gKi8KLQotLyogU2hvdWxkIHdlIG1ha2UgdGhlIG1heCBi
ZSAzMj8gKi8KLSNkZWZpbmUgU0NUUF9SQU5ET01fTUFYX1NJWkUgMjU2Ci1zdHJ1Y3Qgc2N0cF9h
dXRoX3JhbmRvbSB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4ODAwMiAq
LwotCXVpbnQ4X3QgcmFuZG9tX2RhdGFbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVjdCBzY3Rw
X2F1dGhfY2h1bmtfbGlzdCB7Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZSA9IDB4
ODAwMyAqLwotCXVpbnQ4X3QgY2h1bmtfdHlwZXNbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0cnVj
dCBzY3RwX2F1dGhfaG1hY19hbGdvIHsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBl
ID0gMHg4MDA0ICovCi0JdWludDE2X3QgaG1hY19pZHNbXTsKLX0gU0NUUF9QQUNLRUQ7Ci0KLXN0
cnVjdCBzY3RwX2F1dGhfY2h1bmsgewotCXN0cnVjdCBzY3RwX2NodW5raGRyIGNoOwotCXVpbnQx
Nl90IHNoYXJlZF9rZXlfaWQ7Ci0JdWludDE2X3QgaG1hY19pZDsKLQl1aW50OF90IGhtYWNbXTsK
LX0gU0NUUF9QQUNLRUQ7Ci0KLS8qCi0gKiB3ZSBwcmUtcmVzZXJ2ZSBlbm91Z2ggcm9vbSBmb3Ig
YSBFQ05FIG9yIENXUiBBTkQgYSBTQUNLIHdpdGggbm8gbWlzc2luZwotICogcGllY2VzLiBJZiBF
TkNFIGlzIG1pc3Npbmcgd2UgY291bGQgaGF2ZSBhIGNvdXBsZSBvZiBibG9ja3MuIFRoaXMgd2F5
IHdlCi0gKiBvcHRpbWl6ZSBzbyB3ZSBNT1NUIGxpa2VseSBjYW4gYnVuZGxlIGEgU0FDSy9FQ04g
d2l0aCB0aGUgc21hbGxlc3Qgc2l6ZQotICogZGF0YSBjaHVuayBJIHdpbGwgc3BsaXQgaW50by4g
V2UgY291bGQgaW5jcmVhc2UgdGhyb3VnaHB1dCBzbGlnaHRseSBieQotICogdGFraW5nIG91dCB0
aGVzZSB0d28gYnV0IHRoZSAgMjQtc2Fjay84LUNXUiBpLmUuIDMyIGJ5dGVzIEkgcHJlLXJlc2Vy
dmUgSQotICogZmVlbCBpcyB3b3J0aCBpdCBmb3Igbm93LgotICovCi0jaWZuZGVmIFNDVFBfTUFY
X09WRVJIRUFECi0jaWZkZWYgSU5FVDYKLSNkZWZpbmUgU0NUUF9NQVhfT1ZFUkhFQUQgKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwKLQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuaykgKyBcCi0JCQkgICBz
aXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IGlw
Nl9oZHIpKQotCi0jZGVmaW5lIFNDVFBfTUVEX09WRVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBf
ZGF0YV9jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAotCQkJICAg
c2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSkKLQotCi0jZGVmaW5lIFNDVFBfTUlOX09WRVJIRUFEIChz
aXplb2Yoc3RydWN0IGlwNl9oZHIpICsgXAotCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkK
LQotI2Vsc2UKLSNkZWZpbmUgU0NUUF9NQVhfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9k
YXRhX2NodW5rKSArIFwKLQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCi0JCQkgICBz
aXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IHNj
dHBfc2Fja19jaHVuaykgKyBcCi0JCQkgICBzaXplb2Yoc3RydWN0IGlwKSkKLQotI2RlZmluZSBT
Q1RQX01FRF9PVkVSSEVBRCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgXAotCQkJ
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIFwKLQkJCSAgIHNpemVvZihzdHJ1Y3QgaXApKQot
Ci0KLSNkZWZpbmUgU0NUUF9NSU5fT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3QgaXApICsgXAotCQkJ
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKLQotI2VuZGlmIC8qIElORVQ2ICovCi0jZW5kaWYg
LyogIVNDVFBfTUFYX09WRVJIRUFEICovCi0KLSNkZWZpbmUgU0NUUF9NRURfVjRfT1ZFUkhFQUQg
KHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSArIFwKLQkJCSAgICAgIHNpemVvZihzdHJ1
Y3Qgc2N0cGhkcikgKyBcCi0JCQkgICAgICBzaXplb2Yoc3RydWN0IGlwKSkKLQotI2RlZmluZSBT
Q1RQX01JTl9WNF9PVkVSSEVBRCAoc2l6ZW9mKHN0cnVjdCBpcCkgKyBcCi0JCQkgICAgICBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpKQotCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLSNpbmNsdWRl
IDxwYWNrb2ZmLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
Ci0jcHJhZ21hIHBhY2socG9wKQotI2VuZGlmCi0jdW5kZWYgU0NUUF9QQUNLRUQKLSNlbmRpZgkJ
CQkvKiAhX19zY3RwX2hlYWRlcl9oX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbmRhdGEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYwpkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMjExYzA1YWI0ZTE2Y2MxNjc4NDQ1YzUxY2VkYTExYzlmODY2
NTY0NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NzM5ICswLDAg
QEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
Ci0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2luZGF0YS5jIDMyMTQ2MyAyMDE3LTA3LTI1
IDExOjA1OjUzWiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
b3MuaD4KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYK
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5
c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfcGNiLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGlt
ZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX2luZGF0YS5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMz
Mi5oPgotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYnNk
Lmg+Ci0jZW5kaWYKLS8qCi0gKiBOT1RFUzogT24gdGhlIG91dGJvdW5kIHNpZGUgb2YgdGhpbmdz
IEkgbmVlZCB0byBjaGVjayB0aGUgc2FjayB0aW1lciB0bwotICogc2VlIGlmIEkgc2hvdWxkIGdl
bmVyYXRlIGEgc2FjayBpbnRvIHRoZSBjaHVuayBxdWV1ZSAoaWYgSSBoYXZlIGRhdGEgdG8KLSAq
IHNlbmQgdGhhdCBpcyBhbmQgd2lsbCBiZSBzZW5kaW5nIGl0IC4uIGZvciBidW5kbGluZy4KLSAq
Ci0gKiBUaGUgY2FsbGJhY2sgaW4gc2N0cF91c3JyZXEuYyB3aWxsIGdldCBjYWxsZWQgd2hlbiB0
aGUgc29ja2V0IGlzIHJlYWQgZnJvbS4KLSAqIFRoaXMgd2lsbCBjYXVzZSBzY3RwX3NlcnZpY2Vf
cXVldWVzKCkgdG8gZ2V0IGNhbGxlZCBvbiB0aGUgdG9wIGVudHJ5IGluCi0gKiB0aGUgbGlzdC4K
LSAqLwotc3RhdGljIHVpbnQzMl90Ci1zY3RwX2FkZF9jaGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3Ry
bSwKLQkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAotCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgbG9ja19oZWxkKTsK
LQotCi12b2lkCi1zY3RwX3NldF9yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0JYXNvYy0+bXlfcnduZCA9IHNjdHBfY2FsY19yd25k
KHN0Y2IsIGFzb2MpOwotfQotCi0vKiBDYWxjdWxhdGUgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAq
LwotdWludDMyX3QKLXNjdHBfY2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0JdWludDMyX3QgY2FsYyA9IDA7Ci0KLQkvKgot
CSAqIFRoaXMgaXMgcmVhbGx5IHNldCB3cm9uZyB3aXRoIHJlc3BlY3QgdG8gYSAxLTItbSBzb2Nr
ZXQuIFNpbmNlCi0JICogdGhlIHNiX2NjIGlzIHRoZSBjb3VudCB0aGF0IGV2ZXJ5b25lIGFzIHB1
dCB1cC4gV2hlbiB3ZSByZS13cml0ZQotCSAqIHNjdHBfc29yZWNlaXZlIHRoZW4gd2Ugd2lsbCBm
aXggdGhpcyBzbyB0aGF0IE9OTFkgdGhpcwotCSAqIGFzc29jaWF0aW9ucyBkYXRhIGlzIHRha2Vu
IGludG8gYWNjb3VudC4KLQkgKi8KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgewot
CQlyZXR1cm4gKGNhbGMpOwotCX0KLQotCWlmIChzdGNiLT5hc29jLnNiX2NjID09IDAgJiYKLQkg
ICAgYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9PSAwICYmCi0JICAgIGFzb2MtPnNpemVfb25f
YWxsX3N0cmVhbXMgPT0gMCkgewotCQkvKiBGdWxsIHJ3bmQgZ3JhbnRlZCAqLwotCQlLQVNTRVJU
KGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSA9PSAwLCAoImNudF9vbl9yZWFzbV9xdWV1ZSBpcyAl
dSIsIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSkpOwotCQlLQVNTRVJUKGFzb2MtPmNudF9vbl9h
bGxfc3RyZWFtcyA9PSAwLCAoImNudF9vbl9hbGxfc3RyZWFtcyBpcyAldSIsIGFzb2MtPmNudF9v
bl9hbGxfc3RyZWFtcykpOwotCQljYWxjID0gbWF4KFNDVFBfU0JfTElNSVRfUkNWKHN0Y2ItPnNj
dHBfc29ja2V0KSwgU0NUUF9NSU5JTUFMX1JXTkQpOwotCQlyZXR1cm4gKGNhbGMpOwotCX0KLQkv
KiBnZXQgYWN0dWFsIHNwYWNlICovCi0JY2FsYyA9ICh1aW50MzJfdCkgc2N0cF9zYnNwYWNlKCZz
dGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdik7Ci0JLyoKLQkgKiB0YWtlIG91
dCB3aGF0IGhhcyBOT1QgYmVlbiBwdXQgb24gc29ja2V0IHF1ZXVlIGFuZCB3ZSB5ZXQgaG9sZAot
CSAqIGZvciBwdXR0aW5nIHVwLgotCSAqLwotCWNhbGMgPSBzY3RwX3Nic3BhY2Vfc3ViKGNhbGMs
ICh1aW50MzJfdCkoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArCi0JICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhc29jLT5jbnRfb25fcmVhc21fcXVldWUgKiBNU0la
RSkpOwotCWNhbGMgPSBzY3RwX3Nic3BhY2Vfc3ViKGNhbGMsICh1aW50MzJfdCkoYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcyArCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMgKiBNU0laRSkpOwotCWlmIChjYWxjID09IDAp
IHsKLQkJLyogb3V0IG9mIHNwYWNlICovCi0JCXJldHVybiAoY2FsYyk7Ci0JfQotCi0JLyogd2hh
dCBpcyB0aGUgb3ZlcmhlYWQgb2YgYWxsIHRoZXNlIHJ3bmQncyAqLwotCWNhbGMgPSBzY3RwX3Ni
c3BhY2Vfc3ViKGNhbGMsIHN0Y2ItPmFzb2MubXlfcnduZF9jb250cm9sX2xlbik7Ci0JLyogSWYg
dGhlIHdpbmRvdyBnZXRzIHRvbyBzbWFsbCBkdWUgdG8gY3RybC1zdHVmZiwgcmVkdWNlIGl0Ci0J
ICogdG8gMSwgZXZlbiBpdCBpcyAwLiBTV1MgZW5nYWdlZAotCSAqLwotCWlmIChjYWxjIDwgc3Rj
Yi0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuKSB7Ci0JCWNhbGMgPSAxOwotCX0KLQlyZXR1cm4g
KGNhbGMpOwotfQotCi0KLQotLyoKLSAqIEJ1aWxkIG91dCBvdXIgcmVhZHEgZW50cnkgYmFzZWQg
b24gdGhlIGluY29taW5nIHBhY2tldC4KLSAqLwotc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQg
Kgotc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LAotICAgIHVpbnQzMl90IHRzbiwgdWludDMyX3QgcHBpZCwKLSAg
ICB1aW50MzJfdCBjb250ZXh0LCB1aW50MTZfdCBzaWQsCi0gICAgdWludDMyX3QgbWlkLCB1aW50
OF90IGZsYWdzLAotICAgIHN0cnVjdCBtYnVmICpkbSkKLXsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqcmVhZF9xdWV1ZV9lID0gTlVMTDsKLQotCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNi
LCByZWFkX3F1ZXVlX2UpOwotCWlmIChyZWFkX3F1ZXVlX2UgPT0gTlVMTCkgewotCQlnb3RvIGZh
aWxlZF9idWlsZDsKLQl9Ci0JbWVtc2V0KHJlYWRfcXVldWVfZSwgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkKSk7Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19zdHJlYW0gPSBzaWQ7
Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19mbGFncyA9IChmbGFncyA8PCA4KTsKLQlyZWFkX3F1ZXVl
X2UtPnNpbmZvX3BwaWQgPSBwcGlkOwotCXJlYWRfcXVldWVfZS0+c2luZm9fY29udGV4dCA9IGNv
bnRleHQ7Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb190c24gPSB0c247Ci0JcmVhZF9xdWV1ZV9lLT5z
aW5mb19jdW10c24gPSB0c247Ci0JcmVhZF9xdWV1ZV9lLT5zaW5mb19hc3NvY19pZCA9IHNjdHBf
Z2V0X2Fzc29jaWQoc3RjYik7Ci0JcmVhZF9xdWV1ZV9lLT5taWQgPSBtaWQ7Ci0JcmVhZF9xdWV1
ZV9lLT50b3BfZnNuID0gcmVhZF9xdWV1ZV9lLT5mc25faW5jbHVkZWQgPSAweGZmZmZmZmZmOwot
CVRBSUxRX0lOSVQoJnJlYWRfcXVldWVfZS0+cmVhc20pOwotCXJlYWRfcXVldWVfZS0+d2hvRnJv
bSA9IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOwotCXJlYWRfcXVl
dWVfZS0+ZGF0YSA9IGRtOwotCXJlYWRfcXVldWVfZS0+c3RjYiA9IHN0Y2I7Ci0JcmVhZF9xdWV1
ZV9lLT5wb3J0X2Zyb20gPSBzdGNiLT5ycG9ydDsKLWZhaWxlZF9idWlsZDoKLQlyZXR1cm4gKHJl
YWRfcXVldWVfZSk7Ci19Ci0KLXN0cnVjdCBtYnVmICoKLXNjdHBfYnVpbGRfY3RsX25jaHVuayhz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbykKLXsK
LQlzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICpzZWluZm87Ci0Jc3RydWN0IHNjdHBfc25kcmN2aW5m
byAqb3V0aW5mbzsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvICpyY3ZpbmZvOwotCXN0cnVjdCBzY3Rw
X254dGluZm8gKm54dGluZm87Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQot
CVdTQUNNU0dIRFIgKmNtaDsKLSNlbHNlCi0Jc3RydWN0IGNtc2doZHIgKmNtaDsKLSNlbmRpZgot
CXN0cnVjdCBtYnVmICpyZXQ7Ci0JaW50IGxlbjsKLQlpbnQgdXNlX2V4dGVuZGVkOwotCWludCBw
cm92aWRlX254dDsKLQotCWlmIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxB
R1NfUkVDVkRBVEFJT0VWTlQpICYmCi0JICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19SRUNWUkNWSU5GTykgJiYKLQkgICAgc2N0cF9pc19mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKSkgewotCQkvKiB1c2VyIGRvZXMgbm90IHdhbnQg
YW55IGFuY2lsbGFyeSBkYXRhICovCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JbGVuID0gMDsK
LQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8p
KSB7Ci0JCWxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7Ci0J
fQotCXNlaW5mbyA9IChzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICopc2luZm87Ci0JaWYgKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKSAmJgotCSAgICAo
c2VpbmZvLT5zZXJpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0FWQUlMKSkgewotCQlw
cm92aWRlX254dCA9IDE7Ci0JCWxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9u
eHRpbmZvKSk7Ci0JfSBlbHNlIHsKLQkJcHJvdmlkZV9ueHQgPSAwOwotCX0KLQlpZiAoc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpKSB7Ci0JCWlm
IChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykpIHsK
LQkJCXVzZV9leHRlbmRlZCA9IDE7Ci0JCQlsZW4gKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0
IHNjdHBfZXh0cmN2aW5mbykpOwotCQl9IGVsc2UgewotCQkJdXNlX2V4dGVuZGVkID0gMDsKLQkJ
CWxlbiArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Ci0JCX0K
LQl9IGVsc2UgewotCQl1c2VfZXh0ZW5kZWQgPSAwOwotCX0KLQotCXJldCA9IHNjdHBfZ2V0X21i
dWZfZm9yX21zZyhsZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAocmV0ID09IE5V
TEwpIHsKLQkJLyogTm8gc3BhY2UgKi8KLQkJcmV0dXJuIChyZXQpOwotCX0KLQlTQ1RQX0JVRl9M
RU4ocmV0KSA9IDA7Ci0KLQkvKiBXZSBuZWVkIGEgQ01TRyBoZWFkZXIgZm9sbG93ZWQgYnkgdGhl
IHN0cnVjdCAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQljbWggPSBt
dG9kKHJldCwgV1NBQ01TR0hEUiAqKTsKLSNlbHNlCi0JY21oID0gbXRvZChyZXQsIHN0cnVjdCBj
bXNnaGRyICopOwotI2VuZGlmCi0JLyoKLQkgKiBNYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBubyB1
bi1pbml0aWFsaXplZCBwYWRkaW5nIGJldHdlZW4KLQkgKiB0aGUgY21zZyBoZWFkZXIgYW5kIGNt
c2cgZGF0YSBhbmQgYWZ0ZXIgdGhlIGNtc2cgZGF0YS4KLQkgKi8KLQltZW1zZXQoY21oLCAwLCBs
ZW4pOwotCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNW
SU5GTykpIHsKLQkJY21oLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwotCQljbWgtPmNtc2df
bGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKTsKLQkJY21oLT5jbXNn
X3R5cGUgPSBTQ1RQX1JDVklORk87Ci0JCXJjdmluZm8gPSAoc3RydWN0IHNjdHBfcmN2aW5mbyAq
KUNNU0dfREFUQShjbWgpOwotCQlyY3ZpbmZvLT5yY3Zfc2lkID0gc2luZm8tPnNpbmZvX3N0cmVh
bTsKLQkJcmN2aW5mby0+cmN2X3NzbiA9IHNpbmZvLT5zaW5mb19zc247Ci0JCXJjdmluZm8tPnJj
dl9mbGFncyA9IHNpbmZvLT5zaW5mb19mbGFnczsKLQkJcmN2aW5mby0+cmN2X3BwaWQgPSBzaW5m
by0+c2luZm9fcHBpZDsKLQkJcmN2aW5mby0+cmN2X3RzbiA9IHNpbmZvLT5zaW5mb190c247Ci0J
CXJjdmluZm8tPnJjdl9jdW10c24gPSBzaW5mby0+c2luZm9fY3VtdHNuOwotCQlyY3ZpbmZvLT5y
Y3ZfY29udGV4dCA9IHNpbmZvLT5zaW5mb19jb250ZXh0OwotCQlyY3ZpbmZvLT5yY3ZfYXNzb2Nf
aWQgPSBzaW5mby0+c2luZm9fYXNzb2NfaWQ7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCQljbWggPSAoV1NBQ01TR0hEUiAqKSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNF
KHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSkpOwotI2Vsc2UKLQkJY21oID0gKHN0cnVjdCBj
bXNnaGRyICopKChjYWRkcl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3Jj
dmluZm8pKSk7Ci0jZW5kaWYKLQkJU0NUUF9CVUZfTEVOKHJldCkgKz0gQ01TR19TUEFDRShzaXpl
b2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOwotCX0KLQlpZiAocHJvdmlkZV9ueHQpIHsKLQkJY21o
LT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwotCQljbWgtPmNtc2dfbGVuID0gQ01TR19MRU4o
c2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKTsKLQkJY21oLT5jbXNnX3R5cGUgPSBTQ1RQX05Y
VElORk87Ci0JCW54dGluZm8gPSAoc3RydWN0IHNjdHBfbnh0aW5mbyAqKUNNU0dfREFUQShjbWgp
OwotCQlueHRpbmZvLT5ueHRfc2lkID0gc2VpbmZvLT5zZXJpbmZvX25leHRfc3RyZWFtOwotCQlu
eHRpbmZvLT5ueHRfZmxhZ3MgPSAwOwotCQlpZiAoc2VpbmZvLT5zZXJpbmZvX25leHRfZmxhZ3Mg
JiBTQ1RQX05FWFRfTVNHX0lTX1VOT1JERVJFRCkgewotCQkJbnh0aW5mby0+bnh0X2ZsYWdzIHw9
IFNDVFBfVU5PUkRFUkVEOwotCQl9Ci0JCWlmIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAm
IFNDVFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OKSB7Ci0JCQlueHRpbmZvLT5ueHRfZmxhZ3Mg
fD0gU0NUUF9OT1RJRklDQVRJT047Ci0JCX0KLQkJaWYgKHNlaW5mby0+c2VyaW5mb19uZXh0X2Zs
YWdzICYgU0NUUF9ORVhUX01TR19JU0NPTVBMRVRFKSB7Ci0JCQlueHRpbmZvLT5ueHRfZmxhZ3Mg
fD0gU0NUUF9DT01QTEVURTsKLQkJfQotCQlueHRpbmZvLT5ueHRfcHBpZCA9IHNlaW5mby0+c2Vy
aW5mb19uZXh0X3BwaWQ7Ci0JCW54dGluZm8tPm54dF9sZW5ndGggPSBzZWluZm8tPnNlcmluZm9f
bmV4dF9sZW5ndGg7Ci0JCW54dGluZm8tPm54dF9hc3NvY19pZCA9IHNlaW5mby0+c2VyaW5mb19u
ZXh0X2FpZDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCWNtaCA9IChX
U0FDTVNHSERSICopKChjYWRkcl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3Rw
X254dGluZm8pKSk7Ci0jZWxzZQotCQljbWggPSAoc3RydWN0IGNtc2doZHIgKikoKGNhZGRyX3Qp
Y21oICsgQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpKTsKLSNlbmRpZgot
CQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9ueHRp
bmZvKSk7Ci0JfQotCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19S
RUNWREFUQUlPRVZOVCkpIHsKLQkJY21oLT5jbXNnX2xldmVsID0gSVBQUk9UT19TQ1RQOwotCQlv
dXRpbmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilDTVNHX0RBVEEoY21oKTsKLQkJaWYg
KHVzZV9leHRlbmRlZCkgewotCQkJY21oLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNpemVvZihzdHJ1
Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7Ci0JCQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfRVhUUkNWOwot
CQkJbWVtY3B5KG91dGluZm8sIHNpbmZvLCBzaXplb2Yoc3RydWN0IHNjdHBfZXh0cmN2aW5mbykp
OwotCQkJU0NUUF9CVUZfTEVOKHJldCkgKz0gQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBf
ZXh0cmN2aW5mbykpOwotCQl9IGVsc2UgewotCQkJY21oLT5jbXNnX2xlbiA9IENNU0dfTEVOKHNp
emVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Ci0JCQljbWgtPmNtc2dfdHlwZSA9IFNDVFBf
U05EUkNWOwotCQkJKm91dGluZm8gPSAqc2luZm87Ci0JCQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBD
TVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7Ci0JCX0KLQl9Ci0JcmV0
dXJuIChyZXQpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX21hcmtfbm9uX3Jldm9rYWJsZShz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdWludDMyX3QgdHNuKQotewotCXVpbnQzMl90
IGdhcCwgaSwgY3VtYWNrcDE7Ci0JaW50IGZuZCA9IDA7Ci0JaW50IGluX3I9MCwgaW5fbnI9MDsK
LQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RvX2RyYWluKSA9PSAwKSB7Ci0JCXJldHVybjsK
LQl9Ci0JY3VtYWNrcDEgPSBhc29jLT5jdW11bGF0aXZlX3RzbiArIDE7Ci0JaWYgKFNDVFBfVFNO
X0dUKGN1bWFja3AxLCB0c24pKSB7Ci0JCS8qIHRoaXMgdHNuIGlzIGJlaGluZCB0aGUgY3VtIGFj
ayBhbmQgdGh1cyB3ZSBkb24ndAotCQkgKiBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0IGJlaW5nIG1v
dmVkIGZyb20gb25lIHRvIHRoZSBvdGhlci4KLQkJICovCi0JCXJldHVybjsKLQl9Ci0JU0NUUF9D
QUxDX1RTTl9UT19HQVAoZ2FwLCB0c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwot
CWluX3IgPSBTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0J
aW5fbnIgPSBTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCk7
Ci0JaWYgKChpbl9yID09IDApICYmIChpbl9uciA9PSAwKSkgewotI2lmZGVmIElOVkFSSUFOVFMK
LQkJcGFuaWMoIlRoaW5ncyBhcmUgcmVhbGx5IG1lc3NlZCB1cCBub3ciKTsKLSNlbHNlCi0JCVND
VFBfUFJJTlRGKCJnYXA6JXggdHNuOiV4XG4iLCBnYXAsIHRzbik7Ci0JCXNjdHBfcHJpbnRfbWFw
cGluZ19hcnJheShhc29jKTsKLSNlbmRpZgotCX0KLQlpZiAoaW5fbnIgPT0gMCkKLQkJU0NUUF9T
RVRfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKLQlpZiAoaW5fcikK
LQkJU0NUUF9VTlNFVF9UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOwotCWlm
IChTQ1RQX1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7Ci0J
CWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSB0c247Ci0JfQotCWlmICh0c24gPT0g
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkgewotCQkvKiBXZSBtdXN0IGJhY2sgZG93biB0
byBzZWUgd2hhdCB0aGUgbmV3IGhpZ2hlc3QgaXMgKi8KLQkJZm9yIChpID0gdHNuIC0gMTsgU0NU
UF9UU05fR0UoaSwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7IGktLSkgewotCQkJU0NU
UF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsK
LQkJCWlmIChTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCkpIHsK
LQkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gaTsKLQkJCQlmbmQgPSAxOwotCQkJ
CWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghZm5kKSB7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9p
bnNpZGVfbWFwID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIDE7Ci0JCX0KLQl9Ci19
Ci0KLXN0YXRpYyBpbnQKLXNjdHBfcGxhY2VfY29udHJvbF9pbl9zdHJlYW0oc3RydWN0IHNjdHBf
c3RyZWFtX2luICpzdHJtLAotCQkJICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
LQkJCSAgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wpCi17Ci0Jc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKmF0OwotCXN0cnVjdCBzY3RwX3JlYWRoZWFkICpxOwotCXVp
bnQ4X3QgZmxhZ3MsIHVub3JkZXJlZDsKLQotCWZsYWdzID0gKGNvbnRyb2wtPnNpbmZvX2ZsYWdz
ID4+IDgpOwotCXVub3JkZXJlZCA9IGZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRDsKLQlpZiAo
dW5vcmRlcmVkKSB7Ci0JCXEgPSAmc3RybS0+dW5vX2lucXVldWU7Ci0JCWlmIChhc29jLT5pZGF0
YV9zdXBwb3J0ZWQgPT0gMCkgewotCQkJaWYgKCFUQUlMUV9FTVBUWShxKSkgewotCQkJCS8qIE9u
bHkgb25lIHN0cmVhbSBjYW4gYmUgaGVyZSBpbiBvbGQgc3R5bGUgIC0tIGFib3J0ICovCi0JCQkJ
cmV0dXJuICgtMSk7Ci0JCQl9Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTChxLCBjb250cm9sLCBuZXh0
X2luc3RybSk7Ci0JCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JERVJFRDsKLQkJ
CXJldHVybiAoMCk7Ci0JCX0KLQl9IGVsc2UgewotCQlxID0gJnN0cm0tPmlucXVldWU7Ci0JfQot
CWlmICgoZmxhZ3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykg
ewotCQljb250cm9sLT5lbmRfYWRkZWQgPSAxOwotCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4g
PSAxOwotCQljb250cm9sLT5sYXN0X2ZyYWdfc2VlbiA9IDE7Ci0JfQotCWlmIChUQUlMUV9FTVBU
WShxKSkgewotCQkvKiBFbXB0eSBxdWV1ZSAqLwotCQlUQUlMUV9JTlNFUlRfSEVBRChxLCBjb250
cm9sLCBuZXh0X2luc3RybSk7Ci0JCWlmICh1bm9yZGVyZWQpIHsKLQkJCWNvbnRyb2wtPm9uX3N0
cm1fcSA9IFNDVFBfT05fVU5PUkRFUkVEOwotCQl9IGVsc2UgewotCQkJY29udHJvbC0+b25fc3Ry
bV9xID0gU0NUUF9PTl9PUkRFUkVEOwotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfSBlbHNlIHsKLQkJ
VEFJTFFfRk9SRUFDSChhdCwgcSwgbmV4dF9pbnN0cm0pIHsKLQkJCWlmIChTQ1RQX01JRF9HVChh
c29jLT5pZGF0YV9zdXBwb3J0ZWQsIGF0LT5taWQsIGNvbnRyb2wtPm1pZCkpIHsKLQkJCQkvKgot
CQkJCSAqIG9uZSBpbiBxdWV1ZSBpcyBiaWdnZXIgdGhhbiB0aGUKLQkJCQkgKiBuZXcgb25lLCBp
bnNlcnQgYmVmb3JlIHRoaXMgb25lCi0JCQkJICovCi0JCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShh
dCwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCWlmICh1bm9yZGVyZWQpIHsKLQkJCQkJY29u
dHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ
Y29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9PUkRFUkVEIDsKLQkJCQl9Ci0JCQkJYnJlYWs7
Ci0JCQl9IGVsc2UgaWYgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXQtPm1p
ZCwgY29udHJvbC0+bWlkKSkgewotCQkJCS8qCi0JCQkJICogR2FrLCBIZSBzZW50IG1lIGEgZHVw
bGljYXRlIG1zZwotCQkJCSAqIGlkIG51bWJlcj8/IHJldHVybiAtMSB0byBhYm9ydC4KLQkJCQkg
Ki8KLQkJCQlyZXR1cm4gKC0xKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFRBSUxRX05FWFQoYXQs
IG5leHRfaW5zdHJtKSA9PSBOVUxMKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFdlIGFyZSBhdCB0aGUg
ZW5kLCBpbnNlcnQKLQkJCQkJICogaXQgYWZ0ZXIgdGhpcyBvbmUKLQkJCQkJICovCi0JCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5H
X0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfc3RybV9kZWwoY29udHJvbCwgYXQsCi0JCQkJCQkJ
CSAgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX1RMKTsKLQkJCQkJfQotCQkJCQlUQUlMUV9JTlNF
UlRfQUZURVIocSwgYXQsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJCQkJaWYgKHVub3JkZXJl
ZCkgewotCQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQgOwotCQkJ
CQl9IGVsc2UgewotCQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9PUkRFUkVEIDsK
LQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuICgwKTsK
LX0KLQotc3RhdGljIHZvaWQKLXNjdHBfYWJvcnRfaW5fcmVhc20oc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAot
ICAgICAgICAgICAgICAgICAgICBpbnQgKmFib3J0X2ZsYWcsIGludCBvcHNwb3QpCi17Ci0JY2hh
ciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQlzdHJ1Y3QgbWJ1ZiAqb3BlcjsKLQotCWlmIChz
dGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgewotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cp
LAotCQkJICJSZWFzcyAleCxDRjoleCxUU049JTguOHgsU0lEPSU0LjR4LEZTTj0lOC44eCxNSUQ6
JTguOHgiLAotCQkJIG9wc3BvdCwKLQkJCSBjb250cm9sLT5mc25faW5jbHVkZWQsCi0JCQkgY2hr
LT5yZWMuZGF0YS50c24sCi0JCQkgY2hrLT5yZWMuZGF0YS5zaWQsCi0JCQkgY2hrLT5yZWMuZGF0
YS5mc24sIGNoay0+cmVjLmRhdGEubWlkKTsKLQl9IGVsc2UgewotCQlzbnByaW50Zihtc2csIHNp
emVvZihtc2cpLAotCQkJICJSZWFzcyAleCxDSToleCxUU049JTguOHgsU0lEPSU0LjR4LEZTTj0l
NC40eCxTU046JTQuNHgiLAotCQkJIG9wc3BvdCwKLQkJCSBjb250cm9sLT5mc25faW5jbHVkZWQs
Ci0JCQkgY2hrLT5yZWMuZGF0YS50c24sCi0JCQkgY2hrLT5yZWMuZGF0YS5zaWQsCi0JCQkgY2hr
LT5yZWMuZGF0YS5mc24sCi0JCQkgKHVpbnQxNl90KWNoay0+cmVjLmRhdGEubWlkKTsKLQl9Ci0J
b3BlciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04s
IG1zZyk7Ci0Jc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JY2hrLT5kYXRhID0gTlVMTDsKLQlz
Y3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0Jc3RjYi0+
c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9M
T0NfMTsKLQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9w
ZXIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JKmFib3J0X2ZsYWcgPSAxOwotfQotCi1zdGF0aWMg
dm9pZAotc2N0cF9jbGVhbl91cF9jb250cm9sKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wpCi17Ci0JLyogCi0JICogVGhlIGNvbnRyb2wg
Y291bGQgbm90IGJlIHBsYWNlZCBhbmQgbXVzdCBiZSBjbGVhbmVkLgotCSAqLwotCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNv
bnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZFKCZjb250cm9s
LT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOwotCQlpZiAoY2hrLT5kYXRhKQotCQkJc2N0cF9tX2Zy
ZWVtKGNoay0+ZGF0YSk7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5r
KHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0Jc2N0cF9mcmVlX2FfcmVhZHEo
c3RjYiwgY29udHJvbCk7CQotfQotCi0vKgotICogUXVldWUgdGhlIGNodW5rIGVpdGhlciByaWdo
dCBpbnRvIHRoZSBzb2NrZXQgYnVmZmVyIGlmIGl0IGlzIHRoZSBuZXh0IG9uZQotICogdG8gZ28g
T1IgcHV0IGl0IGluIHRoZSBjb3JyZWN0IHBsYWNlIGluIHRoZSBkZWxpdmVyeSBxdWV1ZS4gIElm
IHdlIGRvCi0gKiBhcHBlbmQgdG8gdGhlIHNvX2J1Ziwga2VlcCBkb2luZyBzbyB1bnRpbCB3ZSBh
cmUgb3V0IG9mIG9yZGVyIGFzCi0gKiBsb25nIGFzIHRoZSBjb250cm9sJ3MgZW50ZXJlZCBhcmUg
bm9uLWZyYWdtZW50ZWQuCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX3F1ZXVlX2RhdGFfdG9fc3Ry
ZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKLSAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgaW50ICphYm9y
dF9mbGFnLCBpbnQgKm5lZWRfcmVhc20pCi17Ci0JLyoKLQkgKiBGSVgtTUUgbWF5YmU/IFdoYXQg
aGFwcGVucyB3aGVuIHRoZSBzc24gd3JhcHM/IElmIHdlIGFyZSBnZXR0aW5nCi0JICogYWxsIHRo
ZSBkYXRhIGluIG9uZSBzdHJlYW0gdGhpcyBjb3VsZCBoYXBwZW4gcXVpdGUgcmFwaWRseS4gT25l
Ci0JICogY291bGQgdXNlIHRoZSBUU04gdG8ga2VlcCB0cmFjayBvZiB0aGluZ3MsIGJ1dCB0aGlz
IHNjaGVtZSBicmVha3MKLQkgKiBkb3duIGluIHRoZSBvdGhlciB0eXBlIG9mIHN0cmVhbSB1c2Fn
ZSB0aGF0IGNvdWxkIG9jY3VyLiBTZW5kIGEKLQkgKiBzaW5nbGUgbXNnIHRvIHN0cmVhbSAwLCBz
ZW5kIDRCaWxsaW9uIG1lc3NhZ2VzIHRvIHN0cmVhbSAxLCBub3cKLQkgKiBzZW5kIGEgbWVzc2Fn
ZSB0byBzdHJlYW0gMC4gWW91IGhhdmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIFRTTgotCSAqIGhh
cyB3cmFwcGVkIGJ1dCBub3QgaW4gdGhlIHN0cmVhbS4gSXMgdGhpcyB3b3J0aCB3b3JyeWluZyBh
Ym91dAotCSAqIG9yIHNob3VsZCB3ZSBqdXN0IGNoYW5nZSBvdXIgcXVldWUgc29ydCBhdCB0aGUg
Ym90dG9tIHRvIGJlIGJ5Ci0JICogVFNOLgotCSAqCi0JICogQ291bGQgaXQgYWxzbyBiZSBsZWdh
bCBmb3IgYSBwZWVyIHRvIHNlbmQgc3NuIDEgd2l0aCBUU04gMiBhbmQgc3NuIDIKLQkgKiB3aXRo
IFRTTiAxPyBJZiB0aGUgcGVlciBpcyBkb2luZyBzb21lIHNvcnQgb2YgZnVua3kgVFNOL1NTTgot
CSAqIGFzc2lnbm1lbnQgdGhpcyBjb3VsZCBoYXBwZW4uLi4gYW5kIEkgZG9uJ3Qgc2VlIGhvdyB0
aGlzIHdvdWxkIGJlCi0JICogYSB2aW9sYXRpb24uIFNvIGZvciBub3cgSSBhbSB1bmRlY2lkZWQg
YW4gd2lsbCBsZWF2ZSB0aGUgc29ydCBieQotCSAqIFNTTiBhbG9uZS4gTWF5YmUgYSBoeWJyZWQg
YXBwcm9hY2ggaXMgdGhlIGFuc3dlcgotCSAqCi0JICovCi0Jc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKmF0OwotCWludCBxdWV1ZV9uZWVkZWQ7Ci0JdWludDMyX3Qgbnh0X3RvZGVsOwotCXN0
cnVjdCBtYnVmICpvcF9lcnI7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtOwotCWNoYXIg
bXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQlzdHJtID0gJmFzb2MtPnN0cm1pbltjb250cm9s
LT5zaW5mb19zdHJlYW1dOwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19zdHJtX2RlbChjb250
cm9sLCBOVUxMLCBTQ1RQX1NUUl9MT0dfRlJPTV9JTlRPX1NUUkQpOwotCX0KLQlpZiAoU0NUUF9N
SURfR1QoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCksIHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCwg
Y29udHJvbC0+bWlkKSkgewotCQkvKiBUaGUgaW5jb21pbmcgc3NlcSBpcyBiZWhpbmQgd2hlcmUg
d2UgbGFzdCBkZWxpdmVyZWQ/ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTkRBVEExLCAiRHVw
bGljYXRlIFMtU0VROiAldSBkZWxpdmVyZWQ6ICV1IGZyb20gcGVlciwgQWJvcnQgYXNzb2NpYXRp
b25cbiIsCi0JCQlzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQsIGNvbnRyb2wtPm1pZCk7Ci0JCS8q
Ci0JCSAqIHRocm93IGl0IGluIHRoZSBzdHJlYW0gc28gaXQgZ2V0cyBjbGVhbmVkIHVwIGluCi0J
CSAqIGFzc29jaWF0aW9uIGRlc3RydWN0aW9uCi0JCSAqLwotCQlUQUlMUV9JTlNFUlRfSEVBRCgm
c3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQlpZiAoYXNvYy0+aWRhdGFf
c3VwcG9ydGVkKSB7Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIE1J
RD0lOC44eCwgZ290IFRTTj0lOC44eCwgU0lEPSU0LjR4LCBNSUQ9JTguOHgiLAotCQkJICAgICAg
ICAgc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLCBjb250cm9sLT5zaW5mb190c24sCi0JCQkgICAg
ICAgICBjb250cm9sLT5zaW5mb19zdHJlYW0sIGNvbnRyb2wtPm1pZCk7Ci0JCX0gZWxzZSB7Ci0J
CQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVkIFNTTj0lNC40eCwgZ290IFRT
Tj0lOC44eCwgU0lEPSU0LjR4LCBTU049JTQuNHgiLAotCQkJICAgICAgICAgKHVpbnQxNl90KXN0
cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCwKLQkJCSAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3RzbiwK
LQkJCSAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3N0cmVhbSwKLQkJCSAgICAgICAgICh1aW50MTZf
dCljb250cm9sLT5taWQpOwotCQl9Ci0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NU
UF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0JCXN0Y2ItPnNjdHBfZXAtPmxhc3Rf
YWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI7Ci0JCXNjdHBf
YWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCQkqYWJvcnRfZmxhZyA9IDE7Ci0JCXJldHVybjsKLQotCX0KLQlxdWV1
ZV9uZWVkZWQgPSAxOwotCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gY29udHJvbC0+bGVu
Z3RoOwotCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQlueHRf
dG9kZWwgPSBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQgKyAxOwotCWlmIChTQ1RQX01JRF9FUShh
c29jLT5pZGF0YV9zdXBwb3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlkKSkgewotI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzdHJ1
Y3Qgc29ja2V0ICpzbzsKLQotCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCWlmIChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsK
LQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgot
CQkvKiBjYW4gYmUgZGVsaXZlcmVkIHJpZ2h0IGF3YXk/ICovCi0JCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJ
c2N0cF9sb2dfc3RybV9kZWwoY29udHJvbCwgTlVMTCwgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURf
REVMKTsKLQkJfQotCQkvKiBFWSBpdCB3b250IGJlIHF1ZXVlZCBpZiBpdCBjb3VsZCBiZSBkZWxp
dmVyZWQgZGlyZWN0bHkgKi8KLQkJcXVldWVfbmVlZGVkID0gMDsKLQkJaWYgKGFzb2MtPnNpemVf
b25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0JCQlhc29jLT5zaXplX29uX2Fs
bF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKLQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklB
TlRTCi0JCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250
cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0
aCk7Ci0jZWxzZQotCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7Ci0jZW5kaWYKLQkJ
fQotCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCXN0cm0t
Pmxhc3RfbWlkX2RlbGl2ZXJlZCsrOwotCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBj
b250cm9sLT5zaW5mb190c24pOwotCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBz
dGNiLAotCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAm
c3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKLQkJICAgICAgICAgICAgICAgICAgU0NUUF9S
RUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTE9DS0VEKTsKLQkJVEFJTFFfRk9SRUFDSF9TQUZF
KGNvbnRyb2wsICZzdHJtLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgYXQpIHsKLQkJCS8qIGFsbCBk
ZWxpdmVyZWQgKi8KLQkJCW54dF90b2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7
Ci0JCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBueHRfdG9kZWwsIGNv
bnRyb2wtPm1pZCkgJiYKLQkJCSAgICAoKChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4KSAmIFND
VFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9EQVRBX05PVF9GUkFHKSkgewotCQkJCWlmIChjb250
cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgm
c3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCQlpZiAoYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJCWFzb2MtPnNpemVf
b25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOwotCQkJCQl9IGVsc2UgewotI2lmZGVm
IElOVkFSSUFOVFMKLQkJCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxl
ciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29u
dHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0JCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0g
MDsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2Fs
bF9zdHJlYW1zKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJfSBlbHNlIHsKLQkJCQkJcGFuaWMo
Ikh1aCBjb250cm9sOiAlcCBpcyBvbl9zdHJtX3E6ICVkIiwKLQkJCQkJICAgICAgY29udHJvbCwg
Y29udHJvbC0+b25fc3RybV9xKTsKLSNlbmRpZgotCQkJCX0KLQkJCQljb250cm9sLT5vbl9zdHJt
X3EgPSAwOwotCQkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCsrOwotCQkJCS8qCi0JCQkJICog
V2UgaWdub3JlIHRoZSByZXR1cm4gb2YgZGVsaXZlcl9kYXRhIGhlcmUKLQkJCQkgKiBzaW5jZSB3
ZSBhbHdheXMgY2FuIGhvbGQgdGhlIGNodW5rIG9uIHRoZQotCQkJCSAqIGQtcXVldWUuIEFuZCB3
ZSBoYXZlIGEgZmluaXRlIG51bWJlciB0aGF0Ci0JCQkJICogY2FuIGJlIGRlbGl2ZXJlZCBmcm9t
IHRoZSBzdHJxLgotCQkJCSAqLwotCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19zdHJt
X2RlbChjb250cm9sLCBOVUxMLAotCQkJCQkJCSAgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVM
KTsKLQkJCQl9Ci0JCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+c2lu
Zm9fdHNuKTsKLQkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJ
CSAgICAgICAgICAgICAgICAgIGNvbnRyb2wsCi0JCQkJICAgICAgICAgICAgICAgICAgJnN0Y2It
PnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCi0JCQkJICAgICAgICAgICAgICAgICAgU0NUUF9SRUFE
X0xPQ0tfTk9UX0hFTEQsCi0JCQkJICAgICAgICAgICAgICAgICAgU0NUUF9TT19MT0NLRUQpOwot
CQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIGlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlkKSkgewotCQkJCSpuZWVkX3JlYXNtID0gMTsK
LQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5k
aWYKLQl9Ci0JaWYgKHF1ZXVlX25lZWRlZCkgewotCQkvKgotCQkgKiBPaywgd2UgZGlkIG5vdCBk
ZWxpdmVyIHRoaXMgZ3V5LCBmaW5kIHRoZSBjb3JyZWN0IHBsYWNlCi0JCSAqIHRvIHB1dCBpdCBv
biB0aGUgcXVldWUuCi0JCSAqLwotCQlpZiAoc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShz
dHJtLCBhc29jLCBjb250cm9sKSkgewotCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKLQkJ
CQkgIlF1ZXVlIHRvIHN0ciBNSUQ6ICV1IGR1cGxpY2F0ZSIsCi0JCQkJIGNvbnRyb2wtPm1pZCk7
Ci0JCQlzY3RwX2NsZWFuX3VwX2NvbnRyb2woc3RjYiwgY29udHJvbCk7Ci0JCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwot
CQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRB
ICsgU0NUUF9MT0NfMzsKLQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9l
cCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJKmFib3J0X2ZsYWcgPSAx
OwotCQl9Ci0JfQotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX3NldHVwX3RhaWxfcG9pbnRlcihz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbSwg
KnByZXYgPSBOVUxMOwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQotCXN0Y2IgPSBjb250cm9s
LT5zdGNiOwotCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gMDsKLQljb250cm9sLT5sZW5ndGggPSAw
OwotCW0gPSBjb250cm9sLT5kYXRhOwotCXdoaWxlIChtKSB7Ci0JCWlmIChTQ1RQX0JVRl9MRU4o
bSkgPT0gMCkgewotCQkJLyogU2tpcCBtYnVmcyB3aXRoIE5PIGxlbmd0aCAqLwotCQkJaWYgKHBy
ZXYgPT0gTlVMTCkgewotCQkJCS8qIEZpcnN0IG9uZSAqLwotCQkJCWNvbnRyb2wtPmRhdGEgPSBz
Y3RwX21fZnJlZShtKTsKLQkJCQltID0gY29udHJvbC0+ZGF0YTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
U0NUUF9CVUZfTkVYVChwcmV2KSA9IHNjdHBfbV9mcmVlKG0pOwotCQkJCW0gPSBTQ1RQX0JVRl9O
RVhUKHByZXYpOwotCQkJfQotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCWNvbnRyb2wtPnRhaWxf
bWJ1ZiA9IHByZXY7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcmV2ID0gbTsKLQkJYXRv
bWljX2FkZF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJaWYgKGNv
bnRyb2wtPm9uX3JlYWRfcSkgewotCQkJLyoKLQkJCSAqIE9uIHJlYWQgcXVldWUgc28gd2UgbXVz
dCBpbmNyZW1lbnQgdGhlCi0JCQkgKiBTQiBzdHVmZiwgd2UgYXNzdW1lIGNhbGxlciBoYXMgZG9u
ZSBhbnkgbG9ja3Mgb2YgU0IuCi0JCQkgKi8KLQkJCXNjdHBfc2JhbGxvYyhzdGNiLCAmc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX3JjdiwgbSk7Ci0JCX0KLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0J
fQotCWlmIChwcmV2KSB7Ci0JCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7Ci0JfQotfQotCi1z
dGF0aWMgdm9pZAotc2N0cF9hZGRfdG9fdGFpbF9wb2ludGVyKHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sLCBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3QgKmFkZGVkKQotewotCXN0
cnVjdCBtYnVmICpwcmV2PU5VTEw7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCi0Jc3RjYiA9
IGNvbnRyb2wtPnN0Y2I7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotI2lmZGVmIElOVkFSSUFOVFMK
LQkJcGFuaWMoIkNvbnRyb2wgYnJva2VuIik7Ci0jZWxzZQotCQlyZXR1cm47Ci0jZW5kaWYKLQl9
Ci0JaWYgKGNvbnRyb2wtPnRhaWxfbWJ1ZiA9PSBOVUxMKSB7Ci0JCS8qIFRTTkggKi8KLQkJY29u
dHJvbC0+ZGF0YSA9IG07Ci0JCXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKGNvbnRyb2wpOwotCQly
ZXR1cm47Ci0JfQotCWNvbnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0ID0gbTsKLQl3aGlsZSAobSkg
ewotCQlpZiAoU0NUUF9CVUZfTEVOKG0pID09IDApIHsKLQkJCS8qIFNraXAgbWJ1ZnMgd2l0aCBO
TyBsZW5ndGggKi8KLQkJCWlmIChwcmV2ID09IE5VTEwpIHsKLQkJCQkvKiBGaXJzdCBvbmUgKi8K
LQkJCQljb250cm9sLT50YWlsX21idWYtPm1fbmV4dCA9IHNjdHBfbV9mcmVlKG0pOwotCQkJCW0g
PSBjb250cm9sLT50YWlsX21idWYtPm1fbmV4dDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9CVUZf
TkVYVChwcmV2KSA9IHNjdHBfbV9mcmVlKG0pOwotCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKHByZXYp
OwotCQkJfQotCQkJaWYgKG0gPT0gTlVMTCkgewotCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IHBy
ZXY7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQlwcmV2ID0gbTsKLQkJaWYgKGNvbnRyb2wt
Pm9uX3JlYWRfcSkgewotCQkJLyoKLQkJCSAqIE9uIHJlYWQgcXVldWUgc28gd2UgbXVzdCBpbmNy
ZW1lbnQgdGhlCi0JCQkgKiBTQiBzdHVmZiwgd2UgYXNzdW1lIGNhbGxlciBoYXMgZG9uZSBhbnkg
bG9ja3Mgb2YgU0IuCi0JCQkgKi8KLQkJCXNjdHBfc2JhbGxvYyhzdGNiLCAmc3RjYi0+c2N0cF9z
b2NrZXQtPnNvX3JjdiwgbSk7Ci0JCX0KLQkJKmFkZGVkICs9IFNDVFBfQlVGX0xFTihtKTsKLQkJ
YXRvbWljX2FkZF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJbSA9
IFNDVFBfQlVGX05FWFQobSk7Ci0JfQotCWlmIChwcmV2KSB7Ci0JCWNvbnRyb2wtPnRhaWxfbWJ1
ZiA9IHByZXY7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCAKLXNjdHBfYnVpbGRfcmVhZHFfZW50cnlf
ZnJvbV9jdGwoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKm5jLCBzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbCkKLXsKLQltZW1zZXQobmMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCkpOwotCW5jLT5zaW5mb19zdHJlYW0gPSBjb250cm9sLT5zaW5mb19z
dHJlYW07Ci0JbmMtPm1pZCA9IGNvbnRyb2wtPm1pZDsKLQlUQUlMUV9JTklUKCZuYy0+cmVhc20p
OwotCW5jLT50b3BfZnNuID0gY29udHJvbC0+dG9wX2ZzbjsKLQluYy0+bWlkID0gY29udHJvbC0+
bWlkOwotCW5jLT5zaW5mb19mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOwotCW5jLT5zaW5m
b19wcGlkID0gY29udHJvbC0+c2luZm9fcHBpZDsKLQluYy0+c2luZm9fY29udGV4dCA9IGNvbnRy
b2wtPnNpbmZvX2NvbnRleHQ7Ci0JbmMtPmZzbl9pbmNsdWRlZCA9IDB4ZmZmZmZmZmY7Ci0JbmMt
PnNpbmZvX3RzbiA9IGNvbnRyb2wtPnNpbmZvX3RzbjsKLQluYy0+c2luZm9fY3VtdHNuID0gY29u
dHJvbC0+c2luZm9fY3VtdHNuOwotCW5jLT5zaW5mb19hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZv
X2Fzc29jX2lkOwotCW5jLT53aG9Gcm9tID0gY29udHJvbC0+d2hvRnJvbTsKLQlhdG9taWNfYWRk
X2ludCgmbmMtPndob0Zyb20tPnJlZl9jb3VudCwgMSk7Ci0JbmMtPnN0Y2IgPSBjb250cm9sLT5z
dGNiOwotCW5jLT5wb3J0X2Zyb20gPSBjb250cm9sLT5wb3J0X2Zyb207Ci19Ci0KLXN0YXRpYyB2
b2lkIAotc2N0cF9yZXNldF9hX2NvbnRyb2woc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNv
bnRyb2wsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50
MzJfdCB0c24pCi17Ci0JY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gdHNuOwotCWlmIChjb250cm9s
LT5vbl9yZWFkX3EpIHsKLQkJLyogCi0JCSAqIFdlIGhhdmUgdG8gcHVyZ2UgaXQgZnJvbSB0aGVy
ZSwKLQkJICogaG9wZWZ1bGx5IHRoaXMgd2lsbCB3b3JrIDotKQotCQkgKi8KLQkJVEFJTFFfUkVN
T1ZFKCZpbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQljb250cm9sLT5vbl9yZWFk
X3EgPSAwOwotCX0KLX0KLQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfb2xkX3Vub3JkZXJlZF9k
YXRhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm0sCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcGRfcG9pbnQsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IGlucF9yZWFkX2xvY2tfaGVsZCkKLXsKLQkvKiBTcGVjaWFs
IGhhbmRsaW5nIGZvciB0aGUgb2xkIHVuLW9yZGVyZWQgZGF0YSBjaHVuay4KLQkgKiBBbGwgdGhl
IGNodW5rcy9UU04ncyBnbyB0byBtaWQgMC4gU28KLQkgKiB3ZSBoYXZlIHRvIGRvIHRoZSBvbGQg
c3R5bGUgd2F0Y2hpbmcgdG8gc2VlCi0JICogaWYgd2UgaGF2ZSBpdCBhbGwuIElmIHlvdSByZXR1
cm4gb25lLCBubyBvdGhlcgotCSAqIGNvbnRyb2wgZW50cmllcyBvbiB0aGUgdW4tb3JkZXJlZCBx
dWV1ZSB3aWxsCi0JICogYmUgbG9va2VkIGF0LiBJbiB0aGVvcnkgdGhlcmUgc2hvdWxkIGJlIG5v
IG90aGVycwotCSAqIGVudHJpZXMgaW4gcmVhbGl0eSwgdW5sZXNzIHRoZSBndXkgaXMgc2VuZGlu
ZyBib3RoCi0JICogdW5vcmRlcmVkIE5EQVRBIGFuZCB1bm9yZGVyZWQgREFUQS4uLgotCSAqLwot
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKmxjaGssICp0Y2hrOwotCXVpbnQzMl90IGZz
bjsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqbmM7Ci0JaW50IGNudF9hZGRlZDsKLQot
CWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPT0gMCkgewotCQkvKiBOb3RoaW5nIHdlIGNh
biBkbywgd2UgaGF2ZSBub3Qgc2VlbiB0aGUgZmlyc3QgcGllY2UgeWV0ICovCi0JCXJldHVybiAo
MSk7Ci0JfQotCS8qIENvbGxhcHNlIGFueSB3ZSBjYW4gKi8KLQljbnRfYWRkZWQgPSAwOwotcmVz
dGFydDoKLQlmc24gPSBjb250cm9sLT5mc25faW5jbHVkZWQgKyAxOwotCS8qIE5vdyB3aGF0IGNh
biB3ZSBhZGQ/ICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBz
Y3RwX25leHQsIGxjaGspIHsKLQkJaWYgKGNoay0+cmVjLmRhdGEuZnNuID09IGZzbikgewotCQkJ
LyogT2sgbGV0cyBhZGQgaXQgKi8KLQkJCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNiLCBuYyk7Ci0J
CQlpZiAobmMgPT0gTlVMTCkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJbWVtc2V0KG5jLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpKTsKLQkJCVRBSUxRX1JFTU9WRSgmY29u
dHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKLQkJCXNjdHBfYWRkX2Noa190b19jb250cm9s
KGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsIGNoaywgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQp
OwotCQkJZnNuKys7Ci0JCQljbnRfYWRkZWQrKzsKLQkJCWNoayA9IE5VTEw7Ci0JCQlpZiAoY29u
dHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQkJLyogV2UgYXJlIGRvbmUgKi8KLQkJCQlpZiAoIVRBSUxR
X0VNUFRZKCZjb250cm9sLT5yZWFzbSkpIHsKLQkJCQkJLyogCi0JCQkJCSAqIE9rIHdlIGhhdmUg
dG8gbW92ZSBhbnl0aGluZyBsZWZ0IG9uCi0JCQkJCSAqIHRoZSBjb250cm9sIHF1ZXVlIHRvIGEg
bmV3IGNvbnRyb2wuCi0JCQkJCSAqLwotCQkJCQlzY3RwX2J1aWxkX3JlYWRxX2VudHJ5X2Zyb21f
Y3RsKG5jLCBjb250cm9sKTsKLQkJCQkJdGNoayA9IFRBSUxRX0ZJUlNUKCZjb250cm9sLT5yZWFz
bSk7Ci0JCQkJCWlmICh0Y2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1Rf
RlJBRykgewotCQkJCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgdGNoaywgc2N0cF9u
ZXh0KTsKLQkJCQkJCWlmIChhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID49IHRjaGstPnNlbmRf
c2l6ZSkgewotCQkJCQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gdGNoay0+c2VuZF9z
aXplOwotCQkJCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCQlwYW5pYygic2l6
ZV9vbl9yZWFzbV9xdWV1ZSA9ICV1IHNtYWxsZXIgdGhhbiBjaHVuayBsZW5ndGggJXUiLCBhc29j
LT5zaXplX29uX3JlYXNtX3F1ZXVlLCB0Y2hrLT5zZW5kX3NpemUpOwotI2Vsc2UKLQkJCQkJCWFz
b2MtPnNpemVfb25fcmVhc21fcXVldWUgPSAwOwotI2VuZGlmCi0JCQkJCQl9Ci0JCQkJCQlzY3Rw
X3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7Ci0JCQkJCQluYy0+Zmlyc3Rf
ZnJhZ19zZWVuID0gMTsKLQkJCQkJCW5jLT5mc25faW5jbHVkZWQgPSB0Y2hrLT5yZWMuZGF0YS5m
c247Ci0JCQkJCQluYy0+ZGF0YSA9IHRjaGstPmRhdGE7Ci0JCQkJCQluYy0+c2luZm9fcHBpZCA9
IHRjaGstPnJlYy5kYXRhLnBwaWQ7Ci0JCQkJCQluYy0+c2luZm9fdHNuID0gdGNoay0+cmVjLmRh
dGEudHNuOwotCQkJCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgdGNoay0+cmVjLmRh
dGEudHNuKTsKLQkJCQkJCXRjaGstPmRhdGEgPSBOVUxMOwotCQkJCQkJc2N0cF9mcmVlX2FfY2h1
bmsoc3RjYiwgdGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJCXNjdHBfc2V0dXBfdGFp
bF9wb2ludGVyKG5jKTsKLQkJCQkJCXRjaGsgPSBUQUlMUV9GSVJTVCgmY29udHJvbC0+cmVhc20p
OwotCQkJCQl9Ci0JCQkJCS8qIFNwaW4gdGhlIHJlc3Qgb250byB0aGUgcXVldWUgKi8KLQkJCQkJ
d2hpbGUgKHRjaGspIHsKLQkJCQkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIHRjaGss
IHNjdHBfbmV4dCk7Ci0JCQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmbmMtPnJlYXNtLCB0Y2hrLCBz
Y3RwX25leHQpOwotCQkJCQkJdGNoayA9IFRBSUxRX0ZJUlNUKCZjb250cm9sLT5yZWFzbSk7Ci0J
CQkJCX0KLQkJCQkJLyogTm93IGxldHMgYWRkIGl0IHRvIHRoZSBxdWV1ZSBhZnRlciByZW1vdmlu
ZyBjb250cm9sICovCi0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdHJtLT51bm9faW5xdWV1ZSwg
bmMsIG5leHRfaW5zdHJtKTsKLQkJCQkJbmMtPm9uX3N0cm1fcSA9IFNDVFBfT05fVU5PUkRFUkVE
OwotCQkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0
cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJCQljb250cm9sLT5v
bl9zdHJtX3EgPSAwOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5wZGFwaV9zdGFy
dGVkKSB7Ci0JCQkJCXN0cm0tPnBkX2FwaV9zdGFydGVkID0gMDsKLQkJCQkJY29udHJvbC0+cGRh
cGlfc3RhcnRlZCA9IDA7Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKLQkJ
CQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0p
OwotCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VO
VEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKLQkJCQl9Ci0JCQkJaWYgKGNvbnRyb2wtPm9uX3Jl
YWRfcSA9PSAwKSB7Ci0JCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IGNvbnRyb2wsCi0JCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+
ZW5kX2FkZGVkLAotCQkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQl9IGVsc2UgewotCQkJCQlzY3Rw
X2ludm9rZV9yZWN2X2NhbGxiYWNrKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsIGlucF9y
ZWFkX2xvY2tfaGVsZCk7Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJc2N0cF93YWtldXBfdGhlX3JlYWRf
c29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJaWYg
KChuYy0+Zmlyc3RfZnJhZ19zZWVuKSAmJiAhVEFJTFFfRU1QVFkoJm5jLT5yZWFzbSkpIHsKLQkJ
CQkJLyogU3dpdGNoIHRvIHRoZSBuZXcgZ3V5IGFuZCBjb250aW51ZSAqLwotCQkJCQljb250cm9s
ID0gbmM7Ci0JCQkJCWdvdG8gcmVzdGFydDsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAobmMtPm9u
X3N0cm1fcSA9PSAwKSB7Ci0JCQkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBuYyk7Ci0JCQkJ
CX0KLQkJCQl9Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9mcmVlX2Ff
cmVhZHEoc3RjYiwgbmMpOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyogQ2FuJ3QgYWRkIG1vcmUg
Ki8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICgoY29udHJvbC0+bGVuZ3RoID4gcGRfcG9pbnQp
ICYmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCA9PSAwKSkgewotCQlzdHJtLT5wZF9hcGlfc3RhcnRl
ZCA9IDE7Ci0JCWNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQgPSAxOwotCQlzY3RwX2FkZF90b19yZWFk
cShzdGNiLT5zY3RwX2VwLCBzdGNiLCBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkgICAgICAgICAg
ICAgICAgICBpbnBfcmVhZF9sb2NrX2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCXNjdHBf
d2FrZXVwX3RoZV9yZWFkX3NvY2tldChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCQlyZXR1cm4gKDApOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotfQot
Ci1zdGF0aWMgdm9pZAotc2N0cF9pbmplY3Rfb2xkX3Vub3JkZXJlZF9kYXRhKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50ICphYm9ydF9mbGFnKQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmF0
OwotCWludCBpbnNlcnRlZDsKLQkvKgotCSAqIEhlcmUgd2UgbmVlZCB0byBwbGFjZSB0aGUgY2h1
bmsgaW50byB0aGUgY29udHJvbCBzdHJ1Y3R1cmUKLQkgKiBzb3J0ZWQgaW4gdGhlIGNvcnJlY3Qg
b3JkZXIuCi0JICovCi0JaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJ
UlNUX0ZSQUcpIHsKLQkJLyogSXRzIHRoZSB2ZXJ5IGZpcnN0IG9uZS4gKi8KLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1hYWCwKLQkJCSJjaHVuayBpcyBhIGZpcnN0IGZzbjogJXUgYmVjb21lcyBmc25f
aW5jbHVkZWRcbiIsCi0JCQljaGstPnJlYy5kYXRhLmZzbik7Ci0JCWlmIChjb250cm9sLT5maXJz
dF9mcmFnX3NlZW4pIHsKLQkJCS8qCi0JCQkgKiBJbiBvbGQgdW4tb3JkZXJlZCB3ZSBjYW4gcmVh
c3NlbWJseSBvbgotCQkJICogb25lIGNvbnRyb2wgbXVsdGlwbGUgbWVzc2FnZXMuIEFzIGxvbmcK
LQkJCSAqIGFzIHRoZSBuZXh0IEZJUlNUIGlzIGdyZWF0ZXIgdGhlbiB0aGUgb2xkCi0JCQkgKiBm
aXJzdCAoVFNOIGkuZS4gRlNOIHdpc2UpCi0JCQkgKi8KLQkJCXN0cnVjdCBtYnVmICp0ZGF0YTsK
LQkJCXVpbnQzMl90IHRtcDsKLQotCQkJaWYgKFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNu
LCBjb250cm9sLT5mc25faW5jbHVkZWQpKSB7Ci0JCQkJLyogRWFzeSB3YXkgdGhlIHN0YXJ0IG9m
IGEgbmV3IGd1eSBiZXlvbmQgdGhlIGxvd2VzdCAqLwotCQkJCWdvdG8gcGxhY2VfY2h1bms7Ci0J
CQl9Ci0JCQlpZiAoKGNoay0+cmVjLmRhdGEuZnNuID09IGNvbnRyb2wtPmZzbl9pbmNsdWRlZCkg
fHwKLQkJCSAgICAoY29udHJvbC0+cGRhcGlfc3RhcnRlZCkpIHsKLQkJCQkvKiAKLQkJCQkgKiBP
ayB0aGlzIHNob3VsZCBub3QgaGFwcGVuLCBpZiBpdCBkb2VzCi0JCQkJICogd2Ugc3RhcnRlZCB0
aGUgcGQtYXBpIG9uIHRoZSBoaWdoZXIgVFNOIChzaW5jZQotCQkJCSAqIHRoZSBlcXVhbHMgcGFy
dCBpcyBhIFRTTiBmYWlsdXJlIGl0IG11c3QgYmUgdGhhdCkuCi0JCQkJICoKLQkJCQkgKiBXZSBh
cmUgY29tcGxldGx5IGhvc2VkIGluIHRoYXQgY2FzZSBzaW5jZSBJIGhhdmUKLQkJCQkgKiBubyB3
YXkgdG8gcmVjb3Zlci4gVGhpcyByZWFsbHkgd2lsbCBvbmx5IGhhcHBlbgotCQkJCSAqIGlmIHdl
IGNhbiBnZXQgbW9yZSBUU04ncyBoaWdoZXIgYmVmb3JlIHRoZSBwZC1hcGktcG9pbnQuCi0JCQkJ
ICovCi0JCQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCi0JCQkJCQkg
ICAgYWJvcnRfZmxhZywKLQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xP
Q180KTsKLQotCQkJCXJldHVybjsKLQkJCX0KLQkJCS8qCi0JCQkgKiBPayB3ZSBoYXZlIHR3byBm
aXJzdHMgYW5kIHRoZSBvbmUgd2UganVzdCBnb3QKLQkJCSAqIGlzIHNtYWxsZXIgdGhhbiB0aGUg
b25lIHdlIHByZXZpb3VzbHkgcGxhY2VkLi4geXVjayEKLQkJCSAqIFdlIG11c3Qgc3dhcCB0aGVt
IG91dC4KLQkJCSAqLwotCQkJLyogc3dhcCB0aGUgbWJ1ZnMgKi8KLQkJCXRkYXRhID0gY29udHJv
bC0+ZGF0YTsKLQkJCWNvbnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7Ci0JCQljaGstPmRhdGEgPSB0
ZGF0YTsKLQkJCS8qIFNhdmUgdGhlIGxlbmd0aHMgKi8KLQkJCWNoay0+c2VuZF9zaXplID0gY29u
dHJvbC0+bGVuZ3RoOwotCQkJLyogUmVjb21wdXRlIGxlbmd0aCBvZiBjb250cm9sIGFuZCB0YWls
IHBvaW50ZXIgKi8KLQkJCXNjdHBfc2V0dXBfdGFpbF9wb2ludGVyKGNvbnRyb2wpOwotCQkJLyog
Rml4IHRoZSBGU04gaW5jbHVkZWQgKi8KLQkJCXRtcCA9IGNvbnRyb2wtPmZzbl9pbmNsdWRlZDsK
LQkJCWNvbnRyb2wtPmZzbl9pbmNsdWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQkJY2hrLT5y
ZWMuZGF0YS5mc24gPSB0bXA7Ci0JCQkvKiBGaXggdGhlIFRTTiBpbmNsdWRlZCAqLwotCQkJdG1w
ID0gY29udHJvbC0+c2luZm9fdHNuOwotCQkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMu
ZGF0YS50c247Ci0JCQljaGstPnJlYy5kYXRhLnRzbiA9IHRtcDsKLQkJCS8qIEZpeCB0aGUgUFBJ
RCBpbmNsdWRlZCAqLwotCQkJdG1wID0gY29udHJvbC0+c2luZm9fcHBpZDsKLQkJCWNvbnRyb2wt
PnNpbmZvX3BwaWQgPSBjaGstPnJlYy5kYXRhLnBwaWQ7Ci0JCQljaGstPnJlYy5kYXRhLnBwaWQg
PSB0bXA7Ci0JCQkvKiBGaXggdGFpbCBwb2ludGVyICovCi0JCQlnb3RvIHBsYWNlX2NodW5rOwot
CQl9Ci0JCWNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbiA9IDE7Ci0JCWNvbnRyb2wtPmZzbl9pbmNs
dWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQljb250cm9sLT50b3BfZnNuID0gY2hrLT5yZWMu
ZGF0YS5mc247Ci0JCWNvbnRyb2wtPnNpbmZvX3RzbiA9IGNoay0+cmVjLmRhdGEudHNuOwotCQlj
b250cm9sLT5zaW5mb19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOwotCQljb250cm9sLT5kYXRh
ID0gY2hrLT5kYXRhOwotCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjaGstPnJlYy5k
YXRhLnRzbik7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2Is
IGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29u
dHJvbCk7Ci0JCXJldHVybjsKLQl9Ci1wbGFjZV9jaHVuazoKLQlpbnNlcnRlZCA9IDA7Ci0JVEFJ
TFFfRk9SRUFDSChhdCwgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBf
VFNOX0dUKGF0LT5yZWMuZGF0YS5mc24sIGNoay0+cmVjLmRhdGEuZnNuKSkgewotCQkJLyoKLQkJ
CSAqIFRoaXMgb25lIGluIHF1ZXVlIGlzIGJpZ2dlciB0aGFuIHRoZSBuZXcgb25lLCBpbnNlcnQK
LQkJCSAqIHRoZSBuZXcgb25lIGJlZm9yZSBhdC4KLQkJCSAqLwotCQkJYXNvYy0+c2l6ZV9vbl9y
ZWFzbV9xdWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+
Y250X29uX3JlYXNtX3F1ZXVlKTsKLQkJCWluc2VydGVkID0gMTsKLQkJCVRBSUxRX0lOU0VSVF9C
RUZPUkUoYXQsIGNoaywgc2N0cF9uZXh0KTsKLQkJCWJyZWFrOwotCQl9IGVsc2UgaWYgKGF0LT5y
ZWMuZGF0YS5mc24gPT0gY2hrLT5yZWMuZGF0YS5mc24pIHsKLQkJCS8qIAotCQkJICogVGhleSBz
ZW50IGEgZHVwbGljYXRlIGZzbiBudW1iZXIuIFRoaXMKLQkJCSAqIHJlYWxseSBzaG91bGQgbm90
IGhhcHBlbiBzaW5jZSB0aGUgRlNOIGlzCi0JCQkgKiBhIFRTTiBhbmQgaXQgc2hvdWxkIGhhdmUg
YmVlbiBkcm9wcGVkIGVhcmxpZXIuCi0JCQkgKi8KLQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3Rj
YiwgY29udHJvbCwgY2hrLAotCQkJICAgICAgICAgICAgICAgICAgICBhYm9ydF9mbGFnLAotCQkJ
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ181KTsK
LQkJCXJldHVybjsKLQkJfQotCi0JfQotCWlmIChpbnNlcnRlZCA9PSAwKSB7Ci0JCS8qIEl0cyBh
dCB0aGUgZW5kICovCi0JCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgKz0gY2hrLT5zZW5kX3Np
emU7Ci0JCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKLQkJY29u
dHJvbC0+dG9wX2ZzbiA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgm
Y29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKLQl9Ci19Ci0KLXN0YXRpYyBpbnQKLXNj
dHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X3N0cmVhbV9pbiAqc3RybSwgaW50IGlucF9yZWFkX2xvY2tfaGVsZCkKLXsKLQkvKgotCSAqIEdp
dmVuIGEgc3RyZWFtLCBzdHJtLCBzZWUgaWYgYW55IG9mCi0JICogdGhlIFNTTidzIG9uIGl0IHRo
YXQgYXJlIGZyYWdtZW50ZWQKLQkgKiBhcmUgcmVhZHkgdG8gZGVsaXZlci4gSWYgc28gZ28gYWhl
YWQKLQkgKiBhbmQgcGxhY2UgdGhlbSBvbiB0aGUgcmVhZCBxdWV1ZS4gSW4KLQkgKiBzbyBwbGFj
aW5nIGlmIHdlIGhhdmUgaGl0IHRoZSBlbmQsIHRoZW4KLQkgKiB3ZSBuZWVkIHRvIHJlbW92ZSB0
aGVtIGZyb20gdGhlIHN0cmVhbSdzIHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sLCAqbmN0bCA9IE5VTEw7Ci0JdWludDMyX3QgbmV4dF90b19kZWw7Ci0J
dWludDMyX3QgcGRfcG9pbnQ7Ci0JaW50IHJldCA9IDA7Ci0KLQlpZiAoc3RjYi0+c2N0cF9zb2Nr
ZXQpIHsKLQkJcGRfcG9pbnQgPSBtaW4oU0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2Nr
ZXQpID4+IFNDVFBfUEFSVElBTF9ERUxJVkVSWV9TSElGVCwKLQkJCSAgICAgICBzdGNiLT5zY3Rw
X2VwLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50KTsKLQl9IGVsc2UgewotCQlwZF9wb2ludCA9IHN0
Y2ItPnNjdHBfZXAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQ7Ci0JfQotCWNvbnRyb2wgPSBUQUlM
UV9GSVJTVCgmc3RybS0+dW5vX2lucXVldWUpOwotCi0JaWYgKChjb250cm9sICE9IE5VTEwpICYm
Ci0JICAgIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkpIHsKLQkJLyogU3BlY2lhbCBoYW5k
bGluZyBuZWVkZWQgZm9yICJvbGQiIGRhdGEgZm9ybWF0ICovCi0JCWlmIChzY3RwX2hhbmRsZV9v
bGRfdW5vcmRlcmVkX2RhdGEoc3RjYiwgYXNvYywgc3RybSwgY29udHJvbCwgcGRfcG9pbnQsIGlu
cF9yZWFkX2xvY2tfaGVsZCkpIHsKLQkJCWdvdG8gZG9uZV91bjsKLQkJfQotCX0KLQlpZiAoc3Ry
bS0+cGRfYXBpX3N0YXJ0ZWQpIHsKLQkJLyogQ2FuJ3QgYWRkIG1vcmUgKi8KLQkJcmV0dXJuICgw
KTsKLQl9Ci0Jd2hpbGUgKGNvbnRyb2wpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkxv
b2tpbmcgYXQgY29udHJvbDogJXAgZSglZCkgc3NuOiAldSB0b3BfZnNuOiAldSBpbmNfZnNuOiAl
dSAtdW9cbiIsCi0JCQljb250cm9sLCBjb250cm9sLT5lbmRfYWRkZWQsIGNvbnRyb2wtPm1pZCwg
Y29udHJvbC0+dG9wX2ZzbiwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKLQkJbmN0bCA9IFRBSUxR
X05FWFQoY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7
Ci0JCQkvKiBXZSBqdXN0IHB1dCB0aGUgbGFzdCBiaXQgb24gKi8KLQkJCWlmIChjb250cm9sLT5v
bl9zdHJtX3EpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1f
cSAhPSBTQ1RQX09OX1VOT1JERVJFRCApIHsKLQkJCQkJcGFuaWMoIkh1aCBjb250cm9sOiAlcCBv
bl9xOiAlZCAtLSBub3QgdW5vcmRlcmVkPyIsCi0JCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wt
Pm9uX3N0cm1fcSk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0
KHNjdHBzX3JlYXNtdXNybXNncyk7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1
ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7Ci0J
CQl9Ci0JCQlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKLQkJCQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJICBjb250cm9sLAotCQkJCQkJICAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkJCQkJICBpbnBf
cmVhZF9sb2NrX2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0J
CQkvKiBDYW4gd2UgZG8gYSBQRC1BUEkgZm9yIHRoaXMgdW4tb3JkZXJlZCBndXk/ICovCi0JCQlp
ZiAoKGNvbnRyb2wtPmxlbmd0aCA+PSBwZF9wb2ludCkgJiYgKHN0cm0tPnBkX2FwaV9zdGFydGVk
ID09IDApKSB7Ci0JCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAxOwotCQkJCWNvbnRyb2wtPnBk
YXBpX3N0YXJ0ZWQgPSAxOwotCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsCi0JCQkJCQkgIGNvbnRyb2wsCi0JCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCBjb250cm9sLT5lbmRfYWRkZWQsCi0JCQkJCQkgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9T
T19OT1RfTE9DS0VEKTsKLQotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNvbnRyb2wgPSBuY3Rs
OwotCX0KLWRvbmVfdW46Ci0JY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZzdHJtLT5pbnF1ZXVlKTsK
LQlpZiAoc3RybS0+cGRfYXBpX3N0YXJ0ZWQpIHsKLQkJLyogQ2FuJ3QgYWRkIG1vcmUgKi8KLQkJ
cmV0dXJuICgwKTsKLQl9Ci0JaWYgKGNvbnRyb2wgPT0gTlVMTCkgewotCQlyZXR1cm4gKHJldCk7
Ci0JfQotCWlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIHN0cm0tPmxhc3Rf
bWlkX2RlbGl2ZXJlZCwgY29udHJvbC0+bWlkKSkgewotCQkvKiBPayB0aGUgZ3V5IGF0IHRoZSB0
b3Agd2FzIGJlaW5nIHBhcnRpYWxseSBkZWxpdmVyZWQKLQkJICogY29tcGxldGVkLCBzbyB3ZSBy
ZW1vdmUgaXQuIE5vdGUKLQkJICogdGhlIHBkX2FwaSBmbGFnIHdhcyB0YWtlbiBvZmYgd2hlbiB0
aGUKLQkJICogY2h1bmsgd2FzIG1lcmdlZCBvbiBpbiBzY3RwX3F1ZXVlX2RhdGFfZm9yX3JlYXNt
IGJlbG93LgotCQkgKi8KLQkJbmN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4dF9pbnN0cm0p
OwotCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJIkxvb2tpbmcgYXQgY29udHJvbDogJXAg
ZSglZCkgc3NuOiAldSB0b3BfZnNuOiAldSBpbmNfZnNuOiAldSAobGFzdGRlbDogJXUpLSBvXG4i
LAotCQkJY29udHJvbCwgY29udHJvbC0+ZW5kX2FkZGVkLCBjb250cm9sLT5taWQsCi0JCQljb250
cm9sLT50b3BfZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQsCi0JCQlzdHJtLT5sYXN0X21pZF9k
ZWxpdmVyZWQpOwotCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQlpZiAoY29udHJvbC0+
b25fc3RybV9xKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCWlmIChjb250cm9sLT5vbl9zdHJt
X3EgIT0gU0NUUF9PTl9PUkRFUkVEICkgewotCQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9u
X3E6ICVkIC0tIG5vdCBvcmRlcmVkPyIsCi0JCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9u
X3N0cm1fcSk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNj
dHBzX3JlYXNtdXNybXNncyk7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250
cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0g
Y29udHJvbC0+bGVuZ3RoKSB7Ci0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29u
dHJvbC0+bGVuZ3RoOwotCQkJCX0gZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQlwYW5p
Yygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAl
dSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxzZQot
CQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCX0KLQkJCQlz
Y3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCQkJY29udHJvbC0+
b25fc3RybV9xID0gMDsKLQkJCX0KLQkJCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCAmJiBjb250
cm9sLT5wZGFwaV9zdGFydGVkKSB7Ci0JCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDA7Ci0J
CQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAwOwotCQkJfQotCQkJaWYgKGNvbnRyb2wtPm9uX3Jl
YWRfcSA9PSAwKSB7Ci0JCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwK
LQkJCQkJCSAgY29udHJvbCwKLQkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNv
bnRyb2wtPmVuZF9hZGRlZCwKLQkJCQkJCSAgaW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCQkJfQotCQkJY29udHJvbCA9IG5jdGw7Ci0JCX0KLQl9Ci0JaWYgKHN0cm0t
PnBkX2FwaV9zdGFydGVkKSB7Ci0JCS8qIENhbid0IGFkZCBtb3JlIG11c3QgaGF2ZSBnb3R0ZW4g
YW4gdW4tb3JkZXJlZCBhYm92ZSBiZWluZyBwYXJ0aWFsbHkgZGVsaXZlcmVkLiAqLwotCQlyZXR1
cm4gKDApOwotCX0KLWRlbGl2ZXJfbW9yZToKLQluZXh0X3RvX2RlbCA9IHN0cm0tPmxhc3RfbWlk
X2RlbGl2ZXJlZCArIDE7Ci0JaWYgKGNvbnRyb2wpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hY
WCwKLQkJCSJMb29raW5nIGF0IGNvbnRyb2w6ICVwIGUoJWQpIHNzbjogJXUgdG9wX2ZzbjogJXUg
aW5jX2ZzbjogJXUgKG54dGRlbDogJXUpLSBvXG4iLAotCQkJY29udHJvbCwgY29udHJvbC0+ZW5k
X2FkZGVkLCBjb250cm9sLT5taWQsIGNvbnRyb2wtPnRvcF9mc24sIGNvbnRyb2wtPmZzbl9pbmNs
dWRlZCwKLQkJCW5leHRfdG9fZGVsKTsKLQkJbmN0bCA9IFRBSUxRX05FWFQoY29udHJvbCwgbmV4
dF9pbnN0cm0pOwotCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBjb250
cm9sLT5taWQsIG5leHRfdG9fZGVsKSAmJgotCQkgICAgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2Vl
bikpIHsKLQkJCWludCBkb25lOwotCi0JCQkvKiBPayB3ZSBjYW4gZGVsaXZlciBpdCBvbnRvIHRo
ZSBzdHJlYW0uICovCi0JCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQkJLyogV2UgYXJl
IGRvbmUgd2l0aCBpdCBhZnRlcndhcmRzICovCi0JCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkg
ewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQ
X09OX09SREVSRUQgKSB7Ci0JCQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0t
IG5vdCBvcmRlcmVkPyIsCi0JCQkJCQkgICAgICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3Ep
OwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX3Jl
YXNtdXNybXNncyk7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwg
bmV4dF9pbnN0cm0pOwotCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250
cm9sLT5sZW5ndGgpIHsKLQkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJv
bC0+bGVuZ3RoOwotCQkJCQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJCXBhbmlj
KCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1
IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0J
CQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJ
CXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQkJCQkJY29udHJv
bC0+b25fc3RybV9xID0gMDsKLQkJCQl9Ci0JCQkJcmV0Kys7Ci0JCQl9Ci0JCQlpZiAoKChjb250
cm9sLT5zaW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9OT1RfRlJBRykgPT0gU0NUUF9EQVRB
X05PVF9GUkFHKSB7Ci0JCQkJLyogQSBzaW5nbGV0b24gbm93IHNsaXBwaW5nIHRocm91Z2ggLSBt
YXJrIGl0IG5vbi1yZXZva2FibGUgdG9vICovCi0JCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUo
YXNvYywgY29udHJvbC0+c2luZm9fdHNuKTsKLQkJCX0gZWxzZSBpZiAoY29udHJvbC0+ZW5kX2Fk
ZGVkID09IDApIHsKLQkJCQkvKiBDaGVjayBpZiB3ZSBjYW4gZGVmZXIgYWRkaW5nIHVudGlsIGl0
cyBhbGwgdGhlcmUgKi8KLQkJCQlpZiAoKGNvbnRyb2wtPmxlbmd0aCA8IHBkX3BvaW50KSB8fCAo
c3RybS0+cGRfYXBpX3N0YXJ0ZWQpKSB7Ci0JCQkJCS8qIERvbid0IG5lZWQgaXQgb3IgY2Fubm90
IGFkZCBtb3JlIChvbmUgYmVpbmcgZGVsaXZlcmVkIHRoYXQgd2F5KSAqLwotCQkJCQlnb3RvIG91
dDsKLQkJCQl9Ci0JCQl9Ci0JCQlkb25lID0gKGNvbnRyb2wtPmVuZF9hZGRlZCkgJiYgKGNvbnRy
b2wtPmxhc3RfZnJhZ19zZWVuKTsKLQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgewot
CQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkgIGNvbnRy
b2wsCi0JCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRfYWRk
ZWQsCi0JCQkJCQkgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJ
CX0KLQkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCA9IG5leHRfdG9fZGVsOwotCQkJaWYgKGRv
bmUpIHsKLQkJCQljb250cm9sID0gbmN0bDsKLQkJCQlnb3RvIGRlbGl2ZXJfbW9yZTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJLyogV2UgYXJlIG5vdyBkb2luZyBQRCBBUEkgKi8KLQkJCQlzdHJtLT5wZF9h
cGlfc3RhcnRlZCA9IDE7Ci0JCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDE7Ci0JCQl9Ci0J
CX0KLQl9Ci1vdXQ6Ci0JcmV0dXJuIChyZXQpOwotfQotCi0KLXVpbnQzMl90Ci1zY3RwX2FkZF9j
aGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLQkJCXN0
cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwKLQkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGssIGludCBob2xkX3Jsb2NrKQotewotCS8qCi0JICogR2l2ZW4gYSBjb250cm9sIGFuZCBhIGNo
dW5rLCBtZXJnZSB0aGUKLQkgKiBkYXRhIGZyb20gdGhlIGNoayBvbnRvIHRoZSBjb250cm9sIGFu
ZCBmcmVlCi0JICogdXAgdGhlIGNodW5rIHJlc291cmNlcy4KLQkgKi8KLQl1aW50MzJfdCBhZGRl
ZD0wOwotCWludCBpX2xvY2tlZCA9IDA7Ci0KLQlpZiAoY29udHJvbC0+b25fcmVhZF9xICYmICho
b2xkX3Jsb2NrID09IDApKSB7Ci0JCS8qCi0JCSAqIEl0cyBiZWluZyBwZC1hcGknZCBzbyB3ZSBt
dXN0Ci0JCSAqIGRvIHNvbWUgbG9ja3MuCi0JCSAqLwotCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3Rj
Yi0+c2N0cF9lcCk7Ci0JCWlfbG9ja2VkID0gMTsKLQl9Ci0JaWYgKGNvbnRyb2wtPmRhdGEgPT0g
TlVMTCkgewotCQljb250cm9sLT5kYXRhID0gY2hrLT5kYXRhOwotCQlzY3RwX3NldHVwX3RhaWxf
cG9pbnRlcihjb250cm9sKTsKLQl9IGVsc2UgewotCQlzY3RwX2FkZF90b190YWlsX3BvaW50ZXIo
Y29udHJvbCwgY2hrLT5kYXRhLCAmYWRkZWQpOwotCX0KLQljb250cm9sLT5mc25faW5jbHVkZWQg
PSBjaGstPnJlYy5kYXRhLmZzbjsKLQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlIC09IGNoay0+
c2VuZF9zaXplOwotCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsK
LQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjaGstPnJlYy5kYXRhLnRzbik7Ci0JY2hr
LT5kYXRhID0gTlVMTDsKLQlpZiAoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFf
RklSU1RfRlJBRykgewotCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOwotCQljb250cm9s
LT5zaW5mb190c24gPSBjaGstPnJlYy5kYXRhLnRzbjsKLQkJY29udHJvbC0+c2luZm9fcHBpZCA9
IGNoay0+cmVjLmRhdGEucHBpZDsKLQl9Ci0JaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYg
U0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkvKiBJdHMgY29tcGxldGUgKi8KLQkJaWYgKChjb250
cm9sLT5vbl9zdHJtX3EpICYmIChjb250cm9sLT5vbl9yZWFkX3EpKSB7Ci0JCQlpZiAoY29udHJv
bC0+cGRhcGlfc3RhcnRlZCkgewotCQkJCWNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQgPSAwOwotCQkJ
CXN0cm0tPnBkX2FwaV9zdGFydGVkID0gMDsKLQkJCX0KLQkJCWlmIChjb250cm9sLT5vbl9zdHJt
X3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKLQkJCQkvKiBVbm9yZGVyZWQgKi8KLQkJCQlUQUlM
UV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJ
Y29udHJvbC0+b25fc3RybV9xID0gMDsKLQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9x
ID09IFNDVFBfT05fT1JERVJFRCkgewotCQkJCS8qIE9yZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1P
VkUoJnN0cm0tPmlucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJCQlpZiAoYXNvYy0+
c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7Ci0JCQkJfSBlbHNlIHsKLSNpZmRl
ZiBJTlZBUklBTlRTCi0JCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxl
ciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29u
dHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAw
OwotI2VuZGlmCi0JCQkJfQotCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9z
dHJlYW1zKTsKLQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotI2lmZGVmIElOVkFSSUFOVFMK
LQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xKSB7Ci0JCQkJcGFuaWMoIlVua25vd24g
c3RhdGUgb24gY3RybDogJXAgb25fc3RybV9xOiAlZCIsIGNvbnRyb2wsCi0JCQkJICAgICAgY29u
dHJvbC0+b25fc3RybV9xKTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JCWNvbnRyb2wtPmVuZF9hZGRl
ZCA9IDE7Ci0JCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID0gMTsKLQl9Ci0JaWYgKGlfbG9ja2Vk
KSB7Ci0JCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwotCX0KLQlzY3RwX2Zy
ZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JcmV0dXJuIChhZGRl
ZCk7Ci19Ci0KLS8qCi0gKiBEdW1wIG9udG8gdGhlIHJlLWFzc2VtYmx5IHF1ZXVlLCBpbiBpdHMg
cHJvcGVyIHBsYWNlLiBBZnRlciBkdW1waW5nIG9uIHRoZQotICogcXVldWUsIHNlZSBpZiBhbnRo
aW5nIGNhbiBiZSBkZWxpdmVyZWQuIElmIHNvIHB1bGwgaXQgb2ZmIChvciBhcyBtdWNoIGFzCi0g
KiB3ZSBjYW4uIElmIHdlIHJ1biBvdXQgb2Ygc3BhY2UgdGhlbiB3ZSBtdXN0IGR1bXAgd2hhdCB3
ZSBjYW4gYW5kIHNldCB0aGUKLSAqIGFwcHJvcHJpYXRlIGZsYWcgdG8gc2F5IHdlIHF1ZXVlZCB3
aGF0IHdlIGNvdWxkLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFz
bShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAot
CQkJICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKLQkJCSAgc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrLAotCQkJICBpbnQgY3JlYXRlZF9jb250cm9sLAotCQkJICBpbnQg
KmFib3J0X2ZsYWcsIHVpbnQzMl90IHRzbikKLXsKLQl1aW50MzJfdCBuZXh0X2ZzbjsKLQlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICphdCwgKm5hdDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0
cm07Ci0JaW50IGRvX3dha2V1cCwgdW5vcmRlcmVkOwotCXVpbnQzMl90IGxlbmFkZGVkOwotCi0J
c3RybSA9ICZhc29jLT5zdHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXTsKLQkvKgotCSAqIEZv
ciBvbGQgdW4tb3JkZXJlZCBkYXRhIGNodW5rcy4KLQkgKi8KLQlpZiAoKGNvbnRyb2wtPnNpbmZv
X2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgewotCQl1bm9yZGVyZWQgPSAxOwot
CX0gZWxzZSB7Ci0JCXVub3JkZXJlZCA9IDA7Ci0JfQotCS8qIE11c3QgYmUgYWRkZWQgdG8gdGhl
IHN0cmVhbS1pbiBxdWV1ZSAqLwotCWlmIChjcmVhdGVkX2NvbnRyb2wpIHsKLQkJaWYgKHVub3Jk
ZXJlZCA9PSAwKSB7Ci0JCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFt
cyk7Ci0JCX0KLQkJaWYgKHNjdHBfcGxhY2VfY29udHJvbF9pbl9zdHJlYW0oc3RybSwgYXNvYywg
Y29udHJvbCkpIHsKLQkJCS8qIER1cGxpY2F0ZSBTU04/ICovCi0JCQlzY3RwX2NsZWFuX3VwX2Nv
bnRyb2woc3RjYiwgY29udHJvbCk7Ci0JCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRy
b2wsIGNoaywKLQkJCQkJICAgIGFib3J0X2ZsYWcsCi0JCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9J
TkRBVEEgKyBTQ1RQX0xPQ182KTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoKHRzbiA9PSAoYXNv
Yy0+Y3VtdWxhdGl2ZV90c24gKyAxKSAmJiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDApKSkg
ewotCQkJLyogT2sgd2UgY3JlYXRlZCB0aGlzIGNvbnRyb2wgYW5kIG5vdwotCQkJICogbGV0cyB2
YWxpZGF0ZSB0aGF0IGl0cyBsZWdhbCBpLmUuIHRoZXJlCi0JCQkgKiBpcyBhIEIgYml0IHNldCwg
aWYgbm90IGFuZCB3ZSBoYXZlCi0JCQkgKiB1cCB0byB0aGUgY3VtLWFjayB0aGVuIGl0cyBpbnZh
bGlkLgotCQkJICovCi0JCQlpZiAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRB
X0ZJUlNUX0ZSQUcpID09IDApIHsKLQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRy
b2wsIGNoaywKLQkJCQkgICAgICAgICAgICAgICAgICAgIGFib3J0X2ZsYWcsCi0JCQkJICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ183KTsKLQkJCQly
ZXR1cm47Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkg
JiYgKHVub3JkZXJlZCA9PSAxKSkgewotCQlzY3RwX2luamVjdF9vbGRfdW5vcmRlcmVkX2RhdGEo
c3RjYiwgYXNvYywgY29udHJvbCwgY2hrLCBhYm9ydF9mbGFnKTsKLQkJcmV0dXJuOwotCX0KLQkv
KgotCSAqIE9rIHdlIG11c3QgcXVldWUgdGhlIGNodW5rIGludG8gdGhlIHJlYXNlbWJseSBwb3J0
aW9uOgotCSAqICBvIGlmIGl0cyB0aGUgZmlyc3QgaXQgZ29lcyB0byB0aGUgY29udHJvbCBtYnVm
LgotCSAqICBvIGlmIGl0cyBub3QgZmlyc3QgYnV0IHRoZSBuZXh0IGluIHNlcXVlbmNlIGl0IGdv
ZXMgdG8gdGhlIGNvbnRyb2wsCi0JICogICAgYW5kIGVhY2ggc3VjY2VlZGluZyBvbmUgaW4gb3Jk
ZXIgYWxzbyBnb2VzLgotCSAqICBvIGlmIGl0cyBub3QgaW4gb3JkZXIgd2UgcGxhY2UgaXQgb24g
dGhlIGxpc3QgaW4gaXRzIHBsYWNlLgotCSAqLwotCWlmIChjaGstPnJlYy5kYXRhLnJjdl9mbGFn
cyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSB7Ci0JCS8qIEl0cyB0aGUgdmVyeSBmaXJzdCBvbmUu
ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkiY2h1bmsgaXMgYSBmaXJzdCBmc246
ICV1IGJlY29tZXMgZnNuX2luY2x1ZGVkXG4iLAotCQkJY2hrLT5yZWMuZGF0YS5mc24pOwotCQlp
ZiAoY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSB7Ci0JCQkvKgotCQkJICogRXJyb3Igb24gc2Vu
ZGVycyBwYXJ0LCB0aGV5IGVpdGhlcgotCQkJICogc2VudCB1cyB0d28gZGF0YSBjaHVua3Mgd2l0
aCBGSVJTVCwKLQkJCSAqIG9yIHRoZXkgc2VudCB0d28gdW4tb3JkZXJlZCBjaHVua3MgdGhhdAot
CQkJICogd2VyZSBmcmFnbWVudGVkIGF0IHRoZSBzYW1lIHRpbWUgaW4gdGhlIHNhbWUgc3RyZWFt
LgotCQkJICovCi0JCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJ
CSAgICAgICAgICAgICAgICAgICAgYWJvcnRfZmxhZywKLQkJCSAgICAgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfOCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJ
Y29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKLQkJY29udHJvbC0+c2luZm9fcHBpZCA9IGNo
ay0+cmVjLmRhdGEucHBpZDsKLQkJY29udHJvbC0+c2luZm9fdHNuID0gY2hrLT5yZWMuZGF0YS50
c247Ci0JCWNvbnRyb2wtPmZzbl9pbmNsdWRlZCA9IGNoay0+cmVjLmRhdGEuZnNuOwotCQljb250
cm9sLT5kYXRhID0gY2hrLT5kYXRhOwotCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBj
aGstPnJlYy5kYXRhLnRzbik7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2No
dW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJc2N0cF9zZXR1cF90YWlsX3Bv
aW50ZXIoY29udHJvbCk7Ci0JCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gY29udHJvbC0+
bGVuZ3RoOwotCX0gZWxzZSB7Ci0JCS8qIFBsYWNlIHRoZSBjaHVuayBpbiBvdXIgbGlzdCAqLwot
CQlpbnQgaW5zZXJ0ZWQ9MDsKLQkJaWYgKGNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID09IDApIHsK
LQkJCS8qIFN0aWxsIHdpbGxpbmcgdG8gcmFpc2UgaGlnaGVzdCBGU04gc2VlbiAqLwotCQkJaWYg
KFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNuLCBjb250cm9sLT50b3BfZnNuKSkgewotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJCSJXZSBoYXZlIGEgbmV3IHRvcF9mc246ICV1
XG4iLAotCQkJCQljaGstPnJlYy5kYXRhLmZzbik7Ci0JCQkJY29udHJvbC0+dG9wX2ZzbiA9IGNo
ay0+cmVjLmRhdGEuZnNuOwotCQkJfQotCQkJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYg
U0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJ
CSJUaGUgbGFzdCBmc24gaXMgbm93IGluIHBsYWNlIGZzbjogJXVcbiIsCi0JCQkJCWNoay0+cmVj
LmRhdGEuZnNuKTsKLQkJCQljb250cm9sLT5sYXN0X2ZyYWdfc2VlbiA9IDE7Ci0JCQl9Ci0JCQlp
ZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkIHx8IGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2Vlbikgewot
CQkJCS8qIAotCQkJCSAqIEZvciBJREFUQSB3ZSBhbHdheXMgY2hlY2sgc2luY2Ugd2Uga25vdyB0
aGF0Ci0JCQkJICogdGhlIGZpcnN0IGZyYWdtZW50IGlzIDAuIEZvciBvbGQgREFUQSB3ZSBoYXZl
Ci0JCQkJICogdG8gcmVjZWl2ZSB0aGUgZmlyc3QgYmVmb3JlIHdlIGtub3cgdGhlIGZpcnN0IEZT
TgotCQkJCSAqICh3aGljaCBpcyB0aGUgVFNOKS4KLQkJCQkgKi8KLQkJCQlpZiAoU0NUUF9UU05f
R0UoY29udHJvbC0+ZnNuX2luY2x1ZGVkLCBjaGstPnJlYy5kYXRhLmZzbikpIHsKLQkJCQkJLyog
V2UgaGF2ZSBhbHJlYWR5IGRlbGl2ZXJlZCB1cCB0byB0aGlzIHNvIGl0cyBhIGR1cCAqLwotCQkJ
CQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKLQkJCQkJCQkgICAgYWJv
cnRfZmxhZywKLQkJCQkJCQkgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfOSk7
Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoY2hrLT5yZWMu
ZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7Ci0JCQkJLyogU2Vjb25kIGxh
c3Q/IGh1aD8gKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJCQkiRHVwbGljYXRl
IGxhc3QgZnNuOiAldSAodG9wOiAldSkgLS0gYWJvcnRcbiIsCi0JCQkJCWNoay0+cmVjLmRhdGEu
ZnNuLCBjb250cm9sLT50b3BfZnNuKTsKLQkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNv
bnRyb2wsCi0JCQkJCQkgICAgY2hrLCBhYm9ydF9mbGFnLAotCQkJCQkJICAgIFNDVFBfRlJPTV9T
Q1RQX0lOREFUQSArIFNDVFBfTE9DXzEwKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlpZiAoYXNv
Yy0+aWRhdGFfc3VwcG9ydGVkIHx8IGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgewotCQkJCS8q
IAotCQkJCSAqIEZvciBJREFUQSB3ZSBhbHdheXMgY2hlY2sgc2luY2Ugd2Uga25vdyB0aGF0Ci0J
CQkJICogdGhlIGZpcnN0IGZyYWdtZW50IGlzIDAuIEZvciBvbGQgREFUQSB3ZSBoYXZlCi0JCQkJ
ICogdG8gcmVjZWl2ZSB0aGUgZmlyc3QgYmVmb3JlIHdlIGtub3cgdGhlIGZpcnN0IEZTTgotCQkJ
CSAqICh3aGljaCBpcyB0aGUgVFNOKS4KLQkJCQkgKi8KLQotCQkJCWlmIChTQ1RQX1RTTl9HRShj
b250cm9sLT5mc25faW5jbHVkZWQsIGNoay0+cmVjLmRhdGEuZnNuKSkgewotCQkJCQkvKiBXZSBo
YXZlIGFscmVhZHkgZGVsaXZlcmVkIHVwIHRvIHRoaXMgc28gaXRzIGEgZHVwICovCi0JCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJCQkiTmV3IGZzbjogJXUgaXMgYWxyZWFkeSBzZWVu
IGluIGluY2x1ZGVkX2ZzbjogJXUgLS0gYWJvcnRcbiIsCi0JCQkJCQljaGstPnJlYy5kYXRhLmZz
biwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKLQkJCQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNi
LCBjb250cm9sLCBjaGssCi0JCQkJCQkJICAgIGFib3J0X2ZsYWcsCi0JCQkJCQkJICAgIFNDVFBf
RlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzExKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJ
CX0KLQkJCS8qIHZhbGlkYXRlIG5vdCBiZXlvbmQgdG9wIEZTTiBpZiB3ZSBoYXZlIHNlZW4gbGFz
dCBvbmUgKi8KLQkJCWlmIChTQ1RQX1RTTl9HVChjaGstPnJlYy5kYXRhLmZzbiwgY29udHJvbC0+
dG9wX2ZzbikpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAotCQkJCQkiTmV3IGZzbjog
JXUgaXMgYmV5b25kIG9yIGF0IHRvcF9mc246ICV1IC0tIGFib3J0XG4iLAotCQkJCQljaGstPnJl
Yy5kYXRhLmZzbiwKLQkJCQkJY29udHJvbC0+dG9wX2Zzbik7Ci0JCQkJc2N0cF9hYm9ydF9pbl9y
ZWFzbShzdGNiLCBjb250cm9sLCBjaGssCi0JCQkJCQkgICAgYWJvcnRfZmxhZywKLQkJCQkJCSAg
ICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xMik7Ci0JCQkJcmV0dXJuOwotCQkJ
fQotCQl9Ci0JCS8qCi0JCSAqIElmIHdlIHJlYWNoIGhlcmUsIHdlIG5lZWQgdG8gcGxhY2UgdGhl
Ci0JCSAqIG5ldyBjaHVuayBpbiB0aGUgcmVhc3NlbWJseSBmb3IgdGhpcyAKLQkJICogY29udHJv
bC4KLQkJICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkiY2h1bmsgaXMgYSBub3Qg
Zmlyc3QgZnNuOiAldSBuZWVkcyB0byBiZSBpbnNlcnRlZFxuIiwKLQkJCWNoay0+cmVjLmRhdGEu
ZnNuKTsKLQkJVEFJTFFfRk9SRUFDSChhdCwgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQpIHsK
LQkJCWlmIChTQ1RQX1RTTl9HVChhdC0+cmVjLmRhdGEuZnNuLCBjaGstPnJlYy5kYXRhLmZzbikp
IHsKLQkJCQkvKgotCQkJCSAqIFRoaXMgb25lIGluIHF1ZXVlIGlzIGJpZ2dlciB0aGFuIHRoZSBu
ZXcgb25lLCBpbnNlcnQKLQkJCQkgKiB0aGUgbmV3IG9uZSBiZWZvcmUgYXQuCi0JCQkJICovCi0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKLQkJCQkJIkluc2VydCBpdCBiZWZvcmUgZnNuOiAl
dVxuIiwKLQkJCQkJYXQtPnJlYy5kYXRhLmZzbik7Ci0JCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9x
dWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPmNudF9v
bl9yZWFzbV9xdWV1ZSk7Ci0JCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShhdCwgY2hrLCBzY3RwX25l
eHQpOwotCQkJCWluc2VydGVkID0gMTsKLQkJCQlicmVhazsKLQkJCX0gZWxzZSBpZiAoYXQtPnJl
Yy5kYXRhLmZzbiA9PSBjaGstPnJlYy5kYXRhLmZzbikgewotCQkJCS8qIEdhaywgSGUgc2VudCBt
ZSBhIGR1cGxpY2F0ZSBzdHIgc2VxIG51bWJlciAqLwotCQkJCS8qCi0JCQkJICogZm9vIGJhciwg
SSBndWVzcyBJIHdpbGwganVzdCBmcmVlIHRoaXMgbmV3IGd1eSwKLQkJCQkgKiBzaG91bGQgd2Ug
YWJvcnQgdG9vPyBGSVggTUUgTUFZQkU/IE9yIGl0IENPVUxEIGJlCi0JCQkJICogdGhhdCB0aGUg
U1NOJ3MgaGF2ZSB3cmFwcGVkLiBNYXliZSBJIHNob3VsZAotCQkJCSAqIGNvbXBhcmUgdG8gVFNO
IHNvbWVob3cuLi4gc2lnaCBmb3Igbm93IGp1c3QgYmxvdwotCQkJCSAqIGF3YXkgdGhlIGNodW5r
IQotCQkJCSAqLwotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCQkJCSJEdXBsaWNhdGUg
dG8gZnNuOiAldSAtLSBhYm9ydFxuIiwKLQkJCQkJYXQtPnJlYy5kYXRhLmZzbik7Ci0JCQkJc2N0
cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLAotCQkJCQkJICAgIGNoaywgYWJvcnRfZmxh
ZywKLQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xMyk7Ci0JCQkJ
cmV0dXJuOwotCQkJfQotCQl9Ci0JCWlmIChpbnNlcnRlZCA9PSAwKSB7Ci0JCQkvKiBHb2VzIG9u
IHRoZSBlbmQgKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsICJJbnNlcnRpbmcgYXQgdGFp
bCBvZiBsaXN0IGZzbjogJXVcbiIsCi0JCQkJY2hrLT5yZWMuZGF0YS5mc24pOwotCQkJYXNvYy0+
c2l6ZV9vbl9yZWFzbV9xdWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCXNjdHBfdWNvdW50X2lu
Y3IoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKLQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZjb250
cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOwotCQl9Ci0JfQotCS8qCi0JICogT2sgbGV0cyBz
ZWUgaWYgd2UgY2FuIHN1Y2sgYW55IHVwIGludG8gdGhlIGNvbnRyb2wKLQkgKiBzdHJ1Y3R1cmUg
dGhhdCBhcmUgaW4gc2VxIGlmIGl0IG1ha2VzIHNlbnNlLgotCSAqLwotCWRvX3dha2V1cCA9IDA7
Ci0JLyoKLQkgKiBJZiB0aGUgZmlyc3QgZnJhZ21lbnQgaGFzIG5vdCBiZWVuCi0JICogc2VlbiB0
aGVyZSBpcyBubyBzZW5zZSBpbiBsb29raW5nLgotCSAqLwotCWlmIChjb250cm9sLT5maXJzdF9m
cmFnX3NlZW4pIHsKLQkJbmV4dF9mc24gPSBjb250cm9sLT5mc25faW5jbHVkZWQgKyAxOwotCQlU
QUlMUV9GT1JFQUNIX1NBRkUoYXQsICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuYXQpIHsK
LQkJCWlmIChhdC0+cmVjLmRhdGEuZnNuID09IG5leHRfZnNuKSB7Ci0JCQkJLyogV2UgY2FuIGFk
ZCB0aGlzIG9uZSBub3cgdG8gdGhlIGNvbnRyb2wgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
WFhYLAotCQkJCQkiQWRkaW5nIG1vcmUgdG8gY29udHJvbDogJXAgYXQ6ICVwIGZzbjogJXUgbmV4
dF9mc246ICV1IGluY2x1ZGVkOiAldVxuIiwKLQkJCQkJY29udHJvbCwgYXQsCi0JCQkJCWF0LT5y
ZWMuZGF0YS5mc24sCi0JCQkJCW5leHRfZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQpOwotCQkJ
CVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGF0LCBzY3RwX25leHQpOwotCQkJCWxlbmFk
ZGVkID0gc2N0cF9hZGRfY2hrX3RvX2NvbnRyb2woY29udHJvbCwgc3RybSwgc3RjYiwgYXNvYywg
YXQsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxEKTsKLQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJl
YW1zICs9IGxlbmFkZGVkOwotCQkJCWlmIChjb250cm9sLT5vbl9yZWFkX3EpIHsKLQkJCQkJZG9f
d2FrZXVwID0gMTsKLQkJCQl9Ci0JCQkJbmV4dF9mc24rKzsKLQkJCQlpZiAoY29udHJvbC0+ZW5k
X2FkZGVkICYmIGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKLQkJCQkJaWYgKHN0cm0tPnBkX2Fw
aV9zdGFydGVkKSB7Ci0JCQkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7Ci0JCQkJCQljb250
cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKLQkJCQkJfQotCQkJCQlpZiAoY29udHJvbC0+b25fcmVh
ZF9xID09IDApIHsKLQkJCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
Ci0JCQkJCQkJCSAgY29udHJvbCwKLQkJCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jj
diwgY29udHJvbC0+ZW5kX2FkZGVkLAotCQkJCQkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxE
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCQkJZG9fd2FrZXVwID0gMTsKLQkJCQkJfQotCQkJ
CQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JfQot
CWlmIChkb193YWtldXApIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCXNjdHBfaW52
b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJvbCwgU0NUUF9SRUFE
X0xPQ0tfTk9UX0hFTEQpOwotI2VuZGlmCi0JCS8qIE5lZWQgdG8gd2FrZXVwIHRoZSByZWFkZXIg
Ki8KLQkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFND
VFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQotfQotCi1zdGF0aWMgc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKgotc2N0cF9maW5kX3JlYXNtX2VudHJ5KHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3Ry
bSwgdWludDMyX3QgbWlkLCBpbnQgb3JkZXJlZCwgaW50IGlkYXRhX3N1cHBvcnRlZCkKLXsKLQlz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQotCWlmIChvcmRlcmVkKSB7Ci0J
CVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPmlucXVldWUsIG5leHRfaW5zdHJtKSB7Ci0J
CQlpZiAoU0NUUF9NSURfRVEoaWRhdGFfc3VwcG9ydGVkLCBjb250cm9sLT5taWQsIG1pZCkpIHsK
LQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChpZGF0YV9zdXBwb3J0ZWQp
IHsKLQkJCVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPnVub19pbnF1ZXVlLCBuZXh0X2lu
c3RybSkgewotCQkJCWlmIChTQ1RQX01JRF9FUShpZGF0YV9zdXBwb3J0ZWQsIGNvbnRyb2wtPm1p
ZCwgbWlkKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQljb250
cm9sID0gVEFJTFFfRklSU1QoJnN0cm0tPnVub19pbnF1ZXVlKTsKLQkJfQotCX0KLQlyZXR1cm4g
KGNvbnRyb2wpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3Byb2Nlc3NfYV9kYXRhX2NodW5rKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkg
IHN0cnVjdCBtYnVmICoqbSwgaW50IG9mZnNldCwgIGludCBjaGtfbGVuZ3RoLAotCQkJICBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90ICpoaWdoX3RzbiwgaW50ICphYm9ydF9mbGFnLAot
CQkJICBpbnQgKmJyZWFrX2ZsYWcsIGludCBsYXN0X2NodW5rLCB1aW50OF90IGNoa190eXBlKQot
ewotCS8qIFByb2Nlc3MgYSBkYXRhIGNodW5rICovCi0JLyogc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrOyAqLwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQl1aW50MzJfdCB0c24s
IGZzbiwgZ2FwLCBtaWQ7Ci0Jc3RydWN0IG1idWYgKmRtYnVmOwotCWludCB0aGVfbGVuOwotCWlu
dCBuZWVkX3JlYXNtX2NoZWNrID0gMDsKLQl1aW50MTZfdCBzaWQ7Ci0Jc3RydWN0IG1idWYgKm9w
X2VycjsKLQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCXN0cnVjdCBzY3RwX3F1ZXVl
ZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7Ci0JdWludDMyX3QgcHBpZDsKLQl1aW50OF90
IGNoa19mbGFnczsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlzdCAqbGlzdGU7Ci0JaW50
IG9yZGVyZWQ7Ci0Jc2l6ZV90IGNsZW47Ci0JaW50IGNyZWF0ZWRfY29udHJvbCA9IDA7Ci0KLQlp
ZiAoY2hrX3R5cGUgPT0gU0NUUF9JREFUQSkgewotCQlzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAq
Y2h1bmssIGNodW5rX2J1ZjsKLQotCQljaHVuayA9IChzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAq
KXNjdHBfbV9nZXRwdHIoKm0sIG9mZnNldCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayksICh1
aW50OF90ICopJmNodW5rX2J1Zik7Ci0JCWNoa19mbGFncyA9IGNodW5rLT5jaC5jaHVua19mbGFn
czsKLQkJY2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayk7Ci0JCXRzbiA9IG50
b2hsKGNodW5rLT5kcC50c24pOwotCQlzaWQgPSBudG9ocyhjaHVuay0+ZHAuc2lkKTsKLQkJbWlk
ID0gbnRvaGwoY2h1bmstPmRwLm1pZCk7Ci0JCWlmIChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfRklS
U1RfRlJBRykgewotCQkJZnNuID0gMDsKLQkJCXBwaWQgPSBjaHVuay0+ZHAucHBpZF9mc24ucHBp
ZDsKLQkJfSBlbHNlIHsKLQkJCWZzbiA9IG50b2hsKGNodW5rLT5kcC5wcGlkX2Zzbi5mc24pOwot
CQkJcHBpZCA9IDB4ZmZmZmZmZmY7IC8qIFVzZSBhcyBhbiBpbnZhbGlkIHZhbHVlLiAqLwotCQl9
Ci0JfSBlbHNlIHsKLQkJc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqY2h1bmssIGNodW5rX2J1ZjsK
LQotCQljaHVuayA9IChzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopc2N0cF9tX2dldHB0cigqbSwg
b2Zmc2V0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayksICh1aW50OF90ICopJmNodW5rX2J1Zik7
Ci0JCWNoa19mbGFncyA9IGNodW5rLT5jaC5jaHVua19mbGFnczsKLQkJY2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKTsKLQkJdHNuID0gbnRvaGwoY2h1bmstPmRwLnRzbik7Ci0J
CXNpZCA9IG50b2hzKGNodW5rLT5kcC5zaWQpOwotCQltaWQgPSAodWludDMyX3QpKG50b2hzKGNo
dW5rLT5kcC5zc24pKTsKLQkJZnNuID0gdHNuOwotCQlwcGlkID0gY2h1bmstPmRwLnBwaWQ7Ci0J
fQotCWlmICgoc2l6ZV90KWNoa19sZW5ndGggPT0gY2xlbikgewotCQkvKgotCQkgKiBOZWVkIHRv
IHNlbmQgYW4gYWJvcnQgc2luY2Ugd2UgaGFkIGEKLQkJICogZW1wdHkgZGF0YSBjaHVuay4KLQkJ
ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfbm9fdXNlcl9kYXRhX2NhdXNlKHRzbik7Ci0J
CXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSAr
IFNDVFBfTE9DXzE0OwotCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJKmFib3J0X2ZsYWcgPSAxOwot
CQlyZXR1cm4gKDApOwotCX0KLQlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9TQUNLX0lNTUVE
SUFURUxZKSA9PSBTQ1RQX0RBVEFfU0FDS19JTU1FRElBVEVMWSkgewotCQlhc29jLT5zZW5kX3Nh
Y2sgPSAxOwotCX0KLQlvcmRlcmVkID0gKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVE
KSA9PSAwKTsKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWFwKHRzbiwgYXNvYy0+Y3VtdWxh
dGl2ZV90c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1RTTl9FTlRF
UlMpOwotCX0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCVNDVFBf
TFRSQUNFX0NISyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGtfdHlwZSwgdHNuKTsKLQlpZiAoU0NU
UF9UU05fR0UoYXNvYy0+Y3VtdWxhdGl2ZV90c24sIHRzbikpIHsKLQkJLyogSXQgaXMgYSBkdXBs
aWNhdGUgKi8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmR1cGRhdGEpOwotCQlpZiAoYXNv
Yy0+bnVtZHVwdHNucyA8IFNDVFBfTUFYX0RVUF9UU05TKSB7Ci0JCQkvKiBSZWNvcmQgYSBkdXAg
Zm9yIHRoZSBuZXh0IG91dGJvdW5kIHNhY2sgKi8KLQkJCWFzb2MtPmR1cF90c25zW2Fzb2MtPm51
bWR1cHRzbnNdID0gdHNuOwotCQkJYXNvYy0+bnVtZHVwdHNucysrOwotCQl9Ci0JCWFzb2MtPnNl
bmRfc2FjayA9IDE7Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qIENhbGN1bGF0ZSB0aGUgbnVtYmVy
IG9mIFRTTidzIGJldHdlZW4gdGhlIGJhc2UgYW5kIHRoaXMgVFNOICovCi0JU0NUUF9DQUxDX1RT
Tl9UT19HQVAoZ2FwLCB0c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCWlmIChn
YXAgPj0gKFNDVFBfTUFQUElOR19BUlJBWSA8PCAzKSkgewotCQkvKiBDYW4ndCBob2xkIHRoZSBi
aXQgaW4gdGhlIG1hcHBpbmcgYXQgbWF4IGFycmF5LCB0b3NzIGl0ICovCi0JCXJldHVybiAoMCk7
Ci0JfQotCWlmIChnYXAgPj0gKHVpbnQzMl90KSAoYXNvYy0+bWFwcGluZ19hcnJheV9zaXplIDw8
IDMpKSB7Ci0JCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCQlpZiAoc2N0cF9leHBhbmRf
bWFwcGluZ19hcnJheShhc29jLCBnYXApKSB7Ci0JCQkvKiBDYW4ndCBleHBhbmQsIGRyb3AgaXQg
Ki8KLQkJCXJldHVybiAoMCk7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfVFNOX0dUKHRzbiwgKmhpZ2hf
dHNuKSkgewotCQkqaGlnaF90c24gPSB0c247Ci0JfQotCS8qIFNlZSBpZiB3ZSBoYXZlIHJlY2Vp
dmVkIHRoaXMgb25lIGFscmVhZHkgKi8KLQlpZiAoU0NUUF9JU19UU05fUFJFU0VOVChhc29jLT5t
YXBwaW5nX2FycmF5LCBnYXApIHx8Ci0JICAgIFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJf
bWFwcGluZ19hcnJheSwgZ2FwKSkgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2ZHVwZGF0
YSk7Ci0JCWlmIChhc29jLT5udW1kdXB0c25zIDwgU0NUUF9NQVhfRFVQX1RTTlMpIHsKLQkJCS8q
IFJlY29yZCBhIGR1cCBmb3IgdGhlIG5leHQgb3V0Ym91bmQgc2FjayAqLwotCQkJYXNvYy0+ZHVw
X3RzbnNbYXNvYy0+bnVtZHVwdHNuc10gPSB0c247Ci0JCQlhc29jLT5udW1kdXB0c25zKys7Ci0J
CX0KLQkJYXNvYy0+c2VuZF9zYWNrID0gMTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyoKLQkgKiBD
aGVjayB0byBzZWUgYWJvdXQgdGhlIEdPTkUgZmxhZywgZHVwbGljYXRlcyB3b3VsZCBjYXVzZSBh
IHNhY2sKLQkgKiB0byBiZSBzZW50IHVwIGFib3ZlCi0JICovCi0JaWYgKCgoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCSAgICAgKHN0
Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkg
fHwKLQkgICAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSkp
IHsKLQkJLyoKLQkJICogd2FpdCBhIG1pbnV0ZSwgdGhpcyBndXkgaXMgZ29uZSwgdGhlcmUgaXMg
bm8gbG9uZ2VyIGEKLQkJICogcmVjZWl2ZXIuIFNlbmQgcGVlciBhbiBBQk9SVCEKLQkJICovCi0J
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIp
OwotCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2Vy
ciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJKmFib3J0X2ZsYWcgPSAxOwotCQlyZXR1cm4gKDAp
OwotCX0KLQkvKgotCSAqIE5vdyBiZWZvcmUgZ29pbmcgZnVydGhlciB3ZSBzZWUgaWYgdGhlcmUg
aXMgcm9vbS4gSWYgTk9UIHRoZW4gd2UKLQkgKiBNQVkgbGV0IG9uZSB0aHJvdWdoIG9ubHkgSUYg
dGhpcyBUU04gaXMgdGhlIG9uZSB3ZSBhcmUgd2FpdGluZwotCSAqIGZvciBvbiBhIHBhcnRpYWwg
ZGVsaXZlcnkgQVBJLgotCSAqLwotCi0JLyogSXMgdGhlIHN0cmVhbSB2YWxpZD8gKi8KLQlpZiAo
c2lkID49IGFzb2MtPnN0cmVhbWluY250KSB7Ci0JCXN0cnVjdCBzY3RwX2Vycm9yX2ludmFsaWRf
c3RyZWFtICpjYXVzZTsKLQotCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9m
KHN0cnVjdCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFtKSwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJaWYgKG9wX2VyciAhPSBO
VUxMKSB7Ci0JCQkvKiBhZGQgc29tZSBzcGFjZSB1cCBmcm9udCBzbyBwcmVwZW5kIHdpbGwgd29y
ayB3ZWxsICovCi0JCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2NodW5raGRyKSk7Ci0JCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9p
bnZhbGlkX3N0cmVhbSAqKTsKLQkJCS8qCi0JCQkgKiBFcnJvciBjYXVzZXMgYXJlIGp1c3QgcGFy
YW0ncyBhbmQgdGhpcyBvbmUgaGFzCi0JCQkgKiB0d28gYmFjayB0byBiYWNrIHBoZHIsIG9uZSB3
aXRoIHRoZSBlcnJvciB0eXBlCi0JCQkgKiBhbmQgc2l6ZSwgdGhlIG90aGVyIHdpdGggdGhlIHN0
cmVhbWlkIGFuZCBhIHJzdmQKLQkJCSAqLwotCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0pOwotCQkJY2F1c2UtPmNhdXNlLmNv
ZGUgPSBodG9ucyhTQ1RQX0NBVVNFX0lOVkFMSURfU1RSRUFNKTsKLQkJCWNhdXNlLT5jYXVzZS5s
ZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0pKTsK
LQkJCWNhdXNlLT5zdHJlYW1faWQgPSBodG9ucyhzaWQpOwotCQkJY2F1c2UtPnJlc2VydmVkID0g
aHRvbnMoMCk7Ci0JCQlzY3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOwotCQl9Ci0JCVND
VFBfU1RBVF9JTkNSKHNjdHBzX2JhZHNpZCk7Ci0JCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2Ip
OwotCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBnYXApOwot
CQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkg
ewotCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsKLQkJfQotCQlpZiAo
dHNuID09IChhc29jLT5jdW11bGF0aXZlX3RzbiArIDEpKSB7Ci0JCQkvKiBVcGRhdGUgY3VtLWFj
ayAqLwotCQkJYXNvYy0+Y3VtdWxhdGl2ZV90c24gPSB0c247Ci0JCX0KLQkJcmV0dXJuICgwKTsK
LQl9Ci0JLyoKLQkgKiBJZiBpdHMgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIGxldHMgc2VlIGlmIHdl
IGNhbgotCSAqIGZpbmQgdGhlIGNvbnRyb2wgb24gdGhlIHJlYXNzZW1ibHkgcXVldWVzLgotCSAq
LwotCWlmICgoY2hrX3R5cGUgPT0gU0NUUF9JREFUQSkgJiYKLQkgICAgKChjaGtfZmxhZ3MgJiBT
Q1RQX0RBVEFfRklSU1RfRlJBRykgPT0gMCkgJiYKLQkgICAgKGZzbiA9PSAwKSkgewotCQkvKiAK
LQkJICogIFRoZSBmaXJzdCAqbXVzdCogYmUgZnNuIDAsIGFuZCBvdGhlciAKLQkJICogIChtaWRk
bGUvZW5kKSBwaWVjZXMgY2FuICpub3QqIGJlIGZzbiAwLgotCQkgKiBYWFg6IFRoaXMgY2FuIGhh
cHBlbiBpbiBjYXNlIG9mIGEgd3JhcCBhcm91bmQuCi0JCSAqICAgICAgSWdub3JlIGlzIGZvciBu
b3cuCi0JCSAqLwotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRlNOIHplcm8gZm9yIE1J
RD0lOC44eCwgYnV0IGZsYWdzPSUyLjJ4IiwKLQkJICAgICAgICAgbWlkLCBjaGtfZmxhZ3MpOwot
CQlnb3RvIGVycl9vdXQ7Ci0JfQotCWNvbnRyb2wgPSBzY3RwX2ZpbmRfcmVhc21fZW50cnkoJmFz
b2MtPnN0cm1pbltzaWRdLCBtaWQsIG9yZGVyZWQsIGFzb2MtPmlkYXRhX3N1cHBvcnRlZCk7Ci0J
U0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgImNodW5rX2ZsYWdzOjB4JXggbG9vayBmb3IgY29udHJv
bCBvbiBxdWV1ZXMgJXBcbiIsCi0JCWNoa19mbGFncywgY29udHJvbCk7Ci0JaWYgKChjaGtfZmxh
Z3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpICE9IFNDVFBfREFUQV9OT1RfRlJBRykgewotCQkvKiBT
ZWUgaWYgd2UgY2FuIGZpbmQgdGhlIHJlLWFzc2VtYmx5IGVudGl0eSAqLwotCQlpZiAoY29udHJv
bCAhPSBOVUxMKSB7Ci0JCQkvKiBXZSBmb3VuZCBzb21ldGhpbmcsIGRvZXMgaXQgYmVsb25nPyAq
LwotCQkJaWYgKG9yZGVyZWQgJiYgKG1pZCAhPSBjb250cm9sLT5taWQpKSB7Ci0JCQkJc25wcmlu
dGYobXNnLCBzaXplb2YobXNnKSwgIlJlYXNzZW1ibHkgcHJvYmxlbSAoTUlEPSU4Ljh4KSIsIG1p
ZCk7Ci0JCQllcnJfb3V0OgotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0JCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9h
Ym9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTU7Ci0JCQkJc2N0
cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0JCQkJKmFib3J0X2ZsYWcgPSAxOwotCQkJCXJldHVybiAoMCk7Ci0J
CQl9Ci0JCQlpZiAob3JkZXJlZCAmJiAoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NU
UF9EQVRBX1VOT1JERVJFRCkpIHsKLQkJCQkvKiBXZSBjYW4ndCBoYXZlIGEgc3dpdGNoZWQgb3Jk
ZXIgd2l0aCBhbiB1bm9yZGVyZWQgY2h1bmsgKi8KLQkJCQlzbnByaW50Zihtc2csIHNpemVvZiht
c2cpLCAiQWxsIGZyYWdtZW50cyBvZiBhIHVzZXIgbWVzc2FnZSBtdXN0IGJlIG9yZGVyZWQgb3Ig
dW5vcmRlcmVkIChUU049JTguOHgpIiwKLQkJCQkJIHRzbik7Ci0JCQkJZ290byBlcnJfb3V0Owot
CQkJfQotCQkJaWYgKCFvcmRlcmVkICYmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYg
U0NUUF9EQVRBX1VOT1JERVJFRCkgPT0gMCkpIHsKLQkJCQkvKiBXZSBjYW4ndCBoYXZlIGEgc3dp
dGNoZWQgdW5vcmRlcmVkIHdpdGggYSBvcmRlcmVkIGNodW5rICovCi0JCQkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIkFsbCBmcmFnbWVudHMgb2YgYSB1c2VyIG1lc3NhZ2UgbXVzdCBiZSBv
cmRlcmVkIG9yIHVub3JkZXJlZCAoVFNOPSU4Ljh4KSIsCi0JCQkJCSB0c24pOwotCQkJCWdvdG8g
ZXJyX291dDsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCS8qIEl0cyBhIGNvbXBsZXRlIHNlZ21l
bnQuIExldHMgdmFsaWRhdGUgd2UKLQkJICogZG9uJ3QgaGF2ZSBhIHJlLWFzc2VtYmx5IGdvaW5n
IG9uIHdpdGgKLQkJICogdGhlIHNhbWUgU3RyZWFtL1NlcSAoZm9yIG9yZGVyZWQpIG9yIGluCi0J
CSAqIHRoZSBzYW1lIFN0cmVhbSBmb3IgdW5vcmRlcmVkLgotCQkgKi8KLQkJaWYgKGNvbnRyb2wg
IT0gTlVMTCkgewotCQkJaWYgKG9yZGVyZWQgfHwgYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7Ci0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgImNodW5rX2ZsYWdzOiAweCV4IGR1cCBkZXRlY3Rl
ZCBvbiBNSUQ6ICV1XG4iLAotCQkJCQljaGtfZmxhZ3MsIG1pZCk7Ci0JCQkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIkR1cGxpY2F0ZSBNSUQ9JTguOHggZGV0ZWN0ZWQuIiwgbWlkKTsKLQkJ
CQlnb3RvIGVycl9vdXQ7Ci0JCQl9IGVsc2UgewotCQkJCWlmICgodHNuID09IGNvbnRyb2wtPmZz
bl9pbmNsdWRlZCArIDEpICYmCi0JCQkJICAgIChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkpIHsK
LQkJCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIklsbGVnYWwgbWVzc2FnZSBzZXF1ZW5j
ZSwgbWlzc2luZyBlbmQgZm9yIE1JRDogJTguOHgiLCBjb250cm9sLT5mc25faW5jbHVkZWQpOwot
CQkJCQlnb3RvIGVycl9vdXQ7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJY29udHJvbCA9IE5VTEw7Ci0J
CQkJfQotCQkJfQotCQl9Ci0JfQotCS8qIG5vdyBkbyB0aGUgdGVzdHMgKi8KLQlpZiAoKChhc29j
LT5jbnRfb25fYWxsX3N0cmVhbXMgKwotCSAgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSAr
Ci0JICAgICAgYXNvYy0+Y250X21zZ19vbl9zYikgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21h
eF9jaHVua3Nfb25fcXVldWUpKSB8fAotCSAgICAoKChpbnQpYXNvYy0+bXlfcnduZCkgPD0gMCkp
IHsKLQkJLyoKLQkJICogV2hlbiB3ZSBoYXZlIE5PIHJvb20gaW4gdGhlIHJ3bmQgd2UgY2hlY2sg
dG8gbWFrZSBzdXJlCi0JCSAqIHRoZSByZWFkZXIgaXMgZG9pbmcgaXRzIGpvYi4uLgotCQkgKi8K
LQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Yuc2JfY2MpIHsKLQkJCS8qIHNvbWUgdG8g
cmVhZCwgd2FrZS11cCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQkJc3RydWN0IHNvY2tldCAqc287Ci0KLQkJCXNvID0gU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhz
bywgMSk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCQkvKiBhc3NvYyB3YXMgZnJlZWQgd2hpbGUgd2Ugd2Vy
ZSB1bmxvY2tlZCAqLwotCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQkJcmV0dXJu
ICgwKTsKLQkJCX0KLSNlbmRpZgotCQkJc2N0cF9zb3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3Rj
Yi0+c2N0cF9zb2NrZXQpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgot
CQl9Ci0JCS8qIG5vdyBpcyBpdCBpbiB0aGUgbWFwcGluZyBhcnJheSBvZiB3aGF0IHdlIGhhdmUg
YWNjZXB0ZWQ/ICovCi0JCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0RBVEEpIHsKLQkJCWlmIChTQ1RQ
X1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApICYmCi0JCQkgICAgU0NU
UF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotCQkJCS8q
IE5vcGUgbm90IGluIHRoZSB2YWxpZCByYW5nZSBkdW1wIGl0ICovCi0JCQlkdW1wX3BhY2tldDoK
LQkJCQlzY3RwX3NldF9yd25kKHN0Y2IsIGFzb2MpOwotCQkJCWlmICgoYXNvYy0+Y250X29uX2Fs
bF9zdHJlYW1zICsKLQkJCQkgICAgIGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSArCi0JCQkJICAg
ICBhc29jLT5jbnRfbXNnX29uX3NiKSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5r
c19vbl9xdWV1ZSkpIHsKLQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZGF0YWRyb3BjaGtsbXQp
OwotCQkJCX0gZWxzZSB7Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2RhdGFkcm9wcnduZCk7
Ci0JCQkJfQotCQkJCSpicmVha19mbGFnID0gMTsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQl9
IGVsc2UgewotCQkJaWYgKGNvbnRyb2wgPT0gTlVMTCkgewotCQkJCWdvdG8gZHVtcF9wYWNrZXQ7
Ci0JCQl9Ci0JCQlpZiAoU0NUUF9UU05fR1QoZnNuLCBjb250cm9sLT50b3BfZnNuKSkgewotCQkJ
CWdvdG8gZHVtcF9wYWNrZXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0jaWZkZWYgU0NUUF9BU09DTE9HX09G
X1RTTlMKLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQlpZiAoYXNvYy0+dHNuX2luX2F0
ID49IFNDVFBfVFNOX0xPR19TSVpFKSB7Ci0JCWFzb2MtPnRzbl9pbl9hdCA9IDA7Ci0JCWFzb2Mt
PnRzbl9pbl93cmFwcGVkID0gMTsKLQl9Ci0JYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9h
dF0udHNuID0gdHNuOwotCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnN0cm0gPSBz
aWQ7Ci0JYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uc2VxID0gbWlkOwotCWFzb2Mt
PmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnN6ID0gY2hrX2xlbmd0aDsKLQlhc29jLT5pbl90
c25sb2dbYXNvYy0+dHNuX2luX2F0XS5mbGdzID0gY2h1bmtfZmxhZ3M7Ci0JYXNvYy0+aW5fdHNu
bG9nW2Fzb2MtPnRzbl9pbl9hdF0uc3RjYiA9ICh2b2lkICopc3RjYjsKLQlhc29jLT5pbl90c25s
b2dbYXNvYy0+dHNuX2luX2F0XS5pbl9wb3MgPSBhc29jLT50c25faW5fYXQ7Ci0JYXNvYy0+aW5f
dHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0uaW5fb3V0ID0gMTsKLQlhc29jLT50c25faW5fYXQrKzsK
LSNlbmRpZgotCS8qCi0JICogQmVmb3JlIHdlIGNvbnRpbnVlIGxldHMgdmFsaWRhdGUgdGhhdCB3
ZSBhcmUgbm90IGJlaW5nIGZvb2xlZCBieQotCSAqIGFuIGV2aWwgYXR0YWNrZXIuIFdlIGNhbiBv
bmx5IGhhdmUgTmsgY2h1bmtzIGJhc2VkIG9uIG91ciBUU04KLQkgKiBzcHJlYWQgYWxsb3dlZCBi
eSB0aGUgbWFwcGluZyBhcnJheSBOICogOCBiaXRzLCBzbyB0aGVyZSBpcyBubwotCSAqIHdheSBv
dXIgc3RyZWFtIHNlcXVlbmNlIG51bWJlcnMgY291bGQgaGF2ZSB3cmFwcGVkLiBXZSBvZiBjb3Vy
c2UKLQkgKiBvbmx5IHZhbGlkYXRlIHRoZSBGSVJTVCBmcmFnbWVudCBzbyB0aGUgYml0IG11c3Qg
YmUgc2V0LgotCSAqLwotCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpICYm
Ci0JICAgIChUQUlMUV9FTVBUWSgmYXNvYy0+cmVzZXRIZWFkKSkgJiYKLQkgICAgKGNoa19mbGFn
cyAmIFNDVFBfREFUQV9VTk9SREVSRUQpID09IDAgJiYKLQkgICAgU0NUUF9NSURfR0UoYXNvYy0+
aWRhdGFfc3VwcG9ydGVkLCBhc29jLT5zdHJtaW5bc2lkXS5sYXN0X21pZF9kZWxpdmVyZWQsIG1p
ZCkpIHsKLQkJLyogVGhlIGluY29taW5nIHNzZXEgaXMgYmVoaW5kIHdoZXJlIHdlIGxhc3QgZGVs
aXZlcmVkPyAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkVWSUwvQnJva2VuLUR1
cCBTLVNFUTogJXUgZGVsaXZlcmVkOiAldSBmcm9tIHBlZXIsIEFib3J0IVxuIiwKLQkJCW1pZCwg
YXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkKTsKLQotCQlpZiAoYXNvYy0+aWRh
dGFfc3VwcG9ydGVkKSB7Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiRGVsaXZlcmVk
IE1JRD0lOC44eCwgZ290IFRTTj0lOC44eCwgU0lEPSU0LjR4LCBNSUQ9JTguOHgiLAotCQkJICAg
ICAgICAgYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkLAotCQkJICAgICAgICAg
dHNuLAotCQkJICAgICAgICAgc2lkLAotCQkJICAgICAgICAgbWlkKTsKLQkJfSBlbHNlIHsKLQkJ
CXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgU1NOPSU0LjR4LCBnb3QgVFNO
PSU4Ljh4LCBTSUQ9JTQuNHgsIFNTTj0lNC40eCIsCi0JCQkgICAgICAgICAodWludDE2X3QpYXNv
Yy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkLAotCQkJICAgICAgICAgdHNuLAotCQkJ
ICAgICAgICAgc2lkLAotCQkJICAgICAgICAgKHVpbnQxNl90KW1pZCk7Ci0JCX0KLQkJb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNn
KTsKLQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5E
QVRBICsgU0NUUF9MT0NfMTY7Ci0JCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0
cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkqYWJvcnRfZmxhZyA9
IDE7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7Ci0J
CXRoZV9sZW4gPSAoY2hrX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuaykp
OwotCX0gZWxzZSB7Ci0JCXRoZV9sZW4gPSAoY2hrX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0
cF9kYXRhX2NodW5rKSk7Ci0JfQotCWlmIChsYXN0X2NodW5rID09IDApIHsKLQkJaWYgKGNoa190
eXBlID09IFNDVFBfSURBVEEpIHsKLQkJCWRtYnVmID0gU0NUUF9NX0NPUFlNKCptLAotCQkJCQkg
ICAgIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspKSwKLQkJCQkJICAg
ICB0aGVfbGVuLCBNX05PV0FJVCk7Ci0JCX0gZWxzZSB7Ci0JCQlkbWJ1ZiA9IFNDVFBfTV9DT1BZ
TSgqbSwKLQkJCQkJICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmsp
KSwKLQkJCQkJICAgICB0aGVfbGVuLCBNX05PV0FJVCk7Ci0JCX0KLSNpZmRlZiBTQ1RQX01CVUZf
TE9HR0lORwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19tYmMoZG1idWYsIFNDVFBfTUJV
Rl9JQ09QWSk7Ci0JCX0KLSNlbmRpZgotCX0gZWxzZSB7Ci0JCS8qIFdlIGNhbiBzdGVhbCB0aGUg
bGFzdCBjaHVuayAqLwotCQlpbnQgbF9sZW47Ci0JCWRtYnVmID0gKm07Ci0JCS8qIGxvcCBvZmYg
dGhlIHRvcCBwYXJ0ICovCi0JCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7Ci0JCQltX2Fk
aihkbWJ1ZiwgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuaykpKTsKLQkJ
fSBlbHNlIHsKLQkJCW1fYWRqKGRtYnVmLCAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Rh
dGFfY2h1bmspKSk7Ci0JCX0KLQkJaWYgKFNDVFBfQlVGX05FWFQoZG1idWYpID09IE5VTEwpIHsK
LQkJCWxfbGVuID0gU0NUUF9CVUZfTEVOKGRtYnVmKTsKLQkJfSBlbHNlIHsKLQkJCS8qIG5lZWQg
dG8gY291bnQgdXAgdGhlIHNpemUgaG9wZWZ1bGx5Ci0JCQkgKiBkb2VzIG5vdCBoaXQgdGhpcyB0
byBvZnRlbiA6LTAKLQkJCSAqLwotCQkJc3RydWN0IG1idWYgKmxhdDsKLQotCQkJbF9sZW4gPSAw
OwotCQkJZm9yIChsYXQgPSBkbWJ1ZjsgbGF0OyBsYXQgPSBTQ1RQX0JVRl9ORVhUKGxhdCkpIHsK
LQkJCQlsX2xlbiArPSBTQ1RQX0JVRl9MRU4obGF0KTsKLQkJCX0KLQkJfQotCQlpZiAobF9sZW4g
PiB0aGVfbGVuKSB7Ci0JCQkvKiBUcmltIHRoZSBlbmQgcm91bmQgYnl0ZXMgb2ZmICB0b28gKi8K
LQkJCW1fYWRqKGRtYnVmLCAtKGxfbGVuIC0gdGhlX2xlbikpOwotCQl9Ci0JfQotCWlmIChkbWJ1
ZiA9PSBOVUxMKSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX25vbWVtKTsKLQkJcmV0dXJuICgw
KTsKLQl9Ci0JLyoKLQkgKiBOb3cgbm8gbWF0dGVyIHdoYXQsIHdlIG5lZWQgYSBjb250cm9sLCBn
ZXQgb25lCi0JICogaWYgd2UgZG9uJ3QgaGF2ZSBvbmUgKHdlIG1heSBoYXZlIGdvdHRlbiBpdAot
CSAqIGFib3ZlIHdoZW4gd2UgZm91bmQgdGhlIG1lc3NhZ2Ugd2FzIGZyYWdtZW50ZWQKLQkgKi8K
LQlpZiAoY29udHJvbCA9PSBOVUxMKSB7Ci0JCXNjdHBfYWxsb2NfYV9yZWFkcShzdGNiLCBjb250
cm9sKTsKLQkJc2N0cF9idWlsZF9yZWFkcV9lbnRyeV9tYWMoY29udHJvbCwgc3RjYiwgYXNvYy0+
Y29udGV4dCwgbmV0LCB0c24sCi0JCQkJCSAgIHBwaWQsCi0JCQkJCSAgIHNpZCwKLQkJCQkJICAg
Y2hrX2ZsYWdzLAotCQkJCQkgICBOVUxMLCBmc24sIG1pZCk7Ci0JCWlmIChjb250cm9sID09IE5V
TEwpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX25vbWVtKTsKLQkJCXJldHVybiAoMCk7Ci0J
CX0KLQkJaWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9O
T1RfRlJBRykgewotCQkJc3RydWN0IG1idWYgKm1tOwotCi0JCQljb250cm9sLT5kYXRhID0gZG1i
dWY7Ci0JCQlmb3IgKG1tID0gY29udHJvbC0+ZGF0YTsgbW07IG1tID0gbW0tPm1fbmV4dCkgewot
CQkJCWNvbnRyb2wtPmxlbmd0aCArPSBTQ1RQX0JVRl9MRU4obW0pOwotCQkJfQotCQkJY29udHJv
bC0+dGFpbF9tYnVmID0gTlVMTDsKLQkJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7Ci0JCQljb250
cm9sLT5sYXN0X2ZyYWdfc2VlbiA9IDE7Ci0JCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAx
OwotCQkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gZnNuOwotCQkJY29udHJvbC0+dG9wX2ZzbiA9
IGZzbjsKLQkJfQotCQljcmVhdGVkX2NvbnRyb2wgPSAxOwotCX0KLQlTQ1RQREJHKFNDVFBfREVC
VUdfWFhYLCAiY2h1bmtfZmxhZ3M6IDB4JXggb3JkZXJlZDogJWQgTUlEOiAldSBjb250cm9sOiAl
cFxuIiwKLQkJY2hrX2ZsYWdzLCBvcmRlcmVkLCBtaWQsIGNvbnRyb2wpOwotCWlmICgoY2hrX2Zs
YWdzICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcgJiYKLQkgICAg
VEFJTFFfRU1QVFkoJmFzb2MtPnJlc2V0SGVhZCkgJiYKLQkgICAgKChvcmRlcmVkID09IDApIHx8
Ci0JICAgICAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBhc29jLT5zdHJtaW5b
c2lkXS5sYXN0X21pZF9kZWxpdmVyZWQgKyAxLCBtaWQpICYmCi0JICAgICAgVEFJTFFfRU1QVFko
JmFzb2MtPnN0cm1pbltzaWRdLmlucXVldWUpKSkpIHsKLQkJLyogQ2FuZGlkYXRlIGZvciBleHBy
ZXNzIGRlbGl2ZXJ5ICovCi0JCS8qCi0JCSAqIEl0cyBub3QgZnJhZ21lbnRlZCwgTm8gUEQtQVBJ
IGlzIHVwLCBOb3RoaW5nIGluIHRoZQotCQkgKiBkZWxpdmVyeSBxdWV1ZSwgSXRzIHVuLW9yZGVy
ZWQgT1Igb3JkZXJlZCBhbmQgdGhlIG5leHQgdG8KLQkJICogZGVsaXZlciBBTkQgbm90aGluZyBl
bHNlIGlzIHN0dWNrIG9uIHRoZSBzdHJlYW0gcXVldWUsCi0JCSAqIEFuZCB0aGVyZSBpcyByb29t
IGZvciBpdCBpbiB0aGUgc29ja2V0IGJ1ZmZlci4gTGV0cyBqdXN0Ci0JCSAqIHN0dWZmIGl0IHVw
IHRoZSBidWZmZXIuLi4uCi0JCSAqLwotCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9t
YXBwaW5nX2FycmF5LCBnYXApOwotCQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21h
cCA9IHRzbjsKLQkJfQotCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiSW5qZWN0aW5nIGNvbnRy
b2w6ICVwIHRvIGJlIHJlYWQgKE1JRDogJXUpXG4iLAotCQkJY29udHJvbCwgbWlkKTsKLQotCQlz
Y3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkgICAgICAgICAgICAgICAg
ICBjb250cm9sLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwKLQkJICAgICAgICAgICAgICAg
ICAgMSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0KLQkJ
aWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwKSB7Ci0JCQkvKiBmb3Ig
b3JkZXJlZCwgYnVtcCB3aGF0IHdlIGRlbGl2ZXJlZCAqLwotCQkJYXNvYy0+c3RybWluW3NpZF0u
bGFzdF9taWRfZGVsaXZlcmVkKys7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmV4
cHJlc3MpOwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9TVFJfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX3N0cm1fZGVsX2FsdChzdGNiLCB0
c24sIG1pZCwgc2lkLAotCQkJCQkgICAgICBTQ1RQX1NUUl9MT0dfRlJPTV9FWFBSU19ERUwpOwot
CQl9Ci0JCWNvbnRyb2wgPSBOVUxMOwotCQlnb3RvIGZpbmlzaF9leHByZXNzX2RlbDsKLQl9Ci0K
LQkvKiBOb3cgd2lsbCB3ZSBuZWVkIGEgY2h1bmsgdG9vPyAqLwotCWlmICgoY2hrX2ZsYWdzICYg
U0NUUF9EQVRBX05PVF9GUkFHKSAhPSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJc2N0cF9hbGxv
Y19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JCWlmIChjaGsgPT0gTlVMTCkgewotCQkJLyogTm8gbWVt
b3J5IHNvIHdlIGRyb3AgdGhlIGNodW5rICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19ub21l
bSk7Ci0JCQlpZiAobGFzdF9jaHVuayA9PSAwKSB7Ci0JCQkJLyogd2UgY29waWVkIGl0LCBmcmVl
IHRoZSBjb3B5ICovCi0JCQkJc2N0cF9tX2ZyZWVtKGRtYnVmKTsKLQkJCX0KLQkJCXJldHVybiAo
MCk7Ci0JCX0KLQkJY2hrLT5yZWMuZGF0YS50c24gPSB0c247Ci0JCWNoay0+bm9fZnJfYWxsb3dl
ZCA9IDA7Ci0JCWNoay0+cmVjLmRhdGEuZnNuID0gZnNuOwotCQljaGstPnJlYy5kYXRhLm1pZCA9
IG1pZDsKLQkJY2hrLT5yZWMuZGF0YS5zaWQgPSBzaWQ7Ci0JCWNoay0+cmVjLmRhdGEucHBpZCA9
IHBwaWQ7Ci0JCWNoay0+cmVjLmRhdGEuY29udGV4dCA9IHN0Y2ItPmFzb2MuY29udGV4dDsKLQkJ
Y2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOwotCQljaGstPnJlYy5kYXRh
LnJjdl9mbGFncyA9IGNoa19mbGFnczsKLQkJY2hrLT5hc29jID0gYXNvYzsKLQkJY2hrLT5zZW5k
X3NpemUgPSB0aGVfbGVuOwotCQljaGstPndob1RvID0gbmV0OwotCQlTQ1RQREJHKFNDVFBfREVC
VUdfWFhYLCAiQnVpbGRpbmcgY2s6ICVwIGZvciBjb250cm9sOiAlcCB0byBiZSByZWFkIChNSUQ6
ICV1KVxuIiwKLQkJCWNoaywKLQkJCWNvbnRyb2wsIG1pZCk7Ci0JCWF0b21pY19hZGRfaW50KCZu
ZXQtPnJlZl9jb3VudCwgMSk7Ci0JCWNoay0+ZGF0YSA9IGRtYnVmOwotCX0KLQkvKiBTZXQgdGhl
IGFwcHJvcHJpYXRlIFRTTiBtYXJrICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19k
cmFpbikgPT0gMCkgewotCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2Fy
cmF5LCBnYXApOwotCQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbnJfbWFwKSkgewotCQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IHRzbjsK
LQkJfQotCX0gZWxzZSB7Ci0JCVNDVFBfU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJy
YXksIGdhcCk7Ci0JCWlmIChTQ1RQX1RTTl9HVCh0c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lk
ZV9tYXApKSB7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gdHNuOwotCQl9Ci0J
fQotCS8qIE5vdyBpcyBpdCBjb21wbGV0ZSAoaS5lLiBub3QgZnJhZ21lbnRlZCk/ICovCi0JaWYg
KChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpID09IFNDVFBfREFUQV9OT1RfRlJBRykg
ewotCQkvKgotCQkgKiBTcGVjaWFsIGNoZWNrIGZvciB3aGVuIHN0cmVhbXMgYXJlIHJlc2V0dGlu
Zy4gV2UKLQkJICogY291bGQgYmUgbW9yZSBzbWFydCBhYm91dCB0aGlzIGFuZCBjaGVjayB0aGUK
LQkJICogYWN0dWFsIHN0cmVhbSB0byBzZWUgaWYgaXQgaXMgbm90IGJlaW5nIHJlc2V0Li4KLQkJ
ICogdGhhdCB3YXkgd2Ugd291bGQgbm90IGNyZWF0ZSBhIEhPTEIgd2hlbiBhbW9uZ3N0Ci0JCSAq
IHN0cmVhbXMgYmVpbmcgcmVzZXQgYW5kIHRob3NlIG5vdCBiZWluZyByZXNldC4KLQkJICoKLQkJ
ICovCi0JCWlmICgoKGxpc3RlID0gVEFJTFFfRklSU1QoJmFzb2MtPnJlc2V0SGVhZCkpICE9IE5V
TEwpICYmCi0JCSAgICBTQ1RQX1RTTl9HVCh0c24sIGxpc3RlLT50c24pKSB7Ci0JCQkvKgotCQkJ
ICogeWVwIGl0cyBwYXN0IHdoZXJlIHdlIG5lZWQgdG8gcmVzZXQuLi4gZ28KLQkJCSAqIGFoZWFk
IGFuZCBxdWV1ZSBpdC4KLQkJCSAqLwotCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5wZW5kaW5n
X3JlcGx5X3F1ZXVlKSkgewotCQkJCS8qIGZpcnN0IG9uZSBvbiAqLwotCQkJCVRBSUxRX0lOU0VS
VF9UQUlMKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmxjb250cm9sLCAqbmxjb250
cm9sOwotCQkJCXVuc2lnbmVkIGNoYXIgaW5zZXJ0ZWQgPSAwOwotCQkJCVRBSUxRX0ZPUkVBQ0hf
U0FGRShsY29udHJvbCwgJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIG5leHQsIG5sY29udHJv
bCkgewotCQkJCQlpZiAoU0NUUF9UU05fR1QoY29udHJvbC0+c2luZm9fdHNuLCBsY29udHJvbC0+
c2luZm9fdHNuKSkgewotCi0JCQkJCQljb250aW51ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8q
IGZvdW5kIGl0ICovCi0JCQkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKGxjb250cm9sLCBjb250cm9s
LCBuZXh0KTsKLQkJCQkJCWluc2VydGVkID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJ
fQotCQkJCWlmIChpbnNlcnRlZCA9PSAwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIG11c3QgYmUgcHV0
IGF0IGVuZCwgdXNlCi0JCQkJCSAqIHByZXZQIChhbGwgc2V0dXAgZnJvbQotCQkJCQkgKiBsb29w
KSB0byBzZXR1cCBuZXh0UC4KLQkJCQkJICovCi0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29j
LT5wZW5kaW5nX3JlcGx5X3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCQl9Ci0JCQl9Ci0JCQln
b3RvIGZpbmlzaF9leHByZXNzX2RlbDsKLQkJfQotCQlpZiAoY2hrX2ZsYWdzICYgU0NUUF9EQVRB
X1VOT1JERVJFRCkgewotCQkJLyogcXVldWUgZGlyZWN0bHkgaW50byBzb2NrZXQgYnVmZmVyICov
Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiVW5vcmRlcmVkIGRhdGEgdG8gYmUgcmVhZCBj
b250cm9sOiAlcCBNSUQ6ICV1XG4iLAotCQkJCWNvbnRyb2wsIG1pZCk7Ci0JCQlzY3RwX21hcmtf
bm9uX3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOwotCQkJc2N0cF9hZGRfdG9f
cmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2ws
Ci0JCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKLQkJ
CSAgICAgICAgICAgICAgICAgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCi0JCX0gZWxzZSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLCAiUXVldWUg
Y29udHJvbDogJXAgZm9yIHJlb3JkZXJpbmcgTUlEOiAldVxuIiwgY29udHJvbCwKLQkJCQltaWQp
OwotCQkJc2N0cF9xdWV1ZV9kYXRhX3RvX3N0cmVhbShzdGNiLCBhc29jLCBjb250cm9sLCBhYm9y
dF9mbGFnLCAmbmVlZF9yZWFzbV9jaGVjayk7Ci0JCQlpZiAoKmFib3J0X2ZsYWcpIHsKLQkJCQlp
ZiAobGFzdF9jaHVuaykgewotCQkJCQkqbSA9IE5VTEw7Ci0JCQkJfQotCQkJCXJldHVybiAoMCk7
Ci0JCQl9Ci0JCX0KLQkJZ290byBmaW5pc2hfZXhwcmVzc19kZWw7Ci0JfQotCS8qIElmIHdlIHJl
YWNoIGhlcmUgaXRzIGEgcmVhc3NlbWJseSAqLwotCW5lZWRfcmVhc21fY2hlY2sgPSAxOwotCVND
VFBEQkcoU0NUUF9ERUJVR19YWFgsCi0JCSJRdWV1ZSBkYXRhIHRvIHN0cmVhbSBmb3IgcmVhc20g
Y29udHJvbDogJXAgTUlEOiAldVxuIiwKLQkJY29udHJvbCwgbWlkKTsKLQlzY3RwX3F1ZXVlX2Rh
dGFfZm9yX3JlYXNtKHN0Y2IsIGFzb2MsIGNvbnRyb2wsIGNoaywgY3JlYXRlZF9jb250cm9sLCBh
Ym9ydF9mbGFnLCB0c24pOwotCWlmICgqYWJvcnRfZmxhZykgewotCQkvKgotCQkgKiB0aGUgYXNz
b2MgaXMgbm93IGdvbmUgYW5kIGNoayB3YXMgcHV0IG9udG8gdGhlCi0JCSAqIHJlYXNtIHF1ZXVl
LCB3aGljaCBoYXMgYWxsIGJlZW4gZnJlZWQuCi0JCSAqLwotCQlpZiAobGFzdF9jaHVuaykgewot
CQkJKm0gPSBOVUxMOwotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfQotZmluaXNoX2V4cHJlc3NfZGVs
OgotCS8qIEhlcmUgd2UgdGlkeSB1cCB0aGluZ3MgKi8KLQlpZiAodHNuID09IChhc29jLT5jdW11
bGF0aXZlX3RzbiArIDEpKSB7Ci0JCS8qIFVwZGF0ZSBjdW0tYWNrICovCi0JCWFzb2MtPmN1bXVs
YXRpdmVfdHNuID0gdHNuOwotCX0KLQlpZiAobGFzdF9jaHVuaykgewotCQkqbSA9IE5VTEw7Ci0J
fQotCWlmIChvcmRlcmVkKSB7Ci0JCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbm9y
ZGVyY2h1bmtzKTsKLQl9IGVsc2UgewotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNf
aW51bm9yZGVyY2h1bmtzKTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmRhdGEpOwot
CS8qIFNldCBpdCBwcmVzZW50IHBsZWFzZSAqLwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NUUl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19z
dHJtX2RlbF9hbHQoc3RjYiwgdHNuLCBtaWQsIHNpZCwgU0NUUF9TVFJfTE9HX0ZST01fTUFSS19U
U04pOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWFwKGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24sIGFzb2MtPmN1bXVsYXRpdmVfdHNuLAotCQkJICAgICBhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9QUkVQQVJFX1NMSURFKTsKLQl9Ci0JaWYgKG5lZWRf
cmVhc21fY2hlY2spIHsKLQkJKHZvaWQpc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsIGFz
b2MsICZhc29jLT5zdHJtaW5bc2lkXSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOwotCQluZWVk
X3JlYXNtX2NoZWNrID0gMDsKLQl9Ci0JLyogY2hlY2sgdGhlIHNwZWNpYWwgZmxhZyBmb3Igc3Ry
ZWFtIHJlc2V0cyAqLwotCWlmICgoKGxpc3RlID0gVEFJTFFfRklSU1QoJmFzb2MtPnJlc2V0SGVh
ZCkpICE9IE5VTEwpICYmCi0JICAgIFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBs
aXN0ZS0+dHNuKSkgewotCQkvKgotCQkgKiB3ZSBoYXZlIGZpbmlzaGVkIHdvcmtpbmcgdGhyb3Vn
aCB0aGUgYmFja2xvZ2dlZCBUU04ncyBub3cKLQkJICogdGltZSB0byByZXNldCBzdHJlYW1zLiAx
OiBjYWxsIHJlc2V0IGZ1bmN0aW9uLiAyOiBmcmVlCi0JCSAqIHBlbmRpbmdfcmVwbHkgc3BhY2Ug
MzogZGlzdHJpYnV0ZSBhbnkgY2h1bmtzIGluCi0JCSAqIHBlbmRpbmdfcmVwbHlfcXVldWUuCi0J
CSAqLwotCQlzY3RwX3Jlc2V0X2luX3N0cmVhbShzdGNiLCBsaXN0ZS0+bnVtYmVyX2VudHJpZXMs
IGxpc3RlLT5saXN0X29mX3N0cmVhbXMpOwotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnJlc2V0SGVh
ZCwgbGlzdGUsIG5leHRfcmVzcCk7Ci0JCXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25z
ZShzdGNiLCBsaXN0ZSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCk7Ci0JCVND
VFBfRlJFRShsaXN0ZSwgU0NUUF9NX1NUUkVTRVQpOwotCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1P
UlkqLwotCQlsaXN0ZSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpOwotCQlpZiAoVEFJ
TFFfRU1QVFkoJmFzb2MtPnJlc2V0SGVhZCkpIHsKLQkJCS8qIEFsbCBjYW4gYmUgcmVtb3ZlZCAq
LwotCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5wZW5kaW5nX3JlcGx5X3F1
ZXVlLCBuZXh0LCBuY29udHJvbCkgewotCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+cGVuZGluZ19y
ZXBseV9xdWV1ZSwgY29udHJvbCwgbmV4dCk7Ci0JCQkJc2N0cF9xdWV1ZV9kYXRhX3RvX3N0cmVh
bShzdGNiLCBhc29jLCBjb250cm9sLCBhYm9ydF9mbGFnLCAmbmVlZF9yZWFzbV9jaGVjayk7Ci0J
CQkJaWYgKCphYm9ydF9mbGFnKSB7Ci0JCQkJCXJldHVybiAoMCk7Ci0JCQkJfQotCQkJCWlmIChu
ZWVkX3JlYXNtX2NoZWNrKSB7Ci0JCQkJCSh2b2lkKXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhz
dGNiLCBhc29jLCAmYXNvYy0+c3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV0sIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxEKTsKLQkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDA7Ci0JCQkJfQotCQkJ
fQotCQl9IGVsc2UgewotCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5wZW5k
aW5nX3JlcGx5X3F1ZXVlLCBuZXh0LCBuY29udHJvbCkgewotCQkJCWlmIChTQ1RQX1RTTl9HVChj
b250cm9sLT5zaW5mb190c24sIGxpc3RlLT50c24pKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
CQkvKgotCQkJCSAqIGlmIGNvbnRyb2wtPnNpbmZvX3RzbiBpcyA8PSBsaXN0ZS0+dHNuIHdlIGNh
bgotCQkJCSAqIHByb2Nlc3MgaXQgd2hpY2ggaXMgdGhlIE5PVCBvZgotCQkJCSAqIGNvbnRyb2wt
PnNpbmZvX3RzbiA+IGxpc3RlLT50c24KLQkJCQkgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJmFzb2Mt
PnBlbmRpbmdfcmVwbHlfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCXNjdHBfcXVldWVfZGF0
YV90b19zdHJlYW0oc3RjYiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21f
Y2hlY2spOwotCQkJCWlmICgqYWJvcnRfZmxhZykgewotCQkJCQlyZXR1cm4gKDApOwotCQkJCX0K
LQkJCQlpZiAobmVlZF9yZWFzbV9jaGVjaykgewotCQkJCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVh
c21fY2hlY2soc3RjYiwgYXNvYywgJmFzb2MtPnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1d
LCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7Ci0JCQkJCW5lZWRfcmVhc21fY2hlY2sgPSAwOwot
CQkJCX0KLQkJCX0KLQkJfQotCX0KLQlyZXR1cm4gKDEpOwotfQotCi1zdGF0aWMgY29uc3QgaW50
OF90IHNjdHBfbWFwX2xvb2t1cF90YWJbMjU2XSA9IHsKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwg
MywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywK
LSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNSwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAg
MCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwg
MSwgMCwgMiwgMCwgMSwgMCwgNiwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwg
MCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwg
MiwgMCwgMSwgMCwgNSwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwg
MCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwg
MSwgMCwgNywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwg
MCwgNCwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwg
NSwKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwK
LSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNiwKLSAg
MCwgMSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwg
MSwgMCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNSwKLSAgMCwgMSwg
MCwgMiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgNCwKLSAgMCwgMSwgMCwg
MiwgMCwgMSwgMCwgMywKLSAgMCwgMSwgMCwgMiwgMCwgMSwgMCwgOAotfTsKLQotCi12b2lkCi1z
Y3RwX3NsaWRlX21hcHBpbmdfYXJyYXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQkvKgot
CSAqIE5vdyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIG1hcHBpbmcgYXJyYXkgaW4gYSBjb3Vw
bGUgb2Ygd2F5cy4KLQkgKiAxKSBEaWQgd2UgbW92ZSB0aGUgY3VtLWFjayBwb2ludD8KLQkgKgot
CSAqIFdoZW4geW91IGZpcnN0IGdsYW5jZSBhdCB0aGlzIHlvdSBtaWdodCB0aGluawotCSAqIHRo
YXQgYWxsIGVudHJpZXMgdGhhdCBtYWtlIHVwIHRoZSBwb3NpdGlvbgotCSAqIG9mIHRoZSBjdW0t
YWNrIHdvdWxkIGJlIGluIHRoZSBuci1tYXBwaW5nIGFycmF5Ci0JICogb25seS4uIGkuZS4gdGhp
bmdzIHVwIHRvIHRoZSBjdW0tYWNrIGFyZSBhbHdheXMKLQkgKiBkZWxpdmVyYWJsZS4gVGhhdHMg
dHJ1ZSB3aXRoIG9uZSBleGNlcHRpb24sIHdoZW4KLQkgKiBpdHMgYSBmcmFnbWVudGVkIG1lc3Nh
Z2Ugd2UgbWF5IG5vdCBkZWxpdmVyIHRoZSBkYXRhCi0JICogdW50aWwgc29tZSB0aHJlc2hvbGQg
KG9yIGFsbCBvZiBpdCkgaXMgaW4gcGxhY2UuIFNvCi0JICogd2UgbXVzdCBPUiB0aGUgbnJfbWFw
cGluZ19hcnJheSBhbmQgbWFwcGluZ19hcnJheSB0bwotCSAqIGdldCBhIHRydWUgcGljdHVyZSBv
ZiB0aGUgY3VtLWFjay4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlp
bnQgYXQ7Ci0JdWludDhfdCB2YWw7Ci0JaW50IHNsaWRlX2Zyb20sIHNsaWRlX2VuZCwgbGdhcCwg
ZGlzdGFuY2U7Ci0JdWludDMyX3Qgb2xkX2N1bWFjaywgb2xkX2Jhc2UsIG9sZF9oaWdoZXN0LCBo
aWdoZXN0X3RzbjsKLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQotCW9sZF9jdW1hY2sgPSBhc29j
LT5jdW11bGF0aXZlX3RzbjsKLQlvbGRfYmFzZSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90
c247Ci0Jb2xkX2hpZ2hlc3QgPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCS8qCi0J
ICogV2UgY291bGQgcHJvYmFibHkgaW1wcm92ZSB0aGlzIGEgc21hbGwgYml0IGJ5IGNhbGN1bGF0
aW5nIHRoZQotCSAqIG9mZnNldCBvZiB0aGUgY3VycmVudCBjdW0tYWNrIGFzIHRoZSBzdGFydGlu
ZyBwb2ludC4KLQkgKi8KLQlhdCA9IDA7Ci0JZm9yIChzbGlkZV9mcm9tID0gMDsgc2xpZGVfZnJv
bSA8IHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplOyBzbGlkZV9mcm9tKyspIHsKLQkJdmFs
ID0gYXNvYy0+bnJfbWFwcGluZ19hcnJheVtzbGlkZV9mcm9tXSB8IGFzb2MtPm1hcHBpbmdfYXJy
YXlbc2xpZGVfZnJvbV07Ci0JCWlmICh2YWwgPT0gMHhmZikgewotCQkJYXQgKz0gODsKLQkJfSBl
bHNlIHsKLQkJCS8qIHRoZXJlIGlzIGEgMCBiaXQgKi8KLQkJCWF0ICs9IHNjdHBfbWFwX2xvb2t1
cF90YWJbdmFsXTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0g
YXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArIChhdC0xKTsKLQotCWlmIChTQ1RQX1RTTl9H
VChhc29jLT5jdW11bGF0aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkgJiYK
LSAgICAgICAgICAgIFNDVFBfVFNOX0dUKGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoImh1
aCwgY3VtYWNrIDB4JXggZ3JlYXRlciB0aGFuIGhpZ2gtdHNuIDB4JXggaW4gbWFwIiwKLQkJICAg
ICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApOwot
I2Vsc2UKLQkJU0NUUF9QUklOVEYoImh1aCwgY3VtYWNrIDB4JXggZ3JlYXRlciB0aGFuIGhpZ2gt
dHNuIDB4JXggaW4gbWFwIC0gc2hvdWxkIHBhbmljP1xuIiwKLQkJCSAgICBhc29jLT5jdW11bGF0
aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCk7Ci0JCXNjdHBfcHJpbnRfbWFw
cGluZ19hcnJheShhc29jKTsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19tYXAoMCwgNiwg
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NUUF9NQVBfU0xJREVfUkVTVUxUKTsKLQkJ
fQotCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247
Ci0JCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5jdW11bGF0aXZlX3Rz
bjsKLSNlbmRpZgotCX0KLQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsKLQkJaGlnaGVzdF90c24g
PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOwotCX0gZWxzZSB7Ci0JCWhpZ2hlc3Rf
dHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKLQl9Ci0JaWYgKChhc29jLT5jdW11
bGF0aXZlX3RzbiA9PSBoaWdoZXN0X3RzbikgJiYgKGF0ID49IDgpKSB7Ci0JCS8qIFRoZSBjb21w
bGV0ZSBhcnJheSB3YXMgY29tcGxldGVkIGJ5IGEgc2luZ2xlIEZSICovCi0JCS8qIGhpZ2hlc3Qg
YmVjb21lcyB0aGUgY3VtLWFjayAqLwotCQlpbnQgY2xyOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJ
dW5zaWduZWQgaW50IGk7Ci0jZW5kaWYKLQotCQkvKiBjbGVhciB0aGUgYXJyYXkgKi8KLQkJY2xy
ID0gKChhdCs3KSA+PiAzKTsKLQkJaWYgKGNsciA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSkg
ewotCQkJY2xyID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOwotCQl9Ci0JCW1lbXNldChhc29j
LT5tYXBwaW5nX2FycmF5LCAwLCBjbHIpOwotCQltZW1zZXQoYXNvYy0+bnJfbWFwcGluZ19hcnJh
eSwgMCwgY2xyKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCWZvciAoaSA9IDA7IGkgPCBhc29jLT5t
YXBwaW5nX2FycmF5X3NpemU7IGkrKykgewotCQkJaWYgKChhc29jLT5tYXBwaW5nX2FycmF5W2ld
KSB8fCAoYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpXSkpIHsKLQkJCQlTQ1RQX1BSSU5URigiRXJy
b3IgTWFwcGluZyBhcnJheSdzIG5vdCBjbGVhbiBhdCBjbGVhclxuIik7Ci0JCQkJc2N0cF9wcmlu
dF9tYXBwaW5nX2FycmF5KGFzb2MpOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJYXNvYy0+bWFwcGlu
Z19hcnJheV9iYXNlX3RzbiA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuICsgMTsKLQkJYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX25yX21hcCA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBh
c29jLT5jdW11bGF0aXZlX3RzbjsKLQl9IGVsc2UgaWYgKGF0ID49IDgpIHsKLQkJLyogd2UgY2Fu
IHNsaWRlIHRoZSBtYXBwaW5nIGFycmF5IGRvd24gKi8KLQkJLyogc2xpZGVfZnJvbSBob2xkcyB3
aGVyZSB3ZSBoaXQgdGhlIGZpcnN0IE5PTiAweGZmIGJ5dGUgKi8KLQotCQkvKgotCQkgKiBub3cg
Y2FsY3VsYXRlIHRoZSBjZWlsaW5nIG9mIHRoZSBtb3ZlIHVzaW5nIG91ciBoaWdoZXN0Ci0JCSAq
IFRTTiB2YWx1ZQotCQkgKi8KLQkJU0NUUF9DQUxDX1RTTl9UT19HQVAobGdhcCwgaGlnaGVzdF90
c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCQlzbGlkZV9lbmQgPSAobGdhcCA+
PiAzKTsKLQkJaWYgKHNsaWRlX2VuZCA8IHNsaWRlX2Zyb20pIHsKLQkJCXNjdHBfcHJpbnRfbWFw
cGluZ19hcnJheShhc29jKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQlwYW5pYygiaW1wb3NzaWJs
ZSBzbGlkZSIpOwotI2Vsc2UKLQkJCVNDVFBfUFJJTlRGKCJpbXBvc3NpYmxlIHNsaWRlIGxnYXA6
ICV4IHNsaWRlX2VuZDogJXggc2xpZGVfZnJvbTogJXg/IGF0OiAlZFxuIiwKLQkJCSAgICAgICAg
ICAgIGxnYXAsIHNsaWRlX2VuZCwgc2xpZGVfZnJvbSwgYXQpOwotCQkJcmV0dXJuOwotI2VuZGlm
Ci0JCX0KLQkJaWYgKHNsaWRlX2VuZCA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSkgewotI2lm
ZGVmIElOVkFSSUFOVFMKLQkJCXBhbmljKCJ3b3VsZCBvdmVycnVuIGJ1ZmZlciIpOwotI2Vsc2UK
LQkJCVNDVFBfUFJJTlRGKCJHYWssIHdvdWxkIGhhdmUgb3ZlcnJ1biBtYXAgZW5kOiAlZCBzbGlk
ZV9lbmQ6ICVkXG4iLAotCQkJICAgICAgICAgICAgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLCBz
bGlkZV9lbmQpOwotCQkJc2xpZGVfZW5kID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOwotI2Vu
ZGlmCi0JCX0KLQkJZGlzdGFuY2UgPSAoc2xpZGVfZW5kIC0gc2xpZGVfZnJvbSkgKyAxOwotCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lO
R19FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX21hcChvbGRfYmFzZSwgb2xkX2N1bWFjaywgb2xkX2hp
Z2hlc3QsCi0JCQkJICAgICBTQ1RQX01BUF9QUkVQQVJFX1NMSURFKTsKLQkJCXNjdHBfbG9nX21h
cCgodWludDMyX3QpIHNsaWRlX2Zyb20sICh1aW50MzJfdCkgc2xpZGVfZW5kLAotCQkJCSAgICAg
KHVpbnQzMl90KSBsZ2FwLCBTQ1RQX01BUF9TTElERV9GUk9NKTsKLQkJfQotCQlpZiAoZGlzdGFu
Y2UgKyBzbGlkZV9mcm9tID4gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplIHx8Ci0JCSAgICBkaXN0
YW5jZSA8IDApIHsKLQkJCS8qCi0JCQkgKiBIZXJlIHdlIGRvIE5PVCBzbGlkZSBmb3J3YXJkIHRo
ZSBhcnJheSBzbyB0aGF0Ci0JCQkgKiBob3BlZnVsbHkgd2hlbiBtb3JlIGRhdGEgY29tZXMgaW4g
dG8gZmlsbCBpdCB1cAotCQkJICogd2Ugd2lsbCBiZSBhYmxlIHRvIHNsaWRlIGl0IGZvcndhcmQu
IFJlYWxseSBJCi0JCQkgKiBkb24ndCB0aGluayB0aGlzIHNob3VsZCBoYXBwZW4gOi0wCi0JCQkg
Ki8KLQotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TUFQX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWFwKCh1aW50MzJfdCkgZGlzdGFu
Y2UsICh1aW50MzJfdCkgc2xpZGVfZnJvbSwKLQkJCQkJICAgICAodWludDMyX3QpIGFzb2MtPm1h
cHBpbmdfYXJyYXlfc2l6ZSwKLQkJCQkJICAgICBTQ1RQX01BUF9TTElERV9OT05FKTsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCWludCBpaTsKLQotCQkJZm9yIChpaSA9IDA7IGlpIDwgZGlzdGFuY2U7
IGlpKyspIHsKLQkJCQlhc29jLT5tYXBwaW5nX2FycmF5W2lpXSA9IGFzb2MtPm1hcHBpbmdfYXJy
YXlbc2xpZGVfZnJvbSArIGlpXTsKLQkJCQlhc29jLT5ucl9tYXBwaW5nX2FycmF5W2lpXSA9IGFz
b2MtPm5yX21hcHBpbmdfYXJyYXlbc2xpZGVfZnJvbSArIGlpXTsKLQotCQkJfQotCQkJZm9yIChp
aSA9IGRpc3RhbmNlOyBpaSA8IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgaWkrKykgewotCQkJ
CWFzb2MtPm1hcHBpbmdfYXJyYXlbaWldID0gMDsKLQkJCQlhc29jLT5ucl9tYXBwaW5nX2FycmF5
W2lpXSA9IDA7Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCArIDEg
PT0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgewotCQkJCWFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXAgKz0gKHNsaWRlX2Zyb20gPDwgMyk7Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX25yX21hcCArIDEgPT0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rz
bikgewotCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgKz0gKHNsaWRlX2Zyb20g
PDwgMyk7Ci0JCQl9Ci0JCQlhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICs9IChzbGlkZV9m
cm9tIDw8IDMpOwotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWFwKGFzb2MtPm1hcHBp
bmdfYXJyYXlfYmFzZV90c24sCi0JCQkJCSAgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsCi0JCQkJCSAgICAgU0NUUF9NQVBfU0xJREVfUkVTVUxU
KTsKLQkJCX0KLQkJfQotCX0KLX0KLQotdm9pZAotc2N0cF9zYWNrX2NoZWNrKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgaW50IHdhc19hX2dhcCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsKLQl1aW50MzJfdCBoaWdoZXN0X3RzbjsKLQlpbnQgaXNfYV9nYXA7Ci0KLQlzY3RwX3Ns
aWRlX21hcHBpbmdfYXJyYXlzKHN0Y2IpOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoU0NU
UF9UU05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCkpIHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbnJfbWFwOwotCX0gZWxzZSB7Ci0JCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX21hcDsKLQl9Ci0JLyogSXMgdGhlcmUgYSBnYXAgbm93PyAqLwotCWlzX2FfZ2FwID0g
U0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c24pOwotCi0J
LyoKLQkgKiBOb3cgd2UgbmVlZCB0byBzZWUgaWYgd2UgbmVlZCB0byBxdWV1ZSBhIHNhY2sgb3Ig
anVzdCBzdGFydCB0aGUKLQkgKiB0aW1lciAoaWYgYWxsb3dlZCkuCi0JICovCi0JaWYgKFNDVFBf
R0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgewotCQkvKgotCQkg
KiBPayBzcGVjaWFsIGNhc2UsIGluIFNIVVRET1dOLVNFTlQgY2FzZS4gaGVyZSB3ZQotCQkgKiBt
YWtlciBzdXJlIFNBQ0sgdGltZXIgaXMgb2ZmIGFuZCBpbnN0ZWFkIHNlbmQgYQotCQkgKiBTSFVU
RE9XTiBhbmQgYSBTQUNLCi0JCSAqLwotCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZzdGNi
LT5hc29jLmRhY2tfdGltZXIudGltZXIpKSB7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1F
Ul9UWVBFX1JFQ1YsCi0JCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVM
TCwKLQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18x
Nyk7Ci0JCX0KLQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsCi0JCSAgICAgICAgICAgICAgICAg
ICAoKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSA/IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlIDogc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSk7Ci0JCWlmIChpc19hX2dhcCkgewotCQkJc2N0cF9z
ZW5kX3NhY2soc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8q
Ci0JCSAqIENNVCBEQUMgYWxnb3JpdGhtOiBpbmNyZWFzZSBudW1iZXIgb2YgcGFja2V0cwotCQkg
KiByZWNlaXZlZCBzaW5jZSBsYXN0IGFjawotCQkgKi8KLQkJc3RjYi0+YXNvYy5jbXRfZGFjX3Br
dHNfcmN2ZCsrOwotCi0JCWlmICgoc3RjYi0+YXNvYy5zZW5kX3NhY2sgPT0gMSkgfHwgICAgICAv
KiBXZSBuZWVkIHRvIHNlbmQgYSBTQUNLICovCi0JCSAgICAoKHdhc19hX2dhcCkgJiYgKGlzX2Ff
Z2FwID09IDApKSB8fAkvKiB3YXMgYSBnYXAsIGJ1dCBubwotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogbG9uZ2VyIGlzIG9uZSAqLwotCQkgICAgKHN0Y2ItPmFz
b2MubnVtZHVwdHNucykgfHwgICAgICAgICAgLyogd2UgaGF2ZSBkdXAncyAqLwotCQkgICAgKGlz
X2FfZ2FwKSB8fCAgICAgICAgICAgICAgICAgICAgICAgLyogaXMgc3RpbGwgYSBnYXAgKi8KLQkJ
ICAgIChzdGNiLT5hc29jLmRlbGF5ZWRfYWNrID09IDApIHx8ICAgIC8qIERlbGF5ZWQgc2FjayBk
aXNhYmxlZCAqLwotCQkgICAgKHN0Y2ItPmFzb2MuZGF0YV9wa3RzX3NlZW4gPj0gc3RjYi0+YXNv
Yy5zYWNrX2ZyZXEpCS8qIGhpdCBsaW1pdCBvZiBwa3RzICovCi0JCQkpIHsKLQotCQkJaWYgKChz
dGNiLT5hc29jLnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCQkgICAgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9jbXRfdXNlX2RhYykpICYmCi0JCQkgICAgKHN0Y2ItPmFzb2Muc2VuZF9zYWNrID09
IDApICYmCi0JCQkgICAgKHN0Y2ItPmFzb2MubnVtZHVwdHNucyA9PSAwKSAmJgotCQkJICAgIChz
dGNiLT5hc29jLmRlbGF5ZWRfYWNrKSAmJgotCQkJICAgICghU0NUUF9PU19USU1FUl9QRU5ESU5H
KCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpKSkgewotCi0JCQkJLyoKLQkJCQkgKiBDTVQg
REFDIGFsZ29yaXRobTogV2l0aCBDTVQsCi0JCQkJICogZGVsYXkgYWNrcyBldmVuIGluIHRoZSBm
YWNlIG9mCi0KLQkJCQkgKiByZW9yZGVyaW5nLiBUaGVyZWZvcmUsIGlmIGFja3MKLQkJCQkgKiB0
aGF0IGRvIG5vdCBoYXZlIHRvIGJlIHNlbnQKLQkJCQkgKiBiZWNhdXNlIG9mIHRoZSBhYm92ZSBy
ZWFzb25zLAotCQkJCSAqIHdpbGwgYmUgZGVsYXllZC4gVGhhdCBpcywgYWNrcwotCQkJCSAqIHRo
YXQgd291bGQgaGF2ZSBiZWVuIHNlbnQgZHVlIHRvCi0JCQkJICogZ2FwIHJlcG9ydHMgd2lsbCBi
ZSBkZWxheWVkIHdpdGgKLQkJCQkgKiBEQUMuIFN0YXJ0IHRoZSBkZWxheWVkIGFjayB0aW1lci4K
LQkJCQkgKi8KLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAotCQkJ
CSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7Ci0JCQl9IGVsc2Ug
ewotCQkJCS8qCi0JCQkJICogT2sgd2UgbXVzdCBidWlsZCBhIFNBQ0sgc2luY2UgdGhlCi0JCQkJ
ICogdGltZXIgaXMgcGVuZGluZywgd2UgZ290IG91cgotCQkJCSAqIGZpcnN0IHBhY2tldCBPUiB0
aGVyZSBhcmUgZ2FwcyBvcgotCQkJCSAqIGR1cGxpY2F0ZXMuCi0JCQkJICovCi0JCQkJKHZvaWQp
U0NUUF9PU19USU1FUl9TVE9QKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpOwotCQkJCXNj
dHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7
Ci0JCQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRp
bWVyKSkgewotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0JCQkJ
ICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKLQkJCX0KLQkJfQot
CX0KLX0KLQotaW50Ci1zY3RwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgbWJ1ZiAqKm1tLCBpbnQgaXBo
bGVuLCBpbnQgKm9mZnNldCwgaW50IGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDMyX3QgKmhpZ2hfdHNuKQotewotCXN0cnVjdCBz
Y3RwX2NodW5raGRyICpjaCwgY2h1bmtfYnVmOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOwotCWludCBudW1fY2h1bmtzID0gMDsJLyogbnVtYmVyIG9mIGNvbnRyb2wgY2h1bmtzIHBy
b2Nlc3NlZCAqLwotCWludCBzdG9wX3Byb2MgPSAwOwotCWludCBjaGtfbGVuZ3RoLCBicmVha19m
bGFnLCBsYXN0X2NodW5rOwotCWludCBhYm9ydF9mbGFnID0gMCwgd2FzX2FfZ2FwOwotCXN0cnVj
dCBtYnVmICptOwotCXVpbnQzMl90IGhpZ2hlc3RfdHNuOwotCi0JLyogc2V0IHRoZSByd25kICov
Ci0Jc2N0cF9zZXRfcnduZChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0KLQltID0gKm1tOwotCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoU0NUUF9U
U05fR1QoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX21hcCkpIHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bnJfbWFwOwotCX0gZWxzZSB7Ci0JCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX21hcDsKLQl9Ci0Jd2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2It
PmFzb2MuY3VtdWxhdGl2ZV90c24pOwotCS8qCi0JICogc2V0dXAgd2hlcmUgd2UgZ290IHRoZSBs
YXN0IERBVEEgcGFja2V0IGZyb20gZm9yIGFueSBTQUNLIHRoYXQKLQkgKiBtYXkgbmVlZCB0byBn
byBvdXQuIERvbid0IGJ1bXAgdGhlIG5ldC4gVGhpcyBpcyBkb25lIE9OTFkgd2hlbiBhCi0JICog
Y2h1bmsgaXMgYXNzaWduZWQuCi0JICovCi0JYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20gPSBu
ZXQ7Ci0KLSNpZm5kZWYgX19QYW5kYV9fCi0JLyotCi0JICogTm93IGJlZm9yZSB3ZSBwcm9jZWVk
IHdlIG11c3QgZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgd2FzdGVkCi0JICogY2x1c3Rlci4uLiBp
LmUuIGl0IGlzIGEgc21hbGwgcGFja2V0IHNlbnQgaW4gYW5kIHlldCB0aGUgZHJpdmVyCi0JICog
dW5kZXJuZWF0aCBhbGxvY2F0ZWQgYSBmdWxsIGNsdXN0ZXIgZm9yIGl0LiBJZiBzbyB3ZSBtdXN0
IGNvcHkgaXQKLQkgKiB0byBhIHNtYWxsZXIgbWJ1ZiBhbmQgZnJlZSB1cCB0aGUgY2x1c3RlciBt
YnVmLiBUaGlzIHdpbGwgaGVscAotCSAqIHdpdGggY2x1c3RlciBzdGFydmF0aW9uLiBOb3RlIGZv
ciBfX1BhbmRhX18gd2UgZG9uJ3QgZG8gdGhpcwotCSAqIHNpbmNlIGl0IGhhcyBjbHVzdGVycyBh
bGwgdGhlIHdheSBkb3duIHRvIDY0IGJ5dGVzLgotCSAqLwotCWlmIChTQ1RQX0JVRl9MRU4obSkg
PCAobG9uZylNTEVOICYmIFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgewotCQkvKiB3ZSBvbmx5
IGhhbmRsZSBtYnVmcyB0aGF0IGFyZSBzaW5nbGV0b25zLi4gbm90IGNoYWlucyAqLwotCQltID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKFNDVFBfQlVGX0xFTihtKSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOwotCQlpZiAobSkgewotCQkJLyogb2sgbGV0cyBzZWUgaWYgd2UgY2FuIGNvcHkgdGhl
IGRhdGEgdXAgKi8KLQkJCWNhZGRyX3QgKmZyb20sICp0bzsKLQkJCS8qIGdldCB0aGUgcG9pbnRl
cnMgYW5kIGNvcHkgKi8KLQkJCXRvID0gbXRvZChtLCBjYWRkcl90ICopOwotCQkJZnJvbSA9IG10
b2QoKCptbSksIGNhZGRyX3QgKik7Ci0JCQltZW1jcHkodG8sIGZyb20sIFNDVFBfQlVGX0xFTigo
Km1tKSkpOwotCQkJLyogY29weSB0aGUgbGVuZ3RoIGFuZCBmcmVlIHVwIHRoZSBvbGQgKi8KLQkJ
CVNDVFBfQlVGX0xFTihtKSA9IFNDVFBfQlVGX0xFTigoKm1tKSk7Ci0JCQlzY3RwX21fZnJlZW0o
Km1tKTsKLQkJCS8qIHN1Y2Nlc3MsIGJhY2sgY29weSAqLwotCQkJKm1tID0gbTsKLQkJfSBlbHNl
IHsKLQkJCS8qIFdlIGFyZSBpbiB0cm91YmxlIGluIHRoZSBtYnVmIHdvcmxkIC4uIHlpa2VzICov
Ci0JCQltID0gKm1tOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogZ2V0IHBvaW50ZXIgdG8gdGhlIGZp
cnN0IGNodW5rIGhlYWRlciAqLwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9t
X2dldHB0cihtLCAqb2Zmc2V0LAotCQkJCQkJICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmto
ZHIpLCAodWludDhfdCAqKSAmIGNodW5rX2J1Zik7Ci0JaWYgKGNoID09IE5VTEwpIHsKLQkJcmV0
dXJuICgxKTsKLQl9Ci0JLyoKLQkgKiBwcm9jZXNzIGFsbCBEQVRBIGNodW5rcy4uLgotCSAqLwot
CSpoaWdoX3RzbiA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuOwotCWJyZWFrX2ZsYWcgPSAwOwotCWFz
b2MtPmRhdGFfcGt0c19zZWVuKys7Ci0Jd2hpbGUgKHN0b3BfcHJvYyA9PSAwKSB7Ci0JCS8qIHZh
bGlkYXRlIGNodW5rIGxlbmd0aCAqLwotCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xl
bmd0aCk7Ci0JCWlmIChsZW5ndGggLSAqb2Zmc2V0IDwgY2hrX2xlbmd0aCkgewotCQkJLyogYWxs
IGRvbmUsIG11dHVsYXRlZCBjaHVuayAqLwotCQkJc3RvcF9wcm9jID0gMTsKLQkJCWNvbnRpbnVl
OwotCQl9Ci0JCWlmICgoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpICYmCi0JCSAgICAoY2gt
PmNodW5rX3R5cGUgPT0gU0NUUF9EQVRBKSkgewotCQkJc3RydWN0IG1idWYgKm9wX2VycjsKLQkJ
CWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJCXNucHJpbnRmKG1zZywgc2l6ZW9m
KG1zZyksICIlcyIsICJJLURBVEEgY2h1bmsgcmVjZWl2ZWQgd2hlbiBEQVRBIHdhcyBuZWdvdGlh
dGVkIik7Ci0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9D
T0xfVklPTEFUSU9OLCBtc2cpOwotCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0g
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTg7Ci0JCQlzY3RwX2Fib3J0X2FuX2Fz
c29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJcmV0
dXJuICgyKTsKLQkJfQotCQlpZiAoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJgotCQkg
ICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfSURBVEEpKSB7Ci0JCQlzdHJ1Y3QgbWJ1ZiAqb3Bf
ZXJyOwotCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIiVzIiwgIkRBVEEgY2h1bmsgcmVjZWl2ZWQgd2hlbiBJLURBVEEgd2Fz
IG5lZ290aWF0ZWQiKTsKLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0JCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0
X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xOTsKLQkJCXNjdHBfYWJv
cnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JCQlyZXR1cm4gKDIpOwotCQl9Ci0JCWlmICgoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9EQVRB
KSB8fAotCQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfSURBVEEpKSB7Ci0JCQlpbnQgY2xl
bjsKLQotCQkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkgewotCQkJCWNsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7Ci0JCQl9IGVsc2UgewotCQkJCWNsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspOwotCQkJfQotCQkJaWYgKGNoa19sZW5ndGgg
PCBjbGVuKSB7Ci0JCQkJLyoKLQkJCQkgKiBOZWVkIHRvIHNlbmQgYW4gYWJvcnQgc2luY2Ugd2Ug
aGFkIGEKLQkJCQkgKiBpbnZhbGlkIGRhdGEgY2h1bmsuCi0JCQkJICovCi0JCQkJc3RydWN0IG1i
dWYgKm9wX2VycjsKLQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQkJc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwgIkRBVEEgY2h1bmsgb2YgbGVuZ3RoICVkIiwKLQkJCQkg
ICAgICAgICBjaGtfbGVuZ3RoKTsKLQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFND
VFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOwotCQkJCXN0Y2ItPnNjdHBfZXAtPmxh
c3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzIwOwotCQkJ
CXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJcmV0dXJuICgyKTsKLQkJCX0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKLQkJCXNjdHBfYXVkaXRfbG9nKDB4QjEsIDApOwotI2VuZGlmCi0JCQlpZiAoU0NUUF9T
SVpFMzIoY2hrX2xlbmd0aCkgPT0gKGxlbmd0aCAtICpvZmZzZXQpKSB7Ci0JCQkJbGFzdF9jaHVu
ayA9IDE7Ci0JCQl9IGVsc2UgewotCQkJCWxhc3RfY2h1bmsgPSAwOwotCQkJfQotCQkJaWYgKHNj
dHBfcHJvY2Vzc19hX2RhdGFfY2h1bmsoc3RjYiwgYXNvYywgbW0sICpvZmZzZXQsIAotCQkJCQkJ
ICAgICAgY2hrX2xlbmd0aCwgbmV0LCBoaWdoX3RzbiwgJmFib3J0X2ZsYWcsICZicmVha19mbGFn
LAotCQkJCQkJICAgICAgbGFzdF9jaHVuaywgY2gtPmNodW5rX3R5cGUpKSB7Ci0JCQkJbnVtX2No
dW5rcysrOwotCQkJfQotCQkJaWYgKGFib3J0X2ZsYWcpCi0JCQkJcmV0dXJuICgyKTsKLQotCQkJ
aWYgKGJyZWFrX2ZsYWcpIHsKLQkJCQkvKgotCQkJCSAqIFNldCBiZWNhdXNlIG9mIG91dCBvZiBy
d25kIHNwYWNlIGFuZCBubwotCQkJCSAqIGRyb3AgcmVwIHNwYWNlIGxlZnQuCi0JCQkJICovCi0J
CQkJc3RvcF9wcm9jID0gMTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8q
IG5vdCBhIGRhdGEgY2h1bmsgaW4gdGhlIGRhdGEgcmVnaW9uICovCi0JCQlzd2l0Y2ggKGNoLT5j
aHVua190eXBlKSB7Ci0JCQljYXNlIFNDVFBfSU5JVElBVElPTjoKLQkJCWNhc2UgU0NUUF9JTklU
SUFUSU9OX0FDSzoKLQkJCWNhc2UgU0NUUF9TRUxFQ1RJVkVfQUNLOgotCQkJY2FzZSBTQ1RQX05S
X1NFTEVDVElWRV9BQ0s6Ci0JCQljYXNlIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q6Ci0JCQljYXNl
IFNDVFBfSEVBUlRCRUFUX0FDSzoKLQkJCWNhc2UgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjoKLQkJ
CWNhc2UgU0NUUF9TSFVURE9XTjoKLQkJCWNhc2UgU0NUUF9TSFVURE9XTl9BQ0s6Ci0JCQljYXNl
IFNDVFBfT1BFUkFUSU9OX0VSUk9SOgotCQkJY2FzZSBTQ1RQX0NPT0tJRV9FQ0hPOgotCQkJY2Fz
ZSBTQ1RQX0NPT0tJRV9BQ0s6Ci0JCQljYXNlIFNDVFBfRUNOX0VDSE86Ci0JCQljYXNlIFNDVFBf
RUNOX0NXUjoKLQkJCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QTEVURToKLQkJCWNhc2UgU0NUUF9B
VVRIRU5USUNBVElPTjoKLQkJCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkJY2FzZSBTQ1RQX1BB
Q0tFVF9EUk9QUEVEOgotCQkJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVDoKLQkJCWNhc2UgU0NUUF9G
T1JXQVJEX0NVTV9UU046Ci0JCQljYXNlIFNDVFBfQVNDT05GOgotCQkJewotCQkJCS8qCi0JCQkJ
ICogTm93LCB3aGF0IGRvIHdlIGRvIHdpdGggS05PV04gY2h1bmtzIHRoYXQKLQkJCQkgKiBhcmUg
Tk9UIGluIHRoZSByaWdodCBwbGFjZT8KLQkJCQkgKgotCQkJCSAqIEZvciBub3csIEkgZG8gbm90
aGluZyBidXQgaWdub3JlIHRoZW0uIFdlCi0JCQkJICogbWF5IGxhdGVyIHdhbnQgdG8gYWRkIHN5
c2N0bCBzdHVmZiB0bwotCQkJCSAqIHN3aXRjaCBvdXQgYW5kIGRvIGVpdGhlciBhbiBBQk9SVCgp
IG9yCi0JCQkJICogcG9zc2libHkgcHJvY2VzcyB0aGVtLgotCQkJCSAqLwotCQkJCXN0cnVjdCBt
YnVmICpvcF9lcnI7Ci0JCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQotCQkJCXNu
cHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJEQVRBIGNodW5rIGZvbGxvd2VkIGJ5IGNodW5rIG9m
IHR5cGUgJTIuMngiLAotCQkJCSAgICAgICAgIGNoLT5jaHVua190eXBlKTsKLQkJCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cp
OwotCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0JCQkJcmV0dXJuICgyKTsKLQkJCX0KLQkJCWRlZmF1bHQ6Ci0JCQkJ
LyogdW5rbm93biBjaHVuayB0eXBlLCB1c2UgYml0IHJ1bGVzICovCi0JCQkJaWYgKGNoLT5jaHVu
a190eXBlICYgMHg0MCkgewotCQkJCQkvKiBBZGQgYSBlcnJvciByZXBvcnQgdG8gdGhlIHF1ZXVl
ICovCi0JCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCQkJCXN0cnVjdCBzY3RwX2dlbl9lcnJv
cl9jYXVzZSAqY2F1c2U7Ci0KLQkJCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UpLAotCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQkJCQlpZiAob3BfZXJy
ICE9IE5VTEwpIHsKLQkJCQkJCWNhdXNlICA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9nZW5f
ZXJyb3JfY2F1c2UgKik7Ci0JCQkJCQljYXVzZS0+Y29kZSA9IGh0b25zKFNDVFBfQ0FVU0VfVU5S
RUNPR19DSFVOSyk7Ci0JCQkJCQljYXVzZS0+bGVuZ3RoID0gaHRvbnMoKHVpbnQxNl90KShjaGtf
bGVuZ3RoICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSkpKTsKLQkJCQkJCVND
VFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSk7
Ci0JCQkJCQlTQ1RQX0JVRl9ORVhUKG9wX2VycikgPSBTQ1RQX01fQ09QWU0obSwgKm9mZnNldCwg
Y2hrX2xlbmd0aCwgTV9OT1dBSVQpOwotCQkJCQkJaWYgKFNDVFBfQlVGX05FWFQob3BfZXJyKSAh
PSBOVUxMKSB7Ci0JCQkJCQkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKLQkJCQkJ
CX0gZWxzZSB7Ci0JCQkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7Ci0JCQkJCQl9Ci0JCQkJCX0K
LQkJCQl9Ci0JCQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAmIDB4ODApID09IDApIHsKLQkJCQkJLyog
ZGlzY2FyZCB0aGUgcmVzdCBvZiB0aGlzIHBhY2tldCAqLwotCQkJCQlzdG9wX3Byb2MgPSAxOwot
CQkJCX0JLyogZWxzZSBza2lwIHRoaXMgYmFkIGNodW5rIGFuZAotCQkJCQkgKiBjb250aW51ZS4u
LiAqLwotCQkJCWJyZWFrOwotCQkJfQkvKiBzd2l0Y2ggb2YgY2h1bmsgdHlwZSAqLwotCQl9Ci0J
CSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCk7Ci0JCWlmICgoKm9mZnNldCA+PSBs
ZW5ndGgpIHx8IHN0b3BfcHJvYykgewotCQkJLyogbm8gbW9yZSBkYXRhIGxlZnQgaW4gdGhlIG1i
dWYgY2hhaW4gKi8KLQkJCXN0b3BfcHJvYyA9IDE7Ci0JCQljb250aW51ZTsKLQkJfQotCQljaCA9
IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKLQkJCQkJ
CQkgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksICh1aW50OF90ICopICYgY2h1bmtf
YnVmKTsKLQkJaWYgKGNoID09IE5VTEwpIHsKLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlzdG9w
X3Byb2MgPSAxOwotCQkJY29udGludWU7Ci0JCX0KLQl9Ci0JaWYgKGJyZWFrX2ZsYWcpIHsKLQkJ
LyoKLQkJICogd2UgbmVlZCB0byByZXBvcnQgcnduZCBvdmVycnVuIGRyb3BzLgotCQkgKi8KLQkJ
c2N0cF9zZW5kX3BhY2tldF9kcm9wcGVkKHN0Y2IsIG5ldCwgKm1tLCBsZW5ndGgsIGlwaGxlbiwg
MCk7Ci0JfQotCWlmIChudW1fY2h1bmtzKSB7Ci0JCS8qCi0JCSAqIERpZCB3ZSBnZXQgZGF0YSwg
aWYgc28gdXBkYXRlIHRoZSB0aW1lIGZvciBhdXRvLWNsb3NlIGFuZAotCQkgKiBnaXZlIHBlZXIg
Y3JlZGl0IGZvciBiZWluZyBhbGl2ZS4KLQkJICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3Zwa3R3aXRoZGF0YSk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RI
UkVTSE9MRF9DTEVBUiwKLQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
LAotCQkJCSAgICAgICAwLAotCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEsCi0JCQkJ
ICAgICAgIF9fTElORV9fKTsKLQkJfQotCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQg
PSAwOwotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2xhc3Rf
cmN2ZCk7Ci0JfQotCS8qIG5vdyBzZXJ2aWNlIGFsbCBvZiB0aGUgcmVhc3NtIHF1ZXVlIGlmIG5l
ZWRlZCAqLwotCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dO
X1NFTlQpIHsKLQkJLyogQXNzdXJlIHRoYXQgd2UgYWNrIHJpZ2h0IGF3YXkgKi8KLQkJc3RjYi0+
YXNvYy5zZW5kX3NhY2sgPSAxOwotCX0KLQkvKiBTdGFydCBhIHNhY2sgdGltZXIgb3IgUVVFVUUg
YSBTQUNLIGZvciBzZW5kaW5nICovCi0Jc2N0cF9zYWNrX2NoZWNrKHN0Y2IsIHdhc19hX2dhcCk7
Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9wcm9jZXNzX3NlZ21lbnRfcmFu
Z2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqcF90cDEs
IHVpbnQzMl90IGxhc3RfdHNuLAotCQkJICAgdWludDE2X3QgZnJhZ19zdHJ0LCB1aW50MTZfdCBm
cmFnX2VuZCwgaW50IG5yX3NhY2tpbmcsCi0JCQkgICBpbnQgKm51bV9mcnMsCi0JCQkgICB1aW50
MzJfdCAqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24sCi0JCQkgICB1aW50MzJfdCAgKnRoaXNfc2Fj
a19sb3dlc3RfbmV3YWNrLAotCQkJICAgaW50ICpydG9fb2spCi17Ci0Jc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqdHAxOwotCXVuc2lnbmVkIGludCB0aGVUU047Ci0JaW50IGosIHdha2VfaGltID0g
MCwgY2lyY2xlZCA9IDA7Ci0KLQkvKiBSZWNvdmVyIHRoZSB0cDEgd2UgbGFzdCBzYXcgKi8KLQl0
cDEgPSAqcF90cDE7Ci0JaWYgKHRwMSA9PSBOVUxMKSB7Ci0JCXRwMSA9IFRBSUxRX0ZJUlNUKCZz
dGNiLT5hc29jLnNlbnRfcXVldWUpOwotCX0KLQlmb3IgKGogPSBmcmFnX3N0cnQ7IGogPD0gZnJh
Z19lbmQ7IGorKykgewotCQl0aGVUU04gPSBqICsgbGFzdF90c247Ci0JCXdoaWxlICh0cDEpIHsK
LQkJCWlmICh0cDEtPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCkKLQkJCQkoKm51bV9m
cnMpICs9IDE7Ci0KLQkJCS8qLQotCQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZvciBlYWNo
IFRTTiBiZWluZwotCQkJICogcHJvY2Vzc2VkIGZyb20gdGhlIHNlbnQgcXVldWUsIHRyYWNrIHRo
ZQotCQkJICogbmV4dCBleHBlY3RlZCBwc2V1ZG8tY3VtYWNrLCBvcgotCQkJICogcnR4X3BzZXVk
b19jdW1hY2ssIGlmIHJlcXVpcmVkLiBTZXBhcmF0ZQotCQkJICogY3VtYWNrIHRyYWNrZXJzIGZv
ciBmaXJzdCB0cmFuc21pc3Npb25zLAotCQkJICogYW5kIHJldHJhbnNtaXNzaW9ucy4KLQkJCSAq
LwotCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKLQkJCSAgICAo
dHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCi0JCQkgICAgKHRwMS0+c25k
X2NvdW50ID09IDEpKSB7Ci0JCQkJdHAxLT53aG9Uby0+cHNldWRvX2N1bWFjayA9IHRwMS0+cmVj
LmRhdGEudHNuOwotCQkJCXRwMS0+d2hvVG8tPmZpbmRfcHNldWRvX2N1bWFjayA9IDA7Ci0JCQl9
Ci0JCQlpZiAoKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSAmJgotCQkJICAgICh0
cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCi0JCQkgICAgKHRwMS0+
c25kX2NvdW50ID4gMSkpIHsKLQkJCQl0cDEtPndob1RvLT5ydHhfcHNldWRvX2N1bWFjayA9IHRw
MS0+cmVjLmRhdGEudHNuOwotCQkJCXRwMS0+d2hvVG8tPmZpbmRfcnR4X3BzZXVkb19jdW1hY2sg
PSAwOwotCQkJfQotCQkJaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRoZVRTTikgewotCQkJCWlm
ICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJCQkJLyotCi0JCQkJCSAq
IG11c3QgYmUgaGVsZCB1bnRpbAotCQkJCQkgKiBjdW0tYWNrIHBhc3NlcwotCQkJCQkgKi8KLQkJ
CQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCQkvKi0KLQkJ
CQkJCSAqIElmIGl0IGlzIGxlc3MgdGhhbiBSRVNFTkQsIGl0IGlzCi0JCQkJCQkgKiBub3cgbm8t
bG9uZ2VyIGluIGZsaWdodC4KLQkJCQkJCSAqIEhpZ2hlciB2YWx1ZXMgbWF5IGFscmVhZHkgYmUg
c2V0Ci0JCQkJCQkgKiB2aWEgcHJldmlvdXMgR2FwIEFjayBCbG9ja3MuLi4KLQkJCQkJCSAqIGku
ZS4gQUNLRUQgb3IgUkVTRU5ELgotCQkJCQkJICovCi0JCQkJCQlpZiAoU0NUUF9UU05fR1QodHAx
LT5yZWMuZGF0YS50c24sCi0JCQkJCQkgICAgICAgICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNr
ZWRfdHNuKSkgewotCQkJCQkJCSpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiA9IHRwMS0+cmVjLmRh
dGEudHNuOwotCQkJCQkJfQotCQkJCQkJLyotCi0JCQkJCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQg
SFROQSkgLSBzZXQKLQkJCQkJCSAqIHNhd19uZXdhY2sgdG8gMSBmb3IgZGVzdCBiZWluZwotCQkJ
CQkJICogbmV3bHkgYWNrZWQuIHVwZGF0ZQotCQkJCQkJICogdGhpc19zYWNrX2hpZ2hlc3RfbmV3
YWNrIGlmCi0JCQkJCQkgKiBhcHByb3ByaWF0ZS4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKHRwMS0+
cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPT0gMCkKLQkJCQkJCQl0cDEtPndob1RvLT5zYXdf
bmV3YWNrID0gMTsKLQotCQkJCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAot
CQkJCQkJICAgICAgICAgICAgICAgIHRwMS0+d2hvVG8tPnRoaXNfc2Fja19oaWdoZXN0X25ld2Fj
aykpIHsKLQkJCQkJCQl0cDEtPndob1RvLT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgPQotCQkJ
CQkJCQl0cDEtPnJlYy5kYXRhLnRzbjsKLQkJCQkJCX0KLQkJCQkJCS8qLQotCQkJCQkJICogQ01U
IERBQyBhbGdvOiBhbHNvIHVwZGF0ZQotCQkJCQkJICogdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sK
LQkJCQkJCSAqLwotCQkJCQkJaWYgKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9PSAwKSB7Ci0J
CQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FD
S19MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJCQlzY3RwX2xvZ19zYWNrKCp0aGlzX3NhY2tfbG93
ZXN0X25ld2FjaywKLQkJCQkJCQkJCSAgICAgIGxhc3RfdHNuLAotCQkJCQkJCQkJICAgICAgdHAx
LT5yZWMuZGF0YS50c24sCi0JCQkJCQkJCQkgICAgICAwLAotCQkJCQkJCQkJICAgICAgMCwKLQkJ
CQkJCQkJCSAgICAgIFNDVFBfTE9HX1RTTl9BQ0tFRCk7Ci0JCQkJCQkJfQotCQkJCQkJCSp0aGlz
X3NhY2tfbG93ZXN0X25ld2FjayA9IHRwMS0+cmVjLmRhdGEudHNuOwotCQkJCQkJfQotCQkJCQkJ
LyotCi0JCQkJCQkgKiBDTVQ6IENVQ3YyIGFsZ29yaXRobS4gSWYgKHJ0eC0pcHNldWRvLWN1bWFj
ayBmb3IgY29ycmVzcAotCQkJCQkJICogZGVzdCBpcyBiZWluZyBhY2tlZCwgdGhlbiB3ZSBoYXZl
IGEgbmV3IChydHgtKXBzZXVkby1jdW1hY2suIFNldAotCQkJCQkJICogbmV3XyhydHhfKXBzZXVk
b19jdW1hY2sgdG8gVFJVRSBzbyB0aGF0IHRoZSBjd25kIGZvciB0aGlzIGRlc3QgY2FuIGJlCi0J
CQkJCQkgKiB1cGRhdGVkLiBBbHNvIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dCBleHBlY3Rl
ZCAocnR4LSlwc2V1ZG8tY3VtYWNrLgotCQkJCQkJICogU2VwYXJhdGUgcHNldWRvX2N1bWFjayB0
cmFja2VycyBmb3IgZmlyc3QgdHJhbnNtaXNzaW9ucyBhbmQKLQkJCQkJCSAqIHJldHJhbnNtaXNz
aW9ucy4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRwMS0+d2hv
VG8tPnBzZXVkb19jdW1hY2spIHsKLQkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNf
cmV2b2tlZCA9PSAwKSB7Ci0JCQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0g
MTsKLQkJCQkJCQl9Ci0JCQkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsK
LQkJCQkJCX0KLQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IHRwMS0+d2hvVG8sIHRwMS0+cmVjLmRhdGEudHNuLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7
Ci0JCQkJCQl9Ci0JCQkJCQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHAxLT53aG9Uby0+cnR4
X3BzZXVkb19jdW1hY2spIHsKLQkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2
b2tlZCA9PSAwKSB7Ci0JCQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsK
LQkJCQkJCQl9Ci0JCQkJCQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7
Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9sb2dfc2FjaygqYmln
Z2VzdF9uZXdseV9hY2tlZF90c24sCi0JCQkJCQkJCSAgICAgIGxhc3RfdHNuLAotCQkJCQkJCQkg
ICAgICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkJICAgICAgZnJhZ19zdHJ0LAotCQkJCQkJ
CQkgICAgICBmcmFnX2VuZCwKLQkJCQkJCQkJICAgICAgU0NUUF9MT0dfVFNOX0FDS0VEKTsKLQkJ
CQkJCX0KLQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBf
RkxJR0hUX0xPR19ET1dOX0dBUCwKLQkJCQkJCQkJICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9z
aXplLAotCQkJCQkJCQkgICAgICAgdHAxLT5ib29rX3NpemUsCi0JCQkJCQkJCSAgICAgICAodWlu
dDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAotCQkJCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0
YS50c24pOwotCQkJCQkJfQotCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwot
CQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fj
a25vd2xlZGdlZCkgewotCQkJCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25k
X3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEtPndob1RvLAotCQkJCQkJCQkJCQkJCQkgICAg
IHRwMSk7Ci0JCQkJCQl9Ci0JCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0
cDEpOwotCi0JCQkJCQl0cDEtPndob1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOwotCQkJ
CQkJaWYgKHRwMS0+c25kX2NvdW50IDwgMikgewotCQkJCQkJCS8qLQotCQkJCQkJCSAqIFRydWUg
bm9uLXJldHJhbnNtaXRlZCBjaHVuawotCQkJCQkJCSAqLwotCQkJCQkJCXRwMS0+d2hvVG8tPm5l
dF9hY2syICs9IHRwMS0+c2VuZF9zaXplOwotCi0JCQkJCQkJLyotCi0JCQkJCQkJICogdXBkYXRl
IFJUTyB0b28gPwotCQkJCQkJCSAqLwotCQkJCQkJCWlmICh0cDEtPmRvX3J0dCkgewotCQkJCQkJ
CQlpZiAoKnJ0b19vaykgewotCQkJCQkJCQkJdHAxLT53aG9Uby0+UlRPID0KLQkJCQkJCQkJCQlz
Y3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwKLQkJCQkJCQkJCQkJCSAgICZzdGNiLT5hc29jLAotCQkJ
CQkJCQkJCQkJICAgdHAxLT53aG9UbywKLQkJCQkJCQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3Rp
bWUsCi0JCQkJCQkJCQkJCQkgICBzY3RwX2FsaWduX3NhZmVfbm9jb3B5LAotCQkJCQkJCQkJCQkJ
ICAgU0NUUF9SVFRfRlJPTV9EQVRBKTsKLQkJCQkJCQkJCSpydG9fb2sgPSAwOwotCQkJCQkJCQl9
Ci0JCQkJCQkJCWlmICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKLQkJCQkJCQkJCXRw
MS0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOwotCQkJCQkJCQl9Ci0JCQkJCQkJCXRwMS0+ZG9fcnR0
ID0gMDsKLQkJCQkJCQl9Ci0JCQkJCQl9Ci0KLQkJCQkJfQotCQkJCQlpZiAodHAxLT5zZW50IDw9
IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMu
ZGF0YS50c24sCi0JCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50aGlzX3NhY2tfaGln
aGVzdF9nYXApKSB7Ci0JCQkJCQkJc3RjYi0+YXNvYy50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPQot
CQkJCQkJCQl0cDEtPnJlYy5kYXRhLnRzbjsKLQkJCQkJCX0KLQkJCQkJCWlmICh0cDEtPnNlbnQg
PT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQkJCQlzY3RwX3Vjb3VudF9kZWNyKHN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJM
RUQKLQkJCQkJCQlzY3RwX2F1ZGl0X2xvZygweEIyLAotCQkJCQkJCQkgICAgICAgKHN0Y2ItPmFz
b2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ICYgMHgwMDAwMDBmZikpOwotI2VuZGlmCi0JCQkJCQl9
Ci0JCQkJCX0KLQkJCQkJLyotCi0JCQkJCSAqIEFsbCBjaHVua3MgTk9UIFVOU0VOVCBmYWxsIHRo
cm91Z2ggaGVyZSBhbmQgYXJlIG1hcmtlZAotCQkJCQkgKiAobGVhdmUgUFItU0NUUCBvbmVzIHRo
YXQgYXJlIHRvIHNraXAgYWxvbmUgdGhvdWdoKQotCQkJCQkgKi8KLQkJCQkJaWYgKCh0cDEtPnNl
bnQgIT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSAmJgotCQkJCQkgICAgKHRwMS0+c2VudCAhPSBT
Q1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgewotCQkJCQkJdHAxLT5zZW50ID0gU0NUUF9EQVRBR1JB
TV9NQVJLRUQ7Ci0JCQkJCX0KLQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9r
ZWQpIHsKLQkJCQkJCS8qIGRlZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJCXRwMS0+d2hvVG8tPmN3
bmQgLT0gdHAxLT5ib29rX3NpemU7Ci0JCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZv
a2VkID0gMDsKLQkJCQkJfQotCQkJCQkvKiBOUiBTYWNrIGNvZGUgaGVyZSAqLwotCQkJCQlpZiAo
bnJfc2Fja2luZyAmJgotCQkJCQkgICAgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FD
S0VEKSkgewotCQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0u
Y2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKLQkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5y
ZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMtLTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJ
CQl9IGVsc2UgewotCQkJCQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lk
ICV1LiIsIHRwMS0+cmVjLmRhdGEuc2lkKTsKLSNlbmRpZgotCQkJCQkJfQotCQkJCQkJaWYgKChz
dGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPT0g
MCkgJiYKLQkJCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5z
dGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJCQkJICAgIFRBSUxRX0VN
UFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgewot
CQkJCQkJCXN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCA9IDE7Ci0JCQkJCQl9Ci0JCQkJCQl0cDEt
PnNlbnQgPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEOwotCQkJCQkJaWYgKHRwMS0+ZGF0YSkgewot
CQkJCQkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLwotCQkJCQkJCXNjdHBfZnJlZV9idWZz
cGFjZShzdGNiLCAmc3RjYi0+YXNvYywgdHAxLCAxKTsKLQkJCQkJCQlzY3RwX21fZnJlZW0odHAx
LT5kYXRhKTsKLQkJCQkJCQl0cDEtPmRhdGEgPSBOVUxMOwotCQkJCQkJfQotCQkJCQkJd2FrZV9o
aW0rKzsKLQkJCQkJfQotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0JLyogaWYgKHRwMS0+dHNuID09
IHRoZVRTTikgKi8KLQkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgdGhlVFNO
KSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJdHAxID0gVEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4
dCk7Ci0JCQlpZiAoKHRwMSA9PSBOVUxMKSAmJiAoY2lyY2xlZCA9PSAwKSkgewotCQkJCWNpcmNs
ZWQrKzsKLQkJCQl0cDEgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKTsKLQkJ
CX0KLQkJfQkvKiBlbmQgd2hpbGUgKHRwMSkgKi8KLQkJaWYgKHRwMSA9PSBOVUxMKSB7Ci0JCQlj
aXJjbGVkID0gMDsKLQkJCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUp
OwotCQl9Ci0JCS8qIEluIGNhc2UgdGhlIGZyYWdtZW50cyB3ZXJlIG5vdCBpbiBvcmRlciB3ZSBt
dXN0IHJlc2V0ICovCi0JfSAvKiBlbmQgZm9yIChqID0gZnJhZ1N0YXJ0ICovCi0JKnBfdHAxID0g
dHAxOwotCXJldHVybiAod2FrZV9oaW0pOwkvKiBSZXR1cm4gdmFsdWUgb25seSB1c2VkIGZvciBu
ci1zYWNrICovCi19Ci0KLQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfc2VnbWVudHMoc3RydWN0
IG1idWYgKm0sIGludCAqb2Zmc2V0LCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAotCQl1aW50MzJfdCBsYXN0X3RzbiwgdWludDMyX3QgKmJpZ2dl
c3RfdHNuX2Fja2VkLAotCQl1aW50MzJfdCAqYmlnZ2VzdF9uZXdseV9hY2tlZF90c24sIHVpbnQz
Ml90ICp0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKLQkJaW50IG51bV9zZWcsIGludCBudW1fbnJf
c2VnLCBpbnQgKnJ0b19vaykKLXsKLQlzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrICpmcmFnLCBi
bG9jazsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDE7Ci0JaW50IGk7Ci0JaW50IG51bV9m
cnMgPSAwOwotCWludCBjaHVua19mcmVlZDsKLQlpbnQgbm9uX3Jldm9jYWJsZTsKLQl1aW50MTZf
dCBmcmFnX3N0cnQsIGZyYWdfZW5kLCBwcmV2X2ZyYWdfZW5kOwotCi0JdHAxID0gVEFJTFFfRklS
U1QoJmFzb2MtPnNlbnRfcXVldWUpOwotCXByZXZfZnJhZ19lbmQgPSAwOwotCWNodW5rX2ZyZWVk
ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCAobnVtX3NlZyArIG51bV9ucl9zZWcpOyBpKyspIHsK
LQkJaWYgKGkgPT0gbnVtX3NlZykgewotCQkJcHJldl9mcmFnX2VuZCA9IDA7Ci0JCQl0cDEgPSBU
QUlMUV9GSVJTVCgmYXNvYy0+c2VudF9xdWV1ZSk7Ci0JCX0KLQkJZnJhZyA9IChzdHJ1Y3Qgc2N0
cF9nYXBfYWNrX2Jsb2NrICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0
cF9nYXBfYWNrX2Jsb2NrKSwgKHVpbnQ4X3QgKikgJmJsb2NrKTsKLQkJKm9mZnNldCArPSBzaXpl
b2YoYmxvY2spOwotCQlpZiAoZnJhZyA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gKGNodW5rX2ZyZWVk
KTsKLQkJfQotCQlmcmFnX3N0cnQgPSBudG9ocyhmcmFnLT5zdGFydCk7Ci0JCWZyYWdfZW5kID0g
bnRvaHMoZnJhZy0+ZW5kKTsKLQotCQlpZiAoZnJhZ19zdHJ0ID4gZnJhZ19lbmQpIHsKLQkJCS8q
IFRoaXMgZ2FwIHJlcG9ydCBpcyBtYWxmb3JtZWQsIHNraXAgaXQuICovCi0JCQljb250aW51ZTsK
LQkJfQotCQlpZiAoZnJhZ19zdHJ0IDw9IHByZXZfZnJhZ19lbmQpIHsKLQkJCS8qIFRoaXMgZ2Fw
IHJlcG9ydCBpcyBub3QgaW4gb3JkZXIsIHNvIHJlc3RhcnQuICovCi0JCQkgdHAxID0gVEFJTFFf
RklSU1QoJmFzb2MtPnNlbnRfcXVldWUpOwotCQl9Ci0JCWlmIChTQ1RQX1RTTl9HVCgobGFzdF90
c24gKyBmcmFnX2VuZCksICpiaWdnZXN0X3Rzbl9hY2tlZCkpIHsKLQkJCSpiaWdnZXN0X3Rzbl9h
Y2tlZCA9IGxhc3RfdHNuICsgZnJhZ19lbmQ7Ci0JCX0KLQkJaWYgKGkgPCBudW1fc2VnKSB7Ci0J
CQlub25fcmV2b2NhYmxlID0gMDsKLQkJfSBlbHNlIHsKLQkJCW5vbl9yZXZvY2FibGUgPSAxOwot
CQl9Ci0JCWlmIChzY3RwX3Byb2Nlc3Nfc2VnbWVudF9yYW5nZShzdGNiLCAmdHAxLCBsYXN0X3Rz
biwgZnJhZ19zdHJ0LCBmcmFnX2VuZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG5vbl9yZXZvY2FibGUsICZudW1fZnJzLCBiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLCBydG9f
b2spKSB7Ci0JCQljaHVua19mcmVlZCA9IDE7Ci0JCX0KLQkJcHJldl9mcmFnX2VuZCA9IGZyYWdf
ZW5kOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQlpZiAobnVtX2ZycykKLQkJCXNjdHBfbG9nX2ZyKCpi
aWdnZXN0X3Rzbl9hY2tlZCwKLQkJCSAgICAgICAgICAgICpiaWdnZXN0X25ld2x5X2Fja2VkX3Rz
biwKLQkJCSAgICAgICAgICAgIGxhc3RfdHNuLCBTQ1RQX0ZSX0xPR19CSUdHRVNUX1RTTlMpOwot
CX0KLQlyZXR1cm4gKGNodW5rX2ZyZWVkKTsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfY2hlY2tf
Zm9yX3Jldm9rZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkgICAgICAgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsIHVpbnQzMl90IGN1bWFjaywKLQkJICAgICAgIHVpbnQzMl90IGJp
Z2dlc3RfdHNuX2Fja2VkKQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKLQotCVRB
SUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChT
Q1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgY3VtYWNrKSkgewotCQkJLyoKLQkJCSAqIG9r
IHRoaXMgZ3V5IGlzIGVpdGhlciBBQ0sgb3IgTUFSS0VELiBJZiBpdCBpcwotCQkJICogQUNLRUQg
aXQgaGFzIGJlZW4gcHJldmlvdXNseSBhY2tlZCBidXQgbm90IHRoaXMKLQkJCSAqIHRpbWUgaS5l
LiByZXZva2VkLiAgSWYgaXQgaXMgTUFSS0VEIGl0IHdhcyBBQ0snZWQKLQkJCSAqIGFnYWluLgot
CQkJICovCi0JCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGJpZ2dlc3RfdHNu
X2Fja2VkKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RB
VEFHUkFNX0FDS0VEKSB7Ci0JCQkJLyogaXQgaGFzIGJlZW4gcmV2b2tlZCAqLwotCQkJCXRwMS0+
c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKLQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19y
ZXZva2VkID0gMTsKLQkJCQkvKiBXZSBtdXN0IGFkZCB0aGlzIHN0dWZmIGJhY2sgaW4gdG8KLQkJ
CQkgKiBhc3N1cmUgdGltZXJzIGFuZCBzdWNoIGdldCBzdGFydGVkLgotCQkJCSAqLwotCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVBfUkVW
T0tFLAotCQkJCQkJICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkJICAgICAg
IHRwMS0+Ym9va19zaXplLAotCQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+
d2hvVG8sCi0JCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCX0KLQkJCQlzY3Rw
X2ZsaWdodF9zaXplX2luY3JlYXNlKHRwMSk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVh
c2Uoc3RjYiwgdHAxKTsKLQkJCQkvKiBXZSBpbmZsYXRlIHRoZSBjd25kIHRvIGNvbXBlbnNhdGUg
Zm9yIG91cgotCQkJCSAqIGFydGlmaWNpYWwgaW5mbGF0aW9uIG9mIHRoZSBmbGlnaHRfc2l6ZS4K
LQkJCQkgKi8KLQkJCQl0cDEtPndob1RvLT5jd25kICs9IHRwMS0+Ym9va19zaXplOwotCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lO
R19FTkFCTEUpIHsKLQkJCQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2VkX3NlcSwKLQkJ
CQkJCSAgICAgIGN1bWFjaywKLQkJCQkJCSAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkJ
ICAgICAgMCwKLQkJCQkJCSAgICAgIDAsCi0JCQkJCQkgICAgICBTQ1RQX0xPR19UU05fUkVWT0tF
RCk7Ci0JCQkJfQotCQkJfSBlbHNlIGlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9NQVJL
RUQpIHsKLQkJCQkvKiBpdCBoYXMgYmVlbiByZS1hY2tlZCBpbiB0aGlzIFNBQ0sgKi8KLQkJCQl0
cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX0FDS0VEOwotCQkJfQotCQl9Ci0JCWlmICh0cDEtPnNl
bnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpCi0JCQlicmVhazsKLQl9Ci19Ci0KLQotc3RhdGlj
IHZvaWQKLXNjdHBfc3RyaWtlX2dhcF9hY2tfY2h1bmtzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICB1aW50MzJfdCBiaWdnZXN0X3Rz
bl9hY2tlZCwgdWludDMyX3QgYmlnZ2VzdF90c25fbmV3bHlfYWNrZWQsIHVpbnQzMl90IHRoaXNf
c2Fja19sb3dlc3RfbmV3YWNrLCBpbnQgYWNjdW1fbW92ZWQpCi17Ci0Jc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqdHAxOwotCWludCBzdHJpa2VfZmxhZyA9IDA7Ci0Jc3RydWN0IHRpbWV2YWwgbm93
OwotCWludCB0b3RfcmV0cmFucyA9IDA7Ci0JdWludDMyX3Qgc2VuZGluZ19zZXE7Ci0Jc3RydWN0
IHNjdHBfbmV0cyAqbmV0OwotCWludCBudW1fZGVzdHNfc2Fja2VkID0gMDsKLQotCS8qCi0JICog
c2VsZWN0IHRoZSBzZW5kaW5nX3NlcSwgdGhpcyBpcyBlaXRoZXIgdGhlIG5leHQgdGhpbmcgcmVh
ZHkgdG8gYmUKLQkgKiBzZW50IGJ1dCBub3QgdHJhbnNtaXR0ZWQsIE9SLCB0aGUgbmV4dCBzZXEg
d2UgYXNzaWduLgotCSAqLwotCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbmRfcXVl
dWUpOwotCWlmICh0cDEgPT0gTlVMTCkgewotCQlzZW5kaW5nX3NlcSA9IGFzb2MtPnNlbmRpbmdf
c2VxOwotCX0gZWxzZSB7Ci0JCXNlbmRpbmdfc2VxID0gdHAxLT5yZWMuZGF0YS50c247Ci0JfQot
Ci0JLyogQ01UIERBQyBhbGdvOiBmaW5kaW5nIG91dCBpZiBTQUNLIGlzIGEgbWl4ZWQgU0FDSyAq
LwotCWlmICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgICAgU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5l
dHMsIHNjdHBfbmV4dCkgewotCQkJaWYgKG5ldC0+c2F3X25ld2FjaykKLQkJCQludW1fZGVzdHNf
c2Fja2VkKys7Ci0JCX0KLQl9Ci0JaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCkgewot
CQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQl9Ci0JVEFJTFFfRk9SRUFDSCh0
cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJc3RyaWtlX2ZsYWcgPSAwOwot
CQlpZiAodHAxLT5ub19mcl9hbGxvd2VkKSB7Ci0JCQkvKiB0aGlzIG9uZSBoYWQgYSB0aW1lb3V0
IG9yIHNvbWV0aGluZyAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKLQkJCWlm
ICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQlzY3RwX2xvZ19mcihiaWdn
ZXN0X3Rzbl9uZXdseV9hY2tlZCwKLQkJCQkJICAgIHRwMS0+cmVjLmRhdGEudHNuLAotCQkJCQkg
ICAgdHAxLT5zZW50LAotCQkJCQkgICAgU0NUUF9GUl9MT0dfQ0hFQ0tfU1RSSUtFKTsKLQkJfQot
CQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGJpZ2dlc3RfdHNuX2Fja2VkKSB8
fAotCQkgICAgdHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7Ci0JCQkvKiBkb25l
ICovCi0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSB7
Ci0JCQlpZiAoKFBSX1NDVFBfVFRMX0VOQUJMRUQodHAxLT5mbGFncykpICYmIHRwMS0+c2VudCA8
IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCQkvKiBJcyBpdCBleHBpcmVkPyAqLwotI2lmbmRl
ZiBfX0ZyZWVCU0RfXwotCQkJCWlmICh0aW1lcmNtcCgmbm93LCAmdHAxLT5yZWMuZGF0YS50aW1l
dG9kcm9wLCA+KSkgewotI2Vsc2UKLQkJCQlpZiAodGltZXZhbGNtcCgmbm93LCAmdHAxLT5yZWMu
ZGF0YS50aW1ldG9kcm9wLCA+KSkgewotI2VuZGlmCi0JCQkJCS8qIFllcyBzbyBkcm9wIGl0ICov
Ci0JCQkJCWlmICh0cDEtPmRhdGEgIT0gTlVMTCkgewotCQkJCQkJKHZvaWQpc2N0cF9yZWxlYXNl
X3ByX3NjdHBfY2h1bmsoc3RjYiwgdHAxLCAxLAotCQkJCQkJCQkJCSBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQotCQl9Ci0JCWlmIChT
Q1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYXNvYy0+dGhpc19zYWNrX2hpZ2hlc3RfZ2Fw
KSkgewotCQkJLyogd2UgYXJlIGJleW9uZCB0aGUgdHNuIGluIHRoZSBzYWNrICAqLwotCQkJYnJl
YWs7Ci0JCX0KLQkJaWYgKHRwMS0+c2VudCA+PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJ
LyogZWl0aGVyIGEgUkVTRU5ELCBBQ0tFRCwgb3IgTUFSS0VEICovCi0JCQkvKiBza2lwICovCi0J
CQlpZiAodHAxLT5zZW50ID09IFNDVFBfRk9SV0FSRF9UU05fU0tJUCkgewotCQkJCS8qIENvbnRp
bnVlIHN0cmlraW4gRldELVRTTiBjaHVua3MgKi8KLQkJCQl0cDEtPnJlYy5kYXRhLmZ3ZF90c25f
Y250Kys7Ci0JCQl9Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKgotCQkgKiBDTVQgOiBTRlIgYWxn
byAoY292ZXJzIHBhcnQgb2YgREFDIGFuZCBIVE5BIGFzIHdlbGwpCi0JCSAqLwotCQlpZiAodHAx
LT53aG9UbyAmJiB0cDEtPndob1RvLT5zYXdfbmV3YWNrID09IDApIHsKLQkJCS8qCi0JCQkgKiBO
byBuZXcgYWNrcyB3ZXJlIHJlY2VpZXZlZCBmb3IgZGF0YSBzZW50IHRvIHRoaXMKLQkJCSAqIGRl
c3QuIFRoZXJlZm9yZSwgYWNjb3JkaW5nIHRvIHRoZSBTRlIgYWxnbyBmb3IKLQkJCSAqIENNVCwg
bm8gZGF0YSBzZW50IHRvIHRoaXMgZGVzdCBjYW4gYmUgbWFya2VkIGZvcgotCQkJICogRlIgdXNp
bmcgdGhpcyBTQUNLLgotCQkJICovCi0JCQljb250aW51ZTsKLQkJfSBlbHNlIGlmICh0cDEtPndo
b1RvICYmIFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdHAxLT53aG9Uby0+dGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNr
KSkgewotCQkJLyoKLQkJCSAqIENNVDogTmV3IGFja3Mgd2VyZSByZWNlaWV2ZWQgZm9yIGRhdGEg
c2VudCB0bwotCQkJICogdGhpcyBkZXN0LiBCdXQgbm8gbmV3IGFja3Mgd2VyZSBzZWVuIGZvciBk
YXRhCi0JCQkgKiBzZW50IGFmdGVyIHRwMS4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNG
UgotCQkJICogYWxnbyBmb3IgQ01ULCB0cDEgY2Fubm90IGJlIG1hcmtlZCBmb3IgRlIgdXNpbmcK
LQkJCSAqIHRoaXMgU0FDSy4gVGhpcyBzdGVwIGNvdmVycyBwYXJ0IG9mIHRoZSBEQUMgYWxnbwot
CQkJICogYW5kIHRoZSBIVE5BIGFsZ28gYXMgd2VsbC4KLQkJCSAqLwotCQkJY29udGludWU7Ci0J
CX0KLQkJLyoKLQkJICogSGVyZSB3ZSBjaGVjayB0byBzZWUgaWYgd2Ugd2VyZSBoYXZlIGFscmVh
ZHkgZG9uZSBhIEZSCi0JCSAqIGFuZCBpZiBzbyB3ZSBzZWUgaWYgdGhlIGJpZ2dlc3QgVFNOIHdl
IHNhdyBpbiB0aGUgc2FjayBpcwotCQkgKiBzbWFsbGVyIHRoYW4gdGhlIHJlY292ZXJ5IHBvaW50
LiBJZiBzbyB3ZSBkb24ndCBzdHJpa2UKLQkJICogdGhlIHRzbi4uLiBvdGhlcndpc2Ugd2UgQ0FO
IHN0cmlrZSB0aGUgVFNOLgotCQkgKi8KLQkJLyoKLQkJICogQEBAIEpSSTogQ2hlY2sgZm9yIENN
VAotCQkgKiBpZiAoYWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVy
eSAmJiAoc2N0cF9jbXRfb25fb2ZmID09IDApKSB7Ci0JCSAqLwotCQlpZiAoYWNjdW1fbW92ZWQg
JiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSkgewotCQkJLyoKLQkJCSAqIFN0cmlr
ZSB0aGUgVFNOIGlmIGluIGZhc3QtcmVjb3ZlcnkgYW5kIGN1bS1hY2sKLQkJCSAqIG1vdmVkLgot
CQkJICovCi0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5
X2Fja2VkLAotCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCi0JCQkJCSAgICB0cDEtPnNlbnQs
Ci0JCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJfQotCQkJaWYgKHRwMS0+
c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJdHAxLT5zZW50Kys7Ci0JCQl9Ci0J
CQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCQkgICAgU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewotCQkJCS8qCi0JCQkJICogQ01UIERBQyBhbGdvcml0
aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8KLQkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sg
dGVzdCB3aWxsIG5vdCBwYXNzCi0JCQkJICogYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0
IHRvIHRoZQotCQkJCSAqIGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQotCQkJ
CSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEgaXMKLQkJCQkgKiBub3Qg
YmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRoZW4gbWFyayBieQotCQkJCSAqIG9uZSBtb3JlLgot
CQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNp
bmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0Ci0JCQkJICogdHdvIHBhY2tldHMg
aGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCi0JCQkJICovCi0JCQkJ
aWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNr
ZWQgPT0gMSkgJiYKLQkJCQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ss
IHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2df
ZnIoMTYgKyBudW1fZGVzdHNfc2Fja2VkLAotCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwK
LQkJCQkJCQkgICAgdHAxLT5zZW50LAotCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hV
TkspOwotCQkJCQl9Ci0JCQkJCXRwMS0+c2VudCsrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIGlm
ICgodHAxLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQpICYmCi0JCSAgICAgICAgICAg
KGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgewotCQkJLyoKLQkJCSAqIEZvciB0aG9zZSB0
aGF0IGhhdmUgZG9uZSBhIEZSIHdlIG11c3QgdGFrZQotCQkJICogc3BlY2lhbCBjb25zaWRlcmF0
aW9uIGlmIHdlIHN0cmlrZS4gSS5lIHRoZQotCQkJICogYmlnZ2VzdF9uZXdseV9hY2tlZCBtdXN0
IGJlIGhpZ2hlciB0aGFuIHRoZQotCQkJICogc2VuZGluZ19zZXEgYXQgdGhlIHRpbWUgd2UgZGlk
IHRoZSBGUi4KLQkJCSAqLwotCQkJaWYgKAotI2lmZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCi0J
CQkJLyoKLQkJCQkgKiBJZiBGUidzIGdvIHRvIG5ldyBuZXR3b3JrcywgdGhlbiB3ZSBtdXN0IG9u
bHkgZG8KLQkJCQkgKiB0aGlzIGZvciBzaW5nbHkgaG9tZWQgYXNvYydzLiBIb3dldmVyIGlmIHRo
ZSBGUidzCi0JCQkJICogZ28gdG8gdGhlIHNhbWUgbmV0d29yayAoQXJtYW5kbydzIHdvcmspIHRo
ZW4gaXRzCi0JCQkJICogb2sgdG8gRlIgbXVsdGlwbGUgdGltZXMuCi0JCQkJICovCi0JCQkJKGFz
b2MtPm51bW5ldHMgPCAyKQotI2Vsc2UKLQkJCQkoMSkKLSNlbmRpZgotCQkJCSkgewotCi0JCQkJ
aWYgKFNDVFBfVFNOX0dFKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCSAgICAgICAgICAg
ICAgICB0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbikpIHsKLQkJCQkJLyoKLQkJCQkJICog
U3RyaWtlIHRoZSBUU04sIHNpbmNlIHRoaXMgYWNrIGlzCi0JCQkJCSAqIGJleW9uZCB3aGVyZSB0
aGluZ3Mgd2VyZSB3aGVuIHdlCi0JCQkJCSAqIGRpZCBhIEZSLgotCQkJCQkgKi8KLQkJCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJ
CQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkgICAgdHAxLT5zZW50LAotCQkJCQkJ
CSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJCQl9Ci0JCQkJCWlmICh0cDEtPnNl
bnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCQkJdHAxLT5zZW50Kys7Ci0JCQkJCX0K
LQkJCQkJc3RyaWtlX2ZsYWcgPSAxOwotCQkJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+
IDApICYmCi0JCQkJCSAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSB7Ci0J
CQkJCQkvKgotCQkJCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmCi0JCQkJCQkgKiBTQUNLIGZs
YWcgaXMgc2V0IHRvIDAsCi0JCQkJCQkgKiB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdAotCQkJCQkJ
ICogd2lsbCBub3QgcGFzcyBiZWNhdXNlIGl0Ci0JCQkJCQkgKiB3b3VsZCBoYXZlIGJlZW4gc2V0
IHRvCi0JCQkJCQkgKiB0aGUgY3VtYWNrIGVhcmxpZXIuIElmCi0JCQkJCQkgKiBub3QgYWxyZWFk
eSB0byBiZSBydHgnZCwKLQkJCQkJCSAqIElmIG5vdCBhIG1peGVkIHNhY2sgYW5kCi0JCQkJCQkg
KiBpZiB0cDEgaXMgbm90IGJldHdlZW4gdHdvCi0JCQkJCQkgKiBzYWNrZWQgVFNOcywgdGhlbiBt
YXJrIGJ5Ci0JCQkJCQkgKiBvbmUgbW9yZS4KLQkJCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFy
a2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGlj
YXRlcyB0aGF0Ci0JCQkJCQkgKiB0d28gcGFja2V0cyBoYXZlIGJlZW4gcmVjZWl2ZWQgYWZ0ZXIg
dGhpcyBtaXNzaW5nIFRTTi4KLQkJCQkJCSAqLwotCQkJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQ
X0RBVEFHUkFNX1JFU0VORCkgJiYKLQkJCQkJCSAgICAobnVtX2Rlc3RzX3NhY2tlZCA9PSAxKSAm
JgotCQkJCQkJICAgIFNDVFBfVFNOX0dUKHRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLAotCQkJCQkJ
ICAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJCQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7
Ci0JCQkJCQkJCXNjdHBfbG9nX2ZyKDMyICsgbnVtX2Rlc3RzX3NhY2tlZCwKLQkJCQkJCQkJCSAg
ICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkJCSAgICB0cDEtPnNlbnQsCi0JCQkJCQkJCQkg
ICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5LKTsKLQkJCQkJCQl9Ci0JCQkJCQkJaWYgKHRwMS0+
c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCQkJCXRwMS0+c2VudCsrOwotCQkJ
CQkJCX0KLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBKUkk6IFRP
RE86IHJlbW92ZSBjb2RlIGZvciBIVE5BIGFsZ28uIENNVCdzCi0JCQkgKiBTRlIgYWxnbyBjb3Zl
cnMgSFROQS4KLQkJCSAqLwotCQl9IGVsc2UgaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEu
dHNuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkKSkg
ewotCQkJLyoKLQkJCSAqIFdlIGRvbid0IHN0cmlrZSB0aGVzZTogVGhpcyBpcyB0aGUgIEhUTkEK
LQkJCSAqIGFsZ29yaXRobSBpLmUuIHdlIGRvbid0IHN0cmlrZSBJZiBvdXIgVFNOIGlzCi0JCQkg
KiBsYXJnZXIgdGhhbiB0aGUgSGlnaGVzdCBUU04gTmV3bHkgQWNrZWQuCi0JCQkgKi8KLQkJCTsK
LQkJfSBlbHNlIHsKLQkJCS8qIFN0cmlrZSB0aGUgVFNOICovCi0JCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJ
CXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAotCQkJCQkgICAgdHAxLT5yZWMu
ZGF0YS50c24sCi0JCQkJCSAgICB0cDEtPnNlbnQsCi0JCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJ
S0VfQ0hVTkspOwotCQkJfQotCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5E
KSB7Ci0JCQkJdHAxLT5zZW50Kys7Ci0JCQl9Ci0JCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29m
ZiA+IDApICYmCi0JCQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewot
CQkJCS8qCi0JCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8K
LQkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBwYXNzCi0JCQkJICog
YmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQotCQkJCSAqIGN1bWFjayBlYXJs
aWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQotCQkJCSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBz
YWNrIGFuZCBpZiB0cDEgaXMKLQkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRo
ZW4gbWFyayBieQotCQkJCSAqIG9uZSBtb3JlLgotCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFy
a2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGlj
YXRlcyB0aGF0Ci0JCQkJICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRo
aXMgbWlzc2luZyBUU04uCi0JCQkJICovCi0JCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKLQkJCQkgICAgU0NUUF9U
U05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCQkJc2N0cF9sb2dfZnIoNDggKyBudW1fZGVzdHNfc2Fja2VkLAot
CQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKLQkJCQkJCQkgICAgdHAxLT5zZW50LAotCQkJ
CQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOwotCQkJCQl9Ci0JCQkJCXRwMS0+c2Vu
dCsrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7Ci0KLQkJCS8qIGZpeCBjb3VudHMg
YW5kIHRoaW5ncyAqLwotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9taXNjX2ludHMoU0NU
UF9GTElHSFRfTE9HX0RPV05fUlNORCwKLQkJCQkJICAgICAgICh0cDEtPndob1RvID8gKHRwMS0+
d2hvVG8tPmZsaWdodF9zaXplKSA6IDApLAotCQkJCQkgICAgICAgdHAxLT5ib29rX3NpemUsCi0J
CQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAotCQkJCQkgICAgICAg
dHAxLT5yZWMuZGF0YS50c24pOwotCQkJfQotCQkJaWYgKHRwMS0+d2hvVG8pIHsKLQkJCQl0cDEt
Pndob1RvLT5uZXRfYWNrKys7Ci0JCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwot
CQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tu
b3dsZWRnZWQpIHsKLQkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBk
YXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkJCQkgICAgIHRwMSk7
Ci0JCQkJfQotCQkJfQotCi0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19yd25kKFNDVFBfSU5D
UkVBU0VfUEVFUl9SV05ELAotCQkJCQkgICAgICBhc29jLT5wZWVyc19yd25kLCB0cDEtPnNlbmRf
c2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKTsKLQkJCX0KLQkJCS8q
IGFkZCBiYWNrIHRvIHRoZSByd25kICovCi0JCQlhc29jLT5wZWVyc19yd25kICs9ICh0cDEtPnNl
bmRfc2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSk7Ci0KLQkJCS8q
IHJlbW92ZSBmcm9tIHRoZSB0b3RhbCBmbGlnaHQgKi8KLQkJCXNjdHBfdG90YWxfZmxpZ2h0X2Rl
Y3JlYXNlKHN0Y2IsIHRwMSk7Ci0KLQkJCWlmICgoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVk
KSAmJgotCQkJICAgIChQUl9TQ1RQX1JUWF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSkgewotCQkJCS8q
IEhhcyBpdCBiZWVuIHJldHJhbnNtaXR0ZWQgdHZfc2VjIHRpbWVzPyAtIHdlIHN0b3JlIHRoZSBy
ZXRyYW4gY291bnQgdGhlcmUuICovCi0JCQkJaWYgKHRwMS0+c25kX2NvdW50ID4gdHAxLT5yZWMu
ZGF0YS50aW1ldG9kcm9wLnR2X3NlYykgewotCQkJCQkvKiBZZXMsIHNvIGRyb3AgaXQgKi8KLQkJ
CQkJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7Ci0JCQkJCQkodm9pZClzY3RwX3JlbGVhc2VfcHJf
c2N0cF9jaHVuayhzdGNiLCB0cDEsIDEsCi0JCQkJCQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JCQkJCX0KLQkJCQkJLyogTWFrZSBzdXJlIHRvIGZsYWcgd2UgaGFkIGEgRlIgKi8KLQkJCQkJ
dHAxLT53aG9Uby0+bmV0X2FjaysrOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQkv
KiBTQ1RQX1BSSU5URigiT0ssIHdlIGFyZSBub3cgcmVhZHkgdG8gRlIgdGhpcyBndXlcbiIpOyAq
LwotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJf
TE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19mcih0cDEtPnJlYy5kYXRhLnRzbiwgdHAx
LT5zbmRfY291bnQsCi0JCQkJCSAgICAwLCBTQ1RQX0ZSX01BUktFRCk7Ci0JCQl9Ci0JCQlpZiAo
c3RyaWtlX2ZsYWcpIHsKLQkJCQkvKiBUaGlzIGlzIGEgc3Vic2VxdWVudCBGUiAqLwotCQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnMpOwotCQkJfQotCQkJc2N0cF91
Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQlpZiAoYXNv
Yy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgewotCQkJCS8qCi0JCQkJICogQ01UOiBVc2luZyBSVFhf
U1NUSFJFU0ggcG9saWN5IGZvciBDTVQuCi0JCQkJICogSWYgQ01UIGlzIGJlaW5nIHVzZWQsIHRo
ZW4gcGljayBkZXN0IHdpdGgKLQkJCQkgKiBsYXJnZXN0IHNzdGhyZXNoIGZvciBhbnkgcmV0cmFu
c21pc3Npb24uCi0JCQkJICovCi0JCQkJdHAxLT5ub19mcl9hbGxvd2VkID0gMTsKLQkJCQlhbHQg
PSB0cDEtPndob1RvOwotCQkJCS8qc2FfaWdub3JlIE5PX05VTExfQ0hLKi8KLQkJCQlpZiAoYXNv
Yy0+c2N0cF9jbXRfcGYgPiAwKSB7Ci0JCQkJCS8qIEpSUyA1LzE4LzA3IC0gSWYgQ01UIFBGIGlz
IG9uLCB1c2UgdGhlIFBGIHZlcnNpb24gb2YgZmluZF9hbHRfbmV0KCkgKi8KLQkJCQkJYWx0ID0g
c2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgYWx0LCAyKTsKLQkJCQl9IGVsc2UgewotCQkJ
CQkvKiBKUlMgNS8xOC8wNyAtIElmIG9ubHkgQ01UIGlzIG9uLCB1c2UgdGhlIENNVCB2ZXJzaW9u
IG9mIGZpbmRfYWx0X25ldCgpICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLwotCQkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0
ZXJuYXRlX25ldChzdGNiLCBhbHQsIDEpOwotCQkJCX0KLQkJCQlpZiAoYWx0ID09IE5VTEwpIHsK
LQkJCQkJYWx0ID0gdHAxLT53aG9UbzsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBDVUN2MjogSWYg
YSBkaWZmZXJlbnQgZGVzdCBpcyBwaWNrZWQgZm9yCi0JCQkJICogdGhlIHJldHJhbnNtaXNzaW9u
LCB0aGVuIG5ldwotCQkJCSAqIChydHgtKXBzZXVkb19jdW1hY2sgbmVlZHMgdG8gYmUgdHJhY2tl
ZAotCQkJCSAqIGZvciBvcmlnIGRlc3QuIExldCBDVUN2MiB0cmFjayBuZXcgKHJ0eC0pCi0JCQkJ
ICogcHNldWRvLWN1bWFjayBhbHdheXMuCi0JCQkJICovCi0JCQkJaWYgKHRwMS0+d2hvVG8pIHsK
LQkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKLQkJCQkJdHAxLT53aG9U
by0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7Ci0JCQkJfQotCi0JCQl9IGVsc2Ugey8qIENN
VCBpcyBPRkYgKi8KLQotI2lmZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCi0JCQkJLyogQ2FuIHdl
IGZpbmQgYW4gYWx0ZXJuYXRlPyAqLwotCQkJCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0
KHN0Y2IsIHRwMS0+d2hvVG8sIDApOwotI2Vsc2UKLQkJCQkvKgotCQkJCSAqIGRlZmF1bHQgYmVo
YXZpb3IgaXMgdG8gTk9UIHJldHJhbnNtaXQKLQkJCQkgKiBGUidzIHRvIGFuIGFsdGVybmF0ZS4g
QXJtYW5kbyBDYXJvJ3MKLQkJCQkgKiBwYXBlciBkZXRhaWxzIHdoeS4KLQkJCQkgKi8KLQkJCQlh
bHQgPSB0cDEtPndob1RvOwotI2VuZGlmCi0JCQl9Ci0KLQkJCXRwMS0+cmVjLmRhdGEuZG9pbmdf
ZmFzdF9yZXRyYW5zbWl0ID0gMTsKLQkJCXRvdF9yZXRyYW5zKys7Ci0JCQkvKiBtYXJrIHRoZSBz
ZW5kaW5nIHNlcSBmb3IgcG9zc2libGUgc3Vic2VxdWVudCBGUidzICovCi0JCQkvKgotCQkJICog
U0NUUF9QUklOVEYoIk1hcmtpbmcgVFNOIGZvciBGUiBuZXcgdmFsdWUgJXhcbiIsCi0JCQkgKiAo
dWludDMyX3QpdHBpLT5yZWMuZGF0YS50c24pOwotCQkJICovCi0JCQlpZiAoVEFJTFFfRU1QVFko
JmFzb2MtPnNlbmRfcXVldWUpKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgcXVldWUgb2Ygc2Vu
ZCBpcyBlbXB0eSB0aGVuIGl0cwotCQkJCSAqIHRoZSBuZXh0IHNlcXVlbmNlIG51bWJlciB0aGF0
IHdpbGwgYmUKLQkJCQkgKiBhc3NpZ25lZCBzbyB3ZSBzdWJ0cmFjdCBvbmUgZnJvbSB0aGlzIHRv
Ci0JCQkJICogZ2V0IHRoZSBvbmUgd2UgbGFzdCBzZW50LgotCQkJCSAqLwotCQkJCXRwMS0+cmVj
LmRhdGEuZmFzdF9yZXRyYW5fdHNuID0gc2VuZGluZ19zZXE7Ci0JCQl9IGVsc2UgewotCQkJCS8q
Ci0JCQkJICogSWYgdGhlcmUgYXJlIGNodW5rcyBvbiB0aGUgc2VuZCBxdWV1ZQotCQkJCSAqICh1
bnNlbnQgZGF0YSB0aGF0IGhhcyBtYWRlIGl0IGZyb20gdGhlCi0JCQkJICogc3RyZWFtIHF1ZXVl
cyBidXQgbm90IG91dCB0aGUgZG9vciwgd2UKLQkJCQkgKiB0YWtlIHRoZSBmaXJzdCBvbmUgKHdo
aWNoIHdpbGwgaGF2ZSB0aGUKLQkJCQkgKiBsb3dlc3QgVFNOKSBhbmQgc3VidHJhY3Qgb25lIHRv
IGdldCB0aGUKLQkJCQkgKiBvbmUgd2UgbGFzdCBzZW50LgotCQkJCSAqLwotCQkJCXN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKnR0dDsKLQotCQkJCXR0dCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5k
X3F1ZXVlKTsKLQkJCQl0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9Ci0JCQkJCXR0dC0+
cmVjLmRhdGEudHNuOwotCQkJfQotCi0JCQlpZiAodHAxLT5kb19ydHQpIHsKLQkJCQkvKgotCQkJ
CSAqIHRoaXMgZ3V5IGhhZCBhIFJUTyBjYWxjdWxhdGlvbiBwZW5kaW5nIG9uCi0JCQkJICogaXQs
IGNhbmNlbCBpdAotCQkJCSAqLwotCQkJCWlmICgodHAxLT53aG9UbyAhPSBOVUxMKSAmJgotCQkJ
CSAgICAodHAxLT53aG9Uby0+cnRvX25lZWRlZCA9PSAwKSkgewotCQkJCQl0cDEtPndob1RvLT5y
dG9fbmVlZGVkID0gMTsKLQkJCQl9Ci0JCQkJdHAxLT5kb19ydHQgPSAwOwotCQkJfQotCQkJaWYg
KGFsdCAhPSB0cDEtPndob1RvKSB7Ci0JCQkJLyogeWVzLCB0aGVyZSBpcyBhbiBhbHRlcm5hdGUu
ICovCi0JCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHRwMS0+d2hvVG8pOwotCQkJCS8qc2FfaWdu
b3JlIEZSRUVEX01FTU9SWSovCi0JCQkJdHAxLT53aG9UbyA9IGFsdDsKLQkJCQlhdG9taWNfYWRk
X2ludCgmYWx0LT5yZWZfY291bnQsIDEpOwotCQkJfQotCQl9Ci0JfQotfQotCi1zdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICoKLXNjdHBfdHJ5X2FkdmFuY2VfcGVlcl9hY2tfcG9pbnQoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSwgKnRwMiwgKmFfYWR2ID0gTlVMTDsKLQlzdHJ1Y3Qg
dGltZXZhbCBub3c7Ci0JaW50IG5vd19maWxsZWQgPSAwOwotCi0JaWYgKGFzb2MtPnByc2N0cF9z
dXBwb3J0ZWQgPT0gMCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlUQUlMUV9GT1JFQUNIX1NB
RkUodHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0LCB0cDIpIHsKLQkJaWYgKHRwMS0+
c2VudCAhPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVAgJiYKLQkJICAgIHRwMS0+c2VudCAhPSBTQ1RQ
X0RBVEFHUkFNX1JFU0VORCAmJgotCQkgICAgdHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJf
QUNLRUQpIHsKLQkJCS8qIG5vIGNoYW5jZSB0byBhZHZhbmNlLCBvdXQgb2YgaGVyZSAqLwotCQkJ
YnJlYWs7Ci0JCX0KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTE9HX1RSWV9BRFZBTkNFKSB7Ci0JCQlpZiAoKHRwMS0+c2VudCA9PSBTQ1RQX0ZPUldB
UkRfVFNOX1NLSVApIHx8Ci0JCQkgICAgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX05SX0FD
S0VEKSkgewotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKLQkJCQkJICAg
ICAgIGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LAotCQkJCQkgICAgICAgdHAxLT5yZWMu
ZGF0YS50c24sIDAsIDApOwotCQkJfQotCQl9Ci0JCWlmICghUFJfU0NUUF9FTkFCTEVEKHRwMS0+
ZmxhZ3MpKSB7Ci0JCQkvKgotCQkJICogV2UgY2FuJ3QgZndkLXRzbiBwYXN0IGFueSB0aGF0IGFy
ZSByZWxpYWJsZSBha2EKLQkJCSAqIHJldHJhbnNtaXR0ZWQgdW50aWwgdGhlIGFzb2MgZmFpbHMu
Ci0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghbm93X2ZpbGxlZCkgewotCQkJKHZvaWQp
U0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7Ci0JCQlub3dfZmlsbGVkID0gMTsKLQkJfQotCQkv
KgotCQkgKiBub3cgd2UgZ290IGEgY2h1bmsgd2hpY2ggaXMgbWFya2VkIGZvciBhbm90aGVyCi0J
CSAqIHJldHJhbnNtaXNzaW9uIHRvIGEgUFItc3RyZWFtIGJ1dCBoYXMgcnVuIG91dCBpdHMgY2hh
bmNlcwotCQkgKiBhbHJlYWR5IG1heWJlIE9SIGhhcyBiZWVuIG1hcmtlZCB0byBza2lwIG5vdy4g
Q2FuIHdlIHNraXAKLQkJICogaXQgaWYgaXRzIGEgcmVzZW5kPwotCQkgKi8KLQkJaWYgKHRwMS0+
c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCAmJgotCQkgICAgKFBSX1NDVFBfVFRMX0VOQUJM
RUQodHAxLT5mbGFncykpKSB7Ci0JCQkvKgotCQkJICogTm93IGlzIHRoaXMgb25lIG1hcmtlZCBm
b3IgcmVzZW5kIGFuZCBpdHMgdGltZSBpcwotCQkJICogbm93IHVwPwotCQkJICovCi0jaWZuZGVm
IF9fRnJlZUJTRF9fCi0JCQlpZiAodGltZXJjbXAoJm5vdywgJnRwMS0+cmVjLmRhdGEudGltZXRv
ZHJvcCwgPikpIHsKLSNlbHNlCi0JCQlpZiAodGltZXZhbGNtcCgmbm93LCAmdHAxLT5yZWMuZGF0
YS50aW1ldG9kcm9wLCA+KSkgewotI2VuZGlmCi0JCQkJLyogWWVzIHNvIGRyb3AgaXQgKi8KLQkJ
CQlpZiAodHAxLT5kYXRhKSB7Ci0JCQkJCSh2b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5r
KHN0Y2IsIHRwMSwKLQkJCQkJICAgIDEsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJfQotCQkJ
fSBlbHNlIHsKLQkJCQkvKgotCQkJCSAqIE5vLCB3ZSBhcmUgZG9uZSB3aGVuIGhpdCBvbmUgZm9y
IHJlc2VuZAotCQkJCSAqIHdob3MgdGltZSBhcyBub3QgZXhwaXJlZC4KLQkJCQkgKi8KLQkJCQli
cmVhazsKLQkJCX0KLQkJfQotCQkvKgotCQkgKiBPayBub3cgaWYgdGhpcyBjaHVuayBpcyBtYXJr
ZWQgdG8gZHJvcCBpdCB3ZSBjYW4gY2xlYW4gdXAKLQkJICogdGhlIGNodW5rLCBhZHZhbmNlIG91
ciBwZWVyIGFjayBwb2ludCBhbmQgd2UgY2FuIGNoZWNrCi0JCSAqIHRoZSBuZXh0IGNodW5rLgot
CQkgKi8KLQkJaWYgKCh0cDEtPnNlbnQgPT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSB8fAotCQkg
ICAgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSkgewotCQkJLyogYWR2YW5j
ZSBQZWVyQWNrUG9pbnQgZ29lcyBmb3J3YXJkICovCi0JCQlpZiAoU0NUUF9UU05fR1QodHAxLT5y
ZWMuZGF0YS50c24sIGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50KSkgewotCQkJCWFzb2Mt
PmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gdHAxLT5yZWMuZGF0YS50c247Ci0JCQkJYV9hZHYg
PSB0cDE7Ci0JCQl9IGVsc2UgaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IGFzb2MtPmFkdmFuY2Vk
X3BlZXJfYWNrX3BvaW50KSB7Ci0JCQkJLyogTm8gdXBkYXRlIGJ1dCB3ZSBkbyBzYXZlIHRoZSBj
aGsgKi8KLQkJCQlhX2FkdiA9IHRwMTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBJ
ZiBpdCBpcyBzdGlsbCBpbiBSRVNFTkQgd2UgY2FuIGFkdmFuY2Ugbm8KLQkJCSAqIGZ1cnRoZXIK
LQkJCSAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuIChhX2Fkdik7Ci19Ci0KLXN0YXRp
YyBpbnQKLXNjdHBfZnNfYXVkaXQoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0J
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCWludCBpbmZsaWdodCA9IDAsIHJlc2VuZCA9
IDAsIGluYmV0d2VlbiA9IDAsIGFja2VkID0gMCwgYWJvdmUgPSAwOwotCWludCByZXQ7Ci0jaWZu
ZGVmIElOVkFSSUFOVFMKLQlpbnQgZW50cnlfZmxpZ2h0LCBlbnRyeV9jbnQ7Ci0jZW5kaWYKLQot
CXJldCA9IDA7Ci0jaWZuZGVmIElOVkFSSUFOVFMKLQllbnRyeV9mbGlnaHQgPSBhc29jLT50b3Rh
bF9mbGlnaHQ7Ci0JZW50cnlfY250ID0gYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50OwotI2VuZGlm
Ci0JaWYgKGFzb2MtPnByX3NjdHBfY250ID49IGFzb2MtPnNlbnRfcXVldWVfY250KQotCQlyZXR1
cm4gKDApOwotCi0JVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25l
eHQpIHsKLQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQlTQ1RQ
X1BSSU5URigiQ2hrIFRTTjogJXUgc2l6ZTogJWQgaW5mbGlnaHQgY250OiAlZFxuIiwKLQkJCSAg
ICAgICAgICAgIGNoay0+cmVjLmRhdGEudHNuLAotCQkJICAgICAgICAgICAgY2hrLT5zZW5kX3Np
emUsCi0JCQkgICAgICAgICAgICBjaGstPnNuZF9jb3VudCk7Ci0JCQlpbmZsaWdodCsrOwotCQl9
IGVsc2UgaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJcmVzZW5k
Kys7Ci0JCX0gZWxzZSBpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkgewotCQkJ
aW5iZXR3ZWVuKys7Ci0JCX0gZWxzZSBpZiAoY2hrLT5zZW50ID4gU0NUUF9EQVRBR1JBTV9BQ0tF
RCkgewotCQkJYWJvdmUrKzsKLQkJfSBlbHNlIHsKLQkJCWFja2VkKys7Ci0JCX0KLQl9Ci0KLQlp
ZiAoKGluZmxpZ2h0ID4gMCkgfHwgKGluYmV0d2VlbiA+IDApKSB7Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCQlwYW5pYygiRmxpZ2h0IHNpemUtZXhwcmVzcyBpbmNvcnJlY3Q/IFxuIik7Ci0jZWxzZQot
CQlTQ1RQX1BSSU5URigiYXNvYy0+dG90YWxfZmxpZ2h0OiAlZCBjbnQ6ICVkXG4iLAotCQkgICAg
ICAgICAgICBlbnRyeV9mbGlnaHQsIGVudHJ5X2NudCk7Ci0KLQkJU0NUUF9QUklOVEYoIkZsaWdo
dCBzaXplLWV4cHJlc3MgaW5jb3JyZWN0IEY6ICVkIEk6ICVkIFI6ICVkIEFiOiAlZCBBQ0s6ICVk
XG4iLAotCQkJICAgIGluZmxpZ2h0LCBpbmJldHdlZW4sIHJlc2VuZCwgYWJvdmUsIGFja2VkKTsK
LQkJcmV0ID0gMTsKLSNlbmRpZgotCX0KLQlyZXR1cm4gKHJldCk7Ci19Ci0KLQotc3RhdGljIHZv
aWQKLXNjdHBfd2luZG93X3Byb2JlX3JlY292ZXJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCQkgICBz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEpCi17Ci0JdHAxLT53aW5kb3dfcHJvYmUgPSAwOwot
CWlmICgodHAxLT5zZW50ID49IFNDVFBfREFUQUdSQU1fQUNLRUQpIHx8ICh0cDEtPmRhdGEgPT0g
TlVMTCkpIHsKLQkJLyogVFNOJ3Mgc2tpcHBlZCB3ZSBkbyBOT1QgbW92ZSBiYWNrLiAqLwotCQlz
Y3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRFdOX1dQX0ZXRCwKLQkJCSAgICAgICB0cDEt
Pndob1RvID8gdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgOiAwLAotCQkJICAgICAgIHRwMS0+Ym9v
a19zaXplLAotCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+d2hvVG8sCi0JCQkg
ICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQlyZXR1cm47Ci0JfQotCS8qIEZpcnN0IHNldHVw
IHRoaXMgYnkgc2hyaW5raW5nIGZsaWdodCAqLwotCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJKCpzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hvVG8s
Ci0JCQkJCQkJCQkgICAgIHRwMSk7Ci0JfQotCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAx
KTsKLQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCS8qIE5vdyBtYXJr
IGZvciByZXNlbmQgKi8KLQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQlzY3Rw
X3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0KLQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFC
TEUpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fV1AsCi0JCQkgICAg
ICAgdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUsCi0JCQkgICAgICAgdHAxLT5ib29rX3NpemUsCi0J
CQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKLQkJCSAgICAgICB0cDEt
PnJlYy5kYXRhLnRzbik7Ci0JfQotfQotCi12b2lkCi1zY3RwX2V4cHJlc3NfaGFuZGxlX3NhY2so
c3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBjdW1hY2ssCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QgcnduZCwgaW50ICphYm9ydF9ub3csIGludCBlY25lX3NlZW4pCi17
Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
OwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSwgKnRwMjsKLQl1aW50MzJfdCBvbGRfcndu
ZDsKLQlpbnQgd2luX3Byb2JlX3JlY292ZXJ5ID0gMDsKLQlpbnQgd2luX3Byb2JlX3JlY292ZXJl
ZCA9IDA7Ci0JaW50IGosIGRvbmVfb25jZSA9IDA7Ci0JaW50IHJ0b19vayA9IDE7Ci0JdWludDMy
X3Qgc2VuZF9zOwotCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTE9HX1NBQ0tfQVJSSVZBTFNfRU5BQkxFKSB7Ci0JCXNjdHBfbWlzY19pbnRzKFNDVFBf
U0FDS19MT0dfRVhQUkVTUywgY3VtYWNrLAotCQkgICAgICAgICAgICAgICByd25kLCBzdGNiLT5h
c29jLmxhc3RfYWNrZWRfc2VxLCBzdGNiLT5hc29jLnBlZXJzX3J3bmQpOwotCX0KLQlTQ1RQX1RD
Ql9MT0NLX0FTU0VSVChzdGNiKTsKLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCXN0Y2It
PmFzb2MuY3VtYWNrX2xvZ1tzdGNiLT5hc29jLmN1bWFja19sb2dfYXRdID0gY3VtYWNrOwotCXN0
Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdCsrOwotCWlmIChzdGNiLT5hc29jLmN1bWFja19sb2dfYXQg
PiBTQ1RQX1RTTl9MT0dfU0laRSkgewotCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPSAwOwot
CX0KLSNlbmRpZgotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlvbGRfcnduZCA9IGFzb2MtPnBlZXJz
X3J3bmQ7Ci0JaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBjdW1hY2spKSB7
Ci0JCS8qIG9sZCBhY2sgKi8KLQkJcmV0dXJuOwotCX0gZWxzZSBpZiAoYXNvYy0+bGFzdF9hY2tl
ZF9zZXEgPT0gY3VtYWNrKSB7Ci0JCS8qIFdpbmRvdyB1cGRhdGUgc2FjayAqLwotCQlhc29jLT5w
ZWVyc19yd25kID0gc2N0cF9zYnNwYWNlX3N1Yihyd25kLAotCQkJCQkJICAgICh1aW50MzJfdCkg
KGFzb2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7Ci0JCWlmIChhc29jLT5wZWVyc19yd25k
IDwgc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zY3RwX3N3c19zZW5kZXIpIHsKLQkJCS8qIFNXUyBz
ZW5kZXIgc2lkZSBlbmdhZ2VzICovCi0JCQlhc29jLT5wZWVyc19yd25kID0gMDsKLQkJfQotCQlp
ZiAoYXNvYy0+cGVlcnNfcnduZCA+IG9sZF9yd25kKSB7Ci0JCQlnb3RvIGFnYWluOwotCQl9Ci0J
CXJldHVybjsKLQl9Ci0KLQkvKiBGaXJzdCBzZXR1cCBmb3IgQ0Mgc3R1ZmYgKi8KLQlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoU0NUUF9UU05fR1Qo
Y3VtYWNrLCBuZXQtPmN3cl93aW5kb3dfdHNuKSkgewotCQkJLyogRHJhZyBhbG9uZyB0aGUgd2lu
ZG93X3RzbiBmb3IgY3dyJ3MgKi8KLQkJCW5ldC0+Y3dyX3dpbmRvd190c24gPSBjdW1hY2s7Ci0J
CX0KLQkJbmV0LT5wcmV2X2N3bmQgPSBuZXQtPmN3bmQ7Ci0JCW5ldC0+bmV0X2FjayA9IDA7Ci0J
CW5ldC0+bmV0X2FjazIgPSAwOwotCi0JCS8qCi0JCSAqIENNVDogUmVzZXQgQ1VDIGFuZCBGYXN0
IHJlY292ZXJ5IGFsZ28gdmFyaWFibGVzIGJlZm9yZQotCQkgKiBTQUNLIHByb2Nlc3NpbmcKLQkJ
ICovCi0JCW5ldC0+bmV3X3BzZXVkb19jdW1hY2sgPSAwOwotCQluZXQtPndpbGxfZXhpdF9mYXN0
X3JlY292ZXJ5ID0gMDsKLQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9w
cmVwYXJlX25ldF9mb3Jfc2FjaykgewotCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3Rw
X2N3bmRfcHJlcGFyZV9uZXRfZm9yX3NhY2spKHN0Y2IsIG5ldCk7Ci0JCX0KLQl9Ci0JaWYgKCFU
QUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKLQkJdHAxID0gVEFJTFFfTEFTVCgmYXNv
Yy0+c2VudF9xdWV1ZSwKLQkJCQkgc2N0cGNodW5rX2xpc3RoZWFkKTsKLQkJc2VuZF9zID0gdHAx
LT5yZWMuZGF0YS50c24gKyAxOwotCX0gZWxzZSB7Ci0JCXNlbmRfcyA9IGFzb2MtPnNlbmRpbmdf
c2VxOwotCX0KLQlpZiAoU0NUUF9UU05fR0UoY3VtYWNrLCBzZW5kX3MpKSB7Ci0JCXN0cnVjdCBt
YnVmICpvcF9lcnI7Ci0JCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJKmFib3J0
X25vdyA9IDE7Ci0JCS8qIFhYWCAqLwotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQ3Vt
IGFjayAlOC44eCBncmVhdGVyIG9yIGVxdWFsIHRoYW4gVFNOICU4Ljh4IiwKLQkJCSBjdW1hY2ss
IHNlbmRfcyk7Ci0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9U
T0NPTF9WSU9MQVRJT04sIG1zZyk7Ci0JCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9
IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzIxOwotCQlzY3RwX2Fib3J0X2FuX2Fz
c29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQkJcmV0dXJuOwotCX0KLQlhc29jLT50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPSBjdW1hY2s7
Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNI
T0xEX0xPR0dJTkcpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0J
CQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJICAgICAgIDAsCi0J
CQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBLAotCQkJICAgICAgIF9fTElORV9fKTsKLQl9
Ci0Jc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQlpZiAoU0NUUF9UU05fR1Qo
Y3VtYWNrLCBhc29jLT5sYXN0X2Fja2VkX3NlcSkpIHsKLQkJLyogcHJvY2VzcyB0aGUgbmV3IGNv
bnNlY3V0aXZlIFRTTiBmaXJzdCAqLwotCQlUQUlMUV9GT1JFQUNIX1NBRkUodHAxLCAmYXNvYy0+
c2VudF9xdWV1ZSwgc2N0cF9uZXh0LCB0cDIpIHsKLQkJCWlmIChTQ1RQX1RTTl9HRShjdW1hY2ss
IHRwMS0+cmVjLmRhdGEudHNuKSkgewotCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JB
TV9VTlNFTlQpIHsKLQkJCQkJU0NUUF9QUklOVEYoIldhcm5pbmcsIGFuIHVuc2VudCBpcyBub3cg
YWNrZWQ/XG4iKTsKLQkJCQl9Ci0JCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNL
RUQpIHsKLQkJCQkJLyoKLQkJCQkJICogSWYgaXQgaXMgbGVzcyB0aGFuIEFDS0VELCBpdCBpcwot
CQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdodC4gSGlnaGVyCi0JCQkJCSAqIHZhbHVlcyBt
YXkgb2NjdXIgZHVyaW5nIG1hcmtpbmcKLQkJCQkJICovCi0JCQkJCWlmICh0cDEtPnNlbnQgPCBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0
cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fQ0EsCi0JCQkJCQkJCSAgICAgICB0cDEt
Pndob1RvLT5mbGlnaHRfc2l6ZSwKLQkJCQkJCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAotCQkJ
CQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKLQkJCQkJCQkJICAg
ICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKLQkJCQkJCX0KLQkJCQkJCXNjdHBfZmxpZ2h0X3NpemVf
ZGVjcmVhc2UodHAxKTsKLQkJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3
bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJCQkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkodHAxLT53aG9UbywKLQkJ
CQkJCQkJCQkJCQkJICAgICB0cDEpOwotCQkJCQkJfQotCQkJCQkJLyogc2FfaWdub3JlIE5PX05V
TExfQ0hLICovCi0JCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwot
CQkJCQl9Ci0JCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2sgKz0gdHAxLT5zZW5kX3NpemU7Ci0JCQkJ
CWlmICh0cDEtPnNuZF9jb3VudCA8IDIpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBUcnVlIG5vbi1y
ZXRyYW5zbWl0ZWQKLQkJCQkJCSAqIGNodW5rCi0JCQkJCQkgKi8KLQkJCQkJCXRwMS0+d2hvVG8t
Pm5ldF9hY2syICs9Ci0JCQkJCQkJdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJCS8qIHVwZGF0ZSBS
VE8gdG9vPyAqLwotCQkJCQkJaWYgKHRwMS0+ZG9fcnR0KSB7Ci0JCQkJCQkJaWYgKHJ0b19vaykg
ewotCQkJCQkJCQl0cDEtPndob1RvLT5SVE8gPQotCQkJCQkJCQkJLyoKLQkJCQkJCQkJCSAqIHNh
X2lnbm9yZQotCQkJCQkJCQkJICogTk9fTlVMTF9DSEsKLQkJCQkJCQkJCSAqLwotCQkJCQkJCQkJ
c2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsCi0JCQkJCQkJCQkJCSAgIGFzb2MsIHRwMS0+d2hvVG8s
Ci0JCQkJCQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3RpbWUsCi0JCQkJCQkJCQkJCSAgIHNjdHBf
YWxpZ25fc2FmZV9ub2NvcHksCi0JCQkJCQkJCQkJCSAgIFNDVFBfUlRUX0ZST01fREFUQSk7Ci0J
CQkJCQkJCXJ0b19vayA9IDA7Ci0JCQkJCQkJfQotCQkJCQkJCWlmICh0cDEtPndob1RvLT5ydG9f
bmVlZGVkID09IDApIHsKLQkJCQkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7Ci0JCQkJ
CQkJfQotCQkJCQkJCXRwMS0+ZG9fcnR0ID0gMDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkvKgot
CQkJCQkgKiBDTVQ6IENVQ3YyIGFsZ29yaXRobS4gRnJvbSB0aGUKLQkJCQkJICogY3VtYWNrJ2Qg
VFNOcywgZm9yIGVhY2ggVFNOIGJlaW5nCi0JCQkJCSAqIGFja2VkIGZvciB0aGUgZmlyc3QgdGlt
ZSwgc2V0IHRoZQotCQkJCQkgKiBmb2xsb3dpbmcgdmFyaWFibGVzIGZvciB0aGUKLQkJCQkJICog
Y29ycmVzcCBkZXN0aW5hdGlvbi4KLQkJCQkJICogbmV3X3BzZXVkb19jdW1hY2sgd2lsbCB0cmln
Z2VyIGEKLQkJCQkJICogY3duZCB1cGRhdGUuCi0JCQkJCSAqIGZpbmRfKHJ0eF8pcHNldWRvX2N1
bWFjayB3aWxsCi0JCQkJCSAqIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dAotCQkJCQkgKiBl
eHBlY3RlZCAocnR4LSlwc2V1ZG8tY3VtYWNrLgotCQkJCQkgKi8KLQkJCQkJdHAxLT53aG9Uby0+
bmV3X3BzZXVkb19jdW1hY2sgPSAxOwotCQkJCQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1h
Y2sgPSAxOwotCQkJCQl0cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKLQot
CQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05E
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KLQkJ
CQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgdHAxLT53aG9UbywgdHAxLT5yZWMuZGF0YS50c24sIFND
VFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAodHAxLT5zZW50
ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+
c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQl9Ci0JCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1
bmtfd2FzX3Jldm9rZWQpIHsKLQkJCQkJLyogZGVmbGF0ZSB0aGUgY3duZCAqLwotCQkJCQl0cDEt
Pndob1RvLT5jd25kIC09IHRwMS0+Ym9va19zaXplOwotCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5r
X3dhc19yZXZva2VkID0gMDsKLQkJCQl9Ci0JCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFH
UkFNX05SX0FDS0VEKSB7Ci0JCQkJCWlmIChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lk
XS5jaHVua3Nfb25fcXVldWVzID4gMCkgewotCQkJCQkJYXNvYy0+c3RybW91dFt0cDEtPnJlYy5k
YXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJfSBl
bHNlIHsKLQkJCQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIs
IHRwMS0+cmVjLmRhdGEuc2lkKTsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJfQotCQkJCWlmICgoYXNv
Yy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgot
CQkJCSAgICAoYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3RhdGUgPT0gU0NUUF9T
VFJFQU1fUkVTRVRfUEVORElORykgJiYKLQkJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1v
dXRbdHAxLT5yZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgewotCQkJCQlhc29jLT50cmlnZ2VyX3Jl
c2V0ID0gMTsKLQkJCQl9Ci0JCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCB0cDEs
IHNjdHBfbmV4dCk7Ci0JCQkJaWYgKHRwMS0+ZGF0YSkgewotCQkJCQkvKiBzYV9pZ25vcmUgTk9f
TlVMTF9DSEsgKi8KLQkJCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgMSk7
Ci0JCQkJCXNjdHBfbV9mcmVlbSh0cDEtPmRhdGEpOwotCQkJCQl0cDEtPmRhdGEgPSBOVUxMOwot
CQkJCX0KLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9h
Y2tlZF9zZXEsCi0JCQkJCQkgICAgICBjdW1hY2ssCi0JCQkJCQkgICAgICB0cDEtPnJlYy5kYXRh
LnRzbiwKLQkJCQkJCSAgICAgIDAsCi0JCQkJCQkgICAgICAwLAotCQkJCQkJICAgICAgU0NUUF9M
T0dfRlJFRV9TRU5UKTsKLQkJCQl9Ci0JCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnQtLTsKLQkJCQlz
Y3RwX2ZyZWVfYV9jaHVuayhzdGNiLCB0cDEsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9IGVs
c2UgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5z
Y3RwX3NvY2tldCkgewotCQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0J
CQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JCQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJ
aW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3Rj
Yi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1
bmspKTsKLQkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2Nr
ZXQpIC0gKGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8q
IGNoZWNrIGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3Nz
ZWQgdGhlIHRocmVzaG9sZCAqLwotCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgotCQkJICAg
ICgoKGlucC0+c2VuZF9zYl90aHJlc2hvbGQgPiAwKSAmJgotCQkJICAgICAgKHNiX2ZyZWVfbm93
ID49IGlucC0+c2VuZF9zYl90aHJlc2hvbGQpICYmCi0JCQkgICAgICAoc3RjYi0+YXNvYy5jaHVu
a3Nfb25fb3V0X3F1ZXVlIDw9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1
ZXVlKSkpIHx8Ci0JCQkgICAgIChpbnAtPnNlbmRfc2JfdGhyZXNob2xkID09IDApKSkgewotCQkJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQkJCWlucC0+c2VuZF9jYWxsYmFjayhzdGNiLT5zY3RwX3NvY2tldCwgc2Jf
ZnJlZV9ub3cpOwotCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJfQotCQl9Ci0JfSBlbHNlIGlmIChzdGNi
LT5zY3RwX3NvY2tldCkgewotI2Vsc2UKLQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KLQlp
ZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQot
I2VuZGlmCi0JCVNPQ0tCVUZfTE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7Ci0JCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lO
R19FTkFCTEUpIHsKLQkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLwotCQkJc2N0cF93YWtl
dXBfbG9nKHN0Y2IsIDEsIFNDVFBfV0FLRVNORF9GUk9NX1NBQ0spOwotCQl9Ci0jaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCXNvID0gU0NU
UF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhz
bywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0NMT1NFRF9TT0NLRVQpIHsKLQkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVu
bG9ja2VkICovCi0JCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotCQkJcmV0dXJuOwotCQl9
Ci0jZW5kaWYKLQkJc2N0cF9zb3d3YWtldXBfbG9ja2VkKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNj
dHBfc29ja2V0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCX0gZWxz
ZSB7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dB
S0VfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfd2FrZXVwX2xvZyhzdGNiLCAxLCBTQ1RQX05P
V0FLRV9GUk9NX1NBQ0spOwotCQl9Ci0JfQotCi0JLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9u
IGNvbnRyb2wgZ2l2ZW4gaW4gdGhlIENDIG1vZHVsZSAqLwotCWlmICgoYXNvYy0+bGFzdF9hY2tl
ZF9zZXEgIT0gY3VtYWNrKSAmJiAoZWNuZV9zZWVuID09IDApKSB7Ci0JCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0JCQlpZiAobmV0LT5uZXRfYWNrMiA+IDAp
IHsKLQkJCQkvKgotCQkJCSAqIEthcm4ncyBydWxlIGFwcGxpZXMgdG8gY2xlYXJpbmcgZXJyb3Ig
Y291bnQsIHRoaXMKLQkJCQkgKiBpcyBvcHRpb25hbC4KLQkJCQkgKi8KLQkJCQluZXQtPmVycm9y
X2NvdW50ID0gMDsKLQkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hB
QkxFKSkgewotCQkJCQkvKiBhZGRyIGNhbWUgZ29vZCAqLwotCQkJCQluZXQtPmRlc3Rfc3RhdGUg
fD0gU0NUUF9BRERSX1JFQUNIQUJMRTsKLQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZ
X0lOVEVSRkFDRV9VUCwgc3RjYiwKLQkJCQkJICAgICAgICAgICAgICAgIDAsICh2b2lkICopbmV0
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCX0KLQkJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbikgewotCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
LQkJCQkJCS8qIHJlbGVhc2UgdGhlIGFsdGVybmF0ZSwgcHJpbWFyeSBpcyBnb29kICovCi0JCQkJ
CQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJCQkJc3Rj
Yi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKLQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQ
X0FERFJfUEY7Ci0JCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
LAotCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjIpOwotCQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG5ldCk7Ci0JCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRl
X2V4aXRfcGYoc3RjYiwgbmV0KTsKLQkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCi0JCQkJ
CW5ldC0+bmV0X2FjayA9IDA7Ci0JCQkJfQotCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGlt
ZXJzICovCi0JCQkJbmV0LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsg
bmV0LT5sYXN0c3Y7Ci0JCQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKLQkJ
CQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKLQkJCQl9Ci0JCQkJaWYgKG5ldC0+UlRP
ID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0
bzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfc2FjayhzdGNiLCBhc29jLCAxLCAwLCAwKTsKLQl9Ci0JYXNvYy0+bGFzdF9hY2tl
ZF9zZXEgPSBjdW1hY2s7Ci0KLQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7
Ci0JCS8qIG5vdGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8KLQkJVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCW5ldC0+ZmxpZ2h0X3NpemUgPSAwOwotCQkJbmV0
LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKLQkJfQotCQlhc29jLT50b3RhbF9mbGlnaHQgPSAw
OwotCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOwotCX0KLQotCS8qIFJXTkQgdXBkYXRl
ICovCi0JYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIocnduZCwKLQkJCQkJICAg
ICh1aW50MzJfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291
bnQgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7Ci0JaWYgKGFzb2Mt
PnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewot
CQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQlhc29jLT5wZWVyc19yd25kID0gMDsK
LQl9Ci0JaWYgKGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgewotCQl3aW5fcHJvYmVfcmVj
b3ZlcnkgPSAxOwotCX0KLQkvKiBOb3cgYXNzdXJlIGEgdGltZXIgd2hlcmUgZGF0YSBpcyBxdWV1
ZWQgYXQgKi8KLWFnYWluOgotCWogPSAwOwotCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0
cywgc2N0cF9uZXh0KSB7Ci0JCWludCB0b190aWNrczsKLQkJaWYgKHdpbl9wcm9iZV9yZWNvdmVy
eSAmJiAobmV0LT53aW5kb3dfcHJvYmUpKSB7Ci0JCQl3aW5fcHJvYmVfcmVjb3ZlcmVkID0gMTsK
LQkJCS8qCi0JCQkgKiBGaW5kIGZpcnN0IGNodW5rIHRoYXQgd2FzIHVzZWQgd2l0aCB3aW5kb3cg
cHJvYmUKLQkJCSAqIGFuZCBjbGVhciB0aGUgc2VudAotCQkJICovCi0JCQkvKiBzYV9pZ25vcmUg
RlJFRURfTUVNT1JZICovCi0JCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUs
IHNjdHBfbmV4dCkgewotCQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgewotCQkJCQkvKiBtb3Zl
IGJhY2sgdG8gZGF0YSBzZW5kIHF1ZXVlICovCi0JCQkJCXNjdHBfd2luZG93X3Byb2JlX3JlY292
ZXJ5KHN0Y2IsIGFzb2MsIHRwMSk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCQlp
ZiAobmV0LT5SVE8gPT0gMCkgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFz
b2MuaW5pdGlhbF9ydG8pOwotCQl9IGVsc2UgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tT
KG5ldC0+UlRPKTsKLQkJfQotCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSkgewotCQkJaisrOwotCQkJ
KHZvaWQpU0NUUF9PU19USU1FUl9TVEFSVCgmbmV0LT5yeHRfdGltZXIudGltZXIsIHRvX3RpY2tz
LAotCQkJCQkJICBzY3RwX3RpbWVvdXRfaGFuZGxlciwgJm5ldC0+cnh0X3RpbWVyKTsKLQkJCWlm
IChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCS8qIEluIHdpbmRv
dyBwcm9iZXMgd2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRoZXJlICov
Ci0JCQkJbmV0LT53aW5kb3dfcHJvYmUgPSAwOwotCQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5E
SU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKLQkJCQkJU0NUUF9PU19USU1FUl9TVEFSVCgm
bmV0LT5yeHRfdGltZXIudGltZXIsIHRvX3RpY2tzLAotCQkJCQkgICAgICAgICAgICAgICAgICAg
IHNjdHBfdGltZW91dF9oYW5kbGVyLCAmbmV0LT5yeHRfdGltZXIpOwotCQkJCX0KLQkJCX0gZWxz
ZSBpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKLQkJ
CQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCi0J
CQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKLQkJCQkgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjMpOwotCQkJfQotCQl9Ci0JfQotCWlmICgoaiA9
PSAwKSAmJgotCSAgICAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgJiYKLQkgICAg
KGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9PSAwKSAmJgotCSAgICAod2luX3Byb2JlX3Jl
Y292ZXJlZCA9PSAwKSAmJgotCSAgICAoZG9uZV9vbmNlID09IDApKSB7Ci0JCS8qIGh1aCwgdGhp
cyBzaG91bGQgbm90IGhhcHBlbiB1bmxlc3MgYWxsIHBhY2tldHMKLQkJICogYXJlIFBSLVNDVFAg
YW5kIG1hcmtlZCB0byBza2lwIG9mIGNvdXJzZS4KLQkJICovCi0JCWlmIChzY3RwX2ZzX2F1ZGl0
KGFzb2MpKSB7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkg
ewotCQkJCW5ldC0+ZmxpZ2h0X3NpemUgPSAwOwotCQkJfQotCQkJYXNvYy0+dG90YWxfZmxpZ2h0
ID0gMDsKLQkJCWFzb2MtPnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7Ci0JCQlhc29jLT5zZW50X3F1
ZXVlX3JldHJhbl9jbnQgPSAwOwotCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1
ZXVlLCBzY3RwX25leHQpIHsKLQkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNF
TkQpIHsKLQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZSh0cDEpOwotCQkJCQlzY3RwX3Rv
dGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCB0cDEpOwotCQkJCX0gZWxzZSBpZiAodHAxLT5zZW50
ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+
c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJZG9uZV9vbmNlID0g
MTsKLQkJZ290byBhZ2FpbjsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0JLyogTm93IHdoYXQgYWJvdXQgc2h1dGRvd24gaXNzdWVzICovCi0JLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKiovCi0JaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1
ZXVlKSAmJiBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKLQkJLyogbm90aGluZyBs
ZWZ0IG9uIHNlbmRxdWV1ZS4uIGNvbnNpZGVyIGRvbmUgKi8KLQkJLyogY2xlYW4gdXAgKi8KLQkJ
aWYgKChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDEpICYmCi0JCSAgICAoKGFzb2MtPnN0YXRl
ICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB8fAotCQkgICAgIChhc29jLT5zdGF0ZSAm
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSAmJgotCQkgICAgKCgqYXNvYy0+c3NfZnVu
Y3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSkgewot
CQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUOwotCQl9Ci0JCWlm
ICgoKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB8fAotCQkgICAg
ICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkp
ICYmCi0JCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgotCQkgICAgKGFzb2Mt
PnN0YXRlICYgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJc3RydWN0IG1idWYg
Km9wX2VycjsKLQotCQkJKmFib3J0X25vdyA9IDE7Ci0JCQkvKiBYWFggKi8KLQkJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsK
LQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFU
QSArIFNDVFBfTE9DXzI0OwotCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQlyZXR1cm47Ci0JCX0K
LQkJaWYgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgJiYKLQkJ
ICAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXRwOwotCi0JCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BF
TikgfHwKLQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9X
Tl9SRUNFSVZFRCkpIHsKLQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3Rh
Yik7Ci0JCQl9Ci0JCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NF
TlQpOwotCQkJU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BF
TkRJTkcpOwotCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7Ci0JCQlpZiAo
YXNvYy0+YWx0ZXJuYXRlKSB7Ci0JCQkJbmV0cCA9IGFzb2MtPmFsdGVybmF0ZTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJbmV0cCA9IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb247Ci0JCQl9Ci0JCQlzY3Rw
X3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0cCk7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9TSFVURE9XTiwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHApOwotCQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKLQkJCQkJIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHApOwotCQl9IGVsc2UgaWYgKChTQ1RQX0dFVF9TVEFURShh
c29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkJICAgKGFzb2MtPnN0
cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7Ci0KLQkJ
CVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCVNDVFBfU0VUX1NU
QVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpOwotCQkJU0NUUF9DTEVBUl9T
VUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJc2N0cF9zdG9w
X3RpbWVyc19mb3Jfc2h1dGRvd24oc3RjYik7Ci0JCQlpZiAoYXNvYy0+YWx0ZXJuYXRlKSB7Ci0J
CQkJbmV0cCA9IGFzb2MtPmFsdGVybmF0ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJbmV0cCA9IGFzb2Mt
PnByaW1hcnlfZGVzdGluYXRpb247Ci0JCQl9Ci0JCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0
Y2IsIG5ldHApOwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05B
Q0ssCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJfQotCX0KLQkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIEhlcmUgd2UgcGVy
Zm9ybSBQUi1TQ1RQIHByb2NlZHVyZXMgICAgICAgICovCi0JLyogKHNlY3Rpb24gNC4yKSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqLwotCS8qIEMxLiB1cGRhdGUgYWR2YW5jZWRQZWVyQWNrUG9pbnQg
Ki8KLQlpZiAoU0NUUF9UU05fR1QoY3VtYWNrLCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2lu
dCkpIHsKLQkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1hY2s7Ci0JfQotCS8q
IFBSLVNjdHAgaXNzdWVzIG5lZWQgdG8gYmUgYWRkcmVzc2VkIHRvbyAqLwotCWlmICgoYXNvYy0+
cHJzY3RwX3N1cHBvcnRlZCkgJiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsKLQkJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKLQkJdWludDMyX3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2lu
dDsKLQotCQlvbGRfYWR2X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tf
cG9pbnQ7Ci0JCWxjaGsgPSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFz
b2MpOwotCQkvKiBDMy4gU2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04gKi8KLQkJaWYg
KFNDVFBfVFNOX0dUKGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1hY2spKSB7Ci0J
CQkvKgotCQkJICogSVNTVUUgd2l0aCBFQ04sIHNlZSBGV0QtVFNOIHByb2Nlc3NpbmcuCi0JCQkg
Ki8KLQkJCWlmIChTQ1RQX1RTTl9HVChhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgb2xk
X2Fkdl9wZWVyX2Fja19wb2ludCkpIHsKLQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2Mp
OwotCQkJfSBlbHNlIGlmIChsY2hrKSB7Ci0JCQkJLyogdHJ5IHRvIEZSIGZ3ZC10c24ncyB0aGF0
IGdldCBsb3N0IHRvbyAqLwotCQkJCWlmIChsY2hrLT5yZWMuZGF0YS5md2RfdHNuX2NudCA+PSAz
KSB7Ci0JCQkJCXNlbmRfZm9yd2FyZF90c24oc3RjYiwgYXNvYyk7Ci0JCQkJfQotCQkJfQotCQl9
Ci0JCWlmIChsY2hrKSB7Ci0JCQkvKiBBc3N1cmUgYSB0aW1lciBpcyB1cCAqLwotCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKLQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIGxjaGstPndob1RvKTsKLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9TQUNLX1JXTkRfVVBEQVRFLAotCQkJICAgICAgIHJ3bmQsCi0JCQkgICAg
ICAgc3RjYi0+YXNvYy5wZWVyc19yd25kLAotCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0LAotCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCX0K
LX0KLQotdm9pZAotc2N0cF9oYW5kbGVfc2FjayhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldF9z
ZWcsIGludCBvZmZzZXRfZHVwLAotICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gICAgICAgICAgICAgICAgIHVpbnQxNl90IG51bV9zZWcsIHVpbnQxNl90IG51bV9ucl9z
ZWcsIHVpbnQxNl90IG51bV9kdXAsCi0gICAgICAgICAgICAgICAgIGludCAqYWJvcnRfbm93LCB1
aW50OF90IGZsYWdzLAotICAgICAgICAgICAgICAgICB1aW50MzJfdCBjdW1fYWNrLCB1aW50MzJf
dCByd25kLCBpbnQgZWNuZV9zZWVuKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
OwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSwgKnRwMjsKLQl1aW50MzJfdCBsYXN0X3Rz
biwgYmlnZ2VzdF90c25fYWNrZWQsIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0aGlzX3NhY2tf
bG93ZXN0X25ld2FjazsKLQl1aW50MTZfdCB3YWtlX2hpbSA9IDA7Ci0JdWludDMyX3Qgc2VuZF9z
ID0gMDsKLQlsb25nIGo7Ci0JaW50IGFjY3VtX21vdmVkID0gMDsKLQlpbnQgd2lsbF9leGl0X2Zh
c3RfcmVjb3ZlcnkgPSAwOwotCXVpbnQzMl90IGFfcnduZCwgb2xkX3J3bmQ7Ci0JaW50IHdpbl9w
cm9iZV9yZWNvdmVyeSA9IDA7Ci0JaW50IHdpbl9wcm9iZV9yZWNvdmVyZWQgPSAwOwotCXN0cnVj
dCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7Ci0JaW50IGRvbmVfb25jZTsKLQlpbnQgcnRvX29rID0g
MTsKLQl1aW50OF90IHJlbmVnZWRfYWxsID0gMDsKLQl1aW50OF90IGNtdF9kYWNfZmxhZzsKLQkv
KgotCSAqIHdlIHRha2UgYW55IGNoYW5jZSB3ZSBjYW4gdG8gc2VydmljZSBvdXIgcXVldWVzIHNp
bmNlIHdlIGNhbm5vdAotCSAqIGdldCBhd29rZW4gd2hlbiB0aGUgc29ja2V0IGlzIHJlYWQgZnJv
bSA6PAotCSAqLwotCS8qCi0JICogTm93IHBlcmZvcm0gdGhlIGFjdHVhbCBTQUNLIGhhbmRsaW5n
OiAxKSBWZXJpZnkgdGhhdCBpdCBpcyBub3QgYW4KLQkgKiBvbGQgc2FjaywgaWYgc28gZGlzY2Fy
ZC4gMikgSWYgdGhlcmUgaXMgbm90aGluZyBsZWZ0IGluIHRoZSBzZW5kCi0JICogcXVldWUgKGN1
bS1hY2sgaXMgZXF1YWwgdG8gbGFzdCBhY2tlZCkgdGhlbiB5b3UgaGF2ZSBhIGR1cGxpY2F0ZQot
CSAqIHRvbywgdXBkYXRlIGFueSByd25kIGNoYW5nZSBhbmQgdmVyaWZ5IG5vIHRpbWVycyBhcmUg
cnVubmluZy4KLQkgKiB0aGVuIHJldHVybi4gMykgUHJvY2VzcyBhbnkgbmV3IGNvbnNlcXV0aXZl
IGRhdGEgaS5lLiBjdW0tYWNrCi0JICogbW92ZWQgcHJvY2VzcyB0aGVzZSBmaXJzdCBhbmQgbm90
ZSB0aGF0IGl0IG1vdmVkLiA0KSBQcm9jZXNzIGFueQotCSAqIHNhY2sgYmxvY2tzLiA1KSBEcm9w
IGFueSBhY2tlZCBmcm9tIHRoZSBxdWV1ZS4gNikgQ2hlY2sgZm9yIGFueQotCSAqIHJldm9rZWQg
YmxvY2tzIGFuZCBtYXJrLiA3KSBVcGRhdGUgdGhlIGN3bmQuIDgpIE5vdGhpbmcgbGVmdCwKLQkg
KiBzeW5jIHVwIGZsaWdodHNpemVzIGFuZCB0aGluZ3MsIHN0b3AgYWxsIHRpbWVycyBhbmQgYWxz
byBjaGVjawotCSAqIGZvciBzaHV0ZG93bl9wZW5kaW5nIHN0YXRlLiBJZiBzbyB0aGVuIGdvIGFo
ZWFkIGFuZCBzZW5kIG9mZiB0aGUKLQkgKiBzaHV0ZG93bi4gSWYgaW4gc2h1dGRvd24gcmVjdiwg
c2VuZCBvZmYgdGhlIHNodXRkb3duLWFjayBhbmQKLQkgKiBzdGFydCB0aGF0IHRpbWVyLCBSZXQu
IDkpIFN0cmlrZSBhbnkgbm9uLWFja2VkIHRoaW5ncyBhbmQgZG8gRlIKLQkgKiBwcm9jZWR1cmUg
aWYgbmVlZGVkIGJlaW5nIHN1cmUgdG8gc2V0IHRoZSBGUiBmbGFnLiAxMCkgRG8gcHItc2N0cAot
CSAqIHByb2NlZHVyZXMuIDExKSBBcHBseSBhbnkgRlIgcGVuYWx0aWVzLiAxMikgQXNzdXJlIHdl
IHdpbGwgU0FDSwotCSAqIGlmIGluIHNodXRkb3duX3JlY3Ygc3RhdGUuCi0JICovCi0JU0NUUF9U
Q0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JLyogQ01UIERBQyBhbGdvICovCi0JdGhpc19zYWNrX2xv
d2VzdF9uZXdhY2sgPSAwOwotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Nsb3dwYXRoX3NhY2spOwot
CWxhc3RfdHNuID0gY3VtX2FjazsKLQljbXRfZGFjX2ZsYWcgPSBmbGFncyAmIFNDVFBfU0FDS19D
TVRfREFDOwotI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCi0Jc3RjYi0+YXNvYy5jdW1hY2tf
bG9nW3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdF0gPSBjdW1fYWNrOwotCXN0Y2ItPmFzb2MuY3Vt
YWNrX2xvZ19hdCsrOwotCWlmIChzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPiBTQ1RQX1RTTl9M
T0dfU0laRSkgewotCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXQgPSAwOwotCX0KLSNlbmRpZgot
CWFfcnduZCA9IHJ3bmQ7Ci0KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUpIHsKLQkJc2N0cF9taXNjX2ludHMo
U0NUUF9TQUNLX0xPR19OT1JNQUwsIGN1bV9hY2ssCi0JCSAgICAgICAgICAgICAgIHJ3bmQsIHN0
Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEsIHN0Y2ItPmFzb2MucGVlcnNfcnduZCk7Ci0JfQotCi0J
b2xkX3J3bmQgPSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCSAgICAgICAgICAgICAgIHN0Y2ItPmFz
b2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKLQkJICAgICAgICAgICAgICAgMCwKLQkJICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBLAotCQkgICAgICAgICAgICAgICBfX0xJTkVfXyk7
Ci0JfQotCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JYXNvYyA9ICZzdGNi
LT5hc29jOwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2Vk
X3NlcSwKLQkJICAgICAgICAgICAgICBjdW1fYWNrLAotCQkgICAgICAgICAgICAgIDAsCi0JCSAg
ICAgICAgICAgICAgbnVtX3NlZywKLQkJICAgICAgICAgICAgICBudW1fZHVwLAotCQkgICAgICAg
ICAgICAgIFNDVFBfTE9HX05FV19TQUNLKTsKLQl9Ci0JaWYgKChudW1fZHVwKSAmJiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkp
IHsKLQkJdWludDE2X3QgaTsKLQkJdWludDMyX3QgKmR1cGRhdGEsIGRibG9jazsKLQotCQlmb3Ig
KGkgPSAwOyBpIDwgbnVtX2R1cDsgaSsrKSB7Ci0JCQlkdXBkYXRhID0gKHVpbnQzMl90ICopc2N0
cF9tX2dldHB0cihtLCBvZmZzZXRfZHVwICsgaSAqIHNpemVvZih1aW50MzJfdCksCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodWludDMyX3QpLCAodWludDhf
dCAqKSZkYmxvY2spOwotCQkJaWYgKGR1cGRhdGEgPT0gTlVMTCkgewotCQkJCWJyZWFrOwotCQkJ
fQotCQkJc2N0cF9sb2dfZnIoKmR1cGRhdGEsIDAsIDAsIFNDVFBfRlJfRFVQRUQpOwotCQl9Ci0J
fQotCS8qIHJlYWxpdHkgY2hlY2sgKi8KLQlpZiAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1
ZXVlKSkgewotCQl0cDEgPSBUQUlMUV9MQVNUKCZhc29jLT5zZW50X3F1ZXVlLAotCQkJCSBzY3Rw
Y2h1bmtfbGlzdGhlYWQpOwotCQlzZW5kX3MgPSB0cDEtPnJlYy5kYXRhLnRzbiArIDE7Ci0JfSBl
bHNlIHsKLQkJdHAxID0gTlVMTDsKLQkJc2VuZF9zID0gYXNvYy0+c2VuZGluZ19zZXE7Ci0JfQot
CWlmIChTQ1RQX1RTTl9HRShjdW1fYWNrLCBzZW5kX3MpKSB7Ci0JCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0JCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJLyoKLQkJICogbm8gd2F5
LCB3ZSBoYXZlIG5vdCBldmVuIHNlbnQgdGhpcyBUU04gb3V0IHlldC4KLQkJICogUGVlciBpcyBo
b3BlbGVzc2x5IG1lc3NlZCB1cCB3aXRoIHVzLgotCQkgKi8KLQkJU0NUUF9QUklOVEYoIk5FVyBj
dW1fYWNrOiV4IHNlbmRfczoleCBpcyBzbWFsbGVyIG9yIGVxdWFsXG4iLAotCQkJICAgIGN1bV9h
Y2ssIHNlbmRfcyk7Ci0JCWlmICh0cDEpIHsKLQkJCVNDVFBfUFJJTlRGKCJHb3Qgc2VuZF9zIGZy
b20gdHNuOiV4ICsgMSBvZiB0cDE6ICVwXG4iLAotCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwg
KHZvaWQgKil0cDEpOwotCQl9Ci0JaG9wZWxlc3NfcGVlcjoKLQkJKmFib3J0X25vdyA9IDE7Ci0J
CS8qIFhYWCAqLwotCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiQ3VtIGFjayAlOC44eCBn
cmVhdGVyIG9yIGVxdWFsIHRoYW4gVFNOICU4Ljh4IiwKLQkJCSBjdW1fYWNrLCBzZW5kX3MpOwot
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFU
SU9OLCBtc2cpOwotCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01f
U0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNTsKLQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihz
dGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCXJldHVy
bjsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMSkgY2hlY2sgdGhlIHJhbmdl
ICovCi0JLyoqKioqKioqKioqKioqKioqKioqKiovCi0JaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmxh
c3RfYWNrZWRfc2VxLCBsYXN0X3RzbikpIHsKLQkJLyogYWNraW5nIHNvbWV0aGluZyBiZWhpbmQg
Ki8KLQkJcmV0dXJuOwotCX0KLQotCS8qIHVwZGF0ZSB0aGUgUnduZCBvZiB0aGUgcGVlciAqLwot
CWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkgICAgVEFJTFFfRU1QVFko
JmFzb2MtPnNlbmRfcXVldWUpICYmCi0JICAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDAp
KSB7Ci0JCS8qIG5vdGhpbmcgbGVmdCBvbiBzZW5kL3NlbnQgYW5kIHN0cm1xICovCi0JCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJM
RSkgewotCQkJc2N0cF9sb2dfcnduZF9zZXQoU0NUUF9TRVRfUEVFUl9SV05EX1ZJQV9TQUNLLAot
CQkJICAgICAgICAgICAgICAgICAgYXNvYy0+cGVlcnNfcnduZCwgMCwgMCwgYV9yd25kKTsKLQkJ
fQotCQlhc29jLT5wZWVyc19yd25kID0gYV9yd25kOwotCQlpZiAoYXNvYy0+c2VudF9xdWV1ZV9y
ZXRyYW5fY250KSB7Ci0JCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAwOwotCQl9Ci0J
CWlmIChhc29jLT5wZWVyc19yd25kIDwgc3RjYi0+c2N0cF9lcC0+c2N0cF9lcC5zY3RwX3N3c19z
ZW5kZXIpIHsKLQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCi0JCQlhc29jLT5wZWVy
c19yd25kID0gMDsKLQkJfQotCQkvKiBzdG9wIGFueSB0aW1lcnMgKi8KLQkJVEFJTFFfRk9SRUFD
SChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKLQkJCSAgICAgICAgICAgICAgICBzdGNi
LCBuZXQsIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI2KTsKLQkJCW5ldC0+cGFy
dGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCQluZXQtPmZsaWdodF9zaXplID0gMDsKLQkJfQotCQlh
c29jLT50b3RhbF9mbGlnaHQgPSAwOwotCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOwot
CQlyZXR1cm47Ci0JfQotCS8qCi0JICogV2UgaW5pdCBuZXRBY2tTeiBhbmQgbmV0QWNrU3oyIHRv
IDAuIFRoZXNlIGFyZSB1c2VkIHRvIHRyYWNrIDIKLQkgKiB0aGluZ3MuIFRoZSB0b3RhbCBieXRl
IGNvdW50IGFja2VkIGlzIHRyYWNrZWQgaW4gbmV0QWNrU3ogQU5ECi0JICogbmV0QWNrMiBpcyB1
c2VkIHRvIHRyYWNrIHRoZSB0b3RhbCBieXRlcyBhY2tlZCB0aGF0IGFyZSB1bi0KLQkgKiBhbWli
Z3Vpb3VzIGFuZCB3ZXJlIG5ldmVyIHJldHJhbnNtaXR0ZWQuIFdlIHRyYWNrIHRoZXNlIG9uIGEg
cGVyCi0JICogZGVzdGluYXRpb24gYWRkcmVzcyBiYXNpcy4KLQkgKi8KLQlUQUlMUV9GT1JFQUNI
KG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoU0NUUF9UU05fR1QoY3VtX2Fj
aywgbmV0LT5jd3Jfd2luZG93X3RzbikpIHsKLQkJCS8qIERyYWcgYWxvbmcgdGhlIHdpbmRvd190
c24gZm9yIGN3cidzICovCi0JCQluZXQtPmN3cl93aW5kb3dfdHNuID0gY3VtX2FjazsKLQkJfQot
CQluZXQtPnByZXZfY3duZCA9IG5ldC0+Y3duZDsKLQkJbmV0LT5uZXRfYWNrID0gMDsKLQkJbmV0
LT5uZXRfYWNrMiA9IDA7Ci0KLQkJLyoKLQkJICogQ01UOiBSZXNldCBDVUMgYW5kIEZhc3QgcmVj
b3ZlcnkgYWxnbyB2YXJpYWJsZXMgYmVmb3JlCi0JCSAqIFNBQ0sgcHJvY2Vzc2luZwotCQkgKi8K
LQkJbmV0LT5uZXdfcHNldWRvX2N1bWFjayA9IDA7Ci0JCW5ldC0+d2lsbF9leGl0X2Zhc3RfcmVj
b3ZlcnkgPSAwOwotCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3ByZXBh
cmVfbmV0X2Zvcl9zYWNrKSB7Ci0JCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3du
ZF9wcmVwYXJlX25ldF9mb3Jfc2Fjaykoc3RjYiwgbmV0KTsKLQkJfQotCX0KLQkvKiBwcm9jZXNz
IHRoZSBuZXcgY29uc2VjdXRpdmUgVFNOIGZpcnN0ICovCi0JVEFJTFFfRk9SRUFDSCh0cDEsICZh
c29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGxhc3RfdHNu
LCB0cDEtPnJlYy5kYXRhLnRzbikpIHsKLQkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JB
TV9VTlNFTlQpIHsKLQkJCQlhY2N1bV9tb3ZlZCA9IDE7Ci0JCQkJaWYgKHRwMS0+c2VudCA8IFND
VFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCQkJLyoKLQkJCQkJICogSWYgaXQgaXMgbGVzcyB0aGFu
IEFDS0VELCBpdCBpcwotCQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdodC4gSGlnaGVyCi0J
CQkJCSAqIHZhbHVlcyBtYXkgb2NjdXIgZHVyaW5nIG1hcmtpbmcKLQkJCQkJICovCi0JCQkJCWlm
ICgodHAxLT53aG9Uby0+ZGVzdF9zdGF0ZSAmCi0JCQkJCSAgICAgU0NUUF9BRERSX1VOQ09ORklS
TUVEKSAmJgotCQkJCQkgICAgKHRwMS0+c25kX2NvdW50IDwgMikpIHsKLQkJCQkJCS8qCi0JCQkJ
CQkgKiBJZiB0aGVyZSB3YXMgbm8gcmV0cmFuCi0JCQkJCQkgKiBhbmQgdGhlIGFkZHJlc3MgaXMK
LQkJCQkJCSAqIHVuLWNvbmZpcm1lZCBhbmQgd2Ugc2VudAotCQkJCQkJICogdGhlcmUgYW5kIGFy
ZSBub3cKLQkJCQkJCSAqIHNhY2tlZC4uIGl0cyBjb25maXJtZWQsCi0JCQkJCQkgKiBtYXJrIGl0
IHNvLgotCQkJCQkJICovCi0JCQkJCQl0cDEtPndob1RvLT5kZXN0X3N0YXRlICY9Ci0JCQkJCQkJ
flNDVFBfQUREUl9VTkNPTkZJUk1FRDsKLQkJCQkJfQotCQkJCQlpZiAodHAxLT5zZW50IDwgU0NU
UF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJCXNjdHBf
bWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX0NBLAotCQkJCQkJCSAgICAgICAgICAgICAg
IHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgIHRwMS0+Ym9v
a19zaXplLAotCQkJCQkJCSAgICAgICAgICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXRwMS0+
d2hvVG8sCi0JCQkJCQkJICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCQkJ
fQotCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOwotCQkJCQkJc2N0cF90b3Rh
bF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsKLQkJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1
bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKLQkJCQkJCQkoKnN0
Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCko
dHAxLT53aG9UbywKLQkJCQkJCQkJCQkJCQkJICAgICB0cDEpOwotCQkJCQkJfQotCQkJCQl9Ci0J
CQkJCXRwMS0+d2hvVG8tPm5ldF9hY2sgKz0gdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJLyogQ01U
IFNGUiBhbmQgREFDIGFsZ29zICovCi0JCQkJCXRoaXNfc2Fja19sb3dlc3RfbmV3YWNrID0gdHAx
LT5yZWMuZGF0YS50c247Ci0JCQkJCXRwMS0+d2hvVG8tPnNhd19uZXdhY2sgPSAxOwotCi0JCQkJ
CWlmICh0cDEtPnNuZF9jb3VudCA8IDIpIHsKLQkJCQkJCS8qCi0JCQkJCQkgKiBUcnVlIG5vbi1y
ZXRyYW5zbWl0ZWQKLQkJCQkJCSAqIGNodW5rCi0JCQkJCQkgKi8KLQkJCQkJCXRwMS0+d2hvVG8t
Pm5ldF9hY2syICs9Ci0JCQkJCQkJdHAxLT5zZW5kX3NpemU7Ci0KLQkJCQkJCS8qIHVwZGF0ZSBS
VE8gdG9vPyAqLwotCQkJCQkJaWYgKHRwMS0+ZG9fcnR0KSB7Ci0JCQkJCQkJaWYgKHJ0b19vaykg
ewotCQkJCQkJCQl0cDEtPndob1RvLT5SVE8gPQotCQkJCQkJCQkJc2N0cF9jYWxjdWxhdGVfcnRv
KHN0Y2IsCi0JCQkJCQkJCQkJCSAgIGFzb2MsIHRwMS0+d2hvVG8sCi0JCQkJCQkJCQkJCSAgICZ0
cDEtPnNlbnRfcmN2X3RpbWUsCi0JCQkJCQkJCQkJCSAgIHNjdHBfYWxpZ25fc2FmZV9ub2NvcHks
Ci0JCQkJCQkJCQkJCSAgIFNDVFBfUlRUX0ZST01fREFUQSk7Ci0JCQkJCQkJCXJ0b19vayA9IDA7
Ci0JCQkJCQkJfQotCQkJCQkJCWlmICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKLQkJ
CQkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7Ci0JCQkJCQkJfQotCQkJCQkJCXRwMS0+
ZG9fcnR0ID0gMDsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQkvKgotCQkJCQkgKiBDTVQ6IENVQ3Yy
IGFsZ29yaXRobS4gRnJvbSB0aGUKLQkJCQkJICogY3VtYWNrJ2QgVFNOcywgZm9yIGVhY2ggVFNO
IGJlaW5nCi0JCQkJCSAqIGFja2VkIGZvciB0aGUgZmlyc3QgdGltZSwgc2V0IHRoZQotCQkJCQkg
KiBmb2xsb3dpbmcgdmFyaWFibGVzIGZvciB0aGUKLQkJCQkJICogY29ycmVzcCBkZXN0aW5hdGlv
bi4KLQkJCQkJICogbmV3X3BzZXVkb19jdW1hY2sgd2lsbCB0cmlnZ2VyIGEKLQkJCQkJICogY3du
ZCB1cGRhdGUuCi0JCQkJCSAqIGZpbmRfKHJ0eF8pcHNldWRvX2N1bWFjayB3aWxsCi0JCQkJCSAq
IHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dAotCQkJCQkgKiBleHBlY3RlZCAocnR4LSlwc2V1
ZG8tY3VtYWNrLgotCQkJCQkgKi8KLQkJCQkJdHAxLT53aG9Uby0+bmV3X3BzZXVkb19jdW1hY2sg
PSAxOwotCQkJCQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOwotCQkJCQl0cDEt
Pndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKLQotCi0JCQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUp
IHsKLQkJCQkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCi0JCQkJCQkgICAg
ICAgICAgICAgIGN1bV9hY2ssCi0JCQkJCQkgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNu
LAotCQkJCQkJICAgICAgICAgICAgICAwLAotCQkJCQkJICAgICAgICAgICAgICAwLAotCQkJCQkJ
ICAgICAgICAgICAgICBTQ1RQX0xPR19UU05fQUNLRUQpOwotCQkJCQl9Ci0JCQkJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFC
TEUpIHsKLQkJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgdHAxLT53aG9UbywgdHAxLT5yZWMuZGF0
YS50c24sIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAo
dHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfdWNvdW50X2Rl
Y3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKLQkJCQkJc2N0cF9hdWRpdF9sb2coMHhCMywKLQkJCQkJICAgICAgICAgICAgICAgKGFz
b2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCAmIDB4MDAwMDAwZmYpKTsKLSNlbmRpZgotCQkJCX0K
LQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgewotCQkJCQkvKiBkZWZs
YXRlIHRoZSBjd25kICovCi0JCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29rX3NpemU7
Ci0JCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOwotCQkJCX0KLQkJCQlp
ZiAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKLQkJCQkJdHAxLT5zZW50
ID0gU0NUUF9EQVRBR1JBTV9BQ0tFRDsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlicmVh
azsKLQkJfQotCX0KLQliaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCA9IGJpZ2dlc3RfdHNuX2Fja2Vk
ID0gbGFzdF90c247Ci0JLyogYWx3YXlzIHNldCB0aGlzIHVwIHRvIGN1bS1hY2sgKi8KLQlhc29j
LT50aGlzX3NhY2tfaGlnaGVzdF9nYXAgPSBsYXN0X3RzbjsKLQotCWlmICgobnVtX3NlZyA+IDAp
IHx8IChudW1fbnJfc2VnID4gMCkpIHsKLQotCQkvKgotCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQg
SFROQSkgLSB0aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgaGFzCi0JCSAqIHRvIGJlIGdyZWF0ZXIg
dGhhbiB0aGUgY3VtYWNrLiBBbHNvIHJlc2V0IHNhd19uZXdhY2sgdG8gMAotCQkgKiBmb3IgYWxs
IGRlc3RzLgotCQkgKi8KLQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25l
eHQpIHsKLQkJCW5ldC0+c2F3X25ld2FjayA9IDA7Ci0JCQluZXQtPnRoaXNfc2Fja19oaWdoZXN0
X25ld2FjayA9IGxhc3RfdHNuOwotCQl9Ci0KLQkJLyoKLQkJICogdGhpc1NhY2tIaWdoZXN0R2Fw
IHdpbGwgaW5jcmVhc2Ugd2hpbGUgaGFuZGxpbmcgTkVXCi0JCSAqIHNlZ21lbnRzIHRoaXNfc2Fj
a19oaWdoZXN0X25ld2FjayB3aWxsIGluY3JlYXNlIHdoaWxlCi0JCSAqIGhhbmRsaW5nIE5FV0xZ
IEFDS0VEIGNodW5rcy4gdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sgaXMKLQkJICogdXNlZCBmb3Ig
Q01UIERBQyBhbGdvLiBzYXdfbmV3YWNrIHdpbGwgYWxzbyBjaGFuZ2UuCi0JCSAqLwotCQlpZiAo
c2N0cF9oYW5kbGVfc2VnbWVudHMobSwgJm9mZnNldF9zZWcsIHN0Y2IsIGFzb2MsIGxhc3RfdHNu
LCAmYmlnZ2VzdF90c25fYWNrZWQsCi0JCQkmYmlnZ2VzdF90c25fbmV3bHlfYWNrZWQsICZ0aGlz
X3NhY2tfbG93ZXN0X25ld2FjaywKLQkJCW51bV9zZWcsIG51bV9ucl9zZWcsICZydG9fb2spKSB7
Ci0JCQl3YWtlX2hpbSsrOwotCQl9Ci0JCS8qCi0JCSAqIHZhbGlkYXRlIHRoZSBiaWdnZXN0X3Rz
bl9hY2tlZCBpbiB0aGUgZ2FwIGFja3MgaWYKLQkJICogc3RyaWN0IGFkaGVyZW5jZSBpcyB3YW50
ZWQuCi0JCSAqLwotCQlpZiAoU0NUUF9UU05fR0UoYmlnZ2VzdF90c25fYWNrZWQsIHNlbmRfcykp
IHsKLQkJCS8qCi0JCQkgKiBwZWVyIGlzIGVpdGhlciBjb25mdXNlZCBvciB3ZSBhcmUgdW5kZXIK
LQkJCSAqIGF0dGFjay4gV2UgbXVzdCBhYm9ydC4KLQkJCSAqLwotCQkJU0NUUF9QUklOVEYoIkhv
cGVsZXNzIHBlZXIhIGJpZ2dlc3RfdHNuX2Fja2VkOiV4IGxhcmdlc3Qgc2VxOiV4XG4iLAotCQkJ
CSAgICBiaWdnZXN0X3Rzbl9hY2tlZCwgc2VuZF9zKTsKLQkJCWdvdG8gaG9wZWxlc3NfcGVlcjsK
LQkJfQotCX0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K
LQkvKiBjYW5jZWwgQUxMIFQzLXNlbmQgdGltZXIgaWYgYWNjdW0gbW92ZWQgKi8KLQkvKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlpZiAoYXNvYy0+c2N0cF9j
bXRfb25fb2ZmID4gMCkgewotCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgewotCQkJaWYgKG5ldC0+bmV3X3BzZXVkb19jdW1hY2spCi0JCQkJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAotCQkJCSAgICAgICAgICAg
ICAgICBzdGNiLCBuZXQsCi0JCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFU
QSArIFNDVFBfTE9DXzI3KTsKLQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKGFjY3VtX21vdmVkKSB7
Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCXNj
dHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKLQkJCQkg
ICAgICAgICAgICAgICAgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xP
Q18yOCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwotCS8qIGRyb3AgdGhlIGFja2VkIGNodW5rcyBmcm9tIHRoZSBzZW50cXVl
dWUgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0J
YXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBjdW1fYWNrOwotCi0JVEFJTFFfRk9SRUFDSF9TQUZFKHRw
MSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7Ci0JCWlmIChTQ1RQX1RTTl9H
VCh0cDEtPnJlYy5kYXRhLnRzbiwgY3VtX2FjaykpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICh0
cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgewotCQkJaWYgKGFzb2MtPnN0cm1v
dXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7Ci0JCQkJYXNvYy0+
c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElO
VkFSSUFOVFMKLQkJCX0gZWxzZSB7Ci0JCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVz
IGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOwotI2VuZGlmCi0JCQl9Ci0JCX0KLQkJ
aWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09
IDApICYmCi0JCSAgICAoYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3RhdGUgPT0g
U0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykgJiYKLQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5z
dHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKLQkJCWFzb2MtPnRyaWdnZXJf
cmVzZXQgPSAxOwotCQl9Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwgdHAxLCBz
Y3RwX25leHQpOwotCQlpZiAoUFJfU0NUUF9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7Ci0JCQlpZiAo
YXNvYy0+cHJfc2N0cF9jbnQgIT0gMCkKLQkJCQlhc29jLT5wcl9zY3RwX2NudC0tOwotCQl9Ci0J
CWFzb2MtPnNlbnRfcXVldWVfY250LS07Ci0JCWlmICh0cDEtPmRhdGEpIHsKLQkJCS8qIHNhX2ln
bm9yZSBOT19OVUxMX0NISyAqLwotCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRw
MSwgMSk7Ci0JCQlzY3RwX21fZnJlZW0odHAxLT5kYXRhKTsKLQkJCXRwMS0+ZGF0YSA9IE5VTEw7
Ci0JCQlpZiAoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQX0JVRl9FTkFCTEVEKHRw
MS0+ZmxhZ3MpKSB7Ci0JCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0tOwotCQkJ
fQotCQl9Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQ
X1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tl
ZF9zZXEsCi0JCQkgICAgICAgICAgICAgIGN1bV9hY2ssCi0JCQkgICAgICAgICAgICAgIHRwMS0+
cmVjLmRhdGEudHNuLAotCQkJICAgICAgICAgICAgICAwLAotCQkJICAgICAgICAgICAgICAwLAot
CQkJICAgICAgICAgICAgICBTQ1RQX0xPR19GUkVFX1NFTlQpOwotCQl9Ci0JCXNjdHBfZnJlZV9h
X2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJd2FrZV9oaW0rKzsKLQl9
Ci0JaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJiAoYXNvYy0+dG90YWxfZmxp
Z2h0ID4gMCkpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCXBhbmljKCJXYXJuaW5nIGZsaWdodCBz
aXplIGlzIHBvc2l0aXZlIGFuZCBzaG91bGQgYmUgMCIpOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYo
Ildhcm5pbmcgZmxpZ2h0IHNpemUgaW5jb3JyZWN0IHNob3VsZCBiZSAwIGlzICVkXG4iLAotCQkg
ICAgICAgICAgICBhc29jLT50b3RhbF9mbGlnaHQpOwotI2VuZGlmCi0JCWFzb2MtPnRvdGFsX2Zs
aWdodCA9IDA7Ci0JfQotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmIChzdGNiLT5z
Y3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJ
dWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0JCQlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOwotCi0JCQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKLQkJCXNiX2ZyZWVf
bm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVfYnl0
ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBhbW91
bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9sZCAq
LwotCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgotCQkJICAgKCgoaW5wLT5zZW5kX3NiX3Ro
cmVzaG9sZCA+IDApICYmIChzYl9mcmVlX25vdyA+PSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkKSkg
fHwKLQkJCSAgICAoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkpIHsKLQkJCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCQlpbnAtPnNlbmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIHNiX2ZyZWVfbm93
KTsKLQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCX0KLQkJfQotCX0gZWxzZSBpZiAoKHdha2VfaGltKSAm
JiAoc3RjYi0+c2N0cF9zb2NrZXQpKSB7Ci0jZWxzZQotCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NI
SyAqLwotCWlmICgod2FrZV9oaW0pICYmIChzdGNiLT5zY3RwX3NvY2tldCkpIHsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQot
CQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQotI2VuZGlmCi0JCVNPQ0tCVUZfTE9DSygmc3RjYi0+c2N0
cF9zb2NrZXQtPnNvX3NuZCk7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfd2FrZXVwX2xvZyhz
dGNiLCB3YWtlX2hpbSwgU0NUUF9XQUtFU05EX0ZST01fU0FDSyk7Ci0JCX0KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJc28gPSBTQ1RQ
X0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNv
LCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVf
Q0xPU0VEX1NPQ0tFVCkgewotCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5s
b2NrZWQgKi8KLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0K
LSNlbmRpZgotCQlzY3RwX3Nvd3dha2V1cF9sb2NrZWQoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0
cF9zb2NrZXQpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQotCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi0JfSBlbHNl
IHsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfV0FL
RV9MT0dHSU5HX0VOQUJMRSkgewotCQkJc2N0cF93YWtldXBfbG9nKHN0Y2IsIHdha2VfaGltLCBT
Q1RQX05PV0FLRV9GUk9NX1NBQ0spOwotCQl9Ci0JfQotCi0JaWYgKGFzb2MtPmZhc3RfcmV0cmFu
X2xvc3NfcmVjb3ZlcnkgJiYgYWNjdW1fbW92ZWQpIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGFzb2Mt
Pmxhc3RfYWNrZWRfc2VxLCBhc29jLT5mYXN0X3JlY292ZXJ5X3RzbikpIHsKLQkJCS8qIFNldHVw
IHNvIHdlIHdpbGwgZXhpdCBSRkMyNTgyIGZhc3QgcmVjb3ZlcnkgKi8KLQkJCXdpbGxfZXhpdF9m
YXN0X3JlY292ZXJ5ID0gMTsKLQkJfQotCX0KLQkvKgotCSAqIENoZWNrIGZvciByZXZva2VkIGZy
YWdtZW50czoKLQkgKgotCSAqIGlmIFByZXZpb3VzIHNhY2sgLSBIYWQgbm8gZnJhZ3MgdGhlbiB3
ZSBjYW4ndCBoYXZlIGFueSByZXZva2VkIGlmCi0JICogUHJldmlvdXMgc2FjayAtIEhhZCBmcmFn
J3MgdGhlbiAtIElmIHdlIG5vdyBoYXZlIGZyYWdzIGFrYQotCSAqIG51bV9zZWcgPiAwIGNhbGwg
c2N0cF9jaGVja19mb3JfcmV2b2tlZCgpIHRvIHRlbGwgaWYgcGVlciByZXZva2VkCi0JICogc29t
ZSBvZiB0aGVtLiBlbHNlIC0gVGhlIHBlZXIgcmV2b2tlZCBhbGwgQUNLRUQgZnJhZ21lbnRzLCBz
aW5jZQotCSAqIHdlIGhhZCBzb21lIGJlZm9yZSBhbmQgbm93IHdlIGhhdmUgTk9ORS4KLQkgKi8K
LQotCWlmIChudW1fc2VnKSB7Ci0JCXNjdHBfY2hlY2tfZm9yX3Jldm9rZWQoc3RjYiwgYXNvYywg
Y3VtX2FjaywgYmlnZ2VzdF90c25fYWNrZWQpOwotCQlhc29jLT5zYXdfc2Fja193aXRoX2ZyYWdz
ID0gMTsKLQl9IGVsc2UgaWYgKGFzb2MtPnNhd19zYWNrX3dpdGhfZnJhZ3MpIHsKLQkJaW50IGNu
dF9yZXZva2VkID0gMDsKLQotCQkvKiBQZWVyIHJldm9rZWQgYWxsIGRnJ3MgbWFya2VkIG9yIGFj
a2VkICovCi0JCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0
KSB7Ci0JCQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCQl0cDEt
PnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNj
dHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SRVZPS0UsCi0JCQkJCSAgICAgICAgICAg
ICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkgICAgICAgICAgICAgICB0cDEtPmJv
b2tfc2l6ZSwKLQkJCQkJICAgICAgICAgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53
aG9UbywKLQkJCQkJICAgICAgICAgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOwotCQkJCX0KLQkJ
CQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKHRwMSk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRf
aW5jcmVhc2Uoc3RjYiwgdHAxKTsKLQkJCQl0cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2Vk
ID0gMTsKLQkJCQkvKgotCQkJCSAqIFRvIGVuc3VyZSB0aGF0IHRoaXMgaW5jcmVhc2UgaW4KLQkJ
CQkgKiBmbGlnaHRzaXplLCB3aGljaCBpcyBhcnRpZmljaWFsLAotCQkJCSAqIGRvZXMgbm90IHRo
cm90dGxlIHRoZSBzZW5kZXIsIHdlCi0JCQkJICogYWxzbyBpbmNyZWFzZSB0aGUgY3duZAotCQkJ
CSAqIGFydGlmaWNpYWxseS4KLQkJCQkgKi8KLQkJCQl0cDEtPndob1RvLT5jd25kICs9IHRwMS0+
Ym9va19zaXplOwotCQkJCWNudF9yZXZva2VkKys7Ci0JCQl9Ci0JCX0KLQkJaWYgKGNudF9yZXZv
a2VkKSB7Ci0JCQlyZW5lZ2VkX2FsbCA9IDE7Ci0JCX0KLQkJYXNvYy0+c2F3X3NhY2tfd2l0aF9m
cmFncyA9IDA7Ci0JfQotCWlmIChudW1fbnJfc2VnID4gMCkKLQkJYXNvYy0+c2F3X3NhY2tfd2l0
aF9ucl9mcmFncyA9IDE7Ci0JZWxzZQotCQlhc29jLT5zYXdfc2Fja193aXRoX25yX2ZyYWdzID0g
MDsKLQotCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBD
QyBtb2R1bGUgKi8KLQlpZiAoZWNuZV9zZWVuID09IDApIHsKLQkJVEFJTFFfRk9SRUFDSChuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWlmIChuZXQtPm5ldF9hY2syID4gMCkgewot
CQkJCS8qCi0JCQkJICogS2FybidzIHJ1bGUgYXBwbGllcyB0byBjbGVhcmluZyBlcnJvciBjb3Vu
dCwgdGhpcwotCQkJCSAqIGlzIG9wdGlvbmFsLgotCQkJCSAqLwotCQkJCW5ldC0+ZXJyb3JfY291
bnQgPSAwOwotCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUp
KSB7Ci0JCQkJCS8qIGFkZHIgY2FtZSBnb29kICovCi0JCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBT
Q1RQX0FERFJfUkVBQ0hBQkxFOwotCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5U
RVJGQUNFX1VQLCBzdGNiLAotCQkJCQkgICAgICAgICAgICAgICAgMCwgKHZvaWQgKiluZXQsIFND
VFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJfQotCi0JCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb24pIHsKLQkJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0J
CQkJCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5hdGUsIHByaW1hcnkgaXMgZ29vZCAqLwotCQkJCQkJ
c2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKLQkJCQkJCXN0Y2It
PmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKLQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQ
X0FERFJfUEY7Ci0JCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
LAotCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjkpOwotCQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG5ldCk7Ci0JCQkJCWFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRl
X2V4aXRfcGYoc3RjYiwgbmV0KTsKLQkJCQkJLyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCi0JCQkJ
CW5ldC0+bmV0X2FjayA9IDA7Ci0JCQkJfQotCQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGlt
ZXJzICovCi0JCQkJbmV0LT5SVE8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsg
bmV0LT5sYXN0c3Y7Ci0JCQkJaWYgKG5ldC0+UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKLQkJ
CQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKLQkJCQl9Ci0JCQkJaWYgKG5ldC0+UlRP
ID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKLQkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0
bzsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfc2FjayhzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxf
ZXhpdF9mYXN0X3JlY292ZXJ5KTsKLQl9Ci0KLQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRf
cXVldWUpKSB7Ci0JCS8qIG5vdGhpbmcgbGVmdCBpbi1mbGlnaHQgKi8KLQkJVEFJTFFfRk9SRUFD
SChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCS8qIHN0b3AgYWxsIHRpbWVycyAq
LwotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2Vw
LAotCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKLQkJCSAgICAgICAgICAgICAgICBTQ1RQ
X0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zMCk7Ci0JCQluZXQtPmZsaWdodF9zaXplID0g
MDsKLQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Ci0JCX0KLQkJYXNvYy0+dG90YWxf
ZmxpZ2h0ID0gMDsKLQkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKLQl9Ci0KLQkvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkvKiBOb3cgd2hhdCBhYm91dCBzaHV0
ZG93biBpc3N1ZXMgKi8KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlp
ZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmIFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW50X3F1ZXVlKSkgewotCQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZHF1ZXVlLi4gY29uc2lkZXIg
ZG9uZSAqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9MT0dfUldORF9FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJf
UldORF9WSUFfU0FDSywKLQkJCSAgICAgICAgICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAs
IDAsIGFfcnduZCk7Ci0JCX0KLQkJYXNvYy0+cGVlcnNfcnduZCA9IGFfcnduZDsKLQkJaWYgKGFz
b2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikg
ewotCQkJLyogU1dTIHNlbmRlciBzaWRlIGVuZ2FnZXMgKi8KLQkJCWFzb2MtPnBlZXJzX3J3bmQg
PSAwOwotCQl9Ci0JCS8qIGNsZWFuIHVwICovCi0JCWlmICgoYXNvYy0+c3RyZWFtX3F1ZXVlX2Nu
dCA9PSAxKSAmJgotCQkgICAgKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVO
RElORykgfHwKLQkJICAgICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJ
VkVEKSkgJiYKLQkJICAgICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNn
c19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkpIHsKLQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RB
VEVfUEFSVElBTF9NU0dfTEVGVDsKLQkJfQotCQlpZiAoKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfU0hVVERPV05fUEVORElORykgfHwKLQkJICAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSAmJgotCQkgICAgKGFzb2MtPnN0cmVhbV9x
dWV1ZV9jbnQgPT0gMSkgJiYKLQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElB
TF9NU0dfTEVGVCkpIHsKLQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQkJCSphYm9ydF9ub3cg
PSAxOwotCQkJLyogWFhYICovCi0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7Ci0JCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fi
b3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNDsKLQkJCXNjdHBf
YWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpICYmCi0JCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2Nu
dCA9PSAwKSkgewotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQotCQkJaWYgKChTQ1RQX0dF
VF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8Ci0JCQkgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJU0NUUF9T
VEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQkJfQotCQkJU0NUUF9TRVRfU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCVNDVFBfQ0xFQVJfU1VCU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCXNjdHBfc3RvcF90aW1l
cnNfZm9yX3NodXRkb3duKHN0Y2IpOwotCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewotCQkJCW5l
dHAgPSBhc29jLT5hbHRlcm5hdGU7Ci0JCQl9IGVsc2UgewotCQkJCW5ldHAgPSBhc29jLT5wcmlt
YXJ5X2Rlc3RpbmF0aW9uOwotCQkJfQotCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldHAp
OwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCi0JCQkJCSBz
dGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQsCi0JCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsK
LQkJCXJldHVybjsKLQkJfSBlbHNlIGlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9T
VEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKLQkJCSAgIChhc29jLT5zdHJlYW1fcXVldWVfY250
ID09IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwotCi0JCQlTQ1RQX1NUQVRfREVD
Ul9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQ
X1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKLQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywg
U0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3No
dXRkb3duKHN0Y2IpOwotCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewotCQkJCW5ldHAgPSBhc29j
LT5hbHRlcm5hdGU7Ci0JCQl9IGVsc2UgewotCQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uOwotCQkJfQotCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXRwKTsKLQkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLLAotCQkJICAgICAg
ICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCXJldHVybjsKLQkJfQot
CX0KLQkvKgotCSAqIE5vdyBoZXJlIHdlIGFyZSBnb2luZyB0byByZWN5Y2xlIG5ldF9hY2sgZm9y
IGEgZGlmZmVyZW50IHVzZS4uLgotCSAqIEhFQURTIFVQLgotCSAqLwotCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0JCW5ldC0+bmV0X2FjayA9IDA7Ci0JfQot
Ci0JLyoKLQkgKiBDTVQgREFDIGFsZ29yaXRobTogSWYgU0FDSyBEQUMgZmxhZyB3YXMgMCwgdGhl
biBubyBleHRyYSBtYXJraW5nCi0JICogdG8gYmUgZG9uZS4gU2V0dGluZyB0aGlzX3NhY2tfbG93
ZXN0X25ld2FjayB0byB0aGUgY3VtX2FjayB3aWxsCi0JICogYXV0b21hdGljYWxseSBlbnN1cmUg
dGhhdC4KLQkgKi8KLQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JICAgIFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNlX2RhYykgJiYKLQkgICAgKGNtdF9kYWNfZmxhZyA9
PSAwKSkgewotCQl0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9IGN1bV9hY2s7Ci0JfQotCWlmICgo
bnVtX3NlZyA+IDApIHx8IChudW1fbnJfc2VnID4gMCkpIHsKLQkJc2N0cF9zdHJpa2VfZ2FwX2Fj
a19jaHVua3Moc3RjYiwgYXNvYywgYmlnZ2VzdF90c25fYWNrZWQsCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLCB0aGlzX3NhY2tfbG93ZXN0X25l
d2FjaywgYWNjdW1fbW92ZWQpOwotCX0KLQkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29u
dHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9kdWxlICovCi0JYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RjYiwgYXNvYyk7Ci0KLQkvKiBOb3cgYXJlIHdlIGV4aXRp
bmcgbG9zcyByZWNvdmVyeSA/ICovCi0JaWYgKHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5KSB7Ci0J
CS8qIE9rLCB3ZSBtdXN0IGV4aXQgZmFzdCByZWNvdmVyeSAqLwotCQlhc29jLT5mYXN0X3JldHJh
bl9sb3NzX3JlY292ZXJ5ID0gMDsKLQl9Ci0JaWYgKChhc29jLT5zYXRfdDNfbG9zc19yZWNvdmVy
eSkgJiYKLQkgICAgU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGFzb2MtPnNhdF90
M19yZWNvdmVyeV90c24pKSB7Ci0JCS8qIGVuZCBzYXRlbGxpdGUgdDMgbG9zcyByZWNvdmVyeSAq
LwotCQlhc29jLT5zYXRfdDNfbG9zc19yZWNvdmVyeSA9IDA7Ci0JfQotCS8qCi0JICogQ01UIEZh
c3QgcmVjb3ZlcnkKLQkgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBf
bmV4dCkgewotCQlpZiAobmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSkgewotCQkJLyogT2ss
IHdlIG11c3QgZXhpdCBmYXN0IHJlY292ZXJ5ICovCi0JCQluZXQtPmZhc3RfcmV0cmFuX2xvc3Nf
cmVjb3ZlcnkgPSAwOwotCQl9Ci0JfQotCi0JLyogQWRqdXN0IGFuZCBzZXQgdGhlIG5ldyByd25k
IHZhbHVlICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfTE9HX1JXTkRfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJf
UldORF9WSUFfU0FDSywKLQkJICAgICAgICAgICAgICAgICAgYXNvYy0+cGVlcnNfcnduZCwgYXNv
Yy0+dG90YWxfZmxpZ2h0LCAoYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ICogU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKSwgYV9yd25kKTsKLQl9Ci0JYXNvYy0+cGVlcnNfcndu
ZCA9IHNjdHBfc2JzcGFjZV9zdWIoYV9yd25kLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh1aW50MzJfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9m
bGlnaHRfY291bnQgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7Ci0J
aWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3Nl
bmRlcikgewotCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQlhc29jLT5wZWVyc19y
d25kID0gMDsKLQl9Ci0JaWYgKGFzb2MtPnBlZXJzX3J3bmQgPiBvbGRfcnduZCkgewotCQl3aW5f
cHJvYmVfcmVjb3ZlcnkgPSAxOwotCX0KLQotCS8qCi0JICogTm93IHdlIG11c3Qgc2V0dXAgc28g
d2UgaGF2ZSBhIHRpbWVyIHVwIGZvciBhbnlvbmUgd2l0aAotCSAqIG91dHN0YW5kaW5nIGRhdGEu
Ci0JICovCi0JZG9uZV9vbmNlID0gMDsKLWFnYWluOgotCWogPSAwOwotCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7Ci0JCWlmICh3aW5fcHJvYmVfcmVjb3Zlcnkg
JiYgKG5ldC0+d2luZG93X3Byb2JlKSkgewotCQkJd2luX3Byb2JlX3JlY292ZXJlZCA9IDE7Ci0J
CQkvKi0KLQkJCSAqIEZpbmQgZmlyc3QgY2h1bmsgdGhhdCB3YXMgdXNlZCB3aXRoCi0JCQkgKiB3
aW5kb3cgcHJvYmUgYW5kIGNsZWFyIHRoZSBldmVudC4gUHV0Ci0JCQkgKiBpdCBiYWNrIGludG8g
dGhlIHNlbmQgcXVldWUgYXMgaWYgaGFzCi0JCQkgKiBub3QgYmVlbiBzZW50LgotCQkJICovCi0J
CQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJ
CWlmICh0cDEtPndpbmRvd19wcm9iZSkgewotCQkJCQlzY3RwX3dpbmRvd19wcm9iZV9yZWNvdmVy
eShzdGNiLCBhc29jLCB0cDEpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYg
KG5ldC0+ZmxpZ2h0X3NpemUpIHsKLQkJCWorKzsKLQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5E
SU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TRU5ELAotCQkJCSAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgbmV0KTsKLQkJCX0KLQkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgewotCQkJCW5ldC0+d2lu
ZG93X3Byb2JlID0gMDsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChuZXQtPndpbmRvd19wcm9i
ZSkgewotCQkJCS8qIEluIHdpbmRvdyBwcm9iZXMgd2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBz
dGlsbCBydW5uaW5nIHRoZXJlICovCi0JCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5l
dC0+cnh0X3RpbWVyLnRpbWVyKSkgewotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJf
VFlQRV9TRU5ELAotCQkJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5l
dCk7Ci0KLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5y
eHRfdGltZXIudGltZXIpKSB7Ci0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9T
RU5ELCBzdGNiLT5zY3RwX2VwLAotCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCi0JCQkJ
ICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzMyKTsKLQkJ
CX0KLQkJfQotCX0KLQlpZiAoKGogPT0gMCkgJiYKLQkgICAgKCFUQUlMUV9FTVBUWSgmYXNvYy0+
c2VudF9xdWV1ZSkpICYmCi0JICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkg
JiYKLQkgICAgKHdpbl9wcm9iZV9yZWNvdmVyZWQgPT0gMCkgJiYKLQkgICAgKGRvbmVfb25jZSA9
PSAwKSkgewotCQkvKiBodWgsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gdW5sZXNzIGFsbCBwYWNr
ZXRzCi0JCSAqIGFyZSBQUi1TQ1RQIGFuZCBtYXJrZWQgdG8gc2tpcCBvZiBjb3Vyc2UuCi0JCSAq
LwotCQlpZiAoc2N0cF9mc19hdWRpdChhc29jKSkgewotCQkJVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQluZXQtPmZsaWdodF9zaXplID0gMDsKLQkJCX0K
LQkJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7Ci0JCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQg
PSAwOwotCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKLQkJCVRBSUxRX0ZPUkVB
Q0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKHRwMS0+c2Vu
dCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVh
c2UodHAxKTsKLQkJCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKLQkJ
CQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCQlz
Y3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJfQotCQkJ
fQotCQl9Ci0JCWRvbmVfb25jZSA9IDE7Ci0JCWdvdG8gYWdhaW47Ci0JfQotCS8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogSGVyZSB3ZSBwZXJmb3Jt
IFBSLVNDVFAgcHJvY2VkdXJlcyAgICAgICAgKi8KLQkvKiAoc2VjdGlvbiA0LjIpICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCi0JLyogQzEuIHVwZGF0ZSBhZHZhbmNlZFBlZXJBY2tQb2ludCAqLwot
CWlmIChTQ1RQX1RTTl9HVChjdW1fYWNrLCBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCkp
IHsKLQkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBjdW1fYWNrOwotCX0KLQkvKiBD
Mi4gdHJ5IHRvIGZ1cnRoZXIgbW92ZSBhZHZhbmNlZFBlZXJBY2tQb2ludCBhaGVhZCAqLwotCWlm
ICgoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCkgJiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsK
LQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsKLQkJdWludDMyX3Qgb2xkX2Fkdl9wZWVy
X2Fja19wb2ludDsKLQotCQlvbGRfYWR2X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRf
cGVlcl9hY2tfcG9pbnQ7Ci0JCWxjaGsgPSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50
KHN0Y2IsIGFzb2MpOwotCQkvKiBDMy4gU2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04g
Ki8KLQkJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1f
YWNrKSkgewotCQkJLyoKLQkJCSAqIElTU1VFIHdpdGggRUNOLCBzZWUgRldELVRTTiBwcm9jZXNz
aW5nLgotCQkJICovCi0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKLQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9U
U05fQ0hFQ0ssCi0JCQkJICAgICAgICAgICAgICAgMHhlZSwgY3VtX2FjaywgYXNvYy0+YWR2YW5j
ZWRfcGVlcl9hY2tfcG9pbnQsCi0JCQkJICAgICAgICAgICAgICAgb2xkX2Fkdl9wZWVyX2Fja19w
b2ludCk7Ci0JCQl9Ci0JCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tf
cG9pbnQsIG9sZF9hZHZfcGVlcl9hY2tfcG9pbnQpKSB7Ci0JCQkJc2VuZF9mb3J3YXJkX3Rzbihz
dGNiLCBhc29jKTsKLQkJCX0gZWxzZSBpZiAobGNoaykgewotCQkJCS8qIHRyeSB0byBGUiBmd2Qt
dHNuJ3MgdGhhdCBnZXQgbG9zdCB0b28gKi8KLQkJCQlpZiAobGNoay0+cmVjLmRhdGEuZndkX3Rz
bl9jbnQgPj0gMykgewotCQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOwotCQkJCX0K
LQkJCX0KLQkJfQotCQlpZiAobGNoaykgewotCQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8K
LQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsCi0JCQkgICAgICAgICAg
ICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGstPndob1RvKTsKLQkJfQotCX0KLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9H
R0lOR19FTkFCTEUpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9TQUNLX1JXTkRfVVBEQVRFLAot
CQkgICAgICAgICAgICAgICBhX3J3bmQsCi0JCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MucGVl
cnNfcnduZCwKLQkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsCi0JCSAg
ICAgICAgICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCX0KLX0K
LQotdm9pZAotc2N0cF91cGRhdGVfYWNrZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9zaHV0ZG93bl9jaHVuayAqY3AsIGludCAqYWJvcnRfZmxhZykKLXsKLQkvKiBDb3B5IGN1
bS1hY2sgKi8KLQl1aW50MzJfdCBjdW1fYWNrLCBhX3J3bmQ7Ci0KLQljdW1fYWNrID0gbnRvaGwo
Y3AtPmN1bXVsYXRpdmVfdHNuX2Fjayk7Ci0JLyogQXJyYW5nZSBzbyBhX3J3bmQgZG9lcyBOT1Qg
Y2hhbmdlICovCi0JYV9yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kICsgc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQ7Ci0KLQkvKiBOb3cgY2FsbCB0aGUgZXhwcmVzcyBzYWNrIGhhbmRsaW5nICov
Ci0Jc2N0cF9leHByZXNzX2hhbmRsZV9zYWNrKHN0Y2IsIGN1bV9hY2ssIGFfcnduZCwgYWJvcnRf
ZmxhZywgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2tpY2tfcHJzY3RwX3Jlb3JkZXJfcXVl
dWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9p
biAqc3RybWluKQotewotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNv
bnRyb2w7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0JdWludDMyX3QgbWlkOwot
CWludCBuZWVkX3JlYXNtX2NoZWNrID0gMDsKLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQltaWQg
PSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZDsKLQkvKgotCSAqIEZpcnN0IGRlbGl2ZXIgYW55
dGhpbmcgcHJpb3IgdG8gYW5kIGluY2x1ZGluZyB0aGUgc3RyZWFtIG5vIHRoYXQKLQkgKiBjYW1l
IGluLgotCSAqLwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmc3RybWluLT5pbnF1ZXVl
LCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKLQkJaWYgKFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRh
X3N1cHBvcnRlZCwgbWlkLCBjb250cm9sLT5taWQpKSB7Ci0JCQkvKiB0aGlzIGlzIGRlbGl2ZXJh
YmxlIG5vdyAqLwotCQkJaWYgKCgoY29udHJvbC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RB
VEFfTk9UX0ZSQUcpICA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKLQkJCQlpZiAoY29udHJvbC0+
b25fc3RybV9xKSB7Ci0JCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRF
UkVEKSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm1pbi0+aW5xdWV1ZSwgY29udHJvbCwgbmV4
dF9pbnN0cm0pOwotCQkJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09O
X1VOT1JERVJFRCkgewotCQkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtaW4tPnVub19pbnF1ZXVlLCBj
b250cm9sLCBuZXh0X2luc3RybSk7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQl9IGVsc2Ugewot
CQkJCQkJcGFuaWMoInN0cm1pbjogJXAgY3RsOiAlcCB1bmtub3duICVkIiwKLQkJCQkJCSAgICAg
IHN0cm1pbiwgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKLSNlbmRpZgotCQkJCQl9Ci0J
CQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7Ci0JCQkJfQotCQkJCS8qIHN1YnRyYWN0IHBlbmRp
bmcgb24gc3RyZWFtcyAqLwotCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNv
bnRyb2wtPmxlbmd0aCkgewotCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRy
b2wtPmxlbmd0aDsKLQkJCQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJcGFuaWMo
InNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUi
LCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOwotI2Vsc2UKLQkJ
CQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJc2N0
cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOwotCQkJCS8qIGRlbGl2ZXIg
aXQgdG8gYXQgbGVhc3QgdGhlIGRlbGl2ZXJ5LXEgKi8KLQkJCQlpZiAoc3RjYi0+c2N0cF9zb2Nr
ZXQpIHsKLQkJCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywgY29udHJvbC0+c2luZm9f
dHNuKTsKLQkJCQkJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJ
CQkgIGNvbnRyb2wsCi0JCQkJCQkJICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwKLQkJCQkJ
CQkgIDEsIFNDVFBfUkVBRF9MT0NLX0hFTEQsCi0JCQkJCQkJICBTQ1RQX1NPX05PVF9MT0NLRUQp
OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogSXRzIGEgZnJhZ21lbnRlZCBtZXNzYWdlICov
Ci0JCQkJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgewotCQkJCQkvKiBNYWtlIGl0IHNv
IHRoaXMgaXMgbmV4dCB0byBkZWxpdmVyLCB3ZSByZXN0b3JlIGxhdGVyICovCi0JCQkJCXN0cm1p
bi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlkIC0gMTsKLQkJCQkJbmVlZF9yZWFz
bV9jaGVjayA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8q
IG5vIG1vcmUgZGVsaXZlcnkgbm93LiAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKG5lZWRf
cmVhc21fY2hlY2spIHsKLQkJaW50IHJldDsKLQkJcmV0ID0gc2N0cF9kZWxpdmVyX3JlYXNtX2No
ZWNrKHN0Y2IsICZzdGNiLT5hc29jLCBzdHJtaW4sIFNDVFBfUkVBRF9MT0NLX0hFTEQpOwotCQlp
ZiAoU0NUUF9NSURfR1QoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQsIHN0cm1pbi0+bGFzdF9t
aWRfZGVsaXZlcmVkKSkgewotCQkJLyogUmVzdG9yZSB0aGUgbmV4dCB0byBkZWxpdmVyIHVubGVz
cyB3ZSBhcmUgYWhlYWQgKi8KLQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlkOwot
CQl9Ci0JCWlmIChyZXQgPT0gMCkgewotCQkJLyogTGVmdCB0aGUgZnJvbnQgUGFydGlhbCBvbmUg
b24gKi8KLQkJCXJldHVybjsKLQkJfQotCQluZWVkX3JlYXNtX2NoZWNrID0gMDsKLQl9Ci0JLyoK
LQkgKiBub3cgd2UgbXVzdCBkZWxpdmVyIHRoaW5ncyBpbiBxdWV1ZSB0aGUgbm9ybWFsIHdheSAg
aWYgYW55IGFyZQotCSAqIG5vdyByZWFkeS4KLQkgKi8KLQltaWQgPSBzdHJtaW4tPmxhc3RfbWlk
X2RlbGl2ZXJlZCArIDE7Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZzdHJtaW4tPmlu
cXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgewotCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+
aWRhdGFfc3VwcG9ydGVkLCBtaWQsIGNvbnRyb2wtPm1pZCkpIHsKLQkJCWlmICgoKGNvbnRyb2wt
PnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9U
X0ZSQUcpIHsKLQkJCQkvKiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLwotCQkJCWlmIChjb250
cm9sLT5vbl9zdHJtX3EpIHsKLQkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09O
X09SREVSRUQpIHsKLQkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybWluLT5pbnF1ZXVlLCBjb250cm9s
LCBuZXh0X2luc3RybSk7Ci0JCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFND
VFBfT05fVU5PUkRFUkVEKSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm1pbi0+dW5vX2lucXVl
dWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCX0gZWxz
ZSB7Ci0JCQkJCQlwYW5pYygic3RybWluOiAlcCBjdGw6ICVwIHVua25vd24gJWQiLAotCQkJCQkJ
ICAgICAgc3RybWluLCBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOwotI2VuZGlmCi0JCQkJ
CX0KLQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKLQkJCQl9Ci0JCQkJLyogc3VidHJhY3Qg
cGVuZGluZyBvbiBzdHJlYW1zICovCi0JCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
Pj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0g
Y29udHJvbC0+bGVuZ3RoOwotCQkJCX0gZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQlw
YW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0
aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxz
ZQotCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID0gMDsKLSNlbmRpZgotCQkJCX0KLQkJ
CQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0JCQkJLyogZGVs
aXZlciBpdCB0byBhdCBsZWFzdCB0aGUgZGVsaXZlcnktcSAqLwotCQkJCXN0cm1pbi0+bGFzdF9t
aWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlkOwotCQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkg
ewotCQkJCQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24p
OwotCQkJCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSAg
Y29udHJvbCwKLQkJCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAotCQkJCQkJ
CSAgU0NUUF9SRUFEX0xPQ0tfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQotCQkJCX0KLQkJ
CQltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJ
CS8qIEl0cyBhIGZyYWdtZW50ZWQgbWVzc2FnZSAqLwotCQkJCWlmIChjb250cm9sLT5maXJzdF9m
cmFnX3NlZW4pIHsKLQkJCQkJLyogTWFrZSBpdCBzbyB0aGlzIGlzIG5leHQgdG8gZGVsaXZlciAq
LwotCQkJCQlzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCA9IGNvbnRyb2wtPm1pZCAtIDE7Ci0J
CQkJCW5lZWRfcmVhc21fY2hlY2sgPSAxOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0g
ZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAobmVlZF9yZWFzbV9jaGVjaykgewotCQko
dm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwgJnN0Y2ItPmFzb2MsIHN0cm1pbiwg
U0NUUF9SRUFEX0xPQ0tfSEVMRCk7Ci0JfQotfQotCi0KLQotc3RhdGljIHZvaWQKLXNjdHBfZmx1
c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQlzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywKLQl1aW50MTZfdCBzdHJlYW0sIHVpbnQzMl90IG1pZCwgaW50
IG9yZGVyZWQsIHVpbnQzMl90IGN1bXRzbikKLXsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCAqY29udHJvbDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm07Ci0Jc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrLCAqbmNoazsKLQlpbnQgY250X3JlbW92ZWQ9MDsKLQotCS8qCi0JICog
Rm9yIG5vdyBsYXJnZSBtZXNzYWdlcyBoZWxkIG9uIHRoZSBzdHJlYW0gcmVhc20gdGhhdCBhcmUK
LQkgKiBjb21wbGV0ZSB3aWxsIGJlIHRvc3NlZCB0b28uIFdlIGNvdWxkIGluIHRoZW9yeSBkbyBt
b3JlCi0JICogd29yayB0byBzcGluIHRocm91Z2ggYW5kIHN0b3AgYWZ0ZXIgZHVtcGluZyBvbmUg
bXNnIGFrYQotCSAqIHNlZWluZyB0aGUgc3RhcnQgb2YgYSBuZXcgbXNnIGF0IHRoZSBoZWFkLCBh
bmQgY2FsbCB0aGUKLQkgKiBkZWxpdmVyeSBmdW5jdGlvbi4uLiB0byBzZWUgaWYgaXQgY2FuIGJl
IGRlbGl2ZXJlZC4uLiBCdXQKLQkgKiBmb3Igbm93IHdlIGp1c3QgZHVtcCBldmVyeXRoaW5nIG9u
IHRoZSBxdWV1ZS4KLQkgKi8KLQlzdHJtID0gJmFzb2MtPnN0cm1pbltzdHJlYW1dOwotCWNvbnRy
b2wgPSBzY3RwX2ZpbmRfcmVhc21fZW50cnkoc3RybSwgbWlkLCBvcmRlcmVkLCBhc29jLT5pZGF0
YV9zdXBwb3J0ZWQpOwotCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogTm90IGZvdW5kICov
Ci0JCXJldHVybjsKLQl9Ci0JaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgIW9yZGVyZWQg
JiYgU0NUUF9UU05fR1QoY29udHJvbC0+ZnNuX2luY2x1ZGVkLCBjdW10c24pKSB7Ci0JCXJldHVy
bjsKLQl9Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25l
eHQsIG5jaGspIHsKLQkJLyogUHVyZ2UgaGFuZ2luZyBjaHVua3MgKi8KLQkJaWYgKCFhc29jLT5p
ZGF0YV9zdXBwb3J0ZWQgJiYgKG9yZGVyZWQgPT0gMCkpIHsKLQkJCWlmIChTQ1RQX1RTTl9HVChj
aGstPnJlYy5kYXRhLnRzbiwgY3VtdHNuKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWNu
dF9yZW1vdmVkKys7Ci0JCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9u
ZXh0KTsKLQkJaWYgKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0gY2hrLT5zZW5kX3NpemUp
IHsKLQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5zZW5kX3NpemU7Ci0JCX0g
ZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJcGFuaWMoInNpemVfb25fcmVhc21fcXVldWUg
PSAldSBzbWFsbGVyIHRoYW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9yZWFzbV9x
dWV1ZSwgY2hrLT5zZW5kX3NpemUpOwotI2Vsc2UKLQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVl
dWUgPSAwOwotI2VuZGlmCi0JCX0KLQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fcmVh
c21fcXVldWUpOwotCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRh
KTsKLQkJCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwg
Y2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCX0KLQlpZiAoIVRBSUxRX0VNUFRZKCZjb250cm9s
LT5yZWFzbSkpIHsKLQkJLyogVGhpcyBoYXMgdG8gYmUgb2xkIGRhdGEsIHVub3JkZXJlZCAqLwot
CQlpZiAoY29udHJvbC0+ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOwot
CQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9yZXNldF9hX2NvbnRyb2woY29u
dHJvbCwgc3RjYi0+c2N0cF9lcCwgY3VtdHNuKTsKLQkJY2hrID0gVEFJTFFfRklSU1QoJmNvbnRy
b2wtPnJlYXNtKTsKLQkJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJ
UlNUX0ZSQUcpIHsKLQkJCVRBSUxRX1JFTU9WRSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9u
ZXh0KTsKLQkJCXNjdHBfYWRkX2Noa190b19jb250cm9sKGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFz
b2MsCi0JCQkJCQljaGssIFNDVFBfUkVBRF9MT0NLX0hFTEQpOwotCQl9Ci0JCXNjdHBfZGVsaXZl
cl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCBzdHJtLCBTQ1RQX1JFQURfTE9DS19IRUxEKTsKLQkJ
cmV0dXJuOwotCX0KLQlpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fT1JERVJFRCkg
ewotCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsK
LQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0J
CQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKLQkJfSBlbHNl
IHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1
IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVh
bXMsIGNvbnRyb2wtPmxlbmd0aCk7Ci0jZWxzZQotCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyA9IDA7Ci0jZW5kaWYKLQkJfQotCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxf
c3RyZWFtcyk7Ci0JCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7Ci0JfSBlbHNlIGlmIChjb250cm9s
LT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKLQkJVEFJTFFfUkVNT1ZFKCZzdHJt
LT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQljb250cm9sLT5vbl9zdHJt
X3EgPSAwOwotI2lmZGVmIElOVkFSSUFOVFMKLQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1f
cSkgewotCQlwYW5pYygic3RybTogJXAgY3RsOiAlcCB1bmtub3duICVkIiwKLQkJICAgIHN0cm0s
IGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0jZW5kaWYKLQl9Ci0JY29udHJvbC0+b25f
c3RybV9xID0gMDsKLQlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKLQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOwotCQlpZiAoY29udHJvbC0+ZGF0YSkgewot
CQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOwotCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7
Ci0JCX0KLQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0JfQotfQotCi12b2lk
Ci1zY3RwX2hhbmRsZV9mb3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAqZndkLAotICAg
ICAgICAgICAgICAgICAgICAgICAgaW50ICphYm9ydF9mbGFnLCBzdHJ1Y3QgbWJ1ZiAqbSAsIGlu
dCBvZmZzZXQpCi17Ci0JLyogVGhlIHByLXNjdHAgZndkIHRzbiAqLwotCS8qCi0JICogaGVyZSB3
ZSB3aWxsIHBlcmZvcm0gYWxsIHRoZSBkYXRhIHJlY2VpdmVyIHNpZGUgc3RlcHMgZm9yCi0JICog
cHJvY2Vzc2luZyBGd2RUU04sIGFzIHJlcXVpcmVkIGluIGJ5IHByLXNjdHAgZHJhZnQ6Ci0JICoK
LQkgKiBBc3N1bWUgd2UgZ2V0IEZ3ZFRTTih4KToKLQkgKgotCSAqIDEpIHVwZGF0ZSBsb2NhbCBj
dW1UU04gdG8geCAKLQkgKiAyKSB0cnkgdG8gZnVydGhlciBhZHZhbmNlIGN1bVRTTiB0byB4ICsg
b3RoZXJzIHdlIGhhdmUgCi0JICogMykgZXhhbWluZSBhbmQgdXBkYXRlIHJlLW9yZGVyaW5nIHF1
ZXVlIG9uIHByLWluLXN0cmVhbXMgCi0JICogNCkgY2xlYW4gdXAgcmUtYXNzZW1ibHkgcXVldWUg
Ci0JICogNSkgU2VuZCBhIHNhY2sgdG8gcmVwb3J0IHdoZXJlIHdlIGFyZS4KLQkgKi8KLQlzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQl1aW50MzJfdCBuZXdfY3VtX3RzbiwgZ2FwOwot
CXVuc2lnbmVkIGludCBpLCBmd2Rfc3osIG1fc2l6ZTsKLQl1aW50MzJfdCBzdHJfc2VxOwotCXN0
cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAq
Y29udHJvbCwgKnN2OwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmICgoZndkX3N6ID0gbnRv
aHMoZndkLT5jaC5jaHVua19sZW5ndGgpKSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rz
bl9jaHVuaykpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsCi0JCQkiQmFkIHNpemUg
dG9vIHNtYWxsL2JpZyBmd2QtdHNuXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltX3NpemUgPSAoc3Rj
Yi0+YXNvYy5tYXBwaW5nX2FycmF5X3NpemUgPDwgMyk7Ci0JLyoqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMS4gSGVyZSB3
ZSB1cGRhdGUgbG9jYWwgY3VtVFNOIGFuZCBzaGlmdCB0aGUgYml0bWFwIGFycmF5ICovCi0JLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi0JbmV3X2N1bV90c24gPSBudG9obChmd2QtPm5ld19jdW11bGF0aXZlX3Rzbik7Ci0KLQlp
ZiAoU0NUUF9UU05fR0UoYXNvYy0+Y3VtdWxhdGl2ZV90c24sIG5ld19jdW1fdHNuKSkgewotCQkv
KiBBbHJlYWR5IGdvdCB0aGVyZSAuLi4gKi8KLQkJcmV0dXJuOwotCX0KLQkvKgotCSAqIG5vdyB3
ZSBrbm93IHRoZSBuZXcgVFNOIGlzIG1vcmUgYWR2YW5jZWQsIGxldCdzIGZpbmQgdGhlIGFjdHVh
bAotCSAqIGdhcAotCSAqLwotCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgbmV3X2N1bV90c24s
IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0g
bmV3X2N1bV90c247Ci0JaWYgKGdhcCA+PSBtX3NpemUpIHsKLQkJaWYgKChsb25nKWdhcCA+IHNj
dHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpKSB7Ci0J
CQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsK
LQotCQkJLyoKLQkJCSAqIG91dCBvZiByYW5nZSAob2Ygc2luZ2xlIGJ5dGUgY2h1bmtzIGluIHRo
ZSByd25kIEkKLQkJCSAqIGdpdmUgb3V0KS4gVGhpcyBtdXN0IGJlIGFuIGF0dGFja2VyLgotCQkJ
ICovCi0JCQkqYWJvcnRfZmxhZyA9IDE7Ci0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAot
CQkJICAgICAgICAgIk5ldyBjdW0gYWNrICU4Ljh4IHRvbyBoaWdoLCBoaWdoZXN0IFRTTiAlOC44
eCIsCi0JCQkgICAgICAgICBuZXdfY3VtX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21h
cCk7Ci0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xf
VklPTEFUSU9OLCBtc2cpOwotCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NU
UF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMzM7Ci0JCQlzY3RwX2Fib3J0X2FuX2Fzc29j
aWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
LQkJCXJldHVybjsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19md2R0c25fbWFwX292ZXIp
OwotCi0JCW1lbXNldChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2MubWFw
cGluZ19hcnJheV9zaXplKTsKLQkJYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IG5ld19j
dW1fdHNuICsgMTsKLQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IG5ld19jdW1fdHNu
OwotCi0JCW1lbXNldChzdGNiLT5hc29jLm5yX21hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2Mu
bWFwcGluZ19hcnJheV9zaXplKTsKLQkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9
IG5ld19jdW1fdHNuOwotCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgewotCQkJc2N0cF9sb2dfbWFwKDAsIDMsIGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7Ci0JCX0K
LQl9IGVsc2UgewotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkJZm9yIChpID0gMDsg
aSA8PSBnYXA7IGkrKykgewotCQkJaWYgKCFTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBp
bmdfYXJyYXksIGkpICYmCi0JCQkgICAgIVNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFw
cGluZ19hcnJheSwgaSkpIHsKLQkJCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBw
aW5nX2FycmF5LCBpKTsKLQkJCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9i
YXNlX3RzbiArIGksIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXApKSB7Ci0JCQkJCWFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2Vf
dHNuICsgaTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMi4gQ2xlYXIgdXAg
cmUtYXNzZW1ibHkgcXVldWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JLyoqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov
Ci0KLQkvKiBUaGlzIGlzIG5vdyBkb25lIGFzIHBhcnQgb2YgY2xlYXJpbmcgdXAgdGhlIHN0cmVh
bS9zZXEgKi8KLQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJdWludDE2X3Qg
c2lkOwotCQkvKiBGbHVzaCBhbGwgdGhlIHVuLW9yZGVyZWQgZGF0YSBiYXNlZCBvbiBjdW0tdHNu
ICovCi0JCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJZm9yIChzaWQgPSAw
IDsgc2lkIDwgYXNvYy0+c3RyZWFtaW5jbnQ7IHNpZCsrKSB7Ci0JCQlzY3RwX2ZsdXNoX3JlYXNz
bV9mb3Jfc3RyX3NlcShzdGNiLCBhc29jLCBzaWQsIDAsIDAsIG5ld19jdW1fdHNuKTsKLQkJfQot
CQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQl9Ci0JLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JLyogMy4gVXBk
YXRlIHRoZSBQUi1zdHJlYW0gcmUtb3JkZXJpbmcgcXVldWVzIGFuZCBmaXggICovCi0JLyogICAg
ZGVsaXZlcnkgaXNzdWVzIGFzIG5lZWRlZC4gICAgICAgICAgICAgICAgICAgICAgICovCi0JLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0J
ZndkX3N6IC09IHNpemVvZigqZndkKTsKLQlpZiAobSAmJiBmd2Rfc3opIHsKLQkJLyogTmV3IG1l
dGhvZC4gKi8KLQkJdW5zaWduZWQgaW50IG51bV9zdHI7Ci0JCXVpbnQzMl90IG1pZCwgY3VyX21p
ZDsKLQkJdWludDE2X3Qgc2lkOwotCQl1aW50MTZfdCBvcmRlcmVkLCBmbGFnczsKLQkJc3RydWN0
IHNjdHBfc3Ryc2VxICpzdHNlcSwgc3Ryc2VxYnVmOwotCQlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlk
ICpzdHNlcV9tLCBzdHJzZXFidWZfbTsKLQkJb2Zmc2V0ICs9IHNpemVvZigqZndkKTsKLQotCQlT
Q1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBw
b3J0ZWQpIHsKLQkJCW51bV9zdHIgPSBmd2Rfc3ogLyBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2Vx
X21pZCk7Ci0JCX0gZWxzZSB7Ci0JCQludW1fc3RyID0gZndkX3N6IC8gc2l6ZW9mKHN0cnVjdCBz
Y3RwX3N0cnNlcSk7Ci0JCX0KLQkJZm9yIChpID0gMDsgaSA8IG51bV9zdHI7IGkrKykgewotCQkJ
aWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgewotCQkJCXN0c2VxX20gPSAoc3RydWN0IHNjdHBf
c3Ryc2VxX21pZCAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJCQkJICAgIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKSwKLQkJCQkJCQkJCSAgICAodWludDhfdCAqKSZzdHJz
ZXFidWZfbSk7Ci0JCQkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsK
LQkJCQlpZiAoc3RzZXFfbSA9PSBOVUxMKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlzaWQg
PSBudG9ocyhzdHNlcV9tLT5zaWQpOwotCQkJCW1pZCA9IG50b2hsKHN0c2VxX20tPm1pZCk7Ci0J
CQkJZmxhZ3MgPSBudG9ocyhzdHNlcV9tLT5mbGFncyk7Ci0JCQkJaWYgKGZsYWdzICYgUFJfU0NU
UF9VTk9SREVSRURfRkxBRykgewotCQkJCQlvcmRlcmVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJ
CQlvcmRlcmVkID0gMTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCXN0c2VxID0gKHN0cnVjdCBz
Y3RwX3N0cnNlcSAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCQkJCQkJCQkJICAgIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpLAotCQkJCQkJCQkJICAgICh1aW50OF90ICopJnN0cnNlcWJ1
Zik7Ci0JCQkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpOwotCQkJCWlmIChz
dHNlcSA9PSBOVUxMKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlzaWQgPSBudG9ocyhzdHNl
cS0+c2lkKTsKLQkJCQltaWQgPSAodWludDMyX3QpbnRvaHMoc3RzZXEtPnNzbik7Ci0JCQkJb3Jk
ZXJlZCA9IDE7Ci0JCQl9Ci0JCQkvKiBDb252ZXJ0ICovCi0KLQkJCS8qIG5vdyBwcm9jZXNzICov
Ci0KLQkJCS8qCi0JCQkgKiBPayB3ZSBub3cgbG9vayBmb3IgdGhlIHN0cmVhbS9zZXEgb24gdGhl
IHJlYWQgcXVldWUKLQkJCSAqIHdoZXJlIGl0cyBub3QgYWxsIGRlbGl2ZXJlZC4gSWYgd2UgZmlu
ZCBpdCB3ZSB0cmFuc211dGUgdGhlCi0JCQkgKiByZWFkIGVudHJ5IGludG8gYSBQRElfQUJPUlRF
RC4KLQkJCSAqLwotCQkJaWYgKHNpZCA+PSBhc29jLT5zdHJlYW1pbmNudCkgewotCQkJCS8qIHNj
cmV3ZWQgdXAgc3RyZWFtcywgc3RvcCEgICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoKGFz
b2MtPnN0cl9vZl9wZGFwaSA9PSBzaWQpICYmCi0JCQkgICAgKGFzb2MtPnNzbl9vZl9wZGFwaSA9
PSBtaWQpKSB7Ci0JCQkJLyogSWYgdGhpcyBpcyB0aGUgb25lIHdlIHdlcmUgcGFydGlhbGx5IGRl
bGl2ZXJpbmcKLQkJCQkgKiBub3cgdGhlbiB3ZSBubyBsb25nZXIgYXJlLiBOb3RlIHRoaXMgd2ls
bCBjaGFuZ2UKLQkJCQkgKiB3aXRoIHRoZSByZWFzc2VtYmx5IHJlLXdyaXRlLgotCQkJCSAqLwot
CQkJCWFzb2MtPmZyYWdtZW50ZWRfZGVsaXZlcnlfaW5wcm9ncmVzcyA9IDA7Ci0JCQl9Ci0JCQlz
dHJtID0gJmFzb2MtPnN0cm1pbltzaWRdOwotCQkJZm9yIChjdXJfbWlkID0gc3RybS0+bGFzdF9t
aWRfZGVsaXZlcmVkOyBTQ1RQX01JRF9HRShhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgY3Vy
X21pZCk7IGN1cl9taWQrKykgewotCQkJCXNjdHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0
Y2IsIGFzb2MsIHNpZCwgY3VyX21pZCwgb3JkZXJlZCwgbmV3X2N1bV90c24pOwotCQkJfQotCQkJ
VEFJTFFfRk9SRUFDSChjb250cm9sLCAmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgbmV4dCkg
ewotCQkJCWlmICgoY29udHJvbC0+c2luZm9fc3RyZWFtID09IHNpZCkgJiYKLQkJCQkgICAgKFND
VFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSkgewot
CQkJCQlzdHJfc2VxID0gKHNpZCA8PCAxNikgfCAoMHgwMDAwZmZmZiAmIG1pZCk7Ci0JCQkJCWNv
bnRyb2wtPnBkYXBpX2Fib3J0ZWQgPSAxOwotCQkJCQlzdiA9IHN0Y2ItPmFzb2MuY29udHJvbF9w
ZGFwaTsKLQkJCQkJY29udHJvbC0+ZW5kX2FkZGVkID0gMTsKLQkJCQkJaWYgKGNvbnRyb2wtPm9u
X3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKLQkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+
aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOwotCQkJCQkJaWYgKGFzb2MtPnNpemVfb25f
YWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7Ci0JCQkJCQkJYXNvYy0+c2l6ZV9vbl9h
bGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7Ci0JCQkJCQl9IGVsc2UgewotI2lmZGVmIElO
VkFSSUFOVFMKLQkJCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIg
dGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRy
b2wtPmxlbmd0aCk7Ci0jZWxzZQotCQkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAw
OwotI2VuZGlmCi0JCQkJCQl9Ci0JCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9h
bGxfc3RyZWFtcyk7Ci0JCQkJCX0gZWxzZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBf
T05fVU5PUkRFUkVEKSB7Ci0JCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBj
b250cm9sLCBuZXh0X2luc3RybSk7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQl9IGVsc2UgaWYg
KGNvbnRyb2wtPm9uX3N0cm1fcSkgewotCQkJCQkJcGFuaWMoInN0cm06ICVwIGN0bDogJXAgdW5r
bm93biAlZCIsCi0JCQkJCQkgICAgICBzdHJtLCBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3Ep
OwotI2VuZGlmCi0JCQkJCX0KLQkJCQkJY29udHJvbC0+b25fc3RybV9xID0gMDsKLQkJCQkJc3Rj
Yi0+YXNvYy5jb250cm9sX3BkYXBpID0gY29udHJvbDsKLQkJCQkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTiwKLQkJCQkJICAgICAgICAgICAg
ICAgIHN0Y2IsCi0JCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJP
UlRFRCwKLQkJCQkJICAgICAgICAgICAgICAgICh2b2lkICopJnN0cl9zZXEsCi0JCQkJCQkJU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3Y7Ci0J
CQkJCWJyZWFrOwotCQkJCX0gZWxzZSBpZiAoKGNvbnRyb2wtPnNpbmZvX3N0cmVhbSA9PSBzaWQp
ICYmCi0JCQkJCSAgIFNDVFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+
bWlkLCBtaWQpKSB7Ci0JCQkJCS8qIFdlIGFyZSBwYXN0IG91ciB2aWN0aW0gU1NOICovCi0JCQkJ
CWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChTQ1RQX01JRF9HVChhc29jLT5pZGF0YV9zdXBw
b3J0ZWQsIG1pZCwgc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkKSkgewotCQkJCS8qIFVwZGF0ZSB0
aGUgc2VxdWVuY2UgbnVtYmVyICovCi0JCQkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlk
OwotCQkJfQotCQkJLyogbm93IGtpY2sgdGhlIHN0cmVhbSB0aGUgbmV3IHdheSAqLwotCQkJLypz
YV9pZ25vcmUgTk9fTlVMTF9DSEsqLwotCQkJc2N0cF9raWNrX3Byc2N0cF9yZW9yZGVyX3F1ZXVl
KHN0Y2IsIHN0cm0pOwotCQl9Ci0JCVNDVFBfSU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXAp
OwotCX0KLQkvKgotCSAqIE5vdyBzbGlkZSB0aGluZyBmb3J3YXJkLgotCSAqLwotCXNjdHBfc2xp
ZGVfbWFwcGluZ19hcnJheXMoc3RjYik7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfaW5kYXRhLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5kYXRhLmgKZGVsZXRlZCBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyNWRkNjI0ZjM3YjI2OWIzYzBjZjY4M2VjZGQ0OTVmZjg4
NjdhMmIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAg
QEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBS
YW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
Ci0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dO
RVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIk
RnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2luZGF0YS5oIDMxMDU5MCAyMDE2LTEyLTI2
IDExOjA2OjQxWiB0dWV4ZW4gJCIpOwotI2VuZGlmCi0KLSNpZm5kZWYgX05FVElORVRfU0NUUF9J
TkRBVEFfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9JTkRBVEFfSF8KLQotI2lmIGRlZmluZWQo
X0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCi1zdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqCi1zY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
LSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0gICAgdWludDMyX3QgdHNuLCB1aW50MzJfdCBw
cGlkLAotICAgIHVpbnQzMl90IGNvbnRleHQsIHVpbnQxNl90IHNpZCwKLSAgICB1aW50MzJfdCBt
aWQsIHVpbnQ4X3QgZmxhZ3MsCi0gICAgc3RydWN0IG1idWYgKmRtKTsKLQotCi0jZGVmaW5lIHNj
dHBfYnVpbGRfcmVhZHFfZW50cnlfbWFjKF9jdGwsIGluX2l0LCBjb250ZXh0LCBuZXQsIHRzbiwg
cHBpZCwgc2lkLCBmbGFncywgZG0sIHRmc24sIG1pZCkgZG8geyBcCi0JaWYgKF9jdGwpIHsgXAot
CQlhdG9taWNfYWRkX2ludCgmKChuZXQpLT5yZWZfY291bnQpLCAxKTsgXAotCQltZW1zZXQoX2N0
bCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKSk7IFwKLQkJKF9jdGwpLT5z
aW5mb19zdHJlYW0gPSBzaWQ7IFwKLQkJVEFJTFFfSU5JVCgmX2N0bC0+cmVhc20pOyBcCi0JCShf
Y3RsKS0+dG9wX2ZzbiA9IHRmc247IFwKLQkJKF9jdGwpLT5taWQgPSBtaWQ7IFwKLQkJKF9jdGwp
LT5zaW5mb19mbGFncyA9IChmbGFncyA8PCA4KTsgXAotCQkoX2N0bCktPnNpbmZvX3BwaWQgPSBw
cGlkOyBcCi0JCShfY3RsKS0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7IFwKLQkJKF9jdGwpLT5m
c25faW5jbHVkZWQgPSAweGZmZmZmZmZmOyBcCi0JCShfY3RsKS0+dG9wX2ZzbiA9IDB4ZmZmZmZm
ZmY7IFwKLQkJKF9jdGwpLT5zaW5mb190c24gPSB0c247IFwKLQkJKF9jdGwpLT5zaW5mb19jdW10
c24gPSB0c247IFwKLQkJKF9jdGwpLT5zaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
KGluX2l0KSk7IFwKLQkJKF9jdGwpLT53aG9Gcm9tID0gbmV0OyBcCi0JCShfY3RsKS0+ZGF0YSA9
IGRtOyBcCi0JCShfY3RsKS0+c3RjYiA9IChpbl9pdCk7IFwKLQkJKF9jdGwpLT5wb3J0X2Zyb20g
PSAoaW5faXQpLT5ycG9ydDsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQotCi0KLXN0cnVjdCBtYnVm
ICoKLXNjdHBfYnVpbGRfY3RsX25jaHVuayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkgICAg
ICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbyk7Ci0KLXZvaWQgc2N0cF9zZXRfcnduZChz
dHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Ci0KLXVpbnQzMl90
Ci1zY3RwX2NhbGNfcnduZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jKTsKLQotdm9pZAotc2N0cF9leHByZXNzX2hhbmRsZV9zYWNrKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDMyX3QgY3VtYWNrLAotCQkJIHVpbnQzMl90IHJ3bmQsIGludCAq
YWJvcnRfbm93LCBpbnQgZWNuZV9zZWVuKTsKLQotdm9pZAotc2N0cF9oYW5kbGVfc2FjayhzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldF9zZWcsIGludCBvZmZzZXRfZHVwLAotICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgIHVpbnQxNl90IG51
bV9zZWcsIHVpbnQxNl90IG51bV9ucl9zZWcsIHVpbnQxNl90IG51bV9kdXAsCi0gICAgICAgICAg
ICAgICAgIGludCAqYWJvcnRfbm93LCB1aW50OF90IGZsYWdzLAotICAgICAgICAgICAgICAgICB1
aW50MzJfdCBjdW1fYWNrLCB1aW50MzJfdCByd25kLCBpbnQgZWNuZV9zZWVuKTsKLQotLyogZHJh
ZnQtaWV0Zi10c3Z3Zy11c2N0cCAqLwotdm9pZAotc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3Ry
dWN0IHNjdHBfdGNiICosCi0JCQlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayAqLCBpbnQg
Kiwgc3RydWN0IG1idWYgKiwgaW50KTsKLQotc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqCi1zY3Rw
X3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZCBzY3RwX3NlcnZpY2VfcXVldWVzKHN0cnVjdCBzY3Rw
X3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZAotc2N0cF91cGRhdGVf
YWNrZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICosIGlu
dCAqKTsKLQotaW50Ci1zY3RwX3Byb2Nlc3NfZGF0YShzdHJ1Y3QgbWJ1ZiAqKiwgaW50LCBpbnQg
KiwgaW50LAotCQkgIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAotCQkg
IHN0cnVjdCBzY3RwX25ldHMgKiwgdWludDMyX3QgKik7Ci0KLXZvaWQgc2N0cF9zbGlkZV9tYXBw
aW5nX2FycmF5cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOwotCi12b2lkIHNjdHBfc2Fja19jaGVj
ayhzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50KTsKLQotI2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lu
cHV0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU0YmI1MTM3OGRjZDY2ZDU5MmE5
YWNkZmM3M2FiNDI1Mzc5Y2NmYjUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKKysrIC9kZXYvbnVsbApA
QCAtMSw2NTU4ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENp
c2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBh
KSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAq
ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28g
U3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2lucHV0LmMgMzIw
NjUzIDIwMTctMDctMDQgMTg6MjQ6NTBaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHB1dGlsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9pbnB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2Nv
bmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfdGltZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KLSNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2luY2x1ZGUgPHN5cy9zbXAuaD4KLSNlbmRpZgotCi0j
aWYgZGVmaW5lZChfX0FQUExFX18pCi0jZGVmaW5lIEFQUExFX0ZJTEVfTk8gMgotI2VuZGlmCi0K
LQotc3RhdGljIHZvaWQKLXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JLyogVGhpcyBub3cgbm90
IG9ubHkgc3RvcHMgYWxsIGNvb2tpZSB0aW1lcnMKLQkgKiBpdCBhbHNvIHN0b3BzIGFueSBJTklU
IHRpbWVycyBhcyB3ZWxsLiBUaGlzCi0JICogd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXJz
IGFyZSBzdG9wcGVkIGluCi0JICogYWxsIGNvbGxpc2lvbiBjYXNlcy4KLQkgKi8KLQlTQ1RQX1RD
Ql9MT0NLX0FTU0VSVChzdGNiKTsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7Ci0JCWlmIChuZXQtPnJ4dF90aW1lci50eXBlID09IFNDVFBfVElNRVJf
VFlQRV9DT09LSUUpIHsKLQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lF
LAotCQkJCQlzdGNiLT5zY3RwX2VwLAotCQkJCQlzdGNiLAotCQkJCQluZXQsIFNDVFBfRlJPTV9T
Q1RQX0lOUFVUICsgU0NUUF9MT0NfMSk7Ci0JCX0gZWxzZSBpZiAobmV0LT5yeHRfdGltZXIudHlw
ZSA9PSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgewotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9JTklULAotCQkJCQlzdGNiLT5zY3RwX2VwLAotCQkJCQlzdGNiLAotCQkJCQluZXQs
IFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMik7Ci0JCX0KLQl9Ci19Ci0KLS8qIElO
SVQgaGFuZGxlciAqLwotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX2luaXQoc3RydWN0IG1idWYg
Km0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gICAgICAgICAgICAgICAgIHN0cnVjdCBzb2Nr
YWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAotICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjcCwgc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwKLSAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsIGludCAqYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0gICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxv
d2lkLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3Qg
cG9ydCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pbml0ICppbml0OwotCXN0cnVjdCBtYnVmICpvcF9lcnI7
Ci0KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAic2N0cF9oYW5kbGVfaW5pdDogaGFuZGxp
bmcgSU5JVCB0Y2I6JXBcbiIsCi0JCSh2b2lkICopc3RjYik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkg
ewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCX0KLQkvKiB2YWxpZGF0ZSBsZW5ndGggKi8KLQlp
ZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9j
aHVuaykpIHsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFM
SURfUEFSQU0sICIiKTsKLQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlw
aGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJCQkg
ICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJaWYgKHN0Y2IpCi0JCQkqYWJvcnRfbm9fdW5sb2NrID0g
MTsKLQkJZ290byBvdXRub3c7Ci0JfQotCS8qIHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KLQlpbml0
ID0gJmNwLT5pbml0OwotCWlmIChpbml0LT5pbml0aWF0ZV90YWcgPT0gMCkgewotCQkvKiBwcm90
b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRp
b24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxv
d2lkLAotI2VuZGlmCi0JCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNiKQotCQkJ
KmFib3J0X25vX3VubG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAobnRvaGwoaW5p
dC0+YV9yd25kKSA8IFNDVFBfTUlOX1JXTkQpIHsKLQkJLyogaW52YWxpZCBwYXJhbWV0ZXIuLi4g
c2VuZCBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0Vf
SU5WQUxJRF9QQVJBTSwgIiIpOwotCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwg
bSwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgot
CQkJCSAgICAgICB2cmZfaWQsIHBvcnQpOwotCQlpZiAoc3RjYikKLQkJCSphYm9ydF9ub191bmxv
Y2sgPSAxOwotCQlnb3RvIG91dG5vdzsKLQl9Ci0JaWYgKGluaXQtPm51bV9pbmJvdW5kX3N0cmVh
bXMgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0ICovCi0JCW9wX2Vy
ciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0J
CXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBz
aCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkJICAgICAgIHZyZl9pZCwgcG9y
dCk7Ci0JCWlmIChzdGNiKQotCQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93
OwotCX0KLQlpZiAoaW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMgPT0gMCkgewotCQkvKiBwcm90
b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRp
b24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxv
d2lkLAotI2VuZGlmCi0JCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCWlmIChzdGNiKQotCQkJ
KmFib3J0X25vX3VubG9jayA9IDE7Ci0JCWdvdG8gb3V0bm93OwotCX0KLQlpZiAoc2N0cF92YWxp
ZGF0ZV9pbml0X2F1dGhfcGFyYW1zKG0sIG9mZnNldCArIHNpemVvZigqY3ApLAotCQkJCQkgICBv
ZmZzZXQgKyBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSkpIHsKLQkJLyogYXV0aCBwYXJhbWV0
ZXIocykgZXJyb3IuLi4gc2VuZCBhYm9ydCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIlByb2JsZW0gd2l0aCBBVVRIIHBhcmFtZXRlcnMiKTsKLQkJc2N0
cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBv
cF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAgICAg
ICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgICAgICB2
cmZfaWQsIHBvcnQpOwotCQlpZiAoc3RjYikKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQln
b3RvIG91dG5vdzsKLQl9Ci0JLyogV2UgYXJlIG9ubHkgYWNjZXB0aW5nIGlmIHdlIGhhdmUgYSBs
aXN0ZW5pbmcgc29ja2V0LiovCi0JaWYgKChzdGNiID09IE5VTEwpICYmCi0JICAgICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHx8Ci0JICAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8Ci0JICAgICAoIVND
VFBfSVNfTElTVEVOSU5HKGlucCkpKSkgewotCQkvKgotCQkgKiBGSVggTUUgPz8gV2hhdCBhYm91
dCBUQ1AgbW9kZWwgYW5kIHdlIGhhdmUgYQotCQkgKiBtYXRjaC9yZXN0YXJ0IGNhc2U/IEFjdHVh
bGx5IG5vIGZpeCBpcyBuZWVkZWQuCi0JCSAqIHRoZSBsb29rdXAgd2lsbCBhbHdheXMgZmluZCB0
aGUgZXhpc3RpbmcgYXNzb2Mgc28gc3RjYgotCQkgKiB3b3VsZCBub3QgYmUgTlVMTC4gSXQgbWF5
IGJlIHF1ZXN0aW9uYWJsZSB0byBkbyB0aGlzCi0JCSAqIHNpbmNlIHdlIENPVUxEIGp1c3Qgc2Vu
ZCBiYWNrIHRoZSBJTklULUFDSyBhbmQgaG9wZSB0aGF0Ci0JCSAqIHRoZSBhcHAgZGlkIGFjY2Vw
dCgpJ3MgYnkgdGhlIHRpbWUgdGhlIENPT0tJRSB3YXMgc2VudC4gQnV0Ci0JCSAqIHRoZXJlIGlz
IGEgcHJpY2UgdG8gcGF5IGZvciBDT09LSUUgZ2VuZXJhdGlvbiBhbmQgSSBkb24ndAotCQkgKiB3
YW50IHRvIHBheSBpdCBvbiB0aGUgY2hhbmNlIHRoYXQgdGhlIGFwcCB3aWxsIGFjdHVhbGx5IGRv
Ci0JCSAqIHNvbWUgYWNjZXB0cygpLiBUaGUgQXBwIGp1c3QgbG9vc2VzIGFuZCBzaG91bGQgTk9U
IGJlIGluCi0JCSAqIHRoaXMgc3RhdGUgOi0pCi0JCSAqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2JsYWNraG9sZSkgPT0gMCkgewotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVz
ZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiTm8gbGlzdGVuZXIiKTsKLQkJCXNjdHBfc2VuZF9hYm9ydChtLCBp
cGhsZW4sIHNyYywgZHN0LCBzaCwgMCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNl
bmRpZgotCQkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCX0KLQkJZ290byBvdXRu
b3c7Ci0JfQotCWlmICgoc3RjYiAhPSBOVUxMKSAmJgotCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0
Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7Ci0JCVNDVFBEQkco
U0NUUF9ERUJVR19JTlBVVDMsICJzY3RwX2hhbmRsZV9pbml0OiBzZW5kaW5nIFNIVVRET1dOLUFD
S1xuIik7Ci0JCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgTlVMTCk7Ci0JCXNjdHBfY2h1
bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0MsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7Ci0JfSBlbHNlIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
InNjdHBfaGFuZGxlX2luaXQ6IHNlbmRpbmcgSU5JVC1BQ0tcbiIpOwotCQlzY3RwX3NlbmRfaW5p
dGlhdGVfYWNrKGlucCwgc3RjYiwgbmV0LCBtLCBpcGhsZW4sIG9mZnNldCwKLQkJICAgICAgICAg
ICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIGNwLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0LAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICgoc3RjYiA9PSBOVUxMKSA/IFNDVFBfSE9MRFNfTE9DSyA6IFNDVFBfTk9UX0xPQ0tF
RCkpOwotCX0KLSBvdXRub3c6Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JfQotfQotCi0vKgotICogcHJvY2VzcyBwZWVyICJJTklUL0lOSVQtQUNLIiBj
aHVuayByZXR1cm5zIHZhbHVlIDwgMCBvbiBlcnJvcgotICovCi0KLWludAotc2N0cF9pc190aGVy
ZV91bnNlbnRfZGF0YShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQKLSNpZiAh
ZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCVND
VFBfVU5VU0VECi0jZW5kaWYKLSkKLXsKLQlpbnQgdW5zZW50X2RhdGE7Ci0JdW5zaWduZWQgaW50
IGk7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwOwotCXN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jOwotCi0JLyogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGlmIGFueSBz
dHJlYW0gaGFzIHRydWUgdW5zZW50IGRhdGEgb24gaXQuCi0JICogTm90ZSB0aGF0IGFzIGl0IGxv
b2tzIHRocm91Z2ggaXQgd2lsbCBjbGVhbiB1cCBhbnkgcGxhY2VzIHRoYXQKLQkgKiBoYXZlIG9s
ZCBkYXRhIHRoYXQgaGFzIGJlZW4gc2VudCBidXQgbGVmdCBhdCB0b3Agb2Ygc3RyZWFtIHF1ZXVl
LgotCSAqLwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQl1bnNlbnRfZGF0YSA9IDA7Ci0JU0NUUF9U
Q0JfU0VORF9MT0NLKHN0Y2IpOwotCWlmICghc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9z
c19pc19lbXB0eShzdGNiLCBhc29jKSkgewotCQkvKiBDaGVjayB0byBzZWUgaWYgc29tZSBkYXRh
IHF1ZXVlZCAqLwotCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkr
KykgewotCQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJCXNwID0gVEFJTFFfRklSU1Qo
JnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7Ci0JCQlpZiAoc3AgPT0gTlVMTCkgewot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKChzcC0+bXNnX2lzX2NvbXBsZXRlKSAmJgotCQkJ
ICAgIChzcC0+bGVuZ3RoID09IDApICAmJgotCQkJICAgIChzcC0+c2VuZGVyX2FsbF9kb25lKSkg
ewotCQkJCS8qIFdlIGFyZSBkb2luZyBkaWZmZXJlZCBjbGVhbnVwLiBMYXN0Ci0JCQkJICogdGlt
ZSB0aHJvdWdoIHdoZW4gd2UgdG9vayBhbGwgdGhlIGRhdGEKLQkJCQkgKiB0aGUgc2VuZGVyX2Fs
bF9kb25lIHdhcyBub3Qgc2V0LgotCQkJCSAqLwotCQkJCWlmIChzcC0+cHV0X2xhc3Rfb3V0ID09
IDApIHsKLQkJCQkJU0NUUF9QUklOVEYoIkdhaywgcHV0IG91dCBlbnRpcmUgbXNnIHdpdGggTk8g
ZW5kIS0xXG4iKTsKLQkJCQkJU0NUUF9QUklOVEYoInNlbmRlcl9kb25lOiVkIGxlbjolZCBtc2df
Y29tcDolZCBwdXRfbGFzdF9vdXQ6JWRcbiIsCi0JCQkJCSAgICAgICAgICAgIHNwLT5zZW5kZXJf
YWxsX2RvbmUsCi0JCQkJCSAgICAgICAgICAgIHNwLT5sZW5ndGgsCi0JCQkJCSAgICAgICAgICAg
IHNwLT5tc2dfaXNfY29tcGxldGUsCi0JCQkJCSAgICAgICAgICAgIHNwLT5wdXRfbGFzdF9vdXQp
OwotCQkJCX0KLQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnN0cmVhbV9xdWV1
ZV9jbnQsIDEpOwotCQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1
ZXVlLCBzcCwgbmV4dCk7Ci0JCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1v
dmVfZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgJmFzb2MtPnN0cm1vdXRbaV0sIHNwLCAxKTsKLQkJ
CQlpZiAoc3AtPm5ldCkgewotCQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7Ci0J
CQkJCXNwLT5uZXQgPSBOVUxMOwotCQkJCX0KLQkJCQlpZiAoc3AtPmRhdGEpIHsKLQkJCQkJc2N0
cF9tX2ZyZWVtKHNwLT5kYXRhKTsKLQkJCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJCX0KLQkJCQlz
Y3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIHNvX2xvY2tlZCk7Ci0JCQkJaWYgKCFUQUlMUV9F
TVBUWSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKSkgewotCQkJCQl1bnNlbnRfZGF0
YSsrOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJdW5zZW50X2RhdGErKzsKLQkJCX0KLQkJCWlm
ICh1bnNlbnRfZGF0YSA+IDApIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKLQlyZXR1cm4gKHVuc2VudF9kYXRhKTsKLX0KLQotc3RhdGlj
IGludAotc2N0cF9wcm9jZXNzX2luaXQoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqY3AsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9pbml0ICppbml0OwotCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7Ci0JdW5zaWdu
ZWQgaW50IGk7Ci0KLQlpbml0ID0gJmNwLT5pbml0OwotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQkv
KiBzYXZlIG9mZiBwYXJhbWV0ZXJzICovCi0JYXNvYy0+cGVlcl92dGFnID0gbnRvaGwoaW5pdC0+
aW5pdGlhdGVfdGFnKTsKLQlhc29jLT5wZWVyc19yd25kID0gbnRvaGwoaW5pdC0+YV9yd25kKTsK
LQkvKiBpbml0IHRzbidzICovCi0JYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA9IGFzb2Mt
PmFzY29uZl9zZXFfaW4gPSBudG9obChpbml0LT5pbml0aWFsX3RzbikgLSAxOwotCi0JaWYgKCFU
QUlMUV9FTVBUWSgmYXNvYy0+bmV0cykpIHsKLQkJLyogdXBkYXRlIGFueSBzc3RocmVzaCdzIHRo
YXQgbWF5IGhhdmUgYSBkZWZhdWx0ICovCi0JCVRBSUxRX0ZPUkVBQ0gobG5ldCwgJmFzb2MtPm5l
dHMsIHNjdHBfbmV4dCkgewotCQkJbG5ldC0+c3N0aHJlc2ggPSBhc29jLT5wZWVyc19yd25kOwot
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIChTQ1RQX0NXTkRf
TU9OSVRPUl9FTkFCTEV8U0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSkgewotCQkJCXNjdHBfbG9n
X2N3bmQoc3RjYiwgbG5ldCwgMCwgU0NUUF9DV05EX0lOSVRJQUxJWkFUSU9OKTsKLQkJCX0KLQot
CQl9Ci0JfQotCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQlpZiAoYXNvYy0+cHJlX29wZW5f
c3RyZWFtcyA+IG50b2hzKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMpKSB7Ci0JCXVuc2lnbmVk
IGludCBuZXdjbnQ7Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7Ci0JCXN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgKm5zcDsKLQkJc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrLCAqbmNoazsKLQotCQkvKiBhYmFuZG9uIHRoZSB1cHBlciBzdHJlYW1zICovCi0J
CW5ld2NudCA9IG50b2hzKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMpOwotCQlUQUlMUV9GT1JF
QUNIX1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQlp
ZiAoY2hrLT5yZWMuZGF0YS5zaWQgPj0gbmV3Y250KSB7Ci0JCQkJVEFJTFFfUkVNT1ZFKCZhc29j
LT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQkJYXNvYy0+c2VuZF9xdWV1ZV9jbnQt
LTsKLQkJCQlpZiAoYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1
ZXVlcyA+IDApIHsKLQkJCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtz
X29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQl9IGVsc2UgewotCQkJCQlwYW5p
YygiTm8gY2h1bmtzIG9uIHRoZSBxdWV1ZXMgZm9yIHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNp
ZCk7Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7Ci0JCQkJCXNj
dHBfZnJlZV9idWZzcGFjZShzdGNiLCBhc29jLCBjaGssIDEpOwotCQkJCQlzY3RwX3VscF9ub3Rp
ZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkJCSAgICAgICAgICAgICAg
ICAwLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCWlmIChjaGstPmRhdGEpIHsKLQkJ
CQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOwotCQkJCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJ
CQkJfQotCQkJCX0KLQkJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJCX0KLQkJfQotCQlp
ZiAoYXNvYy0+c3RybW91dCkgewotCQkJZm9yIChpID0gbmV3Y250OyBpIDwgYXNvYy0+cHJlX29w
ZW5fc3RyZWFtczsgaSsrKSB7Ci0JCQkJb3V0cyA9ICZhc29jLT5zdHJtb3V0W2ldOwotCQkJCVRB
SUxRX0ZPUkVBQ0hfU0FGRShzcCwgJm91dHMtPm91dHF1ZXVlLCBuZXh0LCBuc3ApIHsKLQkJCQkJ
YXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJ
CQkJVEFJTFFfUkVNT1ZFKCZvdXRzLT5vdXRxdWV1ZSwgc3AsIG5leHQpOwotCQkJCQlzdGNiLT5h
c29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbShzdGNiLCBhc29jLCBv
dXRzLCBzcCwgMSk7Ci0JCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQ
X0ZBSUwsCi0JCQkJCSAgICBzdGNiLCAwLCBzcCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJ
aWYgKHNwLT5kYXRhKSB7Ci0JCQkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOwotCQkJCQkJc3At
PmRhdGEgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCWlmIChzcC0+bmV0KSB7Ci0JCQkJCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7Ci0JCQkJCQlzcC0+bmV0ID0gTlVMTDsKLQkJCQkJfQot
CQkJCQkvKiBGcmVlIHRoZSBjaHVuayAqLwotCQkJCQlzY3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwg
c3AsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSov
Ci0JCQkJfQotCQkJCW91dHMtPnN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEOwotCQkJfQotCQl9
Ci0JCS8qIGN1dCBiYWNrIHRoZSBjb3VudCAqLwotCQlhc29jLT5wcmVfb3Blbl9zdHJlYW1zID0g
bmV3Y250OwotCX0KLQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQlhc29jLT5zdHJlYW1v
dXRjbnQgPSBhc29jLT5wcmVfb3Blbl9zdHJlYW1zOwotCWlmIChhc29jLT5zdHJtb3V0KSB7Ci0J
CWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQkJYXNvYy0+c3Ry
bW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU47Ci0JCX0KLQl9Ci0JLyogRVkgLSBucl9z
YWNrOiBpbml0aWFsaXplIGhpZ2hlc3QgdHNuIGluIG5yX21hcHBpbmdfYXJyYXkgKi8KLQlhc29j
LT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21h
cDsKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBf
TE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9sb2dfbWFwKDAsIDUsIGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7Ci0JfQotCS8qIFRoaXMgaXMgdGhl
IG5leHQgb25lIHdlIGV4cGVjdCAqLwotCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5h
c2NvbmZfc2VxX2luICsgMTsKLQotCWFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBudG9o
bChpbml0LT5pbml0aWFsX3Rzbik7Ci0JYXNvYy0+dHNuX2xhc3RfZGVsaXZlcmVkID0gYXNvYy0+
Y3VtdWxhdGl2ZV90c24gPSBhc29jLT5hc2NvbmZfc2VxX2luOwotCi0JYXNvYy0+YWR2YW5jZWRf
cGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKLQkvKiBvcGVuIHRoZSByZXF1
ZXN0ZWQgc3RyZWFtcyAqLwotCi0JaWYgKGFzb2MtPnN0cm1pbiAhPSBOVUxMKSB7Ci0JCS8qIEZy
ZWUgdGhlIG9sZCBvbmVzICovCi0JCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1pbmNudDsg
aSsrKSB7Ci0JCQlzY3RwX2NsZWFuX3VwX3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybWluW2ldLmlu
cXVldWUpOwotCQkJc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1pbltpXS51
bm9faW5xdWV1ZSk7Ci0JCX0KLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1pbiwgU0NUUF9NX1NUUk1J
KTsKLQl9Ci0JaWYgKGFzb2MtPm1heF9pbmJvdW5kX3N0cmVhbXMgPiBudG9ocyhpbml0LT5udW1f
b3V0Ym91bmRfc3RyZWFtcykpIHsKLQkJYXNvYy0+c3RyZWFtaW5jbnQgPSBudG9ocyhpbml0LT5u
dW1fb3V0Ym91bmRfc3RyZWFtcyk7Ci0JfSBlbHNlIHsKLQkJYXNvYy0+c3RyZWFtaW5jbnQgPSBh
c29jLT5tYXhfaW5ib3VuZF9zdHJlYW1zOwotCX0KLQlTQ1RQX01BTExPQyhhc29jLT5zdHJtaW4s
IHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqLCBhc29jLT5zdHJlYW1pbmNudCAqCi0JCSAgICBzaXpl
b2Yoc3RydWN0IHNjdHBfc3RyZWFtX2luKSwgU0NUUF9NX1NUUk1JKTsKLQlpZiAoYXNvYy0+c3Ry
bWluID09IE5VTEwpIHsKLQkJLyogd2UgZGlkbid0IGdldCBtZW1vcnkgZm9yIHRoZSBzdHJlYW1z
ISAqLwotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAicHJvY2Vzc19pbml0OiBjb3VsZG4n
dCBnZXQgbWVtb3J5IGZvciB0aGUgc3RyZWFtcyFcbiIpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0J
Zm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVhbWluY250OyBpKyspIHsKLQkJYXNvYy0+c3RybWlu
W2ldLnNpZCA9IGk7Ci0JCWFzb2MtPnN0cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZm
ZmZmZmZmOwotCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtaW5baV0uaW5xdWV1ZSk7Ci0JCVRBSUxR
X0lOSVQoJmFzb2MtPnN0cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0JCWFzb2MtPnN0cm1pbltpXS5w
ZF9hcGlfc3RhcnRlZCA9IDA7Ci0JCWFzb2MtPnN0cm1pbltpXS5kZWxpdmVyeV9zdGFydGVkID0g
MDsKLQl9Ci0JLyoKLQkgKiBsb2FkX2FkZHJlc3NfZnJvbV9pbml0IHdpbGwgcHV0IHRoZSBhZGRy
ZXNzZXMgaW50byB0aGUKLQkgKiBhc3NvY2lhdGlvbiB3aGVuIHRoZSBDT09LSUUgaXMgcHJvY2Vz
c2VkIG9yIHRoZSBJTklULUFDSyBpcwotCSAqIHByb2Nlc3NlZC4gQm90aCB0eXBlcyBvZiBDT09L
SUUncyBleGlzdGluZyBhbmQgbmV3IGNhbGwgdGhpcwotCSAqIHJvdXRpbmUuIEl0IHdpbGwgcmVt
b3ZlIGFkZHJlc3NlcyB0aGF0IGFyZSBubyBsb25nZXIgaW4gdGhlCi0JICogYXNzb2NpYXRpb24g
KGZvciB0aGUgcmVzdGFydGluZyBjYXNlIHdoZXJlIGFkZHJlc3NlcyBhcmUKLQkgKiByZW1vdmVk
KS4gVXAgZnJvbnQgd2hlbiB0aGUgSU5JVCBhcnJpdmVzIHdlIHdpbGwgZGlzY2FyZCBpdCBpZiBp
dAotCSAqIGlzIGEgcmVzdGFydCBhbmQgbmV3IGFkZHJlc3NlcyBoYXZlIGJlZW4gYWRkZWQuCi0J
ICovCi0JLyogc2FfaWdub3JlIE1FTUxFQUsgKi8KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICog
SU5JVC1BQ0sgbWVzc2FnZSBwcm9jZXNzaW5nL2NvbnN1bXB0aW9uIHJldHVybnMgdmFsdWUgPCAw
IG9uIGVycm9yCi0gKi8KLXN0YXRpYyBpbnQKLXNjdHBfcHJvY2Vzc19pbml0X2FjayhzdHJ1Y3Qg
bWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsIHN0cnVjdCBzY3RwaGRy
ICpzaCwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAq
Y3AsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsIGludCAqYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0JCSAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JaW50IHJldHZh
bCwgYWJvcnRfZmxhZzsKLQl1aW50MzJfdCBpbml0YWNrX2xpbWl0OwotCWludCBuYXRfZnJpZW5k
bHkgPSAwOwotCi0JLyogRmlyc3QgdmVyaWZ5IHRoYXQgd2UgaGF2ZSBubyBpbGxlZ2FsIHBhcmFt
J3MgKi8KLQlhYm9ydF9mbGFnID0gMDsKLQotCW9wX2VyciA9IHNjdHBfYXJldGhlcmVfdW5yZWNv
Z25pemVkX3BhcmFtZXRlcnMobSwKLQkJCQkJCSAgICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX2luaXRfY2h1bmspKSwKLQkJCQkJCSAgICAgICAmYWJvcnRfZmxhZywgKHN0cnVjdCBz
Y3RwX2NodW5raGRyICopY3AsICZuYXRfZnJpZW5kbHkpOwotCWlmIChhYm9ydF9mbGFnKSB7Ci0J
CS8qIFNlbmQgYW4gYWJvcnQgYW5kIG5vdGlmeSBwZWVyICovCi0JCXNjdHBfYWJvcnRfYW5fYXNz
b2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWFzb2MgPSAm
c3RjYi0+YXNvYzsKLQlhc29jLT5wZWVyX3N1cHBvcnRzX25hdCA9ICh1aW50OF90KW5hdF9mcmll
bmRseTsKLQkvKiBwcm9jZXNzIHRoZSBwZWVyJ3MgcGFyYW1ldGVycyBpbiB0aGUgSU5JVC1BQ0sg
Ki8KLQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdCgoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAq
KWNwLCBzdGNiKTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQlyZXR1cm4gKHJldHZhbCk7Ci0JfQot
CWluaXRhY2tfbGltaXQgPSBvZmZzZXQgKyBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKLQkv
KiBsb2FkIGFsbCBhZGRyZXNzZXMgKi8KLQlpZiAoKHJldHZhbCA9IHNjdHBfbG9hZF9hZGRyZXNz
ZXNfZnJvbV9pbml0KHN0Y2IsIG0sCi0JICAgIChvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBf
aW5pdF9jaHVuaykpLCBpbml0YWNrX2xpbWl0LAotCSAgICBzcmMsIGRzdCwgTlVMTCwgc3RjYi0+
YXNvYy5wb3J0KSkpIHsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJQcm9ibGVtIHdpdGggYWRkcmVzcyBwYXJhbWV0ZXJzIik7Ci0JCVNDVFBEQkcoU0NUUF9E
RUJVR19JTlBVVDEsCi0JCQkiTG9hZCBhZGRyZXNzZXMgZnJvbSBJTklUIGNhdXNlcyBhbiBhYm9y
dCAlZFxuIiwKLQkJCXJldHZhbCk7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0
cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0
LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0
dXJuICgtMSk7Ci0JfQotCS8qIGlmIHRoZSBwZWVyIGRvZXNuJ3Qgc3VwcG9ydCBhc2NvbmYsIGZs
dXNoIHRoZSBhc2NvbmYgcXVldWUgKi8KLQlpZiAoYXNvYy0+YXNjb25mX3N1cHBvcnRlZCA9PSAw
KSB7Ci0JCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICpwYXJhbSwgKm5wYXJhbTsKLQotCQlUQUlM
UV9GT1JFQUNIX1NBRkUocGFyYW0sICZhc29jLT5hc2NvbmZfcXVldWUsIG5leHQsIG5wYXJhbSkg
ewotCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2NvbmZfcXVldWUsIHBhcmFtLCBuZXh0KTsKLQkJ
CVNDVFBfRlJFRShwYXJhbSwgU0NUUF9NX0FTQ19BRERSKTsKLQkJfQotCX0KLQotCXN0Y2ItPmFz
b2MucGVlcl9obWFjX2lkID0gc2N0cF9uZWdvdGlhdGVfaG1hY2lkKHN0Y2ItPmFzb2MucGVlcl9o
bWFjcywKLQkgICAgc3RjYi0+YXNvYy5sb2NhbF9obWFjcyk7Ci0JaWYgKG9wX2VycikgewotCQlz
Y3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOwotCQkvKiBxdWV1aW5nIHdpbGwgc3RlYWwg
YXdheSB0aGUgbWJ1ZiBjaGFpbiB0byB0aGUgb3V0IHF1ZXVlICovCi0JCW9wX2VyciA9IE5VTEw7
Ci0JfQotCS8qIGV4dHJhY3QgdGhlIGNvb2tpZSBhbmQgcXVldWUgaXQgdG8gImVjaG8iIGl0IGJh
Y2suLi4gKi8KLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9USFJFU0hPTERfTE9HR0lORykgewotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9D
TEVBUiwKLQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkgICAg
ICAgMCwKLQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCSAgICAgICBfX0xJTkVf
Xyk7Ci0JfQotCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JbmV0LT5lcnJv
cl9jb3VudCA9IDA7Ci0KLQkvKgotCSAqIENhbmNlbCB0aGUgSU5JVCB0aW1lciwgV2UgZG8gdGhp
cyBmaXJzdCBiZWZvcmUgcXVldWVpbmcgdGhlCi0JICogY29va2llLiBXZSBhbHdheXMgY2FuY2Vs
IGF0IHRoZSBwcmltYXJ5IHRvIGFzc3VlIHRoYXQgd2UgYXJlCi0JICogY2FuY2VsaW5nIHRoZSB0
aW1lciBzdGFydGVkIGJ5IHRoZSBJTklUIHdoaWNoIGFsd2F5cyBnb2VzIHRvIHRoZQotCSAqIHBy
aW1hcnkuCi0JICovCi0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULCBzdGNi
LT5zY3RwX2VwLCBzdGNiLAotCSAgICBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzMpOwotCi0JLyogY2FsY3VsYXRlIHRoZSBSVE8gKi8K
LQluZXQtPlJUTyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCBuZXQsICZhc29jLT50
aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fc2FmZV9ub2NvcHksCi0JCQkJICAgICAgU0NUUF9SVFRf
RlJPTV9OT05fREFUQSk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmIChzdGNiLT5z
Y3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7Ci0JCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJ
dWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2JfZnJlZV9ub3c7Ci0JCQlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOwotCi0JCQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsKLQkJCXNiX2ZyZWVf
bm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVfYnl0
ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVzdik7Ci0KLQkJCS8qIGNoZWNrIGlmIHRoZSBhbW91
bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQgYnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9sZCAq
LwotCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFjayAmJgotCQkJICAgICgoKGlucC0+c2VuZF9zYl90
aHJlc2hvbGQgPiAwKSAmJgotCQkJICAgICAgKHNiX2ZyZWVfbm93ID49IGlucC0+c2VuZF9zYl90
aHJlc2hvbGQpICYmCi0JCQkgICAgICAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlIDw9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkpIHx8Ci0JCQkgICAg
IChpbnAtPnNlbmRfc2JfdGhyZXNob2xkID09IDApKSkgewotCQkJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCWlu
cC0+c2VuZF9jYWxsYmFjayhzdGNiLT5zY3RwX3NvY2tldCwgc2JfZnJlZV9ub3cpOwotCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOwotCQkJfQotCQl9Ci0JfQotI2VuZGlmCi0JcmV0dmFsID0gc2N0cF9zZW5kX2Nv
b2tpZV9lY2hvKG0sIG9mZnNldCwgc3RjYiwgbmV0KTsKLQlpZiAocmV0dmFsIDwgMCkgewotCQkv
KgotCQkgKiBObyBjb29raWUsIHdlIHByb2JhYmx5IHNob3VsZCBzZW5kIGEgb3AgZXJyb3IuIEJ1
dCBpbiBhbnkKLQkJICogY2FzZSBpZiB0aGVyZSBpcyBubyBjb29raWUgaW4gdGhlIElOSVQtQUNL
LCB3ZSBjYW4KLQkJICogYWJhbmRvbiB0aGUgcGVlciwgaXRzIGJyb2tlLgotCQkgKi8KLQkJaWYg
KHJldHZhbCA9PSAtMykgewotCQkJdWludDE2X3QgbGVuOwotCi0JCQlsZW4gPSAodWludDE2X3Qp
KHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9taXNzaW5nX3BhcmFtKSArIHNpemVvZih1aW50MTZf
dCkpOwotCQkJLyogV2UgYWJvcnQgd2l0aCBhbiBlcnJvciBvZiBtaXNzaW5nIG1hbmRhdG9yeSBw
YXJhbSAqLwotCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dB
SVQsIDEsIE1UX0RBVEEpOwotCQkJaWYgKG9wX2VyciAhPSBOVUxMKSB7Ci0JCQkJc3RydWN0IHNj
dHBfZXJyb3JfbWlzc2luZ19wYXJhbSAqY2F1c2U7Ci0KLQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJy
KSA9IGxlbjsKLQkJCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9lcnJvcl9taXNz
aW5nX3BhcmFtICopOwotCQkJCS8qIFN1YnRyYWN0IHRoZSByZXNlcnZlZCBwYXJhbSAqLwotCQkJ
CWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVTRV9NSVNTSU5HX1BBUkFNKTsKLQkJ
CQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMobGVuKTsKLQkJCQljYXVzZS0+bnVtX21pc3Np
bmdfcGFyYW1zID0gaHRvbmwoMSk7Ci0JCQkJY2F1c2UtPnR5cGVbMF0gPSBodG9ucyhTQ1RQX1NU
QVRFX0NPT0tJRSk7Ci0JCQl9Ci0JCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG0sIGlwaGxlbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3Qs
IHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKLQkJCSphYm9ydF9ub191bmxvY2sgPSAxOwotCQl9
Ci0JCXJldHVybiAocmV0dmFsKTsKLQl9Ci0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0aWMgdm9p
ZAotc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2FjayhzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsg
KmNwLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOwotCXN0cnVjdCBzY3RwX25ldHMgKnJfbmV0
LCAqZl9uZXQ7Ci0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0JaW50IHJlcV9wcmltID0gMDsKLQl1aW50
MTZfdCBvbGRfZXJyb3JfY291bnRlcjsKLQotCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3Ro
KSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkgewotCQkvKiBJbnZhbGlk
IGxlbmd0aCAqLwotCQlyZXR1cm47Ci0JfQotCi0JbWVtc2V0KCZzdG9yZSwgMCwgc2l6ZW9mKHN0
b3JlKSk7Ci0Jc3dpdGNoIChjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9mYW1pbHkpIHsKLSNp
ZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlpZiAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFk
ZHJfbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQlzdG9yZS5zaW4uc2lu
X2ZhbWlseSA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWlseTsKLSNpZmRlZiBIQVZF
X1NJTl9MRU4KLQkJCXN0b3JlLnNpbi5zaW5fbGVuID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFk
ZHJfbGVuOwotI2VuZGlmCi0JCQlzdG9yZS5zaW4uc2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJ
CW1lbWNweSgmc3RvcmUuc2luLnNpbl9hZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVz
cywKLQkJCSAgICAgICBzaXplb2Yoc3RvcmUuc2luLnNpbl9hZGRyKSk7Ci0JCX0gZWxzZSB7Ci0J
CQlyZXR1cm47Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZf
SU5FVDY6Ci0JCWlmIChjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQlzdG9yZS5zaW42LnNpbjZfZmFtaWx5ID0gY3AtPmhl
YXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJCXN0
b3JlLnNpbjYuc2luNl9sZW4gPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW47Ci0jZW5k
aWYKLQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCQltZW1jcHkoJnN0
b3JlLnNpbjYuc2luNl9hZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywgc2l6ZW9m
KHN0cnVjdCBpbjZfYWRkcikpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFr
OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQkJ
aWYgKGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pKSB7Ci0JCQlzdG9yZS5zY29ubi5zY29ubl9mYW1pbHkgPSBjcC0+aGVhcnRiZWF0
LmhiX2luZm8uYWRkcl9mYW1pbHk7Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJCXN0b3JlLnNj
b25uLnNjb25uX2xlbiA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbjsKLSNlbmRpZgot
CQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IHN0Y2ItPnJwb3J0OwotCQkJbWVtY3B5KCZzdG9y
ZS5zY29ubi5zY29ubl9hZGRyLCBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcmVzcywgc2l6ZW9m
KHZvaWQgKikpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlm
Ci0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQlyX25ldCA9IHNjdHBfZmluZG5ldChzdGNiLCAm
c3RvcmUuc2EpOwotCWlmIChyX25ldCA9PSBOVUxMKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsICJIdWg/IEkgY2FuJ3QgZmluZCB0aGUgYWRkcmVzcyBJIHNlbnQgaXQgdG8sIGRpc2Nh
cmRcbiIpOwotCQlyZXR1cm47Ci0JfQotCWlmICgocl9uZXQgJiYgKHJfbmV0LT5kZXN0X3N0YXRl
ICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgJiYKLQkgICAgKHJfbmV0LT5oZWFydGJlYXRfcmFu
ZG9tMSA9PSBjcC0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMSkgJiYKLQkgICAgKHJf
bmV0LT5oZWFydGJlYXRfcmFuZG9tMiA9PSBjcC0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3Zh
bHVlMikpIHsKLQkJLyoKLQkJICogSWYgdGhlIGl0cyBhIEhCIGFuZCBpdCdzIHJhbmRvbSB2YWx1
ZSBpcyBjb3JyZWN0IHdoZW4gY2FuCi0JCSAqIGNvbmZpcm0gdGhlIGRlc3RpbmF0aW9uLgotCQkg
Ki8KLQkJcl9uZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKLQkJaWYg
KHJfbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFUV9QUklNQVJZKSB7Ci0JCQlzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb24gPSByX25ldDsKLQkJCXJfbmV0LT5kZXN0X3N0YXRlICY9
IH5TQ1RQX0FERFJfUkVRX1BSSU1BUlk7Ci0JCQlmX25ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5h
c29jLm5ldHMpOwotCQkJaWYgKGZfbmV0ICE9IHJfbmV0KSB7Ci0JCQkJLyogZmlyc3Qgb25lIG9u
IHRoZSBsaXN0IGlzIE5PVCB0aGUgcHJpbWFyeQotCQkJCSAqIHNjdHBfY21wYWRkcigpIGlzIG11
Y2ggbW9yZSBlZmZpY2llbnQgaWYKLQkJCQkgKiB0aGUgcHJpbWFyeSBpcyB0aGUgZmlyc3Qgb24g
dGhlIGxpc3QsIG1ha2UgaXQKLQkJCQkgKiBzby4KLQkJCQkgKi8KLQkJCQlUQUlMUV9SRU1PVkUo
JnN0Y2ItPmFzb2MubmV0cywgcl9uZXQsIHNjdHBfbmV4dCk7Ci0JCQkJVEFJTFFfSU5TRVJUX0hF
QUQoJnN0Y2ItPmFzb2MubmV0cywgcl9uZXQsIHNjdHBfbmV4dCk7Ci0JCQl9Ci0JCQlyZXFfcHJp
bSA9IDE7Ci0JCX0KLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05G
SVJNRUQsCi0JCSAgICBzdGNiLCAwLCAodm9pZCAqKXJfbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQp
OwotCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwKLQkJICAgICAgICAgICAgICAgIHJfbmV0LCBTQ1RQX0ZST01fU0NUUF9JTlBV
VCArIFNDVFBfTE9DXzQpOwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFS
VEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIHJfbmV0KTsKLQl9Ci0Jb2xkX2Vycm9yX2NvdW50
ZXIgPSByX25ldC0+ZXJyb3JfY291bnQ7Ci0Jcl9uZXQtPmVycm9yX2NvdW50ID0gMDsKLQlyX25l
dC0+aGJfcmVzcG9uZGVkID0gMTsKLQl0di50dl9zZWMgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8u
dGltZV92YWx1ZV8xOwotCXR2LnR2X3VzZWMgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8udGltZV92
YWx1ZV8yOwotCS8qIE5vdyBsZXRzIGRvIGEgUlRPIHdpdGggdGhpcyAqLwotCXJfbmV0LT5SVE8g
PSBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgJnN0Y2ItPmFzb2MsIHJfbmV0LCAmdHYsIHNjdHBf
YWxpZ25fc2FmZV9ub2NvcHksCi0JCQkJCVNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOwotCWlmICgh
KHJfbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKLQkJcl9uZXQtPmRl
c3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JFQUNIQUJMRTsKLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBf
Tk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwKLQkJCQkwLCAodm9pZCAqKXJfbmV0LCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCX0KLQlpZiAocl9uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYp
IHsKLQkJcl9uZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJc3RjYi0+YXNvYy5j
Y19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmKHN0Y2IsIG5ldCk7Ci0JfQotCWlm
IChvbGRfZXJyb3JfY291bnRlciA+IDApIHsKLQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICBzdGNiLCBy
X25ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ181KTsKLQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCByX25l
dCk7Ci0JfQotCWlmIChyX25ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsK
LQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5h
dGUsIHByaW1hcnkgaXMgZ29vZCAqLwotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFz
b2MuYWx0ZXJuYXRlKTsKLQkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKLQkJfQotCX0K
LQkvKiBNb2JpbGl0eSBhZGFwdGF0aW9uICovCi0JaWYgKHJlcV9wcmltKSB7Ci0JCWlmICgoc2N0
cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKLQkJICAgIHNjdHBfaXNf
bW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSAmJgotCQkgICAgc2N0cF9p
c19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpKSB7Ci0KLQkJCXNjdHBf
dGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAotCQkJICAgICAgICAgICAg
ICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCi0JCQkgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ182KTsKLQkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2Zl
YXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJCQkJU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikp
IHsKLQkJCQlzY3RwX2Fzc29jX2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsCi0JCQkJCXN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9m
ZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCi0JCQkJCVNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKLQkJ
CQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsCi0JCQkJCXN0Y2ItPmFzb2MuZGVsZXRl
ZF9wcmltYXJ5KTsKLQkJCX0KLQkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9l
cCwgc3RjYiwKLQkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOwotCQl9Ci0JfQotfQot
Ci1zdGF0aWMgaW50Ci1zY3RwX2hhbmRsZV9uYXRfY29sbGlkaW5nX3N0YXRlKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYikKLXsKLQkvKiByZXR1cm4gMCBtZWFucyB3ZSB3YW50IHlvdSB0byBwcm9jZWVk
IHdpdGggdGhlIGFib3J0Ci0JICogbm9uLXplcm8gbWVhbnMgbm8gYWJvcnQgcHJvY2Vzc2luZwot
CSovCi0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQotCWlmIChTQ1RQX0dFVF9TVEFURSgm
c3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgewotCQkvKiBnZW5lcmF0ZSBh
IG5ldyB2dGFnIGFuZCBzZW5kIGluaXQgKi8KLQkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF9hc29j
cyk7Ci0JCXN0Y2ItPmFzb2MubXlfdnRhZyA9IHNjdHBfc2VsZWN0X2FfdGFnKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LCAxKTsKLQkJaGVhZCA9
ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5h
c29jLm15X3Z0YWcsIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQkJLyogcHV0IGl0
IGluIHRoZSBidWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0aGUgc3lzdGVt
ICovCi0JCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF9hc29jcyk7Ci0JCXNjdHBf
c2VuZF9pbml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQlyZXR1cm4gKDEpOwotCX0KLQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFND
VFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgewotCQkvKiB0cmVhdCBsaWtlIGEgY2FzZSB3aGVyZSB0
aGUgY29va2llIGV4cGlyZWQgaS5lLjoKLQkJKiAtIGR1bXAgY3VycmVudCBjb29raWUuCi0JCSog
LSBnZW5lcmF0ZSBhIG5ldyB2dGFnLgotCQkqIC0gcmVzZW5kIGluaXQuCi0JCSovCi0JCS8qIGdl
bmVyYXRlIGEgbmV3IHZ0YWcgYW5kIHNlbmQgaW5pdCAqLwotCQlMSVNUX1JFTU9WRShzdGNiLCBz
Y3RwX2Fzb2NzKTsKLQkJc3RjYi0+YXNvYy5zdGF0ZSAmPSB+U0NUUF9TVEFURV9DT09LSUVfRUNI
T0VEOwotCQlzdGNiLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ7Ci0JCXNj
dHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKLQkJc2N0cF90b3NzX29sZF9jb29raWVz
KHN0Y2IsICZzdGNiLT5hc29jKTsKLQkJc3RjYi0+YXNvYy5teV92dGFnID0gc2N0cF9zZWxlY3Rf
YV90YWcoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBv
cnQsICAxKTsKLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BD
QkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsIFNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFy
aykpXTsKLQkJLyogcHV0IGl0IGluIHRoZSBidWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3Nv
YydzIGZvciB0aGUgc3lzdGVtICovCi0JCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0
cF9hc29jcyk7Ci0JCXNjdHBfc2VuZF9pbml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm4gKDEpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1z
dGF0aWMgaW50Ci1zY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCi0JCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0JLyogcmV0dXJuIDAg
bWVhbnMgd2Ugd2FudCB5b3UgdG8gcHJvY2VlZCB3aXRoIHRoZSBhYm9ydAotCSAqIG5vbi16ZXJv
IG1lYW5zIG5vIGFib3J0IHByb2Nlc3NpbmcKLQkgKi8KLQlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1
cHBvcnRlZCA9PSAwKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRs
ZV9uYXRfbWlzc2luZ19zdGF0ZTogUGVlciBkb2VzIG5vdCBzdXBwb3J0IEFVVEgsIGNhbm5vdCBz
ZW5kIGFuIGFzY29uZlxuIik7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXNjdHBfYXNjb25mX3NlbmRf
bmF0X3N0YXRlX3VwZGF0ZShzdGNiLCBuZXQpOwotCXJldHVybiAoMSk7Ci19Ci0KLQotc3RhdGlj
IHZvaWQKLXNjdHBfaGFuZGxlX2Fib3J0KHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydCwK
LSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlz
dHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCXVpbnQxNl90IGxlbjsKLQl1aW50MTZfdCBlcnJv
cjsKLQotCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hhbmRsZV9hYm9ydDogaGFu
ZGxpbmcgQUJPUlRcbiIpOwotCWlmIChzdGNiID09IE5VTEwpCi0JCXJldHVybjsKLQotCWxlbiA9
IG50b2hzKGFib3J0LT5jaC5jaHVua19sZW5ndGgpOwotCWlmIChsZW4gPiBzaXplb2YgKHN0cnVj
dCBzY3RwX2NodW5raGRyKSkgewotCQkvKiBOZWVkIHRvIGNoZWNrIHRoZSBjYXVzZSBjb2RlcyBm
b3Igb3VyCi0JCSAqIHR3byBtYWdpYyBuYXQgYWJvcnRzIHdoaWNoIGRvbid0IGtpbGwgdGhlIGFz
c29jCi0JCSAqIG5lY2Vzc2FyaWx5LgotCQkgKi8KLQkJc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2Nh
dXNlICpjYXVzZTsKLQotCQljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKiko
YWJvcnQgKyAxKTsKLQkJZXJyb3IgPSBudG9ocyhjYXVzZS0+Y29kZSk7Ci0JCWlmIChlcnJvciA9
PSBTQ1RQX0NBVVNFX05BVF9DT0xMSURJTkdfU1RBVEUpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsICJSZWNlaXZlZCBDb2xsaWRpbmcgc3RhdGUgYWJvcnQgZmxhZ3M6JXhcbiIsCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydC0+Y2guY2h1bmtfZmxhZ3MpOwotCQkJ
aWYgKHNjdHBfaGFuZGxlX25hdF9jb2xsaWRpbmdfc3RhdGUoc3RjYikpIHsKLQkJCQlyZXR1cm47
Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoZXJyb3IgPT0gU0NUUF9DQVVTRV9OQVRfTUlTU0lOR19TVEFU
RSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3Rh
dGUgYWJvcnQgZmxhZ3M6JXhcbiIsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9y
dC0+Y2guY2h1bmtfZmxhZ3MpOwotCQkJaWYgKHNjdHBfaGFuZGxlX25hdF9taXNzaW5nX3N0YXRl
KHN0Y2IsIG5ldCkpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQllcnJv
ciA9IDA7Ci0JfQotCS8qIHN0b3AgYW55IHJlY2VpdmUgdGltZXJzICovCi0Jc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCi0JICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfNyk7Ci0JLyogbm90
aWZ5IHVzZXIgb2YgdGhlIGFib3J0IGFuZCBjbGVhbiB1cC4uLiAqLwotCXNjdHBfYWJvcnRfbm90
aWZpY2F0aW9uKHN0Y2IsIDEsIGVycm9yLCBhYm9ydCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkv
KiBmcmVlIHRoZSB0Y2IgKi8KLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRl
ZCk7Ci0JaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVO
KSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpKSB7Ci0JCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVz
dGFiKTsKLQl9Ci0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLQlzY3RwX3ByaW50X291dF90
cmFja19sb2coc3RjYik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXAp
OwotCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCVNDVFBfVENCX0xPQ0soc3Rj
Yik7Ci0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlm
Ci0Jc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOwotCSh2b2lkKXNj
dHBfZnJlZV9hc3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJ
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ184KTsKLSNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOwotI2VuZGlmCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInNjdHBf
aGFuZGxlX2Fib3J0OiBmaW5pc2hlZFxuIik7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3N0YXJ0
X25ldF90aW1lcnMoc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXVpbnQzMl90IGNudF9oYl9z
ZW50OwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQotCWNudF9oYl9zZW50ID0gMDsKLQlUQUlM
UV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCS8qIEZvciBl
YWNoIG5ldHdvcmsgc3RhcnQ6Ci0JCSAqIDEpIEEgcG10dSB0aW1lci4KLQkJICogMikgQSBIQiB0
aW1lcgotCQkgKiAzKSBJZiB0aGUgZGVzdCBpbiB1bmNvbmZpcm1lZCBzZW5kCi0JCSAqICAgIGEg
aGIgYXMgd2VsbCBpZiB1bmRlciBtYXhfaGJfYnVyc3QgaGF2ZQotCQkgKiAgICBiZWVuIHNlbnQu
Ci0JCSAqLwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0Us
IHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKLQkJaWYgKChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpICYmCi0JCSAgICAoY250X2hiX3Nl
bnQgPCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJfbWF4YnVyc3QpKSkgewotCQkJc2N0cF9zZW5k
X2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCWNudF9oYl9zZW50Kys7Ci0J
CX0KLQl9Ci0JaWYgKGNudF9oYl9zZW50KSB7Ci0JCXNjdHBfY2h1bmtfb3V0cHV0KHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsCi0JCQkJICBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0ssCi0JCQkJICBT
Q1RQX1NPX05PVF9MT0NLRUQpOwotCX0KLX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5kbGVf
c2h1dGRvd24oc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKmNwLAotICAgIHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X2ZsYWcpCi17Ci0J
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0JaW50IHNvbWVfb25fc3RyZWFtd2hlZWw7
Ci0JaW50IG9sZF9zdGF0ZTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJInNjdHBfaGFuZGxlX3NodXRkb3duOiBoYW5kbGluZyBT
SFVURE9XTlxuIik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuOwotCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKLQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpIHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJ
RV9FQ0hPRUQpKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5n
dGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuaykpIHsKLQkJLyogU2h1dGRv
d24gTk9UIHRoZSBleHBlY3RlZCBzaXplICovCi0JCXJldHVybjsKLQl9Ci0Jb2xkX3N0YXRlID0g
U0NUUF9HRVRfU1RBVEUoYXNvYyk7Ci0Jc2N0cF91cGRhdGVfYWNrZWQoc3RjYiwgY3AsIGFib3J0
X2ZsYWcpOwotCWlmICgqYWJvcnRfZmxhZykgewotCQlyZXR1cm47Ci0JfQotCWlmIChhc29jLT5j
b250cm9sX3BkYXBpKSB7Ci0JCS8qIFdpdGggYSBub3JtYWwgc2h1dGRvd24KLQkJICogd2UgYXNz
dW1lIHRoZSBlbmQgb2YgbGFzdCByZWNvcmQuCi0JCSAqLwotCQlTQ1RQX0lOUF9SRUFEX0xPQ0so
c3RjYi0+c2N0cF9lcCk7Ci0JCWlmIChhc29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EpIHsK
LQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKLQotCQkJc3RybSA9ICZhc29jLT5zdHJt
aW5bYXNvYy0+Y29udHJvbF9wZGFwaS0+c2luZm9fc3RyZWFtXTsKLQkJCWlmIChhc29jLT5jb250
cm9sX3BkYXBpLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsKLQkJCQkvKiBVbm9y
ZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBhc29jLT5jb250
cm9sX3BkYXBpLCBuZXh0X2luc3RybSk7Ci0JCQkJYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3Ry
bV9xID0gMDsKLQkJCX0gZWxzZSBpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xID09
IFNDVFBfT05fT1JERVJFRCkgewotCQkJCS8qIE9yZGVyZWQgKi8KLQkJCQlUQUlMUV9SRU1PVkUo
JnN0cm0tPmlucXVldWUsIGFzb2MtPmNvbnRyb2xfcGRhcGksIG5leHRfaW5zdHJtKTsKLQkJCQlh
c29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EgPSAwOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJ
CX0gZWxzZSB7Ci0JCQkJcGFuaWMoIlVua25vd24gc3RhdGUgb24gY3RybDolcCBvbl9zdHJtX3E6
JWQiLAotCQkJCSAgICAgIGFzb2MtPmNvbnRyb2xfcGRhcGksCi0JCQkJICAgICAgYXNvYy0+Y29u
dHJvbF9wZGFwaS0+b25fc3RybV9xKTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JCWFzb2MtPmNvbnRy
b2xfcGRhcGktPmVuZF9hZGRlZCA9IDE7Ci0JCWFzb2MtPmNvbnRyb2xfcGRhcGktPnBkYXBpX2Fi
b3J0ZWQgPSAxOwotCQlhc29jLT5jb250cm9sX3BkYXBpID0gTlVMTDsKLQkJU0NUUF9JTlBfUkVB
RF9VTkxPQ0soc3RjYi0+c2N0cF9lcCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9l
cCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xP
Q0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
LQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJ
CS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICovCi0JCQlTQ1RQX1NP
Q0tFVF9VTkxPQ0soc28sIDEpOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJaWYgKHN0Y2It
PnNjdHBfc29ja2V0KSB7Ci0JCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5z
Y3RwX3NvY2tldCk7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgot
CX0KLQkvKiBnb3RvIFNIVVRET1dOX1JFQ0VJVkVEIHN0YXRlIHRvIGJsb2NrIG5ldyByZXF1ZXN0
cyAqLwotCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCi0JCSAgICAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgJiYKLQkJICAgIChT
Q1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpKSB7Ci0JCQlT
Q1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKTsKLQkJCVND
VFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJ
CS8qIG5vdGlmeSB1cHBlciBsYXllciB0aGF0IHBlZXIgaGFzIGluaXRpYXRlZCBhIHNodXRkb3du
ICovCi0JCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfUEVFUl9TSFVURE9XTiwgc3RjYiwg
MCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQotCQkJLyogcmVzZXQgdGltZSAqLwotCQkJ
KHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJlZCk7Ci0JCX0KLQl9
Ci0JaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkg
ewotCQkvKgotCQkgKiBzdG9wIHRoZSBzaHV0ZG93biB0aW1lciwgc2luY2Ugd2UgV0lMTCBtb3Zl
IHRvCi0JCSAqIFNIVVRET1dOLUFDSy1TRU5ULgotCQkgKi8KLQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJICAgICAgICAg
ICAgICAgIG5ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ185KTsKLQl9Ci0JLyog
Tm93IGlzIHRoZXJlIHVuc2VudCBkYXRhIG9uIGEgc3RyZWFtIHNvbWV3aGVyZT8gKi8KLQlzb21l
X29uX3N0cmVhbXdoZWVsID0gc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCi0JaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgfHwK
LQkgICAgIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAotCSAgICBzb21lX29uX3N0
cmVhbXdoZWVsKSB7Ci0JCS8qIEJ5IHJldHVybmluZyB3ZSB3aWxsIHB1c2ggbW9yZSBkYXRhIG91
dCAqLwotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJLyogbm8gb3V0c3RhbmRpbmcgZGF0YSB0byBz
ZW5kLCBzbyBtb3ZlIG9uLi4uICovCi0JCS8qIHNlbmQgU0hVVERPV04tQUNLICovCi0JCS8qIG1v
dmUgdG8gU0hVVERPV04tQUNLLVNFTlQgc3RhdGUgKi8KLQkJaWYgKChTQ1RQX0dFVF9TVEFURShh
c29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8Ci0JCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCVNDVFBfU1RBVF9ERUNSX0dB
VUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJfQotCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFzb2Ms
IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7Ci0JCWlmIChTQ1RQX0dFVF9TVEFURShhc29j
KSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSB7Ci0JCQlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKLQkJCXNjdHBfc3RvcF90aW1lcnNf
Zm9yX3NodXRkb3duKHN0Y2IpOwotCQkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBuZXQp
OwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssCi0JCQkg
ICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCX0gZWxzZSBpZiAo
b2xkX3N0YXRlID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsKLQkJCXNjdHBfc2Vu
ZF9zaHV0ZG93bl9hY2soc3RjYiwgbmV0KTsKLQkJfQotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNj
dHBfaGFuZGxlX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmNw
IFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17
Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0K
LQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotI2VuZGlmCi0JU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMiwKLQkJInNjdHBfaGFuZGxlX3NodXRkb3duX2FjazogaGFuZGxpbmcgU0hV
VERPV04gQUNLXG4iKTsKLQlpZiAoc3RjYiA9PSBOVUxMKQotCQlyZXR1cm47Ci0KLQlhc29jID0g
JnN0Y2ItPmFzb2M7Ci0JLyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gYXNzb2NpYXRpb24gc3RhdGUg
Ki8KLQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQp
IHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hP
RUQpKSB7Ci0JCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQUNLLi4uIGRvIE9PVEIgaGFuZGxpbmcu
Li4gKi8KLQkJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMSk7Ci0JCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoKFNDVFBfR0VUX1NUQVRF
KGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKLQkgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7Ci0JCS8qIHVuZXhw
ZWN0ZWQgU0hVVERPV04tQUNLLi4uIHNvIGlnbm9yZS4uLiAqLwotCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGFzb2MtPmNvbnRyb2xfcGRhcGkpIHsKLQkJLyog
V2l0aCBhIG5vcm1hbCBzaHV0ZG93bgotCQkgKiB3ZSBhc3N1bWUgdGhlIGVuZCBvZiBsYXN0IHJl
Y29yZC4KLQkJICovCi0JCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJYXNv
Yy0+Y29udHJvbF9wZGFwaS0+ZW5kX2FkZGVkID0gMTsKLQkJYXNvYy0+Y29udHJvbF9wZGFwaS0+
cGRhcGlfYWJvcnRlZCA9IDE7Ci0JCWFzb2MtPmNvbnRyb2xfcGRhcGkgPSBOVUxMOwotCQlTQ1RQ
X0lOUF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewotCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdl
IHdlcmUgdW5sb2NrZWQgKi8KLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1
cm47Ci0JCX0KLSNlbmRpZgotCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5z
Y3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci0j
aWZkZWYgSU5WQVJJQU5UUwotCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpIHx8
Ci0JICAgICFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgfHwKLQkgICAgc2N0cF9pc190
aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpKSB7Ci0JCXBhbmljKCJR
dWV1ZXMgYXJlIG5vdCBlbXB0eSB3aGVuIGhhbmRsaW5nIFNIVVRET1dOLUFDSyIpOwotCX0KLSNl
bmRpZgotCS8qIHN0b3AgdGhlIHRpbWVyICovCi0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEwKTsKLQkvKiBzZW5kIFNIVVRET1dO
LUNPTVBMRVRFICovCi0Jc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5ldCwgMCk7
Ci0JLyogbm90aWZ5IHVwcGVyIGxheWVyIHByb3RvY29sICovCi0JaWYgKHN0Y2ItPnNjdHBfc29j
a2V0KSB7Ci0JCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpKSB7Ci0JCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2Nj
ID0gMDsKLQkJfQotCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNTT0NfRE9XTiwgc3Rj
YiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0JU0NUUF9TVEFUX0lOQ1JfQ09V
TlRFUjMyKHNjdHBzX3NodXRkb3duKTsKLQkvKiBmcmVlIHRoZSBUQ0IgYnV0IGZpcnN0IHNhdmUg
b2ZmIHRoZSBlcCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQotCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOwotI2VuZGlmCi0JKHZvaWQpc2N0cF9mcmVlX2Fzc29jKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfTk9STUFMX1BST0MsCi0JCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzExKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKLQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi19Ci0KLS8qCi0g
KiBTa2lwIHBhc3QgdGhlIHBhcmFtIGhlYWRlciBhbmQgdGhlbiB3ZSB3aWxsIGZpbmQgdGhlIGNo
dW5rIHRoYXQgY2F1c2VkIHRoZQotICogcHJvYmxlbS4gVGhlcmUgYXJlIHR3byBwb3NzaWJpbGl0
aWVzIEFTQ09ORiBvciBGV0QtVFNOIG90aGVyIHRoYW4gdGhhdCBhbmQKLSAqIG91ciBwZWVyIG11
c3QgYmUgYnJva2VuLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9wcm9jZXNzX3VucmVjb2dfY2h1
bmsoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwKLSAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoazsK
LQotCWNoayA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdClwaGRyICsgc2l6ZW9m
KCpwaGRyKSk7Ci0Jc3dpdGNoIChjaGstPmNodW5rX3R5cGUpIHsKLQljYXNlIFNDVFBfQVNDT05G
X0FDSzoKLQljYXNlIFNDVFBfQVNDT05GOgotCQlzY3RwX2FzY29uZl9jbGVhbnVwKHN0Y2IsIG5l
dCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9JRk9SV0FSRF9DVU1fVFNOOgotCWNhc2UgU0NUUF9G
T1JXQVJEX0NVTV9UU046Ci0JCXN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9IDA7Ci0JCWJy
ZWFrOwotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCi0JCQkiUGVlciBk
b2VzIG5vdCBzdXBwb3J0IGNodW5rIHR5cGUgJWQoJXgpPz9cbiIsCi0JCQljaGstPmNodW5rX3R5
cGUsICh1aW50MzJfdCkgY2hrLT5jaHVua190eXBlKTsKLQkJYnJlYWs7Ci0JfQotfQotCi0vKgot
ICogU2tpcCBwYXN0IHRoZSBwYXJhbSBoZWFkZXIgYW5kIHRoZW4gd2Ugd2lsbCBmaW5kIHRoZSBw
YXJhbSB0aGF0IGNhdXNlZCB0aGUKLSAqIHByb2JsZW0uICBUaGVyZSBhcmUgYSBudW1iZXIgb2Yg
cGFyYW0ncyBpbiBhIEFTQ09ORiBPUiB0aGUgcHJzY3RwIHBhcmFtCi0gKiB0aGVzZSB3aWxsIHR1
cm4gb2Ygc3BlY2lmaWMgZmVhdHVyZXMuCi0gKiBYWFg6IElzIHRoaXMgdGhlIHJpZ2h0IHRoaW5n
IHRvIGRvPwotICovCi1zdGF0aWMgdm9pZAotc2N0cF9wcm9jZXNzX3VucmVjb2dfcGFyYW0oc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkcikKLXsKLQlzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqcGJhZDsKLQotCXBiYWQgPSBwaGRyICsgMTsKLQlzd2l0Y2ggKG50
b2hzKHBiYWQtPnBhcmFtX3R5cGUpKSB7Ci0JCS8qIHByLXNjdHAgZHJhZnQgKi8KLQljYXNlIFND
VFBfUFJTQ1RQX1NVUFBPUlRFRDoKLQkJc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID0gMDsK
LQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQ6Ci0JCWJyZWFrOwotCQkv
KiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAgKi8KLQljYXNlIFNDVFBfSEFTX05BVF9TVVBQ
T1JUOgotCSAgICAgICAgc3RjYi0+YXNvYy5wZWVyX3N1cHBvcnRzX25hdCA9IDA7Ci0JICAgICAg
ICBicmVhazsKLQljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6Ci0JY2FzZSBTQ1RQX0RFTF9JUF9B
RERSRVNTOgotCWNhc2UgU0NUUF9TRVRfUFJJTV9BRERSOgotCQlzdGNiLT5hc29jLmFzY29uZl9z
dXBwb3J0ZWQgPSAwOwotCQlicmVhazsKLQljYXNlIFNDVFBfU1VDQ0VTU19SRVBPUlQ6Ci0JY2Fz
ZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIkh1
aCwgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBzdWNjZXNzPyBvciBlcnJvciBjYXVzZT9cbiIp
OwotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAotCQkJIlR1cm5pbmcgb2ZmIEFTQ09ORiB0
byB0aGlzIHN0cmFuZ2UgcGVlclxuIik7Ci0JCXN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9
IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCi0J
CQkiUGVlciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtIHR5cGUgJWQoJXgpPz9cbiIsCi0JCQlwYmFk
LT5wYXJhbV90eXBlLCAodWludDMyX3QpIHBiYWQtPnBhcmFtX3R5cGUpOwotCQlicmVhazsKLQl9
Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfaGFuZGxlX2Vycm9yKHN0cnVjdCBzY3RwX2NodW5raGRy
ICpjaCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkK
LXsKLQlpbnQgY2hrbGVuOwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyOwotCXVpbnQxNl90
IGVycm9yLCBlcnJvcl90eXBlOwotCXVpbnQxNl90IGVycm9yX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYzsKLQlpbnQgYWRqdXN0OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotI2Vu
ZGlmCi0KLQkvKiBwYXJzZSB0aHJvdWdoIGFsbCBvZiB0aGUgZXJyb3JzIGFuZCBwcm9jZXNzICov
Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCXBoZHIgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiko
KGNhZGRyX3QpY2ggKwotCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKLQljaGts
ZW4gPSBudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hk
cik7Ci0JZXJyb3IgPSAwOwotCXdoaWxlICgoc2l6ZV90KWNoa2xlbiA+PSBzaXplb2Yoc3RydWN0
IHNjdHBfcGFyYW1oZHIpKSB7Ci0JCS8qIFByb2Nlc3MgYW4gRXJyb3IgQ2F1c2UgKi8KLQkJZXJy
b3JfdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOwotCQllcnJvcl9sZW4gPSBudG9ocyhw
aGRyLT5wYXJhbV9sZW5ndGgpOwotCQlpZiAoKGVycm9yX2xlbiA+IGNoa2xlbikgfHwgKGVycm9y
X2xlbiA9PSAwKSkgewotCQkJLyogaW52YWxpZCBwYXJhbSBsZW5ndGggZm9yIHRoaXMgcGFyYW0g
Ki8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJCb2d1cyBsZW5ndGggaW4gZXJyb3Ig
cGFyYW0tIGNodW5rIGxlZnQ6JWQgZXJyb3JsZW46JWRcbiIsCi0JCQkJY2hrbGVuLCBlcnJvcl9s
ZW4pOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJLyogcmVw
b3J0IHRoZSBmaXJzdCBlcnJvciBjYXVzZSAqLwotCQkJZXJyb3IgPSBlcnJvcl90eXBlOwotCQl9
Ci0JCXN3aXRjaCAoZXJyb3JfdHlwZSkgewotCQljYXNlIFNDVFBfQ0FVU0VfSU5WQUxJRF9TVFJF
QU06Ci0JCWNhc2UgU0NUUF9DQVVTRV9NSVNTSU5HX1BBUkFNOgotCQljYXNlIFNDVFBfQ0FVU0Vf
SU5WQUxJRF9QQVJBTToKLQkJY2FzZSBTQ1RQX0NBVVNFX05PX1VTRVJfREFUQToKLQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDEsICJTb2Z0d2FyZSBlcnJvciB3ZSBnb3QgYSAlZCBiYWNrPyBX
ZSBoYXZlIGEgYnVnIDovIChvciBkbyB0aGV5PylcbiIsCi0JCQkJZXJyb3JfdHlwZSk7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX0NBVVNFX05BVF9DT0xMSURJTkdfU1RBVEU6Ci0JCSAgICAgICAg
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIENvbGxpZGluZyBzdGF0ZSBhYm9y
dCBmbGFnczoleFxuIiwKLQkJCQljaC0+Y2h1bmtfZmxhZ3MpOwotCQkJaWYgKHNjdHBfaGFuZGxl
X25hdF9jb2xsaWRpbmdfc3RhdGUoc3RjYikpIHsKLQkJCSAgcmV0dXJuICgwKTsKLQkJCX0KLQkJ
CWJyZWFrOwotCQljYXNlIFNDVFBfQ0FVU0VfTkFUX01JU1NJTkdfU1RBVEU6Ci0JCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQyLCAiUmVjZWl2ZWQgbWlzc2luZyBzdGF0ZSBhYm9ydCBmbGFnczol
eFxuIiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoLT5jaHVua19mbGFncyk7Ci0J
CQlpZiAoc2N0cF9oYW5kbGVfbmF0X21pc3Npbmdfc3RhdGUoc3RjYiwgbmV0KSkgewotCQkJICBy
ZXR1cm4gKDApOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9DQVVTRV9TVEFMRV9DT09L
SUU6Ci0JCQkvKgotCQkJICogV2Ugb25seSBhY3QgaWYgd2UgaGF2ZSBlY2hvZWQgYSBjb29raWUg
YW5kIGFyZQotCQkJICogd2FpdGluZy4KLQkJCSAqLwotCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFz
b2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgewotCQkJCWludCAqcDsKLQotCQkJCXAg
PSAoaW50ICopKChjYWRkcl90KXBoZHIgKyBzaXplb2YoKnBoZHIpKTsKLQkJCQkvKiBTYXZlIHRo
ZSB0aW1lIGRvdWJsZWQgKi8KLQkJCQlhc29jLT5jb29raWVfcHJlc2VydmVfcmVxID0gbnRvaGwo
KnApIDw8IDE7Ci0JCQkJYXNvYy0+c3RhbGVfY29va2llX2NvdW50Kys7Ci0JCQkJaWYgKGFzb2Mt
PnN0YWxlX2Nvb2tpZV9jb3VudCA+Ci0JCQkJICAgIGFzb2MtPm1heF9pbml0X3RpbWVzKSB7Ci0J
CQkJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkJCS8qIG5vdyBmcmVlIHRoZSBhc29jICovCi0jaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCXNvID0gU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9TT0NLRVRf
TE9DSyhzbywgMSk7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWF0b21pY19zdWJ0
cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkJCQkodm9pZClzY3Rw
X2ZyZWVfYXNzb2Moc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkJ
CQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEyKTsKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0J
CQkJLyogYmxhc3QgYmFjayB0byBJTklUIHN0YXRlICovCi0JCQkJc2N0cF90b3NzX29sZF9jb29r
aWVzKHN0Y2IsICZzdGNiLT5hc29jKTsKLQkJCQlhc29jLT5zdGF0ZSAmPSB+U0NUUF9TVEFURV9D
T09LSUVfRUNIT0VEOwotCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ7
Ci0JCQkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOwotCQkJCXNjdHBfc2VuZF9p
bml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJfQot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9DQVVTRV9VTlJFU09MVkFCTEVfQUREUjoKLQkJCS8qCi0J
CQkgKiBOb3RoaW5nIHdlIGNhbiBkbyBoZXJlLCB3ZSBkb24ndCBkbyBob3N0bmFtZQotCQkJICog
YWRkcmVzc2VzIHNvIGlmIHRoZSBwZWVyIGRvZXMgbm90IGxpa2UgbXkgSVB2NgotCQkJICogKG9y
IElQdjQgZm9yIHRoYXQgbWF0dGVyKSBpdCBkb2VzIG5vdCBtYXR0ZXIuIElmCi0JCQkgKiB0aGV5
IGRvbid0IHN1cHBvcnQgdGhhdCB0eXBlIG9mIGFkZHJlc3MsIHRoZXkgY2FuCi0JCQkgKiBOT1Qg
cG9zc2libHkgZ2V0IHRoYXQgcGFja2V0IHR5cGUuLi4gaS5lLiB3aXRoIG5vCi0JCQkgKiBJUHY2
IHlvdSBjYW4ndCByZWNlaXZlIGEgSVB2NiBwYWNrZXQuIHNvIHdlIGNhbgotCQkJICogc2FmZWx5
IGlnbm9yZSB0aGlzIG9uZS4gSWYgd2UgZXZlciBhZGRlZCBzdXBwb3J0Ci0JCQkgKiBmb3IgSE9T
VE5BTUUgQWRkcmVzc2VzLCB0aGVuIHdlIHdvdWxkIG5lZWQgdG8gZG8KLQkJCSAqIHNvbWV0aGlu
ZyBoZXJlLgotCQkJICovCi0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hV
Tks6Ci0JCQlzY3RwX3Byb2Nlc3NfdW5yZWNvZ19jaHVuayhzdGNiLCBwaGRyLCBuZXQpOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9DQVVTRV9VTlJFQ09HX1BBUkFNOgotCQkJc2N0cF9wcm9jZXNz
X3VucmVjb2dfcGFyYW0oc3RjYiwgcGhkcik7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0NBVVNF
X0NPT0tJRV9JTl9TSFVURE9XTjoKLQkJCS8qCi0JCQkgKiBXZSBpZ25vcmUgdGhpcyBzaW5jZSB0
aGUgdGltZXIgd2lsbCBkcml2ZSBvdXQgYQotCQkJICogbmV3IGNvb2tpZSBhbnl3YXkgYW5kIHRo
ZXJlIHRpbWVyIHdpbGwgZHJpdmUgdXMKLQkJCSAqIHRvIHNlbmQgYSBTSFVURE9XTl9DT01QTEVU
RS4gV2UgY2FuJ3Qgc2VuZCBvbmUKLQkJCSAqIGhlcmUgc2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVp
ciB0YWcuCi0JCQkgKi8KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfQ0FVU0VfREVMRVRJTkdfTEFT
VF9BRERSOgotCQljYXNlIFNDVFBfQ0FVU0VfUkVTT1VSQ0VfU0hPUlRBR0U6Ci0JCWNhc2UgU0NU
UF9DQVVTRV9ERUxFVElOR19TUkNfQUREUjoKLQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgTk9UIGdl
dCB0aGVzZSBoZXJlLCBidXQgaW4gYQotCQkJICogQVNDT05GLUFDSy4KLQkJCSAqLwotCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlBlZXIgc2VuZHMgQVNDT05GIGVycm9ycyBpbiBhIE9w
ZXJhdGlvbmFsIEVycm9yPzwlZD4/XG4iLAotCQkJCWVycm9yX3R5cGUpOwotCQkJYnJlYWs7Ci0J
CWNhc2UgU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQzoKLQkJCS8qCi0JCQkgKiBBbmQgd2hhdCwgcHJh
eSB0ZWxsIGRvIHdlIGRvIHdpdGggdGhlIGZhY3QgdGhhdAotCQkJICogdGhlIHBlZXIgaXMgb3V0
IG9mIHJlc291cmNlcz8gTm90IHJlYWxseSBzdXJlIHdlCi0JCQkgKiBjb3VsZCBkbyBhbnl0aGlu
ZyBidXQgYWJvcnQuIEkgc3VzcGVjdCB0aGlzCi0JCQkgKiBzaG91bGQgaGF2ZSBjYW1lIFdJVEgg
YW4gYWJvcnQgaW5zdGVhZCBvZiBpbiBhCi0JCQkgKiBPUC1FUlJPUi4KLQkJCSAqLwotCQkJYnJl
YWs7Ci0JCWRlZmF1bHQ6Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9oYW5k
bGVfZXJyb3I6IHVua25vd24gZXJyb3IgdHlwZSA9IDB4JXhoXG4iLAotCQkJCWVycm9yX3R5cGUp
OwotCQkJYnJlYWs7Ci0JCX0KLQkJYWRqdXN0ID0gU0NUUF9TSVpFMzIoZXJyb3JfbGVuKTsKLQkJ
Y2hrbGVuIC09IGFkanVzdDsKLQkJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSgoY2Fk
ZHJfdClwaGRyICsgYWRqdXN0KTsKLQl9Ci0Jc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1JF
TU9URV9FUlJPUiwgc3RjYiwgZXJyb3IsIGNoLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCXJldHVy
biAoMCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfaGFuZGxlX2luaXRfYWNrKHN0cnVjdCBtYnVm
ICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LCBzdHJ1Y3Qgc2N0cGhkciAqc2gs
Ci0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqY3AsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgaW50ICphYm9ydF9ub191bmxvY2ssCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LSAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lk
LAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQpCi17Ci0Jc3Ry
dWN0IHNjdHBfaW5pdF9hY2sgKmluaXRfYWNrOwotCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAotCQkic2N0cF9oYW5kbGVfaW5pdF9hY2s6IGhhbmRs
aW5nIElOSVQtQUNLXG4iKTsKLQotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMiwKLQkJCSJzY3RwX2hhbmRsZV9pbml0X2FjazogVENCIGlzIG51bGxcbiIp
OwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwg
c2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSkgewotCQkvKiBJbnZhbGlkIGxlbmd0
aCAqLwotCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9Q
QVJBTSwgIiIpOwotCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG0sIGlwaGxlbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2Vy
ciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9p
ZCwgbmV0LT5wb3J0KTsKLQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCXJldHVybiAoLTEpOwot
CX0KLQlpbml0X2FjayA9ICZjcC0+aW5pdDsKLQkvKiB2YWxpZGF0ZSBwYXJhbWV0ZXJzICovCi0J
aWYgKGluaXRfYWNrLT5pbml0aWF0ZV90YWcgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4u
LiBzZW5kIGFuIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywg
ZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJ
cmV0dXJuICgtMSk7Ci0JfQotCWlmIChudG9obChpbml0X2Fjay0+YV9yd25kKSA8IFNDVFBfTUlO
X1JXTkQpIHsKLQkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLwotCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOwot
CQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwK
LQkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZs
b3dpZCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0
KTsKLQkJKmFib3J0X25vX3VubG9jayA9IDE7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoaW5p
dF9hY2stPm51bV9pbmJvdW5kX3N0cmVhbXMgPT0gMCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4u
LiBzZW5kIGFuIGFib3J0ICovCi0JCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywg
ZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwotCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJ
cmV0dXJuICgtMSk7Ci0JfQotCWlmIChpbml0X2Fjay0+bnVtX291dGJvdW5kX3N0cmVhbXMgPT0g
MCkgewotCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFuIGFib3J0ICovCi0JCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7Ci0JCXNj
dHBfYWJvcnRfYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgbSwgaXBobGVuLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lk
LAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwot
CQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCS8qIHByb2Nlc3Mg
YWNjb3JkaW5nIHRvIGFzc29jaWF0aW9uIHN0YXRlLi4uICovCi0Jc3dpdGNoIChzdGNiLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKSB7Ci0JY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlU
OgotCQkvKiB0aGlzIGlzIHRoZSBleHBlY3RlZCBzdGF0ZSBmb3IgdGhpcyBjaHVuayAqLwotCQkv
KiBwcm9jZXNzIHRoZSBJTklULUFDSyBwYXJhbWV0ZXJzICovCi0JCWlmIChzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb24tPmRlc3Rfc3RhdGUgJgotCQkgICAgU0NUUF9BRERSX1VOQ09ORklS
TUVEKSB7Ci0JCQkvKgotCQkJICogVGhlIHByaW1hcnkgaXMgd2hlcmUgd2Ugc2VudCB0aGUgSU5J
VCwgd2UgY2FuCi0JCQkgKiBhbHdheXMgY29uc2lkZXIgaXQgY29uZmlybWVkIHdoZW4gdGhlIElO
SVQtQUNLIGlzCi0JCQkgKiByZXR1cm5lZC4gRG8gdGhpcyBiZWZvcmUgd2UgbG9hZCBhZGRyZXNz
ZXMKLQkJCSAqIHRob3VnaC4KLQkJCSAqLwotCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uLT5kZXN0X3N0YXRlICY9Ci0JCQkgICAgflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKLQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAotCQkJICAgIHN0
Y2IsIDAsICh2b2lkICopc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCQl9Ci0JCWlmIChzY3RwX3Byb2Nlc3NfaW5pdF9hY2sobSwgaXBobGVuLCBv
ZmZzZXQsIHNyYywgZHN0LCBzaCwgY3AsIHN0Y2IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV0LCBhYm9ydF9ub191bmxvY2ssCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCi0jZW5kaWYKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQpIDwgMCkgewotCQkJLyogZXJyb3IgaW4gcGFy
c2luZyBwYXJhbWV0ZXJzICovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkvKiB1cGRhdGUgb3Vy
IHN0YXRlICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJtb3ZpbmcgdG8gQ09PS0lF
LUVDSE9FRCBzdGF0ZVxuIik7Ci0JCVNDVFBfU0VUX1NUQVRFKCZzdGNiLT5hc29jLCBTQ1RQX1NU
QVRFX0NPT0tJRV9FQ0hPRUQpOwotCi0JCS8qIHJlc2V0IHRoZSBSVE8gY2FsYyAqLwotCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9H
R0lORykgewotCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJICAg
ICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKLQkJCQkgICAgICAgMCwKLQkJCQkg
ICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJICAgICAgIF9fTElORV9fKTsKLQkJfQot
CQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkodm9pZClTQ1RQX0dFVFRJ
TUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOwotCQkvKgotCQkgKiBjb2xsYXBz
ZSB0aGUgaW5pdCB0aW1lciBiYWNrIGluIGNhc2Ugb2YgYSBleHBvbmVudGlhbAotCQkgKiBiYWNr
b2ZmCi0JCSAqLwotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9DT09LSUUsIHN0
Y2ItPnNjdHBfZXAsCi0JCSAgICBzdGNiLCBuZXQpOwotCQkvKgotCQkgKiB0aGUgc2VuZCBhdCB0
aGUgZW5kIG9mIHRoZSBpbmJvdW5kIGRhdGEgcHJvY2Vzc2luZyB3aWxsCi0JCSAqIGNhdXNlIHRo
ZSBjb29raWUgdG8gYmUgc2VudAotCQkgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQ6Ci0JCS8qIGluY29ycmVjdCBzdGF0ZS4uLiBkaXNjYXJkICovCi0JCWJyZWFr
OwotCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgotCQkvKiBpbmNvcnJlY3Qgc3RhdGUu
Li4gZGlzY2FyZCAqLwotCQlicmVhazsKLQljYXNlIFNDVFBfU1RBVEVfT1BFTjoKLQkJLyogaW5j
b3JyZWN0IHN0YXRlLi4uIGRpc2NhcmQgKi8KLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1NUQVRFX0VN
UFRZOgotCWNhc2UgU0NUUF9TVEFURV9JTlVTRToKLQlkZWZhdWx0OgotCQkvKiBpbmNvcnJlY3Qg
c3RhdGUuLi4gZGlzY2FyZCAqLwotCQlyZXR1cm4gKC0xKTsKLQkJYnJlYWs7Ci0JfQotCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDEsICJMZWF2aW5nIGhhbmRsZS1pbml0LWFjayBlbmRcbiIpOwot
CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9wcm9jZXNz
X2Nvb2tpZV9uZXcoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gICAg
c3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgIHN0cnVjdCBz
Y3RwaGRyICpzaCwgc3RydWN0IHNjdHBfc3RhdGVfY29va2llICpjb29raWUsIGludCBjb29raWVf
bGVuLAotICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRw
LAotICAgIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9zcmMsIGludCAqbm90aWZpY2F0aW9uLAotICAg
IGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1dGhfb2Zmc2V0LCB1aW50MzJfdCBhdXRoX2xl
biwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50
MzJfdCBtZmxvd2lkLAotI2VuZGlmCi0gICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0
KTsKLQotCi0vKgotICogaGFuZGxlIGEgc3RhdGUgY29va2llIGZvciBhbiBleGlzdGluZyBhc3Nv
Y2lhdGlvbiBtOiBpbnB1dCBwYWNrZXQgbWJ1ZgotICogY2hhaW4tLSBhc3N1bWVzIGEgcHVsbHVw
IG9uIElQL1NDVFAvQ09PS0lFLUVDSE8gY2h1bmsgbm90ZTogdGhpcyBpcyBhCi0gKiAic3BsaXQi
IG1idWYgYW5kIHRoZSBjb29raWUgc2lnbmF0dXJlIGRvZXMgbm90IGV4aXN0IG9mZnNldDogb2Zm
c2V0IGludG8KLSAqIG1idWYgdG8gdGhlIGNvb2tpZS1lY2hvIGNodW5rCi0gKi8KLXN0YXRpYyBz
dHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlzdGluZyhzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywg
c3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0
cF9zdGF0ZV9jb29raWUgKmNvb2tpZSwgaW50IGNvb2tpZV9sZW4sCi0gICAgc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0
cCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKmluaXRfc3JjLCBpbnQgKm5vdGlmaWNhdGlvbiwKLSAg
ICBpbnQgYXV0aF9za2lwcGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9s
ZW4sCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICB1aW50OF90IG1mbG93dHlwZSwgdWlu
dDMyX3QgbWZsb3dpZCwKLSNlbmRpZgotICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9y
dCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9pbml0
X2NodW5rICppbml0X2NwLCBpbml0X2J1ZjsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAq
aW5pdGFja19jcCwgaW5pdGFja19idWY7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVj
dCBtYnVmICpvcF9lcnI7Ci0JaW50IGluaXRfb2Zmc2V0LCBpbml0YWNrX29mZnNldCwgaTsKLQlp
bnQgcmV0dmFsOwotCWludCBzcGVjX2ZsYWcgPSAwOwotCXVpbnQzMl90IGhvd19pbmR4OwotI2lm
IGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJfU1RBVFMpCi0JaW50IGo7Ci0jZW5kaWYKLQotCW5l
dCA9ICpuZXRwOwotCS8qIEkga25vdyB0aGF0IHRoZSBUQ0IgaXMgbm9uLU5VTEwgZnJvbSB0aGUg
Y2FsbGVyICovCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWZvciAoaG93X2luZHggPSAwOyBob3df
aW5keCAgPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdyk7IGhvd19pbmR4KyspIHsKLQkJaWYgKGFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID09IDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKGhvd19p
bmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKSB7Ci0JCWFzb2MtPmNvb2tpZV9ob3dbaG93
X2luZHhdID0gMTsKLQl9Ci0JaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVf
U0hVVERPV05fQUNLX1NFTlQpIHsKLQkJLyogU0hVVERPV04gY2FtZSBpbiBhZnRlciBzZW5kaW5n
IElOSVQtQUNLICovCi0JCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0NBVVNFX0NPT0tJRV9JTl9TSFVURE9XTiwgIiIpOwotCQlzY3RwX3NlbmRfb3BlcnJfdG8oc3Jj
LCBkc3QsIHNoLCBjb29raWUtPnBlZXJzX3Z0YWcsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZp
Ym51bSwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBuZXQtPnBvcnQpOwot
CQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29r
aWVfaG93W2hvd19pbmR4XSA9IDI7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogZmlu
ZCBhbmQgdmFsaWRhdGUgdGhlIElOSVQgY2h1bmsgaW4gdGhlIGNvb2tpZSAocGVlcidzIGluZm8p
IHRoZQotCSAqIElOSVQgc2hvdWxkIHN0YXJ0IGFmdGVyIHRoZSBjb29raWUtZWNobyBoZWFkZXIg
c3RydWN0IChjaHVuawotCSAqIGhlYWRlciwgc3RhdGUgY29va2llIGhlYWRlciBzdHJ1Y3QpCi0J
ICovCi0JaW5pdF9vZmZzZXQgPSBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9l
Y2hvX2NodW5rKTsKLQotCWluaXRfY3AgPSAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKQotCQlz
Y3RwX21fZ2V0cHRyKG0sIGluaXRfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVu
ayksCi0JCQkgICAgICAodWludDhfdCAqKSAmIGluaXRfYnVmKTsKLQlpZiAoaW5pdF9jcCA9PSBO
VUxMKSB7Ci0JCS8qIGNvdWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUgKi8KLQkJ
cmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9J
TklUSUFUSU9OKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogZmluZCBhbmQgdmFs
aWRhdGUgdGhlIElOSVQtQUNLIGNodW5rIGluIHRoZSBjb29raWUgKG15IGluZm8pIHRoZQotCSAq
IElOSVQtQUNLIGZvbGxvd3MgdGhlIElOSVQgY2h1bmsKLQkgKi8KLQlpbml0YWNrX29mZnNldCA9
IGluaXRfb2Zmc2V0ICsgU0NUUF9TSVpFMzIobnRvaHMoaW5pdF9jcC0+Y2guY2h1bmtfbGVuZ3Ro
KSk7Ci0JaW5pdGFja19jcCA9IChzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqKQotCQlzY3Rw
X21fZ2V0cHRyKG0sIGluaXRhY2tfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tf
Y2h1bmspLAotCQkJICAgICAgKHVpbnQ4X3QgKikgJiBpbml0YWNrX2J1Zik7Ci0JaWYgKGluaXRh
Y2tfY3AgPT0gTlVMTCkgewotCQkvKiBjb3VsZCBub3QgcHVsbCBJTklULUFDSyBjaHVuayBpbiBj
b29raWUgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRhY2tfY3AtPmNoLmNodW5r
X3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OX0FDSykgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlp
ZiAoKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92dGFn
KSAmJgotCSAgICAobnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0ZV90YWcpID09IGFzb2MtPnBl
ZXJfdnRhZykpIHsKLQkJLyoKLQkJICogY2FzZSBEIGluIFNlY3Rpb24gNS4yLjQgVGFibGUgMjog
TU1BQSBwcm9jZXNzIGFjY29yZGluZ2x5Ci0JCSAqIHRvIGdldCBpbnRvIHRoZSBPUEVOIHN0YXRl
Ci0JCSAqLwotCQlpZiAobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3RzbikgIT0gYXNv
Yy0+aW5pdF9zZXFfbnVtYmVyKSB7Ci0JCQkvKi0KLQkJCSAqIE9wcHMsIHRoaXMgbWVhbnMgdGhh
dCB3ZSBzb21laG93IGdlbmVyYXRlZCB0d28gdnRhZydzCi0JCQkgKiB0aGUgc2FtZS4gSS5lLiB3
ZSBkaWQ6Ci0JCQkgKiAgVXMgICAgICAgICAgICAgICBQZWVyCi0JCQkgKiAgIDwtLS1JTklUKHRh
Zz1hKS0tLS0tLQotCQkJICogICAtLS0tSU5JVC1BQ0sodGFnPXQpLS0+Ci0JCQkgKiAgIC0tLS1J
TklUKHRhZz10KS0tLS0tLT4gKjEKLQkJCSAqICAgPC0tLUlOSVQtQUNLKHRhZz1hKS0tLQotICAg
ICAgICAgICAgICAgICAgICAgICAgICogICA8LS0tLUNFKHRhZz10KS0tLS0tLS0tLS0tLS0gKjIK
LQkJCSAqCi0JCQkgKiBBdCBwb2ludCAqMSB3ZSBzaG91bGQgYmUgZ2VuZXJhdGluZyBhIGRpZmZl
cmVudAotCQkJICogdGFnIHQnLiBXaGljaCBtZWFucyB3ZSB3b3VsZCB0aHJvdyBhd2F5IHRoZSBD
RSBhbmQgc2VuZAotCQkJICogb3VycyBpbnN0ZWFkLiBCYXNpY2FsbHkgdGhpcyBpcyBjYXNlIEMg
KHRocm93IGF3YXkgc2lkZSkuCi0JCQkgKi8KLQkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29j
LT5jb29raWVfaG93KSkKLQkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE3OwotCQkJ
cmV0dXJuIChOVUxMKTsKLQotCQl9Ci0JCXN3aXRjaCAoU0NUUF9HRVRfU1RBVEUoYXNvYykpIHsK
LQkJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKLQkJCWNhc2UgU0NUUF9TVEFURV9DT09L
SUVfRUNIT0VEOgotCQkJCS8qCi0JCQkJICogSU5JVCB3YXMgc2VudCBidXQgZ290IGEgQ09PS0lF
X0VDSE8gd2l0aCB0aGUKLQkJCQkgKiBjb3JyZWN0IHRhZ3MuLi4ganVzdCBhY2NlcHQgaXQuLi5i
dXQgd2UgbXVzdAotCQkJCSAqIHByb2Nlc3MgdGhlIGluaXQgc28gdGhhdCB3ZSBjYW4gbWFrZSBz
dXJlIHdlCi0JCQkJICogaGF2ZSB0aGUgcmlnaHQgc2VxIG5vJ3MuCi0JCQkJICovCi0JCQkJLyog
Rmlyc3Qgd2UgbXVzdCBwcm9jZXNzIHRoZSBJTklUICEhICovCi0JCQkJcmV0dmFsID0gc2N0cF9w
cm9jZXNzX2luaXQoaW5pdF9jcCwgc3RjYik7Ci0JCQkJaWYgKHJldHZhbCA8IDApIHsKLQkJCQkJ
aWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCQkJYXNvYy0+Y29v
a2llX2hvd1tob3dfaW5keF0gPSAzOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQkv
KiB3ZSBoYXZlIGFscmVhZHkgcHJvY2Vzc2VkIHRoZSBJTklUIHNvIG5vIHByb2JsZW0gKi8KLQkJ
CQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLAotCQkJCSAg
ICAgICAgICAgICAgICBzdGNiLCBuZXQsCi0JCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOUFVUICsgU0NUUF9MT0NfMTMpOwotCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVS
X1RZUEVfSU5JVCwgaW5wLAotCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCi0JCQkJICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMTQpOwotCQkJCS8q
IHVwZGF0ZSBjdXJyZW50IHN0YXRlICovCi0JCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09
IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkKLQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMy
KHNjdHBzX2FjdGl2ZWVzdGFiKTsKLQkJCQllbHNlCi0JCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5U
RVIzMihzY3Rwc19jb2xsaXNpb25lc3RhYik7Ci0KLQkJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBT
Q1RQX1NUQVRFX09QRU4pOwotCQkJCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERP
V05fUEVORElORykgewotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTkdVQVJELAotCQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rl
c3RpbmF0aW9uKTsKLQkJCQl9Ci0JCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJy
ZXN0YWIpOwotCQkJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKLQkJCQlpZiAo
KChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
LQkJCQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkpICYmCi0JCQkJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkpIHsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQkJ
c3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYKLQkJCQkJLyoKLQkJCQkJICogSGVyZSBpcyB3aGVy
ZSBjb2xsaXNpb24gd291bGQgZ28gaWYgd2UKLQkJCQkJICogZGlkIGEgY29ubmVjdCgpIGFuZCBp
bnN0ZWFkIGdvdCBhCi0JCQkJCSAqIGluaXQvaW5pdC1hY2svY29va2llIGRvbmUgYmVmb3JlIHRo
ZQotCQkJCQkgKiBpbml0LWFjayBjYW1lIGJhY2suLgotCQkJCQkgKi8KLQkJCQkJc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyB8PQotCQkJCQkJU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJ
CQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCQkJCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJ
CVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJ
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQkJaWYgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCQkJCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7Ci0JCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCQl9Ci0jZW5kaWYK
LQkJCQkJc29pc2Nvbm5lY3RlZChzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJCQl9Ci0JCQkJLyogbm90aWZ5IHVwcGVyIGxheWVy
ICovCi0JCQkJKm5vdGlmaWNhdGlvbiA9IFNDVFBfTk9USUZZX0FTU09DX1VQOwotCQkJCS8qCi0J
CQkJICogc2luY2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFrZSBzdXJlIHdlCi0JCQkJICogZG9u
J3QgZG91YmxlIHRoaW5ncwotCQkJCSAqLwotCQkJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsKLQkJ
CQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2VudGVyZWQ7Ci0JCQkJbmV0LT5SVE8gPSBzY3RwX2NhbGN1
bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0LAotCQkJCQkJCSAgICAgICZ0aW1lX2VudGVyZWQsCi0J
CQkJCQkJICAgICAgc2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCi0JCQkJCQkJICAgICAgU0NU
UF9SVFRfRlJPTV9OT05fREFUQSk7Ci0JCQkJY29va2llLT50aW1lX2VudGVyZWQgPSB0aW1lX2Vu
dGVyZWQ7Ci0KLQkJCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgotCQkJ
CSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFKSkp
IHsKLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLAotCQkJ
CQkJCSBpbnAsIHN0Y2IsIE5VTEwpOwotCQkJCX0KLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0J
CQkJLyoKLQkJCQkgKiB3ZSdyZSBpbiB0aGUgT1BFTiBzdGF0ZSAob3IgYmV5b25kKSwgc28KLQkJ
CQkgKiBwZWVyIG11c3QgaGF2ZSBzaW1wbHkgbG9zdCB0aGUgQ09PS0lFLUFDSwotCQkJCSAqLwot
CQkJCWJyZWFrOwotCQl9CS8qIGVuZCBzd2l0Y2ggKi8KLQkJc2N0cF9zdG9wX2FsbF9jb29raWVf
dGltZXJzKHN0Y2IpOwotCQkvKgotCQkgKiBXZSBpZ25vcmUgdGhlIHJldHVybiBjb2RlIGhlcmUu
LiBub3Qgc3VyZSBpZiB3ZSBzaG91bGQKLQkJICogc29tZWhvdyBhYm9ydC4uIGJ1dCB3ZSBkbyBo
YXZlIGFuIGV4aXN0aW5nIGFzb2MuIFRoaXMKLQkJICogcmVhbGx5IHNob3VsZCBub3QgZmFpbC4K
LQkJICovCi0JCWlmIChzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAotCQkJ
CQkJICBpbml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKLQkJCQkJ
CSAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkg
ewotCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2Mt
PmNvb2tpZV9ob3dbaG93X2luZHhdID0gNDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJLyog
cmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwotCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3Rj
YiwgYXNvYyk7Ci0JCXNjdHBfc2VuZF9jb29raWVfYWNrKHN0Y2IpOwotCQlpZiAoaG93X2luZHgg
PCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4
XSA9IDU7Ci0JCXJldHVybiAoc3RjYik7Ci0JfQotCi0JaWYgKG50b2hsKGluaXRhY2tfY3AtPmlu
aXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5teV92dGFnICYmCi0JICAgIG50b2hsKGluaXRfY3At
PmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5wZWVyX3Z0YWcgJiYKLQkgICAgY29va2llLT50
aWVfdGFnX215X3Z0YWcgPT0gMCAmJgotCSAgICBjb29raWUtPnRpZV90YWdfcGVlcl92dGFnID09
IDApIHsKLQkJLyoKLQkJICogY2FzZSBDIGluIFNlY3Rpb24gNS4yLjQgVGFibGUgMjogWE1PTyBz
aWxlbnRseSBkaXNjYXJkCi0JCSAqLwotCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29v
a2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDY7Ci0JCXJldHVybiAo
TlVMTCk7Ci0JfQotCS8qIElmIG5hdCBzdXBwb3J0LCBhbmQgdGhlIGJlbG93IGFuZCBzdGNiIGlz
IGVzdGFibGlzaGVkLAotCSAqIHNlbmQgYmFjayBhIEFCT1JUKGNvbGxpZGluZyBzdGF0ZSkgaWYg
d2UgYXJlIGVzdGFibGlzaGVkLgotCSAqLwotCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9PUEVOKSAgJiYKLQkgICAgKGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSAmJgot
CSAgICAoKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92
dGFnKSAmJgotCSAgICAoKG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29j
LT5wZWVyX3Z0YWcpIHx8Ci0JICAgICAoYXNvYy0+cGVlcl92dGFnID09IDApKSkpIHsKLQkJLyog
U3BlY2lhbCBjYXNlIC0gUGVlcidzIHN1cHBvcnQgbmF0LiBXZSBtYXkgaGF2ZQotCQkgKiB0d28g
aW5pdCdzIHRoYXQgd2UgZ2F2ZSBvdXQgdGhlIHNhbWUgdGFnIG9uIHNpbmNlCi0JCSAqIG9uZSB3
YXMgbm90IGVzdGFibGlzaGVkLi4gaS5lLiB3ZSBnZXQgSU5JVCBmcm9tIGhvc3QtMQotCQkgKiBi
ZWhpbmQgdGhlIG5hdCBhbmQgd2UgcmVzcG9uZCB0YWctYSwgd2UgZ2V0IGEgSU5JVCBmcm9tCi0J
CSAqIGhvc3QtMiBiZWhpbmQgdGhlIG5hdCBhbmQgd2UgZ2V0IHRhZy1hIGFnYWluLiBUaGVuIHdl
Ci0JCSAqIGJyaW5nIHVwIGhvc3QtMSAob3IgMidzKSBhc3NvYywgVGhlbiBjb21lcyB0aGUgY29v
a2llCi0JCSAqIGZyb20gaHNvdC0yIChvciAxKS4gTm93IHdlIGhhdmUgY29sbGlkaW5nIHN0YXRl
LiBXZSBtdXN0Ci0JCSAqIHNlbmQgYW4gYWJvcnQgaGVyZSB3aXRoIGNvbGxpZGluZyBzdGF0ZSBp
bmRpY2F0aW9uLgotCQkgKi8KLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NB
VVNFX05BVF9DT0xMSURJTkdfU1RBVEUsICIiKTsKLQkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxl
biwgIHNyYywgZHN0LCBzaCwgMCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0J
CSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlm
Ci0JCSAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0K
LQlpZiAoKG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSA9PSBhc29jLT5teV92
dGFnKSAmJgotCSAgICAoKG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29j
LT5wZWVyX3Z0YWcpIHx8Ci0JICAgICAoYXNvYy0+cGVlcl92dGFnID09IDApKSkgewotCQkvKgot
CQkgKiBjYXNlIEIgaW4gU2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBNWEFBIG9yIE1PQUEgbXkgaW5m
bwotCQkgKiBzaG91bGQgYmUgb2ssIHJlLWFjY2VwdCBwZWVyIGluZm8KLQkJICovCi0JCWlmIChu
dG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYWxfdHNuKSAhPSBhc29jLT5pbml0X3NlcV9udW1i
ZXIpIHsKLQkJCS8qIEV4dGVuc2lvbiBvZiBjYXNlIEMuCi0JCQkgKiBJZiB3ZSBoaXQgdGhpcywg
dGhlbiB0aGUgcmFuZG9tIG51bWJlcgotCQkJICogZ2VuZXJhdG9yIHJldHVybmVkIHRoZSBzYW1l
IHZ0YWcgd2hlbiB3ZQotCQkJICogZmlyc3Qgc2VudCBvdXIgSU5JVC1BQ0sgYW5kIHdoZW4gd2Ug
bGF0ZXIgc2VudAotCQkJICogb3VyIElOSVQuIFRoZSBzaWRlIHdpdGggdGhlIHNlcSBudW1iZXJz
IHRoYXQgYXJlCi0JCQkgKiBkaWZmZXJlbnQgd2lsbCBiZSB0aGUgb25lIHRoYXQgbm9ybW5hbGx5
IHdvdWxkCi0JCQkgKiBoYXZlIGhpdCBjYXNlIEMuIFRoaXMgaW4gZWZmZWN0ICJleHRlbmRzIiBv
dXIgdnRhZ3MKLQkJCSAqIGluIHRoaXMgY29sbGlzaW9uIGNhc2UgdG8gYmUgNjQgYml0cy4gVGhl
IHNhbWUgY29sbGlzaW9uCi0JCQkgKiBjb3VsZCBvY2N1ciBha2EgeW91IGdldCBib3RoIHZ0YWcg
YW5kIHNlcSBudW1iZXIgdGhlCi0JCQkgKiBzYW1lIHR3aWNlIGluIGEgcm93Li4gYnV0IGlzIG11
Y2ggbGVzcyBsaWtlbHkuIElmIGl0Ci0JCQkgKiBkaWQgaGFwcGVuIHRoZW4gd2Ugd291bGQgcHJv
Y2VlZCB0aHJvdWdoIGFuZCBicmluZwotCQkJICogdXAgdGhlIGFzc29jLi4gd2UgbWF5IGVuZCB1
cCB3aXRoIHRoZSB3cm9uZyBzdHJlYW0KLQkJCSAqIHNldHVwIGhvd2V2ZXIuLiB3aGljaCB3b3Vs
ZCBiZSBiYWQuLiBidXQgdGhlcmUgaXMKLQkJCSAqIG5vIHdheSB0byB0ZWxsLi4gdW50aWwgd2Ug
c2VuZCBvbiBhIHN0cmVhbSB0aGF0IGRvZXMKLQkJCSAqIG5vdCBleGlzdCA6LSkKLQkJCSAqLwot
CQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2MtPmNv
b2tpZV9ob3dbaG93X2luZHhdID0gNzsKLQotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlpZiAo
aG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQlhc29jLT5jb29raWVfaG93
W2hvd19pbmR4XSA9IDg7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRC
RUFULCBpbnAsIHN0Y2IsIG5ldCwKLQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lO
UFVUICsgU0NUUF9MT0NfMTUpOwotCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7
Ci0JCS8qCi0JCSAqIHNpbmNlIHdlIGRpZCBub3Qgc2VuZCBhIEhCIG1ha2Ugc3VyZSB3ZSBkb24n
dCBkb3VibGUKLQkJICogdGhpbmdzCi0JCSAqLwotCQluZXQtPmhiX3Jlc3BvbmRlZCA9IDE7Ci0J
CWlmIChzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3RpY2tzICYmCi0JCSAgICBzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7Ci0JCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UsIGlucCwgc3RjYiwKLQkJCQkJIE5VTEwp
OwotCQl9Ci0JCWFzb2MtPm15X3J3bmQgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmFfcnduZCk7
Ci0JCWFzb2MtPnByZV9vcGVuX3N0cmVhbXMgPSBudG9ocyhpbml0YWNrX2NwLT5pbml0Lm51bV9v
dXRib3VuZF9zdHJlYW1zKTsKLQotCQlpZiAobnRvaGwoaW5pdF9jcC0+aW5pdC5pbml0aWF0ZV90
YWcpICE9IGFzb2MtPnBlZXJfdnRhZykgewotCQkJLyogT2sgdGhlIHBlZXIgcHJvYmFibHkgZGlz
Y2FyZGVkIG91cgotCQkJICogZGF0YSAoaWYgd2UgZWNob2VkIGEgY29va2llK2RhdGEpLiBTbyBh
bnl0aGluZwotCQkJICogb24gdGhlIHNlbnRfcXVldWUgc2hvdWxkIGJlIG1hcmtlZCBmb3IKLQkJ
CSAqIHJldHJhbnNtaXQsIHdlIG1heSBub3QgZ2V0IHNvbWV0aGluZyB0bwotCQkJICoga2ljayB1
cyBzbyBpdCBDT1VMRCBzdGlsbCB0YWtlIGEgdGltZW91dAotCQkJICogdG8gbW92ZSB0aGVzZS4u
IGJ1dCBpdCBjYW4ndCBodXJ0IHRvIG1hcmsgdGhlbS4KLQkJCSAqLwotCQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqY2hrOwotCQkgICAgICAgIFRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNv
Yy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRB
R1JBTV9SRVNFTkQpIHsKLQkJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0J
CQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UoY2hrKTsKLQkJCQkJc2N0cF90b3RhbF9mbGln
aHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKLQkJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29j
LnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJCXNwZWNfZmxhZysrOwotCQkJCX0KLQkJCX0K
LQotCQl9Ci0JCS8qIHByb2Nlc3MgdGhlIElOSVQgaW5mbyAocGVlcidzIGluZm8pICovCi0JCXJl
dHZhbCA9IHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOwotCQlpZiAocmV0dmFsIDwg
MCkgewotCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFz
b2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gOTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJ
aWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0KHN0Y2IsIG0sCi0JCQkJCQkgIGluaXRf
b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCQkJCQkJICBpbml0YWNr
X29mZnNldCwgc3JjLCBkc3QsIGluaXRfc3JjLCBzdGNiLT5hc29jLnBvcnQpKSB7Ci0JCQlpZiAo
aG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQkJYXNvYy0+Y29va2llX2hv
d1tob3dfaW5keF0gPSAxMDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8Ci0JCSAgICAoYXNvYy0+c3RhdGUgJiBT
Q1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7Ci0JCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJ
RllfQVNTT0NfVVA7Ci0KLQkJCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgotCQkJICAgICghU0NUUF9JU19MSVNU
RU5JTkcoaW5wKSkpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKLQkJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCQkJCXN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0KLQkJCQkJU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQot
CQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7Ci0JCQkJYXRvbWljX2FkZF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJ
U0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewotCQkJCQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLSNlbmRpZgotCQkJCXNv
aXNjb25uZWN0ZWQoc3RjYi0+c2N0cF9zb2NrZXQpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhz
bywgMSk7Ci0jZW5kaWYKLQkJCX0KLQkJCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX0NPT0tJRV9FQ0hPRUQpCi0JCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBz
X2FjdGl2ZWVzdGFiKTsKLQkJCWVsc2UKLQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0
cHNfY29sbGlzaW9uZXN0YWIpOwotCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJy
ZXN0YWIpOwotCQl9IGVsc2UgaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVf
T1BFTikgewotCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3Jlc3RhcnRlc3RhYik7
Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfY29sbGlzaW9u
ZXN0YWIpOwotCQl9Ci0JCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7Ci0J
CWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgewotCQkJc2N0
cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKLQkJCQkJIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOwotCQl9Ci0JCXNjdHBf
c3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKLQkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0
Y2IsIGFzb2MpOwotCQlzY3RwX3NlbmRfY29va2llX2FjayhzdGNiKTsKLQkJaWYgKHNwZWNfZmxh
ZykgewotCQkJLyogb25seSBpZiB3ZSBoYXZlIHJldHJhbnMgc2V0IGRvIHdlIGRvIHRoaXMuIFdo
YXQKLQkJCSAqIHRoaXMgY2FsbCBkb2VzIGlzIGdldCBvbmx5IHRoZSBDT09LSUUtQUNLIG91dAot
CQkJICogYW5kIHRoZW4gd2hlbiB3ZSByZXR1cm4gdGhlIG5vcm1hbCBjYWxsIHRvCi0JCQkgKiBz
Y3RwX2NodW5rX291dHB1dCB3aWxsIGdldCB0aGUgcmV0cmFucyBvdXQKLQkJCSAqIGJlaGluZCB0
aGlzLgotCQkJICovCi0JCQlzY3RwX2NodW5rX291dHB1dChpbnAsc3RjYiwgU0NUUF9PVVRQVVRf
RlJPTV9DT09LSUVfQUNLLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQl9Ci0JCWlmIChob3dfaW5k
eCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2lu
ZHhdID0gMTE7Ci0KLQkJcmV0dXJuIChzdGNiKTsKLQl9Ci0JaWYgKChudG9obChpbml0YWNrX2Nw
LT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNvYy0+bXlfdnRhZyAmJgotCSAgICAgbnRvaGwoaW5p
dF9jcC0+aW5pdC5pbml0aWF0ZV90YWcpICE9IGFzb2MtPnBlZXJfdnRhZykgJiYKLQkgICAgY29v
a2llLT50aWVfdGFnX215X3Z0YWcgPT0gYXNvYy0+bXlfdnRhZ19ub25jZSAmJgotCSAgICBjb29r
aWUtPnRpZV90YWdfcGVlcl92dGFnID09IGFzb2MtPnBlZXJfdnRhZ19ub25jZSAmJgotCSAgICBj
b29raWUtPnRpZV90YWdfcGVlcl92dGFnICE9IDApIHsKLQkJc3RydWN0IHNjdHBhc29jaGVhZCAq
aGVhZDsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQkJc3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYKLQotCQlpZiAoYXNvYy0+cGVlcl9z
dXBwb3J0c19uYXQpIHsKLQkJCS8qIFRoaXMgaXMgYSBncm9zcyBncm9zcyBoYWNrLgotCQkJICog
SnVzdCBjYWxsIHRoZSBjb29raWVfbmV3IGNvZGUgc2luY2Ugd2UKLQkJCSAqIGFyZSBhbGxvd2lu
ZyBhIGR1cGxpY2F0ZSBhc3NvY2lhdGlvbi4KLQkJCSAqIEkgaG9wZSB0aGlzIHdvcmtzLi4uCi0J
CQkgKi8KLQkJCXJldHVybiAoc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZz
ZXQsIHNyYywgZHN0LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY29v
a2llLCBjb29raWVfbGVuLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAs
IG5ldHAsIGluaXRfc3JjLG5vdGlmaWNhdGlvbiwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXV0aF9za2lwcGVkLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZyZl9pZCwgcG9ydCkpOwotCQl9Ci0JCS8qCi0JCSAqIGNhc2UgQSBpbiBTZWN0aW9uIDUuMi40
IFRhYmxlIDI6IFhYTU0gKHBlZXIgcmVzdGFydGVkKQotCQkgKi8KLQkJLyogdGVtcCBjb2RlICov
Ci0JCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNv
b2tpZV9ob3dbaG93X2luZHhdID0gMTI7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfSU5JVCwgaW5wLCBzdGNiLCBuZXQsCi0JCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NU
UF9JTlBVVCArIFNDVFBfTE9DXzE2KTsKLQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQ
RV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAotCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9N
X1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xNyk7Ci0KLQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICov
Ci0JCSpub3RpZmljYXRpb24gPSBTQ1RQX05PVElGWV9BU1NPQ19SRVNUQVJUOwotCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfT1BFTikgJiYKLQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAh
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkgICAgKFNDVFBfR0VUX1NUQVRF
KGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkpIHsKLQkJCVNDVFBfU1RBVF9JTkNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJfQotCQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNv
YykgPT0gU0NUUF9TVEFURV9PUEVOKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBz
X3Jlc3RhcnRlc3RhYik7Ci0JCX0gZWxzZSBpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NU
UF9TVEFURV9TSFVURE9XTl9TRU5UKSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBz
X2NvbGxpc2lvbmVzdGFiKTsKLQkJfQotCQlpZiAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NI
VVRET1dOX1BFTkRJTkcpIHsKLQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BF
Tik7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAot
CQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0K
LQkJfSBlbHNlIGlmICghKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSkg
ewotCQkJLyogbW92ZSB0byBPUEVOIHN0YXRlLCBpZiBub3QgaW4gU0hVVERPV05fU0VOVCAqLwot
CQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9PUEVOKTsKLQkJfQotCQlhc29jLT5w
cmVfb3Blbl9zdHJlYW1zID0KLQkJCW50b2hzKGluaXRhY2tfY3AtPmluaXQubnVtX291dGJvdW5k
X3N0cmVhbXMpOwotCQlhc29jLT5pbml0X3NlcV9udW1iZXIgPSBudG9obChpbml0YWNrX2NwLT5p
bml0LmluaXRpYWxfdHNuKTsKLQkJYXNvYy0+c2VuZGluZ19zZXEgPSBhc29jLT5hc2NvbmZfc2Vx
X291dCA9IGFzb2MtPnN0cl9yZXNldF9zZXFfb3V0ID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOwot
CQlhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCA9IGFzb2MtPmFzY29uZl9zZXFfb3V0IC0gMTsK
LQotCQlhc29jLT5hc2NvbmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBhc29jLT5p
bml0X3NlcV9udW1iZXIgLSAxOwotCi0JCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5p
bml0X3NlcV9udW1iZXI7Ci0KLQkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29j
LT5sYXN0X2Fja2VkX3NlcTsKLQkJaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXkpIHsKLQkJCW1lbXNl
dChhc29jLT5tYXBwaW5nX2FycmF5LCAwLAotCQkJICAgICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlf
c2l6ZSk7Ci0JCX0KLQkJaWYgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXkpIHsKLQkJCW1lbXNldChh
c29jLT5ucl9tYXBwaW5nX2FycmF5LCAwLAotCQkJICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6
ZSk7Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzbyA9IFNDVFBfSU5QX1NPKHN0
Y2ItPnNjdHBfZXApOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQlTQ1RQ
X0lOUF9JTkZPX1dMT0NLKCk7Ci0JCVNDVFBfSU5QX1dMT0NLKHN0Y2ItPnNjdHBfZXApOwotCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IC0xKTsKLQkJLyogc2VuZCB1cCBhbGwgdGhlIGRhdGEgKi8KLQkJU0NUUF9UQ0JfU0VORF9MT0NL
KHN0Y2IpOwotCi0JCXNjdHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdGNiLCAwLCAxLCBTQ1RQX1NP
X0xPQ0tFRCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsr
KSB7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7Ci0jaWYg
ZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKLQkJCWZvciAoaiA9IDA7IGogPCBTQ1RQ
X1BSX1NDVFBfTUFYICsgMTsgaisrKSB7Ci0JCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRf
c2VudFtqXSA9IDA7Ci0JCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0g
MDsKLQkJCX0KLSNlbHNlCi0JCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0g
MDsKLQkJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7Ci0jZW5kaWYK
LQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zaWQgPSBpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLm5leHRfbWlkX29yZGVyZWQgPSAwOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRf
bWlkX3Vub3JkZXJlZCA9IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5j
b21wbGV0ZSA9IDA7Ci0JCX0KLQkJLyogcHJvY2VzcyB0aGUgSU5JVC1BQ0sgaW5mbyAobXkgaW5m
bykgKi8KLQkJYXNvYy0+bXlfdnRhZyA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5pdGlhdGVf
dGFnKTsKLQkJYXNvYy0+bXlfcnduZCA9IG50b2hsKGluaXRhY2tfY3AtPmluaXQuYV9yd25kKTsK
LQotCQkvKiBwdWxsIGZyb20gdnRhZyBoYXNoICovCi0JCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBf
YXNvY3MpOwotCQkvKiByZS1pbnNlcnQgdG8gbmV3IHZ0YWcgcG9zaXRpb24gKi8KLQkJaGVhZCA9
ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5h
c29jLm15X3Z0YWcsCi0JCQkJCQkJCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07
Ci0JCS8qCi0JCSAqIHB1dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2YgYXNz
b2MncyBmb3IgdGhlCi0JCSAqIHN5c3RlbQotCQkgKi8KLQkJTElTVF9JTlNFUlRfSEVBRChoZWFk
LCBzdGNiLCBzY3RwX2Fzb2NzKTsKLQotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJ
U0NUUF9JTlBfV1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJYXNvYy0+dG90YWxf
ZmxpZ2h0ID0gMDsKLQkJYXNvYy0+dG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKLQkJLyogcHJvY2Vz
cyB0aGUgSU5JVCBpbmZvIChwZWVyJ3MgaW5mbykgKi8KLQkJcmV0dmFsID0gc2N0cF9wcm9jZXNz
X2luaXQoaW5pdF9jcCwgc3RjYik7Ci0JCWlmIChyZXR2YWwgPCAwKSB7Ci0JCQlpZiAoaG93X2lu
ZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpCi0JCQkJYXNvYy0+Y29va2llX2hvd1tob3df
aW5keF0gPSAxMzsKLQotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQkvKgotCQkgKiBzaW5jZSB3
ZSBkaWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCi0JCSAqIHRoaW5n
cwotCQkgKi8KLQkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOwotCi0JCWlmIChzY3RwX2xvYWRfYWRk
cmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAotCQkJCQkJICBpbml0X29mZnNldCArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKLQkJCQkJCSAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0
LCBpbml0X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkgewotCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9m
KGFzb2MtPmNvb2tpZV9ob3cpKQotCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTQ7
Ci0KLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJLyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFD
SyAqLwotCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JCXNjdHBfdG9zc19v
bGRfY29va2llcyhzdGNiLCBhc29jKTsKLQkJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7Ci0J
CWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKLQkJCWFzb2MtPmNvb2tp
ZV9ob3dbaG93X2luZHhdID0gMTU7Ci0KLQkJcmV0dXJuIChzdGNiKTsKLQl9Ci0JaWYgKGhvd19p
bmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQotCQlhc29jLT5jb29raWVfaG93W2hvd19p
bmR4XSA9IDE2OwotCS8qIGFsbCBvdGhlciBjYXNlcy4uLiAqLwotCXJldHVybiAoTlVMTCk7Ci19
Ci0KLQotLyoKLSAqIGhhbmRsZSBhIHN0YXRlIGNvb2tpZSBmb3IgYSBuZXcgYXNzb2NpYXRpb24g
bTogaW5wdXQgcGFja2V0IG1idWYgY2hhaW4tLQotICogYXNzdW1lcyBhIHB1bGx1cCBvbiBJUC9T
Q1RQL0NPT0tJRS1FQ0hPIGNodW5rIG5vdGU6IHRoaXMgaXMgYSAic3BsaXQiIG1idWYKLSAqIGFu
ZCB0aGUgY29va2llIHNpZ25hdHVyZSBkb2VzIG5vdCBleGlzdCBvZmZzZXQ6IG9mZnNldCBpbnRv
IG1idWYgdG8gdGhlCi0gKiBjb29raWUtZWNobyBjaHVuayBsZW5ndGg6IGxlbmd0aCBvZiB0aGUg
Y29va2llIGNodW5rIHRvOiB3aGVyZSB0aGUgaW5pdAotICogd2FzIGZyb20gcmV0dXJucyBhIG5l
dyBUQ0IKLSAqLwotc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX3Byb2Nlc3NfY29va2ll
X25ldyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICBzdHJ1Y3Qg
c29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIg
KnNoLCBzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgKmNvb2tpZSwgaW50IGNvb2tpZV9sZW4sCi0g
ICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsCi0gICAg
c3RydWN0IHNvY2thZGRyICppbml0X3NyYywgaW50ICpub3RpZmljYXRpb24sCi0gICAgaW50IGF1
dGhfc2tpcHBlZCwgdWludDMyX3QgYXV0aF9vZmZzZXQsIHVpbnQzMl90IGF1dGhfbGVuLAotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1m
bG93aWQsCi0jZW5kaWYKLSAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17Ci0J
c3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY3As
IGluaXRfYnVmOwotCXN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICppbml0YWNrX2NwLCBpbml0
YWNrX2J1ZjsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLQlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKLQlpbnQgaW5pdF9vZmZzZXQsIGluaXRhY2tfb2Zmc2V0LCBpbml0YWNr
X2xpbWl0OwotCWludCByZXR2YWw7Ci0JaW50IGVycm9yID0gMDsKLQl1aW50OF90IGF1dGhfY2h1
bmtfYnVmW1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0J
c28gPSBTQ1RQX0lOUF9TTyhpbnApOwotI2VuZGlmCi0KLQkvKgotCSAqIGZpbmQgYW5kIHZhbGlk
YXRlIHRoZSBJTklUIGNodW5rIGluIHRoZSBjb29raWUgKHBlZXIncyBpbmZvKSB0aGUKLQkgKiBJ
TklUIHNob3VsZCBzdGFydCBhZnRlciB0aGUgY29va2llLWVjaG8gaGVhZGVyIHN0cnVjdCAoY2h1
bmsKLQkgKiBoZWFkZXIsIHN0YXRlIGNvb2tpZSBoZWFkZXIgc3RydWN0KQotCSAqLwotCWluaXRf
b2Zmc2V0ID0gb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rKTsK
LQlpbml0X2NwID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKikKLQkgICAgc2N0cF9tX2dldHB0
cihtLCBpbml0X29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspLAotCSAgICAo
dWludDhfdCAqKSAmIGluaXRfYnVmKTsKLQlpZiAoaW5pdF9jcCA9PSBOVUxMKSB7Ci0JCS8qIGNv
dWxkIG5vdCBwdWxsIGEgSU5JVCBjaHVuayBpbiBjb29raWUgKi8KLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMSwKLQkJCSJwcm9jZXNzX2Nvb2tpZV9uZXc6IGNvdWxkIG5vdCBwdWxsIElOSVQg
Y2h1bmsgaGRyXG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGluaXRfY3AtPmNoLmNo
dW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBV
VDEsICJIVUg/IHByb2Nlc3NfY29va2llX25ldzogY291bGQgbm90IGZpbmQgSU5JVCBjaHVuayFc
biIpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpbml0YWNrX29mZnNldCA9IGluaXRfb2Zmc2V0
ICsgU0NUUF9TSVpFMzIobnRvaHMoaW5pdF9jcC0+Y2guY2h1bmtfbGVuZ3RoKSk7Ci0JLyoKLQkg
KiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVC1BQ0sgY2h1bmsgaW4gdGhlIGNvb2tpZSAobXkg
aW5mbykgdGhlCi0JICogSU5JVC1BQ0sgZm9sbG93cyB0aGUgSU5JVCBjaHVuawotCSAqLwotCWlu
aXRhY2tfY3AgPSAoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKikKLQkgICAgc2N0cF9tX2dl
dHB0cihtLCBpbml0YWNrX29mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5r
KSwKLQkgICAgKHVpbnQ4X3QgKikgJiBpbml0YWNrX2J1Zik7Ci0JaWYgKGluaXRhY2tfY3AgPT0g
TlVMTCkgewotCQkvKiBjb3VsZCBub3QgcHVsbCBJTklULUFDSyBjaHVuayBpbiBjb29raWUgKi8K
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgInByb2Nlc3NfY29va2llX25ldzogY291bGQg
bm90IHB1bGwgSU5JVC1BQ0sgY2h1bmsgaGRyXG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0J
aWYgKGluaXRhY2tfY3AtPmNoLmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OX0FDSykgewot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIE5PVEU6IFdlIGNhbid0IHVzZSB0aGUgSU5J
VF9BQ0sncyBjaGtfbGVuZ3RoIHRvIGRldGVybWluZSB0aGUKLQkgKiAiaW5pdGFja19saW1pdCIg
dmFsdWUuICBUaGlzIGlzIGJlY2F1c2UgdGhlIGNoa19sZW5ndGggZmllbGQKLQkgKiBpbmNsdWRl
cyB0aGUgbGVuZ3RoIG9mIHRoZSBjb29raWUsIGJ1dCB0aGUgY29va2llIGlzIG9taXR0ZWQgd2hl
bgotCSAqIHRoZSBJTklUIGFuZCBJTklUX0FDSyBhcmUgdGFja2VkIG9udG8gdGhlIGNvb2tpZS4u
LgotCSAqLwotCWluaXRhY2tfbGltaXQgPSBvZmZzZXQgKyBjb29raWVfbGVuOwotCi0JLyoKLQkg
KiBub3cgdGhhdCB3ZSBrbm93IHRoZSBJTklUL0lOSVQtQUNLIGFyZSBpbiBwbGFjZSwgY3JlYXRl
IGEgbmV3IFRDQgotCSAqIGFuZCBwb3BsdWF0ZQotCSAqLwotCi0JLyoKLQkgKiBIZXJlIHdlIGRv
IGEgdHJpY2ssIHdlIHNldCBpbiBOVUxMIGZvciB0aGUgcHJvYy90aHJlYWQgYXJndW1lbnQuIFdl
Ci0JICogZG8gdGhpcyBzaW5jZSBpbiBlZmZlY3Qgd2Ugb25seSB1c2UgdGhlIHAgYXJndW1lbnQg
d2hlbgotCSAqIHRoZSBzb2NrZXQgaXMgdW5ib3VuZCBhbmQgd2UgbXVzdCBkbyBhbiBpbXBsaWNp
dCBiaW5kLgotCSAqIFNpbmNlIHdlIGFyZSBnZXR0aW5nIGEgY29va2llLCB3ZSBjYW5ub3QgYmUg
dW5ib3VuZC4KLQkgKi8KLQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgaW5pdF9zcmMsICZl
cnJvciwKLQkgICAgICAgICAgICAgICAgICAgICAgIG50b2hsKGluaXRhY2tfY3AtPmluaXQuaW5p
dGlhdGVfdGFnKSwgdnJmX2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgbnRvaHMoaW5pdGFj
a19jcC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyksCi0JICAgICAgICAgICAgICAgICAgICAg
ICBwb3J0LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDUwMDAwMAotCSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB0aHJlYWQgKilOVUxMCi0j
ZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCSAgICAgICAgICAgICAgICAgICAgICAgKFBLVEhS
RUFEKU5VTEwKLSNlbHNlCi0JICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHByb2MgKilO
VUxMCi0jZW5kaWYKLQkgICAgICAgICAgICAgICAgICAgICAgICk7Ci0JaWYgKHN0Y2IgPT0gTlVM
TCkgewotCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCi0JCS8qIG1lbW9yeSBwcm9ibGVtPyAqLwot
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAotCQkJInByb2Nlc3NfY29va2llX25ldzogbm8g
cm9vbSBmb3IgYW5vdGhlciBUQ0IhXG4iKTsKLQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVz
ZShTQ1RQX0NBVVNFX09VVF9PRl9SRVNDLCAiIik7Ci0JCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24o
aW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgbSwgaXBobGVuLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJcmV0dXJuIChOVUxMKTsK
LQl9Ci0JLyogZ2V0IHRoZSBjb3JyZWN0IHNjdHBfbmV0cyAqLwotCWlmIChuZXRwKQotCQkqbmV0
cCA9IHNjdHBfZmluZG5ldChzdGNiLCBpbml0X3NyYyk7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7
Ci0JLyogZ2V0IHNjb3BlIHZhcmlhYmxlcyBvdXQgb2YgY29va2llICovCi0JYXNvYy0+c2NvcGUu
aXB2NF9sb2NhbF9zY29wZSA9IGNvb2tpZS0+aXB2NF9zY29wZTsKLQlhc29jLT5zY29wZS5zaXRl
X3Njb3BlID0gY29va2llLT5zaXRlX3Njb3BlOwotCWFzb2MtPnNjb3BlLmxvY2FsX3Njb3BlID0g
Y29va2llLT5sb2NhbF9zY29wZTsKLQlhc29jLT5zY29wZS5sb29wYmFja19zY29wZSA9IGNvb2tp
ZS0+bG9vcGJhY2tfc2NvcGU7Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaWYgKChh
c29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY0X2FkZHJfbGVnYWwpIHx8
Ci0JICAgIChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwgIT0gY29va2llLT5pcHY2X2FkZHJf
bGVnYWwpIHx8Ci0JICAgIChhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwgIT0gY29va2llLT5j
b25uX2FkZHJfbGVnYWwpKSB7Ci0jZWxzZQotCWlmICgoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xl
Z2FsICE9IGNvb2tpZS0+aXB2NF9hZGRyX2xlZ2FsKSB8fAotCSAgICAoYXNvYy0+c2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+aXB2Nl9hZGRyX2xlZ2FsKSkgewotI2VuZGlmCi0JCXN0
cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQkJLyoKLQkJICogSG91c3RvbiB3ZSBoYXZlIGEgcHJvYmxl
bS4gVGhlIEVQIGNoYW5nZWQgd2hpbGUgdGhlCi0JCSAqIGNvb2tpZSB3YXMgaW4gZmxpZ2h0LiBP
bmx5IHJlY291cnNlIGlzIHRvIGFib3J0IHRoZQotCQkgKiBhc3NvY2lhdGlvbi4KLQkJICovCi0J
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIp
OwotCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEws
IG0sIGlwaGxlbiwKLQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93
aWQsCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYK
LQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJ
CQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzE4KTsKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9TT0NL
RVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKiBwcm9j
ZXNzIHRoZSBJTklULUFDSyBpbmZvIChteSBpbmZvKSAqLwotCWFzb2MtPm15X3Z0YWcgPSBudG9o
bChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZyk7Ci0JYXNvYy0+bXlfcnduZCA9IG50b2hs
KGluaXRhY2tfY3AtPmluaXQuYV9yd25kKTsKLQlhc29jLT5wcmVfb3Blbl9zdHJlYW1zID0gbnRv
aHMoaW5pdGFja19jcC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyk7Ci0JYXNvYy0+aW5pdF9z
ZXFfbnVtYmVyID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3Rzbik7Ci0JYXNvYy0+
c2VuZGluZ19zZXEgPSBhc29jLT5hc2NvbmZfc2VxX291dCA9IGFzb2MtPnN0cl9yZXNldF9zZXFf
b3V0ID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOwotCWFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2Vk
ID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgLSAxOwotCWFzb2MtPmFzY29uZl9zZXFfaW4gPSBhc29j
LT5sYXN0X2Fja2VkX3NlcSA9IGFzb2MtPmluaXRfc2VxX251bWJlciAtIDE7Ci0JYXNvYy0+c3Ry
X3Jlc2V0X3NlcV9pbiA9IGFzb2MtPmluaXRfc2VxX251bWJlcjsKLQotCWFzb2MtPmFkdmFuY2Vk
X3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7Ci0KLQkvKiBwcm9jZXNzIHRo
ZSBJTklUIGluZm8gKHBlZXIncyBpbmZvKSAqLwotCWlmIChuZXRwKQotCQlyZXR2YWwgPSBzY3Rw
X3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNiKTsKLQllbHNlCi0JCXJldHZhbCA9IDA7Ci0JaWYg
KHJldHZhbCA8IDApIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
LQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOwotI2VuZGlmCi0JCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCi0JCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9J
TlBVVCArIFNDVFBfTE9DXzE5KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRp
ZgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKiBsb2FkIGFsbCBhZGRyZXNzZXMgKi8KLQlpZiAo
c2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKLQkgICAgaW5pdF9vZmZzZXQg
KyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksIGluaXRhY2tfb2Zmc2V0LAotCSAgICBz
cmMsIGRzdCwgaW5pdF9zcmMsIHBvcnQpKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9D
SyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18yMCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhz
bywgMSk7Ci0jZW5kaWYKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyoKLQkgKiB2ZXJpZnkgYW55
IHByZWNlZGluZyBBVVRIIGNodW5rIHRoYXQgd2FzIHNraXBwZWQKLQkgKi8KLQkvKiBwdWxsIHRo
ZSBsb2NhbCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIGNvb2tpZS9pbml0LWFj
ayAqLwotCXNjdHBfYXV0aF9nZXRfY29va2llX3BhcmFtcyhzdGNiLCBtLAotCSAgICBpbml0YWNr
X29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCi0JICAgIGluaXRh
Y2tfbGltaXQgLSAoaW5pdGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tf
Y2h1bmspKSk7Ci0JaWYgKGF1dGhfc2tpcHBlZCkgewotCQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5r
ICphdXRoOwotCi0JCWF1dGggPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqKQotCQkgICAgc2N0
cF9tX2dldHB0cihtLCBhdXRoX29mZnNldCwgYXV0aF9sZW4sIGF1dGhfY2h1bmtfYnVmKTsKLQkJ
aWYgKChhdXRoID09IE5VTEwpIHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgYXV0aCwgbSwgYXV0
aF9vZmZzZXQpKSB7Ci0JCQkvKiBhdXRoIEhNQUMgZmFpbGVkLCBkdW1wIHRoZSBhc3NvYyBhbmQg
cGFja2V0ICovCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCi0JCQkJIkNPT0tJRS1FQ0hP
OiBBVVRIIGZhaWxlZFxuIik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCi0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0JCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5w
LCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjEpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCAxKTsKLSNlbmRpZgotCQkJcmV0dXJuIChOVUxMKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHJlbWFp
bmluZyBjaHVua3MgY2hlY2tlZC4uLiBnb29kIHRvIGdvICovCi0JCQlzdGNiLT5hc29jLmF1dGhl
bnRpY2F0ZWQgPSAxOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBpZiB3ZSdyZSBkb2luZyBBU0NPTkZz
LCBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhbnkgbmV3IGxvY2FsCi0JICogYWRkcmVzc2VzIHRo
YXQgbmVlZCB0byBnZXQgYWRkZWQgdG8gdGhlIHBlZXIgKGVnLiBhZGRyZXNzZXMKLQkgKiBjaGFu
Z2VkIHdoaWxlIGNvb2tpZSBlY2hvIGluIGZsaWdodCkuICBUaGlzIG5lZWRzIHRvIGJlIGRvbmUK
LQkgKiBhZnRlciB3ZSBnbyB0byB0aGUgT1BFTiBzdGF0ZSB0byBkbyB0aGUgY29ycmVjdCBhc2Nv
bmYKLQkgKiBwcm9jZXNzaW5nLiBlbHNlLCBtYWtlIHN1cmUgd2UgaGF2ZSB0aGUgY29ycmVjdCBh
ZGRyZXNzZXMgaW4gb3VyCi0JICogbGlzdHMKLQkgKi8KLQotCS8qIHdhcm5pbmcsIHdlIHJlLXVz
ZSBzaW4sIHNpbjYsIHNhX3N0b3JlIGhlcmUhICovCi0JLyogcHVsbCBpbiBsb2NhbF9hZGRyZXNz
IChvdXIgImZyb20iIGFkZHJlc3MpICovCi0Jc3dpdGNoIChjb29raWUtPmxhZGRyX3R5cGUpIHsK
LSNpZmRlZiBJTkVUCi0JY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJLyogc291cmNlIGFkZHIg
aXMgSVB2NCAqLwotCQltZW1zZXQoJnN0b3JlLnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOwotCQlzdG9yZS5zaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9T
SU5fTEVOCi0JCXN0b3JlLnNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
Ci0jZW5kaWYKLQkJc3RvcmUuc2luLnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+bGFkZHJlc3Nb
MF07Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIFNDVFBfSVBWNl9BRERS
RVNTOgotCQkvKiBzb3VyY2UgYWRkciBpcyBJUHY2ICovCi0JCW1lbXNldCgmc3RvcmUuc2luNiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJc3RvcmUuc2luNi5zaW42X2ZhbWls
eSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJc3RvcmUuc2luNi5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQlzdG9yZS5zaW42LnNp
bjZfc2NvcGVfaWQgPSBjb29raWUtPnNjb3BlX2lkOwotCQltZW1jcHkoJnN0b3JlLnNpbjYuc2lu
Nl9hZGRyLCBjb29raWUtPmxhZGRyZXNzLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCWJy
ZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgU0NUUF9DT05O
X0FERFJFU1M6Ci0JCS8qIHNvdXJjZSBhZGRyIGlzIGNvbm4gKi8KLQkJbWVtc2V0KCZzdG9yZS5z
Y29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0JCXN0b3JlLnNjb25uLnNj
b25uX2ZhbWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJc3RvcmUuc2Nv
bm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCQlt
ZW1jcHkoJnN0b3JlLnNjb25uLnNjb25uX2FkZHIsIGNvb2tpZS0+bGFkZHJlc3MsIHNpemVvZih2
b2lkICopKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBf
U09DS0VUX0xPQ0soc28sIDEpOwotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0jZW5kaWYKLQkJKHZvaWQpc2N0cF9m
cmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjIpOwotI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlTQ1RQX1NPQ0tF
VF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JLyogdXBk
YXRlIGN1cnJlbnQgc3RhdGUgKi8KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAibW92aW5n
IHRvIE9QRU4gc3RhdGVcbiIpOwotCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BF
Tik7Ci0JaWYgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7Ci0J
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCi0JCQkJIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOwotCX0KLQlzY3Rw
X3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMy
KHNjdHBzX3Bhc3NpdmVlc3RhYik7Ci0JU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJy
ZXN0YWIpOwotCi0JLyogc2V0IHVwIHRvIG5vdGlmeSB1cHBlciBsYXllciAqLwotCSpub3RpZmlj
YXRpb24gPSBTQ1RQX05PVElGWV9BU1NPQ19VUDsKLQlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKLQkgICAgKCFTQ1RQ
X0lTX0xJU1RFTklORyhpbnApKSkgewotCQkvKgotCQkgKiBUaGlzIGlzIGFuIGVuZHBvaW50IHRo
YXQgY2FsbGVkIGNvbm5lY3QoKSBob3cgaXQgZ290IGEKLQkJICogY29va2llIHRoYXQgaXMgTkVX
IGlzIGEgYml0IG9mIGEgbXlzdGVyeS4gSXQgbXVzdCBiZSB0aGF0Ci0JCSAqIHRoZSBJTklUIHdh
cyBzZW50LCBidXQgYmVmb3JlIGl0IGdvdCB0aGVyZS4uIGEgY29tcGxldGUKLQkJICogSU5JVC9J
TklULUFDSy9DT09LSUUgYXJyaXZlZC4gQnV0IG9mIGNvdXJzZSB0aGVuIGl0Ci0JCSAqIHNob3Vs
ZCBoYXZlIHdlbnQgdG8gdGhlIG90aGVyIGNvZGUuLiBub3QgaGVyZS4uIG9oIHdlbGwuLgotCQkg
KiBhIGJpdCBvZiBwcm90ZWN0aW9uIGlzIHdvcnRoIGhhdmluZy4uCi0JCSAqLwotCQlzdGNiLT5z
Y3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJ
YXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+
YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgewotCQkJU0NUUF9TT0NLRVRf
VU5MT0NLKHNvLCAxKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLSNlbmRpZgotCQlzb2lzY29u
bmVjdGVkKHN0Y2ItPnNjdHBfc29ja2V0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
LSNlbmRpZgotCX0gZWxzZSBpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSAmJgotCSAgICAgICAgICAgKFNDVFBfSVNfTElTVEVOSU5HKGlucCkp
KSB7Ci0JCS8qCi0JCSAqIFdlIGRvbid0IHdhbnQgdG8gZG8gYW55dGhpbmcgd2l0aCB0aGlzIG9u
ZS4gU2luY2UgaXQgaXMKLQkJICogdGhlIGxpc3RlbmluZyBndXkuIFRoZSB0aW1lciB3aWxsIGdl
dCBzdGFydGVkIGZvcgotCQkgKiBhY2NlcHRlZCBjb25uZWN0aW9ucyBpbiB0aGUgY2FsbGVyLgot
CQkgKi8KLQkJOwotCX0KLQkvKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUg
d2UgZG9uJ3QgZG91YmxlIHRoaW5ncyAqLwotCWlmICgobmV0cCkgJiYgKCpuZXRwKSkKLQkJKCpu
ZXRwKS0+aGJfcmVzcG9uZGVkID0gMTsKLQotCWlmIChzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3Nl
X3RpY2tzICYmCi0JICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FV
VE9DTE9TRSkpIHsKLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NF
LCBpbnAsIHN0Y2IsIE5VTEwpOwotCX0KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3Rj
Yi0+YXNvYy50aW1lX2VudGVyZWQpOwotCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0g
TlVMTCkpIHsKLQkJLyogY2FsY3VsYXRlIHRoZSBSVFQgYW5kIHNldCB0aGUgZW5jYXBzIHBvcnQg
Ki8KLQkJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwotCQkoKm5ldHApLT5SVE8gPSBzY3Rw
X2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgKm5ldHAsCi0JCQkJCQkgICZ0aW1lX2VudGVyZWQs
IHNjdHBfYWxpZ25fdW5zYWZlX21ha2Vjb3B5LAotCQkJCQkJICBTQ1RQX1JUVF9GUk9NX05PTl9E
QVRBKTsKLQkJY29va2llLT50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0JfQotCS8qIHJl
c3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KLQlzY3RwX3NlbmRfY29va2llX2FjayhzdGNiKTsK
LQotCS8qCi0JICogY2hlY2sgdGhlIGFkZHJlc3MgbGlzdHMgZm9yIGFueSBBU0NPTkZzIHRoYXQg
bmVlZCB0byBiZSBzZW50Ci0JICogQUZURVIgdGhlIGNvb2tpZS1hY2sgaXMgc2VudAotCSAqLwot
CXNjdHBfY2hlY2tfYWRkcmVzc19saXN0KHN0Y2IsIG0sCi0JICAgIGluaXRhY2tfb2Zmc2V0ICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSwKLQkgICAgaW5pdGFja19saW1pdCAt
IChpbml0YWNrX29mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuaykpLAot
CSAgICAmc3RvcmUuc2EsIGNvb2tpZS0+bG9jYWxfc2NvcGUsIGNvb2tpZS0+c2l0ZV9zY29wZSwK
LQkgICAgY29va2llLT5pcHY0X3Njb3BlLCBjb29raWUtPmxvb3BiYWNrX3Njb3BlKTsKLQotCi0J
cmV0dXJuIChzdGNiKTsKLX0KLQotLyoKLSAqIENPREUgTElLRSBUSElTIE5FRURTIFRPIFJVTiBJ
RiB0aGUgcGVlciBzdXBwb3J0cyB0aGUgTkFUIGV4dGVuc2lvbiwgaS5lCi0gKiB3ZSBORUVEIHRv
IG1ha2Ugc3VyZSB3ZSBhcmUgbm90IGFscmVhZHkgdXNpbmcgdGhlIHZ0YWcuIElmIHNvIHdlCi0g
KiBuZWVkIHRvIHNlbmQgYmFjayBhbiBBQk9SVC1UUlktQUdBSU4tV0lUSC1ORVctVEFHIE5vIG1p
ZGRsZSBib3ggYml0IQotCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NU
UF9QQ0JIQVNIX0FTT0ModGFnLAotCQkJCQkJCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21h
cmspKV07Ci0JTElTVF9GT1JFQUNIKHN0Y2IsIGhlYWQsIHNjdHBfYXNvY3MpIHsKLQkgICAgICAg
IGlmICgoc3RjYi0+YXNvYy5teV92dGFnID09IHRhZykgJiYgKHN0Y2ItPnJwb3J0ID09IHJwb3J0
KSAmJiAoaW5wID09IHN0Y2ItPnNjdHBfZXApKSAgewotCQkgICAgICAgLS0gU0VORCBBQk9SVCAt
IFRSWSBBR0FJTiAtLQotCQl9Ci0JfQotKi8KLQotLyoKLSAqIGhhbmRsZXMgYSBDT09LSUUtRUNI
TyBtZXNzYWdlIHN0Y2I6IG1vZGlmaWVkIHRvIGVpdGhlciBhIG5ldyBvciBsZWZ0IGFzCi0gKiBl
eGlzdGluZyAobm9uLU5VTEwpIFRDQgotICovCi1zdGF0aWMgc3RydWN0IG1idWYgKgotc2N0cF9o
YW5kbGVfY29va2llX2VjaG8oc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQs
Ci0gICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgIHN0
cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfY29va2llX2VjaG9fY2h1bmsgKmNwLAotICAg
IHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX3RjYiAqKnN0Y2IsIHN0cnVj
dCBzY3RwX25ldHMgKipuZXRwLAotICAgIGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1dGhf
b2Zmc2V0LCB1aW50MzJfdCBhdXRoX2xlbiwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKipsb2NrZWRf
dGNiLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgdWludDhfdCBtZmxvd3R5cGUsIHVp
bnQzMl90IG1mbG93aWQsCi0jZW5kaWYKLSAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBv
cnQpCi17Ci0Jc3RydWN0IHNjdHBfc3RhdGVfY29va2llICpjb29raWU7Ci0Jc3RydWN0IHNjdHBf
dGNiICpsX3N0Y2IgPSAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbF9pbnA7Ci0Jc3RydWN0
IHNvY2thZGRyICp0bzsKLQlzdHJ1Y3Qgc2N0cF9wY2IgKmVwOwotCXN0cnVjdCBtYnVmICptX3Np
ZzsKLQl1aW50OF90IGNhbGNfc2lnW1NDVFBfU0lHTkFUVVJFX1NJWkVdLCB0bXBfc2lnW1NDVFBf
U0lHTkFUVVJFX1NJWkVdOwotCXVpbnQ4X3QgKnNpZzsKLQl1aW50OF90IGNvb2tpZV9vayA9IDA7
Ci0JdW5zaWduZWQgaW50IHNpZ19vZmZzZXQsIGNvb2tpZV9vZmZzZXQ7Ci0JdW5zaWduZWQgaW50
IGNvb2tpZV9sZW47Ci0Jc3RydWN0IHRpbWV2YWwgbm93OwotCXN0cnVjdCB0aW1ldmFsIHRpbWVf
ZXhwaXJlczsKLQlpbnQgbm90aWZpY2F0aW9uID0gMDsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRs
OwotCWludCBoYWRfYV9leGlzdGluZ190Y2IgPSAwOwotCWludCBzZW5kX2ludF9jb25mID0gMDsK
LSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luIHNpbjsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotI2VuZGlmCi0KLQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQyLAotCQkic2N0cF9oYW5kbGVfY29va2llOiBoYW5kbGluZyBD
T09LSUUtRUNIT1xuIik7Ci0KLQlpZiAoaW5wX3AgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLQljb29raWUgPSAmY3AtPmNvb2tpZTsKLQljb29raWVfb2Zmc2V0ID0gb2Zmc2V0ICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQljb29raWVfbGVuID0gbnRvaHMoY3AtPmNo
LmNodW5rX2xlbmd0aCk7Ci0KLQlpZiAoY29va2llX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9j
b29raWVfZWNob19jaHVuaykgKwotCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykg
KwotCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspICsgU0NUUF9TSUdOQVRV
UkVfU0laRSkgewotCQkvKiBjb29raWUgdG9vIHNtYWxsICovCi0JCXJldHVybiAoTlVMTCk7Ci0J
fQotCWlmICgoY29va2llLT5wZWVycG9ydCAhPSBzaC0+c3JjX3BvcnQpIHx8Ci0JICAgIChjb29r
aWUtPm15cG9ydCAhPSBzaC0+ZGVzdF9wb3J0KSB8fAotCSAgICAoY29va2llLT5teV92dGFnICE9
IHNoLT52X3RhZykpIHsKLQkJLyoKLQkJICogaW52YWxpZCBwb3J0cyBvciBiYWQgdGFnLiAgTm90
ZSB0aGF0IHdlIGFsd2F5cyBsZWF2ZSB0aGUKLQkJICogdl90YWcgaW4gdGhlIGhlYWRlciBpbiBu
ZXR3b3JrIG9yZGVyIGFuZCB3aGVuIHdlIHN0b3JlZAotCQkgKiBpdCBpbiB0aGUgbXlfdnRhZyBz
bG90IHdlIGFsc28gbGVmdCBpdCBpbiBuZXR3b3JrIG9yZGVyLgotCQkgKiBUaGlzIG1haW50YWlu
cyB0aGUgbWF0Y2ggZXZlbiB0aG91Z2ggaXQgbWF5IGJlIGluIHRoZQotCQkgKiBvcHBvc2l0ZSBi
eXRlIG9yZGVyIG9mIHRoZSBtYWNoaW5lIDotPgotCQkgKi8KLQkJcmV0dXJuIChOVUxMKTsKLQl9
Ci0JLyoKLQkgKiBzcGxpdCBvZmYgdGhlIHNpZ25hdHVyZSBpbnRvIGl0cyBvd24gbWJ1ZiAoc2lu
Y2UgaXQgc2hvdWxkIG5vdCBiZQotCSAqIGNhbGN1bGF0ZWQgaW4gdGhlIHNjdHBfaG1hY19tKCkg
Y2FsbCkuCi0JICovCi0Jc2lnX29mZnNldCA9IG9mZnNldCArIGNvb2tpZV9sZW4gLSBTQ1RQX1NJ
R05BVFVSRV9TSVpFOwotCW1fc2lnID0gbV9zcGxpdChtLCBzaWdfb2Zmc2V0LCBNX05PV0FJVCk7
Ci0JaWYgKG1fc2lnID09IE5VTEwpIHsKLQkJLyogb3V0IG9mIG1lbW9yeSBvciA/PyAqLwotCQly
ZXR1cm4gKE5VTEwpOwotCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUp
IHsKLQkJc2N0cF9sb2dfbWJjKG1fc2lnLCBTQ1RQX01CVUZfU1BMSVQpOwotCX0KLSNlbmRpZgot
Ci0JLyoKLQkgKiBjb21wdXRlIHRoZSBzaWduYXR1cmUvZGlnZXN0IGZvciB0aGUgY29va2llCi0J
ICovCi0JZXAgPSAmKCppbnBfcCktPnNjdHBfZXA7Ci0JbF9pbnAgPSAqaW5wX3A7Ci0JaWYgKGxf
c3RjYikgewotCQlTQ1RQX1RDQl9VTkxPQ0sobF9zdGNiKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0so
bF9pbnApOwotCWlmIChsX3N0Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DSyhsX3N0Y2IpOwotCX0KLQkv
KiB3aGljaCBjb29raWUgaXMgaXQ/ICovCi0JaWYgKChjb29raWUtPnRpbWVfZW50ZXJlZC50dl9z
ZWMgPCAobG9uZyllcC0+dGltZV9vZl9zZWNyZXRfY2hhbmdlKSAmJgotCSAgICAoZXAtPmN1cnJl
bnRfc2VjcmV0X251bWJlciAhPSBlcC0+bGFzdF9zZWNyZXRfbnVtYmVyKSkgewotCQkvKiBpdCdz
IHRoZSBvbGQgY29va2llICovCi0JCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1BQywKLQkJICAg
ICh1aW50OF90ICopZXAtPnNlY3JldF9rZXlbKGludCllcC0+bGFzdF9zZWNyZXRfbnVtYmVyXSwK
LQkJICAgIFNDVFBfU0VDUkVUX1NJWkUsIG0sIGNvb2tpZV9vZmZzZXQsIGNhbGNfc2lnLCAwKTsK
LQl9IGVsc2UgewotCQkvKiBpdCdzIHRoZSBjdXJyZW50IGNvb2tpZSAqLwotCQkodm9pZClzY3Rw
X2htYWNfbShTQ1RQX0hNQUMsCi0JCSAgICAodWludDhfdCAqKWVwLT5zZWNyZXRfa2V5WyhpbnQp
ZXAtPmN1cnJlbnRfc2VjcmV0X251bWJlcl0sCi0JCSAgICBTQ1RQX1NFQ1JFVF9TSVpFLCBtLCBj
b29raWVfb2Zmc2V0LCBjYWxjX3NpZywgMCk7Ci0JfQotCS8qIGdldCB0aGUgc2lnbmF0dXJlICov
Ci0JU0NUUF9JTlBfUlVOTE9DSyhsX2lucCk7Ci0Jc2lnID0gKHVpbnQ4X3QgKikgc2N0cF9tX2dl
dHB0cihtX3NpZywgMCwgU0NUUF9TSUdOQVRVUkVfU0laRSwgKHVpbnQ4X3QgKikgJiB0bXBfc2ln
KTsKLQlpZiAoc2lnID09IE5VTEwpIHsKLQkJLyogY291bGRuJ3QgZmluZCBzaWduYXR1cmUgKi8K
LQkJc2N0cF9tX2ZyZWVtKG1fc2lnKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyogY29tcGFy
ZSB0aGUgcmVjZWl2ZWQgZGlnZXN0IHdpdGggdGhlIGNvbXB1dGVkIGRpZ2VzdCAqLwotCWlmICht
ZW1jbXAoY2FsY19zaWcsIHNpZywgU0NUUF9TSUdOQVRVUkVfU0laRSkgIT0gMCkgewotCQkvKiB0
cnkgdGhlIG9sZCBjb29raWU/ICovCi0JCWlmICgoY29va2llLT50aW1lX2VudGVyZWQudHZfc2Vj
ID09IChsb25nKWVwLT50aW1lX29mX3NlY3JldF9jaGFuZ2UpICYmCi0JCSAgICAoZXAtPmN1cnJl
bnRfc2VjcmV0X251bWJlciAhPSBlcC0+bGFzdF9zZWNyZXRfbnVtYmVyKSkgewotCQkJLyogY29t
cHV0ZSBkaWdlc3Qgd2l0aCBvbGQgKi8KLQkJCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1BQywK
LQkJCSAgICAodWludDhfdCAqKWVwLT5zZWNyZXRfa2V5WyhpbnQpZXAtPmxhc3Rfc2VjcmV0X251
bWJlcl0sCi0JCQkgICAgU0NUUF9TRUNSRVRfU0laRSwgbSwgY29va2llX29mZnNldCwgY2FsY19z
aWcsIDApOwotCQkJLyogY29tcGFyZSAqLwotCQkJaWYgKG1lbWNtcChjYWxjX3NpZywgc2lnLCBT
Q1RQX1NJR05BVFVSRV9TSVpFKSA9PSAwKQotCQkJCWNvb2tpZV9vayA9IDE7Ci0JCX0KLQl9IGVs
c2UgewotCQljb29raWVfb2sgPSAxOwotCX0KLQotCS8qCi0JICogTm93IGJlZm9yZSB3ZSBjb250
aW51ZSB3ZSBtdXN0IHJlY29uc3RydWN0IG91ciBtYnVmIHNvIHRoYXQKLQkgKiBub3JtYWwgcHJv
Y2Vzc2luZyBvZiBhbnkgb3RoZXIgY2h1bmtzIHdpbGwgd29yay4KLQkgKi8KLQl7Ci0JCXN0cnVj
dCBtYnVmICptX2F0OwotCi0JCW1fYXQgPSBtOwotCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChtX2F0
KSAhPSBOVUxMKSB7Ci0JCQltX2F0ID0gU0NUUF9CVUZfTkVYVChtX2F0KTsKLQkJfQotCQlTQ1RQ
X0JVRl9ORVhUKG1fYXQpID0gbV9zaWc7Ci0JfQotCi0JaWYgKGNvb2tpZV9vayA9PSAwKSB7Ci0J
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJoYW5kbGVfY29va2llX2VjaG86IGNvb2tpZSBz
aWduYXR1cmUgdmFsaWRhdGlvbiBmYWlsZWQhXG4iKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMiwKLQkJCSJvZmZzZXQgPSAldSwgY29va2llX29mZnNldCA9ICV1LCBzaWdfb2Zmc2V0ID0g
JXVcbiIsCi0JCQkodWludDMyX3QpIG9mZnNldCwgY29va2llX29mZnNldCwgc2lnX29mZnNldCk7
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0JLyoKLQkgKiBjaGVjayB0aGUgY29va2llIHRpbWVz
dGFtcHMgdG8gYmUgc3VyZSBpdCdzIG5vdCBzdGFsZQotCSAqLwotCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZub3cpOwotCS8qIEV4cGlyZSB0aW1lIGlzIGluIFRpY2tzLCBzbyB3ZSBjb252
ZXJ0IHRvIHNlY29uZHMgKi8KLQl0aW1lX2V4cGlyZXMudHZfc2VjID0gY29va2llLT50aW1lX2Vu
dGVyZWQudHZfc2VjICsgVElDS1NfVE9fU0VDKGNvb2tpZS0+Y29va2llX2xpZmUpOwotCXRpbWVf
ZXhwaXJlcy50dl91c2VjID0gY29va2llLT50aW1lX2VudGVyZWQudHZfdXNlYzsKLSAgICAgICAg
LyogVE9ETyBzY3RwX2NvbnN0YW50cy5oIG5lZWRzIGFsdGVybmF0aXZlIHRpbWUgbWFjcm9zIHdo
ZW4KLSAgICAgICAgICogIF9LRVJORUwgaXMgdW5kZWZpbmVkLgotICAgICAgICAgKi8KLSNpZm5k
ZWYgX19GcmVlQlNEX18KLQlpZiAodGltZXJjbXAoJm5vdywgJnRpbWVfZXhwaXJlcywgPikpCi0j
ZWxzZQotCWlmICh0aW1ldmFsY21wKCZub3csICZ0aW1lX2V4cGlyZXMsID4pKQotI2VuZGlmCi0J
ewotCQkvKiBjb29raWUgaXMgc3RhbGUhICovCi0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0JCXN0
cnVjdCBzY3RwX2Vycm9yX3N0YWxlX2Nvb2tpZSAqY2F1c2U7Ci0JCXVpbnQzMl90IHRpbTsKLQkJ
b3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9z
dGFsZV9jb29raWUpLAotCQkJCQkgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlp
ZiAob3BfZXJyID09IE5VTEwpIHsKLQkJCS8qIEZPT0JBUiAqLwotCQkJcmV0dXJuIChOVUxMKTsK
LQkJfQotCQkvKiBTZXQgdGhlIGxlbiAqLwotCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpOwotCQljYXVzZSA9IG10b2Qob3BfZXJy
LCBzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUgKik7Ci0JCWNhdXNlLT5jYXVzZS5jb2Rl
ID0gaHRvbnMoU0NUUF9DQVVTRV9TVEFMRV9DT09LSUUpOwotCQljYXVzZS0+Y2F1c2UubGVuZ3Ro
ID0gaHRvbnMoKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKwotCQkgICAgKHNpemVvZih1
aW50MzJfdCkpKSk7Ci0JCS8qIHNlY29uZHMgdG8gdXNlYyAqLwotCQl0aW0gPSAobm93LnR2X3Nl
YyAtIHRpbWVfZXhwaXJlcy50dl9zZWMpICogMTAwMDAwMDsKLQkJLyogYWRkIGluIHVzZWMgKi8K
LQkJaWYgKHRpbSA9PSAwKQotCQkJdGltID0gbm93LnR2X3VzZWMgLSBjb29raWUtPnRpbWVfZW50
ZXJlZC50dl91c2VjOwotCQljYXVzZS0+c3RhbGVfdGltZSA9IGh0b25sKHRpbSk7Ci0JCXNjdHBf
c2VuZF9vcGVycl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3BfZXJyLAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUs
IG1mbG93aWQsIGxfaW5wLT5maWJudW0sCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAgICAgIHZy
Zl9pZCwgcG9ydCk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qCi0JICogTm93IHdlIG11c3Qg
c2VlIHdpdGggdGhlIGxvb2t1cCBhZGRyZXNzIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcKLQkgKiBh
c29jLiBUaGlzIHdpbGwgb25seSBoYXBwZW4gaWYgd2Ugd2VyZSBpbiB0aGUgQ09PS0lFLVdBSVQg
c3RhdGUKLQkgKiBhbmQgYSBJTklUIGNvbGxpZGVkIHdpdGggdXMgYW5kIHNvbWV3aGVyZSB0aGUg
cGVlciBzZW50IHRoZQotCSAqIGNvb2tpZSBvbiBhbm90aGVyIGFkZHJlc3MgYmVzaWRlcyB0aGUg
c2luZ2xlIGFkZHJlc3Mgb3VyIGFzc29jCi0JICogaGFkIGZvciBoaW0uIEluIHRoaXMgY2FzZSB3
ZSB3aWxsIGhhdmUgb25lIG9mIHRoZSB0aWUtdGFncyBzZXQgYXQKLQkgKiBsZWFzdCBBTkQgdGhl
IGFkZHJlc3MgZmllbGQgaW4gdGhlIGNvb2tpZSBjYW4gYmUgdXNlZCB0byBsb29rIGl0Ci0JICog
dXAuCi0JICovCi0JdG8gPSBOVUxMOwotCXN3aXRjaCAoY29va2llLT5hZGRyX3R5cGUpIHsKLSNp
ZmRlZiBJTkVUNgotCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6Ci0JCW1lbXNldCgmc2luNiwgMCwg
c2l6ZW9mKHNpbjYpKTsKLQkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhB
VkVfU0lONl9MRU4KLQkJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKLSNlbmRpZgotCQlz
aW42LnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQkJc2luNi5zaW42X3Njb3BlX2lkID0gY29v
a2llLT5zY29wZV9pZDsKLQkJbWVtY3B5KCZzaW42LnNpbjZfYWRkci5zNl9hZGRyLCBjb29raWUt
PmFkZHJlc3MsCi0JCSAgICBzaXplb2Yoc2luNi5zaW42X2FkZHIuczZfYWRkcikpOwotCQl0byA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVU
Ci0JY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzaW4p
KTsKLQkJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlz
aW4uc2luX2xlbiA9IHNpemVvZihzaW4pOwotI2VuZGlmCi0JCXNpbi5zaW5fcG9ydCA9IHNoLT5z
cmNfcG9ydDsKLQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+YWRkcmVzc1swXTsKLQkJ
dG8gPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBTQ1RQX0NPTk5fQUREUkVTUzoKLQkJbWVtc2V0KCZz
Y29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0JCXNjb25uLnNjb25uX2Zh
bWlseSA9IEFGX0NPTk47Ci0jaWZkZWYgSEFWRV9TQ09OTl9MRU4KLQkJc2Nvbm4uc2Nvbm5fbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCQlzY29ubi5zY29ubl9w
b3J0ID0gc2gtPnNyY19wb3J0OwotCQltZW1jcHkoJnNjb25uLnNjb25uX2FkZHIsIGNvb2tpZS0+
YWRkcmVzcywgc2l6ZW9mKHZvaWQgKikpOwotCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nv
bm47Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogVGhpcyBzaG91bGQgbm90IGhh
cHBlbiAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKnN0Y2IgPT0gTlVMTCkgewotCQkv
KiBZZXAsIGxldHMgY2hlY2sgKi8KLQkJKnN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
ZGRyKGlucF9wLCB0bywgbmV0cCwgZHN0LCBOVUxMKTsKLQkJaWYgKCpzdGNiID09IE5VTEwpIHsK
LQkJCS8qCi0JCQkgKiBXZSBzaG91bGQgaGF2ZSBvbmx5IGdvdCBiYWNrIHRoZSBzYW1lIGlucC4g
SWYgd2UKLQkJCSAqIGdvdCBiYWNrIGEgZGlmZmVyZW50IGVwIHdlIGhhdmUgYSBwcm9ibGVtLiBU
aGUKLQkJCSAqIG9yaWdpbmFsIGZpbmRlcCBnb3QgYmFjayBsX2lucCBhbmQgbm93Ci0JCQkgKi8K
LQkJCWlmIChsX2lucCAhPSAqaW5wX3ApIHsKLQkJCQlTQ1RQX1BSSU5URigiQmFkIHByb2JsZW0g
ZmluZF9lcCBnb3QgYSBkaWZmIGlucCB0aGVuIHNwZWNpYWxfbG9jYXRlP1xuIik7Ci0JCQl9Ci0J
CX0gZWxzZSB7Ci0JCQlpZiAoKmxvY2tlZF90Y2IgPT0gTlVMTCkgewotCQkJCS8qIEluIHRoaXMg
Y2FzZSB3ZSBmb3VuZCB0aGUgYXNzb2Mgb25seQotCQkJCSAqIGFmdGVyIHdlIGxvY2tlZCB0aGUg
Y3JlYXRlIGxvY2suIFRoaXMgbWVhbnMKLQkJCQkgKiB3ZSBhcmUgaW4gYSBjb2xsaWRpbmcgY2Fz
ZSBhbmQgd2UgbXVzdCBtYWtlCi0JCQkJICogc3VyZSB0aGF0IHdlIHVubG9jayB0aGUgdGNiIGlm
IGl0cyBvbmUgb2YgdGhlCi0JCQkJICogY2FzZXMgd2hlcmUgd2UgdGhyb3cgYXdheSB0aGUgaW5j
b21pbmcgcGFja2V0cy4KLQkJCQkgKi8KLQkJCQkqbG9ja2VkX3RjYiA9ICpzdGNiOwotCi0JCQkJ
LyogV2UgbXVzdCBhbHNvIGluY3JlbWVudCB0aGUgaW5wIHJlZiBjb3VudAotCQkJCSAqIHNpbmNl
IHRoZSByZWZfY291bnQgZmxhZ3Mgd2FzIHNldCB3aGVuIHdlCi0JCQkJICogZGlkIG5vdCBmaW5k
IHRoZSBUQ0IsIG5vdyB3ZSBmb3VuZCBpdCB3aGljaAotCQkJCSAqIHJlZHVjZXMgdGhlIHJlZmNv
dW50Li4gd2UgbXVzdCByYWlzZSBpdCBiYWNrCi0JCQkJICogb3V0IHRvIGJhbGFuY2UgaXQgYWxs
IDotKQotCQkJCSAqLwotCQkJCVNDVFBfSU5QX0lOQ1JfUkVGKCgqc3RjYiktPnNjdHBfZXApOwot
CQkJCWlmICgoKnN0Y2IpLT5zY3RwX2VwICE9IGxfaW5wKSB7Ci0JCQkJCVNDVFBfUFJJTlRGKCJI
dWg/IGVwOiVwIGRpZmYgdGhlbiBsX2lucDolcD9cbiIsCi0JCQkJCQkgICAgKHZvaWQgKikoKnN0
Y2IpLT5zY3RwX2VwLCAodm9pZCAqKWxfaW5wKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlj
b29raWVfbGVuIC09IFNDVFBfU0lHTkFUVVJFX1NJWkU7Ci0JaWYgKCpzdGNiID09IE5VTEwpIHsK
LQkJLyogdGhpcyBpcyB0aGUgIm5vcm1hbCIgY2FzZS4uLiBnZXQgYSBuZXcgVENCICovCi0JCSpz
dGNiID0gc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNyYywgZHN0
LCBzaCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsIGNvb2tpZV9s
ZW4sICppbnBfcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCB0bywg
Jm5vdGlmaWNhdGlvbiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3Nr
aXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNl
bmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0J
fSBlbHNlIHsKLQkJLyogdGhpcyBpcyBhYm5vcm1hbC4uLiBjb29raWUtZWNobyBvbiBleGlzdGlu
ZyBUQ0IgKi8KLQkJaGFkX2FfZXhpc3RpbmdfdGNiID0gMTsKLQkJKnN0Y2IgPSBzY3RwX3Byb2Nl
c3NfY29va2llX2V4aXN0aW5nKG0sIGlwaGxlbiwgb2Zmc2V0LAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLAotCQkJCQkJICAgICBjb29raWUsIGNv
b2tpZV9sZW4sICppbnBfcCwgKnN0Y2IsIG5ldHAsIHRvLAotCQkJCQkJICAgICAmbm90aWZpY2F0
aW9uLCBhdXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2cmZfaWQsIHBvcnQpOwotCX0KLQotCWlmICgqc3RjYiA9PSBOVUxMKSB7Ci0JCS8qIHN0
aWxsIG5vIFRDQi4uLiBtdXN0IGJlIGJhZCBjb29raWUtZWNobyAqLwotCQlyZXR1cm4gKE5VTEwp
OwotCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCWlmICgqbmV0cCAhPSBOVUxMKSB7Ci0J
CSgqbmV0cCktPmZsb3d0eXBlID0gbWZsb3d0eXBlOwotCQkoKm5ldHApLT5mbG93aWQgPSBtZmxv
d2lkOwotCX0KLSNlbmRpZgotCS8qCi0JICogT2ssIHdlIGJ1aWx0IGFuIGFzc29jaWF0aW9uIHNv
IGNvbmZpcm0gdGhlIGFkZHJlc3Mgd2Ugc2VudCB0aGUKLQkgKiBJTklULUFDSyB0by4KLQkgKi8K
LQluZXRsID0gc2N0cF9maW5kbmV0KCpzdGNiLCB0byk7Ci0JLyoKLQkgKiBUaGlzIGNvZGUgc2hv
dWxkIGluIHRoZW9yeSBOT1QgcnVuIGJ1dAotCSAqLwotCWlmIChuZXRsID09IE5VTEwpIHsKLQkJ
LyogVFNOSCEgSHVoLCB3aHkgZG8gSSBuZWVkIHRvIGFkZCB0aGlzIGFkZHJlc3MgaGVyZT8gKi8K
LQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKCpzdGNiLCB0bywgTlVMTCwgcG9ydCwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfSU5fQ09PS0lF
X1BST0MpKSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCW5ldGwgPSBzY3RwX2ZpbmRuZXQo
KnN0Y2IsIHRvKTsKLQl9Ci0JaWYgKG5ldGwpIHsKLQkJaWYgKG5ldGwtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfVU5DT05GSVJNRUQpIHsKLQkJCW5ldGwtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQURE
Ul9VTkNPTkZJUk1FRDsKLQkJCSh2b2lkKXNjdHBfc2V0X3ByaW1hcnlfYWRkcigoKnN0Y2IpLCAo
c3RydWN0IHNvY2thZGRyICopTlVMTCwKLQkJCSAgICBuZXRsKTsKLQkJCXNlbmRfaW50X2NvbmYg
PSAxOwotCQl9Ci0JfQotCXNjdHBfc3RhcnRfbmV0X3RpbWVycygqc3RjYik7Ci0JaWYgKCgqaW5w
X3ApLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgewotCQlpZiAoIWhhZF9h
X2V4aXN0aW5nX3RjYiB8fAotCQkgICAgKCgoKmlucF9wKS0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0NPTk5FQ1RFRCkgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBoYXZlIGEgTkVX
IGNvb2tpZSBvciB0aGUgY29ubmVjdCBuZXZlcgotCQkJICogcmVhY2hlZCB0aGUgY29ubmVjdGVk
IHN0YXRlIGR1cmluZyBjb2xsaXNpb24gd2UKLQkJCSAqIG11c3QgZG8gdGhlIFRDUCBhY2NlcHQg
dGhpbmcuCi0JCQkgKi8KLQkJCXN0cnVjdCBzb2NrZXQgKnNvLCAqb3NvOwotCQkJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKLQotCQkJaWYgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9BU1NP
Q19SRVNUQVJUKSB7Ci0JCQkJLyoKLQkJCQkgKiBGb3IgYSByZXN0YXJ0IHdlIHdpbGwga2VlcCB0
aGUgc2FtZQotCQkJCSAqIHNvY2tldCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZy4gSSBUSElOSyEh
Ci0JCQkJICovCi0JCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0Y2IsIDAsIE5V
TEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJaWYgKHNlbmRfaW50X2NvbmYpIHsKLQkJCQkJ
c2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCi0JCQkJCSAg
ICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7Ci0JCQkJfQotCQkJCXJldHVybiAobSk7Ci0JCQl9Ci0JCQlvc28gPSAoKmlucF9wKS0+c2N0
cF9zb2NrZXQ7Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
IDwgNzAwMDAwKQotCQkJLyoKLQkJCSAqIFdlIGRvIHRoaXMgdG8ga2VlcCB0aGUgc29ja2V0cyBz
aWRlIGhhcHB5IGR1cmluZwotCQkJICogdGhlIHNvbmV3Y29uIE9OTFkuCi0JCQkgKi8KLQkJCU5F
VF9MT0NLX0dJQU5UKCk7Ci0jZW5kaWYKLQkJCWF0b21pY19hZGRfaW50KCYoKnN0Y2IpLT5hc29j
LnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soKCpzdGNiKSk7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVUX1NF
VChvc28tPnNvX3ZuZXQpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQlTQ1RQ
X1NPQ0tFVF9MT0NLKG9zbywgMSk7Ci0jZW5kaWYKLQkJCXNvID0gc29uZXdjb25uKG9zbywgMAot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkJICAgICxOVUxMCi0jZW5kaWYKLSNpZmRlZiBfX1Bh
bmRhX18KLQkJCSAgICAgLE5VTEwgLCAoKmlucF9wKS0+ZGVmX3ZyZl9pZAotI2VuZGlmCi0JCQkg
ICAgKTsKLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3
MDAwMDApCi0JCQlORVRfVU5MT0NLX0dJQU5UKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhvc28sIDEpOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVU
X1JFU1RPUkUoKTsKLSNlbmRpZgotCQkJU0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKLQkJCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKLQotCQkJaWYgKHNvID09
IE5VTEwpIHsKLQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotI2lmIGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCXN0cnVjdCBzb2NrZXQgKnBj
Yl9zbzsKLSNlbmRpZgotCQkJCS8qIFRvbyBtYW55IHNvY2tldHMgKi8KLQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQxLCAicHJvY2Vzc19jb29raWVfbmV3OiBubyByb29tIGZvciBhbm90aGVy
IHNvY2tldCFcbiIpOwotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVT
RV9PVVRfT0ZfUkVTQywgIiIpOwotCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oKmlucF9wLCBO
VUxMLCBtLCBpcGhsZW4sCi0JCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlw
ZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBw
b3J0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQkJCQlwY2Jfc28gPSBTQ1RQX0lOUF9TTygqaW5wX3ApOwotCQkJCWF0b21pY19hZGRf
aW50KCYoKnN0Y2IpLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3Rj
YikpOwotCQkJCVNDVFBfU09DS0VUX0xPQ0socGNiX3NvLCAxKTsKLQkJCQlTQ1RQX1RDQl9MT0NL
KCgqc3RjYikpOwotCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250
LCAxKTsKLSNlbmRpZgotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYygqaW5wX3AsICpzdGNiLCBT
Q1RQX05PUk1BTF9QUk9DLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NU
UF9JTlBVVCArIFNDVFBfTE9DXzIzKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0socGNiX3NvLCAx
KTsKLSNlbmRpZgotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKilzby0+c29fcGNiOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJCS8q
Ci0JCQkgKiBXZSBhZGQgdGhlIHVuYm91bmQgZmxhZyBoZXJlIHNvIHRoYXQKLQkJCSAqIGlmIHdl
IGdldCBhbiBzb2Fib3J0KCkgYmVmb3JlIHdlIGdldCB0aGUKLQkJCSAqIG1vdmVfcGNiIGRvbmUs
IHdlIHdpbGwgcHJvcGVybHkgY2xlYW51cC4KLQkJCSAqLwotCQkJaW5wLT5zY3RwX2ZsYWdzID0g
KFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUgfAotCQkJICAgIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCB8Ci0JCQkgICAgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCB8Ci0JCQkgICAgU0NUUF9QQ0Jf
RkxBR1NfVU5CT1VORCB8Ci0JCQkgICAgKFNDVFBfUENCX0NPUFlfRkxBR1MgJiAoKmlucF9wKS0+
c2N0cF9mbGFncykgfAotCQkJICAgIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSk7Ci0JCQlpbnAt
PnNjdHBfZmVhdHVyZXMgPSAoKmlucF9wKS0+c2N0cF9mZWF0dXJlczsKLQkJCWlucC0+c2N0cF9t
b2JpbGl0eV9mZWF0dXJlcyA9ICgqaW5wX3ApLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVzOwotCQkJ
aW5wLT5zY3RwX3NvY2tldCA9IHNvOwotCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoKmlucF9w
KS0+c2N0cF9mcmFnX3BvaW50OwotCQkJaW5wLT5tYXhfY3duZCA9ICgqaW5wX3ApLT5tYXhfY3du
ZDsKLQkJCWlucC0+c2N0cF9jbXRfb25fb2ZmID0gKCppbnBfcCktPnNjdHBfY210X29uX29mZjsK
LQkJCWlucC0+ZWNuX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5lY25fc3VwcG9ydGVkOwotCQkJaW5w
LT5wcnNjdHBfc3VwcG9ydGVkID0gKCppbnBfcCktPnByc2N0cF9zdXBwb3J0ZWQ7Ci0JCQlpbnAt
PmF1dGhfc3VwcG9ydGVkID0gKCppbnBfcCktPmF1dGhfc3VwcG9ydGVkOwotCQkJaW5wLT5hc2Nv
bmZfc3VwcG9ydGVkID0gKCppbnBfcCktPmFzY29uZl9zdXBwb3J0ZWQ7Ci0JCQlpbnAtPnJlY29u
ZmlnX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5yZWNvbmZpZ19zdXBwb3J0ZWQ7Ci0JCQlpbnAtPm5y
c2Fja19zdXBwb3J0ZWQgPSAoKmlucF9wKS0+bnJzYWNrX3N1cHBvcnRlZDsKLQkJCWlucC0+cGt0
ZHJvcF9zdXBwb3J0ZWQgPSAoKmlucF9wKS0+cGt0ZHJvcF9zdXBwb3J0ZWQ7Ci0JCQlpbnAtPnBh
cnRpYWxfZGVsaXZlcnlfcG9pbnQgPSAoKmlucF9wKS0+cGFydGlhbF9kZWxpdmVyeV9wb2ludDsK
LQkJCWlucC0+c2N0cF9jb250ZXh0ID0gKCppbnBfcCktPnNjdHBfY29udGV4dDsKLQkJCWlucC0+
bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9ICgqaW5wX3ApLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0
OwotCQkJaW5wLT5maWJudW0gPSAoKmlucF9wKS0+ZmlibnVtOwotCQkJaW5wLT5pbnBfc3RhcnRp
bmdfcG9pbnRfZm9yX2l0ZXJhdG9yID0gTlVMTDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQlpbnAtPnVscF9pbmZvID0gKCppbnBfcCktPnVscF9pbmZvOwotCQkJaW5wLT5yZWN2X2Nh
bGxiYWNrID0gKCppbnBfcCktPnJlY3ZfY2FsbGJhY2s7Ci0JCQlpbnAtPnNlbmRfY2FsbGJhY2sg
PSAoKmlucF9wKS0+c2VuZF9jYWxsYmFjazsKLQkJCWlucC0+c2VuZF9zYl90aHJlc2hvbGQgPSAo
KmlucF9wKS0+c2VuZF9zYl90aHJlc2hvbGQ7Ci0jZW5kaWYKLQkJCS8qCi0JCQkgKiBjb3B5IGlu
IHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCi0JCQkgKiBvcmlnaW5hbCBl
bmRwb2ludAotCQkJICovCi0JCQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQotCQkJCXNj
dHBfZnJlZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOwotCQkJaW5wLT5zY3Rw
X2VwLmxvY2FsX2htYWNzID0KLQkJCSAgICBzY3RwX2NvcHlfaG1hY2xpc3QoKCppbnBfcCktPnNj
dHBfZXAubG9jYWxfaG1hY3MpOwotCQkJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cykKLQkJCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5r
cyk7Ci0JCQlpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQotCQkJICAgIHNjdHBfY29w
eV9jaHVua2xpc3QoKCppbnBfcCktPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwotCi0JCQkv
KgotCQkJICogTm93IHdlIG11c3QgbW92ZSBpdCBmcm9tIG9uZSBoYXNoIHRhYmxlIHRvCi0JCQkg
KiBhbm90aGVyIGFuZCBnZXQgdGhlIHRjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCi0JCQkgKi8KLQot
CQkJLyogVGhpcyBpcyB3aGVyZSB0aGUgb25lLTItb25lIHNvY2tldCBpcyBwdXQgaW50bwotCQkJ
ICogdGhlIGFjY2VwdCBzdGF0ZSB3YWl0aW5nIGZvciB0aGUgYWNjZXB0IQotCQkJICovCi0JCQlp
ZiAoKnN0Y2IpIHsKLQkJCQkoKnN0Y2IpLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfSU5fQUND
RVBUX1FVRVVFOwotCQkJfQotCQkJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoKmlucF9wLCBpbnAs
ICpzdGNiKTsKLQotCQkJYXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsK
LQkJCVNDVFBfVENCX1VOTE9DSygoKnN0Y2IpKTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9wKSwgaW5wLCAqc3Rj
YiwKLQkJCSAgICAwKTsKLSNlbHNlCi0JCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lu
cCgoKmlucF9wKSwgaW5wLCAqc3RjYiwgTV9OT1dBSVQpOwotI2VuZGlmCi0JCQlTQ1RQX1RDQl9M
T0NLKCgqc3RjYikpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNvYy5yZWZj
bnQsIDEpOwotCi0KLQkJCS8qIG5vdyB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB3ZSB3ZXJlIGFi
b3J0ZWQgd2hpbGUKLQkJCSAqIHRoZSBtb3ZlIHdhcyBnb2luZyBvbiBhbmQgdGhlIGxvY2svdW5s
b2NrIGhhcHBlbmVkLgotCQkJICovCi0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0dPTkUpIHsKLQkJCQkvKiB5ZXAgaXQgd2FzLCB3ZSBsZWF2ZSB0aGUKLQkJ
CQkgKiBhc3NvYyBhdHRhY2hlZCB0byB0aGUgc29ja2V0IHNpbmNlCi0JCQkJICogdGhlIHNjdHBf
aW5wY2JfZnJlZSgpIGNhbGwgd2lsbCBzZW5kCi0JCQkJICogYW4gYWJvcnQgZm9yIHVzLgotCQkJ
CSAqLwotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJ
CX0KLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkvKiBTd2l0Y2ggb3ZlciB0byB0aGUg
bmV3IGd1eSAqLwotCQkJKmlucF9wID0gaW5wOwotCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNh
dGlvbiwgKnN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQlpZiAoc2VuZF9p
bnRfY29uZikgewotCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09O
RklSTUVELAotCQkJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFND
VFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQl9Ci0KLQkJCS8qIFB1bGwgaXQgZnJvbSB0aGUgaW5jb21w
bGV0ZSBxdWV1ZSBhbmQgd2FrZSB0aGUgZ3V5ICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQlhdG9taWNfYWRkX2ludCgmKCpzdGNi
KS0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOwotCQkJU0NU
UF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJCXNvaXNjb25uZWN0ZWQoc28pOwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJ
U0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYikt
PmFzb2MucmVmY250LCAxKTsKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYK
LQkJCXJldHVybiAobSk7Ci0JCX0KLQl9Ci0JaWYgKG5vdGlmaWNhdGlvbikgewotCQlzY3RwX3Vs
cF9ub3RpZnkobm90aWZpY2F0aW9uLCAqc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQl9Ci0JaWYgKHNlbmRfaW50X2NvbmYpIHsKLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9U
SUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCi0JCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAo
dm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9jb29raWVfYWNrKHN0cnVjdCBzY3RwX2Nvb2tpZV9h
Y2tfY2h1bmsgKmNwIFNDVFBfVU5VU0VELAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qIGNwIG11c3Qgbm90IGJlIHVzZWQsIG90aGVycyBj
YWxsIHRoaXMgd2l0aG91dCBhIGMtYWNrIDotKSAqLwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOwotCi0JU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJInNjdHBfaGFuZGxlX2Nv
b2tpZV9hY2s6IGhhbmRsaW5nIENPT0tJRS1BQ0tcbiIpOwotCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAobmV0ID09IE5VTEwpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7
Ci0KLQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3RjYik7Ci0JLyogcHJvY2VzcyBhY2Nv
cmRpbmcgdG8gYXNzb2NpYXRpb24gc3RhdGUgKi8KLQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7Ci0JCS8qIHN0YXRlIGNoYW5nZSBvbmx5IG5l
ZWRlZCB3aGVuIEkgYW0gaW4gcmlnaHQgc3RhdGUgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMiwgIm1vdmluZyB0byBPUEVOIHN0YXRlXG4iKTsKLQkJU0NUUF9TRVRfU1RBVEUoYXNvYywg
U0NUUF9TVEFURV9PUEVOKTsKLQkJc2N0cF9zdGFydF9uZXRfdGltZXJzKHN0Y2IpOwotCQlpZiAo
YXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKLQkJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCi0JCQkJCSBzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQotCQl9Ci0JCS8qIHVwZGF0
ZSBSVE8gKi8KLQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2FjdGl2ZWVzdGFiKTsK
LQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQlpZiAoYXNvYy0+
b3ZlcmFsbF9lcnJvcl9jb3VudCA9PSAwKSB7Ci0JCQluZXQtPlJUTyA9IHNjdHBfY2FsY3VsYXRl
X3J0byhzdGNiLCBhc29jLCBuZXQsCi0JCQkJCSAgICAgICAgICAgICAmYXNvYy0+dGltZV9lbnRl
cmVkLCBzY3RwX2FsaWduX3NhZmVfbm9jb3B5LAotCQkJCQkJICAgICAgU0NUUF9SVFRfRlJPTV9O
T05fREFUQSk7Ci0JCX0KLQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVf
ZW50ZXJlZCk7Ci0JCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19VUCwgc3RjYiwg
MCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJaWYgKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJICAgIChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCXN0cnVjdCBz
b2NrZXQgKnNvOwotCi0jZW5kaWYKLQkJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NU
UF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2Vw
KTsKLQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7Ci0jZW5kaWYKLQkJCWlmICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VE
X1NPQ0tFVCkgPT0gMCkgewotCQkJCXNvaXNjb25uZWN0ZWQoc3RjYi0+c2N0cF9zb2NrZXQpOwot
CQkJfQotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQl9Ci0JCS8qCi0J
CSAqIHNpbmNlIHdlIGRpZCBub3Qgc2VuZCBhIEhCIG1ha2Ugc3VyZSB3ZSBkb24ndCBkb3VibGUK
LQkJICogdGhpbmdzCi0JCSAqLwotCQluZXQtPmhiX3Jlc3BvbmRlZCA9IDE7Ci0KLQkJaWYgKHN0
Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKLQkJCS8qIFdlIGRv
bid0IG5lZWQgdG8gZG8gdGhlIGFzY29uZiB0aGluZywKLQkJCSAqIG5vciBoYiBvciBhdXRvY2xv
c2UgaWYgdGhlIHNvY2tldCBpcyBjbG9zZWQuCi0JCQkgKi8KLQkJCWdvdG8gY2xvc2VkX3NvY2tl
dDsKLQkJfQotCi0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwg
c3RjYi0+c2N0cF9lcCwKLQkJICAgIHN0Y2IsIG5ldCk7Ci0KLQotCQlpZiAoc3RjYi0+YXNvYy5z
Y3RwX2F1dG9jbG9zZV90aWNrcyAmJgotCQkgICAgc2N0cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNj
dHBfZXAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSkpIHsKLQkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwKLQkJCSAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBO
VUxMKTsKLQkJfQotCQkvKgotCQkgKiBzZW5kIEFTQ09ORiBpZiBwYXJhbWV0ZXJzIGFyZSBwZW5k
aW5nIGFuZCBBU0NPTkZzIGFyZQotCQkgKiBhbGxvd2VkIChlZy4gYWRkcmVzc2VzIGNoYW5nZWQg
d2hlbiBpbml0L2Nvb2tpZSBlY2hvIHdlcmUKLQkJICogaW4gZmxpZ2h0KQotCQkgKi8KLQkJaWYg
KChzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVND
T05GKSkgJiYKLQkJICAgIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkgJiYKLQkJ
ICAgICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlKSkpIHsKLSNpZmRlZiBT
Q1RQX1RJTUVSX0JBU0VEX0FTQ09ORgotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfQVNDT05GLAotCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkJCQkJIHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0jZWxzZQotCQkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JCQkJCSBTQ1RQX0FERFJfTk9UX0xPQ0tF
RCk7Ci0jZW5kaWYKLQkJfQotCX0KLWNsb3NlZF9zb2NrZXQ6Ci0JLyogVG9zcyB0aGUgY29va2ll
IGlmIEkgY2FuICovCi0Jc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsIGFzb2MpOwotCWlmICgh
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7Ci0JCS8qIFJlc3RhcnQgdGhlIHRpbWVy
IGlmIHdlIGhhdmUgcGVuZGluZyBkYXRhICovCi0JCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNo
azsKLQotCQljaGsgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VudF9xdWV1ZSk7Ci0JCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNoay0+
d2hvVG8pOwotCX0KLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX2Vjbl9lY2hvKHN0cnVj
dCBzY3RwX2VjbmVfY2h1bmsgKmNwLAotCQkgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsK
LQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNoazsK
LQlzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rIGJrdXA7Ci0JdWludDhfdCBvdmVycmlkZV9iaXQ7Ci0J
dWludDMyX3QgdHNuLCB3aW5kb3dfZGF0YV90c247Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBpbnQg
cGt0X2NudDsKLQotCWxlbiA9IG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpOwotCWlmICgobGVu
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSkgJiYKLQkgICAgKGxlbiAhPSBzaXpl
b2Yoc3RydWN0IG9sZF9zY3RwX2VjbmVfY2h1bmspKSkgewotCQlyZXR1cm47Ci0JfQotCWlmIChs
ZW4gPT0gc2l6ZW9mKHN0cnVjdCBvbGRfc2N0cF9lY25lX2NodW5rKSkgewotCQkvKiBJdHMgdGhl
IG9sZCBmb3JtYXQgKi8KLQkJbWVtY3B5KCZia3VwLCBjcCwgc2l6ZW9mKHN0cnVjdCBvbGRfc2N0
cF9lY25lX2NodW5rKSk7Ci0JCWJrdXAubnVtX3BrdHNfc2luY2VfY3dyID0gaHRvbmwoMSk7Ci0J
CWNwID0gJmJrdXA7Ci0JfQotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZlY25lKTsKLQl0c24g
PSBudG9obChjcC0+dHNuKTsKLQlwa3RfY250ID0gbnRvaGwoY3AtPm51bV9wa3RzX3NpbmNlX2N3
cik7Ci0JbGNoayA9IFRBSUxRX0xBU1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgc2N0cGNodW5r
X2xpc3RoZWFkKTsKLQlpZiAobGNoayA9PSBOVUxMKSB7Ci0JCXdpbmRvd19kYXRhX3RzbiA9IHN0
Y2ItPmFzb2Muc2VuZGluZ19zZXEgLSAxOwotCX0gZWxzZSB7Ci0JCXdpbmRvd19kYXRhX3RzbiA9
IGxjaGstPnJlYy5kYXRhLnRzbjsKLQl9Ci0KLQkvKiBGaW5kIHdoZXJlIGl0IHdhcyBzZW50IHRv
IGlmIHBvc3NpYmxlLiAqLwotCW5ldCA9IE5VTEw7Ci0JVEFJTFFfRk9SRUFDSChsY2hrLCAmc3Rj
Yi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGxjaGstPnJlYy5kYXRhLnRz
biA9PSB0c24pIHsKLQkJCW5ldCA9IGxjaGstPndob1RvOwotCQkJbmV0LT5lY25fcHJldl9jd25k
ID0gbGNoay0+cmVjLmRhdGEuY3duZF9hdF9zZW5kOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKFND
VFBfVFNOX0dUKGxjaGstPnJlYy5kYXRhLnRzbiwgdHNuKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9
Ci0JaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIFdoYXQgdG8gZG8uIEEgcHJldmlvdXMg
c2VuZCBvZiBhCi0JCSAqIENXUiB3YXMgcG9zc2libHkgbG9zdC4gU2VlIGhvdyBvbGQgaXQgaXMs
IHdlCi0JCSAqIG1heSBoYXZlIGl0IG1hcmtlZCBvbiB0aGUgYWN0dWFsIG5ldC4KLQkJICovCi0J
CVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWlm
ICh0c24gPT0gbmV0LT5sYXN0X2N3cl90c24pIHsKLQkJCQkvKiBGb3VuZCBoaW0sIHNlbmQgaXQg
b2ZmICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCQkv
KgotCQkJICogSWYgd2UgcmVhY2ggaGVyZSwgd2UgbmVlZCB0byBzZW5kIGEgc3BlY2lhbAotCQkJ
ICogQ1dSIHRoYXQgc2F5cyBoZXksIHdlIGRpZCB0aGlzIGEgbG9uZyB0aW1lCi0JCQkgKiBhZ28g
YW5kIHlvdSBsb3N0IHRoZSByZXNwb25zZS4KLQkJCSAqLwotCQkJbmV0ID0gVEFJTFFfRklSU1Qo
JnN0Y2ItPmFzb2MubmV0cyk7Ci0JCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCQkvKiBUU05IICov
Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJb3ZlcnJpZGVfYml0ID0gU0NUUF9DV1JfUkVEVUNFX09W
RVJSSURFOwotCQl9IGVsc2UgewotCQkJb3ZlcnJpZGVfYml0ID0gMDsKLQkJfQotCX0gZWxzZSB7
Ci0JCW92ZXJyaWRlX2JpdCA9IDA7Ci0JfQotCWlmIChTQ1RQX1RTTl9HVCh0c24sIG5ldC0+Y3dy
X3dpbmRvd190c24pICYmCi0JICAgICgob3ZlcnJpZGVfYml0JlNDVFBfQ1dSX1JFRFVDRV9PVkVS
UklERSkgPT0gMCkpIHsKLQkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2
ZW4gaW4gdGhlIHBsdWdnYWJsZSBDQyBtb2R1bGUgKi8KLQkJc3RjYi0+YXNvYy5jY19mdW5jdGlv
bnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobyhzdGNiLCBuZXQsIDAsIHBrdF9jbnQp
OwotCQkvKgotCQkgKiBXZSByZWR1Y2Ugb25jZSBldmVyeSBSVFQuIFNvIHdlIHdpbGwgb25seSBs
b3dlciBjd25kIGF0Ci0JCSAqIHRoZSBuZXh0IHNlbmRpbmcgc2VxIGkuZS4gdGhlIHdpbmRvd19k
YXRhX3RzbgotCQkgKi8KLQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IHdpbmRvd19kYXRhX3RzbjsK
LQkJbmV0LT5lY25fY2VfcGt0X2NudCArPSBwa3RfY250OwotCQluZXQtPmxvc3RfY250ID0gcGt0
X2NudDsKLQkJbmV0LT5sYXN0X2N3cl90c24gPSB0c247Ci0JfSBlbHNlIHsKLQkJb3ZlcnJpZGVf
Yml0IHw9IFNDVFBfQ1dSX0lOX1NBTUVfV0lORE9XOwotCQlpZiAoU0NUUF9UU05fR1QodHNuLCBu
ZXQtPmxhc3RfY3dyX3RzbikgJiYKLQkJICAgICgob3ZlcnJpZGVfYml0JlNDVFBfQ1dSX1JFRFVD
RV9PVkVSUklERSkgPT0gMCkpIHsKLQkJCS8qCi0JCQkgKiBBbm90aGVyIGxvc3MgaW4gdGhlIHNh
bWUgd2luZG93IHVwZGF0ZSBob3cKLQkJCSAqIG1hbnkgbWFya3MvcGFja2V0cyBsb3N0IHdlIGhh
dmUgaGFkLgotCQkJICovCi0JCQlpbnQgY250ID0gMTsKLQkJCWlmIChwa3RfY250ID4gbmV0LT5s
b3N0X2NudCkgewotCQkJCS8qIFNob3VsZCBiZSB0aGUgY2FzZSAqLwotCQkJCWNudCA9IChwa3Rf
Y250IC0gbmV0LT5sb3N0X2NudCk7Ci0JCQkJbmV0LT5lY25fY2VfcGt0X2NudCArPSBjbnQ7Ci0J
CQl9Ci0JCQluZXQtPmxvc3RfY250ID0gcGt0X2NudDsKLQkJCW5ldC0+bGFzdF9jd3JfdHNuID0g
dHNuOwotCQkJLyoKLQkJCSAqIE1vc3QgQ0MgZnVuY3Rpb25zIHdpbGwgaWdub3JlIHRoaXMgY2Fs
bCwgc2luY2Ugd2UgYXJlIGluLXdpbmRvdwotCQkJICogeWV0IG9mIHRoZSBpbml0aWFsIENFIHRo
ZSBwZWVyIHNhdy4KLQkJCSAqLwotCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25k
X3VwZGF0ZV9hZnRlcl9lY25fZWNobyhzdGNiLCBuZXQsIDEsIGNudCk7Ci0JCX0KLQl9Ci0JLyoK
LQkgKiBXZSBhbHdheXMgc2VuZCBhIENXUiB0aGlzIHdheSBpZiBvdXIgcHJldmlvdXMgb25lIHdh
cyBsb3N0IG91cgotCSAqIHBlZXIgd2lsbCBnZXQgYW4gdXBkYXRlLCBvciBpZiBpdCBpcyBub3Qg
dGltZSBhZ2FpbiB0byByZWR1Y2Ugd2UKLQkgKiBzdGlsbCBnZXQgdGhlIGN3ciB0byB0aGUgcGVl
ci4gTm90ZSB3ZSBzZXQgdGhlIG92ZXJyaWRlIHdoZW4gd2UKLQkgKiBjb3VsZCBub3QgZmluZCB0
aGUgVFNOIG9uIHRoZSBjaHVuayBvciB0aGUgZGVzdGluYXRpb24gbmV0d29yay4KLQkgKi8KLQlz
Y3RwX3NlbmRfY3dyKHN0Y2IsIG5ldCwgbmV0LT5sYXN0X2N3cl90c24sIG92ZXJyaWRlX2JpdCk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9lY25fY3dyKHN0cnVjdCBzY3RwX2N3cl9j
aHVuayAqY3AsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCS8qCi0JICogSGVyZSB3ZSBnZXQgYSBDV1IgZnJvbSB0aGUgcGVlci4gV2UgbXVzdCBsb29r
IGluIHRoZSBvdXRxdWV1ZSBhbmQKLQkgKiBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGEgY292ZXJl
ZCBFQ05FIGluIHRoZSBjb250cm9sIGNodW5rIHBhcnQuCi0JICogSWYgc28gcmVtb3ZlIGl0Lgot
CSAqLwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9lY25lX2No
dW5rICplY25lOwotCWludCBvdmVycmlkZTsKLQl1aW50MzJfdCBjd3JfdHNuOwotCi0JY3dyX3Rz
biA9IG50b2hsKGNwLT50c24pOwotCW92ZXJyaWRlID0gY3AtPmNoLmNodW5rX2ZsYWdzICYgU0NU
UF9DV1JfUkVEVUNFX09WRVJSSURFOwotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5j
b250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQu
aWQgIT0gU0NUUF9FQ05fRUNITykgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChvdmVycmlk
ZSA9PSAwKSAmJiAoY2hrLT53aG9UbyAhPSBuZXQpKSB7Ci0JCQkvKiBNdXN0IGJlIGZyb20gdGhl
IHJpZ2h0IHNyYyB1bmxlc3Mgb3ZlcnJpZGUgaXMgc2V0ICovCi0JCQljb250aW51ZTsKLQkJfQot
CQllY25lID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKik7Ci0JCWlm
IChTQ1RQX1RTTl9HRShjd3JfdHNuLCBudG9obChlY25lLT50c24pKSkgewotCQkJLyogdGhpcyBj
b3ZlcnMgdGhpcyBFQ05FLCB3ZSBjYW4gcmVtb3ZlIGl0ICovCi0JCQlzdGNiLT5hc29jLmVjbl9l
Y2hvX2NudF9vbnEtLTsKLQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRf
cXVldWUsIGNoaywKLQkJCSAgICBzY3RwX25leHQpOwotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0
YSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQkJc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2NudC0t
OwotCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQkJaWYgKG92ZXJyaWRlID09IDApIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLX0KLQot
c3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlKHN0cnVjdCBzY3RwX3No
dXRkb3duX2NvbXBsZXRlX2NodW5rICpjcCBTQ1RQX1VOVVNFRCwKLSAgICBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMiwKLQkJInNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlOiBoYW5kbGlu
ZyBTSFVURE9XTi1DT01QTEVURVxuIik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkKLQkJcmV0dXJuOwot
Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFzc29jaWF0
aW9uIHN0YXRlICovCi0JaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hV
VERPV05fQUNLX1NFTlQpIHsKLQkJLyogdW5leHBlY3RlZCBTSFVURE9XTi1DT01QTEVURS4uLiBz
byBpZ25vcmUuLi4gKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKLQkJCSJzY3RwX2hh
bmRsZV9zaHV0ZG93bl9jb21wbGV0ZTogbm90IGluIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NF
TlQgLS0tIGlnbm9yZVxuIik7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJcmV0dXJuOwot
CX0KLQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgcHJvdG9jb2wgKi8KLQlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQpIHsKLQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTU09DX0RPV04sIHN0Y2Is
IDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQotI2lmZGVmIElOVkFSSUFOVFMKLQlp
ZiAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSB8fAotCSAgICAhVEFJTFFfRU1QVFko
JmFzb2MtPnNlbnRfcXVldWUpIHx8Ci0JICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3Rj
YiwgU0NUUF9TT19OT1RfTE9DS0VEKSkgewotCQlwYW5pYygiUXVldWVzIGFyZSBub3QgZW1wdHkg
d2hlbiBoYW5kbGluZyBTSFVURE9XTi1DT01QTEVURSIpOwotCX0KLSNlbmRpZgotCS8qIHN0b3Ag
dGhlIHRpbWVyICovCi0Jc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFD
Sywgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUF9JTlBVVCArIFNDVFBfTE9DXzI0KTsKLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0
cHNfc2h1dGRvd24pOwotCS8qIGZyZWUgdGhlIFRDQiAqLwotCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDIsCi0JCSJzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZTogY2FsbHMgZnJlZS1hc29j
XG4iKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCVNDVFBf
U09DS0VUX0xPQ0soc28sIDEpOwotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2VuZGlmCi0JKHZvaWQpc2N0cF9mcmVl
X2Fzc29jKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjUpOwotI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCVNDVFBf
U09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBpbnQK
LXByb2Nlc3NfY2h1bmtfZHJvcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2No
dW5rX2Rlc2MgKmRlc2MsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50OF90IGZsZykK
LXsKLQlzd2l0Y2ggKGRlc2MtPmNodW5rX3R5cGUpIHsKLQljYXNlIFNDVFBfREFUQToKLQkJLyog
ZmluZCB0aGUgdHNuIHRvIHJlc2VuZCAocG9zc2libHkgKi8KLQl7Ci0JCXVpbnQzMl90IHRzbjsK
LQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwotCi0JCXRzbiA9IG50b2hsKGRlc2MtPnRz
bl9pZmFueSk7Ci0JCVRBSUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBz
Y3RwX25leHQpIHsKLQkJCWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsKLQkJCQkvKiBm
b3VuZCBpdCAqLwotCQkJCWJyZWFrOwotCQkJfQotCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVj
LmRhdGEudHNuLCB0c24pKSB7Ci0JCQkJLyogbm90IGZvdW5kICovCi0JCQkJdHAxID0gTlVMTDsK
LQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAodHAxID09IE5VTEwpIHsKLQkJCS8qCi0JCQkg
KiBEbyBpdCB0aGUgb3RoZXIgd2F5ICwgYWthIHdpdGhvdXQgcGF5aW5nCi0JCQkgKiBhdHRlbnRp
b24gdG8gcXVldWUgc2VxIG9yZGVyLgotCQkJICovCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19w
ZHJwZG5mbmQpOwotCQkJVEFJTFFfRk9SRUFDSCh0cDEsICZzdGNiLT5hc29jLnNlbnRfcXVldWUs
IHNjdHBfbmV4dCkgewotCQkJCWlmICh0cDEtPnJlYy5kYXRhLnRzbiA9PSB0c24pIHsKLQkJCQkJ
LyogZm91bmQgaXQgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmICh0cDEg
PT0gTlVMTCkgewotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycHRzbm5mKTsKLQkJfQotCQlp
ZiAoKHRwMSkgJiYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fQUNLRUQpKSB7Ci0JCQl1aW50
OF90ICpkZHA7Ci0KLQkJCWlmICgoKGZsZyAmIFNDVFBfQkFEQ1JDKSA9PSAwKSAmJgotCQkJICAg
ICgoZmxnICYgU0NUUF9GUk9NX01JRERMRV9CT1gpID09IDApKSB7Ci0JCQkJcmV0dXJuICgwKTsK
LQkJCX0KLQkJCWlmICgoc3RjYi0+YXNvYy5wZWVyc19yd25kID09IDApICYmCi0JCQkgICAgKChm
bGcgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkgPT0gMCkpIHsKLQkJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19wZHJwZGl3bnApOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+YXNv
Yy5wZWVyc19yd25kID09IDAgJiYKLQkJCSAgICAoZmxnICYgU0NUUF9GUk9NX01JRERMRV9CT1gp
KSB7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGRpenJ3KTsKLQkJCQlyZXR1cm4gKDAp
OwotCQkJfQotCQkJZGRwID0gKHVpbnQ4X3QgKikgKG10b2QodHAxLT5kYXRhLCBjYWRkcl90KSAr
Ci0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSk7Ci0JCQl7Ci0JCQkJdW5z
aWduZWQgaW50IGlpaTsKLQotCQkJCWZvciAoaWlpID0gMDsgaWlpIDwgc2l6ZW9mKGRlc2MtPmRh
dGFfYnl0ZXMpOwotCQkJCSAgICAgaWlpKyspIHsKLQkJCQkJaWYgKGRkcFtpaWldICE9IGRlc2Mt
PmRhdGFfYnl0ZXNbaWlpXSkgewotCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGJhZGQp
OwotCQkJCQkJcmV0dXJuICgtMSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmICh0cDEt
PmRvX3J0dCkgewotCQkJCS8qCi0JCQkJICogdGhpcyBndXkgaGFkIGEgUlRPIGNhbGN1bGF0aW9u
Ci0JCQkJICogcGVuZGluZyBvbiBpdCwgY2FuY2VsIGl0Ci0JCQkJICovCi0JCQkJaWYgKHRwMS0+
d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgewotCQkJCQl0cDEtPndob1RvLT5ydG9fbmVlZGVkID0g
MTsKLQkJCQl9Ci0JCQkJdHAxLT5kb19ydHQgPSAwOwotCQkJfQotCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcGRycG1hcmspOwotCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RCkKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250
KTsKLQkJCS8qCi0JCQkgKiBtYXJrIGl0IGFzIGlmIHdlIHdlcmUgZG9pbmcgYSBGUiwgc2luY2UK
LQkJCSAqIHdlIHdpbGwgYmUgZ2V0dGluZyBnYXAgYWNrIHJlcG9ydHMgYmVoaW5kCi0JCQkgKiB0
aGUgaW5mbyBmcm9tIHRoZSByb3V0ZXIuCi0JCQkgKi8KLQkJCXRwMS0+cmVjLmRhdGEuZG9pbmdf
ZmFzdF9yZXRyYW5zbWl0ID0gMTsKLQkJCS8qCi0JCQkgKiBtYXJrIHRoZSB0c24gd2l0aCB3aGF0
IHNlcXVlbmNlcyBjYW4KLQkJCSAqIGNhdXNlIGEgbmV3IEZSLgotCQkJICovCi0JCQlpZiAoVEFJ
TFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpIHsKLQkJCQl0cDEtPnJlYy5kYXRhLmZh
c3RfcmV0cmFuX3RzbiA9IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXE7Ci0JCQl9IGVsc2UgewotCQkJ
CXRwMS0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29j
LnNlbmRfcXVldWUpKS0+cmVjLmRhdGEudHNuOwotCQkJfQotCi0JCQkvKiByZXN0YXJ0IHRoZSB0
aW1lciAqLwotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5z
Y3RwX2VwLAotCQkJCQlzdGNiLCB0cDEtPndob1RvLAotCQkJICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjYpOwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKLQkJCQkJIHN0Y2IsIHRwMS0+d2hvVG8p
OwotCi0JCQkvKiBmaXggY291bnRzIGFuZCB0aGluZ3MgKi8KLQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1BEUlAsCi0JCQkJCSAgICAg
ICB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKLQkJCQkJICAgICAgIHRwMS0+Ym9va19zaXplLAot
CQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3Qpc3RjYiwKLQkJCQkJICAgICAgIHRwMS0+
cmVjLmRhdGEudHNuKTsKLQkJCX0KLQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JF
U0VORCkgewotCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKLQkJCQlzY3RwX3Rv
dGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOwotCQkJfQotCQkJdHAxLT5zZW50ID0gU0NU
UF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCX0gewotCQkJLyogYXVkaXQgY29kZSAqLwotCQkJdW5zaWdu
ZWQgaW50IGF1ZGl0OwotCi0JCQlhdWRpdCA9IDA7Ci0JCQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0
Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKHRwMS0+c2VudCA9PSBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQkJYXVkaXQrKzsKLQkJCX0KLQkJCVRBSUxRX0ZPUkVB
Q0godHAxLCAmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsCi0JCQkJICAgICAgc2N0cF9u
ZXh0KSB7Ci0JCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkKLQkJCQkJ
YXVkaXQrKzsKLQkJCX0KLQkJCWlmIChhdWRpdCAhPSBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCkgewotCQkJCVNDVFBfUFJJTlRGKCIqKkxvY2FsIEF1ZGl0IGZpbmRzIGNudDolZCBh
c29jIGNudDolZFxuIiwKLQkJCQkJICAgIGF1ZGl0LCBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCk7Ci0jaWZuZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQkJCXN0Y2ItPmFzb2Mu
c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gYXVkaXQ7Ci0jZW5kaWYKLQkJCX0KLQkJfQotCX0KLQli
cmVhazsKLQljYXNlIFNDVFBfQVNDT05GOgotCXsKLQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
YXNjb25mOwotCi0JCVRBSUxRX0ZPUkVBQ0goYXNjb25mLCAmc3RjYi0+YXNvYy5jb250cm9sX3Nl
bmRfcXVldWUsCi0JCQkgICAgICBzY3RwX25leHQpIHsKLQkJCWlmIChhc2NvbmYtPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX0FTQ09ORikgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChh
c2NvbmYpIHsKLQkJCWlmIChhc2NvbmYtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCi0J
CQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0J
CQlhc2NvbmYtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJCWFzY29uZi0+c25kX2Nv
dW50LS07Ci0JCX0KLQl9Ci0JYnJlYWs7Ci0JY2FzZSBTQ1RQX0lOSVRJQVRJT046Ci0JCS8qIHJl
c2VuZCB0aGUgSU5JVCAqLwotCQlzdGNiLT5hc29jLmRyb3BwZWRfc3BlY2lhbF9jbnQrKzsKLQkJ
aWYgKHN0Y2ItPmFzb2MuZHJvcHBlZF9zcGVjaWFsX2NudCA8IFNDVFBfUkVUUllfRFJPUFBFRF9U
SFJFU0gpIHsKLQkJCS8qCi0JCQkgKiBJZiB3ZSBjYW4gZ2V0IGl0IGluLCBpbiBhIGZldyBhdHRl
bXB0cyB3ZSBkbwotCQkJICogdGhpcywgb3RoZXJ3aXNlIHdlIGxldCB0aGUgdGltZXIgZmlyZS4K
LQkJCSAqLwotCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULCBzdGNiLT5z
Y3RwX2VwLAotCQkJCQlzdGNiLCBuZXQsCi0JCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5QVVQgKyBTQ1RQX0xPQ18yNyk7Ci0JCQlzY3RwX3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFND
VFBfU0VMRUNUSVZFX0FDSzoKLQljYXNlIFNDVFBfTlJfU0VMRUNUSVZFX0FDSzoKLQkJLyogcmVz
ZW5kIHRoZSBzYWNrICovCi0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDoKLQkJLyogcmVzZW5k
IGEgZGVtYW5kIEhCICovCi0JCWlmICgoc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ICsg
MykgPCBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSB7Ci0JCQkvKiBPbmx5IHJldHJhbnNtaXQg
aWYgd2UgS05PVyB3ZSB3b250IGRlc3Ryb3kgdGhlIHRjYiAqLwotCQkJc2N0cF9zZW5kX2hiKHN0
Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBf
U0hVVERPV046Ci0JCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXQpOwotCQlicmVhazsKLQlj
YXNlIFNDVFBfU0hVVERPV05fQUNLOgotCQlzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0Y2IsIG5l
dCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DT09LSUVfRUNITzoKLQl7Ci0JCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKmNvb2tpZTsKLQotCQljb29raWUgPSBOVUxMOwotCQlUQUlMUV9GT1JFQUNI
KGNvb2tpZSwgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAotCQkJICAgICAgc2N0cF9u
ZXh0KSB7Ci0JCQlpZiAoY29va2llLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNI
TykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChjb29raWUpIHsKLQkJCWlmIChjb29r
aWUtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCi0JCQkJc2N0cF91Y291bnRfaW5jcihz
dGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCQljb29raWUtPnNlbnQgPSBTQ1RQ
X0RBVEFHUkFNX1JFU0VORDsKLQkJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsK
LQkJfQotCX0KLQlicmVhazsKLQljYXNlIFNDVFBfQ09PS0lFX0FDSzoKLQkJc2N0cF9zZW5kX2Nv
b2tpZV9hY2soc3RjYik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkvKiBy
ZXNlbmQgbGFzdCBhc2NvbmYgYWNrICovCi0JCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOwot
CQlicmVhazsKLQljYXNlIFNDVFBfSUZPUldBUkRfQ1VNX1RTTjoKLQljYXNlIFNDVFBfRk9SV0FS
RF9DVU1fVFNOOgotCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsICZzdGNiLT5hc29jKTsKLQkJYnJl
YWs7Ci0JCS8qIGNhbid0IGRvIGFueXRoaW5nIHdpdGggdGhlc2UgKi8KLQljYXNlIFNDVFBfUEFD
S0VUX0RST1BQRUQ6Ci0JY2FzZSBTQ1RQX0lOSVRJQVRJT05fQUNLOgkvKiB0aGlzIHNob3VsZCBu
b3QgaGFwcGVuICovCi0JY2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6Ci0JY2FzZSBTQ1RQX0FCT1JU
X0FTU09DSUFUSU9OOgotCWNhc2UgU0NUUF9PUEVSQVRJT05fRVJST1I6Ci0JY2FzZSBTQ1RQX1NI
VVRET1dOX0NPTVBMRVRFOgotCWNhc2UgU0NUUF9FQ05fRUNITzoKLQljYXNlIFNDVFBfRUNOX0NX
UjoKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotdm9pZAotc2N0
cF9yZXNldF9pbl9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJf
ZW50cmllcywgdWludDE2X3QgKmxpc3QpCi17Ci0JdWludDMyX3QgaTsKLQl1aW50MTZfdCB0ZW1w
OwotCi0JLyoKLQkgKiBXZSBzZXQgdGhpbmdzIHRvIDB4ZmZmZmZmZmYgc2luY2UgdGhpcyBpcyB0
aGUgbGFzdCBkZWxpdmVyZWQgc2VxdWVuY2UKLQkgKiBhbmQgd2Ugd2lsbCBiZSBzZW5kaW5nIGlu
IDAgYWZ0ZXIgdGhlIHJlc2V0LgotCSAqLwotCi0JaWYgKG51bWJlcl9lbnRyaWVzKSB7Ci0JCWZv
ciAoaSA9IDA7IGkgPCBudW1iZXJfZW50cmllczsgaSsrKSB7Ci0JCQl0ZW1wID0gbnRvaHMobGlz
dFtpXSk7Ci0JCQlpZiAodGVtcCA+PSBzdGNiLT5hc29jLnN0cmVhbWluY250KSB7Ci0JCQkJY29u
dGludWU7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLnN0cm1pblt0ZW1wXS5sYXN0X21pZF9kZWxpdmVy
ZWQgPSAweGZmZmZmZmZmOwotCQl9Ci0JfSBlbHNlIHsKLQkJbGlzdCA9IE5VTEw7Ci0JCWZvciAo
aSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbWluY250OyBpKyspIHsKLQkJCXN0Y2ItPmFzb2Mu
c3RybWluW2ldLmxhc3RfbWlkX2RlbGl2ZXJlZCA9IDB4ZmZmZmZmZmY7Ci0JCX0KLQl9Ci0Jc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9SRUNWLCBzdGNiLCBudW1iZXJfZW50
cmllcywgKHZvaWQgKilsaXN0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi1zdGF0aWMgdm9p
ZAotc2N0cF9yZXNldF9vdXRfc3RyZWFtcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90
IG51bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqbGlzdCkKLXsKLQl1aW50MzJfdCBpOwotCXVpbnQx
Nl90IHRlbXA7Ci0KLQlpZiAobnVtYmVyX2VudHJpZXMgPiAwKSB7Ci0JCWZvciAoaSA9IDA7IGkg
PCBudW1iZXJfZW50cmllczsgaSsrKSB7Ci0JCQl0ZW1wID0gbnRvaHMobGlzdFtpXSk7Ci0JCQlp
ZiAodGVtcCA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgewotCQkJCS8qIG5vIHN1Y2ggc3Ry
ZWFtICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbdGVtcF0u
bmV4dF9taWRfb3JkZXJlZCA9IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbdGVtcF0ubmV4dF9t
aWRfdW5vcmRlcmVkID0gMDsKLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNi
LT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4
dF9taWRfb3JkZXJlZCA9IDA7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5v
cmRlcmVkID0gMDsKLQkJfQotCX0KLQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1RSX1JF
U0VUX1NFTkQsIHN0Y2IsIG51bWJlcl9lbnRyaWVzLCAodm9pZCAqKWxpc3QsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3Jlc2V0X2NsZWFyX3BlbmRpbmcoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxp
c3QpCi17Ci0JdWludDMyX3QgaTsKLQl1aW50MTZfdCB0ZW1wOwotCi0JaWYgKG51bWJlcl9lbnRy
aWVzID4gMCkgewotCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgewotCQkJ
dGVtcCA9IG50b2hzKGxpc3RbaV0pOwotCQkJaWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1v
dXRjbnQpIHsKLQkJCQkvKiBubyBzdWNoIHN0cmVhbSAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQot
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLnN0YXRlID0gU0NUUF9TVFJFQU1fT1BFTjsKLQkJ
fQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsg
aSsrKSB7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVO
OwotCQl9Ci0JfQotfQotCi0KLXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1ZXN0ICoKLXNj
dHBfZmluZF9zdHJlYW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZXEs
IHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipiY2hrKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfcmVxdWVzdCAqcjsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0JaW50
IGxlbiwgY2xlbjsKLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpZiAoVEFJTFFfRU1QVFkoJnN0
Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlKSkgewotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0
c3RhbmRpbmcgPSAwOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5zdHJf
cmVzZXQgPT0gTlVMTCkgewotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcgPSAwOwot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQljaGsgPSBzdGNiLT5hc29jLnN0cl9yZXNldDsKLQlpZiAo
Y2hrLT5kYXRhID09IE5VTEwpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGJjaGspIHsK
LQkJLyogaGUgd2FudHMgYSBjb3B5IG9mIHRoZSBjaGsgcG9pbnRlciAqLwotCQkqYmNoayA9IGNo
azsKLQl9Ci0JY2xlbiA9IGNoay0+c2VuZF9zaXplOwotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0
cnVjdCBzY3RwX2NodW5raGRyICopOwotCXIgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jl
cXVlc3QgKikoY2ggKyAxKTsKLQlpZiAobnRvaGwoci0+cmVxdWVzdF9zZXEpID09IHNlcSkgewot
CQkvKiBmb3VuZCBpdCAqLwotCQlyZXR1cm4gKHIpOwotCX0KLQlsZW4gPSBTQ1RQX1NJWkUzMihu
dG9ocyhyLT5waC5wYXJhbV9sZW5ndGgpKTsKLQlpZiAoY2xlbiA+IChsZW4gKyAoaW50KXNpemVv
ZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpKSB7Ci0JCS8qIG1vdmUgdG8gdGhlIG5leHQgb25lLCB0
aGVyZSBjYW4gb25seSBiZSBhIG1heCBvZiB0d28gKi8KLQkJciA9IChzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfcmVxdWVzdCAqKSgoY2FkZHJfdClyICsgbGVuKTsKLQkJaWYgKG50b2hsKHItPnJl
cXVlc3Rfc2VxKSA9PSBzZXEpIHsKLQkJCXJldHVybiAocik7Ci0JCX0KLQl9Ci0JLyogdGhhdCBz
ZXEgaXMgbm90IGhlcmUgKi8KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9jbGVhbl91cF9zdHJlYW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoayA9
IHN0Y2ItPmFzb2Muc3RyX3Jlc2V0OwotCi0JaWYgKHN0Y2ItPmFzb2Muc3RyX3Jlc2V0ID09IE5V
TEwpIHsKLQkJcmV0dXJuOwotCX0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0KLQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAg
ICAgICAgICAgICAgICBjaGstPndob1RvLCBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9D
XzI4KTsKLQlUQUlMUV9SRU1PVkUoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkgICAgY2hr
LAotCSAgICBzY3RwX25leHQpOwotCWlmIChjaGstPmRhdGEpIHsKLQkJc2N0cF9tX2ZyZWVtKGNo
ay0+ZGF0YSk7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JfQotCWFzb2MtPmN0cmxfcXVldWVfY250
LS07Ci0Jc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CS8qc2FfaWdub3JlIE5PX05VTExfQ0hLKi8KLQlzdGNiLT5hc29jLnN0cl9yZXNldCA9IE5VTEw7
Ci19Ci0KLQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCQkgIHVpbnQzMl90IHNlcSwgdWludDMyX3QgYWN0aW9u
LAotCQkJCSAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICpyZXNwaW4pCi17Ci0J
dWludDE2X3QgdHlwZTsKLQlpbnQgbHBhcmFtX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYyA9ICZzdGNiLT5hc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCAqcmVxX3BhcmFtOwotCXN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAqcmVxX291dF9wYXJhbTsKLQlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAqcmVxX2luX3BhcmFtOwotCXVpbnQzMl90IG51bWJlcl9l
bnRyaWVzOwotCi0JaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0J
CS8qIGR1cGxpY2F0ZSAqLwotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAoc2VxID09IHN0Y2ItPmFz
b2Muc3RyX3Jlc2V0X3NlcV9vdXQpIHsKLQkJcmVxX3BhcmFtID0gc2N0cF9maW5kX3N0cmVhbV9y
ZXNldChzdGNiLCBzZXEsICZjaGspOwotCQlpZiAocmVxX3BhcmFtICE9IE5VTEwpIHsKLQkJCXN0
Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9vdXQrKzsKLQkJCXR5cGUgPSBudG9ocyhyZXFfcGFyYW0t
PnBoLnBhcmFtX3R5cGUpOwotCQkJbHBhcmFtX2xlbiA9IG50b2hzKHJlcV9wYXJhbS0+cGgucGFy
YW1fbGVuZ3RoKTsKLQkJCWlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VUX09VVF9SRVFVRVNUKSB7
Ci0JCQkJaW50IG5vX2NsZWFyID0gMDsKLQotCQkJCXJlcV9vdXRfcGFyYW0gPSAoc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICopcmVxX3BhcmFtOwotCQkJCW51bWJlcl9lbnRy
aWVzID0gKGxwYXJhbV9sZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9y
ZXF1ZXN0KSkgLyBzaXplb2YodWludDE2X3QpOwotCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRf
aXNfb3V0c3RhbmRpbmcgPSAwOwotCQkJCWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRp
bmcpCi0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZy0tOwotCQkJCWlmIChhY3Rp
b24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCkgewotCQkJCQkvKiBkbyBp
dCAqLwotCQkJCQlzY3RwX3Jlc2V0X291dF9zdHJlYW1zKHN0Y2IsIG51bWJlcl9lbnRyaWVzLCBy
ZXFfb3V0X3BhcmFtLT5saXN0X29mX3N0cmVhbXMpOwotCQkJCX0gZWxzZSBpZiAoYWN0aW9uID09
IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKLQkJCQkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5JRURfT1VULCBzdGNiLCBudW1iZXJfZW50cmllcywg
cmVxX291dF9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJ
CX0gZWxzZSBpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9JTl9QUk9HUkVT
UykgewotCQkJCQkvKiBTZXQgaXQgdXAgc28gd2UgZG9uJ3Qgc3RvcCByZXRyYW5zbWl0dGluZyAq
LwotCQkJCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKLQkJCQkJc3RjYi0+YXNv
Yy5zdHJfcmVzZXRfc2VxX291dC0tOwotCQkJCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0X2lzX291
dHN0YW5kaW5nID0gMTsKLQkJCQkJbm9fY2xlYXIgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJTEVEX09VVCwgc3RjYiwgbnVt
YmVyX2VudHJpZXMsIHJlcV9vdXRfcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLQkJCQl9Ci0JCQkJaWYgKG5vX2NsZWFyID09IDApIHsKLQkJCQkJc2N0cF9yZXNl
dF9jbGVhcl9wZW5kaW5nKHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXFfb3V0X3BhcmFtLT5saXN0
X29mX3N0cmVhbXMpOwotCQkJCX0KLQkJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNF
VF9JTl9SRVFVRVNUKSB7Ci0JCQkJcmVxX2luX3BhcmFtID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9pbl9yZXF1ZXN0ICopcmVxX3BhcmFtOwotCQkJCW51bWJlcl9lbnRyaWVzID0gKGxwYXJh
bV9sZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QpKSAvIHNp
emVvZih1aW50MTZfdCk7Ci0JCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykK
LQkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07Ci0JCQkJaWYgKGFjdGlvbiA9
PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEKSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlm
eShTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVOSUVEX0lOLCBzdGNiLAotCQkJCQkJCW51bWJlcl9l
bnRyaWVzLCByZXFfaW5fcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcywgU0NUUF9TT19OT1RfTE9DS0VE
KTsKLQkJCQl9IGVsc2UgaWYgKGFjdGlvbiAhPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVS
Rk9STUVEKSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TVFJfUkVTRVRfRkFJ
TEVEX0lOLCBzdGNiLAotCQkJCQkJCW51bWJlcl9lbnRyaWVzLCByZXFfaW5fcGFyYW0tPmxpc3Rf
b2Zfc3RyZWFtcywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHR5
cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TKSB7Ci0JCQkJLyogT2sgd2Ugbm93
IG1heSBoYXZlIG1vcmUgc3RyZWFtcyAqLwotCQkJCWludCBudW1fc3RyZWFtOwotCi0JCQkJbnVt
X3N0cmVhbSA9IHN0Y2ItPmFzb2Muc3RybV9wZW5kaW5nX2FkZF9zaXplOwotCQkJCWlmIChudW1f
c3RyZWFtID4gKHN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSAtIHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250KSkgewotCQkJCQkvKiBUU05IICovCi0JCQkJCW51bV9zdHJlYW0gPSBzdGNiLT5hc29j
LnN0cm1fcmVhbG91dHNpemUgLSBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsKLQkJCQl9Ci0JCQkJ
c3RjYi0+YXNvYy5zdHJtX3BlbmRpbmdfYWRkX3NpemUgPSAwOwotCQkJCWlmIChhc29jLT5zdHJl
YW1fcmVzZXRfb3V0c3RhbmRpbmcpCi0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGlu
Zy0tOwotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1F
RCkgewotCQkJCQkvKiBQdXQgdGhlIG5ldyBzdHJlYW1zIGludG8gZWZmZWN0ICovCi0JCQkJCWlu
dCBpOwotCQkJCQlmb3IgKCBpID0gYXNvYy0+c3RyZWFtb3V0Y250OyBpPCAoYXNvYy0+c3RyZWFt
b3V0Y250ICsgbnVtX3N0cmVhbSk7IGkrKykgewotCQkJCQkJYXNvYy0+c3RybW91dFtpXS5zdGF0
ZSA9IFNDVFBfU1RSRUFNX09QRU47Ci0JCQkJCX0KLQkJCQkJYXNvYy0+c3RyZWFtb3V0Y250ICs9
IG51bV9zdHJlYW07Ci0JCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwgc3Rj
Yi0+YXNvYy5zdHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsIDApOwotCQkJCX0g
ZWxzZSBpZiAoYWN0aW9uID09IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKLQkJ
CQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWlu
Y250LCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCwKLQkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9D
SEFOR0VfREVOSUVEKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVz
ZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0
Y250LAotCQkJCQkJCQkgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQpOwotCQkJCX0KLQkJ
CX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUykgewotCQkJ
CWlmIChhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpCi0JCQkJCWFzb2MtPnN0cmVhbV9y
ZXNldF9vdXRzdGFuZGluZy0tOwotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRf
UkVTVUxUX0RFTklFRCkgewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2Is
IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LAotCQkJCQkJ
CQkgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9ERU5JRUQpOwotCQkJCX0gZWxzZSBpZiAoYWN0aW9u
ICE9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpIHsKLQkJCQkJc2N0cF9ub3Rp
Znlfc3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5h
c29jLnN0cmVhbW91dGNudCwKLQkJCQkJCQkJICAgICBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVE
KTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYgKHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVF
U1QpIHsKLQkJCQkvKioKLQkJCQkgKiBhKSBBZG9wdCB0aGUgbmV3IGluIHRzbi4KLQkJCQkgKiBi
KSByZXNldCB0aGUgbWFwCi0JCQkJICogYykgQWRvcHQgdGhlIG5ldyBvdXQtdHNuCi0JCQkJICov
Ci0JCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqcmVzcDsKLQkJCQlz
dHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayBmd2R0c247Ci0JCQkJaW50IGFib3J0X2ZsYWcg
PSAwOwotCQkJCWlmIChyZXNwaW4gPT0gTlVMTCkgewotCQkJCQkvKiBodWggPyAqLwotCQkJCQly
ZXR1cm4gKDApOwotCQkJCX0KLQkJCQlpZiAobnRvaHMocmVzcGluLT5waC5wYXJhbV9sZW5ndGgp
IDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24pKSB7Ci0JCQkJ
CXJldHVybiAoMCk7Ci0JCQkJfQotCQkJCWlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRf
UkVTVUxUX1BFUkZPUk1FRCkgewotCQkJCQlyZXNwID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNl
dF9yZXNwb25zZV90c24gKilyZXNwaW47Ci0JCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFu
ZGluZy0tOwotCQkJCQlmd2R0c24uY2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVj
dCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSk7Ci0JCQkJCWZ3ZHRzbi5jaC5jaHVua190eXBlID0g
U0NUUF9GT1JXQVJEX0NVTV9UU047Ci0JCQkJCWZ3ZHRzbi5uZXdfY3VtdWxhdGl2ZV90c24gPSBo
dG9ubChudG9obChyZXNwLT5zZW5kZXJzX25leHRfdHNuKSAtIDEpOwotCQkJCQlzY3RwX2hhbmRs
ZV9mb3J3YXJkX3RzbihzdGNiLCAmZndkdHNuLCAmYWJvcnRfZmxhZywgTlVMTCwgMCk7Ci0JCQkJ
CWlmIChhYm9ydF9mbGFnKSB7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJCXN0Y2It
PmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcCA9IChudG9obChyZXNwLT5zZW5kZXJzX25leHRf
dHNuKSAtIDEpOwotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJCXNjdHBfbG9nX21hcCgwLCA3LCBh
c29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9TTElERV9SRVNVTFQpOwotCQkJ
CQl9Ci0KLQkJCQkJc3RjYi0+YXNvYy50c25fbGFzdF9kZWxpdmVyZWQgPSBzdGNiLT5hc29jLmN1
bXVsYXRpdmVfdHNuID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOwotCQkJCQlz
dGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBudG9obChyZXNwLT5zZW5kZXJzX25l
eHRfdHNuKTsKLQkJCQkJbWVtc2V0KHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheSwgMCwgc3RjYi0+
YXNvYy5tYXBwaW5nX2FycmF5X3NpemUpOwotCi0JCQkJCXN0Y2ItPmFzb2MuaGlnaGVzdF90c25f
aW5zaWRlX25yX21hcCA9IHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcDsKLQkJCQkJ
bWVtc2V0KHN0Y2ItPmFzb2MubnJfbWFwcGluZ19hcnJheSwgMCwgc3RjYi0+YXNvYy5tYXBwaW5n
X2FycmF5X3NpemUpOwotCi0JCQkJCXN0Y2ItPmFzb2Muc2VuZGluZ19zZXEgPSBudG9obChyZXNw
LT5yZWNlaXZlcnNfbmV4dF90c24pOwotCQkJCQlzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2VxID0g
c3RjYi0+YXNvYy5jdW11bGF0aXZlX3RzbjsKLQotCQkJCQlzY3RwX3Jlc2V0X291dF9zdHJlYW1z
KHN0Y2IsIDAsICh1aW50MTZfdCAqKSBOVUxMKTsKLQkJCQkJc2N0cF9yZXNldF9pbl9zdHJlYW0o
c3RjYiwgMCwgKHVpbnQxNl90ICopIE5VTEwpOwotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVz
ZXRfdHNuKHN0Y2IsIHN0Y2ItPmFzb2Muc2VuZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdf
YXJyYXlfYmFzZV90c24gKyAxKSwgMCk7Ci0JCQkJfSBlbHNlIGlmIChhY3Rpb24gPT0gU0NUUF9T
VFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkgewotCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVz
ZXRfdHNuKHN0Y2IsIHN0Y2ItPmFzb2Muc2VuZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdf
YXJyYXlfYmFzZV90c24gKyAxKSwKLQkJCQkJCQkJICAgICBTQ1RQX0FTU09DX1JFU0VUX0RFTklF
RCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X3RzbihzdGNi
LCBzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X2Jhc2Vf
dHNuICsgMSksCi0JCQkJCQkJCSAgICAgU0NUUF9BU1NPQ19SRVNFVF9GQUlMRUQpOwotCQkJCX0K
LQkJCX0KLQkJCS8qIGdldCByaWQgb2YgdGhlIHJlcXVlc3QgYW5kIGdldCB0aGUgcmVxdWVzdCBm
bGFncyAqLwotCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0J
CQkJc2N0cF9jbGVhbl91cF9zdHJlYW1fcmVzZXQoc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYg
KGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCXNjdHBfc2VuZF9zdHJl
YW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JfQot
CXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVx
dWVzdF9pbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrLAotICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICpyZXEsIGlu
dCB0cnVuYykKLXsKLQl1aW50MzJfdCBzZXE7Ci0JaW50IGxlbiwgaTsKLQlpbnQgbnVtYmVyX2Vu
dHJpZXM7Ci0JdWludDE2X3QgdGVtcDsKLQotCS8qCi0JICogcGVlciB3YW50cyBtZSB0byBzZW5k
IGEgc3RyLXJlc2V0IHRvIGhpbSBmb3IgbXkgb3V0Z29pbmcgc2VxJ3MgaWYKLQkgKiBzZXFfaW4g
aXMgcmlnaHQuCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+
YXNvYzsKLQotCXNlcSA9IG50b2hsKHJlcS0+cmVxdWVzdF9zZXEpOwotCWlmIChhc29jLT5zdHJf
cmVzZXRfc2VxX2luID09IHNlcSkgewotCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IGFz
b2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNldF9z
dXBwb3J0ICYgU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSkpIHsKLQkJCWFzb2MtPmxhc3Rf
cmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJfSBl
bHNlIGlmICh0cnVuYykgewotCQkJLyogQ2FuJ3QgZG8gaXQsIHNpbmNlIHRoZXkgZXhjZWVkZWQg
b3VyIGJ1ZmZlciBzaXplICAqLwotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQl9IGVsc2UgaWYgKHN0Y2ItPmFzb2Muc3Ry
ZWFtX3Jlc2V0X291dF9pc19vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCQlsZW4gPSBudG9ocyhyZXEt
PnBoLnBhcmFtX2xlbmd0aCk7Ci0JCQludW1iZXJfZW50cmllcyA9ICgobGVuIC0gc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0KSkgLyBzaXplb2YodWludDE2X3QpKTsK
LQkJCWlmIChudW1iZXJfZW50cmllcykgewotCQkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50
cmllczsgaSsrKSB7Ci0JCQkJCXRlbXAgPSBudG9ocyhyZXEtPmxpc3Rfb2Zfc3RyZWFtc1tpXSk7
Ci0JCQkJCWlmICh0ZW1wID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlhc29j
LT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7
Ci0JCQkJCQlnb3RvIGJhZF9ib3k7Ci0JCQkJCX0KLQkJCQkJcmVxLT5saXN0X29mX3N0cmVhbXNb
aV0gPSB0ZW1wOwotCQkJCX0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkr
KykgewotCQkJCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W3JlcS0+bGlzdF9vZl9zdHJlYW1zW2ld
XS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKSB7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRb
cmVxLT5saXN0X29mX3N0cmVhbXNbaV1dLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElO
RzsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogSXRzIGFsbCAqLwotCQkJCWZv
ciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQkJCWlmIChz
dGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikKLQkJCQkJCXN0
Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkc7Ci0J
CQkJfQotCQkJfQotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9S
RVNFVF9SRVNVTFRfUEVSRk9STUVEOwotCQl9IGVsc2UgewotCQkJLyogQ2FuJ3QgZG8gaXQsIHNp
bmNlIHdlIGhhdmUgc2VudCBvbmUgb3V0ICovCi0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsw
XSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfSU5fUFJPR1JFU1M7Ci0JCX0KLQliYWRf
Ym95OgotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0
X3Jlc2V0X2FjdGlvblswXSk7Ci0JCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4rKzsKLQl9IGVsc2Ug
aWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAxID09IHNlcSkgewotCQlzY3RwX2FkZF9zdHJl
YW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7Ci0J
fSBlbHNlIGlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMiA9PSBzZXEpIHsKLQkJc2N0cF9h
ZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25b
MV0pOwotCX0gZWxzZSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEs
IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKLQl9Ci0Jc2N0cF9zZW5k
X3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
LX0KLQotc3RhdGljIGludAotc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3RfdHNuKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAg
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICpyZXEpCi17Ci0JLyogcmVzZXQg
YWxsIGluIGFuZCBvdXQgYW5kIHVwZGF0ZSB0aGUgdHNuICovCi0JLyoKLQkgKiBBKSByZXNldCBt
eSBzdHItc2VxJ3Mgb24gaW4gYW5kIG91dC4gQikgU2VsZWN0IGEgcmVjZWl2ZSBuZXh0LAotCSAq
IGFuZCBzZXQgY3VtLWFjayB0byBpdC4gQWxzbyBwcm9jZXNzIHRoaXMgc2VsZWN0ZWQgbnVtYmVy
IGFzIGEKLQkgKiBmd2QtdHNuIGFzIHdlbGwuIEMpIHNldCBpbiB0aGUgcmVzcG9uc2UgbXkgbmV4
dCBzZW5kaW5nIHNlcS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayBmd2R0
c247Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQlpbnQg
YWJvcnRfZmxhZyA9IDA7Ci0JdWludDMyX3Qgc2VxOwotCi0Jc2VxID0gbnRvaGwocmVxLT5yZXF1
ZXN0X3NlcSk7Ci0JaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPT0gc2VxKSB7Ci0JCWFzb2Mt
Pmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblswXTsK
LQkJaWYgKCEoYXNvYy0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCAmIFNDVFBfRU5BQkxFX0NIQU5H
RV9BU1NPQ19SRVEpKSB7Ci0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RS
RUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7Ci0JCX0gZWxzZSB7Ci0JCQlmd2R0c24uY2guY2h1bmtf
bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSk7Ci0J
CQlmd2R0c24uY2guY2h1bmtfdHlwZSA9IFNDVFBfRk9SV0FSRF9DVU1fVFNOOwotCQkJZndkdHNu
LmNoLmNodW5rX2ZsYWdzID0gMDsKLQkJCWZ3ZHRzbi5uZXdfY3VtdWxhdGl2ZV90c24gPSBodG9u
bChzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgKyAxKTsKLQkJCXNjdHBfaGFuZGxl
X2ZvcndhcmRfdHNuKHN0Y2IsICZmd2R0c24sICZhYm9ydF9mbGFnLCBOVUxMLCAwKTsKLQkJCWlm
IChhYm9ydF9mbGFnKSB7Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0KLQkJCWFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9tYXAgKz0gU0NUUF9TVFJFQU1fUkVTRVRfVFNOX0RFTFRBOwotCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5B
QkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWFwKDAsIDEwLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwLCBTQ1RQX01BUF9TTElERV9SRVNVTFQpOwotCQkJfQotCQkJYXNvYy0+dHNuX2xhc3RfZGVs
aXZlcmVkID0gYXNvYy0+Y3VtdWxhdGl2ZV90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwOwotCQkJYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXAgKyAxOwotCQkJbWVtc2V0KGFzb2MtPm1hcHBpbmdfYXJyYXksIDAsIGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfc2l6ZSk7Ci0JCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
ID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKLQkJCW1lbXNldChhc29jLT5ucl9tYXBw
aW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwotCQkJYXRvbWljX2FkZF9p
bnQoJmFzb2MtPnNlbmRpbmdfc2VxLCAxKTsKLQkJCS8qIHNhdmUgb2ZmIGhpc3RvcmljYWwgZGF0
YSBmb3IgcmV0cmFucyAqLwotCQkJYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsxXSA9IGFzb2MtPmxh
c3Rfc2VuZGluZ19zZXFbMF07Ci0JCQlhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBdID0gYXNvYy0+
c2VuZGluZ19zZXE7Ci0JCQlhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFsxXSA9IGFzb2MtPmxhc3Rf
YmFzZV90c25zZW50WzBdOwotCQkJYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMF0gPSBhc29jLT5t
YXBwaW5nX2FycmF5X2Jhc2VfdHNuOwotCQkJc2N0cF9yZXNldF9vdXRfc3RyZWFtcyhzdGNiLCAw
LCAodWludDE2X3QgKikgTlVMTCk7Ci0JCQlzY3RwX3Jlc2V0X2luX3N0cmVhbShzdGNiLCAwLCAo
dWludDE2X3QgKikgTlVMTCk7Ci0JCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQ7Ci0JCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVz
ZXRfdHNuKHN0Y2IsIGFzb2MtPnNlbmRpbmdfc2VxLCAoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNl
X3RzbiArIDEpLCAwKTsKLQkJfQotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3Rzbihj
aGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0sCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMF0sIGFzb2MtPmxhc3RfYmFz
ZV90c25zZW50WzBdKTsKLQkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOwotCX0gZWxzZSBpZiAo
YXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDEgPT0gc2VxKSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9y
ZXNldF9yZXN1bHRfdHNuKGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSwKLQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsw
XSwgYXNvYy0+bGFzdF9iYXNlX3RzbnNlbnRbMF0pOwotCX0gZWxzZSBpZiAoYXNvYy0+c3RyX3Jl
c2V0X3NlcV9pbiAtIDIgPT0gc2VxKSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRf
dHNuKGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSwKLQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVsxXSwgYXNvYy0+bGFz
dF9iYXNlX3RzbnNlbnRbMV0pOwotCX0gZWxzZSB7Ci0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9y
ZXN1bHQoY2hrLCBzZXEsIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsK
LQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfaGFuZGxlX3N0cl9yZXNl
dF9yZXF1ZXN0X291dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrLAotICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAq
cmVxLCBpbnQgdHJ1bmMpCi17Ci0JdWludDMyX3Qgc2VxLCB0c247Ci0JaW50IG51bWJlcl9lbnRy
aWVzLCBsZW47Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+YXNvYzsK
LQotCXNlcSA9IG50b2hsKHJlcS0+cmVxdWVzdF9zZXEpOwotCi0JLyogbm93IGlmIGl0cyBub3Qg
YSBkdXBsaWNhdGUgd2UgcHJvY2VzcyBpdCAqLwotCWlmIChhc29jLT5zdHJfcmVzZXRfc2VxX2lu
ID09IHNlcSkgewotCQlsZW4gPSBudG9ocyhyZXEtPnBoLnBhcmFtX2xlbmd0aCk7Ci0JCW51bWJl
cl9lbnRyaWVzID0gKChsZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9y
ZXF1ZXN0KSkgLyBzaXplb2YodWludDE2X3QpKTsKLQkJLyoKLQkJICogdGhlIHNlbmRlciBpcyBy
ZXNldHRpbmcsIGhhbmRsZSB0aGUgbGlzdCBpc3N1ZS4uIHdlIG11c3QKLQkJICogYSkgdmVyaWZ5
IGlmIHdlIGNhbiBkbyB0aGUgcmVzZXQsIGlmIHNvIG5vIHByb2JsZW0gYikgSWYKLQkJICogd2Ug
Y2FuJ3QgZG8gdGhlIHJlc2V0IHdlIG11c3QgY29weSB0aGUgcmVxdWVzdC4gYykgcXVldWUKLQkJ
ICogaXQsIGFuZCBzZXR1cCB0aGUgZGF0YSBpbiBwcm9jZXNzb3IgdG8gdHJpZ2dlciBpdCBvZmYK
LQkJICogd2hlbiBuZWVkZWQgYW5kIGRlcXVldWUgYWxsIHRoZSBxdWV1ZWQgZGF0YS4KLQkJICov
Ci0JCXRzbiA9IG50b2hsKHJlcS0+c2VuZF9yZXNldF9hdF90c24pOwotCi0JCS8qIG1vdmUgdGhl
IHJlc2V0IGFjdGlvbiBiYWNrIG9uZSAqLwotCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9
IGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNl
dF9zdXBwb3J0ICYgU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSkpIHsKLQkJCWFzb2MtPmxh
c3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJ
fSBlbHNlIGlmICh0cnVuYykgewotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQl9IGVsc2UgaWYgKFNDVFBfVFNOX0dFKGFz
b2MtPmN1bXVsYXRpdmVfdHNuLCB0c24pKSB7Ci0JCQkvKiB3ZSBjYW4gZG8gaXQgbm93ICovCi0J
CQlzY3RwX3Jlc2V0X2luX3N0cmVhbShzdGNiLCBudW1iZXJfZW50cmllcywgcmVxLT5saXN0X29m
X3N0cmVhbXMpOwotCQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9S
RVNFVF9SRVNVTFRfUEVSRk9STUVEOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIHdlIG11c3Qg
cXVldWUgaXQgdXAgYW5kIHRodXMgd2FpdCBmb3IgdGhlIFRTTidzCi0JCQkgKiB0byBhcnJpdmUg
dGhhdCBhcmUgYXQgb3IgYmVmb3JlIHRzbgotCQkJICovCi0JCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cmVzZXRfbGlzdCAqbGlzdGU7Ci0JCQlpbnQgc2l6OwotCi0JCQlzaXogPSBzaXplb2Yoc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QpICsgKG51bWJlcl9lbnRyaWVzICogc2l6ZW9mKHVpbnQx
Nl90KSk7Ci0JCQlTQ1RQX01BTExPQyhsaXN0ZSwgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2xp
c3QgKiwKLQkJCQkgICAgc2l6LCBTQ1RQX01fU1RSRVNFVCk7Ci0JCQlpZiAobGlzdGUgPT0gTlVM
TCkgewotCQkJCS8qIGdhayBvdXQgb2YgbWVtb3J5ICovCi0JCQkJYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQkJCXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBd
KTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlsaXN0ZS0+c2VxID0gc2VxOwotCQkJbGlzdGUtPnRz
biA9IHRzbjsKLQkJCWxpc3RlLT5udW1iZXJfZW50cmllcyA9IG51bWJlcl9lbnRyaWVzOwotCQkJ
bWVtY3B5KCZsaXN0ZS0+bGlzdF9vZl9zdHJlYW1zLCByZXEtPmxpc3Rfb2Zfc3RyZWFtcywgbnVt
YmVyX2VudHJpZXMgKiBzaXplb2YodWludDE2X3QpKTsKLQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZh
c29jLT5yZXNldEhlYWQsIGxpc3RlLCBuZXh0X3Jlc3ApOwotCQkJYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfSU5fUFJPR1JFU1M7Ci0JCX0KLQkJ
c2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF0pOwotCQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7Ci0JfSBlbHNlIGlmICgoYXNv
Yy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDEpID09IHNlcSkgewotCQkvKgotCQkgKiBvbmUgc2VxIGJh
Y2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15Ci0JCSAqIHJlc3BvbnNlIHdh
cyBsb3N0LgotCQkgKi8KLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwg
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOwotCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNl
dF9zZXFfaW4gLSAyKSA9PSBzZXEpIHsKLQkJLyoKLQkJICogdHdvIHNlcSBiYWNrLCBqdXN0IGVj
aG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQotCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KLQkJ
ICovCi0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3Rf
cmVzZXRfYWN0aW9uWzFdKTsKLQl9IGVsc2UgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVz
dWx0KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7Ci0J
fQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X2FkZF9zdHJtKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotCQkJICAgICAg
IHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSAgKnN0cl9hZGQpCi17Ci0JLyoKLQkg
KiBQZWVyIGlzIHJlcXVlc3RpbmcgdG8gYWRkIG1vcmUgc3RyZWFtcy4KLQkgKiBJZiBpdHMgd2l0
aGluIG91ciBtYXgtc3RyZWFtcyB3ZSB3aWxsCi0JICogYWxsb3cgaXQuCi0JICovCi0JdWludDMy
X3QgbnVtX3N0cmVhbSwgaTsKLQl1aW50MzJfdCBzZXE7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MgPSAmc3RjYi0+YXNvYzsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY3Rs
LCAqbmN0bDsKLQotCS8qIEdldCB0aGUgbnVtYmVyLiAqLwotCXNlcSA9IG50b2hsKHN0cl9hZGQt
PnJlcXVlc3Rfc2VxKTsKLQludW1fc3RyZWFtID0gbnRvaHMoc3RyX2FkZC0+bnVtYmVyX29mX3N0
cmVhbXMpOwotCS8qIE5vdyB3aGF0IHdvdWxkIGJlIHRoZSBuZXcgdG90YWw/ICovCi0JaWYgKGFz
b2MtPnN0cl9yZXNldF9zZXFfaW4gPT0gc2VxKSB7Ci0JCW51bV9zdHJlYW0gKz0gc3RjYi0+YXNv
Yy5zdHJlYW1pbmNudDsKLQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblsxXSA9IHN0Y2It
PmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF07Ci0JCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0
X3N1cHBvcnQgJiBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRKSkgewotCQkJYXNvYy0+bGFz
dF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOwotCQl9
IGVsc2UgaWYgKChudW1fc3RyZWFtID4gc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zKSB8
fAotCQkgICAgICAgICAgIChudW1fc3RyZWFtID4gMHhmZmZmKSkgewotCQkJLyogV2UgbXVzdCBy
ZWplY3QgaXQgdGhleSBhc2sgZm9yIHRvIG1hbnkgKi8KLSAgZGVuaWVkOgotCQkJc3RjYi0+YXNv
Yy5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7
Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPaywgd2UgY2FuIGRvIHRoYXQgOi0pICovCi0JCQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1faW4gKm9sZHN0cm07Ci0KLQkJCS8qIHNhdmUgb2ZmIHRoZSBvbGQgKi8KLQkJ
CW9sZHN0cm0gPSBzdGNiLT5hc29jLnN0cm1pbjsKLQkJCVNDVFBfTUFMTE9DKHN0Y2ItPmFzb2Mu
c3RybWluLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKiwKLQkJCSAgICAgICAgICAgIChudW1fc3Ry
ZWFtICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9pbikpLAotCQkJICAgICAgICAgICAgU0NU
UF9NX1NUUk1JKTsKLQkJCWlmIChzdGNiLT5hc29jLnN0cm1pbiA9PSBOVUxMKSB7Ci0JCQkJc3Rj
Yi0+YXNvYy5zdHJtaW4gPSBvbGRzdHJtOwotCQkJCWdvdG8gZGVuaWVkOwotCQkJfQotCQkJLyog
Y29weSBvZmYgdGhlIG9sZCBkYXRhICovCi0JCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5z
dHJlYW1pbmNudDsgaSsrKSB7Ci0JCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtaW5baV0u
aW5xdWV1ZSk7Ci0JCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtaW5baV0udW5vX2lucXVl
dWUpOwotCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLnNpZCA9IGk7Ci0JCQkJc3RjYi0+YXNvYy5z
dHJtaW5baV0ubGFzdF9taWRfZGVsaXZlcmVkID0gb2xkc3RybVtpXS5sYXN0X21pZF9kZWxpdmVy
ZWQ7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0uZGVsaXZlcnlfc3RhcnRlZCA9IG9sZHN0cm1b
aV0uZGVsaXZlcnlfc3RhcnRlZDsKLQkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5wZF9hcGlfc3Rh
cnRlZCA9IG9sZHN0cm1baV0ucGRfYXBpX3N0YXJ0ZWQ7Ci0JCQkJLyogbm93IGFueXRoaW5nIG9u
IHRob3NlIHF1ZXVlcz8gKi8KLQkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoY3RsLCAmb2xkc3RybVtp
XS5pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmN0bCkgewotCQkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0
cm1baV0uaW5xdWV1ZSwgY3RsLCBuZXh0X2luc3RybSk7Ci0JCQkJCVRBSUxRX0lOU0VSVF9UQUlM
KCZzdGNiLT5hc29jLnN0cm1pbltpXS5pbnF1ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKLQkJCQl9
Ci0JCQkJVEFJTFFfRk9SRUFDSF9TQUZFKGN0bCwgJm9sZHN0cm1baV0udW5vX2lucXVldWUsIG5l
eHRfaW5zdHJtLCBuY3RsKSB7Ci0JCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RybVtpXS51bm9faW5x
dWV1ZSwgY3RsLCBuZXh0X2luc3RybSk7Ci0JCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5h
c29jLnN0cm1pbltpXS51bm9faW5xdWV1ZSwgY3RsLCBuZXh0X2luc3RybSk7Ci0JCQkJfQotCQkJ
fQotCQkJLyogSW5pdCB0aGUgbmV3IHN0cmVhbXMgKi8KLQkJCWZvciAoaSA9IHN0Y2ItPmFzb2Mu
c3RyZWFtaW5jbnQ7IGkgPCBudW1fc3RyZWFtOyBpKyspIHsKLQkJCQlUQUlMUV9JTklUKCZzdGNi
LT5hc29jLnN0cm1pbltpXS5pbnF1ZXVlKTsKLQkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0
cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0JCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0uc2lkID0gaTsK
LQkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZm
OwotCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLnBkX2FwaV9zdGFydGVkID0gMDsKLQkJCQlzdGNi
LT5hc29jLnN0cm1pbltpXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKLQkJCX0KLQkJCVNDVFBfRlJF
RShvbGRzdHJtLCBTQ1RQX01fU1RSTUkpOwotCQkJLyogdXBkYXRlIHRoZSBzaXplICovCi0JCQlz
dGNiLT5hc29jLnN0cmVhbWluY250ID0gbnVtX3N0cmVhbTsKLQkJCXN0Y2ItPmFzb2MubGFzdF9y
ZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEOwotCQkJ
c2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNiLT5hc29jLnN0cmVhbWluY250
LCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCwgMCk7Ci0JCX0KLQkJc2N0cF9hZGRfc3RyZWFtX3Jl
c2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOwotCQlhc29j
LT5zdHJfcmVzZXRfc2VxX2luKys7Ci0JfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9p
biAtIDEpID09IHNlcSkgewotCQkvKgotCQkgKiBvbmUgc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNr
IGxhc3QgYWN0aW9uIHNpbmNlIG15Ci0JCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgotCQkgKi8KLQkJ
c2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9h
Y3Rpb25bMF0pOwotCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyKSA9PSBz
ZXEpIHsKLQkJLyoKLQkJICogdHdvIHNlcSBiYWNrLCBqdXN0IGVjaG8gYmFjayBsYXN0IGFjdGlv
biBzaW5jZSBteQotCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KLQkJICovCi0JCXNjdHBfYWRkX3N0
cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdKTsK
LQl9IGVsc2UgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBTQ1RQ
X1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7Ci0KLQl9Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zY3RwX2hhbmRsZV9zdHJfcmVzZXRfYWRkX291dF9zdHJtKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotCQkJCSAgIHN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9hZGRfc3RybSAgKnN0cl9hZGQpCi17Ci0JLyoKLQkgKiBQZWVyIGlzIHJlcXVl
c3RpbmcgdG8gYWRkIG1vcmUgc3RyZWFtcy4KLQkgKiBJZiBpdHMgd2l0aGluIG91ciBtYXgtc3Ry
ZWFtcyB3ZSB3aWxsCi0JICogYWxsb3cgaXQuCi0JICovCi0JdWludDE2X3QgbnVtX3N0cmVhbTsK
LQl1aW50MzJfdCBzZXE7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MgPSAmc3RjYi0+
YXNvYzsKLQotCS8qIEdldCB0aGUgbnVtYmVyLiAqLwotCXNlcSA9IG50b2hsKHN0cl9hZGQtPnJl
cXVlc3Rfc2VxKTsKLQludW1fc3RyZWFtID0gbnRvaHMoc3RyX2FkZC0+bnVtYmVyX29mX3N0cmVh
bXMpOwotCS8qIE5vdyB3aGF0IHdvdWxkIGJlIHRoZSBuZXcgdG90YWw/ICovCi0JaWYgKGFzb2Mt
PnN0cl9yZXNldF9zZXFfaW4gPT0gc2VxKSB7Ci0JCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rp
b25bMV0gPSBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdOwotCQlpZiAoIShhc29jLT5s
b2NhbF9zdHJyZXNldF9zdXBwb3J0ICYgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSkpIHsK
LQkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxU
X0RFTklFRDsKLQkJfSBlbHNlIGlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNldF9vdXRzdGFuZGlu
ZykgewotCQkJLyogV2UgbXVzdCByZWplY3QgaXQgd2UgaGF2ZSBzb21ldGhpbmcgcGVuZGluZyAq
LwotCQkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VU
X1JFU1VMVF9FUlJfSU5fUFJPR1JFU1M7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBPaywgd2UgY2FuIGRv
IHRoYXQgOi0pICovCi0JCQlpbnQgbXljaGs7Ci0JCQlteWNoayA9IHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250OwotCQkJbXljaGsgKz0gbnVtX3N0cmVhbTsKLQkJCWlmIChteWNoayA8IDB4MTAwMDAp
IHsKLQkJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVT
RVRfUkVTVUxUX1BFUkZPUk1FRDsKLQkJCQlpZiAoc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3Rj
YiwgMCwgTlVMTCwgMCwgMCwgMSwgbnVtX3N0cmVhbSwgMCwgMSkpIHsKLQkJCQkJc3RjYi0+YXNv
Yy5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7
Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBd
ID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKLQkJCX0KLQkJfQotCQlzY3RwX2Fk
ZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0
aW9uWzBdKTsKLQkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOwotCX0gZWxzZSBpZiAoKGFzb2Mt
PnN0cl9yZXNldF9zZXFfaW4gLSAxKSA9PSBzZXEpIHsKLQkJLyoKLQkJICogb25lIHNlcSBiYWNr
LCBqdXN0IGVjaG8gYmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQotCQkgKiByZXNwb25zZSB3YXMg
bG9zdC4KLQkJICovCi0JCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFz
b2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKLQl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRf
c2VxX2luIC0gMikgPT0gc2VxKSB7Ci0JCS8qCi0JCSAqIHR3byBzZXEgYmFjaywganVzdCBlY2hv
IGJhY2sgbGFzdCBhY3Rpb24gc2luY2UgbXkKLQkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCi0JCSAq
LwotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jl
c2V0X2FjdGlvblsxXSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3Vs
dChjaGssIHNlcSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOwotCX0K
LX0KLQotI2lmICFkZWZpbmVkKF9fUGFuZGFfXykKLSNpZmRlZiBfX0dOVUNfXwotX19hdHRyaWJ1
dGVfXyAoKG5vaW5saW5lKSkKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgaW50Ci1zY3RwX2hhbmRs
ZV9zdHJlYW1fcmVzZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwgaW50
IG9mZnNldCwKLQkJCSBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2hfcmVxKQotewotCXVpbnQxNl90
IHJlbWFpbmluZ19sZW5ndGgsIHBhcmFtX2xlbiwgcHR5cGU7Ci0Jc3RydWN0IHNjdHBfcGFyYW1o
ZHIgcHN0b3JlOwotCXVpbnQ4X3QgY3N0b3JlW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOwotCXVp
bnQzMl90IHNlcSA9IDA7Ci0JaW50IG51bV9yZXEgPSAwOwotCWludCB0cnVuYyA9IDA7Ci0Jc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JaW50IHJldF9jb2RlID0gMDsKLQlpbnQgbnVtX3Bh
cmFtID0gMDsKLQotCS8qIG5vdyBpdCBtYXkgYmUgYSByZXNldCBvciBhIHJlc2V0LXJlc3BvbnNl
ICovCi0JcmVtYWluaW5nX2xlbmd0aCA9IG50b2hzKGNoX3JlcS0+Y2h1bmtfbGVuZ3RoKSAtIHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0KLQkvKiBzZXR1cCBmb3IgYWRkaW5nIHRoZSBy
ZXNwb25zZSAqLwotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0g
TlVMTCkgewotCQlyZXR1cm4gKHJldF9jb2RlKTsKLQl9Ci0JY2hrLT5jb3B5X2J5X3JlZiA9IDA7
Ci0JY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaGstPnJlYy5j
aHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKLQljaGstPmZsYWdzID0gMDsKLQljaGstPmFzb2Mg
PSAmc3RjYi0+YXNvYzsKLQljaGstPm5vX2ZyX2FsbG93ZWQgPSAwOwotCWNoay0+Ym9va19zaXpl
ID0gY2hrLT5zZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCWNoay0+
Ym9va19zaXplX3NjYWxlID0gMDsKLQljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
TUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKLQlzdHJyZXNfbm9jaHVuazoKLQkJaWYgKGNoay0+ZGF0YSkgewotCQkJc2N0cF9tX2Zy
ZWVtKGNoay0+ZGF0YSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQl9Ci0JCXNjdHBfZnJlZV9h
X2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuIChyZXRfY29k
ZSk7Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7
Ci0KLQkvKiBzZXR1cCBjaHVuayBwYXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9EQVRB
R1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWNoay0+d2hvVG8gPSBOVUxMOwot
Ci0JY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNo
dW5rX3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNo
LT5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKGNo
ay0+ZGF0YSkgPSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7Ci0Jb2Zmc2V0ICs9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0Jd2hpbGUgKHJlbWFpbmluZ19sZW5ndGggPj0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgewotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LCBzaXplb2YocHN0b3JlKSwgKHVpbnQ4X3QgKikm
cHN0b3JlKTsKLQkJaWYgKHBoID09IE5VTEwpIHsKLQkJCS8qIFRTTkggKi8KLQkJCWJyZWFrOwot
CQl9Ci0JCXBhcmFtX2xlbiA9IG50b2hzKHBoLT5wYXJhbV9sZW5ndGgpOwotCQlpZiAoKHBhcmFt
X2xlbiA+IHJlbWFpbmluZ19sZW5ndGgpIHx8Ci0JCSAgICAocGFyYW1fbGVuIDwgKHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBzaXplb2YodWludDMyX3QpKSkpIHsKLQkJCS8qIGJhZCBw
YXJhbWV0ZXIgbGVuZ3RoICovCi0JCQlicmVhazsKLQkJfQotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LCBtaW4ocGFyYW1fbGVuLCBzaXplb2Yo
Y3N0b3JlKSksCi0JCQkJCQkJICAgKHVpbnQ4X3QgKikmY3N0b3JlKTsKLQkJaWYgKHBoID09IE5V
TEwpIHsKLQkJCS8qIFRTTkggKi8KLQkJCWJyZWFrOwotCQl9Ci0JCXB0eXBlID0gbnRvaHMocGgt
PnBhcmFtX3R5cGUpOwotCQludW1fcGFyYW0rKzsKLQkJaWYgKHBhcmFtX2xlbiA+IHNpemVvZihj
c3RvcmUpKSB7Ci0JCQl0cnVuYyA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQl0cnVuYyA9IDA7Ci0JCX0K
LQkJaWYgKG51bV9wYXJhbSA+IFNDVFBfTUFYX1JFU0VUX1BBUkFNUykgewotCQkJLyogaGl0IHRo
ZSBtYXggb2YgcGFyYW1ldGVycyBhbHJlYWR5IHNvcnJ5Li4gKi8KLQkJCWJyZWFrOwotCQl9Ci0J
CWlmIChwdHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVCkgewotCQkJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICpyZXFfb3V0OwotCi0JCQlpZiAocGFyYW1fbGVu
IDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkpIHsKLQkJCQli
cmVhazsKLQkJCX0KLQkJCXJlcV9vdXQgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9y
ZXF1ZXN0ICopcGg7Ci0JCQludW1fcmVxKys7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVz
ZXRfb3V0c3RhbmRpbmcpIHsKLQkJCQlzZXEgPSBudG9obChyZXFfb3V0LT5yZXNwb25zZV9zZXEp
OwotCQkJCWlmIChzZXEgPT0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dCkgewotCQkJCQkv
KiBpbXBsaWNpdCBhY2sgKi8KLQkJCQkJKHZvaWQpc2N0cF9oYW5kbGVfc3RyZWFtX3Jlc2V0X3Jl
c3BvbnNlKHN0Y2IsIHNlcSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCwgTlVM
TCk7Ci0JCQkJfQotCQkJfQotCQkJc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3Rfb3V0KHN0
Y2IsIGNoaywgcmVxX291dCwgdHJ1bmMpOwotCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RS
X1JFU0VUX0FERF9PVVRfU1RSRUFNUykgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2Fk
ZF9zdHJtICAqc3RyX2FkZDsKLQotCQkJaWYgKHBhcmFtX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0pKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzdHJfYWRk
ID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSAgKilwaDsKLQkJCW51bV9yZXEr
KzsKLQkJCXNjdHBfaGFuZGxlX3N0cl9yZXNldF9hZGRfc3RybShzdGNiLCBjaGssIHN0cl9hZGQp
OwotCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX0FERF9JTl9TVFJFQU1TKSB7
Ci0JCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gICpzdHJfYWRkOwotCi0JCQlp
ZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSkp
IHsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXN0cl9hZGQgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2FkZF9zdHJtICAqKXBoOwotCQkJbnVtX3JlcSsrOwotCQkJc2N0cF9oYW5kbGVfc3RyX3Jl
c2V0X2FkZF9vdXRfc3RybShzdGNiLCBjaGssIHN0cl9hZGQpOwotCQl9IGVsc2UgaWYgKHB0eXBl
ID09IFNDVFBfU1RSX1JFU0VUX0lOX1JFUVVFU1QpIHsKLQkJCXN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9pbl9yZXF1ZXN0ICpyZXFfaW47Ci0KLQkJCW51bV9yZXErKzsKLQkJCXJlcV9pbiA9IChz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCAqKXBoOwotCQkJc2N0cF9oYW5kbGVf
c3RyX3Jlc2V0X3JlcXVlc3RfaW4oc3RjYiwgY2hrLCByZXFfaW4sIHRydW5jKTsKLQkJfSBlbHNl
IGlmIChwdHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9UU05fUkVRVUVTVCkgewotCQkJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICpyZXFfdHNuOwotCi0JCQludW1fcmVxKys7Ci0J
CQlyZXFfdHNuID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqKXBoOwot
CQkJaWYgKHNjdHBfaGFuZGxlX3N0cl9yZXNldF9yZXF1ZXN0X3RzbihzdGNiLCBjaGssIHJlcV90
c24pKSB7Ci0JCQkJcmV0X2NvZGUgPSAxOwotCQkJCWdvdG8gc3RycmVzX25vY2h1bms7Ci0JCQl9
Ci0JCQkvKiBubyBtb3JlICovCi0JCQlicmVhazsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQ
X1NUUl9SRVNFVF9SRVNQT05TRSkgewotCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3Bv
bnNlICpyZXNwOwotCQkJdWludDMyX3QgcmVzdWx0OwotCi0JCQlpZiAocGFyYW1fbGVuIDwgc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZSkpIHsKLQkJCQlicmVhazsKLQkJ
CX0KLQkJCXJlc3AgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlICopcGg7Ci0J
CQlzZXEgPSBudG9obChyZXNwLT5yZXNwb25zZV9zZXEpOwotCQkJcmVzdWx0ID0gbnRvaGwocmVz
cC0+cmVzdWx0KTsKLQkJCWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3Rj
Yiwgc2VxLCByZXN1bHQsIHJlc3ApKSB7Ci0JCQkJcmV0X2NvZGUgPSAxOwotCQkJCWdvdG8gc3Ry
cmVzX25vY2h1bms7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlicmVhazsKLQkJfQotCQlvZmZzZXQg
Kz0gU0NUUF9TSVpFMzIocGFyYW1fbGVuKTsKLQkJaWYgKHJlbWFpbmluZ19sZW5ndGggPj0gU0NU
UF9TSVpFMzIocGFyYW1fbGVuKSkgewotCQkJcmVtYWluaW5nX2xlbmd0aCAtPSBTQ1RQX1NJWkUz
MihwYXJhbV9sZW4pOwotCQl9IGVsc2UgewotCQkJcmVtYWluaW5nX2xlbmd0aCA9IDA7Ci0JCX0K
LQl9Ci0JaWYgKG51bV9yZXEgPT0gMCkgewotCQkvKiB3ZSBoYXZlIG5vIHJlc3BvbnNlIGZyZWUg
dGhlIHN0dWZmICovCi0JCWdvdG8gc3RycmVzX25vY2h1bms7Ci0JfQotCS8qIG9rIHdlIGhhdmUg
YSBjaHVuayB0byBsaW5rIGluICovCi0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuY29u
dHJvbF9zZW5kX3F1ZXVlLAotCQkJICBjaGssCi0JCQkgIHNjdHBfbmV4dCk7Ci0Jc3RjYi0+YXNv
Yy5jdHJsX3F1ZXVlX2NudCsrOwotCXJldHVybiAocmV0X2NvZGUpOwotfQotCi0vKgotICogSGFu
ZGxlIGEgcm91dGVyIG9yIGVuZHBvaW50cyByZXBvcnQgb2YgYSBwYWNrZXQgbG9zcywgdGhlcmUg
YXJlIHR3byB3YXlzCi0gKiB0byBoYW5kbGUgdGhpcywgZWl0aGVyIHdlIGdldCB0aGUgd2hvbGUg
cGFja2V0IGFuZCBtdXN0IGRpc2VjdCBpdAotICogb3Vyc2VsdmVzIChwb3NzaWJseSB3aXRoIHRy
dW5jYXRpb24gYW5kIG9yIGNvcnJ1cHRpb24pIG9yIGl0IGlzIGEgc3VtbWFyeQotICogZnJvbSBh
IG1pZGRsZSBib3ggdGhhdCBkaWQgdGhlIGRpc2VjdHRpbmcgZm9yIHVzLgotICovCi1zdGF0aWMg
dm9pZAotc2N0cF9oYW5kbGVfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVu
ayAqY3AsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
IHVpbnQzMl90IGxpbWl0KQotewotCXVpbnQzMl90IGJvdHRsZV9idywgb25fcXVldWU7Ci0JdWlu
dDE2X3QgdHJ1bmNfbGVuOwotCXVuc2lnbmVkIGludCBjaGxlbjsKLQl1bnNpZ25lZCBpbnQgYXQ7
Ci0Jc3RydWN0IHNjdHBfY2h1bmtfZGVzYyBkZXNjOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aDsKLQotCWNobGVuID0gbnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCk7Ci0JY2hsZW4gLT0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmspOwotCS8qIFhYWCBwb3NzaWJsZSBjaGxlbiB1
bmRlcmZsb3cgKi8KLQlpZiAoY2hsZW4gPT0gMCkgewotCQljaCA9IE5VTEw7Ci0JCWlmIChjcC0+
Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkKLQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3BkcnBid3JwdCk7Ci0JfSBlbHNlIHsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmto
ZHIgKikoY3AtPmRhdGEgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQkJY2hsZW4gLT0gc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJLyogWFhYIHBvc3NpYmxlIGNobGVuIHVuZGVyZmxvdyAq
LwotCQltZW1zZXQoJmRlc2MsIDAsIHNpemVvZihkZXNjKSk7Ci0JfQotCXRydW5jX2xlbiA9ICh1
aW50MTZfdCkgbnRvaHMoY3AtPnRydW5jX2xlbik7Ci0JaWYgKHRydW5jX2xlbiA+IGxpbWl0KSB7
Ci0JCXRydW5jX2xlbiA9IGxpbWl0OwotCX0KLQotCS8qIG5vdyB0aGUgY2h1bmtzIHRoZW1zZWx2
ZXMgKi8KLQl3aGlsZSAoKGNoICE9IE5VTEwpICYmIChjaGxlbiA+PSBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpKSkgewotCQlkZXNjLmNodW5rX3R5cGUgPSBjaC0+Y2h1bmtfdHlwZTsKLQkJ
LyogZ2V0IGFtb3VudCB3ZSBuZWVkIHRvIG1vdmUgKi8KLQkJYXQgPSBudG9ocyhjaC0+Y2h1bmtf
bGVuZ3RoKTsKLQkJaWYgKGF0IDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgewotCQkJ
LyogY29ycnVwdCBjaHVuaywgbWF5YmUgYXQgdGhlIGVuZD8gKi8KLQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3BkcnBjcnVwdCk7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAodHJ1bmNfbGVuID09IDAp
IHsKLQkJCS8qIHdlIGFyZSBzdXBwb3NlZCB0byBoYXZlIGFsbCBvZiBpdCAqLwotCQkJaWYgKGF0
ID4gY2hsZW4pIHsKLQkJCQkvKiBjb3JydXB0IHNraXAgaXQgKi8KLQkJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19wZHJwY3J1cHQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9IGVsc2UgewotCQkJLyog
aXMgdGhlcmUgZW5vdWdoIG9mIGl0IGxlZnQgPyAqLwotCQkJaWYgKGRlc2MuY2h1bmtfdHlwZSA9
PSBTQ1RQX0RBVEEpIHsKLQkJCQlpZiAoY2hsZW4gPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFf
Y2h1bmspICsKLQkJCQkgICAgc2l6ZW9mKGRlc2MuZGF0YV9ieXRlcykpKSB7Ci0JCQkJCWJyZWFr
OwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGNobGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2NodW5raGRyKSkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGRlc2Mu
Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHsKLQkJCS8qIGNhbiB3ZSBnZXQgb3V0IHRoZSB0c24/
ICovCi0JCQlpZiAoKGNwLT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSkK
LQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwbWJkYSk7Ci0KLQkJCWlmIChjaGxlbiA+PSAo
c2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgc2l6ZW9mKHVpbnQzMl90KSkpIHsKLQkJ
CQkvKiB5ZXAgKi8KLQkJCQlzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICpkY3A7Ci0JCQkJdWludDhf
dCAqZGRwOwotCQkJCXVuc2lnbmVkIGludCBpaWk7Ci0KLQkJCQlkY3AgPSAoc3RydWN0IHNjdHBf
ZGF0YV9jaHVuayAqKWNoOwotCQkJCWRkcCA9ICh1aW50OF90ICopIChkY3AgKyAxKTsKLQkJCQlm
b3IgKGlpaSA9IDA7IGlpaSA8IHNpemVvZihkZXNjLmRhdGFfYnl0ZXMpOyBpaWkrKykgewotCQkJ
CQlkZXNjLmRhdGFfYnl0ZXNbaWlpXSA9IGRkcFtpaWldOwotCQkJCX0KLQkJCQlkZXNjLnRzbl9p
ZmFueSA9IGRjcC0+ZHAudHNuOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBub3BlIHdlIGFyZSBkb25l
LiAqLwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBuZWRhdCk7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGNwLT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9N
SURETEVfQk9YKSkKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wZHJwbWJjdCk7Ci0JCX0KLQot
CQlpZiAocHJvY2Vzc19jaHVua19kcm9wKHN0Y2IsICZkZXNjLCBuZXQsIGNwLT5jaC5jaHVua19m
bGFncykpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBwZGJyayk7Ci0JCQlicmVhazsK
LQkJfQotCQlpZiAoU0NUUF9TSVpFMzIoYXQpID4gY2hsZW4pIHsKLQkJCWJyZWFrOwotCQl9Ci0J
CWNobGVuIC09IFNDVFBfU0laRTMyKGF0KTsKLQkJaWYgKGNobGVuIDwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NodW5raGRyKSkgewotCQkJLyogZG9uZSwgbm9uZSBsZWZ0ICovCi0JCQlicmVhazsKLQkJ
fQotCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdCljaCArIFNDVFBfU0la
RTMyKGF0KSk7Ci0JfQotCS8qIE5vdyB1cGRhdGUgYW55IHJ3bmQgLS0tIHBvc3NpYmx5ICovCi0J
aWYgKChjcC0+Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkgPT0gMCkgewot
CQkvKiBGcm9tIGEgcGVlciwgd2UgZ2V0IGEgcnduZCByZXBvcnQgKi8KLQkJdWludDMyX3QgYV9y
d25kOwotCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBmZWhvcyk7Ci0KLQkJYm90dGxlX2J3
ID0gbnRvaGwoY3AtPmJvdHRsZV9idyk7Ci0JCW9uX3F1ZXVlID0gbnRvaGwoY3AtPmN1cnJlbnRf
b25xKTsKLQkJaWYgKGJvdHRsZV9idyAmJiBvbl9xdWV1ZSkgewotCQkJLyogYSByd25kIHJlcG9y
dCBpcyBpbiBoZXJlICovCi0JCQlpZiAoYm90dGxlX2J3ID4gb25fcXVldWUpCi0JCQkJYV9yd25k
ID0gYm90dGxlX2J3IC0gb25fcXVldWU7Ci0JCQllbHNlCi0JCQkJYV9yd25kID0gMDsKLQotCQkJ
aWYgKGFfcnduZCA9PSAwKQotCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7Ci0JCQllbHNl
IHsKLQkJCQlpZiAoYV9yd25kID4gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpIHsKLQkJCQkJc3Rj
Yi0+YXNvYy5wZWVyc19yd25kID0KLQkJCQkJICAgIGFfcnduZCAtIHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7Ci0J
CQkJfQotCQkJCWlmIChzdGNiLT5hc29jLnBlZXJzX3J3bmQgPAotCQkJCSAgICBzdGNiLT5zY3Rw
X2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewotCQkJCQkvKiBTV1Mgc2VuZGVyIHNpZGUg
ZW5nYWdlcyAqLwotCQkJCQlzdGNiLT5hc29jLnBlZXJzX3J3bmQgPSAwOwotCQkJCX0KLQkJCX0K
LQkJfQotCX0gZWxzZSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBmbWJveCk7Ci0JfQot
Ci0JLyogbm93IG1pZGRsZSBib3hlcyBpbiBzYXQgbmV0d29ya3MgZ2V0IGEgY3duZCBidW1wICov
Ci0JaWYgKChjcC0+Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0ZST01fTUlERExFX0JPWCkgJiYKLQkg
ICAgKHN0Y2ItPmFzb2Muc2F0X3QzX2xvc3NfcmVjb3ZlcnkgPT0gMCkgJiYKLQkgICAgKHN0Y2It
PmFzb2Muc2F0X25ldHdvcmspKSB7Ci0JCS8qCi0JCSAqIFRoaXMgaXMgZGViYXRhYmxlIGJ1dCBm
b3Igc2F0IG5ldHdvcmtzIGl0IG1ha2VzIHNlbnNlCi0JCSAqIE5vdGUgaWYgYSBUMyB0aW1lciBo
YXMgd2VudCBvZmYsIHdlIHdpbGwgcHJvaGliaXQgYW55Ci0JCSAqIGNoYW5nZXMgdG8gY3duZCB1
bnRpbCB3ZSBleGl0IHRoZSB0MyBsb3NzIHJlY292ZXJ5LgotCQkgKi8KLQkJc3RjYi0+YXNvYy5j
Y19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZChzdGNiLAot
CQkJbmV0LCBjcCwgJmJvdHRsZV9idywgJm9uX3F1ZXVlKTsKLQl9Ci19Ci0KLS8qCi0gKiBoYW5k
bGVzIGFsbCBjb250cm9sIGNodW5rcyBpbiBhIHBhY2tldCBpbnB1dHM6IC0gbTogbWJ1ZiBjaGFp
biwgYXNzdW1lZCB0bwotICogc3RpbGwgY29udGFpbiBJUC9TQ1RQIGhlYWRlciAtIHN0Y2I6IGlz
IHRoZSB0Y2IgZm91bmQgZm9yIHRoaXMgcGFja2V0IC0KLSAqIG9mZnNldDogb2Zmc2V0IGludG8g
dGhlIG1idWYgY2hhaW4gdG8gZmlyc3QgY2h1bmtoZHIgLSBsZW5ndGg6IGlzIHRoZQotICogbGVu
Z3RoIG9mIHRoZSBjb21wbGV0ZSBwYWNrZXQgb3V0cHV0czogLSBsZW5ndGg6IG1vZGlmaWVkIHRv
IHJlbWFpbmluZwotICogbGVuZ3RoIGFmdGVyIGNvbnRyb2wgcHJvY2Vzc2luZyAtIG5ldHA6IG1v
ZGlmaWVkIHRvIG5ldyBzY3RwX25ldHMgYWZ0ZXIKLSAqIGNvb2tpZS1lY2hvIHByb2Nlc3Npbmcg
LSByZXR1cm4gTlVMTCB0byBkaXNjYXJkIHRoZSBwYWNrZXQgKGllLiBubyBhc29jLAotICogYmFk
IHBhY2tldCwuLi4pIG90aGVyd2lzZSByZXR1cm4gdGhlIHRjYiBmb3IgdGhpcyBwYWNrZXQKLSAq
LwotI2lmICFkZWZpbmVkKF9fUGFuZGFfXykKLSNpZmRlZiBfX0dOVUNfXwotX19hdHRyaWJ1dGVf
XyAoKG5vaW5saW5lKSkKLSNlbmRpZgotI2VuZGlmCi1zdGF0aWMgc3RydWN0IHNjdHBfdGNiICoK
LXNjdHBfcHJvY2Vzc19jb250cm9sKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgKm9m
ZnNldCwgaW50IGxlbmd0aCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2th
ZGRyICpkc3QsCi0gICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
Y2gsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwgaW50ICpmd2RfdHNuX3NlZW4sCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLSAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWlu
dDE2X3QgZmlibnVtLAotI2VuZGlmCi0gICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0
KQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBtYnVmICpvcF9l
cnI7Ci0JY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKLQl1aW50MzJfdCB2dGFnX2luOwot
CWludCBudW1fY2h1bmtzID0gMDsJLyogbnVtYmVyIG9mIGNvbnRyb2wgY2h1bmtzIHByb2Nlc3Nl
ZCAqLwotCXVpbnQzMl90IGNoa19sZW5ndGg7Ci0JaW50IHJldDsKLQlpbnQgYWJvcnRfbm9fdW5s
b2NrID0gMDsKLQlpbnQgZWNuZV9zZWVuID0gMDsKLQkvKgotCSAqIEhvdyBiaWcgc2hvdWxkIHRo
aXMgYmUsIGFuZCBzaG91bGQgaXQgYmUgYWxsb2MnZD8gTGV0cyB0cnkgdGhlCi0JICogZC1tdHUt
Y2VpbGluZyBmb3Igbm93ICgyaykgYW5kIHRoYXQgc2hvdWxkIGhvcGVmdWxseSB3b3JrIC4uLgot
CSAqIHVudGlsIHdlIGdldCBpbnRvIGp1bWJvIGdyYW1zIGFuZCBzdWNoLi4KLQkgKi8KLQl1aW50
OF90IGNodW5rX2J1ZltTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF90Y2Ig
KmxvY2tlZF90Y2IgPSBzdGNiOwotCWludCBnb3RfYXV0aCA9IDA7Ci0JdWludDMyX3QgYXV0aF9v
ZmZzZXQgPSAwLCBhdXRoX2xlbiA9IDA7Ci0JaW50IGF1dGhfc2tpcHBlZCA9IDA7Ci0JaW50IGFz
Y29uZl9jbnQgPSAwOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotI2VuZGlmCi0KLQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9jZXNzX2NvbnRyb2w6IGlwaGxlbj0ldSwgb2Zmc2V0
PSV1LCBsZW5ndGg9JXUgc3RjYjolcFxuIiwKLQkJaXBobGVuLCAqb2Zmc2V0LCBsZW5ndGgsICh2
b2lkICopc3RjYik7Ci0KLQkvKiB2YWxpZGF0ZSBjaHVuayBoZWFkZXIgbGVuZ3RoLi4uICovCi0J
aWYgKG50b2hzKGNoLT5jaHVua19sZW5ndGgpIDwgc2l6ZW9mKCpjaCkpIHsKLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMSwgIkludmFsaWQgaGVhZGVyIGxlbmd0aCAlZFxuIiwKLQkJCW50b2hz
KGNoLT5jaHVua19sZW5ndGgpKTsKLQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCVNDVFBfVENCX1VO
TE9DSyhsb2NrZWRfdGNiKTsKLQkJfQotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIHZh
bGlkYXRlIHRoZSB2ZXJpZmljYXRpb24gdGFnCi0JICovCi0JdnRhZ19pbiA9IG50b2hsKHNoLT52
X3RhZyk7Ci0KLQlpZiAobG9ja2VkX3RjYikgewotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChsb2Nr
ZWRfdGNiKTsKLQl9Ci0JaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElBVElPTikgewot
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiSXRzIGFuIElOSVQgb2YgbGVuOiVkIHZ0YWc6
JXhcbiIsCi0JCQludG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSwgdnRhZ19pbik7Ci0JCWlmICh2dGFn
X2luICE9IDApIHsKLQkJCS8qIHByb3RvY29sIGVycm9yLSBzaWxlbnRseSBkaXNjYXJkLi4uICov
Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKLQkJCWlmIChsb2NrZWRfdGNiKSB7
Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJcmV0dXJuIChOVUxM
KTsKLQkJfQotCX0gZWxzZSBpZiAoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9DT09LSUVfRUNITykg
ewotCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBubyBzdGNiLCBza2lwIHRoZSBBVVRIIGNodW5rIGFu
ZCBwcm9jZXNzCi0JCSAqIGxhdGVyIGFmdGVyIGEgc3RjYiBpcyBmb3VuZCAodG8gdmFsaWRhdGUg
dGhlIGxvb2t1cCB3YXMKLQkJICogdmFsaWQuCi0JCSAqLwotCQlpZiAoKGNoLT5jaHVua190eXBl
ID09IFNDVFBfQVVUSEVOVElDQVRJT04pICYmCi0JCSAgICAoc3RjYiA9PSBOVUxMKSAmJgotCQkg
ICAgKGlucC0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpIHsKLQkJCS8qIHNhdmUgdGhpcyBjaHVuayBm
b3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwotCQkJYXV0aF9za2lwcGVkID0gMTsKLQkJCWF1dGhfb2Zm
c2V0ID0gKm9mZnNldDsKLQkJCWF1dGhfbGVuID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7Ci0K
LQkJCS8qICh0ZW1wb3JhcmlseSkgbW92ZSBwYXN0IHRoaXMgY2h1bmsgKi8KLQkJCSpvZmZzZXQg
Kz0gU0NUUF9TSVpFMzIoYXV0aF9sZW4pOwotCQkJaWYgKCpvZmZzZXQgPj0gbGVuZ3RoKSB7Ci0J
CQkJLyogbm8gbW9yZSBkYXRhIGxlZnQgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJCQkqb2Zmc2V0
ID0gbGVuZ3RoOwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhs
b2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWNoID0gKHN0
cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0LAotCQkJCQkJCQkg
ICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOwotCQl9Ci0JCWlmIChj
aCA9PSBOVUxMKSB7Ci0JCQkvKiBIZWxwICovCi0JCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJaWYg
KGxvY2tlZF90Y2IpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQl9Ci0J
CQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0NPT0tJ
RV9FQ0hPKSB7Ci0JCQlnb3RvIHByb2Nlc3NfY29udHJvbF9jaHVua3M7Ci0JCX0KLQkJLyoKLQkJ
ICogZmlyc3QgY2hlY2sgaWYgaXQncyBhbiBBU0NPTkYgd2l0aCBhbiB1bmtub3duIHNyYyBhZGRy
IHdlCi0JCSAqIG5lZWQgdG8gbG9vayBpbnNpZGUgdG8gZmluZCB0aGUgYXNzb2NpYXRpb24KLQkJ
ICovCi0JCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0FTQ09ORiAmJiBzdGNiID09IE5VTEwp
IHsKLQkJCXN0cnVjdCBzY3RwX2NodW5raGRyICphc2NvbmZfY2ggPSBjaDsKLQkJCXVpbnQzMl90
IGFzY29uZl9vZmZzZXQgPSAwLCBhc2NvbmZfbGVuID0gMDsKLQotCQkJLyogaW5wJ3MgcmVmY291
bnQgbWF5IGJlIHJlZHVjZWQgKi8KLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0KLQkJCWFz
Y29uZl9vZmZzZXQgPSAqb2Zmc2V0OwotCQkJZG8gewotCQkJCWFzY29uZl9sZW4gPSBudG9ocyhh
c2NvbmZfY2gtPmNodW5rX2xlbmd0aCk7Ci0JCQkJaWYgKGFzY29uZl9sZW4gPCBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSkKLQkJCQkJYnJlYWs7Ci0JCQkJc3RjYiA9IHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2FzY29uZihtLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKm9mZnNldCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGRzdCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNoLCAmaW5wLCBuZXRwLCB2cmZfaWQpOwotCQkJCWlmIChzdGNiICE9IE5VTEwpCi0JCQkJCWJy
ZWFrOwotCQkJCWFzY29uZl9vZmZzZXQgKz0gU0NUUF9TSVpFMzIoYXNjb25mX2xlbik7Ci0JCQkJ
YXNjb25mX2NoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBhc2Nv
bmZfb2Zmc2V0LAotCQkJCQkJCQkJCSAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgY2h1
bmtfYnVmKTsKLQkJCX0gd2hpbGUgKGFzY29uZl9jaCAhPSBOVUxMICYmIGFzY29uZl9jaC0+Y2h1
bmtfdHlwZSA9PSBTQ1RQX0FTQ09ORik7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJLyoK
LQkJCQkgKiByZWR1Y2UgaW5wJ3MgcmVmY291bnQgaWYgbm90IHJlZHVjZWQgaW4KLQkJCQkgKiBz
Y3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hc2NvbmYoKS4KLQkJCQkgKi8KLQkJCQlTQ1RQX0lOUF9E
RUNSX1JFRihpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlsb2NrZWRfdGNiID0gc3RjYjsKLQkJCX0K
LQotCQkJLyogbm93IGdvIGJhY2sgYW5kIHZlcmlmeSBhbnkgYXV0aCBjaHVuayB0byBiZSBzdXJl
ICovCi0JCQlpZiAoYXV0aF9za2lwcGVkICYmIChzdGNiICE9IE5VTEwpKSB7Ci0JCQkJc3RydWN0
IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKLQotCQkJCWF1dGggPSAoc3RydWN0IHNjdHBfYXV0aF9j
aHVuayAqKQotCQkJCQlzY3RwX21fZ2V0cHRyKG0sIGF1dGhfb2Zmc2V0LAotCQkJCQkJICAgICAg
YXV0aF9sZW4sIGNodW5rX2J1Zik7Ci0JCQkJZ290X2F1dGggPSAxOwotCQkJCWF1dGhfc2tpcHBl
ZCA9IDA7Ci0JCQkJaWYgKChhdXRoID09IE5VTEwpIHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwg
YXV0aCwgbSwKLQkJCQkJCQkJICAgICAgIGF1dGhfb2Zmc2V0KSkgewotCQkJCQkvKiBhdXRoIEhN
QUMgZmFpbGVkIHNvIGR1bXAgaXQgKi8KLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJaWYg
KGxvY2tlZF90Y2IpIHsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJ
fQotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIHJlbWFpbmluZyBj
aHVua3MgYXJlIEhNQUMgY2hlY2tlZCAqLwotCQkJCQlzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQg
PSAxOwotCQkJCX0KLQkJCX0KLQkJfQotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQlzbnByaW50
Zihtc2csIHNpemVvZihtc2cpLCAiT09UQiwgJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5F
X18sIF9fZnVuY19fKTsKLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbXNnKTsKLQkJCS8qIG5vIGFzc29jaWF0aW9uLCBzbyBpdCdzIG91dCBvZiB0aGUgYmx1
ZS4uLiAqLwotCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sICpvZmZzZXQsIHNyYywgZHN0
LCBzaCwgaW5wLCBvcF9lcnIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCSAgICAgICAg
ICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgotCQkJCQkg
dnJmX2lkLCBwb3J0KTsKLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlpZiAobG9ja2VkX3RjYikg
ewotCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCX0KLQkJCXJldHVybiAoTlVM
TCk7Ci0JCX0KLQkJYXNvYyA9ICZzdGNiLT5hc29jOwotCQkvKiBBQk9SVCBhbmQgU0hVVERPV04g
Y2FuIHVzZSBlaXRoZXIgdl90YWcuLi4gKi8KLQkJaWYgKChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQ
X0FCT1JUX0FTU09DSUFUSU9OKSB8fAotCQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfU0hV
VERPV05fQ09NUExFVEUpIHx8Ci0JCSAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9QQUNLRVRf
RFJPUFBFRCkpIHsKLQkJCS8qIFRha2UgdGhlIFQtYml0IGFsd2F5cyBpbnRvIGFjY291bnQuICov
Ci0JCQlpZiAoKCgoY2gtPmNodW5rX2ZsYWdzICYgU0NUUF9IQURfTk9fVENCKSA9PSAwKSAmJgot
CQkJICAgICAodnRhZ19pbiA9PSBhc29jLT5teV92dGFnKSkgfHwKLQkJCSAgICAoKChjaC0+Y2h1
bmtfZmxhZ3MgJiBTQ1RQX0hBRF9OT19UQ0IpID09IFNDVFBfSEFEX05PX1RDQikgJiYKLQkJCSAg
ICAgKHZ0YWdfaW4gPT0gYXNvYy0+cGVlcl92dGFnKSkpIHsKLQkJCQkvKiB0aGlzIGlzIHZhbGlk
ICovCi0JCQl9IGVsc2UgewotCQkJCS8qIGRyb3AgdGhpcyBwYWNrZXQuLi4gKi8KLQkJCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlT
Q1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCXJldHVybiAoTlVMTCk7Ci0J
CQl9Ci0JCX0gZWxzZSBpZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9XTl9BQ0spIHsK
LQkJCWlmICh2dGFnX2luICE9IGFzb2MtPm15X3Z0YWcpIHsKLQkJCQkvKgotCQkJCSAqIHRoaXMg
Y291bGQgYmUgYSBzdGFsZSBTSFVURE9XTi1BQ0sgb3IgdGhlCi0JCQkJICogcGVlciBuZXZlciBn
b3QgdGhlIFNIVVRET1dOLUNPTVBMRVRFIGFuZAotCQkJCSAqIGlzIHN0aWxsIGh1bmc7IHdlIGhh
dmUgc3RhcnRlZCBhIG5ldyBhc29jCi0JCQkJICogYnV0IGl0IHdvbid0IGNvbXBsZXRlIHVudGls
IHRoZSBzaHV0ZG93bgotCQkJCSAqIGlzIGNvbXBsZXRlZAotCQkJCSAqLwotCQkJCWlmIChsb2Nr
ZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJ
c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVzIiwgX19GSUxFX18s
IF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbXNnKTsKLQkJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgKm9m
ZnNldCwgc3JjLCBkc3QsCi0JCQkJICAgICAgICAgICAgICAgICBzaCwgaW5wLCBvcF9lcnIsCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwg
bWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JCQkJICAgICAgICAgICAgICAgICB2cmZfaWQsIHBv
cnQpOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBmb3IgYWxs
IG90aGVyIGNodW5rcywgdnRhZyBtdXN0IG1hdGNoICovCi0JCQlpZiAodnRhZ19pbiAhPSBhc29j
LT5teV92dGFnKSB7Ci0JCQkJLyogaW52YWxpZCB2dGFnLi4uICovCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMywKLQkJCQkJImludmFsaWQgdnRhZzogJXhoLCBleHBlY3QgJXhoXG4iLAot
CQkJCQl2dGFnX2luLCBhc29jLT5teV92dGFnKTsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19i
YWR2dGFnKTsKLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9j
a2VkX3RjYik7Ci0JCQkJfQotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChOVUxM
KTsKLQkJCX0KLQkJfQotCX0JCQkvKiBlbmQgaWYgIVNDVFBfQ09PS0lFX0VDSE8gKi8KLQkvKgot
CSAqIHByb2Nlc3MgYWxsIGNvbnRyb2wgY2h1bmtzLi4uCi0JICovCi0JaWYgKCgoY2gtPmNodW5r
X3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAotCSAgICAgKGNoLT5jaHVua190eXBlID09
IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykgfHwKLQkgICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQ
X0hFQVJUQkVBVF9SRVFVRVNUKSkgJiYKLQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29j
KSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7Ci0JCS8qIGltcGxpZWQgY29va2llLWFj
ay4uIHdlIG11c3QgaGF2ZSBsb3N0IHRoZSBhY2sgKi8KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJCXNjdHBf
bWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJCSAgICAgICBzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJICAgICAgIDAsCi0JCQkJICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOUFVULAotCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCX0KLQkJc3RjYi0+YXNvYy5vdmVy
YWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0IHNj
dHBfY29va2llX2Fja19jaHVuayAqKWNoLCBzdGNiLAotCQkJCSAgICAgICAqbmV0cCk7Ci0JfQot
Ci0gcHJvY2Vzc19jb250cm9sX2NodW5rczoKLQl3aGlsZSAoSVNfU0NUUF9DT05UUk9MKGNoKSkg
ewotCQkvKiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8KLQkJY2hrX2xlbmd0aCA9IG50b2hzKGNo
LT5jaHVua19sZW5ndGgpOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAic2N0cF9wcm9j
ZXNzX2NvbnRyb2w6IHByb2Nlc3NpbmcgYSBjaHVuayB0eXBlPSV1LCBsZW49JXVcbiIsCi0JCQlj
aC0+Y2h1bmtfdHlwZSwgY2hrX2xlbmd0aCk7Ci0JCVNDVFBfTFRSQUNFX0NISyhpbnAsIHN0Y2Is
IGNoLT5jaHVua190eXBlLCBjaGtfbGVuZ3RoKTsKLQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2Yo
KmNoKSB8fAotCQkgICAgKCpvZmZzZXQgKyAoaW50KWNoa19sZW5ndGgpID4gbGVuZ3RoKSB7Ci0J
CQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQlTQ1RQX1RDQl9V
TkxPQ0sobG9ja2VkX3RjYik7Ci0JCQl9Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbmNvbnRyb2xjaHVua3MpOwotCQkvKgotCQkgKiBJ
TklULUFDSyBvbmx5IGdldHMgdGhlIGluaXQgYWNrICJoZWFkZXIiIHBvcnRpb24gb25seQotCQkg
KiBiZWNhdXNlIHdlIGRvbid0IGhhdmUgdG8gcHJvY2VzcyB0aGUgcGVlcidzIENPT0tJRS4gQWxs
Ci0JCSAqIG90aGVycyBnZXQgYSBjb21wbGV0ZSBjaHVuay4KLQkJICovCi0JCWlmICgoY2gtPmNo
dW5rX3R5cGUgPT0gU0NUUF9JTklUSUFUSU9OX0FDSykgfHwKLQkJICAgIChjaC0+Y2h1bmtfdHlw
ZSA9PSBTQ1RQX0lOSVRJQVRJT04pKSB7Ci0JCQkvKiBnZXQgYW4gaW5pdC1hY2sgY2h1bmsgKi8K
LQkJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zmc2V0
LAotCQkJCQkJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmspLCBjaHVua19i
dWYpOwotCQkJaWYgKGNoID09IE5VTEwpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlm
IChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9
Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIEZvciBjb29raWVz
IGFuZCBhbGwgb3RoZXIgY2h1bmtzLiAqLwotCQkJaWYgKGNoa19sZW5ndGggPiBzaXplb2YoY2h1
bmtfYnVmKSkgewotCQkJCS8qCi0JCQkJICogdXNlIGp1c3QgdGhlIHNpemUgb2YgdGhlIGNodW5r
IGJ1ZmZlcgotCQkJCSAqIHNvIHRoZSBmcm9udCBwYXJ0IG9mIG91ciBjaHVua3MgZml0IGluCi0J
CQkJICogY29udGlndW91cyBzcGFjZSB1cCB0byB0aGUgY2h1bmsgYnVmZmVyCi0JCQkJICogc2l6
ZSAoNTA4IGJ5dGVzKS4KLQkJCQkgKiBGb3IgY2h1bmtzIHRoYXQgbmVlZCB0byBnZXQgbW9yZSB0
aGFuIHRoYXQKLQkJCQkgKiB0aGV5IG11c3QgdXNlIHRoZSBzY3RwX21fZ2V0cHRyKCkgZnVuY3Rp
b24KLQkJCQkgKiBvciBvdGhlciBtZWFucyAoZS5nLiBrbm93IGhvdyB0byBwYXJzZSBtYnVmCi0J
CQkJICogY2hhaW5zKS4gQ29va2llcyBkbyB0aGlzIGFscmVhZHkuCi0JCQkJICovCi0JCQkJY2gg
PSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCi0JCQkJ
CQkJCQkgICAoc2l6ZW9mKGNodW5rX2J1ZikgLSA0KSwKLQkJCQkJCQkJCSAgIGNodW5rX2J1Zik7
Ci0JCQkJaWYgKGNoID09IE5VTEwpIHsKLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJaWYg
KGxvY2tlZF90Y2IpIHsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJ
fQotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyogV2UgY2Fu
IGZpdCBpdCBhbGwgKi8KLQkJCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9n
ZXRwdHIobSwgKm9mZnNldCwKLQkJCQkJCQkJICAgY2hrX2xlbmd0aCwgY2h1bmtfYnVmKTsKLQkJ
CQlpZiAoY2ggPT0gTlVMTCkgewotCQkJCQlTQ1RQX1BSSU5URigic2N0cF9wcm9jZXNzX2NvbnRy
b2w6IENhbid0IGdldCB0aGUgYWxsIGRhdGEuLi4uXG4iKTsKLQkJCQkJKm9mZnNldCA9IGxlbmd0
aDsKLQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRf
dGNiKTsKLQkJCQkJfQotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCX0KLQkJfQotCQlu
dW1fY2h1bmtzKys7Ci0JCS8qIFNhdmUgb2ZmIHRoZSBsYXN0IHBsYWNlIHdlIGdvdCBhIGNvbnRy
b2wgZnJvbSAqLwotCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlpZiAoKChuZXRwICE9IE5VTEwp
ICYmICgqbmV0cCAhPSBOVUxMKSkgfHwgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKSkg
ewotCQkJCS8qCi0JCQkJICogYWxsb3cgbGFzdF9jb250cm9sIHRvIGJlIE5VTEwgaWYKLQkJCQkg
KiBBU0NPTkYuLi4gQVNDT05GIHByb2Nlc3Npbmcgd2lsbCBmaW5kIHRoZQotCQkJCSAqIHJpZ2h0
IG5ldCBsYXRlcgotCQkJCSAqLwotCQkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0g
TlVMTCkpCi0JCQkJCXN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20gPSAqbmV0cDsK
LQkJCX0KLQkJfQotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0X2xv
ZygweEIwLCBjaC0+Y2h1bmtfdHlwZSk7Ci0jZW5kaWYKLQotCQkvKiBjaGVjayB0byBzZWUgaWYg
dGhpcyBjaHVuayByZXF1aXJlZCBhdXRoLCBidXQgaXNuJ3QgKi8KLQkJaWYgKChzdGNiICE9IE5V
TEwpICYmCi0JCSAgICAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSAmJgotCQkgICAg
c2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNoLT5jaHVua190eXBlLCBzdGNiLT5hc29jLmxv
Y2FsX2F1dGhfY2h1bmtzKSAmJgotCQkgICAgIXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCkgewot
CQkJLyogInNpbGVudGx5IiBpZ25vcmUgKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zh
dXRobWlzc2luZyk7Ci0JCQlnb3RvIG5leHRfY2h1bms7Ci0JCX0KLQkJc3dpdGNoIChjaC0+Y2h1
bmtfdHlwZSkgewotCQljYXNlIFNDVFBfSU5JVElBVElPTjoKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJTQ1RQX0lOSVRcbiIpOwotCQkJLyogVGhlIElOSVQgY2h1bmsgbXVzdCBiZSB0
aGUgb25seSBjaHVuay4gKi8KLQkJCWlmICgobnVtX2NodW5rcyA+IDEpIHx8Ci0JCQkgICAgKGxl
bmd0aCAtICpvZmZzZXQgPiAoaW50KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgewotCQkJCS8q
IFJGQyA0OTYwIHJlcXVpcmVzIHRoYXQgbm8gQUJPUlQgaXMgc2VudCAqLwotCQkJCSpvZmZzZXQg
PSBsZW5ndGg7Ci0JCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxv
Y2tlZF90Y2IpOwotCQkJCX0KLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJLyogSG9ub3Ig
b3VyIHJlc291cmNlIGxpbWl0LiAqLwotCQkJaWYgKGNoa19sZW5ndGggPiBTQ1RQX0xBUkdFU1Rf
SU5JVF9BQ0NFUFRFRCkgewotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9PVVRfT0ZfUkVTQywgIiIpOwotCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBz
dGNiLCBtLCBpcGhsZW4sCi0JCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlw
ZSwgbWZsb3dpZCwKLSNlbmRpZgotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBw
b3J0KTsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0J
CQlzY3RwX2hhbmRsZV9pbml0KG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3QsIHNoLAotCQkJ
ICAgICAgICAgICAgICAgICAoc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqKWNoLCBpbnAsCi0JCQkg
ICAgICAgICAgICAgICAgIHN0Y2IsICpuZXRwLCAmYWJvcnRfbm9fdW5sb2NrLAotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwK
LSNlbmRpZgotCQkJICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJKm9mZnNldCA9
IGxlbmd0aDsKLQkJCWlmICgoIWFib3J0X25vX3VubG9jaykgJiYgKGxvY2tlZF90Y2IpKSB7Ci0J
CQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJcmV0dXJuIChOVUxMKTsK
LQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUEFEX0NIVU5LOgotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9JTklUSUFUSU9OX0FDSzoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0lO
SVQtQUNLXG4iKTsKLQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgewotCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCi0JCQkJ
aWYgKChzdGNiKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSkpIHsKLQkJ
CQkJOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmICgobG9ja2VkX3RjYiAhPSBOVUxMKSAmJiAobG9j
a2VkX3RjYiAhPSBzdGNiKSkgewotCQkJCQkJLyogVmVyeSB1bmxpa2VseSAqLwotCQkJCQkJU0NU
UF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJCQl9Ci0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7
Ci0JCQkJCWlmIChzdGNiKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCQkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQkJCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOwotCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotI2VuZGlmCi0JCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBT
Q1RQX05PUk1BTF9QUk9DLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOUFVUICsgU0NUUF9MT0NfMjkpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKLSNlbmRpZgotCQkJCQl9Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJfQotCQkJ
LyogVGhlIElOSVQtQUNLIGNodW5rIG11c3QgYmUgdGhlIG9ubHkgY2h1bmsuICovCi0JCQlpZiAo
KG51bV9jaHVua3MgPiAxKSB8fAotCQkJICAgIChsZW5ndGggLSAqb2Zmc2V0ID4gKGludClTQ1RQ
X1NJWkUzMihjaGtfbGVuZ3RoKSkpIHsKLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlmIChs
b2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0J
CQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWlmICgobmV0cCkgJiYgKCpuZXRwKSkgewotCQkJ
CXJldCA9IHNjdHBfaGFuZGxlX2luaXRfYWNrKG0sIGlwaGxlbiwgKm9mZnNldCwKLQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsCi0JCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICopY2gsCi0JCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RjYiwgKm5ldHAsCi0JCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJmFib3J0X25vX3VubG9jaywKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKLSNlbmRpZgot
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7Ci0JCQl9IGVsc2UgewotCQkJ
CXJldCA9IC0xOwotCQkJfQotCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCWlmIChhYm9ydF9ub191
bmxvY2spIHsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJLyoKLQkJCSAqIFNwZWNpYWwg
Y2FzZSwgSSBtdXN0IGNhbGwgdGhlIG91dHB1dCByb3V0aW5lIHRvCi0JCQkgKiBnZXQgdGhlIGNv
b2tpZSBlY2hvZWQKLQkJCSAqLwotCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChyZXQgPT0gMCkp
IHsKLQkJCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX0NPTlRST0xfUFJPQywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0KLQkJCWlmIChs
b2NrZWRfdGNiKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJfQotCQkJ
cmV0dXJuIChOVUxMKTsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FDSzoKLQkJ
CXsKLQkJCQlzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICpzYWNrOwotCQkJCWludCBhYm9ydF9ub3cg
PSAwOwotCQkJCXVpbnQzMl90IGFfcnduZCwgY3VtX2FjazsKLQkJCQl1aW50MTZfdCBudW1fc2Vn
LCBudW1fZHVwOwotCQkJCXVpbnQ4X3QgZmxhZ3M7Ci0JCQkJaW50IG9mZnNldF9zZWcsIG9mZnNl
dF9kdXA7Ci0KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9TQUNLXG4iKTsK
LQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c2Fja3MpOwotCQkJCWlmIChzdGNiID09IE5V
TEwpIHsKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsICJObyBzdGNiIHdoZW4gcHJv
Y2Vzc2luZyBTQUNLIGNodW5rXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChjaGtf
bGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspKSB7Ci0JCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19JTkRBVEExLCAiQmFkIHNpemUgb24gU0FDSyBjaHVuaywgdG9vIHNtYWxsXG4i
KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNv
YykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgewotCQkJCQkvKi0KLQkJCQkJICog
SWYgd2UgaGF2ZSBzZW50IGEgc2h1dGRvd24tYWNrLCB3ZSB3aWxsIHBheSBubwotCQkJCQkgKiBh
dHRlbnRpb24gdG8gYSBzYWNrIHNlbnQgaW4gdG8gdXMgc2luY2UKLQkJCQkJICogd2UgZG9uJ3Qg
Y2FyZSBhbnltb3JlLgotCQkJCQkgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCXNhY2sgPSAo
c3RydWN0IHNjdHBfc2Fja19jaHVuayAqKWNoOwotCQkJCWZsYWdzID0gY2gtPmNodW5rX2ZsYWdz
OwotCQkJCWN1bV9hY2sgPSBudG9obChzYWNrLT5zYWNrLmN1bV90c25fYWNrKTsKLQkJCQludW1f
c2VnID0gbnRvaHMoc2Fjay0+c2Fjay5udW1fZ2FwX2Fja19ibGtzKTsKLQkJCQludW1fZHVwID0g
bnRvaHMoc2Fjay0+c2Fjay5udW1fZHVwX3RzbnMpOwotCQkJCWFfcnduZCA9ICh1aW50MzJfdCkg
bnRvaGwoc2Fjay0+c2Fjay5hX3J3bmQpOwotCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfc2Fj
a19jaHVuaykgKwotCQkJCSAgICBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tf
YmxvY2spICsKLQkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0
aCkgewotCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIFNBQ0sg
Y2h1bmtcbiIpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJb2Zmc2V0X3NlZyA9ICpvZmZzZXQg
KyBzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuayk7Ci0JCQkJb2Zmc2V0X2R1cCA9IG9mZnNl
dF9zZWcgKyBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOwotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1NBQ0sgcHJvY2VzcyBjdW1fYWNrOiV4
IG51bV9zZWc6JWQgYV9yd25kOiVkXG4iLAotCQkJCSAgICAgICAgY3VtX2FjaywgbnVtX3NlZywg
YV9yd25kKTsKLQkJCQlzdGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMTsKLQkJCQlp
ZiAoKHN0Y2ItPmFzb2MucHJfc2N0cF9jbnQgPT0gMCkgJiYKLQkJCQkgICAgKG51bV9zZWcgPT0g
MCkgJiYKLQkJCQkgICAgU0NUUF9UU05fR0UoY3VtX2Fjaywgc3RjYi0+YXNvYy5sYXN0X2Fja2Vk
X3NlcSkgJiYKLQkJCQkgICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0aF9mcmFncyA9PSAwKSAm
JgotCQkJCSAgICAoc3RjYi0+YXNvYy5zYXdfc2Fja193aXRoX25yX2ZyYWdzID09IDApICYmCi0J
CQkJICAgICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpCi0JCQkJCSkgewot
CQkJCQkvKiBXZSBoYXZlIGEgU0lNUExFIHNhY2sgaGF2aW5nIG5vIHByaW9yIHNlZ21lbnRzIGFu
ZAotCQkJCQkgKiBkYXRhIG9uIHNlbnQgcXVldWUgdG8gYmUgYWNrZWQuLiBVc2UgdGhlIGZhc3Rl
cgotCQkJCQkgKiBwYXRoIHNhY2sgcHJvY2Vzc2luZy4gV2UgYWxzbyBhbGxvdyB3aW5kb3cgdXBk
YXRlCi0JCQkJCSAqIHNhY2tzIHdpdGggbm8gbWlzc2luZyBzZWdtZW50cyB0byBnbyB0aGlzIHdh
eSB0b28uCi0JCQkJCSAqLwotCQkJCQlzY3RwX2V4cHJlc3NfaGFuZGxlX3NhY2soc3RjYiwgY3Vt
X2FjaywgYV9yd25kLCAmYWJvcnRfbm93LCBlY25lX3NlZW4pOwotCQkJCX0gZWxzZSB7Ci0JCQkJ
CWlmIChuZXRwICYmICpuZXRwKQotCQkJCQkJc2N0cF9oYW5kbGVfc2FjayhtLCBvZmZzZXRfc2Vn
LCBvZmZzZXRfZHVwLCBzdGNiLAotCQkJCQkJCQkgbnVtX3NlZywgMCwgbnVtX2R1cCwgJmFib3J0
X25vdywgZmxhZ3MsCi0JCQkJCQkJCSBjdW1fYWNrLCBhX3J3bmQsIGVjbmVfc2Vlbik7Ci0JCQkJ
fQotCQkJCWlmIChhYm9ydF9ub3cpIHsKLQkJCQkJLyogQUJPUlQgc2lnbmFsIGZyb20gc2FjayBw
cm9jZXNzaW5nICovCi0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAoTlVMTCk7
Ci0JCQkJfQotCQkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgot
CQkJCSAgICBUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSAmJgotCQkJCSAgICAo
c3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJCXNjdHBfdWxwX25vdGlm
eShTQ1RQX05PVElGWV9TRU5ERVJfRFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLQkJLyogRVkgLSBucl9zYWNrOiAgSWYgdGhl
IHJlY2VpdmVkIGNodW5rIGlzIGFuIG5yX3NhY2sgY2h1bmsgKi8KLQkJY2FzZSBTQ1RQX05SX1NF
TEVDVElWRV9BQ0s6Ci0JCQl7Ci0JCQkJc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayAqbnJfc2Fj
azsKLQkJCQlpbnQgYWJvcnRfbm93ID0gMDsKLQkJCQl1aW50MzJfdCBhX3J3bmQsIGN1bV9hY2s7
Ci0JCQkJdWludDE2X3QgbnVtX3NlZywgbnVtX25yX3NlZywgbnVtX2R1cDsKLQkJCQl1aW50OF90
IGZsYWdzOwotCQkJCWludCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwOwotCi0JCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfTlJfU0FDS1xuIik7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcmVjdnNhY2tzKTsKLQkJCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19JTkRBVEExLCAiTm8gc3RjYiB3aGVuIHByb2Nlc3NpbmcgTlItU0FDSyBjaHVu
a1xuIik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3Vw
cG9ydGVkID09IDApIHsKLQkJCQkJZ290byB1bmtub3duX2NodW5rOwotCQkJCX0KLQkJCQlpZiAo
Y2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSkgewotCQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9uIE5SLVNBQ0sgY2h1bmssIHRv
byBzbWFsbFxuIik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUo
JnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsKLQkJCQkJLyot
Ci0JCQkJCSAqIElmIHdlIGhhdmUgc2VudCBhIHNodXRkb3duLWFjaywgd2Ugd2lsbCBwYXkgbm8K
LQkJCQkJICogYXR0ZW50aW9uIHRvIGEgc2FjayBzZW50IGluIHRvIHVzIHNpbmNlCi0JCQkJCSAq
IHdlIGRvbid0IGNhcmUgYW55bW9yZS4KLQkJCQkJICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
CQlucl9zYWNrID0gKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKiljaDsKLQkJCQlmbGFncyA9
IGNoLT5jaHVua19mbGFnczsKLQkJCQljdW1fYWNrID0gbnRvaGwobnJfc2Fjay0+bnJfc2Fjay5j
dW1fdHNuX2Fjayk7Ci0JCQkJbnVtX3NlZyA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2subnVtX2dh
cF9hY2tfYmxrcyk7Ci0JCQkJbnVtX25yX3NlZyA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2subnVt
X25yX2dhcF9hY2tfYmxrcyk7Ci0JCQkJbnVtX2R1cCA9IG50b2hzKG5yX3NhY2stPm5yX3NhY2su
bnVtX2R1cF90c25zKTsKLQkJCQlhX3J3bmQgPSAodWludDMyX3QpIG50b2hsKG5yX3NhY2stPm5y
X3NhY2suYV9yd25kKTsKLQkJCQlpZiAoc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsp
ICsKLQkJCQkgICAgKG51bV9zZWcgKyBudW1fbnJfc2VnKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9n
YXBfYWNrX2Jsb2NrKSArCi0JCQkJICAgIG51bV9kdXAgKiBzaXplb2YodWludDMyX3QpICE9IGNo
a19sZW5ndGgpIHsKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOREFUQTEsICJCYWQgc2l6ZSBv
ZiBOUl9TQUNLIGNodW5rXG4iKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJCW9mZnNldF9zZWcg
PSAqb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspOwotCQkJCW9mZnNl
dF9kdXAgPSBvZmZzZXRfc2VnICsgbnVtX3NlZyAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNr
X2Jsb2NrKTsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9OUl9TQUNLIHBy
b2Nlc3MgY3VtX2FjazoleCBudW1fc2VnOiVkIGFfcnduZDolZFxuIiwKLQkJCQkgICAgICAgIGN1
bV9hY2ssIG51bV9zZWcsIGFfcnduZCk7Ci0JCQkJc3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlz
X3BrdCA9IDE7Ci0JCQkJaWYgKChzdGNiLT5hc29jLnByX3NjdHBfY250ID09IDApICYmCi0JCQkJ
ICAgIChudW1fc2VnID09IDApICYmIChudW1fbnJfc2VnID09IDApICYmCi0JCQkJICAgIFNDVFBf
VFNOX0dFKGN1bV9hY2ssIHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEpICYmCi0JCQkJICAgIChz
dGNiLT5hc29jLnNhd19zYWNrX3dpdGhfZnJhZ3MgPT0gMCkgJiYKLQkJCQkgICAgKHN0Y2ItPmFz
b2Muc2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9PSAwKSAmJgotCQkJCSAgICAoIVRBSUxRX0VNUFRZ
KCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSkgewotCQkJCQkvKgotCQkJCQkgKiBXZSBoYXZlIGEg
U0lNUExFIHNhY2sgaGF2aW5nIG5vCi0JCQkJCSAqIHByaW9yIHNlZ21lbnRzIGFuZCBkYXRhIG9u
IHNlbnQKLQkJCQkJICogcXVldWUgdG8gYmUgYWNrZWQuIFVzZSB0aGUKLQkJCQkJICogZmFzdGVy
IHBhdGggc2FjayBwcm9jZXNzaW5nLiBXZQotCQkJCQkgKiBhbHNvIGFsbG93IHdpbmRvdyB1cGRh
dGUgc2Fja3MKLQkJCQkJICogd2l0aCBubyBtaXNzaW5nIHNlZ21lbnRzIHRvIGdvCi0JCQkJCSAq
IHRoaXMgd2F5IHRvby4KLQkJCQkJICovCi0JCQkJCXNjdHBfZXhwcmVzc19oYW5kbGVfc2Fjayhz
dGNiLCBjdW1fYWNrLCBhX3J3bmQsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAmYWJv
cnRfbm93LCBlY25lX3NlZW4pOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChuZXRwICYmICpuZXRw
KQotCQkJCQkJc2N0cF9oYW5kbGVfc2FjayhtLCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwLCBzdGNi
LAotCQkJCQkJICAgICAgICAgICAgICAgICBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwLCAm
YWJvcnRfbm93LCBmbGFncywKLQkJCQkJCSAgICAgICAgICAgICAgICAgY3VtX2FjaywgYV9yd25k
LCBlY25lX3NlZW4pOwotCQkJCX0KLQkJCQlpZiAoYWJvcnRfbm93KSB7Ci0JCQkJCS8qIEFCT1JU
IHNpZ25hbCBmcm9tIHNhY2sgcHJvY2Vzc2luZyAqLwotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwot
CQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFz
b2Muc2VuZF9xdWV1ZSkgJiYKLQkJCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9x
dWV1ZSkgJiYKLQkJCQkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgewot
CQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5V
TEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJfQotCQkJfQotCQkJYnJlYWs7Ci0KLQkJY2Fz
ZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IlNDVFBfSEVBUlRCRUFUXG4iKTsKLQkJCWlmICgoc3RjYikgJiYgbmV0cCAmJiAqbmV0cCkgewot
CQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZoZWFydGJlYXQpOwotCQkJCXNjdHBfc2VuZF9o
ZWFydGJlYXRfYWNrKHN0Y2IsIG0sICpvZmZzZXQsCi0JCQkJCQkJY2hrX2xlbmd0aCwgKm5ldHAp
OwotCi0JCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lO
RykgewotCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAg
ICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJ
CQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7
Ci0JCQkJfQotCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JCQl9Ci0J
CQlicmVhazsKLQkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6Ci0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiU0NUUF9IRUFSVEJFQVQtQUNLXG4iKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxM
KSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSkp
IHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCWlm
IChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9
Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCS8qIEhlJ3MgYWxpdmUgc28gZ2l2ZSBoaW0g
Y3JlZGl0ICovCi0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNI
T0xEX0NMRUFSLAotCQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAot
CQkJCQkgICAgICAgMCwKLQkJCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAotCQkJCQkg
ICAgICAgX19MSU5FX18pOwotCQkJfQotCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50
ID0gMDsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZoZWFydGJlYXRhY2spOwotCQkJaWYg
KG5ldHAgJiYgKm5ldHApCi0JCQkJc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2Fjaygoc3RydWN0IHNj
dHBfaGVhcnRiZWF0X2NodW5rICopY2gsCi0JCQkJCQkJICBzdGNiLCAqbmV0cCk7Ci0JCQlicmVh
azsKLQkJY2FzZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMywgIlNDVFBfQUJPUlQsIHN0Y2IgJXBcbiIsCi0JCQkJKHZvaWQgKilzdGNiKTsKLQkJ
CWlmICgoc3RjYikgJiYgbmV0cCAmJiAqbmV0cCkKLQkJCQlzY3RwX2hhbmRsZV9hYm9ydCgoc3Ry
dWN0IHNjdHBfYWJvcnRfY2h1bmsgKiljaCwKLQkJCQkJCSAgc3RjYiwgKm5ldHApOwotCQkJKm9m
ZnNldCA9IGxlbmd0aDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQ
X1NIVVRET1dOOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04s
IHN0Y2IgJXBcbiIsCi0JCQkJKHZvaWQgKilzdGNiKTsKLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspKSkgewot
CQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJU0NUUF9U
Q0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJCX0KLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQot
CQkJaWYgKG5ldHAgJiYgKm5ldHApIHsKLQkJCQlpbnQgYWJvcnRfZmxhZyA9IDA7Ci0KLQkJCQlz
Y3RwX2hhbmRsZV9zaHV0ZG93bigoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKiljaCwKLQkJ
CQkJCSAgICAgc3RjYiwgKm5ldHAsICZhYm9ydF9mbGFnKTsKLQkJCQlpZiAoYWJvcnRfZmxhZykg
ewotCQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJ
CX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU0hVVERPV05fQUNLOgotCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04tQUNLLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0
Y2IpOwotCQkJaWYgKChzdGNiKSAmJiAobmV0cCkgJiYgKCpuZXRwKSkKLQkJCQlzY3RwX2hhbmRs
ZV9zaHV0ZG93bl9hY2soKHN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVuayAqKWNoLCBzdGNi
LCAqbmV0cCk7Ci0JCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJCWJy
ZWFrOwotCi0JCWNhc2UgU0NUUF9PUEVSQVRJT05fRVJST1I6Ci0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiU0NUUF9PUC1FUlJcbiIpOwotCQkJaWYgKChzdGNiKSAmJiBuZXRwICYmICpu
ZXRwICYmIHNjdHBfaGFuZGxlX2Vycm9yKGNoLCBzdGNiLCAqbmV0cCkgPCAwKSB7Ci0JCQkJKm9m
ZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNh
c2UgU0NUUF9DT09LSUVfRUNITzoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsCi0JCQkJ
IlNDVFBfQ09PS0lFLUVDSE8sIHN0Y2IgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JCQlpZiAoKHN0
Y2IpICYmIChzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKSkgewotCQkJCTsKLQkJ
CX0gZWxzZSB7Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSB7Ci0JCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnltb3JlICovCi0JCQkJ
YWJlbmQ6Ci0JCQkJCWlmIChzdGNiKSB7Ci0JCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CQkJCX0KLQkJCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCQl9
Ci0JCQl9Ci0JCQkvKi0KLQkJCSAqIEZpcnN0IGFyZSB3ZSBhY2NlcHRpbmc/IFdlIGRvIHRoaXMg
YWdhaW4gaGVyZQotCQkJICogc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIHByZXZpb3VzIGVu
ZHBvaW50IFdBUwotCQkJICogbGlzdGVuaW5nIHJlc3BvbmRlZCB0byBhIElOSVQtQUNLIGFuZCB0
aGVuCi0JCQkgKiBjbG9zZWQuIFdlIG9wZW5lZCBhbmQgYm91bmQuLiBhbmQgYXJlIG5vdyBubwot
CQkJICogbG9uZ2VyIGxpc3RlbmluZy4KLQkJCSAqCi0JCQkgKiBYWFhHTDogbm90ZXMgb24gY2hl
Y2tpbmcgbGlzdGVuIHF1ZXVlIGxlbmd0aC4KLQkJCSAqIDEpIFNDVFBfSVNfTElTVEVOSU5HKCkg
ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuCi0JCQkgKiAgICBTT0xJU1RFTklORygpLCBiZWNhdXNl
IGEgbGlzdGVuaW5nICJVRFAgdHlwZSIKLQkJCSAqICAgIHNvY2tldCBpc24ndCBsaXN0ZW5pbmcg
aW4gdGVybXMgb2YgdGhlIHNvY2tldAotCQkJICogICAgbGF5ZXIuICBJdCBpcyBhIG5vcm1hbCBk
YXRhIGZsb3cgc29ja2V0LCB0aGF0Ci0JCQkgKiAgICBjYW4gZm9yayBvZmYgbmV3IGNvbm5lY3Rp
b25zLiAgVGh1cywgd2Ugc2hvdWxkCi0JCQkgKiAgICBsb29rIGludG8gc29sX3FsZW4gb25seSBp
biBjYXNlIHdlIGFyZSAhVURQLgotCQkJICogMikgQ2hlY2tpbmcgc29sX3FsZW4gaW4gZ2VuZXJh
bCByZXF1aXJlcyBsb2NraW5nCi0JCQkgKiAgICB0aGUgc29ja2V0LCBhbmQgdGhpcyBjb2RlIGxh
Y2tzIHRoYXQuCi0JCQkgKi8KLQkJCWlmICgoc3RjYiA9PSBOVUxMKSAmJgotCQkJICAgICghU0NU
UF9JU19MSVNURU5JTkcoaW5wKSB8fAotCQkJICAgICAoIShpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19VRFBUWVBFKSAmJgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKLQkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvbF9x
bGVuID49IGlucC0+c2N0cF9zb2NrZXQtPnNvbF9xbGltaXQpKSkgewotI2Vsc2UKLQkJCSAgICAg
IGlucC0+c2N0cF9zb2NrZXQtPnNvX3FsZW4gPj0gaW5wLT5zY3RwX3NvY2tldC0+c29fcWxpbWl0
KSkpIHsKLSNlbmRpZgotCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgJiYKLQkJCQkgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdCkpKSB7Ci0JCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOwotCQkJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9u
KGlucCwgc3RjYiwgbSwgaXBobGVuLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywg
ZHN0LCBzaCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAotI2VuZGlmCi0JCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0
aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJ1Y3QgbWJ1ZiAqcmV0
X2J1ZjsKLQkJCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbGlucDsKLQkJCQlpZiAoc3RjYikgewotCQkJ
CQlsaW5wID0gTlVMTDsKLQkJCQl9IGVsc2UgewotCQkJCQlsaW5wID0gaW5wOwotCQkJCX0KLQot
CQkJCWlmIChsaW5wKSB7Ci0JCQkJCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhsaW5wKTsKLQkJCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkJ
CQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkp
IHsKLQkJCQkJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGxpbnApOwotCQkJCQkJZ290byBhYmVu
ZDsKLQkJCQkJfQotCQkJCX0KLQotCQkJCWlmIChuZXRwKSB7Ci0JCQkJCXJldF9idWYgPQotCQkJ
CQkJc2N0cF9oYW5kbGVfY29va2llX2VjaG8obSwgaXBobGVuLAotCQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgKm9mZnNldCwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgIHNyYywg
ZHN0LAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgc2gsCi0JCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNjdHBfY29va2llX2VjaG9fY2h1bmsgKiljaCwKLQkJCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZzdGNiLCBuZXRwLAotCQkJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgYXV0aF9za2lwcGVkLAotCQkJCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgYXV0aF9vZmZzZXQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX2xl
biwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICZsb2NrZWRfdGNiLAotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUs
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd2lkLAotI2VuZGlmCi0JCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICBwb3J0KTsKLQkJCQl9IGVsc2UgewotCQkJCQlyZXRfYnVmID0gTlVMTDsKLQkJCQl9Ci0J
CQkJaWYgKGxpbnApIHsKLQkJCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0sobGlucCk7Ci0JCQkJ
fQotCQkJCWlmIChyZXRfYnVmID09IE5VTEwpIHsKLQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJ
CQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJfQotCQkJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQzLAotCQkJCQkJIkdBSywgbnVsbCBidWZmZXJcbiIpOwotCQkJCQkqb2Zm
c2V0ID0gbGVuZ3RoOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJCQkvKiBpZiBBVVRI
IHNraXBwZWQsIHNlZSBpZiBpdCB2ZXJpZmllZC4uLiAqLwotCQkJCWlmIChhdXRoX3NraXBwZWQp
IHsKLQkJCQkJZ290X2F1dGggPSAxOwotCQkJCQlhdXRoX3NraXBwZWQgPSAwOwotCQkJCX0KLQkJ
CQlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7Ci0JCQkJCS8qCi0J
CQkJCSAqIFJlc3RhcnQgdGhlIHRpbWVyIGlmIHdlIGhhdmUKLQkJCQkJICogcGVuZGluZyBkYXRh
Ci0JCQkJCSAqLwotCQkJCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQkJCQkJY2hr
ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSk7Ci0JCQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNoay0+d2hv
VG8pOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfQ09PS0lFX0FDSzoKLQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0NPT0tJRS1BQ0ssIHN0Y2IgJXBcbiIs
ICh2b2lkICopc3RjYik7Ci0JCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgY2hrX2xlbmd0aCAhPSBz
aXplb2Yoc3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuaykpIHsKLQkJCQlpZiAobG9ja2VkX3Rj
YikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCXJldHVy
biAoTlVMTCk7Ci0JCQl9Ci0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUpIHsKLQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55bW9yZSAqLwot
CQkJCWlmICgoc3RjYikgJiYgKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpKSB7
Ci0JCQkJCTsKLQkJCQl9IGVsc2UgaWYgKHN0Y2IpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCQkJc28gPSBTQ1RQX0lOUF9TTyhp
bnApOwotCQkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJ
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7Ci0jZW5kaWYKLQkJCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwg
c3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
RlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMzApOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0so
c28sIDEpOwotI2VuZGlmCi0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJCXJldHVybiAoTlVM
TCk7Ci0JCQkJfQotCQkJfQotCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8K
LQkJCWlmICgoc3RjYikgJiYgbmV0cCAmJiAqbmV0cCkgewotCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJCQkJICAgICAgIHN0Y2It
PmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKLQkJCQkJCSAgICAgICAwLAotCQkJCQkJICAgICAg
IFNDVFBfRlJPTV9TQ1RQX0lOUFVULAotCQkJCQkJICAgICAgIF9fTElORV9fKTsKLQkJCQl9Ci0J
CQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCQlzY3RwX2hhbmRsZV9j
b29raWVfYWNrKChzdHJ1Y3Qgc2N0cF9jb29raWVfYWNrX2NodW5rICopY2gsc3RjYiwgKm5ldHAp
OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FQ05fRUNITzoKLQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDMsICJTQ1RQX0VDTi1FQ0hPXG4iKTsKLQkJCS8qIEhlJ3MgYWxpdmUgc28g
Z2l2ZSBoaW0gY3JlZGl0ICovCi0JCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5ndGgg
IT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspKSkgewotCQkJCS8qIEl0cyBub3Qgb3Vy
cyAqLwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRf
dGNiKTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwot
CQkJfQotCQkJaWYgKHN0Y2IpIHsKLQkJCQlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09
IDApIHsKLQkJCQkJZ290byB1bmtub3duX2NodW5rOwotCQkJCX0KLQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewot
CQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAg
ICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJ
fQotCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7Ci0JCQkJc2N0cF9oYW5k
bGVfZWNuX2VjaG8oKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKiljaCwKLQkJCQkJCSAgICAgc3Rj
Yik7Ci0JCQkJZWNuZV9zZWVuID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfRUNO
X0NXUjoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0VDTi1DV1JcbiIpOwot
CQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY3dyX2NodW5rKSkpIHsK
LQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQlpZiAobG9ja2VkX3RjYikgewotCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQotCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0J
CQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWlmIChzdGNiKSB7Ci0JCQkJaWYgKHN0Y2ItPmFz
b2MuZWNuX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9
Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhS
RVNIT0xEX0xPR0dJTkcpIHsKLQkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xF
QVIsCi0JCQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCQkJ
ICAgICAgIDAsCi0JCQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJCQkgICAg
ICAgX19MSU5FX18pOwotCQkJCX0KLQkJCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQg
PSAwOwotCQkJCXNjdHBfaGFuZGxlX2Vjbl9jd3IoKHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqKWNo
LCBzdGNiLCAqbmV0cCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NIVVRET1dOX0NP
TVBMRVRFOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfU0hVVERPV04tQ09N
UExFVEUsIHN0Y2IgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JCQkvKiBtdXN0IGJlIGZpcnN0IGFu
ZCBvbmx5IGNodW5rICovCi0JCQlpZiAoKG51bV9jaHVua3MgPiAxKSB8fAotCQkJICAgIChsZW5n
dGggLSAqb2Zmc2V0ID4gKGludClTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKSkpIHsKLQkJCQkqb2Zm
c2V0ID0gbGVuZ3RoOwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9D
Syhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQkJCWlmICgo
c3RjYikgJiYgbmV0cCAmJiAqbmV0cCkgewotCQkJCXNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBs
ZXRlKChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayAqKWNoLAotCQkJCQkJCSAg
ICAgIHN0Y2IsICpuZXRwKTsKLQkJCX0KLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlyZXR1cm4g
KE5VTEwpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BU0NPTkY6Ci0JCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQzLCAiU0NUUF9BU0NPTkZcbiIpOwotCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZl
IGhpbSBjcmVkaXQgKi8KLQkJCWlmIChzdGNiKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25m
X3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xE
X0xPR0dJTkcpIHsKLQkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0J
CQkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAotCQkJCQkJICAgICAg
IDAsCi0JCQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJCQkgICAgICAgX19M
SU5FX18pOwotCQkJCX0KLQkJCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwot
CQkJCXNjdHBfaGFuZGxlX2FzY29uZihtLCAqb2Zmc2V0LCBzcmMsCi0JCQkJCQkgICAoc3RydWN0
IHNjdHBfYXNjb25mX2NodW5rICopY2gsIHN0Y2IsIGFzY29uZl9jbnQgPT0gMCk7Ci0JCQkJYXNj
b25mX2NudCsrOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgotCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfQVNDT05GLUFDS1xuIik7Ci0JCQlpZiAo
Y2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKSkgewotCQkJ
CS8qIEl0cyBub3Qgb3VycyAqLwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENC
X1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQly
ZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaWYgKChzdGNiKSAmJiBuZXRwICYmICpuZXRwKSB7Ci0J
CQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWdvdG8gdW5r
bm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJLyogSGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQg
Ki8KLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9U
SFJFU0hPTERfTE9HR0lORykgewotCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9D
TEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJ
CQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCwKLQkJCQkJCSAg
ICAgICBfX0xJTkVfXyk7Ci0JCQkJfQotCQkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3Vu
dCA9IDA7Ci0JCQkJc2N0cF9oYW5kbGVfYXNjb25mX2FjayhtLCAqb2Zmc2V0LAotCQkJCQkJICAg
ICAgIChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICopY2gsIHN0Y2IsICpuZXRwLCAmYWJv
cnRfbm9fdW5sb2NrKTsKLQkJCQlpZiAoYWJvcnRfbm9fdW5sb2NrKQotCQkJCQlyZXR1cm4gKE5V
TEwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9GT1JXQVJEX0NVTV9UU046Ci0JCWNh
c2UgU0NUUF9JRk9SV0FSRF9DVU1fVFNOOgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IlNDVFBfRldELVRTTlxuIik7Ci0JCQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0
cF9mb3J3YXJkX3Rzbl9jaHVuaykpIHsKLQkJCQkvKiBJdHMgbm90IG91cnMgKi8KLQkJCQlpZiAo
bG9ja2VkX3RjYikgewotCQkJCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7Ci0JCQkJfQot
CQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJCX0KLQotCQkJLyog
SGUncyBhbGl2ZSBzbyBnaXZlIGhpbSBjcmVkaXQgKi8KLQkJCWlmIChzdGNiKSB7Ci0JCQkJaW50
IGFib3J0X2ZsYWcgPSAwOwotCi0JCQkJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9
PSAwKSB7Ci0JCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKLQkJCQl9Ci0JCQkJc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykgewotCQkJCQlzY3RwX21pc2Nf
aW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwKLQkJCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJh
bGxfZXJyb3JfY291bnQsCi0JCQkJCQkgICAgICAgMCwKLQkJCQkJCSAgICAgICBTQ1RQX0ZST01f
U0NUUF9JTlBVVCwKLQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJfQotCQkJCSpmd2RfdHNu
X3NlZW4gPSAxOwotCQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgewotCQkJCQkvKiBXZSBhcmUgbm90IGludGVyZXN0ZWQgYW55bW9yZSAqLwotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkJ
CQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9TT0NL
RVRfTE9DSyhzbywgMSk7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWF0b21pY19z
dWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkJCQkodm9pZClz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18zMSk7Ci0jaWYg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQkJ
CVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQkJCQkJKm9mZnNldCA9IGxlbmd0
aDsKLQkJCQkJcmV0dXJuIChOVUxMKTsKLQkJCQl9Ci0JCQkJLyoKLQkJCQkgKiBGb3Igc2VuZGlu
ZyBhIFNBQ0sgdGhpcyBsb29rcyBsaWtlIERBVEEKLQkJCQkgKiBjaHVua3MuCi0JCQkJICovCi0J
CQkJc3RjYi0+YXNvYy5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9IHN0Y2ItPmFzb2MubGFzdF9jb250
cm9sX2NodW5rX2Zyb207Ci0JCQkJc2N0cF9oYW5kbGVfZm9yd2FyZF90c24oc3RjYiwKLQkJCQkJ
CQkoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKiljaCwgJmFib3J0X2ZsYWcsIG0sICpv
ZmZzZXQpOwotCQkJCWlmIChhYm9ydF9mbGFnKSB7Ci0JCQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0J
CQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKLQkJCQkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAotCQkJCQkJCSAgICAgICBzdGNi
LT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCQkJICAgICAgIDAsCi0JCQkJCQkJICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAotCQkJCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQkJ
CX0KLQkJCQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKLQkJCQl9Ci0KLQkJ
CX0KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUOgotCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOUFVUMywgIlNDVFBfU1RSRUFNX1JFU0VUXG4iKTsKLQkJCWlmICgoKHN0Y2IgPT0g
TlVMTCkgfHwgKGNoID09IE5VTEwpIHx8IChjaGtfbGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF90c25fcmVxKSkpKSB7Ci0JCQkJLyogSXRzIG5vdCBvdXJzICovCi0JCQkJ
aWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKGxvY2tlZF90Y2IpOwotCQkJ
CX0KLQkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCQlp
ZiAoc3RjYi0+YXNvYy5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMCkgewotCQkJCWdvdG8gdW5rbm93
bl9jaHVuazsKLQkJCX0KLQkJCWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQoc3RjYiwgbSwg
Km9mZnNldCwgY2gpKSB7Ci0JCQkJLyogc3RvcCBwcm9jZXNzaW5nICovCi0JCQkJKm9mZnNldCA9
IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9QQUNLRVRfRFJPUFBFRDoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1BB
Q0tFVF9EUk9QUEVEXG4iKTsKLQkJCS8qIHJlLWdldCBpdCBhbGwgcGxlYXNlICovCi0JCQlpZiAo
Y2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgewotCQkJCS8q
IEl0cyBub3Qgb3VycyAqLwotCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VO
TE9DSyhsb2NrZWRfdGNiKTsKLQkJCQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1
cm4gKE5VTEwpOwotCQkJfQotCi0KLQkJCWlmIChjaCAmJiAoc3RjYikgJiYgbmV0cCAmJiAoKm5l
dHApKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMCkgewotCQkJ
CQlnb3RvIHVua25vd25fY2h1bms7Ci0JCQkJfQotCQkJCXNjdHBfaGFuZGxlX3BhY2tldF9kcm9w
cGVkKChzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICopY2gsCi0JCQkJCQkJICAgc3RjYiwgKm5l
dHAsCi0JCQkJCQkJICAgbWluKGNoa19sZW5ndGgsIChzaXplb2YoY2h1bmtfYnVmKSAtIDQpKSk7
Ci0KLQkJCX0KLQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoKLQkJCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0FVVEhFTlRJQ0FUSU9OXG4iKTsKLQkJCWlm
IChzdGNiID09IE5VTEwpIHsKLQkJCQkvKiBzYXZlIHRoZSBmaXJzdCBBVVRIIGZvciBsYXRlciBw
cm9jZXNzaW5nICovCi0JCQkJaWYgKGF1dGhfc2tpcHBlZCA9PSAwKSB7Ci0JCQkJCWF1dGhfb2Zm
c2V0ID0gKm9mZnNldDsKLQkJCQkJYXV0aF9sZW4gPSBjaGtfbGVuZ3RoOwotCQkJCQlhdXRoX3Nr
aXBwZWQgPSAxOwotCQkJCX0KLQkJCQkvKiBza2lwIHRoaXMgY2h1bmsgKHRlbXBvcmFyaWx5KSAq
LwotCQkJCWdvdG8gbmV4dF9jaHVuazsKLQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLmF1dGhfc3Vw
cG9ydGVkID09IDApIHsKLQkJCQlnb3RvIHVua25vd25fY2h1bms7Ci0JCQl9Ci0JCQlpZiAoKGNo
a19sZW5ndGggPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspKSkgfHwKLQkJCSAgICAo
Y2hrX2xlbmd0aCA+IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVuaykgKwotCQkJCQkgICBT
Q1RQX0FVVEhfRElHRVNUX0xFTl9NQVgpKSkgewotCQkJCS8qIEl0cyBub3Qgb3VycyAqLwotCQkJ
CWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJ
CQl9Ci0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJ
aWYgKGdvdF9hdXRoID09IDEpIHsKLQkJCQkvKiBza2lwIHRoaXMgY2h1bmsuLi4gaXQncyBhbHJl
YWR5IGF1dGgnZCAqLwotCQkJCWdvdG8gbmV4dF9jaHVuazsKLQkJCX0KLQkJCWdvdF9hdXRoID0g
MTsKLQkJCWlmICgoY2ggPT0gTlVMTCkgfHwgc2N0cF9oYW5kbGVfYXV0aChzdGNiLCAoc3RydWN0
IHNjdHBfYXV0aF9jaHVuayAqKWNoLAotCQkJCQkJCSAgICAgbSwgKm9mZnNldCkpIHsKLQkJCQkv
KiBhdXRoIEhNQUMgZmFpbGVkIHNvIGR1bXAgdGhlIHBhY2tldCAqLwotCQkJCSpvZmZzZXQgPSBs
ZW5ndGg7Ci0JCQkJcmV0dXJuIChzdGNiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogcmVtYWluaW5n
IGNodW5rcyBhcmUgSE1BQyBjaGVja2VkICovCi0JCQkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVk
ID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCXVua25vd25fY2h1bms6Ci0J
CQkvKiBpdCdzIGFuIHVua25vd24gY2h1bmshICovCi0JCQlpZiAoKGNoLT5jaHVua190eXBlICYg
MHg0MCkgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKLQkJCQlzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1
c2UgKmNhdXNlOwotCQkJCWludCBsZW47Ci0KLQkJCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zv
cl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSksCi0JCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCQlpZiAo
b3BfZXJyICE9IE5VTEwpIHsKLQkJCQkJbGVuID0gbWluKFNDVFBfU0laRTMyKGNoa19sZW5ndGgp
LCAodWludDMyX3QpKGxlbmd0aCAtICpvZmZzZXQpKTsKLQkJCQkJY2F1c2UgPSBtdG9kKG9wX2Vy
ciwgc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICopOwotCQkJCQljYXVzZS0+Y29kZSA9ICBo
dG9ucyhTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hVTkspOwotCQkJCQljYXVzZS0+bGVuZ3RoID0gaHRv
bnMoKHVpbnQxNl90KShsZW4gKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKSkp
OwotCQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJy
b3JfY2F1c2UpOwotCQkJCQlTQ1RQX0JVRl9ORVhUKG9wX2VycikgPSBTQ1RQX01fQ09QWU0obSwg
Km9mZnNldCwgbGVuLCBNX05PV0FJVCk7Ci0JCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG9wX2Vycikg
IT0gTlVMTCkgewotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JCQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7
Ci0JCQkJCQkJc2N0cF9sb2dfbWJjKFNDVFBfQlVGX05FWFQob3BfZXJyKSwgU0NUUF9NQlVGX0lD
T1BZKTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJCQkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3Bf
ZXJyKTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOwotCQkJCQl9
Ci0JCQkJfQotCQkJfQotCQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAmIDB4ODApID09IDApIHsKLQkJ
CQkvKiBkaXNjYXJkIHRoaXMgcGFja2V0ICovCi0JCQkJKm9mZnNldCA9IGxlbmd0aDsKLQkJCQly
ZXR1cm4gKHN0Y2IpOwotCQkJfQkvKiBlbHNlIHNraXAgdGhpcyBiYWQgY2h1bmsgYW5kIGNvbnRp
bnVlLi4uICovCi0JCQlicmVhazsKLQkJfQkJLyogc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgKi8K
LQotCi0JbmV4dF9jaHVuazoKLQkJLyogZ2V0IHRoZSBuZXh0IGNodW5rICovCi0JCSpvZmZzZXQg
Kz0gU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCk7Ci0JCWlmICgqb2Zmc2V0ID49IGxlbmd0aCkgewot
CQkJLyogbm8gbW9yZSBkYXRhIGxlZnQgaW4gdGhlIG1idWYgY2hhaW4gKi8KLQkJCWJyZWFrOwot
CQl9Ci0JCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCAqb2Zm
c2V0LAotCQkJCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIGNodW5rX2J1Zik7
Ci0JCWlmIChjaCA9PSBOVUxMKSB7Ci0JCQlpZiAobG9ja2VkX3RjYikgewotCQkJCVNDVFBfVENC
X1VOTE9DSyhsb2NrZWRfdGNiKTsKLQkJCX0KLQkJCSpvZmZzZXQgPSBsZW5ndGg7Ci0JCQlyZXR1
cm4gKE5VTEwpOwotCQl9Ci0JfQkJCS8qIHdoaWxlICovCi0KLQlpZiAoYXNjb25mX2NudCA+IDAg
JiYgc3RjYiAhPSBOVUxMKSB7Ci0JCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOwotCX0KLQly
ZXR1cm4gKHN0Y2IpOwotfQotCi0KLS8qCi0gKiBjb21tb24gaW5wdXQgY2h1bmsgcHJvY2Vzc2lu
ZyAodjQgYW5kIHY2KQotICovCi12b2lkCi1zY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0
cnVjdCBtYnVmICoqbW0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29j
a2FkZHIgKmRzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIg
KnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05P
X0NTVU0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgY29tcHV0ZV9jcmMs
Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBlY25fYml0cywK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWludDE2X3QgZmlibnVtLAotI2Vu
ZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2
X3QgcG9ydCkKLXsKLQl1aW50MzJfdCBoaWdoX3RzbjsKLQlpbnQgZndkX3Rzbl9zZWVuID0gMCwg
ZGF0YV9wcm9jZXNzZWQgPSAwOwotCXN0cnVjdCBtYnVmICptID0gKm1tLCAqb3BfZXJyOwotCWNo
YXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0JaW50IHVuX3NlbnQ7Ci0JaW50IGNudF9jdHJs
X3JlYWR5ID0gMDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTCwgKmlucF9kZWNyID0g
TlVMTDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCBzY3RwX25ldHMg
Km5ldCA9IE5VTEw7Ci0KLQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2ZGF0YWdyYW1zKTsKLSNp
ZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEUwLCAxKTsKLQlz
Y3RwX2F1ZGl0aW5nKDAsIGlucCwgc3RjYiwgbmV0KTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKFND
VFBfV0lUSF9OT19DU1VNKQotCWlmIChjb21wdXRlX2NyYyAhPSAwKSB7Ci0JCXVpbnQzMl90IGNo
ZWNrLCBjYWxjX2NoZWNrOwotCi0JCWNoZWNrID0gc2gtPmNoZWNrc3VtOwotCQlzaC0+Y2hlY2tz
dW0gPSAwOwotCQljYWxjX2NoZWNrID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgaXBobGVuKTsK
LQkJc2gtPmNoZWNrc3VtID0gY2hlY2s7Ci0JCWlmIChjYWxjX2NoZWNrICE9IGNoZWNrKSB7Ci0J
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiQmFkIENTVU0gb24gU0NUUCBwYWNrZXQgY2Fs
Y19jaGVjazoleCBjaGVjazoleCAgbTolcCBtbGVuOiVkIGlwaGxlbjolZFxuIiwKLQkJCSAgICAg
ICAgY2FsY19jaGVjaywgY2hlY2ssICh2b2lkICopbSwgbGVuZ3RoLCBpcGhsZW4pOwotCQkJc3Rj
YiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHIobSwgb2Zmc2V0LCBzcmMsIGRzdCwKLQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwgJmlucCwgJm5ldCwgdnJmX2lk
KTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JCQlpZiAoKGNoLT5jaHVu
a190eXBlICE9IFNDVFBfSU5JVElBVElPTikgJiYKLQkJCSAgICAobmV0ICE9IE5VTEwpICYmIChu
ZXQtPnBvcnQgIT0gcG9ydCkpIHsKLQkJCQlpZiAobmV0LT5wb3J0ID09IDApIHsKLQkJCQkJLyog
VURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9uLiAqLwotCQkJCQluZXQtPm10dSAtPSBzaXplb2Yo
c3RydWN0IHVkcGhkcik7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG5ldC0+
bXR1KSB7Ci0JCQkJCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0J
CQkJCX0KLQkJCQl9IGVsc2UgaWYgKHBvcnQgPT0gMCkgewotCQkJCQkvKiBVRFAgZW5jYXBzdWxh
dGlvbiB0dXJuZWQgb2ZmLiAqLwotCQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHVkcGhk
cik7Ci0JCQkJCS8qIFhYWCBVcGRhdGUgc21hbGxlc3RfbXR1ICovCi0JCQkJfQotCQkJCW5ldC0+
cG9ydCA9IHBvcnQ7Ci0JCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJ
aWYgKG5ldCAhPSBOVUxMKSB7Ci0JCQkJbmV0LT5mbG93dHlwZSA9IG1mbG93dHlwZTsKLQkJCQlu
ZXQtPmZsb3dpZCA9IG1mbG93aWQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmICgoaW5wICE9IE5VTEwp
ICYmIChzdGNiICE9IE5VTEwpKSB7Ci0JCQkJc2N0cF9zZW5kX3BhY2tldF9kcm9wcGVkKHN0Y2Is
IG5ldCwgbSwgbGVuZ3RoLCBpcGhsZW4sIDEpOwotCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwg
c3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9JTlBVVF9FUlJPUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
LQkJCX0gZWxzZSBpZiAoKGlucCAhPSBOVUxMKSAmJiAoc3RjYiA9PSBOVUxMKSkgewotCQkJCWlu
cF9kZWNyID0gaW5wOwotCQkJfQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfYmFkc3VtKTsKLQkJ
CVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19jaGVja3N1bWVycm9ycyk7Ci0JCQlnb3Rv
IG91dDsKLQkJfQotCX0KLSNlbmRpZgotCS8qIERlc3RpbmF0aW9uIHBvcnQgb2YgMCBpcyBpbGxl
Z2FsLCBiYXNlZCBvbiBSRkM0OTYwLiAqLwotCWlmIChzaC0+ZGVzdF9wb3J0ID09IDApIHsKLQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKLQkJZ290byBvdXQ7Ci0JfQotCXN0Y2IgPSBz
Y3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyKG0sIG9mZnNldCwgc3JjLCBkc3QsCi0JICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLCAmaW5wLCAmbmV0LCB2cmZfaWQpOwotI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlpZiAoKGNoLT5jaHVua190eXBlICE9
IFNDVFBfSU5JVElBVElPTikgJiYKLQkgICAgKG5ldCAhPSBOVUxMKSAmJiAobmV0LT5wb3J0ICE9
IHBvcnQpKSB7Ci0JCWlmIChuZXQtPnBvcnQgPT0gMCkgewotCQkJLyogVURQIGVuY2Fwc3VsYXRp
b24gdHVybmVkIG9uLiAqLwotCQkJbmV0LT5tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwot
CQkJaWYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV0LT5tdHUpIHsKLQkJCQlzY3RwX3Bh
dGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocG9y
dCA9PSAwKSB7Ci0JCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2ZmLiAqLwotCQkJbmV0
LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVz
dF9tdHUgKi8KLQkJfQotCQluZXQtPnBvcnQgPSBwb3J0OwotCX0KLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCi0JaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCW5ldC0+Zmxvd3R5cGUgPSBt
Zmxvd3R5cGU7Ci0JCW5ldC0+Zmxvd2lkID0gbWZsb3dpZDsKLQl9Ci0jZW5kaWYKLQlpZiAoaW5w
ID09IE5VTEwpIHsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9wb3J0KTsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiAoKChfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMCkgJiYgKF9fRnJl
ZUJTRF92ZXJzaW9uID49IDgwNDAwMCkpIHx8IChfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMCkp
Ci0JCWlmIChiYWRwb3J0X2JhbmRsaW0oQkFORExJTV9TQ1RQX09PVEIpIDwgMCkgewotCQkJZ290
byBvdXQ7Ci0JCX0KLSNlbmRpZgotCQlpZiAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9X
Tl9BQ0spIHsKLQkJCXNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZTIoc3JjLCBkc3QsIHNoLAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoY2gt
PmNodW5rX3R5cGUgPT0gU0NUUF9TSFVURE9XTl9DT01QTEVURSkgewotCQkJZ290byBvdXQ7Ci0J
CX0KLQkJaWYgKGNoLT5jaHVua190eXBlICE9IFNDVFBfQUJPUlRfQVNTT0NJQVRJT04pIHsKLQkJ
CWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkgPT0gMCkgfHwKLQkJCSAgICAo
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09IDEpICYmCi0JCQkgICAgIChjaC0+
Y2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVQpKSkgewotCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgdGhlIGJsdWUiKTsKLQkJCQlzY3RwX3NlbmRf
YWJvcnQobSwgaXBobGVuLCBzcmMsIGRzdCwKLQkJCQkgICAgICAgICAgICAgICAgc2gsIDAsIG9w
X2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCSAgICAgICAgICAgICAgICBtZmxv
d3R5cGUsIG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgotCQkJCSAgICAgICAgICAgICAgICB2cmZf
aWQsIHBvcnQpOwotCQkJfQotCQl9Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoc3RjYiA9PSBO
VUxMKSB7Ci0JCWlucF9kZWNyID0gaW5wOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQx
LCAiT2ssIENvbW1vbiBpbnB1dCBwcm9jZXNzaW5nIGNhbGxlZCwgbTolcCBpcGhsZW46JWQgb2Zm
c2V0OiVkIGxlbmd0aDolZCBzdGNiOiVwXG4iLAotCQkodm9pZCAqKW0sIGlwaGxlbiwgb2Zmc2V0
LCBsZW5ndGgsICh2b2lkICopc3RjYik7Ci0JaWYgKHN0Y2IpIHsKLQkJLyogYWx3YXlzIGNsZWFy
IHRoaXMgYmVmb3JlIGJlZ2lubmluZyBhIHBhY2tldCAqLwotCQlzdGNiLT5hc29jLmF1dGhlbnRp
Y2F0ZWQgPSAwOwotCQlzdGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMDsKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0lOUFVUMSwgInN0Y2I6JXAgc3RhdGU6JXhcbiIsCi0JCQkodm9pZCAq
KXN0Y2IsIHN0Y2ItPmFzb2Muc3RhdGUpOwotCi0JCWlmICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfV0FTX0FCT1JURUQpIHx8Ci0JCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpKSB7Ci0JCQkvKi0KLQkJCSAqIElmIHdlIGhpdCBoZXJl
LCB3ZSBoYWQgYSByZWYgY291bnQKLQkJCSAqIHVwIHdoZW4gdGhlIGFzc29jIHdhcyBhYm9ydGVk
IGFuZCB0aGUKLQkJCSAqIHRpbWVyIGlzIGNsZWFyaW5nIG91dCB0aGUgYXNzb2MsIHdlIHNob3Vs
ZAotCQkJICogTk9UIHJlc3BvbmQgdG8gYW55IHBhY2tldC4uIGl0cyBPT1RCLgotCQkJICovCi0J
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlzdGNiID0gTlVMTDsKLQkJCXNucHJpbnRmKG1z
Zywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywg
X19mdW5jX18pOwotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtc2cpOwotCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sIG9mZnNldCwgc3JjLCBkc3Qs
IHNoLCBpbnAsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCQkgICAg
ICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCi0JfQotCWlm
IChJU19TQ1RQX0NPTlRST0woY2gpKSB7Ci0JCS8qIHByb2Nlc3MgdGhlIGNvbnRyb2wgcG9ydGlv
biBvZiB0aGUgU0NUUCBwYWNrZXQgKi8KLQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCi0J
CXN0Y2IgPSBzY3RwX3Byb2Nlc3NfY29udHJvbChtLCBpcGhsZW4sICZvZmZzZXQsIGxlbmd0aCwK
LQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgY2gsCi0JCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnAsIHN0Y2IsICZuZXQsICZmd2RfdHNuX3NlZW4sCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQlpZiAoc3RjYikgewotCQkJLyogVGhpcyBjb3ZlcnMg
dXMgaWYgdGhlIGNvb2tpZS1lY2hvIHdhcyB0aGVyZQotCQkJICogYW5kIGl0IGNoYW5nZXMgb3Vy
IElOUC4KLQkJCSAqLwotCQkJaW5wID0gc3RjYi0+c2N0cF9lcDsKLSNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCi0JCQlpZiAoKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVElB
VElPTikgJiYKLQkJCSAgICAobmV0ICE9IE5VTEwpICYmIChuZXQtPnBvcnQgIT0gcG9ydCkpIHsK
LQkJCQlpZiAobmV0LT5wb3J0ID09IDApIHsKLQkJCQkJLyogVURQIGVuY2Fwc3VsYXRpb24gdHVy
bmVkIG9uLiAqLwotCQkJCQluZXQtPm10dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQkJ
CWlmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG5ldC0+bXR1KSB7Ci0JCQkJCQlzY3RwX3Bh
dGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYg
KHBvcnQgPT0gMCkgewotCQkJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb2ZmLiAqLwot
CQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQkJCS8qIFhYWCBVcGRh
dGUgc21hbGxlc3RfbXR1ICovCi0JCQkJfQotCQkJCW5ldC0+cG9ydCA9IHBvcnQ7Ci0JCQl9Ci0j
ZW5kaWYKLQkJfQotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIG5vIGNvbnRyb2wgY2h1bmtzLCBzbyBw
cmUtcHJvY2VzcyBEQVRBIGNodW5rcyAodGhlc2UKLQkJICogY2hlY2tzIGFyZSB0YWtlbiBjYXJl
IG9mIGJ5IGNvbnRyb2wgcHJvY2Vzc2luZykKLQkJICovCi0KLQkJLyoKLQkJICogaWYgREFUQSBv
bmx5IHBhY2tldCwgYW5kIGF1dGggaXMgcmVxdWlyZWQsIHRoZW4gcHVudC4uLgotCQkgKiBjYW4n
dCBoYXZlIGF1dGhlbnRpY2F0ZWQgd2l0aG91dCBhbnkgQVVUSCAoY29udHJvbCkKLQkJICogY2h1
bmtzCi0JCSAqLwotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYKLQkJICAgIChzdGNiLT5hc29jLmF1
dGhfc3VwcG9ydGVkID09IDEpICYmCi0JCSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmso
U0NUUF9EQVRBLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSkgewotCQkJLyogInNpbGVu
dGx5IiBpZ25vcmUgKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7
Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkvKiBvdXQgb2Yg
dGhlIGJsdWUgREFUQSBjaHVuayAqLwotCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk9P
VEIsICVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7Ci0JCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9f
Y29kZSksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7Ci0JCQlzY3RwX2hh
bmRsZV9vb3RiKG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwgc2gsIGlucCwgb3BfZXJyLAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwg
bWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JCQkJCSB2cmZfaWQsIHBvcnQpOwotCQkJZ290byBv
dXQ7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MubXlfdnRhZyAhPSBudG9obChzaC0+dl90YWcpKSB7
Ci0JCQkvKiB2X3RhZyBtaXNtYXRjaCEgKi8KLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2JhZHZ0
YWcpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCS8q
Ci0JCSAqIG5vIHZhbGlkIFRDQiBmb3IgdGhpcyBwYWNrZXQsIG9yIHdlIGZvdW5kIGl0J3MgYSBi
YWQKLQkJICogcGFja2V0IHdoaWxlIHByb2Nlc3NpbmcgY29udHJvbCwgb3Igd2UncmUgZG9uZSB3
aXRoIHRoaXMKLQkJICogcGFja2V0IChkb25lIG9yIHNraXAgcmVzdCBvZiBkYXRhKSwgc28gd2Ug
ZHJvcCBpdC4uLgotCQkgKi8KLQkJZ290byBvdXQ7Ci0JfQotCi0JLyoKLQkgKiBEQVRBIGNodW5r
IHByb2Nlc3NpbmcKLQkgKi8KLQkvKiBwbG93IHRocm91Z2ggdGhlIGRhdGEgY2h1bmtzIHdoaWxl
IGxlbmd0aCA+IG9mZnNldCAqLwotCi0JLyoKLQkgKiBSZXN0IHNob3VsZCBiZSBEQVRBIG9ubHku
ICBDaGVjayBhdXRoZW50aWNhdGlvbiBzdGF0ZSBpZiBBVVRIIGZvcgotCSAqIERBVEEgaXMgcmVx
dWlyZWQuCi0JICovCi0JaWYgKChsZW5ndGggPiBvZmZzZXQpICYmCi0JICAgIChzdGNiICE9IE5V
TEwpICYmCi0JICAgIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDEpICYmCi0JICAgIHNj
dHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MubG9jYWxfYXV0
aF9jaHVua3MpICYmCi0JICAgICFzdGNiLT5hc29jLmF1dGhlbnRpY2F0ZWQpIHsKLQkJLyogInNp
bGVudGx5IiBpZ25vcmUgKi8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhtaXNzaW5n
KTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAotCQkJIkRhdGEgY2h1bmsgcmVxdWlyZXMg
QVVUSCwgc2tpcHBlZFxuIik7Ci0JCWdvdG8gdHJpZ2dlcl9zZW5kOwotCX0KLQlpZiAobGVuZ3Ro
ID4gb2Zmc2V0KSB7Ci0JCWludCByZXR2YWw7Ci0KLQkJLyoKLQkJICogRmlyc3QgY2hlY2sgdG8g
bWFrZSBzdXJlIG91ciBzdGF0ZSBpcyBjb3JyZWN0LiBXZSB3b3VsZAotCQkgKiBub3QgZ2V0IGhl
cmUgdW5sZXNzIHdlIHJlYWxseSBkaWQgaGF2ZSBhIHRhZywgc28gd2UgZG9uJ3QKLQkJICogYWJv
cnQgaWYgdGhpcyBoYXBwZW5zLCBqdXN0IGR1bXAgdGhlIGNodW5rIHNpbGVudGx5LgotCQkgKi8K
LQkJc3dpdGNoIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykpIHsKLQkJY2FzZSBTQ1RQX1NU
QVRFX0NPT0tJRV9FQ0hPRUQ6Ci0JCQkvKgotCQkJICogd2UgY29uc2lkZXIgZGF0YSB3aXRoIHZh
bGlkIHRhZ3MgaW4gdGhpcyBzdGF0ZQotCQkJICogc2hvd3MgdXMgdGhlIGNvb2tpZS1hY2sgd2Fz
IGxvc3QuIEltcGx5IGl0IHdhcwotCQkJICogdGhlcmUuCi0JCQkgKi8KLQkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7
Ci0JCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCi0JCQkJCSAgICAgICBz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCSAgICAgICAwLAotCQkJCQkgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQsCi0JCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQl9Ci0J
CQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOwotCQkJc2N0cF9oYW5kbGVfY29v
a2llX2Fjaygoc3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuayAqKWNoLCBzdGNiLCBuZXQpOwot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKLQkJCS8qCi0JCQkgKiBX
ZSBjb25zaWRlciBPT1RCIGFueSBkYXRhIHNlbnQgZHVyaW5nIGFzb2Mgc2V0dXAuCi0JCQkgKi8K
LQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklM
RV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVz
ZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtc2cpOwotCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sIG9m
ZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAot
I2VuZGlmCi0JCQkJCSB2cmZfaWQsIHBvcnQpOwotCQkJZ290byBvdXQ7Ci0JCQkvKnNhX2lnbm9y
ZSBOT1RSRUFDSEVEKi8KLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6CS8qIHNo
b3VsZCBub3QgaGFwcGVuICovCi0JCWNhc2UgU0NUUF9TVEFURV9JTlVTRToJLyogc2hvdWxkIG5v
dCBoYXBwZW4gKi8KLQkJY2FzZSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEOgkvKiBUaGlz
IGlzIGEgcGVlciBlcnJvciAqLwotCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQ6
Ci0JCWRlZmF1bHQ6Ci0JCQlnb3RvIG91dDsKLQkJCS8qc2FfaWdub3JlIE5PVFJFQUNIRUQqLwot
CQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVEFURV9PUEVOOgotCQljYXNlIFNDVFBfU1RBVEVfU0hV
VERPV05fU0VOVDoKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIHBsb3cgdGhyb3VnaCB0aGUgZGF0YSBj
aHVua3Mgd2hpbGUgbGVuZ3RoID4gb2Zmc2V0ICovCi0JCXJldHZhbCA9IHNjdHBfcHJvY2Vzc19k
YXRhKG1tLCBpcGhsZW4sICZvZmZzZXQsIGxlbmd0aCwKLQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wLCBzdGNiLCBuZXQsICZoaWdoX3Rzbik7Ci0JCWlmIChyZXR2YWwgPT0gMikgewot
CQkJLyoKLQkJCSAqIFRoZSBhc3NvY2lhdGlvbiBhYm9ydGVkLCBOTyBVTkxPQ0sgbmVlZGVkIHNp
bmNlCi0JCQkgKiB0aGUgYXNzb2NpYXRpb24gaXMgZGVzdHJveWVkLgotCQkJICovCi0JCQlzdGNi
ID0gTlVMTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JCWRhdGFfcHJvY2Vzc2VkID0gMTsKLQkJLyoK
LQkJICogQW55dGhpbmcgaW1wb3J0YW50IG5lZWRzIHRvIGhhdmUgYmVlbiBtX2NvcHknZWQgaW4K
LQkJICogcHJvY2Vzc19kYXRhCi0JCSAqLwotCX0KLQotCS8qIHRha2UgY2FyZSBvZiBlY24gKi8K
LQlpZiAoKGRhdGFfcHJvY2Vzc2VkID09IDEpICYmCi0JICAgIChzdGNiLT5hc29jLmVjbl9zdXBw
b3J0ZWQgPT0gMSkgJiYKLQkgICAgKChlY25fYml0cyAmIFNDVFBfQ0VfQklUUykgPT0gU0NUUF9D
RV9CSVRTKSkgewotCQkvKiBZZXAsIHdlIG5lZWQgdG8gYWRkIGEgRUNORSAqLwotCQlzY3RwX3Nl
bmRfZWNuX2VjaG8oc3RjYiwgbmV0LCBoaWdoX3Rzbik7Ci0JfQotCi0JaWYgKChkYXRhX3Byb2Nl
c3NlZCA9PSAwKSAmJiAoZndkX3Rzbl9zZWVuKSkgewotCQlpbnQgd2FzX2FfZ2FwOwotCQl1aW50
MzJfdCBoaWdoZXN0X3RzbjsKLQotCQlpZiAoU0NUUF9UU05fR1Qoc3RjYi0+YXNvYy5oaWdoZXN0
X3Rzbl9pbnNpZGVfbnJfbWFwLCBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7
Ci0JCQloaWdoZXN0X3RzbiA9IHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX25yX21hcDsK
LQkJfSBlbHNlIHsKLQkJCWhpZ2hlc3RfdHNuID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbWFwOwotCQl9Ci0JCXdhc19hX2dhcCA9IFNDVFBfVFNOX0dUKGhpZ2hlc3RfdHNuLCBzdGNi
LT5hc29jLmN1bXVsYXRpdmVfdHNuKTsKLQkJc3RjYi0+YXNvYy5zZW5kX3NhY2sgPSAxOwotCQlz
Y3RwX3NhY2tfY2hlY2soc3RjYiwgd2FzX2FfZ2FwKTsKLQl9IGVsc2UgaWYgKGZ3ZF90c25fc2Vl
bikgewotCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7Ci0JfQotCS8qIHRyaWdnZXIgc2VuZCBv
ZiBhbnkgY2h1bmtzIGluIHF1ZXVlLi4uICovCi10cmlnZ2VyX3NlbmQ6Ci0jaWZkZWYgU0NUUF9B
VURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdF9sb2coMHhFMCwgMik7Ci0Jc2N0cF9hdWRpdGlu
ZygxLCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQx
LAotCQkiQ2hlY2sgZm9yIGNodW5rIG91dHB1dCBwcnc6JWQgdHFlOiVkIHRmPSVkXG4iLAotCQlz
dGNiLT5hc29jLnBlZXJzX3J3bmQsCi0JCVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xf
c2VuZF9xdWV1ZSksCi0JCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KTsKLQl1bl9zZW50ID0gKHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dCk7Ci0JaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUpKSB7
Ci0JCWNudF9jdHJsX3JlYWR5ID0gc3RjYi0+YXNvYy5jdHJsX3F1ZXVlX2NudCAtIHN0Y2ItPmFz
b2MuZWNuX2VjaG9fY250X29ucTsKLQl9Ci0JaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5h
c2NvbmZfc2VuZF9xdWV1ZSkgfHwKLQkgICAgY250X2N0cmxfcmVhZHkgfHwKLQkgICAgc3RjYi0+
YXNvYy50cmlnZ2VyX3Jlc2V0IHx8Ci0JICAgICgodW5fc2VudCkgJiYKLQkgICAgIChzdGNiLT5h
c29jLnBlZXJzX3J3bmQgPiAwIHx8Ci0JICAgICAgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA8PSAw
ICYmIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDApKSkpIHsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgIkNhbGxpbmcgY2h1bmsgT1VUUFVUXG4iKTsKLQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NPTlRST0xfUFJPQywgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgImNodW5rIE9VVFBVVCByZXR1
cm5zXG4iKTsKLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdF9s
b2coMHhFMCwgMyk7Ci0Jc2N0cF9hdWRpdGluZygyLCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYK
LSBvdXQ6Ci0JaWYgKHN0Y2IgIT0gTlVMTCkgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
fQotCWlmIChpbnBfZGVjciAhPSBOVUxMKSB7Ci0JCS8qIHJlZHVjZSByZWYtY291bnQgKi8KLQkJ
U0NUUF9JTlBfV0xPQ0soaW5wX2RlY3IpOwotCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnBfZGVjcik7
Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wX2RlY3IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLSNpZmRl
ZiBJTkVUCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXZvaWQK
LXNjdHBfaW5wdXRfd2l0aF9wb3J0KHN0cnVjdCBtYnVmICppX3BhaywgaW50IG9mZiwgdWludDE2
X3QgcG9ydCkKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQotdm9pZAotc2N0cF9pbnB1dChwYWto
YW5kbGVfdHlwZSBpX3BhaykKLSNlbHNlCi12b2lkCi0jaWYgX19TVERDX18KLXNjdHBfaW5wdXQo
c3RydWN0IG1idWYgKmlfcGFrLC4uLikKLSNlbHNlCi1zY3RwX2lucHV0KGlfcGFrLCB2YV9hbGlz
dCkKLQlzdHJ1Y3QgbWJ1ZiAqaV9wYWs7Ci0jZW5kaWYKLSNlbmRpZgotewotCXN0cnVjdCBtYnVm
ICptOwotCWludCBpcGhsZW47Ci0JdWludDMyX3QgdnJmX2lkID0gMDsKLQl1aW50OF90IGVjbl9i
aXRzOwotCXN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKLQlzdHJ1Y3QgaXAgKmlwOwotCXN0
cnVjdCBzY3RwaGRyICpzaDsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7Ci0JaW50IGxlbmd0
aCwgb2Zmc2V0OwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCXVpbnQ4X3QgY29t
cHV0ZV9jcmM7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXVpbnQzMl90IG1m
bG93aWQ7Ci0JdWludDhfdCBtZmxvd3R5cGU7Ci0JdWludDE2X3QgZmlibnVtOwotI2VuZGlmCi0j
aWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykpCi0JdWludDE2X3QgcG9ydCA9IDA7Ci0jZW5kaWYKLQotI2lmIGRlZmlu
ZWQoX19QYW5kYV9fKQotCS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8g
bWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAqLwotCWlwaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXApOwot
I2Vsc2UKLQlpcGhsZW4gPSBvZmY7Ci0jZW5kaWYKLQlpZiAoU0NUUF9HRVRfUEtUX1ZSRklEKGlf
cGFrLCB2cmZfaWQpKSB7Ci0JCVNDVFBfUkVMRUFTRV9QS1QoaV9wYWspOwotCQlyZXR1cm47Ci0J
fQotCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpX3Bhayk7Ci0jaWZkZWYgX19QYW5kYV9fCi0J
U0NUUF9ERVRBQ0hfSEVBREVSX0ZST01fQ0hBSU4oaV9wYWspOwotCSh2b2lkKVNDVFBfUkVMRUFT
RV9IRUFERVIoaV9wYWspOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQkvKiBM
b2cgaW4gYW55IGlucHV0IG1idWZzICovCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19tYmMo
bSwgU0NUUF9NQlVGX0lOUFVUKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dH
SU5HCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFT
VF9QQUNLRVRfVFJBQ0lORykgewotCQlzY3RwX3BhY2tldF9sb2cobSk7Ci0JfQotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkK
LQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX2lucHV0KCk6
IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JWIu
XG4iLAotCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAotCSAgICAgICAgaWZfbmFtZShtLT5tX3Br
dGhkci5yY3ZpZiksCi0JICAgICAgICAoaW50KW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MsIENTVU1f
QklUUyk7Ci0jZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQlTQ1RQREJHKFNDVFBf
REVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5n
dGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAotCSAgICAgICAg
bS0+bV9wa3RoZHIubGVuLAotCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCi0J
ICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKLSNlbHNlCi0JU0NUUERCRyhTQ1RQX0RF
QlVHX0NSQ09GRkxPQUQsCi0JICAgICAgICAic2N0cF9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0t
Pm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKLQkg
ICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAg
ICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMlZCB3aXRo
IGNzdW1fZmxhZ3MgMHgleC5cbiIsCi0JICAgICAgICBtLT5tX3BrdGhkci5sZW4sCi0JICAgICAg
ICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfbmFtZSwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlm
LT5pZl91bml0LAotCSAgICAgICAgbS0+bV9wa3RoZHIuY3N1bV9mbGFncyk7Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fV2luZG93c19fKQotCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAot
CSAgICAgICAgInNjdHBfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAl
cyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCi0JICAgICAgICBtLT5tX3BrdGhkci5sZW4sCi0J
ICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfeG5hbWUsCi0JICAgICAgICBtLT5tX3BrdGhk
ci5jc3VtX2ZsYWdzKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JbWZsb3dp
ZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKLQltZmxvd3R5cGUgPSBNX0hBU0hUWVBFX0dFVChtKTsK
LQlmaWJudW0gPSBNX0dFVEZJQihtKTsKLSNlbmRpZgotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3ZwYWNrZXRzKTsKLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRzKTsK
LQkvKiBHZXQgSVAsIFNDVFAsIGFuZCBmaXJzdCBjaHVuayBoZWFkZXIgdG9nZXRoZXIgaW4gdGhl
IGZpcnN0IG1idWYuICovCi0Jb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRy
KSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JaWYgKFNDVFBfQlVGX0xFTihtKSA8
IG9mZnNldCkgewotCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7Ci0J
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlw
ID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7Ci0Jc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRy
X3QpaXAgKyBpcGhsZW4pOwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90
KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0Jb2Zmc2V0IC09IHNpemVvZihzdHJ1Y3Qg
c2N0cF9jaHVua2hkcik7Ci0JbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pKTsKLQlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0J
c3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCXNyYy5z
aW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQlzcmMuc2luX2FkZHIgPSBpcC0+aXBfc3JjOwotCW1l
bXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JZHN0LnNpbl9mYW1p
bHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCWRzdC5zaW5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQlkc3Quc2luX3BvcnQgPSBzaC0+ZGVzdF9w
b3J0OwotCWRzdC5zaW5fYWRkciA9IGlwLT5pcF9kc3Q7Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKLQlOVE9IUyhpcC0+aXBfbGVuKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfTGludXgpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlpcC0+aXBfbGVu
ID0gbnRvaHMoaXAtPmlwX2xlbik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
I2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKLQlsZW5ndGggPSBudG9ocyhpcC0+aXBf
bGVuKTsKLSNlbHNlCi0JbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNlbmRpZgotI2Vs
aWYgZGVmaW5lZChfX0FQUExFX18pCi0JbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNl
bGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xp
bnV4KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JbGVuZ3RoID0gaXAtPmlw
X2xlbjsKLSNlbHNlCi0JbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxlbjsKLSNlbmRpZgotI2Vs
c2UKLQlsZW5ndGggPSBpcC0+aXBfbGVuOwotI2VuZGlmCi0JLyogVmFsaWRhdGUgbWJ1ZiBjaGFp
biBsZW5ndGggd2l0aCBJUCBwYXlsb2FkIGxlbmd0aC4gKi8KLQlpZiAoU0NUUF9IRUFERVJfTEVO
KG0pICE9IGxlbmd0aCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAotCQkgICAgICAg
ICJzY3RwX2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwgbGVuZ3RoLCBT
Q1RQX0hFQURFUl9MRU4obSkpOwotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOwotCQln
b3RvIG91dDsKLQl9Ci0JLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9hZGNhc3RzIG9yIG11bHRp
Y2FzdHMgKi8KLQlpZiAoSU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkg
ewotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRk
ciwgbSkpIHsKLQkJZ290byBvdXQ7Ci0JfQotCWVjbl9iaXRzID0gaXAtPmlwX3RvczsKLSNpZiBk
ZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2Ny
Yyk7Ci0jZWxzZQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMDAwMAotCWlmIChtLT5tX3BrdGhkci5jc3VtX2ZsYWdzICYgQ1NVTV9TQ1RQX1ZBTElE
KSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7Ci0JCWNvbXB1dGVfY3JjID0g
MDsKLQl9IGVsc2UgewotI2Vsc2UKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1f
b25fbG9vcGJhY2spICYmCi0JICAgICgoc3JjLnNpbl9hZGRyLnNfYWRkciA9PSBkc3Quc2luX2Fk
ZHIuc19hZGRyKSB8fAotCSAgICAgKFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkpKSkgewotCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWN2bm9jcmMpOwotCQljb21wdXRlX2NyYyA9IDA7Ci0JfSBlbHNl
IHsKLSNlbmRpZgotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQljb21wdXRl
X2NyYyA9IDE7Ci0JfQotI2VuZGlmCi0Jc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmbSwg
aXBobGVuLCBvZmZzZXQsIGxlbmd0aCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0
cnVjdCBzb2NrYWRkciAqKSZkc3QsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwg
Y2gsCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWNuX2JpdHMsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotIG91dDoKLQlpZiAobSkg
ewotCQlzY3RwX21fZnJlZW0obSk7Ci0JfQotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi1l
eHRlcm4gaW50ICpzY3RwX2NwdWFycnk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMjAKLWludAotc2N0cF9pbnB1dChzdHJ1
Y3QgbWJ1ZiAqKm1wLCBpbnQgKm9mZnAsIGludCBwcm90byBTQ1RQX1VOVVNFRCkKLXsKLQlzdHJ1
Y3QgbWJ1ZiAqbTsKLQlpbnQgb2ZmOwotCi0JbSA9ICptcDsKLQlvZmYgPSAqb2ZmcDsKLSNlbHNl
Ci12b2lkCi1zY3RwX2lucHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQotewotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBk
ZWZpbmVkKFNNUCkKLQlpZiAobXBfbmNwdXMgPiAxKSB7Ci0JCXN0cnVjdCBpcCAqaXA7Ci0JCXN0
cnVjdCBzY3RwaGRyICpzaDsKLQkJaW50IG9mZnNldDsKLQkJaW50IGNwdV90b191c2U7Ci0JCXVp
bnQzMl90IGZsb3dpZCwgdGFnOwotCi0JCWlmIChNX0hBU0hUWVBFX0dFVChtKSAhPSBNX0hBU0hU
WVBFX05PTkUpIHsKLQkJCWZsb3dpZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKLQkJfSBlbHNlIHsK
LQkJCS8qIE5vIGZsb3cgaWQgYnVpbHQgYnkgbG93ZXIgbGF5ZXJzCi0JCQkgKiBmaXggaXQgc28g
d2UgY3JlYXRlIG9uZS4KLQkJCSAqLwotCQkJb2Zmc2V0ID0gb2ZmICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKLQkJCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBvZmZzZXQpIHsKLQkJCQlpZiAoKG0g
PSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX2hkcm9wcyk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gMTEwMDAyMAotCQkJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0jZWxzZQotCQkJCQly
ZXR1cm47Ci0jZW5kaWYKLQkJCQl9Ci0JCQl9Ci0JCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICop
OwotCQkJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBvZmYpOwotCQkJdGFn
ID0gaHRvbmwoc2gtPnZfdGFnKTsKLQkJCWZsb3dpZCA9IHRhZyBeIG50b2hzKHNoLT5kZXN0X3Bv
cnQpIF4gbnRvaHMoc2gtPnNyY19wb3J0KTsKLQkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9IGZsb3dp
ZDsKLQkJCU1fSEFTSFRZUEVfU0VUKG0sIE1fSEFTSFRZUEVfT1BBUVVFX0hBU0gpOwotCQl9Ci0J
CWNwdV90b191c2UgPSBzY3RwX2NwdWFycnlbZmxvd2lkICUgbXBfbmNwdXNdOwotCQlzY3RwX3F1
ZXVlX3RvX21jb3JlKG0sIG9mZiwgY3B1X3RvX3VzZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyMAotCQlyZXR1cm4gKElQUFJPVE9fRE9O
RSk7Ci0jZWxzZQotCQlyZXR1cm47Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQlzY3RwX2lucHV0X3dp
dGhfcG9ydChtLCBvZmYsIDApOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDExMDAwMjAKLQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7Ci0jZW5kaWYKLX0K
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQu
aCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBiYzRjZjQyM2YxYzYzZDAxNzhhNjMwNDM3Y2UwYTMwNDNmZjY0OTdiLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9pbnB1dC5oCisrKyAvZGV2L251bGwKQEAgLTEsNjYgKzAsMCBAQAotLyotCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNo
YWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykg
TmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2Yg
aXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
LSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgot
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVC
U0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5
cy9uZXRpbmV0L3NjdHBfaW5wdXQuaCAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVu
ICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfSU5QVVRfSF8KLSNkZWZpbmUg
X05FVElORVRfU0NUUF9JTlBVVF9IXwotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi12b2lkCi1zY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVj
dCBtYnVmICoqLCBpbnQsIGludCwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBzY3RwX2NodW5raGRyICosCi0jaWYg
IWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50OF90LCB1aW50MzJfdCwgdWludDE2X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdWludDMyX3QsIHVpbnQxNl90KTsKLQotc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X3JlcXVlc3QgKgotc2N0cF9maW5kX3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHVpbnQzMl90IHNlcSwKLSAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqYmNoayk7Ci0KLXZv
aWQgc2N0cF9yZXNldF9pbl9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBu
dW1iZXJfZW50cmllcywKLSAgICB1aW50MTZfdCAqbGlzdCk7Ci0KLQotaW50IHNjdHBfaXNfdGhl
cmVfdW5zZW50X2RhdGEoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc29fbG9ja2VkKTsKLQot
I2VuZGlmCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3Vz
ZXJzcGFjZS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgzYTU2NWMzNzFjNGYxMTdlNDE1ZWRlNWE1ZGFmYzUy
MGQ5MWIzNWUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwyNTEgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28g
U3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBCcmFkIFBlbm9mZi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoK
LSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
Ci0gKiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lz
Y28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogICAgY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0g
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvY2Rl
ZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRCQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVU
X1NDVFBfTE9DS19FTVBUWV9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0xPQ0tfRU1QVFlfSF8K
LQotLyoKLSAqIEVtcHR5IExvY2sgZGVjbGFyYXRpb25zIGZvciBhbGwgb3RoZXIgcGxhdGZvcm1z
LiBQcmUtcHJvY2VzcyBhd2F5IHRvCi0gKiBub3RoaW5nLgotICovCi0KLS8qIF9fVXNlcnNwYWNl
X18gcHV0dGluZyBsb2NrIG1hY3JvcyBpbiBzYW1lIG9yZGVyIGFzIHNjdHBfbG9ja19ic2QuaCAu
Li4qLwotCi0jZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0lOSVQoKQotCi0jZGVmaW5lIFNDVFBfU1RB
VExPR19JTklUX0xPQ0soKQotI2RlZmluZSBTQ1RQX1NUQVRMT0dfTE9DSygpCi0jZGVmaW5lIFND
VFBfU1RBVExPR19VTkxPQ0soKQotI2RlZmluZSBTQ1RQX1NUQVRMT0dfREVTVFJPWSgpCi0KLSNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1koKQotCi0jZGVmaW5lIFNDVFBfSU5QX0lO
Rk9fTE9DS19JTklUKCkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpCi0jZGVmaW5lIFND
VFBfSU5QX0lORk9fV0xPQ0soKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1RSWUxPQ0soKSAxCi0j
ZGVmaW5lIFNDVFBfSU5QX0lORk9fUlVOTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VO
TE9DSygpCi0KLSNkZWZpbmUgU0NUUF9XUV9BRERSX0lOSVQoKQotI2RlZmluZSBTQ1RQX1dRX0FE
RFJfREVTVFJPWSgpCi0jZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NLKCkKLSNkZWZpbmUgU0NUUF9X
UV9BRERSX1VOTE9DSygpCi0KLQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKQotI2RlZmlu
ZSBTQ1RQX0lQSV9BRERSX0RFU1RST1koKQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkK
LSNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DSygpCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfUlVO
TE9DSygpCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfV1VOTE9DSygpCi0KLSNkZWZpbmUgU0NUUF9J
UElfSVRFUkFUT1JfV1FfSU5JVCgpCi0jZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RS
T1koKQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCkKLSNkZWZpbmUgU0NUUF9J
UElfSVRFUkFUT1JfV1FfVU5MT0NLKCkKLQotCi0jZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQo
KQotI2RlZmluZSBTQ1RQX0lQX1BLVExPR19MT0NLKCkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0df
VU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJPWSgpCi0KLQotCi0jZGVmaW5l
IFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1ko
X2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9pbnApCi0jZGVmaW5lIFNDVFBfSU5Q
X1JFQURfVU5MT0NLKF9pbnApCi0KLSNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApCi0j
ZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApCi0jZGVmaW5lIFNDVFBfSU5Q
X0xPQ0tfREVTVFJPWShfaW5wKQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVTVFJP
WShfaW5wKQotCi0KLSNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9J
TlBfV0xPQ0soX2lucCkKLQotI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChfaW5wKSAo
MCkgLyogRG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0KLSNkZWZpbmUgU0NUUF9J
TlBfUkVBRF9DT05URU5ERUQoX2lucCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3Nz
aWJsZSAqLwotCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoX2lucCkg
KDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLwotCi0KLSNkZWZpbmUgU0NU
UF9UQ0JfU0VORF9MT0NLX0lOSVQoX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RF
U1RST1koX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCi0jZGVmaW5lIFND
VFBfVENCX1NFTkRfVU5MT0NLKF90Y2IpCi0KLSNkZWZpbmUgU0NUUF9JTlBfSU5DUl9SRUYoX2lu
cCkKLSNkZWZpbmUgU0NUUF9JTlBfREVDUl9SRUYoX2lucCkKLQotI2RlZmluZSBTQ1RQX0FTT0Nf
Q1JFQVRFX0xPQ0soX2lucCkKLQotI2RlZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApCi0jZGVm
aW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxP
Q0soX2lucCkKLQotCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5JVChfdGNiKQotI2RlZmluZSBT
Q1RQX1RDQl9MT0NLX0RFU1RST1koX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKQot
I2RlZmluZSBTQ1RQX1RDQl9UUllMT0NLKF90Y2IpIDEKLSNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NL
KF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX1VOTE9DS19JRk9XTkVEKF90Y2IpCi0jZGVmaW5lIFND
VFBfVENCX0xPQ0tfQVNTRVJUKF90Y2IpCi0KLQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9D
S19JTklUKCkKLSNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkKLSNkZWZpbmUgU0NUUF9JVEVS
QVRPUl9VTkxPQ0soKQotI2RlZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0tfREVTVFJPWSgpCi0KLQot
Ci0jZGVmaW5lIFNDVFBfSU5DUl9FUF9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwK
LQkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9lcCsrOyBcCi0JICAgICAgICB9IHdoaWxl
ICgwKQotCi0jZGVmaW5lIFNDVFBfREVDUl9FUF9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBk
byB7IFwKLQkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9lcC0tOyBcCi0JICAgICAgICB9
IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9BU09DX0NPVU5UKCkgXAotICAgICAgICAg
ICAgICAgIGRvIHsgXAotCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9hc29j
Kys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0FTT0NfQ09V
TlQoKSBcCi0gICAgICAgICAgICAgICAgZG8geyBcCi0JICAgICAgICAgICAgICAgc2N0cHBjYmlu
Zm8uaXBpX2NvdW50X2Fzb2MtLTsgXAotCSAgICAgICAgfSB3aGlsZSAoMCkKLQotI2RlZmluZSBT
Q1RQX0lOQ1JfTEFERFJfQ09VTlQoKSBcCi0gICAgICAgICAgICAgICAgZG8geyBcCi0JICAgICAg
ICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2xhZGRyKys7IFwKLQkgICAgICAgIH0gd2hp
bGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0xBRERSX0NPVU5UKCkgXAotICAgICAgICAgICAg
ICAgIGRvIHsgXAotCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9sYWRkci0t
OyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9SQUREUl9DT1VO
VCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLSAJICAgICAgICAgICAgICAgc2N0cHBjYmlu
Zm8uaXBpX2NvdW50X3JhZGRyKys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUg
U0NUUF9ERUNSX1JBRERSX0NPVU5UKCkgXAotICAgICAgICAgICAgICAgIGRvIHsgXAotIAkgICAg
ICAgICAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfcmFkZHItLTsgXAotCSAgICAgICAgfSB3
aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lOQ1JfQ0hLX0NPVU5UKCkgXAotICAgICAgICAgICAg
ICAgIGRvIHsgXAotICAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2NodW5r
Kys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX0NIS19DT1VO
VCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLSAgCSAgICAgICAgICAgICAgIHNjdHBwY2Jp
bmZvLmlwaV9jb3VudF9jaHVuay0tOyBcCi0JICAgICAgICB9IHdoaWxlICgwKQotCi0jZGVmaW5l
IFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAg
ICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9yZWFkcSsrOyBcCi0JICAgICAgICB9IHdoaWxlICgw
KQotCi0jZGVmaW5lIFNDVFBfREVDUl9SRUFEUV9DT1VOVCgpIFwKLSAgICAgICAgICAgICAgICBk
byB7IFwKLQkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9yZWFkcS0tOyBcCi0JICAgICAg
ICB9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9TVFJNT1FfQ09VTlQoKSBcCi0gICAg
ICAgICAgICAgICAgZG8geyBcCi0JCSAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfc3RybW9x
Kys7IFwKLQkgICAgICAgIH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9D
T1VOVCgpIFwKLSAgICAgICAgICAgICAgICBkbyB7IFwKLQkJICAgICAgIHNjdHBwY2JpbmZvLmlw
aV9jb3VudF9zdHJtb3EtLTsgXAotCSAgICAgICAgfSB3aGlsZSAoMCkKLQotCi0vKiBub3Qgc3Vy
ZSBpZiBfX1VzZXJzcGFjZV9fIG5lZWRzIHRoZXNlIChidXQgY29waWVkIG5vbmV0aGVsZXNzLi4u
KSAqLwotI2lmIGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0jZGVmaW5lIFNDVFBfSU5Q
X1NPKHNjdHBpbnApCShzY3RwaW5wKS0+aXBfaW5wLmlucC5pbnBfc29ja2V0Ci0jZGVmaW5lIFND
VFBfU09DS0VUX0xPQ0soc28sIHJlZmNudCkKLSNkZWZpbmUgU0NUUF9TT0NLRVRfVU5MT0NLKHNv
LCByZWZjbnQpCi0jZW5kaWYKLQotCi0vKiB0aGVzZSB3ZXJlIGluIHNjdHBfbG9ja19lbXB0eS5o
IGJ1dCBhcmVuJ3QgaW4gc2N0cF9sb2NrX2JzZC5oIC4uLiAqLwotI2lmIDAKLSNkZWZpbmUgU0NU
UF9JUElfQUREUl9MT0NLKCkKLSNkZWZpbmUgU0NUUF9JUElfQUREUl9VTkxPQ0soKQotI2VuZGlm
Ci0KLQotLyogVGhlc2Ugd2VyZSBpbiBzY3RwX2xvY2tfZW1wdHkuaCBiZWNhdXNlIHRoZXkgd2Vy
ZSBjb21tZW50ZWQgb3V0IHdpdGhpbgotICogIHdpdGhpbiB1c2VyX2luY2x1ZGUvdXNlcl9zb2Nr
ZXR2YXIuaCAuICBJZiB0aGV5IGFyZSBOT1QgY29tbWVudGVkIG91dAotICogIGluIHVzZXJfc29j
a2V0dmFyLmggKGJlY2F1c2UgdGhhdCBzZWVtcyB0aGUgbW9yZSBuYXR1cmFsIHBsYWNlIGZvciB0
aGVtCi0gKiAgdG8gbGl2ZSksIHRoZW4gY2hhbmdlIHRoaXMgImlmIiB0byAwLiAgS2VlcCB0aGUg
ImlmIiBhcyAxIGlmIHRoZXNlIEFSRQotICogIGluZGVlZCBjb21tZW50ZWQgb3V0IGluIHVzZXJf
c29ja2V0dmFyLmggLgotICoKLSAqIFRoaXMgbW9kdWxhcml0eSBpcyBrZXB0IHNvIHRoaXMgZmls
ZSBjYW4gZWFzaWx5IGJlIGNob3NlbiBhcyBhbiBhbHRlcm5hdGl2ZQotICogIHRvIFNDVFBfUFJP
Q0VTU19MRVZFTF9MT0NLUy4gIElmIG9uZSBkZWZpbmVzIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NL
UyBpbgotICogIHVzZXJfaW5jbHVkZS9vcHRfc2N0cC5oLCB0aGVuIHRoZSBmaWxlIHNjdHBfcHJv
Y2Vzc19sb2NrLmggKHdoaWNoIHdlIGRpZG4ndAotICogIGltcGxlbWVudCkgaXMgdXNlZCwgYW5k
IHRoYXQgZGVjbGFyZXMgdGhlc2UgbG9ja3MgYWxyZWFkeSAoc28gdXNpbmcKLSAqICBTQ1RQX1BS
T0NFU1NfTEVWRUxfTE9DS1MgKnJlcXVpcmVzKiB0aGF0IHRoZXNlIGRlZmludGlvbnMgYmUgY29t
bWVudGVkIG91dAotICogIGluIHVzZXJfc29ja2V0dmFyLmgpLgotICovCi0jaWYgMQotI2RlZmlu
ZSBTT0NLX0xPQ0soX3NvKQotI2RlZmluZSBTT0NLX1VOTE9DSyhfc28pCi0jZGVmaW5lIFNPQ0tC
VUZfTE9DSyhfc29fYnVmKQotI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKQotI2RlZmlu
ZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3MuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9v
cy5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ODg4MzgxMWExZTU0ZmJmZDA2MmJj
YWIxZTI2NWVlN2Y5ZjM2MWY4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oCisrKyAvZGV2L251bGwKQEAgLTEs
OTQgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDYtMjAwNywgYnkgQ2lzY28gU3lz
dGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1z
LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19G
QlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfb3MuaCAyMzU4MjggMjAxMi0w
NS0yMyAxMToyNjoyOFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1ND
VFBfT1NfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9PU19IXwotCi0vKgotICogR2VuZXJhbCBr
ZXJuZWwgbWVtb3J5IGFsbG9jYXRpb246Ci0gKiAgU0NUUF9NQUxMT0MoZWxlbWVudCwgdHlwZSwg
c2l6ZSwgbmFtZSkKLSAqICBTQ1RQX0ZSRUUoZWxlbWVudCkKLSAqIEtlcm5lbCBtZW1vcnkgYWxs
b2NhdGlvbiBmb3IgInNvbmFtZSItIG1lbW9yeSBtdXN0IGJlIHplcm9lZC4KLSAqICBTQ1RQX01B
TExPQ19TT05BTUUobmFtZSwgdHlwZSwgc2l6ZSkKLSAqICBTQ1RQX0ZSRUVfU09OQU1FKG5hbWUp
Ci0gKi8KLQotLyoKLSAqIFpvbmUocG9vbCkgYWxsb2NhdGlvbiByb3V0aW5lczogTVVTVCBiZSBk
ZWZpbmVkIGZvciBlYWNoIE9TLgotICogIHpvbmUgPSB6b25lL3Bvb2wgcG9pbnRlci4KLSAqICBu
YW1lID0gc3RyaW5nIG5hbWUgb2YgdGhlIHpvbmUvcG9vbC4KLSAqICBzaXplID0gc2l6ZSBvZiBl
YWNoIHpvbmUvcG9vbCBlbGVtZW50LgotICogIG51bWJlciA9IG51bWJlciBvZiBlbGVtZW50cyBp
biB6b25lL3Bvb2wuCi0gKiAgdHlwZSA9IHN0cnVjdHVyZSB0eXBlIHRvIGFsbG9jYXRlCi0gKgot
ICogc2N0cF96b25lX3QKLSAqIFNDVFBfWk9ORV9JTklUKHpvbmUsIG5hbWUsIHNpemUsIG51bWJl
cikKLSAqIFNDVFBfWk9ORV9HRVQoem9uZSwgdHlwZSkKLSAqIFNDVFBfWk9ORV9GUkVFKHpvbmUs
IGVsZW1lbnQpCi0gKiBTQ1RQX1pPTkVfREVTVFJPWSh6b25lKQotICovCi0KLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc19ic2QuaD4KLSNlbHNlCi0j
ZGVmaW5lIE1PRFVMRV9HTE9CQUwoX0IpIChfQikKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaD4KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX21h
Y29zeC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSNpbmNsdWRlIDxpcC9z
Y3RwL3NjdHBfb3NfaW94Lmg+Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX3dpbmRvd3MuaD4KLSNlbmRpZgotCi0vKiBBbGwgb3Mn
cyBtdXN0IGltcGxlbWVudCB0aGlzIGFkZHJlc3MgZ2F0aGVyZXIuIElmCi0gKiBubyBWUkYncyBl
eGlzdCwgdGhlbiB2cmYgMCBpcyB0aGUgb25seSBvbmUgYW5kIGFsbAotICogYWRkcmVzc2VzIGFu
ZCBpZm4ncyBsaXZlIGhlcmUuCi0gKi8KLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1ZSRiAwCi12b2lk
IHNjdHBfaW5pdF92cmZfbGlzdChpbnQgdnJmaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9vc191c2Vyc3BhY2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTBiN2RlMjM0
NDM1YjU5ZTBkMmYzZDAxYTkwZWMxMTE2MTU4MGM0MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTYxICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChj
KSAyMDA2LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBUdWV4
ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkg
QnJhZCBQZW5vZmYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBO
ZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwot
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0g
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX3NjdHBf
b3NfdXNlcnNwYWNlX2hfXwotI2RlZmluZSBfX3NjdHBfb3NfdXNlcnNwYWNlX2hfXwotLyoKLSAq
IFVzZXJzcGFjZSBpbmNsdWRlcwotICogQWxsIHRoZSBvcHRfeHh4LmggZmlsZXMgYXJlIHBsYWNl
ZCBpbiB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4KLSAqIFdlIHdpbGwgcGxhY2UgdGhlbSBp
biB1c2Vyc3BhY2Ugc3RhY2sgYnVpbGQgZGlyZWN0b3J5LgotICovCi0KLSNpbmNsdWRlIDxlcnJu
by5oPgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPHdp
bnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSNpbmNsdWRlIDxpcGhscGFwaS5oPgot
I2luY2x1ZGUgPG1zd3NvY2suaD4KLSNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jaW5jbHVkZSAidXNl
cl9lbnZpcm9ubWVudC5oIgotdHlwZWRlZiBDUklUSUNBTF9TRUNUSU9OIHVzZXJsYW5kX211dGV4
X3Q7Ci0jaWYgV0lOVkVSIDwgMHgwNjAwCi1lbnVtIHsKLQlDX1NJR05BTCA9IDAsCi0JQ19CUk9B
RENBU1QgPSAxLAotCUNfTUFYX0VWRU5UUyA9IDIKLX07Ci10eXBlZGVmIHN0cnVjdAotewotCXVf
aW50IHdhaXRlcnNfY291bnQ7Ci0JQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJzX2NvdW50X2xvY2s7
Ci0JSEFORExFIGV2ZW50c19bQ19NQVhfRVZFTlRTXTsKLX0gdXNlcmxhbmRfY29uZF90Owotdm9p
ZCBJbml0aWFsaXplWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKik7Ci12b2lk
IERlbGV0ZVhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOwotaW50IFNsZWVw
WFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKiwgdXNlcmxhbmRfbXV0ZXhfdCAq
KTsKLXZvaWQgV2FrZUFsbFhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICopOwot
I2RlZmluZSBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgSW5pdGlhbGl6ZVhQQ29u
ZGl0aW9uVmFyaWFibGUoY29uZCkKLSNkZWZpbmUgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUoY29u
ZCkgRGVsZXRlWFBDb25kaXRpb25WYXJpYWJsZShjb25kKQotI2RlZmluZSBTbGVlcENvbmRpdGlv
blZhcmlhYmxlQ1MoY29uZCwgbXR4LCB0aW1lKSBTbGVlcFhQQ29uZGl0aW9uVmFyaWFibGUoY29u
ZCwgbXR4KQotI2RlZmluZSBXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgV2FrZUFsbFhQ
Q29uZGl0aW9uVmFyaWFibGUoY29uZCkKLSNlbHNlCi0jZGVmaW5lIERlbGV0ZUNvbmRpdGlvblZh
cmlhYmxlKGNvbmQpCi10eXBlZGVmIENPTkRJVElPTl9WQVJJQUJMRSB1c2VybGFuZF9jb25kX3Q7
Ci0jZW5kaWYKLXR5cGVkZWYgSEFORExFIHVzZXJsYW5kX3RocmVhZF90OwotI2RlZmluZSBBRERS
RVNTX0ZBTUlMWQl1bnNpZ25lZCBfX2ludDgKLSNkZWZpbmUgSVBWRVJTSU9OICA0Ci0jZGVmaW5l
IE1BWFRUTCAgICAgMjU1Ci0vKiBWUzIwMTAgY29tZXMgd2l0aCBzdGRpbnQuaCAqLwotI2lmIF9N
U0NfVkVSID49IDE2MDAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbHNlCi0jZGVmaW5lIHVpbnQ2
NF90ICAgdW5zaWduZWQgX19pbnQ2NAotI2RlZmluZSB1aW50MzJfdCAgIHVuc2lnbmVkIF9faW50
MzIKLSNkZWZpbmUgaW50MzJfdCAgICBfX2ludDMyCi0jZGVmaW5lIHVpbnQxNl90ICAgdW5zaWdu
ZWQgX19pbnQxNgotI2RlZmluZSBpbnQxNl90ICAgIF9faW50MTYKLSNkZWZpbmUgdWludDhfdCAg
ICB1bnNpZ25lZCBfX2ludDgKLSNkZWZpbmUgaW50OF90ICAgICBfX2ludDgKLSNlbmRpZgotI2lm
bmRlZiBfU0laRV9UX0RFRklORUQKLSNkZWZpbmUgc2l6ZV90ICAgICBfX2ludDMyCi0jZW5kaWYK
LSNkZWZpbmUgdV9sb25nICAgICB1bnNpZ25lZCBfX2ludDY0Ci0jZGVmaW5lIHVfaW50ICAgICAg
dW5zaWduZWQgX19pbnQzMgotI2RlZmluZSB1X2ludDMyX3QgIHVuc2lnbmVkIF9faW50MzIKLSNk
ZWZpbmUgdV9pbnQxNl90ICB1bnNpZ25lZCBfX2ludDE2Ci0jZGVmaW5lIHVfaW50OF90ICAgdW5z
aWduZWQgX19pbnQ4Ci0jZGVmaW5lIHVfY2hhciAgICAgdW5zaWduZWQgY2hhcgotI2RlZmluZSBu
X3Nob3J0ICAgIHVuc2lnbmVkIF9faW50MTYKLSNkZWZpbmUgdV9zaG9ydCAgICB1bnNpZ25lZCBf
X2ludDE2Ci0jZGVmaW5lIG5fdGltZSAgICAgdW5zaWduZWQgX19pbnQzMgotI2RlZmluZSBzYV9m
YW1pbHlfdCB1bnNpZ25lZCBfX2ludDgKLSNkZWZpbmUgc3NpemVfdCAgICBfX2ludDY0Ci0jZGVm
aW5lIF9fZnVuY19fCV9fRlVOQ1RJT05fXwotCi0jaWZuZGVmIEVXT1VMREJMT0NLCi0jZGVmaW5l
IEVXT1VMREJMT0NLICAgICAgICAgICAgIFdTQUVXT1VMREJMT0NLCi0jZW5kaWYKLSNpZm5kZWYg
RUlOUFJPR1JFU1MKLSNkZWZpbmUgRUlOUFJPR1JFU1MgICAgICAgICAgICAgV1NBRUlOUFJPR1JF
U1MKLSNlbmRpZgotI2lmbmRlZiBFQUxSRUFEWQotI2RlZmluZSBFQUxSRUFEWSAgICAgICAgICAg
ICAgICBXU0FFQUxSRUFEWQotI2VuZGlmCi0jaWZuZGVmIEVOT1RTT0NLCi0jZGVmaW5lIEVOT1RT
T0NLICAgICAgICAgICAgICAgIFdTQUVOT1RTT0NLCi0jZW5kaWYKLSNpZm5kZWYgRURFU1RBRERS
UkVRCi0jZGVmaW5lIEVERVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNUQUREUlJFUQotI2Vu
ZGlmCi0jaWZuZGVmIEVNU0dTSVpFCi0jZGVmaW5lIEVNU0dTSVpFICAgICAgICAgICAgICAgIFdT
QUVNU0dTSVpFCi0jZW5kaWYKLSNpZm5kZWYgRVBST1RPVFlQRQotI2RlZmluZSBFUFJPVE9UWVBF
ICAgICAgICAgICAgICBXU0FFUFJPVE9UWVBFCi0jZW5kaWYKLSNpZm5kZWYgRU5PUFJPVE9PUFQK
LSNkZWZpbmUgRU5PUFJPVE9PUFQgICAgICAgICAgICAgV1NBRU5PUFJPVE9PUFQKLSNlbmRpZgot
I2lmbmRlZiBFUFJPVE9OT1NVUFBPUlQKLSNkZWZpbmUgRVBST1RPTk9TVVBQT1JUICAgICAgICAg
V1NBRVBST1RPTk9TVVBQT1JUCi0jZW5kaWYKLSNpZm5kZWYgRVNPQ0tUTk9TVVBQT1JUCi0jZGVm
aW5lIEVTT0NLVE5PU1VQUE9SVCAgICAgICAgIFdTQUVTT0NLVE5PU1VQUE9SVAotI2VuZGlmCi0j
aWZuZGVmIEVPUE5PVFNVUFAKLSNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAgICAgICAgV1NBRU9Q
Tk9UU1VQUAotI2VuZGlmCi0jaWZuZGVmIEVOT1RTVVAKLSNkZWZpbmUgRU5PVFNVUCAgICAgICAg
ICAgICAgICAgV1NBRU9QTk9UU1VQUAotI2VuZGlmCi0jaWZuZGVmIEVQRk5PU1VQUE9SVAotI2Rl
ZmluZSBFUEZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQKLSNlbmRpZgotI2lm
bmRlZiBFQUZOT1NVUFBPUlQKLSNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFG
Tk9TVVBQT1JUCi0jZW5kaWYKLSNpZm5kZWYgRUFERFJJTlVTRQotI2RlZmluZSBFQUREUklOVVNF
ICAgICAgICAgICAgICBXU0FFQUREUklOVVNFCi0jZW5kaWYKLSNpZm5kZWYgRUFERFJOT1RBVkFJ
TAotI2RlZmluZSBFQUREUk5PVEFWQUlMICAgICAgICAgICBXU0FFQUREUk5PVEFWQUlMCi0jZW5k
aWYKLSNpZm5kZWYgRU5FVERPV04KLSNkZWZpbmUgRU5FVERPV04gICAgICAgICAgICAgICAgV1NB
RU5FVERPV04KLSNlbmRpZgotI2lmbmRlZiBFTkVUVU5SRUFDSAotI2RlZmluZSBFTkVUVU5SRUFD
SCAgICAgICAgICAgICBXU0FFTkVUVU5SRUFDSAotI2VuZGlmCi0jaWZuZGVmIEVORVRSRVNFVAot
I2RlZmluZSBFTkVUUkVTRVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQKLSNlbmRpZgotI2lm
bmRlZiBFQ09OTkFCT1JURUQKLSNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAgICAgICAgV1NBRUNP
Tk5BQk9SVEVECi0jZW5kaWYKLSNpZm5kZWYgRUNPTk5SRVNFVAotI2RlZmluZSBFQ09OTlJFU0VU
ICAgICAgICAgICAgICBXU0FFQ09OTlJFU0VUCi0jZW5kaWYKLSNpZm5kZWYgRU5PQlVGUwotI2Rl
ZmluZSBFTk9CVUZTICAgICAgICAgICAgICAgICBXU0FFTk9CVUZTCi0jZW5kaWYKLSNpZm5kZWYg
RUlTQ09OTgotI2RlZmluZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FFSVNDT05OCi0jZW5k
aWYKLSNpZm5kZWYgRU5PVENPTk4KLSNkZWZpbmUgRU5PVENPTk4gICAgICAgICAgICAgICAgV1NB
RU5PVENPTk4KLSNlbmRpZgotI2lmbmRlZiBFU0hVVERPV04KLSNkZWZpbmUgRVNIVVRET1dOICAg
ICAgICAgICAgICAgV1NBRVNIVVRET1dOCi0jZW5kaWYKLSNpZm5kZWYgRVRPT01BTllSRUZTCi0j
ZGVmaW5lIEVUT09NQU5ZUkVGUyAgICAgICAgICAgIFdTQUVUT09NQU5ZUkVGUwotI2VuZGlmCi0j
aWZuZGVmIEVUSU1FRE9VVAotI2RlZmluZSBFVElNRURPVVQgICAgICAgICAgICAgICBXU0FFVElN
RURPVVQKLSNlbmRpZgotI2lmbmRlZiBFQ09OTlJFRlVTRUQKLSNkZWZpbmUgRUNPTk5SRUZVU0VE
ICAgICAgICAgICAgV1NBRUNPTk5SRUZVU0VECi0jZW5kaWYKLSNpZm5kZWYgRUxPT1AKLSNkZWZp
bmUgRUxPT1AgICAgICAgICAgICAgICAgICAgV1NBRUxPT1AKLSNlbmRpZgotI2lmbmRlZiBFSE9T
VERPV04KLSNkZWZpbmUgRUhPU1RET1dOICAgICAgICAgICAgICAgV1NBRUhPU1RET1dOCi0jZW5k
aWYKLSNpZm5kZWYgRUhPU1RVTlJFQUNICi0jZGVmaW5lIEVIT1NUVU5SRUFDSCAgICAgICAgICAg
IFdTQUVIT1NUVU5SRUFDSAotI2VuZGlmCi0jaWZuZGVmIEVQUk9DTElNCi0jZGVmaW5lIEVQUk9D
TElNICAgICAgICAgICAgICAgIFdTQUVQUk9DTElNCi0jZW5kaWYKLSNpZm5kZWYgRVVTRVJTCi0j
ZGVmaW5lIEVVU0VSUyAgICAgICAgICAgICAgICAgIFdTQUVVU0VSUwotI2VuZGlmCi0jaWZuZGVm
IEVEUVVPVAotI2RlZmluZSBFRFFVT1QgICAgICAgICAgICAgICAgICBXU0FFRFFVT1QKLSNlbmRp
ZgotI2lmbmRlZiBFU1RBTEUKLSNkZWZpbmUgRVNUQUxFICAgICAgICAgICAgICAgICAgV1NBRVNU
QUxFCi0jZW5kaWYKLSNpZm5kZWYgRVJFTU9URQotI2RlZmluZSBFUkVNT1RFICAgICAgICAgICAg
ICAgICBXU0FFUkVNT1RFCi0jZW5kaWYKLQotdHlwZWRlZiBjaGFyKiBjYWRkcl90OwotCi0jaWYg
X01TQ19WRVIgPCAxOTAwCi0jZGVmaW5lIHNucHJpbnRmKGRhdGEsIHNpemUsIGZvcm1hdCwgLi4u
KSBfc25wcmludGZfcyhkYXRhLCBzaXplLCBfVFJVTkNBVEUsIGZvcm1hdCwgX19WQV9BUkdTX18p
Ci0jZW5kaWYKLSNkZWZpbmUgaW5saW5lIF9faW5saW5lCi0jZGVmaW5lIF9faW5saW5lX18gX19p
bmxpbmUKLSNkZWZpbmUJTVNHX0VPUgkJMHg4CQkvKiBkYXRhIGNvbXBsZXRlcyByZWNvcmQgKi8K
LSNkZWZpbmUJTVNHX0RPTlRXQUlUCTB4ODAJCS8qIHRoaXMgbWVzc2FnZSBzaG91bGQgYmUgbm9u
YmxvY2tpbmcgKi8KLQotI2lmZGVmIENNU0dfREFUQQotI3VuZGVmIENNU0dfREFUQQotI2VuZGlm
Ci0vKgotICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBzaG91bGQgYXBwbHkgaWZmIFdJTlZF
UiA8IDB4MDYwMAotICogYnV0IHRoYXQgY2hlY2sgZG9lc24ndCB3b3JrIGluIGFsbCBjYXNlcy4g
U28gYmUgbW9yZSBwZWRhbnRpYy4uLgotICovCi0jZGVmaW5lIENNU0dfREFUQSh4KSBXU0FfQ01T
R19EQVRBKHgpCi0jZGVmaW5lIENNU0dfQUxJR04oeCkgV1NBX0NNU0dEQVRBX0FMSUdOKHgpCi0j
aWZuZGVmIENNU0dfRklSU1RIRFIKLSNkZWZpbmUgQ01TR19GSVJTVEhEUih4KSBXU0FfQ01TR19G
SVJTVEhEUih4KQotI2VuZGlmCi0jaWZuZGVmIENNU0dfTlhUSERSCi0jZGVmaW5lIENNU0dfTlhU
SERSKHgsIHkpIFdTQV9DTVNHX05YVEhEUih4LCB5KQotI2VuZGlmCi0jaWZuZGVmIENNU0dfU1BB
Q0UKLSNkZWZpbmUgQ01TR19TUEFDRSh4KSBXU0FfQ01TR19TUEFDRSh4KQotI2VuZGlmCi0jaWZu
ZGVmIENNU0dfTEVOCi0jZGVmaW5lIENNU0dfTEVOKHgpIFdTQV9DTVNHX0xFTih4KQotI2VuZGlm
Ci0KLS8qKioqICBmcm9tIHNjdHBfb3Nfd2luZG93cy5oICoqKioqKioqKioqKioqKi8KLSNkZWZp
bmUgU0NUUF9JRk5fSVNfSUZUX0xPT1AoaWZuKQkoKGlmbiktPmlmbl90eXBlID09IElGVF9MT09Q
KQotI2RlZmluZSBTQ1RQX1JPVVRFX0lTX1JFQUxfTE9PUChybykgKChybyktPnJvX3J0ICYmIChy
byktPnJvX3J0LT5ydF9pZmEgJiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcCAmJiAocm8p
LT5yb19ydC0+cnRfaWZhLT5pZmFfaWZwLT5pZl90eXBlID09IElGVF9MT09QKQotCi0vKgotICog
QWNjZXNzIHRvIElGTidzIHRvIGhlbHAgd2l0aCBzcmMtYWRkci1zZWxlY3Rpb24KLSAqLwotLyog
VGhpcyBjb3VsZCByZXR1cm4gVk9JRCBpZiB0aGUgaW5kZXggd29ya3MgYnV0IGZvciBCU0Qgd2Ug
cHJvdmlkZSBib3RoLiAqLwotI2RlZmluZSBTQ1RQX0dFVF9JRk5fVk9JRF9GUk9NX1JPVVRFKHJv
KSBcCi0JKChybyktPnJvX3J0ICE9IE5VTEwgPyAocm8pLT5yb19ydC0+cnRfaWZwIDogTlVMTCkK
LSNkZWZpbmUgU0NUUF9ST1VURV9IQVNfVkFMSURfSUZOKHJvKSBcCi0JKChybyktPnJvX3J0ICYm
IChybyktPnJvX3J0LT5ydF9pZnApCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqLwotCi0jZGVmaW5lIFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUocm8pIDEg
LyogY29tcGlsZXMuLi4gIFRPRE8gdXNlIHJvdXRpbmcgc29ja2V0IHRvIGRldGVybWluZSAqLwot
Ci0jZGVmaW5lIEJJR19FTkRJQU4gMQotI2RlZmluZSBMSVRUTEVfRU5ESUFOIDAKLSNpZmRlZiBX
T1JEU19CSUdFTkRJQU4KLSNkZWZpbmUgQllURV9PUkRFUiBCSUdfRU5ESUFOCi0jZWxzZQotI2Rl
ZmluZSBCWVRFX09SREVSIExJVFRMRV9FTkRJQU4KLSNlbmRpZgotCi0jZWxzZSAvKiAhZGVmaW5l
ZChVc2Vyc3BhY2Vfb3NfV2luZG93cykgKi8KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfRnJlZUJTRCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OZXRCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkg
fHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNl
bmRpZgotdHlwZWRlZiBwdGhyZWFkX211dGV4X3QgdXNlcmxhbmRfbXV0ZXhfdDsKLXR5cGVkZWYg
cHRocmVhZF9jb25kX3QgdXNlcmxhbmRfY29uZF90OwotdHlwZWRlZiBwdGhyZWFkX3QgdXNlcmxh
bmRfdGhyZWFkX3Q7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQotCi0jZGVmaW5lIElGTkFNU0laIDY0
Ci0KLSNkZWZpbmUgcmFuZG9tKCkgcmFuZCgpCi0jZGVmaW5lIHNyYW5kb20ocykgc3JhbmQocykK
LQotI2RlZmluZSB0aW1lcmFkZCh0dnAsIHV2cCwgdnZwKSAgIFwKLQlkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCi0JICAgICh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjICsgKHV2
cCktPnR2X3NlYzsgIFwKLQkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyArICh1dnAp
LT50dl91c2VjOyAgXAotCQlpZiAoKHZ2cCktPnR2X3VzZWMgPj0gMTAwMDAwMCkgeyAgICAgICAg
ICAgICAgICAgICBcCi0JCSAgICAodnZwKS0+dHZfc2VjKys7ICAgICAgICAgICAgICAgICAgICAg
ICAgXAotCQkJKHZ2cCktPnR2X3VzZWMgLT0gMTAwMDAwMDsgICAgICAgICAgICAgXAotCQl9ICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIHRpbWVyc3Vi
KHR2cCwgdXZwLCB2dnApICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkg
ICAgKHZ2cCktPnR2X3NlYyA9ICh0dnApLT50dl9zZWMgLSAodXZwKS0+dHZfc2VjOyAgXAotCQko
dnZwKS0+dHZfdXNlYyA9ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7ICBcCi0JCWlm
ICgodnZwKS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgICAgICAgICAgXAotCQkgICAgKHZ2cCkt
PnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCSh2dnApLT50dl91c2VjICs9
IDEwMDAwMDA7ICAgICAgICAgICAgIFwKLQkJfSAgICAgICAgICAgICAgICAgICAgICAgXAotCX0g
d2hpbGUgKDApCi0KLS8qI2luY2x1ZGUgPHBhY2tvbi5oPgotI3ByYWdtYSBwYWNrKHB1c2gsIDEp
Ki8KLXN0cnVjdCBpcCB7Ci0JdV9jaGFyICAgIGlwX2hsOjQsIGlwX3Y6NDsKLQl1X2NoYXIgICAg
aXBfdG9zOwotCXVfc2hvcnQgICBpcF9sZW47Ci0JdV9zaG9ydCAgIGlwX2lkOwotCXVfc2hvcnQg
ICBpcF9vZmY7Ci0jZGVmaW5lIElQX1JQIDB4ODAwMAotI2RlZmluZSBJUF9ERiAweDQwMDAKLSNk
ZWZpbmUgSVBfTUYgMHgyMDAwCi0jZGVmaW5lIElQX09GRk1BU0sgMHgxZmZmCi0JdV9jaGFyICAg
IGlwX3R0bDsKLQl1X2NoYXIgICAgaXBfcDsKLQl1X3Nob3J0ICAgaXBfc3VtOwotCXN0cnVjdCBp
bl9hZGRyIGlwX3NyYywgaXBfZHN0OwotfTsKLQotc3RydWN0IGlmYWRkcnMgewotCXN0cnVjdCBp
ZmFkZHJzICAqaWZhX25leHQ7Ci0JY2hhcgkJKmlmYV9uYW1lOwotCXVuc2lnbmVkIGludAkJIGlm
YV9mbGFnczsKLQlzdHJ1Y3Qgc29ja2FkZHIJKmlmYV9hZGRyOwotCXN0cnVjdCBzb2NrYWRkcgkq
aWZhX25ldG1hc2s7Ci0Jc3RydWN0IHNvY2thZGRyCSppZmFfZHN0YWRkcjsKLQl2b2lkCQkqaWZh
X2RhdGE7Ci19OwotCi1zdHJ1Y3QgdWRwaGRyIHsKLQl1aW50MTZfdCB1aF9zcG9ydDsKLQl1aW50
MTZfdCB1aF9kcG9ydDsKLQl1aW50MTZfdCB1aF91bGVuOwotCXVpbnQxNl90IHVoX3N1bTsKLX07
Ci0KLXN0cnVjdCBpb3ZlYyB7Ci0Jc2l6ZV90IGxlbjsKLQljaGFyICpidWY7Ci19OwotCi0jZGVm
aW5lIGlvdl9iYXNlIGJ1ZgotI2RlZmluZSBpb3ZfbGVuCWxlbgotCi1zdHJ1Y3QgaWZhX21zZ2hk
ciB7Ci0JdWludDE2X3QgICAgICAgICBpZmFtX21zZ2xlbjsKLQl1bnNpZ25lZCBjaGFyICAgIGlm
YW1fdmVyc2lvbjsKLQl1bnNpZ25lZCBjaGFyICAgIGlmYW1fdHlwZTsKLQl1aW50MzJfdCAgICAg
ICAgIGlmYW1fYWRkcnM7Ci0JdWludDMyX3QgICAgICAgICBpZmFtX2ZsYWdzOwotCXVpbnQxNl90
ICAgICAgICAgaWZhbV9pbmRleDsKLQl1aW50MzJfdCAgICAgICAgIGlmYW1fbWV0cmljOwotfTsK
LQotc3RydWN0IGlmZGV2bXR1IHsKLQlpbnQgaWZkbV9jdXJyZW50OwotCWludCBpZmRtX21pbjsK
LQlpbnQgaWZkbV9tYXg7Ci19OwotCi1zdHJ1Y3QgaWZrcGkgewotCXVuc2lnbmVkIGludCAgaWZr
X21vZHVsZV9pZDsKLQl1bnNpZ25lZCBpbnQgIGlma190eXBlOwotCXVuaW9uIHsKLQkJdm9pZCAq
aWZrX3B0cjsKLQkJaW50IGlma192YWx1ZTsKLQl9IGlma19kYXRhOwotfTsKLQotc3RydWN0IGlm
cmVxIHsKLQljaGFyICAgIGlmcl9uYW1lWzE2XTsKLQl1bmlvbiB7Ci0JCXN0cnVjdCBzb2NrYWRk
ciBpZnJ1X2FkZHI7Ci0JCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2RzdGFkZHI7Ci0JCXN0cnVjdCBz
b2NrYWRkciBpZnJ1X2Jyb2FkYWRkcjsKLQkJc2hvcnQgIGlmcnVfZmxhZ3M7Ci0JCWludCBpZnJ1
X21ldHJpYzsKLQkJaW50IGlmcnVfbXR1OwotCQlpbnQgaWZydV9waHlzOwotCQlpbnQgaWZydV9t
ZWRpYTsKLQkJaW50ICAgIGlmcnVfaW50dmFsOwotCQljaGFyKiAgaWZydV9kYXRhOwotCQlzdHJ1
Y3QgaWZkZXZtdHUgaWZydV9kZXZtdHU7Ci0JCXN0cnVjdCBpZmtwaSAgaWZydV9rcGk7Ci0JCXVp
bnQzMl90IGlmcnVfd2FrZV9mbGFnczsKLQl9IGlmcl9pZnJ1OwotI2RlZmluZSBpZnJfYWRkciAg
ICAgICAgaWZyX2lmcnUuaWZydV9hZGRyCi0jZGVmaW5lIGlmcl9kc3RhZGRyICAgICBpZnJfaWZy
dS5pZnJ1X2RzdGFkZHIKLSNkZWZpbmUgaWZyX2Jyb2FkYWRkciAgIGlmcl9pZnJ1LmlmcnVfYnJv
YWRhZGRyCi0jZGVmaW5lIGlmcl9mbGFncyAgICAgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzBdCi0j
ZGVmaW5lIGlmcl9wcmV2ZmxhZ3MgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzFdCi0jZGVmaW5lIGlm
cl9tZXRyaWMgICAgICBpZnJfaWZydS5pZnJ1X21ldHJpYwotI2RlZmluZSBpZnJfbXR1ICAgICAg
ICAgaWZyX2lmcnUuaWZydV9tdHUKLSNkZWZpbmUgaWZyX3BoeXMgICAgICAgIGlmcl9pZnJ1Lmlm
cnVfcGh5cwotI2RlZmluZSBpZnJfbWVkaWEgICAgICAgaWZyX2lmcnUuaWZydV9tZWRpYQotI2Rl
ZmluZSBpZnJfZGF0YSAgICAgICAgaWZyX2lmcnUuaWZydV9kYXRhCi0jZGVmaW5lIGlmcl9kZXZt
dHUgICAgICBpZnJfaWZydS5pZnJ1X2Rldm10dQotI2RlZmluZSBpZnJfaW50dmFsICAgICAgaWZy
X2lmcnUuaWZydV9pbnR2YWwKLSNkZWZpbmUgaWZyX2twaSAgICAgICAgIGlmcl9pZnJ1LmlmcnVf
a3BpCi0jZGVmaW5lIGlmcl93YWtlX2ZsYWdzICBpZnJfaWZydS5pZnJ1X3dha2VfZmxhZ3MKLX07
Ci0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotaW50IHdp
bl9pZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICopOwotI2RlZmluZSBpZl9uYW1ldG9pbmRleCh4
KSB3aW5faWZfbmFtZXRvaW5kZXgoeCkKLSNlbmRpZgotCi0jZGVmaW5lIG10eF9sb2NrKGFyZzEp
Ci0jZGVmaW5lIG10eF91bmxvY2soYXJnMSkKLSNkZWZpbmUgbXR4X2Fzc2VydChhcmcxLGFyZzIp
Ci0jZGVmaW5lIE1BX09XTkVEIDcgLyogc3lzL211dGV4LmggdHlwaWNhbGx5IG9uIEZyZWVCU0Qg
Ki8KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQotc3RydWN0IG10eCB7aW50
IGR1bW15O307Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKQotc3RydWN0IHNl
bGluZm8ge2ludCBkdW1teTt9OwotI2VuZGlmCi1zdHJ1Y3Qgc3gge2ludCBkdW1teTt9OwotI2Vu
ZGlmCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotLyogI2luY2x1
ZGUgPHN5cy9wYXJhbS5oPiAgaW4gRnJlZUJTRCBkZWZpbmVzIE1TSVpFICovCi0vKiAjaW5jbHVk
ZSA8c3lzL2t0ci5oPiAqLwotLyogI2luY2x1ZGUgPHN5cy9zeXN0bS5oPiAqLwotI2lmIGRlZmlu
ZWQoSEFWRV9TWVNfUVVFVUVfSCkKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbHNlCi0jaW5j
bHVkZSA8dXNlcl9xdWV1ZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8dXNlcl9tYWxsb2MuaD4KLS8q
ICNpbmNsdWRlIDxzeXMva2VybmVsLmg+ICovCi0vKiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPiAq
LwotLyogI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+ICovCi0vKiBvbiBGcmVlQlNELCB0aGlzIHJl
c3VsdHMgaW4gYSByZWRlZmludGlvbiBvZiBTT0NLKEJVRilfKFVOKUxPQ0sgYW5kCi0gKiAgdWtu
b3duIHR5cGUgb2Ygc3RydWN0IG10eCBmb3Igc2JfbXR4IGluIHN0cnVjdCBzb2NrYnVmICovCi0j
aW5jbHVkZSAidXNlcl9zb2NrZXR2YXIuaCIgLyogTUFMTE9DX0RFQ0xBUkUncyBNX1BDQi4gUmVw
bGFjZW1lbnQgZm9yIHN5cy9zb2NrZXR2YXIuaCAqLwotLyogI2luY2x1ZGUgPHN5cy9qYWlsLmg+
ICovCi0vKiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPiAqLwotI2luY2x1ZGUgPHVzZXJfZW52aXJv
bm1lbnQuaD4KLSNpbmNsdWRlIDx1c2VyX2F0b21pYy5oPgotI2luY2x1ZGUgPHVzZXJfbWJ1Zi5o
PgotLyogI2luY2x1ZGUgPHN5cy91aW8uaD4gKi8KLS8qICNpbmNsdWRlIDxzeXMvbG9jay5oPiAq
LwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAw
Ci0jaW5jbHVkZSA8c3lzL3J3bG9jay5oPgotI2VuZGlmCi0vKiAjaW5jbHVkZSA8c3lzL2t0aHJl
YWQuaD4gKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
IDYwMjAwMAotI2luY2x1ZGUgPHN5cy9wcml2Lmg+Ci0jZW5kaWYKLS8qICNpbmNsdWRlIDxzeXMv
cmFuZG9tLmg+ICovCi0vKiAjaW5jbHVkZSA8c3lzL2xpbWl0cy5oPiAqLwotLyogI2luY2x1ZGUg
PG1hY2hpbmUvY3B1Lmg+ICovCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikK
LS8qIHdhcyBhIDAgYnl0ZSBmaWxlLiAgbmVlZGVkIGZvciBzdHJ1Y3RzIGlmX2RhdGEoNjQpIGFu
ZCBuZXRfZXZlbnRfZGF0YSAqLwotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLSNpbmNsdWRlIDxuZXQvaWZfdHlwZXMu
aD4KLS8qICNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+IHdhcyBhIDAgYnl0ZSBmaWxlLiAgY2F1c2Vz
IHN0cnVjdCBtdHggcmVkZWZpbml0aW9uICovCi0jZW5kaWYKLS8qIE9PVEIgb25seSAtIGR1bW15
IHJvdXRlIHVzZWQgYXQgdGhlIG1vbWVudC4gc2hvdWxkIHdlIHBvcnQgcm91dGUgdG8KLSAqICB1
c2Vyc3BhY2UgYXMgd2VsbD8gKi8KLS8qIG9uIEZyZWVCU0QsIHRoaXMgcmVzdWx0cyBpbiBhIHJl
ZGVmaW50aW9uIG9mIHN0cnVjdCByb3V0ZSAqLwotLyogI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPiAq
LwotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX05hQ2wpCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9p
bi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2lw
Lmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gpCi0jaW5jbHVk
ZSA8bmV0aW5ldC9pcF9pY21wLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVzZXJfaXBfaWNtcC5oPgot
I2VuZGlmCi0vKiAjaW5jbHVkZSA8bmV0aW5ldC9pbl9wY2IuaD4gcG9ydGVkIHRvIHVzZXJzcGFj
ZSAqLwotI2luY2x1ZGUgPHVzZXJfaW5wY2IuaD4KLQotLyogZm9yIGdldGlmYWRkcnMgKi8KLSNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLSNpbmNsdWRlIDxpZmFkZHJz
Lmg+Ci0jZW5kaWYKLQotLyogZm9yIGlvY3RsICovCi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0K
LS8qIGZvciBjbG9zZSwgZXRjLiAqLwotI2luY2x1ZGUgPHVuaXN0ZC5oPgotI2VuZGlmCi0KLS8q
IGxvdHMgb2YgZXJybm8ncyB1c2VkIGFuZCBuZWVkZWQgaW4gdXNlcnNwYWNlICovCi0KLS8qIGZv
ciBvZmZzZXRvZiAqLwotI2luY2x1ZGUgPHN0ZGRlZi5oPgotCi0jaWYgZGVmaW5lZChTQ1RQX1BS
T0NFU1NfTEVWRUxfTE9DS1MpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0v
KiBmb3IgcHRocmVhZF9tdXRleF9sb2NrLCBwdGhyZWFkX211dGV4X3VubG9jaywgZXRjLiAqLwot
I2luY2x1ZGUgPHB0aHJlYWQuaD4KLSNlbmRpZgotCi0jaWZkZWYgSVBTRUMKLSNpbmNsdWRlIDxu
ZXRpcHNlYy9pcHNlYy5oPgotI2luY2x1ZGUgPG5ldGlwc2VjL2tleS5oPgotI2VuZGlmCQkJCS8q
IElQU0VDICovCi0KLSNpZmRlZiBJTkVUNgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJl
ZUJTRCkKLSNpbmNsdWRlIDxzeXMvZG9tYWluLmg+Ci0jZW5kaWYKLSNpZmRlZiBJUFNFQwotI2lu
Y2x1ZGUgPG5ldGlwc2VjL2lwc2VjNi5oPgotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJl
ZUJTRCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19OZXRCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgInVzZXJfaXA2X3Zhci5oIgot
I2Vsc2UKLSNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0jaW5jbHVkZSA8bmV0aW5ldDYvaW42X3BjYi5oPgot
I2luY2x1ZGUgPG5ldGluZXQ2L2lwNnByb3Rvc3cuaD4KLS8qICNpbmNsdWRlIDxuZXRpbmV0Ni9u
ZDYuaD4gd2FzIGEgMCBieXRlIGZpbGUgKi8KLSNpbmNsdWRlIDxuZXRpbmV0Ni9zY29wZTZfdmFy
Lmg+Ci0jZW5kaWYKLSNlbmRpZiAvKiBJTkVUNiAqLwotCi0jaWYgZGVmaW5lZChIQVZFX1NDVFBf
UEVFTE9GRl9TT0NLT1BUKQotI2luY2x1ZGUgPHN5cy9maWxlLmg+Ci0jaW5jbHVkZSA8c3lzL2Zp
bGVkZXNjLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgIm5ldGluZXQvc2N0cF9zaGExLmgiCi0KLSNp
ZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX29wdGlv
bnMuaD4KLSNlbmRpZgotCi0jZGVmaW5lIFNDVFBfUFJJTlRGKC4uLikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAotCWlmIChTQ1RQX0JBU0VfVkFSKGRlYnVnX3ByaW50ZikpIHsg
ICAgICAgICAgICAgICAgXAotCQlTQ1RQX0JBU0VfVkFSKGRlYnVnX3ByaW50ZikoX19WQV9BUkdT
X18pOyBcCi0JfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZm5kZWYgaW42cGNiCi0j
ZGVmaW5lIGluNnBjYgkJaW5wY2IKLSNlbmRpZgotI2VuZGlmCi0vKiBEZWNsYXJlIGFsbCB0aGUg
bWFsbG9jIG5hbWVzIGZvciBhbGwgdGhlIHZhcmlvdXMgbWFsbG9jcyAqLwotTUFMTE9DX0RFQ0xB
UkUoU0NUUF9NX01BUCk7Ci1NQUxMT0NfREVDTEFSRShTQ1RQX01fU1RSTUkpOwotTUFMTE9DX0RF
Q0xBUkUoU0NUUF9NX1NUUk1PKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BU0NfQUREUik7Ci1N
QUxMT0NfREVDTEFSRShTQ1RQX01fQVNDX0lUKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRI
X0NMKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRIX0tZKTsKLU1BTExPQ19ERUNMQVJFKFND
VFBfTV9BVVRIX0hMKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9BVVRIX0lGKTsKLU1BTExPQ19E
RUNMQVJFKFNDVFBfTV9TVFJFU0VUKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9DTVNHKTsKLU1B
TExPQ19ERUNMQVJFKFNDVFBfTV9DT1BZQUwpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1ZSRik7
Ci1NQUxMT0NfREVDTEFSRShTQ1RQX01fSUZBKTsKLU1BTExPQ19ERUNMQVJFKFNDVFBfTV9JRk4p
OwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX1RJTVcpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX01W
UkYpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0lURVIpOwotTUFMTE9DX0RFQ0xBUkUoU0NUUF9N
X1NPQ0tPUFQpOwotCi0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQotI2RlZmlu
ZSBTQ1RQX0dFVF9DWUNMRUNPVU5UIGdldF9jeWNsZWNvdW50KCkKLSNkZWZpbmUgU0NUUF9DVFI2
IHNjdHBfbG9nX3RyYWNlCi0KLSNlbHNlCi0jZGVmaW5lIFNDVFBfQ1RSNiBDVFI2Ci0jZW5kaWYK
LQotLyogRW1wdHkga3RyIHN0YXRlbWVudCBmb3IgX1VzZXJzcGFjZV9fIChzaW1pbGFyIHRvIHdo
YXQgaXMgZG9uZSBmb3IgbWFjKSAqLwotI2RlZmluZQlDVFI2KG0sIGQsIHAxLCBwMiwgcDMsIHA0
LCBwNSwgcDYpCi0KLQotCi0jZGVmaW5lIFNDVFBfQkFTRV9JTkZPKF9fbSkgc3lzdGVtX2Jhc2Vf
aW5mby5zY3RwcGNiaW5mby5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1NUQVRTIHN5c3RlbV9iYXNl
X2luZm8uc2N0cHN0YXQKLSNkZWZpbmUgU0NUUF9CQVNFX1NUQVQoX19tKSAgICAgc3lzdGVtX2Jh
c2VfaW5mby5zY3Rwc3RhdC5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1NZU0NUTChfX20pIHN5c3Rl
bV9iYXNlX2luZm8uc2N0cHN5c2N0bC5fX20KLSNkZWZpbmUgU0NUUF9CQVNFX1ZBUihfX20pIHN5
c3RlbV9iYXNlX2luZm8uX19tCi0KLS8qCi0gKgotICovCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfRGFyd2luKQotI2RlZmluZSBVU0VSX0FERFJfTlVMTAkoTlVMTCkJCS8qIEZJWCBNRTog
dGVtcCAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKFNDVFBfREVCVUcpCi0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2NvbnN0YW50cy5oPgotI2RlZmluZSBTQ1RQREJHKGxldmVsLCAuLi4pCQkJCQlc
Ci17CQkJCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGVidWdfb24pICYgbGV2ZWwpIHsJXAotCQkJU0NUUF9QUklOVEYoX19WQV9BUkdTX18pOwkJXAot
CQl9CQkJCQkJXAotCX0gd2hpbGUgKDApOwkJCQkJCVwKLX0KLSNkZWZpbmUgU0NUUERCR19BRERS
KGxldmVsLCBhZGRyKQkJCQlcCi17CQkJCQkJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pICYgbGV2ZWwgKSB7CVwKLQkJICAgIHNjdHBfcHJp
bnRfYWRkcmVzcyhhZGRyKTsJCQlcCi0JCX0JCQkJCQlcCi0JfSB3aGlsZSAoMCk7CQkJCQkJXAot
fQotI2Vsc2UKLSNkZWZpbmUgU0NUUERCRyhsZXZlbCwgLi4uKQotI2RlZmluZSBTQ1RQREJHX0FE
RFIobGV2ZWwsIGFkZHIpCi0jZW5kaWYKLQotI2lmZGVmIFNDVFBfTFRSQUNFX0NIVU5LUwotI2Rl
ZmluZSBTQ1RQX0xUUkFDRV9DSEsoYSwgYiwgYywgZCkgaWYoc2N0cF9sb2dnaW5nX2xldmVsICYg
U0NUUF9MVFJBQ0VfQ0hVTktfRU5BQkxFKSBDVFI2KEtUUl9TVUJTWVMsICJTQ1RQOiVkWyVkXTol
eC0leC0leC0leCIsIFNDVFBfTE9HX0NIVU5LX1BST0MsIDAsIGEsIGIsIGMsIGQpCi0jZWxzZQot
I2RlZmluZSBTQ1RQX0xUUkFDRV9DSEsoYSwgYiwgYywgZCkKLSNlbmRpZgotCi0jaWZkZWYgU0NU
UF9MVFJBQ0VfRVJST1JTCi0jZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwg
c3RjYiwgbmV0LCBmaWxlLCBlcnIpIFwKLQlpZiAoc2N0cF9sb2dnaW5nX2xldmVsICYgU0NUUF9M
VFJBQ0VfRVJST1JfRU5BQkxFKSBcCi0JCVNDVFBfUFJJTlRGKCJtYnVmOiVwIGlucDolcCBzdGNi
OiVwIG5ldDolcCBmaWxlOiV4IGxpbmU6JWQgZXJyb3I6JWRcbiIsIFwKLQkJICAgICAgICAgICAg
KHZvaWQgKiltLCAodm9pZCAqKWlucCwgKHZvaWQgKilzdGNiLCAodm9pZCAqKW5ldCwgZmlsZSwg
X19MSU5FX18sIGVycik7Ci0jZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBu
ZXQsIGZpbGUsIGVycikgXAotCWlmIChzY3RwX2xvZ2dpbmdfbGV2ZWwgJiBTQ1RQX0xUUkFDRV9F
UlJPUl9FTkFCTEUpIFwKLQkJU0NUUF9QUklOVEYoImlucDolcCBzdGNiOiVwIG5ldDolcCBmaWxl
OiV4IGxpbmU6JWQgZXJyb3I6JWRcbiIsIFwKLQkJICAgICAgICAgICAgKHZvaWQgKilpbnAsICh2
b2lkICopc3RjYiwgKHZvaWQgKiluZXQsIGZpbGUsIF9fTElORV9fLCBlcnIpOwotI2Vsc2UKLSNk
ZWZpbmUgU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIGZpbGUsIGVy
cikKLSNkZWZpbmUgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgZmlsZSwgZXJy
KQotI2VuZGlmCi0KLQotLyoKLSAqIExvY2FsIGFkZHJlc3MgYW5kIGludGVyZmFjZSBsaXN0IGhh
bmRsaW5nCi0gKi8KLSNkZWZpbmUgU0NUUF9NQVhfVlJGX0lECQkwCi0jZGVmaW5lIFNDVFBfU0la
RV9PRl9WUkZfSEFTSAkzCi0jZGVmaW5lIFNDVFBfSUZOQU1TSVoJCUlGTkFNU0laCi0jZGVmaW5l
IFNDVFBfREVGQVVMVF9WUkZJRAkwCi0jZGVmaW5lIFNDVFBfVlJGX0FERFJfSEFTSF9TSVpFCTE2
Ci0jZGVmaW5lIFNDVFBfVlJGX0lGTl9IQVNIX1NJWkUJMwotI2RlZmluZQlTQ1RQX0lOSVRfVlJG
X1RBQkxFSUQodnJmKQotCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNk
ZWZpbmUgU0NUUF9JRk5fSVNfSUZUX0xPT1AoaWZuKSAoc3RybmNtcCgoaWZuKS0+aWZuX25hbWUs
ICJsbyIsIDIpID09IDApCi0vKiBCU0QgZGVmaW5pdGlvbiAqLwotLyogI2RlZmluZSBTQ1RQX1JP
VVRFX0lTX1JFQUxfTE9PUChybykgKChybyktPnJvX3J0ICYmIChybyktPnJvX3J0LT5ydF9pZmEg
JiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcCAmJiAocm8pLT5yb19ydC0+cnRfaWZhLT5p
ZmFfaWZwLT5pZl90eXBlID09IElGVF9MT09QKSAqLwotLyogb25seSB1c2VkIGluIElQdjYgc2Nl
bmFyaW8sIHdoaWNoIGlzbid0IHN1cHBvcnRlZCB5ZXQgKi8KLSNkZWZpbmUgU0NUUF9ST1VURV9J
U19SRUFMX0xPT1Aocm8pIDAKLQotLyoKLSAqIEFjY2VzcyB0byBJRk4ncyB0byBoZWxwIHdpdGgg
c3JjLWFkZHItc2VsZWN0aW9uCi0gKi8KLS8qIFRoaXMgY291bGQgcmV0dXJuIFZPSUQgaWYgdGhl
IGluZGV4IHdvcmtzIGJ1dCBmb3IgQlNEIHdlIHByb3ZpZGUgYm90aC4gKi8KLSNkZWZpbmUgU0NU
UF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybykgKHZvaWQgKilyby0+cm9fcnQtPnJ0X2lmcAot
I2RlZmluZSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKSAxIC8qIGNvbXBpbGVzLi4u
ICBUT0RPIHVzZSByb3V0aW5nIHNvY2tldCB0byBkZXRlcm1pbmUgKi8KLSNkZWZpbmUgU0NUUF9S
T1VURV9IQVNfVkFMSURfSUZOKHJvKSAoKHJvKS0+cm9fcnQgJiYgKHJvKS0+cm9fcnQtPnJ0X2lm
cCkKLSNlbmRpZgotCi0vKgotICogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdGlvbgotICovCi0jZGVm
aW5lIFNDVFBfTUFMTE9DKHZhciwgdHlwZSwgc2l6ZSwgbmFtZSkJCQkJXAotCWRvIHsJCQkJCQkJ
CVwKLQkJTUFMTE9DKHZhciwgdHlwZSwgc2l6ZSwgbmFtZSwgTV9OT1dBSVQpOwkJXAotCX0gd2hp
bGUgKDApCi0KLSNkZWZpbmUgU0NUUF9GUkVFKHZhciwgdHlwZSkJRlJFRSh2YXIsIHR5cGUpCi0K
LSNkZWZpbmUgU0NUUF9NQUxMT0NfU09OQU1FKHZhciwgdHlwZSwgc2l6ZSkJCQkJXAotCWRvIHsJ
CQkJCQkJCVwKLQkJTUFMTE9DKHZhciwgdHlwZSwgc2l6ZSwgTV9TT05BTUUsIChNX1dBSVRPSyB8
IE1fWkVSTykpOwlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0ZSRUVfU09OQU1FKHZh
cikJRlJFRSh2YXIsIE1fU09OQU1FKQotCi0jZGVmaW5lIFNDVFBfUFJPQ0VTU19TVFJVQ1Qgc3Ry
dWN0IHByb2MgKgotCi0vKgotICogem9uZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucwotICovCi0KLQot
I2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotLyp0eXBlZGVmIHNpemVfdCBzY3Rw
X3pvbmVfdDsqLwotI2RlZmluZSBTQ1RQX1pPTkVfSU5JVCh6b25lLCBuYW1lLCBzaXplLCBudW1i
ZXIpIHsgXAotCXpvbmUgPSBzaXplOyBcCi19Ci0KLS8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05F
X0dFVDogYWxsb2NhdGUgZWxlbWVudCBmcm9tIHRoZSB6b25lICovCi0jZGVmaW5lIFNDVFBfWk9O
RV9HRVQoem9uZSwgdHlwZSkgIFwKLSAgICAgICAgKHR5cGUgKiltYWxsb2Moem9uZSk7Ci0KLQot
LyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfRlJFRTogZnJlZSBlbGVtZW50IGZyb20gdGhlIHpv
bmUgKi8KLSNkZWZpbmUgU0NUUF9aT05FX0ZSRUUoem9uZSwgZWxlbWVudCkgeyBcCi0JZnJlZShl
bGVtZW50KTsgIFwKLX0KLQotI2RlZmluZSBTQ1RQX1pPTkVfREVTVFJPWSh6b25lKQotI2Vsc2UK
LS8qX19Vc2Vyc3BhY2VfXwotICBDb21waWxpbmcgJiBsaW5raW5nIG5vdGVzOiBOZWVkcyBsaWJ1
bWVtLCB3aGljaCBoYXMgYmVlbiBwbGFjZWQgaW4gLi91c2VyX2xpYgotICBBbGwgdXNlcnNwYWNl
IGhlYWRlciBmaWxlcyBhcmUgaW4gLi91c2VyX2luY2x1ZGUuIE1ha2VmaWxlIHdpbGwgbmVlZCB0
aGUKLSAgZm9sbG93aW5nLgotICBDRkxBR1MgPSAtSS4vIC1XYWxsCi0gIExERkxBR1MgPSAtTC4v
dXNlcl9saWIgLVIuL3VzZXJfbGliIC1sdW1lbQotKi8KLSNpbmNsdWRlICJ1c2VyX2luY2x1ZGUv
dW1lbS5oIgotCi0vKiBfX1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9JTklUOiBpbml0aWFsaXplIHRo
ZSB6b25lICovCi0vKgotICBfX1VzZXJzcGFjZV9fCi0gIE5vIGVxdWl2YWxlbnQgZnVuY3Rpb24g
dG8gdW1hX3pvbmVfc2V0X21heCBhZGRlZCB5ZXQuIChTZWUgU0NUUF9aT05FX0lOSVQgaW4gc2N0
cF9vc19ic2QuaAotICBmb3IgcmVmZXJlbmNlKS4gSXQgbWF5IG5vdCBiZSByZXF1aXJlZCBhcyBt
ZW50aW9uZWQgaW4KLSAgaHR0cDovL25peGRvYy5uZXQvbWFuLXBhZ2VzL0ZyZWVCU0QvdW1hX3ph
bGxvYy45Lmh0bWwgdGhhdAotICBtYXggbGltaXRzIG1heSBub3QgZW5mb3JjZWQgb24gc3lzdGVt
cyB3aXRoIG1vcmUgdGhhbiBvbmUgQ1BVLgotKi8KLSNkZWZpbmUgU0NUUF9aT05FX0lOSVQoem9u
ZSwgbmFtZSwgc2l6ZSwgbnVtYmVyKSB7IFwKLQl6b25lID0gdW1lbV9jYWNoZV9jcmVhdGUobmFt
ZSwgc2l6ZSwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgMCk7IFwKLSAgfQotCi0v
KiBfX1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9HRVQ6IGFsbG9jYXRlIGVsZW1lbnQgZnJvbSB0aGUg
em9uZSAqLwotI2RlZmluZSBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUpIFwKLSAgICAgICAgKHR5
cGUgKil1bWVtX2NhY2hlX2FsbG9jKHpvbmUsIFVNRU1fREVGQVVMVCk7Ci0KLQotLyogX19Vc2Vy
c3BhY2VfXyBTQ1RQX1pPTkVfRlJFRTogZnJlZSBlbGVtZW50IGZyb20gdGhlIHpvbmUgKi8KLSNk
ZWZpbmUgU0NUUF9aT05FX0ZSRUUoem9uZSwgZWxlbWVudCkgXAotCXVtZW1fY2FjaGVfZnJlZSh6
b25lLCBlbGVtZW50KTsKLQotCi0vKiBfX1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9ERVNUUk9ZOiBk
ZXN0cm95IHRoZSB6b25lICovCi0jZGVmaW5lIFNDVFBfWk9ORV9ERVNUUk9ZKHpvbmUpIFwKLQl1
bWVtX2NhY2hlX2Rlc3Ryb3koem9uZSk7Ci0jZW5kaWYKLQotLyoKLSAqIF9fVXNlcnNwYWNlX18g
RGVmaW5pbmcgc2N0cF9oYXNoaW5pdF9mbGFncygpIGFuZCBzY3RwX2hhc2hkZXN0cm95KCkgZm9y
IHVzZXJsYW5kLgotICovCi12b2lkICpzY3RwX2hhc2hpbml0X2ZsYWdzKGludCBlbGVtZW50cywg
c3RydWN0IG1hbGxvY190eXBlICp0eXBlLAotICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmhh
c2htYXNrLCBpbnQgZmxhZ3MpOwotdm9pZAotc2N0cF9oYXNoZGVzdHJveSh2b2lkICp2aGFzaHRi
bCwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2spOwotCi12b2lkCi1z
Y3RwX2hhc2hmcmVlZGVzdHJveSh2b2lkICp2aGFzaHRibCwgc3RydWN0IG1hbGxvY190eXBlICp0
eXBlLCB1X2xvbmcgaGFzaG1hc2spOwotCi0KLSNkZWZpbmUgSEFTSF9OT1dBSVQgMHgwMDAwMDAw
MQotI2RlZmluZSBIQVNIX1dBSVRPSyAweDAwMDAwMDAyCi0KLS8qIE1fUENCIGlzIE1BTExPQ19E
RUNMQVJFJ2QgaW4gc3lzL3NvY2tldHZhci5oICovCi0jZGVmaW5lIFNDVFBfSEFTSF9JTklUKHNp
emUsIGhhc2htYXJrKSBzY3RwX2hhc2hpbml0X2ZsYWdzKHNpemUsIE1fUENCLCBoYXNobWFyaywg
SEFTSF9OT1dBSVQpCi0KLSNkZWZpbmUgU0NUUF9IQVNIX0ZSRUUodGFibGUsIGhhc2htYXJrKSBz
Y3RwX2hhc2hkZXN0cm95KHRhYmxlLCBNX1BDQiwgaGFzaG1hcmspCi0KLSNkZWZpbmUgU0NUUF9I
QVNIX0ZSRUVfREVTVFJPWSh0YWJsZSwgaGFzaG1hcmspICBzY3RwX2hhc2hmcmVlZGVzdHJveSh0
YWJsZSwgTV9QQ0IsIGhhc2htYXJrKQotI2RlZmluZSBTQ1RQX01fQ09QWU0JbV9jb3B5bQotCi0v
KgotICogdGltZXJzCi0gKi8KLS8qIF9fVXNlcnNwYWNlX18KLSAqIHVzZXJfc2N0cF9jYWxsb3V0
LmggaGFzIHR5cGVkZWYgc3RydWN0IHNjdHBfY2FsbG91dCBzY3RwX29zX3RpbWVyX3Q7Ci0gKiB3
aGljaCBpcyB1c2VkIGluIHRoZSB0aW1lciByZWxhdGVkIGZ1bmN0aW9ucyBzdWNoIGFzCi0gKiBT
Q1RQX09TX1RJTUVSX0lOSVQgZXRjLgotKi8KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY2FsbG91
dC5oPgotCi0vKiBfX1VzZXJzcGFjZV9fIENyZWF0aW5nIGEgcmVjZWl2ZSB0aHJlYWQgKi8KLSNp
bmNsdWRlIDx1c2VyX3JlY3ZfdGhyZWFkLmg+Ci0KLS8qX19Vc2Vyc3BhY2VfXyBkZWZpbmluZyBL
VFJfU1VCU1lTIDEgYXMgZG9uZSBpbiBzY3RwX29zX21hY29zeC5oICovCi0jZGVmaW5lIEtUUl9T
VUJTWVMgMQotCi0vKiBUaGUgcGFja2VkIGRlZmluZSBmb3IgNjQgYml0IHBsYXRmb3JtcyAqLwot
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jZGVmaW5lIFNDVFBfUEFDS0VE
IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCi0jZGVmaW5lIFNDVFBfVU5VU0VEIF9fYXR0cmlidXRl
X18oKHVudXNlZCkpCi0jZWxzZQotI2RlZmluZSBTQ1RQX1BBQ0tFRAotI2RlZmluZSBTQ1RQX1VO
VVNFRAotI2VuZGlmCi0KLS8qCi0gKiBGdW5jdGlvbnMKLSAqLwotLyogTWJ1ZiBtYW5pcHVsYXRp
b24gYW5kIGFjY2VzcyBtYWNyb3MgICovCi0jZGVmaW5lIFNDVFBfQlVGX0xFTihtKSAobS0+bV9s
ZW4pCi0jZGVmaW5lIFNDVFBfQlVGX05FWFQobSkgKG0tPm1fbmV4dCkKLSNkZWZpbmUgU0NUUF9C
VUZfTkVYVF9QS1QobSkgKG0tPm1fbmV4dHBrdCkKLSNkZWZpbmUgU0NUUF9CVUZfUkVTVl9VRiht
LCBzaXplKSBtLT5tX2RhdGEgKz0gc2l6ZQotI2RlZmluZSBTQ1RQX0JVRl9BVChtLCBzaXplKSBt
LT5tX2RhdGEgKyBzaXplCi0jZGVmaW5lIFNDVFBfQlVGX0lTX0VYVEVOREVEKG0pIChtLT5tX2Zs
YWdzICYgTV9FWFQpCi0jZGVmaW5lIFNDVFBfQlVGX0VYVEVORF9TSVpFKG0pIChtLT5tX2V4dC5l
eHRfc2l6ZSkKLSNkZWZpbmUgU0NUUF9CVUZfVFlQRShtKSAobS0+bV90eXBlKQotI2RlZmluZSBT
Q1RQX0JVRl9SRUNWSUYobSkgKG0tPm1fcGt0aGRyLnJjdmlmKQotI2RlZmluZSBTQ1RQX0JVRl9Q
UkVQRU5ECU1fUFJFUEVORAotCi0jZGVmaW5lIFNDVFBfQUxJR05fVE9fRU5EKG0sIGxlbikgaWYo
bS0+bV9mbGFncyAmIE1fUEtUSERSKSB7IFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBNSF9BTElHTihtLCBsZW4pOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmICgobS0+bV9mbGFncyAmIE1fRVhUKSA9PSAwKSB7IFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNX0FMSUdOKG0sIGxlbik7IFwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0KLS8qIFdlIG1ha2UgaXQgc28gaWYgeW91IGhh
dmUgdXAgdG8gNCB0aHJlYWRzCi0gKiB3cml0dGluZyBiYXNlZCBvbiB0aGUgZGVmYXVsdCBzaXpl
IG9mCi0gKiB0aGUgcGFja2V0IGxvZyA2NSBrLCB0aGF0IHdvdWxkIGJlCi0gKiA0IDE2ayBwYWNr
ZXRzIGJlZm9yZSB3ZSB3b3VsZCBoaXQKLSAqIGEgcHJvYmxlbS4KLSAqLwotI2RlZmluZSBTQ1RQ
X1BLVExPR19XUklURVJTX05FRURfTE9DSyAzCi0KLQotLyoKLSAqIHJvdXRlcywgb3V0cHV0LCBl
dGMuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3Qgc2N0cF9yb3V0ZQlzY3RwX3JvdXRlX3Q7Ci10eXBl
ZGVmIHN0cnVjdCBzY3RwX3J0ZW50cnkJc2N0cF9ydGVudHJ5X3Q7Ci0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBzY3RwX3VzZXJzcGFjZV9ydGFsbG9jKHNjdHBfcm91dGVfdCAqcm8pCi17Ci0JaWYgKHJv
LT5yb19ydCAhPSBOVUxMKSB7Ci0JCXJvLT5yb19ydC0+cnRfcmVmY250Kys7Ci0JCXJldHVybjsK
LQl9Ci0KLQlyby0+cm9fcnQgPSAoc2N0cF9ydGVudHJ5X3QgKikgbWFsbG9jKHNpemVvZihzY3Rw
X3J0ZW50cnlfdCkpOwotCWlmIChyby0+cm9fcnQgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JLyog
aW5pdGlhbGl6ZSAqLwotCW1lbXNldChyby0+cm9fcnQsIDAsIHNpemVvZihzY3RwX3J0ZW50cnlf
dCkpOwotCXJvLT5yb19ydC0+cnRfcmVmY250ID0gMTsKLQotCS8qIHNldCBNVFUgKi8KLQkvKiBU
T0RPIHNldCB0aGlzIGJhc2VkIG9uIHRoZSByby0+cm9fZHN0LCBsb29raW5nIHVwIE1UVSB3aXRo
IHJvdXRpbmcgc29ja2V0ICovCi0jaWYgMAotCWlmICh1c2Vyc3BhY2VfcmF3cm91dGUgPT0gLTEp
IHsKLQkJdXNlcnNwYWNlX3Jhd3JvdXRlID0gc29ja2V0KEFGX1JPVVRFLCBTT0NLX1JBVywgMCk7
Ci0JCWlmICh1c2Vyc3BhY2VfcmF3cm91dGUgPT0gLTEpCi0JCQlyZXR1cm47Ci0JfQotI2VuZGlm
Ci0Jcm8tPnJvX3J0LT5ydF9ybXgucm14X210dSA9IDE1MDA7IC8qIEZJWE1FIHRlbXBvcmFyeSBz
b2x1dGlvbiAqLwotCi0JLyogVE9ETyBlbmFibGUgdGhlIGFiaWxpdHkgdG8gb2J0YWluIGludGVy
ZmFjZSBpbmRleCBvZiByb3V0ZSBmb3IKLQkgKiAgU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VU
RSBtYWNyby4KLQkgKi8KLX0KLSNkZWZpbmUgU0NUUF9SVEFMTE9DKHJvLCB2cmZfaWQsIGZpYm51
bSkgc2N0cF91c2Vyc3BhY2VfcnRhbGxvYygoc2N0cF9yb3V0ZV90ICopcm8pCi0KLS8qIGR1bW15
IHJ0ZnJlZSBuZWVkZWQgb25jZSB1c2VyX3JvdXRlLmggaXMgaW5jbHVkZWQgKi8KLXN0YXRpYyBp
bmxpbmUgdm9pZCBzY3RwX3VzZXJzcGFjZV9ydGZyZWUoc2N0cF9ydGVudHJ5X3QgKnJ0KQotewot
CWlmKHJ0ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlpZigtLXJ0LT5ydF9yZWZjbnQgPiAw
KSB7Ci0JCXJldHVybjsKLQl9Ci0JZnJlZShydCk7Ci0JcnQgPSBOVUxMOwotfQotI2RlZmluZSBy
dGZyZWUoYXJnMSkgc2N0cF91c2Vyc3BhY2VfcnRmcmVlKGFyZzEpCi0KLQotLyoqKioqKioqKioq
KioqKioqKioqKioqKiovCi0vKiAgICAgIE1UVSAgICAgICAgICAgICAgKi8KLS8qKioqKioqKioq
KioqKioqKioqKioqKioqLwotaW50IHNjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWlu
dDMyX3QgaWZfaW5kZXgsIGludCBhZik7Ci0KLSNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01f
SUZOX0lORk8oaWZuLCBpZm5faW5kZXgsIGFmKSBzY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21f
aWZuKGlmbl9pbmRleCwgYWYpCi0KLSNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUo
c2N0cF9pZmEsIHNhLCBydCkgKChydCAhPSBOVUxMKSA/IHJ0LT5ydF9ybXgucm14X210dSA6IDAp
Ci0KLSNkZWZpbmUgU0NUUF9HQVRIRVJfTVRVX0ZST01fSU5URkMoc2N0cF9pZm4pICBzY3RwX3Vz
ZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKGlmX25hbWV0b2luZGV4KCgoc3RydWN0IGlmYWRkcnMg
KikgKHNjdHBfaWZuKSktPmlmYV9uYW1lKSwgQUZfSU5FVCkKLQotI2RlZmluZSBTQ1RQX1NFVF9N
VFVfT0ZfUk9VVEUoc2EsIHJ0LCBtdHUpIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIChydCAhPSBOVUxMKSBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnQtPnJ0X3JteC5ybXhfbXR1ID0gbXR1
OyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSgw
KQotCi0vKiAoZGUtKXJlZ2lzdGVyIGludGVyZmFjZSBldmVudCBub3RpZmljYXRpb25zICovCi0j
ZGVmaW5lIFNDVFBfUkVHSVNURVJfSU5URVJGQUNFKGlmaGFuZGxlLCBhZikKLSNkZWZpbmUgU0NU
UF9ERVJFR0lTVEVSX0lOVEVSRkFDRShpZmhhbmRsZSwgYWYpCi0KLQotLyoqKioqKioqKioqKioq
KioqKioqKioqKiovCi0vKiBUaGVzZSBhcmUgZm9yIGxvZ2dpbmcgKi8KLS8qKioqKioqKioqKioq
KioqKioqKioqKioqLwotLyogcmV0dXJuIHRoZSBiYXNlIGV4dCBkYXRhIHBvaW50ZXIgKi8KLSNk
ZWZpbmUgU0NUUF9CVUZfRVhURU5EX0JBU0UobSkgKG0tPm1fZXh0LmV4dF9idWYpCi0gLyogcmV0
dXJuIHRoZSByZWZjbnQgb2YgdGhlIGRhdGEgcG9pbnRlciAqLwotI2RlZmluZSBTQ1RQX0JVRl9F
WFRFTkRfUkVGQ05UKG0pICgqbS0+bV9leHQucmVmX2NudCkKLS8qIHJldHVybiBhbnkgYnVmZmVy
IHJlbGF0ZWQgZmxhZ3MsIHRoaXMgaXMKLSAqIHVzZWQgYmV5b25kIGxvZ2dpbmcgZm9yIGFwcGxl
IG9ubHkuCi0gKi8KLSNkZWZpbmUgU0NUUF9CVUZfR0VUX0ZMQUdTKG0pIChtLT5tX2ZsYWdzKQot
Ci0vKiBGb3IgQlNEIHRoaXMganVzdCBhY2Nlc3NlcyB0aGUgTV9QS1RIRFIgbGVuZ3RoCi0gKiBz
byBpdCBvcGVyYXRlcyBvbiBhbiBtYnVmIHdpdGggaGRyIGZsYWcuIE90aGVyCi0gKiBPL1MncyBt
YXkgaGF2ZSBzZXBlcmF0ZSBwYWNrZXQgaGVhZGVyIGFuZCBtYnVmCi0gKiBjaGFpbiBwb2ludGVy
cy4uIHRodXMgdGhlIG1hY3JvLgotICovCi0jZGVmaW5lIFNDVFBfSEVBREVSX1RPX0NIQUlOKG0p
IChtKQotI2RlZmluZSBTQ1RQX0RFVEFDSF9IRUFERVJfRlJPTV9DSEFJTihtKQotI2RlZmluZSBT
Q1RQX0hFQURFUl9MRU4obSkgKChtKS0+bV9wa3RoZHIubGVuKQotI2RlZmluZSBTQ1RQX0dFVF9I
RUFERVJfRk9SX09VVFBVVChvX3BhaykgMAotI2RlZmluZSBTQ1RQX1JFTEVBU0VfSEVBREVSKG0p
Ci0jZGVmaW5lIFNDVFBfUkVMRUFTRV9QS1QobSkJc2N0cF9tX2ZyZWVtKG0pCi0KLSNkZWZpbmUg
U0NUUF9HRVRfUEtUX1ZSRklEKG0sIHZyZl9pZCkgICgodnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZS
RklEKSAhPSBTQ1RQX0RFRkFVTFRfVlJGSUQpCi0KLQotCi0vKiBBdHRhY2ggdGhlIGNoYWluIG9m
IGRhdGEgaW50byB0aGUgc2VuZGFibGUgcGFja2V0LiAqLwotI2RlZmluZSBTQ1RQX0FUVEFDSF9D
SEFJTihwYWssIG0sIHBhY2tldF9sZW5ndGgpIGRvIHsgXAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWsgPSBtOyBcCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhay0+bV9wa3RoZHIubGVuID0gcGFj
a2V0X2xlbmd0aDsgXAotICAgICAgICAgICAgICAgICAgICAgICAgICB9IHdoaWxlKDApCi0KLS8q
IE90aGVyIG1fcGt0aGRyIHR5cGUgdGhpbmdzICovCi0vKiBGSVhNRSBuZWVkIHJlYWwgZGVmaW5p
dGlvbnMgKi8KLSNkZWZpbmUgU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LCBtKSAwCi0vKiBPT1RC
IG9ubHkgI2RlZmluZSBTQ1RQX0lTX0lUX0JST0FEQ0FTVChkc3QsIG0pICgobS0+bV9mbGFncyAm
IE1fUEtUSERSKSA/IGluX2Jyb2FkY2FzdChkc3QsIG0tPm1fcGt0aGRyLnJjdmlmKSA6IDApICBC
U0QgZGVmICovCi0jZGVmaW5lIFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkgMAotLyogT09UQiBPTkxZ
ICNkZWZpbmUgU0NUUF9JU19JVF9MT09QQkFDSyhtKSAoKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikg
JiYgKChtLT5tX3BrdGhkci5yY3ZpZiA9PSBOVUxMKSB8fCAobS0+bV9wa3RoZHIucmN2aWYtPmlm
X3R5cGUgPT0gSUZUX0xPT1ApKSkgIEJTRCBkZWYgKi8KLQotCi0vKiBUaGlzIGNvbnZlcnRzIGFu
eSBpbnB1dCBwYWNrZXQgaGVhZGVyCi0gKiBpbnRvIHRoZSBjaGFpbiBvZiBkYXRhIGhvbGRlcnMs
IGZvciBCU0QKLSAqIGl0cyBhIE5PUC4KLSAqLwotCi0vKiBnZXQgdGhlIHY2IGhvcCBsaW1pdCAq
LwotI2RlZmluZSBTQ1RQX0dFVF9ITElNKGlucCwgcm8pIDEyOCAvKiBBcyBkb25lIGZvciBfX1dp
bmRvd3NfXyAqLwotI2RlZmluZSBJUHY2X0hPUF9MSU1JVCAxMjgKLQotLyogaXMgdGhlIGVuZHBv
aW50IHY2b25seT8gKi8KLSNkZWZpbmUgU0NUUF9JUFY2X1Y2T05MWShpbnApCSgoKHN0cnVjdCBp
bnBjYiAqKWlucCktPmlucF9mbGFncyAmIElONlBfSVBWNl9WNk9OTFkpCi0vKiBpcyB0aGUgc29j
a2V0IG5vbi1ibG9ja2luZz8gKi8KLSNkZWZpbmUgU0NUUF9TT19JU19OQklPKHNvKQkoKHNvKS0+
c29fc3RhdGUgJiBTU19OQklPKQotI2RlZmluZSBTQ1RQX1NFVF9TT19OQklPKHNvKQkoKHNvKS0+
c29fc3RhdGUgfD0gU1NfTkJJTykKLSNkZWZpbmUgU0NUUF9DTEVBUl9TT19OQklPKHNvKQkoKHNv
KS0+c29fc3RhdGUgJj0gflNTX05CSU8pCi0vKiBnZXQgdGhlIHNvY2tldCB0eXBlICovCi0jZGVm
aW5lIFNDVFBfU09fVFlQRShzbykJKChzbyktPnNvX3R5cGUpCi0KLS8qIHJlc2VydmUgc2Igc3Bh
Y2UgZm9yIGEgc29ja2V0ICovCi0jZGVmaW5lIFNDVFBfU09SRVNFUlZFKHNvLCBzZW5kLCByZWN2
KQlzb3Jlc2VydmUoc28sIHNlbmQsIHJlY3YpCi0KLS8qIHdha2V1cCBhIHNvY2tldCAqLwotI2Rl
ZmluZSBTQ1RQX1NPV0FLRVVQKHNvKQl3YWtldXAoJihzbyktPnNvX3RpbWVvLCBzbykKLS8qIGNs
ZWFyIHRoZSBzb2NrZXQgYnVmZmVyIHN0YXRlICovCi0jZGVmaW5lIFNDVFBfU0JfQ0xFQVIoc2Ip
CVwKLQkoc2IpLnNiX2NjID0gMDsJCVwKLQkoc2IpLnNiX21iID0gTlVMTDsJXAotCShzYikuc2Jf
bWJjbnQgPSAwOwotCi0jZGVmaW5lIFNDVFBfU0JfTElNSVRfUkNWKHNvKSBzby0+c29fcmN2LnNi
X2hpd2F0Ci0jZGVmaW5lIFNDVFBfU0JfTElNSVRfU05EKHNvKSBzby0+c29fc25kLnNiX2hpd2F0
Ci0KLS8qIEZ1dHVyZSB6ZXJvIGNvcHkgd2FrZXVwL3NlbmQgIGZ1bmN0aW9uICovCi0jZGVmaW5l
IFNDVFBfWkVST19DT1BZX0VWRU5UKGlucCwgc28pCi0vKiBUaGlzIGlzIHJlLXB1bHNlIG91cnNl
bHZlcyBmb3Igc2VuZGJ1ZiAqLwotI2RlZmluZSBTQ1RQX1pFUk9fQ09QWV9TRU5EUV9FVkVOVChp
bnAsIHNvKQotCi0jZGVmaW5lIFNDVFBfUkVBRF9SQU5ET00oYnVmLCBsZW4pCXJlYWRfcmFuZG9t
KGJ1ZiwgbGVuKQotCi0jZGVmaW5lIFNDVFBfU0hBMV9DVFgJCXN0cnVjdCBzY3RwX3NoYTFfY29u
dGV4dAotI2RlZmluZSBTQ1RQX1NIQTFfSU5JVAkJc2N0cF9zaGExX2luaXQKLSNkZWZpbmUgU0NU
UF9TSEExX1VQREFURQlzY3RwX3NoYTFfdXBkYXRlCi0jZGVmaW5lIFNDVFBfU0hBMV9GSU5BTCh4
LHkpCXNjdHBfc2hhMV9maW5hbCgodW5zaWduZWQgY2hhciAqKXgsIHkpCi0KLS8qIHN0YXJ0IE9P
VEIgb25seSBzdHVmZiAqLwotLyogVE9ETyBJRlRfTE9PUCBpcyBpbiBuZXQvaWZfdHlwZXMuaCBv
biBMaW51eCAqLwotI2RlZmluZSBJRlRfTE9PUCAweDE4Ci0KLS8qIHNjdHBfcGNiLmggKi8KLQot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU0hVVF9SRCAxCi0j
ZGVmaW5lIFNIVVRfV1IgMgotI2RlZmluZSBTSFVUX1JEV1IgMwotI2VuZGlmCi0jZGVmaW5lIFBS
VV9GTFVTSF9SRCBTSFVUX1JECi0jZGVmaW5lIFBSVV9GTFVTSF9XUiBTSFVUX1dSCi0jZGVmaW5l
IFBSVV9GTFVTSF9SRFdSIFNIVVRfUkRXUgotCi0vKiBuZXRpbmV0L2lwX3Zhci5oIGRlZmludGlv
bnMgYXJlIGJlaGluZCBhbiBpZiBkZWZpbmVkIGZvciBfS0VSTkVMIG9uIEZyZWVCU0QgKi8KLSNk
ZWZpbmUJSVBfUkFXT1VUUFVUCQkweDIKLQotCi0vKiBlbmQgT09UQiBvbmx5IHN0dWZmICovCi0K
LSNkZWZpbmUgQUZfQ09OTiAxMjMKLXN0cnVjdCBzb2NrYWRkcl9jb25uIHsKLSNpZmRlZiBIQVZF
X1NDT05OX0xFTgotCXVpbnQ4X3Qgc2Nvbm5fbGVuOwotCXVpbnQ4X3Qgc2Nvbm5fZmFtaWx5Owot
I2Vsc2UKLQl1aW50MTZfdCBzY29ubl9mYW1pbHk7Ci0jZW5kaWYKLQl1aW50MTZfdCBzY29ubl9w
b3J0OwotCXZvaWQgKnNjb25uX2FkZHI7Ci19OwotCi10eXBlZGVmIHZvaWQgKigqc3RhcnRfcm91
dGluZV90KSh2b2lkICopOwotCi1leHRlcm4gaW50Ci1zY3RwX3VzZXJzcGFjZV90aHJlYWRfY3Jl
YXRlKHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0
aW5lKTsKLQotdm9pZAotc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoY29uc3QgY2hhciAq
bmFtZSk7Ci0KLS8qCi0gKiBTQ1RQIHByb3RvY29sIHNwZWNpZmljIG1idWYgZmxhZ3MuCi0gKi8K
LSNkZWZpbmUJTV9OT1RJRklDQVRJT04JCU1fUFJPVE81CS8qIFNDVFAgbm90aWZpY2F0aW9uICov
Ci0KLS8qCi0gKiBJUCBvdXRwdXQgcm91dGluZXMKLSAqLwotCi0vKiBEZWZpbmluZyBTQ1RQX0lQ
X0lEIG1hY3JvLgotICAgSW4gbmV0aW5ldC9pcF9vdXRwdXQuYywgd2UgaGF2ZSB1X3Nob3J0IGlw
X2lkOwotICAgSW4gbmV0aW5ldC9pcF92YXIuaCwgd2UgaGF2ZSBleHRlcm4gdV9zaG9ydAlpcF9p
ZDsgKGVuY2xvc2VkIHdpdGhpbiBfS0VSTkVMXykKLSAgIFNlZSBzdGF0aWMgX19pbmxpbmUgdWlu
dDE2X3QgaXBfbmV3aWQodm9pZCkgaW4gbmV0aW5ldC9pcF92YXIuaAotICovCi0jZGVmaW5lIFND
VFBfSVBfSUQoaW5wKSAoaXBfaWQpCi0KLS8qIG5lZWQgc2N0cGhkciB0byBnZXQgcG9ydCBpbiBT
Q1RQX0lQX09VVFBVVC4gc2N0cGhkciBkZWZpbmVkIGluIHNjdHAuaCAgKi8KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHAuaD4KLWV4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwX291dHB1dChpbnQg
KnJlc3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjdHBfcm91dGVfdCAqcm8sIHZvaWQgKnN0Y2IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKTsKLQotI2RlZmluZSBTQ1RQX0lQ
X09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgc3RjYiwgdnJmX2lkKSBzY3RwX3VzZXJzcGFjZV9p
cF9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOwotCi0jaWYgZGVmaW5l
ZChJTkVUNikKLWV4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQoaW50ICpyZXN1
bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0Y2IsCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCk7Ci0jZGVmaW5lIFNDVFBfSVA2
X09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgaWZwLCBzdGNiLCB2cmZfaWQpIHNjdHBfdXNlcnNw
YWNlX2lwNl9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQpOwotI2VuZGlm
Ci0KLQotCi0jaWYgMAotI2RlZmluZSBTQ1RQX0lQNl9PVVRQVVQocmVzdWx0LCBvX3Bhaywgcm8s
IGlmcCwgc3RjYiwgdnJmX2lkKSBcCi17IFwKLQlpZiAoc3RjYiAmJiBzdGNiLT5zY3RwX2VwKSBc
Ci0JCXJlc3VsdCA9IGlwNl9vdXRwdXQob19wYWssIFwKLQkJCQkgICAgKChzdHJ1Y3QgaW42cGNi
ICopKHN0Y2ItPnNjdHBfZXApKS0+aW42cF9vdXRwdXRvcHRzLCBcCi0JCQkJICAgIChybyksIDAs
IDAsIGlmcCwgTlVMTCk7IFwKLQllbHNlIFwKLQkJcmVzdWx0ID0gaXA2X291dHB1dChvX3Bhaywg
TlVMTCwgKHJvKSwgMCwgMCwgaWZwLCBOVUxMKTsgXAotfQotI2VuZGlmCi0KLXN0cnVjdCBtYnVm
ICoKLXNjdHBfZ2V0X21idWZfZm9yX21zZyh1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkLCBpbnQg
d2FudF9oZWFkZXIsIGludCBob3csIGludCBhbGxvbmVidWYsIGludCB0eXBlKTsKLQotCi0vKiB3
aXRoIHRoZSBjdXJyZW50IGluY2x1ZGVkIGZpbGVzLCB0aGlzIGlzIGRlZmluZWQgaW4gTGludXgg
YnV0Ci0gKiAgaW4gRnJlZUJTRCwgaXQgaXMgYmVoaW5kIGEgX0tFUk5FTCBpbiBzeXMvc29ja2V0
LmggLi4uCi0gKi8KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RyYWdvbkZseSkgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09w
ZW5CU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLS8qIHN0b2xlbiBmcm9tIC91
c3IvaW5jbHVkZS9zeXMvc29ja2V0LmggKi8KLSNkZWZpbmUgQ01TR19BTElHTihuKSAgIF9BTElH
TihuKQotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCi0jZGVmaW5lIENNU0df
QUxJR04obikgICAoKChuKSArIF9fQUxJR05CWVRFUykgJiB+X19BTElHTkJZVEVTKQotI2VsaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCi0jaWYgIWRlZmluZWQoX19EQVJXSU5fQUxJ
R05CWVRFUykKLSNkZWZpbmUJX19EQVJXSU5fQUxJR05CWVRFUwkoc2l6ZW9mKF9fZGFyd2luX3Np
emVfdCkgLSAxKQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTikKLSNkZWZp
bmUJX19EQVJXSU5fQUxJR04ocCkJKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJf
dCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVTKSAmfiBfX0RBUldJTl9BTElHTkJZVEVTKQotI2Vu
ZGlmCi0KLSNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTkJZVEVTMzIpCi0jZGVmaW5lIF9fREFS
V0lOX0FMSUdOQllURVMzMiAgICAgKHNpemVvZihfX3VpbnQzMl90KSAtIDEpCi0jZW5kaWYKLQot
I2lmICFkZWZpbmVkKF9fREFSV0lOX0FMSUdOMzIpCi0jZGVmaW5lIF9fREFSV0lOX0FMSUdOMzIo
cCkgICAgICAgKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RB
UldJTl9BTElHTkJZVEVTMzIpICZ+IF9fREFSV0lOX0FMSUdOQllURVMzMikKLSNlbmRpZgotI2Rl
ZmluZSBDTVNHX0FMSUdOKG4pICAgX19EQVJXSU5fQUxJR04zMihuKQotI2VuZGlmCi0jZGVmaW5l
IElfQU1fSEVSRSBcCi0gICAgICAgICAgICAgICAgZG8geyBcCi0JCQlTQ1RQX1BSSU5URigiJXM6
JWQgYXQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyAsIF9fZnVuY19fKTsgXAotCQl9IHdoaWxl
ICgwKQotCi0jaWZuZGVmIHRpbWV2YWxzdWIKLSNkZWZpbmUgdGltZXZhbHN1Yih0cDEsIHRwMikg
ICAgICAgICAgICAgICAgICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAotCQkodHAxKS0+dHZfc2VjIC09ICh0cDIpLT50dl9zZWM7ICAgIFwKLQkJ
KHRwMSktPnR2X3VzZWMgLT0gKHRwMiktPnR2X3VzZWM7ICBcCi0JCWlmICgodHAxKS0+dHZfdXNl
YyA8IDApIHsgICAgICAgICAgXAotCQkJKHRwMSktPnR2X3NlYy0tOyAgICAgICAgICAgXAotCQkJ
KHRwMSktPnR2X3VzZWMgKz0gMTAwMDAwMDsgXAotCQl9ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLQl9IHdoaWxlICgwKQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0xpbnV4KQotI2lmICFkZWZpbmVkKFRBSUxRX0ZPUkVBQ0hfU0FGRSkKLSNkZWZpbmUg
VEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpICAgICAgICAgICAgIFwK
LSAgICAgICAgIGZvciAoKHZhcikgPSAoKGhlYWQpLT50cWhfZmlyc3QpOyAgICAgICAgICAgICAg
ICAgICAgIFwKLSAgICAgICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IFRBSUxRX05FWFQoKHZh
ciksIGZpZWxkKSwgMSk7IFwKLSAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCi0jZW5kaWYK
LSNpZiAhZGVmaW5lZChMSVNUX0ZPUkVBQ0hfU0FGRSkKLSNkZWZpbmUgTElTVF9GT1JFQUNIX1NB
RkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikgICAgICAgICAgICAgIFwKLSAgICAgICAgIGZvciAo
KHZhcikgPSAoKGhlYWQpLT5saF9maXJzdCk7ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg
ICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IExJU1RfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsg
IFwKLSAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCi0jZW5kaWYKLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQotI2RlZmluZSBUQUlMUV9GT1JFQUNIX1NB
RkUgVEFJTFFfRk9SRUFDSF9NVVRBQkxFCi0jZGVmaW5lIExJU1RfRk9SRUFDSF9TQUZFIExJU1Rf
Rk9SRUFDSF9NVVRBQkxFCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFD
bCkKLSNkZWZpbmUJdGltZXJjbXAodHZwLCB1dnAsIGNtcCkJCQkJCQlcCi0JKCgodHZwKS0+dHZf
c2VjID09ICh1dnApLT50dl9zZWMpID8JCQkJXAotCSAgICAoKHR2cCktPnR2X3VzZWMgY21wICh1
dnApLT50dl91c2VjKSA6CQkJXAotCSAgICAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3Nl
YykpCi0jZW5kaWYKLQotI2RlZmluZSBTQ1RQX0lTX0xJU1RFTklORyhpbnApICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQUNDRVBUSU5HKSAhPSAwKQotCi0jZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9vdXRwdXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjY0NmNhM2EzYzYy
ZWVkYTMyM2UyNGQzNGQxMjk4Mjc5NzUxYjcyMi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKysrIC9k
ZXYvbnVsbApAQCAtMSwxNTAxMCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0y
MDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6
Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1l
IG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENP
UFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8
c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9v
dXRwdXQuYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRpZgot
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYgX19GcmVlQlNEX18KLSNpbmNs
dWRlIDxzeXMvcHJvYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+Ci0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1l
ci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfaW5kYXRhLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMy
Lmg+Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKLSNkZWZpbmUgX19GQVZPUl9C
U0QgICAgLyogKG9uIFVidW50dSBhdCBsZWFzdCkgZW5hYmxlcyBVRFAgaGVhZGVyIGZpZWxkIG5h
bWVzIGxpa2UgQlNEIGluIFJGQyA3NjggKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2lu
Y2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAwMDAwCi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxt
YWNoaW5lL2luX2Nrc3VtLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pICYm
IGRlZmluZWQoSU5FVDYpCi0jaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+Ci0jZW5kaWYK
LQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmluZSBBUFBMRV9GSUxFX05PIDMKLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgIShkZWZpbmVkKEFQUExFX0xFT1BBUkQp
IHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpKQotI2RlZmluZSBTQ1RQX01BWF9MSU5LSERS
IDE2Ci0jZW5kaWYKLSNlbmRpZgotCi0jZGVmaW5lIFNDVFBfTUFYX0dBUFNfSU5BUlJBWSA0Ci1z
dHJ1Y3Qgc2Fja190cmFjayB7Ci0JdWludDhfdCByaWdodF9lZGdlOwkvKiBtZXJnYWJsZSBvbiB0
aGUgcmlnaHQgZWRnZSAqLwotCXVpbnQ4X3QgbGVmdF9lZGdlOwkvKiBtZXJnYWJsZSBvbiB0aGUg
bGVmdCBlZGdlICovCi0JdWludDhfdCBudW1fZW50cmllczsKLQl1aW50OF90IHNwYXJlOwotCXN0
cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgZ2Fwc1tTQ1RQX01BWF9HQVBTX0lOQVJSQVldOwotfTsK
LQotY29uc3Qgc3RydWN0IHNhY2tfdHJhY2sgc2Fja19hcnJheVsyNTZdID0gewotCXswLCAwLCAw
LCAwLAkJLyogMHgwMCAqLwotCQl7ezAsIDB9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgwMSAqLwotCQl7ezAsIDB9LAotCQl7
MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyog
MHgwMiAqLwotCQl7ezEsIDF9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgwMyAqLwotCQl7ezAsIDF9LAotCQl7MCwgMH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwNCAqLwot
CQl7ezIsIDJ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAyLCAwLAkJLyogMHgwNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwNiAqLwotCQl7ezEsIDJ9
LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAw
LAkJLyogMHgwNyAqLwotCQl7ezAsIDJ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgwOCAqLwotCQl7ezMsIDN9LAotCQl7MCwg
MH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgw
OSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAyLCAwLAkJLyogMHgwYSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgwYiAqLwotCQl7
ezAsIDF9LAotCQl7MywgM30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAxLCAwLAkJLyogMHgwYyAqLwotCQl7ezIsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgwZCAqLwotCQl7ezAsIDB9LAot
CQl7MiwgM30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJ
LyogMHgwZSAqLwotCQl7ezEsIDN9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgwZiAqLwotCQl7ezAsIDN9LAotCQl7MCwgMH0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgxMCAq
LwotCQl7ezQsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAyLCAwLAkJLyogMHgxMSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgxMiAqLwotCQl7ezEs
IDF9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAy
LCAwLAkJLyogMHgxMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgxNCAqLwotCQl7ezIsIDJ9LAotCQl7
NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyog
MHgxNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgxNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxNyAqLwot
CQl7ezAsIDJ9LAotCQl7NCwgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAxLCAwLAkJLyogMHgxOCAqLwotCQl7ezMsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxOSAqLwotCQl7ezAsIDB9
LAotCQl7MywgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAw
LAkJLyogMHgxYSAqLwotCQl7ezEsIDF9LAotCQl7MywgNH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxYiAqLwotCQl7ezAsIDF9LAotCQl7Mywg
NH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgx
YyAqLwotCQl7ezIsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAyLCAwLAkJLyogMHgxZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgxZSAqLwotCQl7
ezEsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAxLCAwLAkJLyogMHgxZiAqLwotCQl7ezAsIDR9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgyMCAqLwotCQl7ezUsIDV9LAot
CQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJ
LyogMHgyMSAqLwotCQl7ezAsIDB9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNX0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgyMyAq
LwotCQl7ezAsIDF9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAyLCAwLAkJLyogMHgyNCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNX0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgyNSAqLwotCQl7ezAs
IDB9LAotCQl7MiwgMn0sCi0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAy
LCAwLAkJLyogMHgyNiAqLwotCQl7ezEsIDJ9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgyNyAqLwotCQl7ezAsIDJ9LAotCQl7
NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyog
MHgyOCAqLwotCQl7ezMsIDN9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgyOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0J
CXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHgyYSAqLwot
CQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAzLCAwLAkJLyogMHgyYiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyYyAqLwotCQl7ezIsIDN9
LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAw
LAkJLyogMHgyZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA1fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgyZSAqLwotCQl7ezEsIDN9LAotCQl7NSwg
NX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgy
ZiAqLwotCQl7ezAsIDN9LAotCQl7NSwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAxLCAwLAkJLyogMHgzMCAqLwotCQl7ezQsIDV9LAotCQl7MCwgMH0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzMSAqLwotCQl7
ezAsIDB9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAyLCAwLAkJLyogMHgzMiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzMyAqLwotCQl7ezAsIDF9LAot
CQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJ
LyogMHgzNCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHgzNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0s
Ci0JCXs0LCA1fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgzNiAq
LwotCQl7ezEsIDJ9LAotCQl7NCwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAyLCAwLAkJLyogMHgzNyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNX0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgzOCAqLwotCQl7ezMs
IDV9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAy
LCAwLAkJLyogMHgzOSAqLwotCQl7ezAsIDB9LAotCQl7MywgNX0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHgzYSAqLwotCQl7ezEsIDF9LAotCQl7
MywgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyog
MHgzYiAqLwotCQl7ezAsIDF9LAotCQl7MywgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHgzYyAqLwotCQl7ezIsIDV9LAotCQl7MCwgMH0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHgzZCAqLwot
CQl7ezAsIDB9LAotCQl7MiwgNX0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAxLCAwLAkJLyogMHgzZSAqLwotCQl7ezEsIDV9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHgzZiAqLwotCQl7ezAsIDV9
LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAw
LAkJLyogMHg0MCAqLwotCQl7ezYsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg0MSAqLwotCQl7ezAsIDB9LAotCQl7Niwg
Nn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0
MiAqLwotCQl7ezEsIDF9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAyLCAwLAkJLyogMHg0MyAqLwotCQl7ezAsIDF9LAotCQl7NiwgNn0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0NCAqLwotCQl7
ezIsIDJ9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAzLCAwLAkJLyogMHg0NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs2LCA2fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0NiAqLwotCQl7ezEsIDJ9LAot
CQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJ
LyogMHg0NyAqLwotCQl7ezAsIDJ9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg0OCAqLwotCQl7ezMsIDN9LAotCQl7NiwgNn0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0OSAq
LwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAzLCAwLAkJLyogMHg0YSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs2LCA2
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0YiAqLwotCQl7ezAs
IDF9LAotCQl7MywgM30sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAy
LCAwLAkJLyogMHg0YyAqLwotCQl7ezIsIDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg0ZCAqLwotCQl7ezAsIDB9LAotCQl7
MiwgM30sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyog
MHg0ZSAqLwotCQl7ezEsIDN9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg0ZiAqLwotCQl7ezAsIDN9LAotCQl7NiwgNn0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1MCAqLwot
CQl7ezQsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAzLCAwLAkJLyogMHg1MSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg1MiAqLwotCQl7ezEsIDF9
LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAw
LAkJLyogMHg1MyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg1NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwg
NH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCA0LCAwLAkJLyogMHg1
NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezYsIDZ9Ci0JCX0KLQl9
LAotCXswLCAwLCAzLCAwLAkJLyogMHg1NiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs2
LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1NyAqLwotCQl7
ezAsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAyLCAwLAkJLyogMHg1OCAqLwotCQl7ezMsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1OSAqLwotCQl7ezAsIDB9LAot
CQl7MywgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJ
LyogMHg1YSAqLwotCQl7ezEsIDF9LAotCQl7MywgNH0sCi0JCXs2LCA2fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg1YiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0s
Ci0JCXs2LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1YyAq
LwotCQl7ezIsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAwLCAzLCAwLAkJLyogMHg1ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs2LCA2
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg1ZSAqLwotCQl7ezEs
IDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAy
LCAwLAkJLyogMHg1ZiAqLwotCQl7ezAsIDR9LAotCQl7NiwgNn0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHg2MCAqLwotCQl7ezUsIDZ9LAotCQl7
MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyog
MHg2MSAqLwotCQl7ezAsIDB9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2MiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNn0sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2MyAqLwot
CQl7ezAsIDF9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAwLCAyLCAwLAkJLyogMHg2NCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg2NSAqLwotCQl7ezAsIDB9
LAotCQl7MiwgMn0sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAw
LAkJLyogMHg2NiAqLwotCQl7ezEsIDJ9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2NyAqLwotCQl7ezAsIDJ9LAotCQl7NSwg
Nn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2
OCAqLwotCQl7ezMsIDN9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAwLCAzLCAwLAkJLyogMHg2OSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1
LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAzLCAwLAkJLyogMHg2YSAqLwotCQl7
ezEsIDF9LAotCQl7MywgM30sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAw
LCAzLCAwLAkJLyogMHg2YiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA2fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2YyAqLwotCQl7ezIsIDN9LAot
CQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAzLCAwLAkJ
LyogMHg2ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA2fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg2ZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgNn0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg2ZiAq
LwotCQl7ezAsIDN9LAotCQl7NSwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAwLCAxLCAwLAkJLyogMHg3MCAqLwotCQl7ezQsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3MSAqLwotCQl7ezAs
IDB9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAy
LCAwLAkJLyogMHg3MiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3MyAqLwotCQl7ezAsIDF9LAotCQl7
NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyog
MHg3NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAwLCAzLCAwLAkJLyogMHg3NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0J
CXs0LCA2fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg3NiAqLwot
CQl7ezEsIDJ9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAwLCAyLCAwLAkJLyogMHg3NyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNn0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAwLCAxLCAwLAkJLyogMHg3OCAqLwotCQl7ezMsIDZ9
LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAw
LAkJLyogMHg3OSAqLwotCQl7ezAsIDB9LAotCQl7MywgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAwLCAyLCAwLAkJLyogMHg3YSAqLwotCQl7ezEsIDF9LAotCQl7Mywg
Nn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3
YiAqLwotCQl7ezAsIDF9LAotCQl7MywgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAwLCAxLCAwLAkJLyogMHg3YyAqLwotCQl7ezIsIDZ9LAotCQl7MCwgMH0sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAyLCAwLAkJLyogMHg3ZCAqLwotCQl7
ezAsIDB9LAotCQl7MiwgNn0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAw
LCAxLCAwLAkJLyogMHg3ZSAqLwotCQl7ezEsIDZ9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAwLCAxLCAwLAkJLyogMHg3ZiAqLwotCQl7ezAsIDZ9LAot
CQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJ
LyogMHg4MCAqLwotCQl7ezcsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHg4MSAqLwotCQl7ezAsIDB9LAotCQl7NywgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4MiAq
LwotCQl7ezEsIDF9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAyLCAwLAkJLyogMHg4MyAqLwotCQl7ezAsIDF9LAotCQl7NywgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4NCAqLwotCQl7ezIs
IDJ9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAz
LCAwLAkJLyogMHg4NSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs3LCA3fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4NiAqLwotCQl7ezEsIDJ9LAotCQl7
NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyog
MHg4NyAqLwotCQl7ezAsIDJ9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4OCAqLwotCQl7ezMsIDN9LAotCQl7NywgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4OSAqLwot
CQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAzLCAwLAkJLyogMHg4YSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs3LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4YiAqLwotCQl7ezAsIDF9
LAotCQl7MywgM30sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAw
LAkJLyogMHg4YyAqLwotCQl7ezIsIDN9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg4ZCAqLwotCQl7ezAsIDB9LAotCQl7Miwg
M30sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg4
ZSAqLwotCQl7ezEsIDN9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCAyLCAwLAkJLyogMHg4ZiAqLwotCQl7ezAsIDN9LAotCQl7NywgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5MCAqLwotCQl7
ezQsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAzLCAwLAkJLyogMHg5MSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHg5MiAqLwotCQl7ezEsIDF9LAot
CQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJ
LyogMHg5MyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHg5NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0s
Ci0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHg5NSAq
LwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAot
CXswLCAxLCAzLCAwLAkJLyogMHg5NiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs3LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5NyAqLwotCQl7ezAs
IDJ9LAotCQl7NCwgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAy
LCAwLAkJLyogMHg5OCAqLwotCQl7ezMsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5OSAqLwotCQl7ezAsIDB9LAotCQl7
MywgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyog
MHg5YSAqLwotCQl7ezEsIDF9LAotCQl7MywgNH0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHg5YiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0J
CXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5YyAqLwot
CQl7ezIsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAzLCAwLAkJLyogMHg5ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs3LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHg5ZSAqLwotCQl7ezEsIDR9
LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAw
LAkJLyogMHg5ZiAqLwotCQl7ezAsIDR9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhhMCAqLwotCQl7ezUsIDV9LAotCQl7Nywg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhh
MSAqLwotCQl7ezAsIDB9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAzLCAwLAkJLyogMHhhMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgNX0sCi0JCXs3
LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhMyAqLwotCQl7
ezAsIDF9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAzLCAwLAkJLyogMHhhNCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHhhNSAqLwotCQl7ezAsIDB9LAot
CQl7MiwgMn0sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJ
LyogMHhhNiAqLwotCQl7ezEsIDJ9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhNyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgNX0s
Ci0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhhOCAq
LwotCQl7ezMsIDN9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCA0LCAwLAkJLyogMHhhOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA1
fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCA0LCAwLAkJLyogMHhhYSAqLwotCQl7ezEs
IDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXsxLCAxLCA0
LCAwLAkJLyogMHhhYiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA1fSwKLQkJezcs
IDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhhYyAqLwotCQl7ezIsIDN9LAotCQl7
NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyog
MHhhZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA1fSwKLQkJezcsIDd9Ci0JCX0K
LQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhhZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgNX0sCi0J
CXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhhZiAqLwot
CQl7ezAsIDN9LAotCQl7NSwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAyLCAwLAkJLyogMHhiMCAqLwotCQl7ezQsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiMSAqLwotCQl7ezAsIDB9
LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAw
LAkJLyogMHhiMiAqLwotCQl7ezEsIDF9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiMyAqLwotCQl7ezAsIDF9LAotCQl7NCwg
NX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhi
NCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCA0LCAwLAkJLyogMHhiNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0
LCA1fSwKLQkJezcsIDd9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhiNiAqLwotCQl7
ezEsIDJ9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAzLCAwLAkJLyogMHhiNyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgNX0sCi0JCXs3LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhiOCAqLwotCQl7ezMsIDV9LAot
CQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJ
LyogMHhiOSAqLwotCQl7ezAsIDB9LAotCQl7MywgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhiYSAqLwotCQl7ezEsIDF9LAotCQl7MywgNX0s
Ci0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiYiAq
LwotCQl7ezAsIDF9LAotCQl7MywgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAxLCAyLCAwLAkJLyogMHhiYyAqLwotCQl7ezIsIDV9LAotCQl7NywgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhiZCAqLwotCQl7ezAs
IDB9LAotCQl7MiwgNX0sCi0JCXs3LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAy
LCAwLAkJLyogMHhiZSAqLwotCQl7ezEsIDV9LAotCQl7NywgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhiZiAqLwotCQl7ezAsIDV9LAotCQl7
NywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyog
MHhjMCAqLwotCQl7ezYsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhjMSAqLwotCQl7ezAsIDB9LAotCQl7NiwgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjMiAqLwot
CQl7ezEsIDF9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAyLCAwLAkJLyogMHhjMyAqLwotCQl7ezAsIDF9LAotCQl7NiwgN30sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjNCAqLwotCQl7ezIsIDJ9
LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAw
LAkJLyogMHhjNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs2LCA3fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjNiAqLwotCQl7ezEsIDJ9LAotCQl7Niwg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhj
NyAqLwotCQl7ezAsIDJ9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAyLCAwLAkJLyogMHhjOCAqLwotCQl7ezMsIDN9LAotCQl7NiwgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjOSAqLwotCQl7
ezAsIDB9LAotCQl7MywgM30sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAzLCAwLAkJLyogMHhjYSAqLwotCQl7ezEsIDF9LAotCQl7MywgM30sCi0JCXs2LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjYiAqLwotCQl7ezAsIDF9LAot
CQl7MywgM30sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJ
LyogMHhjYyAqLwotCQl7ezIsIDN9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhjZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30s
Ci0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhjZSAq
LwotCQl7ezEsIDN9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAyLCAwLAkJLyogMHhjZiAqLwotCQl7ezAsIDN9LAotCQl7NiwgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkMCAqLwotCQl7ezQs
IDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAz
LCAwLAkJLyogMHhkMSAqLwotCQl7ezAsIDB9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhkMiAqLwotCQl7ezEsIDF9LAotCQl7
NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyog
MHhkMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhkNCAqLwotCQl7ezIsIDJ9LAotCQl7NCwgNH0sCi0J
CXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCA0LCAwLAkJLyogMHhkNSAqLwot
CQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA0fSwKLQkJezYsIDd9Ci0JCX0KLQl9LAotCXsw
LCAxLCAzLCAwLAkJLyogMHhkNiAqLwotCQl7ezEsIDJ9LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkNyAqLwotCQl7ezAsIDJ9
LAotCQl7NCwgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAw
LAkJLyogMHhkOCAqLwotCQl7ezMsIDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkOSAqLwotCQl7ezAsIDB9LAotCQl7Mywg
NH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhk
YSAqLwotCQl7ezEsIDF9LAotCQl7MywgNH0sCi0JCXs2LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXsxLCAxLCAzLCAwLAkJLyogMHhkYiAqLwotCQl7ezAsIDF9LAotCQl7MywgNH0sCi0JCXs2
LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkYyAqLwotCQl7
ezIsIDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAx
LCAzLCAwLAkJLyogMHhkZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgNH0sCi0JCXs2LCA3fSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhkZSAqLwotCQl7ezEsIDR9LAot
CQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJ
LyogMHhkZiAqLwotCQl7ezAsIDR9LAotCQl7NiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHhlMCAqLwotCQl7ezUsIDd9LAotCQl7MCwgMH0s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlMSAq
LwotCQl7ezAsIDB9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXswLCAxLCAyLCAwLAkJLyogMHhlMiAqLwotCQl7ezEsIDF9LAotCQl7NSwgN30sCi0JCXswLCAw
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlMyAqLwotCQl7ezAs
IDF9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAy
LCAwLAkJLyogMHhlNCAqLwotCQl7ezIsIDJ9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhlNSAqLwotCQl7ezAsIDB9LAotCQl7
MiwgMn0sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyog
MHhlNiAqLwotCQl7ezEsIDJ9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlNyAqLwotCQl7ezAsIDJ9LAotCQl7NSwgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhlOCAqLwot
CQl7ezMsIDN9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsx
LCAxLCAzLCAwLAkJLyogMHhlOSAqLwotCQl7ezAsIDB9LAotCQl7MywgM30sCi0JCXs1LCA3fSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAzLCAwLAkJLyogMHhlYSAqLwotCQl7ezEsIDF9
LAotCQl7MywgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAw
LAkJLyogMHhlYiAqLwotCQl7ezAsIDF9LAotCQl7MywgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhlYyAqLwotCQl7ezIsIDN9LAotCQl7NSwg
N30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAzLCAwLAkJLyogMHhl
ZCAqLwotCQl7ezAsIDB9LAotCQl7MiwgM30sCi0JCXs1LCA3fSwKLQkJezAsIDB9Ci0JCX0KLQl9
LAotCXswLCAxLCAyLCAwLAkJLyogMHhlZSAqLwotCQl7ezEsIDN9LAotCQl7NSwgN30sCi0JCXsw
LCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhlZiAqLwotCQl7
ezAsIDN9LAotCQl7NSwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAx
LCAxLCAwLAkJLyogMHhmMCAqLwotCQl7ezQsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJ
ezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmMSAqLwotCQl7ezAsIDB9LAot
CQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJ
LyogMHhmMiAqLwotCQl7ezEsIDF9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0J
CX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmMyAqLwotCQl7ezAsIDF9LAotCQl7NCwgN30s
Ci0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmNCAq
LwotCQl7ezIsIDJ9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAot
CXsxLCAxLCAzLCAwLAkJLyogMHhmNSAqLwotCQl7ezAsIDB9LAotCQl7MiwgMn0sCi0JCXs0LCA3
fSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmNiAqLwotCQl7ezEs
IDJ9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAy
LCAwLAkJLyogMHhmNyAqLwotCQl7ezAsIDJ9LAotCQl7NCwgN30sCi0JCXswLCAwfSwKLQkJezAs
IDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAwLAkJLyogMHhmOCAqLwotCQl7ezMsIDd9LAotCQl7
MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyog
MHhmOSAqLwotCQl7ezAsIDB9LAotCQl7MywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0K
LQl9LAotCXswLCAxLCAyLCAwLAkJLyogMHhmYSAqLwotCQl7ezEsIDF9LAotCQl7MywgN30sCi0J
CXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmYiAqLwot
CQl7ezAsIDF9LAotCQl7MywgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXsw
LCAxLCAxLCAwLAkJLyogMHhmYyAqLwotCQl7ezIsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwK
LQkJezAsIDB9Ci0JCX0KLQl9LAotCXsxLCAxLCAyLCAwLAkJLyogMHhmZCAqLwotCQl7ezAsIDB9
LAotCQl7MiwgN30sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9LAotCXswLCAxLCAxLCAw
LAkJLyogMHhmZSAqLwotCQl7ezEsIDd9LAotCQl7MCwgMH0sCi0JCXswLCAwfSwKLQkJezAsIDB9
Ci0JCX0KLQl9LAotCXsxLCAxLCAxLCAwLAkJLyogMHhmZiAqLwotCQl7ezAsIDd9LAotCQl7MCwg
MH0sCi0JCXswLCAwfSwKLQkJezAsIDB9Ci0JCX0KLQl9Ci19OwotCi0KLWludAotc2N0cF9pc19h
ZGRyZXNzX2luX3Njb3BlKHN0cnVjdCBzY3RwX2lmYSAqaWZhLAotICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3Njb3BpbmcgKnNjb3BlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBkb191cGRhdGUpCi17Ci0JaWYgKChzY29wZS0+bG9vcGJhY2tfc2NvcGUgPT0gMCkg
JiYKLQkgICAgKGlmYS0+aWZuX3ApICYmIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmYS0+aWZuX3Ap
KSB7Ci0JCS8qCi0JCSAqIHNraXAgbG9vcGJhY2sgaWYgbm90IGluIHNjb3BlICoKLQkJICovCi0J
CXJldHVybiAoMCk7Ci0JfQotCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWlmIChzY29wZS0+aXB2NF9hZGRyX2xlZ2Fs
KSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJc2luID0gJmlmYS0+YWRkcmVz
cy5zaW47Ci0JCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgewotCQkJCS8qIG5vdCBp
biBzY29wZSAsIHVuc3BlY2lmaWVkICovCi0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWlmICgo
c2NvcGUtPmlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKLQkJCSAgICAoSU40X0lTUFJJVkFURV9B
RERSRVNTKCZzaW4tPnNpbl9hZGRyKSkpIHsKLQkJCQkvKiBwcml2YXRlIGFkZHJlc3Mgbm90IGlu
IHNjb3BlICovCi0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCXJldHVybiAo
MCk7Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6
Ci0JCWlmIChzY29wZS0+aXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OwotCi0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQotCQkJLyogTXVzdCB1cGRhdGUgdGhl
IGZsYWdzLCAgYnVtbWVyLCB3aGljaAotCQkJICogbWVhbnMgYW55IElGQSBsb2NrcyBtdXN0IG5v
dyBiZSBhcHBsaWVkIEhFUkUgPC0+Ci0JCQkgKi8KLQkJCWlmIChkb191cGRhdGUpIHsKLQkJCQlz
Y3RwX2dhdGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3MoaWZhKTsKLQkJCX0KLSNlbmRpZgotCQkJaWYg
KGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0JCQkvKiBvayB0byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXM/ICov
Ci0JCQlzaW42ID0gJmlmYS0+YWRkcmVzcy5zaW42OwotCQkJaWYgKElONl9JU19BRERSX1VOU1BF
Q0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkJLyogc2tpcCB1bnNwZWNpZmVkIGFkZHJl
c3NlcyAqLwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoCQkvKiAobG9jYWxfc2NvcGUg
PT0gMCkgJiYgKi8KLQkJCSAgICAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2Fk
ZHIpKSkgewotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlpZiAoKHNjb3BlLT5zaXRlX3Njb3Bl
ID09IDApICYmCi0JCQkgICAgKElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRy
KSkpIHsKLQkJCQlyZXR1cm4gKDApOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmV0dXJuICgwKTsK
LQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNl
IEFGX0NPTk46Ci0JCWlmICghc2NvcGUtPmNvbm5fYWRkcl9sZWdhbCkgewotCQkJcmV0dXJuICgw
KTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAoMCk7Ci0JfQot
CXJldHVybiAoMSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FkZF9hZGRyX3Rv
X21idWYoc3RydWN0IG1idWYgKm0sIHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MTZfdCAqbGVu
KQotewotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc2N0cF9w
YXJhbWhkciAqcGFyYW1oOwotCXN0cnVjdCBtYnVmICptcmV0OwotCXVpbnQxNl90IHBsZW47Ci0j
ZW5kaWYKLQotCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElO
RVQKLQljYXNlIEFGX0lORVQ6Ci0JCXBsZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3Rw
X2lwdjRhZGRyX3BhcmFtKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2Ug
QUZfSU5FVDY6Ci0JCXBsZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gKG0pOwotCX0K
LSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JaWYgKE1fVFJBSUxJTkdTUEFD
RShtKSA+PSBwbGVuKSB7Ci0JCS8qIGVhc3kgc2lkZSB3ZSBqdXN0IGRyb3AgaXQgb24gdGhlIGVu
ZCAqLwotCQlwYXJhbWggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoU0NUUF9CVUZfQVQobSwg
U0NUUF9CVUZfTEVOKG0pKSk7Ci0JCW1yZXQgPSBtOwotCX0gZWxzZSB7Ci0JCS8qIE5lZWQgbW9y
ZSBzcGFjZSAqLwotCQltcmV0ID0gbTsKLQkJd2hpbGUgKFNDVFBfQlVGX05FWFQobXJldCkgIT0g
TlVMTCkgewotCQkJbXJldCA9IFNDVFBfQlVGX05FWFQobXJldCk7Ci0JCX0KLQkJU0NUUF9CVUZf
TkVYVChtcmV0KSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhwbGVuLCAwLCBNX05PV0FJVCwgMSwg
TVRfREFUQSk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1yZXQpID09IE5VTEwpIHsKLQkJCS8qIFdl
IGFyZSBob3NlZCwgY2FuJ3QgYWRkIG1vcmUgYWRkcmVzc2VzICovCi0JCQlyZXR1cm4gKG0pOwot
CQl9Ci0JCW1yZXQgPSBTQ1RQX0JVRl9ORVhUKG1yZXQpOwotCQlwYXJhbWggPSBtdG9kKG1yZXQs
IHN0cnVjdCBzY3RwX3BhcmFtaGRyICopOwotCX0KLQkvKiBub3cgYWRkIHRoZSBwYXJhbWV0ZXIg
Ki8KLQlzd2l0Y2ggKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
Y2FzZSBBRl9JTkVUOgotCXsKLQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKmlwdjRwOwot
CQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQlzaW4gPSAmaWZhLT5hZGRyZXNzLnNpbjsK
LQkJaXB2NHAgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwYXJhbWg7Ci0JCXBhcmFt
aC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSVBWNF9BRERSRVNTKTsKLQkJcGFyYW1oLT5wYXJh
bV9sZW5ndGggPSBodG9ucyhwbGVuKTsKLQkJaXB2NHAtPmFkZHIgPSBzaW4tPnNpbl9hZGRyLnNf
YWRkcjsKLQkJU0NUUF9CVUZfTEVOKG1yZXQpICs9IHBsZW47Ci0JCWJyZWFrOwotCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2lwdjZh
ZGRyX3BhcmFtICppcHY2cDsKLQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlzaW42
ID0gJmlmYS0+YWRkcmVzcy5zaW42OwotCQlpcHY2cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9w
YXJhbSAqKXBhcmFtaDsKLQkJcGFyYW1oLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9JUFY2X0FE
RFJFU1MpOwotCQlwYXJhbWgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBsZW4pOwotCQltZW1jcHko
aXB2NnAtPmFkZHIsICZzaW42LT5zaW42X2FkZHIsCi0JCSAgICBzaXplb2YoaXB2NnAtPmFkZHIp
KTsKLSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi0JCS8qIGNsZWFyIGVtYmVk
ZGVkIHNjb3BlIGluIHRoZSBhZGRyZXNzICovCi0JCWluNl9jbGVhcnNjb3BlKChzdHJ1Y3QgaW42
X2FkZHIgKilpcHY2cC0+YWRkcik7Ci0jZW5kaWYKLQkJU0NUUF9CVUZfTEVOKG1yZXQpICs9IHBs
ZW47Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybiAobSk7Ci0JfQot
CWlmIChsZW4gIT0gTlVMTCkgewotCQkqbGVuICs9IHBsZW47Ci0JfQotCXJldHVybiAobXJldCk7
Ci0jZW5kaWYKLX0KLQotCi1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9p
YShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpzY29wZSwKLQkJCSAgIHN0
cnVjdCBtYnVmICptX2F0LCBpbnQgY250X2luaXRzX3RvLAotCQkJICAgdWludDE2X3QgKnBhZGRp
bmdfbGVuLCB1aW50MTZfdCAqY2h1bmtfbGVuKQotewotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmID0g
TlVMTDsKLQlpbnQgY250LCBsaW1pdF9vdXQgPSAwLCB0b3RhbF9jb3VudDsKLQl1aW50MzJfdCB2
cmZfaWQ7Ci0KLQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JU0NUUF9JUElfQUREUl9STE9D
SygpOwotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsK
LQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCXJldHVybiAobV9hdCk7Ci0JfQotCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQlzdHJ1Y3Qgc2N0
cF9pZmEgKnNjdHBfaWZhcDsKLQkJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7Ci0KLQkJY250
ID0gY250X2luaXRzX3RvOwotCQlpZiAodnJmLT50b3RhbF9pZmFfY291bnQgPiBTQ1RQX0NPVU5U
X0xJTUlUKSB7Ci0JCQlsaW1pdF9vdXQgPSAxOwotCQkJY250ID0gU0NUUF9BRERSRVNTX0xJTUlU
OwotCQkJZ290byBza2lwX2NvdW50OwotCQl9Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmbnAsICZ2
cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCQlpZiAoKHNjb3BlLT5sb29wYmFja19zY29wZSA9
PSAwKSAmJgotCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZucCkpIHsKLQkJCQkv
KgotCQkJCSAqIFNraXAgbG9vcGJhY2sgZGV2aWNlcyBpZiBsb29wYmFja19zY29wZQotCQkJCSAq
IG5vdCBzZXQKLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCUxJU1RfRk9SRUFDSChz
Y3RwX2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLSNpZmRlZiBJTkVUCi0JCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IEFGX0lORVQpICYmCi0JCQkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZh
cC0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0K
LSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJaWYgKChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSAmJgotCQkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYXAt
PmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0K
LSNlbmRpZgotI2VuZGlmCi0JCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNj
dHBfaWZhcCkpIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJCQlpZiAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9DT05O
KSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNlbmRpZgotCQkJCWlmIChzY3RwX2lzX2FkZHJl
c3NfaW5fc2NvcGUoc2N0cF9pZmFwLCBzY29wZSwgMSkgPT0gMCkgewotCQkJCQljb250aW51ZTsK
LQkJCQl9Ci0JCQkJY250Kys7Ci0JCQkJaWYgKGNudCA+IFNDVFBfQUREUkVTU19MSU1JVCkgewot
CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoY250ID4gU0NUUF9BRERSRVNTX0xJTUlU
KSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQlza2lwX2NvdW50OgotCQlpZiAoY250ID4gMSkg
ewotCQkJdG90YWxfY291bnQgPSAwOwotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+
aWZubGlzdCwgbmV4dF9pZm4pIHsKLQkJCQljbnQgPSAwOwotCQkJCWlmICgoc2NvcGUtPmxvb3Bi
YWNrX3Njb3BlID09IDApICYmCi0JCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZu
cCkpIHsKLQkJCQkJLyoKLQkJCQkJICogU2tpcCBsb29wYmFjayBkZXZpY2VzIGlmCi0JCQkJCSAq
IGxvb3BiYWNrX3Njb3BlIG5vdCBzZXQKLQkJCQkJICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0K
LQkJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmFwLCAmc2N0cF9pZm5wLT5pZmFsaXN0LCBuZXh0X2lm
YSkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJCQlpZiAoKHNj
dHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCQkJICAgIChw
cmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAg
ICAgICAgICAgICAgICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgewot
CQkJCQkJY29udGludWU7Ci0JCQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmICgo
c2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJCQkJICAg
IChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAg
ICAgICAgICAgICAgICAgICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDAp
KSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJCQkJaWYgKHNj
dHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhcCkpIHsKLQkJCQkJCWNvbnRpbnVl
OwotCQkJCQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCQlpZiAoc2N0cF9pZmFw
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJ
CQkJfQotI2VuZGlmCi0JCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2N0cF9pZmFw
LAotCQkJCQkJCQkgICAgIHNjb3BlLCAwKSA9PSAwKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJ
fQotCQkJCQlpZiAoKGNodW5rX2xlbiAhPSBOVUxMKSAmJgotCQkJCQkgICAgKHBhZGRpbmdfbGVu
ICE9IE5VTEwpICYmCi0JCQkJCSAgICAoKnBhZGRpbmdfbGVuID4gMCkpIHsKLQkJCQkJCW1lbXNl
dChtdG9kKG1fYXQsIGNhZGRyX3QpICsgKmNodW5rX2xlbiwgMCwgKnBhZGRpbmdfbGVuKTsKLQkJ
CQkJCVNDVFBfQlVGX0xFTihtX2F0KSArPSAqcGFkZGluZ19sZW47Ci0JCQkJCQkqY2h1bmtfbGVu
ICs9ICpwYWRkaW5nX2xlbjsKLQkJCQkJCSpwYWRkaW5nX2xlbiA9IDA7Ci0JCQkJCX0KLQkJCQkJ
bV9hdCA9IHNjdHBfYWRkX2FkZHJfdG9fbWJ1ZihtX2F0LCBzY3RwX2lmYXAsIGNodW5rX2xlbik7
Ci0JCQkJCWlmIChsaW1pdF9vdXQpIHsKLQkJCQkJCWNudCsrOwotCQkJCQkJdG90YWxfY291bnQr
KzsKLQkJCQkJCWlmIChjbnQgPj0gMikgewotCQkJCQkJCS8qIHR3byBmcm9tIGVhY2ggYWRkcmVz
cyAqLwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQkJaWYgKHRvdGFsX2NvdW50ID4gU0NU
UF9BRERSRVNTX0xJTUlUKSB7Ci0JCQkJCQkJLyogTm8gbW9yZSBhZGRyZXNzZXMgKi8KLQkJCQkJ
CQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0J
CXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCQljbnQgPSBjbnRfaW5pdHNfdG87Ci0JCS8q
IEZpcnN0LCBob3cgbWFueSA/ICovCi0JCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9h
ZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKLQkJCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsK
LQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAm
IFNDVFBfQkVJTkdfREVMRVRFRCkKLQkJCQkvKiBBZGRyZXNzIGJlaW5nIGRlbGV0ZWQgYnkgdGhl
IHN5c3RlbSwgZG9udAotCQkJCSAqIGxpc3QuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQlp
ZiAobGFkZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkJLyogQWRkcmVz
cyBiZWluZyBkZWxldGVkIG9uIHRoaXMgZXAKLQkJCQkgKiBkb24ndCBsaXN0LgotCQkJCSAqLwot
CQkJCWNvbnRpbnVlOwotCQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChs
YWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJY29udGlu
dWU7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUobGFkZHIt
PmlmYSwKLQkJCQkJCSAgICAgc2NvcGUsIDEpID09IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0K
LQkJCWNudCsrOwotCQl9Ci0JCS8qCi0JCSAqIFRvIGdldCB0aHJvdWdoIGEgTkFUIHdlIG9ubHkg
bGlzdCBhZGRyZXNzZXMgaWYgd2UgaGF2ZQotCQkgKiBtb3JlIHRoYW4gb25lLiBUaGF0IHdheSBp
ZiB5b3UganVzdCBiaW5kIGEgc2luZ2xlIGFkZHJlc3MKLQkJICogd2UgbGV0IHRoZSBzb3VyY2Ug
b2YgdGhlIGluaXQgZGljdGF0ZSBvdXIgYWRkcmVzcy4KLQkJICovCi0JCWlmIChjbnQgPiAxKSB7
Ci0JCQljbnQgPSBjbnRfaW5pdHNfdG87Ci0JCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVM
TCkgewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZh
X2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0J
CQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShsYWRkci0+aWZhLAotCQkJCQkJCSAgICAg
c2NvcGUsIDApID09IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWlmICgoY2h1bmtf
bGVuICE9IE5VTEwpICYmCi0JCQkJICAgIChwYWRkaW5nX2xlbiAhPSBOVUxMKSAmJgotCQkJCSAg
ICAoKnBhZGRpbmdfbGVuID4gMCkpIHsKLQkJCQkJbWVtc2V0KG10b2QobV9hdCwgY2FkZHJfdCkg
KyAqY2h1bmtfbGVuLCAwLCAqcGFkZGluZ19sZW4pOwotCQkJCQlTQ1RQX0JVRl9MRU4obV9hdCkg
Kz0gKnBhZGRpbmdfbGVuOwotCQkJCQkqY2h1bmtfbGVuICs9ICpwYWRkaW5nX2xlbjsKLQkJCQkJ
KnBhZGRpbmdfbGVuID0gMDsKLQkJCQl9Ci0JCQkJbV9hdCA9IHNjdHBfYWRkX2FkZHJfdG9fbWJ1
ZihtX2F0LCBsYWRkci0+aWZhLCBjaHVua19sZW4pOwotCQkJCWNudCsrOwotCQkJCWlmIChjbnQg
Pj0gU0NUUF9BRERSRVNTX0xJTUlUKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQot
CX0KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKG1fYXQpOwotfQotCi1zdGF0
aWMgc3RydWN0IHNjdHBfaWZhICoKLXNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKHN0cnVjdCBz
Y3RwX2lmYSAqaWZhLAotCQkJICAgdWludDhfdCBkZXN0X2lzX2xvb3AsCi0JCQkgICB1aW50OF90
IGRlc3RfaXNfcHJpdiwKLQkJCSAgIHNhX2ZhbWlseV90IGZhbSkKLXsKLQl1aW50OF90IGRlc3Rf
aXNfZ2xvYmFsID0gMDsKLQkvKiBkZXN0X2lzX3ByaXYgaXMgdHJ1ZSBpZiBkZXN0aW5hdGlvbiBp
cyBhIHByaXZhdGUgYWRkcmVzcyAqLwotCS8qIGRlc3RfaXNfbG9vcCBpcyB0cnVlIGlmIGRlc3Rp
bmF0aW9uIGlzIGEgbG9vcGJhY2sgYWRkcmVzc2VzICovCi0KLQkvKioKLQkgKiBIZXJlIHdlIGRl
dGVybWluZSBpZiBpdHMgYSBwcmVmZXJyZWQgYWRkcmVzcy4gQSBwcmVmZXJyZWQgYWRkcmVzcwot
CSAqIG1lYW5zIGl0IGlzIHRoZSBzYW1lIHNjb3BlIG9yIGhpZ2hlciBzY29wZSB0aGVuIHRoZSBk
ZXN0aW5hdGlvbi4KLQkgKiBMID0gbG9vcGJhY2ssIFAgPSBwcml2YXRlLCBHID0gZ2xvYmFsCi0J
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICBzcmMg
ICAgfCAgZGVzdCB8IHJlc3VsdAotCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0JICogICAgIEwgICAgIHwgICAgTCAgfCAgICB5ZXMKLQkgKiAgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgUCAgICAgfCAgICBMICB8
ICAgIHllcy12NCBuby12NgotCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCSAqICAgICBHICAgICB8ICAgIEwgIHwgICAgeWVzLXY0IG5vLXY2Ci0JICogIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICAgIEwgICAgIHwg
ICAgUCAgfCAgICBubwotCSAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCSAqICAgICBQICAgICB8ICAgIFAgIHwgICAgeWVzCi0JICogIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICAgIEcgICAgIHwgICAgUCAgfCAgICBu
bwotCSAqICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAg
ICAgTCAgICAgfCAgICBHICB8ICAgIG5vCi0JICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCSAqICAgICBQICAgICB8ICAgIEcgIHwgICAgbm8KLQkgKiAgICAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgICBHICAgICB8
ICAgIEcgIHwgICAgeWVzCi0JICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQkgKi8KLQotCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ICE9IGZhbSkg
ewotCQkvKiBmb3JnZXQgbWlzLW1hdGNoZWQgZmFtaWx5ICovCi0JCXJldHVybiAoTlVMTCk7Ci0J
fQotCWlmICgoZGVzdF9pc19wcml2ID09IDApICYmIChkZXN0X2lzX2xvb3AgPT0gMCkpIHsKLQkJ
ZGVzdF9pc19nbG9iYWwgPSAxOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIklz
IGRlc3RpbmF0aW9uIHByZWZlcnJlZDoiKTsKLQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQ
VVQyLCAmaWZhLT5hZGRyZXNzLnNhKTsKLQkvKiBPayB0aGUgYWRkcmVzcyBtYXkgYmUgb2sgKi8K
LSNpZmRlZiBJTkVUNgotCWlmIChmYW0gPT0gQUZfSU5FVDYpIHsKLQkJLyogb2sgdG8gdXNlIGRl
cHJlY2F0ZWQgYWRkcmVzc2VzPyBubyBsZXRzIG5vdCEgKi8KLQkJaWYgKGlmYS0+bG9jYWxpZmFf
ZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDMsICJOTzoxXG4iKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKGlmYS0+
c3JjX2lzX3ByaXYgJiYgIWlmYS0+c3JjX2lzX2xvb3ApIHsKLQkJCWlmIChkZXN0X2lzX2xvb3Ap
IHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjJcbiIpOwotCQkJCXJldHVy
biAoTlVMTCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGlmYS0+c3JjX2lzX2dsb2IpIHsKLQkJCWlmIChk
ZXN0X2lzX2xvb3ApIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjNcbiIp
OwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLQkvKiBOb3cgdGhh
dCB3ZSBrbm93IHdoYXQgaXMgd2hhdCwgaW1wbGVtZW50IG9yIHRhYmxlCi0JICogdGhpcyBjb3Vs
ZCBpbiB0aGVvcnkgYmUgZG9uZSBzbGlja2VyIChpdCB1c2VkIHRvIGJlKSwgYnV0IHRoaXMKLQkg
KiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGVhc2llciB0byB2YWxpZGF0ZSA6LSkKLQkgKi8KLQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInNyY19sb29wOiVkIHNyY19wcml2OiVkIHNyY19n
bG9iOiVkXG4iLAotCQlpZmEtPnNyY19pc19sb29wLCBpZmEtPnNyY19pc19wcml2LCBpZmEtPnNy
Y19pc19nbG9iKTsKLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgImRlc3RfbG9vcDolZCBk
ZXN0X3ByaXY6JWQgZGVzdF9nbG9iOiVkXG4iLAotCQlkZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJp
diwgZGVzdF9pc19nbG9iYWwpOwotCi0JaWYgKChpZmEtPnNyY19pc19sb29wKSAmJiAoZGVzdF9p
c19wcml2KSkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjRcbiIpOwotCQly
ZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAoKGlmYS0+c3JjX2lzX2dsb2IpICYmIChkZXN0X2lzX3By
aXYpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86NVxuIik7Ci0JCXJldHVy
biAoTlVMTCk7Ci0JfQotCWlmICgoaWZhLT5zcmNfaXNfbG9vcCkgJiYgKGRlc3RfaXNfZ2xvYmFs
KSkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjZcbiIpOwotCQlyZXR1cm4g
KE5VTEwpOwotCX0KLQlpZiAoKGlmYS0+c3JjX2lzX3ByaXYpICYmIChkZXN0X2lzX2dsb2JhbCkp
IHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJOTzo3XG4iKTsKLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJZRVNcbiIpOwotCS8qIGl0
cyBhIHByZWZlcnJlZCBhZGRyZXNzICovCi0JcmV0dXJuIChpZmEpOwotfQotCi1zdGF0aWMgc3Ry
dWN0IHNjdHBfaWZhICoKLXNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSwKLQkJCSAgICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCSAgICB1aW50OF90IGRl
c3RfaXNfcHJpdiwKLQkJCSAgICBzYV9mYW1pbHlfdCBmYW0pCi17Ci0JdWludDhfdCBkZXN0X2lz
X2dsb2JhbCA9IDA7Ci0KLQkvKioKLQkgKiBIZXJlIHdlIGRldGVybWluZSBpZiBpdHMgYSBhY2Nl
cHRhYmxlIGFkZHJlc3MuIEEgYWNjZXB0YWJsZQotCSAqIGFkZHJlc3MgbWVhbnMgaXQgaXMgdGhl
IHNhbWUgc2NvcGUgb3IgaGlnaGVyIHNjb3BlIGJ1dCB3ZSBjYW4KLQkgKiBhbGxvdyBmb3IgTkFU
IHdoaWNoIG1lYW5zIGl0cyBvayB0byBoYXZlIGEgZ2xvYmFsIGRlc3QgYW5kIGEKLQkgKiBwcml2
YXRlIHNyYy4KLQkgKgotCSAqIEwgPSBsb29wYmFjaywgUCA9IHByaXZhdGUsIEcgPSBnbG9iYWwK
LQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICBzcmMg
ICAgfCAgZGVzdCB8IHJlc3VsdAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0JICogICBMICAgICB8ICAgTCAgIHwgICAgeWVzCi0JICogIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICBQICAgICB8ICAgTCAgIHwgICAg
eWVzLXY0IG5vLXY2Ci0JICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0JICogICBHICAgICB8ICAgTCAgIHwgICAgeWVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgIEwgICAgIHwgICBQICAgfCAgICBubwotCSAq
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogICBQICAgICB8
ICAgUCAgIHwgICAgeWVzCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQkgKiAgIEcgICAgIHwgICBQICAgfCAgICB5ZXMgLSBNYXkgbm90IHdvcmsKLQkgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgTCAgICAgfCAg
IEcgICB8ICAgIG5vCi0JICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQkgKiAgIFAgICAgIHwgICBHICAgfCAgICB5ZXMgLSBNYXkgbm90IHdvcmsKLQkgKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqICAgRyAgICAgfCAgIEcg
ICB8ICAgIHllcwotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0JICovCi0KLQlpZiAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSAhPSBmYW0pIHsKLQkJLyog
Zm9yZ2V0IG5vbiBtYXRjaGluZyBmYW1pbHkgKi8KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDMsICJpZmFfZmFtOiVkIGZhbTolZFxuIiwKLQkJCWlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHks
IGZhbSk7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qIE9rIHRoZSBhZGRyZXNzIG1heSBiZSBv
ayAqLwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDMsICZpZmEtPmFkZHJlc3Muc2Ep
OwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiZHN0X2lzX2xvb3A6JWQgZGVzdF9pc19w
cml2OiVkXG4iLAotCQlkZXN0X2lzX2xvb3AsIGRlc3RfaXNfcHJpdik7Ci0JaWYgKChkZXN0X2lz
X2xvb3AgPT0gMCkgJiYgKGRlc3RfaXNfcHJpdiA9PSAwKSkgewotCQlkZXN0X2lzX2dsb2JhbCA9
IDE7Ci0JfQotI2lmZGVmIElORVQ2Ci0JaWYgKGZhbSA9PSBBRl9JTkVUNikgewotCQkvKiBvayB0
byB1c2UgZGVwcmVjYXRlZCBhZGRyZXNzZXM/ICovCi0JCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdz
ICYgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJ
aWYgKGlmYS0+c3JjX2lzX3ByaXYpIHsKLQkJCS8qIFNwZWNpYWwgY2FzZSwgbGlua2xvY2FsIHRv
IGxvb3AgKi8KLQkJCWlmIChkZXN0X2lzX2xvb3ApCi0JCQkJcmV0dXJuIChOVUxMKTsKLQkJfQot
CX0KLSNlbmRpZgotCS8qCi0JICogTm93IHRoYXQgd2Uga25vdyB3aGF0IGlzIHdoYXQsIGltcGxl
bWVudCBvdXIgdGFibGUuCi0JICogVGhpcyBjb3VsZCBpbiB0aGVvcnkgYmUgZG9uZSBzbGlja2Vy
IChpdCB1c2VkIHRvIGJlKSwgYnV0IHRoaXMKLQkgKiBpcyBzdHJhaWdodGZvcndhcmQgYW5kIGVh
c2llciB0byB2YWxpZGF0ZSA6LSkKLQkgKi8KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
ImlmYS0+c3JjX2lzX2xvb3A6JWQgZGVzdF9pc19wcml2OiVkXG4iLAotCQlpZmEtPnNyY19pc19s
b29wLAotCQlkZXN0X2lzX3ByaXYpOwotCWlmICgoaWZhLT5zcmNfaXNfbG9vcCA9PSAxKSAmJiAo
ZGVzdF9pc19wcml2KSkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMywgImlmYS0+c3JjX2lzX2xvb3A6JWQgZGVzdF9pc19nbG9iOiVkXG4iLAotCQlp
ZmEtPnNyY19pc19sb29wLAotCQlkZXN0X2lzX2dsb2JhbCk7Ci0JaWYgKChpZmEtPnNyY19pc19s
b29wID09IDEpICYmIChkZXN0X2lzX2dsb2JhbCkpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0J
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJhZGRyZXNzIGlzIGFjY2VwdGFibGVcbiIpOwot
CS8qIGl0cyBhbiBhY2NlcHRhYmxlIGFkZHJlc3MgKi8KLQlyZXR1cm4gKGlmYSk7Ci19Ci0KLWlu
dAotc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQlpZiAoc3Rj
YiA9PSBOVUxMKSB7Ci0JCS8qIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMsIG5vIFRDQiA6LSkg
Ki8KLQkJcmV0dXJuICgwKTsKLQl9Ci0JTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+YXNvYy5z
Y3RwX3Jlc3RyaWN0ZWRfYWRkcnMsIHNjdHBfbnh0X2FkZHIpIHsKLQkJaWYgKGxhZGRyLT5pZmEg
PT0gTlVMTCkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICIlczogTlVMTCBpZmFc
biIsCi0JCQkJX19mdW5jX18pOwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxhZGRyLT5pZmEg
PT0gaWZhKSB7Ci0JCQkvKiBZZXMgaXQgaXMgb24gdGhlIGxpc3QgKi8KLQkJCXJldHVybiAoMSk7
Ci0JCX0KLQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotCi1pbnQKLXNjdHBfaXNfYWRkcl9pbl9lcChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qg
c2N0cF9sYWRkciAqbGFkZHI7Ci0KLQlpZiAoaWZhID09IE5VTEwpCi0JCXJldHVybiAoMCk7Ci0J
TElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikg
ewotCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQljb250aW51ZTsKLQkJ
fQotCQlpZiAoKGxhZGRyLT5pZmEgPT0gaWZhKSAmJiBsYWRkci0+YWN0aW9uID09IDApCi0JCQkv
KiBzYW1lIHBvaW50ZXIgKi8KLQkJCXJldHVybiAoMSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0K
LQotCi1zdGF0aWMgc3RydWN0IHNjdHBfaWZhICoKLXNjdHBfY2hvb3NlX2JvdW5kc3BlY2lmaWNf
aW5wKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCQkgICAgICBzY3RwX3JvdXRlX3QgKnJvLAot
CQkJICAgICAgdWludDMyX3QgdnJmX2lkLAotCQkJICAgICAgaW50IG5vbl9hc29jX2FkZHJfb2ss
Ci0JCQkgICAgICB1aW50OF90IGRlc3RfaXNfcHJpdiwKLQkJCSAgICAgIHVpbnQ4X3QgZGVzdF9p
c19sb29wLAotCQkJICAgICAgc2FfZmFtaWx5X3QgZmFtKQotewotCXN0cnVjdCBzY3RwX2xhZGRy
ICpsYWRkciwgKnN0YXJ0aW5nX3BvaW50OwotCXZvaWQgKmlmbjsKLQlpbnQgcmVzZXR0b3RvcCA9
IDA7Ci0Jc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBf
aWZhLCAqc2lmYTsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQl1aW50MzJfdCBpZm5faW5kZXg7
Ci0KLQl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7Ci0JaWYgKHZyZiA9PSBOVUxMKQotCQly
ZXR1cm4gKE5VTEwpOwotCi0JaWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7
Ci0JaWZuX2luZGV4ID0gU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7Ci0Jc2N0cF9p
Zm4gPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZuX2luZGV4KTsKLQkvKgotCSAqIGZpcnN0IHF1ZXN0
aW9uLCBpcyB0aGUgaWZuIHdlIHdpbGwgZW1pdCBvbiBpbiBvdXIgbGlzdCwgaWYgc28sIHdlCi0J
ICogd2FudCBzdWNoIGFuIGFkZHJlc3MuIE5vdGUgdGhhdCB3ZSBmaXJzdCBsb29rZWQgZm9yIGEK
LQkgKiBwcmVmZXJyZWQgYWRkcmVzcy4KLQkgKi8KLQlpZiAoc2N0cF9pZm4pIHsKLQkJLyogaXMg
YSBwcmVmZXJyZWQgb25lIG9uIHRoZSBpbnRlcmZhY2Ugd2Ugcm91dGUgb3V0PyAqLwotCQlMSVNU
X0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmZGVmIElORVQKLQkJCWlmICgoc2N0cF9pZmEtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCi0JCQkgICAgKHByaXNvbl9jaGVja19pcDQo
aW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3Rw
X2lmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRk
cmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRp
ZgotI2VuZGlmCi0JCQlpZiAoKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9E
RUZFUl9VU0UpICYmCi0JCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCi0JCQkJY29udGlu
dWU7Ci0JCQlzaWZhID0gc2N0cF9pc19pZmFfYWRkcl9wcmVmZXJyZWQoc2N0cF9pZmEsCi0JCQkJ
CQkJICBkZXN0X2lzX2xvb3AsCi0JCQkJCQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JCQlpZiAo
c2lmYSA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChp
bnAsIHNpZmEpKSB7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQkJ
CQlyZXR1cm4gKHNpZmEpOwotCQkJfQotCQl9Ci0JfQotCS8qCi0JICogb2ssIG5vdyB3ZSBub3cg
bmVlZCB0byBmaW5kIG9uZSBvbiB0aGUgbGlzdCBvZiB0aGUgYWRkcmVzc2VzLgotCSAqIFdlIGNh
bid0IGdldCBvbmUgb24gdGhlIGVtaXR0aW5nIGludGVyZmFjZSBzbyBsZXQncyBmaW5kIGZpcnN0
Ci0JICogYSBwcmVmZXJyZWQgb25lLiBJZiBub3QgdGhhdCBhbiBhY2NlcHRhYmxlIG9uZSBvdGhl
cndpc2UuLi4KLQkgKiB3ZSByZXR1cm4gTlVMTC4KLQkgKi8KLQlzdGFydGluZ19wb2ludCA9IGlu
cC0+bmV4dF9hZGRyX3RvdXNlOwotIG9uY2VfYWdhaW46Ci0JaWYgKGlucC0+bmV4dF9hZGRyX3Rv
dXNlID09IE5VTEwpIHsKLQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBMSVNUX0ZJUlNUKCZpbnAt
PnNjdHBfYWRkcl9saXN0KTsKLQkJcmVzZXR0b3RvcCA9IDE7Ci0JfQotCWZvciAobGFkZHIgPSBp
bnAtPm5leHRfYWRkcl90b3VzZTsgbGFkZHI7Ci0JICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRk
ciwgc2N0cF9ueHRfYWRkcikpIHsKLQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJLyog
YWRkcmVzcyBoYXMgYmVlbiByZW1vdmVkICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGFk
ZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7Ci0JCQkvKiBhZGRyZXNzIGlzIGJl
aW5nIGRlbGV0ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNpZmEgPSBzY3RwX2lzX2lmYV9h
ZGRyX3ByZWZlcnJlZChsYWRkci0+aWZhLCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgIGRlc3RfaXNf
cHJpdiwgZmFtKTsKLQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlhdG9taWNf
YWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAo
cmVzZXR0b3RvcCA9PSAwKSB7Ci0JCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gTlVMTDsKLQkJZ290
byBvbmNlX2FnYWluOwotCX0KLQotCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gc3RhcnRpbmdfcG9p
bnQ7Ci0JcmVzZXR0b3RvcCA9IDA7Ci0gb25jZV9hZ2Fpbl90b286Ci0JaWYgKGlucC0+bmV4dF9h
ZGRyX3RvdXNlID09IE5VTEwpIHsKLQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBMSVNUX0ZJUlNU
KCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKLQkJcmVzZXR0b3RvcCA9IDE7Ci0JfQotCi0JLyogb2ss
IHdoYXQgYWJvdXQgYW4gYWNjZXB0YWJsZSBhZGRyZXNzIGluIHRoZSBpbnAgKi8KLQlmb3IgKGxh
ZGRyID0gaW5wLT5uZXh0X2FkZHJfdG91c2U7IGxhZGRyOwotCSAgICAgbGFkZHIgPSBMSVNUX05F
WFQobGFkZHIsIHNjdHBfbnh0X2FkZHIpKSB7Ci0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsK
LQkJCS8qIGFkZHJlc3MgaGFzIGJlZW4gcmVtb3ZlZCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJ
aWYgKGxhZGRyLT5hY3Rpb24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgewotCQkJLyogYWRkcmVz
cyBpcyBiZWluZyBkZWxldGVkICovCi0JCQljb250aW51ZTsKLQkJfQotCQlzaWZhID0gc2N0cF9p
c19pZmFfYWRkcl9hY2NlcHRhYmxlKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwKLQkJCQkJCSAg
IGRlc3RfaXNfcHJpdiwgZmFtKTsKLQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwot
CQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwot
CX0KLQlpZiAocmVzZXR0b3RvcCA9PSAwKSB7Ci0JCWlucC0+bmV4dF9hZGRyX3RvdXNlID0gTlVM
TDsKLQkJZ290byBvbmNlX2FnYWluX3RvbzsKLQl9Ci0KLQkvKgotCSAqIG5vIGFkZHJlc3MgYm91
bmQgY2FuIGJlIGEgc291cmNlIGZvciB0aGUgZGVzdGluYXRpb24gd2UgYXJlIGluCi0JICogdHJv
dWJsZQotCSAqLwotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotCi1zdGF0aWMgc3RydWN0IHNjdHBf
aWZhICoKLXNjdHBfY2hvb3NlX2JvdW5kc3BlY2lmaWNfc3RjYihzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLAotCQkJICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgICBzY3RwX3Jv
dXRlX3QgKnJvLAotCQkJICAgICAgIHVpbnQzMl90IHZyZl9pZCwKLQkJCSAgICAgICB1aW50OF90
IGRlc3RfaXNfcHJpdiwKLQkJCSAgICAgICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCSAgICAg
ICBpbnQgbm9uX2Fzb2NfYWRkcl9vaywKLQkJCSAgICAgICBzYV9mYW1pbHlfdCBmYW0pCi17Ci0J
c3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqc3RhcnRpbmdfcG9pbnQ7Ci0Jdm9pZCAqaWZuOwot
CXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYSwg
KnNpZmE7Ci0JdWludDhfdCBzdGFydF9hdF9iZWdpbm5pbmcgPSAwOwotCXN0cnVjdCBzY3RwX3Zy
ZiAqdnJmOwotCXVpbnQzMl90IGlmbl9pbmRleDsKLQotCS8qCi0JICogZmlyc3QgcXVlc3Rpb24s
IGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91ciBsaXN0LCBpZiBzbywgd2UKLQkgKiB3
YW50IHRoYXQgb25lLgotCSAqLwotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAo
dnJmID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlpZm4gPSBTQ1RQX0dFVF9JRk5fVk9J
RF9GUk9NX1JPVVRFKHJvKTsKLQlpZm5faW5kZXggPSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JP
VVRFKHJvKTsKLQlzY3RwX2lmbiA9IHNjdHBfZmluZF9pZm4oIGlmbiwgaWZuX2luZGV4KTsKLQot
CS8qCi0JICogZmlyc3QgcXVlc3Rpb24sIGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91
ciBsaXN0PyAgSWYgc28sCi0JICogd2Ugd2FudCB0aGF0IG9uZS4gRmlyc3Qgd2UgbG9vayBmb3Ig
YSBwcmVmZXJyZWQuIFNlY29uZCwgd2UgZ28KLQkgKiBmb3IgYW4gYWNjZXB0YWJsZS4KLQkgKi8K
LQlpZiAoc2N0cF9pZm4pIHsKLQkJLyogZmlyc3QgdHJ5IGZvciBhIHByZWZlcnJlZCBhZGRyZXNz
IG9uIHRoZSBlcCAqLwotCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZzY3RwX2lmbi0+aWZhbGlz
dCwgbmV4dF9pZmEpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmZGVmIElORVQKLQkJ
CWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCi0JCQkg
ICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAg
ICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7
Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJaWYgKChzY3Rw
X2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCQkgICAgKHByaXNv
bl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAg
ICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKLQkJCQlj
b250aW51ZTsKLQkJCX0KLSNlbmRpZgotI2VuZGlmCi0JCQlpZiAoKHNjdHBfaWZhLT5sb2NhbGlm
YV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmIChub25fYXNvY19hZGRyX29rID09IDAp
KQotCQkJCWNvbnRpbnVlOwotCQkJaWYgKHNjdHBfaXNfYWRkcl9pbl9lcChpbnAsIHNjdHBfaWZh
KSkgewotCQkJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3RwX2lmYSwgZGVz
dF9pc19sb29wLCBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JCQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJ
CQkJY29udGludWU7Ci0JCQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgotCQkJCSAg
ICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKLQkJCQkgICAgKG5v
bl9hc29jX2FkZHJfb2sgJiYKLQkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNi
LCBzaWZhKSkgJiYKLQkJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkp
KSkgewotCQkJCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9
Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQkJCQlyZXR1cm4gKHNp
ZmEpOwotCQkJfQotCQl9Ci0JCS8qIG5leHQgdHJ5IGZvciBhbiBhY2NlcHRhYmxlIGFkZHJlc3Mg
b24gdGhlIGVwICovCi0JCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0
LCBuZXh0X2lmYSkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJ
aWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCSAg
ICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkgICAgICAg
ICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsK
LQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlpZiAoKHNjdHBf
aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJCSAgICAocHJpc29u
X2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgewotCQkJCWNv
bnRpbnVlOwotCQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZh
X2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkp
Ci0JCQkJY29udGludWU7Ci0JCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2N0cF9pZmEp
KSB7Ci0JCQkJc2lmYT0gc2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLCBkZXN0
X2lzX2xvb3AsIGRlc3RfaXNfcHJpdixmYW0pOwotCQkJCWlmIChzaWZhID09IE5VTEwpCi0JCQkJ
CWNvbnRpbnVlOwotCQkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJCQkgICAg
IChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8Ci0JCQkJICAgIChub25f
YXNvY19hZGRyX29rICYmCi0JCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwg
c2lmYSkpICYmCi0JCQkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkp
IHsKLQkJCQkJLyogb24gdGhlIG5vLW5vIGxpc3QgKi8KLQkJCQkJY29udGludWU7Ci0JCQkJfQot
CQkJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7Ci0JCQkJcmV0dXJuIChzaWZh
KTsKLQkJCX0KLQkJfQotCi0JfQotCS8qCi0JICogaWYgd2UgY2FuJ3QgZmluZCBvbmUgbGlrZSB0
aGF0IHRoZW4gd2UgbXVzdCBsb29rIGF0IGFsbAotCSAqIGFkZHJlc3NlcyBib3VuZCB0byBwaWNr
IG9uZSBhdCBmaXJzdCBwcmVmZXJhYmxlIHRoZW4KLQkgKiBzZWNvbmRseSBhY2NlcHRhYmxlLgot
CSAqLwotCXN0YXJ0aW5nX3BvaW50ID0gc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzczsKLSBz
Y3RwX2Zyb21fdGhlX3RvcDoKLQlpZiAoc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9PSBO
VUxMKSB7Ci0JCXN0YXJ0X2F0X2JlZ2lubmluZyA9IDE7Ci0JCXN0Y2ItPmFzb2MubGFzdF91c2Vk
X2FkZHJlc3MgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKLQl9Ci0JLyogc2Vh
cmNoIGJlZ2lubmluZyB3aXRoIHRoZSBsYXN0IHVzZWQgYWRkcmVzcyAqLwotCWZvciAobGFkZHIg
PSBzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzOyBsYWRkcjsKLQkgICAgIGxhZGRyID0gTElT
VF9ORVhUKGxhZGRyLCBzY3RwX254dF9hZGRyKSkgewotCQlpZiAobGFkZHItPmlmYSA9PSBOVUxM
KSB7Ci0JCQkvKiBhZGRyZXNzIGhhcyBiZWVuIHJlbW92ZWQgKi8KLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCWlmIChsYWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKLQkJCS8qIGFk
ZHJlc3MgaXMgYmVpbmcgZGVsZXRlZCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJc2lmYSA9IHNj
dHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwgZGVzdF9p
c19wcml2LCBmYW0pOwotCQlpZiAoc2lmYSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmICgo
KG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0
ZWQoc3RjYiwgc2lmYSkpKSB8fAotCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKLQkJICAgICAo
c2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCi0JCSAgICAgKCFzY3RwX2lz
X2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7Ci0JCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAq
LwotCQkJY29udGludWU7Ci0JCX0KLQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IGxh
ZGRyOwotCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNp
ZmEpOwotCX0KLQlpZiAoc3RhcnRfYXRfYmVnaW5uaW5nID09IDApIHsKLQkJc3RjYi0+YXNvYy5s
YXN0X3VzZWRfYWRkcmVzcyA9IE5VTEw7Ci0JCWdvdG8gc2N0cF9mcm9tX3RoZV90b3A7Ci0JfQot
CS8qIG5vdyB0cnkgZm9yIGFueSBoaWdoZXIgc2NvcGUgdGhhbiB0aGUgZGVzdGluYXRpb24gKi8K
LQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gc3RhcnRpbmdfcG9pbnQ7Ci0Jc3RhcnRf
YXRfYmVnaW5uaW5nID0gMDsKLSBzY3RwX2Zyb21fdGhlX3RvcDI6Ci0JaWYgKHN0Y2ItPmFzb2Mu
bGFzdF91c2VkX2FkZHJlc3MgPT0gTlVMTCkgewotCQlzdGFydF9hdF9iZWdpbm5pbmcgPSAxOwot
CQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fk
ZHJfbGlzdCk7Ci0JfQotCS8qIHNlYXJjaCBiZWdpbm5pbmcgd2l0aCB0aGUgbGFzdCB1c2VkIGFk
ZHJlc3MgKi8KLQlmb3IgKGxhZGRyID0gc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzczsgbGFk
ZHI7Ci0JICAgICBsYWRkciA9IExJU1RfTkVYVChsYWRkciwgc2N0cF9ueHRfYWRkcikpIHsKLQkJ
aWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJLyogYWRkcmVzcyBoYXMgYmVlbiByZW1vdmVk
ICovCi0JCQljb250aW51ZTsKLQkJfQotCQlpZiAobGFkZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9J
UF9BRERSRVNTKSB7Ci0JCQkvKiBhZGRyZXNzIGlzIGJlaW5nIGRlbGV0ZWQgKi8KLQkJCWNvbnRp
bnVlOwotCQl9Ci0JCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFibGUobGFkZHItPmlm
YSwgZGVzdF9pc19sb29wLAotCQkJCQkJICAgZGVzdF9pc19wcml2LCBmYW0pOwotCQlpZiAoc2lm
YSA9PSBOVUxMKQotCQkJY29udGludWU7Ci0JCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkg
JiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAotCQkg
ICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKLQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQo
c3RjYiwgc2lmYSkpICYmCi0JCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZh
KSkpKSB7Ci0JCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJ
c3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IGxhZGRyOwotCQlhdG9taWNfYWRkX2ludCgm
c2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4gKHNpZmEpOwotCX0KLQlpZiAoc3RhcnRfYXRf
YmVnaW5uaW5nID09IDApIHsKLQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9IE5VTEw7
Ci0JCWdvdG8gc2N0cF9mcm9tX3RoZV90b3AyOwotCX0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1z
dGF0aWMgc3RydWN0IHNjdHBfaWZhICoKLXNjdHBfc2VsZWN0X250aF9wcmVmZXJyZWRfYWRkcl9m
cm9tX2lmbl9ib3VuZGFsbChzdHJ1Y3Qgc2N0cF9pZm4gKmlmbiwKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNiICppbnAgU0NUUF9VTlVT
RUQsCi0jZW5kaWYKLQkJCQkJCSBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJCQkgaW50IG5v
bl9hc29jX2FkZHJfb2ssCi0JCQkJCQkgdWludDhfdCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgdWlu
dDhfdCBkZXN0X2lzX3ByaXYsCi0JCQkJCQkgaW50IGFkZHJfd2FudGVkLAotCQkJCQkJIHNhX2Zh
bWlseV90IGZhbSwKLQkJCQkJCSBzY3RwX3JvdXRlX3QgKnJvCi0JCQkJCQkgKQotewotCXN0cnVj
dCBzY3RwX2lmYSAqaWZhLCAqc2lmYTsKLQlpbnQgbnVtX2VsaWdpYmxlX2FkZHIgPSAwOwotI2lm
ZGVmIElORVQ2Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCXN0cnVjdCBzb2NrYWRk
cl9pbjYgc2luNiwgbHNhNjsKLQotCWlmIChmYW0gPT0gQUZfSU5FVDYpIHsKLQkJbWVtY3B5KCZz
aW42LCAmcm8tPnJvX2RzdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBT
Q1RQX0tBTUUKLQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZSgmc2luNik7Ci0jZWxzZQotCQkodm9p
ZClpbjZfcmVjb3ZlcnNjb3BlKCZzaW42LCAmc2luNi5zaW42X2FkZHIsIE5VTEwpOwotI2VuZGlm
ICAvKiBTQ1RQX0tBTUUgKi8KLQl9Ci0jZW5kaWYgIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUg
Ki8KLSNlbmRpZgkvKiBJTkVUNiAqLwotCUxJU1RfRk9SRUFDSChpZmEsICZpZm4tPmlmYWxpc3Qs
IG5leHRfaWZhKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZmRlZiBJTkVUCi0JCWlm
ICgoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkgICAgKHByaXNv
bl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgJmlmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7Ci0JCQljb250aW51ZTsK
LQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJaWYgKChpZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5ID09IEFGX0lORVQ2KSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAu
aW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW42
LnNpbjZfYWRkcikgIT0gMCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNlbmRpZgot
CQlpZiAoKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkg
ICAgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCi0JCQljb250aW51ZTsKLQkJc2lmYSA9IHNjdHBf
aXNfaWZhX2FkZHJfcHJlZmVycmVkKGlmYSwgZGVzdF9pc19sb29wLAotCQkJCQkJICBkZXN0X2lz
X3ByaXYsIGZhbSk7Ci0JCWlmIChzaWZhID09IE5VTEwpCi0JCQljb250aW51ZTsKLSNpZmRlZiBJ
TkVUNgotCQlpZiAoZmFtID09IEFGX0lORVQ2ICYmCi0JCSAgICBkZXN0X2lzX2xvb3AgJiYKLQkJ
ICAgIHNpZmEtPnNyY19pc19sb29wICYmIHNpZmEtPnNyY19pc19wcml2KSB7Ci0JCQkvKiBkb24n
dCBhbGxvdyBmZTgwOjoxIHRvIGJlIGEgc3JjIG9uIGxvb3AgOjoxLCB3ZSBkb24ndCBsaXN0IGl0
Ci0JCQkgKiB0byB0aGUgcGVlciBzbyB3ZSB3aWxsIGdldCBhbiBhYm9ydC4KLQkJCSAqLwotCQkJ
Y29udGludWU7Ci0JCX0KLSNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCi0JCWlmIChmYW0g
PT0gQUZfSU5FVDYgJiYKLQkJICAgIElONl9JU19BRERSX0xJTktMT0NBTCgmc2lmYS0+YWRkcmVz
cy5zaW42LnNpbjZfYWRkcikgJiYKLQkJICAgIElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi5z
aW42X2FkZHIpKSB7Ci0JCQkvKiBsaW5rLWxvY2FsIDwtPiBsaW5rLWxvY2FsIG11c3QgYmVsb25n
IHRvIHRoZSBzYW1lIHNjb3BlLiAqLwotCQkJbWVtY3B5KCZsc2E2LCAmc2lmYS0+YWRkcmVzcy5z
aW42LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotI2lmZGVmIFNDVFBfS0FNRQotCQkJ
KHZvaWQpc2E2X3JlY292ZXJzY29wZSgmbHNhNik7Ci0jZWxzZQotCQkJKHZvaWQpaW42X3JlY292
ZXJzY29wZSgmbHNhNiwgJmxzYTYuc2luNl9hZGRyLCBOVUxMKTsKLSNlbmRpZiAgLyogU0NUUF9L
QU1FICovCi0JCQlpZiAoc2luNi5zaW42X3Njb3BlX2lkICE9IGxzYTYuc2luNl9zY29wZV9pZCkg
ewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0jZW5kaWYgIC8qIFNDVFBfRU1CRURERURfVjZf
U0NPUEUgKi8KLSNlbmRpZgkvKiBJTkVUNiAqLwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJLyogQ2hl
Y2sgaWYgdGhlIElQdjYgYWRkcmVzcyBtYXRjaGVzIHRvIG5leHQtaG9wLgotCQkgICBJbiB0aGUg
bW9iaWxlIGNhc2UsIG9sZCBJUHY2IGFkZHJlc3MgbWF5IGJlIG5vdCBkZWxldGVkCi0JCSAgIGZy
b20gdGhlIGludGVyZmFjZS4gVGhlbiwgdGhlIGludGVyZmFjZSBoYXMgcHJldmlvdXMgYW5kCi0J
CSAgIG5ldyBhZGRyZXNzZXMuICBXZSBzaG91bGQgdXNlIG9uZSBjb3JyZXNwb25kaW5nIHRvIHRo
ZQotCQkgICBuZXh0LWhvcC4gIChieSBtaWNjaGllKQotCQkgKi8KLSNpZmRlZiBJTkVUNgotCQlp
ZiAoc3RjYiAmJiBmYW0gPT0gQUZfSU5FVDYgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVh
dHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX01PQklMSVRZX0JBU0UpKSB7Ci0JCQlpZiAoc2N0
cF92NnNyY19tYXRjaF9uZXh0aG9wKCZzaWZhLT5hZGRyZXNzLnNpbjYsIHJvKQotCQkJICAgID09
IDApIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVAotCQkv
KiBBdm9pZCB0b3BvbG9naWNhbGx5IGluY29ycmVjdCBJUHY0IGFkZHJlc3MgKi8KLQkJaWYgKHN0
Y2IgJiYgZmFtID09IEFGX0lORVQgJiYKLQkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9v
bihzdGNiLT5zY3RwX2VwLCBTQ1RQX01PQklMSVRZX0JBU0UpKSB7Ci0JCQlpZiAoc2N0cF92NHNy
Y19tYXRjaF9uZXh0aG9wKHNpZmEsIHJvKSA9PSAwKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0J
CX0KLSNlbmRpZgotI2VuZGlmCi0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoc2N0cF9pc19hZGRyZXNz
X2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCWlmICgoKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKLQkJCSAgICAgKHNj
dHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKLQkJCSAgICAobm9uX2Fzb2Nf
YWRkcl9vayAmJgotCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkp
ICYmCi0JCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgewotCQkJ
CS8qCi0JCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZSByZWFzb24uLgotCQkJCSAqIHBy
b2JhYmx5IG5vdCB5ZXQgYWRkZWQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0K
LQkJaWYgKG51bV9lbGlnaWJsZV9hZGRyID49IGFkZHJfd2FudGVkKSB7Ci0JCQlyZXR1cm4gKHNp
ZmEpOwotCQl9Ci0JCW51bV9lbGlnaWJsZV9hZGRyKys7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19
Ci0KLQotc3RhdGljIGludAotc2N0cF9jb3VudF9udW1fcHJlZmVycmVkX2JvdW5kYWxsKHN0cnVj
dCBzY3RwX2lmbiAqaWZuLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSNlbHNlCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCBTQ1RQ
X1VOVVNFRCwKLSNlbmRpZgotCQkJCSAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJCSAgaW50
IG5vbl9hc29jX2FkZHJfb2ssCi0JCQkJICB1aW50OF90IGRlc3RfaXNfbG9vcCwKLQkJCQkgIHVp
bnQ4X3QgZGVzdF9pc19wcml2LAotCQkJCSAgc2FfZmFtaWx5X3QgZmFtKQotewotCXN0cnVjdCBz
Y3RwX2lmYSAqaWZhLCAqc2lmYTsKLQlpbnQgbnVtX2VsaWdpYmxlX2FkZHIgPSAwOwotCi0JTElT
VF9GT1JFQUNIKGlmYSwgJmlmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotI2lmZGVmIElORVQKLQkJaWYgKChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5
ID09IEFGX0lORVQpICYmCi0JCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbi5zaW5f
YWRkcikgIT0gMCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgot
CQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCSAgICAo
c3RjYiAhPSBOVUxMKSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgJmlmYS0+YWRkcmVzcy5zaW42LnNp
bjZfYWRkcikgIT0gMCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQlp
ZiAoKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkgICAg
KG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCXNpZmEgPSBz
Y3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChpZmEsIGRlc3RfaXNfbG9vcCwKLQkJCQkJCSAgZGVz
dF9pc19wcml2LCBmYW0pOwotCQlpZiAoc2lmYSA9PSBOVUxMKSB7Ci0JCQljb250aW51ZTsKLQkJ
fQotCQlpZiAoc3RjYikgewotCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShpZmEsICZz
dGNiLT5hc29jLnNjb3BlLCAwKSA9PSAwKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlpZiAo
KChub25fYXNvY19hZGRyX29rID09IDApICYmCi0JCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJp
Y3RlZChzdGNiLCBzaWZhKSkpIHx8Ci0JCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKLQkJCSAg
ICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgotCQkJICAgICAoIXNj
dHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKLQkJCQkvKgotCQkJCSAqIEl0IGlz
IHJlc3RyaWN0ZWQgZm9yIHNvbWUgcmVhc29uLi4KLQkJCQkgKiBwcm9iYWJseSBub3QgeWV0IGFk
ZGVkLgotCQkJCSAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCW51bV9lbGlnaWJsZV9h
ZGRyKys7Ci0JfQotCXJldHVybiAobnVtX2VsaWdpYmxlX2FkZHIpOwotfQotCi1zdGF0aWMgc3Ry
dWN0IHNjdHBfaWZhICoKLXNjdHBfY2hvb3NlX2JvdW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAotCQkgICAgIHNjdHBfcm91dGVfdCAqcm8sCi0JCSAgICAg
dWludDMyX3QgdnJmX2lkLAotCQkgICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAotCQkgICAgIHVp
bnQ4X3QgZGVzdF9pc19sb29wLAotCQkgICAgIGludCBub25fYXNvY19hZGRyX29rLAotCQkgICAg
IHNhX2ZhbWlseV90IGZhbSkKLXsKLQlpbnQgY3VyX2FkZHJfbnVtID0gMCwgbnVtX3ByZWZlcnJl
ZCA9IDA7Ci0Jdm9pZCAqaWZuOwotCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm4sICpsb29rZWRf
YXQgPSBOVUxMLCAqZW1pdF9pZm47Ci0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYSwgKnNpZmE7
Ci0JdWludDMyX3QgaWZuX2luZGV4OwotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotI2lmZGVmIElO
RVQKLQlpbnQgcmV0cmllZCA9IDA7Ci0jZW5kaWYKLQotCS8qLQotCSAqIEZvciBib3VuZGFsbCB3
ZSBjYW4gdXNlIGFueSBhZGRyZXNzIGluIHRoZSBhc3NvY2lhdGlvbi4KLQkgKiBJZiBub25fYXNv
Y19hZGRyX29rIGlzIHNldCB3ZSBjYW4gdXNlIGFueSBhZGRyZXNzIChhdCBsZWFzdCBpbgotCSAq
IHRoZW9yeSkuIFNvIHdlIGxvb2sgZm9yIHByZWZlcnJlZCBhZGRyZXNzZXMgZmlyc3QuIElmIHdl
IGZpbmQgb25lLAotCSAqIHdlIHVzZSBpdC4gT3RoZXJ3aXNlIHdlIG5leHQgdHJ5IHRvIGdldCBh
biBhZGRyZXNzIG9uIHRoZQotCSAqIGludGVyZmFjZSwgd2hpY2ggd2Ugc2hvdWxkIGJlIGFibGUg
dG8gZG8gKHVubGVzcyBub25fYXNvY19hZGRyX29rCi0JICogaXMgZmFsc2UgYW5kIHdlIGFyZSBy
b3V0ZWQgb3V0IHRoYXQgd2F5KS4gSW4gdGhlc2UgY2FzZXMgd2hlcmUgd2UKLQkgKiBjYW4ndCB1
c2UgdGhlIGFkZHJlc3Mgb2YgdGhlIGludGVyZmFjZSB3ZSBnbyB0aHJvdWdoIGFsbCB0aGUKLQkg
KiBpZm4ncyBsb29raW5nIGZvciBhbiBhZGRyZXNzIHdlIGNhbiB1c2UgYW5kIGZpbGwgdGhhdCBp
bi4gUHVudGluZwotCSAqIG1lYW5zIHdlIHNlbmQgYmFjayBhZGRyZXNzIDAsIHdoaWNoIHdpbGwg
cHJvYmFibHkgY2F1c2UgcHJvYmxlbXMKLQkgKiBhY3R1YWxseSBzaW5jZSB0aGVuIElQIHdpbGwg
ZmlsbCBpbiB0aGUgYWRkcmVzcyBvZiB0aGUgcm91dGUgaWZuLAotCSAqIHdoaWNoIG1lYW5zIHdl
IHByb2JhYmx5IGFscmVhZHkgcmVqZWN0ZWQgaXQuLiBpLmUuIGhlcmUgY29tZXMgYW4KLQkgKiBh
Ym9ydCA6LTwuCi0JICovCi0JdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYg
PT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCWlmbiA9IFNDVFBfR0VUX0lGTl9WT0lEX0ZS
T01fUk9VVEUocm8pOwotCWlmbl9pbmRleCA9IFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUo
cm8pOwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJpZm4gZnJvbSByb3V0ZTolcCBpZm5f
aW5kZXg6JWRcbiIsIGlmbiwgaWZuX2luZGV4KTsKLQllbWl0X2lmbiA9IGxvb2tlZF9hdCA9IHNj
dHBfaWZuID0gc2N0cF9maW5kX2lmbihpZm4sIGlmbl9pbmRleCk7Ci0JaWYgKHNjdHBfaWZuID09
IE5VTEwpIHsKLQkJLyogPz8gV2UgZG9uJ3QgaGF2ZSB0aGlzIGd1eSA/PyAqLwotCQlTQ1RQREJH
KFNDVFBfREVCVUdfT1VUUFVUMiwiTm8gaWZuIGVtaXQgaW50ZXJmYWNlP1xuIik7Ci0JCWdvdG8g
Ym91bmRfYWxsX3BsYW5fYjsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsImlmbl9p
bmRleDolZCBuYW1lOiVzIGlzIGVtaXQgaW50ZXJmYWNlXG4iLAotCQlpZm5faW5kZXgsIHNjdHBf
aWZuLT5pZm5fbmFtZSk7Ci0KLQlpZiAobmV0KSB7Ci0JCWN1cl9hZGRyX251bSA9IG5ldC0+aW5k
eF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZTsKLQl9Ci0JbnVtX3ByZWZlcnJlZCA9IHNjdHBfY291
bnRfbnVtX3ByZWZlcnJlZF9ib3VuZGFsbChzY3RwX2lmbiwKLQkJCQkJCQkgIGlucCwgc3RjYiwK
LQkJCQkJCQkgIG5vbl9hc29jX2FkZHJfb2ssCi0JCQkJCQkJICBkZXN0X2lzX2xvb3AsCi0JCQkJ
CQkJICBkZXN0X2lzX3ByaXYsIGZhbSk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJG
b3VuZCAlZCBwcmVmZXJyZWQgc291cmNlIGFkZHJlc3NlcyBmb3IgaW50Zjolc1xuIiwKLQkJbnVt
X3ByZWZlcnJlZCwgc2N0cF9pZm4tPmlmbl9uYW1lKTsKLQlpZiAobnVtX3ByZWZlcnJlZCA9PSAw
KSB7Ci0JCS8qCi0JCSAqIG5vIGVsaWdpYmxlIGFkZHJlc3Nlcywgd2UgbXVzdCB1c2Ugc29tZSBv
dGhlciBpbnRlcmZhY2UKLQkJICogYWRkcmVzcyBpZiB3ZSBjYW4gZmluZCBvbmUuCi0JCSAqLwot
CQlnb3RvIGJvdW5kX2FsbF9wbGFuX2I7Ci0JfQotCS8qCi0JICogT2sgd2UgaGF2ZSBudW1fZWxp
Z2libGVfYWRkciBzZXQgd2l0aCBob3cgbWFueSB3ZSBjYW4gdXNlLCB0aGlzCi0JICogbWF5IHZh
cnkgZnJvbSBjYWxsIHRvIGNhbGwgZHVlIHRvIGFkZHJlc3NlcyBiZWluZyBkZXByZWNhdGVkCi0J
ICogZXRjLi4KLQkgKi8KLQlpZiAoY3VyX2FkZHJfbnVtID49IG51bV9wcmVmZXJyZWQpIHsKLQkJ
Y3VyX2FkZHJfbnVtID0gMDsKLQl9Ci0JLyoKLQkgKiBzZWxlY3QgdGhlIG50aCBhZGRyZXNzIGZy
b20gdGhlIGxpc3QgKHdoZXJlIGN1cl9hZGRyX251bSBpcyB0aGUKLQkgKiBudGgpIGFuZCAwIGlz
IHRoZSBmaXJzdCBvbmUsIDEgaXMgdGhlIHNlY29uZCBvbmUgZXRjLi4uCi0JICovCi0JU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDIsICJjdXJfYWRkcl9udW06JWRcbiIsIGN1cl9hZGRyX251bSk7
Ci0KLQlzY3RwX2lmYSA9IHNjdHBfc2VsZWN0X250aF9wcmVmZXJyZWRfYWRkcl9mcm9tX2lmbl9i
b3VuZGFsbChzY3RwX2lmbiwgaW5wLCBzdGNiLCBub25fYXNvY19hZGRyX29rLCBkZXN0X2lzX2xv
b3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgY3VyX2FkZHJfbnVtLCBmYW0sIHJvKTsKLQot
CS8qIGlmIHNjdHBfaWZhIGlzIE5VTEwgc29tZXRoaW5nIGNoYW5nZWQ/PywgZmFsbCB0byBwbGFu
IGIuICovCi0JaWYgKHNjdHBfaWZhKSB7Ci0JCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYS0+cmVm
Y291bnQsIDEpOwotCQlpZiAobmV0KSB7Ci0JCQkvKiBzYXZlIG9mZiB3aGVyZSB0aGUgbmV4dCBv
bmUgd2Ugd2lsbCB3YW50ICovCi0JCQluZXQtPmluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2Ug
PSBjdXJfYWRkcl9udW0gKyAxOwotCQl9Ci0JCXJldHVybiAoc2N0cF9pZmEpOwotCX0KLQkvKgot
CSAqIHBsYW5fYjogTG9vayBhdCBhbGwgaW50ZXJmYWNlcyBhbmQgZmluZCBhIHByZWZlcnJlZCBh
ZGRyZXNzLiBJZgotCSAqIG5vIHByZWZlcnJlZCBmYWxsIHRocm91Z2ggdG8gcGxhbl9jLgotCSAq
LwotIGJvdW5kX2FsbF9wbGFuX2I6Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJUcnlp
bmcgUGxhbiBCXG4iKTsKLQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5l
eHRfaWZuKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiRXhhbWluZSBpbnRlcmZh
Y2UgJXNcbiIsCi0JCQlzY3RwX2lmbi0+aWZuX25hbWUpOwotCQlpZiAoZGVzdF9pc19sb29wID09
IDAgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7Ci0JCQkvKiB3cm9uZyBiYXNl
IHNjb3BlICovCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInNraXBcbiIpOwotCQkJ
Y29udGludWU7Ci0JCX0KLQkJaWYgKChzY3RwX2lmbiA9PSBsb29rZWRfYXQpICYmIGxvb2tlZF9h
dCkgewotCQkJLyogYWxyZWFkeSBsb29rZWQgYXQgdGhpcyBndXkgKi8KLQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQyLCAiYWxyZWFkeSBzZWVuXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0J
CW51bV9wcmVmZXJyZWQgPSBzY3RwX2NvdW50X251bV9wcmVmZXJyZWRfYm91bmRhbGwoc2N0cF9p
Zm4sIGlucCwgc3RjYiwgbm9uX2Fzb2NfYWRkcl9vaywKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfbG9vcCwg
ZGVzdF9pc19wcml2LCBmYW0pOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwKLQkJCSJG
b3VuZCBpZm46JXAgJWQgcHJlZmVycmVkIHNvdXJjZSBhZGRyZXNzZXNcbiIsCi0JCQlpZm4sIG51
bV9wcmVmZXJyZWQpOwotCQlpZiAobnVtX3ByZWZlcnJlZCA9PSAwKSB7Ci0JCQkvKiBOb25lIG9u
IHRoaXMgaW50ZXJmYWNlLiAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJObyBw
cmVmZXJyZWQgLS0gc2tpcHBpbmcgdG8gbmV4dFxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwKLQkJCSJudW0gcHJlZmVycmVkOiVkIG9uIGludGVy
ZmFjZTolcCBjdXJfYWRkcl9udW06JWRcbiIsCi0JCQludW1fcHJlZmVycmVkLCAodm9pZCAqKXNj
dHBfaWZuLCBjdXJfYWRkcl9udW0pOwotCi0JCS8qCi0JCSAqIE9rIHdlIGhhdmUgbnVtX2VsaWdp
YmxlX2FkZHIgc2V0IHdpdGggaG93IG1hbnkgd2UgY2FuCi0JCSAqIHVzZSwgdGhpcyBtYXkgdmFy
eSBmcm9tIGNhbGwgdG8gY2FsbCBkdWUgdG8gYWRkcmVzc2VzCi0JCSAqIGJlaW5nIGRlcHJlY2F0
ZWQgZXRjLi4KLQkJICovCi0JCWlmIChjdXJfYWRkcl9udW0gPj0gbnVtX3ByZWZlcnJlZCkgewot
CQkJY3VyX2FkZHJfbnVtID0gMDsKLQkJfQotCQlzaWZhID0gc2N0cF9zZWxlY3RfbnRoX3ByZWZl
cnJlZF9hZGRyX2Zyb21faWZuX2JvdW5kYWxsKHNjdHBfaWZuLCBpbnAsIHN0Y2IsIG5vbl9hc29j
X2FkZHJfb2ssIGRlc3RfaXNfbG9vcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgY3Vy
X2FkZHJfbnVtLCBmYW0sIHJvKTsKLQkJaWYgKHNpZmEgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwot
CQlpZiAobmV0KSB7Ci0JCQluZXQtPmluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2UgPSBjdXJf
YWRkcl9udW0gKyAxOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJ3ZSBzZWxlY3Rl
ZCAlZFxuIiwKLQkJCQljdXJfYWRkcl9udW0pOwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDIsICJTb3VyY2U6Iik7Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmc2lm
YS0+YWRkcmVzcy5zYSk7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkRlc3Q6Iik7
Ci0JCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAmbmV0LT5yby5fbF9hZGRyLnNh
KTsKLQkJfQotCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlyZXR1cm4g
KHNpZmEpOwotCX0KLSNpZmRlZiBJTkVUCi1hZ2Fpbl93aXRoX3ByaXZhdGVfYWRkcmVzc2VzX2Fs
bG93ZWQ6Ci0jZW5kaWYKLQkvKiBwbGFuX2M6IGRvIHdlIGhhdmUgYW4gYWNjZXB0YWJsZSBhZGRy
ZXNzIG9uIHRoZSBlbWl0IGludGVyZmFjZSAqLwotCXNpZmEgPSBOVUxMOwotCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQyLCJUcnlpbmcgUGxhbiBDOiBmaW5kIGFjY2VwdGFibGUgb24gaW50ZXJm
YWNlXG4iKTsKLQlpZiAoZW1pdF9pZm4gPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMiwiSnVtcCB0byBQbGFuIEQgLSBubyBlbWl0X2lmblxuIik7Ci0JCWdvdG8gcGxhbl9k
OwotCX0KLQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmEsICZlbWl0X2lmbi0+aWZhbGlzdCwgbmV4dF9p
ZmEpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJpZmE6JXBcbiIsICh2b2lkICop
c2N0cF9pZmEpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQlpZiAo
KHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkgICAgKHBy
aXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAg
ICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKLQkJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCJKYWlsZWRcbiIpOwotCQkJY29udGludWU7Ci0JCX0K
LSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFt
aWx5ID09IEFGX0lORVQ2KSAmJgotCQkgICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAu
aW5wLmlucF9jcmVkLAotCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNz
LnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIs
IkphaWxlZFxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotI2VuZGlmCi0jZW5kaWYKLQkJaWYgKChz
Y3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJgotCQkgICAg
KG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQy
LCJEZWZlclxuIik7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzaWZhID0gc2N0cF9pc19pZmFfYWRk
cl9hY2NlcHRhYmxlKHNjdHBfaWZhLCBkZXN0X2lzX2xvb3AsCi0JCQkJCQkgICBkZXN0X2lzX3By
aXYsIGZhbSk7Ci0JCWlmIChzaWZhID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQyLCAiSUZBIG5vdCBhY2NlcHRhYmxlXG4iKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlm
IChzdGNiKSB7Ci0JCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKHNpZmEsICZzdGNiLT5h
c29jLnNjb3BlLCAwKSA9PSAwKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJO
T1QgaW4gc2NvcGVcbiIpOwotCQkJCXNpZmEgPSBOVUxMOwotCQkJCWNvbnRpbnVlOwotCQkJfQot
CQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgotCQkJICAgICAoc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAotCQkJICAgIChub25fYXNvY19hZGRyX29rICYm
Ci0JCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKLQkJCSAg
ICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7Ci0JCQkJLyoKLQkJCQkg
KiBJdCBpcyByZXN0cmljdGVkIGZvciBzb21lCi0JCQkJICogcmVhc29uLi4gcHJvYmFibHkgbm90
IHlldCBhZGRlZC4KLQkJCQkgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkl0
cyByZXN0cmljdGVkXG4iKTsKLQkJCQlzaWZhID0gTlVMTDsKLQkJCQljb250aW51ZTsKLQkJCX0K
LQkJfQotCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOwotCQlnb3RvIG91dDsK
LQl9Ci0gcGxhbl9kOgotCS8qCi0JICogcGxhbl9kOiBXZSBhcmUgaW4gdHJvdWJsZS4gTm8gcHJl
ZmVycmVkIGFkZHJlc3Mgb24gdGhlIGVtaXQKLQkgKiBpbnRlcmZhY2UuIEFuZCBub3QgZXZlbiBh
IHByZWZlcnJlZCBhZGRyZXNzIG9uIGFsbCBpbnRlcmZhY2VzLgotCSAqIEdvIG91dCBhbmQgc2Vl
IGlmIHdlIGNhbiBmaW5kIGFuIGFjY2VwdGFibGUgYWRkcmVzcyBzb21ld2hlcmUKLQkgKiBhbW9u
Z3N0IGFsbCBpbnRlcmZhY2VzLgotCSAqLwotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAi
VHJ5aW5nIFBsYW4gRCBsb29rZWRfYXQgaXMgJXBcbiIsICh2b2lkICopbG9va2VkX2F0KTsKLQlM
SVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCWlmIChk
ZXN0X2lzX2xvb3AgPT0gMCAmJiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKLQkJ
CS8qIHdyb25nIGJhc2Ugc2NvcGUgKi8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCUxJU1RfRk9SRUFD
SChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgewotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5z
YV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5h
ZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9
PSBBRl9JTkVUNikgJiYKLQkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNp
bjYuc2luNl9hZGRyKSAhPSAwKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotI2VuZGlmCi0jZW5k
aWYKLQkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VT
RSkgJiYKLQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKLQkJCQljb250aW51ZTsKLQkJ
CXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFibGUoc2N0cF9pZmEsCi0JCQkJCQkJICAg
ZGVzdF9pc19sb29wLAotCQkJCQkJCSAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKLQkJCWlmIChzaWZh
ID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoc3RjYikgewotCQkJCWlmIChzY3RwX2lz
X2FkZHJlc3NfaW5fc2NvcGUoc2lmYSwgJnN0Y2ItPmFzb2Muc2NvcGUsIDApID09IDApIHsKLQkJ
CQkJc2lmYSA9IE5VTEw7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlpZiAoKChub25fYXNv
Y19hZGRyX29rID09IDApICYmCi0JCQkJICAgICAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3Rj
Yiwgc2lmYSkpKSB8fAotCQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgotCQkJCSAgICAgKHNj
dHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgotCQkJCSAgICAgKCFzY3RwX2lz
X2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEl0IGlzIHJl
c3RyaWN0ZWQgZm9yIHNvbWUKLQkJCQkJICogcmVhc29uLi4gcHJvYmFibHkgbm90IHlldCBhZGRl
ZC4KLQkJCQkJICovCi0JCQkJCXNpZmEgPSBOVUxMOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0J
CQl9Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLSNpZmRlZiBJTkVUCi0JaWYgKHN0Y2IpIHsKLQkJ
aWYgKChyZXRyaWVkID09IDApICYmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUg
PT0gMCkpIHsKLQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQly
ZXRyaWVkID0gMTsKLQkJCWdvdG8gYWdhaW5fd2l0aF9wcml2YXRlX2FkZHJlc3Nlc19hbGxvd2Vk
OwotCQl9IGVsc2UgaWYgKHJldHJpZWQgPT0gMSkgewotCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0
X2xvY2FsX3Njb3BlID0gMDsKLQkJfQotCX0KLSNlbmRpZgotb3V0OgotI2lmZGVmIElORVQKLQlp
ZiAoc2lmYSkgewotCQlpZiAocmV0cmllZCA9PSAxKSB7Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9p
Zm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCQkJaWYgKGRlc3RfaXNfbG9vcCA9PSAw
ICYmIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgewotCQkJCQkvKiB3cm9uZyBiYXNl
IHNjb3BlICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlMSVNUX0ZPUkVBQ0goc2N0cF9p
ZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLQkJCQkJc3RydWN0IHNjdHBfaWZh
ICp0bXBfc2lmYTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWZkZWYgSU5FVAotCQkJ
CQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgotCQkJ
CQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0g
MCkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJ
CQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKLQkJ
CQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJ
ICAgICAgICAgICAgICAgICAgICAgICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikg
IT0gMCkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQkJCQlp
ZiAoKHNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCi0J
CQkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl0
bXBfc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShzY3RwX2lmYSwKLQkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19sb29wLAotCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2lzX3ByaXYsIGZhbSk7
Ci0JCQkJCWlmICh0bXBfc2lmYSA9PSBOVUxMKSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQot
CQkJCQlpZiAodG1wX3NpZmEgPT0gc2lmYSkgewotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJ
CQkJaWYgKHN0Y2IpIHsKLQkJCQkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUodG1wX3Np
ZmEsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdGNiLT5hc29jLnNjb3Bl
LCAwKSA9PSAwKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoKChub25f
YXNvY19hZGRyX29rID09IDApICYmCi0JCQkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3Rl
ZChzdGNiLCB0bXBfc2lmYSkpKSB8fAotCQkJCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCi0J
CQkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCB0bXBfc2lmYSkpICYmCi0J
CQkJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgdG1wX3NpZmEpKSkpIHsKLQkJ
CQkJCQkvKgotCQkJCQkJCSAqIEl0IGlzIHJlc3RyaWN0ZWQgZm9yIHNvbWUKLQkJCQkJCQkgKiBy
ZWFzb24uLiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgotCQkJCQkJCSAqLwotCQkJCQkJCWNvbnRp
bnVlOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWlmICgodG1wX3NpZmEtPmFkZHJlc3Muc2luLnNp
bl9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKLQkJCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1Mo
Jih0bXBfc2lmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIpKSkpIHsKLQkJCQkJCXNjdHBfYWRkX2xv
Y2FsX2FkZHJfcmVzdHJpY3RlZChzdGNiLCB0bXBfc2lmYSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9
Ci0JCX0KLQkJYXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKLQl9Ci0jZW5kaWYK
LQlyZXR1cm4gKHNpZmEpOwotfQotCi0KLQotLyogdGNiIG1heSBiZSBOVUxMICovCi1zdHJ1Y3Qg
c2N0cF9pZmEgKgotc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgIHNjdHBf
cm91dGVfdCAqcm8sCi0JCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0JCQkgICAgICBp
bnQgbm9uX2Fzb2NfYWRkcl9vaywgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2lm
YSAqYW5zd2VyOwotCXVpbnQ4X3QgZGVzdF9pc19wcml2LCBkZXN0X2lzX2xvb3A7Ci0Jc2FfZmFt
aWx5X3QgZmFtOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKSZyby0+cm9fZHN0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICp0bzYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyby0+cm9fZHN0
OwotI2VuZGlmCi0KLQkvKioKLQkgKiBSdWxlczoKLQkgKiAtIEZpbmQgdGhlIHJvdXRlIGlmIG5l
ZWRlZCwgY2FjaGUgaWYgSSBjYW4uCi0JICogLSBMb29rIGF0IGludGVyZmFjZSBhZGRyZXNzIGlu
IHJvdXRlLCBJcyBpdCBpbiB0aGUgYm91bmQgbGlzdC4gSWYgc28gd2UKLQkgKiAgIGhhdmUgdGhl
IGJlc3Qgc291cmNlLgotCSAqIC0gSWYgbm90IHdlIG11c3Qgcm90YXRlIGFtb25nc3QgdGhlIGFk
ZHJlc3Nlcy4KLQkgKgotCSAqIENhdmV0cyBhbmQgaXNzdWVzCi0JICoKLQkgKiBEbyB3ZSBuZWVk
IHRvIHBheSBhdHRlbnRpb24gdG8gc2NvcGUuIFdlIGNhbiBoYXZlIGEgcHJpdmF0ZSBhZGRyZXNz
Ci0JICogb3IgYSBnbG9iYWwgYWRkcmVzcyB3ZSBhcmUgc291cmNpbmcgb3Igc2VuZGluZyB0by4g
U28gaWYgd2UgZHJhdwotCSAqIGl0IG91dAotCSAqIHp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6enp6enoKLQkgKiBGb3IgVjQKLQkgKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiAgICAgIHNvdXJjZSAgICAgKiAg
ICAgIGRlc3QgICogIHJlc3VsdAotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0JICogPGE+ICBQcml2YXRlICAgICogICAgR2xvYmFsICAqICBOQVQKLQkgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIDxiPiAgUHJpdmF0
ZSAgICAqICAgIFByaXZhdGUgKiAgTm8gcHJvYmxlbQotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogPGM+ICBHbG9iYWwgICAgICogICAgUHJpdmF0ZSAq
ICBIdWgsIEhvdyB3aWxsIHRoaXMgd29yaz8KLQkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQotCSAqIDxkPiAgR2xvYmFsICAgICAqICAgIEdsb2JhbCAgKiAgTm8g
UHJvYmxlbQotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0J
ICogenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
egotCSAqIEZvciBWNgotCSAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0JICogICAgICBzb3VyY2UgICAgICogICAgICBkZXN0ICAqICByZXN1bHQKLQkgKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqIDxhPiAgTGlua2xvY2Fs
ICAqICAgIEdsb2JhbCAgKgotCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0JICogPGI+ICBMaW5rbG9jYWwgICogTGlua2xvY2FsICAqICBObyBwcm9ibGVtCi0J
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiA8Yz4gIEds
b2JhbCAgICAgKiBMaW5rbG9jYWwgICogIEh1aCwgSG93IHdpbGwgdGhpcyB3b3JrPwotCSAqIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0JICogPGQ+ICBHbG9iYWwg
ICAgICogICAgR2xvYmFsICAqICBObyBQcm9ibGVtCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiB6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6Ci0JICoKLQkgKiBBbmQgdGhlbiB3ZSBhZGQgdG8gdGhh
dCB3aGF0IGhhcHBlbnMgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGFkZHJlc3NlcwotCSAqIGFzc2ln
bmVkIHRvIGFuIGludGVyZmFjZS4gUmVtZW1iZXIgdGhlIGlmYSBvbiBhIGlmbiBpcyBhIGxpbmtl
ZAotCSAqIGxpc3Qgb2YgYWRkcmVzc2VzLiBTbyBvbmUgaW50ZXJmYWNlIGNhbiBoYXZlIG1vcmUg
dGhhbiBvbmUgSVAKLQkgKiBhZGRyZXNzLiBXaGF0IGhhcHBlbnMgaWYgd2UgaGF2ZSBib3RoIGEg
cHJpdmF0ZSBhbmQgYSBnbG9iYWwKLQkgKiBhZGRyZXNzPyBEbyB3ZSB0aGVuIHVzZSBjb250ZXh0
IG9mIGRlc3RpbmF0aW9uIHRvIHNvcnQgb3V0IHdoaWNoCi0JICogb25lIGlzIGJlc3Q/IEFuZCB3
aGF0IGFib3V0IE5BVCdzIHNlbmRpbmcgUC0+RyBtYXkgZ2V0IHlvdSBhIE5BVAotCSAqIHRyYW5z
bGF0aW9uLCBvciBzaG91bGQgeW91IHNlbGVjdCB0aGUgRyB0aGF0cyBvbiB0aGUgaW50ZXJmYWNl
IGluCi0JICogcHJlZmVyZW5jZS4KLQkgKgotCSAqIERlY2lzaW9uczoKLQkgKgotCSAqIC0gY291
bnQgdGhlIG51bWJlciBvZiBhZGRyZXNzZXMgb24gdGhlIGludGVyZmFjZS4KLQkgKiAtIGlmIGl0
IGlzIG9uZSwgbm8gcHJvYmxlbSBleGNlcHQgY2FzZSA8Yz4uCi0JICogICBGb3IgPGE+IHdlIHdp
bGwgYXNzdW1lIGEgTkFUIG91dCB0aGVyZS4KLQkgKiAtIGlmIHRoZXJlIGFyZSBtb3JlIHRoYW4g
b25lLCB0aGVuIHdlIG5lZWQgdG8gd29ycnkgYWJvdXQgc2NvcGUgUAotCSAqICAgb3IgRy4gV2Ug
c2hvdWxkIHByZWZlciBHIC0+IEcgYW5kIFAgLT4gUCBpZiBwb3NzaWJsZS4KLQkgKiAgIFRoZW4g
YXMgYSBzZWNvbmRhcnkgZmFsbCBiYWNrIHRvIG1peGVkIHR5cGVzIEctPlAgYmVpbmcgYSBsYXN0
Ci0JICogICBkaXRjaCBvbmUuCi0JICogLSBUaGUgYWJvdmUgYWxsIHdvcmtzIGZvciBib3VuZCBh
bGwsIGJ1dCBib3VuZCBzcGVjaWZpYyB3ZSBuZWVkIHRvCi0JICogICB1c2UgdGhlIHNhbWUgY29u
Y2VwdCBidXQgaW5zdGVhZCBvbmx5IGNvbnNpZGVyIHRoZSBib3VuZAotCSAqICAgYWRkcmVzc2Vz
LiBJZiB0aGUgYm91bmQgc2V0IGlzIE5PVCBhc3NpZ25lZCB0byB0aGUgaW50ZXJmYWNlIHRoZW4K
LQkgKiAgIHdlIG11c3QgdXNlIHJvdGF0aW9uIGFtb25nc3QgdGhlIGJvdW5kIGFkZHJlc3Nlcy4u
Ci0JICovCi0JaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIE5lZWQgYSByb3V0
ZSB0byBjYWNoZS4KLQkJICovCi0JCVNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51
bSk7Ci0JfQotCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0K
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JLyogT24gV2luZG93cyB0aGUg
c2FfZmFtaWx5IGlzIFVfU0hPUlQgb3IgQUREUkVTU19GQU1JTFkgKi8KLQlmYW0gPSAoc2FfZmFt
aWx5X3Qpcm8tPnJvX2RzdC5zYV9mYW1pbHk7Ci0jZWxzZQotCWZhbSA9IHJvLT5yb19kc3Quc2Ff
ZmFtaWx5OwotI2VuZGlmCi0JZGVzdF9pc19wcml2ID0gZGVzdF9pc19sb29wID0gMDsKLQkvKiBT
ZXR1cCBvdXIgc2NvcGVzIGZvciB0aGUgZGVzdGluYXRpb24gKi8KLQlzd2l0Y2ggKGZhbSkgewot
I2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCS8qIFNjb3BlIGJhc2VkIG9uIG91dGJvdW5k
IGFkZHJlc3MgKi8KLQkJaWYgKElONF9JU0xPT1BCQUNLX0FERFJFU1MoJnRvLT5zaW5fYWRkcikp
IHsKLQkJCWRlc3RfaXNfbG9vcCA9IDE7Ci0JCQlpZiAobmV0ICE9IE5VTEwpIHsKLQkJCQkvKiBt
YXJrIGl0IGFzIGxvY2FsICovCi0JCQkJbmV0LT5hZGRyX2lzX2xvY2FsID0gMTsKLQkJCX0KLQkJ
fSBlbHNlIGlmICgoSU40X0lTUFJJVkFURV9BRERSRVNTKCZ0by0+c2luX2FkZHIpKSkgewotCQkJ
ZGVzdF9pc19wcml2ID0gMTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
Y2FzZSBBRl9JTkVUNjoKLQkJLyogU2NvcGUgYmFzZWQgb24gb3V0Ym91bmQgYWRkcmVzcyAqLwot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJaWYgKElONl9JU19BRERSX0xP
T1BCQUNLKCZ0bzYtPnNpbjZfYWRkcikpIHsKLSNlbHNlCi0JCWlmIChJTjZfSVNfQUREUl9MT09Q
QkFDSygmdG82LT5zaW42X2FkZHIpIHx8Ci0JCSAgICBTQ1RQX1JPVVRFX0lTX1JFQUxfTE9PUChy
bykpIHsKLSNlbmRpZgotCQkJLyoKLQkJCSAqIElmIHRoZSBhZGRyZXNzIGlzIGEgbG9vcGJhY2sg
YWRkcmVzcywgd2hpY2gKLQkJCSAqIGNvbnNpc3RzIG9mICI6OjEiIE9SICJmZTgwOjoxJWxvMCIs
IHdlIGFyZSBsb29wYmFjawotCQkJICogc2NvcGUuIEJ1dCB3ZSBkb24ndCB1c2UgZGVzdF9pc19w
cml2IChsaW5rIGxvY2FsCi0JCQkgKiBhZGRyZXNzZXMpLgotCQkJICovCi0JCQlkZXN0X2lzX2xv
b3AgPSAxOwotCQkJaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCQkJLyogbWFyayBpdCBhcyBsb2NhbCAq
LwotCQkJCW5ldC0+YWRkcl9pc19sb2NhbCA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSBpZiAoSU42X0lT
X0FERFJfTElOS0xPQ0FMKCZ0bzYtPnNpbjZfYWRkcikpIHsKLQkJCWRlc3RfaXNfcHJpdiA9IDE7
Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIs
ICJTZWxlY3Qgc291cmNlIGFkZHIgZm9yOiIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09V
VFBVVDIsIChzdHJ1Y3Qgc29ja2FkZHIgKikmcm8tPnJvX2RzdCk7Ci0JU0NUUF9JUElfQUREUl9S
TE9DSygpOwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkg
ewotCQkvKgotCQkgKiBCb3VuZCBhbGwgY2FzZQotCQkgKi8KLQkJYW5zd2VyID0gc2N0cF9jaG9v
c2VfYm91bmRhbGwoaW5wLCBzdGNiLCBuZXQsIHJvLCB2cmZfaWQsCi0JCQkJCSAgICAgIGRlc3Rf
aXNfcHJpdiwgZGVzdF9pc19sb29wLAotCQkJCQkgICAgICBub25fYXNvY19hZGRyX29rLCBmYW0p
OwotCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQkJcmV0dXJuIChhbnN3ZXIpOwotCX0KLQkv
KgotCSAqIFN1YnNldCBib3VuZCBjYXNlCi0JICovCi0JaWYgKHN0Y2IpIHsKLQkJYW5zd2VyID0g
c2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19zdGNiKGlucCwgc3RjYiwgcm8sCi0JCQkJCQkJdnJm
X2lkLAlkZXN0X2lzX3ByaXYsCi0JCQkJCQkJZGVzdF9pc19sb29wLAotCQkJCQkJCW5vbl9hc29j
X2FkZHJfb2ssIGZhbSk7Ci0JfSBlbHNlIHsKLQkJYW5zd2VyID0gc2N0cF9jaG9vc2VfYm91bmRz
cGVjaWZpY19pbnAoaW5wLCBybywgdnJmX2lkLAotCQkJCQkJICAgICAgIG5vbl9hc29jX2FkZHJf
b2ssCi0JCQkJCQkgICAgICAgZGVzdF9pc19wcml2LAotCQkJCQkJICAgICAgIGRlc3RfaXNfbG9v
cCwgZmFtKTsKLQl9Ci0JU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JcmV0dXJuIChhbnN3ZXIp
OwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2ZpbmRfY21zZyhpbnQgY190eXBlLCB2b2lkICpkYXRh
LCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc2l6ZV90IGNwc2l6ZSkKLXsKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JV1NBQ01TR0hEUiBjbWg7Ci0jZWxzZQotCXN0cnVjdCBj
bXNnaGRyIGNtaDsKLSNlbmRpZgotCWludCB0bGVuLCBhdCwgZm91bmQ7Ci0Jc3RydWN0IHNjdHBf
c25kaW5mbyBzbmRpbmZvOwotCXN0cnVjdCBzY3RwX3ByaW5mbyBwcmluZm87Ci0Jc3RydWN0IHNj
dHBfYXV0aGluZm8gYXV0aGluZm87Ci0KLQl0bGVuID0gU0NUUF9CVUZfTEVOKGNvbnRyb2wpOwot
CWF0ID0gMDsKLQlmb3VuZCA9IDA7Ci0JLyoKLQkgKiBJbmRlcGVuZGVudCBvZiBob3cgbWFueSBt
YnVmcywgZmluZCB0aGUgY190eXBlIGluc2lkZSB0aGUgY29udHJvbAotCSAqIHN0cnVjdHVyZSBh
bmQgY29weSBvdXQgdGhlIGRhdGEuCi0JICovCi0Jd2hpbGUgKGF0IDwgdGxlbikgewotCQlpZiAo
KHRsZW4gLSBhdCkgPCAoaW50KUNNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7Ci0JCQkvKiBUaGVy
ZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIG9uZSBtb3JlLiAqLwotCQkJcmV0dXJuIChmb3VuZCk7
Ci0JCX0KLQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCwgc2l6ZW9mKGNtaCksIChjYWRkcl90KSZj
bWgpOwotCQlpZiAoY21oLmNtc2dfbGVuIDwgQ01TR19BTElHTihzaXplb2YoY21oKSkpIHsKLQkJ
CS8qIFdlIGRvbnQndCBoYXZlIGEgY29tcGxldGUgQ01TRyBoZWFkZXIuICovCi0JCQlyZXR1cm4g
KGZvdW5kKTsKLQkJfQotCQlpZiAoKChpbnQpY21oLmNtc2dfbGVuICsgYXQpID4gdGxlbikgewot
CQkJLyogV2UgZG9uJ3QgaGF2ZSB0aGUgY29tcGxldGUgQ01TRy4gKi8KLQkJCXJldHVybiAoZm91
bmQpOwotCQl9Ci0JCWlmICgoY21oLmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSAmJgotCQkg
ICAgKChjX3R5cGUgPT0gY21oLmNtc2dfdHlwZSkgfHwKLQkJICAgICAoKGNfdHlwZSA9PSBTQ1RQ
X1NORFJDVikgJiYKLQkJICAgICAgKChjbWguY21zZ190eXBlID09IFNDVFBfU05ESU5GTykgfHwK
LQkJICAgICAgIChjbWguY21zZ190eXBlID09IFNDVFBfUFJJTkZPKSB8fAotCQkgICAgICAgKGNt
aC5jbXNnX3R5cGUgPT0gU0NUUF9BVVRISU5GTykpKSkpIHsKLQkJCWlmIChjX3R5cGUgPT0gY21o
LmNtc2dfdHlwZSkgewotCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdO
KHNpemVvZihjbWgpKSkgPCBjcHNpemUpIHsKLQkJCQkJcmV0dXJuIChmb3VuZCk7Ci0JCQkJfQot
CQkJCS8qIEl0IGlzIGV4YWN0bHkgd2hhdCB3ZSB3YW50LiBDb3B5IGl0IG91dC4gKi8KLQkJCQlt
X2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIChpbnQpY3Bz
aXplLCAoY2FkZHJfdClkYXRhKTsKLQkJCQlyZXR1cm4gKDEpOwotCQkJfSBlbHNlIHsKLQkJCQlz
dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzbmRyY3ZpbmZvOwotCi0JCQkJc25kcmN2aW5mbyA9IChz
dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopZGF0YTsKLQkJCQlpZiAoZm91bmQgPT0gMCkgewotCQkJ
CQlpZiAoY3BzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKSB7Ci0JCQkJCQly
ZXR1cm4gKGZvdW5kKTsKLQkJCQkJfQotCQkJCQltZW1zZXQoc25kcmN2aW5mbywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKLQkJCQl9Ci0JCQkJc3dpdGNoIChjbWguY21zZ190
eXBlKSB7Ci0JCQkJY2FzZSBTQ1RQX1NORElORk86Ci0JCQkJCWlmICgoc2l6ZV90KShjbWguY21z
Z19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IHNjdHBfc25k
aW5mbykpIHsKLQkJCQkJCXJldHVybiAoZm91bmQpOwotCQkJCQl9Ci0JCQkJCW1fY29weWRhdGEo
Y29udHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3NuZGluZm8pLCAoY2FkZHJfdCkmc25kaW5mbyk7Ci0JCQkJCXNuZHJjdmluZm8tPnNpbmZvX3N0
cmVhbSA9IHNuZGluZm8uc25kX3NpZDsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fZmxhZ3MgPSBz
bmRpbmZvLnNuZF9mbGFnczsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fcHBpZCA9IHNuZGluZm8u
c25kX3BwaWQ7Ci0JCQkJCXNuZHJjdmluZm8tPnNpbmZvX2NvbnRleHQgPSBzbmRpbmZvLnNuZF9j
b250ZXh0OwotCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19hc3NvY19pZCA9IHNuZGluZm8uc25kX2Fz
c29jX2lkOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBfUFJJTkZPOgotCQkJCQlpZiAoKHNp
emVfdCkoY21oLmNtc2dfbGVuIC0gQ01TR19BTElHTihzaXplb2YoY21oKSkpIDwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3ByaW5mbykpIHsKLQkJCQkJCXJldHVybiAoZm91bmQpOwotCQkJCQl9Ci0JCQkJ
CW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3ByaW5mbyksIChjYWRkcl90KSZwcmluZm8pOwotCQkJCQlpZiAocHJpbmZv
LnByX3BvbGljeSAhPSBTQ1RQX1BSX1NDVFBfTk9ORSkgewotCQkJCQkJc25kcmN2aW5mby0+c2lu
Zm9fdGltZXRvbGl2ZSA9IHByaW5mby5wcl92YWx1ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNu
ZHJjdmluZm8tPnNpbmZvX3RpbWV0b2xpdmUgPSAwOwotCQkJCQl9Ci0JCQkJCXNuZHJjdmluZm8t
PnNpbmZvX2ZsYWdzIHw9IHByaW5mby5wcl9wb2xpY3k7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2Ug
U0NUUF9BVVRISU5GTzoKLQkJCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJ
R04oc2l6ZW9mKGNtaCkpKSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoaW5mbykpIHsKLQkJCQkJ
CXJldHVybiAoZm91bmQpOwotCQkJCQl9Ci0JCQkJCW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBD
TVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhpbmZvKSwgKGNh
ZGRyX3QpJmF1dGhpbmZvKTsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fa2V5bnVtYmVyX3ZhbGlk
ID0gMTsKLQkJCQkJc25kcmN2aW5mby0+c2luZm9fa2V5bnVtYmVyID0gYXV0aGluZm8uYXV0aF9r
ZXludW1iZXI7Ci0JCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCXJldHVybiAoZm91bmQp
OwotCQkJCX0KLQkJCQlmb3VuZCA9IDE7Ci0JCQl9Ci0JCX0KLQkJYXQgKz0gQ01TR19BTElHTihj
bWguY21zZ19sZW4pOwotCX0KLQlyZXR1cm4gKGZvdW5kKTsKLX0KLQotc3RhdGljIGludAotc2N0
cF9wcm9jZXNzX2Ntc2dzX2Zvcl9pbml0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1i
dWYgKmNvbnRyb2wsIGludCAqZXJyb3IpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCVdTQUNNU0dIRFIgY21oOwotI2Vsc2UKLQlzdHJ1Y3QgY21zZ2hkciBjbWg7Ci0j
ZW5kaWYKLQlpbnQgdGxlbiwgYXQ7Ci0Jc3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOwotI2lm
ZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQotCXRsZW4gPSBTQ1RQX0JVRl9M
RU4oY29udHJvbCk7Ci0JYXQgPSAwOwotCXdoaWxlIChhdCA8IHRsZW4pIHsKLQkJaWYgKCh0bGVu
IC0gYXQpIDwgKGludClDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgewotCQkJLyogVGhlcmUgaXMg
bm90IGVub3VnaCByb29tIGZvciBvbmUgbW9yZS4gKi8KLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJ
CXJldHVybiAoMSk7Ci0JCX0KLQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCwgc2l6ZW9mKGNtaCks
IChjYWRkcl90KSZjbWgpOwotCQlpZiAoY21oLmNtc2dfbGVuIDwgQ01TR19BTElHTihzaXplb2Yo
Y21oKSkpIHsKLQkJCS8qIFdlIGRvbnQndCBoYXZlIGEgY29tcGxldGUgQ01TRyBoZWFkZXIuICov
Ci0JCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWlmICgoKGludClj
bWguY21zZ19sZW4gKyBhdCkgPiB0bGVuKSB7Ci0JCQkvKiBXZSBkb24ndCBoYXZlIHRoZSBjb21w
bGV0ZSBDTVNHLiAqLwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuICgxKTsKLQkJfQot
CQlpZiAoY21oLmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19TQ1RQKSB7Ci0JCQlzd2l0Y2ggKGNtaC5j
bXNnX3R5cGUpIHsKLQkJCWNhc2UgU0NUUF9JTklUOgotCQkJCWlmICgoc2l6ZV90KShjbWguY21z
Z19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5p
dG1zZykpIHsKLQkJCQkJKmVycm9yID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0K
LQkJCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNnKSwgKGNhZGRyX3QpJmluaXRtc2cpOwotCQkJCWlmIChp
bml0bXNnLnNpbml0X21heF9hdHRlbXB0cykKLQkJCQkJc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1l
cyA9IGluaXRtc2cuc2luaXRfbWF4X2F0dGVtcHRzOwotCQkJCWlmIChpbml0bXNnLnNpbml0X251
bV9vc3RyZWFtcykKLQkJCQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gaW5pdG1zZy5z
aW5pdF9udW1fb3N0cmVhbXM7Ci0JCQkJaWYgKGluaXRtc2cuc2luaXRfbWF4X2luc3RyZWFtcykK
LQkJCQkJc3RjYi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zID0gaW5pdG1zZy5zaW5pdF9tYXhf
aW5zdHJlYW1zOwotCQkJCWlmIChpbml0bXNnLnNpbml0X21heF9pbml0X3RpbWVvKQotCQkJCQlz
dGNiLT5hc29jLmluaXRpYWxfaW5pdF9ydG9fbWF4ID0gaW5pdG1zZy5zaW5pdF9tYXhfaW5pdF90
aW1lbzsKLQkJCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQgPCBzdGNiLT5hc29jLnByZV9v
cGVuX3N0cmVhbXMpIHsKLQkJCQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqdG1wX3N0cjsKLQkJ
CQkJdW5zaWduZWQgaW50IGk7Ci0jaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykK
LQkJCQkJaW50IGo7Ci0jZW5kaWYKLQotCQkJCQkvKiBEZWZhdWx0IGlzIE5PVCBjb3JyZWN0ICov
Ci0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiT2ssIGRlZmF1bHQ6JWQgcHJlX29w
ZW46JWRcbiIsCi0JCQkJCQlzdGNiLT5hc29jLnN0cmVhbW91dGNudCwgc3RjYi0+YXNvYy5wcmVf
b3Blbl9zdHJlYW1zKTsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX01B
TExPQyh0bXBfc3RyLAotCQkJCQkgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICos
Ci0JCQkJCSAgICAgICAgICAgIChzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMgKiBzaXplb2Yo
c3RydWN0IHNjdHBfc3RyZWFtX291dCkpLAotCQkJCQkgICAgICAgICAgICBTQ1RQX01fU1RSTU8p
OwotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAodG1wX3N0ciAhPSBOVUxMKSB7
Ci0JCQkJCQlTQ1RQX0ZSRUUoc3RjYi0+YXNvYy5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOwotCQkJ
CQkJc3RjYi0+YXNvYy5zdHJtb3V0ID0gdG1wX3N0cjsKLQkJCQkJCXN0Y2ItPmFzb2Muc3RybV9y
ZWFsb3V0c2l6ZSA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250ID0gc3RjYi0+YXNvYy5wcmVfb3Bl
bl9zdHJlYW1zOwotCQkJCQl9IGVsc2UgewotCQkJCQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJl
YW1zID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7Ci0JCQkJCX0KLQkJCQkJZm9yIChpID0gMDsg
aSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJCQkJCVRBSUxRX0lOSVQoJnN0
Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRb
aV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4
dF9taWRfb3JkZXJlZCA9IDA7Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRf
dW5vcmRlcmVkID0gMDsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQotCQkJ
CQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAxOyBqKyspIHsKLQkJCQkJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOwotCQkJCQkJCXN0Y2It
PmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKLQkJCQkJCX0KLSNlbHNl
Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOwotCQkJ
CQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOwotI2VuZGlm
Ci0JCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc2lkID0gaTsKLQkJCQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKLQkJCQkJCXN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU5JTkc7Ci0JCQkJCQlzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRb
aV0sIE5VTEwpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWJyZWFrOwotI2lmZGVmIElORVQKLQkJCWNh
c2UgU0NUUF9EU1RBRERSVjQ6Ci0JCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0df
QUxJR04oc2l6ZW9mKGNtaCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKLQkJCQkJKmVy
cm9yID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLQkJCQltZW1zZXQoJnNpbiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCQkJc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7
Ci0JCQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpLCBz
aXplb2Yoc3RydWN0IGluX2FkZHIpLCAoY2FkZHJfdCkmc2luLnNpbl9hZGRyKTsKLQkJCQlpZiAo
KHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKLQkJCQkgICAgKHNpbi5zaW5f
YWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJCQkgICAgSU5fTVVMVElDQVNU
KG50b2hsKHNpbi5zaW5fYWRkci5zX2FkZHIpKSkgewotCQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0J
CQkJCXJldHVybiAoMSk7Ci0JCQkJfQotCQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNi
LCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0FERFJfSVNf
Q09ORklSTUVEKSkgewotCQkJCQkqZXJyb3IgPSBFTk9CVUZTOwotCQkJCQlyZXR1cm4gKDEpOwot
CQkJCX0KLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIFNDVFBfRFNU
QUREUlY2OgotCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVv
ZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgewotCQkJCQkqZXJyb3IgPSBFSU5W
QUw7Ci0JCQkJCXJldHVybiAoMSk7Ci0JCQkJfQotCQkJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7
Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQkJCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJCQlzaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0
OwotCQkJCW1fY29weWRhdGEoY29udHJvbCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwg
c2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksIChjYWRkcl90KSZzaW42LnNpbjZfYWRkcik7Ci0JCQkJ
aWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LnNpbjZfYWRkcikgfHwKLQkJCQkgICAg
SU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJKmVycm9yID0g
RUlOVkFMOwotCQkJCQlyZXR1cm4gKDEpOwotCQkJCX0KLSNpZmRlZiBJTkVUCi0JCQkJaWYgKElO
Nl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJaW42X3NpbjZfMl9z
aW4oJnNpbiwgJnNpbjYpOwotCQkJCQlpZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERS
X0FOWSkgfHwKLQkJCQkJICAgIChzaW4uc2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENB
U1QpIHx8Ci0JCQkJCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikp
KSB7Ci0JCQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0J
CQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNp
biwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9ET05PVF9TRVRTQ09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKLQkJCQkJCSpl
cnJvciA9IEVOT0JVRlM7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlCi0j
ZW5kaWYKLQkJCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luNiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsK
LQkJCQkJCSplcnJvciA9IEVOT0JVRlM7Ci0JCQkJCQlyZXR1cm4gKDEpOwotCQkJCQl9Ci0JCQkJ
YnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJYXQg
Kz0gQ01TR19BTElHTihjbWguY21zZ19sZW4pOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1zdGF0
aWMgc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzc29jaWF0aW9uX2Ntc2dzKHN0cnVjdCBz
Y3RwX2lucGNiICoqaW5wX3AsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBw
b3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0X3AsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmVycm9yKQotewotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLQlXU0FDTVNHSERSIGNtaDsKLSNlbHNlCi0Jc3RydWN0IGNtc2do
ZHIgY21oOwotI2VuZGlmCi0JaW50IHRsZW4sIGF0OwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
LQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRkcl9p
biBzaW47Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsK
LSNlbmRpZgotCi0JdGxlbiA9IFNDVFBfQlVGX0xFTihjb250cm9sKTsKLQlhdCA9IDA7Ci0Jd2hp
bGUgKGF0IDwgdGxlbikgewotCQlpZiAoKHRsZW4gLSBhdCkgPCAoaW50KUNNU0dfQUxJR04oc2l6
ZW9mKGNtaCkpKSB7Ci0JCQkvKiBUaGVyZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIG9uZSBtb3Jl
LiAqLwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQltX2Nv
cHlkYXRhKGNvbnRyb2wsIGF0LCBzaXplb2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7Ci0JCWlmIChj
bWguY21zZ19sZW4gPCBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgewotCQkJLyogV2UgZG9udCd0
IGhhdmUgYSBjb21wbGV0ZSBDTVNHIGhlYWRlci4gKi8KLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJ
CXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJaWYgKCgoaW50KWNtaC5jbXNnX2xlbiArIGF0KSA+IHRs
ZW4pIHsKLQkJCS8qIFdlIGRvbid0IGhhdmUgdGhlIGNvbXBsZXRlIENNU0cuICovCi0JCQkqZXJy
b3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlmIChjbWguY21zZ19sZXZl
bCA9PSBJUFBST1RPX1NDVFApIHsKLQkJCXN3aXRjaCAoY21oLmNtc2dfdHlwZSkgewotI2lmZGVm
IElORVQKLQkJCWNhc2UgU0NUUF9EU1RBRERSVjQ6Ci0JCQkJaWYgKChzaXplX3QpKGNtaC5jbXNn
X2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikp
IHsKLQkJCQkJKmVycm9yID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJCX0KLQkJ
CQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJCXNpbi5z
aW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCQlzaW4uc2luX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCQkJc2luLnNpbl9wb3J0
ID0gcG9ydDsKLQkJCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2Yo
Y21oKSksIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIChjYWRkcl90KSZzaW4uc2luX2FkZHIpOwot
CQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKLQkJCQlicmVhazsKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JCQljYXNlIFNDVFBfRFNUQUREUlY2OgotCQkJCWlmICgoc2l6ZV90KShj
bWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IGlu
Nl9hZGRyKSkgewotCQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCXJldHVybiAoTlVMTCk7Ci0J
CQkJfQotCQkJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsK
LQkJCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgot
CQkJCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYK
LQkJCQlzaW42LnNpbjZfcG9ydCA9IHBvcnQ7Ci0JCQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCAr
IENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgKGNhZGRy
X3QpJnNpbjYuc2luNl9hZGRyKTsKLSNpZmRlZiBJTkVUCi0JCQkJaWYgKElONl9JU19BRERSX1Y0
TUFQUEVEKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNp
bjYpOwotCQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW47Ci0JCQkJfSBlbHNlCi0j
ZW5kaWYKLQkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKLQkJCQlicmVhazsK
LSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQlhZGRyID0gTlVMTDsKLQkJCQlicmVhazsKLQkJCX0K
LQkJCWlmIChhZGRyKSB7Ci0JCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIo
aW5wX3AsIGFkZHIsIG5ldF9wLCBOVUxMLCBOVUxMKTsKLQkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7
Ci0JCQkJCXJldHVybiAoc3RjYik7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWF0ICs9IENNU0dfQUxJ
R04oY21oLmNtc2dfbGVuKTsKLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotc3RhdGljIHN0cnVj
dCBtYnVmICoKLXNjdHBfYWRkX2Nvb2tpZShzdHJ1Y3QgbWJ1ZiAqaW5pdCwgaW50IGluaXRfb2Zm
c2V0LAotICAgIHN0cnVjdCBtYnVmICppbml0YWNrLCBpbnQgaW5pdGFja19vZmZzZXQsIHN0cnVj
dCBzY3RwX3N0YXRlX2Nvb2tpZSAqc3RjX2luLCB1aW50OF90ICoqc2lnbmF0dXJlKQotewotCXN0
cnVjdCBtYnVmICpjb3B5X2luaXQsICpjb3B5X2luaXRhY2ssICptX2F0LCAqc2lnLCAqbXJldDsK
LQlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUgKnN0YzsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
cGg7Ci0JdWludDhfdCAqZm9vOwotCWludCBzaWdfb2Zmc2V0OwotCXVpbnQxNl90IGNvb2tpZV9z
ejsKLQotCW1yZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coKHNpemVvZihzdHJ1Y3Qgc2N0cF9z
dGF0ZV9jb29raWUpICsKLQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwg
MCwKLQkJCQkgICAgIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobXJldCA9PSBOVUxMKSB7
Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWNvcHlfaW5pdCA9IFNDVFBfTV9DT1BZTShpbml0LCBp
bml0X29mZnNldCwgTV9DT1BZQUxMLCBNX05PV0FJVCk7Ci0JaWYgKGNvcHlfaW5pdCA9PSBOVUxM
KSB7Ci0JCXNjdHBfbV9mcmVlbShtcmV0KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0jaWZkZWYg
U0NUUF9NQlVGX0xPR0dJTkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iYyhjb3B5X2lu
aXQsIFNDVFBfTUJVRl9JQ09QWSk7Ci0JfQotI2VuZGlmCi0JY29weV9pbml0YWNrID0gU0NUUF9N
X0NPUFlNKGluaXRhY2ssIGluaXRhY2tfb2Zmc2V0LCBNX0NPUFlBTEwsCi0JICAgIE1fTk9XQUlU
KTsKLQlpZiAoY29weV9pbml0YWNrID09IE5VTEwpIHsKLQkJc2N0cF9tX2ZyZWVtKG1yZXQpOwot
CQlzY3RwX21fZnJlZW0oY29weV9pbml0KTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0jaWZkZWYg
U0NUUF9NQlVGX0xPR0dJTkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iYyhjb3B5X2lu
aXRhY2ssIFNDVFBfTUJVRl9JQ09QWSk7Ci0JfQotI2VuZGlmCi0JLyogZWFzeSBzaWRlIHdlIGp1
c3QgZHJvcCBpdCBvbiB0aGUgZW5kICovCi0JcGggPSBtdG9kKG1yZXQsIHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopOwotCVNDVFBfQlVGX0xFTihtcmV0KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0
ZV9jb29raWUpICsKLQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQlzdGMgPSAo
c3RydWN0IHNjdHBfc3RhdGVfY29va2llICopKChjYWRkcl90KXBoICsKLQkgICAgc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSk7Ci0JcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUQVRF
X0NPT0tJRSk7Ci0JcGgtPnBhcmFtX2xlbmd0aCA9IDA7CS8qIGZpbGwgaW4gYXQgdGhlIGVuZCAq
LwotCS8qIEZpbGwgaW4gdGhlIHN0YyBjb29raWUgZGF0YSAqLwotCW1lbWNweShzdGMsIHN0Y19p
biwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSkpOwotCi0JLyogdGFjayB0aGUgSU5J
VCBhbmQgdGhlbiB0aGUgSU5JVC1BQ0sgb250byB0aGUgY2hhaW4gKi8KLQljb29raWVfc3ogPSAw
OwotCWZvciAobV9hdCA9IG1yZXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7
Ci0JCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhU
KG1fYXQpID09IE5VTEwpIHsKLQkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXQ7Ci0J
CQlicmVhazsKLQkJfQotCX0KLQlmb3IgKG1fYXQgPSBjb3B5X2luaXQ7IG1fYXQ7IG1fYXQgPSBT
Q1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7
Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKLQkJCVNDVFBfQlVGX05FWFQo
bV9hdCkgPSBjb3B5X2luaXRhY2s7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlmb3IgKG1fYXQgPSBj
b3B5X2luaXRhY2s7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCWNvb2tp
ZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7Ci0JCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09
IE5VTEwpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXNpZyA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhTQ1RQX1NFQ1JFVF9TSVpFLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKHNpZyA9
PSBOVUxMKSB7Ci0JCS8qIG5vIHNwYWNlLCBzbyBmcmVlIHRoZSBlbnRpcmUgY2hhaW4gKi8KLQkJ
c2N0cF9tX2ZyZWVtKG1yZXQpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlTQ1RQX0JVRl9MRU4o
c2lnKSA9IDA7Ci0JU0NUUF9CVUZfTkVYVChtX2F0KSA9IHNpZzsKLQlzaWdfb2Zmc2V0ID0gMDsK
LQlmb28gPSAodWludDhfdCAqKSAobXRvZChzaWcsIGNhZGRyX3QpICsgc2lnX29mZnNldCk7Ci0J
bWVtc2V0KGZvbywgMCwgU0NUUF9TSUdOQVRVUkVfU0laRSk7Ci0JKnNpZ25hdHVyZSA9IGZvbzsK
LQlTQ1RQX0JVRl9MRU4oc2lnKSArPSBTQ1RQX1NJR05BVFVSRV9TSVpFOwotCWNvb2tpZV9zeiAr
PSBTQ1RQX1NJR05BVFVSRV9TSVpFOwotCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhjb29raWVf
c3opOwotCXJldHVybiAobXJldCk7Ci19Ci0KLQotc3RhdGljIHVpbnQ4X3QKLXNjdHBfZ2V0X2Vj
dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17Ci0JaWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNi
LT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0gMSkpIHsKLQkJcmV0dXJuIChTQ1RQX0VDVDBfQklUKTsK
LQl9IGVsc2UgewotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9ub19yb3V0ZShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsCi0gICAgICAgICAgICAgICAgICAgICBpbnQgc29fbG9ja2VkKQotewotCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAiZHJvcHBlZCBwYWNrZXQgLSBubyB2YWxpZCBzb3VyY2UgYWRkclxu
Iik7Ci0KLQlpZiAobmV0KSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiRGVzdGlu
YXRpb24gd2FzICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQxLCAmbmV0LT5y
by5fbF9hZGRyLnNhKTsKLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9DT05GSVJN
RUQpIHsKLQkJCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgJiYg
c3RjYikgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAibm8gcm91dGUgdGFrZXMg
aW50ZXJmYWNlICVwIGRvd25cbiIsICh2b2lkICopbmV0KTsKLQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICBz
dGNiLCAwLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiluZXQsCi0JCQkgICAg
ICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOwotCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+
U0NUUF9BRERSX1JFQUNIQUJMRTsKLQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9Q
RjsKLQkJCX0KLQkJfQotCQlpZiAoc3RjYikgewotCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb24pIHsKLQkJCQkvKiBuZWVkIGEgbmV3IHByaW1hcnkgKi8KLQkJCQlz
dHJ1Y3Qgc2N0cF9uZXRzICphbHQ7Ci0KLQkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25l
dChzdGNiLCBuZXQsIDApOwotCQkJCWlmIChhbHQgIT0gbmV0KSB7Ci0JCQkJCWlmIChzdGNiLT5h
c29jLmFsdGVybmF0ZSkgewotCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2Mu
YWx0ZXJuYXRlKTsKLQkJCQkJfQotCQkJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IGFsdDsKLQkJ
CQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MuYWx0ZXJuYXRlLT5yZWZfY291bnQsIDEpOwot
CQkJCQlpZiAobmV0LT5yby5fc19hZGRyKSB7Ci0JCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8u
X3NfYWRkcik7Ci0JCQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOwotCQkJCQl9Ci0JCQkJCW5l
dC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLX0KLSNlbmRp
ZgotCi1zdGF0aWMgaW50Ci1zY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwJLyogbWF5IGJlIE5VTEwgKi8K
LSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0gICAgc3RydWN0IHNvY2thZGRyICp0bywKLSAg
ICBzdHJ1Y3QgbWJ1ZiAqbSwKLSAgICB1aW50MzJfdCBhdXRoX29mZnNldCwKLSAgICBzdHJ1Y3Qg
c2N0cF9hdXRoX2NodW5rICphdXRoLAotICAgIHVpbnQxNl90IGF1dGhfa2V5aWQsCi0gICAgaW50
IG5vZnJhZ21lbnRfZmxhZywKLSAgICBpbnQgZWNuX29rLAotICAgIGludCBvdXRfb2ZfYXNvY19v
aywKLSAgICB1aW50MTZfdCBzcmNfcG9ydCwKLSAgICB1aW50MTZfdCBkZXN0X3BvcnQsCi0gICAg
dWludDMyX3Qgdl90YWcsCi0gICAgdWludDE2X3QgcG9ydCwKLSAgICB1bmlvbiBzY3RwX3NvY2tz
dG9yZSAqb3Zlcl9hZGRyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgdWludDhfdCBt
Zmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX0FQUExF
X18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIGludCBzb19sb2NrZWQg
U0NUUF9VTlVTRUQKLSNlbHNlCi0gICAgaW50IHNvX2xvY2tlZAotI2VuZGlmCi0gICAgKQotLyog
bm9mcmFnbWVudF9mbGFnIHRvIHRlbGwgaWYgSVBfREYgc2hvdWxkIGJlIHNldCAoSVB2NCBvbmx5
KSAqLwotewotCS8qKgotCSAqIEdpdmVuIGEgbWJ1ZiBjaGFpbiAodmlhIFNDVFBfQlVGX05FWFQo
KSkgdGhhdCBob2xkcyBhIHBhY2tldCBoZWFkZXIKLQkgKiBXSVRIIGFuIFNDVFBIRFIgYnV0IG5v
IElQIGhlYWRlciwgZW5kcG9pbnQgaW5wIGFuZCBzYSBzdHJ1Y3R1cmU6Ci0JICogLSBmaWxsIGlu
IHRoZSBITUFDIGRpZ2VzdCBvZiBhbnkgQVVUSCBjaHVuayBpbiB0aGUgcGFja2V0LgotCSAqIC0g
Y2FsY3VsYXRlIGFuZCBmaWxsIGluIHRoZSBTQ1RQIGNoZWNrc3VtLgotCSAqIC0gcHJlcGVuZCBh
biBJUCBhZGRyZXNzIGhlYWRlci4KLQkgKiAtIGlmIGJvdW5kYWxsIHVzZSBJTkFERFJfQU5ZLgot
CSAqIC0gaWYgYm91bmRzcGVjaWZpYyBkbyBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24uCi0JICog
LSBzZXQgZnJhZ21lbnRhdGlvbiBvcHRpb24gZm9yIGlwVjQuCi0JICogLSBPbiByZXR1cm4gZnJv
bSBJUCBvdXRwdXQsIGNoZWNrL2FkanVzdCBtdHUgc2l6ZSBvZiBvdXRwdXQKLQkgKiAgIGludGVy
ZmFjZSBhbmQgc21hbGxlc3RfbXR1IHNpemUgYXMgd2VsbC4KLQkgKi8KLQkvKiBXaWxsIG5lZWQg
aWZkZWZzIGFyb3VuZCB0aGlzICovCi0jaWZkZWYgX19QYW5kYV9fCi0JcGFraGFuZGxlX3R5cGUg
b19wYWs7Ci0jZW5kaWYKLQlzdHJ1Y3QgbWJ1ZiAqbmV3bTsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2N0
cGhkcjsKLQlpbnQgcGFja2V0X2xlbmd0aDsKLQlpbnQgcmV0OwotI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKLQl1aW50MzJfdCB2cmZfaWQ7Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQotCXN0cnVj
dCBtYnVmICpvX3BhazsKLSNlbmRpZgotCXNjdHBfcm91dGVfdCAqcm8gPSBOVUxMOwotCXN0cnVj
dCB1ZHBoZHIgKnVkcCA9IE5VTEw7Ci0jZW5kaWYKLQl1aW50OF90IHRvc192YWx1ZTsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1
Y3Qgc29ja2V0ICpzbyA9IE5VTEw7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
CWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsK
LQkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tf
YXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0KLSNlbmRpZgotCWlmICgobmV0KSAmJiAobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX09VVF9PRl9TQ09QRSkpIHsKLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZB
VUxUKTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCQlyZXR1cm4gKEVGQVVMVCk7Ci0JfQotI2lmIGRl
ZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlpZiAoc3RjYikgewotCQl2cmZfaWQgPSBz
dGNiLT5hc29jLnZyZl9pZDsKLQl9IGVsc2UgewotCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7
Ci0JfQotI2VuZGlmCi0JLyogZmlsbCBpbiB0aGUgSE1BQyBkaWdlc3QgZm9yIGFueSBBVVRIIGNo
dW5rIGluIHRoZSBwYWNrZXQgKi8KLQlpZiAoKGF1dGggIT0gTlVMTCkgJiYgKHN0Y2IgIT0gTlVM
TCkpIHsKLQkJc2N0cF9maWxsX2htYWNfZGlnZXN0X20obSwgYXV0aF9vZmZzZXQsIGF1dGgsIHN0
Y2IsIGF1dGhfa2V5aWQpOwotCX0KLQotCWlmIChuZXQpIHsKLQkJdG9zX3ZhbHVlID0gbmV0LT5k
c2NwOwotCX0gZWxzZSBpZiAoc3RjYikgewotCQl0b3NfdmFsdWUgPSBzdGNiLT5hc29jLmRlZmF1
bHRfZHNjcDsKLQl9IGVsc2UgewotCQl0b3NfdmFsdWUgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9k
c2NwOwotCX0KLQotCXN3aXRjaCAodG8tPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNl
IEFGX0lORVQ6Ci0JewotCQlzdHJ1Y3QgaXAgKmlwID0gTlVMTDsKLQkJc2N0cF9yb3V0ZV90IGlw
cm91dGU7Ci0JCWludCBsZW47Ci0KLQkJbGVuID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCWlm
IChwb3J0KSB7Ci0JCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQl9Ci0JCW5ld20g
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0J
CWlmIChuZXdtID09IE5VTEwpIHsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7
Ci0JCQlyZXR1cm4gKEVOT01FTSk7Ci0JCX0KLQkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVu
KTsKLQkJU0NUUF9CVUZfTEVOKG5ld20pID0gbGVuOwotCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0g
bTsKLQkJbSA9IG5ld207Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJaWYgKG5ldCAhPSBO
VUxMKSB7Ci0JCQltLT5tX3BrdGhkci5mbG93aWQgPSBuZXQtPmZsb3dpZDsKLQkJCU1fSEFTSFRZ
UEVfU0VUKG0sIG5ldC0+Zmxvd3R5cGUpOwotCQl9IGVsc2UgewotCQkJbS0+bV9wa3RoZHIuZmxv
d2lkID0gbWZsb3dpZDsKLQkJCU1fSEFTSFRZUEVfU0VUKG0sIG1mbG93dHlwZSk7Ci0gCQl9Ci0j
ZW5kaWYKLQkJcGFja2V0X2xlbmd0aCA9IHNjdHBfY2FsY3VsYXRlX2xlbihtKTsKLQkJaXAgPSBt
dG9kKG0sIHN0cnVjdCBpcCAqKTsKLQkJaXAtPmlwX3YgPSBJUFZFUlNJT047Ci0JCWlwLT5pcF9o
bCA9IChzaXplb2Yoc3RydWN0IGlwKSA+PiAyKTsKLQkJaWYgKHRvc192YWx1ZSA9PSAwKSB7Ci0J
CQkvKgotCQkJICogVGhpcyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQg
dGhlCi0JCQkgKiBTQ1RQIGxheWVyLiBTbyB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVy
LgotCQkJICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JCQl0b3NfdmFsdWUgPSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3Rv
czsKLSNlbHNlCi0JCQl0b3NfdmFsdWUgPSBpbnAtPmlucF9pcF90b3M7Ci0jZW5kaWYKLQkJfQot
CQl0b3NfdmFsdWUgJj0gMHhmYzsKLQkJaWYgKGVjbl9vaykgewotCQkJdG9zX3ZhbHVlIHw9IHNj
dHBfZ2V0X2VjdChzdGNiKTsKLQkJfQotCQlpZiAoKG5vZnJhZ21lbnRfZmxhZykgJiYgKHBvcnQg
PT0gMCkpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDEwMDAwMDAKLQkJCWlwLT5pcF9vZmYgPSBodG9ucyhJUF9ERik7Ci0jZWxzZQotCQkJaXAt
PmlwX29mZiA9IElQX0RGOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKFdJVEhfQ09OVkVSVF9JUF9P
RkYpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlp
cC0+aXBfb2ZmID0gSVBfREY7Ci0jZWxzZQotCQkJaXAtPmlwX29mZiA9IGh0b25zKElQX0RGKTsK
LSNlbmRpZgotCQl9IGVsc2UgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDEwMDAwMDAKLQkJCWlwLT5pcF9vZmYgPSBodG9ucygwKTsKLSNlbHNlCi0J
CQlpcC0+aXBfb2ZmID0gMDsKLSNlbmRpZgotCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkJLyogRnJlZUJTRCBoYXMgYSBmdW5jdGlvbiBmb3IgaXBfaWQncyAqLwotCQlpcF9maWxsaWQo
aXApOwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgUkFORE9NX0lQX0lECi0JCWlwLT5p
cF9pZCA9IGlwX3JhbmRvbWlkKCk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBodG9ucyhpcF9pZCsr
KTsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpcC0+aXBfaWQgPSBo
dG9ucyhTQ1RQX0lQX0lEKGlucCkrKyk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBTQ1RQX0lQX0lE
KGlucCkrKzsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWlwLT5pcF90dGwgPSBpbnAtPmlwX2lucC5pbnAu
aW5wX2lwX3R0bDsKLSNlbHNlCi0JCWlwLT5pcF90dGwgPSBpbnAtPmlucF9pcF90dGw7Ci0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMDAw
MDAwCi0JCWlwLT5pcF9sZW4gPSBodG9ucyhwYWNrZXRfbGVuZ3RoKTsKLSNlbHNlCi0JCWlwLT5p
cF9sZW4gPSBwYWNrZXRfbGVuZ3RoOwotI2VuZGlmCi0JCWlwLT5pcF90b3MgPSB0b3NfdmFsdWU7
Ci0JCWlmIChwb3J0KSB7Ci0JCQlpcC0+aXBfcCA9IElQUFJPVE9fVURQOwotCQl9IGVsc2Ugewot
CQkJaXAtPmlwX3AgPSBJUFBST1RPX1NDVFA7Ci0JCX0KLQkJaXAtPmlwX3N1bSA9IDA7Ci0JCWlm
IChuZXQgPT0gTlVMTCkgewotCQkJcm8gPSAmaXByb3V0ZTsKLQkJCW1lbXNldCgmaXByb3V0ZSwg
MCwgc2l6ZW9mKGlwcm91dGUpKTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJbWVtY3B5KCZyby0+
cm9fZHN0LCB0bywgdG8tPnNhX2xlbik7Ci0jZWxzZQotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCB0
bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQly
byA9IChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybzsKLQkJfQotCQkvKiBOb3cgdGhlIGFkZHJlc3Mg
c2VsZWN0aW9uIHBhcnQgKi8KLQkJaXAtPmlwX2RzdC5zX2FkZHIgPSAoKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKXRvKS0+c2luX2FkZHIuc19hZGRyOwotCi0JCS8qIGNhbGwgdGhlIHJvdXRpbmUgdG8g
c2VsZWN0IHRoZSBzcmMgYWRkcmVzcyAqLwotCQlpZiAobmV0ICYmIG91dF9vZl9hc29jX29rID09
IDApIHsKLQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgJiYgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxp
ZmFfZmxhZ3MgJiAoU0NUUF9CRUlOR19ERUxFVEVEfFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSkp
IHsKLQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJbmV0LT5yby5fc19h
ZGRyID0gTlVMTDsKLQkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQkJCQlpZiAocm8t
PnJvX3J0KSB7Ci0JCQkJCVJURlJFRShyby0+cm9fcnQpOwotCQkJCQlyby0+cm9fcnQgPSBOVUxM
OwotCQkJCX0KLQkJCX0KLQkJCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkID09IDApIHsKLQkJ
CQkvKiBDYWNoZSB0aGUgc291cmNlIGFkZHJlc3MgKi8KLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBz
Y3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAsc3RjYiwKLQkJCQkJCQkJCQlybywgbmV0
LCAwLAotCQkJCQkJCQkJCXZyZl9pZCk7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7
Ci0JCQl9Ci0JCQlpZiAobmV0LT5yby5fc19hZGRyID09IE5VTEwpIHsKLQkJCQkvKiBObyByb3V0
ZSB0byBob3N0ICovCi0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQkJc2N0cF9o
YW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9T
VFVOUkVBQ0gpOwotCQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFD
SCk7Ci0JCQl9Ci0JCQlpcC0+aXBfc3JjID0gbmV0LT5yby5fc19hZGRyLT5hZGRyZXNzLnNpbi5z
aW5fYWRkcjsKLQkJfSBlbHNlIHsKLQkJCWlmIChvdmVyX2FkZHIgPT0gTlVMTCkgewotCQkJCXN0
cnVjdCBzY3RwX2lmYSAqX2xzcmM7Ci0KLQkJCQlfbHNyYyA9IHNjdHBfc291cmNlX2FkZHJlc3Nf
c2VsZWN0aW9uKGlucCwgc3RjYiwgcm8sCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRfb2ZfYXNvY19vaywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZyZl9pZCk7Ci0JCQkJaWYgKF9sc3JjID09IE5VTEwpIHsKLQkJCQkJc2N0cF9oYW5kbGVf
bm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
X1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJF
QUNIKTsKLQkJCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7
Ci0JCQkJfQotCQkJCWlwLT5pcF9zcmMgPSBfbHNyYy0+YWRkcmVzcy5zaW4uc2luX2FkZHI7Ci0J
CQkJc2N0cF9mcmVlX2lmYShfbHNyYyk7Ci0JCQl9IGVsc2UgewotCQkJCWlwLT5pcF9zcmMgPSBv
dmVyX2FkZHItPnNpbi5zaW5fYWRkcjsKLQkJCQlTQ1RQX1JUQUxMT0Mocm8sIHZyZl9pZCwgaW5w
LT5maWJudW0pOwotCQkJfQotCQl9Ci0JCWlmIChwb3J0KSB7Ci0JCQlpZiAoaHRvbnMoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpID09IDApIHsKLQkJCQlzY3RwX2hh
bmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NU
VU5SRUFDSCk7Ci0JCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoRUhPU1RVTlJFQUNI
KTsKLQkJCX0KLQkJCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwICsgc2l6ZW9m
KHN0cnVjdCBpcCkpOwotCQkJdWRwLT51aF9zcG9ydCA9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKTsKLQkJCXVkcC0+dWhfZHBvcnQgPSBwb3J0OwotCQkJ
dWRwLT51aF91bGVuID0gaHRvbnMoKHVpbnQxNl90KShwYWNrZXRfbGVuZ3RoIC0gc2l6ZW9mKHN0
cnVjdCBpcCkpKTsKLSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9fRnJlZUJTRF92ZXJzaW9u
ID4gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8fCBfX0ZyZWVCU0RfdmVy
c2lvbiA+IDkwMDAwMCkKLQkJCWlmIChWX3VkcF9ja3N1bSkgewotCQkJCXVkcC0+dWhfc3VtID0g
aW5fcHNldWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91
bGVuICsgaHRvbnMoSVBQUk9UT19VRFApKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdWRwLT51aF9zdW0g
PSAwOwotCQkJfQotI2Vsc2UKLQkJCXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5pcF9zcmMu
c19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQUk9UT19V
RFApKTsKLSNlbmRpZgotI2Vsc2UKLQkJCXVkcC0+dWhfc3VtID0gMDsKLSNlbmRpZgotCQkJc2N0
cGhkciA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2FkZHJfdCl1ZHAgKyBzaXplb2Yoc3RydWN0IHVk
cGhkcikpOwotCQl9IGVsc2UgewotCQkJc2N0cGhkciA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2Fk
ZHJfdClpcCArIHNpemVvZihzdHJ1Y3QgaXApKTsKLQkJfQotCi0JCXNjdHBoZHItPnNyY19wb3J0
ID0gc3JjX3BvcnQ7Ci0JCXNjdHBoZHItPmRlc3RfcG9ydCA9IGRlc3RfcG9ydDsKLQkJc2N0cGhk
ci0+dl90YWcgPSB2X3RhZzsKLQkJc2N0cGhkci0+Y2hlY2tzdW0gPSAwOwotCi0JCS8qCi0JCSAq
IElmIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbiBmYWlscyBhbmQgd2UgZmluZCBubyByb3V0ZQot
CQkgKiB0aGVuIHRoZSBpcF9vdXRwdXQgc2hvdWxkIGZhaWwgYXMgd2VsbCB3aXRoIGEKLQkJICog
Tk9fUk9VVEVfVE9fSE9TVCB0eXBlIGVycm9yLiBXZSBwcm9iYWJseSBzaG91bGQgY2F0Y2gKLQkJ
ICogdGhhdCBzb21ld2hlcmUgYW5kIGFib3J0IHRoZSBhc3NvY2lhdGlvbiByaWdodCBhd2F5Ci0J
CSAqIChhc3N1bWluZyB0aGlzIGlzIGFuIElOSVQgYmVpbmcgc2VudCkuCi0JCSAqLwotCQlpZiAo
cm8tPnJvX3J0ID09IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiBzcmMgYWRkciBzZWxlY3Rpb24gZmFp
bGVkIHRvIGZpbmQgYSByb3V0ZSAob3IKLQkJCSAqIHZhbGlkIHNvdXJjZSBhZGRyKSwgc28gd2Ug
Y2FuJ3QgZ2V0IHRoZXJlIGZyb20KLQkJCSAqIGhlcmUgKHlldCkhCi0JCQkgKi8KLQkJCXNjdHBf
aGFuZGxlX25vX3JvdXRlKHN0Y2IsIG5ldCwgc29fbG9ja2VkKTsKLQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9T
VFVOUkVBQ0gpOwotCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gp
OwotCQl9Ci0JCWlmIChybyAhPSAmaXByb3V0ZSkgewotCQkJbWVtY3B5KCZpcHJvdXRlLCBybywg
c2l6ZW9mKCpybykpOwotCQl9Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiQ2FsbGlu
ZyBpcHY0IG91dHB1dCByb3V0aW5lIGZyb20gbG93IGxldmVsIHNyYyBhZGRyOiV4XG4iLAotCQkJ
KHVpbnQzMl90KSAobnRvaGwoaXAtPmlwX3NyYy5zX2FkZHIpKSk7Ci0JCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQzLCAiRGVzdGluYXRpb24gaXMgJXhcbiIsCi0JCQkodWludDMyX3QpKG50b2hs
KGlwLT5pcF9kc3Quc19hZGRyKSkpOwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIlJU
UCByb3V0ZSBpcyAlcCB0aHJvdWdoXG4iLAotCQkJKHZvaWQgKilyby0+cm9fcnQpOwotCi0JCWlm
IChTQ1RQX0dFVF9IRUFERVJfRk9SX09VVFBVVChvX3BhaykpIHsKLQkJCS8qIGZhaWxlZCB0byBw
cmVwZW5kIGRhdGEsIGdpdmUgdXAgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJc2N0cF9t
X2ZyZWVtKG0pOwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCVNDVFBfQVRUQUNIX0NIQUlO
KG9fcGFrLCBtLCBwYWNrZXRfbGVuZ3RoKTsKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFND
VFBfV0lUSF9OT19DU1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNl
bHNlCi0JCQlzY3RwaGRyLT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVv
ZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3NlbmRzd2NyYyk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9f
RnJlZUJTRF92ZXJzaW9uID4gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8
fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMCkKLQkJCWlmIChWX3VkcF9ja3N1bSkgewotCQkJ
CVNDVFBfRU5BQkxFX1VEUF9DU1VNKG9fcGFrKTsKLQkJCX0KLSNlbHNlCi0JCQlTQ1RQX0VOQUJM
RV9VRFBfQ1NVTShvX3Bhayk7Ci0jZW5kaWYKLSNlbmRpZgotCQl9IGVsc2UgewotI2lmIGRlZmlu
ZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kbm9jcmMp
OwotI2Vsc2UKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDAwMDAKLQkJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1NDVFA7Ci0JCQltLT5t
X3BrdGhkci5jc3VtX2RhdGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhkciwgY2hlY2tzdW0pOwot
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLSNlbHNlCi0JCQlpZiAoIShTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgJiYKLQkJCSAgICAgIChzdGNi
KSAmJiAoc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSkpKSB7Ci0JCQkJc2N0cGhkci0+
Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCBzaXplb2Yoc3RydWN0IGlwKSk7Ci0J
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLQkJCX0KLSNlbmRpZgotI2VuZGlmCi0JCX0K
LSNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcpCi0JCQlzY3RwX3BhY2tl
dF9sb2cob19wYWspOwotI2VuZGlmCi0JCS8qIHNlbmQgaXQgb3V0LiAgdGFibGUgaWQgaXMgdGFr
ZW4gZnJvbSBzdGNiICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxv
Y2tlZCkpICYmIChzb19sb2NrZWQpKSB7Ci0JCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDApOwotCQl9Ci0jZW5kaWYKLQkJU0NUUF9JUF9PVVRQVVQo
cmV0LCBvX3Bhaywgcm8sIHN0Y2IsIHZyZl9pZCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX291dHB1dF91bmxvY2tlZCkpICYmIChzb19sb2NrZWQpKSB7Ci0JCQlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJ
U0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRv
bWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQl9Ci0jZW5kaWYKLQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VO
VEVSNjQoc2N0cHNfb3V0cGFja2V0cyk7Ci0JCWlmIChyZXQpCi0JCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kZXJyb3JzKTsKLQotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIklQIG91
dHB1dCByZXR1cm5zICVkXG4iLCByZXQpOwotCQlpZiAobmV0ID09IE5VTEwpIHsKLQkJCS8qIGZy
ZWUgdGVtcHkgcm91dGVzICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPiA5MDEwMDAKLQkJCVJPX1JURlJFRShybyk7Ci0jZWxzZQotCQkJaWYgKHJvLT5y
b19ydCkgewotCQkJCVJURlJFRShyby0+cm9fcnQpOwotCQkJCXJvLT5yb19ydCA9IE5VTEw7Ci0J
CQl9Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCS8qIFBNVFUgY2hlY2sgdmVyc3VzIHNtYWxsZXN0
IGFzb2MgTVRVIGdvZXMgaGVyZSAqLwotCQkJaWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYKLQkJ
CSAgICAobmV0LT5yby5fc19hZGRyKSkgewotCQkJCXVpbnQzMl90IG10dTsKLQkJCQltdHUgPSBT
Q1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2Fk
ZHIuc2EsIHJvLT5yb19ydCk7Ci0JCQkJaWYgKG5ldC0+cG9ydCkgewotCQkJCQltdHUgLT0gc2l6
ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCQkJCX0KLQkJCQlpZiAobXR1ICYmIChzdGNiLT5hc29jLnNt
YWxsZXN0X210dSA+IG10dSkpIHsKLQkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNldChpbnAsICZzdGNi
LT5hc29jLCBtdHUpOwotCQkJCQluZXQtPm10dSA9IG10dTsKLQkJCQl9Ci0JCQl9IGVsc2UgaWYg
KHJvLT5yb19ydCA9PSBOVUxMKSB7Ci0JCQkJLyogcm91dGUgd2FzIGZyZWVkICovCi0JCQkJaWYg
KG5ldC0+cm8uX3NfYWRkciAmJgotCQkJCSAgICBuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7Ci0J
CQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCQkJbmV0LT5yby5fc19hZGRy
ID0gTlVMTDsKLQkJCQl9Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0JCQl9Ci0J
CX0KLQkJcmV0dXJuIChyZXQpOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9J
TkVUNjoKLQl7Ci0JCXVpbnQzMl90IGZsb3dsYWJlbCwgZmxvd2luZm87Ci0JCXN0cnVjdCBpcDZf
aGRyICppcDZoOwotCQlzdHJ1Y3Qgcm91dGVfaW42IGlwNnJvdXRlOwotI2lmICEoZGVmaW5lZChf
X1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCXN0cnVjdCBpZm5ldCAqaWZw
OwotI2VuZGlmCi0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIHRtcCwgKmxzYTYsIGxzYTZf
dG1wOwotCQlpbnQgcHJldl9zY29wZSA9IDA7Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGxzYTZfc3RvcmFnZTsKLQkJaW50IGVycm9yOwotI2Vu
ZGlmCi0JCXVfc2hvcnQgcHJldl9wb3J0ID0gMDsKLQkJaW50IGxlbjsKLQotCQlpZiAobmV0KSB7
Ci0JCQlmbG93bGFiZWwgPSBuZXQtPmZsb3dsYWJlbDsKLQkJfSBlbHNlIGlmIChzdGNiKSB7Ci0J
CQlmbG93bGFiZWwgPSBzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsOwotCQl9IGVsc2Ugewot
CQkJZmxvd2xhYmVsID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsOwotCQl9Ci0JCWlm
IChmbG93bGFiZWwgPT0gMCkgewotCQkJLyoKLQkJCSAqIFRoaXMgbWVhbnMgZXNwZWNpYWxseSwg
dGhhdCBpdCBpcyBub3Qgc2V0IGF0IHRoZQotCQkJICogU0NUUCBsYXllci4gU28gdXNlIHRoZSB2
YWx1ZSBmcm9tIHRoZSBJUCBsYXllci4KLQkJCSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSAm
JiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQp
ICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikp
Ci0JCQlmbG93bGFiZWwgPSBudG9obChpbnAtPmlwX2lucC5pbnAuaW5wX2Zsb3cpOwotI2Vsc2UK
LQkJCWZsb3dsYWJlbCA9IG50b2hsKCgoc3RydWN0IGluNnBjYiAqKWlucCktPmluNnBfZmxvd2lu
Zm8pOwotI2VuZGlmCi0JCX0KLQkJZmxvd2xhYmVsICY9IDB4MDAwZmZmZmY7Ci0JCWxlbiA9IFND
VFBfTUlOX09WRVJIRUFEOwotCQlpZiAocG9ydCkgewotCQkJbGVuICs9IHNpemVvZihzdHJ1Y3Qg
dWRwaGRyKTsKLQkJfQotCQluZXdtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMSwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAobmV3bSA9PSBOVUxMKSB7Ci0JCQlzY3RwX21fZnJl
ZW0obSk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCVNDVFBf
QUxJR05fVE9fRU5EKG5ld20sIGxlbik7Ci0JCVNDVFBfQlVGX0xFTihuZXdtKSA9IGxlbjsKLQkJ
U0NUUF9CVUZfTkVYVChuZXdtKSA9IG07Ci0JCW0gPSBuZXdtOwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0JCWlmIChuZXQgIT0gTlVMTCkgewotCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbmV0
LT5mbG93aWQ7Ci0JCQlNX0hBU0hUWVBFX1NFVChtLCBuZXQtPmZsb3d0eXBlKTsKLQkJfSBlbHNl
IHsKLQkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9IG1mbG93aWQ7Ci0JCQlNX0hBU0hUWVBFX1NFVCht
LCBtZmxvd3R5cGUpOwotIAkJfQotI2VuZGlmCi0JCXBhY2tldF9sZW5ndGggPSBzY3RwX2NhbGN1
bGF0ZV9sZW4obSk7Ci0KLQkJaXA2aCA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7Ci0JCS8q
IHByb3RlY3QgKnNpbjYgZnJvbSBvdmVyd3JpdGUgKi8KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopdG87Ci0JCXRtcCA9ICpzaW42OwotCQlzaW42ID0gJnRtcDsKLQotI2lmZGVmIFND
VFBfRU1CRURERURfVjZfU0NPUEUKLQkJLyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlkICovCi0j
aWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZp
bmVkKEFQUExFX1NOT1dMRU9QQVJEKQotCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKLSNlbHNlCi0JCWlmIChpbjZfZW1iZWRzY29w
ZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKQotI2VuZGlm
Ci0jZWxpZiBkZWZpbmVkKFNDVFBfS0FNRSkKLQkJaWYgKHNhNl9lbWJlZHNjb3BlKHNpbjYsIE1P
RFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkKLSNlbHNlCi0JCWlmIChpbjZfZW1i
ZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCXsKLQkJCVND
VFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLSNlbmRpZiAvKiBTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFICovCi0JCWlmIChuZXQgPT0gTlVMTCkgewotCQkJbWVtc2V0KCZp
cDZyb3V0ZSwgMCwgc2l6ZW9mKGlwNnJvdXRlKSk7Ci0JCQlybyA9IChzY3RwX3JvdXRlX3QgKikm
aXA2cm91dGU7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCBz
aW42LCBzaW42LT5zaW42X2xlbik7Ci0jZWxzZQotCQkJbWVtY3B5KCZyby0+cm9fZHN0LCBzaW42
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQly
byA9IChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybzsKLQkJfQotCQkvKgotCQkgKiBXZSBhc3N1bWUg
aGVyZSB0aGF0IGlucF9mbG93IGlzIGluIGhvc3QgYnl0ZSBvcmRlciB3aXRoaW4KLQkJICogdGhl
IFRDQiEKLQkJICovCi0JCWlmICh0b3NfdmFsdWUgPT0gMCkgewotCQkJLyoKLQkJCSAqIFRoaXMg
bWVhbnMgZXNwZWNpYWxseSwgdGhhdCBpdCBpcyBub3Qgc2V0IGF0IHRoZQotCQkJICogU0NUUCBs
YXllci4gU28gdXNlIHRoZSB2YWx1ZSBmcm9tIHRoZSBJUCBsYXllci4KLQkJCSAqLwotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFu
ZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZp
bmVkKEFQUExFX01PVU5UQUlOTElPTikpCi0JCQl0b3NfdmFsdWUgPSAobnRvaGwoaW5wLT5pcF9p
bnAuaW5wLmlucF9mbG93KSA+PiAyMCkgJiAweGZmOwotI2Vsc2UKLQkJCXRvc192YWx1ZSA9IChu
dG9obCgoKHN0cnVjdCBpbjZwY2IgKilpbnApLT5pbjZwX2Zsb3dpbmZvKSA+PiAyMCkgJiAweGZm
OwotI2VuZGlmCi0jZW5kaWYKLQkJfQotCQl0b3NfdmFsdWUgJj0gMHhmYzsKLQkJaWYgKGVjbl9v
aykgewotCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsKLQkJfQotCQlmbG93aW5m
byA9IDB4MDY7Ci0JCWZsb3dpbmZvIDw8PSA4OwotCQlmbG93aW5mbyB8PSB0b3NfdmFsdWU7Ci0J
CWZsb3dpbmZvIDw8PSAyMDsKLQkJZmxvd2luZm8gfD0gZmxvd2xhYmVsOwotCQlpcDZoLT5pcDZf
ZmxvdyA9IGh0b25sKGZsb3dpbmZvKTsKLQkJaWYgKHBvcnQpIHsKLQkJCWlwNmgtPmlwNl9ueHQg
PSBJUFBST1RPX1VEUDsKLQkJfSBlbHNlIHsKLQkJCWlwNmgtPmlwNl9ueHQgPSBJUFBST1RPX1ND
VFA7Ci0JCX0KLQkJaXA2aC0+aXA2X3BsZW4gPSAodWludDE2X3QpKHBhY2tldF9sZW5ndGggLSBz
aXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKLQkJaXA2aC0+aXA2X2RzdCA9IHNpbjYtPnNpbjZfYWRk
cjsKLQotCQkvKgotCQkgKiBBZGQgU1JDIGFkZHJlc3Mgc2VsZWN0aW9uIGhlcmU6IHdlIGNhbiBv
bmx5IHJldXNlIHRvIGEKLQkJICogbGltaXRlZCBkZWdyZWUgdGhlIGthbWUgc3JjLWFkZHItc2Vs
LCBzaW5jZSB3ZSBjYW4gdHJ5Ci0JCSAqIHRoZWlyIHNlbGVjdGlvbiBidXQgaXQgbWF5IG5vdCBi
ZSBib3VuZC4KLQkJICovCi0JCW1lbXNldCgmbHNhNl90bXAsIDAsIHNpemVvZihsc2E2X3RtcCkp
OwotCQlsc2E2X3RtcC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9M
RU4KLQkJbHNhNl90bXAuc2luNl9sZW4gPSBzaXplb2YobHNhNl90bXApOwotI2VuZGlmCi0JCWxz
YTYgPSAmbHNhNl90bXA7Ci0JCWlmIChuZXQgJiYgb3V0X29mX2Fzb2Nfb2sgPT0gMCkgewotCQkJ
aWYgKG5ldC0+cm8uX3NfYWRkciAmJiAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAm
IChTQ1RQX0JFSU5HX0RFTEVURUR8U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpKSkgewotCQkJCXNj
dHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxM
OwotCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJCWlmIChyby0+cm9fcnQpIHsK
LQkJCQkJUlRGUkVFKHJvLT5yb19ydCk7Ci0JCQkJCXJvLT5yb19ydCA9IE5VTEw7Ci0JCQkJfQot
CQkJfQotCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgewotI2lmZGVmIFNDVFBf
RU1CRURERURfVjZfU0NPUEUKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0
LT5yby5fbF9hZGRyOwotCQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2NvcGVpZCAqLwotI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChB
UFBMRV9TTk9XTEVPUEFSRCkKLQkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRk
ciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKLSNlbHNlCi0JCQkJaWYgKGluNl9lbWJlZHNjb3Bl
KCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApCi0jZW5kaWYK
LSNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQotCQkJCWlmIChzYTZfZW1iZWRzY29wZShzaW42LCBN
T0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDApCi0jZWxzZQotCQkJCWlmIChpbjZf
ZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCQkJewot
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQkJfQotI2Vu
ZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJCQkvKiBDYWNoZSB0aGUgc291cmNl
IGFkZHJlc3MgKi8KLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3Nl
bGVjdGlvbihpbnAsCi0JCQkJCQkJCQkJc3RjYiwKLQkJCQkJCQkJCQlybywKLQkJCQkJCQkJCQlu
ZXQsCi0JCQkJCQkJCQkJMCwKLQkJCQkJCQkJCQl2cmZfaWQpOwotI2lmZGVmIFNDVFBfRU1CRURE
RURfVjZfU0NPUEUKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkodm9pZClzYTZfcmVjb3ZlcnNjb3Bl
KHNpbjYpOwotI2Vsc2UKLQkJCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZzaW42LT5z
aW42X2FkZHIsIE5VTEwpOwotI2VuZGlmCS8qIFNDVFBfS0FNRSAqLwotI2VuZGlmCS8qIFNDVFBf
RU1CRURERURfVjZfU0NPUEUgKi8KLQkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKLQkJ
CX0KLQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgewotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQzLCAiVjY6Tm8gcm91dGUgdG8gaG9zdFxuIik7Ci0JCQkJbmV0LT5zcmNfYWRk
cl9zZWxlY3RlZCA9IDA7Ci0JCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19s
b2NrZWQpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3RjYiwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOwotCQkJCXNjdHBfbV9mcmVlbSht
KTsKLQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7Ci0JCQl9Ci0JCQlsc2E2LT5zaW42X2FkZHIg
PSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7Ci0JCX0gZWxzZSB7Ci0j
aWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJnJvLT5yb19kc3Q7Ci0JCQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmlu
ZWQoQVBQTEVfU05PV0xFT1BBUkQpCi0JCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZf
YWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKLSNlbHNlCi0JCQlpZiAoaW42X2VtYmVkc2Nv
cGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCwgTlVMTCkgIT0gMCkKLSNlbmRp
ZgotI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCi0JCQlpZiAoc2E2X2VtYmVkc2NvcGUoc2luNiwg
TU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAhPSAwKQotI2Vsc2UKLQkJCWlmIChpbjZf
ZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAhPSAwKQotI2VuZGlmCi0JCQkgIHsK
LQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCSAgfQotI2Vu
ZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJCWlmIChvdmVyX2FkZHIgPT0gTlVM
TCkgewotCQkJCXN0cnVjdCBzY3RwX2lmYSAqX2xzcmM7Ci0KLQkJCQlfbHNyYyA9IHNjdHBfc291
cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwgc3RjYiwgcm8sCi0JCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXQsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRfb2ZfYXNvY19vaywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCk7Ci0JCQkJaWYgKF9sc3JjID09IE5VTEwpIHsKLQkJCQkJ
c2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOwotCQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBV
VCwgRUhPU1RVTlJFQUNIKTsKLQkJCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCQlyZXR1cm4gKEVI
T1NUVU5SRUFDSCk7Ci0JCQkJfQotCQkJCWxzYTYtPnNpbjZfYWRkciA9IF9sc3JjLT5hZGRyZXNz
LnNpbjYuc2luNl9hZGRyOwotCQkJCXNjdHBfZnJlZV9pZmEoX2xzcmMpOwotCQkJfSBlbHNlIHsK
LQkJCQlsc2E2LT5zaW42X2FkZHIgPSBvdmVyX2FkZHItPnNpbjYuc2luNl9hZGRyOwotCQkJCVND
VFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7Ci0JCQl9Ci0jaWZkZWYgU0NUUF9F
TUJFRERFRF9WNl9TQ09QRQotI2lmZGVmIFNDVFBfS0FNRQotCQkJKHZvaWQpc2E2X3JlY292ZXJz
Y29wZShzaW42KTsKLSNlbHNlCi0JCQkodm9pZClpbjZfcmVjb3ZlcnNjb3BlKHNpbjYsICZzaW42
LT5zaW42X2FkZHIsIE5VTEwpOwotI2VuZGlmCS8qIFNDVFBfS0FNRSAqLwotI2VuZGlmCS8qIFND
VFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJfQotCQlsc2E2LT5zaW42X3BvcnQgPSBpbnAtPnNj
dHBfbHBvcnQ7Ci0KLQkJaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7Ci0JCQkvKgotCQkJICogc3Jj
IGFkZHIgc2VsZWN0aW9uIGZhaWxlZCB0byBmaW5kIGEgcm91dGUgKG9yCi0JCQkgKiB2YWxpZCBz
b3VyY2UgYWRkciksIHNvIHdlIGNhbid0IGdldCB0aGVyZSBmcm9tCi0JCQkgKiBoZXJlIQotCQkJ
ICovCi0JCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCXJldHVybiAo
RUhPU1RVTlJFQUNIKTsKLQkJfQotI2lmbmRlZiBTQ09QRURST1VUSU5HCi0jaWZkZWYgU0NUUF9F
TUJFRERFRF9WNl9TQ09QRQotCQkvKgotCQkgKiBYWFg6IHNhNiBtYXkgbm90IGhhdmUgYSB2YWxp
ZCBzaW42X3Njb3BlX2lkIGluIHRoZQotCQkgKiBub24tU0NPUEVEUk9VVElORyBjYXNlLgotCQkg
Ki8KLQkJbWVtc2V0KCZsc2E2X3N0b3JhZ2UsIDAsIHNpemVvZihsc2E2X3N0b3JhZ2UpKTsKLQkJ
bHNhNl9zdG9yYWdlLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xF
TgotCQlsc2E2X3N0b3JhZ2Uuc2luNl9sZW4gPSBzaXplb2YobHNhNl9zdG9yYWdlKTsKLSNlbmRp
ZgotI2lmZGVmIFNDVFBfS0FNRQotCQlsc2E2X3N0b3JhZ2Uuc2luNl9hZGRyID0gbHNhNi0+c2lu
Nl9hZGRyOwotCQlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZSgmbHNhNl9zdG9yYWdlKSkg
IT0gMCkgewotI2Vsc2UKLQkJaWYgKChlcnJvciA9IGluNl9yZWNvdmVyc2NvcGUoJmxzYTZfc3Rv
cmFnZSwgJmxzYTYtPnNpbjZfYWRkciwKLQkJICAgIE5VTEwpKSAhPSAwKSB7Ci0jZW5kaWYJCQkJ
LyogU0NUUF9LQU1FICovCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInJlY292ZXIg
c2NvcGUgZmFpbHMgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJ
CXJldHVybiAoZXJyb3IpOwotCQl9Ci0JCS8qIFhYWCAqLwotCQlsc2E2X3N0b3JhZ2Uuc2luNl9h
ZGRyID0gbHNhNi0+c2luNl9hZGRyOwotCQlsc2E2X3N0b3JhZ2Uuc2luNl9wb3J0ID0gaW5wLT5z
Y3RwX2xwb3J0OwotCQlsc2E2ID0gJmxzYTZfc3RvcmFnZTsKLSNlbmRpZiAvKiBTQ1RQX0VNQkVE
REVEX1Y2X1NDT1BFICovCi0jZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLwotCQlpcDZoLT5pcDZf
c3JjID0gbHNhNi0+c2luNl9hZGRyOwotCi0JCWlmIChwb3J0KSB7Ci0JCQlpZiAoaHRvbnMoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpID09IDApIHsKLQkJCQlzY3Rw
X2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tlZCk7Ci0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVI
T1NUVU5SRUFDSCk7Ci0JCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJCXJldHVybiAoRUhPU1RVTlJF
QUNIKTsKLQkJCX0KLQkJCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwNmggKyBz
aXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKLQkJCXVkcC0+dWhfc3BvcnQgPSBodG9ucyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7Ci0JCQl1ZHAtPnVoX2Rwb3J0ID0g
cG9ydDsKLQkJCXVkcC0+dWhfdWxlbiA9IGh0b25zKCh1aW50MTZfdCkocGFja2V0X2xlbmd0aCAt
IHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKTsKLQkJCXVkcC0+dWhfc3VtID0gMDsKLQkJCXNjdHBo
ZHIgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpdWRwICsgc2l6ZW9mKHN0cnVjdCB1ZHBo
ZHIpKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBoZHIgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRy
X3QpaXA2aCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwotCQl9Ci0KLQkJc2N0cGhkci0+c3Jj
X3BvcnQgPSBzcmNfcG9ydDsKLQkJc2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0OwotCQlz
Y3RwaGRyLT52X3RhZyA9IHZfdGFnOwotCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7Ci0KLQkJLyoK
LQkJICogV2Ugc2V0IHRoZSBob3AgbGltaXQgbm93IHNpbmNlIHRoZXJlIGlzIGEgZ29vZCBjaGFu
Y2UKLQkJICogdGhhdCBvdXIgcm8gcG9pbnRlciBpcyBub3cgZmlsbGVkCi0JCSAqLwotCQlpcDZo
LT5pcDZfaGxpbSA9IFNDVFBfR0VUX0hMSU0oaW5wLCBybyk7Ci0jaWYgIShkZWZpbmVkKF9fUGFu
ZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKLQkJaWZwID0gU0NUUF9HRVRfSUZOX1ZP
SURfRlJPTV9ST1VURShybyk7Ci0jZW5kaWYKLQotI2lmZGVmIFNDVFBfREVCVUcKLQkJLyogQ29w
eSB0byBiZSBzdXJlIHNvbWV0aGluZyBiYWQgaXMgbm90IGhhcHBlbmluZyAqLwotCQlzaW42LT5z
aW42X2FkZHIgPSBpcDZoLT5pcDZfZHN0OwotCQlsc2E2LT5zaW42X2FkZHIgPSBpcDZoLT5pcDZf
c3JjOwotI2VuZGlmCi0KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJDYWxsaW5nIGlw
djYgb3V0cHV0IHJvdXRpbmUgZnJvbSBsb3cgbGV2ZWxcbiIpOwotCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMywgInNyYzogIik7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDMs
IChzdHJ1Y3Qgc29ja2FkZHIgKilsc2E2KTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMs
ICJkc3Q6ICIpOwotCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQzLCAoc3RydWN0IHNv
Y2thZGRyICopc2luNik7Ci0JCWlmIChuZXQpIHsKLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkvKiBwcmVzZXJ2ZSB0aGUgcG9ydCBhbmQgc2Nv
cGUgZm9yIGxpbmsgbG9jYWwgc2VuZCAqLwotCQkJcHJldl9zY29wZSA9IHNpbjYtPnNpbjZfc2Nv
cGVfaWQ7Ci0JCQlwcmV2X3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCX0KLQotCQlpZiAoU0NU
UF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7Ci0JCQkvKiBmYWlsZWQgdG8gcHJlcGVu
ZCBkYXRhLCBnaXZlIHVwICovCi0JCQlzY3RwX21fZnJlZW0obSk7Ci0JCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwot
CQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCVNDVFBfQVRUQUNIX0NIQUlOKG9fcGFrLCBtLCBw
YWNrZXRfbGVuZ3RoKTsKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19D
U1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0JCQlzY3Rw
aGRyLT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3QgaXA2
X2hkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
c2VuZHN3Y3JjKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQl1ZHAtPnVo
X3N1bSA9IDA7Ci0jZWxpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKCh1ZHAtPnVo
X3N1bSA9IGluNl9ja3N1bShvX3BhaywgSVBQUk9UT19VRFAsIHNpemVvZihzdHJ1Y3QgaXA2X2hk
ciksIHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgewotCQkJ
CXVkcC0+dWhfc3VtID0gMHhmZmZmOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0jaWYgZGVm
aW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2Ny
Yyk7Ci0jZWxzZQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDgwMDAwMAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwCi0JCQlzY3RwaGRyLT5j
aGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0sIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikp
OwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLSNlbHNlCi0jaWYgX19GcmVl
QlNEX3ZlcnNpb24gPiA5MDEwMDAKLQkJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1ND
VFBfSVBWNjsKLSNlbHNlCi0JCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOwot
I2VuZGlmCi0JCQltLT5tX3BrdGhkci5jc3VtX2RhdGEgPSBvZmZzZXRvZihzdHJ1Y3Qgc2N0cGhk
ciwgY2hlY2tzdW0pOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLSNlbmRp
ZgotI2Vsc2UKLQkJCWlmICghKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3Bi
YWNrKSAmJgotCQkJICAgICAgKHN0Y2IpICYmIChzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Nj
b3BlKSkpIHsKLQkJCQlzY3RwaGRyLT5jaGVja3N1bSA9IHNjdHBfY2FsY3VsYXRlX2Nrc3VtKG0s
IHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRz
d2NyYyk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2NyYyk7
Ci0JCQl9Ci0jZW5kaWYKLSNlbmRpZgotCQl9Ci0JCS8qIHNlbmQgaXQgb3V0LiB0YWJsZSBpZCBp
cyB0YWtlbiBmcm9tIHN0Y2IgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKLQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0
X3VubG9ja2VkKSkgJiYgKHNvX2xvY2tlZCkpIHsKLQkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsK
LQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMCk7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIFNDVFBf
UEFDS0VUX0xPR0dJTkcKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykKLQkJCXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7
Ci0jZW5kaWYKLSNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pKQotCQlTQ1RQX0lQNl9PVVRQVVQocmV0LCBvX3BhaywgKHN0cnVjdCByb3V0ZV9pbjYgKily
bywgJmlmcCwgc3RjYiwgdnJmX2lkKTsKLSNlbHNlCi0JCVNDVFBfSVA2X09VVFBVVChyZXQsIG9f
cGFrLCAoc3RydWN0IHJvdXRlX2luNiAqKXJvLCBOVUxMLCBzdGNiLCB2cmZfaWQpOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0JCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkpICYmIChzb19s
b2NrZWQpKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7Ci0JCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOwotCQl9Ci0jZW5kaWYKLQkJaWYgKG5ldCkgewotCQkJLyogZm9yIGxpbmsgbG9j
YWwgdGhpcyBtdXN0IGJlIGRvbmUgKi8KLQkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBwcmV2X3Nj
b3BlOwotCQkJc2luNi0+c2luNl9wb3J0ID0gcHJldl9wb3J0OwotCQl9Ci0JCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQzLCAicmV0dXJuIGZyb20gc2VuZCBpcyAlZFxuIiwgcmV0KTsKLQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVS
NjQoc2N0cHNfb3V0cGFja2V0cyk7Ci0JCWlmIChyZXQpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3NlbmRlcnJvcnMpOwotCQl9Ci0JCWlmIChuZXQgPT0gTlVMTCkgewotCQkJLyogTm93IGlm
IHdlIGhhZCBhIHRlbXAgcm91dGUgZnJlZSBpdCAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gOTAxMDAwCi0JCQlST19SVEZSRUUocm8pOwotI2Vsc2UK
LQkJCWlmIChyby0+cm9fcnQpIHsKLQkJCQlSVEZSRUUocm8tPnJvX3J0KTsKLQkJCQlyby0+cm9f
cnQgPSBOVUxMOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQkvKiBQTVRVIGNoZWNrIHZl
cnN1cyBzbWFsbGVzdCBhc29jIE1UVSBnb2VzIGhlcmUgKi8KLQkJCWlmIChyby0+cm9fcnQgPT0g
TlVMTCkgewotCQkJCS8qIFJvdXRlIHdhcyBmcmVlZCAqLwotCQkJCWlmIChuZXQtPnJvLl9zX2Fk
ZHIgJiYKLQkJCQkgICAgbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCkgewotCQkJCQlzY3RwX2ZyZWVf
aWZhKG5ldC0+cm8uX3NfYWRkcik7Ci0JCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJ
fQotCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwotCQkJfQotCQkJaWYgKChyby0+cm9f
cnQgIT0gTlVMTCkgJiYKLQkJCSAgICAobmV0LT5yby5fc19hZGRyKSkgewotCQkJCXVpbnQzMl90
IG10dTsKLQkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJvLl9zX2Fk
ZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19ydCk7Ci0JCQkJaWYgKG10dSAmJgotCQkJ
CSAgICAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBtdHUpKSB7Ci0JCQkJCXNjdHBfbXR1X3Np
emVfcmVzZXQoaW5wLCAmc3RjYi0+YXNvYywgbXR1KTsKLQkJCQkJbmV0LT5tdHUgPSBtdHU7Ci0J
CQkJCWlmIChuZXQtPnBvcnQpIHsKLQkJCQkJCW5ldC0+bXR1IC09IHNpemVvZihzdHJ1Y3QgdWRw
aGRyKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQllbHNlIGlmIChpZnApIHsKLSNpZiBkZWZpbmVkKF9f
V2luZG93c19fKQotI2RlZmluZSBORF9JRklORk8oaWZwKQkoaWZwKQotI2RlZmluZSBsaW5rbXR1
CQlpZl9tdHUKLSNlbmRpZgotCQkJCWlmIChORF9JRklORk8oaWZwKS0+bGlua210dSAmJgotCQkJ
CSAgICAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBORF9JRklORk8oaWZwKS0+bGlua210dSkp
IHsKLQkJCQkJc2N0cF9tdHVfc2l6ZV9yZXNldChpbnAsCi0JCQkJCSAgICAmc3RjYi0+YXNvYywK
LQkJCQkJICAgIE5EX0lGSU5GTyhpZnApLT5saW5rbXR1KTsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYK
LQkJfQotCQlyZXR1cm4gKHJldCk7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCWNhc2UgQUZfQ09OTjoKLQl7Ci0JCWNoYXIgKmJ1ZmZlcjsKLQkJc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKnNjb25uOwotCQlpbnQgbGVuOwotCi0JCXNjb25uID0gKHN0cnVjdCBzb2NrYWRk
cl9jb25uICopdG87Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JCW5ld20gPSBz
Y3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlm
IChuZXdtID09IE5VTEwpIHsKLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0J
CQlyZXR1cm4gKEVOT01FTSk7Ci0JCX0KLQkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsK
LQkJU0NUUF9CVUZfTEVOKG5ld20pID0gbGVuOwotCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsK
LQkJbSA9IG5ld207Ci0JCXBhY2tldF9sZW5ndGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7Ci0J
CXNjdHBoZHIgPSBtdG9kKG0sIHN0cnVjdCBzY3RwaGRyICopOwotCQlzY3RwaGRyLT5zcmNfcG9y
dCA9IHNyY19wb3J0OwotCQlzY3RwaGRyLT5kZXN0X3BvcnQgPSBkZXN0X3BvcnQ7Ci0JCXNjdHBo
ZHItPnZfdGFnID0gdl90YWc7Ci0JCXNjdHBoZHItPmNoZWNrc3VtID0gMDsKLSNpZiBkZWZpbmVk
KFNDVFBfV0lUSF9OT19DU1VNKQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kbm9jcmMpOwot
I2Vsc2UKLQkJaWYgKFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPT0gMCkgewotCQkJ
c2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCAwKTsKLQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19zZW5kaHdjcmMpOwotCQl9Ci0jZW5kaWYKLQkJaWYgKHRvc192YWx1ZSA9PSAwKSB7
Ci0JCQl0b3NfdmFsdWUgPSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3RvczsKLQkJfQotCQl0b3Nf
dmFsdWUgJj0gMHhmYzsKLQkJaWYgKGVjbl9vaykgewotCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0
X2VjdChzdGNiKTsKLQkJfQotCQkvKiBEb24ndCBhbGxvYy9mcmVlIGZvciBlYWNoIHBhY2tldCAq
LwotCQlpZiAoKGJ1ZmZlciA9IG1hbGxvYyhwYWNrZXRfbGVuZ3RoKSkgIT0gTlVMTCkgewotCQkJ
bV9jb3B5ZGF0YShtLCAwLCBwYWNrZXRfbGVuZ3RoLCBidWZmZXIpOwotCQkJcmV0ID0gU0NUUF9C
QVNFX1ZBUihjb25uX291dHB1dCkoc2Nvbm4tPnNjb25uX2FkZHIsIGJ1ZmZlciwgcGFja2V0X2xl
bmd0aCwgdG9zX3ZhbHVlLCBub2ZyYWdtZW50X2ZsYWcpOwotCQkJZnJlZShidWZmZXIpOwotCQl9
IGVsc2UgewotCQkJcmV0ID0gRU5PTUVNOwotCQl9Ci0JCXNjdHBfbV9mcmVlbShtKTsKLQkJcmV0
dXJuIChyZXQpOwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQxLCAiVW5rbm93biBwcm90b2NvbCAoVFNOSCkgdHlwZSAlZFxuIiwKLQkJICAgICAgICAo
KHN0cnVjdCBzb2NrYWRkciAqKXRvKS0+c2FfZmFtaWx5KTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwot
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFRkFVTFQpOwotCQlyZXR1cm4gKEVGQVVMVCk7Ci0JfQotfQotCi0KLXZvaWQK
LXNjdHBfc2VuZF9pbml0aWF0ZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICAp
Ci17Ci0Jc3RydWN0IG1idWYgKm0sICptX2xhc3Q7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0Owot
CXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXQ7Ci0Jc3RydWN0IHNjdHBfc3VwcG9ydGVkX2Fk
ZHJfcGFyYW0gKnN1cF9hZGRyOwotCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNh
dGlvbiAqYWxpOwotCXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJf
c3VwcG9ydGVkOwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQlpbnQgY250X2luaXRzX3Rv
ID0gMDsKLQlpbnQgZXJyb3I7Ci0JdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVuLCBwYWRkaW5n
X2xlbiwgcGFyYW1ldGVyX2xlbjsKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlmIChzb19s
b2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9IGVsc2Ug
ewotCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7Ci0JfQotI2VuZGlmCi0J
LyogSU5JVCdzIGFsd2F5cyBnbyB0byB0aGUgcHJpbWFyeSAoYW5kIHVzdWFsbHkgT05MWSBhZGRy
ZXNzKSAqLwotCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQlpZiAobmV0
ID09IE5VTEwpIHsKLQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7Ci0JCWlm
IChuZXQgPT0gTlVMTCkgewotCQkJLyogVFNOSCAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIHdl
IGNvbmZpcm0gYW55IGFkZHJlc3Mgd2Ugc2VuZCBhbiBJTklUIHRvICovCi0JCW5ldC0+ZGVzdF9z
dGF0ZSAmPSB+U0NUUF9BRERSX1VOQ09ORklSTUVEOwotCQkodm9pZClzY3RwX3NldF9wcmltYXJ5
X2FkZHIoc3RjYiwgTlVMTCwgbmV0KTsKLQl9IGVsc2UgewotCQkvKiB3ZSBjb25maXJtIGFueSBh
ZGRyZXNzIHdlIHNlbmQgYW4gSU5JVCB0byAqLwotCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBf
QUREUl9VTkNPTkZJUk1FRDsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJTZW5k
aW5nIElOSVRcbiIpOwotI2lmZGVmIElORVQ2Ci0JaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9m
YW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJLyoKLQkJICogc3BlY2lhbCBob29rLCBpZiB3ZSBhcmUg
c2VuZGluZyB0byBsaW5rIGxvY2FsIGl0IHdpbGwgbm90Ci0JCSAqIHNob3cgdXAgaW4gb3VyIHBy
aXZhdGUgYWRkcmVzcyBjb3VudC4KLQkJICovCi0JCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwo
Jm5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRkcikpCi0JCQljbnRfaW5pdHNfdG8gPSAxOwot
CX0KLSNlbmRpZgotCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRp
bWVyKSkgewotCQkvKiBUaGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4gKi8KLQkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDQsICJTZW5kaW5nIElOSVQgLSBmYWlsZWQgdGltZXI/XG4iKTsKLQkJ
cmV0dXJuOwotCX0KLQkvKiBzdGFydCB0aGUgSU5JVCB0aW1lciAqLwotCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0KTsKLQotCW0gPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAo
bSA9PSBOVUxMKSB7Ci0JCS8qIE5vIG1lbW9yeSwgSU5JVCB0aW1lciB3aWxsIHJlLWF0dGVtcHQu
ICovCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUIC0gbWJ1Zj9c
biIpOwotCQlyZXR1cm47Ci0JfQotCWNodW5rX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9jaHVuayk7Ci0JcGFkZGluZ19sZW4gPSAwOwotCS8qIE5vdyBsZXRzIHB1dCB0
aGUgY2h1bmsgaGVhZGVyIGluIHBsYWNlICovCi0JaW5pdCA9IG10b2QobSwgc3RydWN0IHNjdHBf
aW5pdF9jaHVuayAqKTsKLQkvKiBub3cgdGhlIGNodW5rIGhlYWRlciAqLwotCWluaXQtPmNoLmNo
dW5rX3R5cGUgPSBTQ1RQX0lOSVRJQVRJT047Ci0JaW5pdC0+Y2guY2h1bmtfZmxhZ3MgPSAwOwot
CS8qIGZpbGwgaW4gbGF0ZXIgZnJvbSBtYnVmIHdlIGJ1aWxkICovCi0JaW5pdC0+Y2guY2h1bmtf
bGVuZ3RoID0gMDsKLQkvKiBwbGFjZSBpbiBteSB0YWcgKi8KLQlpbml0LT5pbml0LmluaXRpYXRl
X3RhZyA9IGh0b25sKHN0Y2ItPmFzb2MubXlfdnRhZyk7Ci0JLyogc2V0IHVwIHNvbWUgb2YgdGhl
IGNyZWRpdHMuICovCi0JaW5pdC0+aW5pdC5hX3J3bmQgPSBodG9ubChtYXgoaW5wLT5zY3RwX3Nv
Y2tldD9TQ1RQX1NCX0xJTUlUX1JDVihpbnAtPnNjdHBfc29ja2V0KTowLAotCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTUlOSU1BTF9SV05EKSk7Ci0JaW5pdC0+aW5pdC5udW1f
b3V0Ym91bmRfc3RyZWFtcyA9IGh0b25zKHN0Y2ItPmFzb2MucHJlX29wZW5fc3RyZWFtcyk7Ci0J
aW5pdC0+aW5pdC5udW1faW5ib3VuZF9zdHJlYW1zID0gaHRvbnMoc3RjYi0+YXNvYy5tYXhfaW5i
b3VuZF9zdHJlYW1zKTsKLQlpbml0LT5pbml0LmluaXRpYWxfdHNuID0gaHRvbmwoc3RjYi0+YXNv
Yy5pbml0X3NlcV9udW1iZXIpOwotCi0JLyogQWRhcHRhdGlvbiBsYXllciBpbmRpY2F0aW9uIHBh
cmFtZXRlciAqLwotCWlmIChpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3Jf
cHJvdmlkZWQpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNj
dHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uKTsKLQkJYWxpID0gKHN0cnVjdCBzY3RwX2Fk
YXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVu
KTsKLQkJYWxpLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9VTFBfQURBUFRBVElPTik7Ci0J
CWFsaS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCWFsaS0+aW5k
aWNhdGlvbiA9IGh0b25sKGlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcik7
Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEVDTiBwYXJhbWV0ZXIg
Ki8KLQlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDEpIHsKLQkJcGFyYW1ldGVyX2xl
biA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgt
PnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0VDTl9DQVBBQkxFKTsKLQkJcGgtPnBhcmFtX2xlbmd0
aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsK
LQl9Ci0KLQkvKiBQUi1TQ1RQIHN1cHBvcnRlZCBwYXJhbWV0ZXIgKi8KLQlpZiAoc3RjYi0+YXNv
Yy5wcnNjdHBfc3VwcG9ydGVkID09IDEpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClz
aXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBo
dG9ucyhTQ1RQX1BSU0NUUF9TVVBQT1JURUQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMo
cGFyYW1ldGVyX2xlbik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8q
IEFkZCBOQVQgZnJpZW5kbHkgcGFyYW1ldGVyLiAqLwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpKSB7Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWlu
dDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKLQkJcGggPSAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBoLT5wYXJhbV90
eXBlID0gaHRvbnMoU0NUUF9IQVNfTkFUX1NVUFBPUlQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0g
aHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0K
LQotCS8qIEFuZCBub3cgdGVsbCB0aGUgcGVlciB3aGljaCBleHRlbnNpb25zIHdlIHN1cHBvcnQg
Ki8KLQludW1fZXh0ID0gMDsKLQlwcl9zdXBwb3J0ZWQgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVk
X2NodW5rX3R5cGVzX3BhcmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwotCWlm
IChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkgewotCQlwcl9zdXBwb3J0ZWQtPmNo
dW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsKLQkJaWYgKHN0Y2It
PmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7Ci0JCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251
bV9leHQrK10gPSBTQ1RQX0lGT1JXQVJEX0NVTV9UU047Ci0JCX0KLQl9Ci0JaWYgKHN0Y2ItPmFz
b2MuYXV0aF9zdXBwb3J0ZWQgPT0gMSkgewotCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251
bV9leHQrK10gPSBTQ1RQX0FVVEhFTlRJQ0FUSU9OOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5hc2Nv
bmZfc3VwcG9ydGVkID09IDEpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0
KytdID0gU0NUUF9BU0NPTkY7Ci0JCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsr
XSA9IFNDVFBfQVNDT05GX0FDSzsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9y
dGVkID09IDEpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NU
UF9TVFJFQU1fUkVTRVQ7Ci0JfQotCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgewot
CQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lEQVRBOwotCX0K
LQlpZiAoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEpIHsKLQkJcHJfc3VwcG9ydGVk
LT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOwotCX0KLQlp
ZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCXByX3N1cHBvcnRlZC0+
Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfUEFDS0VUX0RST1BQRUQ7Ci0JfQotCWlmIChu
dW1fZXh0ID4gMCkgewotCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qg
c2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0pICsgbnVtX2V4dDsKLQkJcHJfc3VwcG9y
dGVkLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVVBQT1JURURfQ0hVTktfRVhUKTsKLQkJ
cHJfc3VwcG9ydGVkLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJ
cGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47
Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQkvKiBhZGQgYXV0aGVudGljYXRp
b24gcGFyYW1ldGVycyAqLwotCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkKSB7Ci0JCS8q
IGF0dGFjaCBSQU5ET00gcGFyYW1ldGVyLCBpZiBhdmFpbGFibGUgKi8KLQkJaWYgKHN0Y2ItPmFz
b2MuYXV0aGluZm8ucmFuZG9tICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfcmFuZG9t
ICpyYW5kcDsKLQotCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJCW1lbXNldChtdG9kKG0s
IGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0JCQkJY2h1bmtfbGVuICs9
IHBhZGRpbmdfbGVuOwotCQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJCX0KLQkJCXJhbmRwID0gKHN0
cnVjdCBzY3RwX2F1dGhfcmFuZG9tICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwot
CQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9yYW5k
b20pICsgc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb21fbGVuOwotCQkJLyogcmFuZG9tIGtleSBh
bHJlYWR5IGNvbnRhaW5zIHRoZSBoZWFkZXIgKi8KLQkJCW1lbWNweShyYW5kcCwgc3RjYi0+YXNv
Yy5hdXRoaW5mby5yYW5kb20tPmtleSwgcGFyYW1ldGVyX2xlbik7Ci0JCQlwYWRkaW5nX2xlbiA9
IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQkJCWNodW5rX2xl
biArPSBwYXJhbWV0ZXJfbGVuOwotCQl9Ci0JCS8qIGFkZCBITUFDX0FMR08gcGFyYW1ldGVyICov
Ci0JCWlmIChzdGNiLT5hc29jLmxvY2FsX2htYWNzICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3Rw
X2F1dGhfaG1hY19hbGdvICpobWFjczsKLQotCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJ
CW1lbXNldChtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0J
CQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJCX0K
LQkJCWhtYWNzID0gKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICopKG10b2QobSwgY2FkZHJf
dCkgKyBjaHVua19sZW4pOwotCQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0
cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdGNiLT5hc29jLmxvY2FsX2htYWNzLT5udW1fYWxnbyAqIHNpemVvZih1aW50MTZfdCkpOwot
CQkJaG1hY3MtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0hNQUNfTElTVCk7Ci0JCQlobWFj
cy0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCQlzY3RwX3Nlcmlh
bGl6ZV9obWFjbGlzdChzdGNiLT5hc29jLmxvY2FsX2htYWNzLCAodWludDhfdCAqKWhtYWNzLT5o
bWFjX2lkcyk7Ci0JCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0g
cGFyYW1ldGVyX2xlbjsKLQkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCQl9Ci0JCS8q
IGFkZCBDSFVOS1MgcGFyYW1ldGVyICovCi0JCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1
bmtzICE9IE5VTEwpIHsKLQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOwot
Ci0JCQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkg
KyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKLQkJCQljaHVua19sZW4gKz0gcGFkZGluZ19s
ZW47Ci0JCQkJcGFkZGluZ19sZW4gPSAwOwotCQkJfQotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3Rw
X2F1dGhfY2h1bmtfbGlzdCAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJCXBh
cmFtZXRlcl9sZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xp
c3QpICsKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXV0aF9nZXRfY2hrbGlz
dF9zaXplKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MpKTsKLQkJCWNodW5rcy0+cGgucGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfQ0hVTktfTElTVCk7Ci0JCQljaHVua3MtPnBoLnBhcmFtX2xl
bmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQkJc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVu
a3Moc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcywgY2h1bmtzLT5jaHVua190eXBlcyk7Ci0J
CQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xl
bjsKLQkJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCQl9Ci0JfQotCi0JLyogbm93IGFu
eSBjb29raWUgdGltZSBleHRlbnNpb25zICovCi0JaWYgKHN0Y2ItPmFzb2MuY29va2llX3ByZXNl
cnZlX3JlcSkgewotCQlzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0gKmNvb2tpZV9w
cmVzZXJ2ZTsKLQotCQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCQltZW1zZXQobXRvZChtLCBj
YWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4pOwotCQkJY2h1bmtfbGVuICs9IHBh
ZGRpbmdfbGVuOwotCQkJcGFkZGluZ19sZW4gPSAwOwotCQl9Ci0JCXBhcmFtZXRlcl9sZW4gPSAo
dWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9wZXJzZXJ2ZV9wYXJhbSk7Ci0JCWNv
b2tpZV9wcmVzZXJ2ZSA9IChzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0gKikobXRv
ZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCWNvb2tpZV9wcmVzZXJ2ZS0+cGgucGFyYW1f
dHlwZSA9IGh0b25zKFNDVFBfQ09PS0lFX1BSRVNFUlZFKTsKLQkJY29va2llX3ByZXNlcnZlLT5w
aC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJY29va2llX3ByZXNlcnZl
LT50aW1lID0gaHRvbmwoc3RjYi0+YXNvYy5jb29raWVfcHJlc2VydmVfcmVxKTsKLQkJc3RjYi0+
YXNvYy5jb29raWVfcHJlc2VydmVfcmVxID0gMDsKLQkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9s
ZW47Ci0JfQotCi0JaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2FsIHx8IHN0Y2It
PmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCXVpbnQ4X3QgaTsKLQotCQlpZiAocGFk
ZGluZ19sZW4gPiAwKSB7Ci0JCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwg
MCwgcGFkZGluZ19sZW4pOwotCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJcGFkZGlu
Z19sZW4gPSAwOwotCQl9Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX3BhcmFtaGRyKTsKLQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xlZ2Fs
KSB7Ci0JCQlwYXJhbWV0ZXJfbGVuICs9ICh1aW50MTZfdClzaXplb2YodWludDE2X3QpOwotCQl9
Ci0JCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgewotCQkJcGFyYW1ldGVy
X2xlbiArPSAodWludDE2X3Qpc2l6ZW9mKHVpbnQxNl90KTsKLQkJfQotCQlzdXBfYWRkciA9IChz
dHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfYWRkcl9wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1
bmtfbGVuKTsKLQkJc3VwX2FkZHItPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NVUFBPUlRF
RF9BRERSVFlQRSk7Ci0JCXN1cF9hZGRyLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0
ZXJfbGVuKTsKLQkJaSA9IDA7Ci0JCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdh
bCkgewotCQkJc3VwX2FkZHItPmFkZHJfdHlwZVtpKytdID0gaHRvbnMoU0NUUF9JUFY0X0FERFJF
U1MpOwotCQl9Ci0JCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgewotCQkJ
c3VwX2FkZHItPmFkZHJfdHlwZVtpKytdID0gaHRvbnMoU0NUUF9JUFY2X0FERFJFU1MpOwotCQl9
Ci0JCXBhZGRpbmdfbGVuID0gNCAtIDIgKiBpOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xl
bjsKLQl9Ci0KLQlTQ1RQX0JVRl9MRU4obSkgPSBjaHVua19sZW47Ci0JLyogbm93IHRoZSBhZGRy
ZXNzZXMgKi8KLQkvKiBUbyBvcHRpbWl6ZSB0aGlzIHdlIGNvdWxkIHB1dCB0aGUgc2NvcGluZyBz
dHVmZgotCSAqIGludG8gYSBzdHJ1Y3R1cmUgYW5kIHJlbW92ZSB0aGUgaW5kaXZpZHVhbCB1aW50
OCdzIGZyb20KLQkgKiB0aGUgYXNzb2Mgc3RydWN0dXJlLiBUaGVuIHdlIGNvdWxkIGp1c3Qgc2lm
YSBpbiB0aGUKLQkgKiBhZGRyZXNzIHdpdGhpbiB0aGUgc3RjYi4gQnV0IGZvciBub3cgdGhpcyBp
cyBhIHF1aWNrCi0JICogaGFjayB0byBnZXQgdGhlIGFkZHJlc3Mgc3R1ZmYgdGVhc2VkIGFwYXJ0
LgotCSAqLwotCW1fbGFzdCA9IHNjdHBfYWRkX2FkZHJlc3Nlc190b19pX2lhKGlucCwgc3RjYiwg
JnN0Y2ItPmFzb2Muc2NvcGUsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bSwgY250X2luaXRzX3RvLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZw
YWRkaW5nX2xlbiwgJmNodW5rX2xlbik7Ci0KLQlpbml0LT5jaC5jaHVua19sZW5ndGggPSBodG9u
cyhjaHVua19sZW4pOwotCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKLQkJaWYgKHNjdHBfYWRkX3Bh
ZF90b21idWYobV9sYXN0LCBwYWRkaW5nX2xlbikgPT0gTlVMTCkgewotCQkJc2N0cF9tX2ZyZWVt
KG0pOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAi
U2VuZGluZyBJTklUIC0gY2FsbHMgbG93bGV2ZWxfb3V0cHV0XG4iKTsKLQlpZiAoKGVycm9yID0g
c2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBuZXQsCi0JICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5f
bF9hZGRyLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtLCAwLCBO
VUxMLCAwLCAwLCAwLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LCBodG9ubCgwKSwKLQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs
IDAsCi0jZW5kaWYKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29f
bG9ja2VkKSkpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJHYWsgc2VuZCBlcnJv
ciAlZFxuIiwgZXJyb3IpOwotCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJc3RjYi0+YXNv
Yy5pZnBfaGFkX2Vub2J1ZiA9IDE7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVy
cik7Ci0JCX0KLQl9IGVsc2UgewotCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMDsKLQl9
Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZuZXQtPmxhc3Rfc2VudF90aW1lKTsKLX0KLQotc3Ry
dWN0IG1idWYgKgotc2N0cF9hcmV0aGVyZV91bnJlY29nbml6ZWRfcGFyYW1ldGVycyhzdHJ1Y3Qg
bWJ1ZiAqaW5faW5pdHBrdCwKLQlpbnQgcGFyYW1fb2Zmc2V0LCBpbnQgKmFib3J0X3Byb2Nlc3Np
bmcsIHN0cnVjdCBzY3RwX2NodW5raGRyICpjcCwgaW50ICpuYXRfZnJpZW5kbHkpCi17Ci0JLyoK
LQkgKiBHaXZlbiBhIG1idWYgY29udGFpbmluZyBhbiBJTklUIG9yIElOSVQtQUNLIHdpdGggdGhl
IHBhcmFtX29mZnNldAotCSAqIGJlaW5nIGVxdWFsIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBh
cmFtcyBpLmUuIChpcGhsZW4gKwotCSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X21zZykgcGFy
c2UgdGhyb3VnaCB0aGUgcGFyYW1ldGVycyB0byB0aGUKLQkgKiBlbmQgb2YgdGhlIG1idWYgdmVy
aWZ5aW5nIHRoYXQgYWxsIHBhcmFtZXRlcnMgYXJlIGtub3duLgotCSAqCi0JICogRm9yIHVua25v
d24gcGFyYW1ldGVycyBidWlsZCBhbmQgcmV0dXJuIGEgbWJ1ZiB3aXRoCi0JICogVU5SRUNPR05J
WkVEX1BBUkFNRVRFUiBlcnJvcnMuIElmIHRoZSBmbGFncyBpbmRpY2F0ZSB0byBzdG9wCi0JICog
cHJvY2Vzc2luZyB0aGlzIGNodW5rIHN0b3AsIGFuZCBzZXQgKmFib3J0X3Byb2Nlc3NpbmcgdG8g
MS4KLQkgKgotCSAqIEJ5IGhhdmluZyBwYXJhbV9vZmZzZXQgYmUgcHJlLXNldCB0byB3aGVyZSBw
YXJhbWV0ZXJzIGJlZ2luIGl0IGlzCi0JICogaG9wZWQgdGhhdCB0aGlzIHJvdXRpbmUgbWF5IGJl
IHJldXNlZCBpbiB0aGUgZnV0dXJlIGJ5IG5ldwotCSAqIGZlYXR1cmVzLgotCSAqLwotCXN0cnVj
dCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbXM7Ci0KLQlzdHJ1Y3QgbWJ1ZiAqbWF0LCAqb3Bf
ZXJyOwotCWNoYXIgdGVtcGJ1ZltTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKLQlpbnQgYXQsIGxp
bWl0LCBwYWRfbmVlZGVkOwotCXVpbnQxNl90IHB0eXBlLCBwbGVuLCBwYWRkZWRfc2l6ZTsKLQlp
bnQgZXJyX2F0OwotCi0JKmFib3J0X3Byb2Nlc3NpbmcgPSAwOwotCW1hdCA9IGluX2luaXRwa3Q7
Ci0JZXJyX2F0ID0gMDsKLQlsaW1pdCA9IG50b2hzKGNwLT5jaHVua19sZW5ndGgpIC0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOwotCWF0ID0gcGFyYW1fb2Zmc2V0OwotCW9wX2VyciA9
IE5VTEw7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJDaGVjayBmb3IgdW5yZWNvZ25p
emVkIHBhcmFtJ3NcbiIpOwotCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG1hdCwgYXQsICZw
YXJhbXMsIHNpemVvZihwYXJhbXMpKTsKLQl3aGlsZSAoKHBoZHIgIT0gTlVMTCkgJiYgKChzaXpl
X3QpbGltaXQgPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkpIHsKLQkJcHR5cGUgPSBu
dG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKLQkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0
aCk7Ci0JCWlmICgocGxlbiA+IGxpbWl0KSB8fCAocGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YXJhbWhkcikpKSB7Ci0JCQkvKiB3YWNrZWQgcGFyYW1ldGVyICovCi0JCQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yICVkXG4iLCBwbGVuKTsKLQkJCWdv
dG8gaW52YWxpZF9zaXplOwotCQl9Ci0JCWxpbWl0IC09IFNDVFBfU0laRTMyKHBsZW4pOwotCQkv
Ki0KLQkJICogQWxsIHBhcmFtZXRlcnMgZm9yIGFsbCBjaHVua3MgdGhhdCB3ZSBrbm93L3VuZGVy
c3RhbmQgYXJlCi0JCSAqIGxpc3RlZCBoZXJlLiBXZSBwcm9jZXNzIHRoZW0gb3RoZXIgcGxhY2Vz
IGFuZCBtYWtlCi0JCSAqIGFwcHJvcHJpYXRlIHN0b3AgYWN0aW9ucyBwZXIgdGhlIHVwcGVyIGJp
dHMuIEhvd2V2ZXIgdGhpcwotCQkgKiBpcyB0aGUgZ2VuZXJpYyByb3V0aW5lIHByb2Nlc3Nvcidz
IGNhbiBjYWxsIHRvIGdldCBiYWNrCi0JCSAqIGFuIG9wZXJyLi4gdG8gZWl0aGVyIGluY29ycG9y
YXRlIChpbml0LWFjaykgb3Igc2VuZC4KLQkJICovCi0JCXBhZGRlZF9zaXplID0gU0NUUF9TSVpF
MzIocGxlbik7Ci0JCXN3aXRjaCAocHR5cGUpIHsKLQkJCS8qIFBhcmFtJ3Mgd2l0aCB2YXJpYWJs
ZSBzaXplICovCi0JCWNhc2UgU0NUUF9IRUFSVEJFQVRfSU5GTzoKLQkJY2FzZSBTQ1RQX1NUQVRF
X0NPT0tJRToKLQkJY2FzZSBTQ1RQX1VOUkVDT0dfUEFSQU06Ci0JCWNhc2UgU0NUUF9FUlJPUl9D
QVVTRV9JTkQ6Ci0JCQkvKiBvayBza2lwIGZ3ZCAqLwotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0J
CQlicmVhazsKLQkJCS8qIFBhcmFtJ3Mgd2l0aCB2YXJpYWJsZSBzaXplIHdpdGhpbiBhIHJhbmdl
ICovCi0JCWNhc2UgU0NUUF9DSFVOS19MSVNUOgotCQljYXNlIFNDVFBfU1VQUE9SVEVEX0NIVU5L
X0VYVDoKLQkJCWlmIChwYWRkZWRfc2l6ZSA+IChzaXplb2Yoc3RydWN0IHNjdHBfc3VwcG9ydGVk
X2NodW5rX3R5cGVzX3BhcmFtKSArIChzaXplb2YodWludDhfdCkgKiBTQ1RQX01BWF9TVVBQT1JU
RURfRVhUKSkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6
ZSAtIGVycm9yIGNoa2xpc3QgJWRcbiIsIHBsZW4pOwotCQkJCWdvdG8gaW52YWxpZF9zaXplOwot
CQkJfQotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NVUFBP
UlRFRF9BRERSVFlQRToKLQkJCWlmIChwYWRkZWRfc2l6ZSA+IFNDVFBfTUFYX0FERFJfUEFSQU1T
X1NJWkUpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAt
IGVycm9yIHN1cGFkZHJ0eXBlICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFsaWRfc2l6ZTsK
LQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9SQU5E
T006Ci0JCQlpZiAocGFkZGVkX3NpemUgPiAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9t
KSArIFNDVFBfUkFORE9NX01BWF9TSVpFKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgcmFuZG9tICVkXG4iLCBwbGVuKTsKLQkJCQlnb3Rv
IGludmFsaWRfc2l6ZTsKLQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0J
CWNhc2UgU0NUUF9TRVRfUFJJTV9BRERSOgotCQljYXNlIFNDVFBfREVMX0lQX0FERFJFU1M6Ci0J
CWNhc2UgU0NUUF9BRERfSVBfQUREUkVTUzoKLQkJCWlmICgocGFkZGVkX3NpemUgIT0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pKSAmJgotCQkJICAgIChwYWRkZWRfc2l6
ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pKSkgewotCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3Igc2V0cHJpbSAlZFxu
IiwgcGxlbik7Ci0JCQkJZ290byBpbnZhbGlkX3NpemU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRf
c2l6ZTsKLQkJCWJyZWFrOwotCQkJLyogUGFyYW0ncyB3aXRoIGEgZml4ZWQgc2l6ZSAqLwotCQlj
YXNlIFNDVFBfSVBWNF9BRERSRVNTOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVU
MSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGlwdjQgYWRkciAlZFxuIiwgcGxlbik7Ci0JCQkJZ290
byBpbnZhbGlkX3NpemU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFrOwot
CQljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGlwdjYgYWRkciAlZFxuIiwgcGxlbik7Ci0JCQkJ
Z290byBpbnZhbGlkX3NpemU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFr
OwotCQljYXNlIFNDVFBfQ09PS0lFX1BSRVNFUlZFOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9jb29raWVfcGVyc2VydmVfcGFyYW0pKSB7Ci0JCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBjb29raWUtcHJlc2VydmUg
JWRcbiIsIHBsZW4pOwotCQkJCWdvdG8gaW52YWxpZF9zaXplOwotCQkJfQotCQkJYXQgKz0gcGFk
ZGVkX3NpemU7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0hBU19OQVRfU1VQUE9SVDoKLQkJCSpu
YXRfZnJpZW5kbHkgPSAxOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgU0NUUF9QUlND
VFBfU1VQUE9SVEVEOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YXJhbWhkcikpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6
ZSAtIGVycm9yIHByc2N0cC9uYXQgc3VwcG9ydCAlZFxuIiwgcGxlbik7Ci0JCQkJZ290byBpbnZh
bGlkX3NpemU7Ci0JCQl9Ci0JCQlhdCArPSBwYWRkZWRfc2l6ZTsKLQkJCWJyZWFrOwotCQljYXNl
IFNDVFBfRUNOX0NBUEFCTEU6Ci0JCQlpZiAocGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxp
ZCBzaXplIC0gZXJyb3IgZWNuICVkXG4iLCBwbGVuKTsKLQkJCQlnb3RvIGludmFsaWRfc2l6ZTsK
LQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9VTFBf
QURBUFRBVElPTjoKLQkJCWlmIChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRh
cHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uKSkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3IgYWRhcGF0YXRpb24gJWRcbiIsIHBsZW4pOwotCQkJ
CWdvdG8gaW52YWxpZF9zaXplOwotCQkJfQotCQkJYXQgKz0gcGFkZGVkX3NpemU7Ci0JCQlicmVh
azsKLQkJY2FzZSBTQ1RQX1NVQ0NFU1NfUkVQT1JUOgotCQkJaWYgKHBhZGRlZF9zaXplICE9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBzdWNjZXNzICVkXG4iLCBwbGVuKTsK
LQkJCQlnb3RvIGludmFsaWRfc2l6ZTsKLQkJCX0KLQkJCWF0ICs9IHBhZGRlZF9zaXplOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9IT1NUTkFNRV9BRERSRVNTOgotCQl7Ci0JCQkvKiBXZSBjYW4g
Tk9UIGhhbmRsZSBIT1NUIE5BTUUgYWRkcmVzc2VzISEgKi8KLQkJCWludCBsX2xlbjsKLQotCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJDYW4ndCBoYW5kbGUgaG9zdG5hbWUgYWRkcmVz
c2VzLi4gYWJvcnQgcHJvY2Vzc2luZ1xuIik7Ci0JCQkqYWJvcnRfcHJvY2Vzc2luZyA9IDE7Ci0J
CQlpZiAob3BfZXJyID09IE5VTEwpIHsKLQkJCQkvKiBPayBuZWVkIHRvIHRyeSB0byBnZXQgYSBt
YnVmICovCi0jaWZkZWYgSU5FVDYKLQkJCQlsX2xlbiA9IFNDVFBfTUlOX09WRVJIRUFEOwotI2Vs
c2UKLQkJCQlsX2xlbiA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotI2VuZGlmCi0JCQkJbF9sZW4g
Kz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQkJCQlsX2xlbiArPSBwbGVuOwotCQkJ
CWxfbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQkJb3BfZXJyID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKGxfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCQkJ
aWYgKG9wX2VycikgewotCQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IDA7Ci0JCQkJCS8qCi0J
CQkJCSAqIHByZS1yZXNlcnZlIHNwYWNlIGZvciBpcCBhbmQgc2N0cAotCQkJCQkgKiBoZWFkZXIg
IGFuZCBjaHVuayBoZHIKLQkJCQkJICovCi0jaWZkZWYgSU5FVDYKLQkJCQkJU0NUUF9CVUZfUkVT
Vl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwotI2Vsc2UKLQkJCQkJU0NUUF9C
VUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXApKTsKLSNlbmRpZgotCQkJCQlTQ1RQ
X0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0JCQkJCVNDVFBf
QlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKLQkJCQl9
Ci0JCQl9Ci0JCQlpZiAob3BfZXJyKSB7Ci0JCQkJLyogSWYgd2UgaGF2ZSBzcGFjZSAqLwotCQkJ
CXN0cnVjdCBzY3RwX3BhcmFtaGRyIHM7Ci0KLQkJCQlpZiAoZXJyX2F0ICUgNCkgewotCQkJCQl1
aW50MzJfdCBjcHRoaXMgPSAwOwotCi0JCQkJCXBhZF9uZWVkZWQgPSA0IC0gKGVycl9hdCAlIDQp
OwotCQkJCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwYWRfbmVlZGVkLCAoY2FkZHJfdCkm
Y3B0aGlzKTsKLQkJCQkJZXJyX2F0ICs9IHBhZF9uZWVkZWQ7Ci0JCQkJfQotCQkJCXMucGFyYW1f
dHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIpOwotCQkJCXMucGFyYW1f
bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHMpICsgcGxlbik7Ci0JCQkJbV9jb3B5YmFjayhvcF9lcnIs
IGVycl9hdCwgc2l6ZW9mKHMpLCAoY2FkZHJfdCkmcyk7Ci0JCQkJZXJyX2F0ICs9IHNpemVvZihz
KTsKLQkJCQlpZiAocGxlbiA+IHNpemVvZih0ZW1wYnVmKSkgewotCQkJCQlwbGVuID0gc2l6ZW9m
KHRlbXBidWYpOwotCQkJCX0KLQkJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0
LCAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKil0ZW1wYnVmLCBwbGVuKTsKLQkJCQlpZiAocGhkciA9
PSBOVUxMKSB7Ci0JCQkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOwotCQkJCQkvKgotCQkJCQkgKiB3
ZSBhcmUgb3V0IG9mIG1lbW9yeSBidXQgd2Ugc3RpbGwKLQkJCQkJICogbmVlZCB0byBoYXZlIGEg
bG9vayBhdCB3aGF0IHRvIGRvCi0JCQkJCSAqICh0aGUgc3lzdGVtIGlzIGluIHRyb3VibGUKLQkJ
CQkJICogdGhvdWdoKS4KLQkJCQkJICovCi0JCQkJCXJldHVybiAoTlVMTCk7Ci0JCQkJfQotCQkJ
CW1fY29weWJhY2sob3BfZXJyLCBlcnJfYXQsIHBsZW4sIChjYWRkcl90KXBoZHIpOwotCQkJfQot
CQkJcmV0dXJuIChvcF9lcnIpOwotCQkJYnJlYWs7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCS8qCi0J
CQkgKiB3ZSBkbyBub3QgcmVjb2duaXplIHRoZSBwYXJhbWV0ZXIgZmlndXJlIG91dCB3aGF0Ci0J
CQkgKiB3ZSBkby4KLQkJCSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJIaXQg
ZGVmYXVsdCBwYXJhbSAleFxuIiwgcHR5cGUpOwotCQkJaWYgKChwdHlwZSAmIDB4NDAwMCkgPT0g
MHg0MDAwKSB7Ci0JCQkJLyogUmVwb3J0IGJpdCBpcyBzZXQ/PyAqLwotCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAicmVwb3J0IG9wIGVyclxuIik7Ci0JCQkJaWYgKG9wX2VyciA9PSBO
VUxMKSB7Ci0JCQkJCWludCBsX2xlbjsKLQkJCQkJLyogT2sgbmVlZCB0byB0cnkgdG8gZ2V0IGFu
IG1idWYgKi8KLSNpZmRlZiBJTkVUNgotCQkJCQlsX2xlbiA9IFNDVFBfTUlOX09WRVJIRUFEOwot
I2Vsc2UKLQkJCQkJbF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLSNlbmRpZgotCQkJCQls
X2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCQkJCQlsX2xlbiArPSBwbGVu
OwotCQkJCQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQkJCQlvcF9l
cnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobF9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRB
KTsKLQkJCQkJaWYgKG9wX2VycikgewotCQkJCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSAwOwot
I2lmZGVmIElORVQ2Ci0JCQkJCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVj
dCBpcDZfaGRyKSk7Ci0jZWxzZQotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVv
ZihzdHJ1Y3QgaXApKTsKLSNlbmRpZgotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcikpOwotCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChvcF9l
cnIpIHsKLQkJCQkJLyogSWYgd2UgaGF2ZSBzcGFjZSAqLwotCQkJCQlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBzOwotCi0JCQkJCWlmIChlcnJfYXQgJSA0KSB7Ci0JCQkJCQl1aW50MzJfdCBjcHRoaXMg
PSAwOwotCi0JCQkJCQlwYWRfbmVlZGVkID0gNCAtIChlcnJfYXQgJSA0KTsKLQkJCQkJCW1fY29w
eWJhY2sob3BfZXJyLCBlcnJfYXQsIHBhZF9uZWVkZWQsIChjYWRkcl90KSZjcHRoaXMpOwotCQkJ
CQkJZXJyX2F0ICs9IHBhZF9uZWVkZWQ7Ci0JCQkJCX0KLQkJCQkJcy5wYXJhbV90eXBlID0gaHRv
bnMoU0NUUF9VTlJFQ09HX1BBUkFNKTsKLQkJCQkJcy5wYXJhbV9sZW5ndGggPSBodG9ucyhzaXpl
b2YocykgKyBwbGVuKTsKLQkJCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9mKHMp
LCAoY2FkZHJfdCkmcyk7Ci0JCQkJCWVycl9hdCArPSBzaXplb2Yocyk7Ci0JCQkJCWlmIChwbGVu
ID4gc2l6ZW9mKHRlbXBidWYpKSB7Ci0JCQkJCQlwbGVuID0gc2l6ZW9mKHRlbXBidWYpOwotCQkJ
CQl9Ci0JCQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG1hdCwgYXQsIChzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqKXRlbXBidWYsIHBsZW4pOwotCQkJCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0J
CQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKLQkJCQkJCS8qCi0JCQkJCQkgKiB3ZSBhcmUgb3V0
IG9mIG1lbW9yeSBidXQKLQkJCQkJCSAqIHdlIHN0aWxsIG5lZWQgdG8gaGF2ZSBhCi0JCQkJCQkg
KiBsb29rIGF0IHdoYXQgdG8gZG8gKHRoZQotCQkJCQkJICogc3lzdGVtIGlzIGluIHRyb3VibGUK
LQkJCQkJCSAqIHRob3VnaCkuCi0JCQkJCQkgKi8KLQkJCQkJCW9wX2VyciA9IE5VTEw7Ci0JCQkJ
CQlnb3RvIG1vcmVfcHJvY2Vzc2luZzsKLQkJCQkJfQotCQkJCQltX2NvcHliYWNrKG9wX2Vyciwg
ZXJyX2F0LCBwbGVuLCAoY2FkZHJfdClwaGRyKTsKLQkJCQkJZXJyX2F0ICs9IHBsZW47Ci0JCQkJ
fQotCQkJfQotCQltb3JlX3Byb2Nlc3Npbmc6Ci0JCQlpZiAoKHB0eXBlICYgMHg4MDAwKSA9PSAw
eDAwMDApIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgInN0b3AgcHJvY1xuIik7
Ci0JCQkJcmV0dXJuIChvcF9lcnIpOwotCQkJfSBlbHNlIHsKLQkJCQkvKiBza2lwIHRoaXMgY2h1
bmsgYW5kIGNvbnRpbnVlIHByb2Nlc3NpbmcgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMSwgIm1vdmUgb25cbiIpOwotCQkJCWF0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwotCQkJfQot
CQkJYnJlYWs7Ci0KLQkJfQotCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtYXQsIGF0LCAm
cGFyYW1zLCBzaXplb2YocGFyYW1zKSk7Ci0JfQotCXJldHVybiAob3BfZXJyKTsKLSBpbnZhbGlk
X3NpemU6Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJhYm9ydCBmbGFnIHNldFxuIik7
Ci0JKmFib3J0X3Byb2Nlc3NpbmcgPSAxOwotCWlmICgob3BfZXJyID09IE5VTEwpICYmIHBoZHIp
IHsKLQkJaW50IGxfbGVuOwotI2lmZGVmIElORVQ2Ci0JCWxfbGVuID0gU0NUUF9NSU5fT1ZFUkhF
QUQ7Ci0jZWxzZQotCQlsX2xlbiA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotI2VuZGlmCi0JCWxf
bGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JCWxfbGVuICs9ICgyICogc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7Ci0JCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhsX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAob3BfZXJyKSB7Ci0J
CQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IDA7Ci0jaWZkZWYgSU5FVDYKLQkJCVNDVFBfQlVGX1JF
U1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKLSNlbHNlCi0JCQlTQ1RQX0JV
Rl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcCkpOwotI2VuZGlmCi0JCQlTQ1RQX0JV
Rl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0JCQlTQ1RQX0JVRl9S
RVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSk7Ci0JCX0KLQl9Ci0J
aWYgKChvcF9lcnIpICYmIHBoZHIpIHsKLQkJc3RydWN0IHNjdHBfcGFyYW1oZHIgczsKLQotCQlp
ZiAoZXJyX2F0ICUgNCkgewotCQkJdWludDMyX3QgY3B0aGlzID0gMDsKLQotCQkJcGFkX25lZWRl
ZCA9IDQgLSAoZXJyX2F0ICUgNCk7Ci0JCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwYWRf
bmVlZGVkLCAoY2FkZHJfdCkmY3B0aGlzKTsKLQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOwotCQl9
Ci0JCXMucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OKTsK
LQkJcy5wYXJhbV9sZW5ndGggPSBodG9ucyhzaXplb2YocykgKyBzaXplb2Yoc3RydWN0IHNjdHBf
cGFyYW1oZHIpKTsKLQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgc2l6ZW9mKHMpLCAoY2Fk
ZHJfdCkmcyk7Ci0JCWVycl9hdCArPSBzaXplb2Yocyk7Ci0JCS8qIE9ubHkgY29weSBiYWNrIHRo
ZSBwLWhkciB0aGF0IGNhdXNlZCB0aGUgaXNzdWUgKi8KLQkJbV9jb3B5YmFjayhvcF9lcnIsIGVy
cl9hdCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKGNhZGRyX3QpcGhkcik7Ci0JfQot
CXJldHVybiAob3BfZXJyKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9hcmVfdGhlcmVfbmV3X2Fk
ZHJlc3NlcyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICBzdHJ1Y3QgbWJ1ZiAq
aW5faW5pdHBrdCwgaW50IG9mZnNldCwgc3RydWN0IHNvY2thZGRyICpzcmMpCi17Ci0JLyoKLQkg
KiBHaXZlbiBhIElOSVQgcGFja2V0LCBsb29rIHRocm91Z2ggdGhlIHBhY2tldCB0byB2ZXJpZnkg
dGhhdCB0aGVyZQotCSAqIGFyZSBOTyBuZXcgYWRkcmVzc2VzLiBBcyB3ZSBnbyB0aHJvdWdoIHRo
ZSBwYXJhbWV0ZXJzIGFkZCByZXBvcnRzCi0JICogb2YgYW55IHVuLXVuZGVyc3Rvb2QgcGFyYW1l
dGVycyB0aGF0IHJlcXVpcmUgYW4gZXJyb3IuICBBbHNvIHdlCi0JICogbXVzdCByZXR1cm4gKDEp
IHRvIGRyb3AgdGhlIHBhY2tldCBpZiB3ZSBzZWUgYSB1bi11bmRlcnN0b29kCi0JICogcGFyYW1l
dGVyIHRoYXQgdGVsbHMgdXMgdG8gZHJvcCB0aGUgY2h1bmsuCi0JICovCi0Jc3RydWN0IHNvY2th
ZGRyICpzYV90b3VzZTsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCXN0cnVjdCBzY3RwX3BhcmFt
aGRyICpwaGRyLCBwYXJhbXM7Ci0JdWludDE2X3QgcHR5cGUsIHBsZW47Ci0JdWludDhfdCBmbmQ7
Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCWludCBjaGVja19zcmM7Ci0jaWZkZWYgSU5FVAot
CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW40LCAqc2E0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlz
dHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjYsICpzYTY7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNhYzsKLSNlbmRpZgotCi0jaWZkZWYg
SU5FVAotCW1lbXNldCgmc2luNCwgMCwgc2l6ZW9mKHNpbjQpKTsKLQlzaW40LnNpbl9mYW1pbHkg
PSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbjQuc2luX2xlbiA9IHNpemVvZihz
aW40KTsKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQltZW1zZXQoJnNpbjYsIDAsIHNp
emVvZihzaW42KSk7Ci0Jc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVf
U0lONl9MRU4KLQlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHNpbjYpOwotI2VuZGlmCi0jZW5kaWYK
LQkvKiBGaXJzdCB3aGF0IGFib3V0IHRoZSBzcmMgYWRkcmVzcyBvZiB0aGUgcGt0ID8gKi8KLQlj
aGVja19zcmMgPSAwOwotCXN3aXRjaCAoc3JjLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
Y2FzZSBBRl9JTkVUOgotCQlpZiAoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7Ci0JCQlj
aGVja19zcmMgPSAxOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNl
IEFGX0lORVQ2OgotCQlpZiAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQljaGVj
a19zcmMgPSAxOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotCWNhc2UgQUZfQ09OTjoKLQkJaWYgKGFzb2MtPnNjb3BlLmNvbm5fYWRkcl9sZWdhbCkg
ewotCQkJY2hlY2tfc3JjID0gMTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0J
CS8qIFRTTkggKi8KLQkJYnJlYWs7Ci0JfQotCWlmIChjaGVja19zcmMpIHsKLQkJZm5kID0gMDsK
LQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCXNhID0g
KHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQlpZiAoc2EtPnNhX2ZhbWls
eSA9PSBzcmMtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQlpZiAoc2EtPnNhX2ZhbWls
eSA9PSBBRl9JTkVUKSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc3JjNDsKLQotCQkJCQlz
YTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCQkJCXNyYzQgPSAoc3RydWN0IHNvY2th
ZGRyX2luICopc3JjOwotCQkJCQlpZiAoc2E0LT5zaW5fYWRkci5zX2FkZHIgPT0gc3JjNC0+c2lu
X2FkZHIuc19hZGRyKSB7Ci0JCQkJCQlmbmQgPSAxOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJ
CQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7Ci0JCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzY7Ci0KLQkJCQkJc2E2ID0gKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJCQkJc3JjNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopc3JjOwotCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2E2LCBzcmM2KSkgewotCQkJ
CQkJZm5kID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsK
LQkJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNyY2M7Ci0KLQkJCQkJc2FjID0gKHN0cnVjdCBz
b2NrYWRkcl9jb25uICopc2E7Ci0JCQkJCXNyY2MgPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilz
cmM7Ci0JCQkJCWlmIChzYWMtPnNjb25uX2FkZHIgPT0gc3JjYy0+c2Nvbm5fYWRkcikgewotCQkJ
CQkJZm5kID0gMTsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotI2VuZGlmCi0JCQl9Ci0J
CX0KLQkJaWYgKGZuZCA9PSAwKSB7Ci0JCQkvKiBOZXcgYWRkcmVzcyBhZGRlZCEgbm8gbmVlZCB0
byBsb29rIGZ1cnRoZXIuICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCS8qIE9rIHNvIGZh
ciBsZXRzIG11bmdlIHRocm91Z2ggdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqLwotCW9mZnNldCAr
PSBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayk7Ci0JcGhkciA9IHNjdHBfZ2V0X25leHRf
cGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7Ci0Jd2hp
bGUgKHBoZHIpIHsKLQkJc2FfdG91c2UgPSBOVUxMOwotCQlwdHlwZSA9IG50b2hzKHBoZHItPnBh
cmFtX3R5cGUpOwotCQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKLQkJc3dpdGNo
IChwdHlwZSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJewot
CQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKnA0LCBwNF9idWY7Ci0KLQkJCWlmIChwbGVu
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsKLQkJCQlyZXR1cm4gKDEp
OwotCQkJfQotCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0
LAotCQkJICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNF9idWYsIHNpemVvZihwNF9idWYp
KTsKLQkJCWlmIChwaGRyID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKDEpOwotCQkJfQotCQkJaWYg
KGFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgewotCQkJCXA0ID0gKHN0cnVjdCBzY3RwX2lw
djRhZGRyX3BhcmFtICopcGhkcjsKLQkJCQlzaW40LnNpbl9hZGRyLnNfYWRkciA9IHA0LT5hZGRy
OwotCQkJCXNhX3RvdXNlID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW40OwotCQkJfQotCQkJYnJl
YWs7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6
Ci0JCXsKLQkJCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOwotCi0JCQlp
ZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQkJcmV0
dXJuICgxKTsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3Qs
IG9mZnNldCwKLQkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDZfYnVmLCBzaXplb2Yo
cDZfYnVmKSk7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuICgxKTsKLQkJCX0K
LQkJCWlmIChhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQlwNiA9IChzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoZHI7Ci0JCQkJbWVtY3B5KChjYWRkcl90KSZzaW42LnNp
bjZfYWRkciwgcDYtPmFkZHIsCi0JCQkJICAgICAgIHNpemVvZihwNi0+YWRkcikpOwotCQkJCXNh
X3RvdXNlID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OwotCQkJfQotCQkJYnJlYWs7Ci0JCX0K
LSNlbmRpZgotCQlkZWZhdWx0OgotCQkJc2FfdG91c2UgPSBOVUxMOwotCQkJYnJlYWs7Ci0JCX0K
LQkJaWYgKHNhX3RvdXNlKSB7Ci0JCQkvKiBvaywgc2FfdG91c2UgcG9pbnRzIHRvIG9uZSB0byBj
aGVjayAqLwotCQkJZm5kID0gMDsKLQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywg
c2N0cF9uZXh0KSB7Ci0JCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRk
cjsKLQkJCQlpZiAoc2EtPnNhX2ZhbWlseSAhPSBzYV90b3VzZS0+c2FfZmFtaWx5KSB7Ci0JCQkJ
CWNvbnRpbnVlOwotCQkJCX0KLSNpZmRlZiBJTkVUCi0JCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgewotCQkJCQlzYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7Ci0JCQkJCWlm
IChzYTQtPnNpbl9hZGRyLnNfYWRkciA9PQotCQkJCQkgICAgc2luNC5zaW5fYWRkci5zX2FkZHIp
IHsKLQkJCQkJCWZuZCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JCQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJ
c2E2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJCQkJaWYgKFNDVFA2X0FSRV9BRERS
X0VRVUFMKAotCQkJCQkgICAgc2E2LCAmc2luNikpIHsKLQkJCQkJCWZuZCA9IDE7Ci0JCQkJCQli
cmVhazsKLQkJCQkJfQotCQkJCX0KLSNlbmRpZgotCQkJfQotCQkJaWYgKCFmbmQpIHsKLQkJCQkv
KiBOZXcgYWRkciBhZGRlZCEgbm8gbmVlZCB0byBsb29rIGZ1cnRoZXIgKi8KLQkJCQlyZXR1cm4g
KDEpOwotCQkJfQotCQl9Ci0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJcGhkciA9
IHNjdHBfZ2V0X25leHRfcGFyYW0oaW5faW5pdHBrdCwgb2Zmc2V0LCAmcGFyYW1zLCBzaXplb2Yo
cGFyYW1zKSk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBHaXZlbiBhIE1CVUYgY2hh
aW4gdGhhdCB3YXMgc2VudCBpbnRvIHVzIGNvbnRhaW5pbmcgYW4gSU5JVC4gQnVpbGQgYQotICog
SU5JVC1BQ0sgd2l0aCBDT09LSUUgYW5kIHNlbmQgYmFjay4gV2UgYXNzdW1lIHRoYXQgdGhlIGlu
X2luaXRwa3QgaGFzIGRvbmUKLSAqIGEgcHVsbHVwIHRvIGluY2x1ZGUgSVB2Ni80aGVhZGVyLCBT
Q1RQIGhlYWRlciBhbmQgaW5pdGlhbCBwYXJ0IG9mIElOSVQKLSAqIG1lc3NhZ2UgKGkuZS4gdGhl
IHN0cnVjdCBzY3RwX2luaXRfbXNnKS4KLSAqLwotdm9pZAotc2N0cF9zZW5kX2luaXRpYXRlX2Fj
ayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKnNyY19uZXQsIHN0cnVjdCBtYnVmICpp
bml0X3BrdCwKLSAgICAgICAgICAgICAgICAgICAgICAgaW50IGlwaGxlbiwgaW50IG9mZnNldCwK
LSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2Nr
YWRkciAqZHN0LAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0
cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY2hrLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCSAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKLSNlbmRpZgot
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQsIGlu
dCBob2xkX2lucF9sb2NrKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0
cnVjdCBtYnVmICptLCAqbV90bXAsICptX2xhc3QsICptX2Nvb2tpZSwgKm9wX2VycjsKLQlzdHJ1
Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqaW5pdGFjazsKLQlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9u
X2xheWVyX2luZGljYXRpb24gKmFsaTsKLQlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlw
ZXNfcGFyYW0gKnByX3N1cHBvcnRlZDsKLQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7Ci0JdW5p
b24gc2N0cF9zb2Nrc3RvcmUgKm92ZXJfYWRkcjsKLQlzdHJ1Y3Qgc2N0cF9zY29waW5nIHNjcDsK
LSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpkc3Q0ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKWRzdDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNyYzQgPSAoc3RydWN0IHNvY2thZGRy
X2luICopc3JjOwotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpkc3Q2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilk
c3Q7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc3JjNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
c3JjOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKmRzdGNvbm4gPSAoc3RydWN0IHNv
Y2thZGRyX2Nvbm4gKilkc3Q7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNyY2Nvbm4gPSAoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKilzcmM7Ci0Jc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwot
I2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyICp0bzsKLQlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUg
c3RjOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7Ci0JdWludDhfdCAqc2lnbmF0dXJl
ID0gTlVMTDsKLQlpbnQgY250X2luaXRzX3RvID0gMDsKLQl1aW50MTZfdCBoaXNfbGltaXQsIGlf
d2FudDsKLQlpbnQgYWJvcnRfZmxhZzsKLQlpbnQgbmF0X2ZyaWVuZGx5ID0gMDsKLQlpbnQgZXJy
b3I7Ci0Jc3RydWN0IHNvY2tldCAqc287Ci0JdWludDE2X3QgbnVtX2V4dCwgY2h1bmtfbGVuLCBw
YWRkaW5nX2xlbiwgcGFyYW1ldGVyX2xlbjsKLQotCWlmIChzdGNiKSB7Ci0JCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKLQl9IGVsc2UgewotCQlhc29jID0gTlVMTDsKLQl9Ci0JaWYgKChhc29jICE9IE5V
TEwpICYmCi0JICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9X
QUlUKSkgewotCQlpZiAoc2N0cF9hcmVfdGhlcmVfbmV3X2FkZHJlc3Nlcyhhc29jLCBpbml0X3Br
dCwgb2Zmc2V0LCBzcmMpKSB7Ci0JCQkvKgotCQkJICogbmV3IGFkZHJlc3Nlcywgb3V0IG9mIGhl
cmUgaW4gbm9uLWNvb2tpZS13YWl0IHN0YXRlcwotCQkJICoKLQkJCSAqIFNlbmQgYW4gQUJPUlQs
IHdpdGhvdXQgdGhlIG5ldyBhZGRyZXNzIGVycm9yIGNhdXNlLgotCQkJICogVGhpcyBsb29rcyBu
byBkaWZmZXJlbnQgdGhhbiBpZiBubyBsaXN0ZW5lcgotCQkJICogd2FzIHByZXNlbnQuCi0JCQkg
Ki8KLQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2RpYWdfaW5mb19jb2RlKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZHJl
c3MgYWRkZWQiKTsKLQkJCXNjdHBfc2VuZF9hYm9ydChpbml0X3BrdCwgaXBobGVuLCBzcmMsIGRz
dCwgc2gsIDAsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAg
ICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCi0jZW5kaWYKLQkJCSAgICAg
ICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChzcmNfbmV0
ICE9IE5VTEwgJiYgKHNyY19uZXQtPnBvcnQgIT0gcG9ydCkpIHsKLQkJCS8qCi0JCQkgKiBjaGFu
Z2Ugb2YgcmVtb3RlIGVuY2Fwc3VsYXRpb24gcG9ydCwgb3V0IG9mIGhlcmUgaW4KLQkJCSAqIG5v
bi1jb29raWUtd2FpdCBzdGF0ZXMKLQkJCSAqCi0JCQkgKiBTZW5kIGFuIEFCT1JULCB3aXRob3V0
IGFuIHNwZWNpZmljIGVycm9yIGNhdXNlLgotCQkJICogVGhpcyBsb29rcyBubyBkaWZmZXJlbnQg
dGhhbiBpZiBubyBsaXN0ZW5lcgotCQkJICogd2FzIHByZXNlbnQuCi0JCQkgKi8KLQkJCW9wX2Vy
ciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19j
b2RlKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJlbW90ZSBlbmNhcHN1bGF0
aW9uIHBvcnQgY2hhbmdlZCIpOwotCQkJc2N0cF9zZW5kX2Fib3J0KGluaXRfcGt0LCBpcGhsZW4s
IHNyYywgZHN0LCBzaCwgMCwgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKLSNlbmRpZgot
CQkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0J
YWJvcnRfZmxhZyA9IDA7Ci0Jb3BfZXJyID0gc2N0cF9hcmV0aGVyZV91bnJlY29nbml6ZWRfcGFy
YW1ldGVycyhpbml0X3BrdCwKLQkJCQkJCSAgICAgICAob2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmspKSwKLQkJCQkJCSAgICAgICAmYWJvcnRfZmxhZywgKHN0cnVjdCBzY3Rw
X2NodW5raGRyICopaW5pdF9jaGssICZuYXRfZnJpZW5kbHkpOwotCWlmIChhYm9ydF9mbGFnKSB7
Ci0JZG9fYV9hYm9ydDoKLQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7Ci0JCQljaGFyIG1zZ1tTQ1RQ
X0RJQUdfSU5GT19MRU5dOwotCi0JCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiJXM6JWQg
YXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKLQkJfQotCQlzY3RwX3NlbmRfYWJv
cnQoaW5pdF9wa3QsIGlwaGxlbiwgc3JjLCBkc3QsIHNoLAotCQkJCWluaXRfY2hrLT5pbml0Lmlu
aXRpYXRlX3RhZywgb3BfZXJyLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCSAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAotI2VuZGlmCi0JCSAgICAg
ICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQlyZXR1cm47Ci0JfQotCW0gPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobSA9
PSBOVUxMKSB7Ci0JCS8qIE5vIG1lbW9yeSwgSU5JVCB0aW1lciB3aWxsIHJlLWF0dGVtcHQuICov
Ci0JCWlmIChvcF9lcnIpCi0JCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKLQkJcmV0dXJuOwotCX0K
LQljaHVua19sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5r
KTsKLQlwYWRkaW5nX2xlbiA9IDA7Ci0KLQkvKgotCSAqIFdlIG1pZ2h0IG5vdCBvdmVyd3JpdGUg
dGhlIGlkZW50aWZpY2F0aW9uW10gY29tcGxldGVseSBhbmQgb24KLQkgKiBzb21lIHBsYXRmb3Jt
cyB0aW1lX2VudGVyZWQgd2lsbCBjb250YWluIHNvbWUgcGFkZGluZy4KLQkgKiBUaGVyZWZvcmUg
emVybyBvdXQgdGhlIGNvb2tpZSB0byBhdm9pZCBwdXR0aW5nCi0JICogdW5pbml0aWFsaXplZCBt
ZW1vcnkgb24gdGhlIHdpcmUuCi0JICovCi0JbWVtc2V0KCZzdGMsIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9zdGF0ZV9jb29raWUpKTsKLQotCS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0J
c3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KCZ0aW1lX2VudGVyZWQpOwotCXN0Yy50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVyZWQ7Ci0JLyog
cG9wdWxhdGUgYW55IHRpZSB0YWdzICovCi0JaWYgKGFzb2MgIT0gTlVMTCkgewotCQkvKiB1bmxv
Y2sgYmVmb3JlIHRhZyBzZWxlY3Rpb25zICovCi0JCXN0Yy50aWVfdGFnX215X3Z0YWcgPSBhc29j
LT5teV92dGFnX25vbmNlOwotCQlzdGMudGllX3RhZ19wZWVyX3Z0YWcgPSBhc29jLT5wZWVyX3Z0
YWdfbm9uY2U7Ci0JCXN0Yy5jb29raWVfbGlmZSA9IGFzb2MtPmNvb2tpZV9saWZlOwotCQluZXQg
PSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCX0gZWxzZSB7Ci0JCXN0Yy50aWVfdGFnX215
X3Z0YWcgPSAwOwotCQlzdGMudGllX3RhZ19wZWVyX3Z0YWcgPSAwOwotCQkvKiBsaWZlIEkgd2ls
bCBhd2FyZCB0aGlzIGNvb2tpZSAqLwotCQlzdGMuY29va2llX2xpZmUgPSBpbnAtPnNjdHBfZXAu
ZGVmX2Nvb2tpZV9saWZlOwotCX0KLQotCS8qIGNvcHkgaW4gdGhlIHBvcnRzIGZvciBsYXRlciBj
aGVjayAqLwotCXN0Yy5teXBvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCXN0Yy5wZWVycG9ydCA9IHNo
LT5zcmNfcG9ydDsKLQotCS8qCi0JICogSWYgd2Ugd2FudGVkIHRvIGhvbm9yIGNvb2tpZSBsaWZl
IGV4dGVuc2lvbnMsIHdlIHdvdWxkIGFkZCB0bwotCSAqIHN0Yy5jb29raWVfbGlmZS4gRm9yIG5v
dyB3ZSBzaG91bGQgTk9UIGhvbm9yIGFueSBleHRlbnNpb24KLQkgKi8KLQlzdGMuc2l0ZV9zY29w
ZSA9IHN0Yy5sb2NhbF9zY29wZSA9IHN0Yy5sb29wYmFja19zY29wZSA9IDA7Ci0JaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7Ci0JCXN0Yy5pcHY2X2FkZHJf
bGVnYWwgPSAxOwotCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7Ci0JCQlzdGMuaXB2NF9h
ZGRyX2xlZ2FsID0gMDsKLQkJfSBlbHNlIHsKLQkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAxOwot
CQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0g
MDsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCXN0Yy5pcHY2X2FkZHJfbGVnYWwgPSAwOwotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EX0NPTk4pIHsKLQkJCXN0Yy5jb25uX2FkZHJfbGVnYWwgPSAxOwotCQkJc3RjLmlw
djRfYWRkcl9sZWdhbCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlzdGMuY29ubl9hZGRyX2xlZ2FsID0g
MDsKLQkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAxOwotCQl9Ci0jZWxzZQotCQlzdGMuaXB2NF9h
ZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotCX0KLQlzdGMuaXB2NF9zY29wZSA9IDA7Ci0JaWYgKG5l
dCA9PSBOVUxMKSB7Ci0JCXRvID0gc3JjOwotCQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCXsKLQkJCS8qIGxvb2t1cCBhZGRyZXNzICov
Ci0JCQlzdGMuYWRkcmVzc1swXSA9IHNyYzQtPnNpbl9hZGRyLnNfYWRkcjsKLQkJCXN0Yy5hZGRy
ZXNzWzFdID0gMDsKLQkJCXN0Yy5hZGRyZXNzWzJdID0gMDsKLQkJCXN0Yy5hZGRyZXNzWzNdID0g
MDsKLQkJCXN0Yy5hZGRyX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKLQkJCS8qIGxvY2FsIGZy
b20gYWRkcmVzcyAqLwotCQkJc3RjLmxhZGRyZXNzWzBdID0gZHN0NC0+c2luX2FkZHIuc19hZGRy
OwotCQkJc3RjLmxhZGRyZXNzWzFdID0gMDsKLQkJCXN0Yy5sYWRkcmVzc1syXSA9IDA7Ci0JCQlz
dGMubGFkZHJlc3NbM10gPSAwOwotCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVT
UzsKLQkJCS8qIHNjb3BlX2lkIGlzIG9ubHkgZm9yIHY2ICovCi0JCQlzdGMuc2NvcGVfaWQgPSAw
OwotCQkJaWYgKChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNyYzQtPnNpbl9hZGRyKSkgfHwKLQkJ
CSAgICAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZkc3Q0LT5zaW5fYWRkcikpKXsKLQkJCQlzdGMu
aXB2NF9zY29wZSA9IDE7Ci0JCQl9Ci0JCQkvKiBNdXN0IHVzZSB0aGUgYWRkcmVzcyBpbiB0aGlz
IGNhc2UgKi8KLQkJCWlmIChzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChzcmMsIHZyZl9p
ZCkpIHsKLQkJCQlzdGMubG9vcGJhY2tfc2NvcGUgPSAxOwotCQkJCXN0Yy5pcHY0X3Njb3BlID0g
MTsKLQkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7Ci0JCQkJc3RjLmxvY2FsX3Njb3BlID0gMDsKLQkJ
CX0KLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2
OgotCQl7Ci0JCQlzdGMuYWRkcl90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7Ci0JCQltZW1jcHko
JnN0Yy5hZGRyZXNzLCAmc3JjNi0+c2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgKCgoX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAw
MDApICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDQwMDApKSB8fCAoX19GcmVlQlNEX3ZlcnNp
b24gPiA5MDAwMDApKQotCQkJc3RjLnNjb3BlX2lkID0gbnRvaHMoaW42X2dldHNjb3BlKCZzcmM2
LT5zaW42X2FkZHIpKTsKLSNlbHNlCi0JCQlzdGMuc2NvcGVfaWQgPSAwOwotI2VuZGlmCi0JCQlp
ZiAoc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3Qoc3JjLCB2cmZfaWQpKSB7Ci0JCQkJc3Rj
Lmxvb3BiYWNrX3Njb3BlID0gMTsKLQkJCQlzdGMubG9jYWxfc2NvcGUgPSAwOwotCQkJCXN0Yy5z
aXRlX3Njb3BlID0gMTsKLQkJCQlzdGMuaXB2NF9zY29wZSA9IDE7Ci0JCQl9IGVsc2UgaWYgKElO
Nl9JU19BRERSX0xJTktMT0NBTCgmc3JjNi0+c2luNl9hZGRyKSB8fAotCQkJICAgICAgICAgICBJ
TjZfSVNfQUREUl9MSU5LTE9DQUwoJmRzdDYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAq
IElmIHRoZSBuZXcgZGVzdGluYXRpb24gb3Igc291cmNlIGlzIGEKLQkJCQkgKiBMSU5LX0xPQ0FM
IHdlIG11c3QgaGF2ZSBjb21tb24gYm90aCBzaXRlIGFuZAotCQkJCSAqIGxvY2FsIHNjb3BlLiBE
b24ndCBzZXQgbG9jYWwgc2NvcGUgdGhvdWdoCi0JCQkJICogc2luY2Ugd2UgbXVzdCBkZXBlbmQg
b24gdGhlIHNvdXJjZSB0byBiZQotCQkJCSAqIGFkZGVkIGltcGxpY2l0bHkuIFdlIGNhbm5vdCBh
c3N1cmUganVzdAotCQkJCSAqIGJlY2F1c2Ugd2Ugc2hhcmUgb25lIGxpbmsgdGhhdCBhbGwgbGlu
a3MgYXJlCi0JCQkJICogY29tbW9uLgotCQkJCSAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
CQkJCS8qIE1hYyBPUyBYIGN1cnJlbnRseSBkb2Vzbid0IGhhdmUgaW42X2dldHNjb3BlKCkgKi8K
LQkJCQlzdGMuc2NvcGVfaWQgPSBzcmM2LT5zaW42X2FkZHIuczZfYWRkcjE2WzFdOwotI2VuZGlm
Ci0JCQkJc3RjLmxvY2FsX3Njb3BlID0gMDsKLQkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7Ci0JCQkJ
c3RjLmlwdjRfc2NvcGUgPSAxOwotCQkJCS8qCi0JCQkJICogd2Ugc3RhcnQgY291bnRpbmcgZm9y
IHRoZSBwcml2YXRlIGFkZHJlc3MKLQkJCQkgKiBzdHVmZiBhdCAxLiBzaW5jZSB0aGUgbGluayBs
b2NhbCB3ZQotCQkJCSAqIHNvdXJjZSBmcm9tIHdvbid0IHNob3cgdXAgaW4gb3VyIHNjb3BlZAot
CQkJCSAqIGNvdW50LgotCQkJCSAqLwotCQkJCWNudF9pbml0c190byA9IDE7Ci0JCQkJLyogcHVs
bCBvdXQgdGhlIHNjb3BlX2lkIGZyb20gaW5jb21pbmcgcGt0ICovCi0JCQl9IGVsc2UgaWYgKElO
Nl9JU19BRERSX1NJVEVMT0NBTCgmc3JjNi0+c2luNl9hZGRyKSB8fAotCQkJICAgICAgICAgICBJ
TjZfSVNfQUREUl9TSVRFTE9DQUwoJmRzdDYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAq
IElmIHRoZSBuZXcgZGVzdGluYXRpb24gb3Igc291cmNlIGlzCi0JCQkJICogU0lURV9MT0NBTCB0
aGVuIHdlIG11c3QgaGF2ZSBzaXRlIHNjb3BlIGluCi0JCQkJICogY29tbW9uLgotCQkJCSAqLwot
CQkJCXN0Yy5zaXRlX3Njb3BlID0gMTsKLQkJCX0KLQkJCW1lbWNweSgmc3RjLmxhZGRyZXNzLCAm
ZHN0Ni0+c2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlzdGMubGFkZHJf
dHlwZSA9IFNDVFBfSVBWNl9BRERSRVNTOwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQkvKiBsb29rdXAg
YWRkcmVzcyAqLwotCQkJc3RjLmFkZHJlc3NbMF0gPSAwOwotCQkJc3RjLmFkZHJlc3NbMV0gPSAw
OwotCQkJc3RjLmFkZHJlc3NbMl0gPSAwOwotCQkJc3RjLmFkZHJlc3NbM10gPSAwOwotCQkJbWVt
Y3B5KCZzdGMuYWRkcmVzcywgJnNyY2Nvbm4tPnNjb25uX2FkZHIsIHNpemVvZih2b2lkICopKTsK
LQkJCXN0Yy5hZGRyX3R5cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKLQkJCS8qIGxvY2FsIGZyb20g
YWRkcmVzcyAqLwotCQkJc3RjLmxhZGRyZXNzWzBdID0gMDsKLQkJCXN0Yy5sYWRkcmVzc1sxXSA9
IDA7Ci0JCQlzdGMubGFkZHJlc3NbMl0gPSAwOwotCQkJc3RjLmxhZGRyZXNzWzNdID0gMDsKLQkJ
CW1lbWNweSgmc3RjLmxhZGRyZXNzLCAmZHN0Y29ubi0+c2Nvbm5fYWRkciwgc2l6ZW9mKHZvaWQg
KikpOwotCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKLQkJCS8qIHNjb3Bl
X2lkIGlzIG9ubHkgZm9yIHY2ICovCi0JCQlzdGMuc2NvcGVfaWQgPSAwOwotCQkJYnJlYWs7Ci0J
CX0KLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJLyogVFNOSCAqLwotCQkJZ290byBkb19hX2Fib3J0
OwotCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBzZXQgdGhlIHNjb3BlIHBlciB0aGUg
ZXhpc3RpbmcgdGNiICovCi0KLSNpZmRlZiBJTkVUNgotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0
OwotI2VuZGlmCi0KLQkJc3RjLmxvb3BiYWNrX3Njb3BlID0gYXNvYy0+c2NvcGUubG9vcGJhY2tf
c2NvcGU7Ci0JCXN0Yy5pcHY0X3Njb3BlID0gYXNvYy0+c2NvcGUuaXB2NF9sb2NhbF9zY29wZTsK
LQkJc3RjLnNpdGVfc2NvcGUgPSBhc29jLT5zY29wZS5zaXRlX3Njb3BlOwotCQlzdGMubG9jYWxf
c2NvcGUgPSBhc29jLT5zY29wZS5sb2NhbF9zY29wZTsKLSNpZmRlZiBJTkVUNgotCQkvKiBXaHkg
ZG8gd2Ugbm90IGNvbnNpZGVyIElQdjQgTEwgYWRkcmVzc2VzPyAqLwotCQlUQUlMUV9GT1JFQUNI
KGxuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWlmIChsbmV0LT5yby5fbF9hZGRy
LnNpbjYuc2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlpZiAoSU42X0lTX0FERFJfTElO
S0xPQ0FMKCZsbmV0LT5yby5fbF9hZGRyLnNpbjYuc2luNl9hZGRyKSkgewotCQkJCQkvKgotCQkJ
CQkgKiBpZiB3ZSBoYXZlIGEgTEwgYWRkcmVzcywgc3RhcnQKLQkJCQkJICogY291bnRpbmcgYXQg
MS4KLQkJCQkJICovCi0JCQkJCWNudF9pbml0c190byA9IDE7Ci0JCQkJfQotCQkJfQotCQl9Ci0j
ZW5kaWYKLQkJLyogdXNlIHRoZSBuZXQgcG9pbnRlciAqLwotCQl0byA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmbmV0LT5yby5fbF9hZGRyOwotCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKLSNpZmRl
ZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0
bzsKLQkJCXN0Yy5hZGRyZXNzWzBdID0gc2luLT5zaW5fYWRkci5zX2FkZHI7Ci0JCQlzdGMuYWRk
cmVzc1sxXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1syXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1szXSA9
IDA7Ci0JCQlzdGMuYWRkcl90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7Ci0JCQlpZiAobmV0LT5z
cmNfYWRkcl9zZWxlY3RlZCA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBzdHJhbmdlIGNhc2UgaGVy
ZSwgdGhlIElOSVQgc2hvdWxkIGhhdmUKLQkJCQkgKiBkaWQgdGhlIHNlbGVjdGlvbi4KLQkJCQkg
Ki8KLQkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihp
bnAsCi0JCQkJCQkJCQkJc3RjYiwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAotCQkJCQkJCQkJ
CW5ldCwgMCwgdnJmX2lkKTsKLQkJCQlpZiAobmV0LT5yby5fc19hZGRyID09IE5VTEwpCi0JCQkJ
CXJldHVybjsKLQotCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOwotCi0JCQl9Ci0JCQlz
dGMubGFkZHJlc3NbMF0gPSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyLnNf
YWRkcjsKLQkJCXN0Yy5sYWRkcmVzc1sxXSA9IDA7Ci0JCQlzdGMubGFkZHJlc3NbMl0gPSAwOwot
CQkJc3RjLmxhZGRyZXNzWzNdID0gMDsKLQkJCXN0Yy5sYWRkcl90eXBlID0gU0NUUF9JUFY0X0FE
RFJFU1M7Ci0JCQkvKiBzY29wZV9pZCBpcyBvbmx5IGZvciB2NiAqLwotCQkJc3RjLnNjb3BlX2lk
ID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoK
LQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOwotCQkJbWVtY3B5KCZzdGMuYWRk
cmVzcywgJnNpbjYtPnNpbjZfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRy
KSk7Ci0JCQlzdGMuYWRkcl90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7Ci0JCQlzdGMuc2NvcGVf
aWQgPSBzaW42LT5zaW42X3Njb3BlX2lkOwotCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQg
PT0gMCkgewotCQkJCS8qCi0JCQkJICogc3RyYW5nZSBjYXNlIGhlcmUsIHRoZSBJTklUIHNob3Vs
ZCBoYXZlCi0JCQkJICogZG9uZSB0aGUgc2VsZWN0aW9uLgotCQkJCSAqLwotCQkJCW5ldC0+cm8u
X3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJCQkJCQkJCQlz
dGNiLCAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCi0JCQkJCQkJCQkJbmV0LCAwLCB2cmZfaWQp
OwotCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkKLQkJCQkJcmV0dXJuOwotCi0JCQkJ
bmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7Ci0JCQl9Ci0JCQltZW1jcHkoJnN0Yy5sYWRkcmVz
cywgJm5ldC0+cm8uX3NfYWRkci0+YWRkcmVzcy5zaW42LnNpbjZfYWRkciwKLQkJCSAgICAgICBz
aXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfSVBWNl9B
RERSRVNTOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
CWNhc2UgQUZfQ09OTjoKLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG87Ci0J
CQlzdGMuYWRkcmVzc1swXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1sxXSA9IDA7Ci0JCQlzdGMuYWRk
cmVzc1syXSA9IDA7Ci0JCQlzdGMuYWRkcmVzc1szXSA9IDA7Ci0JCQltZW1jcHkoJnN0Yy5hZGRy
ZXNzLCAmc2Nvbm4tPnNjb25uX2FkZHIsIHNpemVvZih2b2lkICopKTsKLQkJCXN0Yy5hZGRyX3R5
cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKLQkJCXN0Yy5sYWRkcmVzc1swXSA9IDA7Ci0JCQlzdGMu
bGFkZHJlc3NbMV0gPSAwOwotCQkJc3RjLmxhZGRyZXNzWzJdID0gMDsKLQkJCXN0Yy5sYWRkcmVz
c1szXSA9IDA7Ci0JCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJnNjb25uLT5zY29ubl9hZGRyLCBz
aXplb2Yodm9pZCAqKSk7Ci0JCQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfQ09OTl9BRERSRVNTOwot
CQkJc3RjLnNjb3BlX2lkID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCX0KLQl9Ci0JLyogTm93
IGxldHMgcHV0IHRoZSBTQ1RQIGhlYWRlciBpbiBwbGFjZSAqLwotCWluaXRhY2sgPSBtdG9kKG0s
IHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rICopOwotCS8qIFNhdmUgaXQgb2ZmIGZvciBxdWlj
ayByZWYgKi8KLQlzdGMucGVlcnNfdnRhZyA9IG50b2hsKGluaXRfY2hrLT5pbml0LmluaXRpYXRl
X3RhZyk7Ci0JLyogd2hvIGFyZSB3ZSAqLwotCW1lbWNweShzdGMuaWRlbnRpZmljYXRpb24sIFND
VFBfVkVSU0lPTl9TVFJJTkcsCi0JICAgICAgIG1pbihzdHJsZW4oU0NUUF9WRVJTSU9OX1NUUklO
RyksIHNpemVvZihzdGMuaWRlbnRpZmljYXRpb24pKSk7Ci0JbWVtc2V0KHN0Yy5yZXNlcnZlZCwg
MCwgU0NUUF9SRVNFUlZFX1NQQUNFKTsKLQkvKiBub3cgdGhlIGNodW5rIGhlYWRlciAqLwotCWlu
aXRhY2stPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0lOSVRJQVRJT05fQUNLOwotCWluaXRhY2stPmNo
LmNodW5rX2ZsYWdzID0gMDsKLQkvKiBmaWxsIGluIGxhdGVyIGZyb20gbWJ1ZiB3ZSBidWlsZCAq
LwotCWluaXRhY2stPmNoLmNodW5rX2xlbmd0aCA9IDA7Ci0JLyogcGxhY2UgaW4gbXkgdGFnICov
Ci0JaWYgKChhc29jICE9IE5VTEwpICYmCi0JICAgICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKLQkgICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9
PSBTQ1RQX1NUQVRFX0lOVVNFKSB8fAotCSAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFND
VFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpKSB7Ci0JCS8qIHJlLXVzZSB0aGUgdi10YWdzIGFuZCBp
bml0LXNlcSBoZXJlICovCi0JCWluaXRhY2stPmluaXQuaW5pdGlhdGVfdGFnID0gaHRvbmwoYXNv
Yy0+bXlfdnRhZyk7Ci0JCWluaXRhY2stPmluaXQuaW5pdGlhbF90c24gPSBodG9ubChhc29jLT5p
bml0X3NlcV9udW1iZXIpOwotCX0gZWxzZSB7Ci0JCXVpbnQzMl90IHZ0YWcsIGl0c247Ci0JCWlm
IChob2xkX2lucF9sb2NrKSB7Ci0JCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQl9Ci0JCWlmIChhc29jKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgm
YXNvYy0+cmVmY250LCAxKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJbmV3X3RhZzoK
LQkJCXZ0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwgc2gtPnNy
Y19wb3J0LCAxKTsKLQkJCWlmICgoYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpICAmJiAodnRhZyA9
PSBhc29jLT5teV92dGFnKSkgewotCQkJCS8qIEdvdCBhIGR1cGxpY2F0ZSB2dGFnIG9uIHNvbWUg
Z3V5IGJlaGluZCBhIG5hdAotCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgaXQuCi0JCQkJ
ICovCi0JCQkJZ290byBuZXdfdGFnOwotCQkJfQotCQkJaW5pdGFjay0+aW5pdC5pbml0aWF0ZV90
YWcgPSBodG9ubCh2dGFnKTsKLQkJCS8qIGdldCBhIFRTTiB0byB1c2UgdG9vICovCi0JCQlpdHNu
ID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCk7Ci0JCQlpbml0YWNrLT5p
bml0LmluaXRpYWxfdHNuID0gaHRvbmwoaXRzbik7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwot
CQkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgLTEpOwotCQl9IGVsc2UgewotCQkJdnRh
ZyA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgaW5wLT5zY3RwX2xwb3J0LCBzaC0+c3JjX3BvcnQs
IDEpOwotCQkJaW5pdGFjay0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9ubCh2dGFnKTsKLQkJCS8q
IGdldCBhIFRTTiB0byB1c2UgdG9vICovCi0JCQlpbml0YWNrLT5pbml0LmluaXRpYWxfdHNuID0g
aHRvbmwoc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCkpOwotCQl9Ci0JCWlm
IChob2xkX2lucF9sb2NrKSB7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJU0NUUF9JTlBf
REVDUl9SRUYoaW5wKTsKLQkJfQotCX0KLQkvKiBzYXZlIGF3YXkgbXkgdGFnIHRvICovCi0Jc3Rj
Lm15X3Z0YWcgPSBpbml0YWNrLT5pbml0LmluaXRpYXRlX3RhZzsKLQotCS8qIHNldCB1cCBzb21l
IG9mIHRoZSBjcmVkaXRzLiAqLwotCXNvID0gaW5wLT5zY3RwX3NvY2tldDsKLQlpZiAoc28gPT0g
TlVMTCkgewotCQkvKiBtZW1vcnkgcHJvYmxlbSAqLwotCQlzY3RwX21fZnJlZW0obSk7Ci0JCXJl
dHVybjsKLQl9IGVsc2UgewotCQlpbml0YWNrLT5pbml0LmFfcnduZCA9IGh0b25sKG1heChTQ1RQ
X1NCX0xJTUlUX1JDVihzbyksIFNDVFBfTUlOSU1BTF9SV05EKSk7Ci0JfQotCS8qIHNldCB3aGF0
IEkgd2FudCAqLwotCWhpc19saW1pdCA9IG50b2hzKGluaXRfY2hrLT5pbml0Lm51bV9pbmJvdW5k
X3N0cmVhbXMpOwotCS8qIGNob29zZSB3aGF0IEkgd2FudCAqLwotCWlmIChhc29jICE9IE5VTEwp
IHsKLQkJaWYgKGFzb2MtPnN0cmVhbW91dGNudCA+IGFzb2MtPnByZV9vcGVuX3N0cmVhbXMpIHsK
LQkJCWlfd2FudCA9IGFzb2MtPnN0cmVhbW91dGNudDsKLQkJfSBlbHNlIHsKLQkJCWlfd2FudCA9
IGFzb2MtPnByZV9vcGVuX3N0cmVhbXM7Ci0JCX0KLQl9IGVsc2UgewotCQlpX3dhbnQgPSBpbnAt
PnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50OwotCX0KLQlpZiAoaGlzX2xpbWl0IDwgaV93
YW50KSB7Ci0JCS8qIEkgV2FudCBtb3JlIDo8ICovCi0JCWluaXRhY2stPmluaXQubnVtX291dGJv
dW5kX3N0cmVhbXMgPSBpbml0X2Noay0+aW5pdC5udW1faW5ib3VuZF9zdHJlYW1zOwotCX0gZWxz
ZSB7Ci0JCS8qIEkgY2FuIGhhdmUgd2hhdCBJIHdhbnQgOj4gKi8KLQkJaW5pdGFjay0+aW5pdC5u
dW1fb3V0Ym91bmRfc3RyZWFtcyA9IGh0b25zKGlfd2FudCk7Ci0JfQotCS8qIHRlbGwgaGltIGhp
cyBsaW1pdC4gKi8KLQlpbml0YWNrLT5pbml0Lm51bV9pbmJvdW5kX3N0cmVhbXMgPQotCQlodG9u
cyhpbnAtPnNjdHBfZXAubWF4X29wZW5fc3RyZWFtc19pbnRvbWUpOwotCi0JLyogYWRhcHRhdGlv
biBsYXllciBpbmRpY2F0aW9uIHBhcmFtZXRlciAqLwotCWlmIChpbnAtPnNjdHBfZXAuYWRhcHRh
dGlvbl9sYXllcl9pbmRpY2F0b3JfcHJvdmlkZWQpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50
MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0aW9uKTsKLQkJ
YWxpID0gKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAqKShtdG9kKG0s
IGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJYWxpLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NU
UF9VTFBfQURBUFRBVElPTik7Ci0JCWFsaS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1l
dGVyX2xlbik7Ci0JCWFsaS0+aW5kaWNhdGlvbiA9IGh0b25sKGlucC0+c2N0cF9lcC5hZGFwdGF0
aW9uX2xheWVyX2luZGljYXRvcik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0K
LQotCS8qIEVDTiBwYXJhbWV0ZXIgKi8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5l
Y25fc3VwcG9ydGVkID09IDEpKSB8fAotCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+ZWNu
X3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSht
dG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhT
Q1RQX0VDTl9DQVBBQkxFKTsKLQkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9s
ZW4pOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQl9Ci0KLQkvKiBQUi1TQ1RQIHN1
cHBvcnRlZCBwYXJhbWV0ZXIgKi8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5wcnNj
dHBfc3VwcG9ydGVkID09IDEpKSB8fAotCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cHJz
Y3RwX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXpl
b2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOwotCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKLQkJcGgtPnBhcmFtX3R5cGUgPSBodG9u
cyhTQ1RQX1BSU0NUUF9TVVBQT1JURUQpOwotCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFy
YW1ldGVyX2xlbik7Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQotCS8qIEFk
ZCBOQVQgZnJpZW5kbHkgcGFyYW1ldGVyICovCi0JaWYgKG5hdF9mcmllbmRseSkgewotCQlwYXJh
bWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCXBo
ID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4p
OwotCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSEFTX05BVF9TVVBQT1JUKTsKLQkJcGgt
PnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQljaHVua19sZW4gKz0gcGFy
YW1ldGVyX2xlbjsKLQl9Ci0KLQkvKiBBbmQgbm93IHRlbGwgdGhlIHBlZXIgd2hpY2ggZXh0ZW5z
aW9ucyB3ZSBzdXBwb3J0ICovCi0JbnVtX2V4dCA9IDA7Ci0JcHJfc3VwcG9ydGVkID0gKHN0cnVj
dCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3QpICsg
Y2h1bmtfbGVuKTsKLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5wcnNjdHBfc3VwcG9y
dGVkID09IDEpKSB8fAotCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+cHJzY3RwX3N1cHBv
cnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0g
U0NUUF9GT1JXQVJEX0NVTV9UU047Ci0JCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmlk
YXRhX3N1cHBvcnRlZCA9PSAxKSkgfHwKLQkJICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5p
ZGF0YV9zdXBwb3J0ZWQgPT0gMSkpKSB7Ci0JCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251
bV9leHQrK10gPSBTQ1RQX0lGT1JXQVJEX0NVTV9UU047Ci0JCX0KLQl9Ci0JaWYgKCgoYXNvYyAh
PSBOVUxMKSAmJiAoYXNvYy0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpIHx8Ci0JICAgICgoYXNvYyA9
PSBOVUxMKSAmJiAoaW5wLT5hdXRoX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVk
LT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9BVVRIRU5USUNBVElPTjsKLQl9Ci0JaWYg
KCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+YXNjb25mX3N1cHBvcnRlZCA9PSAxKSkgfHwKLQkg
ICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkpKSB7Ci0J
CXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfQVNDT05GOwotCQlw
cl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0FTQ09ORl9BQ0s7Ci0J
fQotCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPnJlY29uZmlnX3N1cHBvcnRlZCA9PSAx
KSkgfHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9
PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9T
VFJFQU1fUkVTRVQ7Ci0JfQotCWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmlkYXRhX3N1
cHBvcnRlZCA9PSAxKSkgfHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmlkYXRhX3N1
cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0Kytd
ID0gU0NUUF9JREFUQTsKLQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+bnJzYWNr
X3N1cHBvcnRlZCA9PSAxKSkgfHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPm5yc2Fj
a19zdXBwb3J0ZWQgPT0gMSkpKSB7Ci0JCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4
dCsrXSA9IFNDVFBfTlJfU0VMRUNUSVZFX0FDSzsKLQl9Ci0JaWYgKCgoYXNvYyAhPSBOVUxMKSAm
JiAoYXNvYy0+cGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMSkpIHx8Ci0JICAgICgoYXNvYyA9PSBOVUxM
KSAmJiAoaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9PSAxKSkpIHsKLQkJcHJfc3VwcG9ydGVkLT5j
aHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9QQUNLRVRfRFJPUFBFRDsKLQl9Ci0JaWYgKG51
bV9leHQgPiAwKSB7Ci0JCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSkgKyBudW1fZXh0OwotCQlwcl9zdXBwb3J0
ZWQtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQpOwotCQlw
cl9zdXBwb3J0ZWQtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwotCQlw
YWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsK
LQkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47Ci0JfQotCi0JLyogYWRkIGF1dGhlbnRpY2F0
aW9uIHBhcmFtZXRlcnMgKi8KLQlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5hdXRoX3N1
cHBvcnRlZCA9PSAxKSkgfHwKLQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmF1dGhfc3Vw
cG9ydGVkID09IDEpKSkgewotCQlzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqcmFuZHA7Ci0JCXN0
cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjczsKLQkJc3RydWN0IHNjdHBfYXV0aF9jaHVu
a19saXN0ICpjaHVua3M7Ci0KLQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewotCQkJbWVtc2V0KG10
b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKLQkJCWNodW5rX2xl
biArPSBwYWRkaW5nX2xlbjsKLQkJCXBhZGRpbmdfbGVuID0gMDsKLQkJfQotCQkvKiBnZW5lcmF0
ZSBhbmQgYWRkIFJBTkRPTSBwYXJhbWV0ZXIgKi8KLQkJcmFuZHAgPSAoc3RydWN0IHNjdHBfYXV0
aF9yYW5kb20gKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBhcmFtZXRlcl9s
ZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tKSArCi0JCSAgICAg
ICAgICAgICAgICBTQ1RQX0FVVEhfUkFORE9NX1NJWkVfREVGQVVMVDsKLQkJcmFuZHAtPnBoLnBh
cmFtX3R5cGUgPSBodG9ucyhTQ1RQX1JBTkRPTSk7Ci0JCXJhbmRwLT5waC5wYXJhbV9sZW5ndGgg
PSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKLQkJU0NUUF9SRUFEX1JBTkRPTShyYW5kcC0+cmFuZG9t
X2RhdGEsIFNDVFBfQVVUSF9SQU5ET01fU0laRV9ERUZBVUxUKTsKLQkJcGFkZGluZ19sZW4gPSBT
Q1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47Ci0JCWNodW5rX2xlbiAr
PSBwYXJhbWV0ZXJfbGVuOwotCi0JCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKLQkJCW1lbXNldCht
dG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7Ci0JCQljaHVua19s
ZW4gKz0gcGFkZGluZ19sZW47Ci0JCQlwYWRkaW5nX2xlbiA9IDA7Ci0JCX0KLQkJLyogYWRkIEhN
QUNfQUxHTyBwYXJhbWV0ZXIgKi8KLQkJaG1hY3MgPSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2Fs
Z28gKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0JCXBhcmFtZXRlcl9sZW4gPSAo
dWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvKSArCi0JCSAgICAgICAg
ICAgICAgICBzY3RwX3NlcmlhbGl6ZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3Ms
Ci0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDhfdCAqKWht
YWNzLT5obWFjX2lkcyk7Ci0JCWhtYWNzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9ITUFD
X0xJU1QpOwotCQlobWFjcy0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7
Ci0JCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJf
bGVuOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQotCQlpZiAocGFkZGluZ19sZW4g
PiAwKSB7Ci0JCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGlu
Z19sZW4pOwotCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQkJcGFkZGluZ19sZW4gPSAw
OwotCQl9Ci0JCS8qIGFkZCBDSFVOS1MgcGFyYW1ldGVyICovCi0JCWNodW5rcyA9IChzdHJ1Y3Qg
c2N0cF9hdXRoX2NodW5rX2xpc3QgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7Ci0J
CXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtf
bGlzdCkgKwotCQkgICAgICAgICAgICAgICAgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoaW5w
LT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2h1bmtzLT5jaHVua190eXBlcyk7Ci0JCWNodW5rcy0+cGgucGFy
YW1fdHlwZSA9IGh0b25zKFNDVFBfQ0hVTktfTElTVCk7Ci0JCWNodW5rcy0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7Ci0JCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIo
cGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJfbGVuOwotCQljaHVua19sZW4gKz0gcGFyYW1ldGVy
X2xlbjsKLQl9Ci0JU0NUUF9CVUZfTEVOKG0pID0gY2h1bmtfbGVuOwotCW1fbGFzdCA9IG07Ci0J
Lyogbm93IHRoZSBhZGRyZXNzZXMgKi8KLQkvKiBUbyBvcHRpbWl6ZSB0aGlzIHdlIGNvdWxkIHB1
dCB0aGUgc2NvcGluZyBzdHVmZgotCSAqIGludG8gYSBzdHJ1Y3R1cmUgYW5kIHJlbW92ZSB0aGUg
aW5kaXZpZHVhbCB1aW50OCdzIGZyb20KLQkgKiB0aGUgc3RjIHN0cnVjdHVyZS4gVGhlbiB3ZSBj
b3VsZCBqdXN0IHNpZmEgaW4gdGhlCi0JICogYWRkcmVzcyB3aXRoaW4gdGhlIHN0Yy4uIGJ1dCBm
b3Igbm93IHRoaXMgaXMgYSBxdWljawotCSAqIGhhY2sgdG8gZ2V0IHRoZSBhZGRyZXNzIHN0dWZm
IHRlYXNlZCBhcGFydC4KLQkgKi8KLQlzY3AuaXB2NF9hZGRyX2xlZ2FsID0gc3RjLmlwdjRfYWRk
cl9sZWdhbDsKLQlzY3AuaXB2Nl9hZGRyX2xlZ2FsID0gc3RjLmlwdjZfYWRkcl9sZWdhbDsKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jc2NwLmNvbm5fYWRkcl9sZWdhbCA9IHN0Yy5jb25u
X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLQlzY3AubG9vcGJhY2tfc2NvcGUgPSBzdGMubG9vcGJhY2tf
c2NvcGU7Ci0Jc2NwLmlwdjRfbG9jYWxfc2NvcGUgPSBzdGMuaXB2NF9zY29wZTsKLQlzY3AubG9j
YWxfc2NvcGUgPSBzdGMubG9jYWxfc2NvcGU7Ci0Jc2NwLnNpdGVfc2NvcGUgPSBzdGMuc2l0ZV9z
Y29wZTsKLQltX2xhc3QgPSBzY3RwX2FkZF9hZGRyZXNzZXNfdG9faV9pYShpbnAsIHN0Y2IsICZz
Y3AsIG1fbGFzdCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbnRfaW5p
dHNfdG8sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZGRpbmdfbGVu
LCAmY2h1bmtfbGVuKTsKLQkvKiBwYWRkaW5nX2xlbiBjYW4gb25seSBiZSBwb3NpdGl2ZSwgaWYg
bm8gYWRkcmVzc2VzIGhhdmUgYmVlbiBhZGRlZCAqLwotCWlmIChwYWRkaW5nX2xlbiA+IDApIHsK
LQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsK
LQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOwotCQlTQ1RQX0JVRl9MRU4obSkgKz0gcGFkZGlu
Z19sZW47Ci0JCXBhZGRpbmdfbGVuID0gMDsKLQl9Ci0KLQkvKiB0YWNrIG9uIHRoZSBvcGVyYXRp
b25hbCBlcnJvciBpZiBwcmVzZW50ICovCi0JaWYgKG9wX2VycikgewotCQlwYXJhbWV0ZXJfbGVu
ID0gMDsKLQkJZm9yIChtX3RtcCA9IG9wX2VycjsgbV90bXAgIT0gTlVMTDsgbV90bXAgPSBTQ1RQ
X0JVRl9ORVhUKG1fdG1wKSkgewotCQkJcGFyYW1ldGVyX2xlbiArPSBTQ1RQX0JVRl9MRU4obV90
bXApOwotCQl9Ci0JCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xlbikgLSBw
YXJhbWV0ZXJfbGVuOwotCQlTQ1RQX0JVRl9ORVhUKG1fbGFzdCkgPSBvcF9lcnI7Ci0JCXdoaWxl
IChTQ1RQX0JVRl9ORVhUKG1fbGFzdCkgIT0gTlVMTCkgewotCQkJbV9sYXN0ID0gU0NUUF9CVUZf
TkVYVChtX2xhc3QpOwotCQl9Ci0JCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOwotCX0KLQlp
ZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCW1fbGFzdCA9IHNjdHBfYWRkX3BhZF90b21idWYobV9s
YXN0LCBwYWRkaW5nX2xlbik7Ci0JCWlmIChtX2xhc3QgPT0gTlVMTCkgewotCQkJLyogSG91c3Rv
biB3ZSBoYXZlIGEgcHJvYmxlbSwgbm8gc3BhY2UgKi8KLQkJCXNjdHBfbV9mcmVlbShtKTsKLQkJ
CXJldHVybjsKLQkJfQotCQljaHVua19sZW4gKz0gcGFkZGluZ19sZW47Ci0JCXBhZGRpbmdfbGVu
ID0gMDsKLQl9Ci0JLyogTm93IHdlIG11c3QgYnVpbGQgYSBjb29raWUgKi8KLQltX2Nvb2tpZSA9
IHNjdHBfYWRkX2Nvb2tpZShpbml0X3BrdCwgb2Zmc2V0LCBtLCAwLCAmc3RjLCAmc2lnbmF0dXJl
KTsKLQlpZiAobV9jb29raWUgPT0gTlVMTCkgewotCQkvKiBtZW1vcnkgcHJvYmxlbSAqLwotCQlz
Y3RwX21fZnJlZW0obSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogTm93IGFwcGVuZCB0aGUgY29va2ll
IHRvIHRoZSBlbmQgYW5kIHVwZGF0ZSB0aGUgc3BhY2Uvc2l6ZSAqLwotCVNDVFBfQlVGX05FWFQo
bV9sYXN0KSA9IG1fY29va2llOwotCXBhcmFtZXRlcl9sZW4gPSAwOwotCWZvciAobV90bXAgPSBt
X2Nvb2tpZTsgbV90bXAgIT0gTlVMTDsgbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1fdG1wKSkgewot
CQlwYXJhbWV0ZXJfbGVuICs9IFNDVFBfQlVGX0xFTihtX3RtcCk7Ci0JCWlmIChTQ1RQX0JVRl9O
RVhUKG1fdG1wKSA9PSBOVUxMKSB7Ci0JCQltX2xhc3QgPSBtX3RtcDsKLQkJfQotCX0KLQlwYWRk
aW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4pIC0gcGFyYW1ldGVyX2xlbjsKLQlj
aHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKLQotCS8qIFBsYWNlIGluIHRoZSBzaXplLCBidXQg
d2UgZG9uJ3QgaW5jbHVkZQotCSAqIHRoZSBsYXN0IHBhZCAoaWYgYW55KSBpbiB0aGUgSU5JVC1B
Q0suCi0JICovCi0JaW5pdGFjay0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsK
LQotCS8qIFRpbWUgdG8gc2lnbiB0aGUgY29va2llLCB3ZSBkb24ndCBzaWduIG92ZXIgdGhlIGNv
b2tpZQotCSAqIHNpZ25hdHVyZSB0aG91Z2ggdGh1cyB3ZSBzZXQgdHJhaWxlci4KLQkgKi8KLQko
dm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCi0JCQkgICh1aW50OF90ICopaW5wLT5zY3RwX2Vw
LnNlY3JldF9rZXlbKGludCkoaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcildLAot
CQkJICBTQ1RQX1NFQ1JFVF9TSVpFLCBtX2Nvb2tpZSwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFt
aGRyKSwKLQkJCSAgKHVpbnQ4X3QgKilzaWduYXR1cmUsIFNDVFBfU0lHTkFUVVJFX1NJWkUpOwot
CS8qCi0JICogV2Ugc2lmYSAwIGhlcmUgdG8gTk9UIHNldCBJUF9ERiBpZiBpdHMgSVB2NCwgd2Ug
aWdub3JlIHRoZSByZXR1cm4KLQkgKiBoZXJlIHNpbmNlIHRoZSB0aW1lciB3aWxsIGRyaXZlIGEg
cmV0cmFubWlzc2lvbi4KLQkgKi8KLQlpZiAocGFkZGluZ19sZW4gPiAwKSB7Ci0JCWlmIChzY3Rw
X2FkZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwpIHsKLQkJCXNjdHBf
bV9mcmVlbShtKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoc3RjLmxvb3BiYWNrX3Njb3Bl
KSB7Ci0JCW92ZXJfYWRkciA9ICh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqKWRzdDsKLQl9IGVsc2Ug
ewotCQlvdmVyX2FkZHIgPSBOVUxMOwotCX0KLQotCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVs
X2NodW5rX291dHB1dChpbnAsIE5VTEwsIE5VTEwsIHRvLCBtLCAwLCBOVUxMLCAwLCAwLAotCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHNoLT5zcmNfcG9y
dCwgaW5pdF9jaGstPmluaXQuaW5pdGlhdGVfdGFnLAotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwb3J0LCBvdmVyX2FkZHIsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBt
Zmxvd2lkLAotI2VuZGlmCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfU09fTk9UX0xPQ0tFRCkpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAi
R2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsK
LQkJCWlmIChhc29jICE9IE5VTEwpIHsKLQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7Ci0J
CQl9Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0JCX0KLQl9IGVsc2Ug
ewotCQlpZiAoYXNvYyAhPSBOVUxMKSB7Ci0JCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7Ci0J
CX0KLQl9Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3Mp
OwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX3BydW5lX3Byc2N0cChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0gICAgc3RydWN0IHNj
dHBfc25kcmN2aW5mbyAqc3JjdiwKLSAgICBpbnQgZGF0YW91dCkKLXsKLQlpbnQgZnJlZWRfc3Bj
ID0gMDsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOwotCi0JU0NUUF9UQ0Jf
TE9DS19BU1NFUlQoc3RjYik7Ci0JaWYgKChhc29jLT5wcnNjdHBfc3VwcG9ydGVkKSAmJgotCSAg
ICAoYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZSA+IDApKSB7Ci0JCVRBSUxRX0ZPUkVB
Q0goY2hrLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCQkvKgotCQkJICogTG9v
ayBmb3IgY2h1bmtzIG1hcmtlZCB3aXRoIHRoZSBQUl9TQ1RQIGZsYWcgQU5ECi0JCQkgKiB0aGUg
YnVmZmVyIHNwYWNlIGZsYWcuIElmIHRoZSBvbmUgYmVpbmcgc2VudCBpcwotCQkJICogZXF1YWwg
b3IgZ3JlYXRlciBwcmlvcml0eSB0aGVuIHB1cmdlIHRoZSBvbGQgb25lCi0JCQkgKiBhbmQgZnJl
ZSBzb21lIHNwYWNlLgotCQkJICovCi0JCQlpZiAoUFJfU0NUUF9CVUZfRU5BQkxFRChjaGstPmZs
YWdzKSkgewotCQkJCS8qCi0JCQkJICogVGhpcyBvbmUgaXMgUFItU0NUUCBBTkQgYnVmZmVyIHNw
YWNlCi0JCQkJICogbGltaXRlZCB0eXBlCi0JCQkJICovCi0JCQkJaWYgKGNoay0+cmVjLmRhdGEu
dGltZXRvZHJvcC50dl9zZWMgPj0gKGxvbmcpc3Jjdi0+c2luZm9fdGltZXRvbGl2ZSkgewotCQkJ
CQkvKgotCQkJCQkgKiBMb3dlciBudW1iZXJzIGVxdWF0ZXMgdG8gaGlnaGVyCi0JCQkJCSAqIHBy
aW9yaXR5IHNvIGlmIHRoZSBvbmUgd2UgYXJlCi0JCQkJCSAqIGxvb2tpbmcgYXQgaGFzIGEgbGFy
Z2VyIG9yIGVxdWFsCi0JCQkJCSAqIHByaW9yaXR5IHdlIHdhbnQgdG8gZHJvcCB0aGUgZGF0YQot
CQkJCQkgKiBhbmQgTk9UIHJldHJhbnNtaXQgaXQuCi0JCQkJCSAqLwotCQkJCQlpZiAoY2hrLT5k
YXRhKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogV2UgcmVsZWFzZSB0aGUgYm9va19zaXplCi0JCQkJ
CQkgKiBpZiB0aGUgbWJ1ZiBpcyBoZXJlCi0JCQkJCQkgKi8KLQkJCQkJCWludCByZXRfc3BjOwot
CQkJCQkJdWludDhfdCBzZW50OwotCi0JCQkJCQlpZiAoY2hrLT5zZW50ID4gU0NUUF9EQVRBR1JB
TV9VTlNFTlQpCi0JCQkJCQkJc2VudCA9IDE7Ci0JCQkJCQllbHNlCi0JCQkJCQkJc2VudCA9IDA7
Ci0JCQkJCQlyZXRfc3BjID0gc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RjYiwgY2hrLAot
CQkJCQkJICAgIHNlbnQsCi0JCQkJCQkgICAgU0NUUF9TT19MT0NLRUQpOwotCQkJCQkJZnJlZWRf
c3BjICs9IHJldF9zcGM7Ci0JCQkJCQlpZiAoZnJlZWRfc3BjID49IGRhdGFvdXQpIHsKLQkJCQkJ
CQlyZXR1cm47Ci0JCQkJCQl9Ci0JCQkJCX0JLyogaWYgY2h1bmsgd2FzIHByZXNlbnQgKi8KLQkJ
CQl9CS8qIGlmIG9mIHN1ZmZpY2llbnQgcHJpb3JpdHkgKi8KLQkJCX0JLyogaWYgY2h1bmsgaGFz
IGVuYWJsZWQgKi8KLQkJfQkJLyogdGFpbHFmb3JlYWNoICovCi0KLQkJVEFJTFFfRk9SRUFDSF9T
QUZFKGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewotCQkJLyogSGVy
ZSB3ZSBtdXN0IG1vdmUgdG8gdGhlIHNlbnQgcXVldWUgYW5kIG1hcmsgKi8KLQkJCWlmIChQUl9T
Q1RQX0JVRl9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7Ci0JCQkJaWYgKGNoay0+cmVjLmRhdGEudGlt
ZXRvZHJvcC50dl9zZWMgPj0gKGxvbmcpc3Jjdi0+c2luZm9fdGltZXRvbGl2ZSkgewotCQkJCQlp
ZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogV2UgcmVsZWFzZSB0aGUgYm9va19z
aXplCi0JCQkJCQkgKiBpZiB0aGUgbWJ1ZiBpcyBoZXJlCi0JCQkJCQkgKi8KLQkJCQkJCWludCBy
ZXRfc3BjOwotCi0JCQkJCQlyZXRfc3BjID0gc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3Rj
YiwgY2hrLAotCQkJCQkJICAgIDAsIFNDVFBfU09fTE9DS0VEKTsKLQotCQkJCQkJZnJlZWRfc3Bj
ICs9IHJldF9zcGM7Ci0JCQkJCQlpZiAoZnJlZWRfc3BjID49IGRhdGFvdXQpIHsKLQkJCQkJCQly
ZXR1cm47Ci0JCQkJCQl9Ci0JCQkJCX0JLyogZW5kIGlmIGNoay0+ZGF0YSAqLwotCQkJCX0JLyog
ZW5kIGlmIHJpZ2h0IGNsYXNzICovCi0JCQl9CS8qIGVuZCBpZiBjaGsgcHItc2N0cCAqLwotCQl9
CQkvKiB0YWlscWZvcmVhY2hzYWZlIChjaGspICovCi0JfQkJCS8qIGlmIGVuYWJsZWQgaW4gYXNv
YyAqLwotfQotCi1pbnQKLXNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAotICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCWludCBzaXosIG92aDsK
LQotCS8qCi0JICogRm9yIGVuZHBvaW50cyB0aGF0IGhhdmUgYm90aCB2NiBhbmQgdjQgYWRkcmVz
c2VzIHdlIG11c3QgcmVzZXJ2ZQotCSAqIHJvb20gZm9yIHRoZSBpcHY2IGhlYWRlciwgZm9yIHRo
b3NlIHRoYXQgYXJlIG9ubHkgZGVhbGluZyB3aXRoIFY0Ci0JICogd2UgdXNlIGEgbGFyZ2VyIGZy
YWcgcG9pbnQuCi0JICovCi0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgewotCQlvdmggPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQl9IGVsc2Ug
ewotCQlvdmggPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQl9Ci0Jb3ZoICs9IFNDVFBfREFUQV9D
SFVOS19PVkVSSEVBRChzdGNiKTsKLQlpZiAoc3RjYi0+YXNvYy5zY3RwX2ZyYWdfcG9pbnQgPiBh
c29jLT5zbWFsbGVzdF9tdHUpCi0JCXNpeiA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKLQll
bHNlCi0JCXNpeiA9IChzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCAtIG92aCk7Ci0JLyoKLQkg
KiBpZiAoc2l6ID4gKE1DTEJZVEVTLXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpIHsK
LQkgKi8KLQkvKiBBIGRhdGEgY2h1bmsgTVVTVCBmaXQgaW4gYSBjbHVzdGVyICovCi0JLyogc2l6
ID0gKE1DTEJZVEVTIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsgKi8KLQkvKiB9
ICovCi0KLQkvKiBhZGp1c3QgZm9yIGFuIEFVVEggY2h1bmsgaWYgREFUQSByZXF1aXJlcyBhdXRo
ICovCi0JaWYgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFz
b2MucGVlcl9hdXRoX2NodW5rcykpCi0JCXNpeiAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihz
dGNiLT5hc29jLnBlZXJfaG1hY19pZCk7Ci0KLQlpZiAoc2l6ICUgNCkgewotCQkvKiBtYWtlIGl0
IGFuIGV2ZW4gd29yZCBib3VuZGFyeSBwbGVhc2UgKi8KLQkJc2l6IC09IChzaXogJSA0KTsKLQl9
Ci0JcmV0dXJuIChzaXopOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zZXRfcHJzY3RwX3BvbGlj
eShzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3ApCi17Ci0JLyoKLQkgKiBXZSBh
c3N1bWUgdGhhdCB0aGUgdXNlciB3YW50cyBQUl9TQ1RQX1RUTCBpZiB0aGUgdXNlcgotCSAqIHBy
b3ZpZGVzIGEgcG9zaXRpdmUgbGlmZXRpbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYW55Ci0JICog
UFJfU0NUUCBwb2xpY3kuCi0JICovCi0JaWYgKFBSX1NDVFBfRU5BQkxFRChzcC0+c2luZm9fZmxh
Z3MpKSB7Ci0JCXNwLT5hY3RfZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koc3AtPnNpbmZvX2ZsYWdz
KTsKLQl9IGVsc2UgaWYgKHNwLT50aW1ldG9saXZlID4gMCkgewotCQlzcC0+c2luZm9fZmxhZ3Mg
fD0gU0NUUF9QUl9TQ1RQX1RUTDsKLQkJc3AtPmFjdF9mbGFncyB8PSBQUl9TQ1RQX1BPTElDWShz
cC0+c2luZm9fZmxhZ3MpOwotCX0gZWxzZSB7Ci0JCXJldHVybjsKLQl9Ci0Jc3dpdGNoIChQUl9T
Q1RQX1BPTElDWShzcC0+c2luZm9fZmxhZ3MpKSB7Ci0JY2FzZSBDSFVOS19GTEFHU19QUl9TQ1RQ
X0JVRjoKLQkJLyoKLQkJICogVGltZSB0byBsaXZlIGlzIGEgcHJpb3JpdHkgc3RvcmVkIGluIHR2
X3NlYyB3aGVuCi0JCSAqIGRvaW5nIHRoZSBidWZmZXIgZHJvcCB0aGluZy4KLQkJICovCi0JCXNw
LT50cy50dl9zZWMgPSBzcC0+dGltZXRvbGl2ZTsKLQkJc3AtPnRzLnR2X3VzZWMgPSAwOwotCQli
cmVhazsKLQljYXNlIENIVU5LX0ZMQUdTX1BSX1NDVFBfVFRMOgotCXsKLQkJc3RydWN0IHRpbWV2
YWwgdHY7Ci0JCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOwotCQl0di50dl9z
ZWMgPSBzcC0+dGltZXRvbGl2ZSAvIDEwMDA7Ci0JCXR2LnR2X3VzZWMgPSAoc3AtPnRpbWV0b2xp
dmUgKiAxMDAwKSAlIDEwMDAwMDA7Ci0JCS8qIFRPRE8gc2N0cF9jb25zdGFudHMuaCBuZWVkcyBh
bHRlcm5hdGl2ZSB0aW1lIG1hY3JvcyB3aGVuCi0JCSAqICBfS0VSTkVMIGlzIHVuZGVmaW5lZC4K
LQkJICovCi0jaWZuZGVmIF9fRnJlZUJTRF9fCi0JCXRpbWVyYWRkKCZzcC0+dHMsICZ0diwgJnNw
LT50cyk7Ci0jZWxzZQotCQl0aW1ldmFsYWRkKCZzcC0+dHMsICZ0dik7Ci0jZW5kaWYKLQl9Ci0J
CWJyZWFrOwotCWNhc2UgQ0hVTktfRkxBR1NfUFJfU0NUUF9SVFg6Ci0JCS8qCi0JCSAqIFRpbWUg
dG8gbGl2ZSBpcyBhIHRoZSBudW1iZXIgb3IgcmV0cmFuc21pc3Npb25zCi0JCSAqIHN0b3JlZCBp
biB0dl9zZWMuCi0JCSAqLwotCQlzcC0+dHMudHZfc2VjID0gc3AtPnRpbWV0b2xpdmU7Ci0JCXNw
LT50cy50dl91c2VjID0gMDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1VTUlJFUTEsCi0JCQkiVW5rbm93biBQUl9TQ1RQIHBvbGljeSAldS5cbiIsCi0JCQlQUl9T
Q1RQX1BPTElDWShzcC0+c2luZm9fZmxhZ3MpKTsKLQkJYnJlYWs7Ci0JfQotfQotCi1zdGF0aWMg
aW50Ci1zY3RwX21zZ19hcHBlbmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsCi0JCXN0cnVjdCBtYnVmICptLAotCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
ICpzcmN2LCBpbnQgaG9sZF9zdGNiX2xvY2spCi17Ci0JaW50IGVycm9yID0gMDsKLQlzdHJ1Y3Qg
bWJ1ZiAqYXQ7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwID0gTlVMTDsK
LQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtOwotCi0JLyogR2l2ZW4gYW4gbWJ1ZiBjaGFp
biwgcHV0IGl0Ci0JICogaW50byB0aGUgYXNzb2NpYXRpb24gc2VuZCBxdWV1ZSBhbmQKLQkgKiBw
bGFjZSBpdCBvbiB0aGUgd2hlZWwKLQkgKi8KLQlpZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCS8qIEludmFsaWQgc3RyZWFtIG51bWJlciAqLwot
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9T
Q1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsK
LQl9Ci0JaWYgKChzdGNiLT5hc29jLnN0cmVhbV9sb2NrZWQpICYmCi0JICAgIChzdGNiLT5hc29j
LnN0cmVhbV9sb2NrZWRfb24gIT0gc3Jjdi0+c2luZm9fc3RyZWFtKSkgewotCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUX1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwg
RUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc3RybSA9
ICZzdGNiLT5hc29jLnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFtXTsKLQkvKiBOb3cgY2FuIHdl
IHNlbmQgdGhpcz8gKi8KLQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1NFTlQpIHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNv
YykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAgKFNDVFBfR0VUX1NU
QVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAotCSAg
ICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKLQkJ
LyogZ290IGRhdGEgd2hpbGUgc2h1dHRpbmcgZG93biAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7Ci0J
CWVycm9yID0gRUNPTk5SRVNFVDsKLQkJZ290byBvdXRfbm93OwotCX0KLQlzY3RwX2FsbG9jX2Ff
c3RybW9xKHN0Y2IsIHNwKTsKLQlpZiAoc3AgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKLQkJ
ZXJyb3IgPSBFTk9NRU07Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc3AtPnNpbmZvX2ZsYWdzID0g
c3Jjdi0+c2luZm9fZmxhZ3M7Ci0Jc3AtPnRpbWV0b2xpdmUgPSBzcmN2LT5zaW5mb190aW1ldG9s
aXZlOwotCXNwLT5wcGlkID0gc3Jjdi0+c2luZm9fcHBpZDsKLQlzcC0+Y29udGV4dCA9IHNyY3Yt
PnNpbmZvX2NvbnRleHQ7Ci0Jc3AtPmZzbiA9IDA7Ci0JaWYgKHNwLT5zaW5mb19mbGFncyAmIFND
VFBfQUREUl9PVkVSKSB7Ci0JCXNwLT5uZXQgPSBuZXQ7Ci0JCWF0b21pY19hZGRfaW50KCZzcC0+
bmV0LT5yZWZfY291bnQsIDEpOwotCX0gZWxzZSB7Ci0JCXNwLT5uZXQgPSBOVUxMOwotCX0KLQko
dm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3AtPnRzKTsKLQlzcC0+c2lkID0gc3Jjdi0+c2lu
Zm9fc3RyZWFtOwotCXNwLT5tc2dfaXNfY29tcGxldGUgPSAxOwotCXNwLT5zZW5kZXJfYWxsX2Rv
bmUgPSAxOwotCXNwLT5zb21lX3Rha2VuID0gMDsKLQlzcC0+ZGF0YSA9IG07Ci0Jc3AtPnRhaWxf
bWJ1ZiA9IE5VTEw7Ci0Jc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzcCk7Ci0JLyogV2UgY291bGQg
aW4gdGhlb3J5IChmb3Igc2VuZGFsbCkgc2lmYSB0aGUgbGVuZ3RoCi0JICogaW4sIGJ1dCB3ZSB3
b3VsZCBzdGlsbCBoYXZlIHRvIGh1bnQgdGhyb3VnaCB0aGUKLQkgKiBjaGFpbiBzaW5jZSB3ZSBu
ZWVkIHRvIHNldHVwIHRoZSB0YWlsX21idWYKLQkgKi8KLQlzcC0+bGVuZ3RoID0gMDsKLQlmb3Ig
KGF0ID0gbTsgYXQ7IGF0ID0gU0NUUF9CVUZfTkVYVChhdCkpIHsKLQkJaWYgKFNDVFBfQlVGX05F
WFQoYXQpID09IE5VTEwpCi0JCQlzcC0+dGFpbF9tYnVmID0gYXQ7Ci0JCXNwLT5sZW5ndGggKz0g
U0NUUF9CVUZfTEVOKGF0KTsKLQl9Ci0JaWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92YWxpZCkg
ewotCQlzcC0+YXV0aF9rZXlpZCA9IHNyY3YtPnNpbmZvX2tleW51bWJlcjsKLQl9IGVsc2Ugewot
CQlzcC0+YXV0aF9rZXlpZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOwotCX0K
LQlpZiAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5w
ZWVyX2F1dGhfY2h1bmtzKSkgewotCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgc3AtPmF1
dGhfa2V5aWQpOwotCQlzcC0+aG9sZHNfa2V5X3JlZiA9IDE7Ci0JfQotCWlmIChob2xkX3N0Y2Jf
bG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQl9Ci0Jc2N0cF9zbmRf
c2JfYWxsb2Moc3RjYiwgc3AtPmxlbmd0aCk7Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Mu
c3RyZWFtX3F1ZXVlX2NudCwgMSk7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVl
LCBzcCwgbmV4dCk7Ci0Jc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19hZGRfdG9fc3Ry
ZWFtKHN0Y2IsICZzdGNiLT5hc29jLCBzdHJtLCBzcCwgMSk7Ci0JbSA9IE5VTEw7Ci0JaWYgKGhv
bGRfc3RjYl9sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQot
b3V0X25vdzoKLQlpZiAobSkgewotCQlzY3RwX21fZnJlZW0obSk7Ci0JfQotCXJldHVybiAoZXJy
b3IpOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1zY3RwX2NvcHlfbWJ1ZmNoYWluKHN0
cnVjdCBtYnVmICpjbG9uZWNoYWluLAotCQkgICAgc3RydWN0IG1idWYgKm91dGNoYWluLAotCQkg
ICAgc3RydWN0IG1idWYgKiplbmRvZmNoYWluLAotCQkgICAgaW50IGNhbl90YWtlX21idWYsCi0J
CSAgICBpbnQgc2l6ZW9mY3B5LAotCQkgICAgdWludDhfdCBjb3B5X2J5X3JlZikKLXsKLQlzdHJ1
Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3QgbWJ1ZiAqYXBwZW5kY2hhaW47Ci0JY2FkZHJfdCBjcDsKLQlp
bnQgbGVuOwotCi0JaWYgKGVuZG9mY2hhaW4gPT0gTlVMTCkgewotCQkvKiBlcnJvciAqLwotCWVy
cm9yX291dDoKLQkJaWYgKG91dGNoYWluKQotCQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKLQkJ
cmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGNhbl90YWtlX21idWYpIHsKLQkJYXBwZW5kY2hhaW4g
PSBjbG9uZWNoYWluOwotCX0gZWxzZSB7Ci0JCWlmICghY29weV9ieV9yZWYgJiYKLSNpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLQkJICAgIDAKLSNlbHNlCi0JCSAgICAoc2l6ZW9mY3B5IDw9IChpbnQp
KCgoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkgLSAxKSAqIE1M
RU4pICsgTUhMRU4pKSkKLSNlbmRpZgotCQkgICAgKSB7Ci0JCQkvKiBJdHMgbm90IGluIGEgY2x1
c3RlciAqLwotCQkJaWYgKCplbmRvZmNoYWluID09IE5VTEwpIHsKLQkJCQkvKiBsZXRzIGdldCBh
IG1idWYgY2x1c3RlciAqLwotCQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCS8qIFRo
aXMgaXMgdGhlIGdlbmVyYWwgY2FzZSAqLwotCQkJCW5ld19tYnVmOgotCQkJCQlvdXRjaGFpbiA9
IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURF
Uik7Ci0JCQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCQlnb3RvIGVycm9yX291dDsK
LQkJCQkJfQotCQkJCQlTQ1RQX0JVRl9MRU4ob3V0Y2hhaW4pID0gMDsKLQkJCQkJKmVuZG9mY2hh
aW4gPSBvdXRjaGFpbjsKLQkJCQkJLyogZ2V0IHRoZSBwcmVwZW5kIHNwYWNlICovCi0JCQkJCVND
VFBfQlVGX1JFU1ZfVUYob3V0Y2hhaW4sIChTQ1RQX0ZJUlNUX01CVUZfUkVTVis0KSk7Ci0JCQkJ
fSBlbHNlIHsKLQkJCQkJLyogV2UgcmVhbGx5IHNob3VsZCBub3QgZ2V0IGEgTlVMTCBpbiBlbmRv
ZmNoYWluICovCi0JCQkJCS8qIGZpbmQgZW5kICovCi0JCQkJCW0gPSBvdXRjaGFpbjsKLQkJCQkJ
d2hpbGUgKG0pIHsKLQkJCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKLQkJCQkJ
CQkqZW5kb2ZjaGFpbiA9IG07Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCQl9Ci0JCQkJCQltID0gU0NU
UF9CVUZfTkVYVChtKTsKLQkJCQkJfQotCQkJCQkvKiBzYW5pdHkgKi8KLQkJCQkJaWYgKCplbmRv
ZmNoYWluID09IE5VTEwpIHsKLQkJCQkJCS8qIGh1aCwgVFNOSCBYWFggbWF5YmUgd2Ugc2hvdWxk
IHBhbmljICovCi0JCQkJCQlzY3RwX21fZnJlZW0ob3V0Y2hhaW4pOwotCQkJCQkJZ290byBuZXdf
bWJ1ZjsKLQkJCQkJfQotCQkJCX0KLQkJCQkvKiBnZXQgdGhlIG5ldyBlbmQgb2YgbGVuZ3RoICov
Ci0JCQkJbGVuID0gKGludClNX1RSQUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOwotCQkJfSBlbHNl
IHsKLQkJCQkvKiBob3cgbXVjaCBpcyBsZWZ0IGF0IHRoZSBlbmQ/ICovCi0JCQkJbGVuID0gKGlu
dClNX1RSQUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOwotCQkJfQotCQkJLyogRmluZCB0aGUgZW5k
IG9mIHRoZSBkYXRhLCBmb3IgYXBwZW5kaW5nICovCi0JCQljcCA9IChtdG9kKCgqZW5kb2ZjaGFp
biksIGNhZGRyX3QpICsgU0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpKTsKLQotCQkJLyogTm93
IGxldHMgY29weSBpdCBvdXQgKi8KLQkJCWlmIChsZW4gPj0gc2l6ZW9mY3B5KSB7Ci0JCQkJLyog
SXQgYWxsIGZpdHMsIGNvcHkgaXQgaW4gKi8KLQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAs
IHNpemVvZmNweSwgY3ApOwotCQkJCVNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSArPSBzaXpl
b2ZjcHk7Ci0JCQl9IGVsc2UgewotCQkJCS8qIGZpbGwgdXAgdGhlIGVuZCBvZiB0aGUgY2hhaW4g
Ki8KLQkJCQlpZiAobGVuID4gMCkgewotCQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIGxl
biwgY3ApOwotCQkJCQlTQ1RQX0JVRl9MRU4oKCplbmRvZmNoYWluKSkgKz0gbGVuOwotCQkJCQkv
KiBub3cgd2UgbmVlZCBhbm90aGVyIG9uZSAqLwotCQkJCQlzaXplb2ZjcHkgLT0gbGVuOwotCQkJ
CX0KLQkJCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwg
MSwgTVRfSEVBREVSKTsKLQkJCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQkJCS8qIFdlIGZhaWxlZCAq
LwotCQkJCQlnb3RvIGVycm9yX291dDsKLQkJCQl9Ci0JCQkJU0NUUF9CVUZfTkVYVCgoKmVuZG9m
Y2hhaW4pKSA9IG07Ci0JCQkJKmVuZG9mY2hhaW4gPSBtOwotCQkJCWNwID0gbXRvZCgoKmVuZG9m
Y2hhaW4pLCBjYWRkcl90KTsKLQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIGxlbiwgc2l6ZW9m
Y3B5LCBjcCk7Ci0JCQkJU0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpICs9IHNpemVvZmNweTsK
LQkJCX0KLQkJCXJldHVybiAob3V0Y2hhaW4pOwotCQl9IGVsc2UgewotCQkJLyogY29weSB0aGUg
b2xkIGZhc2hpb24gd2F5ICovCi0JCQlhcHBlbmRjaGFpbiA9IFNDVFBfTV9DT1BZTShjbG9uZWNo
YWluLCAwLCBNX0NPUFlBTEwsIE1fTk9XQUlUKTsKLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwot
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9M
T0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX21iYyhhcHBlbmRjaGFpbiwgU0NUUF9NQlVG
X0lDT1BZKTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0JfQotCWlmIChhcHBlbmRjaGFpbiA9PSBOVUxM
KSB7Ci0JCS8qIGVycm9yICovCi0JCWlmIChvdXRjaGFpbikKLQkJCXNjdHBfbV9mcmVlbShvdXRj
aGFpbik7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWlmIChvdXRjaGFpbikgewotCQkvKiB0YWNr
IG9uIHRvIHRoZSBlbmQgKi8KLQkJaWYgKCplbmRvZmNoYWluICE9IE5VTEwpIHsKLQkJCVNDVFBf
QlVGX05FWFQoKCgqZW5kb2ZjaGFpbikpKSA9IGFwcGVuZGNoYWluOwotCQl9IGVsc2UgewotCQkJ
bSA9IG91dGNoYWluOwotCQkJd2hpbGUgKG0pIHsKLQkJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9
PSBOVUxMKSB7Ci0JCQkJCVNDVFBfQlVGX05FWFQobSkgPSBhcHBlbmRjaGFpbjsKLQkJCQkJYnJl
YWs7Ci0JCQkJfQotCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOwotCQkJfQotCQl9Ci0JCS8qCi0J
CSAqIHNhdmUgb2ZmIHRoZSBlbmQgYW5kIHVwZGF0ZSB0aGUgZW5kLWNoYWluCi0JCSAqIHBvc2l0
aW9uCi0JCSAqLwotCQltID0gYXBwZW5kY2hhaW47Ci0JCXdoaWxlIChtKSB7Ci0JCQlpZiAoU0NU
UF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7Ci0JCQkJKmVuZG9mY2hhaW4gPSBtOwotCQkJCWJyZWFr
OwotCQkJfQotCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCX0KLQkJcmV0dXJuIChvdXRjaGFp
bik7Ci0JfSBlbHNlIHsKLQkJLyogc2F2ZSBvZmYgdGhlIGVuZCBhbmQgdXBkYXRlIHRoZSBlbmQt
Y2hhaW4gcG9zaXRpb24gKi8KLQkJbSA9IGFwcGVuZGNoYWluOwotCQl3aGlsZSAobSkgewotCQkJ
aWYgKFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgewotCQkJCSplbmRvZmNoYWluID0gbTsKLQkJ
CQlicmVhazsKLQkJCX0KLQkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOwotCQl9Ci0JCXJldHVybiAo
YXBwZW5kY2hhaW4pOwotCX0KLX0KLQotc3RhdGljIGludAotc2N0cF9tZWRfY2h1bmtfb3V0cHV0
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
LQkJICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSAgICAgIGludCAqbnVt
X291dCwKLQkJICAgICAgaW50ICpyZWFzb25fY29kZSwKLQkJICAgICAgaW50IGNvbnRyb2xfb25s
eSwgaW50IGZyb21fd2hlcmUsCi0JCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93
X2ZpbGxlZCwgaW50IGZyYWdfcG9pbnQsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkgICAgICBTQ1RQX1VO
VVNFRAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgKTsKLQotc3RhdGljIHZvaWQKLXNj
dHBfc2VuZGFsbF9pdGVyYXRvcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHZvaWQgKnB0ciwKLSAgICB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCi17Ci0J
c3RydWN0IHNjdHBfY29weV9hbGwgKmNhOwotCXN0cnVjdCBtYnVmICptOwotCWludCByZXQgPSAw
OwotCWludCBhZGRlZF9jb250cm9sID0gMDsKLQlpbnQgdW5fc2VudCwgZG9fY2h1bmtfb3V0cHV0
ID0gMTsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7Ci0KLQljYSA9IChzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqKXB0cjsKLQlpZiAoY2EtPm0g
PT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWlmIChjYS0+aW5wICE9IGlucCkgewotCQkvKiBU
U05IICovCi0JCXJldHVybjsKLQl9Ci0JaWYgKGNhLT5zbmRsZW4gPiAwKSB7Ci0JCW0gPSBTQ1RQ
X01fQ09QWU0oY2EtPm0sIDAsIE1fQ09QWUFMTCwgTV9OT1dBSVQpOwotCQlpZiAobSA9PSBOVUxM
KSB7Ci0JCQkvKiBjYW4ndCBjb3B5IHNvIHdlIGFyZSBkb25lICovCi0JCQljYS0+Y250X2ZhaWxl
ZCsrOwotCQkJcmV0dXJuOwotCQl9Ci0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VO
QUJMRSkgewotCQkJc2N0cF9sb2dfbWJjKG0sIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNlbmRp
ZgotCX0gZWxzZSB7Ci0JCW0gPSBOVUxMOwotCX0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNi
KTsKLQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJbmV0ID0gc3RjYi0+YXNvYy5hbHRl
cm5hdGU7Ci0JfSBlbHNlIHsKLQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
OwotCX0KLQlpZiAoY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHsKLQkJLyog
QWJvcnQgdGhpcyBhc3NvYyB3aXRoIG0gYXMgdGhlIHVzZXIgZGVmaW5lZCByZWFzb24gKi8KLQkJ
aWYgKG0gIT0gTlVMTCkgewotCQkJU0NUUF9CVUZfUFJFUEVORChtLCBzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpLCBNX05PV0FJVCk7Ci0JCX0gZWxzZSB7Ci0JCQltID0gc2N0cF9nZXRfbWJ1
Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCi0JCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCVNDVFBfQlVGX0xFTiht
KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCX0KLQkJaWYgKG0gIT0gTlVMTCkg
ewotCQkJc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOwotCi0JCQlwaCA9IG10b2QobSwgc3RydWN0
IHNjdHBfcGFyYW1oZHIgKik7Ci0JCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0Vf
VVNFUl9JTklUSUFURURfQUJUKTsKLQkJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucygodWludDE2
X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBjYS0+c25kbGVuKSk7Ci0JCX0KLQkJ
LyogV2UgYWRkIG9uZSBoZXJlIHRvIGtlZXAgdGhlIGFzc29jIGZyb20KLQkJICogZGlzLWFwcGVh
cmluZyBvbiB1cy4KLQkJICovCi0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7Ci0JCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCQkvKiBzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uIGNhbGxzIHNjdHBfZnJl
ZV9hc29jKCkKLQkJICogZnJlZSBhc3NvY2lhdGlvbiB3aWxsIE5PVCBmcmVlIGl0IHNpbmNlIHdl
Ci0JCSAqIGluY3JlbWVudGVkIHRoZSByZWZjbnQgLi4gd2UgZG8gdGhpcyB0byBwcmV2ZW50Ci0J
CSAqIGl0IGJlaW5nIGZyZWVkIGFuZCB0aGluZ3MgZ2V0dGluZyB0cmlja3kgc2luY2UKLQkJICog
d2UgY291bGQgZW5kIHVwIChmcm9tIGZyZWVfYXNvYykgY2FsbGluZyBpbnBjYl9mcmVlCi0JCSAq
IHdoaWNoIHdvdWxkIGdldCBhIHJlY3Vyc2l2ZSBsb2NrIGNhbGwgdG8gdGhlCi0JCSAqIGl0ZXJh
dG9yIGxvY2suLiBCdXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGF0IHRoZQotCQkgKiBzdGNiIHdp
bGwgcmV0dXJuIHRvIHVzIHVuLWxvY2tlZC4uIHNpbmNlIGZyZWVfYXNvYwotCQkgKiByZXR1cm5z
IHdpdGggZWl0aGVyIG5vIFRDQiBvciB0aGUgVENCIHVubG9ja2VkLCB3ZQotCQkgKiBtdXN0IHJl
bG9jay4uIHRvIHVubG9jayBpbiB0aGUgaXRlcmF0b3IgdGltZXIgOi0wCi0JCSAqLwotCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0x
KTsKLQkJZ290byBub19jaHVua19vdXRwdXQ7Ci0JfSBlbHNlIHsKLQkJaWYgKG0pIHsKLQkJCXJl
dCA9IHNjdHBfbXNnX2FwcGVuZChzdGNiLCBuZXQsIG0sCi0JCQkJCSAgICAgICZjYS0+c25kcmN2
LCAxKTsKLQkJfQotCQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JCWlmIChjYS0+c25kcmN2LnNpbmZv
X2ZsYWdzICYgU0NUUF9FT0YpIHsKLQkJCS8qIHNodXRkb3duIHRoaXMgYXNzb2MgKi8KLQkJCWlm
IChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKLQkJCSAgICBUQUlMUV9FTVBUWSgm
YXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkJCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0
Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCkgPT0gMCkgewotCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJ
CQlnb3RvIGFib3J0X2FueXdheTsKLQkJCQl9Ci0JCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1
ZWQgdG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KLQkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKLQkJCQkgICAgKFNDVFBfR0VUX1NU
QVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCi0JCQkJICAgIChT
Q1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgewot
CQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLwotCQkJ
CQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB7Ci0JCQkJCQlT
Q1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQkJCX0KLQkJCQkJU0NU
UF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKLQkJCQkJU0NUUF9D
TEVBUl9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOwotCQkJCQlz
Y3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCQkJc2N0cF9zZW5kX3NodXRk
b3duKHN0Y2IsIG5ldCk7Ci0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NI
VVRET1dOLCBzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSBuZXQpOwotCQkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBzdGNiLT5zY3RwX2VwLCBz
dGNiLAotCQkJCQkJCSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJCQkJYWRkZWRfY29u
dHJvbCA9IDE7Ci0JCQkJCWRvX2NodW5rX291dHB1dCA9IDA7Ci0JCQkJfQotCQkJfSBlbHNlIHsK
LQkJCQkvKgotCQkJCSAqIHdlIHN0aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEgdG8gc2VuZCwg
c28gc2V0Ci0JCQkJICogU0hVVERPV05fUEVORElORwotCQkJCSAqLwotCQkJCS8qCi0JCQkJICog
WFhYIHNvY2tldHMgZHJhZnQgc2F5cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQotCQkJCSAqIHNl
bnQgd2l0aCBubyBkYXRhLiAgY3VycmVudGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKLQkJCQkgKiBk
YXRhIHRvIGJlIHNlbnQgZmlyc3QgYW5kIG1vdmUgdG8KLQkJCQkgKiBTSFVURE9XTi1QRU5ESU5H
Ci0JCQkJICovCi0JCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQpICYmCi0JCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NU
QVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
IT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKLQkJCQkJaWYgKCgqYXNvYy0+c3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7
Ci0JCQkJCQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQ7Ci0JCQkJ
CX0KLQkJCQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOwotCQkJ
CQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCQkJCSAgICBUQUlMUV9F
TVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBf
U1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKLQkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0J
CQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0JCQkJCWFib3J0X2FueXdheToK
LQkJCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCi0JCQkJCQkgICAgICAgICAiJXM6JWQg
YXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKLQkJCQkJCW9wX2VyciA9IHNj
dHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwK
LQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKLQkJCQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29j
aWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkJCQkgIG9wX2VyciwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEp
OwotCQkJCQkJZ290byBub19jaHVua19vdXRwdXQ7Ci0JCQkJCX0KLQkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwK
LQkJCQkJCQkgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0JCQkJfQotCQkJfQotCi0JCX0K
LQl9Ci0JdW5fc2VudCA9ICgoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0
Y2ItPmFzb2MudG90YWxfZmxpZ2h0KSArCi0JCSAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9j
bnQgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpKTsKLQotCWlmICgoc2N0cF9pc19m
ZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAmJgotCSAgICAoc3RjYi0+
YXNvYy50b3RhbF9mbGlnaHQgPiAwKSAmJgotCSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFz
b2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgewotCQlkb19jaHVua19vdXRw
dXQgPSAwOwotCX0KLQlpZiAoZG9fY2h1bmtfb3V0cHV0KQotCQlzY3RwX2NodW5rX291dHB1dChp
bnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7
Ci0JZWxzZSBpZiAoYWRkZWRfY29udHJvbCkgewotCQlpbnQgbnVtX291dCwgcmVhc29uLCBub3df
ZmlsbGVkID0gMDsKLQkJc3RydWN0IHRpbWV2YWwgbm93OwotCQlpbnQgZnJhZ19wb2ludDsKLQot
CQlmcmFnX3BvaW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0J
CSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29jLCAmbnVt
X291dCwKLQkJCQkgICAgICAmcmVhc29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19w
b2ludCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0gbm9fY2h1bmtfb3V0cHV0OgotCWlmIChy
ZXQpIHsKLQkJY2EtPmNudF9mYWlsZWQrKzsKLQl9IGVsc2UgewotCQljYS0+Y250X3NlbnQrKzsK
LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NlbmRhbGxfY29tcGxldGVzKHZvaWQgKnB0ciwg
dWludDMyX3QgdmFsIFNDVFBfVU5VU0VEKQotewotCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsK
LQotCWNhID0gKHN0cnVjdCBzY3RwX2NvcHlfYWxsICopcHRyOwotCS8qCi0JICogRG8gYSBub3Rp
ZnkgaGVyZT8gS2FjaGVvbmcgc3VnZ2VzdHMgdGhhdCB0aGUgbm90aWZ5IGJlIGRvbmUgYXQKLQkg
KiB0aGUgc2VuZCB0aW1lLi4gc28geW91IHdvdWxkIHB1c2ggdXAgYSBub3RpZmljYXRpb24gaWYg
YW55IHNlbmQKLQkgKiBmYWlsZWQuIERvbid0IGtub3cgaWYgdGhpcyBpcyBmZWFzaWJsZSBzaW5j
ZSB0aGUgb25seSBmYWlsdXJlcyB3ZQotCSAqIGhhdmUgaXMgIm1lbW9yeSIgcmVsYXRlZCBhbmQg
aWYgeW91IGNhbm5vdCBnZXQgYW4gbWJ1ZiB0byBzZW5kCi0JICogdGhlIGRhdGEgeW91IHN1cmVs
eSBjYW4ndCBnZXQgYW4gbWJ1ZiB0byBzZW5kIHVwIHRvIG5vdGlmeSB0aGUKLQkgKiB1c2VyIHlv
dSBjYW4ndCBzZW5kIHRoZSBkYXRhIDotPgotCSAqLwotCi0JLyogbm93IGZyZWUgZXZlcnl0aGlu
ZyAqLwotCXNjdHBfbV9mcmVlbShjYS0+bSk7Ci0JU0NUUF9GUkVFKGNhLCBTQ1RQX01fQ09QWUFM
KTsKLX0KLQotc3RhdGljIHN0cnVjdCBtYnVmICoKLXNjdHBfY29weV9vdXRfYWxsKHN0cnVjdCB1
aW8gKnVpbywgaW50IGxlbikKLXsKLQlzdHJ1Y3QgbWJ1ZiAqcmV0LCAqYXQ7Ci0JaW50IGxlZnQs
IHdpbGxjcHksIGNhbmNweSwgZXJyb3I7Ci0KLQlyZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
TUNMQllURVMsIDAsIE1fV0FJVE9LLCAxLCBNVF9EQVRBKTsKLQlpZiAocmV0ID09IE5VTEwpIHsK
LQkJLyogVFNOSCAqLwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlsZWZ0ID0gbGVuOwotCVNDVFBf
QlVGX0xFTihyZXQpID0gMDsKLQkvKiBzYXZlIHNwYWNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFk
ZXIgKi8KLQljYW5jcHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShyZXQpOwotCXdpbGxjcHkgPSBt
aW4oY2FuY3B5LCBsZWZ0KTsKLQlhdCA9IHJldDsKLQl3aGlsZSAobGVmdCA+IDApIHsKLQkJLyog
QWxpZ24gZGF0YSB0byB0aGUgZW5kICovCi0JCWVycm9yID0gdWlvbW92ZShtdG9kKGF0LCBjYWRk
cl90KSwgd2lsbGNweSwgdWlvKTsKLQkJaWYgKGVycm9yKSB7Ci0JZXJyX291dF9ub3c6Ci0JCQlz
Y3RwX21fZnJlZW0oYXQpOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlTQ1RQX0JVRl9MRU4o
YXQpID0gd2lsbGNweTsKLQkJU0NUUF9CVUZfTkVYVF9QS1QoYXQpID0gU0NUUF9CVUZfTkVYVChh
dCkgPSAwOwotCQlsZWZ0IC09IHdpbGxjcHk7Ci0JCWlmIChsZWZ0ID4gMCkgewotCQkJU0NUUF9C
VUZfTkVYVChhdCkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDEs
IE1UX0RBVEEpOwotCQkJaWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5VTEwpIHsKLQkJCQlnb3Rv
IGVycl9vdXRfbm93OwotCQkJfQotCQkJYXQgPSBTQ1RQX0JVRl9ORVhUKGF0KTsKLQkJCVNDVFBf
QlVGX0xFTihhdCkgPSAwOwotCQkJY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UoYXQpOwot
CQkJd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOwotCQl9Ci0JfQotCXJldHVybiAocmV0KTsK
LX0KLQotc3RhdGljIGludAotc2N0cF9zZW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCB1aW8gKnVpbywgc3RydWN0IG1idWYgKm0sCi0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5m
byAqc3JjdikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKLQotCVND
VFBfTUFMTE9DKGNhLCBzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqLCBzaXplb2Yoc3RydWN0IHNjdHBf
Y29weV9hbGwpLAotCQkgICAgU0NUUF9NX0NPUFlBTCk7Ci0JaWYgKGNhID09IE5VTEwpIHsKLQkJ
c2N0cF9tX2ZyZWVtKG0pOwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQot
CW1lbXNldChjYSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NvcHlfYWxsKSk7Ci0KLQljYS0+aW5w
ID0gaW5wOwotCWlmIChzcmN2KSB7Ci0JCW1lbWNweSgmY2EtPnNuZHJjdiwgc3Jjdiwgc2l6ZW9m
KHN0cnVjdCBzY3RwX25vbnBhZF9zbmRyY3ZpbmZvKSk7Ci0JfQotCS8qCi0JICogdGFrZSBvZmYg
dGhlIHNlbmRhbGwgZmxhZywgaXQgd291bGQgYmUgYmFkIGlmIHdlIGZhaWxlZCB0byBkbwotCSAq
IHRoaXMgOi0wCi0JICovCi0JY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmPSB+U0NUUF9TRU5EQUxM
OwotCS8qIGdldCBsZW5ndGggYW5kIG1idWYgY2hhaW4gKi8KLQlpZiAodWlvKSB7Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQljYS0+c25kbGVu
ID0gdWlvLT51aW9fcmVzaWQ7Ci0jZWxzZQotCQljYS0+c25kbGVuID0gdWlvX3Jlc2lkKHVpbyk7
Ci0jZW5kaWYKLSNlbHNlCi0JCWNhLT5zbmRsZW4gPSAoaW50KXVpby0+dWlvX3Jlc2lkOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lO
UF9TTyhpbnApLCAwKTsKLSNlbmRpZgotCQljYS0+bSA9IHNjdHBfY29weV9vdXRfYWxsKHVpbywg
Y2EtPnNuZGxlbik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCVNDVFBfU09DS0VUX0xPQ0so
U0NUUF9JTlBfU08oaW5wKSwgMCk7Ci0jZW5kaWYKLQkJaWYgKGNhLT5tID09IE5VTEwpIHsKLQkJ
CVNDVFBfRlJFRShjYSwgU0NUUF9NX0NPUFlBTCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJcmV0dXJu
IChFTk9NRU0pOwotCQl9Ci0JfSBlbHNlIHsKLQkJLyogR2F0aGVyIHRoZSBsZW5ndGggb2YgdGhl
IHNlbmQgKi8KLQkJc3RydWN0IG1idWYgKm1hdDsKLQotCQljYS0+c25kbGVuID0gMDsKLQkJZm9y
IChtYXQgPSBtOyBtYXQ7IG1hdCA9IFNDVFBfQlVGX05FWFQobWF0KSkgewotCQkJY2EtPnNuZGxl
biArPSBTQ1RQX0JVRl9MRU4obWF0KTsKLQkJfQotCX0KLQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0
ZXJhdG9yKE5VTEwsIHNjdHBfc2VuZGFsbF9pdGVyYXRvciwgTlVMTCwKLQkJCQkgICAgIFNDVFBf
UENCX0FOWV9GTEFHUywgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTLAotCQkJCSAgICAgU0NUUF9BU09D
X0FOWV9TVEFURSwKLQkJCQkgICAgICh2b2lkICopY2EsIDAsCi0JCQkJICAgICBzY3RwX3NlbmRh
bGxfY29tcGxldGVzLCBpbnAsIDEpOwotCWlmIChyZXQpIHsKLQkJU0NUUF9QUklOVEYoIkZhaWxl
ZCB0byBpbml0aWF0ZSBpdGVyYXRvciBmb3Igc2VuZGFsbFxuIik7Ci0JCVNDVFBfRlJFRShjYSwg
U0NUUF9NX0NPUFlBTCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOwotCQlyZXR1cm4gKEVGQVVMVCk7
Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLQotdm9pZAotc2N0cF90b3NzX29sZF9jb29raWVzKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0J
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKLQotCVRBSUxRX0ZPUkVBQ0hfU0FG
RShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewotCQlp
ZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgewotCQkJVEFJTFFf
UkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQkJCWlm
IChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRh
dGEgPSBOVUxMOwotCQkJfQotCQkJYXNvYy0+Y3RybF9xdWV1ZV9jbnQtLTsKLQkJCXNjdHBfZnJl
ZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0KLX0KLQot
dm9pZAotc2N0cF90b3NzX29sZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiKQotewotCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNo
aywgKm5jaGs7Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICphY3A7Ci0KLQlhc29jID0gJnN0
Y2ItPmFzb2M7Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1
ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJLyogZmluZCBTQ1RQX0FTQ09ORiBjaHVuayBpbiBx
dWV1ZSAqLwotCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpIHsKLQkJ
CWlmIChjaGstPmRhdGEpIHsKLQkJCQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBf
YXNjb25mX2NodW5rICopOwotCQkJCWlmIChTQ1RQX1RTTl9HVChudG9obChhY3AtPnNlcmlhbF9u
dW1iZXIpLCBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCkpIHsKLQkJCQkJLyogTm90IEFja2Vk
IHlldCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlUQUlMUV9SRU1PVkUoJmFzb2Mt
PmFzY29uZl9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlpZiAoY2hrLT5kYXRhKSB7
Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJ
CX0KLQkJCWFzb2MtPmN0cmxfcXVldWVfY250LS07Ci0JCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCX0KLQl9Ci19Ci0KLQotc3RhdGljIHZvaWQK
LXNjdHBfY2xlYW5fdXBfZGF0YWxpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipk
YXRhX2xpc3QsCi0gICAgaW50IGJ1bmRsZV9hdCwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Ci17Ci0JaW50IGk7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwotCi0JZm9yIChpID0g
MDsgaSA8IGJ1bmRsZV9hdDsgaSsrKSB7Ci0JCS8qIG9mZiBvZiB0aGUgc2VuZCBxdWV1ZSAqLwot
CQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNlbmRfcXVldWUsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0
KTsKLQkJYXNvYy0+c2VuZF9xdWV1ZV9jbnQtLTsKLQkJaWYgKGkgPiAwKSB7Ci0JCQkvKgotCQkJ
ICogQW55IGNodW5rIE5PVCAwIHlvdSB6YXAgdGhlIHRpbWUgY2h1bmsgMCBnZXRzCi0JCQkgKiB6
YXBwZWQgb3Igc2V0IGJhc2VkIG9uIGlmIGEgUlRPIG1lYXN1cm1lbnQgaXMKLQkJCSAqIG5lZWRl
ZC4KLQkJCSAqLwotCQkJZGF0YV9saXN0W2ldLT5kb19ydHQgPSAwOwotCQl9Ci0JCS8qIHJlY29y
ZCB0aW1lICovCi0JCWRhdGFfbGlzdFtpXS0+c2VudF9yY3ZfdGltZSA9IG5ldC0+bGFzdF9zZW50
X3RpbWU7Ci0JCWRhdGFfbGlzdFtpXS0+cmVjLmRhdGEuY3duZF9hdF9zZW5kID0gbmV0LT5jd25k
OwotCQlkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IGRhdGFfbGlzdFtp
XS0+cmVjLmRhdGEudHNuOwotCQlpZiAoZGF0YV9saXN0W2ldLT53aG9UbyA9PSBOVUxMKSB7Ci0J
CQlkYXRhX2xpc3RbaV0tPndob1RvID0gbmV0OwotCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVm
X2NvdW50LCAxKTsKLQkJfQotCQkvKiBvbiB0byB0aGUgc2VudCBxdWV1ZSAqLwotCQl0cDEgPSBU
QUlMUV9MQVNUKCZhc29jLT5zZW50X3F1ZXVlLCBzY3RwY2h1bmtfbGlzdGhlYWQpOwotCQlpZiAo
KHRwMSkgJiYgU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGRhdGFfbGlzdFtpXS0+cmVj
LmRhdGEudHNuKSkgewotCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHBwOwotCi0JCQkvKiBu
ZWVkIHRvIG1vdmUgYmFjayAqLwotCQliYWNrX3VwX21vcmU6Ci0JCQl0cHAgPSBUQUlMUV9QUkVW
KHRwMSwgc2N0cGNodW5rX2xpc3RoZWFkLCBzY3RwX25leHQpOwotCQkJaWYgKHRwcCA9PSBOVUxM
KSB7Ci0JCQkJVEFJTFFfSU5TRVJUX0JFRk9SRSh0cDEsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0
KTsKLQkJCQlnb3RvIGFsbF9kb25lOwotCQkJfQotCQkJdHAxID0gdHBwOwotCQkJaWYgKFNDVFBf
VFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCBkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLnRzbikpIHsK
LQkJCQlnb3RvIGJhY2tfdXBfbW9yZTsKLQkJCX0KLQkJCVRBSUxRX0lOU0VSVF9BRlRFUigmYXNv
Yy0+c2VudF9xdWV1ZSwgdHAxLCBkYXRhX2xpc3RbaV0sIHNjdHBfbmV4dCk7Ci0JCX0gZWxzZSB7
Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c2VudF9xdWV1ZSwKLQkJCQkJICBkYXRhX2xp
c3RbaV0sCi0JCQkJCSAgc2N0cF9uZXh0KTsKLQkJfQotCWFsbF9kb25lOgotCQkvKiBUaGlzIGRv
ZXMgbm90IGxvd2VyIHVudGlsIHRoZSBjdW0tYWNrIHBhc3NlcyBpdCAqLwotCQlhc29jLT5zZW50
X3F1ZXVlX2NudCsrOwotCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPD0gMCkgJiYKLQkJICAgIChh
c29jLT50b3RhbF9mbGlnaHQgPT0gMCkgJiYKLQkJICAgIChidW5kbGVfYXQgPT0gMSkpIHsKLQkJ
CS8qIE1hcmsgdGhlIGNodW5rIGFzIGJlaW5nIGEgd2luZG93IHByb2JlICovCi0JCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc193aW5kb3dwcm9iZWQpOwotCQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19F
TkFCTEVECi0JCXNjdHBfYXVkaXRfbG9nKDB4QzIsIDMpOwotI2VuZGlmCi0JCWRhdGFfbGlzdFtp
XS0+c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKLQkJZGF0YV9saXN0W2ldLT5zbmRfY291bnQg
PSAxOwotCQlkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKLQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVAsCi0J
CQkJICAgICAgIGRhdGFfbGlzdFtpXS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCSAgICAgICBk
YXRhX2xpc3RbaV0tPmJvb2tfc2l6ZSwKLQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3Qp
ZGF0YV9saXN0W2ldLT53aG9UbywKLQkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50
c24pOwotCQl9Ci0JCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UoZGF0YV9saXN0W2ldKTsKLQkJ
c2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKLQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxF
KSB7Ci0JCQlzY3RwX2xvZ19yd25kKFNDVFBfREVDUkVBU0VfUEVFUl9SV05ELAotCQkJICAgICAg
YXNvYy0+cGVlcnNfcnduZCwgZGF0YV9saXN0W2ldLT5zZW5kX3NpemUsIFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9wZWVyX2NodW5rX29oKSk7Ci0JCX0KLQkJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBf
c2JzcGFjZV9zdWIoYXNvYy0+cGVlcnNfcnduZCwKLQkJCQkJCSAgICAodWludDMyX3QpIChkYXRh
X2xpc3RbaV0tPnNlbmRfc2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29o
KSkpOwotCQlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0
cF9zd3Nfc2VuZGVyKSB7Ci0JCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLwotCQkJYXNv
Yy0+cGVlcnNfcnduZCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKGFzb2MtPmNjX2Z1bmN0aW9ucy5zY3Rw
X2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkgewotCQkoKmFzb2MtPmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkoc3RjYiwgbmV0KTsKLQl9Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2NsZWFuX3VwX2N0bChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VO
VVNFRAotI2VuZGlmCi0pCi17Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsK
LQotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNj
dHBfbmV4dCwgbmNoaykgewotCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VM
RUNUSVZFX0FDSykgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NF
TEVDVElWRV9BQ0spIHx8CS8qIEVZICovCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9IRUFSVEJFQVRfUkVRVUVTVCkgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9
PSBTQ1RQX0hFQVJUQkVBVF9BQ0spIHx8Ci0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9GT1JXQVJEX0NVTV9UU04pIHx8Ci0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9TSFVURE9XTikgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NI
VVRET1dOX0FDSykgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJB
VElPTl9FUlJPUikgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1BBQ0tF
VF9EUk9QUEVEKSB8fAotCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lF
X0FDSykgfHwKLQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9DV1IpIHx8
Ci0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkZfQUNLKSkgewotCQkJ
LyogU3RyYXkgY2h1bmtzIG11c3QgYmUgY2xlYW5lZCB1cCAqLwotCWNsZWFuX3VwX2FueXdheToK
LQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4
dCk7Ci0JCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0J
CQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJCWFzb2MtPmN0cmxfcXVldWVfY250LS07Ci0J
CQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pCi0JCQkJ
YXNvYy0+ZndkX3Rzbl9jbnQtLTsKLQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29f
bG9ja2VkKTsKLQkJfSBlbHNlIGlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NUUkVB
TV9SRVNFVCkgewotCQkJLyogc3BlY2lhbCBoYW5kbGluZywgd2UgbXVzdCBsb29rIGludG8gdGhl
IHBhcmFtICovCi0JCQlpZiAoY2hrICE9IGFzb2MtPnN0cl9yZXNldCkgewotCQkJCWdvdG8gY2xl
YW5fdXBfYW55d2F5OwotCQkJfQotCQl9Ci0JfQotfQotCi1zdGF0aWMgdWludDMyX3QKLXNjdHBf
Y2FuX3dlX3NwbGl0X3RoaXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBsZW5ndGgs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNwYWNlX2xlZnQsIHVpbnQzMl90IGZy
YWdfcG9pbnQsIGludCBlZW9yX29uKQotewotCS8qIE1ha2UgYSBkZWNpc2lvbiBvbiBpZiBJIHNo
b3VsZCBzcGxpdCBhCi0JICogbXNnIGludG8gbXVsdGlwbGUgcGFydHMuIFRoaXMgaXMgb25seSBh
c2tlZCBvZgotCSAqIGluY29tcGxldGUgbWVzc2FnZXMuCi0JICovCi0JaWYgKGVlb3Jfb24pIHsK
LQkJLyogSWYgd2UgYXJlIGRvaW5nIEVFT1Igd2UgbmVlZCB0byBhbHdheXMgc2VuZAotCQkgKiBp
dCBpZiBpdHMgdGhlIGVudGlyZSB0aGluZywgc2luY2UgaXQgbWlnaHQKLQkJICogYmUgYWxsIHRo
ZSBndXkgaXMgcHV0dGluZyBpbiB0aGUgaG9wcGVyLgotCQkgKi8KLQkJaWYgKHNwYWNlX2xlZnQg
Pj0gbGVuZ3RoKSB7Ci0JCQkvKi0KLQkJCSAqIElmIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZywK
LQkJCSAqIHdlIGdldCBhbm90aGVyIGNoYW5jZSB3aGVuIHRoZSBzYWNrCi0JCQkgKiBhcnJpdmVz
IHRvIHRyYW5zbWl0IC0gd2FpdCBmb3IgbW9yZSBkYXRhCi0JCQkgKi8KLQkJCWlmIChzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodCA9PSAwKSB7Ci0JCQkJLyogSWYgbm90aGluZyBpcyBpbiBmbGlnaHQs
IHdlIHplcm8KLQkJCQkgKiB0aGUgcGFja2V0IGNvdW50ZXIuCi0JCQkJICovCi0JCQkJcmV0dXJu
IChsZW5ndGgpOwotCQkJfQotCQkJcmV0dXJuICgwKTsKLQotCQl9IGVsc2UgewotCQkJLyogWW91
IGNhbiBmaWxsIHRoZSByZXN0ICovCi0JCQlyZXR1cm4gKHNwYWNlX2xlZnQpOwotCQl9Ci0JfQot
CS8qLQotCSAqIEZvciB0aG9zZSBzdHJhbmdlIGZvbGsgdGhhdCBtYWtlIHRoZSBzZW5kIGJ1ZmZl
cgotCSAqIHNtYWxsZXIgdGhhbiBvdXIgZnJhZ21lbnRhdGlvbiBwb2ludCwgd2UgY2FuJ3QKLQkg
KiBnZXQgYSBmdWxsIG1zZyBpbiBzbyB3ZSBoYXZlIHRvIGFsbG93IHNwbGl0dGluZy4KLQkgKi8K
LQlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0cF9zb2NrZXQpIDwgZnJhZ19wb2ludCkg
ewotCQlyZXR1cm4gKGxlbmd0aCk7Ci0JfQotCWlmICgobGVuZ3RoIDw9IHNwYWNlX2xlZnQpIHx8
Ci0JICAgICgobGVuZ3RoIC0gc3BhY2VfbGVmdCkgPCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWlu
X3Jlc2lkdWFsKSkpIHsKLQkJLyogU3ViLW9wdGltaWFsIHJlc2lkdWFsIGRvbid0IHNwbGl0IGlu
IG5vbi1lZW9yIG1vZGUuICovCi0JCXJldHVybiAoMCk7Ci0JfQotCS8qIElmIHdlIHJlYWNoIGhl
cmUgbGVuZ3RoIGlzIGxhcmdlcgotCSAqIHRoYW4gdGhlIHNwYWNlX2xlZnQuIERvIHdlIHdpc2gg
dG8gc3BsaXQKLQkgKiBpdCBmb3IgdGhlIHNha2Ugb2YgcGFja2V0IHB1dHRpbmcgdG9nZXRoZXI/
Ci0JICovCi0JaWYgKHNwYWNlX2xlZnQgPj0gbWluKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5f
c3BsaXRfcG9pbnQpLCBmcmFnX3BvaW50KSkgewotCQkvKiBJdHMgb2sgdG8gc3BsaXQgaXQgKi8K
LQkJcmV0dXJuIChtaW4oc3BhY2VfbGVmdCwgZnJhZ19wb2ludCkpOwotCX0KLQkvKiBOb3BlLCBj
YW4ndCBzcGxpdCAqLwotCXJldHVybiAoMCk7Ci19Ci0KLXN0YXRpYyB1aW50MzJfdAotc2N0cF9t
b3ZlX3RvX291dHF1ZXVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLAotICAgICAgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHNwYWNlX2xlZnQsCi0gICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZnJh
Z19wb2ludCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKmdpdmV1cCwKLSAgICAgICAgICAg
ICAgICAgICAgICBpbnQgZWVvcl9tb2RlLAotICAgICAgICAgICAgICAgICAgICAgIGludCAqYmFp
bCwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAgICAg
ICAgICAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0JKQotewotCS8qIE1vdmUgZnJvbSB0aGUgc3Ry
ZWFtIHRvIHRoZSBzZW5kX3F1ZXVlIGtlZXBpbmcgdHJhY2sgb2YgdGhlIHRvdGFsICovCi0Jc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3Bl
bmRpbmcgKnNwOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9k
YXRhX2NodW5rICpkY2hraD1OVUxMOwotCXN0cnVjdCBzY3RwX2lkYXRhX2NodW5rICpuZGNoa2g9
TlVMTDsKLQl1aW50MzJfdCB0b19tb3ZlLCBsZW5ndGg7Ci0JaW50IGxlYWRpbmc7Ci0JdWludDhf
dCByY3ZfZmxhZ3MgPSAwOwotCXVpbnQ4X3Qgc29tZV90YWtlbjsKLQl1aW50OF90IHNlbmRfbG9j
a191cCA9IDA7Ci0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQlhc29jID0gJnN0Y2It
PmFzb2M7Ci1vbmVfbW9yZV90aW1lOgotCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0Jc3Ag
PSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOwotCWlmIChzcCA9PSBOVUxMKSB7Ci0JCWlm
IChzZW5kX2xvY2tfdXAgPT0gMCkgewotCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJ
c2VuZF9sb2NrX3VwID0gMTsKLQkJfQotCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1
ZSk7Ci0JCWlmIChzcCkgewotCQkJZ290byBvbmVfbW9yZV90aW1lOwotCQl9Ci0JCWlmICgoc2N0
cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VP
UikgPT0gMCkgJiYKLQkJICAgIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSAmJgot
CQkgICAgKHN0cnEtPmxhc3RfbXNnX2luY29tcGxldGUpKSB7Ci0JCQlTQ1RQX1BSSU5URigiSHVo
PyBTdHJlYW06JWQgbG1faW5fYz0lZCBidXQgcXVldWUgaXMgTlVMTFxuIiwKLQkJCSAgICAgICAg
ICAgIHN0cnEtPnNpZCwKLQkJCSAgICAgICAgICAgIHN0cnEtPmxhc3RfbXNnX2luY29tcGxldGUp
OwotCQkJc3RycS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0JCX0KLQkJdG9fbW92ZSA9IDA7
Ci0JCWlmIChzZW5kX2xvY2tfdXApIHsKLQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwot
CQkJc2VuZF9sb2NrX3VwID0gMDsKLQkJfQotCQlnb3RvIG91dF9vZjsKLQl9Ci0JaWYgKChzcC0+
bXNnX2lzX2NvbXBsZXRlKSAmJiAoc3AtPmxlbmd0aCA9PSAwKSkgewotCQlpZiAoc3AtPnNlbmRl
cl9hbGxfZG9uZSkgewotCQkJLyogV2UgYXJlIGRvaW5nIGRpZmZlcmVkIGNsZWFudXAuIExhc3QK
LQkJCSAqIHRpbWUgdGhyb3VnaCB3aGVuIHdlIHRvb2sgYWxsIHRoZSBkYXRhCi0JCQkgKiB0aGUg
c2VuZGVyX2FsbF9kb25lIHdhcyBub3Qgc2V0LgotCQkJICovCi0JCQlpZiAoKHNwLT5wdXRfbGFz
dF9vdXQgPT0gMCkgJiYgKHNwLT5kaXNjYXJkX3Jlc3QgPT0gMCkpIHsKLQkJCQlTQ1RQX1BSSU5U
RigiR2FrLCBwdXQgb3V0IGVudGlyZSBtc2cgd2l0aCBOTyBlbmQhLTFcbiIpOwotCQkJCVNDVFBf
UFJJTlRGKCJzZW5kZXJfZG9uZTolZCBsZW46JWQgbXNnX2NvbXA6JWQgcHV0X2xhc3Rfb3V0OiVk
IHNlbmRfbG9jazolZFxuIiwKLQkJCQkgICAgICAgICAgICBzcC0+c2VuZGVyX2FsbF9kb25lLAot
CQkJCSAgICAgICAgICAgIHNwLT5sZW5ndGgsCi0JCQkJICAgICAgICAgICAgc3AtPm1zZ19pc19j
b21wbGV0ZSwKLQkJCQkgICAgICAgICAgICBzcC0+cHV0X2xhc3Rfb3V0LAotCQkJCSAgICAgICAg
ICAgIHNlbmRfbG9ja191cCk7Ci0JCQl9Ci0JCQlpZiAoKFRBSUxRX05FWFQoc3AsIG5leHQpID09
IE5VTEwpICYmIChzZW5kX2xvY2tfdXAgID09IDApKSB7Ci0JCQkJU0NUUF9UQ0JfU0VORF9MT0NL
KHN0Y2IpOwotCQkJCXNlbmRfbG9ja191cCA9IDE7Ci0JCQl9Ci0JCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJCVRBSUxRX1JFTU9WRSgmc3RycS0+
b3V0cXVldWUsIHNwLCBuZXh0KTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nf
cmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIHN0cnEsIHNwLCBzZW5kX2xvY2tfdXApOwot
CQkJaWYgKChzdHJxLT5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJ
ICAgIChzdHJxLT5jaHVua3Nfb25fcXVldWVzID09IDApICYmCi0JCQkgICAgVEFJTFFfRU1QVFko
JnN0cnEtPm91dHF1ZXVlKSkgewotCQkJCXN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCA9IDE7Ci0J
CQl9Ci0JCQlpZiAoc3AtPm5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcC0+bmV0
KTsKLQkJCQlzcC0+bmV0ID0gTlVMTDsKLQkJCX0KLQkJCWlmIChzcC0+ZGF0YSkgewotCQkJCXNj
dHBfbV9mcmVlbShzcC0+ZGF0YSk7Ci0JCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJfQotCQkJc2N0
cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOwotCQkJLyogd2UgY2FuJ3QgYmUg
bG9ja2VkIHRvIGl0ICovCi0JCQlpZiAoc2VuZF9sb2NrX3VwKSB7Ci0JCQkJU0NUUF9UQ0JfU0VO
RF9VTkxPQ0soc3RjYik7Ci0JCQkJc2VuZF9sb2NrX3VwID0gMDsKLQkJCX0KLQkJCS8qIGJhY2sg
dG8gZ2V0IHRoZSBuZXh0IG1zZyAqLwotCQkJZ290byBvbmVfbW9yZV90aW1lOwotCQl9IGVsc2Ug
ewotCQkJLyogc2VuZGVyIGp1c3QgZmluaXNoZWQgdGhpcyBidXQKLQkJCSAqIHN0aWxsIGhvbGRz
IGEgcmVmZXJlbmNlCi0JCQkgKi8KLQkJCSpnaXZldXAgPSAxOwotCQkJdG9fbW92ZSA9IDA7Ci0J
CQlnb3RvIG91dF9vZjsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGlzIHRoZXJlIHNvbWUgdG8gZ2V0
ICovCi0JCWlmIChzcC0+bGVuZ3RoID09IDApIHsKLQkJCS8qIG5vICovCi0JCQkqZ2l2ZXVwID0g
MTsKLQkJCXRvX21vdmUgPSAwOwotCQkJZ290byBvdXRfb2Y7Ci0JCX0gZWxzZSBpZiAoc3AtPmRp
c2NhcmRfcmVzdCkgewotCQkJaWYgKHNlbmRfbG9ja191cCA9PSAwKSB7Ci0JCQkJU0NUUF9UQ0Jf
U0VORF9MT0NLKHN0Y2IpOwotCQkJCXNlbmRfbG9ja191cCA9IDE7Ci0JCQl9Ci0JCQkvKiBXaGFj
ayBkb3duIHRoZSBzaXplICovCi0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnRv
dGFsX291dHB1dF9xdWV1ZV9zaXplLCBzcC0+bGVuZ3RoKTsKLQkJCWlmICgoc3RjYi0+c2N0cF9z
b2NrZXQgIT0gTlVMTCkgJiYKLQkJCSAgICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSkgewotCQkJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MsIHNwLT5sZW5ndGgpOwotCQkJ
fQotCQkJaWYgKHNwLT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKLQkJCQlz
cC0+ZGF0YSA9IE5VTEw7Ci0JCQkJc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0JCQl9Ci0JCQlzcC0+
bGVuZ3RoID0gMDsKLQkJCXNwLT5zb21lX3Rha2VuID0gMTsKLQkJCSpnaXZldXAgPSAxOwotCQkJ
dG9fbW92ZSA9IDA7Ci0JCQlnb3RvIG91dF9vZjsKLQkJfQotCX0KLQlzb21lX3Rha2VuID0gc3At
PnNvbWVfdGFrZW47Ci1yZV9sb29rOgotCWxlbmd0aCA9IHNwLT5sZW5ndGg7Ci0JaWYgKHNwLT5t
c2dfaXNfY29tcGxldGUpIHsKLQkJLyogVGhlIG1lc3NhZ2UgaXMgY29tcGxldGUgKi8KLQkJdG9f
bW92ZSA9IG1pbihsZW5ndGgsIGZyYWdfcG9pbnQpOwotCQlpZiAodG9fbW92ZSA9PSBsZW5ndGgp
IHsKLQkJCS8qIEFsbCBvZiBpdCBmaXRzIGluIHRoZSBNVFUgKi8KLQkJCWlmIChzcC0+c29tZV90
YWtlbikgewotCQkJCXJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfTEFTVF9GUkFHOwotCQkJfSBlbHNl
IHsKLQkJCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX05PVF9GUkFHOwotCQkJfQotCQkJc3AtPnB1
dF9sYXN0X291dCA9IDE7Ci0JCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9TQUNLX0lNTUVE
SUFURUxZKSB7Ci0JCQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZOwot
CQkJfQotCQl9IGVsc2UgewotCQkJLyogTm90IGFsbCBvZiBpdCBmaXRzLCB3ZSBmcmFnbWVudCAq
LwotCQkJaWYgKHNwLT5zb21lX3Rha2VuID09IDApIHsKLQkJCQlyY3ZfZmxhZ3MgfD0gU0NUUF9E
QVRBX0ZJUlNUX0ZSQUc7Ci0JCQl9Ci0JCQlzcC0+c29tZV90YWtlbiA9IDE7Ci0JCX0KLQl9IGVs
c2UgewotCQl0b19tb3ZlID0gc2N0cF9jYW5fd2Vfc3BsaXRfdGhpcyhzdGNiLCBsZW5ndGgsIHNw
YWNlX2xlZnQsIGZyYWdfcG9pbnQsIGVlb3JfbW9kZSk7Ci0JCWlmICh0b19tb3ZlKSB7Ci0JCQkv
Ki0KLQkJCSAqIFdlIHVzZSBhIHNuYXBzaG90IG9mIGxlbmd0aCBpbiBjYXNlIGl0Ci0JCQkgKiBp
cyBleHBhbmRpbmcgZHVyaW5nIHRoZSBjb21wYXJlLgotCQkJICovCi0JCQl1aW50MzJfdCBsbGVu
OwotCi0JCQlsbGVuID0gbGVuZ3RoOwotCQkJaWYgKHRvX21vdmUgPj0gbGxlbikgewotCQkJCXRv
X21vdmUgPSBsbGVuOwotCQkJCWlmIChzZW5kX2xvY2tfdXAgPT0gMCkgewotCQkJCQkvKi0KLQkJ
CQkJICogV2UgYXJlIHRha2luZyBhbGwgb2YgYW4gaW5jb21wbGV0ZSBtc2cKLQkJCQkJICogdGh1
cyB3ZSBuZWVkIGEgc2VuZCBsb2NrLgotCQkJCQkgKi8KLQkJCQkJU0NUUF9UQ0JfU0VORF9MT0NL
KHN0Y2IpOwotCQkJCQlzZW5kX2xvY2tfdXAgPSAxOwotCQkJCQlpZiAoc3AtPm1zZ19pc19jb21w
bGV0ZSkgewotCQkJCQkJLyogdGhlIHNlbmRlciBmaW5pc2hlZCB0aGUgbXNnICovCi0JCQkJCQln
b3RvIHJlX2xvb2s7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoc3AtPnNvbWVfdGFrZW4g
PT0gMCkgewotCQkJCXJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfRklSU1RfRlJBRzsKLQkJCQlzcC0+
c29tZV90YWtlbiA9IDE7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBOb3RoaW5nIHRvIHRha2Uu
ICovCi0JCQkqZ2l2ZXVwID0gMTsKLQkJCXRvX21vdmUgPSAwOwotCQkJZ290byBvdXRfb2Y7Ci0J
CX0KLQl9Ci0KLQkvKiBJZiB3ZSByZWFjaCBoZXJlLCB3ZSBjYW4gY29weSBvdXQgYSBjaHVuayAq
LwotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewot
CQkvKiBObyBjaHVuayBtZW1vcnkgKi8KLQkJKmdpdmV1cCA9IDE7Ci0JCXRvX21vdmUgPSAwOwot
CQlnb3RvIG91dF9vZjsKLQl9Ci0JLyogU2V0dXAgZm9yIHVub3JkZXJlZCBpZiBuZWVkZWQgYnkg
bG9va2luZwotCSAqIGF0IHRoZSB1c2VyIHNlbnQgaW5mbyBmbGFncy4KLQkgKi8KLQlpZiAoc3At
PnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKLQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFU
QV9VTk9SREVSRUQ7Ci0JfQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tf
aW1tZWRpYXRlbHkpICYmCi0JICAgIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgPT0gU0NU
UF9FT0YpIHsKLQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZOwotCX0K
LQkvKiBjbGVhciBvdXQgdGhlIGNodW5rIGJlZm9yZSBzZXR0aW5nIHVwICovCi0JbWVtc2V0KGNo
aywgMCwgc2l6ZW9mKCpjaGspKTsKLQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IHJjdl9mbGFn
czsKLQotCWlmICh0b19tb3ZlID49IGxlbmd0aCkgewotCQkvKiB3ZSB0aGluayB3ZSBjYW4gc3Rl
YWwgdGhlIHdob2xlIHRoaW5nICovCi0JCWlmICgoc3AtPnNlbmRlcl9hbGxfZG9uZSA9PSAwKSAm
JiAoc2VuZF9sb2NrX3VwID09IDApKSB7Ci0JCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0J
CQlzZW5kX2xvY2tfdXAgPSAxOwotCQl9Ci0JCWlmICh0b19tb3ZlIDwgc3AtPmxlbmd0aCkgewot
CQkJLyogYmFpbCwgaXQgY2hhbmdlZCAqLwotCQkJZ290byBkb250X2RvX2l0OwotCQl9Ci0JCWNo
ay0+ZGF0YSA9IHNwLT5kYXRhOwotCQljaGstPmxhc3RfbWJ1ZiA9IHNwLT50YWlsX21idWY7Ci0J
CS8qIHJlZ2lzdGVyIHRoZSBzdGVhbGluZyAqLwotCQlzcC0+ZGF0YSA9IHNwLT50YWlsX21idWYg
PSBOVUxMOwotCX0gZWxzZSB7Ci0JCXN0cnVjdCBtYnVmICptOwotCWRvbnRfZG9faXQ6Ci0JCWNo
ay0+ZGF0YSA9IFNDVFBfTV9DT1BZTShzcC0+ZGF0YSwgMCwgdG9fbW92ZSwgTV9OT1dBSVQpOwot
CQljaGstPmxhc3RfbWJ1ZiA9IE5VTEw7Ci0JCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQkJ
c3AtPnNvbWVfdGFrZW4gPSBzb21lX3Rha2VuOwotCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwg
Y2hrLCBzb19sb2NrZWQpOwotCQkJKmJhaWwgPSAxOwotCQkJdG9fbW92ZSA9IDA7Ci0JCQlnb3Rv
IG91dF9vZjsKLQkJfQotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCXNjdHBfbG9nX21iYyhjaGstPmRhdGEsIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNlbmRp
ZgotCQkvKiBQdWxsIG9mZiB0aGUgZGF0YSAqLwotCQltX2FkaihzcC0+ZGF0YSwgdG9fbW92ZSk7
Ci0JCS8qIE5vdyBsZXRzIHdvcmsgb3VyIHdheSBkb3duIGFuZCBjb21wYWN0IGl0ICovCi0JCW0g
PSBzcC0+ZGF0YTsKLQkJd2hpbGUgKG0gJiYgKFNDVFBfQlVGX0xFTihtKSA9PSAwKSkgewotCQkJ
c3AtPmRhdGEgID0gU0NUUF9CVUZfTkVYVChtKTsKLQkJCVNDVFBfQlVGX05FWFQobSkgPSBOVUxM
OwotCQkJaWYgKHNwLT50YWlsX21idWYgPT0gbSkgewotCQkJCS8qLQotCQkJCSAqIEZyZWVpbmcg
dGFpbD8gVFNOSCBzaW5jZQotCQkJCSAqIHdlIHN1cHBvc2VkbHkgd2VyZSB0YWtpbmcgbGVzcwot
CQkJCSAqIHRoYW4gdGhlIHNwLT5sZW5ndGguCi0JCQkJICovCi0jaWZkZWYgSU5WQVJJQU5UUwot
CQkJCXBhbmljKCJIdWgsIGZyZWluZyB0YWlsPyAtIFRTTkgiKTsKLSNlbHNlCi0JCQkJU0NUUF9Q
UklOVEYoIkh1aCwgZnJlZWluZyB0YWlsPyAtIFRTTkhcbiIpOwotCQkJCXNwLT50YWlsX21idWYg
PSBzcC0+ZGF0YSA9IE5VTEw7Ci0JCQkJc3AtPmxlbmd0aCA9IDA7Ci0jZW5kaWYKLQotCQkJfQot
CQkJc2N0cF9tX2ZyZWUobSk7Ci0JCQltID0gc3AtPmRhdGE7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBf
QlVGX0lTX0VYVEVOREVEKGNoay0+ZGF0YSkpIHsKLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDE7Ci0J
fSBlbHNlIHsKLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JfQotCS8qIGdldCBsYXN0X21idWYg
YW5kIGNvdW50cyBvZiBtYiB1c2FnZQotCSAqIFRoaXMgaXMgdWdseSBidXQgaG9wZWZ1bGx5IGl0
cyBvbmx5IG9uZSBtYnVmLgotCSAqLwotCWlmIChjaGstPmxhc3RfbWJ1ZiA9PSBOVUxMKSB7Ci0J
CWNoay0+bGFzdF9tYnVmID0gY2hrLT5kYXRhOwotCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChjaGst
Pmxhc3RfbWJ1ZikgIT0gTlVMTCkgewotCQkJY2hrLT5sYXN0X21idWYgPSBTQ1RQX0JVRl9ORVhU
KGNoay0+bGFzdF9tYnVmKTsKLQkJfQotCX0KLQotCWlmICh0b19tb3ZlID4gbGVuZ3RoKSB7Ci0J
CS8qLSBUaGlzIHNob3VsZCBub3QgaGFwcGVuIGVpdGhlcgotCQkgKiBzaW5jZSB3ZSBhbHdheXMg
bG93ZXIgdG9fbW92ZSB0byB0aGUgc2l6ZQotCQkgKiBvZiBzcC0+bGVuZ3RoIGlmIGl0cyBsYXJn
ZXIuCi0JCSAqLwotI2lmZGVmIElOVkFSSUFOVFMKLQkJcGFuaWMoIkh1aCwgaG93IGNhbiB0b19t
b3ZlIGJlIGxhcmdlcj8iKTsKLSNlbHNlCi0JCVNDVFBfUFJJTlRGKCJIdWgsIGhvdyBjYW4gdG9f
bW92ZSBiZSBsYXJnZXI/XG4iKTsKLQkJc3AtPmxlbmd0aCA9IDA7Ci0jZW5kaWYKLQl9IGVsc2Ug
ewotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzcC0+bGVuZ3RoLCB0b19tb3ZlKTsKLQl9Ci0JbGVh
ZGluZyA9IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsKLQlpZiAoTV9MRUFESU5HU1BB
Q0UoY2hrLT5kYXRhKSA8IGxlYWRpbmcpIHsKLQkJLyogTm90IGVub3VnaCByb29tIGZvciBhIGNo
dW5rIGhlYWRlciwgZ2V0IHNvbWUgKi8KLQkJc3RydWN0IG1idWYgKm07Ci0KLQkJbSA9IHNjdHBf
Z2V0X21idWZfZm9yX21zZygxLCAwLCBNX05PV0FJVCwgMCwgTVRfREFUQSk7Ci0JCWlmIChtID09
IE5VTEwpIHsKLQkJCS8qCi0JCQkgKiB3ZSdyZSBpbiB0cm91YmxlIGhlcmUuIF9QUkVQRU5EIGJl
bG93IHdpbGwgZnJlZQotCQkJICogYWxsIHRoZSBkYXRhIGlmIHRoZXJlIGlzIG5vIGxlYWRpbmcg
c3BhY2UsIHNvIHdlCi0JCQkgKiBtdXN0IHB1dCB0aGUgZGF0YSBiYWNrIGFuZCByZXN0b3JlLgot
CQkJICovCi0JCQlpZiAoc2VuZF9sb2NrX3VwID09IDApIHsKLQkJCQlTQ1RQX1RDQl9TRU5EX0xP
Q0soc3RjYik7Ci0JCQkJc2VuZF9sb2NrX3VwID0gMTsKLQkJCX0KLQkJCWlmIChzcC0+ZGF0YSA9
PSBOVUxMKSB7Ci0JCQkJLyogdW5zdGVhbCB0aGUgZGF0YSAqLwotCQkJCXNwLT5kYXRhID0gY2hr
LT5kYXRhOwotCQkJCXNwLT50YWlsX21idWYgPSBjaGstPmxhc3RfbWJ1ZjsKLQkJCX0gZWxzZSB7
Ci0JCQkJc3RydWN0IG1idWYgKm1fdG1wOwotCQkJCS8qIHJlYXNzZW1ibGUgdGhlIGRhdGEgKi8K
LQkJCQltX3RtcCA9IHNwLT5kYXRhOwotCQkJCXNwLT5kYXRhID0gY2hrLT5kYXRhOwotCQkJCVND
VFBfQlVGX05FWFQoY2hrLT5sYXN0X21idWYpID0gbV90bXA7Ci0JCQl9Ci0JCQlzcC0+c29tZV90
YWtlbiA9IHNvbWVfdGFrZW47Ci0JCQlhdG9taWNfYWRkX2ludCgmc3AtPmxlbmd0aCwgdG9fbW92
ZSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQkJKmJhaWwgPSAxOwotCQkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOwotCQkJdG9fbW92ZSA9IDA7Ci0JCQlnb3RvIG91
dF9vZjsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfQlVGX0xFTihtKSA9IDA7Ci0JCQlTQ1RQX0JVRl9O
RVhUKG0pID0gY2hrLT5kYXRhOwotCQkJY2hrLT5kYXRhID0gbTsKLQkJCU1fQUxJR04oY2hrLT5k
YXRhLCA0KTsKLQkJfQotCX0KLQlTQ1RQX0JVRl9QUkVQRU5EKGNoay0+ZGF0YSwgU0NUUF9EQVRB
X0NIVU5LX09WRVJIRUFEKHN0Y2IpLCBNX05PV0FJVCk7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxM
KSB7Ci0JCS8qIEhFTFAsIFRTTkggc2luY2Ugd2UgYXNzdXJlZCBpdCB3b3VsZCBub3QgYWJvdmU/
ICovCi0jaWZkZWYgSU5WQVJJQU5UUwotCQlwYW5pYygicHJlcGVuZCBmYWlsZXMgSEVMUD8iKTsK
LSNlbHNlCi0JCVNDVFBfUFJJTlRGKCJwcmVwZW5kIGZhaWxzIEhFTFA/XG4iKTsKLQkJc2N0cF9m
cmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOwotI2VuZGlmCi0JCSpiYWlsID0gMTsK
LQkJdG9fbW92ZSA9IDA7Ci0JCWdvdG8gb3V0X29mOwotCX0KLQlzY3RwX3NuZF9zYl9hbGxvYyhz
dGNiLCBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOwotCWNoay0+Ym9va19zaXplID0g
Y2hrLT5zZW5kX3NpemUgPSAodWludDE2X3QpKHRvX21vdmUgKyBTQ1RQX0RBVEFfQ0hVTktfT1ZF
UkhFQUQoc3RjYikpOwotCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKLQljaGstPnNlbnQgPSBT
Q1RQX0RBVEFHUkFNX1VOU0VOVDsKLQotCWNoay0+ZmxhZ3MgPSAwOwotCWNoay0+YXNvYyA9ICZz
dGNiLT5hc29jOwotCWNoay0+cGFkX2lucGxhY2UgPSAwOwotCWNoay0+bm9fZnJfYWxsb3dlZCA9
IDA7Ci0JaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJaWYgKHJjdl9m
bGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKLQkJCS8qIEp1c3QgdXNlIDAuIFRoZSByZWNl
aXZlciBpZ25vcmVzIHRoZSB2YWx1ZXMuICovCi0JCQljaGstPnJlYy5kYXRhLm1pZCA9IDA7Ci0J
CX0gZWxzZSB7Ci0JCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7
Ci0JCQlpZiAocmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCXN0cnEtPm5l
eHRfbWlkX29yZGVyZWQrKzsKLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChyY3ZfZmxhZ3Mg
JiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSB7Ci0JCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5l
eHRfbWlkX3Vub3JkZXJlZDsKLQkJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFH
KSB7Ci0JCQkJc3RycS0+bmV4dF9taWRfdW5vcmRlcmVkKys7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0J
CQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlkX29yZGVyZWQ7Ci0JCQlpZiAocmN2
X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCXN0cnEtPm5leHRfbWlkX29yZGVy
ZWQrKzsKLQkJCX0KLQkJfQotCX0KLQljaGstPnJlYy5kYXRhLnNpZCA9IHNwLT5zaWQ7Ci0JY2hr
LT5yZWMuZGF0YS5wcGlkID0gc3AtPnBwaWQ7Ci0JY2hrLT5yZWMuZGF0YS5jb250ZXh0ID0gc3At
PmNvbnRleHQ7Ci0JY2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAwOwotCi0J
Y2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wID0gc3AtPnRzOwotCWNoay0+ZmxhZ3MgPSBzcC0+YWN0
X2ZsYWdzOwotCi0JaWYgKHNwLT5uZXQpIHsKLQkJY2hrLT53aG9UbyA9IHNwLT5uZXQ7Ci0JCWF0
b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCX0gZWxzZQotCQljaGst
Pndob1RvID0gTlVMTDsKLQotCWlmIChzcC0+aG9sZHNfa2V5X3JlZikgewotCQljaGstPmF1dGhf
a2V5aWQgPSBzcC0+YXV0aF9rZXlpZDsKLQkJc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0Y2IsIGNo
ay0+YXV0aF9rZXlpZCk7Ci0JCWNoay0+aG9sZHNfa2V5X3JlZiA9IDE7Ci0JfQotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKQotCWNoay0+cmVjLmRhdGEudHNu
ID0gYXRvbWljX2ZldGNoYWRkX2ludCgmYXNvYy0+c2VuZGluZ19zZXEsIDEpOwotI2Vsc2UKLQlj
aGstPnJlYy5kYXRhLnRzbiA9IGFzb2MtPnNlbmRpbmdfc2VxKys7Ci0jZW5kaWYKLQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfQVRfU0VORF8yX09V
VFEpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9TVFJNT1VUX0xPR19TRU5ELAotCQkgICAgICAg
ICAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdClzdGNiLCBzcC0+bGVuZ3RoLAotCQkgICAgICAg
ICAgICAgICAodWludDMyX3QpKChjaGstPnJlYy5kYXRhLnNpZCA8PCAxNikgfCAoMHgwMDAwZmZm
ZiAmIGNoay0+cmVjLmRhdGEubWlkKSksCi0JCSAgICAgICAgICAgICAgIGNoay0+cmVjLmRhdGEu
dHNuKTsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKLQkJZGNo
a2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqKTsKLQl9IGVsc2Ug
ewotCQluZGNoa2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKik7
Ci0JfQotCS8qCi0JICogUHV0IHRoZSByZXN0IG9mIHRoZSB0aGluZ3MgaW4gcGxhY2Ugbm93LiBT
aXplIHdhcyBkb25lCi0JICogZWFybGllciBpbiBwcmV2aW91cyBsb29wIHByaW9yIHRvIHBhZGRp
bmcuCi0JICovCi0KLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwotCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKHN0Y2IpOwotCWlmIChhc29jLT50c25fb3V0X2F0ID49IFNDVFBfVFNOX0xPR19TSVpF
KSB7Ci0JCWFzb2MtPnRzbl9vdXRfYXQgPSAwOwotCQlhc29jLT50c25fb3V0X3dyYXBwZWQgPSAx
OwotCX0KLQlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRdLnRzbiA9IGNoay0+cmVj
LmRhdGEudHNuOwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0uc3RybSA9IGNo
ay0+cmVjLmRhdGEuc2lkOwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0uc2Vx
ID0gY2hrLT5yZWMuZGF0YS5taWQ7Ci0JYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0
XS5zeiA9IGNoay0+c2VuZF9zaXplOwotCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9h
dF0uZmxncyA9IGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzOwotCWFzb2MtPm91dF90c25sb2dbYXNv
Yy0+dHNuX291dF9hdF0uc3RjYiA9ICh2b2lkICopc3RjYjsKLQlhc29jLT5vdXRfdHNubG9nW2Fz
b2MtPnRzbl9vdXRfYXRdLmluX3BvcyA9IGFzb2MtPnRzbl9vdXRfYXQ7Ci0JYXNvYy0+b3V0X3Rz
bmxvZ1thc29jLT50c25fb3V0X2F0XS5pbl9vdXQgPSAyOwotCWFzb2MtPnRzbl9vdXRfYXQrKzsK
LSNlbmRpZgotCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCWRjaGto
LT5jaC5jaHVua190eXBlID0gU0NUUF9EQVRBOwotCQlkY2hraC0+Y2guY2h1bmtfZmxhZ3MgPSBj
aGstPnJlYy5kYXRhLnJjdl9mbGFnczsKLQkJZGNoa2gtPmRwLnRzbiA9IGh0b25sKGNoay0+cmVj
LmRhdGEudHNuKTsKLQkJZGNoa2gtPmRwLnNpZCA9IGh0b25zKHN0cnEtPnNpZCk7Ci0JCWRjaGto
LT5kcC5zc24gPSBodG9ucygodWludDE2X3QpY2hrLT5yZWMuZGF0YS5taWQpOwotCQlkY2hraC0+
ZHAucHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKLQkJZGNoa2gtPmNoLmNodW5rX2xlbmd0aCA9
IGh0b25zKGNoay0+c2VuZF9zaXplKTsKLQl9IGVsc2UgewotCQluZGNoa2gtPmNoLmNodW5rX3R5
cGUgPSBTQ1RQX0lEQVRBOwotCQluZGNoa2gtPmNoLmNodW5rX2ZsYWdzID0gY2hrLT5yZWMuZGF0
YS5yY3ZfZmxhZ3M7Ci0JCW5kY2hraC0+ZHAudHNuID0gaHRvbmwoY2hrLT5yZWMuZGF0YS50c24p
OwotCQluZGNoa2gtPmRwLnNpZCA9IGh0b25zKHN0cnEtPnNpZCk7Ci0JCW5kY2hraC0+ZHAucmVz
ZXJ2ZWQgPSBodG9ucygwKTsKLQkJbmRjaGtoLT5kcC5taWQgPSBodG9ubChjaGstPnJlYy5kYXRh
Lm1pZCk7Ci0JCWlmIChzcC0+ZnNuID09IDApCi0JCQluZGNoa2gtPmRwLnBwaWRfZnNuLnBwaWQg
PSBjaGstPnJlYy5kYXRhLnBwaWQ7Ci0JCWVsc2UKLQkJCW5kY2hraC0+ZHAucHBpZF9mc24uZnNu
ID0gaHRvbmwoc3AtPmZzbik7Ci0JCXNwLT5mc24rKzsKLQkJbmRjaGtoLT5jaC5jaHVua19sZW5n
dGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7Ci0JfQotCS8qIE5vdyBhZHZhbmNlIHRoZSBjaGst
PnNlbmRfc2l6ZSBieSB0aGUgYWN0dWFsIHBhZCBuZWVkZWQuICovCi0JaWYgKGNoay0+c2VuZF9z
aXplIDwgU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpKSB7Ci0JCS8qIG5lZWQgYSBwYWQgKi8K
LQkJc3RydWN0IG1idWYgKmxtOwotCQlpbnQgcGFkczsKLQotCQlwYWRzID0gU0NUUF9TSVpFMzIo
Y2hrLT5ib29rX3NpemUpIC0gY2hrLT5zZW5kX3NpemU7Ci0JCWxtID0gc2N0cF9wYWRfbGFzdG1i
dWYoY2hrLT5kYXRhLCBwYWRzLCBjaGstPmxhc3RfbWJ1Zik7Ci0JCWlmIChsbSAhPSBOVUxMKSB7
Ci0JCQljaGstPmxhc3RfbWJ1ZiA9IGxtOwotCQkJY2hrLT5wYWRfaW5wbGFjZSA9IDE7Ci0JCX0K
LQkJY2hrLT5zZW5kX3NpemUgKz0gcGFkczsKLQl9Ci0JaWYgKFBSX1NDVFBfRU5BQkxFRChjaGst
PmZsYWdzKSkgewotCQlhc29jLT5wcl9zY3RwX2NudCsrOwotCX0KLQlpZiAoc3AtPm1zZ19pc19j
b21wbGV0ZSAmJiAoc3AtPmxlbmd0aCA9PSAwKSAmJiAoc3AtPnNlbmRlcl9hbGxfZG9uZSkpIHsK
LQkJLyogQWxsIGRvbmUgcHVsbCBhbmQga2lsbCB0aGUgbWVzc2FnZSAqLwotCQlpZiAoc3AtPnB1
dF9sYXN0X291dCA9PSAwKSB7Ci0JCQlTQ1RQX1BSSU5URigiR2FrLCBwdXQgb3V0IGVudGlyZSBt
c2cgd2l0aCBOTyBlbmQhLTJcbiIpOwotCQkJU0NUUF9QUklOVEYoInNlbmRlcl9kb25lOiVkIGxl
bjolZCBtc2dfY29tcDolZCBwdXRfbGFzdF9vdXQ6JWQgc2VuZF9sb2NrOiVkXG4iLAotCQkJICAg
ICAgICAgICAgc3AtPnNlbmRlcl9hbGxfZG9uZSwKLQkJCSAgICAgICAgICAgIHNwLT5sZW5ndGgs
Ci0JCQkgICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAotCQkJICAgICAgICAgICAgc3At
PnB1dF9sYXN0X291dCwKLQkJCSAgICAgICAgICAgIHNlbmRfbG9ja191cCk7Ci0JCX0KLQkJaWYg
KChzZW5kX2xvY2tfdXAgPT0gMCkgJiYgKFRBSUxRX05FWFQoc3AsIG5leHQpID09IE5VTEwpKSB7
Ci0JCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JCQlzZW5kX2xvY2tfdXAgPSAxOwotCQl9
Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQsIDEpOwotCQlU
QUlMUV9SRU1PVkUoJnN0cnEtPm91dHF1ZXVlLCBzcCwgbmV4dCk7Ci0JCXN0Y2ItPmFzb2Muc3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIHN0cnEsIHNw
LCBzZW5kX2xvY2tfdXApOwotCQlpZiAoKHN0cnEtPnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VU
X1BFTkRJTkcpICYmCi0JCSAgICAoc3RycS0+Y2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgotCQkg
ICAgVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSkgewotCQkJc3RjYi0+YXNvYy50cmlnZ2Vy
X3Jlc2V0ID0gMTsKLQkJfQotCQlpZiAoc3AtPm5ldCkgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKHNwLT5uZXQpOwotCQkJc3AtPm5ldCA9IE5VTEw7Ci0JCX0KLQkJaWYgKHNwLT5kYXRhKSB7
Ci0JCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOwotCQkJc3AtPmRhdGEgPSBOVUxMOwotCQl9Ci0J
CXNjdHBfZnJlZV9hX3N0cm1vcShzdGNiLCBzcCwgc29fbG9ja2VkKTsKLQl9Ci0JYXNvYy0+Y2h1
bmtzX29uX291dF9xdWV1ZSsrOwotCXN0cnEtPmNodW5rc19vbl9xdWV1ZXMrKzsKLQlUQUlMUV9J
TlNFUlRfVEFJTCgmYXNvYy0+c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCWFzb2MtPnNl
bmRfcXVldWVfY250Kys7Ci1vdXRfb2Y6Ci0JaWYgKHNlbmRfbG9ja191cCkgewotCQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuICh0b19tb3ZlKTsKLX0KLQotCi1zdGF0
aWMgdm9pZAotc2N0cF9maWxsX291dHF1ZXVlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBmcmFnX3BvaW50LCBpbnQgZWVvcl9tb2RlLCBpbnQg
KnF1aXRfbm93LCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0J
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
c3RycTsKLQl1aW50MzJfdCBzcGFjZV9sZWZ0LCBtb3ZlZCwgdG90YWxfbW92ZWQ7Ci0JaW50IGJh
aWwsIGdpdmV1cDsKLQotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKLQl0b3RhbF9tb3ZlZCA9IDA7Ci0Jc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlzcGFjZV9sZWZ0
ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCWJyZWFrOwotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dSAt
IFNDVFBfTUlOX09WRVJIRUFEOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0JCWNhc2UgQUZfQ09OTjoKLQkJCXNwYWNlX2xlZnQgPSBuZXQtPm10dSAtIHNp
emVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJ
LyogVFNOSCAqLwotCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1OwotCQkJYnJlYWs7Ci0JfQotCS8q
IE5lZWQgYW4gYWxsb3dhbmNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgdG9vICovCi0Jc3Bh
Y2VfbGVmdCAtPSBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYik7Ci0KLQkvKiBtdXN0IG1h
a2UgZXZlbiB3b3JkIGJvdW5kYXJ5ICovCi0Jc3BhY2VfbGVmdCAmPSAweGZmZmZmZmZjOwotCXN0
cnEgPSBzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NlbGVjdF9zdHJlYW0oc3RjYiwg
bmV0LCBhc29jKTsKLQlnaXZldXAgPSAwOwotCWJhaWwgPSAwOwotCXdoaWxlICgoc3BhY2VfbGVm
dCA+IDApICYmIChzdHJxICE9IE5VTEwpKSB7Ci0JCW1vdmVkID0gc2N0cF9tb3ZlX3RvX291dHF1
ZXVlKHN0Y2IsIHN0cnEsIHNwYWNlX2xlZnQsIGZyYWdfcG9pbnQsCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICZnaXZldXAsIGVlb3JfbW9kZSwgJmJhaWwsIHNvX2xvY2tlZCk7Ci0J
CXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nfc2NoZWR1bGVkKHN0Y2IsIG5ldCwgYXNv
Yywgc3RycSwgbW92ZWQpOwotCQlpZiAoKGdpdmV1cCAhPSAwKSB8fCAoYmFpbCAhPSAwKSkgewot
CQkJYnJlYWs7Ci0JCX0KLQkJc3RycSA9IHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nf
c2VsZWN0X3N0cmVhbShzdGNiLCBuZXQsIGFzb2MpOwotCQl0b3RhbF9tb3ZlZCArPSBtb3ZlZDsK
LQkJc3BhY2VfbGVmdCAtPSBtb3ZlZDsKLQkJaWYgKHNwYWNlX2xlZnQgPj0gU0NUUF9EQVRBX0NI
VU5LX09WRVJIRUFEKHN0Y2IpKSB7Ci0JCQlzcGFjZV9sZWZ0IC09IFNDVFBfREFUQV9DSFVOS19P
VkVSSEVBRChzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCXNwYWNlX2xlZnQgPSAwOwotCQl9Ci0JCXNw
YWNlX2xlZnQgJj0gMHhmZmZmZmZmYzsKLQl9Ci0JaWYgKGJhaWwgIT0gMCkKLQkJKnF1aXRfbm93
ID0gMTsKLQotCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcGFja2V0X2RvbmUoc3Rj
YiwgbmV0LCBhc29jKTsKLQotCWlmICh0b3RhbF9tb3ZlZCA9PSAwKSB7Ci0JCWlmICgoc3RjYi0+
YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gMCkgJiYKLQkJICAgIChuZXQgPT0gc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uKSkgewotCQkJLyogcmFuIGRyeSBmb3IgcHJpbWFyeSBuZXR3b3Jr
IG5ldCAqLwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcHJpbWFyeV9yYW5kcnkpOwotCQl9IGVs
c2UgaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID4gMCkgewotCQkJLyogcmFuIGRyeSB3
aXRoIENNVCBvbiAqLwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfY210X3JhbmRyeSk7Ci0JCX0K
LQl9Ci19Ci0KLXZvaWQKLXNjdHBfZml4X2Vjbl9lY2hvKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jKQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCVRBSUxRX0ZPUkVB
Q0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNo
ay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0VDSE8pIHsKLQkJCWNoay0+c2VudCA9IFND
VFBfREFUQUdSQU1fVU5TRU5UOwotCQl9Ci0JfQotfQotCi12b2lkCi1zY3RwX21vdmVfY2h1bmtz
X2Zyb21fbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQot
ewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoazsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0JdW5zaWdu
ZWQgaW50IGk7Ci0KLQlpZiAobmV0ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlhc29jID0g
JnN0Y2ItPmFzb2M7Ci0JZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBp
KyspIHsKLQkJVEFJTFFfRk9SRUFDSChzcCwgJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1
ZSwgbmV4dCkgewotCQkJaWYgKHNwLT5uZXQgPT0gbmV0KSB7Ci0JCQkJc2N0cF9mcmVlX3JlbW90
ZV9hZGRyKHNwLT5uZXQpOwotCQkJCXNwLT5uZXQgPSBOVUxMOwotCQkJfQotCQl9Ci0JfQotCVRB
SUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChj
aGstPndob1RvID09IG5ldCkgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8p
OwotCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0JCX0KLQl9Ci19Ci0KLWludAotc2N0cF9tZWRfY2h1
bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCSAgICAgIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKLQkJICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCSAgICAg
IGludCAqbnVtX291dCwKLQkJICAgICAgaW50ICpyZWFzb25fY29kZSwKLQkJICAgICAgaW50IGNv
bnRyb2xfb25seSwgaW50IGZyb21fd2hlcmUsCi0JCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3cs
IGludCAqbm93X2ZpbGxlZCwgaW50IGZyYWdfcG9pbnQsIGludCBzb19sb2NrZWQKLSNpZiAhZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQkgICAg
ICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0JKQotewotCS8qKgotCSAqIE9rIHRoaXMgaXMgdGhlIGdl
bmVyaWMgY2h1bmsgc2VydmljZSBxdWV1ZS4gd2UgbXVzdCBkbyB0aGUKLQkgKiBmb2xsb3dpbmc6
Ci0JICogLSBTZXJ2aWNlIHRoZSBzdHJlYW0gcXVldWUgdGhhdCBpcyBuZXh0LCBtb3ZpbmcgYW55
Ci0JICogICBtZXNzYWdlIChub3RlIEkgbXVzdCBnZXQgYSBjb21wbGV0ZSBtZXNzYWdlIGkuZS4g
RklSU1QvTUlERExFIGFuZAotCSAqICAgTEFTVCB0byB0aGUgb3V0IHF1ZXVlIGluIG9uZSBwYXNz
KSBhbmQgYXNzaWduaW5nIFRTTidzLiBUaGlzCi0JICogICBvbmx5IGFwcGx5cyB0aG91Z2ggaWYg
dGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBOREFUQS4gRm9yIE5EQVRBCi0JICogICBjaHVua3Mg
aXRzIG9rIHRvIG5vdCBzZW5kIHRoZSBlbnRpcmUgbWVzc2FnZSA7LSkKLQkgKiAtIENoZWNrIHRv
IHNlZSBpZiB0aGUgY3duZC9yd25kIGFsbG93cyBhbnkgb3V0cHV0LCBpZiBzbyB3ZSBnbyBhaGVh
ZCBhbmQKLQkgKiAgIGZvbXVsYXRlIGFuZCBzZW5kIHRoZSBsb3cgbGV2ZWwgY2h1bmtzLiBNYWtp
bmcgc3VyZSB0byBjb21iaW5lCi0JICogICBhbnkgY29udHJvbCBpbiB0aGUgY29udHJvbCBjaHVu
ayBxdWV1ZSBhbHNvLgotCSAqLwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKnN0YXJ0X2F0LCAq
c2Fja19nb2VzX3RvID0gTlVMTCwgKm9sZF9zdGFydF9hdCA9IE5VTEw7Ci0Jc3RydWN0IG1idWYg
Km91dGNoYWluLCAqZW5kb3V0Y2hhaW47Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAq
bmNoazsKLQotCS8qIHRlbXAgYXJyYXlzIGZvciB1bmxpbmtpbmcgKi8KLQlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpkYXRhX2xpc3RbU0NUUF9NQVhfREFUQV9CVU5ETElOR107Ci0JaW50IG5vX2Zy
YWdtZW50ZmxnLCBlcnJvcjsKLQl1bnNpZ25lZCBpbnQgbWF4X3J3bmRfcGVyX2Rlc3QsIG1heF9z
ZW5kX3Blcl9kZXN0OwotCWludCBvbmVfY2h1bmssIGhiZmxhZywgc2tpcF9kYXRhX2Zvcl90aGlz
X25ldDsKLQlpbnQgYXNjb25mLCBjb29raWUsIG5vX291dF9jbnQ7Ci0JaW50IGJ1bmRsZV9hdCwg
Y3RsX2NudCwgbm9fZGF0YV9jaHVua3MsIGVlb3JfbW9kZTsKLQl1bnNpZ25lZCBpbnQgbXR1LCBy
X210dSwgb210dSwgbXhfbXR1LCB0b19vdXQ7Ci0JaW50IHRzbnNfc2VudCA9IDA7Ci0JdWludDMy
X3QgYXV0aF9vZmZzZXQgPSAwOwotCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmF1dGggPSBOVUxM
OwotCXVpbnQxNl90IGF1dGhfa2V5aWQ7Ci0JaW50IG92ZXJyaWRlX29rID0gMTsKLQlpbnQgc2tp
cF9maWxsX3VwID0gMDsKLQlpbnQgZGF0YV9hdXRoX3JlcWQgPSAwOwotCS8qIEpSUyA1LzE0LzA3
IC0gQWRkIGZsYWcgZm9yIHdoZXRoZXIgYSBoZWFydGJlYXQgaXMgc2VudCB0bwotCSAgIHRoZSBk
ZXN0aW5hdGlvbi4gKi8KLQlpbnQgcXVpdF9ub3cgPSAwOwotCi0jaWYgZGVmaW5lZChfX0FQUExF
X18pCi0JaWYgKHNvX2xvY2tlZCkgewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlu
cCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsK
LQl9Ci0jZW5kaWYKLQkqbnVtX291dCA9IDA7Ci0JKnJlYXNvbl9jb2RlID0gMDsKLQlhdXRoX2tl
eWlkID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7Ci0JaWYgKChhc29jLT5zdGF0
ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKLQkgICAgKGFzb2MtPnN0YXRlICYg
U0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgfHwKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUikpKSB7Ci0JCWVlb3JfbW9kZSA9IDE7
Ci0JfSBlbHNlIHsKLQkJZWVvcl9tb2RlID0gMDsKLQl9Ci0JY3RsX2NudCA9IG5vX291dF9jbnQg
PSBhc2NvbmYgPSBjb29raWUgPSAwOwotCS8qCi0JICogRmlyc3QgbGV0cyBwcmltZSB0aGUgcHVt
cC4gRm9yIGVhY2ggZGVzdGluYXRpb24sIGlmIHRoZXJlIGlzIHJvb20KLQkgKiBpbiB0aGUgZmxp
Z2h0IHNpemUsIGF0dGVtcHQgdG8gcHVsbCBhbiBNVFUncyB3b3J0aCBvdXQgb2YgdGhlCi0JICog
c3RyZWFtIHF1ZXVlcyBpbnRvIHRoZSBnZW5lcmFsIHNlbmRfcXVldWUKLQkgKi8KLSNpZmRlZiBT
Q1RQX0FVRElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEMyLCAyKTsKLSNlbmRpZgot
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWhiZmxhZyA9IDA7Ci0JaWYgKGNvbnRyb2xf
b25seSkKLQkJbm9fZGF0YV9jaHVua3MgPSAxOwotCWVsc2UKLQkJbm9fZGF0YV9jaHVua3MgPSAw
OwotCi0JLyogTm90aGluZyB0byBwb3NzaWJsZSB0byBzZW5kPyAqLwotCWlmICgoVEFJTFFfRU1Q
VFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgfHwKLQkgICAgIChhc29jLT5jdHJsX3F1ZXVl
X2NudCA9PSBzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpKSAmJgotCSAgICBUQUlMUV9FTVBU
WSgmYXNvYy0+YXNjb25mX3NlbmRfcXVldWUpICYmCi0JICAgIFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW5kX3F1ZXVlKSAmJgotCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNvX2xv
Y2tlZCkgPT0gMCkgewotCW5vdGhpbmdfdG9fc2VuZDoKLQkJKnJlYXNvbl9jb2RlID0gOTsKLQkJ
cmV0dXJuICgwKTsKLQl9Ci0JaWYgKGFzb2MtPnBlZXJzX3J3bmQgPT0gMCkgewotCQkvKiBObyBy
b29tIGluIHBlZXJzIHJ3bmQgKi8KLQkJKnJlYXNvbl9jb2RlID0gMTsKLQkJaWYgKGFzb2MtPnRv
dGFsX2ZsaWdodCA+IDApIHsKLQkJCS8qIHdlIGFyZSBhbGxvd2VkIG9uZSBjaHVuayBpbiBmbGln
aHQgKi8KLQkJCW5vX2RhdGFfY2h1bmtzID0gMTsKLQkJfQotCX0KLQlpZiAoc3RjYi0+YXNvYy5l
Y25fZWNob19jbnRfb25xKSB7Ci0JCS8qIFJlY29yZCB3aGVyZSBhIHNhY2sgZ29lcywgaWYgYW55
ICovCi0JCWlmIChub19kYXRhX2NodW5rcyAmJgotCQkgICAgKGFzb2MtPmN0cmxfcXVldWVfY250
ID09IHN0Y2ItPmFzb2MuZWNuX2VjaG9fY250X29ucSkpIHsKLQkJCS8qIE5vdGhpbmcgYnV0IEVD
TmUgdG8gc2VuZCAtIHdlIGRvbid0IGRvIHRoYXQgKi8KLQkJCWdvdG8gbm90aGluZ190b19zZW5k
OwotCQl9Ci0JCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBz
Y3RwX25leHQpIHsKLQkJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJ
VkVfQUNLKSB8fAotCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVD
VElWRV9BQ0spKSB7Ci0JCQkJc2Fja19nb2VzX3RvID0gY2hrLT53aG9UbzsKLQkJCQlicmVhazsK
LQkJCX0KLQkJfQotCX0KLQltYXhfcnduZF9wZXJfZGVzdCA9ICgoYXNvYy0+cGVlcnNfcnduZCAr
IGFzb2MtPnRvdGFsX2ZsaWdodCkgLyBhc29jLT5udW1uZXRzKTsKLQlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQpCi0JCW1heF9zZW5kX3Blcl9kZXN0ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3RjYi0+c2N0
cF9zb2NrZXQpIC8gYXNvYy0+bnVtbmV0czsKLQllbHNlCi0JCW1heF9zZW5kX3Blcl9kZXN0ID0g
MDsKLQlpZiAobm9fZGF0YV9jaHVua3MgPT0gMCkgewotCQkvKiBIb3cgbWFueSBub24tZGlyZWN0
ZWQgY2h1bmtzIGFyZSB0aGVyZT8gKi8KLQkJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW5k
X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKLQkJCQkv
KiBXZSBhbHJlYWR5IGhhdmUgbm9uLWRpcmVjdGVkCi0JCQkJICogY2h1bmtzIG9uIHRoZSBxdWV1
ZSwgbm8gbmVlZAotCQkJCSAqIHRvIGRvIGEgZmlsbC11cC4KLQkJCQkgKi8KLQkJCQlza2lwX2Zp
bGxfdXAgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0KLQl9Ci0JaWYgKChub19kYXRhX2No
dW5rcyA9PSAwKSAmJgotCSAgICAoc2tpcF9maWxsX3VwID09IDApICYmCi0JICAgICghc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc19lbXB0eShzdGNiLCBhc29jKSkpIHsKLQkJVEFJ
TFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJCS8qCi0JCQkgKiBU
aGlzIGZvciBsb29wIHdlIGFyZSBpbiB0YWtlcyBpbgotCQkJICogZWFjaCBuZXQsIGlmIGl0cydz
IGdvdCBzcGFjZSBpbiBjd25kIGFuZAotCQkJICogaGFzIGRhdGEgc2VudCB0byBpdCAod2hlbiBD
TVQgaXMgb2ZmKSB0aGVuIGl0Ci0JCQkgKiBjYWxscyBzY3RwX2ZpbGxfb3V0cXVldWUgZm9yIHRo
ZSBuZXQuIFRoaXMgZ2V0cwotCQkJICogZGF0YSBvbiB0aGUgc2VuZCBxdWV1ZSBmb3IgdGhhdCBu
ZXR3b3JrLgotCQkJICoKLQkJCSAqIEluIHNjdHBfZmlsbF9vdXRxdWV1ZSBUU04ncyBhcmUgYXNz
aWduZWQgYW5kCi0JCQkgKiBkYXRhIGlzIGNvcGllZCBvdXQgb2YgdGhlIHN0cmVhbSBidWZmZXJz
LiBOb3RlCi0JCQkgKiBtb3N0bHkgY29weSBieSByZWZlcmVuY2UgKHdlIGhvcGUpLgotCQkJICov
Ci0JCQluZXQtPndpbmRvd19wcm9iZSA9IDA7Ci0JCQlpZiAoKG5ldCAhPSBzdGNiLT5hc29jLmFs
dGVybmF0ZSkgJiYKLQkJCSAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgfHwK
LQkJCSAgICAgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHx8Ci0J
CQkgICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSkgewotCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDEsCi0JCQkJCQkg
ICAgICBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQpOwotCQkJCX0KLQkJCSAgICAgICAg
Y29udGludWU7Ci0JCQl9Ci0JCQlpZiAoKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3du
ZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykgJiYKLQkJCSAgICAobmV0LT5mbGlnaHRfc2l6ZSA9
PSAwKSkgewotCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX25ld190cmFu
c21pc3Npb25fYmVnaW5zKShzdGNiLCBuZXQpOwotCQkJfQotCQkJaWYgKG5ldC0+ZmxpZ2h0X3Np
emUgPj0gbmV0LT5jd25kKSB7Ci0JCQkJLyogc2tpcCB0aGlzIG5ldHdvcmssIG5vIHJvb20gLSBj
YW4ndCBmaWxsICovCi0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IG5ldCwgMywKLQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfRklMTF9PVVRRX0NBTExFRCk7Ci0J
CQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfbG9n
X2N3bmQoc3RjYiwgbmV0LCA0LCBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQpOwotCQkJ
fQotCQkJc2N0cF9maWxsX291dHF1ZXVlKHN0Y2IsIG5ldCwgZnJhZ19wb2ludCwgZWVvcl9tb2Rl
LCAmcXVpdF9ub3csIHNvX2xvY2tlZCk7Ci0JCQlpZiAocXVpdF9ub3cpIHsKLQkJCQkvKiBtZW1v
cnkgYWxsb2MgZmFpbHVyZSAqLwotCQkJCW5vX2RhdGFfY2h1bmtzID0gMTsKLQkJCQlicmVhazsK
LQkJCX0KLQkJfQotCX0KLQkvKiBub3cgc2VydmljZSBlYWNoIGRlc3RpbmF0aW9uIGFuZCBzZW5k
IG91dCB3aGF0IHdlIGNhbiBmb3IgaXQgKi8KLQkvKiBOb3RoaW5nIHRvIHNlbmQ/ICovCi0JaWYg
KFRBSUxRX0VNUFRZKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUpICYmCi0JICAgIFRBSUxRX0VN
UFRZKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSkgJiYKLQkgICAgVEFJTFFfRU1QVFkoJmFzb2Mt
PnNlbmRfcXVldWUpKSB7Ci0JCSpyZWFzb25fY29kZSA9IDg7Ci0JCXJldHVybiAoMCk7Ci0JfQot
Ci0JaWYgKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApIHsKLQkJLyogZ2V0IHRoZSBsYXN0IHN0
YXJ0IHBvaW50ICovCi0JCXN0YXJ0X2F0ID0gYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRl
ZDsKLQkJaWYgKHN0YXJ0X2F0ID09IE5VTEwpIHsKLQkJCS8qIG51bGwgc28gdG8gYmVnaW5uaW5n
ICovCi0JCQlzdGFydF9hdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5uZXRzKTsKLQkJfSBlbHNlIHsK
LQkJCXN0YXJ0X2F0ID0gVEFJTFFfTkVYVChhc29jLT5sYXN0X25ldF9jbXRfc2VuZF9zdGFydGVk
LCBzY3RwX25leHQpOwotCQkJaWYgKHN0YXJ0X2F0ID09IE5VTEwpIHsKLQkJCQlzdGFydF9hdCA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5uZXRzKTsKLQkJCX0KLQkJfQotCQlhc29jLT5sYXN0X25ldF9j
bXRfc2VuZF9zdGFydGVkID0gc3RhcnRfYXQ7Ci0JfSBlbHNlIHsKLQkJc3RhcnRfYXQgPSBUQUlM
UV9GSVJTVCgmYXNvYy0+bmV0cyk7Ci0JfQotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29u
dHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+d2hvVG8gPT0gTlVMTCkg
ewotCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgewotCQkJCWNoay0+d2hvVG8gPSBhc29jLT5hbHRl
cm5hdGU7Ci0JCQl9IGVsc2UgewotCQkJCWNoay0+d2hvVG8gPSBhc29jLT5wcmltYXJ5X2Rlc3Rp
bmF0aW9uOwotCQkJfQotCQkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwg
MSk7Ci0JCX0KLQl9Ci0Jb2xkX3N0YXJ0X2F0ID0gTlVMTDsKLWFnYWluX29uZV9tb3JlX3RpbWU6
Ci0JZm9yIChuZXQgPSBzdGFydF9hdCA7IG5ldCAhPSBOVUxMOyBuZXQgPSBUQUlMUV9ORVhUKG5l
dCwgc2N0cF9uZXh0KSkgewotCQkvKiBob3cgbXVjaCBjYW4gd2Ugc2VuZD8gKi8KLQkJLyogU0NU
UERCRygiRXhhbWluZSBmb3Igc2VuZGluZyBuZXQ6JXhcbiIsICh1aW50MzJfdCluZXQpOyAqLwot
CQlpZiAob2xkX3N0YXJ0X2F0ICYmIChvbGRfc3RhcnRfYXQgPT0gbmV0KSkgewotCQkJLyogdGhy
b3VnaCBsaXN0IG9jbXBsZXRlbHkuICovCi0JCQlicmVhazsKLQkJfQotCQl0c25zX3NlbnQgPSAw
eGE7Ci0JCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgotCQkg
ICAgVEFJTFFfRU1QVFkoJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlKSAmJgotCQkgICAgKG5ldC0+
ZmxpZ2h0X3NpemUgPj0gbmV0LT5jd25kKSkgewotCQkJLyogTm90aGluZyBvbiBjb250cm9sIG9y
IGFzY29uZiBhbmQgZmxpZ2h0IGlzIGZ1bGwsIHdlIGNhbiBza2lwCi0JCQkgKiBldmVuIGluIHRo
ZSBDTVQgY2FzZS4KLQkJCSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJYnVuZGxlX2F0ID0gMDsK
LQkJZW5kb3V0Y2hhaW4gPSBvdXRjaGFpbiA9IE5VTEw7Ci0JCW5vX2ZyYWdtZW50ZmxnID0gMTsK
LQkJb25lX2NodW5rID0gMDsKLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkgewotCQkJc2tpcF9kYXRhX2Zvcl90aGlzX25ldCA9IDE7Ci0JCX0gZWxzZSB7Ci0J
CQlza2lwX2RhdGFfZm9yX3RoaXNfbmV0ID0gMDsKLQkJfQotCQlzd2l0Y2ggKCgoc3RydWN0IHNv
Y2thZGRyICopJm5ldC0+cm8uX2xfYWRkciktPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJ
Y2FzZSBBRl9JTkVUOgotCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsK
LQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCW10
dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQ7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQkJbXR1ID0gbmV0LT5t
dHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVs
dDoKLQkJCS8qIFRTTkggKi8KLQkJCW10dSA9IG5ldC0+bXR1OwotCQkJYnJlYWs7Ci0JCX0KLQkJ
bXhfbXR1ID0gbXR1OwotCQl0b19vdXQgPSAwOwotCQlpZiAobXR1ID4gYXNvYy0+cGVlcnNfcndu
ZCkgewotCQkJaWYgKGFzb2MtPnRvdGFsX2ZsaWdodCA+IDApIHsKLQkJCQkvKiBXZSBoYXZlIGEg
cGFja2V0IGluIGZsaWdodCBzb21ld2hlcmUgKi8KLQkJCQlyX210dSA9IGFzb2MtPnBlZXJzX3J3
bmQ7Ci0JCQl9IGVsc2UgewotCQkJCS8qIFdlIGFyZSBhbHdheXMgYWxsb3dlZCB0byBzZW5kIG9u
ZSBNVFUgb3V0ICovCi0JCQkJb25lX2NodW5rID0gMTsKLQkJCQlyX210dSA9IG10dTsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCXJfbXR1ID0gbXR1OwotCQl9Ci0JCWVycm9yID0gMDsKLQkJLyoqKioq
KioqKioqKioqKioqKioqKioqKi8KLQkJLyogQVNDT05GIHRyYW5zbWlzc2lvbiAqLwotCQkvKioq
KioqKioqKioqKioqKioqKioqKioqLwotCQkvKiBOb3cgZmlyc3QgbGV0cyBnbyB0aHJvdWdoIHRo
ZSBhc2NvbmYgcXVldWUgKi8KLQkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29u
Zl9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJCWlmIChjaGstPnJlYy5jaHVua19p
ZC5pZCAhPSBTQ1RQX0FTQ09ORikgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGNoay0+
d2hvVG8gPT0gTlVMTCkgewotCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgPT0gTlVMTCkgewotCQkJ
CQlpZiAoYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbiAhPSBuZXQpIHsKLQkJCQkJCWJyZWFrOwot
CQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSAhPSBuZXQpIHsK
LQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoY2hrLT53
aG9UbyAhPSBuZXQpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGNoay0+ZGF0
YSA9PSBOVUxMKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBf
REFUQUdSQU1fVU5TRU5UICYmCi0JCQkgICAgY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVT
RU5EKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKgotCQkJICogaWYgbm8gQVVUSCBpcyB5ZXQg
aW5jbHVkZWQgYW5kIHRoaXMgY2h1bmsKLQkJCSAqIHJlcXVpcmVzIGl0LCBtYWtlIHN1cmUgdG8g
YWNjb3VudCBmb3IgaXQuICBXZQotCQkJICogZG9uJ3QgYXBwbHkgdGhlIHNpemUgdW50aWwgdGhl
IEFVVEggY2h1bmsgaXMKLQkJCSAqIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UgdGhlcmUg
aXMgbm8gcm9vbSBmb3IKLQkJCSAqIHRoaXMgY2h1bmsuIE5PVEU6IHdlIG92ZXJsb2FkIHRoZSB1
c2Ugb2YgIm9tdHUiCi0JCQkgKiBoZXJlCi0JCQkgKi8KLQkJCWlmICgoYXV0aCA9PSBOVUxMKSAm
JgotCQkJICAgIHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5p
ZCwKLQkJCQkJCQlzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7Ci0JCQkJb210dSA9IHNj
dHBfZ2V0X2F1dGhfY2h1bmtfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKLQkJCX0gZWxz
ZQotCQkJCW9tdHUgPSAwOwotCQkJLyogSGVyZSB3ZSBkbyBOT1QgZmFjdG9yIHRoZSByX210dSAq
LwotCQkJaWYgKChjaGstPnNlbmRfc2l6ZSA8IChpbnQpKG10dSAtIG9tdHUpKSB8fAotCQkJICAg
IChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spKSB7Ci0JCQkJLyoKLQkJCQkg
KiBXZSBwcm9iYWJseSBzaG91bGQgZ2xvbSB0aGUgbWJ1ZiBjaGFpbgotCQkJCSAqIGZyb20gdGhl
IGNoay0+ZGF0YSBmb3IgY29udHJvbCBidXQgdGhlCi0JCQkJICogcHJvYmxlbSBpcyBpdCBiZWNv
bWVzIHlldCBvbmUgbW9yZSBsZXZlbAotCQkJCSAqIG9mIHRyYWNraW5nIHRvIGRvIGlmIGZvciBz
b21lIHJlYXNvbgotCQkJCSAqIG91dHB1dCBmYWlscy4gVGhlbiBJIGhhdmUgZ290IHRvCi0JCQkJ
ICogcmVjb25zdHJ1Y3QgdGhlIG1lcmdlZCBjb250cm9sIGNoYWluLi4gZWwKLQkJCQkgKiB5dWNr
by4uIGZvciBub3cgd2UgdGFrZSB0aGUgZWFzeSB3YXkgYW5kCi0JCQkJICogZG8gdGhlIGNvcHkK
LQkJCQkgKi8KLQkJCQkvKgotCQkJCSAqIEFkZCBhbiBBVVRIIGNodW5rLCBpZiBjaHVuayByZXF1
aXJlcyBpdAotCQkJCSAqIHNhdmUgdGhlIG9mZnNldCBpbnRvIHRoZSBjaGFpbiBmb3IgQVVUSAot
CQkJCSAqLwotCQkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgotCQkJCSAgICAoc2N0cF9hdXRoX2lz
X3JlcXVpcmVkX2NodW5rKGNoay0+cmVjLmNodW5rX2lkLmlkLAotCQkJCQkJCQkgc3RjYi0+YXNv
Yy5wZWVyX2F1dGhfY2h1bmtzKSkpIHsKLQkJCQkJb3V0Y2hhaW4gPSBzY3RwX2FkZF9hdXRoX2No
dW5rKG91dGNoYWluLAotCQkJCQkJCQkgICAgICAgJmVuZG91dGNoYWluLAotCQkJCQkJCQkgICAg
ICAgJmF1dGgsCi0JCQkJCQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCi0JCQkJCQkJCSAgICAgICBz
dGNiLAotCQkJCQkJCQkgICAgICAgY2hrLT5yZWMuY2h1bmtfaWQuaWQpOwotCQkJCQlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7Ci0JCQkJfQotCQkJCW91
dGNoYWluID0gc2N0cF9jb3B5X21idWZjaGFpbihjaGstPmRhdGEsIG91dGNoYWluLCAmZW5kb3V0
Y2hhaW4sCi0JCQkJCQkJICAgICAgIChpbnQpY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0
YSwKLQkJCQkJCQkgICAgICAgY2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOwotCQkJ
CWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCSpyZWFzb25fY29kZSA9IDg7Ci0JCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVOT01FTSk7Ci0JCQkJCXJldHVybiAoRU5PTUVNKTsKLQkJCQl9Ci0JCQkJU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJCS8qIHVwZGF0ZSBvdXIg
TVRVIHNpemUgKi8KLQkJCQlpZiAobXR1ID4gKGNoay0+c2VuZF9zaXplICsgb210dSkpCi0JCQkJ
CW10dSAtPSAoY2hrLT5zZW5kX3NpemUgKyBvbXR1KTsKLQkJCQllbHNlCi0JCQkJCW10dSA9IDA7
Ci0JCQkJdG9fb3V0ICs9IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpOwotCQkJCS8qIERvIGNsZWFy
IElQX0RGID8gKi8KLQkJCQlpZiAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09L
KSB7Ci0JCQkJCW5vX2ZyYWdtZW50ZmxnID0gMDsKLQkJCQl9Ci0JCQkJaWYgKGNoay0+cmVjLmNo
dW5rX2lkLmNhbl90YWtlX2RhdGEpCi0JCQkJCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCQkJLyoKLQkJ
CQkgKiBzZXQgaGIgZmxhZyBzaW5jZSB3ZSBjYW4KLQkJCQkgKiB1c2UgdGhlc2UgZm9yIFJUTwot
CQkJCSAqLwotCQkJCWhiZmxhZyA9IDE7Ci0JCQkJYXNjb25mID0gMTsKLQkJCQkvKgotCQkJCSAq
IHNob3VsZCBzeXNjdGwgdGhpczogZG9uJ3QKLQkJCQkgKiBidW5kbGUgZGF0YSB3aXRoIEFTQ09O
RgotCQkJCSAqIHNpbmNlIGl0IHJlcXVpcmVzIEFVVEgKLQkJCQkgKi8KLQkJCQlub19kYXRhX2No
dW5rcyA9IDE7Ci0JCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOwotCQkJCWlmIChj
aGstPndob1RvID09IE5VTEwpIHsKLQkJCQkJY2hrLT53aG9UbyA9IG5ldDsKLQkJCQkJYXRvbWlj
X2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJCQl9Ci0JCQkJY2hrLT5zbmRfY291bnQr
KzsKLQkJCQlpZiAobXR1ID09IDApIHsKLQkJCQkJLyoKLQkJCQkJICogT2sgd2UgYXJlIG91dCBv
ZiByb29tIGJ1dCB3ZSBjYW4KLQkJCQkJICogb3V0cHV0IHdpdGhvdXQgZWZmZWN0aW5nIHRoZQot
CQkJCQkgKiBmbGlnaHQgc2l6ZSBzaW5jZSB0aGlzIGxpdHRsZSBndXkKLQkJCQkJICogaXMgYSBj
b250cm9sIG9ubHkgcGFja2V0LgotCQkJCQkgKi8KLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfQVNDT05GLCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJCS8qCi0JCQkJCSAqIGRv
IE5PVCBjbGVhciB0aGUgYXNjb25mCi0JCQkJCSAqIGZsYWcgYXMgaXQgaXMgdXNlZCB0byBkbwot
CQkJCQkgKiBhcHByb3ByaWF0ZSBzb3VyY2UgYWRkcmVzcwotCQkJCQkgKiBzZWxlY3Rpb24uCi0J
CQkJCSAqLwotCQkJCQlpZiAoKm5vd19maWxsZWQgPT0gMCkgewotCQkJCQkJKHZvaWQpU0NUUF9H
RVRUSU1FX1RJTUVWQUwobm93KTsKLQkJCQkJCSpub3dfZmlsbGVkID0gMTsKLQkJCQkJfQotCQkJ
CQluZXQtPmxhc3Rfc2VudF90aW1lID0gKm5vdzsKLQkJCQkJaGJmbGFnID0gMDsKLQkJCQkJaWYg
KChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgbmV0LAotCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRk
ciAqKSZuZXQtPnJvLl9sX2FkZHIsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRjaGFpbiwgYXV0aF9vZmZzZXQsIGF1dGgsCi0JCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9r
ZXlpZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2Zy
YWdtZW50ZmxnLCAwLCBhc2NvbmYsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAotCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcp
LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0
LCBOVUxMLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmCi0JCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgewotCQkJCQkJLyogZXJyb3Is
IHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KLQkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQz
LCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCQkJCWlmIChmcm9tX3doZXJlID09
IDApIHsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycnVzcik7Ci0JCQkJ
CQl9Ci0JCQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJCQkJCWFzb2MtPmlmcF9oYWRf
ZW5vYnVmID0gMTsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7Ci0J
CQkJCQl9Ci0JCQkJCQkvKiBlcnJvciwgY291bGQgbm90IG91dHB1dCAqLwotCQkJCQkJaWYgKGVy
cm9yID09IEVIT1NUVU5SRUFDSCkgewotCQkJCQkJCS8qCi0JCQkJCQkJICogRGVzdGluYXRpb24g
d2VudAotCQkJCQkJCSAqIHVucmVhY2hhYmxlCi0JCQkJCQkJICogZHVyaW5nIHRoaXMgc2VuZAot
CQkJCQkJCSAqLwotCQkJCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsK
LQkJCQkJCX0KLQkJCQkJCSpyZWFzb25fY29kZSA9IDc7Ci0JCQkJCQlicmVhazsKLQkJCQkJfSBl
bHNlIHsKLQkJCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKLQkJCQkJfQotCQkJCQkvKgot
CQkJCQkgKiBpbmNyZWFzZSB0aGUgbnVtYmVyIHdlIHNlbnQsIGlmIGEKLQkJCQkJICogY29va2ll
IGlzIHNlbnQgd2UgZG9uJ3QgdGVsbCB0aGVtCi0JCQkJCSAqIGFueSB3YXMgc2VudCBvdXQuCi0J
CQkJCSAqLwotCQkJCQlvdXRjaGFpbiA9IGVuZG91dGNoYWluID0gTlVMTDsKLQkJCQkJYXV0aCA9
IE5VTEw7Ci0JCQkJCWF1dGhfb2Zmc2V0ID0gMDsKLQkJCQkJaWYgKCFub19vdXRfY250KQotCQkJ
CQkJKm51bV9vdXQgKz0gY3RsX2NudDsKLQkJCQkJLyogcmVjYWxjIGEgY2xlYW4gc2xhdGUgYW5k
IHNldHVwICovCi0JCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQkJCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJCQltdHUgPSBuZXQtPm10dSAt
IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotCQkJCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQkJCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01J
Tl9PVkVSSEVBRDsKLQkJCQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJCQltdHUgPSBuZXQtPm10dSAtIHNpemVv
ZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JCQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQkJCWRlZmF1bHQ6
Ci0JCQkJCQkJLyogVFNOSCAqLwotCQkJCQkJCW10dSA9IG5ldC0+bXR1OwotCQkJCQkJCWJyZWFr
OwotCQkJCQl9Ci0JCQkJCXRvX291dCA9IDA7Ci0JCQkJCW5vX2ZyYWdtZW50ZmxnID0gMTsKLQkJ
CQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCS8qIHRyeSBuZXh0IG5ldCAq
LwotCQkJY29udGludWU7Ci0JCX0KLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJLyog
Q29udHJvbCB0cmFuc21pc3Npb24gKi8KLQkJLyoqKioqKioqKioqKioqKioqKioqKioqKi8KLQkJ
LyogTm93IGZpcnN0IGxldHMgZ28gdGhyb3VnaCB0aGUgY29udHJvbCBxdWV1ZSAqLwotCQlUQUlM
UV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQs
IG5jaGspIHsKLQkJCWlmICgoc2Fja19nb2VzX3RvKSAmJgotCQkJICAgIChjaGstPnJlYy5jaHVu
a19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSAmJgotCQkJICAgIChjaGstPndob1RvICE9IHNhY2tf
Z29lc190bykpIHsKLQkJCQkvKgotCQkJCSAqIGlmIHdlIGhhdmUgYSBzYWNrIGluIHF1ZXVlLCBh
bmQgd2UgYXJlIGxvb2tpbmcgYXQgYW4KLQkJCQkgKiBlY24gZWNobyB0aGF0IGlzIE5PVCBxdWV1
ZWQgdG8gd2hlcmUgdGhlIHNhY2sgaXMgZ29pbmcuLgotCQkJCSAqLwotCQkJCWlmIChjaGstPndo
b1RvID09IG5ldCkgewotCQkJCQkvKiBEb24ndCB0cmFuc21pdCBpdCB0byB3aGVyZSBpdHMgZ29p
bmcgKGN1cnJlbnQgbmV0KSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9IGVsc2UgaWYgKHNhY2tf
Z29lc190byA9PSBuZXQpIHsKLQkJCQkJLyogQnV0IGRvIHRyYW5zbWl0IGl0IHRvIHRoaXMgYWRk
cmVzcyAqLwotCQkJCQlnb3RvIHNraXBfbmV0X2NoZWNrOwotCQkJCX0KLQkJCX0KLQkJCWlmIChj
aGstPndob1RvID09IE5VTEwpIHsKLQkJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlID09IE5VTEwpIHsK
LQkJCQkJaWYgKGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24gIT0gbmV0KSB7Ci0JCQkJCQljb250
aW51ZTsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgIT0g
bmV0KSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJ
aWYgKGNoay0+d2hvVG8gIT0gbmV0KSB7Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJ
c2tpcF9uZXRfY2hlY2s6Ci0JCQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKLQkJ
CQkvKgotCQkJCSAqIEl0IG11c3QgYmUgdW5zZW50LiBDb29raWVzIGFuZCBBU0NPTkYncwotCQkJ
CSAqIGhhbmcgYXJvdW5kIGJ1dCB0aGVyZSB0aW1lcnMgd2lsbCBmb3JjZQotCQkJCSAqIHdoZW4g
bWFya2VkIGZvciByZXNlbmQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKgot
CQkJICogaWYgbm8gQVVUSCBpcyB5ZXQgaW5jbHVkZWQgYW5kIHRoaXMgY2h1bmsKLQkJCSAqIHJl
cXVpcmVzIGl0LCBtYWtlIHN1cmUgdG8gYWNjb3VudCBmb3IgaXQuICBXZQotCQkJICogZG9uJ3Qg
YXBwbHkgdGhlIHNpemUgdW50aWwgdGhlIEFVVEggY2h1bmsgaXMKLQkJCSAqIGFjdHVhbGx5IGFk
ZGVkIGJlbG93IGluIGNhc2UgdGhlcmUgaXMgbm8gcm9vbSBmb3IKLQkJCSAqIHRoaXMgY2h1bmsu
IE5PVEU6IHdlIG92ZXJsb2FkIHRoZSB1c2Ugb2YgIm9tdHUiCi0JCQkgKiBoZXJlCi0JCQkgKi8K
LQkJCWlmICgoYXV0aCA9PSBOVUxMKSAmJgotCQkJICAgIHNjdHBfYXV0aF9pc19yZXF1aXJlZF9j
aHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKLQkJCQkJCQlzdGNiLT5hc29jLnBlZXJfYXV0aF9j
aHVua3MpKSB7Ci0JCQkJb210dSA9IHNjdHBfZ2V0X2F1dGhfY2h1bmtfbGVuKHN0Y2ItPmFzb2Mu
cGVlcl9obWFjX2lkKTsKLQkJCX0gZWxzZQotCQkJCW9tdHUgPSAwOwotCQkJLyogSGVyZSB3ZSBk
byBOT1QgZmFjdG9yIHRoZSByX210dSAqLwotCQkJaWYgKChjaGstPnNlbmRfc2l6ZSA8PSAoaW50
KShtdHUgLSBvbXR1KSkgfHwKLQkJCSAgICAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdN
RU5UX09LKSkgewotCQkJCS8qCi0JCQkJICogV2UgcHJvYmFibHkgc2hvdWxkIGdsb20gdGhlIG1i
dWYgY2hhaW4KLQkJCQkgKiBmcm9tIHRoZSBjaGstPmRhdGEgZm9yIGNvbnRyb2wgYnV0IHRoZQot
CQkJCSAqIHByb2JsZW0gaXMgaXQgYmVjb21lcyB5ZXQgb25lIG1vcmUgbGV2ZWwKLQkJCQkgKiBv
ZiB0cmFja2luZyB0byBkbyBpZiBmb3Igc29tZSByZWFzb24KLQkJCQkgKiBvdXRwdXQgZmFpbHMu
IFRoZW4gSSBoYXZlIGdvdCB0bwotCQkJCSAqIHJlY29uc3RydWN0IHRoZSBtZXJnZWQgY29udHJv
bCBjaGFpbi4uIGVsCi0JCQkJICogeXVja28uLiBmb3Igbm93IHdlIHRha2UgdGhlIGVhc3kgd2F5
IGFuZAotCQkJCSAqIGRvIHRoZSBjb3B5Ci0JCQkJICovCi0JCQkJLyoKLQkJCQkgKiBBZGQgYW4g
QVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQKLQkJCQkgKiBzYXZlIHRoZSBvZmZzZXQg
aW50byB0aGUgY2hhaW4gZm9yIEFVVEgKLQkJCQkgKi8KLQkJCQlpZiAoKGF1dGggPT0gTlVMTCkg
JiYKLQkJCQkgICAgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19p
ZC5pZCwKLQkJCQkJCQkJIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcykpKSB7Ci0JCQkJCW91
dGNoYWluID0gc2N0cF9hZGRfYXV0aF9jaHVuayhvdXRjaGFpbiwKLQkJCQkJCQkJICAgICAgICZl
bmRvdXRjaGFpbiwKLQkJCQkJCQkJICAgICAgICZhdXRoLAotCQkJCQkJCQkgICAgICAgJmF1dGhf
b2Zmc2V0LAotCQkJCQkJCQkgICAgICAgc3RjYiwKLQkJCQkJCQkJICAgICAgIGNoay0+cmVjLmNo
dW5rX2lkLmlkKTsKLQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRy
b2xjaHVua3MpOwotCQkJCX0KLQkJCQlvdXRjaGFpbiA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hr
LT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWluLAotCQkJCQkJCSAgICAgICAoaW50KWNoay0+
cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEsCi0JCQkJCQkJICAgICAgIGNoay0+c2VuZF9zaXpl
LCBjaGstPmNvcHlfYnlfcmVmKTsKLQkJCQlpZiAob3V0Y2hhaW4gPT0gTlVMTCkgewotCQkJCQkq
cmVhc29uX2NvZGUgPSA4OwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJCQlyZXR1cm4gKEVOT01FTSk7
Ci0JCQkJfQotCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1
bmtzKTsKLQkJCQkvKiB1cGRhdGUgb3VyIE1UVSBzaXplICovCi0JCQkJaWYgKG10dSA+IChjaGst
PnNlbmRfc2l6ZSArIG9tdHUpKQotCQkJCQltdHUgLT0gKGNoay0+c2VuZF9zaXplICsgb210dSk7
Ci0JCQkJZWxzZQotCQkJCQltdHUgPSAwOwotCQkJCXRvX291dCArPSAoY2hrLT5zZW5kX3NpemUg
KyBvbXR1KTsKLQkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICovCi0JCQkJaWYgKGNoay0+ZmxhZ3Mg
JiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgewotCQkJCQlub19mcmFnbWVudGZsZyA9IDA7Ci0J
CQkJfQotCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhKQotCQkJCQljaGst
PmRhdGEgPSBOVUxMOwotCQkJCS8qIE1hcmsgdGhpbmdzIHRvIGJlIHJlbW92ZWQsIGlmIG5lZWRl
ZCAqLwotCQkJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TRUxFQ1RJVkVfQUNL
KSB8fAotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9OUl9TRUxFQ1RJVkVf
QUNLKSB8fCAvKiBFWSAqLwotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9I
RUFSVEJFQVRfUkVRVUVTVCkgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFND
VFBfSEVBUlRCRUFUX0FDSykgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFND
VFBfU0hVVERPV04pIHx8Ci0JCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NI
VVRET1dOX0FDSykgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfT1BF
UkFUSU9OX0VSUk9SKSB8fAotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9D
T09LSUVfQUNLKSB8fAotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05f
Q1dSKSB8fAotCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9QQUNLRVRfRFJP
UFBFRCkgfHwKLQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQVNDT05GX0FD
SykpIHsKLQkJCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRCRUFUX1JF
UVVFU1QpIHsKLQkJCQkJCWhiZmxhZyA9IDE7Ci0JCQkJCX0KLQkJCQkJLyogcmVtb3ZlIHRoZXNl
IGNodW5rcyBhdCB0aGUgZW5kICovCi0JCQkJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0g
U0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAotCQkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09
IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykpIHsKLQkJCQkJCS8qIHR1cm4gb2ZmIHRoZSB0aW1lciAq
LwotCQkJCQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVy
LnRpbWVyKSkgewotCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUkVDViwK
LQkJCQkJCQkJCWlucCwgc3RjYiwgbmV0LAotCQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ18xKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQljdGxf
Y250Kys7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyoKLQkJCQkJICogT3RoZXIgY2h1bmtzLCBzaW5j
ZSB0aGV5IGhhdmUKLQkJCQkJICogdGltZXJzIHJ1bm5pbmcgKGkuZS4gQ09PS0lFKQotCQkJCQkg
KiB3ZSBqdXN0ICJ0cnVzdCIgdGhhdCBpdAotCQkJCQkgKiBnZXRzIHNlbnQgb3IgcmV0cmFuc21p
dHRlZC4KLQkJCQkJICovCi0JCQkJCWN0bF9jbnQrKzsKLQkJCQkJaWYgKGNoay0+cmVjLmNodW5r
X2lkLmlkID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKLQkJCQkJCWNvb2tpZSA9IDE7Ci0JCQkJCQlu
b19vdXRfY250ID0gMTsKLQkJCQkJfSBlbHNlIGlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBT
Q1RQX0VDTl9FQ0hPKSB7Ci0JCQkJCQkvKgotCQkJCQkJICogSW5jcmVtZW50IGVjbmUgc2VuZCBj
b3VudCBoZXJlCi0JCQkJCQkgKiB0aGlzIG1lYW5zIHdlIG1heSBiZSBvdmVyLXplYWxvdXMgaW4K
LQkJCQkJCSAqIG91ciBjb3VudGluZyBpZiB0aGUgc2VuZCBmYWlscywgYnV0IGl0cwotCQkJCQkJ
ICogdGhlIGJlc3QgcGxhY2UgdG8gZG8gaXQgKHdlIHVzZWQgdG8gZG8KLQkJCQkJCSAqIGl0IGlu
IHRoZSBxdWV1ZSBvZiB0aGUgY2h1bmssIGJ1dCB0aGF0IGRpZAotCQkJCQkJICogbm90IHRlbGwg
aG93IG1hbnkgdGltZXMgaXQgd2FzIHNlbnQuCi0JCQkJCQkgKi8KLQkJCQkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3NlbmRlY25lKTsKLQkJCQkJfQotCQkJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1NFTlQ7Ci0JCQkJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKLQkJCQkJCWNoay0+d2hv
VG8gPSBuZXQ7Ci0JCQkJCQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOwotCQkJ
CQl9Ci0JCQkJCWNoay0+c25kX2NvdW50Kys7Ci0JCQkJfQotCQkJCWlmIChtdHUgPT0gMCkgewot
CQkJCQkvKgotCQkJCQkgKiBPayB3ZSBhcmUgb3V0IG9mIHJvb20gYnV0IHdlIGNhbgotCQkJCQkg
KiBvdXRwdXQgd2l0aG91dCBlZmZlY3RpbmcgdGhlCi0JCQkJCSAqIGZsaWdodCBzaXplIHNpbmNl
IHRoaXMgbGl0dGxlIGd1eQotCQkJCQkgKiBpcyBhIGNvbnRyb2wgb25seSBwYWNrZXQuCi0JCQkJ
CSAqLwotCQkJCQlpZiAoYXNjb25mKSB7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9BU0NPTkYsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJCS8qCi0JCQkJCQkgKiBkbyBO
T1QgY2xlYXIgdGhlIGFzY29uZgotCQkJCQkJICogZmxhZyBhcyBpdCBpcyB1c2VkIHRvIGRvCi0J
CQkJCQkgKiBhcHByb3ByaWF0ZSBzb3VyY2UgYWRkcmVzcwotCQkJCQkJICogc2VsZWN0aW9uLgot
CQkJCQkJICovCi0JCQkJCX0KLQkJCQkJaWYgKGNvb2tpZSkgewotCQkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJCQljb29r
aWUgPSAwOwotCQkJCQl9Ci0JCQkJCS8qIE9ubHkgSEIgb3IgQVNDT05GIGFkdmFuY2VzIHRpbWUg
Ki8KLQkJCQkJaWYgKGhiZmxhZykgewotCQkJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsKLQkJ
CQkJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTChub3cpOwotCQkJCQkJCSpub3dfZmlsbGVk
ID0gMTsKLQkJCQkJCX0KLQkJCQkJCW5ldC0+bGFzdF9zZW50X3RpbWUgPSAqbm93OwotCQkJCQkJ
aGJmbGFnID0gMDsKLQkJCQkJfQotCQkJCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVu
a19vdXRwdXQoaW5wLCBzdGNiLCBuZXQsCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKLQkJCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dGNoYWluLAotCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0aF9vZmZzZXQsIGF1dGgs
Ci0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29j
LmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwKLQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vX2ZyYWdtZW50ZmxnLCAwLCBhc2NvbmYsCi0JCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0
LAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwoc3Rj
Yi0+YXNvYy5wZWVyX3Z0YWcpLAotCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAotI2VuZGlmCi0J
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkg
ewotCQkJCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5vdCBvdXRwdXQgKi8KLQkJCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCQkJ
CWlmIChmcm9tX3doZXJlID09IDApIHsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3ds
ZXZlbGVycnVzcik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewotCQkJ
CQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKLQkJCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19sb3dsZXZlbGVycik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoZXJyb3IgPT0gRUhPU1RVTlJFQUNI
KSB7Ci0JCQkJCQkJLyoKLQkJCQkJCQkgKiBEZXN0aW5hdGlvbiB3ZW50Ci0JCQkJCQkJICogdW5y
ZWFjaGFibGUKLQkJCQkJCQkgKiBkdXJpbmcgdGhpcyBzZW5kCi0JCQkJCQkJICovCi0JCQkJCQkJ
c2N0cF9tb3ZlX2NodW5rc19mcm9tX25ldChzdGNiLCBuZXQpOwotCQkJCQkJfQotCQkJCQkJKnJl
YXNvbl9jb2RlID0gNzsKLQkJCQkJCWJyZWFrOwotCQkJCQl9IGVsc2UgewotCQkJCQkJYXNvYy0+
aWZwX2hhZF9lbm9idWYgPSAwOwotCQkJCQl9Ci0JCQkJCS8qCi0JCQkJCSAqIGluY3JlYXNlIHRo
ZSBudW1iZXIgd2Ugc2VudCwgaWYgYQotCQkJCQkgKiBjb29raWUgaXMgc2VudCB3ZSBkb24ndCB0
ZWxsIHRoZW0KLQkJCQkJICogYW55IHdhcyBzZW50IG91dC4KLQkJCQkJICovCi0JCQkJCW91dGNo
YWluID0gZW5kb3V0Y2hhaW4gPSBOVUxMOwotCQkJCQlhdXRoID0gTlVMTDsKLQkJCQkJYXV0aF9v
ZmZzZXQgPSAwOwotCQkJCQlpZiAoIW5vX291dF9jbnQpCi0JCQkJCQkqbnVtX291dCArPSBjdGxf
Y250OwotCQkJCQkvKiByZWNhbGMgYSBjbGVhbiBzbGF0ZSBhbmQgc2V0dXAgKi8KLQkJCQkJc3dp
dGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCQkJ
Y2FzZSBBRl9JTkVUOgotCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhF
QUQ7Ci0JCQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCQkJY2FzZSBBRl9J
TkVUNjoKLQkJCQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJ
CWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCQkJY2FzZSBB
Rl9DT05OOgotCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsK
LQkJCQkJCQlicmVhazsKLSNlbmRpZgotCQkJCQkJZGVmYXVsdDoKLQkJCQkJCQkvKiBUU05IICov
Ci0JCQkJCQkJbXR1ID0gbmV0LT5tdHU7Ci0JCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQkJdG9f
b3V0ID0gMDsKLQkJCQkJbm9fZnJhZ21lbnRmbGcgPSAxOwotCQkJCX0KLQkJCX0KLQkJfQotCQlp
ZiAoZXJyb3IgIT0gMCkgewotCQkJLyogdHJ5IG5leHQgbmV0ICovCi0JCQljb250aW51ZTsKLQkJ
fQotCQkvKiBKUkk6IGlmIGRlc3QgaXMgaW4gUEYgc3RhdGUsIGRvIG5vdCBzZW5kIGRhdGEgdG8g
aXQgKi8KLQkJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgotCQkgICAgKG5ldCAh
PSBzdGNiLT5hc29jLmFsdGVybmF0ZSkgJiYKLQkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUEYpKSB7Ci0JCQlnb3RvIG5vX2RhdGFfZmlsbDsKLQkJfQotCQlpZiAobmV0LT5mbGln
aHRfc2l6ZSA+PSBuZXQtPmN3bmQpIHsKLQkJCWdvdG8gbm9fZGF0YV9maWxsOwotCQl9Ci0JCWlm
ICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkJICAgIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfYnVmZmVyX3NwbGl0dGluZykgJiBTQ1RQX1JFQ1ZfQlVGRkVSX1NQTElUVElORykgJiYK
LQkJICAgIChuZXQtPmZsaWdodF9zaXplID4gbWF4X3J3bmRfcGVyX2Rlc3QpKSB7Ci0JCQlnb3Rv
IG5vX2RhdGFfZmlsbDsKLQkJfQotCQkvKgotCQkgKiBXZSBuZWVkIGEgc3BlY2lmaWMgYWNjb3Vu
dGluZyBmb3IgdGhlIHVzYWdlIG9mIHRoZQotCQkgKiBzZW5kIGJ1ZmZlci4gV2UgYWxzbyBuZWVk
IHRvIGNoZWNrIHRoZSBudW1iZXIgb2YgbWVzc2FnZXMKLQkJICogcGVyIG5ldC4gRm9yIG5vdywg
dGhpcyBpcyBiZXR0ZXIgdGhhbiBub3RoaW5nIGFuZCBpdAotCQkgKiBkaXNhYmxlZCBieSBkZWZh
dWx0Li4uCi0JCSAqLwotCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCi0JCSAg
ICAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpICYgU0NUUF9TRU5EX0JV
RkZFUl9TUExJVFRJTkcpICYmCi0JCSAgICAobWF4X3NlbmRfcGVyX2Rlc3QgPiAwKSAmJgotCQkg
ICAgKG5ldC0+ZmxpZ2h0X3NpemUgPiBtYXhfc2VuZF9wZXJfZGVzdCkpIHsKLQkJCWdvdG8gbm9f
ZGF0YV9maWxsOwotCQl9Ci0JCS8qKioqKioqKioqKioqKioqKioqKiovCi0JCS8qIERhdGEgdHJh
bnNtaXNzaW9uICovCi0JCS8qKioqKioqKioqKioqKioqKioqKiovCi0JCS8qCi0JCSAqIGlmIEFV
VEggZm9yIERBVEEgaXMgcmVxdWlyZWQgYW5kIG5vIEFVVEggaGFzIGJlZW4gYWRkZWQKLQkJICog
eWV0LCBhY2NvdW50IGZvciB0aGlzIGluIHRoZSBtdHUgbm93Li4uIGlmIG5vIGRhdGEgY2FuIGJl
Ci0JCSAqIGJ1bmRsZWQsIHRoaXMgYWRqdXN0bWVudCB3b24ndCBtYXR0ZXIgYW55d2F5cyBzaW5j
ZSB0aGUKLQkJICogcGFja2V0IHdpbGwgYmUgZ29pbmcgb3V0Li4uCi0JCSAqLwotCQlkYXRhX2F1
dGhfcmVxZCA9IHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsCi0JCQkJCQkJ
ICAgICBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpOwotCQlpZiAoZGF0YV9hdXRoX3JlcWQg
JiYgKGF1dGggPT0gTlVMTCkpIHsKLQkJCW10dSAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihz
dGNiLT5hc29jLnBlZXJfaG1hY19pZCk7Ci0JCX0KLQkJLyogbm93IGxldHMgYWRkIGFueSBkYXRh
IHdpdGhpbiB0aGUgTVRVIGNvbnN0cmFpbnRzICovCi0JCXN3aXRjaCAoKChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmbmV0LT5yby5fbF9hZGRyKS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNl
IEFGX0lORVQ6Ci0JCQlpZiAobmV0LT5tdHUgPiBTQ1RQX01JTl9WNF9PVkVSSEVBRCkKLQkJCQlv
bXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCWVsc2UKLQkJCQlvbXR1
ID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoK
LQkJCWlmIChuZXQtPm10dSA+IFNDVFBfTUlOX09WRVJIRUFEKQotCQkJCW9tdHUgPSBuZXQtPm10
dSAtIFNDVFBfTUlOX09WRVJIRUFEOwotCQkJZWxzZQotCQkJCW9tdHUgPSAwOwotCQkJYnJlYWs7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNhc2UgQUZfQ09OTjoKLQkJ
CWlmIChuZXQtPm10dSA+IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpIHsKLQkJCQlvbXR1ID0gbmV0
LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCQkJfSBlbHNlIHsKLQkJCQlvbXR1ID0g
MDsKLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQkvKiBUU05IICovCi0J
CQlvbXR1ID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoKChTQ1RQX0dFVF9TVEFURShhc29j
KSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8Ci0JCSAgICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKLQkJICAgICAoc2tpcF9kYXRhX2Zv
cl90aGlzX25ldCA9PSAwKSkgfHwKLQkJICAgIChjb29raWUpKSB7Ci0JCQlUQUlMUV9GT1JFQUNI
X1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQkJaWYg
KG5vX2RhdGFfY2h1bmtzKSB7Ci0JCQkJCS8qIGxldCBvbmx5IGNvbnRyb2wgZ28gb3V0ICovCi0J
CQkJCSpyZWFzb25fY29kZSA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAobmV0LT5m
bGlnaHRfc2l6ZSA+PSBuZXQtPmN3bmQpIHsKLQkJCQkJLyogc2tpcCB0aGlzIG5ldCwgbm8gcm9v
bSBmb3IgZGF0YSAqLwotCQkJCQkqcmVhc29uX2NvZGUgPSAyOwotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQkJaWYgKChjaGstPndob1RvICE9IE5VTEwpICYmCi0JCQkJICAgIChjaGstPndob1RvICE9
IG5ldCkpIHsKLQkJCQkJLyogRG9uJ3Qgc2VuZCB0aGUgY2h1bmsgb24gdGhpcyBuZXQgKi8KLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotCi0JCQkJaWYgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAw
KSB7Ci0JCQkJCWlmICgoYXNvYy0+YWx0ZXJuYXRlKSAmJgotCQkJCQkgICAgKGFzb2MtPmFsdGVy
bmF0ZSAhPSBuZXQpICYmCi0JCQkJCSAgICAoY2hrLT53aG9UbyA9PSBOVUxMKSkgewotCQkJCQkJ
Y29udGludWU7Ci0JCQkJCX0gZWxzZSBpZiAoKG5ldCAhPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0
aW9uKSAmJgotCQkJCQkJICAgKGFzb2MtPmFsdGVybmF0ZSA9PSBOVUxMKSAmJgotCQkJCQkJICAg
KGNoay0+d2hvVG8gPT0gTlVMTCkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJfQot
CQkJCWlmICgoY2hrLT5zZW5kX3NpemUgPiBvbXR1KSAmJiAoKGNoay0+ZmxhZ3MgJiBDSFVOS19G
TEFHU19GUkFHTUVOVF9PSykgPT0gMCkpIHsKLQkJCQkJLyotCi0JCQkJCSAqIHN0cmFuZ2UsIHdl
IGhhdmUgYSBjaHVuayB0aGF0IGlzCi0JCQkJCSAqIHRvIGJpZyBmb3IgaXRzIGRlc3RpbmF0aW9u
IGFuZAotCQkJCQkgKiB5ZXQgbm8gZnJhZ21lbnQgb2sgZmxhZy4KLQkJCQkJICogU29tZXRoaW5n
IHdlbnQgd3Jvbmcgd2hlbiB0aGUKLQkJCQkJICogUE1UVSBjaGFuZ2VkLi4ud2UgZGlkIG5vdCBt
YXJrCi0JCQkJCSAqIHRoaXMgY2h1bmsgZm9yIHNvbWUgcmVhc29uPz8gSQotCQkJCQkgKiB3aWxs
IGZpeCBpdCBoZXJlIGJ5IGxldHRpbmcgSVAKLQkJCQkJICogZnJhZ21lbnQgaXQgZm9yIG5vdyBh
bmQgcHJpbnRpbmcKLQkJCQkJICogYSB3YXJuaW5nLiBUaGlzIHJlYWxseSBzaG91bGQgbm90Ci0J
CQkJCSAqIGhhcHBlbiAuLi4KLQkJCQkJICovCi0JCQkJCVNDVFBfUFJJTlRGKCJXYXJuaW5nIGNo
dW5rIG9mICVkIGJ5dGVzID4gbXR1OiVkIGFuZCB5ZXQgUE1UVSBkaXNjIG1pc3NlZFxuIiwKLQkJ
CQkJCSAgICBjaGstPnNlbmRfc2l6ZSwgbXR1KTsKLQkJCQkJY2hrLT5mbGFncyB8PSBDSFVOS19G
TEFHU19GUkFHTUVOVF9PSzsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9l
bmFibGVfc2Fja19pbW1lZGlhdGVseSkgJiYKLQkJCQkgICAgKChhc29jLT5zdGF0ZSAmIFNDVFBf
U1RBVEVfU0hVVERPV05fUEVORElORykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSkg
ewotCQkJCQlzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICpkY2hraDsKLQotCQkJCQlkY2hraCA9IG10
b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopOwotCQkJCQlkY2hraC0+Y2gu
Y2h1bmtfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7Ci0JCQkJfQotCQkJCWlm
ICgoKGNoay0+c2VuZF9zaXplIDw9IG10dSkgJiYgKGNoay0+c2VuZF9zaXplIDw9IHJfbXR1KSkg
fHwKLQkJCQkgICAgKChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spICYmIChj
aGstPnNlbmRfc2l6ZSA8PSBhc29jLT5wZWVyc19yd25kKSkpIHsKLQkJCQkJLyogb2sgd2Ugd2ls
bCBhZGQgdGhpcyBvbmUgKi8KLQotCQkJCQkvKgotCQkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywg
aWYgY2h1bmsKLQkJCQkJICogcmVxdWlyZXMgaXQsIHNhdmUgdGhlIG9mZnNldCBpbnRvCi0JCQkJ
CSAqIHRoZSBjaGFpbiBmb3IgQVVUSAotCQkJCQkgKi8KLQkJCQkJaWYgKGRhdGFfYXV0aF9yZXFk
KSB7Ci0JCQkJCQlpZiAoYXV0aCA9PSBOVUxMKSB7Ci0JCQkJCQkJb3V0Y2hhaW4gPSBzY3RwX2Fk
ZF9hdXRoX2NodW5rKG91dGNoYWluLAotCQkJCQkJCQkJCSAgICAgICAmZW5kb3V0Y2hhaW4sCi0J
CQkJCQkJCQkJICAgICAgICZhdXRoLAotCQkJCQkJCQkJCSAgICAgICAmYXV0aF9vZmZzZXQsCi0J
CQkJCQkJCQkJICAgICAgIHN0Y2IsCi0JCQkJCQkJCQkJICAgICAgIFNDVFBfREFUQSk7Ci0JCQkJ
CQkJYXV0aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlpZDsKLQkJCQkJCQlvdmVycmlkZV9vayA9IDA7
Ci0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3Mp
OwotCQkJCQkJfSBlbHNlIGlmIChvdmVycmlkZV9vaykgewotCQkJCQkJCS8qIHVzZSB0aGlzIGRh
dGEncyBrZXlpZCAqLwotCQkJCQkJCWF1dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7Ci0JCQkJ
CQkJb3ZlcnJpZGVfb2sgPSAwOwotCQkJCQkJfSBlbHNlIGlmIChhdXRoX2tleWlkICE9IGNoay0+
YXV0aF9rZXlpZCkgewotCQkJCQkJCS8qIGRpZmZlcmVudCBrZXlpZCwgc28gZG9uZSBidW5kbGlu
ZyAqLwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCW91dGNoYWluID0gc2N0
cF9jb3B5X21idWZjaGFpbihjaGstPmRhdGEsIG91dGNoYWluLCAmZW5kb3V0Y2hhaW4sIDAsCi0J
CQkJCQkJCSAgICAgICBjaGstPnNlbmRfc2l6ZSwgY2hrLT5jb3B5X2J5X3JlZik7Ci0JCQkJCWlm
IChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
Ik5vIG1lbW9yeT9cbiIpOwotCQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+
cnh0X3RpbWVyLnRpbWVyKSkgewotCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJCX0KLQkJCQkJCSpyZWFzb25fY29kZSA9
IDM7Ci0JCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJCQkJcmV0dXJuIChFTk9NRU0pOwotCQkJCQl9Ci0J
CQkJCS8qIHVwYXRlIG91ciBNVFUgc2l6ZSAqLwotCQkJCQkvKiBEbyBjbGVhciBJUF9ERiA/ICov
Ci0JCQkJCWlmIChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spIHsKLQkJCQkJ
CW5vX2ZyYWdtZW50ZmxnID0gMDsKLQkJCQkJfQotCQkJCQkvKiB1bnNpZ25lZCBzdWJ0cmFjdGlv
biBvZiBtdHUgKi8KLQkJCQkJaWYgKG10dSA+IGNoay0+c2VuZF9zaXplKQotCQkJCQkJbXR1IC09
IGNoay0+c2VuZF9zaXplOwotCQkJCQllbHNlCi0JCQkJCQltdHUgPSAwOwotCQkJCQkvKiB1bnNp
Z25lZCBzdWJ0cmFjdGlvbiBvZiByX210dSAqLwotCQkJCQlpZiAocl9tdHUgPiBjaGstPnNlbmRf
c2l6ZSkKLQkJCQkJCXJfbXR1IC09IGNoay0+c2VuZF9zaXplOwotCQkJCQllbHNlCi0JCQkJCQly
X210dSA9IDA7Ci0KLQkJCQkJdG9fb3V0ICs9IGNoay0+c2VuZF9zaXplOwotCQkJCQlpZiAoKHRv
X291dCA+IG14X210dSkgJiYgbm9fZnJhZ21lbnRmbGcpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0J
CQkJCQlwYW5pYygiRXhjZWVkaW5nIG10dSBvZiAlZCBvdXQgc2l6ZSBpcyAlZCIsIG14X210dSwg
dG9fb3V0KTsKLSNlbHNlCi0JCQkJCQlTQ1RQX1BSSU5URigiRXhjZWVkaW5nIG10dSBvZiAlZCBv
dXQgc2l6ZSBpcyAlZFxuIiwKLQkJCQkJCQkgICAgbXhfbXR1LCB0b19vdXQpOwotI2VuZGlmCi0J
CQkJCX0KLQkJCQkJY2hrLT53aW5kb3dfcHJvYmUgPSAwOwotCQkJCQlkYXRhX2xpc3RbYnVuZGxl
X2F0KytdID0gY2hrOwotCQkJCQlpZiAoYnVuZGxlX2F0ID49IFNDVFBfTUFYX0RBVEFfQlVORExJ
TkcpIHsKLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0JCQkJCWlmIChjaGstPnNlbnQgPT0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQpIHsKLQkJCQkJCWlmICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBT
Q1RQX0RBVEFfVU5PUkRFUkVEKSA9PSAwKSB7Ci0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dG9yZGVyY2h1bmtzKTsKLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dHVub3JkZXJjaHVua3MpOwotCQkJCQkJfQotCQkJ
CQkJaWYgKCgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSA9
PSBTQ1RQX0RBVEFfTEFTVF9GUkFHKSAmJgotCQkJCQkJICAgICgoY2hrLT5yZWMuZGF0YS5yY3Zf
ZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgPT0gMCkpCi0JCQkJCQkJLyogQ291bnQgbnVt
YmVyIG9mIHVzZXIgbXNnJ3MgdGhhdCB3ZXJlIGZyYWdtZW50ZWQKLQkJCQkJCQkgKiB3ZSBkbyB0
aGlzIGJ5IGNvdW50aW5nIHdoZW4gd2Ugc2VlIGEgTEFTVCBmcmFnbWVudAotCQkJCQkJCSAqIG9u
bHkuCi0JCQkJCQkJICovCi0JCQkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2Zy
YWd1c3Jtc2dzKTsKLQkJCQkJfQotCQkJCQlpZiAoKG10dSA9PSAwKSB8fCAocl9tdHUgPT0gMCkg
fHwgKG9uZV9jaHVuaykpIHsKLQkJCQkJCWlmICgob25lX2NodW5rKSAmJiAoc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPT0gMCkpIHsKLQkJCQkJCQlkYXRhX2xpc3RbMF0tPndpbmRvd19wcm9iZSA9
IDE7Ci0JCQkJCQkJbmV0LT53aW5kb3dfcHJvYmUgPSAxOwotCQkJCQkJfQotCQkJCQkJYnJlYWs7
Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQkvKgotCQkJCQkgKiBNdXN0IGJlIHNlbnQgaW4g
b3JkZXIgb2YgdGhlCi0JCQkJCSAqIFRTTidzIChvbiBhIG5ldHdvcmspCi0JCQkJCSAqLwotCQkJ
CQlicmVhazsKLQkJCQl9Ci0JCQl9CS8qIGZvciAoY2h1bmsgZ2F0aGVyIGxvb3AgZm9yIHRoaXMg
bmV0KSAqLwotCQl9CQkvKiBpZiBhc29jLnN0YXRlIE9QRU4gKi8KLQlub19kYXRhX2ZpbGw6Ci0J
CS8qIElzIHRoZXJlIHNvbWV0aGluZyB0byBzZW5kIGZvciB0aGlzIGRlc3RpbmF0aW9uPyAqLwot
CQlpZiAob3V0Y2hhaW4pIHsKLQkJCS8qIFdlIG1heSBuZWVkIHRvIHN0YXJ0IGEgY29udHJvbCB0
aW1lciBvciB0d28gKi8KLQkJCWlmIChhc2NvbmYpIHsKLQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFND
VFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwKLQkJCQkJCSBzdGNiLCBuZXQpOwotCQkJCS8qCi0J
CQkJICogZG8gTk9UIGNsZWFyIHRoZSBhc2NvbmYgZmxhZyBhcyBpdCBpcyB1c2VkCi0JCQkJICog
dG8gZG8gYXBwcm9wcmlhdGUgc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uLgotCQkJCSAqLwotCQkJ
fQotCQkJaWYgKGNvb2tpZSkgewotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X0NPT0tJRSwgaW5wLCBzdGNiLCBuZXQpOwotCQkJCWNvb2tpZSA9IDA7Ci0JCQl9Ci0JCQkvKiBt
dXN0IHN0YXJ0IGEgc2VuZCB0aW1lciBpZiBkYXRhIGlzIGJlaW5nIHNlbnQgKi8KLQkJCWlmIChi
dW5kbGVfYXQgJiYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVy
KSkpIHsKLQkJCQkvKgotCQkJCSAqIG5vIHRpbWVyIHJ1bm5pbmcgb24gdGhpcyBkZXN0aW5hdGlv
bgotCQkJCSAqIHJlc3RhcnQgaXQuCi0JCQkJICovCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJfQotCQkJaWYgKGJ1bmRsZV9h
dCB8fCBoYmZsYWcpIHsKLQkJCQkvKiBGb3IgZGF0YS9hc2NvbmYgYW5kIGhiIHNldCB0aW1lICov
Ci0JCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsKLQkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJ
TUVWQUwobm93KTsKLQkJCQkJKm5vd19maWxsZWQgPSAxOwotCQkJCX0KLQkJCQluZXQtPmxhc3Rf
c2VudF90aW1lID0gKm5vdzsKLQkJCX0KLQkJCS8qIE5vdyBzZW5kIGl0LCBpZiB0aGVyZSBpcyBh
bnl0aGluZyB0byBzZW5kIDo+ICovCi0JCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVu
a19vdXRwdXQoaW5wLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0Y2IsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LAot
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmbmV0LT5yby5fbF9hZGRyLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dGNoYWluLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dGhfb2Zmc2V0LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dGgsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXV0aF9rZXlpZCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b19mcmFnbWVudGZsZywKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBidW5kbGVfYXQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YXNjb25mLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+
c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAotCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IDAsIDAsCi0jZW5kaWYKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzb19sb2NrZWQpKSkgewotCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0ICovCi0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJy
b3IpOwotCQkJCWlmIChmcm9tX3doZXJlID09IDApIHsKLQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfbG93bGV2ZWxlcnJ1c3IpOwotCQkJCX0KLQkJCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgewot
CQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7Ci0JCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X2xvd2xldmVsZXJyKTsKLQkJCQl9Ci0JCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgewot
CQkJCQkvKgotCQkJCQkgKiBEZXN0aW5hdGlvbiB3ZW50IHVucmVhY2hhYmxlCi0JCQkJCSAqIGR1
cmluZyB0aGlzIHNlbmQKLQkJCQkJICovCi0JCQkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQo
c3RjYiwgbmV0KTsKLQkJCQl9Ci0JCQkJKnJlYXNvbl9jb2RlID0gNjsKLQkJCQkvKi0KLQkJCQkg
KiBJIGFkZCB0aGlzIGxpbmUgdG8gYmUgcGFyYW5vaWQuIEFzIGZhciBhcwotCQkJCSAqIEkgY2Fu
IHRlbGwgdGhlIGNvbnRpbnVlLCB0YWtlcyB1cyBiYWNrIHRvCi0JCQkJICogdGhlIHRvcCBvZiB0
aGUgZm9yLCBidXQganVzdCB0byBtYWtlIHN1cmUKLQkJCQkgKiBJIHdpbGwgcmVzZXQgdGhlc2Ug
YWdhaW4gaGVyZS4KLQkJCQkgKi8KLQkJCQljdGxfY250ID0gYnVuZGxlX2F0ID0gMDsKLQkJCQlj
b250aW51ZTsgLyogVGhpcyB0YWtlcyB1cyBiYWNrIHRvIHRoZSBmb3IoKSBmb3IgdGhlIG5ldHMu
ICovCi0JCQl9IGVsc2UgewotCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKLQkJCX0KLQkJ
CWVuZG91dGNoYWluID0gTlVMTDsKLQkJCWF1dGggPSBOVUxMOwotCQkJYXV0aF9vZmZzZXQgPSAw
OwotCQkJaWYgKCFub19vdXRfY250KSB7Ci0JCQkJKm51bV9vdXQgKz0gKGN0bF9jbnQgKyBidW5k
bGVfYXQpOwotCQkJfQotCQkJaWYgKGJ1bmRsZV9hdCkgewotCQkJCS8qIHNldHVwIGZvciBhIFJU
TyBtZWFzdXJlbWVudCAqLwotCQkJCXRzbnNfc2VudCA9IGRhdGFfbGlzdFswXS0+cmVjLmRhdGEu
dHNuOwotCQkJCS8qIGZpbGwgdGltZSBpZiBub3QgYWxyZWFkeSBmaWxsZWQgKi8KLQkJCQlpZiAo
Km5vd19maWxsZWQgPT0gMCkgewotCQkJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNv
Yy0+dGltZV9sYXN0X3NlbnQpOwotCQkJCQkqbm93X2ZpbGxlZCA9IDE7Ci0JCQkJCSpub3cgPSBh
c29jLT50aW1lX2xhc3Rfc2VudDsKLQkJCQl9IGVsc2UgewotCQkJCQlhc29jLT50aW1lX2xhc3Rf
c2VudCA9ICpub3c7Ci0JCQkJfQotCQkJCWlmIChuZXQtPnJ0b19uZWVkZWQpIHsKLQkJCQkJZGF0
YV9saXN0WzBdLT5kb19ydHQgPSAxOwotCQkJCQluZXQtPnJ0b19uZWVkZWQgPSAwOwotCQkJCX0K
LQkJCQlTQ1RQX1NUQVRfSU5DUl9CWShzY3Rwc19zZW5kZGF0YSwgYnVuZGxlX2F0KTsKLQkJCQlz
Y3RwX2NsZWFuX3VwX2RhdGFsaXN0KHN0Y2IsIGFzb2MsIGRhdGFfbGlzdCwgYnVuZGxlX2F0LCBu
ZXQpOwotCQkJfQotCQkJaWYgKG9uZV9jaHVuaykgewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0J
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCB0c25zX3NlbnQsIFND
VFBfQ1dORF9MT0dfRlJPTV9TRU5EKTsKLQkJfQotCX0KLQlpZiAob2xkX3N0YXJ0X2F0ID09IE5V
TEwpIHsKLQkJb2xkX3N0YXJ0X2F0ID0gc3RhcnRfYXQ7Ci0JCXN0YXJ0X2F0ID0gVEFJTFFfRklS
U1QoJmFzb2MtPm5ldHMpOwotCQlpZiAob2xkX3N0YXJ0X2F0KQotCQkJZ290byBhZ2Fpbl9vbmVf
bW9yZV90aW1lOwotCX0KLQotCS8qCi0JICogQXQgdGhlIGVuZCB0aGVyZSBzaG91bGQgYmUgbm8g
Tk9OIHRpbWVkIGNodW5rcyBoYW5naW5nIG9uIHRoaXMKLQkgKiBxdWV1ZS4KLQkgKi8KLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAqbnVtX291dCwgU0NUUF9DV05E
X0xPR19GUk9NX1NFTkQpOwotCX0KLQlpZiAoKCpudW1fb3V0ID09IDApICYmICgqcmVhc29uX2Nv
ZGUgPT0gMCkpIHsKLQkJKnJlYXNvbl9jb2RlID0gNDsKLQl9IGVsc2UgewotCQkqcmVhc29uX2Nv
ZGUgPSA1OwotCX0KLQlzY3RwX2NsZWFuX3VwX2N0bChzdGNiLCBhc29jLCBzb19sb2NrZWQpOwot
CXJldHVybiAoMCk7Ci19Ci0KLXZvaWQKLXNjdHBfcXVldWVfb3BfZXJyKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IG1idWYgKm9wX2VycikKLXsKLQkvKi0KLQkgKiBQcmVwZW5kIGEgT1BF
UkFUSU9OQUxfRVJST1IgY2h1bmsgaGVhZGVyIGFuZCBwdXQgb24gdGhlIGVuZCBvZgotCSAqIHRo
ZSBjb250cm9sIGNodW5rIHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpoZHI7
Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXN0cnVjdCBtYnVmICptYXQsICpsYXN0
X21idWY7Ci0JdWludDMyX3QgY2h1bmtfbGVuZ3RoOwotCXVpbnQxNl90IHBhZGRpbmdfbGVuZ3Ro
OwotCi0JU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JU0NUUF9CVUZfUFJFUEVORChvcF9l
cnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIE1fTk9XQUlUKTsKLQlpZiAob3BfZXJy
ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlsYXN0X21idWYgPSBOVUxMOwotCWNodW5rX2xl
bmd0aCA9IDA7Ci0JZm9yIChtYXQgPSBvcF9lcnI7IG1hdCAhPSBOVUxMOyBtYXQgPSBTQ1RQX0JV
Rl9ORVhUKG1hdCkpIHsKLQkJY2h1bmtfbGVuZ3RoICs9IFNDVFBfQlVGX0xFTihtYXQpOwotCQlp
ZiAoU0NUUF9CVUZfTkVYVChtYXQpID09IE5VTEwpIHsKLQkJCWxhc3RfbWJ1ZiA9IG1hdDsKLQkJ
fQotCX0KLQlpZiAoY2h1bmtfbGVuZ3RoID4gU0NUUF9NQVhfQ0hVTktfTEVOR1RIKSB7Ci0JCXNj
dHBfbV9mcmVlbShvcF9lcnIpOwotCQlyZXR1cm47Ci0JfQotCXBhZGRpbmdfbGVuZ3RoID0gY2h1
bmtfbGVuZ3RoICUgNDsKLQlpZiAocGFkZGluZ19sZW5ndGggIT0gMCkgewotCQlwYWRkaW5nX2xl
bmd0aCA9IDQgLSBwYWRkaW5nX2xlbmd0aDsKLQl9Ci0JaWYgKHBhZGRpbmdfbGVuZ3RoICE9IDAp
IHsKLQkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobGFzdF9tYnVmLCBwYWRkaW5nX2xlbmd0aCkg
PT0gTlVMTCkgewotCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9
Ci0Jc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0J
CS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKLQkJcmV0dXJuOwotCX0K
LQljaGstPmNvcHlfYnlfcmVmID0gMDsKLQljaGstPnNlbmRfc2l6ZSA9ICh1aW50MTZfdCljaHVu
a19sZW5ndGg7Ci0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRf
Y291bnQgPSAwOwotCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNoay0+ZGF0YSA9IG9wX2Vy
cjsKLQljaGstPndob1RvID0gTlVMTDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfT1BF
UkFUSU9OX0VSUk9SOwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOwotCWhk
ciA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHItPmNodW5rX3R5
cGUgPSBTQ1RQX09QRVJBVElPTl9FUlJPUjsKLQloZHItPmNodW5rX2ZsYWdzID0gMDsKLQloZHIt
PmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKLQlUQUlMUV9JTlNFUlRfVEFJ
TCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQljaGst
PmFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci19Ci0KLWludAotc2N0cF9zZW5kX2Nvb2tpZV9lY2hv
KHN0cnVjdCBtYnVmICptLAotICAgIGludCBvZmZzZXQsCi0gICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKi0KLQkgKiBwdWxsIG91dCB0
aGUgY29va2llIGFuZCBwdXQgaXQgYXQgdGhlIGZyb250IG9mIHRoZSBjb250cm9sIGNodW5rCi0J
ICogcXVldWUuCi0JICovCi0JaW50IGF0OwotCXN0cnVjdCBtYnVmICpjb29raWU7Ci0Jc3RydWN0
IHNjdHBfcGFyYW1oZHIgcGFyYW0sICpwaGRyOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpoZHI7
Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXVpbnQxNl90IHB0eXBlLCBwbGVuOwot
Ci0JU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JLyogRmlyc3QgZmluZCB0aGUgY29va2ll
IGluIHRoZSBwYXJhbSBhcmVhICovCi0JY29va2llID0gTlVMTDsKLQlhdCA9IG9mZnNldCArIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKLQlmb3IgKDs7KSB7Ci0JCXBoZHIgPSBzY3Rw
X2dldF9uZXh0X3BhcmFtKG0sIGF0LCAmcGFyYW0sIHNpemVvZihwYXJhbSkpOwotCQlpZiAocGhk
ciA9PSBOVUxMKSB7Ci0JCQlyZXR1cm4gKC0zKTsKLQkJfQotCQlwdHlwZSA9IG50b2hzKHBoZHIt
PnBhcmFtX3R5cGUpOwotCQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKLQkJaWYg
KHB0eXBlID09IFNDVFBfU1RBVEVfQ09PS0lFKSB7Ci0JCQlpbnQgcGFkOwotCi0JCQkvKiBmb3Vu
ZCB0aGUgY29va2llICovCi0JCQlpZiAoKHBhZCA9IChwbGVuICUgNCkpKSB7Ci0JCQkJcGxlbiAr
PSA0IC0gcGFkOwotCQkJfQotCQkJY29va2llID0gU0NUUF9NX0NPUFlNKG0sIGF0LCBwbGVuLCBN
X05PV0FJVCk7Ci0JCQlpZiAoY29va2llID09IE5VTEwpIHsKLQkJCQkvKiBObyBtZW1vcnkgKi8K
LQkJCQlyZXR1cm4gKC0yKTsKLQkJCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5H
X0VOQUJMRSkgewotCQkJCXNjdHBfbG9nX21iYyhjb29raWUsIFNDVFBfTUJVRl9JQ09QWSk7Ci0J
CQl9Ci0jZW5kaWYKLQkJCWJyZWFrOwotCQl9Ci0JCWF0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwot
CX0KLQkvKiBvaywgd2UgZ290IHRoZSBjb29raWUgbGV0cyBjaGFuZ2UgaXQgaW50byBhIGNvb2tp
ZSBlY2hvIGNodW5rICovCi0JLyogZmlyc3QgdGhlIGNoYW5nZSBmcm9tIHBhcmFtIHRvIGNvb2tp
ZSAqLwotCWhkciA9IG10b2QoY29va2llLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHIt
PmNodW5rX3R5cGUgPSBTQ1RQX0NPT0tJRV9FQ0hPOwotCWhkci0+Y2h1bmtfZmxhZ3MgPSAwOwot
CS8qIGdldCB0aGUgY2h1bmsgc3R1ZmYgbm93IGFuZCBwbGFjZSBpdCBpbiB0aGUgRlJPTlQgb2Yg
dGhlIHF1ZXVlICovCi0Jc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9
PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0oY29va2llKTsKLQkJ
cmV0dXJuICgtNSk7Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5r
X2lkLmlkID0gU0NUUF9DT09LSUVfRUNITzsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9k
YXRhID0gMDsKLQljaGstPmZsYWdzID0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JY2hrLT5z
ZW5kX3NpemUgPSBwbGVuOwotCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNo
ay0+c25kX2NvdW50ID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmRhdGEg
PSBjb29raWU7Ci0JY2hrLT53aG9UbyA9IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9U
by0+cmVmX2NvdW50LCAxKTsKLQlUQUlMUV9JTlNFUlRfSEVBRCgmY2hrLT5hc29jLT5jb250cm9s
X3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQljaGstPmFzb2MtPmN0cmxfcXVldWVfY250
Kys7Ci0JcmV0dXJuICgwKTsKLX0KLQotdm9pZAotc2N0cF9zZW5kX2hlYXJ0YmVhdF9hY2soc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBtYnVmICptLAotICAgIGludCBvZmZzZXQs
Ci0gICAgaW50IGNoa19sZW5ndGgsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8q
Ci0JICogdGFrZSBhIEhCIHJlcXVlc3QgYW5kIG1ha2UgaXQgaW50byBhIEhCIGFjayBhbmQgc2Vu
ZCBpdC4KLQkgKi8KLQlzdHJ1Y3QgbWJ1ZiAqb3V0Y2hhaW47Ci0Jc3RydWN0IHNjdHBfY2h1bmto
ZHIgKmNoZHI7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCi0KLQlpZiAobmV0ID09
IE5VTEwpCi0JCS8qIG11c3QgaGF2ZSBhIG5ldCBwb2ludGVyICovCi0JCXJldHVybjsKLQotCW91
dGNoYWluID0gU0NUUF9NX0NPUFlNKG0sIG9mZnNldCwgY2hrX2xlbmd0aCwgTV9OT1dBSVQpOwot
CWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7Ci0JCS8qIGdhayBvdXQgb2YgbWVtb3J5ICovCi0JCXJl
dHVybjsKLQl9Ci0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNj
dHBfbG9nX21iYyhvdXRjaGFpbiwgU0NUUF9NQlVGX0lDT1BZKTsKLQl9Ci0jZW5kaWYKLQljaGRy
ID0gbXRvZChvdXRjaGFpbiwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2hkci0+Y2h1bmtf
dHlwZSA9IFNDVFBfSEVBUlRCRUFUX0FDSzsKLQljaGRyLT5jaHVua19mbGFncyA9IDA7Ci0JaWYg
KGNoa19sZW5ndGggJSA0KSB7Ci0JCS8qIG5lZWQgcGFkICovCi0JCXVpbnQzMl90IGNwdGhpcyA9
IDA7Ci0JCWludCBwYWRsZW47Ci0KLQkJcGFkbGVuID0gNCAtIChjaGtfbGVuZ3RoICUgNCk7Ci0J
CW1fY29weWJhY2sob3V0Y2hhaW4sIGNoa19sZW5ndGgsIHBhZGxlbiwgKGNhZGRyX3QpJmNwdGhp
cyk7Ci0JfQotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVM
TCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKLQkJcmV0
dXJuOwotCX0KLQljaGstPmNvcHlfYnlfcmVmID0gMDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9
IFNDVFBfSEVBUlRCRUFUX0FDSzsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0g
MTsKLQljaGstPmZsYWdzID0gMDsKLQljaGstPnNlbmRfc2l6ZSA9IGNoa19sZW5ndGg7Ci0JY2hr
LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWNo
ay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNoay0+ZGF0YSA9IG91dGNoYWluOwotCWNoay0+d2hv
VG8gPSBuZXQ7Ci0JYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0J
VEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNj
dHBfbmV4dCk7Ci0JY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwotfQotCi12b2lkCi1zY3Rw
X3NlbmRfY29va2llX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17Ci0JLyogZm9ybXVsYXRl
IGFuZCBxdWV1ZSBhIGNvb2tpZS1hY2sgYmFjayB0byBzZW5kZXIgKi8KLQlzdHJ1Y3QgbWJ1ZiAq
Y29va2llX2FjazsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOwotCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoazsKLQotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCi0JY29va2ll
X2FjayA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIp
LCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAoY29va2llX2FjayA9PSBOVUxMKSB7
Ci0JCS8qIG5vIG1idWYncyAqLwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY29v
a2llX2FjaywgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBj
aGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2Zy
ZWVtKGNvb2tpZV9hY2spOwotCQlyZXR1cm47Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwot
CWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9DT09LSUVfQUNLOwotCWNoay0+cmVjLmNodW5r
X2lkLmNhbl90YWtlX2RhdGEgPSAxOwotCWNoay0+ZmxhZ3MgPSAwOwotCWNoay0+c2VuZF9zaXpl
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVDsKLQljaGstPnNuZF9jb3VudCA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFz
b2M7Ci0JY2hrLT5kYXRhID0gY29va2llX2FjazsKLQlpZiAoY2hrLT5hc29jLT5sYXN0X2NvbnRy
b2xfY2h1bmtfZnJvbSAhPSBOVUxMKSB7Ci0JCWNoay0+d2hvVG8gPSBjaGstPmFzb2MtPmxhc3Rf
Y29udHJvbF9jaHVua19mcm9tOwotCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2Nv
dW50LCAxKTsKLQl9IGVsc2UgewotCQljaGstPndob1RvID0gTlVMTDsKLQl9Ci0JaGRyID0gbXRv
ZChjb29raWVfYWNrLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKLQloZHItPmNodW5rX3R5cGUg
PSBTQ1RQX0NPT0tJRV9BQ0s7Ci0JaGRyLT5jaHVua19mbGFncyA9IDA7Ci0JaGRyLT5jaHVua19s
ZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKGNvb2tpZV9hY2sp
ID0gY2hrLT5zZW5kX3NpemU7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJv
bF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2Nu
dCsrOwotCXJldHVybjsKLX0KLQotCi12b2lkCi1zY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCS8qIGZvcm11bGF0
ZSBhbmQgcXVldWUgYSBTSFVURE9XTi1BQ0sgYmFjayB0byB0aGUgc2VuZGVyICovCi0Jc3RydWN0
IG1idWYgKm1fc2h1dGRvd25fYWNrOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVuayAq
YWNrX2NwOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCW1fc2h1dGRvd25fYWNr
ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tf
Y2h1bmspLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAobV9zaHV0ZG93bl9hY2sg
PT0gTlVMTCkgewotCQkvKiBubyBtYnVmJ3MgKi8KLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9S
RVNWX1VGKG1fc2h1dGRvd25fYWNrLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0Jc2N0cF9hbGxvY19h
X2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAq
LwotCQlzY3RwX21fZnJlZW0obV9zaHV0ZG93bl9hY2spOwotCQlyZXR1cm47Ci0JfQotCWNoay0+
Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TSFVURE9XTl9B
Q0s7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7Ci0JY2hrLT5mbGFncyA9
IDA7Ci0JY2hrLT5zZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwotCWNo
ay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQlj
aGstPmZsYWdzID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmRhdGEgPSBt
X3NodXRkb3duX2FjazsKLQljaGstPndob1RvID0gbmV0OwotCWlmIChjaGstPndob1RvKSB7Ci0J
CWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCX0KLQlhY2tfY3Ag
PSBtdG9kKG1fc2h1dGRvd25fYWNrLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKik7
Ci0JYWNrX2NwLT5jaC5jaHVua190eXBlID0gU0NUUF9TSFVURE9XTl9BQ0s7Ci0JYWNrX2NwLT5j
aC5jaHVua19mbGFncyA9IDA7Ci0JYWNrX2NwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhjaGst
PnNlbmRfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKG1fc2h1dGRvd25fYWNrKSA9IGNoay0+c2VuZF9z
aXplOwotCVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwg
Y2hrLCBzY3RwX25leHQpOwotCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLQlyZXR1cm47
Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGEgU0hVVERP
V04gdG8gdGhlIHNlbmRlciAqLwotCXN0cnVjdCBtYnVmICptX3NodXRkb3duOwotCXN0cnVjdCBz
Y3RwX3NodXRkb3duX2NodW5rICpzaHV0ZG93bl9jcDsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGs7Ci0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1
ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0hV
VERPV04pIHsKLQkJCS8qIFdlIGFscmVhZHkgaGF2ZSBhIFNIVVRET1dOIHF1ZXVlZC4gUmV1c2Ug
aXQuICovCi0JCQlpZiAoY2hrLT53aG9UbykgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihj
aGstPndob1RvKTsKLQkJCQljaGstPndob1RvID0gTlVMTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9
Ci0JfQotCWlmIChjaGsgPT0gTlVMTCkgewotCQltX3NodXRkb3duID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayksIDAsIE1fTk9XQUlULCAx
LCBNVF9IRUFERVIpOwotCQlpZiAobV9zaHV0ZG93biA9PSBOVUxMKSB7Ci0JCQkvKiBubyBtYnVm
J3MgKi8KLQkJCXJldHVybjsKLQkJfQotCQlTQ1RQX0JVRl9SRVNWX1VGKG1fc2h1dGRvd24sIFND
VFBfTUlOX09WRVJIRUFEKTsKLQkJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JCWlm
IChjaGsgPT0gTlVMTCkgewotCQkJLyogbm8gbWVtb3J5ICovCi0JCQlzY3RwX21fZnJlZW0obV9z
aHV0ZG93bik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWNo
ay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TSFVURE9XTjsKLQkJY2hrLT5yZWMuY2h1bmtfaWQu
Y2FuX3Rha2VfZGF0YSA9IDE7Ci0JCWNoay0+ZmxhZ3MgPSAwOwotCQljaGstPnNlbmRfc2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayk7Ci0JCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fVU5TRU5UOwotCQljaGstPnNuZF9jb3VudCA9IDA7Ci0JCWNoay0+ZmxhZ3MgPSAw
OwotCQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQkJY2hrLT5kYXRhID0gbV9zaHV0ZG93bjsK
LQkJY2hrLT53aG9UbyA9IG5ldDsKLQkJaWYgKGNoay0+d2hvVG8pIHsKLQkJCWF0b21pY19hZGRf
aW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwotCQl9Ci0JCXNodXRkb3duX2NwID0gbXRv
ZChtX3NodXRkb3duLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqKTsKLQkJc2h1dGRvd25f
Y3AtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX1NIVVRET1dOOwotCQlzaHV0ZG93bl9jcC0+Y2guY2h1
bmtfZmxhZ3MgPSAwOwotCQlzaHV0ZG93bl9jcC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hr
LT5zZW5kX3NpemUpOwotCQlzaHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25fYWNrID0gaHRvbmwo
c3RjYi0+YXNvYy5jdW11bGF0aXZlX3Rzbik7Ci0JCVNDVFBfQlVGX0xFTihtX3NodXRkb3duKSA9
IGNoay0+c2VuZF9zaXplOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5jb250cm9s
X3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQkJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2Nu
dCsrOwotCX0gZWxzZSB7Ci0JCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5jb250cm9sX3NlbmRf
cXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQkJY2hrLT53aG9UbyA9IG5ldDsKLQkJaWYgKGNoay0+
d2hvVG8pIHsKLQkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwot
CQl9Ci0JCXNodXRkb3duX2NwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX3NodXRkb3du
X2NodW5rICopOwotCQlzaHV0ZG93bl9jcC0+Y3VtdWxhdGl2ZV90c25fYWNrID0gaHRvbmwoc3Rj
Yi0+YXNvYy5jdW11bGF0aXZlX3Rzbik7Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29j
LmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCX0KLQlyZXR1cm47Ci19Ci0K
LXZvaWQKLXNjdHBfc2VuZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsIGludCBhZGRyX2xvY2tlZCkKLXsKLQkvKgotCSAqIGZvcm11bGF0ZSBhbmQg
cXVldWUgYW4gQVNDT05GIHRvIHRoZSBwZWVyLgotCSAqIEFTQ09ORiBwYXJhbWV0ZXJzIHNob3Vs
ZCBiZSBxdWV1ZWQgb24gdGhlIGFzc29jIHF1ZXVlLgotCSAqLwotCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNoazsKLQlzdHJ1Y3QgbWJ1ZiAqbV9hc2NvbmY7Ci0JaW50IGxlbjsKLQotCVNDVFBf
VENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCi0JaWYgKCghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Mu
YXNjb25mX3NlbmRfcXVldWUpKSAmJgotCSAgICAoIXNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5z
Y3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NPTkZTKSkpIHsKLQkJLyogY2FuJ3Qg
c2VuZCBhIG5ldyBvbmUgaWYgdGhlcmUgaXMgb25lIGluIGZsaWdodCBhbHJlYWR5ICovCi0JCXJl
dHVybjsKLQl9Ci0KLQkvKiBjb21wb3NlIGFuIEFTQ09ORiBjaHVuaywgbWF4aW11bSBsZW5ndGgg
aXMgUE1UVSAqLwotCW1fYXNjb25mID0gc2N0cF9jb21wb3NlX2FzY29uZihzdGNiLCAmbGVuLCBh
ZGRyX2xvY2tlZCk7Ci0JaWYgKG1fYXNjb25mID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQot
CXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQkv
KiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fYXNjb25mKTsKLQkJcmV0dXJuOwotCX0K
LQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9B
U0NPTkY7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7Ci0JY2hrLT5mbGFn
cyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCWNoay0+ZGF0YSA9IG1fYXNjb25mOwotCWNo
ay0+c2VuZF9zaXplID0gbGVuOwotCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwot
CWNoay0+c25kX2NvdW50ID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPndo
b1RvID0gbmV0OwotCWlmIChjaGstPndob1RvKSB7Ci0JCWF0b21pY19hZGRfaW50KCZjaGstPndo
b1RvLT5yZWZfY291bnQsIDEpOwotCX0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5h
c2NvbmZfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCWNoay0+YXNvYy0+Y3RybF9xdWV1
ZV9jbnQrKzsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYikKLXsKLQkvKgotCSAqIGZvcm11bGF0ZSBhbmQgcXVldWUgYSBhc2Nv
bmYtYWNrIGJhY2sgdG8gc2VuZGVyLgotCSAqIHRoZSBhc2NvbmYtYWNrIG11c3QgYmUgc3RvcmVk
IGluIHRoZSB0Y2IuCi0JICovCi0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXN0cnVj
dCBzY3RwX2FzY29uZl9hY2sgKmFjaywgKmxhdGVzdF9hY2s7Ci0Jc3RydWN0IG1idWYgKm1fYWNr
OwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5VTEw7Ci0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VS
VChzdGNiKTsKLQkvKiBHZXQgdGhlIGxhdGVzdCBBU0NPTkYtQUNLICovCi0JbGF0ZXN0X2FjayA9
IFRBSUxRX0xBU1QoJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBzY3RwX2FzY29uZl9hY2to
ZWFkKTsKLQlpZiAobGF0ZXN0X2FjayA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGxh
dGVzdF9hY2stPmxhc3Rfc2VudF90byAhPSBOVUxMICYmCi0JICAgIGxhdGVzdF9hY2stPmxhc3Rf
c2VudF90byA9PSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tKSB7Ci0JCS8qIHdl
J3JlIGRvaW5nIGEgcmV0cmFuc21pc3Npb24gKi8KLQkJbmV0ID0gc2N0cF9maW5kX2FsdGVybmF0
ZV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSwgMCk7Ci0JCWlm
IChuZXQgPT0gTlVMTCkgewotCQkJLyogbm8gYWx0ZXJuYXRlICovCi0JCQlpZiAoc3RjYi0+YXNv
Yy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCQkJaWYgKHN0Y2ItPmFzb2Mu
YWx0ZXJuYXRlKSB7Ci0JCQkJCW5ldCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQkJCQl9Ci0J
CQl9IGVsc2UgewotCQkJCW5ldCA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207
Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBub3JtYWwgY2FzZSAqLwotCQlpZiAoc3RjYi0+
YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCQlpZiAoc3RjYi0+YXNv
Yy5hbHRlcm5hdGUpIHsKLQkJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCQkJfQotCQl9
IGVsc2UgewotCQkJbmV0ID0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbTsKLQkJ
fQotCX0KLQlsYXRlc3RfYWNrLT5sYXN0X3NlbnRfdG8gPSBuZXQ7Ci0KLQlUQUlMUV9GT1JFQUNI
KGFjaywgJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBuZXh0KSB7Ci0JCWlmIChhY2stPmRh
dGEgPT0gTlVMTCkgewotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBjb3B5IHRoZSBhc2NvbmZf
YWNrICovCi0JCW1fYWNrID0gU0NUUF9NX0NPUFlNKGFjay0+ZGF0YSwgMCwgTV9DT1BZQUxMLCBN
X05PV0FJVCk7Ci0JCWlmIChtX2FjayA9PSBOVUxMKSB7Ci0JCQkvKiBjb3VsZG4ndCBjb3B5IGl0
ICovCi0JCQlyZXR1cm47Ci0JCX0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5B
QkxFKSB7Ci0JCQlzY3RwX2xvZ19tYmMobV9hY2ssIFNDVFBfTUJVRl9JQ09QWSk7Ci0JCX0KLSNl
bmRpZgotCi0JCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCQlpZiAoY2hrID09IE5V
TEwpIHsKLQkJCS8qIG5vIG1lbW9yeSAqLwotCQkJaWYgKG1fYWNrKQotCQkJCXNjdHBfbV9mcmVl
bShtX2Fjayk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWNo
ay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9BU0NPTkZfQUNLOwotCQljaGstPnJlYy5jaHVua19p
ZC5jYW5fdGFrZV9kYXRhID0gMTsKLQkJY2hrLT5mbGFncyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5U
X09LOwotCQljaGstPndob1RvID0gbmV0OwotCQlpZiAoY2hrLT53aG9UbykgewotCQkJYXRvbWlj
X2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQkJY2hrLT5kYXRhID0g
bV9hY2s7Ci0JCWNoay0+c2VuZF9zaXplID0gYWNrLT5sZW47Ci0JCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fVU5TRU5UOwotCQljaGstPnNuZF9jb3VudCA9IDA7Ci0JCWNoay0+YXNvYyA9ICZz
dGNiLT5hc29jOwotCi0JCVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2Vu
ZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7
Ci0JfQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgaW50Ci1zY3RwX2NodW5rX3JldHJhbnNtaXNz
aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAot
ICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgIGludCAqY250X291dCwgc3Ry
dWN0IHRpbWV2YWwgKm5vdywgaW50ICpub3dfZmlsbGVkLCBpbnQgKmZyX2RvbmUsIGludCBzb19s
b2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19U
RVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICApCi17Ci0JLyotCi0JICogc2Vu
ZCBvdXQgb25lIE1UVSBvZiByZXRyYW5zbWlzc2lvbi4gSWYgZmFzdF9yZXRyYW5zbWl0IGlzCi0J
ICogaGFwcGVuaW5nIHdlIGlnbm9yZSB0aGUgY3duZC4gT3RoZXJ3aXNlIHdlIG9iZXkgdGhlIGN3
bmQgYW5kCi0JICogcnduZC4gRm9yIGEgQ29va2llIG9yIEFzY29uZiBpbiB0aGUgY29udHJvbCBj
aHVuayBxdWV1ZSB3ZQotCSAqIHJldHJhbnNtaXQgdGhlbSBieSB0aGVtc2VsdmVzLgotCSAqCi0J
ICogRm9yIGRhdGEgY2h1bmtzIHdlIHdpbGwgcGljayBvdXQgdGhlIGxvd2VzdCBUU04ncyBpbiB0
aGUgc2VudF9xdWV1ZQotCSAqIG1hcmtlZCBmb3IgcmVzZW5kIGFuZCBidW5kbGUgdGhlbSBhbGwg
dG9nZXRoZXIgKHVwIHRvIGEgTVRVIG9mCi0JICogZGVzdGluYXRpb24pLiBUaGUgYWRkcmVzcyB0
byBzZW5kIHRvIHNob3VsZCBoYXZlIGJlZW4KLQkgKiBzZWxlY3RlZC9jaGFuZ2VkIHdoZXJlIHRo
ZSByZXRyYW5zbWlzc2lvbiB3YXMgbWFya2VkIChpLmUuIGluIEZSCi0JICogb3IgdDMtdGltZW91
dCByb3V0aW5lcykuCi0JICovCi0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqZGF0YV9saXN0W1ND
VFBfTUFYX0RBVEFfQlVORExJTkddOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKmZ3
ZDsKLQlzdHJ1Y3QgbWJ1ZiAqbSwgKmVuZG9mY2hhaW47Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0
ID0gTlVMTDsKLQl1aW50MzJfdCB0c25zX3NlbnQgPSAwOwotCWludCBub19mcmFnbWVudGZsZywg
YnVuZGxlX2F0LCBjbnRfdGhydTsKLQl1bnNpZ25lZCBpbnQgbXR1OwotCWludCBlcnJvciwgaSwg
b25lX2NodW5rLCBmd2RfdHNuLCBjdGxfY250LCB0bXJfc3RhcnRlZDsKLQlzdHJ1Y3Qgc2N0cF9h
dXRoX2NodW5rICphdXRoID0gTlVMTDsKLQl1aW50MzJfdCBhdXRoX29mZnNldCA9IDA7Ci0JdWlu
dDE2X3QgYXV0aF9rZXlpZDsKLQlpbnQgb3ZlcnJpZGVfb2sgPSAxOwotCWludCBkYXRhX2F1dGhf
cmVxZCA9IDA7Ci0JdWludDMyX3QgZG10dSA9IDA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LQlpZiAoc29fbG9ja2VkKSB7Ci0JCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7
Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0K
LSNlbmRpZgotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCXRtcl9zdGFydGVkID0gY3Rs
X2NudCA9IGJ1bmRsZV9hdCA9IGVycm9yID0gMDsKLQlub19mcmFnbWVudGZsZyA9IDE7Ci0JZndk
X3RzbiA9IDA7Ci0JKmNudF9vdXQgPSAwOwotCWZ3ZCA9IE5VTEw7Ci0JZW5kb2ZjaGFpbiA9IG0g
PSBOVUxMOwotCWF1dGhfa2V5aWQgPSBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZDsK
LSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEMzLCAxKTsK
LSNlbmRpZgotCWlmICgoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSAmJgotCSAgICAo
VEFJTFFfRU1QVFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkpKSB7Ci0JCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCJTQ1RQIGhpdHMgZW1wdHkgcXVldWUgd2l0aCBjbnQgc2V0IHRvICVk
P1xuIiwKLQkJCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCWFzb2MtPnNlbnRfcXVl
dWVfY250ID0gMDsKLQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZSA9IDA7Ci0JCS8q
IHNlbmQgYmFjayAwLzAgc28gd2UgZW50ZXIgbm9ybWFsIHRyYW5zbWlzc2lvbiAqLwotCQkqY250
X291dCA9IDA7Ci0JCXJldHVybiAoMCk7Ci0JfQotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+
Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKChjaGstPnJlYy5jaHVua19p
ZC5pZCA9PSBTQ1RQX0NPT0tJRV9FQ0hPKSB8fAotCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlk
ID09IFNDVFBfU1RSRUFNX1JFU0VUKSB8fAotCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09
IFNDVFBfRk9SV0FSRF9DVU1fVFNOKSkgewotCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKGNoay0+cmVjLmNodW5r
X2lkLmlkID09IFNDVFBfU1RSRUFNX1JFU0VUKSB7Ci0JCQkJaWYgKGNoayAhPSBhc29jLT5zdHJf
cmVzZXQpIHsKLQkJCQkJLyoKLQkJCQkJICogbm90IGVsaWdpYmxlIGZvciByZXRyYW4gaWYgaXRz
Ci0JCQkJCSAqIG5vdCBvdXJzCi0JCQkJCSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9
Ci0JCQljdGxfY250Kys7Ci0JCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JX
QVJEX0NVTV9UU04pIHsKLQkJCQlmd2RfdHNuID0gMTsKLQkJCX0KLQkJCS8qCi0JCQkgKiBBZGQg
YW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMgaXQgc2F2ZSB0aGUKLQkJCSAqIG9mZnNl
dCBpbnRvIHRoZSBjaGFpbiBmb3IgQVVUSAotCQkJICovCi0JCQlpZiAoKGF1dGggPT0gTlVMTCkg
JiYKLQkJCSAgICAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKGNoay0+cmVjLmNodW5rX2lk
LmlkLAotCQkJCQkJCSBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSkgewotCQkJCW0gPSBz
Y3RwX2FkZF9hdXRoX2NodW5rKG0sICZlbmRvZmNoYWluLAotCQkJCQkJCSZhdXRoLCAmYXV0aF9v
ZmZzZXQsCi0JCQkJCQkJc3RjYiwKLQkJCQkJCQljaGstPnJlYy5jaHVua19pZC5pZCk7Ci0JCQkJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwotCQkJfQot
CQkJbSA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwg
Y2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0J
b25lX2NodW5rID0gMDsKLQljbnRfdGhydSA9IDA7Ci0JLyogZG8gd2UgaGF2ZSBjb250cm9sIGNo
dW5rcyB0byByZXRyYW5zbWl0PyAqLwotCWlmIChtICE9IE5VTEwpIHsKLQkJLyogU3RhcnQgYSB0
aW1lciBubyBtYXR0ZXIgaWYgd2Ugc3VjY2VlZCBvciBmYWlsICovCi0JCWlmIChjaGstPnJlYy5j
aHVua19pZC5pZCA9PSBTQ1RQX0NPT0tJRV9FQ0hPKSB7Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFND
VFBfVElNRVJfVFlQRV9DT09LSUUsIGlucCwgc3RjYiwgY2hrLT53aG9Ubyk7Ci0JCX0gZWxzZSBp
ZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpCi0JCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9BU0NPTkYsIGlucCwgc3RjYiwgY2hrLT53aG9Ubyk7Ci0JCWNo
ay0+c25kX2NvdW50Kys7CS8qIHVwZGF0ZSBvdXIgY291bnQgKi8KLQkJaWYgKChlcnJvciA9IHNj
dHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgY2hrLT53aG9UbywKLQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2hr
LT53aG9Uby0+cm8uX2xfYWRkciwgbSwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGF1dGhfb2Zmc2V0LCBhdXRoLCBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9r
ZXlpZCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vX2ZyYWdt
ZW50ZmxnLCAwLCAwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcp
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hrLT53aG9Uby0+
cG9ydCwgTlVMTCwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKLQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJCWlmIChlcnJv
ciA9PSBFTk9CVUZTKSB7Ci0JCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAxOwotCQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX2xvd2xldmVsZXJyKTsKLQkJCX0KLQkJCXJldHVybiAoZXJyb3IpOwot
CQl9IGVsc2UgewotCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOwotCQl9Ci0JCWVuZG9mY2hh
aW4gPSBOVUxMOwotCQlhdXRoID0gTlVMTDsKLQkJYXV0aF9vZmZzZXQgPSAwOwotCQkvKgotCQkg
KiBXZSBkb24ndCB3YW50IHRvIG1hcmsgdGhlIG5ldC0+c2VudCB0aW1lIGhlcmUgc2luY2UgdGhp
cwotCQkgKiB3ZSB1c2UgdGhpcyBmb3IgSEIgYW5kIHJldHJhbnMgY2Fubm90IG1lYXN1cmUgUlRU
Ci0JCSAqLwotCQkvKiAodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmY2hrLT53aG9Uby0+bGFz
dF9zZW50X3RpbWUpOyAqLwotCQkqY250X291dCArPSAxOwotCQljaGstPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1NFTlQ7Ci0JCXNjdHBfdWNvdW50X2RlY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQpOwotCQlpZiAoZndkX3RzbiA9PSAwKSB7Ci0JCQlyZXR1cm4gKDApOwotCQl9IGVs
c2UgewotCQkJLyogQ2xlYW4gdXAgdGhlIGZ3ZC10c24gbGlzdCAqLwotCQkJc2N0cF9jbGVhbl91
cF9jdGwoc3RjYiwgYXNvYywgc29fbG9ja2VkKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQl9Ci0J
LyoKLQkgKiBPaywgaXQgaXMganVzdCBkYXRhIHJldHJhbnNtaXNzaW9uIHdlIG5lZWQgdG8gZG8g
b3IgdGhhdCBhbmQgYQotCSAqIGZ3ZC10c24gd2l0aCBpdCBhbGwuCi0JICovCi0JaWYgKFRBSUxR
X0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgewotCQlyZXR1cm4gKFNDVFBfUkVUUkFOX0RPTkUp
OwotCX0KLQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VD
SE9FRCkgfHwKLQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpKSB7Ci0JCS8qIG5vdCB5ZXQgb3BlbiwgcmVzZW5kIHRoZSBjb29raWUgYW5kIHRoYXQg
aXMgaXQgKi8KLQkJcmV0dXJuICgxKTsKLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVE
Ci0Jc2N0cF9hdWRpdGluZygyMCwgaW5wLCBzdGNiLCBOVUxMKTsKLSNlbmRpZgotCWRhdGFfYXV0
aF9yZXFkID0gc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNv
Yy5wZWVyX2F1dGhfY2h1bmtzKTsKLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVl
dWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5E
KSB7Ci0JCQkvKiBObywgbm90IHNlbnQgdG8gdGhpcyBuZXQgb3Igbm90IHJlYWR5IGZvciBydHgg
Ki8KLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQkJU0NU
UF9QUklOVEYoIlRTTjoleCBjaGstPnNuZF9jb3VudDolZCBjaGstPnNlbnQ6JWQgY2FuJ3QgcmV0
cmFuIC0gbm8gZGF0YVxuIiwKLQkJCSAgICAgICAgICAgIGNoay0+cmVjLmRhdGEudHNuLCBjaGst
PnNuZF9jb3VudCwgY2hrLT5zZW50KTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX21heF9yZXRyYW5fY2h1bmspKSAmJgotCQkgICAgKGNoay0+c25kX2Nv
dW50ID49IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSkpIHsKLQkJCXN0
cnVjdCBtYnVmICpvcF9lcnI7Ci0JCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0J
CQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiVFNOICU4Ljh4IHJldHJhbnNtaXR0ZWQgJWQg
dGltZXMsIGdpdmluZyB1cCIsCi0JCQkJIGNoay0+cmVjLmRhdGEudHNuLCBjaGstPnNuZF9jb3Vu
dCk7Ci0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kaWFnX2luZm9fY29kZSksCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7
Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJc2N0cF9hYm9y
dF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsCi0JCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwot
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJcmV0dXJu
IChTQ1RQX1JFVFJBTl9FWElUKTsKLQkJfQotCQkvKiBwaWNrIHVwIHRoZSBuZXQgKi8KLQkJbmV0
ID0gY2hrLT53aG9UbzsKLQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7
Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NU
UF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJ
Y2FzZSBBRl9JTkVUNjoKLQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOwot
CQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJY2FzZSBB
Rl9DT05OOgotCQkJCW10dSA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJ
CQlicmVhazsKLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJbXR1ID0g
bmV0LT5tdHU7Ci0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPCBt
dHUpICYmIChhc29jLT50b3RhbF9mbGlnaHQgPiAwKSkgewotCQkJLyogTm8gcm9vbSBpbiBwZWVy
cyByd25kICovCi0JCQl1aW50MzJfdCB0c247Ci0KLQkJCXRzbiA9IGFzb2MtPmxhc3RfYWNrZWRf
c2VxICsgMTsKLQkJCWlmICh0c24gPT0gY2hrLT5yZWMuZGF0YS50c24pIHsKLQkJCQkvKgotCQkJ
CSAqIHdlIG1ha2UgYSBzcGVjaWFsIGV4Y2VwdGlvbiBmb3IgdGhpcwotCQkJCSAqIGNhc2UuIFRo
ZSBwZWVyIGhhcyBubyByd25kIGJ1dCBpcyBtaXNzaW5nCi0JCQkJICogdGhlIGxvd2VzdCBjaHVu
ay4uIHdoaWNoIGlzIHByb2JhYmx5IHdoYXQKLQkJCQkgKiBpcyBob2xkaW5nIHVwIHRoZSByd25k
LgotCQkJCSAqLwotCQkJCWdvdG8gb25lX2NodW5rX2Fyb3VuZDsKLQkJCX0KLQkJCXJldHVybiAo
MSk7Ci0JCX0KLQlvbmVfY2h1bmtfYXJvdW5kOgotCQlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IG10
dSkgewotCQkJb25lX2NodW5rID0gMTsKLQkJCWlmICgoYXNvYy0+cGVlcnNfcnduZCA9PSAwKSAm
JgotCQkJICAgIChhc29jLT50b3RhbF9mbGlnaHQgPT0gMCkpIHsKLQkJCQljaGstPndpbmRvd19w
cm9iZSA9IDE7Ci0JCQkJY2hrLT53aG9Uby0+d2luZG93X3Byb2JlID0gMTsKLQkJCX0KLQkJfQot
I2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0X2xvZygweEMzLCAyKTsK
LSNlbmRpZgotCQlidW5kbGVfYXQgPSAwOwotCQltID0gTlVMTDsKLQkJbmV0LT5mYXN0X3JldHJh
bl9pcCA9IDA7Ci0JCWlmIChjaGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9PSAw
KSB7Ci0JCQkvKgotCQkJICogaWYgbm8gRlIgaW4gcHJvZ3Jlc3Mgc2tpcCBkZXN0aW5hdGlvbiB0
aGF0IGhhdmUKLQkJCSAqIGZsaWdodF9zaXplID4gY3duZC4KLQkJCSAqLwotCQkJaWYgKG5ldC0+
ZmxpZ2h0X3NpemUgPj0gbmV0LT5jd25kKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCX0gZWxz
ZSB7Ci0JCQkvKgotCQkJICogTWFyayB0aGUgZGVzdGluYXRpb24gbmV0IHRvIGhhdmUgRlIgcmVj
b3ZlcnkKLQkJCSAqIGxpbWl0cyBwdXQgb24gaXQuCi0JCQkgKi8KLQkJCSpmcl9kb25lID0gMTsK
LQkJCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAxOwotCQl9Ci0KLQkJLyoKLQkJICogaWYgbm8gQVVU
SCBpcyB5ZXQgaW5jbHVkZWQgYW5kIHRoaXMgY2h1bmsgcmVxdWlyZXMgaXQsCi0JCSAqIG1ha2Ug
c3VyZSB0byBhY2NvdW50IGZvciBpdC4gIFdlIGRvbid0IGFwcGx5IHRoZSBzaXplCi0JCSAqIHVu
dGlsIHRoZSBBVVRIIGNodW5rIGlzIGFjdHVhbGx5IGFkZGVkIGJlbG93IGluIGNhc2UKLQkJICog
dGhlcmUgaXMgbm8gcm9vbSBmb3IgdGhpcyBjaHVuay4KLQkJICovCi0JCWlmIChkYXRhX2F1dGhf
cmVxZCAmJiAoYXV0aCA9PSBOVUxMKSkgewotCQkJZG10dSA9IHNjdHBfZ2V0X2F1dGhfY2h1bmtf
bGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKLQkJfSBlbHNlCi0JCQlkbXR1ID0gMDsKLQot
CQlpZiAoKGNoay0+c2VuZF9zaXplIDw9IChtdHUgLSBkbXR1KSkgfHwKLQkJICAgIChjaGstPmZs
YWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRfT0spKSB7Ci0JCQkvKiBvayB3ZSB3aWxsIGFkZCB0
aGlzIG9uZSAqLwotCQkJaWYgKGRhdGFfYXV0aF9yZXFkKSB7Ci0JCQkJaWYgKGF1dGggPT0gTlVM
TCkgewotCQkJCQltID0gc2N0cF9hZGRfYXV0aF9jaHVuayhtLAotCQkJCQkJCQkmZW5kb2ZjaGFp
biwKLQkJCQkJCQkJJmF1dGgsCi0JCQkJCQkJCSZhdXRoX29mZnNldCwKLQkJCQkJCQkJc3RjYiwK
LQkJCQkJCQkJU0NUUF9EQVRBKTsKLQkJCQkJYXV0aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlpZDsK
LQkJCQkJb3ZlcnJpZGVfb2sgPSAwOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfb3V0Y29udHJvbGNodW5rcyk7Ci0JCQkJfSBlbHNlIGlmIChvdmVycmlkZV9vaykgewotCQkJ
CQlhdXRoX2tleWlkID0gY2hrLT5hdXRoX2tleWlkOwotCQkJCQlvdmVycmlkZV9vayA9IDA7Ci0J
CQkJfSBlbHNlIGlmIChjaGstPmF1dGhfa2V5aWQgIT0gYXV0aF9rZXlpZCkgewotCQkJCQkvKiBk
aWZmZXJlbnQga2V5aWQsIHNvIGRvbmUgYnVuZGxpbmcgKi8KLQkJCQkJYnJlYWs7Ci0JCQkJfQot
CQkJfQotCQkJbSA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBtLCAmZW5kb2ZjaGFp
biwgMCwgY2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOwotCQkJaWYgKG0gPT0gTlVM
TCkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCQkJcmV0dXJuIChFTk9NRU0pOwotCQkJfQotCQkJLyog
RG8gY2xlYXIgSVBfREYgPyAqLwotCQkJaWYgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFH
TUVOVF9PSykgewotCQkJCW5vX2ZyYWdtZW50ZmxnID0gMDsKLQkJCX0KLQkJCS8qIHVwYXRlIG91
ciBNVFUgc2l6ZSAqLwotCQkJaWYgKG10dSA+IChjaGstPnNlbmRfc2l6ZSArIGRtdHUpKQotCQkJ
CW10dSAtPSAoY2hrLT5zZW5kX3NpemUgKyBkbXR1KTsKLQkJCWVsc2UKLQkJCQltdHUgPSAwOwot
CQkJZGF0YV9saXN0W2J1bmRsZV9hdCsrXSA9IGNoazsKLQkJCWlmIChvbmVfY2h1bmsgJiYgKGFz
b2MtPnRvdGFsX2ZsaWdodCA8PSAwKSkgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3dpbmRv
d3Byb2JlZCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKG9uZV9jaHVuayA9PSAwKSB7Ci0JCQkvKgotCQkJ
ICogbm93IGFyZSB0aGVyZSBhbnltb3JlIGZvcndhcmQgZnJvbSBjaGsgdG8gcGljawotCQkJICog
dXA/Ci0JCQkgKi8KLQkJCWZvciAoZndkID0gVEFJTFFfTkVYVChjaGssIHNjdHBfbmV4dCk7IGZ3
ZCAhPSBOVUxMOyBmd2QgPSBUQUlMUV9ORVhUKGZ3ZCwgc2N0cF9uZXh0KSkgewotCQkJCWlmIChm
d2QtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQkJLyogTm9wZSwgbm90IGZv
ciByZXRyYW4gKi8KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCWlmIChmd2QtPndob1RvICE9
IG5ldCkgewotCQkJCQkvKiBOb3BlLCBub3QgdGhlIG5ldCBpbiBxdWVzdGlvbiAqLwotCQkJCQlj
b250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKGRhdGFfYXV0aF9yZXFkICYmIChhdXRoID09IE5VTEwp
KSB7Ci0JCQkJCWRtdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7Ci0JCQkJfSBlbHNlCi0JCQkJCWRtdHUgPSAwOwotCQkJCWlmIChmd2QtPnNlbmRf
c2l6ZSA8PSAobXR1IC0gZG10dSkpIHsKLQkJCQkJaWYgKGRhdGFfYXV0aF9yZXFkKSB7Ci0JCQkJ
CQlpZiAoYXV0aCA9PSBOVUxMKSB7Ci0JCQkJCQkJbSA9IHNjdHBfYWRkX2F1dGhfY2h1bmsobSwK
LQkJCQkJCQkJCQkmZW5kb2ZjaGFpbiwKLQkJCQkJCQkJCQkmYXV0aCwKLQkJCQkJCQkJCQkmYXV0
aF9vZmZzZXQsCi0JCQkJCQkJCQkJc3RjYiwKLQkJCQkJCQkJCQlTQ1RQX0RBVEEpOwotCQkJCQkJ
CWF1dGhfa2V5aWQgPSBmd2QtPmF1dGhfa2V5aWQ7Ci0JCQkJCQkJb3ZlcnJpZGVfb2sgPSAwOwot
CQkJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsK
LQkJCQkJCX0gZWxzZSBpZiAob3ZlcnJpZGVfb2spIHsKLQkJCQkJCQlhdXRoX2tleWlkID0gZndk
LT5hdXRoX2tleWlkOwotCQkJCQkJCW92ZXJyaWRlX29rID0gMDsKLQkJCQkJCX0gZWxzZSBpZiAo
ZndkLT5hdXRoX2tleWlkICE9IGF1dGhfa2V5aWQpIHsKLQkJCQkJCQkvKiBkaWZmZXJlbnQga2V5
aWQsIHNvIGRvbmUgYnVuZGxpbmcgKi8KLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJfQot
CQkJCQltID0gc2N0cF9jb3B5X21idWZjaGFpbihmd2QtPmRhdGEsIG0sICZlbmRvZmNoYWluLCAw
LCBmd2QtPnNlbmRfc2l6ZSwgZndkLT5jb3B5X2J5X3JlZik7Ci0JCQkJCWlmIChtID09IE5VTEwp
IHsKLQkJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCQkJCQlyZXR1cm4gKEVOT01FTSk7Ci0JCQkJCX0KLQkJ
CQkJLyogRG8gY2xlYXIgSVBfREYgPyAqLwotCQkJCQlpZiAoZndkLT5mbGFncyAmIENIVU5LX0ZM
QUdTX0ZSQUdNRU5UX09LKSB7Ci0JCQkJCQlub19mcmFnbWVudGZsZyA9IDA7Ci0JCQkJCX0KLQkJ
CQkJLyogdXBhdGUgb3VyIE1UVSBzaXplICovCi0JCQkJCWlmIChtdHUgPiAoZndkLT5zZW5kX3Np
emUgKyBkbXR1KSkKLQkJCQkJCW10dSAtPSAoZndkLT5zZW5kX3NpemUgKyBkbXR1KTsKLQkJCQkJ
ZWxzZQotCQkJCQkJbXR1ID0gMDsKLQkJCQkJZGF0YV9saXN0W2J1bmRsZV9hdCsrXSA9IGZ3ZDsK
LQkJCQkJaWYgKGJ1bmRsZV9hdCA+PSBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSB7Ci0JCQkJCQli
cmVhazsKLQkJCQkJfQotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIGNhbid0IGZpdCBzbyB3ZSBhcmUg
ZG9uZSAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyogSXMgdGhlcmUgc29t
ZXRoaW5nIHRvIHNlbmQgZm9yIHRoaXMgZGVzdGluYXRpb24/ICovCi0JCWlmIChtKSB7Ci0JCQkv
KgotCQkJICogTm8gbWF0dGVyIGlmIHdlIGZhaWwvb3Igc3VjY2VlZCB3ZSBzaG91bGQgc3RhcnQg
YQotCQkJICogdGltZXIuIEEgZmFpbHVyZSBpcyBsaWtlIGEgbG9zdCBJUCBwYWNrZXQgOi0pCi0J
CQkgKi8KLQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1l
cikpIHsKLQkJCQkvKgotCQkJCSAqIG5vIHRpbWVyIHJ1bm5pbmcgb24gdGhpcyBkZXN0aW5hdGlv
bgotCQkJCSAqIHJlc3RhcnQgaXQuCi0JCQkJICovCi0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJCXRtcl9zdGFydGVkID0gMTsK
LQkJCX0KLQkJCS8qIE5vdyBsZXRzIHNlbmQgaXQsIGlmIHRoZXJlIGlzIGFueXRoaW5nIHRvIHNl
bmQgOj4gKi8KLQkJCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChpbnAs
IHN0Y2IsIG5ldCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
c3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgbSwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX29mZnNldCwgYXV0aCwgYXV0aF9rZXlpZCwK
LQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZs
ZywgMCwgMCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAt
PnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LCBodG9ubChzdGNiLT5hc29jLnBlZXJfdnRhZyksCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxM
LAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgMCwgMCwKLSNlbmRpZgotCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvX2xvY2tlZCkpKSB7Ci0JCQkJLyogZXJyb3IsIHdlIGNvdWxkIG5v
dCBvdXRwdXQgKi8KLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdhayBzZW5kIGVy
cm9yICVkXG4iLCBlcnJvcik7Ci0JCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCQkJYXNv
Yy0+aWZwX2hhZF9lbm9idWYgPSAxOwotCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZl
bGVycik7Ci0JCQkJfQotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfSBlbHNlIHsKLQkJCQlhc29j
LT5pZnBfaGFkX2Vub2J1ZiA9IDA7Ci0JCQl9Ci0JCQllbmRvZmNoYWluID0gTlVMTDsKLQkJCWF1
dGggPSBOVUxMOwotCQkJYXV0aF9vZmZzZXQgPSAwOwotCQkJLyogRm9yIEhCJ3MgKi8KLQkJCS8q
Ci0JCQkgKiBXZSBkb24ndCB3YW50IHRvIG1hcmsgdGhlIG5ldC0+c2VudCB0aW1lIGhlcmUKLQkJ
CSAqIHNpbmNlIHRoaXMgd2UgdXNlIHRoaXMgZm9yIEhCIGFuZCByZXRyYW5zIGNhbm5vdAotCQkJ
ICogbWVhc3VyZSBSVFQKLQkJCSAqLwotCQkJLyogKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
Jm5ldC0+bGFzdF9zZW50X3RpbWUpOyAqLwotCi0JCQkvKiBGb3IgYXV0by1jbG9zZSAqLwotCQkJ
Y250X3RocnUrKzsKLQkJCWlmICgqbm93X2ZpbGxlZCA9PSAwKSB7Ci0JCQkJKHZvaWQpU0NUUF9H
RVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfbGFzdF9zZW50KTsKLQkJCQkqbm93ID0gYXNvYy0+
dGltZV9sYXN0X3NlbnQ7Ci0JCQkJKm5vd19maWxsZWQgPSAxOwotCQkJfSBlbHNlIHsKLQkJCQlh
c29jLT50aW1lX2xhc3Rfc2VudCA9ICpub3c7Ci0JCQl9Ci0JCQkqY250X291dCArPSBidW5kbGVf
YXQ7Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0JCQlzY3RwX2F1ZGl0X2xvZygweEM0
LCBidW5kbGVfYXQpOwotI2VuZGlmCi0JCQlpZiAoYnVuZGxlX2F0KSB7Ci0JCQkJdHNuc19zZW50
ID0gZGF0YV9saXN0WzBdLT5yZWMuZGF0YS50c247Ci0JCQl9Ci0JCQlmb3IgKGkgPSAwOyBpIDwg
YnVuZGxlX2F0OyBpKyspIHsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kcmV0cmFuc2Rh
dGEpOwotCQkJCWRhdGFfbGlzdFtpXS0+c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKLQkJCQkv
KgotCQkJCSAqIFdoZW4gd2UgaGF2ZSBhIHJldm9rZWQgZGF0YSwgYW5kIHdlCi0JCQkJICogcmV0
cmFuc21pdCBpdCwgdGhlbiB3ZSBjbGVhciB0aGUgcmV2b2tlZAotCQkJCSAqIGZsYWcgc2luY2Ug
dGhpcyBmbGFnIGRpY3RhdGVzIGlmIHdlCi0JCQkJICogc3VidHJhY3RlZCBmcm9tIHRoZSBmcwot
CQkJCSAqLwotCQkJCWlmIChkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2Vk
KSB7Ci0JCQkJCS8qIERlZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJZGF0YV9saXN0W2ldLT53aG9U
by0+Y3duZCAtPSBkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZTsKLQkJCQkJZGF0YV9saXN0W2ldLT5y
ZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9IDA7Ci0JCQkJfQotCQkJCWRhdGFfbGlzdFtpXS0+
c25kX2NvdW50Kys7Ci0JCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5zZW50X3F1ZXVlX3JldHJh
bl9jbnQpOwotCQkJCS8qIHJlY29yZCB0aGUgdGltZSAqLwotCQkJCWRhdGFfbGlzdFtpXS0+c2Vu
dF9yY3ZfdGltZSA9IGFzb2MtPnRpbWVfbGFzdF9zZW50OwotCQkJCWlmIChkYXRhX2xpc3RbaV0t
PmJvb2tfc2l6ZV9zY2FsZSkgewotCQkJCQkvKgotCQkJCQkgKiBuZWVkIHRvIGRvdWJsZSB0aGUg
Ym9vayBzaXplIG9uCi0JCQkJCSAqIHRoaXMgb25lCi0JCQkJCSAqLwotCQkJCQlkYXRhX2xpc3Rb
aV0tPmJvb2tfc2l6ZV9zY2FsZSA9IDA7Ci0JCQkJCS8qIFNpbmNlIHdlIGRvdWJsZSB0aGUgYm9v
a3NpemUsIHdlIG11c3QKLQkJCQkJICogYWxzbyBkb3VibGUgdGhlIG91dHB1dCBxdWV1ZSBzaXpl
LCBzaW5jZSB0aGlzCi0JCQkJCSAqIGdldCBzaHJ1bmsgd2hlbiB3ZSBmcmVlIGJ5IHRoaXMgYW1v
dW50LgotCQkJCQkgKi8KLQkJCQkJYXRvbWljX2FkZF9pbnQoJigoYXNvYyktPnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplKSxkYXRhX2xpc3RbaV0tPmJvb2tfc2l6ZSk7Ci0JCQkJCWRhdGFfbGlzdFtp
XS0+Ym9va19zaXplICo9IDI7Ci0KLQotCQkJCX0gZWxzZSB7Ci0JCQkJCWlmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19SV05EX0VOQUJMRSkgewotCQkJ
CQkJc2N0cF9sb2dfcnduZChTQ1RQX0RFQ1JFQVNFX1BFRVJfUldORCwKLQkJCQkJCSAgICAgIGFz
b2MtPnBlZXJzX3J3bmQsIGRhdGFfbGlzdFtpXS0+c2VuZF9zaXplLCBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfcGVlcl9jaHVua19vaCkpOwotCQkJCQl9Ci0JCQkJCWFzb2MtPnBlZXJzX3J3bmQgPSBz
Y3RwX3Nic3BhY2Vfc3ViKGFzb2MtPnBlZXJzX3J3bmQsCi0JCQkJCQkJCQkgICAgKHVpbnQzMl90
KSAoZGF0YV9saXN0W2ldLT5zZW5kX3NpemUgKwotCQkJCQkJCQkJCQlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfcGVlcl9jaHVua19vaCkpKTsKLQkJCQl9Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9SU05ELAotCQkJCQkJICAgICAgIGRh
dGFfbGlzdFtpXS0+d2hvVG8tPmZsaWdodF9zaXplLAotCQkJCQkJICAgICAgIGRhdGFfbGlzdFtp
XS0+Ym9va19zaXplLAotCQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KWRhdGFfbGlz
dFtpXS0+d2hvVG8sCi0JCQkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOwot
CQkJCX0KLQkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKGRhdGFfbGlzdFtpXSk7Ci0JCQkJ
c2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKLQkJCQlpZiAo
YXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVy
KSB7Ci0JCQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2VzICovCi0JCQkJCWFzb2MtPnBlZXJz
X3J3bmQgPSAwOwotCQkJCX0KLQkJCQlpZiAoKGkgPT0gMCkgJiYKLQkJCQkgICAgKGRhdGFfbGlz
dFtpXS0+cmVjLmRhdGEuZG9pbmdfZmFzdF9yZXRyYW5zbWl0KSkgewotCQkJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19zZW5kZmFzdHJldHJhbnMpOwotCQkJCQlpZiAoKGRhdGFfbGlzdFtpXSA9PSBU
QUlMUV9GSVJTVCgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCi0JCQkJCSAgICAodG1yX3N0YXJ0ZWQg
PT0gMCkpIHsKLQkJCQkJCS8qLQotCQkJCQkJICogb2sgd2UganVzdCBmYXN0LXJldHJhbnMnZAot
CQkJCQkJICogdGhlIGxvd2VzdCBUU04sIGkuZSB0aGUKLQkJCQkJCSAqIGZpcnN0IG9uIHRoZSBs
aXN0LiBJbgotCQkJCQkJICogdGhpcyBjYXNlIHdlIHdhbnQgdG8gZ2l2ZQotCQkJCQkJICogc29t
ZSBtb3JlIHRpbWUgdG8gZ2V0IGEKLQkJCQkJCSAqIFNBQ0sgYmFjayB3aXRob3V0IGEKLQkJCQkJ
CSAqIHQzLWV4cGlyaW5nLgotCQkJCQkJICovCi0JCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQlTQ1RQX0ZST01fU0NUUF9P
VVRQVVQgKyBTQ1RQX0xPQ18yKTsKLQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJfQotCQkJCX0KLQkJCX0KLQkJCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgdHNuc19zZW50LCBTQ1RQX0NX
TkRfTE9HX0ZST01fUkVTRU5EKTsKLQkJCX0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQK
LQkJCXNjdHBfYXVkaXRpbmcoMjEsIGlucCwgc3RjYiwgTlVMTCk7Ci0jZW5kaWYKLQkJfSBlbHNl
IHsKLQkJCS8qIE5vbmUgd2lsbCBmaXQgKi8KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJaWYgKGFz
b2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA8PSAwKSB7Ci0JCQkvKiBhbGwgZG9uZSB3ZSBoYXZl
IG5vIG1vcmUgdG8gcmV0cmFuICovCi0JCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAw
OwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG9uZV9jaHVuaykgewotCQkJLyogTm8gbW9yZSByb29t
IGluIHJ3bmQgKi8KLQkJCXJldHVybiAoMSk7Ci0JCX0KLQkJLyogc3RvcCB0aGUgZm9yIGxvb3Ag
aGVyZS4gd2Ugc2VudCBvdXQgYSBwYWNrZXQgKi8KLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoMCk7
Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3RpbWVyX3ZhbGlkYXRpb24oc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JLyogVmFsaWRh
dGUgdGhhdCBhIHRpbWVyIGlzIHJ1bm5pbmcgc29tZXdoZXJlICovCi0JVEFJTFFfRk9SRUFDSChu
ZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElO
RygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7Ci0JCQkvKiBIZXJlIGlzIGEgdGltZXIgKi8KLQkJ
CXJldHVybjsKLQkJfQotCX0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkvKiBHYWss
IHdlIGRpZCBub3QgaGF2ZSBhIHRpbWVyIHNvbWV3aGVyZSAqLwotCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQzLCAiRGVhZGxvY2sgYXZvaWRlZCBzdGFydGluZyB0aW1lciBvbiBhIGRlc3QgYXQg
cmV0cmFuXG4iKTsKLQlpZiAoYXNvYy0+YWx0ZXJuYXRlKSB7Ci0JCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX1NFTkQsIGlucCwgc3RjYiwgYXNvYy0+YWx0ZXJuYXRlKTsKLQl9IGVs
c2UgewotCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2Is
IGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOwotCX0KLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNj
dHBfY2h1bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAotICAgIGludCBmcm9tX3doZXJlLAotICAgIGludCBzb19sb2NrZWQKLSNpZiAh
ZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAg
IFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICApCi17Ci0JLyotCi0JICogT2sgdGhpcyBpcyB0aGUg
Z2VuZXJpYyBjaHVuayBzZXJ2aWNlIHF1ZXVlLiB3ZSBtdXN0IGRvIHRoZQotCSAqIGZvbGxvd2lu
ZzoKLQkgKiAtIFNlZSBpZiB0aGVyZSBhcmUgcmV0cmFuc21pdHMgcGVuZGluZywgaWYgc28gd2Ug
bXVzdAotCSAqICAgZG8gdGhlc2UgZmlyc3QuCi0JICogLSBTZXJ2aWNlIHRoZSBzdHJlYW0gcXVl
dWUgdGhhdCBpcyBuZXh0LCBtb3ZpbmcgYW55Ci0JICogICBtZXNzYWdlIChub3RlIEkgbXVzdCBn
ZXQgYSBjb21wbGV0ZSBtZXNzYWdlIGkuZS4KLQkgKiAgIEZJUlNUL01JRERMRSBhbmQgTEFTVCB0
byB0aGUgb3V0IHF1ZXVlIGluIG9uZSBwYXNzKSBhbmQgYXNzaWduaW5nCi0JICogICBUU04ncwot
CSAqIC0gQ2hlY2sgdG8gc2VlIGlmIHRoZSBjd25kL3J3bmQgYWxsb3dzIGFueSBvdXRwdXQsIGlm
IHNvIHdlCi0JICogICBnbyBhaGVhZCBhbmQgZm9tdWxhdGUgYW5kIHNlbmQgdGhlIGxvdyBsZXZl
bCBjaHVua3MuIE1ha2luZyBzdXJlCi0JICogICB0byBjb21iaW5lIGFueSBjb250cm9sIGluIHRo
ZSBjb250cm9sIGNodW5rIHF1ZXVlIGFsc28uCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCWludCBlcnJvciA9IDAsIG51bV9v
dXQsIHRvdF9vdXQgPSAwLCByZXQgPSAwLCByZWFzb25fY29kZTsKLQl1bnNpZ25lZCBpbnQgYnVy
c3RfY250ID0gMDsKLQlzdHJ1Y3QgdGltZXZhbCBub3c7Ci0JaW50IG5vd19maWxsZWQgPSAwOwot
CWludCBuYWdsZV9vbjsKLQlpbnQgZnJhZ19wb2ludCA9IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3Rj
YiwgJnN0Y2ItPmFzb2MpOwotCWludCB1bl9zZW50ID0gMDsKLQlpbnQgZnJfZG9uZTsKLQl1bnNp
Z25lZCBpbnQgdG90X2ZycyA9IDA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAoc29f
bG9ja2VkKSB7Ci0JCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7Ci0JfSBlbHNl
IHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0KLSNlbmRpZgot
CWFzb2MgPSAmc3RjYi0+YXNvYzsKLWRvX2l0X2FnYWluOgotCS8qIFRoZSBOYWdsZSBhbGdvcml0
aG0gaXMgb25seSBhcHBsaWVkIHdoZW4gaGFuZGxpbmcgYSBzZW5kIGNhbGwuICovCi0JaWYgKGZy
b21fd2hlcmUgPT0gU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCkgewotCQlpZiAoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpIHsKLQkJCW5hZ2xlX29uID0g
MDsKLQkJfSBlbHNlIHsKLQkJCW5hZ2xlX29uID0gMTsKLQkJfQotCX0gZWxzZSB7Ci0JCW5hZ2xl
X29uID0gMDsKLQl9Ci0JU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0KLQl1bl9zZW50ID0g
KHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2Zs
aWdodCk7Ci0KLQlpZiAoKHVuX3NlbnQgPD0gMCkgJiYKLQkgICAgKFRBSUxRX0VNUFRZKCZhc29j
LT5jb250cm9sX3NlbmRfcXVldWUpKSAmJgotCSAgICAoVEFJTFFfRU1QVFkoJmFzb2MtPmFzY29u
Zl9zZW5kX3F1ZXVlKSkgJiYKLQkgICAgKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9PSAw
KSAmJgotCSAgICAoYXNvYy0+dHJpZ2dlcl9yZXNldCA9PSAwKSkgewotCQkvKiBOb3RoaW5nIHRv
IGRvIHVubGVzcyB0aGVyZSBpcyBzb21ldGhpbmcgdG8gYmUgc2VudCBsZWZ0ICovCi0JCXJldHVy
bjsKLQl9Ci0JLyogRG8gd2UgaGF2ZSBzb21ldGhpbmcgdG8gc2VuZCwgZGF0YSBvciBjb250cm9s
IEFORAotCSAqIGEgc2FjayB0aW1lciBydW5uaW5nLCBpZiBzbyBwaWdneS1iYWNrIHRoZSBzYWNr
LgotCSAqLwotCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1l
ci50aW1lcikpIHsKLQkJc2N0cF9zZW5kX3NhY2soc3RjYiwgc29fbG9ja2VkKTsKLQkJKHZvaWQp
U0NUUF9PU19USU1FUl9TVE9QKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGltZXIpOwotCX0KLQl3
aGlsZSAoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KSB7Ci0JCS8qLQotCQkgKiBPaywgaXQg
aXMgcmV0cmFuc21pc3Npb24gdGltZSBvbmx5LCB3ZSBzZW5kIG91dCBvbmx5IE9ORQotCQkgKiBw
YWNrZXQgd2l0aCBhIHNpbmdsZSBjYWxsIG9mZiB0byB0aGUgcmV0cmFuIGNvZGUuCi0JCSAqLwot
CQlpZiAoZnJvbV93aGVyZSA9PSBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9BQ0spIHsKLQkJCS8q
LQotCQkJICogU3BlY2lhbCBob29rIGZvciBoYW5kbGluZyBjb29raWVzcyBkaXNjYXJkZWQKLQkJ
CSAqIGJ5IHBlZXIgdGhhdCBjYXJyaWVkIGRhdGEuIFNlbmQgY29va2llLWFjayBvbmx5Ci0JCQkg
KiBhbmQgdGhlbiB0aGUgbmV4dCBjYWxsIHdpdGggZ2V0IHRoZSByZXRyYW4ncy4KLQkJCSAqLwot
CQkJKHZvaWQpc2N0cF9tZWRfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgYXNvYywgJm51bV9vdXQs
ICZyZWFzb25fY29kZSwgMSwKLQkJCQkJCSAgICBmcm9tX3doZXJlLAotCQkJCQkJICAgICZub3cs
ICZub3dfZmlsbGVkLCBmcmFnX3BvaW50LCBzb19sb2NrZWQpOwotCQkJcmV0dXJuOwotCQl9IGVs
c2UgaWYgKGZyb21fd2hlcmUgIT0gU0NUUF9PVVRQVVRfRlJPTV9IQl9UTVIpIHsKLQkJCS8qIGlm
IGl0cyBub3QgZnJvbSBhIEhCIHRoZW4gZG8gaXQgKi8KLQkJCWZyX2RvbmUgPSAwOwotCQkJcmV0
ID0gc2N0cF9jaHVua19yZXRyYW5zbWlzc2lvbihpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAm
bm93LCAmbm93X2ZpbGxlZCwgJmZyX2RvbmUsIHNvX2xvY2tlZCk7Ci0JCQlpZiAoZnJfZG9uZSkg
ewotCQkJCXRvdF9mcnMrKzsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBpdHMgZnJv
bSBhbnkgb3RoZXIgcGxhY2UsIHdlIGRvbid0IGFsbG93IHJldHJhbgotCQkJICogb3V0cHV0IChv
bmx5IGNvbnRyb2wpCi0JCQkgKi8KLQkJCXJldCA9IDE7Ci0JCX0KLQkJaWYgKHJldCA+IDApIHsK
LQkJCS8qIENhbid0IHNlbmQgYW55bW9yZSAqLwotCQkJLyotCi0JCQkgKiBub3cgbGV0cyBwdXNo
IG91dCBjb250cm9sIGJ5IGNhbGxpbmcgbWVkLWxldmVsCi0JCQkgKiBvdXRwdXQgb25jZS4gdGhp
cyBhc3N1cmVzIHRoYXQgd2UgV0lMTCBzZW5kIEhCJ3MKLQkJCSAqIGlmIHF1ZXVlZCB0b28uCi0J
CQkgKi8KLQkJCSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZu
dW1fb3V0LCAmcmVhc29uX2NvZGUsIDEsCi0JCQkJCQkgICAgZnJvbV93aGVyZSwKLQkJCQkJCSAg
ICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2VkKTsKLSNpZmRlZiBTQ1RQ
X0FVRElUSU5HX0VOQUJMRUQKLQkJCXNjdHBfYXVkaXRpbmcoOCwgaW5wLCBzdGNiLCBOVUxMKTsK
LSNlbmRpZgotCQkJc2N0cF90aW1lcl92YWxpZGF0aW9uKGlucCwgc3RjYiwgYXNvYyk7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJaWYgKHJldCA8IDApIHsKLQkJCS8qLQotCQkJICogVGhlIGNvdW50IHdh
cyBvZmYuLiByZXRyYW4gaXMgbm90IGhhcHBlbmluZyBzbyBkbwotCQkJICogdGhlIG5vcm1hbCBy
ZXRyYW5zbWlzc2lvbi4KLQkJCSAqLwotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQkJ
c2N0cF9hdWRpdGluZyg5LCBpbnAsIHN0Y2IsIE5VTEwpOwotI2VuZGlmCi0JCQlpZiAocmV0ID09
IFNDVFBfUkVUUkFOX0VYSVQpIHsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCQlicmVhazsKLQkJfQot
CQlpZiAoZnJvbV93aGVyZSA9PSBTQ1RQX09VVFBVVF9GUk9NX1QzKSB7Ci0JCQkvKiBPbmx5IG9u
ZSB0cmFuc21pc3Npb24gYWxsb3dlZCBvdXQgb2YgYSB0aW1lb3V0ICovCi0jaWZkZWYgU0NUUF9B
VURJVElOR19FTkFCTEVECi0JCQlzY3RwX2F1ZGl0aW5nKDEwLCBpbnAsIHN0Y2IsIE5VTEwpOwot
I2VuZGlmCi0JCQkvKiBQdXNoIG91dCBhbnkgY29udHJvbCAqLwotCQkJKHZvaWQpc2N0cF9tZWRf
Y2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgYXNvYywgJm51bV9vdXQsICZyZWFzb25fY29kZSwgMSwg
ZnJvbV93aGVyZSwKLQkJCQkJCSAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29f
bG9ja2VkKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoKGFzb2MtPmZyX21heF9idXJzdCA+IDAp
ICYmICh0b3RfZnJzID49IGFzb2MtPmZyX21heF9idXJzdCkpIHsKLQkJCS8qIEhpdCBGUiBidXJz
dCBsaW1pdCAqLwotCQkJcmV0dXJuOwotCQl9Ci0JCWlmICgobnVtX291dCA9PSAwKSAmJiAocmV0
ID09IDApKSB7Ci0JCQkvKiBObyBtb3JlIHJldHJhbnMgdG8gc2VuZCAqLwotCQkJYnJlYWs7Ci0J
CX0KLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0Jc2N0cF9hdWRpdGluZygxMiwg
aW5wLCBzdGNiLCBOVUxMKTsKLSNlbmRpZgotCS8qIENoZWNrIGZvciBiYWQgZGVzdGluYXRpb25z
LCBpZiB0aGV5IGV4aXN0IG1vdmUgY2h1bmtzIGFyb3VuZC4gKi8KLQlUQUlMUV9GT1JFQUNIKG5l
dCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewotCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfUkVBQ0hBQkxFKSkgewotCQkJLyotCi0JCQkgKiBpZiBwb3NzaWJsZSBtb3ZlIHRo
aW5ncyBvZmYgb2YgdGhpcyBhZGRyZXNzIHdlCi0JCQkgKiBzdGlsbCBtYXkgc2VuZCBiZWxvdyBk
dWUgdG8gdGhlIGRvcm1hbnQgc3RhdGUgYnV0Ci0JCQkgKiB3ZSB0cnkgdG8gZmluZCBhbiBhbHRl
cm5hdGUgYWRkcmVzcyB0byBzZW5kIHRvCi0JCQkgKiBhbmQgaWYgd2UgaGF2ZSBvbmUgd2UgbW92
ZSBhbGwgcXVldWVkIGRhdGEgb24gdGhlCi0JCQkgKiBvdXQgd2hlZWwgdG8gdGhpcyBhbHRlcm5h
dGUgYWRkcmVzcy4KLQkJCSAqLwotCQkJaWYgKG5ldC0+cmVmX2NvdW50ID4gMSkKLQkJCQlzY3Rw
X21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7Ci0JCX0gZWxzZSB7Ci0JCQkvKi0KLQkJ
CSAqIGlmICgoYXNvYy0+c2F0X25ldHdvcmspIHx8IChuZXQtPmFkZHJfaXNfbG9jYWwpKQotCQkJ
ICogeyBidXJzdF9saW1pdCA9IGFzb2MtPm1heF9idXJzdCAqCi0JCQkgKiBTQ1RQX1NBVF9ORVRX
T1JLX0JVUlNUX0lOQ1I7IH0KLQkJCSAqLwotCQkJaWYgKGFzb2MtPm1heF9idXJzdCA+IDApIHsK
LQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KSkg
ewotCQkJCQlpZiAoKG5ldC0+ZmxpZ2h0X3NpemUgKyAoYXNvYy0+bWF4X2J1cnN0ICogbmV0LT5t
dHUpKSA8IG5ldC0+Y3duZCkgewotCQkJCQkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNv
bnRyb2wgZ2l2ZW4gaW4gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgKi8KLQkJCQkJCWFz
b2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dChzdGNiLCBuZXQs
IGFzb2MtPm1heF9idXJzdCk7Ci0JCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MT0dfTUFYQlVSU1RfRU5BQkxFKSB7Ci0JCQkJCQkJc2N0cF9sb2df
bWF4YnVyc3Qoc3RjYiwgbmV0LCAwLCBhc29jLT5tYXhfYnVyc3QsIFNDVFBfTUFYX0JVUlNUX0FQ
UExJRUQpOwotCQkJCQkJfQotCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbWF4YnVyc3RxdWV1
ZWQpOwotCQkJCQl9Ci0JCQkJCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOwotCQkJCX0gZWxzZSB7
Ci0JCQkJCWlmIChuZXQtPmZsaWdodF9zaXplID09IDApIHsKLQkJCQkJCS8qIFNob3VsZCBiZSBk
ZWNheWluZyB0aGUgY3duZCBoZXJlICovCi0JCQkJCQk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0J
CX0KLQotCX0KLQlidXJzdF9jbnQgPSAwOwotCWRvIHsKLQkJZXJyb3IgPSBzY3RwX21lZF9jaHVu
a19vdXRwdXQoaW5wLCBzdGNiLCBhc29jLCAmbnVtX291dCwKLQkJCQkJICAgICAgJnJlYXNvbl9j
b2RlLCAwLCBmcm9tX3doZXJlLAotCQkJCQkgICAgICAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19w
b2ludCwgc29fbG9ja2VkKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMSwgIkVycm9yICVkIHdhcyByZXR1cm5lZCBmcm9tIG1lZC1jLW9wXG4iLCBlcnJvcik7
Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0df
TUFYQlVSU1RfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfbWF4YnVyc3Qoc3RjYiwgYXNvYy0+cHJp
bWFyeV9kZXN0aW5hdGlvbiwgZXJyb3IsIGJ1cnN0X2NudCwgU0NUUF9NQVhfQlVSU1RfRVJST1Jf
U1RPUCk7Ci0JCQl9Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBO
VUxMLCBlcnJvciwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOwotCQkJCXNjdHBfbG9nX2N3bmQo
c3RjYiwgTlVMTCwgMHhkZWFkYmVlZiwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOwotCQkJfQot
CQkJYnJlYWs7Ci0JCX0KLQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJtLWMtbyBwdXQg
b3V0ICVkXG4iLCBudW1fb3V0KTsKLQotCQl0b3Rfb3V0ICs9IG51bV9vdXQ7Ci0JCWJ1cnN0X2Nu
dCsrOwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9D
V05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX2xvZ19jd25kKHN0Y2IsIE5VTEwsIG51bV9v
dXQsIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTKTsKLQkJCWlmIChudW1fb3V0ID09IDApIHsKLQkJ
CQlzY3RwX2xvZ19jd25kKHN0Y2IsIE5VTEwsIHJlYXNvbl9jb2RlLCBTQ1RQX1NFTkRfTk9XX0NP
TVBMRVRFUyk7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5hZ2xlX29uKSB7Ci0JCQkvKgotCQkJICogV2hl
biB0aGUgTmFnbGUgYWxnb3JpdGhtIGlzIHVzZWQsIGxvb2sgYXQgaG93IG11Y2gKLQkJCSAqIGlz
IHVuc2VudCwgdGhlbiBpZiBpdHMgc21hbGxlciB0aGFuIGFuIE1UVSBhbmQgd2UKLQkJCSAqIGhh
dmUgZGF0YSBpbiBmbGlnaHQgd2Ugc3RvcCwgZXhjZXB0IGlmIHdlIGFyZQotCQkJICogaGFuZGxp
bmcgYSBmcmFnbWVudGVkIHVzZXIgbWVzc2FnZS4KLQkJCSAqLwotCQkJdW5fc2VudCA9IHN0Y2It
PmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsK
LQkJCWlmICgodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9N
SU5fT1ZFUkhFQUQpKSAmJgotCQkJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApKSB7
IAotLyoJJiYJCSAgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhQ
TElDSVRfRU9SKSkpIHsqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChUQUlMUV9FTVBU
WSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgotCQkgICAgVEFJTFFfRU1QVFkoJmFzb2Mt
PnNlbmRfcXVldWUpICYmCi0JCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNv
X2xvY2tlZCkgPT0gMCkgewotCQkJLyogTm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KLQkJCWJyZWFr
OwotCQl9Ci0JCWlmICgoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2It
PmFzb2MudG90YWxfZmxpZ2h0KSA8PSAwKSB7Ci0JCQkvKiBOb3RoaW5nIGxlZnQgdG8gc2VuZCAq
LwotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlIChudW1fb3V0ICYmCi0JICAgICAgICAgKChhc29j
LT5tYXhfYnVyc3QgPT0gMCkgfHwKLQkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRf
YmFzZWRfbWF4YnVyc3QpIHx8Ci0JCSAgKGJ1cnN0X2NudCA8IGFzb2MtPm1heF9idXJzdCkpKTsK
LQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpID09
IDApIHsKLQkJaWYgKChhc29jLT5tYXhfYnVyc3QgPiAwKSAmJiAoYnVyc3RfY250ID49IGFzb2Mt
Pm1heF9idXJzdCkpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsK
LQkJCWFzb2MtPmJ1cnN0X2xpbWl0X2FwcGxpZWQgPSAxOwotCQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgewotCQkJ
CXNjdHBfbG9nX21heGJ1cnN0KHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24sIDAsIGJ1
cnN0X2NudCwgU0NUUF9NQVhfQlVSU1RfQVBQTElFRCk7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlh
c29jLT5idXJzdF9saW1pdF9hcHBsaWVkID0gMDsKLQkJfQotCX0KLQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0J
CXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVMTCwgdG90X291dCwgU0NUUF9TRU5EX05PV19DT01QTEVU
RVMpOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIk9rLCB3ZSBoYXZlIHB1dCBv
dXQgJWQgY2h1bmtzXG4iLAotCQl0b3Rfb3V0KTsKLQotCS8qLQotCSAqIE5vdyB3ZSBuZWVkIHRv
IGNsZWFuIHVwIHRoZSBjb250cm9sIGNodW5rIGNoYWluIGlmIGEgRUNORSBpcyBvbgotCSAqIGl0
LiBJdCBtdXN0IGJlIG1hcmtlZCBhcyBVTlNFTlQgYWdhaW4gc28gbmV4dCBjYWxsIHdpbGwgY29u
dGludWUKLQkgKiB0byBzZW5kIGl0IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldCBhIENXUiwg
dG8gcmVtb3ZlIGl0LgotCSAqLwotCWlmIChzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpCi0J
CXNjdHBfZml4X2Vjbl9lY2hvKGFzb2MpOwotCi0JaWYgKHN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNl
dCkgewotCQlpZiAoc2N0cF9zZW5kX3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwg
c29fbG9ja2VkKSA9PSAwKSAgewotCQkJZ290byBkb19pdF9hZ2FpbjsKLQkJfQotCX0KLQlyZXR1
cm47Ci19Ci0KLQotaW50Ci1zY3RwX291dHB1dCgKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAot
I2lmIGRlZmluZWQoX19QYW5kYV9fKQotCXBha2hhbmRsZV90eXBlIG0sCi0jZWxzZQotCXN0cnVj
dCBtYnVmICptLAotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyICphZGRyLAotI2lmIGRlZmluZWQo
X19QYW5kYV9fKQotCXBha2hhbmRsZV90eXBlIGNvbnRyb2wsCi0jZWxzZQotCXN0cnVjdCBtYnVm
ICpjb250cm9sLAotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gNTAwMDAwCi0Jc3RydWN0IHRocmVhZCAqcCwKLSNlbGlmIGRlZmluZWQoX19X
aW5kb3dzX18pCi0JUEtUSFJFQUQgcCwKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0J
c3RydWN0IHByb2MgKnAgU0NUUF9VTlVTRUQsCi0jZWxzZQotCXN0cnVjdCBwcm9jICpwLAotI2Vu
ZGlmCi0jZW5kaWYKLQlpbnQgZmxhZ3MpCi17Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBf
TFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCi0JaWYgKGlucC0+c2N0cF9z
b2NrZXQgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwp
OwotCX0KLQlyZXR1cm4gKHNjdHBfc29zZW5kKGlucC0+c2N0cF9zb2NrZXQsCi0JCQkgICAgYWRk
ciwKLQkJCSAgICAoc3RydWN0IHVpbyAqKU5VTEwsCi0JCQkgICAgbSwKLQkJCSAgICBjb250cm9s
LAotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKLQkJCSAgICBm
bGFncwotI2Vsc2UKLQkJCSAgICBmbGFncywgcAotI2VuZGlmCi0JCQkpKTsKLX0KLQotdm9pZAot
c2VuZF9mb3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCSBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphdCwg
KnRwMSwgKmxhc3Q7Ci0Jc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZHRzbjsKLQlz
dHJ1Y3Qgc2N0cF9zdHJzZXEgKnN0cnNlcTsKLQlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHJz
ZXFfbTsKLQl1aW50MzJfdCBhZHZhbmNlX3BlZXJfYWNrX3BvaW50OwotCXVuc2lnbmVkIGludCBj
bnRfb2Zfc3BhY2UsIGksIG92aDsKLQl1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkOwotCXVuc2ln
bmVkIGludCBjbnRfb2Zfc2tpcHBlZCA9IDA7Ci0KLQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNi
KTsKLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9u
ZXh0KSB7Ci0JCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RT
TikgewotCQkJLyogbWFyayBpdCB0byB1bnNlbnQgKi8KLQkJCWNoay0+c2VudCA9IFNDVFBfREFU
QUdSQU1fVU5TRU5UOwotCQkJY2hrLT5zbmRfY291bnQgPSAwOwotCQkJLyogRG8gd2UgY29ycmVj
dCBpdHMgb3V0cHV0IGxvY2F0aW9uPyAqLwotCQkJaWYgKGNoay0+d2hvVG8pIHsKLQkJCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7Ci0JCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0J
CQl9Ci0JCQlnb3RvIHNjdHBfZmlsbF9pbl9yZXN0OwotCQl9Ci0JfQotCS8qIE9rIGlmIHdlIHJl
YWNoIGhlcmUgd2UgbXVzdCBidWlsZCBvbmUgKi8KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwg
Y2hrKTsKLQlpZiAoY2hrID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlhc29jLT5md2RfdHNu
X2NudCsrOwotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCS8qIAotCSAqIFdlIGRvbid0IGRvIHRo
ZSBvbGQgdGhpbmcgaGVyZSBzaW5jZQotCSAqIHRoaXMgaXMgdXNlZCBub3QgZm9yIG9uLXdpcmUg
YnV0IHRvCi0JICogdGVsbCBpZiB3ZSBhcmUgc2VuZGluZyBhIGZ3ZC10c24gYnkKLQkgKiB0aGUg
c3RhY2sgZHVyaW5nIG91dHB1dC4gQW5kIGlmIGl0cwotCSAqIGEgSUZPUldBUkQgb3IgYSBGT1JX
QVJEIGl0IGlzIGEgZndkLXRzbi4KLQkgKi8KLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBf
Rk9SV0FSRF9DVU1fVFNOOwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOwot
CWNoay0+ZmxhZ3MgPSAwOwotCWNoay0+YXNvYyA9IGFzb2M7Ci0JY2hrLT53aG9UbyA9IE5VTEw7
Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJ
VCwgMSwgTVRfREFUQSk7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXNjdHBfZnJlZV9h
X2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuOwotCX0KLQlT
Q1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQlUQUlMUV9J
TlNFUlRfVEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0J
YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLXNjdHBfZmlsbF9pbl9yZXN0OgotCS8qLQotCSAqIEhl
cmUgd2UgZ28gdGhyb3VnaCBhbmQgZmlsbCBvdXQgdGhlIHBhcnQgdGhhdCBkZWFscyB3aXRoCi0J
ICogc3RyZWFtL3NlcSBvZiB0aGUgb25lcyB3ZSBza2lwLgotCSAqLwotCVNDVFBfQlVGX0xFTihj
aGstPmRhdGEpID0gMDsKLQlUQUlMUV9GT1JFQUNIKGF0LCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0
cF9uZXh0KSB7Ci0JCWlmICgoYXQtPnNlbnQgIT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQKSAmJgot
CQkgICAgKGF0LT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7Ci0JCQkvKiBubyBt
b3JlIHRvIGxvb2sgYXQgKi8KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghYXNvYy0+aWRhdGFfc3Vw
cG9ydGVkICYmIChhdC0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkp
IHsKLQkJCS8qIFdlIGRvbid0IHJlcG9ydCB0aGVzZSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJ
Y250X29mX3NraXBwZWQrKzsKLQl9Ci0JaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgewotCQlz
cGFjZV9uZWVkZWQgPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCi0J
CSAgICAgICAgICAgICAgICAoY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
c2VxX21pZCkpKTsKLQl9IGVsc2UgewotCQlzcGFjZV9uZWVkZWQgPSAoc2l6ZW9mKHN0cnVjdCBz
Y3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCi0JCSAgICAgICAgICAgICAgICAoY250X29mX3NraXBw
ZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxKSkpOwotCX0KLQljbnRfb2Zfc3BhY2UgPSAo
dW5zaWduZWQgaW50KU1fVFJBSUxJTkdTUEFDRShjaGstPmRhdGEpOwotCi0JaWYgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQlvdmggPSBT
Q1RQX01JTl9PVkVSSEVBRDsKLQl9IGVsc2UgewotCQlvdmggPSBTQ1RQX01JTl9WNF9PVkVSSEVB
RDsKLQl9Ci0JaWYgKGNudF9vZl9zcGFjZSA+IChhc29jLT5zbWFsbGVzdF9tdHUgLSBvdmgpKSB7
Ci0JCS8qIHRyaW0gdG8gYSBtdHUgc2l6ZSAqLwotCQljbnRfb2Zfc3BhY2UgPSBhc29jLT5zbWFs
bGVzdF9tdHUgLSBvdmg7Ci0JfQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0xPR19UUllfQURWQU5DRSkgewotCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZX
RF9UU05fQ0hFQ0ssCi0JCQkgICAgICAgMHhmZiwgMCwgY250X29mX3NraXBwZWQsCi0JCQkgICAg
ICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpOwotCX0KLQlhZHZhbmNlX3BlZXJfYWNr
X3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7Ci0JaWYgKGNudF9vZl9zcGFj
ZSA8IHNwYWNlX25lZWRlZCkgewotCQkvKi0KLQkJICogb2sgd2UgbXVzdCB0cmltIGRvd24gdGhl
IGNodW5rIGJ5IGxvd2VyaW5nIHRoZQotCQkgKiBhZHZhbmNlIHBlZXIgYWNrIHBvaW50LgotCQkg
Ki8KLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9H
X1RSWV9BRFZBTkNFKSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCi0J
CQkJICAgICAgIDB4ZmYsIDB4ZmYsIGNudF9vZl9zcGFjZSwKLQkJCQkgICAgICAgc3BhY2VfbmVl
ZGVkKTsKLQkJfQotCQljbnRfb2Zfc2tpcHBlZCA9IGNudF9vZl9zcGFjZSAtIHNpemVvZihzdHJ1
Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuayk7Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQp
IHsKLQkJCWNudF9vZl9za2lwcGVkIC89IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsK
LQkJfSBlbHNlIHsKLQkJCWNudF9vZl9za2lwcGVkIC89IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJz
ZXEpOwotCQl9Ci0JCS8qLQotCQkgKiBHbyB0aHJvdWdoIGFuZCBmaW5kIHRoZSBUU04gdGhhdCB3
aWxsIGJlIHRoZSBvbmUKLQkJICogd2UgcmVwb3J0LgotCQkgKi8KLQkJYXQgPSBUQUlMUV9GSVJT
VCgmYXNvYy0+c2VudF9xdWV1ZSk7Ci0JCWlmIChhdCAhPSBOVUxMKSB7Ci0JCQlmb3IgKGkgPSAw
OyBpIDwgY250X29mX3NraXBwZWQ7IGkrKykgewotCQkJCXRwMSA9IFRBSUxRX05FWFQoYXQsIHNj
dHBfbmV4dCk7Ci0JCQkJaWYgKHRwMSA9PSBOVUxMKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
CQlhdCA9IHRwMTsKLQkJCX0KLQkJfQotCQlpZiAoYXQgJiYgU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKLQkJCXNjdHBfbWlzY19p
bnRzKFNDVFBfRldEX1RTTl9DSEVDSywKLQkJCQkgICAgICAgMHhmZiwgY250X29mX3NraXBwZWQs
IGF0LT5yZWMuZGF0YS50c24sCi0JCQkJICAgICAgIGFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3Bv
aW50KTsKLQkJfQotCQlsYXN0ID0gYXQ7Ci0JCS8qLQotCQkgKiBsYXN0IG5vdyBwb2ludHMgdG8g
bGFzdCBvbmUgSSBjYW4gcmVwb3J0LCB1cGRhdGUKLQkJICogcGVlciBhY2sgcG9pbnQKLQkJICov
Ci0JCWlmIChsYXN0KSB7Ci0JCQlhZHZhbmNlX3BlZXJfYWNrX3BvaW50ID0gbGFzdC0+cmVjLmRh
dGEudHNuOwotCQl9Ci0JCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJCXNwYWNlX25l
ZWRlZCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykgKwotCQkJICAgICAg
ICAgICAgICAgY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCk7
Ci0JCX0gZWxzZSB7Ci0JCQlzcGFjZV9uZWVkZWQgPSBzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2Fy
ZF90c25fY2h1bmspICsKLQkJCSAgICAgICAgICAgICAgIGNudF9vZl9za2lwcGVkICogc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0cnNlcSk7Ci0JCX0KLQl9Ci0JY2hrLT5zZW5kX3NpemUgPSBzcGFjZV9u
ZWVkZWQ7Ci0JLyogU2V0dXAgdGhlIGNodW5rICovCi0JZndkdHNuID0gbXRvZChjaGstPmRhdGEs
IHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rICopOwotCWZ3ZHRzbi0+Y2guY2h1bmtfbGVu
Z3RoID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOwotCWZ3ZHRzbi0+Y2guY2h1bmtfZmxhZ3MgPSAw
OwotCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJZndkdHNuLT5jaC5jaHVua190eXBl
ID0gU0NUUF9JRk9SV0FSRF9DVU1fVFNOOwotCX0gZWxzZSB7Ci0JCWZ3ZHRzbi0+Y2guY2h1bmtf
dHlwZSA9IFNDVFBfRk9SV0FSRF9DVU1fVFNOOwotCX0KLQlmd2R0c24tPm5ld19jdW11bGF0aXZl
X3RzbiA9IGh0b25sKGFkdmFuY2VfcGVlcl9hY2tfcG9pbnQpOwotCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7Ci0JZndkdHNuKys7Ci0JLyotCi0JICogTW92ZSBwb2lu
dGVyIHRvIGFmdGVyIHRoZSBmd2R0c24gYW5kIHRyYW5zZmVyIHRvIHRoZQotCSAqIHN0cnNlcSBw
b2ludGVyLgotCSAqLwotCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKLQkJc3Ryc2VxX20g
PSAoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCAqKWZ3ZHRzbjsKLQkJc3Ryc2VxID0gTlVMTDsKLQl9
IGVsc2UgewotCQlzdHJzZXEgPSAoc3RydWN0IHNjdHBfc3Ryc2VxICopZndkdHNuOwotCQlzdHJz
ZXFfbSA9IE5VTEw7Ci0JfQotCS8qLQotCSAqIE5vdyBwb3B1bGF0ZSB0aGUgc3Ryc2VxIGxpc3Qu
IFRoaXMgaXMgZG9uZSBibGluZGx5Ci0JICogd2l0aG91dCBwdWxsaW5nIG91dCBkdXBsaWNhdGUg
c3RyZWFtIGluZm8uIFRoaXMgaXMKLQkgKiBpbmVmZmljZW50IGJ1dCB3b24ndCBoYXJtIHRoZSBw
cm9jZXNzIHNpbmNlIHRoZSBwZWVyIHdpbGwKLQkgKiBsb29rIGF0IHRoZXNlIGluIHNlcXVlbmNl
IGFuZCB3aWxsIHRodXMgcmVsZWFzZSBhbnl0aGluZy4KLQkgKiBJdCBjb3VsZCBtZWFuIHdlIGV4
Y2VlZCB0aGUgUE1UVSBhbmQgY2hvcCBvZmYgc29tZSB0aGF0Ci0JICogd2UgY291bGQgaGF2ZSBp
bmNsdWRlZC4uIGJ1dCB0aGlzIGlzIHVubGlrZWx5IChha2EgMTQzMi80Ci0JICogd291bGQgbWVh
biAzMDArIHN0cmVhbSBzZXEncyB3b3VsZCBoYXZlIHRvIGJlIHJlcG9ydGVkIGluCi0JICogb25l
IEZXRC1UU04uIFdpdGggYSBiaXQgb2Ygd29yayB3ZSBjYW4gbGF0ZXIgRklYIHRoaXMgdG8KLQkg
KiBvcHRpbWl6ZSBhbmQgcHVsbCBvdXQgZHVwbGljYXRlcy4uIGJ1dCBpdCBkb2VzIGFkZCBtb3Jl
Ci0JICogb3ZlcmhlYWQuIFNvIGZvciBub3cuLi4gbm90IQotCSAqLwotCWkgPSAwOwotCVRBSUxR
X0ZPUkVBQ0goYXQsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGkgPj0g
Y250X29mX3NraXBwZWQpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICghYXNvYy0+aWRhdGFfc3Vw
cG9ydGVkICYmIChhdC0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkp
IHsKLQkJCS8qIFdlIGRvbid0IHJlcG9ydCB0aGVzZSAqLwotCQkJY29udGludWU7Ci0JCX0KLQkJ
aWYgKGF0LT5yZWMuZGF0YS50c24gPT0gYWR2YW5jZV9wZWVyX2Fja19wb2ludCkgewotCQkJYXQt
PnJlYy5kYXRhLmZ3ZF90c25fY250ID0gMDsKLQkJfQotCQlpZiAoYXNvYy0+aWRhdGFfc3VwcG9y
dGVkKSB7Ci0JCQlzdHJzZXFfbS0+c2lkID0gaHRvbnMoYXQtPnJlYy5kYXRhLnNpZCk7Ci0JCQlp
ZiAoYXQtPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKLQkJCQlz
dHJzZXFfbS0+ZmxhZ3MgPSBodG9ucyhQUl9TQ1RQX1VOT1JERVJFRF9GTEFHKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJc3Ryc2VxX20tPmZsYWdzID0gMDsKLQkJCX0KLQkJCXN0cnNlcV9tLT5taWQgPSBo
dG9ubChhdC0+cmVjLmRhdGEubWlkKTsKLQkJCXN0cnNlcV9tKys7Ci0JCX0gZWxzZSB7Ci0JCQlz
dHJzZXEtPnNpZCA9IGh0b25zKGF0LT5yZWMuZGF0YS5zaWQpOwotCQkJc3Ryc2VxLT5zc24gPSBo
dG9ucygodWludDE2X3QpYXQtPnJlYy5kYXRhLm1pZCk7Ci0JCQlzdHJzZXErKzsKLQkJfQotCQlp
Kys7Ci0JfQotCXJldHVybjsKLX0KLQotdm9pZAotc2N0cF9zZW5kX3NhY2soc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0J
LyotCi0JICogUXVldWUgdXAgYSBTQUNLIG9yIE5SLVNBQ0sgaW4gdGhlIGNvbnRyb2wgcXVldWUu
Ci0JICogV2UgbXVzdCBmaXJzdCBjaGVjayB0byBzZWUgaWYgYSBTQUNLIG9yIE5SLVNBQ0sgaXMK
LQkgKiBzb21laG93IG9uIHRoZSBjb250cm9sIHF1ZXVlLgotCSAqIElmIHNvLCB3ZSB3aWxsIHRh
a2UgYW5kIGFuZCByZW1vdmUgdGhlIG9sZCBvbmUuCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqYV9jaGs7Ci0Jc3Ry
dWN0IHNjdHBfc2Fja19jaHVuayAqc2FjazsKLQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICpu
cl9zYWNrOwotCXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKmdhcF9kZXNjcmlwdG9yOwotCWNv
bnN0IHN0cnVjdCBzYWNrX3RyYWNrICpzZWxlY3RvcjsKLQlpbnQgbWVyZ2VhYmxlID0gMDsKLQlp
bnQgb2Zmc2V0OwotCWNhZGRyX3QgbGltaXQ7Ci0JdWludDMyX3QgKmR1cDsKLQlpbnQgbGltaXRf
cmVhY2hlZCA9IDA7Ci0JdW5zaWduZWQgaW50IGksIHNpeiwgajsKLQl1bnNpZ25lZCBpbnQgbnVt
X2dhcF9ibG9ja3MgPSAwLCBudW1fbnJfZ2FwX2Jsb2NrcyA9IDAsIHNwYWNlOwotCWludCBudW1f
ZHVwcyA9IDA7Ci0JaW50IHNwYWNlX3JlcTsKLQl1aW50MzJfdCBoaWdoZXN0X3RzbjsKLQl1aW50
OF90IGZsYWdzOwotCXVpbnQ4X3QgdHlwZTsKLQl1aW50OF90IHRzbl9tYXA7Ci0KLQlpZiAoc3Rj
Yi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEpIHsKLQkJdHlwZSA9IFNDVFBfTlJfU0VMRUNU
SVZFX0FDSzsKLQl9IGVsc2UgewotCQl0eXBlID0gU0NUUF9TRUxFQ1RJVkVfQUNLOwotCX0KLQlh
X2NoayA9IE5VTEw7Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOwotCWlmIChhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9PSBOVUxMKSB7Ci0JCS8q
IEhtbSB3ZSBuZXZlciByZWNlaXZlZCBhbnl0aGluZyAqLwotCQlyZXR1cm47Ci0JfQotCXNjdHBf
c2xpZGVfbWFwcGluZ19hcnJheXMoc3RjYik7Ci0Jc2N0cF9zZXRfcnduZChzdGNiLCBhc29jKTsK
LQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0
KSB7Ci0JCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSB0eXBlKSB7Ci0JCQkvKiBIbW0sIGZv
dW5kIGEgc2FjayBhbHJlYWR5IG9uIHF1ZXVlLCByZW1vdmUgaXQgKi8KLQkJCVRBSUxRX1JFTU9W
RSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlhc29jLT5j
dHJsX3F1ZXVlX2NudC0tOwotCQkJYV9jaGsgPSBjaGs7Ci0JCQlpZiAoYV9jaGstPmRhdGEpIHsK
LQkJCQlzY3RwX21fZnJlZW0oYV9jaGstPmRhdGEpOwotCQkJCWFfY2hrLT5kYXRhID0gTlVMTDsK
LQkJCX0KLQkJCWlmIChhX2Noay0+d2hvVG8pIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
YV9jaGstPndob1RvKTsKLQkJCQlhX2Noay0+d2hvVG8gPSBOVUxMOwotCQkJfQotCQkJYnJlYWs7
Ci0JCX0KLQl9Ci0JaWYgKGFfY2hrID09IE5VTEwpIHsKLQkJc2N0cF9hbGxvY19hX2NodW5rKHN0
Y2IsIGFfY2hrKTsKLQkJaWYgKGFfY2hrID09IE5VTEwpIHsKLQkJCS8qIE5vIG1lbW9yeSBzbyB3
ZSBkcm9wIHRoZSBpZGVhLCBhbmQgc2V0IGEgdGltZXIgKi8KLQkJCWlmIChzdGNiLT5hc29jLmRl
bGF5ZWRfYWNrKSB7Ci0JCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLAot
CQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAotCQkJCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ18zKTsKLQkJCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAotCQkJCSAgICBzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBOVUxMKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3RjYi0+YXNvYy5zZW5kX3NhY2sgPSAx
OwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JCWFfY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JCWFf
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPSB0eXBlOwotCQlhX2Noay0+cmVjLmNodW5rX2lkLmNhbl90
YWtlX2RhdGEgPSAxOwotCX0KLQkvKiBDbGVhciBvdXIgcGt0IGNvdW50cyAqLwotCWFzb2MtPmRh
dGFfcGt0c19zZWVuID0gMDsKLQotCWFfY2hrLT5mbGFncyA9IDA7Ci0JYV9jaGstPmFzb2MgPSBh
c29jOwotCWFfY2hrLT5zbmRfY291bnQgPSAwOwotCWFfY2hrLT5zZW5kX3NpemUgPSAwOwkvKiBm
aWxsIGluIGxhdGVyICovCi0JYV9jaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQlh
X2Noay0+d2hvVG8gPSBOVUxMOwotCi0JaWYgKCEoYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20t
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgewotCQkvKi0KLQkJICogT2ssIHRo
ZSBkZXN0aW5hdGlvbiBmb3IgdGhlIFNBQ0sgaXMgdW5yZWFjaGFibGUsIGxldHMgc2VlIGlmCi0J
CSAqIHdlIGNhbiBzZWxlY3QgYW4gYWx0ZXJuYXRlIHRvIGFzb2MtPmxhc3RfZGF0YV9jaHVua19m
cm9tCi0JCSAqLwotCQlhX2Noay0+d2hvVG8gPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNi
LCBhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSwgMCk7Ci0JCWlmIChhX2Noay0+d2hvVG8gPT0g
TlVMTCkgewotCQkJLyogTm9wZSwgbm8gYWx0ZXJuYXRlICovCi0JCQlhX2Noay0+d2hvVG8gPSBh
c29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbTsKLQkJfQotCX0gZWxzZSB7Ci0JCWFfY2hrLT53aG9U
byA9IGFzb2MtPmxhc3RfZGF0YV9jaHVua19mcm9tOwotCX0KLQlpZiAoYV9jaGstPndob1RvKSB7
Ci0JCWF0b21pY19hZGRfaW50KCZhX2Noay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JfQotCWlm
IChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBhc29jLT5oaWdoZXN0
X3Rzbl9pbnNpZGVfbnJfbWFwKSkgewotCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNu
X2luc2lkZV9tYXA7Ci0JfSBlbHNlIHsKLQkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbnJfbWFwOwotCX0KLQlpZiAoaGlnaGVzdF90c24gPT0gYXNvYy0+Y3VtdWxhdGl2
ZV90c24pIHsKLQkJLyogbm8gZ2FwcyAqLwotCQlpZiAodHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9B
Q0spIHsKLQkJCXNwYWNlX3JlcSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rKTsKLQkJ
fSBlbHNlIHsKLQkJCXNwYWNlX3JlcSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5r
KTsKLQkJfQotCX0gZWxzZSB7Ci0JCS8qIGdhcHMgZ2V0IGEgY2x1c3RlciAqLwotCQlzcGFjZV9y
ZXEgPSBNQ0xCWVRFUzsKLQl9Ci0JLyogT2sgbm93IGxldHMgZm9ybXVsYXRlIGEgTUJVRiB3aXRo
IG91ciBzYWNrICovCi0JYV9jaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc3BhY2Vf
cmVxLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKChhX2Noay0+ZGF0YSA9PSBOVUxM
KSB8fAotCSAgICAoYV9jaGstPndob1RvID09IE5VTEwpKSB7Ci0JCS8qIHJhdHMsIG5vIG1idWYg
bWVtb3J5ICovCi0JCWlmIChhX2Noay0+ZGF0YSkgewotCQkJLyogd2FzIGEgcHJvYmxlbSB3aXRo
IHRoZSBkZXN0aW5hdGlvbiAqLwotCQkJc2N0cF9tX2ZyZWVtKGFfY2hrLT5kYXRhKTsKLQkJCWFf
Y2hrLT5kYXRhID0gTlVMTDsKLQkJfQotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBhX2Noaywg
c29fbG9ja2VkKTsKLQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCi0JCWlmIChzdGNiLT5h
c29jLmRlbGF5ZWRfYWNrKSB7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JF
Q1YsCi0JCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCwKLQkJCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9PVVRQVVQgKyBTQ1RQX0xPQ180KTsKLQkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCi0JCQkgICAgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgTlVMTCk7Ci0JCX0gZWxzZSB7Ci0JCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7
Ci0JCX0KLQkJcmV0dXJuOwotCX0KLQkvKiBvaywgbGV0cyBnbyB0aHJvdWdoIGFuZCBmaWxsIGl0
IGluICovCi0JU0NUUF9CVUZfUkVTVl9VRihhX2Noay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQp
OwotCXNwYWNlID0gKHVuc2lnbmVkIGludClNX1RSQUlMSU5HU1BBQ0UoYV9jaGstPmRhdGEpOwot
CWlmIChzcGFjZSA+IChhX2Noay0+d2hvVG8tPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkgewot
CQlzcGFjZSA9IChhX2Noay0+d2hvVG8tPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEKTsKLQl9Ci0J
bGltaXQgPSBtdG9kKGFfY2hrLT5kYXRhLCBjYWRkcl90KTsKLQlsaW1pdCArPSBzcGFjZTsKLQot
CWZsYWdzID0gMDsKLQotCWlmICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKLQkgICAg
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgewotCQkvKi0KLQkJICogQ01UIERB
QyBhbGdvcml0aG06IElmIDIgKGkuZS4sIDB4MTApIHBhY2tldHMgaGF2ZSBiZWVuCi0JCSAqIHJl
Y2VpdmVkLCB0aGVuIHNldCBoaWdoIGJpdCB0byAxLCBlbHNlIDAuIFJlc2V0Ci0JCSAqIHBrdHNf
cmN2ZC4KLQkJICovCi0JCWZsYWdzIHw9IChhc29jLT5jbXRfZGFjX3BrdHNfcmN2ZCA8PCA2KTsK
LQkJYXNvYy0+Y210X2RhY19wa3RzX3JjdmQgPSAwOwotCX0KLSNpZmRlZiBTQ1RQX0FTT0NMT0df
T0ZfVFNOUwotCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ3NudFtzdGNiLT5hc29jLmN1bWFja19sb2df
YXRzbnRdID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247Ci0Jc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0
c250Kys7Ci0JaWYgKHN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNudCA+PSBTQ1RQX1RTTl9MT0df
U0laRSkgewotCQlzdGNiLT5hc29jLmN1bWFja19sb2dfYXRzbnQgPSAwOwotCX0KLSNlbmRpZgot
CS8qIHJlc2V0IHRoZSByZWFkZXJzIGludGVycHJldGF0aW9uICovCi0Jc3RjYi0+ZnJlZWRfYnlf
c29yY3Zfc2luY2VsYXN0ID0gMDsKLQotCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykg
ewotCQlzYWNrID0gbXRvZChhX2Noay0+ZGF0YSwgc3RydWN0IHNjdHBfc2Fja19jaHVuayAqKTsK
LQkJbnJfc2FjayA9IE5VTEw7Ci0JCWdhcF9kZXNjcmlwdG9yID0gKHN0cnVjdCBzY3RwX2dhcF9h
Y2tfYmxvY2sgKikoKGNhZGRyX3Qpc2FjayArIHNpemVvZihzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5r
KSk7Ci0JCWlmIChoaWdoZXN0X3RzbiA+IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsK
LQkJCXNpeiA9ICgoKGhpZ2hlc3RfdHNuIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbikg
KyAxKSArIDcpIC8gODsKLQkJfSBlbHNlIHsKLQkJCXNpeiA9ICgoKE1BWF9UU04gLSBoaWdoZXN0
X3RzbikgKyAxKSArIGhpZ2hlc3RfdHNuICsgNykgLyA4OwotCQl9Ci0JfSBlbHNlIHsKLQkJc2Fj
ayA9IE5VTEw7Ci0JCW5yX3NhY2sgPSBtdG9kKGFfY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9ucl9z
YWNrX2NodW5rICopOwotCQlnYXBfZGVzY3JpcHRvciA9IChzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Js
b2NrICopKChjYWRkcl90KW5yX3NhY2sgKyBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVu
aykpOwotCQlpZiAoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCA+IGFzb2MtPm1hcHBpbmdf
YXJyYXlfYmFzZV90c24pIHsKLQkJCXNpeiA9ICgoKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXAgLSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSArIDEpICsgNykgLyA4OwotCQl9IGVs
c2UgewotCQkJc2l6ID0gKCgoTUFYX1RTTiAtIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24p
ICsgMSkgKyBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwICsgNykgLyA4OwotCQl9Ci0JfQot
Ci0JaWYgKFNDVFBfVFNOX0dUKGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sIGFzb2MtPmN1
bXVsYXRpdmVfdHNuKSkgewotCQlvZmZzZXQgPSAxOwotCX0gZWxzZSB7Ci0JCW9mZnNldCA9IGFz
b2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gLSBhc29jLT5jdW11bGF0aXZlX3RzbjsKLQl9Ci0J
aWYgKCgodHlwZSA9PSBTQ1RQX1NFTEVDVElWRV9BQ0spICYmCi0JICAgICBTQ1RQX1RTTl9HVCho
aWdoZXN0X3RzbiwgYXNvYy0+Y3VtdWxhdGl2ZV90c24pKSB8fAotCSAgICAoKHR5cGUgPT0gU0NU
UF9OUl9TRUxFQ1RJVkVfQUNLKSAmJgotCSAgICAgU0NUUF9UU05fR1QoYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCwgYXNvYy0+Y3VtdWxhdGl2ZV90c24pKSkgewotCQkvKiB3ZSBoYXZlIGEg
Z2FwIC4uIG1heWJlICovCi0JCWZvciAoaSA9IDA7IGkgPCBzaXo7IGkrKykgewotCQkJdHNuX21h
cCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlbaV07Ci0JCQlpZiAodHlwZSA9PSBTQ1RQX1NFTEVDVElW
RV9BQ0spIHsKLQkJCQl0c25fbWFwIHw9IGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbaV07Ci0JCQl9
Ci0JCQlpZiAoaSA9PSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBDbGVhciBhbGwgYml0cyBjb3JyZXNw
b25kaW5nIHRvIFRTTnMKLQkJCQkgKiBzbWFsbGVyIG9yIGVxdWFsIHRvIHRoZSBjdW11bGF0aXZl
IFRTTi4KLQkJCQkgKi8KLQkJCQl0c25fbWFwICY9ICh+MFUgPDwgKDEgLSBvZmZzZXQpKTsKLQkJ
CX0KLQkJCXNlbGVjdG9yID0gJnNhY2tfYXJyYXlbdHNuX21hcF07Ci0JCQlpZiAobWVyZ2VhYmxl
ICYmIHNlbGVjdG9yLT5yaWdodF9lZGdlKSB7Ci0JCQkJLyoKLQkJCQkgKiBCYWNrdXAsIGxlZnQg
YW5kIHJpZ2h0IGVkZ2VzIHdlcmUgb2sgdG8KLQkJCQkgKiBtZXJnZS4KLQkJCQkgKi8KLQkJCQlu
dW1fZ2FwX2Jsb2Nrcy0tOwotCQkJCWdhcF9kZXNjcmlwdG9yLS07Ci0JCQl9Ci0JCQlpZiAoc2Vs
ZWN0b3ItPm51bV9lbnRyaWVzID09IDApCi0JCQkJbWVyZ2VhYmxlID0gMDsKLQkJCWVsc2Ugewot
CQkJCWZvciAoaiA9IDA7IGogPCBzZWxlY3Rvci0+bnVtX2VudHJpZXM7IGorKykgewotCQkJCQlp
ZiAobWVyZ2VhYmxlICYmIHNlbGVjdG9yLT5yaWdodF9lZGdlKSB7Ci0JCQkJCQkvKgotCQkJCQkJ
ICogZG8gYSBtZXJnZSBieSBOT1Qgc2V0dGluZwotCQkJCQkJICogdGhlIGxlZnQgc2lkZQotCQkJ
CQkJICovCi0JCQkJCQltZXJnZWFibGUgPSAwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJLyoKLQkJ
CQkJCSAqIG5vIG1lcmdlLCBzZXQgdGhlIGxlZnQKLQkJCQkJCSAqIHNpZGUKLQkJCQkJCSAqLwot
CQkJCQkJbWVyZ2VhYmxlID0gMDsKLQkJCQkJCWdhcF9kZXNjcmlwdG9yLT5zdGFydCA9IGh0b25z
KChzZWxlY3Rvci0+Z2Fwc1tqXS5zdGFydCArIG9mZnNldCkpOwotCQkJCQl9Ci0JCQkJCWdhcF9k
ZXNjcmlwdG9yLT5lbmQgPSBodG9ucygoc2VsZWN0b3ItPmdhcHNbal0uZW5kICsgb2Zmc2V0KSk7
Ci0JCQkJCW51bV9nYXBfYmxvY2tzKys7Ci0JCQkJCWdhcF9kZXNjcmlwdG9yKys7Ci0JCQkJCWlm
ICgoKGNhZGRyX3QpZ2FwX2Rlc2NyaXB0b3IgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19i
bG9jaykpID4gbGltaXQpIHsKLQkJCQkJCS8qIG5vIG1vcmUgcm9vbSAqLwotCQkJCQkJbGltaXRf
cmVhY2hlZCA9IDE7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoc2VsZWN0
b3ItPmxlZnRfZWRnZSkgewotCQkJCQltZXJnZWFibGUgPSAxOwotCQkJCX0KLQkJCX0KLQkJCWlm
IChsaW1pdF9yZWFjaGVkKSB7Ci0JCQkJLyogUmVhY2hlZCB0aGUgbGltaXQgc3RvcCAqLwotCQkJ
CWJyZWFrOwotCQkJfQotCQkJb2Zmc2V0ICs9IDg7Ci0JCX0KLQl9Ci0JaWYgKCh0eXBlID09IFND
VFBfTlJfU0VMRUNUSVZFX0FDSykgJiYKLQkgICAgKGxpbWl0X3JlYWNoZWQgPT0gMCkpIHsKLQot
CQltZXJnZWFibGUgPSAwOwotCi0JCWlmIChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFw
ID4gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgewotCQkJc2l6ID0gKCgoYXNvYy0+aGln
aGVzdF90c25faW5zaWRlX25yX21hcCAtIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pICsg
MSkgKyA3KSAvIDg7Ci0JCX0gZWxzZSB7Ci0JCQlzaXogPSAoKChNQVhfVFNOIC0gYXNvYy0+bWFw
cGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAgKyA3KSAvIDg7Ci0JCX0KLQotCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJh
eV9iYXNlX3RzbiwgYXNvYy0+Y3VtdWxhdGl2ZV90c24pKSB7Ci0JCQlvZmZzZXQgPSAxOwotCQl9
IGVsc2UgewotCQkJb2Zmc2V0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIGFzb2Mt
PmN1bXVsYXRpdmVfdHNuOwotCQl9Ci0JCWlmIChTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbnJfbWFwLCBhc29jLT5jdW11bGF0aXZlX3RzbikpIHsKLQkJCS8qIHdlIGhhdmUg
YSBnYXAgLi4gbWF5YmUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBzaXo7IGkrKykgewotCQkJCXRz
bl9tYXAgPSBhc29jLT5ucl9tYXBwaW5nX2FycmF5W2ldOwotCQkJCWlmIChpID09IDApIHsKLQkJ
CQkJLyoKLQkJCQkJICogQ2xlYXIgYWxsIGJpdHMgY29ycmVzcG9uZGluZyB0byBUU05zCi0JCQkJ
CSAqIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1bXVsYXRpdmUgVFNOLgotCQkJCQkgKi8KLQkJ
CQkJdHNuX21hcCAmPSAofjBVIDw8ICgxIC0gb2Zmc2V0KSk7Ci0JCQkJfQotCQkJCXNlbGVjdG9y
ID0gJnNhY2tfYXJyYXlbdHNuX21hcF07Ci0JCQkJaWYgKG1lcmdlYWJsZSAmJiBzZWxlY3Rvci0+
cmlnaHRfZWRnZSkgewotCQkJCQkvKgotCQkJCQkqIEJhY2t1cCwgbGVmdCBhbmQgcmlnaHQgZWRn
ZXMgd2VyZSBvayB0bwotCQkJCQkqIG1lcmdlLgotCQkJCQkqLwotCQkJCQludW1fbnJfZ2FwX2Js
b2Nrcy0tOwotCQkJCQlnYXBfZGVzY3JpcHRvci0tOwotCQkJCX0KLQkJCQlpZiAoc2VsZWN0b3It
Pm51bV9lbnRyaWVzID09IDApCi0JCQkJCW1lcmdlYWJsZSA9IDA7Ci0JCQkJZWxzZSB7Ci0JCQkJ
CWZvciAoaiA9IDA7IGogPCBzZWxlY3Rvci0+bnVtX2VudHJpZXM7IGorKykgewotCQkJCQkJaWYg
KG1lcmdlYWJsZSAmJiBzZWxlY3Rvci0+cmlnaHRfZWRnZSkgewotCQkJCQkJCS8qCi0JCQkJCQkJ
KiBkbyBhIG1lcmdlIGJ5IE5PVCBzZXR0aW5nCi0JCQkJCQkJKiB0aGUgbGVmdCBzaWRlCi0JCQkJ
CQkJKi8KLQkJCQkJCQltZXJnZWFibGUgPSAwOwotCQkJCQkJfSBlbHNlIHsKLQkJCQkJCQkvKgot
CQkJCQkJCSogbm8gbWVyZ2UsIHNldCB0aGUgbGVmdAotCQkJCQkJCSogc2lkZQotCQkJCQkJCSov
Ci0JCQkJCQkJbWVyZ2VhYmxlID0gMDsKLQkJCQkJCQlnYXBfZGVzY3JpcHRvci0+c3RhcnQgPSBo
dG9ucygoc2VsZWN0b3ItPmdhcHNbal0uc3RhcnQgKyBvZmZzZXQpKTsKLQkJCQkJCX0KLQkJCQkJ
CWdhcF9kZXNjcmlwdG9yLT5lbmQgPSBodG9ucygoc2VsZWN0b3ItPmdhcHNbal0uZW5kICsgb2Zm
c2V0KSk7Ci0JCQkJCQludW1fbnJfZ2FwX2Jsb2NrcysrOwotCQkJCQkJZ2FwX2Rlc2NyaXB0b3Ir
KzsKLQkJCQkJCWlmICgoKGNhZGRyX3QpZ2FwX2Rlc2NyaXB0b3IgKyBzaXplb2Yoc3RydWN0IHNj
dHBfZ2FwX2Fja19ibG9jaykpID4gbGltaXQpIHsKLQkJCQkJCQkvKiBubyBtb3JlIHJvb20gKi8K
LQkJCQkJCQlsaW1pdF9yZWFjaGVkID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJCX0KLQkJCQkJ
fQotCQkJCQlpZiAoc2VsZWN0b3ItPmxlZnRfZWRnZSkgewotCQkJCQkJbWVyZ2VhYmxlID0gMTsK
LQkJCQkJfQotCQkJCX0KLQkJCQlpZiAobGltaXRfcmVhY2hlZCkgewotCQkJCQkvKiBSZWFjaGVk
IHRoZSBsaW1pdCBzdG9wICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlvZmZzZXQgKz0gODsK
LQkJCX0KLQkJfQotCX0KLQkvKiBub3cgd2UgbXVzdCBhZGQgYW55IGR1cHMgd2UgYXJlIGdvaW5n
IHRvIHJlcG9ydC4gKi8KLQlpZiAoKGxpbWl0X3JlYWNoZWQgPT0gMCkgJiYgKGFzb2MtPm51bWR1
cHRzbnMpKSB7Ci0JCWR1cCA9ICh1aW50MzJfdCAqKSBnYXBfZGVzY3JpcHRvcjsKLQkJZm9yIChp
ID0gMDsgaSA8IGFzb2MtPm51bWR1cHRzbnM7IGkrKykgewotCQkJKmR1cCA9IGh0b25sKGFzb2Mt
PmR1cF90c25zW2ldKTsKLQkJCWR1cCsrOwotCQkJbnVtX2R1cHMrKzsKLQkJCWlmICgoKGNhZGRy
X3QpZHVwICsgc2l6ZW9mKHVpbnQzMl90KSkgPiBsaW1pdCkgewotCQkJCS8qIG5vIG1vcmUgcm9v
bSAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWFzb2MtPm51bWR1cHRzbnMgPSAwOwotCX0K
LQkvKgotCSAqIG5vdyB0aGF0IHRoZSBjaHVuayBpcyBwcmVwYXJlZCBxdWV1ZSBpdCB0byB0aGUg
Y29udHJvbCBjaHVuawotCSAqIHF1ZXVlLgotCSAqLwotCWlmICh0eXBlID09IFNDVFBfU0VMRUNU
SVZFX0FDSykgewotCQlhX2Noay0+c2VuZF9zaXplID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0
IHNjdHBfc2Fja19jaHVuaykgKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVt
X2dhcF9ibG9ja3MgKyBudW1fbnJfZ2FwX2Jsb2NrcykgKiBzaXplb2Yoc3RydWN0IHNjdHBfZ2Fw
X2Fja19ibG9jaykgKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fZHVwcyAq
IHNpemVvZihpbnQzMl90KSk7Ci0JCVNDVFBfQlVGX0xFTihhX2Noay0+ZGF0YSkgPSBhX2Noay0+
c2VuZF9zaXplOwotCQlzYWNrLT5zYWNrLmN1bV90c25fYWNrID0gaHRvbmwoYXNvYy0+Y3VtdWxh
dGl2ZV90c24pOwotCQlzYWNrLT5zYWNrLmFfcnduZCA9IGh0b25sKGFzb2MtPm15X3J3bmQpOwot
CQlzYWNrLT5zYWNrLm51bV9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fZ2FwX2Jsb2Nrcyk7Ci0J
CXNhY2stPnNhY2subnVtX2R1cF90c25zID0gaHRvbnMobnVtX2R1cHMpOwotCQlzYWNrLT5jaC5j
aHVua190eXBlID0gdHlwZTsKLQkJc2Fjay0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKLQkJc2Fj
ay0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoYV9jaGstPnNlbmRfc2l6ZSk7Ci0JfSBlbHNlIHsK
LQkJYV9jaGstPnNlbmRfc2l6ZSA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3Nh
Y2tfY2h1bmspICsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG51bV9nYXBfYmxv
Y2tzICsgbnVtX25yX2dhcF9ibG9ja3MpICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxv
Y2spICsKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2R1cHMgKiBzaXplb2Yo
aW50MzJfdCkpOwotCQlTQ1RQX0JVRl9MRU4oYV9jaGstPmRhdGEpID0gYV9jaGstPnNlbmRfc2l6
ZTsKLQkJbnJfc2Fjay0+bnJfc2Fjay5jdW1fdHNuX2FjayA9IGh0b25sKGFzb2MtPmN1bXVsYXRp
dmVfdHNuKTsKLQkJbnJfc2Fjay0+bnJfc2Fjay5hX3J3bmQgPSBodG9ubChhc29jLT5teV9yd25k
KTsKLQkJbnJfc2Fjay0+bnJfc2Fjay5udW1fZ2FwX2Fja19ibGtzID0gaHRvbnMobnVtX2dhcF9i
bG9ja3MpOwotCQlucl9zYWNrLT5ucl9zYWNrLm51bV9ucl9nYXBfYWNrX2Jsa3MgPSBodG9ucyhu
dW1fbnJfZ2FwX2Jsb2Nrcyk7Ci0JCW5yX3NhY2stPm5yX3NhY2subnVtX2R1cF90c25zID0gaHRv
bnMobnVtX2R1cHMpOwotCQlucl9zYWNrLT5ucl9zYWNrLnJlc2VydmVkID0gMDsKLQkJbnJfc2Fj
ay0+Y2guY2h1bmtfdHlwZSA9IHR5cGU7Ci0JCW5yX3NhY2stPmNoLmNodW5rX2ZsYWdzID0gZmxh
Z3M7Ci0JCW5yX3NhY2stPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGFfY2hrLT5zZW5kX3NpemUp
OwotCX0KLQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBhX2No
aywgc2N0cF9uZXh0KTsKLQlhc29jLT5teV9sYXN0X3JlcG9ydGVkX3J3bmQgPSBhc29jLT5teV9y
d25kOwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci0JYXNvYy0+c2VuZF9zYWNrID0gMDsKLQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc2Fja3MpOwotCXJldHVybjsKLX0KLQotdm9pZAotc2N0
cF9zZW5kX2Fib3J0X3RjYihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICpvcGVy
ciwgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlz
dHJ1Y3QgbWJ1ZiAqbV9hYm9ydCwgKm0sICptX2xhc3Q7Ci0Jc3RydWN0IG1idWYgKm1fb3V0LCAq
bV9lbmQgPSBOVUxMOwotCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydDsKLQlzdHJ1Y3Qg
c2N0cF9hdXRoX2NodW5rICphdXRoID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0J
dWludDMyX3QgdnRhZzsKLQl1aW50MzJfdCBhdXRoX29mZnNldCA9IDA7Ci0JaW50IGVycm9yOwot
CXVpbnQxNl90IGNhdXNlX2xlbiwgY2h1bmtfbGVuLCBwYWRkaW5nX2xlbjsKLQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQ
X0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxvY2tfYXNzZXJ0
KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYKLQlTQ1RQX1RDQl9MT0NL
X0FTU0VSVChzdGNiKTsKLQkvKi0KLQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVx
dWlyZXMgaXQgYW5kIHNhdmUgdGhlIG9mZnNldCBpbnRvCi0JICogdGhlIGNoYWluIGZvciBBVVRI
Ci0JICovCi0JaWYgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0FCT1JUX0FTU09D
SUFUSU9OLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5wZWVy
X2F1dGhfY2h1bmtzKSkgewotCQltX291dCA9IHNjdHBfYWRkX2F1dGhfY2h1bmsoTlVMTCwgJm1f
ZW5kLCAmYXV0aCwgJmF1dGhfb2Zmc2V0LAotCQkJCQkgICAgc3RjYiwgU0NUUF9BQk9SVF9BU1NP
Q0lBVElPTik7Ci0JCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1
bmtzKTsKLQl9IGVsc2UgewotCQltX291dCA9IE5VTEw7Ci0JfQotCW1fYWJvcnQgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rKSwgMCwgTV9OT1dB
SVQsIDEsIE1UX0hFQURFUik7Ci0JaWYgKG1fYWJvcnQgPT0gTlVMTCkgewotCQlpZiAobV9vdXQp
IHsKLQkJCXNjdHBfbV9mcmVlbShtX291dCk7Ci0JCX0KLQkJaWYgKG9wZXJyKSB7Ci0JCQlzY3Rw
X21fZnJlZW0ob3BlcnIpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0JLyogbGluayBpbiBhbnkgZXJy
b3IgKi8KLQlTQ1RQX0JVRl9ORVhUKG1fYWJvcnQpID0gb3BlcnI7Ci0JY2F1c2VfbGVuID0gMDsK
LQltX2xhc3QgPSBOVUxMOwotCWZvciAobSA9IG9wZXJyOyBtOyBtID0gU0NUUF9CVUZfTkVYVCht
KSkgewotCQljYXVzZV9sZW4gKz0gKHVpbnQxNl90KVNDVFBfQlVGX0xFTihtKTsKLQkJaWYgKFND
VFBfQlVGX05FWFQobSkgPT0gTlVMTCkgewotCQkJbV9sYXN0ID0gbTsKLQkJfQotCX0KLQlTQ1RQ
X0JVRl9MRU4obV9hYm9ydCkgPSBzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmspOwotCWNo
dW5rX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmspICsgY2F1
c2VfbGVuOwotCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIoY2h1bmtfbGVuKSAtIGNodW5rX2xl
bjsKLQlpZiAobV9vdXQgPT0gTlVMTCkgewotCQkvKiBOTyBBdXRoIGNodW5rIHByZXBlbmRlZCwg
c28gcmVzZXJ2ZSBzcGFjZSBpbiBmcm9udCAqLwotCQlTQ1RQX0JVRl9SRVNWX1VGKG1fYWJvcnQs
IFNDVFBfTUlOX09WRVJIRUFEKTsKLQkJbV9vdXQgPSBtX2Fib3J0OwotCX0gZWxzZSB7Ci0JCS8q
IFB1dCBBVVRIIGNodW5rIGF0IHRoZSBmcm9udCBvZiB0aGUgY2hhaW4gKi8KLQkJU0NUUF9CVUZf
TkVYVChtX2VuZCkgPSBtX2Fib3J0OwotCX0KLQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
LQkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNlIHsKLQkJbmV0ID0gc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCX0KLQkvKiBGaWxsIGluIHRoZSBBQk9SVCBjaHVu
ayBoZWFkZXIuICovCi0JYWJvcnQgPSBtdG9kKG1fYWJvcnQsIHN0cnVjdCBzY3RwX2Fib3J0X2No
dW5rICopOwotCWFib3J0LT5jaC5jaHVua190eXBlID0gU0NUUF9BQk9SVF9BU1NPQ0lBVElPTjsK
LQlpZiAoc3RjYi0+YXNvYy5wZWVyX3Z0YWcgPT0gMCkgewotCQkvKiBUaGlzIGhhcHBlbnMgaWZm
IHRoZSBhc3NvYyBpcyBpbiBDT09LSUUtV0FJVCBzdGF0ZS4gKi8KLQkJdnRhZyA9IHN0Y2ItPmFz
b2MubXlfdnRhZzsKLQkJYWJvcnQtPmNoLmNodW5rX2ZsYWdzID0gU0NUUF9IQURfTk9fVENCOwot
CX0gZWxzZSB7Ci0JCXZ0YWcgPSBzdGNiLT5hc29jLnBlZXJfdnRhZzsKLQkJYWJvcnQtPmNoLmNo
dW5rX2ZsYWdzID0gMDsKLQl9Ci0JYWJvcnQtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNodW5r
X2xlbik7Ci0JLyogQWRkIHBhZGRpbmcsIGlmIG5lY2Vzc2FyeS4gKi8KLQlpZiAocGFkZGluZ19s
ZW4gPiAwKSB7Ci0JCWlmICgobV9sYXN0ID09IE5VTEwpIHx8Ci0JCSAgICAoc2N0cF9hZGRfcGFk
X3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKSA9PSBOVUxMKSkgewotCQkJc2N0cF9tX2ZyZWVt
KG1fb3V0KTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZl
bF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xf
YWRkciwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vdXQsIGF1
dGhfb2Zmc2V0LCBhdXRoLCBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCwgMSwgMCwg
MCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9l
cC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIGh0b25sKHZ0YWcpLAotCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24t
PnBvcnQsIE5VTEwsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpKSkgewotCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7Ci0JCWlmIChlcnJvciA9
PSBFTk9CVUZTKSB7Ci0JCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMTsKLQkJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX2xvd2xldmVsZXJyKTsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0Y2ItPmFz
b2MuaWZwX2hhZF9lbm9idWYgPSAwOwotCX0KLQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfb3V0Y29udHJvbGNodW5rcyk7Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9zaHV0ZG93bl9jb21w
bGV0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBy
ZWZsZWN0X3Z0YWcpCi17Ci0JLyogZm9ybXVsYXRlIGFuZCBTRU5EIGEgU0hVVERPV04tQ09NUExF
VEUgKi8KLQlzdHJ1Y3QgbWJ1ZiAqbV9zaHV0ZG93bl9jb21wOwotCXN0cnVjdCBzY3RwX3NodXRk
b3duX2NvbXBsZXRlX2NodW5rICpzaHV0ZG93bl9jb21wbGV0ZTsKLQl1aW50MzJfdCB2dGFnOwot
CWludCBlcnJvcjsKLQl1aW50OF90IGZsYWdzOwotCi0JbV9zaHV0ZG93bl9jb21wID0gc2N0cF9n
ZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksIDAsIE1fTk9XQUlU
LCAxLCBNVF9IRUFERVIpOwotCWlmIChtX3NodXRkb3duX2NvbXAgPT0gTlVMTCkgewotCQkvKiBu
byBtYnVmJ3MgKi8KLQkJcmV0dXJuOwotCX0KLQlpZiAocmVmbGVjdF92dGFnKSB7Ci0JCWZsYWdz
ID0gU0NUUF9IQURfTk9fVENCOwotCQl2dGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCX0gZWxz
ZSB7Ci0JCWZsYWdzID0gMDsKLQkJdnRhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOwotCX0KLQlz
aHV0ZG93bl9jb21wbGV0ZSA9IG10b2QobV9zaHV0ZG93bl9jb21wLCBzdHJ1Y3Qgc2N0cF9zaHV0
ZG93bl9jb21wbGV0ZV9jaHVuayAqKTsKLQlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfdHlw
ZSA9IFNDVFBfU0hVVERPV05fQ09NUExFVEU7Ci0Jc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5r
X2ZsYWdzID0gZmxhZ3M7Ci0Jc2h1dGRvd25fY29tcGxldGUtPmNoLmNodW5rX2xlbmd0aCA9IGh0
b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuaykpOwotCVNDVFBf
QlVGX0xFTihtX3NodXRkb3duX2NvbXApID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2Nv
bXBsZXRlX2NodW5rKTsKLQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQo
c3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zaHV0ZG93bl9jb21wLCAwLCBOVUxM
LCAwLCAxLCAwLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKLQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaHRvbmwodnRhZyksCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLAot
I2VuZGlmCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU09f
Tk9UX0xPQ0tFRCkpKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQg
ZXJyb3IgJWRcbiIsIGVycm9yKTsKLQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKLQkJCXN0Y2It
PmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2
ZWxlcnIpOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RjYi0+YXNvYy5pZnBfaGFkX2Vub2J1ZiA9IDA7
Ci0JfQotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsK
LQlyZXR1cm47Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotc3RhdGljIHZvaWQKLXNj
dHBfc2VuZF9yZXNwX21zZyhzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpk
c3QsCi0gICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCB1aW50MzJfdCB2dGFn
LAotICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgdHlwZSwgc3RydWN0IG1idWYgKmNhdXNlLAot
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1
aW50MTZfdCBmaWJudW0sCi0gICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50
MTZfdCBwb3J0KQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1zY3RwX3NlbmRfcmVzcF9tc2coc3RydWN0
IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY3RwaGRyICpzaCwgdWludDMyX3QgdnRhZywKLSAgICAgICAgICAgICAgICAgICB1
aW50OF90IHR5cGUsIHN0cnVjdCBtYnVmICpjYXVzZSwKLSAgICAgICAgICAgICAgICAgICB1aW50
MzJfdCB2cmZfaWQgU0NUUF9VTlVTRUQsIHVpbnQxNl90IHBvcnQpCi0jZW5kaWYKLXsKLSNpZmRl
ZiBfX1BhbmRhX18KLQlwYWtoYW5kbGVfdHlwZSBvX3BhazsKLSNlbHNlCi0Jc3RydWN0IG1idWYg
Km9fcGFrOwotI2VuZGlmCi0Jc3RydWN0IG1idWYgKm1vdXQ7Ci0Jc3RydWN0IHNjdHBoZHIgKnNo
b3V0OwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCi0Jc3RydWN0IHVkcGhkciAqdWRwOwotCWludCByZXQ7Ci0jZW5kaWYKLQlp
bnQgbGVuLCBjYXVzZV9sZW4sIHBhZGRpbmdfbGVuOwotI2lmZGVmIElORVQKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1BhbmRhX18pCi0Jc2N0cF9yb3V0ZV90IHJvOwotI2Vu
ZGlmCi0Jc3RydWN0IHNvY2thZGRyX2luICpzcmNfc2luLCAqZHN0X3NpbjsKLQlzdHJ1Y3QgaXAg
KmlwOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmNfc2lu
NiwgKmRzdF9zaW42OwotCXN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKLQotCS8qIENvbXB1
dGUgdGhlIGxlbmd0aCBvZiB0aGUgY2F1c2UgYW5kIGFkZCBmaW5hbCBwYWRkaW5nLiAqLwotCWNh
dXNlX2xlbiA9IDA7Ci0JaWYgKGNhdXNlICE9IE5VTEwpIHsKLQkJc3RydWN0IG1idWYgKm1fYXQs
ICptX2xhc3QgPSBOVUxMOwotCi0JCWZvciAobV9hdCA9IGNhdXNlOyBtX2F0OyBtX2F0ID0gU0NU
UF9CVUZfTkVYVChtX2F0KSkgewotCQkJaWYgKFNDVFBfQlVGX05FWFQobV9hdCkgPT0gTlVMTCkK
LQkJCQltX2xhc3QgPSBtX2F0OwotCQkJY2F1c2VfbGVuICs9IFNDVFBfQlVGX0xFTihtX2F0KTsK
LQkJfQotCQlwYWRkaW5nX2xlbiA9IGNhdXNlX2xlbiAlIDQ7Ci0JCWlmIChwYWRkaW5nX2xlbiAh
PSAwKSB7Ci0JCQlwYWRkaW5nX2xlbiA9IDQgLSBwYWRkaW5nX2xlbjsKLQkJfQotCQlpZiAocGFk
ZGluZ19sZW4gIT0gMCkgewotCQkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0LCBwYWRk
aW5nX2xlbikgPT0gTlVMTCkgewotCQkJCXNjdHBfbV9mcmVlbShjYXVzZSk7Ci0JCQkJcmV0dXJu
OwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJcGFkZGluZ19sZW4gPSAwOwotCX0KLQkvKiBHZXQg
YW4gbWJ1ZiBmb3IgdGhlIGhlYWRlci4gKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIp
ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQlzd2l0Y2ggKGRzdC0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJbGVuICs9IHNpemVvZihzdHJ1Y3Qg
aXApOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJ
bGVuICs9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVs
dDoKLQkJYnJlYWs7Ci0JfQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlp
ZiAocG9ydCkgewotCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwotCX0KLSNlbmRpZgot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVm
aW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKLQltb3V0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxl
biArIG1heF9saW5raGRyLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0jZWxzZQotCW1vdXQg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuICsgU0NUUF9NQVhfTElOS0hEUiwgMSwgTV9OT1dB
SVQsIDEsIE1UX0RBVEEpOwotI2VuZGlmCi0jZWxzZQotCW1vdXQgPSBzY3RwX2dldF9tYnVmX2Zv
cl9tc2cobGVuICsgbWF4X2xpbmtoZHIsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLSNlbmRp
ZgotCWlmIChtb3V0ID09IE5VTEwpIHsKLQkJaWYgKGNhdXNlKSB7Ci0JCQlzY3RwX21fZnJlZW0o
Y2F1c2UpOwotCQl9Ci0JCXJldHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQotCVND
VFBfQlVGX1JFU1ZfVUYobW91dCwgbWF4X2xpbmtoZHIpOwotI2Vsc2UKLQlTQ1RQX0JVRl9SRVNW
X1VGKG1vdXQsIFNDVFBfTUFYX0xJTktIRFIpOwotI2VuZGlmCi0jZWxzZQotCVNDVFBfQlVGX1JF
U1ZfVUYobW91dCwgbWF4X2xpbmtoZHIpOwotI2VuZGlmCi0JU0NUUF9CVUZfTEVOKG1vdXQpID0g
bGVuOwotCVNDVFBfQlVGX05FWFQobW91dCkgPSBjYXVzZTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQotCU1fU0VURklCKG1vdXQsIGZpYm51bSk7Ci0JbW91dC0+bV9wa3RoZHIuZmxvd2lkID0g
bWZsb3dpZDsKLQlNX0hBU0hUWVBFX1NFVChtb3V0LCBtZmxvd3R5cGUpOwotI2VuZGlmCi0jaWZk
ZWYgSU5FVAotCWlwID0gTlVMTDsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JaXA2ID0gTlVMTDsK
LSNlbmRpZgotCXN3aXRjaCAoZHN0LT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBB
Rl9JTkVUOgotCQlzcmNfc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNyYzsKLQkJZHN0X3Np
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3Q7Ci0JCWlwID0gbXRvZChtb3V0LCBzdHJ1Y3Qg
aXAgKik7Ci0JCWlwLT5pcF92ID0gSVBWRVJTSU9OOwotCQlpcC0+aXBfaGwgPSAoc2l6ZW9mKHN0
cnVjdCBpcCkgPj4gMik7Ci0JCWlwLT5pcF90b3MgPSAwOwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTAwMDAwMAotCQlpcC0+aXBfb2ZmID0gaHRv
bnMoSVBfREYpOwotI2Vsc2UKLQkJaXAtPmlwX29mZiA9IElQX0RGOwotI2VuZGlmCi0jZWxpZiBk
ZWZpbmVkKFdJVEhfQ09OVkVSVF9JUF9PRkYpIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0JCWlwLT5pcF9vZmYgPSBJUF9ERjsKLSNlbHNlCi0JCWlwLT5p
cF9vZmYgPSBodG9ucyhJUF9ERik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CQlpcF9maWxsaWQoaXApOwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgUkFORE9NX0lQ
X0lECi0JCWlwLT5pcF9pZCA9IGlwX3JhbmRvbWlkKCk7Ci0jZWxzZQotCQlpcC0+aXBfaWQgPSBo
dG9ucyhpcF9pZCsrKTsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlp
cC0+aXBfaWQgPSBodG9ucyhpcF9pZCsrKTsKLSNlbHNlCi0JCWlwLT5pcF9pZCA9IGlwX2lkKys7
Ci0jZW5kaWYKLQkJaXAtPmlwX3R0bCA9IE1PRFVMRV9HTE9CQUwoaXBfZGVmdHRsKTsKLQkJaWYg
KHBvcnQpIHsKLQkJCWlwLT5pcF9wID0gSVBQUk9UT19VRFA7Ci0JCX0gZWxzZSB7Ci0JCQlpcC0+
aXBfcCA9IElQUFJPVE9fU0NUUDsKLQkJfQotCQlpcC0+aXBfc3JjLnNfYWRkciA9IGRzdF9zaW4t
PnNpbl9hZGRyLnNfYWRkcjsKLQkJaXAtPmlwX2RzdC5zX2FkZHIgPSBzcmNfc2luLT5zaW5fYWRk
ci5zX2FkZHI7Ci0JCWlwLT5pcF9zdW0gPSAwOwotCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwKTsK
LQkJc2hvdXQgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBsZW4pOwotCQlicmVh
azsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc3JjX3NpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNyYzsKLQkJZHN0X3NpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKWRzdDsKLQkJaXA2ID0gbXRvZChtb3V0LCBzdHJ1Y3QgaXA2X2hkciAqKTsKLQkJaXA2
LT5pcDZfZmxvdyA9IGh0b25sKDB4NjAwMDAwMDApOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JCWlmIChWX2lwNl9hdXRvX2Zsb3dsYWJlbCkgewotCQkJaXA2LT5pcDZfZmxvdyB8PSAoaHRv
bmwoaXA2X3JhbmRvbWZsb3dsYWJlbCgpKSAmIElQVjZfRkxPV0xBQkVMX01BU0spOwotCQl9Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWlwNi0+aXA2X2hsaW0gPSBJUHY2
X0hPUF9MSU1JVDsKLSNlbHNlCi0JCWlwNi0+aXA2X2hsaW0gPSBNT0RVTEVfR0xPQkFMKGlwNl9k
ZWZobGltKTsKLSNlbmRpZgotCQlpZiAocG9ydCkgewotCQkJaXA2LT5pcDZfbnh0ID0gSVBQUk9U
T19VRFA7Ci0JCX0gZWxzZSB7Ci0JCQlpcDYtPmlwNl9ueHQgPSBJUFBST1RPX1NDVFA7Ci0JCX0K
LQkJaXA2LT5pcDZfc3JjID0gZHN0X3NpbjYtPnNpbjZfYWRkcjsKLQkJaXA2LT5pcDZfZHN0ID0g
c3JjX3NpbjYtPnNpbjZfYWRkcjsKLQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKTsKLQkJ
c2hvdXQgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXA2ICsgbGVuKTsKLQkJYnJlYWs7
Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlsZW4gPSAwOwotCQlzaG91dCA9IG10b2QobW91dCwgc3Ry
dWN0IHNjdHBoZHIgKik7Ci0JCWJyZWFrOwotCX0KLSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmlu
ZWQoSU5FVDYpCi0JaWYgKHBvcnQpIHsKLQkJaWYgKGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF91ZHBfdHVubmVsaW5nX3BvcnQpKSA9PSAwKSB7Ci0JCQlzY3RwX21fZnJlZW0obW91dCk7Ci0J
CQlyZXR1cm47Ci0JCX0KLQkJdWRwID0gKHN0cnVjdCB1ZHBoZHIgKilzaG91dDsKLQkJdWRwLT51
aF9zcG9ydCA9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQp
KTsKLQkJdWRwLT51aF9kcG9ydCA9IHBvcnQ7Ci0JCXVkcC0+dWhfc3VtID0gMDsKLQkJdWRwLT51
aF91bGVuID0gaHRvbnMoKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHVkcGhkcikgKwotCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hk
cikgKwotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdXNlX2xlbiArIHBhZGRp
bmdfbGVuKSk7Ci0JCWxlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCXNob3V0ID0gKHN0
cnVjdCBzY3RwaGRyICopKChjYWRkcl90KXNob3V0ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
LQl9IGVsc2UgewotCQl1ZHAgPSBOVUxMOwotCX0KLSNlbmRpZgotCXNob3V0LT5zcmNfcG9ydCA9
IHNoLT5kZXN0X3BvcnQ7Ci0Jc2hvdXQtPmRlc3RfcG9ydCA9IHNoLT5zcmNfcG9ydDsKLQlzaG91
dC0+Y2hlY2tzdW0gPSAwOwotCWlmICh2dGFnKSB7Ci0JCXNob3V0LT52X3RhZyA9IGh0b25sKHZ0
YWcpOwotCX0gZWxzZSB7Ci0JCXNob3V0LT52X3RhZyA9IHNoLT52X3RhZzsKLQl9Ci0JbGVuICs9
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKiko
KGNhZGRyX3Qpc2hvdXQgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQljaC0+Y2h1bmtfdHlw
ZSA9IHR5cGU7Ci0JaWYgKHZ0YWcpIHsKLQkJY2gtPmNodW5rX2ZsYWdzID0gMDsKLQl9IGVsc2Ug
ewotCQljaC0+Y2h1bmtfZmxhZ3MgPSBTQ1RQX0hBRF9OT19UQ0I7Ci0JfQotCWNoLT5jaHVua19s
ZW5ndGggPSBodG9ucygodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKyBj
YXVzZV9sZW4pKTsKLQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQlsZW4g
Kz0gY2F1c2VfbGVuICsgcGFkZGluZ19sZW47Ci0KLQlpZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9P
VVRQVVQob19wYWspKSB7Ci0JCXNjdHBfbV9mcmVlbShtb3V0KTsKLQkJcmV0dXJuOwotCX0KLQlT
Q1RQX0FUVEFDSF9DSEFJTihvX3BhaywgbW91dCwgbGVuKTsKLQlzd2l0Y2ggKGRzdC0+c2FfZmFt
aWx5KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1BhbmRhX18pCi0JCS8qIHphcCB0aGUgc3RhY2sgcG9pbnRlciB0byB0
aGUgcm91dGUgKi8KLQkJbWVtc2V0KCZybywgMCwgc2l6ZW9mKHNjdHBfcm91dGVfdCkpOwotI2lm
IGRlZmluZWQoX19QYW5kYV9fKQotCQlyby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9IEFGX0lORVQ7
Ci0jZW5kaWYKLSNlbmRpZgotCQlpZiAocG9ydCkgewotI2lmICFkZWZpbmVkKF9fV2luZG93c19f
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
ICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDAw
MDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQotCQkJaWYgKFZfdWRwX2Nrc3VtKSB7
Ci0JCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9k
c3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOwotCQkJfSBlbHNl
IHsKLQkJCQl1ZHAtPnVoX3N1bSA9IDA7Ci0JCQl9Ci0jZWxzZQotCQkJdWRwLT51aF9zdW0gPSBp
bl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3Vs
ZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOwotI2VuZGlmCi0jZWxzZQotCQkJdWRwLT51aF9zdW0g
PSAwOwotI2VuZGlmCi0JCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDEwMDAwMDAKLQkJaXAtPmlwX2xlbiA9IGh0b25zKGxlbik7Ci0jZWxzZQot
CQlpcC0+aXBfbGVuID0gbGVuOwotI2VuZGlmCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQlpcC0+aXBfbGVuID0gbGVuOwotI2Vsc2UKLQkJaXAt
PmlwX2xlbiA9IGh0b25zKGxlbik7Ci0jZW5kaWYKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVk
KFNDVFBfV0lUSF9OT19DU1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsK
LSNlbHNlCi0JCQlzaG91dC0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCBz
aXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7Ci0JCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19zZW5kc3djcmMpOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18p
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
KChfX0ZyZWVCU0RfdmVyc2lvbiA+IDgwMzAwMCAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAw
MCkgfHwgX19GcmVlQlNEX3ZlcnNpb24gPiA5MDAwMDApCi0JCQlpZiAoVl91ZHBfY2tzdW0pIHsK
LQkJCQlTQ1RQX0VOQUJMRV9VRFBfQ1NVTShvX3Bhayk7Ci0JCQl9Ci0jZWxzZQotCQkJU0NUUF9F
TkFCTEVfVURQX0NTVU0ob19wYWspOwotI2VuZGlmCi0jZW5kaWYKLQkJfSBlbHNlIHsKLSNpZiBk
ZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5v
Y3JjKTsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDAwCi0JCQltb3V0LT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOwot
CQkJbW91dC0+bV9wa3RoZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNo
ZWNrc3VtKTsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7Ci0jZWxzZQotCQkJ
c2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVj
dCBpcCkpOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKLSNlbmRpZgotI2Vu
ZGlmCi0JCX0KLSNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCi0JCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xBU1RfUEFDS0VUX1RSQUNJTkcpIHsKLQkJ
CXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKLQkJU0NUUF9JUF9PVVRQVVQocmV0LCBvX3Bhaywg
JnJvLCBOVUxMLCB2cmZfaWQpOwotCQkvKiBGcmVlIHRoZSByb3V0ZSBpZiB3ZSBnb3Qgb25lIGJh
Y2sgKi8KLQkJaWYgKHJvLnJvX3J0KSB7Ci0JCQlSVEZSRUUocm8ucm9fcnQpOwotCQkJcm8ucm9f
cnQgPSBOVUxMOwotCQl9Ci0jZWxzZQotCQlTQ1RQX0lQX09VVFBVVChyZXQsIG9fcGFrLCBOVUxM
LCBOVUxMLCB2cmZfaWQpOwotI2VuZGlmCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQljYXNlIEFGX0lORVQ2OgotCQlpcDYtPmlwNl9wbGVuID0gKHVpbnQxNl90KShsZW4gLSBzaXpl
b2Yoc3RydWN0IGlwNl9oZHIpKTsKLQkJaWYgKHBvcnQpIHsKLSNpZiBkZWZpbmVkKFNDVFBfV0lU
SF9OT19DU1VNKQotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG5vY3JjKTsKLSNlbHNlCi0J
CQlzaG91dC0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCBzaXplb2Yoc3Ry
dWN0IGlwNl9oZHIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3NlbmRzd2NyYyk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCQkJ
dWRwLT51aF9zdW0gPSAwOwotI2VsaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmICgo
dWRwLT51aF9zdW0gPSBpbjZfY2tzdW0ob19wYWssIElQUFJPVE9fVURQLCBzaXplb2Yoc3RydWN0
IGlwNl9oZHIpLCBsZW4gLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgewotCQkJCXVk
cC0+dWhfc3VtID0gMHhmZmZmOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0jaWYgZGVmaW5l
ZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRub2NyYyk7
Ci0jZWxzZQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDkwMDAwMAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID4gOTAxMDAwCi0JCQltb3V0LT5tX3BrdGhk
ci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQX0lQVjY7Ci0jZWxzZQotCQkJbW91dC0+bV9wa3RoZHIu
Y3N1bV9mbGFncyA9IENTVU1fU0NUUDsKLSNlbmRpZgotCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9k
YXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKLQkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3NlbmRod2NyYyk7Ci0jZWxzZQotCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9j
YWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7Ci0JCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwotI2VuZGlmCi0jZW5kaWYKLQkJfQotI2lmZGVmIFND
VFBfUEFDS0VUX0xPR0dJTkcKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykgewotCQkJc2N0cF9wYWNrZXRfbG9nKG9f
cGFrKTsKLQkJfQotI2VuZGlmCi0JCVNDVFBfSVA2X09VVFBVVChyZXQsIG9fcGFrLCBOVUxMLCBO
VUxMLCBOVUxMLCB2cmZfaWQpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JewotCQljaGFyICpidWZmZXI7Ci0JCXN0cnVjdCBz
b2NrYWRkcl9jb25uICpzY29ubjsKLQotCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
KXNyYzsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kbm9jcmMpOwotI2Vsc2UKLQkJaWYgKFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxv
YWRlZCkgPT0gMCkgewotCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0o
bW91dCwgMCk7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwotCQl9IGVsc2Ug
ewotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKLQkJfQotI2VuZGlmCi0jaWZk
ZWYgU0NUUF9QQUNLRVRfTE9HR0lORwotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7Ci0JCQlzY3RwX3BhY2tldF9s
b2cobW91dCk7Ci0JCX0KLSNlbmRpZgotCQkvKiBEb24ndCBhbGxvYy9mcmVlIGZvciBlYWNoIHBh
Y2tldCAqLwotCQlpZiAoKGJ1ZmZlciA9IG1hbGxvYyhsZW4pKSAhPSBOVUxMKSB7Ci0JCQltX2Nv
cHlkYXRhKG1vdXQsIDAsIGxlbiwgYnVmZmVyKTsKLQkJCVNDVFBfQkFTRV9WQVIoY29ubl9vdXRw
dXQpKHNjb25uLT5zY29ubl9hZGRyLCBidWZmZXIsIGxlbiwgMCwgMCk7Ci0JCQlmcmVlKGJ1ZmZl
cik7Ci0JCX0KLQkJc2N0cF9tX2ZyZWVtKG1vdXQpOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQlk
ZWZhdWx0OgotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVua25vd24gcHJvdG9jb2wg
KFRTTkgpIHR5cGUgJWRcbiIsCi0JCSAgICAgICAgZHN0LT5zYV9mYW1pbHkpOwotCQlzY3RwX21f
ZnJlZW0obW91dCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG1vdXQsIE5VTEwsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKLQkJcmV0dXJuOwotCX0KLQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kcGFja2V0cyk7Ci0JU0NUUF9TVEFUX0lOQ1JfQ09VTlRF
UjY0KHNjdHBzX291dHBhY2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19v
dXRjb250cm9sY2h1bmtzKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9zaHV0ZG93
bl9jb21wbGV0ZTIoc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBt
Zmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51bSwKLSNlbmRpZgotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQp
Ci17Ci0Jc2N0cF9zZW5kX3Jlc3BfbXNnKHNyYywgZHN0LCBzaCwgMCwgU0NUUF9TSFVURE9XTl9D
T01QTEVURSwgTlVMTCwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCSAgICAgICAgICAgICAg
ICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgotCSAgICAgICAgICAgICAg
ICAgICB2cmZfaWQsIHBvcnQpOwotfQotCi12b2lkCi1zY3RwX3NlbmRfaGIoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsaW50IHNvX2xvY2tlZAotI2lmICFkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JU0NUUF9V
TlVTRUQKLSNlbmRpZgotKQotewotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQlzdHJ1
Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgKmhiOwotCXN0cnVjdCB0aW1ldmFsIG5vdzsKLQotCVND
VFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOwotCWlmIChuZXQgPT0gTlVMTCkgewotCQlyZXR1cm47
Ci0JfQotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCXN3aXRjaCAobmV0LT5y
by5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0J
CWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlicmVhazsK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWJy
ZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuOwotCX0KLQlzY3RwX2FsbG9jX2FfY2h1
bmsoc3RjYiwgY2hrKTsKLQlpZiAoY2hrID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDQsICJHYWssIGNhbid0IGdldCBhIGNodW5rIGZvciBoYlxuIik7Ci0JCXJldHVybjsK
LQl9Ci0KLQljaGstPmNvcHlfYnlfcmVmID0gMDsKLQljaGstPnJlYy5jaHVua19pZC5pZCA9IFND
VFBfSEVBUlRCRUFUX1JFUVVFU1Q7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9
IDE7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7Ci0JY2hrLT5z
ZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKTsKLQotCWNoay0+
ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dBSVQs
IDEsIE1UX0hFQURFUik7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7Ci0JCXNjdHBfZnJlZV9h
X2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9S
RVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7Ci0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNF
TlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWNoay0+d2hvVG8gPSBuZXQ7Ci0JYXRvbWljX2Fk
ZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JLyogTm93IHdlIGhhdmUgYSBtYnVm
IHRoYXQgd2UgY2FuIGZpbGwgaW4gd2l0aCB0aGUgZGV0YWlscyAqLwotCWhiID0gbXRvZChjaGst
PmRhdGEsIHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayAqKTsKLQltZW1zZXQoaGIsIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmspKTsKLQkvKiBmaWxsIG91dCBjaHVuayBo
ZWFkZXIgKi8KLQloYi0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q7Ci0J
aGItPmNoLmNodW5rX2ZsYWdzID0gMDsKLQloYi0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hr
LT5zZW5kX3NpemUpOwotCS8qIEZpbGwgb3V0IGhiIHBhcmFtZXRlciAqLwotCWhiLT5oZWFydGJl
YXQuaGJfaW5mby5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9IRUFSVEJFQVRfSU5GTyk7Ci0J
aGItPmhlYXJ0YmVhdC5oYl9pbmZvLnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1
Y3Qgc2N0cF9oZWFydGJlYXRfaW5mb19wYXJhbSkpOwotCWhiLT5oZWFydGJlYXQuaGJfaW5mby50
aW1lX3ZhbHVlXzEgPSBub3cudHZfc2VjOwotCWhiLT5oZWFydGJlYXQuaGJfaW5mby50aW1lX3Zh
bHVlXzIgPSBub3cudHZfdXNlYzsKLQkvKiBEaWQgb3VyIHVzZXIgcmVxdWVzdCB0aGlzIG9uZSwg
cHV0IGl0IGluICovCi0JaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5ID0gKHVpbnQ4
X3QpbmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseTsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCWhi
LT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9IG5ldC0+cm8uX2xfYWRkci5zYS5zYV9sZW47
Ci0jZWxzZQotCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVm
IElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWhiLT5oZWFydGJlYXQuaGJfaW5m
by5hZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0JCWJyZWFrOwotI2Vu
ZGlmCi0JZGVmYXVsdDoKLQkJaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfbGVuID0gMDsKLQkJ
YnJlYWs7Ci0JfQotI2VuZGlmCi0JaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNP
TkZJUk1FRCkgewotCQkvKgotCQkgKiB3ZSBvbmx5IHRha2UgZnJvbSB0aGUgZW50cm9weSBwb29s
IGlmIHRoZSBhZGRyZXNzIGlzIG5vdAotCQkgKiBjb25maXJtZWQuCi0JCSAqLwotCQluZXQtPmhl
YXJ0YmVhdF9yYW5kb20xID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTEgPSBz
Y3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcCk7Ci0JCW5ldC0+
aGVhcnRiZWF0X3JhbmRvbTIgPSBoYi0+aGVhcnRiZWF0LmhiX2luZm8ucmFuZG9tX3ZhbHVlMiA9
IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZzdGNiLT5zY3RwX2VwLT5zY3RwX2VwKTsKLQl9IGVs
c2UgewotCQluZXQtPmhlYXJ0YmVhdF9yYW5kb20xID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJh
bmRvbV92YWx1ZTEgPSAwOwotCQluZXQtPmhlYXJ0YmVhdF9yYW5kb20yID0gaGItPmhlYXJ0YmVh
dC5oYl9pbmZvLnJhbmRvbV92YWx1ZTIgPSAwOwotCX0KLQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRk
ci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQltZW1jcHko
aGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsCi0JCSAgICAgICAmbmV0LT5yby5fbF9hZGRy
LnNpbi5zaW5fYWRkciwKLQkJICAgICAgIHNpemVvZihuZXQtPnJvLl9sX2FkZHIuc2luLnNpbl9h
ZGRyKSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2Ogot
CQltZW1jcHkoaGItPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsCi0JCSAgICAgICAmbmV0LT5y
by5fbF9hZGRyLnNpbjYuc2luNl9hZGRyLAotCQkgICAgICAgc2l6ZW9mKG5ldC0+cm8uX2xfYWRk
ci5zaW42LnNpbjZfYWRkcikpOwotCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCW1lbWNweShoYi0+aGVhcnRiZWF0LmhiX2luZm8u
YWRkcmVzcywKLQkJICAgICAgICZuZXQtPnJvLl9sX2FkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKLQkJ
ICAgICAgIHNpemVvZihuZXQtPnJvLl9sX2FkZHIuc2Nvbm4uc2Nvbm5fYWRkcikpOwotCQlicmVh
azsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWlmIChjaGstPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVl
bShjaGstPmRhdGEpOwotCQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJfQotCQlzY3RwX2ZyZWVfYV9j
aHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7Ci0JCXJldHVybjsKLQkJYnJlYWs7Ci0JfQotCW5l
dC0+aGJfcmVzcG9uZGVkID0gMDsKLQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250
cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKLQlzdGNiLT5hc29jLmN0cmxfcXVldWVf
Y250Kys7Ci0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGhlYXJ0YmVhdCk7Ci0JcmV0dXJuOwot
fQotCi12b2lkCi1zY3RwX3NlbmRfZWNuX2VjaG8oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQsCi0JCSAgIHVpbnQzMl90IGhpZ2hfdHNuKQotewotCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKmVjbmU7Ci0J
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCi0JaWYgKG5ldCA9PSBOVUxMKSB7Ci0JCXJl
dHVybjsKLQl9Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0
Y2IpOwotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3Rw
X25leHQpIHsKLQkJaWYgKChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSAm
JiAobmV0ID09IGNoay0+d2hvVG8pKSB7Ci0JCQkvKiBmb3VuZCBhIHByZXZpb3VzIEVDTl9FQ0hP
IHVwZGF0ZSBpdCBpZiBuZWVkZWQgKi8KLQkJCXVpbnQzMl90IGNudCwgY3RzbjsKLQkJCWVjbmUg
PSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfZWNuZV9jaHVuayAqKTsKLQkJCWN0c24gPSBu
dG9obChlY25lLT50c24pOwotCQkJaWYgKFNDVFBfVFNOX0dUKGhpZ2hfdHNuLCBjdHNuKSkgewot
CQkJCWVjbmUtPnRzbiA9IGh0b25sKGhpZ2hfdHNuKTsKLQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19xdWV1ZV91cGRfZWNuZSk7Ci0JCQl9Ci0JCQljbnQgPSBudG9obChlY25lLT5udW1fcGt0c19z
aW5jZV9jd3IpOwotCQkJY250Kys7Ci0JCQllY25lLT5udW1fcGt0c19zaW5jZV9jd3IgPSBodG9u
bChjbnQpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCS8qIG5vcGUgY291bGQgbm90IGZpbmQgb25l
IHRvIHVwZGF0ZSBzbyB3ZSBtdXN0IGJ1aWxkIG9uZSAqLwotCXNjdHBfYWxsb2NfYV9jaHVuayhz
dGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3F1ZXVlX3VwZF9lY25lKTsKLQljaGstPmNvcHlfYnlfcmVmID0gMDsKLQlj
aGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfRUNOX0VDSE87Ci0JY2hrLT5yZWMuY2h1bmtfaWQu
Y2FuX3Rha2VfZGF0YSA9IDA7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5hc29jID0gJnN0Y2It
PmFzb2M7Ci0JY2hrLT5zZW5kX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZWNuZV9jaHVuayk7
Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGNoay0+c2VuZF9zaXplLCAwLCBN
X05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQkJc2N0
cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm47
Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0J
U0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKLQljaGstPnNlbnQgPSBT
Q1RQX0RBVEFHUkFNX1VOU0VOVDsKLQljaGstPnNuZF9jb3VudCA9IDA7Ci0JY2hrLT53aG9UbyA9
IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQotCXN0
Y2ItPmFzb2MuZWNuX2VjaG9fY250X29ucSsrOwotCWVjbmUgPSBtdG9kKGNoay0+ZGF0YSwgc3Ry
dWN0IHNjdHBfZWNuZV9jaHVuayAqKTsKLQllY25lLT5jaC5jaHVua190eXBlID0gU0NUUF9FQ05f
RUNITzsKLQllY25lLT5jaC5jaHVua19mbGFncyA9IDA7Ci0JZWNuZS0+Y2guY2h1bmtfbGVuZ3Ro
ID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspKTsKLQllY25lLT50c24gPSBo
dG9ubChoaWdoX3Rzbik7Ci0JZWNuZS0+bnVtX3BrdHNfc2luY2VfY3dyID0gaHRvbmwoMSk7Ci0J
VEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNj
dHBfbmV4dCk7Ci0JYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLX0KLQotdm9pZAotc2N0cF9zZW5k
X3BhY2tldF9kcm9wcGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LAotICAgIHN0cnVjdCBtYnVmICptLCBpbnQgbGVuLCBpbnQgaXBobGVuLCBpbnQgYmFkX2Ny
YykKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9wa3Rk
cm9wX2NodW5rICpkcnA7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXVpbnQ4X3Qg
KmRhdGFwOwotCWludCB3YXNfdHJ1bmMgPSAwOwotCWludCBmdWxsc3ogPSAwOwotCWxvbmcgc3Bj
OwotCWludCBvZmZzZXQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoLCBjaHVua19idWY7Ci0J
dW5zaWduZWQgaW50IGNoa19sZW5ndGg7Ci0KLSAgICAgICAgaWYgKCFzdGNiKSB7Ci0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIH0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JU0NUUF9UQ0Jf
TE9DS19BU1NFUlQoc3RjYik7Ci0JaWYgKGFzb2MtPnBrdGRyb3Bfc3VwcG9ydGVkID09IDApIHsK
LQkJLyotCi0JCSAqIHBlZXIgbXVzdCBkZWNsYXJlIHN1cHBvcnQgYmVmb3JlIEkgc2VuZCBvbmUu
Ci0JCSAqLwotCQlyZXR1cm47Ci0JfQotCWlmIChzdGNiLT5zY3RwX3NvY2tldCA9PSBOVUxMKSB7
Ci0JCXJldHVybjsKLQl9Ci0Jc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNo
ayA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hr
LT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOwotCWNoay0+cmVjLmNodW5r
X2lkLmNhbl90YWtlX2RhdGEgPSAxOwotCWNoay0+ZmxhZ3MgPSAwOwotCWxlbiAtPSBpcGhsZW47
Ci0JY2hrLT5zZW5kX3NpemUgPSBsZW47Ci0gICAgICAgIC8qIFZhbGlkYXRlIHRoYXQgd2UgZG8g
bm90IGhhdmUgYW4gQUJPUlQgaW4gaGVyZS4gKi8KLQlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpOwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dl
dHB0cihtLCBvZmZzZXQsCi0JCQkJCQkgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVu
a19idWYpOwotCXdoaWxlIChjaCAhPSBOVUxMKSB7Ci0JCWNoa19sZW5ndGggPSBudG9ocyhjaC0+
Y2h1bmtfbGVuZ3RoKTsKLQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkgewotCQkJLyog
YnJlYWsgdG8gYWJvcnQgbGFuZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChjaC0+Y2h1
bmtfdHlwZSkgewotCQljYXNlIFNDVFBfUEFDS0VUX0RST1BQRUQ6Ci0JCWNhc2UgU0NUUF9BQk9S
VF9BU1NPQ0lBVElPTjoKLQkJY2FzZSBTQ1RQX0lOSVRJQVRJT05fQUNLOgotCQkJLyoqCi0JCQkg
KiBXZSBkb24ndCByZXNwb25kIHdpdGggYW4gUEtULURST1AgdG8gYW4gQUJPUlQKLQkJCSAqIG9y
IFBLVC1EUk9QLiBXZSBhbHNvIGRvIG5vdCByZXNwb25kIHRvIGFuCi0JCQkgKiBJTklULUFDSywg
YmVjYXVzZSB3ZSBjYW4ndCBrbm93IGlmIHRoZSBpbml0aWF0aW9uCi0JCQkgKiB0YWcgaXMgY29y
cmVjdCBvciBub3QuCi0JCQkgKi8KLQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQkJCXJldHVybjsKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9
Ci0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKTsKLQkJY2ggPSAoc3RydWN0IHNj
dHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKLQkJICAgIHNpemVvZigqY2gp
LCAodWludDhfdCAqKSAmIGNodW5rX2J1Zik7Ci0JfQotCi0JaWYgKChsZW4gKyBTQ1RQX01BWF9P
VkVSSEVBRCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgPgotCSAgICBtaW4o
c3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUsIE1DTEJZVEVTKSkgewotCQkvKiBvbmx5IHNlbmQgMSBt
dHUgd29ydGgsIHRyaW0gb2ZmIHRoZQotCQkgKiBleGNlc3Mgb24gdGhlIGVuZC4KLQkJICovCi0J
CWZ1bGxzeiA9IGxlbjsKLQkJbGVuID0gbWluKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1LCBNQ0xC
WVRFUykgLSBTQ1RQX01BWF9PVkVSSEVBRDsKLQkJd2FzX3RydW5jID0gMTsKLQl9Ci0JY2hrLT5h
c29jID0gJnN0Y2ItPmFzb2M7Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1D
TEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKGNoay0+ZGF0YSA9PSBOVUxM
KSB7Ci1qdW1wX291dDoKLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBT
Q1RQX01JTl9PVkVSSEVBRCk7Ci0JZHJwID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX3Br
dGRyb3BfY2h1bmsgKik7Ci0JaWYgKGRycCA9PSBOVUxMKSB7Ci0JCXNjdHBfbV9mcmVlbShjaGst
PmRhdGEpOwotCQljaGstPmRhdGEgPSBOVUxMOwotCQlnb3RvIGp1bXBfb3V0OwotCX0KLQljaGst
PmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKChjaGstPnNlbmRfc2l6ZSArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9wa3Rkcm9wX2NodW5rKSArCi0JICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBTQ1RQ
X01FRF9PVkVSSEVBRCkpOwotCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKLQlpZiAod2FzX3Ry
dW5jKSB7Ci0JCWRycC0+Y2guY2h1bmtfZmxhZ3MgPSBTQ1RQX1BBQ0tFVF9UUlVOQ0FURUQ7Ci0J
CWRycC0+dHJ1bmNfbGVuID0gaHRvbnMoZnVsbHN6KTsKLQkJLyogTGVuIGlzIGFscmVhZHkgYWRq
dXN0ZWQgdG8gc2l6ZSBtaW51cyBvdmVyaGVhZCBhYm92ZQotCQkgKiB0YWtlIG91dCB0aGUgcGt0
X2Ryb3AgY2h1bmsgaXRzZWxmIGZyb20gaXQuCi0JCSAqLwotCQljaGstPnNlbmRfc2l6ZSA9ICh1
aW50MTZfdCkobGVuIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmspKTsKLQkJbGVu
ID0gY2hrLT5zZW5kX3NpemU7Ci0JfSBlbHNlIHsKLQkJLyogbm8gdHJ1bmNhdGlvbiBuZWVkZWQg
Ki8KLQkJZHJwLT5jaC5jaHVua19mbGFncyA9IDA7Ci0JCWRycC0+dHJ1bmNfbGVuID0gaHRvbnMo
MCk7Ci0JfQotCWlmIChiYWRfY3JjKSB7Ci0JCWRycC0+Y2guY2h1bmtfZmxhZ3MgfD0gU0NUUF9C
QURDUkM7Ci0JfQotCWNoay0+c2VuZF9zaXplICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9w
X2NodW5rKTsKLQlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOwotCWNo
ay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOwotCWNoay0+c25kX2NvdW50ID0gMDsKLQlp
ZiAobmV0KSB7Ci0JCS8qIHdlIHNob3VsZCBoaXQgaGVyZSAqLwotCQljaGstPndob1RvID0gbmV0
OwotCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQl9IGVsc2Ug
ewotCQljaGstPndob1RvID0gTlVMTDsKLQl9Ci0JZHJwLT5jaC5jaHVua190eXBlID0gU0NUUF9Q
QUNLRVRfRFJPUFBFRDsKLQlkcnAtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9z
aXplKTsKLQlzcGMgPSBTQ1RQX1NCX0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCk7Ci0JaWYg
KHNwYyA8IDApIHsKLQkJc3BjID0gMDsKLQl9Ci0JZHJwLT5ib3R0bGVfYncgPSBodG9ubChzcGMp
OwotCWlmIChhc29jLT5teV9yd25kKSB7Ci0JCWRycC0+Y3VycmVudF9vbnEgPSBodG9ubChhc29j
LT5zaXplX29uX3JlYXNtX3F1ZXVlICsKLQkJICAgIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
KwotCQkgICAgYXNvYy0+bXlfcnduZF9jb250cm9sX2xlbiArCi0JCSAgICBzdGNiLT5zY3RwX3Nv
Y2tldC0+c29fcmN2LnNiX2NjKTsKLQl9IGVsc2UgewotCQkvKi0KLQkJICogSWYgbXkgcnduZCBp
cyAwLCBwb3NzaWJseSBmcm9tIG1idWYgZGVwbGV0aW9uIGFzIHdlbGwgYXMKLQkJICogc3BhY2Ug
dXNlZCwgdGVsbCB0aGUgcGVlciB0aGVyZSBpcyBOTyBzcGFjZSBha2Egb25xID09IGJ3Ci0JCSAq
LwotCQlkcnAtPmN1cnJlbnRfb25xID0gaHRvbmwoc3BjKTsKLQl9Ci0JZHJwLT5yZXNlcnZlZCA9
IDA7Ci0JZGF0YXAgPSBkcnAtPmRhdGE7Ci0JbV9jb3B5ZGF0YShtLCBpcGhsZW4sIGxlbiwgKGNh
ZGRyX3QpZGF0YXApOwotCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRyb2xfc2Vu
ZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci19Ci0K
LXZvaWQKLXNjdHBfc2VuZF9jd3Ioc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsIHVpbnQzMl90IGhpZ2hfdHNuLCB1aW50OF90IG92ZXJyaWRlKQotewotCXN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCXN0cnVjdCBzY3RwX2N3cl9jaHVuayAqY3dyOwot
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKLQotCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0
Y2IpOwotCWlmIChuZXQgPT0gTlVMTCkgewotCQlyZXR1cm47Ci0JfQotCWFzb2MgPSAmc3RjYi0+
YXNvYzsKLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0
cF9uZXh0KSB7Ci0JCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fQ1dSKSAm
JiAobmV0ID09IGNoay0+d2hvVG8pKSB7Ci0JCQkvKiBmb3VuZCBhIHByZXZpb3VzIENXUiBxdWV1
ZWQgdG8gc2FtZSBkZXN0aW5hdGlvbiB1cGRhdGUgaXQgaWYgbmVlZGVkICovCi0JCQl1aW50MzJf
dCBjdHNuOwotCQkJY3dyID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2N3cl9jaHVuayAq
KTsKLQkJCWN0c24gPSBudG9obChjd3ItPnRzbik7Ci0JCQlpZiAoU0NUUF9UU05fR1QoaGlnaF90
c24sIGN0c24pKSB7Ci0JCQkJY3dyLT50c24gPSBodG9ubChoaWdoX3Rzbik7Ci0JCQl9Ci0JCQlp
ZiAob3ZlcnJpZGUgJiBTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpIHsKLQkJCQkvKiBNYWtlIHN1
cmUgb3ZlcnJpZGUgaXMgY2FycmllZCAqLwotCQkJCWN3ci0+Y2guY2h1bmtfZmxhZ3MgfD0gU0NU
UF9DV1JfUkVEVUNFX09WRVJSSURFOwotCQkJfQotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXNjdHBf
YWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOwotCWlmIChjaGsgPT0gTlVMTCkgewotCQlyZXR1cm47
Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwotCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NU
UF9FQ05fQ1dSOwotCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOwotCWNoay0+
ZmxhZ3MgPSAwOwotCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwotCWNoay0+c2VuZF9zaXplID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2N3cl9jaHVuayk7Ci0JY2hrLT5kYXRhID0gc2N0cF9nZXRfbWJ1
Zl9mb3JfbXNnKGNoay0+c2VuZF9zaXplLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlp
ZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKLQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hr
LT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBj
aGstPnNlbmRfc2l6ZTsKLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQljaGst
PnNuZF9jb3VudCA9IDA7Ci0JY2hrLT53aG9UbyA9IG5ldDsKLQlhdG9taWNfYWRkX2ludCgmY2hr
LT53aG9Uby0+cmVmX2NvdW50LCAxKTsKLQljd3IgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNj
dHBfY3dyX2NodW5rICopOwotCWN3ci0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfRUNOX0NXUjsKLQlj
d3ItPmNoLmNodW5rX2ZsYWdzID0gb3ZlcnJpZGU7Ci0JY3dyLT5jaC5jaHVua19sZW5ndGggPSBo
dG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfY3dyX2NodW5rKSk7Ci0JY3dyLT50c24gPSBodG9ubCho
aWdoX3Rzbik7Ci0JVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1
ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKLX0KLQotc3Rh
dGljIGludAotc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X291dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3Qgc2VxLCB1aW50MzJfdCByZXNwX3NlcSwgdWludDMyX3QgbGFzdF9zZW50KQotewot
CXVpbnQxNl90IGxlbiwgb2xkX2xlbiwgaTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0
X3JlcXVlc3QgKnJlcV9vdXQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCWludCBhdDsK
LQlpbnQgbnVtYmVyX2VudHJpZXM9MDsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBz
Y3RwX2NodW5raGRyICopOwotCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+
Y2h1bmtfbGVuZ3RoKSk7Ci0JLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8K
LQlyZXFfb3V0ID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCAqKSgoY2Fk
ZHJfdCljaCArIGxlbik7Ci0JLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8K
LQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlpZiAo
KHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5H
KSAmJgotCQkgICAgKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID09IDAp
ICYmCi0JCSAgICBUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKSkg
ewotCQkJbnVtYmVyX2VudHJpZXMrKzsKLQkJfQotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPT0g
MCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAobnVtYmVyX2VudHJpZXMgPT0gc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQpIHsKLQkJbnVtYmVyX2VudHJpZXMgPSAwOwotCX0KLQlpZiAobnVtYmVy
X2VudHJpZXMgPiBTQ1RQX01BWF9TVFJFQU1TX0FUX09OQ0VfUkVTRVQpIHsKLQkJbnVtYmVyX2Vu
dHJpZXMgPSBTQ1RQX01BWF9TVFJFQU1TX0FUX09OQ0VfUkVTRVQ7Ci0JfQotCWxlbiA9ICh1aW50
MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkgKyAoc2l6
ZW9mKHVpbnQxNl90KSAqIG51bWJlcl9lbnRyaWVzKSk7Ci0JcmVxX291dC0+cGgucGFyYW1fdHlw
ZSA9IGh0b25zKFNDVFBfU1RSX1JFU0VUX09VVF9SRVFVRVNUKTsKLQlyZXFfb3V0LT5waC5wYXJh
bV9sZW5ndGggPSBodG9ucyhsZW4pOwotCXJlcV9vdXQtPnJlcXVlc3Rfc2VxID0gaHRvbmwoc2Vx
KTsKLQlyZXFfb3V0LT5yZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3NlcSk7Ci0JcmVxX291dC0+
c2VuZF9yZXNldF9hdF90c24gPSBodG9ubChsYXN0X3NlbnQpOwotCWF0ID0gMDsKLQlpZiAobnVt
YmVyX2VudHJpZXMpIHsKLQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250
OyBpKyspIHsKLQkJCWlmICgoc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID09IFNDVFBfU1RS
RUFNX1JFU0VUX1BFTkRJTkcpICYmCi0JCQkgICAgKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVu
a3Nfb25fcXVldWVzID09IDApICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5vdXRxdWV1ZSkpIHsKLQkJCQlyZXFfb3V0LT5saXN0X29mX3N0cmVhbXNbYXRdID0g
aHRvbnMoaSk7Ci0JCQkJYXQrKzsKLQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBT
Q1RQX1NUUkVBTV9SRVNFVF9JTl9GTElHSFQ7Ci0JCQkJaWYgKGF0ID49IG51bWJlcl9lbnRyaWVz
KSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCQlzdGNiLT5hc29jLnN0
cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9JTl9GTElHSFQ7Ci0JCX0KLQl9Ci0J
aWYgKFNDVFBfU0laRTMyKGxlbikgPiBsZW4pIHsKLQkJLyotCi0JCSAqIE5lZWQgdG8gd29ycnkg
YWJvdXQgdGhlIHBhZCB3ZSBtYXkgZW5kIHVwIGFkZGluZyB0byB0aGUKLQkJICogZW5kLiBUaGlz
IGlzIGVhc3kgc2luY2UgdGhlIHN0cnVjdCBpcyBlaXRoZXIgYWxpZ25lZCB0byA0Ci0JCSAqIGJ5
dGVzIG9yIDIgYnl0ZXMgb2ZmLgotCQkgKi8KLQkJcmVxX291dC0+bGlzdF9vZl9zdHJlYW1zW251
bWJlcl9lbnRyaWVzXSA9IDA7Ci0JfQotCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwot
CWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPmJvb2tfc2l6
ZSA9IGxlbiArIG9sZF9sZW47Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+c2Vu
ZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOwotCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIHZvaWQK
LXNjdHBfYWRkX3N0cmVhbV9yZXNldF9pbihzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG51bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqbGlz
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzZXEpCi17Ci0JdWludDE2X3Qg
bGVuLCBvbGRfbGVuLCBpOwotCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICpy
ZXFfaW47Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JY2ggPSBtdG9kKGNoay0+ZGF0
YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9IFNDVFBfU0laRTMy
KG50b2hzKGNoLT5jaHVua19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0
aGUgcGFyYW0uICovCi0JcmVxX2luID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1
ZXN0ICopKChjYWRkcl90KWNoICsgbGVuKTsKLQkvKiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBh
cmFtIGJlPyAqLwotCWxlbiA9ICh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9pbl9yZXF1ZXN0KSArIChzaXplb2YodWludDE2X3QpICogbnVtYmVyX2VudHJpZXMpKTsK
LQlyZXFfaW4tPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9JTl9SRVFVRVNU
KTsKLQlyZXFfaW4tPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGxlbik7Ci0JcmVxX2luLT5yZXF1
ZXN0X3NlcSA9IGh0b25sKHNlcSk7Ci0JaWYgKG51bWJlcl9lbnRyaWVzKSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBudW1iZXJfZW50cmllczsgaSsrKSB7Ci0JCQlyZXFfaW4tPmxpc3Rfb2Zfc3RyZWFt
c1tpXSA9IGh0b25zKGxpc3RbaV0pOwotCQl9Ci0JfQotCWlmIChTQ1RQX1NJWkUzMihsZW4pID4g
bGVuKSB7Ci0JCS8qLQotCQkgKiBOZWVkIHRvIHdvcnJ5IGFib3V0IHRoZSBwYWQgd2UgbWF5IGVu
ZCB1cCBhZGRpbmcgdG8gdGhlCi0JCSAqIGVuZC4gVGhpcyBpcyBlYXN5IHNpbmNlIHRoZSBzdHJ1
Y3QgaXMgZWl0aGVyIGFsaWduZWQgdG8gNAotCQkgKiBieXRlcyBvciAyIGJ5dGVzIG9mZi4KLQkJ
ICovCi0JCXJlcV9pbi0+bGlzdF9vZl9zdHJlYW1zW251bWJlcl9lbnRyaWVzXSA9IDA7Ci0JfQot
CS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5ndGggPSBodG9u
cyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9sZF9sZW47Ci0JY2hr
LT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hr
LT5ib29rX3NpemUpOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7
Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Rzbihz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQzMl90IHNlcSkKLXsKLQl1aW50MTZfdCBsZW4sIG9sZF9sZW47Ci0Jc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICpyZXFfdHNuOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aDsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOwotCW9s
ZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7Ci0KLQkv
KiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLwotCXJlcV90c24gPSAoc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICopKChjYWRkcl90KWNoICsgbGVuKTsKLQkv
KiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBhcmFtIGJlPyAqLwotCWxlbiA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNuX3JlcXVlc3QpOwotCXJlcV90c24tPnBoLnBhcmFtX3R5
cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9UU05fUkVRVUVTVCk7Ci0JcmVxX3Rzbi0+cGgucGFy
YW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKLQlyZXFfdHNuLT5yZXF1ZXN0X3NlcSA9IGh0b25sKHNl
cSk7Ci0KLQkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KLQljaC0+Y2h1bmtfbGVuZ3Ro
ID0gaHRvbnMobGVuICsgb2xkX2xlbik7Ci0JY2hrLT5zZW5kX3NpemUgPSBsZW4gKyBvbGRfbGVu
OwotCWNoay0+Ym9va19zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOwotCWNoay0+
Ym9va19zaXplX3NjYWxlID0gMDsKLQlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFNDVFBfU0la
RTMyKGNoay0+c2VuZF9zaXplKTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfYWRkX3N0cmVh
bV9yZXNldF9yZXN1bHQoc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50MzJfdCByZXNwX3NlcSwgdWludDMyX3QgcmVzdWx0KQotewot
CXVpbnQxNl90IGxlbiwgb2xkX2xlbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9u
c2UgKnJlc3A7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JY2ggPSBtdG9kKGNoay0+
ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9IFNDVFBfU0la
RTMyKG50b2hzKGNoLT5jaHVua19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZv
ciB0aGUgcGFyYW0uICovCi0JcmVzcCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9u
c2UgKikoKGNhZGRyX3QpY2ggKyBsZW4pOwotCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFy
YW0gYmU/ICovCi0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25z
ZSk7Ci0JcmVzcC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNF
KTsKLQlyZXNwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOwotCXJlc3AtPnJlc3BvbnNl
X3NlcSA9IGh0b25sKHJlc3Bfc2VxKTsKLQlyZXNwLT5yZXN1bHQgPSBudG9obChyZXN1bHQpOwot
Ci0JLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3RoICovCi0JY2gtPmNodW5rX2xlbmd0aCA9IGh0
b25zKGxlbiArIG9sZF9sZW4pOwotCWNoay0+Ym9va19zaXplID0gbGVuICsgb2xkX2xlbjsKLQlj
aGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUzMihj
aGstPmJvb2tfc2l6ZSk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6
ZTsKLQlyZXR1cm47Ci19Ci0KLXZvaWQKLXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25z
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JCQkJIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9s
aXN0ICplbnQsCi0JCQkJIGludCByZXNwb25zZSkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0Jc3RydWN0IHNjdHBfY2h1
bmtoZHIgKmNoOwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCi0JLyoKLQkgKiBSZXNldCBvdXIg
bGFzdCByZXNldCBhY3Rpb24gdG8gdGhlIG5ldyBvbmUgSVAgLT4gcmVzcG9uc2UKLQkgKiAoUEVS
Rk9STUVEIHByb2JhYmx5KS4gVGhpcyBhc3N1cmVzIHRoYXQgaWYgd2UgZmFpbCB0byBzZW5kLCBh
Ci0JICogcmV0cmFuIGZyb20gdGhlIHBlZXIgd2lsbCBnZXQgdGhlIG5ldyByZXNwb25zZS4KLQkg
Ki8KLQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IHJlc3BvbnNlOwotCWlmIChhc29jLT5z
dHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKLQkJcmV0dXJuOwotCX0KLQlzY3RwX2FsbG9jX2Ff
Y2h1bmsoc3RjYiwgY2hrKTsKLQlpZiAoY2hrID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0J
CXJldHVybjsKLQl9Ci0JY2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hrLT5yZWMuY2h1bmtfaWQu
aWQgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRh
ID0gMDsKLQljaGstPmZsYWdzID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGst
PmJvb2tfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JY2hrLT5zZW5kX3Np
emUgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUg
PSAwOwotCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQlzY3RwX2Zy
ZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTE9DS0VEKTsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0J
CXJldHVybjsKLQl9Ci0JU0NUUF9CVUZfUkVTVl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJI
RUFEKTsKLQkvKiBzZXR1cCBjaHVuayBwYXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9VTlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWlmIChzdGNiLT5hc29jLmFs
dGVybmF0ZSkgewotCQljaGstPndob1RvID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNl
IHsKLQkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQl9Ci0J
Y2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNodW5r
X3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNFVDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNoLT5j
aHVua19sZW5ndGggPSBodG9ucyhjaGstPmJvb2tfc2l6ZSk7Ci0JYXRvbWljX2FkZF9pbnQoJmNo
ay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGst
PnNlbmRfc2l6ZTsKLQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgZW50LT5zZXEs
IHJlc3BvbnNlKTsKLQkvKiBpbnNlcnQgdGhlIGNodW5rIGZvciBzZW5kaW5nICovCi0JVEFJTFFf
SU5TRVJUX1RBSUwoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkJCSAgY2hrLAotCQkJICBz
Y3RwX25leHQpOwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci19Ci0KLXZvaWQKLXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHRfdHNuKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHJlc3Bfc2VxLCB1aW50MzJf
dCByZXN1bHQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzZW5k
X3VuYSwgdWludDMyX3QgcmVjdl9uZXh0KQotewotCXVpbnQxNl90IGxlbiwgb2xkX2xlbjsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNuICpyZXNwOwotCXN0cnVjdCBzY3Rw
X2NodW5raGRyICpjaDsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5r
aGRyICopOwotCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVu
Z3RoKSk7Ci0KLQkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLwotCXJlc3Ag
PSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqKSgoY2FkZHJfdCljaCAr
IGxlbik7Ci0JLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KLQlsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3Rzbik7Ci0JcmVzcC0+cGgu
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1RSX1JFU0VUX1JFU1BPTlNFKTsKLQlyZXNwLT5waC5w
YXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOwotCXJlc3AtPnJlc3BvbnNlX3NlcSA9IGh0b25sKHJl
c3Bfc2VxKTsKLQlyZXNwLT5yZXN1bHQgPSBodG9ubChyZXN1bHQpOwotCXJlc3AtPnNlbmRlcnNf
bmV4dF90c24gPSBodG9ubChzZW5kX3VuYSk7Ci0JcmVzcC0+cmVjZWl2ZXJzX25leHRfdHNuID0g
aHRvbmwocmVjdl9uZXh0KTsKLQotCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwotCWNo
LT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPmJvb2tfc2l6ZSA9
IGxlbiArIG9sZF9sZW47Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPmJvb2tf
c2l6ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCVNDVFBfQlVGX0xFTihjaGstPmRh
dGEpID0gY2hrLT5zZW5kX3NpemU7Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9h
ZGRfYW5fb3V0X3N0cmVhbShzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0JCSAgICAgICB1
aW50MzJfdCBzZXEsCi0JCSAgICAgICB1aW50MTZfdCBhZGRpbmcpCi17Ci0JdWludDE2X3QgbGVu
LCBvbGRfbGVuOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfYWRkX3N0cm0gKmFkZHN0cjsKLQotCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVj
dCBzY3RwX2NodW5raGRyICopOwotCW9sZF9sZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhj
aC0+Y2h1bmtfbGVuZ3RoKSk7Ci0KLQkvKiBnZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFt
LiAqLwotCWFkZHN0ciA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKikoKGNh
ZGRyX3QpY2ggKyBsZW4pOwotCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICov
Ci0JbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSk7Ci0KLQkv
KiBGaWxsIGl0IG91dC4gKi8KLQlhZGRzdHItPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NU
Ul9SRVNFVF9BRERfT1VUX1NUUkVBTVMpOwotCWFkZHN0ci0+cGgucGFyYW1fbGVuZ3RoID0gaHRv
bnMobGVuKTsKLQlhZGRzdHItPnJlcXVlc3Rfc2VxID0gaHRvbmwoc2VxKTsKLQlhZGRzdHItPm51
bWJlcl9vZl9zdHJlYW1zID0gaHRvbnMoYWRkaW5nKTsKLQlhZGRzdHItPnJlc2VydmVkID0gMDsK
LQotCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLwotCWNoLT5jaHVua19sZW5ndGggPSBo
dG9ucyhsZW4gKyBvbGRfbGVuKTsKLQljaGstPnNlbmRfc2l6ZSA9IGxlbiArIG9sZF9sZW47Ci0J
Y2hrLT5ib29rX3NpemUgPSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7Ci0JY2hrLT5ib29r
X3NpemVfc2NhbGUgPSAwOwotCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gU0NUUF9TSVpFMzIo
Y2hrLT5zZW5kX3NpemUpOwotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfYWRkX2Fu
X2luX3N0cmVhbShzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCi0gICAgICAgICAgICAgICAg
ICAgICAgdWludDMyX3Qgc2VxLAotICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGlu
ZykKLXsKLQl1aW50MTZfdCBsZW4sIG9sZF9sZW47Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNo
OwotCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSAqYWRkc3RyOwotCi0JY2ggPSBt
dG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0Jb2xkX2xlbiA9IGxlbiA9
IFNDVFBfU0laRTMyKG50b2hzKGNoLT5jaHVua19sZW5ndGgpKTsKLQotCS8qIGdldCB0byBuZXcg
b2Zmc2V0IGZvciB0aGUgcGFyYW0uICovCi0JYWRkc3RyID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9hZGRfc3RybSAqKSgoY2FkZHJfdCljaCArIGxlbik7Ci0JLyogbm93IGhvdyBsb25nIHdp
bGwgdGhpcyBwYXJhbSBiZT8gKi8KLQlsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2FkZF9zdHJtKTsKLQkvKiBGaWxsIGl0IG91dC4gKi8KLQlhZGRzdHItPnBoLnBhcmFtX3R5
cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUyk7Ci0JYWRkc3RyLT5waC5w
YXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOwotCWFkZHN0ci0+cmVxdWVzdF9zZXEgPSBodG9ubChz
ZXEpOwotCWFkZHN0ci0+bnVtYmVyX29mX3N0cmVhbXMgPSBodG9ucyhhZGRpbmcpOwotCWFkZHN0
ci0+cmVzZXJ2ZWQgPSAwOwotCi0JLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3RoICovCi0JY2gt
PmNodW5rX2xlbmd0aCA9IGh0b25zKGxlbiArIG9sZF9sZW4pOwotCWNoay0+c2VuZF9zaXplID0g
bGVuICsgb2xkX2xlbjsKLQljaGstPmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9z
aXplKTsKLQljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0
YSkgPSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7Ci0JcmV0dXJuOwotfQotCi1pbnQKLXNj
dHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgaW50IHNvX2xvY2tlZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwot
CXVpbnQzMl90IHNlcTsKLQotCWFzb2MgPSAmc3RjYi0+YXNvYzsKLQlhc29jLT50cmlnZ2VyX3Jl
c2V0ID0gMDsKLQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7Ci0JCXJldHVy
biAoRUFMUkVBRFkpOwotCX0KLQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKLQlpZiAo
Y2hrID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0J
Y2hrLT5jb3B5X2J5X3JlZiA9IDA7Ci0JY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX1NUUkVB
TV9SRVNFVDsKLQljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKLQljaGstPmZs
YWdzID0gMDsKLQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKLQljaGstPmJvb2tfc2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7Ci0JY2hrLT5zZW5kX3NpemUgPSBTQ1RQX1NJWkUz
MihjaGstPmJvb2tfc2l6ZSk7Ci0JY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOwotCWNoay0+ZGF0
YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RB
VEEpOwotCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgewotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIHNvX2xvY2tlZCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0J
fQotCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7Ci0KLQkv
KiBzZXR1cCBjaHVuayBwYXJhbWV0ZXJzICovCi0JY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9V
TlNFTlQ7Ci0JY2hrLT5zbmRfY291bnQgPSAwOwotCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkg
ewotCQljaGstPndob1RvID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7Ci0JfSBlbHNlIHsKLQkJY2hr
LT53aG9UbyA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQl9Ci0JY2ggPSBtdG9k
KGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7Ci0JY2gtPmNodW5rX3R5cGUgPSBT
Q1RQX1NUUkVBTV9SRVNFVDsKLQljaC0+Y2h1bmtfZmxhZ3MgPSAwOwotCWNoLT5jaHVua19sZW5n
dGggPSBodG9ucyhjaGstPmJvb2tfc2l6ZSk7Ci0JYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8t
PnJlZl9jb3VudCwgMSk7Ci0JU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6
ZTsKLQlzZXEgPSBzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0OwotCWlmIChzY3RwX2FkZF9z
dHJlYW1fcmVzZXRfb3V0KHN0Y2IsIGNoaywgc2VxLCAoc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2Vx
X2luIC0gMSksIChzdGNiLT5hc29jLnNlbmRpbmdfc2VxIC0gMSkpKSB7Ci0JCXNlcSsrOwotCQlh
c29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKLQl9IGVsc2UgewotCQltX2ZyZWVtKGNo
ay0+ZGF0YSk7Ci0JCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2Is
IGNoaywgc29fbG9ja2VkKTsKLQkJcmV0dXJuIChFTk9FTlQpOwotCX0KLQlhc29jLT5zdHJfcmVz
ZXQgPSBjaGs7Ci0JLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAqLwotCVRBSUxRX0lO
U0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCi0JCQkgIGNoaywKLQkJCSAgc2N0
cF9uZXh0KTsKLQlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOwotCi0JaWYgKHN0Y2ItPmFzb2Muc2Vu
ZF9zYWNrKSB7Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIHNvX2xvY2tlZCk7Ci0JfQotCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VULCBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBjaGstPndob1RvKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBfc2VuZF9zdHJfcmVz
ZXRfcmVxKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVp
bnQxNl90IG51bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqbGlzdCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHVpbnQ4X3Qgc2VuZF9pbl9yZXEsCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90IHNlbmRfdHNuX3JlcSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgYWRkX3N0
cmVhbSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZ19vLAotICAgICAg
ICAgICAgICAgICAgICAgICAgdWludDE2X3QgYWRkaW5nX2ksIHVpbnQ4X3QgcGVlcl9hc2tlZCkK
LXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGs7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCWludCBjYW5fc2VuZF9vdXRf
cmVxPTA7Ci0JdWludDMyX3Qgc2VxOwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmIChhc29j
LT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKLQkJLyotCi0JCSAqIEFscmVhZHkgb25lIHBl
bmRpbmcsIG11c3QgZ2V0IEFDSyBiYWNrIHRvIGNsZWFyIHRoZSBmbGFnLgotCQkgKi8KLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVCVVNZKTsKLQkJcmV0dXJuIChFQlVTWSk7Ci0JfQotCWlmICgoc2VuZF9pbl9yZXEgPT0gMCkg
JiYgKHNlbmRfdHNuX3JlcSA9PSAwKSAmJgotCSAgICAoYWRkX3N0cmVhbSA9PSAwKSkgewotCQkv
KiBub3RoaW5nIHRvIGRvICovCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0J
fQotCWlmIChzZW5kX3Rzbl9yZXEgJiYgc2VuZF9pbl9yZXEpIHsKLQkJLyogZXJyb3IsIGNhbid0
IGRvIHRoYXQgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9IGVsc2Ug
aWYgKHNlbmRfaW5fcmVxKSB7Ci0JCWNhbl9zZW5kX291dF9yZXEgPSAxOwotCX0KLQlpZiAobnVt
YmVyX2VudHJpZXMgPiAoTUNMQllURVMgLQotCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01J
Tl9PVkVSSEVBRCAtCi0JICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9j
aHVua2hkcikgLQotCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgLwotCSAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1
aW50MTZfdCkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0Jc2N0
cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7Ci0JaWYgKGNoayA9PSBOVUxMKSB7Ci0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCWNoay0+Y29weV9ieV9yZWYgPSAwOwot
CWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9TVFJFQU1fUkVTRVQ7Ci0JY2hrLT5yZWMuY2h1
bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7Ci0JY2hrLT5mbGFncyA9IDA7Ci0JY2hrLT5hc29jID0g
JnN0Y2ItPmFzb2M7Ci0JY2hrLT5ib29rX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmto
ZHIpOwotCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOwotCWNo
ay0+Ym9va19zaXplX3NjYWxlID0gMDsKLQotCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9y
X21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChjaGstPmRhdGEg
PT0gTlVMTCkgewotCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIFNDVFBfU09fTE9DS0VE
KTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVOT01FTSk7Ci0JCXJldHVybiAoRU5PTUVNKTsKLQl9Ci0JU0NUUF9CVUZfUkVT
Vl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKLQotCS8qIHNldHVwIGNodW5rIHBh
cmFtZXRlcnMgKi8KLQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKLQljaGstPnNu
ZF9jb3VudCA9IDA7Ci0JaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCWNoay0+d2hvVG8g
PSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKLQl9IGVsc2UgewotCQljaGstPndob1RvID0gc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwotCX0KLQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9U
by0+cmVmX2NvdW50LCAxKTsKLQljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciAqKTsKLQljaC0+Y2h1bmtfdHlwZSA9IFNDVFBfU1RSRUFNX1JFU0VUOwotCWNoLT5jaHVu
a19mbGFncyA9IDA7Ci0JY2gtPmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+Ym9va19zaXplKTsK
LQlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOwotCi0Jc2VxID0gc3Rj
Yi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dDsKLQlpZiAoY2FuX3NlbmRfb3V0X3JlcSkgewotCQlp
bnQgcmV0OwotCSAgICAgICAgcmV0ID0gc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X291dChzdGNiLCBj
aGssIHNlcSwgKHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9pbiAtIDEpLCAoc3RjYi0+YXNvYy5z
ZW5kaW5nX3NlcSAtIDEpKTsKLQkJaWYgKHJldCkgewotCQkJc2VxKys7Ci0JCQlhc29jLT5zdHJl
YW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKLQkJfQotCX0KLQlpZiAoKGFkZF9zdHJlYW0gJiAxKSAm
JgotCSAgICAoKHN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSAtIHN0Y2ItPmFzb2Muc3RyZWFt
b3V0Y250KSA8IGFkZGluZ19vKSkgewotCQkvKiBOZWVkIHRvIGFsbG9jYXRlIG1vcmUgKi8KLQkJ
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqb2xkc3RyZWFtOwotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1f
cXVldWVfcGVuZGluZyAqc3AsICpuc3A7Ci0JCWludCBpOwotI2lmIGRlZmluZWQoU0NUUF9ERVRB
SUxFRF9TVFJfU1RBVFMpCi0JCWludCBqOwotI2VuZGlmCi0KLQkJb2xkc3RyZWFtID0gc3RjYi0+
YXNvYy5zdHJtb3V0OwotCQkvKiBnZXQgc29tZSBtb3JlICovCi0JCVNDVFBfTUFMTE9DKHN0Y2It
PmFzb2Muc3RybW91dCwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAotCQkJICAgIChzdGNiLT5h
c29jLnN0cmVhbW91dGNudCArIGFkZGluZ19vKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1f
b3V0KSwKLQkJCSAgICBTQ1RQX01fU1RSTU8pOwotCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0ID09
IE5VTEwpIHsKLQkJCXVpbnQ4X3QgeDsKLQkJCXN0Y2ItPmFzb2Muc3RybW91dCA9IG9sZHN0cmVh
bTsKLQkJCS8qIFR1cm4gb2ZmIHRoZSBiaXQgKi8KLQkJCXggPSBhZGRfc3RyZWFtICYgMHhmZTsK
LQkJCWFkZF9zdHJlYW0gPSB4OwotCQkJZ290byBza2lwX3N0dWZmOwotCQl9Ci0JCS8qIE9rIG5v
dyB3ZSBwcm9jZWVkIHdpdGggY29weWluZyB0aGUgb2xkIG91dCBzdHVmZiBhbmQKLQkJICogaW5p
dGlhbGl6aW5nIHRoZSBuZXcgc3R1ZmYuCi0JCSAqLwotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3Rj
Yik7Ci0JCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2It
PmFzb2MsIDAsIDEpOwotCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7
IGkrKykgewotCQkJVEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsK
LQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gb2xkc3RyZWFtW2ld
LmNodW5rc19vbl9xdWV1ZXM7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3Jk
ZXJlZCA9IG9sZHN0cmVhbVtpXS5uZXh0X21pZF9vcmRlcmVkOwotCQkJc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLm5leHRfbWlkX3Vub3JkZXJlZCA9IG9sZHN0cmVhbVtpXS5uZXh0X21pZF91bm9yZGVy
ZWQ7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IG9sZHN0
cmVhbVtpXS5sYXN0X21zZ19pbmNvbXBsZXRlOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnNp
ZCA9IGk7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBvbGRzdHJlYW1baV0uc3Rh
dGU7Ci0JCQkvKiBGSVggTUUgRklYIE1FICovCi0JCQkvKiBUaGlzIHNob3VsZCBiZSBhIFNTX0NP
UFkgb3BlcmF0aW9uIEZJWCBNRSBTVFJFQU0gU0NIRURVTEVSIEVYUEVSVCAqLwotCQkJc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5z
dHJtb3V0W2ldLCAmb2xkc3RyZWFtW2ldKTsKLQkJCS8qIG5vdyBhbnl0aGluZyBvbiB0aG9zZSBx
dWV1ZXM/ICovCi0JCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvbGRzdHJlYW1baV0ub3V0cXVl
dWUsIG5leHQsIG5zcCkgewotCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3RyZWFtW2ldLm91dHF1ZXVl
LCBzcCwgbmV4dCk7Ci0JCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Muc3RybW91dFtp
XS5vdXRxdWV1ZSwgc3AsIG5leHQpOwotCQkJfQotCi0JCX0KLQkJLyogbm93IHRoZSBuZXcgc3Ry
ZWFtcyAqLwotCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgJnN0
Y2ItPmFzb2MsIDEpOwotCQlmb3IgKGkgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSA8IChz
dGNiLT5hc29jLnN0cmVhbW91dGNudCArIGFkZGluZ19vKTsgaSsrKSB7Ci0JCQlUQUlMUV9JTklU
KCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLmNodW5rc19vbl9xdWV1ZXMgPSAwOwotI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9TVFJf
U1RBVFMpCi0JCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgewot
CQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7Ci0JCQkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbal0gPSAwOwotCQkJfQotI2Vsc2UK
LQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IDA7Ci0JCQlzdGNi
LT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFswXSA9IDA7Ci0jZW5kaWYKLQkJCXN0
Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKLQkJCXN0Y2ItPmFzb2Mu
c3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLnNpZCA9IGk7Ci0JCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0
ZSA9IDA7Ci0JCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRfc3RyZWFtKHN0
Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOwotCQkJc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fQ0xPU0VEOwotCQl9Ci0JCXN0Y2ItPmFzb2Muc3RybV9y
ZWFsb3V0c2l6ZSA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250ICsgYWRkaW5nX287Ci0JCVNDVFBf
RlJFRShvbGRzdHJlYW0sIFNDVFBfTV9TVFJNTyk7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0
Y2IpOwotCX0KLXNraXBfc3R1ZmY6Ci0JaWYgKChhZGRfc3RyZWFtICYgMSkgJiYgKGFkZGluZ19v
ID4gMCkpIHsKLQkJYXNvYy0+c3RybV9wZW5kaW5nX2FkZF9zaXplID0gYWRkaW5nX287Ci0JCWFz
b2MtPnBlZXJfcmVxX291dCA9IHBlZXJfYXNrZWQ7Ci0JCXNjdHBfYWRkX2FuX291dF9zdHJlYW0o
Y2hrLCBzZXEsIGFkZGluZ19vKTsKLQkJc2VxKys7Ci0JCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRz
dGFuZGluZysrOwotCX0KLQlpZiAoKGFkZF9zdHJlYW0gJiAyKSAmJiAoYWRkaW5nX2kgPiAwKSkg
ewotCQlzY3RwX2FkZF9hbl9pbl9zdHJlYW0oY2hrLCBzZXEsIGFkZGluZ19pKTsKLQkJc2VxKys7
Ci0JCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOwotCX0KLQlpZiAoc2VuZF9pbl9y
ZXEpIHsKLQkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X2luKGNoaywgbnVtYmVyX2VudHJpZXMsIGxp
c3QsIHNlcSk7Ci0JCXNlcSsrOwotCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsK
LQl9Ci0JaWYgKHNlbmRfdHNuX3JlcSkgewotCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfdHNuKGNo
aywgc2VxKTsKLQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7Ci0JfQotCWFzb2Mt
PnN0cl9yZXNldCA9IGNoazsKLQkvKiBpbnNlcnQgdGhlIGNodW5rIGZvciBzZW5kaW5nICovCi0J
VEFJTFFfSU5TRVJUX1RBSUwoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwKLQkJCSAgY2hrLAot
CQkJICBzY3RwX25leHQpOwotCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Ci0JaWYgKHN0Y2ItPmFz
b2Muc2VuZF9zYWNrKSB7Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsK
LQl9Ci0Jc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQsIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIGNoay0+d2hvVG8pOwotCXJldHVybiAoMCk7Ci19Ci0KLXZvaWQKLXNjdHBf
c2VuZF9hYm9ydChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgc3RydWN0IHNvY2thZGRyICpz
cmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRy
ICpzaCwgdWludDMyX3QgdnRhZywgc3RydWN0IG1idWYgKmNhdXNlLAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCi0gICAgICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1m
bG93aWQsIHVpbnQxNl90IGZpYm51bSwKLSNlbmRpZgotICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKLXsKLQkvKiBEb24ndCByZXNwb25kIHRvIGFuIEFCT1JU
IHdpdGggYW4gQUJPUlQuICovCi0JaWYgKHNjdHBfaXNfdGhlcmVfYW5fYWJvcnRfaGVyZShtLCBp
cGhsZW4sICZ2dGFnKSkgewotCQlpZiAoY2F1c2UpCi0JCQlzY3RwX21fZnJlZW0oY2F1c2UpOwot
CQlyZXR1cm47Ci0JfQotCXNjdHBfc2VuZF9yZXNwX21zZyhzcmMsIGRzdCwgc2gsIHZ0YWcsIFND
VFBfQUJPUlRfQVNTT0NJQVRJT04sIGNhdXNlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0J
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAotI2VuZGlmCi0J
ICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1z
Y3RwX3NlbmRfb3BlcnJfdG8oc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAq
ZHN0LAotICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgdWludDMyX3QgdnRh
Zywgc3RydWN0IG1idWYgKmNhdXNlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0gICAgICAg
ICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90
IGZpYm51bSwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWlu
dDE2X3QgcG9ydCkKLXsKLQlzY3RwX3NlbmRfcmVzcF9tc2coc3JjLCBkc3QsIHNoLCB2dGFnLCBT
Q1RQX09QRVJBVElPTl9FUlJPUiwgY2F1c2UsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCi0jZW5kaWYKLQkg
ICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBz
dHJ1Y3QgbWJ1ZiAqCi1zY3RwX2NvcHlfcmVzdW1lKHN0cnVjdCB1aW8gKnVpbywKLQkJIGludCBt
YXhfc2VuZF9sZW4sCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPiA2MDIwMDAKLQkJIGludCB1c2VyX21hcmtzX2VvciwKLSNlbmRpZgotCQkgaW50ICplcnJv
ciwKLQkJIHVpbnQzMl90ICpzbmRvdXQsCi0JCSBzdHJ1Y3QgbWJ1ZiAqKm5ld190YWlsKQotewot
I2lmIGRlZmluZWQoX19QYW5kYV9fKQotCXN0cnVjdCBtYnVmICptOwotCi0JbSA9IG1fdWlvdG9t
YnVmKHVpbywgTV9XQUlUT0ssIG1heF9zZW5kX2xlbiwgMCwKLQkJCSh1c2VyX21hcmtzX2VvciA/
IE1fRU9SIDogMCkpOwotCWlmIChtID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChO
VUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQkqZXJy
b3IgPSBFTk9CVUZTOwotCX0gZWxzZSB7Ci0JCSpzbmRvdXQgPSBtX2xlbmd0aChtLCBOVUxMKTsK
LQkJKm5ld190YWlsID0gbV9sYXN0KG0pOwotCX0KLQlyZXR1cm4gKG0pOwotI2VsaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAKLQlzdHJ1Y3QgbWJ1
ZiAqbTsKLQotCW0gPSBtX3Vpb3RvbWJ1Zih1aW8sIE1fV0FJVE9LLCBtYXhfc2VuZF9sZW4sIDAs
Ci0JCShNX1BLVEhEUiB8ICh1c2VyX21hcmtzX2VvciA/IE1fRU9SIDogMCkpKTsKLQlpZiAobSA9
PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKLQkJKmVycm9yID0gRU5PQlVGUzsKLQl9IGVsc2Ug
ewotCQkqc25kb3V0ID0gbV9sZW5ndGgobSwgTlVMTCk7Ci0JCSpuZXdfdGFpbCA9IG1fbGFzdCht
KTsKLQl9Ci0JcmV0dXJuIChtKTsKLSNlbHNlCi0JaW50IGxlZnQsIGNhbmNweSwgd2lsbGNweTsK
LQlzdHJ1Y3QgbWJ1ZiAqbSwgKmhlYWQ7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBk
ZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JbGVmdCA9IChpbnQpbWluKHVpby0+dWlvX3Jlc2lkLCBt
YXhfc2VuZF9sZW4pOwotI2Vsc2UKLQlsZWZ0ID0gKGludCltaW4odWlvX3Jlc2lkKHVpbyksIG1h
eF9zZW5kX2xlbik7Ci0jZW5kaWYKLSNlbHNlCi0JbGVmdCA9IChpbnQpbWluKHVpby0+dWlvX3Jl
c2lkLCBtYXhfc2VuZF9sZW4pOwotI2VuZGlmCi0JLyogQWx3YXlzIGdldCBhIGhlYWRlciBqdXN0
IGluIGNhc2UgKi8KLQloZWFkID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJ
VE9LLCAwLCBNVF9EQVRBKTsKLQlpZiAoaGVhZCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsK
LQkJKmVycm9yID0gRU5PQlVGUzsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JY2FuY3B5ID0gKGlu
dClNX1RSQUlMSU5HU1BBQ0UoaGVhZCk7Ci0Jd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOwot
CSplcnJvciA9IHVpb21vdmUobXRvZChoZWFkLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsKLQlp
ZiAoKmVycm9yKSB7Ci0JCXNjdHBfbV9mcmVlbShoZWFkKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9
Ci0JKnNuZG91dCArPSB3aWxsY3B5OwotCWxlZnQgLT0gd2lsbGNweTsKLQlTQ1RQX0JVRl9MRU4o
aGVhZCkgPSB3aWxsY3B5OwotCW0gPSBoZWFkOwotCSpuZXdfdGFpbCA9IGhlYWQ7Ci0Jd2hpbGUg
KGxlZnQgPiAwKSB7Ci0JCS8qIG1vdmUgaW4gdXNlciBkYXRhICovCi0JCVNDVFBfQlVGX05FWFQo
bSkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDAsIE1UX0RBVEEp
OwotCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMKSB7Ci0JCQlzY3RwX21fZnJlZW0oaGVh
ZCk7Ci0JCQkqbmV3X3RhaWwgPSBOVUxMOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQkJKmVycm9yID0g
RU5PQlVGUzsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7
Ci0JCWNhbmNweSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKG0pOwotCQl3aWxsY3B5ID0gbWluKGNh
bmNweSwgbGVmdCk7Ci0JCSplcnJvciA9IHVpb21vdmUobXRvZChtLCBjYWRkcl90KSwgd2lsbGNw
eSwgdWlvKTsKLQkJaWYgKCplcnJvcikgewotCQkJc2N0cF9tX2ZyZWVtKGhlYWQpOwotCQkJKm5l
d190YWlsID0gTlVMTDsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOwotCQkJKmVycm9yID0gRUZBVUxUOwotCQkJ
cmV0dXJuIChOVUxMKTsKLQkJfQotCQlTQ1RQX0JVRl9MRU4obSkgPSB3aWxsY3B5OwotCQlsZWZ0
IC09IHdpbGxjcHk7Ci0JCSpzbmRvdXQgKz0gd2lsbGNweTsKLQkJKm5ld190YWlsID0gbTsKLQkJ
aWYgKGxlZnQgPT0gMCkgewotCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5VTEw7Ci0JCX0KLQl9Ci0J
cmV0dXJuIChoZWFkKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2NvcHlfb25lKHN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwKLSAgICAgICAgICAgICAgc3RydWN0
IHVpbyAqdWlvLAotICAgICAgICAgICAgICBpbnQgcmVzdl91cGZyb250KQotewotI2lmIGRlZmlu
ZWQoX19QYW5kYV9fKQotCXNwLT5kYXRhID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgc3At
Pmxlbmd0aCwKLQkgICAgICAgICAgICAgICAgICAgICAgIHJlc3ZfdXBmcm9udCwgMCk7Ci0JaWYg
KHNwLT5kYXRhID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMp
OwotCX0KLQotCXNwLT50YWlsX21idWYgPSBtX2xhc3Qoc3AtPmRhdGEpOwotCXJldHVybiAoMCk7
Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAw
MAotCXNwLT5kYXRhID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgc3AtPmxlbmd0aCwKLQkg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3ZfdXBmcm9udCwgMCk7Ci0JaWYgKHNwLT5kYXRhID09
IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQotCXNw
LT50YWlsX21idWYgPSBtX2xhc3Qoc3AtPmRhdGEpOwotCXJldHVybiAoMCk7Ci0jZWxzZQotCWlu
dCBsZWZ0OwotCWludCBjYW5jcHksIHdpbGxjcHksIGVycm9yOwotCXN0cnVjdCBtYnVmICptLCAq
aGVhZDsKLQlpbnQgY3BzeiA9IDA7Ci0KLQkvKiBGaXJzdCBvbmUgZ2V0cyBhIGhlYWRlciAqLwot
CWxlZnQgPSBzcC0+bGVuZ3RoOwotCWhlYWQgPSBtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKChs
ZWZ0ICsgcmVzdl91cGZyb250KSwgMCwgTV9XQUlUT0ssIDAsIE1UX0RBVEEpOwotCWlmIChtID09
IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVOT0JVRlMpOwotCX0KLQkvKi0K
LQkgKiBBZGQgdGhpcyBvbmUgZm9yIG0gaW4gbm93LCB0aGF0IHdheSBpZiB0aGUgYWxsb2MgZmFp
bHMgd2Ugd29uJ3QKLQkgKiBoYXZlIGEgYmFkIGNudC4KLQkgKi8KLQlTQ1RQX0JVRl9SRVNWX1VG
KG0sIHJlc3ZfdXBmcm9udCk7Ci0JY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UobSk7Ci0J
d2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOwotCXdoaWxlIChsZWZ0ID4gMCkgewotCQkvKiBt
b3ZlIGluIHVzZXIgZGF0YSAqLwotCQllcnJvciA9IHVpb21vdmUobXRvZChtLCBjYWRkcl90KSwg
d2lsbGNweSwgdWlvKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlzY3RwX21fZnJlZW0oaGVhZCk7Ci0J
CQlyZXR1cm4gKGVycm9yKTsKLQkJfQotCQlTQ1RQX0JVRl9MRU4obSkgPSB3aWxsY3B5OwotCQls
ZWZ0IC09IHdpbGxjcHk7Ci0JCWNwc3ogKz0gd2lsbGNweTsKLQkJaWYgKGxlZnQgPiAwKSB7Ci0J
CQlTQ1RQX0JVRl9ORVhUKG0pID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJ
VE9LLCAwLCBNVF9EQVRBKTsKLQkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKLQkJ
CQkvKgotCQkJCSAqIHRoZSBoZWFkIGdvZXMgYmFjayB0byBjYWxsZXIsIGhlIGNhbiBmcmVlCi0J
CQkJICogdGhlIHJlc3QKLQkJCQkgKi8KLQkJCQlzY3RwX21fZnJlZW0oaGVhZCk7Ci0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVOT0JVRlMpOwotCQkJCXJldHVybiAoRU5PQlVGUyk7Ci0JCQl9Ci0JCQltID0gU0NUUF9CVUZf
TkVYVChtKTsKLQkJCWNhbmNweSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKG0pOwotCQkJd2lsbGNw
eSA9IG1pbihjYW5jcHksIGxlZnQpOwotCQl9IGVsc2UgewotCQkJc3AtPnRhaWxfbWJ1ZiA9IG07
Ci0JCQlTQ1RQX0JVRl9ORVhUKG0pID0gTlVMTDsKLQkJfQotCX0KLQlzcC0+ZGF0YSA9IGhlYWQ7
Ci0Jc3AtPmxlbmd0aCA9IGNwc3o7Ci0JcmV0dXJuICgwKTsKLSNlbmRpZgotfQotCi0KLQotc3Rh
dGljIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICoKLXNjdHBfY29weV9pdF9pbihz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Ms
Ci0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3JjdiwKLSAgICBzdHJ1Y3QgdWlvICp1aW8s
Ci0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgIGludCBtYXhfc2VuZF9sZW4sCi0gICAg
aW50IHVzZXJfbWFya3NfZW9yLAotICAgIGludCAqZXJyb3IpCi0KLXsKLQkvKi0KLQkgKiBUaGlz
IHJvdXRpbmUgbXVzdCBiZSB2ZXJ5IGNhcmVmdWwgaW4gaXRzIHdvcmsuIFByb3RvY29sCi0JICog
cHJvY2Vzc2luZyBpcyB1cCBhbmQgcnVubmluZyBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gc3Bs
Li4uKCkKLQkgKiB3aGVuIHlvdSBuZWVkIHRvIGRvIHNvbWV0aGluZyB0aGF0IG1heSBlZmZlY3Qg
dGhlIHN0Y2IvYXNvYy4gVGhlCi0JICogc2IgaXMgbG9ja2VkIGhvd2V2ZXIuIFdoZW4gZGF0YSBp
cyBjb3BpZWQgdGhlIHByb3RvY29sIHByb2Nlc3NpbmcKLQkgKiBzaG91bGQgYmUgZW5hYmxlZCBz
aW5jZSB0aGlzIGlzIGEgc2xvd2VyIG9wZXJhdGlvbi4uLgotCSAqLwotCXN0cnVjdCBzY3RwX3N0
cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCA9IE5VTEw7Ci0JaW50IHJlc3ZfaW5fZmlyc3Q7Ci0KLQkq
ZXJyb3IgPSAwOwotCS8qIE5vdyBjYW4gd2Ugc2VuZCB0aGlzPyAqLwotCWlmICgoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB8fAotCSAgICAoU0NUUF9H
RVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpIHx8
Ci0JICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKLQkJ
LyogZ290IGRhdGEgd2hpbGUgc2h1dHRpbmcgZG93biAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7Ci0J
CSplcnJvciA9IEVDT05OUkVTRVQ7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0Jc2N0cF9hbGxvY19h
X3N0cm1vcShzdGNiLCBzcCk7Ci0JaWYgKHNwID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKLQkJ
KmVycm9yID0gRU5PTUVNOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCXNwLT5hY3RfZmxhZ3MgPSAw
OwotCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAwOwotCXNwLT5zaW5mb19mbGFncyA9IHNyY3YtPnNp
bmZvX2ZsYWdzOwotCXNwLT50aW1ldG9saXZlID0gc3Jjdi0+c2luZm9fdGltZXRvbGl2ZTsKLQlz
cC0+cHBpZCA9IHNyY3YtPnNpbmZvX3BwaWQ7Ci0Jc3AtPmNvbnRleHQgPSBzcmN2LT5zaW5mb19j
b250ZXh0OwotCXNwLT5mc24gPSAwOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+
dHMpOwotCi0Jc3AtPnNpZCA9IHNyY3YtPnNpbmZvX3N0cmVhbTsKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0Jc3AtPmxlbmd0aCA9ICh1aW50MzJf
dCltaW4odWlvLT51aW9fcmVzaWQsIG1heF9zZW5kX2xlbik7Ci0jZWxzZQotCXNwLT5sZW5ndGgg
PSAodWludDMyX3QpbWluKHVpb19yZXNpZCh1aW8pLCBtYXhfc2VuZF9sZW4pOwotI2VuZGlmCi0j
ZWxzZQotCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2Vu
ZF9sZW4pOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBM
RV9MRU9QQVJEKQotCWlmICgoc3AtPmxlbmd0aCA9PSAodWludDMyX3QpdWlvLT51aW9fcmVzaWQp
ICYmCi0jZWxzZQotCWlmICgoc3AtPmxlbmd0aCA9PSAodWludDMyX3QpdWlvX3Jlc2lkKHVpbykp
ICYmCi0jZW5kaWYKLSNlbHNlCi0JaWYgKChzcC0+bGVuZ3RoID09ICh1aW50MzJfdCl1aW8tPnVp
b19yZXNpZCkgJiYKLSNlbmRpZgotCSAgICAoKHVzZXJfbWFya3NfZW9yID09IDApIHx8Ci0JICAg
ICAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgfHwKLQkgICAgICh1c2VyX21hcmtzX2Vv
ciAmJiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPUikpKSkgewotCQlzcC0+bXNnX2lzX2Nv
bXBsZXRlID0gMTsKLQl9IGVsc2UgewotCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMDsKLQl9Ci0J
c3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7Ci0Jc3AtPnNvbWVfdGFrZW4gPSAwOwotCXNwLT5wdXRf
bGFzdF9vdXQgPSAwOwotICAgICAgICByZXN2X2luX2ZpcnN0ID0gU0NUUF9EQVRBX0NIVU5LX09W
RVJIRUFEKHN0Y2IpOwotCXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1ZiA9IE5VTEw7Ci0JaWYgKHNw
LT5sZW5ndGggPT0gMCkgewotCQkqZXJyb3IgPSAwOwotCQlnb3RvIHNraXBfY29weTsKLQl9Ci0J
aWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92YWxpZCkgewotCQlzcC0+YXV0aF9rZXlpZCA9IHNy
Y3YtPnNpbmZvX2tleW51bWJlcjsKLQl9IGVsc2UgewotCQlzcC0+YXV0aF9rZXlpZCA9IHN0Y2It
PmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOwotCX0KLQlpZiAoc2N0cF9hdXRoX2lzX3JlcXVp
cmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgewotCQlz
Y3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgc3AtPmF1dGhfa2V5aWQpOwotCQlzcC0+aG9sZHNf
a2V5X3JlZiA9IDE7Ci0JfQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfU09DS0VUX1VO
TE9DSyhTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSwgMCk7Ci0jZW5kaWYKLQkqZXJyb3IgPSBz
Y3RwX2NvcHlfb25lKHNwLCB1aW8sIHJlc3ZfaW5fZmlyc3QpOwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCksIDApOwot
I2VuZGlmCi0gc2tpcF9jb3B5OgotCWlmICgqZXJyb3IpIHsKLQkJc2N0cF9mcmVlX2Ffc3RybW9x
KHN0Y2IsIHNwLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCXNwID0gTlVMTDsKLQl9IGVsc2UgewotCQlp
ZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9BRERSX09WRVIpIHsKLQkJCXNwLT5uZXQgPSBuZXQ7
Ci0JCQlhdG9taWNfYWRkX2ludCgmc3AtPm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJfSBlbHNlIHsK
LQkJCXNwLT5uZXQgPSBOVUxMOwotCQl9Ci0JCXNjdHBfc2V0X3Byc2N0cF9wb2xpY3koc3ApOwot
CX0KLW91dF9ub3c6Ci0JcmV0dXJuIChzcCk7Ci19Ci0KLQotaW50Ci1zY3RwX3Nvc2VuZChzdHJ1
Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLSAgICAg
ICAgICAgIHN0cnVjdCB1aW8gKnVpbywKLSNpZmRlZiBfX1BhbmRhX18KLSAgICAgICAgICAgIHBh
a2hhbmRsZV90eXBlIHRvcCwKLSAgICAgICAgICAgIHBha2hhbmRsZV90eXBlIGljb250cm9sLAot
I2Vsc2UKLSAgICAgICAgICAgIHN0cnVjdCBtYnVmICp0b3AsCi0gICAgICAgICAgICBzdHJ1Y3Qg
bWJ1ZiAqY29udHJvbCwKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fUGFuZGFfXykKLSAgICAgICAgICAgIGludCBmbGFncwotI2Vsc2UKLSAgICAgICAgICAgIGlu
dCBmbGFncywKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDAwMDAKLSAgICAgICAgICAgIHN0cnVjdCB0aHJlYWQgKnAKLSNlbGlmIGRlZmluZWQoX19X
aW5kb3dzX18pCi0gICAgICAgICAgICBQS1RIUkVBRCBwCi0jZWxzZQotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLSAgICAgICAgICAgIC8qCi0JICAgICAqIHByb2MgaXMgYSBkdW1teSBpbiBf
X1VzZXJzcGFjZV9fIGFuZCB3aWxsIG5vdCBiZSBwYXNzZWQKLQkgICAgICogdG8gc2N0cF9sb3dl
cl9zb3NlbmQKLQkgICAgICovCi0jZW5kaWYKLSAgICAgICAgICAgIHN0cnVjdCBwcm9jICpwCi0j
ZW5kaWYKLSNlbmRpZgotKQotewotI2lmZGVmIF9fUGFuZGFfXwotCXN0cnVjdCBtYnVmICpjb250
cm9sID0gTlVMTDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXN0cnVjdCBwcm9j
ICpwID0gY3VycmVudF9wcm9jKCk7Ci0jZW5kaWYKLQlpbnQgZXJyb3IsIHVzZV9zbmRpbmZvID0g
MDsKLQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvIHNuZHJjdm5pbmZvOwotCXN0cnVjdCBzb2NrYWRk
ciAqYWRkcl90b191c2U7Ci0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCXN0
cnVjdCBzb2NrYWRkcl9pbiBzaW47Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
CVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotI2VuZGlmCi0jaWZkZWYgX19QYW5kYV9fCi0JY29u
dHJvbCA9IFNDVFBfSEVBREVSX1RPX0NIQUlOKGljb250cm9sKTsKLSNlbmRpZgotCWlmIChjb250
cm9sKSB7Ci0JCS8qIHByb2Nlc3MgY21zZyBzbmQvcmN2IGluZm8gKG1heWJlIGEgYXNzb2MtaWQp
ICovCi0JCWlmIChzY3RwX2ZpbmRfY21zZyhTQ1RQX1NORFJDViwgKHZvaWQgKikmc25kcmN2bmlu
Zm8sIGNvbnRyb2wsCi0JCSAgICBzaXplb2Yoc25kcmN2bmluZm8pKSkgewotCQkJLyogZ290IG9u
ZSAqLwotCQkJdXNlX3NuZGluZm8gPSAxOwotCQl9Ci0JfQotCWFkZHJfdG9fdXNlID0gYWRkcjsK
LSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JaWYgKChhZGRyKSAmJiAoYWRk
ci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OwotCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCWlmIChJTjZfSVNf
QUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJaW42X3NpbjZfMl9zaW4oJnNp
biwgc2luNik7Ci0JCQlhZGRyX3RvX3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQl9
Ci0JfQotI2VuZGlmCi0JZXJyb3IgPSBzY3RwX2xvd2VyX3Nvc2VuZChzbywgYWRkcl90b191c2Us
IHVpbywgdG9wLAotI2lmZGVmIF9fUGFuZGFfXwotCQkJCSAgaWNvbnRyb2wsCi0jZWxzZQotCQkJ
CSAgY29udHJvbCwKLSNlbmRpZgotCQkJCSAgZmxhZ3MsCi0JCQkJICB1c2Vfc25kaW5mbyA/ICZz
bmRyY3ZuaW5mbzogTlVMTAotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykpCi0JCQkJICAsIHAKLSNlbmRpZgotCQkpOwotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQlyZXR1cm4gKGVycm9y
KTsKLX0KLQotCi1pbnQKLXNjdHBfbG93ZXJfc29zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLAotICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAgICAgICAg
c3RydWN0IHVpbyAqdWlvLAotI2lmZGVmIF9fUGFuZGFfXwotICAgICAgICAgICAgICAgICAgcGFr
aGFuZGxlX3R5cGUgaV9wYWssCi0gICAgICAgICAgICAgICAgICBwYWtoYW5kbGVfdHlwZSBpX2Nv
bnRyb2wsCi0jZWxzZQotICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKmlfcGFrLAotICAg
ICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0jZW5kaWYKLSAgICAgICAgICAg
ICAgICAgIGludCBmbGFncywKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmlu
Zm8gKnNyY3YKLSNpZiAhKGRlZmluZWQoIF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKSkKLSAgICAgICAgICAgICAgICAgICwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLSAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aHJl
YWQgKnAKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0gICAgICAgICAgICAgICAgICBQS1RI
UkVBRCBwCi0jZWxzZQotICAgICAgICAgICAgICAgICAgc3RydWN0IHByb2MgKnAKLSNlbmRpZgot
I2VuZGlmCi0JKQotewotCXVuc2lnbmVkIGludCBzbmRsZW4gPSAwLCBtYXhfbGVuOwotCWludCBl
cnJvciwgbGVuOwotCXN0cnVjdCBtYnVmICp0b3AgPSBOVUxMOwotI2lmZGVmIF9fUGFuZGFfXwot
CXN0cnVjdCBtYnVmICpjb250cm9sID0gTlVMTDsKLSNlbmRpZgotCWludCBxdWV1ZV9vbmx5ID0g
MCwgcXVldWVfb25seV9mb3JfaW5pdCA9IDA7Ci0JaW50IGZyZWVfY250X2FwcGxpZWQgPSAwOwot
CWludCB1bl9zZW50OwotCWludCBub3dfZmlsbGVkID0gMDsKLQl1bnNpZ25lZCBpbnQgaW5xdWV1
ZV9ieXRlcyA9IDA7Ci0Jc3RydWN0IHNjdHBfYmxvY2tfZW50cnkgYmU7Ci0Jc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCB0aW1l
dmFsIG5vdzsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKnRfaW5wOwotCWludCB1c2VyX21hcmtzX2Vv
cjsKLQlpbnQgY3JlYXRlX2xvY2tfYXBwbGllZCA9IDA7Ci0JaW50IG5hZ2xlX2FwcGxpZXMgPSAw
OwotCWludCBzb21lX29uX2NvbnRyb2wgPSAwOwotCWludCBnb3RfYWxsX29mX3RoZV9zZW5kID0g
MDsKLQlpbnQgaG9sZF90Y2Jsb2NrID0gMDsKLQlpbnQgbm9uX2Jsb2NraW5nID0gMDsKLQl1aW50
MzJfdCBsb2NhbF9hZGRfbW9yZSwgbG9jYWxfc29yZXN2ID0gMDsKLQl1aW50MTZfdCBwb3J0Owot
CXVpbnQxNl90IHNpbmZvX2ZsYWdzOwotCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19pZDsKLQot
CWVycm9yID0gMDsKLQluZXQgPSBOVUxMOwotCXN0Y2IgPSBOVUxMOwotCWFzb2MgPSBOVUxMOwot
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2N0cF9sb2NrX2Fzc2VydChzbyk7Ci0jZW5kaWYK
LQl0X2lucCA9IGlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlu
cCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJaWYgKGlf
cGFrKSB7Ci0JCQlTQ1RQX1JFTEVBU0VfUEtUKGlfcGFrKTsKLQkJfQotCQlyZXR1cm4gKGVycm9y
KTsKLQl9Ci0JaWYgKCh1aW8gPT0gTlVMTCkgJiYgKGlfcGFrID09IE5VTEwpKSB7Ci0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlO
VkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQl1c2VyX21hcmtzX2VvciA9IHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJQ0lUX0VPUik7Ci0JYXRvbWljX2Fk
ZF9pbnQoJmlucC0+dG90YWxfc2VuZHMsIDEpOwotCWlmICh1aW8pIHsKLSNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JCWlmICh1aW8tPnVpb19yZXNp
ZCA8IDApIHsKLSNlbHNlCi0JCWlmICh1aW9fcmVzaWQodWlvKSA8IDApIHsKLSNlbmRpZgotI2Vs
c2UKLQkJaWYgKHVpby0+dWlvX3Jlc2lkIDwgMCkgewotI2VuZGlmCi0JCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0J
CQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpCi0JCXNuZGxlbiA9ICh1bnNpZ25lZCBpbnQpdWlvLT51aW9fcmVz
aWQ7Ci0jZWxzZQotCQlzbmRsZW4gPSAodW5zaWduZWQgaW50KXVpb19yZXNpZCh1aW8pOwotI2Vu
ZGlmCi0jZWxzZQotCQlzbmRsZW4gPSAodW5zaWduZWQgaW50KXVpby0+dWlvX3Jlc2lkOwotI2Vu
ZGlmCi0JfSBlbHNlIHsKLQkJdG9wID0gU0NUUF9IRUFERVJfVE9fQ0hBSU4oaV9wYWspOwotI2lm
ZGVmIF9fUGFuZGFfXwotCQkvKi0KLQkJICogYXBwIGxlbiBpbmRpY2F0ZXMgdGhlIGRhdGFsZW4s
IGRnc2l6ZSBmb3IgY2FzZXMKLQkJICogb2YgU0NUUF9FT0YvQUJPUlQgd2lsbCBub3QgaGF2ZSB0
aGUgcmlnaHQgbGVuCi0JCSAqLwotCQlzbmRsZW4gPSBTQ1RQX0FQUF9EQVRBX0xFTihpX3Bhayk7
Ci0JCS8qLQotCQkgKiBTZXQgdGhlIHBhcnRpY2xlIGxlbiBhbHNvIHRvIHplcm8gdG8gbWF0Y2gK
LQkJICogdXAgd2l0aCBhcHAgbGVuLiBXZSBvbmx5IGhhdmUgb25lIHBhcnRpY2xlCi0JCSAqIGlm
IGFwcCBsZW4gaXMgemVybyBmb3IgUGFuZGEuIFRoaXMgaXMgZW5zdXJlZAotCQkgKiBpbiB0aGUg
c29ja2V0IGxpYgotCQkgKi8KLQkJaWYgKHNuZGxlbiA9PSAwKSB7Ci0JCQlTQ1RQX0JVRl9MRU4o
dG9wKSAgPSAwOwotCQl9Ci0JCS8qLQotCQkgKiBXZSBkZWxpbmsgdGhlIGNoYWluIGZyb20gaGVh
ZGVyLCBidXQga2VlcAotCQkgKiB0aGUgaGVhZGVyIGFyb3VuZCBhcyB3ZSB3aWxsIG5lZWQgaXQg
aW4KLQkJICogRUFHQUlOIGNhc2UKLQkJICovCi0JCVNDVFBfREVUQUNIX0hFQURFUl9GUk9NX0NI
QUlOKGlfcGFrKTsKLSNlbHNlCi0JCXNuZGxlbiA9IFNDVFBfSEVBREVSX0xFTihpX3Bhayk7Ci0j
ZW5kaWYKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJTZW5kIGNhbGxlZCBhZGRy
OiVwIHNlbmQgbGVuZ3RoICVkXG4iLAotCQkodm9pZCAqKWFkZHIsCi0JICAgICAgICBzbmRsZW4p
OwotI2lmZGVmIF9fUGFuZGFfXwotCWlmIChpX2NvbnRyb2wpIHsKLQkJY29udHJvbCA9IFNDVFBf
SEVBREVSX1RPX0NIQUlOKGlfY29udHJvbCk7Ci0JfQotI2VuZGlmCi0JaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSAmJgotCSAgICBTQ1RQX0lTX0xJU1RFTklO
RyhpbnApKSB7Ci0JCS8qIFRoZSBsaXN0ZW5lciBjYW4gTk9UIHNlbmQgKi8KLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT1RD
T05OKTsKLQkJZXJyb3IgPSBFTk9UQ09OTjsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCS8q
KgotCSAqIFByZS1zY3JlZW4gYWRkcmVzcywgaWYgb25lIGlzIGdpdmVuIHRoZSBzaW4tbGVuCi0J
ICogbXVzdCBiZSBzZXQgY29ycmVjdGx5IQotCSAqLwotCWlmIChhZGRyKSB7Ci0JCXVuaW9uIHNj
dHBfc29ja3N0b3JlICpyYWRkciA9ICh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqKWFkZHI7Ci0JCXN3
aXRjaCAocmFkZHItPnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVU
OgotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQkJaWYgKHJhZGRyLT5zaW4uc2luX2xlbiAhPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBz
dGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJ
TlZBTDsKLQkJCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJCX0KLSNlbmRpZgotCQkJcG9ydCA9IHJh
ZGRyLT5zaW4uc2luX3BvcnQ7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNh
c2UgQUZfSU5FVDY6Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQkJaWYgKHJhZGRyLT5zaW42LnNp
bjZfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsK
LQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJCX0KLSNlbmRp
ZgotCQkJcG9ydCA9IHJhZGRyLT5zaW42LnNpbjZfcG9ydDsKLQkJCWJyZWFrOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46Ci0jaWZkZWYgSEFWRV9T
Q09OTl9MRU4KLQkJCWlmIChyYWRkci0+c2Nvbm4uc2Nvbm5fbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCQl9Ci0jZW5kaWYKLQkJCXBvcnQgPSByYWRkci0+c2Nv
bm4uc2Nvbm5fcG9ydDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVBRk5P
U1VQUE9SVCk7Ci0JCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJCWdvdG8gb3V0X3VubG9ja2Vk
OwotCQl9Ci0JfSBlbHNlCi0JCXBvcnQgPSAwOwotCi0JaWYgKHNyY3YpIHsKLQkJc2luZm9fZmxh
Z3MgPSBzcmN2LT5zaW5mb19mbGFnczsKLQkJc2luZm9fYXNzb2NfaWQgPSBzcmN2LT5zaW5mb19h
c3NvY19pZDsKLQkJaWYgKElOVkFMSURfU0lORk9fRkxBRyhzaW5mb19mbGFncykgfHwKLQkJICAg
IFBSX1NDVFBfSU5WQUxJRF9QT0xJQ1koc2luZm9fZmxhZ3MpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0J
CQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9Ci0JCWlmIChzcmN2
LT5zaW5mb19mbGFncykKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfZmxhZ3Mp
OwotCX0gZWxzZSB7Ci0JCXNpbmZvX2ZsYWdzID0gaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFnczsK
LQkJc2luZm9fYXNzb2NfaWQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2Fzc29jX2lkOwotCX0KLQlp
ZiAoc2luZm9fZmxhZ3MgJiBTQ1RQX1NFTkRBTEwpIHsKLQkJLyogaXRzIGEgc2VuZGFsbCAqLwot
CQllcnJvciA9IHNjdHBfc2VuZGFsbChpbnAsIHVpbywgdG9wLCBzcmN2KTsKLQkJdG9wID0gTlVM
TDsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCWlmICgoc2luZm9fZmxhZ3MgJiBTQ1RQX0FE
RFJfT1ZFUikgJiYgKGFkZHIgPT0gTlVMTCkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOwotCQllcnJvciA9IEVJ
TlZBTDsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCS8qIG5vdyB3ZSBtdXN0IGZpbmQgdGhl
IGFzc29jICovCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNU
RUQpIHx8Ci0JICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSkgewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwot
CQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJfQotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfSBl
bHNlIGlmIChzaW5mb19hc3NvY19pZCkgewotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25f
ZXBfYXNvY2lkKGlucCwgc2luZm9fYXNzb2NfaWQsIDEpOwotCQlpZiAoc3RjYiAhPSBOVUxMKSB7
Ci0JCQlob2xkX3RjYmxvY2sgPSAxOwotCQl9Ci0JfSBlbHNlIGlmIChhZGRyKSB7Ci0JCS8qLQot
CQkgKiBTaW5jZSB3ZSBkaWQgbm90IHVzZSBmaW5kZXAgd2UgbXVzdAotCQkgKiBpbmNyZW1lbnQg
aXQsIGFuZCBpZiB3ZSBkb24ndCBmaW5kIGEgdGNiCi0JCSAqIGRlY3JlbWVudCBpdC4KLQkJICov
Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoJnRfaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkg
ewotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0J
CQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCX0gZWxzZSB7Ci0JCQlob2xkX3RjYmxvY2sgPSAx
OwotCQl9Ci0JfQotCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoYWRkcikpIHsKLQkJLyogUG9zc2li
bGUgaW1wbGljaXQgc2VuZD8gKi8KLQkJU0NUUF9BU09DX0NSRUFURV9MT0NLKGlucCk7Ci0JCWNy
ZWF0ZV9sb2NrX2FwcGxpZWQgPSAxOwotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgewotCQkJLyogU2hvdWxkIEkgcmVhbGx5IHVubG9jayA/
ICovCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJZ290byBvdXRfdW5s
b2NrZWQ7Ci0KLQkJfQotCQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNikgPT0gMCkgJiYKLQkJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0X3VubG9ja2Vk
OwotCQl9Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7
Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJLyogV2l0aCB0aGUgbG9jayBhcHBsaWVkIGxv
b2sgYWdhaW4gKi8KLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJnRfaW5w
LCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJaWYgKChzdGNiID09IE5VTEwpICYmIChjb250
cm9sICE9IE5VTEwpICYmIChwb3J0ID4gMCkpIHsKLQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9jbXNncygmdF9pbnAsIHBvcnQsIGNvbnRyb2wsICZuZXQsICZlcnJvcik7Ci0JCX0KLQkJ
aWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCX0gZWxzZSB7Ci0J
CQlob2xkX3RjYmxvY2sgPSAxOwotCQl9Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBvdXRfdW5s
b2NrZWQ7Ci0JCX0KLQkJaWYgKHRfaW5wICE9IGlucCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9UQ09OTik7Ci0JCQll
cnJvciA9IEVOT1RDT05OOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQl9Ci0JaWYgKHN0
Y2IgPT0gTlVMTCkgewotCQlpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0VOVCk7Ci0JCQll
cnJvciA9IEVOT0VOVDsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQl9IGVsc2UgewotCQkJLyog
V2UgbXVzdCBnbyBhaGVhZCBhbmQgc3RhcnQgdGhlIElOSVQgcHJvY2VzcyAqLwotCQkJdWludDMy
X3QgdnJmX2lkOwotCi0JCQlpZiAoKHNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgfHwKLQkJCSAg
ICAoKHNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpICYmIChzbmRsZW4gPT0gMCkpKSB7Ci0JCQkJLyot
Ci0JCQkJICogVXNlciBhc2tzIHRvIGFib3J0IGEgbm9uLWV4aXN0YW50IGFzc29jLAotCQkJCSAq
IG9yIEVPRiBhIG5vbi1leGlzdGFudCBhc3NvYyB3aXRoIG5vIGRhdGEKLQkJCQkgKi8KLQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVOT0VOVCk7Ci0JCQkJZXJyb3IgPSBFTk9FTlQ7Ci0JCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0J
CQl9Ci0JCQkvKiBnZXQgYW4gYXNvYy9zdGNiIHN0cnVjdCAqLwotCQkJdnJmX2lkID0gaW5wLT5k
ZWZfdnJmX2lkOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCWlmIChjcmVhdGVfbG9ja19hcHBsaWVk
ID09IDApIHsKLQkJCQlwYW5pYygiRXJyb3IsIHNob3VsZCBob2xkIGNyZWF0ZSBsb2NrIGFuZCBJ
IGRvbid0PyIpOwotCQkJfQotI2VuZGlmCi0JCQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwg
YWRkciwgJmVycm9yLCAwLCB2cmZfaWQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+
c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQsCi0JCQkgICAgICAgICAgICAgICAgICAgICAg
IGlucC0+c2N0cF9lcC5wb3J0LAotI2lmICEoZGVmaW5lZCggX19QYW5kYV9fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pKQotCQkJICAgICAgICAgICAgICAgICAgICAgICBwKTsKLSNlbHNlCi0J
CQkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgcHJvYyAqKU5VTEwpOwotI2VuZGlmCi0J
CQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJLyogRXJyb3IgaXMgc2V0dXAgZm9yIHVzIGluIHRo
ZSBjYWxsICovCi0JCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKLQkJCQlzdGNiLT5z
Y3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKLQkJCQkvKiBT
ZXQgdGhlIGNvbm5lY3RlZCBmbGFnIHNvIHdlIGNhbiBxdWV1ZSBkYXRhICovCi0JCQkJc29pc2Nv
bm5lY3Rpbmcoc28pOwotCQkJfQotCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCWlmIChjcmVhdGVf
bG9ja19hcHBsaWVkKSB7Ci0JCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCQlj
cmVhdGVfbG9ja19hcHBsaWVkID0gMDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9QUklOVEYoIkh1
aC0zPyBjcmVhdGUgbG9jayBzaG91bGQgaGF2ZSBiZWVuIG9uPz9cbiIpOwotCQkJfQotCQkJLyog
VHVybiBvbiBxdWV1ZSBvbmx5IGZsYWcgdG8gcHJldmVudCBkYXRhIGZyb20gYmVpbmcgc2VudCAq
LwotCQkJcXVldWVfb25seSA9IDE7Ci0JCQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JCQlTQ1RQX1NF
VF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKLQkJCSh2b2lkKVNDVFBfR0VU
VElNRV9USU1FVkFMKCZhc29jLT50aW1lX2VudGVyZWQpOwotCi0JCQkvKiBpbml0aWFsaXplIGF1
dGhlbnRpY2F0aW9uIHBhcmFtcyBmb3IgdGhlIGFzc29jICovCi0JCQlzY3RwX2luaXRpYWxpemVf
YXV0aF9wYXJhbXMoaW5wLCBzdGNiKTsKLQotCQkJaWYgKGNvbnRyb2wpIHsKLQkJCQlpZiAoc2N0
cF9wcm9jZXNzX2Ntc2dzX2Zvcl9pbml0KHN0Y2IsIGNvbnRyb2wsICZlcnJvcikpIHsKLQkJCQkJ
c2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9QQ0JGUkVFX0ZPUkNFLAotCQkJCQkgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfT1VUUFVUICsgU0NUUF9MT0NfNSk7Ci0JCQkJCWhv
bGRfdGNibG9jayA9IDA7Ci0JCQkJCXN0Y2IgPSBOVUxMOwotCQkJCQlnb3RvIG91dF91bmxvY2tl
ZDsKLQkJCQl9Ci0JCQl9Ci0JCQkvKiBvdXQgd2l0aCB0aGUgSU5JVCAqLwotCQkJcXVldWVfb25s
eV9mb3JfaW5pdCA9IDE7Ci0JCQkvKi0KLQkJCSAqIHdlIG1heSB3YW50IHRvIGRpZyBpbiBhZnRl
ciB0aGlzIGNhbGwgYW5kIGFkanVzdCB0aGUgTVRVCi0JCQkgKiB2YWx1ZS4gSXQgZGVmYXVsdGVk
IHRvIDE1MDAgKGNvbnN0YW50KSBidXQgdGhlIHJvCi0JCQkgKiBzdHJ1Y3R1cmUgbWF5IG5vdyBo
YXZlIGFuIHVwZGF0ZSBhbmQgdGh1cyB3ZSBtYXkgbmVlZCB0bwotCQkJICogY2hhbmdlIGl0IEJF
Rk9SRSB3ZSBhcHBlbmQgdGhlIG1lc3NhZ2UuCi0JCQkgKi8KLQkJfQotCX0gZWxzZQotCQlhc29j
ID0gJnN0Y2ItPmFzb2M7Ci0JaWYgKHNyY3YgPT0gTlVMTCkKLQkJc3JjdiA9IChzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvICopJmFzb2MtPmRlZl9zZW5kOwotCWlmIChzcmN2LT5zaW5mb19mbGFncyAm
IFNDVFBfQUREUl9PVkVSKSB7Ci0JCWlmIChhZGRyKQotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0
Y2IsIGFkZHIpOwotCQllbHNlCi0JCQluZXQgPSBOVUxMOwotCQlpZiAoKG5ldCA9PSBOVUxMKSB8
fAotCQkgICAgKChwb3J0ICE9IDApICYmIChwb3J0ICE9IHN0Y2ItPnJwb3J0KSkpIHsKLQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwg
RUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0K
LQl9IGVsc2UgewotCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCW5ldCA9IHN0Y2It
PmFzb2MuYWx0ZXJuYXRlOwotCQl9IGVsc2UgewotCQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uOwotCQl9Ci0JfQotCWF0b21pY19hZGRfaW50KCZzdGNiLT50b3RhbF9zZW5k
cywgMSk7Ci0JLyogS2VlcCB0aGUgc3RjYiBmcm9tIGJlaW5nIGZyZWVkIHVuZGVyIG91ciBmZWV0
ICovCi0JYXRvbWljX2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgMSk7Ci0JZnJlZV9jbnRfYXBwbGll
ZCA9IDE7Ci0KLQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9f
RlJBR01FTlQpKSB7Ci0JCWlmIChzbmRsZW4gPiBhc29jLT5zbWFsbGVzdF9tdHUpIHsKLQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwg
RU1TR1NJWkUpOwotCQkJZXJyb3IgPSBFTVNHU0laRTsKLQkJCWdvdG8gb3V0X3VubG9ja2VkOwot
CQl9Ci0JfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoaW5wLT5yZWN2X2NhbGxi
YWNrKSB7Ci0JCW5vbl9ibG9ja2luZyA9IDE7Ci0JfQotI2VuZGlmCi0JaWYgKFNDVFBfU09fSVNf
TkJJTyhzbykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDAwMDAKLQkgICAgIHx8IChmbGFncyAmIE1TR19OQklPKQotI2VuZGlmCi0JICAgICkgewot
CQlub25fYmxvY2tpbmcgPSAxOwotCX0KLQkvKiB3b3VsZCB3ZSBibG9jaz8gKi8KLQlpZiAobm9u
X2Jsb2NraW5nKSB7Ci0JCXVpbnQzMl90IGFtb3VudDsKLQotCQlpZiAoaG9sZF90Y2Jsb2NrID09
IDApIHsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlob2xkX3RjYmxvY2sgPSAxOwotCQl9
Ci0JCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0g
KHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVB
RChzdGNiKSk7Ci0JCWlmICh1c2VyX21hcmtzX2VvciA9PSAwKSB7Ci0JCQlhbW91bnQgPSBzbmRs
ZW47Ci0JCX0gZWxzZSB7Ci0JCQlhbW91bnQgPSAxOwotCQl9Ci0JCWlmICgoU0NUUF9TQl9MSU1J
VF9TTkQoc28pIDwgIChhbW91bnQgKyBpbnF1ZXVlX2J5dGVzICsgc3RjYi0+YXNvYy5zYl9zZW5k
X3Jlc3YpKSB8fAotCQkgICAgKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSA+PSBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpKSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVXT1VMREJM
T0NLKTsKLQkJCWlmIChzbmRsZW4gPiBTQ1RQX1NCX0xJTUlUX1NORChzbykpCi0JCQkJZXJyb3Ig
PSBFTVNHU0laRTsKLQkJCWVsc2UKLQkJCQllcnJvciA9IEVXT1VMREJMT0NLOwotCQkJZ290byBv
dXRfdW5sb2NrZWQ7Ci0JCX0KLQkJc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YgKz0gc25kbGVuOwot
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCWhvbGRfdGNibG9jayA9IDA7Ci0JfSBlbHNlIHsK
LQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2LCBzbmRsZW4pOwotCX0K
LQlsb2NhbF9zb3Jlc3YgPSBzbmRsZW47Ci0JaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQ09OTlJFU0VUKTsKLQkJZXJyb3IgPSBF
Q09OTlJFU0VUOwotCQlnb3RvIG91dF91bmxvY2tlZDsKLQl9Ci0JaWYgKGNyZWF0ZV9sb2NrX2Fw
cGxpZWQpIHsKLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJY3JlYXRlX2xvY2tf
YXBwbGllZCA9IDA7Ci0JfQotCS8qIElzIHRoZSBzdHJlYW0gbm8uIHZhbGlkPyAqLwotCWlmIChz
cmN2LT5zaW5mb19zdHJlYW0gPj0gYXNvYy0+c3RyZWFtb3V0Y250KSB7Ci0JCS8qIEludmFsaWQg
c3RyZWFtIG51bWJlciAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3Rv
IG91dF91bmxvY2tlZDsKLQl9Ci0JaWYgKChhc29jLT5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0cmVh
bV0uc3RhdGUgIT0gU0NUUF9TVFJFQU1fT1BFTikgJiYKLQkgICAgKGFzb2MtPnN0cm1vdXRbc3Jj
di0+c2luZm9fc3RyZWFtXS5zdGF0ZSAhPSBTQ1RQX1NUUkVBTV9PUEVOSU5HKSkgewotCQkvKgot
CQkgKiBDYW4ndCBxdWV1ZSBhbnkgZGF0YSB3aGlsZSBzdHJlYW0gcmVzZXQgaXMgdW5kZXJ3YXku
Ci0JCSAqLwotCQlpZiAoYXNvYy0+c3RybW91dFtzcmN2LT5zaW5mb19zdHJlYW1dLnN0YXRlID4g
U0NUUF9TVFJFQU1fT1BFTikgewotCQkJZXJyb3IgPSBFQUdBSU47Ci0JCX0gZWxzZSB7Ci0JCQll
cnJvciA9IEVJTlZBTDsKLQkJfQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIGVycm9yKTsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0J
fQotCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkg
fHwKLQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9F
RCkpIHsKLQkJcXVldWVfb25seSA9IDE7Ci0JfQotCS8qIHdlIGFyZSBub3cgZG9uZSB3aXRoIGFs
bCBjb250cm9sICovCi0JaWYgKGNvbnRyb2wpIHsKLQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwot
CQljb250cm9sID0gTlVMTDsKLQl9Ci0JaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1NFTlQpIHx8Ci0JICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBT
Q1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNv
YykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKLQkgICAgKGFzb2MtPnN0YXRl
ICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSkgewotCQlpZiAoc3Jjdi0+c2luZm9fZmxh
Z3MgJiBTQ1RQX0FCT1JUKSB7Ci0JCQk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7
Ci0JCQllcnJvciA9IEVDT05OUkVTRVQ7Ci0JCQlnb3RvIG91dF91bmxvY2tlZDsKLQkJfQotCX0K
LQkvKiBPaywgd2Ugd2lsbCBhdHRlbXB0IGEgbXNnc25kIDo+ICovCi0jaWYgIShkZWZpbmVkKF9f
UGFuZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KSkKLQlpZiAocCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDYwMzAwMAotCQlwLT50ZF9ydS5ydV9tc2dzbmQrKzsKLSNlbGlmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQlwLT50ZF9wcm9jLT5w
X3N0YXRzLT5wX3J1LnJ1X21zZ3NuZCsrOwotI2Vsc2UKLQkJcC0+cF9zdGF0cy0+cF9ydS5ydV9t
c2dzbmQrKzsKLSNlbmRpZgotCX0KLSNlbmRpZgotCS8qIEFyZSB3ZSBhYm9ydGluZz8gKi8KLQlp
ZiAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0FCT1JUKSB7Ci0JCXN0cnVjdCBtYnVmICptbTsK
LQkJaW50IHRvdF9kZW1hbmQsIHRvdF9vdXQgPSAwLCBtYXhfb3V0OwotCi0JCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3NlbmRzX3dpdGhfYWJvcnQpOwotCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2Mp
ID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8Ci0JCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNv
YykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgewotCQkJLyogSXQgaGFzIHRvIGJlIHVw
IGJlZm9yZSB3ZSBhYm9ydCAqLwotCQkJLyogaG93IGJpZyBpcyB0aGUgdXNlciBpbml0aWF0ZWQg
YWJvcnQ/ICovCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0
OwotCQl9Ci0JCWlmIChob2xkX3RjYmxvY2spIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJCWhvbGRfdGNibG9jayA9IDA7Ci0JCX0KLQkJaWYgKHRvcCkgewotCQkJc3RydWN0IG1idWYg
KmNudG0gPSBOVUxMOwotCi0JCQltbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFyYW1oZHIpLCAwLCBNX1dBSVRPSywgMSwgTVRfREFUQSk7Ci0JCQlpZiAoc25k
bGVuICE9IDApIHsKLQkJCQlmb3IgKGNudG0gPSB0b3A7IGNudG07IGNudG0gPSBTQ1RQX0JVRl9O
RVhUKGNudG0pKSB7Ci0JCQkJCXRvdF9vdXQgKz0gU0NUUF9CVUZfTEVOKGNudG0pOwotCQkJCX0K
LQkJCX0KLQkJfSBlbHNlIHsKLQkJCS8qIE11c3QgZml0IGluIGEgTVRVICovCi0JCQl0b3Rfb3V0
ID0gc25kbGVuOwotCQkJdG90X2RlbWFuZCA9ICh0b3Rfb3V0ICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKSk7Ci0JCQlpZiAodG90X2RlbWFuZCA+IFNDVFBfREVGQVVMVF9BRERfTU9SRSkg
ewotCQkJCS8qIFRvIGJpZyAqLwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
bmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVNU0dTSVpFKTsKLQkJCQllcnJvciA9IEVNU0dT
SVpFOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJbW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
dG90X2RlbWFuZCwgMCwgTV9XQUlUT0ssIDEsIE1UX0RBVEEpOwotCQl9Ci0JCWlmIChtbSA9PSBO
VUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9NRU0pOwotCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQlnb3RvIG91dDsK
LQkJfQotCQltYXhfb3V0ID0gYXNvYy0+c21hbGxlc3RfbXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3BhcmFtaGRyKTsKLQkJbWF4X291dCAtPSBzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfbXNnKTsK
LQkJaWYgKHRvdF9vdXQgPiBtYXhfb3V0KSB7Ci0JCQl0b3Rfb3V0ID0gbWF4X291dDsKLQkJfQot
CQlpZiAobW0pIHsKLQkJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQotCQkJLyogbm93IG1v
dmUgZm9yd2FyZCB0aGUgZGF0YSBwb2ludGVyICovCi0JCQlwaCA9IG10b2QobW0sIHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopOwotCQkJcGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1VT
RVJfSU5JVElBVEVEX0FCVCk7Ci0JCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMoKHVpbnQxNl90
KShzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpICsgdG90X291dCkpOwotCQkJcGgrKzsKLQkJ
CVNDVFBfQlVGX0xFTihtbSkgPSB0b3Rfb3V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRy
KTsKLQkJCWlmICh0b3AgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCQkJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMCk7Ci0jZW5kaWYKLQkJCQllcnJvciA9IHVpb21vdmUoKGNh
ZGRyX3QpcGgsIChpbnQpdG90X291dCwgdWlvKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJ
CQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAwKTsKLSNlbmRpZgotCQkJCWlmIChlcnJvcikgewotCQkJ
CQkvKi0KLQkJCQkJICogSGVyZSBpZiB3ZSBjYW4ndCBnZXQgaGlzIGRhdGEgd2UKLQkJCQkJICog
c3RpbGwgYWJvcnQgd2UganVzdCBkb24ndCBnZXQgdG8KLQkJCQkJICogc2VuZCB0aGUgdXNlcnMg
bm90ZSA6LTAKLQkJCQkJICovCi0JCQkJCXNjdHBfbV9mcmVlbShtbSk7Ci0JCQkJCW1tID0gTlVM
TDsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCWlmIChzbmRsZW4gIT0gMCkgewotCQkJCQlTQ1RQ
X0JVRl9ORVhUKG1tKSA9IHRvcDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKGhvbGRfdGNibG9j
ayA9PSAwKSB7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQl9Ci0JCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwotCQlmcmVlX2NudF9hcHBsaWVkID0gMDsKLQkJLyog
cmVsZWFzZSB0aGlzIGxvY2ssIG90aGVyd2lzZSB3ZSBoYW5nIG9uIG91cnNlbHZlcyAqLwotCQlz
Y3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG1tLCBTQ1RQX1NP
X0xPQ0tFRCk7Ci0JCS8qIG5vdyByZWxvY2sgdGhlIHN0Y2Igc28gZXZlcnl0aGluZyBpcyBzYW5l
ICovCi0JCWhvbGRfdGNibG9jayA9IDA7Ci0JCXN0Y2IgPSBOVUxMOwotCQkvKiBJbiB0aGlzIGNh
c2UgdG9wIGlzIGFscmVhZHkgY2hhaW5lZCB0byBtbQotCQkgKiBhdm9pZCBkb3VibGUgZnJlZSwg
c2luY2Ugd2UgZnJlZSBpdCBiZWxvdyBpZgotCQkgKiB0b3AgIT0gTlVMTCBhbmQgZHJpdmVyIHdv
dWxkIGZyZWUgaXQgYWZ0ZXIgc2VuZGluZwotCQkgKiB0aGUgcGFja2V0IG91dAotCQkgKi8KLQkJ
aWYgKHNuZGxlbiAhPSAwKSB7Ci0JCQl0b3AgPSBOVUxMOwotCQl9Ci0JCWdvdG8gb3V0X3VubG9j
a2VkOwotCX0KLQkvKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gd2UgY2FuIHNlbmQgKi8KLQlpbnF1
ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5h
c29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikp
OwotCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzbykgPiBpbnF1ZXVlX2J5dGVzKSB7Ci0JCWlmIChu
b25fYmxvY2tpbmcpIHsKLQkJCS8qIHdlIGFscmVhZHkgY2hlY2tlZCBmb3Igbm9uLWJsb2NraW5n
IGFib3ZlLiAqLwotCQkJbWF4X2xlbiA9IHNuZGxlbjsKLQkJfSBlbHNlIHsKLQkJCW1heF9sZW4g
PSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSBpbnF1ZXVlX2J5dGVzOwotCQl9Ci0JfSBlbHNlIHsK
LQkJbWF4X2xlbiA9IDA7Ci0JfQotCWlmIChob2xkX3RjYmxvY2spIHsKLQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQlob2xkX3RjYmxvY2sgPSAwOwotCX0KLQlpZiAoYXNvYy0+c3RybW91dCA9
PSBOVUxMKSB7Ci0JCS8qIGh1aD8gc29mdHdhcmUgZXJyb3IgKi8KLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOwotCQll
cnJvciA9IEVGQVVMVDsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotCi0JLyogVW5sZXNzIEVf
RU9SIG1vZGUgaXMgb24sIHdlIG11c3QgbWFrZSBhIHNlbmQgRklUIGluIG9uZSBjYWxsLiAqLwot
CWlmICgodXNlcl9tYXJrc19lb3IgPT0gMCkgJiYKLQkgICAgKHNuZGxlbiA+IFNDVFBfU0JfTElN
SVRfU05EKHN0Y2ItPnNjdHBfc29ja2V0KSkpIHsKLQkJLyogSXQgd2lsbCBORVZFUiBmaXQgKi8K
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRU1TR1NJWkUpOwotCQllcnJvciA9IEVNU0dTSVpFOwotCQlnb3RvIG91dF91bmxvY2tl
ZDsKLQl9Ci0JaWYgKCh1aW8gPT0gTlVMTCkgJiYgdXNlcl9tYXJrc19lb3IpIHsKLQkJLyotCi0J
CSAqIFdlIGRvIG5vdCBzdXBwb3J0IGVlb3IgbW9kZSBmb3IKLQkJICogc2VuZGluZyB3aXRoIG1i
dWYgY2hhaW5zIChsaWtlIHNlbmRmaWxlKS4KLQkJICovCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7Ci0JCWVycm9y
ID0gRUlOVkFMOwotCQlnb3RvIG91dF91bmxvY2tlZDsKLQl9Ci0KLQlpZiAodXNlcl9tYXJrc19l
b3IpIHsKLQkJbG9jYWxfYWRkX21vcmUgPSBtaW4oU0NUUF9TQl9MSU1JVF9TTkQoc28pLCBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSk7Ci0JfSBlbHNlIHsKLQkJLyot
Ci0JCSAqIEZvciBub24tZWVvciB0aGUgd2hvbGUgbWVzc2FnZSBtdXN0IGZpdCBpbgotCQkgKiB0
aGUgc29ja2V0IHNlbmQgYnVmZmVyLgotCQkgKi8KLQkJbG9jYWxfYWRkX21vcmUgPSBzbmRsZW47
Ci0JfQotCWxlbiA9IDA7Ci0JaWYgKG5vbl9ibG9ja2luZykgewotCQlnb3RvIHNraXBfcHJlYmxv
Y2s7Ci0JfQotCWlmICgoKG1heF9sZW4gPD0gbG9jYWxfYWRkX21vcmUpICYmCi0JICAgICAoU0NU
UF9TQl9MSU1JVF9TTkQoc28pID49IGxvY2FsX2FkZF9tb3JlKSkgfHwKLQkgICAgKG1heF9sZW4g
PT0gMCkgfHwKLQkgICAgKChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUrc3RjYi0+YXNv
Yy5zdHJlYW1fcXVldWVfY250KSA+PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19v
bl9xdWV1ZSkpKSB7Ci0JCS8qIE5vIHJvb20gcmlnaHQgbm93ICEgKi8KLQkJU09DS0JVRl9MT0NL
KCZzby0+c29fc25kKTsKLQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0
X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRB
X0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKLQkJd2hpbGUgKChTQ1RQX1NCX0xJTUlUX1NORChzbykg
PCAoaW5xdWV1ZV9ieXRlcyArIGxvY2FsX2FkZF9tb3JlKSkgfHwKLQkJICAgICAgICgoc3RjYi0+
YXNvYy5zdHJlYW1fcXVldWVfY250K3N0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSkgPj0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgewotCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsInByZV9ibG9jayBsaW1pdDoldSA8KGlucTolZCArICVkKSB8
fCAoJWQrJWQgPiAlZClcbiIsCi0JCQkgICAgICAgICh1bnNpZ25lZCBpbnQpU0NUUF9TQl9MSU1J
VF9TTkQoc28pLAotCQkJICAgICAgICBpbnF1ZXVlX2J5dGVzLAotCQkJICAgICAgICBsb2NhbF9h
ZGRfbW9yZSwKLQkJCSAgICAgICAgc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LAotCQkJICAg
ICAgICBzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUsCi0JCQkgICAgICAgIFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKLQkJ
CQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMS0EsIGFzb2MsIHNuZGxlbik7
Ci0JCQl9Ci0JCQliZS5lcnJvciA9IDA7Ci0jaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVm
aW5lZChfX1dpbmRvd3NfXykKLQkJCXN0Y2ItPmJsb2NrX2VudHJ5ID0gJmJlOwotI2VuZGlmCi0J
CQllcnJvciA9IHNid2FpdCgmc28tPnNvX3NuZCk7Ci0JCQlzdGNiLT5ibG9ja19lbnRyeSA9IE5V
TEw7Ci0JCQlpZiAoZXJyb3IgfHwgc28tPnNvX2Vycm9yIHx8IGJlLmVycm9yKSB7Ci0JCQkJaWYg
KGVycm9yID09IDApIHsKLQkJCQkJaWYgKHNvLT5zb19lcnJvcikKLQkJCQkJCWVycm9yID0gc28t
PnNvX2Vycm9yOwotCQkJCQlpZiAoYmUuZXJyb3IpIHsKLQkJCQkJCWVycm9yID0gYmUuZXJyb3I7
Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCQkJCWdv
dG8gb3V0X3VubG9ja2VkOwotCQkJfQotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfQkxLX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJc2N0cF9sb2dfYmxv
Y2soU0NUUF9CTE9DS19MT0dfT1VUT0ZfQkxLLAotCQkJCSAgICAgICAgICAgICAgIGFzb2MsIHN0
Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUpOwotCQkJfQotCQkJaWYgKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJU09DS0JVRl9V
TkxPQ0soJnNvLT5zb19zbmQpOwotCQkJCWdvdG8gb3V0X3VubG9ja2VkOwotCQkJfQotCQkJaW5x
dWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+
YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2Ip
KTsKLQkJfQotCQlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykgewot
CQkJbWF4X2xlbiA9IFNDVFBfU0JfTElNSVRfU05EKHNvKSAtICBpbnF1ZXVlX2J5dGVzOwotCQl9
IGVsc2UgewotCQkJbWF4X2xlbiA9IDA7Ci0JCX0KLQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19z
bmQpOwotCX0KLQotc2tpcF9wcmVibG9jazoKLQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBf
U1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JfQotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotCWVycm9yID0gc2Jsb2NrKCZzby0+c29fc25kLCBTQkxPQ0tX
QUlUKGZsYWdzKSk7Ci0jZW5kaWYKLQkvKiBzbmRsZW4gY292ZXJzIGZvciBtYnVmIGNhc2UKLQkg
KiB1aW9fcmVzaWQgY292ZXJzIGZvciB0aGUgbm9uLW1idWYgY2FzZQotCSAqIE5PVEU6IHVpbyB3
aWxsIGJlIG51bGwgd2hlbiB0b3AvbWJ1ZiBpcyBwYXNzZWQKLQkgKi8KLQlpZiAoc25kbGVuID09
IDApIHsKLQkJaWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsKLQkJCWdvdF9hbGxf
b2ZfdGhlX3NlbmQgPSAxOwotCQkJZ290byBkYXRhbGVzc19lb2Y7Ci0JCX0gZWxzZSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQs
IEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlm
ICh0b3AgPT0gTlVMTCkgewotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7
Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cm07Ci0JCXVpbnQzMl90IHNuZG91dDsKLQot
CQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JCWlmICgoYXNvYy0+c3RyZWFtX2xvY2tlZCkg
JiYKLQkJICAgIChhc29jLT5zdHJlYW1fbG9ja2VkX29uICAhPSBzcmN2LT5zaW5mb19zdHJlYW0p
KSB7Ci0JCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKLQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0so
c3RjYik7Ci0KLQkJc3RybSA9ICZzdGNiLT5hc29jLnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFt
XTsKLQkJaWYgKHN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPT0gMCkgewotCQlkb19hX2NvcHlf
aW46Ci0JCQlzcCA9IHNjdHBfY29weV9pdF9pbihzdGNiLCBhc29jLCBzcmN2LCB1aW8sIG5ldCwg
bWF4X2xlbiwgdXNlcl9tYXJrc19lb3IsICZlcnJvcik7Ci0JCQlpZiAoKHNwID09IE5VTEwpIHx8
IChlcnJvcikpIHsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCVNDVFBfVENCX1NFTkRfTE9DSyhz
dGNiKTsKLQkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRlKSB7Ci0JCQkJc3RybS0+bGFzdF9tc2df
aW5jb21wbGV0ZSA9IDA7Ci0JCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0JCQl9IGVsc2Ug
ewotCQkJCS8qIEp1c3QgZ290IGxvY2tlZCB0byB0aGlzIGd1eSBpbgotCQkJCSAqIGNhc2Ugb2Yg
YW4gaW50ZXJydXB0LgotCQkJCSAqLwotCQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxldGUgPSAx
OwotCQkJCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJCWFzb2Mt
PnN0cmVhbV9sb2NrZWQgPSAxOwotCQkJCQlhc29jLT5zdHJlYW1fbG9ja2VkX29uICA9IHNyY3Yt
PnNpbmZvX3N0cmVhbTsKLQkJCQl9Ci0JCQkJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7Ci0JCQl9
Ci0JCQlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBzcC0+bGVuZ3RoKTsKLQkJCWF0b21pY19hZGRf
aW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJCWlmIChzcmN2LT5zaW5mb19mbGFn
cyAmIFNDVFBfVU5PUkRFUkVEKSB7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHNfd2l0
aF91bm9yZCk7Ci0JCQl9Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RybS0+b3V0cXVldWUsIHNw
LCBuZXh0KTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfYWRkX3RvX3N0cmVh
bShzdGNiLCBhc29jLCBzdHJtLCBzcCwgMSk7Ci0JCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNi
KTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQkJCXNwID0gVEFJ
TFFfTEFTVCgmc3RybS0+b3V0cXVldWUsIHNjdHBfc3RyZWFtaGVhZCk7Ci0JCQlTQ1RQX1RDQl9T
RU5EX1VOTE9DSyhzdGNiKTsKLQkJCWlmIChzcCA9PSBOVUxMKSB7Ci0JCQkJLyogPz8/PyBIdWgg
Pz8/IGxhc3QgbXNnIGlzIGdvbmUgKi8KLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJcGFuaWMoIldh
cm5pbmc6IExhc3QgbXNnIG1hcmtlZCBpbmNvbXBsZXRlLCB5ZXQgbm90aGluZyBsZWZ0PyIpOwot
I2Vsc2UKLQkJCQlTQ1RQX1BSSU5URigiV2FybmluZzogTGFzdCBtc2cgbWFya2VkIGluY29tcGxl
dGUsIHlldCBub3RoaW5nIGxlZnQ/XG4iKTsKLQkJCQlzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRl
ID0gMDsKLSNlbmRpZgotCQkJCWdvdG8gZG9fYV9jb3B5X2luOwotCi0JCQl9Ci0JCX0KLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JCXdoaWxlICh1
aW8tPnVpb19yZXNpZCA+IDApIHsKLSNlbHNlCi0JCXdoaWxlICh1aW9fcmVzaWQodWlvKSA+IDAp
IHsKLSNlbmRpZgotI2Vsc2UKLQkJd2hpbGUgKHVpby0+dWlvX3Jlc2lkID4gMCkgewotI2VuZGlm
Ci0JCQkvKiBIb3cgbXVjaCByb29tIGRvIHdlIGhhdmU/ICovCi0JCQlzdHJ1Y3QgbWJ1ZiAqbmV3
X3RhaWwsICptbTsKLQotCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0
X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRB
X0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKLQkJCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzbykgPiBp
bnF1ZXVlX2J5dGVzKQotCQkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSBpbnF1
ZXVlX2J5dGVzOwotCQkJZWxzZQotCQkJCW1heF9sZW4gPSAwOwotCi0JCQlpZiAoKG1heF9sZW4g
PiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKSkgfHwKLQkJCSAgICAo
bWF4X2xlbiAmJiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pIDwgU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2FkZF9tb3JlX3RocmVzaG9sZCkpKSB8fAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRl
ZmluZWQoQVBQTEVfTEVPUEFSRCkKLQkJCSAgICAodWlvLT51aW9fcmVzaWQgJiYgKHVpby0+dWlv
X3Jlc2lkIDw9IChpbnQpbWF4X2xlbikpKSB7Ci0jZWxzZQotCQkJICAgICh1aW9fcmVzaWQodWlv
KSAmJiAodWlvX3Jlc2lkKHVpbykgPD0gKGludCltYXhfbGVuKSkpIHsKLSNlbmRpZgotI2Vsc2UK
LQkJCSAgICAodWlvLT51aW9fcmVzaWQgJiYgKHVpby0+dWlvX3Jlc2lkIDw9IChpbnQpbWF4X2xl
bikpKSB7Ci0jZW5kaWYKLQkJCQlzbmRvdXQgPSAwOwotCQkJCW5ld190YWlsID0gTlVMTDsKLQkJ
CQlpZiAoaG9sZF90Y2Jsb2NrKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJ
aG9sZF90Y2Jsb2NrID0gMDsKLQkJCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJU0NU
UF9TT0NLRVRfVU5MT0NLKHNvLCAwKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0JCQkJICAgIG1tID0gc2N0cF9jb3B5X3Jl
c3VtZSh1aW8sIG1heF9sZW4sIHVzZXJfbWFya3NfZW9yLCAmZXJyb3IsICZzbmRvdXQsICZuZXdf
dGFpbCk7Ci0jZWxzZQotCQkJCSAgICBtbSA9IHNjdHBfY29weV9yZXN1bWUodWlvLCBtYXhfbGVu
LCAmZXJyb3IsICZzbmRvdXQsICZuZXdfdGFpbCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLQkJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAwKTsKLSNlbmRpZgotCQkJCWlmICgobW0g
PT0gTlVMTCkgfHwgZXJyb3IpIHsKLQkJCQkJaWYgKG1tKSB7Ci0JCQkJCQlzY3RwX21fZnJlZW0o
bW0pOwotCQkJCQl9Ci0JCQkJCWdvdG8gb3V0OwotCQkJCX0KLQkJCQkvKiBVcGRhdGUgdGhlIG1i
dWYgYW5kIGNvdW50ICovCi0JCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQkJCWlmIChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewotCQkJCQkv
KiB3ZSBuZWVkIHRvIGdldCBvdXQuCi0JCQkJCSAqIFBlZXIgcHJvYmFibHkgYWJvcnRlZC4KLQkJ
CQkJICovCi0JCQkJCXNjdHBfbV9mcmVlbShtbSk7Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQpIHsKLQkJCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFQ09OTlJFU0VUKTsK
LQkJCQkJCWVycm9yID0gRUNPTk5SRVNFVDsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9TRU5EX1VO
TE9DSyhzdGNiKTsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJfQotCQkJCWlmIChzcC0+dGFpbF9tYnVm
KSB7Ci0JCQkJCS8qIHRhY2sgaXQgdG8gdGhlIGVuZCAqLwotCQkJCQlTQ1RQX0JVRl9ORVhUKHNw
LT50YWlsX21idWYpID0gbW07Ci0JCQkJCXNwLT50YWlsX21idWYgPSBuZXdfdGFpbDsKLQkJCQl9
IGVsc2UgewotCQkJCQkvKiBBIHN0b2xlbiBtYnVmICovCi0JCQkJCXNwLT5kYXRhID0gbW07Ci0J
CQkJCXNwLT50YWlsX21idWYgPSBuZXdfdGFpbDsKLQkJCQl9Ci0JCQkJc2N0cF9zbmRfc2JfYWxs
b2Moc3RjYiwgc25kb3V0KTsKLQkJCQlhdG9taWNfYWRkX2ludCgmc3AtPmxlbmd0aCwgc25kb3V0
KTsKLQkJCQlsZW4gKz0gc25kb3V0OwotCQkJCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBf
U0FDS19JTU1FRElBVEVMWSkgewotCQkJCQlzcC0+c2luZm9fZmxhZ3MgfD0gU0NUUF9TQUNLX0lN
TUVESUFURUxZOwotCQkJCX0KLQotCQkJCS8qIERpZCB3ZSByZWFjaCBFT1I/ICovCi0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJCWlmICgodWlv
LT51aW9fcmVzaWQgPT0gMCkgJiYKLSNlbHNlCi0JCQkJaWYgKCh1aW9fcmVzaWQodWlvKSA9PSAw
KSAmJgotI2VuZGlmCi0jZWxzZQotCQkJCWlmICgodWlvLT51aW9fcmVzaWQgPT0gMCkgJiYKLSNl
bmRpZgotCQkJCSAgICAoKHVzZXJfbWFya3NfZW9yID09IDApIHx8Ci0JCQkJICAgICAoc3Jjdi0+
c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgfHwKLQkJCQkgICAgICh1c2VyX21hcmtzX2VvciAmJiAo
c3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0VPUikpKSkgewotCQkJCQlzcC0+bXNnX2lzX2NvbXBs
ZXRlID0gMTsKLQkJCQl9IGVsc2UgewotCQkJCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMDsKLQkJ
CQl9Ci0JCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJaWYgKHVpby0+dWlvX3Jl
c2lkID09IDApIHsKLSNlbHNlCi0JCQlpZiAodWlvX3Jlc2lkKHVpbykgPT0gMCkgewotI2VuZGlm
Ci0jZWxzZQotCQkJaWYgKHVpby0+dWlvX3Jlc2lkID09IDApIHsKLSNlbmRpZgotCQkJCS8qIGdv
dCBpdCBhbGw/ICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBQUi1TQ1RQPyAqLwotCQkJ
aWYgKChhc29jLT5wcnNjdHBfc3VwcG9ydGVkKSAmJiAoYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVt
b3ZlYWJsZSA+IDApKSB7Ci0JCQkJLyogVGhpcyBpcyB1Z2x5IGJ1dCB3ZSBtdXN0IGFzc3VyZSBs
b2NraW5nIG9yZGVyICovCi0JCQkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCQkJCWhvbGRfdGNibG9jayA9IDE7Ci0JCQkJfQotCQkJCXNjdHBf
cHJ1bmVfcHJzY3RwKHN0Y2IsIGFzb2MsIHNyY3YsIHNuZGxlbik7Ci0JCQkJaW5xdWV1ZV9ieXRl
cyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVu
a3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpKTsKLQkJCQlp
ZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1ZV9ieXRlcykKLQkJCQkJbWF4X2xlbiA9
IFNDVFBfU0JfTElNSVRfU05EKHNvKSAtIGlucXVldWVfYnl0ZXM7Ci0JCQkJZWxzZQotCQkJCQlt
YXhfbGVuID0gMDsKLQkJCQlpZiAobWF4X2xlbiA+IDApIHsKLQkJCQkJY29udGludWU7Ci0JCQkJ
fQotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQlob2xkX3RjYmxvY2sgPSAwOwotCQkJ
fQotCQkJLyogd2FpdCBmb3Igc3BhY2Ugbm93ICovCi0JCQlpZiAobm9uX2Jsb2NraW5nKSB7Ci0J
CQkJLyogTm9uLWJsb2NraW5nIGlvIGluIHBsYWNlIG91dCAqLwotCQkJCWdvdG8gc2tpcF9vdXRf
ZW9mOwotCQkJfQotCQkJLyogV2hhdCBhYm91dCB0aGUgSU5JVCwgc2VuZCBpdCBtYXliZSAqLwot
CQkJaWYgKHF1ZXVlX29ubHlfZm9yX2luaXQpIHsKLQkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDAp
IHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJ
CQl9Ci0JCQkJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09Q
RU4pIHsKLQkJCQkJLyogYSBjb2xsaXNpb24gdG9vayB1cyBmb3J3YXJkPyAqLwotCQkJCQlxdWV1
ZV9vbmx5ID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBz
dGNiLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RB
VEVfQ09PS0lFX1dBSVQpOwotCQkJCQlxdWV1ZV9vbmx5ID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlp
ZiAoKG5ldC0+ZmxpZ2h0X3NpemUgPiBuZXQtPmN3bmQpICYmCi0JCQkgICAgKGFzb2MtPnNjdHBf
Y210X29uX29mZiA9PSAwKSkgewotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRfY3duZF9h
dm9pZCk7Ci0JCQkJcXVldWVfb25seSA9IDE7Ci0JCQl9IGVsc2UgaWYgKGFzb2MtPmlmcF9oYWRf
ZW5vYnVmKSB7Ci0JCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaWZub21lbXF1ZXVlZCk7Ci0JCQkJ
aWYgKG5ldC0+ZmxpZ2h0X3NpemUgPiAoMiAqIG5ldC0+bXR1KSkgewotCQkJCQlxdWV1ZV9vbmx5
ID0gMTsKLQkJCQl9Ci0JCQkJYXNvYy0+aWZwX2hhZF9lbm9idWYgPSAwOwotCQkJfQotCQkJdW5f
c2VudCA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgLSBzdGNiLT5hc29jLnRv
dGFsX2ZsaWdodDsKLQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZM
QUdTX05PREVMQVkpKSAmJgotCQkJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApICYm
Ci0JCQkgICAgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA8IFNDVFBfTUFYX0RBVEFfQlVO
RExJTkcpICYmCi0JCQkgICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210
dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkpIHsKLQotCQkJCS8qLQotCQkJCSAqIE9rLCBOYWdsZSBp
cyBzZXQgb24gYW5kIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZy4KLQkJCQkgKiBEb24ndCBzZW5k
IGFueXRoaW5nIGFuZCBsZXQgU0FDS3MgZHJpdmUgb3V0IHRoZQotCQkJCSAqIGRhdGEgdW5sZXNz
IHdlIGhhdmUgYSAiZnVsbCIgc2VnbWVudCB0byBzZW5kLgotCQkJCSAqLwotCQkJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX05BR0xFX0xPR0dJTkdfRU5B
QkxFKSB7Ci0JCQkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfQVBQTElF
RCk7Ci0JCQkJfQotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX25hZ2xlcXVldWVkKTsKLQkJCQlu
YWdsZV9hcHBsaWVzID0gMTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJ
aWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkKLQkJ
CQkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfU0tJUFBFRCk7Ci0JCQkJ
fQotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX25hZ2xlc2VudCk7Ci0JCQkJbmFnbGVfYXBwbGll
cyA9IDA7Ci0JCQl9Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKLQotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBf
Q1dORExPR19QUkVTRU5ELCBxdWV1ZV9vbmx5X2Zvcl9pbml0LCBxdWV1ZV9vbmx5LAotCQkJCQkg
ICAgICAgbmFnbGVfYXBwbGllcywgdW5fc2VudCk7Ci0JCQkJc2N0cF9taXNjX2ludHMoU0NUUF9D
V05ETE9HX1BSRVNFTkQsIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsCi0JCQkJ
CSAgICAgICBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwKLQkJCQkJICAgICAgIHN0Y2ItPmFzb2Mu
Y2h1bmtzX29uX291dF9xdWV1ZSwgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQpOwotCQkJ
fQotCQkJaWYgKHF1ZXVlX29ubHlfZm9yX2luaXQpCi0JCQkJcXVldWVfb25seV9mb3JfaW5pdCA9
IDA7Ci0JCQlpZiAoKHF1ZXVlX29ubHkgPT0gMCkgJiYgKG5hZ2xlX2FwcGxpZXMgPT0gMCkpIHsK
LQkJCQkvKi0KLQkJCQkgKiBuZWVkIHRvIHN0YXJ0IGNodW5rIG91dHB1dAotCQkJCSAqIGJlZm9y
ZSBibG9ja2luZy4uIG5vdGUgdGhhdCBpZgotCQkJCSAqIGEgbG9jayBpcyBhbHJlYWR5IGFwcGxp
ZWQsIHRoZW4KLQkJCQkgKiB0aGUgaW5wdXQgdmlhIHRoZSBuZXQgaXMgaGFwcGVuaW5nCi0JCQkJ
ICogYW5kIEkgZG9uJ3QgbmVlZCB0byBzdGFydCBvdXRwdXQgOi1ECi0JCQkJICovCi0JCQkJaWYg
KGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQkJCWlmIChTQ1RQX1RDQl9UUllMT0NLKHN0Y2IpKSB7
Ci0JCQkJCQlob2xkX3RjYmxvY2sgPSAxOwotCQkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLAot
CQkJCQkJCQkgIHN0Y2IsCi0JCQkJCQkJCSAgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NU
UF9TT19MT0NLRUQpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLAotCQkJCQkJCSAgc3RjYiwKLQkJCQkJCQkgIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NF
TkQsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQl9Ci0JCQkJaWYgKGhvbGRfdGNibG9jayA9PSAxKSB7
Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJaG9sZF90Y2Jsb2NrID0gMDsKLQkJ
CQl9Ci0JCQl9Ci0JCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOwotCQkJLyotCi0JCQkgKiBU
aGlzIGlzIGEgYml0IHN0cmFuZ2UsIGJ1dCBJIHRoaW5rIGl0IHdpbGwKLQkJCSAqIHdvcmsuIFRo
ZSB0b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSBpcyBsb2NrZWQgYW5kCi0JCQkgKiBwcm90ZWN0ZWQg
YnkgdGhlIFRDQl9MT0NLLCB3aGljaCB3ZSBqdXN0IHJlbGVhc2VkLgotCQkJICogVGhlcmUgaXMg
YSByYWNlIHRoYXQgY2FuIG9jY3VyIGJldHdlZW4gcmVsZWFzaW5nIGl0Ci0JCQkgKiBhYm92ZSwg
YW5kIG1lIGdldHRpbmcgdGhlIHNvY2tldCBsb2NrLCB3aGVyZSBzYWNrcwotCQkJICogY29tZSBp
biBidXQgd2UgaGF2ZSBub3QgcHV0IHRoZSBTQl9XQUlUIG9uIHRoZQotCQkJICogc29fc25kIGJ1
ZmZlciB0byBnZXQgdGhlIHdha2V1cC4gQWZ0ZXIgdGhlIExPQ0sKLQkJCSAqIGlzIGFwcGxpZWQg
dGhlIHNhY2tfcHJvY2Vzc2luZyB3aWxsIGFsc28gbmVlZCB0bwotCQkJICogTE9DSyB0aGUgc28t
PnNvX3NuZCB0byBkbyB0aGUgYWN0dWFsIHNvd3dha2V1cCgpLiBTbwotCQkJICogb25jZSB3ZSBo
YXZlIHRoZSBzb2NrZXQgYnVmZmVyIGxvY2sgaWYgd2UgcmVjaGVjayB0aGUKLQkJCSAqIHNpemUg
d2UgS05PVyB3ZSB3aWxsIGdldCB0byBzbGVlcCBzYWZlbHkgd2l0aCB0aGUKLQkJCSAqIHdha2V1
cCBmbGFnIGluIHBsYWNlLgotCQkJICovCi0JCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50
b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUg
KiBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOwotCQkJaWYgKFNDVFBfU0JfTElNSVRf
U05EKHNvKSA8PSAoaW5xdWV1ZV9ieXRlcyArCi0JCQkJCQkgICAgICBtaW4oU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCksIFNDVFBfU0JfTElNSVRfU05EKHNvKSkpKSB7
Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxL
X0xPR0dJTkdfRU5BQkxFKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKQotCQkJCQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JM
SywKLQkJCQkJCSAgICAgICBhc29jLCB1aW8tPnVpb19yZXNpZCk7Ci0jZWxzZQotCQkJCQlzY3Rw
X2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19JTlRPX0JMSywKLQkJCQkJCSAgICAgICBhc29jLCB1
aW9fcmVzaWQodWlvKSk7Ci0jZW5kaWYKLSNlbHNlCi0JCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBf
QkxPQ0tfTE9HX0lOVE9fQkxLLAotCQkJCQkJICAgICAgIGFzb2MsIChzaXplX3QpdWlvLT51aW9f
cmVzaWQpOwotI2VuZGlmCi0JCQkJfQotCQkJCWJlLmVycm9yID0gMDsKLSNpZiAhZGVmaW5lZChf
X1BhbmRhX18pICYmICFkZWZpbmVkKF9fV2luZG93c19fKQotCQkJCXN0Y2ItPmJsb2NrX2VudHJ5
ID0gJmJlOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJc2J1bmxvY2soJnNv
LT5zb19zbmQsIDEpOwotI2VuZGlmCi0JCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19zbmQpOwot
CQkJCXN0Y2ItPmJsb2NrX2VudHJ5ID0gTlVMTDsKLQotCQkJCWlmIChlcnJvciB8fCBzby0+c29f
ZXJyb3IgfHwgYmUuZXJyb3IpIHsKLQkJCQkJaWYgKGVycm9yID09IDApIHsKLQkJCQkJCWlmIChz
by0+c29fZXJyb3IpCi0JCQkJCQkJZXJyb3IgPSBzby0+c29fZXJyb3I7Ci0JCQkJCQlpZiAoYmUu
ZXJyb3IpIHsKLQkJCQkJCQllcnJvciA9IGJlLmVycm9yOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJ
CVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKLQkJCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0J
CQkJfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJZXJyb3IgPSBzYmxvY2soJnNvLT5z
b19zbmQsIFNCTE9DS1dBSVQoZmxhZ3MpKTsKLSNlbmRpZgotCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgewotCQkJ
CQlzY3RwX2xvZ19ibG9jayhTQ1RQX0JMT0NLX0xPR19PVVRPRl9CTEssCi0JCQkJCQkgICAgICAg
YXNvYywgc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSk7Ci0JCQkJfQotCQkJfQot
CQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUg
JiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJZ290byBvdXRfdW5sb2NrZWQ7
Ci0JCQl9Ci0JCX0KLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCVNDVFBfVENCX1NF
TkRfVU5MT0NLKHN0Y2IpOwotCQkJZ290byBvdXRfdW5sb2NrZWQ7Ci0JCX0KLQkJaWYgKHNwKSB7
Ci0JCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSA9PSAwKSB7Ci0JCQkJc3RybS0+bGFzdF9tc2df
aW5jb21wbGV0ZSA9IDE7Ci0JCQkJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDAp
IHsKLQkJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDE7Ci0JCQkJCWFzb2MtPnN0cmVhbV9sb2Nr
ZWRfb24gID0gc3Jjdi0+c2luZm9fc3RyZWFtOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJc3At
PnNlbmRlcl9hbGxfZG9uZSA9IDE7Ci0JCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7
Ci0JCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQ
X1BSSU5URigiSHVoIG5vIHNwIFRTTkg/XG4iKTsKLQkJCXN0cm0tPmxhc3RfbXNnX2luY29tcGxl
dGUgPSAwOwotCQkJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7Ci0JCX0KLQkJU0NUUF9UQ0JfU0VO
RF9VTkxPQ0soc3RjYik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBM
RV9MRU9QQVJEKQotCQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgewotI2Vsc2UKLQkJaWYgKHVp
b19yZXNpZCh1aW8pID09IDApIHsKLSNlbmRpZgotI2Vsc2UKLQkJaWYgKHVpby0+dWlvX3Jlc2lk
ID09IDApIHsKLSNlbmRpZgotCQkJZ290X2FsbF9vZl90aGVfc2VuZCA9IDE7Ci0JCX0KLQl9IGVs
c2UgewotCQkvKiBXZSBzZW5kIGluIGEgMCwgc2luY2Ugd2UgZG8gTk9UIGhhdmUgYW55IGxvY2tz
ICovCi0JCWVycm9yID0gc2N0cF9tc2dfYXBwZW5kKHN0Y2IsIG5ldCwgdG9wLCBzcmN2LCAwKTsK
LQkJdG9wID0gTlVMTDsKLQkJaWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpIHsKLQkJ
CS8qCi0JCQkgKiBUaGlzIHNob3VsZCBvbmx5IGhhcHBlbiBmb3IgUGFuZGEgZm9yIHRoZSBtYnVm
Ci0JCQkgKiBzZW5kIGNhc2UsIHdoaWNoIGRvZXMgTk9UIHlldCBzdXBwb3J0IEVFT1IgbW9kZS4K
LQkJCSAqIFRodXMsIHdlIGNhbiBqdXN0IHNldCB0aGlzIGZsYWcgdG8gZG8gdGhlIHByb3Blcgot
CQkJICogRU9GIGhhbmRsaW5nLgotCQkJICovCi0JCQlnb3RfYWxsX29mX3RoZV9zZW5kID0gMTsK
LQkJfQotCX0KLQlpZiAoZXJyb3IpIHsKLQkJZ290byBvdXQ7Ci0JfQotZGF0YWxlc3NfZW9mOgot
CS8qIEVPRiB0aGluZyA/ICovCi0JaWYgKChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSAm
JgotCSAgICAoZ290X2FsbF9vZl90aGVfc2VuZCA9PSAxKSkgewotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kc193aXRoX2VvZik7Ci0JCWVycm9yID0gMDsKLQkJaWYgKGhvbGRfdGNibG9jayA9
PSAwKSB7Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJ
fQotCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCSAgICBUQUlMUV9F
TVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkJICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2Rh
dGEoc3RjYiwgU0NUUF9TT19MT0NLRUQpID09IDApIHsKLQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0
aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJ
CWdvdG8gYWJvcnRfYW55d2F5OwotCQkJfQotCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQg
dG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KLQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykg
IT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSAmJgotCQkJICAgIChTQ1RQX0dFVF9TVEFURShh
c29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSAmJgotCQkJICAgIChTQ1RQX0dF
VF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgewotCQkJCXN0
cnVjdCBzY3RwX25ldHMgKm5ldHA7Ci0KLQkJCQkvKiBvbmx5IHNlbmQgU0hVVERPV04gdGhlIGZp
cnN0IHRpbWUgdGhyb3VnaCAqLwotCQkJCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX09QRU4pIHsKLQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0
YWIpOwotCQkJCX0KLQkJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dO
X1NFTlQpOwotCQkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9X
Tl9QRU5ESU5HKTsKLQkJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJ
CQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MuYWx0
ZXJuYXRlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb247Ci0JCQkJfQotCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsKLQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9l
cCwgc3RjYiwKLQkJCQkgICAgICAgICAgICAgICAgIG5ldHApOwotCQkJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0J
CQkJICAgICAgICAgICAgICAgICBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKLQkJCX0KLQkJ
fSBlbHNlIHsKLQkJCS8qLQotCQkJICogd2Ugc3RpbGwgZ290IChvciBqdXN0IGdvdCkgZGF0YSB0
byBzZW5kLCBzbyBzZXQKLQkJCSAqIFNIVVRET1dOX1BFTkRJTkcKLQkJCSAqLwotCQkJLyotCi0J
CQkgKiBYWFggc29ja2V0cyBkcmFmdCBzYXlzIHRoYXQgU0NUUF9FT0Ygc2hvdWxkIGJlCi0JCQkg
KiBzZW50IHdpdGggbm8gZGF0YS4gIGN1cnJlbnRseSwgd2Ugd2lsbCBhbGxvdyB1c2VyCi0JCQkg
KiBkYXRhIHRvIGJlIHNlbnQgZmlyc3QgYW5kIG1vdmUgdG8KLQkJCSAqIFNIVVRET1dOLVBFTkRJ
TkcKLQkJCSAqLwotCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQpICYmCi0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpICYmCi0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9
IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7Ci0JCQkJaWYgKGhvbGRfdGNibG9jayA9
PSAwKSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWhvbGRfdGNibG9jayA9IDE7
Ci0JCQkJfQotCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNn
c19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJCQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NU
QVRFX1BBUlRJQUxfTVNHX0xFRlQ7Ci0JCQkJfQotCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RB
VEVfU0hVVERPV05fUEVORElORzsKLQkJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVl
dWUpICYmCi0JCQkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgotCQkJCSAg
ICAoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpKSB7Ci0JCQkJCXN0
cnVjdCBtYnVmICpvcF9lcnI7Ci0JCQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0K
LQkJCQlhYm9ydF9hbnl3YXk6Ci0JCQkJCWlmIChmcmVlX2NudF9hcHBsaWVkKSB7Ci0JCQkJCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCQkJCWZyZWVfY250X2Fw
cGxpZWQgPSAwOwotCQkJCQl9Ci0JCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCi0JCQkJ
CSAgICAgICAgICIlczolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwot
CQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9k
aWFnX2luZm9fY29kZSksCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsK
LQkJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwotCQkJ
CQkvKiBub3cgcmVsb2NrIHRoZSBzdGNiIHNvIGV2ZXJ5dGhpbmcgaXMgc2FuZSAqLwotCQkJCQlo
b2xkX3RjYmxvY2sgPSAwOwotCQkJCQlzdGNiID0gTlVMTDsKLQkJCQkJZ290byBvdXQ7Ci0JCQkJ
fQotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJICAgICAgICAgICAgICAgICBhc29jLT5wcmltYXJ5X2Rl
c3RpbmF0aW9uKTsKLQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9E
RUxBWSk7Ci0JCQl9Ci0JCX0KLQl9Ci1za2lwX291dF9lb2Y6Ci0JaWYgKCFUQUlMUV9FTVBUWSgm
c3RjYi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUpKSB7Ci0JCXNvbWVfb25fY29udHJvbCA9IDE7
Ci0JfQotCWlmIChxdWV1ZV9vbmx5X2Zvcl9pbml0KSB7Ci0JCWlmIChob2xkX3RjYmxvY2sgPT0g
MCkgewotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWhvbGRfdGNibG9jayA9IDE7Ci0JCX0K
LQkJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsK
LQkJCS8qIGEgY29sbGlzaW9uIHRvb2sgdXMgZm9yd2FyZD8gKi8KLQkJCXF1ZXVlX29ubHkgPSAw
OwotCQl9IGVsc2UgewotCQkJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19M
T0NLRUQpOwotCQkJU0NUUF9TRVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lF
X1dBSVQpOwotCQkJcXVldWVfb25seSA9IDE7Ci0JCX0KLQl9Ci0JaWYgKChuZXQtPmZsaWdodF9z
aXplID4gbmV0LT5jd25kKSAmJgotCSAgICAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0g
MCkpIHsKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZF9jd25kX2F2b2lkKTsKLQkJcXVldWVf
b25seSA9IDE7Ci0JfSBlbHNlIGlmIChhc29jLT5pZnBfaGFkX2Vub2J1ZikgewotCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19pZm5vbWVtcXVldWVkKTsKLQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgPiAo
MiAqIG5ldC0+bXR1KSkgewotCQkJcXVldWVfb25seSA9IDE7Ci0JCX0KLQkJYXNvYy0+aWZwX2hh
ZF9lbm9idWYgPSAwOwotCX0KLQl1bl9zZW50ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OwotCWlmICgoc2N0cF9pc19mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAmJgotCSAgICAoc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPiAwKSAmJgotCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250IDwg
U0NUUF9NQVhfREFUQV9CVU5ETElORykgJiYKLQkgICAgKHVuX3NlbnQgPCAoaW50KShzdGNiLT5h
c29jLnNtYWxsZXN0X210dSAtIFNDVFBfTUlOX09WRVJIRUFEKSkpIHsKLQkJLyotCi0JCSAqIE9r
LCBOYWdsZSBpcyBzZXQgb24gYW5kIHdlIGhhdmUgZGF0YSBvdXRzdGFuZGluZy4KLQkJICogRG9u
J3Qgc2VuZCBhbnl0aGluZyBhbmQgbGV0IFNBQ0tzIGRyaXZlIG91dCB0aGUKLQkJICogZGF0YSB1
bmxlc3Mgd2VuIGhhdmUgYSAiZnVsbCIgc2VnbWVudCB0byBzZW5kLgotCQkgKi8KLQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19F
TkFCTEUpIHsKLQkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVfQVBQTElF
RCk7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVxdWV1ZWQpOwotCQluYWdsZV9h
cHBsaWVzID0gMTsKLQl9IGVsc2UgewotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9OQUdMRV9MT0dHSU5HX0VOQUJMRSkgewotCQkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKSkKLQkJCQlzY3RwX2xvZ19u
YWdsZV9ldmVudChzdGNiLCBTQ1RQX05BR0xFX1NLSVBQRUQpOwotCQl9Ci0JCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX25hZ2xlc2VudCk7Ci0JCW5hZ2xlX2FwcGxpZXMgPSAwOwotCX0KLQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFC
TEUpIHsKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQsIHF1ZXVlX29ubHlf
Zm9yX2luaXQsIHF1ZXVlX29ubHksCi0JCSAgICAgICAgICAgICAgIG5hZ2xlX2FwcGxpZXMsIHVu
X3NlbnQpOwotCQlzY3RwX21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VORCwgc3RjYi0+YXNv
Yy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwKLQkJICAgICAgICAgICAgICAgc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQsCi0JCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9x
dWV1ZSwgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQpOwotCX0KLQlpZiAoKHF1ZXVlX29u
bHkgPT0gMCkgJiYgKG5hZ2xlX2FwcGxpZXMgPT0gMCkgJiYgKHN0Y2ItPmFzb2MucGVlcnNfcndu
ZCAmJiB1bl9zZW50KSkgewotCQkvKiB3ZSBjYW4gYXR0ZW1wdCB0byBzZW5kIHRvby4gKi8KLQkJ
aWYgKGhvbGRfdGNibG9jayA9PSAwKSB7Ci0JCQkvKiBJZiB0aGVyZSBpcyBhY3Rpdml0eSByZWN2
J2luZyBzYWNrcyBubyBuZWVkIHRvIHNlbmQgKi8KLQkJCWlmIChTQ1RQX1RDQl9UUllMT0NLKHN0
Y2IpKSB7Ci0JCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9N
X1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJaG9sZF90Y2Jsb2NrID0gMTsKLQkJCX0K
LQkJfSBlbHNlIHsKLQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRf
RlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOwotCQl9Ci0JfSBlbHNlIGlmICgocXVldWVf
b25seSA9PSAwKSAmJgotCSAgICAgICAgICAgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAm
JgotCSAgICAgICAgICAgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID09IDApKSB7Ci0JCS8qIFdl
IGdldCB0byBoYXZlIGEgcHJvYmUgb3V0c3RhbmRpbmcgKi8KLQkJaWYgKGhvbGRfdGNibG9jayA9
PSAwKSB7Ci0JCQlob2xkX3RjYmxvY2sgPSAxOwotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJ
fQotCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NF
TkQsIFNDVFBfU09fTE9DS0VEKTsKLQl9IGVsc2UgaWYgKHNvbWVfb25fY29udHJvbCkgewotCQlp
bnQgbnVtX291dCwgcmVhc29uLCBmcmFnX3BvaW50OwotCi0JCS8qIEhlcmUgd2UgZG8gY29udHJv
bCBvbmx5ICovCi0JCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgewotCQkJaG9sZF90Y2Jsb2NrID0g
MTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCX0KLQkJZnJhZ19wb2ludCA9IHNjdHBfZ2V0
X2ZyYWdfcG9pbnQoc3RjYiwgJnN0Y2ItPmFzb2MpOwotCQkodm9pZClzY3RwX21lZF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCAmc3RjYi0+YXNvYywgJm51bV9vdXQsCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmcmVhc29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2lu
dCwgU0NUUF9TT19MT0NLRUQpOwotCX0KLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVT
UiBTZW5kIGNvbXBsZXRlIHFvOiVkIHBydzolZCB1bnNlbnQ6JWQgdGY6JWQgY29vcTolZCB0b3Fz
OiVkIGVycjolZFxuIiwKLQkgICAgICAgIHF1ZXVlX29ubHksIHN0Y2ItPmFzb2MucGVlcnNfcndu
ZCwgdW5fc2VudCwKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsIHN0Y2ItPmFzb2MuY2h1bmtz
X29uX291dF9xdWV1ZSwKLQkgICAgICAgIHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3Np
emUsIGVycm9yKTsKLQotb3V0OgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXNidW5sb2NrKCZz
by0+c29fc25kLCAxKTsKLSNlbmRpZgotb3V0X3VubG9ja2VkOgotCi0JaWYgKGxvY2FsX3NvcmVz
diAmJiBzdGNiKSB7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Muc2Jfc2VuZF9y
ZXN2LCBzbmRsZW4pOwotCX0KLQlpZiAoY3JlYXRlX2xvY2tfYXBwbGllZCkgewotCQlTQ1RQX0FT
T0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCX0KLQlpZiAoKHN0Y2IpICYmIGhvbGRfdGNibG9jaykg
ewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JfQotCWlmIChzdGNiICYmIGZyZWVfY250X2Fw
cGxpZWQpIHsKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7Ci0JfQot
I2lmZGVmIElOVkFSSUFOVFMKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCWlmIChzdGNiKSB7
Ci0JCWlmIChtdHhfb3duZWQoJnN0Y2ItPnRjYl9tdHgpKSB7Ci0JCQlwYW5pYygiTGVhdmluZyB3
aXRoIHRjYiBtdHggb3duZWQ/Iik7Ci0JCX0KLQkJaWYgKG10eF9vd25lZCgmc3RjYi0+dGNiX3Nl
bmRfbXR4KSkgewotCQkJcGFuaWMoIkxlYXZpbmcgd2l0aCB0Y2Igc2VuZCBtdHggb3duZWQ/Iik7
Ci0JCX0KLQl9Ci0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIF9fUGFuZGFfXwotCS8qCi0JICogSGFu
ZGxlIHRoZSBFQUdBSU4vRU5PTUVNIGNhc2VzIHRvIHJlYXR0YWNoIHRoZSBwYWsgaGVhZGVyCi0J
ICogdG8gcGFydGljbGUgd2hlbiBwYWsgaXMgcGFzc2VkIGluLCBzbyB0aGF0IGNhbGxlcgotCSAq
IGNhbiB0cnkgYWdhaW4gd2l0aCB0aGlzIHBhawotCSAqCi0JICogTk9URTogRm9yIG90aGVyIGNh
c2VzLCBpbmNsdWRpbmcgc3VjY2VzcyBjYXNlLAotCSAqIHdlIHNpbXBseSB3YW50IHRvIHJldHVy
biB0aGUgaGVhZGVyIGJhY2sgdG8gZnJlZQotCSAqIHBvb2wKLQkgKi8KLQlpZiAodG9wKSB7Ci0J
CWlmICgoZXJyb3IgPT0gRUFHQUlOKSB8fCAoZXJyb3IgPT0gRU5PTUVNKSkgewotCQkJU0NUUF9B
VFRBQ0hfQ0hBSU4oaV9wYWssIHRvcCwgc25kbGVuKTsKLQkJCXRvcCA9IE5VTEw7Ci0JCX0gZWxz
ZSB7Ci0JCQkodm9pZClTQ1RQX1JFTEVBU0VfSEVBREVSKGlfcGFrKTsKLQkJfQotCX0gZWxzZSB7
Ci0JCS8qIFRoaXMgaXMgdG8gaGFuZGxlIGNhc2VzIHdoZW4gdG9wIGhhcwotCQkgKiBiZWVuIHJl
c2V0IHRvIE5VTEwgYnV0IHBhayBtaWdodCBub3QKLQkJICogYmUgZnJlZWQKLQkJICovCi0JCWlm
IChpX3BhaykgewotCQkJKHZvaWQpU0NUUF9SRUxFQVNFX0hFQURFUihpX3Bhayk7Ci0JCX0KLQl9
Ci0jZW5kaWYKLQlpZiAodG9wKSB7Ci0JCXNjdHBfbV9mcmVlbSh0b3ApOwotCX0KLQlpZiAoY29u
dHJvbCkgewotCQlzY3RwX21fZnJlZW0oY29udHJvbCk7Ci0JfQotCXJldHVybiAoZXJyb3IpOwot
fQotCi0KLS8qCi0gKiBnZW5lcmF0ZSBhbiBBVVRIZW50aWNhdGlvbiBjaHVuaywgaWYgcmVxdWly
ZWQKLSAqLwotc3RydWN0IG1idWYgKgotc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAq
bSwgc3RydWN0IG1idWYgKiptX2VuZCwKLSAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0
aF9yZXQsIHVpbnQzMl90ICogb2Zmc2V0LAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDhfdCBjaHVuaykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9hdXRoOwotCXN0cnVjdCBzY3RwX2F1dGhf
Y2h1bmsgKmF1dGg7Ci0JaW50IGNodW5rX2xlbjsKLQlzdHJ1Y3QgbWJ1ZiAqY247Ci0KLQlpZiAo
KG1fZW5kID09IE5VTEwpIHx8IChhdXRoX3JldCA9PSBOVUxMKSB8fCAob2Zmc2V0ID09IE5VTEwp
IHx8Ci0JICAgIChzdGNiID09IE5VTEwpKQotCQlyZXR1cm4gKG0pOwotCi0JaWYgKHN0Y2ItPmFz
b2MuYXV0aF9zdXBwb3J0ZWQgPT0gMCkgewotCQlyZXR1cm4gKG0pOwotCX0KLQkvKiBkb2VzIHRo
ZSByZXF1ZXN0ZWQgY2h1bmsgcmVxdWlyZSBhdXRoPyAqLwotCWlmICghc2N0cF9hdXRoX2lzX3Jl
cXVpcmVkX2NodW5rKGNodW5rLCBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSB7Ci0JCXJl
dHVybiAobSk7Ci0JfQotCW1fYXV0aCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2YoKmF1
dGgpLCAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKLQlpZiAobV9hdXRoID09IE5VTEwpIHsK
LQkJLyogbm8gbWJ1ZidzICovCi0JCXJldHVybiAobSk7Ci0JfQotCS8qIHJlc2VydmUgc29tZSBz
cGFjZSBpZiB0aGlzIHdpbGwgYmUgdGhlIGZpcnN0IG1idWYgKi8KLQlpZiAobSA9PSBOVUxMKQot
CQlTQ1RQX0JVRl9SRVNWX1VGKG1fYXV0aCwgU0NUUF9NSU5fT1ZFUkhFQUQpOwotCS8qIGZpbGwg
aW4gdGhlIEFVVEggY2h1bmsgZGV0YWlscyAqLwotCWF1dGggPSBtdG9kKG1fYXV0aCwgc3RydWN0
IHNjdHBfYXV0aF9jaHVuayAqKTsKLQltZW1zZXQoYXV0aCwgMCwgc2l6ZW9mKCphdXRoKSk7Ci0J
YXV0aC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfQVVUSEVOVElDQVRJT047Ci0JYXV0aC0+Y2guY2h1
bmtfZmxhZ3MgPSAwOwotCWNodW5rX2xlbiA9IHNpemVvZigqYXV0aCkgKwotCSAgICBzY3RwX2dl
dF9obWFjX2RpZ2VzdF9sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOwotCWF1dGgtPmNoLmNo
dW5rX2xlbmd0aCA9IGh0b25zKGNodW5rX2xlbik7Ci0JYXV0aC0+aG1hY19pZCA9IGh0b25zKHN0
Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKLQkvKiBrZXkgaWQgYW5kIGhtYWMgZGlnZXN0IHdpbGwg
YmUgY29tcHV0ZWQgYW5kIGZpbGxlZCBpbiB1cG9uIHNlbmQgKi8KLQotCS8qIHNhdmUgdGhlIG9m
ZnNldCB3aGVyZSB0aGUgYXV0aCB3YXMgaW5zZXJ0ZWQgaW50byB0aGUgY2hhaW4gKi8KLQkqb2Zm
c2V0ID0gMDsKLQlmb3IgKGNuID0gbTsgY247IGNuID0gU0NUUF9CVUZfTkVYVChjbikpIHsKLQkJ
Km9mZnNldCArPSBTQ1RQX0JVRl9MRU4oY24pOwotCX0KLQotCS8qIHVwZGF0ZSBsZW5ndGggYW5k
IHJldHVybiBwb2ludGVyIHRvIHRoZSBhdXRoIGNodW5rICovCi0JU0NUUF9CVUZfTEVOKG1fYXV0
aCkgPSBjaHVua19sZW47Ci0JbSA9IHNjdHBfY29weV9tYnVmY2hhaW4obV9hdXRoLCBtLCBtX2Vu
ZCwgMSwgY2h1bmtfbGVuLCAwKTsKLQlpZiAoYXV0aF9yZXQgIT0gTlVMTCkKLQkJKmF1dGhfcmV0
ID0gYXV0aDsKLQotCXJldHVybiAobSk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAg
fHwgZGVmaW5lZChfX0FQUExFX18pCi0jaWZkZWYgSU5FVDYKLWludAotc2N0cF92NnNyY19tYXRj
aF9uZXh0aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVfdCAqcm8pCi17
Ci0Jc3RydWN0IG5kX3ByZWZpeCAqcGZ4ID0gTlVMTDsKLQlzdHJ1Y3QgbmRfcGZ4cm91dGVyICpw
ZnhydHIgPSBOVUxMOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgZ3c2OwotCi0JaWYgKHJvID09IE5V
TEwgfHwgcm8tPnJvX3J0ID09IE5VTEwgfHwgc3JjNi0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYp
Ci0JCXJldHVybiAoMCk7Ci0KLQkvKiBnZXQgcHJlZml4IGVudHJ5IG9mIGFkZHJlc3MgKi8KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCU5ENl9STE9DSygpOwotI2VuZGlmCi0JTElTVF9GT1JF
QUNIKHBmeCwgJk1PRFVMRV9HTE9CQUwobmRfcHJlZml4KSwgbmRwcl9lbnRyeSkgewotCQlpZiAo
cGZ4LT5uZHByX3N0YXRlZmxhZ3MgJiBORFBSRl9ERVRBQ0hFRCkKLQkJCWNvbnRpbnVlOwotCQlp
ZiAoSU42X0FSRV9NQVNLRURfQUREUl9FUVVBTCgmcGZ4LT5uZHByX3ByZWZpeC5zaW42X2FkZHIs
Ci0JCSAgICAmc3JjNi0+c2luNl9hZGRyLCAmcGZ4LT5uZHByX21hc2spKQotCQkJYnJlYWs7Ci0J
fQotCS8qIG5vIHByZWZpeCBlbnRyeSBpbiB0aGUgcHJlZml4IGxpc3QgKi8KLQlpZiAocGZ4ID09
IE5VTEwpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlORDZfUlVOTE9DSygpOwotI2Vu
ZGlmCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiTm8gcHJlZml4IGVudHJ5IGZvciAi
KTsKLQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAq
KXNyYzYpOwotCQlyZXR1cm4gKDApOwotCX0KLQotCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQy
LCAidjZzcmNfbWF0Y2hfbmV4dGhvcCgpLCBQcmVmaXggZW50cnkgaXMgIik7Ci0JU0NUUERCR19B
RERSKFNDVFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAqKXNyYzYpOwotCi0JLyog
c2VhcmNoIGluc3RhbGxlZCBnYXRld2F5IGZyb20gcHJlZml4IGVudHJ5ICovCi0JTElTVF9GT1JF
QUNIKHBmeHJ0ciwgJnBmeC0+bmRwcl9hZHZydHJzLCBwZnJfZW50cnkpIHsKLQkJbWVtc2V0KCZn
dzYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCWd3Ni5zaW42X2ZhbWlseSA9
IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJZ3c2LnNpbjZfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCW1lbWNweSgmZ3c2LnNpbjZfYWRkciwg
JnBmeHJ0ci0+cm91dGVyLT5ydGFkZHIsCi0JCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7
Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAicHJlZml4IHJvdXRlciBpcyAiKTsKLQkJ
U0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgKHN0cnVjdCBzb2NrYWRkciAqKSZndzYp
OwotCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgImluc3RhbGxlZCByb3V0ZXIgaXMgIik7
Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsIHJvLT5yb19ydC0+cnRfZ2F0ZXdh
eSk7Ci0JCWlmIChzY3RwX2NtcGFkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZndzYsIHJvLT5yb19y
dC0+cnRfZ2F0ZXdheSkpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJTkQ2X1JVTkxP
Q0soKTsKLSNlbmRpZgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJwZnhyb3V0ZXIg
aXMgaW5zdGFsbGVkXG4iKTsKLQkJCXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLQlORDZfUlVOTE9DSygpOwotI2VuZGlmCi0JU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDIsICJwZnhyb3V0ZXIgaXMgbm90IGluc3RhbGxlZFxuIik7Ci0JcmV0dXJuICgwKTsK
LX0KLSNlbmRpZgotCi1pbnQKLXNjdHBfdjRzcmNfbWF0Y2hfbmV4dGhvcChzdHJ1Y3Qgc2N0cF9p
ZmEgKnNpZmEsIHNjdHBfcm91dGVfdCAqcm8pCi17Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luLCAqbWFzazsKLQlzdHJ1Y3QgaWZhZGRyICppZmE7Ci0Jc3RydWN0IGluX2Fk
ZHIgc3JjbmV0YWRkciwgZ3duZXRhZGRyOwotCi0JaWYgKHJvID09IE5VTEwgfHwgcm8tPnJvX3J0
ID09IE5VTEwgfHwKLQkgICAgc2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gQUZfSU5FVCkg
ewotCQlyZXR1cm4gKDApOwotCX0KLQlpZmEgPSAoc3RydWN0IGlmYWRkciAqKXNpZmEtPmlmYTsK
LQltYXNrID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShpZmEtPmlmYV9uZXRtYXNrKTsKLQlzaW4g
PSAmc2lmYS0+YWRkcmVzcy5zaW47Ci0Jc3JjbmV0YWRkci5zX2FkZHIgPSAoc2luLT5zaW5fYWRk
ci5zX2FkZHIgJiBtYXNrLT5zaW5fYWRkci5zX2FkZHIpOwotCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQxLCAibWF0Y2hfbmV4dGhvcDQ6IHNyYyBhZGRyZXNzIGlzICIpOwotCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX09VVFBVVDIsICZzaWZhLT5hZGRyZXNzLnNhKTsKLQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMSwgIm5ldHdvcmsgYWRkcmVzcyBpcyAleFxuIiwgc3JjbmV0YWRkci5zX2Fk
ZHIpOwotCi0Jc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJvLT5yb19ydC0+cnRfZ2F0ZXdh
eTsKLQlnd25ldGFkZHIuc19hZGRyID0gKHNpbi0+c2luX2FkZHIuc19hZGRyICYgbWFzay0+c2lu
X2FkZHIuc19hZGRyKTsKLQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm1hdGNoX25leHRo
b3A0OiBuZXh0aG9wIGlzICIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsIHJv
LT5yb19ydC0+cnRfZ2F0ZXdheSk7Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJuZXR3
b3JrIGFkZHJlc3MgaXMgJXhcbiIsIGd3bmV0YWRkci5zX2FkZHIpOwotCWlmIChzcmNuZXRhZGRy
LnNfYWRkciA9PSBnd25ldGFkZHIuc19hZGRyKSB7Ci0JCXJldHVybiAoMSk7Ci0JfQotI2VuZGlm
Ci0JcmV0dXJuICgwKTsKLX0KLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLS8qIFRPRE8g
X19Vc2Vyc3BhY2VfXyB2ZXJzaW9ucyBvZiBzY3RwX3ZYc3JjX21hdGNoX25leHRob3AoKS4gKi8K
LWludAotc2N0cF92NnNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYs
IHNjdHBfcm91dGVfdCAqcm8pCi17Ci0gICAgcmV0dXJuICgwKTsKLX0KLWludAotc2N0cF92NHNy
Y19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybykK
LXsKLSAgICByZXR1cm4gKDApOwotfQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9vdXRwdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGZhZTQ0NzEyY2U4MzMxZDFkNzMwNTg5NDcwMTM3
MjljZjBlYjY4Yy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNzEg
KzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVt
cywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
YykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5v
dGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNE
SUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfb3V0cHV0LmggMzIxMDM0IDIwMTct
MDctMTUgMTk6NTQ6MDNaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9T
Q1RQX09VVFBVVF9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX09VVFBVVF9IXwotCi0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0KLQotc3RydWN0IG1idWYgKgotc2N0cF9hZGRfYWRkcmVzc2Vz
X3RvX2lfaWEoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgIHN0cnVjdCBzY3RwX3Njb3BpbmcgKnNj
b3BlLAotCQkJICAgc3RydWN0IG1idWYgKm1fYXQsCi0JCQkgICBpbnQgY250X2luaXRzX3RvLAot
CQkJICAgdWludDE2X3QgKnBhZGRpbmdfbGVuLCB1aW50MTZfdCAqY2h1bmtfbGVuKTsKLQotCi1p
bnQgc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X2lmYSAqKTsKLQotCi1pbnQKLXNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zY29waW5nICpz
Y29wZSwKLQkJCSBpbnQgZG9fdXBkYXRlKTsKLQotaW50Ci1zY3RwX2lzX2FkZHJfaW5fZXAoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfaWZhICppZmEpOwotCi1zdHJ1Y3Qgc2N0
cF9pZmEgKgotc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwKLQkJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCSAgICAgIHNjdHBfcm91
dGVfdCAqcm8sIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJCSAgICAgIGludCBub25fYXNvY19h
ZGRyX29rLCB1aW50MzJfdCB2cmZfaWQpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotc2N0cF92
NnNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYsIHNjdHBfcm91dGVf
dCAqcm8pOwotaW50Ci1zY3RwX3Y0c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNjdHBfaWZhICpz
aWZhLCBzY3RwX3JvdXRlX3QgKnJvKTsKLSNlbmRpZgotCi12b2lkIHNjdHBfc2VuZF9pbml0aWF0
ZShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50Ci0jaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQ
X1VOVVNFRAotI2VuZGlmCi0gICAgKTsKLQotdm9pZAotc2N0cF9zZW5kX2luaXRpYXRlX2Fjayhz
dHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgbWJ1ZiAqLAotICAgICAgICAgICAgICAg
ICAgICAgICBpbnQsIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy
ICosIHN0cnVjdCBzb2NrYWRkciAqLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cGhkciAqLCBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICosCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsCi0jZW5kaWYKLSAg
ICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIHVpbnQxNl90LCBpbnQpOwotCi1zdHJ1Y3Qg
bWJ1ZiAqCi1zY3RwX2FyZXRoZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKHN0cnVjdCBtYnVm
ICosIGludCwgaW50ICosCi0JCQkJICAgICAgc3RydWN0IHNjdHBfY2h1bmtoZHIgKiwgaW50ICop
Owotdm9pZCBzY3RwX3F1ZXVlX29wX2VycihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYg
Kik7Ci0KLWludAotc2N0cF9zZW5kX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICosIGludCwgc3Ry
dWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLQotdm9pZCBzY3RwX3Nl
bmRfY29va2llX2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKik7Ci0KLXZvaWQKLXNjdHBfc2VuZF9oZWFy
dGJlYXRfYWNrKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKLSAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi12b2lkCi1zY3RwX3JlbW92ZV9mcm9tX3doZWVsKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCQkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MsCi0JCQkJCSAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIGludCBob2xkc19sb2Nr
KTsKLQotCi12b2lkIHNjdHBfc2VuZF9zaHV0ZG93bihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0
IHNjdHBfbmV0cyAqKTsKLQotdm9pZCBzY3RwX3NlbmRfc2h1dGRvd25fYWNrKHN0cnVjdCBzY3Rw
X3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi12b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9j
b21wbGV0ZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQpOwotCi12
b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9jb21wbGV0ZTIoc3RydWN0IHNvY2thZGRyICosIHN0cnVj
dCBzb2NrYWRkciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwaGRyICosCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1aW50OF90LCB1aW50MzJfdCwgdWludDE2X3QsCi0jZW5kaWYKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOwotCi12b2lk
IHNjdHBfc2VuZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwg
aW50IGFkZHJfbG9ja2VkKTsKLQotdm9pZCBzY3RwX3NlbmRfYXNjb25mX2FjayhzdHJ1Y3Qgc2N0
cF90Y2IgKik7Ci0KLWludCBzY3RwX2dldF9mcmFnX3BvaW50KHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZCBzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMo
c3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOwotCi12b2lkIHNj
dHBfdG9zc19vbGRfYXNjb25mKHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotdm9pZCBzY3RwX2ZpeF9l
Y25fZWNobyhzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKLQotdm9pZCBzY3RwX21vdmVfY2h1
bmtzX2Zyb21fbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0
KTsKLQotCi0jZGVmaW5lIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSAoKHN0Y2IpLT5h
c29jLmlkYXRhX3N1cHBvcnRlZCA/IFwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX2lkYXRhX2No
dW5rKSA6IFwKLQkJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKQotCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1pbnQKLXNj
dHBfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2Nr
YWRkciAqLAotICAgIHN0cnVjdCBtYnVmICosIHN0cnVjdCB0aHJlYWQgKiwgaW50KTsKLSNlbGlm
IGRlZmluZWQoX19XaW5kb3dzX18pCi1zY3RwX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBz
dHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3QgbWJ1ZiAqLCBQS1RI
UkVBRCwgaW50KTsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotLyogc2N0cF9v
dXRwdXQgaXMgY2FsbGVkIGJ1IHNjdHBfc2VuZG0uIE5vdCB1c2luZyBzY3RwX3NlbmRtIGZvciBf
X1VzZXJzcGFjZV9fICovCi0jZW5kaWYKLWludAotc2N0cF9vdXRwdXQoc3RydWN0IHNjdHBfaW5w
Y2IgKiwKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSAgICBwYWtoYW5kbGVfdHlwZSwKLSNlbHNl
Ci0gICAgc3RydWN0IG1idWYgKiwKLSNlbmRpZgotICAgIHN0cnVjdCBzb2NrYWRkciAqLAotI2lm
IGRlZmluZWQoX19QYW5kYV9fKQotICAgIHBha2hhbmRsZV90eXBlLAotI2Vsc2UKLSAgICBzdHJ1
Y3QgbWJ1ZiAqLAotI2VuZGlmCi0gICAgc3RydWN0IHByb2MgKiwgaW50KTsKLSNlbmRpZgotCi12
b2lkIHNjdHBfY2h1bmtfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3Rj
YiAqLCBpbnQsIGludAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICk7Ci12b2lkIHNj
dHBfc2VuZF9hYm9ydF90Y2Ioc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBtYnVmICosIGludAot
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICk7Ci0KLXZvaWQgc2VuZF9mb3J3YXJkX3Rz
bihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7Ci0KLXZvaWQg
c2N0cF9zZW5kX3NhY2soc3RydWN0IHNjdHBfdGNiICosIGludCk7Ci0KLXZvaWQgc2N0cF9zZW5k
X2hiKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCk7Ci0KLXZvaWQg
c2N0cF9zZW5kX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICos
IHVpbnQzMl90KTsKLQotCi12b2lkCi1zY3RwX3NlbmRfcGFja2V0X2Ryb3BwZWQoc3RydWN0IHNj
dHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IG1idWYgKiwKLSAgICBpbnQsIGlu
dCwgaW50KTsKLQotCi0KLXZvaWQgc2N0cF9zZW5kX2N3cihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3Ry
dWN0IHNjdHBfbmV0cyAqLCB1aW50MzJfdCwgdWludDhfdCk7Ci0KLQotdm9pZAotc2N0cF9hZGRf
c3RyZWFtX3Jlc2V0X3Jlc3VsdChzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICosIHVpbnQzMl90LCB1
aW50MzJfdCk7Ci0KLXZvaWQKLXNjdHBfc2VuZF9kZWZlcnJlZF9yZXNldF9yZXNwb25zZShzdHJ1
Y3Qgc2N0cF90Y2IgKiwKLQkJCQkgIHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICosCi0J
CQkJICBpbnQpOwotCi12b2lkCi1zY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci1pbnQKLXNjdHBfc2VuZF9z
dHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOwotCi1p
bnQKLXNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50MTZfdCAs
IHVpbnQxNl90ICosCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50OF90LCB1
aW50OF90LCB1aW50MTZfdCwgdWludDE2X3QsIHVpbnQ4X3QpOwotCi12b2lkCi1zY3RwX3NlbmRf
YWJvcnQoc3RydWN0IG1idWYgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2th
ZGRyICosCi0gICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgdWludDMyX3QsIHN0cnVj
dCBtYnVmICosCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICB1aW50
OF90LCB1aW50MzJfdCwgdWludDE2X3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICB1aW50MzJf
dCwgdWludDE2X3QpOwotCi12b2lkIHNjdHBfc2VuZF9vcGVycl90byhzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cGhkciAqLCB1aW50MzJfdCwgc3RydWN0IG1idWYgKiwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQotICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwgdWludDMyX3QsIHVpbnQxNl90LAot
I2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOwotCi0j
ZW5kaWYgLyogX0tFUk5FTCB8fCBfX1VzZXJzcGFjZV9fICovCi0KLSNpZiBkZWZpbmVkKF9LRVJO
RUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotc2N0cF9zb3NlbmQoc3RydWN0IHNv
Y2tldCAqc28sCi0gICAgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgIHN0cnVjdCB1aW8gKnVp
bywKLSNpZmRlZiBfX1BhbmRhX18KLSAgICBwYWtoYW5kbGVfdHlwZSB0b3AsCi0gICAgcGFraGFu
ZGxlX3R5cGUgY29udHJvbCwKLSNlbHNlCi0gICAgc3RydWN0IG1idWYgKnRvcCwKLSAgICBzdHJ1
Y3QgbWJ1ZiAqY29udHJvbCwKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fUGFuZGFfXykKLSAgICBpbnQgZmxhZ3MKLSNlbHNlCi0gICAgaW50IGZsYWdzLAotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotICAg
IHN0cnVjdCB0aHJlYWQgKnAKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0gICAgUEtUSFJF
QUQgcAotI2Vsc2UKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0gICAgLyogcHJvYyBpcyBh
IGR1bW15IGluIF9fVXNlcnNwYWNlX18gYW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0byBzY3RwX2xv
d2VyX3Nvc2VuZCAqLwotI2VuZGlmCi0gICAgc3RydWN0IHByb2MgKnAKLSNlbmRpZgotI2VuZGlm
Ci0pOwotCi0jZW5kaWYKLSNlbmRpZgotCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGNiLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQwYzc3MGUzMDc4ZDk3MDdjOGUzY2RkOTc0YWE2ODIyMzcyMDRkZDIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BjYi5jCisrKyAvZGV2L251bGwKQEAgLTEsODE4MyArMCwwIEBACi0vKi0KLSAq
IENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3
YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0g
KiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9f
RnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhl
YWQvc3lzL25ldGluZXQvc2N0cF9wY2IuYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVl
eGVuICQiKTsKLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYg
X19GcmVlQlNEX18KLSNpbmNsdWRlIDxzeXMvcHJvYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfZHRyYWNl
X2RlZmluZS5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQot
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8bmV0aW5ldC91
ZHAuaD4KLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0jaW5jbHVkZSAidXNlcl9pcDZfdmFyLmgiCi0jZWxzZQotI2luY2x1ZGUgPG5ldGlu
ZXQ2L2lwNl92YXIuaD4KLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LSNpbmNsdWRlIDxzeXMvc2NoZWQuaD4KLSNpbmNsdWRlIDxzeXMvc21wLmg+Ci0jaW5jbHVkZSA8
c3lzL3VuaXN0ZC5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2luY2x1
ZGUgPHVzZXJfc29ja2V0dmFyLmg+Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotI2RlZmluZSBBUFBMRV9GSUxFX05PIDQKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi1WTkVUX0RFRklORShz
dHJ1Y3Qgc2N0cF9iYXNlX2luZm8sIHN5c3RlbV9iYXNlX2luZm8pOwotI2Vsc2UKLXN0cnVjdCBz
Y3RwX2Jhc2VfaW5mbyBzeXN0ZW1fYmFzZV9pbmZvOwotI2VuZGlmCi0KLS8qIEZJWDogd2UgZG9u
J3QgaGFuZGxlIG11bHRpcGxlIGxpbmsgbG9jYWwgc2NvcGVzICovCi0vKiAic2NvcGVsZXNzIiBy
ZXBsYWNlbWVudCBJTjZfQVJFX0FERFJfRVFVQUwgKi8KLSNpZmRlZiBJTkVUNgotaW50Ci1TQ1RQ
Nl9BUkVfQUREUl9FUVVBTChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphLCBzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpiKQotewotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLSNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKLQlzdHJ1Y3QgaW42X2FkZHIgdG1wX2EsIHRtcF9iOwotCi0JdG1wX2EgPSBhLT5z
aW42X2FkZHI7Ci0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NO
T1dMRU9QQVJEKQotCWlmIChpbjZfZW1iZWRzY29wZSgmdG1wX2EsIGEsIE5VTEwsIE5VTEwpICE9
IDApIHsKLSNlbHNlCi0JaWYgKGluNl9lbWJlZHNjb3BlKCZ0bXBfYSwgYSwgTlVMTCwgTlVMTCwg
TlVMTCkgIT0gMCkgewotI2VuZGlmCi0JCXJldHVybiAoMCk7Ci0JfQotCXRtcF9iID0gYi0+c2lu
Nl9hZGRyOwotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9X
TEVPUEFSRCkKLQlpZiAoaW42X2VtYmVkc2NvcGUoJnRtcF9iLCBiLCBOVUxMLCBOVUxMKSAhPSAw
KSB7Ci0jZWxzZQotCWlmIChpbjZfZW1iZWRzY29wZSgmdG1wX2IsIGIsIE5VTEwsIE5VTEwsIE5V
TEwpICE9IDApIHsKLSNlbmRpZgotCQlyZXR1cm4gKDApOwotCX0KLQlyZXR1cm4gKElONl9BUkVf
QUREUl9FUVVBTCgmdG1wX2EsICZ0bXBfYikpOwotI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCi0J
c3RydWN0IHNvY2thZGRyX2luNiB0bXBfYSwgdG1wX2I7Ci0KLQltZW1jcHkoJnRtcF9hLCBhLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCWlmIChzYTZfZW1iZWRzY29wZSgmdG1wX2Es
IE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkgIT0gMCkgewotCQlyZXR1cm4gKDApOwot
CX0KLQltZW1jcHkoJnRtcF9iLCBiLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCWlm
IChzYTZfZW1iZWRzY29wZSgmdG1wX2IsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSkg
IT0gMCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlyZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgm
dG1wX2Euc2luNl9hZGRyLCAmdG1wX2Iuc2luNl9hZGRyKSk7Ci0jZWxzZQotCXN0cnVjdCBpbjZf
YWRkciB0bXBfYSwgdG1wX2I7Ci0KLQl0bXBfYSA9IGEtPnNpbjZfYWRkcjsKLQlpZiAoaW42X2Vt
YmVkc2NvcGUoJnRtcF9hLCBhKSAhPSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCXRtcF9iID0g
Yi0+c2luNl9hZGRyOwotCWlmIChpbjZfZW1iZWRzY29wZSgmdG1wX2IsIGIpICE9IDApIHsKLQkJ
cmV0dXJuICgwKTsKLQl9Ci0JcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9hLCAmdG1w
X2IpKTsKLSNlbmRpZgotI2Vsc2UKLQlyZXR1cm4gKElONl9BUkVfQUREUl9FUVVBTCgmKGEtPnNp
bjZfYWRkciksICYoYi0+c2luNl9hZGRyKSkpOwotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZf
U0NPUEUgKi8KLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwX2ZpbGxfcGNiaW5mbyhzdHJ1Y3Qgc2N0
cF9wY2JpbmZvICpzcGNiKQotewotCS8qCi0JICogV2UgcmVhbGx5IGRvbid0IG5lZWQgdG8gbG9j
ayB0aGlzLCBidXQgSSB3aWxsIGp1c3QgYmVjYXVzZSBpdAotCSAqIGRvZXMgbm90IGh1cnQuCi0J
ICovCi0JU0NUUF9JTlBfSU5GT19STE9DSygpOwotCXNwY2ItPmVwX2NvdW50ID0gU0NUUF9CQVNF
X0lORk8oaXBpX2NvdW50X2VwKTsKLQlzcGNiLT5hc29jX2NvdW50ID0gU0NUUF9CQVNFX0lORk8o
aXBpX2NvdW50X2Fzb2MpOwotCXNwY2ItPmxhZGRyX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBp
X2NvdW50X2xhZGRyKTsKLQlzcGNiLT5yYWRkcl9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9j
b3VudF9yYWRkcik7Ci0Jc3BjYi0+Y2hrX2NvdW50ID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2NodW5rKTsKLQlzcGNiLT5yZWFkcV9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9y
ZWFkcSk7Ci0Jc3BjYi0+c3RyZWFtX29xdWUgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfc3Ry
bW9xKTsKLQlzcGNiLT5mcmVlX2NodW5rcyA9IFNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5r
cyk7Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci19Ci0KLS8qLQotICogQWRkcmVzc2VzIGFy
ZSBhZGRlZCB0byBWUkYncyAoVmlydHVhbCBSb3V0ZXIncykuIEZvciBCU0Qgd2UKLSAqIGhhdmUg
b25seSB0aGUgZGVmYXVsdCBWUkYgMC4gV2UgbWFpbnRhaW4gYSBoYXNoIGxpc3Qgb2YKLSAqIFZS
RidzLiBFYWNoIFZSRiBoYXMgaXRzIG93biBsaXN0IG9mIHNjdHBfaWZuJ3MuIEVhY2ggb2YKLSAq
IHRoZXNlIGhhcyBhIGxpc3Qgb2YgYWRkcmVzc2VzLiBXaGVuIHdlIGFkZCBhIG5ldyBhZGRyZXNz
Ci0gKiB0byBhIFZSRiB3ZSBsb29rdXAgdGhlIGlmbi9pZm5faW5kZXgsIGlmIHRoZSBpZm4gZG9l
cwotICogbm90IGV4aXN0IHdlIGNyZWF0ZSBpdCBhbmQgYWRkIGl0IHRvIHRoZSBsaXN0IG9mIElG
TidzCi0gKiB3aXRoaW4gdGhlIFZSRi4gT25jZSB3ZSBoYXZlIHRoZSBzY3RwX2lmbiwgd2UgYWRk
IHRoZQotICogYWRkcmVzcyB0byB0aGUgbGlzdC4gU28gd2UgbG9vayBzb21ldGhpbmcgbGlrZToK
LSAqCi0gKiBoYXNoLXZyZi10YWJsZQotICogICB2cmYtPiBpZm4tPiBpZm4gLT4gaWZuCi0gKiAg
IHZyZiAgICB8Ci0gKiAgICAuLi4gICArLS1pZmEtPiBpZmEgLT4gaWZhCi0gKiAgIHZyZgotICoK
LSAqIFdlIGtlZXAgdGhlc2Ugc2VwYXJhdGUgbGlzdHMgc2luY2UgdGhlIFNDVFAgc3Vic3lzdGVt
IHdpbGwKLSAqIHBvaW50IHRvIHRoZXNlIGZyb20gaXRzIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlv
biBuZXRzIHN0cnVjdHVyZS4KLSAqIFdoZW4gYW4gYWRkcmVzcyBpcyBkZWxldGVkIGl0IGRvZXMg
bm90IGhhcHBlbiByaWdodCBhd2F5IG9uCi0gKiB0aGUgU0NUUCBzaWRlLCBpdCBnZXRzIHNjaGVk
dWxlZC4gV2hhdCB3ZSBkbyB3aGVuIGEKLSAqIGRlbGV0ZSBoYXBwZW5zIGlzIGltbWVkaWF0ZWx5
IHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tCi0gKiB0aGUgbWFzdGVyIGxpc3QgYW5kIGRlY3JlbWVu
dCB0aGUgcmVmY291bnQuIEFzIG91cgotICogYWRkaXAgaXRlcmF0b3Igd29ya3MgdGhyb3VnaCBh
bmQgZnJlZXMgdGhlIHNyYyBhZGRyZXNzCi0gKiBzZWxlY3Rpb24gcG9pbnRpbmcgdG8gdGhlIHNj
dHBfaWZhLCBldmVudHVhbGx5IHRoZSByZWZjb3VudAotICogd2lsbCByZWFjaCAwIGFuZCB3ZSB3
aWxsIGRlbGV0ZSBpdC4gTm90ZSB0aGF0IGl0IGlzIGFzc3VtZWQKLSAqIHRoYXQgYW55IGxvY2tp
bmcgb24gc3lzdGVtIGxldmVsIGlmbi9pZmEgaXMgZG9uZSBhdCB0aGUKLSAqIGNhbGxlciBvZiB0
aGVzZSBmdW5jdGlvbnMgYW5kIHRoZXNlIHJvdXRpbmVzIHdpbGwgb25seQotICogbG9jayB0aGUg
U0NUUCBzdHJ1Y3R1cmVzIGFzIHRoZXkgYWRkIG9yIGRlbGV0ZSB0aGluZ3MuCi0gKgotICogT3Ro
ZXIgbm90ZXMgb24gVlJGIGNvbmNlcHRzLgotICogIC0gQW4gZW5kcG9pbnQgY2FuIGJlIGluIG11
bHRpcGxlIFZSRidzCi0gKiAgLSBBbiBhc3NvY2lhdGlvbiBsaXZlcyB3aXRoaW4gYSBWUkYgYW5k
IG9ubHkgb25lIFZSRi4KLSAqICAtIEFueSBpbmNvbWluZyBwYWNrZXQgd2UgY2FuIGRlZHVjZSB0
aGUgVlJGIGZvciBieQotICogICAgbG9va2luZyBhdCB0aGUgbWJ1Zi9wYWsgaW5ib3VuZCAoZm9y
IEJTRCBpdHMgVlJGPTAgOkQpCi0gKiAgLSBBbnkgZG93bndhcmQgc2VuZCBjYWxsIG9yIGNvbm5l
Y3QgY2FsbCBtdXN0IHN1cHBseSB0aGUKLSAqICAgIFZSRiB2aWEgYW5jaWxsYXJ5IGRhdGEgb3Ig
dmlhIHNvbWUgc29ydCBvZiBzZXQgZGVmYXVsdAotICogICAgVlJGIHNvY2tldCBvcHRpb24gY2Fs
bCAoYWdhaW4gZm9yIEJTRCBubyBicmFpbmVyIHNpbmNlCi0gKiAgICB0aGUgVlJGIGlzIGFsd2F5
cyAwKS4KLSAqICAtIEFuIGVuZHBvaW50IG1heSBhZGQgbXVsdGlwbGUgVlJGJ3MgdG8gaXQuCi0g
KiAgLSBMaXN0ZW5pbmcgc29ja2V0cyBjYW4gYWNjZXB0IGFzc29jaWF0aW9ucyBpbiBhbnkKLSAq
ICAgIG9mIHRoZSBWUkYncyB0aGV5IGFyZSBpbiBidXQgdGhlIGFzc29jIHdpbGwgZW5kIHVwCi0g
KiAgICBpbiBvbmx5IG9uZSBWUkYgKGdvdHRlbiBmcm9tIHRoZSBwYWNrZXQgb3IgY29ubmVjdC9z
ZW5kKS4KLSAqCi0gKi8KLQotc3RydWN0IHNjdHBfdnJmICoKLXNjdHBfYWxsb2NhdGVfdnJmKGlu
dCB2cmZfaWQpCi17Ci0Jc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOwotCXN0cnVjdCBzY3Rw
X3ZyZmxpc3QgKmJ1Y2tldDsKLQotCS8qIEZpcnN0IGFsbG9jYXRlIHRoZSBWUkYgc3RydWN0dXJl
ICovCi0JdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYpIHsKLQkJLyogQWxy
ZWFkeSBhbGxvY2F0ZWQgKi8KLQkJcmV0dXJuICh2cmYpOwotCX0KLQlTQ1RQX01BTExPQyh2cmYs
IHN0cnVjdCBzY3RwX3ZyZiAqLCBzaXplb2Yoc3RydWN0IHNjdHBfdnJmKSwKLQkJICAgIFNDVFBf
TV9WUkYpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQkvKiBObyBtZW1vcnkgKi8KLSNpZmRlZiBJ
TlZBUklBTlRTCi0JCXBhbmljKCJObyBtZW1vcnkgZm9yIFZSRjolZCIsIHZyZl9pZCk7Ci0jZW5k
aWYKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyogc2V0dXAgdGhlIFZSRiAqLwotCW1lbXNldCh2
cmYsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF92cmYpKTsKLQl2cmYtPnZyZl9pZCA9IHZyZl9pZDsK
LQlMSVNUX0lOSVQoJnZyZi0+aWZubGlzdCk7Ci0JdnJmLT50b3RhbF9pZmFfY291bnQgPSAwOwot
CXZyZi0+cmVmY291bnQgPSAwOwotCS8qIG5vdyBhbHNvIHNldHVwIHRhYmxlIGlkcyAqLwotCVND
VFBfSU5JVF9WUkZfVEFCTEVJRCh2cmYpOwotCS8qIEluaXQgdGhlIEhBU0ggb2YgYWRkcmVzc2Vz
ICovCi0JdnJmLT52cmZfYWRkcl9oYXNoID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9WUkZfQUREUl9I
QVNIX1NJWkUsCi0JCQkJCSAgICAmdnJmLT52cmZfYWRkcl9oYXNobWFyayk7Ci0JaWYgKHZyZi0+
dnJmX2FkZHJfaGFzaCA9PSBOVUxMKSB7Ci0JCS8qIE5vIG1lbW9yeSAqLwotI2lmZGVmIElOVkFS
SUFOVFMKLQkJcGFuaWMoIk5vIG1lbW9yeSBmb3IgVlJGOiVkIiwgdnJmX2lkKTsKLSNlbmRpZgot
CQlTQ1RQX0ZSRUUodnJmLCBTQ1RQX01fVlJGKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0KLQkv
KiBBZGQgaXQgdG8gdGhlIGhhc2ggdGFibGUgKi8KLQlidWNrZXQgPSAmU0NUUF9CQVNFX0lORk8o
c2N0cF92cmZoYXNoKVsodnJmX2lkICYgU0NUUF9CQVNFX0lORk8oaGFzaHZyZm1hcmspKV07Ci0J
TElTVF9JTlNFUlRfSEVBRChidWNrZXQsIHZyZiwgbmV4dF92cmYpOwotCWF0b21pY19hZGRfaW50
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfdnJmcyksIDEpOwotCXJldHVybiAodnJmKTsKLX0K
LQotCi1zdHJ1Y3Qgc2N0cF9pZm4gKgotc2N0cF9maW5kX2lmbih2b2lkICppZm4sIHVpbnQzMl90
IGlmbl9pbmRleCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKLQlzdHJ1Y3Qgc2N0
cF9pZm5saXN0ICpoYXNoX2lmbl9oZWFkOwotCi0JLyogV2UgYXNzdW1lIHRoZSBsb2NrIGlzIGhl
bGQgZm9yIHRoZSBhZGRyZXNzZXMKLQkgKiBpZiB0aGF0J3Mgd3JvbmcgcHJvYmxlbXMgY291bGQg
b2NjdXIgOi0pCi0JICovCi0JaGFzaF9pZm5faGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyh2cmZfaWZu
X2hhc2gpWyhpZm5faW5kZXggJiBTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSldOwot
CUxJU1RfRk9SRUFDSChzY3RwX2lmbnAsIGhhc2hfaWZuX2hlYWQsIG5leHRfYnVja2V0KSB7Ci0J
CWlmIChzY3RwX2lmbnAtPmlmbl9pbmRleCA9PSBpZm5faW5kZXgpIHsKLQkJCXJldHVybiAoc2N0
cF9pZm5wKTsKLQkJfQotCQlpZiAoc2N0cF9pZm5wLT5pZm5fcCAmJiBpZm4gJiYgKHNjdHBfaWZu
cC0+aWZuX3AgPT0gaWZuKSkgewotCQkJcmV0dXJuIChzY3RwX2lmbnApOwotCQl9Ci0JfQotCXJl
dHVybiAoTlVMTCk7Ci19Ci0KLQotc3RydWN0IHNjdHBfdnJmICoKLXNjdHBfZmluZF92cmYodWlu
dDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX3ZyZmxpc3QgKmJ1Y2tldDsKLQlzdHJ1Y3Qg
c2N0cF92cmYgKmxpc3RlOwotCi0JYnVja2V0ID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdnJmaGFz
aClbKHZyZl9pZCAmIFNDVFBfQkFTRV9JTkZPKGhhc2h2cmZtYXJrKSldOwotCUxJU1RfRk9SRUFD
SChsaXN0ZSwgYnVja2V0LCBuZXh0X3ZyZikgewotCQlpZiAodnJmX2lkID09IGxpc3RlLT52cmZf
aWQpIHsKLQkJCXJldHVybiAobGlzdGUpOwotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0K
LQotdm9pZAotc2N0cF9mcmVlX3ZyZihzdHJ1Y3Qgc2N0cF92cmYgKnZyZikKLXsKLQlpZiAoU0NU
UF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKCZ2cmYtPnJlZmNvdW50KSkgewotICAgICAg
ICAgICAgICAgIGlmICh2cmYtPnZyZl9hZGRyX2hhc2gpIHsKLSAgICAgICAgICAgICAgICAgICAg
U0NUUF9IQVNIX0ZSRUUodnJmLT52cmZfYWRkcl9oYXNoLCB2cmYtPnZyZl9hZGRyX2hhc2htYXJr
KTsKLSAgICAgICAgICAgICAgICAgICAgdnJmLT52cmZfYWRkcl9oYXNoID0gTlVMTDsKLSAgICAg
ICAgICAgICAgICB9Ci0JCS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KLQkJTElTVF9SRU1PVkUo
dnJmLCBuZXh0X3ZyZik7Ci0JCVNDVFBfRlJFRSh2cmYsIFNDVFBfTV9WUkYpOwotCQlhdG9taWNf
c3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfdnJmcyksIDEpOwotCX0KLX0K
LQotCi12b2lkCi1zY3RwX2ZyZWVfaWZuKHN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wKQotewot
CWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoJnNjdHBfaWZucC0+cmVmY291
bnQpKSB7Ci0JCS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KLQkJaWYgKHNjdHBfaWZucC0+dnJm
KSB7Ci0JCQlzY3RwX2ZyZWVfdnJmKHNjdHBfaWZucC0+dnJmKTsKLQkJfQotCQlTQ1RQX0ZSRUUo
c2N0cF9pZm5wLCBTQ1RQX01fSUZOKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNF
X0lORk8oaXBpX2NvdW50X2lmbnMpLCAxKTsKLQl9Ci19Ci0KLQotdm9pZAotc2N0cF91cGRhdGVf
aWZuX210dSh1aW50MzJfdCBpZm5faW5kZXgsIHVpbnQzMl90IG10dSkKLXsKLQlzdHJ1Y3Qgc2N0
cF9pZm4gKnNjdHBfaWZucDsKLQotCXNjdHBfaWZucCA9IHNjdHBfZmluZF9pZm4oKHZvaWQgKilO
VUxMLCBpZm5faW5kZXgpOwotCWlmIChzY3RwX2lmbnAgIT0gTlVMTCkgewotCQlzY3RwX2lmbnAt
Pmlmbl9tdHUgPSBtdHU7Ci0JfQotfQotCi0KLXZvaWQKLXNjdHBfZnJlZV9pZmEoc3RydWN0IHNj
dHBfaWZhICpzY3RwX2lmYXApCi17Ci0JaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZD
T1VOVCgmc2N0cF9pZmFwLT5yZWZjb3VudCkpIHsKLQkJLyogV2UgemVybydkIHRoZSBjb3VudCAq
LwotCQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkgewotCQkJc2N0cF9mcmVlX2lmbihzY3RwX2lmYXAt
Pmlmbl9wKTsKLQkJfQotCQlTQ1RQX0ZSRUUoc2N0cF9pZmFwLCBTQ1RQX01fSUZBKTsKLQkJYXRv
bWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2lmYXMpLCAxKTsKLQl9
Ci19Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfZGVsZXRlX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNj
dHBfaWZucCwgaW50IGhvbGRfYWRkcl9sb2NrKQotewotCXN0cnVjdCBzY3RwX2lmbiAqZm91bmQ7
Ci0KLQlmb3VuZCA9IHNjdHBfZmluZF9pZm4oc2N0cF9pZm5wLT5pZm5fcCwgc2N0cF9pZm5wLT5p
Zm5faW5kZXgpOwotCWlmIChmb3VuZCA9PSBOVUxMKSB7Ci0JCS8qIE5vdCBpbiB0aGUgbGlzdC4u
IHNvcnJ5ICovCi0JCXJldHVybjsKLQl9Ci0JaWYgKGhvbGRfYWRkcl9sb2NrID09IDApCi0JCVND
VFBfSVBJX0FERFJfV0xPQ0soKTsKLQlMSVNUX1JFTU9WRShzY3RwX2lmbnAsIG5leHRfYnVja2V0
KTsKLQlMSVNUX1JFTU9WRShzY3RwX2lmbnAsIG5leHRfaWZuKTsKLQlTQ1RQX0RFUkVHSVNURVJf
SU5URVJGQUNFKHNjdHBfaWZucC0+aWZuX2luZGV4LAotCQkJCSAgc2N0cF9pZm5wLT5yZWdpc3Rl
cmVkX2FmKTsKLQlpZiAoaG9sZF9hZGRyX2xvY2sgPT0gMCkKLQkJU0NUUF9JUElfQUREUl9XVU5M
T0NLKCk7Ci0JLyogVGFrZSBhd2F5IHRoZSByZWZlcmVuY2UsIGFuZCBwb3NzaWJseSBmcmVlIGl0
ICovCi0Jc2N0cF9mcmVlX2lmbihzY3RwX2lmbnApOwotfQotCi0KLXZvaWQKLXNjdHBfbWFya19p
ZmFfYWRkcl9kb3duKHVpbnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJ
Y29uc3QgY2hhciAqaWZfbmFtZSwgdWludDMyX3QgaWZuX2luZGV4KQotewotCXN0cnVjdCBzY3Rw
X3ZyZiAqdnJmOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOwotCi0JU0NUUF9JUElfQURE
Ul9STE9DSygpOwotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5V
TEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHZyZl9pZCAweCV4
XG4iLCB2cmZfaWQpOwotCQlnb3RvIG91dDsKLQotCX0KLQlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRf
aWZhX2J5X2FkZHIoYWRkciwgdnJmLT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOwotCWlmIChz
Y3RwX2lmYXAgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNhbid0IGZp
bmQgc2N0cF9pZmFwIGZvciBhZGRyZXNzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChzY3Rw
X2lmYXAtPmlmbl9wID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEg
aGFzIG5vIElGTiAtIGNhbid0IG1hcmsgdW51c2FibGVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0J
aWYgKGlmX25hbWUpIHsKLQkJaWYgKHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5fcC0+
aWZuX25hbWUsIFNDVFBfSUZOQU1TSVopICE9IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19Q
Q0I0LCAiSUZOICVzIG9mIElGQSBub3QgdGhlIHNhbWUgYXMgJXNcbiIsCi0JCQkJc2N0cF9pZmFw
LT5pZm5fcC0+aWZuX25hbWUsIGlmX25hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2Ug
ewotCQlpZiAoc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4ICE9IGlmbl9pbmRleCkgewotCQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEgb3duZWQgYnkgaWZuX2luZGV4OiVkIGRvd24g
Y29tbWFuZCBmb3IgaWZuX2luZGV4OiVkIC0gaWdub3JlZFxuIiwKLQkJCQlzY3RwX2lmYXAtPmlm
bl9wLT5pZm5faW5kZXgsIGlmbl9pbmRleCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXNj
dHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgJj0gKH5TQ1RQX0FERFJfVkFMSUQpOwotCXNjdHBfaWZh
cC0+bG9jYWxpZmFfZmxhZ3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7Ci0gb3V0OgotCVND
VFBfSVBJX0FERFJfUlVOTE9DSygpOwotfQotCi0KLXZvaWQKLXNjdHBfbWFya19pZmFfYWRkcl91
cCh1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJICAgICAgY29uc3Qg
Y2hhciAqaWZfbmFtZSwgdWludDMyX3QgaWZuX2luZGV4KQotewotCXN0cnVjdCBzY3RwX3ZyZiAq
dnJmOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOwotCi0JU0NUUF9JUElfQUREUl9STE9D
SygpOwotCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsK
LQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHZyZl9pZCAweCV4XG4iLCB2
cmZfaWQpOwotCQlnb3RvIG91dDsKLQotCX0KLQlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5
X2FkZHIoYWRkciwgdnJmLT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOwotCWlmIChzY3RwX2lm
YXAgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkNhbid0IGZpbmQgc2N0
cF9pZmFwIGZvciBhZGRyZXNzXG4iKTsKLQkJZ290byBvdXQ7Ci0JfQotCWlmIChzY3RwX2lmYXAt
Pmlmbl9wID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEgaGFzIG5v
IElGTiAtIGNhbid0IG1hcmsgdW51c2FibGVcbiIpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKGlm
X25hbWUpIHsKLQkJaWYgKHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25h
bWUsIFNDVFBfSUZOQU1TSVopICE9IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAi
SUZOICVzIG9mIElGQSBub3QgdGhlIHNhbWUgYXMgJXNcbiIsCi0JCQkJc2N0cF9pZmFwLT5pZm5f
cC0+aWZuX25hbWUsIGlmX25hbWUpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9IGVsc2UgewotCQlp
ZiAoc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4ICE9IGlmbl9pbmRleCkgewotCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjQsICJJRkEgb3duZWQgYnkgaWZuX2luZGV4OiVkIGRvd24gY29tbWFu
ZCBmb3IgaWZuX2luZGV4OiVkIC0gaWdub3JlZFxuIiwKLQkJCQlzY3RwX2lmYXAtPmlmbl9wLT5p
Zm5faW5kZXgsIGlmbl9pbmRleCk7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCXNjdHBfaWZh
cC0+bG9jYWxpZmFfZmxhZ3MgJj0gKH5TQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSk7Ci0Jc2N0cF9p
ZmFwLT5sb2NhbGlmYV9mbGFncyB8PSBTQ1RQX0FERFJfVkFMSUQ7Ci0gb3V0OgotCVNDVFBfSVBJ
X0FERFJfUlVOTE9DSygpOwotfQotCi0KLS8qLQotICogQWRkIGFuIGlmYSB0byBhbiBpZm4uCi0g
KiBSZWdpc3RlciB0aGUgaW50ZXJmYWNlIGFzIG5lY2Vzc2FyeS4KLSAqIE5PVEU6IEFERFIgd3Jp
dGUgbG9jayBNVVNUIGJlIGhlbGQuCi0gKi8KLXN0YXRpYyB2b2lkCi1zY3RwX2FkZF9pZmFfdG9f
aWZuKHN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZh
cCkKLXsKLQlpbnQgaWZhX2FmOwotCi0JTElTVF9JTlNFUlRfSEVBRCgmc2N0cF9pZm5wLT5pZmFs
aXN0LCBzY3RwX2lmYXAsIG5leHRfaWZhKTsKLQlzY3RwX2lmYXAtPmlmbl9wID0gc2N0cF9pZm5w
OwotCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAtPmlmbl9wLT5yZWZjb3VudCwgMSk7Ci0JLyog
dXBkYXRlIGFkZHJlc3MgY291bnRzICovCi0Jc2N0cF9pZm5wLT5pZmFfY291bnQrKzsKLQlpZmFf
YWYgPSBzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5OwotCXN3aXRjaCAoaWZhX2FmKSB7
Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJc2N0cF9pZm5wLT5udW1fdjQrKzsKLQkJ
YnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCXNjdHBfaWZu
cC0+bnVtX3Y2Kys7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJYnJlYWs7Ci0JfQot
CWlmIChzY3RwX2lmbnAtPmlmYV9jb3VudCA9PSAxKSB7Ci0JCS8qIHJlZ2lzdGVyIHRoZSBuZXcg
aW50ZXJmYWNlICovCi0JCVNDVFBfUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZucC0+aWZuX2lu
ZGV4LCBpZmFfYWYpOwotCQlzY3RwX2lmbnAtPnJlZ2lzdGVyZWRfYWYgPSBpZmFfYWY7Ci0JfQot
fQotCi0KLS8qLQotICogUmVtb3ZlIGFuIGlmYSBmcm9tIGl0cyBpZm4uCi0gKiBJZiBubyBtb3Jl
IGFkZHJlc3NlcyBleGlzdCwgcmVtb3ZlIHRoZSBpZm4gdG9vLiBPdGhlcndpc2UsIHJlLXJlZ2lz
dGVyCi0gKiB0aGUgaW50ZXJmYWNlIGJhc2VkIG9uIHRoZSByZW1haW5pbmcgYWRkcmVzcyBmYW1p
bGllcyBsZWZ0LgotICogTk9URTogQUREUiB3cml0ZSBsb2NrIE1VU1QgYmUgaGVsZC4KLSAqLwot
c3RhdGljIHZvaWQKLXNjdHBfcmVtb3ZlX2lmYV9mcm9tX2lmbihzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhcCkKLXsKLQlMSVNUX1JFTU9WRShzY3RwX2lmYXAsIG5leHRfaWZhKTsKLQlpZiAoc2N0
cF9pZmFwLT5pZm5fcCkgewotCQkvKiB1cGRhdGUgYWRkcmVzcyBjb3VudHMgKi8KLQkJc2N0cF9p
ZmFwLT5pZm5fcC0+aWZhX2NvdW50LS07Ci0JCXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotCQkJc2N0cF9pZmFw
LT5pZm5fcC0+bnVtX3Y0LS07Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNh
c2UgQUZfSU5FVDY6Ci0JCQlzY3RwX2lmYXAtPmlmbl9wLT5udW1fdjYtLTsKLQkJCWJyZWFrOwot
I2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChMSVNUX0VNUFRZKCZz
Y3RwX2lmYXAtPmlmbl9wLT5pZmFsaXN0KSkgewotCQkJLyogcmVtb3ZlIHRoZSBpZm4sIHBvc3Np
Ymx5IGZyZWVpbmcgaXQgKi8KLQkJCXNjdHBfZGVsZXRlX2lmbihzY3RwX2lmYXAtPmlmbl9wLCBT
Q1RQX0FERFJfTE9DS0VEKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHJlLXJlZ2lzdGVyIGFkZHJlc3Mg
ZmFtaWx5IHR5cGUsIGlmIG5lZWRlZCAqLwotCQkJaWYgKChzY3RwX2lmYXAtPmlmbl9wLT5udW1f
djYgPT0gMCkgJiYKLQkJCSAgICAoc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJlZF9hZiA9PSBB
Rl9JTkVUNikpIHsKLQkJCQlTQ1RQX0RFUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZhcC0+aWZu
X3AtPmlmbl9pbmRleCwgQUZfSU5FVDYpOwotCQkJCVNDVFBfUkVHSVNURVJfSU5URVJGQUNFKHNj
dHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgQUZfSU5FVCk7Ci0JCQkJc2N0cF9pZmFwLT5pZm5f
cC0+cmVnaXN0ZXJlZF9hZiA9IEFGX0lORVQ7Ci0JCQl9IGVsc2UgaWYgKChzY3RwX2lmYXAtPmlm
bl9wLT5udW1fdjQgPT0gMCkgJiYKLQkJCQkgICAoc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0ZXJl
ZF9hZiA9PSBBRl9JTkVUKSkgewotCQkJCVNDVFBfREVSRUdJU1RFUl9JTlRFUkZBQ0Uoc2N0cF9p
ZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBBRl9JTkVUKTsKLQkJCQlTQ1RQX1JFR0lTVEVSX0lOVEVS
RkFDRShzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIEFGX0lORVQ2KTsKLQkJCQlzY3RwX2lm
YXAtPmlmbl9wLT5yZWdpc3RlcmVkX2FmID0gQUZfSU5FVDY7Ci0JCQl9Ci0JCQkvKiBmcmVlIHRo
ZSBpZm4gcmVmY291bnQgKi8KLQkJCXNjdHBfZnJlZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCk7Ci0J
CX0KLQkJc2N0cF9pZmFwLT5pZm5fcCA9IE5VTEw7Ci0JfQotfQotCi0KLXN0cnVjdCBzY3RwX2lm
YSAqCi1zY3RwX2FkZF9hZGRyX3RvX3ZyZih1aW50MzJfdCB2cmZfaWQsIHZvaWQgKmlmbiwgdWlu
dDMyX3QgaWZuX2luZGV4LAotCQkgICAgIHVpbnQzMl90IGlmbl90eXBlLCBjb25zdCBjaGFyICpp
Zl9uYW1lLCB2b2lkICppZmEsCi0JCSAgICAgc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJf
dCBpZmFfZmxhZ3MsCi0JCSAgICAgaW50IGR5bmFtaWNfYWRkKQotewotCXN0cnVjdCBzY3RwX3Zy
ZiAqdnJmOwotCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0
cF9pZmEgKnNjdHBfaWZhcCA9IE5VTEw7Ci0Jc3RydWN0IHNjdHBfaWZhbGlzdCAqaGFzaF9hZGRy
X2hlYWQ7Ci0Jc3RydWN0IHNjdHBfaWZubGlzdCAqaGFzaF9pZm5faGVhZDsKLQl1aW50MzJfdCBo
YXNoX29mX2FkZHI7Ci0JaW50IG5ld19pZm5fYWYgPSAwOwotCi0jaWZkZWYgU0NUUF9ERUJVRwot
CVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAidnJmX2lkIDB4JXg6IGFkZGluZyBhZGRyZXNzOiAi
LCB2cmZfaWQpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjQsIGFkZHIpOwotI2VuZGlm
Ci0JU0NUUF9JUElfQUREUl9XTE9DSygpOwotCXNjdHBfaWZucCA9IHNjdHBfZmluZF9pZm4oaWZu
LCBpZm5faW5kZXgpOwotCWlmIChzY3RwX2lmbnApIHsKLQkJdnJmID0gc2N0cF9pZm5wLT52cmY7
Ci0JfSBlbHNlIHsKLQkJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCQlpZiAodnJmID09
IE5VTEwpIHsKLQkJCXZyZiA9IHNjdHBfYWxsb2NhdGVfdnJmKHZyZl9pZCk7Ci0JCQlpZiAodnJm
ID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKLQkJCQlyZXR1cm4gKE5V
TEwpOwotCQkJfQotCQl9Ci0JfQotCWlmIChzY3RwX2lmbnAgPT0gTlVMTCkgewotCQkvKiBidWls
ZCBvbmUgYW5kIGFkZCBpdCwgY2FuJ3QgaG9sZCBsb2NrCi0JCSAqIHVudGlsIGFmdGVyIG1hbGxv
YyBkb25lIHRob3VnaC4KLQkJICovCi0JCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOwotCQlTQ1RQ
X01BTExPQyhzY3RwX2lmbnAsIHN0cnVjdCBzY3RwX2lmbiAqLAotCQkJICAgIHNpemVvZihzdHJ1
Y3Qgc2N0cF9pZm4pLCBTQ1RQX01fSUZOKTsKLQkJaWYgKHNjdHBfaWZucCA9PSBOVUxMKSB7Ci0j
aWZkZWYgSU5WQVJJQU5UUwotCQkJcGFuaWMoIk5vIG1lbW9yeSBmb3IgSUZOIik7Ci0jZW5kaWYK
LQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJbWVtc2V0KHNjdHBfaWZucCwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX2lmbikpOwotCQlzY3RwX2lmbnAtPmlmbl9pbmRleCA9IGlmbl9pbmRleDsKLQkJ
c2N0cF9pZm5wLT5pZm5fcCA9IGlmbjsKLQkJc2N0cF9pZm5wLT5pZm5fdHlwZSA9IGlmbl90eXBl
OwotCQlzY3RwX2lmbnAtPnJlZmNvdW50ID0gMDsKLQkJc2N0cF9pZm5wLT52cmYgPSB2cmY7Ci0J
CWF0b21pY19hZGRfaW50KCZ2cmYtPnJlZmNvdW50LCAxKTsKLQkJc2N0cF9pZm5wLT5pZm5fbXR1
ID0gU0NUUF9HQVRIRVJfTVRVX0ZST01fSUZOX0lORk8oaWZuLCBpZm5faW5kZXgsIGFkZHItPnNh
X2ZhbWlseSk7Ci0JCWlmIChpZl9uYW1lICE9IE5VTEwpIHsKLQkJCXNucHJpbnRmKHNjdHBfaWZu
cC0+aWZuX25hbWUsIFNDVFBfSUZOQU1TSVosICIlcyIsIGlmX25hbWUpOwotCQl9IGVsc2Ugewot
CQkJc25wcmludGYoc2N0cF9pZm5wLT5pZm5fbmFtZSwgU0NUUF9JRk5BTVNJWiwgIiVzIiwgInVu
a25vd24iKTsKLQkJfQotCQloYXNoX2lmbl9oZWFkID0gJlNDVFBfQkFTRV9JTkZPKHZyZl9pZm5f
aGFzaClbKGlmbl9pbmRleCAmIFNDVFBfQkFTRV9JTkZPKHZyZl9pZm5faGFzaG1hcmspKV07Ci0J
CUxJU1RfSU5JVCgmc2N0cF9pZm5wLT5pZmFsaXN0KTsKLQkJU0NUUF9JUElfQUREUl9XTE9DSygp
OwotCQlMSVNUX0lOU0VSVF9IRUFEKGhhc2hfaWZuX2hlYWQsIHNjdHBfaWZucCwgbmV4dF9idWNr
ZXQpOwotCQlMSVNUX0lOU0VSVF9IRUFEKCZ2cmYtPmlmbmxpc3QsIHNjdHBfaWZucCwgbmV4dF9p
Zm4pOwotCQlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2lmbnMpLCAx
KTsKLQkJbmV3X2lmbl9hZiA9IDE7Ci0JfQotCXNjdHBfaWZhcCA9IHNjdHBfZmluZF9pZmFfYnlf
YWRkcihhZGRyLCB2cmYtPnZyZl9pZCwgU0NUUF9BRERSX0xPQ0tFRCk7Ci0JaWYgKHNjdHBfaWZh
cCkgewotCQkvKiBIbW0sIGl0IGFscmVhZHkgZXhpc3RzPyAqLwotCQlpZiAoKHNjdHBfaWZhcC0+
aWZuX3ApICYmCi0JCSAgICAoc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4ID09IGlmbl9pbmRl
eCkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiVXNpbmcgZXhpc3RpbmcgaWZuICVz
ICgweCV4KSBmb3IgaWZhICVwXG4iLAotCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBp
Zm5faW5kZXgsCi0JCQkJKHZvaWQgKilzY3RwX2lmYXApOwotCQkJaWYgKG5ld19pZm5fYWYpIHsK
LQkJCQkvKiBSZW1vdmUgdGhlIGNyZWF0ZWQgb25lIHRoYXQgd2UgZG9uJ3Qgd2FudCAqLwotCQkJ
CXNjdHBfZGVsZXRlX2lmbihzY3RwX2lmbnAsIFNDVFBfQUREUl9MT0NLRUQpOwotCQkJfQotCQkJ
aWYgKHNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpIHsKLQkJ
CQkvKiBlYXN5IHRvIHNvbHZlLCBqdXN0IHN3aXRjaCBiYWNrIHRvIGFjdGl2ZSAqLwotCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiQ2xlYXJpbmcgZGVsZXRlZCBpZmEgZmxhZ1xuIik7Ci0J
CQkJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyA9IFNDVFBfQUREUl9WQUxJRDsKLQkJCQlzY3Rw
X2lmYXAtPmlmbl9wID0gc2N0cF9pZm5wOwotCQkJCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAt
Pmlmbl9wLT5yZWZjb3VudCwgMSk7Ci0JCQl9Ci0JCWV4aXRfc3RhZ2VfbGVmdDoKLQkJCVNDVFBf
SVBJX0FERFJfV1VOTE9DSygpOwotCQkJcmV0dXJuIChzY3RwX2lmYXApOwotCQl9IGVsc2Ugewot
CQkJaWYgKHNjdHBfaWZhcC0+aWZuX3ApIHsKLQkJCQkvKgotCQkJCSAqIFRoZSBsYXN0IElGTiBn
ZXRzIHRoZSBhZGRyZXNzLCByZW1vdmUgdGhlCi0JCQkJICogb2xkIG9uZQotCQkJCSAqLwotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiTW92aW5nIGlmYSAlcCBmcm9tICVzICgweCV4KSB0
byAlcyAoMHgleClcbiIsCi0JCQkJCSh2b2lkICopc2N0cF9pZmFwLCBzY3RwX2lmYXAtPmlmbl9w
LT5pZm5fbmFtZSwKLQkJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZl9uYW1lLAot
CQkJCQlpZm5faW5kZXgpOwotCQkJCS8qIHJlbW92ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBvbGQg
aWZuICovCi0JCQkJc2N0cF9yZW1vdmVfaWZhX2Zyb21faWZuKHNjdHBfaWZhcCk7Ci0JCQkJLyog
bW92ZSB0aGUgYWRkcmVzcyBvdmVyIHRvIHRoZSBuZXcgaWZuICovCi0JCQkJc2N0cF9hZGRfaWZh
X3RvX2lmbihzY3RwX2lmbnAsIHNjdHBfaWZhcCk7Ci0JCQkJZ290byBleGl0X3N0YWdlX2xlZnQ7
Ci0JCQl9IGVsc2UgewotCQkJCS8qIHJlcGFpciBpZm5wIHdoaWNoIHdhcyBOVUxMID8gKi8KLQkJ
CQlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEOwotCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19QQ0I0LCAiUmVwYWlyaW5nIGlmbiAlcCBmb3IgaWZhICVwXG4iLAotCQkJ
CQkodm9pZCAqKXNjdHBfaWZucCwgKHZvaWQgKilzY3RwX2lmYXApOwotCQkJCXNjdHBfYWRkX2lm
YV90b19pZm4oc2N0cF9pZm5wLCBzY3RwX2lmYXApOwotCQkJfQotCQkJZ290byBleGl0X3N0YWdl
X2xlZnQ7Ci0JCX0KLQl9Ci0JU0NUUF9JUElfQUREUl9XVU5MT0NLKCk7Ci0JU0NUUF9NQUxMT0Mo
c2N0cF9pZmFwLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmYSksIFND
VFBfTV9JRkEpOwotCWlmIChzY3RwX2lmYXAgPT0gTlVMTCkgewotI2lmZGVmIElOVkFSSUFOVFMK
LQkJcGFuaWMoIk5vIG1lbW9yeSBmb3IgSUZBIik7Ci0jZW5kaWYKLQkJcmV0dXJuIChOVUxMKTsK
LQl9Ci0JbWVtc2V0KHNjdHBfaWZhcCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lmYSkpOwotCXNj
dHBfaWZhcC0+aWZuX3AgPSBzY3RwX2lmbnA7Ci0JYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZucC0+
cmVmY291bnQsIDEpOwotCXNjdHBfaWZhcC0+dnJmX2lkID0gdnJmX2lkOwotCXNjdHBfaWZhcC0+
aWZhID0gaWZhOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JbWVtY3B5KCZzY3RwX2lmYXAtPmFkZHJl
c3MsIGFkZHIsIGFkZHItPnNhX2xlbik7Ci0jZWxzZQotCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJbWVtY3B5KCZzY3RwX2lmYXAtPmFk
ZHJlc3MsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJYnJlYWs7Ci0jZW5k
aWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCW1lbWNweSgmc2N0cF9pZmFwLT5h
ZGRyZXNzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlicmVhazsKLSNl
bmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCW1lbWNw
eSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBUU05IICovCi0JCWJyZWFrOwot
CX0KLSNlbmRpZgotCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxhZ3MgPSBTQ1RQX0FERFJfVkFMSUQg
fCBTQ1RQX0FERFJfREVGRVJfVVNFOwotCXNjdHBfaWZhcC0+ZmxhZ3MgPSBpZmFfZmxhZ3M7Ci0J
LyogU2V0IHNjb3BlICovCi0Jc3dpdGNoIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOwotCi0JCXNpbiA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luOwotCQlpZiAoU0NUUF9J
Rk5fSVNfSUZUX0xPT1Aoc2N0cF9pZmFwLT5pZm5fcCkgfHwKLQkJICAgIChJTjRfSVNMT09QQkFD
S19BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkpIHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lzX2xvb3Ag
PSAxOwotCQl9Ci0JCWlmICgoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkp
IHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lzX3ByaXYgPSAxOwotCQl9Ci0JCXNjdHBfaWZucC0+bnVt
X3Y0Kys7Ci0JCWlmIChuZXdfaWZuX2FmKQotCQkgICAgbmV3X2lmbl9hZiA9IEFGX0lORVQ7Ci0J
CWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0J
CS8qIG9rIHRvIHVzZSBkZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KLQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKLQotCQlzaW42ID0gJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42OwotCQlpZiAo
U0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZmFwLT5pZm5fcCkgfHwKLQkJICAgIChJTjZfSVNf
QUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSkpIHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lz
X2xvb3AgPSAxOwotCQl9Ci0JCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZf
YWRkcikpIHsKLQkJCXNjdHBfaWZhcC0+c3JjX2lzX3ByaXYgPSAxOwotCQl9Ci0JCXNjdHBfaWZu
cC0+bnVtX3Y2Kys7Ci0JCWlmIChuZXdfaWZuX2FmKQotCQkJbmV3X2lmbl9hZiA9IEFGX0lORVQ2
OwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2Fz
ZSBBRl9DT05OOgotCQlpZiAobmV3X2lmbl9hZikKLQkJCW5ld19pZm5fYWYgPSBBRl9DT05OOwot
CQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCW5ld19pZm5fYWYgPSAwOwotCQlicmVhazsK
LQl9Ci0JaGFzaF9vZl9hZGRyID0gc2N0cF9nZXRfaWZhX2hhc2hfdmFsKCZzY3RwX2lmYXAtPmFk
ZHJlc3Muc2EpOwotCi0JaWYgKChzY3RwX2lmYXAtPnNyY19pc19wcml2ID09IDApICYmCi0JICAg
IChzY3RwX2lmYXAtPnNyY19pc19sb29wID09IDApKSB7Ci0JCXNjdHBfaWZhcC0+c3JjX2lzX2ds
b2IgPSAxOwotCX0KLQlTQ1RQX0lQSV9BRERSX1dMT0NLKCk7Ci0JaGFzaF9hZGRyX2hlYWQgPSAm
dnJmLT52cmZfYWRkcl9oYXNoWyhoYXNoX29mX2FkZHIgJiB2cmYtPnZyZl9hZGRyX2hhc2htYXJr
KV07Ci0JTElTVF9JTlNFUlRfSEVBRChoYXNoX2FkZHJfaGVhZCwgc2N0cF9pZmFwLCBuZXh0X2J1
Y2tldCk7Ci0Jc2N0cF9pZmFwLT5yZWZjb3VudCA9IDE7Ci0JTElTVF9JTlNFUlRfSEVBRCgmc2N0
cF9pZm5wLT5pZmFsaXN0LCBzY3RwX2lmYXAsIG5leHRfaWZhKTsKLQlzY3RwX2lmbnAtPmlmYV9j
b3VudCsrOwotCXZyZi0+dG90YWxfaWZhX2NvdW50Kys7Ci0JYXRvbWljX2FkZF9pbnQoJlNDVFBf
QkFTRV9JTkZPKGlwaV9jb3VudF9pZmFzKSwgMSk7Ci0JaWYgKG5ld19pZm5fYWYpIHsKLQkJU0NU
UF9SRUdJU1RFUl9JTlRFUkZBQ0UoaWZuX2luZGV4LCBuZXdfaWZuX2FmKTsKLQkJc2N0cF9pZm5w
LT5yZWdpc3RlcmVkX2FmID0gbmV3X2lmbl9hZjsKLQl9Ci0JU0NUUF9JUElfQUREUl9XVU5MT0NL
KCk7Ci0JaWYgKGR5bmFtaWNfYWRkKSB7Ci0JCS8qIEJ1bXAgdXAgdGhlIHJlZmNvdW50IHNvIHRo
YXQgd2hlbiB0aGUgdGltZXIKLQkJICogY29tcGxldGVzIGl0IHdpbGwgZHJvcCBiYWNrIGRvd24u
Ci0JCSAqLwotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqd2k7Ci0KLQkJYXRvbWljX2FkZF9pbnQoJnNj
dHBfaWZhcC0+cmVmY291bnQsIDEpOwotCQl3aSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7Ci0JCWlmICh3aSA9PSBOVUxM
KSB7Ci0JCQkvKgotCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBkbz8gV2UgaGF2ZSBsb3N0IGFuIGFk
ZHJlc3MKLQkJCSAqIGNoYW5nZSBjYW4geW91IHNheSBIT1NFRD8KLQkJCSAqLwotCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjQsICJMb3N0IGFuIGFkZHJlc3MgY2hhbmdlP1xuIik7Ci0JCQkvKiBP
cHBzLCBtdXN0IGRlY3JlbWVudCB0aGUgY291bnQgKi8KLQkJCXNjdHBfZGVsX2FkZHJfZnJvbV92
cmYodnJmX2lkLCBhZGRyLCBpZm5faW5kZXgsCi0JCQkJCSAgICAgICBpZl9uYW1lKTsKLQkJCXJl
dHVybiAoTlVMTCk7Ci0JCX0KLQkJU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7Ci0JCW1lbXNldCh3
aSwgMCwgc2l6ZW9mKCp3aSkpOwotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmd2ktPnN0
YXJ0X3RpbWUpOwotCQl3aS0+aWZhID0gc2N0cF9pZmFwOwotCQl3aS0+YWN0aW9uID0gU0NUUF9B
RERfSVBfQUREUkVTUzsKLQotCQlTQ1RQX1dRX0FERFJfTE9DSygpOwotCQlMSVNUX0lOU0VSVF9I
RUFEKCZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSwgd2ksIHNjdHBfbnh0X2FkZHIpOwotCQlTQ1RQ
X1dRX0FERFJfVU5MT0NLKCk7Ci0KLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
QUREUl9XUSwKLQkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKLQkJCQkgKHN0cnVjdCBz
Y3RwX3RjYiAqKU5VTEwsCi0JCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7Ci0JfSBlbHNl
IHsKLQkJLyogaXQncyByZWFkeSBmb3IgdXNlICovCi0JCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxh
Z3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7Ci0JfQotCXJldHVybiAoc2N0cF9pZmFwKTsKLX0K
LQotdm9pZAotc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZih1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBz
b2NrYWRkciAqYWRkciwKLQkJICAgICAgIHVpbnQzMl90IGlmbl9pbmRleCwgY29uc3QgY2hhciAq
aWZfbmFtZSkKLXsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNj
dHBfaWZhcCA9IE5VTEw7Ci0KLQlTQ1RQX0lQSV9BRERSX1dMT0NLKCk7Ci0JdnJmID0gc2N0cF9m
aW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVC
VUdfUENCNCwgIkNhbid0IGZpbmQgdnJmX2lkIDB4JXhcbiIsIHZyZl9pZCk7Ci0JCWdvdG8gb3V0
X25vdzsKLQl9Ci0KLSNpZmRlZiBTQ1RQX0RFQlVHCi0JU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQs
ICJ2cmZfaWQgMHgleDogZGVsZXRpbmcgYWRkcmVzczoiLCB2cmZfaWQpOwotCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX1BDQjQsIGFkZHIpOwotI2VuZGlmCi0Jc2N0cF9pZmFwID0gc2N0cF9maW5k
X2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+dnJmX2lkLCBTQ1RQX0FERFJfTE9DS0VEKTsKLQlpZiAo
c2N0cF9pZmFwKSB7Ci0JCS8qIFZhbGlkYXRlIHRoZSBkZWxldGUgKi8KLQkJaWYgKHNjdHBfaWZh
cC0+aWZuX3ApIHsKLQkJCWludCB2YWxpZCA9IDA7Ci0JCQkvKi0KLQkJCSAqIFRoZSBuYW1lIGhh
cyBwcmlvcml0eSBvdmVyIHRoZSBpZm5faW5kZXgKLQkJCSAqIGlmIGl0cyBnaXZlbi4gV2UgZG8g
dGhpcyBlc3BlY2lhbGx5IGZvcgotCQkJICogcGFuZGEgd2hvIG1pZ2h0IHJlY3ljbGUgaW5kZXhl
cyBmYXN0LgotCQkJICovCi0JCQlpZiAoaWZfbmFtZSkgewotCQkJCWlmIChzdHJuY21wKGlmX25h
bWUsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0laKSA9PSAwKSB7Ci0J
CQkJCS8qIFRoZXkgbWF0Y2ggaXRzIGEgY29ycmVjdCBkZWxldGUgKi8KLQkJCQkJdmFsaWQgPSAx
OwotCQkJCX0KLQkJCX0KLQkJCWlmICghdmFsaWQpIHsKLQkJCQkvKiBsYXN0IGRpdGNoIGNoZWNr
IGlmbl9pbmRleCAqLwotCQkJCWlmIChpZm5faW5kZXggPT0gc2N0cF9pZmFwLT5pZm5fcC0+aWZu
X2luZGV4KSB7Ci0JCQkJCXZhbGlkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoIXZhbGlkKSB7
Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJpZm46JWQgaWZuYW1lOiVzIGRvZXMgbm90
IG1hdGNoIGFkZHJlc3Nlc1xuIiwKLQkJCQkJaWZuX2luZGV4LCAoKGlmX25hbWUgPT0gTlVMTCkg
PyAiTlVMTCIgOiBpZl9uYW1lKSk7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJpZm46
JWQgaWZuYW1lOiVzIC0gaWdub3JpbmcgZGVsZXRlXG4iLAotCQkJCQlzY3RwX2lmYXAtPmlmbl9w
LT5pZm5faW5kZXgsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lKTsKLQkJCQlTQ1RQX0lQSV9B
RERSX1dVTkxPQ0soKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1BDQjQsICJEZWxldGluZyBpZmEgJXBcbiIsICh2b2lkICopc2N0cF9pZmFwKTsKLQkJc2N0
cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSBTQ1RQX0FERFJfVkFMSUQ7Ci0gICAgICAgICAgICAg
ICAgLyoKLQkJICogV2UgZG9uJ3Qgc2V0IHRoZSBmbGFnLiBUaGlzIG1lYW5zIHRoYXQgdGhlIHN0
cnVjdHVyZSB3aWxsCi0JCSAqIGhhbmcgYXJvdW5kIGluIEVQJ3MgdGhhdCBoYXZlIGJvdW5kIHNw
ZWNpZmljIHRvIGl0IHVudGlsCi0JCSAqIHRoZXkgY2xvc2UuIFRoaXMgZ2l2ZXMgdXMgVENQIGxp
a2UgYmVoYXZpb3IgaWYgc29tZW9uZQotCQkgKiByZW1vdmVzIGFuIGFkZHJlc3MgKG9yIGZvciB0
aGF0IG1hdHRlciBhZGRzIGl0IHJpZ2h0IGJhY2spLgotCQkgKi8KLQkJLyogc2N0cF9pZmFwLT5s
b2NhbGlmYV9mbGFncyB8PSBTQ1RQX0JFSU5HX0RFTEVURUQ7ICovCi0JCXZyZi0+dG90YWxfaWZh
X2NvdW50LS07Ci0JCUxJU1RfUkVNT1ZFKHNjdHBfaWZhcCwgbmV4dF9idWNrZXQpOwotCQlzY3Rw
X3JlbW92ZV9pZmFfZnJvbV9pZm4oc2N0cF9pZmFwKTsKLQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwot
CWVsc2UgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkRlbCBBZGRyLWlmbjolZCBDb3Vs
ZCBub3QgZmluZCBhZGRyZXNzOiIsCi0JCQlpZm5faW5kZXgpOwotCQlTQ1RQREJHX0FERFIoU0NU
UF9ERUJVR19QQ0IxLCBhZGRyKTsKLQl9Ci0jZW5kaWYKLQotIG91dF9ub3c6Ci0JU0NUUF9JUElf
QUREUl9XVU5MT0NLKCk7Ci0JaWYgKHNjdHBfaWZhcCkgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAq
d2k7Ci0KLQkJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRy
KSwgc3RydWN0IHNjdHBfbGFkZHIpOwotCQlpZiAod2kgPT0gTlVMTCkgewotCQkJLyoKLQkJCSAq
IEdhaywgd2hhdCBjYW4gd2UgZG8/IFdlIGhhdmUgbG9zdCBhbiBhZGRyZXNzCi0JCQkgKiBjaGFu
Z2UgY2FuIHlvdSBzYXkgSE9TRUQ/Ci0JCQkgKi8KLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiTG9zdCBhbiBhZGRyZXNzIGNoYW5nZT9cbiIpOwotCi0JCQkvKiBPb3BzLCBtdXN0IGRlY3Jl
bWVudCB0aGUgY291bnQgKi8KLQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmFwKTsKLQkJCXJldHVy
bjsKLQkJfQotCQlTQ1RQX0lOQ1JfTEFERFJfQ09VTlQoKTsKLQkJbWVtc2V0KHdpLCAwLCBzaXpl
b2YoKndpKSk7Ci0JCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ3aS0+c3RhcnRfdGltZSk7
Ci0JCXdpLT5pZmEgPSBzY3RwX2lmYXA7Ci0JCXdpLT5hY3Rpb24gPSBTQ1RQX0RFTF9JUF9BRERS
RVNTOwotCQlTQ1RQX1dRX0FERFJfTE9DSygpOwotCQkvKgotCQkgKiBTaG91bGQgdGhpcyByZWFs
bHkgYmUgYSB0YWlscT8gQXMgaXQgaXMgd2Ugd2lsbCBwcm9jZXNzIHRoZQotCQkgKiBuZXdlc3Qg
Zmlyc3QgOi0wCi0JCSAqLwotCQlMSVNUX0lOU0VSVF9IRUFEKCZTQ1RQX0JBU0VfSU5GTyhhZGRy
X3dxKSwgd2ksIHNjdHBfbnh0X2FkZHIpOwotCQlTQ1RQX1dRX0FERFJfVU5MT0NLKCk7Ci0KLQkJ
c2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSwKLQkJCQkgKHN0cnVjdCBz
Y3RwX2lucGNiICopTlVMTCwKLQkJCQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCi0JCQkJIChz
dHJ1Y3Qgc2N0cF9uZXRzICopTlVMTCk7Ci0JfQotCXJldHVybjsKLX0KLQotCi1zdGF0aWMgaW50
Ci1zY3RwX2RvZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNvY2thZGRyICp0bykKLXsKLQlpbnQgbG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJ
TkVUKQotCWludCBpcHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKElORVQ2KQotCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRy
X2xlZ2FsOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWludCBjb25uX2Fk
ZHJfbGVnYWw7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9p
Zm4gKnNjdHBfaWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0KLQlsb29wYmFja19z
Y29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVU
KQotCWlwdjRfbG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7
Ci0JaXB2NF9hZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29w
ZS5sb2NhbF9zY29wZTsKLQlzaXRlX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3Bl
OwotCWlwdjZfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOwot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNvbm5fYWRkcl9sZWdhbCA9IHN0
Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0KLQlTQ1RQX0lQSV9BRERS
X1JMT0NLKCk7Ci0JdnJmID0gc2N0cF9maW5kX3ZyZihzdGNiLT5hc29jLnZyZl9pZCk7Ci0JaWYg
KHZyZiA9PSBOVUxMKSB7Ci0JCS8qIG5vIHZyZiwgbm8gYWRkcmVzc2VzICovCi0JCVNDVFBfSVBJ
X0FERFJfUlVOTE9DSygpOwotCQlyZXR1cm4gKDApOwotCX0KLQotCWlmIChzdGNiLT5zY3RwX2Vw
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJTElTVF9GT1JFQUNI
KHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJaWYgKChsb29wYmFja19z
Y29wZSA9PSAwKSAmJgotCQkJICAgIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgewot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4t
PmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0
Y2IsIHNjdHBfaWZhKSAmJgotCQkJCSAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNj
dHBfaWZhKSkpIHsKLQkJCQkJLyogV2UgYWxsb3cgcGVuZGluZyBhZGRyZXNzZXMsIHdoZXJlIHdl
Ci0JCQkJCSAqIGhhdmUgc2VudCBhbiBhc2NvbmYtYWRkIHRvIGJlIGNvbnNpZGVyZWQKLQkJCQkJ
ICogdmFsaWQuCi0JCQkJCSAqLwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKHNjdHBf
aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSAhPSB0by0+c2FfZmFtaWx5KSB7Ci0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLQkJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkg
ewotI2lmZGVmIElORVQKLQkJCQljYXNlIEFGX0lORVQ6Ci0JCQkJCWlmIChpcHY0X2FkZHJfbGVn
YWwpIHsKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKLQotCQkJCQkJc2lu
ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKLQkJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopdG87Ci0JCQkJCQlpZiAoKGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAg
ICBJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSB7Ci0JCQkJCQkJY29udGlu
dWU7Ci0JCQkJCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25f
Y2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkgewotCQkJCQkJCWNvbnRpbnVl
OwotCQkJCQkJfQotI2VuZGlmCi0JCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gcnNp
bi0+c2luX2FkZHIuc19hZGRyKSB7Ci0JCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0J
CQkJCQkJcmV0dXJuICgxKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJaWYgKGlwdjZfYWRkcl9sZWdh
bCkgewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42OwotI2lmIGRlZmlu
ZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQotCQkJCQkJ
c3RydWN0IHNvY2thZGRyX2luNiBsc2E2OwotI2VuZGlmCi0JCQkJCQlzaW42ID0gJnNjdHBfaWZh
LT5hZGRyZXNzLnNpbjY7Ci0JCQkJCQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0
Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9
Ci0jZW5kaWYKLQkJCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikpIHsKLQkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0gMCkKLQkJCQkJCQkJY29udGludWU7Ci0j
aWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQotCQkJCQkJCWlmIChzaW42LT5zaW42
X3Njb3BlX2lkID09IDApIHsKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkJCQkJaWYgKHNhNl9yZWNv
dmVyc2NvcGUoc2luNikgIT0gMCkKLQkJCQkJCQkJCWNvbnRpbnVlOwotI2Vsc2UKLQkJCQkJCQkJ
bHNhNiA9ICpzaW42OwotCQkJCQkJCQlpZiAoaW42X3JlY292ZXJzY29wZSgmbHNhNiwKLQkJCQkJ
CQkJICAgICAgICAgICAgICAgICAgICAgJmxzYTYuc2luNl9hZGRyLAotCQkJCQkJCQkgICAgICAg
ICAgICAgICAgICAgICBOVUxMKSkKLQkJCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJCQlzaW42ID0g
JmxzYTY7Ci0jZW5kaWYgLyogU0NUUF9LQU1FICovCi0JCQkJCQkJfQotI2VuZGlmIC8qIFNDVFBf
RU1CRURERURfVjZfU0NPUEUgKi8KLQkJCQkJCX0KLQkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAw
KSAmJgotCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikp
KSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJf
RVFVQUwoc2luNiwgcnNpbjYpKSB7Ci0JCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0J
CQkJCQkJcmV0dXJuICgxKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJCWlmIChj
b25uX2FkZHJfbGVnYWwpIHsKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJz
Y29ubjsKLQotCQkJCQkJc2Nvbm4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm47Ci0JCQkJCQly
c2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKLQkJCQkJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJCQlTQ1RQX0lQSV9BRERSX1JV
TkxPQ0soKTsKLQkJCQkJCQlyZXR1cm4gKDEpOwotCQkJCQkJfQotCQkJCQl9Ci0JCQkJCWJyZWFr
OwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJLyogVFNOSCAqLwotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0K
LQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNj
dHBfbnh0X2FkZHIpIHsKLQkJCWlmIChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBf
QkVJTkdfREVMRVRFRCkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5n
IGRlbGV0ZWRcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHNjdHBfaXNfYWRkcl9y
ZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEpICYmCi0JCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVu
ZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpIHsKLQkJCQkvKiBXZSBhbGxvdyBwZW5kaW5nIGFkZHJl
c3Nlcywgd2hlcmUgd2UKLQkJCQkgKiBoYXZlIHNlbnQgYW4gYXNjb25mLWFkZCB0byBiZSBjb25z
aWRlcmVkCi0JCQkJICogdmFsaWQuCi0JCQkJICovCi0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlp
ZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gdG8tPnNhX2ZhbWlseSkgewot
CQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYg
SU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
LCAqcnNpbjsKLQotCQkJCXNpbiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKLQkJCQlyc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXRvOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRk
ciA9PSByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NL
KCk7Ci0JCQkJCXJldHVybiAoMSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQl7Ci0JCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNiwgKnJzaW42OwotCi0JCQkJc2luNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNp
bjY7Ci0JCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvOwotCQkJCWlmIChTQ1RQ
Nl9BUkVfQUREUl9FUVVBTChzaW42LCByc2luNikpIHsKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5M
T0NLKCk7Ci0JCQkJCXJldHVybiAoMSk7Ci0JCQkJfQotCQkJCWJyZWFrOwotCQkJfQotCi0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQljYXNlIEFGX0NPTk46Ci0JCQl7Ci0J
CQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAqcnNjb25uOwotCi0JCQkJc2Nvbm4gPSAm
bGFkZHItPmlmYS0+YWRkcmVzcy5zY29ubjsKLQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRy
X2Nvbm4gKil0bzsKLQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9h
ZGRyKSB7Ci0JCQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOwotCQkJCQlyZXR1cm4gKDEpOwot
CQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05I
ICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0KLQkJfQotCX0KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0so
KTsKLQlyZXR1cm4gKDApOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF90
Y2Jfc3BlY2lhbF9sb2NhdGUoc3RydWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNvY2th
ZGRyICpmcm9tLAotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sIHN0cnVjdCBzY3RwX25ldHMgKipu
ZXRwLCB1aW50MzJfdCB2cmZfaWQpCi17Ci0JLyoqKiogQVNTVU1FUyBUSEUgQ0FMTEVSIGhvbGRz
IHRoZSBJTlBfSU5GT19STE9DSyAqLwotCS8qCi0JICogSWYgd2Ugc3VwcG9ydCB0aGUgVENQIG1v
ZGVsLCB0aGVuIHdlIG11c3Qgbm93IGRpZyB0aHJvdWdoIHRvIHNlZQotCSAqIGlmIHdlIGNhbiBm
aW5kIG91ciBlbmRwb2ludCBpbiB0aGUgbGlzdCBvZiB0Y3AgZXAncy4KLQkgKi8KLQl1aW50MTZf
dCBscG9ydCwgcnBvcnQ7Ci0Jc3RydWN0IHNjdHBwY2JoZWFkICplcGhlYWQ7Ci0Jc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3RydWN0IHNjdHBf
dGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLSNpZmRlZiBTQ1RQX01WUkYKLQlp
bnQgZm5kLCBpOwotI2VuZGlmCi0KLQlpZiAoKHRvID09IE5VTEwpIHx8IChmcm9tID09IE5VTEwp
KSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCi0Jc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7Ci0j
aWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9J
TkVUKSB7Ci0JCQlscG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopdG8pLT5zaW5fcG9ydDsK
LQkJCXJwb3J0ID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tKS0+c2luX3BvcnQ7Ci0JCX0g
ZWxzZSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYg
SU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2
KSB7Ci0JCQlscG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luNiAqKXRvKS0+c2luNl9wb3J0Owot
CQkJcnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilmcm9tKS0+c2luNl9wb3J0OwotCQl9
IGVsc2UgewotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCWlmIChmcm9tLT5zYV9mYW1p
bHkgPT0gQUZfQ09OTikgewotCQkJbHBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG8p
LT5zY29ubl9wb3J0OwotCQkJcnBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZnJvbSkt
PnNjb25uX3BvcnQ7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWJyZWFr
OwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JZXBoZWFkID0gJlND
VFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUigobHBvcnQg
fCBycG9ydCksIFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSldOwotCS8qCi0JICogT2sgbm93
IGZvciBlYWNoIG9mIHRoZSBndXlzIGluIHRoaXMgYnVja2V0IHdlIG11c3QgbG9vayBhbmQgc2Vl
OgotCSAqIC0gRG9lcyB0aGUgcmVtb3RlIHBvcnQgbWF0Y2guIC0gRG9lcyB0aGVyZSBzaW5nbGUg
YXNzb2NpYXRpb24ncwotCSAqIGFkZHJlc3NlcyBtYXRjaCB0aGlzIGFkZHJlc3MgKHRvKS4gSWYg
c28gd2UgdXBkYXRlIHBfZXAgdG8gcG9pbnQKLQkgKiB0byB0aGlzIGVwIGFuZCByZXR1cm4gdGhl
IHRjYiBmcm9tIGl0LgotCSAqLwotCUxJU1RfRk9SRUFDSChpbnAsIGVwaGVhZCwgc2N0cF9oYXNo
KSB7Ci0JCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwot
CQkJY29udGludWU7Ci0JCX0KLQkJaWYgKGxwb3J0ICE9IGlucC0+c2N0cF9scG9ydCkgewotCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJY29udGludWU7Ci0JCX0KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQotCQlzd2l0Y2ggKHRvLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNh
c2UgQUZfSU5FVDoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCXNpbiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKLQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9h
ZGRyKSAhPSAwKSB7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5F
VDY6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXRvOwotCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAotCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZfYWRk
cikgIT0gMCkgewotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX01WUkYKLQkJ
Zm5kID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewotCQkJaWYg
KGlucC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgewotCQkJCWZuZCA9IDE7Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCX0KLQkJaWYgKGZuZCA9PSAwKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQljb250aW51ZTsKLQkJfQotI2Vsc2UKLQkJaWYgKGlucC0+ZGVmX3ZyZl9pZCAhPSB2cmZf
aWQpIHsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0jZW5k
aWYKLQkJLyogY2hlY2sgdG8gc2VlIGlmIHRoZSBlcCBoYXMgb25lIG9mIHRoZSBhZGRyZXNzZXMg
Ki8KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0g
MCkgewotCQkJLyogV2UgYXJlIE5PVCBib3VuZCBhbGwsIHNvIGxvb2sgZnVydGhlciAqLwotCQkJ
aW50IG1hdGNoID0gMDsKLQotCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJf
bGlzdCwgc2N0cF9ueHRfYWRkcikgewotCi0JCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewot
CQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwgX19mdW5jX18p
OwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2Zs
YWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7Ci0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0Ix
LCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQkJaWYg
KGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09Ci0JCQkJICAgIHRvLT5zYV9mYW1p
bHkpIHsKLQkJCQkJLyogc2VlIGlmIGl0IG1hdGNoZXMgKi8KLSNpZmRlZiBJTkVUCi0JCQkJCWlm
IChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2lu
ICppbnRmX2FkZHIsICpzaW47Ci0KLQkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRy
ZXNzLnNpbjsKLQkJCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKLQkJCQkJCWlm
IChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQotCQkJCQkJICAgIGludGZfYWRkci0+c2luX2FkZHIu
c19hZGRyKSB7Ci0JCQkJCQkJbWF0Y2ggPSAxOwotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQotCQkJ
CQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFG
X0lORVQ2KSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbnRmX2FkZHI2OwotCQkJCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopCi0JCQkJCQkgICAgdG87Ci0JCQkJCQlpbnRmX2FkZHI2ID0gJmxhZGRyLT5pZmEt
PmFkZHJlc3Muc2luNjsKLQotCQkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCi0J
CQkJCQkgICAgaW50Zl9hZGRyNikpIHsKLQkJCQkJCQltYXRjaCA9IDE7Ci0JCQkJCQkJYnJlYWs7
Ci0JCQkJCQl9Ci0JCQkJCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
CQkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqaW50Zl9hZGRyLCAqc2Nvbm47Ci0KLQkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+
aWZhLT5hZGRyZXNzLnNjb25uOwotCQkJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4g
Kil0bzsKLQkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PQotCQkJCQkJICAgIGludGZfYWRk
ci0+c2Nvbm5fYWRkcikgewotCQkJCQkJCW1hdGNoID0gMTsKLQkJCQkJCQlicmVhazsKLQkJCQkJ
CX0KLQkJCQkJfQotI2VuZGlmCi0JCQkJfQotCQkJfQotCQkJaWYgKG1hdGNoID09IDApIHsKLQkJ
CQkvKiBUaGlzIGVuZHBvaW50IGRvZXMgbm90IGhhdmUgdGhpcyBhZGRyZXNzICovCi0JCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQl9Ci0JCS8qCi0JCSAq
IE9rIGlmIHdlIGhpdCBoZXJlIHRoZSBlcCBoYXMgdGhlIGFkZHJlc3MsIGRvZXMgaXQgaG9sZAot
CQkgKiB0aGUgdGNiPwotCQkgKi8KLQkJLyogWFhYOiBXaHkgZG9uJ3Qgd2UgVEFJTFFfRk9SRUFD
SCB0aHJvdWdoIHNjdHBfYXNvY19saXN0PyAqLwotCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5z
Y3RwX2Fzb2NfbGlzdCk7Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWlm
ICghc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0bykpIHsKLQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwot
CQl9Ci0JCWlmIChzdGNiLT5ycG9ydCAhPSBycG9ydCkgewotCQkJLyogcmVtb3RlIHBvcnQgZG9l
cyBub3QgbWF0Y2guICovCi0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAm
IFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmICgh
c2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihzdGNiLCB0bykpIHsKLQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9
Ci0JCS8qIERvZXMgdGhpcyBUQ0IgaGF2ZSBhIG1hdGNoaW5nIGFkZHJlc3M/ICovCi0JCVRBSUxR
X0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQotCQkJaWYgKG5l
dC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgIT0gZnJvbS0+c2FfZmFtaWx5KSB7Ci0JCQkJLyog
bm90IHRoZSBzYW1lIGZhbWlseSwgY2FuJ3QgYmUgYSBtYXRjaCAqLwotCQkJCWNvbnRpbnVlOwot
CQkJfQotCQkJc3dpdGNoIChmcm9tLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQljYXNl
IEFGX0lORVQ6Ci0JCQl7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICpyc2luOwotCi0J
CQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJcnNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmcm9tOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNf
YWRkciA9PQotCQkJCSAgICByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJLyogZm91bmQg
aXQgKi8KLQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJ
CX0KLQkJCQkJLyogVXBkYXRlIHRoZSBlbmRwb2ludCBwb2ludGVyICovCi0JCQkJCSppbnBfcCA9
IGlucDsKLQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCQlyZXR1cm4gKHN0Y2IpOwot
CQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFG
X0lORVQ2OgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsICpyc2luNjsKLQot
CQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJ
cnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWZyb207Ci0JCQkJaWYgKFNDVFA2X0FSRV9B
RERSX0VRVUFMKHNpbjYsCi0JCQkJICAgIHJzaW42KSkgewotCQkJCQkvKiBmb3VuZCBpdCAqLwot
CQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7Ci0JCQkJCQkqbmV0cCA9IG5ldDsKLQkJCQkJfQotCQkJ
CQkvKiBVcGRhdGUgdGhlIGVuZHBvaW50IHBvaW50ZXIgKi8KLQkJCQkJKmlucF9wID0gaW5wOwot
CQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCXJldHVybiAoc3RjYik7Ci0JCQkJfQot
CQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJ
Y2FzZSBBRl9DT05OOgotCQkJewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJz
Y29ubjsKLQotCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xf
YWRkcjsKLQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilmcm9tOwotCQkJCWlm
IChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJLyogZm91
bmQgaXQgKi8KLQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJKm5ldHAgPSBuZXQ7Ci0J
CQkJCX0KLQkJCQkJLyogVXBkYXRlIHRoZSBlbmRwb2ludCBwb2ludGVyICovCi0JCQkJCSppbnBf
cCA9IGlucDsKLQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCQlyZXR1cm4gKHN0Y2Ip
OwotCQkJCX0KLQkJCQlicmVhazsKLQkJCX0KLSNlbmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBU
U05IICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLQotLyoK
LSAqIHJ1bGVzIGZvciB1c2UKLSAqCi0gKiAxKSBJZiBJIHJldHVybiBhIE5VTEwgeW91IG11c3Qg
ZGVjcmVtZW50IGFueSBJTlAgcmVmIGNudC4gMikgSWYgSSBmaW5kIGFuCi0gKiBzdGNiLCBib3Ro
IHdpbGwgYmUgbG9ja2VkIChsb2NrZWRfdGNiIGFuZCBzdGNiKSBidXQgZGVjcmVtZW50IHdpbGwg
YmUgZG9uZQotICogKGlmIGxvY2tlZCA9PSBOVUxMKS4gMykgRGVjcmVtZW50IGhhcHBlbnMgb24g
cmV0dXJuIE9OTFkgaWYgbG9ja2VkID09Ci0gKiBOVUxMLgotICovCi0KLXN0cnVjdCBzY3RwX3Rj
YiAqCi1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKHN0cnVjdCBzY3RwX2lucGNiICoqaW5w
X3AsIHN0cnVjdCBzb2NrYWRkciAqcmVtb3RlLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKipuZXRw
LCBzdHJ1Y3Qgc29ja2FkZHIgKmxvY2FsLCBzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2tlZF90Y2IpCi17
Ci0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwot
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9IE5VTEw7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0Owot
CXVpbnQxNl90IHJwb3J0OwotCi0JaW5wID0gKmlucF9wOwotCXN3aXRjaCAocmVtb3RlLT5zYV9m
YW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlycG9ydCA9ICgoKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKXJlbW90ZSktPnNpbl9wb3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5FVDY6Ci0JCXJwb3J0ID0gKCgoc3RydWN0IHNvY2thZGRy
X2luNiAqKXJlbW90ZSktPnNpbjZfcG9ydCk7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQkJcnBvcnQgPSAoKChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopcmVtb3RlKS0+c2luNl9wb3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZh
dWx0OgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlpZiAobG9ja2VkX3RjYikgewotCQkvKgotCQkg
KiBVTi1sb2NrIHNvIHdlIGNhbiBkbyBwcm9wZXIgbG9ja2luZyBoZXJlIHRoaXMgb2NjdXJzIHdo
ZW4KLQkJICogY2FsbGVkIGZyb20gbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0LgotCQkgKi8KLQkJ
YXRvbWljX2FkZF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0Jf
VU5MT0NLKGxvY2tlZF90Y2IpOwotCX0KLQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJLyotCi0JCSAqIE5v
dyBlaXRoZXIgdGhpcyBndXkgaXMgb3VyIGxpc3RlbmVyIG9yIGl0J3MgdGhlCi0JCSAqIGNvbm5l
Y3Rvci4gSWYgaXQgaXMgdGhlIG9uZSB0aGF0IGlzc3VlZCB0aGUgY29ubmVjdCwgdGhlbgotCQkg
KiBpdCdzIG9ubHkgY2hhbmNlIGlzIHRvIGJlIHRoZSBmaXJzdCBUQ0IgaW4gdGhlIGxpc3QuIElm
Ci0JCSAqIGl0IGlzIHRoZSBhY2NlcHRvciwgdGhlbiBkbyB0aGUgc3BlY2lhbF9sb29rdXAgdG8g
aGFzaAotCQkgKiBhbmQgZmluZCB0aGUgcmVhbCBpbnAuCi0JCSAqLwotCQlpZiAoKGlucC0+c2N0
cF9zb2NrZXQpICYmIFNDVFBfSVNfTElTVEVOSU5HKGlucCkpIHsKLQkJCS8qIHRvIGlzIHBlZXIg
YWRkciwgZnJvbSBpcyBteSBhZGRyICovCi0jaWZuZGVmIFNDVFBfTVZSRgotCQkJc3RjYiA9IHNj
dHBfdGNiX3NwZWNpYWxfbG9jYXRlKGlucF9wLCByZW1vdGUsIGxvY2FsLAotCQkJICAgIG5ldHAs
IGlucC0+ZGVmX3ZyZl9pZCk7Ci0JCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKGxvY2tlZF90Y2Ig
PT0gTlVMTCkpIHsKLQkJCQkvKiB3ZSBoYXZlIGEgbG9ja2VkIHRjYiwgbG93ZXIgcmVmY291bnQg
Ki8KLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQotCQkJaWYgKChsb2NrZWRfdGNi
ICE9IE5VTEwpICYmIChsb2NrZWRfdGNiICE9IHN0Y2IpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0so
bG9ja2VkX3RjYi0+c2N0cF9lcCk7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJ
CQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJ
U0NUUF9JTlBfUlVOTE9DSyhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKLQkJCX0KLSNlbHNlCi0JCQkv
Ki0KLQkJCSAqIE1WUkYgaXMgdHJpY2t5LCB3ZSBtdXN0IGxvb2sgaW4gZXZlcnkgVlJGCi0JCQkg
KiB0aGUgZW5kcG9pbnQgaGFzLgotCQkJICovCi0JCQlpbnQgaTsKLQotCQkJZm9yIChpID0gMDsg
aSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgewotCQkJCXN0Y2IgPSBzY3RwX3RjYl9zcGVjaWFsX2xv
Y2F0ZShpbnBfcCwgcmVtb3RlLCBsb2NhbCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbmV0cCwgaW5wLT5tX3ZyZl9pZHNbaV0pOwotCQkJCWlmICgoc3RjYiAhPSBOVUxMKSAm
JiAobG9ja2VkX3RjYiA9PSBOVUxMKSkgewotCQkJCQkvKiB3ZSBoYXZlIGEgbG9ja2VkIHRjYiwg
bG93ZXIgcmVmY291bnQgKi8KLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJYnJl
YWs7Ci0JCQkJfQotCQkJCWlmICgobG9ja2VkX3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiAh
PSBzdGNiKSkgewotCQkJCQlTQ1RQX0lOUF9STE9DSyhsb2NrZWRfdGNiLT5zY3RwX2VwKTsKLQkJ
CQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgm
bG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGxvY2tl
ZF90Y2ItPnNjdHBfZXApOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJCVND
VFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJcmV0dXJuIChzdGNiKTsKLQkJfSBlbHNlIHsKLQkJ
CVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKLQkJCQlnb3RvIG51bGxfcmV0dXJuOwotCQkJfQotCQkJ
c3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwotCQkJaWYgKHN0Y2IgPT0g
TlVMTCkgewotCQkJCWdvdG8gbnVsbF9yZXR1cm47Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOwotCi0JCQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsKLQkJCQkvKiByZW1vdGUgcG9y
dCBkb2VzIG5vdCBtYXRjaC4gKi8KLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJZ290
byBudWxsX3JldHVybjsKLQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFU
RV9BQk9VVF9UT19CRV9GUkVFRCkgewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQln
b3RvIG51bGxfcmV0dXJuOwotCQkJfQotCQkJaWYgKGxvY2FsICYmICFzY3RwX2RvZXNfc3RjYl9v
d25fdGhpc19hZGRyKHN0Y2IsIGxvY2FsKSkgewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJCQlnb3RvIG51bGxfcmV0dXJuOwotCQkJfQotCQkJLyogbm93IGxvb2sgYXQgdGhlIGxpc3Qg
b2YgcmVtb3RlIGFkZHJlc3NlcyAqLwotCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQlpZiAobmV0ID09IChU
QUlMUV9ORVhUKG5ldCwgc2N0cF9uZXh0KSkpIHsKLQkJCQkJcGFuaWMoIkNvcnJ1cHQgbmV0IGxp
c3QiKTsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWls
eSAhPQotCQkJCSAgICByZW1vdGUtPnNhX2ZhbWlseSkgewotCQkJCQkvKiBub3QgdGhlIHNhbWUg
ZmFtaWx5ICovCi0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCQlzd2l0Y2ggKHJlbW90ZS0+c2Ff
ZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQl7Ci0JCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKLQotCQkJCQlzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopCi0JCQkJCSAgICAmbmV0LT5yby5fbF9hZGRyOwotCQkJCQlyc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKXJlbW90ZTsKLQkJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09
Ci0JCQkJCSAgICByc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICov
Ci0JCQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7Ci0JCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9
Ci0JCQkJCQlpZiAobG9ja2VkX3RjYiA9PSBOVUxMKSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9S
RUYoaW5wKTsKLQkJCQkJCX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJ
U0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNi
KSB7Ci0JCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQs
IDEpOwotCQkJCQkJfQotCi0JCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJCQlTQ1RQ
X0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCQkJCXJldHVybiAoc3RjYik7Ci0JCQkJCX0KLQkJCQkJ
YnJlYWs7Ci0JCQkJfQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2Ogot
CQkJCXsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42OwotCi0JCQkJCXNp
bjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCQkJCXJzaW42
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilyZW1vdGU7Ci0JCQkJCWlmIChTQ1RQNl9BUkVfQURE
Ul9FUVVBTChzaW42LAotCQkJCQkgICAgcnNpbjYpKSB7Ci0JCQkJCQkvKiBmb3VuZCBpdCAqLwot
CQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJCSpuZXRwID0gbmV0OwotCQkJCQkJfQot
CQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgewotCQkJCQkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7Ci0JCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikgewotCQkJCQkJCVND
VFBfVENCX0xPQ0sobG9ja2VkX3RjYik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9ja2VkX3RjYikg
ewotCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAx
KTsKLQkJCQkJCX0KLQkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQkJCVNDVFBfSU5Q
X0lORk9fUlVOTE9DSygpOwotCQkJCQkJcmV0dXJuIChzdGNiKTsKLQkJCQkJfQotCQkJCQlicmVh
azsKLQkJCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJY2FzZSBB
Rl9DT05OOgotCQkJCXsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uLCAqcnNjb25u
OwotCi0JCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRk
cjsKLQkJCQkJcnNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopcmVtb3RlOwotCQkJCQlp
ZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7Ci0JCQkJCQkvKiBm
b3VuZCBpdCAqLwotCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgewotCQkJCQkJCSpuZXRwID0gbmV0
OwotCQkJCQkJfQotCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgewotCQkJCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0gc3RjYikg
ewotCQkJCQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAo
bG9ja2VkX3RjYikgewotCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90Y2ItPmFz
b2MucmVmY250LCAxKTsKLQkJCQkJCX0KLQkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJ
CQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJCQkJcmV0dXJuIChzdGNiKTsKLQkJCQkJ
fQotCQkJCQlicmVhazsKLQkJCQl9Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQkvKiBUU05I
ICovCi0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJfQotCX0gZWxzZSB7Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJZ290byBudWxsX3Jl
dHVybjsKLQkJfQotCQloZWFkID0gJmlucC0+c2N0cF90Y2JoYXNoW1NDVFBfUENCSEFTSF9BTExB
RERSKHJwb3J0LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucC0+c2N0cF9oYXNobWFyayldOwotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0
cF90Y2JoYXNoKSB7Ci0JCQlpZiAoc3RjYi0+cnBvcnQgIT0gcnBvcnQpIHsKLQkJCQkvKiByZW1v
dGUgcG9ydCBkb2VzIG5vdCBtYXRjaCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJU0NUUF9U
Q0JfTE9DSyhzdGNiKTsKLQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9V
VF9UT19CRV9GUkVFRCkgewotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQljb250aW51
ZTsKLQkJCX0KLQkJCWlmIChsb2NhbCAmJiAhc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihz
dGNiLCBsb2NhbCkpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7
Ci0JCQl9Ci0JCQkvKiBub3cgbG9vayBhdCB0aGUgbGlzdCBvZiByZW1vdGUgYWRkcmVzc2VzICov
Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0j
aWZkZWYgSU5WQVJJQU5UUwotCQkJCWlmIChuZXQgPT0gKFRBSUxRX05FWFQobmV0LCBzY3RwX25l
eHQpKSkgewotCQkJCQlwYW5pYygiQ29ycnVwdCBuZXQgbGlzdCIpOwotCQkJCX0KLSNlbmRpZgot
CQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ICE9Ci0JCQkJICAgIHJlbW90ZS0+
c2FfZmFtaWx5KSB7Ci0JCQkJCS8qIG5vdCB0aGUgc2FtZSBmYW1pbHkgKi8KLQkJCQkJY29udGlu
dWU7Ci0JCQkJfQotCQkJCXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVU
Ci0JCQkJY2FzZSBBRl9JTkVUOgotCQkJCXsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW4s
ICpyc2luOwotCi0JCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKLQkJCQkJICAgICZu
ZXQtPnJvLl9sX2FkZHI7Ci0JCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVtb3Rl
OwotCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0KLQkJCQkJICAgIHJzaW4tPnNpbl9h
ZGRyLnNfYWRkcikgewotCQkJCQkJLyogZm91bmQgaXQgKi8KLQkJCQkJCWlmIChuZXRwICE9IE5V
TEwpIHsKLQkJCQkJCQkqbmV0cCA9IG5ldDsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNi
ID09IE5VTEwpIHsKLQkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJCQkJfSBlbHNl
IGlmIChsb2NrZWRfdGNiICE9IHN0Y2IpIHsKLQkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90
Y2IpOwotCQkJCQkJfQotCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKLQkJCQkJCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJCQl9Ci0JCQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJ
CQkJCXJldHVybiAoc3RjYik7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0JCQkJfQotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotCQkJCXsKLQkJCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNiwgKnJzaW42OwotCi0JCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKQotCQkJCQkgICAgJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQkJcnNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKXJlbW90ZTsKLQkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYs
Ci0JCQkJCSAgICByc2luNikpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0JCQkJCQlpZiAobmV0
cCAhPSBOVUxMKSB7Ci0JCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9Ci0JCQkJCQlpZiAobG9j
a2VkX3RjYiA9PSBOVUxMKSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJ
CX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJU0NUUF9UQ0JfTE9DSyhs
b2NrZWRfdGNiKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiKSB7Ci0JCQkJCQkJYXRv
bWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQkJfQot
CQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NL
KCk7Ci0JCQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotCQkJCX0KLSNl
bmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJ
ewotCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm4sICpyc2Nvbm47Ci0KLQkJCQkJc2Nv
bm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyOwotCQkJCQlyc2Nv
bm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilyZW1vdGU7Ci0JCQkJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKLQkJCQkJCS8qIGZvdW5kIGl0ICovCi0J
CQkJCQlpZiAobmV0cCAhPSBOVUxMKSB7Ci0JCQkJCQkJKm5ldHAgPSBuZXQ7Ci0JCQkJCQl9Ci0J
CQkJCQlpZiAobG9ja2VkX3RjYiA9PSBOVUxMKSB7Ci0JCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKLQkJCQkJCX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7Ci0JCQkJCQkJU0NU
UF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJCQkJCX0KLQkJCQkJCWlmIChsb2NrZWRfdGNiKSB7
Ci0JCQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEp
OwotCQkJCQkJfQotCQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCQkJU0NUUF9JTlBf
SU5GT19SVU5MT0NLKCk7Ci0JCQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCWJyZWFr
OwotCQkJCX0KLSNlbmRpZgotCQkJCWRlZmF1bHQ6Ci0JCQkJCS8qIFRTTkggKi8KLQkJCQkJYnJl
YWs7Ci0JCQkJfQotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JfQotbnVs
bF9yZXR1cm46Ci0JLyogY2xlYW4gdXAgZm9yIHJldHVybmluZyBudWxsICovCi0JaWYgKGxvY2tl
ZF90Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRfdGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0
X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCX0KLQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JLyogbm90IGZvdW5kICovCi0JcmV0
dXJuIChOVUxMKTsKLX0KLQotCi0vKgotICogRmluZCBhbiBhc3NvY2lhdGlvbiBmb3IgYSBzcGVj
aWZpYyBlbmRwb2ludCB1c2luZyB0aGUgYXNzb2NpYXRpb24gaWQgZ2l2ZW4KLSAqIG91dCBpbiB0
aGUgQ09NTV9VUCBub3RpZmljYXRpb24KLSAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmlu
ZGFzb2NfZXBfYXNvY2lkX2xvY2tlZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzY3RwX2Fzc29j
X3QgYXNvY19pZCwgaW50IHdhbnRfbG9jaykKLXsKLQkvKgotCSAqIFVzZSBteSB0aGUgYXNzb2Nf
aWQgdG8gZmluZCBhIGVuZHBvaW50Ci0JICovCi0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsK
LQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JdWludDMyX3QgaWQ7Ci0KLQlpZiAoaW5wID09IE5V
TEwpIHsKLQkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNzb2NpZFxuIik7Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkgewotCQlTQ1RQX1BSSU5URigiVFNOSCBlcF9hc3NvY2lkMFxuIik7Ci0JCXJldHVybiAo
TlVMTCk7Ci0JfQotCWlkID0gKHVpbnQzMl90KWFzb2NfaWQ7Ci0JaGVhZCA9ICZpbnAtPnNjdHBf
YXNvY2lkaGFzaFtTQ1RQX1BDQkhBU0hfQVNPQyhpZCwgaW5wLT5oYXNoYXNvY2lkbWFyayldOwot
CWlmIChoZWFkID09IE5VTEwpIHsKLQkJLyogaW52YWxpZCBpZCBUU05IICovCi0JCVNDVFBfUFJJ
TlRGKCJUU05IIGVwX2Fzc29jaWQxXG4iKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JTElTVF9G
T1JFQUNIKHN0Y2IsIGhlYWQsIHNjdHBfdGNiYXNvY2lkaGFzaCkgewotCQlpZiAoc3RjYi0+YXNv
Yy5hc3NvY19pZCA9PSBpZCkgewotCQkJaWYgKGlucCAhPSBzdGNiLT5zY3RwX2VwKSB7Ci0JCQkJ
LyoKLQkJCQkgKiBzb21lIG90aGVyIGd1eSBoYXMgdGhlIHNhbWUgaWQgYWN0aXZlIChpZAotCQkJ
CSAqIGNvbGxpc2lvbiA/PykuCi0JCQkJICovCi0JCQkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNz
b2NpZDJcbiIpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUg
JiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0J
CQlpZiAod2FudF9sb2NrKSB7Ci0JCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCX0KLQkJCXJl
dHVybiAoc3RjYik7Ci0JCX0KLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQotCi1zdHJ1Y3Qgc2N0
cF90Y2IgKgotc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKHN0cnVjdCBzY3RwX2lucGNi
ICppbnAsIHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2FudF9sb2NrKQotewotCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYjsKLQotCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0Jc3RjYiA9IHNjdHBfZmlu
ZGFzb2NfZXBfYXNvY2lkX2xvY2tlZChpbnAsIGFzb2NfaWQsIHdhbnRfbG9jayk7Ci0JU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCXJldHVybiAoc3RjYik7Ci19Ci0KLQotLyoKLSAqIEVuZHBvaW50
IHByb2JlIGV4cGVjdHMgdGhhdCB0aGUgSU5QX0lORk8gaXMgbG9ja2VkLgotICovCi1zdGF0aWMg
c3RydWN0IHNjdHBfaW5wY2IgKgotc2N0cF9lbmRwb2ludF9wcm9iZShzdHJ1Y3Qgc29ja2FkZHIg
Km5hbSwgc3RydWN0IHNjdHBwY2JoZWFkICpoZWFkLAotCQkgICAgdWludDE2X3QgbHBvcnQsIHVp
bnQzMl90IHZyZl9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3Rw
X2xhZGRyICpsYWRkcjsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0Jc3RydWN0
IHNvY2thZGRyX2luNiAqaW50Zl9hZGRyNjsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQ
X01WUkYKLQlpbnQgaTsKLSNlbmRpZgotCWludCAgZm5kOwotCi0jaWZkZWYgSU5FVAotCXNpbiA9
IE5VTEw7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXNpbjYgPSBOVUxMOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCXNjb25uID0gTlVMTDsKLSNlbmRpZgotCXN3aXRjaCAo
bmFtLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopbmFtOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2
Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmFtOwot
CQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NP
Tk46Ci0JCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopbmFtOwotCQlicmVhazsKLSNl
bmRpZgotCWRlZmF1bHQ6Ci0JCS8qIHVuc3VwcG9ydGVkIGZhbWlseSAqLwotCQlyZXR1cm4gKE5V
TEwpOwotCX0KLQotCWlmIChoZWFkID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0KLQlMSVNU
X0ZPUkVBQ0goaW5wLCBoZWFkLCBzY3RwX2hhc2gpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7
Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSAmJgotCQkgICAgKGlucC0+
c2N0cF9scG9ydCA9PSBscG9ydCkpIHsKLQkJCS8qIGdvdCBpdCAqLwotCQkJc3dpdGNoIChuYW0t
PnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoKLQkJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJCSAgICBTQ1RQ
X0lQVjZfVjZPTkxZKGlucCkpIHsKLQkJCQkJLyogSVB2NCBvbiBhIElQdjYgc29ja2V0IHdpdGgg
T05MWSBJUHY2IHNldCAqLwotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCWNvbnRp
bnVlOwotCQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChwcmlzb25fY2hl
Y2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkgICAgICAgICAgICAgICAgICAg
ICAmc2luLT5zaW5fYWRkcikgIT0gMCkgewotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0J
CQkJCWNvbnRpbnVlOwotCQkJCX0KLSNlbmRpZgotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYg
SU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJLyogQSBWNiBhZGRyZXNzIGFuZCB0aGUgZW5k
cG9pbnQgaXMgTk9UIGJvdW5kIFY2ICovCi0JCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgewotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlm
IChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkgICAgICAg
ICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0JCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKLQkJCQkJY29udGludWU7Ci0JCQkJfQotI2VuZGlmCi0JCQkJYnJlYWs7Ci0j
ZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQkvKiBkb2VzIGEgVlJGIGlk
IG1hdGNoPyAqLwotCQkJZm5kID0gMDsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJCWZvciAoaSA9IDA7
IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCQlpZiAoaW5wLT5tX3ZyZl9pZHNbaV0gPT0g
dnJmX2lkKSB7Ci0JCQkJCWZuZCA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLSNlbHNl
Ci0JCQlpZiAoaW5wLT5kZWZfdnJmX2lkID09IHZyZl9pZCkKLQkJCQlmbmQgPSAxOwotI2VuZGlm
Ci0KLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWlmICghZm5kKQotCQkJCWNvbnRpbnVl
OwotCQkJcmV0dXJuIChpbnApOwotCQl9Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0J
c3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0J
CWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7Ci0JCQkvKiBDYW4ndCBo
dW50IGZvciBvbmUgdGhhdCBoYXMgbm8gYWRkcmVzcyBzcGVjaWZpZWQgKi8KLQkJCXJldHVybiAo
TlVMTCk7Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZfSU5F
VDY6Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgewot
CQkJLyogQ2FuJ3QgaHVudCBmb3Igb25lIHRoYXQgaGFzIG5vIGFkZHJlc3Mgc3BlY2lmaWVkICov
Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09
IE5VTEwpIHsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZh
dWx0OgotCQlicmVhazsKLQl9Ci0JLyoKLQkgKiBvaywgbm90IGJvdW5kIHRvIGFsbCBzbyBzZWUg
aWYgd2UgY2FuIGZpbmQgYSBFUCBib3VuZCB0byB0aGlzCi0JICogYWRkcmVzcy4KLQkgKi8KLQlM
SVNUX0ZPUkVBQ0goaW5wLCBoZWFkLCBzY3RwX2hhc2gpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05F
KSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSkgewotCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQkJY29udGludWU7Ci0JCX0KLQkJLyoKLQkJICogT2sgdGhpcyBj
b3VsZCBiZSBhIGxpa2VseSBjYW5kaWRhdGUsIGxvb2sgYXQgYWxsIG9mIGl0cwotCQkgKiBhZGRy
ZXNzZXMKLQkJICovCi0JCWlmIChpbnAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKLQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIGRvZXMgYSBWUkYgaWQg
bWF0Y2g/ICovCi0JCWZuZCA9IDA7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCWZvciAoaSA9IDA7IGkg
PCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCWlmIChpbnAtPm1fdnJmX2lkc1tpXSA9PSB2cmZf
aWQpIHsKLQkJCQlmbmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZWxzZQotCQlpZiAo
aW5wLT5kZWZfdnJmX2lkID09IHZyZl9pZCkKLQkJCWZuZCA9IDE7Ci0KLSNlbmRpZgotCQlpZiAo
IWZuZCkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJY29udGludWU7Ci0JCX0KLQkJ
TElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikg
ewotCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgewotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19Q
Q0IxLCAiJXM6IE5VTEwgaWZhXG4iLAotCQkJCQlfX2Z1bmNfXyk7Ci0JCQkJY29udGludWU7Ci0J
CQl9Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIk9rIGxhZGRyLT5pZmE6JXAgaXMgcG9z
c2libGUsICIsCi0JCQkJKHZvaWQgKilsYWRkci0+aWZhKTsKLQkJCWlmIChsYWRkci0+aWZhLT5s
b2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkgewotCQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0IxLCAiSHVoIElGQSBiZWluZyBkZWxldGVkXG4iKTsKLQkJCQljb250aW51ZTsKLQkJ
CX0KLQkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBuYW0tPnNhX2Zh
bWlseSkgewotCQkJCS8qIHBvc3NpYmxlLCBzZWUgaWYgaXQgbWF0Y2hlcyAqLwotCQkJCXN3aXRj
aCAobmFtLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotCQkJCQlpZiAoc2luID09IE5VTEwpIHsKLQkJCQkJCS8qIFRT
TkggKi8KLQkJCQkJCWJyZWFrOwotCQkJCQl9Ci0jZW5kaWYKLQkJCQkJaWYgKHNpbi0+c2luX2Fk
ZHIuc19hZGRyID09Ci0JCQkJCSAgICBsYWRkci0+aWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkci5z
X2FkZHIpIHsKLQkJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQkJCXJldHVybiAoaW5w
KTsKLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBB
Rl9JTkVUNjoKLQkJCQkJaW50Zl9hZGRyNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7Ci0J
CQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42LAotCQkJCQkgICAgaW50Zl9hZGRyNikp
IHsKLQkJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQkJCXJldHVybiAoaW5wKTsKLQkJ
CQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
CQljYXNlIEFGX0NPTk46Ci0JCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSBsYWRkci0+aWZh
LT5hZGRyZXNzLnNjb25uLnNjb25uX2FkZHIpIHsKLQkJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKLQkJCQkJCXJldHVybiAoaW5wKTsKLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotCQkJ
CX0KLQkJCX0KLQkJfQotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfQotCXJldHVybiAoTlVM
TCk7Ci19Ci0KLQotc3RhdGljIHN0cnVjdCBzY3RwX2lucGNiICoKLXNjdHBfaXNwb3J0X2ludXNl
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1aW50MzJfdCB2cmZfaWQp
Ci17Ci0Jc3RydWN0IHNjdHBwY2JoZWFkICpoZWFkOwotCXN0cnVjdCBzY3RwX2lucGNiICp0X2lu
cDsKLSNpZmRlZiBTQ1RQX01WUkYKLQlpbnQgaTsKLSNlbmRpZgotCWludCBmbmQ7Ci0KLQloZWFk
ID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9y
dCwKLQkgICAgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0JTElTVF9GT1JFQUNIKHRfaW5w
LCBoZWFkLCBzY3RwX2hhc2gpIHsKLQkJaWYgKHRfaW5wLT5zY3RwX2xwb3J0ICE9IGxwb3J0KSB7
Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBpcyBpdCBpbiB0aGUgVlJGIGluIHF1ZXN0aW9uICov
Ci0JCWZuZCA9IDA7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51
bV92cmZzOyBpKyspIHsKLQkJCWlmICh0X2lucC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgewot
CQkJCWZuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbHNlCi0JCWlmICh0X2lucC0+
ZGVmX3ZyZl9pZCA9PSB2cmZfaWQpCi0JCQlmbmQgPSAxOwotI2VuZGlmCi0JCWlmICghZm5kKQot
CQkJY29udGludWU7Ci0KLQkJLyogVGhpcyBvbmUgaXMgaW4gdXNlLiAqLwotCQkvKiBjaGVjayB0
aGUgdjYvdjQgYmluZGluZyBpc3N1ZSAqLwotCQlpZiAoKHRfaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCi0JCSAgICBTQ1RQX0lQVjZfVjZPTkxZKHRfaW5wKSkg
ewotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7Ci0J
CQkJLyogY29sbGlzaW9uIGluIFY2IHNwYWNlICovCi0JCQkJcmV0dXJuICh0X2lucCk7Ci0JCQl9
IGVsc2UgewotCQkJCS8qIGlucCBpcyBCT1VORF9WNCBubyBjb25mbGljdCAqLwotCQkJCWNvbnRp
bnVlOwotCQkJfQotCQl9IGVsc2UgaWYgKHRfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpIHsKLQkJCS8qIHRfaW5wIGlzIGJvdW5kIHY0IGFuZCB2NiwgY29uZmxpY3Qg
YWx3YXlzICovCi0JCQlyZXR1cm4gKHRfaW5wKTsKLQkJfSBlbHNlIHsKLQkJCS8qIHRfaW5wIGlz
IGJvdW5kIG9ubHkgVjQgKi8KLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpICYmCi0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7Ci0JCQkJLyog
bm8gY29uZmxpY3QgKi8KLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCS8qIGVsc2UgZmFsbCB0aHJv
dWdoIHRvIGNvbmZsaWN0ICovCi0JCX0KLQkJcmV0dXJuICh0X2lucCk7Ci0JfQotCXJldHVybiAo
TlVMTCk7Ci19Ci0KLQotaW50Ci1zY3RwX3N3YXBfaW5wY2JfZm9yX2xpc3RlbihzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wKQotewotCS8qIEZvciAxLTItMSB3aXRoIHBvcnQgcmV1c2UgKi8KLQlzdHJ1
Y3Qgc2N0cHBjYmhlYWQgKmhlYWQ7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKnRpbnAsICpuaW5wOwot
Ci0JaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0Up
KSB7Ci0JCS8qIG9ubHkgd29ya3Mgd2l0aCBwb3J0IHJldXNlIG9uICovCi0JCXJldHVybiAoLTEp
OwotCX0KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wp
ID09IDApIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCVND
VFBfSU5QX0lORk9fV0xPQ0soKTsKLQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNo
KVtTQ1RQX1BDQkhBU0hfQUxMQUREUihpbnAtPnNjdHBfbHBvcnQsCi0JICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0JLyogS2lj
ayBvdXQgYWxsIG5vbi1saXN0ZW5lcnMgdG8gdGhlIFRDUCBoYXNoICovCi0JTElTVF9GT1JFQUNI
X1NBRkUodGlucCwgaGVhZCwgc2N0cF9oYXNoLCBuaW5wKSB7Ci0JCWlmICh0aW5wLT5zY3RwX2xw
b3J0ICE9IGlucC0+c2N0cF9scG9ydCkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKHRpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkJY29udGlu
dWU7Ci0JCX0KLQkJaWYgKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkgewotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKFNDVFBfSVNfTElTVEVOSU5HKHRpbnAp
KSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlTQ1RQX0lOUF9XTE9DSyh0aW5wKTsKLQkJTElTVF9S
RU1PVkUodGlucCwgc2N0cF9oYXNoKTsKLQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3Rj
cGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIodGlucC0+c2N0cF9scG9ydCwgU0NUUF9CQVNF
X0lORk8oaGFzaHRjcG1hcmspKV07Ci0JCXRpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTDsKLQkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCB0aW5wLCBzY3RwX2hhc2gp
OwotCQlTQ1RQX0lOUF9XVU5MT0NLKHRpbnApOwotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwot
CS8qIFB1bGwgZnJvbSB3aGVyZSBoZSB3YXMgKi8KLQlMSVNUX1JFTU9WRShpbnAsIHNjdHBfaGFz
aCk7Ci0JaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MOwotCWhl
YWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGlu
cC0+c2N0cF9scG9ydCwgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07Ci0JTElTVF9JTlNFUlRf
SEVBRChoZWFkLCBpbnAsIHNjdHBfaGFzaCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0JU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JcmV0dXJuICgw
KTsKLX0KLQotCi1zdHJ1Y3Qgc2N0cF9pbnBjYiAqCi1zY3RwX3BjYl9maW5kZXAoc3RydWN0IHNv
Y2thZGRyICpuYW0sIGludCBmaW5kX3RjcF9wb29sLCBpbnQgaGF2ZV9sb2NrLAotCQl1aW50MzJf
dCB2cmZfaWQpCi17Ci0JLyoKLQkgKiBGaXJzdCB3ZSBjaGVjayB0aGUgaGFzaCB0YWJsZSB0byBz
ZWUgaWYgc29tZW9uZSBoYXMgdGhpcyBwb3J0Ci0JICogYm91bmQgd2l0aCBqdXN0IHRoZSBwb3J0
LgotCSAqLwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBwY2JoZWFkICpo
ZWFkOwotCWludCBscG9ydDsKLQl1bnNpZ25lZCBpbnQgaTsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0
IHNvY2thZGRyX2luICpzaW47Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jc3RydWN0
IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotI2VuZGlmCi0KLQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKW5hbTsKLQkJbHBvcnQgPSBzaW4tPnNpbl9wb3J0OwotCQlicmVhazsKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopbmFtOwotCQlscG9ydCA9IHNpbjYtPnNpbjZfcG9ydDsKLQkJYnJlYWs7Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCQlzY29ubiA9IChz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqKW5hbTsKLQkJbHBvcnQgPSBzY29ubi0+c2Nvbm5fcG9ydDsK
LQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgot
CSAqIEkgY291bGQgY2hlYXQgaGVyZSBhbmQganVzdCBjYXN0IHRvIG9uZSBvZiB0aGUgdHlwZXMg
YnV0IHdlIHdpbGwKLQkgKiBkbyBpdCByaWdodC4gSXQgYWxzbyBwcm92aWRlcyB0aGUgY2hlY2sg
YWdhaW5zdCBhbiBVbnN1cHBvcnRlZAotCSAqIHR5cGUgdG9vLgotCSAqLwotCS8qIEZpbmQgdGhl
IGhlYWQgb2YgdGhlIEFMTEFERFIgY2hhaW4gKi8KLQlpZiAoaGF2ZV9sb2NrID09IDApIHsKLQkJ
U0NUUF9JTlBfSU5GT19STE9DSygpOwotCX0KLQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBf
ZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9ydCwKLQkgICAgU0NUUF9CQVNFX0lORk8o
aGFzaG1hcmspKV07Ci0JaW5wID0gc2N0cF9lbmRwb2ludF9wcm9iZShuYW0sIGhlYWQsIGxwb3J0
LCB2cmZfaWQpOwotCi0JLyoKLQkgKiBJZiB0aGUgVENQIG1vZGVsIGV4aXN0cyBpdCBjb3VsZCBi
ZSB0aGF0IHRoZSBtYWluIGxpc3RlbmluZwotCSAqIGVuZHBvaW50IGlzIGdvbmUgYnV0IHRoZXJl
IHN0aWxsIGV4aXN0cyBhIGNvbm5lY3RlZCBzb2NrZXQgZm9yIHRoaXMKLQkgKiBndXkuIElmIHNv
IHdlIGNhbiByZXR1cm4gdGhlIGZpcnN0IG9uZSB0aGF0IHdlIGZpbmQuIFRoaXMgbWF5IE5PVAot
CSAqIGJlIHRoZSBjb3JyZWN0IG9uZSBzbyB0aGUgY2FsbGVyIHNob3VsZCBiZSB3YXJ5IG9uIHRo
ZSByZXR1cm5lZCBJTlAuCi0JICogQ3VycmVudGx5IHRoZSBvbmx5IGNhbGxlciB0aGF0IHNldHMg
ZmluZF90Y3BfcG9vbCBpcyBpbiBiaW5keCB3aGVyZQotCSAqIHdlIGFyZSB2ZXJpZnlpbmcgdGhh
dCBhIHVzZXIgQ0FOIGJpbmQgdGhlIGFkZHJlc3MuIEhlIGVpdGhlcgotCSAqIGhhcyBib3VuZCBp
dCBhbHJlYWR5LCBvciBzb21lb25lIGVsc2UgaGFzLCBvciBpdHMgb3BlbiB0byBiaW5kLAotCSAq
IHNvIHRoaXMgaXMgZ29vZCBlbm91Z2guCi0JICovCi0JaWYgKGlucCA9PSBOVUxMICYmIGZpbmRf
dGNwX3Bvb2wpIHsKLQkJZm9yIChpID0gMDsgaSA8IFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJr
KSArIDE7IGkrKykgewotCQkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClb
aV07Ci0JCQlpbnAgPSBzY3RwX2VuZHBvaW50X3Byb2JlKG5hbSwgaGVhZCwgbHBvcnQsIHZyZl9p
ZCk7Ci0JCQlpZiAoaW5wKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKGlucCkg
ewotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCX0KLQlpZiAoaGF2ZV9sb2NrID09IDApIHsK
LQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JfQotCXJldHVybiAoaW5wKTsKLX0KLQotCi0v
KgotICogRmluZCBhbiBhc3NvY2lhdGlvbiBmb3IgYW4gZW5kcG9pbnQgd2l0aCB0aGUgcG9pbnRl
ciB0byB3aG9tIHlvdSB3YW50IHRvCi0gKiBzZW5kIHRvIGFuZCB0aGUgZW5kcG9pbnQgcG9pbnRl
ci4gVGhlIGFkZHJlc3MgY2FuIGJlIElQdjQgb3IgSVB2Ni4gV2UgbWF5Ci0gKiBuZWVkIHRvIGNo
YW5nZSB0aGUgKnRvIHRvIHNvbWUgb3RoZXIgc3RydWN0IGxpa2UgYSBtYnVmLi4uCi0gKi8KLXN0
cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHN0cnVjdCBzb2Nr
YWRkciAqZnJvbSwgc3RydWN0IHNvY2thZGRyICp0bywKLSAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KmlucF9wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwgaW50IGZpbmRfdGNwX3Bvb2wsCi0gICAg
dWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnAgPSBOVUxMOwotCXN0
cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQotCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLQlpZiAoZmlu
ZF90Y3BfcG9vbCkgewotCQlpZiAoaW5wX3AgIT0gTlVMTCkgewotCQkJc3RjYiA9IHNjdHBfdGNi
X3NwZWNpYWxfbG9jYXRlKGlucF9wLCBmcm9tLCB0bywgbmV0cCwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB2cmZfaWQpOwotCQl9IGVsc2UgewotCQkJc3RjYiA9IHNjdHBfdGNi
X3NwZWNpYWxfbG9jYXRlKCZpbnAsIGZyb20sIHRvLCBuZXRwLAotCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHZyZl9pZCk7Ci0JCX0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJ
U0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCQlyZXR1cm4gKHN0Y2IpOwotCQl9Ci0JfQotCWlu
cCA9IHNjdHBfcGNiX2ZpbmRlcCh0bywgMCwgMSwgdnJmX2lkKTsKLQlpZiAoaW5wX3AgIT0gTlVM
TCkgewotCQkqaW5wX3AgPSBpbnA7Ci0JfQotCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCWlm
IChpbnAgPT0gTlVMTCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIG9rLCB3ZSBo
YXZlIGFuIGVuZHBvaW50LCBub3cgbGV0cyBmaW5kIHRoZSBhc3NvYyBmb3IgaXQgKGlmIGFueSkK
LQkgKiB3ZSBub3cgcGxhY2UgdGhlIHNvdXJjZSBhZGRyZXNzIG9yIGZyb20gaW4gdGhlIHRvIG9m
IHRoZSBmaW5kCi0JICogZW5kcG9pbnQgY2FsbC4gU2luY2UgaW4gcmVhbGl0eSB0aGlzIGNoYWlu
IGlzIHVzZWQgZnJvbSB0aGUKLQkgKiBpbmJvdW5kIHBhY2tldCBzaWRlLgotCSAqLwotCWlmIChp
bnBfcCAhPSBOVUxMKSB7Ci0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlu
cF9wLCBmcm9tLCBuZXRwLCB0bywKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCk7Ci0JfSBlbHNlIHsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoJmlucCwgZnJvbSwgbmV0cCwgdG8sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwpOwotCX0KLQlyZXR1cm4gKHN0Y2IpOwotfQotCi0KLS8qCi0gKiBUaGlzIHJv
dXRpbmUgd2lsbCBncnViIHRocm91Z2ggdGhlIG1idWYgdGhhdCBpcyBhIElOSVQgb3IgSU5JVC1B
Q0sgYW5kCi0gKiBmaW5kIGFsbCBhZGRyZXNzZXMgdGhhdCB0aGUgc2VuZGVyIGhhcyBzcGVjaWZp
ZWQgaW4gYW55IGFkZHJlc3MgbGlzdC4gRWFjaAotICogYWRkcmVzcyB3aWxsIGJlIHVzZWQgdG8g
bG9va3VwIHRoZSBUQ0IgYW5kIHNlZSBpZiBvbmUgZXhpdHMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3Qg
c2N0cF90Y2IgKgotc2N0cF9maW5kYXNzb2NpYXRpb25fc3BlY2lhbF9hZGRyKHN0cnVjdCBtYnVm
ICptLCBpbnQgb2Zmc2V0LAotICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfaW5w
Y2IgKippbnBfcCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsCi0gICAgc3RydWN0IHNvY2thZGRy
ICpkc3QpCi17Ci0Jc3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoZHIsIHBhcmFtX2J1ZjsKLSNpZiBk
ZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwot
CXVpbnQxNl90IHB0eXBlOwotI2VuZGlmCi0JdWludDE2X3QgcGxlbjsKLSNpZmRlZiBJTkVUCi0J
c3RydWN0IHNvY2thZGRyX2luIHNpbjQ7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBz
b2NrYWRkcl9pbjYgc2luNjsKLSNlbmRpZgotCi0jaWZkZWYgSU5FVAotCW1lbXNldCgmc2luNCwg
MCwgc2l6ZW9mKHNpbjQpKTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQlzaW40LnNpbl9sZW4gPSBz
aXplb2Yoc2luNCk7Ci0jZW5kaWYKLQlzaW40LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCXNpbjQu
c2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCW1lbXNldCgm
c2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi5zaW42
X2xlbiA9IHNpemVvZihzaW42KTsKLSNlbmRpZgotCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVU
NjsKLQlzaW42LnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKLSNlbmRpZgotCi0Jb2Zmc2V0ICs9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKLQotCXBoZHIgPSBzY3RwX2dldF9uZXh0
X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1Ziwgc2l6ZW9mKHBhcmFtX2J1ZikpOwotCXdoaWxl
IChwaGRyICE9IE5VTEwpIHsKLQkJLyogbm93IHdlIG11c3Qgc2VlIGlmIHdlIHdhbnQgdGhlIHBh
cmFtZXRlciAqLwotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQkJcHR5cGUg
PSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKLSNlbmRpZgotCQlwbGVuID0gbnRvaHMocGhkci0+
cGFyYW1fbGVuZ3RoKTsKLQkJaWYgKHBsZW4gPT0gMCkgewotCQkJYnJlYWs7Ci0JCX0KLSNpZmRl
ZiBJTkVUCi0JCWlmIChwdHlwZSA9PSBTQ1RQX0lQVjRfQUREUkVTUyAmJgotCQkgICAgcGxlbiA9
PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7Ci0JCQkvKiBHZXQgdGhlIHJl
c3Qgb2YgdGhlIGFkZHJlc3MgKi8KLQkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtIGlwNF9w
YXJhbSwgKnA0OwotCi0JCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCi0J
CQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopJmlwNF9wYXJhbSwgc2l6ZW9mKGlwNF9wYXJh
bSkpOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkgewotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9Ci0J
CQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7Ci0JCQltZW1jcHkoJnNp
bjQuc2luX2FkZHIsICZwNC0+YWRkciwgc2l6ZW9mKHA0LT5hZGRyKSk7Ci0JCQkvKiBsb29rIGl0
IHVwICovCi0JCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKLQkJ
CSAgICAoc3RydWN0IHNvY2thZGRyICopJnNpbjQsIG5ldHAsIGRzdCwgTlVMTCk7Ci0JCQlpZiAo
c3RjYiAhPSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChzdGNiKTsKLQkJCX0KLQkJfQotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQkJaWYgKHB0eXBlID09IFNDVFBfSVBWNl9BRERSRVNTICYmCi0JCSAgICBw
bGVuID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKLQkJCS8qIEdldCB0
aGUgcmVzdCBvZiB0aGUgYWRkcmVzcyAqLwotCQkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0g
aXA2X3BhcmFtLCAqcDY7Ci0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNl
dCwKLQkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmaXA2X3BhcmFtLCBzaXplb2YoaXA2
X3BhcmFtKSk7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChOVUxMKTsKLQkJ
CX0KLQkJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGhkcjsKLQkJCW1lbWNw
eSgmc2luNi5zaW42X2FkZHIsICZwNi0+YWRkciwgc2l6ZW9mKHA2LT5hZGRyKSk7Ci0JCQkvKiBs
b29rIGl0IHVwICovCi0JCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBf
cCwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJnNpbjYsIG5ldHAsIGRzdCwgTlVMTCk7Ci0J
CQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChzdGNiKTsKLQkJCX0KLQkJfQotI2Vu
ZGlmCi0JCW9mZnNldCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKLQkJcGhkciA9IHNjdHBfZ2V0X25l
eHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLAotCQkJCQkgICBzaXplb2YocGFyYW1fYnVm
KSk7Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgot
c2N0cF9maW5kYXNzb2NfYnlfdnRhZyhzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHN0cnVjdCBzb2Nr
YWRkciAqdG8sIHVpbnQzMl90IHZ0YWcsCi0JCSAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlu
cF9wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwgdWludDE2X3QgcnBvcnQsCi0JCSAgICAgICB1
aW50MTZfdCBscG9ydCwgaW50IHNraXBfc3JjX2NoZWNrLCB1aW50MzJfdCB2cmZfaWQsIHVpbnQz
Ml90IHJlbW90ZV90YWcpCi17Ci0JLyoKLQkgKiBVc2UgbXkgdnRhZyB0byBoYXNoLiBJZiB3ZSBm
aW5kIGl0IHdlIHRoZW4gdmVyaWZ5IHRoZSBzb3VyY2UgYWRkcgotCSAqIGlzIGluIHRoZSBhc3Nv
Yy4gSWYgYWxsIGdvZXMgd2VsbCB3ZSBzYXZlIGEgYml0IG9uIHJlYyBvZiBhCi0JICogcGFja2V0
LgotCSAqLwotCXN0cnVjdCBzY3RwYXNvY2hlYWQgKmhlYWQ7Ci0Jc3RydWN0IHNjdHBfbmV0cyAq
bmV0OwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLSNpZmRlZiBTQ1RQX01WUkYKLQl1bnNpZ25l
ZCBpbnQgaTsKLSNlbmRpZgotCi0JU0NUUF9JTlBfSU5GT19STE9DSygpOwotCWhlYWQgPSAmU0NU
UF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0ModnRhZywKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
QkFTRV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0
cF9hc29jcykgewotCQlTQ1RQX0lOUF9STE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJaWYgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewot
CQkJU0NUUF9JTlBfUlVOTE9DSyhzdGNiLT5zY3RwX2VwKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0j
aWZkZWYgU0NUUF9NVlJGCi0JCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5zY3RwX2VwLT5udW1fdnJm
czsgaSsrKSB7Ci0JCQlpZiAoc3RjYi0+c2N0cF9lcC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkg
ewotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpID09IHN0Y2ItPnNjdHBfZXAtPm51bV92
cmZzKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQljb250aW51ZTsKLQkJfQotI2Vs
c2UKLQkJaWYgKHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZfaWQgIT0gdnJmX2lkKSB7Ci0JCQlTQ1RQ
X0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXApOwotCQkJY29udGludWU7Ci0JCX0KLSNlbmRpZgot
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9SVU5MT0NLKHN0Y2ItPnNjdHBfZXAp
OwotCQlpZiAoc3RjYi0+YXNvYy5teV92dGFnID09IHZ0YWcpIHsKLQkJCS8qIGNhbmRpZGF0ZSAq
LwotCQkJaWYgKHN0Y2ItPnJwb3J0ICE9IHJwb3J0KSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBv
cnQgIT0gbHBvcnQpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7
Ci0JCQl9Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJY29udGludWU7Ci0JCQl9
Ci0JCQkvKiBSUlM6TmVlZCB0b2FkZHIgY2hlY2sgaGVyZSAqLwotCQkJaWYgKHNjdHBfZG9lc19z
dGNiX293bl90aGlzX2FkZHIoc3RjYiwgdG8pID09IDApIHsKLQkJCSAgICAgICAgLyogRW5kcG9p
bnQgZG9lcyBub3Qgb3duIHRoaXMgYWRkcmVzcyAqLwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChyZW1vdGVfdGFnKSB7Ci0JCQkJLyogSWYg
d2UgaGF2ZSBib3RoIHZ0YWdzIHRoYXQncyBhbGwgd2UgbWF0Y2ggb24gKi8KLQkJCQlpZiAoc3Rj
Yi0+YXNvYy5wZWVyX3Z0YWcgPT0gcmVtb3RlX3RhZykgewotCQkJCQkvKiBJZiBib3RoIHRhZ3Mg
bWF0Y2ggd2UgY29uc2lkZXIgaXQgY29uY2x1c2l2ZQotCQkJCQkgKiBhbmQgY2hlY2sgTk8gc291
cmNlL2Rlc3RpbmF0aW9uIGFkZHJlc3NlcwotCQkJCQkgKi8KLQkJCQkJZ290byBjb25jbHVzaXZl
OwotCQkJCX0KLQkJCX0KLQkJCWlmIChza2lwX3NyY19jaGVjaykgewotCQkJY29uY2x1c2l2ZToK
LQkJCSAgICAgICAgaWYgKGZyb20pIHsKLQkJCQkJKm5ldHAgPSBzY3RwX2ZpbmRuZXQoc3RjYiwg
ZnJvbSk7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJKm5ldHAgPSBOVUxMOwkvKiB1bmtub3duICovCi0J
CQkJfQotCQkJCWlmIChpbnBfcCkKLQkJCQkJKmlucF9wID0gc3RjYi0+c2N0cF9lcDsKLQkJCQlT
Q1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCQlyZXR1cm4gKHN0Y2IpOwotCQkJfQotCQkJbmV0
ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGZyb20pOwotCQkJaWYgKG5ldCkgewotCQkJCS8qIHllcCBp
dHMgaGltLiAqLwotCQkJCSpuZXRwID0gbmV0OwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0
YWdleHByZXNzKTsKLQkJCQkqaW5wX3AgPSBzdGNiLT5zY3RwX2VwOwotCQkJCVNDVFBfSU5QX0lO
Rk9fUlVOTE9DSygpOwotCQkJCXJldHVybiAoc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0J
CQkJICogbm90IGhpbSwgdGhpcyBzaG91bGQgb25seSBoYXBwZW4gaW4gcmFyZQotCQkJCSAqIGNh
c2VzIHNvIEkgcGVnIGl0LgotCQkJCSAqLwotCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Z0YWdi
b2d1cyk7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCX0KLQlTQ1RQX0lO
UF9JTkZPX1JVTkxPQ0soKTsKLQlyZXR1cm4gKE5VTEwpOwotfQotCi0KLS8qCi0gKiBGaW5kIGFu
IGFzc29jaWF0aW9uIHdpdGggdGhlIHBvaW50ZXIgdG8gdGhlIGluYm91bmQgSVAgcGFja2V0LiBU
aGlzIGNhbiBiZQotICogYSBJUHY0IG9yIElQdjYgcGFja2V0LgotICovCi1zdHJ1Y3Qgc2N0cF90
Y2IgKgotc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNl
dCwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCi0gICAg
c3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsCi0gICAgc3RydWN0
IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsIHVpbnQzMl90IHZy
Zl9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKLQotCWlmIChzaC0+dl90YWcpIHsKLQkJLyogd2Ugb25seSBnbyBkb3duIHRoaXMgcGF0aCBp
ZiB2dGFnIGlzIG5vbi16ZXJvICovCi0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY19ieV92dGFnKHNy
YywgZHN0LCBudG9obChzaC0+dl90YWcpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnBfcCwgbmV0cCwgc2gtPnNyY19wb3J0LCBzaC0+ZGVzdF9wb3J0LCAwLCB2cmZfaWQsIDAp
OwotCQlpZiAoc3RjYikgewotCQkJcmV0dXJuIChzdGNiKTsKLQkJfQotCX0KLQotCWlmIChpbnBf
cCkgewotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYShzcmMsIGRzdCwgaW5w
X3AsIG5ldHAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsIHZyZl9p
ZCk7Ci0JCWlucCA9ICppbnBfcDsKLQl9IGVsc2UgewotCQlzdGNiID0gc2N0cF9maW5kYXNzb2Np
YXRpb25fYWRkcl9zYShzcmMsIGRzdCwgJmlucCwgbmV0cCwKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMSwgdnJmX2lkKTsKLQl9Ci0JU0NUUERCRyhTQ1RQX0RFQlVHX1BD
QjEsICJzdGNiOiVwIGlucDolcFxuIiwgKHZvaWQgKilzdGNiLCAodm9pZCAqKWlucCk7Ci0JaWYg
KHN0Y2IgPT0gTlVMTCAmJiBpbnApIHsKLQkJLyogRm91bmQgYSBFUCBidXQgbm90IHRoaXMgYWRk
cmVzcyAqLwotCQlpZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfSU5JVElBVElPTikgfHwKLQkJ
ICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT05fQUNLKSkgewotCQkJLyotCi0J
CQkgKiBzcGVjaWFsIGhvb2ssIHdlIGRvIE5PVCByZXR1cm4gbGlucCBvciBhbgotCQkJICogYXNz
b2NpYXRpb24gdGhhdCBpcyBsaW5rZWQgdG8gYW4gZXhpc3RpbmcKLQkJCSAqIGFzc29jaWF0aW9u
IHRoYXQgaXMgdW5kZXIgdGhlIFRDUCBwb29sIChpLmUuIG5vCi0JCQkgKiBsaXN0ZW5lciBleGlz
dHMpLiBUaGUgZW5kcG9pbnQgZmluZGluZyByb3V0aW5lCi0JCQkgKiB3aWxsIGFsd2F5cyBmaW5k
IGEgbGlzdGVuZXIgYmVmb3JlIGV4YW1pbmluZyB0aGUKLQkJCSAqIFRDUCBwb29sLgotCQkJICov
Ci0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgewot
CQkJCWlmIChpbnBfcCkgewotCQkJCQkqaW5wX3AgPSBOVUxMOwotCQkJCX0KLQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJfQotCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX3NwZWNpYWxfYWRk
cihtLAotCQkJICAgIG9mZnNldCwgc2gsICZpbnAsIG5ldHAsIGRzdCk7Ci0JCQlpZiAoaW5wX3Ag
IT0gTlVMTCkgewotCQkJCSppbnBfcCA9IGlucDsKLQkJCX0KLQkJfQotCX0KLQlTQ1RQREJHKFND
VFBfREVCVUdfUENCMSwgInN0Y2IgaXMgJXBcbiIsICh2b2lkICopc3RjYik7Ci0JcmV0dXJuIChz
dGNiKTsKLX0KLQotLyoKLSAqIGxvb2t1cCBhbiBhc3NvY2lhdGlvbiBieSBhbiBBU0NPTkYgbG9v
a3VwIGFkZHJlc3MuCi0gKiBpZiB0aGUgbG9va3VwIGFkZHJlc3MgaXMgMC4wLjAuMCBvciA6OjAs
IHVzZSB0aGUgdnRhZyB0byBkbyB0aGUgbG9va3VwCi0gKi8KLXN0cnVjdCBzY3RwX3RjYiAqCi1z
Y3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hc2NvbmYoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQs
Ci0JCQkgICAgICAgc3RydWN0IHNvY2thZGRyICpkc3QsIHN0cnVjdCBzY3RwaGRyICpzaCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBz
dHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3Rw
X3RjYiAqc3RjYjsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSByZW1vdGVfc3RvcmU7Ci0Jc3RydWN0
IHNjdHBfcGFyYW1oZHIgcGFyYW1fYnVmLCAqcGhkcjsKLQlpbnQgcHR5cGU7Ci0JaW50IHplcm9f
YWRkcmVzcyA9IDA7Ci0jaWZkZWYgSU5FVAotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2Vu
ZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmCi0K
LQltZW1zZXQoJnJlbW90ZV9zdG9yZSwgMCwgc2l6ZW9mKHJlbW90ZV9zdG9yZSkpOwotCXBoZHIg
PSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfY2h1bmspLAotCQkJCSAgICZwYXJhbV9idWYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
cikpOwotCWlmIChwaGRyID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywg
IiVzOiBmYWlsZWQgdG8gZ2V0IGFzY29uZiBsb29rdXAgYWRkclxuIiwKLQkJCV9fZnVuY19fKTsK
LQkJcmV0dXJuIE5VTEw7Ci0JfQotCXB0eXBlID0gKGludCkoKHVpbnQzMl90KSBudG9ocyhwaGRy
LT5wYXJhbV90eXBlKSk7Ci0JLyogZ2V0IHRoZSBjb3JyZWxhdGlvbiBhZGRyZXNzICovCi0Jc3dp
dGNoIChwdHlwZSkgewotI2lmZGVmIElORVQ2Ci0JY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKLQl7
Ci0JCS8qIGlwdjYgYWRkcmVzcyBwYXJhbSAqLwotCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSAqcDYsIHA2X2J1ZjsKLQotCQlpZiAobnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKSAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7Ci0JCQlyZXR1cm4gTlVMTDsKLQkJfQot
CQlwNiA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXNjdHBfZ2V0X25leHRfcGFyYW0o
bSwKLQkJCQkJCQkJICAgICAgIG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1
bmspLAotCQkJCQkJCQkgICAgICAgJnA2X2J1Zi5waCwgc2l6ZW9mKHA2X2J1ZikpOwotCQlpZiAo
cDYgPT0gTlVMTCkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIiVzOiBmYWlsZWQg
dG8gZ2V0IGFzY29uZiB2NiBsb29rdXAgYWRkclxuIiwKLQkJCQlfX2Z1bmNfXyk7Ci0JCQlyZXR1
cm4gKE5VTEwpOwotCQl9Ci0JCXNpbjYgPSAmcmVtb3RlX3N0b3JlLnNpbjY7Ci0JCXNpbjYtPnNp
bjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCQlzaW42LT5zaW42
X2xlbiA9IHNpemVvZigqc2luNik7Ci0jZW5kaWYKLQkJc2luNi0+c2luNl9wb3J0ID0gc2gtPnNy
Y19wb3J0OwotCQltZW1jcHkoJnNpbjYtPnNpbjZfYWRkciwgJnA2LT5hZGRyLCBzaXplb2Yoc3Ry
dWN0IGluNl9hZGRyKSk7Ci0JCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2lu
Nl9hZGRyKSkKLQkJCXplcm9fYWRkcmVzcyA9IDE7Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lm
ZGVmIElORVQKLQljYXNlIFNDVFBfSVBWNF9BRERSRVNTOgotCXsKLQkJLyogaXB2NCBhZGRyZXNz
IHBhcmFtICovCi0JCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICpwNCwgcDRfYnVmOwotCi0J
CWlmIChudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSkpIHsKLQkJCXJldHVybiBOVUxMOwotCQl9Ci0JCXA0ID0gKHN0cnVjdCBzY3Rw
X2lwdjRhZGRyX3BhcmFtICopc2N0cF9nZXRfbmV4dF9wYXJhbShtLAotCQkJCQkJCQkgICAgICAg
b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCi0JCQkJCQkJCSAgICAg
ICAmcDRfYnVmLnBoLCBzaXplb2YocDRfYnVmKSk7Ci0JCWlmIChwNCA9PSBOVUxMKSB7Ci0JCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQgYXNjb25mIHY0IGxv
b2t1cCBhZGRyXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJ
c2luID0gJnJlbW90ZV9zdG9yZS5zaW47Ci0JCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7Ci0j
aWZkZWYgSEFWRV9TSU5fTEVOCi0JCXNpbi0+c2luX2xlbiA9IHNpemVvZigqc2luKTsKLSNlbmRp
ZgotCQlzaW4tPnNpbl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQltZW1jcHkoJnNpbi0+c2luX2Fk
ZHIsICZwNC0+YWRkciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCWlmIChzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQotCQkJemVyb19hZGRyZXNzID0gMTsKLQkJYnJlYWs7
Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogaW52YWxpZCBhZGRyZXNzIHBhcmFtIHR5cGUg
Ki8KLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JaWYgKHplcm9fYWRkcmVzcykgewotCSAgICAgICAg
c3RjYiA9IHNjdHBfZmluZGFzc29jX2J5X3Z0YWcoTlVMTCwgZHN0LCBudG9obChzaC0+dl90YWcp
LCBpbnBfcCwKLQkJCQkJICAgICAgbmV0cCwgc2gtPnNyY19wb3J0LCBzaC0+ZGVzdF9wb3J0LCAx
LCB2cmZfaWQsIDApOwotCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JF
RigqaW5wX3ApOwotCQl9Ci0JfSBlbHNlIHsKLQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2FkZHIoaW5wX3AsCi0JCSAgICAmcmVtb3RlX3N0b3JlLnNhLCBuZXRwLAotCQkgICAgZHN0
LCBOVUxMKTsKLQl9Ci0JcmV0dXJuIChzdGNiKTsKLX0KLQotCi0vKgotICogYWxsb2NhdGUgYSBz
Y3RwX2lucGNiIGFuZCBzZXR1cCBhIHRlbXBvcmFyeSBiaW5kaW5nIHRvIGEgcG9ydC9hbGwKLSAq
IGFkZHJlc3Nlcy4gVGhpcyB3YXkgaWYgd2UgZG9uJ3QgZ2V0IGEgYmluZCB3ZSBieSBkZWZhdWx0
IHBpY2sgYSBlcGhlbWVyYWwKLSAqIHBvcnQgd2l0aCBhbGwgYWRkcmVzc2VzIGJvdW5kLgotICov
Ci1pbnQKLXNjdHBfaW5wY2JfYWxsb2Moc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90IHZyZl9p
ZCkKLXsKLQkvKgotCSAqIHdlIGdldCBjYWxsZWQgd2hlbiBhIG5ldyBlbmRwb2ludCBzdGFydHMg
dXAuIFdlIG5lZWQgdG8gYWxsb2NhdGUKLQkgKiB0aGUgc2N0cF9pbnBjYiBzdHJ1Y3R1cmUgZnJv
bSB0aGUgem9uZSBhbmQgaW5pdCBpdC4gTWFyayBpdCBhcwotCSAqIHVuYm91bmQgYW5kIGZpbmQg
YSBwb3J0IHRoYXQgd2UgY2FuIHVzZSBhcyBhbiBlcGhlbWVyYWwgd2l0aAotCSAqIElOQUREUl9B
TlkuIElmIHRoZSB1c2VyIGJpbmRzIGxhdGVyIG5vIHByb2JsZW0gd2UgY2FuIHRoZW4gYWRkIGlu
Ci0JICogdGhlIHNwZWNpZmljIGFkZHJlc3Nlcy4gQW5kIHNldHVwIHRoZSBkZWZhdWx0IHBhcmFt
ZXRlcnMgZm9yIHRoZQotCSAqIEVQLgotCSAqLwotCWludCBpLCBlcnJvcjsKLQlzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX3BjYiAqbTsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1l
OwotCXNjdHBfc2hhcmVka2V5X3QgKm51bGxfa2V5OwotCi0JZXJyb3IgPSAwOwotCi0JU0NUUF9J
TlBfSU5GT19XTE9DSygpOwotCWlucCA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBp
X3pvbmVfZXApLCBzdHJ1Y3Qgc2N0cF9pbnBjYik7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVND
VFBfUFJJTlRGKCJPdXQgb2YgU0NUUC1JTlBDQiBzdHJ1Y3R1cmVzIC0gbm8gcmVzb3VyY2VzXG4i
KTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT0JVRlMpOwotCQlyZXR1cm4gKEVO
T0JVRlMpOwotCX0KLQkvKiB6YXAgaXQgKi8KLQltZW1zZXQoaW5wLCAwLCBzaXplb2YoKmlucCkp
OwotCi0JLyogYnVtcCBnZW5lcmF0aW9ucyAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlu
cC0+aXBfaW5wLmlucC5pbnBfc3RhdGUgPSBJTlBDQl9TVEFURV9JTlVTRTsKLSNlbmRpZgotCS8q
IHNldHVwIHNvY2tldCBwb2ludGVycyAqLwotCWlucC0+c2N0cF9zb2NrZXQgPSBzbzsKLQlpbnAt
PmlwX2lucC5pbnAuaW5wX3NvY2tldCA9IHNvOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0J
aW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkID0gY3Job2xkKHNvLT5zb19jcmVkKTsKLSNlbmRpZgot
I2lmZGVmIElORVQ2Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgIWRlZmluZWQoX19X
aW5kb3dzX18pCi0JaWYgKElOUF9TT0NLQUYoc28pID09IEFGX0lORVQ2KSB7Ci0JCWlmIChNT0RV
TEVfR0xPQkFMKGlwNl9hdXRvX2Zsb3dsYWJlbCkpIHsKLQkJCWlucC0+aXBfaW5wLmlucC5pbnBf
ZmxhZ3MgfD0gSU42UF9BVVRPRkxPV0xBQkVMOwotCQl9Ci0JCWlmIChNT0RVTEVfR0xPQkFMKGlw
Nl92Nm9ubHkpKSB7Ci0JCQlpbnAtPmlwX2lucC5pbnAuaW5wX2ZsYWdzIHw9IElONlBfSVBWNl9W
Nk9OTFk7Ci0JCX0KLQl9Ci0jZW5kaWYKLSNlbmRpZgotCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50
ZXIgPSAxOwotCWlucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IFNDVFBfU0JfTElNSVRfUkNW
KHNvKSA+PiBTQ1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQ7Ci0JaW5wLT5zY3RwX2ZyYWdfcG9p
bnQgPSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVDsKLQlpbnAtPm1heF9jd25kID0gMDsKLQlpbnAt
PnNjdHBfY210X29uX29mZiA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKTsKLQlp
bnAtPmVjbl9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZWNuX2Vu
YWJsZSk7Ci0JaW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3ByX2VuYWJsZSk7Ci0JaW5wLT5hdXRoX3N1cHBvcnRlZCA9ICh1aW50OF90KVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSk7Ci0JaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0g
KHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpOwotCWlucC0+cmVj
b25maWdfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmln
X2VuYWJsZSk7Ci0JaW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX25yc2Fja19lbmFibGUpOwotCWlucC0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSAodWlu
dDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGt0ZHJvcF9lbmFibGUpOwotCWlucC0+aWRhdGFf
c3VwcG9ydGVkID0gMDsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JaW5wLT5maWJudW0g
PSBzby0+c29fZmlibnVtOwotI2Vsc2UKLQlpbnAtPmZpYm51bSA9IDA7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaW5wLT51bHBfaW5mbyA9IE5VTEw7Ci0JaW5wLT5yZWN2
X2NhbGxiYWNrID0gTlVMTDsKLQlpbnAtPnNlbmRfY2FsbGJhY2sgPSBOVUxMOwotCWlucC0+c2Vu
ZF9zYl90aHJlc2hvbGQgPSAwOwotI2VuZGlmCi0JLyogaW5pdCB0aGUgc21hbGwgaGFzaCB0YWJs
ZSB3ZSB1c2UgdG8gdHJhY2sgYXNvY2lkIDwtPiB0Y2IgKi8KLQlpbnAtPnNjdHBfYXNvY2lkaGFz
aCA9IFNDVFBfSEFTSF9JTklUKFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUsICZpbnAtPmhhc2hh
c29jaWRtYXJrKTsKLQlpZiAoaW5wLT5zY3RwX2Fzb2NpZGhhc2ggPT0gTlVMTCkgewotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCi0JCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOwot
I2VuZGlmCi0JCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5w
KTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCXJldHVybiAoRU5PQlVGUyk7Ci0JfQot
CVNDVFBfSU5DUl9FUF9DT1VOVCgpOwotCWlucC0+aXBfaW5wLmlucC5pbnBfaXBfdHRsID0gTU9E
VUxFX0dMT0JBTChpcF9kZWZ0dGwpOwotCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCi0Jc28t
PnNvX3BjYiA9IChjYWRkcl90KWlucDsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uIDwgODAzMDAwCi0JaWYgKChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tf
REdSQU0pIHx8Ci0JICAgIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfU0VRUEFDS0VUKSkgewot
I2Vsc2UKLQlpZiAoU0NUUF9TT19UWVBFKHNvKSA9PSBTT0NLX1NFUVBBQ0tFVCkgewotI2VuZGlm
Ci0JCS8qIFVEUCBzdHlsZSBzb2NrZXQgKi8KLQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENC
X0ZMQUdTX1VEUFRZUEUgfAotCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCk7Ci0JCS8qIEJl
IHN1cmUgaXQgaXMgTk9OLUJMT0NLSU5HIElPIGZvciBVRFAgKi8KLQkJLyogU0NUUF9TRVRfU09f
TkJJTyhzbyk7ICovCi0JfSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfU1RSRUFN
KSB7Ci0JCS8qIFRDUCBzdHlsZSBzb2NrZXQgKi8KLQkJaW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUgfAotCQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCk7Ci0JCS8q
IEJlIHN1cmUgd2UgaGF2ZSBibG9ja2luZyBJTyBieSBkZWZhdWx0ICovCi0JCVNDVFBfQ0xFQVJf
U09fTkJJTyhzbyk7Ci0jaWYgZGVmaW5lZChfX1BhbmRhX18pCi0JfSBlbHNlIGlmIChTQ1RQX1NP
X1RZUEUoc28pID09IFNPQ0tfRkFTVFNFUVBBQ0tFVCkgewotCQlpbnAtPnNjdHBfZmxhZ3MgPSAo
U0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8Ci0JCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKTsK
LQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSk7
Ci0JfSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tfRkFTVFNUUkVBTSkgewotCQlp
bnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8Ci0JCSAgICBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKTsKLQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
WkVST19DT1BZX0FDVElWRSk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQkvKgotCQkgKiB1bnN1cHBv
cnRlZCBzb2NrZXQgdHlwZSAoUkFXLCBldGMpLSBpbiBjYXNlIHdlIG1pc3NlZCBpdAotCQkgKiBp
biBwcm90b3N3Ci0JCSAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfUENCLCBFT1BOT1RTVVBQKTsKLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJY3JmcmVlKGlucC0+aXBfaW5wLmlucC5pbnBfY3Jl
ZCk7Ci0jZW5kaWYKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXAp
LCBpbnApOwotCQlyZXR1cm4gKEVPUE5PVFNVUFApOwotCX0KLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQX0ZSQUdfTEVWRUxfMSkgewot
CQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOwot
CQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7
Ci0JfSBlbHNlIGlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVh
dmUpID09IFNDVFBfRlJBR19MRVZFTF8yKSB7Ci0JCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7Ci0JCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOwotCX0gZWxzZSBpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSA9PSBTQ1RQX0ZSQUdfTEVWRUxfMCkgewot
CQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKTsK
LQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMp
OwotCX0KLQlpbnAtPnNjdHBfdGNiaGFzaCA9IFNDVFBfSEFTSF9JTklUKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9wY2J0YmxzaXplKSwKLQkJCQkJICAgJmlucC0+c2N0cF9oYXNobWFyayk7Ci0JaWYg
KGlucC0+c2N0cF90Y2JoYXNoID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIk91dCBvZiBTQ1RQ
LUlOUENCLT5oYXNoaW5pdCAtIG5vIHJlc291cmNlc1xuIik7Ci0JCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT0JVRlMpOwotCQlzby0+
c29fcGNiID0gTlVMTDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQljcmZyZWUoaW5wLT5p
cF9pbnAuaW5wLmlucF9jcmVkKTsKLSNlbmRpZgotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0Vf
SU5GTyhpcGlfem9uZV9lcCksIGlucCk7Ci0JCXJldHVybiAoRU5PQlVGUyk7Ci0JfQotI2lmZGVm
IFNDVFBfTVZSRgotCWlucC0+dnJmX3NpemUgPSBTQ1RQX0RFRkFVTFRfVlJGX1NJWkU7Ci0JU0NU
UF9NQUxMT0MoaW5wLT5tX3ZyZl9pZHMsIHVpbnQzMl90ICosCi0JCSAgICAoc2l6ZW9mKHVpbnQz
Ml90KSAqIGlucC0+dnJmX3NpemUpLCBTQ1RQX01fTVZSRik7Ci0JaWYgKGlucC0+bV92cmZfaWRz
ID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7Ci0JCXNvLT5zb19wY2IgPSBOVUxMOwotCQlTQ1RQX0hB
U0hfRlJFRShpbnAtPnNjdHBfdGNiaGFzaCwgaW5wLT5zY3RwX2hhc2htYXJrKTsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotCQljcmZyZWUoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkKTsKLSNl
bmRpZgotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIGlucCk7
Ci0JCXJldHVybiAoRU5PQlVGUyk7Ci0JfQotCWlucC0+bV92cmZfaWRzWzBdID0gdnJmX2lkOwot
CWlucC0+bnVtX3ZyZnMgPSAxOwotI2VuZGlmCi0JaW5wLT5kZWZfdnJmX2lkID0gdnJmX2lkOwot
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBk
ZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKQotCWlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHggPSBs
Y2tfbXR4X2FsbG9jX2luaXQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9ncnAsIFNDVFBf
QkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfYXR0cik7Ci0JaWYgKGlucC0+aXBfaW5wLmlucC5pbnBj
Yl9tdHggPT0gTlVMTCkgewotCQlTQ1RQX1BSSU5URigiaW5fcGNiYWxsb2M6IGNhbid0IGFsbG9j
IG11dGV4ISBzbz0lcFxuIiwgKHZvaWQgKilzbyk7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCVNDVFBf
RlJFRShpbnAtPm1fdnJmX2lkcywgU0NUUF9NX01WUkYpOwotI2VuZGlmCi0JCVNDVFBfSEFTSF9G
UkVFKGlucC0+c2N0cF90Y2JoYXNoLCBpbnAtPnNjdHBfaGFzaG1hcmspOwotCQlzby0+c29fcGNi
ID0gTlVMTDsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBp
bnApOwotCQlTQ1RQX1VOTE9DS19FWEMoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2Nr
KTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRU5PTUVNKTsKLQkJcmV0dXJuIChFTk9NRU0pOwotCX0KLSNlbGlmIGRlZmluZWQoQVBQ
TEVfTElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCi0JbGNrX210eF9pbml0KCZp
bnAtPmlwX2lucC5pbnAuaW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dy
cCwgU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKLSNlbHNlCi0JbGNrX210eF9p
bml0KCZpbnAtPmlwX2lucC5pbnAuaW5wY2JfbXR4LCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbyku
aXBpX2xvY2tfZ3JwLCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfYXR0cik7Ci0j
ZW5kaWYKLSNlbmRpZgotCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQlTQ1RQX0lOUF9MT0NLX0lO
SVQoaW5wKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCUlOUF9MT0NLX0lOSVQoJmlucC0+
aXBfaW5wLmlucCwgImlucCIsICJzY3RwaW5wIik7Ci0jZW5kaWYKLQlTQ1RQX0lOUF9SRUFEX0lO
SVQoaW5wKTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChpbnApOwotCS8qIGxvY2sgdGhl
IG5ldyBlcCAqLwotCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0KLQkvKiBhZGQgaXQgdG8gdGhlIGlu
Zm8gYXJlYSAqLwotCUxJU1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGxpc3RoZWFkKSwg
aW5wLCBzY3RwX2xpc3QpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlucC0+aXBfaW5wLmlu
cC5pbnBfcGNiaW5mbyA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbyk7Ci0jaWYgZGVmaW5lZChB
UFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSB8fCBkZWZpbmVkKEFQ
UExFX0xJT04pIHx8IGRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQotCUxJU1RfSU5TRVJUX0hF
QUQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmxpc3RoZWFkLCAmaW5wLT5pcF9pbnAuaW5wLCBp
bnBfbGlzdCk7Ci0jZWxzZQotCUxJU1RfSU5TRVJUX0hFQUQoU0NUUF9CQVNFX0lORk8oc2N0Ymlu
Zm8pLmlwaV9saXN0aGVhZCwgJmlucC0+aXBfaW5wLmlucCwgaW5wX2xpc3QpOwotI2VuZGlmCi0j
ZW5kaWYKLQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQotCVRBSUxRX0lOSVQoJmlucC0+cmVh
ZF9xdWV1ZSk7Ci0JTElTVF9JTklUKCZpbnAtPnNjdHBfYWRkcl9saXN0KTsKLQotCUxJU1RfSU5J
VCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0KLSNpZmRlZiBTQ1RQX1RSQUNLX0ZSRUVEX0FTT0NT
Ci0JLyogVEVNUCBDT0RFICovCi0JTElTVF9JTklUKCZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3Qp
OwotI2VuZGlmCi0JLyogSW5pdCB0aGUgdGltZXIgc3RydWN0dXJlIGZvciBzaWduYXR1cmUgY2hh
bmdlICovCi0JU0NUUF9PU19USU1FUl9JTklUKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5n
ZS50aW1lcik7Ci0JaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudHlwZSA9IFNDVFBfVElN
RVJfVFlQRV9ORVdDT09LSUU7Ci0KLQkvKiBub3cgaW5pdCB0aGUgYWN0dWFsIGVuZHBvaW50IGRl
ZmF1bHQgZGF0YSAqLwotCW0gPSAmaW5wLT5zY3RwX2VwOwotCi0JLyogc2V0dXAgdGhlIGJhc2Ug
dGltZW91dCBpbmZvcm1hdGlvbiAqLwotCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJf
U0VORF0gPSBTRUNfVE9fVElDS1MoU0NUUF9TRU5EX1NFQyk7CS8qIG5lZWRlZCA/ICovCi0JbS0+
c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9JTklUXSA9IFNFQ19UT19USUNLUyhTQ1RQX0lO
SVRfU0VDKTsJLyogbmVlZGVkID8gKi8KLQltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVS
X1JFQ1ZdID0gTVNFQ19UT19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNr
X3RpbWVfZGVmYXVsdCkpOwotCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRC
RUFUXSA9IE1TRUNfVE9fVElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRl
cnZhbF9kZWZhdWx0KSk7Ci0JbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9QTVRVXSA9
IFNFQ19UT19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1
bHQpKTsKLQltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dOXSA9IFNF
Q19UT19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZh
dWx0KSk7Ci0JbS0+c2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9TSUdOQVRVUkVdID0gU0VD
X1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCkp
OwotCS8qIGFsbCBtYXgvbWluIG1heCBhcmUgaW4gbXMgKi8KLQltLT5zY3RwX21heHJ0byA9IFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWF4X2RlZmF1bHQpOwotCW0tPnNjdHBfbWlucnRvID0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19taW5fZGVmYXVsdCk7Ci0JbS0+aW5pdGlhbF9ydG8g
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCk7Ci0JbS0+aW5pdGlh
bF9pbml0X3J0b19tYXggPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1
bHQpOwotCW0tPnNjdHBfc2Fja19mcmVxID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJl
cV9kZWZhdWx0KTsKLQltLT5tYXhfaW5pdF90aW1lcyA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9p
bml0X3J0eF9tYXhfZGVmYXVsdCk7Ci0JbS0+bWF4X3NlbmRfdGltZXMgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KTsKLQltLT5kZWZfbmV0X2ZhaWx1cmUgPSBT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQpOwotCW0tPmRlZl9uZXRf
cGZfdGhyZXNob2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKTsK
LQltLT5zY3RwX3N3c19zZW5kZXIgPSBTQ1RQX1NXU19TRU5ERVJfREVGOwotCW0tPnNjdHBfc3dz
X3JlY2VpdmVyID0gU0NUUF9TV1NfUkVDRUlWRVJfREVGOwotCW0tPm1heF9idXJzdCA9IFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCk7Ci0JbS0+ZnJfbWF4X2J1cnN0ID0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KTsKLQotCW0tPnNjdHBf
ZGVmYXVsdF9jY19tb2R1bGUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1
bGUpOwotCW0tPnNjdHBfZGVmYXVsdF9zc19tb2R1bGUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGVmYXVsdF9zc19tb2R1bGUpOwotCW0tPm1heF9vcGVuX3N0cmVhbXNfaW50b21lID0gU0NUUF9C
QVNFX1NZU0NUTChzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCk7Ci0JLyogbnVtYmVy
IG9mIHN0cmVhbXMgdG8gcHJlLW9wZW4gb24gYSBhc3NvY2lhdGlvbiAqLwotCW0tPnByZV9vcGVu
X3N0cmVhbV9jb3VudCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1z
X2RlZmF1bHQpOwotCi0JLyogQWRkIGFkYXB0YXRpb24gY29va2llICovCi0JbS0+YWRhcHRhdGlv
bl9sYXllcl9pbmRpY2F0b3IgPSAwOwotCW0tPmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3By
b3ZpZGVkID0gMDsKLQotCS8qIHNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KLQltLT5y
YW5kb21fY291bnRlciA9IDE7Ci0JbS0+c3RvcmVfYXQgPSBTQ1RQX1NJR05BVFVSRV9TSVpFOwot
CVNDVFBfUkVBRF9SQU5ET00obS0+cmFuZG9tX251bWJlcnMsIHNpemVvZihtLT5yYW5kb21fbnVt
YmVycykpOwotCXNjdHBfZmlsbF9yYW5kb21fc3RvcmUobSk7Ci0KLQkvKiBNaW5pbXVtIGNvb2tp
ZSBzaXplICovCi0JbS0+c2l6ZV9vZl9hX2Nvb2tpZSA9IChzaXplb2Yoc3RydWN0IHNjdHBfaW5p
dF9tc2cpICogMikgKwotCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKTsKLQlt
LT5zaXplX29mX2FfY29va2llICs9IFNDVFBfU0lHTkFUVVJFX1NJWkU7Ci0KLQkvKiBTZXR1cCB0
aGUgaW5pdGlhbCBzZWNyZXQgKi8KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdGltZSk7
Ci0JbS0+dGltZV9vZl9zZWNyZXRfY2hhbmdlID0gdGltZS50dl9zZWM7Ci0KLQlmb3IgKGkgPSAw
OyBpIDwgU0NUUF9OVU1CRVJfT0ZfU0VDUkVUUzsgaSsrKSB7Ci0JCW0tPnNlY3JldF9rZXlbMF1b
aV0gPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTihtKTsKLQl9Ci0Jc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFLCBpbnAsIE5VTEwsIE5VTEwpOwotCi0JLyogSG93IGxv
bmcgaXMgYSBjb29raWUgZ29vZCBmb3IgPyAqLwotCW0tPmRlZl9jb29raWVfbGlmZSA9IE1TRUNf
VE9fVElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQp
KTsKLQkvKgotCSAqIEluaXRpYWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycwotCSAqLwot
CW0tPmxvY2FsX2htYWNzID0gc2N0cF9kZWZhdWx0X3N1cHBvcnRlZF9obWFjbGlzdCgpOwotCW0t
PmxvY2FsX2F1dGhfY2h1bmtzID0gc2N0cF9hbGxvY19jaHVua2xpc3QoKTsKLQlpZiAoaW5wLT5h
c2NvbmZfc3VwcG9ydGVkKSB7Ci0JCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkYsIG0t
PmxvY2FsX2F1dGhfY2h1bmtzKTsKLQkJc2N0cF9hdXRoX2FkZF9jaHVuayhTQ1RQX0FTQ09ORl9B
Q0ssIG0tPmxvY2FsX2F1dGhfY2h1bmtzKTsKLQl9Ci0JbS0+ZGVmYXVsdF9kc2NwID0gMDsKLSNp
ZmRlZiBJTkVUNgotCW0tPmRlZmF1bHRfZmxvd2xhYmVsID0gMDsKLSNlbmRpZgotCW0tPnBvcnQg
PSAwOyAvKiBlbmNhcHN1bGF0aW9uIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KLQlMSVNUX0lOSVQo
Jm0tPnNoYXJlZF9rZXlzKTsKLQkvKiBhZGQgZGVmYXVsdCBOVUxMIGtleSBhcyBrZXkgaWQgMCAq
LwotCW51bGxfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQlzY3RwX2luc2VydF9zaGFy
ZWRrZXkoJm0tPnNoYXJlZF9rZXlzLCBudWxsX2tleSk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwg
MTIpOwotI2VuZGlmCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLQotdm9pZAotc2N0cF9tb3ZlX3Bj
Yl9hbmRfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsIHN0cnVjdCBzY3RwX2lucGNi
ICpuZXdfaW5wLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7Ci0JdWludDE2X3QgbHBvcnQsIHJwb3J0OwotCXN0cnVjdCBzY3RwcGNiaGVhZCAq
aGVhZDsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpvbGFkZHI7Ci0KLQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlT
Q1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0JU0NUUF9JTlBfV0xPQ0sob2xkX2lucCk7Ci0JU0NUUF9J
TlBfV0xPQ0sobmV3X2lucCk7Ci0JU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQlhdG9taWNfc3VidHJh
Y3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0KLQluZXdfaW5wLT5zY3RwX2VwLnRpbWVf
b2Zfc2VjcmV0X2NoYW5nZSA9Ci0JICAgIG9sZF9pbnAtPnNjdHBfZXAudGltZV9vZl9zZWNyZXRf
Y2hhbmdlOwotCW1lbWNweShuZXdfaW5wLT5zY3RwX2VwLnNlY3JldF9rZXksIG9sZF9pbnAtPnNj
dHBfZXAuc2VjcmV0X2tleSwKLQkgICAgc2l6ZW9mKG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tl
eSkpOwotCW5ld19pbnAtPnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID0KLQkgICAgb2xk
X2lucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXI7Ci0JbmV3X2lucC0+c2N0cF9lcC5s
YXN0X3NlY3JldF9udW1iZXIgPQotCSAgICBvbGRfaW5wLT5zY3RwX2VwLmxhc3Rfc2VjcmV0X251
bWJlcjsKLQluZXdfaW5wLT5zY3RwX2VwLnNpemVfb2ZfYV9jb29raWUgPSBvbGRfaW5wLT5zY3Rw
X2VwLnNpemVfb2ZfYV9jb29raWU7Ci0KLQkvKiBtYWtlIGl0IHNvIG5ldyBkYXRhIHBvdXJzIGlu
dG8gdGhlIG5ldyBzb2NrZXQgKi8KLQlzdGNiLT5zY3RwX3NvY2tldCA9IG5ld19pbnAtPnNjdHBf
c29ja2V0OwotCXN0Y2ItPnNjdHBfZXAgPSBuZXdfaW5wOwotCi0JLyogQ29weSB0aGUgcG9ydCBh
Y3Jvc3MgKi8KLQlscG9ydCA9IG5ld19pbnAtPnNjdHBfbHBvcnQgPSBvbGRfaW5wLT5zY3RwX2xw
b3J0OwotCXJwb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JLyogUHVsbCB0aGUgdGNiIGZyb20gdGhlIG9s
ZCBhc3NvY2lhdGlvbiAqLwotCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiaGFzaCk7Ci0JTElT
VF9SRU1PVkUoc3RjYiwgc2N0cF90Y2JsaXN0KTsKLQlpZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRf
aGFzaCkgewotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmFzb2NpZGhhc2gpOwotCX0KLQkv
KiBOb3cgaW5zZXJ0IHRoZSBuZXdfaW5wIGludG8gdGhlIFRDUCBjb25uZWN0ZWQgaGFzaCAqLwot
CWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9BTExB
RERSKChscG9ydCB8IHJwb3J0KSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKV07Ci0KLQlM
SVNUX0lOU0VSVF9IRUFEKGhlYWQsIG5ld19pbnAsIHNjdHBfaGFzaCk7Ci0JLyogSXRzIHNhZmUg
dG8gYWNjZXNzICovCi0JbmV3X2lucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfVU5C
T1VORDsKLQotCS8qIE5vdyBtb3ZlIHRoZSB0Y2IgaW50byB0aGUgZW5kcG9pbnQgbGlzdCAqLwot
CUxJU1RfSU5TRVJUX0hFQUQoJm5ld19pbnAtPnNjdHBfYXNvY19saXN0LCBzdGNiLCBzY3RwX3Rj
Ymxpc3QpOwotCS8qCi0JICogUXVlc3Rpb24sIGRvIHdlIGV2ZW4gbmVlZCB0byB3b3JyeSBhYm91
dCB0aGUgZXAtaGFzaCBzaW5jZSB3ZQotCSAqIG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbj8gUHJv
YmFibHkgbm90IDo+IHNvIGxldHMgZ2V0IHJpZCBvZiBpdAotCSAqIGFuZCBub3Qgc3VjayB1cCBh
bnkga2VybmVsIG1lbW9yeSBpbiB0aGF0LgotCSAqLwotCWlmIChzdGNiLT5hc29jLmluX2Fzb2Np
ZF9oYXNoKSB7Ci0JCXN0cnVjdCBzY3RwYXNvY2hlYWQgKmxoZDsKLQkJbGhkID0gJm5ld19pbnAt
PnNjdHBfYXNvY2lkaGFzaFtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLmFzc29jX2lkLAot
CQkJbmV3X2lucC0+aGFzaGFzb2NpZG1hcmspXTsKLQkJTElTVF9JTlNFUlRfSEVBRChsaGQsIHN0
Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7Ci0JfQotCS8qIE9rLiBMZXQncyByZXN0YXJ0IHRpbWVy
LiAqLwotCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsK
LQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBuZXdfaW5w
LAotCQkgICAgc3RjYiwgbmV0KTsKLQl9Ci0KLQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQlp
ZiAobmV3X2lucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwpIHsKLQkJU0NUUF9IQVNIX0ZSRUUobmV3
X2lucC0+c2N0cF90Y2JoYXNoLCBuZXdfaW5wLT5zY3RwX2hhc2htYXJrKTsKLQkJbmV3X2lucC0+
c2N0cF90Y2JoYXNoID0gTlVMTDsKLQl9Ci0JaWYgKChuZXdfaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApIHsKLQkJLyogU3Vic2V0IGJvdW5kLCBzbyBjb3B5
IGluIHRoZSBsYWRkciBsaXN0IGZyb20gdGhlIG9sZF9pbnAgKi8KLQkJTElTVF9GT1JFQUNIKG9s
YWRkciwgJm9sZF9pbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQlsYWRk
ciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qg
c2N0cF9sYWRkcik7Ci0JCQlpZiAobGFkZHIgPT0gTlVMTCkgewotCQkJCS8qCi0JCQkJICogR2Fr
LCB3aGF0IGNhbiB3ZSBkbz8gVGhpcyBhc3NvYyBpcyByZWFsbHkKLQkJCQkgKiBIT1NFRC4gV2Ug
cHJvYmFibHkgc2hvdWxkIHNlbmQgYW4gYWJvcnQKLQkJCQkgKiBoZXJlLgotCQkJCSAqLwotCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQXNzb2NpYXRpb24gaG9zZWQgaW4gVENQIG1vZGVs
LCBvdXQgb2YgbGFkZHIgbWVtb3J5XG4iKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCVNDVFBf
SU5DUl9MQUREUl9DT1VOVCgpOwotCQkJbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxhZGRyKSk7
Ci0JCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbGFkZHItPnN0YXJ0X3RpbWUpOwotCQkJ
bGFkZHItPmlmYSA9IG9sYWRkci0+aWZhOwotCQkJYXRvbWljX2FkZF9pbnQoJmxhZGRyLT5pZmEt
PnJlZmNvdW50LCAxKTsKLQkJCUxJU1RfSU5TRVJUX0hFQUQoJm5ld19pbnAtPnNjdHBfYWRkcl9s
aXN0LCBsYWRkciwKLQkJCSAgICBzY3RwX254dF9hZGRyKTsKLQkJCW5ld19pbnAtPmxhZGRyX2Nv
dW50Kys7Ci0JCQlpZiAob2xhZGRyID09IHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MpIHsK
LQkJCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7Ci0JCQl9Ci0JCX0KLQl9
Ci0JLyogTm93IGFueSBydW5uaW5nIHRpbWVycyBuZWVkIHRvIGJlIGFkanVzdGVkCi0JICogc2lu
Y2Ugd2UgcmVhbGx5IGRvbid0IGNhcmUgaWYgdGhleSBhcmUgcnVubmluZwotCSAqIG9yIG5vdCBq
dXN0IGJsYXN0IGluIHRoZSBuZXdfaW5wIGludG8gYWxsIG9mCi0JICogdGhlbS4KLQkgKi8KLQot
CXN0Y2ItPmFzb2MuZGFja190aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29j
LmFzY29uZl90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29jLnN0cnJlc2V0
X3RpbWVyLmVwID0gKHZvaWQgKiluZXdfaW5wOwotCXN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1l
ci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29jLmF1dG9jbG9zZV90aW1lci5lcCA9
ICh2b2lkICopbmV3X2lucDsKLQlzdGNiLT5hc29jLmRlbGF5ZWRfZXZlbnRfdGltZXIuZXAgPSAo
dm9pZCAqKW5ld19pbnA7Ci0Jc3RjYi0+YXNvYy5kZWxldGVfcHJpbV90aW1lci5lcCA9ICh2b2lk
ICopbmV3X2lucDsKLQkvKiBub3cgd2hhdCBhYm91dCB0aGUgbmV0cz8gKi8KLQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCW5ldC0+cG10dV90aW1l
ci5lcCA9ICh2b2lkICopbmV3X2lucDsKLQkJbmV0LT5oYl90aW1lci5lcCA9ICh2b2lkICopbmV3
X2lucDsKLQkJbmV0LT5yeHRfdGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7Ci0JfQotCVNDVFBf
SU5QX1dVTkxPQ0sobmV3X2lucCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhvbGRfaW5wKTsKLX0KLQot
LyoKLSAqIGluc2VydCBhbiBsYWRkciBlbnRyeSB3aXRoIHRoZSBnaXZlbiBpZmEgZm9yIHRoZSBk
ZXNpcmVkIGxpc3QKLSAqLwotc3RhdGljIGludAotc2N0cF9pbnNlcnRfbGFkZHIoc3RydWN0IHNj
dHBsYWRkciAqbGlzdCwgc3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQzMl90IGFjdCkKLXsKLQlz
dHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQlsYWRkciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9C
QVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7Ci0JaWYgKGxhZGRy
ID09IE5VTEwpIHsKLQkJLyogb3V0IG9mIG1lbW9yeT8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCXJldHVy
biAoRUlOVkFMKTsKLQl9Ci0JU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7Ci0JbWVtc2V0KGxhZGRy
LCAwLCBzaXplb2YoKmxhZGRyKSk7Ci0JKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmxhZGRy
LT5zdGFydF90aW1lKTsKLQlsYWRkci0+aWZhID0gaWZhOwotCWxhZGRyLT5hY3Rpb24gPSBhY3Q7
Ci0JYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291bnQsIDEpOwotCS8qIGluc2VydCBpdCAqLwot
CUxJU1RfSU5TRVJUX0hFQUQobGlzdCwgbGFkZHIsIHNjdHBfbnh0X2FkZHIpOwotCi0JcmV0dXJu
ICgwKTsKLX0KLQotLyoKLSAqIFJlbW92ZSBhbiBsYWRkciBlbnRyeSBmcm9tIHRoZSBsb2NhbCBh
ZGRyZXNzIGxpc3QgKG9uIGFuIGFzc29jKQotICovCi1zdGF0aWMgdm9pZAotc2N0cF9yZW1vdmVf
bGFkZHIoc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyKQotewotCi0JLyogcmVtb3ZlIGZyb20gdGhl
IGxpc3QgKi8KLQlMSVNUX1JFTU9WRShsYWRkciwgc2N0cF9ueHRfYWRkcik7Ci0Jc2N0cF9mcmVl
X2lmYShsYWRkci0+aWZhKTsKLQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9u
ZV9sYWRkciksIGxhZGRyKTsKLQlTQ1RQX0RFQ1JfTEFERFJfQ09VTlQoKTsKLX0KLQotI2lmICEo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykpCi0vKgotICogRG9uJ3Qga25vdyB3aHksIGJ1dCB3aXRob3V0IHRoaXMgdGhl
cmUgaXMgYW4gdW5rbm93biByZWZlcmVuY2Ugd2hlbgotICogY29tcGlsaW5nIE5ldEJTRC4uLiBo
bW0KLSAqLwotZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICos
IHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYpOwotI2VuZGlmCi0KLQotLyogc2N0cF9pZmFwIGlz
IHVzZWQgdG8gYnlwYXNzIG5vcm1hbCBsb2NhbCBhZGRyZXNzIHZhbGlkYXRpb24gY2hlY2tzICov
Ci1pbnQKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1
MDAwMDAKLXNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphZGRyLAotICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1
Y3QgdGhyZWFkICpwKQotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXNjdHBfaW5wY2JfYmlu
ZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBQS1RIUkVBRCBwKQotI2Vsc2UKLXNjdHBf
aW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgcHJvYyAqcCkK
LSNlbmRpZgotewotCS8qIGJpbmQgYSBlcCB0byBhIHNvY2tldCBhZGRyZXNzICovCi0Jc3RydWN0
IHNjdHBwY2JoZWFkICpoZWFkOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnAsICppbnBfdG1wOwot
I2lmIGRlZmluZWQoSU5FVCkgfHwgKGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9f
KSkgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0Jc3RydWN0
IGlucGNiICppcF9pbnA7Ci0jZW5kaWYKLQlpbnQgcG9ydF9yZXVzZV9hY3RpdmUgPSAwOwotCWlu
dCBiaW5kYWxsOwotI2lmZGVmIFNDVFBfTVZSRgotCWludCBpOwotI2VuZGlmCi0JdWludDE2X3Qg
bHBvcnQ7Ci0JaW50IGVycm9yOwotCXVpbnQzMl90IHZyZl9pZDsKLQotCWxwb3J0ID0gMDsKLQli
aW5kYWxsID0gMTsKLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotI2lm
IGRlZmluZWQoSU5FVCkgfHwgKGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkg
fHwgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0JaXBfaW5wID0g
KHN0cnVjdCBpbnBjYiAqKXNvLT5zb19wY2I7Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQX0RFQlVHCi0J
aWYgKGFkZHIpIHsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJCaW5kIGNhbGxlZCBwb3J0
OiAlZFxuIiwKLQkJCW50b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9wb3J0
KSk7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQWRkcjogIik7Ci0JCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX1BDQjEsIGFkZHIpOwotCX0KLSNlbmRpZgotCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0gMCkgewotCQkvKiBhbHJlYWR5IGRpZCBh
IGJpbmQsIHN1YnNlcXVlbnQgYmluZHMgTk9UIGFsbG93ZWQgISAqLwotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQly
ZXR1cm4gKEVJTlZBTCk7Ci0JfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDUwMDAwMAotI2lmZGVmIElOVkFSSUFOVFMKLQlpZiAocCA9PSBOVUxMKQot
CQlwYW5pYygibnVsbCBwcm9jL3RocmVhZCIpOwotI2VuZGlmCi0jZW5kaWYKLQlpZiAoYWRkciAh
PSBOVUxMKSB7Ci0JCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQlj
YXNlIEFGX0lORVQ6Ci0JCXsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCQkvKiBJ
UFY2X1Y2T05MWSBzb2NrZXQ/ICovCi0JCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpcF9pbnApKSB7
Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgRUlOVkFMKTsKLQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQl9Ci0jaWZkZWYgSEFWRV9T
QV9MRU4KLQkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKCpzaW4pKSB7Ci0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFM
KTsKLQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQl9Ci0jZW5kaWYKLQotCQkJc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0JCQlscG9ydCA9IHNpbi0+c2luX3BvcnQ7Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQkvKgot
CQkJICogRm9yIExPT1BCQUNLIHRoZSBwcmlzb25fbG9jYWxfaXA0KCkgY2FsbCB3aWxsIHRyYW5z
bXV0ZSB0aGUgaXAgYWRkcmVzcwotCQkJICogdG8gdGhlIHByb3BlciB2YWx1ZS4KLQkJCSAqLwot
CQkJaWYgKHAgJiYgKGVycm9yID0gcHJpc29uX2xvY2FsX2lwNChwLT50ZF91Y3JlZCwgJnNpbi0+
c2luX2FkZHIpKSAhPSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgZXJyb3IpOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJ
fQotI2VuZGlmCi0JCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewot
CQkJCWJpbmRhbGwgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJCS8qIE9ubHkgZm9yIHB1cmUgSVB2NiBBZGRy
ZXNzLiAoTm8gSVB2NCBNYXBwZWQhKSAqLwotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsK
LQotCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLQotI2lmZGVmIEhBVkVf
U0FfTEVOCi0JCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZigqc2luNikpIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5W
QUwpOwotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCX0KLSNlbmRpZgotCQkJbHBvcnQgPSBzaW42
LT5zaW42X3BvcnQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDAwCi0JCQkvKgotCQkJICogRm9yIExPT1BCQUNLIHRoZSBwcmlzb25fbG9jYWxf
aXA2KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXB2NiBhZGRyZXNzCi0JCQkgKiB0byB0aGUg
cHJvcGVyIHZhbHVlLgotCQkJICovCi0JCQlpZiAocCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxf
aXA2KHAtPnRkX3VjcmVkLCAmc2luNi0+c2luNl9hZGRyLAotCQkJICAgIChTQ1RQX0lQVjZfVjZP
TkxZKGlucCkgIT0gMCkpKSAhPSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgZXJyb3IpOwotCQkJCXJldHVybiAoZXJyb3Ip
OwotCQkJfQotI2VuZGlmCi0JCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5z
aW42X2FkZHIpKSB7Ci0JCQkJYmluZGFsbCA9IDA7Ci0jaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9T
Q09QRQotCQkJCS8qIEtBTUUgaGFjazogZW1iZWQgc2NvcGVpZCAqLwotI2lmIGRlZmluZWQoU0NU
UF9LQU1FKQotCQkJCWlmIChzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91
c2VfZGVmem9uZSkpICE9IDApIHsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCQkJcmV0dXJuIChFSU5WQUwp
OwotCQkJCX0KLSNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVP
UEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKLQkJCQlpZiAoaW42X2VtYmVkc2Nv
cGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgaXBfaW5wLCBOVUxMKSAhPSAwKSB7Ci0jZWxzZQot
CQkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBpcF9pbnAsIE5V
TEwsIE5VTEwpICE9IDApIHsKLSNlbmRpZgotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJ
TlZBTCk7Ci0JCQkJfQotI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQllcnJvciA9IHNj
b3BlNl9jaGVja19pZChzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOwotCQkJ
CWlmIChlcnJvciAhPSAwKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIGVycm9yKTsKLQkJCQkJcmV0dXJuIChlcnJvcik7Ci0J
CQkJfQotI2Vsc2UKLQkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2lu
NikgIT0gMCkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCQkJfQot
I2VuZGlmCi0jZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotCQkJfQotI2lmbmRl
ZiBTQ09QRURST1VUSU5HCi0JCQkvKiB0aGlzIG11c3QgYmUgY2xlYXJlZCBmb3IgaWZhX2lmd2l0
aGFkZHIoKSAqLwotCQkJc2luNi0+c2luNl9zY29wZV9pZCA9IDA7Ci0jZW5kaWYgLyogU0NPUEVE
Uk9VVElORyAqLwotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQl7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nv
bm47Ci0KLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCQlyZXR1cm4gKEVJTlZB
TCk7Ci0JCQl9Ci0jZW5kaWYKLQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRk
cjsKLQkJCWxwb3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7Ci0JCQlpZiAoc2Nvbm4tPnNjb25uX2Fk
ZHIgIT0gTlVMTCkgewotCQkJCWJpbmRhbGwgPSAwOwotCQkJfQotCQkJYnJlYWs7Ci0JCX0KLSNl
bmRpZgotCQlkZWZhdWx0OgotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFGTk9TVVBQT1JUKTsKLQkJCXJldHVybiAoRUFGTk9TVVBQ
T1JUKTsKLQkJfQotCX0KLQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0JU0NUUF9JTlBfV0xPQ0so
aW5wKTsKLQkvKiBTZXR1cCBhIHZyZl9pZCB0byBiZSB0aGUgZGVmYXVsdCBmb3IgdGhlIG5vbi1i
aW5kLWFsbCBjYXNlLiAqLwotCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLQotCS8qIGluY3Jl
YXNlIG91ciBjb3VudCBkdWUgdG8gdGhlIHVubG9jayB3ZSBkbyAqLwotCVNDVFBfSU5QX0lOQ1Jf
UkVGKGlucCk7Ci0JaWYgKGxwb3J0KSB7Ci0JCS8qCi0JCSAqIERpZCB0aGUgY2FsbGVyIHNwZWNp
ZnkgYSBwb3J0PyBpZiBzbyB3ZSBtdXN0IHNlZSBpZiBhbiBlcAotCQkgKiBhbHJlYWR5IGhhcyB0
aGlzIG9uZSBib3VuZC4KLQkJICovCi0JCS8qIGdvdCB0byBiZSByb290IHRvIGdldCBhdCBsb3cg
cG9ydHMgKi8KLSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJaWYgKG50b2hzKGxwb3J0KSA8
IElQUE9SVF9SRVNFUlZFRCkgewotCQkJaWYgKHAgJiYgKGVycm9yID0KLSNpZmRlZiBfX0ZyZWVC
U0RfXwotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0JCQkJICBwcml2X2NoZWNrKHAs
IFBSSVZfTkVUSU5FVF9SRVNFUlZFRFBPUlQpCi0jZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1
MDAwMDAKLQkJCQkgIHN1c2VyX2NyZWQocC0+dGRfdWNyZWQsIDApCi0jZWxzZQotCQkJCSAgc3Vz
ZXIocCkKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJICBzdXNlcihwLT5w
X3VjcmVkLCAmcC0+cF9hY2ZsYWcpCi0jZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pIC8qIG11
c3QgYmUgdHJ1ZSB0byB1c2UgcmF3IHNvY2tldCAqLwotCQkJCSAgMQotI2Vsc2UKLQkJCQkgIHN1
c2VyKHAsIDApCi0jZW5kaWYKLQkJCQkgICAgKSkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlu
cCk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9D
SygpOwotCQkJCXJldHVybiAoZXJyb3IpOwotCQkJfQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQot
CQkJaWYgKCFTQ1RQX0lTX1BSSVZJTEVER0VEKHNvKSkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VO
TE9DSygpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9QQ0IsIEVBQ0NFUyk7Ci0JCQkJcmV0dXJuIChFQUNDRVMpOwotCQkJfQotI2VuZGlm
Ci0JCX0KLSNlbmRpZiAvKiBfX1dpbmRvd3NfXyAqLwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JCWlmIChiaW5kYWxsKSB7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCQlmb3IgKGkgPSAwOyBpIDwg
aW5wLT5udW1fdnJmczsgaSsrKSB7Ci0JCQkJdnJmX2lkID0gaW5wLT5tX3ZyZl9pZHNbaV07Ci0j
ZWxzZQotCQkJCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLSNlbmRpZgotCQkJCWlucF90bXAg
PSBzY3RwX3BjYl9maW5kZXAoYWRkciwgMCwgMSwgdnJmX2lkKTsKLQkJCQlpZiAoaW5wX3RtcCAh
PSBOVUxMKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIGxvY2sgZ3V5IHJldHVybmVkIGFuZCBsb3dlciBj
b3VudAotCQkJCQkgKiBub3RlIHRoYXQgd2UgYXJlIG5vdCBib3VuZCBzbwotCQkJCQkgKiBpbnBf
dG1wIHNob3VsZCBORVZFUiBiZSBpbnAuIEFuZAotCQkJCQkgKiBpdCBpcyB0aGlzIGlucCAoaW5w
X3RtcCkgdGhhdCBnZXRzCi0JCQkJCSAqIHRoZSByZWZlcmVuY2UgYnVtcCwgc28gd2UgbXVzdAot
CQkJCQkgKiBsb3dlciBpdC4KLQkJCQkJICovCi0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF90
bXApOwotCQkJCQkvKiB1bmxvY2sgaW5mbyAqLwotCQkJCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpICYmCi0JCQkJCSAgICAoc2N0cF9pc19m
ZWF0dXJlX29uKGlucF90bXAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpKSB7Ci0JCQkJCQkv
KiBPaywgbXVzdCBiZSBvbmUtMi1vbmUgYW5kIGFsbG93aW5nIHBvcnQgcmUtdXNlICovCi0JCQkJ
CQlwb3J0X3JldXNlX2FjdGl2ZSA9IDE7Ci0JCQkJCQlnb3RvIGNvbnRpbnVlX2FueXdheTsKLQkJ
CQkJfQotCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJCQlTQ1RQX0lOUF9JTkZPX1dV
TkxPQ0soKTsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgRUFERFJJTlVTRSk7Ci0JCQkJCXJldHVybiAoRUFERFJJTlVTRSk7Ci0J
CQkJfQotI2lmZGVmIFNDVFBfTVZSRgotCQkJfQotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpbnBf
dG1wID0gc2N0cF9wY2JfZmluZGVwKGFkZHIsIDAsIDEsIHZyZl9pZCk7Ci0JCQlpZiAoaW5wX3Rt
cCAhPSBOVUxMKSB7Ci0JCQkJLyoKLQkJCQkgKiBsb2NrIGd1eSByZXR1cm5lZCBhbmQgbG93ZXIg
Y291bnQgbm90ZQotCQkJCSAqIHRoYXQgd2UgYXJlIG5vdCBib3VuZCBzbyBpbnBfdG1wIHNob3Vs
ZAotCQkJCSAqIE5FVkVSIGJlIGlucC4gQW5kIGl0IGlzIHRoaXMgaW5wIChpbnBfdG1wKQotCQkJ
CSAqIHRoYXQgZ2V0cyB0aGUgcmVmZXJlbmNlIGJ1bXAsIHNvIHdlIG11c3QKLQkJCQkgKiBsb3dl
ciBpdC4KLQkJCQkgKi8KLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnBfdG1wKTsKLQkJCQkvKiB1
bmxvY2sgaW5mbyAqLwotCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUE9SVFJFVVNFKSkgJiYKLQkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnBfdG1w
LCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgewotCQkJCQkvKiBPaywgbXVzdCBiZSBvbmUt
Mi1vbmUgYW5kIGFsbG93aW5nIHBvcnQgcmUtdXNlICovCi0JCQkJCXBvcnRfcmV1c2VfYWN0aXZl
ID0gMTsKLQkJCQkJZ290byBjb250aW51ZV9hbnl3YXk7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7Ci0JCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFERFJJTlVT
RSk7Ci0JCQkJcmV0dXJuIChFQUREUklOVVNFKTsKLQkJCX0KLQkJfQotCWNvbnRpbnVlX2FueXdh
eToKLQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJaWYgKGJpbmRhbGwpIHsKLQkJCS8qIHZlcmlm
eSB0aGF0IG5vIGxwb3J0IGlzIG5vdCB1c2VkIGJ5IGEgc2luZ2xldG9uICovCi0JCQlpZiAoKHBv
cnRfcmV1c2VfYWN0aXZlID09IDApICYmCi0JCQkgICAgKGlucF90bXAgPSBzY3RwX2lzcG9ydF9p
bnVzZShpbnAsIGxwb3J0LCB2cmZfaWQpKSkgewotCQkJCS8qIFNvcnJ5IHNvbWVvbmUgYWxyZWFk
eSBoYXMgdGhpcyBvbmUgYm91bmQgKi8KLQkJCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpICYmCi0JCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wX3RtcCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKLQkJCQkJcG9ydF9yZXVz
ZV9hY3RpdmUgPSAxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
Ci0JCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9QQ0IsIEVBRERSSU5VU0UpOwotCQkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOwotCQkJCX0K
LQkJCX0KLQkJfQotCX0gZWxzZSB7Ci0JCXVpbnQxNl90IGZpcnN0LCBsYXN0LCBjYW5kaWRhdGU7
Ci0JCXVpbnQxNl90IGNvdW50OwotCQlpbnQgZG9uZTsKLQotI2lmIGRlZmluZWQoX19XaW5kb3dz
X18pCi0JCWZpcnN0ID0gMTsKLQkJbGFzdCA9IDB4ZmZmZjsKLSNlbHNlCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCQkvKiBUT0RPIGVuc3VyZSB1aWQgaXMgMCwgZXRjLi4uICovCi0jZWxp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLQkJaWYgKGlwX2lu
cC0+aW5wX2ZsYWdzICYgSU5QX0hJR0hQT1JUKSB7Ci0JCQlmaXJzdCA9IE1PRFVMRV9HTE9CQUwo
aXBwb3J0X2hpZmlyc3RhdXRvKTsKLQkJCWxhc3QgPSBNT0RVTEVfR0xPQkFMKGlwcG9ydF9oaWxh
c3RhdXRvKTsKLQkJfSBlbHNlIGlmIChpcF9pbnAtPmlucF9mbGFncyAmIElOUF9MT1dQT1JUKSB7
Ci0JCQlpZiAocCAmJiAoZXJyb3IgPQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaWYgX19GcmVlQlNE
X3ZlcnNpb24gPiA2MDIwMDAKLQkJCQkgIHByaXZfY2hlY2socCwgUFJJVl9ORVRJTkVUX1JFU0VS
VkVEUE9SVCkKLSNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQkJCSAgc3VzZXJf
Y3JlZChwLT50ZF91Y3JlZCwgMCkKLSNlbHNlCi0JCQkJICBzdXNlcihwKQotI2VuZGlmCi0jZWxp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCQkgIHN1c2VyKHAtPnBfdWNyZWQsICZwLT5wX2FjZmxh
ZykKLSNlbHNlCi0JCQkJICBzdXNlcihwLCAwKQotI2VuZGlmCi0JCQkJICAgICkpIHsKLQkJCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQlT
Q1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBlcnJvcik7Ci0JCQkJcmV0dXJuIChlcnJvcik7
Ci0JCQl9Ci0JCQlmaXJzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2xvd2ZpcnN0YXV0byk7Ci0J
CQlsYXN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfbG93bGFzdGF1dG8pOwotCQl9IGVsc2Ugewot
I2VuZGlmCi0JCQlmaXJzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2ZpcnN0YXV0byk7Ci0JCQls
YXN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfbGFzdGF1dG8pOwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotCQl9Ci0jZW5kaWYKLSNlbmRpZiAvKiBfX1dp
bmRvd3NfXyAqLwotCQlpZiAoZmlyc3QgPiBsYXN0KSB7Ci0JCQl1aW50MTZfdCB0ZW1wOwotCi0J
CQl0ZW1wID0gZmlyc3Q7Ci0JCQlmaXJzdCA9IGxhc3Q7Ci0JCQlsYXN0ID0gdGVtcDsKLQkJfQot
CQljb3VudCA9IGxhc3QgLSBmaXJzdCArIDE7IC8qIG51bWJlciBvZiBjYW5kaWRhdGVzICovCi0J
CWNhbmRpZGF0ZSA9IGZpcnN0ICsgc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9l
cCkgJSAoY291bnQpOwotCi0JCWRvbmUgPSAwOwotCQl3aGlsZSAoIWRvbmUpIHsKLSNpZmRlZiBT
Q1RQX01WUkYKLQkJCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCQlp
ZiAoc2N0cF9pc3BvcnRfaW51c2UoaW5wLCBodG9ucyhjYW5kaWRhdGUpLCBpbnAtPm1fdnJmX2lk
c1tpXSkgIT0gTlVMTCkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoaSA9PSBp
bnAtPm51bV92cmZzKSB7Ci0JCQkJZG9uZSA9IDE7Ci0JCQl9Ci0jZWxzZQotCQkJaWYgKHNjdHBf
aXNwb3J0X2ludXNlKGlucCwgaHRvbnMoY2FuZGlkYXRlKSwgaW5wLT5kZWZfdnJmX2lkKSA9PSBO
VUxMKSB7Ci0JCQkJZG9uZSA9IDE7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmICghZG9uZSkgewotCQkJ
CWlmICgtLWNvdW50ID09IDApIHsKLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQkJ
U0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BD
QiwgRUFERFJJTlVTRSk7Ci0JCQkJCXJldHVybiAoRUFERFJJTlVTRSk7Ci0JCQkJfQotCQkJCWlm
IChjYW5kaWRhdGUgPT0gbGFzdCkKLQkJCQkJY2FuZGlkYXRlID0gZmlyc3Q7Ci0JCQkJZWxzZQot
CQkJCQljYW5kaWRhdGUgPSBjYW5kaWRhdGUgKyAxOwotCQkJfQotCQl9Ci0JCWxwb3J0ID0gaHRv
bnMoY2FuZGlkYXRlKTsKLQl9Ci0JU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgKFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FIHwKLQkJCSAgICAgICBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKLQkJLyoKLQkJICogdGhpcyByZWFsbHkgc2hv
dWxkIG5vdCBoYXBwZW4uIFRoZSBndXkgZGlkIGEgbm9uLWJsb2NraW5nCi0JCSAqIGJpbmQgYW5k
IHRoZW4gZGlkIGEgY2xvc2UgYXQgdGhlIHNhbWUgdGltZS4KLQkJICovCi0JCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCXJl
dHVybiAoRUlOVkFMKTsKLQl9Ci0JLyogb2sgd2UgbG9vayBjbGVhciB0byBnaXZlIG91dCB0aGlz
IHBvcnQsIHNvIGxldHMgc2V0dXAgdGhlIGJpbmRpbmcgKi8KLQlpZiAoYmluZGFsbCkgewotCQkv
KiBiaW5kaW5nIHRvIGFsbCBhZGRyZXNzZXMsIHNvIGp1c3Qgc2V0IGluIHRoZSBwcm9wZXIgZmxh
Z3MgKi8KLQkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMOwotCQkv
KiBzZXQgdGhlIGF1dG9tYXRpYyBhZGRyIGNoYW5nZXMgZnJvbSBrZXJuZWwgZmxhZyAqLwotCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNjb25mKSA9PSAwKSB7Ci0JCQlzY3RwX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKTsKLQkJCXNjdHBfZmVhdHVy
ZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORik7Ci0JCX0gZWxzZSB7Ci0JCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYpOwotCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NPTkYpOwotCQl9Ci0JCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbXVsdGlwbGVfYXNjb25mcykgPT0gMCkgewotCQkJc2N0cF9m
ZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX01VTFRJUExFX0FTQ09ORlMpOwotCQl9IGVs
c2UgewotCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTVVMVElQTEVfQVND
T05GUyk7Ci0JCX0KLQkJLyogc2V0IHRoZSBhdXRvbWF0aWMgbW9iaWxpdHlfYmFzZSBmcm9tIGtl
cm5lbAotCQkgICBmbGFnIChieSBtaWNjaGllKQotCQkqLwotCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX21vYmlsaXR5X2Jhc2UpID09IDApIHsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9v
ZmYoaW5wLCBTQ1RQX01PQklMSVRZX0JBU0UpOwotCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29m
ZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBf
bW9iaWxpdHlfZmVhdHVyZV9vbihpbnAsIFNDVFBfTU9CSUxJVFlfQkFTRSk7Ci0JCQlzY3RwX21v
YmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOwotCQl9
Ci0JCS8qIHNldCB0aGUgYXV0b21hdGljIG1vYmlsaXR5X2Zhc3RoYW5kb2ZmIGZyb20ga2VybmVs
Ci0JCSAgIGZsYWcgKGJ5IG1pY2NoaWUpCi0JCSovCi0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpID09IDApIHsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVy
ZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKTsKLQkJCXNjdHBfbW9iaWxpdHlf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7Ci0JCX0gZWxzZSB7
Ci0JCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX01PQklMSVRZX0ZBU1RIQU5E
T0ZGKTsKLQkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BS
SU1fREVMRVRFRCk7Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBiaW5kIHNwZWNpZmljLCBt
YWtlIHN1cmUgZmxhZ3MgaXMgb2ZmIGFuZCBhZGQgYSBuZXcKLQkJICogYWRkcmVzcyBzdHJ1Y3R1
cmUgdG8gdGhlIHNjdHBfYWRkcl9saXN0IGluc2lkZSB0aGUgZXAKLQkJICogc3RydWN0dXJlLgot
CQkgKgotCQkgKiBXZSB3aWxsIG5lZWQgdG8gYWxsb2NhdGUgb25lIGFuZCBpbnNlcnQgaXQgYXQg
dGhlIGhlYWQuIFRoZQotCQkgKiBzb2NrZXRvcHQgY2FsbCBjYW4ganVzdCBpbnNlcnQgbmV3IGFk
ZHJlc3NlcyBpbiB0aGVyZSBhcwotCQkgKiB3ZWxsLiBJdCB3aWxsIGFsc28gaGF2ZSB0byBkbyB0
aGUgZW1iZWQgc2NvcGUga2FtZSBoYWNrCi0JCSAqIHRvbyAoYmVmb3JlIGFkZGluZykuCi0JCSAq
LwotCQlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKLQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7
Ci0KLQkJbWVtc2V0KCZzdG9yZSwgMCwgc2l6ZW9mKHN0b3JlKSk7Ci0JCXN3aXRjaCAoYWRkci0+
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQltZW1jcHkoJnN0
b3JlLnNpbiwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJc3RvcmUuc2lu
LnNpbl9wb3J0ID0gMDsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBB
Rl9JTkVUNjoKLQkJCW1lbWNweSgmc3RvcmUuc2luNiwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKLQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gMDsKLQkJCWJyZWFrOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46Ci0JCQltZW1j
cHkoJnN0b3JlLnNjb25uLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJ
CXN0b3JlLnNjb25uLnNjb25uX3BvcnQgPSAwOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVs
dDoKLQkJCWJyZWFrOwotCQl9Ci0JCS8qCi0JCSAqIGZpcnN0IGZpbmQgdGhlIGludGVyZmFjZSB3
aXRoIHRoZSBib3VuZCBhZGRyZXNzIG5lZWQgdG8KLQkJICogemVybyBvdXQgdGhlIHBvcnQgdG8g
ZmluZCB0aGUgYWRkcmVzcyEgeXVjayEgY2FuJ3QgZG8KLQkJICogdGhpcyBlYXJsaWVyIHNpbmNl
IG5lZWQgcG9ydCBmb3Igc2N0cF9wY2JfZmluZGVwKCkKLQkJICovCi0JCWlmIChzY3RwX2lmYXAg
IT0gTlVMTCkgewotCQkJaWZhID0gc2N0cF9pZmFwOwotCQl9IGVsc2UgewotCQkJLyogTm90ZSBm
b3IgQlNEIHdlIGhpdCBoZXJlIGFsd2F5cyBvdGhlcgotCQkJICogTy9TJ3Mgd2lsbCBwYXNzIHRo
aW5ncyBpbiB2aWEgdGhlCi0JCQkgKiBzY3RwX2lmYXAgYXJndW1lbnQgKFBhbmRhKS4KLQkJCSAq
LwotCQkJaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKCZzdG9yZS5zYSwKLQkJCQkJCSAgICB2
cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQkJfQotCQlpZiAoaWZhID09IE5VTEwpIHsK
LQkJCS8qIENhbid0IGZpbmQgYW4gaW50ZXJmYWNlIHdpdGggdGhhdCBhZGRyZXNzICovCi0JCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVB
RERSTk9UQVZBSUwpOwotCQkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKLQkJfQotI2lmZGVmIElO
RVQ2Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCS8qIEdBSywgbW9y
ZSBGSVhNRSBJRkEgbG9jaz8gKi8KLQkJCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9B
RERSX0lGQV9VTlVTRUFCTEUpIHsKLQkJCQkvKiBDYW4ndCBiaW5kIGEgbm9uLWV4aXN0ZW50IGFk
ZHIuICovCi0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fV1VO
TE9DSygpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQl9Ci0j
ZW5kaWYKLQkJLyogd2UncmUgbm90IGJvdW5kIGFsbCAqLwotCQlpbnAtPnNjdHBfZmxhZ3MgJj0g
flNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMOwotCQkvKiBhbGxvdyBiaW5keCgpIHRvIHNlbmQgQVND
T05GJ3MgZm9yIGJpbmRpbmcgY2hhbmdlcyAqLwotCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19ET19BU0NPTkYpOwotCQkvKiBjbGVhciBhdXRvbWF0aWMgYWRkciBjaGFuZ2Vz
IGZyb20ga2VybmVsIGZsYWcgKi8KLQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZM
QUdTX0FVVE9fQVNDT05GKTsKLQotCQkvKiBhZGQgdGhpcyBhZGRyZXNzIHRvIHRoZSBlbmRwb2lu
dCBsaXN0ICovCi0JCWVycm9yID0gc2N0cF9pbnNlcnRfbGFkZHIoJmlucC0+c2N0cF9hZGRyX2xp
c3QsIGlmYSwgMCk7Ci0JCWlmIChlcnJvciAhPSAwKSB7Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7Ci0JCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQkJCXJldHVybiAoZXJyb3IpOwotCQl9
Ci0JCWlucC0+bGFkZHJfY291bnQrKzsKLQl9Ci0JLyogZmluZCB0aGUgYnVja2V0ICovCi0JaWYg
KHBvcnRfcmV1c2VfYWN0aXZlKSB7Ci0JCS8qIFB1dCBpdCBpbnRvIHRjcCAxLTItMSBoYXNoICov
Ci0JCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9B
TExBRERSKGxwb3J0LCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykpXTsKLQkJaW5wLT5zY3Rw
X2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0w7Ci0JfSBlbHNlIHsKLQkJaGVhZCA9
ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2VwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIobHBvcnQs
IFNDVFBfQkFTRV9JTkZPKGhhc2htYXJrKSldOwotCX0KLQkvKiBwdXQgaXQgaW4gdGhlIGJ1Y2tl
dCAqLwotCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgaW5wLCBzY3RwX2hhc2gpOwotCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0IxLCAiTWFpbiBoYXNoIHRvIGJpbmQgYXQgaGVhZDolcCwgYm91bmQgcG9y
dDolZCAtIGluIHRjcF9wb29sPSVkXG4iLAotCQkodm9pZCAqKWhlYWQsIG50b2hzKGxwb3J0KSwg
cG9ydF9yZXVzZV9hY3RpdmUpOwotCS8qIHNldCBpbiB0aGUgcG9ydCAqLwotCWlucC0+c2N0cF9s
cG9ydCA9IGxwb3J0OwotCi0JLyogdHVybiBvZmYganVzdCB0aGUgdW5ib3VuZCBmbGFnICovCi0J
aW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19VTkJPVU5EOwotCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKLQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKLQlyZXR1cm4gKDApOwotfQot
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19mcmVlZChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wKQotewotCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwgKm5pdDsKLQotCS8q
Ci0JICogV2UgZW50ZXIgd2l0aCB0aGUgb25seSB0aGUgSVRFUkFUT1JfTE9DSyBpbiBwbGFjZSBh
bmQgYSB3cml0ZQotCSAqIGxvY2sgb24gdGhlIGlucF9pbmZvIHN0dWZmLgotCSAqLwotCWl0ID0g
c2N0cF9pdF9jdGwuY3VyX2l0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMTAwMAotCWlmIChpdCAmJiAoaXQtPnZuICE9IGN1cnZuZXQpKSB7Ci0J
CS8qIEl0cyBub3QgbG9va2luZyBhdCBvdXIgVk5FVCAqLwotCQlyZXR1cm47Ci0JfQotI2VuZGlm
Ci0JaWYgKGl0ICYmIChpdC0+aW5wID09IGlucCkpIHsKLQkJLyoKLQkJICogVGhpcyBpcyB0cmlj
a3kgYW5kIHdlIGhvbGQgdGhlIGl0ZXJhdG9yIGxvY2ssCi0JCSAqIGJ1dCB3aGVuIGl0IHJldHVy
bnMgYW5kIGdldHMgdGhlIGxvY2sgKHdoZW4gd2UKLQkJICogcmVsZWFzZSBpdCkgdGhlIGl0ZXJh
dG9yIHdpbGwgdHJ5IHRvIG9wZXJhdGUgb24KLQkJICogaW5wLiBXZSBuZWVkIHRvIHN0b3AgdGhh
dCBmcm9tIGhhcHBlbmluZy4gQnV0Ci0JCSAqIG9mIGNvdXJzZSB0aGUgaXRlcmF0b3IgaGFzIGEg
cmVmZXJlbmNlIG9uIHRoZQotCQkgKiBzdGNiIGFuZCBpbnAuIFdlIGNhbiBtYXJrIGl0IGFuZCBp
dCB3aWxsIHN0b3AuCi0JCSAqCi0JCSAqIElmIGl0cyBhIHNpbmdsZSBpdGVyYXRvciBzaXR1YXRp
b24sIHdlCi0JCSAqIHNldCB0aGUgZW5kIGl0ZXJhdG9yIGZsYWcuIE90aGVyd2lzZQotCQkgKiB3
ZSBzZXQgdGhlIGl0ZXJhdG9yIHRvIGdvIHRvIHRoZSBuZXh0IGlucC4KLQkJICoKLQkJICovCi0J
CWlmIChpdC0+aXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlApIHsK
LQkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJf
SVQ7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQX0lU
RVJBVE9SX1NUT1BfQ1VSX0lOUDsKLQkJfQotCX0KLQkvKiBOb3cgZ28gdGhyb3VnaCBhbmQgcmVt
b3ZlIGFueSBzaW5nbGUgcmVmZXJlbmNlIHRvCi0JICogb3VyIGlucCB0aGF0IG1heSBiZSBzdGls
bCBwZW5kaW5nIG9uIHRoZSBsaXN0Ci0JICovCi0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygp
OwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShpdCwgJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgc2N0
cF9ueHRfaXRyLCBuaXQpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA4MDEwMDAKLQkJaWYgKGl0LT52biAhPSBjdXJ2bmV0KSB7Ci0JCQljb250aW51
ZTsKLQkJfQotI2VuZGlmCi0JCWlmIChpdC0+aW5wID09IGlucCkgewotCQkJLyogVGhpcyBvbmUg
cG9pbnRzIHRvIG1lIGlzIGl0IGlucCBzcGVjaWZpYz8gKi8KLQkJCWlmIChpdC0+aXRlcmF0b3Jf
ZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlApIHsKLQkJCQkvKiBSZW1vdmUgYW5k
IGZyZWUgdGhpcyBvbmUgKi8KLQkJCQlUQUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9y
aGVhZCwKLQkJCQkgICAgaXQsIHNjdHBfbnh0X2l0cik7Ci0JCQkJaWYgKGl0LT5mdW5jdGlvbl9h
dGVuZCAhPSBOVUxMKSB7Ci0JCQkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQtPnBvaW50ZXIs
IGl0LT52YWwpOwotCQkJCX0KLQkJCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJaXQtPmlucCA9IExJU1RfTkVYVChpdC0+aW5wLCBzY3RwX2xpc3QpOwotCQkJ
CWlmIChpdC0+aW5wKSB7Ci0JCQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQkJCX0K
LQkJCX0KLQkJCS8qIFdoZW4gaXRzIHB1dCBpbiB0aGUgcmVmY250IGlzIGluY3JlbWVudGVkIHNv
IGRlY3IgaXQgKi8KLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0KLQl9Ci0JU0NUUF9J
UElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci19Ci0KLS8qIHJlbGVhc2Ugc2N0cF9pbnBjYiB1bmJp
bmQgdGhlIHBvcnQgKi8KLXZvaWQKLXNjdHBfaW5wY2JfZnJlZShzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLCBpbnQgaW1tZWRpYXRlLCBpbnQgZnJvbSkKLXsKLQkvKgotCSAqIEhlcmUgd2UgZnJlZSBh
IGVuZHBvaW50LiBXZSBtdXN0IGZpbmQgaXQgKGlmIGl0IGlzIGluIHRoZSBIYXNoCi0JICogdGFi
bGUpIGFuZCByZW1vdmUgaXQgZnJvbSB0aGVyZS4gVGhlbiB3ZSBtdXN0IGFsc28gZmluZCBpdCBp
biB0aGUKLQkgKiBvdmVyYWxsIGxpc3QgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZXJlLiBBZnRlciBh
bGwgcmVtb3ZhbHMgYXJlCi0JICogY29tcGxldGUgdGhlbiBhbnkgdGltZXIgaGFzIHRvIGJlIHN0
b3BwZWQuIFRoZW4gc3RhcnQgdGhlIGFjdHVhbAotCSAqIGZyZWVpbmcuIGEpIEFueSBsb2NhbCBs
aXN0cy4gYikgQW55IGFzc29jaWF0aW9ucy4gYykgVGhlIGhhc2ggb2YKLQkgKiBhbGwgYXNzb2Np
YXRpb25zLiBkKSBmaW5hbGx5IHRoZSBlcCBpdHNlbGYuCi0JICovCi0Jc3RydWN0IHNjdHBfdGNi
ICphc29jLCAqbmFzb2M7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyLCAqbmxhZGRyOwotCXN0
cnVjdCBpbnBjYiAqaXBfcGNiOwotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCBiZWluZ19yZWZl
ZCA9IDA7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnNxLCAqbnNxOwotI2lmICFkZWZp
bmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiAhZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgX19GcmVlQlNEX3ZlcnNpb24gPCA1MDAwMDAKLQlzY3RwX3J0ZW50cnlf
dCAqcnQ7Ci0jZW5kaWYKLSNlbmRpZgotCWludCBjbnQ7Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2hh
cmVkX2tleSwgKm5zaGFyZWRfa2V5OwotCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlzY3Rw
X2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9MT0df
Q0xPU0lORwotCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAwKTsKLSNlbmRpZgotCVNDVFBf
SVRFUkFUT1JfTE9DSygpOwotCS8qIG1hcmsgYW55IGl0ZXJhdG9ycyBvbiB0aGUgbGlzdCBvciBi
ZWluZyBwcm9jZXNzZWQgKi8KLQlzY3RwX2l0ZXJhdG9yX2lucF9iZWluZ19mcmVlZChpbnApOwot
CVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7Ci0Jc28gPSBpbnAtPnNjdHBfc29ja2V0OwotCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgewotCQkvKiBi
ZWVuIGhlcmUgYmVmb3JlLi4gZWVrcy4uIGdldCBvdXQgb2YgaGVyZSAqLwotCQlTQ1RQX1BSSU5U
RigiVGhpcyBjb25mbGljdCBpbiBmcmVlIFNIT1VMRCBub3QgYmUgaGFwcGVuaW5nISBmcm9tICVk
LCBpbW0gJWRcbiIsIGZyb20sIGltbWVkaWF0ZSk7Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwot
CQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMSk7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0K
LQlTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsKLQlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7Ci0K
LQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCWlmIChmcm9tID09IFNDVFBfQ0FMTEVEX0FGVEVSX0NN
UFNFVF9PRkNMT1NFKSB7Ci0JCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfQ0xP
U0VfSVA7Ci0JCS8qIHNvY2tldCBpcyBnb25lLCBzbyBubyBtb3JlIHdha2V1cHMgYWxsb3dlZCAq
LwotCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFOwotCQlpbnAt
PnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKLQkJaW5wLT5zY3RwX2Zs
YWdzICY9IH5TQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUOwotCi0JfQotCS8qIEZpcnN0IHRpbWUg
dGhyb3VnaCB3ZSBoYXZlIHRoZSBzb2NrZXQgbG9jaywgYWZ0ZXIgdGhhdCBubyBtb3JlLiAqLwot
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFLCBpbnAsIE5VTEwsIE5V
TEwsCi0JCQlTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ18xKTsKLQotCWlmIChpbnAtPmNv
bnRyb2wpIHsKLQkJc2N0cF9tX2ZyZWVtKGlucC0+Y29udHJvbCk7Ci0JCWlucC0+Y29udHJvbCA9
IE5VTEw7Ci0JfQotCWlmIChpbnAtPnBrdCkgewotCQlzY3RwX21fZnJlZW0oaW5wLT5wa3QpOwot
CQlpbnAtPnBrdCA9IE5VTEw7Ci0JfQotCWlwX3BjYiA9ICZpbnAtPmlwX2lucC5pbnA7CS8qIHdl
IGNvdWxkIGp1c3QgY2FzdCB0aGUgbWFpbiBwb2ludGVyCi0JCQkJCSAqIGhlcmUgYnV0IEkgd2ls
bCBiZSBuaWNlIDo+IChpLmUuCi0JCQkJCSAqIGlwX3BjYiA9IGVwOykgKi8KLQlpZiAoaW1tZWRp
YXRlID09IFNDVFBfRlJFRV9TSE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFKSB7Ci0JCWludCBjbnRf
aW5fc2Q7Ci0KLQkJY250X2luX3NkID0gMDsKLQkJTElTVF9GT1JFQUNIX1NBRkUoYXNvYywgJmlu
cC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCwgbmFzb2MpIHsKLQkJCVNDVFBfVENCX0xP
Q0soYXNvYyk7Ci0JCQlpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9f
QkVfRlJFRUQpIHsKLQkJCQkvKiBTa2lwIGd1eXMgYmVpbmcgZnJlZWQgKi8KLQkJCQljbnRfaW5f
c2QrKzsKLQkJCQlpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FV
RVVFKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIFNwZWNpYWwgY2FzZSAtIHdlIGRpZCBub3Qgc3RhcnQg
YSBraWxsCi0JCQkJCSAqIHRpbWVyIG9uIHRoZSBhc29jIGR1ZSB0byBpdCB3YXMgbm90Ci0JCQkJ
CSAqIGNsb3NlZC4gU28gZ28gYWhlYWQgYW5kIHN0YXJ0IGl0IG5vdy4KLQkJCQkJICovCi0JCQkJ
CWFzb2MtPmFzb2Muc3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQkJCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBhc29jLCBOVUxM
KTsKLQkJCQl9Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2MpOwotCQkJCWNvbnRpbnVlOwotCQkJ
fQotCQkJaWYgKCgoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfQ09P
S0lFX1dBSVQpIHx8Ci0JCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQ
X1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSAmJgotCQkJICAgIChhc29jLT5hc29jLnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplID09IDApKSB7Ci0JCQkJLyogSWYgd2UgaGF2ZSBkYXRhIGluIHF1ZXVlLCB3
ZSBkb24ndCB3YW50IHRvIGp1c3QKLQkJCQkgKiBmcmVlIHNpbmNlIHRoZSBhcHAgbWF5IGhhdmUg
ZG9uZSwgc2VuZCgpL2Nsb3NlCi0JCQkJICogb3IgY29ubmVjdC9zZW5kL2Nsb3NlLiBBbmQgaXQg
d2FudHMgdGhlIGRhdGEKLQkJCQkgKiB0byBnZXQgYWNyb3NzIGZpcnN0LgotCQkJCSAqLwotCQkJ
CS8qIEp1c3QgYWJhbmRvbiB0aGluZ3MgaW4gdGhlIGZyb250IHN0YXRlcyAqLwotCQkJCWlmIChz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBhc29jLCBTQ1RQX1BDQkZSRUVfTk9GT1JDRSwKLQkJCQkJCSAg
IFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzIpID09IDApIHsKLQkJCQkJY250X2luX3Nk
Kys7Ci0JCQkJfQotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyogRGlzY29ubmVjdCB0aGUgc29j
a2V0IHBsZWFzZSAqLwotCQkJYXNvYy0+c2N0cF9zb2NrZXQgPSBOVUxMOwotCQkJYXNvYy0+YXNv
Yy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQ7Ci0JCQlpZiAoKGFzb2MtPmFzb2Mu
c2l6ZV9vbl9yZWFzbV9xdWV1ZSA+IDApIHx8Ci0JCQkgICAgKGFzb2MtPmFzb2MuY29udHJvbF9w
ZGFwaSkgfHwKLQkJCSAgICAoYXNvYy0+YXNvYy5zaXplX29uX2FsbF9zdHJlYW1zID4gMCkgfHwK
LQkJCSAgICAoc28gJiYgKHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkpIHsKLQkJCQkvKiBMZWZ0IHdp
dGggRGF0YSB1bnJlYWQgKi8KLQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCi0JCQkJb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIp
OwotCQkJCWFzb2MtPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1BD
QiArIFNDVFBfTE9DXzM7Ci0JCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihhc29jLCBvcF9lcnIsIFND
VFBfU09fTE9DS0VEKTsKLQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRl
ZCk7Ci0JCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9P
UEVOKSB8fAotCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0
cHNfY3VycmVzdGFiKTsKLQkJCQl9Ci0JCQkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAsIGFzb2Ms
Ci0JCQkJCQkgICAgU0NUUF9QQ0JGUkVFX05PRk9SQ0UsIFNDVFBfRlJPTV9TQ1RQX1BDQiArIFND
VFBfTE9DXzQpID09IDApIHsKLQkJCQkJY250X2luX3NkKys7Ci0JCQkJfQotCQkJCWNvbnRpbnVl
OwotCQkJfSBlbHNlIGlmIChUQUlMUV9FTVBUWSgmYXNvYy0+YXNvYy5zZW5kX3F1ZXVlKSAmJgot
CQkJICAgICAgICAgICBUQUlMUV9FTVBUWSgmYXNvYy0+YXNvYy5zZW50X3F1ZXVlKSAmJgotCQkJ
ICAgICAgICAgICAoYXNvYy0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJaWYg
KCgqYXNvYy0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0
ZSkoYXNvYywgJmFzb2MtPmFzb2MpKSB7Ci0JCQkJCWdvdG8gYWJvcnRfYW55d2F5OwotCQkJCX0K
LQkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1NFTlQpICYmCi0JCQkJICAgIChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgIT0gU0NU
UF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKLQkJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
cDsKLQotCQkJCQkvKgotCQkJCQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLAot
CQkJCQkgKiBzbyBJIHNlbmQgc2h1dGRvd24KLQkJCQkJICovCi0JCQkJCWlmICgoU0NUUF9HRVRf
U1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChTQ1RQ
X0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkp
IHsKLQkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCQkJ
fQotCQkJCQlTQ1RQX1NFVF9TVEFURSgmYXNvYy0+YXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9T
RU5UKTsKLQkJCQkJU0NUUF9DTEVBUl9TVUJTVEFURSgmYXNvYy0+YXNvYywgU0NUUF9TVEFURV9T
SFVURE9XTl9QRU5ESU5HKTsKLQkJCQkJc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oYXNv
Yyk7Ci0JCQkJCWlmIChhc29jLT5hc29jLmFsdGVybmF0ZSkgewotCQkJCQkJbmV0cCA9IGFzb2Mt
PmFzb2MuYWx0ZXJuYXRlOwotCQkJCQl9IGVsc2UgewotCQkJCQkJbmV0cCA9IGFzb2MtPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbjsKLQkJCQkJfQotCQkJCQlzY3RwX3NlbmRfc2h1dGRvd24oYXNv
YywgbmV0cCk7Ci0JCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
LCBhc29jLT5zY3RwX2VwLCBhc29jLAotCQkJCQkgICAgbmV0cCk7Ci0JCQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsIGFzb2MtPnNjdHBfZXAsIGFzb2Ms
Ci0JCQkJCSAgICBhc29jLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOwotCQkJCQlzY3RwX2No
dW5rX291dHB1dChpbnAsIGFzb2MsIFNDVFBfT1VUUFVUX0ZST01fU0hVVF9UTVIsIFNDVFBfU09f
TE9DS0VEKTsKLQkJCQl9Ci0JCQl9IGVsc2UgewotCQkJCS8qIG1hcmsgaW50byBzaHV0ZG93biBw
ZW5kaW5nICovCi0JCQkJYXNvYy0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1BF
TkRJTkc7Ci0JCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFS
RCwgYXNvYy0+c2N0cF9lcCwgYXNvYywKLQkJCQkJCSBhc29jLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb24pOwotCQkJCWlmICgoKmFzb2MtPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNl
cl9tc2dzX2luY29tcGxldGUpKGFzb2MsICZhc29jLT5hc29jKSkgewotCQkJCQlhc29jLT5hc29j
LnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKLQkJCQl9Ci0JCQkJaWYgKFRB
SUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbmRfcXVldWUpICYmCi0JCQkJICAgIFRBSUxRX0VNUFRZ
KCZhc29jLT5hc29jLnNlbnRfcXVldWUpICYmCi0JCQkJICAgIChhc29jLT5hc29jLnN0YXRlICYg
U0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJy
OwotCQkJCWFib3J0X2FueXdheToKLQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShT
Q1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCQlhc29jLT5zY3RwX2VwLT5s
YXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ181OwotCQkJCQlz
Y3RwX3NlbmRfYWJvcnRfdGNiKGFzb2MsIG9wX2VyciwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCQkJCWlmICgoU0NUUF9H
RVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChT
Q1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZF
RCkpIHsKLQkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJ
CQkJfQotCQkJCQlpZiAoc2N0cF9mcmVlX2Fzc29jKGlucCwgYXNvYywKLQkJCQkJCQkgICAgU0NU
UF9QQ0JGUkVFX05PRk9SQ0UsCi0JCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBf
TE9DXzYpID09IDApIHsKLQkJCQkJCWNudF9pbl9zZCsrOwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVl
OwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgYXNvYywgU0NUUF9P
VVRQVVRfRlJPTV9DTE9TSU5HLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJfQotCQkJfQotCQkJY250
X2luX3NkKys7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soYXNvYyk7Ci0JCX0KLQkJLyogbm93IGlzIHRo
ZXJlIHNvbWUgbGVmdCBpbiBvdXIgU0hVVERPV04gc3RhdGU/ICovCi0JCWlmIChjbnRfaW5fc2Qp
IHsKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0JCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVM
TCwgMik7Ci0jZW5kaWYKLQkJCWlucC0+c2N0cF9zb2NrZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOwotCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCVNDVFBf
SU5QX0lORk9fV1VOTE9DSygpOwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlucC0+c2N0cF9zb2Nr
ZXQgPSBOVUxMOwotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VO
RCkgIT0KLQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKgotCQkgKiBvaywgdGhp
cyBndXkgaGFzIGJlZW4gYm91bmQuIEl0J3MgcG9ydCBpcwotCQkgKiBzb21ld2hlcmUgaW4gdGhl
IFNDVFBfQkFTRV9JTkZPKGhhc2ggdGFibGUpLiBSZW1vdmUKLQkJICogaXQhCi0JCSAqLwotCQlM
SVNUX1JFTU9WRShpbnAsIHNjdHBfaGFzaCk7Ci0JCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EOwotCX0KLQotCS8qIElmIHRoZXJlIGlzIGEgdGltZXIgcnVubmluZyB0
byBraWxsIHVzLAotCSAqIGZvcmdldCBpdCwgc2luY2UgaXQgbWF5IGhhdmUgYSBjb250ZXN0Ci0J
ICogb24gdGhlIElOUCBsb2NrLi4gd2hpY2ggd291bGQgY2F1c2UgdXMKLQkgKiB0byBkaWUgLi4u
Ci0JICovCi0JY250ID0gMDsKLQlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fz
b2NfbGlzdCwgc2N0cF90Y2JsaXN0LCBuYXNvYykgewotCQlTQ1RQX1RDQl9MT0NLKGFzb2MpOwot
CQlpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsK
LQkJCWlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUUpIHsK
LQkJCQlhc29jLT5hc29jLnN0YXRlICY9IH5TQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRTsKLQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBhc29jLCBO
VUxMKTsKLQkJCX0KLQkJICAgICAgICBjbnQrKzsKLQkJCVNDVFBfVENCX1VOTE9DSyhhc29jKTsK
LQkJCWNvbnRpbnVlOwotCQl9Ci0JCS8qIEZyZWUgYXNzb2NpYXRpb25zIHRoYXQgYXJlIE5PVCBr
aWxsaW5nIHVzICovCi0JCWlmICgoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpICE9IFNDVFBf
U1RBVEVfQ09PS0lFX1dBSVQpICYmCi0JCSAgICAoKGFzb2MtPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSA9PSAwKSkgewotCQkJc3RydWN0IG1idWYgKm9wX2VycjsK
LQotCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElB
VEVEX0FCVCwgIiIpOwotCQkJYXNvYy0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9G
Uk9NX1NDVFBfUENCICsgU0NUUF9MT0NfNzsKLQkJCXNjdHBfc2VuZF9hYm9ydF90Y2IoYXNvYywg
b3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0
cHNfYWJvcnRlZCk7Ci0JCX0gZWxzZSBpZiAoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVf
QUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCWNudCsrOwotCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2Mp
OwotCQkJY29udGludWU7Ci0JCX0KLQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykg
PT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29j
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgewotCQkJU0NUUF9TVEFUX0RFQ1Jf
R0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQl9Ci0JCWlmIChzY3RwX2ZyZWVfYXNzb2MoaW5w
LCBhc29jLCBTQ1RQX1BDQkZSRUVfRk9SQ0UsCi0JCSAgICAgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfUENCICsgU0NUUF9MT0NfOCkgPT0gMCkgewotCQkJY250Kys7Ci0JCX0KLQl9Ci0J
aWYgKGNudCkgewotCQkvKiBPayB3ZSBoYXZlIHNvbWVvbmUgb3V0IHRoZXJlIHRoYXQgd2lsbCBr
aWxsIHVzICovCi0JCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmaW5wLT5zY3RwX2VwLnNpZ25h
dHVyZV9jaGFuZ2UudGltZXIpOwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0cF9sb2df
Y2xvc2luZyhpbnAsIE5VTEwsIDMpOwotI2VuZGlmCi0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
LQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKFNDVFBfSU5QX0xPQ0tfQ09OVEVOREVEKGlucCkpCi0J
CWJlaW5nX3JlZmVkKys7Ci0JaWYgKFNDVFBfSU5QX1JFQURfQ09OVEVOREVEKGlucCkpCi0JCWJl
aW5nX3JlZmVkKys7Ci0JaWYgKFNDVFBfQVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoaW5wKSkK
LQkJYmVpbmdfcmVmZWQrKzsKLQotCWlmICgoaW5wLT5yZWZjb3VudCkgfHwKLQkgICAgKGJlaW5n
X3JlZmVkKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ0xPU0Vf
SVApKSB7Ci0JCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmaW5wLT5zY3RwX2VwLnNpZ25hdHVy
ZV9jaGFuZ2UudGltZXIpOwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0cF9sb2dfY2xv
c2luZyhpbnAsIE5VTEwsIDQpOwotI2VuZGlmCi0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX0lOUEtJTEwsIGlucCwgTlVMTCwgTlVMTCk7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJU0NUUF9JTlBfSU5GT19XVU5M
T0NLKCk7Ci0JCXJldHVybjsKLQl9Ci0JaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudHlw
ZSA9IDA7Ci0JaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05F
OwotCS8qIFJlbW92ZSBpdCBmcm9tIHRoZSBsaXN0IC4uIGxhc3QgdGhpbmcgd2UgbmVlZCBhCi0J
ICogbG9jayBmb3IuCi0JICovCi0JTElTVF9SRU1PVkUoaW5wLCBzY3RwX2xpc3QpOwotCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCVNDVFBf
SU5QX0lORk9fV1VOTE9DSygpOwotCS8qIE5vdyB3ZSByZWxlYXNlIGFsbCBsb2Nrcy4gU2luY2Ug
dGhpcyBJTlAKLQkgKiBjYW5ub3QgYmUgZm91bmQgYW55bW9yZSBleGNlcHQgcG9zc2libHkgYnkg
dGhlCi0JICoga2lsbCB0aW1lciB0aGF0IG1pZ2h0IGJlIHJ1bm5pbmcuIFdlIGNhbGwKLQkgKiB0
aGUgZHJhaW4gZnVuY3Rpb24gaGVyZS4gSXQgc2hvdWxkIGhpdCB0aGUgY2FzZQotCSAqIHdlcmUg
aXQgc2VlcyB0aGUgQUNUSVZFIGZsYWcgY2xlYXJlZCBhbmQgZXhpdAotCSAqIG91dCBmcmVlaW5n
IHVzIHRvIHByb2NlZWQgYW5kIGRlc3Ryb3kgZXZlcnl0aGluZy4KLQkgKi8KLQlpZiAoZnJvbSAh
PSBTQ1RQX0NBTExFRF9GUk9NX0lOUEtJTExfVElNRVIpIHsKLQkJKHZvaWQpU0NUUF9PU19USU1F
Ul9TVE9QX0RSQUlOKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7Ci0JfSBl
bHNlIHsKLQkJLyogUHJvYmFibHkgdW4tbmVlZGVkICovCi0JCSh2b2lkKVNDVFBfT1NfVElNRVJf
U1RPUCgmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2UudGltZXIpOwotCX0KLQotI2lmZGVm
IFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgNSk7Ci0jZW5k
aWYKLQotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pIHx8IF9f
RnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCi0JcnQgPSBpcF9wY2ItPmlucF9yb3V0ZS5yb19ydDsK
LSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQlpZiAoaW5wLT5wYWtf
dG9fcmVhZCkgewotCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmlucC0+c2N0cF9lcC56ZXJv
X2NvcHlfdGltZXIudGltZXIpOwotCQlTQ1RQX1JFTEVBU0VfUEtUKGlucC0+cGFrX3RvX3JlYWQp
OwotCQlpbnAtPnBha190b19yZWFkID0gTlVMTDsKLQl9Ci0JaWYgKGlucC0+cGFrX3RvX3JlYWRf
c2VuZHEpIHsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuemVyb19j
b3B5X3NlbmRxX3RpbWVyLnRpbWVyKTsKLQkJU0NUUF9SRUxFQVNFX1BLVChpbnAtPnBha190b19y
ZWFkX3NlbmRxKTsKLQkJaW5wLT5wYWtfdG9fcmVhZF9zZW5kcSA9IE5VTEw7Ci0JfQotI2VuZGlm
Ci0JaWYgKChpbnAtPnNjdHBfYXNvY2lkaGFzaCkgIT0gTlVMTCkgewotCQlTQ1RQX0hBU0hfRlJF
RShpbnAtPnNjdHBfYXNvY2lkaGFzaCwgaW5wLT5oYXNoYXNvY2lkbWFyayk7Ci0JCWlucC0+c2N0
cF9hc29jaWRoYXNoID0gTlVMTDsKLQl9Ci0JLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQlU
QUlMUV9GT1JFQUNIX1NBRkUoc3EsICZpbnAtPnJlYWRfcXVldWUsIG5leHQsIG5zcSkgewotCQkv
KiBJdHMgb25seSBhYmFuZG9uZWQgaWYgaXQgaGFkIGRhdGEgbGVmdCAqLwotCQlpZiAoc3EtPmxl
bmd0aCkKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xlZnRfYWJhbmRvbik7Ci0KLQkJVEFJTFFf
UkVNT1ZFKCZpbnAtPnJlYWRfcXVldWUsIHNxLCBuZXh0KTsKLQkJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKHNxLT53aG9Gcm9tKTsKLQkJaWYgKHNvKQotCQkJc28tPnNvX3Jjdi5zYl9jYyAtPSBzcS0+
bGVuZ3RoOwotCQlpZiAoc3EtPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShzcS0+ZGF0YSk7Ci0J
CQlzcS0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJLyoKLQkJICogbm8gbmVlZCB0byBmcmVlIHRoZSBu
ZXQgY291bnQsIHNpbmNlIGF0IHRoaXMgcG9pbnQgYWxsCi0JCSAqIGFzc29jJ3MgYXJlIGdvbmUu
Ci0JCSAqLwotCQlzY3RwX2ZyZWVfYV9yZWFkcShOVUxMLCBzcSk7Ci0JfQotCS8qIE5vdyB0aGUg
c2N0cF9wY2IgdGhpbmdzICovCi0JLyoKLQkgKiBmcmVlIGVhY2ggYXNvYyBpZiBpdCBpcyBub3Qg
YWxyZWFkeSBjbG9zZWQvZnJlZS4gd2UgY2FuJ3QgdXNlIHRoZQotCSAqIG1hY3JvIGhlcmUgc2lu
Y2UgbGVfbmV4dCB3aWxsIGdldCBmcmVlZCBhcyBwYXJ0IG9mIHRoZQotCSAqIHNjdHBfZnJlZV9h
c3NvYygpIGNhbGwuCi0JICovCi0jaWZuZGVmIF9fUGFuZGFfXwotCWlmIChpcF9wY2ItPmlucF9v
cHRpb25zKSB7Ci0JCSh2b2lkKXNjdHBfbV9mcmVlKGlwX3BjYi0+aW5wX29wdGlvbnMpOwotCQlp
cF9wY2ItPmlucF9vcHRpb25zID0gMDsKLQl9Ci0jZW5kaWYKLQotI2lmICEoZGVmaW5lZChfX1Bh
bmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykp
Ci0jaWYgIWRlZmluZWQoX19GcmVlQlNEX18pIHx8IF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAw
Ci0JaWYgKHJ0KSB7Ci0JCVJURlJFRShydCk7Ci0JCWlwX3BjYi0+aW5wX3JvdXRlLnJvX3J0ID0g
MDsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA8IDgwMzAwMAotI2lmZGVmIElORVQKLQlpZiAoaXBfcGNiLT5pbnBfbW9wdGlvbnMpIHsK
LQkJaW5wX2ZyZWVtb3B0aW9ucyhpcF9wY2ItPmlucF9tb3B0aW9ucyk7Ci0JCWlwX3BjYi0+aW5w
X21vcHRpb25zID0gMDsKLQl9Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZmRlZiBJTkVU
NgotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pCi0JaWYgKGlwX3BjYi0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKLSNlbHNl
Ci0JaWYgKGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjYpIHsKLSNlbmRpZgotCQlzdHJ1Y3QgaW42
cGNiICppbjZwOwotCi0JCWluNnAgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKLQkJaXA2X2ZyZWVw
Y2JvcHRzKGluNnAtPmluNnBfb3V0cHV0b3B0cyk7Ci0JfQotI2VuZGlmCi0jZW5kaWYJCQkJLyog
SU5FVDYgKi8KLSNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCWlu
cC0+aW5wX3ZmbGFnID0gMDsKLSNlbHNlCi0JaXBfcGNiLT5pbnBfdmZsYWcgPSAwOwotI2VuZGlm
Ci0JLyogZnJlZSB1cCBhdXRoZW50aWNhdGlvbiBmaWVsZHMgKi8KLQlpZiAoaW5wLT5zY3RwX2Vw
LmxvY2FsX2F1dGhfY2h1bmtzICE9IE5VTEwpCi0JCXNjdHBfZnJlZV9jaHVua2xpc3QoaW5wLT5z
Y3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNz
ICE9IE5VTEwpCi0JCXNjdHBfZnJlZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3Mp
OwotCi0JTElTVF9GT1JFQUNIX1NBRkUoc2hhcmVkX2tleSwgJmlucC0+c2N0cF9lcC5zaGFyZWRf
a2V5cywgbmV4dCwgbnNoYXJlZF9rZXkpIHsKLQkJTElTVF9SRU1PVkUoc2hhcmVkX2tleSwgbmV4
dCk7Ci0JCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2hhcmVkX2tleSk7Ci0JCS8qc2FfaWdub3JlIEZS
RUVEX01FTU9SWSovCi0JfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaW5wLT5pcF9pbnAu
aW5wLmlucF9zdGF0ZSA9IElOUENCX1NUQVRFX0RFQUQ7Ci0JaWYgKGluX3BjYl9jaGVja3N0YXRl
KCZpbnAtPmlwX2lucC5pbnAsIFdOVF9TVE9QVVNJTkcsIDEpICE9IFdOVF9TVE9QVVNJTkcpIHsK
LSNpZmRlZiBJTlZBUklBTlRTCi0JCXBhbmljKCJzY3RwX2lucGNiX2ZyZWUgaW5wID0gJXAgY291
bGRuJ3Qgc2V0IHRvIFNUT1BVU0lOR1xuIiwgKHZvaWQgKilpbnApOwotI2Vsc2UKLQkJU0NUUF9Q
UklOVEYoInNjdHBfaW5wY2JfZnJlZSBpbnAgPSAlcCBjb3VsZG4ndCBzZXQgdG8gU1RPUFVTSU5H
XG4iLCAodm9pZCAqKWlucCk7Ci0jZW5kaWYKLQl9Ci0JaW5wLT5pcF9pbnAuaW5wLmlucF9zb2Nr
ZXQtPnNvX2ZsYWdzIHw9IFNPRl9QQ0JDTEVBUklORzsKLSNlbmRpZgotCS8qCi0JICogaWYgd2Ug
aGF2ZSBhbiBhZGRyZXNzIGxpc3QgdGhlIGZvbGxvd2luZyB3aWxsIGZyZWUgdGhlIGxpc3Qgb2YK
LQkgKiBpZmFkZHIncyB0aGF0IGFyZSBzZXQgaW50byB0aGlzIGVwLiBBZ2FpbiBtYWNybyBsaW1p
dGF0aW9ucyBoZXJlLAotCSAqIHNpbmNlIHRoZSBMSVNUX0ZPUkVBQ0ggY291bGQgYmUgYSBiYWQg
aWRlYS4KLQkgKi8KLQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xp
c3QsIHNjdHBfbnh0X2FkZHIsIG5sYWRkcikgewotCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7
Ci0JfQotCi0jaWZkZWYgU0NUUF9UUkFDS19GUkVFRF9BU09DUwotCS8qIFRFTVAgQ09ERSAqLwot
CUxJU1RfRk9SRUFDSF9TQUZFKGFzb2MsICZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QsIHNjdHBf
dGNibGlzdCwgbmFzb2MpIHsKLQkJTElTVF9SRU1PVkUoYXNvYywgc2N0cF90Y2JsaXN0KTsKLQkJ
U0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIGFzb2MpOwotCQlT
Q1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotCX0KLQkvKiAqKiogRU5EIFRFTVAgQ09ERSAqKioqLwot
I2VuZGlmCi0jaWZkZWYgU0NUUF9NVlJGCi0JU0NUUF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQ
X01fTVZSRik7Ci0jZW5kaWYKLQkvKiBOb3cgbGV0cyBzZWUgYWJvdXQgZnJlZWluZyB0aGUgRVAg
aGFzaCB0YWJsZS4gKi8KLQlpZiAoaW5wLT5zY3RwX3RjYmhhc2ggIT0gTlVMTCkgewotCQlTQ1RQ
X0hBU0hfRlJFRShpbnAtPnNjdHBfdGNiaGFzaCwgaW5wLT5zY3RwX2hhc2htYXJrKTsKLQkJaW5w
LT5zY3RwX3RjYmhhc2ggPSBOVUxMOwotCX0KLQkvKiBOb3cgd2UgbXVzdCBwdXQgdGhlIGVwIG1l
bW9yeSBiYWNrIGludG8gdGhlIHpvbmUgcG9vbCAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JY3JmcmVlKGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCk7Ci0JSU5QX0xPQ0tfREVTVFJPWSgm
aW5wLT5pcF9pbnAuaW5wKTsKLSNlbmRpZgotCVNDVFBfSU5QX0xPQ0tfREVTVFJPWShpbnApOwot
CVNDVFBfSU5QX1JFQURfREVTVFJPWShpbnApOwotCVNDVFBfQVNPQ19DUkVBVEVfTE9DS19ERVNU
Uk9ZKGlucCk7Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBfWk9ORV9GUkVFKFNDVFBf
QkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5wKTsKLQlTQ1RQX0RFQ1JfRVBfQ09VTlQoKTsKLSNl
bHNlCi0JLyogRm9yIFRpZ2VyLCB3ZSB3aWxsIGRvIHRoaXMgbGF0ZXIuLi4gKi8KLSNlbmRpZgot
fQotCi0KLXN0cnVjdCBzY3RwX25ldHMgKgotc2N0cF9maW5kbmV0KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNvY2thZGRyICphZGRyKQotewotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
LQkvKiBsb2NhdGUgdGhlIGFkZHJlc3MgKi8KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCWlmIChzY3RwX2NtcGFkZHIoYWRkciwgKHN0cnVjdCBz
b2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpKQotCQkJcmV0dXJuIChuZXQpOwotCX0KLQlyZXR1
cm4gKE5VTEwpOwotfQotCi0KLWludAotc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3Qoc3Ry
dWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCB2cmZfaWQpCi17Ci0jaWZkZWYgX19QYW5kYV9f
Ci0JcmV0dXJuICgwKTsKLSNlbHNlCi0Jc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQlzY3Rw
X2lmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcihhZGRyLCB2cmZfaWQsIFNDVFBfQUREUl9OT1Rf
TE9DS0VEKTsKLQlpZiAoc2N0cF9pZmEpIHsKLQkJcmV0dXJuICgxKTsKLQl9IGVsc2UgewotCQly
ZXR1cm4gKDApOwotCX0KLSNlbmRpZgotfQotCi0vKgotICogYWRkJ3MgYSByZW1vdGUgZW5kcG9p
bnQgYWRkcmVzcywgZG9uZSB3aXRoIHRoZSBJTklUL0lOSVQtQUNLIGFzIHdlbGwgYXMKLSAqIHdo
ZW4gYSBBU0NPTkYgYXJyaXZlcyB0aGF0IGFkZHMgaXQuIEl0IHdpbGwgYWxzbyBpbml0aWFsaXpl
IGFsbCB0aGUgY3duZAotICogc3RhdHMgb2Ygc3R1ZmYuCi0gKi8KLWludAotc2N0cF9hZGRfcmVt
b3RlX2FkZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKm5ld2FkZHIs
Ci0gICAgc3RydWN0IHNjdHBfbmV0cyAqKm5ldHAsIHVpbnQxNl90IHBvcnQsIGludCBzZXRfc2Nv
cGUsIGludCBmcm9tKQotewotCS8qCi0JICogVGhlIGZvbGxvd2luZyBpcyByZWR1bmRhbnQgdG8g
dGhlIHNhbWUgbGluZXMgaW4gdGhlCi0JICogc2N0cF9hbG9jX2Fzc29jKCkgYnV0IGlzIG5lZWRl
ZCBzaW5jZSBvdGhlcnMgY2FsbCB0aGUgYWRkCi0JICogYWRkcmVzcyBmdW5jdGlvbgotCSAqLwot
CXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgKm5ldGZpcnN0OwotCWludCBhZGRyX2luc2NvcGU7Ci0K
LQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkFkZGluZyBhbiBhZGRyZXNzIChmcm9tOiVkKSB0
byB0aGUgcGVlcjogIiwKLQkJZnJvbSk7Ci0JU0NUUERCR19BRERSKFNDVFBfREVCVUdfUENCMSwg
bmV3YWRkcik7Ci0KLQluZXRmaXJzdCA9IHNjdHBfZmluZG5ldChzdGNiLCBuZXdhZGRyKTsKLQlp
ZiAobmV0Zmlyc3QpIHsKLQkJLyoKLQkJICogTGllIGFuZCByZXR1cm4gb2ssIHdlIGRvbid0IHdh
bnQgdG8gbWFrZSB0aGUgYXNzb2NpYXRpb24KLQkJICogZ28gYXdheSBmb3IgdGhpcyBiZWhhdmlv
ci4gSXQgd2lsbCBoYXBwZW4gaW4gdGhlIFRDUAotCQkgKiBtb2RlbCBpbiBhIGNvbm5lY3RlZCBz
b2NrZXQuIEl0IGRvZXMgbm90IHJlYWNoIHRoZSBoYXNoCi0JCSAqIHRhYmxlIHVudGlsIGFmdGVy
IHRoZSBhc3NvY2lhdGlvbiBpcyBidWlsdCBzbyBpdCBjYW4ndCBiZQotCQkgKiBmb3VuZC4gTWFy
ayBhcyByZWFjaGFibGUsIHNpbmNlIHRoZSBpbml0aWFsIGNyZWF0aW9uIHdpbGwKLQkJICogaGF2
ZSBiZWVuIGNsZWFyZWQgYW5kIHRoZSBOT1RfSU5fQVNTT0MgZmxhZyB3aWxsIGhhdmUKLQkJICog
YmVlbiBhZGRlZC4uLiBhbmQgd2UgZG9uJ3Qgd2FudCB0byBlbmQgdXAgcmVtb3ZpbmcgaXQKLQkJ
ICogYmFjayBvdXQuCi0JCSAqLwotCQlpZiAobmV0Zmlyc3QtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FE
RFJfVU5DT05GSVJNRUQpIHsKLQkJCW5ldGZpcnN0LT5kZXN0X3N0YXRlID0gKFNDVFBfQUREUl9S
RUFDSEFCTEUgfAotCQkJICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRCk7Ci0JCX0gZWxzZSB7Ci0J
CQluZXRmaXJzdC0+ZGVzdF9zdGF0ZSA9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCX0KLQotCQly
ZXR1cm4gKDApOwotCX0KLQlhZGRyX2luc2NvcGUgPSAxOwotCXN3aXRjaCAobmV3YWRkci0+c2Ff
ZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOwotCi0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluZXdhZGRyOwot
CQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgewotCQkJLyogSW52YWxpZCBhZGRyZXNz
ICovCi0JCQlyZXR1cm4gKC0xKTsKLQkJfQotCQkvKiB6ZXJvIG91dCB0aGUgemVybyBhcmVhICov
Ci0JCW1lbXNldCgmc2luLT5zaW5femVybywgMCwgc2l6ZW9mKHNpbi0+c2luX3plcm8pKTsKLQot
CQkvKiBhc3N1cmUgbGVuIGlzIHNldCAqLwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzaW4tPnNp
bl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQlpZiAoc2V0X3Nj
b3BlKSB7Ci0JCQlpZiAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgewot
CQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQl9Ci0JCX0gZWxz
ZSB7Ci0JCQkvKiBWYWxpZGF0ZSB0aGUgYWRkcmVzcyBpcyBpbiBzY29wZSAqLwotCQkJaWYgKChJ
TjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSAmJgotCQkJICAgIChzdGNiLT5h
c29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPT0gMCkpIHsKLQkJCQlhZGRyX2luc2NvcGUgPSAw
OwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBB
Rl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopbmV3YWRkcjsKLQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lG
SUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KLQkJCXJl
dHVybiAoLTEpOwotCQl9Ci0JCS8qIGFzc3VyZSBsZW4gaXMgc2V0ICovCi0jaWZkZWYgSEFWRV9T
SU42X0xFTgotCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
LSNlbmRpZgotCQlpZiAoc2V0X3Njb3BlKSB7Ci0JCQlpZiAoc2N0cF9pc19hZGRyZXNzX29uX2xv
Y2FsX2hvc3QobmV3YWRkciwgc3RjYi0+YXNvYy52cmZfaWQpKSB7Ci0JCQkJc3RjYi0+YXNvYy5z
Y29wZS5sb29wYmFja19zY29wZSA9IDE7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29w
ZSA9IDA7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID0gMTsKLQkJCQlz
dGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPSAxOwotCQkJfSBlbHNlIGlmIChJTjZfSVNfQURE
Ul9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKgotCQkJCSAqIElmIHRoZSBu
ZXcgZGVzdGluYXRpb24gaXMgYSBMSU5LX0xPQ0FMIHdlCi0JCQkJICogbXVzdCBoYXZlIGNvbW1v
biBzaXRlIHNjb3BlLiBEb24ndCBzZXQKLQkJCQkgKiB0aGUgbG9jYWwgc2NvcGUgc2luY2Ugd2Ug
bWF5IG5vdCBzaGFyZQotCQkJCSAqIGFsbCBsaW5rcywgb25seSBsb29wYmFjayBjYW4gZG8gdGhp
cy4KLQkJCQkgKiBMaW5rcyBvbiB0aGUgbG9jYWwgbmV0d29yayB3b3VsZCBhbHNvIGJlCi0JCQkJ
ICogb24gb3VyIHByaXZhdGUgbmV0d29yayBmb3IgdjQgdG9vLgotCQkJCSAqLwotCQkJCXN0Y2It
PmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCQkJc3RjYi0+YXNvYy5zY29wZS5z
aXRlX3Njb3BlID0gMTsKLQkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42
LT5zaW42X2FkZHIpKSB7Ci0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIGlz
IFNJVEVfTE9DQUwgdGhlbgotCQkJCSAqIHdlIG11c3QgaGF2ZSBzaXRlIHNjb3BlIGluIGNvbW1v
bi4KLQkJCQkgKi8KLQkJCQlzdGNiLT5hc29jLnNjb3BlLnNpdGVfc2NvcGUgPSAxOwotCQkJfQot
CQl9IGVsc2UgewotCQkJLyogVmFsaWRhdGUgdGhlIGFkZHJlc3MgaXMgaW4gc2NvcGUgKi8KLQkJ
CWlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSAmJgotCQkJICAgIChz
dGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlID09IDApKSB7Ci0JCQkJYWRkcl9pbnNjb3Bl
ID0gMDsKLQkJCX0gZWxzZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2Fk
ZHIpICYmCi0JCQkgICAgKHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGUgPT0gMCkpIHsKLQkJ
CQlhZGRyX2luc2NvcGUgPSAwOwotCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwo
JnNpbjYtPnNpbjZfYWRkcikgJiYKLQkJCSAgICAoc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3Bl
ID09IDApKSB7Ci0JCQkJYWRkcl9pbnNjb3BlID0gMDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgotCXsK
LQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0JCXNjb25uID0gKHN0cnVjdCBzb2Nr
YWRkcl9jb25uICopbmV3YWRkcjsKLQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IE5VTEwpIHsK
LQkJCS8qIEludmFsaWQgYWRkcmVzcyAqLwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLSNpZmRlZiBI
QVZFX1NDT05OX0xFTgotCQlzY29ubi0+c2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKLSNlbmRpZgotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBu
b3Qgc3VwcG9ydGVkIGZhbWlseSB0eXBlICovCi0JCXJldHVybiAoLTEpOwotCX0KLQluZXQgPSBT
Q1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCksIHN0cnVjdCBzY3RwX25l
dHMpOwotCWlmIChuZXQgPT0gTlVMTCkgewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JU0NUUF9JTkNS
X1JBRERSX0NPVU5UKCk7Ci0JbWVtc2V0KG5ldCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX25ldHMp
KTsKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbmV0LT5zdGFydF90aW1lKTsKLSNpZmRl
ZiBIQVZFX1NBX0xFTgotCW1lbWNweSgmbmV0LT5yby5fbF9hZGRyLCBuZXdhZGRyLCBuZXdhZGRy
LT5zYV9sZW4pOwotI2VuZGlmCi0Jc3dpdGNoIChuZXdhZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRl
ZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotI2lmbmRlZiBIQVZFX1NBX0xFTgotCQltZW1jcHkoJm5l
dC0+cm8uX2xfYWRkciwgbmV3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotI2Vu
ZGlmCi0JCSgoc3RydWN0IHNvY2thZGRyX2luICopJm5ldC0+cm8uX2xfYWRkciktPnNpbl9wb3J0
ID0gc3RjYi0+cnBvcnQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQljYXNlIEFG
X0lORVQ2OgotI2lmbmRlZiBIQVZFX1NBX0xFTgotCQltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwg
bmV3YWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNlbmRpZgotCQkoKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyKS0+c2luNl9wb3J0ID0gc3RjYi0+cnBv
cnQ7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2Ug
QUZfQ09OTjoKLSNpZm5kZWYgSEFWRV9TQV9MRU4KLQkJbWVtY3B5KCZuZXQtPnJvLl9sX2FkZHIs
IG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotI2VuZGlmCi0JCSgoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyKS0+c2Nvbm5fcG9ydCA9IHN0Y2It
PnJwb3J0OwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQluZXQt
PmFkZHJfaXNfbG9jYWwgPSBzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChuZXdhZGRyLCBz
dGNiLT5hc29jLnZyZl9pZCk7Ci0JaWYgKG5ldC0+YWRkcl9pc19sb2NhbCAmJiAoKHNldF9zY29w
ZSB8fCAoZnJvbSA9PSBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkpKSB7Ci0JCXN0Y2ItPmFzb2Mu
c2NvcGUubG9vcGJhY2tfc2NvcGUgPSAxOwotCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxf
c2NvcGUgPSAxOwotCQlzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Njb3BlID0gMDsKLQkJc3RjYi0+
YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKLQkJYWRkcl9pbnNjb3BlID0gMTsKLQl9Ci0JbmV0
LT5mYWlsdXJlX3RocmVzaG9sZCA9IHN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlOwotCW5ldC0+
cGZfdGhyZXNob2xkID0gc3RjYi0+YXNvYy5kZWZfbmV0X3BmX3RocmVzaG9sZDsKLQlpZiAoYWRk
cl9pbnNjb3BlID09IDApIHsKLQkJbmV0LT5kZXN0X3N0YXRlID0gKFNDVFBfQUREUl9SRUFDSEFC
TEUgfAotCQkgICAgU0NUUF9BRERSX09VVF9PRl9TQ09QRSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGZy
b20gPT0gU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkKLQkJCS8qIFNDVFBfQUREUl9JU19DT05GSVJN
RUQgaXMgcGFzc2VkIGJ5IGNvbm5lY3RfeCAqLwotCQkJbmV0LT5kZXN0X3N0YXRlID0gU0NUUF9B
RERSX1JFQUNIQUJMRTsKLQkJZWxzZQotCQkJbmV0LT5kZXN0X3N0YXRlID0gU0NUUF9BRERSX1JF
QUNIQUJMRSB8Ci0JCQkgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEOwotCX0KLQkvKiBXZSBzZXQg
dGhpcyB0byAwLCB0aGUgdGltZXIgY29kZSBrbm93cyB0aGF0Ci0JICogdGhpcyBtZWFucyBpdHMg
YW4gaW5pdGlhbCB2YWx1ZQotCSAqLwotCW5ldC0+cnRvX25lZWRlZCA9IDE7Ci0JbmV0LT5SVE8g
PSAwOwotCW5ldC0+UlRPX21lYXN1cmVkID0gMDsKLQlzdGNiLT5hc29jLm51bW5ldHMrKzsKLQlu
ZXQtPnJlZl9jb3VudCA9IDE7Ci0JbmV0LT5jd3Jfd2luZG93X3RzbiA9IG5ldC0+bGFzdF9jd3Jf
dHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDE7Ci0JbmV0LT5wb3J0ID0gcG9ydDsKLQlu
ZXQtPmRzY3AgPSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcDsKLSNpZmRlZiBJTkVUNgotCW5ldC0+
Zmxvd2xhYmVsID0gc3RjYi0+YXNvYy5kZWZhdWx0X2Zsb3dsYWJlbDsKLSNlbmRpZgotCWlmIChz
Y3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19ET05PVF9IRUFSVEJFQVQpKSB7Ci0JCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfTk9I
QjsKLQl9IGVsc2UgewotCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT0hCOwotCX0K
LQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9Q
Q0JfRkxBR1NfRE9fTk9UX1BNVFVEKSkgewotCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERS
X05PX1BNVFVEOwotCX0gZWxzZSB7Ci0JCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05P
X1BNVFVEOwotCX0KLQluZXQtPmhlYXJ0X2JlYXRfZGVsYXkgPSBzdGNiLT5hc29jLmhlYXJ0X2Jl
YXRfZGVsYXk7Ci0JLyogSW5pdCB0aGUgdGltZXIgc3RydWN0dXJlICovCi0JU0NUUF9PU19USU1F
Ul9JTklUKCZuZXQtPnJ4dF90aW1lci50aW1lcik7Ci0JU0NUUF9PU19USU1FUl9JTklUKCZuZXQt
PnBtdHVfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmbmV0LT5oYl90aW1lci50
aW1lcik7Ci0KLQkvKiBOb3cgZ2VuZXJhdGUgYSByb3V0ZSBmb3IgdGhpcyBndXkgKi8KLSNpZmRl
ZiBJTkVUNgotI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKLQkvKiBLQU1FIGhhY2s6IGVt
YmVkIHNjb3BlaWQgKi8KLQlpZiAobmV3YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0J
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCi0JCSh2b2lk
KWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsICZzdGNiLT5zY3RwX2VwLT5p
cF9pbnAuaW5wLCBOVUxMKTsKLSNlbHNlCi0JCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5z
aW42X2FkZHIsIHNpbjYsICZzdGNiLT5zY3RwX2VwLT5pcF9pbnAuaW5wLCBOVUxMLCBOVUxMKTsK
LSNlbmRpZgotI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCi0JCSh2b2lkKXNhNl9lbWJlZHNjb3Bl
KHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSk7Ci0jZWxzZQotCQkodm9pZClp
bjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KTsKLSNlbmRpZgotI2lmbmRlZiBT
Q09QRURST1VUSU5HCi0JCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwotI2VuZGlmCi0JfQotI2Vu
ZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLSNlbmRpZgotCVNDVFBfUlRBTExPQygo
c2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCi0JICAgICAgICAgICAgIHN0Y2ItPmFzb2MudnJmX2lk
LAotCSAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLT5maWJudW0pOwotCi0JbmV0LT5zcmNfYWRk
cl9zZWxlY3RlZCA9IDA7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoU0NUUF9S
T1VURV9IQVNfVkFMSURfSUZOKCZuZXQtPnJvKSkgewotCQkvKiBHZXQgc291cmNlIGFkZHJlc3Mg
Ki8KLQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oc3Rj
Yi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RjYiwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQsCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MudnJmX2lkKTsKLQkJaWYgKG5ldC0+cm8u
X3NfYWRkciAhPSBOVUxMKSB7Ci0JCQl1aW50MzJfdCBpbXR1LCBybXR1LCBoY210dTsKLQotCQkJ
bmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7Ci0JCQkvKiBOb3cgZ2V0IHRoZSBpbnRlcmZhY2Ug
TVRVICovCi0JCQlpZiAobmV0LT5yby5fc19hZGRyLT5pZm5fcCAhPSBOVUxMKSB7Ci0JCQkJaW10
dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX0lOVEZDKG5ldC0+cm8uX3NfYWRkci0+aWZuX3ApOwot
CQkJfSBlbHNlIHsKLQkJCQlpbXR1ID0gMDsKLQkJCX0KLQkJCXJtdHUgPSBTQ1RQX0dBVEhFUl9N
VFVfRlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIG5ldC0+
cm8ucm9fcnQpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JCQloY210dSA9IHNjdHBfaGNf
Z2V0X210dSgmbmV0LT5yby5fbF9hZGRyLCBzdGNiLT5zY3RwX2VwLT5maWJudW0pOwotI2Vsc2UK
LQkJCWhjbXR1ID0gMDsKLSNlbmRpZgotCQkJbmV0LT5tdHUgPSBzY3RwX21pbl9tdHUoaGNtdHUs
IHJtdHUsIGltdHUpOwotCQkJaWYgKHJtdHUgPT0gMCkgewotCQkJCS8qIFN0YXJ0IHRoaW5ncyBv
ZmYgdG8gbWF0Y2ggbXR1IG9mIGludGVyZmFjZSBwbGVhc2UuICovCi0JCQkJU0NUUF9TRVRfTVRV
X09GX1JPVVRFKCZuZXQtPnJvLl9sX2FkZHIuc2EsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
IG5ldC0+cm8ucm9fcnQsIG5ldC0+bXR1KTsKLQkJCX0KLQkJfQotCX0KLSNlbmRpZgotCWlmIChu
ZXQtPm10dSA9PSAwKSB7Ci0JCXN3aXRjaCAobmV3YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYg
SU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQluZXQtPm10dSA9IFNDVFBfREVGQVVMVF9NVFU7Ci0J
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQluZXQt
Pm10dSA9IDEyODA7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkJY2FzZSBBRl9DT05OOgotCQkJbmV0LT5tdHUgPSAxMjgwOwotCQkJYnJlYWs7Ci0jZW5k
aWYKLQkJZGVmYXVsdDoKLQkJCWJyZWFrOwotCQl9Ci0JfQotI2lmIGRlZmluZWQoSU5FVCkgfHwg
ZGVmaW5lZChJTkVUNikKLQlpZiAobmV0LT5wb3J0KSB7Ci0JCW5ldC0+bXR1IC09ICh1aW50MzJf
dClzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JfQotI2VuZGlmCi0JaWYgKGZyb20gPT0gU0NUUF9B
TExPQ19BU09DKSB7Ci0JCXN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID0gbmV0LT5tdHU7Ci0JfQot
CWlmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG5ldC0+bXR1KSB7Ci0JCXNjdHBfcGF0aG10
dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsKLQl9Ci0jaWZkZWYgSU5FVDYKLSNpZmRlZiBT
Q1RQX0VNQkVEREVEX1Y2X1NDT1BFCi0JaWYgKG5ld2FkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU
NikgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCXNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0jaWZkZWYgU0NUUF9LQU1FCi0JCSh2b2lk
KXNhNl9yZWNvdmVyc2NvcGUoc2luNik7Ci0jZWxzZQotCQkodm9pZClpbjZfcmVjb3ZlcnNjb3Bl
KHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5VTEwpOwotI2VuZGlmIC8qIFNDVFBfS0FNRSAqLwot
CX0KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jZW5kaWYKLQotCS8qIEpS
UyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8K
LQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSAh
PSBOVUxMKQotCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2Nf
cGFyYW0pKHN0Y2IsIG5ldCk7Ci0KLQkvKgotCSAqIENNVDogQ1VDIGFsZ28gLSBzZXQgZmluZF9w
c2V1ZG9fY3VtYWNrIHRvIFRSVUUgKDEpIGF0IGJlZ2lubmluZwotCSAqIG9mIGFzc29jICgyMDA1
LzA2LzI3LCBpeWVuZ2FyQGNpcy51ZGVsLmVkdSkKLQkgKi8KLQluZXQtPmZpbmRfcHNldWRvX2N1
bWFjayA9IDE7Ci0JbmV0LT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotCS8qIENob29zZSBhbiBpbml0aWFsIGZsb3dpZC4gKi8KLQluZXQtPmZs
b3dpZCA9IHN0Y2ItPmFzb2MubXlfdnRhZyBeCi0JICAgICAgICAgICAgICBudG9ocyhzdGNiLT5y
cG9ydCkgXgotCSAgICAgICAgICAgICAgbnRvaHMoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCk7
Ci0JbmV0LT5mbG93dHlwZSA9IE1fSEFTSFRZUEVfT1BBUVVFX0hBU0g7Ci0jZW5kaWYKLQlpZiAo
bmV0cCkgewotCQkqbmV0cCA9IG5ldDsKLQl9Ci0JbmV0Zmlyc3QgPSBUQUlMUV9GSVJTVCgmc3Rj
Yi0+YXNvYy5uZXRzKTsKLQlpZiAobmV0LT5yby5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qIFNpbmNl
IHdlIGhhdmUgbm8gcm91dGUgcHV0IGl0IGF0IHRoZSBiYWNrICovCi0JCVRBSUxRX0lOU0VSVF9U
QUlMKCZzdGNiLT5hc29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKLQl9IGVsc2UgaWYgKG5ldGZp
cnN0ID09IE5VTEwpIHsKLQkJLyogV2UgYXJlIHRoZSBmaXJzdCBvbmUgaW4gdGhlIHBvb2wuICov
Ci0JCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsK
LQl9IGVsc2UgaWYgKG5ldGZpcnN0LT5yby5yb19ydCA9PSBOVUxMKSB7Ci0JCS8qCi0JCSAqIEZp
cnN0IG9uZSBoYXMgTk8gcm91dGUuIFBsYWNlIHRoaXMgb25lIGFoZWFkIG9mIHRoZSBmaXJzdAot
CQkgKiBvbmUuCi0JCSAqLwotCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3RjYi0+YXNvYy5uZXRzLCBu
ZXQsIHNjdHBfbmV4dCk7Ci0jaWZuZGVmIF9fUGFuZGFfXwotCX0gZWxzZSBpZiAobmV0LT5yby5y
b19ydC0+cnRfaWZwICE9IG5ldGZpcnN0LT5yby5yb19ydC0+cnRfaWZwKSB7Ci0JCS8qCi0JCSAq
IFRoaXMgb25lIGhhcyBhIGRpZmZlcmVudCBpbnRlcmZhY2UgdGhhbiB0aGUgb25lIGF0IHRoZQot
CQkgKiB0b3Agb2YgdGhlIGxpc3QuIFBsYWNlIGl0IGFoZWFkLgotCQkgKi8KLQkJVEFJTFFfSU5T
RVJUX0hFQUQoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOwotI2VuZGlmCi0JfSBl
bHNlIHsKLQkJLyoKLQkJICogT2sgd2UgaGF2ZSB0aGUgc2FtZSBpbnRlcmZhY2UgYXMgdGhlIGZp
cnN0IG9uZS4gTW92ZQotCQkgKiBmb3J3YXJkIHVudGlsIHdlIGZpbmQgZWl0aGVyIGEpIG9uZSB3
aXRoIGEgTlVMTCByb3V0ZS4uLgotCQkgKiBpbnNlcnQgYWhlYWQgb2YgdGhhdCBiKSBvbmUgd2l0
aCBhIGRpZmZlcmVudCBpZnAuLiBpbnNlcnQKLQkJICogYWZ0ZXIgdGhhdC4gYykgZW5kIG9mIHRo
ZSBsaXN0Li4gaW5zZXJ0IGF0IHRoZSB0YWlsLgotCQkgKi8KLQkJc3RydWN0IHNjdHBfbmV0cyAq
bmV0bG9vazsKLQotCQlkbyB7Ci0JCQluZXRsb29rID0gVEFJTFFfTkVYVChuZXRmaXJzdCwgc2N0
cF9uZXh0KTsKLQkJCWlmIChuZXRsb29rID09IE5VTEwpIHsKLQkJCQkvKiBFbmQgb2YgdGhlIGxp
c3QgKi8KLQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBf
bmV4dCk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKG5ldGxvb2stPnJvLnJvX3J0ID09IE5V
TEwpIHsKLQkJCQkvKiBuZXh0IG9uZSBoYXMgTk8gcm91dGUgKi8KLQkJCQlUQUlMUV9JTlNFUlRf
QkVGT1JFKG5ldGZpcnN0LCBuZXQsIHNjdHBfbmV4dCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZu
ZGVmIF9fUGFuZGFfXwotCQkJZWxzZSBpZiAobmV0bG9vay0+cm8ucm9fcnQtPnJ0X2lmcCAhPSBu
ZXQtPnJvLnJvX3J0LT5ydF9pZnApCi0jZWxzZQotCQkJZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJ
VEFJTFFfSU5TRVJUX0FGVEVSKCZzdGNiLT5hc29jLm5ldHMsIG5ldGxvb2ssCi0JCQkJCQkgICBu
ZXQsIHNjdHBfbmV4dCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZuZGVmIF9fUGFuZGFfXwotCQkJ
LyogU2hpZnQgZm9yd2FyZCAqLwotCQkJbmV0Zmlyc3QgPSBuZXRsb29rOwotI2VuZGlmCi0JCX0g
d2hpbGUgKG5ldGxvb2sgIT0gTlVMTCk7Ci0JfQotCi0JLyogZ290IHRvIGhhdmUgYSBwcmltYXJ5
IHNldCAqLwotCWlmIChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPT0gMCkgewotCQlz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPSBuZXQ7Ci0JfSBlbHNlIGlmICgoc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5yb19ydCA9PSBOVUxMKSAmJgotCQkgICAgKG5l
dC0+cm8ucm9fcnQpICYmCi0JICAgICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09O
RklSTUVEKSA9PSAwKSkgewotCQkvKiBObyByb3V0ZSB0byBjdXJyZW50IHByaW1hcnkgYWRvcHQg
bmV3IHByaW1hcnkgKi8KLQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gbmV0Owot
CX0KLQkvKiBWYWxpZGF0ZSBwcmltYXJ5IGlzIGZpcnN0ICovCi0JbmV0ID0gVEFJTFFfRklSU1Qo
JnN0Y2ItPmFzb2MubmV0cyk7Ci0JaWYgKChuZXQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uKSAmJgotCSAgICAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSkgewotCQkv
KiBmaXJzdCBvbmUgb24gdGhlIGxpc3QgaXMgTk9UIHRoZSBwcmltYXJ5Ci0JCSAqIHNjdHBfY21w
YWRkcigpIGlzIG11Y2ggbW9yZSBlZmZpY2llbnQgaWYKLQkJICogdGhlIHByaW1hcnkgaXMgdGhl
IGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0Ci0JCSAqIHNvLgotCQkgKi8KLQkJVEFJTFFfUkVN
T1ZFKCZzdGNiLT5hc29jLm5ldHMsCi0JCQkgICAgIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiwgc2N0cF9uZXh0KTsKLQkJVEFJTFFfSU5TRVJUX0hFQUQoJnN0Y2ItPmFzb2MubmV0cywK
LQkJCQkgIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKLQl9Ci0J
cmV0dXJuICgwKTsKLX0KLQotCi1zdGF0aWMgdWludDMyX3QKLXNjdHBfYWxvY19hX2Fzc29jX2lk
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQl1aW50
MzJfdCBpZDsKLQlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOwotCXN0cnVjdCBzY3RwX3RjYiAq
bHN0Y2I7Ci0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotIHRyeV9hZ2FpbjoKLQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKLQkJLyogVFNOSCAq
LwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qCi0JICog
V2UgZG9uJ3QgYWxsb3cgYXNzb2MgaWQgdG8gYmUgb25lIG9mIFNDVFBfRlVUVVJFX0FTU09DLAot
CSAqIFNDVFBfQ1VSUkVOVF9BU1NPQyBhbmQgU0NUUF9BTExfQVNTT0MuCi0JICovCi0JaWYgKGlu
cC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIgPD0gU0NUUF9BTExfQVNTT0MpIHsKLQkJaW5wLT5zY3Rw
X2Fzc29jaWRfY291bnRlciA9IFNDVFBfQUxMX0FTU09DICsgMTsKLQl9Ci0JaWQgPSBpbnAtPnNj
dHBfYXNzb2NpZF9jb3VudGVyOwotCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIrKzsKLQlsc3Rj
YiA9IHNjdHBfZmluZGFzb2NfZXBfYXNvY2lkX2xvY2tlZChpbnAsIChzY3RwX2Fzc29jX3QpaWQs
IDApOwotCWlmIChsc3RjYikgewotCQlnb3RvIHRyeV9hZ2FpbjsKLQl9Ci0JaGVhZCA9ICZpbnAt
PnNjdHBfYXNvY2lkaGFzaFtTQ1RQX1BDQkhBU0hfQVNPQyhpZCwgaW5wLT5oYXNoYXNvY2lkbWFy
ayldOwotCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsK
LQlzdGNiLT5hc29jLmluX2Fzb2NpZF9oYXNoID0gMTsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JcmV0dXJuIGlkOwotfQotCi0vKgotICogYWxsb2NhdGUgYW4gYXNzb2NpYXRpb24gYW5kIGFk
ZCBpdCB0byB0aGUgZW5kcG9pbnQuIFRoZSBjYWxsZXIgbXVzdCBiZQotICogY2FyZWZ1bCB0byBh
ZGQgYWxsIGFkZGl0aW9uYWwgYWRkcmVzc2VzIG9uY2UgdGhleSBhcmUga25vdyByaWdodCBhd2F5
IG9yCi0gKiBlbHNlIHRoZSBhc3NvYyB3aWxsIGJlIG1heSBleHBlcmllbmNlIGEgYmxhY2tvdXQg
c2NlbmFyaW8uCi0gKi8KLXN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2Fsb2NfYXNzb2Moc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNvY2thZGRyICpmaXJzdGFkZHIsCi0gICAgICAgICAg
ICAgICAgaW50ICplcnJvciwgdWludDMyX3Qgb3ZlcnJpZGVfdGFnLCB1aW50MzJfdCB2cmZfaWQs
Ci0gICAgICAgICAgICAgICAgdWludDE2X3Qgb19zdHJlYW1zLCB1aW50MTZfdCBwb3J0LAotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCQlz
dHJ1Y3QgdGhyZWFkICpwCi0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCQlQS1RIUkVBRCBw
Ci0jZWxzZQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAgICAgICAgICAgICAvKiAg
X19Vc2Vyc3BhY2VfXyBOVUxMIHByb2MgaXMgZ29pbmcgdG8gYmUgcGFzc2VkIGhlcmUuIFNlZSBz
Y3RwX2xvd2VyX3Nvc2VuZCAqLwotI2VuZGlmCi0JCXN0cnVjdCBwcm9jICpwCi0jZW5kaWYKLSkK
LXsKLQkvKiBub3RlIHRoZSBwIGFyZ3VtZW50IGlzIG9ubHkgdmFsaWQgaW4gdW5ib3VuZCBzb2Nr
ZXRzICovCi0KLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2M7Ci0Jc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKLQl1aW50MTZfdCBycG9ydDsK
LQlpbnQgZXJyOwotCi0JLyoKLQkgKiBBc3N1bXB0aW9uIG1hZGUgaGVyZTogQ2FsbGVyIGhhcyBk
b25lIGEKLQkgKiBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGVwLCBhZGRyJ3MpOyB0byBt
YWtlIHN1cmUgdGhlCi0JICogYWRkcmVzcyBkb2VzIG5vdCBleGlzdCBhbHJlYWR5LgotCSAqLwot
CWlmIChTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfYXNvYykgPj0gU0NUUF9NQVhfTlVNX09GX0FT
T0MpIHsKLQkJLyogSGl0IG1heCBhc3NvYywgc29ycnkgbm8gbW9yZSAqLwotCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9CVUZTKTsK
LQkJKmVycm9yID0gRU5PQlVGUzsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKGZpcnN0YWRk
ciA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7Ci0JCSplcnJvciA9IEVJTlZBTDsKLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpICYmCi0JICAgICgoc2N0cF9pc19mZWF0dXJlX29m
ZihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpIHx8Ci0JICAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSkpIHsKLQkJLyoKLQkJICogSWYgaXRzIGlu
IHRoZSBUQ1AgcG9vbCwgaXRzIE5PVCBhbGxvd2VkIHRvIGNyZWF0ZSBhbgotCQkgKiBhc3NvY2lh
dGlvbi4gVGhlIHBhcmVudCBsaXN0ZW5lciBuZWVkcyB0byBjYWxsCi0JCSAqIHNjdHBfYWxvY19h
c3NvYy4uIG9yIHRoZSBvbmUtMi1tYW55IHNvY2tldC4gSWYgYSBwZWVsZWQKLQkJICogb2ZmLCBv
ciBjb25uZWN0ZWQgb25lIGRvZXMgdGhpcy4uIGl0cyBhbiBlcnJvci4KLQkJICovCi0JCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJKmVycm9yID0gRUlOVkFMOwotCQlyZXR1
cm4gKE5VTEwpOwotCX0KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSkgewotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19DT05O
RUNURUQpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FTX0FC
T1JURUQpKSB7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJKmVy
cm9yID0gRUlOVkFMOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCX0KLQlTQ1RQREJHKFNDVFBf
REVCVUdfUENCMywgIkFsbG9jYXRlIGFuIGFzc29jaWF0aW9uIGZvciBwZWVyOiIpOwotI2lmZGVm
IFNDVFBfREVCVUcKLQlpZiAoZmlyc3RhZGRyKSB7Ci0JCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVH
X1BDQjMsIGZpcnN0YWRkcik7Ci0JCXN3aXRjaCAoZmlyc3RhZGRyLT5zYV9mYW1pbHkpIHsKLSNp
ZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IzLCAi
UG9ydDolZFxuIiwKLQkJCSAgICAgICAgbnRvaHMoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmaXJz
dGFkZHIpLT5zaW5fcG9ydCkpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlj
YXNlIEFGX0lORVQ2OgotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjMsICJQb3J0OiVkXG4iLAot
CQkJICAgICAgICBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilmaXJzdGFkZHIpLT5zaW42
X3BvcnQpKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQot
CQljYXNlIEFGX0NPTk46Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywgIlBvcnQ6JWRcbiIs
Ci0JCQkgICAgICAgIG50b2hzKCgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilmaXJzdGFkZHIpLT5z
Y29ubl9wb3J0KSk7Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0J
CX0KLQl9IGVsc2UgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywiTm9uZVxuIik7Ci0JfQot
I2VuZGlmCQkJCS8qIFNDVFBfREVCVUcgKi8KLQlzd2l0Y2ggKGZpcnN0YWRkci0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOwotCi0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilmaXJzdGFkZHI7Ci0JCWlm
ICgobnRvaHMoc2luLT5zaW5fcG9ydCkgPT0gMCkgfHwKLQkJICAgIChzaW4tPnNpbl9hZGRyLnNf
YWRkciA9PSBJTkFERFJfQU5ZKSB8fAotCQkgICAgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElO
QUREUl9CUk9BRENBU1QpIHx8Ci0JCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLT5zaW5fYWRk
ci5zX2FkZHIpKSkgewotCQkJLyogSW52YWxpZCBhZGRyZXNzICovCi0JCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuIChO
VUxMKTsKLQkJfQotCQlycG9ydCA9IHNpbi0+c2luX3BvcnQ7Ci0JCWJyZWFrOwotCX0KLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopZmlyc3RhZGRyOwot
CQlpZiAoKG50b2hzKHNpbjYtPnNpbjZfcG9ydCkgPT0gMCkgfHwKLQkJICAgIElONl9JU19BRERS
X1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpIHx8Ci0JCSAgICBJTjZfSVNfQUREUl9NVUxU
SUNBU1QoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCS8qIEludmFsaWQgYWRkcmVzcyAqLwotCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsK
LQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJcnBvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCWJy
ZWFrOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NP
Tk46Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJc2Nvbm4gPSAoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKilmaXJzdGFkZHI7Ci0JCWlmICgobnRvaHMoc2Nvbm4tPnNjb25u
X3BvcnQpID09IDApIHx8Ci0JCSAgICAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gTlVMTCkpIHsKLQkJ
CS8qIEludmFsaWQgYWRkcmVzcyAqLwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlO
VkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybiAoTlVMTCk7Ci0JCX0KLQkJcnBv
cnQgPSBzY29ubi0+c2Nvbm5fcG9ydDsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoK
LQkJLyogbm90IHN1cHBvcnRlZCBmYW1pbHkgdHlwZSAqLwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9QQ0IsIEVJTlZBTCk7Ci0JCSplcnJvciA9IEVJTlZBTDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9
Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19VTkJPVU5EKSB7Ci0JCS8qCi0JCSAqIElmIHlvdSBoYXZlIG5vdCBwZXJmb3JtZWQg
YSBiaW5kLCB0aGVuIHdlIG5lZWQgdG8gZG8gdGhlCi0JCSAqIGVwaGVtZXJhbCBiaW5kIGZvciB5
b3UuCi0JCSAqLwotCQlpZiAoKGVyciA9IHNjdHBfaW5wY2JfYmluZChpbnAtPnNjdHBfc29ja2V0
LAotCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKU5VTEwsCi0JCSAgICAoc3RydWN0IHNjdHBfaWZh
ICopTlVMTCwKLSNpZm5kZWYgX19QYW5kYV9fCi0JCQkJCSAgIHAKLSNlbHNlCi0JCQkJCSAgIChz
dHJ1Y3QgcHJvYyAqKU5VTEwKLSNlbmRpZgotCQkgICAgKSkpIHsKLQkJCS8qIGJpbmQgZXJyb3Is
IHByb2JhYmx5IHBlcm0gKi8KLQkJCSplcnJvciA9IGVycjsKLQkJCXJldHVybiAoTlVMTCk7Ci0J
CX0KLQl9Ci0Jc3RjYiA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNv
YyksIHN0cnVjdCBzY3RwX3RjYik7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkvKiBvdXQgb2Yg
bWVtb3J5PyAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFTk9NRU0pOwotCQkqZXJyb3IgPSBFTk9NRU07Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCVNDVFBfSU5DUl9BU09DX0NPVU5UKCk7Ci0KLQltZW1zZXQoc3RjYiwgMCwgc2l6
ZW9mKCpzdGNiKSk7Ci0JYXNvYyA9ICZzdGNiLT5hc29jOwotCi0JYXNvYy0+YXNzb2NfaWQgPSBz
Y3RwX2Fsb2NfYV9hc3NvY19pZChpbnAsIHN0Y2IpOwotCVNDVFBfVENCX0xPQ0tfSU5JVChzdGNi
KTsKLQlTQ1RQX1RDQl9TRU5EX0xPQ0tfSU5JVChzdGNiKTsKLQlzdGNiLT5ycG9ydCA9IHJwb3J0
OwotCS8qIHNldHVwIGJhY2sgcG9pbnRlcidzICovCi0Jc3RjYi0+c2N0cF9lcCA9IGlucDsKLQlz
dGNiLT5zY3RwX3NvY2tldCA9IGlucC0+c2N0cF9zb2NrZXQ7Ci0JaWYgKChlcnIgPSBzY3RwX2lu
aXRfYXNvYyhpbnAsIHN0Y2IsIG92ZXJyaWRlX3RhZywgdnJmX2lkLCBvX3N0cmVhbXMpKSkgewot
CQkvKiBmYWlsZWQgKi8KLQkJU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKHN0Y2IpOwotCQlTQ1RQX1RD
Ql9TRU5EX0xPQ0tfREVTVFJPWShzdGNiKTsKLQkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jh
c29jaWRoYXNoKTsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNv
YyksIHN0Y2IpOwotCQlTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpOwotCQkqZXJyb3IgPSBlcnI7Ci0J
CXJldHVybiAoTlVMTCk7Ci0JfQotCS8qIGFuZCB0aGUgcG9ydCAqLwotCVNDVFBfSU5QX0lORk9f
V0xPQ0soKTsKLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiAo
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09O
RSkpIHsKLQkJLyogaW5wY2IgZnJlZWQgd2hpbGUgYWxsb2MgZ29pbmcgb24gKi8KLQkJU0NUUF9U
Q0JfTE9DS19ERVNUUk9ZKHN0Y2IpOwotCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShzdGNi
KTsKLQkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKLQkJU0NUUF9aT05F
X0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOwotCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQlTQ1RQX0RFQ1JfQVNP
Q19DT1VOVCgpOwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFSU5WQUwpOwotCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0KLQkvKiBub3cgdGhhdCBteV92dGFnIGlz
IHNldCwgYWRkIGl0IHRvIHRoZSBoYXNoICovCi0JaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3Rw
X2Fzb2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLm15X3Z0YWcsIFNDVFBfQkFT
RV9JTkZPKGhhc2hhc29jbWFyaykpXTsKLQkvKiBwdXQgaXQgaW4gdGhlIGJ1Y2tldCBpbiB0aGUg
dnRhZyBoYXNoIG9mIGFzc29jJ3MgZm9yIHRoZSBzeXN0ZW0gKi8KLQlMSVNUX0lOU0VSVF9IRUFE
KGhlYWQsIHN0Y2IsIHNjdHBfYXNvY3MpOwotCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCi0J
aWYgKChlcnIgPSBzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCBmaXJzdGFkZHIsIE5VTEwsIHBv
cnQsIFNDVFBfRE9fU0VUU0NPUEUsIFNDVFBfQUxMT0NfQVNPQykpKSB7Ci0JCS8qIGZhaWx1cmUu
LiBtZW1vcnkgZXJyb3I/ICovCi0JCWlmIChhc29jLT5zdHJtb3V0KSB7Ci0JCQlTQ1RQX0ZSRUUo
YXNvYy0+c3RybW91dCwgU0NUUF9NX1NUUk1PKTsKLQkJCWFzb2MtPnN0cm1vdXQgPSBOVUxMOwot
CQl9Ci0JCWlmIChhc29jLT5tYXBwaW5nX2FycmF5KSB7Ci0JCQlTQ1RQX0ZSRUUoYXNvYy0+bWFw
cGluZ19hcnJheSwgU0NUUF9NX01BUCk7Ci0JCQlhc29jLT5tYXBwaW5nX2FycmF5ID0gTlVMTDsK
LQkJfQotCQlpZiAoYXNvYy0+bnJfbWFwcGluZ19hcnJheSkgewotCQkJU0NUUF9GUkVFKGFzb2Mt
Pm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCQkJYXNvYy0+bnJfbWFwcGluZ19hcnJh
eSA9IE5VTEw7Ci0JCX0KLQkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKLQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQlTQ1RQX1RDQl9MT0NLX0RFU1RST1koc3RjYik7Ci0JCVNDVFBfVENCX1NF
TkRfTE9DS19ERVNUUk9ZKHN0Y2IpOwotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmFzb2Np
ZGhhc2gpOwotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSwg
c3RjYik7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7Ci0JCSplcnJvciA9
IEVOT0JVRlM7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCS8qIEluaXQgYWxsIHRoZSB0aW1lcnMg
Ki8KLQlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmRhY2tfdGltZXIudGltZXIpOwotCVNDVFBf
T1NfVElNRVJfSU5JVCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElN
RVJfSU5JVCgmYXNvYy0+YXNjb25mX3RpbWVyLnRpbWVyKTsKLQlTQ1RQX09TX1RJTUVSX0lOSVQo
JmFzb2MtPnNodXRfZ3VhcmRfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNv
Yy0+YXV0b2Nsb3NlX3RpbWVyLnRpbWVyKTsKLQlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmRl
bGF5ZWRfZXZlbnRfdGltZXIudGltZXIpOwotCVNDVFBfT1NfVElNRVJfSU5JVCgmYXNvYy0+ZGVs
ZXRlX3ByaW1fdGltZXIudGltZXIpOwotCi0JTElTVF9JTlNFUlRfSEVBRCgmaW5wLT5zY3RwX2Fz
b2NfbGlzdCwgc3RjYiwgc2N0cF90Y2JsaXN0KTsKLQkvKiBub3cgZmlsZSB0aGUgcG9ydCB1bmRl
ciB0aGUgaGFzaCBhcyB3ZWxsICovCi0JaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9IE5VTEwpIHsK
LQkJaGVhZCA9ICZpbnAtPnNjdHBfdGNiaGFzaFtTQ1RQX1BDQkhBU0hfQUxMQUREUihzdGNiLT5y
cG9ydCwKLQkJICAgIGlucC0+c2N0cF9oYXNobWFyayldOwotCQlMSVNUX0lOU0VSVF9IRUFEKGhl
YWQsIHN0Y2IsIHNjdHBfdGNiaGFzaCk7Ci0JfQotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlT
Q1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkFzc29jaWF0aW9uICVwIG5vdyBhbGxvY2F0ZWRcbiIs
ICh2b2lkICopc3RjYik7Ci0JcmV0dXJuIChzdGNiKTsKLX0KLQotCi12b2lkCi1zY3RwX3JlbW92
ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0J
c3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0KLQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0J
YXNvYy0+bnVtbmV0cy0tOwotCVRBSUxRX1JFTU9WRSgmYXNvYy0+bmV0cywgbmV0LCBzY3RwX25l
eHQpOwotCWlmIChuZXQgPT0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbikgewotCQkvKiBSZXNl
dCBwcmltYXJ5ICovCi0JCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7Ci0KLQkJbG5ldCA9IFRBSUxR
X0ZJUlNUKCZhc29jLT5uZXRzKTsKLQkJLyogTW9iaWxpdHkgYWRhcHRhdGlvbgotCQkgICBJZGVh
bGx5LCBpZiBkZWxldGVkIGRlc3RpbmF0aW9uIGlzIHRoZSBwcmltYXJ5LCBpdCBiZWNvbWVzCi0J
CSAgIGEgZmFzdCByZXRyYW5zbWlzc2lvbiB0cmlnZ2VyIGJ5IHRoZSBzdWJzZXF1ZW50IFNFVCBQ
UklNQVJZLgotCQkgICAoYnkgbWljY2hpZSkKLQkJICovCi0JCWlmIChzY3RwX2lzX21vYmlsaXR5
X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX01PQklMSVRZX0JBU0UpIHx8Ci0JCSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1
cmVfb24oc3RjYi0+c2N0cF9lcCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsICJyZW1vdmVfbmV0OiBwcmltYXJ5IGRzdCBpcyBkZWxldGluZ1xuIik7Ci0JCQlpZiAoYXNv
Yy0+ZGVsZXRlZF9wcmltYXJ5ICE9IE5VTEwpIHsKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwgInJlbW92ZV9uZXQ6IGRlbGV0ZWQgcHJpbWFyeSBtYXkgYmUgYWxyZWFkeSBzdG9yZWRc
biIpOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCQkJYXNvYy0+ZGVsZXRlZF9wcmltYXJ5ID0gbmV0
OwotCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKLQkJCW1lbXNldCgmbmV0
LT5sYXN0c2EsIDAsIHNpemVvZihuZXQtPmxhc3RzYSkpOwotCQkJbWVtc2V0KCZuZXQtPmxhc3Rz
diwgMCwgc2l6ZW9mKG5ldC0+bGFzdHN2KSk7Ci0JCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb24o
c3RjYi0+c2N0cF9lcCwKLQkJCQkJCSBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7Ci0JCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQsCi0JCQkJCSBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBOVUxMKTsKLQkJfQotb3V0OgotCQkvKiBUcnkgdG8gZmluZCBhIGNv
bmZpcm1lZCBwcmltYXJ5ICovCi0JCWFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24gPSBzY3RwX2Zp
bmRfYWx0ZXJuYXRlX25ldChzdGNiLCBsbmV0LCAwKTsKLQl9Ci0JaWYgKG5ldCA9PSBhc29jLT5s
YXN0X2RhdGFfY2h1bmtfZnJvbSkgewotCQkvKiBSZXNldCBwcmltYXJ5ICovCi0JCWFzb2MtPmxh
c3RfZGF0YV9jaHVua19mcm9tID0gVEFJTFFfRklSU1QoJmFzb2MtPm5ldHMpOwotCX0KLQlpZiAo
bmV0ID09IGFzb2MtPmxhc3RfY29udHJvbF9jaHVua19mcm9tKSB7Ci0JCS8qIENsZWFyIG5ldCAq
LwotCQlhc29jLT5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSA9IE5VTEw7Ci0JfQotCWlmIChuZXQg
PT0gc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2It
PmFzb2MuYWx0ZXJuYXRlKTsKLQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOwotCX0KLQlz
Y3RwX2ZyZWVfcmVtb3RlX2FkZHIobmV0KTsKLX0KLQotLyoKLSAqIHJlbW92ZSBhIHJlbW90ZSBl
bmRwb2ludCBhZGRyZXNzIGZyb20gYW4gYXNzb2NpYXRpb24sIGl0IHdpbGwgZmFpbCBpZiB0aGUK
LSAqIGFkZHJlc3MgZG9lcyBub3QgZXhpc3QuCi0gKi8KLWludAotc2N0cF9kZWxfcmVtb3RlX2Fk
ZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKnJlbWFkZHIpCi17Ci0J
LyoKLQkgKiBIZXJlIHdlIG5lZWQgdG8gcmVtb3ZlIGEgcmVtb3RlIGFkZHJlc3MuIFRoaXMgaXMg
cXVpdGUgc2ltcGxlLCB3ZQotCSAqIGZpcnN0IGZpbmQgaXQgaW4gdGhlIGxpc3Qgb2YgYWRkcmVz
cyBmb3IgdGhlIGFzc29jaWF0aW9uCi0JICogKHRhc29jLT5hc29jLm5ldHMpIGFuZCB0aGVuIGlm
IGl0IGlzIHRoZXJlLCB3ZSBkbyBhIExJU1RfUkVNT1ZFCi0JICogb24gdGhhdCBpdGVtLiBOb3Rl
IHdlIGRvIG5vdCBhbGxvdyBpdCB0byBiZSByZW1vdmVkIGlmIHRoZXJlIGFyZQotCSAqIG5vIG90
aGVyIGFkZHJlc3Nlcy4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpubmV0OwotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCi0J
LyogbG9jYXRlIHRoZSBhZGRyZXNzICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKG5ldCwgJmFzb2Mt
Pm5ldHMsIHNjdHBfbmV4dCwgbm5ldCkgewotCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2Zh
bWlseSAhPSByZW1hZGRyLT5zYV9mYW1pbHkpIHsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChz
Y3RwX2NtcGFkZHIoKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsCi0JCSAgICBy
ZW1hZGRyKSkgewotCQkJLyogd2UgZm91bmQgdGhlIGd1eSAqLwotCQkJaWYgKGFzb2MtPm51bW5l
dHMgPCAyKSB7Ci0JCQkJLyogTXVzdCBoYXZlIGF0IExFQVNUIHR3byByZW1vdGUgYWRkcmVzc2Vz
ICovCi0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfcmVtb3ZlX25ldChz
dGNiLCBuZXQpOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JLyogbm90IGZvdW5k
LiAqLwotCXJldHVybiAoLTIpOwotfQotCi12b2lkCi1zY3RwX2RlbGV0ZV9mcm9tX3RpbWV3YWl0
KHVpbnQzMl90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0KQotewotCXN0cnVj
dCBzY3RwdnRhZ2hlYWQgKmNoYWluOwotCXN0cnVjdCBzY3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9j
azsKLQlpbnQgZm91bmQgPSAwOwotCWludCBpOwotCi0JY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8o
dnRhZ190aW1ld2FpdClbKHRhZyAlIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKLQlMSVNU
X0ZPUkVBQ0godHdhaXRfYmxvY2ssIGNoYWluLCBzY3RwX254dF90YWdibG9jaykgewotCQlmb3Ig
KGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7Ci0JCSAgaWYgKCh0
d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9PSB0YWcpICYmCi0JCSAgICAgICh0d2Fp
dF9ibG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9PSBscG9ydCkgJiYKLQkJICAgICAgKHR3YWl0
X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID09IHJwb3J0KSkgewotCQkJCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9leHBpcmUgPSAwOwotCQkJCXR3YWl0X2Jsb2NrLT52
dGFnX2Jsb2NrW2ldLnZfdGFnID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5s
cG9ydCA9IDA7Ci0JCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSAwOwotCQkJ
CWZvdW5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoZm91bmQpCi0JCQlicmVh
azsKLQl9Ci19Ci0KLWludAotc2N0cF9pc19pbl90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQx
Nl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCkKLXsKLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFp
bjsKLQlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2s7Ci0JaW50IGZvdW5kID0gMDsK
LQlpbnQgaTsKLQotCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQljaGFpbiA9ICZTQ1RQX0JBU0Vf
SU5GTyh2dGFnX3RpbWV3YWl0KVsodGFnICUgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRSldOwot
CUxJU1RfRk9SRUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Jsb2NrKSB7Ci0J
CWZvciAoaSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLOyBpKyspIHsKLQkJCWlm
ICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gdGFnKSAgJiYKLQkJCSAgICAo
dHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPT0gbHBvcnQpICAmJgotCQkJICAgICh0
d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5ycG9ydCA9PSBycG9ydCkpIHsKLQkJCQlmb3VuZCA9
IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKGZvdW5kKQotCQkJYnJlYWs7Ci0JfQot
CVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOwotCXJldHVybiAoZm91bmQpOwotfQotCi0KLXZvaWQK
LXNjdHBfYWRkX3Z0YWdfdG9fdGltZXdhaXQodWludDMyX3QgdGFnLCB1aW50MzJfdCB0aW1lLCB1
aW50MTZfdCBscG9ydCwgdWludDE2X3QgcnBvcnQpCi17Ci0Jc3RydWN0IHNjdHB2dGFnaGVhZCAq
Y2hhaW47Ci0Jc3RydWN0IHNjdHBfdGFnYmxvY2sgKnR3YWl0X2Jsb2NrOwotCXN0cnVjdCB0aW1l
dmFsIG5vdzsKLQlpbnQgc2V0LCBpOwotCi0JaWYgKHRpbWUgPT0gMCkgewotCQkvKiBJdHMgZGlz
YWJsZWQgKi8KLQkJcmV0dXJuOwotCX0KLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93
KTsKLQljaGFpbiA9ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVsodGFnICUgU0NUUF9T
VEFDS19WVEFHX0hBU0hfU0laRSldOwotCXNldCA9IDA7Ci0JTElTVF9GT1JFQUNIKHR3YWl0X2Js
b2NrLCBjaGFpbiwgc2N0cF9ueHRfdGFnYmxvY2spIHsKLQkJLyogQmxvY2socykgcHJlc2VudCwg
bGV0cyBmaW5kIHNwYWNlLCBhbmQgZXhwaXJlIG9uIHRoZSBmbHkgKi8KLQkJZm9yIChpID0gMDsg
aSA8IFNDVFBfTlVNQkVSX0lOX1ZUQUdfQkxPQ0s7IGkrKykgewotCQkJaWYgKCh0d2FpdF9ibG9j
ay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9PSAwKSAmJgotCQkJICAgICFzZXQpIHsKLQkJCQl0d2Fp
dF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0KLQkJCQkJbm93LnR2X3Nl
YyArIHRpbWU7Ci0JCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPSB0YWc7Ci0J
CQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSBscG9ydDsKLQkJCQl0d2FpdF9i
bG9jay0+dnRhZ19ibG9ja1tpXS5ycG9ydCA9IHJwb3J0OwotCQkJCXNldCA9IDE7Ci0JCQl9IGVs
c2UgaWYgKCh0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZykgJiYKLQkJCQkgICAgKChs
b25nKXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnR2X3NlY19hdF9leHBpcmUgPCBub3cudHZf
c2VjKSkgewotCQkJCS8qIEF1ZGl0IGV4cGlyZXMgdGhpcyBndXkgKi8KLQkJCQl0d2FpdF9ibG9j
ay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRfZXhwaXJlID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+
dnRhZ19ibG9ja1tpXS52X3RhZyA9IDA7Ci0JCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0u
bHBvcnQgPSAwOwotCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gMDsKLQkJ
CQlpZiAoc2V0ID09IDApIHsKLQkJCQkJLyogUmV1c2UgaXQgZm9yIG15IG5ldyB0YWcgKi8KLQkJ
CQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0X2V4cGlyZSA9IG5vdy50dl9z
ZWMgKyB0aW1lOwotCQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IHRhZzsK
LQkJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSBscG9ydDsKLQkJCQkJdHdh
aXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSBycG9ydDsKLQkJCQkJc2V0ID0gMTsKLQkJ
CQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHNldCkgewotCQkJLyoKLQkJCSAqIFdlIG9ubHkgZG8gdXAg
dG8gdGhlIGJsb2NrIHdoZXJlIHdlIGNhbgotCQkJICogcGxhY2Ugb3VyIHRhZyBmb3IgYXVkaXRz
Ci0JCQkgKi8KLQkJCWJyZWFrOwotCQl9Ci0JfQotCS8qIE5lZWQgdG8gYWRkIGEgbmV3IGJsb2Nr
IHRvIGNoYWluICovCi0JaWYgKCFzZXQpIHsKLQkJU0NUUF9NQUxMT0ModHdhaXRfYmxvY2ssIHN0
cnVjdCBzY3RwX3RhZ2Jsb2NrICosCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfdGFnYmxvY2sp
LCBTQ1RQX01fVElNVyk7Ci0JCWlmICh0d2FpdF9ibG9jayA9PSBOVUxMKSB7Ci0jaWZkZWYgSU5W
QVJJQU5UUwotCQkJcGFuaWMoIkNhbiBub3QgYWxsb2MgdGFnYmxvY2siKTsKLSNlbmRpZgotCQkJ
cmV0dXJuOwotCQl9Ci0JCW1lbXNldCh0d2FpdF9ibG9jaywgMCwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3RhZ2Jsb2NrKSk7Ci0JCUxJU1RfSU5TRVJUX0hFQUQoY2hhaW4sIHR3YWl0X2Jsb2NrLCBzY3Rw
X254dF90YWdibG9jayk7Ci0JCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLnR2X3NlY19hdF9l
eHBpcmUgPSBub3cudHZfc2VjICsgdGltZTsKLQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbMF0u
dl90YWcgPSB0YWc7Ci0JCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLmxwb3J0ID0gbHBvcnQ7
Ci0JCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLnJwb3J0ID0gcnBvcnQ7Ci0JfQotfQotCi12
b2lkCi1zY3RwX2NsZWFuX3VwX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX3JlYWRoZWFkICpyaCkKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpuY2hr
OwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7Ci0KLQlU
QUlMUV9GT1JFQUNIX1NBRkUoY29udHJvbCwgcmgsIG5leHRfaW5zdHJtLCBuY29udHJvbCkgewot
CQlUQUlMUV9SRU1PVkUocmgsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKLQkJY29udHJvbC0+b25f
c3RybV9xID0gMDsKLQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0JCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+d2hvRnJvbSk7Ci0JCQlpZiAoY29udHJvbC0+ZGF0YSkg
ewotCQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCQljb250cm9sLT5kYXRhID0g
TlVMTDsKLQkJCX0KLQkJfQotCQkvKiBSZWFzc2VtYmx5IGZyZWU/ICovCi0JCVRBSUxRX0ZPUkVB
Q0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQlUQUlM
UV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7Ci0JCQlpZiAoY2hrLT5k
YXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJY2hrLT5kYXRhID0gTlVM
TDsKLQkJCX0KLQkJCWlmIChjaGstPmhvbGRzX2tleV9yZWYpCi0JCQkJc2N0cF9hdXRoX2tleV9y
ZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOwotCQkJc2N0cF9m
cmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwotCQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOwot
CQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJfQotCQkvKgotCQkgKiBXZSBkb24ndCBm
cmVlIHRoZSBhZGRyZXNzIGhlcmUKLQkJICogc2luY2UgYWxsIHRoZSBuZXQncyB3ZXJlIGZyZWVk
Ci0JCSAqIGFib3ZlLgotCQkgKi8KLQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7Ci0J
CQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKLQkJfQotCX0KLX0KLQotI2lmZGVm
IF9fUGFuZGFfXwotdm9pZCBwYW5kYV93YWtldXBfc29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvKTsK
LSNlbmRpZgotCi0vKi0KLSAqIEZyZWUgdGhlIGFzc29jaWF0aW9uIGFmdGVyIHVuLWhhc2hpbmcg
dGhlIHJlbW90ZSBwb3J0LiBUaGlzCi0gKiBmdW5jdGlvbiBBTFdBWVMgcmV0dXJucyBob2xkaW5n
IE5PIExPQ0sgb24gdGhlIHN0Y2IuIEl0IERPRVMKLSAqIGV4cGVjdCB0aGF0IHRoZSBpbnB1dCB0
byB0aGlzIGZ1bmN0aW9uIElTIGEgbG9ja2VkIFRDQi4KLSAqIEl0IHdpbGwgcmV0dXJuIDAsIGlm
IGl0IGRpZCBOT1QgZGVzdHJveSB0aGUgYXNzb2NpYXRpb24gKGluc3RlYWQKLSAqIGl0IHVubG9j
a3MgaXQuIEl0IHdpbGwgcmV0dXJuIE5PTi16ZXJvIGlmIGl0IGVpdGhlciBkZXN0cm95ZWQgdGhl
Ci0gKiBhc3NvY2lhdGlvbiBPUiB0aGUgYXNzb2NpYXRpb24gaXMgYWxyZWFkeSBkZXN0cm95ZWQu
Ci0gKi8KLWludAotc2N0cF9mcmVlX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgaW50IGZyb21faW5wY2JmcmVlLCBpbnQgZnJvbV9sb2NhdGlvbikK
LXsKLQlpbnQgaTsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsICpubmV0OwotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkciwgKm5hZGRyOwot
CXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7Ci0Jc3RydWN0IHNjdHBfYXNjb25m
X2FkZHIgKmFwYXJhbSwgKm5hcGFyYW07Ci0Jc3RydWN0IHNjdHBfYXNjb25mX2FjayAqYWFjaywg
Km5hYWNrOwotCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0ICpzdHJyc3QsICpuc3RycnN0
OwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpzcSwgKm5zcTsKLQlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3AsICpuc3A7Ci0Jc2N0cF9zaGFyZWRrZXlfdCAqc2hhcmVk
X2tleSwgKm5zaGFyZWRfa2V5OwotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JLyogZmlyc3QsIGxl
dHMgcHVyZ2UgdGhlIGVudHJ5IGZyb20gdGhlIGhhc2ggdGFibGUuICovCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0Jc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLSNlbmRpZgot
Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBzdGNiLCA2
KTsKLSNlbmRpZgotCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKLSNpZmRlZiBTQ1RQX0xP
R19DTE9TSU5HCi0JCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCA3KTsKLSNlbmRpZgotCQkv
KiB0aGVyZSBpcyBubyBhc29jLCByZWFsbHkgVFNOSCA6LTAgKi8KLQkJcmV0dXJuICgxKTsKLQl9
Ci0JaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihz
dGNiLT5hc29jLmFsdGVybmF0ZSk7Ci0JCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKLQl9
Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAvKiBURU1QOiBtb3ZlZCB0byBiZWxvdyAqLwotICAg
ICAgICAvKiBURU1QIENPREUgKi8KLQlpZiAoc3RjYi0+ZnJlZWRfZnJvbV93aGVyZSA9PSAwKSB7
Ci0JCS8qIE9ubHkgcmVjb3JkIHRoZSBmaXJzdCBwbGFjZSBmcmVlIGhhcHBlbmVkIGZyb20gKi8K
LQkJc3RjYi0+ZnJlZWRfZnJvbV93aGVyZSA9IGZyb21fbG9jYXRpb247Ci0JfQotICAgICAgICAv
KiBURU1QIENPREUgKi8KLSNlbmRpZgotCi0JYXNvYyA9ICZzdGNiLT5hc29jOwotCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8Ci0JICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpCi0JCS8qIG5vdGhp
bmcgYXJvdW5kICovCi0JCXNvID0gTlVMTDsKLQllbHNlCi0JCXNvID0gaW5wLT5zY3RwX3NvY2tl
dDsKLQotCS8qCi0JICogV2UgdXNlZCB0aW1lciBiYXNlZCBmcmVlaW5nIGlmIGEgcmVhZGVyIG9y
IHdyaXRlciBpcyBpbiB0aGUgd2F5LgotCSAqIFNvIHdlIGZpcnN0IGNoZWNrIGlmIHdlIGFyZSBh
Y3R1YWxseSBiZWluZyBjYWxsZWQgZnJvbSBhIHRpbWVyLAotCSAqIGlmIHNvIHdlIGFib3J0IGVh
cmx5IGlmIGEgcmVhZGVyIG9yIHdyaXRlciBpcyBzdGlsbCBpbiB0aGUgd2F5LgotCSAqLwotCWlm
ICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpICYmCi0J
ICAgIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSkgewotCQkvKgotCQkgKiBp
cyBpdCB0aGUgdGltZXIgZHJpdmluZyB1cz8gaWYgc28gYXJlIHRoZSByZWFkZXIvd3JpdGVycwot
CQkgKiBnb25lPwotCQkgKi8KLQkJaWYgKHN0Y2ItPmFzb2MucmVmY250KSB7Ci0JCQkvKiBub3Bl
LCByZWFkZXIgb3Igd3JpdGVyIGluIHRoZSB3YXkgKi8KLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwpOwotCQkJLyogbm8gYXNvYyBk
ZXN0cm95ZWQgKi8KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLSNpZmRlZiBTQ1RQX0xPR19D
TE9TSU5HCi0JCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgc3RjYiwgOCk7Ci0jZW5kaWYKLQkJCXJl
dHVybiAoMCk7Ci0JCX0KLQl9Ci0JLyogbm93IGNsZWFuIHVwIGFueSBvdGhlciB0aW1lcnMgKi8K
LQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRhY2tfdGltZXIudGltZXIpOwotCWFz
b2MtPmRhY2tfdGltZXIuc2VsZiA9IE5VTEw7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZh
c29jLT5zdHJyZXNldF90aW1lci50aW1lcik7Ci0JLyotCi0JICogRm9yIHN0cmVhbSByZXNldCB3
ZSBkb24ndCBibGFzdCB0aGlzIHVubGVzcwotCSAqIGl0IGlzIGEgc3RyLXJlc2V0IHRpbWVyLCBp
dCBtaWdodCBiZSB0aGUKLQkgKiBmcmVlLWFzb2MgdGltZXIgd2hpY2ggd2UgRE9OJ1Qgd2FudCB0
bwotCSAqIGRpc3R1cmIuCi0JICovCi0JaWYgKGFzb2MtPnN0cnJlc2V0X3RpbWVyLnR5cGUgPT0g
U0NUUF9USU1FUl9UWVBFX1NUUlJFU0VUKQotCQlhc29jLT5zdHJyZXNldF90aW1lci5zZWxmID0g
TlVMTDsKLQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmFzY29uZl90aW1lci50aW1l
cik7Ci0JYXNvYy0+YXNjb25mX3RpbWVyLnNlbGYgPSBOVUxMOwotCSh2b2lkKVNDVFBfT1NfVElN
RVJfU1RPUCgmYXNvYy0+YXV0b2Nsb3NlX3RpbWVyLnRpbWVyKTsKLQlhc29jLT5hdXRvY2xvc2Vf
dGltZXIuc2VsZiA9IE5VTEw7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5zaHV0
X2d1YXJkX3RpbWVyLnRpbWVyKTsKLQlhc29jLT5zaHV0X2d1YXJkX3RpbWVyLnNlbGYgPSBOVUxM
OwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50
aW1lcik7Ci0JYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci5zZWxmID0gTlVMTDsKLQkvKiBNb2Jp
bGl0eSBhZGFwdGF0aW9uICovCi0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kZWxl
dGVfcHJpbV90aW1lci50aW1lcik7Ci0JYXNvYy0+ZGVsZXRlX3ByaW1fdGltZXIuc2VsZiA9IE5V
TEw7Ci0JVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZuZXQtPnJ4dF90aW1lci50aW1lcik7Ci0JCW5ldC0+cnh0
X3RpbWVyLnNlbGYgPSBOVUxMOwotCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+cG10
dV90aW1lci50aW1lcik7Ci0JCW5ldC0+cG10dV90aW1lci5zZWxmID0gTlVMTDsKLQkJKHZvaWQp
U0NUUF9PU19USU1FUl9TVE9QKCZuZXQtPmhiX3RpbWVyLnRpbWVyKTsKLQkJbmV0LT5oYl90aW1l
ci5zZWxmID0gTlVMTDsKLQl9Ci0JLyogTm93IHRoZSByZWFkIHF1ZXVlIG5lZWRzIHRvIGJlIGNs
ZWFuZWQgdXAgKG9ubHkgb25jZSkgKi8KLQlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NU
QVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSA9PSAwKSB7Ci0JCXN0Y2ItPmFzb2Muc3RhdGUgfD0gU0NU
UF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRDsKLQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0J
CVRBSUxRX0ZPUkVBQ0goc3EsICZpbnAtPnJlYWRfcXVldWUsIG5leHQpIHsKLQkJCWlmIChzcS0+
c3RjYiA9PSBzdGNiKSB7Ci0JCQkJc3EtPmRvX25vdF9yZWZfc3RjYiA9IDE7Ci0JCQkJc3EtPnNp
bmZvX2N1bXRzbiA9IHN0Y2ItPmFzb2MuY3VtdWxhdGl2ZV90c247Ci0JCQkJLyogSWYgdGhlcmUg
aXMgbm8gZW5kLCB0aGVyZSBuZXZlcgotCQkJCSAqIHdpbGwgYmUgbm93LgotCQkJCSAqLwotCQkJ
CWlmIChzcS0+ZW5kX2FkZGVkID09IDApIHsKLQkJCQkJLyogSGVsZCBmb3IgUEQtQVBJIGNsZWFy
IHRoYXQuICovCi0JCQkJCXNxLT5wZGFwaV9hYm9ydGVkID0gMTsKLQkJCQkJc3EtPmhlbGRfbGVu
Z3RoID0gMDsKLQkJCQkJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfUERBUElFVk5UKSAmJiAoc28gIT0gTlVMTCkpIHsKLQkJCQkJCS8qCi0JCQkJ
CQkgKiBOZWVkIHRvIGFkZCBhIFBELUFQSSBhYm9ydGVkIGluZGljYXRpb24uCi0JCQkJCQkgKiBT
ZXR0aW5nIHRoZSBjb250cm9sX3BkYXBpIGFzc3VyZXMgdGhhdCBpdCB3aWxsCi0JCQkJCQkgKiBi
ZSBhZGRlZCByaWdodCBhZnRlciB0aGlzIG1zZy4KLQkJCQkJCSAqLwotCQkJCQkJdWludDMyX3Qg
c3Ryc2VxOwotCQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3E7Ci0JCQkJCQlzdHJz
ZXEgPSAoc3EtPnNpbmZvX3N0cmVhbSA8PCAxNikgfCAoc3EtPm1pZCAmIDB4MDAwMGZmZmYpOwot
CQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNB
VElPTiwKLQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLAotCQkJCQkJICAgICAgICAgICAgICAg
IFNDVFBfUEFSVElBTF9ERUxJVkVSWV9BQk9SVEVELAotCQkJCQkJICAgICAgICAgICAgICAgICh2
b2lkICopJnN0cnNlcSwKLQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1NPX0xPQ0tFRCk7Ci0J
CQkJCQlzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkgPSBOVUxMOwotCQkJCQl9Ci0JCQkJfQotCQkJ
CS8qIEFkZCBhbiBlbmQgdG8gd2FrZSB0aGVtICovCi0JCQkJc3EtPmVuZF9hZGRlZCA9IDE7Ci0J
CQl9Ci0JCX0KLQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJaWYgKHN0Y2ItPmJsb2Nr
X2VudHJ5KSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFQ09OTlJFU0VUKTsKLQkJCXN0Y2ItPmJsb2NrX2VudHJ5LT5lcnJvciA9
IEVDT05OUkVTRVQ7Ci0JCQlzdGNiLT5ibG9ja19lbnRyeSA9IE5VTEw7Ci0JCX0KLQl9Ci0JaWYg
KChzdGNiLT5hc29jLnJlZmNudCkgfHwgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0lO
X0FDQ0VQVF9RVUVVRSkpIHsKLQkJLyogU29tZW9uZSBob2xkcyBhIHJlZmVyZW5jZSBPUiB0aGUg
c29ja2V0IGlzIHVuYWNjZXB0ZWQgeWV0LgotCQkqLwotCQlpZiAoKHN0Y2ItPmFzb2MucmVmY250
KSAgfHwKLQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkgfHwKLQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkpIHsKLQkJCXN0Y2ItPmFzb2Muc3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FV
RVVFOwotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwg
c3RjYiwgTlVMTCk7Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAotCQkgICAgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkKLQkJCS8qIG5vdGhp
bmcgYXJvdW5kICovCi0JCQlzbyA9IE5VTEw7Ci0JCWlmIChzbykgewotCQkJLyogV2FrZSBhbnkg
cmVhZGVyL3dyaXRlcnMgKi8KLQkJCXNjdHBfc29yd2FrZXVwKGlucCwgc28pOwotCQkJc2N0cF9z
b3d3YWtldXAoaW5wLCBzbyk7Ci0JCX0KLQotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJc2N0
cF9sb2dfY2xvc2luZyhpbnAsIHN0Y2IsIDkpOwotI2VuZGlmCi0JCS8qIG5vIGFzb2MgZGVzdHJv
eWVkICovCi0JCXJldHVybiAoMCk7Ci0JfQotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgc3RjYiwgMTApOwotI2VuZGlmCi0JLyogV2hlbiBJIHJlYWNoIGhl
cmUsIG5vIG90aGVycyB3YW50Ci0JICogdG8ga2lsbCB0aGUgYXNzb2MgeWV0Li4gYW5kIEkgb3du
Ci0JICogdGhlIGxvY2suIE5vdyBpdHMgcG9zc2libGUgYW4gYWJvcnQKLQkgKiBjb21lcyBpbiB3
aGVuIEkgZG8gdGhlIGxvY2sgZXhjaGFuZ2UKLQkgKiBiZWxvdyB0byBncmFiIGFsbCB0aGUgbG9j
a3MgdG8gZG8KLQkgKiB0aGUgZmluYWwgdGFrZSBvdXQuIHRvIHByZXZlbnQgdGhpcwotCSAqIHdl
IGluY3JlbWVudCB0aGUgY291bnQsIHdoaWNoIHdpbGwKLQkgKiBzdGFydCBhIHRpbWVyIGFuZCBi
bG93IG91dCBhYm92ZSB0aHVzCi0JICogYXNzdXJpbmcgdXMgdGhhdCB3ZSBob2xkIGV4Y2x1c2l2
ZQotCSAqIGtpbGxpbmcgb2YgdGhlIGFzb2MuIE5vdGUgdGhhdAotCSAqIGFmdGVyIGdldHRpbmcg
YmFjayB0aGUgVENCIGxvY2sKLQkgKiB3ZSB3aWxsIGdvIGFoZWFkIGFuZCBpbmNyZW1lbnQgdGhl
Ci0JICogY291bnRlciBiYWNrIHVwIGFuZCBzdG9wIGFueSB0aW1lcgotCSAqIGEgcGFzc2luZyBz
dHJhbmdlciBtYXkgaGF2ZSBzdGFydGVkIDotUwotCSAqLwotCWlmIChmcm9tX2lucGNiZnJlZSA9
PSBTQ1RQX05PUk1BTF9QUk9DKSB7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7Ci0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9JTkZPX1dMT0NL
KCk7Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JfQot
CS8qIERvdWJsZSBjaGVjayB0aGUgR09ORSBmbGFnICovCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkKLQkJLyogbm90aGluZyBhcm91bmQgKi8K
LQkJc28gPSBOVUxMOwotCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkpIHsKLQkJLyoKLQkJICogRm9yIFRDUCB0eXBlIHdlIG5lZWQgc3BlY2lhbCBoYW5kbGlu
ZyB3aGVuIHdlIGFyZQotCQkgKiBjb25uZWN0ZWQuIFdlIGFsc28gaW5jbHVkZSB0aGUgcGVlbCdl
ZCBvZmYgb25lcyB0by4KLQkJICovCi0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19DT05ORUNURUQpIHsKLQkJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1Nf
Q09OTkVDVEVEOwotCQkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dBU19DT05O
RUNURUQ7Ci0JCQlpZiAoc28pIHsKLQkJCQlTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwotCQkJ
CWlmIChzby0+c29fcmN2LnNiX2NjID09IDApIHsKLQkJCQkJc28tPnNvX3N0YXRlICY9IH4oU1Nf
SVNDT05ORUNUSU5HIHwKLQkJCQkJCQkgIFNTX0lTRElTQ09OTkVDVElORyB8Ci0JCQkJCQkJICBT
U19JU0NPTkZJUk1JTkcgfAotCQkJCQkJCSAgU1NfSVNDT05ORUNURUQpOwotCQkJCX0KLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLQkJCQlzb2NhbnRyY3Ztb3JlKHNvKTsKLSNlbHNlCi0JCQkJc29j
YW50cmN2bW9yZV9sb2NrZWQoc28pOwotI2VuZGlmCi0JCQkJc29jYW50c2VuZG1vcmUoc28pOwot
CQkJCXNjdHBfc293d2FrZXVwKGlucCwgc28pOwotCQkJCXNjdHBfc29yd2FrZXVwKGlucCwgc28p
OwotCQkJCVNDVFBfU09XQUtFVVAoc28pOwotCQkJfQotCQl9Ci0JfQotCi0JLyogTWFrZSBpdCBp
bnZhbGlkIHRvbywgdGhhdCB3YXkgaWYgaXRzCi0JICogYWJvdXQgdG8gcnVuIGl0IHdpbGwgYWJv
cnQgYW5kIHJldHVybi4KLQkgKi8KLQkvKiByZS1pbmNyZW1lbnQgdGhlIGxvY2sgKi8KLQlpZiAo
ZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgewotCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQl9Ci0JaWYgKHN0Y2ItPmFzb2MucmVmY250KSB7Ci0J
CXN0Y2ItPmFzb2Muc3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOwotCQlzY3Rw
X3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5wLCBzdGNiLCBOVUxMKTsK
LQkJaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsKLQkJCVNDVFBfSU5Q
X0lORk9fV1VOTE9DSygpOwotCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQl9Ci0JCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JYXNvYy0+c3RhdGUgPSAwOwot
CWlmIChpbnAtPnNjdHBfdGNiaGFzaCkgewotCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmhh
c2gpOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgewotCQlMSVNUX1JFTU9W
RShzdGNiLCBzY3RwX3RjYmFzb2NpZGhhc2gpOwotCX0KLQkvKiBOb3cgbGV0cyByZW1vdmUgaXQg
ZnJvbSB0aGUgbGlzdCBvZiBBTEwgYXNzb2NpYXRpb25zIGluIHRoZSBFUCAqLwotCUxJU1RfUkVN
T1ZFKHN0Y2IsIHNjdHBfdGNibGlzdCk7Ci0JaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9S
TUFMX1BST0MpIHsKLQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOwotCX0KLQkvKiBwdWxsIGZyb20gdnRhZyBoYXNoICovCi0JTElTVF9SRU1PVkUoc3Rj
Yiwgc2N0cF9hc29jcyk7Ci0Jc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdChhc29jLT5teV92dGFn
LCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdnRhZ190aW1lX3dhaXQpLAotCQkJCSAgaW5wLT5zY3Rw
X2xwb3J0LCBzdGNiLT5ycG9ydCk7Ci0KLQkvKiBOb3cgcmVzdG9wIHRoZSB0aW1lcnMgdG8gYmUg
c3VyZQotCSAqIHRoaXMgaXMgcGFyYW5vaWEgYXQgaXMgZmluZXN0IQotCSAqLwotCSh2b2lkKVND
VFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIpOwotCSh2b2lkKVND
VFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+ZGFja190aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9P
U19USU1FUl9TVE9QKCZhc29jLT5zdHJyZXNldF90aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9P
U19USU1FUl9TVE9QKCZhc29jLT5hc2NvbmZfdGltZXIudGltZXIpOwotCSh2b2lkKVNDVFBfT1Nf
VElNRVJfU1RPUCgmYXNvYy0+c2h1dF9ndWFyZF90aW1lci50aW1lcik7Ci0JKHZvaWQpU0NUUF9P
U19USU1FUl9TVE9QKCZhc29jLT5hdXRvY2xvc2VfdGltZXIudGltZXIpOwotCSh2b2lkKVNDVFBf
T1NfVElNRVJfU1RPUCgmYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50aW1lcik7Ci0JVEFJTFFf
Rk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKLQkJKHZvaWQpU0NUUF9PU19U
SU1FUl9TVE9QKCZuZXQtPnJ4dF90aW1lci50aW1lcik7Ci0JCSh2b2lkKVNDVFBfT1NfVElNRVJf
U1RPUCgmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKTsKLQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9Q
KCZuZXQtPmhiX3RpbWVyLnRpbWVyKTsKLQl9Ci0KLQlhc29jLT5zdHJyZXNldF90aW1lci50eXBl
ID0gU0NUUF9USU1FUl9UWVBFX05PTkU7Ci0JLyoKLQkgKiBUaGUgY2h1bmsgbGlzdHMgYW5kIHN1
Y2ggU0hPVUxEIGJlIGVtcHR5IGJ1dCB3ZSBjaGVjayB0aGVtIGp1c3QKLQkgKiBpbiBjYXNlLgot
CSAqLwotCS8qIGFueXRoaW5nIG9uIHRoZSB3aGVlbCBuZWVkcyB0byBiZSByZW1vdmVkICovCi0J
Zm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVhbW91dGNudDsgaSsrKSB7Ci0JCXN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQgKm91dHM7Ci0KLQkJb3V0cyA9ICZhc29jLT5zdHJtb3V0W2ldOwotCQkvKiBu
b3cgY2xlYW4gdXAgYW55IGNodW5rcyBoZXJlICovCi0JCVRBSUxRX0ZPUkVBQ0hfU0FGRShzcCwg
Jm91dHMtPm91dHF1ZXVlLCBuZXh0LCBuc3ApIHsKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmFz
b2MtPnN0cmVhbV9xdWV1ZV9jbnQsIDEpOwotCQkJVEFJTFFfUkVNT1ZFKCZvdXRzLT5vdXRxdWV1
ZSwgc3AsIG5leHQpOwotCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVf
ZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgb3V0cywgc3AsIDApOwotCQkJc2N0cF9mcmVlX3NwYnVm
c3BhY2Uoc3RjYiwgYXNvYywgc3ApOwotCQkJaWYgKHNwLT5kYXRhKSB7Ci0JCQkJaWYgKHNvKSB7
Ci0JCQkJCS8qIFN0aWxsIGFuIG9wZW4gc29ja2V0IC0gcmVwb3J0ICovCi0JCQkJCXNjdHBfdWxw
X25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQX0ZBSUwsIHN0Y2IsCi0JCQkJCSAgICAgICAg
ICAgICAgICAwLCAodm9pZCAqKXNwLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJfQotCQkJCWlmIChz
cC0+ZGF0YSkgewotCQkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOwotCQkJCQlzcC0+ZGF0YSA9
IE5VTEw7Ci0JCQkJCXNwLT50YWlsX21idWYgPSBOVUxMOwotCQkJCQlzcC0+bGVuZ3RoID0gMDsK
LQkJCQl9Ci0JCQl9Ci0JCQlpZiAoc3AtPm5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRk
cihzcC0+bmV0KTsKLQkJCQlzcC0+bmV0ID0gTlVMTDsKLQkJCX0KLQkJCXNjdHBfZnJlZV9hX3N0
cm1vcShzdGNiLCBzcCwgU0NUUF9TT19MT0NLRUQpOwotCQl9Ci0JfQotCS8qc2FfaWdub3JlIEZS
RUVEX01FTU9SWSovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKHN0cnJzdCwgJmFzb2MtPnJlc2V0SGVh
ZCwgbmV4dF9yZXNwLCBuc3RycnN0KSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+cmVzZXRIZWFk
LCBzdHJyc3QsIG5leHRfcmVzcCk7Ci0JCVNDVFBfRlJFRShzdHJyc3QsIFNDVFBfTV9TVFJFU0VU
KTsKLQl9Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKHNxLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1
ZSwgbmV4dCwgbnNxKSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1
ZSwgc3EsIG5leHQpOwotCQlpZiAoc3EtPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShzcS0+ZGF0
YSk7Ci0JCQlzcS0+ZGF0YSA9IE5VTEw7Ci0JCX0KLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNx
LT53aG9Gcm9tKTsKLQkJc3EtPndob0Zyb20gPSBOVUxMOwotCQlzcS0+c3RjYiA9IE5VTEw7Ci0J
CS8qIEZyZWUgdGhlIGN0bCBlbnRyeSAqLwotCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBzcSk7
Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQotCVRBSUxRX0ZPUkVBQ0hfU0FGRShj
aGssICZhc29jLT5mcmVlX2NodW5rcywgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCVRBSUxRX1JFTU9W
RSgmYXNvYy0+ZnJlZV9jaHVua3MsIGNoaywgc2N0cF9uZXh0KTsKLQkJaWYgKGNoay0+ZGF0YSkg
ewotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQl9
Ci0JCWlmIChjaGstPmhvbGRzX2tleV9yZWYpCi0JCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3Rj
YiwgY2hrLT5hdXRoX2tleWlkLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCVNDVFBfWk9ORV9GUkVFKFND
VFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsKLQkJU0NUUF9ERUNSX0NIS19DT1VO
VCgpOwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVu
a3MpLCAxKTsKLQkJYXNvYy0+ZnJlZV9jaHVua19jbnQtLTsKLQkJLypzYV9pZ25vcmUgRlJFRURf
TUVNT1JZKi8KLQl9Ci0JLyogcGVuZGluZyBzZW5kIHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLwot
CVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5j
aGspIHsKLQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9x
dWV1ZXMgPiAwKSB7Ci0JCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nf
b25fcXVldWVzLS07Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQl9IGVsc2UgewotCQkJcGFuaWMoIk5v
IGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQpOwot
I2VuZGlmCi0JCX0KLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBf
bmV4dCk7Ci0JCWlmIChjaGstPmRhdGEpIHsKLQkJCWlmIChzbykgewotCQkJCS8qIFN0aWxsIGEg
c29ja2V0PyAqLwotCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJ
TCwgc3RjYiwKLQkJCQkgICAgICAgICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0J
CQl9Ci0JCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0J
CQkJY2hrLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJfQotCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVm
KQotCQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9T
T19MT0NLRUQpOwotCQlpZiAoY2hrLT53aG9UbykgewotCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KGNoay0+d2hvVG8pOwotCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0JCX0KLQkJU0NUUF9aT05FX0ZS
RUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQlTQ1RQX0RFQ1JfQ0hL
X0NPVU5UKCk7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQotCS8qIHNlbnQgcXVl
dWUgU0hPVUxEIGJlIGVtcHR5ICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNl
bnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgewotCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFU
QUdSQU1fTlJfQUNLRUQpIHsKLQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lk
XS5jaHVua3Nfb25fcXVldWVzID4gMCkgewotCQkJCWFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0
YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMtLTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQl9IGVsc2Ug
ewotCQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1LiIsIGNoay0+
cmVjLmRhdGEuc2lkKTsKLSNlbmRpZgotCQkJfQotCQl9Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+
c2VudF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQlpZiAo
c28pIHsKLQkJCQkvKiBTdGlsbCBhIHNvY2tldD8gKi8KLQkJCQlzY3RwX3VscF9ub3RpZnkoU0NU
UF9OT1RJRllfU0VOVF9ER19GQUlMLCBzdGNiLAotCQkJCSAgICAgICAgICAgICAgICAwLCBjaGss
IFNDVFBfU09fTE9DS0VEKTsKLQkJCX0KLQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJfQotCQl9Ci0JCWlm
IChjaGstPmhvbGRzX2tleV9yZWYpCi0JCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hr
LT5hdXRoX2tleWlkLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihj
aGstPndob1RvKTsKLQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1
bmspLCBjaGspOwotCQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7Ci0JCS8qc2FfaWdub3JlIEZSRUVE
X01FTU9SWSovCi0JfQotI2lmZGVmIElOVkFSSUFOVFMKLQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+
YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmNo
dW5rc19vbl9xdWV1ZXMgPiAwKSB7Ci0JCQlwYW5pYygiJXUgY2h1bmtzIGxlZnQgZm9yIHN0cmVh
bSAldS4iLCBzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcywgaSk7Ci0JCX0K
LQl9Ci0jZW5kaWYKLQkvKiBjb250cm9sIHF1ZXVlIE1BWSBub3QgYmUgZW1wdHkgKi8KLQlUQUlM
UV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQs
IG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywg
c2N0cF9uZXh0KTsKLQkJaWYgKGNoay0+ZGF0YSkgewotCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0
YSk7Ci0JCQljaGstPmRhdGEgPSBOVUxMOwotCQl9Ci0JCWlmIChjaGstPmhvbGRzX2tleV9yZWYp
Ci0JCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlkLCBTQ1RQX1NP
X0xPQ0tFRCk7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJU0NUUF9a
T05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwotCQlTQ1RQX0RF
Q1JfQ0hLX0NPVU5UKCk7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JfQotCS8qIEFT
Q09ORiBxdWV1ZSBNQVkgbm90IGJlIGVtcHR5ICovCi0JVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywg
JmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJVEFJTFFfUkVN
T1ZFKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQlpZiAoY2hr
LT5kYXRhKSB7Ci0JCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCWNoay0+ZGF0YSA9IE5V
TEw7Ci0JCX0KLQkJaWYgKGNoay0+aG9sZHNfa2V5X3JlZikKLQkJCXNjdHBfYXV0aF9rZXlfcmVs
ZWFzZShzdGNiLCBjaGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKLQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwotCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9jaHVuayksIGNoayk7Ci0JCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKLQkJLypz
YV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9Ci0JaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXkpIHsK
LQkJU0NUUF9GUkVFKGFzb2MtPm1hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCQlhc29jLT5t
YXBwaW5nX2FycmF5ID0gTlVMTDsKLQl9Ci0JaWYgKGFzb2MtPm5yX21hcHBpbmdfYXJyYXkpIHsK
LQkJU0NUUF9GUkVFKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCQlhc29j
LT5ucl9tYXBwaW5nX2FycmF5ID0gTlVMTDsKLQl9Ci0JLyogdGhlIHN0cmVhbSBvdXRzICovCi0J
aWYgKGFzb2MtPnN0cm1vdXQpIHsKLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9T
VFJNTyk7Ci0JCWFzb2MtPnN0cm1vdXQgPSBOVUxMOwotCX0KLQlhc29jLT5zdHJtX3JlYWxvdXRz
aXplID0gYXNvYy0+c3RyZWFtb3V0Y250ID0gMDsKLQlpZiAoYXNvYy0+c3RybWluKSB7Ci0JCWZv
ciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1pbmNudDsgaSsrKSB7Ci0JCQlzY3RwX2NsZWFuX3Vw
X3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybWluW2ldLmlucXVldWUpOwotCQkJc2N0cF9jbGVhbl91
cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1pbltpXS51bm9faW5xdWV1ZSk7Ci0JCX0KLQkJU0NU
UF9GUkVFKGFzb2MtPnN0cm1pbiwgU0NUUF9NX1NUUk1JKTsKLQkJYXNvYy0+c3RybWluID0gTlVM
TDsKLQl9Ci0JYXNvYy0+c3RyZWFtaW5jbnQgPSAwOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShuZXQs
ICZhc29jLT5uZXRzLCBzY3RwX25leHQsIG5uZXQpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCWlm
IChTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpID09IDApIHsKLQkJCXBhbmljKCJubyBu
ZXQncyBsZWZ0IGFsbG9jJ2VkLCBvciBsaXN0IHBvaW50cyB0byBpdHNlbGYiKTsKLQkJfQotI2Vu
ZGlmCi0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+bmV0cywgbmV0LCBzY3RwX25leHQpOwotCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIobmV0KTsKLQl9Ci0JTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZh
c29jLT5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnMsIHNjdHBfbnh0X2FkZHIsIG5hZGRyKSB7Ci0JCS8q
c2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JCXNjdHBfcmVtb3ZlX2xhZGRyKGxhZGRyKTsKLQl9
Ci0KLQkvKiBwZW5kaW5nIGFzY29uZiAoYWRkcmVzcykgcGFyYW1ldGVycyAqLwotCVRBSUxRX0ZP
UkVBQ0hfU0FGRShhcGFyYW0sICZhc29jLT5hc2NvbmZfcXVldWUsIG5leHQsIG5hcGFyYW0pIHsK
LQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5hc2Nv
bmZfcXVldWUsIGFwYXJhbSwgbmV4dCk7Ci0JCVNDVFBfRlJFRShhcGFyYW0sU0NUUF9NX0FTQ19B
RERSKTsKLQl9Ci0JVEFJTFFfRk9SRUFDSF9TQUZFKGFhY2ssICZhc29jLT5hc2NvbmZfYWNrX3Nl
bnQsIG5leHQsIG5hYWNrKSB7Ci0JCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCi0JCVRBSUxR
X1JFTU9WRSgmYXNvYy0+YXNjb25mX2Fja19zZW50LCBhYWNrLCBuZXh0KTsKLQkJaWYgKGFhY2st
PmRhdGEgIT0gTlVMTCkgewotCQkJc2N0cF9tX2ZyZWVtKGFhY2stPmRhdGEpOwotCQl9Ci0JCVND
VFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZl9hY2spLCBhYWNrKTsK
LQl9Ci0JLyogY2xlYW4gdXAgYXV0aCBzdHVmZiAqLwotCWlmIChhc29jLT5sb2NhbF9obWFjcykK
LQkJc2N0cF9mcmVlX2htYWNsaXN0KGFzb2MtPmxvY2FsX2htYWNzKTsKLQlpZiAoYXNvYy0+cGVl
cl9obWFjcykKLQkJc2N0cF9mcmVlX2htYWNsaXN0KGFzb2MtPnBlZXJfaG1hY3MpOwotCi0JaWYg
KGFzb2MtPmxvY2FsX2F1dGhfY2h1bmtzKQotCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGFzb2MtPmxv
Y2FsX2F1dGhfY2h1bmtzKTsKLQlpZiAoYXNvYy0+cGVlcl9hdXRoX2NodW5rcykKLQkJc2N0cF9m
cmVlX2NodW5rbGlzdChhc29jLT5wZWVyX2F1dGhfY2h1bmtzKTsKLQotCXNjdHBfZnJlZV9hdXRo
aW5mbygmYXNvYy0+YXV0aGluZm8pOwotCi0JTElTVF9GT1JFQUNIX1NBRkUoc2hhcmVkX2tleSwg
JmFzb2MtPnNoYXJlZF9rZXlzLCBuZXh0LCBuc2hhcmVkX2tleSkgewotCQlMSVNUX1JFTU9WRShz
aGFyZWRfa2V5LCBuZXh0KTsKLQkJc2N0cF9mcmVlX3NoYXJlZGtleShzaGFyZWRfa2V5KTsKLQkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9Ci0KLQkvKiBJbnNlcnQgbmV3IGl0ZW1zIGhl
cmUgOj4gKi8KLQotCS8qIEdldCByaWQgb2YgTE9DSyAqLwotCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQlTQ1RQX1RDQl9MT0NLX0RFU1RST1koc3RjYik7Ci0JU0NUUF9UQ0JfU0VORF9MT0NLX0RF
U1RST1koc3RjYik7Ci0JaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BST0MpIHsK
LQkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7Ci0JCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JfQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKSAvKiBURU1QIENPREUgKi8KLQlzdGNiLT5mcmVlZF9mcm9t
X3doZXJlID0gZnJvbV9sb2NhdGlvbjsKLSNlbmRpZgotI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURf
QVNPQ1MKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUp
IHsKLQkJLyogbm93IGNsZWFuIHVwIHRoZSB0YXNvYyBpdHNlbGYgKi8KLQkJU0NUUF9aT05FX0ZS
RUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOwotCQlTQ1RQX0RFQ1JfQVNP
Q19DT1VOVCgpOwotCX0gZWxzZSB7Ci0JCUxJU1RfSU5TRVJUX0hFQUQoJmlucC0+c2N0cF9hc29j
X2ZyZWVfbGlzdCwgc3RjYiwgc2N0cF90Y2JsaXN0KTsKLQl9Ci0jZWxzZQotCVNDVFBfWk9ORV9G
UkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsKLQlTQ1RQX0RFQ1JfQVNP
Q19DT1VOVCgpOwotI2VuZGlmCi0JaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9STUFMX1BS
T0MpIHsKLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05F
KSB7Ci0JCQkvKiBJZiBpdHMgTk9UIHRoZSBpbnBfZnJlZSBjYWxsaW5nIHVzIEFORAotCQkJICog
c2N0cF9jbG9zZSBhcyBiZWVuIGNhbGxlZCwgd2UKLQkJCSAqIGNhbGwgYmFjay4uLgotCQkJICov
Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkvKiBUaGlzIHdpbGwgc3RhcnQgdGhlIGtp
bGwgdGltZXIgKGlmIHdlIGFyZQotCQkJICogdGhlIGxhc3Qgb25lKSBzaW5jZSB3ZSBob2xkIGFu
IGluY3JlbWVudCB5ZXQuIEJ1dAotCQkJICogdGhpcyBpcyB0aGUgb25seSBzYWZlIHdheSB0byBk
byB0aGlzCi0JCQkgKiBzaW5jZSBvdGhlcndpc2UgaWYgdGhlIHNvY2tldCBjbG9zZXMKLQkJCSAq
IGF0IHRoZSBzYW1lIHRpbWUgd2UgYXJlIGhlcmUgd2UgbWlnaHQKLQkJCSAqIGNvbGxpZGUgaW4g
dGhlIGNsZWFudXAuCi0JCQkgKi8KLQkJCXNjdHBfaW5wY2JfZnJlZShpbnAsCi0JCQkJCVNDVFBf
RlJFRV9TSE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFLAotCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RM
WV9OT0NNUFNFVCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJZ290byBvdXRfb2Y7
Ci0JCX0gZWxzZSB7Ci0JCQkvKiBUaGUgc29ja2V0IGlzIHN0aWxsIG9wZW4uICovCi0JCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpbnApOwotCQl9Ci0JfQotCWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQ
X05PUk1BTF9QUk9DKSB7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0gb3V0X29mOgot
CS8qIGRlc3Ryb3llZCB0aGUgYXNvYyAqLwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTEpOwotI2VuZGlmCi0JcmV0dXJuICgxKTsKLX0KLQot
Ci0KLS8qCi0gKiBkZXRlcm1pbmUgaWYgYSBkZXN0aW5hdGlvbiBpcyAicmVhY2hhYmxlIiBiYXNl
ZCB1cG9uIHRoZSBhZGRyZXNzZXMgYm91bmQKLSAqIHRvIHRoZSBjdXJyZW50IGVuZHBvaW50IChl
LmcuIG9ubHkgdjQgb3IgdjYgY3VycmVudGx5IGJvdW5kKQotICovCi0vKgotICogRklYOiBpZiB3
ZSBhbGxvdyBhc3NvYy1sZXZlbCBiaW5keCgpLCB0aGVuIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQg
dG8gdXNlCi0gKiBhc3NvYyBsZXZlbCB2NC92NiBmbGFncywgYXMgdGhlIGFzc29jICptYXkqIG5v
dCBoYXZlIHRoZSBzYW1lIGFkZHJlc3MKLSAqIHR5cGVzIGJvdW5kIGFzIGl0cyBlbmRwb2ludAot
ICovCi1pbnQKLXNjdHBfZGVzdGluYXRpb25faXNfcmVhY2hhYmxlKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNvY2thZGRyICpkZXN0YWRkcikKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOwotCWludCBhbnN3ZXI7Ci0KLQkvKgotCSAqIE5vIGxvY2tzIGhlcmUsIHRoZSBUQ0IsIGlu
IGFsbCBjYXNlcyBpcyBhbHJlYWR5IGxvY2tlZCBhbmQgYW4KLQkgKiBhc3NvYyBpcyB1cC4gVGhl
cmUgaXMgZWl0aGVyIGEgSU5QIGxvY2sgYnkgdGhlIGNhbGxlciBhcHBsaWVkIChpbgotCSAqIGFz
Y29uZiBjYXNlIHdoZW4gZGVsZXRpbmcgYW4gYWRkcmVzcykgb3IgTk9UIGluIHRoZSBIQiBjYXNl
LAotCSAqIGhvd2V2ZXIgaWYgSEIgdGhlbiB0aGUgSU5QIGluY3JlbWVudCBpcyB1cCBhbmQgdGhl
IElOUCB3aWxsIG5vdAotCSAqIGJlIHJlbW92ZWQgKG9uIHRvcCBvZiB0aGUgZmFjdCB0aGF0IHdl
IGhhdmUgYSBUQ0IgbG9jaykuIFNvIHdlCi0JICogb25seSB3YW50IHRvIHJlYWQgdGhlIHNjdHBf
ZmxhZ3MsIHdoaWNoIGlzIGVpdGhlciBib3VuZC1hbGwgb3IKLQkgKiBub3QuLiBubyBwcm90ZWN0
aW9uIG5lZWRlZCBzaW5jZSBvbmNlIGFuIGFzc29jIGlzIHVwIHlvdSBjYW4ndCBiZQotCSAqIGNo
YW5naW5nIHlvdXIgYmluZGluZy4KLQkgKi8KLQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCWlmIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKiBpZiBib3Vu
ZCBhbGwsIGRlc3RpbmF0aW9uIGlzIG5vdCByZXN0cmljdGVkICovCi0JCS8qCi0JCSAqIFJSUzog
UXVlc3Rpb24gZHVyaW5nIGxvY2sgd29yazogSXMgdGhpcyBjb3JyZWN0PyBJZiB5b3UKLQkJICog
YXJlIGJvdW5kLWFsbCB5b3Ugc3RpbGwgbWlnaHQgbmVlZCB0byBvYmV5IHRoZSBWNC0tVjYKLQkJ
ICogZmxhZ3M/Pz8gSU1PIHRoaXMgYm91bmQtYWxsIHN0dWZmIG5lZWRzIHRvIGJlIHJlbW92ZWQh
Ci0JCSAqLwotCQlyZXR1cm4gKDEpOwotCX0KLQkvKiBOT1RFOiBhbGwgInNjb3BlIiBjaGVja3Mg
YXJlIGRvbmUgd2hlbiBsb2NhbCBhZGRyZXNzZXMgYXJlIGFkZGVkICovCi0Jc3dpdGNoIChkZXN0
YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotI2lmICEo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCWFuc3dlciA9IGlucC0+aW5w
X3ZmbGFnICYgSU5QX0lQVjY7Ci0jZWxzZQotCQlhbnN3ZXIgPSBpbnAtPmlwX2lucC5pbnAuaW5w
X3ZmbGFnICYgSU5QX0lQVjY7Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVU
Ci0JY2FzZSBBRl9JTkVUOgotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykpCi0JCWFuc3dlciA9IGlucC0+aW5wX3ZmbGFnICYgSU5QX0lQVjQ7Ci0jZWxzZQotCQlhbnN3
ZXIgPSBpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICYgSU5QX0lQVjQ7Ci0jZW5kaWYKLQkJYnJl
YWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2FzZSBBRl9DT05OOgot
CQlhbnN3ZXIgPSBpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnICYgSU5QX0NPTk47Ci0JCWJyZWFr
OwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogaW52YWxpZCBmYW1pbHksIHNvIGl0J3MgdW5yZWFj
aGFibGUgKi8KLQkJYW5zd2VyID0gMDsKLQkJYnJlYWs7Ci0JfQotCXJldHVybiAoYW5zd2VyKTsK
LX0KLQotLyoKLSAqIHVwZGF0ZSB0aGUgaW5wX3ZmbGFncyBvbiBhbiBlbmRwb2ludAotICovCi1z
dGF0aWMgdm9pZAotc2N0cF91cGRhdGVfZXBfdmZsYWcoc3RydWN0IHNjdHBfaW5wY2IgKmlucCkK
LXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQkvKiBmaXJzdCBjbGVhciB0aGUgZmxh
ZyAqLwotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JaW5wLT5p
bnBfdmZsYWcgPSAwOwotI2Vsc2UKLQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnID0gMDsKLSNl
bmRpZgotCS8qIHNldCB0aGUgZmxhZyBiYXNlZCBvbiBhZGRyZXNzZXMgb24gdGhlIGVwIGxpc3Qg
Ki8KLQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9h
ZGRyKSB7Ci0JCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19QQ0IxLCAiJXM6IE5VTEwgaWZhXG4iLAotCQkJCV9fZnVuY19fKTsKLQkJCWNvbnRpbnVlOwot
CQl9Ci0KLQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxF
VEVEKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVUNjoKLSNpZiAhKGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCQkJaW5wLT5pbnBfdmZsYWcgfD0g
SU5QX0lQVjY7Ci0jZWxzZQotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBW
NjsKLSNlbmRpZgotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5F
VDoKLSNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCQkJaW5wLT5p
bnBfdmZsYWcgfD0gSU5QX0lQVjQ7Ci0jZWxzZQotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92Zmxh
ZyB8PSBJTlBfSVBWNDsKLSNlbmRpZgotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0JCWNhc2UgQUZfQ09OTjoKLQkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZs
YWcgfD0gSU5QX0NPTk47Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7
Ci0JCX0KLQl9Ci19Ci0KLS8qCi0gKiBBZGQgdGhlIGFkZHJlc3MgdG8gdGhlIGVuZHBvaW50IGxv
Y2FsIGFkZHJlc3MgbGlzdCBUaGVyZSBpcyBub3RoaW5nIHRvIGJlCi0gKiBkb25lIGlmIHdlIGFy
ZSBib3VuZCB0byBhbGwgYWRkcmVzc2VzCi0gKi8KLXZvaWQKLXNjdHBfYWRkX2xvY2FsX2FkZHJf
ZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQzMl90
IGFjdGlvbikKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3RydWN0IHNjdHBfdGNi
ICpzdGNiOwotCWludCBmbmQsIGVycm9yID0gMDsKLQotCWZuZCA9IDA7Ci0KLQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJLyogWW91IGFyZSBhbHJl
YWR5IGJvdW5kIHRvIGFsbC4gWW91IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlyZXR1cm47Ci0JfQot
I2lmZGVmIElORVQ2Ci0JaWYgKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYp
IHsKLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkg
ewotCQkJLyogQ2FuJ3QgYmluZCBhIG5vbi11c2VhYmxlIGFkZHIuICovCi0JCQlyZXR1cm47Ci0J
CX0KLQl9Ci0jZW5kaWYKLQkvKiBmaXJzdCwgaXMgaXQgYWxyZWFkeSBwcmVzZW50PyAqLwotCUxJ
U1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsK
LQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7Ci0JCQlmbmQgPSAxOwotCQkJYnJlYWs7Ci0JCX0K
LQl9Ci0KLQlpZiAoZm5kID09IDApIHsKLQkJLyogTm90IGluIHRoZSBlcCBsaXN0ICovCi0JCWVy
cm9yID0gc2N0cF9pbnNlcnRfbGFkZHIoJmlucC0+c2N0cF9hZGRyX2xpc3QsIGlmYSwgYWN0aW9u
KTsKLQkJaWYgKGVycm9yICE9IDApCi0JCQlyZXR1cm47Ci0JCWlucC0+bGFkZHJfY291bnQrKzsK
LQkJLyogdXBkYXRlIGlucF92ZmxhZyBmbGFncyAqLwotCQlzd2l0Y2ggKGlmYS0+YWRkcmVzcy5z
YS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotI2lmICEoZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCQlpbnAtPmlucF92ZmxhZyB8PSBJ
TlBfSVBWNjsKLSNlbHNlCi0JCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9JUFY2
OwotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVU
OgotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCQlpbnAtPmlu
cF92ZmxhZyB8PSBJTlBfSVBWNDsKLSNlbHNlCi0JCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFn
IHw9IElOUF9JUFY0OwotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92Zmxh
ZyB8PSBJTlBfQ09OTjsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVhazsK
LQkJfQotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNi
bGlzdCkgewotCQkJc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGlmYSk7Ci0J
CX0KLQl9Ci0JcmV0dXJuOwotfQotCi0KLS8qCi0gKiBzZWxlY3QgYSBuZXcgKGhvcGVmdWxseSBy
ZWFjaGFibGUpIGRlc3RpbmF0aW9uIG5ldCAoc2hvdWxkIG9ubHkgYmUgdXNlZAotICogd2hlbiB3
ZSBkZWxldGVkIGFuIGVwIGFkZHIgdGhhdCBpcyB0aGUgb25seSB1c2FibGUgc291cmNlIGFkZHJl
c3MgdG8gcmVhY2gKLSAqIHRoZSBkZXN0aW5hdGlvbiBuZXQpCi0gKi8KLXN0YXRpYyB2b2lkCi1z
Y3RwX3NlbGVjdF9wcmltYXJ5X2Rlc3RpbmF0aW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsK
LQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCS8qIGZvciBub3csIHdlJ2xsIGp1c3QgcGljayB0aGUg
Zmlyc3QgcmVhY2hhYmxlIG9uZSB3ZSBmaW5kICovCi0JCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfVU5DT05GSVJNRUQpCi0JCQljb250aW51ZTsKLQkJaWYgKHNjdHBfZGVzdGluYXRp
b25faXNfcmVhY2hhYmxlKHN0Y2IsCi0JCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8u
X2xfYWRkcikpIHsKLQkJCS8qIGZvdW5kIGEgcmVhY2hhYmxlIGRlc3RpbmF0aW9uICovCi0JCQlz
dGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24gPSBuZXQ7Ci0JCX0KLQl9Ci0JLyogSSBjYW4n
dCB0aGVyZSBmcm9tIGhlcmUhIC4uLndlJ3JlIGdvbm5hIGRpZSBzaG9ydGx5Li4uICovCi19Ci0K
LQotLyoKLSAqIERlbGV0ZSB0aGUgYWRkcmVzcyBmcm9tIHRoZSBlbmRwb2ludCBsb2NhbCBhZGRy
ZXNzIGxpc3QuIFRoZXJlIGlzIG5vdGhpbmcKLSAqIHRvIGJlIGRvbmUgaWYgd2UgYXJlIGJvdW5k
IHRvIGFsbCBhZGRyZXNzZXMKLSAqLwotdm9pZAotc2N0cF9kZWxfbG9jYWxfYWRkcl9lcChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0
cF9sYWRkciAqbGFkZHI7Ci0JaW50IGZuZDsKLQotCWZuZCA9IDA7Ci0JaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCS8qIFlvdSBhcmUgYWxyZWFkeSBi
b3VuZCB0byBhbGwuIFlvdSBoYXZlIGl0IGFscmVhZHkgKi8KLQkJcmV0dXJuOwotCX0KLQlMSVNU
X0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0J
CWlmIChsYWRkci0+aWZhID09IGlmYSkgewotCQkJZm5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0J
fQotCWlmIChmbmQgJiYgKGlucC0+bGFkZHJfY291bnQgPCAyKSkgewotCQkvKiBjYW4ndCBkZWxl
dGUgdW5sZXNzIHRoZXJlIGFyZSBhdCBMRUFTVCAyIGFkZHJlc3NlcyAqLwotCQlyZXR1cm47Ci0J
fQotCWlmIChmbmQpIHsKLQkJLyoKLQkJICogY2xlYW4gdXAgYW55IHVzZSBvZiB0aGlzIGFkZHJl
c3MgZ28gdGhyb3VnaCBvdXIKLQkJICogYXNzb2NpYXRpb25zIGFuZCBjbGVhciBhbnkgbGFzdF91
c2VkX2FkZHJlc3MgdGhhdCBtYXRjaAotCQkgKiB0aGlzIG9uZSBmb3IgZWFjaCBhc3NvYywgc2Vl
IGlmIGEgbmV3IHByaW1hcnlfZGVzdGluYXRpb24KLQkJICogaXMgbmVlZGVkCi0JCSAqLwotCQlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0KLQkJLyogY2xlYW4gdXAgIm5leHRfYWRkcl90b3VzZSIg
Ki8KLQkJaWYgKGlucC0+bmV4dF9hZGRyX3RvdXNlID09IGxhZGRyKQotCQkJLyogZGVsZXRlIHRo
aXMgYWRkcmVzcyAqLwotCQkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOwotCi0JCS8qIGNs
ZWFuIHVwICJsYXN0X3VzZWRfYWRkcmVzcyIgKi8KLQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAt
PnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5l
dDsKLQotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWlmIChzdGNiLT5hc29jLmxhc3RfdXNl
ZF9hZGRyZXNzID09IGxhZGRyKQotCQkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KLQkJCQlz
dGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gTlVMTDsKLQkJCS8qIE5vdyBzcGluIHRocm91
Z2ggYWxsIHRoZSBuZXRzIGFuZCBwdXJnZSBhbnkgcmVmIHRvIGxhZGRyICovCi0JCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJaWYgKG5ldC0+
cm8uX3NfYWRkciA9PSBsYWRkci0+aWZhKSB7Ci0JCQkJCS8qIFllcCwgcHVyZ2Ugc3JjIGFkZHJl
c3Mgc2VsZWN0ZWQgKi8KLQkJCQkJc2N0cF9ydGVudHJ5X3QgKnJ0OwotCi0JCQkJCS8qIGRlbGV0
ZSB0aGlzIGFkZHJlc3MgaWYgY2FjaGVkICovCi0JCQkJCXJ0ID0gbmV0LT5yby5yb19ydDsKLQkJ
CQkJaWYgKHJ0ICE9IE5VTEwpIHsKLQkJCQkJCVJURlJFRShydCk7Ci0JCQkJCQluZXQtPnJvLnJv
X3J0ID0gTlVMTDsKLQkJCQkJfQotCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7
Ci0JCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0
ZWQgPSAwOwotCQkJCX0KLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfQkJLyog
Zm9yIGVhY2ggdGNiICovCi0JCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBlcCBsaXN0ICovCi0JCXNj
dHBfcmVtb3ZlX2xhZGRyKGxhZGRyKTsKLQkJaW5wLT5sYWRkcl9jb3VudC0tOwotCQkvKiB1cGRh
dGUgaW5wX3ZmbGFnIGZsYWdzICovCi0JCXNjdHBfdXBkYXRlX2VwX3ZmbGFnKGlucCk7Ci0JfQot
CXJldHVybjsKLX0KLQotLyoKLSAqIEFkZCB0aGUgYWRkcmVzcyB0byB0aGUgVENCIGxvY2FsIGFk
ZHJlc3MgcmVzdHJpY3RlZCBsaXN0LgotICogVGhpcyBpcyBhICJwZW5kaW5nIiBhZGRyZXNzIGxp
c3QgKGVnLiBhZGRyZXNzZXMgd2FpdGluZyBmb3IgYW4KLSAqIEFTQ09ORi1BQ0sgcmVzcG9uc2Up
IGFuZCBjYW5ub3QgYmUgdXNlZCBhcyBhIHZhbGlkIHNvdXJjZSBhZGRyZXNzLgotICovCi12b2lk
Ci1zY3RwX2FkZF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9pZmEgKmlmYSkKLXsKLQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0Jc3Ry
dWN0IHNjdHBsYWRkciAqbGlzdDsKLQotCS8qCi0JICogQXNzdW1lcyBUQ0IgaXMgbG9ja2VkLi4g
YW5kIHBvc3NpYmx5IHRoZSBJTlAuIE1heSBuZWVkIHRvCi0JICogY29uZmlybS9maXggdGhhdCBp
ZiB3ZSBuZWVkIGl0IGFuZCBpcyBub3QgdGhlIGNhc2UuCi0JICovCi0JbGlzdCA9ICZzdGNiLT5h
c29jLnNjdHBfcmVzdHJpY3RlZF9hZGRyczsKLQotI2lmZGVmIElORVQ2Ci0JaWYgKGlmYS0+YWRk
cmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxh
Z3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgewotCQkJLyogQ2FuJ3QgYmluZCBhIG5vbi1l
eGlzdGVudCBhZGRyLiAqLwotCQkJcmV0dXJuOwotCQl9Ci0JfQotI2VuZGlmCi0JLyogZG9lcyB0
aGUgYWRkcmVzcyBhbHJlYWR5IGV4aXN0PyAqLwotCUxJU1RfRk9SRUFDSChsYWRkciwgbGlzdCwg
c2N0cF9ueHRfYWRkcikgewotCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKLQkJCXJldHVybjsK
LQkJfQotCX0KLQotCS8qIGFkZCB0byB0aGUgbGlzdCAqLwotCSh2b2lkKXNjdHBfaW5zZXJ0X2xh
ZGRyKGxpc3QsIGlmYSwgMCk7Ci0JcmV0dXJuOwotfQotCi0vKgotICogUmVtb3ZlIGEgbG9jYWwg
YWRkcmVzcyBmcm9tIHRoZSBUQ0IgbG9jYWwgYWRkcmVzcyByZXN0cmljdGVkIGxpc3QKLSAqLwot
dm9pZAotc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfaWZhICppZmEpCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQlz
dHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0KLQkvKgotCSAqIFRoaXMgaXMgY2FsbGVkIGJ5IGFz
Y29uZiB3b3JrLiBJdCBpcyBhc3N1bWVkIHRoYXQgYSkgVGhlIFRDQiBpcwotCSAqIGxvY2tlZCBh
bmQgYikgVGhlIElOUCBpcyBsb2NrZWQuIFRoaXMgaXMgdHJ1ZSBpbiBhcyBtdWNoIGFzIEkgY2Fu
Ci0JICogdHJhY2UgdGhyb3VnaCB0aGUgZW50cnkgYXNjb25mIGNvZGUgd2hlcmUgSSBkaWQgdGhl
c2UgbG9ja3MuCi0JICogQWdhaW4sIHRoZSBBU0NPTkYgY29kZSBpcyBhIGJpdCBkaWZmZXJlbnQg
aW4gdGhhdCBpdCBkb2VzIGxvY2sKLQkgKiB0aGUgSU5QIGR1cmluZyBpdHMgd29yayBvZnRlbiB0
aW1lcy4gVGhpcyBtdXN0IGJlIHNpbmNlIHdlIGRvbid0Ci0JICogd2FudCBvdGhlciBwcm9jJ3Mg
bG9va2luZyB1cCB0aGluZ3Mgd2hpbGUgd2hhdCB0aGV5IGFyZSBsb29raW5nCi0JICogdXAgaXMg
Y2hhbmdpbmcgOi1ECi0JICovCi0KLQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCS8qIGlmIHN1YnNl
dCBib3VuZCBhbmQgZG9uJ3QgYWxsb3cgQVNDT05GJ3MsIGNhbid0IGRlbGV0ZSBsYXN0ICovCi0J
aWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApICYm
Ci0JICAgIHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYp
KSB7Ci0JCWlmIChzdGNiLT5zY3RwX2VwLT5sYWRkcl9jb3VudCA8IDIpIHsKLQkJCS8qIGNhbid0
IGRlbGV0ZSBsYXN0IGFkZHJlc3MgKi8KLQkJCXJldHVybjsKLQkJfQotCX0KLQlMSVNUX0ZPUkVB
Q0gobGFkZHIsICZzdGNiLT5hc29jLnNjdHBfcmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRfYWRk
cikgewotCQkvKiByZW1vdmUgdGhlIGFkZHJlc3MgaWYgaXQgZXhpc3RzICovCi0JCWlmIChsYWRk
ci0+aWZhID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7
Ci0JCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0KLQkv
KiBhZGRyZXNzIG5vdCBmb3VuZCEgKi8KLQlyZXR1cm47Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotLyoKLSAqIFRlbXBvcmFyaWx5IHJlbW92ZSBmb3IgX19BUFBMRV9fIHVudGlsIHdl
IHVzZSB0aGUgVGlnZXIgZXF1aXZhbGVudHMKLSAqLwotLyogc3lzY3RsICovCi1zdGF0aWMgaW50
IHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyA9IFNDVFBfTUFYX05VTV9PRl9BU09DOwotc3RhdGlj
IGludCBzY3RwX3NjYWxlX3VwX2Zvcl9hZGRyZXNzID0gU0NUUF9TQ0FMRV9GT1JfQUREUjsKLSNl
bmRpZgkJCQkvKiBGcmVlQlNEIHx8IEFQUExFICovCi0KLQotCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVUKSAmJiBkZWZpbmVkKFNNUCkKLXN0cnVj
dCBzY3RwX21jb3JlX2N0cmwgKnNjdHBfbWNvcmVfd29ya2VycyA9IE5VTEw7Ci1pbnQgKnNjdHBf
Y3B1YXJyeSA9IE5VTEw7Ci12b2lkCi1zY3RwX3F1ZXVlX3RvX21jb3JlKHN0cnVjdCBtYnVmICpt
LCBpbnQgb2ZmLCBpbnQgY3B1X3RvX3VzZSkKLXsKLQkvKiBRdWV1ZSBhIHBhY2tldCB0byBhIHBy
b2Nlc3NvciBmb3IgdGhlIHNwZWNpZmllZCBjb3JlICovCi0Jc3RydWN0IHNjdHBfbWNvcmVfcXVl
dWUgKnFlbnQ7Ci0Jc3RydWN0IHNjdHBfbWNvcmVfY3RybCAqd2txOwotCWludCBuZWVkX3dha2Ug
PSAwOwotCWlmIChzY3RwX21jb3JlX3dvcmtlcnMgPT0gTlVMTCkgewotCQkvKiBTb21ldGhpbmcg
d2VudCB3YXkgYmFkIGR1cmluZyBzZXR1cCAqLwotCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBv
ZmYsIDApOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfTUFMTE9DKHFlbnQsIHN0cnVjdCBzY3RwX21j
b3JlX3F1ZXVlICosCi0JCSAgICAoc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlKSksCi0J
CSAgICBTQ1RQX01fTUNPUkUpOwotCWlmIChxZW50ID09IE5VTEwpIHsKLQkJLyogVGhpcyBpcyB0
cm91YmxlICAqLwotCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOwotCQlyZXR1cm47
Ci0JfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MTAwMAotCXFlbnQtPnZuID0gY3Vydm5ldDsKLSNlbmRpZgotCXFlbnQtPm0gPSBtOwotCXFlbnQt
Pm9mZiA9IG9mZjsKLQlxZW50LT52NiA9IDA7Ci0Jd2txID0gJnNjdHBfbWNvcmVfd29ya2Vyc1tj
cHVfdG9fdXNlXTsKLQlTQ1RQX01DT1JFX1FMT0NLKHdrcSk7Ci0KLQlUQUlMUV9JTlNFUlRfVEFJ
TCgmd2txLT5xdWUsIHFlbnQsIG5leHQpOwotCWlmICh3a3EtPnJ1bm5pbmcgPT0gMCkgewotCQlu
ZWVkX3dha2UgPSAxOwotCX0KLQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKLQlpZiAobmVlZF93
YWtlKSB7Ci0JCXdha2V1cCgmd2txLT5ydW5uaW5nKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1z
Y3RwX21jb3JlX3RocmVhZCh2b2lkICphcmcpCi17Ci0KLQlzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJs
ICp3a3E7Ci0Jc3RydWN0IHNjdHBfbWNvcmVfcXVldWUgKnFlbnQ7Ci0KLQl3a3EgPSAoc3RydWN0
IHNjdHBfbWNvcmVfY3RybCAqKWFyZzsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgb2ZmLCB2NjsK
LQotCS8qIFdhaXQgZm9yIGZpcnN0IHRpY2tsZSAqLwotCVNDVFBfTUNPUkVfTE9DSyh3a3EpOwot
CXdrcS0+cnVubmluZyA9IDA7Ci0JbXNsZWVwKCZ3a3EtPnJ1bm5pbmcsCi0JICAgICAgICZ3a3Et
PmNvcmVfbXR4LAotCSAgICAgICAwLCAid2FpdCBmb3IgcGt0IiwgMCk7Ci0JU0NUUF9NQ09SRV9V
TkxPQ0sod2txKTsKLQotCS8qIEJpbmQgdG8gb3VyIGNwdSAqLwotCXRocmVhZF9sb2NrKGN1cnRo
cmVhZCk7Ci0Jc2NoZWRfYmluZChjdXJ0aHJlYWQsIHdrcS0+Y3B1aWQpOwotCXRocmVhZF91bmxv
Y2soY3VydGhyZWFkKTsKLQotCS8qIE5vdyBsZXRzIHN0YXJ0IHdvcmtpbmcgKi8KLQlTQ1RQX01D
T1JFX0xPQ0sod2txKTsKLQkvKiBOb3cgZ3JhYiBsb2NrIGFuZCBnbyAqLwotCWZvciAoOzspIHsK
LQkJU0NUUF9NQ09SRV9RTE9DSyh3a3EpOwotCXNraXBfc2xlZXA6Ci0JCXdrcS0+cnVubmluZyA9
IDE7Ci0JCXFlbnQgPSBUQUlMUV9GSVJTVCgmd2txLT5xdWUpOwotCQlpZiAocWVudCkgewotCQkJ
VEFJTFFfUkVNT1ZFKCZ3a3EtPnF1ZSwgcWVudCwgbmV4dCk7Ci0JCQlTQ1RQX01DT1JFX1FVTkxP
Q0sod2txKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDEwMDAKLQkJCUNVUlZORVRfU0VUKHFlbnQtPnZuKTsKLSNlbmRpZgotCQkJbSA9IHFlbnQt
Pm07Ci0JCQlvZmYgPSBxZW50LT5vZmY7Ci0JCQl2NiA9IHFlbnQtPnY2OwotCQkJU0NUUF9GUkVF
KHFlbnQsIFNDVFBfTV9NQ09SRSk7Ci0JCQlpZiAodjYgPT0gMCkgewotCQkJCXNjdHBfaW5wdXRf
d2l0aF9wb3J0KG0sIG9mZiwgMCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfUFJJTlRGKCJWNiBu
b3QgeWV0IHN1cHBvcnRlZFxuIik7Ci0JCQkJc2N0cF9tX2ZyZWVtKG0pOwotCQkJfQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQkJQ1VS
Vk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYKLQkJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsKLQkJfQot
CQl3a3EtPnJ1bm5pbmcgPSAwOwotCQlpZiAoIVRBSUxRX0VNUFRZKCZ3a3EtPnF1ZSkpIHsKLQkJ
CWdvdG8gc2tpcF9zbGVlcDsKLQkJfQotCQlTQ1RQX01DT1JFX1FVTkxPQ0sod2txKTsKLQkJbXNs
ZWVwKCZ3a3EtPnJ1bm5pbmcsCi0JCSAgICAgICAmd2txLT5jb3JlX210eCwKLQkJICAgICAgIDAs
ICJ3YWl0IGZvciBwa3QiLCAwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3N0YXJ0dXBf
bWNvcmVfdGhyZWFkcyh2b2lkKQotewotCWludCBpLCBjcHU7Ci0KLQlpZiAobXBfbmNwdXMgPT0g
MSkKLQkJcmV0dXJuOwotCi0JaWYgKHNjdHBfbWNvcmVfd29ya2VycyAhPSBOVUxMKSB7Ci0JCS8q
IEFscmVhZHkgYmVlbiBoZXJlIGluIHNvbWUgcHJldmlvdXMKLQkJICogdm5ldD8KLQkJICovCi0J
CXJldHVybjsKLQl9Ci0JU0NUUF9NQUxMT0Moc2N0cF9tY29yZV93b3JrZXJzLCBzdHJ1Y3Qgc2N0
cF9tY29yZV9jdHJsICosCi0JCSAgICAoKG1wX21heGlkKzEpICogc2l6ZW9mKHN0cnVjdCBzY3Rw
X21jb3JlX2N0cmwpKSwKLQkJICAgIFNDVFBfTV9NQ09SRSk7Ci0JaWYgKHNjdHBfbWNvcmVfd29y
a2VycyA9PSBOVUxMKSB7Ci0JCS8qIFRTTkggSSBob3BlICovCi0JCXJldHVybjsKLQl9Ci0JbWVt
c2V0KHNjdHBfbWNvcmVfd29ya2VycywgMCAsICgobXBfbWF4aWQrMSkgKgotCQkJCQlzaXplb2Yo
c3RydWN0IHNjdHBfbWNvcmVfY3RybCkpKTsKLQkvKiBJbml0IHRoZSBzdHJ1Y3R1cmVzICovCi0J
Zm9yIChpID0gMDsgaTw9bXBfbWF4aWQ7IGkrKykgewotCQlUQUlMUV9JTklUKCZzY3RwX21jb3Jl
X3dvcmtlcnNbaV0ucXVlKTsKLQkJU0NUUF9NQ09SRV9MT0NLX0lOSVQoJnNjdHBfbWNvcmVfd29y
a2Vyc1tpXSk7Ci0JCVNDVFBfTUNPUkVfUUxPQ0tfSU5JVCgmc2N0cF9tY29yZV93b3JrZXJzW2ld
KTsKLQkJc2N0cF9tY29yZV93b3JrZXJzW2ldLmNwdWlkID0gaTsKLQl9Ci0JaWYgKHNjdHBfY3B1
YXJyeSA9PSBOVUxMKSB7Ci0JCVNDVFBfTUFMTE9DKHNjdHBfY3B1YXJyeSwgaW50ICosCi0JCQkg
ICAgKG1wX25jcHVzICogc2l6ZW9mKGludCkpLAotCQkJICAgIFNDVFBfTV9NQ09SRSk7Ci0JCWkg
PSAwOwotCQlDUFVfRk9SRUFDSChjcHUpIHsKLQkJCXNjdHBfY3B1YXJyeVtpXSA9IGNwdTsKLQkJ
CWkrKzsKLQkJfQotCX0KLQotCS8qIE5vdyBzdGFydCB0aGVtIGFsbCAqLwotCUNQVV9GT1JFQUNI
KGNwdSkgewotI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDw9IDcwMTAwMAotCQkodm9pZClrdGhyZWFk
X2NyZWF0ZShzY3RwX21jb3JlX3RocmVhZCwKLQkJCQkgICAgICh2b2lkICopJnNjdHBfbWNvcmVf
d29ya2Vyc1tjcHVdLAotCQkJCSAgICAgJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVdLnRocmVhZF9w
cm9jLAotCQkJCSAgICAgUkZQUk9DLAotCQkJCSAgICAgU0NUUF9LVEhSRUFEX1BBR0VTLAotCQkJ
CSAgICAgU0NUUF9NQ09SRV9OQU1FKTsKLQotI2Vsc2UKLQkJKHZvaWQpa3Byb2NfY3JlYXRlKHNj
dHBfbWNvcmVfdGhyZWFkLAotCQkJCSAgICh2b2lkICopJnNjdHBfbWNvcmVfd29ya2Vyc1tjcHVd
LAotCQkJCSAgICZzY3RwX21jb3JlX3dvcmtlcnNbY3B1XS50aHJlYWRfcHJvYywKLQkJCQkgICBS
RlBST0MsCi0JCQkJICAgU0NUUF9LVEhSRUFEX1BBR0VTLAotCQkJCSAgIFNDVFBfTUNPUkVfTkFN
RSk7Ci0jZW5kaWYKLQotCX0KLX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF9jY192ZXJzaW9uID49IDEzMDAwMDAKLXN0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCi1z
Y3RwX25ldGlzcl9oZGxyKHN0cnVjdCBtYnVmICptLCB1aW50cHRyX3Qgc291cmNlKQotewotCXN0
cnVjdCBpcCAqaXA7Ci0Jc3RydWN0IHNjdHBoZHIgKnNoOwotCWludCBvZmZzZXQ7Ci0JdWludDMy
X3QgZmxvd2lkLCB0YWc7Ci0KLQkvKgotCSAqIE5vIGZsb3cgaWQgYnVpbHQgYnkgbG93ZXIgbGF5
ZXJzIGZpeCBpdCBzbyB3ZQotCSAqIGNyZWF0ZSBvbmUuCi0JICovCi0JaXAgPSBtdG9kKG0sIHN0
cnVjdCBpcCAqKTsKLQlvZmZzZXQgPSAoaXAtPmlwX2hsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKLQlpZiAoU0NUUF9CVUZfTEVOKG0pIDwgb2Zmc2V0KSB7Ci0JCWlmICgobSA9IG1f
cHVsbHVwKG0sIG9mZnNldCkpID09IE5VTEwpIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hk
cm9wcyk7Ci0JCQlyZXR1cm4gKE5VTEwpOwotCQl9Ci0JCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAg
Kik7Ci0JfQotCXNoID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsgKGlwLT5pcF9o
bCA8PCAyKSk7Ci0JdGFnID0gaHRvbmwoc2gtPnZfdGFnKTsKLQlmbG93aWQgPSB0YWcgXiBudG9o
cyhzaC0+ZGVzdF9wb3J0KSBeIG50b2hzKHNoLT5zcmNfcG9ydCk7Ci0JbS0+bV9wa3RoZHIuZmxv
d2lkID0gZmxvd2lkOwotLyogRklYIE1FICovCi0JbS0+bV9mbGFncyB8PSBNX0ZMT1dJRDsKLQly
ZXR1cm4gKG0pOwotfQotI2VuZGlmCi0KLXZvaWQKLXNjdHBfcGNiX2luaXQoKQotewotCS8qCi0J
ICogU0NUUCBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFBDQiBzdHJ1Y3R1cmVzIHNob3VsZCBiZSBj
YWxsZWQgYnkKLQkgKiB0aGUgc2N0cF9pbml0KCkgZnVuY3Rpb24uCi0JICovCi0JaW50IGk7Ci0J
c3RydWN0IHRpbWV2YWwgdHY7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3RwX3BjYl9pbml0aWFs
aXplZCkgIT0gMCkgewotCQkvKiBlcnJvciBJIHdhcyBjYWxsZWQgdHdpY2UgKi8KLQkJcmV0dXJu
OwotCX0KLQlTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9IDE7Ci0KLSNpZiBk
ZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJlNDVFBfQkFTRV9WQVIobXR4
X2F0dHIpKTsKLSNpZmRlZiBJTlZBUklBTlRTCi0JcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0ciksIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyk7Ci0jZW5k
aWYKLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLSNp
ZiBkZWZpbmVkKF9fV2luZG93c19fKQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSAh
PSBOVUxMKSB7Ci0JCW1lbXNldChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2xvZykpOwotCX0KLSNlbHNlCi0JbWVtc2V0KCZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbG9nKSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOwotI2VuZGlmCi0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQ
X1VTRV9QRVJDUFVfU1RBVCkKLQlTQ1RQX01BTExPQyhTQ1RQX0JBU0VfU1RBVFMsIHN0cnVjdCBz
Y3Rwc3RhdCAqLAotCQkgICAgKChtcF9tYXhpZCsxKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQp
KSwKLQkJICAgIFNDVFBfTV9NQ09SRSk7Ci0jZW5kaWYKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElN
RVZBTCgmdHYpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU01QKSAmJiBk
ZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFUKQotCW1lbXNldChTQ1RQX0JBU0VfU1RBVFMsIDAs
IHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpICogKG1wX21heGlkKzEpKTsKLQlTQ1RQX0JBU0VfU1RB
VFNbUENQVV9HRVQoY3B1aWQpXS5zY3Rwc19kaXNjb250aW51aXR5dGltZS50dl9zZWMgPSAodWlu
dDMyX3QpdHYudHZfc2VjOwotCVNDVFBfQkFTRV9TVEFUU1tQQ1BVX0dFVChjcHVpZCldLnNjdHBz
X2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3VzZWMgPSAodWludDMyX3QpdHYudHZfdXNlYzsKLSNlbHNl
Ci0JbWVtc2V0KCZTQ1RQX0JBU0VfU1RBVFMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsK
LQlTQ1RQX0JBU0VfU1RBVChzY3Rwc19kaXNjb250aW51aXR5dGltZSkudHZfc2VjID0gKHVpbnQz
Ml90KXR2LnR2X3NlYzsKLQlTQ1RQX0JBU0VfU1RBVChzY3Rwc19kaXNjb250aW51aXR5dGltZSku
dHZfdXNlYyA9ICh1aW50MzJfdCl0di50dl91c2VjOwotI2VuZGlmCi0JLyogaW5pdCB0aGUgZW1w
dHkgbGlzdCBvZiAoQWxsKSBFbmRwb2ludHMgKi8KLQlMSVNUX0lOSVQoJlNDVFBfQkFTRV9JTkZP
KGxpc3RoZWFkKSk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JTElTVF9JTklUKCZTQ1RQX0JB
U0VfSU5GTyhpbnBsaXN0aGVhZCkpOwotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVm
aW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZpbmVk
KEFQUExFX01PVU5UQUlOTElPTikKLQlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubGlzdGhlYWQg
PSAmU0NUUF9CQVNFX0lORk8oaW5wbGlzdGhlYWQpOwotCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5tdHhfZ3JwX2F0dHIgPSBsY2tfZ3JwX2F0dHJfYWxsb2NfaW5pdCgpOwotCWxja19ncnBfYXR0
cl9zZXRkZWZhdWx0KFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIpOwotCVND
VFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwID0gbGNrX2dycF9hbGxvY19pbml0KCJzY3Rw
cGNiIiwgU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9ncnBfYXR0cik7Ci0JU0NUUF9CQVNF
X0lORk8oc2N0YmluZm8pLm10eF9hdHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgpOwotCWxja19h
dHRyX3NldGRlZmF1bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKLSNlbHNl
Ci0JU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9saXN0aGVhZCA9ICZTQ1RQX0JBU0VfSU5G
TyhpbnBsaXN0aGVhZCk7Ci0JU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2NrX2dycF9h
dHRyID0gbGNrX2dycF9hdHRyX2FsbG9jX2luaXQoKTsKLQlsY2tfZ3JwX2F0dHJfc2V0ZGVmYXVs
dChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOwotCVNDVFBfQkFT
RV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19ncnAgPSBsY2tfZ3JwX2FsbG9jX2luaXQoInNjdHBw
Y2IiLCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0dHIpOwotCVNDVFBf
QkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19hdHRyID0gbGNrX2F0dHJfYWxsb2NfaW5pdCgp
OwotCWxja19hdHRyX3NldGRlZmF1bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLmlwaV9sb2Nr
X2F0dHIpOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQo
QVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQ
UExFX01PVU5UQUlOTElPTikKLQlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2djID0gc2N0
cF9nYzsKLQlpbl9wY2JpbmZvX2F0dGFjaCgmU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pKTsKLSNl
bmRpZgotI2VuZGlmCi0KLQotCS8qIGluaXQgdGhlIGhhc2ggdGFibGUgb2YgZW5kcG9pbnRzICov
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9jY192ZXJz
aW9uKSAmJiBfX0ZyZWVCU0RfY2NfdmVyc2lvbiA+PSA0NDAwMDAKLQlUVU5BQkxFX0lOVF9GRVRD
SCgibmV0LmluZXQuc2N0cC50Y2JoYXNoc2l6ZSIsICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGFz
aHRibHNpemUpKTsKLQlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5wY2JoYXNoc2l6
ZSIsICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSkpOwotCVRVTkFCTEVfSU5UX0ZF
VENIKCJuZXQuaW5ldC5zY3RwLmNodW5rc2NhbGUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2No
dW5rc2NhbGUpKTsKLSNlbHNlCi0JVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAudGNi
aGFzaHNpemUiLCBTQ1RQX1RDQkhBU0hTSVpFLAotCQkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
aGFzaHRibHNpemUpKTsKLQlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5wY2JoYXNo
c2l6ZSIsIFNDVFBfUENCSEFTSFNJWkUsCi0JCQkgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0
YmxzaXplKSk7Ci0JVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAuY2h1bmtzY2FsZSIs
IFNDVFBfQ0hVTktRVUVVRV9TQ0FMRSwKLQkJCSAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5r
c2NhbGUpKTsKLSNlbmRpZgotI2VuZGlmCi0JU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaCkg
PSBTQ1RQX0hBU0hfSU5JVCgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSAqIDMx
KSwKLQkJCQkJCSAgICAgICAmU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSk7Ci0JU0NUUF9C
QVNFX0lORk8oc2N0cF9lcGhhc2gpID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2hhc2h0YmxzaXplKSwKLQkJCQkJCSAgICAgJlNDVFBfQkFTRV9JTkZPKGhhc2htYXJrKSk7
Ci0JU0NUUF9CQVNFX0lORk8oc2N0cF90Y3BlcGhhc2gpID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSwKLQkJCQkJCQkmU0NUUF9CQVNFX0lORk8oaGFz
aHRjcG1hcmspKTsKLQlTQ1RQX0JBU0VfSU5GTyhoYXNodGJsc2l6ZSkgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaGFzaHRibHNpemUpOwotCi0KLQlTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gp
ID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9TSVpFX09GX1ZSRl9IQVNILAotCQkJCQkJICAgICAgJlND
VFBfQkFTRV9JTkZPKGhhc2h2cmZtYXJrKSk7Ci0KLQlTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hh
c2gpID0gU0NUUF9IQVNIX0lOSVQoU0NUUF9WUkZfSUZOX0hBU0hfU0laRSwKLQkJCQkJCSAgICAg
ICZTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSk7Ci0JLyogaW5pdCB0aGUgem9uZXMg
Ki8KLQkvKgotCSAqIEZJWCBNRTogU2hvdWxkIGNoZWNrIGZvciBOVUxMIHJldHVybnMsIGJ1dCBp
ZiBpdCBkb2VzIGZhaWwgd2UgYXJlCi0JICogZG9vbWVkIHRvIHBhbmljIGFueXdheXMuLi4gYWRk
IGxhdGVyIG1heWJlLgotCSAqLwotCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX2VwKSwgInNjdHBfZXAiLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lucGNiKSwg
bWF4c29ja2V0cyk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9h
c29jKSwgInNjdHBfYXNvYyIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfdGNiKSwgc2N0
cF9tYXhfbnVtYmVyX29mX2Fzc29jKTsKLQotCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZP
KGlwaV96b25lX2xhZGRyKSwgInNjdHBfbGFkZHIiLAotCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2xhZGRyKSwKLQkJICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBzY3RwX3Nj
YWxlX3VwX2Zvcl9hZGRyZXNzKSk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhp
cGlfem9uZV9uZXQpLCAic2N0cF9yYWRkciIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBf
bmV0cyksCi0JCSAgICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogc2N0cF9zY2FsZV91
cF9mb3JfYWRkcmVzcykpOwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfY2h1bmspLCAic2N0cF9jaHVuayIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfdG1p
dF9jaHVuayksCi0JCSAgICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fzc29jICogU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2NodW5rc2NhbGUpKSk7Ci0KLQlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0Vf
SU5GTyhpcGlfem9uZV9yZWFkcSksICJzY3RwX3JlYWRxIiwKLQkJICAgICAgIHNpemVvZihzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCksCi0JCSAgICAgICAoc2N0cF9tYXhfbnVtYmVyX29mX2Fz
c29jICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2NhbGUpKSk7Ci0KLQlTQ1RQX1pPTkVf
SU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9zdHJtb3EpLCAic2N0cF9zdHJlYW1fbXNnX291
dCIsCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpLAot
CQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9jaHVua3NjYWxlKSkpOwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfYXNjb25mKSwgInNjdHBfYXNjb25mIiwKLQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c2NvbmYpLAotCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jaHVua3NjYWxlKSkpOwotCi0JU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfYXNjb25mX2FjayksICJzY3RwX2FzY29uZl9hY2siLAotCQkgICAgICAgc2l6
ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hY2spLAotCQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9v
Zl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkpOwotCi0KLQkvKiBN
YXN0ZXIgTG9jayBJTklUIGZvciBpbmZvIHN0cnVjdHVyZSAqLwotCVNDVFBfSU5QX0lORk9fTE9D
S19JTklUKCk7Ci0JU0NUUF9TVEFUTE9HX0lOSVRfTE9DSygpOwotCi0JU0NUUF9JUElfQ09VTlRf
SU5JVCgpOwotCVNDVFBfSVBJX0FERFJfSU5JVCgpOwotI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJ
TkcKLQlTQ1RQX0lQX1BLVExPR19JTklUKCk7Ci0jZW5kaWYKLQlMSVNUX0lOSVQoJlNDVFBfQkFT
RV9JTkZPKGFkZHJfd3EpKTsKLQotCVNDVFBfV1FfQUREUl9JTklUKCk7Ci0JLyogbm90IHN1cmUg
aWYgd2UgbmVlZCBhbGwgdGhlIGNvdW50cyAqLwotCVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9l
cCkgPSAwOwotCS8qIGFzc29jL3RjYiB6b25lIGluZm8gKi8KLQlTQ1RQX0JBU0VfSU5GTyhpcGlf
Y291bnRfYXNvYykgPSAwOwotCS8qIGxvY2FsIGFkZHJsaXN0IHpvbmUgaW5mbyAqLwotCVNDVFBf
QkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkcikgPSAwOwotCS8qIHJlbW90ZSBhZGRybGlzdCB6b25l
IGluZm8gKi8KLQlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpID0gMDsKLQkvKiBjaHVu
ayBpbmZvICovCi0JU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2NodW5rKSA9IDA7Ci0KLQkvKiBz
b2NrZXQgcXVldWUgem9uZSBpbmZvICovCi0JU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRx
KSA9IDA7Ci0KLQkvKiBzdHJlYW0gb3V0IHF1ZXVlIGNvbnQgKi8KLQlTQ1RQX0JBU0VfSU5GTyhp
cGlfY291bnRfc3RybW9xKSA9IDA7Ci0KLQlTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9zdHJtb3Ep
ID0gMDsKLQlTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpID0gMDsKLQotCVNDVFBfT1Nf
VElNRVJfSU5JVCgmU0NUUF9CQVNFX0lORk8oYWRkcl93cV90aW1lci50aW1lcikpOwotCi0JLyog
SW5pdCB0aGUgVElNRVdBSVQgbGlzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBTQ1RQX1NUQUNLX1ZU
QUdfSEFTSF9TSVpFOyBpKyspIHsKLQkJTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyh2dGFnX3Rp
bWV3YWl0KVtpXSk7Ci0JfQotI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlJbml0aWFsaXplQ29uZGl0aW9u
VmFyaWFibGUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yX3dha2V1cCk7Ci0jZWxzZQotCSh2b2lkKXB0
aHJlYWRfY29uZF9pbml0KCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXAsIE5VTEwpOwotI2Vu
ZGlmCi0jZW5kaWYKLQlzY3RwX3N0YXJ0dXBfaXRlcmF0b3IoKTsKLQotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi0J
c2N0cF9zdGFydHVwX21jb3JlX3RocmVhZHMoKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9fUGFuZGFf
XwotCS8qCi0JICogSU5JVCB0aGUgZGVmYXVsdCBWUkYgd2hpY2ggZm9yIEJTRCBpcyB0aGUgb25s
eSBvbmUsIG90aGVyIE8vUydzCi0JICogbWF5IGhhdmUgbW9yZS4gQnV0IGluaXRpYWxseSB0aGV5
IG11c3Qgc3RhcnQgd2l0aCBvbmUgYW5kIHRoZW4KLQkgKiBhZGQgdGhlIFZSRidzIGFzIGFkZHJl
c3NlcyBhcmUgYWRkZWQuCi0JICovCi0Jc2N0cF9pbml0X3ZyZl9saXN0KFNDVFBfREVGQVVMVF9W
UkYpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX2NjX3Zl
cnNpb24gPj0gMTMwMDAwMAotCWlmIChpcF9yZWdpc3Rlcl9mbG93X2hhbmRsZXIoc2N0cF9uZXRp
c3JfaGRsciwgSVBQUk9UT19TQ1RQKSkgewotCQlTQ1RQX1BSSU5URigiKioqU0NUUC0gRXJyb3Ig
Y2FuJ3QgcmVnaXN0ZXIgbmV0aXNyIGhhbmRsZXIqKipcbiIpOwotCX0KLSNlbmRpZgotI2lmIGRl
ZmluZWQoX1NDVFBfTkVFRFNfQ0FMTE9VVF8pIHx8IGRlZmluZWQoX1VTRVJfU0NUUF9ORUVEU19D
QUxMT1VUXykKLQkvKiBhbGxvY2F0ZSB0aGUgbG9jayBmb3IgdGhlIGNhbGxvdXQvdGltZXIgcXVl
dWUgKi8KLQlTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKTsKLQlUQUlMUV9JTklUKCZTQ1RQX0JBU0Vf
SU5GTyhjYWxscXVldWUpKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlt
YnVmX2luaXRpYWxpemUoTlVMTCk7Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2
KQotCXJlY3ZfdGhyZWFkX2luaXQoKTsKLSNlbmRpZgotI2VuZGlmCi19Ci0KLS8qCi0gKiBBc3N1
bWVzIHRoYXQgdGhlIFNDVFBfQkFTRV9JTkZPKCkgbG9jayBpcyBOT1QgaGVsZC4KLSAqLwotdm9p
ZAotc2N0cF9wY2JfZmluaXNoKHZvaWQpCi17Ci0Jc3RydWN0IHNjdHBfdnJmbGlzdCAqdnJmX2J1
Y2tldDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZiwgKm52cmY7Ci0Jc3RydWN0IHNjdHBfaWZuICpp
Zm4sICpuaWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqaWZhLCAqbmlmYTsKLQlzdHJ1Y3Qgc2N0cHZ0
YWdoZWFkICpjaGFpbjsKLQlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2ssICpwcmV2
X3R3YWl0X2Jsb2NrOwotCXN0cnVjdCBzY3RwX2xhZGRyICp3aSwgKm53aTsKLQlpbnQgaTsKLQlz
dHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQsICpuaXQ7Ci0KLQlpZiAoU0NUUF9CQVNFX1ZBUihzY3Rw
X3BjYl9pbml0aWFsaXplZCkgPT0gMCkgewotCQlTQ1RQX1BSSU5URigiJXM6IHJhY2UgY29uZGl0
aW9uIG9uIHRlYXJkb3duLlxuIiwgX19mdW5jX18pOwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQkFT
RV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID0gMDsKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0Rf
XykKLQkvKiBOb3RpZnkgdGhlIGl0ZXJhdG9yIHRvIGV4aXQuICovCi0JU0NUUF9JUElfSVRFUkFU
T1JfV1FfTE9DSygpOwotCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFU
T1JfTVVTVF9FWElUOwotCXNjdHBfd2FrZXVwX2l0ZXJhdG9yKCk7Ci0JU0NUUF9JUElfSVRFUkFU
T1JfV1FfVU5MT0NLKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiAhZGVm
aW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQotCWluX3Bj
YmluZm9fZGV0YWNoKCZTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykpOwotI2VuZGlmCi0JU0NUUF9J
UElfSVRFUkFUT1JfV1FfTE9DSygpOwotCWRvIHsKLQkJbXNsZWVwKCZzY3RwX2l0X2N0bC5pdGVy
YXRvcl9mbGFncywKLQkJICAgICAgIHNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgsCi0J
CSAgICAgICAwLCAid2FpdGluZ19mb3Jfd29yayIsIDApOwotCX0gd2hpbGUgKChzY3RwX2l0X2N0
bC5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRVhJVEVEKSA9PSAwKTsKLQl0aHJlYWRf
ZGVhbGxvY2F0ZShzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7Ci0JU0NUUF9JUElfSVRFUkFUT1Jf
V1FfVU5MT0NLKCk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCWlmIChzY3Rw
X2l0X2N0bC5pdGVyYXRvcl90aHJlYWRfb2JqICE9IE5VTEwpIHsKLQkJTlRTVEFUVVMgc3RhdHVz
ID0gU1RBVFVTX1NVQ0NFU1M7Ci0KLQkJS2VTZXRFdmVudCgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
d2FrZXVwWzFdLCBJT19OT19JTkNSRU1FTlQsIEZBTFNFKTsKLQkJc3RhdHVzID0gS2VXYWl0Rm9y
U2luZ2xlT2JqZWN0KHNjdHBfaXRfY3RsLml0ZXJhdG9yX3RocmVhZF9vYmosCi0JCQkJCSAgICAg
ICBFeGVjdXRpdmUsCi0JCQkJCSAgICAgICBLZXJuZWxNb2RlLAotCQkJCQkgICAgICAgRkFMU0Us
Ci0JCQkJCSAgICAgICBOVUxMKTsKLQkJT2JEZXJlZmVyZW5jZU9iamVjdChzY3RwX2l0X2N0bC5p
dGVyYXRvcl90aHJlYWRfb2JqKTsKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JaWYgKHNjdHBfaXRfY3RsLnRocmVhZF9wcm9jKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KHNjdHBfaXRfY3RsLnRocmVh
ZF9wcm9jLCBJTkZJTklURSk7Ci0JCUNsb3NlSGFuZGxlKHNjdHBfaXRfY3RsLnRocmVhZF9wcm9j
KTsKLQkJc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MgPSBOVUxMOwotI2Vsc2UKLQkJcHRocmVhZF9q
b2luKHNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCBOVUxMKTsKLQkJc2N0cF9pdF9jdGwudGhyZWFk
X3Byb2MgPSAwOwotI2VuZGlmCi0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChTQ1RQX1BST0NFU1Nf
TEVWRUxfTE9DS1MpCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCURlbGV0
ZUNvbmRpdGlvblZhcmlhYmxlKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXApOwotI2Vsc2UK
LQlwdGhyZWFkX2NvbmRfZGVzdHJveSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKLQlw
dGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7Ci0jZW5k
aWYKLSNlbmRpZgotCS8qIEluIEZyZWVCU0QgdGhlIGl0ZXJhdG9yIHRocmVhZCBuZXZlciBleGl0
cwotCSAqIGJ1dCB3ZSBkbyBjbGVhbiB1cC4KLQkgKiBUaGUgb25seSB3YXkgRnJlZUJTRCByZWFj
aGVzIGhlcmUgaXMgaWYgd2UgaGF2ZSBWUkYncwotCSAqIGJ1dCB3ZSBzdGlsbCBhZGQgdGhlIGlm
ZGVmIHRvIG1ha2UgaXQgY29tcGlsZSBvbiBvbGQgdmVyc2lvbnMuCi0JICovCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLXJldHJ5OgotI2VuZGlmCi0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9D
SygpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JLyoKLQkgKiBzY3RwX2l0ZXJhdG9yX3dv
cmtlcigpIG1pZ2h0IGJlIHdvcmtpbmcgb24gYW4gaXQgZW50cnkgd2l0aG91dAotCSAqIGhvbGRp
bmcgdGhlIGxvY2suICBXZSB3b24ndCBmaW5kIGl0IG9uIHRoZSBsaXN0IGVpdGhlciBhbmQKLQkg
KiBjb250aW51ZSBhbmQgZnJlZS9kZXN0cm95IGl0LiAgV2hpbGUgaG9sZGluZyB0aGUgbG9jaywg
c3BpbiwgdG8KLQkgKiBhdm9pZCB0aGUgcmFjZSBjb25kaXRpb24gYXMgc2N0cF9pdGVyYXRvcl93
b3JrZXIoKSB3aWxsIGhhdmUgdG8KLQkgKiB3YWl0IHRvIHJlLWFxdWlyZSB0aGUgbG9jay4KLQkg
Ki8KLQlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfcnVubmluZyAhPSAwIHx8IHNjdHBfaXRfY3Rs
LmN1cl9pdCAhPSBOVUxMKSB7Ci0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOwotCQlT
Q1RQX1BSSU5URigiJXM6IEl0ZXJhdG9yIHJ1bm5pbmcgd2hpbGUgd2UgaGVsZCB0aGUgbG9jay4g
UmV0cnkuICIKLQkJICAgICAgICAgICAgImN1cl9pdD0lcFxuIiwgX19mdW5jX18sIHNjdHBfaXRf
Y3RsLmN1cl9pdCk7Ci0JCURFTEFZKDEwKTsKLQkJZ290byByZXRyeTsKLQl9Ci0jZW5kaWYKLQlU
QUlMUV9GT1JFQUNIX1NBRkUoaXQsICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIHNjdHBfbnh0
X2l0ciwgbml0KSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAxMDAwCi0JCWlmIChpdC0+dm4gIT0gY3Vydm5ldCkgewotCQkJY29udGludWU7Ci0J
CX0KLSNlbmRpZgotCQlUQUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQs
IHNjdHBfbnh0X2l0cik7Ci0JCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgewotCQkJ
KCppdC0+ZnVuY3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7Ci0JCX0KLQkJU0NU
UF9GUkVFKGl0LFNDVFBfTV9JVEVSKTsKLQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NL
KCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAx
MDAwCi0JU0NUUF9JVEVSQVRPUl9MT0NLKCk7Ci0JaWYgKChzY3RwX2l0X2N0bC5jdXJfaXQpICYm
Ci0JICAgIChzY3RwX2l0X2N0bC5jdXJfaXQtPnZuID09IGN1cnZuZXQpKSB7Ci0JCXNjdHBfaXRf
Y3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRFUkFUT1JfU1RPUF9DVVJfSVQ7Ci0JfQotCVND
VFBfSVRFUkFUT1JfVU5MT0NLKCk7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9ERVNUUk9ZKCk7Ci0JU0NUUF9JVEVSQVRPUl9MT0NLX0RF
U1RST1koKTsKLSNlbmRpZgotCVNDVFBfT1NfVElNRVJfU1RPUF9EUkFJTigmU0NUUF9CQVNFX0lO
Rk8oYWRkcl93cV90aW1lci50aW1lcikpOwotCVNDVFBfV1FfQUREUl9MT0NLKCk7Ci0JTElTVF9G
T1JFQUNIX1NBRkUod2ksICZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSwgc2N0cF9ueHRfYWRkciwg
bndpKSB7Ci0JCUxJU1RfUkVNT1ZFKHdpLCBzY3RwX254dF9hZGRyKTsKLQkJU0NUUF9ERUNSX0xB
RERSX0NPVU5UKCk7Ci0JCWlmICh3aS0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsK
LQkJCVNDVFBfRlJFRSh3aS0+aWZhLCBTQ1RQX01fSUZBKTsKLQkJfQotCQlTQ1RQX1pPTkVfRlJF
RShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHdpKTsKLQl9Ci0JU0NUUF9XUV9BRERS
X1VOTE9DSygpOwotCi0JLyoKLQkgKiBmcmVlIHRoZSB2cmYvaWZuL2lmYSBsaXN0cyBhbmQgaGFz
aGVzIChiZSBzdXJlIGFkZHJlc3MgbW9uaXRvcgotCSAqIGlzIGRlc3Ryb3llZCBmaXJzdCkuCi0J
ICovCi0JdnJmX2J1Y2tldCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpWyhTQ1RQX0RF
RkFVTFRfVlJGSUQgJiBTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpXTsKLQlMSVNUX0ZPUkVB
Q0hfU0FGRSh2cmYsIHZyZl9idWNrZXQsIG5leHRfdnJmLCBudnJmKSB7Ci0JCUxJU1RfRk9SRUFD
SF9TQUZFKGlmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4sIG5pZm4pIHsKLQkJCUxJU1RfRk9S
RUFDSF9TQUZFKGlmYSwgJmlmbi0+aWZhbGlzdCwgbmV4dF9pZmEsIG5pZmEpIHsKLQkJCQkvKiBm
cmVlIHRoZSBpZmEgKi8KLQkJCQlMSVNUX1JFTU9WRShpZmEsIG5leHRfYnVja2V0KTsKLQkJCQlM
SVNUX1JFTU9WRShpZmEsIG5leHRfaWZhKTsKLQkJCQlTQ1RQX0ZSRUUoaWZhLCBTQ1RQX01fSUZB
KTsKLQkJCX0KLQkJCS8qIGZyZWUgdGhlIGlmbiAqLwotCQkJTElTVF9SRU1PVkUoaWZuLCBuZXh0
X2J1Y2tldCk7Ci0JCQlMSVNUX1JFTU9WRShpZm4sIG5leHRfaWZuKTsKLQkJCVNDVFBfRlJFRShp
Zm4sIFNDVFBfTV9JRk4pOwotCQl9Ci0JCVNDVFBfSEFTSF9GUkVFKHZyZi0+dnJmX2FkZHJfaGFz
aCwgdnJmLT52cmZfYWRkcl9oYXNobWFyayk7Ci0JCS8qIGZyZWUgdGhlIHZyZiAqLwotCQlMSVNU
X1JFTU9WRSh2cmYsIG5leHRfdnJmKTsKLQkJU0NUUF9GUkVFKHZyZiwgU0NUUF9NX1ZSRik7Ci0J
fQotCS8qIGZyZWUgdGhlIHZyZiBoYXNoZXMgKi8KLQlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0Vf
SU5GTyhzY3RwX3ZyZmhhc2gpLCBTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykpOwotCVNDVFBf
SEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHZyZl9pZm5faGFzaCksIFNDVFBfQkFTRV9JTkZPKHZy
Zl9pZm5faGFzaG1hcmspKTsKLQotCS8qIGZyZWUgdGhlIFRJTUVXQUlUIGxpc3QgZWxlbWVudHMg
bWFsbG9jJ2QgaW4gdGhlIGZ1bmN0aW9uCi0JICogc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdCgp
Li4uCi0JICovCi0JZm9yIChpID0gMDsgaSA8IFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkU7IGkr
KykgewotCQljaGFpbiA9ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0KVtpXTsKLQkJaWYg
KCFMSVNUX0VNUFRZKGNoYWluKSkgewotCQkJcHJldl90d2FpdF9ibG9jayA9IE5VTEw7Ci0JCQlM
SVNUX0ZPUkVBQ0godHdhaXRfYmxvY2ssIGNoYWluLCBzY3RwX254dF90YWdibG9jaykgewotCQkJ
CWlmIChwcmV2X3R3YWl0X2Jsb2NrKSB7Ci0JCQkJCVNDVFBfRlJFRShwcmV2X3R3YWl0X2Jsb2Nr
LCBTQ1RQX01fVElNVyk7Ci0JCQkJfQotCQkJCXByZXZfdHdhaXRfYmxvY2sgPSB0d2FpdF9ibG9j
azsKLQkJCX0KLQkJCVNDVFBfRlJFRShwcmV2X3R3YWl0X2Jsb2NrLCBTQ1RQX01fVElNVyk7Ci0J
CX0KLQl9Ci0KLQkvKiBmcmVlIHRoZSBsb2NrcyBhbmQgbXV0ZXhlcyAqLwotI2lmIGRlZmluZWQo
X19BUFBMRV9fKQotCVNDVFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpOwotI2VuZGlmCi0jaWZkZWYg
U0NUUF9QQUNLRVRfTE9HR0lORwotCVNDVFBfSVBfUEtUTE9HX0RFU1RST1koKTsKLSNlbmRpZgot
CVNDVFBfSVBJX0FERFJfREVTVFJPWSgpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCVNDVFBf
SVBJX0NPVU5UX0RFU1RST1koKTsKLSNlbmRpZgotCVNDVFBfU1RBVExPR19ERVNUUk9ZKCk7Ci0J
U0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1koKTsKLQotCVNDVFBfV1FfQUREUl9ERVNUUk9ZKCk7
Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8
IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVm
aW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCi0JbGNrX2dycF9hdHRyX2ZyZWUoU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLm10eF9ncnBfYXR0cik7Ci0JbGNrX2dycF9mcmVlKFNDVFBfQkFTRV9JTkZP
KHNjdGJpbmZvKS5tdHhfZ3JwKTsKLQlsY2tfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJp
bmZvKS5tdHhfYXR0cik7Ci0jZWxzZQotCWxja19ncnBfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZP
KHNjdGJpbmZvKS5pcGlfbG9ja19ncnBfYXR0cik7Ci0JbGNrX2dycF9mcmVlKFNDVFBfQkFTRV9J
TkZPKHNjdGJpbmZvKS5pcGlfbG9ja19ncnApOwotCWxja19hdHRyX2ZyZWUoU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pLmlwaV9sb2NrX2F0dHIpOwotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JU0NUUF9USU1FUlFfTE9DS19ERVNUUk9ZKCk7Ci0JU0NUUF9aT05F
X0RFU1RST1koem9uZV9tYnVmKTsKLQlTQ1RQX1pPTkVfREVTVFJPWSh6b25lX2NsdXN0KTsKLQlT
Q1RQX1pPTkVfREVTVFJPWSh6b25lX2V4dF9yZWZjbnQpOwotI2VuZGlmCi0JLyogR2V0IHJpZCBv
ZiBvdGhlciBzdHVmZiB0b28uICovCi0JaWYgKFNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gp
ICE9IE5VTEwpCi0JCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gp
LCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKTsKLQlpZiAoU0NUUF9CQVNFX0lORk8oc2N0
cF9lcGhhc2gpICE9IE5VTEwpCi0JCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZPKHNjdHBf
ZXBoYXNoKSwgU0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKTsKLQlpZiAoU0NUUF9CQVNFX0lORk8o
c2N0cF90Y3BlcGhhc2gpICE9IE5VTEwpCi0JCVNDVFBfSEFTSF9GUkVFKFNDVFBfQkFTRV9JTkZP
KHNjdHBfdGNwZXBoYXNoKSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKTsKLQotI2lmIGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9l
cCkpOwotCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpKTsK
LQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkcikpOwotCVND
VFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCkpOwotCVNDVFBfWk9O
RV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSk7Ci0JU0NUUF9aT05FX0RF
U1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpKTsKLQlTQ1RQX1pPTkVfREVTVFJP
WShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9zdHJtb3EpKTsKLQlTQ1RQX1pPTkVfREVTVFJPWShT
Q1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmYpKTsKLQlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQ
X0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmZfYWNrKSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RB
VCkKLQlTQ1RQX0ZSRUUoU0NUUF9CQVNFX1NUQVRTLCBTQ1RQX01fTUNPUkUpOwotI2VuZGlmCi19
Ci0KLQotaW50Ci1zY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBtYnVmICptLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IG9mZnNldCwgaW50IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphbHRzYSwgdWludDE2X3QgcG9ydCkKLXsKLQkv
KgotCSAqIGdydWIgdGhyb3VnaCB0aGUgSU5JVCBwdWxsaW5nIGFkZHJlc3NlcyBhbmQgbG9hZGlu
ZyB0aGVtIHRvIHRoZQotCSAqIG5ldHMgc3RydWN0dXJlIGluIHRoZSBhc29jLiBUaGUgZnJvbSBh
ZGRyZXNzIGluIHRoZSBtYnVmIHNob3VsZAotCSAqIGFsc28gYmUgbG9hZGVkIChpZiBpdCBpcyBu
b3QgYWxyZWFkeSkuIFRoaXMgcm91dGluZSBjYW4gYmUgY2FsbGVkCi0JICogd2l0aCBlaXRoZXIg
SU5JVCBvciBJTklULUFDSydzIGFzIGxvbmcgYXMgdGhlIG0gcG9pbnRzIHRvIHRoZSBJUAotCSAq
IHBhY2tldCBhbmQgdGhlIG9mZnNldCBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcGFy
YW1ldGVycy4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgKm5uZXQsICpuZXRfdG1wOwotCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCBw
YXJhbV9idWY7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiX3RtcDsKLQl1aW50MTZfdCBwdHlwZSwg
cGxlbjsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCXVpbnQ4X3QgcmFuZG9tX3N0b3JlW1NDVFBf
UEFSQU1fQlVGRkVSX1NJWkVdOwotCXN0cnVjdCBzY3RwX2F1dGhfcmFuZG9tICpwX3JhbmRvbSA9
IE5VTEw7Ci0JdWludDE2X3QgcmFuZG9tX2xlbiA9IDA7Ci0JdWludDhfdCBobWFjc19zdG9yZVtT
Q1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqaG1h
Y3MgPSBOVUxMOwotCXVpbnQxNl90IGhtYWNzX2xlbiA9IDA7Ci0JdWludDhfdCBzYXdfYXNjb25m
ID0gMDsKLQl1aW50OF90IHNhd19hc2NvbmZfYWNrID0gMDsKLQl1aW50OF90IGNodW5rc19zdG9y
ZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKLQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3Qg
KmNodW5rcyA9IE5VTEw7Ci0JdWludDE2X3QgbnVtX2NodW5rcyA9IDA7Ci0Jc2N0cF9rZXlfdCAq
bmV3X2tleTsKLQl1aW50MzJfdCBrZXlsZW47Ci0JaW50IGdvdF9yYW5kb20gPSAwLCBnb3RfaG1h
Y3MgPSAwLCBnb3RfY2hrbGlzdCA9IDA7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX2VjbjsKLQl1
aW50OF90IHBlZXJfc3VwcG9ydHNfcHJzY3RwOwotCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19hdXRo
OwotCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19hc2NvbmY7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRz
X2FzY29uZl9hY2s7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX3JlY29uZmlnOwotCXVpbnQ4X3Qg
cGVlcl9zdXBwb3J0c19ucnNhY2s7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX3BrdGRyb3A7Ci0J
dWludDhfdCBwZWVyX3N1cHBvcnRzX2lkYXRhOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNp
bjY7Ci0jZW5kaWYKLQotCS8qIEZpcnN0IGdldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyBzZXR1
cCB0b28uICovCi0jaWZkZWYgSU5FVAotCW1lbXNldCgmc2luLCAwLCBzaXplb2Yoc2luKSk7Ci0J
c2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbi5zaW5f
bGVuID0gc2l6ZW9mKHNpbik7Ci0jZW5kaWYKLQlzaW4uc2luX3BvcnQgPSBzdGNiLT5ycG9ydDsK
LSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JbWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2luNikpOwot
CXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2lu
Ni5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCXNpbjYu
c2luNl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0jZW5kaWYKLQlpZiAoYWx0c2EpIHsKLQkJc2EgPSBh
bHRzYTsKLQl9IGVsc2UgewotCQlzYSA9IHNyYzsKLQl9Ci0JcGVlcl9zdXBwb3J0c19pZGF0YSA9
IDA7Ci0JcGVlcl9zdXBwb3J0c19lY24gPSAwOwotCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMDsK
LQlwZWVyX3N1cHBvcnRzX2F1dGggPSAwOwotCXBlZXJfc3VwcG9ydHNfYXNjb25mID0gMDsKLQlw
ZWVyX3N1cHBvcnRzX3JlY29uZmlnID0gMDsKLQlwZWVyX3N1cHBvcnRzX25yc2FjayA9IDA7Ci0J
cGVlcl9zdXBwb3J0c19wa3Rkcm9wID0gMDsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCS8qIG1hcmsgYWxsIGFkZHJlc3NlcyB0aGF0IHdlIGhh
dmUgY3VycmVudGx5IG9uIHRoZSBsaXN0ICovCi0JCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FE
RFJfTk9UX0lOX0FTU09DOwotCX0KLQkvKiBkb2VzIHRoZSBzb3VyY2UgYWRkcmVzcyBhbHJlYWR5
IGV4aXN0PyBpZiBzbyBza2lwIGl0ICovCi0JaW5wID0gc3RjYi0+c2N0cF9lcDsKLQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCXN0Y2JfdG1wID0gc2N0cF9maW5kYXNz
b2NpYXRpb25fZXBfYWRkcigmaW5wLCBzYSwgJm5ldF90bXAsIGRzdCwgc3RjYik7Ci0JYXRvbWlj
X2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7Ci0KLQlpZiAoKHN0Y2JfdG1wID09IE5V
TEwgJiYgaW5wID09IHN0Y2ItPnNjdHBfZXApIHx8IGlucCA9PSBOVUxMKSB7Ci0JCS8qIHdlIG11
c3QgYWRkIHRoZSBzb3VyY2UgYWRkcmVzcyAqLwotCQkvKiBubyBzY29wZSBzZXQgaGVyZSBzaW5j
ZSB3ZSBoYXZlIGEgdGNiIGFscmVhZHkuICovCi0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2
NF9hZGRyX2xlZ2FsKSB7Ci0JCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBO
VUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0xPQURfQUREUl8yKSkgewotCQkJ
CQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0JCQl9Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJf
bGVnYWwpIHsKLQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5VTEwsIHBv
cnQsIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzMpKSB7Ci0JCQkJCXJldHVy
biAoLTIpOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotCQljYXNlIEFGX0NPTk46Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5jb25u
X2FkZHJfbGVnYWwpIHsKLQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2EsIE5V
TEwsIHBvcnQsIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzMpKSB7Ci0JCQkJ
CXJldHVybiAoLTIpOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6
Ci0JCQlicmVhazsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChuZXRfdG1wICE9IE5VTEwgJiYgc3Rj
Yl90bXAgPT0gc3RjYikgewotCQkJbmV0X3RtcC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05P
VF9JTl9BU1NPQzsKLQkJfSBlbHNlIGlmIChzdGNiX3RtcCAhPSBzdGNiKSB7Ci0JCQkvKiBJdCBi
ZWxvbmdzIHRvIGFub3RoZXIgYXNzb2NpYXRpb24/ICovCi0JCQlpZiAoc3RjYl90bXApCi0JCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2JfdG1wKTsKLQkJCXJldHVybiAoLTMpOwotCQl9Ci0JfQotCWlm
IChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKLQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8K
LQkJcmV0dXJuICgtNCk7Ci0JfQotCS8qIG5vdyB3ZSBtdXN0IGdvIHRocm91Z2ggZWFjaCBvZiB0
aGUgcGFyYW1zLiAqLwotCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBh
cmFtX2J1Ziwgc2l6ZW9mKHBhcmFtX2J1ZikpOwotCXdoaWxlIChwaGRyKSB7Ci0JCXB0eXBlID0g
bnRvaHMocGhkci0+cGFyYW1fdHlwZSk7Ci0JCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5n
dGgpOwotCQkvKgotCQkgKiBTQ1RQX1BSSU5URigicHR5cGUgPT4gJTB4LCBwbGVuID0+ICVkXG4i
LCAodWludDMyX3QpcHR5cGUsCi0JCSAqIChpbnQpcGxlbik7Ci0JCSAqLwotCQlpZiAob2Zmc2V0
ICsgcGxlbiA+IGxpbWl0KSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAocGxlbiA9PSAwKSB7Ci0J
CQlicmVhazsKLQkJfQotI2lmZGVmIElORVQKLQkJaWYgKHB0eXBlID09IFNDVFBfSVBWNF9BRERS
RVNTKSB7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKLQkJCQlz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqcDQsIHA0X2J1ZjsKLQotCQkJCS8qIG9rIGdldCB0
aGUgdjQgYWRkcmVzcyBhbmQgY2hlY2svYWRkICovCi0JCQkJcGhkciA9IHNjdHBfZ2V0X25leHRf
cGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZwNF9i
dWYsCi0JCQkJCQkJICAgc2l6ZW9mKHA0X2J1ZikpOwotCQkJCWlmIChwbGVuICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkgfHwKLQkJCQkgICAgcGhkciA9PSBOVUxMKSB7Ci0J
CQkJCXJldHVybiAoLTUpOwotCQkJCX0KLQkJCQlwNCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9w
YXJhbSAqKXBoZHI7Ci0JCQkJc2luLnNpbl9hZGRyLnNfYWRkciA9IHA0LT5hZGRyOwotCQkJCWlm
IChJTl9NVUxUSUNBU1QobnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikpKSB7Ci0JCQkJCS8qIFNr
aXAgbXVsdGktY2FzdCBhZGRyZXNzZXMgKi8KLQkJCQkJZ290byBuZXh0X3BhcmFtOwotCQkJCX0K
LQkJCQlpZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJ
CQkgICAgKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkpIHsKLQkJCQkJZ290byBu
ZXh0X3BhcmFtOwotCQkJCX0KLQkJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQkJ
CWlucCA9IHN0Y2ItPnNjdHBfZXA7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLQkJCQlzdGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlu
cCwgc2EsICZuZXQsCi0JCQkJCQkJCQlkc3QsIHN0Y2IpOwotCQkJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgLTEpOwotCi0JCQkJaWYgKChzdGNiX3RtcCA9PSBOVUxMICYmIGlu
cCA9PSBzdGNiLT5zY3RwX2VwKSB8fAotCQkJCSAgICBpbnAgPT0gTlVMTCkgewotCQkJCQkvKiB3
ZSBtdXN0IGFkZCB0aGUgc291cmNlIGFkZHJlc3MgKi8KLQkJCQkJLyoKLQkJCQkJICogbm8gc2Nv
cGUgc2V0IHNpbmNlIHdlIGhhdmUgYSB0Y2IKLQkJCQkJICogYWxyZWFkeQotCQkJCQkgKi8KLQot
CQkJCQkvKgotCQkJCQkgKiB3ZSBtdXN0IHZhbGlkYXRlIHRoZSBzdGF0ZSBhZ2FpbgotCQkJCQkg
KiBoZXJlCi0JCQkJCSAqLwotCQkJCWFkZF9pdF9ub3c6Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0
YXRlID09IDApIHsKLQkJCQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCi0JCQkJCQlyZXR1
cm4gKC03KTsKLQkJCQkJfQotCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2Es
IE5VTEwsIHBvcnQsIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzQpKSB7Ci0J
CQkJCQlyZXR1cm4gKC04KTsKLQkJCQkJfQotCQkJCX0gZWxzZSBpZiAoc3RjYl90bXAgPT0gc3Rj
YikgewotCQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQkJCQkvKiB0aGUgYXNz
b2Mgd2FzIGZyZWVkPyAqLwotCQkJCQkJcmV0dXJuICgtMTApOwotCQkJCQl9Ci0JCQkJCWlmIChu
ZXQgIT0gTlVMTCkgewotCQkJCQkJLyogY2xlYXIgZmxhZyAqLwotCQkJCQkJbmV0LT5kZXN0X3N0
YXRlICY9Ci0JCQkJCQkJflNDVFBfQUREUl9OT1RfSU5fQVNTT0M7Ci0JCQkJCX0KLQkJCQl9IGVs
c2UgewotCQkJCQkvKgotCQkJCQkgKiBzdHJhbmdlLCBhZGRyZXNzIGlzIGluIGFub3RoZXIKLQkJ
CQkJICogYXNzb2M/IHN0cmFpZ2h0ZW4gb3V0IGxvY2tzLgotCQkJCQkgKi8KLQkJCQkJaWYgKHN0
Y2JfdG1wKSB7Ci0JCQkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2JfdG1wLT5hc29jKSAmIFND
VFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKLQkJCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCQkJ
CQkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07Ci0KLQkJCQkJCQkvKiBpbiBzZXR1cCBz
dGF0ZSB3ZSBhYm9ydCB0aGlzIGd1eSAqLwotCQkJCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1z
ZyksCi0JCQkJCQkJICAgICAgICAgIiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBf
X2Z1bmNfXyk7Ci0JCQkJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAotCQkJCQkJCSAgICAgICAgIG1zZyk7Ci0JCQkJ
CQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiX3RtcC0+c2N0cF9lcCwKLQkJCQkJCQkJ
CQkgIHN0Y2JfdG1wLCBvcF9lcnIsCi0JCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCQkJCWdvdG8gYWRkX2l0X25vdzsKLQkJCQkJCX0KLQkJ
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiX3RtcCk7Ci0JCQkJCX0KLQotCQkJCQlpZiAoc3RjYi0+
YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQkJCQkvKiB0aGUgYXNzb2Mgd2FzIGZyZWVkPyAqLwotCQkJ
CQkJcmV0dXJuICgtMTIpOwotCQkJCQl9Ci0JCQkJCXJldHVybiAoLTEzKTsKLQkJCQl9Ci0JCQl9
Ci0JCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJaWYgKHB0eXBlID09IFNDVFBfSVBW
Nl9BRERSRVNTKSB7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsK
LQkJCQkvKiBvayBnZXQgdGhlIHY2IGFkZHJlc3MgYW5kIGNoZWNrL2FkZCAqLwotCQkJCXN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOwotCi0JCQkJcGhkciA9IHNjdHBfZ2V0
X25leHRfcGFyYW0obSwgb2Zmc2V0LAotCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KSZwNl9idWYsCi0JCQkJCQkJICAgc2l6ZW9mKHA2X2J1ZikpOwotCQkJCWlmIChwbGVuICE9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkgfHwKLQkJCQkgICAgcGhkciA9PSBOVUxM
KSB7Ci0JCQkJCXJldHVybiAoLTE0KTsKLQkJCQl9Ci0JCQkJcDYgPSAoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0gKilwaGRyOwotCQkJCW1lbWNweSgoY2FkZHJfdCkmc2luNi5zaW42X2FkZHIs
IHA2LT5hZGRyLAotCQkJCSAgICAgICBzaXplb2YocDYtPmFkZHIpKTsKLQkJCQlpZiAoSU42X0lT
X0FERFJfTVVMVElDQVNUKCZzaW42LnNpbjZfYWRkcikpIHsKLQkJCQkJLyogU2tpcCBtdWx0aS1j
YXN0IGFkZHJlc3NlcyAqLwotCQkJCQlnb3RvIG5leHRfcGFyYW07Ci0JCQkJfQotCQkJCWlmIChJ
TjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYuc2luNl9hZGRyKSkgewotCQkJCQkvKiBMaW5rIGxv
Y2FsIG1ha2Ugbm8gc2Vuc2Ugd2l0aG91dCBzY29wZSAqLwotCQkJCQlnb3RvIG5leHRfcGFyYW07
Ci0JCQkJfQotCQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW42OwotCQkJCWlucCA9IHN0
Y2ItPnNjdHBfZXA7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
LQkJCQlzdGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2EsICZu
ZXQsCi0JCQkJCQkJCQlkc3QsIHN0Y2IpOwotCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgLTEpOwotCQkJCWlmIChzdGNiX3RtcCA9PSBOVUxMICYmCi0JCQkJICAgIChpbnAg
PT0gc3RjYi0+c2N0cF9lcCB8fCBpbnAgPT0gTlVMTCkpIHsKLQkJCQkJLyoKLQkJCQkJICogd2Ug
bXVzdCB2YWxpZGF0ZSB0aGUgc3RhdGUgYWdhaW4KLQkJCQkJICogaGVyZQotCQkJCQkgKi8KLQkJ
CQlhZGRfaXRfbm93NjoKLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgewotCQkJCQkJ
LyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KLQkJCQkJCXJldHVybiAoLTE2KTsKLQkJCQkJfQot
CQkJCQkvKgotCQkJCQkgKiB3ZSBtdXN0IGFkZCB0aGUgYWRkcmVzcywgbm8gc2NvcGUKLQkJCQkJ
ICogc2V0Ci0JCQkJCSAqLwotCQkJCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RjYiwgc2Es
IE5VTEwsIHBvcnQsIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfTE9BRF9BRERSXzUpKSB7Ci0J
CQkJCQlyZXR1cm4gKC0xNyk7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgaWYgKHN0Y2JfdG1wID09IHN0
Y2IpIHsKLQkJCQkJLyoKLQkJCQkJICogd2UgbXVzdCB2YWxpZGF0ZSB0aGUgc3RhdGUgYWdhaW4K
LQkJCQkJICogaGVyZQotCQkJCQkgKi8KLQkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkg
ewotCQkJCQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KLQkJCQkJCXJldHVybiAoLTE5KTsK
LQkJCQkJfQotCQkJCQlpZiAobmV0ICE9IE5VTEwpIHsKLQkJCQkJCS8qIGNsZWFyIGZsYWcgKi8K
LQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPQotCQkJCQkJCX5TQ1RQX0FERFJfTk9UX0lOX0FTU09D
OwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyoKLQkJCQkJICogc3RyYW5nZSwgYWRkcmVz
cyBpcyBpbiBhbm90aGVyCi0JCQkJCSAqIGFzc29jPyBzdHJhaWdodGVuIG91dCBsb2Nrcy4KLQkJ
CQkJICovCi0JCQkJCWlmIChzdGNiX3RtcCkgewotCQkJCQkJaWYgKFNDVFBfR0VUX1NUQVRFKCZz
dGNiX3RtcC0+YXNvYykgJiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB7Ci0JCQkJCQkJc3RydWN0
IG1idWYgKm9wX2VycjsKLQkJCQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOwotCi0J
CQkJCQkJLyogaW4gc2V0dXAgc3RhdGUgd2UgYWJvcnQgdGhpcyBndXkgKi8KLQkJCQkJCQlzbnBy
aW50Zihtc2csIHNpemVvZihtc2cpLAotCQkJCQkJCSAgICAgICAgICIlczolZCBhdCAlcyIsIF9f
RklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOwotCQkJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJh
dGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKLQkJCQkJCQkg
ICAgICAgICBtc2cpOwotCQkJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYl90bXAt
PnNjdHBfZXAsCi0JCQkJCQkJCQkJICBzdGNiX3RtcCwgb3BfZXJyLAotCQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCQkJCQlnb3RvIGFkZF9p
dF9ub3c2OwotCQkJCQkJfQotCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2JfdG1wKTsKLQkJCQkJ
fQotCQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQkJCQkvKiB0aGUgYXNzb2Mg
d2FzIGZyZWVkPyAqLwotCQkJCQkJcmV0dXJuICgtMjEpOwotCQkJCQl9Ci0JCQkJCXJldHVybiAo
LTIyKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZQotI2VuZGlmCi0JCWlmIChwdHlwZSA9PSBTQ1RQ
X0VDTl9DQVBBQkxFKSB7Ci0JCQlwZWVyX3N1cHBvcnRzX2VjbiA9IDE7Ci0JCX0gZWxzZSBpZiAo
cHR5cGUgPT0gU0NUUF9VTFBfQURBUFRBVElPTikgewotCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUg
IT0gU0NUUF9TVEFURV9PUEVOKSB7Ci0JCQkJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9p
bmRpY2F0aW9uIGFpLCAqYWlwOwotCi0JCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwg
b2Zmc2V0LAotCQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZhaSwgc2l6ZW9mKGFp
KSk7Ci0JCQkJYWlwID0gKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiAq
KXBoZHI7Ci0JCQkJaWYgKGFpcCkgewotCQkJCQlzdGNiLT5hc29jLnBlZXJzX2FkYXB0YXRpb24g
PSBudG9obChhaXAtPmluZGljYXRpb24pOwotCQkJCQlzdGNiLT5hc29jLmFkYXB0YXRpb25fbmVl
ZGVkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TRVRfUFJJ
TV9BRERSKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSBsc3RvcmUsICpmZWU7
Ci0JCQlpbnQgbHB0eXBlOwotCQkJc3RydWN0IHNvY2thZGRyICpsc2EgPSBOVUxMOwotI2lmZGVm
IElORVQKLQkJCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0gKmZpaTsKLSNlbmRpZgot
Ci0JCQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsKLQkJCQlyZXR1cm4g
KC0xMDApOwotCQkJfQotCQkJaWYgKHBsZW4gPiBzaXplb2YobHN0b3JlKSkgewotCQkJCXJldHVy
biAoLTIzKTsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwK
LQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZsc3RvcmUsCi0JCQkJCQkgICBwbGVu
KTsKLQkJCWlmIChwaGRyID09IE5VTEwpIHsKLQkJCQlyZXR1cm4gKC0yNCk7Ci0JCQl9Ci0JCQlm
ZWUgPSAoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0gKilwaGRyOwotCQkJbHB0eXBlID0g
bnRvaHMoZmVlLT5hZGRycC5waC5wYXJhbV90eXBlKTsKLQkJCXN3aXRjaCAobHB0eXBlKSB7Ci0j
aWZkZWYgSU5FVAotCQkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKLQkJCQlpZiAocGxlbiAhPQot
CQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSkpIHsKLQkJCQkJ
U0NUUF9QUklOVEYoIlNpemVvZiBzZXRwcmltIGluIGluaXQvaW5pdCBhY2sgbm90ICVkIGJ1dCAl
ZCAtIGlnbm9yZWRcbiIsCi0JCQkJCQkgICAgKGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25m
X2FkZHJ2NF9wYXJhbSksCi0JCQkJCQkgICAgcGxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJZmlp
ID0gKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0gKilmZWU7Ci0JCQkJCXNpbi5zaW5f
YWRkci5zX2FkZHIgPSBmaWktPmFkZHJwLmFkZHI7Ci0JCQkJCWxzYSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luOwotCQkJCX0KLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlj
YXNlIFNDVFBfSVBWNl9BRERSRVNTOgotCQkJCWlmIChwbGVuICE9Ci0JCQkJICAgIHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSkpIHsKLQkJCQkJU0NUUF9QUklOVEYoIlNpemVv
ZiBzZXRwcmltICh2NikgaW4gaW5pdC9pbml0IGFjayBub3QgJWQgYnV0ICVkIC0gaWdub3JlZFxu
IiwKLQkJCQkJCSAgICAoaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSks
Ci0JCQkJCQkgICAgcGxlbik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVtY3B5KHNpbjYuc2luNl9h
ZGRyLnM2X2FkZHIsCi0JCQkJCSAgICAgICBmZWUtPmFkZHJwLmFkZHIsCi0JCQkJCSAgICAgICBz
aXplb2YoZmVlLT5hZGRycC5hZGRyKSk7Ci0JCQkJCWxzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luNjsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7
Ci0JCQl9Ci0JCQlpZiAobHNhKSB7Ci0JCQkJKHZvaWQpc2N0cF9zZXRfcHJpbWFyeV9hZGRyKHN0
Y2IsIHNhLCBOVUxMKTsKLQkJCX0KLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0hBU19OQVRf
U1VQUE9SVCkgewotCQkJc3RjYi0+YXNvYy5wZWVyX3N1cHBvcnRzX25hdCA9IDE7Ci0JCX0gZWxz
ZSBpZiAocHR5cGUgPT0gU0NUUF9QUlNDVFBfU1VQUE9SVEVEKSB7Ci0JCQkvKiBQZWVyIHN1cHBv
cnRzIHByLXNjdHAgKi8KLQkJCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMTsKLQkJfSBlbHNlIGlm
IChwdHlwZSA9PSBTQ1RQX1NVUFBPUlRFRF9DSFVOS19FWFQpIHsKLQkJCS8qIEEgc3VwcG9ydGVk
IGV4dGVuc2lvbiBjaHVuayAqLwotCQkJc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVz
X3BhcmFtICpwcl9zdXBwb3J0ZWQ7Ci0JCQl1aW50OF90IGxvY2FsX3N0b3JlW1NDVFBfUEFSQU1f
QlVGRkVSX1NJWkVdOwotCQkJaW50IG51bV9lbnQsIGk7Ci0KLQkJCWlmIChwbGVuID4gc2l6ZW9m
KGxvY2FsX3N0b3JlKSkgewotCQkJCXJldHVybiAoLTM1KTsKLQkJCX0KLQkJCXBoZHIgPSBzY3Rw
X2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqKSZsb2NhbF9zdG9yZSwgcGxlbik7Ci0JCQlpZiAocGhkciA9PSBOVUxMKSB7Ci0JCQkJcmV0
dXJuICgtMjUpOwotCQkJfQotCQkJcHJfc3VwcG9ydGVkID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRl
ZF9jaHVua190eXBlc19wYXJhbSAqKXBoZHI7Ci0JCQludW1fZW50ID0gcGxlbiAtIHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7
Ci0JCQkJc3dpdGNoIChwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW2ldKSB7Ci0JCQkJY2FzZSBT
Q1RQX0FTQ09ORjoKLQkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAxOwotCQkJCQlicmVhazsK
LQkJCQljYXNlIFNDVFBfQVNDT05GX0FDSzoKLQkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmZfYWNr
ID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjoKLQkJCQkJ
cGVlcl9zdXBwb3J0c19wcnNjdHAgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBfUEFD
S0VUX0RST1BQRUQ6Ci0JCQkJCXBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9IDE7Ci0JCQkJCWJyZWFr
OwotCQkJCWNhc2UgU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOgotCQkJCQlwZWVyX3N1cHBvcnRzX25y
c2FjayA9IDE7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6Ci0JCQkJ
CXBlZXJfc3VwcG9ydHNfcmVjb25maWcgPSAxOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFNDVFBf
QVVUSEVOVElDQVRJT046Ci0JCQkJCXBlZXJfc3VwcG9ydHNfYXV0aCA9IDE7Ci0JCQkJCWJyZWFr
OwotCQkJCWNhc2UgU0NUUF9JREFUQToKLQkJCQkJcGVlcl9zdXBwb3J0c19pZGF0YSA9IDE7Ci0J
CQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCS8qIG9uZSBJIGhhdmUgbm90IGxlYXJuZWQg
eWV0ICovCi0JCQkJCWJyZWFrOwotCi0JCQkJfQotCQkJfQotCQl9IGVsc2UgaWYgKHB0eXBlID09
IFNDVFBfUkFORE9NKSB7Ci0JCQlpZiAocGxlbiA+IHNpemVvZihyYW5kb21fc3RvcmUpKQotCQkJ
CWJyZWFrOwotCQkJaWYgKGdvdF9yYW5kb20pIHsKLQkJCQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBh
IFJBTkRPTSAqLwotCQkJCWdvdG8gbmV4dF9wYXJhbTsKLQkJCX0KLQkJCXBoZHIgPSBzY3RwX2dl
dF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKLQkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
KXJhbmRvbV9zdG9yZSwKLQkJCQkJCSAgIHBsZW4pOwotCQkJaWYgKHBoZHIgPT0gTlVMTCkKLQkJ
CQlyZXR1cm4gKC0yNik7Ci0JCQlwX3JhbmRvbSA9IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAq
KXBoZHI7Ci0JCQlyYW5kb21fbGVuID0gcGxlbiAtIHNpemVvZigqcF9yYW5kb20pOwotCQkJLyog
ZW5mb3JjZSB0aGUgcmFuZG9tIGxlbmd0aCAqLwotCQkJaWYgKHJhbmRvbV9sZW4gIT0gU0NUUF9B
VVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVEKSB7Ci0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgx
LCAiU0NUUDogaW52YWxpZCBSQU5ET00gbGVuXG4iKTsKLQkJCQlyZXR1cm4gKC0yNyk7Ci0JCQl9
Ci0JCQlnb3RfcmFuZG9tID0gMTsKLQkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0hNQUNfTElT
VCkgewotCQkJdWludDE2X3QgbnVtX2htYWNzOwotCQkJdWludDE2X3QgaTsKLQotCQkJaWYgKHBs
ZW4gPiBzaXplb2YoaG1hY3Nfc3RvcmUpKQotCQkJCWJyZWFrOwotCQkJaWYgKGdvdF9obWFjcykg
ewotCQkJCS8qIGFscmVhZHkgcHJvY2Vzc2VkIGEgSE1BQyBsaXN0ICovCi0JCQkJZ290byBuZXh0
X3BhcmFtOwotCQkJfQotCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAot
CQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopaG1hY3Nfc3RvcmUsCi0JCQkJCQkgICBw
bGVuKTsKLQkJCWlmIChwaGRyID09IE5VTEwpCi0JCQkJcmV0dXJuICgtMjgpOwotCQkJaG1hY3Mg
PSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKilwaGRyOwotCQkJaG1hY3NfbGVuID0gcGxl
biAtIHNpemVvZigqaG1hY3MpOwotCQkJbnVtX2htYWNzID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGht
YWNzLT5obWFjX2lkc1swXSk7Ci0JCQkvKiB2YWxpZGF0ZSB0aGUgaG1hYyBsaXN0ICovCi0JCQlp
ZiAoc2N0cF92ZXJpZnlfaG1hY19wYXJhbShobWFjcywgbnVtX2htYWNzKSkgewotCQkJCXJldHVy
biAoLTI5KTsKLQkJCX0KLQkJCWlmIChzdGNiLT5hc29jLnBlZXJfaG1hY3MgIT0gTlVMTCkKLQkJ
CQlzY3RwX2ZyZWVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5wZWVyX2htYWNzKTsKLQkJCXN0Y2ItPmFz
b2MucGVlcl9obWFjcyA9IHNjdHBfYWxsb2NfaG1hY2xpc3QobnVtX2htYWNzKTsKLQkJCWlmIChz
dGNiLT5hc29jLnBlZXJfaG1hY3MgIT0gTlVMTCkgewotCQkJCWZvciAoaSA9IDA7IGkgPCBudW1f
aG1hY3M7IGkrKykgewotCQkJCQkodm9pZClzY3RwX2F1dGhfYWRkX2htYWNpZChzdGNiLT5hc29j
LnBlZXJfaG1hY3MsCi0JCQkJCQkJCSAgIG50b2hzKGhtYWNzLT5obWFjX2lkc1tpXSkpOwotCQkJ
CX0KLQkJCX0KLQkJCWdvdF9obWFjcyA9IDE7Ci0JCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9D
SFVOS19MSVNUKSB7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0
b3JlKSkKLQkJCQlicmVhazsKLQkJCWlmIChnb3RfY2hrbGlzdCkgewotCQkJCS8qIGFscmVhZHkg
cHJvY2Vzc2VkIGEgQ2h1bmtzIGxpc3QgKi8KLQkJCQlnb3RvIG5leHRfcGFyYW07Ci0JCQl9Ci0J
CQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCi0JCQkJCQkgICAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKiljaHVua3Nfc3RvcmUsCi0JCQkJCQkgICBwbGVuKTsKLQkJCWlmIChw
aGRyID09IE5VTEwpCi0JCQkJcmV0dXJuICgtMzApOwotCQkJY2h1bmtzID0gKHN0cnVjdCBzY3Rw
X2F1dGhfY2h1bmtfbGlzdCAqKXBoZHI7Ci0JCQludW1fY2h1bmtzID0gcGxlbiAtIHNpemVvZigq
Y2h1bmtzKTsKLQkJCWlmIChzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MgIT0gTlVMTCkKLQkJ
CQlzY3RwX2NsZWFyX2NodW5rbGlzdChzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpOwotCQkJ
ZWxzZQotCQkJCXN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcyA9IHNjdHBfYWxsb2NfY2h1bmts
aXN0KCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2NodW5rczsgaSsrKSB7Ci0JCQkJKHZvaWQp
c2N0cF9hdXRoX2FkZF9jaHVuayhjaHVua3MtPmNodW5rX3R5cGVzW2ldLAotCQkJCQkJCSAgc3Rj
Yi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKTsKLQkJCQkvKiByZWNvcmQgYXNjb25mL2FzY29uZi1h
Y2sgaWYgbGlzdGVkICovCi0JCQkJaWYgKGNodW5rcy0+Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9B
U0NPTkYpCi0JCQkJCXNhd19hc2NvbmYgPSAxOwotCQkJCWlmIChjaHVua3MtPmNodW5rX3R5cGVz
W2ldID09IFNDVFBfQVNDT05GX0FDSykKLQkJCQkJc2F3X2FzY29uZl9hY2sgPSAxOwotCi0JCQl9
Ci0JCQlnb3RfY2hrbGlzdCA9IDE7Ci0JCX0gZWxzZSBpZiAoKHB0eXBlID09IFNDVFBfSEVBUlRC
RUFUX0lORk8pIHx8Ci0JCQkgICAocHR5cGUgPT0gU0NUUF9TVEFURV9DT09LSUUpIHx8Ci0JCQkg
ICAocHR5cGUgPT0gU0NUUF9VTlJFQ09HX1BBUkFNKSB8fAotCQkJICAgKHB0eXBlID09IFNDVFBf
Q09PS0lFX1BSRVNFUlZFKSB8fAotCQkJICAgKHB0eXBlID09IFNDVFBfU1VQUE9SVEVEX0FERFJU
WVBFKSB8fAotCQkJICAgKHB0eXBlID09IFNDVFBfQUREX0lQX0FERFJFU1MpIHx8Ci0JCQkgICAo
cHR5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgfHwKLQkJCSAgIChwdHlwZSA9PSBTQ1RQX0VS
Uk9SX0NBVVNFX0lORCkgfHwKLQkJCSAgIChwdHlwZSA9PSBTQ1RQX1NVQ0NFU1NfUkVQT1JUKSkg
ewotCQkJLyogZG9uJ3QgY2FyZSAqLyA7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKHB0eXBlICYgMHg4
MDAwKSA9PSAweDAwMDApIHsKLQkJCQkvKgotCQkJCSAqIG11c3Qgc3RvcCBwcm9jZXNzaW5nIHRo
ZSByZXN0IG9mIHRoZQotCQkJCSAqIHBhcmFtJ3MuIEFueSByZXBvcnQgYml0cyB3ZXJlIGhhbmRs
ZWQKLQkJCQkgKiB3aXRoIHRoZSBjYWxsIHRvCi0JCQkJICogc2N0cF9hcmV0aGVyZV91bnJlY29n
bml6ZWRfcGFyYW1ldGVycygpCi0JCQkJICogd2hlbiB0aGUgSU5JVCBvciBJTklULUFDSyB3YXMg
Zmlyc3Qgc2Vlbi4KLQkJCQkgKi8KLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JbmV4dF9wYXJh
bToKLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4pOwotCQlpZiAob2Zmc2V0ID49IGxpbWl0
KSB7Ci0JCQlicmVhazsKLQkJfQotCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZz
ZXQsICZwYXJhbV9idWYsCi0JCQkJCSAgIHNpemVvZihwYXJhbV9idWYpKTsKLQl9Ci0JLyogTm93
IGNoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHB1cmdlIGFueSBhZGRyZXNzZXMgKi8KLQlUQUlM
UV9GT1JFQUNIX1NBRkUobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQsIG5uZXQpIHsK
LQkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9UX0lOX0FTU09DKSA9PQotCQkg
ICAgU0NUUF9BRERSX05PVF9JTl9BU1NPQykgewotCQkJLyogVGhpcyBhZGRyZXNzIGhhcyBiZWVu
IHJlbW92ZWQgZnJvbSB0aGUgYXNvYyAqLwotCQkJLyogcmVtb3ZlIGFuZCBmcmVlIGl0ICovCi0J
CQlzdGNiLT5hc29jLm51bW5ldHMtLTsKLQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5uZXRz
LCBuZXQsIHNjdHBfbmV4dCk7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIobmV0KTsKLQkJCWlm
IChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7Ci0JCQkJc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gTlVMTDsKLQkJCQlzY3RwX3NlbGVjdF9wcmltYXJ5X2Rl
c3RpbmF0aW9uKHN0Y2IpOwotCQkJfQotCQl9Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5lY25fc3Vw
cG9ydGVkID09IDEpICYmCi0JICAgIChwZWVyX3N1cHBvcnRzX2VjbiA9PSAwKSkgewotCQlzdGNi
LT5hc29jLmVjbl9zdXBwb3J0ZWQgPSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFzb2MucHJzY3RwX3N1
cHBvcnRlZCA9PSAxKSAmJgotCSAgICAocGVlcl9zdXBwb3J0c19wcnNjdHAgPT0gMCkpIHsKLQkJ
c3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID0gMDsKLQl9Ci0JaWYgKChzdGNiLT5hc29jLmF1
dGhfc3VwcG9ydGVkID09IDEpICYmCi0JICAgICgocGVlcl9zdXBwb3J0c19hdXRoID09IDApIHx8
Ci0JICAgICAoZ290X3JhbmRvbSA9PSAwKSB8fCAoZ290X2htYWNzID09IDApKSkgewotCQlzdGNi
LT5hc29jLmF1dGhfc3VwcG9ydGVkID0gMDsKLQl9Ci0JaWYgKChzdGNiLT5hc29jLmFzY29uZl9z
dXBwb3J0ZWQgPT0gMSkgJiYKLQkgICAgKChwZWVyX3N1cHBvcnRzX2FzY29uZiA9PSAwKSB8fCAo
cGVlcl9zdXBwb3J0c19hc2NvbmZfYWNrID09IDApIHx8Ci0JICAgICAoc3RjYi0+YXNvYy5hdXRo
X3N1cHBvcnRlZCA9PSAwKSB8fAotCSAgICAgKHNhd19hc2NvbmYgPT0gMCkgfHwgKHNhd19hc2Nv
bmZfYWNrID09IDApKSkgewotCQlzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPSAwOwotCX0K
LQlpZiAoKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDEpICYmCi0JICAgIChwZWVy
X3N1cHBvcnRzX3JlY29uZmlnID09IDApKSB7Ci0JCXN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9y
dGVkID0gMDsKLQl9Ci0JaWYgKChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAxKSAmJgot
CSAgICAocGVlcl9zdXBwb3J0c19pZGF0YSA9PSAwKSkgewotCQlzdGNiLT5hc29jLmlkYXRhX3N1
cHBvcnRlZCA9IDA7Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID09IDEp
ICYmCi0JICAgIChwZWVyX3N1cHBvcnRzX25yc2FjayA9PSAwKSkgewotCQlzdGNiLT5hc29jLm5y
c2Fja19zdXBwb3J0ZWQgPSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0
ZWQgPT0gMSkgJiYKLQkgICAgKHBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9PSAwKSl7Ci0JCXN0Y2It
PmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPSAwOwotCX0KLQkvKiB2YWxpZGF0ZSBhdXRoZW50aWNh
dGlvbiByZXF1aXJlZCBwYXJhbWV0ZXJzICovCi0JaWYgKChwZWVyX3N1cHBvcnRzX2F1dGggPT0g
MCkgJiYgKGdvdF9jaGtsaXN0ID09IDEpKSB7Ci0JCS8qIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBh
dXRoIGJ1dCBzZW50IGEgY2h1bmtzIGxpc3Q/ICovCi0JCXJldHVybiAoLTMxKTsKLQl9Ci0JaWYg
KChwZWVyX3N1cHBvcnRzX2FzY29uZiA9PSAxKSAmJiAocGVlcl9zdXBwb3J0c19hdXRoID09IDAp
KSB7Ci0JCS8qIHBlZXIgc3VwcG9ydHMgYXNjb25mIGJ1dCBub3QgYXV0aD8gKi8KLQkJcmV0dXJu
ICgtMzIpOwotCX0gZWxzZSBpZiAoKHBlZXJfc3VwcG9ydHNfYXNjb25mID09IDEpICYmCi0JICAg
ICAgICAgICAocGVlcl9zdXBwb3J0c19hdXRoID09IDEpICYmCi0JCSAgICgoc2F3X2FzY29uZiA9
PSAwKSB8fCAoc2F3X2FzY29uZl9hY2sgPT0gMCkpKSB7Ci0JCXJldHVybiAoLTMzKTsKLQl9Ci0J
LyogY29uY2F0ZW5hdGUgdGhlIGZ1bGwgcmFuZG9tIGtleSAqLwotCWtleWxlbiA9IHNpemVvZigq
cF9yYW5kb20pICsgcmFuZG9tX2xlbiArIHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuOwotCWlm
IChjaHVua3MgIT0gTlVMTCkgewotCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2No
dW5rczsKLQl9Ci0JbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7Ci0JaWYgKG5ld19r
ZXkgIT0gTlVMTCkgewotCQkvKiBjb3B5IGluIHRoZSBSQU5ET00gKi8KLQkJaWYgKHBfcmFuZG9t
ICE9IE5VTEwpIHsKLQkJCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbjsK
LQkJCW1lbWNweShuZXdfa2V5LT5rZXksIHBfcmFuZG9tLCBrZXlsZW4pOwotCQl9Ci0JCS8qIGFw
cGVuZCBpbiB0aGUgQVVUSCBjaHVua3MgKi8KLQkJaWYgKGNodW5rcyAhPSBOVUxMKSB7Ci0JCQlt
ZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBjaHVua3MsCi0JCQkgICAgICAgc2l6ZW9mKCpj
aHVua3MpICsgbnVtX2NodW5rcyk7Ci0JCQlrZXlsZW4gKz0gc2l6ZW9mKCpjaHVua3MpICsgbnVt
X2NodW5rczsKLQkJfQotCQkvKiBhcHBlbmQgaW4gdGhlIEhNQUNzICovCi0JCWlmIChobWFjcyAh
PSBOVUxMKSB7Ci0JCQltZW1jcHkobmV3X2tleS0+a2V5ICsga2V5bGVuLCBobWFjcywKLQkJCSAg
ICAgICBzaXplb2YoKmhtYWNzKSArIGhtYWNzX2xlbik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBm
YWlsZWQgdG8gZ2V0IG1lbW9yeSBmb3IgdGhlIGtleSAqLwotCQlyZXR1cm4gKC0zNCk7Ci0JfQot
CWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnBlZXJfcmFuZG9tICE9IE5VTEwpCi0JCXNjdHBfZnJl
ZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3JhbmRvbSk7Ci0Jc3RjYi0+YXNvYy5hdXRo
aW5mby5wZWVyX3JhbmRvbSA9IG5ld19rZXk7Ci0Jc2N0cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2Is
IHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5aWQpOwotCXNjdHBfY2xlYXJfY2FjaGVka2V5
cyhzdGNiLCBzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5aWQpOwotCi0JcmV0dXJuICgwKTsK
LX0KLQotaW50Ci1zY3RwX3NldF9wcmltYXJ5X2FkZHIoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc29ja2FkZHIgKnNhLAotCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0J
LyogbWFrZSBzdXJlIHRoZSByZXF1ZXN0ZWQgcHJpbWFyeSBhZGRyZXNzIGV4aXN0cyBpbiB0aGUg
YXNzb2MgKi8KLQlpZiAobmV0ID09IE5VTEwgJiYgc2EpCi0JCW5ldCA9IHNjdHBfZmluZG5ldChz
dGNiLCBzYSk7Ci0KLQlpZiAobmV0ID09IE5VTEwpIHsKLQkJLyogZGlkbid0IGZpbmQgdGhlIHJl
cXVlc3RlZCBwcmltYXJ5IGFkZHJlc3MhICovCi0JCXJldHVybiAoLTEpOwotCX0gZWxzZSB7Ci0J
CS8qIHNldCB0aGUgcHJpbWFyeSBhZGRyZXNzICovCi0JCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfVU5DT05GSVJNRUQpIHsKLQkJCS8qIE11c3QgYmUgY29uZmlybWVkLCBzbyBxdWV1
ZSB0byBzZXQgKi8KLQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVRX1BSSU1BUlk7
Ci0JCQlyZXR1cm4gKDApOwotCQl9Ci0JCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9
IG5ldDsKLQkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSAmJiAoc3RjYi0+
YXNvYy5hbHRlcm5hdGUpKSB7Ci0JCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5h
bHRlcm5hdGUpOwotCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOwotCQl9Ci0JCW5ldCA9
IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOwotCQlpZiAobmV0ICE9IHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbikgewotCQkJLyogZmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlzIE5P
VCB0aGUgcHJpbWFyeQotCQkJICogc2N0cF9jbXBhZGRyKCkgaXMgbXVjaCBtb3JlIGVmZmljaWVu
dCBpZgotCQkJICogdGhlIHByaW1hcnkgaXMgdGhlIGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0
Ci0JCQkgKiBzby4KLQkJCSAqLwotCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgc2N0cF9uZXh0KTsKLQkJCVRBSUxRX0lOU0VS
VF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwg
c2N0cF9uZXh0KTsKLQkJfQotCQlyZXR1cm4gKDApOwotCX0KLX0KLQotaW50Ci1zY3RwX2lzX3Z0
YWdfZ29vZCh1aW50MzJfdCB0YWcsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgc3Ry
dWN0IHRpbWV2YWwgKm5vdykKLXsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gc2VydmVzIHR3byBw
dXJwb3Nlcy4gSXQgd2lsbCBzZWUgaWYgYSBUQUcgY2FuIGJlCi0JICogcmUtdXNlZCBhbmQgcmV0
dXJuIDEgZm9yIHllcyBpdCBpcyBvayBhbmQgMCBmb3IgZG9uJ3QgdXNlIHRoYXQKLQkgKiB0YWcu
IEEgc2Vjb25kYXJ5IGZ1bmN0aW9uIGl0IHdpbGwgZG8gaXMgcHVyZ2Ugb3V0IG9sZCB0YWdzIHRo
YXQKLQkgKiBjYW4gYmUgcmVtb3ZlZC4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFp
bjsKLQlzdHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2s7Ci0Jc3RydWN0IHNjdHBhc29j
aGVhZCAqaGVhZDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JaW50IGk7Ci0KLQlTQ1RQX0lO
UF9JTkZPX1JMT0NLKCk7Ci0JaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKVtT
Q1RQX1BDQkhBU0hfQVNPQyh0YWcsCi0JCQkJCQkJCVNDVFBfQkFTRV9JTkZPKGhhc2hhc29jbWFy
aykpXTsKLQlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwgc2N0cF9hc29jcykgewotCQkvKiBXZSBj
aG9vc2Ugbm90IHRvIGxvY2sgYW55dGhpbmcgaGVyZS4gVENCJ3MgY2FuJ3QgYmUKLQkJICogcmVt
b3ZlZCBzaW5jZSB3ZSBoYXZlIHRoZSByZWFkIGxvY2ssIHNvIHRoZXkgY2FuJ3QKLQkJICogYmUg
ZnJlZWQgb24gdXMsIHNhbWUgdGhpbmcgZm9yIHRoZSBJTlAuIEkgbWF5Ci0JCSAqIGJlIHdyb25n
IHdpdGggdGhpcyBhc3N1bXB0aW9uLCBidXQgd2Ugd2lsbCBnbwotCQkgKiB3aXRoIGl0IGZvciBu
b3cgOi0pCi0JCSAqLwotCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoc3RjYi0+
YXNvYy5teV92dGFnID09IHRhZykgewotCQkJLyogY2FuZGlkYXRlICovCi0JCQlpZiAoc3RjYi0+
cnBvcnQgIT0gcnBvcnQpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCWlmIChzdGNiLT5zY3Rw
X2VwLT5zY3RwX2xwb3J0ICE9IGxwb3J0KSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBJ
dHMgYSB1c2VkIHRhZyBzZXQgKi8KLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJcmV0
dXJuICgwKTsKLQkJfQotCX0KLQljaGFpbiA9ICZTQ1RQX0JBU0VfSU5GTyh2dGFnX3RpbWV3YWl0
KVsodGFnICUgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRSldOwotCS8qIE5vdyB3aGF0IGFib3V0
IHRpbWVkIHdhaXQgPyAqLwotCUxJU1RfRk9SRUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBf
bnh0X3RhZ2Jsb2NrKSB7Ci0JCS8qCi0JCSAqIEJsb2NrKHMpIGFyZSBwcmVzZW50LCBsZXRzIHNl
ZSBpZiB3ZSBoYXZlIHRoaXMgdGFnIGluIHRoZQotCQkgKiBsaXN0Ci0JCSAqLwotCQlmb3IgKGkg
PSAwOyBpIDwgU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7Ci0JCQlpZiAodHdhaXRf
YmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gMCkgewotCQkJCS8qIG5vdCB1c2VkICovCi0J
CQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKChsb25nKXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2Nr
W2ldLnR2X3NlY19hdF9leHBpcmUgIDwKLQkJCQkgICBub3ctPnR2X3NlYykgewotCQkJCS8qIEF1
ZGl0IGV4cGlyZXMgdGhpcyBndXkgKi8KLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50
dl9zZWNfYXRfZXhwaXJlID0gMDsKLQkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3Rh
ZyA9IDA7Ci0JCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOwotCQkJCXR3
YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gMDsKLQkJCX0gZWxzZSBpZiAoKHR3YWl0
X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZfdGFnID09IHRhZykgJiYKLQkJCQkgICAodHdhaXRfYmxv
Y2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPT0gbHBvcnQpICYmCi0JCQkJICAgKHR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnJwb3J0ID09IHJwb3J0KSkgewotCQkJCS8qIEJhZCB0YWcsIHNvcnJ5
IDo8ICovCi0JCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJ
CX0KLQkJfQotCX0KLQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQlyZXR1cm4gKDEpOwotfQot
Ci1zdGF0aWMgdm9pZAotc2N0cF9kcmFpbl9tYnVmcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCi17
Ci0JLyoKLQkgKiBXZSBtdXN0IGh1bnQgdGhpcyBhc3NvY2lhdGlvbiBmb3IgTUJVRidzIHBhc3Qg
dGhlIGN1bWFjayAoaS5lLgotCSAqIG91dCBvZiBvcmRlciBkYXRhIHRoYXQgd2UgY2FuIHJlbmVn
ZSBvbikuCi0JICovCi0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7Ci0Jc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKLQl1aW50MzJfdCBjdW11bGF0aXZlX3Rzbl9wMTsK
LQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jb250cm9sOwotCWludCBj
bnQsIHN0cm1hdDsKLQl1aW50MzJfdCBnYXAsIGk7Ci0JaW50IGZuZCA9IDA7Ci0KLQkvKiBXZSBs
b29rIGZvciBhbnl0aGluZyBsYXJnZXIgdGhhbiB0aGUgY3VtLWFjayArIDEgKi8KLQotCWFzb2Mg
PSAmc3RjYi0+YXNvYzsKLQlpZiAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gPT0gYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX21hcCkgewotCQkvKiBub25lIHdlIGNhbiByZW5lZyBvbi4gKi8KLQkJcmV0
dXJuOwotCX0KLQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZSk7Ci0J
Y3VtdWxhdGl2ZV90c25fcDEgPSBhc29jLT5jdW11bGF0aXZlX3RzbiArIDE7Ci0JY250ID0gMDsK
LQkvKiBPayB0aGF0IHdhcyBmdW4sIG5vdyB3ZSB3aWxsIGRyYWluIGFsbCB0aGUgaW5ib3VuZCBz
dHJlYW1zPyAqLwotCWZvciAoc3RybWF0ID0gMDsgc3RybWF0IDwgYXNvYy0+c3RyZWFtaW5jbnQ7
IHN0cm1hdCsrKSB7Ci0JCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+c3RybWlu
W3N0cm1hdF0uaW5xdWV1ZSwgbmV4dF9pbnN0cm0sIG5jb250cm9sKSB7Ci0jaWZkZWYgSU5WQVJJ
QU5UUwotCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX09SREVSRUQgKSB7Ci0J
CQkJcGFuaWMoIkh1aCBjb250cm9sOiAlcCBvbl9xOiAlZCAtLSBub3Qgb3JkZXJlZD8iLAotCQkJ
CSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlm
IChTQ1RQX1RTTl9HVChjb250cm9sLT5zaW5mb190c24sIGN1bXVsYXRpdmVfdHNuX3AxKSkgewot
CQkJCS8qIFllcCBpdCBpcyBhYm92ZSBjdW0tYWNrICovCi0JCQkJY250Kys7Ci0JCQkJU0NUUF9D
QUxDX1RTTl9UT19HQVAoZ2FwLCBjb250cm9sLT5zaW5mb190c24sIGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24pOwotCQkJCUtBU1NFUlQoY29udHJvbC0+bGVuZ3RoID4gMCwgKCJjb250cm9s
IGhhcyB6ZXJvIGxlbmd0aCIpKTsKLQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+
PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBj
b250cm9sLT5sZW5ndGg7Ci0JCQkJfSBlbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCXBh
bmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3Ro
ICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKLSNlbHNl
Ci0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOwotI2VuZGlmCi0JCQkJfQotCQkJ
CXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1zKTsKLQkJCQlTQ1RQX1VO
U0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JCQkJaWYgKGNvbnRy
b2wtPm9uX3JlYWRfcSkgewotCQkJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPnNjdHBfZXAtPnJlYWRf
cXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCQljb250cm9sLT5vbl9yZWFkX3EgPSAwOwotCQkJ
CX0KLQkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnN0cm1pbltzdHJtYXRdLmlucXVldWUsIGNvbnRy
b2wsIG5leHRfaW5zdHJtKTsKLQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOwotCQkJCWlmIChj
b250cm9sLT5kYXRhKSB7Ci0JCQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCQkJ
Y29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0JCQkJfQotCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihj
b250cm9sLT53aG9Gcm9tKTsKLQkJCQkvKiBOb3cgaXRzIHJlYXNtPyAqLwotCQkJCVRBSUxRX0ZP
UkVBQ0hfU0FGRShjaGssICZjb250cm9sLT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7Ci0JCQkJ
CWNudCsrOwotCQkJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGNoay0+cmVjLmRhdGEudHNu
LCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKLQkJCQkJS0FTU0VSVChjaGstPnNlbmRf
c2l6ZSA+IDAsICgiY2h1bmsgaGFzIHplcm8gbGVuZ3RoIikpOwotCQkJCQlpZiAoYXNvYy0+c2l6
ZV9vbl9yZWFzbV9xdWV1ZSA+PSBjaGstPnNlbmRfc2l6ZSkgewotCQkJCQkJYXNvYy0+c2l6ZV9v
bl9yZWFzbV9xdWV1ZSAtPSBjaGstPnNlbmRfc2l6ZTsKLQkJCQkJfSBlbHNlIHsKLSNpZmRlZiBJ
TlZBUklBTlRTCi0JCQkJCQlwYW5pYygic2l6ZV9vbl9yZWFzbV9xdWV1ZSA9ICV1IHNtYWxsZXIg
dGhhbiBjaHVuayBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlLCBjaGstPnNl
bmRfc2l6ZSk7Ci0jZWxzZQotCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9IDA7Ci0j
ZW5kaWYKLQkJCQkJfQotCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9yZWFzbV9x
dWV1ZSk7Ci0JCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwg
Z2FwKTsKLQkJCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQp
OwotCQkJCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsK
LQkJCQkJCWNoay0+ZGF0YSA9IE5VTEw7Ci0JCQkJCX0KLQkJCQkJc2N0cF9mcmVlX2FfY2h1bmso
c3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJCX0KLQkJCQlzY3RwX2ZyZWVfYV9y
ZWFkcShzdGNiLCBjb250cm9sKTsKLQkJCX0KLQkJfQotCQlUQUlMUV9GT1JFQUNIX1NBRkUoY29u
dHJvbCwgJmFzb2MtPnN0cm1pbltzdHJtYXRdLnVub19pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNv
bnRyb2wpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCQlpZiAoY29udHJvbC0+b25fc3RybV9xICE9
IFNDVFBfT05fVU5PUkRFUkVEICkgewotCQkJCXBhbmljKCJIdWggY29udHJvbDogJXAgb25fcTog
JWQgLS0gbm90IHVub3JkZXJlZD8iLAotCQkJCSAgICAgIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0
cm1fcSk7Ci0JCQl9Ci0jZW5kaWYKLQkJCWlmIChTQ1RQX1RTTl9HVChjb250cm9sLT5zaW5mb190
c24sIGN1bXVsYXRpdmVfdHNuX3AxKSkgewotCQkJCS8qIFllcCBpdCBpcyBhYm92ZSBjdW0tYWNr
ICovCi0JCQkJY250Kys7Ci0JCQkJU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBjb250cm9sLT5z
aW5mb190c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOwotCQkJCUtBU1NFUlQoY29u
dHJvbC0+bGVuZ3RoID4gMCwgKCJjb250cm9sIGhhcyB6ZXJvIGxlbmd0aCIpKTsKLQkJCQlpZiAo
YXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKLQkJCQkJYXNv
Yy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7Ci0JCQkJfSBlbHNlIHsK
LSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUg
c21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cywgY29udHJvbC0+bGVuZ3RoKTsKLSNlbHNlCi0JCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVh
bXMgPSAwOwotI2VuZGlmCi0JCQkJfQotCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29u
X2FsbF9zdHJlYW1zKTsKLQkJCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdf
YXJyYXksIGdhcCk7Ci0JCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgewotCQkJCQlUQUlMUV9S
RU1PVkUoJnN0Y2ItPnNjdHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCQlj
b250cm9sLT5vbl9yZWFkX3EgPSAwOwotCQkJCX0KLQkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnN0
cm1pbltzdHJtYXRdLnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7Ci0JCQkJY29u
dHJvbC0+b25fc3RybV9xID0gMDsKLQkJCQlpZiAoY29udHJvbC0+ZGF0YSkgewotCQkJCQlzY3Rw
X21fZnJlZW0oY29udHJvbC0+ZGF0YSk7Ci0JCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOwotCQkJ
CX0KLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+d2hvRnJvbSk7Ci0JCQkJLyog
Tm93IGl0cyByZWFzbT8gKi8KLQkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+
cmVhc20sIHNjdHBfbmV4dCwgbmNoaykgewotCQkJCQljbnQrKzsKLQkJCQkJU0NUUF9DQUxDX1RT
Tl9UT19HQVAoZ2FwLCBjaGstPnJlYy5kYXRhLnRzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNl
X3Rzbik7Ci0JCQkJCUtBU1NFUlQoY2hrLT5zZW5kX3NpemUgPiAwLCAoImNodW5rIGhhcyB6ZXJv
IGxlbmd0aCIpKTsKLQkJCQkJaWYgKGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPj0gY2hrLT5z
ZW5kX3NpemUpIHsKLQkJCQkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgLT0gY2hrLT5zZW5k
X3NpemU7Ci0JCQkJCX0gZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCQkJcGFuaWMoInNp
emVfb25fcmVhc21fcXVldWUgPSAldSBzbWFsbGVyIHRoYW4gY2h1bmsgbGVuZ3RoICV1IiwgYXNv
Yy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSwgY2hrLT5zZW5kX3NpemUpOwotI2Vsc2UKLQkJCQkJCWFz
b2MtPnNpemVfb25fcmVhc21fcXVldWUgPSAwOwotI2VuZGlmCi0JCQkJCX0KLQkJCQkJc2N0cF91
Y291bnRfZGVjcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOwotCQkJCQlTQ1RQX1VOU0VUX1RT
Tl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGdhcCk7Ci0JCQkJCVRBSUxRX1JFTU9WRSgm
Y29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKLQkJCQkJaWYgKGNoay0+ZGF0YSkgewot
CQkJCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7Ci0JCQkJCQljaGstPmRhdGEgPSBOVUxMOwot
CQkJCQl9Ci0JCQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9D
S0VEKTsKLQkJCQl9Ci0JCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7Ci0JCQl9
Ci0JCX0KLQl9Ci0JaWYgKGNudCkgewotCQkvKiBXZSBtdXN0IGJhY2sgZG93biB0byBzZWUgd2hh
dCB0aGUgbmV3IGhpZ2hlc3QgaXMgKi8KLQkJZm9yIChpID0gYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX21hcDsgU0NUUF9UU05fR0UoaSwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7IGkt
LSkgewotCQkJU0NUUF9DQUxDX1RTTl9UT19HQVAoZ2FwLCBpLCBhc29jLT5tYXBwaW5nX2FycmF5
X2Jhc2VfdHNuKTsKLQkJCWlmIChTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJy
YXksIGdhcCkpIHsKLQkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gaTsKLQkJCQlm
bmQgPSAxOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghZm5kKSB7Ci0JCQlhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiAtIDE7
Ci0JCX0KLQotCQkvKgotCQkgKiBRdWVzdGlvbiwgc2hvdWxkIHdlIGdvIHRocm91Z2ggdGhlIGRl
bGl2ZXJ5IHF1ZXVlPyBUaGUgb25seQotCQkgKiByZWFzb24gdGhpbmdzIGFyZSBvbiBoZXJlIGlz
IHRoZSBhcHAgbm90IHJlYWRpbmcgT1IgYSBwLWQtYXBpIHVwLgotCQkgKiBBbiBhdHRhY2tlciBD
T1VMRCBzZW5kIGVub3VnaCBpbiB0byBpbml0aWF0ZSB0aGUgUEQtQVBJIGFuZCB0aGVuCi0JCSAq
IHNlbmQgYSBidW5jaCBvZiBzdHVmZiB0byBvdGhlciBzdHJlYW1zLi4uIHRoZXNlIHdvdWxkIHdp
bmQgdXAgb24KLQkJICogdGhlIGRlbGl2ZXJ5IHF1ZXVlLi4gYW5kIHRoZW4gd2Ugd291bGQgbm90
IGdldCB0byB0aGVtLiBCdXQgaW4KLQkJICogb3JkZXIgdG8gZG8gdGhpcyBJIHRoZW4gaGF2ZSB0
byBiYWNrLXRyYWNrIGFuZCB1bi1kZWxpdmVyCi0JCSAqIHNlcXVlbmNlIG51bWJlcnMgaW4gc3Ry
ZWFtcy4uIGVsLXl1Y2tvLiBJIHRoaW5rIGZvciBub3cgd2Ugd2lsbAotCQkgKiBOT1QgbG9vayBh
dCB0aGUgZGVsaXZlcnkgcXVldWUgYW5kIGxlYXZlIGl0IHRvIGJlIHNvbWV0aGluZyB0bwotCQkg
KiBjb25zaWRlciBsYXRlci4gQW4gYWx0ZXJuYXRpdmUgd291bGQgYmUgdG8gYWJvcnQgdGhlIFAt
RC1BUEkgd2l0aAotCQkgKiBhIG5vdGlmaWNhdGlvbiBhbmQgdGhlbiBkZWxpdmVyIHRoZSBkYXRh
Li4uLiBPciBhbm90aGVyIG1ldGhvZAotCQkgKiBtaWdodCBiZSB0byBrZWVwIHRyYWNrIG9mIGhv
dyBtYW55IHRpbWVzIHRoZSBzaXR1YXRpb24gb2NjdXJzIGFuZAotCQkgKiBpZiB3ZSBzZWUgYSBw
b3NzaWJsZSBhdHRhY2sgdW5kZXJ3YXkganVzdCBhYm9ydCB0aGUgYXNzb2NpYXRpb24uCi0JCSAq
LwotI2lmZGVmIFNDVFBfREVCVUcKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJGcmVlZCAl
ZCBjaHVua3MgZnJvbSByZW5lZyBoYXJ2ZXN0XG4iLCBjbnQpOwotI2VuZGlmCi0JCS8qCi0JCSAq
IE5vdyBkbyB3ZSBuZWVkIHRvIGZpbmQgYSBuZXcKLQkJICogYXNvYy0+aGlnaGVzdF90c25faW5z
aWRlX21hcD8KLQkJICovCi0JCWFzb2MtPmxhc3RfcmV2b2tlX2NvdW50ID0gY250OwotCQkodm9p
ZClTQ1RQX09TX1RJTUVSX1NUT1AoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1lcik7Ci0JCS8q
c2FfaWdub3JlIE5PX05VTExfQ0hLKi8KLQkJc2N0cF9zZW5kX3NhY2soc3RjYiwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQkJc2N0cF9jaHVua19vdXRwdXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9PVVRQVVRfRlJPTV9EUkFJTiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQl9Ci0JLyoKLQkgKiBB
bm90aGVyIGlzc3VlLCBpbiB1bi1zZXR0aW5nIHRoZSBUU04ncyBpbiB0aGUgbWFwcGluZyBhcnJh
eSB3ZQotCSAqIERJRCBOT1QgYWRqdXN0IHRoZSBoaWdoZXN0X3RzbiBtYXJrZXIuICBUaGlzIHdp
bGwgY2F1c2Ugb25lIG9mIHR3bwotCSAqIHRoaW5ncyB0byBvY2N1ci4gSXQgbWF5IGNhdXNlIHVz
IHRvIGRvIGV4dHJhIHdvcmsgaW4gY2hlY2tpbmcgZm9yCi0JICogb3VyIG1hcHBpbmcgYXJyYXkg
bW92ZW1lbnQuIE1vcmUgaW1wb3J0YW50bHkgaXQgbWF5IGNhdXNlIHVzIHRvCi0JICogU0FDSyBl
dmVyeSBkYXRhZ3JhbS4gVGhpcyBtYXkgbm90IGJlIGEgYmFkIHRoaW5nIHRob3VnaCBzaW5jZSB3
ZQotCSAqIHdpbGwgcmVjb3ZlciBvbmNlIHdlIGdldCBvdXIgY3VtLWFjayBhYm92ZSBhbmQgYWxs
IHRoaXMgc3R1ZmYgd2UKLQkgKiBkdW1wZWQgcmVjb3ZlcmVkLgotCSAqLwotfQotCi12b2lkCi1z
Y3RwX2RyYWluKCkKLXsKLQkvKgotCSAqIFdlIG11c3Qgd2FsayB0aGUgUENCIGxpc3RzIGZvciBB
TEwgYXNzb2NpYXRpb25zIGhlcmUuIFRoZSBzeXN0ZW0KLQkgKiBpcyBMT1cgb24gTUJVRidzIGFu
ZCBuZWVkcyBoZWxwLiBUaGlzIGlzIHdoZXJlIHJlbmVnaW5nIHdpbGwKLQkgKiBvY2N1ci4gV2Ug
cmVhbGx5IGhvcGUgdGhpcyBkb2VzIE5PVCBoYXBwZW4hCi0JICovCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JVk5FVF9JVEVSQVRPUl9E
RUNMKHZuZXRfaXRlcik7Ci0jZWxzZQotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0
IHNjdHBfdGNiICpzdGNiOwotCi0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcHJvdG9jb2xfZHJhaW5f
Y2FsbHMpOwotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsKLQkJ
cmV0dXJuOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMTAwMAotCVZORVRfTElTVF9STE9DS19OT1NMRUVQKCk7Ci0JVk5FVF9G
T1JFQUNIKHZuZXRfaXRlcikgewotCQlDVVJWTkVUX1NFVCh2bmV0X2l0ZXIpOwotCQlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOwotCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxscyk7Ci0JCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsKLSNpZmRlZiBWSU1BR0UKLQkJCWNvbnRp
bnVlOwotI2Vsc2UKLQkJCXJldHVybjsKLSNlbmRpZgotCQl9Ci0jZW5kaWYKLQkJU0NUUF9JTlBf
SU5GT19STE9DSygpOwotCQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9CQVNFX0lORk8obGlzdGhl
YWQpLCBzY3RwX2xpc3QpIHsKLQkJCS8qIEZvciBlYWNoIGVuZHBvaW50ICovCi0JCQlTQ1RQX0lO
UF9STE9DSyhpbnApOwotCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkvKiBGb3IgZWFjaCBhc3NvY2lhdGlvbiAqLwotCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJc2N0cF9kcmFpbl9tYnVmcyhzdGNiKTsKLQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0K
LQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNVUlZORVRfUkVTVE9SRSgpOwotCX0KLQlW
TkVUX0xJU1RfUlVOTE9DS19OT1NMRUVQKCk7Ci0jZW5kaWYKLX0KLQotLyoKLSAqIHN0YXJ0IGEg
bmV3IGl0ZXJhdG9yCi0gKiBpdGVyYXRlcyB0aHJvdWdoIGFsbCBlbmRwb2ludHMgYW5kIGFzc29j
aWF0aW9ucyBiYXNlZCBvbiB0aGUgcGNiX3N0YXRlCi0gKiBmbGFncyBhbmQgYXNvY19zdGF0ZS4g
ICJhZiIgKG1hbmRhdG9yeSkgaXMgZXhlY3V0ZWQgZm9yIGFsbCBtYXRjaGluZwotICogYXNzb2Nz
IGFuZCAiZWYiIChvcHRpb25hbCkgaXMgZXhlY3V0ZWQgd2hlbiB0aGUgaXRlcmF0b3IgY29tcGxl
dGVzLgotICogImlucGYiIChvcHRpb25hbCkgaXMgZXhlY3V0ZWQgZm9yIGVhY2ggbmV3IGVuZHBv
aW50IGFzIGl0IGlzIGJlaW5nCi0gKiBpdGVyYXRlZCB0aHJvdWdoLiBpbnBlIChvcHRpb25hbCkg
aXMgY2FsbGVkIHdoZW4gdGhlIGlucCBjb21wbGV0ZXMKLSAqIGl0cyB3YXkgdGhyb3VnaCBhbGwg
dGhlIHN0Y2JzLgotICovCi1pbnQKLXNjdHBfaW5pdGlhdGVfaXRlcmF0b3IoaW5wX2Z1bmMgaW5w
ZiwKLQkJICAgICAgIGFzb2NfZnVuYyBhZiwKLQkJICAgICAgIGlucF9mdW5jIGlucGUsCi0JCSAg
ICAgICB1aW50MzJfdCBwY2Jfc3RhdGUsCi0JCSAgICAgICB1aW50MzJfdCBwY2JfZmVhdHVyZXMs
Ci0JCSAgICAgICB1aW50MzJfdCBhc29jX3N0YXRlLAotCQkgICAgICAgdm9pZCAqYXJncCwKLQkJ
ICAgICAgIHVpbnQzMl90IGFyZ2ksCi0JCSAgICAgICBlbmRfZnVuYyBlZiwKLQkJICAgICAgIHN0
cnVjdCBzY3RwX2lucGNiICpzX2lucCwKLQkJICAgICAgIHVpbnQ4X3QgY2h1bmtfb3V0cHV0X29m
ZikKLXsKLQlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQgPSBOVUxMOwotCi0JaWYgKGFmID09IE5V
TEwpIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2lu
aXRpYWxpemVkKSA9PSAwKSB7Ci0JCVNDVFBfUFJJTlRGKCIlczogYWJvcnQgb24gaW5pdGlhbGl6
ZSBiZWluZyAlZFxuIiwgX19mdW5jX18sCi0JCSAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoc2N0
cF9wY2JfaW5pdGlhbGl6ZWQpKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCVNDVFBfTUFMTE9DKGl0
LCBzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqLCBzaXplb2Yoc3RydWN0IHNjdHBfaXRlcmF0b3IpLAot
CQkgICAgU0NUUF9NX0lURVIpOwotCWlmIChpdCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9NRU0pOwotCQly
ZXR1cm4gKEVOT01FTSk7Ci0JfQotCW1lbXNldChpdCwgMCwgc2l6ZW9mKCppdCkpOwotCWl0LT5m
dW5jdGlvbl9hc3NvYyA9IGFmOwotCWl0LT5mdW5jdGlvbl9pbnAgPSBpbnBmOwotCWlmIChpbnBm
KQotCQlpdC0+ZG9uZV9jdXJyZW50X2VwID0gMDsKLQllbHNlCi0JCWl0LT5kb25lX2N1cnJlbnRf
ZXAgPSAxOwotCWl0LT5mdW5jdGlvbl9hdGVuZCA9IGVmOwotCWl0LT5wb2ludGVyID0gYXJncDsK
LQlpdC0+dmFsID0gYXJnaTsKLQlpdC0+cGNiX2ZsYWdzID0gcGNiX3N0YXRlOwotCWl0LT5wY2Jf
ZmVhdHVyZXMgPSBwY2JfZmVhdHVyZXM7Ci0JaXQtPmFzb2Nfc3RhdGUgPSBhc29jX3N0YXRlOwot
CWl0LT5mdW5jdGlvbl9pbnBfZW5kID0gaW5wZTsKLQlpdC0+bm9fY2h1bmtfb3V0cHV0ID0gY2h1
bmtfb3V0cHV0X29mZjsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA4MDEwMDAKLQlpdC0+dm4gPSBjdXJ2bmV0OwotI2VuZGlmCi0JaWYgKHNfaW5wKSB7
Ci0JCS8qIEFzc3VtZSBsb2NrIGlzIGhlbGQgaGVyZSAqLwotCQlpdC0+aW5wID0gc19pbnA7Ci0J
CVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQlpdC0+aXRlcmF0b3JfZmxhZ3MgPSBTQ1RQ
X0lURVJBVE9SX0RPX1NJTkdMRV9JTlA7Ci0JfSBlbHNlIHsKLQkJU0NUUF9JTlBfSU5GT19STE9D
SygpOwotCQlpdC0+aW5wID0gTElTVF9GSVJTVCgmU0NUUF9CQVNFX0lORk8obGlzdGhlYWQpKTsK
LQkJaWYgKGl0LT5pbnApIHsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQl9Ci0J
CVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQlpdC0+aXRlcmF0b3JfZmxhZ3MgPSBTQ1RQX0lU
RVJBVE9SX0RPX0FMTF9JTlA7Ci0KLQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpOwot
CWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7Ci0JCVNDVFBf
SVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOwotCQlTQ1RQX1BSSU5URigiJXM6IHJvbGxiYWNrIG9u
IGluaXRpYWxpemUgYmVpbmcgJWQgaXQ9JXBcbiIsIF9fZnVuY19fLAotCQkgICAgICAgICAgICBT
Q1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSwgaXQpOwotCQlTQ1RQX0ZSRUUoaXQs
IFNDVFBfTV9JVEVSKTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCVRBSUxRX0lOU0VSVF9UQUlMKCZz
Y3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOwotCWlmIChzY3RwX2l0
X2N0bC5pdGVyYXRvcl9ydW5uaW5nID09IDApIHsKLQkJc2N0cF93YWtldXBfaXRlcmF0b3IoKTsK
LQl9Ci0JU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7Ci0JLyogc2FfaWdub3JlIE1FTUxF
QUsge21lbW9yeSBpcyBwdXQgb24gdGhlIHRhaWxxIGZvciB0aGUgaXRlcmF0b3J9ICovCi0JcmV0
dXJuICgwKTsKLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF9wY2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjkzODYyNWI1YjRkZmRjNGI3OTQxZjg0YjBmZDMwYWNlYTU5YWYxYi4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNi
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw4ODggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhl
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0
aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0
L3NjdHBfcGNiLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAkIik7Ci0jZW5k
aWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1BDQl9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQ
X1BDQl9IXwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5l
dC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLQotTElTVF9IRUFEKHNjdHBwY2JoZWFkLCBzY3RwX2lu
cGNiKTsKLUxJU1RfSEVBRChzY3RwYXNvY2hlYWQsIHNjdHBfdGNiKTsKLUxJU1RfSEVBRChzY3Rw
bGFkZHIsIHNjdHBfbGFkZHIpOwotTElTVF9IRUFEKHNjdHB2dGFnaGVhZCwgc2N0cF90YWdibG9j
ayk7Ci1MSVNUX0hFQUQoc2N0cF92cmZsaXN0LCBzY3RwX3ZyZik7Ci1MSVNUX0hFQUQoc2N0cF9p
Zm5saXN0LCBzY3RwX2lmbik7Ci1MSVNUX0hFQUQoc2N0cF9pZmFsaXN0LCBzY3RwX2lmYSk7Ci1U
QUlMUV9IRUFEKHNjdHBfcmVhZGhlYWQsIHNjdHBfcXVldWVkX3RvX3JlYWQpOwotVEFJTFFfSEVB
RChzY3RwX3N0cmVhbWhlYWQsIHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpOwotCi0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3N0cnVjdHMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5o
PgotCi0jZGVmaW5lIFNDVFBfUENCSEFTSF9BTExBRERSKHBvcnQsIG1hc2spIChwb3J0ICYgbWFz
aykKLSNkZWZpbmUgU0NUUF9QQ0JIQVNIX0FTT0ModGFnLCBtYXNrKSAodGFnICYgbWFzaykKLQot
c3RydWN0IHNjdHBfdnJmIHsKLQlMSVNUX0VOVFJZIChzY3RwX3ZyZikgbmV4dF92cmY7Ci0Jc3Ry
dWN0IHNjdHBfaWZhbGlzdCAqdnJmX2FkZHJfaGFzaDsKLQlzdHJ1Y3Qgc2N0cF9pZm5saXN0IGlm
bmxpc3Q7Ci0JdWludDMyX3QgdnJmX2lkOwotCXVpbnQzMl90IHRibF9pZF92NDsJCS8qIGRlZmF1
bHQgdjQgdGFibGUgaWQgKi8KLQl1aW50MzJfdCB0YmxfaWRfdjY7CQkvKiBkZWZhdWx0IHY2IHRh
YmxlIGlkICovCi0JdWludDMyX3QgdG90YWxfaWZhX2NvdW50OwotCXVfbG9uZyAgIHZyZl9hZGRy
X2hhc2htYXJrOwotCXVpbnQzMl90IHJlZmNvdW50OwotfTsKLQotc3RydWN0IHNjdHBfaWZuIHsK
LQlzdHJ1Y3Qgc2N0cF9pZmFsaXN0IGlmYWxpc3Q7Ci0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0J
TElTVF9FTlRSWShzY3RwX2lmbikgbmV4dF9pZm47Ci0JTElTVF9FTlRSWShzY3RwX2lmbikgbmV4
dF9idWNrZXQ7Ci0Jdm9pZCAgICAgKmlmbl9wOwkvKiBuZXZlciBhY2Nlc3Mgd2l0aG91dCBhcHBy
b3ByaWF0ZSBsb2NrICovCi0JdWludDMyX3QgaWZuX210dTsKLQl1aW50MzJfdCBpZm5fdHlwZTsK
LQl1aW50MzJfdCBpZm5faW5kZXg7CS8qIHNob3J0aGFuZCB3YXkgdG8gbG9vayBhdCBpZm4gZm9y
IHJlZmVyZW5jZSAqLwotCXVpbnQzMl90IHJlZmNvdW50OwkvKiBudW1iZXIgb2YgcmVmZXJlbmNl
IGhlbGQgc2hvdWxkIGJlID49IGlmYV9jb3VudCAqLwotCXVpbnQzMl90IGlmYV9jb3VudDsJLyog
SUZBJ3Mgd2UgaG9sZCAoaW4gb3VyIGxpc3QgLSBpZmFsaXN0KSovCi0JdWludDMyX3QgbnVtX3Y2
OwkvKiBudW1iZXIgb2YgdjYgYWRkcmVzc2VzICovCi0JdWludDMyX3QgbnVtX3Y0OwkvKiBudW1i
ZXIgb2YgdjQgYWRkcmVzc2VzICovCi0JdWludDMyX3QgcmVnaXN0ZXJlZF9hZjsJLyogcmVnaXN0
ZXJlZCBhZGRyZXNzIGZhbWlseSBmb3IgaS9mIGV2ZW50cyAqLwotCWNoYXIgICAgIGlmbl9uYW1l
W1NDVFBfSUZOQU1TSVpdOwotfTsKLQotLyogU0NUUCBsb2NhbCBJRkEgZmxhZ3MgKi8KLSNkZWZp
bmUgU0NUUF9BRERSX1ZBTElEICAgICAgICAgMHgwMDAwMDAwMQkvKiBpdHMgdXAgYW5kIGFjdGl2
ZSAqLwotI2RlZmluZSBTQ1RQX0JFSU5HX0RFTEVURUQgICAgICAweDAwMDAwMDAyCS8qIGJlaW5n
IGRlbGV0ZWQsCi0JCQkJCQkgKiB3aGVuIHJlZmNvdW50ID0gMC4gTm90ZQotCQkJCQkJICogdGhh
dCBpdCBpcyBwdWxsZWQgZnJvbSB0aGUgaWZuIGxpc3QKLQkJCQkJCSAqIGFuZCBpZmFfcCBpcyBu
dWxsZWQgcmlnaHQgYXdheSBidXQKLQkJCQkJCSAqIGl0IGNhbm5vdCBiZSBmcmVlZCB1bnRpbCB0
aGUgbGFzdCAqbmV0Ci0JCQkJCQkgKiBwb2ludGluZyB0byBpdCBpcyBkZWxldGVkLgotCQkJCQkJ
ICovCi0jZGVmaW5lIFNDVFBfQUREUl9ERUZFUl9VU0UgICAgIDB4MDAwMDAwMDQJLyogSG9sZCBv
ZmYgdXNpbmcgdGhpcyBvbmUgKi8KLSNkZWZpbmUgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUgMHgw
MDAwMDAwOAotCi1zdHJ1Y3Qgc2N0cF9pZmEgewotCUxJU1RfRU5UUlkoc2N0cF9pZmEpIG5leHRf
aWZhOwotCUxJU1RfRU5UUlkoc2N0cF9pZmEpIG5leHRfYnVja2V0OwotCXN0cnVjdCBzY3RwX2lm
biAqaWZuX3A7CS8qIGJhY2sgcG9pbnRlciB0byBwYXJlbnQgaWZuICovCi0Jdm9pZCAgICAqaWZh
OwkJLyogcG9pbnRlciB0byBpZmEsIG5lZWRlZCBmb3IgZmxhZwotCQkJCSAqIHVwZGF0ZSBmb3Ig
dGhhdCB3ZSBNVVNUIGxvY2sKLQkJCQkgKiBhcHByb3ByaWF0ZSBsb2Nrcy4gVGhpcyBpcyBmb3Ig
VjYuCi0JCQkJICovCi0JdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcmVzczsKLQl1aW50MzJfdCBy
ZWZjb3VudDsJLyogbnVtYmVyIG9mIGZvbGtzIHJlZmVycmluZyB0byB0aGlzICovCi0JdWludDMy
X3QgZmxhZ3M7Ci0JdWludDMyX3QgbG9jYWxpZmFfZmxhZ3M7Ci0JdWludDMyX3QgdnJmX2lkOwkv
KiB2cmZfaWQgb2YgdGhpcyBhZGRyIChmb3IgZGVsZXRpbmcpICovCi0JdWludDhfdCBzcmNfaXNf
bG9vcDsKLQl1aW50OF90IHNyY19pc19wcml2OwotCXVpbnQ4X3Qgc3JjX2lzX2dsb2I7Ci0JdWlu
dDhfdCByZXN2OwotfTsKLQotc3RydWN0IHNjdHBfbGFkZHIgewotCUxJU1RfRU5UUlkoc2N0cF9s
YWRkcikgc2N0cF9ueHRfYWRkcjsJLyogbmV4dCBpbiBsaXN0ICovCi0Jc3RydWN0IHNjdHBfaWZh
ICppZmE7Ci0JdWludDMyX3QgYWN0aW9uOwkJLyogVXNlZCBkdXJpbmcgYXNjb25mIGFuZCBhZGRp
bmcKLQkJCQkJICogaWYgbm8temVybyBzcmMtYWRkciBzZWxlY3Rpb24gd2lsbAotCQkJCQkgKiBu
b3QgY29uc2lkZXIgdGhpcyBhZGRyZXNzLgotCQkJCQkgKi8KLQlzdHJ1Y3QgdGltZXZhbCBzdGFy
dF90aW1lOyAgICAgIC8qIHRpbWUgd2hlbiB0aGlzIGFkZHJlc3Mgd2FzIGNyZWF0ZWQgKi8KLX07
Ci0KLXN0cnVjdCBzY3RwX2Jsb2NrX2VudHJ5IHsKLQlpbnQgZXJyb3I7Ci19OwotCi1zdHJ1Y3Qg
c2N0cF90aW1ld2FpdCB7Ci0JdWludDMyX3QgdHZfc2VjX2F0X2V4cGlyZTsJLyogdGhlIHNlY29u
ZHMgZnJvbSBib290IHRvIGV4cGlyZSAqLwotICAgICAgICB1aW50MzJfdCB2X3RhZzsJCSAgICAg
ICAgLyogdGhlIHZ0YWcgdGhhdCBjYW4gbm90IGJlIHJldXNlZCAqLwotICAgICAgICB1aW50MTZf
dCBscG9ydDsgICAgICAgICAgICAgICAgIC8qIHRoZSBsb2NhbCBwb3J0IHVzZWQgaW4gdnRhZyAq
LwotICAgICAgICB1aW50MTZfdCBycG9ydDsgICAgICAgICAgICAgICAgIC8qIHRoZSByZW1vdGUg
cG9ydCB1c2VkIGluIHZ0YWcgKi8KLX07Ci0KLXN0cnVjdCBzY3RwX3RhZ2Jsb2NrIHsKLQlMSVNU
X0VOVFJZKHNjdHBfdGFnYmxvY2spIHNjdHBfbnh0X3RhZ2Jsb2NrOwotCXN0cnVjdCBzY3RwX3Rp
bWV3YWl0IHZ0YWdfYmxvY2tbU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DS107Ci19OwotCi0KLXN0
cnVjdCBzY3RwX2VwaW5mbyB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZmRlZiBJTkVU
Ci0Jc3RydWN0IHNvY2tldCAqdWRwNF90dW5fc29ja2V0OwotI2VuZGlmCi0jaWZkZWYgSU5FVDYK
LQlzdHJ1Y3Qgc29ja2V0ICp1ZHA2X3R1bl9zb2NrZXQ7Ci0jZW5kaWYKLSNlbmRpZgotCXN0cnVj
dCBzY3RwYXNvY2hlYWQgKnNjdHBfYXNvY2hhc2g7Ci0JdV9sb25nIGhhc2hhc29jbWFyazsKLQot
CXN0cnVjdCBzY3RwcGNiaGVhZCAqc2N0cF9lcGhhc2g7Ci0JdV9sb25nIGhhc2htYXJrOwotCi0J
LyotCi0JICogVGhlIFRDUCBtb2RlbCByZXByZXNlbnRzIGEgc3Vic3RhbnRpYWwgb3ZlcmhlYWQg
aW4gdGhhdCB3ZSBnZXQgYW4KLQkgKiBhZGRpdGlvbmFsIGhhc2ggdGFibGUgdG8ga2VlcCBleHBs
aWNpdCBjb25uZWN0aW9ucyBpbi4gVGhlCi0JICogbGlzdGVuaW5nIFRDUCBlbmRwb2ludCB3aWxs
IGV4aXN0IGluIHRoZSB1c3VhbCBlcGhhc2ggYWJvdmUgYW5kCi0JICogYWNjZXB0IG9ubHkgSU5J
VCdzLiBJdCB3aWxsIGJlIGluY2FwYWJsZSBvZiBzZW5kaW5nIG9mZiBhbiBJTklULgotCSAqIFdo
ZW4gYSBkZyBhcnJpdmVzIHdlIG11c3QgbG9vayBpbiB0aGUgbm9ybWFsIGVwaGFzaC4gSWYgd2Ug
ZmluZCBhCi0JICogVENQIGVuZHBvaW50IHRoYXQgd2lsbCB0ZWxsIHVzIHRvIGdvIHRvIHRoZSBz
cGVjaWZpYyBlbmRwb2ludAotCSAqIGhhc2ggYW5kIHJlLWhhc2ggdG8gZmluZCB0aGUgcmlnaHQg
YXNzb2Mvc29ja2V0LiBJZiB3ZSBmaW5kIGEgVURQCi0JICogbW9kZWwgc29ja2V0IHdlIHRoZW4g
bXVzdCBjb21wbGV0ZSB0aGUgbG9va3VwLiBJZiB0aGlzIGZhaWxzLAotCSAqIGkuZS4gbm8gYXNz
b2NpYXRpb24gY2FuIGJlIGZvdW5kIHRoZW4gd2UgbXVzdCBjb250aW51ZSB0byBzZWUgaWYKLQkg
KiBhIHNjdHBfcGVlbG9mZigpJ2Qgc29ja2V0IGlzIGluIHRoZSB0Y3BlcGhhc2ggKGEgc3B1biBv
ZmYgc29ja2V0Ci0JICogYWN0cyBsaWtlIGEgVENQIG1vZGVsIGNvbm5lY3RlZCBzb2NrZXQpLgot
CSAqLwotCXN0cnVjdCBzY3RwcGNiaGVhZCAqc2N0cF90Y3BlcGhhc2g7Ci0JdV9sb25nIGhhc2h0
Y3BtYXJrOwotCXVpbnQzMl90IGhhc2h0YmxzaXplOwotCi0Jc3RydWN0IHNjdHBfdnJmbGlzdCAq
c2N0cF92cmZoYXNoOwotCXVfbG9uZyBoYXNodnJmbWFyazsKLQotCXN0cnVjdCBzY3RwX2lmbmxp
c3QgKnZyZl9pZm5faGFzaDsKLQl1X2xvbmcgICB2cmZfaWZuX2hhc2htYXJrOwotCi0Jc3RydWN0
IHNjdHBwY2JoZWFkIGxpc3RoZWFkOwotCXN0cnVjdCBzY3RwbGFkZHIgYWRkcl93cTsKLQotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotCXN0cnVjdCBpbnBjYmhlYWQgaW5wbGlzdGhlYWQ7Ci0Jc3Ry
dWN0IGlucGNiaW5mbyBzY3RiaW5mbzsKLSNlbmRpZgotCS8qIGVwIHpvbmUgaW5mbyAqLwotCXNj
dHBfem9uZV90IGlwaV96b25lX2VwOwotCXNjdHBfem9uZV90IGlwaV96b25lX2Fzb2M7Ci0Jc2N0
cF96b25lX3QgaXBpX3pvbmVfbGFkZHI7Ci0Jc2N0cF96b25lX3QgaXBpX3pvbmVfbmV0OwotCXNj
dHBfem9uZV90IGlwaV96b25lX2NodW5rOwotCXNjdHBfem9uZV90IGlwaV96b25lX3JlYWRxOwot
CXNjdHBfem9uZV90IGlwaV96b25lX3N0cm1vcTsKLQlzY3RwX3pvbmVfdCBpcGlfem9uZV9hc2Nv
bmY7Ci0Jc2N0cF96b25lX3QgaXBpX3pvbmVfYXNjb25mX2FjazsKLQotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMzAwMAotI2lmIF9fRnJlZUJTRF92
ZXJzaW9uIDw9IDYwMjAwMAotCXN0cnVjdCBtdHggaXBpX2VwX210eDsKLSNlbHNlCi0Jc3RydWN0
IHJ3bG9jayBpcGlfZXBfbXR4OwotI2VuZGlmCi0Jc3RydWN0IG10eCBpcGlfaXRlcmF0b3Jfd3Ff
bXR4OwotI2lmIF9fRnJlZUJTRF92ZXJzaW9uIDw9IDYwMjAwMAotCXN0cnVjdCBtdHggaXBpX2Fk
ZHJfbXR4OwotI2Vsc2UKLQlzdHJ1Y3Qgcndsb2NrIGlwaV9hZGRyX210eDsKLSNlbmRpZgotCXN0
cnVjdCBtdHggaXBpX3BrdGxvZ19tdHg7Ci0Jc3RydWN0IG10eCB3cV9hZGRyX210eDsKLSNlbGlm
IGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQotCXVzZXJsYW5kX211dGV4X3QgaXBp
X2VwX210eDsKLQl1c2VybGFuZF9tdXRleF90IGlwaV9hZGRyX210eDsKLQl1c2VybGFuZF9tdXRl
eF90IGlwaV9jb3VudF9tdHg7Ci0JdXNlcmxhbmRfbXV0ZXhfdCBpcGlfcGt0bG9nX210eDsKLQl1
c2VybGFuZF9tdXRleF90IHdxX2FkZHJfbXR4OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0j
aWZkZWYgX0tFUk5fTE9DS1NfSF8KLQlsY2tfbXR4X3QgKmlwaV9hZGRyX210eDsKLQlsY2tfbXR4
X3QgKmlwaV9jb3VudF9tdHg7Ci0JbGNrX210eF90ICppcGlfcGt0bG9nX210eDsKLQlsY2tfbXR4
X3QgKmxvZ2dpbmdfbXR4OwotCWxja19tdHhfdCAqd3FfYWRkcl9tdHg7Ci0jZWxzZQotCXZvaWQg
KmlwaV9jb3VudF9tdHg7Ci0Jdm9pZCAqbG9nZ2luZ19tdHg7Ci0jZW5kaWYgLyogX0tFUk5fTE9D
S1NfSF8gKi8KLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0Jc3RydWN0IHJ3bG9jayBpcGlf
ZXBfbG9jazsKLQlzdHJ1Y3Qgcndsb2NrIGlwaV9hZGRyX2xvY2s7Ci0Jc3RydWN0IHNwaW5sb2Nr
IGlwaV9wa3Rsb2dfbXR4OwotCXN0cnVjdCByd2xvY2sgd3FfYWRkcl9tdHg7Ci0jZWxpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0gICAgLyogVE9ETyBkZWNpZGUgb24gX19Vc2Vyc3BhY2VfXyBs
b2NrcyAqLwotI2VuZGlmCi0JdWludDMyX3QgaXBpX2NvdW50X2VwOwotCi0JLyogYXNzb2MvdGNi
IHpvbmUgaW5mbyAqLwotCXVpbnQzMl90IGlwaV9jb3VudF9hc29jOwotCi0JLyogbG9jYWwgYWRk
cmxpc3Qgem9uZSBpbmZvICovCi0JdWludDMyX3QgaXBpX2NvdW50X2xhZGRyOwotCi0JLyogcmVt
b3RlIGFkZHJsaXN0IHpvbmUgaW5mbyAqLwotCXVpbnQzMl90IGlwaV9jb3VudF9yYWRkcjsKLQot
CS8qIGNodW5rIHN0cnVjdHVyZSBsaXN0IGZvciBvdXRwdXQgKi8KLQl1aW50MzJfdCBpcGlfY291
bnRfY2h1bms7Ci0KLQkvKiBzb2NrZXQgcXVldWUgem9uZSBpbmZvICovCi0JdWludDMyX3QgaXBp
X2NvdW50X3JlYWRxOwotCi0JLyogc29ja2V0IHF1ZXVlIHpvbmUgaW5mbyAqLwotCXVpbnQzMl90
IGlwaV9jb3VudF9zdHJtb3E7Ci0KLQkvKiBOdW1iZXIgb2YgdnJmcyAqLwotCXVpbnQzMl90IGlw
aV9jb3VudF92cmZzOwotCi0gICAgICAgIC8qIE51bWJlciBvZiBpZm5zICovCi0JdWludDMyX3Qg
aXBpX2NvdW50X2lmbnM7Ci0KLSAgICAgICAgLyogTnVtYmVyIG9mIGlmYXMgKi8KLQl1aW50MzJf
dCBpcGlfY291bnRfaWZhczsKLQotCS8qIHN5c3RlbSB3aWRlIG51bWJlciBvZiBmcmVlIGNodW5r
cyBoYW5naW5nIGFyb3VuZCAqLwotCXVpbnQzMl90IGlwaV9mcmVlX2NodW5rczsKLQl1aW50MzJf
dCBpcGlfZnJlZV9zdHJtb3E7Ci0KLQlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkIHZ0YWdfdGltZXdhaXRb
U0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRV07Ci0KLQkvKiBhZGRyZXNzIHdvcmsgcXVldWUgaGFu
ZGxpbmcgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBhZGRyX3dxX3RpbWVyOwotCi0jaWYgZGVmaW5l
ZChfU0NUUF9ORUVEU19DQUxMT1VUXykgfHwgZGVmaW5lZChfVVNFUl9TQ1RQX05FRURTX0NBTExP
VVRfKQotCXN0cnVjdCBjYWxsb3V0bGlzdCBjYWxscXVldWU7Ci0jZW5kaWYKLX07Ci0KLQotc3Ry
dWN0IHNjdHBfYmFzZV9pbmZvIHsKLQkvKiBBbGwgc3RhdGljIHN0cnVjdHVyZXMgdGhhdAotCSAq
IGFuY2hvciB0aGUgc3lzdGVtIG11c3QgYmUgaGVyZS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9lcGlu
Zm8gc2N0cHBjYmluZm87Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTTVAp
ICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCi0Jc3RydWN0IHNjdHBzdGF0ICAgICpz
Y3Rwc3RhdDsKLSNlbHNlCi0Jc3RydWN0IHNjdHBzdGF0ICAgIHNjdHBzdGF0OwotI2VuZGlmCi0J
c3RydWN0IHNjdHBfc3lzY3RsIHNjdHBzeXNjdGw7Ci0JdWludDhfdCBmaXJzdF90aW1lOwotCWNo
YXIgc2N0cF9wY2JfaW5pdGlhbGl6ZWQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1BBQ0tFVF9MT0dHSU5H
KQotCWludCBwYWNrZXRfbG9nX3dyaXRlcnM7Ci0JaW50IHBhY2tldF9sb2dfZW5kOwotCXVpbnQ4
X3QgcGFja2V0X2xvZ19idWZmZXJbU0NUUF9QQUNLRVRfTE9HX1NJWkVdOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX0FQUExFX18pCi0JaW50IHNjdHBfbWFpbl90aW1lcl90aWNrczsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQl1c2VybGFuZF9tdXRleF90IHRpbWVyX210eDsK
LQl1c2VybGFuZF90aHJlYWRfdCB0aW1lcl90aHJlYWQ7Ci0JdWludDhfdCB0aW1lcl90aHJlYWRf
c2hvdWxkX2V4aXQ7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlwdGhy
ZWFkX211dGV4YXR0cl90IG10eF9hdHRyOwotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKLQlpbnQgdXNlcnNwYWNlX3JvdXRlOwotCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJl
YWRyb3V0ZTsKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSU5FVAotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLQlTT0NLRVQgdXNlcnNwYWNlX3Jhd3NjdHA7Ci0JU09DS0VUIHVz
ZXJzcGFjZV91ZHBzY3RwOwotI2Vsc2UKLQlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA7Ci0JaW50IHVz
ZXJzcGFjZV91ZHBzY3RwOwotI2VuZGlmCi0JdXNlcmxhbmRfdGhyZWFkX3QgcmVjdnRocmVhZHJh
dzsKLQl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFkdWRwOwotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JU09DS0VUIHVzZXJzcGFj
ZV9yYXdzY3RwNjsKLQlTT0NLRVQgdXNlcnNwYWNlX3VkcHNjdHA2OwotI2Vsc2UKLQlpbnQgdXNl
cnNwYWNlX3Jhd3NjdHA2OwotCWludCB1c2Vyc3BhY2VfdWRwc2N0cDY7Ci0jZW5kaWYKLQl1c2Vy
bGFuZF90aHJlYWRfdCByZWN2dGhyZWFkcmF3NjsKLQl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhy
ZWFkdWRwNjsKLSNlbmRpZgotCWludCAoKmNvbm5fb3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpi
dWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZik7Ci0Jdm9p
ZCAoKmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOwotCWludCBjcmMzMmNf
b2ZmbG9hZGVkOwotI2VuZGlmCi19OwotCi0vKi0KLSAqIEhlcmUgd2UgaGF2ZSBhbGwgdGhlIHJl
bGV2YW50IGluZm9ybWF0aW9uIGZvciBlYWNoIFNDVFAgZW50aXR5IGNyZWF0ZWQuIFdlCi0gKiB3
aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMgYXMgYXBwcm9wcmF0ZS4gV2UgYWxzbyBuZWVkIHRvIGZp
Z3VyZSBvdXQgaG93IHRvCi0gKiBhY2Nlc3MgL2Rldi9yYW5kb20uCi0gKi8KLXN0cnVjdCBzY3Rw
X3BjYiB7Ci0JdW5zaWduZWQgaW50IHRpbWVfb2Zfc2VjcmV0X2NoYW5nZTsJLyogbnVtYmVyIG9m
IHNlY29uZHMgZnJvbQotCQkJCQkJICogdGltZXZhbC50dl9zZWMgKi8KLQl1aW50MzJfdCBzZWNy
ZXRfa2V5W1NDVFBfSE9XX01BTllfU0VDUkVUU11bU0NUUF9OVU1CRVJfT0ZfU0VDUkVUU107Ci0J
dW5zaWduZWQgaW50IHNpemVfb2ZfYV9jb29raWU7Ci0KLQl1bnNpZ25lZCBpbnQgc2N0cF90aW1l
b3V0dGlja3NbU0NUUF9OVU1fVE1SU107Ci0JdW5zaWduZWQgaW50IHNjdHBfbWlucnRvOwotCXVu
c2lnbmVkIGludCBzY3RwX21heHJ0bzsKLQl1bnNpZ25lZCBpbnQgaW5pdGlhbF9ydG87Ci0JaW50
IGluaXRpYWxfaW5pdF9ydG9fbWF4OwotCi0JdW5zaWduZWQgaW50IHNjdHBfc2Fja19mcmVxOwot
CXVpbnQzMl90IHNjdHBfc3dzX3NlbmRlcjsKLQl1aW50MzJfdCBzY3RwX3N3c19yZWNlaXZlcjsK
LQotCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9jY19tb2R1bGU7Ci0JdWludDMyX3Qgc2N0cF9kZWZh
dWx0X3NzX21vZHVsZTsKLQkvKiBhdXRoZW50aWNhdGlvbiByZWxhdGVkIGZpZWxkcyAqLwotCXN0
cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVkX2tleXM7Ci0Jc2N0cF9hdXRoX2Noa2xpc3RfdCAqbG9j
YWxfYXV0aF9jaHVua3M7Ci0Jc2N0cF9obWFjbGlzdF90ICpsb2NhbF9obWFjczsKLQl1aW50MTZf
dCBkZWZhdWx0X2tleWlkOwotCi0JLyogdmFyaW91cyB0aHJlc2hvbGRzICovCi0JLyogTWF4IHRp
bWVzIEkgd2lsbCBpbml0IGF0IGEgZ3V5ICovCi0JdWludDE2X3QgbWF4X2luaXRfdGltZXM7Ci0K
LQkvKiBNYXggdGltZXMgSSB3aWxsIHNlbmQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWVvbmUgZGVh
ZCAqLwotCXVpbnQxNl90IG1heF9zZW5kX3RpbWVzOwotCi0JdWludDE2X3QgZGVmX25ldF9mYWls
dXJlOwotCi0JdWludDE2X3QgZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0KLQkvKiBudW1iZXIgb2Yg
c3RyZWFtcyB0byBwcmUtb3BlbiBvbiBhIGFzc29jaWF0aW9uICovCi0JdWludDE2X3QgcHJlX29w
ZW5fc3RyZWFtX2NvdW50OwotCXVpbnQxNl90IG1heF9vcGVuX3N0cmVhbXNfaW50b21lOwotCi0J
LyogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KLQl1aW50MzJfdCByYW5kb21fY291bnRlcjsK
LQl1aW50OF90IHJhbmRvbV9udW1iZXJzW1NDVFBfU0lHTkFUVVJFX0FMT0NfU0laRV07Ci0JdWlu
dDhfdCByYW5kb21fc3RvcmVbU0NUUF9TSUdOQVRVUkVfQUxPQ19TSVpFXTsKLQotCS8qCi0JICog
VGhpcyB0aW1lciBpcyBrZXB0IHJ1bm5pbmcgcGVyIGVuZHBvaW50LiAgV2hlbiBpdCBmaXJlcyBp
dCB3aWxsCi0JICogY2hhbmdlIHRoZSBzZWNyZXQga2V5LiAgVGhlIGRlZmF1bHQgaXMgb25jZSBh
IGhvdXIKLQkgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBzaWduYXR1cmVfY2hhbmdlOwotCi0JLyog
WmVybyBjb3B5IGZ1bGwgYnVmZmVyIHRpbWVyICovCi0Jc3RydWN0IHNjdHBfdGltZXIgemVyb19j
b3B5X3RpbWVyOwotICAgICAgICAvKiBaZXJvIGNvcHkgYXBwIHRvIHRyYW5zcG9ydCAoc2VuZHEp
IHJlYWQgcmVwdWxzZSB0aW1lciAqLwotCXN0cnVjdCBzY3RwX3RpbWVyIHplcm9fY29weV9zZW5k
cV90aW1lcjsKLQl1aW50MzJfdCBkZWZfY29va2llX2xpZmU7Ci0JLyogZGVmYXVsdHMgdG8gMCAq
LwotCWludCBhdXRvX2Nsb3NlX3RpbWU7Ci0JdWludDMyX3QgaW5pdGlhbF9zZXF1ZW5jZV9kZWJ1
ZzsKLQl1aW50MzJfdCBhZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcjsKLQl1aW50OF90IGFkYXB0
YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkOwotCXVpbnQzMl90IHN0b3JlX2F0OwotCXVp
bnQzMl90IG1heF9idXJzdDsKLQl1aW50MzJfdCBmcl9tYXhfYnVyc3Q7Ci0jaWZkZWYgSU5FVDYK
LQl1aW50MzJfdCBkZWZhdWx0X2Zsb3dsYWJlbDsKLSNlbmRpZgotCXVpbnQ4X3QgZGVmYXVsdF9k
c2NwOwotCWNoYXIgY3VycmVudF9zZWNyZXRfbnVtYmVyOwotCWNoYXIgbGFzdF9zZWNyZXRfbnVt
YmVyOwotCXVpbnQxNl90IHBvcnQ7IC8qIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBwb3J0ICov
Ci19OwotCi0jaWZuZGVmIFNDVFBfQUxJR05NRU5UCi0jZGVmaW5lIFNDVFBfQUxJR05NRU5UIDMy
Ci0jZW5kaWYKLQotI2lmbmRlZiBTQ1RQX0FMSUdOTTEKLSNkZWZpbmUgU0NUUF9BTElHTk0xIChT
Q1RQX0FMSUdOTUVOVC0xKQotI2VuZGlmCi0KLSNkZWZpbmUgc2N0cF9scG9ydCBpcF9pbnAuaW5w
LmlucF9scG9ydAotCi1zdHJ1Y3Qgc2N0cF9wY2J0c25fcmxvZyB7Ci0JdWludDMyX3QgdnRhZzsK
LQl1aW50MTZfdCBzdHJtOwotCXVpbnQxNl90IHNlcTsKLQl1aW50MTZfdCBzejsKLQl1aW50MTZf
dCBmbGdzOwotfTsKLSNkZWZpbmUgU0NUUF9SRUFEX0xPR19TSVpFIDEzNQkvKiB3ZSBjaG9vc2Ug
dGhlIG51bWJlciB0byBtYWtlIGEgcGNiIGEgcGFnZSAqLwotCi0KLXN0cnVjdCBzY3RwX2lucGNi
IHsKLQkvKi0KLQkgKiBwdXQgYW4gaW5wY2IgaW4gZnJvbnQgb2YgaXQgYWxsLCBraW5kIG9mIGEg
d2FzdGUgYnV0IHdlIG5lZWQgdG8KLQkgKiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGFsbCB0aGUg
b3RoZXIgc3R1ZmYuCi0JICovCi0JdW5pb24gewotCQlzdHJ1Y3QgaW5wY2IgaW5wOwotCQljaGFy
IGFsaWduWyhzaXplb2Yoc3RydWN0IGluNnBjYikgKyBTQ1RQX0FMSUdOTTEpICYKLQkJICAgICAg
ICB+U0NUUF9BTElHTk0xXTsKLQl9ICAgICBpcF9pbnA7Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLQkvKiBsZWF2ZSBzb21lIHNwYWNlIGluIGNhc2UgaTM4NiBpbnBjYiBpcyBiaWdnZXIgdGhh
biBwcGMgKi8KLQl1aW50OF90CQlwYWRkaW5nWzEyOF07Ci0jZW5kaWYKLQotCS8qIFNvY2tldCBi
dWZmZXIgbG9jayBwcm90ZWN0cyByZWFkX3F1ZXVlIGFuZCBvZiBjb3Vyc2Ugc2JfY2MgKi8KLQlz
dHJ1Y3Qgc2N0cF9yZWFkaGVhZCByZWFkX3F1ZXVlOwotCi0JTElTVF9FTlRSWShzY3RwX2lucGNi
KSBzY3RwX2xpc3Q7CS8qIGxpc3RzIGFsbCBlbmRwb2ludHMgKi8KLSAgICAgICAgLyogaGFzaCBv
ZiBhbGwgZW5kcG9pbnRzIGZvciBtb2RlbCAqLwotCUxJU1RfRU5UUlkoc2N0cF9pbnBjYikgc2N0
cF9oYXNoOwotCS8qIGNvdW50IG9mIGxvY2FsIGFkZHJlc3NlcyBib3VuZCwgMCBpZiBib3VuZCBh
bGwgKi8KLQlpbnQgbGFkZHJfY291bnQ7Ci0KLQkvKiBsaXN0IG9mIGFkZHJzIGluIHVzZSBieSB0
aGUgRVAsIE5VTEwgaWYgYm91bmQtYWxsICovCi0Jc3RydWN0IHNjdHBsYWRkciBzY3RwX2FkZHJf
bGlzdDsKLQkvKiB1c2VkIGZvciBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gcm90YXRpb24gd2hl
biB3ZSBhcmUgc3Vic2V0IGJvdW5kICovCi0Jc3RydWN0IHNjdHBfbGFkZHIgKm5leHRfYWRkcl90
b3VzZTsKLQotCS8qIGJhY2sgcG9pbnRlciB0byBvdXIgc29ja2V0ICovCi0Jc3RydWN0IHNvY2tl
dCAqc2N0cF9zb2NrZXQ7Ci0JdWludDY0X3Qgc2N0cF9mZWF0dXJlczsJLyogRmVhdHVyZSBmbGFn
cyAqLwotCXVpbnQzMl90IHNjdHBfZmxhZ3M7CS8qIElOUCBzdGF0ZSBmbGFnIHNldCAqLwotCXVp
bnQzMl90IHNjdHBfbW9iaWxpdHlfZmVhdHVyZXM7IC8qIE1vYmlsaXR5ICBGZWF0dXJlIGZsYWdz
ICovCi0Jc3RydWN0IHNjdHBfcGNiIHNjdHBfZXA7LyogU0NUUCBlcCBkYXRhICovCi0JLyogaGVh
ZCBvZiB0aGUgaGFzaCBvZiBhbGwgYXNzb2NpYXRpb25zICovCi0Jc3RydWN0IHNjdHBhc29jaGVh
ZCAqc2N0cF90Y2JoYXNoOwotCXVfbG9uZyBzY3RwX2hhc2htYXJrOwotCS8qIGhlYWQgb2YgdGhl
IGxpc3Qgb2YgYWxsIGFzc29jaWF0aW9ucyAqLwotCXN0cnVjdCBzY3RwYXNvY2hlYWQgc2N0cF9h
c29jX2xpc3Q7Ci0jaWZkZWYgU0NUUF9UUkFDS19GUkVFRF9BU09DUwotCXN0cnVjdCBzY3RwYXNv
Y2hlYWQgc2N0cF9hc29jX2ZyZWVfbGlzdDsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX2l0ZXJhdG9y
ICppbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yOwotCXVpbnQzMl90IHNjdHBfZnJhZ19w
b2ludDsKLQl1aW50MzJfdCBwYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OwotCXVpbnQzMl90IHNjdHBf
Y29udGV4dDsKLQl1aW50MzJfdCBtYXhfY3duZDsKLQl1aW50OF90IGxvY2FsX3N0cnJlc2V0X3N1
cHBvcnQ7Ci0JdWludDMyX3Qgc2N0cF9jbXRfb25fb2ZmOwotCXVpbnQ4X3QgZWNuX3N1cHBvcnRl
ZDsKLQl1aW50OF90IHByc2N0cF9zdXBwb3J0ZWQ7Ci0JdWludDhfdCBhdXRoX3N1cHBvcnRlZDsK
LQl1aW50OF90IGlkYXRhX3N1cHBvcnRlZDsKLQl1aW50OF90IGFzY29uZl9zdXBwb3J0ZWQ7Ci0J
dWludDhfdCByZWNvbmZpZ19zdXBwb3J0ZWQ7Ci0JdWludDhfdCBucnNhY2tfc3VwcG9ydGVkOwot
CXVpbnQ4X3QgcGt0ZHJvcF9zdXBwb3J0ZWQ7Ci0Jc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmlu
Zm8gZGVmX3NlbmQ7Ci0JLyotCi0JICogVGhlc2UgdGhyZWUgYXJlIGhlcmUgZm9yIHRoZSBzb3Nl
bmRfZGdyYW0KLQkgKiAocGt0LCBwa3RfbGFzdCBhbmQgY29udHJvbCkuCi0JICogcm91dGluZS4g
SG93ZXZlciwgSSBkb24ndCB0aGluayBhbnlvbmUgaW4KLQkgKiB0aGUgY3VycmVudCBGcmVlQlNE
IGtlcm5lbCBjYWxscyB0aGlzLiBTbwotCSAqIHRoZXkgYXJlIGNhbmRpZGF0ZXMgd2l0aCBzY3Rw
X3NlbmRtIGZvcgotCSAqIGRlLXN1cHBvcnRpbmcuCi0JICovCi0jaWZkZWYgX19QYW5kYV9fCi0J
cGFraGFuZGxlX3R5cGUgcGFrX3RvX3JlYWQ7Ci0JcGFraGFuZGxlX3R5cGUgcGFrX3RvX3JlYWRf
c2VuZHE7Ci0jZW5kaWYKLQlzdHJ1Y3QgbWJ1ZiAqcGt0LCAqcGt0X2xhc3Q7Ci0Jc3RydWN0IG1i
dWYgKmNvbnRyb2w7Ci0jaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkK
LSNpZm5kZWYgSU5QX0lQVjYKLSNkZWZpbmUgSU5QX0lQVjYJMHgxCi0jZW5kaWYKLSNpZm5kZWYg
SU5QX0lQVjQKLSNkZWZpbmUgSU5QX0lQVjQJMHgyCi0jZW5kaWYKLQl1aW50OF90IGlucF92Zmxh
ZzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUT0RPIF9fVXNlcnNwYWNlX18g
d2hlcmUgaXMgb3VyIGlucF92bGFnIGdvaW5nIHRvIGJlPyAqLwotCXVpbnQ4X3QgaW5wX2lwX3R0
bDsKLSAgICAgICAgdWludDhfdCBpbnBfaXBfdG9zOyAgICAvKiBkZWZpbmVkIGFzIG1hY3JvIGlu
IHVzZXJfaW5wY2IuaCAqLwotCXVpbnQ4X3QgaW5wX2lwX3Jlc3Y7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKLQlzdHJ1Y3Qg
bXR4IGlucF9tdHg7Ci0Jc3RydWN0IG10eCBpbnBfY3JlYXRlX210eDsKLQlzdHJ1Y3QgbXR4IGlu
cF9yZGF0YV9tdHg7Ci0JaW50MzJfdCByZWZjb3VudDsKLSNlbGlmIGRlZmluZWQoU0NUUF9QUk9D
RVNTX0xFVkVMX0xPQ0tTKQotCXVzZXJsYW5kX211dGV4X3QgaW5wX210eDsKLQl1c2VybGFuZF9t
dXRleF90IGlucF9jcmVhdGVfbXR4OwotCXVzZXJsYW5kX211dGV4X3QgaW5wX3JkYXRhX210eDsK
LQlpbnQzMl90IHJlZmNvdW50OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5l
ZChTQ1RQX0FQUExFX1JXTE9DSykKLQlsY2tfcndfdCAqaW5wX210eDsKLSNlbHNlCi0JbGNrX210
eF90ICppbnBfbXR4OwotI2VuZGlmCi0JbGNrX210eF90ICppbnBfY3JlYXRlX210eDsKLQlsY2tf
bXR4X3QgKmlucF9yZGF0YV9tdHg7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCXN0cnVj
dCByd2xvY2sgaW5wX2xvY2s7Ci0Jc3RydWN0IHNwaW5sb2NrIGlucF9jcmVhdGVfbG9jazsKLQlz
dHJ1Y3Qgc3BpbmxvY2sgaW5wX3JkYXRhX2xvY2s7Ci0JaW50MzJfdCByZWZjb3VudDsKLSNlbGlm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAvKiBUT0RPIGRlY2lkZSBvbiBfX1VzZXJzcGFj
ZV9fIGxvY2tzICovCi0JaW50MzJfdCByZWZjb3VudDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotCWludDMyX3QgcmVmY291bnQ7Ci0KLQl1aW50MzJfdCBsb2NrX2NhbGxlcjE7Ci0J
dWludDMyX3QgbG9ja19jYWxsZXIyOwotCXVpbnQzMl90IGxvY2tfY2FsbGVyMzsKLQl1aW50MzJf
dCB1bmxvY2tfY2FsbGVyMTsKLQl1aW50MzJfdCB1bmxvY2tfY2FsbGVyMjsKLQl1aW50MzJfdCB1
bmxvY2tfY2FsbGVyMzsKLQl1aW50MzJfdCBnZXRsb2NrX2NhbGxlcjE7Ci0JdWludDMyX3QgZ2V0
bG9ja19jYWxsZXIyOwotCXVpbnQzMl90IGdldGxvY2tfY2FsbGVyMzsKLQl1aW50MzJfdCBnZW5f
Y291bnQ7Ci0JdWludDMyX3QgbG9ja19nZW5fY291bnQ7Ci0JdWludDMyX3QgdW5sb2NrX2dlbl9j
b3VudDsKLQl1aW50MzJfdCBnZXRsb2NrX2dlbl9jb3VudDsKLQotCXVpbnQzMl90IGlfYW1faGVy
ZV9maWxlOwotCXVpbnQzMl90IGlfYW1faGVyZV9saW5lOwotI2VuZGlmCi0JdWludDMyX3QgZGVm
X3ZyZl9pZDsKLQl1aW50MTZfdCBmaWJudW07Ci0jaWZkZWYgU0NUUF9NVlJGCi0JdWludDMyX3Qg
Km1fdnJmX2lkczsKLQl1aW50MzJfdCBudW1fdnJmczsKLQl1aW50MzJfdCB2cmZfc2l6ZTsKLSNl
bmRpZgotCXVpbnQzMl90IHRvdGFsX3NlbmRzOwotCXVpbnQzMl90IHRvdGFsX3JlY3ZzOwotCXVp
bnQzMl90IGxhc3RfYWJvcnRfY29kZTsKLQl1aW50MzJfdCB0b3RhbF9ub3NwYWNlczsKLQlzdHJ1
Y3Qgc2N0cGFzb2NoZWFkICpzY3RwX2Fzb2NpZGhhc2g7Ci0JdV9sb25nIGhhc2hhc29jaWRtYXJr
OwotICAgICAgICB1aW50MzJfdCBzY3RwX2Fzc29jaWRfY291bnRlcjsKLQotI2lmZGVmIFNDVFBf
QVNPQ0xPR19PRl9UU05TCi0Jc3RydWN0IHNjdHBfcGNidHNuX3Jsb2cgcmVhZGxvZ1tTQ1RQX1JF
QURfTE9HX1NJWkVdOwotCXVpbnQzMl90IHJlYWRsb2dfaW5kZXg7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0Jdm9pZCAqdWxwX2luZm87Ci0JaW50ICgqcmVjdl9jYWxsYmFj
aykoc3RydWN0IHNvY2tldCAqLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSwgdm9pZCAqLCBzaXplX3Qs
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCwg
dm9pZCAqKTsKLQl1aW50MzJfdCBzZW5kX3NiX3RocmVzaG9sZDsKLQlpbnQgKCpzZW5kX2NhbGxi
YWNrKShzdHJ1Y3Qgc29ja2V0ICosIHVpbnQzMl90KTsKLSNlbmRpZgotfTsKLQotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLWludCByZWdpc3Rlcl9yZWN2X2NiIChzdHJ1Y3Qgc29ja2V0ICos
Ci0gICAgICAgICAgICAgICAgICAgICAgaW50ICgqKShzdHJ1Y3Qgc29ja2V0ICosIHVuaW9uIHNj
dHBfc29ja3N0b3JlLCB2b2lkICosIHNpemVfdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCwgdm9pZCAqKSk7Ci1pbnQgcmVnaXN0ZXJfc2Vu
ZF9jYiAoc3RydWN0IHNvY2tldCAqLCB1aW50MzJfdCwgaW50ICgqKShzdHJ1Y3Qgc29ja2V0ICos
IHVpbnQzMl90KSk7Ci1pbnQgcmVnaXN0ZXJfdWxwX2luZm8gKHN0cnVjdCBzb2NrZXQgKiwgdm9p
ZCAqKTsKLQotI2VuZGlmCi1zdHJ1Y3Qgc2N0cF90Y2IgewotCXN0cnVjdCBzb2NrZXQgKnNjdHBf
c29ja2V0OwkvKiBiYWNrIHBvaW50ZXIgdG8gc29ja2V0ICovCi0Jc3RydWN0IHNjdHBfaW5wY2Ig
KnNjdHBfZXA7CS8qIGJhY2sgcG9pbnRlciB0byBlcCAqLwotCUxJU1RfRU5UUlkoc2N0cF90Y2Ip
IHNjdHBfdGNiaGFzaDsJLyogbmV4dCBsaW5rIGluIGhhc2gKLQkJCQkJCSAqIHRhYmxlICovCi0g
ICAgICAgIExJU1RfRU5UUlkoc2N0cF90Y2IpIHNjdHBfdGNibGlzdDsJLyogbGlzdCBvZiBhbGwg
b2YgdGhlCi0JCQkJCQkgKiBUQ0IncyAqLwotICAgICAgICBMSVNUX0VOVFJZKHNjdHBfdGNiKSBz
Y3RwX3RjYmFzb2NpZGhhc2g7CS8qIG5leHQgbGluayBpbiBhc29jaWQKLQkJCQkJCQkgKiBoYXNo
IHRhYmxlCi0JCQkJCQkJICovCi0gICAgICAgIExJU1RfRU5UUlkoc2N0cF90Y2IpIHNjdHBfYXNv
Y3M7CS8qIHZ0YWcgaGFzaCBsaXN0ICovCi0Jc3RydWN0IHNjdHBfYmxvY2tfZW50cnkgKmJsb2Nr
X2VudHJ5OwkvKiBwb2ludGVyIGxvY2tlZCBieSAgc29ja2V0Ci0JCQkJCQkgKiBzZW5kIGJ1ZmZl
ciAqLwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uIGFzb2M7Ci0JLyotCi0JICogZnJlZWRfYnlf
c29yY3Zfc2luY2VsYXN0IGlzIHByb3RlY3RlZCBieSB0aGUgc29ja2J1Zl9sb2NrIE5PVCB0aGUK
LQkgKiB0Y2JfbG9jay4gSXRzIHNwZWNpYWwgaW4gdGhpcyB3YXkgdG8gaGVscCBhdm9pZCBleHRy
YSBtdXRleCBjYWxscwotCSAqIGluIHRoZSByZWFkaW5nIG9mIGRhdGEuCi0JICovCi0JdWludDMy
X3QgZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0OwotCXVpbnQzMl90IHRvdGFsX3NlbmRzOwotCXVp
bnQzMl90IHRvdGFsX3JlY3ZzOwotCWludCBmcmVlZF9mcm9tX3doZXJlOwotCXVpbnQxNl90IHJw
b3J0OwkJLyogcmVtb3RlIHBvcnQgaW4gbmV0d29yayBmb3JtYXQgKi8KLQl1aW50MTZfdCByZXN2
OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMzAw
MAotCXN0cnVjdCBtdHggdGNiX210eDsKLQlzdHJ1Y3QgbXR4IHRjYl9zZW5kX210eDsKLSNlbGlm
IGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQotCXVzZXJsYW5kX211dGV4X3QgdGNi
X210eDsKLQl1c2VybGFuZF9tdXRleF90IHRjYl9zZW5kX210eDsKLSNlbGlmIGRlZmluZWQoX19B
UFBMRV9fKQotCWxja19tdHhfdCogdGNiX210eDsKLQlsY2tfbXR4X3QqIHRjYl9zZW5kX210eDsK
LSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi0Jc3RydWN0IHNwaW5sb2NrIHRjYl9sb2NrOwot
CXN0cnVjdCBzcGlubG9jayB0Y2Jfc2VuZF9sb2NrOwotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotICAgIC8qIFRPRE8gZGVjaWRlIG9uIF9fVXNlcnNwYWNlX18gbG9ja3MgKi8KLSNlbmRp
ZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXVpbnQzMl90IGNhbGxlcjE7Ci0JdWludDMyX3Qg
Y2FsbGVyMjsKLQl1aW50MzJfdCBjYWxsZXIzOwotI2VuZGlmCi19OwotCi0KLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKLQotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9sb2NrX2JzZC5oPgotCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLS8q
Ci0gKiBBcHBsZSBNYWNPUyBYIDEwLjQgIlRpZ2VyIgotICovCi0KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfbG9ja19hcHBsZV9mZy5oPgotCi0jZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZF
TF9MT0NLUykKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaD4KLQotI2Vs
aWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2NrX3dp
bmRvd3MuaD4KLQotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCi0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2xvY2tfdXNlcnNwYWNlLmg+Ci0KLSNlbHNlCi0vKgotICogUHJlLTUueCBGcmVl
QlNELCBhbmQgb3RoZXJzLgotICovCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfZW1wdHku
aD4KLSNlbmRpZgotCi0vKiBUT0RPIHdoZXJlIHRvIHB1dCBub24tX0tFUk5FTCB0aGluZ3MgZm9y
IF9fVXNlcnNwYWNlX18/ICovCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0KLS8qIEF0dGVudGlvbiBKdWxpYW4sIHRoaXMgaXMgdGhlIGV4dGVybiB0aGF0
Ci0gKiBnb2VzIHdpdGggdGhlIGJhc2UgaW5mby4gc2N0cF9wY2IuYyBoYXMKLSAqIHRoZSByZWFs
IGRlZmluaXRpb24uCi0gKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA4MDEwMDAKLVZORVRfREVDTEFSRShzdHJ1Y3Qgc2N0cF9iYXNlX2luZm8sIHN5
c3RlbV9iYXNlX2luZm8pIDsKLSNlbHNlCi1leHRlcm4gc3RydWN0IHNjdHBfYmFzZV9pbmZvIHN5
c3RlbV9iYXNlX2luZm87Ci0jZW5kaWYKLQotI2lmZGVmIElORVQ2Ci1pbnQgU0NUUDZfQVJFX0FE
RFJfRVFVQUwoc3RydWN0IHNvY2thZGRyX2luNiAqYSwgc3RydWN0IHNvY2thZGRyX2luNiAqYik7
Ci0jZW5kaWYKLQotdm9pZCBzY3RwX2ZpbGxfcGNiaW5mbyhzdHJ1Y3Qgc2N0cF9wY2JpbmZvICop
OwotCi1zdHJ1Y3Qgc2N0cF9pZm4gKgotc2N0cF9maW5kX2lmbih2b2lkICppZm4sIHVpbnQzMl90
IGlmbl9pbmRleCk7Ci0KLXN0cnVjdCBzY3RwX3ZyZiAqc2N0cF9hbGxvY2F0ZV92cmYoaW50IHZy
ZmlkKTsKLXN0cnVjdCBzY3RwX3ZyZiAqc2N0cF9maW5kX3ZyZih1aW50MzJfdCB2cmZpZCk7Ci12
b2lkIHNjdHBfZnJlZV92cmYoc3RydWN0IHNjdHBfdnJmICp2cmYpOwotCi0vKi0KLSAqIENoYW5n
ZSBhZGRyZXNzIHN0YXRlLCBjYW4gYmUgdXNlZCBpZgotICogTy9TIHN1cHBvcnRzIHRlbGxpbmcg
dHJhbnNwb3J0cyBhYm91dAotICogY2hhbmdlcyB0byBJRkEvSUZOJ3MgKGxpbmsgbGF5ZXIgdHJp
Z2dlcnMpLgotICogSWYgYSBpZm4gZ29lcyBkb3duLCB3ZSB3aWxsIGRvIHNyYy1hZGRyLXNlbGVj
dGlvbgotICogYW5kIE5PVCB1c2UgdGhhdCwgYXMgYSBzb3VyY2UgYWRkcmVzcy4gVGhpcyBkb2Vz
Ci0gKiBub3Qgc3RvcCB0aGUgcm91dGluZyBzeXN0ZW0gZnJvbSByb3V0aW5nIG91dAotICogdGhh
dCBpbnRlcmZhY2UsIGJ1dCB3ZSB3b24ndCBwdXQgaXQgYXMgYSBzb3VyY2UuCi0gKi8KLXZvaWQg
c2N0cF9tYXJrX2lmYV9hZGRyX2Rvd24odWludDMyX3QgdnJmX2lkLCBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsIGNvbnN0IGNoYXIgKmlmX25hbWUsIHVpbnQzMl90IGlmbl9pbmRleCk7Ci12b2lkIHNj
dHBfbWFya19pZmFfYWRkcl91cCh1aW50MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRk
ciwgY29uc3QgY2hhciAqaWZfbmFtZSwgdWludDMyX3QgaWZuX2luZGV4KTsKLQotc3RydWN0IHNj
dHBfaWZhICoKLXNjdHBfYWRkX2FkZHJfdG9fdnJmKHVpbnQzMl90IHZyZmlkLAotCQkgICAgIHZv
aWQgKmlmbiwgdWludDMyX3QgaWZuX2luZGV4LCB1aW50MzJfdCBpZm5fdHlwZSwKLQkJICAgICBj
b25zdCBjaGFyICppZl9uYW1lLAotCQkgICAgIHZvaWQgKmlmYSwgc3RydWN0IHNvY2thZGRyICph
ZGRyLCB1aW50MzJfdCBpZmFfZmxhZ3MsCi0JCSAgICAgaW50IGR5bmFtaWNfYWRkKTsKLQotdm9p
ZCBzY3RwX3VwZGF0ZV9pZm5fbXR1KHVpbnQzMl90IGlmbl9pbmRleCwgdWludDMyX3QgbXR1KTsK
LQotdm9pZCBzY3RwX2ZyZWVfaWZuKHN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm5wKTsKLXZvaWQg
c2N0cF9mcmVlX2lmYShzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCk7Ci0KLQotdm9pZCBzY3Rw
X2RlbF9hZGRyX2Zyb21fdnJmKHVpbnQzMl90IHZyZmlkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
Ci0JCQkgICAgdWludDMyX3QgaWZuX2luZGV4LCBjb25zdCBjaGFyICppZl9uYW1lKTsKLQotCi0K
LXN0cnVjdCBzY3RwX25ldHMgKnNjdHBfZmluZG5ldChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0
IHNvY2thZGRyICopOwotCi1zdHJ1Y3Qgc2N0cF9pbnBjYiAqc2N0cF9wY2JfZmluZGVwKHN0cnVj
dCBzb2NrYWRkciAqLCBpbnQsIGludCwgdWludDMyX3QpOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1pbnQgc2N0cF9pbnBjYl9iaW5k
KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosCi0JCSAgICBzdHJ1Y3Qgc2N0cF9p
ZmEgKixzdHJ1Y3QgdGhyZWFkICopOwotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLWludCBz
Y3RwX2lucGNiX2JpbmQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLQkJICAg
IHN0cnVjdCBzY3RwX2lmYSAqLFBLVEhSRUFEKTsKLSNlbHNlCi0vKiBzdHJ1Y3QgcHJvYyBpcyBh
IGR1bW15IGZvciBfX1VzZXJzcGFjZV9fICovCi1pbnQgc2N0cF9pbnBjYl9iaW5kKHN0cnVjdCBz
b2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosCi0JCSAgICBzdHJ1Y3Qgc2N0cF9pZmEgKiwgc3Ry
dWN0IHByb2MgKik7Ci0jZW5kaWYKLQotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzc29j
aWF0aW9uX2FkZHIoc3RydWN0IG1idWYgKiwgaW50LAotICAgIHN0cnVjdCBzb2NrYWRkciAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3Qgc2N0cGhkciAqLCBzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciAqLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCB1
aW50MzJfdCB2cmZfaWQpOwotCi1zdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9maW5kYXNzb2NpYXRp
b25fYWRkcl9zYShzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3Ry
dWN0IHNjdHBfaW5wY2IgKiosIHN0cnVjdCBzY3RwX25ldHMgKiosIGludCwgdWludDMyX3QpOwot
Ci12b2lkCi1zY3RwX21vdmVfcGNiX2FuZF9hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotLyotCi0gKiBGb3Ig
dGhpcyBjYWxsIGVwX2FkZHIsIHRoZSB0byBpcyB0aGUgZGVzdGluYXRpb24gZW5kcG9pbnQgYWRk
cmVzcyBvZiB0aGUKLSAqIHBlZXIgKHJlbGF0aXZlIHRvIG91dGJvdW5kKS4gVGhlIGZyb20gZmll
bGQgaXMgb25seSB1c2VkIGlmIHRoZSBUQ1AgbW9kZWwKLSAqIGlzIGVuYWJsZWQgYW5kIGhlbHBz
IGRpc3Rpbmd1c2ggYW1vbmdzdCB0aGUgc3Vic2V0IGJvdW5kIChub24tYm91bmRhbGwpLgotICog
VGhlIFRDUCBtb2RlbCBNQVkgY2hhbmdlIHRoZSBhY3R1YWwgZXAgZmllbGQsIHRoaXMgaXMgd2h5
IGl0IGlzIHBhc3NlZC4KLSAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoc3RydWN0IHNjdHBfaW5wY2IgKiosCi0gICAgc3RydWN0IHNvY2thZGRyICos
IHN0cnVjdCBzY3RwX25ldHMgKiosIHN0cnVjdCBzb2NrYWRkciAqLAotICAgIHN0cnVjdCBzY3Rw
X3RjYiAqKTsKLQotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfZmluZGFzb2NfZXBfYXNvY2lkX2xv
Y2tlZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzY3RwX2Fzc29jX3QgYXNvY19pZCwgaW50IHdh
bnRfbG9jayk7Ci0KLXN0cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9h
c29jaWQoc3RydWN0IHNjdHBfaW5wY2IgKiwKLSAgICBzY3RwX2Fzc29jX3QsIGludCk7Ci0KLXN0
cnVjdCBzY3RwX3RjYiAqCi1zY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hc2NvbmYoc3RydWN0IG1i
dWYgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLQkJCSAgICAgICBzdHJ1Y3Qgc2N0cGhkciAq
LCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKiwgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDMyX3QgdnJm
X2lkKTsKLQotaW50IHNjdHBfaW5wY2JfYWxsb2Moc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90
IHZyZl9pZCk7Ci0KLWludCBzY3RwX2lzX2FkZHJlc3Nfb25fbG9jYWxfaG9zdChzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsIHVpbnQzMl90IHZyZl9pZCk7Ci0KLXZvaWQgc2N0cF9pbnBjYl9mcmVlKHN0
cnVjdCBzY3RwX2lucGNiICosIGludCwgaW50KTsKLQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBf
YWxvY19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAg
ICAgICAgICAgICBpbnQgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3Qs
IHN0cnVjdCB0aHJlYWQgKik7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RydWN0IHNj
dHBfdGNiICoKLXNjdHBfYWxvY19hc3NvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29j
a2FkZHIgKiwKLSAgICAgICAgICAgICAgICBpbnQgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50
MTZfdCwgdWludDE2X3QsIFBLVEhSRUFEKTsKLSNlbHNlCi0vKiBwcm9jIHdpbGwgYmUgTlVMTCBm
b3IgX19Vc2Vyc3BhY2VfXyAqLwotc3RydWN0IHNjdHBfdGNiICoKLXNjdHBfYWxvY19hc3NvYyhz
dHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAgICAgICAgICAgICBp
bnQgKiwgdWludDMyX3QsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2X3QsIHN0cnVjdCBwcm9j
ICopOwotI2VuZGlmCi0KLWludCBzY3RwX2ZyZWVfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKiwg
c3RydWN0IHNjdHBfdGNiICosIGludCwgaW50KTsKLQotCi12b2lkIHNjdHBfZGVsZXRlX2Zyb21f
dGltZXdhaXQodWludDMyX3QsIHVpbnQxNl90LCB1aW50MTZfdCk7Ci0KLWludCBzY3RwX2lzX2lu
X3RpbWV3YWl0KHVpbnQzMl90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0KTsK
LQotdm9pZAotc2N0cF9hZGRfdnRhZ190b190aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQzMl90
IHRpbWUsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCk7Ci0KLXZvaWQgc2N0cF9hZGRf
bG9jYWxfYWRkcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgdWlu
dDMyX3QpOwotCi12b2lkIHNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5wY2Ig
Kiwgc3RydWN0IHNjdHBfaWZhICopOwotCi1pbnQgc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCB1aW50
MTZfdCwgaW50LCBpbnQpOwotCi12b2lkIHNjdHBfcmVtb3ZlX25ldChzdHJ1Y3Qgc2N0cF90Y2Ig
Kiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKLQotaW50IHNjdHBfZGVsX3JlbW90ZV9hZGRyKHN0cnVj
dCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLXZvaWQgc2N0cF9wY2JfaW5pdCh2
b2lkKTsKLQotdm9pZCBzY3RwX3BjYl9maW5pc2godm9pZCk7Ci0KLXZvaWQgc2N0cF9hZGRfbG9j
YWxfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKik7
Ci12b2lkIHNjdHBfZGVsX2xvY2FsX2FkZHJfcmVzdHJpY3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKiwg
c3RydWN0IHNjdHBfaWZhICopOwotCi1pbnQKLXNjdHBfbG9hZF9hZGRyZXNzZXNfZnJvbV9pbml0
KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwKLSAgICBzdHJ1Y3Qg
c29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqLCB1aW50MTZf
dCk7Ci0KLWludAotc2N0cF9zZXRfcHJpbWFyeV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc29ja2FkZHIgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1pbnQgc2N0cF9pc192
dGFnX2dvb2QodWludDMyX3QsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgc3RydWN0
IHRpbWV2YWwgKik7Ci0KLS8qIHZvaWQgc2N0cF9kcmFpbih2b2lkKTsgKi8KLQotaW50IHNjdHBf
ZGVzdGluYXRpb25faXNfcmVhY2hhYmxlKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKik7Ci0KLWludCBzY3RwX3N3YXBfaW5wY2JfZm9yX2xpc3RlbihzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wKTsKLQotdm9pZCBzY3RwX2NsZWFuX3VwX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX3JlYWRoZWFkICpyaCk7Ci0KLS8qLQotICogTnVsbCBpbiBsYXN0IGFy
ZyBpbnBjYiBpbmRpY2F0ZSBydW4gb24gQUxMIGVwJ3MuIFNwZWNpZmljIGlucCBpbiBsYXN0IGFy
ZwotICogaW5kaWNhdGVzIHJ1biBvbiBPTkxZIGFzc29jJ3Mgb2YgdGhlIHNwZWNpZmllZCBlbmRw
b2ludC4KLSAqLwotaW50Ci1zY3RwX2luaXRpYXRlX2l0ZXJhdG9yKGlucF9mdW5jIGlucGYsCi0J
CSAgICAgICBhc29jX2Z1bmMgYWYsCi0JCSAgICAgICBpbnBfZnVuYyBpbnBlLAotCQkgICAgICAg
dWludDMyX3QsIHVpbnQzMl90LAotCQkgICAgICAgdWludDMyX3QsIHZvaWQgKiwKLQkJICAgICAg
IHVpbnQzMl90LAotCQkgICAgICAgZW5kX2Z1bmMgZWYsCi0JCSAgICAgICBzdHJ1Y3Qgc2N0cF9p
bnBjYiAqLAotCQkgICAgICAgdWludDhfdCBjb19vZmYpOwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCi12b2lkCi1z
Y3RwX3F1ZXVlX3RvX21jb3JlKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgY3B1X3RvX3Vz
ZSk7Ci0KLSNlbmRpZgotCi0jZW5kaWYJCQkJLyogX0tFUk5FTCAqLwotI2VuZGlmCQkJCS8qICFf
X3NjdHBfcGNiX2hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxv
ZmYuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDdjNTVhYTMyY2QzZmI0YWRjMmU4NTNjNTEwM2RlMDkxODk3MGUzMzcuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BlZWxvZmYuYworKysgL2Rldi9udWxsCkBAIC0xLDMyNiArMCwwIEBACi0vKi0K
LSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBT
dGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIs
IGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
Ci0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVm
IF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6
IGhlYWQvc3lzL25ldGluZXQvc2N0cF9wZWVsb2ZmLmMgMjc5ODU5IDIwMTUtMDMtMTAgMTk6NDk6
MjVaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgot
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGls
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF92YXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9wZWVsb2ZmLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNk
ZWZpbmUgQVBQTEVfRklMRV9OTyA1Ci0jZW5kaWYKLQotaW50Ci1zY3RwX2Nhbl9wZWVsX29mZihz
dHJ1Y3Qgc29ja2V0ICpoZWFkLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQpCi17Ci0Jc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JdWludDMyX3Qgc3RhdGU7
Ci0KLQlpZiAoaGVhZCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRUJBREYpOwotCQlyZXR1cm4gKEVCQURG
KTsKLQl9Ci0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwotCWlmIChp
bnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVGQVVMVCk7Ci0JCXJldHVybiAoRUZBVUxUKTsKLQl9Ci0J
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVP
UE5PVFNVUFApOwotCQlyZXR1cm4gKEVPUE5PVFNVUFApOwotCX0KLQlzdGNiID0gc2N0cF9maW5k
YXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNzb2NfaWQsIDEpOwotCWlmIChzdGNiID09IE5V
TEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1BFRUxPRkYsIEVOT0VOVCk7Ci0JCXJldHVybiAoRU5PRU5UKTsKLQl9Ci0Jc3RhdGUgPSBT
Q1RQX0dFVF9TVEFURSgoJnN0Y2ItPmFzb2MpKTsKLQlpZiAoKHN0YXRlID09IFNDVFBfU1RBVEVf
RU1QVFkpIHx8Ci0JICAgIChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0lOVVNFKSkgewotCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwot
CX0KLQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JLyogV2UgYXJlIGNsZWFyIHRvIHBlZWwgdGhp
cyBvbmUgb2ZmICovCi0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci1zY3RwX2RvX3BlZWxvZmYoc3Ry
dWN0IHNvY2tldCAqaGVhZCwgc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBhc3NvY19p
ZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCAqbl9pbnA7Ci0Jc3RydWN0IHNjdHBfdGNi
ICpzdGNiOwotCXVpbnQzMl90IHN0YXRlOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
aGVhZC0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRUZBVUxUKTsKLQkJcmV0
dXJuIChFRkFVTFQpOwotCX0KLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lk
KGlucCwgYXNzb2NfaWQsIDEpOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05O
KTsKLQkJcmV0dXJuIChFTk9UQ09OTik7Ci0JfQotCi0Jc3RhdGUgPSBTQ1RQX0dFVF9TVEFURSgo
JnN0Y2ItPmFzb2MpKTsKLQlpZiAoKHN0YXRlID09IFNDVFBfU1RBVEVfRU1QVFkpIHx8Ci0JICAg
IChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0lOVVNFKSkgewotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
RUVMT0ZGLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQotCW5faW5wID0g
KHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQluX2lucC0+c2N0cF9mbGFncyA9IChT
Q1RQX1BDQl9GTEFHU19VRFBUWVBFIHwKLQkgICAgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEIHwK
LQkgICAgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCB8CS8qIFR1cm4gb24gQmxvY2tpbmcgSU8g
Ki8KLQkgICAgKFNDVFBfUENCX0NPUFlfRkxBR1MgJiBpbnAtPnNjdHBfZmxhZ3MpKTsKLQluX2lu
cC0+c2N0cF9zb2NrZXQgPSBzbzsKLQluX2lucC0+c2N0cF9mZWF0dXJlcyA9IGlucC0+c2N0cF9m
ZWF0dXJlczsKLQluX2lucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyA9IGlucC0+c2N0cF9tb2Jp
bGl0eV9mZWF0dXJlczsKLQluX2lucC0+c2N0cF9mcmFnX3BvaW50ID0gaW5wLT5zY3RwX2ZyYWdf
cG9pbnQ7Ci0Jbl9pbnAtPnNjdHBfY210X29uX29mZiA9IGlucC0+c2N0cF9jbXRfb25fb2ZmOwot
CW5faW5wLT5lY25fc3VwcG9ydGVkID0gaW5wLT5lY25fc3VwcG9ydGVkOwotCW5faW5wLT5wcnNj
dHBfc3VwcG9ydGVkID0gaW5wLT5wcnNjdHBfc3VwcG9ydGVkOwotCW5faW5wLT5hdXRoX3N1cHBv
cnRlZCA9IGlucC0+YXV0aF9zdXBwb3J0ZWQ7Ci0Jbl9pbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSBp
bnAtPmFzY29uZl9zdXBwb3J0ZWQ7Ci0Jbl9pbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IGlucC0+
cmVjb25maWdfc3VwcG9ydGVkOwotCW5faW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gaW5wLT5ucnNh
Y2tfc3VwcG9ydGVkOwotCW5faW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9IGlucC0+cGt0ZHJvcF9z
dXBwb3J0ZWQ7Ci0Jbl9pbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQgPSBpbnAtPnBhcnRpYWxf
ZGVsaXZlcnlfcG9pbnQ7Ci0Jbl9pbnAtPnNjdHBfY29udGV4dCA9IGlucC0+c2N0cF9jb250ZXh0
OwotCW5faW5wLT5tYXhfY3duZCA9IGlucC0+bWF4X2N3bmQ7Ci0Jbl9pbnAtPmxvY2FsX3N0cnJl
c2V0X3N1cHBvcnQgPSBpbnAtPmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQ7Ci0Jbl9pbnAtPmlucF9z
dGFydGluZ19wb2ludF9mb3JfaXRlcmF0b3IgPSBOVUxMOwotCS8qIGNvcHkgaW4gdGhlIGF1dGhl
bnRpY2F0aW9uIHBhcmFtZXRlcnMgZnJvbSB0aGUgb3JpZ2luYWwgZW5kcG9pbnQgKi8KLQlpZiAo
bl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpCi0JCXNjdHBfZnJlZV9obWFjbGlzdChuX2lucC0+
c2N0cF9lcC5sb2NhbF9obWFjcyk7Ci0Jbl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MgPQotCSAg
ICBzY3RwX2NvcHlfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKLQlpZiAobl9p
bnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpCi0JCXNjdHBfZnJlZV9jaHVua2xpc3Qobl9p
bnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwotCW5faW5wLT5zY3RwX2VwLmxvY2FsX2F1
dGhfY2h1bmtzID0KLQkgICAgc2N0cF9jb3B5X2NodW5rbGlzdChpbnAtPnNjdHBfZXAubG9jYWxf
YXV0aF9jaHVua3MpOwotCSh2b2lkKXNjdHBfY29weV9za2V5bGlzdCgmaW5wLT5zY3RwX2VwLnNo
YXJlZF9rZXlzLAotCSAgICAmbl9pbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMpOwotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQluX2lucC0+dWxwX2luZm8gPSBpbnAtPnVscF9pbmZvOwotCW5f
aW5wLT5yZWN2X2NhbGxiYWNrID0gaW5wLT5yZWN2X2NhbGxiYWNrOwotCW5faW5wLT5zZW5kX2Nh
bGxiYWNrID0gaW5wLT5zZW5kX2NhbGxiYWNrOwotCW5faW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9
IGlucC0+c2VuZF9zYl90aHJlc2hvbGQ7Ci0jZW5kaWYKLQkvKgotCSAqIE5vdyB3ZSBtdXN0IG1v
dmUgaXQgZnJvbSBvbmUgaGFzaCB0YWJsZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCi0JICogc3Rj
YiBpbiB0aGUgcmlnaHQgcGxhY2UuCi0JICovCi0Jc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoaW5w
LCBuX2lucCwgc3RjYik7Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
LQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXNj
dHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0Y2IsIFNCTF9XQUlU
KTsKLSNlbHNlCi0Jc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoaW5wLCBuX2lucCwg
c3RjYiwgTV9XQUlUT0spOwotI2VuZGlmCi0JYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCi0JcmV0dXJuICgwKTsKLX0KLQotI2lmIGRlZmluZWQoSEFWRV9TQ1RQ
X1BFRUxPRkZfU09DS09QVCkKLXN0cnVjdCBzb2NrZXQgKgotc2N0cF9nZXRfcGVlbG9mZihzdHJ1
Y3Qgc29ja2V0ICpoZWFkLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsIGludCAqZXJyb3IpCi17Ci0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotICAgIC8qIGlmIF9fVXNlcnNwYWNlX18gY2hvb3Nl
cyB0byBvcmlnaW5hbGx5IG5vdCBzdXBwb3J0IHBlZWxvZmYsIHB1dCBpdCBoZXJlLi4uICovCi0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVJTlZBTCk7Ci0JKmVycm9yID0g
RUlOVkFMOwotCXJldHVybiAoTlVMTCk7Ci0jZWxzZQotCXN0cnVjdCBzb2NrZXQgKm5ld3NvOwot
CXN0cnVjdCBzY3RwX2lucGNiICppbnAsICpuX2lucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7
Ci0KLQlTQ1RQREJHKFNDVFBfREVCVUdfUEVFTDEsICJTQ1RQIHBlZWwtb2ZmIGNhbGxlZFxuIik7
Ci0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopaGVhZC0+c29fcGNiOwotCWlmIChpbnAgPT0g
TlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfUEVFTE9GRiwgRUZBVUxUKTsKLQkJKmVycm9yID0gRUZBVUxUOwotCQlyZXR1cm4gKE5V
TEwpOwotCX0KLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKGlucCwgYXNz
b2NfaWQsIDEpOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05OKTsKLQkJKmVy
cm9yID0gRU5PVENPTk47Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCUNVUlZORVRf
U0VUKGhlYWQtPnNvX3ZuZXQpOwotI2VuZGlmCi0JbmV3c28gPSBzb25ld2Nvbm4oaGVhZCwgU1Nf
SVNDT05ORUNURUQKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkgICAgLCBOVUxMCi0jZWxpZiBk
ZWZpbmVkKF9fUGFuZGFfXykKLQkgICAgLyogcGxhY2UgdGhpcyBzb2NrZXQgaW4gdGhlIGFzc29j
J3MgdnJmIGlkICovCi0JICAgICwgTlVMTCwgc3RjYi0+YXNvYy52cmZfaWQKLSNlbmRpZgotCQkp
OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAw
MAotCUNVUlZORVRfUkVTVE9SRSgpOwotI2VuZGlmCi0JaWYgKG5ld3NvID09IE5VTEwpIHsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1BFRUwxLCAic2N0cF9wZWVsb2ZmOnNvbmV3Y29ubiBmYWlsZWRc
biIpOwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1BFRUxPRkYsIEVOT01FTSk7Ci0JCSplcnJvciA9IEVOT01FTTsKLQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQlyZXR1cm4gKE5VTEwpOwotCi0JfQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotCSAgZWxzZSB7Ci0JCVNDVFBfU09DS0VUX0xPQ0sobmV3
c28sIDEpOwotCX0KLSNlbmRpZgotCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCW5faW5wID0gKHN0cnVjdCBzY3RwX2lu
cGNiICopbmV3c28tPnNvX3BjYjsKLQlTT0NLX0xPQ0soaGVhZCk7Ci0Jbl9pbnAtPnNjdHBfZmxh
Z3MgPSAoU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8Ci0JICAgIFNDVFBfUENCX0ZMQUdTX0NPTk5F
Q1RFRCB8Ci0JICAgIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wgfAkvKiBUdXJuIG9uIEJsb2Nr
aW5nIElPICovCi0JICAgIChTQ1RQX1BDQl9DT1BZX0ZMQUdTICYgaW5wLT5zY3RwX2ZsYWdzKSk7
Ci0Jbl9pbnAtPnNjdHBfZmVhdHVyZXMgPSBpbnAtPnNjdHBfZmVhdHVyZXM7Ci0Jbl9pbnAtPnNj
dHBfZnJhZ19wb2ludCA9IGlucC0+c2N0cF9mcmFnX3BvaW50OwotCW5faW5wLT5zY3RwX2NtdF9v
bl9vZmYgPSBpbnAtPnNjdHBfY210X29uX29mZjsKLQluX2lucC0+ZWNuX3N1cHBvcnRlZCA9IGlu
cC0+ZWNuX3N1cHBvcnRlZDsKLQluX2lucC0+cHJzY3RwX3N1cHBvcnRlZCA9IGlucC0+cHJzY3Rw
X3N1cHBvcnRlZDsKLQluX2lucC0+YXV0aF9zdXBwb3J0ZWQgPSBpbnAtPmF1dGhfc3VwcG9ydGVk
OwotCW5faW5wLT5hc2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOwotCW5f
aW5wLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPSBpbnAtPnJlY29uZmlnX3N1cHBvcnRlZDsKLQluX2lu
cC0+bnJzYWNrX3N1cHBvcnRlZCA9IGlucC0+bnJzYWNrX3N1cHBvcnRlZDsKLQluX2lucC0+cGt0
ZHJvcF9zdXBwb3J0ZWQgPSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOwotCW5faW5wLT5wYXJ0aWFs
X2RlbGl2ZXJ5X3BvaW50ID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OwotCW5faW5wLT5z
Y3RwX2NvbnRleHQgPSBpbnAtPnNjdHBfY29udGV4dDsKLQluX2lucC0+bWF4X2N3bmQgPSBpbnAt
Pm1heF9jd25kOwotCW5faW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gaW5wLT5sb2NhbF9z
dHJyZXNldF9zdXBwb3J0OwotCW5faW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9y
ID0gTlVMTDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0Jbl9pbnAtPnVscF9pbmZvID0g
aW5wLT51bHBfaW5mbzsKLQluX2lucC0+cmVjdl9jYWxsYmFjayA9IGlucC0+cmVjdl9jYWxsYmFj
azsKLQluX2lucC0+c2VuZF9jYWxsYmFjayA9IGlucC0+c2VuZF9jYWxsYmFjazsKLQluX2lucC0+
c2VuZF9zYl90aHJlc2hvbGQgPSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkOwotI2VuZGlmCi0KLQkv
KiBjb3B5IGluIHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIG9yaWdpbmFs
IGVuZHBvaW50ICovCi0JaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQotCQlzY3RwX2Zy
ZWVfaG1hY2xpc3Qobl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOwotCW5faW5wLT5zY3RwX2Vw
LmxvY2FsX2htYWNzID0KLQkgICAgc2N0cF9jb3B5X2htYWNsaXN0KGlucC0+c2N0cF9lcC5sb2Nh
bF9obWFjcyk7Ci0JaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKQotCQlzY3Rw
X2ZyZWVfY2h1bmtsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQluX2lu
cC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyA9Ci0JICAgIHNjdHBfY29weV9jaHVua2xpc3Qo
aW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQkodm9pZClzY3RwX2NvcHlfc2tleWxp
c3QoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywKLQkgICAgJm5faW5wLT5zY3RwX2VwLnNoYXJl
ZF9rZXlzKTsKLQotCW5faW5wLT5zY3RwX3NvY2tldCA9IG5ld3NvOwotCWlmIChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7Ci0JCXNjdHBfZmVhdHVy
ZV9vZmYobl9pbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSk7Ci0JCW5faW5wLT5zY3RwX2Vw
LmF1dG9fY2xvc2VfdGltZSA9IDA7Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVf
QVVUT0NMT1NFLCBuX2lucCwgc3RjYiwgTlVMTCwKLQkJCQlTQ1RQX0ZST01fU0NUUF9QRUVMT0ZG
ICsgU0NUUF9MT0NfMSk7Ci0JfQotCS8qIFR1cm4gb2ZmIGFueSBub24tYmxvY2tpbmcgc2VtYW50
aWMuICovCi0JU0NUUF9DTEVBUl9TT19OQklPKG5ld3NvKTsKLSAgICAgICAgbmV3c28tPnNvX3N0
YXRlIHw9IFNTX0lTQ09OTkVDVEVEOwotCS8qIFdlIHJlbW92ZSBpdCByaWdodCBhd2F5ICovCi0K
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmZGVmIFNDVFBfTE9D
S19MT0dHSU5HCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgewotCQlzY3RwX2xvZ19sb2NrKGlucCwgKHN0cnVjdCBz
Y3RwX3RjYiAqKU5VTEwsIFNDVFBfTE9HX0xPQ0tfU09DSyk7Ci0JfQotI2VuZGlmCi0JVEFJTFFf
UkVNT1ZFKCZoZWFkLT5zb19jb21wLCBuZXdzbywgc29fbGlzdCk7Ci0JaGVhZC0+c29fcWxlbi0t
OwotCVNPQ0tfVU5MT0NLKGhlYWQpOwotI2Vsc2UKLSAgICAgICAgbmV3c28gPSBUQUlMUV9GSVJT
VCgmaGVhZC0+c29fcSk7Ci0JaWYgKHNvcXJlbXF1ZShuZXdzbywgMSkgPT0gMCkgewotCQlTQ1RQ
X1BSSU5URigic29yZW1xdWUgZmFpbGVkLCBwZWVsb2ZmLWZhaWxzIChpbnZhcmllbnRzIHdvdWxk
IHBhbmljKVxuIik7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09OTik7Ci0JCSplcnJvciA9IEVOT1RDT05OOwotCQly
ZXR1cm4gKE5VTEwpOwotCi0JfQotI2VuZGlmCi0JLyoKLQkgKiBOb3cgd2UgbXVzdCBtb3ZlIGl0
IGZyb20gb25lIGhhc2ggdGFibGUgdG8gYW5vdGhlciBhbmQgZ2V0IHRoZQotCSAqIHN0Y2IgaW4g
dGhlIHJpZ2h0IHBsYWNlLgotCSAqLwotICAgICAgICBzY3RwX21vdmVfcGNiX2FuZF9hc3NvYyhp
bnAsIG5faW5wLCBzdGNiKTsKLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OwotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkvKgotCSAqIEFuZCBub3cgdGhlIGZpbmFsIGhh
Y2suIFdlIG1vdmUgZGF0YSBpbiB0aGUgcGVuZGluZyBzaWRlIGkuZS4KLQkgKiBoZWFkIHRvIHRo
ZSBuZXcgc29ja2V0IGJ1ZmZlci4gTGV0IHRoZSBHUlVCQklORyBiZWdpbiA6LTAKLQkgKi8KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdfaW5w
KGlucCwgbl9pbnAsIHN0Y2IsIFNCTF9XQUlUKTsKLSNlbHNlCi0Jc2N0cF9wdWxsX29mZl9jb250
cm9sX3RvX25ld19pbnAoaW5wLCBuX2lucCwgc3RjYiwgTV9XQUlUT0spOwotI2VuZGlmCi0JYXRv
bWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCXJldHVybiAobmV3c28p
OwotI2VuZGlmCi19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9w
ZWVsb2ZmLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAyMjM3NWUzZDMwYWY4YjJlMTZiNmEzNTRhYzczNmNjZDYwZGM2NGNi
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9wZWVsb2ZmLmgKKysrIC9kZXYvbnVsbApAQCAtMSw2OCArMCwwIEBACi0v
Ki0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFs
bCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICog
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
ZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVC
U0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9wZWVsb2ZmLmggMzA5NjA3IDIwMTYtMTItMDYgMTA6
MjE6MjVaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1BFRUxP
RkZfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfCi0jaWYgZGVmaW5lZChIQVZF
X1NDVFBfUEVFTE9GRl9TT0NLT1BUKQotLyogc29ja2V0IG9wdGlvbiBwZWVsb2ZmICovCi1zdHJ1
Y3Qgc2N0cF9wZWVsb2ZmX29wdCB7Ci0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0JaW50IHM7
Ci0jZWxzZQotCUhBTkRMRSBzOwotI2VuZGlmCi0Jc2N0cF9hc3NvY190IGFzc29jX2lkOwotI2lm
ICFkZWZpbmVkKF9fV2luZG93c19fKQotCWludCBuZXdfc2Q7Ci0jZWxzZQotCUhBTkRMRSBuZXdf
c2Q7Ci0jZW5kaWYKLX07Ci0jZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCAqLwot
I2lmIGRlZmluZWQoX0tFUk5FTCkKLWludCBzY3RwX2Nhbl9wZWVsX29mZihzdHJ1Y3Qgc29ja2V0
ICosIHNjdHBfYXNzb2NfdCk7Ci1pbnQgc2N0cF9kb19wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKiwg
c3RydWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QpOwotI2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BF
RUxPRkZfU09DS09QVCkKLXN0cnVjdCBzb2NrZXQgKnNjdHBfZ2V0X3BlZWxvZmYoc3RydWN0IHNv
Y2tldCAqLCBzY3RwX2Fzc29jX3QsIGludCAqKTsKLWludCBzY3RwX3BlZWxvZmZfb3B0aW9uKHN0
cnVjdCBwcm9jICpwLCBzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCAqcGVlbG9mZik7Ci0jZW5kaWYg
LyogSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCAqLwotI2VuZGlmIC8qIF9LRVJORUwgKi8KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQgc2N0cF9jYW5fcGVlbF9vZmYoc3RydWN0IHNv
Y2tldCAqLCBzY3RwX2Fzc29jX3QpOwotaW50IHNjdHBfZG9fcGVlbG9mZihzdHJ1Y3Qgc29ja2V0
ICosIHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190KTsKLSNlbmRpZiAvKiBfX1VzZXJzcGFj
ZV9fICovCi0jZW5kaWYgLyogX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcHJvY2Vzc19sb2NrLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFkMTA5
ODU3YTIyN2JkMWFkODk3NjdlOTlmN2ZhMzJkNTc5YzM2MDMuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Byb2Nlc3Nf
bG9jay5oCisrKyAvZGV2L251bGwKQEAgLTEsNjQyICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0
IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkgTWljaGFlbCBU
dWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbgotICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVy
IHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
ICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQot
ICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLSNpZm5kZWYgX19zY3RwX3Byb2Nlc3Nf
bG9ja19oX18KLSNkZWZpbmUgX19zY3RwX3Byb2Nlc3NfbG9ja19oX18KLQotLyoKLSAqIE5lZWQg
dG8geWV0IGRlZmluZSBmaXZlIGF0b21pYyBmdWN0aW9ucyBvcgotICogdGhlaXIgZXF1aXZhbGFu
dC4KLSAqIC0gYXRvbWljX2FkZF9pbnQoJmZvbywgdmFsKSAtIGFkZCBhdG9taWNhbGx5IHRoZSB2
YWx1ZQotICogLSBhdG9taWNfZmV0Y2hhZGRfaW50KCZmb28sIHZhbCkgLSBkb2VzIHNhbWUgYXMg
YXRvbWljX2FkZF9pbnQKLSAqCQkJCSAgICAgIGJ1dCB2YWx1ZSBpdCB3YXMgaXMgcmV0dXJuZWQu
Ci0gKiAtIGF0b21pY19zdWJ0cmFjdF9pbnQoJmZvbywgdmFsKSAtIGNhbiBiZSBtYWRlIGZyb20g
YXRvbWljX2FkZF9pbnQoKQotICoKLSAqIC0gYXRvbWljX2NtcHNldF9pbnQoJmZvbywgdmFsdWUs
IG5ld3ZhbHVlKSAtIERvZXMgYSBzZXQgb2YgbmV3dmFsdWUKLSAqCQkJCQkgICAgICAgIGluIGZv
byBpZiBhbmQgb25seSBpZgotICoJCQkJCSAgICAgICAgZm9vIGlzIHZhbHVlLiBSZXR1cm5zIDAK
LSAqCQkJCQkgICAgICAgIG9uIHN1Y2Nlc3MuCi0gKi8KLQotI2lmZGVmIFNDVFBfUEVSX1NPQ0tF
VF9MT0NLSU5HCi0vKgotICogcGVyIHNvY2tldCBsZXZlbCBsb2NraW5nCi0gKi8KLQotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLS8qIExvY2sgZm9yIElORk8gc3R1ZmYgKi8K
LSNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZP
X1JMT0NLKCkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9J
TlBfSU5GT19XTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCi0jZGVmaW5l
IFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKLSNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5J
VCgpCi0jZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQotI2Vsc2UKLSNkZWZpbmUgU0NU
UF9JTlBfSU5GT19MT0NLX0lOSVQoKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkKLSNk
ZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19XTE9D
SygpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCi0jZGVmaW5lIFNDVFBfSU5QX0lO
Rk9fTE9DS19ERVNUUk9ZKCkKLSNkZWZpbmUgU0NUUF9JUElfQ09VTlRfSU5JVCgpCi0jZGVmaW5l
IFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9UQ0JfU0VO
RF9MT0NLX0lOSVQoX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3Rj
YikKLSNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX1NF
TkRfVU5MT0NLKF90Y2IpCi0KLS8qIExvY2sgZm9yIElOUCAqLwotI2RlZmluZSBTQ1RQX0lOUF9M
T0NLX0lOSVQoX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNUUk9ZKF9pbnApCi0KLSNk
ZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfUlVOTE9DSyhfaW5w
KQotI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQotI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NL
KF9pbmVwKQotI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKQotI2RlZmluZSBTQ1RQX0lO
UF9ERUNSX1JFRihfaW5wKQotCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9p
bnApCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19ERVNUUk9ZKF9pbnApCi0jZGVmaW5l
IFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKQotI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX1VO
TE9DSyhfaW5wKQotCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKQotI2RlZmluZSBT
Q1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9p
bnApCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApCi0KLS8qIExvY2sgZm9yIFRD
QiAqLwotI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0lOSVQoX3RjYikKLSNkZWZpbmUgU0NUUF9UQ0Jf
TE9DS19ERVNUUk9ZKF90Y2IpCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikKLSNkZWZpbmUg
U0NUUF9UQ0JfVFJZTE9DSyhfdGNiKSAxCi0jZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKQot
I2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0tfSUZPV05FRChfdGNiKQotI2RlZmluZSBTQ1RQX1RDQl9M
T0NLX0FTU0VSVChfdGNiKQotCi0jZWxzZQotLyoKLSAqIHBlciB0Y2IgbGV2ZWwgbG9ja2luZwot
ICovCi0jZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0lOSVQoKQotCi0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBTQ1RQX1dRX0FERFJfSU5JVCgpIFwKLSAgICAgICAg
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQot
I2RlZmluZSBTQ1RQX1dRX0FERFJfREVTVFJPWSgpIFwKLQlEZWxldGVDcml0aWNhbFNlY3Rpb24o
JlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkKLSNkZWZpbmUgU0NUUF9XUV9BRERSX0xPQ0so
KSBcCi0gICAgICAgIEVudGVyQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRy
X210eCkpCi0jZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxPQ0soKSBcCi0gICAgICAgIExlYXZlQ3Jp
dGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCi0KLQotI2RlZmluZSBT
Q1RQX0lOUF9JTkZPX0xPQ0tfSU5JVCgpIFwKLQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RF
U1RST1koKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpIFwKLQlFbnRlckNyaXRpY2FsU2Vj
dGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9f
VFJZTE9DSygpCVwKLSAgICAgICAgVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9J
TkZPKGlwaV9lcF9tdHgpKQotI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAotCUVudGVy
Q3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NU
UF9JTlBfSU5GT19SVU5MT0NLKCkgXAotIAlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNF
X0lORk8oaXBpX2VwX210eCkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCVwKLQlM
ZWF2ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCi0KLSNkZWZp
bmUgU0NUUF9JUF9QS1RMT0dfSU5JVCgpIFwKLSAgICAgICAgSW5pdGlhbGl6ZUNyaXRpY2FsU2Vj
dGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX3BrdGxvZ19tdHgpKQotI2RlZmluZSBTQ1RQX0lQX1BL
VExPR19ERVNUUk9ZICgpIFwKLQlEZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZP
KGlwaV9wa3Rsb2dfbXR4KSkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygpIFwKLSAgICAJ
RW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKLSNk
ZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCi0KLS8qCi0gKiBUaGUgSU5QIGxvY2tzIHdl
IHdpbGwgdXNlIGZvciBsb2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFtcGxlIGlm
Ci0gKiB3ZSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxldmVsIGZv
ciBleGFtcGxlIHJhbmRvbV9zdG9yZQotICogb3IgY29va2llIHNlY3JldHMgd2UgbG9jayB0aGUg
SU5QIGxldmVsLgotICovCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBcCi0JSW5p
dGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfcmRhdGFfbXR4KQotI2RlZmluZSBT
Q1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkgXAotCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9p
bnApLT5pbnBfcmRhdGFfbXR4KQotI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0xPQ0soX2lucCkgXAot
CUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCi0jZGVmaW5lIFND
VFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnAp
LT5pbnBfcmRhdGFfbXR4KQotCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfSU5JVChfaW5wKSBcCi0J
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KQotCi0jZGVmaW5lIFND
VFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApIFwKLQlJbml0aWFsaXplQ3JpdGljYWxTZWN0
aW9uKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KQotCi0jZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVT
VFJPWShfaW5wKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCi0K
LSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1koX2lucCkgXAotCURlbGV0ZUNy
aXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKLQotI2lmZGVmIFNDVFBfTE9D
S19MT0dHSU5HCi0jZGVmaW5lIFNDVFBfSU5QX1JMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0JaWYo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdf
RU5BQkxFKSBzY3RwX2xvZ19sb2NrKF9pbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQ
X0xPR19MT0NLX0lOUCk7XAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgp
OwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkJZG8geyAJ
CQkJCVwKLQlzY3RwX2xvZ19sb2NrKF9pbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQ
X0xPR19MT0NLX0lOUCk7XAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgp
OwkJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotCi0jZGVmaW5lIFNDVFBfSU5QX1JMT0NLKF9pbnAp
CWRvIHsgCQkJCQlcCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCk7CQkJ
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQlkbyB7IAkJCQkJ
XAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUg
KDApCi0jZW5kaWYKLQotCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwK
LQlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKLQotI2Rl
ZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShfdGNiKSBcCi0JRGVsZXRlQ3JpdGljYWxT
ZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xP
Q0soX3RjYikgZG8geyBcCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3NlbmRf
bXR4KTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX1VOTE9DSyhfdGNi
KSBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX3NlbmRfbXR4KQotCi0jZGVm
aW5lIFNDVFBfSU5QX0lOQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZj
b3VudCksIDEpCi0jZGVmaW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50
KCYoKF9pbnApLT5yZWZjb3VudCksIC0xKQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLSNk
ZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJXAotCWlmKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkg
c2N0cF9sb2dfbG9jayhfaW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9D
S19DUkVBVEUpOyBcCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX2NyZWF0ZV9t
dHgpOwkJXAotfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9D
SyhfaW5wKSBkbyB7CQkJCVwKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3Jl
YXRlX210eCk7CQlcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9JTlBfUlVO
TE9DSyhfaW5wKSBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCkKLSNk
ZWZpbmUgU0NUUF9JTlBfV1VOTE9DSyhfaW5wKSBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihf
aW5wKS0+aW5wX210eCkKLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkgXAot
CUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KQotCi0vKgotICog
Rm9yIHRoZSBtYWpvcml0eSBvZiB0aGluZ3MgKG9uY2Ugd2UgaGF2ZSBmb3VuZCB0aGUgYXNzb2Np
YXRpb24pIHdlIHdpbGwKLSAqIGxvY2sgdGhlIGFjdHVhbCBhc3NvY2lhdGlvbiBtdXRleC4gVGhp
cyB3aWxsIHByb3RlY3QgYWxsIHRoZSBhc3NvaWNpYXRpb24KLSAqIGxldmVsIHF1ZXVlcyBhbmQg
c3RyZWFtcyBhbmQgc3VjaC4gV2Ugd2lsbCBuZWVkIHRvIGxvY2sgdGhlIHNvY2tldCBsYXllcgot
ICogd2hlbiB3ZSBzdHVmZiBkYXRhIHVwIGludG8gdGhlIHJlY2VpdmluZyBzYl9tYi4gSS5lLiB3
ZSB3aWxsIG5lZWQgdG8gZG8gYW4KLSAqIGV4dHJhIFNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdikg
ZXZlbiB0aG91Z2ggdGhlIGFzc29jaWF0aW9uIGlzIGxvY2tlZC4KLSAqLwotCi0jZGVmaW5lIFND
VFBfVENCX0xPQ0tfSU5JVChfdGNiKSBcCi0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKF90
Y2IpLT50Y2JfbXR4KQotCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfREVTVFJPWShfdGNiKSBcCi0J
RGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9tdHgpCi0KLSNpZmRlZiBTQ1RQX0xP
Q0tfTE9HR0lORwotI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpICBkbyB7CQkJCQlcCi0JaWYo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdf
RU5BQkxFKSBzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tf
VENCKTsJCVwKLQlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KTsJCQlcCi19
IHdoaWxlICgwKQotCi0jZWxzZQotI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpICBkbyB7CQkJ
CQlcCi0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCk7CQkJXAotfSB3aGls
ZSAoMCkKLSNlbmRpZgotCi0jZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgCSgoVHJ5RW50
ZXJDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCkpKQotCi0jZGVmaW5lIFNDVFBfVENC
X1VOTE9DSyhfdGNiKQlkbyB7ICBcCi0JTGVhdmVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNi
X210eCk7ICBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0tfQVNTRVJUKF90
Y2IpCi0KLSNlbHNlIC8qIGFsbCBVc2Vyc3BhY2VzIGV4Y2VwdCBXaW5kb3dzICovCi0jZGVmaW5l
IFNDVFBfV1FfQUREUl9JTklUKCkgXAotICAgICAgICAodm9pZClwdGhyZWFkX211dGV4X2luaXQo
JlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSwgTlVMTCkKLSNkZWZpbmUgU0NUUF9XUV9BRERS
X0RFU1RST1koKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQX0JBU0VfSU5G
Tyh3cV9hZGRyX210eCkpCi0jZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NLKCkgXAotICAgICAgICAo
dm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkKLSNk
ZWZpbmUgU0NUUF9XUV9BRERSX1VOTE9DSygpIFwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRl
eF91bmxvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkKLQotCi0jZGVmaW5lIFNDVFBf
SU5QX0lORk9fTE9DS19JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9C
QVNFX0lORk8oaXBpX2VwX210eCksIE5VTEwpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19E
RVNUUk9ZKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNFX0lORk8o
aXBpX2VwX210eCkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fUkxPQ0soKSBcCi0JKHZvaWQpcHRo
cmVhZF9tdXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NU
UF9JTlBfSU5GT19UUllMT0NLKCkJXAotICAgICAgICAoIShwdGhyZWFkX211dGV4X3RyeWxvY2so
JlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKSkpCi0jZGVmaW5lIFNDVFBfSU5QX0lORk9fV0xP
Q0soKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSkKLSNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkJXAotCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkKLSNkZWZpbmUgU0NUUF9J
TlBfSU5GT19XVU5MT0NLKCkJXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfZXBfbXR4KSkKLQotI2RlZmluZSBTQ1RQX0lQX1BLVExPR19JTklUKCkgXAot
ICAgICAgICAodm9pZClwdGhyZWFkX211dGV4X2luaXQoJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rs
b2dfbXR4KSwgTlVMTCkKLSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJPWSgpIFwKLQkodm9p
ZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkK
LSNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygpIFwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9t
dXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCi0jZGVmaW5lIFNDVFBf
SVBfUEtUTE9HX1VOTE9DSygpCVwKLSAgICAgICAgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2so
JlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKLQotCi0KLS8qCi0gKiBUaGUgSU5QIGxv
Y2tzIHdlIHdpbGwgdXNlIGZvciBsb2NraW5nIGFuIFNDVFAgZW5kcG9pbnQsIHNvIGZvciBleGFt
cGxlIGlmCi0gKiB3ZSB3YW50IHRvIGNoYW5nZSBzb21ldGhpbmcgYXQgdGhlIGVuZHBvaW50IGxl
dmVsIGZvciBleGFtcGxlIHJhbmRvbV9zdG9yZQotICogb3IgY29va2llIHNlY3JldHMgd2UgbG9j
ayB0aGUgSU5QIGxldmVsLgotICovCi0jZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChfaW5wKSBc
Ci0JKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCYoX2lucCktPmlucF9yZGF0YV9tdHgsIE5VTEwp
Ci0KLSNkZWZpbmUgU0NUUF9JTlBfUkVBRF9ERVNUUk9ZKF9pbnApIFwKLQkodm9pZClwdGhyZWFk
X211dGV4X2Rlc3Ryb3koJihfaW5wKS0+aW5wX3JkYXRhX210eCkKLQotI2RlZmluZSBTQ1RQX0lO
UF9SRUFEX0xPQ0soX2lucCkJZG8geyBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lu
cCktPmlucF9yZGF0YV9tdHgpOyAgICBcCi19IHdoaWxlICgwKQotCi0KLSNkZWZpbmUgU0NUUF9J
TlBfUkVBRF9VTkxPQ0soX2lucCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lu
cCktPmlucF9yZGF0YV9tdHgpCi0KLSNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApIFwK
LQkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihfaW5wKS0+aW5wX210eCwgTlVMTCkKLQotI2Rl
ZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9t
dXRleF9pbml0KCYoX2lucCktPmlucF9jcmVhdGVfbXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBf
SU5QX0xPQ0tfREVTVFJPWShfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCYo
X2lucCktPmlucF9tdHgpCi0KLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1ko
X2lucCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9pbnApLT5pbnBfY3JlYXRl
X210eCkKLQotI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5HCi0jZGVmaW5lIFNDVFBfSU5QX1JMT0NL
KF9pbnApCWRvIHsgCQkJCQlcCi0JaWYoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSBzY3RwX2xvZ19sb2NrKF9pbnAsIChzdHJ1
Y3Qgc2N0cF90Y2IgKilOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7XAotCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5l
IFNDVFBfSU5QX1dMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0Jc2N0cF9sb2dfbG9jayhfaW5wLCAo
c3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9DS19JTlApO1wKLQkodm9pZClwdGhy
ZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCk7CQkJXAotfSB3aGlsZSAoMCkKLQotI2Vs
c2UKLQotI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKQlkbyB7IAkJCQkJXAotCSh2b2lkKXB0
aHJlYWRfbXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KTsJCQlcCi19IHdoaWxlICgwKQotCi0j
ZGVmaW5lIFNDVFBfSU5QX1dMT0NLKF9pbnApCWRvIHsgCQkJCQlcCi0JKHZvaWQpcHRocmVhZF9t
dXRleF9sb2NrKCYoX2lucCktPmlucF9tdHgpOwkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQot
Ci0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwKLQkodm9pZClwdGhyZWFk
X211dGV4X2luaXQoJihfdGNiKS0+dGNiX3NlbmRfbXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBf
VENCX1NFTkRfTE9DS19ERVNUUk9ZKF90Y2IpIFwKLQkodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ry
b3koJihfdGNiKS0+dGNiX3NlbmRfbXR4KQotCi0jZGVmaW5lIFNDVFBfVENCX1NFTkRfTE9DSyhf
dGNiKSBkbyB7IFwKLQkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX3NlbmRf
bXR4KTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX1RDQl9TRU5EX1VOTE9DSyhfdGNi
KSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNiX3NlbmRfbXR4KQot
Ci0jZGVmaW5lIFNDVFBfSU5QX0lOQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50KCYoKF9pbnAp
LT5yZWZjb3VudCksIDEpCi0jZGVmaW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnApIGF0b21pY19h
ZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIC0xKQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJ
TkcKLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJXAotCWlmKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VO
QUJMRSkgc2N0cF9sb2dfbG9jayhfaW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9M
T0dfTE9DS19DUkVBVEUpOyBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlu
cF9jcmVhdGVfbXR4KTsJCVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZSBTQ1RQX0FTT0Nf
Q1JFQVRFX0xPQ0soX2lucCkgZG8gewkJCQlcCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYo
X2lucCktPmlucF9jcmVhdGVfbXR4KTsJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2RlZmlu
ZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApIFwKLQkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygm
KF9pbnApLT5pbnBfbXR4KQotI2RlZmluZSBTQ1RQX0lOUF9XVU5MT0NLKF9pbnApIFwKLQkodm9p
ZClwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4KQotI2RlZmluZSBTQ1RQX0FT
T0NfQ1JFQVRFX1VOTE9DSyhfaW5wKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJihf
aW5wKS0+aW5wX2NyZWF0ZV9tdHgpCi0KLS8qCi0gKiBGb3IgdGhlIG1ham9yaXR5IG9mIHRoaW5n
cyAob25jZSB3ZSBoYXZlIGZvdW5kIHRoZSBhc3NvY2lhdGlvbikgd2Ugd2lsbAotICogbG9jayB0
aGUgYWN0dWFsIGFzc29jaWF0aW9uIG11dGV4LiBUaGlzIHdpbGwgcHJvdGVjdCBhbGwgdGhlIGFz
c29pY2lhdGlvbgotICogbGV2ZWwgcXVldWVzIGFuZCBzdHJlYW1zIGFuZCBzdWNoLiBXZSB3aWxs
IG5lZWQgdG8gbG9jayB0aGUgc29ja2V0IGxheWVyCi0gKiB3aGVuIHdlIHN0dWZmIGRhdGEgdXAg
aW50byB0aGUgcmVjZWl2aW5nIHNiX21iLiBJLmUuIHdlIHdpbGwgbmVlZCB0byBkbyBhbgotICog
ZXh0cmEgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KSBldmVuIHRob3VnaCB0aGUgYXNzb2NpYXRp
b24gaXMgbG9ja2VkLgotICovCi0KLSNkZWZpbmUgU0NUUF9UQ0JfTE9DS19JTklUKF90Y2IpIFwK
LQkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihfdGNiKS0+dGNiX210eCwgTlVMTCkKLQotI2Rl
ZmluZSBTQ1RQX1RDQl9MT0NLX0RFU1RST1koX3RjYikgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
ZGVzdHJveSgmKF90Y2IpLT50Y2JfbXR4KQotCi0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKLSNk
ZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKSAgZG8gewkJCQkJXAotCWlmKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgc2N0cF9s
b2dfbG9jayhfdGNiLT5zY3RwX2VwLCBfdGNiLCBTQ1RQX0xPR19MT0NLX1RDQik7CQlcCi0JKHZv
aWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX3RjYiktPnRjYl9tdHgpOwkJCVwKLX0gd2hpbGUgKDAp
Ci0KLSNlbHNlCi0jZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikgIGRvIHsJCQkJCVwKLQkodm9p
ZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX210eCk7CQkJXAotfSB3aGlsZSAoMCkK
LSNlbmRpZgotCi0jZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgCSghKHB0aHJlYWRfbXV0
ZXhfdHJ5bG9jaygmKF90Y2IpLT50Y2JfbXR4KSkpCi0KLSNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NL
KF90Y2IpCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX3RjYiktPnRjYl9tdHgpCi0KLSNk
ZWZpbmUgU0NUUF9UQ0JfTE9DS19BU1NFUlQoX3RjYikKLSNlbmRpZgotCi0jZW5kaWYgLyogU0NU
UF9QRVJfU09DS0VUX0xPQ0tJTkcgKi8KLQotCi0vKgotICogY29tbW9uIGxvY2tzCi0gKi8KLQot
LyogY29waWVkIG92ZXIgdG8gY29tcGlsZSAqLwotI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0NPTlRF
TkRFRChfaW5wKSAoMCkgLyogRG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0jZGVm
aW5lIFNDVFBfSU5QX1JFQURfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRo
aXMgaXMgcG9zc2libGUgKi8KLSNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0NPTlRFTkRF
RChfaW5wKSAoMCkgLyogRG9uJ3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCi0KLQotLyog
c29ja2V0IGxvY2tzICovCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9z
b19idWYpCi0jZGVmaW5lIFNPQ0tCVUZfTE9DSyhfc29fYnVmKSBFbnRlckNyaXRpY2FsU2VjdGlv
bigmKF9zb19idWYpLT5zYl9tdHgpCi0jZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpIExl
YXZlQ3JpdGljYWxTZWN0aW9uKCYoX3NvX2J1ZiktPnNiX210eCkKLSNkZWZpbmUgU09DS19MT0NL
KF9zbykgIFNPQ0tCVUZfTE9DSygmKF9zbyktPnNvX3JjdikKLSNkZWZpbmUgU09DS19VTkxPQ0so
X3NvKSAgU09DS0JVRl9VTkxPQ0soJihfc28pLT5zb19yY3YpCi0jZWxzZQotI2RlZmluZSBTT0NL
QlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpIEtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKFNP
Q0tCVUZfTVRYKF9zb19idWYpKSA9PSBFQlVTWSwgKCIlczogc29ja2V0IGJ1ZmZlciBub3QgbG9j
a2VkIiwgX19mdW5jX18pKQotI2RlZmluZSBTT0NLQlVGX0xPQ0soX3NvX2J1ZikgICBwdGhyZWFk
X211dGV4X2xvY2soU09DS0JVRl9NVFgoX3NvX2J1ZikpCi0jZGVmaW5lIFNPQ0tCVUZfVU5MT0NL
KF9zb19idWYpIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKFNPQ0tCVUZfTVRYKF9zb19idWYpKQotI2Rl
ZmluZQlTT0NLX0xPQ0soX3NvKQkJU09DS0JVRl9MT0NLKCYoX3NvKS0+c29fcmN2KQotI2RlZmlu
ZQlTT0NLX1VOTE9DSyhfc28pCVNPQ0tCVUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQotI2VuZGlm
Ci0jZWxzZQotI2RlZmluZSBTT0NLX0xPQ0soX3NvKQotI2RlZmluZSBTT0NLX1VOTE9DSyhfc28p
Ci0jZGVmaW5lIFNPQ0tCVUZfTE9DSyhfc29fYnVmKQotI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhf
c29fYnVmKQotI2RlZmluZSBTT0NLQlVGX0xPQ0tfQVNTRVJUKF9zb19idWYpCi0jZW5kaWYKLQot
I2RlZmluZSBTQ1RQX1NUQVRMT0dfSU5JVF9MT0NLKCkKLSNkZWZpbmUgU0NUUF9TVEFUTE9HX0xP
Q0soKQotI2RlZmluZSBTQ1RQX1NUQVRMT0dfVU5MT0NLKCkKLSNkZWZpbmUgU0NUUF9TVEFUTE9H
X0RFU1RST1koKQotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotLyogYWRk
cmVzcyBsaXN0IGxvY2tzICovCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfSU5JVCgpIFwKLQlJbml0
aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQotI2Rl
ZmluZSBTQ1RQX0lQSV9BRERSX0RFU1RST1koKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQotCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfUkxP
Q0soKSAJCQkJCQlcCi0JZG8geyAJCQkJCQkJCVwKLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlND
VFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NU
UF9JUElfQUREUl9SVU5MT0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfYWRkcl9tdHgpKQotCi0jZGVmaW5lIFNDVFBfSVBJX0FERFJfV0xPQ0soKSAJCQkJ
CQlcCi0JZG8geyAJCQkJCQkJCVwKLQkJRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9J
TkZPKGlwaV9hZGRyX210eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NUUF9JUElfQURE
Ul9XVU5MT0NLKCkgXAotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlf
YWRkcl9tdHgpKQotCi0KLS8qIGl0ZXJhdG9yIGxvY2tzICovCi0jZGVmaW5lIFNDVFBfSVRFUkFU
T1JfTE9DS19JTklUKCkgXAotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3Rs
Lml0X210eCkKLQotI2RlZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0soKSAJCQkJCQlcCi0JZG8gewkJ
CQkJCQkJXAotCQlFbnRlckNyaXRpY2FsU2VjdGlvbigmc2N0cF9pdF9jdGwuaXRfbXR4KTsJCVwK
LQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfVU5MT0NLKCkgXAotCUxlYXZl
Q3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLSNkZWZpbmUgU0NUUF9JVEVS
QVRPUl9MT0NLX0RFU1RST1koKSBcCi0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZzY3RwX2l0X2N0
bC5pdF9tdHgpCi0KLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9JTklUKCkgXAotCUlu
aXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgp
Ci0KLSNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfREVTVFJPWSgpIFwKLQlEZWxldGVDcml0
aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0KLSNkZWZpbmUg
U0NUUF9JUElfSVRFUkFUT1JfV1FfTE9DSygpIFwKLQlkbyB7IFwKLQkJRW50ZXJDcml0aWNhbFNl
Y3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpOyBcCi0JfSB3aGlsZSAoMCkK
LQotI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCi0JTGVhdmVDcml0aWNh
bFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0KLSNlbHNlIC8qIGVu
ZCBvZiBfX1VzZXJzcGFjZV9vc19XaW5kb3dzICovCi0vKiBhZGRyZXNzIGxpc3QgbG9ja3MgKi8K
LSNkZWZpbmUgU0NUUF9JUElfQUREUl9JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5p
dCgmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSwgTlVMTCkKLSNkZWZpbmUgU0NUUF9JUElf
QUREUl9ERVNUUk9ZKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmU0NUUF9CQVNF
X0lORk8oaXBpX2FkZHJfbXR4KSkKLQotI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgCQkJ
CQkJXAotCWRvIHsgCQkJCQkJCQlcCi0JCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9C
QVNFX0lORk8oaXBpX2FkZHJfbXR4KSk7CVwKLQl9IHdoaWxlICgwKQotI2RlZmluZSBTQ1RQX0lQ
SV9BRERSX1JVTkxPQ0soKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFT
RV9JTkZPKGlwaV9hZGRyX210eCkpCi0KLSNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DSygpIAkJ
CQkJCVwKLQlkbyB7IAkJCQkJCQkJXAotCQkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBf
QkFTRV9JTkZPKGlwaV9hZGRyX210eCkpOwlcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgU0NUUF9J
UElfQUREUl9XVU5MT0NLKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfYWRkcl9tdHgpKQotCi0KLS8qIGl0ZXJhdG9yIGxvY2tzICovCi0jZGVmaW5l
IFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgm
c2N0cF9pdF9jdGwuaXRfbXR4LCBOVUxMKQotCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DSygp
IAkJCQkJCVwKLQlkbyB7CQkJCQkJCQlcCi0JCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmc2N0
cF9pdF9jdGwuaXRfbXR4KTsJCVwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSVRFUkFU
T1JfVU5MT0NLKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZzY3RwX2l0X2N0bC5p
dF9tdHgpCi0KLSNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLX0RFU1RST1koKSBcCi0JKHZvaWQp
cHRocmVhZF9tdXRleF9kZXN0cm95KCZzY3RwX2l0X2N0bC5pdF9tdHgpCi0KLQotI2RlZmluZSBT
Q1RQX0lQSV9JVEVSQVRPUl9XUV9JTklUKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgm
c2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCwgTlVMTCkKLQotI2RlZmluZSBTQ1RQX0lQ
SV9JVEVSQVRPUl9XUV9ERVNUUk9ZKCkgXAotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm
c2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCkKLQotI2RlZmluZSBTQ1RQX0lQSV9JVEVS
QVRPUl9XUV9MT0NLKCkgXAotCWRvIHsgXAotCQkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJnNj
dHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmlu
ZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCi0JKHZvaWQpcHRocmVhZF9tdXRleF91
bmxvY2soJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCi0jZW5kaWYKLQotI2RlZmlu
ZSBTQ1RQX0lOQ1JfRVBfQ09VTlQoKSBcCi0JZG8geyBcCi0JCWF0b21pY19hZGRfaW50KCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfY291bnRfZXApLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUg
U0NUUF9ERUNSX0VQX0NPVU5UKCkgXAotCWRvIHsgXAotCSAgICAgICBhdG9taWNfc3VidHJhY3Rf
aW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfZXApLCAxKTsgXAotCX0gd2hpbGUgKDApCi0K
LSNkZWZpbmUgU0NUUF9JTkNSX0FTT0NfQ09VTlQoKSBcCi0JZG8geyBcCi0JICAgICAgIGF0b21p
Y19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfYXNvYyksIDEpOyBcCi0JfSB3aGls
ZSAoMCkKLQotI2RlZmluZSBTQ1RQX0RFQ1JfQVNPQ19DT1VOVCgpIFwKLQlkbyB7IFwKLQkgICAg
ICAgYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpLCAx
KTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9JTkNSX0xBRERSX0NPVU5UKCkgXAot
CWRvIHsgXAotCSAgICAgICBhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X2xhZGRyKSwgMSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfREVDUl9MQUREUl9D
T1VOVCgpIFwKLQlkbyB7IFwKLQkgICAgICAgYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNF
X0lORk8oaXBpX2NvdW50X2xhZGRyKSwgMSk7IFwKLQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFND
VFBfSU5DUl9SQUREUl9DT1VOVCgpIFwKLQlkbyB7IFwKLSAJICAgICAgIGF0b21pY19hZGRfaW50
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpLCAxKTsgXAotCX0gd2hpbGUgKDApCi0K
LSNkZWZpbmUgU0NUUF9ERUNSX1JBRERSX0NPVU5UKCkgXAotCWRvIHsgXAotIAkgICAgICAgYXRv
bWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JhZGRyKSwgMSk7IFwK
LQl9IHdoaWxlICgwKQotCi0jZGVmaW5lIFNDVFBfSU5DUl9DSEtfQ09VTlQoKSBcCi0JZG8geyBc
Ci0gIAkgICAgICAgYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVu
ayksIDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCkg
XAotCWRvIHsgXAotICAJICAgICAgIGF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZP
KGlwaV9jb3VudF9jaHVuayksIDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSBTQ1RQX0lO
Q1JfUkVBRFFfQ09VTlQoKSBcCi0JZG8geyBcCi0JICAgICAgIGF0b21pY19hZGRfaW50KCZTQ1RQ
X0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpLCAxKTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZp
bmUgU0NUUF9ERUNSX1JFQURRX0NPVU5UKCkgXAotCWRvIHsgXAotCSAgICAgICBhdG9taWNfc3Vi
dHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpLCAxKTsgXAotCX0gd2hp
bGUgKDApCi0KLSNkZWZpbmUgU0NUUF9JTkNSX1NUUk1PUV9DT1VOVCgpIFwKLQlkbyB7IFwKLQkg
ICAgICAgYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpLCAx
KTsgXAotCX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpIFwK
LQlkbyB7IFwKLQkgICAgICAgYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBp
X2NvdW50X3N0cm1vcSksIDEpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3No
YTEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzg2NTE3ZjkxY2M3NTczMjc4NTI2
NzIzZDIyMjRhYmMwMGU2YzVhYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCisrKyAvZGV2L251bGwKQEAg
LTEsMzI3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMywgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTMsICAgICAgYnkgTGFsbHkgU2luZ2guIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAq
Ci0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
bgotICogICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENp
c2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zaGExLmg+Ci0KLSNp
ZiBkZWZpbmVkKFNDVFBfVVNFX05TU19TSEExKQotLyogQSBTSEEtMSBEaWdlc3QgaXMgMTYwIGJp
dHMsIG9yIDIwIGJ5dGVzICovCi0jZGVmaW5lIFNIQV9ESUdFU1RfTEVOR1RIICgyMCkKLQotdm9p
ZAotc2N0cF9zaGExX2luaXQoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCi17Ci0JY3R4
LT5wazExX2N0eCA9IFBLMTFfQ3JlYXRlRGlnZXN0Q29udGV4dChTRUNfT0lEX1NIQTEpOwotCVBL
MTFfRGlnZXN0QmVnaW4oY3R4LT5wazExX2N0eCk7Ci19Ci0KLXZvaWQKLXNjdHBfc2hhMV91cGRh
dGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0
ciwgdW5zaWduZWQgaW50IHNpeikKLXsKLQlQSzExX0RpZ2VzdE9wKGN0eC0+cGsxMV9jdHgsIHB0
ciwgc2l6KTsKLX0KLQotdm9pZAotc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2Vz
dCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCi17Ci0JdW5zaWduZWQgaW50IG91dHB1
dF9sZW4gPSAwOwotCi0JUEsxMV9EaWdlc3RGaW5hbChjdHgtPnBrMTFfY3R4LCBkaWdlc3QsICZv
dXRwdXRfbGVuLCBTSEFfRElHRVNUX0xFTkdUSCk7Ci0JUEsxMV9EZXN0cm95Q29udGV4dChjdHgt
PnBrMTFfY3R4LCBQUl9UUlVFKTsKLX0KLQotI2VsaWYgZGVmaW5lZChTQ1RQX1VTRV9PUEVOU1NM
X1NIQTEpCi0KLXZvaWQKLXNjdHBfc2hhMV9pbml0KHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAq
Y3R4KQotewotCVNIQTFfSW5pdCgmY3R4LT5zaGFfY3R4KTsKLX0KLQotdm9pZAotc2N0cF9zaGEx
X3VwZGF0ZShzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hh
ciAqcHRyLCB1bnNpZ25lZCBpbnQgc2l6KQotewotCVNIQTFfVXBkYXRlKCZjdHgtPnNoYV9jdHgs
IHB0ciwgKHVuc2lnbmVkIGxvbmcpc2l6KTsKLX0KLQotdm9pZAotc2N0cF9zaGExX2ZpbmFsKHVu
c2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCi17Ci0J
U0hBMV9GaW5hbChkaWdlc3QsICZjdHgtPnNoYV9jdHgpOwotfQotCi0jZWxzZQotCi0jaW5jbHVk
ZSA8c3RyaW5nLmg+Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1
ZGUgPHdpbnNvY2syLmg+Ci0jZWxpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKLSNpbmNsdWRlIDxh
cnBhL2luZXQuaD4KLSNlbmRpZgotCi0jZGVmaW5lIEYxKEIsQyxEKSAoKChCICYgQykgfCAoKH5C
KSAmIEQpKSkJLyogMCAgPD0gdCA8PSAxOSAqLwotI2RlZmluZSBGMihCLEMsRCkgKEIgXiBDIF4g
RCkJLyogMjAgPD0gdCA8PSAzOSAqLwotI2RlZmluZSBGMyhCLEMsRCkgKChCICYgQykgfCAoQiAm
IEQpIHwgKEMgJiBEKSkJLyogNDAgPD0gdCA8PSA1OSAqLwotI2RlZmluZSBGNChCLEMsRCkgKEIg
XiBDIF4gRCkJLyogNjAwIDw9IHQgPD0gNzkgKi8KLQotLyogY2lyY3VsYXIgc2hpZnQgKi8KLSNk
ZWZpbmUgQ1NISUZUKEEsQikgKChCIDw8IEEpIHwgKEIgPj4gKDMyLUEpKSkKLQotI2RlZmluZSBL
MSAweDVhODI3OTk5CQkvKiAwICA8PSB0IDw9IDE5ICovCi0jZGVmaW5lIEsyIDB4NmVkOWViYTEJ
CS8qIDIwIDw9IHQgPD0gMzkgKi8KLSNkZWZpbmUgSzMgMHg4ZjFiYmNkYwkJLyogNDAgPD0gdCA8
PSA1OSAqLwotI2RlZmluZSBLNCAweGNhNjJjMWQ2CQkvKiA2MCA8PSB0IDw9IDc5ICovCi0KLSNk
ZWZpbmUgSDBJTklUIDB4Njc0NTIzMDEKLSNkZWZpbmUgSDFJTklUIDB4ZWZjZGFiODkKLSNkZWZp
bmUgSDJJTklUIDB4OThiYWRjZmUKLSNkZWZpbmUgSDNJTklUIDB4MTAzMjU0NzYKLSNkZWZpbmUg
SDRJTklUIDB4YzNkMmUxZjAKLQotdm9pZAotc2N0cF9zaGExX2luaXQoc3RydWN0IHNjdHBfc2hh
MV9jb250ZXh0ICpjdHgpCi17Ci0JLyogSW5pdCB0aGUgU0hBLTEgY29udGV4dCBzdHJ1Y3R1cmUg
Ki8KLQljdHgtPkEgPSAwOwotCWN0eC0+QiA9IDA7Ci0JY3R4LT5DID0gMDsKLQljdHgtPkQgPSAw
OwotCWN0eC0+RSA9IDA7Ci0JY3R4LT5IMCA9IEgwSU5JVDsKLQljdHgtPkgxID0gSDFJTklUOwot
CWN0eC0+SDIgPSBIMklOSVQ7Ci0JY3R4LT5IMyA9IEgzSU5JVDsKLQljdHgtPkg0ID0gSDRJTklU
OwotCWN0eC0+VEVNUCA9IDA7Ci0JbWVtc2V0KGN0eC0+d29yZHMsIDAsIHNpemVvZihjdHgtPndv
cmRzKSk7Ci0JY3R4LT5ob3dfbWFueV9pbl9ibG9jayA9IDA7Ci0JY3R4LT5ydW5uaW5nX3RvdGFs
ID0gMDsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soc3RydWN0
IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgsIHVuc2lnbmVkIGludCAqYmxvY2spCi17Ci0JaW50IGk7
Ci0KLQkvKiBpbml0IHRoZSBXMC1XMTUgdG8gdGhlIGJsb2NrIG9mIHdvcmRzIGJlaW5nIGhhc2hl
ZC4gKi8KLQkvKiBzdGVwIGEpICovCi0JZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLQkJY3R4
LT53b3Jkc1tpXSA9IG50b2hsKGJsb2NrW2ldKTsKLQl9Ci0JLyogbm93IGluaXQgdGhlIHJlc3Qg
YmFzZWQgb24gdGhlIFNIQS0xIGZvcm11bGEsIHN0ZXAgYikgKi8KLQlmb3IgKGkgPSAxNjsgaSA8
IDgwOyBpKyspIHsKLQkJY3R4LT53b3Jkc1tpXSA9IENTSElGVCgxLCAoKGN0eC0+d29yZHNbKGkg
LSAzKV0pIF4KLQkJICAgIChjdHgtPndvcmRzWyhpIC0gOCldKSBeCi0JCSAgICAoY3R4LT53b3Jk
c1soaSAtIDE0KV0pIF4KLQkJICAgIChjdHgtPndvcmRzWyhpIC0gMTYpXSkpKTsKLQl9Ci0JLyog
c3RlcCBjKSAqLwotCWN0eC0+QSA9IGN0eC0+SDA7Ci0JY3R4LT5CID0gY3R4LT5IMTsKLQljdHgt
PkMgPSBjdHgtPkgyOwotCWN0eC0+RCA9IGN0eC0+SDM7Ci0JY3R4LT5FID0gY3R4LT5INDsKLQot
CS8qIHN0ZXAgZCkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykgewotCQlpZiAoaSA8IDIw
KSB7Ci0JCQljdHgtPlRFTVAgPSAoKENTSElGVCg1LCBjdHgtPkEpKSArCi0JCQkgICAgKEYxKGN0
eC0+QiwgY3R4LT5DLCBjdHgtPkQpKSArCi0JCQkgICAgKGN0eC0+RSkgKwotCQkJICAgIGN0eC0+
d29yZHNbaV0gKwotCQkJICAgIEsxKTsKLQkJfSBlbHNlIGlmIChpIDwgNDApIHsKLQkJCWN0eC0+
VEVNUCA9ICgoQ1NISUZUKDUsIGN0eC0+QSkpICsKLQkJCSAgICAoRjIoY3R4LT5CLCBjdHgtPkMs
IGN0eC0+RCkpICsKLQkJCSAgICAoY3R4LT5FKSArCi0JCQkgICAgKGN0eC0+d29yZHNbaV0pICsK
LQkJCSAgICBLMik7Ci0JCX0gZWxzZSBpZiAoaSA8IDYwKSB7Ci0JCQljdHgtPlRFTVAgPSAoKENT
SElGVCg1LCBjdHgtPkEpKSArCi0JCQkgICAgKEYzKGN0eC0+QiwgY3R4LT5DLCBjdHgtPkQpKSAr
Ci0JCQkgICAgKGN0eC0+RSkgKwotCQkJICAgIChjdHgtPndvcmRzW2ldKSArCi0JCQkgICAgSzMp
OwotCQl9IGVsc2UgewotCQkJY3R4LT5URU1QID0gKChDU0hJRlQoNSwgY3R4LT5BKSkgKwotCQkJ
ICAgIChGNChjdHgtPkIsIGN0eC0+QywgY3R4LT5EKSkgKwotCQkJICAgIChjdHgtPkUpICsKLQkJ
CSAgICAoY3R4LT53b3Jkc1tpXSkgKwotCQkJICAgIEs0KTsKLQkJfQotCQljdHgtPkUgPSBjdHgt
PkQ7Ci0JCWN0eC0+RCA9IGN0eC0+QzsKLQkJY3R4LT5DID0gQ1NISUZUKDMwLCBjdHgtPkIpOwot
CQljdHgtPkIgPSBjdHgtPkE7Ci0JCWN0eC0+QSA9IGN0eC0+VEVNUDsKLQl9Ci0JLyogc3RlcCBl
KSAqLwotCWN0eC0+SDAgPSAoY3R4LT5IMCkgKyAoY3R4LT5BKTsKLQljdHgtPkgxID0gKGN0eC0+
SDEpICsgKGN0eC0+Qik7Ci0JY3R4LT5IMiA9IChjdHgtPkgyKSArIChjdHgtPkMpOwotCWN0eC0+
SDMgPSAoY3R4LT5IMykgKyAoY3R4LT5EKTsKLQljdHgtPkg0ID0gKGN0eC0+SDQpICsgKGN0eC0+
RSk7Ci19Ci0KLXZvaWQKLXNjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0
ICpjdHgsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnB0ciwgdW5zaWduZWQgaW50IHNpeikKLXsKLQl1
bnNpZ25lZCBpbnQgbnVtYmVyX2xlZnQsIGxlZnRfdG9fZmlsbDsKLQotCW51bWJlcl9sZWZ0ID0g
c2l6OwotCXdoaWxlIChudW1iZXJfbGVmdCA+IDApIHsKLQkJbGVmdF90b19maWxsID0gc2l6ZW9m
KGN0eC0+c2hhX2Jsb2NrKSAtIGN0eC0+aG93X21hbnlfaW5fYmxvY2s7Ci0JCWlmIChsZWZ0X3Rv
X2ZpbGwgPiBudW1iZXJfbGVmdCkgewotCQkJLyogY2FuIG9ubHkgcGFydGlhbGx5IGZpbGwgdXAg
dGhpcyBvbmUgKi8KLQkJCW1lbWNweSgmY3R4LT5zaGFfYmxvY2tbY3R4LT5ob3dfbWFueV9pbl9i
bG9ja10sCi0JCQkgICAgcHRyLCBudW1iZXJfbGVmdCk7Ci0JCQljdHgtPmhvd19tYW55X2luX2Js
b2NrICs9IG51bWJlcl9sZWZ0OwotCQkJY3R4LT5ydW5uaW5nX3RvdGFsICs9IG51bWJlcl9sZWZ0
OwotCQkJYnJlYWs7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBibG9jayBpcyBub3cgZnVsbCwgcHJvY2Vz
cyBpdCAqLwotCQkJbWVtY3B5KCZjdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2Nr
XSwKLQkJCSAgICBwdHIsIGxlZnRfdG9fZmlsbCk7Ci0JCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Js
b2NrKGN0eCwKLQkJCSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOwotCQkJbnVt
YmVyX2xlZnQgLT0gbGVmdF90b19maWxsOwotCQkJY3R4LT5ydW5uaW5nX3RvdGFsICs9IGxlZnRf
dG9fZmlsbDsKLQkJCWN0eC0+aG93X21hbnlfaW5fYmxvY2sgPSAwOwotCQkJcHRyID0gKGNvbnN0
IHVuc2lnbmVkIGNoYXIgKikocHRyICsgbGVmdF90b19maWxsKTsKLQkJfQotCX0KLX0KLQotdm9p
ZAotc2N0cF9zaGExX2ZpbmFsKHVuc2lnbmVkIGNoYXIgKmRpZ2VzdCwgc3RydWN0IHNjdHBfc2hh
MV9jb250ZXh0ICpjdHgpCi17Ci0JLyoKLQkgKiBpZiBhbnkgbGVmdCBpbiBibG9jayBmaWxsIHdp
dGggcGFkZGluZyBhbmQgcHJvY2Vzcy4gVGhlbiB0cmFuc2ZlcgotCSAqIHRoZSBkaWdlc3QgdG8g
dGhlIHBvaW50ZXIuIEF0IHRoZSBsYXN0IGJsb2NrIHNvbWUgc3BlY2lhbCBydWxlcwotCSAqIG5l
ZWQgdG8gYXBwbHkuIFdlIG11c3QgYWRkIGEgMSBiaXQgZm9sbG93aW5nIHRoZSBtZXNzYWdlLCB0
aGVuIHdlCi0JICogcGFkIHdpdGggMCdzLiBUaGUgdG90YWwgc2l6ZSBpcyBlbmNvZGVkIGFzIGEg
NjQgYml0IG51bWJlciBhdCB0aGUKLQkgKiBlbmQuIE5vdyBpZiB0aGUgbGFzdCBidWZmZXIgaGFz
IG1vcmUgdGhhbiA1NSBvY3RldHMgaW4gaXQgd2UKLQkgKiBjYW5ub3QgZml0IHRoZSA2NCBiaXQg
bnVtYmVyICsgMTAwMDAwMDAgcGFkIG9uIHRoZSBlbmQgYW5kIG11c3QKLQkgKiBhZGQgdGhlIDEw
MDAwMDAwIHBhZCwgcGFkIHRoZSByZXN0IG9mIHRoZSBtZXNzYWdlIHdpdGggMCdzIGFuZAotCSAq
IHRoZW4gY3JlYXRlIGFuIGFsbCAwIG1lc3NhZ2Ugd2l0aCBqdXN0IHRoZSA2NCBiaXQgc2l6ZSBh
dCB0aGUgZW5kCi0JICogYW5kIHJ1biB0aGlzIGJsb2NrIHRocm91Z2ggYnkgaXRzZWxmLiAgQWxz
byB0aGUgNjQgYml0IGludCBtdXN0Ci0JICogYmUgaW4gbmV0d29yayBieXRlIG9yZGVyLgotCSAq
LwotCWludCBsZWZ0X3RvX2ZpbGw7Ci0JdW5zaWduZWQgaW50IGksICpwdHI7Ci0KLQlpZiAoY3R4
LT5ob3dfbWFueV9pbl9ibG9jayA+IDU1KSB7Ci0JCS8qCi0JCSAqIHNwZWNpYWwgY2FzZSwgd2Ug
bmVlZCB0byBwcm9jZXNzIHR3byBibG9ja3MgaGVyZS4gT25lIGZvcgotCQkgKiB0aGUgY3VycmVu
dCBzdHVmZiBwbHVzIHBvc3NpYmx5IHRoZSBwYWQuIFRoZSBvdGhlciBmb3IKLQkJICogdGhlIHNp
emUuCi0JCSAqLwotCQlsZWZ0X3RvX2ZpbGwgPSBzaXplb2YoY3R4LT5zaGFfYmxvY2spIC0gY3R4
LT5ob3dfbWFueV9pbl9ibG9jazsKLQkJaWYgKGxlZnRfdG9fZmlsbCA9PSAwKSB7Ci0JCQkvKiBT
aG91bGQgbm90IHJlYWxseSBoYXBwZW4gYnV0IEkgYW0gcGFyYW5vaWQgKi8KLQkJCXNjdHBfc2hh
MV9wcm9jZXNzX2FfYmxvY2soY3R4LAotCQkJICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9i
bG9jayk7Ci0JCQkvKiBpbml0IGxhc3QgYmxvY2ssIGEgYml0IGRpZmZlcmVudCB0aGFuIHRoZSBy
ZXN0ICovCi0JCQljdHgtPnNoYV9ibG9ja1swXSA9ICdceDgwJzsKLQkJCWZvciAoaSA9IDE7IGkg
PCBzaXplb2YoY3R4LT5zaGFfYmxvY2spOyBpKyspIHsKLQkJCQljdHgtPnNoYV9ibG9ja1tpXSA9
IDB4MDsKLQkJCX0KLQkJfSBlbHNlIGlmIChsZWZ0X3RvX2ZpbGwgPT0gMSkgewotCQkJY3R4LT5z
aGFfYmxvY2tbY3R4LT5ob3dfbWFueV9pbl9ibG9ja10gPSAnXHg4MCc7Ci0JCQlzY3RwX3NoYTFf
cHJvY2Vzc19hX2Jsb2NrKGN0eCwKLQkJCSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxv
Y2spOwotCQkJLyogaW5pdCBsYXN0IGJsb2NrICovCi0JCQltZW1zZXQoY3R4LT5zaGFfYmxvY2ss
IDAsIHNpemVvZihjdHgtPnNoYV9ibG9jaykpOwotCQl9IGVsc2UgewotCQkJY3R4LT5zaGFfYmxv
Y2tbY3R4LT5ob3dfbWFueV9pbl9ibG9ja10gPSAnXHg4MCc7Ci0JCQlmb3IgKGkgPSAoY3R4LT5o
b3dfbWFueV9pbl9ibG9jayArIDEpOwotCQkJICAgIGkgPCBzaXplb2YoY3R4LT5zaGFfYmxvY2sp
OwotCQkJICAgIGkrKykgewotCQkJCWN0eC0+c2hhX2Jsb2NrW2ldID0gMHgwOwotCQkJfQotCQkJ
c2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsCi0JCQkgICAgKHVuc2lnbmVkIGludCAqKWN0
eC0+c2hhX2Jsb2NrKTsKLQkJCS8qIGluaXQgbGFzdCBibG9jayAqLwotCQkJbWVtc2V0KGN0eC0+
c2hhX2Jsb2NrLCAwLCBzaXplb2YoY3R4LT5zaGFfYmxvY2spKTsKLQkJfQotCQkvKiBUaGlzIGlz
IGluIGJpdHMgc28gbXVsdGlwbHkgYnkgOCAqLwotCQljdHgtPnJ1bm5pbmdfdG90YWwgKj0gODsK
LQkJcHRyID0gKHVuc2lnbmVkIGludCAqKSZjdHgtPnNoYV9ibG9ja1s2MF07Ci0JCSpwdHIgPSBo
dG9ubChjdHgtPnJ1bm5pbmdfdG90YWwpOwotCQlzY3RwX3NoYTFfcHJvY2Vzc19hX2Jsb2NrKGN0
eCwgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKLQl9IGVsc2UgewotCQkvKgotCQkg
KiBlYXN5IGNhc2UsIHdlIGp1c3QgcGFkIHRoaXMgbWVzc2FnZSB0byBzaXplIC0gZW5kIHdpdGgg
MAotCQkgKiBhZGQgdGhlIG1hZ2ljIDB4ODAgdG8gdGhlIG5leHQgd29yZCBhbmQgdGhlbiBwdXQg
dGhlCi0JCSAqIG5ldHdvcmsgYnl0ZSBvcmRlciBzaXplIGluIHRoZSBsYXN0IHNwb3QgYW5kIHBy
b2Nlc3MgdGhlCi0JCSAqIGJsb2NrLgotCQkgKi8KLQkJY3R4LT5zaGFfYmxvY2tbY3R4LT5ob3df
bWFueV9pbl9ibG9ja10gPSAnXHg4MCc7Ci0JCWZvciAoaSA9IChjdHgtPmhvd19tYW55X2luX2Js
b2NrICsgMSk7Ci0JCSAgICBpIDwgc2l6ZW9mKGN0eC0+c2hhX2Jsb2NrKTsKLQkJICAgIGkrKykg
ewotCQkJY3R4LT5zaGFfYmxvY2tbaV0gPSAweDA7Ci0JCX0KLQkJLyogZ2V0IGxhc3QgaW50IHNw
b3QgKi8KLQkJY3R4LT5ydW5uaW5nX3RvdGFsICo9IDg7Ci0JCXB0ciA9ICh1bnNpZ25lZCBpbnQg
KikmY3R4LT5zaGFfYmxvY2tbNjBdOwotCQkqcHRyID0gaHRvbmwoY3R4LT5ydW5uaW5nX3RvdGFs
KTsKLQkJc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhjdHgsICh1bnNpZ25lZCBpbnQgKiljdHgt
PnNoYV9ibG9jayk7Ci0JfQotCS8qIHRyYW5zZmVyIHRoZSBkaWdlc3QgYmFjayB0byB0aGUgdXNl
ciAqLwotCWRpZ2VzdFszXSA9IChjdHgtPkgwICYgMHhmZik7Ci0JZGlnZXN0WzJdID0gKChjdHgt
PkgwID4+IDgpICYgMHhmZik7Ci0JZGlnZXN0WzFdID0gKChjdHgtPkgwID4+IDE2KSAmIDB4ZmYp
OwotCWRpZ2VzdFswXSA9ICgoY3R4LT5IMCA+PiAyNCkgJiAweGZmKTsKLQotCWRpZ2VzdFs3XSA9
IChjdHgtPkgxICYgMHhmZik7Ci0JZGlnZXN0WzZdID0gKChjdHgtPkgxID4+IDgpICYgMHhmZik7
Ci0JZGlnZXN0WzVdID0gKChjdHgtPkgxID4+IDE2KSAmIDB4ZmYpOwotCWRpZ2VzdFs0XSA9ICgo
Y3R4LT5IMSA+PiAyNCkgJiAweGZmKTsKLQotCWRpZ2VzdFsxMV0gPSAoY3R4LT5IMiAmIDB4ZmYp
OwotCWRpZ2VzdFsxMF0gPSAoKGN0eC0+SDIgPj4gOCkgJiAweGZmKTsKLQlkaWdlc3RbOV0gPSAo
KGN0eC0+SDIgPj4gMTYpICYgMHhmZik7Ci0JZGlnZXN0WzhdID0gKChjdHgtPkgyID4+IDI0KSAm
IDB4ZmYpOwotCi0JZGlnZXN0WzE1XSA9IChjdHgtPkgzICYgMHhmZik7Ci0JZGlnZXN0WzE0XSA9
ICgoY3R4LT5IMyA+PiA4KSAmIDB4ZmYpOwotCWRpZ2VzdFsxM10gPSAoKGN0eC0+SDMgPj4gMTYp
ICYgMHhmZik7Ci0JZGlnZXN0WzEyXSA9ICgoY3R4LT5IMyA+PiAyNCkgJiAweGZmKTsKLQotCWRp
Z2VzdFsxOV0gPSAoY3R4LT5INCAmIDB4ZmYpOwotCWRpZ2VzdFsxOF0gPSAoKGN0eC0+SDQgPj4g
OCkgJiAweGZmKTsKLQlkaWdlc3RbMTddID0gKChjdHgtPkg0ID4+IDE2KSAmIDB4ZmYpOwotCWRp
Z2VzdFsxNl0gPSAoKGN0eC0+SDQgPj4gMjQpICYgMHhmZik7Ci19Ci0KLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9zaGExLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAxZTNjMmVkYzQ5ODlkMmYy
NmM4M2Q5ZDJiMmY4YWRkN2ZlOTMwMDguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaAorKysgL2Rldi9udWxs
CkBAIC0xLDk3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENp
c2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBh
KSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCi0gKiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICog
ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5
c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+
Ci1fX0ZCU0RJRCgiJEZyZWVCU0QkIik7Ci0jZW5kaWYKLQotCi0jaWZuZGVmIF9fTkVUSU5FVF9T
Q1RQX1NIQTFfSF9fCi0jZGVmaW5lIF9fTkVUSU5FVF9TQ1RQX1NIQTFfSF9fCi0KLSNpbmNsdWRl
IDxzeXMvdHlwZXMuaD4KLSNpZiBkZWZpbmVkKFNDVFBfVVNFX05TU19TSEExKQotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKQotLyogVGhlIE5TUyBzb3VyY2VzIHJlcXVpcmUgX19B
UFBMRV9fIHRvIGJlIGRlZmluZWQuCi0gKiBYWFg6IFJlbW92ZSB0aGlzIHVnbHkgaGFjayBvbmNl
IHRoZSBwbGF0Zm9ybSBkZWZpbmVzIGhhdmUgYmVlbiBjbGVhbmVkIHVwLgotICovCi0jZGVmaW5l
IF9fQVBQTEVfXwotI2VuZGlmCi0jaW5jbHVkZSA8cGsxMXB1Yi5oPgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfRGFyd2luKQotI3VuZGVmIF9fQVBQTEVfXwotI2VuZGlmCi0jZWxpZiBkZWZp
bmVkKFNDVFBfVVNFX09QRU5TU0xfU0hBMSkKLSNpbmNsdWRlIDxvcGVuc3NsL3NoYS5oPgotI2Vu
ZGlmCi0KLXN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCB7Ci0jaWYgZGVmaW5lZChTQ1RQX1VTRV9O
U1NfU0hBMSkKLQlzdHJ1Y3QgUEsxMUNvbnRleHQgKnBrMTFfY3R4OwotI2VsaWYgZGVmaW5lZChT
Q1RQX1VTRV9PUEVOU1NMX1NIQTEpCi0JU0hBX0NUWCBzaGFfY3R4OwotI2Vsc2UKLQl1bnNpZ25l
ZCBpbnQgQTsKLQl1bnNpZ25lZCBpbnQgQjsKLQl1bnNpZ25lZCBpbnQgQzsKLQl1bnNpZ25lZCBp
bnQgRDsKLQl1bnNpZ25lZCBpbnQgRTsKLQl1bnNpZ25lZCBpbnQgSDA7Ci0JdW5zaWduZWQgaW50
IEgxOwotCXVuc2lnbmVkIGludCBIMjsKLQl1bnNpZ25lZCBpbnQgSDM7Ci0JdW5zaWduZWQgaW50
IEg0OwotCXVuc2lnbmVkIGludCB3b3Jkc1s4MF07Ci0JdW5zaWduZWQgaW50IFRFTVA7Ci0JLyog
YmxvY2sgSSBhbSBjb2xsZWN0aW5nIHRvIHByb2Nlc3MgKi8KLQljaGFyIHNoYV9ibG9ja1s2NF07
Ci0JLyogY29sbGVjdGVkIHNvIGZhciAqLwotCWludCBob3dfbWFueV9pbl9ibG9jazsKLQl1bnNp
Z25lZCBpbnQgcnVubmluZ190b3RhbDsKLSNlbmRpZgotfTsKLQotI2lmIChkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgZGVmaW5lZChLRVJORUwpKQotI2lmbmRlZiBfS0VSTkVMCi0jZGVmaW5lIF9LRVJO
RUwKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQotdm9pZCBzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRl
eHQgKik7Ci12b2lkIHNjdHBfc2hhMV91cGRhdGUoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICos
IGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKLXZvaWQgc2N0cF9zaGExX2Zp
bmFsKHVuc2lnbmVkIGNoYXIgKiwgc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICopOwotCi0jZW5k
aWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9u
cy5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBiNjA5Y2E1NzBmMjJmNTJkMTg0NjJjNDY3MzE2YTE2NmI5NzgzMTM4
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYworKysgL2Rldi9udWxsCkBAIC0xLDEwOTIgKzAs
MCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDEw
LTIwMTIsIGJ5IFJvYmluIFNlZ2dlbG1hbm4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Us
Ci0gKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgotICoKLSAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZz
Lmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zc19mdW5jdGlv
bnMuYyAzMjEyODkgMjAxNy0wNy0yMCAxMTowOTozM1ogdHVleGVuICQiKTsKLSNlbmRpZgotCi0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmg+Ci0jZW5kaWYKLQotLyoKLSAq
IERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluIGFsZ29yaXRobS4KLSAqIEp1c3QgaW50ZXJhdGVz
IHRoZSBzdHJlYW1zIGluIHRoZSBvcmRlciB0aGV5IGFwcGVhci4KLSAqLwotCi1zdGF0aWMgdm9p
ZAotc2N0cF9zc19kZWZhdWx0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKiwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
LAotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAq
LCBpbnQpOwotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19kZWZhdWx0X3JlbW92ZShzdHJ1Y3Qgc2N0
cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKLSAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQpOwotCi1zdGF0aWMgdm9pZAotc2N0
cF9zc19kZWZhdWx0X2luaXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQotewot
CXVpbnQxNl90IGk7Ci0KLQlhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gTlVMTDsK
LQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7Ci0JVEFJTFFfSU5JVCgmYXNv
Yy0+c3NfZGF0YS5vdXQud2hlZWwpOwotCS8qCi0JICogSWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUg
c3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAotCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhpc3Rpbmcg
YXNzb2NpYXRpb24gaGFzCi0JICogYmVlbiBjaGFuZ2VkLiBXZSBuZWVkIHRvIGFkZCBhbGwgc3Ry
ZWFtIHF1ZXVlcwotCSAqIHRvIHRoZSB3aGVlbC4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc3Rj
Yi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5z
Y3RwX3NzX2FkZF90b19zdHJlYW0oc3RjYiwgJnN0Y2ItPmFzb2MsCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLAot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgaG9s
ZHNfbG9jayk7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZGVmYXVs
dF9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAotICAgICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMgU0NUUF9VTlVTRUQs
IGludCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0Jf
U0VORF9MT0NLKHN0Y2IpOwotCX0KLQl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRh
Lm91dC53aGVlbCkpIHsKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJ
UlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3Nf
ZGF0YS5vdXQud2hlZWwsIFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCksIHNz
X3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2Uu
dHFlX25leHQgPSBOVUxMOwotCQlzdHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfcHJl
diA9IE5VTEw7Ci0JfQotCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQlp
ZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0K
LQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0o
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1
Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCi17Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxM
KSB7Ci0JCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0gd2l0aF9z
dHJxKSB7Ci0JCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOwot
CQl9Ci0JCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdpdGhfc3Ry
cSkgewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7Ci0JCX0K
LQl9Ci0Jc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOwotCXN0
cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKLQlyZXR1cm47Ci19
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2RlZmF1bHRfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0gICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRzX2xvY2sp
Ci17Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7
Ci0JfQotCS8qIEFkZCB0byB3aGVlbCBpZiBub3QgYWxyZWFkeSBvbiBpdCBhbmQgc3RyZWFtIHF1
ZXVlIG5vdCBlbXB0eSAqLwotCWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgot
CSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYK
LQkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5VTEwpKSB7
Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwKLQkJICAgICAg
ICAgICAgICAgICAgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCX0KLQlpZiAoaG9s
ZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1
cm47Ci19Ci0KLXN0YXRpYyBpbnQKLXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQot
ewotCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7Ci0JCXJldHVy
biAoMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1z
Y3RwX3NzX2RlZmF1bHRfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQgKnN0cnEsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVh
bV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50IGhvbGRzX2xvY2spCi17Ci0JaWYg
KGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCS8q
IFJlbW92ZSBmcm9tIHdoZWVsIGlmIHN0cmVhbSBxdWV1ZSBpcyBlbXB0eSBhbmQgYWN0dWFsbHkg
aXMgb24gdGhlIHdoZWVsICovCi0JaWYgKFRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYK
LQkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9uZXh0ICE9IE5VTEwgfHwK
LQkgICAgc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX3ByZXYgIT0gTlVMTCkpIHsK
LQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKLQkJCWFzb2Mt
PnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29jLT5zc19kYXRhLmxhc3Rf
b3V0X3N0cmVhbSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cHdo
ZWVsX2xpc3RoZWFkLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc19w
YXJhbXMucnIubmV4dF9zcG9rZSk7Ci0JCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJl
YW0gPT0gTlVMTCkgewotCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFf
TEFTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzY3Rwd2hlZWxfbGlzdGhlYWQpOwotCQkJfQotCQkJaWYgKGFzb2MtPnNz
X2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKLQkJCQlhc29jLT5zc19kYXRhLmxhc3Rf
b3V0X3N0cmVhbSA9IE5VTEw7Ci0JCQl9Ci0JCX0KLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCQlzdHJxLT5z
c19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0JCXN0cnEtPnNzX3BhcmFt
cy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKLQl9Ci0JaWYgKGhvbGRzX2xvY2sgPT0g
MCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuOwotfQotCi0K
LXN0YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICoKLXNjdHBfc3NfZGVmYXVsdF9zZWxlY3Qo
c3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQot
ewotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKLQotCWlmIChhc29jLT5z
c19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nKSB7Ci0JCXJldHVybiAoYXNvYy0+c3NfZGF0YS5sb2Nr
ZWRfb25fc2VuZGluZyk7Ci0JfQotCXN0cnF0ID0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJl
YW07Ci1kZWZhdWx0X2FnYWluOgotCS8qIEZpbmQgdGhlIG5leHQgc3RyZWFtIHRvIHVzZSAqLwot
CWlmIChzdHJxdCA9PSBOVUxMKSB7Ci0JCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0
YS5vdXQud2hlZWwpOwotCX0gZWxzZSB7Ci0JCXN0cnEgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19w
YXJhbXMucnIubmV4dF9zcG9rZSk7Ci0JCWlmIChzdHJxID09IE5VTEwpIHsKLQkJCXN0cnEgPSBU
QUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOwotCQl9Ci0JfQotCi0JLyogSWYg
Q01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0Ci0JICogdGhlIHN0cmVhbSBpbiBxdWVz
dGlvbiBoYXMgdGhlIGZpcnN0Ci0JICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5ldHdvcmsg
ZGVzdGluYXRpb24KLQkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0IGlmIHdl
Ci0JICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcKLQkgKiBU
U04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90Ci0JICogbG9vayBmb3IgYW5v
dGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKLQkgKiB0byB0aGF0IGRlc3RpbmF0aW9uKS4g
SW4gQ01UJ3MgY2FzZSwgYnkKLQkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxsIHNlbmQg
b25lCi0JICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KLQkgKi8KLQlp
ZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCi0JICAgIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7Ci0JCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVl
dWUpICYmCi0JCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAm
JgotCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkgewotCQkJ
aWYgKHN0cnEgPT0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0pIHsKLQkJCQlyZXR1cm4g
KE5VTEwpOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJxdCA9IHN0cnE7Ci0JCQkJZ290byBkZWZhdWx0
X2FnYWluOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAoc3RycSk7Ci19Ci0KLXN0YXRpYyB2b2lk
Ci1zY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0IFNDVFBfVU5VU0VELAot
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vdmVkX2hvd19tdWNoIFNDVFBfVU5VU0VE
KQotewotCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKLQotCWFzb2MtPnNz
X2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKLQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBw
b3J0ZWQgPT0gMCkgewotCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7Ci0JCWlm
ICgoc3AgIT0gTlVMTCkgJiYgKHNwLT5zb21lX3Rha2VuID09IDEpKSB7Ci0JCQlzdGNiLT5hc29j
LnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOwotCQl9IGVsc2UgewotCQkJc3RjYi0+
YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gTlVMTDsKLQkJfQotCX0gZWxzZSB7Ci0J
CXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7Ci0JfQotCXJldHVy
bjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQX1VO
VVNFRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYyBTQ1RQX1VOVVNFRCkKLXsKLQkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgaGVyZSAqLwot
CXJldHVybjsKLX0KLQotc3RhdGljIGludAotc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELCB1aW50MTZfdCAqdmFsdWUgU0NUUF9VTlVTRUQp
Ci17Ci0JLyogTm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8KLQlyZXR1cm4gKC0xKTsKLX0KLQot
c3RhdGljIGludAotc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VE
LAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJx
IFNDVFBfVU5VU0VELCB1aW50MTZfdCB2YWx1ZSBTQ1RQX1VOVVNFRCkKLXsKLQkvKiBOb3RoaW5n
IHRvIGJlIGRvbmUgaGVyZSAqLwotCXJldHVybiAoLTEpOwotfQotCi1zdGF0aWMgaW50Ci1zY3Rw
X3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUoc3RydWN0IHNjdHBfdGNiICpzdGNi
IFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKLXsKLQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICpzdHJxOwotCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5n
ICpzcDsKLQotCWlmIChhc29jLT5zdHJlYW1fcXVldWVfY250ICE9IDEpIHsKLQkJcmV0dXJuICgw
KTsKLQl9Ci0Jc3RycSA9IGFzb2MtPnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmc7Ci0JaWYgKHN0
cnEgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlzcCA9IFRBSUxRX0ZJUlNUKCZzdHJx
LT5vdXRxdWV1ZSk7Ci0JaWYgKHNwID09IE5VTEwpIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JcmV0
dXJuICghc3AtPm1zZ19pc19jb21wbGV0ZSk7Ci19Ci0KLS8qCi0gKiBSZWFsIHJvdW5kLXJvYmlu
IGFsZ29yaXRobS4KLSAqIEFsd2F5cyBpbnRlcmF0ZXMgdGhlIHN0cmVhbXMgaW4gYXNjZW5kaW5n
IG9yZGVyLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9zc19ycl9hZGQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCi0gICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqc3AgU0NUUF9VTlVTRUQsIGludCBob2xkc19sb2NrKQotewot
CXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnF0OwotCi0JaWYgKGhvbGRzX2xvY2sgPT0gMCkg
ewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCWlmICghVEFJTFFfRU1QVFkoJnN0
cnEtPm91dHF1ZXVlKSAmJgotCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2UudHFl
X25leHQgPT0gTlVMTCkgJiYKLQkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRx
ZV9wcmV2ID09IE5VTEwpKSB7Ci0JCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5vdXQu
d2hlZWwpKSB7Ci0JCQlUQUlMUV9JTlNFUlRfSEVBRCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWws
IHN0cnEsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnF0ID0g
VEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKLQkJCXdoaWxlIChzdHJxdCAh
PSBOVUxMICYmIChzdHJxdC0+c2lkIDwgc3RycS0+c2lkKSkgewotCQkJCXN0cnF0ID0gVEFJTFFf
TkVYVChzdHJxdCwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwotCQkJfQotCQkJaWYgKHN0cnF0
ICE9IE5VTEwpIHsKLQkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKHN0cnF0LCBzdHJxLCBzc19wYXJh
bXMucnIubmV4dF9zcG9rZSk7Ci0JCQl9IGVsc2UgewotCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZh
c29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2UpOwot
CQkJfQotCQl9Ci0JfQotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9V
TkxPQ0soc3RjYik7Ci0JfQotCXJldHVybjsKLX0KLQotLyoKLSAqIFJlYWwgcm91bmQtcm9iaW4g
cGVyIHBhY2tldCBhbGdvcml0aG0uCi0gKiBBbHdheXMgaW50ZXJhdGVzIHRoZSBzdHJlYW1zIGlu
IGFzY2VuZGluZyBvcmRlciBhbmQKLSAqIG9ubHkgZmlsbHMgbWVzc2FnZXMgb2YgdGhlIHNhbWUg
c3RyZWFtIGluIGEgcGFja2V0LgotICovCi1zdGF0aWMgc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
Ci1zY3RwX3NzX3JycF9zZWxlY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0JcmV0dXJuIChhc29jLT5zc19kYXRhLmxh
c3Rfb3V0X3N0cmVhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX3JycF9wYWNrZXRfZG9u
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
KQotewotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsICpzdHJxdDsKLQotCXN0cnF0ID0g
YXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW07Ci1ycnBfYWdhaW46Ci0JLyogRmluZCB0aGUg
bmV4dCBzdHJlYW0gdG8gdXNlICovCi0JaWYgKHN0cnF0ID09IE5VTEwpIHsKLQkJc3RycSA9IFRB
SUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JfSBlbHNlIHsKLQkJc3RycSA9
IFRBSUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKLQkJaWYgKHN0cnEg
PT0gTlVMTCkgewotCQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCk7Ci0JCX0KLQl9Ci0KLQkvKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQK
LQkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKLQkgKiBpdGVtIHBvaW50
ZWQgdG93YXJkcyBhcmUgbmV0d29yayBkZXN0aW5hdGlvbgotCSAqIHJlcXVlc3RlZCBieSB0aGUg
Y2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UKLQkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBz
dHJlYW0gKGFzc2lnbmluZwotCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBj
YW5ub3QKLQkgKiBsb29rIGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAotCSAq
IHRvIHRoYXQgZGVzdGluYXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQotCSAqIHNraXBwaW5nIHRo
aXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBvbmUKLQkgKiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSBy
ZXF1ZXN0ZWQgbmV0LgotCSAqLwotCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYK
LQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDApIHsKLQkJaWYgKFRB
SUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5v
dXRxdWV1ZSktPm5ldCAhPSBOVUxMICYmCi0JCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVl
dWUpLT5uZXQgIT0gbmV0KSB7Ci0JCQlpZiAoc3RycSA9PSBhc29jLT5zc19kYXRhLmxhc3Rfb3V0
X3N0cmVhbSkgewotCQkJCXN0cnEgPSBOVUxMOwotCQkJfSBlbHNlIHsKLQkJCQlzdHJxdCA9IHN0
cnE7Ci0JCQkJZ290byBycnBfYWdhaW47Ci0JCQl9Ci0JCX0KLQl9Ci0JYXNvYy0+c3NfZGF0YS5s
YXN0X291dF9zdHJlYW0gPSBzdHJxOwotCXJldHVybjsKLX0KLQotCi0vKgotICogUHJpb3JpdHkg
YWxnb3JpdGhtLgotICogQWx3YXlzIHByZWZlcnMgc3RyZWFtcyBiYXNlZCBvbiB0aGVpciBwcmlv
cml0eSBpZC4KLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfc3NfcHJpb19jbGVhcihzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAg
ICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19s
b2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQl3aGlsZSAoIVRB
SUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0J
CWlmIChjbGVhcl92YWx1ZXMpIHsKLQkJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0g
MDsKLQkJfQotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBUQUlMUV9G
SVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tl
KTsKLQkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0J
CXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwotCi0JfQot
CWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQlpZiAoaG9sZHNfbG9jayA9
PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0K
LXN0YXRpYyB2b2lkCi1zY3RwX3NzX3ByaW9faW5pdF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICp3aXRoX3N0cnEpCi17Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7Ci0JCWlmIChzdGNiLT5h
c29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0gd2l0aF9zdHJxKSB7Ci0JCQlzdGNiLT5h
c29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOwotCQl9Ci0JCWlmIChzdGNiLT5h
c29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdpdGhfc3RycSkgewotCQkJc3RjYi0+YXNv
Yy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7Ci0JCX0KLQl9Ci0Jc3RycS0+c3NfcGFy
YW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0Jc3RycS0+c3NfcGFyYW1zLnBy
aW8ubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7Ci0JaWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7
Ci0JCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0gd2l0aF9zdHJxLT5zc19wYXJhbXMu
cHJpby5wcmlvcml0eTsKLQl9IGVsc2UgewotCQlzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0
eSA9IDA7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfcHJpb19hZGQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBf
c3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICBp
bnQgaG9sZHNfbG9jaykKLXsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxdDsKLQotCWlm
IChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0KLQkv
KiBBZGQgdG8gd2hlZWwgaWYgbm90IGFscmVhZHkgb24gaXQgYW5kIHN0cmVhbSBxdWV1ZSBub3Qg
ZW1wdHkgKi8KLQlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkgICAgKHN0
cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYKLQkgICAg
KHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPT0gTlVMTCkpIHsKLQkJ
aWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJCVRBSUxRX0lO
U0VSVF9IRUFEKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnByaW8u
bmV4dF9zcG9rZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCk7Ci0JCQl3aGlsZSAoc3RycXQgIT0gTlVMTCAmJiBzdHJxdC0+c3Nf
cGFyYW1zLnByaW8ucHJpb3JpdHkgPCBzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSkgewot
CQkJCXN0cnF0ID0gVEFJTFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7
Ci0JCQl9Ci0JCQlpZiAoc3RycXQgIT0gTlVMTCkgewotCQkJCVRBSUxRX0lOU0VSVF9CRUZPUkUo
c3RycXQsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOwotCQkJfSBlbHNlIHsKLQkJ
CQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3Bh
cmFtcy5wcmlvLm5leHRfc3Bva2UpOwotCQkJfQotCQl9Ci0JfQotCWlmIChob2xkc19sb2NrID09
IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQotCXJldHVybjsKLX0KLQot
c3RhdGljIHZvaWQKLXNjdHBfc3NfcHJpb19yZW1vdmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcg
KnNwIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykKLXsK
LQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKLQl9
Ci0JLyogUmVtb3ZlIGZyb20gd2hlZWwgaWYgc3RyZWFtIHF1ZXVlIGlzIGVtcHR5IGFuZCBhY3R1
YWxseSBpcyBvbiB0aGUgd2hlZWwgKi8KLQlpZiAoVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVl
KSAmJgotCSAgICAoc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCAhPSBO
VUxMIHx8Ci0JICAgIHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3ByZXYgIT0g
TlVMTCkpIHsKLQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsK
LQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJFVihhc29jLT5zc19k
YXRhLmxhc3Rfb3V0X3N0cmVhbSwgc2N0cHdoZWVsX2xpc3RoZWFkLAotCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKLQkJCWlm
IChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBOVUxMKSB7Ci0JCQkJYXNvYy0+c3Nf
ZGF0YS5sYXN0X291dF9zdHJlYW0gPSBUQUlMUV9MQVNUKCZhc29jLT5zc19kYXRhLm91dC53aGVl
bCwKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHB3aGVlbF9saXN0
aGVhZCk7Ci0JCQl9Ci0JCQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gc3Ry
cSkgewotCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVMTDsKLQkJCX0KLQkJ
fQotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzdHJxLCBzc19wYXJh
bXMucHJpby5uZXh0X3Nwb2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50
cWVfbmV4dCA9IE5VTEw7Ci0JCXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX3By
ZXYgPSBOVUxMOwotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENCX1NFTkRf
VU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0Kgotc2N0cF9zc19wcmlvX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9V
TlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3Ry
cSwgKnN0cnF0LCAqc3RycW47Ci0KLQlzdHJxdCA9IGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3Ry
ZWFtOwotcHJpb19hZ2FpbjoKLQkvKiBGaW5kIHRoZSBuZXh0IHN0cmVhbSB0byB1c2UgKi8KLQlp
ZiAoc3RycXQgPT0gTlVMTCkgewotCQlzdHJxID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEu
b3V0LndoZWVsKTsKLQl9IGVsc2UgewotCQlzdHJxbiA9IFRBSUxRX05FWFQoc3RycXQsIHNzX3Bh
cmFtcy5wcmlvLm5leHRfc3Bva2UpOwotCQlpZiAoc3RycW4gIT0gTlVMTCAmJgotCQkgICAgc3Ry
cW4tPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID09IHN0cnF0LT5zc19wYXJhbXMucHJpby5wcmlv
cml0eSkgewotCQkJc3RycSA9IHN0cnFuOwotCQl9IGVsc2UgewotCQkJc3RycSA9IFRBSUxRX0ZJ
UlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0JCX0KLQl9Ci0KLQkvKiBJZiBDTVQgaXMg
b2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQKLQkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0aW9uIGhh
cyB0aGUgZmlyc3QKLQkgKiBpdGVtIHBvaW50ZWQgdG93YXJkcyBhcmUgbmV0d29yayBkZXN0aW5h
dGlvbgotCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UKLQkgKiB0
dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFzc2lnbmluZwotCSAqIFRTTidzIHRo
ZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKLQkgKiBsb29rIGZvciBhbm90aGVyIHN0
cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAotCSAqIHRvIHRoYXQgZGVzdGluYXRpb24pLiBJbiBDTVQn
cyBjYXNlLCBieQotCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBvbmUKLQkg
KiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0LgotCSAqLwotCWlmIChuZXQg
IT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYKLQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Nt
dF9vbl9vZmYpID09IDApIHsKLQkJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkgJiYK
LQkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAhPSBOVUxMICYmCi0JCSAg
ICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gbmV0KSB7Ci0JCQlpZiAoc3Ry
cSA9PSBhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSkgewotCQkJCXJldHVybiAoTlVMTCk7
Ci0JCQl9IGVsc2UgewotCQkJCXN0cnF0ID0gc3RycTsKLQkJCQlnb3RvIHByaW9fYWdhaW47Ci0J
CQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChzdHJxKTsKLX0KLQotc3RhdGljIGludAotc2N0cF9zc19w
cmlvX2dldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VELAotICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCAqdmFsdWUpCi17Ci0JaWYg
KHN0cnEgPT0gTlVMTCkgewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JKnZhbHVlID0gc3RycS0+c3Nf
cGFyYW1zLnByaW8ucHJpb3JpdHk7Ci0JcmV0dXJuICgxKTsKLX0KLQotc3RhdGljIGludAotc2N0
cF9zc19wcmlvX3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpzdHJxLCB1aW50MTZfdCB2YWx1ZSkKLXsKLQlpZiAoc3RycSA9PSBOVUxMKSB7Ci0J
CXJldHVybiAoLTEpOwotCX0KLQlzdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eSA9IHZhbHVl
OwotCXNjdHBfc3NfcHJpb19yZW1vdmUoc3RjYiwgYXNvYywgc3RycSwgTlVMTCwgMSk7Ci0Jc2N0
cF9zc19wcmlvX2FkZChzdGNiLCBhc29jLCBzdHJxLCBOVUxMLCAxKTsKLQlyZXR1cm4gKDEpOwot
fQotCi0vKgotICogRmFpciBiYW5kd2lkdGggYWxnb3JpdGhtLgotICogTWFpbnRhaW5zIGFuIGVx
dWFsIHRyb3VnaHB1dCBwZXIgc3RyZWFtLgotICovCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9j
bGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAotICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQot
ewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwot
CX0KLQl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKLQkJ
c3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRh
Lm91dC53aGVlbCk7Ci0JCWlmIChjbGVhcl92YWx1ZXMpIHsKLQkJCXN0cnEtPnNzX3BhcmFtcy5m
Yi5yb3VuZHMgPSAtMTsKLQkJfQotCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0Lndo
ZWVsLCBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19wYXJhbXMuZmIu
bmV4dF9zcG9rZSk7Ci0JCXN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID0g
TlVMTDsKLQkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwot
CX0KLQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7Ci0JaWYgKGhvbGRzX2xv
Y2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKLQl9Ci0JcmV0dXJuOwot
fQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9pbml0X3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9v
dXQgKndpdGhfc3RycSkKLXsKLQlpZiAod2l0aF9zdHJxICE9IE5VTEwpIHsKLQkJaWYgKHN0Y2It
PmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9PSB3aXRoX3N0cnEpIHsKLQkJCXN0Y2It
PmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IHN0cnE7Ci0JCX0KLQkJaWYgKHN0Y2It
PmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gd2l0aF9zdHJxKSB7Ci0JCQlzdGNiLT5h
c29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKLQkJfQotCX0KLQlzdHJxLT5zc19w
YXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7Ci0Jc3RycS0+c3NfcGFyYW1zLmZi
Lm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOwotCWlmICh3aXRoX3N0cnEgIT0gTlVMTCkgewot
CQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gd2l0aF9zdHJxLT5zc19wYXJhbXMuZmIucm91
bmRzOwotCX0gZWxzZSB7Ci0JCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAtMTsKLQl9Ci0J
cmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9hZGQoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICpzcCBTQ1RQX1VOVVNFRCwKLSAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQotewot
CWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCX0K
LQlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkgJiYKLQkgICAgKHN0cnEtPnNzX3Bh
cmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID09IE5VTEwpICYmCi0JICAgIChzdHJxLT5zc19w
YXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9PSBOVUxMKSkgewotCQlpZiAoc3RycS0+c3Nf
cGFyYW1zLmZiLnJvdW5kcyA8IDApCi0JCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gVEFJ
TFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bGVuZ3RoOwotCQlUQUlMUV9JTlNFUlRfVEFJTCgm
YXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsK
LQl9Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNi
KTsKLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mYl9yZW1vdmUoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLSAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0
cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwKLSAgICAgICAgICAgICAgICAgIGlu
dCBob2xkc19sb2NrKQotewotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VO
RF9MT0NLKHN0Y2IpOwotCX0KLQkvKiBSZW1vdmUgZnJvbSB3aGVlbCBpZiBzdHJlYW0gcXVldWUg
aXMgZW1wdHkgYW5kIGFjdHVhbGx5IGlzIG9uIHRoZSB3aGVlbCAqLwotCWlmIChUQUlMUV9FTVBU
WSgmc3RycS0+b3V0cXVldWUpICYmCi0JICAgIChzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9r
ZS50cWVfbmV4dCAhPSBOVUxMIHx8Ci0JICAgIHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tl
LnRxZV9wcmV2ICE9IE5VTEwpKSB7Ci0JCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVh
bSA9PSBzdHJxKSB7Ci0JCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRBSUxRX1BS
RVYoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0sIHNjdHB3aGVlbF9saXN0aGVhZCwKLQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3NfcGFyYW1zLmZiLm5leHRfc3Bv
a2UpOwotCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IE5VTEwpIHsKLQkJ
CQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2Rh
dGEub3V0LndoZWVsLAotCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0
cHdoZWVsX2xpc3RoZWFkKTsKLQkJCX0KLQkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0
cmVhbSA9PSBzdHJxKSB7Ci0JCQkJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBOVUxM
OwotCQkJfQotCQl9Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0
cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKLQkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRf
c3Bva2UudHFlX25leHQgPSBOVUxMOwotCQlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50
cWVfcHJldiA9IE5VTEw7Ci0JfQotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soc3RjYik7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHN0cnVjdCBzY3Rw
X3N0cmVhbV9vdXQqCi1zY3RwX3NzX2ZiX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NU
UF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQotewotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0
cnEgPSBOVUxMLCAqc3RycXQ7Ci0KLQlpZiAoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0g
PT0gTlVMTCB8fAotCSAgICBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpID09
IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzY3Rwd2hlZWxfbGlzdGhlYWQp
KSB7Ci0JCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKLQl9
IGVsc2UgewotCQlzdHJxdCA9IFRBSUxRX05FWFQoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJl
YW0sIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKLQl9Ci0JZG8gewotCQlpZiAoKHN0cnF0ICE9
IE5VTEwpICYmCi0JCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA+IDAp
IHx8Ci0JCSAgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwICYmCi0J
CSAgICAgIChuZXQgPT0gTlVMTCB8fCAoVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSkgJiYg
VEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSktPm5ldCA9PSBOVUxMKSB8fAotCQkgICAgICAg
KG5ldCAhPSBOVUxMICYmIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpICYmIFRBSUxRX0ZJ
UlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAmJgotCQkgICAgICAgIFRBSUxRX0ZJ
UlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgPT0gbmV0KSkpKSkgewotCQkJaWYgKChzdHJxdC0+
c3NfcGFyYW1zLmZiLnJvdW5kcyA+PSAwKSAmJiAoc3RycSA9PSBOVUxMIHx8Ci0JCQkJc3RycXQt
PnNzX3BhcmFtcy5mYi5yb3VuZHMgPCBzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzKSkgewotCQkJ
CXN0cnEgPSBzdHJxdDsKLQkJCX0KLQkJfQotCQlpZiAoc3RycXQgIT0gTlVMTCkgewotCQkJc3Ry
cXQgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSk7Ci0JCX0gZWxz
ZSB7Ci0JCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7Ci0J
CX0KLQl9IHdoaWxlIChzdHJxdCAhPSBzdHJxKTsKLQlyZXR1cm4gKHN0cnEpOwotfQotCi1zdGF0
aWMgdm9pZAotc2N0cF9zc19mYl9zY2hlZHVsZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwK
LSAgICAgICAgICAgICAgICAgICAgIGludCBtb3ZlZF9ob3dfbXVjaCBTQ1RQX1VOVVNFRCkKLXsK
LQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0Jc3RydWN0IHNjdHBfc3Ry
ZWFtX291dCAqc3RycXQ7Ci0JaW50IHN1YnRyYWN0OwotCi0JaWYgKHN0Y2ItPmFzb2MuaWRhdGFf
c3VwcG9ydGVkID09IDApIHsKLQkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOwot
CQlpZiAoKHNwICE9IE5VTEwpICYmIChzcC0+c29tZV90YWtlbiA9PSAxKSkgewotCQkJc3RjYi0+
YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKLQkJfSBlbHNlIHsKLQkJCXN0
Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IE5VTEw7Ci0JCX0KLQl9IGVsc2Ug
ewotCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBOVUxMOwotCX0KLQlz
dWJ0cmFjdCA9IHN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHM7Ci0JVEFJTFFfRk9SRUFDSChzdHJx
dCwgJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSkgewot
CQlzdHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyAtPSBzdWJ0cmFjdDsKLQkJaWYgKHN0cnF0LT5z
c19wYXJhbXMuZmIucm91bmRzIDwgMCkKLQkJCXN0cnF0LT5zc19wYXJhbXMuZmIucm91bmRzID0g
MDsKLQl9Ci0JaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkpIHsKLQkJc3RycS0+c3Nf
cGFyYW1zLmZiLnJvdW5kcyA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPmxlbmd0aDsK
LQl9IGVsc2UgewotCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gLTE7Ci0JfQotCWFzb2Mt
PnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBG
aXJzdC1jb21lLCBmaXJzdC1zZXJ2ZSBhbGdvcml0aG0uCi0gKiBNYWludGFpbnMgdGhlIG9yZGVy
IHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KLSAqLwotc3RhdGljIHZvaWQKLXNjdHBfc3Nf
ZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYywKLSAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3Ry
dWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAotICAgICAgICAgICAgICAgICBpbnQg
aG9sZHNfbG9jayk7Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX3NzX2ZjZnNfaW5pdChzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgICAgICAgICAg
ICAgICAgaW50IGhvbGRzX2xvY2spCi17Ci0JdWludDMyX3QgeCwgbiA9IDAsIGFkZF9tb3JlID0g
MTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7Ci0JdWludDE2X3QgaTsK
LQotCVRBSUxRX0lOSVQoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpOwotCS8qCi0JICogSWYgdGhl
cmUgaXMgZGF0YSBpbiB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAotCSAqIHRoZSBzY2hlZHVs
ZXIgb2YgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gaGFzCi0JICogYmVlbiBjaGFuZ2VkLiBXZSBj
YW4gb25seSBjeWNsZSB0aHJvdWdoIHRoZQotCSAqIHN0cmVhbSBxdWV1ZXMgYW5kIGFkZCBldmVy
eXRoaW5nIHRvIHRoZSBGQ0ZTCi0JICogcXVldWUuCi0JICovCi0Jd2hpbGUgKGFkZF9tb3JlKSB7
Ci0JCWFkZF9tb3JlID0gMDsKLQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0
Y250OyBpKyspIHsKLQkJCXNwID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5v
dXRxdWV1ZSk7Ci0JCQl4ID0gMDsKLQkJCS8qIEZpbmQgbi4gbWVzc2FnZSBpbiBjdXJyZW50IHN0
cmVhbSBxdWV1ZSAqLwotCQkJd2hpbGUgKHNwICE9IE5VTEwgJiYgeCA8IG4pIHsKLQkJCQlzcCA9
IFRBSUxRX05FWFQoc3AsIG5leHQpOwotCQkJCXgrKzsKLQkJCX0KLQkJCWlmIChzcCAhPSBOVUxM
KSB7Ci0JCQkJc2N0cF9zc19mY2ZzX2FkZChzdGNiLCAmc3RjYi0+YXNvYywgJnN0Y2ItPmFzb2Mu
c3RybW91dFtpXSwgc3AsIGhvbGRzX2xvY2spOwotCQkJCWFkZF9tb3JlID0gMTsKLQkJCX0KLQkJ
fQotCQluKys7Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZmNmc19j
bGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAotICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19sb2NrKQot
ewotCWlmIChjbGVhcl92YWx1ZXMpIHsKLQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQkJU0NU
UF9UQ0JfU0VORF9MT0NLKHN0Y2IpOwotCQl9Ci0JCXdoaWxlICghVEFJTFFfRU1QVFkoJmFzb2Mt
PnNzX2RhdGEub3V0Lmxpc3QpKSB7Ci0JCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0
Lmxpc3QsIFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KSwgc3NfbmV4dCk7Ci0J
CX0KLQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3Rj
Yik7Ci0JCX0KLQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9zc19mY2ZzX2lu
aXRfc3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
c3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqd2l0aF9zdHJxKQotewotCWlmICh3aXRoX3N0
cnEgIT0gTlVMTCkgewotCQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5n
ID09IHdpdGhfc3RycSkgewotCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5n
ID0gc3RycTsKLQkJfQotCQlpZiAoc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9
PSB3aXRoX3N0cnEpIHsKLQkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBz
dHJxOwotCQl9Ci0JfQotCXJldHVybjsKLX0KLQotc3RhdGljIHZvaWQKLXNjdHBfc3NfZmNmc19h
ZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywK
LSAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSBTQ1RQX1VOVVNF
RCwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAotICAgICAgICAgICAgICAg
ICBpbnQgaG9sZHNfbG9jaykKLXsKLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7Ci0JCVNDVFBfVENC
X1NFTkRfTE9DSyhzdGNiKTsKLQl9Ci0JaWYgKHNwICYmIChzcC0+c3NfbmV4dC50cWVfbmV4dCA9
PSBOVUxMKSAmJgotCSAgICAoc3AtPnNzX25leHQudHFlX3ByZXYgPT0gTlVMTCkpIHsKLQkJVEFJ
TFFfSU5TRVJUX1RBSUwoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QsIHNwLCBzc19uZXh0KTsKLQl9
Ci0JaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsK
LQl9Ci0JcmV0dXJuOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3NzX2ZjZnNfaXNfZW1wdHkoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYykKLXsKLQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7Ci0J
CXJldHVybiAoMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXN0YXRpYyB2
b2lkCi1zY3RwX3NzX2ZjZnNfcmVtb3ZlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQgKnN0cnEgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICpzcCwKLSAgICAgICAgICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCi17Ci0JaWYgKGhv
bGRzX2xvY2sgPT0gMCkgewotCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7Ci0JfQotCWlmIChz
cCAmJgotCSAgICAoKHNwLT5zc19uZXh0LnRxZV9uZXh0ICE9IE5VTEwpIHx8Ci0JICAgICAoc3At
PnNzX25leHQudHFlX3ByZXYgIT0gTlVMTCkpKSB7Ci0JCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3Nf
ZGF0YS5vdXQubGlzdCwgc3AsIHNzX25leHQpOwotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7
Ci0JCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlyZXR1cm47Ci19Ci0KLQotc3Rh
dGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKgotc2N0cF9zc19mY2ZzX3NlbGVjdChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCi17Ci0Jc3RydWN0
IHNjdHBfc3RyZWFtX291dCAqc3RycTsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGlu
ZyAqc3A7Ci0KLQlzcCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC5saXN0KTsKLWRl
ZmF1bHRfYWdhaW46Ci0JaWYgKHNwICE9IE5VTEwpIHsKLQkJc3RycSA9ICZhc29jLT5zdHJtb3V0
W3NwLT5zaWRdOwotCX0gZWxzZSB7Ci0JCXN0cnEgPSBOVUxMOwotCX0KLQotCS8qCi0JICogSWYg
Q01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0Ci0JICogdGhlIHN0cmVhbSBpbiBxdWVz
dGlvbiBoYXMgdGhlIGZpcnN0Ci0JICogaXRlbSBwb2ludGVkIHRvd2FyZHMgYXJlIG5ldHdvcmsg
ZGVzdGluYXRpb24KLQkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4gTm90ZSB0aGF0IGlmIHdl
Ci0JICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3RyZWFtIChhc3NpZ25pbmcKLQkgKiBU
U04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fubm90Ci0JICogbG9vayBmb3IgYW5v
dGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKLQkgKiB0byB0aGF0IGRlc3RpbmF0aW9uKS4g
SW4gQ01UJ3MgY2FzZSwgYnkKLQkgKiBza2lwcGluZyB0aGlzIGNoZWNrLCB3ZSB3aWxsIHNlbmQg
b25lCi0JICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVxdWVzdGVkIG5ldC4KLQkgKi8KLQlp
ZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCi0JICAgIFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7Ci0JCWlmIChUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVl
dWUpICYmCi0JCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAm
JgotCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bmV0ICE9IG5ldCkgewotCQkJ
c3AgPSBUQUlMUV9ORVhUKHNwLCBzc19uZXh0KTsKLQkJCWdvdG8gZGVmYXVsdF9hZ2FpbjsKLQkJ
fQotCX0KLQlyZXR1cm4gKHN0cnEpOwotfQotCi1jb25zdCBzdHJ1Y3Qgc2N0cF9zc19mdW5jdGlv
bnMgc2N0cF9zc19mdW5jdGlvbnNbXSA9IHsKLS8qIFNDVFBfU1NfREVGQVVMVCAqLwotewotI2lm
IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LQlzY3RwX3NzX2RlZmF1bHRfaW5pdCwKLQlzY3RwX3NzX2RlZmF1bHRfY2xlYXIsCi0Jc2N0cF9z
c19kZWZhdWx0X2luaXRfc3RyZWFtLAotCXNjdHBfc3NfZGVmYXVsdF9hZGQsCi0Jc2N0cF9zc19k
ZWZhdWx0X2lzX2VtcHR5LAotCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCi0Jc2N0cF9zc19kZWZh
dWx0X3NlbGVjdCwKLQlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAotCXNjdHBfc3NfZGVmYXVs
dF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVm
YXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRl
Ci0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKLQkuc2N0cF9z
c19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKLQkuc2N0cF9zc19pbml0X3N0cmVhbSA9
IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0g
c2N0cF9zc19kZWZhdWx0X2FkZCwKLQkuc2N0cF9zc19pc19lbXB0eSA9IHNjdHBfc3NfZGVmYXVs
dF9pc19lbXB0eSwKLQkuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1
bHRfcmVtb3ZlLAotCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfc2Vs
ZWN0LAotCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCi0J
LnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0JLnNj
dHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKLQkuc2N0cF9zc19z
ZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAotCS5zY3RwX3NzX2lzX3VzZXJf
bXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRl
Ci0jZW5kaWYKLX0sCi0vKiBTQ1RQX1NTX1JPVU5EX1JPQklOICovCi17Ci0jaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXNjdHBfc3Nf
ZGVmYXVsdF9pbml0LAotCXNjdHBfc3NfZGVmYXVsdF9jbGVhciwKLQlzY3RwX3NzX2RlZmF1bHRf
aW5pdF9zdHJlYW0sCi0Jc2N0cF9zc19ycl9hZGQsCi0Jc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5
LAotCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCi0Jc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKLQlz
Y3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAotCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwK
LQlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUs
Ci0Jc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZWxzZQotCS5zY3Rw
X3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKLQkuc2N0cF9zc19jbGVhciA9IHNjdHBf
c3NfZGVmYXVsdF9jbGVhciwKLQkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVs
dF9pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQs
Ci0JLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0JLnNjdHBf
c3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKLQkuc2N0cF9z
c19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKLQkuc2N0cF9zc19zY2hl
ZHVsZWQgPSBzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAotCS5zY3RwX3NzX3BhY2tldF9kb25l
ID0gc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAotCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNj
dHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUsCi0JLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19k
ZWZhdWx0X3NldF92YWx1ZSwKLQkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNj
dHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQotI2VuZGlmCi19LAotLyogU0NU
UF9TU19ST1VORF9ST0JJTl9QQUNLRVQgKi8KLXsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0cF9zc19kZWZhdWx0X2luaXQs
Ci0Jc2N0cF9zc19kZWZhdWx0X2NsZWFyLAotCXNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwK
LQlzY3RwX3NzX3JyX2FkZCwKLQlzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0Jc2N0cF9zc19k
ZWZhdWx0X3JlbW92ZSwKLQlzY3RwX3NzX3JycF9zZWxlY3QsCi0Jc2N0cF9zc19kZWZhdWx0X3Nj
aGVkdWxlZCwKLQlzY3RwX3NzX3JycF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1bHRfZ2V0
X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0X2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2Rl
ZmF1bHRfaW5pdCwKLQkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKLQku
c2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKLQkuc2N0
cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQsCi0JLnNjdHBfc3NfaXNfZW1wdHkg
PSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0JLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFt
ID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKLQkuc2N0cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0
cF9zc19ycnBfc2VsZWN0LAotCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9z
Y2hlZHVsZWQsCi0JLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX3JycF9wYWNrZXRfZG9u
ZSwKLQkuc2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCS5z
Y3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0JLnNjdHBfc3Nf
aXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2lu
Y29tcGxldGUKLSNlbmRpZgotfSwKLS8qIFNDVFBfU1NfUFJJT1JJVFkgKi8KLXsKLSNpZiBkZWZp
bmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0Jc2N0
cF9zc19kZWZhdWx0X2luaXQsCi0Jc2N0cF9zc19wcmlvX2NsZWFyLAotCXNjdHBfc3NfcHJpb19p
bml0X3N0cmVhbSwKLQlzY3RwX3NzX3ByaW9fYWRkLAotCXNjdHBfc3NfZGVmYXVsdF9pc19lbXB0
eSwKLQlzY3RwX3NzX3ByaW9fcmVtb3ZlLAotCXNjdHBfc3NfcHJpb19zZWxlY3QsCi0Jc2N0cF9z
c19kZWZhdWx0X3NjaGVkdWxlZCwKLQlzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0Jc2N0
cF9zc19wcmlvX2dldF92YWx1ZSwKLQlzY3RwX3NzX3ByaW9fc2V0X3ZhbHVlLAotCXNjdHBfc3Nf
ZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQotI2Vsc2UKLQkuc2N0cF9zc19pbml0ID0g
c2N0cF9zc19kZWZhdWx0X2luaXQsCi0JLnNjdHBfc3NfY2xlYXIgPSBzY3RwX3NzX3ByaW9fY2xl
YXIsCi0JLnNjdHBfc3NfaW5pdF9zdHJlYW0gPSBzY3RwX3NzX3ByaW9faW5pdF9zdHJlYW0sCi0J
LnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfcHJpb19hZGQsCi0JLnNjdHBfc3NfaXNf
ZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCi0JLnNjdHBfc3NfcmVtb3ZlX2Zyb21f
c3RyZWFtID0gc2N0cF9zc19wcmlvX3JlbW92ZSwKLQkuc2N0cF9zc19zZWxlY3Rfc3RyZWFtID0g
c2N0cF9zc19wcmlvX3NlbGVjdCwKLQkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2RlZmF1
bHRfc2NoZWR1bGVkLAotCS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19kZWZhdWx0X3Bh
Y2tldF9kb25lLAotCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfcHJpb19nZXRfdmFsdWUs
Ci0JLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19wcmlvX3NldF92YWx1ZSwKLQkuc2N0cF9z
c19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3Nf
aW5jb21wbGV0ZQotI2VuZGlmCi19LAotLyogU0NUUF9TU19GQUlSX0JBTkRXSVRIICovCi17Ci0j
aWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCXNjdHBfc3NfZGVmYXVsdF9pbml0LAotCXNjdHBfc3NfZmJfY2xlYXIsCi0Jc2N0cF9zc19m
Yl9pbml0X3N0cmVhbSwKLQlzY3RwX3NzX2ZiX2FkZCwKLQlzY3RwX3NzX2RlZmF1bHRfaXNfZW1w
dHksCi0Jc2N0cF9zc19mYl9yZW1vdmUsCi0Jc2N0cF9zc19mYl9zZWxlY3QsCi0Jc2N0cF9zc19m
Yl9zY2hlZHVsZWQsCi0Jc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAotCXNjdHBfc3NfZGVm
YXVsdF9nZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKLQlzY3RwX3NzX2Rl
ZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKLSNlbHNlCi0JLnNjdHBfc3NfaW5pdCA9IHNj
dHBfc3NfZGVmYXVsdF9pbml0LAotCS5zY3RwX3NzX2NsZWFyID0gc2N0cF9zc19mYl9jbGVhciwK
LQkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmJfaW5pdF9zdHJlYW0sCi0JLnNjdHBf
c3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfZmJfYWRkLAotCS5zY3RwX3NzX2lzX2VtcHR5ID0g
c2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAotCS5zY3RwX3NzX3JlbW92ZV9mcm9tX3N0cmVhbSA9
IHNjdHBfc3NfZmJfcmVtb3ZlLAotCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2Zi
X3NlbGVjdCwKLQkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2ZiX3NjaGVkdWxlZCwKLQku
c2N0cF9zc19wYWNrZXRfZG9uZSA9IHNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKLQkuc2N0
cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAotCS5zY3RwX3NzX3Nl
dF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0JLnNjdHBfc3NfaXNfdXNlcl9t
c2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUK
LSNlbmRpZgotfSwKLS8qIFNDVFBfU1NfRklSU1RfQ09NRSAqLwotewotI2lmIGRlZmluZWQoX19X
aW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlzY3RwX3NzX2Zj
ZnNfaW5pdCwKLQlzY3RwX3NzX2ZjZnNfY2xlYXIsCi0Jc2N0cF9zc19mY2ZzX2luaXRfc3RyZWFt
LAotCXNjdHBfc3NfZmNmc19hZGQsCi0Jc2N0cF9zc19mY2ZzX2lzX2VtcHR5LAotCXNjdHBfc3Nf
ZmNmc19yZW1vdmUsCi0Jc2N0cF9zc19mY2ZzX3NlbGVjdCwKLQlzY3RwX3NzX2RlZmF1bHRfc2No
ZWR1bGVkLAotCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKLQlzY3RwX3NzX2RlZmF1bHRf
Z2V0X3ZhbHVlLAotCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCi0Jc2N0cF9zc19kZWZhdWx0
X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCi0jZWxzZQotCS5zY3RwX3NzX2luaXQgPSBzY3RwX3Nz
X2ZjZnNfaW5pdCwKLQkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZmNmc19jbGVhciwKLQkuc2N0
cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmNmc19pbml0X3N0cmVhbSwKLQkuc2N0cF9zc19h
ZGRfdG9fc3RyZWFtID0gc2N0cF9zc19mY2ZzX2FkZCwKLQkuc2N0cF9zc19pc19lbXB0eSA9IHNj
dHBfc3NfZmNmc19pc19lbXB0eSwKLQkuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0gPSBzY3Rw
X3NzX2ZjZnNfcmVtb3ZlLAotCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0gPSBzY3RwX3NzX2ZjZnNf
c2VsZWN0LAotCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQs
Ci0JLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1bHRfcGFja2V0X2RvbmUsCi0J
LnNjdHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X2dldF92YWx1ZSwKLQkuc2N0cF9z
c19zZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVlLAotCS5zY3RwX3NzX2lzX3Vz
ZXJfbXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBs
ZXRlCi0jZW5kaWYKLX0KLX07CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3Ry
dWN0cy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N0cnVjdHMuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggYjVmM2VmMjVmZmFiODBhNzIwMjg1ZTEwYTAyOGFkYTc4ZWIzNGY3OS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfc3RydWN0cy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTMwNCArMCwwIEBACi0v
Ki0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFs
bCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICog
ICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lm
ZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVC
U0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6
MDY6NDFaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NUUlVD
VFNfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9TVFJVQ1RTX0hfCi0KLSNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfb3MuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KLQotc3RydWN0IHNjdHBfdGltZXIgewotCXNjdHBfb3Nf
dGltZXJfdCB0aW1lcjsKLQotCWludCB0eXBlOwotCS8qCi0JICogRGVwZW5kaW5nIG9uIHRoZSB0
aW1lciB0eXBlIHRoZXNlIHdpbGwgYmUgc2V0dXAgYW5kIGNhc3Qgd2l0aCB0aGUKLQkgKiBhcHBy
b3ByaWF0ZSBlbnRpdHkuCi0JICovCi0Jdm9pZCAqZXA7Ci0Jdm9pZCAqdGNiOwotCXZvaWQgKm5l
dDsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAw
MDAKLQl2b2lkICp2bmV0OwotI2VuZGlmCi0KLQkvKiBmb3Igc2FuaXR5IGNoZWNraW5nICovCi0J
dm9pZCAqc2VsZjsKLQl1aW50MzJfdCB0aWNrczsKLQl1aW50MzJfdCBzdG9wcGVkX2Zyb207Ci19
OwotCi0KLXN0cnVjdCBzY3RwX2Zvb19zdHVmZiB7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsK
LQl1aW50MzJfdCAgICAgICAgbGluZW5vOwotCXVpbnQzMl90ICAgICAgICB0aWNrczsKLQlpbnQg
ICAgICAgICAgICAgdXBkb3duOwotfTsKLQotCi0vKgotICogVGhpcyBpcyB0aGUgaW5mb3JtYXRp
b24gd2UgdHJhY2sgb24gZWFjaCBpbnRlcmZhY2UgdGhhdCB3ZSBrbm93IGFib3V0IGZyb20KLSAq
IHRoZSBkaXN0YW50IGVuZC4KLSAqLwotVEFJTFFfSEVBRChzY3RwbmV0bGlzdGhlYWQsIHNjdHBf
bmV0cyk7Ci0KLXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0IHsKLQlUQUlMUV9FTlRSWShz
Y3RwX3N0cmVhbV9yZXNldF9saXN0KSBuZXh0X3Jlc3A7Ci0JdWludDMyX3Qgc2VxOwotCXVpbnQz
Ml90IHRzbjsKLQl1aW50MzJfdCBudW1iZXJfZW50cmllczsKLQl1aW50MTZfdCBsaXN0X29mX3N0
cmVhbXNbXTsKLX07Ci0KLVRBSUxRX0hFQUQoc2N0cF9yZXNldGhlYWQsIHNjdHBfc3RyZWFtX3Jl
c2V0X2xpc3QpOwotCi0vKgotICogVXNlcnMgb2YgdGhlIGl0ZXJhdG9yIG5lZWQgdG8gbWFsbG9j
IGEgaXRlcmF0b3Igd2l0aCBhIGNhbGwgdG8KLSAqIHNjdHBfaW5pdGlhdGVfaXRlcmF0b3IoaW5w
X2Z1bmMsIGFzc29jX2Z1bmMsIGlucF9mdW5jLCAgcGNiX2ZsYWdzLCBwY2JfZmVhdHVyZXMsCi0g
KiAgICAgYXNvY19zdGF0ZSwgdm9pZC1wdHItYXJnLCB1aW50MzItYXJnLCBlbmRfZnVuYywgaW5w
KTsKLSAqCi0gKiBVc2UgdGhlIGZvbGxvd2luZyB0d28gZGVmaW5lcyBpZiB5b3UgZG9uJ3QgY2Fy
ZSB3aGF0IHBjYiBmbGFncyBhcmUgb24gdGhlIEVQCi0gKiBhbmQvb3IgeW91IGRvbid0IGNhcmUg
d2hhdCBzdGF0ZSB0aGUgYXNzb2NpYXRpb24gaXMgaW4uCi0gKgotICogTm90ZSB0aGF0IGlmIHlv
dSBzcGVjaWZ5IGFuIElOUCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0aGVuIE9OTFkgZWFjaAotICog
YXNzb2NpYXRpb24gb2YgdGhhdCBzaW5nbGUgSU5QIHdpbGwgYmUgZXhlY3V0ZWQgdXBvbi4gTm90
ZSB0aGF0IHRoZSBwY2IKLSAqIGZsYWdzIFNUSUxMIGFwcGx5IHNvIGlmIHRoZSBpbnAgeW91IHNw
ZWNpZnkgaGFzIGRpZmZlcmVudCBwY2JfZmxhZ3MgdGhlbgotICogd2hhdCB5b3UgcHV0IGluIHBj
Yl9mbGFncyBub3RoaW5nIHdpbGwgaGFwcGVuLiB1c2UgU0NUUF9QQ0JfQU5ZX0ZMQUdTIHRvCi0g
KiBhc3N1cmUgdGhlIGlucCB5b3Ugc3BlY2lmeSBnZXRzIHRyZWF0ZWQuCi0gKi8KLSNkZWZpbmUg
U0NUUF9QQ0JfQU5ZX0ZMQUdTCTB4MDAwMDAwMDAKLSNkZWZpbmUgU0NUUF9QQ0JfQU5ZX0ZFQVRV
UkVTCTB4MDAwMDAwMDAKLSNkZWZpbmUgU0NUUF9BU09DX0FOWV9TVEFURQkweDAwMDAwMDAwCi0K
LXR5cGVkZWYgdm9pZCAoKmFzb2NfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBz
Y3RwX3RjYiAqLCB2b2lkICpwdHIsCi0gICAgICAgICB1aW50MzJfdCB2YWwpOwotdHlwZWRlZiBp
bnQgKCppbnBfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHZvaWQgKnB0ciwgdWludDMyX3Qg
dmFsKTsKLXR5cGVkZWYgdm9pZCAoKmVuZF9mdW5jKSAodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwp
OwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVU
KSAmJiBkZWZpbmVkKFNNUCkKLS8qIHdoYXRzIG9uIHRoZSBtY29yZSBjb250cm9sIHN0cnVjdCAq
Lwotc3RydWN0IHNjdHBfbWNvcmVfcXVldWUgewotCVRBSUxRX0VOVFJZKHNjdHBfbWNvcmVfcXVl
dWUpIG5leHQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAxMDAwCi0Jc3RydWN0IHZuZXQgKnZuOwotI2VuZGlmCi0Jc3RydWN0IG1idWYgKm07Ci0J
aW50IG9mZjsKLQlpbnQgdjY7Ci19OwotCi1UQUlMUV9IRUFEKHNjdHBfbWNvcmVfcWhlYWQsIHNj
dHBfbWNvcmVfcXVldWUpOwotCi1zdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsIHsKLQlTQ1RQX1BST0NF
U1NfU1RSVUNUIHRocmVhZF9wcm9jOwotCXN0cnVjdCBzY3RwX21jb3JlX3FoZWFkIHF1ZTsKLQlz
dHJ1Y3QgbXR4IGNvcmVfbXR4OwotCXN0cnVjdCBtdHggcXVlX210eDsKLQlpbnQgcnVubmluZzsK
LQlpbnQgY3B1aWQ7Ci19OwotCi0KLSNlbmRpZgotCi0KLXN0cnVjdCBzY3RwX2l0ZXJhdG9yIHsK
LQlUQUlMUV9FTlRSWShzY3RwX2l0ZXJhdG9yKSBzY3RwX254dF9pdHI7Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0Jc3RydWN0IHZuZXQg
KnZuOwotI2VuZGlmCi0Jc3RydWN0IHNjdHBfdGltZXIgdG1yOwotCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7CQkvKiBjdXJyZW50IGVuZHBvaW50ICovCi0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwkJ
LyogY3VycmVudCogYXNzb2MgKi8KLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV4dF9pbnA7ICAgIC8q
IHNwZWNpYWwgaG9vayB0byBza2lwIHRvICovCi0JYXNvY19mdW5jIGZ1bmN0aW9uX2Fzc29jOwkv
KiBwZXIgYXNzb2MgZnVuY3Rpb24gKi8KLQlpbnBfZnVuYyBmdW5jdGlvbl9pbnA7CQkvKiBwZXIg
ZW5kcG9pbnQgZnVuY3Rpb24gKi8KLQlpbnBfZnVuYyBmdW5jdGlvbl9pbnBfZW5kOwkvKiBlbmQg
SU5QIGZ1bmN0aW9uICovCi0JZW5kX2Z1bmMgZnVuY3Rpb25fYXRlbmQ7CS8qIGl0ZXJhdG9yIGNv
bXBsZXRpb24gZnVuY3Rpb24gKi8KLQl2b2lkICpwb2ludGVyOwkJCS8qIHBvaW50ZXIgZm9yIGFw
cGx5IGZ1bmMgdG8gdXNlICovCi0JdWludDMyX3QgdmFsOwkJCS8qIHZhbHVlIGZvciBhcHBseSBm
dW5jIHRvIHVzZSAqLwotCXVpbnQzMl90IHBjYl9mbGFnczsJCS8qIGVuZHBvaW50IGZsYWdzIGJl
aW5nIGNoZWNrZWQgKi8KLQl1aW50MzJfdCBwY2JfZmVhdHVyZXM7CQkvKiBlbmRwb2ludCBmZWF0
dXJlcyBiZWluZyBjaGVja2VkICovCi0JdWludDMyX3QgYXNvY19zdGF0ZTsJCS8qIGFzc29jIHN0
YXRlIGJlaW5nIGNoZWNrZWQgKi8KLQl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKLQl1aW50OF90
ICBub19jaHVua19vdXRwdXQ7Ci0JdWludDhfdCAgZG9uZV9jdXJyZW50X2VwOwotfTsKLS8qIGl0
ZXJhdG9yX2ZsYWdzIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX0FMTF9JTlAJ
MHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlAJMHgwMDAwMDAw
MgotCi0KLVRBSUxRX0hFQUQoc2N0cGl0ZXJhdG9ycywgc2N0cF9pdGVyYXRvcik7Ci0KLXN0cnVj
dCBzY3RwX2NvcHlfYWxsIHsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwkvKiBlcCAqLwotCXN0
cnVjdCBtYnVmICptOwotCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2OwotCWludCBzbmRs
ZW47Ci0JaW50IGNudF9zZW50OwotCWludCBjbnRfZmFpbGVkOwotfTsKLQotc3RydWN0IHNjdHBf
YXNjb25mX2l0ZXJhdG9yIHsKLQlzdHJ1Y3Qgc2N0cGxhZGRyIGxpc3Rfb2Zfd29yazsKLQlpbnQg
Y250OwotfTsKLQotc3RydWN0IGl0ZXJhdG9yX2NvbnRyb2wgewotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0Jc3RydWN0IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OwotCXN0cnVjdCBtdHggaXRf
bXR4OwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCi0JbGNrX210eF90ICppcGlfaXRlcmF0b3Jf
d3FfbXR4OwotCWxja19tdHhfdCAqaXRfbXR4OwotI2VsaWYgZGVmaW5lZChTQ1RQX1BST0NFU1Nf
TEVWRUxfTE9DS1MpCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCXVzZXJsYW5kX211dGV4
X3QgaXBpX2l0ZXJhdG9yX3dxX210eDsKLQl1c2VybGFuZF9tdXRleF90IGl0X210eDsKLQl1c2Vy
bGFuZF9jb25kX3QgaXRlcmF0b3Jfd2FrZXVwOwotI2Vsc2UKLQlwdGhyZWFkX211dGV4X3QgaXBp
X2l0ZXJhdG9yX3dxX210eDsKLQlwdGhyZWFkX211dGV4X3QgaXRfbXR4OwotCXB0aHJlYWRfY29u
ZF90IGl0ZXJhdG9yX3dha2V1cDsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykK
LQlzdHJ1Y3Qgc3BpbmxvY2sgaXRfbG9jazsKLQlzdHJ1Y3Qgc3BpbmxvY2sgaXBpX2l0ZXJhdG9y
X3dxX2xvY2s7Ci0JS0VWRU5UIGl0ZXJhdG9yX3dha2V1cFsyXTsKLQlQRklMRV9PQkpFQ1QgaXRl
cmF0b3JfdGhyZWFkX29iajsKLSNlbHNlCi0Jdm9pZCAqaXRfbXR4OwotI2VuZGlmCi0jaWYgIWRl
ZmluZWQoX19XaW5kb3dzX18pCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlTQ1RQX1BS
T0NFU1NfU1RSVUNUIHRocmVhZF9wcm9jOwotI2Vsc2UKLQl1c2VybGFuZF90aHJlYWRfdCB0aHJl
YWRfcHJvYzsKLSNlbmRpZgotI2VuZGlmCi0Jc3RydWN0IHNjdHBpdGVyYXRvcnMgaXRlcmF0b3Jo
ZWFkOwotCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICpjdXJfaXQ7Ci0JdWludDMyX3QgaXRlcmF0b3Jf
cnVubmluZzsKLQl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKLX07Ci0jaWYgIWRlZmluZWQoX19G
cmVlQlNEX18pCi0jZGVmaW5lIFNDVFBfSVRFUkFUT1JfTVVTVF9FWElUCQkweDAwMDAwMDAxCi0j
ZGVmaW5lIFNDVFBfSVRFUkFUT1JfRVhJVEVECQkweDAwMDAwMDAyCi0jZW5kaWYKLSNkZWZpbmUg
U0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JVAkweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBfSVRFUkFU
T1JfU1RPUF9DVVJfSU5QCTB4MDAwMDAwMDgKLQotc3RydWN0IHNjdHBfbmV0X3JvdXRlIHsKLQlz
Y3RwX3J0ZW50cnlfdCAqcm9fcnQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0Zy
ZWVCU0RfdmVyc2lvbiA8IDExMDAwOTMKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAK
LQl2b2lkICpyb19sbGU7Ci0jZW5kaWYKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA5MDAwMDAK
LQl2b2lkICpyb19pYTsKLQlpbnQgcm9fZmxhZ3M7Ci0jZW5kaWYKLSNlbHNlCi0jaWYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gMTEwMDExNgotCXN0cnVjdCBsbGVudHJ5ICpyb19sbGU7Ci0jZW5kaWYK
LQljaGFyCQkqcm9fcHJlcGVuZDsKLQl1aW50MTZfdAlyb19wbGVuOwotCXVpbnQxNl90CXJvX2Zs
YWdzOwotCXVpbnQxNl90CXJvX210dTsKLQl1aW50MTZfdAlzcGFyZTsKLSNlbmRpZgotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYg
IWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFk
ZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKLQlzdHJ1Y3QgaWZhZGRyICpyb19zcmNpYTsKLSNl
bmRpZgotI2lmICFkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0JdWludDMyX3Qgcm9fZmxhZ3M7Ci0j
ZW5kaWYKLSNlbmRpZgotCXVuaW9uIHNjdHBfc29ja3N0b3JlIF9sX2FkZHI7CS8qIHJlbW90ZSBw
ZWVyIGFkZHIgKi8KLQlzdHJ1Y3Qgc2N0cF9pZmEgKl9zX2FkZHI7CS8qIG91ciBzZWxlY3RlZCBz
cmMgYWRkciAqLwotfTsKLQotc3RydWN0IGh0Y3AgewotCXVpbnQxNl90CWFscGhhOwkJLyogRml4
ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KLQl1aW50OF90CQliZXRhOyAgICAgICAgICAgLyogRml4
ZWQgcG9pbnQgYXJpdGgsIDw8IDcgKi8KLQl1aW50OF90CQltb2Rlc3dpdGNoOyAgICAgLyogRGVs
YXkgbW9kZXN3aXRjaCB1bnRpbCB3ZSBoYWQgYXQgbGVhc3Qgb25lIGNvbmdlc3Rpb24gZXZlbnQg
Ki8KLQl1aW50MzJfdAlsYXN0X2Nvbmc7CS8qIFRpbWUgc2luY2UgbGFzdCBjb25nZXN0aW9uIGV2
ZW50IGVuZCAqLwotCXVpbnQzMl90CXVuZG9fbGFzdF9jb25nOwotCXVpbnQxNl90CWJ5dGVzX2Fj
a2VkOwotCXVpbnQzMl90CWJ5dGVjb3VudDsKLQl1aW50MzJfdAltaW5SVFQ7Ci0JdWludDMyX3QJ
bWF4UlRUOwotCi0JdWludDMyX3QJdW5kb19tYXhSVFQ7Ci0JdWludDMyX3QJdW5kb19vbGRfbWF4
QjsKLQotCS8qIEJhbmR3aWR0aCBlc3RpbWF0aW9uICovCi0JdWludDMyX3QJbWluQjsKLQl1aW50
MzJfdAltYXhCOwotCXVpbnQzMl90CW9sZF9tYXhCOwotCXVpbnQzMl90CUJpOwotCXVpbnQzMl90
CWxhc3R0aW1lOwotfTsKLQotc3RydWN0IHJ0Y2NfY2MgewotCXN0cnVjdCB0aW1ldmFsIHRsczsg
ICAvKiBUaGUgdGltZSB3ZSBzdGFydGVkIHRoZSBzZW5kaW5nICAqLwotCXVpbnQ2NF90IGxidzsg
ICAgICAgICAvKiBPdXIgbGFzdCBlc3RpbWF0ZWQgYncgKi8KLQl1aW50NjRfdCBsYndfcnR0OyAg
ICAgLyogUlRUIGF0IGJ3IGVzdGltYXRlICovCi0JdWludDY0X3QgYndfYnl0ZXM7ICAgIC8qIFRo
ZSB0b3RhbCBieXRlcyBzaW5jZSB0aGlzIHNlbmRpbmcgYmVnYW4gKi8KLQl1aW50NjRfdCBid190
b3RfdGltZTsgLyogVGhlIHRvdGFsIHRpbWUgc2luY2Ugc2VuZGluZyBiZWdhbiAqLwotCXVpbnQ2
NF90IG5ld190b3RfdGltZTsgIC8qIHRlbXAgaG9sZGluZyB0aGUgbmV3IHZhbHVlICovCi0JdWlu
dDY0X3QgYndfYnl0ZXNfYXRfbGFzdF9ydHRjOyAvKiBXaGF0IGJ3X2J5dGVzIHdhcyBhdCBsYXN0
IHJ0dCBjYWxjICovCi0JdWludDMyX3QgY3duZF9hdF9id19zZXQ7IC8qIEN3bmQgYXQgbGFzdCBi
dyBzYXZlZCAtIGxidyAqLwotCXVpbnQzMl90IHZvbF9yZWR1Y2U7ICAvKiBjbnQgb2Ygdm9sdW50
YXJ5IHJlZHVjdGlvbnMgKi8KLQl1aW50MTZfdCBzdGVhZHlfc3RlcDsgLyogVGhlIG51bWJlciBy
ZXF1aXJlZCB0byBiZSBpbiBzdGVhZHkgc3RhdGUqLwotCXVpbnQxNl90IHN0ZXBfY250OyAgICAv
KiBUaGUgY3VycmVudCBudW1iZXIgKi8KLQl1aW50OF90ICByZXRfZnJvbV9lcTsgIC8qIFdoZW4g
YWxsIHRoaW5ncyBhcmUgZXF1YWwgd2hhdCBkbyBJIHJldHVybiAwLzEgLSAxIG5vIGNjIGFkdmFu
Y2UgKi8KLQl1aW50OF90ICB1c2VfZGNjY19lY247ICAvKiBGbGFnIHRvIGVuYWJsZSBEQ0NDIEVD
TiAqLwotCXVpbnQ4X3QgIHRsc19uZWVkc19zZXQ7IC8qIEZsYWcgdG8gaW5kaWNhdGUgd2UgbmVl
ZCB0byBzZXQgdGxzIDAgb3IgMSBtZWFucyBzZXQgYXQgc2VuZCAyIG5vdCAqLwotCXVpbnQ4X3Qg
IGxhc3Rfc3RlcF9zdGF0ZTsgLyogTGFzdCBzdGF0ZSBpZiBzdGVhZHkgc3RhdGUgc3RlcGRvd24g
aXMgb24gKi8KLQl1aW50OF90ICBydHRfc2V0X3RoaXNfc2FjazsgLyogRmxhZyBzYXlpbmcgdGhp
cyBzYWNrIGhhZCBSVFQgY2FsYyBvbiBpdCAqLwotCXVpbnQ4X3QgIGxhc3RfaW5zdF9pbmQ7IC8q
IExhc3Qgc2F2ZWQgaW5zdCBpbmRpY2F0aW9uICovCi19OwotCi0KLXN0cnVjdCBzY3RwX25ldHMg
ewotCVRBSUxRX0VOVFJZKHNjdHBfbmV0cykgc2N0cF9uZXh0OwkvKiBuZXh0IGxpbmsgKi8KLQot
CS8qCi0JICogVGhpbmdzIG9uIHRoZSB0b3AgaGFsZiBtYXkgYmUgYWJsZSB0byBiZSBzcGxpdCBp
bnRvIGEgY29tbW9uCi0JICogc3RydWN0dXJlIHNoYXJlZCBieSBhbGwuCi0JICovCi0Jc3RydWN0
IHNjdHBfdGltZXIgcG10dV90aW1lcjsKLQlzdHJ1Y3Qgc2N0cF90aW1lciBoYl90aW1lcjsKLQot
CS8qCi0JICogVGhlIGZvbGxvd2luZyB0d28gaW4gY29tYmluYXRpb24gZXF1YXRlIHRvIGEgcm91
dGUgZW50cnkgZm9yIHY2Ci0JICogb3IgdjQuCi0JICovCi0Jc3RydWN0IHNjdHBfbmV0X3JvdXRl
IHJvOwotCi0JLyogbXR1IGRpc2NvdmVyZWQgc28gZmFyICovCi0JdWludDMyX3QgbXR1OwotCXVp
bnQzMl90IHNzdGhyZXNoOwkvKiBub3Qgc3VyZSBhYm91dCB0aGlzIG9uZSBmb3Igc3BsaXQgKi8K
LQl1aW50MzJfdCBsYXN0X2N3cl90c247Ci0JdWludDMyX3QgY3dyX3dpbmRvd190c247Ci0JdWlu
dDMyX3QgZWNuX2NlX3BrdF9jbnQ7Ci0JdWludDMyX3QgbG9zdF9jbnQ7Ci0JLyogc21vb3RoZWQg
YXZlcmFnZSB0aGluZ3MgZm9yIFJUVCBhbmQgUlRPIGl0c2VsZiAqLwotCWludCBsYXN0c2E7Ci0J
aW50IGxhc3RzdjsKLQl1aW50NjRfdCBydHQ7IC8qIGxhc3QgbWVhc3VyZWQgcnR0IHZhbHVlIGlu
IHVzICovCi0JdW5zaWduZWQgaW50IFJUTzsKLQotCS8qIFRoaXMgaXMgdXNlZCBmb3IgU0hVVERP
V04vU0hVVERPV04tQUNLL1NFTkQgb3IgSU5JVCB0aW1lcnMgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1l
ciByeHRfdGltZXI7Ci0KLQkvKiBsYXN0IHRpbWUgaW4gc2Vjb25kcyBJIHNlbnQgdG8gaXQgKi8K
LQlzdHJ1Y3QgdGltZXZhbCBsYXN0X3NlbnRfdGltZTsKLQl1bmlvbiBjY19jb250cm9sX2RhdGEg
ewotCQlzdHJ1Y3QgaHRjcCBodGNwX2NhOyAJLyogSlJTIC0gc3RydWN0IHVzZWQgaW4gSFRDUCBh
bGdvcml0aG0gKi8KLQkJc3RydWN0IHJ0Y2NfY2MgcnRjYzsgICAgLyogcnRjYyBtb2R1bGUgY2Mg
c3R1ZmYgICovCi0JfSBjY19tb2Q7Ci0JaW50IHJlZl9jb3VudDsKLQotCS8qIENvbmdlc3Rpb24g
c3RhdHMgcGVyIGRlc3RpbmF0aW9uICovCi0JLyoKLQkgKiBmbGlnaHQgc2l6ZSB2YXJpYWJsZXMg
YW5kIHN1Y2gsIHNvcnJ5IFZlcm4sIEkgY291bGQgbm90IGF2b2lkCi0JICogdGhpcyBpZiBJIHdh
bnRlZCBwZXJmb3JtYW5jZSA6PgotCSAqLwotCXVpbnQzMl90IGZsaWdodF9zaXplOwotCXVpbnQz
Ml90IGN3bmQ7CQkvKiBhY3R1YWwgY3duZCAqLwotCXVpbnQzMl90IHByZXZfY3duZDsJLyogY3du
ZCBiZWZvcmUgYW55IHByb2Nlc3NpbmcgKi8KLQl1aW50MzJfdCBlY25fcHJldl9jd25kOwkvKiBF
Q04gcHJldiBjd25kIGF0IGZpcnN0IGVjbl9lY2hvIHNlZW4gaW4gbmV3IHdpbmRvdyAqLwotCXVp
bnQzMl90IHBhcnRpYWxfYnl0ZXNfYWNrZWQ7CS8qIGluIENBIHRyYWNrcyB3aGVuIHRvIGluY3Ig
YSBNVFUgKi8KLQkvKiB0cmFja2luZyB2YXJpYWJsZXMgdG8gYXZvaWQgdGhlIGFsb2MvZnJlZSBp
biBzYWNrIHByb2Nlc3NpbmcgKi8KLQl1bnNpZ25lZCBpbnQgbmV0X2FjazsKLQl1bnNpZ25lZCBp
bnQgbmV0X2FjazI7Ci0KLQkvKgotCSAqIEpSUyAtIDUvOC8wNyAtIFZhcmlhYmxlIHRvIHRyYWNr
IGxhc3QgdGltZQotCSAqICBhIGRlc3RpbmF0aW9uIHdhcyBhY3RpdmUgZm9yIENNVCBQRgotCSAq
LwotCXVpbnQzMl90IGxhc3RfYWN0aXZlOwotCi0JLyoKLQkgKiBDTVQgdmFyaWFibGVzIChpeWVu
Z2FyQGNpcy51ZGVsLmVkdSkKLQkgKi8KLQl1aW50MzJfdCB0aGlzX3NhY2tfaGlnaGVzdF9uZXdh
Y2s7CS8qIHRyYWNrcyBoaWdoZXN0IFRTTiBuZXdseQotCQkJCQkJICogYWNrZWQgZm9yIGEgZ2l2
ZW4gZGVzdCBpbgotCQkJCQkJICogdGhlIGN1cnJlbnQgU0FDSy4gVXNlZCBpbgotCQkJCQkJICog
U0ZSIGFuZCBIVE5BIGFsZ29zICovCi0JdWludDMyX3QgcHNldWRvX2N1bWFjazsJLyogQ01UIENV
QyBhbGdvcml0aG0uIE1haW50YWlucyBuZXh0IGV4cGVjdGVkCi0JCQkJICogcHNldWRvLWN1bWFj
ayBmb3IgdGhpcyBkZXN0aW5hdGlvbiAqLwotCXVpbnQzMl90IHJ0eF9wc2V1ZG9fY3VtYWNrOwkv
KiBDTVQgQ1VDIGFsZ29yaXRobS4gTWFpbnRhaW5zIG5leHQKLQkJCQkJICogZXhwZWN0ZWQgcHNl
dWRvLWN1bWFjayBmb3IgdGhpcwotCQkJCQkgKiBkZXN0aW5hdGlvbiAqLwotCi0JLyogQ01UIGZh
c3QgcmVjb3ZlcnkgdmFyaWFibGVzICovCi0JdWludDMyX3QgZmFzdF9yZWNvdmVyeV90c247Ci0J
dWludDMyX3QgaGVhcnRiZWF0X3JhbmRvbTE7Ci0JdWludDMyX3QgaGVhcnRiZWF0X3JhbmRvbTI7
Ci0jaWZkZWYgSU5FVDYKLQl1aW50MzJfdCBmbG93bGFiZWw7Ci0jZW5kaWYKLQl1aW50OF90IGRz
Y3A7Ci0KLQlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOyAgICAgIC8qIHRpbWUgd2hlbiB0aGlz
IG5ldCB3YXMgY3JlYXRlZCAqLwotCXVpbnQzMl90IG1hcmtlZF9yZXRyYW5zOyAgICAgICAgLyog
bnVtYmVyIG9yIERBVEEgY2h1bmtzIG1hcmtlZCBmb3IKLQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVyIGJhc2VkIHJldHJhbnNtaXNzaW9ucyAqLwotCXVpbnQzMl90IG1h
cmtlZF9mYXN0cmV0cmFuczsKLQl1aW50MzJfdCBoZWFydF9iZWF0X2RlbGF5OyAgICAgIC8qIEhl
YXJ0IEJlYXQgZGVsYXkgaW4gbXMgKi8KLQotCS8qIGlmIHRoaXMgZ3V5IGlzIG9rIG9yIG5vdCAu
Li4gc3RhdHVzICovCi0JdWludDE2X3QgZGVzdF9zdGF0ZTsKLQkvKiBudW1iZXIgb2YgdGltZW91
dHMgdG8gY29uc2lkZXIgdGhlIGRlc3RpbmF0aW9uIHVucmVhY2hhYmxlICovCi0JdWludDE2X3Qg
ZmFpbHVyZV90aHJlc2hvbGQ7Ci0JLyogbnVtYmVyIG9mIHRpbWVvdXRzIHRvIGNvbnNpZGVyIHRo
ZSBkZXN0aW5hdGlvbiBwb3RlbnRpYWxseSBmYWlsZWQgKi8KLQl1aW50MTZfdCBwZl90aHJlc2hv
bGQ7Ci0JLyogZXJyb3Igc3RhdHMgb24gdGhlIGRlc3RpbmF0aW9uICovCi0JdWludDE2X3QgZXJy
b3JfY291bnQ7Ci0JLyogVURQIHBvcnQgbnVtYmVyIGluIGNhc2Ugb2YgVURQIHR1bm5lbGluZyAq
LwotCXVpbnQxNl90IHBvcnQ7Ci0KLQl1aW50OF90IGZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnk7
Ci0JdWludDhfdCB3aWxsX2V4aXRfZmFzdF9yZWNvdmVyeTsKLQkvKiBGbGFncyB0aGF0IHByb2Jh
Ymx5IGNhbiBiZSBjb21iaW5lZCBpbnRvIGRlc3Rfc3RhdGUgKi8KLQl1aW50OF90IGZhc3RfcmV0
cmFuX2lwOwkvKiBmYXN0IHJldHJhbnNtaXQgaW4gcHJvZ3Jlc3MgKi8KLQl1aW50OF90IGhiX3Jl
c3BvbmRlZDsKLQl1aW50OF90IHNhd19uZXdhY2s7CS8qIENNVCdzIFNGUiBhbGdvcml0aG0gZmxh
ZyAqLwotCXVpbnQ4X3Qgc3JjX2FkZHJfc2VsZWN0ZWQ7CS8qIGlmIHdlIHNwbGl0IHdlIG1vdmUg
Ki8KLQl1aW50OF90IGluZHhfb2ZfZWxpZ2libGVfbmV4dF90b191c2U7Ci0JdWludDhfdCBhZGRy
X2lzX2xvY2FsOwkvKiBpdHMgYSBsb2NhbCBhZGRyZXNzIChpZiBrbm93bikgY291bGQgbW92ZQot
CQkJCSAqIGluIHNwbGl0ICovCi0KLQkvKgotCSAqIENNVCB2YXJpYWJsZXMgKGl5ZW5nYXJAY2lz
LnVkZWwuZWR1KQotCSAqLwotCXVpbnQ4X3QgZmluZF9wc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VD
IGFsZ29yaXRobS4gRmxhZyB1c2VkIHRvCi0JCQkJCSAqIGZpbmQgYSBuZXcgcHNldWRvY3VtYWNr
LiBUaGlzIGZsYWcKLQkJCQkJICogaXMgc2V0IGFmdGVyIGEgbmV3IHBzZXVkby1jdW1hY2sKLQkJ
CQkJICogaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGluZGljYXRlcwotCQkJCQkgKiB0aGF0IHRoZSBz
ZW5kZXIgc2hvdWxkIGZpbmQgdGhlCi0JCQkJCSAqIG5leHQgcHNldWRvLWN1bWFjayBleHBlY3Rl
ZCBmb3IKLQkJCQkJICogdGhpcyBkZXN0aW5hdGlvbiAqLwotCXVpbnQ4X3QgZmluZF9ydHhfcHNl
dWRvX2N1bWFjazsJLyogQ01UIENVQ3YyIGFsZ29yaXRobS4gRmxhZyB1c2VkIHRvCi0JCQkJCSAq
IGZpbmQgYSBuZXcgcnR4LXBzZXVkb2N1bWFjay4gVGhpcwotCQkJCQkgKiBmbGFnIGlzIHNldCBh
ZnRlciBhIG5ldwotCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNlaXZlZAot
CQkJCQkgKiBhbmQgaW5kaWNhdGVzIHRoYXQgdGhlIHNlbmRlcgotCQkJCQkgKiBzaG91bGQgZmlu
ZCB0aGUgbmV4dAotCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBleHBlY3RlZCBmb3IgdGhpcwot
CQkJCQkgKiBkZXN0aW5hdGlvbiAqLwotCXVpbnQ4X3QgbmV3X3BzZXVkb19jdW1hY2s7CS8qIENN
VCBDVUMgYWxnb3JpdGhtLiBGbGFnIHVzZWQgdG8KLQkJCQkJICogaW5kaWNhdGUgaWYgYSBuZXcg
cHNldWRvLWN1bWFjayBvcgotCQkJCQkgKiBydHgtcHNldWRvLWN1bWFjayBoYXMgYmVlbiByZWNl
aXZlZCAqLwotCXVpbnQ4X3Qgd2luZG93X3Byb2JlOwkJLyogRG9pbmcgYSB3aW5kb3cgcHJvYmU/
ICovCi0JdWludDhfdCBSVE9fbWVhc3VyZWQ7CQkvKiBIYXZlIHdlIGRvbmUgdGhlIGZpcnN0IG1l
YXN1cmUgKi8KLQl1aW50OF90IGxhc3RfaHNfdXNlZDsJLyogaW5kZXggaW50byB0aGUgbGFzdCBI
UyB0YWJsZSBlbnRyeSB3ZSB1c2VkICovCi0JdWludDhfdCBsYW5fdHlwZTsKLQl1aW50OF90IHJ0
b19uZWVkZWQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQl1aW50MzJfdCBmbG93aWQ7Ci0J
dWludDhfdCBmbG93dHlwZTsKLSNlbmRpZgotfTsKLQotCi1zdHJ1Y3Qgc2N0cF9kYXRhX2NodW5r
cmVjIHsKLQl1aW50MzJfdCB0c247CQkvKiB0aGUgVFNOIG9mIHRoaXMgdHJhbnNtaXQgKi8KLQl1
aW50MzJfdCBtaWQ7CQkvKiB0aGUgbWVzc2FnZSBpZGVudGlmaWVyIG9mIHRoaXMgdHJhbnNtaXQg
Ki8KLQl1aW50MTZfdCBzaWQ7CQkvKiB0aGUgc3RyZWFtIG51bWJlciBvZiB0aGlzIGd1eSAqLwot
CXVpbnQzMl90IHBwaWQ7Ci0JdWludDMyX3QgY29udGV4dDsJLyogZnJvbSBzZW5kICovCi0JdWlu
dDMyX3QgY3duZF9hdF9zZW5kOwotCS8qCi0JICogcGFydCBvZiB0aGUgSGlnaGVzdCBzYWNrZWQg
YWxnb3JpdGhtIHRvIGJlIGFibGUgdG8gc3Ryb2tlIGNvdW50cwotCSAqIG9uIG9uZXMgdGhhdCBh
cmUgRlInZC4KLQkgKi8KLQl1aW50MzJfdCBmYXN0X3JldHJhbl90c247CS8qIHNlbmRpbmdfc2Vx
IGF0IHRoZSB0aW1lIG9mIEZSICovCi0Jc3RydWN0IHRpbWV2YWwgdGltZXRvZHJvcDsJLyogdGlt
ZSB3ZSBkcm9wIGl0IGZyb20gcXVldWUgKi8KLQl1aW50MzJfdCBmc247CQkJLyogRnJhZ21lbnQg
U2VxdWVuY2UgTnVtYmVyICovCi0JdWludDhfdCBkb2luZ19mYXN0X3JldHJhbnNtaXQ7Ci0JdWlu
dDhfdCByY3ZfZmxhZ3M7CS8qIGZsYWdzIHB1bGxlZCBmcm9tIGRhdGEgY2h1bmsgb24gaW5ib3Vu
ZCBmb3IKLQkJCQkgKiBvdXRib3VuZCBob2xkcyBzZW5kaW5nIGZsYWdzIGZvciBQUi1TQ1RQLgot
CQkJCSAqLwotCXVpbnQ4X3Qgc3RhdGVfZmxhZ3M7Ci0JdWludDhfdCBjaHVua193YXNfcmV2b2tl
ZDsKLQl1aW50OF90IGZ3ZF90c25fY250OwotfTsKLQotVEFJTFFfSEVBRChzY3RwY2h1bmtfbGlz
dGhlYWQsIHNjdHBfdG1pdF9jaHVuayk7Ci0KLS8qIFRoZSBsb3dlciBieXRlIGlzIHVzZWQgdG8g
ZW51bWVyYXRlIFBSX1NDVFAgcG9saWNpZXMgKi8KLSNkZWZpbmUgQ0hVTktfRkxBR1NfUFJfU0NU
UF9UVEwJICAgICAgICBTQ1RQX1BSX1NDVFBfVFRMCi0jZGVmaW5lIENIVU5LX0ZMQUdTX1BSX1ND
VFBfQlVGCSAgICAgICAgU0NUUF9QUl9TQ1RQX0JVRgotI2RlZmluZSBDSFVOS19GTEFHU19QUl9T
Q1RQX1JUWCAgICAgICAgIFNDVFBfUFJfU0NUUF9SVFgKLQotLyogVGhlIHVwcGVyIGJ5dGUgaXMg
dXNlZCBhcyBhIGJpdCBtYXNrICovCi0jZGVmaW5lIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LCSAg
ICAgICAgMHgwMTAwCi0KLXN0cnVjdCBjaGtfaWQgewotCXVpbnQ4X3QgaWQ7Ci0JdWludDhfdCBj
YW5fdGFrZV9kYXRhOwotfTsKLQotCi1zdHJ1Y3Qgc2N0cF90bWl0X2NodW5rIHsKLQl1bmlvbiB7
Ci0JCXN0cnVjdCBzY3RwX2RhdGFfY2h1bmtyZWMgZGF0YTsKLQkJc3RydWN0IGNoa19pZCBjaHVu
a19pZDsKLQl9ICAgICByZWM7Ci0Jc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CS8qIGJw
IHRvIGFzb2MgdGhpcyBiZWxvbmdzIHRvICovCi0Jc3RydWN0IHRpbWV2YWwgc2VudF9yY3ZfdGlt
ZTsJLyogZmlsbGVkIGluIGlmIFJUVCBiZWluZyBjYWxjdWxhdGVkICovCi0Jc3RydWN0IG1idWYg
KmRhdGE7CS8qIHBvaW50ZXIgdG8gbWJ1ZiBjaGFpbiBvZiBkYXRhICovCi0Jc3RydWN0IG1idWYg
Kmxhc3RfbWJ1ZjsJLyogcG9pbnRlciB0byBsYXN0IG1idWYgaW4gY2hhaW4gKi8KLQlzdHJ1Y3Qg
c2N0cF9uZXRzICp3aG9UbzsKLQlUQUlMUV9FTlRSWShzY3RwX3RtaXRfY2h1bmspIHNjdHBfbmV4
dDsJLyogbmV4dCBsaW5rICovCi0JaW50MzJfdCBzZW50OwkJLyogdGhlIHNlbmQgc3RhdHVzICov
Ci0JdWludDE2X3Qgc25kX2NvdW50OwkvKiBudW1iZXIgb2YgdGltZXMgSSBzZW50ICovCi0JdWlu
dDE2X3QgZmxhZ3M7CQkvKiBmbGFncywgc3VjaCBhcyBGUkFHTUVOVF9PSyAqLwotCXVpbnQxNl90
IHNlbmRfc2l6ZTsKLQl1aW50MTZfdCBib29rX3NpemU7Ci0JdWludDE2X3QgbWJjbnQ7Ci0JdWlu
dDE2X3QgYXV0aF9rZXlpZDsKLQl1aW50OF90IGhvbGRzX2tleV9yZWY7CS8qIGZsYWcgaWYgYXV0
aCBrZXlpZCByZWZjb3VudCBpcyBoZWxkICovCi0JdWludDhfdCBwYWRfaW5wbGFjZTsKLQl1aW50
OF90IGRvX3J0dDsKLQl1aW50OF90IGJvb2tfc2l6ZV9zY2FsZTsKLQl1aW50OF90IG5vX2ZyX2Fs
bG93ZWQ7Ci0JdWludDhfdCBjb3B5X2J5X3JlZjsKLQl1aW50OF90IHdpbmRvd19wcm9iZTsKLX07
Ci0KLXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkIHsJLyogc2luZm8gc3RydWN0dXJlIFBsdXNl
IG1vcmUgKi8KLQl1aW50MTZfdCBzaW5mb19zdHJlYW07CS8qIG9mZiB0aGUgd2lyZSAqLwotCXVp
bnQxNl90IHNpbmZvX2ZsYWdzOwkvKiBTQ1RQX1VOT1JERVJFRCBmcm9tIHdpcmUgdXNlIFNDVFBf
RU9GIGZvcgotCQkJCSAqIEVPUiAqLwotCXVpbnQzMl90IHNpbmZvX3BwaWQ7CS8qIG9mZiB0aGUg
d2lyZSAqLwotCXVpbnQzMl90IHNpbmZvX2NvbnRleHQ7CS8qIHBpY2sgdGhpcyB1cCBmcm9tIGFz
c29jIGRlZiBjb250ZXh0PyAqLwotCXVpbnQzMl90IHNpbmZvX3RpbWV0b2xpdmU7CS8qIG5vdCB1
c2VkIGJ5IGtlcm5lbCAqLwotCXVpbnQzMl90IHNpbmZvX3RzbjsJLyogVXNlIHRoaXMgaW4gcmVh
c3NlbWJseSBhcyBmaXJzdCBUU04gKi8KLQl1aW50MzJfdCBzaW5mb19jdW10c247CS8qIFVzZSB0
aGlzIGluIHJlYXNzZW1ibHkgYXMgbGFzdCBUU04gKi8KLQlzY3RwX2Fzc29jX3Qgc2luZm9fYXNz
b2NfaWQ7CS8qIG91ciBhc3NvYyBpZCAqLwotCS8qIE5vbiBzaW5mbyBzdHVmZiAqLwotCXVpbnQz
Ml90IG1pZDsJCS8qIEZyYWdtZW50IEluZGV4ICovCi0JdWludDMyX3QgbGVuZ3RoOwkvKiBsZW5n
dGggb2YgZGF0YSAqLwotCXVpbnQzMl90IGhlbGRfbGVuZ3RoOwkvKiBsZW5ndGggaGVsZCBpbiBz
YiAqLwotCXVpbnQzMl90IHRvcF9mc247CS8qIEhpZ2hlc3QgRlNOIGluIHF1ZXVlICovCi0JdWlu
dDMyX3QgZnNuX2luY2x1ZGVkOyAgLyogSGlnaGVzdCBGU04gaW4gKmRhdGEgcG9ydGlvbiAqLwot
CXN0cnVjdCBzY3RwX25ldHMgKndob0Zyb207CS8qIHdoZXJlIGl0IGNhbWUgZnJvbSAqLwotCXN0
cnVjdCBtYnVmICpkYXRhOwkvKiBmcm9udCBvZiB0aGUgbWJ1ZiBjaGFpbiBvZiBkYXRhIHdpdGgK
LQkJCQkgKiBQS1RfSERSICovCi0Jc3RydWN0IG1idWYgKnRhaWxfbWJ1ZjsJLyogdXNlZCBmb3Ig
bXVsdGktcGFydCBkYXRhICovCi0Jc3RydWN0IG1idWYgKmF1eF9kYXRhOyAgLyogdXNlZCB0byBo
b2xkL2NhY2hlICBjb250cm9sIGlmIG8vcyBkb2VzIG5vdCB0YWtlIGl0IGZyb20gdXMgKi8KLQlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CS8qIGFzc29jLCB1c2VkIGZvciB3aW5kb3cgdXBkYXRlICov
Ci0JVEFJTFFfRU5UUlkoc2N0cF9xdWV1ZWRfdG9fcmVhZCkgbmV4dDsKLQlUQUlMUV9FTlRSWShz
Y3RwX3F1ZXVlZF90b19yZWFkKSBuZXh0X2luc3RybTsKLQlzdHJ1Y3Qgc2N0cGNodW5rX2xpc3Ro
ZWFkIHJlYXNtOwotCXVpbnQxNl90IHBvcnRfZnJvbTsKLQl1aW50MTZfdCBzcGVjX2ZsYWdzOwkv
KiBGbGFncyB0byBob2xkIHRoZSBub3RpZmljYXRpb24gZmllbGQgKi8KLQl1aW50OF90ICBkb19u
b3RfcmVmX3N0Y2I7Ci0JdWludDhfdCAgZW5kX2FkZGVkOwotCXVpbnQ4X3QgIHBkYXBpX2Fib3J0
ZWQ7Ci0JdWludDhfdCAgcGRhcGlfc3RhcnRlZDsKLQl1aW50OF90ICBzb21lX3Rha2VuOwotCXVp
bnQ4X3QgIGxhc3RfZnJhZ19zZWVuOwotCXVpbnQ4X3QgIGZpcnN0X2ZyYWdfc2VlbjsKLQl1aW50
OF90ICBvbl9yZWFkX3E7Ci0JdWludDhfdCAgb25fc3RybV9xOwotfTsKLQotI2RlZmluZSBTQ1RQ
X09OX09SREVSRUQgMQotI2RlZmluZSBTQ1RQX09OX1VOT1JERVJFRCAyCi0KLS8qIFRoaXMgZGF0
YSBzdHJ1Y3R1cmUgd2lsbCBiZSBvbiB0aGUgb3V0Ym91bmQKLSAqIHN0cmVhbSBxdWV1ZXMuIERh
dGEgd2lsbCBiZSBwdWxsZWQgb2ZmIGZyb20KLSAqIHRoZSBmcm9udCBvZiB0aGUgbWJ1ZiBkYXRh
IGFuZCBjaHVuay1pZmllZAotICogYnkgdGhlIG91dHB1dCByb3V0aW5lcy4gV2Ugd2lsbCBjdXN0
b20KLSAqIGZpdCBldmVyeSBjaHVuayB3ZSBwdWxsIHRvIHRoZSBzZW5kL3NlbnQKLSAqIHF1ZXVl
IHRvIG1ha2UgdXAgdGhlIG5leHQgZnVsbCBwYWNrZXQKLSAqIGlmIHdlIGNhbi4gQW4gZW50cnkg
Y2Fubm90IGJlIHJlbW92ZWQKLSAqIGZyb20gdGhlIHN0cmVhbV9vdXQgcXVldWUgdW50aWwKLSAq
IHRoZSBtc2dfaXNfY29tcGxldGUgZmxhZyBpcyBzZXQuIFRoaXMKLSAqIG1lYW5zIGF0IHRpbWVz
IGRhdGEvdGFpbF9tYnVmIE1JR0hUCi0gKiBiZSBOVUxMLi4gSWYgdGhhdCBvY2N1cnMgaXQgaGFw
cGVucwotICogZm9yIG9uZSBvZiB0d28gcmVhc29ucy4gRWl0aGVyIHRoZSB1c2VyCi0gKiBpcyBi
bG9ja2VkIG9uIGEgc2VuZCgpIGNhbGwgYW5kIGhhcyBub3QKLSAqIGF3b2tlbiB0byBjb3B5IG1v
cmUgZGF0YSBkb3duLi4uIE9SCi0gKiB0aGUgdXNlciBpcyBpbiB0aGUgZXhwbGljdCBNU0dfRU9S
IG1vZGUKLSAqIGFuZCB3cm90ZSBzb21lIGRhdGEsIGJ1dCBoYXMgbm90IGNvbXBsZXRlZAotICog
c2VuZGluZy4KLSAqLwotc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgewotCXN0cnVj
dCBtYnVmICpkYXRhOwotCXN0cnVjdCBtYnVmICp0YWlsX21idWY7Ci0Jc3RydWN0IHRpbWV2YWwg
dHM7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCVRBSUxRX0VOVFJZIChzY3RwX3N0cmVhbV9x
dWV1ZV9wZW5kaW5nKSBuZXh0OwotCVRBSUxRX0VOVFJZIChzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nKSBzc19uZXh0OwotCXVpbnQzMl90IGZzbjsKLQl1aW50MzJfdCBsZW5ndGg7Ci0JdWludDMy
X3QgdGltZXRvbGl2ZTsKLQl1aW50MzJfdCBwcGlkOwotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWlu
dDE2X3Qgc2luZm9fZmxhZ3M7Ci0JdWludDE2X3Qgc2lkOwotCXVpbnQxNl90IGFjdF9mbGFnczsK
LQl1aW50MTZfdCBhdXRoX2tleWlkOwotCXVpbnQ4X3QgIGhvbGRzX2tleV9yZWY7Ci0JdWludDhf
dCAgbXNnX2lzX2NvbXBsZXRlOwotCXVpbnQ4X3QgIHNvbWVfdGFrZW47Ci0JdWludDhfdCAgc2Vu
ZGVyX2FsbF9kb25lOwotCXVpbnQ4X3QgIHB1dF9sYXN0X291dDsKLQl1aW50OF90ICBkaXNjYXJk
X3Jlc3Q7Ci19OwotCi0vKgotICogdGhpcyBzdHJ1Y3QgY29udGFpbnMgaW5mbyB0aGF0IGlzIHVz
ZWQgdG8gdHJhY2sgaW5ib3VuZCBzdHJlYW0gZGF0YSBhbmQKLSAqIGhlbHAgd2l0aCBvcmRlcmlu
Zy4KLSAqLwotVEFJTFFfSEVBRChzY3Rwd2hlZWx1bnJlbF9saXN0aGVhZCwgc2N0cF9zdHJlYW1f
aW4pOwotc3RydWN0IHNjdHBfc3RyZWFtX2luIHsKLQlzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCBpbnF1
ZXVlOwotCXN0cnVjdCBzY3RwX3JlYWRoZWFkIHVub19pbnF1ZXVlOwotCXVpbnQzMl90IGxhc3Rf
bWlkX2RlbGl2ZXJlZDsJLyogdXNlZCBmb3IgcmUtb3JkZXIgKi8KLQl1aW50MTZfdCBzaWQ7Ci0J
dWludDhfdCAgZGVsaXZlcnlfc3RhcnRlZDsKLQl1aW50OF90ICBwZF9hcGlfc3RhcnRlZDsKLX07
Ci0KLVRBSUxRX0hFQUQoc2N0cHdoZWVsX2xpc3RoZWFkLCBzY3RwX3N0cmVhbV9vdXQpOwotVEFJ
TFFfSEVBRChzY3RwbGlzdF9saXN0aGVhZCwgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyk7Ci0K
LQotLyogUm91bmQtcm9iaW4gc2NoZWR1bGVycyAqLwotc3RydWN0IHNzX3JyIHsKLQkvKiBuZXh0
IGxpbmsgaW4gd2hlZWwgKi8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5leHRfc3Bv
a2U7Ci19OwotCi0vKiBQcmlvcml0eSBzY2hlZHVsZXIgKi8KLXN0cnVjdCBzc19wcmlvIHsKLQkv
KiBuZXh0IGxpbmsgaW4gd2hlZWwgKi8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5l
eHRfc3Bva2U7Ci0JLyogcHJpb3JpdHkgaWQgKi8KLQl1aW50MTZfdCBwcmlvcml0eTsKLX07Ci0K
LS8qIEZhaXIgQmFuZHdpZHRoIHNjaGVkdWxlciAqLwotc3RydWN0IHNzX2ZiIHsKLQkvKiBuZXh0
IGxpbmsgaW4gd2hlZWwgKi8KLQlUQUlMUV9FTlRSWShzY3RwX3N0cmVhbV9vdXQpIG5leHRfc3Bv
a2U7Ci0JLyogc3RvcmVzIG1lc3NhZ2Ugc2l6ZSAqLwotCWludDMyX3Qgcm91bmRzOwotfTsKLQot
LyoKLSAqIFRoaXMgdW5pb24gaG9sZHMgYWxsIGRhdGEgbmVjZXNzYXJ5IGZvcgotICogZGlmZmVy
ZW50IHN0cmVhbSBzY2hlZHVsZXJzLgotICovCi1zdHJ1Y3Qgc2NoZWR1bGluZ19kYXRhIHsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpsb2NrZWRfb25fc2VuZGluZzsKLQkvKiBjaXJjdWxhciBs
b29raW5nIGZvciBvdXRwdXQgc2VsZWN0aW9uICovCi0Jc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
bGFzdF9vdXRfc3RyZWFtOwotCXVuaW9uIHsKLQkJc3RydWN0IHNjdHB3aGVlbF9saXN0aGVhZCB3
aGVlbDsKLQkJc3RydWN0IHNjdHBsaXN0X2xpc3RoZWFkIGxpc3Q7Ci0JfSBvdXQ7Ci19OwotCi0v
KgotICogVGhpcyB1bmlvbiBob2xkcyBhbGwgcGFyYW1ldGVycyBwZXIgc3RyZWFtCi0gKiBuZWNl
c3NhcnkgZm9yIGRpZmZlcmVudCBzdHJlYW0gc2NoZWR1bGVycy4KLSAqLwotdW5pb24gc2NoZWR1
bGluZ19wYXJhbWV0ZXJzIHsKLQlzdHJ1Y3Qgc3NfcnIgcnI7Ci0Jc3RydWN0IHNzX3ByaW8gcHJp
bzsKLQlzdHJ1Y3Qgc3NfZmIgZmI7Ci19OwotCi0vKiBTdGF0ZXMgZm9yIG91dGdvaW5nIHN0cmVh
bXMgKi8KLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0xPU0VEICAgICAgICAgICAweDAwCi0jZGVmaW5l
IFNDVFBfU1RSRUFNX09QRU5JTkcgICAgICAgICAgMHgwMQotI2RlZmluZSBTQ1RQX1NUUkVBTV9P
UEVOICAgICAgICAgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORyAg
ICAweDAzCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0lOX0ZMSUdIVCAgMHgwNAotCi0jZGVm
aW5lIFNDVFBfTUFYX1NUUkVBTVNfQVRfT05DRV9SRVNFVCAyMDAKLQotLyogVGhpcyBzdHJ1Y3Qg
aXMgdXNlZCB0byB0cmFjayB0aGUgdHJhZmZpYyBvbiBvdXRib3VuZCBzdHJlYW1zICovCi1zdHJ1
Y3Qgc2N0cF9zdHJlYW1fb3V0IHsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1oZWFkIG91dHF1ZXVlOwot
CXVuaW9uIHNjaGVkdWxpbmdfcGFyYW1ldGVycyBzc19wYXJhbXM7Ci0JdWludDMyX3QgY2h1bmtz
X29uX3F1ZXVlczsgICAgICAvKiBzZW5kIHF1ZXVlIGFuZCBzZW50IHF1ZXVlICovCi0jaWYgZGVm
aW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKLQl1aW50MzJfdCBhYmFuZG9uZWRfdW5zZW50
W1NDVFBfUFJfU0NUUF9NQVggKyAxXTsKLQl1aW50MzJfdCBhYmFuZG9uZWRfc2VudFtTQ1RQX1BS
X1NDVFBfTUFYICsgMV07Ci0jZWxzZQotCS8qIE9ubHkgdGhlIGFnZ3JlZ2F0aW9uICovCi0JdWlu
dDMyX3QgYWJhbmRvbmVkX3Vuc2VudFsxXTsKLQl1aW50MzJfdCBhYmFuZG9uZWRfc2VudFsxXTsK
LSNlbmRpZgotCS8qIEZvciBhc3NvY2lhdGlvbnMgdXNpbmcgREFUQSBjaHVua3MsIHRoZSBsb3dl
ciAxNi1iaXQgb2YKLQkgKiBuZXh0X21pZF9vcmRlcmVkIGFyZSB1c2VkIGFzIHRoZSBuZXh0IFNT
Ti4KLQkgKi8KLQl1aW50MzJfdCBuZXh0X21pZF9vcmRlcmVkOwotCXVpbnQzMl90IG5leHRfbWlk
X3Vub3JkZXJlZDsKLQl1aW50MTZfdCBzaWQ7Ci0JdWludDhfdCBsYXN0X21zZ19pbmNvbXBsZXRl
OwotCXVpbnQ4X3Qgc3RhdGU7Ci19OwotCi0vKiB1c2VkIHRvIGtlZXAgdHJhY2sgb2YgdGhlIGFk
ZHJlc3NlcyB5ZXQgdG8gdHJ5IHRvIGFkZC9kZWxldGUgKi8KLVRBSUxRX0hFQUQoc2N0cF9hc2Nv
bmZfYWRkcmhlYWQsIHNjdHBfYXNjb25mX2FkZHIpOwotc3RydWN0IHNjdHBfYXNjb25mX2FkZHIg
ewotCVRBSUxRX0VOVFJZKHNjdHBfYXNjb25mX2FkZHIpIG5leHQ7Ci0Jc3RydWN0IHNjdHBfYXNj
b25mX2FkZHJfcGFyYW0gYXA7Ci0Jc3RydWN0IHNjdHBfaWZhICppZmE7CS8qIHNhdmUgdGhlIGlm
YSBmb3IgYWRkL2RlbCBpcCAqLwotCXVpbnQ4X3Qgc2VudDsJCS8qIGhhcyB0aGlzIGJlZW4gc2Vu
dCB5ZXQ/ICovCi0JdWludDhfdCBzcGVjaWFsX2RlbDsJLyogbm90IHRvIGJlIHVzZWQgaW4gbG9v
a3VwICovCi19OwotCi1zdHJ1Y3Qgc2N0cF9zY29waW5nIHsKLQl1aW50OF90IGlwdjRfYWRkcl9s
ZWdhbDsKLQl1aW50OF90IGlwdjZfYWRkcl9sZWdhbDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCi0JdWludDhfdCBjb25uX2FkZHJfbGVnYWw7Ci0jZW5kaWYKLQl1aW50OF90IGxvb3BiYWNr
X3Njb3BlOwotCXVpbnQ4X3QgaXB2NF9sb2NhbF9zY29wZTsKLQl1aW50OF90IGxvY2FsX3Njb3Bl
OwotCXVpbnQ4X3Qgc2l0ZV9zY29wZTsKLX07Ci0KLSNkZWZpbmUgU0NUUF9UU05fTE9HX1NJWkUg
NDAKLQotc3RydWN0IHNjdHBfdHNuX2xvZyB7Ci0Jdm9pZCAgICAgKnN0Y2I7Ci0JdWludDMyX3Qg
dHNuOwotCXVpbnQzMl90IHNlcTsKLQl1aW50MTZfdCBzdHJtOwotCXVpbnQxNl90IHN6OwotCXVp
bnQxNl90IGZsZ3M7Ci0JdWludDE2X3QgaW5fcG9zOwotCXVpbnQxNl90IGluX291dDsKLQl1aW50
MTZfdCByZXN2OwotfTsKLQotI2RlZmluZSBTQ1RQX0ZTX1NQRUNfTE9HX1NJWkUgMjAwCi1zdHJ1
Y3Qgc2N0cF9mc19zcGVjX2xvZyB7Ci0JdWludDMyX3Qgc2VudDsKLQl1aW50MzJfdCB0b3RhbF9m
bGlnaHQ7Ci0JdWludDMyX3QgdHNuOwotCXVpbnQxNl90IGJvb2s7Ci0JdWludDhfdCBpbmNyOwot
CXVpbnQ4X3QgZGVjcjsKLX07Ci0KLS8qIFRoaXMgc3RydWN0IGlzIGhlcmUgdG8gY3V0IG91dCB0
aGUgY29tcGF0aWFiaWx0eQotICogcGFkIHRoYXQgYnVsa3MgdXAgYm90aCB0aGUgaW5wIGFuZCBz
dGNiLiBUaGUgbm9uCi0gKiBwYWQgcG9ydGlvbiBNVVNUIHN0YXkgaW4gY29tcGxldGUgc3luYyB3
aXRoCi0gKiBzY3RwX3NuZHJjdmluZm8uLi4gaS5lLiBpZiBzaW5mb194eHh4IGlzIGFkZGVkCi0g
KiB0aGlzIG11c3QgYmUgZG9uZSBoZXJlIHRvby4KLSAqLwotc3RydWN0IHNjdHBfbm9ucGFkX3Nu
ZHJjdmluZm8gewotCXVpbnQxNl90IHNpbmZvX3N0cmVhbTsKLQl1aW50MTZfdCBzaW5mb19zc247
Ci0JdWludDE2X3Qgc2luZm9fZmxhZ3M7Ci0JdWludDMyX3Qgc2luZm9fcHBpZDsKLQl1aW50MzJf
dCBzaW5mb19jb250ZXh0OwotCXVpbnQzMl90IHNpbmZvX3RpbWV0b2xpdmU7Ci0JdWludDMyX3Qg
c2luZm9fdHNuOwotCXVpbnQzMl90IHNpbmZvX2N1bXRzbjsKLQlzY3RwX2Fzc29jX3Qgc2luZm9f
YXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2luZm9fa2V5bnVtYmVyOwotCXVpbnQxNl90IHNpbmZvX2tl
eW51bWJlcl92YWxpZDsKLX07Ci0KLS8qCi0gKiBKUlMgLSBTdHJ1Y3R1cmUgdG8gaG9sZCBmdW5j
dGlvbiBwb2ludGVycyB0byB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlCi0gKiBmb3IgY29uZ2Vz
dGlvbiBjb250cm9sLgotICovCi0KLXN0cnVjdCBzY3RwX2NjX2Z1bmN0aW9ucyB7Ci0Jdm9pZCAo
KnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0KTsKLQl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrKShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGFjY3VtX21vdmVkICxpbnQgcmVuZWdlZF9hbGwsIGludCB3aWxs
X2V4aXQpOwotCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYpKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQl2b2lkICgqc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9mcikoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotCQkJc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MpOwotCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQpKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCk7Ci0Jdm9pZCAo
KnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
LQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9z
dCk7Ci0Jdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQpKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBf
cGt0ZHJvcF9jaHVuayAqY3AsCi0JCQl1aW50MzJfdCAqYm90dGxlX2J3LCB1aW50MzJfdCAqb25f
cXVldWUpOwotCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCkoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgYnVyc3RfbGltaXQp
OwotCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQl2b2lkICgqc2N0cF9j
d25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKShzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0JCQlz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rICopOwotCXZvaWQgKCpzY3RwX2N3bmRfbmV3X3RyYW5zbWlz
c2lvbl9iZWdpbnMpKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJCXN0cnVjdCBzY3RwX25ldHMg
Km5ldCk7Ci0Jdm9pZCAoKnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jfc2Fjaykoc3RydWN0IHNj
dHBfdGNiICpzdGNiLAotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQlpbnQgKCpzY3RwX2N3
bmRfc29ja2V0X29wdGlvbikoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc2V0LCBzdHJ1Y3Qg
c2N0cF9jY19vcHRpb24gKik7Ci0Jdm9pZCAoKnNjdHBfcnR0X2NhbGN1bGF0ZWQpKHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIHN0cnVjdCB0aW1ldmFsICopOwotfTsKLQot
LyoKLSAqIFJTIC0gU3RydWN0dXJlIHRvIGhvbGQgZnVuY3Rpb24gcG9pbnRlcnMgdG8gdGhlIGZ1
bmN0aW9ucyByZXNwb25zaWJsZQotICogZm9yIHN0cmVhbSBzY2hlZHVsaW5nLgotICovCi1zdHJ1
Y3Qgc2N0cF9zc19mdW5jdGlvbnMgewotCXZvaWQgKCpzY3RwX3NzX2luaXQpKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCi0JCWludCBob2xkc19s
b2NrKTsKLQl2b2lkICgqc2N0cF9zc19jbGVhcikoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJaW50IGNsZWFyX3ZhbHVlcywgaW50IGhvbGRz
X2xvY2spOwotCXZvaWQgKCpzY3RwX3NzX2luaXRfc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQg
KndpdGhfc3RycSk7Ci0Jdm9pZCAoKnNjdHBfc3NfYWRkX3RvX3N0cmVhbSkoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCBp
bnQgaG9sZHNfbG9jayk7Ci0JaW50ICgqc2N0cF9zc19pc19lbXB0eSkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7Ci0Jdm9pZCAoKnNjdHBfc3Nf
cmVtb3ZlX2Zyb21fc3RyZWFtKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fz
c29jaWF0aW9uICphc29jLAotCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsIGludCBob2xkc19sb2NrKTsKLQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0KiAoKnNjdHBfc3Nfc2VsZWN0X3N0cmVhbSkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jKTsKLQl2b2lkICgqc2N0cF9zc19zY2hlZHVsZWQpKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
Yywgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgaW50IG1vdmVkX2hvd19tdWNoKTsKLQl2
b2lkICgqc2N0cF9zc19wYWNrZXRfZG9uZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsCi0JCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKLQlpbnQg
KCpzY3RwX3NzX2dldF92YWx1ZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKLQkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgdWludDE2
X3QgKnZhbHVlKTsKLQlpbnQgKCpzY3RwX3NzX3NldF92YWx1ZSkoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKLQkJc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqc3RycSwgdWludDE2X3QgdmFsdWUpOwotCWludCAoKnNjdHBfc3NfaXNfdXNlcl9tc2dz
X2luY29tcGxldGUpKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpOwotfTsKLQotLyogdXNlZCB0byBzYXZlIEFTQ09ORiBjaHVua3MgZm9yIHJldHJh
bnNtaXNzaW9uICovCi1UQUlMUV9IRUFEKHNjdHBfYXNjb25mX2hlYWQsIHNjdHBfYXNjb25mKTsK
LXN0cnVjdCBzY3RwX2FzY29uZiB7Ci0JVEFJTFFfRU5UUlkoc2N0cF9hc2NvbmYpIG5leHQ7Ci0J
dWludDMyX3Qgc2VyaWFsX251bWJlcjsKLQl1aW50MTZfdCBzbmRfY291bnQ7Ci0Jc3RydWN0IG1i
dWYgKmRhdGE7Ci0JdWludDE2X3QgbGVuOwotfTsKLQotLyogdXNlZCB0byBzYXZlIEFTQ09ORi1B
Q0sgY2h1bmtzIGZvciByZXRyYW5zbWlzc2lvbiAqLwotVEFJTFFfSEVBRChzY3RwX2FzY29uZl9h
Y2toZWFkLCBzY3RwX2FzY29uZl9hY2spOwotc3RydWN0IHNjdHBfYXNjb25mX2FjayB7Ci0JVEFJ
TFFfRU5UUlkoc2N0cF9hc2NvbmZfYWNrKSBuZXh0OwotCXVpbnQzMl90IHNlcmlhbF9udW1iZXI7
Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbGFzdF9zZW50X3RvOwotCXN0cnVjdCBtYnVmICpkYXRhOwot
CXVpbnQxNl90IGxlbjsKLX07Ci0KLS8qCi0gKiBIZXJlIHdlIGhhdmUgaW5mb3JtYXRpb24gYWJv
dXQgZWFjaCBpbmRpdmlkdWFsIGFzc29jaWF0aW9uIHRoYXQgd2UgdHJhY2suCi0gKiBXZSBwcm9i
YWJseSBpbiBwcm9kdWN0aW9uIHdvdWxkIGJlIG1vcmUgZHluYW1pYy4gQnV0IGZvciBlYXNlIG9m
Ci0gKiBpbXBsZW1lbnRhdGlvbiB3ZSB3aWxsIGhhdmUgYSBmaXhlZCBhcnJheSB0aGF0IHdlIGh1
bnQgZm9yIGluIGEgbGluZWFyCi0gKiBmYXNoaW9uLgotICovCi1zdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiB7Ci0JLyogYXNzb2NpYXRpb24gc3RhdGUgKi8KLQlpbnQgc3RhdGU7Ci0KLQkvKiBxdWV1
ZSBvZiBwZW5kaW5nIGFkZHJzIHRvIGFkZC9kZWxldGUgKi8KLQlzdHJ1Y3Qgc2N0cF9hc2NvbmZf
YWRkcmhlYWQgYXNjb25mX3F1ZXVlOwotCi0Jc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwkv
KiB0aW1lIHdlIGVudGVyZWQgc3RhdGUgKi8KLQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2xhc3RfcmN2
ZDsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1lX2xhc3Rfc2VudDsKLQlzdHJ1Y3QgdGltZXZhbCB0aW1l
X2xhc3Rfc2F0X2FkdmFuY2U7Ci0Jc3RydWN0IHNjdHBfbm9ucGFkX3NuZHJjdmluZm8gZGVmX3Nl
bmQ7Ci0KLQkvKiB0aW1lcnMgYW5kIHN1Y2ggKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBkYWNrX3Rp
bWVyOwkJLyogRGVsYXllZCBhY2sgdGltZXIgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBhc2NvbmZf
dGltZXI7CQkvKiBhc2NvbmYgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBzdHJyZXNldF90aW1lcjsJ
Lyogc3RyZWFtIHJlc2V0ICovCi0Jc3RydWN0IHNjdHBfdGltZXIgc2h1dF9ndWFyZF90aW1lcjsJ
Lyogc2h1dGRvd24gZ3VhcmQgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1lciBhdXRvY2xvc2VfdGltZXI7
CS8qIGF1dG9tYXRpYyBjbG9zZSB0aW1lciAqLwotCXN0cnVjdCBzY3RwX3RpbWVyIGRlbGF5ZWRf
ZXZlbnRfdGltZXI7CS8qIHRpbWVyIGZvciBkZWxheWVkIGV2ZW50cyAqLwotCXN0cnVjdCBzY3Rw
X3RpbWVyIGRlbGV0ZV9wcmltX3RpbWVyOwkvKiBkZWxldGluZyBwcmltYXJ5IGRzdCAqLwotCi0J
LyogbGlzdCBvZiByZXN0cmljdGVkIGxvY2FsIGFkZHJlc3NlcyAqLwotCXN0cnVjdCBzY3RwbGFk
ZHIgc2N0cF9yZXN0cmljdGVkX2FkZHJzOwotCi0JLyogbGFzdCBsb2NhbCBhZGRyZXNzIHBlbmRp
bmcgZGVsZXRpb24gKHdhaXRpbmcgZm9yIGFuIGFkZHJlc3MgYWRkKSAqLwotCXN0cnVjdCBzY3Rw
X2lmYSAqYXNjb25mX2FkZHJfZGVsX3BlbmRpbmc7Ci0JLyogRGVsZXRlZCBwcmltYXJ5IGRlc3Rp
bmF0aW9uICh1c2VkIHRvIHN0b3AgdGltZXIpICovCi0Jc3RydWN0IHNjdHBfbmV0cyAqZGVsZXRl
ZF9wcmltYXJ5OwotCi0Jc3RydWN0IHNjdHBuZXRsaXN0aGVhZCBuZXRzOwkJLyogcmVtb3RlIGFk
ZHJlc3MgbGlzdCAqLwotCi0JLyogRnJlZSBjaHVuayBsaXN0ICovCi0Jc3RydWN0IHNjdHBjaHVu
a19saXN0aGVhZCBmcmVlX2NodW5rczsKLQotCS8qIENvbnRyb2wgY2h1bmsgcXVldWUgKi8KLQlz
dHJ1Y3Qgc2N0cGNodW5rX2xpc3RoZWFkIGNvbnRyb2xfc2VuZF9xdWV1ZTsKLQotCS8qIEFTQ09O
RiBjaHVuayBxdWV1ZSAqLwotCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgYXNjb25mX3NlbmRf
cXVldWU7Ci0KLQkvKgotCSAqIE9uY2UgYSBUU04gaGl0cyB0aGUgd2lyZSBpdCBpcyBtb3ZlZCB0
byB0aGUgc2VudF9xdWV1ZS4gV2UKLQkgKiBtYWludGFpbiB0d28gY291bnRzIGhlcmUgKGRvbid0
IGtub3cgaWYgYW55IGJ1dCByZXRyYW5fY250IGlzCi0JICogbmVlZGVkKS4gVGhlIGlkZWEgaXMg
dGhhdCB0aGUgc2VudF9xdWV1ZV9yZXRyYW5fY250IHJlZmxlY3RzIGhvdwotCSAqIG1hbnkgY2h1
bmtzIGhhdmUgYmVlbiBtYXJrZWQgZm9yIHJldHJhbm1pc3Npb24gYnkgZWl0aGVyIFQzLXJ4dAot
CSAqIG9yIEZSLgotCSAqLwotCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgc2VudF9xdWV1ZTsK
LQlzdHJ1Y3Qgc2N0cGNodW5rX2xpc3RoZWFkIHNlbmRfcXVldWU7Ci0KLQkvKiBTY2hlZHVsaW5n
IHF1ZXVlcyAqLwotCXN0cnVjdCBzY2hlZHVsaW5nX2RhdGEgc3NfZGF0YTsKLQotCS8qIElmIGFu
IGl0ZXJhdG9yIGlzIGxvb2tpbmcgYXQgbWUsIHRoaXMgaXMgaXQgKi8KLQlzdHJ1Y3Qgc2N0cF9p
dGVyYXRvciAqc3RjYl9zdGFydGluZ19wb2ludF9mb3JfaXRlcmF0b3I7Ci0KLQkvKiBBU0NPTkYg
c2F2ZSB0aGUgbGFzdCBBU0NPTkYtQUNLIHNvIHdlIGNhbiByZXNlbmQgaXQgaWYgbmVjZXNzYXJ5
ICovCi0Jc3RydWN0IHNjdHBfYXNjb25mX2Fja2hlYWQgYXNjb25mX2Fja19zZW50OwotCi0JLyoK
LQkgKiBwb2ludGVyIHRvIGxhc3Qgc3RyZWFtIHJlc2V0IHF1ZXVlZCB0byBjb250cm9sIHF1ZXVl
IGJ5IHVzIHdpdGgKLQkgKiByZXF1ZXN0cy4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpzdHJfcmVzZXQ7Ci0JLyoKLQkgKiBpZiBTb3VyY2UgQWRkcmVzcyBTZWxlY3Rpb24gaGFwcGVu
aW5nLCB0aGlzIHdpbGwgcm90YXRlIHRocm91Z2gKLQkgKiB0aGUgbGluayBsaXN0LgotCSAqLwot
CXN0cnVjdCBzY3RwX2xhZGRyICpsYXN0X3VzZWRfYWRkcmVzczsKLQotCS8qIHN0cmVhbSBhcnJh
eXMgKi8KLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm1pbjsKLQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpzdHJtb3V0OwotCXVpbnQ4X3QgKm1hcHBpbmdfYXJyYXk7Ci0JLyogcHJpbWFyeSBk
ZXN0aW5hdGlvbiB0byB1c2UgKi8KLQlzdHJ1Y3Qgc2N0cF9uZXRzICpwcmltYXJ5X2Rlc3RpbmF0
aW9uOwotCXN0cnVjdCBzY3RwX25ldHMgKmFsdGVybmF0ZTsgLyogSWYgcHJpbWFyeSBpcyBkb3du
IG9yIFBGICovCi0JLyogRm9yIENNVCAqLwotCXN0cnVjdCBzY3RwX25ldHMgKmxhc3RfbmV0X2Nt
dF9zZW5kX3N0YXJ0ZWQ7Ci0JLyogbGFzdCBwbGFjZSBJIGdvdCBhIGRhdGEgY2h1bmsgZnJvbSAq
LwotCXN0cnVjdCBzY3RwX25ldHMgKmxhc3RfZGF0YV9jaHVua19mcm9tOwotCS8qIGxhc3QgcGxh
Y2UgSSBnb3QgYSBjb250cm9sIGZyb20gKi8KLQlzdHJ1Y3Qgc2N0cF9uZXRzICpsYXN0X2NvbnRy
b2xfY2h1bmtfZnJvbTsKLQotCi0JLyoKLQkgKiB3YWl0IHRvIHRoZSBwb2ludCB0aGUgY3VtLWFj
ayBwYXNzZXMgcmVxLT5zZW5kX3Jlc2V0X2F0X3RzbiBmb3IKLQkgKiBhbnkgcmVxIG9uIHRoZSBs
aXN0LgotCSAqLwotCXN0cnVjdCBzY3RwX3Jlc2V0aGVhZCByZXNldEhlYWQ7Ci0KLQkvKiBxdWV1
ZSBvZiBjaHVua3Mgd2FpdGluZyB0byBiZSBzZW50IGludG8gdGhlIGxvY2FsIHN0YWNrICovCi0J
c3RydWN0IHNjdHBfcmVhZGhlYWQgcGVuZGluZ19yZXBseV9xdWV1ZTsKLQotCS8qIEpSUyAtIHRo
ZSBjb25nZXN0aW9uIGNvbnRyb2wgZnVuY3Rpb25zIGFyZSBpbiB0aGlzIHN0cnVjdCAqLwotCXN0
cnVjdCBzY3RwX2NjX2Z1bmN0aW9ucyBjY19mdW5jdGlvbnM7Ci0JLyogSlJTIC0gdmFsdWUgdG8g
c3RvcmUgdGhlIGN1cnJlbnRseSBsb2FkZWQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSAqLwot
CXVpbnQzMl90IGNvbmdlc3Rpb25fY29udHJvbF9tb2R1bGU7Ci0JLyogUlMgLSB0aGUgc3RyZWFt
IHNjaGVkdWxpbmcgZnVuY3Rpb25zIGFyZSBpbiB0aGlzIHN0cnVjdCAqLwotCXN0cnVjdCBzY3Rw
X3NzX2Z1bmN0aW9ucyBzc19mdW5jdGlvbnM7Ci0JLyogUlMgLSB2YWx1ZSB0byBzdG9yZSB0aGUg
Y3VycmVudGx5IGxvYWRlZCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUgKi8KLQl1aW50MzJfdCBz
dHJlYW1fc2NoZWR1bGluZ19tb2R1bGU7Ci0KLQl1aW50MzJfdCB2cmZfaWQ7Ci0JdWludDMyX3Qg
Y29va2llX3ByZXNlcnZlX3JlcTsKLQkvKiBBU0NPTkYgbmV4dCBzZXEgSSBhbSBzZW5kaW5nIG91
dCwgaW5pdHMgYXQgaW5pdC10c24gKi8KLQl1aW50MzJfdCBhc2NvbmZfc2VxX291dDsKLQl1aW50
MzJfdCBhc2NvbmZfc2VxX291dF9hY2tlZDsKLQkvKiBBU0NPTkYgbGFzdCByZWNlaXZlZCBBU0NP
TkYgZnJvbSBwZWVyLCBzdGFydHMgYXQgcGVlcidzIFRTTi0xICovCi0JdWludDMyX3QgYXNjb25m
X3NlcV9pbjsKLQotCS8qIG5leHQgc2VxIEkgYW0gc2VuZGluZyBpbiBzdHIgcmVzZXQgbWVzc2Fn
ZXMgKi8KLQl1aW50MzJfdCBzdHJfcmVzZXRfc2VxX291dDsKLQkvKiBuZXh0IHNlcSBJIGFtIGV4
cGVjdGluZyBpbiBzdHIgcmVzZXQgbWVzc2FnZXMgKi8KLQl1aW50MzJfdCBzdHJfcmVzZXRfc2Vx
X2luOwotCi0JLyogdmFyaW91cyB2ZXJpZmljYXRpb24gdGFnIGluZm9ybWF0aW9uICovCi0JdWlu
dDMyX3QgbXlfdnRhZzsJLyogVGhlIHRhZyB0byBiZSB1c2VkLiBpZiBhc3NvYyBpcyByZS1pbml0
aXRlZAotCQkJCSAqIGJ5IHJlbW90ZSBlbmQsIGFuZCBJIGhhdmUgdW5sb2NrZWQgdGhpcwotCQkJ
CSAqIHdpbGwgYmUgcmVnZW5lcmF0ZWQgdG8gYSBuZXcgcmFuZG9tIHZhbHVlLiAqLwotCXVpbnQz
Ml90IHBlZXJfdnRhZzsJLyogVGhlIHBlZXJzIGxhc3QgdGFnICovCi0KLQl1aW50MzJfdCBteV92
dGFnX25vbmNlOwotCXVpbnQzMl90IHBlZXJfdnRhZ19ub25jZTsKLQotCXVpbnQzMl90IGFzc29j
X2lkOwotCi0JLyogVGhpcyBpcyB0aGUgU0NUUCBmcmFnbWVudGF0aW9uIHRocmVzaG9sZCAqLwot
CXVpbnQzMl90IHNtYWxsZXN0X210dTsKLQotCS8qCi0JICogU3BlY2lhbCBob29rIGZvciBGYXN0
IHJldHJhbnNtaXQsIGFsbG93cyB1cyB0byB0cmFjayB0aGUgaGlnaGVzdAotCSAqIFRTTiB0aGF0
IGlzIE5FVyBpbiB0aGlzIFNBQ0sgaWYgZ2FwIGFjayBibG9ja3MgYXJlIHByZXNlbnQuCi0JICov
Ci0JdWludDMyX3QgdGhpc19zYWNrX2hpZ2hlc3RfZ2FwOwotCi0JLyoKLQkgKiBUaGUgaGlnaGVz
dCBjb25zZWN1dGl2ZSBUU04gdGhhdCBoYXMgYmVlbiBhY2tlZCBieSBwZWVyIG9uIG15Ci0JICog
c2VuZHMKLQkgKi8KLQl1aW50MzJfdCBsYXN0X2Fja2VkX3NlcTsKLQotCS8qIFRoZSBuZXh0IFRT
TiB0aGF0IEkgd2lsbCB1c2UgaW4gc2VuZGluZy4gKi8KLQl1aW50MzJfdCBzZW5kaW5nX3NlcTsK
LQotCS8qIE9yaWdpbmFsIHNlcSBudW1iZXIgSSB1c2VkID8/cXVlc3Rpb25hYmxlIHRvIGtlZXA/
PyAqLwotCXVpbnQzMl90IGluaXRfc2VxX251bWJlcjsKLQotCi0JLyogVGhlIEFkdmFuY2VkIFBl
ZXIgQWNrIFBvaW50LCBhcyByZXF1aXJlZCBieSB0aGUgUFItU0NUUCAqLwotCS8qIChBMSBpbiBT
ZWN0aW9uIDQuMikgKi8KLQl1aW50MzJfdCBhZHZhbmNlZF9wZWVyX2Fja19wb2ludDsKLQotCS8q
Ci0JICogVGhlIGhpZ2hlc3QgY29uc2VxdWV0aXZlIFRTTiBhdCB0aGUgYm90dG9tIG9mIHRoZSBt
YXBwaW5nIGFycmF5Ci0JICogKGZvciBoaXMgc2VuZHMpLgotCSAqLwotCXVpbnQzMl90IGN1bXVs
YXRpdmVfdHNuOwotCS8qCi0JICogVXNlZCB0byB0cmFjayB0aGUgbWFwcGluZyBhcnJheSBhbmQg
aXRzIG9mZnNldCBiaXRzLiBUaGlzIE1BWSBiZQotCSAqIGxvd2VyIHRoZW4gY3VtdWxhdGl2ZV90
c24uCi0JICovCi0JdWludDMyX3QgbWFwcGluZ19hcnJheV9iYXNlX3RzbjsKLQkvKgotCSAqIHVz
ZWQgdG8gdHJhY2sgaGlnaGVzdCBUU04gd2UgaGF2ZSByZWNlaXZlZCBhbmQgaXMgbGlzdGVkIGlu
IHRoZQotCSAqIG1hcHBpbmcgYXJyYXkuCi0JICovCi0JdWludDMyX3QgaGlnaGVzdF90c25faW5z
aWRlX21hcDsKLQotCS8qIEVZIC0gbmV3IE5SIHZhcmlhYmxlcyB1c2VkIGZvciBucl9zYWNrIGJh
c2VkIG9uIG1hcHBpbmdfYXJyYXkqLwotCXVpbnQ4X3QgKm5yX21hcHBpbmdfYXJyYXk7Ci0JdWlu
dDMyX3QgaGlnaGVzdF90c25faW5zaWRlX25yX21hcDsKLQotCXVpbnQzMl90IGZhc3RfcmVjb3Zl
cnlfdHNuOwotCXVpbnQzMl90IHNhdF90M19yZWNvdmVyeV90c247Ci0JdWludDMyX3QgdHNuX2xh
c3RfZGVsaXZlcmVkOwotCS8qCi0JICogRm9yIHRoZSBwZC1hcGkgd2Ugc2hvdWxkIHJlLXdyaXRl
IHRoaXMgYSBiaXQgbW9yZSBlZmZpY2llbnQuIFdlCi0JICogY291bGQgaGF2ZSBtdWx0aXBsZSBz
Y3RwX3F1ZXVlZF90b19yZWFkJ3MgdGhhdCB3ZSBhcmUgYnVpbGRpbmcgYXQKLQkgKiBvbmNlLiBO
b3cgd2Ugb25seSBkbyB0aGlzIHdoZW4gd2UgZ2V0IHJlYWR5IHRvIGRlbGl2ZXIgdG8gdGhlCi0J
ICogc29ja2V0IGJ1ZmZlci4gTm90ZSB0aGF0IHdlIGRlcGVuZCBvbiB0aGUgZmFjdCB0aGF0IHRo
ZSBzdHJ1Y3QgaXMKLQkgKiAic3R1Y2siIG9uIHRoZSByZWFkIHF1ZXVlIHVudGlsIHdlIGZpbmlz
aCBhbGwgdGhlIHBkLWFwaS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29u
dHJvbF9wZGFwaTsKLQotCXVpbnQzMl90IHRzbl9vZl9wZGFwaV9sYXN0X2RlbGl2ZXJlZDsKLQl1
aW50MzJfdCBwZGFwaV9wcGlkOwotCXVpbnQzMl90IGNvbnRleHQ7Ci0JdWludDMyX3QgbGFzdF9y
ZXNldF9hY3Rpb25bU0NUUF9NQVhfUkVTRVRfUEFSQU1TXTsKLQl1aW50MzJfdCBsYXN0X3NlbmRp
bmdfc2VxW1NDVFBfTUFYX1JFU0VUX1BBUkFNU107Ci0JdWludDMyX3QgbGFzdF9iYXNlX3RzbnNl
bnRbU0NUUF9NQVhfUkVTRVRfUEFSQU1TXTsKLSNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUwot
CS8qCi0JICogc3BlY2lhbCBsb2cgIC0gVGhpcyBhZGRzIGNvbnNpZGVyYWJsZSBzaXplCi0JICog
dG8gdGhlIGFzb2MsIGJ1dCBwcm92aWRlcyBhIGxvZyB0aGF0IHlvdQotCSAqIGNhbiB1c2UgdG8g
ZGV0ZWN0IHByb2JsZW1zIHZpYSBrZ2RiLgotCSAqLwotCXN0cnVjdCBzY3RwX3Rzbl9sb2cgIGlu
X3RzbmxvZ1tTQ1RQX1RTTl9MT0dfU0laRV07Ci0Jc3RydWN0IHNjdHBfdHNuX2xvZyAgb3V0X3Rz
bmxvZ1tTQ1RQX1RTTl9MT0dfU0laRV07Ci0JdWludDMyX3QgY3VtYWNrX2xvZ1tTQ1RQX1RTTl9M
T0dfU0laRV07Ci0JdWludDMyX3QgY3VtYWNrX2xvZ3NudFtTQ1RQX1RTTl9MT0dfU0laRV07Ci0J
dWludDE2X3QgdHNuX2luX2F0OwotCXVpbnQxNl90IHRzbl9vdXRfYXQ7Ci0JdWludDE2X3QgdHNu
X2luX3dyYXBwZWQ7Ci0JdWludDE2X3QgdHNuX291dF93cmFwcGVkOwotCXVpbnQxNl90IGN1bWFj
a19sb2dfYXQ7Ci0JdWludDE2X3QgY3VtYWNrX2xvZ19hdHNudDsKLSNlbmRpZiAvKiBTQ1RQX0FT
T0NMT0dfT0ZfVFNOUyAqLwotI2lmZGVmIFNDVFBfRlNfU1BFQ19MT0cKLQlzdHJ1Y3Qgc2N0cF9m
c19zcGVjX2xvZyBmc2xvZ1tTQ1RQX0ZTX1NQRUNfTE9HX1NJWkVdOwotCXVpbnQxNl90IGZzX2lu
ZGV4OwotI2VuZGlmCi0KLQkvKgotCSAqIHdpbmRvdyBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgc21h
bGxlc3QgTVRVIHRoYXQgSSB1c2UgdG8gYm91bmQKLQkgKiBzZWdtZW50YXRpb24KLQkgKi8KLQl1
aW50MzJfdCBwZWVyc19yd25kOwotCXVpbnQzMl90IG15X3J3bmQ7Ci0JdWludDMyX3QgbXlfbGFz
dF9yZXBvcnRlZF9yd25kOwotCXVpbnQzMl90IHNjdHBfZnJhZ19wb2ludDsKLQotCXVpbnQzMl90
IHRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwotCi0JdWludDMyX3Qgc2JfY2M7CQkgICAgICAgLyog
c2hhZG93IG9mIHNiX2NjICovCi0JdWludDMyX3Qgc2Jfc2VuZF9yZXN2OyAgICAgLyogYW1vdW50
IHJlc2VydmVkIG9uIGEgc2VuZCAqLwotCXVpbnQzMl90IG15X3J3bmRfY29udHJvbF9sZW47IC8q
IHNoYWRvdyBvZiBzYl9tYmNudCB1c2VkIGZvciByd25kIGNvbnRyb2wgKi8KLSNpZmRlZiBJTkVU
NgotCXVpbnQzMl90IGRlZmF1bHRfZmxvd2xhYmVsOwotI2VuZGlmCi0JdWludDMyX3QgcHJfc2N0
cF9jbnQ7Ci0JaW50IGN0cmxfcXVldWVfY250OwkvKiBjb3VsZCBiZSByZW1vdmVkICBSRU0gLSBO
TyBJVCBDQU4nVCEhIFJSUyAqLwotCS8qCi0JICogQWxsIG91dGJvdW5kIGRhdGFncmFtcyBxdWV1
ZSBpbnRvIHRoaXMgbGlzdCBmcm9tIHRoZSBpbmRpdmlkdWFsCi0JICogc3RyZWFtIHF1ZXVlLiBI
ZXJlIHRoZXkgZ2V0IGFzc2lnbmVkIGEgVFNOIGFuZCB0aGVuIGF3YWl0Ci0JICogc2VuZGluZy4g
VGhlIHN0cmVhbSBzZXEgY29tZXMgd2hlbiBpdCBpcyBmaXJzdCBwdXQgaW4gdGhlCi0JICogaW5k
aXZpZHVhbCBzdHIgcXVldWUKLQkgKi8KLQl1bnNpZ25lZCBpbnQgc3RyZWFtX3F1ZXVlX2NudDsK
LQl1bnNpZ25lZCBpbnQgc2VuZF9xdWV1ZV9jbnQ7Ci0JdW5zaWduZWQgaW50IHNlbnRfcXVldWVf
Y250OwotCXVuc2lnbmVkIGludCBzZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlOwotCS8qCi0JICog
TnVtYmVyIG9uIHNlbnQgcXVldWUgdGhhdCBhcmUgbWFya2VkIGZvciByZXRyYW4gdW50aWwgdGhp
cyB2YWx1ZQotCSAqIGlzIDAgd2Ugb25seSBzZW5kIG9uZSBwYWNrZXQgb2YgcmV0cmFuJ2VkIGRh
dGEuCi0JICovCi0JdW5zaWduZWQgaW50IHNlbnRfcXVldWVfcmV0cmFuX2NudDsKLQotCXVuc2ln
bmVkIGludCBzaXplX29uX3JlYXNtX3F1ZXVlOwotCXVuc2lnbmVkIGludCBjbnRfb25fcmVhc21f
cXVldWU7Ci0JdW5zaWduZWQgaW50IGZ3ZF90c25fY250OwotCS8qIGFtb3VudCBvZiBkYXRhIChi
eXRlcykgY3VycmVudGx5IGluIGZsaWdodCAob24gYWxsIGRlc3RpbmF0aW9ucykgKi8KLQl1bnNp
Z25lZCBpbnQgdG90YWxfZmxpZ2h0OwotCS8qIFRvdGFsIGJvb2sgc2l6ZSBpbiBmbGlnaHQgKi8K
LQl1bnNpZ25lZCBpbnQgdG90YWxfZmxpZ2h0X2NvdW50OwkvKiBjb3VudCBvZiBjaHVua3MgdXNl
ZCB3aXRoCi0JCQkJCQkgKiBib29rIHRvdGFsICovCi0JLyogY291bnQgb2YgZGVzdGluYXRvbiBu
ZXRzIGFuZCBsaXN0IG9mIGRlc3RpbmF0aW9uIG5ldHMgKi8KLQl1bnNpZ25lZCBpbnQgbnVtbmV0
czsKLQotCS8qIFRvdGFsIGVycm9yIGNvdW50IG9uIHRoaXMgYXNzb2NpYXRpb24gKi8KLQl1bnNp
Z25lZCBpbnQgb3ZlcmFsbF9lcnJvcl9jb3VudDsKLQotCXVuc2lnbmVkIGludCBjbnRfbXNnX29u
X3NiOwotCi0JLyogQWxsIHN0cmVhbSBjb3VudCBvZiBjaHVua3MgZm9yIGRlbGl2ZXJ5ICovCi0J
dW5zaWduZWQgaW50IHNpemVfb25fYWxsX3N0cmVhbXM7Ci0JdW5zaWduZWQgaW50IGNudF9vbl9h
bGxfc3RyZWFtczsKLQotCS8qIEhlYXJ0IEJlYXQgZGVsYXkgaW4gbXMgKi8KLQl1aW50MzJfdCBo
ZWFydF9iZWF0X2RlbGF5OwotCi0JLyogYXV0b2Nsb3NlICovCi0JdW5zaWduZWQgaW50IHNjdHBf
YXV0b2Nsb3NlX3RpY2tzOwotCi0JLyogaG93IG1hbnkgcHJlb3BlbiBzdHJlYW1zIHdlIGhhdmUg
Ki8KLQl1bnNpZ25lZCBpbnQgcHJlX29wZW5fc3RyZWFtczsKLQotCS8qIEhvdyBtYW55IHN0cmVh
bXMgSSBzdXBwb3J0IGNvbWluZyBpbnRvIG1lICovCi0JdW5zaWduZWQgaW50IG1heF9pbmJvdW5k
X3N0cmVhbXM7Ci0KLQkvKiB0aGUgY29va2llIGxpZmUgSSBhd2FyZCBmb3IgYW55IGNvb2tpZSwg
aW4gc2Vjb25kcyAqLwotCXVuc2lnbmVkIGludCBjb29raWVfbGlmZTsKLQkvKiB0aW1lIHRvIGRl
bGF5IGFja3MgZm9yICovCi0JdW5zaWduZWQgaW50IGRlbGF5ZWRfYWNrOwotCXVuc2lnbmVkIGlu
dCBvbGRfZGVsYXllZF9hY2s7Ci0JdW5zaWduZWQgaW50IHNhY2tfZnJlcTsKLQl1bnNpZ25lZCBp
bnQgZGF0YV9wa3RzX3NlZW47Ci0KLQl1bnNpZ25lZCBpbnQgbnVtZHVwdHNuczsKLQlpbnQgZHVw
X3RzbnNbU0NUUF9NQVhfRFVQX1RTTlNdOwotCXVuc2lnbmVkIGludCBpbml0aWFsX2luaXRfcnRv
X21heDsJLyogaW5pdGlhbCBSVE8gZm9yIElOSVQncyAqLwotCXVuc2lnbmVkIGludCBpbml0aWFs
X3J0bzsJLyogaW5pdGlhbCBzZW5kIFJUTyAqLwotCXVuc2lnbmVkIGludCBtaW5ydG87CS8qIHBl
ciBhc3NvYyBSVE8tTUlOICovCi0JdW5zaWduZWQgaW50IG1heHJ0bzsJLyogcGVyIGFzc29jIFJU
Ty1NQVggKi8KLQotCS8qIGF1dGhlbnRpY2F0aW9uIGZpZWxkcyAqLwotCXNjdHBfYXV0aF9jaGts
aXN0X3QgKmxvY2FsX2F1dGhfY2h1bmtzOwotCXNjdHBfYXV0aF9jaGtsaXN0X3QgKnBlZXJfYXV0
aF9jaHVua3M7Ci0Jc2N0cF9obWFjbGlzdF90ICpsb2NhbF9obWFjczsJLyogbG9jYWwgSE1BQ3Mg
c3VwcG9ydGVkICovCi0Jc2N0cF9obWFjbGlzdF90ICpwZWVyX2htYWNzOwkvKiBwZWVyIEhNQUNz
IHN1cHBvcnRlZCAqLwotCXN0cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVkX2tleXM7CS8qIGFzc29j
J3Mgc2hhcmVkIGtleXMgKi8KLQlzY3RwX2F1dGhpbmZvX3QgYXV0aGluZm87CS8qIHJhbmRvbXMs
IGNhY2hlZCBrZXlzICovCi0JLyoKLQkgKiByZWZjbnQgdG8gYmxvY2sgZnJlZWluZyB3aGVuIGEg
c2VuZGVyIG9yIHJlY2VpdmVyIGlzIG9mZiBjb3BpbmcKLQkgKiB1c2VyIGRhdGEgaW4uCi0JICov
Ci0JdWludDMyX3QgcmVmY250OwotCXVpbnQzMl90IGNodW5rc19vbl9vdXRfcXVldWU7CS8qIHRv
dGFsIGNodW5rcyBmbG9hdGluZyBhcm91bmQsCi0JCQkJCSAqIGxvY2tlZCBieSBzZW5kIHNvY2tl
dCBidWZmZXIgKi8KLQl1aW50MzJfdCBwZWVyc19hZGFwdGF0aW9uOwotCXVpbnQxNl90IHBlZXJf
aG1hY19pZDsJLyogcGVlciBITUFDIGlkIHRvIHNlbmQgKi8KLQotCS8qCi0JICogQmVpbmcgdGhh
dCB3ZSBoYXZlIG5vIGJhZyB0byBjb2xsZWN0IHN0YWxlIGNvb2tpZXMsIGFuZCB0aGF0IHdlCi0J
ICogcmVhbGx5IHdvdWxkIG5vdCB3YW50IHRvIGFueXdheS4uIHdlIHdpbGwgY291bnQgdGhlbSBp
biB0aGlzCi0JICogY291bnRlci4gV2Ugb2YgY291cnNlIGZlZWQgdGhlbSB0byB0aGUgcGlnZW9u
cyByaWdodCBhd2F5IChJIGhhdmUKLQkgKiBhbHdheXMgdGhvdWdodCBvZiBwaWdlb25zIGFzIGZs
eWluZyByYXRzKS4KLQkgKi8KLQl1aW50MTZfdCBzdGFsZV9jb29raWVfY291bnQ7Ci0KLQkvKgot
CSAqIEZvciB0aGUgcGFydGlhbCBkZWxpdmVyeSBBUEksIGlmIHVwLCBpbnZva2VkIHRoaXMgaXMg
d2hhdCBsYXN0Ci0JICogVFNOIEkgZGVsaXZlcmVkCi0JICovCi0JdWludDE2X3Qgc3RyX29mX3Bk
YXBpOwotCXVpbnQxNl90IHNzbl9vZl9wZGFwaTsKLQotCS8qIGNvdW50cyBvZiBhY3R1YWwgYnVp
bHQgc3RyZWFtcy4gQWxsb2NhdGlvbiBtYXkgYmUgbW9yZSBob3dldmVyICovCi0JLyogY291bGQg
cmUtYXJyYW5nZSB0byBvcHRpbWl6ZSBzcGFjZSBoZXJlLiAqLwotCXVpbnQxNl90IHN0cmVhbWlu
Y250OwotCXVpbnQxNl90IHN0cmVhbW91dGNudDsKLQl1aW50MTZfdCBzdHJtX3JlYWxvdXRzaXpl
OwotCXVpbnQxNl90IHN0cm1fcGVuZGluZ19hZGRfc2l6ZTsKLQkvKiBteSBtYXhpbXVtIG51bWJl
ciBvZiByZXRyYW5zIG9mIElOSVQgYW5kIFNFTkQgKi8KLQkvKiBjb3BpZWQgZnJvbSBTQ1RQIGJ1
dCBzaG91bGQgYmUgaW5kaXZpZHVhbGx5IHNldGFibGUgKi8KLQl1aW50MTZfdCBtYXhfaW5pdF90
aW1lczsKLQl1aW50MTZfdCBtYXhfc2VuZF90aW1lczsKLQotCXVpbnQxNl90IGRlZl9uZXRfZmFp
bHVyZTsKLQotCXVpbnQxNl90IGRlZl9uZXRfcGZfdGhyZXNob2xkOwotCi0JLyoKLQkgKiBsb2Nr
IGZsYWc6IDAgaXMgb2sgdG8gc2VuZCwgMSsgKGR1YWxzIGFzIGEgcmV0cmFuIGNvdW50KSBpcwot
CSAqIGF3YWl0aW5nIEFDSwotCSAqLwotCXVpbnQxNl90IG1hcHBpbmdfYXJyYXlfc2l6ZTsKLQot
CXVpbnQxNl90IGxhc3Rfc3RybV9zZXFfZGVsaXZlcmVkOwotCXVpbnQxNl90IGxhc3Rfc3RybV9u
b19kZWxpdmVyZWQ7Ci0KLQl1aW50MTZfdCBsYXN0X3Jldm9rZV9jb3VudDsKLQlpbnQxNl90IG51
bV9zZW5kX3RpbWVyc191cDsKLQotCXVpbnQxNl90IHN0cmVhbV9sb2NrZWRfb247Ci0JdWludDE2
X3QgZWNuX2VjaG9fY250X29ucTsKLQotCXVpbnQxNl90IGZyZWVfY2h1bmtfY250OwotCXVpbnQ4
X3Qgc3RyZWFtX2xvY2tlZDsKLQl1aW50OF90IGF1dGhlbnRpY2F0ZWQ7CS8qIHBhY2tldCBhdXRo
ZW50aWNhdGVkIG9rICovCi0JLyoKLQkgKiBUaGlzIGZsYWcgaW5kaWNhdGVzIHRoYXQgYSBTQUNL
IG5lZWQgdG8gYmUgc2VudC4KLQkgKiBJbml0aWFsbHkgdGhpcyBpcyAxIHRvIHNlbmQgdGhlIGZp
cnN0IHNBQ0sgaW1tZWRpYXRlbHkuCi0JICovCi0JdWludDhfdCBzZW5kX3NhY2s7Ci0KLQkvKiBt
YXggYnVyc3Qgb2YgbmV3IHBhY2tldHMgaW50byB0aGUgbmV0d29yayAqLwotCXVpbnQzMl90IG1h
eF9idXJzdDsKLQkvKiBtYXggYnVyc3Qgb2YgZmFzdCByZXRyYW5zbWl0IHBhY2tldHMgKi8KLQl1
aW50MzJfdCBmcl9tYXhfYnVyc3Q7Ci0KLQl1aW50OF90IHNhdF9uZXR3b3JrOwkvKiBSVFQgaXMg
aW4gcmFuZ2Ugb2Ygc2F0IG5ldCBvciBncmVhdGVyICovCi0JdWludDhfdCBzYXRfbmV0d29ya19s
b2Nrb3V0OwkvKiBsb2Nrb3V0IGNvZGUgKi8KLQl1aW50OF90IGJ1cnN0X2xpbWl0X2FwcGxpZWQ7
CS8qIEJ1cnN0IGxpbWl0IGluIGVmZmVjdCBhdCBsYXN0IHNlbmQ/ICovCi0JLyogZmxhZyBnb2Vz
IG9uIHdoZW4gd2UgYXJlIGRvaW5nIGEgcGFydGlhbCBkZWxpdmVyeSBhcGkgKi8KLQl1aW50OF90
IGhiX3JhbmRvbV92YWx1ZXNbNF07Ci0JdWludDhfdCBmcmFnbWVudGVkX2RlbGl2ZXJ5X2lucHJv
Z3Jlc3M7Ci0JdWludDhfdCBmcmFnbWVudF9mbGFnczsKLQl1aW50OF90IGxhc3RfZmxhZ3NfZGVs
aXZlcmVkOwotCXVpbnQ4X3QgaGJfZWN0X3JhbmRvbWJpdDsKLQl1aW50OF90IGhiX3JhbmRvbV9p
ZHg7Ci0JdWludDhfdCBkZWZhdWx0X2RzY3A7Ci0JdWludDhfdCBhc2NvbmZfZGVsX3BlbmRpbmc7
CS8qIGFzY29uZiBkZWxldGUgbGFzdCBhZGRyIHBlbmRpbmcgKi8KLQl1aW50OF90IHRyaWdnZXJf
cmVzZXQ7Ci0JLyoKLQkgKiBUaGlzIHZhbHVlLCBwbHVzIGFsbCBvdGhlciBhY2snZCBidXQgYWJv
dmUgY3VtLWFjayBpcyBhZGRlZAotCSAqIHRvZ2V0aGVyIHRvIGNyb3NzIGNoZWNrIGFnYWluc3Qg
dGhlIGJpdCB0aGF0IHdlIGhhdmUgeWV0IHRvCi0JICogZGVmaW5lIChwcm9iYWJseSBpbiB0aGUg
U0FDSykuIFdoZW4gdGhlIGN1bS1hY2sgaXMgdXBkYXRlZCwgdGhpcwotCSAqIHN1bSBpcyB1cGRh
dGVkIGFzIHdlbGwuCi0JICovCi0KLQkvKiBGbGFncyB3aGV0aGVyIGFuIGV4dGVuc2lvbiBpcyBz
dXBwb3J0ZWQgb3Igbm90ICovCi0JdWludDhfdCBlY25fc3VwcG9ydGVkOwotCXVpbnQ4X3QgcHJz
Y3RwX3N1cHBvcnRlZDsKLQl1aW50OF90IGF1dGhfc3VwcG9ydGVkOwotCXVpbnQ4X3QgYXNjb25m
X3N1cHBvcnRlZDsKLQl1aW50OF90IHJlY29uZmlnX3N1cHBvcnRlZDsKLQl1aW50OF90IG5yc2Fj
a19zdXBwb3J0ZWQ7Ci0JdWludDhfdCBwa3Rkcm9wX3N1cHBvcnRlZDsKLQl1aW50OF90IGlkYXRh
X3N1cHBvcnRlZDsKLQotCS8qIERpZCB0aGUgcGVlciBtYWtlIHRoZSBzdHJlYW0gY29uZmlnIChh
ZGQgb3V0KSByZXF1ZXN0ICovCi0JdWludDhfdCBwZWVyX3JlcV9vdXQ7Ci0KLQl1aW50OF90IGxv
Y2FsX3N0cnJlc2V0X3N1cHBvcnQ7Ci0JdWludDhfdCBwZWVyX3N1cHBvcnRzX25hdDsKLQotCXN0
cnVjdCBzY3RwX3Njb3Bpbmcgc2NvcGU7Ci0JLyogZmxhZ3MgdG8gaGFuZGxlIHNlbmQgYWx0ZXJu
YXRlIG5ldCB0cmFja2luZyAqLwotCXVpbnQ4X3QgdXNlZF9hbHRfYXNjb25mYWNrOwotCXVpbnQ4
X3QgZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeTsKLQl1aW50OF90IHNhdF90M19sb3NzX3JlY292
ZXJ5OwotCXVpbnQ4X3QgZHJvcHBlZF9zcGVjaWFsX2NudDsKLQl1aW50OF90IHNlZW5fYV9zYWNr
X3RoaXNfcGt0OwotCXVpbnQ4X3Qgc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nOwotCXVpbnQ4X3Qg
c3RyZWFtX3Jlc2V0X291dF9pc19vdXRzdGFuZGluZzsKLQl1aW50OF90IGRlbGF5ZWRfY29ubmVj
dGlvbjsKLQl1aW50OF90IGlmcF9oYWRfZW5vYnVmOwotCXVpbnQ4X3Qgc2F3X3NhY2tfd2l0aF9m
cmFnczsKLQl1aW50OF90IHNhd19zYWNrX3dpdGhfbnJfZnJhZ3M7Ci0JdWludDhfdCBpbl9hc29j
aWRfaGFzaDsKLQl1aW50OF90IGFzc29jX3VwX3NlbnQ7Ci0JdWludDhfdCBhZGFwdGF0aW9uX25l
ZWRlZDsKLQl1aW50OF90IGFkYXB0YXRpb25fc2VudDsKLQkvKiBDTVQgdmFyaWFibGVzICovCi0J
dWludDhfdCBjbXRfZGFjX3BrdHNfcmN2ZDsKLQl1aW50OF90IHNjdHBfY210X29uX29mZjsKLQl1
aW50OF90IGlhbV9ibG9ja2luZzsKLQl1aW50OF90IGNvb2tpZV9ob3dbOF07Ci0JLyogSlJTIDUv
MjEvMDcgLSBDTVQgUEYgdmFyaWFibGUgKi8KLQl1aW50OF90IHNjdHBfY210X3BmOwotCXVpbnQ4
X3QgdXNlX3ByZWNpc2VfdGltZTsKLQl1aW50NjRfdCBzY3RwX2ZlYXR1cmVzOwotCXVpbnQzMl90
IG1heF9jd25kOwotCXVpbnQxNl90IHBvcnQ7IC8qIHJlbW90ZSBVRFAgZW5jYXBzdWxhdGlvbiBw
b3J0ICovCi0JLyoKLQkgKiBUaGUgbWFwcGluZyBhcnJheSBpcyB1c2VkIHRvIHRyYWNrIG91dCBv
ZiBvcmRlciBzZXF1ZW5jZXMgYWJvdmUKLQkgKiBsYXN0X2Fja2VkX3NlcS4gMCBpbmRpY2F0ZXMg
cGFja2V0IG1pc3NpbmcgMSBpbmRpY2F0ZXMgcGFja2V0Ci0JICogcmVjJ2QuIFdlIHNsaWRlIGl0
IHVwIGV2ZXJ5IHRpbWUgd2UgcmFpc2UgbGFzdF9hY2tlZF9zZXEgYW5kIDAKLQkgKiB0cmFpbGlu
ZyBsb2NhY3Rpb25zIG91dC4gIElmIEkgZ2V0IGEgVFNOIGFib3ZlIHRoZSBhcnJheQotCSAqIG1h
cHBpbmdBcnJheVN6LCBJIGRpc2NhcmQgdGhlIGRhdGFncmFtIGFuZCBsZXQgcmV0cmFuc21pdCBo
YXBwZW4uCi0JICovCi0JdWludDMyX3QgbWFya2VkX3JldHJhbnM7Ci0JdWludDMyX3QgdGltb2lu
aXQ7Ci0JdWludDMyX3QgdGltb2RhdGE7Ci0JdWludDMyX3QgdGltb3NhY2s7Ci0JdWludDMyX3Qg
dGltb3NodXRkb3duOwotCXVpbnQzMl90IHRpbW9oZWFydGJlYXQ7Ci0JdWludDMyX3QgdGltb2Nv
b2tpZTsKLQl1aW50MzJfdCB0aW1vc2h1dGRvd25hY2s7Ci0Jc3RydWN0IHRpbWV2YWwgc3RhcnRf
dGltZTsKLQlzdHJ1Y3QgdGltZXZhbCBkaXNjb250aW51aXR5X3RpbWU7Ci0JdWludDY0X3QgYWJh
bmRvbmVkX3Vuc2VudFtTQ1RQX1BSX1NDVFBfTUFYICsgMV07Ci0JdWludDY0X3QgYWJhbmRvbmVk
X3NlbnRbU0NUUF9QUl9TQ1RQX01BWCArIDFdOwotfTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lz
Y3RsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4NDY0NzUzNTkzMTQwNDdhM2I0
MTJhNmZhZmUxNGQ3ZDUzNTg0YzkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5jCisrKyAvZGV2L251bGwK
QEAgLTEsMTcwNiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28g
U3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAg
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0
ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgot
X19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmMgMzE4OTU4
IDIwMTctMDUtMjYgMTY6Mjk6MDBaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9jb25zdGFudHMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0
aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+Ci0jaWZkZWYgX19GcmVlQlNE
X18KLSNpbmNsdWRlIDxzeXMvc21wLmg+Ci0jaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRy
Lmg+Ci0jZW5kaWYKLQotI2lmZGVmIF9fRnJlZUJTRF9fCi1GRUFUVVJFKHNjdHAsICJTdHJlYW0g
Q29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wiKTsKLSNlbmRpZgotCi0vKgotICogc3lzY3Rs
IHR1bmFibGUgdmFyaWFibGVzCi0gKi8KLQotdm9pZAotc2N0cF9pbml0X3N5c2N0bHMoKQotewot
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpID0gU0NUUENUTF9NQVhER1JBTV9ERUZB
VUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpID0gU0NUUENUTF9SRUNWU1BB
Q0VfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2NvbmYpID0gU0NUUENU
TF9BVVRPQVNDT05GX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX211bHRpcGxlX2Fz
Y29uZnMpID0gU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZWNuX2VuYWJsZSkgPSBTQ1RQQ1RMX0VDTl9FTkFCTEVfREVGQVVMVDsKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSA9IFNDVFBDVExfUFJfRU5BQkxFX0RFRkFVTFQ7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IFNDVFBDVExfQVVUSF9FTkFC
TEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPSBTQ1RQ
Q1RMX0FTQ09ORl9FTkFCTEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjb25m
aWdfZW5hYmxlKSA9IFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX25yc2Fja19lbmFibGUpID0gU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFRkFV
TFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSA9IFNDVFBDVExfUEtU
RFJPUF9FTkFCTEVfREVGQVVMVDsKLSNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDgwMDAwMCkKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkK
LQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykgPSBTQ1RQQ1RMX0xP
T1BCQUNLX05PQ1NVTV9ERUZBVUxUOwotI2VuZGlmCi0jZW5kaWYKLQlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfcGVlcl9jaHVua19vaCkgPSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVMVDsKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpID0gU0NUUENUTF9NQVhCVVJTVF9E
RUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCkgPSBT
Q1RQQ1RMX0ZSTUFYQlVSU1RfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2No
dW5rc19vbl9xdWV1ZSkgPSBTQ1RQQ1RMX01BWENIVU5LU19ERUZBVUxUOwotCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9oYXNodGJsc2l6ZSkgPSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX0RFRkFVTFQ7Ci0J
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpID0gU0NUUENUTF9QQ0JIQVNIU0laRV9E
RUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRfcG9pbnQpID0gU0NUUENU
TF9NSU5fU1BMSVRfUE9JTlRfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtz
Y2FsZSkgPSBTQ1RQQ1RMX0NIVU5LU0NBTEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1F
X0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KSA9IFND
VFBDVExfU0FDS19GUkVRX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9m
cmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVGQVVMVDsKLQlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9BU09DX1JFU09V
UkNFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9k
ZWZhdWx0KSA9IFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFVTFQ7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KSA9IFNDVFBDVExfUE1UVV9SQUlT
RV9USU1FX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NodXRkb3duX2d1YXJkX3Rp
bWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVMVDsKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpID0gU0NUUENUTF9TRUNS
RVRfTElGRVRJTUVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZh
dWx0KSA9IFNDVFBDVExfUlRPX01BWF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9y
dG9fbWluX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fTUlOX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fSU5JVElBTF9ERUZB
VUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkgPSBTQ1RQ
Q1RMX0lOSVRfUlRPX01BWF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9j
b29raWVfbGlmZV9kZWZhdWx0KSA9IFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVGQVVMVDsK
LQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpID0gU0NUUENUTF9J
TklUX1JUWF9NQVhfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21h
eF9kZWZhdWx0KSA9IFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERUZBVUxUOwotCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX1BBVEhfUlRYX01BWF9E
RUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkgPSBTQ1RQ
Q1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fk
ZF9tb3JlX3RocmVzaG9sZCkgPSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERUZBVUxUOwot
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQpID0gU0NU
UENUTF9JTkNPTUlOR19TVFJFQU1TX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX25y
X291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCkgPSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVG
QVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPSBTQ1RQQ1RMX0NNVF9P
Tl9PRkZfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpID0gU0NU
UENUTF9DTVRfVVNFX0RBQ19ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3du
ZF9iYXNlZF9tYXhidXJzdCkgPSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVMVDsKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSA9IFNDVFBDVExfTkFUX0ZSSUVORExZX0RF
RkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkgPSBTQ1RQQ1RM
X0FCQ19MX1ZBUl9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9s
ZF9jb3VudCkgPSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFRkFVTFQ7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2RvX2RyYWluKSA9IFNDVFBDVExfRE9fU0NUUF9EUkFJTl9ERUZBVUxUOwot
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYl9tYXhidXJzdCkgPSBTQ1RQQ1RMX0hCX01BWF9CVVJT
VF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0
c19saW1pdCkgPSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX21pbl9yZXNpZHVhbCkgPSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9ERUZBVUxUOwot
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSA9IFNDVFBDVExfTUFYX1JF
VFJBTl9DSFVOS19ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSA9IFNDVFBDVExfTE9HR0lOR19MRVZFTF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kZWZhdWx0X2NjX21vZHVsZSkgPSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFRkFVTFQ7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfc3NfbW9kdWxlKSA9IFNDVFBDVExfREVG
QVVMVF9TU19NT0RVTEVfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9m
cmFnX2ludGVybGVhdmUpID0gU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxU
OwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSA9IFNDVFBDVExfTU9CSUxJ
VFlfQkFTRV9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFu
ZG9mZikgPSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFRkFVTFQ7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3Z0YWdfdGltZV93YWl0KSA9IFNDVFBDVExfVElNRV9XQUlUX0RFRkFVTFQ7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpID0gU0NUUENUTF9CVUZG
RVJfU1BMSVRUSU5HX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3du
ZCkgPSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9ydHR2YXJfYncpID0gU0NUUENUTF9SVFRWQVJfQldfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcnR0dmFyX3J0dCkgPSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVGQVVMVDsKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX2VxcmV0KSA9IFNDVFBDVExfUlRUVkFSX0VRUkVUX0RF
RkFVTFQ7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVwKSA9IFNDVFBDVExfUlRU
VkFSX1NURUFEWVNfREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2RjY2NfZWNu
KSA9IFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fREVGQVVMVDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYmxhY2tob2xlKSA9IFNDVFBDVExfQkxBQ0tIT0xFX0RFRkFVTFQ7Ci0JU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSA9IFNDVFBDVExfRElBR19JTkZPX0NPREVfREVGQVVM
VDsKLSNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotI2lmIGRlZmluZWQoX19XaW5k
b3dzX18pCi0JLyogT24gV2luZG93cywgdGhlIHJlc291cmNlIGZvciBnbG9iYWwgdmFyaWFibGVz
IGlzIGxpbWl0ZWQuICovCi0JTUFMTE9DKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzdHJ1
Y3Qgc2N0cF9sb2cgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZyksIE1fU1lTQ1RMLCBNX1pFUk8p
OwotI2Vsc2UKLQltZW1zZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfbG9nKSk7Ci0jZW5kaWYKLSNlbmRpZgotCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF91ZHBfdHVubmVsaW5nX3BvcnQpID0gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVGQVVM
VDsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpID0gU0NU
UENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSkgPSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9J
TklUU19ERUZBVUxUOwotI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKLQlTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfZGVidWdfb24pID0gU0NUUENUTF9ERUJVR19ERUZBVUxUOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX0FQUExFX18pCi0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2lnbm9yZV92bXdhcmVfaW50
ZXJmYWNlcykgPSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERUZBVUxUOwotCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tYWluX3RpbWVyKSA9IFNDVFBDVExfTUFJTl9USU1FUl9ERUZB
VUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0KSA9IFNDVFBD
VExfQUREUl9XQVRDSERPR19MSU1JVF9ERUZBVUxUOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF92
dGFnX3dhdGNoZG9nX2xpbWl0KSA9IFNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9ERUZBVUxU
OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCi0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tlZCkgPSBTQ1RQ
Q1RMX09VVFBVVF9VTkxPQ0tFRF9ERUZBVUxUOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVkKF9f
V2luZG93c19fKQotdm9pZAotc2N0cF9maW5pc2hfc3lzY3RscygpCi17Ci0jaWYgZGVmaW5lZChT
Q1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykgIT0g
TlVMTCkgewotCQlGUkVFKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBNX1NZU0NUTCk7Ci0J
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpID0gTlVMTDsKLQl9Ci0jZW5kaWYKLX0KLSNlbmRp
ZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pCi0vKiBJdCByZXR1cm5zIGFuIHVwcGVyIGxpbWl0LiBObyBmaWx0
ZXJpbmcgaXMgZG9uZSBoZXJlICovCi1zdGF0aWMgdW5zaWduZWQgaW50Ci1zY3RwX3N5c2N0bF9u
dW1iZXJfb2ZfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnApCi17Ci0JdW5zaWduZWQg
aW50IGNudDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBf
aWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxh
ZGRyOwotCi0JY250ID0gMDsKLQkvKiBuZWl0aGVyIE1hYyBPUyBYIG5vciBGcmVlQlNEIHN1cHBv
cnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KLQlpZiAoKHZyZiA9IHNjdHBfZmluZF92
cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJTElTVF9GT1JF
QUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgewotCQkJTElTVF9GT1JFQUNI
KHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJc3dpdGNoIChz
Y3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBB
Rl9JTkVUOgotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotI2VuZGlm
Ci0JCQkJCWNudCsrOwotCQkJCQlicmVhazsKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQlzd2l0Y2ggKGxhZGRyLT5pZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotI2Vu
ZGlmCi0jaWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0jZW5kaWYKLQkJCQljbnQrKzsK
LQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0
dXJuIChjbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9h
ZGRyZXNzZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc3lzY3RsX3JlcSAqcmVxKQotewotCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47Ci0J
c3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKLQlpbnQgbG9vcGJhY2tfc2NvcGUsIGlwdjRfbG9j
YWxfc2NvcGUsIGxvY2FsX3Njb3BlLCBzaXRlX3Njb3BlOwotCWludCBpcHY0X2FkZHJfbGVnYWws
IGlwdjZfYWRkcl9sZWdhbDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JaW50IGNvbm5f
YWRkcl9sZWdhbDsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOwotCXN0cnVjdCB4c2N0
cF9sYWRkciB4bGFkZHI7Ci0Jc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCWludCBlcnJvcjsK
LQotCS8qIFR1cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLwotCWlmIChzdGNiKSB7
Ci0JCS8qIHVzZSBhc3NvY2lhdGlvbiBzcGVjaWZpYyB2YWx1ZXMgKi8KLQkJbG9vcGJhY2tfc2Nv
cGUgPSBzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlOwotCQlpcHY0X2xvY2FsX3Njb3Bl
ID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOwotCQlsb2NhbF9zY29wZSA9IHN0
Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGU7Ci0JCXNpdGVfc2NvcGUgPSBzdGNiLT5hc29jLnNj
b3BlLnNpdGVfc2NvcGU7Ci0JCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2
NF9hZGRyX2xlZ2FsOwotCQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjZf
YWRkcl9sZWdhbDsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWNvbm5fYWRkcl9sZWdh
bCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0JfSBlbHNlIHsK
LQkJLyogVXNlIGdlbmVyaWMgdmFsdWVzIGZvciBlbmRwb2ludHMuICovCi0JCWxvb3BiYWNrX3Nj
b3BlID0gMTsKLQkJaXB2NF9sb2NhbF9zY29wZSA9IDE7Ci0JCWxvY2FsX3Njb3BlID0gMTsKLQkJ
c2l0ZV9zY29wZSA9IDE7Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNikgewotCQkJaXB2Nl9hZGRyX2xlZ2FsID0gMTsKLQkJCWlmIChTQ1RQX0lQVjZfVjZP
TkxZKGlucCkpIHsKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotCQkJfSBlbHNlIHsKLQkJCQlp
cHY0X2FkZHJfbGVnYWwgPSAxOwotCQkJfQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJ
CWNvbm5fYWRkcl9sZWdhbCA9IDA7Ci0jZW5kaWYKLQkJfSBlbHNlIHsKLQkJCWlwdjZfYWRkcl9s
ZWdhbCA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKLQkJCQljb25uX2FkZHJfbGVnYWwg
PSAxOwotCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJCWNvbm5fYWRk
cl9sZWdhbCA9IDA7Ci0JCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKLQkJCX0KLSNlbHNlCi0JCQlp
cHY0X2FkZHJfbGVnYWwgPSAxOwotI2VuZGlmCi0JCX0KLQl9Ci0KLQkvKiBuZWl0aGVyIE1hYyBP
UyBYIG5vciBGcmVlQlNEIHN1cHBvcnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KLQlp
ZiAoKHZyZiA9IHNjdHBfZmluZF92cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgewotCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQlyZXR1
cm4gKC0xKTsKLQl9Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5E
QUxMKSB7Ci0JCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4p
IHsKLQkJCWlmICgobG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1Ao
c2N0cF9pZm4pKQotCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2NvcGUgbm90IHNl
dCAqLwotCQkJCWNvbnRpbnVlOwotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4t
PmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJaWYgKHN0Y2IpIHsKLQkJCQkJLyoKLQkJCQkJICog
aWdub3JlIGlmIGJsYWNrbGlzdGVkIGF0Ci0JCQkJCSAqIGFzc29jaWF0aW9uIGxldmVsCi0JCQkJ
CSAqLwotCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpKQot
CQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Eu
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJaWYgKGlw
djRfYWRkcl9sZWdhbCkgewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCQkJ
CXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47Ci0JCQkJCQlpZiAoc2luLT5zaW5fYWRkci5z
X2FkZHIgPT0gMCkKLQkJCQkJCQljb250aW51ZTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
CQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJ
CQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKLQkJCQkJCQlj
b250aW51ZTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJCQkJaWYgKChpcHY0X2xvY2FsX3Njb3BlID09
IDApICYmIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkKLQkJCQkJCQlj
b250aW51ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWJy
ZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJCQljYXNlIEFGX0lORVQ2OgotCQkJCQlpZiAo
aXB2Nl9hZGRyX2xlZ2FsKSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0J
CQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7Ci0JCQkJCQlpZiAoSU42X0lTX0FE
RFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpCi0JCQkJCQkJY29udGludWU7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBf
aW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42
X2FkZHIpICE9IDApIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJCQkJ
aWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCQkJCWlm
IChsb2NhbF9zY29wZSA9PSAwKQotCQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJCWlm
ICgoc2l0ZV9zY29wZSA9PSAwKSAmJiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42
X2FkZHIpKSkKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNvbnRpbnVl
OwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJaWYgKCFjb25uX2FkZHJfbGVnYWwpIHsKLQkJCQkJ
CWNvbnRpbnVlOwotCQkJCQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJ
CQkJY29udGludWU7Ci0JCQkJfQotCQkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVv
ZihzdHJ1Y3QgeHNjdHBfbGFkZHIpKTsKLQkJCQltZW1jcHkoKHZvaWQgKikmeGxhZGRyLmFkZHJl
c3MsIChjb25zdCB2b2lkICopJnNjdHBfaWZhLT5hZGRyZXNzLCBzaXplb2YodW5pb24gc2N0cF9z
b2Nrc3RvcmUpKTsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCk7Ci0JCQkJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9m
KHN0cnVjdCB4c2N0cF9sYWRkcikpOwotCQkJCWlmIChlcnJvcikgewotCQkJCQlyZXR1cm4gKGVy
cm9yKTsKLQkJCQl9IGVsc2UgewotCQkJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJTElTVF9G
T1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJ
LyogaWdub3JlIGlmIGJsYWNrbGlzdGVkIGF0IGFzc29jaWF0aW9uIGxldmVsICovCi0JCQlpZiAo
c3RjYiAmJiBzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkKLQkJCQlj
b250aW51ZTsKLQkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihzdHJ1Y3QgeHNj
dHBfbGFkZHIpKTsKLQkJCW1lbWNweSgodm9pZCAqKSZ4bGFkZHIuYWRkcmVzcywgKGNvbnN0IHZv
aWQgKikmbGFkZHItPmlmYS0+YWRkcmVzcywgc2l6ZW9mKHVuaW9uIHNjdHBfc29ja3N0b3JlKSk7
Ci0JCQl4bGFkZHIuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3QpbGFkZHItPnN0YXJ0X3Rp
bWUudHZfc2VjOwotCQkJeGxhZGRyLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50MzJfdClsYWRk
ci0+c3RhcnRfdGltZS50dl91c2VjOwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NU
UF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGxhZGRy
LCBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKSk7Ci0JCQlpZiAoZXJyb3IpIHsKLQkJCQlyZXR1
cm4gKGVycm9yKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwotCQkJ
CVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JbWVtc2V0KCh2b2lkICopJnhs
YWRkciwgMCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOwotCXhsYWRkci5sYXN0ID0gMTsK
LQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JZXJy
b3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikp
OwotCi0JaWYgKGVycm9yKSB7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0gZWxzZSB7Ci0JCVNDVFBf
SU5QX0lORk9fUkxPQ0soKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJcmV0dXJuICgwKTsK
LQl9Ci19Ci0KLS8qCi0gKiBzeXNjdGwgZnVuY3Rpb25zCi0gKi8KLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QgU1lTQ1RMX0hB
TkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQob2lkcCwgYXJnMSwgYXJnMikKLSNlbHNlCi1z
dGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfYXNzb2NsaXN0KFNZU0NUTF9IQU5ETEVSX0FS
R1MpCi17Ci0jZW5kaWYKLQl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2VuZHBvaW50czsKLQl1bnNp
Z25lZCBpbnQgbnVtYmVyX29mX2xvY2FsX2FkZHJlc3NlczsKLQl1bnNpZ25lZCBpbnQgbnVtYmVy
X29mX2Fzc29jaWF0aW9uczsKLQl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNz
ZXM7Ci0JdW5zaWduZWQgaW50IG47Ci0JaW50IGVycm9yOwotCXN0cnVjdCBzY3RwX2lucGNiICpp
bnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlz
dHJ1Y3QgeHNjdHBfaW5wY2IgeGlucGNiOwotCXN0cnVjdCB4c2N0cF90Y2IgeHN0Y2I7Ci0Jc3Ry
dWN0IHhzY3RwX3JhZGRyIHhyYWRkcjsKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQotCW51bWJlcl9v
Zl9lbmRwb2ludHMgPSAwOwotCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgPSAwOwotCW51bWJl
cl9vZl9hc3NvY2lhdGlvbnMgPSAwOwotCW51bWJlcl9vZl9yZW1vdGVfYWRkcmVzc2VzID0gMDsK
LQotCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAo
cmVxLT5vbGRwdHIgPT0gVVNFUl9BRERSX05VTEwpIHsKLSNlbHNlCi0JaWYgKHJlcS0+b2xkcHRy
ID09IE5VTEwpIHsKLSNlbmRpZgotCQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9CQVNFX0lORk8o
bGlzdGhlYWQpLCBzY3RwX2xpc3QpIHsKLQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQludW1i
ZXJfb2ZfZW5kcG9pbnRzKys7Ci0JCQludW1iZXJfb2ZfbG9jYWxfYWRkcmVzc2VzICs9IHNjdHBf
c3lzY3RsX251bWJlcl9vZl9hZGRyZXNzZXMoaW5wKTsKLQkJCUxJU1RfRk9SRUFDSChzdGNiLCAm
aW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJbnVtYmVyX29mX2Fzc29j
aWF0aW9ucysrOwotCQkJCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKz0gc2N0cF9zeXNjdGxf
bnVtYmVyX29mX2FkZHJlc3NlcyhpbnApOwotCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+
YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQkJbnVtYmVyX29mX3JlbW90ZV9hZGRyZXNzZXMr
KzsKLQkJCQl9Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJU0NUUF9J
TlBfSU5GT19SVU5MT0NLKCk7Ci0JCW4gPSAobnVtYmVyX29mX2VuZHBvaW50cyArIDEpICogc2l6
ZW9mKHN0cnVjdCB4c2N0cF9pbnBjYikgKwotCQkgICAgKG51bWJlcl9vZl9sb2NhbF9hZGRyZXNz
ZXMgKyBudW1iZXJfb2ZfZW5kcG9pbnRzICsgbnVtYmVyX29mX2Fzc29jaWF0aW9ucykgKiBzaXpl
b2Yoc3RydWN0IHhzY3RwX2xhZGRyKSArCi0JCSAgICAobnVtYmVyX29mX2Fzc29jaWF0aW9ucyAr
IG51bWJlcl9vZl9lbmRwb2ludHMpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpICsKLQkJICAg
IChudW1iZXJfb2ZfcmVtb3RlX2FkZHJlc3NlcyArIG51bWJlcl9vZl9hc3NvY2lhdGlvbnMpICog
c2l6ZW9mKHN0cnVjdCB4c2N0cF9yYWRkcik7Ci0KLQkJLyogcmVxdWVzdCBzb21lIG1vcmUgbWVt
b3J5IHRoYW4gbmVlZGVkICovCi0jaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCi0JCXJlcS0+b2xk
aWR4ID0gKG4gKyBuIC8gOCk7Ci0jZWxzZQotCQlyZXEtPmRhdGFpZHggPSAobiArIG4gLyA4KTsK
LSNlbmRpZgotCQlyZXR1cm4gKDApOwotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAo
cmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpIHsKLSNlbHNlCi0JaWYgKHJlcS0+bmV3cHRy
ICE9IE5VTEwpIHsKLSNlbmRpZgotCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9TWVNDVEwsIEVQ
RVJNKTsKLQkJcmV0dXJuIChFUEVSTSk7Ci0JfQotCUxJU1RfRk9SRUFDSChpbnAsICZTQ1RQX0JB
U0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwot
CQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsK
LQkJCS8qIGlmIGl0cyBhbGxnb25lIGl0IGlzIGJlaW5nIGZyZWVkIC0gc2tpcCBpdCAgKi8KLQkJ
CWdvdG8gc2tpcDsKLQkJfQotCQl4aW5wY2IubGFzdCA9IDA7Ci0JCXhpbnBjYi5sb2NhbF9wb3J0
ID0gbnRvaHMoaW5wLT5zY3RwX2xwb3J0KTsKLQkJeGlucGNiLmZsYWdzID0gaW5wLT5zY3RwX2Zs
YWdzOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAw
MDA0OAotCQl4aW5wY2IuZmVhdHVyZXMgPSAodWludDMyX3QpaW5wLT5zY3RwX2ZlYXR1cmVzOwot
I2Vsc2UKLQkJeGlucGNiLmZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwotI2VuZGlmCi0J
CXhpbnBjYi50b3RhbF9zZW5kcyA9IGlucC0+dG90YWxfc2VuZHM7Ci0JCXhpbnBjYi50b3RhbF9y
ZWN2cyA9IGlucC0+dG90YWxfcmVjdnM7Ci0JCXhpbnBjYi50b3RhbF9ub3NwYWNlcyA9IGlucC0+
dG90YWxfbm9zcGFjZXM7Ci0JCXhpbnBjYi5mcmFnbWVudGF0aW9uX3BvaW50ID0gaW5wLT5zY3Rw
X2ZyYWdfcG9pbnQ7Ci0jaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19GcmVlQlNEX3Zl
cnNpb24gPCAxMDAxNTE3KSkKLQkJeGlucGNiLnNvY2tldCA9IGlucC0+c2N0cF9zb2NrZXQ7Ci0j
ZW5kaWYKLQkJc28gPSBpbnAtPnNjdHBfc29ja2V0OwotCQlpZiAoKHNvID09IE5VTEwpIHx8Ci0J
CSAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7Ci0JCQl4aW5wY2IucWxlbiA9IDA7Ci0J
CQl4aW5wY2IubWF4cWxlbiA9IDA7Ci0JCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTIwMDAzNAotCQkJeGlucGNiLnFsZW4gPSBzby0+
c29sX3FsZW47Ci0jZWxzZQotCQkJeGlucGNiLnFsZW4gPSBzby0+c29fcWxlbjsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5Ngot
I2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKLQkJCXhpbnBjYi5xbGVuX29sZCA9IHNv
LT5zb2xfcWxlbiA+IFVTSFJUX01BWCA/Ci0JCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBz
by0+c29sX3FsZW47Ci0jZWxzZQotCQkJeGlucGNiLnFsZW5fb2xkID0gc28tPnNvX3FsZW4gPiBV
U0hSVF9NQVggPwotCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNvX3FsZW47Ci0j
ZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDEyMDAwMzQKLQkJCXhpbnBjYi5tYXhxbGVuID0gc28tPnNvbF9xbGltaXQ7Ci0jZWxz
ZQotCQkJeGlucGNiLm1heHFsZW4gPSBzby0+c29fcWxpbWl0OwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Ci0jaWYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gMTIwMDAzNAotCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvbF9x
bGltaXQgPiBVU0hSVF9NQVggPwotCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNv
bF9xbGltaXQ7Ci0jZWxzZQotCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNvX3FsaW1pdCA+
IFVTSFJUX01BWCA/Ci0JCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+c29fcWxpbWl0
OwotI2VuZGlmCi0jZW5kaWYKLQkJfQotCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOwotCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQllcnJvciA9
IFNZU0NUTF9PVVQocmVxLCAmeGlucGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX2lucGNiKSk7Ci0J
CWlmIChlcnJvcikgewotCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCXJldHVybiAoZXJy
b3IpOwotCQl9Ci0JCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5w
KTsKLQkJZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBO
VUxMLCByZXEpOwotCQlpZiAoZXJyb3IpIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0J
CQlyZXR1cm4gKGVycm9yKTsKLQkJfQotCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9h
c29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWF0
b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQl4c3RjYi5sYXN0ID0gMDsKLQkJCXhzdGNiLmxvY2FsX3BvcnQgPSBudG9ocyhp
bnAtPnNjdHBfbHBvcnQpOwotCQkJeHN0Y2IucmVtb3RlX3BvcnQgPSBudG9ocyhzdGNiLT5ycG9y
dCk7Ci0JCQlpZiAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uICE9IE5VTEwpCi0JCQkJ
eHN0Y2IucHJpbWFyeV9hZGRyID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5f
bF9hZGRyOwotCQkJeHN0Y2IuaGVhcnRiZWF0X2ludGVydmFsID0gc3RjYi0+YXNvYy5oZWFydF9i
ZWF0X2RlbGF5OwotCQkJeHN0Y2Iuc3RhdGUgPSAodWludDMyX3Qpc2N0cF9tYXBfYXNzb2Nfc3Rh
dGUoc3RjYi0+YXNvYy5zdGF0ZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCS8qIDcuMCBkb2VzIG5vdCBzdXBwb3J0IHRoZXNl
ICovCi0JCQl4c3RjYi5hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JCQl4c3Rj
Yi5wZWVyc19yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOwotI2VuZGlmCi0jZWxzZQotCQkJ
eHN0Y2IuYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQkJeHN0Y2IucGVlcnNf
cnduZCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLSNlbmRpZgotCQkJeHN0Y2IuaW5fc3RyZWFt
cyA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7Ci0JCQl4c3RjYi5vdXRfc3RyZWFtcyA9IHN0Y2It
PmFzb2Muc3RyZWFtb3V0Y250OwotCQkJeHN0Y2IubWF4X25yX3JldHJhbnMgPSBzdGNiLT5hc29j
Lm92ZXJhbGxfZXJyb3JfY291bnQ7Ci0JCQl4c3RjYi5wcmltYXJ5X3Byb2Nlc3MgPSAwOyAvKiBu
b3QgcmVhbGx5IHN1cHBvcnRlZCB5ZXQgKi8KLQkJCXhzdGNiLlQxX2V4cGlyZXJpZXMgPSBzdGNi
LT5hc29jLnRpbW9pbml0ICsgc3RjYi0+YXNvYy50aW1vY29va2llOwotCQkJeHN0Y2IuVDJfZXhw
aXJlcmllcyA9IHN0Y2ItPmFzb2MudGltb3NodXRkb3duICsgc3RjYi0+YXNvYy50aW1vc2h1dGRv
d25hY2s7Ci0JCQl4c3RjYi5yZXRyYW5zbWl0dGVkX3RzbnMgPSBzdGNiLT5hc29jLm1hcmtlZF9y
ZXRyYW5zOwotCQkJeHN0Y2Iuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNv
Yy5zdGFydF90aW1lLnR2X3NlYzsKLQkJCXhzdGNiLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50
MzJfdClzdGNiLT5hc29jLnN0YXJ0X3RpbWUudHZfdXNlYzsKLQkJCXhzdGNiLmRpc2NvbnRpbnVp
dHlfdGltZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5kaXNjb250aW51aXR5X3RpbWUu
dHZfc2VjOwotCQkJeHN0Y2IuZGlzY29udGludWl0eV90aW1lLnR2X3VzZWMgPSAodWludDMyX3Qp
c3RjYi0+YXNvYy5kaXNjb250aW51aXR5X3RpbWUudHZfdXNlYzsKLQkJCXhzdGNiLnRvdGFsX3Nl
bmRzID0gc3RjYi0+dG90YWxfc2VuZHM7Ci0JCQl4c3RjYi50b3RhbF9yZWN2cyA9IHN0Y2ItPnRv
dGFsX3JlY3ZzOwotCQkJeHN0Y2IubG9jYWxfdGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCQkJ
eHN0Y2IucmVtb3RlX3RhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOwotCQkJeHN0Y2IuaW5pdGlh
bF90c24gPSBzdGNiLT5hc29jLmluaXRfc2VxX251bWJlcjsKLQkJCXhzdGNiLmhpZ2hlc3RfdHNu
ID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDE7Ci0JCQl4c3RjYi5jdW11bGF0aXZlX3RzbiA9
IHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXE7Ci0JCQl4c3RjYi5jdW11bGF0aXZlX3Rzbl9hY2sg
PSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuOwotCQkJeHN0Y2IubXR1ID0gc3RjYi0+YXNvYy5z
bWFsbGVzdF9tdHU7Ci0JCQl4c3RjYi5yZWZjbnQgPSBzdGNiLT5hc29jLnJlZmNudDsKLQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJZXJy
b3IgPSBTWVNDVExfT1VUKHJlcSwgJnhzdGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX3RjYikpOwot
CQkJaWYgKGVycm9yKSB7Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJcmV0dXJuIChlcnJvcik7
Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNzZXMoaW5wLCBz
dGNiLCByZXEpOwotCQkJaWYgKGVycm9yKSB7Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
LQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJcmV0
dXJuIChlcnJvcik7Ci0JCQl9Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7Ci0JCQkJeHJhZGRyLmxhc3QgPSAwOwotCQkJCXhyYWRkci5hZGRyZXNz
ID0gbmV0LT5yby5fbF9hZGRyOwotCQkJCXhyYWRkci5hY3RpdmUgPSAoKG5ldC0+ZGVzdF9zdGF0
ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpID09IFNDVFBfQUREUl9SRUFDSEFCTEUpOwotCQkJCXhy
YWRkci5jb25maXJtZWQgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1F
RCkgPT0gMCk7Ci0JCQkJeHJhZGRyLmhlYXJ0YmVhdF9lbmFibGVkID0gKChuZXQtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfTk9IQikgPT0gMCk7Ci0JCQkJeHJhZGRyLnBvdGVudGlhbGx5X2ZhaWxl
ZCA9ICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSA9PSBTQ1RQX0FERFJfUEYpOwot
CQkJCXhyYWRkci5ydG8gPSBuZXQtPlJUTzsKLQkJCQl4cmFkZHIubWF4X3BhdGhfcnR4ID0gbmV0
LT5mYWlsdXJlX3RocmVzaG9sZDsKLQkJCQl4cmFkZHIucnR4ID0gbmV0LT5tYXJrZWRfcmV0cmFu
czsKLQkJCQl4cmFkZHIuZXJyb3JfY291bnRlciA9IG5ldC0+ZXJyb3JfY291bnQ7Ci0JCQkJeHJh
ZGRyLmN3bmQgPSBuZXQtPmN3bmQ7Ci0JCQkJeHJhZGRyLmZsaWdodF9zaXplID0gbmV0LT5mbGln
aHRfc2l6ZTsKLQkJCQl4cmFkZHIubXR1ID0gbmV0LT5tdHU7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCQl4cmFkZHIucnR0ID0g
bmV0LT5ydHQgLyAxMDAwOwotCQkJCXhyYWRkci5oZWFydGJlYXRfaW50ZXJ2YWwgPSBuZXQtPmhl
YXJ0X2JlYXRfZGVsYXk7Ci0JCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0LT5zc3RocmVzaDsKLSNl
bmRpZgotI2Vsc2UKLQkJCQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOwotCQkJCXhyYWRk
ci5oZWFydGJlYXRfaW50ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7Ci0JCQkJeHJhZGRy
LnNzdGhyZXNoID0gbmV0LT5zc3RocmVzaDsKLSNlbmRpZgotCQkJCXhyYWRkci5zdGFydF90aW1l
LnR2X3NlYyA9ICh1aW50MzJfdCluZXQtPnN0YXJ0X3RpbWUudHZfc2VjOwotCQkJCXhyYWRkci5z
dGFydF90aW1lLnR2X3VzZWMgPSAodWludDMyX3QpbmV0LT5zdGFydF90aW1lLnR2X3VzZWM7Ci0J
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwot
CQkJCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBf
cmFkZHIpKTsKLQkJCQlpZiAoZXJyb3IpIHsKLQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
LQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQly
ZXR1cm4gKGVycm9yKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOwotCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0JCQl9Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5h
c29jLnJlZmNudCwgMSk7Ci0JCQltZW1zZXQoKHZvaWQgKikmeHJhZGRyLCAwLCBzaXplb2Yoc3Ry
dWN0IHhzY3RwX3JhZGRyKSk7Ci0JCQl4cmFkZHIubGFzdCA9IDE7Ci0JCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCWVycm9yID0gU1lTQ1RM
X09VVChyZXEsICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKLQkJCWlmIChl
cnJvcikgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQkJcmV0dXJuIChlcnJvcik7
Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQl9Ci0JCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKLQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JCW1lbXNldCgodm9pZCAqKSZ4c3RjYiwg
MCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpKTsKLQkJeHN0Y2IubGFzdCA9IDE7Ci0JCWVycm9y
ID0gU1lTQ1RMX09VVChyZXEsICZ4c3RjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpKTsKLQkJ
aWYgKGVycm9yKSB7Ci0JCQlyZXR1cm4gKGVycm9yKTsKLQkJfQotc2tpcDoKLQkJU0NUUF9JTlBf
SU5GT19STE9DSygpOwotCX0KLQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQotCW1lbXNldCgo
dm9pZCAqKSZ4aW5wY2IsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2IpKTsKLQl4aW5wY2Iu
bGFzdCA9IDE7Ci0JZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhpbnBjYiwgc2l6ZW9mKHN0cnVj
dCB4c2N0cF9pbnBjYikpOwotCXJldHVybiAoZXJyb3IpOwotfQotCi0jaWYgZGVmaW5lZChfX0FQ
UExFX18pCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZyBTWVND
VExfSEFORExFUl9BUkdTCi17Ci0jcHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQotI2Vsc2UKLXN0
YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV91ZHBfdHVubmVsaW5nKFNZU0NUTF9IQU5ETEVS
X0FSR1MpCi17Ci0jZW5kaWYKLQlpbnQgZXJyb3I7Ci0JdWludDMyX3Qgb2xkLCBuZXc7Ci0KLQlT
Q1RQX0lOUF9JTkZPX1JMT0NLKCk7Ci0Jb2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90
dW5uZWxpbmdfcG9ydCk7Ci0JU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JbmV3ID0gb2xkOwot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDAxMDAKLSNpZmRlZiBWSU1BR0UKLQllcnJvciA9IHZu
ZXRfc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbHNlCi0JZXJyb3Ig
PSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotI2VuZGlmCi0jZWxzZQot
CWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbmRpZgot
CWlmICgoZXJyb3IgPT0gMCkgJiYKLSNpZiBkZWZpbmVkIChfX0FQUExFX18pCi0JICAgIChyZXEt
Pm5ld3B0ciAhPSBVU0VSX0FERFJfTlVMTCkpIHsKLSNlbHNlCi0JICAgIChyZXEtPm5ld3B0ciAh
PSBOVUxMKSkgewotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9JTlBf
SU5GT19XTE9DSygpOwotCQlzY3RwX292ZXJfdWRwX3Jlc3RhcnQoKTsKLQkJU0NUUF9JTlBfSU5G
T19XVU5MT0NLKCk7Ci0jZWxzZQotI2lmIChTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4g
PT0gMCkKLQkJaWYgKG5ldyA+IFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01BWCkgewotI2Vs
c2UKLQkJaWYgKChuZXcgPCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4pIHx8Ci0JCSAg
ICAobmV3ID4gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfTUFYKSkgewotI2VuZGlmCi0JCQll
cnJvciA9IEVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKLQkJ
CVNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpID0gbmV3OwotCQkJaWYg
KG9sZCAhPSAwKSB7Ci0JCQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCQl9Ci0JCQlpZiAobmV3
ICE9IDApIHsKLQkJCQllcnJvciA9IHNjdHBfb3Zlcl91ZHBfc3RhcnQoKTsKLQkJCX0KLQkJCVND
VFBfSU5QX0lORk9fV1VOTE9DSygpOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChlcnJvcik7
Ci19Ci0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLWludCBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZh
Y2Uoc3RydWN0IGlmbmV0ICopOwotCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdm13
YXJlX2ludGVyZmFjZXMgU1lTQ1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQoYXJn
MSwgYXJnMikKLQlpbnQgZXJyb3I7Ci0JdWludDMyX3Qgb2xkLCBuZXc7Ci0KLQlvbGQgPSBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKTsKLQluZXcgPSBvbGQ7
Ci0JZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotCWlmICgo
ZXJyb3IgPT0gMCkgJiYgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewotCQlpZiAo
KG5ldyA8IFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX01JTikgfHwKLQkJICAgIChu
ZXcgPiBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NQVgpKSB7Ci0JCQllcnJvciA9
IEVJTlZBTDsKLQkJfSBlbHNlIHsKLQkJCWlmICgob2xkID09IDEpICYmIChuZXcgPT0gMCkpIHsK
LQkJCQlzY3RwX2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2Us
IDEpOwotCQkJfQotCQkJaWYgKChvbGQgPT0gMCkgJiYgKG5ldyA9PSAxKSkgewotCQkJCXNjdHBf
YWRkX29yX2RlbF9pbnRlcmZhY2VzKHNjdHBfaXNfdm13YXJlX2ludGVyZmFjZSwgMCk7Ci0JCQl9
Ci0JCQlpZiAob2xkICE9IG5ldykgewotCQkJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVf
dm13YXJlX2ludGVyZmFjZXMpID0gbmV3OwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAoZXJyb3Ip
OwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBpbnQKLXNjdHBf
c3lzY3RsX2hhbmRsZV9hdXRoIFNZU0NUTF9IQU5ETEVSX0FSR1MKLXsKLSNwcmFnbWEgdW51c2Vk
KGFyZzEsIGFyZzIpCi0jZWxzZQotc3RhdGljIGludAotc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgo
U1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJvcjsKLQl1aW50MzJfdCBu
ZXc7Ci0KLQluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUpOwotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA8IDEwMDAxMDAKLSNpZmRlZiBWSU1BR0UKLQllcnJvciA9IHZuZXRfc3lz
Y3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbHNlCi0JZXJyb3IgPSBzeXNj
dGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOwotI2VuZGlmCi0jZWxzZQotCWVycm9y
ID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKLSNlbmRpZgotCWlmICgo
ZXJyb3IgPT0gMCkgJiYKLSNpZiBkZWZpbmVkIChfX0FQUExFX18pCi0JICAgIChyZXEtPm5ld3B0
ciAhPSBVU0VSX0FERFJfTlVMTCkpIHsKLSNlbHNlCi0JICAgIChyZXEtPm5ld3B0ciAhPSBOVUxM
KSkgewotI2VuZGlmCi0jaWYgKFNDVFBDVExfQVVUSF9FTkFCTEVfTUlOID09IDApCi0JCWlmICgo
bmV3ID4gU0NUUENUTF9BVVRIX0VOQUJMRV9NQVgpIHx8Ci0JCSAgICAoKG5ldyA9PSAwKSAmJiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpID09IDEpKSkgewotI2Vsc2UKLQkJ
aWYgKChuZXcgPCBTQ1RQQ1RMX0FVVEhfRU5BQkxFX01JTikgfHwKLQkJICAgIChuZXcgPiBTQ1RQ
Q1RMX0FVVEhfRU5BQkxFX01BWCkgfHwKLQkJICAgICgobmV3ID09IDApICYmIChTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSkgPT0gMSkpKSB7Ci0jZW5kaWYKLQkJCWVycm9yID0g
RUlOVkFMOwotCQl9IGVsc2UgewotCQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxl
KSA9IG5ldzsKLQkJfQotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotc3RhdGljIGludAotc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiBTWVNDVExfSEFO
RExFUl9BUkdTCi17Ci0jcHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQotI2Vsc2UKLXN0YXRpYyBp
bnQKLXNjdHBfc3lzY3RsX2hhbmRsZV9hc2NvbmYoU1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNl
bmRpZgotCWludCBlcnJvcjsKLQl1aW50MzJfdCBuZXc7Ci0KLQluZXcgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYXNjb25mX2VuYWJsZSk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAwMDU2ICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDEwMAot
I2lmZGVmIFZJTUFHRQotCWVycm9yID0gdm5ldF9zeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3
LCAwLCByZXEpOwotI2Vsc2UKLQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcs
IDAsIHJlcSk7Ci0jZW5kaWYKLSNlbHNlCi0JZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRw
LCAmbmV3LCAwLCByZXEpOwotI2VuZGlmCi0JaWYgKChlcnJvciA9PSAwKSAmJgotI2lmIGRlZmlu
ZWQgKF9fQVBQTEVfXykKLQkgICAgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgewot
I2Vsc2UKLQkgICAgKHJlcS0+bmV3cHRyICE9IE5VTEwpKSB7Ci0jZW5kaWYKLSNpZiAoU0NUUENU
TF9BU0NPTkZfRU5BQkxFX01JTiA9PSAwKQotCQlpZiAoKG5ldyA+IFNDVFBDVExfQVNDT05GX0VO
QUJMRV9NQVgpIHx8Ci0JCSAgICAoKG5ldyA9PSAxKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2F1dGhfZW5hYmxlKSA9PSAwKSkpIHsKLSNlbHNlCi0JCWlmICgobmV3IDwgU0NUUENUTF9BU0NP
TkZfRU5BQkxFX01JTikgfHwKLQkJICAgIChuZXcgPiBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFY
KSB8fAotCQkgICAgKChuZXcgPT0gMSkgJiYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2Vu
YWJsZSkgPT0gMCkpKSB7Ci0jZW5kaWYKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2Ugewot
CQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpID0gbmV3OwotCQl9Ci0JfQot
CXJldHVybiAoZXJyb3IpOwotfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMgaW50
Ci1zY3RwX3N5c2N0bF9oYW5kbGVfc3RhdHMgU1lTQ1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdt
YSB1bnVzZWQob2lkcCwgYXJnMSwgYXJnMikKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0
bF9oYW5kbGVfc3RhdHMoU1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJv
cjsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVk
KFNDVFBfVVNFX1BFUkNQVV9TVEFUKQotCXN0cnVjdCBzY3Rwc3RhdCAqc2Fycnk7Ci0Jc3RydWN0
IHNjdHBzdGF0IHNiOwotCWludCBjcHU7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cHN0YXQgc2JfdGVt
cDsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19BUFBMRV9fKQotCWlmICgocmVxLT5uZXdwdHIg
IT0gVVNFUl9BRERSX05VTEwpICYmCi0jZWxzZQotCWlmICgocmVxLT5uZXdwdHIgIT0gTlVMTCkg
JiYKLSNlbmRpZgotCSAgICAocmVxLT5uZXdsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkp
KSB7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlt
ZW1zZXQoJnNiX3RlbXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQotCWlmIChyZXEt
Pm5ld3B0ciAhPSBOVUxMKSB7Ci0JCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgJnNiX3RlbXAsIHNp
emVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQkJaWYgKGVycm9yICE9IDApIHsKLQkJCXJldHVybiAo
ZXJyb3IpOwotCQl9Ci0JfQotI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BF
UkNQVV9TVEFUKQotCW1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOwotCWZvciAoY3B1ID0gMDsg
Y3B1IDwgbXBfbWF4aWQ7IGNwdSsrKSB7Ci0JCXNhcnJ5ID0gJlNDVFBfQkFTRV9TVEFUU1tjcHVd
OwotCQlpZiAoc2FycnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYyA+IHNiLnNjdHBz
X2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYykgewotCQkJc2Iuc2N0cHNfZGlzY29udGludWl0eXRp
bWUudHZfc2VjID0gc2FycnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYzsKLQkJCXNi
LnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3VzZWMgPSBzYXJyeS0+c2N0cHNfZGlzY29udGlu
dWl0eXRpbWUudHZfdXNlYzsKLQkJfQotCQlzYi5zY3Rwc19jdXJyZXN0YWIgKz0gc2FycnktPnNj
dHBzX2N1cnJlc3RhYjsKLQkJc2Iuc2N0cHNfYWN0aXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX2Fj
dGl2ZWVzdGFiOwotCQlzYi5zY3Rwc19yZXN0YXJ0ZXN0YWIgKz0gc2FycnktPnNjdHBzX3Jlc3Rh
cnRlc3RhYjsKLQkJc2Iuc2N0cHNfY29sbGlzaW9uZXN0YWIgKz0gc2FycnktPnNjdHBzX2NvbGxp
c2lvbmVzdGFiOwotCQlzYi5zY3Rwc19wYXNzaXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX3Bhc3Np
dmVlc3RhYjsKLQkJc2Iuc2N0cHNfYWJvcnRlZCArPSBzYXJyeS0+c2N0cHNfYWJvcnRlZDsKLQkJ
c2Iuc2N0cHNfc2h1dGRvd24gKz0gc2FycnktPnNjdHBzX3NodXRkb3duOwotCQlzYi5zY3Rwc19v
dXRvZnRoZWJsdWUgKz0gc2FycnktPnNjdHBzX291dG9mdGhlYmx1ZTsKLQkJc2Iuc2N0cHNfY2hl
Y2tzdW1lcnJvcnMgKz0gc2FycnktPnNjdHBzX2NoZWNrc3VtZXJyb3JzOwotCQlzYi5zY3Rwc19v
dXRjb250cm9sY2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19vdXRjb250cm9sY2h1bmtzOwotCQlzYi5z
Y3Rwc19vdXRvcmRlcmNodW5rcyArPSBzYXJyeS0+c2N0cHNfb3V0b3JkZXJjaHVua3M7Ci0JCXNi
LnNjdHBzX291dHVub3JkZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX291dHVub3JkZXJjaHVua3M7
Ci0JCXNiLnNjdHBzX2luY29udHJvbGNodW5rcyArPSBzYXJyeS0+c2N0cHNfaW5jb250cm9sY2h1
bmtzOwotCQlzYi5zY3Rwc19pbm9yZGVyY2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19pbm9yZGVyY2h1
bmtzOwotCQlzYi5zY3Rwc19pbnVub3JkZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX2ludW5vcmRl
cmNodW5rczsKLQkJc2Iuc2N0cHNfZnJhZ3Vzcm1zZ3MgKz0gc2FycnktPnNjdHBzX2ZyYWd1c3Jt
c2dzOwotCQlzYi5zY3Rwc19yZWFzbXVzcm1zZ3MgKz0gc2FycnktPnNjdHBzX3JlYXNtdXNybXNn
czsKLQkJc2Iuc2N0cHNfb3V0cGFja2V0cyArPSBzYXJyeS0+c2N0cHNfb3V0cGFja2V0czsKLQkJ
c2Iuc2N0cHNfaW5wYWNrZXRzICs9IHNhcnJ5LT5zY3Rwc19pbnBhY2tldHM7Ci0JCXNiLnNjdHBz
X3JlY3ZwYWNrZXRzICs9IHNhcnJ5LT5zY3Rwc19yZWN2cGFja2V0czsKLQkJc2Iuc2N0cHNfcmVj
dmRhdGFncmFtcyArPSBzYXJyeS0+c2N0cHNfcmVjdmRhdGFncmFtczsKLQkJc2Iuc2N0cHNfcmVj
dnBrdHdpdGhkYXRhICs9IHNhcnJ5LT5zY3Rwc19yZWN2cGt0d2l0aGRhdGE7Ci0JCXNiLnNjdHBz
X3JlY3ZzYWNrcyArPSBzYXJyeS0+c2N0cHNfcmVjdnNhY2tzOwotCQlzYi5zY3Rwc19yZWN2ZGF0
YSArPSBzYXJyeS0+c2N0cHNfcmVjdmRhdGE7Ci0JCXNiLnNjdHBzX3JlY3ZkdXBkYXRhICs9IHNh
cnJ5LT5zY3Rwc19yZWN2ZHVwZGF0YTsKLQkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdCArPSBzYXJy
eS0+c2N0cHNfcmVjdmhlYXJ0YmVhdDsKLQkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdGFjayArPSBz
YXJyeS0+c2N0cHNfcmVjdmhlYXJ0YmVhdGFjazsKLQkJc2Iuc2N0cHNfcmVjdmVjbmUgKz0gc2Fy
cnktPnNjdHBzX3JlY3ZlY25lOwotCQlzYi5zY3Rwc19yZWN2YXV0aCArPSBzYXJyeS0+c2N0cHNf
cmVjdmF1dGg7Ci0JCXNiLnNjdHBzX3JlY3ZhdXRobWlzc2luZyArPSBzYXJyeS0+c2N0cHNfcmVj
dmF1dGhtaXNzaW5nOwotCQlzYi5zY3Rwc19yZWN2aXZhbGhtYWNpZCArPSBzYXJyeS0+c2N0cHNf
cmVjdml2YWxobWFjaWQ7Ci0JCXNiLnNjdHBzX3JlY3ZpdmFsa2V5aWQgKz0gc2FycnktPnNjdHBz
X3JlY3ZpdmFsa2V5aWQ7Ci0JCXNiLnNjdHBzX3JlY3ZhdXRoZmFpbGVkICs9IHNhcnJ5LT5zY3Rw
c19yZWN2YXV0aGZhaWxlZDsKLQkJc2Iuc2N0cHNfcmVjdmV4cHJlc3MgKz0gc2FycnktPnNjdHBz
X3JlY3ZleHByZXNzOwotCQlzYi5zY3Rwc19yZWN2ZXhwcmVzc20gKz0gc2FycnktPnNjdHBzX3Jl
Y3ZleHByZXNzbTsKLQkJc2Iuc2N0cHNfcmVjdm5vY3JjICs9IHNhcnJ5LT5zY3Rwc19yZWN2bm9j
cmM7Ci0JCXNiLnNjdHBzX3JlY3Zzd2NyYyArPSBzYXJyeS0+c2N0cHNfcmVjdnN3Y3JjOwotCQlz
Yi5zY3Rwc19yZWN2aHdjcmMgKz0gc2FycnktPnNjdHBzX3JlY3Zod2NyYzsKLQkJc2Iuc2N0cHNf
c2VuZHBhY2tldHMgKz0gc2FycnktPnNjdHBzX3NlbmRwYWNrZXRzOwotCQlzYi5zY3Rwc19zZW5k
c2Fja3MgKz0gc2FycnktPnNjdHBzX3NlbmRzYWNrczsKLQkJc2Iuc2N0cHNfc2VuZGRhdGEgKz0g
c2FycnktPnNjdHBzX3NlbmRkYXRhOwotCQlzYi5zY3Rwc19zZW5kcmV0cmFuc2RhdGEgKz0gc2Fy
cnktPnNjdHBzX3NlbmRyZXRyYW5zZGF0YTsKLQkJc2Iuc2N0cHNfc2VuZGZhc3RyZXRyYW5zICs9
IHNhcnJ5LT5zY3Rwc19zZW5kZmFzdHJldHJhbnM7Ci0JCXNiLnNjdHBzX3NlbmRtdWx0ZmFzdHJl
dHJhbnMgKz0gc2FycnktPnNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnM7Ci0JCXNiLnNjdHBzX3Nl
bmRoZWFydGJlYXQgKz0gc2FycnktPnNjdHBzX3NlbmRoZWFydGJlYXQ7Ci0JCXNiLnNjdHBzX3Nl
bmRlY25lICs9IHNhcnJ5LT5zY3Rwc19zZW5kZWNuZTsKLQkJc2Iuc2N0cHNfc2VuZGF1dGggKz0g
c2FycnktPnNjdHBzX3NlbmRhdXRoOwotCQlzYi5zY3Rwc19zZW5kZXJyb3JzICs9IHNhcnJ5LT5z
Y3Rwc19zZW5kZXJyb3JzOwotCQlzYi5zY3Rwc19zZW5kbm9jcmMgKz0gc2FycnktPnNjdHBzX3Nl
bmRub2NyYzsKLQkJc2Iuc2N0cHNfc2VuZHN3Y3JjICs9IHNhcnJ5LT5zY3Rwc19zZW5kc3djcmM7
Ci0JCXNiLnNjdHBzX3NlbmRod2NyYyArPSBzYXJyeS0+c2N0cHNfc2VuZGh3Y3JjOwotCQlzYi5z
Y3Rwc19wZHJwZm1ib3ggKz0gc2FycnktPnNjdHBzX3BkcnBmbWJveDsKLQkJc2Iuc2N0cHNfcGRy
cGZlaG9zICs9IHNhcnJ5LT5zY3Rwc19wZHJwZmVob3M7Ci0JCXNiLnNjdHBzX3BkcnBtYmRhICs9
IHNhcnJ5LT5zY3Rwc19wZHJwbWJkYTsKLQkJc2Iuc2N0cHNfcGRycG1iY3QgKz0gc2FycnktPnNj
dHBzX3BkcnBtYmN0OwotCQlzYi5zY3Rwc19wZHJwYndycHQgKz0gc2FycnktPnNjdHBzX3BkcnBi
d3JwdDsKLQkJc2Iuc2N0cHNfcGRycGNydXB0ICs9IHNhcnJ5LT5zY3Rwc19wZHJwY3J1cHQ7Ci0J
CXNiLnNjdHBzX3BkcnBuZWRhdCArPSBzYXJyeS0+c2N0cHNfcGRycG5lZGF0OwotCQlzYi5zY3Rw
c19wZHJwcGRicmsgKz0gc2FycnktPnNjdHBzX3BkcnBwZGJyazsKLQkJc2Iuc2N0cHNfcGRycHRz
bm5mICs9IHNhcnJ5LT5zY3Rwc19wZHJwdHNubmY7Ci0JCXNiLnNjdHBzX3BkcnBkbmZuZCArPSBz
YXJyeS0+c2N0cHNfcGRycGRuZm5kOwotCQlzYi5zY3Rwc19wZHJwZGl3bnAgKz0gc2FycnktPnNj
dHBzX3BkcnBkaXducDsKLQkJc2Iuc2N0cHNfcGRycGRpenJ3ICs9IHNhcnJ5LT5zY3Rwc19wZHJw
ZGl6cnc7Ci0JCXNiLnNjdHBzX3BkcnBiYWRkICs9IHNhcnJ5LT5zY3Rwc19wZHJwYmFkZDsKLQkJ
c2Iuc2N0cHNfcGRycG1hcmsgKz0gc2FycnktPnNjdHBzX3BkcnBtYXJrOwotCQlzYi5zY3Rwc190
aW1vaXRlcmF0b3IgKz0gc2FycnktPnNjdHBzX3RpbW9pdGVyYXRvcjsKLQkJc2Iuc2N0cHNfdGlt
b2RhdGEgKz0gc2FycnktPnNjdHBzX3RpbW9kYXRhOwotCQlzYi5zY3Rwc190aW1vd2luZG93cHJv
YmUgKz0gc2FycnktPnNjdHBzX3RpbW93aW5kb3dwcm9iZTsKLQkJc2Iuc2N0cHNfdGltb2luaXQg
Kz0gc2FycnktPnNjdHBzX3RpbW9pbml0OwotCQlzYi5zY3Rwc190aW1vc2FjayArPSBzYXJyeS0+
c2N0cHNfdGltb3NhY2s7Ci0JCXNiLnNjdHBzX3RpbW9zaHV0ZG93biArPSBzYXJyeS0+c2N0cHNf
dGltb3NodXRkb3duOwotCQlzYi5zY3Rwc190aW1vaGVhcnRiZWF0ICs9IHNhcnJ5LT5zY3Rwc190
aW1vaGVhcnRiZWF0OwotCQlzYi5zY3Rwc190aW1vY29va2llICs9IHNhcnJ5LT5zY3Rwc190aW1v
Y29va2llOwotCQlzYi5zY3Rwc190aW1vc2VjcmV0ICs9IHNhcnJ5LT5zY3Rwc190aW1vc2VjcmV0
OwotCQlzYi5zY3Rwc190aW1vcGF0aG10dSArPSBzYXJyeS0+c2N0cHNfdGltb3BhdGhtdHU7Ci0J
CXNiLnNjdHBzX3RpbW9zaHV0ZG93bmFjayArPSBzYXJyeS0+c2N0cHNfdGltb3NodXRkb3duYWNr
OwotCQlzYi5zY3Rwc190aW1vc2h1dGRvd25ndWFyZCArPSBzYXJyeS0+c2N0cHNfdGltb3NodXRk
b3duZ3VhcmQ7Ci0JCXNiLnNjdHBzX3RpbW9zdHJtcnN0ICs9IHNhcnJ5LT5zY3Rwc190aW1vc3Ry
bXJzdDsKLQkJc2Iuc2N0cHNfdGltb2Vhcmx5ZnIgKz0gc2FycnktPnNjdHBzX3RpbW9lYXJseWZy
OwotCQlzYi5zY3Rwc190aW1vYXNjb25mICs9IHNhcnJ5LT5zY3Rwc190aW1vYXNjb25mOwotCQlz
Yi5zY3Rwc190aW1vZGVscHJpbSArPSBzYXJyeS0+c2N0cHNfdGltb2RlbHByaW07Ci0JCXNiLnNj
dHBzX3RpbW9hdXRvY2xvc2UgKz0gc2FycnktPnNjdHBzX3RpbW9hdXRvY2xvc2U7Ci0JCXNiLnNj
dHBzX3RpbW9hc3NvY2tpbGwgKz0gc2FycnktPnNjdHBzX3RpbW9hc3NvY2tpbGw7Ci0JCXNiLnNj
dHBzX3RpbW9pbnBraWxsICs9IHNhcnJ5LT5zY3Rwc190aW1vaW5wa2lsbDsKLQkJc2Iuc2N0cHNf
aGRyb3BzICs9IHNhcnJ5LT5zY3Rwc19oZHJvcHM7Ci0JCXNiLnNjdHBzX2JhZHN1bSArPSBzYXJy
eS0+c2N0cHNfYmFkc3VtOwotCQlzYi5zY3Rwc19ub3BvcnQgKz0gc2FycnktPnNjdHBzX25vcG9y
dDsKLQkJc2Iuc2N0cHNfYmFkdnRhZyArPSBzYXJyeS0+c2N0cHNfYmFkdnRhZzsKLQkJc2Iuc2N0
cHNfYmFkc2lkICs9IHNhcnJ5LT5zY3Rwc19iYWRzaWQ7Ci0JCXNiLnNjdHBzX25vbWVtICs9IHNh
cnJ5LT5zY3Rwc19ub21lbTsKLQkJc2Iuc2N0cHNfZmFzdHJldHJhbnNpbnJ0dCArPSBzYXJyeS0+
c2N0cHNfZmFzdHJldHJhbnNpbnJ0dDsKLQkJc2Iuc2N0cHNfbWFya2VkcmV0cmFucyArPSBzYXJy
eS0+c2N0cHNfbWFya2VkcmV0cmFuczsKLQkJc2Iuc2N0cHNfbmFnbGVzZW50ICs9IHNhcnJ5LT5z
Y3Rwc19uYWdsZXNlbnQ7Ci0JCXNiLnNjdHBzX25hZ2xlcXVldWVkICs9IHNhcnJ5LT5zY3Rwc19u
YWdsZXF1ZXVlZDsKLQkJc2Iuc2N0cHNfbWF4YnVyc3RxdWV1ZWQgKz0gc2FycnktPnNjdHBzX21h
eGJ1cnN0cXVldWVkOwotCQlzYi5zY3Rwc19pZm5vbWVtcXVldWVkICs9IHNhcnJ5LT5zY3Rwc19p
Zm5vbWVtcXVldWVkOwotCQlzYi5zY3Rwc193aW5kb3dwcm9iZWQgKz0gc2FycnktPnNjdHBzX3dp
bmRvd3Byb2JlZDsKLQkJc2Iuc2N0cHNfbG93bGV2ZWxlcnIgKz0gc2FycnktPnNjdHBzX2xvd2xl
dmVsZXJyOwotCQlzYi5zY3Rwc19sb3dsZXZlbGVycnVzciArPSBzYXJyeS0+c2N0cHNfbG93bGV2
ZWxlcnJ1c3I7Ci0JCXNiLnNjdHBzX2RhdGFkcm9wY2hrbG10ICs9IHNhcnJ5LT5zY3Rwc19kYXRh
ZHJvcGNoa2xtdDsKLQkJc2Iuc2N0cHNfZGF0YWRyb3Byd25kICs9IHNhcnJ5LT5zY3Rwc19kYXRh
ZHJvcHJ3bmQ7Ci0JCXNiLnNjdHBzX2VjbmVyZWR1Y2VkY3duZCArPSBzYXJyeS0+c2N0cHNfZWNu
ZXJlZHVjZWRjd25kOwotCQlzYi5zY3Rwc192dGFnZXhwcmVzcyArPSBzYXJyeS0+c2N0cHNfdnRh
Z2V4cHJlc3M7Ci0JCXNiLnNjdHBzX3Z0YWdib2d1cyArPSBzYXJyeS0+c2N0cHNfdnRhZ2JvZ3Vz
OwotCQlzYi5zY3Rwc19wcmltYXJ5X3JhbmRyeSArPSBzYXJyeS0+c2N0cHNfcHJpbWFyeV9yYW5k
cnk7Ci0JCXNiLnNjdHBzX2NtdF9yYW5kcnkgKz0gc2FycnktPnNjdHBzX2NtdF9yYW5kcnk7Ci0J
CXNiLnNjdHBzX3Nsb3dwYXRoX3NhY2sgKz0gc2FycnktPnNjdHBzX3Nsb3dwYXRoX3NhY2s7Ci0J
CXNiLnNjdHBzX3d1X3NhY2tzX3NlbnQgKz0gc2FycnktPnNjdHBzX3d1X3NhY2tzX3NlbnQ7Ci0J
CXNiLnNjdHBzX3NlbmRzX3dpdGhfZmxhZ3MgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dpdGhfZmxh
Z3M7Ci0JCXNiLnNjdHBzX3NlbmRzX3dpdGhfdW5vcmQgKz0gc2FycnktPnNjdHBzX3NlbmRzX3dp
dGhfdW5vcmQ7Ci0JCXNiLnNjdHBzX3NlbmRzX3dpdGhfZW9mICs9IHNhcnJ5LT5zY3Rwc19zZW5k
c193aXRoX2VvZjsKLQkJc2Iuc2N0cHNfc2VuZHNfd2l0aF9hYm9ydCArPSBzYXJyeS0+c2N0cHNf
c2VuZHNfd2l0aF9hYm9ydDsKLQkJc2Iuc2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHMgKz0gc2Fy
cnktPnNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzOwotCQlzYi5zY3Rwc19wcm90b2NvbF9kcmFp
bnNfZG9uZSArPSBzYXJyeS0+c2N0cHNfcHJvdG9jb2xfZHJhaW5zX2RvbmU7Ci0JCXNiLnNjdHBz
X3JlYWRfcGVla3MgKz0gc2FycnktPnNjdHBzX3JlYWRfcGVla3M7Ci0JCXNiLnNjdHBzX2NhY2hl
ZF9jaGsgKz0gc2FycnktPnNjdHBzX2NhY2hlZF9jaGs7Ci0JCXNiLnNjdHBzX2NhY2hlZF9zdHJt
b3EgKz0gc2FycnktPnNjdHBzX2NhY2hlZF9zdHJtb3E7Ci0JCXNiLnNjdHBzX2xlZnRfYWJhbmRv
biArPSBzYXJyeS0+c2N0cHNfbGVmdF9hYmFuZG9uOwotCQlzYi5zY3Rwc19zZW5kX2J1cnN0X2F2
b2lkICs9IHNhcnJ5LT5zY3Rwc19zZW5kX2J1cnN0X2F2b2lkOwotCQlzYi5zY3Rwc19zZW5kX2N3
bmRfYXZvaWQgKz0gc2FycnktPnNjdHBzX3NlbmRfY3duZF9hdm9pZDsKLQkJc2Iuc2N0cHNfZndk
dHNuX21hcF9vdmVyICs9IHNhcnJ5LT5zY3Rwc19md2R0c25fbWFwX292ZXI7Ci0JCWlmIChyZXEt
Pm5ld3B0ciAhPSBOVUxMKSB7Ci0JCQltZW1jcHkoc2FycnksICZzYl90ZW1wLCBzaXplb2Yoc3Ry
dWN0IHNjdHBzdGF0KSk7Ci0JCX0KLQl9Ci0JZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnNiLCBz
aXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7Ci0jZWxzZQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEs
ICZTQ1RQX0JBU0VfU1RBVFMsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLQlpZiAoZXJyb3Ig
IT0gMCkgewotCQlyZXR1cm4gKGVycm9yKTsKLQl9Ci0JaWYgKHJlcS0+bmV3cHRyICE9IE5VTEwp
IHsKLQkJbWVtY3B5KCZTQ1RQX0JBU0VfU1RBVFMsICZzYl90ZW1wLCBzaXplb2Yoc3RydWN0IHNj
dHBzdGF0KSk7Ci0JfQotI2VuZGlmCi0jZWxzZQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZT
Q1RQX0JBU0VfU1RBVFMsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKLSNlbmRpZgotCXJldHVy
biAoZXJyb3IpOwotfQotCi0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9s
b2cgU1lTQ1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMiwgb2lk
cCkKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nKFNZU0NU
TF9IQU5ETEVSX0FSR1MpCi17Ci0jZW5kaWYKLQlpbnQgZXJyb3I7Ci0KLSNpZiBkZWZpbmVkKF9f
V2luZG93c19fKQotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsIFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2cpLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7Ci0jZWxzZQotCWVycm9yID0gU1lTQ1RM
X09VVChyZXEsICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2xvZykpOwotI2VuZGlmCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xlYXIgU1lT
Q1RMX0hBTkRMRVJfQVJHUwotewotI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMiwgcmVxLCBvaWRw
KQotI2Vsc2UKLXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xlYXIo
U1lTQ1RMX0hBTkRMRVJfQVJHUykKLXsKLSNlbmRpZgotCWludCBlcnJvciA9IDA7Ci0jaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKLQlpbnQgdmFsdWUgPSAwOwotCi0JaWYgKHJlcS0+bmV3X2RhdGEg
PT0gTlVMTCkgewotCQlyZXR1cm4gKGVycm9yKTsKLQl9Ci0JZXJyb3IgPSBTWVNDVExfSU4ocmVx
LCAmdmFsdWUsIHNpemVvZihpbnQpKTsKLQlpZiAoZXJyb3IgPT0gMCAmJiB2YWx1ZSAhPSAwICYm
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpICE9IE5VTEwpIHsKLQkJbWVtc2V0KFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7Ci0JfQotI2Vs
c2UKLQotCW1lbXNldCgmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9sb2cpKTsKLSNlbmRpZgotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlmCi0KLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDEwMDAxMDAKLSNpZmRlZiBWSU1BR0UKLSNkZWZpbmUgU0NUUF9VSU5UX1NZ
U0NUTChuYW1lLCB2YXJfbmFtZSwgcHJlZml4KQkJCVwKLQlzdGF0aWMgaW50CQkJCQkJCVwKLQlz
Y3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZShTWVNDVExfSEFORExFUl9BUkdTKQkJXAotCXsJ
CQkJCQkJCVwKLQkJaW50IGVycm9yOwkJCQkJCVwKLQkJdWludDMyX3QgbmV3OwkJCQkJCVwKLQkJ
CQkJCQkJCVwKLQkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJXAotCQllcnJv
ciA9IHZuZXRfc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsJXAotCQlpZiAo
KGVycm9yID09IDApICYmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewkJXAotCQkJaWYgKChuZXcg
PCBwcmVmaXgjI19NSU4pIHx8CQkJXAotCQkJICAgIChuZXcgPiBwcmVmaXgjI19NQVgpKSB7CQkJ
XAotCQkJCWVycm9yID0gRUlOVkFMOwkJCQlcCi0JCQl9IGVsc2UgewkJCQkJXAotCQkJCVNDVFBf
QkFTRV9TWVNDVEwodmFyX25hbWUpID0gbmV3OwlcCi0JCQl9CQkJCQkJXAotCQl9CQkJCQkJCVwK
LQkJcmV0dXJuIChlcnJvcik7CQkJCQkJXAotCX0JCQkJCQkJCVwKLQlTWVNDVExfUFJPQyhfbmV0
X2luZXRfc2N0cCwgT0lEX0FVVE8sIG1pYl9uYW1lLAkJCVwKLQkgICAgICAgICAgICAgICAgIENU
TFRZUEVfVUlOVHxDVExGTEFHX1JXLCBOVUxMLCAwLAkJXAotCSAgICAgICAgICAgICAgICAgc2N0
cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJVSSIsIHByZWZpeCMjX0RFU0MpOwotI2Vsc2UK
LSNkZWZpbmUgU0NUUF9VSU5UX1NZU0NUTChtaWJfbmFtZSwgdmFyX25hbWUsIHByZWZpeCkJCQlc
Ci0Jc3RhdGljIGludAkJCQkJCQlcCi0Jc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUoU1lT
Q1RMX0hBTkRMRVJfQVJHUykJCVwKLQl7CQkJCQkJCQlcCi0JCWludCBlcnJvcjsJCQkJCQlcCi0J
CXVpbnQzMl90IG5ldzsJCQkJCQlcCi0JCQkJCQkJCQlcCi0JCW5ldyA9IFNDVFBfQkFTRV9TWVND
VEwodmFyX25hbWUpOwkJCVwKLQkJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3
LCAwLCByZXEpOwkJXAotCQlpZiAoKGVycm9yID09IDApICYmIChyZXEtPm5ld3B0ciAhPSBOVUxM
KSkgewkJXAotCQkJaWYgKChuZXcgPCBwcmVmaXgjI19NSU4pIHx8CQkJXAotCQkJICAgIChuZXcg
PiBwcmVmaXgjI19NQVgpKSB7CQkJXAotCQkJCWVycm9yID0gRUlOVkFMOwkJCQlcCi0JCQl9IGVs
c2UgewkJCQkJXAotCQkJCVNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpID0gbmV3OwlcCi0JCQl9
CQkJCQkJXAotCQl9CQkJCQkJCVwKLQkJcmV0dXJuIChlcnJvcik7CQkJCQkJXAotCX0JCQkJCQkJ
CVwKLQlTWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIG1pYl9uYW1lLAkJCVwK
LQkgICAgICAgICAgICAgICAgIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywg
TlVMTCwgMCwJXAotCSAgICAgICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25h
bWUsICJVSSIsIHByZWZpeCMjX0RFU0MpOwotI2VuZGlmCi0jZWxzZQotI2RlZmluZSBTQ1RQX1VJ
TlRfU1lTQ1RMKG1pYl9uYW1lLCB2YXJfbmFtZSwgcHJlZml4KQkJCVwKLQlzdGF0aWMgaW50CQkJ
CQkJCVwKLQlzY3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZShTWVNDVExfSEFORExFUl9BUkdT
KQkJXAotCXsJCQkJCQkJCVwKLQkJaW50IGVycm9yOwkJCQkJCVwKLQkJdWludDMyX3QgbmV3OwkJ
CQkJCVwKLQkJCQkJCQkJCVwKLQkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSk7CQkJ
XAotCQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CQlcCi0J
CWlmICgoZXJyb3IgPT0gMCkgJiYgKHJlcS0+bmV3cHRyICE9IE5VTEwpKSB7CQlcCi0JCQlpZiAo
KG5ldyA8IHByZWZpeCMjX01JTikgfHwJCQlcCi0JCQkgICAgKG5ldyA+IHByZWZpeCMjX01BWCkp
IHsJCQlcCi0JCQkJZXJyb3IgPSBFSU5WQUw7CQkJCVwKLQkJCX0gZWxzZSB7CQkJCQlcCi0JCQkJ
U0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSkgPSBuZXc7CVwKLQkJCX0JCQkJCQlcCi0JCX0JCQkJ
CQkJXAotCQlyZXR1cm4gKGVycm9yKTsJCQkJCQlcCi0JfQkJCQkJCQkJXAotCVNZU0NUTF9QUk9D
KF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgbWliX25hbWUsCQkJXAotCSAgICAgICAgICAgICAg
ICAgQ1RMRkxBR19WTkVUfENUTFRZUEVfVUlOVHxDVExGTEFHX1JXLCBOVUxMLCAwLAlcCi0JICAg
ICAgICAgICAgICAgICBzY3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZSwgIlVJIiwgcHJlZml4
IyNfREVTQyk7Ci0jZW5kaWYKLSNlbHNlCi0jZGVmaW5lIFNDVFBfVUlOVF9TWVNDVEwobWliX25h
bWUsIHZhcl9uYW1lLCBwcmVmaXgpCQkJXAotCXN0YXRpYyBpbnQJCQkJCQkJXAotCXNjdHBfc3lz
Y3RsX2hhbmRsZV8jI21pYl9uYW1lKHN0cnVjdCBzeXNjdGxfb2lkICpvaWRwLAkJXAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnMSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwJ
XAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZzIgX19hdHRyaWJ1dGVfXygodW51
c2VkKSksCVwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzeXNjdGxfcmVxICpy
ZXEpCQlcCi0JewkJCQkJCQkJXAotCQlpbnQgZXJyb3I7CQkJCQkJXAotCQl1aW50MzJfdCBuZXc7
CQkJCQkJXAotCQkJCQkJCQkJXAotCQluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKTsJ
CQlcCi0JCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsJCVwK
LQkJaWYgKChlcnJvciA9PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpKSB7
CVwKLQkJCWlmICgobmV3IDwgcHJlZml4IyNfTUlOKSB8fAkJCVwKLQkJCSAgICAobmV3ID4gcHJl
Zml4IyNfTUFYKSkgewkJCVwKLQkJCQllcnJvciA9IEVJTlZBTDsJCQkJXAotCQkJfSBlbHNlIHsJ
CQkJCVwKLQkJCQlTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKSA9IG5ldzsJXAotCQkJfQkJCQkJ
CVwKLQkJfQkJCQkJCQlcCi0JCXJldHVybiAoZXJyb3IpOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0J
U1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBtaWJfbmFtZSwJCQlcCi0JICAg
ICAgICAgICAgQ1RMVFlQRV9JTlQgfCBDVExGTEFHX1JXLCBOVUxMLCAwLAkJCVwKLQkgICAgICAg
ICAgICBzY3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZSwgIkkiLCBwcmVmaXgjI19ERVNDKTsK
LSNkZWZpbmUgQ1RMVFlQRV9VSU5UIENUTFRZUEVfSU5UCi0jZGVmaW5lIENUTEZMQUdfVk5FVCAw
Ci0jZW5kaWYKLQotLyoKLSAqIHN5c2N0bCBkZWZpbml0aW9ucwotICovCi0KLVNDVFBfVUlOVF9T
WVNDVEwoc2VuZHNwYWNlLCBzY3RwX3NlbmRzcGFjZSwgU0NUUENUTF9NQVhER1JBTSkKLVNDVFBf
VUlOVF9TWVNDVEwocmVjdnNwYWNlLCBzY3RwX3JlY3ZzcGFjZSwgU0NUUENUTF9SRUNWU1BBQ0Up
Ci1TQ1RQX1VJTlRfU1lTQ1RMKGF1dG9fYXNjb25mLCBzY3RwX2F1dG9fYXNjb25mLCBTQ1RQQ1RM
X0FVVE9BU0NPTkYpCi1TQ1RQX1VJTlRfU1lTQ1RMKGVjbl9lbmFibGUsIHNjdHBfZWNuX2VuYWJs
ZSwgU0NUUENUTF9FQ05fRU5BQkxFKQotU0NUUF9VSU5UX1NZU0NUTChwcl9lbmFibGUsIHNjdHBf
cHJfZW5hYmxlLCBTQ1RQQ1RMX1BSX0VOQUJMRSkKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3Rw
LCBPSURfQVVUTywgYXV0aF9lbmFibGUsIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxB
R19SVywKLSAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hdXRoLCAiSVUi
LCBTQ1RQQ1RMX0FVVEhfRU5BQkxFX0RFU0MpOwotU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAs
IE9JRF9BVVRPLCBhc2NvbmZfZW5hYmxlLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZM
QUdfUlcsCi0gICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfYXNjb25mLCAi
SVUiLCBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfREVTQyk7Ci1TQ1RQX1VJTlRfU1lTQ1RMKHJlY29u
ZmlnX2VuYWJsZSwgc2N0cF9yZWNvbmZpZ19lbmFibGUsIFNDVFBDVExfUkVDT05GSUdfRU5BQkxF
KQotU0NUUF9VSU5UX1NZU0NUTChucnNhY2tfZW5hYmxlLCBzY3RwX25yc2Fja19lbmFibGUsIFND
VFBDVExfTlJTQUNLX0VOQUJMRSkKLVNDVFBfVUlOVF9TWVNDVEwocGt0ZHJvcF9lbmFibGUsIHNj
dHBfcGt0ZHJvcF9lbmFibGUsIFNDVFBDVExfUEtURFJPUF9FTkFCTEUpCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi1TQ1RQX1VJTlRfU1lT
Q1RMKGxvb3BiYWNrX25vY3N1bSwgc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrLCBTQ1RQQ1RMX0xP
T1BCQUNLX05PQ1NVTSkKLSNlbmRpZgotI2VuZGlmCi1TQ1RQX1VJTlRfU1lTQ1RMKHBlZXJfY2hr
b2gsIHNjdHBfcGVlcl9jaHVua19vaCwgU0NUUENUTF9QRUVSX0NIS09IKQotU0NUUF9VSU5UX1NZ
U0NUTChtYXhidXJzdCwgc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCwgU0NUUENUTF9NQVhCVVJTVCkK
LVNDVFBfVUlOVF9TWVNDVEwoZnJfbWF4YnVyc3QsIHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQs
IFNDVFBDVExfRlJNQVhCVVJTVCkKLVNDVFBfVUlOVF9TWVNDVEwobWF4Y2h1bmtzLCBzY3RwX21h
eF9jaHVua3Nfb25fcXVldWUsIFNDVFBDVExfTUFYQ0hVTktTKQotU0NUUF9VSU5UX1NZU0NUTCh0
Y2JoYXNoc2l6ZSwgc2N0cF9oYXNodGJsc2l6ZSwgU0NUUENUTF9UQ0JIQVNIU0laRSkKLVNDVFBf
VUlOVF9TWVNDVEwocGNiaGFzaHNpemUsIHNjdHBfcGNidGJsc2l6ZSwgU0NUUENUTF9QQ0JIQVNI
U0laRSkKLVNDVFBfVUlOVF9TWVNDVEwobWluX3NwbGl0X3BvaW50LCBzY3RwX21pbl9zcGxpdF9w
b2ludCwgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlQpCi1TQ1RQX1VJTlRfU1lTQ1RMKGNodW5rc2Nh
bGUsIHNjdHBfY2h1bmtzY2FsZSwgU0NUUENUTF9DSFVOS1NDQUxFKQotU0NUUF9VSU5UX1NZU0NU
TChkZWxheWVkX3NhY2tfdGltZSwgc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0LCBTQ1RQ
Q1RMX0RFTEFZRURfU0FDS19USU1FKQotU0NUUF9VSU5UX1NZU0NUTChzYWNrX2ZyZXEsIHNjdHBf
c2Fja19mcmVxX2RlZmF1bHQsIFNDVFBDVExfU0FDS19GUkVRKQotU0NUUF9VSU5UX1NZU0NUTChz
eXNfcmVzb3VyY2UsIHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCwgU0NUUENUTF9TWVNfUkVT
T1VSQ0UpCi1TQ1RQX1VJTlRfU1lTQ1RMKGFzb2NfcmVzb3VyY2UsIHNjdHBfYXNvY19mcmVlX3Jl
c2NfbGltaXQsIFNDVFBDVExfQVNPQ19SRVNPVVJDRSkKLVNDVFBfVUlOVF9TWVNDVEwoaGVhcnRi
ZWF0X2ludGVydmFsLCBzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0LCBTQ1RQQ1RMX0hF
QVJUQkVBVF9JTlRFUlZBTCkKLVNDVFBfVUlOVF9TWVNDVEwocG10dV9yYWlzZV90aW1lLCBzY3Rw
X3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRSkKLVNDVFBf
VUlOVF9TWVNDVEwoc2h1dGRvd25fZ3VhcmRfdGltZSwgc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1l
X2RlZmF1bHQsIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElNRSkKLVNDVFBfVUlOVF9TWVNDVEwo
c2VjcmV0X2xpZmV0aW1lLCBzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1NF
Q1JFVF9MSUZFVElNRSkKLVNDVFBfVUlOVF9TWVNDVEwocnRvX21heCwgc2N0cF9ydG9fbWF4X2Rl
ZmF1bHQsIFNDVFBDVExfUlRPX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwocnRvX21pbiwgc2N0cF9y
dG9fbWluX2RlZmF1bHQsIFNDVFBDVExfUlRPX01JTikKLVNDVFBfVUlOVF9TWVNDVEwocnRvX2lu
aXRpYWwsIHNjdHBfcnRvX2luaXRpYWxfZGVmYXVsdCwgU0NUUENUTF9SVE9fSU5JVElBTCkKLVND
VFBfVUlOVF9TWVNDVEwoaW5pdF9ydG9fbWF4LCBzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0LCBT
Q1RQQ1RMX0lOSVRfUlRPX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwodmFsaWRfY29va2llX2xpZmUs
IHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElG
RSkKLVNDVFBfVUlOVF9TWVNDVEwoaW5pdF9ydHhfbWF4LCBzY3RwX2luaXRfcnR4X21heF9kZWZh
dWx0LCBTQ1RQQ1RMX0lOSVRfUlRYX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwoYXNzb2NfcnR4X21h
eCwgc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfQVNTT0NfUlRYX01BWCkKLVND
VFBfVUlOVF9TWVNDVEwocGF0aF9ydHhfbWF4LCBzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0LCBT
Q1RQQ1RMX1BBVEhfUlRYX01BWCkKLVNDVFBfVUlOVF9TWVNDVEwocGF0aF9wZl90aHJlc2hvbGQs
IHNjdHBfcGF0aF9wZl90aHJlc2hvbGQsIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTEQpCi1TQ1RQ
X1VJTlRfU1lTQ1RMKGFkZF9tb3JlX29uX291dHB1dCwgc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQs
IFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUKQotU0NUUF9VSU5UX1NZU0NUTChpbmNvbWluZ19z
dHJlYW1zLCBzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENUTF9JTkNPTUlO
R19TVFJFQU1TKQotU0NUUF9VSU5UX1NZU0NUTChvdXRnb2luZ19zdHJlYW1zLCBzY3RwX25yX291
dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TKQotU0NUUF9V
SU5UX1NZU0NUTChjbXRfb25fb2ZmLCBzY3RwX2NtdF9vbl9vZmYsIFNDVFBDVExfQ01UX09OX09G
RikKLVNDVFBfVUlOVF9TWVNDVEwoY210X3VzZV9kYWMsIHNjdHBfY210X3VzZV9kYWMsIFNDVFBD
VExfQ01UX1VTRV9EQUMpCi1TQ1RQX1VJTlRfU1lTQ1RMKGN3bmRfbWF4YnVyc3QsIHNjdHBfdXNl
X2N3bmRfYmFzZWRfbWF4YnVyc3QsIFNDVFBDVExfQ1dORF9NQVhCVVJTVCkKLVNDVFBfVUlOVF9T
WVNDVEwobmF0X2ZyaWVuZGx5LCBzY3RwX25hdF9mcmllbmRseSwgU0NUUENUTF9OQVRfRlJJRU5E
TFkpCi1TQ1RQX1VJTlRfU1lTQ1RMKGFiY19sX3Zhciwgc2N0cF9MMl9hYmNfdmFyaWFibGUsIFND
VFBDVExfQUJDX0xfVkFSKQotU0NUUF9VSU5UX1NZU0NUTChtYXhfY2hhaW5lZF9tYnVmcywgc2N0
cF9tYnVmX3RocmVzaG9sZF9jb3VudCwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGUykKLVNDVFBf
VUlOVF9TWVNDVEwoZG9fc2N0cF9kcmFpbiwgc2N0cF9kb19kcmFpbiwgU0NUUENUTF9ET19TQ1RQ
X0RSQUlOKQotU0NUUF9VSU5UX1NZU0NUTChoYl9tYXhfYnVyc3QsIHNjdHBfaGJfbWF4YnVyc3Qs
IFNDVFBDVExfSEJfTUFYX0JVUlNUKQotU0NUUF9VSU5UX1NZU0NUTChhYm9ydF9hdF9saW1pdCwg
c2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCwgU0NUUENUTF9BQk9SVF9BVF9MSU1J
VCkKLVNDVFBfVUlOVF9TWVNDVEwobWluX3Jlc2lkdWFsLCBzY3RwX21pbl9yZXNpZHVhbCwgU0NU
UENUTF9NSU5fUkVTSURVQUwpCi1TQ1RQX1VJTlRfU1lTQ1RMKG1heF9yZXRyYW5fY2h1bmssIHNj
dHBfbWF4X3JldHJhbl9jaHVuaywgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LKQotU0NUUF9VSU5U
X1NZU0NUTChsb2dfbGV2ZWwsIHNjdHBfbG9nZ2luZ19sZXZlbCwgU0NUUENUTF9MT0dHSU5HX0xF
VkVMKQotU0NUUF9VSU5UX1NZU0NUTChkZWZhdWx0X2NjX21vZHVsZSwgc2N0cF9kZWZhdWx0X2Nj
X21vZHVsZSwgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRSkKLVNDVFBfVUlOVF9TWVNDVEwoZGVm
YXVsdF9zc19tb2R1bGUsIHNjdHBfZGVmYXVsdF9zc19tb2R1bGUsIFNDVFBDVExfREVGQVVMVF9T
U19NT0RVTEUpCi1TQ1RQX1VJTlRfU1lTQ1RMKGRlZmF1bHRfZnJhZ19pbnRlcmxlYXZlLCBzY3Rw
X2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlLCBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZF
KQotU0NUUF9VSU5UX1NZU0NUTChtb2JpbGl0eV9iYXNlLCBzY3RwX21vYmlsaXR5X2Jhc2UsIFND
VFBDVExfTU9CSUxJVFlfQkFTRSkKLVNDVFBfVUlOVF9TWVNDVEwobW9iaWxpdHlfZmFzdGhhbmRv
ZmYsIHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYsIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRP
RkYpCi0jaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLVNZU0NUTF9QUk9DKF9uZXRf
aW5ldF9zY3RwLCBPSURfQVVUTywgbG9nLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9TVFJVQ1R8Q1RM
RkxBR19SRCwKLSAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV90cmFjZV9s
b2csICJTLHNjdHBsb2ciLCAiU0NUUCBsb2dnaW5nIChzdHJ1Y3Qgc2N0cF9sb2cpIik7Ci1TWVND
VExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGNsZWFyX3RyYWNlLCBDVExGTEFHX1ZO
RVR8Q1RMVFlQRV9VSU5UIHwgQ1RMRkxBR19SVywKLSAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV90cmFjZV9sb2dfY2xlYXIsICJJVSIsICJDbGVhciBTQ1RQIExvZ2dpbmcg
YnVmZmVyIik7Ci0jZW5kaWYKLVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywg
dWRwX3R1bm5lbGluZ19wb3J0LCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZMQUdfUlcs
Ci0gICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZywg
IklVIiwgU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVTQyk7Ci1TQ1RQX1VJTlRfU1lTQ1RM
KGVuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5LCBzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5LCBT
Q1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFKQotU0NUUF9VSU5UX1NZU0NUTChuYXRfZnJp
ZW5kbHlfaW5pdCwgc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSwgU0NUUENUTF9OQVRf
RlJJRU5ETFlfSU5JVFMpCi1TQ1RQX1VJTlRfU1lTQ1RMKHZ0YWdfdGltZV93YWl0LCBzY3RwX3Z0
YWdfdGltZV93YWl0LCBTQ1RQQ1RMX1RJTUVfV0FJVCkKLVNDVFBfVUlOVF9TWVNDVEwoYnVmZmVy
X3NwbGl0dGluZywgc2N0cF9idWZmZXJfc3BsaXR0aW5nLCBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJ
TkcpCi1TQ1RQX1VJTlRfU1lTQ1RMKGluaXRpYWxfY3duZCwgc2N0cF9pbml0aWFsX2N3bmQsIFND
VFBDVExfSU5JVElBTF9DV05EKQotU0NUUF9VSU5UX1NZU0NUTChydHR2YXJfYncsIHNjdHBfcnR0
dmFyX2J3LCBTQ1RQQ1RMX1JUVFZBUl9CVykKLVNDVFBfVUlOVF9TWVNDVEwocnR0dmFyX3J0dCwg
c2N0cF9ydHR2YXJfcnR0LCBTQ1RQQ1RMX1JUVFZBUl9SVFQpCi1TQ1RQX1VJTlRfU1lTQ1RMKHJ0
dHZhcl9lcXJldCwgc2N0cF9ydHR2YXJfZXFyZXQsIFNDVFBDVExfUlRUVkFSX0VRUkVUKQotU0NU
UF9VSU5UX1NZU0NUTChydHR2YXJfc3RlYWR5X3N0ZXAsIHNjdHBfc3RlYWR5X3N0ZXAsIFNDVFBD
VExfUlRUVkFSX1NURUFEWVMpCi1TQ1RQX1VJTlRfU1lTQ1RMKHVzZV9kY2NjZWNuLCBzY3RwX3Vz
ZV9kY2NjX2VjbiwgU0NUUENUTF9SVFRWQVJfRENDQ0VDTikKLVNDVFBfVUlOVF9TWVNDVEwoYmxh
Y2tob2xlLCBzY3RwX2JsYWNraG9sZSwgU0NUUENUTF9CTEFDS0hPTEUpCi1TQ1RQX1VJTlRfU1lT
Q1RMKGRpYWdfaW5mb19jb2RlLCBzY3RwX2RpYWdfaW5mb19jb2RlLCBTQ1RQQ1RMX0RJQUdfSU5G
T19DT0RFKQotI2lmZGVmIFNDVFBfREVCVUcKLVNDVFBfVUlOVF9TWVNDVEwoZGVidWcsIHNjdHBf
ZGVidWdfb24sIFNDVFBDVExfREVCVUcpCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LVNDVFBfVUlOVF9TWVNDVEwobWFpbl90aW1lciwgc2N0cF9tYWluX3RpbWVyLCBTQ1RQQ1RMX01B
SU5fVElNRVIpCi1TWVNDVExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGlnbm9yZV92
bXdhcmVfaW50ZXJmYWNlcywgQ1RMVFlQRV9VSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICBO
VUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfdm13YXJlX2ludGVyZmFjZXMsICJJVSIsIFNDVFBD
VExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFU0MpOwotU0NUUF9VSU5UX1NZU0NUTChhZGRy
X3dhdGNoZG9nX2xpbWl0LCBzY3RwX2FkZHJfd2F0Y2hkb2dfbGltaXQsIFNDVFBDVExfQUREUl9X
QVRDSERPR19MSU1JVCkKLVNDVFBfVUlOVF9TWVNDVEwodnRhZ193YXRjaGRvZ19saW1pdCwgc2N0
cF92dGFnX3dhdGNoZG9nX2xpbWl0LCBTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVQpCi0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKLVNDVFBfVUlOVF9TWVNDVEwob3V0cHV0X3VubG9ja2VkLCBzY3RwX291dHB1dF91bmxvY2tl
ZCwgU0NUUENUTF9PVVRQVVRfVU5MT0NLRUQpCi0jZW5kaWYKLVNZU0NUTF9QUk9DKF9uZXRfaW5l
dF9zY3RwLCBPSURfQVVUTywgc3RhdHMsIENUTEZMQUdfVk5FVHxDVExUWVBFX1NUUlVDVHxDVExG
TEFHX1JXLAotICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3N0YXRzLCAi
UyxzY3Rwc3RhdCIsICJTQ1RQIHN0YXRpc3RpY3MgKHN0cnVjdCBzY3RwX3N0YXQpIik7Ci1TWVND
VExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIGFzc29jbGlzdCwgQ1RMRkxBR19WTkVU
fENUTFRZUEVfT1BBUVVFfENUTEZMQUdfUkQsCi0gICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfYXNzb2NsaXN0LCAiUyx4YXNzb2MiLCAiTGlzdCBvZiBhY3RpdmUgU0NUUCBh
c3NvY2lhdGlvbnMiKTsKLQotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQotI2RlZmluZSBS
QU5HRUNISyh2YXIsIG1pbiwgbWF4KSBcCi0JaWYgKCh2YXIpIDwgKG1pbikpIHsgKHZhcikgPSAo
bWluKTsgfSBcCi0JZWxzZSBpZiAoKHZhcikgPiAobWF4KSkgeyAodmFyKSA9IChtYXgpOyB9Ci0K
LXN0YXRpYyBpbnQKLXNjdHBfc3lzY3RsX2hhbmRsZV9pbnQoU1lTQ1RMX0hBTkRMRVJfQVJHUykK
LXsKLQlpbnQgZXJyb3I7Ci0KLQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsIG9pZHAt
Pm9pZF9hcmcxLCBvaWRwLT5vaWRfYXJnMiwgcmVxKTsKLQlpZiAoZXJyb3IgPT0gMCkgewotCQlS
QU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSwgU0NUUENUTF9NQVhER1JB
TV9NSU4sIFNDVFBDVExfTUFYREdSQU1fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3JlY3ZzcGFjZSksIFNDVFBDVExfUkVDVlNQQUNFX01JTiwgU0NUUENUTF9SRUNWU1BB
Q0VfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNjb25mKSwg
U0NUUENUTF9BVVRPQVNDT05GX01JTiwgU0NUUENUTF9BVVRPQVNDT05GX01BWCk7Ci0JCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZiksIFNDVFBDVExfQVVUT0FTQ09O
Rl9NSU4sIFNDVFBDVExfQVVUT0FTQ09ORl9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZWNuX2VuYWJsZSksIFNDVFBDVExfRUNOX0VOQUJMRV9NSU4sIFNDVFBDVExfRUNO
X0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxl
KSwgU0NUUENUTF9QUl9FTkFCTEVfTUlOLCBTQ1RQQ1RMX1BSX0VOQUJMRV9NQVgpOwotCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjb25maWdfZW5hYmxlKSwgU0NUUENUTF9SRUNP
TkZJR19FTkFCTEVfTUlOLCBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJzYWNrX2VuYWJsZSksIFNDVFBDVExfTlJTQUNLX0VO
QUJMRV9NSU4sIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcGt0ZHJvcF9lbmFibGUpLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01J
TiwgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9NQVgpOwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9O
T19DU1VNKQotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29w
YmFjayksIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNX01JTiwgU0NUUENUTF9MT09QQkFDS19OT0NT
VU1fTUFYKTsKLSNlbmRpZgotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9j
aHVua19vaCksIFNDVFBDVExfUEVFUl9DSEtPSF9NSU4sIFNDVFBDVExfUEVFUl9DSEtPSF9NQVgp
OwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpLCBT
Q1RQQ1RMX01BWEJVUlNUX01JTiwgU0NUUENUTF9NQVhCVVJTVF9NQVgpOwotCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX0ZSTUFY
QlVSU1RfTUlOLCBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpLCBTQ1RQQ1RMX01BWENIVU5LU19NSU4s
IFNDVFBDVExfTUFYQ0hVTktTX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9oYXNodGJsc2l6ZSksIFNDVFBDVExfVENCSEFTSFNJWkVfTUlOLCBTQ1RQQ1RMX1RDQkhBU0hT
SVpFX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSwg
U0NUUENUTF9QQ0JIQVNIU0laRV9NSU4sIFNDVFBDVExfUENCSEFTSFNJWkVfTUFYKTsKLQkJUkFO
R0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21pbl9zcGxpdF9wb2ludCksIFNDVFBDVExfTUlO
X1NQTElUX1BPSU5UX01JTiwgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfTUFYKTsKLQkJUkFOR0VD
SEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5rc2NhbGUpLCBTQ1RQQ1RMX0NIVU5LU0NBTEVf
TUlOLCBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19U
SU1FX01JTiwgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElNRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2Fja19mcmVxX2RlZmF1bHQpLCBTQ1RQQ1RMX1NBQ0tfRlJFUV9N
SU4sIFNDVFBDVExfU0FDS19GUkVRX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSwgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUlOLCBT
Q1RQQ1RMX1NZU19SRVNPVVJDRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpLCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUlOLCBTQ1RQ
Q1RMX0FTT0NfUkVTT1VSQ0VfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KSwgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxf
TUlOLCBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1BNVFVfUkFJ
U0VfVElNRV9NSU4sIFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX01BWCk7Ci0JCVJBTkdFQ0hLKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RM
X1NIVVRET1dOX0dVQVJEX1RJTUVfTUlOLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUFY
KTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlY3JldF9saWZldGltZV9kZWZh
dWx0KSwgU0NUUENUTF9TRUNSRVRfTElGRVRJTUVfTUlOLCBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElN
RV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZhdWx0
KSwgU0NUUENUTF9SVE9fTUFYX01JTiwgU0NUUENUTF9SVE9fTUFYX01BWCk7Ci0JCVJBTkdFQ0hL
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9fbWluX2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19NSU5f
TUlOLCBTQ1RQQ1RMX1JUT19NSU5fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3J0b19pbml0aWFsX2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19JTklUSUFMX01JTiwgU0NUUENU
TF9SVE9fSU5JVElBTF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5p
dF9ydG9fbWF4X2RlZmF1bHQpLCBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9NSU4sIFNDVFBDVExfSU5J
VF9SVE9fTUFYX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9j
b29raWVfbGlmZV9kZWZhdWx0KSwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NSU4sIFNDVFBD
VExfVkFMSURfQ09PS0lFX0xJRkVfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2luaXRfcnR4X21heF9kZWZhdWx0KSwgU0NUUENUTF9JTklUX1JUWF9NQVhfTUlOLCBTQ1RQ
Q1RMX0lOSVRfUlRYX01BWF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
YXNzb2NfcnR4X21heF9kZWZhdWx0KSwgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01JTiwgU0NUUENU
TF9BU1NPQ19SVFhfTUFYX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9w
YXRoX3J0eF9tYXhfZGVmYXVsdCksIFNDVFBDVExfUEFUSF9SVFhfTUFYX01JTiwgU0NUUENUTF9Q
QVRIX1JUWF9NQVhfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhf
cGZfdGhyZXNob2xkKSwgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NSU4sIFNDVFBDVExfUEFU
SF9QRl9USFJFU0hPTERfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fk
ZF9tb3JlX3RocmVzaG9sZCksIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX01JTiwgU0NUUENU
TF9BRERfTU9SRV9PTl9PVVRQVVRfTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCksIFNDVFBDVExfSU5DT01JTkdfU1RSRUFN
U19NSU4sIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KSwgU0NUUENUTF9PVVRH
T0lOR19TVFJFQU1TX01JTiwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01BWCk7Ci0JCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSwgU0NUUENUTF9DTVRfT05fT0ZG
X01JTiwgU0NUUENUTF9DTVRfT05fT0ZGX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9jbXRfdXNlX2RhYyksIFNDVFBDVExfQ01UX1VTRV9EQUNfTUlOLCBTQ1RQQ1RMX0NN
VF9VU0VfREFDX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3du
ZF9iYXNlZF9tYXhidXJzdCksIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NSU4sIFNDVFBDVExfQ1dO
RF9NQVhCVVJTVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2Zy
aWVuZGx5KSwgU0NUUENUTF9OQVRfRlJJRU5ETFlfTUlOLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9N
QVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKSwg
U0NUUENUTF9BQkNfTF9WQVJfTUlOLCBTQ1RQQ1RMX0FCQ19MX1ZBUl9NQVgpOwotCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpLCBTQ1RQQ1RMX01B
WF9DSEFJTkVEX01CVUZTX01JTiwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGU19NQVgpOwotCQlS
QU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pLCBTQ1RQQ1RMX0RPX1NDVFBf
RFJBSU5fTUlOLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fTUFYKTsKLQkJUkFOR0VDSEsoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2hiX21heGJ1cnN0KSwgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUlOLCBT
Q1RQQ1RMX0hCX01BWF9CVVJTVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpLCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlU
X01JTiwgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbWluX3Jlc2lkdWFsKSwgU0NUUENUTF9NSU5fUkVTSURVQUxfTUlOLCBTQ1RQ
Q1RMX01JTl9SRVNJRFVBTF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bWF4X3JldHJhbl9jaHVuayksIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4sIFNDVFBDVExf
TUFYX1JFVFJBTl9DSFVOS19NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCksIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NSU4sIFNDVFBDVExfTE9HR0lO
R19MRVZFTF9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9j
Y19tb2R1bGUpLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxU
X0NDX01PRFVMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVs
dF9zc19tb2R1bGUpLCBTQ1RQQ1RMX0RFRkFVTFRfU1NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZB
VUxUX1NTX01PRFVMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVm
YXVsdF9mcmFnX2ludGVybGVhdmUpLCBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01J
TiwgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfdnRhZ190aW1lX3dhaXQpLCBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4s
IFNDVFBDVExfVElNRV9XQUlUX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9idWZmZXJfc3BsaXR0aW5nKSwgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01JTiwgU0NUUENU
TF9CVUZGRVJfU1BMSVRUSU5HX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9pbml0aWFsX2N3bmQpLCBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9NSU4sIFNDVFBDVExfSU5JVElB
TF9DV05EX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncp
LCBTQ1RQQ1RMX1JUVFZBUl9CV19NSU4sIFNDVFBDVExfUlRUVkFSX0JXX01BWCk7Ci0JCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfcnR0KSwgU0NUUENUTF9SVFRWQVJfUlRU
X01JTiwgU0NUUENUTF9SVFRWQVJfUlRUX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydHR2YXJfZXFyZXQpLCBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9NSU4sIFNDVFBDVExf
UlRUVkFSX0VRUkVUX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zdGVh
ZHlfc3RlcCksIFNDVFBDVExfUlRUVkFSX1NURUFEWVNfTUlOLCBTQ1RQQ1RMX1JUVFZBUl9TVEVB
RFlTX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfZGNjY19lY24p
LCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01JTiwgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9NQVgp
OwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSksIFNDVFBD
VExfTU9CSUxJVFlfQkFTRV9NSU4sIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NQVgpOwotCQlSQU5H
RUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpLCBTQ1RQQ1RM
X01PQklMSVRZX0ZBU1RIQU5ET0ZGX01JTiwgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9N
QVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRp
YXRlbHkpLCBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX01JTiwgU0NUUENUTF9TQUNL
X0lNTUVESUFURUxZX0VOQUJMRV9NQVgpOwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklU
U19NSU4sIFNDVFBDVExfTkFUX0ZSSUVORExZX0lOSVRTX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpLCBTQ1RQQ1RMX0JMQUNLSE9MRV9NSU4sIFNDVFBD
VExfQkxBQ0tIT0xFX01BWCk7Ci0JCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFn
X2luZm9fY29kZSksIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUlOLCBTQ1RQQ1RMX0RJQUdfSU5G
T19DT0RFX01BWCk7Ci0jaWZkZWYgU0NUUF9ERUJVRwotCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfZGVidWdfb24pLCBTQ1RQQ1RMX0RFQlVHX01JTiwgU0NUUENUTF9ERUJVR19NQVgp
OwotI2VuZGlmCi0JfQotCXJldHVybiAoZXJyb3IpOwotfQotCi12b2lkCi1zeXNjdGxfc2V0dXBf
c2N0cCh2b2lkKQotewotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNlbmRzcGFj
ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3NlbmRzcGFjZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBD
VExfTUFYREdSQU1fREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJy
ZWN2c3BhY2UiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3JlY3ZzcGFjZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAg
IFNDVFBDVExfUkVDVlNQQUNFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAiYXV0b19hc2NvbmYiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV9pbnQsCi0JICAgIFNDVFBDVExfQVVUT0FTQ09ORl9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgImVjbl9lbmFibGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAot
ICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9FQ05fRU5BQkxFX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicHJfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9QUl9FTkFCTEVfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhdXRoX2VuYWJsZSIsIENUTFRZ
UEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1
dGhfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgsCi0JICAgIFNDVFBDVExfQVVU
SF9FTkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc2Nv
bmZfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hc2Nv
bmYsCi0JICAgIFNDVFBDVExfQVNDT05GX0VOQUJMRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lk
KCZzeXNjdGxfb2lkX3RvcCwgInJlY29uZmlnX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdf
UlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmlnX2VuYWJsZSks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUkVDT05GSUdfRU5BQkxF
X0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibnJzYWNrX2VuYWJs
ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX25yc2Fja19lbmFibGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBT
Q1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29p
ZF90b3AsICJwa3Rkcm9wX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAg
ICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSwgMCwgc2N0cF9zeXNj
dGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9ERVNDKTsKLQotI2lm
ICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgImxvb3BiYWNrX25vY3N1bSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAg
ICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9ERVNDKTsK
LSNlbmRpZgotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicGVlcl9jaGtvaCIs
IENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3BlZXJfY2h1bmtfb2gpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQ
Q1RMX1BFRVJfQ0hLT0hfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJtYXhidXJzdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX21heF9idXJzdF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKLQkgICAgU0NUUENUTF9NQVhCVVJTVF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZz
eXNjdGxfb2lkX3RvcCwgImZyX21heGJ1cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAg
ICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpLCAw
LCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0ZSTUFYQlVSU1RfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtYXhjaHVua3MiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhf
Y2h1bmtzX29uX3F1ZXVlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENU
TF9NQVhDSFVOS1NfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ0
Y2JoYXNoc2l6ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
LQkgICAgU0NUUENUTF9UQ0JIQVNIU0laRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgInBjYmhhc2hzaXplIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAg
ICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSksIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUENCSEFTSFNJWkVfREVTQyk7Ci0KLQlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtaW5fc3BsaXRfcG9pbnQiLCBDVExUWVBFX0lOVHxD
VExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3BsaXRf
cG9pbnQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX01JTl9TUExJ
VF9QT0lOVF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImNodW5r
c2NhbGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9jaHVua3NjYWxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAg
U0NUUENUTF9DSFVOS1NDQUxFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAiZGVsYXllZF9zYWNrX3RpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0KSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElN
RV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNhY2tfZnJlcSIs
IENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3NhY2tfZnJlcV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAg
U0NUUENUTF9TQUNLX0ZSRVFfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJzeXNfcmVzb3VyY2UiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVTQyk7Ci0KLQlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc29jX3Jlc291cmNlIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19m
cmVlX3Jlc2NfbGltaXQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RM
X0FTT0NfUkVTT1VSQ0VfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJoZWFydGJlYXRfaW50ZXJ2YWwiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAg
ICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFM
X0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicG10dV9yYWlzZV90
aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVf
aW50LAotCSAgICBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgInNodXRkb3duX2d1YXJkX3RpbWUiLCBDVExUWVBFX0lOVHxD
VExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93bl9n
dWFyZF90aW1lX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQ
Q1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJzZWNyZXRfbGlmZXRpbWUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAg
ICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1F
X0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnRvX21heCIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3J0b19tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBD
VExfUlRPX01BWF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0
b19taW4iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9ydG9fbWluX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAot
CSAgICBTQ1RQQ1RMX1JUT19NSU5fREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29p
ZF90b3AsICJydG9faW5pdGlhbCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX1JUT19JTklUSUFMX0RFU0MpOwotCi0Jc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaW5pdF9ydG9fbWF4IiwgQ1RMVFlQRV9JTlR8
Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9f
bWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0lO
SVRfUlRPX01BWF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInZh
bGlkX2Nvb2tpZV9saWZlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVsdCksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfREVTQyk7
Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJpbml0X3J0eF9tYXgiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9p
bml0X3J0eF9tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFND
VFBDVExfSU5JVF9SVFhfTUFYX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAiYXNzb2NfcnR4X21heCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERVNDKTsKLQot
CXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBhdGhfcnR4X21heCIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhf
cnR4X21heF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENU
TF9QQVRIX1JUWF9NQVhfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJwYXRoX3BmX3RocmVzaG9sZCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0JICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAotCSAgICBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFU0MpOwotCi0Jc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYWRkX21vcmVfb25fb3V0cHV0IiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21v
cmVfdGhyZXNob2xkKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9B
RERfTU9SRV9PTl9PVVRQVVRfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJpbmNvbWluZ19zdHJlYW1zIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1T
X0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAib3V0Z29pbmdfc3Ry
ZWFtcyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX25yX291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCi0JICAgIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19ERVNDKTsKLQotCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImNtdF9vbl9vZmYiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9DTVRfT05fT0ZGX0RFU0Mp
OwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY210X3VzZV9kYWMiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9j
bXRfdXNlX2RhYyksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQ01U
X1VTRV9EQUNfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjd25k
X21heGJ1cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVTQyk7Ci0KLQlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJuYXRfZnJpZW5kbHkiLCBDVExUWVBFX0lOVHxDVExG
TEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX05BVF9GUklFTkRMWV9E
RVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFiY19sX3ZhciIsIENU
TFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X0wyX2FiY192YXJpYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBD
VExfQUJDX0xfVkFSX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
bWF4X2NoYWluZWRfbWJ1ZnMiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfREVTQyk7Ci0K
LQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkb19zY3RwX2RyYWluIiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9f
ZHJhaW4pLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQQ1RMX0RPX1NDVFBf
RFJBSU5fREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJoYl9tYXhf
YnVyc3QiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9oYl9tYXhidXJzdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAg
IFNDVFBDVExfSEJfTUFYX0JVUlNUX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAiYWJvcnRfYXRfbGltaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQUJPUlRfQVRfTElN
SVRfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtaW5fcmVzaWR1
YWwiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9taW5fcmVzaWR1YWwpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBT
Q1RQQ1RMX01JTl9SRVNJRFVBTF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgIm1heF9yZXRyYW5fY2h1bmsiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSwgMCwgc2N0cF9z
eXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MpOwot
Ci0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibG9nX2xldmVsIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTE9HR0lO
R19MRVZFTF9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRlZmF1
bHRfY2NfbW9kdWxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAotCSAgICBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFU0MpOwotCi0Jc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGVmYXVsdF9zc19tb2R1bGUiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0
X3NzX21vZHVsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfREVG
QVVMVF9TU19NT0RVTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3As
ICJkZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAg
ICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5U
RVJMRUFWRV9ERVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1vYmls
aXR5X2Jhc2UiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
LQkgICAgU0NUUENUTF9NT0JJTElUWV9CQVNFX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAibW9iaWxpdHlfZmFzdGhhbmRvZmYiLCBDVExUWVBFX0lOVHxDVExGTEFH
X1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9mYXN0aGFu
ZG9mZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfTU9CSUxJVFlf
RkFTVEhBTkRPRkZfREVTQyk7Ci0KLSNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQot
CXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNjdHBfbG9nIiwgQ1RMVFlQRV9TVFJV
Q1R8Q1RMRkxBR19SRCwKLQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIHNpemVvZihz
dHJ1Y3Qgc2N0cF9sb2cpLCBOVUxMLAotCSAgICAiU0NUUCBsb2dnaW5nIChzdHJ1Y3Qgc2N0cF9s
b2cpIik7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjbGVhcl90cmFjZSIs
IENUTFRZUEVfSU5UfENUTEZMQUdfV1IsCi0JICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRs
ZV90cmFjZV9sb2dfY2xlYXIsCi0JICAgICJDbGVhciBTQ1RQIExvZ2dpbmcgYnVmZmVyIik7Ci0j
ZW5kaWYKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInVkcF90dW5uZWxpbmdf
cG9ydCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0JICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfdWRwX3R1bm5lbGluZ19wb3J0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3VkcF90dW5uZWxp
bmcsCi0JICAgIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX0RFU0MpOwotCi0Jc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFi
bGVfc2Fja19pbW1lZGlhdGVseSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFND
VFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEVfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgm
c3lzY3RsX29pZF90b3AsICJuYXRfZnJpZW5kbHlfaW5pdCIsIENUTFRZUEVfSU5UfENUTEZMQUdf
UlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRzX2luY2x1ZGVfbmF0
X2ZyaWVuZGx5KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKLQkgICAgU0NUUENUTF9OQVRf
RlJJRU5ETFlfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ2dGFn
X3RpbWVfd2FpdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3Z0YWdfdGltZV93YWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dCwKLQkgICAgU0NUUENUTF9USU1FX1dBSVRfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJidWZmZXJfc3BsaXR0aW5nIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywK
LSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYnVmZmVyX3NwbGl0dGluZyksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19E
RVNDKTsKLQotCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImluaXRpYWxfY3duZCIs
IENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2luaXRpYWxfY3duZCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBD
VExfSU5JVElBTF9DV05EX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9w
LCAicnR0dmFyX2J3IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX2J3KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
LQkgICAgU0NUUENUTF9SVFRWQVJfQldfREVTQyk7Ci0KLQlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJydHR2YXJfcnR0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUlRUVkFSX1JUVF9ERVNDKTsKLQotCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9lcXJldCIsIENUTFRZUEVfSU5UfENUTEZMQUdf
UlcsCi0gICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZhcl9lcXJldCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfUlRUVkFSX0VRUkVUX0RFU0Mp
OwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAicnR0dmFyX3N0ZWFkeV9zdGVw
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfc3RlYWR5X3N0ZXApLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAotCSAgICBTQ1RQ
Q1RMX1JUVFZBUl9TVEVBRFlTX0RFU0MpOwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAidXNlX2RjY2NlY24iLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfZGNjY19lY24pLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAotCSAgICBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX0RFU0MpOwotCi0Jc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYmxhY2tob2xlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKLSAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSwgMCwgc2N0
cF9zeXNjdGxfaGFuZGxlX2ludCwKLSAgICAgICAgICAgIFNDVFBDVExfQkxBQ0tIT0xFX0RFU0Mp
OwotCi0Jc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZGlhZ19pbmZvX2NvZGUiLCBD
VExUWVBFX0lOVHxDVExGTEFHX1JXLAotICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kaWFnX2luZm9fY29kZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCi0gICAgICAgICAg
ICBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX0RFU0MpOwotCi0jaWZkZWYgU0NUUF9ERUJVRwotCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRlYnVnIiwgQ1RMVFlQRV9JTlR8Q1RMRkxB
R19SVywKLQkgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbiksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCi0JICAgIFNDVFBDVExfREVCVUdfREVTQyk7Ci0jZW5kaWYKLQotCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInN0YXRzIiwgQ1RMVFlQRV9TVFJVQ1R8Q1RM
RkxBR19SVywKLQkgICAgJlNDVFBfQkFTRV9TVEFUUywgc2l6ZW9mKFNDVFBfQkFTRV9TVEFUUyks
IE5VTEwsCi0JICAgICJTQ1RQIHN0YXRpc3RpY3MgKHN0cnVjdCBzY3RwX3N0YXQpIik7Ci0KLQlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc3NvY2xpc3QiLCBDVExUWVBFX1NUUlVD
VHxDVExGTEFHX1JELAotCSAgICBOVUxMLCAwLCBzY3RwX2Fzc29jbGlzdCwKLQkgICAgIkxpc3Qg
b2YgYWN0aXZlIFNDVFAgYXNzb2NpYXRpb25zIik7Ci19Ci0jZW5kaWYKLSNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3N5c2N0bC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmQyOWUzNzAyZDU5
OWZkMWNjN2U3NTM2MDgzZDNhZmYyOGYxMGYxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zeXNjdGwuaAorKysgL2Rl
di9udWxsCkBAIC0xLDYyNSArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmgg
Mjk5NTQzIDIwMTYtMDUtMTIgMTY6MzQ6NTlaIHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRl
ZiBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXwotI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9I
XwotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2NvbnN0YW50cy5oPgotCi1zdHJ1Y3Qgc2N0cF9zeXNjdGwgewotCXVpbnQzMl90IHNjdHBfc2Vu
ZHNwYWNlOwotCXVpbnQzMl90IHNjdHBfcmVjdnNwYWNlOwotCXVpbnQzMl90IHNjdHBfYXV0b19h
c2NvbmY7Ci0JdWludDMyX3Qgc2N0cF9tdWx0aXBsZV9hc2NvbmZzOwotCXVpbnQzMl90IHNjdHBf
ZWNuX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX3ByX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX2F1
dGhfZW5hYmxlOwotCXVpbnQzMl90IHNjdHBfYXNjb25mX2VuYWJsZTsKLQl1aW50MzJfdCBzY3Rw
X3JlY29uZmlnX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX25yc2Fja19lbmFibGU7Ci0JdWludDMy
X3Qgc2N0cF9wa3Rkcm9wX2VuYWJsZTsKLQl1aW50MzJfdCBzY3RwX2ZyX21heF9idXJzdF9kZWZh
dWx0OwotI2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAwMDAwKQotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCXVpbnQzMl90IHNjdHBf
bm9fY3N1bV9vbl9sb29wYmFjazsKLSNlbmRpZgotI2VuZGlmCi0JdWludDMyX3Qgc2N0cF9wZWVy
X2NodW5rX29oOwotCXVpbnQzMl90IHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQ7Ci0JdWludDMyX3Qg
c2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlOwotCXVpbnQzMl90IHNjdHBfaGFzaHRibHNpemU7Ci0J
dWludDMyX3Qgc2N0cF9wY2J0YmxzaXplOwotCXVpbnQzMl90IHNjdHBfbWluX3NwbGl0X3BvaW50
OwotCXVpbnQzMl90IHNjdHBfY2h1bmtzY2FsZTsKLQl1aW50MzJfdCBzY3RwX2RlbGF5ZWRfc2Fj
a190aW1lX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdDsKLQl1aW50
MzJfdCBzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQ7Ci0JdWludDMyX3Qgc2N0cF9hc29jX2Zy
ZWVfcmVzY19saW1pdDsKLQl1aW50MzJfdCBzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0
OwotCXVpbnQzMl90IHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0
cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9zZWNyZXRfbGlm
ZXRpbWVfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3J0b19tYXhfZGVmYXVsdDsKLQl1aW50MzJf
dCBzY3RwX3J0b19taW5fZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX3J0b19pbml0aWFsX2RlZmF1
bHQ7Ci0JdWludDMyX3Qgc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdDsKLQl1aW50MzJfdCBzY3Rw
X3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9pbml0X3J0eF9tYXhf
ZGVmYXVsdDsKLQl1aW50MzJfdCBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdDsKLQl1aW50MzJf
dCBzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0OwotCXVpbnQzMl90IHNjdHBfcGF0aF9wZl90aHJl
c2hvbGQ7Ci0JdWludDMyX3Qgc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQ7Ci0JdWludDMyX3Qgc2N0
cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9ucl9vdXRnb2lu
Z19zdHJlYW1zX2RlZmF1bHQ7Ci0JdWludDMyX3Qgc2N0cF9jbXRfb25fb2ZmOwotCXVpbnQzMl90
IHNjdHBfY210X3VzZV9kYWM7Ci0JdWludDMyX3Qgc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJz
dDsKLQl1aW50MzJfdCBzY3RwX25hdF9mcmllbmRseTsKLQl1aW50MzJfdCBzY3RwX0wyX2FiY192
YXJpYWJsZTsKLQl1aW50MzJfdCBzY3RwX21idWZfdGhyZXNob2xkX2NvdW50OwotCXVpbnQzMl90
IHNjdHBfZG9fZHJhaW47Ci0JdWludDMyX3Qgc2N0cF9oYl9tYXhidXJzdDsKLQl1aW50MzJfdCBz
Y3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0OwotCXVpbnQzMl90IHNjdHBfbWluX3Jl
c2lkdWFsOwotCXVpbnQzMl90IHNjdHBfbWF4X3JldHJhbl9jaHVuazsKLQl1aW50MzJfdCBzY3Rw
X2xvZ2dpbmdfbGV2ZWw7Ci0JLyogSlJTIC0gVmFyaWFibGUgZm9yIGRlZmF1bHQgY29uZ2VzdGlv
biBjb250cm9sIG1vZHVsZSAqLwotCXVpbnQzMl90IHNjdHBfZGVmYXVsdF9jY19tb2R1bGU7Ci0J
LyogUlMgLSBWYXJpYWJsZSBmb3IgZGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUgKi8K
LQl1aW50MzJfdCBzY3RwX2RlZmF1bHRfc3NfbW9kdWxlOwotCXVpbnQzMl90IHNjdHBfZGVmYXVs
dF9mcmFnX2ludGVybGVhdmU7Ci0JdWludDMyX3Qgc2N0cF9tb2JpbGl0eV9iYXNlOwotCXVpbnQz
Ml90IHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmY7Ci0JdWludDMyX3Qgc2N0cF9pbml0c19pbmNs
dWRlX25hdF9mcmllbmRseTsKLQl1aW50MzJfdCBzY3RwX3J0dHZhcl9idzsKLQl1aW50MzJfdCBz
Y3RwX3J0dHZhcl9ydHQ7Ci0JdWludDMyX3Qgc2N0cF9ydHR2YXJfZXFyZXQ7Ci0JdWludDMyX3Qg
c2N0cF9zdGVhZHlfc3RlcDsKLQl1aW50MzJfdCBzY3RwX3VzZV9kY2NjX2VjbjsKLQl1aW50MzJf
dCBzY3RwX2RpYWdfaW5mb19jb2RlOwotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYp
Ci0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlzdHJ1Y3Qgc2N0cF9sb2cgKnNjdHBfbG9nOwot
I2Vsc2UKLQlzdHJ1Y3Qgc2N0cF9sb2cgc2N0cF9sb2c7Ci0jZW5kaWYKLSNlbmRpZgotCXVpbnQz
Ml90IHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0OwotCXVpbnQzMl90IHNjdHBfZW5hYmxlX3NhY2tf
aW1tZWRpYXRlbHk7Ci0JdWludDMyX3Qgc2N0cF92dGFnX3RpbWVfd2FpdDsKLQl1aW50MzJfdCBz
Y3RwX2J1ZmZlcl9zcGxpdHRpbmc7Ci0JdWludDMyX3Qgc2N0cF9pbml0aWFsX2N3bmQ7Ci0JdWlu
dDMyX3Qgc2N0cF9ibGFja2hvbGU7Ci0jaWYgZGVmaW5lZChTQ1RQX0RFQlVHKQotCXVpbnQzMl90
IHNjdHBfZGVidWdfb247Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQl1aW50MzJf
dCBzY3RwX2lnbm9yZV92bXdhcmVfaW50ZXJmYWNlczsKLQl1aW50MzJfdCBzY3RwX21haW5fdGlt
ZXI7Ci0JdWludDMyX3Qgc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0OwotCXVpbnQzMl90IHNjdHBf
dnRhZ193YXRjaGRvZ19saW1pdDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCXVpbnQzMl90IHNjdHBfb3V0cHV0X3VubG9j
a2VkOwotI2VuZGlmCi19OwotCi0vKgotICogbGltaXRzIGZvciB0aGUgc3lzY3RsIHZhcmlhYmxl
cwotICovCi0vKiBtYXhkZ3JhbTogTWF4aW11bSBvdXRnb2luZyBTQ1RQIGJ1ZmZlciBzaXplICov
Ci0jZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fREVTQwkJIk1heGltdW0gb3V0Z29pbmcgU0NUUCBi
dWZmZXIgc2l6ZSIKLSNkZWZpbmUgU0NUUENUTF9NQVhER1JBTV9NSU4JCTAKLSNkZWZpbmUgU0NU
UENUTF9NQVhER1JBTV9NQVgJCTB4RkZGRkZGRkYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0jZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fREVGQVVMVAlTQl9NQVgKLSNlbHNlCi0jZGVmaW5l
IFNDVFBDVExfTUFYREdSQU1fREVGQVVMVAkyNjIxNDQJLyogMjU2ayAqLwotI2VuZGlmCi0KLS8q
IHJlY3ZzcGFjZTogTWF4aW11bSBpbmNvbWluZyBTQ1RQIGJ1ZmZlciBzaXplICovCi0jZGVmaW5l
IFNDVFBDVExfUkVDVlNQQUNFX0RFU0MJCSJNYXhpbXVtIGluY29taW5nIFNDVFAgYnVmZmVyIHNp
emUiCi0jZGVmaW5lIFNDVFBDVExfUkVDVlNQQUNFX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX1JF
Q1ZTUEFDRV9NQVgJCTB4RkZGRkZGRkYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jZGVm
aW5lIFNDVFBDVExfUkVDVlNQQUNFX0RFRkFVTFQJU0JfUkFXCi0jZWxzZQotI2RlZmluZSBTQ1RQ
Q1RMX1JFQ1ZTUEFDRV9ERUZBVUxUCTI2MjE0NAkvKiAyNTZrICovCi0jZW5kaWYKLQotLyogYXV0
b2FzY29uZjogRW5hYmxlIFNDVFAgQXV0by1BU0NPTkYgKi8KLSNkZWZpbmUgU0NUUENUTF9BVVRP
QVNDT05GX0RFU0MJCSJFbmFibGUgU0NUUCBBdXRvLUFTQ09ORiIKLSNkZWZpbmUgU0NUUENUTF9B
VVRPQVNDT05GX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUFYCQkxCi0jZGVm
aW5lIFNDVFBDVExfQVVUT0FTQ09ORl9ERUZBVUxUCTEKLQotLyogYXV0b2FzY29uZjogRW5hYmxl
IFNDVFAgQXV0by1BU0NPTkYgKi8KLSNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVT
QwkiRW5hYmxlIFNDVFAgTXVsaXBsZS1BU0NPTkZzIgotI2RlZmluZSBTQ1RQQ1RMX01VTFRJUExF
QVNDT05GU19NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19NQVgJMQotI2Rl
ZmluZSBTQ1RQQ1RMX01VTFRJUExFQVNDT05GU19ERUZBVUxUCVNDVFBfREVGQVVMVF9NVUxUSVBM
RV9BU0NPTkZTCi0KLS8qIGVjbl9lbmFibGU6IEVuYWJsZSBTQ1RQIEVDTiAqLwotI2RlZmluZSBT
Q1RQQ1RMX0VDTl9FTkFCTEVfREVTQwkJIkVuYWJsZSBTQ1RQIEVDTiIKLSNkZWZpbmUgU0NUUENU
TF9FQ05fRU5BQkxFX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX0VDTl9FTkFCTEVfTUFYCQkxCi0j
ZGVmaW5lIFNDVFBDVExfRUNOX0VOQUJMRV9ERUZBVUxUCTEKLQotLyogcHJfZW5hYmxlOiBFbmFi
bGUgUFItU0NUUCAqLwotI2RlZmluZSBTQ1RQQ1RMX1BSX0VOQUJMRV9ERVNDCQkiRW5hYmxlIFBS
LVNDVFAiCi0jZGVmaW5lIFNDVFBDVExfUFJfRU5BQkxFX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RM
X1BSX0VOQUJMRV9NQVgJCTEKLSNkZWZpbmUgU0NUUENUTF9QUl9FTkFCTEVfREVGQVVMVAkxCi0K
LS8qIGF1dGhfZW5hYmxlOiBFbmFibGUgU0NUUCBBVVRIIGZ1bmN0aW9uICovCi0jZGVmaW5lIFND
VFBDVExfQVVUSF9FTkFCTEVfREVTQwkiRW5hYmxlIFNDVFAgQVVUSCBmdW5jdGlvbiIKLSNkZWZp
bmUgU0NUUENUTF9BVVRIX0VOQUJMRV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9BVVRIX0VOQUJM
RV9NQVgJCTEKLSNkZWZpbmUgU0NUUENUTF9BVVRIX0VOQUJMRV9ERUZBVUxUCTEKLQotLyogYXNj
b25mX2VuYWJsZTogRW5hYmxlIFNDVFAgQVNDT05GICovCi0jZGVmaW5lIFNDVFBDVExfQVNDT05G
X0VOQUJMRV9ERVNDCSJFbmFibGUgU0NUUCBBU0NPTkYiCi0jZGVmaW5lIFNDVFBDVExfQVNDT05G
X0VOQUJMRV9NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYCTEKLSNkZWZp
bmUgU0NUUENUTF9BU0NPTkZfRU5BQkxFX0RFRkFVTFQJMQotCi0vKiByZWNvbmZpZ19lbmFibGU6
IEVuYWJsZSBTQ1RQIFJFLUNPTkZJRyAqLwotI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJM
RV9ERVNDCSJFbmFibGUgU0NUUCBSRS1DT05GSUciCi0jZGVmaW5lIFNDVFBDVExfUkVDT05GSUdf
RU5BQkxFX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX01BWAkxCi0jZGVm
aW5lIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFRkFVTFQJMQotCi0vKiBucnNhY2tfZW5hYmxl
OiBFbmFibGUgTlJfU0FDSyAqLwotI2RlZmluZSBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfREVTQwki
RW5hYmxlIFNDVFAgTlItU0FDSyIKLSNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01JTgkw
Ci0jZGVmaW5lIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX05S
U0FDS19FTkFCTEVfREVGQVVMVAkwCi0KLS8qIHBrdGRyb3BfZW5hYmxlOiBFbmFibGUgU0NUUCBQ
YWNrZXQgRHJvcCBSZXBvcnRzICovCi0jZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfREVT
QwkiRW5hYmxlIFNDVFAgUEtURFJPUCIKLSNkZWZpbmUgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9N
SU4JMAotI2RlZmluZSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01BWAkxCi0jZGVmaW5lIFNDVFBD
VExfUEtURFJPUF9FTkFCTEVfREVGQVVMVAkwCi0KLS8qIGxvb3BiYWNrX25vY3N1bTogRW5hYmxl
IE5PIENzdW0gb24gcGFja2V0cyBzZW50IG9uIGxvb3BiYWNrICovCi0jZGVmaW5lIFNDVFBDVExf
TE9PUEJBQ0tfTk9DU1VNX0RFU0MJIkVuYWJsZSBOTyBDc3VtIG9uIHBhY2tldHMgc2VudCBvbiBs
b29wYmFjayIKLSNkZWZpbmUgU0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUlOCTAKLSNkZWZpbmUg
U0NUUENUTF9MT09QQkFDS19OT0NTVU1fTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9MT09QQkFDS19O
T0NTVU1fREVGQVVMVAkxCi0KLS8qIHBlZXJfY2hrb2g6IEFtb3VudCB0byBkZWJpdCBwZWVycyBy
d25kIHBlciBjaHVuayBzZW50ICovCi0jZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9ERVNDCQki
QW1vdW50IHRvIGRlYml0IHBlZXJzIHJ3bmQgcGVyIGNodW5rIHNlbnQiCi0jZGVmaW5lIFNDVFBD
VExfUEVFUl9DSEtPSF9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9QRUVSX0NIS09IX01BWAkJMHhG
RkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVGQVVMVAkyNTYKLQotLyogbWF4
YnVyc3Q6IERlZmF1bHQgbWF4IGJ1cnN0IGZvciBzY3RwIGVuZHBvaW50cyAqLwotI2RlZmluZSBT
Q1RQQ1RMX01BWEJVUlNUX0RFU0MJCSJEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2lu
dHMiCi0jZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfTUFY
QlVSU1RfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfTUFYQlVSU1RfREVGQVVMVAlT
Q1RQX0RFRl9NQVhfQlVSU1QKLQotLyogZnJfbWF4YnVyc3Q6IERlZmF1bHQgbWF4IGJ1cnN0IGZv
ciBzY3RwIGVuZHBvaW50cyB3aGVuIGZhc3QgcmV0cmFuc21pdHRpbmcgKi8KLSNkZWZpbmUgU0NU
UENUTF9GUk1BWEJVUlNUX0RFU0MJCSJEZWZhdWx0IGZyIG1heCBidXJzdCBmb3Igc2N0cCBlbmRw
b2ludHMiCi0jZGVmaW5lIFNDVFBDVExfRlJNQVhCVVJTVF9NSU4JCTAKLSNkZWZpbmUgU0NUUENU
TF9GUk1BWEJVUlNUX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX0ZSTUFYQlVSU1Rf
REVGQVVMVAlTQ1RQX0RFRl9GUk1BWF9CVVJTVAotCi0KLS8qIG1heGNodW5rczogRGVmYXVsdCBt
YXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jICovCi0jZGVmaW5lIFNDVFBDVExfTUFYQ0hVTktT
X0RFU0MJCSJEZWZhdWx0IG1heCBjaHVua3Mgb24gcXVldWUgcGVyIGFzb2MiCi0jZGVmaW5lIFND
VFBDVExfTUFYQ0hVTktTX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19NQVgJCTB4
RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9NQVhDSFVOS1NfREVGQVVMVAlTQ1RQX0FTT0NfTUFY
X0NIVU5LU19PTl9RVUVVRQotCi0vKiB0Y2JoYXNoc2l6ZTogVHVuYWJsZSBmb3IgSGFzaCB0YWJs
ZSBzaXplcyAqLwotI2RlZmluZSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX0RFU0MJIlR1bmFibGUgZm9y
IFRDQiBoYXNoIHRhYmxlIHNpemVzIgotI2RlZmluZSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01JTgkJ
MQotI2RlZmluZSBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBT
Q1RQQ1RMX1RDQkhBU0hTSVpFX0RFRkFVTFQJU0NUUF9UQ0JIQVNIU0laRQotCi0vKiBwY2JoYXNo
c2l6ZTogVHVuYWJsZSBmb3IgUENCIEhhc2ggdGFibGUgc2l6ZXMgKi8KLSNkZWZpbmUgU0NUUENU
TF9QQ0JIQVNIU0laRV9ERVNDCSJUdW5hYmxlIGZvciBQQ0IgaGFzaCB0YWJsZSBzaXplcyIKLSNk
ZWZpbmUgU0NUUENUTF9QQ0JIQVNIU0laRV9NSU4JCTEKLSNkZWZpbmUgU0NUUENUTF9QQ0JIQVNI
U0laRV9NQVgJCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9QQ0JIQVNIU0laRV9ERUZBVUxU
CVNDVFBfUENCSEFTSFNJWkUKLQotLyogbWluX3NwbGl0X3BvaW50OiBNaW5pbXVtIHNpemUgd2hl
biBzcGxpdHRpbmcgYSBjaHVuayAqLwotI2RlZmluZSBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVF9E
RVNDCSJNaW5pbXVtIHNpemUgd2hlbiBzcGxpdHRpbmcgYSBjaHVuayIKLSNkZWZpbmUgU0NUUENU
TF9NSU5fU1BMSVRfUE9JTlRfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRf
TUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVGQVVMVAlT
Q1RQX0RFRkFVTFRfU1BMSVRfUE9JTlRfTUlOCi0KLS8qIGNodW5rc2NhbGU6IFR1bmFibGUgZm9y
IFNjYWxpbmcgb2YgbnVtYmVyIG9mIGNodW5rcyBhbmQgbWVzc2FnZXMgKi8KLSNkZWZpbmUgU0NU
UENUTF9DSFVOS1NDQUxFX0RFU0MJCSJUdW5hYmxlIGZvciBTY2FsaW5nIG9mIG51bWJlciBvZiBj
aHVua3MgYW5kIG1lc3NhZ2VzIgotI2RlZmluZSBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUlOCQkxCi0j
ZGVmaW5lIFNDVFBDVExfQ0hVTktTQ0FMRV9NQVgJCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENU
TF9DSFVOS1NDQUxFX0RFRkFVTFQJU0NUUF9DSFVOS1FVRVVFX1NDQUxFCi0KLS8qIGRlbGF5ZWRf
c2Fja190aW1lOiBEZWZhdWx0IGRlbGF5ZWQgU0FDSyB0aW1lciBpbiBtcyAqLwotI2RlZmluZSBT
Q1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX0RFU0MJIkRlZmF1bHQgZGVsYXllZCBTQUNLIHRpbWVy
IGluIG1zIgotI2RlZmluZSBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX01JTgkwCi0jZGVmaW5l
IFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENU
TF9ERUxBWUVEX1NBQ0tfVElNRV9ERUZBVUxUCVNDVFBfUkVDVl9NU0VDCi0KLS8qIHNhY2tfZnJl
cTogRGVmYXVsdCBTQUNLIGZyZXF1ZW5jeSAqLwotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfRlJFUV9E
RVNDCQkiRGVmYXVsdCBTQUNLIGZyZXF1ZW5jeSIKLSNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFf
TUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfU0FDS19GUkVRX01BWAkJMHhGRkZGRkZGRgotI2RlZmlu
ZSBTQ1RQQ1RMX1NBQ0tfRlJFUV9ERUZBVUxUCVNDVFBfREVGQVVMVF9TQUNLX0ZSRVEKLQotLyog
c3lzX3Jlc291cmNlOiBNYXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3Rl
bSAqLwotI2RlZmluZSBTQ1RQQ1RMX1NZU19SRVNPVVJDRV9ERVNDCSJNYXggbnVtYmVyIG9mIGNh
Y2hlZCByZXNvdXJjZXMgaW4gdGhlIHN5c3RlbSIKLSNkZWZpbmUgU0NUUENUTF9TWVNfUkVTT1VS
Q0VfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUFYCTB4RkZGRkZGRkYKLSNk
ZWZpbmUgU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVGQVVMVAlTQ1RQX0RFRl9TWVNURU1fUkVTQ19M
SU1JVAotCi0vKiBhc29jX3Jlc291cmNlOiBNYXggbnVtYmVyIG9mIGNhY2hlZCByZXNvdXJjZXMg
aW4gYW4gYXNvYyAqLwotI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfREVTQwkiTWF4IG51
bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFuIGFzb2MiCi0jZGVmaW5lIFNDVFBDVExfQVNP
Q19SRVNPVVJDRV9NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUFYCTB4RkZG
RkZGRkYKLSNkZWZpbmUgU0NUUENUTF9BU09DX1JFU09VUkNFX0RFRkFVTFQJU0NUUF9ERUZfQVNP
Q19SRVNDX0xJTUlUCi0KLS8qIGhlYXJ0YmVhdF9pbnRlcnZhbDogRGVmYXVsdCBoZWFydGJlYXQg
aW50ZXJ2YWwgaW4gbXMgKi8KLSNkZWZpbmUgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxfREVT
QwkiRGVmYXVsdCBoZWFydGJlYXQgaW50ZXJ2YWwgaW4gbXMiCi0jZGVmaW5lIFNDVFBDVExfSEVB
UlRCRUFUX0lOVEVSVkFMX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFM
X01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFV
TFQJU0NUUF9IQl9ERUZBVUxUX01TRUMKLQotLyogcG10dV9yYWlzZV90aW1lOiBEZWZhdWx0IFBN
VFUgcmFpc2UgdGltZXIgaW4gc2Vjb25kcyAqLwotI2RlZmluZSBTQ1RQQ1RMX1BNVFVfUkFJU0Vf
VElNRV9ERVNDCSJEZWZhdWx0IFBNVFUgcmFpc2UgdGltZXIgaW4gc2Vjb25kcyIKLSNkZWZpbmUg
U0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNF
X1RJTUVfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfREVG
QVVMVAlTQ1RQX0RFRl9QTVRVX1JBSVNFX1NFQwotCi0vKiBzaHV0ZG93bl9ndWFyZF90aW1lOiBE
ZWZhdWx0IHNodXRkb3duIGd1YXJkIHRpbWVyIGluIHNlY29uZHMgKi8KLSNkZWZpbmUgU0NUUENU
TF9TSFVURE9XTl9HVUFSRF9USU1FX0RFU0MJIlNodXRkb3duIGd1YXJkIHRpbWVyIGluIHNlY29u
ZHMgKDAgbWVhbnMgNSB0aW1lcyBSVE8uTWF4KSIKLSNkZWZpbmUgU0NUUENUTF9TSFVURE9XTl9H
VUFSRF9USU1FX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUFY
CQkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfU0hVVERPV05fR1VBUkRfVElNRV9ERUZBVUxU
CTAKLQotLyogc2VjcmV0X2xpZmV0aW1lOiBEZWZhdWx0IHNlY3JldCBsaWZldGltZSBpbiBzZWNv
bmRzICovCi0jZGVmaW5lIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX0RFU0MJIkRlZmF1bHQgc2Vj
cmV0IGxpZmV0aW1lIGluIHNlY29uZHMiCi0jZGVmaW5lIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1F
X01JTgkwCi0jZGVmaW5lIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX01BWAkweEZGRkZGRkZGCi0j
ZGVmaW5lIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FX0RFRkFVTFQJU0NUUF9ERUZBVUxUX1NFQ1JF
VF9MSUZFX1NFQwotCi0vKiBydG9fbWF4OiBEZWZhdWx0IG1heGltdW0gcmV0cmFuc21pc3Npb24g
dGltZW91dCBpbiBtcyAqLwotI2RlZmluZSBTQ1RQQ1RMX1JUT19NQVhfREVTQwkJIkRlZmF1bHQg
bWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zIgotI2RlZmluZSBTQ1RQQ1RMX1JU
T19NQVhfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfUlRPX01BWF9NQVgJCTB4RkZGRkZGRkYKLSNk
ZWZpbmUgU0NUUENUTF9SVE9fTUFYX0RFRkFVTFQJCVNDVFBfUlRPX1VQUEVSX0JPVU5ECi0KLS8q
IHJ0b19taW46IERlZmF1bHQgbWluaW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zICov
Ci0jZGVmaW5lIFNDVFBDVExfUlRPX01JTl9ERVNDCQkiRGVmYXVsdCBtaW5pbXVtIHJldHJhbnNt
aXNzaW9uIHRpbWVvdXQgaW4gbXMiCi0jZGVmaW5lIFNDVFBDVExfUlRPX01JTl9NSU4JCTAKLSNk
ZWZpbmUgU0NUUENUTF9SVE9fTUlOX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX1JU
T19NSU5fREVGQVVMVAkJU0NUUF9SVE9fTE9XRVJfQk9VTkQKLQotLyogcnRvX2luaXRpYWw6IERl
ZmF1bHQgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGluIG1zICovCi0jZGVmaW5lIFND
VFBDVExfUlRPX0lOSVRJQUxfREVTQwkiRGVmYXVsdCBpbml0aWFsIHJldHJhbnNtaXNzaW9uIHRp
bWVvdXQgaW4gbXMiCi0jZGVmaW5lIFNDVFBDVExfUlRPX0lOSVRJQUxfTUlOCQkwCi0jZGVmaW5l
IFNDVFBDVExfUlRPX0lOSVRJQUxfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfUlRP
X0lOSVRJQUxfREVGQVVMVAlTQ1RQX1JUT19JTklUSUFMCi0KLS8qIGluaXRfcnRvX21heDogRGVm
YXVsdCBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgZHVyaW5nIGFzc29jaWF0aW9uIHNl
dHVwIGluIG1zICovCi0jZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX0RFU0MJIkRlZmF1bHQg
bWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGR1cmluZyBhc3NvY2lhdGlvbiBzZXR1cCBp
biBtcyIKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUT19NQVhfTUlOCTAKLSNkZWZpbmUgU0NUUENU
TF9JTklUX1JUT19NQVhfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUT19N
QVhfREVGQVVMVAlTQ1RQX1JUT19VUFBFUl9CT1VORAotCi0vKiB2YWxpZF9jb29raWVfbGlmZTog
RGVmYXVsdCBjb29raWUgbGlmZXRpbWUgaW4gc2VjICovCi0jZGVmaW5lIFNDVFBDVExfVkFMSURf
Q09PS0lFX0xJRkVfREVTQwkiRGVmYXVsdCBjb29raWUgbGlmZXRpbWUgaW4gc2Vjb25kcyIKLSNk
ZWZpbmUgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX1ZB
TElEX0NPT0tJRV9MSUZFX01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExfVkFMSURfQ09P
S0lFX0xJRkVfREVGQVVMVAlTQ1RQX0RFRkFVTFRfQ09PS0lFX0xJRkUKLQotLyogaW5pdF9ydHhf
bWF4OiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGZvciBJTklUIGNo
dW5rcyAqLwotI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9ERVNDCSJEZWZhdWx0IG1heGlt
dW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9uIGZvciBJTklUIGNodW5rcyIKLSNkZWZpbmUgU0NU
UENUTF9JTklUX1JUWF9NQVhfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfTUFY
CTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfREVGQVVMVAlTQ1RQX0RF
Rl9NQVhfSU5JVAotCi0vKiBhc3NvY19ydHhfbWF4OiBEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9m
IHJldHJhbnNtaXNzaW9ucyBwZXIgYXNzb2NpYXRpb24gKi8KLSNkZWZpbmUgU0NUUENUTF9BU1NP
Q19SVFhfTUFYX0RFU0MJIkRlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgcmV0cmFuc21pc3Npb25z
IHBlciBhc3NvY2lhdGlvbiIKLSNkZWZpbmUgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01JTgkwCi0j
ZGVmaW5lIFNDVFBDVExfQVNTT0NfUlRYX01BWF9NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQ
Q1RMX0FTU09DX1JUWF9NQVhfREVGQVVMVAlTQ1RQX0RFRl9NQVhfU0VORAotCi0vKiBwYXRoX3J0
eF9tYXg6IERlZmF1bHQgbWF4aW11bSBvZiByZXRyYW5zbWlzc2lvbnMgcGVyIHBhdGggKi8KLSNk
ZWZpbmUgU0NUUENUTF9QQVRIX1JUWF9NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIG9mIHJldHJh
bnNtaXNzaW9ucyBwZXIgcGF0aCIKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUlOCTAK
LSNkZWZpbmUgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUFYCTB4RkZGRkZGRkYKLSNkZWZpbmUgU0NU
UENUTF9QQVRIX1JUWF9NQVhfREVGQVVMVAlTQ1RQX0RFRl9NQVhfUEFUSF9SVFgKLQotLyogcGF0
aF9wZl90aHJlc2hvbGQ6IHRocmVzaG9sZCBmb3IgY29uc2lkZXJpbmcgdGhlIHBhdGggcG90ZW50
aWFsbHkgZmFpbGVkICovCi0jZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfREVTQwkJ
IkRlZmF1bHQgcG90ZW50aWFsbHkgZmFpbGVkIHRocmVzaG9sZCIKLSNkZWZpbmUgU0NUUENUTF9Q
QVRIX1BGX1RIUkVTSE9MRF9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9M
RF9NQVgJCTB4RkZGRgotI2RlZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFRkFVTFQJ
U0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NQVgKLQotLyogYWRkX21vcmVfb25fb3V0cHV0OiBX
aGVuIHNwYWNlLXdpc2UgaXMgaXQgd29ydGh3aGlsZSB0byB0cnkgdG8gYWRkIG1vcmUgdG8gYSBz
b2NrZXQgc2VuZCBidWZmZXIgKi8KLSNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRf
REVTQwkiV2hlbiBzcGFjZS13aXNlIGlzIGl0IHdvcnRod2hpbGUgdG8gdHJ5IHRvIGFkZCBtb3Jl
IHRvIGEgc29ja2V0IHNlbmQgYnVmZmVyIgotI2RlZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09V
VFBVVF9NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9NQVgJMHhGRkZG
RkZGRgotI2RlZmluZSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9ERUZBVUxUIFNDVFBfREVG
QVVMVF9BRERfTU9SRQotCi0vKiBpbmNvbWluZ19zdHJlYW1zOiBEZWZhdWx0IG51bWJlciBvZiBp
bmNvbWluZyBzdHJlYW1zICovCi0jZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19ERVND
CSJEZWZhdWx0IG51bWJlciBvZiBpbmNvbWluZyBzdHJlYW1zIgotI2RlZmluZSBTQ1RQQ1RMX0lO
Q09NSU5HX1NUUkVBTVNfTUlOCTEKLSNkZWZpbmUgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX01B
WAk2NTUzNQotI2RlZmluZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNfREVGQVVMVCBTQ1RQX0lT
VFJFQU1fSU5JVElBTAotCi0vKiBvdXRnb2luZ19zdHJlYW1zOiBEZWZhdWx0IG51bWJlciBvZiBv
dXRnb2luZyBzdHJlYW1zICovCi0jZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19ERVND
CSJEZWZhdWx0IG51bWJlciBvZiBvdXRnb2luZyBzdHJlYW1zIgotI2RlZmluZSBTQ1RQQ1RMX09V
VEdPSU5HX1NUUkVBTVNfTUlOCTEKLSNkZWZpbmUgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01B
WAk2NTUzNQotI2RlZmluZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVGQVVMVCBTQ1RQX09T
VFJFQU1fSU5JVElBTAotCi0vKiBjbXRfb25fb2ZmOiBDTVQgb24vb2ZmIGZsYWcgKi8KLSNkZWZp
bmUgU0NUUENUTF9DTVRfT05fT0ZGX0RFU0MJCSJDTVQgc2V0dGluZ3MiCi0jZGVmaW5lIFNDVFBD
VExfQ01UX09OX09GRl9NSU4JCVNDVFBfQ01UX09GRgotI2RlZmluZSBTQ1RQQ1RMX0NNVF9PTl9P
RkZfTUFYCQlTQ1RQX0NNVF9NQVgKLSNkZWZpbmUgU0NUUENUTF9DTVRfT05fT0ZGX0RFRkFVTFQJ
U0NUUF9DTVRfT0ZGCi0KLS8qIGNtdF91c2VfZGFjOiBDTVQgREFDIG9uL29mZiBmbGFnICovCi0j
ZGVmaW5lIFNDVFBDVExfQ01UX1VTRV9EQUNfREVTQwkiQ01UIERBQyBvbi9vZmYgZmxhZyIKLSNk
ZWZpbmUgU0NUUENUTF9DTVRfVVNFX0RBQ19NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9DTVRfVVNF
X0RBQ19NQVgJCTEKLSNkZWZpbmUgU0NUUENUTF9DTVRfVVNFX0RBQ19ERUZBVUxUICAgIAkwCi0K
LS8qIGN3bmRfbWF4YnVyc3Q6IFVzZSBhIENXTkQgYWRqdXN0aW5nIG1heGJ1cnN0ICovCi0jZGVm
aW5lIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9ERVNDCSJVc2UgYSBDV05EIGFkanVzdGluZyBtYXhi
dXJzdCIKLSNkZWZpbmUgU0NUUENUTF9DV05EX01BWEJVUlNUX01JTgkwCi0jZGVmaW5lIFNDVFBD
VExfQ1dORF9NQVhCVVJTVF9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVG
QVVMVAkxCi0KLS8qIG5hdF9mcmllbmRseTogU0NUUCBOQVQgZnJpZW5kbHkgb3BlcmF0aW9uICov
Ci0jZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX0RFU0MJIlNDVFAgTkFUIGZyaWVuZGx5IG9w
ZXJhdGlvbiIKLSNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfTUlOCTAKLSNkZWZpbmUgU0NU
UENUTF9OQVRfRlJJRU5ETFlfTUFYCTEKLSNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVG
QVVMVAkxCi0KLS8qIGFiY19sX3ZhcjogU0NUUCBBQkMgbWF4IGluY3JlYXNlIHBlciBTQUNLIChM
KSAqLwotI2RlZmluZSBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERVNDCQkiU0NUUCBBQkMgbWF4IGluY3Jl
YXNlIHBlciBTQUNLIChMKSIKLSNkZWZpbmUgU0NUUENUTF9BQkNfTF9WQVJfTUlOCQkwCi0jZGVm
aW5lIFNDVFBDVExfQUJDX0xfVkFSX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX0FC
Q19MX1ZBUl9ERUZBVUxUCTIKLQotLyogbWF4X2NoYWluZWRfbWJ1ZnM6IERlZmF1bHQgbWF4IG51
bWJlciBvZiBzbWFsbCBtYnVmcyBvbiBhIGNoYWluICovCi0jZGVmaW5lIFNDVFBDVExfTUFYX0NI
QUlORURfTUJVRlNfREVTQwkiRGVmYXVsdCBtYXggbnVtYmVyIG9mIHNtYWxsIG1idWZzIG9uIGEg
Y2hhaW4iCi0jZGVmaW5lIFNDVFBDVExfTUFYX0NIQUlORURfTUJVRlNfTUlOCTAKLSNkZWZpbmUg
U0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGU19NQVgJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RM
X01BWF9DSEFJTkVEX01CVUZTX0RFRkFVTFQJU0NUUF9ERUZBVUxUX01CVUZTX0lOX0NIQUlOCi0K
LS8qIGRvX3NjdHBfZHJhaW46IFNob3VsZCBTQ1RQIHJlc3BvbmQgdG8gdGhlIGRyYWluIGNhbGxz
ICovCi0jZGVmaW5lIFNDVFBDVExfRE9fU0NUUF9EUkFJTl9ERVNDCSJTaG91bGQgU0NUUCByZXNw
b25kIHRvIHRoZSBkcmFpbiBjYWxscyIKLSNkZWZpbmUgU0NUUENUTF9ET19TQ1RQX0RSQUlOX01J
TgkwCi0jZGVmaW5lIFNDVFBDVExfRE9fU0NUUF9EUkFJTl9NQVgJMQotI2RlZmluZSBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU5fREVGQVVMVAkxCi0KLS8qIGhiX21heF9idXJzdDogQ29uZmlybWF0aW9u
IEhlYXJ0YmVhdCBtYXggYnVyc3Q/ICovCi0jZGVmaW5lIFNDVFBDVExfSEJfTUFYX0JVUlNUX0RF
U0MJIkNvbmZpcm1hdGlvbiBIZWFydGJlYXQgbWF4IGJ1cnN0IgotI2RlZmluZSBTQ1RQQ1RMX0hC
X01BWF9CVVJTVF9NSU4JMQotI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9NQVgJMHhGRkZG
RkZGRgotI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9ERUZBVUxUCVNDVFBfREVGX0hCTUFY
X0JVUlNUCi0KLS8qIGFib3J0X2F0X2xpbWl0OiBXaGVuIG9uZS0yLW9uZSBoaXRzIHFsaW1pdCBh
Ym9ydCAqLwotI2RlZmluZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFU0MJIldoZW4gb25lLTIt
b25lIGhpdHMgcWxpbWl0IGFib3J0IgotI2RlZmluZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01J
TgkwCi0jZGVmaW5lIFNDVFBDVExfQUJPUlRfQVRfTElNSVRfTUFYCTEKLSNkZWZpbmUgU0NUUENU
TF9BQk9SVF9BVF9MSU1JVF9ERUZBVUxUCTAKLQotLyogbWluX3Jlc2lkdWFsOiBtaW4gcmVzaWR1
YWwgaW4gYSBkYXRhIGZyYWdtZW50IGxlZnRvdmVyICovCi0jZGVmaW5lIFNDVFBDVExfTUlOX1JF
U0lEVUFMX0RFU0MJIk1pbmltdW0gcmVzaWR1YWwgZGF0YSBjaHVuayBpbiBzZWNvbmQgcGFydCBv
ZiBzcGxpdCIKLSNkZWZpbmUgU0NUUENUTF9NSU5fUkVTSURVQUxfTUlOCTIwCi0jZGVmaW5lIFND
VFBDVExfTUlOX1JFU0lEVUFMX01BWAk2NTUzNQotI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVB
TF9ERUZBVUxUCTE0NTIKLQotLyogbWF4X3JldHJhbl9jaHVuazogbWF4IGNodW5rIHJldHJhbnNt
aXNzaW9ucyAqLwotI2RlZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTktfREVTQwkiTWF4aW11
bSB0aW1lcyBhbiB1bmx1Y2t5IGNodW5rIGNhbiBiZSByZXRyYW4nZCBiZWZvcmUgYXNzb2MgYWJv
cnQiCi0jZGVmaW5lIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4JMAotI2RlZmluZSBTQ1RQ
Q1RMX01BWF9SRVRSQU5fQ0hVTktfTUFYCTY1NTM1Ci0jZGVmaW5lIFNDVFBDVExfTUFYX1JFVFJB
Tl9DSFVOS19ERUZBVUxUCTMwCi0KLS8qIHNjdHBfbG9nZ2luZzogVGhpcyBnaXZlcyB1cyBsb2dn
aW5nIHdoZW4gdGhlIG9wdGlvbnMgYXJlIGVuYWJsZWQgKi8KLSNkZWZpbmUgU0NUUENUTF9MT0dH
SU5HX0xFVkVMX0RFU0MJIkx0cmFjZS9LVFIgdHJhY2UgbG9nZ2luZyBsZXZlbCIKLSNkZWZpbmUg
U0NUUENUTF9MT0dHSU5HX0xFVkVMX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfTE9HR0lOR19MRVZF
TF9NQVgJMHhmZmZmZmZmZgotI2RlZmluZSBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfREVGQVVMVAkw
Ci0KLS8qIEpSUyAtIGRlZmF1bHQgY29uZ2VzdGlvbiBjb250cm9sIG1vZHVsZSBzeXNjdGwgKi8K
LSNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9ERVNDCQkiRGVmYXVsdCBjb25nZXN0
aW9uIGNvbnRyb2wgbW9kdWxlIgotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01J
TgkJMAotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX01BWAkJMgotI2RlZmluZSBT
Q1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxFX0RFRkFVTFQJMAotCi0vKiBSUyAtIGRlZmF1bHQgc3Ry
ZWFtIHNjaGVkdWxpbmcgbW9kdWxlIHN5c2N0bCAqLwotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRf
U1NfTU9EVUxFX0RFU0MJCSJEZWZhdWx0IHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSIKLSNkZWZp
bmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9ERUZB
VUxUX1NTX01PRFVMRV9NQVgJCTUKLSNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9E
RUZBVUxUCTAKLQotLyogUlJTIC0gZGVmYXVsdCBmcmFnbWVudCBpbnRlcmxlYXZlICovCi0jZGVm
aW5lIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfREVTQwkiRGVmYXVsdCBmcmFnbWVu
dCBpbnRlcmxlYXZlIGxldmVsIgotI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxF
QVZFX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfTUFYCTIK
LSNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9ERUZBVUxUCTEKLQotLyog
bW9iaWxpdHlfYmFzZTogRW5hYmxlIFNDVFAgbW9iaWxpdHkgc3VwcG9ydCAqLwotI2RlZmluZSBT
Q1RQQ1RMX01PQklMSVRZX0JBU0VfREVTQwkiRW5hYmxlIFNDVFAgYmFzZSBtb2JpbGl0eSIKLSNk
ZWZpbmUgU0NUUENUTF9NT0JJTElUWV9CQVNFX01JTgkwCi0jZGVmaW5lIFNDVFBDVExfTU9CSUxJ
VFlfQkFTRV9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0JBU0VfREVGQVVMVAkwCi0K
LS8qIG1vYmlsaXR5X2Zhc3RoYW5kb2ZmOiBFbmFibGUgU0NUUCBmYXN0IGhhbmRvZmYgc3VwcG9y
dCAqLwotI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFU0MJIkVuYWJsZSBT
Q1RQIGZhc3QgaGFuZG9mZiIKLSNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9N
SU4JMAotI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX01BWAkxCi0jZGVmaW5l
IFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkZfREVGQVVMVAkwCi0KLS8qIEVuYWJsZSBTQ1RQ
L1VEUCB0dW5uZWxpbmcgcG9ydCAqLwotI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9S
VF9ERVNDCQkiU2V0IHRoZSBTQ1RQL1VEUCB0dW5uZWxpbmcgcG9ydCIKLSNkZWZpbmUgU0NUUENU
TF9VRFBfVFVOTkVMSU5HX1BPUlRfTUlOCQkwCi0jZGVmaW5lIFNDVFBDVExfVURQX1RVTk5FTElO
R19QT1JUX01BWAkJNjU1MzUKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2RlZmluZSBTQ1RQ
Q1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERUZBVUxUCTAKLSNlbHNlCi0jZGVmaW5lIFNDVFBDVExf
VURQX1RVTk5FTElOR19QT1JUX0RFRkFVTFQJU0NUUF9PVkVSX1VEUF9UVU5ORUxJTkdfUE9SVAot
I2VuZGlmCi0KLS8qIEVuYWJsZSBzZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZIGJpdCAq
LwotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX0RFU0MJIkVuYWJsZSBz
ZW5kaW5nIG9mIHRoZSBTQUNLLUlNTUVESUFURUxZLWJpdC4iCi0jZGVmaW5lIFNDVFBDVExfU0FD
S19JTU1FRElBVEVMWV9FTkFCTEVfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFU
RUxZX0VOQUJMRV9NQVgJMQotI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxF
X0RFRkFVTFQJU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9NQVgKLQotLyogRW5hYmxl
IHNlbmRpbmcgb2YgdGhlIE5BVC1GUklFTkRMWSBtZXNzYWdlICovCi0jZGVmaW5lIFNDVFBDVExf
TkFUX0ZSSUVORExZX0lOSVRTX0RFU0MJIkVuYWJsZSBzZW5kaW5nIG9mIHRoZSBuYXQtZnJpZW5k
bHkgU0NUUCBvcHRpb24gb24gSU5JVHMuIgotI2RlZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9J
TklUU19NSU4JMAotI2RlZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NQVgJMQotI2Rl
ZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19ERUZBVUxUCVNDVFBDVExfTkFUX0ZSSUVO
RExZX0lOSVRTX01JTgotCi0vKiBWdGFnIHRpbWUgd2FpdCBpbiBzZWNvbmRzICovCi0jZGVmaW5l
IFNDVFBDVExfVElNRV9XQUlUX0RFU0MJIlZ0YWcgdGltZSB3YWl0IHRpbWUgaW4gc2Vjb25kcywg
MCBkaXNhYmxlcyBpdC4iCi0jZGVmaW5lIFNDVFBDVExfVElNRV9XQUlUX01JTgkwCi0jZGVmaW5l
IFNDVFBDVExfVElNRV9XQUlUX01BWAkweGZmZmZmZmZmCi0jZGVmaW5lIFNDVFBDVExfVElNRV9X
QUlUX0RFRkFVTFQJU0NUUF9USU1FX1dBSVQKLQotLyogRW5hYmxlIFNlbmQvUmVjZWl2ZSBidWZm
ZXIgc3BsaXR0aW5nICovCi0jZGVmaW5lIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19ERVNDCQki
RW5hYmxlIHNlbmQvcmVjZWl2ZSBidWZmZXIgc3BsaXR0aW5nLiIKLSNkZWZpbmUgU0NUUENUTF9C
VUZGRVJfU1BMSVRUSU5HX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdf
TUFYCQkweDMKLSNkZWZpbmUgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX0RFRkFVTFQJU0NUUENU
TF9CVUZGRVJfU1BMSVRUSU5HX01JTgotCi0vKiBJbml0aWFsIGNvbmdlc3Rpb24gd2luZG93IGlu
IE1UVSAqLwotI2RlZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERVNDCSJJbml0aWFsIGNvbmdl
c3Rpb24gd2luZG93IGluIE1UVXMiCi0jZGVmaW5lIFNDVFBDVExfSU5JVElBTF9DV05EX01JTgkw
Ci0jZGVmaW5lIFNDVFBDVExfSU5JVElBTF9DV05EX01BWAkweGZmZmZmZmZmCi0jZGVmaW5lIFND
VFBDVExfSU5JVElBTF9DV05EX0RFRkFVTFQJMwotCi0vKiBydHR2YXIgc21vb3RoIGF2ZyBmb3Ig
YncgY2FsYyAgKi8KLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfQldfREVTQwkiU2hpZnQgYW1vdW50
IGZvciBidyBzbW9vdGhpbmcgb24gcnR0IGNhbGMiCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX0JX
X01JTgkwCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX0JXX01BWAkzMgotI2RlZmluZSBTQ1RQQ1RM
X1JUVFZBUl9CV19ERUZBVUxUCTQKLQotLyogcnR0dmFyIHNtb290aCBhdmcgZm9yIGJ3IGNhbGMg
ICovCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX1JUVF9ERVNDCSJTaGlmdCBhbW91bnQgZm9yIHJ0
dCBzbW9vdGhpbmcgb24gcnR0IGNhbGMiCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX1JUVF9NSU4J
MAotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfTUFYCTMyCi0jZGVmaW5lIFNDVFBDVExfUlRU
VkFSX1JUVF9ERUZBVUxUCTUKLQotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9ERVNDCSJX
aGF0IHRvIHJldHVybiB3aGVuIHJ0dCBhbmQgYncgYXJlIHVuY2hhbmdlZCIKLSNkZWZpbmUgU0NU
UENUTF9SVFRWQVJfRVFSRVRfTUlOCTAKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfTUFY
CTEKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfREVGQVVMVAkwCi0KLSNkZWZpbmUgU0NU
UENUTF9SVFRWQVJfU1RFQURZU19ERVNDCSJIb3cgbWFueSB0aGUgc2FtZXMgaXQgdGFrZXMgdG8g
dHJ5IHN0ZXAgZG93biBvZiBjd25kIgotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01J
TgkwCi0jZGVmaW5lIFNDVFBDVExfUlRUVkFSX1NURUFEWVNfTUFYCTB4RkZGRgotI2RlZmluZSBT
Q1RQQ1RMX1JUVFZBUl9TVEVBRFlTX0RFRkFVTFQJMjAgLyogMCBtZWFucyBkaXNhYmxlIGZlYXR1
cmUgKi8KLQotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX0RFU0MJIkVuYWJsZSBmb3Ig
UlRDQyBDQyBkYXRhY2VudGVyIEVDTiIKLSNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9N
SU4JMAotI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNOX01BWAkxCi0jZGVmaW5lIFNDVFBD
VExfUlRUVkFSX0RDQ0NFQ05fREVGQVVMVAkxIC8qIDAgbWVhbnMgZGlzYWJsZSBmZWF0dXJlICov
Ci0KLSNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfREVTQwkJIkVuYWJsZSBTQ1RQIGJsYWNraG9s
aW5nLiBTZWUgYmxhY2tob2xlKDQpIGZvciBtb3JlIGRldGFpbHMuIgotI2RlZmluZSBTQ1RQQ1RM
X0JMQUNLSE9MRV9NSU4JCTAKLSNkZWZpbmUgU0NUUENUTF9CTEFDS0hPTEVfTUFYCQkyCi0jZGVm
aW5lIFNDVFBDVExfQkxBQ0tIT0xFX0RFRkFVTFQJU0NUUENUTF9CTEFDS0hPTEVfTUlOCi0KLSNk
ZWZpbmUgU0NUUENUTF9ESUFHX0lORk9fQ09ERV9ERVNDCSJEaWFnbm9zdGljIGluZm9ybWF0aW9u
IGVycm9yIGNhdXNlIGNvZGUiCi0jZGVmaW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUlOCTAK
LSNkZWZpbmUgU0NUUENUTF9ESUFHX0lORk9fQ09ERV9NQVgJNjU1MzUKLSNkZWZpbmUgU0NUUENU
TF9ESUFHX0lORk9fQ09ERV9ERUZBVUxUCTAKLQotI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKLS8q
IGRlYnVnOiBDb25maWd1cmUgZGVidWcgb3V0cHV0ICovCi0jZGVmaW5lIFNDVFBDVExfREVCVUdf
REVTQwkiQ29uZmlndXJlIGRlYnVnIG91dHB1dCIKLSNkZWZpbmUgU0NUUENUTF9ERUJVR19NSU4J
MAotI2RlZmluZSBTQ1RQQ1RMX0RFQlVHX01BWAkweEZGRkZGRkZGCi0jZGVmaW5lIFNDVFBDVExf
REVCVUdfREVGQVVMVAkwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmlu
ZSBTQ1RQQ1RMX01BSU5fVElNRVJfREVTQwkJIk1haW4gdGltZXIgaW50ZXJ2YWwgaW4gbXMiCi0j
ZGVmaW5lIFNDVFBDVExfTUFJTl9USU1FUl9NSU4JCTEKLSNkZWZpbmUgU0NUUENUTF9NQUlOX1RJ
TUVSX01BWAkJMHhGRkZGRkZGRgotI2RlZmluZSBTQ1RQQ1RMX01BSU5fVElNRVJfREVGQVVMVAkx
MAotCi0jZGVmaW5lIFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFU0MJCSJJZ25v
cmUgVk13YXJlIEludGVyZmFjZXMiCi0jZGVmaW5lIFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRF
UkZBQ0VTX01JTgkJMAotI2RlZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19N
QVgJCTEKLSNkZWZpbmUgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfREVGQVVMVAlT
Q1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NQVgKLSNlbmRpZgotCi0jaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0jZGVmaW5lIFND
VFBDVExfT1VUUFVUX1VOTE9DS0VEX0RFU0MJIlVubG9jayBzb2NrZXQgd2hlbiBzZW5kaW5nIHBh
Y2tldHMgZG93biB0byBJUC4iCi0jZGVmaW5lIFNDVFBDVExfT1VUUFVUX1VOTE9DS0VEX01JTgkw
Ci0jZGVmaW5lIFNDVFBDVExfT1VUUFVUX1VOTE9DS0VEX01BWAkxCi0jZGVmaW5lIFNDVFBDVExf
T1VUUFVUX1VOTE9DS0VEX0RFRkFVTFQJU0NUUENUTF9PVVRQVVRfVU5MT0NLRURfTUlOCi0jZW5k
aWYKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hE
T0dfTElNSVRfREVTQwkiQWRkcmVzcyB3YXRjaGRvZyBsaW1pdCIKLSNkZWZpbmUJU0NUUENUTF9B
RERSX1dBVENIRE9HX0xJTUlUX01JTgkJMAotI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hET0df
TElNSVRfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1J
VF9ERUZBVUxUCVNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9NSU4KLQotI2RlZmluZQlTQ1RQ
Q1RMX1ZUQUdfV0FUQ0hET0dfTElNSVRfREVTQwkiVlRhZyB3YXRjaGRvZyBsaW1pdCIKLSNkZWZp
bmUJU0NUUENUTF9WVEFHX1dBVENIRE9HX0xJTUlUX01JTgkJMAotI2RlZmluZQlTQ1RQQ1RMX1ZU
QUdfV0FUQ0hET0dfTElNSVRfTUFYCQkweEZGRkZGRkZGCi0jZGVmaW5lCVNDVFBDVExfVlRBR19X
QVRDSERPR19MSU1JVF9ERUZBVUxUCVNDVFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9NSU4KLSNl
bmRpZgotCi0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKFNZU0NUTF9ERUNMKQotU1lTQ1RMX0RFQ0woX25l
dF9pbmV0X3NjdHApOwotI2VuZGlmCi0jZW5kaWYKLQotdm9pZCBzY3RwX2luaXRfc3lzY3Rscyh2
b2lkKTsKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotdm9pZCBzY3RwX2ZpbmlzaF9zeXNjdGxz
KHZvaWQpOwotI2VuZGlmCi0KLSNlbmRpZiAvKiBfS0VSTkVMICovCi0jZW5kaWYgLyogX19zY3Rw
X3N5c2N0bF9oX18gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5j
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDk1MDdjNzE4ZjZmMTc0MGQ5YTRhOWI1YTk0ZWJhY2VlMDg2YzkzODQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3RpbWVyLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNjIwICswLDAgQEAKLS8qLQotICogQ29w
eXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWlj
aGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlIG1ldDoKLSAqCi0gKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCi0gKiAgICB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICoKLSAqIGIp
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4KLSAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIGMp
IE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFCi0gKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
Ci0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
LSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaWZkZWYgX19GcmVl
QlNEX18KLSNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KLV9fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9z
eXMvbmV0aW5ldC9zY3RwX3RpbWVyLmMgMzE3NTkyIDIwMTctMDQtMjkgMDk6NTc6MjdaIHR1ZXhl
biAkIik7Ci0jZW5kaWYKLQotI2RlZmluZSBfSVBfVkhMCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2lmZGVmIElORVQ2Ci0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQotI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2
X3Zhci5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90
aW1lci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfb3V0cHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25m
Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgotI2lmIGRlZmluZWQoSU5FVCkg
fHwgZGVmaW5lZChJTkVUNikKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQot
I2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChf
X0FQUExFX18pCi0jZGVmaW5lIEFQUExFX0ZJTEVfTk8gNgotI2VuZGlmCi0KLXZvaWQKLXNjdHBf
YXVkaXRfcmV0cmFubWlzc2lvbl9xdWV1ZShzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykK
LXsKLQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQlTQ1RQREJHKFNDVFBfREVCVUdf
VElNRVI0LCAiQXVkaXQgaW52b2tlZCBvbiBzZW5kIHF1ZXVlIGNudDolZCBvbnF1ZXVlOiVkXG4i
LAotCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250LAotCQkJYXNvYy0+c2VudF9xdWV1ZV9j
bnQpOwotCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7Ci0JYXNvYy0+c2VudF9xdWV1
ZV9jbnQgPSAwOwotCVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9u
ZXh0KSB7Ci0JCWlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCXNj
dHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJfQotCQlhc29j
LT5zZW50X3F1ZXVlX2NudCsrOwotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRy
b2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRB
R1JBTV9SRVNFTkQpIHsKLQkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRy
YW5fY250KTsKLQkJfQotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmFzY29uZl9zZW5k
X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JF
U0VORCkgewotCQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQp
OwotCQl9Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjQsICJBdWRpdCBjb21wbGV0ZXMg
cmV0cmFuOiVkIG9ucXVldWU6JWRcbiIsCi0JCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCwK
LQkJYXNvYy0+c2VudF9xdWV1ZV9jbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX3RocmVzaG9s
ZF9tYW5hZ2VtZW50KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQxNl90IHRocmVzaG9sZCkKLXsKLQlp
ZiAobmV0KSB7Ci0JCW5ldC0+ZXJyb3JfY291bnQrKzsKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJ
TUVSNCwgIkVycm9yIGNvdW50IGZvciAlcCBub3cgJWQgdGhyZXNoOiVkXG4iLAotCQkJKHZvaWQg
KiluZXQsIG5ldC0+ZXJyb3JfY291bnQsCi0JCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkKTsKLQkJ
aWYgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7Ci0JCQkvKiBX
ZSBoYWQgYSB0aHJlc2hvbGQgZmFpbHVyZSAqLwotCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9S
RUFDSEFCTEU7Ci0JCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVRX1BSSU1BUlk7
Ci0JCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7Ci0JCQkJc2N0cF91bHBfbm90
aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9ET1dOLAotCQkJCSAgICBzdGNiLCAwLAotCQkJCSAg
ICAodm9pZCAqKW5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJCX0KLQkJfSBlbHNlIGlmICgo
bmV0LT5wZl90aHJlc2hvbGQgPCBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSAmJgotCQkgICAgICAg
ICAgIChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQpKSB7Ci0JCQlpZiAoIShu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSB7Ci0JCQkJbmV0LT5kZXN0X3N0YXRlIHw9
IFNDVFBfQUREUl9QRjsKLQkJCQluZXQtPmxhc3RfYWN0aXZlID0gc2N0cF9nZXRfdGlja19jb3Vu
dCgpOwotCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0J
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJICAgICAg
ICAgICAgICAgIGlucCwgc3RjYiwgbmV0LAotCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01f
U0NUUF9USU1FUiArIFNDVFBfTE9DXzEpOwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJfQotCQl9Ci0JfQotCWlmIChz
dGNiID09IE5VTEwpCi0JCXJldHVybiAoMCk7Ci0KLQlpZiAobmV0KSB7Ci0JCWlmICgobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKSB7Ci0JCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERfTE9HR0lORykg
ewotCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0lOQ1IsCi0JCQkJCSAgICAgICBz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCQkJCSAgICAgICAoc3RjYi0+YXNvYy5v
dmVyYWxsX2Vycm9yX2NvdW50KzEpLAotCQkJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBfVElNRVIs
Ci0JCQkJCSAgICAgICBfX0xJTkVfXyk7Ci0JCQl9Ci0JCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJy
b3JfY291bnQrKzsKLQkJfQotCX0gZWxzZSB7Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7Ci0JCQlzY3RwX21pc2Nf
aW50cyhTQ1RQX1RIUkVTSE9MRF9JTkNSLAotCQkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxf
ZXJyb3JfY291bnQsCi0JCQkJICAgICAgIChzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQr
MSksCi0JCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX1RJTUVSLAotCQkJCSAgICAgICBfX0xJTkVf
Xyk7Ci0JCX0KLQkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50Kys7Ci0JfQotCVNDVFBE
QkcoU0NUUF9ERUJVR19USU1FUjQsICJPdmVyYWxsIGVycm9yIGNvdW50IGZvciAlcCBub3cgJWQg
dGhyZXNoOiV1IHN0YXRlOiV4XG4iLAotCQkodm9pZCAqKSZzdGNiLT5hc29jLCBzdGNiLT5hc29j
Lm92ZXJhbGxfZXJyb3JfY291bnQsCi0JCSh1aW50MzJfdCl0aHJlc2hvbGQsCi0JCSgobmV0ID09
IE5VTEwpID8gKHVpbnQzMl90KSAwIDogKHVpbnQzMl90KSBuZXQtPmRlc3Rfc3RhdGUpKTsKLQkv
KgotCSAqIFdlIHNwZWNpZmljYWxseSBkbyBub3QgZG8gPj0gdG8gZ2l2ZSB0aGUgYXNzb2Mgb25l
IG1vcmUgY2hhbmdlCi0JICogYmVmb3JlIHdlIGZhaWwgaXQuCi0JICovCi0JaWYgKHN0Y2ItPmFz
b2Mub3ZlcmFsbF9lcnJvcl9jb3VudCA+IHRocmVzaG9sZCkgewotCQkvKiBBYm9ydCBub3RpZmlj
YXRpb24gc2VuZHMgYSBVTFAgbm90aWZ5ICovCi0JCXN0cnVjdCBtYnVmICpvcF9lcnI7Ci0KLQkJ
b3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19p
bmZvX2NvZGUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBc3NvY2lhdGlvbiBl
cnJvciBjb3VudGVyIGV4Y2VlZGVkIik7Ci0JCWlucC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9G
Uk9NX1NDVFBfVElNRVIgKyBTQ1RQX0xPQ18yOwotCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9u
KGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlyZXR1cm4gKDEpOwot
CX0KLQlyZXR1cm4gKDApOwotfQotCi0vKgotICogc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoKSBy
ZXR1cm5zIGEgbm9uLU5VTEwgcG9pbnRlciBhcyBsb25nCi0gKiB0aGUgYXJndW1lbnQgbmV0IGlz
IG5vbi1OVUxMLgotICovCi1zdHJ1Y3Qgc2N0cF9uZXRzICoKLXNjdHBfZmluZF9hbHRlcm5hdGVf
bmV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCi0g
ICAgaW50IG1vZGUpCi17Ci0JLyogRmluZCBhbmQgcmV0dXJuIGFuIGFsdGVybmF0ZSBuZXR3b3Jr
IGlmIHBvc3NpYmxlICovCi0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0LCAqbW5ldCwgKm1pbl9lcnJv
cnNfbmV0ID0gTlVMTCAsICptYXhfY3duZF9uZXQgPSBOVUxMOwotCWludCBvbmNlOwotCS8qIEpS
UyA1LzE0LzA3IC0gSW5pdGlhbGl6ZSBtaW5fZXJyb3JzIHRvIGFuIGltcG9zc2libGUgdmFsdWUu
ICovCi0JaW50IG1pbl9lcnJvcnMgPSAtMTsKLQl1aW50MzJfdCBtYXhfY3duZCA9IDA7Ci0KLQlp
ZiAoc3RjYi0+YXNvYy5udW1uZXRzID09IDEpIHsKLQkJLyogTm8gb3RoZXJzIGJ1dCBuZXQgKi8K
LQkJcmV0dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKSk7Ci0JfQotCS8qCi0JICog
SlJTIDUvMTQvMDcgLSBJZiBtb2RlIGlzIHNldCB0byAyLCB1c2UgdGhlIENNVCBQRiBmaW5kIGFs
dGVybmF0ZSBuZXQgYWxnb3JpdGhtLgotCSAqIFRoaXMgYWxnb3JpdGhtIGNob29zZXMgdGhlIGFj
dGl2ZSBkZXN0aW5hdGlvbiAobm90IGluIFBGIHN0YXRlKSB3aXRoIHRoZSBsYXJnZXN0Ci0JICog
Y3duZCB2YWx1ZS4gSWYgYWxsIGRlc3RpbmF0aW9ucyBhcmUgaW4gUEYgc3RhdGUsIHVucmVhY2hh
YmxlLCBvciB1bmNvbmZpcm1lZCwgY2hvb3NlCi0JICogdGhlIGRlc2luYXRpb24gdGhhdCBpcyBp
biBQRiBzdGF0ZSB3aXRoIHRoZSBsb3dlc3QgZXJyb3IgY291bnQuIEluIGNhc2Ugb2YgYSB0aWUs
Ci0JICogY2hvb3NlIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2VudGx5IGFjdGl2
ZS4KLQkgKi8KLQlpZiAobW9kZSA9PSAyKSB7Ci0JCVRBSUxRX0ZPUkVBQ0gobW5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkvKiBKUlMgNS8xNC8wNyAtIElmIHRoZSBkZXN0
aW5hdGlvbiBpcyB1bnJlYWNoYWJsZSBvciB1bmNvbmZpcm1lZCwgc2tpcCBpdC4gKi8KLQkJCWlm
ICgoKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAhPSBTQ1RQX0FERFJf
UkVBQ0hBQkxFKSB8fAotCQkJICAgIChtbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09O
RklSTUVEKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJLyoKLQkJCSAqIEpSUyA1LzE0LzA3
IC0gIElmIHRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUgYnV0IGluIFBGIHN0YXRlLCBjb21w
YXJlCi0JCQkgKiAgdGhlIGVycm9yIGNvdW50IG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUgbWlu
aW11bSBlcnJvciBjb3VudCBzZWVuIHRodXMgZmFyLgotCQkJICogIFN0b3JlIHRoZSBkZXN0aW5h
dGlvbiB3aXRoIHRoZSBsb3dlciBlcnJvciBjb3VudC4gIElmIHRoZSBlcnJvciBjb3VudHMgYXJl
Ci0JCQkgKiAgZXF1YWwsIHN0b3JlIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHdhcyBtb3N0IHJlY2Vu
dGx5IGFjdGl2ZS4KLQkJCSAqLwotCQkJaWYgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
UEYpIHsKLQkJCQkvKgotCQkJCSAqIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIHVu
ZGVyIGNvbnNpZGVyYXRpb24gaXMgdGhlIGN1cnJlbnQKLQkJCQkgKiAgZGVzdGluYXRpb24sIHdv
cmsgYXMgaWYgdGhlIGVycm9yIGNvdW50IGlzIG9uZSBoaWdoZXIuICBUaGUKLQkJCQkgKiAgYWN0
dWFsIGVycm9yIGNvdW50IHdpbGwgbm90IGJlIGluY3JlbWVudGVkIHVudGlsIGxhdGVyIGluIHRo
ZQotCQkJCSAqICB0MyBoYW5kbGVyLgotCQkJCSAqLwotCQkJCWlmIChtbmV0ID09IG5ldCkgewot
CQkJCQlpZiAobWluX2Vycm9ycyA9PSAtMSkgewotCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVy
cm9yX2NvdW50ICsgMTsKLQkJCQkJCW1pbl9lcnJvcnNfbmV0ID0gbW5ldDsKLQkJCQkJfSBlbHNl
IGlmIChtbmV0LT5lcnJvcl9jb3VudCArIDEgPCBtaW5fZXJyb3JzKSB7Ci0JCQkJCQltaW5fZXJy
b3JzID0gbW5ldC0+ZXJyb3JfY291bnQgKyAxOwotCQkJCQkJbWluX2Vycm9yc19uZXQgPSBtbmV0
OwotCQkJCQl9IGVsc2UgaWYgKG1uZXQtPmVycm9yX2NvdW50ICsgMSA9PSBtaW5fZXJyb3JzCi0J
CQkJCQkJCSYmIG1uZXQtPmxhc3RfYWN0aXZlID4gbWluX2Vycm9yc19uZXQtPmxhc3RfYWN0aXZl
KSB7Ci0JCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5l
dC0+ZXJyb3JfY291bnQgKyAxOwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0gZWxzZSB7
Ci0JCQkJCWlmIChtaW5fZXJyb3JzID09IC0xKSB7Ci0JCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+
ZXJyb3JfY291bnQ7Ci0JCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCX0gZWxzZSBp
ZiAobW5ldC0+ZXJyb3JfY291bnQgPCBtaW5fZXJyb3JzKSB7Ci0JCQkJCQltaW5fZXJyb3JzID0g
bW5ldC0+ZXJyb3JfY291bnQ7Ci0JCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7Ci0JCQkJCX0g
ZWxzZSBpZiAobW5ldC0+ZXJyb3JfY291bnQgPT0gbWluX2Vycm9ycwotCQkJCQkJCQkmJiBtbmV0
LT5sYXN0X2FjdGl2ZSA+IG1pbl9lcnJvcnNfbmV0LT5sYXN0X2FjdGl2ZSkgewotCQkJCQkJbWlu
X2Vycm9yc19uZXQgPSBtbmV0OwotCQkJCQkJbWluX2Vycm9ycyA9IG1uZXQtPmVycm9yX2NvdW50
OwotCQkJCQl9Ci0JCQkJCWNvbnRpbnVlOwotCQkJCX0KLQkJCX0KLQkJCS8qCi0JCQkgKiBKUlMg
NS8xNC8wNyAtIElmIHRoZSBkZXN0aW5hdGlvbiBpcyByZWFjaGFibGUgYW5kIG5vdCBpbiBQRiBz
dGF0ZSwgY29tcGFyZSB0aGUKLQkJCSAqICBjd25kIG9mIHRoZSBkZXN0aW5hdGlvbiB0byB0aGUg
aGlnaGVzdCBjd25kIHNlZW4gdGh1cyBmYXIuICBTdG9yZSB0aGUKLQkJCSAqICBkZXN0aW5hdGlv
biB3aXRoIHRoZSBoaWdoZXIgY3duZCB2YWx1ZS4gIElmIHRoZSBjd25kIHZhbHVlcyBhcmUgZXF1
YWwsCi0JCQkgKiAgcmFuZG9tbHkgY2hvb3NlIG9uZSBvZiB0aGUgdHdvIGRlc3RpbmF0aW9ucy4K
LQkJCSAqLwotCQkJaWYgKG1heF9jd25kIDwgbW5ldC0+Y3duZCkgewotCQkJCW1heF9jd25kX25l
dCA9IG1uZXQ7Ci0JCQkJbWF4X2N3bmQgPSBtbmV0LT5jd25kOwotCQkJfSBlbHNlIGlmIChtYXhf
Y3duZCA9PSBtbmV0LT5jd25kKSB7Ci0JCQkJdWludDMyX3Qgcm5kdmFsOwotCQkJCXVpbnQ4X3Qg
dGhpc19yYW5kb207Ci0KLQkJCQlpZiAoc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4ID4gMykgewot
CQkJCQlybmR2YWwgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0
cF9lcCk7Ci0JCQkJCW1lbWNweShzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXMsICZybmR2YWws
IHNpemVvZihzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXMpKTsKLQkJCQkJdGhpc19yYW5kb20g
PSBzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXNbMF07Ci0JCQkJCXN0Y2ItPmFzb2MuaGJfcmFu
ZG9tX2lkeCsrOwotCQkJCQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOwotCQkJCX0g
ZWxzZSB7Ci0JCQkJCXRoaXNfcmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzW3N0
Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeF07Ci0JCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsr
OwotCQkJCQlzdGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOwotCQkJCX0KLQkJCQlpZiAo
dGhpc19yYW5kb20gJSAyID09IDEpIHsKLQkJCQkJbWF4X2N3bmRfbmV0ID0gbW5ldDsKLQkJCQkJ
bWF4X2N3bmQgPSBtbmV0LT5jd25kOyAvKiBVc2VsZXNzPyAqLwotCQkJCX0KLQkJCX0KLQkJfQot
CQlpZiAobWF4X2N3bmRfbmV0ID09IE5VTEwpIHsKLQkJCWlmIChtaW5fZXJyb3JzX25ldCA9PSBO
VUxMKSB7Ci0JCQkJcmV0dXJuIChuZXQpOwotCQkJfQotCQkJcmV0dXJuIChtaW5fZXJyb3JzX25l
dCk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4gKG1heF9jd25kX25ldCk7Ci0JCX0KLQl9IC8qIEpS
UyA1LzE0LzA3IC0gSWYgbW9kZSBpcyBzZXQgdG8gMSwgdXNlIHRoZSBDTVQgcG9saWN5IGZvciBj
aG9vc2luZyBhbiBhbHRlcm5hdGUgbmV0LiAqLwotCWVsc2UgaWYgKG1vZGUgPT0gMSkgewotCQlU
QUlMUV9GT1JFQUNIKG1uZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJaWYg
KCgobW5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpICE9IFNDVFBfQUREUl9S
RUFDSEFCTEUpIHx8Ci0JCQkgICAgKG1uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQpKSB7Ci0JCQkJLyoKLQkJCQkgKiB3aWxsIHNraXAgb25lcyB0aGF0IGFyZSBub3QtcmVh
Y2hhYmxlIG9yCi0JCQkJICogdW5jb25maXJtZWQKLQkJCQkgKi8KLQkJCQljb250aW51ZTsKLQkJ
CX0KLQkJCWlmIChtYXhfY3duZCA8IG1uZXQtPmN3bmQpIHsKLQkJCQltYXhfY3duZF9uZXQgPSBt
bmV0OwotCQkJCW1heF9jd25kID0gbW5ldC0+Y3duZDsKLQkJCX0gZWxzZSBpZiAobWF4X2N3bmQg
PT0gbW5ldC0+Y3duZCkgewotCQkJCXVpbnQzMl90IHJuZHZhbDsKLQkJCQl1aW50OF90IHRoaXNf
cmFuZG9tOwotCi0JCQkJaWYgKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCA+IDMpIHsKLQkJCQkJ
cm5kdmFsID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJnN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAp
OwotCQkJCQltZW1jcHkoc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzLCAmcm5kdmFsLAotCQkJ
CQkgICAgc2l6ZW9mKHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlcykpOwotCQkJCQl0aGlzX3Jh
bmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3ZhbHVlc1swXTsKLQkJCQkJc3RjYi0+YXNvYy5o
Yl9yYW5kb21faWR4ID0gMDsKLQkJCQkJc3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsK
LQkJCQl9IGVsc2UgewotCQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3Zh
bHVlc1tzdGNiLT5hc29jLmhiX3JhbmRvbV9pZHhdOwotCQkJCQlzdGNiLT5hc29jLmhiX3JhbmRv
bV9pZHgrKzsKLQkJCQkJc3RjYi0+YXNvYy5oYl9lY3RfcmFuZG9tYml0ID0gMDsKLQkJCQl9Ci0J
CQkJaWYgKHRoaXNfcmFuZG9tICUgMikgewotCQkJCQltYXhfY3duZF9uZXQgPSBtbmV0OwotCQkJ
CQltYXhfY3duZCA9IG1uZXQtPmN3bmQ7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChtYXhfY3du
ZF9uZXQpIHsKLQkJCXJldHVybiAobWF4X2N3bmRfbmV0KTsKLQkJfQotCX0KLQltbmV0ID0gbmV0
OwotCW9uY2UgPSAwOwotCi0JaWYgKG1uZXQgPT0gTlVMTCkgewotCQltbmV0ID0gVEFJTFFfRklS
U1QoJnN0Y2ItPmFzb2MubmV0cyk7Ci0JCWlmIChtbmV0ID09IE5VTEwpIHsKLQkJCXJldHVybiAo
TlVMTCk7Ci0JCX0KLQl9Ci0JZm9yICg7OykgewotCQlhbHQgPSBUQUlMUV9ORVhUKG1uZXQsIHNj
dHBfbmV4dCk7Ci0JCWlmIChhbHQgPT0gTlVMTCkgewotCQkJb25jZSsrOwotCQkJaWYgKG9uY2Ug
PiAxKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNv
Yy5uZXRzKTsKLQkJCWlmIChhbHQgPT0gTlVMTCkgewotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9
Ci0JCX0KLQkJaWYgKGFsdC0+cm8ucm9fcnQgPT0gTlVMTCkgewotCQkJaWYgKGFsdC0+cm8uX3Nf
YWRkcikgewotCQkJCXNjdHBfZnJlZV9pZmEoYWx0LT5yby5fc19hZGRyKTsKLQkJCQlhbHQtPnJv
Ll9zX2FkZHIgPSBOVUxMOwotCQkJfQotCQkJYWx0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7Ci0J
CX0KLQkJaWYgKCgoYWx0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgPT0gU0NU
UF9BRERSX1JFQUNIQUJMRSkgJiYKLQkJICAgIChhbHQtPnJvLnJvX3J0ICE9IE5VTEwpICYmCi0J
CSAgICAoIShhbHQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSkgewotCQkJ
LyogRm91bmQgYSByZWFjaGFibGUgYWRkcmVzcyAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJbW5ldCA9
IGFsdDsKLQl9Ci0KLQlpZiAoYWx0ID09IE5VTEwpIHsKLQkJLyogQ2FzZSB3aGVyZSBOTyBpbnN2
IG5ldHdvcmsgZXhpc3RzIChkb3JtYW50IHN0YXRlKSAqLwotCQkvKiB3ZSByb3RhdGUgZGVzdGlu
YXRpb25zICovCi0JCW9uY2UgPSAwOwotCQltbmV0ID0gbmV0OwotCQlmb3IgKDs7KSB7Ci0JCQlp
ZiAobW5ldCA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5u
ZXRzKSk7Ci0JCQl9Ci0JCQlhbHQgPSBUQUlMUV9ORVhUKG1uZXQsIHNjdHBfbmV4dCk7Ci0JCQlp
ZiAoYWx0ID09IE5VTEwpIHsKLQkJCQlvbmNlKys7Ci0JCQkJaWYgKG9uY2UgPiAxKSB7Ci0JCQkJ
CWJyZWFrOwotCQkJCX0KLQkJCQlhbHQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsK
LQkJCQlpZiAoYWx0ID09IE5VTEwpIHsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYg
KCghKGFsdC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpICYmCi0JCQkgICAg
KGFsdCAhPSBuZXQpKSB7Ci0JCQkJLyogRm91bmQgYW4gYWx0ZXJuYXRlIGFkZHJlc3MgKi8KLQkJ
CQlicmVhazsKLQkJCX0KLQkJCW1uZXQgPSBhbHQ7Ci0JCX0KLQl9Ci0JaWYgKGFsdCA9PSBOVUxM
KSB7Ci0JCXJldHVybiAobmV0KTsKLQl9Ci0JcmV0dXJuIChhbHQpOwotfQotCi1zdGF0aWMgdm9p
ZAotc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCwKLSAgICBpbnQgd2luX3Byb2JlLAotICAgIGludCBudW1fbWFy
a2VkLCBpbnQgbnVtX2FiYW5kb25lZCkKLXsKLQlpZiAobmV0LT5SVE8gPT0gMCkgewotCQlpZiAo
bmV0LT5SVE9fbWVhc3VyZWQpIHsKLQkJCW5ldC0+UlRPID0gc3RjYi0+YXNvYy5taW5ydG87Ci0J
CX0gZWxzZSB7Ci0JCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87Ci0JCX0KLQl9
Ci0JbmV0LT5SVE8gPDw9IDE7Ci0JaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5tYXhydG8pIHsK
LQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0bzsKLQl9Ci0JaWYgKCh3aW5fcHJvYmUgPT0g
MCkgJiYgKG51bV9tYXJrZWQgfHwgbnVtX2FiYW5kb25lZCkpIHsKLQkJLyogV2UgZG9uJ3QgYXBw
bHkgcGVuYWx0eSB0byB3aW5kb3cgcHJvYmUgc2NlbmFyaW9zICovCi0JCS8qIEpSUyAtIFVzZSB0
aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KLQkJc3RjYi0+
YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0Y2IsIG5l
dCk7Ci0JfQotfQotCi0jaWZuZGVmIElOVkFSSUFOVFMKLXN0YXRpYyB2b2lkCi1zY3RwX3JlY292
ZXJfc2VudF9saXN0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICpjaGssICpuY2hrOwotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOwotCi0J
YXNvYyA9ICZzdGNiLT5hc29jOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50
X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3Rf
YWNrZWRfc2VxLCBjaGstPnJlYy5kYXRhLnRzbikpIHsKLQkJCVNDVFBfUFJJTlRGKCJGb3VuZCBj
aGs6JXAgdHNuOiV4IDw9IGxhc3RfYWNrZWRfc2VxOiV4XG4iLAotCQkJICAgICAgICAgICAgKHZv
aWQgKiljaGssIGNoay0+cmVjLmRhdGEudHNuLCBhc29jLT5sYXN0X2Fja2VkX3NlcSk7Ci0JCQlp
ZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKLQkJCQlpZiAoYXNvYy0+
c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsKLQkJCQkJ
YXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotCQkJ
CX0KLQkJCX0KLQkJCWlmICgoYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtz
X29uX3F1ZXVlcyA9PSAwKSAmJgotCQkJICAgIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEu
c2lkXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgotCQkJICAgIFRBSUxR
X0VNUFRZKCZhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5vdXRxdWV1ZSkpIHsKLQkJ
CQlhc29jLT50cmlnZ2VyX3Jlc2V0ID0gMTsKLQkJCX0KLQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+
c2VudF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQkJaWYgKFBSX1NDVFBfRU5BQkxFRChjaGst
PmZsYWdzKSkgewotCQkJCWlmIChhc29jLT5wcl9zY3RwX2NudCAhPSAwKQotCQkJCQlhc29jLT5w
cl9zY3RwX2NudC0tOwotCQkJfQotCQkJaWYgKGNoay0+ZGF0YSkgewotCQkJCS8qc2FfaWdub3Jl
IE5PX05VTExfQ0hLKi8KLQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAx
KTsKLQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwot
CQkJCWlmIChhc29jLT5wcnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBfQlVGX0VOQUJMRUQoY2hr
LT5mbGFncykpIHsKLQkJCQkJYXNvYy0+c2VudF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0tOwotCQkJ
CX0KLQkJCX0KLQkJCWFzb2MtPnNlbnRfcXVldWVfY250LS07Ci0JCQlzY3RwX2ZyZWVfYV9jaHVu
ayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCX0KLQl9Ci0JU0NUUF9QUklOVEYo
ImFmdGVyIHJlY292ZXIgb3JkZXIgaXMgYXMgZm9sbG93c1xuIik7Ci0JVEFJTFFfRk9SRUFDSChj
aGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJU0NUUF9QUklOVEYoImNoazol
cCBUU046JXhcbiIsICh2b2lkICopY2hrLCBjaGstPnJlYy5kYXRhLnRzbik7Ci0JfQotfQotI2Vu
ZGlmCi0KLXN0YXRpYyBpbnQKLXNjdHBfbWFya19hbGxfZm9yX3Jlc2VuZChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgIHN0cnVjdCBzY3RwX25l
dHMgKmFsdCwKLSAgICBpbnQgd2luZG93X3Byb2JlLAotICAgIGludCAqbnVtX21hcmtlZCwKLSAg
ICBpbnQgKm51bV9hYmFuZG9uZWQpCi17Ci0KLQkvKgotCSAqIE1hcmsgYWxsIGNodW5rcyAod2Vs
bCBub3QgYWxsKSB0aGF0IHdlcmUgc2VudCB0byAqbmV0IGZvcgotCSAqIHJldHJhbnNtaXNzaW9u
LiBNb3ZlIHRoZW0gdG8gYWx0IGZvciB0aGVyZSBkZXN0aW5hdGlvbiBhcyB3ZWxsLi4uCi0JICog
V2Ugb25seSBtYXJrIGNodW5rcyB0aGF0IGhhdmUgYmVlbiBvdXRzdGFuZGluZyBsb25nIGVub3Vn
aCB0bwotCSAqIGhhdmUgcmVjZWl2ZWQgZmVlZC1iYWNrLgotCSAqLwotCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmNoaywgKm5jaGs7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbG5ldHM7Ci0Jc3RydWN0
IHRpbWV2YWwgbm93LCBtaW5fd2FpdCwgdHY7Ci0JaW50IGN1cl9ydG87Ci0JaW50IGNudF9hYmFu
ZG9uZWQ7Ci0JaW50IGF1ZGl0X3RmLCBudW1fbWssIGZpcjsKLQl1bnNpZ25lZCBpbnQgY250X21r
OwotCXVpbnQzMl90IG9yaWdfZmxpZ2h0LCBvcmlnX3RmOwotCXVpbnQzMl90IHRzbmxhc3QsIHRz
bmZpcnN0OwotCWludCByZWNvdmVyeV9jbnQgPSAwOwotCi0KLQkvKiBub25lIGluIGZsaWdodCBu
b3cgKi8KLQlhdWRpdF90ZiA9IDA7Ci0JZmlyID0gMDsKLQkvKgotCSAqIGZpZ3VyZSBvdXQgaG93
IGxvbmcgYSBkYXRhIGNodW5rIG11c3QgYmUgcGVuZGluZyBiZWZvcmUgd2UgY2FuCi0JICogbWFy
ayBpdCAuLgotCSAqLwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCS8qIGdl
dCBjdXIgcnRvIGluIG1pY3JvLXNlY29uZHMgKi8KLQljdXJfcnRvID0gKG5ldC0+bGFzdHNhID4+
IFNDVFBfUlRUX1NISUZUKSArIG5ldC0+bGFzdHN2OwotCWN1cl9ydG8gKj0gMTAwMDsKLQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VO
QUJMRSkgewotCQlzY3RwX2xvZ19mcihjdXJfcnRvLAotCQkJICAgIHN0Y2ItPmFzb2MucGVlcnNf
cnduZCwKLQkJCSAgICB3aW5kb3dfcHJvYmUsCi0JCQkgICAgU0NUUF9GUl9UM19NQVJLX1RJTUUp
OwotCQlzY3RwX2xvZ19mcihuZXQtPmZsaWdodF9zaXplLCAwLCAwLCBTQ1RQX0ZSX0NXTkRfUkVQ
T1JUKTsKLQkJc2N0cF9sb2dfZnIobmV0LT5mbGlnaHRfc2l6ZSwgbmV0LT5jd25kLCBzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodCwgU0NUUF9GUl9DV05EX1JFUE9SVCk7Ci0JfQotCXR2LnR2X3NlYyA9
IGN1cl9ydG8gLyAxMDAwMDAwOwotCXR2LnR2X3VzZWMgPSBjdXJfcnRvICUgMTAwMDAwMDsKLSNp
Zm5kZWYgX19GcmVlQlNEX18KLQl0aW1lcnN1Yigmbm93LCAmdHYsICZtaW5fd2FpdCk7Ci0jZWxz
ZQotCW1pbl93YWl0ID0gbm93OwotCXRpbWV2YWxzdWIoJm1pbl93YWl0LCAmdHYpOwotI2VuZGlm
Ci0JaWYgKG1pbl93YWl0LnR2X3NlYyA8IDAgfHwgbWluX3dhaXQudHZfdXNlYyA8IDApIHsKLQkJ
LyoKLQkJICogaWYgd2UgaGl0IGhlcmUsIHdlIGRvbid0IGhhdmUgZW5vdWdoIHNlY29uZHMgb24g
dGhlIGNsb2NrCi0JCSAqIHRvIGFjY291bnQgZm9yIHRoZSBSVE8uIFdlIGp1c3QgbGV0IHRoZSBs
b3dlciBzZWNvbmRzIGJlCi0JCSAqIHRoZSBib3VuZHMgYW5kIGRvbid0IHdvcnJ5IGFib3V0IGl0
LiBUaGlzIG1heSBtZWFuIHdlCi0JCSAqIHdpbGwgbWFyayBhIGxvdCBtb3JlIHRoYW4gd2Ugc2hv
dWxkLgotCQkgKi8KLQkJbWluX3dhaXQudHZfc2VjID0gbWluX3dhaXQudHZfdXNlYyA9IDA7Ci0J
fQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xP
R0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2ZyKGN1cl9ydG8sIG5vdy50dl9zZWMsIG5vdy50
dl91c2VjLCBTQ1RQX0ZSX1QzX01BUktfVElNRSk7Ci0JCXNjdHBfbG9nX2ZyKDAsIG1pbl93YWl0
LnR2X3NlYywgbWluX3dhaXQudHZfdXNlYywgU0NUUF9GUl9UM19NQVJLX1RJTUUpOwotCX0KLQkv
KgotCSAqIE91ciByd25kIHdpbGwgYmUgaW5jb3JyZWN0IGhlcmUgc2luY2Ugd2UgYXJlIG5vdCBh
ZGRpbmcgYmFjayB0aGUKLQkgKiBjbnQgKiBtYnVmIGJ1dCB3ZSB3aWxsIGZpeCB0aGF0IGRvd24g
YmVsb3cuCi0JICovCi0Jb3JpZ19mbGlnaHQgPSBuZXQtPmZsaWdodF9zaXplOwotCW9yaWdfdGYg
PSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsKLQotCW5ldC0+ZmFzdF9yZXRyYW5faXAgPSAwOwot
CS8qIE5vdyBvbiB0byBlYWNoIGNodW5rICovCi0JY250X2FiYW5kb25lZCA9IDA7Ci0JbnVtX21r
ID0gY250X21rID0gMDsKLQl0c25maXJzdCA9IHRzbmxhc3QgPSAwOwotI2lmbmRlZiBJTlZBUklB
TlRTCi0gc3RhcnRfYWdhaW46Ci0jZW5kaWYKLQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmc3Rj
Yi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKLQkJaWYgKFNDVFBfVFNOX0dF
KHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEsIGNoay0+cmVjLmRhdGEudHNuKSkgewotCQkJLyog
U3RyYW5nZSBjYXNlIG91ciBsaXN0IGdvdCBvdXQgb2Ygb3JkZXI/ICovCi0JCQlTQ1RQX1BSSU5U
RigiT3VyIGxpc3QgaXMgb3V0IG9mIG9yZGVyPyBsYXN0X2Fja2VkOiV4IGNoazoleFxuIiwKLQkJ
CSAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSwgKHVu
c2lnbmVkIGludCljaGstPnJlYy5kYXRhLnRzbik7Ci0JCQlyZWNvdmVyeV9jbnQrKzsKLSNpZmRl
ZiBJTlZBUklBTlRTCi0JCQlwYW5pYygibGFzdCBhY2tlZCA+PSBjaGsgb24gc2VudC1RIik7Ci0j
ZWxzZQotCQkJU0NUUF9QUklOVEYoIlJlY292ZXIgYXR0ZW1wdHMgYSByZXN0YXJ0IGNudDolZFxu
IiwgcmVjb3ZlcnlfY250KTsKLQkJCXNjdHBfcmVjb3Zlcl9zZW50X2xpc3Qoc3RjYik7Ci0JCQlp
ZiAocmVjb3ZlcnlfY250IDwgMTApIHsKLQkJCQlnb3RvIHN0YXJ0X2FnYWluOwotCQkJfSBlbHNl
IHsKLQkJCQlTQ1RQX1BSSU5URigiUmVjb3ZlcnkgZmFpbHMgJWQgdGltZXM/P1xuIiwgcmVjb3Zl
cnlfY250KTsKLQkJCX0KLSNlbmRpZgotCQl9Ci0JCWlmICgoY2hrLT53aG9UbyA9PSBuZXQpICYm
IChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSkgewotCQkJLyoKLQkJCSAqIGZvdW5k
IG9uZSB0byBtYXJrOiBJZiBpdCBpcyBsZXNzIHRoYW4KLQkJCSAqIERBVEFHUkFNX0FDS0VEIGl0
IE1VU1Qgbm90IGJlIGEgc2tpcHBlZCBvciBtYXJrZWQKLQkJCSAqIFRTTiBidXQgaW5zdGVhZCBv
bmUgdGhhdCBpcyBlaXRoZXIgYWxyZWFkeSBzZXQKLQkJCSAqIGZvciByZXRyYW5zbWlzc2lvbiBP
UiBvbmUgdGhhdCBuZWVkcwotCQkJICogcmV0cmFuc21pc3Npb24uCi0JCQkgKi8KLQotCQkJLyog
dmFsaWRhdGUgaXRzIGJlZW4gb3V0c3RhbmRpbmcgbG9uZyBlbm91Z2ggKi8KLQkJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxF
KSB7Ci0JCQkJc2N0cF9sb2dfZnIoY2hrLT5yZWMuZGF0YS50c24sCi0JCQkJCSAgICBjaGstPnNl
bnRfcmN2X3RpbWUudHZfc2VjLAotCQkJCQkgICAgY2hrLT5zZW50X3Jjdl90aW1lLnR2X3VzZWMs
Ci0JCQkJCSAgICBTQ1RQX0ZSX1QzX01BUktfVElNRSk7Ci0JCQl9Ci0JCQlpZiAoKGNoay0+c2Vu
dF9yY3ZfdGltZS50dl9zZWMgPiBtaW5fd2FpdC50dl9zZWMpICYmICh3aW5kb3dfcHJvYmUgPT0g
MCkpIHsKLQkJCQkvKgotCQkJCSAqIHdlIGhhdmUgcmVhY2hlZCBhIGNodW5rIHRoYXQgd2FzIHNl
bnQKLQkJCQkgKiBzb21lIHNlY29uZHMgcGFzdCBvdXIgbWluLi4gZm9yZ2V0IGl0IHdlCi0JCQkJ
ICogd2lsbCBmaW5kIG5vIG1vcmUgdG8gc2VuZC4KLQkJCQkgKi8KLQkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewot
CQkJCQlzY3RwX2xvZ19mcigwLAotCQkJCQkJICAgIGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMs
Ci0JCQkJCQkgICAgY2hrLT5zZW50X3Jjdl90aW1lLnR2X3VzZWMsCi0JCQkJCQkgICAgU0NUUF9G
Ul9UM19TVE9QUEVEKTsKLQkJCQl9Ci0JCQkJY29udGludWU7Ci0JCQl9IGVsc2UgaWYgKChjaGst
PnNlbnRfcmN2X3RpbWUudHZfc2VjID09IG1pbl93YWl0LnR2X3NlYykgJiYKLQkJCQkgICAod2lu
ZG93X3Byb2JlID09IDApKSB7Ci0JCQkJLyoKLQkJCQkgKiB3ZSBtdXN0IGxvb2sgYXQgdGhlIG1p
Y3JvIHNlY29uZHMgdG8KLQkJCQkgKiBrbm93LgotCQkJCSAqLwotCQkJCWlmIChjaGstPnNlbnRf
cmN2X3RpbWUudHZfdXNlYyA+PSBtaW5fd2FpdC50dl91c2VjKSB7Ci0JCQkJCS8qCi0JCQkJCSAq
IG9rIGl0IHdhcyBzZW50IGFmdGVyIG91ciBib3VuZGFyeQotCQkJCQkgKiB0aW1lLgotCQkJCQkg
Ki8KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKHN0Y2ItPmFzb2MucHJzY3Rw
X3N1cHBvcnRlZCAmJiBQUl9TQ1RQX1RUTF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7Ci0JCQkJLyog
SXMgaXQgZXhwaXJlZD8gKi8KLSNpZm5kZWYgX19GcmVlQlNEX18KLQkJCQlpZiAodGltZXJjbXAo
Jm5vdywgJmNoay0+cmVjLmRhdGEudGltZXRvZHJvcCwgPikpIHsKLSNlbHNlCi0JCQkJaWYgKHRp
bWV2YWxjbXAoJm5vdywgJmNoay0+cmVjLmRhdGEudGltZXRvZHJvcCwgPikpIHsKLSNlbmRpZgot
CQkJCQkvKiBZZXMgc28gZHJvcCBpdCAqLwotCQkJCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQko
dm9pZClzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLAotCQkJCQkJCQkJCSBjaGssCi0J
CQkJCQkJCQkJIDEsCi0JCQkJCQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCQljbnRf
YWJhbmRvbmVkKys7Ci0JCQkJCX0KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJaWYg
KHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCAmJiBQUl9TQ1RQX1JUWF9FTkFCTEVEKGNoay0+
ZmxhZ3MpKSB7Ci0JCQkJLyogSGFzIGl0IGJlZW4gcmV0cmFuc21pdHRlZCB0dl9zZWMgdGltZXM/
ICovCi0JCQkJaWYgKGNoay0+c25kX2NvdW50ID4gY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2
X3NlYykgewotCQkJCQlpZiAoY2hrLT5kYXRhKSB7Ci0JCQkJCQkodm9pZClzY3RwX3JlbGVhc2Vf
cHJfc2N0cF9jaHVuayhzdGNiLAotCQkJCQkJCQkJCSBjaGssCi0JCQkJCQkJCQkJIDEsCi0JCQkJ
CQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0JCQkJCQljbnRfYWJhbmRvbmVkKys7Ci0JCQkJ
CX0KLQkJCQkJY29udGludWU7Ci0JCQkJfQotCQkJfQotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBf
REFUQUdSQU1fUkVTRU5EKSB7Ci0JCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7Ci0JCQkJbnVtX21rKys7Ci0JCQkJaWYgKGZpciA9PSAwKSB7Ci0J
CQkJCWZpciA9IDE7Ci0JCQkJCXRzbmZpcnN0ID0gY2hrLT5yZWMuZGF0YS50c247Ci0JCQkJfQot
CQkJCXRzbmxhc3QgPSBjaGstPnJlYy5kYXRhLnRzbjsKLQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQlz
Y3RwX2xvZ19mcihjaGstPnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQsCi0JCQkJCQkgICAg
MCwgU0NUUF9GUl9UM19NQVJLRUQpOwotCQkJCX0KLQotCQkJCWlmIChjaGstPnJlYy5kYXRhLmNo
dW5rX3dhc19yZXZva2VkKSB7Ci0JCQkJCS8qIGRlZmxhdGUgdGhlIGN3bmQgKi8KLQkJCQkJY2hr
LT53aG9Uby0+Y3duZCAtPSBjaGstPmJvb2tfc2l6ZTsKLQkJCQkJY2hrLT5yZWMuZGF0YS5jaHVu
a193YXNfcmV2b2tlZCA9IDA7Ci0JCQkJfQotCQkJCW5ldC0+bWFya2VkX3JldHJhbnMrKzsKLQkJ
CQlzdGNiLT5hc29jLm1hcmtlZF9yZXRyYW5zKys7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkRfVE8sCi0JCQkJCQkgICAg
ICAgY2hrLT53aG9Uby0+ZmxpZ2h0X3NpemUsCi0JCQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUs
Ci0JCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpY2hrLT53aG9UbywKLQkJCQkJCSAg
ICAgICBjaGstPnJlYy5kYXRhLnRzbik7Ci0JCQkJfQotCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVj
cmVhc2UoY2hrKTsKLQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCBjaGspOwot
CQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSBjaGstPnNlbmRfc2l6ZTsKLQkJCQlzdGNiLT5h
c29jLnBlZXJzX3J3bmQgKz0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpOwot
CQkJfQotCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQljaGstPmZsYWdz
IHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbWFy
a2VkcmV0cmFucyk7Ci0KLQkJCS8qIHJlc2V0IHRoZSBUU04gZm9yIHN0cmlraW5nIGFuZCBvdGhl
ciBGUiBzdHVmZiAqLwotCQkJY2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAw
OwotCQkJLyogQ2xlYXIgYW55IHRpbWUgc28gTk8gUlRUIGlzIGJlaW5nIGRvbmUgKi8KLQotCQkJ
aWYgKGNoay0+ZG9fcnR0KSB7Ci0JCQkJaWYgKGNoay0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkg
ewotCQkJCQljaGstPndob1RvLT5ydG9fbmVlZGVkID0gMTsKLQkJCQl9Ci0JCQl9Ci0JCQljaGst
PmRvX3J0dCA9IDA7Ci0JCQlpZiAoYWx0ICE9IG5ldCkgewotCQkJCXNjdHBfZnJlZV9yZW1vdGVf
YWRkcihjaGstPndob1RvKTsKLQkJCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAxOwotCQkJCWNoay0+
d2hvVG8gPSBhbHQ7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKLQkJ
CX0gZWxzZSB7Ci0JCQkJY2hrLT5ub19mcl9hbGxvd2VkID0gMDsKLQkJCQlpZiAoVEFJTFFfRU1Q
VFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpIHsKLQkJCQkJY2hrLT5yZWMuZGF0YS5mYXN0X3Jl
dHJhbl90c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxOwotCQkJCX0gZWxzZSB7Ci0JCQkJCWNo
ay0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNl
bmRfcXVldWUpKS0+cmVjLmRhdGEudHNuOwotCQkJCX0KLQkJCX0KLQkJCS8qIENNVDogRG8gbm90
IGFsbG93IEZScyBvbiByZXRyYW5zbWl0dGVkIFRTTnMuCi0JCQkgKi8KLQkJCWlmIChzdGNiLT5h
c29jLnNjdHBfY210X29uX29mZiA+IDApIHsKLQkJCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAxOwot
CQkJfQotI2lmZGVmIFRISVNfU0hPVUxEX05PVF9CRV9ET05FCi0JCX0gZWxzZSBpZiAoY2hrLT5z
ZW50ID09IFNDVFBfREFUQUdSQU1fQUNLRUQpIHsKLQkJCS8qIHJlbWVtYmVyIGhpZ2hlc3QgYWNr
ZWQgb25lICovCi0JCQljb3VsZF9iZV9zZW50ID0gY2hrOwotI2VuZGlmCi0JCX0KLQkJaWYgKGNo
ay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJY250X21rKys7Ci0JCX0KLQl9
Ci0JaWYgKChvcmlnX2ZsaWdodCAtIG5ldC0+ZmxpZ2h0X3NpemUpICE9IChvcmlnX3RmIC0gc3Rj
Yi0+YXNvYy50b3RhbF9mbGlnaHQpKSB7Ci0JCS8qIHdlIGRpZCBub3Qgc3VidHJhY3QgdGhlIHNh
bWUgdGhpbmdzPyAqLwotCQlhdWRpdF90ZiA9IDE7Ci0JfQotCi0JaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0
cF9sb2dfZnIodHNuZmlyc3QsIHRzbmxhc3QsIG51bV9taywgU0NUUF9GUl9UM19USU1FT1VUKTsK
LQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwotCWlmIChudW1fbWspIHsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1RJTUVSMSwgIkxBU1QgVFNOIG1hcmtlZCB3YXMgJXhcbiIsCi0JCQl0c25sYXN0KTsKLQkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSMSwgIk51bSBtYXJrZWQgZm9yIHJldHJhbnNtaXNzaW9u
IHdhcyAlZCBwZWVyLXJ3ZDoldVxuIiwKLQkJCW51bV9taywKLQkJCXN0Y2ItPmFzb2MucGVlcnNf
cnduZCk7Ci0JfQotI2VuZGlmCi0JKm51bV9tYXJrZWQgPSBudW1fbWs7Ci0JKm51bV9hYmFuZG9u
ZWQgPSBjbnRfYWJhbmRvbmVkOwotCS8qIE5vdyBjaGVjayBmb3IgYSBFQ04gRWNobyB0aGF0IG1h
eSBiZSBzdHJhbmRlZCBBbmQKLQkgKiBpbmNsdWRlIHRoZSBjbnRfbWsnZCB0byBoYXZlIGFsbCBy
ZXNlbmRzIGluIHRoZQotCSAqIGNvbnRyb2wgcXVldWUuCi0JICovCi0JVEFJTFFfRk9SRUFDSChj
aGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmIChj
aGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCWNudF9taysrOwotCQl9Ci0J
CWlmICgoY2hrLT53aG9UbyA9PSBuZXQpICYmCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQg
PT0gU0NUUF9FQ05fRUNITykpIHsKLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1Rv
KTsKLQkJCWNoay0+d2hvVG8gPSBhbHQ7Ci0JCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7Ci0JCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JCQkJ
Y2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKLQkJCQlzY3RwX3Vjb3VudF9p
bmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQljbnRfbWsrKzsKLQkJ
CX0KLQkJCWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQl9Ci0jaWZk
ZWYgVEhJU19TSE9VTERfTk9UX0JFX0RPTkUKLQlpZiAoKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9y
ZXRyYW5fY250ID09IDApICYmIChjb3VsZF9iZV9zZW50KSkgewotCQkvKiBmaXggaXQgc28gd2Ug
cmV0cmFuc21pdCB0aGUgaGlnaGVzdCBhY2tlZCBhbnl3YXkgKi8KLQkJc2N0cF91Y291bnRfaW5j
cihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7Ci0JCWNudF9taysrOwotCQljb3Vs
ZF9iZV9zZW50LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7Ci0JfQotI2VuZGlmCi0JaWYg
KHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ICE9IGNudF9taykgewotI2lmZGVmIElO
VkFSSUFOVFMKLQkJU0NUUF9QUklOVEYoIkxvY2FsIEF1ZGl0IHNheXMgdGhlcmUgYXJlICVkIGZv
ciByZXRyYW4gYXNvYyBjbnQ6JWQgd2UgbWFya2VkOiVkIHRoaXMgdGltZVxuIiwKLQkJCSAgICBj
bnRfbWssIHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250LCBudW1fbWspOwotI2VuZGlm
Ci0jaWZuZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzdGNiLT5hc29jLnNlbnRfcXVldWVf
cmV0cmFuX2NudCA9IGNudF9tazsKLSNlbmRpZgotCX0KLQlpZiAoYXVkaXRfdGYpIHsKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwKLQkJCSJBdWRpdCB0b3RhbCBmbGlnaHQgZHVlIHRvIG5l
Z2F0aXZlIHZhbHVlIG5ldDolcFxuIiwKLQkJCSh2b2lkICopbmV0KTsKLQkJc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPSAwOwotCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCA9IDA7Ci0J
CS8qIENsZWFyIGFsbCBuZXR3b3JrcyBmbGlnaHQgc2l6ZSAqLwotCQlUQUlMUV9GT1JFQUNIKGxu
ZXRzLCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCWxuZXRzLT5mbGlnaHRfc2l6
ZSA9IDA7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LAotCQkJCSJOZXQ6JXAgYy1mIGN3
bmQ6JWQgc3N0aHJlc2g6JWRcbiIsCi0JCQkJKHZvaWQgKilsbmV0cywgbG5ldHMtPmN3bmQsIGxu
ZXRzLT5zc3RocmVzaCk7Ci0JCX0KLQkJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNl
bnRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBf
RkxJR0hUX0xPR19VUCwKLQkJCQkJCSAgICAgICBjaGstPndob1RvLT5mbGlnaHRfc2l6ZSwKLQkJ
CQkJCSAgICAgICBjaGstPmJvb2tfc2l6ZSwKLQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRw
dHJfdCljaGstPndob1RvLAotCQkJCQkJICAgICAgIGNoay0+cmVjLmRhdGEudHNuKTsKLQkJCQl9
Ci0KLQkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNlKGNoayk7Ci0JCQkJc2N0cF90b3RhbF9m
bGlnaHRfaW5jcmVhc2Uoc3RjYiwgY2hrKTsKLQkJCX0KLQkJfQotCX0KLQkvKiBXZSByZXR1cm4g
MSBpZiB3ZSBvbmx5IGhhdmUgYSB3aW5kb3cgcHJvYmUgb3V0c3RhbmRpbmcgKi8KLQlyZXR1cm4g
KDApOwotfQotCi0KLWludAotc2N0cF90M3J4dF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5w
LAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Ci17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0OwotCWludCB3aW5fcHJvYmUsIG51bV9taywgbnVt
X2FiYW5kb25lZDsKLQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2ZyKDAsIDAsIDAsIFNDVFBf
RlJfVDNfVElNRU9VVCk7Ci0JfQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKLQkJc3RydWN0IHNjdHBfbmV0cyAq
bG5ldDsKLQotCQlUQUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgewotCQkJaWYgKG5ldCA9PSBsbmV0KSB7Ci0JCQkJc2N0cF9sb2dfY3duZChzdGNiLCBsbmV0
LCAxLCBTQ1RQX0NXTkRfTE9HX0ZST01fVDMpOwotCQkJfSBlbHNlIHsKLQkJCQlzY3RwX2xvZ19j
d25kKHN0Y2IsIGxuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9UMyk7Ci0JCQl9Ci0JCX0KLQl9
Ci0JLyogRmluZCBhbiBhbHRlcm5hdGUgYW5kIG1hcmsgdGhvc2UgZm9yIHJldHJhbnNtaXNzaW9u
ICovCi0JaWYgKChzdGNiLT5hc29jLnBlZXJzX3J3bmQgPT0gMCkgJiYKLQkgICAgKHN0Y2ItPmFz
b2MudG90YWxfZmxpZ2h0IDwgbmV0LT5tdHUpKSB7Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Rp
bW93aW5kb3dwcm9iZSk7Ci0JCXdpbl9wcm9iZSA9IDE7Ci0JfSBlbHNlIHsKLQkJd2luX3Byb2Jl
ID0gMDsKLQl9Ci0KLQlpZiAod2luX3Byb2JlID09IDApIHsKLQkJLyogV2UgZG9uJ3QgZG8gbm9y
bWFsIHRocmVzaG9sZCBtYW5hZ2VtZW50IG9uIHdpbmRvdyBwcm9iZXMgKi8KLQkJaWYgKHNjdHBf
dGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsCi0JCSAgICBzdGNiLT5hc29jLm1h
eF9zZW5kX3RpbWVzKSkgewotCQkJLyogQXNzb2NpYXRpb24gd2FzIGRlc3Ryb3llZCAqLwotCQkJ
cmV0dXJuICgxKTsKLQkJfSBlbHNlIHsKLQkJCWlmIChuZXQgIT0gc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uKSB7Ci0JCQkJLyogc2VuZCBhIGltbWVkaWF0ZSBIQiBpZiBvdXIgUlRPIGlz
IHN0YWxlICovCi0JCQkJc3RydWN0IHRpbWV2YWwgbm93OwotCQkJCXVuc2lnbmVkIGludCBtc19n
b25lYnk7Ci0KLQkJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQkJCQlpZiAo
bmV0LT5sYXN0X3NlbnRfdGltZS50dl9zZWMpIHsKLQkJCQkJbXNfZ29uZWJ5ID0gKG5vdy50dl9z
ZWMgLSBuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3NlYykgKiAxMDAwOwotCQkJCX0gZWxzZSB7Ci0J
CQkJCW1zX2dvbmVieSA9IDA7Ci0JCQkJfQotCQkJCWlmICgobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSA9PSAwKSB7Ci0JCQkJCWlmICgobXNfZ29uZWJ5ID4gbmV0LT5SVE8pIHx8IChu
ZXQtPlJUTyA9PSAwKSkgewotCQkJCQkJLyoKLQkJCQkJCSAqIG5vIHJlY2VudCBmZWVkIGJhY2sg
aW4gYW4gUlRPIG9yCi0JCQkJCQkgKiBtb3JlLCByZXF1ZXN0IGEgUlRUIHVwZGF0ZQotCQkJCQkJ
ICovCi0JCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwot
CQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogRm9yIGEgd2lu
ZG93IHByb2JlIHdlIGRvbid0IHBlbmFsaXplIHRoZSBuZXQncyBidXQgb25seQotCQkgKiB0aGUg
YXNzb2NpYXRpb24uIFRoaXMgbWF5IGZhaWwgaXQgaWYgU0FDS3MgYXJlIG5vdCBjb21pbmcKLQkJ
ICogYmFjay4gSWYgc2FjaydzIGFyZSBjb21pbmcgd2l0aCByd25kIGxvY2tlZCBhdCAwLCB3ZSB3
aWxsCi0JCSAqIGNvbnRpbnVlIHRvIGhvbGQgdGhpbmdzIHdhaXRpbmcgZm9yIHJ3bmQgdG8gcmFp
c2UKLQkJICovCi0JCWlmIChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgTlVM
TCwKLQkJICAgIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7Ci0JCQkvKiBBc3NvY2lhdGlv
biB3YXMgZGVzdHJveWVkICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JfQotCWlmIChzdGNiLT5h
c29jLnNjdHBfY210X29uX29mZiA+IDApIHsKLQkJaWYgKG5ldC0+cGZfdGhyZXNob2xkIDwgbmV0
LT5mYWlsdXJlX3RocmVzaG9sZCkgewotCQkJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQo
c3RjYiwgbmV0LCAyKTsKLQkJfSBlbHNlIHsKLQkJICAgICAgICAvKgotCQkJICogQ01UOiBVc2lu
ZyBSVFhfU1NUSFJFU0ggcG9saWN5IGZvciBDTVQuCi0JCQkgKiBJZiBDTVQgaXMgYmVpbmcgdXNl
ZCwgdGhlbiBwaWNrIGRlc3Qgd2l0aAotCQkJICogbGFyZ2VzdCBzc3RocmVzaCBmb3IgYW55IHJl
dHJhbnNtaXNzaW9uLgotCQkJICovCi0JCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChz
dGNiLCBuZXQsIDEpOwotCQkJLyoKLQkJCSAqIENVQ3YyOiBJZiBhIGRpZmZlcmVudCBkZXN0IGlz
IHBpY2tlZCBmb3IKLQkJCSAqIHRoZSByZXRyYW5zbWlzc2lvbiwgdGhlbiBuZXcKLQkJCSAqIChy
dHgtKXBzZXVkb19jdW1hY2sgbmVlZHMgdG8gYmUgdHJhY2tlZAotCQkJICogZm9yIG9yaWcgZGVz
dC4gTGV0IENVQ3YyIHRyYWNrIG5ldyAocnR4LSkKLQkJCSAqIHBzZXVkby1jdW1hY2sgYWx3YXlz
LgotCQkJICovCi0JCQluZXQtPmZpbmRfcHNldWRvX2N1bWFjayA9IDE7Ci0JCQluZXQtPmZpbmRf
cnR4X3BzZXVkb19jdW1hY2sgPSAxOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWx0ID0gc2N0cF9maW5k
X2FsdGVybmF0ZV9uZXQoc3RjYiwgbmV0LCAwKTsKLQl9Ci0KLQludW1fbWsgPSAwOwotCW51bV9h
YmFuZG9uZWQgPSAwOwotCSh2b2lkKXNjdHBfbWFya19hbGxfZm9yX3Jlc2VuZChzdGNiLCBuZXQs
IGFsdCwgd2luX3Byb2JlLAotCQkJCSAgICAgICZudW1fbWssICZudW1fYWJhbmRvbmVkKTsKLQkv
KiBGUiBMb3NzIHJlY292ZXJ5IGp1c3QgZW5kZWQgd2l0aCB0aGUgVDMuICovCi0Jc3RjYi0+YXNv
Yy5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMDsKLQotCS8qIENNVCBGUiBsb3NzIHJlY292
ZXJ5IGVuZGVkIHdpdGggdGhlIFQzICovCi0JbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5
ID0gMDsKLQlpZiAoKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJhbnNt
aXNzaW9uX2JlZ2lucykgJiYKLQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPT0gMCkpIHsKLQkJKCpz
dGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMp
KHN0Y2IsIG5ldCk7Ci0JfQotCi0JLyoKLQkgKiBzZXR1cCB0aGUgc2F0IGxvc3MgcmVjb3Zlcnkg
dGhhdCBwcmV2ZW50cyBzYXRlbGxpdGUgY3duZCBhZHZhbmNlLgotCSAqLwotCXN0Y2ItPmFzb2Mu
c2F0X3QzX2xvc3NfcmVjb3ZlcnkgPSAxOwotCXN0Y2ItPmFzb2Muc2F0X3QzX3JlY292ZXJ5X3Rz
biA9IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXE7Ci0KLQkvKiBCYWNrb2ZmIHRoZSB0aW1lciBhbmQg
Y3duZCAqLwotCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIG5ldCwgd2luX3Byb2JlLCBu
dW1fbWssIG51bV9hYmFuZG9uZWQpOwotCWlmICgoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FE
RFJfUkVBQ0hBQkxFKSkgfHwKLQkgICAgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikp
IHsKLQkJLyogTW92ZSBhbGwgcGVuZGluZyBvdmVyIHRvbyAqLwotCQlzY3RwX21vdmVfY2h1bmtz
X2Zyb21fbmV0KHN0Y2IsIG5ldCk7Ci0KLQkJLyogR2V0IHRoZSBhZGRyZXNzIHRoYXQgZmFpbGVk
LCB0bwotCQkgKiBmb3JjZSBhIG5ldyBzcmMgYWRkcmVzcyBzZWxlY3RvbiBhbmQKLQkJICogYSBy
b3V0ZSBhbGxvY2F0aW9uLgotCQkgKi8KLQkJaWYgKG5ldC0+cm8uX3NfYWRkcikgewotCQkJc2N0
cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOwotCQkJbmV0LT5yby5fc19hZGRyID0gTlVMTDsK
LQkJfQotCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKLQotCQkvKiBGb3JjZSBhIHJvdXRl
IGFsbG9jYXRpb24gdG9vICovCi0JCWlmIChuZXQtPnJvLnJvX3J0KSB7Ci0JCQlSVEZSRUUobmV0
LT5yby5yb19ydCk7Ci0JCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKLQkJfQotCi0JCS8qIFdhcyBp
dCBvdXIgcHJpbWFyeT8gKi8KLQkJaWYgKChzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24g
PT0gbmV0KSAmJiAoYWx0ICE9IG5ldCkpIHsKLQkJCS8qCi0JCQkgKiBZZXMsIG5vdGUgaXQgYXMg
c3VjaCBhbmQgZmluZCBhbiBhbHRlcm5hdGUgbm90ZToKLQkJCSAqIHRoaXMgbWVhbnMgSEIgY29k
ZSBtdXN0IHVzZSB0aGlzIHRvIHJlc2VudCB0aGUKLQkJCSAqIHByaW1hcnkgaWYgaXQgZ29lcyBh
Y3RpdmUgQU5EIGlmIHNvbWVvbmUgZG9lcyBhCi0JCQkgKiBjaGFuZ2UtcHJpbWFyeSB0aGVuIHRo
aXMgZmxhZyBtdXN0IGJlIGNsZWFyZWQKLQkJCSAqIGZyb20gYW55IG5ldCBzdHJ1Y3R1cmVzLgot
CQkJICovCi0JCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOwotCQkJfQotCQkJc3RjYi0+YXNvYy5hbHRl
cm5hdGUgPSBhbHQ7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5hbHRlcm5hdGUtPnJl
Zl9jb3VudCwgMSk7Ci0JCX0KLQl9Ci0JLyoKLQkgKiBTcGVjaWFsIGNhc2UgZm9yIGNvb2tpZS1l
Y2hvJ2VkIGNhc2UsIHdlIGRvbid0IGRvIG91dHB1dCBidXQgbXVzdAotCSAqIGF3YWl0IHRoZSBD
T09LSUUtQUNLIGJlZm9yZSByZXRyYW5zbWlzc2lvbgotCSAqLwotCWlmIChTQ1RQX0dFVF9TVEFU
RSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7Ci0JCS8qCi0JCSAq
IEhlcmUgd2UganVzdCByZXNldCB0aGUgdGltZXIgYW5kIHN0YXJ0IGFnYWluIHNpbmNlIHdlCi0J
CSAqIGhhdmUgbm90IGVzdGFibGlzaGVkIHRoZSBhc29jCi0JCSAqLwotCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCXJldHVybiAoMCk7
Ci0JfQotCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQpIHsKLQkJc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqbGNoazsKLQotCQlsY2hrID0gc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19w
b2ludChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0JCS8qIEMzLiBTZWUgaWYgd2UgbmVlZCB0byBzZW5k
IGEgRndkLVRTTiAqLwotCQlpZiAoU0NUUF9UU05fR1Qoc3RjYi0+YXNvYy5hZHZhbmNlZF9wZWVy
X2Fja19wb2ludCwgc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3NlcSkpIHsKLQkJCXNlbmRfZm9yd2Fy
ZF90c24oc3RjYiwgJnN0Y2ItPmFzb2MpOwotCQkJaWYgKGxjaGspIHsKLQkJCQkvKiBBc3N1cmUg
YSB0aW1lciBpcyB1cCAqLwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NF
TkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGxjaGstPndob1RvKTsKLQkJCX0KLQkJfQotCX0KLQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklU
T1JfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPmN3bmQsIFNDVFBf
Q1dORF9MT0dfRlJPTV9SVFgpOwotCX0KLQlyZXR1cm4gKDApOwotfQotCi1pbnQKLXNjdHBfdDFp
bml0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQkvKiBidW1wIHRoZSB0aHJlc2hv
bGRzICovCi0JaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uKSB7Ci0JCS8qCi0JCSAq
IHNwZWNpYWwgaG9vayBmb3IgZGVsYXllZCBjb25uZWN0aW9uLiBUaGUgbGlicmFyeSBkaWQgTk9U
Ci0JCSAqIGNvbXBsZXRlIHRoZSByZXN0IG9mIGl0cyBzZW5kcy4KLQkJICovCi0JCXN0Y2ItPmFz
b2MuZGVsYXllZF9jb25uZWN0aW9uID0gMDsKLQkJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3Rj
YiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JaWYgKFNDVFBfR0VU
X1NUQVRFKCgmc3RjYi0+YXNvYykpICE9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHsKLQkJcmV0
dXJuICgwKTsKLQl9Ci0JaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBu
ZXQsCi0JICAgIHN0Y2ItPmFzb2MubWF4X2luaXRfdGltZXMpKSB7Ci0JCS8qIEFzc29jaWF0aW9u
IHdhcyBkZXN0cm95ZWQgKi8KLQkJcmV0dXJuICgxKTsKLQl9Ci0Jc3RjYi0+YXNvYy5kcm9wcGVk
X3NwZWNpYWxfY250ID0gMDsKLQlzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb24sIDEsIDAsIDApOwotCWlmIChzdGNiLT5hc29jLmluaXRp
YWxfaW5pdF9ydG9fbWF4IDwgbmV0LT5SVE8pIHsKLQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLmlu
aXRpYWxfaW5pdF9ydG9fbWF4OwotCX0KLQlpZiAoc3RjYi0+YXNvYy5udW1uZXRzID4gMSkgewot
CQkvKiBJZiB3ZSBoYXZlIG1vcmUgdGhhbiBvbmUgYWRkciB1c2UgaXQgKi8KLQkJc3RydWN0IHNj
dHBfbmV0cyAqYWx0OwotCi0JCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgMCk7Ci0JCWlmIChhbHQgIT0gc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7Ci0JCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0
Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7Ci0JCQlzdGNiLT5hc29jLnByaW1h
cnlfZGVzdGluYXRpb24gPSBhbHQ7Ci0JCX0KLQl9Ci0JLyogU2VuZCBvdXQgYSBuZXcgaW5pdCAq
LwotCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0J
cmV0dXJuICgwKTsKLX0KLQotLyoKLSAqIEZvciBjb29raWUgYW5kIGFzY29uZiB3ZSBhY3R1YWxs
eSBuZWVkIHRvIGZpbmQgYW5kIG1hcmsgZm9yIHJlc2VuZCwgdGhlbgotICogaW5jcmVtZW50IHRo
ZSByZXNlbmQgY291bnRlciAoYWZ0ZXIgYWxsIHRoZSB0aHJlc2hvbGQgbWFuYWdlbWVudCBzdHVm
ZiBvZgotICogY291cnNlKS4KLSAqLwotaW50Ci1zY3RwX2Nvb2tpZV90aW1lcihzdHJ1Y3Qgc2N0
cF9pbnBjYiAqaW5wLAotICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0cyAqYWx0OwotCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNvb2tpZTsKLQotCS8qIGZpcnN0IGJlZm9yZSBhbGwgZWxz
ZSB3ZSBtdXN0IGZpbmQgdGhlIGNvb2tpZSAqLwotCVRBSUxRX0ZPUkVBQ0goY29va2llLCAmc3Rj
Yi0+YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY29va2llLT5y
ZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgewotCQkJYnJlYWs7Ci0JCX0KLQl9
Ci0JaWYgKGNvb2tpZSA9PSBOVUxMKSB7Ci0JCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNv
YykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSB7Ci0JCQkvKiBGT09CQVIhICovCi0JCQlz
dHJ1Y3QgbWJ1ZiAqb3BfZXJyOwotCi0JCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJDb29raWUgdGltZXIgZXhwaXJlZCwgYnV0IG5vIGNvb2tpZSIpOwotCQkJ
aW5wLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9USU1FUiArIFNDVFBfTE9DXzM7
Ci0JCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCQl9IGVsc2UgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCXBhbmljKCJD
b29raWUgdGltZXIgZXhwaXJlcyBpbiB3cm9uZyBzdGF0ZT8iKTsKLSNlbHNlCi0JCQlTQ1RQX1BS
SU5URigiU3RyYW5nZSBpbiBzdGF0ZSAlZCBub3QgY29va2llLWVjaG9lZCB5ZXQgYy1lIHRpbWVy
IGV4cGlyZXM/XG4iLCBTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykpOwotCQkJcmV0dXJuICgw
KTsKLSNlbmRpZgotCQl9Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8qIE9rIHdlIGZvdW5kIHRoZSBj
b29raWUsIHRocmVzaG9sZCBtYW5hZ2VtZW50IG5leHQgKi8KLQlpZiAoc2N0cF90aHJlc2hvbGRf
bWFuYWdlbWVudChpbnAsIHN0Y2IsIGNvb2tpZS0+d2hvVG8sCi0JICAgIHN0Y2ItPmFzb2MubWF4
X2luaXRfdGltZXMpKSB7Ci0JCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJcmV0dXJuICgxKTsKLQl9
Ci0JLyoKLQkgKiBDbGVhcmVkIHRocmVzaG9sZCBtYW5hZ2VtZW50LCBub3cgbGV0cyBiYWNrb2Zm
IHRoZSBhZGRyZXNzCi0JICogYW5kIHNlbGVjdCBhbiBhbHRlcm5hdGUKLQkgKi8KLQlzdGNiLT5h
c29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPSAwOwotCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0
Y2IsIGNvb2tpZS0+d2hvVG8sIDEsIDAsIDApOwotCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVf
bmV0KHN0Y2IsIGNvb2tpZS0+d2hvVG8sIDApOwotCWlmIChhbHQgIT0gY29va2llLT53aG9Ubykg
ewotCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY29va2llLT53aG9Ubyk7Ci0JCWNvb2tpZS0+d2hv
VG8gPSBhbHQ7Ci0JCWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0JfQotCS8q
IE5vdyBtYXJrIHRoZSByZXRyYW4gaW5mbyAqLwotCWlmIChjb29raWUtPnNlbnQgIT0gU0NUUF9E
QVRBR1JBTV9SRVNFTkQpIHsKLQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVl
dWVfcmV0cmFuX2NudCk7Ci0JfQotCWNvb2tpZS0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5E
OwotCWNvb2tpZS0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JLyoKLQkgKiBO
b3cgY2FsbCB0aGUgb3V0cHV0IHJvdXRpbmUgdG8ga2ljayBvdXQgdGhlIGNvb2tpZSBhZ2Fpbiwg
Tm90ZSB3ZQotCSAqIGRvbid0IG1hcmsgYW55IGNodW5rcyBmb3IgcmV0cmFuIHNvIHRoYXQgRlIg
d2lsbCBuZWVkIHRvIGtpY2sgaW4KLQkgKiB0byBtb3ZlIHRoZXNlIChvciBhIHNlbmQgdGltZXIp
LgotCSAqLwotCXJldHVybiAoMCk7Ci19Ci0KLWludAotc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNj
dHBfbmV0cyAqbmV0KQotewotCXN0cnVjdCBzY3RwX25ldHMgKmFsdDsKLQlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICpzdHJyc3QgPSBOVUxMLCAqY2hrID0gTlVMTDsKLQotCWlmIChzdGNiLT5hc29j
LnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZyA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCS8q
IGZpbmQgdGhlIGV4aXN0aW5nIFNUUlJFU0VULCB3ZSB1c2UgdGhlIHNlcSBudW1iZXIgd2Ugc2Vu
dCBvdXQgb24gKi8KLQkodm9pZClzY3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0Y2IsIHN0Y2ItPmFz
b2Muc3RyX3Jlc2V0X3NlcV9vdXQsICZzdHJyc3QpOwotCWlmIChzdHJyc3QgPT0gTlVMTCkgewot
CQlyZXR1cm4gKDApOwotCX0KLQkvKiBkbyB0aHJlc2hvbGQgbWFuYWdlbWVudCAqLwotCWlmIChz
Y3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgc3RycnN0LT53aG9UbywKLQkgICAg
c3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykpIHsKLQkJLyogQXNzb2MgaXMgb3ZlciAqLwotCQly
ZXR1cm4gKDEpOwotCX0KLQkvKgotCSAqIENsZWFyZWQgdGhyZXNob2xkIG1hbmFnZW1lbnQsIG5v
dyBsZXRzIGJhY2tvZmYgdGhlIGFkZHJlc3MKLQkgKiBhbmQgc2VsZWN0IGFuIGFsdGVybmF0ZQot
CSAqLwotCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIHN0cnJzdC0+d2hvVG8sIDEsIDAs
IDApOwotCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIHN0cnJzdC0+d2hvVG8s
IDApOwotCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdHJyc3QtPndob1RvKTsKLQlzdHJyc3QtPndo
b1RvID0gYWx0OwotCWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7Ci0KLQkvKiBT
ZWUgaWYgYSBFQ04gRWNobyBpcyBhbHNvIHN0cmFuZGVkICovCi0JVEFJTFFfRk9SRUFDSChjaGss
ICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmICgoY2hr
LT53aG9UbyA9PSBuZXQpICYmCi0JCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9F
Q05fRUNITykpIHsKLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKLQkJCWlm
IChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQljaGstPnNlbnQgPSBT
Q1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdN
RU5UX09LOwotCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJh
bl9jbnQpOwotCQkJfQotCQkJY2hrLT53aG9UbyA9IGFsdDsKLQkJCWF0b21pY19hZGRfaW50KCZh
bHQtPnJlZl9jb3VudCwgMSk7Ci0JCX0KLQl9Ci0JaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkpIHsKLQkJLyoKLQkJICogSWYgdGhlIGFkZHJlc3Mgd2VudCB1bi1y
ZWFjaGFibGUsIHdlIG5lZWQgdG8gbW92ZSB0bwotCQkgKiBhbHRlcm5hdGVzIGZvciBBTEwgY2hr
J3MgaW4gcXVldWUKLQkJICovCi0JCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0
KTsKLQl9Ci0JLyogbWFyayB0aGUgcmV0cmFuIGluZm8gKi8KLQlpZiAoc3RycnN0LT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fUkVTRU5EKQotCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2Vu
dF9xdWV1ZV9yZXRyYW5fY250KTsKLQlzdHJyc3QtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VO
RDsKLQlzdHJyc3QtPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCi0JLyogcmVz
dGFydCB0aGUgdGltZXIgKi8KLQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TVFJS
RVNFVCwgaW5wLCBzdGNiLCBzdHJyc3QtPndob1RvKTsKLQlyZXR1cm4gKDApOwotfQotCi1pbnQK
LXNjdHBfYXNjb25mX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKLQkJICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0Jc3RydWN0IHNjdHBfbmV0
cyAqYWx0OwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmFzY29uZiwgKmNoazsKLQotCS8qIGlz
IHRoaXMgYSBmaXJzdCBzZW5kLCBvciBhIHJldHJhbnNtaXNzaW9uPyAqLwotCWlmIChUQUlMUV9F
TVBUWSgmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1ZSkpIHsKLQkJLyogY29tcG9zZSBhIG5l
dyBBU0NPTkYgY2h1bmsgYW5kIHNlbmQgaXQgKi8KLQkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBu
ZXQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQl9IGVsc2UgewotCQkvKgotCQkgKiBSZXRyYW5z
bWlzc2lvbiBvZiB0aGUgZXhpc3RpbmcgQVNDT05GIGlzIG5lZWRlZAotCQkgKi8KLQotCQkvKiBm
aW5kIHRoZSBleGlzdGluZyBBU0NPTkYgKi8KLQkJYXNjb25mID0gVEFJTFFfRklSU1QoJnN0Y2It
PmFzb2MuYXNjb25mX3NlbmRfcXVldWUpOwotCQlpZiAoYXNjb25mID09IE5VTEwpIHsKLQkJCXJl
dHVybiAoMCk7Ci0JCX0KLQkJLyogZG8gdGhyZXNob2xkIG1hbmFnZW1lbnQgKi8KLQkJaWYgKHNj
dHBfdGhyZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBhc2NvbmYtPndob1RvLAotCQkgICAg
c3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykpIHsKLQkJCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJ
CXJldHVybiAoMSk7Ci0JCX0KLQkJaWYgKGFzY29uZi0+c25kX2NvdW50ID4gc3RjYi0+YXNvYy5t
YXhfc2VuZF90aW1lcykgewotCQkJLyoKLQkJCSAqIFNvbWV0aGluZyBpcyByb3R0ZW46IG91ciBw
ZWVyIGlzIG5vdCByZXNwb25kaW5nIHRvCi0JCQkgKiBBU0NPTkZzIGJ1dCBhcHBhcmVudGx5IGlz
IHRvIG90aGVyIGNodW5rcy4gIGkuZS4gaXQKLQkJCSAqIGlzIG5vdCBwcm9wZXJseSBoYW5kbGlu
ZyB0aGUgY2h1bmsgdHlwZSB1cHBlciBiaXRzLgotCQkJICogTWFyayB0aGlzIHBlZXIgYXMgQVND
T05GIGluY2FwYWJsZSBhbmQgY2xlYW51cC4KLQkJCSAqLwotCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1RJTUVSMSwgImFzY29uZl90aW1lcjogUGVlciBoYXMgbm90IHJlc3BvbmRlZCB0byBvdXIgcmVw
ZWF0ZWQgQVNDT05Gc1xuIik7Ci0JCQlzY3RwX2FzY29uZl9jbGVhbnVwKHN0Y2IsIG5ldCk7Ci0J
CQlyZXR1cm4gKDApOwotCQl9Ci0JCS8qCi0JCSAqIGNsZWFyZWQgdGhyZXNob2xkIG1hbmFnZW1l
bnQsIHNvIG5vdyBiYWNrb2ZmIHRoZSBuZXQgYW5kCi0JCSAqIHNlbGVjdCBhbiBhbHRlcm5hdGUK
LQkJICovCi0JCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIGFzY29uZi0+d2hvVG8sIDEs
IDAsIDApOwotCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhc2NvbmYtPndo
b1RvLCAwKTsKLQkJaWYgKGFzY29uZi0+d2hvVG8gIT0gYWx0KSB7Ci0JCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoYXNjb25mLT53aG9Ubyk7Ci0JCQlhc2NvbmYtPndob1RvID0gYWx0OwotCQkJYXRv
bWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKLQkJfQotCi0JCS8qIFNlZSBpZiBhbiBF
Q04gRWNobyBpcyBhbHNvIHN0cmFuZGVkICovCi0JCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+
YXNvYy5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJaWYgKChjaGstPndob1Rv
ID09IG5ldCkgJiYKLQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNI
TykpIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7Ci0JCQkJY2hrLT53
aG9UbyA9IGFsdDsKLQkJCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
Ci0JCQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOwotCQkJCQljaGstPmZsYWdz
IHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQl9Ci0JCQkJYXRvbWljX2FkZF9pbnQo
JmFsdC0+cmVmX2NvdW50LCAxKTsKLQkJCX0KLQkJfQotCQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0
Y2ItPmFzb2MuYXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgewotCQkJaWYgKGNoay0+d2hv
VG8gIT0gYWx0KSB7Ci0JCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOwotCQkJ
CWNoay0+d2hvVG8gPSBhbHQ7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAx
KTsKLQkJCX0KLQkJCWlmIChhc2NvbmYtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQgJiYg
Y2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5UKQotCQkJCXNjdHBfdWNvdW50X2luY3Io
c3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQkJY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9SRVNFTkQ7Ci0JCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09L
OwotCQl9Ci0JCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7
Ci0JCQkvKgotCQkJICogSWYgdGhlIGFkZHJlc3Mgd2VudCB1bi1yZWFjaGFibGUsIHdlIG5lZWQg
dG8gbW92ZQotCQkJICogdG8gdGhlIGFsdGVybmF0ZSBmb3IgQUxMIGNodW5rcyBpbiBxdWV1ZQot
CQkJICovCi0JCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7Ci0JCX0KLQkJ
LyogbWFyayB0aGUgcmV0cmFuIGluZm8gKi8KLQkJaWYgKGFzY29uZi0+c2VudCAhPSBTQ1RQX0RB
VEFHUkFNX1JFU0VORCkKLQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQpOwotCQlhc2NvbmYtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJ
YXNjb25mLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKLQotCQkvKiBzZW5kIGFu
b3RoZXIgQVNDT05GIGlmIGFueSBhbmQgd2UgY2FuIGRvICovCi0JCXNjdHBfc2VuZF9hc2NvbmYo
c3RjYiwgYWx0LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0K
LS8qIE1vYmlsaXR5IGFkYXB0YXRpb24gKi8KLXZvaWQKLXNjdHBfZGVsZXRlX3ByaW1fdGltZXIo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQpCi17Ci0JaWYg
KHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5ID09IE5VTEwpIHsKLQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0FTQ09ORjEsICJkZWxldGVfcHJpbV90aW1lcjogZGVsZXRlZF9wcmltYXJ5IGlzIG5vdCBz
dG9yZWQuLi5cbiIpOwotCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJ
TElUWV9QUklNX0RFTEVURUQpOwotCQlyZXR1cm47Ci0JfQotCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLCAiZGVsZXRlX3ByaW1fdGltZXI6IGZpbmlzaGVkIHRvIGtlZXAgZGVsZXRlZCBwcmlt
YXJ5ICIpOwotCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsICZzdGNiLT5hc29jLmRl
bGV0ZWRfcHJpbWFyeS0+cm8uX2xfYWRkci5zYSk7Ci0Jc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0
Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKLQlzdGNiLT5hc29jLmRlbGV0ZWRfcHJpbWFyeSA9
IE5VTEw7Ci0Jc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJ
TV9ERUxFVEVEKTsKLQlyZXR1cm47Ci19Ci0KLS8qCi0gKiBGb3IgdGhlIHNodXRkb3duIGFuZCBz
aHV0ZG93bi1hY2ssIHdlIGRvIG5vdCBrZWVwIG9uZSBhcm91bmQgb24gdGhlCi0gKiBjb250cm9s
IHF1ZXVlLiBUaGlzIG1lYW5zIHdlIG11c3QgZ2VuZXJhdGUgYSBuZXcgb25lIGFuZCBjYWxsIHRo
ZSBnZW5lcmFsCi0gKiBjaHVuayBvdXRwdXQgcm91dGluZSwgQUZURVIgaGF2aW5nIGRvbmUgdGhy
ZXNob2xkIG1hbmFnZW1lbnQuCi0gKiBJdCBpcyBhc3N1bWVkIHRoYXQgbmV0IGlzIG5vbi1OVUxM
LgotICovCi1pbnQKLXNjdHBfc2h1dGRvd25fdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlz
dHJ1Y3Qgc2N0cF9uZXRzICphbHQ7Ci0KLQkvKiBmaXJzdCB0aHJlc2hvbGQgbWFuYWdlbWVudCAq
LwotCWlmIChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgbmV0LCBzdGNiLT5h
c29jLm1heF9zZW5kX3RpbWVzKSkgewotCQkvKiBBc3NvYyBpcyBvdmVyICovCi0JCXJldHVybiAo
MSk7Ci0JfQotCXNjdHBfYmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIG5ldCwgMSwgMCwgMCk7Ci0J
Lyogc2Vjb25kIHNlbGVjdCBhbiBhbHRlcm5hdGl2ZSAqLwotCWFsdCA9IHNjdHBfZmluZF9hbHRl
cm5hdGVfbmV0KHN0Y2IsIG5ldCwgMCk7Ci0KLQkvKiB0aGlyZCBnZW5lcmF0ZSBhIHNodXRkb3du
IGludG8gdGhlIHF1ZXVlIGZvciBvdXQgbmV0ICovCi0Jc2N0cF9zZW5kX3NodXRkb3duKHN0Y2Is
IGFsdCk7Ci0KLQkvKiBmb3VydGggcmVzdGFydCB0aW1lciAqLwotCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLCBpbnAsIHN0Y2IsIGFsdCk7Ci0JcmV0dXJuICgwKTsK
LX0KLQotaW50Ci1zY3RwX3NodXRkb3duYWNrX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCi17Ci0J
c3RydWN0IHNjdHBfbmV0cyAqYWx0OwotCi0JLyogZmlyc3QgdGhyZXNob2xkIG1hbmFnZW1lbnQg
Ki8KLQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwgc3RjYi0+
YXNvYy5tYXhfc2VuZF90aW1lcykpIHsKLQkJLyogQXNzb2MgaXMgb3ZlciAqLwotCQlyZXR1cm4g
KDEpOwotCX0KLQlzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEsIDAsIDApOwot
CS8qIHNlY29uZCBzZWxlY3QgYW4gYWx0ZXJuYXRpdmUgKi8KLQlhbHQgPSBzY3RwX2ZpbmRfYWx0
ZXJuYXRlX25ldChzdGNiLCBuZXQsIDApOwotCi0JLyogdGhpcmQgZ2VuZXJhdGUgYSBzaHV0ZG93
biBpbnRvIHRoZSBxdWV1ZSBmb3Igb3V0IG5ldCAqLwotCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2so
c3RjYiwgYWx0KTsKLQotCS8qIGZvdXJ0aCByZXN0YXJ0IHRpbWVyICovCi0Jc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0ssIGlucCwgc3RjYiwgYWx0KTsKLQlyZXR1
cm4gKDApOwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9hdWRpdF9zdHJlYW1fcXVldWVzX2Zvcl9z
aXplKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiKQot
ewotCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKLQl1bnNpZ25lZCBpbnQg
aSwgY2hrc19pbl9xdWV1ZSA9IDA7Ci0JaW50IGJlaW5nX2ZpbGxlZCA9IDA7Ci0JLyoKLQkgKiBU
aGlzIGZ1bmN0aW9uIGlzIE9OTFkgY2FsbGVkIHdoZW4gdGhlIHNlbmQvc2VudCBxdWV1ZXMgYXJl
IGVtcHR5LgotCSAqLwotCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKQotCQly
ZXR1cm47Ci0KLQlpZiAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsKLQkJU0NU
UF9QUklOVEYoIkhtbSwgc2VudF9xdWV1ZV9yZXRyYW5fY250IGlzIG5vbi16ZXJvICVkXG4iLAot
CQkJICAgIHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJc3RjYi0+YXNvYy5z
ZW50X3F1ZXVlX3JldHJhbl9jbnQgPSAwOwotCX0KLQlpZiAoc3RjYi0+YXNvYy5zc19mdW5jdGlv
bnMuc2N0cF9zc19pc19lbXB0eShzdGNiLCAmc3RjYi0+YXNvYykpIHsKLQkJLyogTm8gc3RyZWFt
IHNjaGVkdWxlciBpbmZvcm1hdGlvbiwgaW5pdGlhbGl6ZSBzY2hlZHVsZXIgKi8KLQkJc3RjYi0+
YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0KHN0Y2IsICZzdGNiLT5hc29jLCAwKTsKLQkJ
aWYgKCFzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2IsICZzdGNi
LT5hc29jKSkgewotCQkJLyogeWVwLCB3ZSBsb3N0IGEgc3RyZWFtIG9yIHR3byAqLwotCQkJU0NU
UF9QUklOVEYoIkZvdW5kIGFkZGl0aW9uYWwgc3RyZWFtcyBOT1QgbWFuYWdlZCBieSBzY2hlZHVs
ZXIsIGNvcnJlY3RlZFxuIik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBubyBzdHJlYW1zIGxvc3QgKi8K
LQkJCXN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOwotCQl9Ci0JfQotCS8q
IENoZWNrIHRvIHNlZSBpZiBzb21lIGRhdGEgcXVldWVkLCBpZiBzbyByZXBvcnQgaXQgKi8KLQlm
b3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgewotCQlpZiAoIVRB
SUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7Ci0JCQlUQUlMUV9G
T1JFQUNIKHNwLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlLCBuZXh0KSB7Ci0JCQkJ
aWYgKHNwLT5tc2dfaXNfY29tcGxldGUpCi0JCQkJCWJlaW5nX2ZpbGxlZCsrOwotCQkJCWNoa3Nf
aW5fcXVldWUrKzsKLQkJCX0KLQkJfQotCX0KLQlpZiAoY2hrc19pbl9xdWV1ZSAhPSBzdGNiLT5h
c29jLnN0cmVhbV9xdWV1ZV9jbnQpIHsKLQkJU0NUUF9QUklOVEYoIkhtbSwgc3RyZWFtIHF1ZXVl
IGNudCBhdCAlZCBJIGNvdW50ZWQgJWQgaW4gc3RyZWFtIG91dCB3aGVlbFxuIiwKLQkJCSAgICBz
dGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQsIGNoa3NfaW5fcXVldWUpOwotCX0KLQlpZiAoY2hr
c19pbl9xdWV1ZSkgewotCQkvKiBjYWxsIHRoZSBvdXRwdXQgcXVldWUgZnVuY3Rpb24gKi8KLQkJ
c2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOwotCQlpZiAoKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUp
KSAmJgotCQkgICAgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSkgewotCQkJ
LyoKLQkJCSAqIFByb2JhYmx5IHNob3VsZCBnbyBpbiBhbmQgbWFrZSBpdCBnbyBiYWNrIHRocm91
Z2gKLQkJCSAqIGFuZCBhZGQgZnJhZ21lbnRzIGFsbG93ZWQKLQkJCSAqLwotCQkJaWYgKGJlaW5n
X2ZpbGxlZCA9PSAwKSB7Ci0JCQkJU0NUUF9QUklOVEYoIlN0aWxsIG5vdGhpbmcgbW92ZWQgJWQg
Y2h1bmtzIGFyZSBzdHVja1xuIiwKLQkJCQkJICAgIGNoa3NfaW5fcXVldWUpOwotCQkJfQotCQl9
Ci0JfSBlbHNlIHsKLQkJU0NUUF9QUklOVEYoIkZvdW5kIG5vIGNodW5rcyBvbiBhbnkgcXVldWUg
dG90OiVsdVxuIiwKLQkJCSAgICAodV9sb25nKXN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVl
X3NpemUpOwotCQlzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKLQl9Ci19
Ci0KLWludAotc2N0cF9oZWFydGJlYXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQl1aW50
OF90IG5ldF93YXNfcGY7Ci0KLQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7
Ci0JCW5ldF93YXNfcGYgPSAxOwotCX0gZWxzZSB7Ci0JCW5ldF93YXNfcGYgPSAwOwotCX0KLQlp
ZiAobmV0LT5oYl9yZXNwb25kZWQgPT0gMCkgewotCQlpZiAobmV0LT5yby5fc19hZGRyKSB7Ci0J
CQkvKiBJbnZhbGlkYXRlIHRoZSBzcmMgYWRkcmVzcyBpZiB3ZSBkaWQgbm90IGdldAotCQkJICog
YSByZXNwb25zZSBsYXN0IHRpbWUuCi0JCQkgKi8KLQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5f
c19hZGRyKTsKLQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQluZXQtPnNyY19hZGRyX3Nl
bGVjdGVkID0gMDsKLQkJfQotCQlzY3RwX2JhY2tvZmZfb25fdGltZW91dChzdGNiLCBuZXQsIDEs
IDAsIDApOwotCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwg
c3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykpIHsKLQkJCS8qIEFzc29jIGlzIG92ZXIgKi8KLQkJ
CXJldHVybiAoMSk7Ci0JCX0KLQl9Ci0JLyogWmVybyBQQkEsIGlmIGl0IG5lZWRzIGl0ICovCi0J
aWYgKG5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCkgewotCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNr
ZWQgPSAwOwotCX0KLQlpZiAoKHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPiAw
KSAmJgotCSAgICAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpICYmCi0JICAg
IChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVlKSkpIHsKLQkJc2N0cF9hdWRpdF9z
dHJlYW1fcXVldWVzX2Zvcl9zaXplKGlucCwgc3RjYik7Ci0JfQotCWlmICghKG5ldC0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9OT0hCKSAmJgotCSAgICAhKChuZXRfd2FzX3BmID09IDApICYmIChu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpKSkgewotCQkvKiB3aGVuIG1vdmUgdG8gUEYg
ZHVyaW5nIHRocmVzaG9sZCBtYW5nZW1lbnQsIGEgSEIgaGFzIGJlZW4KLQkJICAgcXVldWVkIGlu
IHRoYXQgcm91dGluZSAqLwotCQl1aW50MzJfdCBtc19nb25lX2J5OwotCi0JCWlmICgobmV0LT5s
YXN0X3NlbnRfdGltZS50dl9zZWMgPiAwKSB8fAotCQkgICAgKG5ldC0+bGFzdF9zZW50X3RpbWUu
dHZfdXNlYyA+IDApKSB7Ci0jaWZkZWYgX19GcmVlQlNEX18KLQkJCXN0cnVjdCB0aW1ldmFsIGRp
ZmY7Ci0KLQkJCVNDVFBfR0VUVElNRV9USU1FVkFMKCZkaWZmKTsKLQkJCXRpbWV2YWxzdWIoJmRp
ZmYsICZuZXQtPmxhc3Rfc2VudF90aW1lKTsKLSNlbHNlCi0JCQlzdHJ1Y3QgdGltZXZhbCBkaWZm
LCBub3c7Ci0KLQkJCVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwotCQkJdGltZXJzdWIoJm5v
dywgJm5ldC0+bGFzdF9zZW50X3RpbWUsICZkaWZmKTsKLSNlbmRpZgotCQkJbXNfZ29uZV9ieSA9
ICh1aW50MzJfdCkoZGlmZi50dl9zZWMgKiAxMDAwKSArCi0JCQkgICAgICAgICAgICAgKHVpbnQz
Ml90KShkaWZmLnR2X3VzZWMgLyAxMDAwKTsKLQkJfSBlbHNlIHsKLQkJCW1zX2dvbmVfYnkgPSAw
eGZmZmZmZmZmOwotCQl9Ci0JCWlmICgobXNfZ29uZV9ieSA+PSBuZXQtPmhlYXJ0X2JlYXRfZGVs
YXkpIHx8Ci0JCSAgICAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgewotCQkJc2N0
cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCX0KLQlyZXR1
cm4gKDApOwotfQotCi12b2lkCi1zY3RwX3BhdGhtdHVfdGltZXIoc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAq
bmV0KQotewotCXVpbnQzMl90IG5leHRfbXR1LCBtdHU7Ci0KLQluZXh0X210dSA9IHNjdHBfZ2V0
X25leHRfbXR1KG5ldC0+bXR1KTsKLQotCWlmICgobmV4dF9tdHUgPiBuZXQtPm10dSkgJiYgKG5l
dC0+cG9ydCA9PSAwKSkgewotCQlpZiAoKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgfHwK
LQkJICAgIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgfHwKLQkJICAgIChuZXQtPnJvLl9zX2Fk
ZHItPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSkgewotCQkJaWYgKChuZXQt
PnJvLl9zX2FkZHIgIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3Mg
JiBTQ1RQX0JFSU5HX0RFTEVURUQpKSB7Ci0JCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2Fk
ZHIpOwotCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7Ci0JCQkJbmV0LT5zcmNfYWRkcl9zZWxl
Y3RlZCA9IDA7Ci0JCQl9IGVsc2UgIGlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgewotI2lm
IGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKLQkJCQlp
ZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5f
bF9hZGRyOwotCQkJCQkvKiBLQU1FIGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVf
U05PV0xFT1BBUkQpCi0JCQkJCSh2b2lkKWluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIs
IHNpbjYsIE5VTEwsIE5VTEwpOwotI2Vsc2UKLQkJCQkJKHZvaWQpaW42X2VtYmVkc2NvcGUoJnNp
bjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0jZW5kaWYKLSNlbGlmIGRl
ZmluZWQoU0NUUF9LQU1FKQotCQkJCQkodm9pZClzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVf
R0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOwotI2Vsc2UKLQkJCQkJKHZvaWQpaW42X2VtYmVkc2Nv
cGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNik7Ci0jZW5kaWYKLQkJCQl9Ci0jZW5kaWYKLQotCQkJ
CW5ldC0+cm8uX3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJ
CQkJCQkJCQlzdGNiLAotCQkJCQkJCQkJCShzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKLQkJCQkJ
CQkJCQluZXQsIDAsIHN0Y2ItPmFzb2MudnJmX2lkKTsKLSNpZiBkZWZpbmVkKElORVQ2KSAmJiBk
ZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi0JCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLSNpZmRlZiBTQ1RQ
X0tBTUUKLQkJCQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKLSNlbHNlCi0JCQkJCSh2
b2lkKWluNl9yZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7Ci0jZW5k
aWYJLyogU0NUUF9LQU1FICovCi0JCQkJfQotI2VuZGlmCS8qIElORVQ2ICovCi0JCQl9Ci0JCQlp
ZiAobmV0LT5yby5fc19hZGRyKQotCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAxOwotCQl9
Ci0JCWlmIChuZXQtPnJvLl9zX2FkZHIpIHsKLQkJCW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9N
X1JPVVRFKG5ldC0+cm8uX3NfYWRkciwgJm5ldC0+cm8uX3NfYWRkci5zYSwgbmV0LT5yby5yb19y
dCk7Ci0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCQkJaWYgKG5ldC0+cG9y
dCkgewotCQkJCW10dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCQl9Ci0jZW5kaWYKLQkJ
CWlmIChtdHUgPiBuZXh0X210dSkgewotCQkJCW5ldC0+bXR1ID0gbmV4dF9tdHU7Ci0JCQl9IGVs
c2UgewotCQkJCW5ldC0+bXR1ID0gbXR1OwotCQkJfQotCQl9Ci0JfQotCS8qIHJlc3RhcnQgdGhl
IHRpbWVyICovCi0Jc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNF
LCBpbnAsIHN0Y2IsIG5ldCk7Ci19Ci0KLXZvaWQKLXNjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCkKLXsKLQlzdHJ1Y3QgdGltZXZhbCB0biwgKnRpbV90b3VzZTsKLQlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQlpbnQgdGlja3NfZ29uZV9ieTsKLQotCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ0bik7Ci0JaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRv
Y2xvc2VfdGlja3MgJiYKLQkgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfQVVUT0NMT1NFKSkgewotCQkvKiBBdXRvIGNsb3NlIGlzIG9uICovCi0JCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKLQkJLyogcGljayB0aGUgdGltZSB0byB1c2UgKi8KLQkJaWYgKGFzb2MtPnRpbWVf
bGFzdF9yY3ZkLnR2X3NlYyA+Ci0JCSAgICBhc29jLT50aW1lX2xhc3Rfc2VudC50dl9zZWMpIHsK
LQkJCXRpbV90b3VzZSA9ICZhc29jLT50aW1lX2xhc3RfcmN2ZDsKLQkJfSBlbHNlIHsKLQkJCXRp
bV90b3VzZSA9ICZhc29jLT50aW1lX2xhc3Rfc2VudDsKLQkJfQotCQkvKiBOb3cgaGFzIGxvbmcg
ZW5vdWdoIHRyYW5zcGlyZWQgdG8gYXV0b2Nsb3NlPyAqLwotCQl0aWNrc19nb25lX2J5ID0gU0VD
X1RPX1RJQ0tTKHRuLnR2X3NlYyAtIHRpbV90b3VzZS0+dHZfc2VjKTsKLQkJaWYgKCh0aWNrc19n
b25lX2J5ID4gMCkgJiYKLQkJICAgICh0aWNrc19nb25lX2J5ID49IChpbnQpYXNvYy0+c2N0cF9h
dXRvY2xvc2VfdGlja3MpKSB7Ci0JCQkvKgotCQkJICogYXV0b2Nsb3NlIHRpbWUgaGFzIGhpdCwg
Y2FsbCB0aGUgb3V0cHV0IHJvdXRpbmUsCi0JCQkgKiB3aGljaCBzaG91bGQgZG8gbm90aGluZyBq
dXN0IHRvIGJlIFNVUkUgd2UgZG9uJ3QKLQkJCSAqIGhhdmUgaGFuZ2luZyBkYXRhLiBXZSBjYW4g
dGhlbiBzYWZlbHkgY2hlY2sgdGhlCi0JCQkgKiBxdWV1ZXMgYW5kIGtub3cgdGhhdCB3ZSBhcmUg
Y2xlYXIgdG8gc2VuZAotCQkJICogc2h1dGRvd24KLQkJCSAqLwotCQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7Ci0JCQkvKiBBcmUgd2UgY2xlYW4/ICovCi0JCQlpZiAoVEFJTFFfRU1QVFkoJmFz
b2MtPnNlbmRfcXVldWUpICYmCi0JCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUp
KSB7Ci0JCQkJLyoKLQkJCQkgKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJ
J20KLQkJCQkgKiBkb25lLi4uCi0JCQkJICovCi0JCQkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2Mp
ICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgewotCQkJCQkvKiBvbmx5IHNlbmQgU0hVVERP
V04gMXN0IHRpbWUgdGhydSAqLwotCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRwOwotCi0JCQkJ
CWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkJCQkg
ICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQp
KSB7Ci0JCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7Ci0JCQkJ
CX0KLQkJCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsK
LQkJCQkJU0NUUF9DTEVBUl9TVUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJ
TkcpOwotCQkJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCQkJaWYg
KHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7Ci0JCQkJCQluZXRwID0gc3RjYi0+YXNvYy5hbHRlcm5h
dGU7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQluZXRwID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uOwotCQkJCQl9Ci0JCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRwKTsKLQkJ
CQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCi0JCQkJCQkJIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkJIG5ldHApOwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0
KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAotCQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBz
dGNiLAotCQkJCQkJCSBuZXRwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKgotCQkJ
ICogTm8gYXV0byBjbG9zZSBhdCB0aGlzIHRpbWUsIHJlc2V0IHQtbyB0byBjaGVjawotCQkJICog
bGF0ZXIKLQkJCSAqLwotCQkJaW50IHRtcDsKLQotCQkJLyogZm9vbCB0aGUgdGltZXIgc3RhcnR1
cCB0byB1c2UgdGhlIHRpbWUgbGVmdCAqLwotCQkJdG1wID0gYXNvYy0+c2N0cF9hdXRvY2xvc2Vf
dGlja3M7Ci0JCQlhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNrcyAtPSB0aWNrc19nb25lX2J5Owot
CQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NFLCBpbnAsIHN0Y2Is
Ci0JCQkgICAgbmV0KTsKLQkJCS8qIHJlc3RvcmUgdGhlIHJlYWwgdGljayB2YWx1ZSAqLwotCQkJ
YXNvYy0+c2N0cF9hdXRvY2xvc2VfdGlja3MgPSB0bXA7Ci0JCX0KLQl9Ci19Ci0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF90aW1lci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3RpbWVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGE1MTliYjZhYjY4ZmVjNjA3
MGEzZmQxZmIzNjZmMjM0ZTg5Yjk2M2MuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3RpbWVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMDMgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgot
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdGltZXIuaCAy
OTU3MDkgMjAxNi0wMi0xNyAxODowNDoyMlogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVm
IF9ORVRJTkVUX1NDVFBfVElNRVJfSF8KLSNkZWZpbmUgX05FVElORVRfU0NUUF9USU1FUl9IXwot
Ci0jaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0KLSNkZWZp
bmUgU0NUUF9SVFRfU0hJRlQgMwotI2RlZmluZSBTQ1RQX1JUVF9WQVJfU0hJRlQgMgotCi1zdHJ1
Y3Qgc2N0cF9uZXRzICoKLXNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVjdCBzY3RwX3RjYiAq
LAotICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50IG1vZGUpOwotCi1pbnQKLXNjdHBfdDNyeHRf
dGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0
IHNjdHBfbmV0cyAqKTsKLWludAotc2N0cF90MWluaXRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2Ig
Kiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLWludAotc2N0
cF9zaHV0ZG93bl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwK
LSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotaW50Ci1zY3RwX2hlYXJ0YmVhdF90aW1lcihzdHJ1
Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF9uZXRz
ICopOwotCi1pbnQKLXNjdHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVj
dCBzY3RwX3RjYiAqLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKik7Ci0KLXZvaWQKLXNjdHBfcGF0
aG10dV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICopOwotCi1pbnQKLXNjdHBfc2h1dGRvd25hY2tfdGltZXIoc3RydWN0
IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAq
KTsKLWludAotc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKLQotaW50Ci1z
Y3RwX2FzY29uZl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwK
LSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOwotCi12b2lkCi1zY3RwX2RlbGV0ZV9wcmltX3RpbWVy
KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAotICAgIHN0cnVjdCBzY3Rw
X25ldHMgKik7Ci0KLXZvaWQKLXNjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNi
ICosIHN0cnVjdCBzY3RwX3RjYiAqLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCk7Ci0KLXZv
aWQgc2N0cF9hdWRpdF9yZXRyYW5taXNzaW9uX3F1ZXVlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICopOwotCi12b2lkIHNjdHBfaXRlcmF0b3JfdGltZXIoc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0
KTsKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkg
fHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBk
ZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKLXZvaWQgc2N0cF9zbG93dGltbyh2b2lkKTsKLSNl
bHNlCi12b2lkIHNjdHBfZ2Moc3RydWN0IGlucGNiaW5mbyAqKTsKLSNlbmRpZgotI2VuZGlmCi0K
LSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdWlvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGM0Njk4OWIwMjlmN2Q3M2Y0ZTkwNjRiMjg5ZTQ3NTk2YzQ5MmNkNGYuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3Vpby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2NCArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdo
dCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwg
VHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0
aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
LSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9f
Ci0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQvc2N0cF91aW8uaCAzMDk2MDcgMjAxNi0xMi0wNiAxMDoyMToyNVogdHVleGVuICQiKTsK
LSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfVUlPX0hfCi0jZGVmaW5lIF9ORVRJTkVU
X1NDVFBfVUlPX0hfCi0KLSNpZiAoZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoS0VSTkVM
KSkKLSNpZm5kZWYgX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMCi0jZW5kaWYKLSNlbmRpZgotCi0j
aWYgIShkZWZpbmVkKF9fV2luZG93c19fKSkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKLSNpZiAhIGRlZmluZWQoX0tFUk5FTCkKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbmRp
ZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotI3By
YWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkKLSNpZiBk
ZWZpbmVkKF9LRVJORUwpCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3Nv
Y2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2VuZGlmCi0KLXR5cGVk
ZWYgdWludDMyX3Qgc2N0cF9hc3NvY190OwotCi0jZGVmaW5lIFNDVFBfRlVUVVJFX0FTU09DICAw
Ci0jZGVmaW5lIFNDVFBfQ1VSUkVOVF9BU1NPQyAxCi0jZGVmaW5lIFNDVFBfQUxMX0FTU09DICAg
ICAyCi0KLXN0cnVjdCBzY3RwX2V2ZW50IHsKLQlzY3RwX2Fzc29jX3Qgc2VfYXNzb2NfaWQ7Ci0J
dWludDE2X3QgICAgIHNlX3R5cGU7Ci0JdWludDhfdCAgICAgIHNlX29uOwotfTsKLQotLyogQ29t
cGF0aWJpbGl0eSB0byBwcmV2aW91cyBkZWZpbmUncyAqLwotI2RlZmluZSBzY3RwX3N0cmVhbV9y
ZXNldF9ldmVudHMgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQKLQotLyogT24vT2ZmIHNldHVwIGZv
ciBzdWJzY3JpcHRpb24gdG8gZXZlbnRzICovCi1zdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUg
ewotCXVpbnQ4X3Qgc2N0cF9kYXRhX2lvX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9hc3NvY2lhdGlv
bl9ldmVudDsKLQl1aW50OF90IHNjdHBfYWRkcmVzc19ldmVudDsKLQl1aW50OF90IHNjdHBfc2Vu
ZF9mYWlsdXJlX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9wZWVyX2Vycm9yX2V2ZW50OwotCXVpbnQ4
X3Qgc2N0cF9zaHV0ZG93bl9ldmVudDsKLQl1aW50OF90IHNjdHBfcGFydGlhbF9kZWxpdmVyeV9l
dmVudDsKLQl1aW50OF90IHNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudDsKLQl1aW50OF90IHNj
dHBfYXV0aGVudGljYXRpb25fZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQ7
Ci0JdWludDhfdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudDsKLX07Ci0KLS8qIGFuY2lsbGFyeSBk
YXRhIHR5cGVzICovCi0jZGVmaW5lIFNDVFBfSU5JVAkweDAwMDEKLSNkZWZpbmUgU0NUUF9TTkRS
Q1YJMHgwMDAyCi0jZGVmaW5lIFNDVFBfRVhUUkNWCTB4MDAwMwotI2RlZmluZSBTQ1RQX1NORElO
Rk8gICAgMHgwMDA0Ci0jZGVmaW5lIFNDVFBfUkNWSU5GTyAgICAweDAwMDUKLSNkZWZpbmUgU0NU
UF9OWFRJTkZPICAgIDB4MDAwNgotI2RlZmluZSBTQ1RQX1BSSU5GTyAgICAgMHgwMDA3Ci0jZGVm
aW5lIFNDVFBfQVVUSElORk8gICAweDAwMDgKLSNkZWZpbmUgU0NUUF9EU1RBRERSVjQgIDB4MDAw
OQotI2RlZmluZSBTQ1RQX0RTVEFERFJWNiAgMHgwMDBhCi0KLS8qCi0gKiBhbmNpbGxhcnkgZGF0
YSBzdHJ1Y3R1cmVzCi0gKi8KLXN0cnVjdCBzY3RwX2luaXRtc2cgewotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgODAwMDAwCi0JLyogVGhpcyBpcyBhIGJ1
Zy4gTm90IGZpeGVkIGZvciBBQkkgY29tcGF0aWJpbGl0eSAqLwotCXVpbnQzMl90IHNpbml0X251
bV9vc3RyZWFtczsKLQl1aW50MzJfdCBzaW5pdF9tYXhfaW5zdHJlYW1zOwotI2Vsc2UKLQl1aW50
MTZfdCBzaW5pdF9udW1fb3N0cmVhbXM7Ci0JdWludDE2X3Qgc2luaXRfbWF4X2luc3RyZWFtczsK
LSNlbmRpZgotCXVpbnQxNl90IHNpbml0X21heF9hdHRlbXB0czsKLQl1aW50MTZfdCBzaW5pdF9t
YXhfaW5pdF90aW1lbzsKLX07Ci0KLS8qIFdlIGFkZCA5NiBieXRlcyB0byB0aGUgc2l6ZSBvZiBz
Y3RwX3NuZHJjdmluZm8uCi0gKiBUaGlzIG1ha2VzIHRoZSBjdXJyZW50IHN0cnVjdHVyZSAxMjgg
Ynl0ZXMgbG9uZwotICogd2hpY2ggaXMgbmljZWx5IDY0IGJpdCBhbGlnbmVkIGJ1dCBhbHNvIGhh
cyByb29tCi0gKiBmb3IgdXMgdG8gYWRkIG1vcmUgYW5kIGtlZXAgQUJJIGNvbXBhdGliaWxpdHku
Ci0gKiBGb3IgZXhhbXBsZSwgYWxyZWFkeSB3ZSBoYXZlIHRoZSBzY3RwX2V4dHJjdmluZm8KLSAq
IHdoZW4gZW5hYmxlZCB3aGljaCBpcyA0OCBieXRlcy4KLSAqLwotCi0vKgotICogVGhlIGFzc29j
IHVwIG5lZWRzIGEgdmVyZmlkCi0gKiBhbGwgc2VuZHJjdmluZm8ncyBuZWVkIGEgdmVyZmlkIGZv
ciBTRU5ESU5HIG9ubHkuCi0gKi8KLQotCi0jZGVmaW5lIFNDVFBfQUxJR05fUkVTVl9QQUQgOTIK
LSNkZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRF9TSE9SVCA3NgotCi1zdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvIHsKLQl1aW50MTZfdCBzaW5mb19zdHJlYW07Ci0JdWludDE2X3Qgc2luZm9fc3NuOwot
CXVpbnQxNl90IHNpbmZvX2ZsYWdzOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uIDwgODAwMDAwCi0JdWludDE2X3Qgc2luZm9fcHJfcG9saWN5OwotI2VuZGlm
Ci0JdWludDMyX3Qgc2luZm9fcHBpZDsKLQl1aW50MzJfdCBzaW5mb19jb250ZXh0OwotCXVpbnQz
Ml90IHNpbmZvX3RpbWV0b2xpdmU7Ci0JdWludDMyX3Qgc2luZm9fdHNuOwotCXVpbnQzMl90IHNp
bmZvX2N1bXRzbjsKLQlzY3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2lu
Zm9fa2V5bnVtYmVyOwotCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92YWxpZDsKLQl1aW50OF90
ICBfX3Jlc2VydmVfcGFkW1NDVFBfQUxJR05fUkVTVl9QQURdOwotfTsKLQotc3RydWN0IHNjdHBf
ZXh0cmN2aW5mbyB7Ci0JdWludDE2X3Qgc2luZm9fc3RyZWFtOwotCXVpbnQxNl90IHNpbmZvX3Nz
bjsKLQl1aW50MTZfdCBzaW5mb19mbGFnczsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA8IDgwMDAwMAotCXVpbnQxNl90IHNpbmZvX3ByX3BvbGljeTsKLSNl
bmRpZgotCXVpbnQzMl90IHNpbmZvX3BwaWQ7Ci0JdWludDMyX3Qgc2luZm9fY29udGV4dDsKLQl1
aW50MzJfdCBzaW5mb190aW1ldG9saXZlOyAvKiBzaG91bGQgaGF2ZSBiZWVuIHNpbmZvX3ByX3Zh
bHVlICovCi0JdWludDMyX3Qgc2luZm9fdHNuOwotCXVpbnQzMl90IHNpbmZvX2N1bXRzbjsKLQlz
Y3RwX2Fzc29jX3Qgc2luZm9fYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2VyaW5mb19uZXh0X2ZsYWdz
OwotCXVpbnQxNl90IHNlcmluZm9fbmV4dF9zdHJlYW07Ci0JdWludDMyX3Qgc2VyaW5mb19uZXh0
X2FpZDsKLQl1aW50MzJfdCBzZXJpbmZvX25leHRfbGVuZ3RoOwotCXVpbnQzMl90IHNlcmluZm9f
bmV4dF9wcGlkOwotCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcjsKLQl1aW50MTZfdCBzaW5mb19r
ZXludW1iZXJfdmFsaWQ7Ci0JdWludDhfdCAgX19yZXNlcnZlX3BhZFtTQ1RQX0FMSUdOX1JFU1Zf
UEFEX1NIT1JUXTsKLX07Ci0jZGVmaW5lIHNpbmZvX3ByX3ZhbHVlIHNpbmZvX3RpbWV0b2xpdmUK
LSNkZWZpbmUgc3JlaW5mb19uZXh0X2ZsYWdzIHNlcmluZm9fbmV4dF9mbGFncwotI2RlZmluZSBz
cmVpbmZvX25leHRfc3RyZWFtIHNlcmluZm9fbmV4dF9zdHJlYW0KLSNkZWZpbmUgc3JlaW5mb19u
ZXh0X2FpZCBzZXJpbmZvX25leHRfYWlkCi0jZGVmaW5lIHNyZWluZm9fbmV4dF9sZW5ndGggc2Vy
aW5mb19uZXh0X2xlbmd0aAotI2RlZmluZSBzcmVpbmZvX25leHRfcHBpZCBzZXJpbmZvX25leHRf
cHBpZAotCi1zdHJ1Y3Qgc2N0cF9zbmRpbmZvIHsKLQl1aW50MTZfdCBzbmRfc2lkOwotCXVpbnQx
Nl90IHNuZF9mbGFnczsKLQl1aW50MzJfdCBzbmRfcHBpZDsKLQl1aW50MzJfdCBzbmRfY29udGV4
dDsKLQlzY3RwX2Fzc29jX3Qgc25kX2Fzc29jX2lkOwotfTsKLQotc3RydWN0IHNjdHBfcHJpbmZv
IHsKLQl1aW50MTZfdCBwcl9wb2xpY3k7Ci0JdWludDMyX3QgcHJfdmFsdWU7Ci19OwotCi1zdHJ1
Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbyB7Ci0JdWludDE2X3QgcHJfcG9saWN5OwotCXVpbnQzMl90
IHByX3ZhbHVlOwotCXNjdHBfYXNzb2NfdCBwcl9hc3NvY19pZDsKLX07Ci0KLXN0cnVjdCBzY3Rw
X2F1dGhpbmZvIHsKLQl1aW50MTZfdCBhdXRoX2tleW51bWJlcjsKLX07Ci0KLXN0cnVjdCBzY3Rw
X3JjdmluZm8gewotCXVpbnQxNl90IHJjdl9zaWQ7Ci0JdWludDE2X3QgcmN2X3NzbjsKLQl1aW50
MTZfdCByY3ZfZmxhZ3M7Ci0JdWludDMyX3QgcmN2X3BwaWQ7Ci0JdWludDMyX3QgcmN2X3RzbjsK
LQl1aW50MzJfdCByY3ZfY3VtdHNuOwotCXVpbnQzMl90IHJjdl9jb250ZXh0OwotCXNjdHBfYXNz
b2NfdCByY3ZfYXNzb2NfaWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9ueHRpbmZvIHsKLQl1aW50MTZf
dCBueHRfc2lkOwotCXVpbnQxNl90IG54dF9mbGFnczsKLQl1aW50MzJfdCBueHRfcHBpZDsKLQl1
aW50MzJfdCBueHRfbGVuZ3RoOwotCXNjdHBfYXNzb2NfdCBueHRfYXNzb2NfaWQ7Ci19OwotCi0j
ZGVmaW5lIFNDVFBfTk9fTkVYVF9NU0cgICAgICAgICAgIDB4MDAwMAotI2RlZmluZSBTQ1RQX05F
WFRfTVNHX0FWQUlMICAgICAgICAweDAwMDEKLSNkZWZpbmUgU0NUUF9ORVhUX01TR19JU0NPTVBM
RVRFICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEIDB4MDAwNAot
I2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTX05PVElGSUNBVElPTiAweDAwMDgKLQotc3RydWN0IHNj
dHBfcmVjdnZfcm4gewotCXN0cnVjdCBzY3RwX3JjdmluZm8gcmVjdnZfcmN2aW5mbzsKLQlzdHJ1
Y3Qgc2N0cF9ueHRpbmZvIHJlY3Z2X254dGluZm87Ci19OwotCi0jZGVmaW5lIFNDVFBfUkVDVlZf
Tk9JTkZPICAwCi0jZGVmaW5lIFNDVFBfUkVDVlZfUkNWSU5GTyAxCi0jZGVmaW5lIFNDVFBfUkVD
VlZfTlhUSU5GTyAyCi0jZGVmaW5lIFNDVFBfUkVDVlZfUk4gICAgICAzCi0KLSNkZWZpbmUgU0NU
UF9TRU5EVl9OT0lORk8gICAwCi0jZGVmaW5lIFNDVFBfU0VORFZfU05ESU5GTyAgMQotI2RlZmlu
ZSBTQ1RQX1NFTkRWX1BSSU5GTyAgIDIKLSNkZWZpbmUgU0NUUF9TRU5EVl9BVVRISU5GTyAzCi0j
ZGVmaW5lIFNDVFBfU0VORFZfU1BBICAgICAgNAotCi1zdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgewot
CXVpbnQzMl90IHNlbmR2X2ZsYWdzOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc2VuZHZfc25kaW5m
bzsKLQlzdHJ1Y3Qgc2N0cF9wcmluZm8gc2VuZHZfcHJpbmZvOwotCXN0cnVjdCBzY3RwX2F1dGhp
bmZvIHNlbmR2X2F1dGhpbmZvOwotfTsKLQotI2RlZmluZSBTQ1RQX1NFTkRfU05ESU5GT19WQUxJ
RCAgMHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEICAgMHgwMDAwMDAw
MgotI2RlZmluZSBTQ1RQX1NFTkRfQVVUSElORk9fVkFMSUQgMHgwMDAwMDAwNAotCi1zdHJ1Y3Qg
c2N0cF9zbmRfYWxsX2NvbXBsZXRlcyB7Ci0JdWludDE2X3Qgc2FsbF9zdHJlYW07Ci0JdWludDE2
X3Qgc2FsbF9mbGFnczsKLQl1aW50MzJfdCBzYWxsX3BwaWQ7Ci0JdWludDMyX3Qgc2FsbF9jb250
ZXh0OwotCXVpbnQzMl90IHNhbGxfbnVtX3NlbnQ7Ci0JdWludDMyX3Qgc2FsbF9udW1fZmFpbGVk
OwotfTsKLQotLyogRmxhZ3MgdGhhdCBnbyBpbnRvIHRoZSBzaW5mby0+c2luZm9fZmxhZ3MgZmll
bGQgKi8KLSNkZWZpbmUgU0NUUF9OT1RJRklDQVRJT04gICAgIDB4MDAxMCAvKiBuZXh0IG1lc3Nh
Z2UgaXMgYSBub3RpZmljYXRpb24gKi8KLSNkZWZpbmUgU0NUUF9DT01QTEVURSAgICAgICAgIDB4
MDAyMCAvKiBuZXh0IG1lc3NhZ2UgaXMgY29tcGxldGUgKi8KLSNkZWZpbmUgU0NUUF9FT0YgICAg
ICAgICAgICAgIDB4MDEwMCAvKiBTdGFydCBzaHV0ZG93biBwcm9jZWR1cmVzICovCi0jZGVmaW5l
IFNDVFBfQUJPUlQgICAgICAgICAgICAweDAyMDAgLyogU2VuZCBhbiBBQk9SVCB0byBwZWVyICov
Ci0jZGVmaW5lIFNDVFBfVU5PUkRFUkVEICAgICAgICAweDA0MDAgLyogTWVzc2FnZSBpcyB1bi1v
cmRlcmVkICovCi0jZGVmaW5lIFNDVFBfQUREUl9PVkVSICAgICAgICAweDA4MDAgLyogT3ZlcnJp
ZGUgdGhlIHByaW1hcnktYWRkcmVzcyAqLwotI2RlZmluZSBTQ1RQX1NFTkRBTEwgICAgICAgICAg
MHgxMDAwIC8qIFNlbmQgdGhpcyBvbiBhbGwgYXNzb2NpYXRpb25zICovCi0jZGVmaW5lIFNDVFBf
RU9SICAgICAgICAgICAgICAweDIwMDAgLyogZW5kIG9mIG1lc3NhZ2Ugc2lnbmFsICovCi0jZGVm
aW5lIFNDVFBfU0FDS19JTU1FRElBVEVMWSAweDQwMDAgLyogU2V0IEktQml0ICovCi0KLSNkZWZp
bmUgSU5WQUxJRF9TSU5GT19GTEFHKHgpICgoKHgpICYgMHhmZmZmZmZmMCBcCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmIH4oU0NUUF9FT0YgfCBTQ1RQX0FCT1JUIHwgU0NU
UF9VTk9SREVSRUQgfFwKLQkJCQkgICAgICAgIFNDVFBfQUREUl9PVkVSIHwgU0NUUF9TRU5EQUxM
IHwgU0NUUF9FT1IgfFwKLQkJCQkJU0NUUF9TQUNLX0lNTUVESUFURUxZKSkgIT0gMCkKLS8qIGZv
ciB0aGUgZW5kcG9pbnQgKi8KLQotLyogVGhlIGxvd2VyIGZvdXIgYml0cyBpcyBhbiBlbnVtZXJh
dGlvbiBvZiBQUi1TQ1RQIHBvbGljaWVzICovCi0jZGVmaW5lIFNDVFBfUFJfU0NUUF9OT05FIDB4
MDAwMCAvKiBSZWxpYWJsZSB0cmFuc2ZlciAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfVFRMICAw
eDAwMDEgLyogVGltZSBiYXNlZCBQUi1TQ1RQICovCi0jZGVmaW5lIFNDVFBfUFJfU0NUUF9QUklP
IDB4MDAwMiAvKiBCdWZmZXIgYmFzZWQgUFItU0NUUCAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBf
QlVGICBTQ1RQX1BSX1NDVFBfUFJJTyAvKiBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgKi8K
LSNkZWZpbmUgU0NUUF9QUl9TQ1RQX1JUWCAgMHgwMDAzIC8qIE51bWJlciBvZiByZXRyYW5zbWlz
c2lvbnMgYmFzZWQgUFItU0NUUCAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfTUFYICBTQ1RQX1BS
X1NDVFBfUlRYCi0jZGVmaW5lIFNDVFBfUFJfU0NUUF9BTEwgIDB4MDAwZiAvKiBVc2VkIGZvciBh
Z2dyZWdhdGVkIHN0YXRzICovCi0KLSNkZWZpbmUgUFJfU0NUUF9QT0xJQ1koeCkgICAgICAgICAo
KHgpICYgMHgwZikKLSNkZWZpbmUgUFJfU0NUUF9FTkFCTEVEKHgpICAgICAgICAoKFBSX1NDVFBf
UE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9OT05FKSAmJiBcCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChQUl9TQ1RQX1BPTElDWSh4KSAhPSBTQ1RQX1BSX1NDVFBfQUxMKSkK
LSNkZWZpbmUgUFJfU0NUUF9UVExfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0g
U0NUUF9QUl9TQ1RQX1RUTCkKLSNkZWZpbmUgUFJfU0NUUF9CVUZfRU5BQkxFRCh4KSAgICAoUFJf
U0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX0JVRikKLSNkZWZpbmUgUFJfU0NUUF9SVFhf
RU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX1JUWCkKLSNk
ZWZpbmUgUFJfU0NUUF9JTlZBTElEX1BPTElDWSh4KSAoUFJfU0NUUF9QT0xJQ1koeCkgPiBTQ1RQ
X1BSX1NDVFBfTUFYKQotI2RlZmluZSBQUl9TQ1RQX1ZBTElEX1BPTElDWSh4KSAgIChQUl9TQ1RQ
X1BPTElDWSh4KSA8PSBTQ1RQX1BSX1NDVFBfTUFYKQotCi0vKiBTdGF0J3MgKi8KLXN0cnVjdCBz
Y3RwX3BjYmluZm8gewotCXVpbnQzMl90IGVwX2NvdW50OwotCXVpbnQzMl90IGFzb2NfY291bnQ7
Ci0JdWludDMyX3QgbGFkZHJfY291bnQ7Ci0JdWludDMyX3QgcmFkZHJfY291bnQ7Ci0JdWludDMy
X3QgY2hrX2NvdW50OwotCXVpbnQzMl90IHJlYWRxX2NvdW50OwotCXVpbnQzMl90IGZyZWVfY2h1
bmtzOwotCXVpbnQzMl90IHN0cmVhbV9vcXVlOwotfTsKLQotc3RydWN0IHNjdHBfc29ja3N0YXQg
ewotCXNjdHBfYXNzb2NfdCBzc19hc3NvY19pZDsKLQl1aW50MzJfdCBzc190b3RhbF9zbmRidWY7
Ci0JdWludDMyX3Qgc3NfdG90YWxfcmVjdl9idWY7Ci19OwotCi0vKgotICogbm90aWZpY2F0aW9u
IGV2ZW50IHN0cnVjdHVyZXMKLSAqLwotCi0vKgotICogYXNzb2NpYXRpb24gY2hhbmdlIGV2ZW50
Ci0gKi8KLXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSB7Ci0JdWludDE2X3Qgc2FjX3R5cGU7Ci0J
dWludDE2X3Qgc2FjX2ZsYWdzOwotCXVpbnQzMl90IHNhY19sZW5ndGg7Ci0JdWludDE2X3Qgc2Fj
X3N0YXRlOwotCXVpbnQxNl90IHNhY19lcnJvcjsKLQl1aW50MTZfdCBzYWNfb3V0Ym91bmRfc3Ry
ZWFtczsKLQl1aW50MTZfdCBzYWNfaW5ib3VuZF9zdHJlYW1zOwotCXNjdHBfYXNzb2NfdCBzYWNf
YXNzb2NfaWQ7Ci0JdWludDhfdCBzYWNfaW5mb1tdOwotfTsKLQotLyogc2FjX3N0YXRlIHZhbHVl
cyAqLwotI2RlZmluZSBTQ1RQX0NPTU1fVVAgICAgICAgICAgICAweDAwMDEKLSNkZWZpbmUgU0NU
UF9DT01NX0xPU1QgICAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfUkVTVEFSVCAgICAgICAg
ICAgIDB4MDAwMwotI2RlZmluZSBTQ1RQX1NIVVRET1dOX0NPTVAgICAgICAweDAwMDQKLSNkZWZp
bmUgU0NUUF9DQU5UX1NUUl9BU1NPQyAgICAgMHgwMDA1Ci0KLS8qIHNhY19pbmZvIHZhbHVlcyAq
LwotI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSCQkJMHgwMQotI2RlZmluZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX0FVVEgJCTB4MDIKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19BU0NP
TkYJCTB4MDMKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRgkJMHgwNAotI2Rl
ZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJRwkJMHgwNQotI2RlZmluZSBTQ1RQX0FT
U09DX1NVUFBPUlRTX0lOVEVSTEVBVklORwkweDA2Ci0jZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9S
VFNfTUFYCQkJMHgwNgotLyoKLSAqIEFkZHJlc3MgZXZlbnQKLSAqLwotc3RydWN0IHNjdHBfcGFk
ZHJfY2hhbmdlIHsKLQl1aW50MTZfdCBzcGNfdHlwZTsKLQl1aW50MTZfdCBzcGNfZmxhZ3M7Ci0J
dWludDMyX3Qgc3BjX2xlbmd0aDsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGNfYWFkZHI7
Ci0JdWludDMyX3Qgc3BjX3N0YXRlOwotCXVpbnQzMl90IHNwY19lcnJvcjsKLQlzY3RwX2Fzc29j
X3Qgc3BjX2Fzc29jX2lkOwotfTsKLQotLyogcGFkZHIgc3RhdGUgdmFsdWVzICovCi0jZGVmaW5l
IFNDVFBfQUREUl9BVkFJTEFCTEUJMHgwMDAxCi0jZGVmaW5lIFNDVFBfQUREUl9VTlJFQUNIQUJM
RQkweDAwMDIKLSNkZWZpbmUgU0NUUF9BRERSX1JFTU9WRUQJMHgwMDAzCi0jZGVmaW5lIFNDVFBf
QUREUl9BRERFRAkJMHgwMDA0Ci0jZGVmaW5lIFNDVFBfQUREUl9NQURFX1BSSU0JMHgwMDA1Ci0j
ZGVmaW5lIFNDVFBfQUREUl9DT05GSVJNRUQJMHgwMDA2Ci0KLSNkZWZpbmUgU0NUUF9BQ1RJVkUJ
CTB4MDAwMQkvKiBTQ1RQX0FERFJfUkVBQ0hBQkxFICovCi0jZGVmaW5lIFNDVFBfSU5BQ1RJVkUJ
CTB4MDAwMgkvKiBuZWl0aGVyIFNDVFBfQUREUl9SRUFDSEFCTEUKLQkJCQkJICAgbm9yIFNDVFBf
QUREUl9VTkNPTkZJUk1FRCAqLwotI2RlZmluZSBTQ1RQX1VOQ09ORklSTUVECTB4MDIwMAkvKiBT
Q1RQX0FERFJfVU5DT05GSVJNRUQgKi8KLQotLyogcmVtb3RlIGVycm9yIGV2ZW50cyAqLwotc3Ry
dWN0IHNjdHBfcmVtb3RlX2Vycm9yIHsKLQl1aW50MTZfdCBzcmVfdHlwZTsKLQl1aW50MTZfdCBz
cmVfZmxhZ3M7Ci0JdWludDMyX3Qgc3JlX2xlbmd0aDsKLQl1aW50MTZfdCBzcmVfZXJyb3I7Ci0J
c2N0cF9hc3NvY190IHNyZV9hc3NvY19pZDsKLQl1aW50OF90IHNyZV9kYXRhW107Ci19OwotCi0v
KiBkYXRhIHNlbmQgZmFpbHVyZSBldmVudCAoZGVwcmVjYXRlZCkgKi8KLXN0cnVjdCBzY3RwX3Nl
bmRfZmFpbGVkIHsKLQl1aW50MTZfdCBzc2ZfdHlwZTsKLQl1aW50MTZfdCBzc2ZfZmxhZ3M7Ci0J
dWludDMyX3Qgc3NmX2xlbmd0aDsKLQl1aW50MzJfdCBzc2ZfZXJyb3I7Ci0Jc3RydWN0IHNjdHBf
c25kcmN2aW5mbyBzc2ZfaW5mbzsKLQlzY3RwX2Fzc29jX3Qgc3NmX2Fzc29jX2lkOwotCXVpbnQ4
X3Qgc3NmX2RhdGFbXTsKLX07Ci0KLS8qIGRhdGEgc2VuZCBmYWlsdXJlIGV2ZW50IChub3QgZGVw
cmVjYXRlZCkgKi8KLXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHsKLQl1aW50MTZfdCBz
c2ZlX3R5cGU7Ci0JdWludDE2X3Qgc3NmZV9mbGFnczsKLQl1aW50MzJfdCBzc2ZlX2xlbmd0aDsK
LQl1aW50MzJfdCBzc2ZlX2Vycm9yOwotCXN0cnVjdCBzY3RwX3NuZGluZm8gc3NmZV9pbmZvOwot
CXNjdHBfYXNzb2NfdCBzc2ZlX2Fzc29jX2lkOwotCXVpbnQ4X3QgIHNzZmVfZGF0YVtdOwotfTsK
LQotLyogZmxhZyB0aGF0IGluZGljYXRlcyBzdGF0ZSBvZiBkYXRhICovCi0jZGVmaW5lIFNDVFBf
REFUQV9VTlNFTlQJMHgwMDAxCS8qIGlucXVldWUgbmV2ZXIgb24gd2lyZSAqLwotI2RlZmluZSBT
Q1RQX0RBVEFfU0VOVAkJMHgwMDAyCS8qIG9uIHdpcmUgYXQgZmFpbHVyZSAqLwotCi0vKiBzaHV0
ZG93biBldmVudCAqLwotc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgewotCXVpbnQxNl90IHNz
ZV90eXBlOwotCXVpbnQxNl90IHNzZV9mbGFnczsKLQl1aW50MzJfdCBzc2VfbGVuZ3RoOwotCXNj
dHBfYXNzb2NfdCBzc2VfYXNzb2NfaWQ7Ci19OwotCi0vKiBBZGFwdGF0aW9uIGxheWVyIGluZGlj
YXRpb24gc3R1ZmYgKi8KLXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgewotCXVpbnQxNl90
IHNhaV90eXBlOwotCXVpbnQxNl90IHNhaV9mbGFnczsKLQl1aW50MzJfdCBzYWlfbGVuZ3RoOwot
CXVpbnQzMl90IHNhaV9hZGFwdGF0aW9uX2luZDsKLQlzY3RwX2Fzc29jX3Qgc2FpX2Fzc29jX2lk
OwotfTsKLQotc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlvbiB7Ci0JdWludDMyX3Qgc3NiX2FkYXB0
YXRpb25faW5kOwotfTsKLQotLyogY29tcGF0aWJsZSBvbGQgc3BlbGxpbmcgKi8KLXN0cnVjdCBz
Y3RwX2FkYXB0aW9uX2V2ZW50IHsKLQl1aW50MTZfdCBzYWlfdHlwZTsKLQl1aW50MTZfdCBzYWlf
ZmxhZ3M7Ci0JdWludDMyX3Qgc2FpX2xlbmd0aDsKLQl1aW50MzJfdCBzYWlfYWRhcHRpb25faW5k
OwotCXNjdHBfYXNzb2NfdCBzYWlfYXNzb2NfaWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9zZXRhZGFw
dGlvbiB7Ci0JdWludDMyX3Qgc3NiX2FkYXB0aW9uX2luZDsKLX07Ci0KLQotLyoKLSAqIFBhcnRp
YWwgRGVsaXZlcnkgQVBJIGV2ZW50Ci0gKi8KLXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHsKLQl1
aW50MTZfdCBwZGFwaV90eXBlOwotCXVpbnQxNl90IHBkYXBpX2ZsYWdzOwotCXVpbnQzMl90IHBk
YXBpX2xlbmd0aDsKLQl1aW50MzJfdCBwZGFwaV9pbmRpY2F0aW9uOwotCXVpbnQxNl90IHBkYXBp
X3N0cmVhbTsKLQl1aW50MTZfdCBwZGFwaV9zZXE7Ci0Jc2N0cF9hc3NvY190IHBkYXBpX2Fzc29j
X2lkOwotfTsKLQotLyogaW5kaWNhdGlvbiB2YWx1ZXMgKi8KLSNkZWZpbmUgU0NUUF9QQVJUSUFM
X0RFTElWRVJZX0FCT1JURUQJMHgwMDAxCi0KLQotLyoKLSAqIGF1dGhlbnRpY2F0aW9uIGtleSBl
dmVudAotICovCi1zdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHsKLQl1aW50MTZfdCBhdXRoX3R5
cGU7Ci0JdWludDE2X3QgYXV0aF9mbGFnczsKLQl1aW50MzJfdCBhdXRoX2xlbmd0aDsKLQl1aW50
MTZfdCBhdXRoX2tleW51bWJlcjsKLQl1aW50MTZfdCBhdXRoX2FsdGtleW51bWJlcjsKLQl1aW50
MzJfdCBhdXRoX2luZGljYXRpb247Ci0Jc2N0cF9hc3NvY190IGF1dGhfYXNzb2NfaWQ7Ci19Owot
Ci0vKiBpbmRpY2F0aW9uIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0FVVEhfTkVXX0tFWQkweDAw
MDEKLSNkZWZpbmUgU0NUUF9BVVRIX05FV0tFWQlTQ1RQX0FVVEhfTkVXX0tFWQotI2RlZmluZSBT
Q1RQX0FVVEhfTk9fQVVUSAkweDAwMDIKLSNkZWZpbmUgU0NUUF9BVVRIX0ZSRUVfS0VZCTB4MDAw
MwotCi0KLXN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgewotCXVpbnQxNl90IHNlbmRlcl9k
cnlfdHlwZTsKLQl1aW50MTZfdCBzZW5kZXJfZHJ5X2ZsYWdzOwotCXVpbnQzMl90IHNlbmRlcl9k
cnlfbGVuZ3RoOwotCXNjdHBfYXNzb2NfdCBzZW5kZXJfZHJ5X2Fzc29jX2lkOwotfTsKLQotCi0v
KgotICogU3RyZWFtIHJlc2V0IGV2ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfU1RSRUFNX1JFU0VU
X0VWRU5UCi0gKi8KLXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCB7Ci0JdWludDE2X3Qg
c3RycmVzZXRfdHlwZTsKLQl1aW50MTZfdCBzdHJyZXNldF9mbGFnczsKLQl1aW50MzJfdCBzdHJy
ZXNldF9sZW5ndGg7Ci0Jc2N0cF9hc3NvY190IHN0cnJlc2V0X2Fzc29jX2lkOwotCXVpbnQxNl90
IHN0cnJlc2V0X3N0cmVhbV9saXN0W107Ci19OwotCi0vKiBmbGFncyBpbiBzdHJlYW1fcmVzZXRf
ZXZlbnQgKHN0cnJlc2V0X2ZsYWdzKSAqLwotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNP
TUlOR19TU04gIDB4MDAwMQotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19TU04g
IDB4MDAwMgotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9ERU5JRUQgICAgICAgIDB4MDAwNAot
I2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9GQUlMRUQgICAgICAgIDB4MDAwOAotCi0vKgotICog
QXNzb2MgcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9BU1NPQ19SRVNFVF9FVkVOVAot
ICovCi1zdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCB7Ci0JdWludDE2X3QgCWFzc29jcmVz
ZXRfdHlwZTsKLQl1aW50MTZfdAlhc3NvY3Jlc2V0X2ZsYWdzOwotCXVpbnQzMl90CWFzc29jcmVz
ZXRfbGVuZ3RoOwotCXNjdHBfYXNzb2NfdAlhc3NvY3Jlc2V0X2Fzc29jX2lkOwotCXVpbnQzMl90
CWFzc29jcmVzZXRfbG9jYWxfdHNuOwotCXVpbnQzMl90CWFzc29jcmVzZXRfcmVtb3RlX3RzbjsK
LX07Ci0KLSNkZWZpbmUgU0NUUF9BU1NPQ19SRVNFVF9ERU5JRUQJCTB4MDAwNAotI2RlZmluZSBT
Q1RQX0FTU09DX1JFU0VUX0ZBSUxFRAkJMHgwMDA4Ci0KLS8qCi0gKiBTdHJlYW0gY2hhbmdlIGV2
ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVAotICovCi1zdHJ1Y3Qg
c2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHsKLQl1aW50MTZfdAlzdHJjaGFuZ2VfdHlwZTsKLQl1
aW50MTZfdAlzdHJjaGFuZ2VfZmxhZ3M7Ci0JdWludDMyX3QJc3RyY2hhbmdlX2xlbmd0aDsKLQlz
Y3RwX2Fzc29jX3QJc3RyY2hhbmdlX2Fzc29jX2lkOwotCXVpbnQxNl90CXN0cmNoYW5nZV9pbnN0
cm1zOwotCXVpbnQxNl90CXN0cmNoYW5nZV9vdXRzdHJtczsKLX07Ci0KLSNkZWZpbmUgU0NUUF9T
VFJFQU1fQ0hBTkdFX0RFTklFRAkweDAwMDQKLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZB
SUxFRAkweDAwMDgKLQotCi0vKiBTQ1RQIG5vdGlmaWNhdGlvbiBldmVudCAqLwotc3RydWN0IHNj
dHBfdGx2IHsKLQl1aW50MTZfdCBzbl90eXBlOwotCXVpbnQxNl90IHNuX2ZsYWdzOwotCXVpbnQz
Ml90IHNuX2xlbmd0aDsKLX07Ci0KLXVuaW9uIHNjdHBfbm90aWZpY2F0aW9uIHsKLQlzdHJ1Y3Qg
c2N0cF90bHYgc25faGVhZGVyOwotCXN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSBzbl9hc3NvY19j
aGFuZ2U7Ci0Jc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlIHNuX3BhZGRyX2NoYW5nZTsKLQlzdHJ1
Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igc25fcmVtb3RlX2Vycm9yOwotCXN0cnVjdCBzY3RwX3NlbmRf
ZmFpbGVkIHNuX3NlbmRfZmFpbGVkOwotCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50IHNuX3No
dXRkb3duX2V2ZW50OwotCXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlv
bl9ldmVudDsKLQkvKiBjb21wYXRpYmlsaXR5IHNhbWUgYXMgYWJvdmUgKi8KLQlzdHJ1Y3Qgc2N0
cF9hZGFwdGlvbl9ldmVudCBzbl9hZGFwdGlvbl9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9wZGFwaV9l
dmVudCBzbl9wZGFwaV9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHNuX2F1dGhf
ZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCBzbl9zZW5kZXJfZHJ5X2V2ZW50
OwotCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHNuX3NlbmRfZmFpbGVkX2V2ZW50Owot
CXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCBzbl9zdHJyZXNldF9ldmVudDsKLQlzdHJ1
Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgc25fYXNzb2NyZXNldF9ldmVudDsKLQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHNuX3N0cmNoYW5nZV9ldmVudDsKLX07Ci0KLS8qIG5v
dGlmaWNhdGlvbiB0eXBlcyAqLwotI2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRSAgICAgICAgICAg
ICAgICAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfUEVFUl9BRERSX0NIQU5HRSAgICAgICAg
ICAgICAgICAgICAweDAwMDIKLSNkZWZpbmUgU0NUUF9SRU1PVEVfRVJST1IgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMwotI2RlZmluZSBTQ1RQX1NFTkRfRkFJTEVEICAgICAgICAgICAgICAg
ICAgICAgICAgMHgwMDA0Ci0jZGVmaW5lIFNDVFBfU0hVVERPV05fRVZFTlQgICAgICAgICAgICAg
ICAgICAgICAweDAwMDUKLSNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04gICAgICAg
ICAgICAgIDB4MDAwNgotLyogc2FtZSBhcyBhYm92ZSAqLwotI2RlZmluZSBTQ1RQX0FEQVBUSU9O
X0lORElDQVRJT04gICAgICAgICAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIFNDVFBfUEFSVElBTF9E
RUxJVkVSWV9FVkVOVCAgICAgICAgICAgICAweDAwMDcKLSNkZWZpbmUgU0NUUF9BVVRIRU5USUNB
VElPTl9FVkVOVCAgICAgICAgICAgICAgIDB4MDAwOAotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VF9FVkVOVCAgICAgICAgICAgICAgICAgMHgwMDA5Ci0jZGVmaW5lIFNDVFBfU0VOREVSX0RSWV9F
VkVOVCAgICAgICAgICAgICAgICAgICAweDAwMGEKLSNkZWZpbmUgU0NUUF9OT1RJRklDQVRJT05T
X1NUT1BQRURfRVZFTlQgICAgICAgIDB4MDAwYiAvKiB3ZSBkb24ndCBzZW5kIHRoaXMqLwotI2Rl
ZmluZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UICAgICAgICAgICAgICAgICAgMHgwMDBjCi0jZGVm
aW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVCAgICAgICAgICAgICAgICAweDAwMGQKLSNkZWZp
bmUgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVCAgICAgICAgICAgICAgICAgIDB4MDAwZQotLyoKLSAq
IHNvY2tldCBvcHRpb24gc3RydWN0cwotICovCi0KLXN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHsK
LQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHBfYWRkcmVzczsKLQlzY3RwX2Fzc29jX3Qgc3Bw
X2Fzc29jX2lkOwotCXVpbnQzMl90IHNwcF9oYmludGVydmFsOwotCXVpbnQzMl90IHNwcF9wYXRo
bXR1OwotCXVpbnQzMl90IHNwcF9mbGFnczsKLQl1aW50MzJfdCBzcHBfaXB2Nl9mbG93bGFiZWw7
Ci0JdWludDE2X3Qgc3BwX3BhdGhtYXhyeHQ7Ci0JdWludDhfdCBzcHBfZHNjcDsKLX07Ci0jZGVm
aW5lIHNwcF9pcHY0X3RvcyBzcHBfZHNjcAotCi0jZGVmaW5lIFNQUF9IQl9FTkFCTEUJCTB4MDAw
MDAwMDEKLSNkZWZpbmUgU1BQX0hCX0RJU0FCTEUJCTB4MDAwMDAwMDIKLSNkZWZpbmUgU1BQX0hC
X0RFTUFORAkJMHgwMDAwMDAwNAotI2RlZmluZSBTUFBfUE1UVURfRU5BQkxFCTB4MDAwMDAwMDgK
LSNkZWZpbmUgU1BQX1BNVFVEX0RJU0FCTEUJMHgwMDAwMDAxMAotI2RlZmluZSBTUFBfSEJfVElN
RV9JU19aRVJPICAgICAweDAwMDAwMDgwCi0jZGVmaW5lIFNQUF9JUFY2X0ZMT1dMQUJFTCAgICAg
IDB4MDAwMDAxMDAKLSNkZWZpbmUgU1BQX0RTQ1AgICAgICAgICAgICAgICAgMHgwMDAwMDIwMAot
I2RlZmluZSBTUFBfSVBWNF9UT1MgICAgICAgICAgICBTUFBfRFNDUAotCi1zdHJ1Y3Qgc2N0cF9w
YWRkcnRobGRzIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcHRfYWRkcmVzczsKLQlzY3Rw
X2Fzc29jX3Qgc3B0X2Fzc29jX2lkOwotCXVpbnQxNl90IHNwdF9wYXRobWF4cnh0OwotCXVpbnQx
Nl90IHNwdF9wYXRocGZ0aGxkOwotCXVpbnQxNl90IHNwdF9wYXRoY3B0aGxkOwotfTsKLQotc3Ry
dWN0IHNjdHBfcGFkZHJpbmZvIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGluZm9fYWRk
cmVzczsKLQlzY3RwX2Fzc29jX3Qgc3BpbmZvX2Fzc29jX2lkOwotCWludDMyX3Qgc3BpbmZvX3N0
YXRlOwotCXVpbnQzMl90IHNwaW5mb19jd25kOwotCXVpbnQzMl90IHNwaW5mb19zcnR0OwotCXVp
bnQzMl90IHNwaW5mb19ydG87Ci0JdWludDMyX3Qgc3BpbmZvX210dTsKLX07Ci0KLXN0cnVjdCBz
Y3RwX3J0b2luZm8gewotCXNjdHBfYXNzb2NfdCBzcnRvX2Fzc29jX2lkOwotCXVpbnQzMl90IHNy
dG9faW5pdGlhbDsKLQl1aW50MzJfdCBzcnRvX21heDsKLQl1aW50MzJfdCBzcnRvX21pbjsKLX07
Ci0KLXN0cnVjdCBzY3RwX2Fzc29jcGFyYW1zIHsKLQlzY3RwX2Fzc29jX3Qgc2Fzb2NfYXNzb2Nf
aWQ7Ci0JdWludDMyX3Qgc2Fzb2NfcGVlcl9yd25kOwotCXVpbnQzMl90IHNhc29jX2xvY2FsX3J3
bmQ7Ci0JdWludDMyX3Qgc2Fzb2NfY29va2llX2xpZmU7Ci0JdWludDE2X3Qgc2Fzb2NfYXNvY21h
eHJ4dDsKLQl1aW50MTZfdCBzYXNvY19udW1iZXJfcGVlcl9kZXN0aW5hdGlvbnM7Ci19OwotCi1z
dHJ1Y3Qgc2N0cF9zZXRwcmltIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BfYWRkcjsK
LQlzY3RwX2Fzc29jX3Qgc3NwX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NwX3BhZGRpbmdbNF07Ci19
OwotCi1zdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSB7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ug
c3NwcF9hZGRyOwotCXNjdHBfYXNzb2NfdCBzc3BwX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NwcF9w
YWRkaW5nWzRdOwotfTsKLQotc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzIHsKLQlzY3RwX2Fzc29j
X3Qgc2dldF9hc3NvY19pZDsKLQkvKiBhZGRyIGlzIGZpbGxlZCBpbiBmb3IgTiAqIHNvY2thZGRy
X3N0b3JhZ2UgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgYWRkclsxXTsKLX07Ci0KLXN0cnVjdCBzY3Rw
X3N0YXR1cyB7Ci0Jc2N0cF9hc3NvY190IHNzdGF0X2Fzc29jX2lkOwotCWludDMyX3Qgc3N0YXRf
c3RhdGU7Ci0JdWludDMyX3Qgc3N0YXRfcnduZDsKLQl1aW50MTZfdCBzc3RhdF91bmFja2RhdGE7
Ci0JdWludDE2X3Qgc3N0YXRfcGVuZGRhdGE7Ci0JdWludDE2X3Qgc3N0YXRfaW5zdHJtczsKLQl1
aW50MTZfdCBzc3RhdF9vdXRzdHJtczsKLQl1aW50MzJfdCBzc3RhdF9mcmFnbWVudGF0aW9uX3Bv
aW50OwotCXN0cnVjdCBzY3RwX3BhZGRyaW5mbyBzc3RhdF9wcmltYXJ5OwotfTsKLQotLyoKLSAq
IEFVVEhFTlRJQ0FUSU9OIHN1cHBvcnQKLSAqLwotLyogU0NUUF9BVVRIX0NIVU5LICovCi1zdHJ1
Y3Qgc2N0cF9hdXRoY2h1bmsgewotCXVpbnQ4X3Qgc2F1dGhfY2h1bms7Ci19OwotCi0vKiBTQ1RQ
X0FVVEhfS0VZICovCi1zdHJ1Y3Qgc2N0cF9hdXRoa2V5IHsKLQlzY3RwX2Fzc29jX3Qgc2NhX2Fz
c29jX2lkOwotCXVpbnQxNl90IHNjYV9rZXludW1iZXI7Ci0JdWludDE2X3Qgc2NhX2tleWxlbmd0
aDsKLQl1aW50OF90IHNjYV9rZXlbXTsKLX07Ci0KLS8qIFNDVFBfSE1BQ19JREVOVCAqLwotc3Ry
dWN0IHNjdHBfaG1hY2FsZ28gewotCXVpbnQzMl90IHNobWFjX251bWJlcl9vZl9pZGVudHM7Ci0J
dWludDE2X3Qgc2htYWNfaWRlbnRzW107Ci19OwotCi0vKiBBVVRIIGhtYWNfaWQgKi8KLSNkZWZp
bmUgU0NUUF9BVVRIX0hNQUNfSURfUlNWRAkJMHgwMDAwCi0jZGVmaW5lIFNDVFBfQVVUSF9ITUFD
X0lEX1NIQTEJCTB4MDAwMQkvKiBkZWZhdWx0LCBtYW5kYXRvcnkgKi8KLSNkZWZpbmUgU0NUUF9B
VVRIX0hNQUNfSURfU0hBMjU2CTB4MDAwMwotCi0vKiBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAvIFND
VFBfQVVUSF9ERUxFVEVfS0VZICovCi1zdHJ1Y3Qgc2N0cF9hdXRoa2V5aWQgewotCXNjdHBfYXNz
b2NfdCBzY2FjdF9hc3NvY19pZDsKLQl1aW50MTZfdCBzY2FjdF9rZXludW1iZXI7Ci19OwotCi0v
KiBTQ1RQX1BFRVJfQVVUSF9DSFVOS1MgLyBTQ1RQX0xPQ0FMX0FVVEhfQ0hVTktTICovCi1zdHJ1
Y3Qgc2N0cF9hdXRoY2h1bmtzIHsKLQlzY3RwX2Fzc29jX3QgZ2F1dGhfYXNzb2NfaWQ7Ci0JdWlu
dDMyX3QgZ2F1dGhfbnVtYmVyX29mX2NodW5rczsKLQl1aW50OF90IGdhdXRoX2NodW5rc1tdOwot
fTsKLQotc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgewotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsK
LQl1aW50MzJfdCBhc3NvY192YWx1ZTsKLX07Ci0KLXN0cnVjdCBzY3RwX2NjX29wdGlvbiB7Ci0J
aW50IG9wdGlvbjsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhaWRfdmFsdWU7Ci19OwotCi1z
dHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgewotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsKLQl1aW50
MTZfdCBzdHJlYW1faWQ7Ci0JdWludDE2X3Qgc3RyZWFtX3ZhbHVlOwotfTsKLQotc3RydWN0IHNj
dHBfYXNzb2NfaWRzIHsKLQl1aW50MzJfdCBnYWlkc19udW1iZXJfb2ZfaWRzOwotCXNjdHBfYXNz
b2NfdCBnYWlkc19hc3NvY19pZFtdOwotfTsKLQotc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKLQlz
Y3RwX2Fzc29jX3Qgc2Fja19hc3NvY19pZDsKLQl1aW50MzJfdCBzYWNrX2RlbGF5OwotCXVpbnQz
Ml90IHNhY2tfZnJlcTsKLX07Ci0KLXN0cnVjdCBzY3RwX3RpbWVvdXRzIHsKLQlzY3RwX2Fzc29j
X3Qgc3RpbW9fYXNzb2NfaWQ7Ci0JdWludDMyX3Qgc3RpbW9faW5pdDsKLQl1aW50MzJfdCBzdGlt
b19kYXRhOwotCXVpbnQzMl90IHN0aW1vX3NhY2s7Ci0JdWludDMyX3Qgc3RpbW9fc2h1dGRvd247
Ci0JdWludDMyX3Qgc3RpbW9faGVhcnRiZWF0OwotCXVpbnQzMl90IHN0aW1vX2Nvb2tpZTsKLQl1
aW50MzJfdCBzdGltb19zaHV0ZG93bmFjazsKLX07Ci0KLXN0cnVjdCBzY3RwX3VkcGVuY2FwcyB7
Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3VlX2FkZHJlc3M7Ci0Jc2N0cF9hc3NvY190IHN1
ZV9hc3NvY19pZDsKLQl1aW50MTZfdCBzdWVfcG9ydDsKLX07Ci0KLXN0cnVjdCBzY3RwX3Byc3Rh
dHVzIHsKLQlzY3RwX2Fzc29jX3Qgc3Byc3RhdF9hc3NvY19pZDsKLQl1aW50MTZfdCBzcHJzdGF0
X3NpZDsKLQl1aW50MTZfdCBzcHJzdGF0X3BvbGljeTsKLQl1aW50NjRfdCBzcHJzdGF0X2FiYW5k
b25lZF91bnNlbnQ7Ci0JdWludDY0X3Qgc3Byc3RhdF9hYmFuZG9uZWRfc2VudDsKLX07Ci0KLXN0
cnVjdCBzY3RwX2N3bmRfYXJncyB7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbmV0OwkvKiBuZXR3b3Jr
IHRvICovIC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0JdWludDMyX3QgY3duZF9uZXdfdmFsdWU7
LyogY3duZCBpbiBrICovCi0JdWludDMyX3QgcHNldWRvX2N1bWFjazsKLQl1aW50MTZfdCBpbmZs
aWdodDsJLyogZmxpZ2h0c2l6ZSBpbiBrICovCi0JdWludDE2X3QgY3duZF9hdWdtZW50OwkvKiBp
bmNyZW1lbnQgdG8gaXQgKi8KLQl1aW50OF90IG1lZXRzX3BzZXVkb19jdW1hY2s7Ci0JdWludDhf
dCBuZWVkX25ld19wc2V1ZG9fY3VtYWNrOwotCXVpbnQ4X3QgY250X2luX3NlbmQ7Ci0JdWludDhf
dCBjbnRfaW5fc3RyOwotfTsKLQotc3RydWN0IHNjdHBfYmxrX2FyZ3MgewotCXVpbnQzMl90IG9u
c2I7CQkvKiBpbiAxayBieXRlcyAqLwotCXVpbnQzMl90IHNuZGxlbjsJLyogbGVuIG9mIHNlbmQg
YmVpbmcgYXR0ZW1wdGVkICovCi0JdWludDMyX3QgcGVlcl9yd25kOwkvKiByd25kIG9mIHBlZXIg
Ki8KLQl1aW50MTZfdCBzZW5kX3NlbnRfcWNudDsvKiBjaG5rIGNudCAqLwotCXVpbnQxNl90IHN0
cmVhbV9xY250OwkvKiBjaG5rIGNudCAqLwotCXVpbnQxNl90IGNodW5rc19vbl9vcXVlOy8qIGNo
dW5rcyBvdXQgKi8KLQl1aW50MTZfdCBmbGlnaHRfc2l6ZTsgICAvKiBmbGlnaHQgc2l6ZSBpbiBr
ICovCi19OwotCi0vKgotICogTWF4IHdlIGNhbiByZXNldCBpbiBvbmUgc2V0dGluZywgbm90ZSB0
aGlzIGlzIGRpY3RhdGVkIG5vdCBieSB0aGUgZGVmaW5lCi0gKiBidXQgdGhlIHNpemUgb2YgYSBt
YnVmIGNsdXN0ZXIgc28gZG9uJ3QgY2hhbmdlIHRoaXMgZGVmaW5lIGFuZCB0aGluayB5b3UKLSAq
IGNhbiBzcGVjaWZ5IG1vcmUuIFlvdSBtdXN0IGRvIG11bHRpcGxlIHJlc2V0cyBpZiB5b3Ugd2Fu
dCB0byByZXNldCBtb3JlCi0gKiB0aGFuIFNDVFBfTUFYX0VYUExJQ0lUX1NUUl9SRVNFVC4KLSAq
LwotI2RlZmluZSBTQ1RQX01BWF9FWFBMSUNUX1NUUl9SRVNFVCAgIDEwMDAKLQotc3RydWN0IHNj
dHBfcmVzZXRfc3RyZWFtcyB7Ci0Jc2N0cF9hc3NvY190IHNyc19hc3NvY19pZDsKLQl1aW50MTZf
dCBzcnNfZmxhZ3M7Ci0JdWludDE2X3Qgc3JzX251bWJlcl9zdHJlYW1zOwkvKiAwID09IEFMTCAq
LwotCXVpbnQxNl90IHNyc19zdHJlYW1fbGlzdFtdOy8qIGxpc3QgaWYgc3RycnN0X251bV9zdHJl
YW1zIGlzIG5vdCAwICovCi19OwotCi1zdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyB7Ci0Jc2N0cF9h
c3NvY190CXNhc19hc3NvY19pZDsKLQl1aW50MTZfdAlzYXNfaW5zdHJtczsKLQl1aW50MTZfdAlz
YXNfb3V0c3RybXM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9nZXRfbm9uY2VfdmFsdWVzIHsKLQlzY3Rw
X2Fzc29jX3QgZ25fYXNzb2NfaWQ7Ci0JdWludDMyX3QgZ25fcGVlcnNfdGFnOwotCXVpbnQzMl90
IGduX2xvY2FsX3RhZzsKLX07Ci0KLS8qIERlYnVnZ2luZyBsb2dzICovCi1zdHJ1Y3Qgc2N0cF9z
dHJfbG9nIHsKLQl2b2lkICpzdGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLwotCXVpbnQzMl90
IG5fdHNuOwotCXVpbnQzMl90IGVfdHNuOwotCXVpbnQxNl90IG5fc3NlcTsKLQl1aW50MTZfdCBl
X3NzZXE7Ci0JdWludDE2X3Qgc3RybTsKLX07Ci0KLXN0cnVjdCBzY3RwX3NiX2xvZyB7Ci0Jdm9p
ZCAgKnN0Y2I7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0JdWludDMyX3Qgc29fc2JjYzsKLQl1
aW50MzJfdCBzdGNiX3NiY2M7Ci0JdWludDMyX3QgaW5jcjsKLX07Ci0KLXN0cnVjdCBzY3RwX2Zy
X2xvZyB7Ci0JdWludDMyX3QgbGFyZ2VzdF90c247Ci0JdWludDMyX3QgbGFyZ2VzdF9uZXdfdHNu
OwotCXVpbnQzMl90IHRzbjsKLX07Ci0KLXN0cnVjdCBzY3RwX2ZyX21hcCB7Ci0JdWludDMyX3Qg
YmFzZTsKLQl1aW50MzJfdCBjdW07Ci0JdWludDMyX3QgaGlnaDsKLX07Ci0KLXN0cnVjdCBzY3Rw
X3J3bmRfbG9nIHsKLQl1aW50MzJfdCByd25kOwotCXVpbnQzMl90IHNlbmRfc2l6ZTsKLQl1aW50
MzJfdCBvdmVyaGVhZDsKLQl1aW50MzJfdCBuZXdfcnduZDsKLX07Ci0KLXN0cnVjdCBzY3RwX21i
Y250X2xvZyB7Ci0JdWludDMyX3QgdG90YWxfcXVldWVfc2l6ZTsKLQl1aW50MzJfdCBzaXplX2No
YW5nZTsKLQl1aW50MzJfdCB0b3RhbF9xdWV1ZV9tYl9zaXplOwotCXVpbnQzMl90IG1iY250X2No
YW5nZTsKLX07Ci0KLXN0cnVjdCBzY3RwX3NhY2tfbG9nIHsKLQl1aW50MzJfdCBjdW1hY2s7Ci0J
dWludDMyX3Qgb2xkY3VtYWNrOwotCXVpbnQzMl90IHRzbjsKLQl1aW50MTZfdCBudW1HYXBzOwot
CXVpbnQxNl90IG51bUR1cHM7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9sb2NrX2xvZyB7Ci0Jdm9pZCAq
c29jazsgIC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0Jdm9pZCAqaW5wOyAvKiBGSVhNRTogTFA2
NCBpc3N1ZSAqLwotCXVpbnQ4X3QgdGNiX2xvY2s7Ci0JdWludDhfdCBpbnBfbG9jazsKLQl1aW50
OF90IGluZm9fbG9jazsKLQl1aW50OF90IHNvY2tfbG9jazsKLQl1aW50OF90IHNvY2tyY3ZidWZf
bG9jazsKLQl1aW50OF90IHNvY2tzbmRidWZfbG9jazsKLQl1aW50OF90IGNyZWF0ZV9sb2NrOwot
CXVpbnQ4X3QgcmVzdjsKLX07Ci0KLXN0cnVjdCBzY3RwX3J0b19sb2cgewotCXZvaWQgKiBuZXQ7
IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0JdWludDMyX3QgcnR0OwotfTsKLQotc3RydWN0IHNj
dHBfbmFnbGVfbG9nIHsKLQl2b2lkICAqc3RjYjsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KLQl1
aW50MzJfdCB0b3RhbF9mbGlnaHQ7Ci0JdWludDMyX3QgdG90YWxfaW5fcXVldWU7Ci0JdWludDE2
X3QgY291bnRfaW5fcXVldWU7Ci0JdWludDE2X3QgY291bnRfaW5fZmxpZ2h0OwotfTsKLQotc3Ry
dWN0IHNjdHBfc2J3YWtlX2xvZyB7Ci0Jdm9pZCAqc3RjYjsgLyogRklYTUU6IExQNjQgaXNzdWUg
Ki8KLQl1aW50MTZfdCBzZW5kX3E7Ci0JdWludDE2X3Qgc2VudF9xOwotCXVpbnQxNl90IGZsaWdo
dDsKLQl1aW50MTZfdCB3YWtlX2NudDsKLQl1aW50OF90IHN0cmVhbV9xY250OwkvKiBjaG5rIGNu
dCAqLwotCXVpbnQ4X3QgY2h1bmtzX29uX29xdWU7LyogY2h1bmtzIG91dCAqLwotCXVpbnQ4X3Qg
c2JmbGFnczsKLQl1aW50OF90IHNjdHBmbGFnczsKLX07Ci0KLXN0cnVjdCBzY3RwX21pc2NfaW5m
byB7Ci0JdWludDMyX3QgbG9nMTsKLQl1aW50MzJfdCBsb2cyOwotCXVpbnQzMl90IGxvZzM7Ci0J
dWludDMyX3QgbG9nNDsKLX07Ci0KLXN0cnVjdCBzY3RwX2xvZ19jbG9zaW5nIHsKLQl2b2lkICpp
bnA7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCi0Jdm9pZCAqc3RjYjsgIC8qIEZJWE1FOiBMUDY0
IGlzc3VlICovCi0JdWludDMyX3Qgc2N0cF9mbGFnczsKLQl1aW50MTZfdCAgc3RhdGU7Ci0JaW50
MTZfdCAgbG9jOwotfTsKLQotc3RydWN0IHNjdHBfbWJ1Zl9sb2cgewotCXN0cnVjdCBtYnVmICpt
cDsgLyogRklYTUU6IExQNjQgaXNzdWUgKi8KLQljYWRkcl90ICBleHQ7Ci0JY2FkZHJfdCAgZGF0
YTsKLQl1aW50MTZfdCBzaXplOwotCXVpbnQ4X3QgIHJlZmNudDsKLQl1aW50OF90ICBtYnVmX2Zs
YWdzOwotfTsKLQotc3RydWN0IHNjdHBfY3duZF9sb2cgewotCXVpbnQ2NF90IHRpbWVfZXZlbnQ7
Ci0JdWludDhfdCAgZnJvbTsKLQl1aW50OF90ICBldmVudF90eXBlOwotCXVpbnQ4X3QgIHJlc3Zb
Ml07Ci0JdW5pb24gewotCQlzdHJ1Y3Qgc2N0cF9sb2dfY2xvc2luZyBjbG9zZTsKLQkJc3RydWN0
IHNjdHBfYmxrX2FyZ3MgYmxrOwotCQlzdHJ1Y3Qgc2N0cF9jd25kX2FyZ3MgY3duZDsKLQkJc3Ry
dWN0IHNjdHBfc3RyX2xvZyBzdHJsb2c7Ci0JCXN0cnVjdCBzY3RwX2ZyX2xvZyBmcjsKLQkJc3Ry
dWN0IHNjdHBfZnJfbWFwIG1hcDsKLQkJc3RydWN0IHNjdHBfcnduZF9sb2cgcnduZDsKLQkJc3Ry
dWN0IHNjdHBfbWJjbnRfbG9nIG1iY250OwotCQlzdHJ1Y3Qgc2N0cF9zYWNrX2xvZyBzYWNrOwot
CQlzdHJ1Y3Qgc2N0cF9sb2NrX2xvZyBsb2NrOwotCQlzdHJ1Y3Qgc2N0cF9ydG9fbG9nIHJ0bzsK
LQkJc3RydWN0IHNjdHBfc2JfbG9nIHNiOwotCQlzdHJ1Y3Qgc2N0cF9uYWdsZV9sb2cgbmFnbGU7
Ci0JCXN0cnVjdCBzY3RwX3Nid2FrZV9sb2cgd2FrZTsKLQkJc3RydWN0IHNjdHBfbWJ1Zl9sb2cg
bWI7Ci0JCXN0cnVjdCBzY3RwX21pc2NfaW5mbyBtaXNjOwotCX0gICAgIHg7Ci19OwotCi1zdHJ1
Y3Qgc2N0cF9jd25kX2xvZ19yZXEgewotCWludDMyX3QgbnVtX2luX2xvZzsJCS8qIE51bWJlciBp
biBsb2cgKi8KLQlpbnQzMl90IG51bV9yZXQ7CQkvKiBOdW1iZXIgcmV0dXJuZWQgKi8KLQlpbnQz
Ml90IHN0YXJ0X2F0OwkJLyogc3RhcnQgYXQgdGhpcyBvbmUgKi8KLQlpbnQzMl90IGVuZF9hdDsJ
CSAgICAgICAgLyogZW5kIGF0IHRoaXMgb25lICovCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgbG9n
W107Ci19OwotCi1zdHJ1Y3Qgc2N0cF90aW1ldmFsIHsKLQl1aW50MzJfdCB0dl9zZWM7Ci0JdWlu
dDMyX3QgdHZfdXNlYzsKLX07Ci0KLXN0cnVjdCBzY3Rwc3RhdCB7Ci0Jc3RydWN0IHNjdHBfdGlt
ZXZhbCBzY3Rwc19kaXNjb250aW51aXR5dGltZTsgLyogc2N0cFN0YXRzIDE4IChUaW1lU3RhbXAp
ICovCi0JLyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3MyAqLwotCXVpbnQzMl90ICBzY3Rwc19j
dXJyZXN0YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDEgICAoR2F1Z2UzMikgKi8KLQl1aW50
MzJfdCAgc2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAgLyogc2N0cFN0YXRzICAyIChDb3VudGVy
MzIpICovCi0JdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRlc3RhYjsKLQl1aW50MzJfdCAgc2N0cHNf
Y29sbGlzaW9uZXN0YWI7Ci0JdWludDMyX3QgIHNjdHBzX3Bhc3NpdmVlc3RhYjsgICAgICAgIC8q
IHNjdHBTdGF0cyAgMyAoQ291bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19hYm9ydGVkOyAg
ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50ZXIzMikgKi8KLQl1aW50MzJfdCAgc2N0
cHNfc2h1dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0YXRzICA1IChDb3VudGVyMzIpICovCi0J
dWludDMyX3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAgICAgIC8qIHNjdHBTdGF0cyAgNiAoQ291
bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19jaGVja3N1bWVycm9yczsgICAgICAvKiBzY3Rw
U3RhdHMgIDcgKENvdW50ZXIzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfb3V0Y29udHJvbGNodW5r
czsgICAgLyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBzX291
dG9yZGVyY2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAgOSAoQ291bnRlcjY0KSAqLwotCXVpbnQz
Ml90ICBzY3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgMTAgKENvdW50ZXI2
NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9sY2h1bmtzOyAgICAgLyogc2N0cFN0YXRz
IDExIChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBzX2lub3JkZXJjaHVua3M7ICAgICAg
IC8qIHNjdHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19pbnVub3Jk
ZXJjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJfdCAg
c2N0cHNfZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0cFN0YXRzIDE0IChDb3VudGVyNjQpICov
Ci0JdWludDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsgICAgICAgIC8qIHNjdHBTdGF0cyAxNSAo
Q291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19vdXRwYWNrZXRzOyAgICAgICAgICAvKiBz
Y3RwU3RhdHMgMTYgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5wYWNrZXRzOyAg
ICAgICAgICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVyNjQpICovCi0KLQkvKiBpbnB1dCBzdGF0
aXN0aWNzOiAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2cGFja2V0czsgICAgICAgICAvKiB0b3Rh
bCBpbnB1dCBwYWNrZXRzICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0YWdyYW1z
OyAgICAgICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMgICAgICAqLwotCXVpbnQzMl90ICBzY3Rw
c19yZWN2cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBwYWNrZXRzIHRoYXQgaGFkIGRhdGEgKi8K
LQl1aW50MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAgICAgICAgLyogdG90YWwgaW5wdXQgU0FD
SyBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmRhdGE7ICAgICAgICAgICAgLyog
dG90YWwgaW5wdXQgREFUQSBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmR1cGRh
dGE7ICAgICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGljYXRlIERBVEEgY2h1bmtzICovCi0JdWlu
dDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIGlucHV0IEhCIGNodW5r
cyAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXRhY2s7ICAgIC8qIHRvdGFs
IGlucHV0IEhCLUFDSyBjaHVua3MgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZlY25lOyAgICAg
ICAgICAgIC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMyX3QgIHNjdHBz
X3JlY3ZhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEFVVEggY2h1bmtzICAgICovCi0J
dWludDMyX3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsgICAgIC8qIHRvdGFsIGlucHV0IGNodW5r
cyBtaXNzaW5nIEFVVEggKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxobWFjaWQ7ICAgICAg
LyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBpZHMgcmVjZWl2ZWQgKi8KLQl1aW50MzJf
dCAgc2N0cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQg
c2VjcmV0IGlkcyByZWNlaXZlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2YXV0aGZhaWxlZDsg
ICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWlsZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNf
cmVjdmV4cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIHJlY2VpdmVzIGFsbCBvbmUg
Y2h1bmsgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3NtOyAgICAgICAgLyogdG90YWwg
ZmFzdCBwYXRoIG11bHRpLXBhcnQgZGF0YSAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2bm9jcmM7
Ci0JdWludDMyX3QgIHNjdHBzX3JlY3Zzd2NyYzsKLQl1aW50MzJfdCAgc2N0cHNfcmVjdmh3Y3Jj
OwotCi0JLyogb3V0cHV0IHN0YXRpc3RpY3M6ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRwYWNr
ZXRzOyAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBwYWNrZXRzICAgICAgICovCi0JdWludDMyX3Qg
IHNjdHBzX3NlbmRzYWNrczsgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBTQUNLcyAgICAgICAg
ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRkYXRhOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1
dCBEQVRBIGNodW5rcyAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRyZXRyYW5zZGF0YTsgICAg
IC8qIHRvdGFsIG91dHB1dCByZXRyYW5zbWl0dGVkIERBVEEgY2h1bmtzICovCi0JdWludDMyX3Qg
IHNjdHBzX3NlbmRmYXN0cmV0cmFuczsgICAgIC8qIHRvdGFsIG91dHB1dCBmYXN0IHJldHJhbnNt
aXR0ZWQgREFUQSBjaHVua3MgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZG11bHRmYXN0cmV0cmFu
czsgLyogdG90YWwgRlIncyB0aGF0IGhhcHBlbmVkIG1vcmUgdGhhbiBvbmNlCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBzYW1lIGNodW5rICh1LWRl
bCBtdWx0aS1mciBhbGdvKS4KLQkJCQkJICAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGhl
YXJ0YmVhdDsgICAgICAgLyogdG90YWwgb3V0cHV0IEhCIGNodW5rcyAgICAgKi8KLQl1aW50MzJf
dCAgc2N0cHNfc2VuZGVjbmU7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IEVDTkUgY2h1bmtz
ICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIG91
dHB1dCBBVVRIIGNodW5rcyBGSVhNRSAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRlcnJvcnM7
CSAgICAgLyogaXBfb3V0cHV0IGVycm9yIGNvdW50ZXIgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2Vu
ZG5vY3JjOwotCXVpbnQzMl90ICBzY3Rwc19zZW5kc3djcmM7Ci0JdWludDMyX3QgIHNjdHBzX3Nl
bmRod2NyYzsKLQkvKiBQQ0tEUk9QUkVQIHN0YXRpc3RpY3M6ICovCi0JdWludDMyX3QgIHNjdHBz
X3BkcnBmbWJveDsgICAgICAgICAgIC8qIFBhY2tldCBkcm9wIGZyb20gbWlkZGxlIGJveCAqLwot
CXVpbnQzMl90ICBzY3Rwc19wZHJwZmVob3M7ICAgICAgICAgICAvKiBQLWRyb3AgZnJvbSBlbmQg
aG9zdCAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwbWJkYTsgICAgICAgICAgICAvKiBQLWRyb3Bz
IHdpdGggZGF0YSAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwbWJjdDsgICAgICAgICAgICAvKiBQ
LWRyb3BzLCBub24tZGF0YSwgbm9uLWVuZGhvc3QgKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGJ3
cnB0OyAgICAgICAgICAgLyogUC1kcm9wLCBub24tZW5kaG9zdCwgYmFuZHdpZHRoIHJlcCBvbmx5
ICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBjcnVwdDsgICAgICAgICAgIC8qIFAtZHJvcCwgbm90
IGVub3VnaCBmb3IgY2h1bmsgaGVhZGVyICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBuZWRhdDsg
ICAgICAgICAgIC8qIFAtZHJvcCwgbm90IGVub3VnaCBkYXRhIHRvIGNvbmZpcm0gKi8KLQl1aW50
MzJfdCAgc2N0cHNfcGRycHBkYnJrOyAgICAgICAgICAgLyogUC1kcm9wLCB3aGVyZSBwcm9jZXNz
X2NodW5rX2Ryb3Agc2FpZCBicmVhayAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwdHNubmY7ICAg
ICAgICAgICAvKiBQLWRyb3AsIGNvdWxkIG5vdCBmaW5kIFRTTiAqLwotCXVpbnQzMl90ICBzY3Rw
c19wZHJwZG5mbmQ7ICAgICAgICAgICAvKiBQLWRyb3AsIGF0dGVtcHQgcmV2ZXJzZSBUU04gbG9v
a3VwICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBkaXducDsgICAgICAgICAgIC8qIFAtZHJvcCwg
ZS1ob3N0IGNvbmZpcm1zIHplcm8tcnduZCAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwZGl6cnc7
ICAgICAgICAgICAvKiBQLWRyb3AsIG1pZGJveCBjb25maXJtcyBubyBzcGFjZSAqLwotCXVpbnQz
Ml90ICBzY3Rwc19wZHJwYmFkZDsgICAgICAgICAgICAvKiBQLWRyb3AsIGRhdGEgZGlkIG5vdCBt
YXRjaCBUU04gKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycG1hcms7ICAgICAgICAgICAgLyogUC1k
cm9wLCBUU04ncyBtYXJrZWQgZm9yIEZhc3QgUmV0cmFuICovCi0JLyogdGltZW91dHMgKi8KLQl1
aW50MzJfdCAgc2N0cHNfdGltb2l0ZXJhdG9yOyAgICAgICAgLyogTnVtYmVyIG9mIGl0ZXJhdG9y
IHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9kYXRhOyAgICAgICAg
ICAgIC8qIE51bWJlciBvZiBUMyBkYXRhIHRpbWUgb3V0cyAqLwotCXVpbnQzMl90ICBzY3Rwc190
aW1vd2luZG93cHJvYmU7ICAgICAvKiBOdW1iZXIgb2Ygd2luZG93IHByb2JlIChUMykgdGltZXJz
IHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb2luaXQ7ICAgICAgICAgICAgLyog
TnVtYmVyIG9mIElOSVQgdGltZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGlt
b3NhY2s7ICAgICAgICAgICAgLyogTnVtYmVyIG9mIHNhY2sgdGltZXJzIHRoYXQgZmlyZWQgKi8K
LQl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duOyAgICAgICAgLyogTnVtYmVyIG9mIHNodXRk
b3duIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9oZWFydGJlYXQ7
ICAgICAgIC8qIE51bWJlciBvZiBoZWFydGJlYXQgdGltZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50
MzJfdCAgc2N0cHNfdGltb2Nvb2tpZTsgICAgICAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgY29v
a2llIHRpbWVvdXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3NlY3JldDsgICAgICAg
ICAgLyogTnVtYmVyIG9mIHRpbWVzIGFuIGVuZHBvaW50IGNoYW5nZWQgaXRzIGNvb2tpZSBzZWNy
ZXQqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vcGF0aG10dTsgICAgICAgICAvKiBOdW1iZXIgb2Yg
UE1UVSB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd25h
Y2s7ICAgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gYWNrIHRpbWVycyB0aGF0IGZpcmVkICovCi0J
dWludDMyX3QgIHNjdHBzX3RpbW9zaHV0ZG93bmd1YXJkOyAgIC8qIE51bWJlciBvZiBzaHV0ZG93
biBndWFyZCB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vc3RybXJz
dDsgICAgICAgICAvKiBOdW1iZXIgb2Ygc3RyZWFtIHJlc2V0IHRpbWVycyB0aGF0IGZpcmVkICov
Ci0JdWludDMyX3QgIHNjdHBzX3RpbW9lYXJseWZyOyAgICAgICAgIC8qIE51bWJlciBvZiBlYXJs
eSBGUiB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vYXNjb25mOyAg
ICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYW4gYXNjb25mIHRpbWVyIGZpcmVkICovCi0JdWlu
dDMyX3QgIHNjdHBzX3RpbW9kZWxwcmltOwkgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIHByaW1f
ZGVsZXRlZCB0aW1lciBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vYXV0b2Nsb3NlOyAg
ICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYXV0byBjbG9zZSB0aW1lciBmaXJlZCAqLwotCXVpbnQz
Ml90ICBzY3Rwc190aW1vYXNzb2NraWxsOyAgICAgICAvKiBOdW1iZXIgb2YgYXNvYyBmcmVlIHRp
bWVycyBleHBpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9pbnBraWxsOyAgICAgICAgIC8q
IE51bWJlciBvZiBpbnAgZnJlZSB0aW1lcnMgZXhwaXJlZCAqLwotCS8qIGZvcm1lciBlYXJseSBG
UiBjb3VudGVycyAqLwotCXVpbnQzMl90ICBzY3Rwc19zcGFyZVsxMV07Ci0JLyogb3RoZXJzICov
Ci0JdWludDMyX3QgIHNjdHBzX2hkcm9wczsJICAgICAgICAgIC8qIHBhY2tldCBzaG9ydGVyIHRo
YW4gaGVhZGVyICovCi0JdWludDMyX3QgIHNjdHBzX2JhZHN1bTsJICAgICAgICAgIC8qIGNoZWNr
c3VtIGVycm9yICAgICAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX25vcG9ydDsgICAgICAg
ICAgIC8qIG5vIGVuZHBvaW50IGZvciBwb3J0ICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX2Jh
ZHZ0YWc7ICAgICAgICAgIC8qIGJhZCB2LXRhZyAgICAgICAgICAgICAgICAgICovCi0JdWludDMy
X3QgIHNjdHBzX2JhZHNpZDsgICAgICAgICAgIC8qIGJhZCBTSUQgICAgICAgICAgICAgICAgICAg
ICovCi0JdWludDMyX3QgIHNjdHBzX25vbWVtOyAgICAgICAgICAgIC8qIG5vIG1lbW9yeSAgICAg
ICAgICAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX2Zhc3RyZXRyYW5zaW5ydHQ7IC8qIG51
bWJlciBvZiBtdWx0aXBsZSBGUiBpbiBhIFJUVCB3aW5kb3cgKi8KLQl1aW50MzJfdCAgc2N0cHNf
bWFya2VkcmV0cmFuczsKLQl1aW50MzJfdCAgc2N0cHNfbmFnbGVzZW50OyAgICAgICAgLyogbmFn
bGUgYWxsb3dlZCBzZW5kaW5nICAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfbmFnbGVxdWV1ZWQ7
ICAgICAgLyogbmFnbGUgZG9lc24ndCBhbGxvdyBzZW5kaW5nICovCi0JdWludDMyX3QgIHNjdHBz
X21heGJ1cnN0cXVldWVkOyAgIC8qIG1heCBidXJzdCBkb2Vzbid0IGFsbG93IHNlbmRpbmcgKi8K
LQl1aW50MzJfdCAgc2N0cHNfaWZub21lbXF1ZXVlZDsgICAgLyogbG9vayBhaGVhZCB0ZWxscyB1
cyBubyBtZW1vcnkgaW4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KiBpbnRlcmZhY2UgcmluZyBidWZmZXIgT1Igd2UgaGFkIGEKLQkJCQkJICogc2VuZCBlcnJvciBh
bmQgYXJlIHF1ZXVpbmcgb25lIHNlbmQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3dpbmRvd3Byb2JlZDsgICAgIC8qIHRvdGFs
IG51bWJlciBvZiB3aW5kb3cgcHJvYmVzIHNlbnQgKi8KLQl1aW50MzJfdCAgc2N0cHNfbG93bGV2
ZWxlcnI7CS8qIHRvdGFsIHRpbWVzIGFuIG91dHB1dCBlcnJvciBjYXVzZXMgdXMKLQkJCQkJICog
dG8gY2xhbXAgZG93biBvbiBuZXh0IHVzZXIgc2VuZC4KLQkJCQkJICovCi0JdWludDMyX3QgIHNj
dHBzX2xvd2xldmVsZXJydXNyOwkvKiB0b3RhbCB0aW1lcyBzY3RwX3NlbmRlcnJvcnMgd2VyZSBj
YXVzZWQgZnJvbQotCQkJCQkgKiBhIHVzZXIgc2VuZCBmcm9tIGEgdXNlciBpbnZva2VkIHNlbmQg
bm90Ci0JCQkJCSAqIGEgc2FjayByZXNwb25zZQotCQkJCQkgKi8KLQl1aW50MzJfdCAgc2N0cHNf
ZGF0YWRyb3BjaGtsbXQ7CS8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byBjaHVuayBs
aW1pdCByZWFjaGVkICovCi0JdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wcnduZDsJLyogTnVtYmVy
IG9mIGluIGRhdGEgZHJvcHMgZHVlIHRvIHJ3bmQgbGltaXQgcmVhY2hlZCAqLwotCXVpbnQzMl90
ICBzY3Rwc19lY25lcmVkdWNlZGN3bmQ7ICAvKiBOdW1iZXIgb2YgdGltZXMgYSBFQ04gcmVkdWNl
ZCB0aGUgY3duZCAqLwotCXVpbnQzMl90ICBzY3Rwc192dGFnZXhwcmVzczsJLyogVXNlZCBleHBy
ZXNzIGxvb2t1cCB2aWEgdnRhZyAqLwotCXVpbnQzMl90ICBzY3Rwc192dGFnYm9ndXM7CS8qIENv
bGxpc2lvbiBpbiBleHByZXNzIGxvb2t1cC4gKi8KLQl1aW50MzJfdCAgc2N0cHNfcHJpbWFyeV9y
YW5kcnk7CS8qIE51bWJlciBvZiB0aW1lcyB0aGUgc2VuZGVyIHJhbiBkcnkgb2YgdXNlciBkYXRh
IG9uIHByaW1hcnkgKi8KLQl1aW50MzJfdCAgc2N0cHNfY210X3JhbmRyeTsgICAgICAgLyogU2Ft
ZSBmb3IgYWJvdmUgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2xvd3BhdGhfc2FjazsgICAgLyogU2Fj
a3MgdGhlIHNsb3cgd2F5ICovCi0JdWludDMyX3QgIHNjdHBzX3d1X3NhY2tzX3NlbnQ7CS8qIFdp
bmRvdyBVcGRhdGUgb25seSBzYWNrcyBzZW50ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dp
dGhfZmxhZ3M7IC8qIG51bWJlciBvZiBzZW5kcyB3aXRoIHNpbmZvX2ZsYWdzICE9MCAqLwotCXVp
bnQzMl90ICBzY3Rwc19zZW5kc193aXRoX3Vub3JkOyAvKiBudW1iZXIgb2YgdW5vcmRlcmVkIHNl
bmRzICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfZW9mOyAJLyogbnVtYmVyIG9mIHNl
bmRzIHdpdGggRU9GIGZsYWcgc2V0ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfYWJv
cnQ7IC8qIG51bWJlciBvZiBzZW5kcyB3aXRoIEFCT1JUIGZsYWcgc2V0ICovCi0JdWludDMyX3Qg
IHNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzOwkvKiBudW1iZXIgb2YgdGltZXMgcHJvdG9jb2wg
ZHJhaW4gY2FsbGVkICovCi0JdWludDMyX3QgIHNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lOyAJ
LyogbnVtYmVyIG9mIHRpbWVzIHdlIGRpZCBhIHByb3RvY29sIGRyYWluICovCi0JdWludDMyX3Qg
IHNjdHBzX3JlYWRfcGVla3M7CS8qIE51bWJlciBvZiB0aW1lcyByZWN2IHdhcyBjYWxsZWQgd2l0
aCBwZWVrICovCi0JdWludDMyX3QgIHNjdHBzX2NhY2hlZF9jaGs7ICAgICAgIC8qIE51bWJlciBv
ZiBjYWNoZWQgY2h1bmtzIHVzZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfY2FjaGVkX3N0cm1vcTsg
ICAgLyogTnVtYmVyIG9mIGNhY2hlZCBzdHJlYW0gb3EncyB1c2VkICovCi0JdWludDMyX3QgIHNj
dHBzX2xlZnRfYWJhbmRvbjsgICAgIC8qIE51bWJlciBvZiB1bnJlYWQgbWVzc2FnZXMgYWJhbmRv
bmVkIGJ5IGNsb3NlICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRfYnVyc3RfYXZvaWQ7IC8qIFVu
dXNlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19zZW5kX2N3bmRfYXZvaWQ7ICAvKiBTZW5kIGN3bmQg
ZnVsbCAgYXZvaWRhbmNlLCBhbHJlYWR5IG1heCBidXJzdCBpbmZsaWdodCB0byBuZXQgKi8KLQl1
aW50MzJfdCAgc2N0cHNfZndkdHNuX21hcF9vdmVyOyAgLyogbnVtYmVyIG9mIG1hcCBhcnJheSBv
dmVyLXJ1bnMgdmlhIGZ3ZC10c24ncyAqLwotCXVpbnQzMl90ICBzY3Rwc19xdWV1ZV91cGRfZWNu
ZTsgIC8qIE51bWJlciBvZiB0aW1lcyB3ZSBxdWV1ZWQgb3IgdXBkYXRlZCBhbiBFQ04gY2h1bmsg
b24gc2VuZCBxdWV1ZSAqLwotCXVpbnQzMl90ICBzY3Rwc19yZXNlcnZlZFszMV07ICAgICAvKiBG
dXR1cmUgQUJJIGNvbXBhdCAtIHJlbW92ZSBpbnQncyBmcm9tIGhlcmUgd2hlbiBhZGRpbmcgbmV3
ICovCi19OwotCi0jZGVmaW5lIFNDVFBfU1RBVF9JTkNSKF94KSBTQ1RQX1NUQVRfSU5DUl9CWShf
eCwxKQotI2RlZmluZSBTQ1RQX1NUQVRfREVDUihfeCkgU0NUUF9TVEFUX0RFQ1JfQlkoX3gsMSkK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQ
X1VTRV9QRVJDUFVfU1RBVCkKLSNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfQlkoX3gsX2QpIChTQ1RQ
X0JBU0VfU1RBVFNbUENQVV9HRVQoY3B1aWQpXS5feCArPSBfZCkKLSNkZWZpbmUgU0NUUF9TVEFU
X0RFQ1JfQlkoX3gsX2QpIChTQ1RQX0JBU0VfU1RBVFNbUENQVV9HRVQoY3B1aWQpXS5feCAtPSBf
ZCkKLSNlbHNlCi0jZGVmaW5lIFNDVFBfU1RBVF9JTkNSX0JZKF94LF9kKSBhdG9taWNfYWRkX2lu
dCgmU0NUUF9CQVNFX1NUQVQoX3gpLCBfZCkKLSNkZWZpbmUgU0NUUF9TVEFUX0RFQ1JfQlkoX3gs
X2QpIGF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9TVEFUKF94KSwgX2QpCi0jZW5kaWYK
LS8qIFRoZSBmb2xsb3dpbmcgbWFjcm9zIGFyZSBmb3IgaGFuZGxpbmcgTUlCIHZhbHVlcywgKi8K
LSNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKF94KSBTQ1RQX1NUQVRfSU5DUihfeCkK
LSNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KF94KSBTQ1RQX1NUQVRfSU5DUihfeCkK
LSNkZWZpbmUgU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCi0j
ZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0NPVU5URVIzMihfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCi0j
ZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0NPVU5URVI2NChfeCkgU0NUUF9TVEFUX0RFQ1IoX3gpCi0j
ZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoX3gpIFNDVFBfU1RBVF9ERUNSKF94KQotCi0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotdW5pb24gc2N0cF9zb2Nrc3RvcmUgewotI2lmIGRl
ZmluZWQoSU5FVCkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc29j
a2FkZHJfY29ubiBzY29ubjsKLQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotI2Vsc2UKLXVuaW9u
IHNjdHBfc29ja3N0b3JlIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgc2luNjsKLQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotI2VuZGlmCi0KLQotLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogQW5kIHNvbWV0aGluZyBmb3Ig
dXMgb2xkIHRpbWVycyAqLwotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwot
Ci0jaWZuZGVmIF9fQVBQTEVfXwotI2lmbmRlZiBfX1VzZXJzcGFjZV9fCi0jaWZuZGVmIG50b2hs
bAotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpCi0jaWZuZGVmIF9CU0RfU09VUkNF
Ci0jZGVmaW5lIF9CU0RfU09VUkNFCi0jZW5kaWYKLSNpbmNsdWRlIDxlbmRpYW4uaD4KLSNlbHNl
Ci0jaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgotI2VuZGlmCi0jZGVmaW5lIG50b2hsbCh4KSBiZTY0
dG9oKHgpCi0jZW5kaWYKLQotI2lmbmRlZiBodG9ubGwKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX0xpbnV4KQotI2lmbmRlZiBfQlNEX1NPVVJDRQotI2RlZmluZSBfQlNEX1NPVVJDRQotI2Vu
ZGlmCi0jaW5jbHVkZSA8ZW5kaWFuLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4K
LSNlbmRpZgotI2RlZmluZSBodG9ubGwoeCkgaHRvYmU2NCh4KQotI2VuZGlmCi0jZW5kaWYKLSNl
bmRpZgotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi0KLXN0cnVjdCB4
c2N0cF9pbnBjYiB7Ci0JdWludDMyX3QgbGFzdDsKLQl1aW50MzJfdCBmbGFnczsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDAwNDgKLQl1aW50MzJf
dCBmZWF0dXJlczsKLSNlbHNlCi0JdWludDY0X3QgZmVhdHVyZXM7Ci0jZW5kaWYKLQl1aW50MzJf
dCB0b3RhbF9zZW5kczsKLQl1aW50MzJfdCB0b3RhbF9yZWN2czsKLQl1aW50MzJfdCB0b3RhbF9u
b3NwYWNlczsKLQl1aW50MzJfdCBmcmFnbWVudGF0aW9uX3BvaW50OwotCXVpbnQxNl90IGxvY2Fs
X3BvcnQ7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAx
MTAwMDk2Ci0JdWludDE2X3QgcWxlbl9vbGQ7Ci0JdWludDE2X3QgbWF4cWxlbl9vbGQ7Ci0jZWxz
ZQotCXVpbnQxNl90IHFsZW47Ci0JdWludDE2X3QgbWF4cWxlbjsKLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19XaW5kb3dzX18pCi0JdWludDE2X3QgcGFkZGluZzsKLSNlbmRpZgotI2lmICEoZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMTUxNykpCi0Jdm9pZCAq
c29ja2V0OwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPiAxMTAwMDk2Ci0JdWludDMyX3QgcWxlbjsKLQl1aW50MzJfdCBtYXhxbGVuOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMDAw
MDQ4Ci0JdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMl07IC8qIGZ1dHVyZSAqLwotI2VsaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgKF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMTUxNykKLQl1aW50
MzJfdCBleHRyYV9wYWRkaW5nWzMxXTsgLyogZnV0dXJlICovCi0jZWxzZQotI2lmIGRlZmluZWQo
X19MUDY0X18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
PiAxMTAwMDk2Ci0JdWludDMyX3QgZXh0cmFfcGFkZGluZ1syN107IC8qIGZ1dHVyZSAqLwotI2Vs
c2UKLQl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzI5XTsgLyogZnV0dXJlICovCi0jZW5kaWYKLSNl
bHNlCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAw
MDk2Ci0JdWludDMyX3QgZXh0cmFfcGFkZGluZ1syOF07IC8qIGZ1dHVyZSAqLwotI2Vsc2UKLQl1
aW50MzJfdCBleHRyYV9wYWRkaW5nWzMwXTsgLyogZnV0dXJlICovCi0jZW5kaWYKLSNlbmRpZgot
I2VuZGlmCi19OwotCi1zdHJ1Y3QgeHNjdHBfdGNiIHsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBw
cmltYXJ5X2FkZHI7ICAgICAgLyogc2N0cEFzc29jRW50cnkgNS82ICovCi0JdWludDMyX3QgbGFz
dDsKLQl1aW50MzJfdCBoZWFydGJlYXRfaW50ZXJ2YWw7ICAgICAgICAgICAgLyogc2N0cEFzc29j
RW50cnkgNyAgICovCi0JdWludDMyX3Qgc3RhdGU7ICAgICAgICAgICAgICAgICAgICAgICAgIC8q
IHNjdHBBc3NvY0VudHJ5IDggICAqLwotCXVpbnQzMl90IGluX3N0cmVhbXM7ICAgICAgICAgICAg
ICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSA5ICAgKi8KLQl1aW50MzJfdCBvdXRfc3RyZWFtczsg
ICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTAgICovCi0JdWludDMyX3QgbWF4
X25yX3JldHJhbnM7ICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDExICAqLwotCXVp
bnQzMl90IHByaW1hcnlfcHJvY2VzczsgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAx
MiAgKi8KLQl1aW50MzJfdCBUMV9leHBpcmVyaWVzOyAgICAgICAgICAgICAgICAgLyogc2N0cEFz
c29jRW50cnkgMTMgICovCi0JdWludDMyX3QgVDJfZXhwaXJlcmllczsgICAgICAgICAgICAgICAg
IC8qIHNjdHBBc3NvY0VudHJ5IDE0ICAqLwotCXVpbnQzMl90IHJldHJhbnNtaXR0ZWRfdHNuczsg
ICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxNSAgKi8KLQl1aW50MzJfdCB0b3RhbF9zZW5k
czsKLQl1aW50MzJfdCB0b3RhbF9yZWN2czsKLQl1aW50MzJfdCBsb2NhbF90YWc7Ci0JdWludDMy
X3QgcmVtb3RlX3RhZzsKLQl1aW50MzJfdCBpbml0aWFsX3RzbjsKLQl1aW50MzJfdCBoaWdoZXN0
X3RzbjsKLQl1aW50MzJfdCBjdW11bGF0aXZlX3RzbjsKLQl1aW50MzJfdCBjdW11bGF0aXZlX3Rz
bl9hY2s7Ci0JdWludDMyX3QgbXR1OwotCXVpbnQzMl90IHJlZmNudDsKLQl1aW50MTZfdCBsb2Nh
bF9wb3J0OyAgICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMyAgICovCi0JdWlu
dDE2X3QgcmVtb3RlX3BvcnQ7ICAgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDQg
ICAqLwotCXN0cnVjdCBzY3RwX3RpbWV2YWwgc3RhcnRfdGltZTsgICAgICAgICAvKiBzY3RwQXNz
b2NFbnRyeSAxNiAgKi8KLQlzdHJ1Y3Qgc2N0cF90aW1ldmFsIGRpc2NvbnRpbnVpdHlfdGltZTsg
Lyogc2N0cEFzc29jRW50cnkgMTcgICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQl1aW50MzJfdCBwZWVyc19yd25kOwotCXNjdHBf
YXNzb2NfdCBhc3NvY19pZDsgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxICAg
Ki8KLQl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzMyXTsgICAgICAgICAgICAgIC8qIGZ1dHVyZSAq
LwotI2Vsc2UKLSNlbmRpZgotI2Vsc2UKLQl1aW50MzJfdCBwZWVyc19yd25kOwotCXNjdHBfYXNz
b2NfdCBhc3NvY19pZDsgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxICAgKi8K
LQl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzMyXTsgICAgICAgICAgICAgIC8qIGZ1dHVyZSAqLwot
I2VuZGlmCi19OwotCi1zdHJ1Y3QgeHNjdHBfbGFkZHIgewotCXVuaW9uIHNjdHBfc29ja3N0b3Jl
IGFkZHJlc3M7ICAgIC8qIHNjdHBBc3NvY0xvY2FsQWRkckVudHJ5IDEvMiAqLwotCXVpbnQzMl90
IGxhc3Q7Ci0Jc3RydWN0IHNjdHBfdGltZXZhbCBzdGFydF90aW1lOyAgLyogc2N0cEFzc29jTG9j
YWxBZGRyRW50cnkgMyAgICovCi0JdWludDMyX3QgZXh0cmFfcGFkZGluZ1szMl07ICAgICAgIC8q
IGZ1dHVyZSAqLwotfTsKLQotc3RydWN0IHhzY3RwX3JhZGRyIHsKLQl1bmlvbiBzY3RwX3NvY2tz
dG9yZSBhZGRyZXNzOyAgICAgIC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50cnkgMS8yICovCi0JdWlu
dDMyX3QgbGFzdDsKLQl1aW50MzJfdCBydG87ICAgICAgICAgICAgICAgICAgICAgIC8qIHNjdHBB
c3NvY0xvY2FsUmVtRW50cnkgNSAgICovCi0JdWludDMyX3QgbWF4X3BhdGhfcnR4OyAgICAgICAg
ICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDYgICAqLwotCXVpbnQzMl90IHJ0eDsgICAg
ICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA3ICAgKi8KLQl1aW50
MzJfdCBlcnJvcl9jb3VudGVyOyAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCi0JdWludDMyX3QgY3duZDsgICAgICAgICAgICAgICAgICAgICAvKiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLwotCXVpbnQzMl90IGZsaWdodF9zaXplOyAgICAgICAgICAgICAg
LyogICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQl1aW50MzJfdCBtdHU7ICAgICAgICAg
ICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDhfdCBh
Y3RpdmU7ICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDMgICAq
LwotCXVpbnQ4X3QgY29uZmlybWVkOyAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLQl1aW50OF90IGhlYXJ0YmVhdF9lbmFibGVkOyAgICAgICAgIC8qIHNj
dHBBc3NvY0xvY2FsUmVtRW50cnkgNCAgICovCi0JdWludDhfdCBwb3RlbnRpYWxseV9mYWlsZWQ7
Ci0Jc3RydWN0IHNjdHBfdGltZXZhbCBzdGFydF90aW1lOyAgICAvKiBzY3RwQXNzb2NMb2NhbFJl
bUVudHJ5IDggICAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAwMDAwCi0JdWludDMyX3QgcnR0OwotCXVpbnQzMl90IGhlYXJ0YmVhdF9pbnRl
cnZhbDsKLQl1aW50MzJfdCBzc3RocmVzaDsKLQl1aW50MzJfdCBleHRyYV9wYWRkaW5nWzMwXTsg
ICAgICAgICAgICAgIC8qIGZ1dHVyZSAqLwotI2VuZGlmCi0jZWxzZQotCXVpbnQzMl90IHJ0dDsK
LQl1aW50MzJfdCBoZWFydGJlYXRfaW50ZXJ2YWw7Ci0JdWludDMyX3Qgc3N0aHJlc2g7Ci0JdWlu
dDMyX3QgZXh0cmFfcGFkZGluZ1szMF07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KLSNlbmRp
ZgotfTsKLQotI2RlZmluZSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUgMzAwMDAKLSNkZWZpbmUgU0NU
UF9UUkFDRV9QQVJBTVMgNiAgICAgICAgICAgICAgICAvKiBUaGlzIG51bWJlciBNVVNUIGJlIGV2
ZW4gICAqLwotCi1zdHJ1Y3Qgc2N0cF9sb2dfZW50cnkgewotCXVpbnQ2NF90IHRpbWVzdGFtcDsK
LQl1aW50MzJfdCBzdWJzeXM7Ci0JdWludDMyX3QgcGFkZGluZzsKLQl1aW50MzJfdCBwYXJhbXNb
U0NUUF9UUkFDRV9QQVJBTVNdOwotfTsKLQotc3RydWN0IHNjdHBfbG9nIHsKLQlzdHJ1Y3Qgc2N0
cF9sb2dfZW50cnkgZW50cnlbU0NUUF9NQVhfTE9HR0lOR19TSVpFXTsKLQl1aW50MzJfdCBpbmRl
eDsKLQl1aW50MzJfdCBwYWRkaW5nOwotfTsKLQotLyoKLSAqIEtlcm5lbCBkZWZpbmVkIGZvciBz
Y3RwX3NlbmQKLSAqLwotI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQotaW50Ci1zY3RwX2xvd2VyX3Nvc2VuZChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgc3RydWN0IHVpbyAqdWlvLAotI2lmIGRlZmluZWQoX19Q
YW5kYV9fKQotICAgIHBha2hhbmRsZV90eXBlIGlfcGFrLAotICAgIHBha2hhbmRsZV90eXBlIGlf
Y29udHJvbCwKLSNlbHNlCi0gICAgc3RydWN0IG1idWYgKmlfcGFrLAotICAgIHN0cnVjdCBtYnVm
ICpjb250cm9sLAotI2VuZGlmCi0gICAgaW50IGZsYWdzLAotICAgIHN0cnVjdCBzY3RwX3NuZHJj
dmluZm8gKnNyY3YKLSNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDUwMDAwMAotICAgICxzdHJ1Y3QgdGhyZWFkICpwCi0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19f
KQotICAgICwgUEtUSFJFQUQgcAotI2Vsc2UKLSAgICAsc3RydWN0IHByb2MgKnAKLSNlbmRpZgot
I2VuZGlmCi0pOwotCi1pbnQKLXNjdHBfc29yZWN2bXNnKHN0cnVjdCBzb2NrZXQgKnNvLAotICAg
IHN0cnVjdCB1aW8gKnVpbywKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSAgICBwYXJ0aWNsZXR5
cGUgKiptcCwKLSNlbHNlCi0gICAgc3RydWN0IG1idWYgKiptcCwKLSNlbmRpZgotICAgIHN0cnVj
dCBzb2NrYWRkciAqZnJvbSwKLSAgICBpbnQgZnJvbWxlbiwKLSAgICBpbnQgKm1zZ19mbGFncywK
LSAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKLSAgICBpbnQgZmlsbGluZ19zaW5m
byk7Ci0jZW5kaWYKLQotLyoKLSAqIEFQSSBzeXN0ZW0gY2FsbHMKLSAqLwotI2lmICEoZGVmaW5l
ZChfS0VSTkVMKSkgJiYgIShkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQotCi1fX0JFR0lOX0RFQ0xT
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAK
LWludAlzY3RwX3BlZWxvZmYgX19QKChpbnQsIHNjdHBfYXNzb2NfdCkpOwotaW50CXNjdHBfYmlu
ZHggX19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIGludCkpOwotaW50CXNjdHBfY29u
bmVjdHggX19QKChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBpbnQsIHNjdHBfYXNzb2Nf
dCAqKSk7Ci1pbnQJc2N0cF9nZXRhZGRybGVuIF9fUCgoc2FfZmFtaWx5X3QpKTsKLWludAlzY3Rw
X2dldHBhZGRycyBfX1AoKGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopKTsK
LXZvaWQJc2N0cF9mcmVlcGFkZHJzIF9fUCgoc3RydWN0IHNvY2thZGRyICopKTsKLWludAlzY3Rw
X2dldGxhZGRycyBfX1AoKGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopKTsK
LXZvaWQJc2N0cF9mcmVlbGFkZHJzIF9fUCgoc3RydWN0IHNvY2thZGRyICopKTsKLWludAlzY3Rw
X29wdF9pbmZvIF9fUCgoaW50LCBzY3RwX2Fzc29jX3QsIGludCwgdm9pZCAqLCBzb2NrbGVuX3Qg
KikpOwotCi0vKiBkZXByZWNhdGVkICovCi1zc2l6ZV90CXNjdHBfc2VuZG1zZyBfX1AoKGludCwg
Y29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBzb2Nr
bGVuX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50MzJfdCkp
OwotCi0vKiBkZXByZWNhdGVkICovCi1zc2l6ZV90CXNjdHBfc2VuZCBfX1AoKGludCwgY29uc3Qg
dm9pZCAqLCBzaXplX3QsCi0JICAgIGNvbnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50
KSk7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0cF9zZW5keCBfX1AoKGludCwgY29u
c3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBpbnQsIHN0cnVjdCBz
Y3RwX3NuZHJjdmluZm8gKiwgaW50KSk7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0
cF9zZW5kbXNneCBfX1AoKGludCBzZCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2Nr
YWRkciAqLAotCSAgICBpbnQsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQzMl90
LCB1aW50MzJfdCkpOwotCi1zY3RwX2Fzc29jX3QJc2N0cF9nZXRhc3NvY2lkIF9fUCgoaW50LCBz
dHJ1Y3Qgc29ja2FkZHIgKikpOwotCi0vKiBkZXByZWNhdGVkICovCi1zc2l6ZV90CXNjdHBfcmVj
dm1zZyBfX1AoKGludCwgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVu
X3QgKiwKLQkgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqLCBpbnQgKikpOwotCi1zc2l6ZV90
CXNjdHBfc2VuZHYgX19QKChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVjdCBz
b2NrYWRkciAqLAotCSAgICBpbnQsIHZvaWQgKiwgc29ja2xlbl90LCB1bnNpZ25lZCBpbnQsIGlu
dCkpOwotCi1zc2l6ZV90CXNjdHBfcmVjdnYgX19QKChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAq
LCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QgKiwgdm9pZCAqLCBzb2Nr
bGVuX3QgKiwgdW5zaWduZWQgaW50ICosIGludCAqKSk7Ci0jZWxzZQotaW50CXNjdHBfcGVlbG9m
ZihpbnQsIHNjdHBfYXNzb2NfdCk7Ci1pbnQJc2N0cF9iaW5keChpbnQsIHN0cnVjdCBzb2NrYWRk
ciAqLCBpbnQsIGludCk7Ci1pbnQJc2N0cF9jb25uZWN0eChpbnQsIGNvbnN0IHN0cnVjdCBzb2Nr
YWRkciAqLCBpbnQsIHNjdHBfYXNzb2NfdCAqKTsKLWludAlzY3RwX2dldGFkZHJsZW4oc2FfZmFt
aWx5X3QpOwotaW50CXNjdHBfZ2V0cGFkZHJzKGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29j
a2FkZHIgKiopOwotdm9pZAlzY3RwX2ZyZWVwYWRkcnMoc3RydWN0IHNvY2thZGRyICopOwotaW50
CXNjdHBfZ2V0bGFkZHJzKGludCwgc2N0cF9hc3NvY190LCBzdHJ1Y3Qgc29ja2FkZHIgKiopOwot
dm9pZAlzY3RwX2ZyZWVsYWRkcnMoc3RydWN0IHNvY2thZGRyICopOwotaW50CXNjdHBfb3B0X2lu
Zm8oaW50LCBzY3RwX2Fzc29jX3QsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7Ci0KLS8qIGRl
cHJlY2F0ZWQgKi8KLXNzaXplX3QJc2N0cF9zZW5kbXNnKGludCwgY29uc3Qgdm9pZCAqLCBzaXpl
X3QsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QsIHVpbnQzMl90LCB1
aW50MzJfdCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci0KLS8qIGRlcHJlY2F0ZWQg
Ki8KLXNzaXplX3QJc2N0cF9zZW5kKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsCi0JICAgIGNv
bnN0IHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50KTsKLQotLyogZGVwcmVjYXRlZCAqLwot
c3NpemVfdAlzY3RwX3NlbmR4KGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2Nr
YWRkciAqLAotCSAgICBpbnQsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50KTsKLQotLyog
ZGVwcmVjYXRlZCAqLwotc3NpemVfdAlzY3RwX3NlbmRtc2d4KGludCBzZCwgY29uc3Qgdm9pZCAq
LCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBpbnQsIHVpbnQzMl90LCB1aW50MzJf
dCwgdWludDE2X3QsIHVpbnQzMl90LCB1aW50MzJfdCk7Ci0KLXNjdHBfYXNzb2NfdAlzY3RwX2dl
dGFzc29jaWQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLS8qIGRlcHJlY2F0ZWQgKi8KLXNz
aXplX3QJc2N0cF9yZWN2bXNnKGludCwgdm9pZCAqLCBzaXplX3QsIHN0cnVjdCBzb2NrYWRkciAq
LCBzb2NrbGVuX3QgKiwKLQkgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqLCBpbnQgKik7Ci0K
LXNzaXplX3QJc2N0cF9zZW5kdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsIHN0cnVj
dCBzb2NrYWRkciAqLAotCSAgICBpbnQsIHZvaWQgKiwgc29ja2xlbl90LCB1bnNpZ25lZCBpbnQs
IGludCk7Ci0KLXNzaXplX3QJc2N0cF9yZWN2dihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBp
bnQsIHN0cnVjdCBzb2NrYWRkciAqLAotCSAgICBzb2NrbGVuX3QgKiwgdm9pZCAqLCBzb2NrbGVu
X3QgKiwgdW5zaWduZWQgaW50ICosIGludCAqKTsKLSNlbmRpZgotX19FTkRfREVDTFMKLQotI2Vu
ZGlmCQkJCS8qICFfS0VSTkVMICovCi0jZW5kaWYJCQkJLyogIV9fc2N0cF91aW9faF9fICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMgYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZm
Y2MwOGQxNmQzMzdkOTllMTJiNDU3N2IyYTA4YjI3NTM0YmFiNjEuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzZXJz
cGFjZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzY0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0
IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAx
MiBNaWNoYWVsIFR1ZXhlbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S
UyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0g
KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
Ci0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotCi0jaWZk
ZWYgX1dJTjMyCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgotI2luY2x1ZGUgPHN5cy90
aW1lYi5oPgotI2luY2x1ZGUgPGlwaGxwYXBpLmg+Ci0jcHJhZ21hIGNvbW1lbnQobGliLCAiSVBI
TFBBUEkubGliIikKLSNlbmRpZgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2Uu
aD4KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0jaW5jbHVkZSA8cHRocmVh
ZF9ucC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2lu
Y2x1ZGUgPHN5cy9wcmN0bC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCi0vKiBBZGFwdGVyIHRvIHRyYW5zbGF0ZSBVbml4IHRocmVhZCBzdGFydCByb3V0
aW5lcyB0byBXaW5kb3dzIHRocmVhZCBzdGFydAotICogcm91dGluZXMuCi0gKi8KLXN0YXRpYyBE
V09SRCBXSU5BUEkKLXNjdHBfY3JlYXRlX3RocmVhZF9hZGFwdGVyKHZvaWQgKmFyZykgewotCXN0
YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0aW5lID0gKHN0YXJ0X3JvdXRpbmVfdClhcmc7Ci0JcmV0
dXJuIHN0YXJ0X3JvdXRpbmUoTlVMTCkgPT0gTlVMTDsKLX0KLQotaW50Ci1zY3RwX3VzZXJzcGFj
ZV90aHJlYWRfY3JlYXRlKHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVf
dCBzdGFydF9yb3V0aW5lKQotewotCSp0aHJlYWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgc2N0
cF9jcmVhdGVfdGhyZWFkX2FkYXB0ZXIsCi0JCQkgICAgICAgKHZvaWQgKilzdGFydF9yb3V0aW5l
LCAwLCBOVUxMKTsKLQlpZiAoKnRocmVhZCA9PSBOVUxMKQotCQlyZXR1cm4gR2V0TGFzdEVycm9y
KCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotaW50Ci1zY3RwX3VzZXJzcGFjZV90aHJlYWRfY3Jl
YXRlKHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRpbmVfdCBzdGFydF9yb3V0
aW5lKQotewotCXJldHVybiBwdGhyZWFkX2NyZWF0ZSh0aHJlYWQsIE5VTEwsIHN0YXJ0X3JvdXRp
bmUsIE5VTEwpOwotfQotI2VuZGlmCi0KLXZvaWQKLXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRu
YW1lKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3
aW4pCi0JcHRocmVhZF9zZXRuYW1lX25wKG5hbWUpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19MaW51eCkKLQlwcmN0bChQUl9TRVRfTkFNRSwgbmFtZSk7Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0JcHRocmVhZF9zZXRfbmFtZV9ucChw
dGhyZWFkX3NlbGYoKSwgbmFtZSk7Ci0jZW5kaWYKLX0KLQotI2lmICFkZWZpbmVkKF9XSU4zMikg
JiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLWludAotc2N0cF91c2Vyc3BhY2VfZ2V0
X210dV9mcm9tX2lmbih1aW50MzJfdCBpZl9pbmRleCwgaW50IGFmKQotewotCXN0cnVjdCBpZnJl
cSBpZnI7Ci0JaW50IGZkOwotCi0JbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEp
KTsKLQlpZiAoaWZfaW5kZXh0b25hbWUoaWZfaW5kZXgsIGlmci5pZnJfbmFtZSkgIT0gTlVMTCkg
ewotCQkvKiBUT0RPIGNhbiBJIHVzZSB0aGUgcmF3IHNvY2tldCBoZXJlIGFuZCBub3QgaGF2ZSB0
byBvcGVuIGEgbmV3IG9uZSB3aXRoIGVhY2ggcXVlcnk/ICovCi0JCWlmICgoZmQgPSBzb2NrZXQo
YWYsIFNPQ0tfREdSQU0sIDApKSA8IDApCi0JCQlyZXR1cm4gKDApOwotCQlpZiAoaW9jdGwoZmQs
IFNJT0NHSUZNVFUsICZpZnIpIDwgMCkgewotCQkJY2xvc2UoZmQpOwotCQkJcmV0dXJuICgwKTsK
LQkJfQotCQljbG9zZShmZCk7Ci0JCXJldHVybiBpZnIuaWZyX210dTsKLQl9IGVsc2UgewotCQly
ZXR1cm4gKDApOwotCX0KLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19O
YUNsKQotaW50Ci1zY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2lu
ZGV4LCBpbnQgYWYpCi17Ci0JcmV0dXJuIDEyODA7Ci19Ci0jZW5kaWYKLQotI2lmZGVmIF9XSU4z
MgotaW50Ci1zY3RwX3VzZXJzcGFjZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4
LCBpbnQgYWYpCi17Ci0JUElQX0FEQVBURVJfQUREUkVTU0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFw
dDsKLQlEV09SRCBBZGFwdGVyQWRkcnNTaXplLCBFcnI7Ci0JaW50IHJldDsKLQotCXJldCA9IDA7
Ci0JQWRhcHRlckFkZHJzU2l6ZSA9IDA7Ci0JcEFkYXB0ZXJBZGRycyA9IE5VTEw7Ci0JaWYgKChF
cnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIE5VTEwsICZBZGFw
dGVyQWRkcnNTaXplKSkgIT0gMCkgewotCQlpZiAoKEVyciAhPSBFUlJPUl9CVUZGRVJfT1ZFUkZM
T1cpICYmIChFcnIgIT0gRVJST1JfSU5TVUZGSUNJRU5UX0JVRkZFUikpIHsKLQkJCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3NlcygpIHNpemluZyBmYWlsZWQgd2l0
aCBlcnJvciBjb2RlICVkLCBBZGFwdGVyQWRkcnNTaXplID0gJWRcbiIsIEVyciwgQWRhcHRlckFk
ZHJzU2l6ZSk7Ci0JCQlyZXQgPSAtMTsKLQkJCWdvdG8gY2xlYW51cDsKLQkJfQotCX0KLQlpZiAo
KHBBZGFwdGVyQWRkcnMgPSAoUElQX0FEQVBURVJfQUREUkVTU0VTKSBHbG9iYWxBbGxvYyhHUFRS
LCBBZGFwdGVyQWRkcnNTaXplKSkgPT0gTlVMTCkgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNS
LCAiTWVtb3J5IGFsbG9jYXRpb24gZXJyb3IhXG4iKTsKLQkJcmV0ID0gLTE7Ci0JCWdvdG8gY2xl
YW51cDsKLQl9Ci0JaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAs
IE5VTEwsIHBBZGFwdGVyQWRkcnMsICZBZGFwdGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VT
UykgewotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiR2V0QWRhcHRlcnNBZGRyZXNzZXMoKSBm
YWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOwotCQlyZXQgPSAtMTsKLQkJZ290byBj
bGVhbnVwOwotCX0KLQlmb3IgKHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0
ID0gcEFkYXB0LT5OZXh0KSB7Ci0JCWlmIChwQWRhcHQtPklmSW5kZXggPT0gaWZfaW5kZXgpIHsK
LQkJCXJldCA9IHBBZGFwdC0+TXR1OwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci1jbGVhbnVwOgotCWlm
IChwQWRhcHRlckFkZHJzICE9IE5VTEwpIHsKLQkJR2xvYmFsRnJlZShwQWRhcHRlckFkZHJzKTsK
LQl9Ci0JcmV0dXJuIChyZXQpOwotfQotCi12b2lkCi1nZXR3aW50aW1lb2ZkYXkoc3RydWN0IHRp
bWV2YWwgKnR2KQotewotCXN0cnVjdCB0aW1lYiB0YjsKLQotCWZ0aW1lKCZ0Yik7Ci0JdHYtPnR2
X3NlYyA9IChsb25nKXRiLnRpbWU7Ci0JdHYtPnR2X3VzZWMgPSAobG9uZykodGIubWlsbGl0bSkg
KiAxMDAwTDsKLX0KLQotaW50Ci13aW5faWZfbmFtZXRvaW5kZXgoY29uc3QgY2hhciAqaWZuYW1l
KQotewotCUlQX0FEQVBURVJfQUREUkVTU0VTICphZGRyZXNzZXMsICphZGRyOwotCVVMT05HIHN0
YXR1cywgc2l6ZTsKLQlpbnQgaW5kZXggPSAwOwotCi0JaWYgKCFpZm5hbWUpIHsKLQkJcmV0dXJu
IDA7Ci0JfQotCi0Jc2l6ZSA9IDA7Ci0Jc3RhdHVzID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZf
VU5TUEVDLCAwLCBOVUxMLCBOVUxMLCAmc2l6ZSk7Ci0JaWYgKHN0YXR1cyAhPSBFUlJPUl9CVUZG
RVJfT1ZFUkZMT1cpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCWFkZHJlc3NlcyA9IG1hbGxvYyhzaXpl
KTsKLQlzdGF0dXMgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9VTlNQRUMsIDAsIE5VTEwsIGFk
ZHJlc3NlcywgJnNpemUpOwotCWlmIChzdGF0dXMgPT0gRVJST1JfU1VDQ0VTUykgewotCQlmb3Ig
KGFkZHIgPSBhZGRyZXNzZXM7IGFkZHI7IGFkZHIgPSBhZGRyLT5OZXh0KSB7Ci0JCQlpZiAoYWRk
ci0+QWRhcHRlck5hbWUgJiYgIXN0cmNtcChpZm5hbWUsIGFkZHItPkFkYXB0ZXJOYW1lKSkgewot
CQkJCWluZGV4ID0gYWRkci0+SWZJbmRleDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQot
CWZyZWUoYWRkcmVzc2VzKTsKLQlyZXR1cm4gaW5kZXg7Ci19Ci0KLSNpZiBXSU5WRVIgPCAweDA2
MDAKLS8qIFRoZXNlIGZ1bmN0aW9ucyBhcmUgd3JpdHRlbiBiYXNlZCBvbiB0aGUgY29kZSBhdAot
ICogaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvd2luMzItY3YtMS5odG1sCi0gKiBU
aGVyZWZvcmUsIGZvciB0aGUgcmVzdCBvZiB0aGUgZmlsZSB0aGUgZm9sbG93aW5nIGFwcGxpZXM6
Ci0gKgotICoKLSAqIENvcHlyaWdodCBhbmQgTGljZW5zaW5nIEluZm9ybWF0aW9uIGZvciBBQ0Uo
VE0pLCBUQU8oVE0pLCBDSUFPKFRNKSwKLSAqIERBbkNFKFRNKSwgYW5kIENvU01JQyhUTSkKLSAq
Ci0gKiBbMV1BQ0UoVE0pLCBbMl1UQU8oVE0pLCBbM11DSUFPKFRNKSwgREFuQ0UoVE0pLCBhbmQg
WzRdQ29TTUlDKFRNKQotICogKGhlbmNlZm9ydGggcmVmZXJyZWQgdG8gYXMgIkRPQyBzb2Z0d2Fy
ZSIpIGFyZSBjb3B5cmlnaHRlZCBieQotICogWzVdRG91Z2xhcyBDLiBTY2htaWR0IGFuZCBoaXMg
WzZdcmVzZWFyY2ggZ3JvdXAgYXQgWzddV2FzaGluZ3RvbgotICogVW5pdmVyc2l0eSwgWzhdVW5p
dmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBJcnZpbmUsIGFuZCBbOV1WYW5kZXJiaWx0Ci0gKiBVbml2
ZXJzaXR5LCBDb3B5cmlnaHQgKGMpIDE5OTMtMjAxMiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4gU2lu
Y2UgRE9DCi0gKiBzb2Z0d2FyZSBpcyBvcGVuLXNvdXJjZSwgZnJlZWx5IGF2YWlsYWJsZSBzb2Z0
d2FyZSwgeW91IGFyZSBmcmVlIHRvCi0gKiB1c2UsIG1vZGlmeSwgY29weSwgYW5kIGRpc3RyaWJ1
dGUtLXBlcnBldHVhbGx5IGFuZCBpcnJldm9jYWJseS0tdGhlCi0gKiBET0Mgc29mdHdhcmUgc291
cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIHByb2R1Y2VkIGZyb20gdGhlIHNvdXJjZSwgYXMKLSAq
IHdlbGwgYXMgY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNv
ZnR3YXJlLiBZb3UKLSAqIG11c3QsIGhvd2V2ZXIsIGluY2x1ZGUgdGhpcyBjb3B5cmlnaHQgc3Rh
dGVtZW50IGFsb25nIHdpdGggYW55IGNvZGUKLSAqIGJ1aWx0IHVzaW5nIERPQyBzb2Z0d2FyZSB0
aGF0IHlvdSByZWxlYXNlLiBObyBjb3B5cmlnaHQgc3RhdGVtZW50Ci0gKiBuZWVkcyB0byBiZSBw
cm92aWRlZCBpZiB5b3UganVzdCBzaGlwIGJpbmFyeSBleGVjdXRhYmxlcyBvZiB5b3VyCi0gKiBz
b2Z0d2FyZSBwcm9kdWN0cy4KLSAqCi0gKiBZb3UgY2FuIHVzZSBET0Mgc29mdHdhcmUgaW4gY29t
bWVyY2lhbCBhbmQvb3IgYmluYXJ5IHNvZnR3YXJlIHJlbGVhc2VzCi0gKiBhbmQgYXJlIHVuZGVy
IG5vIG9ibGlnYXRpb24gdG8gcmVkaXN0cmlidXRlIGFueSBvZiB5b3VyIHNvdXJjZSBjb2RlCi0g
KiB0aGF0IGlzIGJ1aWx0IHVzaW5nIERPQyBzb2Z0d2FyZS4gTm90ZSwgaG93ZXZlciwgdGhhdCB5
b3UgbWF5IG5vdAotICogbWlzYXBwcm9wcmlhdGUgdGhlIERPQyBzb2Z0d2FyZSBjb2RlLCBzdWNo
IGFzIGNvcHlyaWdodGluZyBpdCB5b3Vyc2VsZgotICogb3IgY2xhaW1pbmcgYXV0aG9yc2hpcCBv
ZiB0aGUgRE9DIHNvZnR3YXJlIGNvZGUsIGluIGEgd2F5IHRoYXQgd2lsbAotICogcHJldmVudCBE
T0Mgc29mdHdhcmUgZnJvbSBiZWluZyBkaXN0cmlidXRlZCBmcmVlbHkgdXNpbmcgYW4KLSAqIG9w
ZW4tc291cmNlIGRldmVsb3BtZW50IG1vZGVsLiBZb3UgbmVlZG4ndCBpbmZvcm0gYW55b25lIHRo
YXQgeW91J3JlCi0gKiB1c2luZyBET0Mgc29mdHdhcmUgaW4geW91ciBzb2Z0d2FyZSwgdGhvdWdo
IHdlIGVuY291cmFnZSB5b3UgdG8gbGV0Ci0gKiBbMTBddXMga25vdyBzbyB3ZSBjYW4gcHJvbW90
ZSB5b3VyIHByb2plY3QgaW4gdGhlIFsxMV1ET0Mgc29mdHdhcmUKLSAqIHN1Y2Nlc3Mgc3Rvcmll
cy4KLSAqCi0gKiBUaGUgWzEyXUFDRSwgWzEzXVRBTywgWzE0XUNJQU8sIFsxNV1EQW5DRSwgYW5k
IFsxNl1Db1NNSUMgd2ViIHNpdGVzCi0gKiBhcmUgbWFpbnRhaW5lZCBieSB0aGUgWzE3XURPQyBH
cm91cCBhdCB0aGUgWzE4XUluc3RpdHV0ZSBmb3IgU29mdHdhcmUKLSAqIEludGVncmF0ZWQgU3lz
dGVtcyAoSVNJUykgYW5kIHRoZSBbMTldQ2VudGVyIGZvciBEaXN0cmlidXRlZCBPYmplY3QKLSAq
IENvbXB1dGluZyBvZiBXYXNoaW5ndG9uIFVuaXZlcnNpdHksIFN0LiBMb3VpcyBmb3IgdGhlIGRl
dmVsb3BtZW50IG9mCi0gKiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBhcyBwYXJ0IG9mIHRoZSBvcGVu
LXNvdXJjZSBzb2Z0d2FyZSBjb21tdW5pdHkuCi0gKiBTdWJtaXNzaW9ucyBhcmUgcHJvdmlkZWQg
YnkgdGhlIHN1Ym1pdHRlciBgYGFzIGlzJycgd2l0aCBubyB3YXJyYW50aWVzCi0gKiB3aGF0c29l
dmVyLCBpbmNsdWRpbmcgYW55IHdhcnJhbnR5IG9mIG1lcmNoYW50YWJpbGl0eSwgbm9uaW5mcmlu
Z2VtZW50Ci0gKiBvZiB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHksIG9yIGZpdG5l
c3MgZm9yIGFueSBwYXJ0aWN1bGFyCi0gKiBwdXJwb3NlLiBJbiBubyBldmVudCBzaGFsbCB0aGUg
c3VibWl0dGVyIGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwKLSAqIGluZGlyZWN0LCBzcGVjaWFs
LCBleGVtcGxhcnksIHB1bml0aXZlLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCi0gKiBpbmNs
dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBsb3N0IHByb2ZpdHMsIGV2ZW4gaWYgYWR2aXNlZCBv
ZiB0aGUKLSAqIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gTGlrZXdpc2UsIERPQyBzb2Z0
d2FyZSBpcyBwcm92aWRlZCBhcyBpcwotICogd2l0aCBubyB3YXJyYW50aWVzIG9mIGFueSBraW5k
LCBpbmNsdWRpbmcgdGhlIHdhcnJhbnRpZXMgb2YgZGVzaWduLAotICogbWVyY2hhbnRhYmlsaXR5
LCBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCi0gKiBub25pbmZyaW5nZW1l
bnQsIG9yIGFyaXNpbmcgZnJvbSBhIGNvdXJzZSBvZiBkZWFsaW5nLCB1c2FnZSBvciB0cmFkZQot
ICogcHJhY3RpY2UuIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBWYW5kZXJiaWx0
IFVuaXZlcnNpdHksCi0gKiB0aGVpciBlbXBsb3llZXMsIGFuZCBzdHVkZW50cyBzaGFsbCBoYXZl
IG5vIGxpYWJpbGl0eSB3aXRoIHJlc3BlY3QgdG8KLSAqIHRoZSBpbmZyaW5nZW1lbnQgb2YgY29w
eXJpZ2h0cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgcGF0ZW50cyBieSBET0MKLSAqIHNvZnR3YXJl
IG9yIGFueSBwYXJ0IHRoZXJlb2YuIE1vcmVvdmVyLCBpbiBubyBldmVudCB3aWxsIFdhc2hpbmd0
b24KLSAqIFVuaXZlcnNpdHksIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCB0
aGVpciBlbXBsb3llZXMsIG9yCi0gKiBzdHVkZW50cyBiZSBsaWFibGUgZm9yIGFueSBsb3N0IHJl
dmVudWUgb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLAotICogaW5kaXJlY3QgYW5kIGNvbnNl
cXVlbnRpYWwgZGFtYWdlcy4KLSAqCi0gKiBET0Mgc29mdHdhcmUgaXMgcHJvdmlkZWQgd2l0aCBu
byBzdXBwb3J0IGFuZCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIG9uCi0gKiB0aGUgcGFydCBvZiBX
YXNoaW5ndG9uIFVuaXZlcnNpdHksIFVDIElydmluZSwgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LAot
ICogdGhlaXIgZW1wbG95ZWVzLCBvciBzdHVkZW50cyB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29y
cmVjdGlvbiwKLSAqIG1vZGlmaWNhdGlvbiwgb3IgZW5oYW5jZW1lbnQuIEEgWzIwXW51bWJlciBv
ZiBjb21wYW5pZXMgYXJvdW5kIHRoZQotICogd29ybGQgcHJvdmlkZSBjb21tZXJjaWFsIHN1cHBv
cnQgZm9yIERPQyBzb2Z0d2FyZSwgaG93ZXZlci4gRE9DCi0gKiBzb2Z0d2FyZSBpcyBZMkstY29t
cGxpYW50LCBhcyBsb25nIGFzIHRoZSB1bmRlcmx5aW5nIE9TIHBsYXRmb3JtIGlzCi0gKiBZMkst
Y29tcGxpYW50LiBMaWtld2lzZSwgRE9DIHNvZnR3YXJlIGlzIGNvbXBsaWFudCB3aXRoIHRoZSBu
ZXcgVVMKLSAqIGRheWxpZ2h0IHNhdmluZ3MgcnVsZSBwYXNzZWQgYnkgQ29uZ3Jlc3MgYXMgIlRo
ZSBFbmVyZ3kgUG9saWN5IEFjdCBvZgotICogMjAwNSwiIHdoaWNoIGVzdGFibGlzaGVkIG5ldyBk
YXlsaWdodCBzYXZpbmdzIHRpbWVzIChEU1QpIHJ1bGVzIGZvcgotICogdGhlIFVuaXRlZCBTdGF0
ZXMgdGhhdCBleHBhbmQgRFNUIGFzIG9mIE1hcmNoIDIwMDcuIFNpbmNlIERPQyBzb2Z0d2FyZQot
ICogb2J0YWlucyB0aW1lL2RhdGUgYW5kIGNhbGVuZGFyaW5nIGluZm9ybWF0aW9uIGZyb20gb3Bl
cmF0aW5nIHN5c3RlbXMKLSAqIHVzZXJzIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZSBuZXcg
RFNUIHJ1bGVzIGFzIGxvbmcgYXMgdGhleQotICogdXBncmFkZSB0aGVpciBvcGVyYXRpbmcgc3lz
dGVtcyBhY2NvcmRpbmdseS4KLSAqCi0gKiBUaGUgbmFtZXMgQUNFKFRNKSwgVEFPKFRNKSwgQ0lB
TyhUTSksIERBbkNFKFRNKSwgQ29TTUlDKFRNKSwKLSAqIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwg
VUMgSXJ2aW5lLCBhbmQgVmFuZGVyYmlsdCBVbml2ZXJzaXR5LCBtYXkgbm90Ci0gKiBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBkZXJpdmVkIGZyb20g
dGhpcwotICogc291cmNlIHdpdGhvdXQgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSBX
YXNoaW5ndG9uIFVuaXZlcnNpdHksCi0gKiBVQyBJcnZpbmUsIG9yIFZhbmRlcmJpbHQgVW5pdmVy
c2l0eS4gVGhpcyBsaWNlbnNlIGdyYW50cyBubyBwZXJtaXNzaW9uCi0gKiB0byBjYWxsIHByb2R1
Y3RzIG9yIHNlcnZpY2VzIGRlcml2ZWQgZnJvbSB0aGlzIHNvdXJjZSBBQ0UoVE0pLAotICogVEFP
KFRNKSwgQ0lBTyhUTSksIERBbkNFKFRNKSwgb3IgQ29TTUlDKFRNKSwgbm9yIGRvZXMgaXQgZ3Jh
bnQKLSAqIHBlcm1pc3Npb24gZm9yIHRoZSBuYW1lIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMg
SXJ2aW5lLCBvcgotICogVmFuZGVyYmlsdCBVbml2ZXJzaXR5IHRvIGFwcGVhciBpbiB0aGVpciBu
YW1lcy4KLSAqCi0gKiBJZiB5b3UgaGF2ZSBhbnkgc3VnZ2VzdGlvbnMsIGFkZGl0aW9ucywgY29t
bWVudHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlCi0gKiBsZXQgWzIxXW1lIGtub3cuCi0gKgotICog
WzIyXURvdWdsYXMgQy4gU2NobWlkdAotICoKLSAqIFJlZmVyZW5jZXMKLSAqCi0gKiAgMS4gaHR0
cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLmh0bWwKLSAqICAyLiBodHRwOi8vd3d3
LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9UQU8uaHRtbAotICogIDMuIGh0dHA6Ly93d3cuZHJlLnZh
bmRlcmJpbHQuZWR1L0NJQU8vCi0gKiAgNC4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUv
Y29zbWljLwotICogIDUuIGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L35zY2htaWR0Lwot
ICogIDYuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L0FDRS1tZW1iZXJzLmh0bWwK
LSAqICA3LiBodHRwOi8vd3d3Lnd1c3RsLmVkdS8KLSAqICA4LiBodHRwOi8vd3d3LnVjaS5lZHUv
Ci0gKiAgOS4gaHR0cDovL3d3dy52YW5kZXJiaWx0LmVkdS8KLSAqIDEwLiBtYWlsdG86ZG9jX2dy
b3VwQGNzLnd1c3RsLmVkdQotICogMTEuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0
L0FDRS11c2Vycy5odG1sCi0gKiAxMi4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQv
QUNFLmh0bWwKLSAqIDEzLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9UQU8uaHRt
bAotICogMTQuIGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L0NJQU8vCi0gKiAxNS4gaHR0
cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvfnNjaG1pZHQvRE9DX1JPT1QvREFuQ0UvCi0gKiAx
Ni4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvY29zbWljLwotICogMTcuIGh0dHA6Ly93
d3cuZHJlLnZhbmRlcmJpbHQuZWR1LwotICogMTguIGh0dHA6Ly93d3cuaXNpcy52YW5kZXJiaWx0
LmVkdS8KLSAqIDE5LiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9kb2MtY2VudGVy
Lmh0bWwKLSAqIDIwLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9jb21tZXJjaWFs
LXN1cHBvcnQuaHRtbAotICogMjEuIG1haWx0bzpkLnNjaG1pZHRAdmFuZGVyYmlsdC5lZHUKLSAq
IDIyLiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0LmVkdS9+c2NobWlkdC8KLSAqIDIzLiBodHRw
Oi8vd3d3LmNzLnd1c3RsLmVkdS9BQ0UuaHRtbAotICovCi0KLXZvaWQKLUluaXRpYWxpemVYUENv
bmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YpCi17Ci0JY3YtPndhaXRlcnNfY291
bnQgPSAwOwotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oJihjdi0+d2FpdGVyc19jb3VudF9s
b2NrKSk7Ci0JY3YtPmV2ZW50c19bQ19TSUdOQUxdID0gQ3JlYXRlRXZlbnQgKE5VTEwsIEZBTFNF
LCBGQUxTRSwgTlVMTCk7Ci0JY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdID0gQ3JlYXRlRXZlbnQg
KE5VTEwsIFRSVUUsIEZBTFNFLCBOVUxMKTsKLX0KLQotdm9pZAotRGVsZXRlWFBDb25kaXRpb25W
YXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKmN2KQotewotCUNsb3NlSGFuZGxlKGN2LT5ldmVudHNf
W0NfQlJPQURDQVNUXSk7Ci0JQ2xvc2VIYW5kbGUoY3YtPmV2ZW50c19bQ19TSUdOQUxdKTsKLQlE
ZWxldGVDcml0aWNhbFNlY3Rpb24oJihjdi0+d2FpdGVyc19jb3VudF9sb2NrKSk7Ci19Ci0KLWlu
dAotU2xlZXBYUENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YsIHVzZXJsYW5k
X211dGV4X3QgKm10eCkKLXsKLQlpbnQgcmVzdWx0LCBsYXN0X3dhaXRlcjsKLQotCUVudGVyQ3Jp
dGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKLQljdi0+d2FpdGVyc19jb3Vu
dCsrOwotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKLQlM
ZWF2ZUNyaXRpY2FsU2VjdGlvbiAobXR4KTsKLQlyZXN1bHQgPSBXYWl0Rm9yTXVsdGlwbGVPYmpl
Y3RzKDIsIGN2LT5ldmVudHNfLCBGQUxTRSwgSU5GSU5JVEUpOwotCWlmIChyZXN1bHQ9PS0xKSB7
Ci0JCXJlc3VsdCA9IEdldExhc3RFcnJvcigpOwotCX0KLQlFbnRlckNyaXRpY2FsU2VjdGlvbigm
Y3YtPndhaXRlcnNfY291bnRfbG9jayk7Ci0JY3YtPndhaXRlcnNfY291bnQtLTsKLQlsYXN0X3dh
aXRlciA9IHJlc3VsdCA9PSAoQ19TSUdOQUwgKyBDX0JST0FEQ0FTVCAmJiAoY3YtPndhaXRlcnNf
Y291bnQgPT0gMCkpOwotCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9s
b2NrKTsKLQlpZiAobGFzdF93YWl0ZXIpCi0JCVJlc2V0RXZlbnQoY3YtPmV2ZW50c19bQ19CUk9B
RENBU1RdKTsKLQlFbnRlckNyaXRpY2FsU2VjdGlvbiAobXR4KTsKLQlyZXR1cm4gcmVzdWx0Owot
fQotCi12b2lkCi1XYWtlQWxsWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKmN2
KQotewotCWludCBoYXZlX3dhaXRlcnM7Ci0JRW50ZXJDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0
ZXJzX2NvdW50X2xvY2spOwotCWhhdmVfd2FpdGVycyA9IGN2LT53YWl0ZXJzX2NvdW50ID4gMDsK
LQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmY3YtPndhaXRlcnNfY291bnRfbG9jayk7Ci0JaWYgKGhh
dmVfd2FpdGVycykKLQkJU2V0RXZlbnQgKGN2LT5ldmVudHNfW0NfQlJPQURDQVNUXSk7Ci19Ci0j
ZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5j
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCA2MTllZWU1YjJkOWRhZGQzNzA0NmIzYzExZjg2MTlkMjZkN2Y1NDBlLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQv
c2N0cF91c3JyZXEuYworKysgL2Rldi9udWxsCkBAIC0xLDkwMDUgKzAsMCBAQAotLyotCi0gKiBD
b3B5cmlnaHQgKGMpIDIwMDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2Fy
dC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBN
aWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICog
YikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICog
YykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0Zy
ZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFk
L3N5cy9uZXRpbmV0L3NjdHBfdXNycmVxLmMgMzIxMjA0IDIwMTctMDctMTkgMTQ6Mjg6NThaIHR1
ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgotI2lmZGVm
IF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL3Byb2MuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9wY2IuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8bmV0aW5l
dDYvc2N0cDZfdmFyLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+
Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF91aW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0
aW5ldC9zY3RwdXRpbC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KLSNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY2FsbG91dC5oPgotI2Vsc2UKLSNpbmNs
dWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfU0NUUF9QRUVM
T0ZGX1NPQ0tPUFQpCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BlZWxvZmYuaD4KLSNlbmRpZgkJ
CQkvKiBIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUICovCi0KLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKLSNkZWZpbmUgQVBQTEVfRklMRV9OTyA3Ci0jZW5kaWYKLQotZXh0ZXJuIGNvbnN0IHN0cnVj
dCBzY3RwX2NjX2Z1bmN0aW9ucyBzY3RwX2NjX2Z1bmN0aW9uc1tdOwotZXh0ZXJuIGNvbnN0IHN0
cnVjdCBzY3RwX3NzX2Z1bmN0aW9ucyBzY3RwX3NzX2Z1bmN0aW9uc1tdOwotCi12b2lkCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotc2N0cF9pbml0KHVpbnQxNl90IHBvcnQsCi0gICAgICAg
ICAgaW50ICgqY29ubl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxl
bmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKLSAgICAgICAgICB2b2lkICgqZGVi
dWdfcHJpbnRmKShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpCi0jZWxpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgKCFkZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dM
RU9QQVJEKSAmJiFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlO
TElPTikpCi1zY3RwX2luaXQoc3RydWN0IHByb3Rvc3cgKnBwIFNDVFBfVU5VU0VELCBzdHJ1Y3Qg
ZG9tYWluICpkcCBTQ1RQX1VOVVNFRCkKLSNlbHNlCi1zY3RwX2luaXQodm9pZCkKLSNlbmRpZgot
ewotI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQl1
X2xvbmcgc2JfbWF4X2FkajsKLQotI2VuZGlmCi0JLyogSW5pdGlhbGl6ZSBhbmQgbW9kaWZ5IHRo
ZSBzeXNjdGxlZCB2YXJpYWJsZXMgKi8KLQlzY3RwX2luaXRfc3lzY3RscygpOwotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLQlzcmFuZCgodW5zaWduZWQgaW50KXRpbWUo
TlVMTCkpOwotI2Vsc2UKLQlzcmFuZG9tKGdldHBpZCgpKTsgLyogc28gaW5wLT5zY3RwX2VwLnJh
bmRvbV9udW1iZXJzIGFyZSB0cnVseSByYW5kb20uLi4gKi8KLSNlbmRpZgotI2VuZGlmCi0jaWYg
ZGVmaW5lZChfX1BhbmRhX18pCi0Jc2N0cF9zZW5kc3BhY2UgPSBTQl9NQVg7Ci0Jc2N0cF9yZWN2
c3BhY2UgPSBTQl9NQVg7Ci0KLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSA9IHBvcnQ7Ci0jZWxzZQotI2lmICFk
ZWZpbmVkKF9fQVBQTEVfXykKLQlpZiAoKG5tYmNsdXN0ZXJzIC8gOCkgPiBTQ1RQX0FTT0NfTUFY
X0NIVU5LU19PTl9RVUVVRSkKLQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25f
cXVldWUpID0gKG5tYmNsdXN0ZXJzIC8gOCk7Ci0jZW5kaWYKLQkvKgotCSAqIEFsbG93IGEgdXNl
ciB0byB0YWtlIG5vIG1vcmUgdGhhbiAxLzIgdGhlIG51bWJlciBvZiBjbHVzdGVycyBvcgotCSAq
IHRoZSBTQl9NQVggd2hpY2hldmVyIGlzIHNtYWxsZXIgZm9yIHRoZSBzZW5kIHdpbmRvdy4KLQkg
Ki8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlzYl9tYXhfYWRqID0gKHVfbG9uZykoKHVfcXVh
ZF90KSAoc2JfbWF4KSAqIE1DTEJZVEVTIC8gKE1TSVpFICsgTUNMQllURVMpKTsKLSNlbHNlCi0J
c2JfbWF4X2FkaiA9ICh1X2xvbmcpKCh1X3F1YWRfdCkgKFNCX01BWCkgKiBNQ0xCWVRFUyAvIChN
U0laRSArIE1DTEJZVEVTKSk7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSA9IHNiX21heF9hZGo7Ci0jZWxzZQotCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpID0gbWluKHNiX21heF9hZGosCi0JICAgICgoKHVp
bnQzMl90KW5tYmNsdXN0ZXJzIC8gMikgKiBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVCkpOwotI2Vu
ZGlmCi0JLyoKLQkgKiBOb3cgZm9yIHRoZSByZWN2IHdpbmRvdywgc2hvdWxkIHdlIHRha2UgdGhl
IHNhbWUgYW1vdW50PyBvcgotCSAqIHNob3VsZCBJIGRvIDEvMiB0aGUgU0JfTUFYIGluc3RlYWQg
aW4gdGhlIFNCX01BWCBtaW4gYWJvdmUuIEZvcgotCSAqIG5vdyBJIHdpbGwganVzdCBjb3B5Lgot
CSAqLwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3NlbmRzcGFjZSk7Ci0jZW5kaWYKLQlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUpID0g
MDsKLQlTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9IDA7Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0j
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCVNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3JvdXRlKSA9IC0xOwotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgPSAtMTsKLQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwKSA9IC0xOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwNikgPSAtMTsKLQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikg
PSAtMTsKLSNlbmRpZgotCVNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkX3Nob3VsZF9leGl0KSA9
IDA7Ci0JU0NUUF9CQVNFX1ZBUihjb25uX291dHB1dCkgPSBjb25uX291dHB1dDsKLQlTQ1RQX0JB
U0VfVkFSKGRlYnVnX3ByaW50ZikgPSBkZWJ1Z19wcmludGY7Ci0JU0NUUF9CQVNFX1ZBUihjcmMz
MmNfb2ZmbG9hZGVkKSA9IDA7Ci0jZW5kaWYKLQlzY3RwX3BjYl9pbml0KCk7Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCXNjdHBfc3RhcnRfdGltZXIoKTsKLSNlbmRpZgotI2lmIGRlZmlu
ZWQoU0NUUF9QQUNLRVRfTE9HR0lORykKLQlTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVy
cykgPSAwOwotCVNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpID0gMDsKLQltZW1zZXQoJlND
VFBfQkFTRV9WQVIocGFja2V0X2xvZ19idWZmZXIpLCAwLCBTQ1RQX1BBQ0tFVF9MT0dfU0laRSk7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQX0JBU0VfVkFSKHNjdHBfbWFp
bl90aW1lcl90aWNrcykgPSAwOwotCXNjdHBfc3RhcnRfbWFpbl90aW1lcigpOwotCXRpbWVvdXQo
c2N0cF9kZWxheWVkX3N0YXJ0dXAsIE5VTEwsIDEpOwotI2VuZGlmCi19Ci0KLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQotI2lmZGVmIFZJTUFHRQotc3RhdGljIHZvaWQKLXNjdHBfZmluaXNoKHZv
aWQgKnVudXNlZCBfX3VudXNlZCkKLXsKLSAgICAgICAgIHNjdHBfcGNiX2ZpbmlzaCgpOwotfQot
Vk5FVF9TWVNVTklOSVQoc2N0cCwgU0lfU1VCX1BST1RPX0RPTUFJTiwgU0lfT1JERVJfRk9VUlRI
LCBzY3RwX2ZpbmlzaCwgTlVMTCk7Ci0jZW5kaWYKLSNlbHNlCi12b2lkCi1zY3RwX2ZpbmlzaCh2
b2lkKQotewotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCXVudGltZW91dChzY3RwX2RlbGF5ZWRf
c3RhcnR1cCwgTlVMTCk7Ci0Jc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0Jc2N0cF9hZGRyZXNzX21v
bml0b3Jfc3RvcCgpOwotCXNjdHBfc3RvcF9tYWluX3RpbWVyKCk7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQot
CXJlY3ZfdGhyZWFkX2Rlc3Ryb3koKTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotCWlmIChT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgIT0gLTEpIHsKLQkJcHRocmVhZF9qb2luKFND
VFBfQkFTRV9WQVIocmVjdnRocmVhZHJvdXRlKSwgTlVMTCk7Ci0JfQotI2VuZGlmCi0jZW5kaWYK
LSNpZmRlZiBJTkVUCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApICE9IC0x
KSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xl
T2JqZWN0KFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJhdyksIElORklOSVRFKTsKLQkJQ2xvc2VI
YW5kbGUoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3KSk7Ci0jZWxzZQotCQlwdGhyZWFkX2pv
aW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3KSwgTlVMTCk7Ci0jZW5kaWYKLQl9Ci0JaWYg
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9W
QVIocmVjdnRocmVhZHVkcCksIElORklOSVRFKTsKLQkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNFX1ZB
UihyZWN2dGhyZWFkdWRwKSk7Ci0jZWxzZQotCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihy
ZWN2dGhyZWFkdWRwKSwgTlVMTCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgot
CWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsKLSNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9C
QVNFX1ZBUihyZWN2dGhyZWFkcmF3NiksIElORklOSVRFKTsKLQkJQ2xvc2VIYW5kbGUoU0NUUF9C
QVNFX1ZBUihyZWN2dGhyZWFkcmF3NikpOwotI2Vsc2UKLQkJcHRocmVhZF9qb2luKFNDVFBfQkFT
RV9WQVIocmVjdnRocmVhZHJhdzYpLCBOVUxMKTsKLSNlbmRpZgotCX0KLQlpZiAoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotCQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIocmVjdnRo
cmVhZHVkcDYpLCBJTkZJTklURSk7Ci0JCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIocmVjdnRo
cmVhZHVkcDYpKTsKLSNlbHNlCi0JCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJl
YWR1ZHA2KSwgTlVMTCk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLQlTQ1RQX0JBU0VfVkFSKHRpbWVy
X3RocmVhZF9zaG91bGRfZXhpdCkgPSAxOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKLQlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwg
SU5GSU5JVEUpOwotCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSk7Ci0j
ZWxzZQotCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCksIE5VTEwpOwot
I2VuZGlmCi0jZW5kaWYKLQlzY3RwX3BjYl9maW5pc2goKTsKLSNpZiBkZWZpbmVkKF9fV2luZG93
c19fKQotCXNjdHBfZmluaXNoX3N5c2N0bHMoKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLXZvaWQK
LXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qg
bnh0c3opCi17Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwotCXVpbnQxNl90IG92ZXJo
ZWFkOwotCi0JLyogQWRqdXN0IHRoYXQgdG9vICovCi0Jc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUg
PSBueHRzejsKLQkvKiBub3cgb2ZmIHRvIHN1YnRyYWN0IElQX0RGIGZsYWcgaWYgbmVlZGVkICov
Ci0Jb3ZlcmhlYWQgPSBJUF9IRFJfU0laRSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7Ci0JaWYg
KHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9h
dXRoX2NodW5rcykpIHsKLQkJb3ZlcmhlYWQgKz0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3Rj
Yi0+YXNvYy5wZWVyX2htYWNfaWQpOwotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFz
b2Muc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7Ci0JCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVy
aGVhZCkgPiBueHRzeikgewotCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9P
SzsKLQkJfQotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwg
c2N0cF9uZXh0KSB7Ci0JCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikg
ewotCQkJLyoKLQkJCSAqIEZvciB0aGlzIGd1eSB3ZSBhbHNvIG1hcmsgZm9yIGltbWVkaWF0ZSBy
ZXNlbmQKLQkJCSAqIHNpbmNlIHdlIHNlbnQgdG8gYmlnIG9mIGNodW5rCi0JCQkgKi8KLQkJCWNo
ay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7Ci0JCQlpZiAoY2hrLT5zZW50IDwg
U0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKLQkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNo
ayk7Ci0JCQkJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKLQkJCQljaGst
PnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKLQkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKLQkJCQljaGstPnJlYy5kYXRhLmRvaW5nX2Zh
c3RfcmV0cmFuc21pdCA9IDA7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCXNjdHBfbWlzY19p
bnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1BNVFUsCi0JCQkJCQkgICAgICAgY2hrLT53aG9Uby0+
ZmxpZ2h0X3NpemUsCi0JCQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUsCi0JCQkJCQkgICAgICAg
KHVpbnQzMl90KSh1aW50cHRyX3QpY2hrLT53aG9UbywKLQkJCQkJCSAgICAgICBjaGstPnJlYy5k
YXRhLnRzbik7Ci0JCQkJfQotCQkJCS8qIENsZWFyIGFueSB0aW1lIHNvIE5PIFJUVCBpcyBiZWlu
ZyBkb25lICovCi0JCQkJY2hrLT5kb19ydHQgPSAwOwotCQkJfQotCQl9Ci0JfQotfQotCi0jaWZk
ZWYgSU5FVAotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi12b2lkCi1zY3RwX25vdGlmeShz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNi
LAotICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgICAgICAgICAgdWludDhf
dCBpY21wX3R5cGUsCi0gICAgICAgICAgICB1aW50OF90IGljbXBfY29kZSwKLSAgICAgICAgICAg
IHVpbnQxNl90IGlwX2xlbiwKLSAgICAgICAgICAgIHVpbnQzMl90IG5leHRfbXR1KQotewotI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCXN0
cnVjdCBzb2NrZXQgKnNvOwotI2VuZGlmCi0JaW50IHRpbWVyX3N0b3BwZWQ7Ci0KLQlpZiAoaWNt
cF90eXBlICE9IElDTVBfVU5SRUFDSCkgewotCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdW5yZWFj
aGFibGUgKi8KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlyZXR1cm47Ci0JfQotCWlmICgo
aWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9ORVQpIHx8Ci0JICAgIChpY21wX2NvZGUgPT0gSUNN
UF9VTlJFQUNIX0hPU1QpIHx8Ci0JICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX05FVF9V
TktOT1dOKSB8fAotCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9IT1NUX1VOS05PV04p
IHx8Ci0JICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX0lTT0xBVEVEKSB8fAotCSAgICAo
aWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9ORVRfUFJPSElCKSB8fAotCSAgICAoaWNtcF9jb2Rl
ID09IElDTVBfVU5SRUFDSF9IT1NUX1BST0hJQikgfHwKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LQkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU4pKSB7Ci0jZWxpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX05ldEJTRCkKLQkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hf
QURNSU5fUFJPSElCSVQpKSB7Ci0jZWxzZQotCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFD
SF9GSUxURVJfUFJPSElCKSkgewotI2VuZGlmCi0JCS8qIE1hcmsgdGhlIG5ldCB1bnJlYWNoYWJs
ZS4gKi8KLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJ
CS8qIE9LLCB0aGF0IGRlc3RpbmF0aW9uIGlzIE5PVCByZWFjaGFibGUuICovCi0JCQluZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQluZXQtPmRlc3Rfc3RhdGUgJj0g
flNDVFBfQUREUl9QRjsKLQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0Vf
RE9XTiwKLQkJCSAgICAgICAgICAgICAgICBzdGNiLCAwLAotCQkJICAgICAgICAgICAgICAgICh2
b2lkICopbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQl9Ci0JCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQl9IGVsc2UgIGlmICgoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9QUk9UT0NPTCkg
fHwKLQkJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX1BPUlQpKSB7Ci0JCS8qIFRyZWF0
IGl0IGxpa2UgYW4gQUJPUlQuICovCi0JCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDEs
IDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCXNvID0gU0NUUF9JTlBfU08oaW5wKTsK
LQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKLQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotI2Vu
ZGlmCi0JCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0Ms
Ci0JCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xP
Q18yKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKLQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJLyogU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOyBNVDogSSB0aGluayB0aGlzIGlzIG5vdCBuZWVkZWQuKi8KLSNlbmRpZgotCQkvKiBu
byBuZWVkIHRvIHVubG9jayBoZXJlLCBzaW5jZSB0aGUgVENCIGlzIGdvbmUgKi8KLQl9IGVsc2Ug
aWYgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfTkVFREZSQUcpIHsKLQkJLyogRmluZCB0aGUg
bmV4dCAoc21hbGxlcikgTVRVICovCi0JCWlmIChuZXh0X210dSA9PSAwKSB7Ci0JCQkvKgotCQkJ
ICogT2xkIHR5cGUgcm91dGVyIHRoYXQgZG9lcyBub3QgdGVsbCB1cyB3aGF0IHRoZSBuZXh0Ci0J
CQkgKiBNVFUgaXMuCi0JCQkgKiBSYXRzIHdlIHdpbGwgaGF2ZSB0byBndWVzcyAoaW4gYSBlZHVj
YXRlZCBmYXNoaW9uCi0JCQkgKiBvZiBjb3Vyc2UpLgotCQkJICovCi0JCQluZXh0X210dSA9IHNj
dHBfZ2V0X3ByZXZfbXR1KGlwX2xlbik7Ci0JCX0KLQkJLyogU3RvcCB0aGUgUE1UVSB0aW1lci4g
Ki8KLQkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKSkg
ewotCQkJdGltZXJfc3RvcHBlZCA9IDE7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCi0JCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMSk7Ci0JCX0gZWxzZSB7Ci0JCQl0aW1lcl9z
dG9wcGVkID0gMDsKLQkJfQotCQkvKiBVcGRhdGUgdGhlIHBhdGggTVRVLiAqLwotCQlpZiAobmV0
LT5wb3J0KSB7Ci0JCQluZXh0X210dSAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0JCX0KLQkJ
aWYgKG5ldC0+bXR1ID4gbmV4dF9tdHUpIHsKLQkJCW5ldC0+bXR1ID0gbmV4dF9tdHU7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCWlmIChuZXQtPnBvcnQpIHsKLQkJCQlzY3RwX2hjX3Nl
dF9tdHUoJm5ldC0+cm8uX2xfYWRkciwgaW5wLT5maWJudW0sIG5leHRfbXR1ICsgc2l6ZW9mKHN0
cnVjdCB1ZHBoZHIpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJv
Ll9sX2FkZHIsIGlucC0+ZmlibnVtLCBuZXh0X210dSk7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCQkv
KiBVcGRhdGUgdGhlIGFzc29jaWF0aW9uIE1UVSAqLwotCQlpZiAoc3RjYi0+YXNvYy5zbWFsbGVz
dF9tdHUgPiBuZXh0X210dSkgewotCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV4
dF9tdHUpOwotCQl9Ci0JCS8qIEZpbmFsbHksIHN0YXJ0IHRoZSBQTVRVIHRpbWVyIGlmIGl0IHdh
cyBydW5uaW5nIGJlZm9yZS4gKi8KLQkJaWYgKHRpbWVyX3N0b3BwZWQpIHsKLQkJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOwot
CQl9Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQl9IGVsc2UgewotCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JfQotfQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi12b2lkCi0jZWxzZQotdm9pZCAq
Ci0jZW5kaWYKLXNjdHBfY3RsaW5wdXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpzYSwgdm9p
ZCAqdmlwKQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0Jc3RydWN0IGlwICpvdXRlcl9p
cDsKLSNlbmRpZgotCXN0cnVjdCBpcCAqaW5uZXJfaXA7Ci0Jc3RydWN0IHNjdHBoZHIgKnNoOwot
CXN0cnVjdCBpY21wICppY21wOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNj
dHBfdGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQotCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOwotI2VuZGlmCi0Jc3RydWN0IHNv
Y2thZGRyX2luIHNyYywgZHN0OwotCi0JaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCB8fAot
CSAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX2FkZHIuc19hZGRyID09IElOQURE
Ul9BTlkpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJcmV0dXJuOwotI2Vsc2UKLQkJcmV0dXJuIChOVUxM
KTsKLSNlbmRpZgotCX0KLQlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkpIHsKLQkJdmlwID0gTlVM
TDsKLQl9IGVsc2UgaWYgKCh1bnNpZ25lZCljbWQgPj0gUFJDX05DTURTIHx8IGluZXRjdGxlcnJt
YXBbY21kXSA9PSAwKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCXJldHVybjsKLSNlbHNlCi0JCXJldHVy
biAoTlVMTCk7Ci0jZW5kaWYKLQl9Ci0JaWYgKHZpcCAhPSBOVUxMKSB7Ci0JCWlubmVyX2lwID0g
KHN0cnVjdCBpcCAqKXZpcDsKLQkJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClpbm5l
cl9pcCAtCi0JCSAgICAoc2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNpemVvZihzdHJ1Y3QgaXApKSk7
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJb3V0ZXJfaXAgPSAoc3RydWN0IGlwICopKChj
YWRkcl90KWljbXAgLSBzaXplb2Yoc3RydWN0IGlwKSk7Ci0jZW5kaWYKLQkJc2ggPSAoc3RydWN0
IHNjdHBoZHIgKikoKGNhZGRyX3QpaW5uZXJfaXAgKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpKTsK
LQkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJc3JjLnNp
bl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlzcmMuc2luX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNyYy5zaW5fcG9ydCA9IHNo
LT5zcmNfcG9ydDsKLQkJc3JjLnNpbl9hZGRyID0gaW5uZXJfaXAtPmlwX3NyYzsKLQkJbWVtc2V0
KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJZHN0LnNpbl9mYW1pbHkg
PSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlkc3Quc2luX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCWRzdC5zaW5fcG9ydCA9IHNoLT5kZXN0X3Bv
cnQ7Ci0JCWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7Ci0JCS8qCi0JCSAqICdkc3Qn
IGhvbGRzIHRoZSBkZXN0IG9mIHRoZSBwYWNrZXQgdGhhdCBmYWlsZWQgdG8gYmUgc2VudC4KLQkJ
ICogJ3NyYycgaG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2UgcmV2ZXJz
ZQotCQkgKiB0aGUgZHN0IGFuZCB0aGUgc3JjIGluIHRoZSBsb29rdXAuCi0JCSAqLwotCQlpbnAg
PSBOVUxMOwotCQluZXQgPSBOVUxMOwotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRk
cl9zYSgoc3RydWN0IHNvY2thZGRyICopJmRzdCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCi0JCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsCi0JCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJRCk7Ci0JCWlmICgoc3RjYiAhPSBOVUxM
KSAmJgotCQkgICAgKG5ldCAhPSBOVUxMKSAmJgotCQkgICAgKGlucCAhPSBOVUxMKSkgewotCQkJ
LyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0YWcgKi8KLQkJCWlmIChudG9obChzaC0+dl90YWcp
ICE9IDApIHsKLQkJCQkvKgotCQkJCSAqIFRoaXMgbXVzdCBiZSB0aGUgdmVyaWZpY2F0aW9uIHRh
ZyB1c2VkIGZvcgotCQkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRvbid0IGNvbnNpZGVy
Ci0JCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmljYXRpb24gdGFnLgotCQkJCSAq
LwotCQkJCWlmIChudG9obChzaC0+dl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92dGFnKSB7Ci0J
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwotCQkJCX0KLQkJCX0gZWxz
ZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQlpZiAobnRvaHMob3V0ZXJfaXAtPmlw
X2xlbikgPj0KLQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcCkgKwotCQkJCSAgICA4ICsgKGlubmVy
X2lwLT5pcF9obCA8PCAyKSArIDIwKSB7Ci0JCQkJCS8qCi0JCQkJCSAqIEluIHRoaXMgY2FzZSB3
ZSBjYW4gY2hlY2sgaWYgd2UKLQkJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQot
CQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KLQkJCQkJICovCi0JCQkJCWNoID0gKHN0cnVj
dCBzY3RwX2luaXRfY2h1bmsgKikoc2ggKyAxKTsKLQkJCQkJaWYgKChjaC0+Y2guY2h1bmtfdHlw
ZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHx8Ci0JCQkJCSAgICAobnRvaGwoY2gtPmluaXQuaW5pdGlh
dGVfdGFnKSAhPSBzdGNiLT5hc29jLm15X3Z0YWcpKSB7Ci0JCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJCQlyZXR1cm47Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0jZWxzZQotCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJCQlyZXR1cm47Ci0jZW5kaWYKLQkJCX0KLQkJCXNjdHBfbm90aWZ5
KGlucCwgc3RjYiwgbmV0LAotCQkJICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlLAotCQkJICAg
ICAgICAgICAgaWNtcC0+aWNtcF9jb2RlLAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKLQkJCSAgICAgICAgICAgIG50b2hzKGlubmVyX2lw
LT5pcF9sZW4pLAotI2Vsc2UKLQkJCSAgICAgICAgICAgIGlubmVyX2lwLT5pcF9sZW4sCi0jZW5k
aWYKLQkJCSAgICAgICAgICAgICh1aW50MzJfdCludG9ocyhpY21wLT5pY21wX25leHRtdHUpKTsK
LQkJfSBlbHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA8IDUwMDAwMAotCQkJLyoKLQkJCSAqIFhYWCBtdXN0IGJlIGZpeGVkIGZvciA1LnggYW5kIGhp
Z2hlciwgbGVhdmUgZm9yCi0JCQkgKiA0LngKLQkJCSAqLwotCQkJaWYgKFBSQ19JU19SRURJUkVD
VChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKLQkJCQlpbl9ydGNoYW5nZSgoc3RydWN0IGlucGNi
ICopaW5wLAotCQkJCSAgICBpbmV0Y3RsZXJybWFwW2NtZF0pOwotCQkJfQotI2VuZGlmCi0JCQlp
ZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgewotCQkJCS8qIHJlZHVjZSByZWYt
Y291bnQgKi8KLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJaWYgKHN0Y2IpIHsK
LQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18p
Ci0JcmV0dXJuOwotI2Vsc2UKLQlyZXR1cm4gKE5VTEwpOwotI2VuZGlmCi19Ci0jZW5kaWYKLSNl
bmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLXN0YXRpYyBpbnQKLXNjdHBfZ2V0Y3Jl
ZChTWVNDVExfSEFORExFUl9BUkdTKQotewotCXN0cnVjdCB4dWNyZWQgeHVjOwotCXN0cnVjdCBz
b2NrYWRkcl9pbiBhZGRyc1syXTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0JaW50IGVycm9yOwotCXVp
bnQzMl90IHZyZl9pZDsKLQotCS8qIEZJWCwgZm9yIG5vbi1ic2QgaXMgdGhpcyByaWdodD8gKi8K
LQl2cmZfaWQgPSBTQ1RQX0RFRkFVTFRfVlJGSUQ7Ci0KLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+
IDYwMjAwMAotCWVycm9yID0gcHJpdl9jaGVjayhyZXEtPnRkLCBQUklWX05FVElORVRfR0VUQ1JF
RCk7Ci0KLSNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotCWVycm9yID0gc3VzZXIo
cmVxLT50ZCk7Ci0jZWxzZQotCWVycm9yID0gc3VzZXIocmVxLT5wKTsKLSNlbmRpZgotCWlmIChl
cnJvcikKLQkJcmV0dXJuIChlcnJvcik7Ci0KLQllcnJvciA9IFNZU0NUTF9JTihyZXEsIGFkZHJz
LCBzaXplb2YoYWRkcnMpKTsKLQlpZiAoZXJyb3IpCi0JCXJldHVybiAoZXJyb3IpOwotCi0Jc3Rj
YiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc2ludG9zYSgmYWRkcnNbMV0pLAotCSAg
ICBzaW50b3NhKCZhZGRyc1swXSksCi0JICAgICZpbnAsICZuZXQsIDEsIHZyZl9pZCk7Ci0JaWYg
KHN0Y2IgPT0gTlVMTCB8fCBpbnAgPT0gTlVMTCB8fCBpbnAtPnNjdHBfc29ja2V0ID09IE5VTEwp
IHsKLQkJaWYgKChpbnAgIT0gTlVMTCkgJiYgKHN0Y2IgPT0gTlVMTCkpIHsKLQkJCS8qIHJlZHVj
ZSByZWYtY291bnQgKi8KLQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOwotCQkJZ290byBjcmVkX2Nhbl9jb250OwotCQl9Ci0KLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsK
LQkJZXJyb3IgPSBFTk9FTlQ7Ci0JCWdvdG8gb3V0OwotCX0KLQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JLyogV2UgdXNlIHRoZSB3cml0ZSBsb2NrIGhlcmUsIG9ubHkKLQkgKiBzaW5jZSBpbiB0
aGUgZXJyb3IgbGVnIHdlIG5lZWQgaXQuCi0JICogSWYgd2UgdXNlZCBSTE9DSywgdGhlbiB3ZSB3
b3VsZCBoYXZlCi0JICogdG8gd2xvY2svZGVjci91bmxvY2svcmxvY2suIFdoaWNoCi0JICogaW4g
dGhlb3J5IGNvdWxkIGNyZWF0ZSBhIGhvbGUuIEJldHRlcgotCSAqIHRvIHVzZSBoaWdoZXIgd2xv
Y2suCi0JICovCi0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLSBjcmVkX2Nhbl9jb250OgotCWVycm9y
ID0gY3JfY2Fuc2Vlc29ja2V0KHJlcS0+dGQtPnRkX3VjcmVkLCBpbnAtPnNjdHBfc29ja2V0KTsK
LQlpZiAoZXJyb3IpIHsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlnb3RvIG91dDsKLQl9
Ci0JY3J1MngoaW5wLT5zY3RwX3NvY2tldC0+c29fY3JlZCwgJnh1Yyk7Ci0JU0NUUF9JTlBfV1VO
TE9DSyhpbnApOwotCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4dWMsIHNpemVvZihzdHJ1Y3Qg
eHVjcmVkKSk7Ci1vdXQ6Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLVNZU0NUTF9QUk9DKF9uZXRf
aW5ldF9zY3RwLCBPSURfQVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JX
LAotICAgIDAsIDAsIHNjdHBfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBvZiBh
IFNDVFAgY29ubmVjdGlvbiIpOwotI2VuZGlmCQkJCS8qICNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAqLwotCi0KLSNpZmRlZiBJTkVUCi0jaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotI2VsaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKLXN0YXRpYyB2b2lk
Ci0jZWxzZQotc3RhdGljIGludAotI2VuZGlmCi1zY3RwX2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNv
KQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0JdWludDMyX3QgZmxhZ3M7Ci0KLQlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwCi0J
CXJldHVybjsKLSNlbHNlCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0jZW5k
aWYKLQl9Ci0KLSBzY3RwX211c3RfdHJ5X2FnYWluOgotCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdz
OwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwg
MTcpOwotI2VuZGlmCi0JaWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkg
PT0gMCkgJiYKLQkgICAgKGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBfZmxhZ3MsIGZsYWdz
LCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBfUENCX0ZMQUdTX0NM
T1NFX0lQKSkpKSB7Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCQlzY3RwX2xvZ19jbG9zaW5n
KGlucCwgTlVMTCwgMTYpOwotI2VuZGlmCi0JCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJF
RV9TSE9VTERfVVNFX0FCT1JULAotCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NF
KTsKLQkJU09DS19MT0NLKHNvKTsKLQkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsKLQkJLyog
c2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5Ci0JCSAqIGhlcmUgZm9yIHRoZSBh
Y2NvdW50aW5nL3NlbGVjdC4KLQkJICovCi0JCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7Ci0K
LSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJc28tPnNvX3VzZWNvdW50LS07Ci0jZWxzZQotCQkv
KiBOb3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQu
ICovCi0JCXNvLT5zb19wY2IgPSBOVUxMOwotI2VuZGlmCi0JCVNPQ0tfVU5MT0NLKHNvKTsKLQl9
IGVsc2UgewotCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdh
aW47Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPiA2OTAwMDAKLQlyZXR1cm47Ci0jZWxzZQotCXJldHVybiAoMCk7Ci0jZW5kaWYKLX0KLQot
I2lmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLSNl
bHNlCi1zdGF0aWMgaW50Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLXNjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgcHJvdG8gU0NUUF9VTlVTRUQsIHN0cnVjdCB0aHJlYWQgKnAgU0NUUF9VTlVTRUQpCi0jZWxp
ZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotc2N0cF9hdHRh
Y2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3QgdnJm
X2lkKQotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXNjdHBfYXR0YWNoKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFEIHAgU0NUUF9VTlVTRUQpCi0j
ZWxzZQotc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNF
RCwgc3RydWN0IHByb2MgKnAgU0NUUF9VTlVTRUQpCi0jZW5kaWYKLXsKLQlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOwotCXN0cnVjdCBpbnBjYiAqaXBfaW5wOwotCWludCBlcnJvcjsKLSNpZiAhZGVm
aW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JdWludDMyX3QgdnJm
X2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOwotI2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBf
aW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgIT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09IDAgfHwg
c28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7Ci0JCWVycm9yID0gU0NUUF9TT1JFU0VSVkUoc28s
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cmVjdnNwYWNlKSk7Ci0JCWlmIChlcnJvcikgewotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLQl9
Ci0JZXJyb3IgPSBzY3RwX2lucGNiX2FsbG9jKHNvLCB2cmZfaWQpOwotCWlmIChlcnJvcikgewot
CQlyZXR1cm4gKGVycm9yKTsKLQl9Ci0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNv
X3BjYjsKLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSBub3QgdjYhICovCi0JaXBfaW5wID0gJmlucC0+aXBf
aW5wLmlucDsKLQlpcF9pbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKLQlpcF9pbnAtPmlucF9p
cF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7Ci0JU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OwotCXJldHVybiAoMCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA1MDAwMDAKLXN0YXRpYyBpbnQKLXNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdGhyZWFkICpwKQotewotI2VsaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi1zdGF0aWMgaW50Ci1z
Y3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0
IHByb2MgKnApIHsKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi1pbnQKLXNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphZGRyKSB7Ci0Jdm9pZCAqcCA9IE5VTEw7Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQot
c3RhdGljIGludAotc2N0cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsIFBLVEhSRUFEIHApIHsKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwX2JpbmQoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQotewotCXN0cnVj
dCBzb2NrYWRkciAqYWRkciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik6IE5V
TEw7Ci0KLSNlbmRpZgotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0KLQlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmIChhZGRyICE9IE5VTEwpIHsKLSNpZmRl
ZiBIQVZFX1NBX0xFTgotCQlpZiAoKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB8fAotCQkg
ICAgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkpIHsKLSNlbHNl
Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewotI2VuZGlmCi0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoc2N0cF9pbnBjYl9i
aW5kKHNvLCBhZGRyLCBOVUxMLCBwKSk7Ci19Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQotaW50Ci1zY3RwY29ubl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBw
cm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3QgdnJmX2lkKQotewotCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7Ci0Jc3RydWN0IGlucGNiICppcF9pbnA7Ci0JaW50IGVycm9yOwotCi0JaW5wID0gKHN0
cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wICE9IE5VTEwpIHsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpZiAoc28tPnNvX3NuZC5zYl9oaXdh
dCA9PSAwIHx8IHNvLT5zb19yY3Yuc2JfaGl3YXQgPT0gMCkgewotCQllcnJvciA9IFNDVFBfU09S
RVNFUlZFKHNvLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSwgU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3JlY3ZzcGFjZSkpOwotCQlpZiAoZXJyb3IpIHsKLQkJCXJldHVybiAoZXJyb3Ip
OwotCQl9Ci0JfQotCWVycm9yID0gc2N0cF9pbnBjYl9hbGxvYyhzbywgdnJmX2lkKTsKLQlpZiAo
ZXJyb3IpIHsKLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBj
YiAqKXNvLT5zb19wY2I7Ci0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQlpbnAtPnNjdHBfZmxhZ3Mg
Jj0gflNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2OwotCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9DT05OOwotCWlwX2lucCA9ICZpbnAtPmlwX2lucC5pbnA7Ci0JaXBfaW5w
LT5pbnBfdmZsYWcgfD0gSU5QX0NPTk47Ci0JaXBfaW5wLT5pbnBfaXBfdHRsID0gTU9EVUxFX0dM
T0JBTChpcF9kZWZ0dGwpOwotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlyZXR1cm4gKDApOwot
fQotCi1pbnQKLXNjdHBjb25uX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqYWRkcikKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCi0JaW5wID0gKHN0cnVjdCBz
Y3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpZiAoYWRkciAhPSBOVUxMKSB7Ci0jaWZkZWYg
SEFWRV9TQV9MRU4KLQkJaWYgKChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgfHwKLQkJICAg
IChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkpIHsKLSNlbHNl
Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgewotI2VuZGlmCi0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCXJldHVybiAoc2N0cF9pbnBjYl9i
aW5kKHNvLCBhZGRyLCBOVUxMLCBOVUxMKSk7Ci19Ci0KLSNlbmRpZgotI2lmIChkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotdm9pZAotc2N0cF9jbG9zZShzdHJ1
Y3Qgc29ja2V0ICpzbykKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXVpbnQzMl90IGZs
YWdzOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5w
ID09IE5VTEwpCi0JCXJldHVybjsKLQotCS8qIEluZm9ybSBhbGwgdGhlIGxvd2VyIGxheWVyIGFz
c29jIHRoYXQgd2UKLQkgKiBhcmUgZG9uZS4KLQkgKi8KLSBzY3RwX211c3RfdHJ5X2FnYWluOgot
CWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQlzY3Rw
X2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTcpOwotI2VuZGlmCi0JaWYgKCgoZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKLQkgICAgKGF0b21pY19jbXBzZXRfaW50
KCZpbnAtPnNjdHBfZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSB8IFNDVFBfUENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQotCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fTElOR0VSKSAmJiAoc28t
PnNvX2xpbmdlciA9PSAwKSkgfHwKLQkJICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsKLSNl
bHNlCi0JCWlmICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJiAoc28tPnNvX2xpbmdl
ciA9PSAwKSkgfHwKLQkJICAgIChzby0+c29fcmN2LnNiX2NjID4gMCkpIHsKLSNlbmRpZgotI2lm
ZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxMyk7
Ci0jZW5kaWYKLQkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FC
T1JULAotCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7Ci0JCX0gZWxzZSB7
Ci0jaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwotCQkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEws
IDE0KTsKLSNlbmRpZgotCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9V
U0VfR1JBQ0VGVUxfQ0xPU0UsCi0JCQkJCVNDVFBfQ0FMTEVEX0FGVEVSX0NNUFNFVF9PRkNMT1NF
KTsKLQkJfQotCQkvKiBUaGUgc29ja2V0IGlzIG5vdyBkZXRhY2hlZCwgbm8gbWF0dGVyIHdoYXQK
LQkJICogdGhlIHN0YXRlIG9mIHRoZSBTQ1RQIGFzc29jaWF0aW9uLgotCQkgKi8KLQkJU09DS19M
T0NLKHNvKTsKLQkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsKLQkJLyogc2FtZSBmb3IgdGhl
IHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5Ci0JCSAqIGhlcmUgZm9yIHRoZSBhY2NvdW50aW5nL3Nl
bGVjdC4KLQkJICovCi0JCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jjdik7Ci0KLSNpZiAhZGVmaW5l
ZChfX0FQUExFX18pCi0JCS8qIE5vdyBudWxsIG91dCB0aGUgcmVmZXJlbmNlLCB3ZSBhcmUgY29t
cGxldGVseSBkZXRhY2hlZC4gKi8KLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0jZW5kaWYKLQkJU09D
S19VTkxPQ0soc28pOwotCX0gZWxzZSB7Ci0JCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOwotCQlp
ZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApIHsKLQkJCWdvdG8g
c2N0cF9tdXN0X3RyeV9hZ2FpbjsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0KLSNlbHNlCi0KLQot
aW50Ci1zY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOwotCXVpbnQzMl90IGZsYWdzOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
c28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMAotCQlyZXR1cm47Ci0jZWxzZQotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0jZW5kaWYKLQl9Ci0gc2N0cF9tdXN0X3RyeV9h
Z2FpbjoKLQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5H
Ci0Jc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKLSNlbmRpZgotCWlmICgoKGZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCi0JICAgIChhdG9taWNfY21w
c2V0X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkgewotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLQkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikg
JiYgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8Ci0JCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDAp
KSB7Ci0jZWxzZQotCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNPX0xJTkdFUikgJiYgKHNvLT5z
b19saW5nZXIgPT0gMCkpIHx8Ci0JCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Ci0jZW5k
aWYKLSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0JCQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVM
TCwgMTMpOwotI2VuZGlmCi0JCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxE
X1VTRV9BQk9SVCwKLQkJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOwotCQl9
IGVsc2UgewotI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKLQkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5w
LCBOVUxMLCAxMyk7Ci0jZW5kaWYKLQkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9T
SE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFLAotCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRf
T0ZDTE9TRSk7Ci0JCX0KLQkJLyogVGhlIHNvY2tldCBpcyBub3cgZGV0YWNoZWQsIG5vIG1hdHRl
ciB3aGF0Ci0JCSAqIHRoZSBzdGF0ZSBvZiB0aGUgU0NUUCBhc3NvY2lhdGlvbi4KLQkJICovCi0J
CVNDVFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7Ci0JCS8qIHNhbWUgZm9yIHRoZSByY3Ygb25lcywg
dGhleSBhcmUgb25seQotCQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9zZWxlY3QuCi0JCSAq
LwotCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOwotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykK
LQkJLyogTm93IGRpc2Nvbm5lY3QgKi8KLQkJc28tPnNvX3BjYiA9IE5VTEw7Ci0jZW5kaWYKLQl9
IGVsc2UgewotCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdh
aW47Ci0JCX0KLQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPiA2OTAwMDAKLQlyZXR1cm47Ci0jZWxzZQotCXJldHVybiAoMCk7Ci0jZW5kaWYKLX0KLSNl
bmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotLyogX19Vc2Vyc3BhY2VfXyBpcyBu
b3QgY2FsbGluZyBzY3RwX3NlbmRtICovCi0jZW5kaWYKLSNpZiAhKGRlZmluZWQoX19QYW5kYV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSkKLWludAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0
ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAot
ICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKTsKLQotI2Vsc2UKLXNj
dHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwKLSAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHBy
b2MgKnApOwotCi0jZW5kaWYKLQotaW50Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1zY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgc3Ry
dWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCB0aHJlYWQgKnApCi17Ci0jZWxzZQotc2N0cF9zZW5k
bShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNv
Y2thZGRyICphZGRyLAotICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCkK
LXsKLSNlbmRpZgotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0JaW50IGVycm9yOwotCi0JaW5w
ID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsK
LQkJaWYgKGNvbnRyb2wpIHsKLQkJCXNjdHBfbV9mcmVlbShjb250cm9sKTsKLQkJCWNvbnRyb2wg
PSBOVUxMOwotCQl9Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlzY3RwX21fZnJlZW0obSk7Ci0J
CXJldHVybiAoRUlOVkFMKTsKLQl9Ci0JLyogR290IHRvIGhhdmUgYW4gdG8gYWRkcmVzcyBpZiB3
ZSBhcmUgTk9UIGEgY29ubmVjdGVkIHNvY2tldCAqLwotCWlmICgoYWRkciA9PSBOVUxMKSAmJgot
CSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgfHwKLQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpKSkgewotCQlnb3Rv
IGNvbm5lY3RlZF90eXBlOwotCX0gZWxzZSBpZiAoYWRkciA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFREVTVEFERFJSRVEpOwotCQllcnJvciA9IEVERVNUQUREUlJFUTsKLQkJc2N0cF9tX2ZyZWVt
KG0pOwotCQlpZiAoY29udHJvbCkgewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQkJY29u
dHJvbCA9IE5VTEw7Ci0JCX0KLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotI2lmZGVmIElORVQ2Ci0J
aWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7Ci0JCS8qIG11c3QgYmUgYSB2NCBhZGRy
ZXNzISAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRURFU1RBRERSUkVRKTsKLQkJc2N0cF9tX2ZyZWVtKG0pOwot
CQlpZiAoY29udHJvbCkgewotCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wpOwotCQkJY29udHJvbCA9
IE5VTEw7Ci0JCX0KLQkJZXJyb3IgPSBFREVTVEFERFJSRVE7Ci0JCXJldHVybiAoZXJyb3IpOwot
CX0KLSNlbmRpZgkJCQkvKiBJTkVUNiAqLwotY29ubmVjdGVkX3R5cGU6Ci0JLyogbm93IHdoYXQg
YWJvdXQgY29udHJvbCAqLwotCWlmIChjb250cm9sKSB7Ci0JCWlmIChpbnAtPmNvbnRyb2wpIHsK
LQkJCVNDVFBfUFJJTlRGKCJodWg/IGNvbnRyb2wgc2V0P1xuIik7Ci0JCQlzY3RwX21fZnJlZW0o
aW5wLT5jb250cm9sKTsKLQkJCWlucC0+Y29udHJvbCA9IE5VTEw7Ci0JCX0KLQkJaW5wLT5jb250
cm9sID0gY29udHJvbDsKLQl9Ci0JLyogUGxhY2UgdGhlIGRhdGEgKi8KLQlpZiAoaW5wLT5wa3Qp
IHsKLQkJU0NUUF9CVUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07Ci0JCWlucC0+cGt0X2xhc3Qg
PSBtOwotCX0gZWxzZSB7Ci0JCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07Ci0JfQotCWlm
ICgKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLQkvKiBG
cmVlQlNEIHVzZXMgYSBmbGFnIHBhc3NlZCAqLwotCSAgICAoKGZsYWdzICYgUFJVU19NT1JFVE9D
T01FKSA9PSAwKQotI2Vsc2UKLQkgICAgMQkJCS8qIE9wZW4gQlNEIGRvZXMgbm90IGhhdmUgYW55
ICJtb3JlIHRvIGNvbWUiCi0JCQkJICogaW5kaWNhdGlvbiAqLwotI2VuZGlmCi0JICAgICkgewot
CQkvKgotCQkgKiBub3RlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGlzIGNvZGUgd2lsbCBv
bmx5IGJlIHVzZWQKLQkJICogYnkgT3BlbkJTRC0tIE5ldEJTRCwgRnJlZUJTRCwgYW5kIE1hY09T
IGhhdmUgbWV0aG9kcyBmb3IKLQkJICogcmUtZGVmaW5pbmcgc29zZW5kIHRvIHVzZSB0aGUgc2N0
cF9zb3NlbmQuIE9uZSBjYW4KLQkJICogb3B0aW9uYWxseSBzd2l0Y2ggYmFjayB0byB0aGlzIGNv
ZGUgKGJ5IGNoYW5naW5nIGJhY2sgdGhlCi0JCSAqIGRlZmluaXRpb25zKSBidXQgdGhpcyBpcyBu
b3QgYWR2aXNhYmxlLiBUaGlzIGNvZGUgaXMgdXNlZAotCQkgKiBieSBGcmVlQlNEIHdoZW4gc2Vu
ZGluZyBhIGZpbGUgd2l0aCBzZW5kZmlsZSgpIHRob3VnaC4KLQkJICovCi0JCWludCByZXQ7Ci0K
LQkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9sLCBw
LCBmbGFncyk7Ci0JCWlucC0+cGt0ID0gTlVMTDsKLQkJaW5wLT5jb250cm9sID0gTlVMTDsKLQkJ
cmV0dXJuIChyZXQpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotI2VuZGlmCi0K
LWludAotc2N0cF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBzY3Rw
X2lucGNiICppbnA7Ci0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwot
CWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4p
OwotCX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpKSB7Ci0JCWlmIChMSVNUX0VNUFRZKCZpbnAtPnNjdHBfYXNvY19s
aXN0KSkgewotCQkJLyogTm8gY29ubmVjdGlvbiAqLwotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJcmV0dXJuICgwKTsKLQkJfSBlbHNlIHsKLQkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jOwotCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCi0JCQlzdGNiID0gTElTVF9GSVJT
VCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0JCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwp
OwotCQkJfQotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCWFzb2MgPSAmc3RjYi0+YXNvYzsK
LQkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkg
ewotCQkJCS8qIFdlIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgb3V0IG9mIGhlcmUgKi8KLQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKCgoc28t
PnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgJiYKLQkJCSAgICAgKHNvLT5zb19saW5nZXIg
PT0gMCkpIHx8Ci0JCQkgICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAwKSkgewotI2Vsc2UKLQkJCWlm
ICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJgotCQkJICAgICAoc28tPnNvX2xpbmdl
ciA9PSAwKSkgfHwKLQkJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSB7Ci0jZW5kaWYKLQkJ
CQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0KLQkJCQkgICAgU0NUUF9TVEFURV9DT09LSUVf
V0FJVCkgewotCQkJCQkvKiBMZWZ0IHdpdGggRGF0YSB1bnJlYWQgKi8KLQkJCQkJc3RydWN0IG1i
dWYgKmVycjsKLQotCQkJCQllcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVj
dCBzY3RwX3BhcmFtaGRyKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQkJCQlpZiAoZXJy
KSB7Ci0JCQkJCQkvKgotCQkJCQkJICogRmlsbCBpbiB0aGUgdXNlcgotCQkJCQkJICogaW5pdGlh
dGVkIGFib3J0Ci0JCQkJCQkgKi8KLQkJCQkJCXN0cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKLQot
CQkJCQkJcGggPSBtdG9kKGVyciwgc3RydWN0IHNjdHBfcGFyYW1oZHIgKik7Ci0JCQkJCQlTQ1RQ
X0JVRl9MRU4oZXJyKSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7Ci0JCQkJCQlwaC0+
cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJUKTsKLQkJCQkJ
CXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX0JVRl9MRU4oZXJyKSk7Ci0JCQkJCX0KLQkJ
CQkJc2N0cF9zZW5kX2Fib3J0X3RjYihzdGNiLCBlcnIsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOwotCQkJCX0KLQkJCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykg
PT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFz
b2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCQkJCVNDVFBfU1RBVF9E
RUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCQl9Ci0JCQkJKHZvaWQpc2N0cF9mcmVl
X2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKLQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMyk7Ci0JCQkJLyogTm8gdW5s
b2NrIHRjYiBhc3NvYyBpcyBnb25lICovCi0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWlmIChU
QUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKLQkJCSAgICBUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VudF9xdWV1ZSkgJiYKLQkJCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkg
ewotCQkJCS8qIHRoZXJlIGlzIG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsIHNvIGRvbmUgKi8KLQkJ
CQlpZiAoKCphc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0
ZSkoc3RjYiwgYXNvYykpIHsKLQkJCQkJZ290byBhYm9ydF9hbnl3YXk7Ci0JCQkJfQotCQkJCWlm
ICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSAmJgot
CQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tf
U0VOVCkpIHsKLQkJCQkJLyogb25seSBzZW5kIFNIVVRET1dOIDFzdCB0aW1lIHRocnUgKi8KLQkJ
CQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKLQotCQkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFz
b2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29j
KSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgewotCQkJCQkJU0NUUF9TVEFUX0RF
Q1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOwotCQkJCQl9Ci0JCQkJCVNDVFBfU0VUX1NUQVRF
KGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7Ci0JCQkJCVNDVFBfQ0xFQVJfU1VCU1RB
VEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCQkJc2N0cF9zdG9wX3Rp
bWVyc19mb3Jfc2h1dGRvd24oc3RjYik7Ci0JCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkg
ewotCQkJCQkJbmV0cCA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOwotCQkJCQl9IGVsc2UgewotCQkJ
CQkJbmV0cCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKLQkJCQkJfQotCQkJCQlz
Y3RwX3NlbmRfc2h1dGRvd24oc3RjYixuZXRwKTsKLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV04sCi0JCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldHAp
OwotCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAot
CQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJCQkJc2N0cF9jaHVua19vdXRw
dXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9UMywgU0NUUF9TT19MT0NL
RUQpOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiB3ZSBzdGlsbCBnb3QgKG9y
IGp1c3QgZ290KSBkYXRhIHRvIHNlbmQsCi0JCQkJICogc28gc2V0IFNIVVRET1dOX1BFTkRJTkcK
LQkJCQkgKi8KLQkJCQkvKgotCQkJCSAqIFhYWCBzb2NrZXRzIGRyYWZ0IHNheXMgdGhhdCBTQ1RQ
X0VPRgotCQkJCSAqIHNob3VsZCBiZSBzZW50IHdpdGggbm8gZGF0YS4gY3VycmVudGx5LAotCQkJ
CSAqIHdlIHdpbGwgYWxsb3cgdXNlciBkYXRhIHRvIGJlIHNlbnQgZmlyc3QKLQkJCQkgKiBhbmQg
bW92ZSB0byBTSFVURE9XTi1QRU5ESU5HCi0JCQkJICovCi0JCQkJc3RydWN0IHNjdHBfbmV0cyAq
bmV0cDsKLQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCQkJbmV0cCA9IHN0Y2It
PmFzb2MuYWx0ZXJuYXRlOwotCQkJCX0gZWxzZSB7Ci0JCQkJCW5ldHAgPSBzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb247Ci0JCQkJfQotCi0JCQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFU
RV9TSFVURE9XTl9QRU5ESU5HOwotCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOR1VBUkQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JCQkJCQkgbmV0cCk7Ci0JCQkJ
aWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUp
KHN0Y2IsIGFzb2MpKSB7Ci0JCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9N
U0dfTEVGVDsKLQkJCQl9Ci0JCQkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAm
JgotCQkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgJiYKLQkJCQkgICAgKGFz
b2MtPnN0YXRlICYgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJCQlzdHJ1Y3Qg
bWJ1ZiAqb3BfZXJyOwotCQkJCWFib3J0X2FueXdheToKLQkJCQkJb3BfZXJyID0gc2N0cF9nZW5l
cmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCQlzdGNi
LT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQ
X0xPQ180OwotCQkJCQlzY3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2VyciwgU0NUUF9TT19M
T0NLRUQpOwotCQkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0J
CQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikg
fHwKLQkJCQkJICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9T
SFVURE9XTl9SRUNFSVZFRCkpIHsKLQkJCQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNf
Y3VycmVzdGFiKTsKLQkJCQkJfQotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJCSh2
b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ181KTsK
LQkJCQkJcmV0dXJuICgwKTsKLQkJCQl9IGVsc2UgewotCQkJCQlzY3RwX2NodW5rX291dHB1dChp
bnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ0xPU0lORywgU0NUUF9TT19MT0NLRUQpOwotCQkJ
CX0KLQkJCX0KLQkJCXNvaXNkaXNjb25uZWN0aW5nKHNvKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJ
Lyogbm90IHJlYWNoZWQgKi8KLQl9IGVsc2UgewotCQkvKiBVRFAgbW9kZWwgZG9lcyBub3Qgc3Vw
cG9ydCB0aGlzICovCi0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7
Ci0JCXJldHVybiAoRU9QTk9UU1VQUCk7Ci0JfQotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50
Ci1zY3RwX2ZsdXNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQotewotICAgICAgICAvKgot
CSAqIFdlIHdpbGwganVzdCBjbGVhciBvdXQgdGhlIHZhbHVlcyBhbmQgbGV0Ci0JICogc3Vic2Vx
dWVudCBjbG9zZSBjbGVhciBvdXQgdGhlIGRhdGEsIGlmIGFueS4KLQkgKiBOb3RlIGlmIHRoZSB1
c2VyIGRpZCBhIHNodXRkb3duKFNIVVRfUkQpIHRoZXkKLQkgKiB3aWxsIG5vdCBiZSBhYmxlIHRv
IHJlYWQgdGhlIGRhdGEsIHRoZSBzb2NrZXQKLQkgKiB3aWxsIGJsb2NrIHRoYXQgZnJvbSBoYXBw
ZW5pbmcuCi0JICovCi0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkvKiBG
b3IgdGhlIDEgdG8gbWFueSBtb2RlbCB0aGlzIGRvZXMgbm90aGluZyAqLwotCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSB7Ci0JCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotICAgICAg
ICBpZiAoKGhvdyA9PSBQUlVfRkxVU0hfUkQpIHx8IChob3cgPT0gUFJVX0ZMVVNIX1JEV1IpKSB7
Ci0JCS8qIEZpcnN0IG1ha2Ugc3VyZSB0aGUgc2Igd2lsbCBiZSBoYXBweSwgd2UgZG9uJ3QKLQkJ
ICogdXNlIHRoZXNlIGV4Y2VwdCBtYXliZSB0aGUgY291bnQKLQkJICovCi0JCVNDVFBfSU5QX1dM
T0NLKGlucCk7Ci0JCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQlpbnAtPnNjdHBfZmxhZ3Mg
fD0gU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0NBTlRfUkVBRDsKLQkJU0NUUF9JTlBfUkVBRF9VTkxP
Q0soaW5wKTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlzby0+c29fcmN2LnNiX2NjID0g
MDsKLQkJc28tPnNvX3Jjdi5zYl9tYmNudCA9IDA7Ci0JCXNvLT5zb19yY3Yuc2JfbWIgPSBOVUxM
OwotCX0KLSAgICAgICAgaWYgKChob3cgPT0gUFJVX0ZMVVNIX1dSKSB8fCAoaG93ID09IFBSVV9G
TFVTSF9SRFdSKSkgewotCQkvKiBGaXJzdCBtYWtlIHN1cmUgdGhlIHNiIHdpbGwgYmUgaGFwcHks
IHdlIGRvbid0Ci0JCSAqIHVzZSB0aGVzZSBleGNlcHQgbWF5YmUgdGhlIGNvdW50Ci0JCSAqLwot
CQlzby0+c29fc25kLnNiX2NjID0gMDsKLQkJc28tPnNvX3NuZC5zYl9tYmNudCA9IDA7Ci0JCXNv
LT5zb19zbmQuc2JfbWIgPSBOVUxMOwotCi0JfQotCXJldHVybiAoMCk7Ci19Ci0jZW5kaWYKLQot
aW50Ci1zY3RwX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7Ci0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlm
IChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQot
CVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JLyogRm9yIFVEUCBtb2RlbCB0aGlzIGlzIGEgaW52YWxp
ZCBjYWxsICovCi0JaWYgKCEoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8Ci0JICAgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpKSkgewotCQkvKiBSZXN0b3JlIHRoZSBmbGFncyB0aGF0IHRoZSBzb3NodXRkb3duIHRvb2sg
YXdheS4gKi8KLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNTAyMTE1KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTT0NLQlVGX0xPQ0soJnNvLT5z
b19yY3YpOwotCQlzby0+c29fcmN2LnNiX3N0YXRlICY9IH5TQlNfQ0FOVFJDVk1PUkU7Ci0JCVNP
Q0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLSNlbHNlCi0JCXNvLT5zb19zdGF0ZSAmPSB+U1Nf
Q0FOVFJDVk1PUkU7Ci0jZW5kaWYKLQkJLyogVGhpcyBwcm9jIHdpbGwgd2FrZXVwIGZvciByZWFk
IGFuZCBkbyBub3RoaW5nIChJIGhvcGUpICovCi0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRU9QTk9UU1VQUCk7Ci0JCXJldHVybiAoRU9QTk9UU1VQUCk7Ci0JfSBlbHNlIHsKLQkJLyoK
LQkJICogT2ssIGlmIHdlIHJlYWNoIGhlcmUgaXRzIHRoZSBUQ1AgbW9kZWwgYW5kIGl0IGlzIGVp
dGhlcgotCQkgKiBhIFNIVVRfV1Igb3IgU0hVVF9SRFdSLgotCQkgKiBUaGlzIG1lYW5zIHdlIHB1
dCB0aGUgc2h1dGRvd24gZmxhZyBhZ2FpbnN0IGl0LgotCQkgKi8KLQkJc3RydWN0IHNjdHBfdGNi
ICpzdGNiOwotCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKLQkJc3RydWN0IHNjdHBf
bmV0cyAqbmV0cDsKLQotCQlpZiAoKHNvLT5zb19zdGF0ZSAmCi0JCSAgICAgKFNTX0lTQ09OTkVD
VEVEfFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkcpKSA9PSAwKSB7Ci0JCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlyZXR1cm4gKEVOT1RDT05OKTsKLQkJfQotCQlzb2NhbnRz
ZW5kbW9yZShzbyk7Ci0KLQkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3Qp
OwotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQkvKgotCQkJICogT2ssIHdlIGhpdCB0aGUgY2Fz
ZSB0aGF0IHRoZSBzaHV0ZG93biBjYWxsIHdhcwotCQkJICogbWFkZSBhZnRlciBhbiBhYm9ydCBv
ciBzb21ldGhpbmcuIE5vdGhpbmcgdG8gZG8KLQkJCSAqIG5vdy4KLQkJCSAqLwotCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOwotCQlhc29jID0gJnN0Y2ItPmFzb2M7Ci0JCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RB
VEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KLQkJaWYgKChTQ1RQX0dF
VF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSAmJgotCQkgICAgKFNDVFBf
R0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkgJiYKLQkJICAgIChT
Q1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX09QRU4pKSB7Ci0JCQkvKiBJZiB3ZSBh
cmUgbm90IGluIG9yIGJlZm9yZSBFU1RBQkxJU0hFRCwgdGhlcmUgaXMKLQkJCSAqIG5vIHByb3Rv
Y29sIGFjdGlvbiByZXF1aXJlZC4KLQkJCSAqLwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJcmV0dXJuICgwKTsKLQkJfQotCQlpZiAoc3Rj
Yi0+YXNvYy5hbHRlcm5hdGUpIHsKLQkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKLQkJ
fSBlbHNlIHsKLQkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247Ci0JCX0K
LQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pICYmCi0JCSAg
ICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKLQkJICAgIFRBSUxRX0VNUFRZKCZh
c29jLT5zZW50X3F1ZXVlKSAmJgotCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkp
IHsKLQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNv
bXBsZXRlKShzdGNiLCBhc29jKSkgewotCQkJCWdvdG8gYWJvcnRfYW55d2F5OwotCQkJfQotCQkJ
LyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KLQkJ
CVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJCVNDVFBfU0VUX1NU
QVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7Ci0JCQlTQ1RQX0NMRUFSX1NVQlNU
QVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7Ci0JCQlzY3RwX3N0b3BfdGlt
ZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKLQkJCXNjdHBfc2VuZF9zaHV0ZG93bihzdGNiLCBuZXRw
KTsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOLAotCQkJICAg
ICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKLQkJfSBlbHNlIHsKLQkJ
CS8qCi0JCQkgKiBXZSBzdGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRhIHRvIHNlbmQsIHNvIHNl
dAotCQkJICogU0hVVERPV05fUEVORElORy4KLQkJCSAqLwotCQkJU0NUUF9BRERfU1VCU1RBVEUo
YXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKLQkJCWlmICgoKmFzb2MtPnNzX2Z1
bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgewot
CQkJCVNDVFBfQUREX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCk7
Ci0JCQl9Ci0JCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCi0JCQkgICAg
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCi0JCQkgICAgKGFzb2MtPnN0YXRlICYg
U0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgewotCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7
Ci0JCQlhYm9ydF9hbnl3YXk6Ci0JCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOwotCQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3Rf
YWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzY7Ci0JCQkJc2N0
cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCQkJCSAgb3Bf
ZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0JCX0KLQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
U0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7Ci0JCS8qIFhYWDogV2h5
IGRvIHRoaXMgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBzdGlsbCBkYXRhIHF1ZXVlZD8gKi8K
LQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcs
IFNDVFBfU09fTE9DS0VEKTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi0vKgotICogY29waWVzIGEgInVz
ZXIiIHByZXNlbnRhYmxlIGFkZHJlc3MgYW5kIHJlbW92ZXMgZW1iZWRkZWQgc2NvcGUsIGV0Yy4K
LSAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yCi0gKi8KLXN0YXRpYyB1aW50MzJf
dAotc2N0cF9maWxsX3VzZXJfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc3MsIHN0
cnVjdCBzb2NrYWRkciAqc2EpCi17Ci0jaWZkZWYgSU5FVDYKLSNpZiBkZWZpbmVkKFNDVFBfRU1C
RURERURfVjZfU0NPUEUpCi0Jc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OwotCi0Jc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopc2N0cF9yZWNvdmVyX3Njb3BlKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
c2EsCi0JICAgICZsc2E2KTsKLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQlt
ZW1jcHkoc3MsIHNhLCBzYS0+c2FfbGVuKTsKLSNlbHNlCi0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5
KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZfSU5FVDoKLQkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
Y2FzZSBBRl9JTkVUNjoKLQkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JY2Fz
ZSBBRl9DT05OOgotCQltZW1jcHkoc3MsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4p
KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQkvKiBUU05IICovCi0JCWJyZWFrOwot
CX0KLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLQotCi0vKgotICogTk9URTogYXNzdW1lcyBh
ZGRyIGxvY2sgaXMgaGVsZAotICovCi1zdGF0aWMgc2l6ZV90Ci1zY3RwX2ZpbGxfdXBfYWRkcmVz
c2VzX3ZyZihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkJICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotCQkJICAgc2l6ZV90IGxpbWl0LAotCQkJICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ug
KnNhcywKLQkJCSAgIHVpbnQzMl90IHZyZl9pZCkKLXsKLQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBf
aWZuOwotCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7Ci0Jc2l6ZV90IGFjdHVhbDsKLQlpbnQg
bG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVUKQotCWludCBpcHY0X2xvY2FsX3Njb3Bl
LCBpcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCWludCBsb2Nh
bF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotCWludCBjb25uX2FkZHJfbGVnYWw7Ci0jZW5kaWYKLQlzdHJ1Y3Qg
c2N0cF92cmYgKnZyZjsKLQotCWFjdHVhbCA9IDA7Ci0JaWYgKGxpbWl0IDw9IDApCi0JCXJldHVy
biAoYWN0dWFsKTsKLQotCWlmIChzdGNiKSB7Ci0JCS8qIFR1cm4gb24gYWxsIHRoZSBhcHByb3By
aWF0ZSBzY29wZSAqLwotCQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJh
Y2tfc2NvcGU7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQlpcHY0X2xvY2FsX3Njb3BlID0gc3RjYi0+
YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOwotCQlpcHY0X2FkZHJfbGVnYWwgPSBzdGNiLT5h
c29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbDsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVDYpCi0J
CWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKLQkJc2l0ZV9zY29w
ZSA9IHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZTsKLQkJaXB2Nl9hZGRyX2xlZ2FsID0gc3Rj
Yi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWw7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCi0JCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRy
X2xlZ2FsOwotI2VuZGlmCi0JfSBlbHNlIHsKLQkJLyogVXNlIGdlbmVyaWMgdmFsdWVzIGZvciBl
bmRwb2ludHMuICovCi0JCWxvb3BiYWNrX3Njb3BlID0gMTsKLSNpZiBkZWZpbmVkKElORVQpCi0J
CWlwdjRfbG9jYWxfc2NvcGUgPSAxOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQkJbG9j
YWxfc2NvcGUgPSAxOwotCQlzaXRlX3Njb3BlID0gMTsKLSNlbmRpZgotCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKLSNpZiBkZWZpbmVkKElORVQ2KQot
CQkJaXB2Nl9hZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkKLQkJCWlm
IChTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotCQkJ
fSBlbHNlIHsKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAxOwotCQkJfQotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsKLSNlbmRpZgotCQl9
IGVsc2UgewotI2lmIGRlZmluZWQoSU5FVDYpCi0JCQlpcHY2X2FkZHJfbGVnYWwgPSAwOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKLQkJCQljb25uX2FkZHJfbGVnYWwgPSAxOwot
I2lmIGRlZmluZWQoSU5FVCkKLQkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwotI2VuZGlmCi0JCQl9
IGVsc2UgewotCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDA7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQkJ
CWlwdjRfYWRkcl9sZWdhbCA9IDE7Ci0jZW5kaWYKLQkJCX0KLSNlbHNlCi0jaWYgZGVmaW5lZChJ
TkVUKQotCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotI2VuZGlmCi0JCX0KLQl9Ci0J
dnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOwotCWlmICh2cmYgPT0gTlVMTCkgewotCQlyZXR1
cm4gKDApOwotCX0KLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRB
TEwpIHsKLQkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikg
ewotCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgotCQkJICAgIFNDVFBfSUZOX0lTX0lG
VF9MT09QKHNjdHBfaWZuKSkgewotCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2Nv
cGUgbm90IHNldCAqLwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJTElTVF9GT1JFQUNIKHNjdHBf
aWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7Ci0JCQkJaWYgKHN0Y2IpIHsKLQkJ
CQkJLyoKLQkJCQkJICogRm9yIHRoZSBCT1VORC1BTEwgY2FzZSwgdGhlIGxpc3QKLQkJCQkJICog
YXNzb2NpYXRlZCB3aXRoIGEgVENCIGlzIEFsd2F5cwotCQkJCQkgKiBjb25zaWRlcmVkIGEgcmV2
ZXJzZSBsaXN0Li4gaS5lLgotCQkJCQkgKiBpdCBsaXN0cyBhZGRyZXNzZXMgdGhhdCBhcmUgTk9U
Ci0JCQkJCSAqIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uLiBJZiB0aGlzCi0JCQkJCSAqIGlzIG9u
ZSBvZiB0aG9zZSB3ZSBtdXN0IHNraXAgaXQuCi0JCQkJCSAqLwotCQkJCQlpZiAoc2N0cF9pc19h
ZGRyX3Jlc3RyaWN0ZWQoc3RjYiwKLQkJCQkJCQkJICAgIHNjdHBfaWZhKSkgewotCQkJCQkJY29u
dGludWU7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJc3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5z
YV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotCQkJCQlpZiAoaXB2
NF9hZGRyX2xlZ2FsKSB7Ci0JCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCQkJ
c2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKLQkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNf
YWRkciA9PSAwKSB7Ci0JCQkJCQkJLyoKLQkJCQkJCQkgKiB3ZSBza2lwIHVuc3BlY2lmZWQKLQkJ
CQkJCQkgKiBhZGRyZXNzZXMKLQkJCQkJCQkgKi8KLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0K
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5w
LT5pcF9pbnAuaW5wLmlucF9jcmVkLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+
c2luX2FkZHIpICE9IDApIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLSNlbmRpZgotCQkJ
CQkJaWYgKChpcHY0X2xvY2FsX3Njb3BlID09IDApICYmCi0JCQkJCQkgICAgKElONF9JU1BSSVZB
VEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9
Ci0jaWZkZWYgSU5FVDYKLQkJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNihz
aW4sIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FzKTsKLQkJCQkJCQkoKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKilzYXMpLT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJCQkJc2FzID0g
KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KSk7Ci0JCQkJCQkJYWN0dWFsICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KTsKLQkJCQkJCX0gZWxzZSB7Ci0jZW5kaWYKLQkJCQkJCQltZW1jcHkoc2FzLCBzaW4sIHNp
emVvZigqc2luKSk7Ci0JCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9y
dCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3Jh
Z2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKCpzaW4pKTsKLQkJCQkJCQlhY3R1YWwgKz0gc2l6
ZW9mKCpzaW4pOwotI2lmZGVmIElORVQ2Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlmIChhY3R1
YWwgPj0gbGltaXQpIHsKLQkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7Ci0JCQkJCQl9Ci0JCQkJCX0g
ZWxzZSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlicmVhazsKLSNlbmRpZgotI2lm
ZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkg
ewotCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotI2lmIGRlZmluZWQoU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQotCQkJCQkJc3RydWN0IHNv
Y2thZGRyX2luNiBsc2E2OwotI2VuZGlmCi0JCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNz
LnNpbjY7Ci0JCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRk
cikpIHsKLQkJCQkJCQkvKgotCQkJCQkJCSAqIHdlIHNraXAgdW5zcGVjaWZlZAotCQkJCQkJCSAq
IGFkZHJlc3NlcwotCQkJCQkJCSAqLwotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCi0JCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lu
cC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9h
ZGRyKSAhPSAwKSB7Ci0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlm
IChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCQlpZiAo
bG9jYWxfc2NvcGUgPT0gMCkKLQkJCQkJCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChTQ1RQX0VN
QkVEREVEX1Y2X1NDT1BFKQotCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsK
LSNpZmRlZiBTQ1RQX0tBTUUKLQkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0g
MCkKLQkJCQkJCQkJCS8qCi0JCQkJCQkJCQkgKiBiYWQgbGluawotCQkJCQkJCQkJICogbG9jYWwK
LQkJCQkJCQkJCSAqIGFkZHJlc3MKLQkJCQkJCQkJCSAqLwotCQkJCQkJCQkJY29udGludWU7Ci0j
ZWxzZQotCQkJCQkJCQlsc2E2ID0gKnNpbjY7Ci0JCQkJCQkJCWlmIChpbjZfcmVjb3ZlcnNjb3Bl
KCZsc2E2LAotCQkJCQkJCQkJCSAgICAgJmxzYTYuc2luNl9hZGRyLAotCQkJCQkJCQkJCSAgICAg
TlVMTCkpCi0JCQkJCQkJCQkvKgotCQkJCQkJCQkJICogYmFkIGxpbmsKLQkJCQkJCQkJCSAqIGxv
Y2FsCi0JCQkJCQkJCQkgKiBhZGRyZXNzCi0JCQkJCQkJCQkgKi8KLQkJCQkJCQkJY29udGludWU7
Ci0JCQkJCQkJCXNpbjYgPSAmbHNhNjsKLSNlbmRpZgkJCQkvKiBTQ1RQX0tBTUUgKi8KLQkJCQkJ
CQl9Ci0jZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotCQkJCQkJfQotCQkJCQkJ
aWYgKChzaXRlX3Njb3BlID09IDApICYmCi0JCQkJCQkgICAgKElONl9JU19BRERSX1NJVEVMT0NB
TCgmc2luNi0+c2luNl9hZGRyKSkpIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJCQkJ
CW1lbWNweShzYXMsIHNpbjYsIHNpemVvZigqc2luNikpOwotCQkJCQkJKChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopc2FzKS0+c2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQkJCQkJc2FzID0g
KHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNpemVvZigqc2luNikp
OwotCQkJCQkJYWN0dWFsICs9IHNpemVvZigqc2luNik7Ci0JCQkJCQlpZiAoYWN0dWFsID49IGxp
bWl0KSB7Ci0JCQkJCQkJcmV0dXJuIChhY3R1YWwpOwotCQkJCQkJfQotCQkJCQl9IGVsc2Ugewot
CQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JCQkJY2FzZSBBRl9DT05OOgotCQkJCQlpZiAoY29ubl9hZGRyX2xl
Z2FsKSB7Ci0JCQkJCQltZW1jcHkoc2FzLCAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm4sIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
KXNhcyktPnNjb25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJCQlzYXMgPSAoc3RydWN0
IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKSk7Ci0JCQkJCQlhY3R1YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsK
LQkJCQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKLQkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7Ci0J
CQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotI2VuZGlmCi0J
CQkJZGVmYXVsdDoKLQkJCQkJLyogVFNOSCAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0J
CX0KLQl9IGVsc2UgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0jaWZuZGVmIEhBVkVf
U0FfTEVOCi0JCXVpbnQzMl90IHNhX2xlbiA9IDA7Ci0jZW5kaWYKLQotCQlMSVNUX0ZPUkVBQ0go
bGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQlpZiAoc3Rj
YikgewotCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkg
ewotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoc2N0cF9maWxsX3VzZXJfYWRk
cmVzcyhzYXMsICZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKSkKLQkJCQljb250aW51ZTsKLQkJCXN3
aXRjaCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
CQljYXNlIEFGX0lORVQ6Ci0JCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYXMpLT5zaW5fcG9y
dCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0J
CQljYXNlIEFGX0lORVQ2OgotCQkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhcyktPnNpbjZf
cG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkoKHN0cnVjdCBzb2NrYWRkcl9j
b25uICopc2FzKS0+c2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNl
bmRpZgotCQkJZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWZk
ZWYgSEFWRV9TQV9MRU4KLQkJCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSgoY2Fk
ZHJfdClzYXMgKwotCQkJCQkJCSAgbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9sZW4pOwotCQkJ
YWN0dWFsICs9IGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfbGVuOwotI2Vsc2UKLQkJCXN3aXRj
aCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQlj
YXNlIEFGX0lORVQ6Ci0JCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0J
CQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlz
YV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQljYXNlIEFGX0NPTk46Ci0JCQkJc2FfbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCQlicmVhazsKLSNlbmRpZgotCQkJ
ZGVmYXVsdDoKLQkJCQkvKiBUU05IICovCi0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQlzYXMgPSAoc3Ry
dWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2FfbGVuKTsKLQkJCWFjdHVh
bCArPSBzYV9sZW47Ci0jZW5kaWYKLQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKLQkJCQlyZXR1
cm4gKGFjdHVhbCk7Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIChhY3R1YWwpOwotfQotCi1zdGF0
aWMgc2l6ZV90Ci1zY3RwX2ZpbGxfdXBfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
Ci0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0LAotICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2FzKQotewotCXNpemVfdCBzaXplID0gMDsKLSNpZmRlZiBT
Q1RQX01WUkYKLQl1aW50MzJfdCBpZDsKLSNlbmRpZgotCi0JU0NUUF9JUElfQUREUl9STE9DSygp
OwotI2lmZGVmIFNDVFBfTVZSRgotLyoKLSAqIEZJWCBNRTogPz8gdGhpcyBXSUxMIHJlcG9ydCBk
dXBsaWNhdGUgYWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCi0gKiBpbiBtb3JlIHRoYW4gb25lIFZS
Ri4KLSAqLwotCS8qIGZpbGwgdXAgYWRkcmVzc2VzIGZvciBhbGwgVlJGcyBvbiB0aGUgZW5kcG9p
bnQgKi8KLQlmb3IgKGlkID0gMDsgKGlkIDwgaW5wLT5udW1fdnJmcykgJiYgKHNpemUgPCBsaW1p
dCk7IGlkKyspIHsKLQkJc2l6ZSArPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzX3ZyZihpbnAsIHN0
Y2IsIGxpbWl0LCBzYXMsCi0JCQkJCQkgICBpbnAtPm1fdnJmX2lkc1tpZF0pOwotCQlzYXMgPSAo
c3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZSk7Ci0JfQotI2Vs
c2UKLQkvKiBmaWxsIHVwIGFkZHJlc3NlcyBmb3IgdGhlIGVuZHBvaW50J3MgZGVmYXVsdCB2cmYg
Ki8KLQlzaXplID0gc2N0cF9maWxsX3VwX2FkZHJlc3Nlc192cmYoaW5wLCBzdGNiLCBsaW1pdCwg
c2FzLAotCQkJCQkgIGlucC0+ZGVmX3ZyZl9pZCk7Ci0jZW5kaWYKLQlTQ1RQX0lQSV9BRERSX1JV
TkxPQ0soKTsKLQlyZXR1cm4gKHNpemUpOwotfQotCi0vKgotICogTk9URTogYXNzdW1lcyBhZGRy
IGxvY2sgaXMgaGVsZAotICovCi1zdGF0aWMgaW50Ci1zY3RwX2NvdW50X21heF9hZGRyZXNzZXNf
dnJmKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQzMl90IHZyZl9pZCkKLXsKLQlpbnQgY250
ID0gMDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZiA9IE5VTEw7Ci0KLQkvKgotCSAqIEluIGJvdGgg
c3ViLXNldCBib3VuZCBhbiBib3VuZF9hbGwgY2FzZXMgd2UgcmV0dXJuIHRoZSBNQVhJTVVNCi0J
ICogbnVtYmVyIG9mIGFkZHJlc3NlcyB0aGF0IHlvdSBDT1VMRCBnZXQuIEluIHJlYWxpdHkgdGhl
IHN1Yi1zZXQKLQkgKiBib3VuZCBtYXkgaGF2ZSBhbiBleGNsdXNpb24gbGlzdCBmb3IgYSBnaXZl
biBUQ0IgT1IgaW4gdGhlCi0JICogYm91bmQtYWxsIGNhc2UgYSBUQ0IgbWF5IE5PVCBpbmNsdWRl
IHRoZSBsb29wYmFjayBvciBvdGhlcgotCSAqIGFkZHJlc3NlcyBhcyB3ZWxsLgotCSAqLwotCXZy
ZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJcmV0dXJu
ICgwKTsKLQl9Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxM
KSB7Ci0JCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47Ci0JCXN0cnVjdCBzY3RwX2lmYSAqc2N0
cF9pZmE7Ci0KLQkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lm
bikgewotCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRf
aWZhKSB7Ci0JCQkJLyogQ291bnQgdGhlbSBpZiB0aGV5IGFyZSB0aGUgcmlnaHQgdHlwZSAqLwot
CQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5F
VAotCQkJCWNhc2UgQUZfSU5FVDoKLSNpZmRlZiBJTkVUNgotCQkJCQlpZiAoc2N0cF9pc19mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkKLQkJCQkJCWNudCAr
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJCWVsc2UKLQkJCQkJCWNudCArPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLSNlbHNlCi0JCQkJCWNudCArPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKTsKLSNlbmRpZgotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQkJY2FzZSBBRl9DT05OOgotCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJ
CQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0K
LQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRk
cikgewotCQkJc3dpdGNoIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lm
ZGVmIElORVQKLQkJCWNhc2UgQUZfSU5FVDoKLSNpZmRlZiBJTkVUNgotCQkJCWlmIChzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKQotCQkJCQlj
bnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJCWVsc2UKLQkJCQkJY250ICs9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2Vsc2UKLQkJCQljbnQgKz0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElO
RVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNik7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0J
CQljYXNlIEFGX0NPTk46Ci0JCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7
Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K
LQl9Ci0JcmV0dXJuIChjbnQpOwotfQotCi1zdGF0aWMgaW50Ci1zY3RwX2NvdW50X21heF9hZGRy
ZXNzZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCkKLXsKLQlpbnQgY250ID0gMDsKLSNpZmRlZiBT
Q1RQX01WUkYKLQlpbnQgaWQ7Ci0jZW5kaWYKLQotCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLSNp
ZmRlZiBTQ1RQX01WUkYKLS8qCi0gKiBGSVggTUU6ID8/IHRoaXMgV0lMTCBjb3VudCBkdXBsaWNh
dGUgYWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCi0gKiBpbiBtb3JlIHRoYW4gb25lIFZSRi4KLSAq
LwotCS8qIGNvdW50IGFkZHJlc3NlcyBmb3IgYWxsIFZSRnMgb24gdGhlIGVuZHBvaW50ICovCi0J
Zm9yIChpZCA9IDA7IGlkIDwgaW5wLT5udW1fdnJmczsgaWQrKykgewotCQljbnQgKz0gc2N0cF9j
b3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+bV92cmZfaWRzW2lkXSk7Ci0JfQotI2Vs
c2UKLQkvKiBjb3VudCBhZGRyZXNzZXMgZm9yIHRoZSBlbmRwb2ludCdzIGRlZmF1bHQgVlJGICov
Ci0JY250ID0gc2N0cF9jb3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+ZGVmX3ZyZl9p
ZCk7Ci0jZW5kaWYKLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKGNudCk7Ci19
Ci0KLXN0YXRpYyBpbnQKLXNjdHBfZG9fY29ubmVjdF94KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpvcHR2YWwsCi0JCSAgc2l6ZV90IG9wdHNpemUsIHZv
aWQgKnAsIGludCBkZWxheSkKLXsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVhdF9sb2NrX29u
ID0gMDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCXN0cnVjdCBzb2NrYWRkciAq
c2E7Ci0JdW5zaWduZWQgaW50IG51bV92NiA9IDAsIG51bV92NCA9IDAsICp0b3RhZGRycCwgdG90
YWRkcjsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0JaW50IGJhZF9hZGRyZXNzZXMgPSAwOwotCXNjdHBf
YXNzb2NfdCAqYV9pZDsKLQotCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiQ29ubmVjdHggY2Fs
bGVkXG4iKTsKLQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkgJiYKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkp
IHsKLQkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCi0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVBRERSSU5VU0UpOwotCQlyZXR1cm4gKEVBRERSSU5VU0UpOwotCX0KLQotCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKLQkgICAgKHNjdHBf
aXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgewotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCi0JaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgewotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlz
dGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0JCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQl9Ci0JaWYgKHN0Y2IpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0
Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOwotCQlyZXR1cm4gKEVB
TFJFQURZKTsKLQl9Ci0JU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQlTQ1RQX0FTT0NfQ1JFQVRF
X0xPQ0soaW5wKTsKLQljcmVhdF9sb2NrX29uID0gMTsKLQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVMVCk7Ci0JCWVycm9y
ID0gRUZBVUxUOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCXRvdGFkZHJwID0gKHVuc2lnbmVkIGlu
dCAqKW9wdHZhbDsKLQl0b3RhZGRyID0gKnRvdGFkZHJwOwotCXNhID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSh0b3RhZGRycCArIDEpOwotCXN0Y2IgPSBzY3RwX2Nvbm5lY3R4X2hlbHBlcl9maW5kKGlu
cCwgc2EsICZ0b3RhZGRyLCAmbnVtX3Y0LCAmbnVtX3Y2LCAmZXJyb3IsICh1bnNpZ25lZCBpbnQp
KG9wdHNpemUgLSBzaXplb2YoaW50KSksICZiYWRfYWRkcmVzc2VzKTsKLQlpZiAoKHN0Y2IgIT0g
TlVMTCkgfHwgYmFkX2FkZHJlc3NlcykgewotCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcg
dXAgYW4gYXNzb2NpYXRpb24gKi8KLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJ
Y3JlYXRfbG9ja19vbiA9IDA7Ci0JCWlmIChzdGNiKQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQlpZiAoYmFkX2FkZHJlc3NlcyA9PSAwKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQllcnJv
ciA9IEVBTFJFQURZOwotCQl9Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0jaWZkZWYgSU5FVDYKLQlp
ZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgJiYK
LQkgICAgKG51bV92NiA+IDApKSB7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7
Ci0JfQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYm
Ci0JICAgIChudW1fdjQgPiAwKSkgewotCQlzdHJ1Y3QgaW42cGNiICppbnA2OwotCi0JCWlucDYg
PSAoc3RydWN0IGluNnBjYiAqKWlucDsKLQkJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsK
LQkJCS8qCi0JCQkgKiBpZiBJUFY2X1Y2T05MWSBmbGFnLCBpZ25vcmUgY29ubmVjdGlvbnMgZGVz
dGluZWQKLQkJCSAqIHRvIGEgdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgotCQkJICovCi0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlnb3RvIG91dF9ub3c7Ci0JCX0KLQl9
Ci0jZW5kaWYJCQkJLyogSU5FVDYgKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1VOQk9VTkQpID09Ci0JICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpIHsKLQkJLyog
QmluZCBhIGVwaGVtZXJhbCBwb3J0ICovCi0JCWVycm9yID0gc2N0cF9pbnBjYl9iaW5kKHNvLCBO
VUxMLCBOVUxMLCBwKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlnb3RvIG91dF9ub3c7Ci0JCX0KLQl9
Ci0KLQkvKiBGSVggTUU6IGRvIHdlIHdhbnQgdG8gcGFzcyBpbiBhIHZyZiBvbiB0aGUgY29ubmVj
dCBjYWxsPyAqLwotCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKLQotCi0JLyogV2UgYXJlIEdP
T0QgdG8gZ28gKi8KLQlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgc2EsICZlcnJvciwgMCwg
dnJmX2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnByZV9vcGVuX3N0
cmVhbV9jb3VudCwKLQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wb3J0LAot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAot
CQkJICAgICAgIChzdHJ1Y3QgdGhyZWFkICopcAotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykK
LQkJCSAgICAgICAoUEtUSFJFQUQpcAotI2Vsc2UKLQkJCSAgICAgICAoc3RydWN0IHByb2MgKilw
Ci0jZW5kaWYKLQkJKTsKLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCS8qIEdhayEgbm8gbWVtb3J5
ICovCi0JCWdvdG8gb3V0X25vdzsKLQl9Ci0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB7Ci0JCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3Mg
fD0gU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOwotCQkvKiBTZXQgdGhlIGNvbm5lY3RlZCBmbGFn
IHNvIHdlIGNhbiBxdWV1ZSBkYXRhICovCi0JCXNvaXNjb25uZWN0aW5nKHNvKTsKLQl9Ci0JU0NU
UF9TRVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpOwotCS8qIG1v
dmUgdG8gc2Vjb25kIGFkZHJlc3MgKi8KLQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRl
ZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRy
X3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0JCWJyZWFrOwotI2VuZGlmCi0j
aWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiko
KGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlicmVhazsKLSNl
bmRpZgotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQotCWVycm9yID0gMDsKLQlzY3RwX2Nvbm5l
Y3R4X2hlbHBlcl9hZGQoc3RjYiwgc2EsICh0b3RhZGRyLTEpLCAmZXJyb3IpOwotCS8qIEZpbGwg
aW4gdGhlIHJldHVybiBpZCAqLwotCWlmIChlcnJvcikgewotCQkodm9pZClzY3RwX2ZyZWVfYXNz
b2MoaW5wLCBzdGNiLCBTQ1RQX1BDQkZSRUVfRk9SQ0UsCi0JCSAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ183KTsKLQkJZ290byBvdXRfbm93Owot
CX0KLQlhX2lkID0gKHNjdHBfYXNzb2NfdCAqKW9wdHZhbDsKLQkqYV9pZCA9IHNjdHBfZ2V0X2Fz
c29jaWQoc3RjYik7Ci0KLQkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMg
Zm9yIHRoZSBhc3NvYyAqLwotCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhpbnAsIHN0Y2Ip
OwotCi0JaWYgKGRlbGF5KSB7Ci0JCS8qIGRvaW5nIGRlbGF5ZWQgY29ubmVjdGlvbiAqLwotCQlz
dGNiLT5hc29jLmRlbGF5ZWRfY29ubmVjdGlvbiA9IDE7Ci0JCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uKTsKLQl9IGVsc2UgewotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNv
Yy50aW1lX2VudGVyZWQpOwotCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NP
X0xPQ0tFRCk7Ci0JfQotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLSBvdXRfbm93OgotCWlmIChj
cmVhdF9sb2NrX29uKSB7Ci0JCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7Ci0JfQotCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNkZWZpbmUgU0NU
UF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhc3NvY19pZCkgeyBcCi0JaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fFwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7IFwKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsg
XAotCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7IFwKLQkJaWYgKHN0
Y2IpIHsgXAotCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsgXAotCQl9IFwKLQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOyBcCi0JfSBlbHNlIGlmIChhc3NvY19pZCA+IFNDVFBfQUxMX0FTU09DKSB7IFwK
LQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAx
KTsgXAotCQlpZiAoc3RjYiA9PSBOVUxMKSB7IFwKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7IFwKLQkJCWVycm9y
ID0gRU5PRU5UOyBcCi0JCQlicmVhazsgXAotCQl9IFwKLQl9IGVsc2UgeyBcCi0JCXN0Y2IgPSBO
VUxMOyBcCi0JfSBcCi19Ci0KLQotI2RlZmluZSBTQ1RQX0NIRUNLX0FORF9DQVNUKGRlc3RwLCBz
cmNwLCB0eXBlLCBzaXplKSB7XAotCWlmIChzaXplIDwgc2l6ZW9mKHR5cGUpKSB7IFwKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsgXAotCQllcnJvciA9IEVJTlZBTDsgXAotCQlicmVhazsgXAotCX0gZWxzZSB7IFwK
LQkJZGVzdHAgPSAodHlwZSAqKXNyY3A7IFwKLQl9IFwKLX0KLQotI2lmIGRlZmluZWQoX19QYW5k
YV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLSNlbHNlCi1zdGF0aWMgaW50Ci0j
ZW5kaWYKLXNjdHBfZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAq
b3B0dmFsLCBzaXplX3QgKm9wdHNpemUsCi0JICAgIHZvaWQgKnApIHsKLQlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wID0gTlVMTDsKLQlpbnQgZXJyb3IsIHZhbCA9IDA7Ci0Jc3RydWN0IHNjdHBfdGNi
ICpzdGNiID0gTlVMTDsKLQotCWlmIChvcHR2YWwgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIEVJ
TlZBTDsKLQl9Ci0JZXJyb3IgPSAwOwotCi0Jc3dpdGNoIChvcHRuYW1lKSB7Ci0JY2FzZSBTQ1RQ
X05PREVMQVk6Ci0JY2FzZSBTQ1RQX0FVVE9DTE9TRToKLQljYXNlIFNDVFBfRVhQTElDSVRfRU9S
OgotCWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoKLQljYXNlIFNDVFBfRElTQUJMRV9GUkFHTUVOVFM6
Ci0JY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUjoKLQljYXNlIFNDVFBfVVNFX0VYVF9S
Q1ZJTkZPOgotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlzd2l0Y2ggKG9wdG5hbWUpIHsKLQkJ
Y2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgotCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9fRlJBR01FTlQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9JX1dBTlRfTUFQUEVEX1Y0X0FERFI6Ci0JCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9BVVRPX0FTQ09ORjoKLQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VOREFMTCkgewotCQkJCS8qIG9ubHkgdmFsaWQgZm9yIGJvdW5kIGFsbCBzb2NrZXRzICovCi0J
CQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUT19BU0NP
TkYpOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwot
CQkJCWdvdG8gZmxhZ3Nfb3V0OwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FWFBMSUNJ
VF9FT1I6Ci0JCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19F
WFBMSUNJVF9FT1IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9OT0RFTEFZOgotCQkJdmFsID0g
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSk7Ci0JCQlicmVh
azsKLQkJY2FzZSBTQ1RQX1VTRV9FWFRfUkNWSU5GTzoKLQkJCXZhbCA9IHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKTsKLQkJCWJyZWFrOwotCQljYXNl
IFNDVFBfQVVUT0NMT1NFOgotCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX0FVVE9DTE9TRSkpCi0JCQkJdmFsID0gVElDS1NfVE9fU0VDKGlucC0+c2N0cF9lcC5h
dXRvX2Nsb3NlX3RpbWUpOwotCQkJZWxzZQotCQkJCXZhbCA9IDA7Ci0JCQlicmVhazsKLQotCQlk
ZWZhdWx0OgotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOwotCQkJZXJyb3IgPSBFTk9QUk9UT09QVDsKLQkJ
fSAvKiBlbmQgc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpICovCi0JCWlmICgqb3B0c2l6ZSA8IHNp
emVvZih2YWwpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQlm
bGFnc19vdXQ6Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJaWYgKGVycm9yID09IDApIHsK
LQkJCS8qIHJldHVybiB0aGUgb3B0aW9uIHZhbHVlICovCi0JCQkqKGludCAqKW9wdHZhbCA9IHZh
bDsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHZhbCk7Ci0JCX0KLQkJYnJlYWs7Ci0gICAgICAgIGNh
c2UgU0NUUF9HRVRfUEFDS0VUX0xPRzoKLQl7Ci0jaWZkZWYgIFNDVFBfUEFDS0VUX0xPR0dJTkcK
LQkJdWludDhfdCAqdGFyZ2V0OwotCQlpbnQgcmV0OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
dGFyZ2V0LCBvcHR2YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKLQkJcmV0ID0gc2N0cF9jb3B5X291
dF9wYWNrZXRfbG9nKHRhcmdldCAsIChpbnQpKm9wdHNpemUpOwotCQkqb3B0c2l6ZSA9IHJldDsK
LSNlbHNlCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQllcnJvciA9IEVPUE5PVFNVUFA7Ci0jZW5kaWYK
LQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SRVVTRV9QT1JUOgotCXsKLQkJdWludDMyX3QgKnZh
bHVlOwotCi0JCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkp
IHsKLQkJCS8qIENhbid0IGRvIHRoaXMgZm9yIGEgMS1tIHNvY2tldCAqLwotCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2
YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7Ci0JCSp2YWx1ZSA9IHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQz
Ml90KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX1BPSU5UOgot
CXsKLQkJdWludDMyX3QgKnZhbHVlOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9w
dHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKLQkJKnZhbHVlID0gaW5wLT5wYXJ0aWFsX2RlbGl2
ZXJ5X3BvaW50OwotCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToKLQl7Ci0JCXVpbnQzMl90ICp2YWx1ZTsK
LQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6
ZSk7Ci0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lO
VEVSTEVBVkUpKSB7Ci0JCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfSU5URVJMRUFWRV9TVFJNUykpIHsKLQkJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMjsK
LQkJCX0gZWxzZSB7Ci0JCQkJKnZhbHVlID0gU0NUUF9GUkFHX0xFVkVMXzE7Ci0JCQl9Ci0JCX0g
ZWxzZSB7Ci0JCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMDsKLQkJfQotCQkqb3B0c2l6ZSA9
IHNpemVvZih1aW50MzJfdCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfSU5URVJMRUFWSU5H
X1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlp
ZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0
ZWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwot
CQkJCWlmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCkgewotCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSAx
OwotCQkJCX0gZWxzZSB7Ci0JCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7Ci0JCQkJfQotCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfQ01UX09OX09GRjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICph
djsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29j
X2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Muc2N0
cF9jbXRfb25fb2ZmOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKLQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfY210X29uX29mZjsKLQkJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpv
cHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsK
LQl9Ci0JY2FzZSBTQ1RQX1BMVUdHQUJMRV9DQzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYt
PmFzc29jX2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFz
b2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQ
UE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewot
CQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3Rw
X2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1bGU7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwot
CQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQot
CQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9DQ19PUFRJT046
Ci0JewotCQlzdHJ1Y3Qgc2N0cF9jY19vcHRpb24gKmNjX29wdDsKLQotCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGNjX29wdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24sICpvcHRzaXplKTsK
LQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCk7
Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQl9IGVsc2Ugewot
CQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uID09
IE5VTEwpIHsKLQkJCQllcnJvciA9IEVOT1RTVVA7Ci0JCQl9IGVsc2UgewotCQkJCWVycm9yID0g
KCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29wdGlvbikoc3RjYiwg
MCwgY2Nfb3B0KTsKLQkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jY19vcHRpb24p
OwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfUExVR0dBQkxFX1NTOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2
OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2Nf
aWQpOwotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5zdHJl
YW1fc2NoZWR1bGluZ19tb2R1bGU7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxz
ZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8
Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+c2N0cF9lcC5zY3Rw
X2RlZmF1bHRfc3NfbW9kdWxlOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlp
ZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfU1NfVkFMVUU6Ci0JewotCQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYs
IG9wdHZhbCwgc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCWlmICgo
YXYtPnN0cmVhbV9pZCA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgfHwKLQkJCSAgICAoc3Rj
Yi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19nZXRfdmFsdWUoc3RjYiwgJnN0Y2ItPmFzb2Ms
ICZzdGNiLT5hc29jLnN0cm1vdXRbYXYtPnN0cmVhbV9pZF0sCi0JCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdi0+c3RyZWFtX3ZhbHVlKSA8IDApKSB7
Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0gZWxzZSB7Ci0JCQkJ
Km9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlKTsKLQkJCX0KLQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCS8qIENhbid0IGdldCBzdHJlYW0g
dmFsdWUgd2l0aG91dCBhc3NvY2lhdGlvbiAqLwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0g
RUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX0FERFJfTEVOOgotCXsK
LQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJZXJyb3Ig
PSBFSU5WQUw7Ci0jaWZkZWYgSU5FVAotCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IEFGX0lORVQp
IHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJ
ZXJyb3IgPSAwOwotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlpZiAoYXYtPmFzc29jX3Zh
bHVlID09IEFGX0lORVQ2KSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7Ci0JCQllcnJvciA9IDA7Ci0JCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSBBRl9DT05OKSB7Ci0JCQlhdi0+
YXNzb2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotCQkJZXJyb3IgPSAw
OwotCQl9Ci0jZW5kaWYKLQkJaWYgKGVycm9yKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCX0gZWxzZSB7
Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJ
YnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfQVNTT0NfTlVNQkVSOgotCXsKLQkJdWludDMyX3Qg
KnZhbHVlLCBjbnQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50
MzJfdCwgKm9wdHNpemUpOwotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCS8qIENhbid0IGRvIHRoaXMg
Zm9yIGEgMS0xIHNvY2tldCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQlicmVhazsKLQkJfQotCQljbnQgPSAwOwotCQlMSVNUX0ZPUkVBQ0goc3Rj
YiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgewotCQkJY250Kys7Ci0JCX0K
LQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkqdmFsdWUgPSBjbnQ7Ci0JCSpvcHRzaXplID0g
c2l6ZW9mKHVpbnQzMl90KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfQVNTT0NfSURf
TElTVDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX2lkcyAqaWRzOwotCQl1aW50MzJfdCBhdDsK
LQkJc2l6ZV90IGxpbWl0OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaWRzLCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2Fzc29jX2lkcywgKm9wdHNpemUpOwotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwot
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCS8q
IENhbid0IGRvIHRoaXMgZm9yIGEgMS0xIHNvY2tldCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlicmVhazsKLQkJfQotCQlhdCA9IDA7Ci0JCWxp
bWl0ID0gKCpvcHRzaXplIC0gc2l6ZW9mKHVpbnQzMl90KSkgLyBzaXplb2Yoc2N0cF9hc3NvY190
KTsKLQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxp
c3QpIHsKLQkJCWlmIChhdCA8IGxpbWl0KSB7Ci0JCQkJaWRzLT5nYWlkc19hc3NvY19pZFthdCsr
XSA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JCQkJaWYgKGF0ID09IDApIHsKLQkJCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBl
bHNlIHsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJYnJlYWs7Ci0J
CQl9Ci0JCX0KLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQlpZiAoZXJyb3IgPT0gMCkgewot
CQkJaWRzLT5nYWlkc19udW1iZXJfb2ZfaWRzID0gYXQ7Ci0JCQkqb3B0c2l6ZSA9ICgoYXQgKiBz
aXplb2Yoc2N0cF9hc3NvY190KSkgKyBzaXplb2YodWludDMyX3QpKTsKLQkJfQotCQlicmVhazsK
LQl9Ci0JY2FzZSBTQ1RQX0NPTlRFWFQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAq
YXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3Nv
Y19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Mu
Y29udGV4dDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYt
PmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2NvbnRleHQ7Ci0JCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9y
ID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9
IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9WUkZfSUQ6Ci0JewotCQl1aW50MzJfdCAqZGVmYXVsdF92cmZpZDsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGRlZmF1bHRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXpl
KTsKLQkJKmRlZmF1bHRfdnJmaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JCSpvcHRzaXplID0gc2l6
ZW9mKHVpbnQzMl90KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfQVNPQ19WUkY6Ci0J
ewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqaWQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FT
VChpZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGlkLT5hc3NvY19pZCk7Ci0JCWlmIChzdGNiID09IE5VTEwp
IHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQl9IGVsc2UgewotCQkJaWQt
PmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy52cmZfaWQ7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9H
RVRfVlJGX0lEUzoKLQl7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCWludCBzaXpfbmVlZGVkOwotCQl1
aW50MzJfdCAqdnJmX2lkczsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZyZl9pZHMsIG9wdHZh
bCwgdWludDMyX3QsICpvcHRzaXplKTsKLQkJc2l6X25lZWRlZCA9IGlucC0+bnVtX3ZyZnMgKiBz
aXplb2YodWludDMyX3QpOwotCQlpZiAoKm9wdHNpemUgPCBzaXpfbmVlZGVkKSB7Ci0JCQllcnJv
ciA9IEVJTlZBTDsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweSh2cmZfaWRz
LCBpbnAtPm1fdnJmX2lkcywgc2l6X25lZWRlZCk7Ci0JCQkqb3B0c2l6ZSA9IHNpel9uZWVkZWQ7
Ci0JCX0KLSNlbHNlCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQllcnJvciA9IEVPUE5PVFNVUFA7Ci0j
ZW5kaWYKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9HRVRfTk9OQ0VfVkFMVUVTOgotCXsKLQkJ
c3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyAqZ252OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoZ252LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldF9ub25jZV92YWx1ZXMsICpvcHRzaXplKTsK
LQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBnbnYtPmduX2Fzc29jX2lkKTsKLQotCQlpZiAo
c3RjYikgewotCQkJZ252LT5nbl9wZWVyc190YWcgPSBzdGNiLT5hc29jLnBlZXJfdnRhZzsKLQkJ
CWdudi0+Z25fbG9jYWxfdGFnID0gc3RjYi0+YXNvYy5teV92dGFnOwotCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOwotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0X25vbmNlX3Zh
bHVlcyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05O
OwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfREVMQVlFRF9TQUNLOgotCXsKLQkJc3Ry
dWN0IHNjdHBfc2Fja19pbmZvICpzYWNrOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8sICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBzYWNrLT5zYWNrX2Fzc29jX2lkKTsKLQkJaWYgKHN0Y2IpIHsKLQkJCXNh
Y2stPnNhY2tfZGVsYXkgPSBzdGNiLT5hc29jLmRlbGF5ZWRfYWNrOwotCQkJc2Fjay0+c2Fja19m
cmVxID0gc3RjYi0+YXNvYy5zYWNrX2ZyZXE7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpIHx8Ci0JCQkgICAgKHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mp
KSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlzYWNrLT5zYWNrX2RlbGF5ID0gVElD
S1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9SRUNW
XSk7Ci0JCQkJc2Fjay0+c2Fja19mcmVxID0gaW5wLT5zY3RwX2VwLnNjdHBfc2Fja19mcmVxOwot
CQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
LQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJ
Km9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19pbmZvKTsKLQkJfQotCQlicmVhazsK
LQl9Ci0JY2FzZSBTQ1RQX0dFVF9TTkRCVUZfVVNFOgotCXsKLQkJc3RydWN0IHNjdHBfc29ja3N0
YXQgKnNzOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3MsIG9wdHZhbCwgc3RydWN0IHNjdHBf
c29ja3N0YXQsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcy0+c3Nf
YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlzcy0+c3NfdG90YWxfc25kYnVmID0gc3Rj
Yi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsKLQkJCXNzLT5zc190b3RhbF9yZWN2X2J1
ZiA9IChzdGNiLT5hc29jLnNpemVfb25fcmVhc21fcXVldWUgKwotCQkJCQkJIHN0Y2ItPmFzb2Mu
c2l6ZV9vbl9hbGxfc3RyZWFtcyk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0
c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zb2Nrc3RhdCk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
Tk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05OOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNl
IFNDVFBfTUFYX0JVUlNUOgotCXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDkwMDAwMAotCQl1aW50OF90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKLQotCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOwotCQlpZiAoaW5wLT5zY3RwX2VwLm1heF9idXJzdCA8IDI1NikgewotCQkJKnZh
bHVlID0gaW5wLT5zY3RwX2VwLm1heF9idXJzdDsKLQkJfSBlbHNlIHsKLQkJCSp2YWx1ZSA9IDI1
NTsKLQkJfQotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVp
bnQ4X3QpOwotI2Vsc2UKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRz
aXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlm
IChzdGNiKSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKLQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYt
PmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2VwLm1heF9idXJzdDsKLQkJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfTUFYU0VHOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCQlp
bnQgb3ZoOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+
YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlhdi0+YXNzb2NfdmFsdWUgPSBzY3RwX2dl
dF9mcmFnX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkg
ewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7Ci0JCQkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOwot
CQkJCX0gZWxzZSB7Ci0JCQkJCW92aCA9IFNDVFBfTUVEX1Y0X09WRVJIRUFEOwotCQkJCX0KLQkJ
CQlpZiAoaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPj0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQpCi0J
CQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7Ci0JCQkJZWxzZQotCQkJCQlhdi0+YXNzb2NfdmFsdWUg
PSBpbnAtPnNjdHBfZnJhZ19wb2ludCAtIG92aDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9
Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0dFVF9TVEFU
X0xPRzoKLQkJZXJyb3IgPSBzY3RwX2ZpbGxfc3RhdF9sb2cob3B0dmFsLCBvcHRzaXplKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX0VWRU5UUzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNj
cmliZSAqZXZlbnRzOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZlbnRzLCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSwgKm9wdHNpemUpOwotCQltZW1zZXQoZXZlbnRzLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJlKSk7Ci0JCVNDVFBfSU5QX1JMT0NL
KGlucCk7Ci0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNW
REFUQUlPRVZOVCkpCi0JCQlldmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCA9IDE7Ci0KLQkJaWYg
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKQot
CQkJZXZlbnRzLT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50ID0gMTsKLQotCQlpZiAoc2N0cF9pc19m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVCkpCi0JCQlldmVudHMt
PnNjdHBfYWRkcmVzc19ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpKQotCQkJZXZlbnRzLT5zY3RwX3NlbmRf
ZmFpbHVyZV9ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKSkKLQkJCWV2ZW50cy0+c2N0cF9wZWVyX2Vycm9yX2V2ZW50
ID0gMTsKLQotCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVD
VlNIVVRET1dORVZOVCkpCi0JCQlldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQgPSAxOwotCi0J
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpKQot
CQkJZXZlbnRzLT5zY3RwX3BhcnRpYWxfZGVsaXZlcnlfZXZlbnQgPSAxOwotCi0JCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCkpCi0JCQll
dmVudHMtPnNjdHBfYWRhcHRhdGlvbl9sYXllcl9ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5UKSkKLQkJCWV2ZW50cy0+c2N0
cF9hdXRoZW50aWNhdGlvbl9ldmVudCA9IDE7Ci0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKQotCQkJZXZlbnRzLT5zY3RwX3NlbmRlcl9kcnlf
ZXZlbnQgPSAxOwotCi0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19TVFJFQU1fUkVTRVRFVk5UKSkKLQkJCWV2ZW50cy0+c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQg
PSAxOwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2V2ZW50X3N1YnNjcmliZSk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQURBUFRB
VElPTl9MQVlFUjoKLQl7Ci0JCXVpbnQzMl90ICp2YWx1ZTsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7Ci0KLQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKLQkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNh
dG9yOwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQz
Ml90KTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdfU0VROgotCXsK
LQkJdWludDMyX3QgKnZhbHVlOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZh
bCwgdWludDMyX3QsICpvcHRzaXplKTsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJKnZhbHVl
ID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfc2VxdWVuY2VfZGVidWc7Ci0JCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJKm9wdHNpemUgPSBzaXplb2YodWludDMyX3QpOwotCQlicmVhazsKLQl9Ci0J
Y2FzZSBTQ1RQX0dFVF9MT0NBTF9BRERSX1NJWkU6Ci0JewotCQl1aW50MzJfdCAqdmFsdWU7Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUp
OwotCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkqdmFsdWUgPSBzY3RwX2NvdW50X21heF9hZGRy
ZXNzZXMoaW5wKTsKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkqb3B0c2l6ZSA9IHNpemVv
Zih1aW50MzJfdCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX1JFTU9URV9BRERSX1NJ
WkU6Ci0JewotCQl1aW50MzJfdCAqdmFsdWU7Ci0JCXNpemVfdCBzaXplOwotCQlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50
MzJfdCwgKm9wdHNpemUpOwotCQkvKiBGSVhNRSBNVDogY2hhbmdlIHRvIHNjdHBfYXNzb2NfdmFs
dWU/ICovCi0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgKHNjdHBfYXNzb2NfdCkgKnZhbHVl
KTsKLQotCQlpZiAoc3RjYikgewotCQkJc2l6ZSA9IDA7Ci0JCQkvKiBDb3VudCB0aGUgc2l6ZXMg
Ki8KLQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsK
LQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVU
Ci0JCQkJY2FzZSBBRl9JTkVUOgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmIChzY3RwX2lzX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJCQlzaXpl
ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCXNp
emUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQkJCX0KLSNlbHNlCi0JCQkJCXNp
emUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQkJYnJlYWs7Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCXNpemUgKz0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQljYXNlIEFGX0NPTk46Ci0JCQkJCXNpemUgKz0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlkZWZhdWx0
OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CQkqdmFsdWUgPSAodWludDMyX3QpIHNpemU7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJf
dCk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7Ci0JCQllcnJvciA9IEVOT1RDT05OOwot
CQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX1BFRVJfQUREUkVTU0VTOgotCQkvKgot
CQkgKiBHZXQgdGhlIGFkZHJlc3MgaW5mb3JtYXRpb24sIGFuIGFycmF5IGlzIHBhc3NlZCBpbiB0
bwotCQkgKiBmaWxsIHVwIHdlIHBhY2sgaXQuCi0JCSAqLwotCXsKLQkJc2l6ZV90IGNwc3osIGxl
ZnQ7Ci0JCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICpzYXM7Ci0JCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKLQkJc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzICpzYWRkcjsKLQotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHNhZGRyLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywgKm9wdHNp
emUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhZGRyLT5zZ2V0X2Fzc29jX2lkKTsK
LQotCQlpZiAoc3RjYikgewotCQkJbGVmdCA9ICgqb3B0c2l6ZSkgLSBzaXplb2Yoc3RydWN0IHNj
dHBfZ2V0YWRkcmVzc2VzKTsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFk
ZHJlc3Nlcyk7Ci0JCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikmc2FkZHItPmFk
ZHJbMF07Ci0KLQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25l
eHQpIHsKLQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRl
ZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVUOgotI2lmZGVmIElORVQ2Ci0JCQkJCWlmIChzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJ
CQljcHN6ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJCQl9IGVsc2UgewotCQkJ
CQkJY3BzeiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJCQl9Ci0jZWxzZQotCQkJ
CQljcHN6ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQkJYnJlYWs7
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCWNwc3ogPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJY3BzeiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVs
dDoKLQkJCQkJY3BzeiA9IDA7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAoY3BzeiA9PSAw
KSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCQlpZiAobGVmdCA8IGNwc3opIHsKLQkJCQkJLyog
bm90IGVub3VnaCByb29tLiAqLwotCQkJCQlicmVhazsKLQkJCQl9Ci0jaWYgZGVmaW5lZChJTkVU
KSAmJiBkZWZpbmVkKElORVQ2KQotCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgJiYKLQkJCQkgICAgKG5ldC0+cm8uX2xfYWRk
ci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkpIHsKLQkJCQkJLyogTXVzdCBtYXAgdGhlIGFkZHJl
c3MgKi8KLQkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNigmbmV0LT5yby5fbF9hZGRyLnNpbiwKLQkJ
CQkJCQkgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYXMpOwotCQkJCX0gZWxzZSB7Ci0JCQkJ
CW1lbWNweShzYXMsICZuZXQtPnJvLl9sX2FkZHIsIGNwc3opOwotCQkJCX0KLSNlbHNlCi0JCQkJ
bWVtY3B5KHNhcywgJm5ldC0+cm8uX2xfYWRkciwgY3Bzeik7Ci0jZW5kaWYKLQkJCQkoKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKXNhcyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0KLQkJCQlzYXMg
PSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgY3Bzeik7Ci0JCQkJ
bGVmdCAtPSBjcHN6OwotCQkJCSpvcHRzaXplICs9IGNwc3o7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9y
ID0gRU5PRU5UOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX0xPQ0FMX0FERFJF
U1NFUzoKLQl7Ci0JCXNpemVfdCBsaW1pdCwgYWN0dWFsOwotCQlzdHJ1Y3Qgc29ja2FkZHJfc3Rv
cmFnZSAqc2FzOwotCQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKnNhZGRyOwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc2FkZHIsIG9wdHZhbCwgc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCAq
b3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2FkZHItPnNnZXRfYXNzb2Nf
aWQpOwotCi0JCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSZzYWRkci0+YWRkclsw
XTsKLQkJbGltaXQgPSAqb3B0c2l6ZSAtIHNpemVvZihzY3RwX2Fzc29jX3QpOwotCQlhY3R1YWwg
PSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzKGlucCwgc3RjYiwgbGltaXQsIHNhcyk7Ci0JCWlmIChz
dGNiKSB7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0KLQkJKm9wdHNpemUgPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpICsgYWN0dWFsOwotCQlicmVhazsKLQl9Ci0JY2Fz
ZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAq
cGFkZHJwOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRk
cjsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBhZGRycCwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIHBhZGRycC0+c3BwX2Fzc29jX2lkKTsKLQotI2lmIGRlZmluZWQoSU5F
VCkgJiYgZGVmaW5lZChJTkVUNikKLQkJaWYgKHBhZGRycC0+c3BwX2FkZHJlc3Muc3NfZmFtaWx5
ID09IEFGX0lORVQ2KSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQlzaW42
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLQkJCWlmIChJ
TjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJf
c2luKCZzaW5fc3RvcmUsIHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNp
bl9zdG9yZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFk
ZHJwLT5zcHBfYWRkcmVzczsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNv
Y2thZGRyICopJnBhZGRycC0+c3BwX2FkZHJlc3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3Ry
dWN0IHNvY2thZGRyICopJnBhZGRycC0+c3BwX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2Ig
IT0gTlVMTCkgewotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2Ug
ewotCQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBf
YWRkcigpIHdpbAotCQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMg
bG9uZyBhcyB0aGUgbG9ja2VkCi0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRD
Qi4uIGFrYSBOVUxMLgotCQkJICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9S
RUYoaW5wKTsKLQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFk
ZHIsICZuZXQsIE5VTEwsIE5VTEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBf
SU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChu
ZXQgPT0gTlVMTCkpIHsKLSNpZmRlZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFG
X0lORVQpIHsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCXNpbiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJ
TkFERFJfQU5ZKSB7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0j
ZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikg
ewotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCQlzaW42ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyOwotCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVs
c2UKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9m
YW1pbHkgPT0gQUZfQ09OTikgewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQot
CQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4t
PnNjb25uX2FkZHIgIT0gTlVMTCkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJ
CX0gZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJ
fQotCi0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCS8qIEFwcGxpZXMgdG8gdGhlIHNwZWNpZmlj
IGFzc29jaWF0aW9uICovCi0JCQlwYWRkcnAtPnNwcF9mbGFncyA9IDA7Ci0JCQlpZiAobmV0ICE9
IE5VTEwpIHsKLQkJCQlwYWRkcnAtPnNwcF9oYmludGVydmFsID0gbmV0LT5oZWFydF9iZWF0X2Rl
bGF5OwotCQkJCXBhZGRycC0+c3BwX3BhdGhtYXhyeHQgPSBuZXQtPmZhaWx1cmVfdGhyZXNob2xk
OwotCQkJCXBhZGRycC0+c3BwX3BhdGhtdHUgPSBuZXQtPm10dTsKLQkJCQlzd2l0Y2ggKG5ldC0+
cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCQkJY2FzZSBBRl9JTkVU
OgotCQkJCQlwYWRkcnAtPnNwcF9wYXRobXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotCQkJ
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJ
cGFkZHJwLT5zcHBfcGF0aG10dSAtPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQkJYnJlYWs7
Ci0jZW5kaWYKLQkJCQlkZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJLyogZ2V0IGZs
YWdzIGZvciBIQiAqLwotCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikg
ewotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRElTQUJMRTsKLQkJCQl9IGVsc2Ug
ewotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRU5BQkxFOwotCQkJCX0KLQkJCQkv
KiBnZXQgZmxhZ3MgZm9yIFBNVFUgKi8KLQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX05PX1BNVFVEKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9ESVNB
QkxFOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9F
TkFCTEU7Ci0JCQkJfQotCQkJCWlmIChuZXQtPmRzY3AgJiAweDAxKSB7Ci0JCQkJCXBhZGRycC0+
c3BwX2RzY3AgPSBuZXQtPmRzY3AgJiAweGZjOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBT
UFBfRFNDUDsKLQkJCQl9Ci0jaWZkZWYgSU5FVDYKLQkJCQlpZiAoKG5ldC0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCi0JCQkJICAgIChuZXQtPmZsb3dsYWJlbCAmIDB4
ODAwMDAwMDApKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2lwdjZfZmxvd2xhYmVsID0gbmV0LT5mbG93
bGFiZWwgJiAweDAwMGZmZmZmOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSVBWNl9G
TE9XTEFCRUw7Ci0JCQkJfQotI2VuZGlmCi0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJICogTm8g
ZGVzdGluYXRpb24gc28gcmV0dXJuIGRlZmF1bHQKLQkJCQkgKiB2YWx1ZQotCQkJCSAqLwotCQkJ
CXBhZGRycC0+c3BwX3BhdGhtYXhyeHQgPSBzdGNiLT5hc29jLmRlZl9uZXRfZmFpbHVyZTsKLQkJ
CQlwYWRkcnAtPnNwcF9wYXRobXR1ID0gMDsKLQkJCQlpZiAoc3RjYi0+YXNvYy5kZWZhdWx0X2Rz
Y3AgJiAweDAxKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2RzY3AgPSBzdGNiLT5hc29jLmRlZmF1bHRf
ZHNjcCAmIDB4ZmM7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9EU0NQOwotCQkJCX0K
LSNpZmRlZiBJTkVUNgotCQkJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsICYgMHg4
MDAwMDAwMCkgewotCQkJCQlwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCA9IHN0Y2ItPmFzb2Mu
ZGVmYXVsdF9mbG93bGFiZWwgJiAweDAwMGZmZmZmOwotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8
PSBTUFBfSVBWNl9GTE9XTEFCRUw7Ci0JCQkJfQotI2VuZGlmCi0JCQkJLyogZGVmYXVsdCBzZXR0
aW5ncyBzaG91bGQgYmUgdGhlc2UgKi8KLQkJCQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24o
aW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET05PVF9IRUFSVEJFQVQpKSB7Ci0JCQkJCXBhZGRy
cC0+c3BwX2ZsYWdzIHw9IFNQUF9IQl9ESVNBQkxFOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXBhZGRy
cC0+c3BwX2ZsYWdzIHw9IFNQUF9IQl9FTkFCTEU7Ci0JCQkJfQotCQkJCWlmIChzY3RwX3N0Y2Jf
aXNfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCkpIHsK
LQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0RJU0FCTEU7Ci0JCQkJfSBlbHNl
IHsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BNVFVEX0VOQUJMRTsKLQkJCQl9Ci0J
CQkJcGFkZHJwLT5zcHBfaGJpbnRlcnZhbCA9IHN0Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheTsK
LQkJCX0KLQkJCXBhZGRycC0+c3BwX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsK
LQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAocGFkZHJwLT5zcHBf
YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJLyogVXNlIGVuZHBvaW50IGRl
ZmF1bHRzICovCi0JCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlwYWRkcnAtPnNwcF9wYXRo
bWF4cnh0ID0gaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQlwYWRkcnAtPnNwcF9o
YmludGVydmFsID0gVElDS1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3Nb
U0NUUF9USU1FUl9IRUFSVEJFQVRdKTsKLQkJCQlwYWRkcnAtPnNwcF9hc3NvY19pZCA9IFNDVFBf
RlVUVVJFX0FTU09DOwotCQkJCS8qIGdldCBpbnAncyBkZWZhdWx0ICovCi0JCQkJaWYgKGlucC0+
c2N0cF9lcC5kZWZhdWx0X2RzY3AgJiAweDAxKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2RzY3AgPSBp
bnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwICYgMHhmYzsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3Mg
fD0gU1BQX0RTQ1A7Ci0JCQkJfQotI2lmZGVmIElORVQ2Ci0JCQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKLQkJCQkgICAgKGlucC0+c2N0cF9lcC5k
ZWZhdWx0X2Zsb3dsYWJlbCAmIDB4ODAwMDAwMDApKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2lwdjZf
Zmxvd2xhYmVsID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsK
LQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0lQVjZfRkxPV0xBQkVMOwotCQkJCX0KLSNl
bmRpZgotCQkJCS8qIGNhbid0IHJldHVybiB0aGlzICovCi0JCQkJcGFkZHJwLT5zcHBfcGF0aG10
dSA9IDA7Ci0KLQkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X0RPTk9UX0hFQVJUQkVBVCkpIHsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0VO
QUJMRTsKLQkJCQl9IGVsc2UgewotCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRElT
QUJMRTsKLQkJCQl9Ci0JCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9G
TEFHU19ET19OT1RfUE1UVUQpKSB7Ci0JCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRV
RF9FTkFCTEU7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX1BN
VFVEX0RJU0FCTEU7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlp
ZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJw
YXJhbXMpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfR0VUX1BFRVJfQUREUl9JTkZP
OgotCXsKLQkJc3RydWN0IHNjdHBfcGFkZHJpbmZvICpwYWRkcmk7Ci0JCXN0cnVjdCBzY3RwX25l
dHMgKm5ldDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lmIGRlZmluZWQoSU5FVCkgJiYg
ZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKLSNlbmRpZgot
Ci0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QocGFkZHJpLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3BhZGRy
aW5mbywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHBhZGRyaS0+c3Bp
bmZvX2Fzc29jX2lkKTsKLQotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJ
aWYgKHBhZGRyaS0+c3BpbmZvX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKikmcGFkZHJpLT5zcGluZm9fYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBF
RCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNp
bjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJpLT5zcGluZm9fYWRkcmVz
czsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRy
aS0+c3BpbmZvX2FkZHJlc3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopJnBhZGRyaS0+c3BpbmZvX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkg
ewotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyog
V2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdp
bAotCQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0
aGUgbG9ja2VkCi0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBO
VUxMLgotCQkJICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsK
LQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQs
IE5VTEwsIE5VTEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RFQ1Jf
UkVGKGlucCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCAhPSBO
VUxMKSkgewotCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkg
ewotCQkJCS8qIEl0J3MgdW5jb25maXJtZWQgKi8KLQkJCQlwYWRkcmktPnNwaW5mb19zdGF0ZSA9
IFNDVFBfVU5DT05GSVJNRUQ7Ci0JCQl9IGVsc2UgaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBf
QUREUl9SRUFDSEFCTEUpIHsKLQkJCQkvKiBJdCdzIGFjdGl2ZSAqLwotCQkJCXBhZGRyaS0+c3Bp
bmZvX3N0YXRlID0gU0NUUF9BQ1RJVkU7Ci0JCQl9IGVsc2UgewotCQkJCS8qIEl0J3MgaW5hY3Rp
dmUgKi8KLQkJCQlwYWRkcmktPnNwaW5mb19zdGF0ZSA9IFNDVFBfSU5BQ1RJVkU7Ci0JCQl9Ci0J
CQlwYWRkcmktPnNwaW5mb19jd25kID0gbmV0LT5jd25kOwotCQkJcGFkZHJpLT5zcGluZm9fc3J0
dCA9IG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUOwotCQkJcGFkZHJpLT5zcGluZm9fcnRv
ID0gbmV0LT5SVE87Ci0JCQlwYWRkcmktPnNwaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29j
aWQoc3RjYik7Ci0JCQlwYWRkcmktPnNwaW5mb19tdHUgPSBuZXQtPm10dTsKLQkJCXN3aXRjaCAo
YWRkci0+c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQkJY2FzZSBBRl9JTkVUOgot
CQkJCXBhZGRyaS0+c3BpbmZvX210dSAtPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKLQkJCQlicmVh
azsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVDYpCi0JCQljYXNlIEFGX0lORVQ2OgotCQkJCXBh
ZGRyaS0+c3BpbmZvX210dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQlicmVhazsKLSNlbmRp
ZgotCQkJZGVmYXVsdDoKLQkJCQlicmVhazsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRyaW5mbyk7Ci0JCX0gZWxz
ZSB7Ci0JCQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQkJfQotCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7Ci0JCQllcnJvciA9IEVOT0VOVDsKLQkJfQotCQli
cmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1BDQl9TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9wY2Jp
bmZvICpzcGNiOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3BjYiwgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9wY2JpbmZvLCAqb3B0c2l6ZSk7Ci0JCXNjdHBfZmlsbF9wY2JpbmZvKHNwY2IpOwotCQkq
b3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wY2JpbmZvKTsKLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9TVEFUVVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBz
Y3RwX3N0YXR1cyAqc3N0YXQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3RhdCwgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9zdGF0dXMsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBzc3RhdC0+c3N0YXRfYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCXNzdGF0
LT5zc3RhdF9zdGF0ZSA9IHNjdHBfbWFwX2Fzc29jX3N0YXRlKHN0Y2ItPmFzb2Muc3RhdGUpOwot
CQlzc3RhdC0+c3N0YXRfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlzc3Rh
dC0+c3N0YXRfcnduZCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLQkJc3N0YXQtPnNzdGF0X3Vu
YWNrZGF0YSA9IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQ7Ci0JCS8qCi0JCSAqIFdlIGNhbid0
IGluY2x1ZGUgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0bwotCQkgKiB0aGUgc29ja2V0
IGxheWVyLiBPbmx5IHRoaW5ncyBpbiBxdWV1ZS4KLQkJICovCi0JCXNzdGF0LT5zc3RhdF9wZW5k
ZGF0YSA9IChzdGNiLT5hc29jLmNudF9vbl9yZWFzbV9xdWV1ZSArCi0JCQkJCSBzdGNiLT5hc29j
LmNudF9vbl9hbGxfc3RyZWFtcyk7Ci0KLQotCQlzc3RhdC0+c3N0YXRfaW5zdHJtcyA9IHN0Y2It
PmFzb2Muc3RyZWFtaW5jbnQ7Ci0JCXNzdGF0LT5zc3RhdF9vdXRzdHJtcyA9IHN0Y2ItPmFzb2Mu
c3RyZWFtb3V0Y250OwotCQlzc3RhdC0+c3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IHNjdHBf
Z2V0X2ZyYWdfcG9pbnQoc3RjYiwgJnN0Y2ItPmFzb2MpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0J
CW1lbWNweSgmc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCi0JCSAgICAgICAm
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAotCQkgICAgICAgKChz
dHJ1Y3Qgc29ja2FkZHIgKikoJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xf
YWRkcikpLT5zYV9sZW4pOwotI2Vsc2UKLQkJaWYgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbi0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJbWVtY3B5KCZz
c3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVzcywKLQkJCSAgICAgICAmc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAotCQkJICAgICAgIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKLQkJfSBlbHNlIHsKLQkJCW1lbWNweSgmc3N0YXQtPnNzdGF0X3By
aW1hcnkuc3BpbmZvX2FkZHJlc3MsCi0JCQkgICAgICAgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbi0+cm8uX2xfYWRkciwKLQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
NikpOwotCQl9Ci0jZW5kaWYKLQkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
OwotCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9f
YWRkcmVzcyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7Ci0JCS8qCi0JCSAqIEFnYWluIHRoZSB1
c2VyIGNhbiBnZXQgaW5mbyBmcm9tIHNjdHBfY29uc3RhbnRzLmgKLQkJICogZm9yIHdoYXQgdGhl
IHN0YXRlIG9mIHRoZSBuZXR3b3JrIGlzLgotCQkgKi8KLQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgewotCQkJLyogSXQncyB1bmNvbmZpcm1lZCAqLwotCQkJ
c3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9VTkNPTkZJUk1FRDsKLQkJ
fSBlbHNlIGlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7Ci0JCQkv
KiBJdCdzIGFjdGl2ZSAqLwotCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0g
U0NUUF9BQ1RJVkU7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBJdCdzIGluYWN0aXZlICovCi0JCQlzc3Rh
dC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOwotCQl9Ci0JCXNz
dGF0LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19jd25kID0gbmV0LT5jd25kOwotCQlzc3RhdC0+c3N0
YXRfcHJpbWFyeS5zcGluZm9fc3J0dCA9IG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUOwot
CQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fcnRvID0gbmV0LT5SVE87Ci0JCXNzdGF0LT5z
c3RhdF9wcmltYXJ5LnNwaW5mb19tdHUgPSBuZXQtPm10dTsKLQkJc3dpdGNoIChzdGNiLT5hc29j
LnByaW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7Ci0jaWYgZGVm
aW5lZChJTkVUKQotCQljYXNlIEFGX0lORVQ6Ci0JCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGlu
Zm9fbXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKElORVQ2KQotCQljYXNlIEFGX0lORVQ2OgotCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnku
c3BpbmZvX210dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRl
ZmF1bHQ6Ci0JCQlicmVhazsKLQkJfQotCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYXNz
b2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXR1cyk7Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfUlRPSU5GTzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3J0b2luZm8gKnNydG87Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzcnRvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3J0b2luZm8s
ICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcnRvLT5zcnRvX2Fzc29j
X2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJc3J0by0+c3J0b19pbml0aWFsID0gc3RjYi0+YXNv
Yy5pbml0aWFsX3J0bzsKLQkJCXNydG8tPnNydG9fbWF4ID0gc3RjYi0+YXNvYy5tYXhydG87Ci0J
CQlzcnRvLT5zcnRvX21pbiA9IHN0Y2ItPmFzb2MubWlucnRvOwotCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChzcnRvLT5zcnRvX2Fzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJc3J0by0+c3J0b19p
bml0aWFsID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfcnRvOwotCQkJCXNydG8tPnNydG9fbWF4ID0g
aW5wLT5zY3RwX2VwLnNjdHBfbWF4cnRvOwotCQkJCXNydG8tPnNydG9fbWluID0gaW5wLT5zY3Rw
X2VwLnNjdHBfbWlucnRvOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7
Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAo
ZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfcnRvaW5mbyk7
Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9USU1FT1VUUzoKLQl7Ci0JCXN0cnVjdCBz
Y3RwX3RpbWVvdXRzICpzdGltbzsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHN0aW1vLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX3RpbWVvdXRzLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc3RpbW8tPnN0aW1vX2Fzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJc3Rp
bW8tPnN0aW1vX2luaXQ9IHN0Y2ItPmFzb2MudGltb2luaXQ7Ci0JCQlzdGltby0+c3RpbW9fZGF0
YT0gc3RjYi0+YXNvYy50aW1vZGF0YTsKLQkJCXN0aW1vLT5zdGltb19zYWNrPSBzdGNiLT5hc29j
LnRpbW9zYWNrOwotCQkJc3RpbW8tPnN0aW1vX3NodXRkb3duPSBzdGNiLT5hc29jLnRpbW9zaHV0
ZG93bjsKLQkJCXN0aW1vLT5zdGltb19oZWFydGJlYXQ9IHN0Y2ItPmFzb2MudGltb2hlYXJ0YmVh
dDsKLQkJCXN0aW1vLT5zdGltb19jb29raWU9IHN0Y2ItPmFzb2MudGltb2Nvb2tpZTsKLQkJCXN0
aW1vLT5zdGltb19zaHV0ZG93bmFjaz0gc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2s7Ci0JCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF90
aW1lb3V0cyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BU1NPQ0lORk86Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9hc3NvY3BhcmFtcyAqc2Fzb2M7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXNvYywg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIHNhc29jLT5zYXNvY19hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsK
LQkJCXNhc29jLT5zYXNvY19jb29raWVfbGlmZSA9IFRJQ0tTX1RPX01TRUMoc3RjYi0+YXNvYy5j
b29raWVfbGlmZSk7Ci0JCQlzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dCA9IHN0Y2ItPmFzb2MubWF4
X3NlbmRfdGltZXM7Ci0JCQlzYXNvYy0+c2Fzb2NfbnVtYmVyX3BlZXJfZGVzdGluYXRpb25zID0g
c3RjYi0+YXNvYy5udW1uZXRzOwotCQkJc2Fzb2MtPnNhc29jX3BlZXJfcnduZCA9IHN0Y2ItPmFz
b2MucGVlcnNfcnduZDsKLQkJCXNhc29jLT5zYXNvY19sb2NhbF9yd25kID0gc3RjYi0+YXNvYy5t
eV9yd25kOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChzYXNv
Yy0+c2Fzb2NfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKLQkJCQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBUSUNLU19UT19NU0VD
KGlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmUpOwotCQkJCXNhc29jLT5zYXNvY19hc29jbWF4
cnh0ID0gaW5wLT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzOwotCQkJCXNhc29jLT5zYXNvY19udW1i
ZXJfcGVlcl9kZXN0aW5hdGlvbnMgPSAwOwotCQkJCXNhc29jLT5zYXNvY19wZWVyX3J3bmQgPSAw
OwotCQkJCXNhc29jLT5zYXNvY19sb2NhbF9yd25kID0gc2JzcGFjZSgmaW5wLT5zY3RwX3NvY2tl
dC0+c29fcmN2KTsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9y
ID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jcGFyYW1zKTsK
LQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTToKLQl7Ci0J
CXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNfaW5mbzsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KHNfaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvLCAqb3B0c2l6ZSk7Ci0JCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgc19pbmZvLT5zaW5mb19hc3NvY19pZCk7Ci0KLQkJaWYg
KHN0Y2IpIHsKLQkJCW1lbWNweShzX2luZm8sICZzdGNiLT5hc29jLmRlZl9zZW5kLCBzaXplb2Yo
c3RjYi0+YXNvYy5kZWZfc2VuZCkpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVs
c2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8
fAotCQkJICAgIChzX2luZm8tPnNpbmZvX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkg
ewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJbWVtY3B5KHNfaW5mbywgJmlucC0+ZGVm
X3NlbmQsIHNpemVvZihpbnAtPmRlZl9zZW5kKSk7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJ
fQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9zbmRyY3ZpbmZvKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0lOSVRNU0c6
Ci0JewotCQlzdHJ1Y3Qgc2N0cF9pbml0bXNnICpzaW5pdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHNpbml0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2luaXRtc2csICpvcHRzaXplKTsKLQkJU0NU
UF9JTlBfUkxPQ0soaW5wKTsKLQkJc2luaXQtPnNpbml0X251bV9vc3RyZWFtcyA9IGlucC0+c2N0
cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQ7Ci0JCXNpbml0LT5zaW5pdF9tYXhfaW5zdHJlYW1z
ID0gaW5wLT5zY3RwX2VwLm1heF9vcGVuX3N0cmVhbXNfaW50b21lOwotCQlzaW5pdC0+c2luaXRf
bWF4X2F0dGVtcHRzID0gaW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVzOwotCQlzaW5pdC0+c2lu
aXRfbWF4X2luaXRfdGltZW8gPSBpbnAtPnNjdHBfZXAuaW5pdGlhbF9pbml0X3J0b19tYXg7Ci0J
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
aW5pdG1zZyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUFJJTUFSWV9BRERSOgotCQkvKiB3
ZSBhbGxvdyBhICJnZXQiIG9wZXJhdGlvbiBvbiB0aGlzICovCi0JewotCQlzdHJ1Y3Qgc2N0cF9z
ZXRwcmltICpzc3A7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3AsIG9wdHZhbCwgc3RydWN0
IHNjdHBfc2V0cHJpbSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNz
cC0+c3NwX2Fzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJdW5pb24gc2N0cF9zb2Nrc3Rv
cmUgKmFkZHI7Ci0KLQkJCWFkZHIgPSAmc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5y
by5fbF9hZGRyOwotCQkJc3dpdGNoIChhZGRyLT5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVU
Ci0JCQljYXNlIEFGX0lORVQ6Ci0jaWZkZWYgSU5FVDYKLQkJCQlpZiAoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgewotCQkJCQlpbjZfc2lu
XzJfdjRtYXBzaW42KCZhZGRyLT5zaW4sCi0JCQkJCSAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKikmc3NwLT5zc3BfYWRkcik7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVt
Y3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSk7Ci0JCQkJfQotI2Vsc2UKLQkJCQltZW1jcHkoJnNzcC0+c3NwX2FkZHIsICZhZGRyLT5zaW4s
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSNlbmRpZgotCQkJCWJyZWFrOwotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJbWVtY3B5KCZzc3AtPnNzcF9h
ZGRyLCAmYWRkci0+c2luNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCQlicmVh
azsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWNhc2UgQUZfQ09OTjoK
LQkJCQltZW1jcHkoJnNzcC0+c3NwX2FkZHIsICZhZGRyLT5zY29ubiwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSk7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0JCQkJYnJl
YWs7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zZXRwcmltKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQll
cnJvciA9IEVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0hNQUNfSURFTlQ6
Ci0JewotCQlzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqc2htYWM7Ci0JCXNjdHBfaG1hY2xpc3RfdCAq
aG1hY2xpc3Q7Ci0JCXVpbnQzMl90IHNpemU7Ci0JCWludCBpOwotCi0JCVNDVFBfQ0hFQ0tfQU5E
X0NBU1Qoc2htYWMsIG9wdHZhbCwgc3RydWN0IHNjdHBfaG1hY2FsZ28sICpvcHRzaXplKTsKLQot
CQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQlobWFjbGlzdCA9IGlucC0+c2N0cF9lcC5sb2NhbF9o
bWFjczsKLQkJaWYgKGhtYWNsaXN0ID09IE5VTEwpIHsKLQkJCS8qIG5vIEhNQUNzIHRvIHJldHVy
biAqLwotCQkJKm9wdHNpemUgPSBzaXplb2YoKnNobWFjKTsKLQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGlzIHRoZXJlIHJvb20gZm9yIGFsbCBvZiB0aGUg
aG1hYyBpZHM/ICovCi0JCXNpemUgPSBzaXplb2YoKnNobWFjKSArIChobWFjbGlzdC0+bnVtX2Fs
Z28gKgotCQkJCQkgc2l6ZW9mKHNobWFjLT5zaG1hY19pZGVudHNbMF0pKTsKLQkJaWYgKChzaXpl
X3QpKCpvcHRzaXplKSA8IHNpemUpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZB
TDsKLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIGNvcHkg
aW4gdGhlIGxpc3QgKi8KLQkJc2htYWMtPnNobWFjX251bWJlcl9vZl9pZGVudHMgPSBobWFjbGlz
dC0+bnVtX2FsZ287Ci0JCWZvciAoaSA9IDA7IGkgPCBobWFjbGlzdC0+bnVtX2FsZ287IGkrKykg
ewotCQkJc2htYWMtPnNobWFjX2lkZW50c1tpXSA9IGhtYWNsaXN0LT5obWFjW2ldOwotCQl9Ci0J
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJKm9wdHNpemUgPSBzaXplOwotCQlicmVhazsKLQl9
Ci0JY2FzZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWToKLQl7Ci0JCXN0cnVjdCBzY3RwX2F1dGhrZXlp
ZCAqc2NhY3Q7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzY2FjdCwgb3B0dmFsLCBzdHJ1Y3Qg
c2N0cF9hdXRoa2V5aWQsICpvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBz
Y2FjdC0+c2NhY3RfYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBnZXQgdGhlIGFj
dGl2ZSBrZXkgb24gdGhlIGFzc29jICovCi0JCQlzY2FjdC0+c2NhY3Rfa2V5bnVtYmVyID0gc3Rj
Yi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8Ci0JCQkgICAgKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpIHsKLQkJCQkvKiBnZXQgdGhlIGVuZHBvaW50IGFjdGl2ZSBrZXkgKi8KLQkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOwotCQkJCXNjYWN0LT5zY2FjdF9rZXludW1iZXIgPSBpbnAtPnNjdHBf
ZXAuZGVmYXVsdF9rZXlpZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2Ug
ewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJaWYg
KGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlp
ZCk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9MT0NBTF9BVVRIX0NIVU5LUzoKLQl7
Ci0JCXN0cnVjdCBzY3RwX2F1dGhjaHVua3MgKnNhYzsKLQkJc2N0cF9hdXRoX2Noa2xpc3RfdCAq
Y2hrbGlzdCA9IE5VTEw7Ci0JCXNpemVfdCBzaXplID0gMDsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHNhYywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzLCAqb3B0c2l6ZSk7Ci0JCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgc2FjLT5nYXV0aF9hc3NvY19pZCk7Ci0KLQkJaWYgKHN0
Y2IpIHsKLQkJCS8qIGdldCBvZmYgdGhlIGFzc29jICovCi0JCQljaGtsaXN0ID0gc3RjYi0+YXNv
Yy5sb2NhbF9hdXRoX2NodW5rczsKLQkJCS8qIGlzIHRoZXJlIGVub3VnaCBzcGFjZT8gKi8KLQkJ
CXNpemUgPSBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjaGtsaXN0KTsKLQkJCWlmICgqb3B0
c2l6ZSA8IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykgKyBzaXplKSkgewotCQkJCWVy
cm9yID0gRUlOVkFMOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogY29weSBp
biB0aGUgY2h1bmtzICovCi0JCQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hr
bGlzdCwgc2FjLT5nYXV0aF9jaHVua3MpOwotCQkJCXNhYy0+Z2F1dGhfbnVtYmVyX29mX2NodW5r
cyA9ICh1aW50MzJfdClzaXplOwotCQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1
dGhjaHVua3MpICsgc2l6ZTsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBl
bHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKLQkJCSAgICAoc2FjLT5nYXV0aF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsK
LQkJCQkvKiBnZXQgb2ZmIHRoZSBlbmRwb2ludCAqLwotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
Ci0JCQkJY2hrbGlzdCA9IGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rczsKLQkJCQkvKiBp
cyB0aGVyZSBlbm91Z2ggc3BhY2U/ICovCi0JCQkJc2l6ZSA9IHNjdHBfYXV0aF9nZXRfY2hrbGlz
dF9zaXplKGNoa2xpc3QpOwotCQkJCWlmICgqb3B0c2l6ZSA8IChzaXplb2Yoc3RydWN0IHNjdHBf
YXV0aGNodW5rcykgKyBzaXplKSkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJy
b3IpOwotCQkJCX0gZWxzZSB7Ci0JCQkJCS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLwotCQkJCQko
dm9pZClzY3RwX3NlcmlhbGl6ZV9hdXRoX2NodW5rcyhjaGtsaXN0LCBzYWMtPmdhdXRoX2NodW5r
cyk7Ci0JCQkJCXNhYy0+Z2F1dGhfbnVtYmVyX29mX2NodW5rcyA9ICh1aW50MzJfdClzaXplOwot
CQkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7Ci0J
CQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2Fz
ZSBTQ1RQX1BFRVJfQVVUSF9DSFVOS1M6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICpz
YWM7Ci0JCXNjdHBfYXV0aF9jaGtsaXN0X3QgKmNoa2xpc3QgPSBOVUxMOwotCQlzaXplX3Qgc2l6
ZSA9IDA7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYWMsIG9wdHZhbCwgc3RydWN0IHNjdHBf
YXV0aGNodW5rcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhYy0+
Z2F1dGhfYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBnZXQgb2ZmIHRoZSBhc3Nv
YyAqLwotCQkJY2hrbGlzdCA9IHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rczsKLQkJCS8qIGlz
IHRoZXJlIGVub3VnaCBzcGFjZT8gKi8KLQkJCXNpemUgPSBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rf
c2l6ZShjaGtsaXN0KTsKLQkJCWlmICgqb3B0c2l6ZSA8IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0
aGNodW5rcykgKyBzaXplKSkgewotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsK
LQkJCX0gZWxzZSB7Ci0JCQkJLyogY29weSBpbiB0aGUgY2h1bmtzICovCi0JCQkJKHZvaWQpc2N0
cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hrbGlzdCwgc2FjLT5nYXV0aF9jaHVua3MpOwotCQkJ
CXNhYy0+Z2F1dGhfbnVtYmVyX29mX2NodW5rcyA9ICh1aW50MzJfdClzaXplOwotCQkJCSpvcHRz
aXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZTsKLQkJCX0KLQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJICAgICAgICBTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9FTlQpOwot
CQkJZXJyb3IgPSBFTk9FTlQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotI2lmIGRlZmluZWQoSEFWRV9T
Q1RQX1BFRUxPRkZfU09DS09QVCkKLQljYXNlIFNDVFBfUEVFTE9GRjoKLQl7Ci0JCXN0cnVjdCBz
Y3RwX3BlZWxvZmZfb3B0ICpwZWVsb2ZmOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QocGVlbG9m
Ziwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCwgKm9wdHNpemUpOwotCQkvKiBkbyB0
aGUgcGVlbG9mZiAqLwotCQllcnJvciA9IHNjdHBfcGVlbG9mZl9vcHRpb24ocCwgcGVlbG9mZik7
Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9w
ZWVsb2ZmX29wdCk7Ci0JCX0KLQl9Ci0JYnJlYWs7Ci0jZW5kaWYgLyogSEFWRV9TQ1RQX1BFRUxP
RkZfU09DS09QVCAqLwotCWNhc2UgU0NUUF9FVkVOVDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2V2ZW50
ICpldmVudDsKLQkJdWludDMyX3QgZXZlbnRfdHlwZTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGV2ZW50LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50LCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgZXZlbnQtPnNlX2Fzc29jX2lkKTsKLQotCQlzd2l0Y2ggKGV2ZW50
LT5zZV90eXBlKSB7Ci0JCWNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6Ci0JCQlldmVudF90eXBlID0g
U0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUEVF
Ul9BRERSX0NIQU5HRToKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJF
Vk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9SRU1PVEVfRVJST1I6Ci0JCQlldmVudF90eXBl
ID0gU0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlI7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NF
TkRfRkFJTEVEOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVW
TlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NIVVRET1dOX0VWRU5UOgotCQkJZXZlbnRfdHlw
ZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBT
Q1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTjoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFH
U19BREFQVEFUSU9ORVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUEFSVElBTF9ERUxJVkVS
WV9FVkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQ7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9
IFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVFJFQU1f
UkVTRVRfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VU
RVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU0VOREVSX0RSWV9FVkVOVDoKLQkJCWV2ZW50
X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19EUllFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9O
T1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gMDsKLQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVO
T1RTVVApOwotCQkJZXJyb3IgPSBFTk9UU1VQOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BU1NP
Q19SRVNFVF9FVkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BU1NPQ19SRVNF
VEVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRVZFTlQ6Ci0JCQll
dmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX0NIQU5HRUVWTlQ7Ci0JCQlicmVhazsK
LQkJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENC
X0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlldmVu
dF90eXBlID0gMDsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFr
OwotCQl9Ci0JCWlmIChldmVudF90eXBlID4gMCkgewotCQkJaWYgKHN0Y2IpIHsKLQkJCQlldmVu
dC0+c2Vfb24gPSBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUp
OwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCQkgICAgKGV2ZW50
LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKLQkJCQkJZXZlbnQtPnNlX29uID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgZXZl
bnRfdHlwZSk7Ci0JCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCQl9IGVsc2UgewotCQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJ
aWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50
KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JFQ1ZSQ1ZJTkZPOgotCXsKLQkJaW50
IG9ub2ZmOwotCi0JCWlmICgqb3B0c2l6ZSA8IHNpemVvZihpbnQpKSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJb25vZmYgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNW
UkNWSU5GTyk7Ci0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJaWYgKGVycm9yID09
IDApIHsKLQkJCS8qIHJldHVybiB0aGUgb3B0aW9uIHZhbHVlICovCi0JCQkqKGludCAqKW9wdHZh
bCA9IG9ub2ZmOwotCQkJKm9wdHNpemUgPSBzaXplb2YoaW50KTsKLQkJfQotCQlicmVhazsKLQl9
Ci0JY2FzZSBTQ1RQX1JFQ1ZOWFRJTkZPOgotCXsKLQkJaW50IG9ub2ZmOwotCi0JCWlmICgqb3B0
c2l6ZSA8IHNpemVvZihpbnQpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJb25vZmYgPSBzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTyk7Ci0JCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCS8qIHJldHVybiB0
aGUgb3B0aW9uIHZhbHVlICovCi0JCQkqKGludCAqKW9wdHZhbCA9IG9ub2ZmOwotCQkJKm9wdHNp
emUgPSBzaXplb2YoaW50KTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0RFRkFVTFRf
U05ESU5GTzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3NuZGluZm8gKmluZm87Ci0KLQkJU0NUUF9DSEVD
S19BTkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZGluZm8sICpvcHRzaXplKTsK
LQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBpbmZvLT5zbmRfYXNzb2NfaWQpOwotCi0JCWlm
IChzdGNiKSB7Ci0JCQlpbmZvLT5zbmRfc2lkID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19z
dHJlYW07Ci0JCQlpbmZvLT5zbmRfZmxhZ3MgPSBzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2Zs
YWdzOwotCQkJaW5mby0+c25kX2ZsYWdzICY9IDB4ZmZmMDsKLQkJCWluZm8tPnNuZF9wcGlkID0g
c3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19wcGlkOwotCQkJaW5mby0+c25kX2NvbnRleHQgPSBz
dGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2NvbnRleHQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWluZm8tPnNuZF9zaWQgPSBp
bnAtPmRlZl9zZW5kLnNpbmZvX3N0cmVhbTsKLQkJCQlpbmZvLT5zbmRfZmxhZ3MgPSBpbnAtPmRl
Zl9zZW5kLnNpbmZvX2ZsYWdzOwotCQkJCWluZm8tPnNuZF9mbGFncyAmPSAweGZmZjA7Ci0JCQkJ
aW5mby0+c25kX3BwaWQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX3BwaWQ7Ci0JCQkJaW5mby0+c25k
X2NvbnRleHQgPSBpbnAtPmRlZl9zZW5kLnNpbmZvX2NvbnRleHQ7Ci0JCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlO
VkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0RF
RkFVTFRfUFJJTkZPOgotCXsKLQkJc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8gKmluZm87Ci0K
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVChpbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2RlZmF1bHRf
cHJpbmZvLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+cHJf
YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlpbmZvLT5wcl9wb2xpY3kgPSBQUl9TQ1RQ
X1BPTElDWShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKLQkJCWluZm8tPnByX3Zh
bHVlID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb190aW1ldG9saXZlOwotCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWluZm8tPnBy
X3BvbGljeSA9IFBSX1NDVFBfUE9MSUNZKGlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MpOwotCQkJ
CWluZm8tPnByX3ZhbHVlID0gaW5wLT5kZWZfc2VuZC5zaW5mb190aW1ldG9saXZlOwotCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZGVmYXVsdF9wcmluZm8pOwotCQl9Ci0JCWJyZWFrOwot
CX0KLQljYXNlIFNDVFBfUEVFUl9BRERSX1RITERTOgotCXsKLQkJc3RydWN0IHNjdHBfcGFkZHJ0
aGxkcyAqdGhsZHM7Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJc3RydWN0IHNvY2thZGRy
ICphZGRyOwotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNv
Y2thZGRyX2luIHNpbl9zdG9yZTsKLSNlbmRpZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodGhs
ZHMsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGFkZHJ0aGxkcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHRobGRzLT5zcHRfYXNzb2NfaWQpOwotCi0jaWYgZGVmaW5lZChJ
TkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCQlpZiAodGhsZHMtPnNwdF9hZGRyZXNzLnNzX2ZhbWls
eSA9PSBBRl9JTkVUNikgewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnRobGRzLT5zcHRfYWRkcmVzczsKLQkJCWlmIChJ
TjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJf
c2luKCZzaW5fc3RvcmUsIHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNp
bl9zdG9yZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhs
ZHMtPnNwdF9hZGRyZXNzOwotCQkJfQotCQl9IGVsc2UgewotCQkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVj
dCBzb2NrYWRkciAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0g
TlVMTCkgewotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2Ugewot
CQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRk
cigpIHdpbAotCQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9u
ZyBhcyB0aGUgbG9ja2VkCi0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4u
IGFrYSBOVUxMLgotCQkJICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYo
aW5wKTsKLQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIs
ICZuZXQsIE5VTEwsIE5VTEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQg
PT0gTlVMTCkpIHsKLSNpZmRlZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lO
RVQpIHsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQotCQkJCXNpbiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilhZGRyOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFE
RFJfQU5ZKSB7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5k
aWYKLSNpZmRlZiBJTkVUNgotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewot
CQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLQkJCQlzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilhZGRyOwotCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYt
PnNpbjZfYWRkcikpIHsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UK
LSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9mYW1p
bHkgPT0gQUZfQ09OTikgewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJ
CXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4tPnNj
b25uX2FkZHIgIT0gTlVMTCkgewotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0g
ZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQot
Ci0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCWlmIChuZXQgIT0gTlVMTCkgewotCQkJCXRobGRz
LT5zcHRfcGF0aG1heHJ4dCA9IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQ7Ci0JCQkJdGhsZHMtPnNw
dF9wYXRocGZ0aGxkID0gbmV0LT5wZl90aHJlc2hvbGQ7Ci0JCQkJdGhsZHMtPnNwdF9wYXRoY3B0
aGxkID0gMHhmZmZmOwotCQkJfSBlbHNlIHsKLQkJCQl0aGxkcy0+c3B0X3BhdGhtYXhyeHQgPSBz
dGNiLT5hc29jLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQl0aGxkcy0+c3B0X3BhdGhwZnRobGQgPSBz
dGNiLT5hc29jLmRlZl9uZXRfcGZfdGhyZXNob2xkOwotCQkJCXRobGRzLT5zcHRfcGF0aGNwdGhs
ZCA9IDB4ZmZmZjsKLQkJCX0KLQkJCXRobGRzLT5zcHRfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3Nv
Y2lkKHN0Y2IpOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgICh0
aGxkcy0+c3B0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCS8qIFVzZSBl
bmRwb2ludCBkZWZhdWx0cyAqLwotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJdGhsZHMt
PnNwdF9wYXRobWF4cnh0ID0gaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZTsKLQkJCQl0aGxk
cy0+c3B0X3BhdGhwZnRobGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0J
CQkJdGhsZHMtPnNwdF9wYXRoY3B0aGxkID0gMHhmZmZmOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGFkZHJ0aGxkcyk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SRU1P
VEVfVURQX0VOQ0FQU19QT1JUOgotCXsKLQkJc3RydWN0IHNjdHBfdWRwZW5jYXBzICplbmNhcHM7
Ci0JCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lm
IGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNp
bl9zdG9yZTsKLSNlbmRpZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZW5jYXBzLCBvcHR2YWws
IHN0cnVjdCBzY3RwX3VkcGVuY2FwcywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIGVuY2Fwcy0+c3VlX2Fzc29jX2lkKTsKLQotI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVm
aW5lZChJTkVUNikKLQkJaWYgKGVuY2Fwcy0+c3VlX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7Ci0JCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKikmZW5jYXBzLT5zdWVfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNfQURE
Ul9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZzaW5f
c3RvcmUsIHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsK
LQkJCX0gZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBzLT5zdWVf
YWRkcmVzczsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICop
JmVuY2Fwcy0+c3VlX2FkZHJlc3M7Ci0JCX0KLSNlbHNlCi0JCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IpIHsKLQkJCW5l
dCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGluY3Jl
bWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAq
IGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tl
ZAotCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJ
CSAqLwotCQkJbmV0ID0gTlVMTDsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBO
VUxMKTsKLQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnAp
OwotCQkJfQotCQl9Ci0JCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7Ci0j
aWZkZWYgSU5FVAotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQkJc3Ry
dWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICop
YWRkcjsKLQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewotCQkJ
CQllcnJvciA9IEVJTlZBTDsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBl
cnJvcik7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRk
cjsKLQkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7
Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIGVycm9yKTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfSBlbHNlCi0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4p
IHsKLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47Ci0KLQkJCQlzY29ubiA9IChzdHJ1
Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7Ci0JCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5V
TEwpIHsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgZXJyb3IpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgot
CQkJewotCQkJCWVycm9yID0gRUFGTk9TVVBQT1JUOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoc3RjYiAh
PSBOVUxMKSB7Ci0JCQlpZiAobmV0KSB7Ci0JCQkJZW5jYXBzLT5zdWVfcG9ydCA9IG5ldC0+cG9y
dDsKLQkJCX0gZWxzZSB7Ci0JCQkJZW5jYXBzLT5zdWVfcG9ydCA9IHN0Y2ItPmFzb2MucG9ydDsK
LQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoZW5jYXBz
LT5zdWVfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKLQkJCQllbmNhcHMtPnN1ZV9wb3J0ID0gaW5wLT5zY3RwX2VwLnBvcnQ7Ci0JCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkqb3B0
c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpOwotCQl9Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfRUNOX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
ICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFz
c29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNv
Yy5lY25fc3VwcG9ydGVkOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2Ugewot
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKLQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmVjbl9zdXBwb3J0ZWQ7Ci0J
CQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAwKSB7Ci0JCQkq
b3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0KLQkJYnJlYWs7
Ci0JfQotCWNhc2UgU0NUUF9QUl9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2
LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2It
PmFzb2MucHJzY3RwX3N1cHBvcnRlZDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBl
bHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5wcnNjdHBfc3Vw
cG9ydGVkOwotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0g
MCkgewotCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9
Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQVVUSF9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qg
c2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCWF2LT5hc3NvY192
YWx1ZSA9IHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykp
IHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+
YXV0aF9zdXBwb3J0ZWQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsK
LQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChl
cnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BU0NPTkZfU1VQUE9SVEVEOgotCXsK
LQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKLQkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlh
di0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQ7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZV
VFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192
YWx1ZSA9IGlucC0+YXNjb25mX3N1cHBvcnRlZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9
Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1JFQ09ORklH
X1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlp
ZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5yZWNvbmZpZ19zdXBw
b3J0ZWQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOwotCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOwotCQl9Ci0JCWJyZWFrOwotCX0K
LQljYXNlIFNDVFBfTlJTQUNLX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYt
PmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+
YXNvYy5ucnNhY2tfc3VwcG9ydGVkOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVs
c2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8
fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NU
UF9JTlBfUkxPQ0soaW5wKTsKLQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPm5yc2Fja19zdXBw
b3J0ZWQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChlcnJvciA9PSAw
KSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7Ci0JCX0K
LQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QS1REUk9QX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENC
KGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29j
X3ZhbHVlID0gc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBvcnRlZDsKLQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FT
U09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0g
aW5wLT5wa3Rkcm9wX3N1cHBvcnRlZDsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0K
LQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0VOQUJMRV9TVFJFQU1f
UkVTRVQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVD
S19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUp
OwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0
Y2IpIHsKLQkJCWF2LT5hc3NvY192YWx1ZSA9ICh1aW50MzJfdClzdGNiLT5hc29jLmxvY2FsX3N0
cnJlc2V0X3N1cHBvcnQ7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0J
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkg
ICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOwotCQkJCWF2LT5hc3NvY192YWx1ZSA9ICh1aW50MzJfdClpbnAtPmxvY2FsX3N0
cnJlc2V0X3N1cHBvcnQ7Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsK
LQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWlmIChl
cnJvciA9PSAwKSB7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QUl9TVFJFQU1fU1RBVFVTOgotCXsK
LQkJc3RydWN0IHNjdHBfcHJzdGF0dXMgKnNwcnN0YXQ7Ci0JCXVpbnQxNl90IHNpZDsKLQkJdWlu
dDE2X3QgcG9saWN5OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3Byc3RhdCwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9wcnN0YXR1cywgKm9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0
Y2IsIHNwcnN0YXQtPnNwcnN0YXRfYXNzb2NfaWQpOwotCi0JCXNpZCA9IHNwcnN0YXQtPnNwcnN0
YXRfc2lkOwotCQlwb2xpY3kgPSBzcHJzdGF0LT5zcHJzdGF0X3BvbGljeTsKLSNpZiBkZWZpbmVk
KFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQotCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYKLQkJICAg
IChzaWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgJiYKLQkJICAgIChwb2xpY3kgIT0gU0NU
UF9QUl9TQ1RQX05PTkUpICYmCi0JCSAgICAoKHBvbGljeSA8PSBTQ1RQX1BSX1NDVFBfTUFYKSB8
fAotCQkgICAgIChwb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX0FMTCkpKSB7Ci0JCQlpZiAocG9saWN5
ID09IFNDVFBfUFJfU0NUUF9BTEwpIHsKLQkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91
bnNlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50WzBdOwotCQkJ
CXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lk
XS5hYmFuZG9uZWRfc2VudFswXTsKLQkJCX0gZWxzZSB7Ci0JCQkJc3Byc3RhdC0+c3Byc3RhdF9h
YmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2Vu
dFtwb2xpY3ldOwotCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5h
c29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfc2VudFtwb2xpY3ldOwotCQkJfQotI2Vsc2UKLQkJ
aWYgKChzdGNiICE9IE5VTEwpICYmCi0JCSAgICAoc2lkIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQpICYmCi0JCSAgICAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpKSB7Ci0JCQlzcHJzdGF0
LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFu
ZG9uZWRfdW5zZW50WzBdOwotCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfc2VudCA9IHN0
Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5kb25lZF9zZW50WzBdOwotI2VuZGlmCi0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcnN0
YXR1cyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QUl9BU1NPQ19TVEFUVVM6Ci0JewotCQlzdHJ1
Y3Qgc2N0cF9wcnN0YXR1cyAqc3Byc3RhdDsKLQkJdWludDE2X3QgcG9saWN5OwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc3Byc3RhdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wcnN0YXR1cywgKm9w
dHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNwcnN0YXQtPnNwcnN0YXRfYXNz
b2NfaWQpOwotCi0JCXBvbGljeSA9IHNwcnN0YXQtPnNwcnN0YXRfcG9saWN5OwotCQlpZiAoKHN0
Y2IgIT0gTlVMTCkgJiYKLQkJICAgIChwb2xpY3kgIT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmCi0J
CSAgICAoKHBvbGljeSA8PSBTQ1RQX1BSX1NDVFBfTUFYKSB8fAotCQkgICAgIChwb2xpY3kgPT0g
U0NUUF9QUl9TQ1RQX0FMTCkpKSB7Ci0JCQlpZiAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwp
IHsKLQkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNlbnQgPSBzdGNiLT5hc29jLmFi
YW5kb25lZF91bnNlbnRbMF07Ci0JCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfc2VudCA9
IHN0Y2ItPmFzb2MuYWJhbmRvbmVkX3NlbnRbMF07Ci0JCQl9IGVsc2UgewotCQkJCXNwcnN0YXQt
PnNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudCA9IHN0Y2ItPmFzb2MuYWJhbmRvbmVkX3Vuc2VudFtw
b2xpY3ldOwotCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29j
LmFiYW5kb25lZF9zZW50W3BvbGljeV07Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyk7Ci0JCX0gZWxzZSB7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9NQVhfQ1dORDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsK
LQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlLCAqb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lk
KTsKLQotCQlpZiAoc3RjYikgewotCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5tYXhf
Y3duZDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFz
c29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
Ci0JCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5tYXhfY3duZDsKLQkJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQl9Ci0JCX0KLQkJaWYgKGVycm9yID09IDApIHsKLQkJCSpvcHRzaXplID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKLQkJfQotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoK
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRU5PUFJPVE9PUFQpOwotCQllcnJvciA9IEVOT1BST1RPT1BUOwotCQlicmVhazsKLQl9
IC8qIGVuZCBzd2l0Y2ggKHNvcHQtPnNvcHRfbmFtZSkgKi8KLQlpZiAoZXJyb3IpIHsKLQkJKm9w
dHNpemUgPSAwOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19QYW5k
YV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLSNlbHNlCi1zdGF0aWMgaW50Ci0j
ZW5kaWYKLXNjdHBfc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAq
b3B0dmFsLCBzaXplX3Qgb3B0c2l6ZSwKLQkgICAgdm9pZCAqcCkKLXsKLQlpbnQgZXJyb3IsIHNl
dF9vcHQ7Ci0JdWludDMyX3QgKm1vcHQ7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsK
LQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTDsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0KLQlp
ZiAob3B0dmFsID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoIm9wdHZhbCBpcyBOVUxMXG4iKTsK
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlTQ1RQX1BSSU5U
RigiaW5wIGlzIE5VTEw/XG4iKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwot
CX0KLQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0KLQllcnJvciA9IDA7Ci0Jc3dpdGNoIChv
cHRuYW1lKSB7Ci0JY2FzZSBTQ1RQX05PREVMQVk6Ci0JY2FzZSBTQ1RQX0FVVE9DTE9TRToKLQlj
YXNlIFNDVFBfQVVUT19BU0NPTkY6Ci0JY2FzZSBTQ1RQX0VYUExJQ0lUX0VPUjoKLQljYXNlIFND
VFBfRElTQUJMRV9GUkFHTUVOVFM6Ci0JY2FzZSBTQ1RQX1VTRV9FWFRfUkNWSU5GTzoKLQljYXNl
IFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSOgotCQkvKiBjb3B5IGluIHRoZSBvcHRpb24gdmFs
dWUgKi8KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChtb3B0LCBvcHR2YWwsIHVpbnQzMl90LCBvcHRz
aXplKTsKLQkJc2V0X29wdCA9IDA7Ci0JCWlmIChlcnJvcikKLQkJCWJyZWFrOwotCQlzd2l0Y2gg
KG9wdG5hbWUpIHsKLQkJY2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgotCQkJc2V0X29wdCA9
IFNDVFBfUENCX0ZMQUdTX05PX0ZSQUdNRU5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRP
X0FTQ09ORjoKLQkJCS8qCi0JCQkgKiBOT1RFOiB3ZSBkb24ndCByZWFsbHkgc3VwcG9ydCB0aGlz
IGZsYWcKLQkJCSAqLwotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JP
VU5EQUxMKSB7Ci0JCQkJLyogb25seSB2YWxpZCBmb3IgYm91bmQgYWxsIHNvY2tldHMgKi8KLQkJ
CQlpZiAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRvX2FzY29uZikgPT0gMCkgJiYKLQkJCQkg
ICAgKCptb3B0ICE9IDApKSB7Ci0JCQkJCS8qIGZvcmJpZGRlbiBieSBhZG1pbiAqLwotCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFUEVSTSk7Ci0JCQkJCXJldHVybiAoRVBFUk0pOwotCQkJCX0KLQkJCQlzZXRfb3B0ID0gU0NU
UF9QQ0JfRkxBR1NfQVVUT19BU0NPTkY7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9FWFBMSUNJ
VF9FT1I6Ci0JCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SOwotCQkJYnJl
YWs7Ci0JCWNhc2UgU0NUUF9VU0VfRVhUX1JDVklORk86Ci0JCQlzZXRfb3B0ID0gU0NUUF9QQ0Jf
RkxBR1NfRVhUX1JDVklORk87Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURf
VjRfQUREUjoKLQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgewotCQkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQ7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwpOwotCQkJfQotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9OT0RFTEFZOgotCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdT
X05PREVMQVk7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX0FVVE9DTE9TRToKLQkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKLQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJCXJldHVybiAoRUlOVkFMKTsKLQkJCX0KLQkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFH
U19BVVRPQ0xPU0U7Ci0JCQkvKgotCQkJICogVGhlIHZhbHVlIGlzIGluIHRpY2tzLiBOb3RlIHRo
aXMgZG9lcyBub3QgZWZmZWN0Ci0JCQkgKiBvbGQgYXNzb2NpYXRpb25zLCBvbmx5IG5ldyBvbmVz
LgotCQkJICovCi0JCQlpbnAtPnNjdHBfZXAuYXV0b19jbG9zZV90aW1lID0gU0VDX1RPX1RJQ0tT
KCptb3B0KTsKLQkJCWJyZWFrOwotCQl9Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlmICgq
bW9wdCAhPSAwKSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBzZXRfb3B0KTsKLQkJfSBlbHNl
IHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBzZXRfb3B0KTsKLQkJfQotCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9SRVVTRV9QT1JUOgotCXsKLQkJU0NU
UF9DSEVDS19BTkRfQ0FTVChtb3B0LCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSAgPT0gMCkgewotCQkJ
LyogQ2FuJ3Qgc2V0IGl0IGFmdGVyIHdlIGFyZSBib3VuZCAqLwotCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1VEUFRZUEUpKSB7Ci0JCQkvKiBDYW4ndCBkbyB0aGlzIGZvciBhIDEtbSBzb2NrZXQgKi8KLQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKG9wdHZhbCkKLQkJCXNjdHBf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSk7Ci0JCWVsc2UKLQkJCXNj
dHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpOwotCQlicmVhazsK
LQl9Ci0JY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfUE9JTlQ6Ci0JewotCQl1aW50MzJfdCAq
dmFsdWU7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwg
b3B0c2l6ZSk7Ci0JCWlmICgqdmFsdWUgPiBTQ1RQX1NCX0xJTUlUX1JDVihzbykpIHsKLQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlucC0+cGFy
dGlhbF9kZWxpdmVyeV9wb2ludCA9ICp2YWx1ZTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9G
UkFHTUVOVF9JTlRFUkxFQVZFOgotCQkvKiBub3QgeWV0IHVudGlsIHdlIHJlLXdyaXRlIHNjdHBf
cmVjdm1zZygpICovCi0JewotCQl1aW50MzJfdCAqbGV2ZWw7Ci0KLQkJU0NUUF9DSEVDS19BTkRf
Q0FTVChsZXZlbCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCWlmICgqbGV2ZWwgPT0g
U0NUUF9GUkFHX0xFVkVMXzIpIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX0ZSQUdfSU5URVJMRUFWRSk7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19JTlRFUkxFQVZFX1NUUk1TKTsKLQkJfSBlbHNlIGlmICgqbGV2ZWwgPT0gU0NUUF9GUkFH
X0xFVkVMXzEpIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdf
SU5URVJMRUFWRSk7Ci0JCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5U
RVJMRUFWRV9TVFJNUyk7Ci0JCX0gZWxzZSBpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8w
KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxF
QVZFKTsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19JTlRFUkxFQVZF
X1NUUk1TKTsKLQotCQl9IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFM
OwotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfSU5URVJMRUFWSU5HX1NVUFBPUlRFRDoK
LQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NU
UF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0J
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykp
IHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0g
MCkgewotCQkJCQlpbnAtPmlkYXRhX3N1cHBvcnRlZCA9IDA7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ
aWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVB
VkUpKSAgJiYKLQkJCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19JTlRFUkxFQVZFX1NUUk1TKSkpIHsKLQkJCQkJCWlucC0+aWRhdGFfc3VwcG9ydGVkID0gMTsK
LQkJCQkJfSBlbHNlIHsKLQkJCQkJCS8qIE11c3QgaGF2ZSBGcmFnIGludGVybGVhdmUgYW5kIHN0
cmVhbSBpbnRlcmxlYXZlIG9uICovCi0JCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfSBl
bHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQ01UX09OX09GRjoKLQkJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9jbXRfb25fb2ZmKSkgewotCQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2Owot
Ci0JCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlLCBvcHRzaXplKTsKLQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPiBTQ1RQX0NNVF9NQVgpIHsK
LQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCWJyZWFrOwotCQkJfQot
CQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCQkJaWYgKHN0Y2Ip
IHsKLQkJCQlzdGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9IGF2LT5hc3NvY192YWx1ZTsKLQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkJICAgIChhdi0+YXNzb2Nf
aWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8Ci0JCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NU
UF9BTExfQVNTT0MpKSB7Ci0JCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJCWlucC0+c2N0
cF9jbXRfb25fb2ZmID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7Ci0JCQkJfQotCQkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykg
fHwKLQkJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQkJU0NU
UF9JTlBfUkxPQ0soaW5wKTsKLQkJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNv
Y19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJ
CQlzdGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJfQotCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQkJfQotCQkJfQotCQl9IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOwotCQkJZXJyb3Ig
PSBFTk9QUk9UT09QVDsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfUExVR0dBQkxFX0NDOgot
CXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgb3B0c2l6ZSk7Ci0JCWlmICgoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfQ0NfUkZD
MjU4MSkgJiYKLQkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9DQ19IU1RDUCkgJiYKLQkJ
ICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9DQ19IVENQKSAmJgotCQkgICAgKGF2LT5hc3Nv
Y192YWx1ZSAhPSBTQ1RQX0NDX1JUQ0MpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5h
c3NvY19pZCk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucyA9IHNj
dHBfY2NfZnVuY3Rpb25zW2F2LT5hc3NvY192YWx1ZV07Ci0JCQlzdGNiLT5hc29jLmNvbmdlc3Rp
b25fY29udHJvbF9tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQlpZiAoc3RjYi0+YXNvYy5j
Y19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSAhPSBOVUxMKSB7Ci0JCQkJVEFJ
TFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQlzdGNi
LT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7
Ci0JCQkJfQotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8Ci0JCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJ
CWlucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfY2NfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVlOwot
CQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoYXYtPmFzc29jX2lkID09
IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxM
X0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0
Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0Jf
TE9DSyhzdGNiKTsKLQkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMgPSBzY3RwX2NjX2Z1bmN0
aW9uc1thdi0+YXNzb2NfdmFsdWVdOwotCQkJCQlzdGNiLT5hc29jLmNvbmdlc3Rpb25fY29udHJv
bF9tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0
aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtICE9IE5VTEwpIHsKLQkJCQkJCVRBSUxRX0ZP
UkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJCQkJCQlzdGNiLT5h
c29jLmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0Y2IsIG5ldCk7Ci0J
CQkJCQl9Ci0JCQkJCX0KLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NU
UF9DQ19PUFRJT046Ci0JewotCQlzdHJ1Y3Qgc2N0cF9jY19vcHRpb24gKmNjX29wdDsKLQotCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGNjX29wdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24s
IG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGNjX29wdC0+YWlkX3ZhbHVl
LmFzc29jX2lkKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJaWYgKGNjX29wdC0+YWlkX3Zh
bHVlLmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgewotCQkJCVNDVFBfSU5QX1JMT0NL
KGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3Rw
X3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJaWYgKHN0Y2ItPmFz
b2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKSB7Ci0JCQkJCQkoKnN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdGNiLCAxLCBjY19v
cHQpOwotCQkJCQl9Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJ
CX0KLQkJfSBlbHNlIHsKLQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRf
c29ja2V0X29wdGlvbiA9PSBOVUxMKSB7Ci0JCQkJZXJyb3IgPSBFTk9UU1VQOwotCQkJfSBlbHNl
IHsKLQkJCQllcnJvciA9ICgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3NvY2tl
dF9vcHRpb24pKHN0Y2IsIDEsCi0JCQkJCQkJCQkJCSAgIGNjX29wdCk7Ci0JCQl9Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QTFVHR0FC
TEVfU1M6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVD
S19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7
Ci0JCWlmICgoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfREVGQVVMVCkgJiYKLQkJICAgIChh
di0+YXNzb2NfdmFsdWUgIT0gU0NUUF9TU19ST1VORF9ST0JJTikgJiYKLQkJICAgIChhdi0+YXNz
b2NfdmFsdWUgIT0gU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQpICYmCi0JCSAgICAoYXYtPmFz
c29jX3ZhbHVlICE9IFNDVFBfU1NfUFJJT1JJVFkpICYmCi0JCSAgICAoYXYtPmFzc29jX3ZhbHVl
ICE9IFNDVFBfU1NfRkFJUl9CQU5EV0lUSCkgJiYKLQkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0g
U0NUUF9TU19GSVJTVF9DT01FKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFM
OwotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2Nf
aWQpOwotCQlpZiAoc3RjYikgewotCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19j
bGVhcihzdGNiLCAmc3RjYi0+YXNvYywgMSwgMSk7Ci0JCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9u
cyA9IHNjdHBfc3NfZnVuY3Rpb25zW2F2LT5hc3NvY192YWx1ZV07Ci0JCQlzdGNiLT5hc29jLnN0
cmVhbV9zY2hlZHVsaW5nX21vZHVsZSA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCXN0Y2ItPmFzb2Mu
c3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdChzdGNiLCAmc3RjYi0+YXNvYywgMSk7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5wLT5zY3RwX2VwLnNjdHBfZGVm
YXVsdF9zc19tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOwotCQkJfQotCQkJaWYgKChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8
fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2NsZWFyKHN0Y2IsICZzdGNiLT5hc29jLCAxLCAx
KTsKLQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+
YXNzb2NfdmFsdWVdOwotCQkJCQlzdGNiLT5hc29jLnN0cmVhbV9zY2hlZHVsaW5nX21vZHVsZSA9
IGF2LT5hc3NvY192YWx1ZTsKLQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19p
bml0KHN0Y2IsICZzdGNiLT5hc29jLCAxKTsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0J
fQotCWNhc2UgU0NUUF9TU19WQUxVRToKLQl7Ci0JCXN0cnVjdCBzY3RwX3N0cmVhbV92YWx1ZSAq
YXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3Nv
Y19pZCk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoKGF2LT5zdHJlYW1faWQgPj0gc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQpIHx8Ci0JCQkgICAgKHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBf
c3Nfc2V0X3ZhbHVlKHN0Y2IsICZzdGNiLT5hc29jLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2F2LT5z
dHJlYW1faWRdLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdi0+c3RyZWFtX3ZhbHVlKSA8IDApKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJv
ciA9IEVJTlZBTDsKLQkJCX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsK
LQkJCWlmIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB7Ci0JCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAo
YXYtPnN0cmVhbV9pZCA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlzdGNiLT5h
c29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLAotCQkJCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2MsCi0JCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3RjYi0+YXNvYy5zdHJtb3V0
W2F2LT5zdHJlYW1faWRdLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYXYtPnN0cmVhbV92YWx1ZSk7Ci0JCQkJCX0KLQkJCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2Ugewot
CQkJCS8qIENhbid0IHNldCBzdHJlYW0gdmFsdWUgd2l0aG91dCBhc3NvY2lhdGlvbiAqLwotCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0J
fQotCWNhc2UgU0NUUF9DTFJfU1RBVF9MT0c6Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQllcnJvciA9
IEVPUE5PVFNVUFA7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DT05URVhUOgotCXsKLQkJc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZh
bCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCXN0Y2ItPmFzb2Mu
Y29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
fSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xP
Q0soaW5wKTsKLQkJCQlpbnAtPnNjdHBfY29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NP
QykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAm
aW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0so
c3RjYik7Ci0JCQkJCXN0Y2ItPmFzb2MuY29udGV4dCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9WUkZfSUQ6Ci0JewotCQl1aW50
MzJfdCAqZGVmYXVsdF92cmZpZDsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJaW50IGk7Ci0jZW5kaWYK
LQkJU0NUUF9DSEVDS19BTkRfQ0FTVChkZWZhdWx0X3ZyZmlkLCBvcHR2YWwsIHVpbnQzMl90LCBv
cHRzaXplKTsKLQkJaWYgKCpkZWZhdWx0X3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotI2lmZGVmIFND
VFBfTVZSRgotCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7Ci0JCQkvKiBU
aGUgVlJGIG11c3QgYmUgaW4gdGhlIFZSRiBsaXN0ICovCi0JCQlpZiAoKmRlZmF1bHRfdnJmaWQg
PT0gaW5wLT5tX3ZyZl9pZHNbaV0pIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCWlu
cC0+ZGVmX3ZyZl9pZCA9ICpkZWZhdWx0X3ZyZmlkOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKLQkJCQlnb3RvIHNjdHBfZG9uZTsKLQkJCX0KLQkJfQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQllcnJv
ciA9IEVJTlZBTDsKLSNlbHNlCi0JCWlucC0+ZGVmX3ZyZl9pZCA9ICpkZWZhdWx0X3ZyZmlkOwot
I2VuZGlmCi0jaWZkZWYgU0NUUF9NVlJGCi0Jc2N0cF9kb25lOgotI2VuZGlmCi0JCWJyZWFrOwot
CX0KLQljYXNlIFNDVFBfREVMX1ZSRl9JRDoKLQl7Ci0jaWZkZWYgU0NUUF9NVlJGCi0JCXVpbnQz
Ml90ICpkZWxfdnJmaWQ7Ci0JCWludCBpLCBmbmQgPSAwOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoZGVsX3ZyZmlkLCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXplKTsKLQkJaWYgKCpkZWxfdnJm
aWQgPiBTQ1RQX01BWF9WUkZfSUQpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZB
TDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpbnAtPm51bV92cmZzID09IDEpIHsKLQkJCS8qIENh
bid0IGRlbGV0ZSBsYXN0IG9uZSAqLwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFM
OwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19VTkJPVU5EKSA9PSAwKSB7Ci0JCQkvKiBDYW4ndCBhZGQgbW9yZSBvbmNlIHlvdSBhcmUgYm91
bmQgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9
Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZz
OyBpKyspIHsKLQkJCWlmICgqZGVsX3ZyZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQkJ
Zm5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZuZCkgewotCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgIT0gKGlu
cC0+bnVtX3ZyZnMgLSAxKSkgewotCQkJLyogVGFrZSBib3R0b20gb25lIGFuZCBtb3ZlIHRvIHRo
aXMgc2xvdCAqLwotCQkJaW5wLT5tX3ZyZl9pZHNbaV0gPSBpbnAtPm1fdnJmX2lkc1soaW5wLT5u
dW1fdnJmcy0xKV07Ci0JCX0KLQkJaWYgKCpkZWxfdnJmaWQgPT0gaW5wLT5kZWZfdnJmX2lkKSB7
Ci0JCQkvKiBUYWtlIHRoZSBmaXJzdCBvbmUgYXMgdGhlIG5ldyBkZWZhdWx0ICovCi0JCQlpbnAt
PmRlZl92cmZfaWQgPSBpbnAtPm1fdnJmX2lkc1swXTsKLQkJfQotCQkvKiBEcm9wIHRoZSBudW1i
ZXIgYnkgb25lIGtpbGxpbmcgbGFzdCBvbmUgKi8KLQkJaW5wLT5udW1fdnJmcy0tOwotI2Vsc2UK
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRU9QTk9UU1VQUCk7Ci0JCWVycm9yID0gRU9QTk9UU1VQUDsKLSNlbmRpZgotCQlicmVh
azsKLQl9Ci0JY2FzZSBTQ1RQX0FERF9WUkZfSUQ6Ci0JewotI2lmZGVmIFNDVFBfTVZSRgotCQl1
aW50MzJfdCAqYWRkX3ZyZmlkOwotCQlpbnQgaTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGFk
ZF92cmZpZCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCWlmICgqYWRkX3ZyZmlkID4g
U0NUUF9NQVhfVlJGX0lEKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlicmVhazsKLQkJfQotCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VO
Qk9VTkQpID09IDApIHsKLQkJCS8qIENhbid0IGFkZCBtb3JlIG9uY2UgeW91IGFyZSBib3VuZCAq
LwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJYnJlYWs7Ci0JCX0KLQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJLyogVmVyaWZ5IGl0cyBub3QgYWxyZWFkeSBoZXJlICov
Ci0JCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJCWlmICgqYWRkX3Zy
ZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOwotCQkJCWVycm9y
ID0gRUFMUkVBRFk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCWJyZWFrOwotCQkJ
fQotCQl9Ci0JCWlmICgoaW5wLT5udW1fdnJmcyArIDEpID4gaW5wLT52cmZfc2l6ZSkgewotCQkJ
LyogbmVlZCB0byBncm93IGFycmF5ICovCi0JCQl1aW50MzJfdCAqdGFycmF5OwotCQkJU0NUUF9N
QUxMT0ModGFycmF5LCB1aW50MzJfdCAqLAotCQkJCSAgICAoc2l6ZW9mKHVpbnQzMl90KSAqIChp
bnAtPnZyZl9zaXplICsgU0NUUF9ERUZBVUxUX1ZSRl9TSVpFKSksCi0JCQkJICAgIFNDVFBfTV9N
VlJGKTsKLQkJCWlmICh0YXJyYXkgPT0gTlVMTCkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT01FTSk7Ci0JCQkJZXJy
b3IgPSBFTk9NRU07Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJCWJyZWFrOwotCQkJ
fQotCQkJbWVtY3B5KHRhcnJheSwgaW5wLT5tX3ZyZl9pZHMsIChzaXplb2YodWludDMyX3QpICog
aW5wLT52cmZfc2l6ZSkpOwotCQkJU0NUUF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQX01fTVZS
Rik7Ci0JCQlpbnAtPm1fdnJmX2lkcyA9IHRhcnJheTsKLQkJCWlucC0+dnJmX3NpemUgKz0gU0NU
UF9ERUZBVUxUX1ZSRl9TSVpFOwotCQl9Ci0JCWlucC0+bV92cmZfaWRzW2lucC0+bnVtX3ZyZnNd
ID0gKmFkZF92cmZpZDsKLQkJaW5wLT5udW1fdnJmcysrOwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7Ci0jZWxzZQotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsKLQkJZXJyb3IgPSBFT1BOT1RTVVBQOwotI2Vu
ZGlmCi0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfREVMQVlFRF9TQUNLOgotCXsKLQkJc3RydWN0
IHNjdHBfc2Fja19pbmZvICpzYWNrOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8sIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIHNhY2stPnNhY2tfYXNzb2NfaWQpOwotCQlpZiAoc2Fjay0+c2Fja19kZWxheSkg
ewotCQkJaWYgKHNhY2stPnNhY2tfZGVsYXkgPiBTQ1RQX01BWF9TQUNLX0RFTEFZKQotCQkJCXNh
Y2stPnNhY2tfZGVsYXkgPSBTQ1RQX01BWF9TQUNLX0RFTEFZOwotCQkJaWYgKE1TRUNfVE9fVElD
S1Moc2Fjay0+c2Fja19kZWxheSkgPCAxKSB7Ci0JCQkJc2Fjay0+c2Fja19kZWxheSA9IFRJQ0tT
X1RPX01TRUMoMSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChzYWNrLT5zYWNr
X2RlbGF5KSB7Ci0JCQkJc3RjYi0+YXNvYy5kZWxheWVkX2FjayA9IHNhY2stPnNhY2tfZGVsYXk7
Ci0JCQl9Ci0JCQlpZiAoc2Fjay0+c2Fja19mcmVxKSB7Ci0JCQkJc3RjYi0+YXNvYy5zYWNrX2Zy
ZXEgPSBzYWNrLT5zYWNrX2ZyZXE7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpIHx8Ci0JCQkgICAgKHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mp
IHx8Ci0JCQkgICAgKHNhY2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0J
CQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpZiAoc2Fjay0+c2Fja19kZWxheSkgewotCQkJ
CQlpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSA9IE1TRUNf
VE9fVElDS1Moc2Fjay0+c2Fja19kZWxheSk7Ci0JCQkJfQotCQkJCWlmIChzYWNrLT5zYWNrX2Zy
ZXEpIHsKLQkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfc2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVx
OwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKHNhY2st
PnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAotCQkJICAgIChzYWNrLT5z
YWNrX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJaWYgKHNhY2stPnNhY2tf
ZGVsYXkpIHsKLQkJCQkJCXN0Y2ItPmFzb2MuZGVsYXllZF9hY2sgPSBzYWNrLT5zYWNrX2RlbGF5
OwotCQkJCQl9Ci0JCQkJCWlmIChzYWNrLT5zYWNrX2ZyZXEpIHsKLQkJCQkJCXN0Y2ItPmFzb2Mu
c2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVxOwotCQkJCQl9Ci0JCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQVVUSF9DSFVOSzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2F1
dGhjaHVuayAqc2F1dGg7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXV0aCwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hdXRoY2h1bmssIG9wdHNpemUpOwotCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7
Ci0JCWlmIChzY3RwX2F1dGhfYWRkX2NodW5rKHNhdXRoLT5zYXV0aF9jaHVuaywgaW5wLT5zY3Rw
X2VwLmxvY2FsX2F1dGhfY2h1bmtzKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlO
VkFMOwotCQl9Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJYnJlYWs7Ci0JfQotCWNhc2Ug
U0NUUF9BVVRIX0tFWToKLQl7Ci0JCXN0cnVjdCBzY3RwX2F1dGhrZXkgKnNjYTsKLQkJc3RydWN0
IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXM7Ci0JCXNjdHBfc2hhcmVka2V5X3QgKnNoYXJlZF9r
ZXk7Ci0JCXNjdHBfa2V5X3QgKmtleSA9IE5VTEw7Ci0JCXNpemVfdCBzaXplOwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc2NhLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXksIG9wdHNpemUp
OwotCQlpZiAoc2NhLT5zY2Ffa2V5bGVuZ3RoID09IDApIHsKLQkJCXNpemUgPSBvcHRzaXplIC0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXkpOwotCQl9IGVsc2UgewotCQkgICAgICAgIGlmIChz
Y2EtPnNjYV9rZXlsZW5ndGggKyBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGtleSkgPD0gb3B0c2l6
ZSkgewotCQkJCXNpemUgPSBzY2EtPnNjYV9rZXlsZW5ndGg7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzY2EtPnNjYV9hc3NvY19pZCk7Ci0KLQkJaWYgKHN0
Y2IpIHsKLQkJCXNoYXJlZF9rZXlzID0gJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXM7Ci0JCQkvKiBj
bGVhciB0aGUgY2FjaGVkIGtleXMgZm9yIHRoaXMga2V5IGlkICovCi0JCQlzY3RwX2NsZWFyX2Nh
Y2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKLQkJCS8qCi0JCQkgKiBjcmVhdGUg
dGhlIG5ldyBzaGFyZWQga2V5IGFuZAotCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQKLQkJCSAqLwot
CQkJaWYgKHNpemUgPiAwKSB7Ci0JCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwg
KHVpbnQzMl90KSBzaXplKTsKLQkJCQlpZiAoa2V5ID09IE5VTEwpIHsKLQkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVN
KTsKLQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJc2hhcmVkX2tleSA9IHNjdHBfYWxsb2Nfc2hhcmVk
a2V5KCk7Ci0JCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7Ci0JCQkJc2N0cF9mcmVlX2tleShr
ZXkpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVOT01FTSk7Ci0JCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5
OwotCQkJc2hhcmVkX2tleS0+a2V5aWQgPSBzY2EtPnNjYV9rZXludW1iZXI7Ci0JCQllcnJvciA9
IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJICAgIChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQ
X0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCXNoYXJlZF9rZXlz
ID0gJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5czsKLQkJCQkvKgotCQkJCSAqIGNsZWFyIHRoZSBj
YWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIGZvcgotCQkJCSAqIHRoaXMga2V5IGlkCi0JCQkJICov
Ci0JCQkJc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKGlucCwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsK
LQkJCQkvKgotCQkJCSAqIGNyZWF0ZSB0aGUgbmV3IHNoYXJlZCBrZXkgYW5kCi0JCQkJICogaW5z
ZXJ0L3JlcGxhY2UgaXQKLQkJCQkgKi8KLQkJCQlpZiAoc2l6ZSA+IDApIHsKLQkJCQkJa2V5ID0g
c2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKLQkJCQkJaWYgKGtl
eSA9PSBOVUxMKSB7Ci0JCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOwotCQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0J
CQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCX0K
LQkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQkJCQlpZiAoc2hhcmVk
X2tleSA9PSBOVUxMKSB7Ci0JCQkJCXNjdHBfZnJlZV9rZXkoa2V5KTsKLQkJCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PTUVN
KTsKLQkJCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJ
CQkJYnJlYWs7Ci0JCQkJfQotCQkJCXNoYXJlZF9rZXktPmtleSA9IGtleTsKLQkJCQlzaGFyZWRf
a2V5LT5rZXlpZCA9IHNjYS0+c2NhX2tleW51bWJlcjsKLQkJCQllcnJvciA9IHNjdHBfaW5zZXJ0
X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOwotCQkJfQotCQkJaWYgKChzY2EtPnNjYV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRf
QVNTT0MpIHx8Ci0JCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkg
ewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAt
PnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKLQkJCQkJc2hhcmVkX2tleXMgPSAmc3RjYi0+YXNvYy5zaGFyZWRfa2V5czsKLQkJCQkJLyog
Y2xlYXIgdGhlIGNhY2hlZCBrZXlzIGZvciB0aGlzIGtleSBpZCAqLwotCQkJCQlzY3RwX2NsZWFy
X2NhY2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKLQkJCQkJLyoKLQkJCQkJICog
Y3JlYXRlIHRoZSBuZXcgc2hhcmVkIGtleSBhbmQKLQkJCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQK
LQkJCQkJICovCi0JCQkJCWlmIChzaXplID4gMCkgewotCQkJCQkJa2V5ID0gc2N0cF9zZXRfa2V5
KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKLQkJCQkJCWlmIChrZXkgPT0gTlVMTCkg
ewotCQkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJ
CX0KLQkJCQkJfQotCQkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKLQkJ
CQkJaWYgKHNoYXJlZF9rZXkgPT0gTlVMTCkgewotCQkJCQkJc2N0cF9mcmVlX2tleShrZXkpOwot
CQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJ
CQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5OwotCQkJCQlzaGFyZWRfa2V5LT5rZXlpZCA9IHNjYS0+
c2NhX2tleW51bWJlcjsKLQkJCQkJZXJyb3IgPSBzY3RwX2luc2VydF9zaGFyZWRrZXkoc2hhcmVk
X2tleXMsIHNoYXJlZF9rZXkpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQot
CQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2Fz
ZSBTQ1RQX0hNQUNfSURFTlQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9obWFjYWxnbyAqc2htYWM7Ci0J
CXNjdHBfaG1hY2xpc3RfdCAqaG1hY2xpc3Q7Ci0JCXVpbnQxNl90IGhtYWNpZDsKLQkJdWludDMy
X3QgaTsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X2htYWNhbGdvLCBvcHRzaXplKTsKLQkJaWYgKChvcHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2htYWNhbGdvKSArIHNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRzICogc2l6ZW9mKHVpbnQx
Nl90KSkgfHwKLQkJICAgIChzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50cyA+IDB4ZmZmZikp
IHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0K
LQkJaG1hY2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KCh1aW50MTZfdClzaG1hYy0+c2htYWNf
bnVtYmVyX29mX2lkZW50cyk7Ci0JCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9N
RU0pOwotCQkJZXJyb3IgPSBFTk9NRU07Ci0JCQlicmVhazsKLQkJfQotCQlmb3IgKGkgPSAwOyBp
IDwgc2htYWMtPnNobWFjX251bWJlcl9vZl9pZGVudHM7IGkrKykgewotCQkJaG1hY2lkID0gc2ht
YWMtPnNobWFjX2lkZW50c1tpXTsKLQkJCWlmIChzY3RwX2F1dGhfYWRkX2htYWNpZChobWFjbGlz
dCwgaG1hY2lkKSkgewotCQkJCS8qIGludmFsaWQgSE1BQ3Mgd2VyZSBmb3VuZCAqLzsKLQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCXNjdHBfZnJlZV9obWFjbGlzdCho
bWFjbGlzdCk7Ci0JCQkJZ290byBzY3RwX3NldF9obWFjX2RvbmU7Ci0JCQl9Ci0JCX0KLQkJZm9y
IChpID0gMDsgaSA8IGhtYWNsaXN0LT5udW1fYWxnbzsgaSsrKSB7Ci0JCQlpZiAoaG1hY2xpc3Qt
PmhtYWNbaV0gPT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgewotCQkJCS8qIGFscmVhZHkgaW4g
bGlzdCAqLwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmIChpID09IGhtYWNsaXN0LT5udW1f
YWxnbykgewotCQkJLyogbm90IGZvdW5kIGluIGxpc3QgKi8KLQkJCXNjdHBfZnJlZV9obWFjbGlz
dChobWFjbGlzdCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVh
azsKLQkJfQotCQkvKiBzZXQgaXQgb24gdGhlIGVuZHBvaW50ICovCi0JCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCWlmIChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpCi0JCQlzY3RwX2ZyZWVfaG1h
Y2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKLQkJaW5wLT5zY3RwX2VwLmxvY2FsX2ht
YWNzID0gaG1hY2xpc3Q7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlzY3RwX3NldF9obWFj
X2RvbmU6Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQVVUSF9BQ1RJVkVfS0VZOgotCXsKLQkJ
c3RydWN0IHNjdHBfYXV0aGtleWlkICpzY2FjdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNj
YWN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsKLQotCQkvKiBzZXQgdGhl
IGFjdGl2ZSBrZXkgb24gdGhlIHJpZ2h0IHBsYWNlICovCi0JCWlmIChzdGNiKSB7Ci0JCQkvKiBz
ZXQgdGhlIGFjdGl2ZSBrZXkgb24gdGhlIGFzc29jICovCi0JCQlpZiAoc2N0cF9hdXRoX3NldGFj
dGl2ZWtleShzdGNiLAotCQkJCQkJICAgc2NhY3QtPnNjYWN0X2tleW51bWJlcikpIHsKLQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwKLQkJCQkJCSAgICBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsCi0JCQkJCQkgICAgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJ
CX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoc2NhY3QtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAotCQkJICAgIChzY2FjdC0+c2Nh
Y3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKLQkJCQlpZiAoc2N0cF9hdXRoX3NldGFjdGl2ZWtleV9lcChpbnAsIHNjYWN0LT5zY2FjdF9r
ZXludW1iZXIpKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJ
CX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAoKHNjYWN0LT5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAgKHNjYWN0LT5zY2Fj
dF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OwotCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2Js
aXN0KSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCXNjdHBfYXV0aF9zZXRhY3Rp
dmVrZXkoc3RjYiwgc2NhY3QtPnNjYWN0X2tleW51bWJlcik7Ci0JCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfQVVUSF9ERUxFVEVfS0VZOgotCXsKLQkJc3RydWN0IHNj
dHBfYXV0aGtleWlkICpzY2RlbDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNjZGVsLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc2NkZWwtPnNjYWN0X2Fzc29jX2lkKTsKLQotCQkvKiBkZWxldGUgdGhlIGtleSBm
cm9tIHRoZSByaWdodCBwbGFjZSAqLwotCQlpZiAoc3RjYikgewotCQkJaWYgKHNjdHBfZGVsZXRl
X3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVtYmVyKSkgewotCQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8Ci0JCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykgfHwKLQkJCSAgICAoc2NkZWwtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaWYgKHNjdHBfZGVsZXRlX3NoYXJl
ZGtleV9lcChpbnAsIHNjZGVsLT5zY2FjdF9rZXludW1iZXIpKSB7Ci0JCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7
Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JCQl9Ci0JCQlpZiAoKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT
T0MpIHx8Ci0JCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykp
IHsKLQkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5w
LT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7Ci0JCQkJCXNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVt
YmVyKTsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BVVRIX0RF
QUNUSVZBVEVfS0VZOgotCXsKLQkJc3RydWN0IHNjdHBfYXV0aGtleWlkICprZXlpZDsKLQotCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGtleWlkLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwg
b3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwga2V5aWQtPnNjYWN0X2Fzc29j
X2lkKTsKLQotCQkvKiBkZWFjdGl2YXRlIHRoZSBrZXkgZnJvbSB0aGUgcmlnaHQgcGxhY2UgKi8K
LQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChzY3RwX2RlYWN0X3NoYXJlZGtleShzdGNiLCBrZXlpZC0+
c2NhY3Rfa2V5bnVtYmVyKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGtleWlk
LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoa2V5aWQt
PnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCQkJaWYgKHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKGlucCwga2V5aWQtPnNjYWN0
X2tleW51bWJlcikpIHsKLQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQkJfQotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoa2V5aWQtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoa2V5aWQtPnNj
YWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc2N0cF9kZWFjdF9zaGFy
ZWRrZXkoc3RjYiwga2V5aWQtPnNjYWN0X2tleW51bWJlcik7Ci0JCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0J
CWJyZWFrOwotCX0KLQljYXNlIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVDoKLQl7Ci0JCXN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJaWYgKGF2LT5hc3NvY192
YWx1ZSAmICh+U0NUUF9FTkFCTEVfVkFMVUVfTUFTSykpIHsKLQkJICAgICAgICBTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0ZJTkRfU1RDQihp
bnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29jLmxv
Y2FsX3N0cnJlc2V0X3N1cHBvcnQgPSAodWludDhfdClhdi0+YXNzb2NfdmFsdWU7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQ
X0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5wLT5sb2NhbF9zdHJyZXNldF9z
dXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVlOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQkJCX0KLQkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19s
aXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc3Rj
Yi0+YXNvYy5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVl
OwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJCX0KLQotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUkVTRVRfU1RS
RUFNUzoKLQl7Ci0JCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnN0cnJzdDsKLQkJaW50IGks
IHNlbmRfb3V0ID0gMDsKLQkJaW50IHNlbmRfaW4gPSAwOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc3RycnN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMsIG9wdHNpemUpOwot
CQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHN0cnJzdC0+c3JzX2Fzc29jX2lkKTsKLQkJaWYg
KHN0Y2IgPT0gTlVMTCkgewotCQkgICAgICAgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7Ci0JCQllcnJvciA9IEVOT0VO
VDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9
PSAwKSB7Ci0JCQkvKgotCQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSBjaHVuayB0eXBl
LgotCQkJICovCi0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsKLQkJCWVycm9yID0gRU9QTk9UU1VQUDsKLQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChzaXplb2Yoc3Ry
dWN0IHNjdHBfcmVzZXRfc3RyZWFtcykgKwotCQkgICAgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVh
bXMgKiBzaXplb2YodWludDE2X3QpID4gb3B0c2l6ZSkgewotCQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RycnN0LT5z
cnNfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORykgewotCQkJc2VuZF9pbiA9IDE7
Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcpIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
QUxSRUFEWSk7Ci0JCQkJZXJyb3IgPSBFQUxSRUFEWTsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0cnJzdC0+c3JzX2ZsYWdzICYgU0NU
UF9TVFJFQU1fUkVTRVRfT1VUR09JTkcpIHsKLQkJCXNlbmRfb3V0ID0gMTsKLQkJfQotCQlpZiAo
KHN0cnJzdC0+c3JzX251bWJlcl9zdHJlYW1zID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JF
U0VUKSAmJiBzZW5kX2luKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOwotCQkJZXJyb3IgPSBFTk9NRU07Ci0J
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoKHNlbmRfaW4g
PT0gMCkgJiYgKHNlbmRfb3V0ID09IDApKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlicmVhazsKLQkJfQotCQlmb3Ig
KGkgPSAwOyBpIDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgewotCQkJaWYgKChz
ZW5kX2luKSAmJgotCQkJICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlzdFtpXSA+IHN0Y2ItPmFz
b2Muc3RyZWFtaW5jbnQpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCQlicmVhazsKLQkJCX0KLQkJCWlmICgoc2VuZF9vdXQpICYmCi0JCQkgICAgKHN0cnJzdC0+
c3JzX3N0cmVhbV9saXN0W2ldID4gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpKSB7Ci0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlp
ZiAoZXJyb3IpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCWJyZWFrOwotCQl9Ci0J
CWlmIChzZW5kX291dCkgewotCQkJaW50IGNudDsKLQkJCXVpbnQxNl90IHN0cm07Ci0JCQlpZiAo
c3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMpIHsKLQkJCQlmb3IgKGkgPSAwLCBjbnQgPSAwOyBp
IDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgewotCQkJCQlzdHJtID0gc3RycnN0
LT5zcnNfc3RyZWFtX2xpc3RbaV07Ci0JCQkJCWlmIChzdGNiLT5hc29jLnN0cm1vdXRbc3RybV0u
c3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikgewotCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3N0
cm1dLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKLQkJCQkJCWNudCsrOwotCQkJ
CQl9Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQkvKiBJdHMgYWxsICovCi0JCQkJZm9yIChpID0g
MCwgY250ID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKLQkJCQkJaWYg
KHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKSB7Ci0JCQkJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5H
OwotCQkJCQkJY250Kys7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJaWYgKHNlbmRfaW4p
IHsKLQkJCWVycm9yID0gc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RjYiwgc3RycnN0LT5zcnNf
bnVtYmVyX3N0cmVhbXMsCi0JCQkJCQkJc3RycnN0LT5zcnNfc3RyZWFtX2xpc3QsCi0JCQkJCQkJ
c2VuZF9pbiwgMCwgMCwgMCwgMCwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQllcnJvciA9IHNjdHBfc2Vu
ZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKLQkJ
fQotCQlpZiAoZXJyb3IgPT0gMCkgewotCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX1NUUlJTVF9SRVEsIFNDVFBfU09fTE9DS0VEKTsKLQkJfSBlbHNlIHsK
LQkJCSAvKgotCQkJICAqIEZvciBvdXRnb2luZyBzdHJlYW1zIGRvbid0IHJlcG9ydCBhbnkgcHJv
YmxlbXMgaW4KLQkJCSAgKiBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRoZSBhcHBsaWNhdGlvbi4K
LQkJCSAgKiBYWFg6IERvdWJsZSBjaGVjayByZXNldHRpbmcgaW5jb21pbmcgc3RyZWFtcy4KLQkJ
CSAgKi8KLQkJCWVycm9yID0gMDsKLQkJfQotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJy
ZWFrOwotCX0KLQljYXNlIFNDVFBfQUREX1NUUkVBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hZGRf
c3RyZWFtcyAqc3RyYWRkOwotCQl1aW50OF90IGFkZHN0cmVhbSA9IDA7Ci0JCXVpbnQxNl90IGFk
ZF9vX3N0cm1jbnQgPSAwOwotCQl1aW50MTZfdCBhZGRfaV9zdHJtY250ID0gMDsKLQotCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHN0cmFkZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcywg
b3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3RyYWRkLT5zYXNfYXNzb2Nf
aWQpOwotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVy
cm9yID0gRU5PRU5UOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdf
c3VwcG9ydGVkID09IDApIHsKLQkJCS8qCi0JCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhl
IGNodW5rIHR5cGUuCi0JCQkgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQkJZXJyb3IgPSBFT1BO
T1RTVVBQOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYg
KHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7Ci0JCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7
Ci0JCQllcnJvciA9IEVBTFJFQURZOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJl
YWs7Ci0JCX0KLQkJaWYgKChzdHJhZGQtPnNhc19vdXRzdHJtcyA9PSAwKSAmJgotCQkgICAgKHN0
cmFkZC0+c2FzX2luc3RybXMgPT0gMCkpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJZ290byBz
a2lwX3N0dWZmOwotCQl9Ci0JCWlmIChzdHJhZGQtPnNhc19vdXRzdHJtcykgewotCQkJYWRkc3Ry
ZWFtID0gMTsKLQkJCS8qIFdlIGFsbG9jYXRlIGhlcmUgKi8KLQkJCWFkZF9vX3N0cm1jbnQgPSBz
dHJhZGQtPnNhc19vdXRzdHJtczsKLQkJCWlmICgoKChpbnQpYWRkX29fc3RybWNudCkgKyAoKGlu
dClzdGNiLT5hc29jLnN0cmVhbW91dGNudCkpID4gMHgwMDAwZmZmZikgewotCQkJCS8qIFlvdSBj
YW4ndCBoYXZlIG1vcmUgdGhhbiA2NGsgKi8KLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlnb3Rv
IHNraXBfc3R1ZmY7Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0cmFkZC0+c2FzX2luc3RybXMpIHsKLQkJ
CWludCBjbnQ7Ci0KLQkJCWFkZHN0cmVhbSB8PSAyOwotCQkJLyogV2UgYWxsb2NhdGUgaW5zaWRl
IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKCkgKi8KLQkJCWFkZF9pX3N0cm1jbnQgPSBzdHJhZGQt
PnNhc19pbnN0cm1zOwotCQkJY250ID0gYWRkX2lfc3RybWNudDsKLQkJCWNudCArPSBzdGNiLT5h
c29jLnN0cmVhbWluY250OwotCQkJaWYgKGNudCA+IDB4MDAwMGZmZmYpIHsKLQkJCQkvKiBZb3Ug
Y2FuJ3QgaGF2ZSBtb3JlIHRoYW4gNjRrICovCi0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJZ290
byBza2lwX3N0dWZmOwotCQkJfQotCQkJaWYgKGNudCA+IChpbnQpc3RjYi0+YXNvYy5tYXhfaW5i
b3VuZF9zdHJlYW1zKSB7Ci0JCQkJLyogTW9yZSB0aGFuIHlvdSBhcmUgYWxsb3dlZCAqLwotCQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJCWdvdG8gc2tpcF9zdHVmZjsKLQkJCX0KLQkJfQotCQllcnJv
ciA9IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDAsIGFkZHN0cmVh
bSwgYWRkX29fc3RybWNudCwgYWRkX2lfc3RybWNudCwgMCk7Ci0JCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRLCBTQ1RQX1NPX0xPQ0tFRCk7
Ci0Jc2tpcF9zdHVmZjoKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlicmVhazsKLQl9Ci0J
Y2FzZSBTQ1RQX1JFU0VUX0FTU09DOgotCXsKLQkJaW50IGk7Ci0JCXVpbnQzMl90ICp2YWx1ZTsK
LQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCBvcHRzaXpl
KTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCAoc2N0cF9hc3NvY190KSAqdmFsdWUpOwot
CQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKLQkJCWVycm9yID0g
RU5PRU5UOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9y
dGVkID09IDApIHsKLQkJCS8qCi0JCQkgKiBQZWVyIGRvZXMgbm90IHN1cHBvcnQgdGhlIGNodW5r
IHR5cGUuCi0JCQkgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwotCQkJZXJyb3IgPSBFT1BOT1RTVVBQ
OwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2It
PmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCQll
cnJvciA9IEVBTFJFQURZOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJYnJlYWs7Ci0J
CX0KLQkJLyogSXMgdGhlcmUgYW55IGRhdGEgcGVuZGluZyBpbiB0aGUgc2VuZCBvciBzZW50IHF1
ZXVlcz8gKi8KLQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSB8fAot
CQkgICAgIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpKSB7Ci0JCWJ1c3lfb3V0
OgotCQkJZXJyb3IgPSBFQlVTWTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJCWJyZWFrOwotCQl9Ci0JCS8qIERvIGFueSBzdHJlYW1zIGhhdmUgZGF0YSBxdWV1
ZWQ/ICovCi0JCWZvciAoIGkgPSAwOyBpPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudDsgaSsrKSB7
Ci0JCQlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7
Ci0JCQkJZ290byBidXN5X291dDsKLQkJCX0KLQkJfQotCQllcnJvciA9IHNjdHBfc2VuZF9zdHJf
cmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDEsIDAsIDAsIDAsIDApOwotCQlzY3RwX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1JFUSwgU0NUUF9TT19M
T0NLRUQpOwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFND
VFBfQ09OTkVDVF9YOgotCQlpZiAob3B0c2l6ZSA8IChzaXplb2YoaW50KSArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwot
CQkJYnJlYWs7Ci0JCX0KLQkJZXJyb3IgPSBzY3RwX2RvX2Nvbm5lY3RfeChzbywgaW5wLCBvcHR2
YWwsIG9wdHNpemUsIHAsIDApOwotCQlicmVhazsKLQljYXNlIFNDVFBfQ09OTkVDVF9YX0RFTEFZ
RUQ6Ci0JCWlmIChvcHRzaXplIDwgKHNpemVvZihpbnQpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsK
LQkJfQotCQllcnJvciA9IHNjdHBfZG9fY29ubmVjdF94KHNvLCBpbnAsIG9wdHZhbCwgb3B0c2l6
ZSwgcCwgMSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9DT05ORUNUX1hfQ09NUExFVEU6Ci0Jewot
CQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCi0JCS8qIEZJWE1FIE1UOiBjaGVjayBjb3JyZWN0PyAq
LwotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhLCBvcHR2YWwsIHN0cnVjdCBzb2NrYWRkciwgb3B0
c2l6ZSk7Ci0KLQkJLyogZmluZCB0Y2IgKi8KLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0NPTk5FQ1RFRCkgewotCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQkJCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQkJCWlmIChzdGNiKSB7Ci0JCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCX0KLQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJ
fSBlbHNlIHsKLQkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBz
dGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAotCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBO
T1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJCSAqLwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsK
LQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCBOVUxMLCBO
VUxMLCBOVUxMKTsKLQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JF
RihpbnApOwotCQkJfQotCQl9Ci0KLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5U
KTsKLQkJCWVycm9yID0gRU5PRU5UOwotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2Mu
ZGVsYXllZF9jb25uZWN0aW9uID09IDEpIHsKLQkJCXN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0
aW9uID0gMDsKLQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNiLT5hc29jLnRpbWVf
ZW50ZXJlZCk7Ci0JCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwg
c3RjYiwKLQkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCQkJCQlTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ184KTsKLQkJCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAs
IHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBhbHJlYWR5
IGV4cGlyZWQgb3IgZGlkIG5vdCB1c2UgZGVsYXllZAotCQkJICogY29ubmVjdHgKLQkJCSAqLwot
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFMUkVBRFkpOwotCQkJZXJyb3IgPSBFQUxSRUFEWTsKLQkJfQotCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfTUFYX0JVUlNUOgotCXsKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAwMAotCQl1
aW50OF90ICpidXJzdDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGJ1cnN0LCBvcHR2YWwsIHVp
bnQ4X3QsIG9wdHNpemUpOwotCi0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlucC0+c2N0cF9l
cC5tYXhfYnVyc3QgPSAqYnVyc3Q7Ci0JCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLSNlbHNlCi0J
CXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlzdGNi
LT5hc29jLm1heF9idXJzdCA9IGF2LT5hc3NvY192YWx1ZTsKLQkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
SU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
KSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpbnAtPnNjdHBfZXAubWF4X2J1cnN0ID0gYXYtPmFzc29j
X3ZhbHVlOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgoYXYtPmFz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKLQkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKLQkJCQkJc3RjYi0+YXNvYy5tYXhfYnVyc3QgPSBhdi0+YXNz
b2NfdmFsdWU7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQl9Ci0JCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JfQotCWNhc2Ug
U0NUUF9NQVhTRUc6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0JCWludCBv
dmg7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29j
X2lkKTsKLQotCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYp
IHsKLQkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOwotCQl9IGVsc2UgewotCQkJb3ZoID0gU0NU
UF9NRURfVjRfT1ZFUkhFQUQ7Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChhdi0+YXNzb2Nf
dmFsdWUpIHsKLQkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9IChhdi0+YXNzb2NfdmFs
dWUgKyBvdmgpOwotCQkJfSBlbHNlIHsKLQkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9
IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7
Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQkvKiBGSVhNRSBNVDogSSB0aGluayB0aGlz
IGlzIG5vdCBpbiB0dW5lIHdpdGggdGhlIEFQSSBJRCAqLwotCQkJCWlmIChhdi0+YXNzb2NfdmFs
dWUpIHsKLQkJCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoYXYtPmFzc29jX3ZhbHVlICsgb3Zo
KTsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVM
VF9NQVhTRUdNRU5UOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVs
c2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJ
YnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9FVkVOVFM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9ldmVudF9z
dWJzY3JpYmUgKmV2ZW50czsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGV2ZW50cywgb3B0dmFs
LCBzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUsIG9wdHNpemUpOwotCi0JCVNDVFBfSU5QX1dM
T0NLKGlucCk7Ci0JCWlmIChldmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCkgewotCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpOwotCQl9IGVsc2Ug
ewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5U
KTsKLQkJfQotCi0JCWlmIChldmVudHMtPnNjdHBfYXNzb2NpYXRpb25fZXZlbnQpIHsKLQkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpOwotCQl9IGVs
c2UgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VW
TlQpOwotCQl9Ci0KLQkJaWYgKGV2ZW50cy0+c2N0cF9hZGRyZXNzX2V2ZW50KSB7Ci0JCQlzY3Rw
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKLQkJfSBlbHNl
IHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5U
KTsKLQkJfQotCi0JCWlmIChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50KSB7Ci0JCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKLQkJ
fSBlbHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UKTsKLQkJfQotCi0JCWlmIChldmVudHMtPnNjdHBfcGVlcl9lcnJvcl9ldmVudCkg
ewotCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOwot
CQl9IGVsc2UgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQ
RUVSRVJSKTsKLQkJfQotCi0JCWlmIChldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQpIHsKLQkJ
CXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOwot
CQl9IGVsc2UgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZT
SFVURE9XTkVWTlQpOwotCQl9Ci0KLQkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5
X2V2ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVW
TlQpOwotCQl9IGVsc2UgewotCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X1BEQVBJRVZOVCk7Ci0JCX0KLQotCQlpZiAoZXZlbnRzLT5zY3RwX2FkYXB0YXRpb25fbGF5ZXJf
ZXZlbnQpIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJ
T05FVk5UKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9G
TEFHU19BREFQVEFUSU9ORVZOVCk7Ci0JCX0KLQotCQlpZiAoZXZlbnRzLT5zY3RwX2F1dGhlbnRp
Y2F0aW9uX2V2ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19B
VVRIRVZOVCk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfQVVUSEVWTlQpOwotCQl9Ci0KLQkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJfZHJ5X2V2
ZW50KSB7Ci0JCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsK
LQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19EUllF
Vk5UKTsKLQkJfQotCi0JCWlmIChldmVudHMtPnNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSB7Ci0J
CQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsK
LQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJF
QU1fUkVTRVRFVk5UKTsKLQkJfQotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0KLQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlpZiAoZXZlbnRz
LT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5w
LCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWQVNTT0NFVk5UKTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
c2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09D
RVZOVCk7Ci0JCQl9Ci0JCQlpZiAoZXZlbnRzLT5zY3RwX2FkZHJlc3NfZXZlbnQpIHsKLQkJCQlz
Y3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVW
TlQpOwotCQkJfSBlbHNlIHsKLQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKLQkJCX0KLQkJCWlmIChldmVudHMtPnNjdHBf
c2VuZF9mYWlsdXJlX2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0
cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlM
RVZOVCk7Ci0JCQl9Ci0JCQlpZiAoZXZlbnRzLT5zY3RwX3BlZXJfZXJyb3JfZXZlbnQpIHsKLQkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVS
RVJSKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwg
U0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9z
aHV0ZG93bl9ldmVudCkgewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBfc3Rj
Yl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQp
OwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50KSB7Ci0J
CQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVW
TlQpOwotCQkJfSBlbHNlIHsKLQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19QREFQSUVWTlQpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9hZGFw
dGF0aW9uX2xheWVyX2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCk7Ci0JCQl9IGVsc2UgewotCQkJCXNjdHBf
c3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5U
KTsKLQkJCX0KLQkJCWlmIChldmVudHMtPnNjdHBfYXV0aGVudGljYXRpb25fZXZlbnQpIHsKLQkJ
CQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FVVEhFVk5U
KTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfQVVUSEVWTlQpOwotCQkJfQotCQkJaWYgKGV2ZW50cy0+c2N0cF9zZW5kZXJf
ZHJ5X2V2ZW50KSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19EUllFVk5UKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2Zm
KGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCk7Ci0JCQl9Ci0JCQlpZiAoZXZlbnRz
LT5zY3RwX3N0cmVhbV9yZXNldF9ldmVudCkgewotCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlu
cCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVCk7Ci0JCQl9IGVsc2Ugewot
CQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1NUUkVB
TV9SRVNFVEVWTlQpOwotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCS8q
IFNlbmQgdXAgdGhlIHNlbmRlciBkcnkgZXZlbnQgb25seSBmb3IgMS10by0xIHN0eWxlIHNvY2tl
dHMuICovCi0JCWlmIChldmVudHMtPnNjdHBfc2VuZGVyX2RyeV9ldmVudCkgewotCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgewotCQkJCXN0Y2IgPSBM
SVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQkJCQlpZiAoc3RjYikgewotCQkJCQlT
Q1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2Vu
ZF9xdWV1ZSkgJiYKLQkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUp
ICYmCi0JCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7Ci0JCQkJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwgIDAsIE5VTEws
IFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CQkJfQotCQkJfQotCQl9Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9BREFQVEFUSU9OX0xBWUVSOgotCXsKLQkJc3RydWN0IHNjdHBfc2V0YWRhcHRh
dGlvbiAqYWRhcF9iaXRzOwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYWRhcF9iaXRzLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24sIG9wdHNpemUpOwotCQlTQ1RQX0lOUF9XTE9D
SyhpbnApOwotCQlpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3IgPSBhZGFw
X2JpdHMtPnNzYl9hZGFwdGF0aW9uX2luZDsKLQkJaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5
ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQli
cmVhazsKLQl9Ci0jaWZkZWYgU0NUUF9ERUJVRwotCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdf
U0VROgotCXsKLQkJdWludDMyX3QgKnZ2djsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZ2diwg
b3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlu
cC0+c2N0cF9lcC5pbml0aWFsX3NlcXVlbmNlX2RlYnVnID0gKnZ2djsKLQkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOwotCQlicmVhazsKLQl9Ci0jZW5kaWYKLQljYXNlIFNDVFBfREVGQVVMVF9TRU5E
X1BBUkFNOgotCXsKLQkJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc19pbmZvOwotCi0JCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc19pbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8sIG9w
dHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2luZm9fYXNzb2Nf
aWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoc19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNi
LT5hc29jLnN0cmVhbW91dGNudCkgewotCQkJCW1lbWNweSgmc3RjYi0+YXNvYy5kZWZfc2VuZCwg
c19pbmZvLCBtaW4ob3B0c2l6ZSwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVmX3NlbmQpKSk7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKHNfaW5mby0+c2luZm9fYXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8Ci0JCQkgICAgKHNfaW5mby0+c2luZm9fYXNz
b2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJ
CQltZW1jcHkoJmlucC0+ZGVmX3NlbmQsIHNfaW5mbywgbWluKG9wdHNpemUsIHNpemVvZihpbnAt
PmRlZl9zZW5kKSkpOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0KLQkJCWlmICgo
c19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8Ci0JCQkgICAg
KHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAo
c19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgewotCQkJCQkJ
bWVtY3B5KCZzdGNiLT5hc29jLmRlZl9zZW5kLCBzX2luZm8sIG1pbihvcHRzaXplLCBzaXplb2Yo
c3RjYi0+YXNvYy5kZWZfc2VuZCkpKTsKLQkJCQkJfQotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQlicmVh
azsKLQl9Ci0JY2FzZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9w
YWRkcnBhcmFtcyAqcGFkZHJwOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBz
b2NrYWRkciAqYWRkcjsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0
cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcywgb3B0c2l6ZSk7Ci0J
CVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgcGFkZHJwLT5zcHBfYXNzb2NfaWQpOwotCi0jaWYg
ZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCQlpZiAocGFkZHJwLT5zcHBfYWRkcmVz
cy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7
Ci0KLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZwYWRkcnAtPnNwcF9hZGRyZXNz
OwotCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQkJ
aW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX3N0b3JlOwotCQkJfSBlbHNlIHsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOwotCQkJfQotCQl9IGVsc2UgewotCQkJYWRkciA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLQkJfQotI2Vsc2UKLQkJ
YWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKLSNlbmRpZgot
CQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7
Ci0JCX0gZWxzZSB7Ci0JCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3Nv
Y2lhdGlvbl9lcF9hZGRyKCkgd2lsCi0JCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0
aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKLQkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkg
aXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCi0JCQkgKi8KLQkJCW5ldCA9IE5VTEw7Ci0JCQlTQ1RQ
X0lOUF9JTkNSX1JFRihpbnApOwotCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fk
ZHIoJmlucCwgYWRkciwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZu
ZXQsIE5VTEwsIE5VTEwpOwotCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7Ci0JCQl9Ci0JCX0KLQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0g
TlVMTCkpIHsKLSNpZmRlZiBJTkVUCi0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQp
IHsKLQotCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCQkJCXNpbiA9IChzdHJ1Y3Qgc29j
a2FkZHJfaW4gKilhZGRyOwotCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJf
QU5ZKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQotI2VuZGlm
Ci0jaWZkZWYgSU5FVDYKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopYWRkcjsKLQkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5z
aW42X2FkZHIpKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0gZWxzZQot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJaWYgKGFkZHItPnNhX2ZhbWls
eSA9PSBBRl9DT05OKSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOwotCi0JCQkJ
c2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOwotCQkJCWlmIChzY29ubi0+c2Nv
bm5fYWRkciAhPSBOVUxMKSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0g
ZWxzZQotI2VuZGlmCi0JCQl7Ci0JCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7Ci0JCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQot
CQkvKiBzYW5pdHkgY2hlY2tzICovCi0JCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJf
RU5BQkxFKSAmJiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElTQUJMRSkpIHsKLQkJCWlm
IChzdGNiKQotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQly
ZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQotCQlpZiAoKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BN
VFVEX0VOQUJMRSkgJiYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpKSB7
Ci0JCQlpZiAoc3RjYikKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJ
LyoqKioqKioqKioqKioqKioqKioqKioqKlRDQiBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioq
KioqLwotCQkJaWYgKG5ldCAhPSBOVUxMKSB7Ci0JCQkJLyoqKioqKioqKioqKioqKioqKioqKioq
Kk5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLwotCQkJCWlmIChwYWRkcnAtPnNw
cF9mbGFncyAmIFNQUF9IQl9ESVNBQkxFKSB7Ci0JCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKLQkJCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX05PSEIpKSB7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBF
X0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCi0JCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJF
USArIFNDVFBfTE9DXzkpOwotCQkJCQl9Ci0JCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FE
RFJfTk9IQjsKLQkJCQl9Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJM
RSkgewotCQkJCQlpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCkgewotCQkJCQkJbmV0LT5oZWFy
dF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKLQkJCQkJfSBlbHNlIGlmIChw
YWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9USU1FX0lTX1pFUk8pIHsKLQkJCQkJCW5ldC0+aGVh
cnRfYmVhdF9kZWxheSA9IDA7Ci0JCQkJCX0KLQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAotCQkJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTApOwotCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKLQkJCQkJbmV0
LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9IQjsKLQkJCQl9Ci0JCQkJaWYgKHBhZGRycC0+
c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCkgewotCQkJCQkvKiBvbiBkZW1hbmQgSEIgKi8KLQkJ
CQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQlzY3RwX2No
dW5rX291dHB1dChpbnAsIHN0Y2IsICBTQ1RQX09VVFBVVF9GUk9NX1NPQ0tPUFQsIFNDVFBfU09f
TE9DS0VEKTsKLQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFU
LCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJfQotCQkJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3MgJiBT
UFBfUE1UVURfRElTQUJMRSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFMTEVT
VF9QTVRVKSkgewotCQkJCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGlt
ZXIudGltZXIpKSB7Ci0JCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1BBVEhN
VFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCi0JCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSAr
IFNDVFBfTE9DXzExKTsKLQkJCQkJfQotCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERS
X05PX1BNVFVEOwotCQkJCQluZXQtPm10dSA9IHBhZGRycC0+c3BwX3BhdGhtdHU7Ci0JCQkJCXN3
aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQkJ
Y2FzZSBBRl9JTkVUOgotCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0J
CQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWNhc2UgQUZfSU5FVDY6Ci0J
CQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsKLQkJCQkJCWJyZWFrOwotI2VuZGlm
Ci0JCQkJCWRlZmF1bHQ6Ci0JCQkJCQlicmVhazsKLQkJCQkJfQotCQkJCQlpZiAobmV0LT5tdHUg
PCBzdGNiLT5hc29jLnNtYWxsZXN0X210dSkgewotCQkJCQkJc2N0cF9wYXRobXR1X2FkanVzdG1l
bnQoc3RjYiwgbmV0LT5tdHUpOwotCQkJCQl9Ci0JCQkJfQotCQkJCWlmIChwYWRkcnAtPnNwcF9m
bGFncyAmIFNQUF9QTVRVRF9FTkFCTEUpIHsKLQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJ
TkcoJm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKLQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NU
UF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQpOwotCQkJCQl9Ci0JCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PX1BNVFVEOwotCQkJCX0KLQkJCQlpZiAo
cGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgewotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1BGKSB7Ci0JCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IHBhZGRycC0+c3BwX3Bh
dGhtYXhyeHQpIHsKLQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJ
CQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRk
cnAtPnNwcF9wYXRobWF4cnh0KSAmJgotCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50ID4gbmV0
LT5wZl90aHJlc2hvbGQpKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9Q
RjsKLQkJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJ
CQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJCQkJICAg
ICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCQkgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTIpOwotCQkJCQkJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgbmV0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkgewotCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBwYWRkcnAt
PnNwcF9wYXRobWF4cnh0KSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJf
UkVBQ0hBQkxFOwotCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0Vf
RE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxz
ZSB7Ci0JCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0
KSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJ
CQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0
LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQkJbmV0LT5mYWlsdXJlX3Ro
cmVzaG9sZCA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7Ci0JCQkJfQotCQkJCWlmIChwYWRkcnAt
PnNwcF9mbGFncyAmIFNQUF9EU0NQKSB7Ci0JCQkJCW5ldC0+ZHNjcCA9IHBhZGRycC0+c3BwX2Rz
Y3AgJiAweGZjOwotCQkJCQluZXQtPmRzY3AgfD0gMHgwMTsKLQkJCQl9Ci0jaWZkZWYgSU5FVDYK
LQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSVBWNl9GTE9XTEFCRUwpIHsKLQkJCQkJ
aWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQkJCW5l
dC0+Zmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAweDAwMGZmZmZmOwot
CQkJCQkJbmV0LT5mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKLQkJCQkJfQotCQkJCX0KLSNlbmRp
ZgotCQkJfSBlbHNlIHsKLQkJCQkvKioqKioqKioqKioqKioqKioqKioqKioqQVNTT0MgT05MWSAt
LSBOTyBORVQgU1BFQ0lGSUMgU0VUICoqKioqKioqKioqKioqKioqKi8KLQkJCQlpZiAocGFkZHJw
LT5zcHBfcGF0aG1heHJ4dCAhPSAwKSB7Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJl
ID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dDsKLQkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNi
LT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9QRikgewotCQkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50ID4gcGFkZHJwLT5zcHBf
cGF0aG1heHJ4dCkgewotCQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsK
LQkJCQkJCQl9Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA8
PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0KSAmJgotCQkJCQkJCSAgICAobmV0LT5lcnJvcl9jb3Vu
dCA+IG5ldC0+cGZfdGhyZXNob2xkKSkgewotCQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NU
UF9BRERSX1BGOwotCQkJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tF
RCk7Ci0JCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAot
CQkJCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAotCQkJCQkJ
CQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTMpOwot
CQkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIG5ldCk7Ci0JCQkJCQkJfQotCQkJCQkJfQotCQkJCQkJaWYgKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJCQkJCQlpZiAobmV0LT5lcnJv
cl9jb3VudCA+IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpIHsKLQkJCQkJCQkJbmV0LT5kZXN0X3N0
YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOwotCQkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NU
UF9OT1RJRllfSU5URVJGQUNFX0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOwot
CQkJCQkJCX0KLQkJCQkJCX0gZWxzZSB7Ci0JCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPD0g
cGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgewotCQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NU
UF9BRERSX1JFQUNIQUJMRTsKLQkJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lO
VEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQkJfQotCQkJ
CQkJfQotCQkJCQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHBhZGRycC0+c3BwX3BhdGhtYXhy
eHQ7Ci0JCQkJCX0KLQkJCQl9Ci0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJf
RU5BQkxFKSB7Ci0JCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsICE9IDApIHsKLQkJCQkJ
CXN0Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hiaW50ZXJ2YWw7Ci0J
CQkJCX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7
Ci0JCQkJCQlzdGNiLT5hc29jLmhlYXJ0X2JlYXRfZGVsYXkgPSAwOwotCQkJCQl9Ci0JCQkJCS8q
IFR1cm4gYmFjayBvbiB0aGUgdGltZXIgKi8KLQkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNi
LT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQkJaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2
YWwgIT0gMCkgewotCQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IHBhZGRycC0+c3BwX2hi
aW50ZXJ2YWw7Ci0JCQkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJ
TUVfSVNfWkVSTykgewotCQkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IDA7Ci0JCQkJCQl9
Ci0JCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpIHsKLQkJCQkJCQlu
ZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT0hCOwotCQkJCQkJfQotCQkJCQkJc2N0cF90
aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAotCQkJ
CQkJCQlTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNCk7Ci0JCQkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0KTsKLQkJ
CQkJfQotCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19ET05PVF9IRUFSVEJFQVQpOwotCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBT
UFBfSEJfRElTQUJMRSkgewotCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7Ci0JCQkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
Tk9IQikpIHsKLQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PSEI7Ci0JCQkJ
CQkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSkgewotCQkJ
CQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwKLQkJCQkJCQkJ
ICAgICAgICAgICAgICAgIGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTUpOwotCQkJCQkJCX0KLQkJCQkJCX0K
LQkJCQkJfQotCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZM
QUdTX0RPTk9UX0hFQVJUQkVBVCk7Ci0JCQkJfQotCQkJCWlmICgocGFkZHJwLT5zcHBfZmxhZ3Mg
JiBTUFBfUE1UVURfRElTQUJMRSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUgPj0gU0NUUF9TTUFM
TEVTVF9QTVRVKSkgewotCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywg
c2N0cF9uZXh0KSB7Ci0JCQkJCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVf
dGltZXIudGltZXIpKSB7Ci0JCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9Q
QVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAotCQkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfVVNS
UkVRICsgU0NUUF9MT0NfMTYpOwotCQkJCQkJfQotCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFND
VFBfQUREUl9OT19QTVRVRDsKLQkJCQkJCW5ldC0+bXR1ID0gcGFkZHJwLT5zcHBfcGF0aG10dTsK
LQkJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElO
RVQKLQkJCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9WNF9P
VkVSSEVBRDsKLQkJCQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCQljYXNl
IEFGX0lORVQ2OgotCQkJCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX09WRVJIRUFEOwotCQkJCQkJ
CWJyZWFrOwotI2VuZGlmCi0JCQkJCQlkZWZhdWx0OgotCQkJCQkJCWJyZWFrOwotCQkJCQkJfQot
CQkJCQkJaWYgKG5ldC0+bXR1IDwgc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHsKLQkJCQkJCQlz
Y3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7Ci0JCQkJCQl9Ci0JCQkJCX0K
LQkJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19O
T1RfUE1UVUQpOwotCQkJCX0KLQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURf
RU5BQkxFKSB7Ci0JCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3Rw
X25leHQpIHsKLQkJCQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnBtdHVfdGlt
ZXIudGltZXIpKSB7Ci0JCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFU
SE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7Ci0JCQkJCQl9Ci0JCQkJCQluZXQtPmRlc3Rfc3Rh
dGUgJj0gflNDVFBfQUREUl9OT19QTVRVRDsKLQkJCQkJfQotCQkJCQlzY3RwX3N0Y2JfZmVhdHVy
ZV9vZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpOwotCQkJCX0KLQkJ
CQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfRFNDUCkgewotCQkJCQlUQUlMUV9GT1JFQUNI
KG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJCQluZXQtPmRzY3AgPSBw
YWRkcnAtPnNwcF9kc2NwICYgMHhmYzsKLQkJCQkJCW5ldC0+ZHNjcCB8PSAweDAxOwotCQkJCQl9
Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9kc2NwID0gcGFkZHJwLT5zcHBfZHNjcCAmIDB4ZmM7
Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9kc2NwIHw9IDB4MDE7Ci0JCQkJfQotI2lmZGVmIElO
RVQ2Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7Ci0J
CQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJ
CQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJ
CQkJbmV0LT5mbG93bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZm
ZmY7Ci0JCQkJCQkJbmV0LT5mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKLQkJCQkJCX0KLQkJCQkJ
fQotCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9m
bG93bGFiZWwgJiAweDAwMGZmZmZmOwotCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVs
IHw9IDB4ODAwMDAwMDA7Ci0JCQkJfQotI2VuZGlmCi0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQkvKioqKioqKioqKioqKioqKioqKioqKioqTk8gVENCLCBT
RVQgVE8gZGVmYXVsdCBzdHVmZiAqKioqKioqKioqKioqKioqKiovCi0JCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKHBhZGRycC0+c3Bw
X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlu
cCk7Ci0JCQkJLyoKLQkJCQkgKiBGb3IgdGhlIFRPUy9GTE9XTEFCRUwgc3R1ZmYgeW91IHNldCBp
dAotCQkJCSAqIHdpdGggdGhlIG9wdGlvbnMgb24gdGhlIHNvY2tldAotCQkJCSAqLwotCQkJCWlm
IChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ICE9IDApIHsKLQkJCQkJaW5wLT5zY3RwX2VwLmRlZl9u
ZXRfZmFpbHVyZSA9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7Ci0JCQkJfQotCi0JCQkJaWYgKHBh
ZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX1RJTUVfSVNfWkVSTykKLQkJCQkJaW5wLT5zY3RwX2Vw
LnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IDA7Ci0JCQkJZWxzZSBp
ZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCAhPSAwKSB7Ci0JCQkJCWlmIChwYWRkcnAtPnNwcF9o
YmludGVydmFsID4gU0NUUF9NQVhfSEJfSU5URVJWQUwpCi0JCQkJCQlwYWRkcnAtPnNwcF9oYmlu
dGVydmFsPSBTQ1RQX01BWF9IQl9JTlRFUlZBTDsKLQkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGlt
ZW91dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IE1TRUNfVE9fVElDS1MocGFkZHJwLT5z
cHBfaGJpbnRlcnZhbCk7Ci0JCQkJfQotCi0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQ
X0hCX0VOQUJMRSkgewotCQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9J
U19aRVJPKSB7Ci0JCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1F
Ul9IRUFSVEJFQVRdID0gMDsKLQkJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9oYmludGVydmFs
KSB7Ci0JCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFS
VEJFQVRdID0gTVNFQ19UT19USUNLUyhwYWRkcnAtPnNwcF9oYmludGVydmFsKTsKLQkJCQkJfQot
CQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFU
KTsKLQkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0RJU0FCTEUpIHsK
LQkJCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFU
KTsKLQkJCQl9Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkg
ewotCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVE
KTsKLQkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0RJU0FCTEUp
IHsKLQkJCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVE
KTsKLQkJCQl9Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0RTQ1ApIHsKLQkJCQkJ
aW5wLT5zY3RwX2VwLmRlZmF1bHRfZHNjcCA9IHBhZGRycC0+c3BwX2RzY3AgJiAweGZjOwotCQkJ
CQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwIHw9IDB4MDE7Ci0JCQkJfQotI2lmZGVmIElORVQ2
Ci0JCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7Ci0JCQkJ
CWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQkJCQkJ
aW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFi
ZWwgJiAweDAwMGZmZmZmOwotCQkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfZmxvd2xhYmVsIHw9
IDB4ODAwMDAwMDA7Ci0JCQkJCX0KLQkJCQl9Ci0jZW5kaWYKLQkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7
Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SVE9JTkZPOgotCXsKLQkJc3Ry
dWN0IHNjdHBfcnRvaW5mbyAqc3J0bzsKLQkJdWludDMyX3QgbmV3X2luaXQsIG5ld19taW4sIG5l
d19tYXg7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzcnRvLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3J0b2luZm8sIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNydG8tPnNy
dG9fYXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoc3J0by0+c3J0b19pbml0aWFs
KQotCQkJCW5ld19pbml0ID0gc3J0by0+c3J0b19pbml0aWFsOwotCQkJZWxzZQotCQkJCW5ld19p
bml0ID0gc3RjYi0+YXNvYy5pbml0aWFsX3J0bzsKLQkJCWlmIChzcnRvLT5zcnRvX21heCkKLQkJ
CQluZXdfbWF4ID0gc3J0by0+c3J0b19tYXg7Ci0JCQllbHNlCi0JCQkJbmV3X21heCA9IHN0Y2It
PmFzb2MubWF4cnRvOwotCQkJaWYgKHNydG8tPnNydG9fbWluKQotCQkJCW5ld19taW4gPSBzcnRv
LT5zcnRvX21pbjsKLQkJCWVsc2UKLQkJCQluZXdfbWluID0gc3RjYi0+YXNvYy5taW5ydG87Ci0J
CQlpZiAoKG5ld19taW4gPD0gbmV3X2luaXQpICYmIChuZXdfaW5pdCA8PSBuZXdfbWF4KSkgewot
CQkJCXN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8gPSBuZXdfaW5pdDsKLQkJCQlzdGNiLT5hc29jLm1h
eHJ0byA9IG5ld19tYXg7Ci0JCQkJc3RjYi0+YXNvYy5taW5ydG8gPSBuZXdfbWluOwotCQkJfSBl
bHNlIHsKLQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChzcnRvLT5zcnRvX2Fzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJ
aWYgKHNydG8tPnNydG9faW5pdGlhbCkKLQkJCQkJbmV3X2luaXQgPSBzcnRvLT5zcnRvX2luaXRp
YWw7Ci0JCQkJZWxzZQotCQkJCQluZXdfaW5pdCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsK
LQkJCQlpZiAoc3J0by0+c3J0b19tYXgpCi0JCQkJCW5ld19tYXggPSBzcnRvLT5zcnRvX21heDsK
LQkJCQllbHNlCi0JCQkJCW5ld19tYXggPSBpbnAtPnNjdHBfZXAuc2N0cF9tYXhydG87Ci0JCQkJ
aWYgKHNydG8tPnNydG9fbWluKQotCQkJCQluZXdfbWluID0gc3J0by0+c3J0b19taW47Ci0JCQkJ
ZWxzZQotCQkJCQluZXdfbWluID0gaW5wLT5zY3RwX2VwLnNjdHBfbWlucnRvOwotCQkJCWlmICgo
bmV3X21pbiA8PSBuZXdfaW5pdCkgJiYgKG5ld19pbml0IDw9IG5ld19tYXgpKSB7Ci0JCQkJCWlu
cC0+c2N0cF9lcC5pbml0aWFsX3J0byA9IG5ld19pbml0OwotCQkJCQlpbnAtPnNjdHBfZXAuc2N0
cF9tYXhydG8gPSBuZXdfbWF4OwotCQkJCQlpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG8gPSBuZXdf
bWluOwotCQkJCX0gZWxzZSB7Ci0JCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJCWVycm9yID0gRUlOVkFM
OwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQot
CWNhc2UgU0NUUF9BU1NPQ0lORk86Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyAqc2Fz
b2M7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChzYXNvYywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9h
c3NvY3BhcmFtcywgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2Fzb2Mt
PnNhc29jX2Fzc29jX2lkKTsKLQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSkgewotCQkJ
LyogYm91bmRhcnkgY2hlY2sgdGhlIGNvb2tpZSBsaWZlICovCi0JCQlpZiAoc2Fzb2MtPnNhc29j
X2Nvb2tpZV9saWZlIDwgMTAwMCkKLQkJCQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSAxMDAw
OwotCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSA+IFNDVFBfTUFYX0NPT0tJRV9MSUZF
KSB7Ci0JCQkJc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlID0gU0NUUF9NQVhfQ09PS0lFX0xJRkU7
Ci0JCQl9Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCWlmIChzYXNvYy0+c2Fzb2NfYXNvY21heHJ4
dCkKLQkJCQlzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzID0gc2Fzb2MtPnNhc29jX2Fzb2NtYXhy
eHQ7Ci0JCQlpZiAoc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlKSB7Ci0JCQkJc3RjYi0+YXNvYy5j
b29raWVfbGlmZSA9IE1TRUNfVE9fVElDS1Moc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlKTsKLQkJ
CX0KLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoc2Fzb2MtPnNh
c29jX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCQkJaWYgKHNhc29jLT5zYXNvY19hc29jbWF4cnh0KQotCQkJCQlpbnAtPnNjdHBf
ZXAubWF4X3NlbmRfdGltZXMgPSBzYXNvYy0+c2Fzb2NfYXNvY21heHJ4dDsKLQkJCQlpZiAoc2Fz
b2MtPnNhc29jX2Nvb2tpZV9saWZlKSB7Ci0JCQkJCWlucC0+c2N0cF9lcC5kZWZfY29va2llX2xp
ZmUgPSBNU0VDX1RPX1RJQ0tTKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSk7Ci0JCQkJfQotCQkJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJ
CQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0lO
SVRNU0c6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9pbml0bXNnICpzaW5pdDsKLQotCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHNpbml0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2luaXRtc2csIG9wdHNpemUpOwot
CQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlpZiAoc2luaXQtPnNpbml0X251bV9vc3RyZWFtcykK
LQkJCWlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQgPSBzaW5pdC0+c2luaXRfbnVt
X29zdHJlYW1zOwotCi0JCWlmIChzaW5pdC0+c2luaXRfbWF4X2luc3RyZWFtcykKLQkJCWlucC0+
c2N0cF9lcC5tYXhfb3Blbl9zdHJlYW1zX2ludG9tZSA9IHNpbml0LT5zaW5pdF9tYXhfaW5zdHJl
YW1zOwotCi0JCWlmIChzaW5pdC0+c2luaXRfbWF4X2F0dGVtcHRzKQotCQkJaW5wLT5zY3RwX2Vw
Lm1heF9pbml0X3RpbWVzID0gc2luaXQtPnNpbml0X21heF9hdHRlbXB0czsKLQotCQlpZiAoc2lu
aXQtPnNpbml0X21heF9pbml0X3RpbWVvKQotCQkJaW5wLT5zY3RwX2VwLmluaXRpYWxfaW5pdF9y
dG9fbWF4ID0gc2luaXQtPnNpbml0X21heF9pbml0X3RpbWVvOwotCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfUFJJTUFSWV9BRERSOgotCXsKLQkJc3Ry
dWN0IHNjdHBfc2V0cHJpbSAqc3BhOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVj
dCBzb2NrYWRkciAqYWRkcjsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0J
CXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKHNwYSwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zZXRwcmltLCBvcHRzaXplKTsKLQkJU0NU
UF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcGEtPnNzcF9hc3NvY19pZCk7Ci0KLSNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCWlmIChzcGEtPnNzcF9hZGRyLnNzX2ZhbWlseSA9
PSBBRl9JTkVUNikgewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNwYS0+c3NwX2FkZHI7Ci0JCQlpZiAoSU42X0lTX0FE
RFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlpbjZfc2luNl8yX3Npbigmc2lu
X3N0b3JlLCBzaW42KTsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7
Ci0JCQl9IGVsc2UgewotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNwYS0+c3NwX2Fk
ZHI7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzcGEt
PnNzcF9hZGRyOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzcGEt
PnNzcF9hZGRyOwotI2VuZGlmCi0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCW5ldCA9IHNjdHBf
ZmluZG5ldChzdGNiLCBhZGRyKTsKLQkJfSBlbHNlIHsKLQkJCS8qIFdlIGluY3JlbWVudCBoZXJl
IHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAqIGRvIGEgZGVj
cmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAotCQkJICog
dGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJCSAqLwotCQkJ
bmV0ID0gTlVMTDsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCQlzdGNiID0gc2N0cF9m
aW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLAotCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJm5ldCwgTlVMTCwgTlVMTCk7Ci0JCQlpZiAoc3RjYiA9PSBOVUxM
KSB7Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJCX0KLQkJfQotCi0JCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJiAobmV0ICE9IE5VTEwpKSB7Ci0JCQlpZiAobmV0ICE9IHN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbikgewotCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBf
QUREUl9VTkNPTkZJUk1FRCkpIHsKLQkJCQkJLyogT2sgd2UgbmVlZCB0byBzZXQgaXQgKi8KLQkJ
CQkJaWYgKHNjdHBfc2V0X3ByaW1hcnlfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopTlVM
TCwgbmV0KSA9PSAwKSB7Ci0JCQkJCQlpZiAoKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSAmJgotCQkJ
CQkJICAgICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpICYmCi0JCQkJCQkgICAg
KG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7Ci0JCQkJCQkJc2N0cF9m
cmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKLQkJCQkJCQlzdGNiLT5hc29j
LmFsdGVybmF0ZSA9IE5VTEw7Ci0JCQkJCQl9Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCX0KLQkJCQl9IGVsc2UgewotCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJaWYgKHN0Y2IgIT0g
TlVMTCkgewotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfU0VUX0RZTkFNSUNfUFJJTUFSWToKLQl7Ci0JCXVuaW9uIHNjdHBfc29ja3N0b3Jl
ICpzczsKLSNpZmRlZiBTQ1RQX01WUkYKLQkJaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYKLSNpZiAh
ZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKLQkJc3RydWN0IHByb2MgKnByb2M7Ci0jZW5kaWYKLSNpZmRlZiBfX0Zy
ZWVCU0RfXwotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCi0JCWVycm9yID0gcHJpdl9j
aGVjayhjdXJ0aHJlYWQsCi0JCQkJICAgUFJJVl9ORVRJTkVUX1JFU0VSVkVEUE9SVCk7Ci0jZWxp
ZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLQkJZXJyb3IgPSBzdXNlcigoc3RydWN0IHRo
cmVhZCAqKXApOwotI2Vsc2UKLQkJZXJyb3IgPSBzdXNlcihwKTsKLSNlbmRpZgotI2VsaWYgZGVm
aW5lZChfX0FQUExFX18pCi0JCXByb2MgPSAoc3RydWN0IHByb2MgKilwOwotCQlpZiAocCkgewot
CQkJZXJyb3IgPSBzdXNlcihwcm9jLT5wX3VjcmVkLCAmcHJvYy0+cF9hY2ZsYWcpOwotCQl9IGVs
c2UgewotCQkJYnJlYWs7Ci0JCX0KLSNlbHNlCi0JCWVycm9yID0gc3VzZXIocCwgMCk7Ci0jZW5k
aWYKLSNlbmRpZgotCQlpZiAoZXJyb3IpCi0JCQlicmVhazsKLQotCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHNzLCBvcHR2YWwsIHVuaW9uIHNjdHBfc29ja3N0b3JlLCBvcHRzaXplKTsKLQkJLyogU1VQ
RVIgVVNFUiBDSEVDSz8gKi8KLSNpZmRlZiBTQ1RQX01WUkYKLQkJZm9yIChpID0gMDsgaSA8IGlu
cC0+bnVtX3ZyZnM7IGkrKykgewotCQkJaWYgKHZyZl9pZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkg
ewotCQkJCWZuZCA9IDE7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKCFmbmQpIHsKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYK
LQkJZXJyb3IgPSBzY3RwX2R5bmFtaWNfc2V0X3ByaW1hcnkoJnNzLT5zYSwgdnJmX2lkKTsKLQkJ
YnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFI6Ci0JewotCQlzdHJ1
Y3Qgc2N0cF9zZXRwZWVycHJpbSAqc3NwcDsKLQkJc3RydWN0IHNvY2thZGRyICphZGRyOwotI2lm
IGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJc3RydWN0IHNvY2thZGRyX2luIHNp
bl9zdG9yZTsKLSNlbmRpZgotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3NwcCwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgc3NwcC0+c3NwcF9hc3NvY19pZCk7Ci0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCXN0
cnVjdCBzY3RwX2lmYSAqaWZhOwotCi0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2
KQotCQkJaWYgKHNzcHAtPnNzcHBfYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0JCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJnNzcHAtPnNzcHBfYWRkcjsKLQkJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7
Ci0JCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKLQkJCQl9IGVsc2Ug
ewotCQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzc3BwLT5zc3BwX2FkZHI7Ci0JCQkJ
fQotCQkJfSBlbHNlIHsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzc3BwLT5zc3Bw
X2FkZHI7Ci0JCQl9Ci0jZWxzZQotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3NwcC0+
c3NwcF9hZGRyOwotI2VuZGlmCi0JCQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwg
c3RjYi0+YXNvYy52cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKLQkJCWlmIChpZmEgPT0g
TlVMTCkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJZ290byBv
dXRfb2ZfaXQ7Ci0JCQl9Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMKSA9PSAwKSB7Ci0JCQkJLyogTXVzdCB2YWxpZGF0ZSB0aGUgaWZhIGZvdW5kIGlz
IGluIG91ciBlcCAqLwotCQkJCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQkJCQlpbnQgZm91
bmQgPSAwOwotCi0JCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwg
c2N0cF9ueHRfYWRkcikgewotCQkJCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7Ci0JCQkJCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwKLQkJCQkJCQlfX2Z1
bmNfXyk7Ci0JCQkJCQljb250aW51ZTsKLQkJCQkJfQotCQkJCQlpZiAoKHNjdHBfaXNfYWRkcl9y
ZXN0cmljdGVkKHN0Y2IsIGxhZGRyLT5pZmEpKSAmJgotCQkJCQkgICAgKCFzY3RwX2lzX2FkZHJf
cGVuZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpIHsKLQkJCQkJCWNvbnRpbnVlOwotCQkJCQl9Ci0J
CQkJCWlmIChsYWRkci0+aWZhID09IGlmYSkgewotCQkJCQkJZm91bmQgPSAxOwotCQkJCQkJYnJl
YWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKCFmb3VuZCkgewotCQkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwot
CQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQkJZ290byBvdXRfb2ZfaXQ7Ci0JCQkJfQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCi0JCQl9IGVsc2UgewotCQkJCXN3aXRjaCAoYWRkci0+c2FfZmFt
aWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJCQl7Ci0JCQkJCXN0cnVj
dCBzb2NrYWRkcl9pbiAqc2luOwotCi0JCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilh
ZGRyOwotCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQs
Ci0JCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7Ci0JCQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOwotCQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCQlnb3RvIG91dF9vZl9p
dDsKLQkJCQkJfQotCQkJCQlicmVhazsKLQkJCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQkJ
CWNhc2UgQUZfSU5FVDY6Ci0JCQkJewotCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owot
Ci0JCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJCWlmIChwcmlz
b25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKLQkJCQkJICAgICAgICAgICAg
ICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgewotCQkJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJ
CQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQkJZ290byBvdXRfb2ZfaXQ7Ci0JCQkJCX0KLQkJCQkJ
YnJlYWs7Ci0JCQkJfQotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJ
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJCWdvdG8gb3V0X29mX2l0OwotCQkJCX0KLSNlbmRpZgot
CQkJfQotCQkJaWYgKHNjdHBfc2V0X3ByaW1hcnlfaXBfYWRkcmVzc19zYShzdGNiLCBhZGRyKSAh
PSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJCXNj
dHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgIFNDVFBfT1VUUFVUX0ZST01fU09DS09QVCwgU0NU
UF9TT19MT0NLRUQpOwotCQlvdXRfb2ZfaXQ6Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CX0gZWxzZSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCX0KLQkJYnJl
YWs7Ci0JfQotCWNhc2UgU0NUUF9CSU5EWF9BRERfQUREUjoKLQl7Ci0JCXN0cnVjdCBzY3RwX2dl
dGFkZHJlc3NlcyAqYWRkcnM7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gNTAwMDAwCi0JCXN0cnVjdCB0aHJlYWQgKnRkOwotCi0JCXRkID0gKHN0cnVj
dCB0aHJlYWQgKilwOwotI2VuZGlmCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYWRkcnMsIG9wdHZh
bCwgc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLAotCQkJCSAgICBvcHRzaXplKTsKLSNpZmRlZiBJ
TkVUCi0JCWlmIChhZGRycy0+YWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJCWlmIChv
cHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCQlicmVhazsKLQkJCX0KLSNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJCWlmICh0ZCAhPSBO
VUxMICYmIChlcnJvciA9IHByaXNvbl9sb2NhbF9pcDQodGQtPnRkX3VjcmVkLCAmKCgoc3RydWN0
IHNvY2thZGRyX2luICopKGFkZHJzLT5hZGRyKSktPnNpbl9hZGRyKSkpKSB7Ci0JCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJy
b3IpOwotCQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYg
SU5FVDYKLQkJaWYgKGFkZHJzLT5hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWlm
IChvcHRzaXplIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQlpZiAodGQg
IT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHRkLT50ZF91Y3JlZCwgJigoKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKikoYWRkcnMtPmFkZHIpKS0+c2luNl9hZGRyKSwKLQkJCQkJCQkJ
CQkJICAgKFNDVFBfSVBWNl9WNk9OTFkoaW5wKSAhPSAwKSkpICE9IDApIHsKLQkJCSAgU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJy
b3IpOwotCQkJICBicmVhazsKLQkJCX0KLSNlbmRpZgotCQl9IGVsc2UKLSNlbmRpZgotCQl7Ci0J
CSAgICAgICBlcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJICAgICAgIGJyZWFrOwotCQl9Ci0JCXNj
dHBfYmluZHhfYWRkX2FkZHJlc3Moc28sIGlucCwgYWRkcnMtPmFkZHIsCi0JCQkJICAgICAgIGFk
ZHJzLT5zZ2V0X2Fzc29jX2lkLCB2cmZfaWQsCi0JCQkJICAgICAgICZlcnJvciwgcCk7Ci0JCWJy
ZWFrOwotCX0KLQljYXNlIFNDVFBfQklORFhfUkVNX0FERFI6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9n
ZXRhZGRyZXNzZXMgKmFkZHJzOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDUwMDAwMAotCQlzdHJ1Y3QgdGhyZWFkICp0ZDsKLQkJdGQgPSAoc3RydWN0
IHRocmVhZCAqKXA7Ci0KLSNlbmRpZgotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGFkZHJzLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3Nlcywgb3B0c2l6ZSk7Ci0jaWZkZWYgSU5FVAotCQlp
ZiAoYWRkcnMtPmFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlpZiAob3B0c2l6ZSA8
IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMpIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cikgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJ
ZXJyb3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCWlmICh0ZCAhPSBOVUxMICYmIChl
cnJvciA9IHByaXNvbl9sb2NhbF9pcDQodGQtPnRkX3VjcmVkLCAmKCgoc3RydWN0IHNvY2thZGRy
X2luICopKGFkZHJzLT5hZGRyKSktPnNpbl9hZGRyKSkpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJ
CWJyZWFrOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
aWYgKGFkZHJzLT5hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJCWlmIChvcHRzaXpl
IDwgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykgLSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCQlpZiAodGQgIT0gTlVMTCAm
JgotCQkJICAgIChlcnJvciA9IHByaXNvbl9sb2NhbF9pcDYodGQtPnRkX3VjcmVkLAotCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoYWRk
cnMtPmFkZHIpKS0+c2luNl9hZGRyKSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChTQ1RQX0lQVjZfVjZPTkxZKGlucCkgIT0gMCkpKSAhPSAwKSB7Ci0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwot
CQkJCWJyZWFrOwotCQkJfQotI2VuZGlmCi0JCX0gZWxzZQotI2VuZGlmCi0JCXsKLQkJCWVycm9y
ID0gRUFGTk9TVVBQT1JUOwotCQkJYnJlYWs7Ci0JCX0KLQkJc2N0cF9iaW5keF9kZWxldGVfYWRk
cmVzcyhpbnAsIGFkZHJzLT5hZGRyLAotCQkJCQkgIGFkZHJzLT5zZ2V0X2Fzc29jX2lkLCB2cmZf
aWQsCi0JCQkJCSAgJmVycm9yKTsKLQkJYnJlYWs7Ci0JfQotI2lmZGVmIF9fQVBQTEVfXwotCWNh
c2UgU0NUUF9MSVNURU5fRklYOgotCQkvKiBvbmx5IGFwcGxpZXMgdG8gb25lLXRvLW1hbnkgc29j
a2V0cyAqLwotCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
ewotCQkJLyogbWFrZSBzdXJlIHRoZSBBQ0NFUFRDT05OIGZsYWcgaXMgT0ZGICovCi0JCQlzby0+
c29fb3B0aW9ucyAmPSB+U09fQUNDRVBUQ09OTjsKLQkJfSBlbHNlIHsKLQkJCS8qIG90aGVyd2lz
ZSwgbm90IGFsbG93ZWQgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJ
fQotCQlicmVhazsKLSNlbmRpZgkJCQkvKiBfX0FQUExFX18gKi8KLQljYXNlIFNDVFBfRVZFTlQ6
Ci0JewotCQlzdHJ1Y3Qgc2N0cF9ldmVudCAqZXZlbnQ7Ci0JCXVpbnQzMl90IGV2ZW50X3R5cGU7
Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChldmVudCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVu
dCwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgZXZlbnQtPnNlX2Fzc29j
X2lkKTsKLQkJc3dpdGNoIChldmVudC0+c2VfdHlwZSkgewotCQljYXNlIFNDVFBfQVNTT0NfQ0hB
TkdFOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQ7Ci0JCQli
cmVhazsKLQkJY2FzZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6Ci0JCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfUkVNT1RF
X0VSUk9SOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BD
Ql9GTEFHU19SRUNWU0VOREZBSUxFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TSFVURE9X
Tl9FVkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5U
OwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046Ci0JCQlldmVu
dF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfQURBUFRBVElPTkVWTlQ7Ci0JCQlicmVhazsKLQkJY2Fz
ZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0Jf
RkxBR1NfUERBUElFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9F
VkVOVDoKLQkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVDsKLQkJCWJyZWFr
OwotCQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBf
UENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NFTkRF
Ul9EUllfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVDsKLQkJ
CWJyZWFrOwotCQljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UOgotCQkJZXZl
bnRfdHlwZSA9IDA7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UU1VQKTsKLQkJCWVycm9yID0gRU5PVFNVUDsKLQkJCWJy
ZWFrOwotCQljYXNlIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6Ci0JCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TVFJF
QU1fQ0hBTkdFX0VWRU5UOgotCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9D
SEFOR0VFVk5UOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKLQkJ
CWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVDsKLQkJCWJyZWFr
OwotCQlkZWZhdWx0OgotCQkJZXZlbnRfdHlwZSA9IDA7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoZXZlbnRfdHlwZSA+IDApIHsKLQkJ
CWlmIChzdGNiKSB7Ci0JCQkJaWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQlzY3RwX3N0Y2JfZmVh
dHVyZV9vbihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJCQlpZiAoZXZlbnRfdHlwZSA9PSBT
Q1RQX1BDQl9GTEFHU19EUllFVk5UKSB7Ci0JCQkJCQlpZiAoVEFJTFFfRU1QVFkoJnN0Y2ItPmFz
b2Muc2VuZF9xdWV1ZSkgJiYKLQkJCQkJCSAgICBUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50
X3F1ZXVlKSAmJgotCQkJCQkJICAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkp
IHsKLQkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwgc3RjYiwg
IDAsIE5VTEwsIFNDVFBfU09fTE9DS0VEKTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCX0gZWxzZSB7
Ci0JCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJ
CX0KLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9IGVsc2UgewotCQkJCS8qCi0JCQkJ
ICogV2UgZG9uJ3Qgd2FudCB0byBzZW5kIHVwIGEgc3Rvcm0gb2YgZXZlbnRzLAotCQkJCSAqIHNv
IHJldHVybiBhbiBlcnJvciBmb3Igc2VuZGVyIGRyeSBldmVudHMKLQkJCQkgKi8KLQkJCQlpZiAo
KGV2ZW50X3R5cGUgPT0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCkgJiYKLQkJCQkgICAgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSA9PSAwKSAmJgotCQkJCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpID09IDApICYmCi0J
CQkJICAgICgoZXZlbnQtPnNlX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSB8fAotCQkJCSAg
ICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpKSkgewotCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFTk9UU1VQKTsKLQkJCQkJZXJyb3IgPSBFTk9UU1VQOwotCQkJCQlicmVhazsKLQkJCQl9Ci0J
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJ
CQkgICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCQkg
ICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKLQkJCQkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKLQkJCQkJaWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQkJc2N0cF9mZWF0
dXJlX29uKGlucCwgZXZlbnRfdHlwZSk7Ci0JCQkJCX0gZWxzZSB7Ci0JCQkJCQlzY3RwX2ZlYXR1
cmVfb2ZmKGlucCwgZXZlbnRfdHlwZSk7Ci0JCQkJCX0KLQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOwotCQkJCX0KLQkJCQlpZiAoKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRf
QVNTT0MpIHx8Ci0JCQkJICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
KSB7Ci0JCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAm
aW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7Ci0JCQkJCQlTQ1RQX1RDQl9MT0NL
KHN0Y2IpOwotCQkJCQkJaWYgKGV2ZW50LT5zZV9vbikgewotCQkJCQkJCXNjdHBfc3RjYl9mZWF0
dXJlX29uKGlucCwgc3RjYiwgZXZlbnRfdHlwZSk7Ci0JCQkJCQl9IGVsc2UgewotCQkJCQkJCXNj
dHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUpOwotCQkJCQkJfQotCQkJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQl9Ci0JCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9SRUNWUkNW
SU5GTzoKLQl7Ci0JCWludCAqb25vZmY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChvbm9mZiwg
b3B0dmFsLCBpbnQsIG9wdHNpemUpOwotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlpZiAoKm9u
b2ZmICE9IDApIHsKLQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZS
Q1ZJTkZPKTsKLQkJfSBlbHNlIHsKLQkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9G
TEFHU19SRUNWUkNWSU5GTyk7Ci0JCX0KLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlicmVh
azsKLQl9Ci0JY2FzZSBTQ1RQX1JFQ1ZOWFRJTkZPOgotCXsKLQkJaW50ICpvbm9mZjsKLQotCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKG9ub2ZmLCBvcHR2YWwsIGludCwgb3B0c2l6ZSk7Ci0JCVNDVFBf
SU5QX1dMT0NLKGlucCk7Ci0JCWlmICgqb25vZmYgIT0gMCkgewotCQkJc2N0cF9mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pOwotCQl9IGVsc2UgewotCQkJc2N0cF9m
ZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJTkZPKTsKLQkJfQotCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFNDVFBfREVGQVVMVF9TTkRJ
TkZPOgotCXsKLQkJc3RydWN0IHNjdHBfc25kaW5mbyAqaW5mbzsKLQkJdWludDE2X3QgcG9saWN5
OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9zbmRp
bmZvLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBpbmZvLT5zbmRfYXNz
b2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlpZiAoaW5mby0+c25kX3NpZCA8IHN0Y2ItPmFz
b2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19zdHJlYW0g
PSBpbmZvLT5zbmRfc2lkOwotCQkJCXBvbGljeSA9IFBSX1NDVFBfUE9MSUNZKHN0Y2ItPmFzb2Mu
ZGVmX3NlbmQuc2luZm9fZmxhZ3MpOwotCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxh
Z3MgPSBpbmZvLT5zbmRfZmxhZ3M7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFn
cyB8PSBwb2xpY3k7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19wcGlkID0gaW5mby0+
c25kX3BwaWQ7Ci0JCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19jb250ZXh0ID0gaW5mby0+
c25kX2NvbnRleHQ7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCQl9Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAg
KGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoaW5m
by0+c25kX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19zdHJlYW0gPSBpbmZvLT5zbmRfc2lkOwot
CQkJCXBvbGljeSA9IFBSX1NDVFBfUE9MSUNZKGlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MpOwot
CQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7Ci0JCQkJaW5w
LT5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBwb2xpY3k7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5m
b19wcGlkID0gaW5mby0+c25kX3BwaWQ7Ci0JCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19jb250ZXh0
ID0gaW5mby0+c25kX2NvbnRleHQ7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQot
CQkJaWYgKChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAotCQkJ
ICAgIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKLQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlpZiAo
aW5mby0+c25kX3NpZCA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7Ci0JCQkJCQlzdGNiLT5h
c29jLmRlZl9zZW5kLnNpbmZvX3N0cmVhbSA9IGluZm8tPnNuZF9zaWQ7Ci0JCQkJCQlwb2xpY3kg
PSBQUl9TQ1RQX1BPTElDWShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKLQkJCQkJ
CXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgPSBpbmZvLT5zbmRfZmxhZ3M7Ci0JCQkJ
CQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzIHw9IHBvbGljeTsKLQkJCQkJCXN0Y2It
PmFzb2MuZGVmX3NlbmQuc2luZm9fcHBpZCA9IGluZm8tPnNuZF9wcGlkOwotCQkJCQkJc3RjYi0+
YXNvYy5kZWZfc2VuZC5zaW5mb19jb250ZXh0ID0gaW5mby0+c25kX2NvbnRleHQ7Ci0JCQkJCX0K
LQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9ERUZBVUxUX1BSSU5G
TzoKLQl7Ci0JCXN0cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvICppbmZvOwotCi0JCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbywgb3B0
c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgaW5mby0+cHJfYXNzb2NfaWQpOwot
Ci0JCWlmIChpbmZvLT5wcl9wb2xpY3kgPiBTQ1RQX1BSX1NDVFBfTUFYKSB7Ci0JCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc3RjYikgewot
CQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7Ci0JCQlzdGNiLT5h
c29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzIHw9IGluZm8tPnByX3BvbGljeTsKLQkJCXN0Y2ItPmFz
b2MuZGVmX3NlbmQuc2luZm9fdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOwotCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChpbmZvLT5wcl9hc3NvY19pZCA9PSBT
Q1RQX0ZVVFVSRV9BU1NPQykgfHwKLQkJCSAgICAoaW5mby0+cHJfYXNzb2NfaWQgPT0gU0NUUF9B
TExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpbnAtPmRlZl9zZW5k
LnNpbmZvX2ZsYWdzICY9IDB4ZmZmMDsKLQkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzIHw9
IGluZm8tPnByX3BvbGljeTsKLQkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBp
bmZvLT5wcl92YWx1ZTsKLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9Ci0JCQlpZiAo
KGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKLQkJCSAgICAoaW5m
by0+cHJfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKLQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBf
dGNibGlzdCkgewotCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQkJCQlzdGNiLT5hc29jLmRl
Zl9zZW5kLnNpbmZvX2ZsYWdzICY9IDB4ZmZmMDsKLQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5z
aW5mb19mbGFncyB8PSBpbmZvLT5wcl9wb2xpY3k7Ci0JCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQu
c2luZm9fdGltZXRvbGl2ZSA9IGluZm8tPnByX3ZhbHVlOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCX0KLQkJfQotCQli
cmVhazsKLQl9Ci0JY2FzZSBTQ1RQX1BFRVJfQUREUl9USExEUzoKLQkJLyogQXBwbGllcyB0byB0
aGUgc3BlY2lmaWMgYXNzb2NpYXRpb24gKi8KLQl7Ci0JCXN0cnVjdCBzY3RwX3BhZGRydGhsZHMg
KnRobGRzOwotCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCXN0cnVjdCBzb2NrYWRkciAqYWRk
cjsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCXN0cnVjdCBzb2NrYWRk
cl9pbiBzaW5fc3RvcmU7Ci0jZW5kaWYKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHRobGRzLCBv
cHR2YWwsIHN0cnVjdCBzY3RwX3BhZGRydGhsZHMsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIHRobGRzLT5zcHRfYXNzb2NfaWQpOwotCi0jaWYgZGVmaW5lZChJTkVUKSAm
JiBkZWZpbmVkKElORVQ2KQotCQlpZiAodGhsZHMtPnNwdF9hZGRyZXNzLnNzX2ZhbWlseSA9PSBB
Rl9JTkVUNikgewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopJnRobGRzLT5zcHRfYWRkcmVzczsKLQkJCWlmIChJTjZfSVNf
QUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCWluNl9zaW42XzJfc2luKCZz
aW5fc3RvcmUsIHNpbjYpOwotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9y
ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNw
dF9hZGRyZXNzOwotCQkJfQotCQl9IGVsc2UgewotCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIg
KikmdGhsZHMtPnNwdF9hZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRyID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7Ci0jZW5kaWYKLQkJaWYgKHN0Y2IgIT0gTlVMTCkg
ewotCQkJbmV0ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOwotCQl9IGVsc2UgewotCQkJLyog
V2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdp
bAotCQkJICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0
aGUgbG9ja2VkCi0JCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBO
VUxMLgotCQkJICovCi0JCQluZXQgPSBOVUxMOwotCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsK
LQkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsCi0JCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJ
CWlmIChzdGNiID09IE5VTEwpIHsKLQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQot
CQl9Ci0JCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7Ci0jaWZkZWYgSU5F
VAotCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0KLQkJCQlzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnNpbjsKLQkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJ
CQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgewotCQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwot
CQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlp
ZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNjsKLQotCQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJ
aWYgKCFJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlO
VkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLQkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJ
CXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQotCQkJCXNjb25uID0gKHN0cnVjdCBzb2Nr
YWRkcl9jb25uICopYWRkcjsKLQkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgewot
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9y
ID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJewot
CQkJCWVycm9yID0gRUFGTk9TVVBQT1JUOwotCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBlcnJvcik7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHRobGRzLT5zcHRfcGF0
aGNwdGhsZCAhPSAweGZmZmYpIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwot
CQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHN0Y2IgIT0gTlVMTCkgewotCQkJaWYgKG5ldCAhPSBOVUxM
KSB7Ci0JCQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aG1heHJ4dDsK
LQkJCQluZXQtPnBmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKLQkJCQlpZiAo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7Ci0JCQkJCWlmICgobmV0LT5lcnJvcl9j
b3VudCA+IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpIHx8Ci0JCQkJCSAgICAobmV0LT5lcnJvcl9j
b3VudCA8PSBuZXQtPnBmX3RocmVzaG9sZCkpIHsKLQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+
U0NUUF9BRERSX1BGOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKChuZXQtPmVycm9y
X2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQpICYmCi0JCQkJCSAgICAobmV0LT5lcnJvcl9jb3Vu
dCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSkgewotCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9
IFNDVFBfQUREUl9QRjsKLQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09fTE9D
S0VEKTsKLQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAot
CQkJCQkJICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNyk7Ci0JCQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIG5ldCk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKLQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQt
PmZhaWx1cmVfdGhyZXNob2xkKSB7Ci0JCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQURE
Ul9SRUFDSEFCTEU7Ci0JCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNF
X0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOwotCQkJCQl9Ci0JCQkJfSBlbHNl
IHsKLQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkg
ewotCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0JCQkJCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQsIFND
VFBfU09fTE9DS0VEKTsKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJVEFJTFFfRk9S
RUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCQluZXQtPmZhaWx1
cmVfdGhyZXNob2xkID0gdGhsZHMtPnNwdF9wYXRobWF4cnh0OwotCQkJCQluZXQtPnBmX3RocmVz
aG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKLQkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9QRikgewotCQkJCQkJaWYgKChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5mYWls
dXJlX3RocmVzaG9sZCkgfHwKLQkJCQkJCSAgICAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPnBm
X3RocmVzaG9sZCkpIHsKLQkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsK
LQkJCQkJCX0KLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA+IG5l
dC0+cGZfdGhyZXNob2xkKSAmJgotCQkJCQkJICAgIChuZXQtPmVycm9yX2NvdW50IDw9IG5ldC0+
ZmFpbHVyZV90aHJlc2hvbGQpKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQURE
Ul9QRjsKLQkJCQkJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0J
CQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCi0JCQkJCQkJ
ICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKLQkJCQkJCQkgICAgICAg
ICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTgpOwotCQkJCQkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwg
c3RjYiwgbmV0KTsKLQkJCQkJCX0KLQkJCQkJfQotCQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1JFQUNIQUJMRSkgewotCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQt
PmZhaWx1cmVfdGhyZXNob2xkKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FE
RFJfUkVBQ0hBQkxFOwotCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZB
Q0VfRE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0g
ZWxzZSB7Ci0JCQkJCQlpZiAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNo
b2xkKSB7Ci0JCQkJCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRUFDSEFCTEU7Ci0J
CQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwgMCwg
bmV0LCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJc3RjYi0+
YXNvYy5kZWZfbmV0X2ZhaWx1cmUgPSB0aGxkcy0+c3B0X3BhdGhtYXhyeHQ7Ci0JCQkJc3RjYi0+
YXNvYy5kZWZfbmV0X3BmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKLQkJCX0K
LQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAodGhsZHMtPnNwdF9h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OwotCQkJCWlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmUgPSB0aGxkcy0+c3B0X3BhdGhtYXhy
eHQ7Ci0JCQkJaW5wLT5zY3RwX2VwLmRlZl9uZXRfcGZfdGhyZXNob2xkID0gdGhsZHMtPnNwdF9w
YXRocGZ0aGxkOwotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9
Ci0JY2FzZSBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF91
ZHBlbmNhcHMgKmVuY2FwczsKLQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCQlzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHI7Ci0jaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQotCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOwotI2VuZGlmCi0KLQkJU0NUUF9DSEVDS19BTkRfQ0FT
VChlbmNhcHMsIG9wdHZhbCwgc3RydWN0IHNjdHBfdWRwZW5jYXBzLCBvcHRzaXplKTsKLQkJU0NU
UF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBlbmNhcHMtPnN1ZV9hc3NvY19pZCk7Ci0KLSNpZiBkZWZp
bmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0JCWlmIChlbmNhcHMtPnN1ZV9hZGRyZXNzLnNz
X2ZhbWlseSA9PSBBRl9JTkVUNikgewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQot
CQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7Ci0J
CQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlpbjZf
c2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKLQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW5fc3RvcmU7Ci0JCQl9IGVsc2UgewotCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRy
ICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOwotCQl9Ci0jZWxzZQotCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOwotI2VuZGlmCi0JCWlm
IChzdGNiICE9IE5VTEwpIHsKLQkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKLQkJ
fSBlbHNlIHsKLQkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoKSB3aWwKLQkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBz
dGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAotCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBO
T1QgYSBUQ0IuLiBha2EgTlVMTC4KLQkJCSAqLwotCQkJbmV0ID0gTlVMTDsKLQkJCVNDVFBfSU5Q
X0lOQ1JfUkVGKGlucCk7Ci0JCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigm
aW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsKLQkJCWlmIChzdGNiID09IE5VTEwpIHsKLQkJ
CQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQotCQl9Ci0JCWlmICgoc3RjYiAhPSBOVUxM
KSAmJiAobmV0ID09IE5VTEwpKSB7Ci0jaWZkZWYgSU5FVAotCQkJaWYgKGFkZHItPnNhX2ZhbWls
eSA9PSBBRl9JTkVUKSB7Ci0KLQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLQkJCQlzaW4g
PSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKLQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2Fk
ZHIgIT0gSU5BRERSX0FOWSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9
IGVsc2UKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFG
X0lORVQ2KSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCQkJaWYgKCFJTjZfSVNfQUREUl9VTlNQRUNJ
RklFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsKLQkJCQl9
Ci0JCQl9IGVsc2UKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWlmIChh
ZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpz
Y29ubjsKLQotCQkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKLQkJCQlp
ZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgewotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJCWVycm9yID0gRUlOVkFMOwotCQkJCQlicmVhazsK
LQkJCQl9Ci0JCQl9IGVsc2UKLSNlbmRpZgotCQkJewotCQkJCQllcnJvciA9IEVBRk5PU1VQUE9S
VDsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQkJCWJy
ZWFrOwotCQkJCX0KLQkJfQotCi0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCWlmIChuZXQgIT0g
TlVMTCkgewotCQkJCW5ldC0+cG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7Ci0JCQl9IGVsc2Ugewot
CQkJCXN0Y2ItPmFzb2MucG9ydCA9IGVuY2Fwcy0+c3VlX3BvcnQ7Ci0JCQl9Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGVuY2Fwcy0+c3VlX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQkJaW5w
LT5zY3RwX2VwLnBvcnQgPSBlbmNhcHMtPnN1ZV9wb3J0OwotCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsK
LQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBTQ1RQX0VDTl9TVVBQT1JURUQ6Ci0Jewot
CQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChh
diwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwot
CQl9IGVsc2UgewotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB8fAotCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSB8fAotCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0J
CQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsK
LQkJCQkJaW5wLT5lY25fc3VwcG9ydGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPmVj
bl9zdXBwb3J0ZWQgPSAxOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9
IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0K
LQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9QUl9TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgYXYtPmFzc29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJ
CWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2Ugewot
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKLQkJCQkJaW5wLT5w
cnNjdHBfc3VwcG9ydGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPnByc2N0cF9zdXBw
b3J0ZWQgPSAxOwotCQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2Ug
ewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJl
YWs7Ci0JfQotCWNhc2UgU0NUUF9BVVRIX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJy
b3IgPSBFSU5WQUw7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAg
KGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlpZiAoKGF2LT5hc3Nv
Y192YWx1ZSA9PSAwKSAmJgotCQkJCSAgICAoaW5wLT5hc2NvbmZfc3VwcG9ydGVkID09IDEpKSB7
Ci0JCQkJICAgIAkvKiBBVVRIIGlzIHJlcXVpcmVkIGZvciBBU0NPTkYgKi8KLQkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7Ci0JCQkJCQlpbnAt
PmF1dGhfc3VwcG9ydGVkID0gMDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWlucC0+YXV0aF9zdXBw
b3J0ZWQgPSAxOwotCQkJCQl9Ci0JCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCQl9Ci0J
CQl9IGVsc2UgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0J
CX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgU0NUUF9BU0NPTkZfU1VQUE9SVEVEOgotCXsKLQkJc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9w
dHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZB
TCk7Ci0JCQllcnJvciA9IEVJTlZBTDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBl
bHNlIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKLQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKLQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCWlm
ICgoYXYtPmFzc29jX3ZhbHVlICE9IDApICYmCi0JCQkJICAgIChpbnAtPmF1dGhfc3VwcG9ydGVk
ID09IDApKSB7Ci0JCQkJICAgIAkvKiBBVVRIIGlzIHJlcXVpcmVkIGZvciBBU0NPTkYgKi8KLQkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKLQkJCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7Ci0J
CQkJCQlpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSAwOwotCQkJCQkJc2N0cF9hdXRoX2RlbGV0ZV9j
aHVuayhTQ1RQX0FTQ09ORiwKLQkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3Rw
X2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQkJCQkJCXNjdHBfYXV0aF9kZWxldGVfY2h1bmsoU0NU
UF9BU0NPTkZfQUNLLAotCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAu
bG9jYWxfYXV0aF9jaHVua3MpOwotCQkJCQl9IGVsc2UgewotCQkJCQkJaW5wLT5hc2NvbmZfc3Vw
cG9ydGVkID0gMTsKLQkJCQkJCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkYsCi0JCQkJ
CQkgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7Ci0J
CQkJCQlzY3RwX2F1dGhfYWRkX2NodW5rKFNDVFBfQVNDT05GX0FDSywKLQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKLQkJCQkJfQotCQkJ
CQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQljYXNl
IFNDVFBfUkVDT05GSUdfU1VQUE9SVEVEOgotCXsKLQkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUg
KmF2OwotCi0JCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUsIG9wdHNpemUpOwotCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3Nv
Y19pZCk7Ci0KLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQllcnJvciA9IEVJTlZB
TDsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKLQkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKLQkJCSAgICAoYXYtPmFzc29j
X2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgewotCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0J
CQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7Ci0JCQkJCWlucC0+cmVjb25maWdfc3VwcG9y
dGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IDE7
Ci0JCQkJfQotCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKLQkJCQllcnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0J
Y2FzZSBTQ1RQX05SU0FDS19TVVBQT1JURUQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSAqYXY7Ci0KLQkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSwgb3B0c2l6ZSk7Ci0JCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFz
c29jX2lkKTsKLQotCQlpZiAoc3RjYikgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCWVycm9yID0gRUlO
VkFMOwotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJICAgIChhdi0+YXNz
b2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
LQkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKLQkJCQkJaW5wLT5ucnNhY2tfc3VwcG9y
dGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPm5yc2Fja19zdXBwb3J0ZWQgPSAxOwot
CQkJCX0KLQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7Ci0JCQkJZXJyb3IgPSBFSU5WQUw7Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNh
c2UgU0NUUF9QS1REUk9QX1NVUFBPUlRFRDoKLQl7Ci0JCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
ICphdjsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNz
b2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJZXJyb3IgPSBFSU5W
QUw7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwot
CQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgewotCQkJCQlpbnAtPnBrdGRyb3Bfc3VwcG9y
dGVkID0gMDsKLQkJCQl9IGVsc2UgewotCQkJCQlpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gMTsK
LQkJCQl9Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQkJCWVycm9yID0gRUlOVkFMOwotCQkJfQotCQl9Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIFNDVFBfTUFYX0NXTkQ6Ci0JewotCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7Ci0J
CXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQotCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKLQkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwotCi0JCWlmIChzdGNiKSB7Ci0JCQlzdGNiLT5hc29j
Lm1heF9jd25kID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJaWYgKHN0Y2ItPmFzb2MubWF4X2N3bmQg
PiAwKSB7Ci0JCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgewotCQkJCQlpZiAoKG5ldC0+Y3duZCA+IHN0Y2ItPmFzb2MubWF4X2N3bmQpICYmCi0JCQkJ
CSAgICAobmV0LT5jd25kID4gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpKSB7
Ci0JCQkJCQluZXQtPmN3bmQgPSBzdGNiLT5hc29jLm1heF9jd25kOwotCQkJCQkJaWYgKG5ldC0+
Y3duZCA8IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSB7Ci0JCQkJCQkJbmV0
LT5jd25kID0gbmV0LT5tdHUgLSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCQkJCQkJfQotCQkJ
CQl9Ci0JCQkJfQotCQkJfQotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2Ugewot
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAotCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAotCQkJ
ICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7Ci0JCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKLQkJCQlpbnAtPm1heF9jd25kID0gYXYtPmFzc29jX3ZhbHVlOwotCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCQll
cnJvciA9IEVJTlZBTDsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0JZGVmYXVsdDoKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RU5PUFJPVE9PUFQpOwotCQllcnJvciA9IEVOT1BST1RPT1BUOwotCQlicmVhazsKLQl9IC8qIGVu
ZCBzd2l0Y2ggKG9wdCkgKi8KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQot
aW50Ci1zY3RwX2N0bG91dHB1dChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNv
cHQpCi17Ci0Jdm9pZCAqb3B0dmFsID0gTlVMTDsKLQlzaXplX3Qgb3B0c2l6ZSA9IDA7Ci0Jdm9p
ZCAqcDsKLQlpbnQgZXJyb3IgPSAwOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0Jc3RydWN0
IHNjdHBfaW5wY2IgKmlucDsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlp
ZiAoKHNvcHQtPnNvcHRfbGV2ZWwgPT0gU09MX1NPQ0tFVCkgJiYKLQkgICAgKHNvcHQtPnNvcHRf
bmFtZSA9PSBTT19TRVRGSUIpKSB7Ci0JCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5z
b19wY2I7Ci0JCWlmIChpbnAgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChzby0+
c29fcGNiLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0JVRlMpOwotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCWlucC0+Zmli
bnVtID0gc28tPnNvX2ZpYm51bTsKLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQlyZXR1cm4g
KDApOwotCX0KLSNlbmRpZgotCWlmIChzb3B0LT5zb3B0X2xldmVsICE9IElQUFJPVE9fU0NUUCkg
ewotCQkvKiB3cm9uZyBwcm90byBsZXZlbC4uLiBzZW5kIGJhY2sgdXAgdG8gSVAgKi8KLSNpZmRl
ZiBJTkVUNgotCQlpZiAoSU5QX0NIRUNLX1NPQ0tBRihzbywgQUZfSU5FVDYpKQotCQkJZXJyb3Ig
PSBpcDZfY3Rsb3V0cHV0KHNvLCBzb3B0KTsKLSNlbmRpZgkJCQkvKiBJTkVUNiAqLwotI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQkJZWxzZQotI2VuZGlmCi0jaWZkZWYgSU5F
VAotCQkJZXJyb3IgPSBpcF9jdGxvdXRwdXQoc28sIHNvcHQpOwotI2VuZGlmCi0JCXJldHVybiAo
ZXJyb3IpOwotCX0KLQlvcHRzaXplID0gc29wdC0+c29wdF92YWxzaXplOwotCWlmIChvcHRzaXpl
KSB7Ci0JCVNDVFBfTUFMTE9DKG9wdHZhbCwgdm9pZCAqLCBvcHRzaXplLCBTQ1RQX01fU09DS09Q
VCk7Ci0JCWlmIChvcHR2YWwgPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChzby0+
c29fcGNiLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0JVRlMpOwotCQkJ
cmV0dXJuIChFTk9CVUZTKTsKLQkJfQotCQllcnJvciA9IHNvb3B0Y29weWluKHNvcHQsIG9wdHZh
bCwgb3B0c2l6ZSwgb3B0c2l6ZSk7Ci0JCWlmIChlcnJvcikgewotCQkJU0NUUF9GUkVFKG9wdHZh
bCwgU0NUUF9NX1NPQ0tPUFQpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQl9Ci0jaWYgKGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMCkgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykKLQlwID0gKHZvaWQgKilzb3B0LT5zb3B0X3RkOwotI2Vsc2UKLQlwID0gKHZv
aWQgKilzb3B0LT5zb3B0X3A7Ci0jZW5kaWYKLQlpZiAoc29wdC0+c29wdF9kaXIgPT0gU09QVF9T
RVQpIHsKLQkJZXJyb3IgPSBzY3RwX3NldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWws
IG9wdHNpemUsIHApOwotCX0gZWxzZSBpZiAoc29wdC0+c29wdF9kaXIgPT0gU09QVF9HRVQpIHsK
LQkJZXJyb3IgPSBzY3RwX2dldG9wdChzbywgc29wdC0+c29wdF9uYW1lLCBvcHR2YWwsICZvcHRz
aXplLCBwKTsKLQl9IGVsc2UgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKHNvLT5zb19wY2IsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5W
QUw7Ci0JfQotCWlmICgoZXJyb3IgPT0gMCkgJiYgKG9wdHZhbCAhPSBOVUxMKSkgewotCQllcnJv
ciA9IHNvb3B0Y29weW91dChzb3B0LCBvcHR2YWwsIG9wdHNpemUpOwotCQlTQ1RQX0ZSRUUob3B0
dmFsLCBTQ1RQX01fU09DS09QVCk7Ci0JfSBlbHNlIGlmIChvcHR2YWwgIT0gTlVMTCkgewotCQlT
Q1RQX0ZSRUUob3B0dmFsLCBTQ1RQX01fU09DS09QVCk7Ci0JfQotb3V0OgotCXJldHVybiAoZXJy
b3IpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBJTkVUCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAq
cCkKLXsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pCi1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBz
b2NrYWRkciAqYWRkciwgc3RydWN0IHByb2MgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFf
XykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKLXsKLQl2b2lkICpwID0gTlVMTDsKLSNl
bGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgUEtUSFJFQUQgcCkKLXsKLSNlbHNl
Ci1zdGF0aWMgaW50Ci1zY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVm
ICpuYW0sIHN0cnVjdCBwcm9jICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2Qo
bmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLSNlbmRpZgotI2VuZGlmCi0jaWZkZWYgU0NUUF9N
VlJGCi0JaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVh
dGVfbG9ja19vbiA9IDA7Ci0JdWludDMyX3QgdnJmX2lkOwotCXN0cnVjdCBzY3RwX2lucGNiICpp
bnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCS8qIEkgbWFkZSB0
aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KLQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
LQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOwotCQlyZXR1cm4gRUlOVkFMOwotCX0KLQotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLSAgICAgICAgLyogVE9ETyBfX1VzZXJzcGFjZV9fIGZhbGxzIGludG8gdGhpcyBjb2RlIGZv
ciBJUHY2IHN0dWZmIGF0IHRoZSBtb21lbnQuLi4gKi8KLSNlbmRpZgotI2lmICFkZWZpbmVkKF9f
V2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotI2lm
ZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjZwOwotCi0jZW5kaWYKLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKLQkJ
c2luNnAgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7Ci0JCWlmIChwICE9IE5VTEwgJiYg
KGVycm9yID0gcHJpc29uX3JlbW90ZV9pcDYocC0+dGRfdWNyZWQsICZzaW42cC0+c2luNl9hZGRy
KSkgIT0gMCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLSNlbmRp
ZgotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCXsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAK
LQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5wOwotCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQotCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDAwMDAKLQkJc2lucCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOwotCQlpZiAocCAh
PSBOVUxMICYmIChlcnJvciA9IHByaXNvbl9yZW1vdGVfaXA0KHAtPnRkX3VjcmVkLCAmc2lucC0+
c2luX2FkZHIpKSAhPSAwKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7Ci0JCQlyZXR1cm4gKGVycm9yKTsKLQkJ
fQotI2VuZGlmCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQ
UE9SVCk7Ci0JCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKLQl9Ci0jZW5kaWYKLQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOwotCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwotCWNyZWF0ZV9sb2Nr
X29uID0gMTsKLQotCi0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgfHwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NP
Q0tFVF9HT05FKSkgewotCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KLQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZB
VUxUKTsKLQkgICAgICAgIGVycm9yID0gRUZBVUxUOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2lm
ZGVmIElORVQ2Ci0JaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRf
VjYpID09IDApICYmCi0JICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7Ci0JCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgJiYKLQkgICAgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9D
T05OKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJZ290byBvdXRfbm93
OwotCX0KLSNlbmRpZgotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5C
T1VORCkgPT0KLQkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKiBCaW5kIGEgZXBo
ZW1lcmFsIHBvcnQgKi8KLQkJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIE5VTEwsIE5VTEws
IHApOwotCQlpZiAoZXJyb3IpIHsKLQkJCWdvdG8gb3V0X25vdzsKLQkJfQotCX0KLQkvKiBOb3cg
ZG8gd2UgY29ubmVjdD8gKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpICYmCi0JICAgIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfUE9SVFJFVVNFKSkpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBFSU5WQUw7Ci0J
CWdvdG8gb3V0X25vdzsKLQl9Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19UQ1BUWVBFKSAmJgotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09O
TkVDVEVEKSkgewotCQkvKiBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgQU5EIHRoZSBUQ1AgbW9k
ZWwgKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUFERFJJTlVTRSk7Ci0JCWVycm9yID0gRUFERFJJTlVTRTsKLQkJZ290byBv
dXRfbm93OwotCX0KLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVD
VEVEKSB7Ci0JCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0JCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAt
PnNjdHBfYXNvY19saXN0KTsKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCX0gZWxzZSB7Ci0J
CS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIo
KSB3aWxsCi0JCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcg
YXMgdGhlIGxvY2tlZAotCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFr
YSBOVUxMLgotCQkgKi8KLQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKLQkJc3RjYiA9IHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0J
CWlmIChzdGNiID09IE5VTEwpIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0gZWxz
ZSB7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCX0KLQl9Ci0JaWYgKHN0Y2IgIT0gTlVM
TCkgewotCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcgdXAgYW4gYXNzb2NpYXRpb24gKi8K
LQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFMUkVBRFkpOwotCQllcnJvciA9IEVBTFJFQURZOwotCQlnb3RvIG91dF9ub3c7Ci0J
fQotCi0JdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOwotI2lmZGVmIFNDVFBfTVZSRgotCWZvciAo
aSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKLQkJaWYgKHZyZl9pZCA9PSBpbnAtPm1f
dnJmX2lkc1tpXSkgewotCQkJZm5kID0gMTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmICghZm5k
KSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7Ci0JCWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0J
fQotI2VuZGlmCi0JLyogV2UgYXJlIEdPT0QgdG8gZ28gKi8KLQlzdGNiID0gc2N0cF9hbG9jX2Fz
c29jKGlucCwgYWRkciwgJmVycm9yLCAwLCB2cmZfaWQsCi0JICAgICAgICAgICAgICAgICAgICAg
ICBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50LAotCSAgICAgICAgICAgICAgICAg
ICAgICAgaW5wLT5zY3RwX2VwLnBvcnQsIHApOwotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJLyog
R2FrISBubyBtZW1vcnkgKi8KLQkJZ290byBvdXRfbm93OwotCX0KLQlpZiAoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHsKLQkJc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQ7Ci0JCS8qIFNldCB0aGUg
Y29ubmVjdGVkIGZsYWcgc28gd2UgY2FuIHF1ZXVlIGRhdGEgKi8KLQkJc29pc2Nvbm5lY3Rpbmco
c28pOwotCX0KLQlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NUUF9TVEFURV9DT09LSUVf
V0FJVCk7Ci0JKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRl
cmVkKTsKLQotCS8qIGluaXRpYWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyBmb3IgdGhl
IGFzc29jICovCi0Jc2N0cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKGlucCwgc3RjYik7Ci0KLQlz
Y3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7Ci0JU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOwotIG91dF9ub3c6Ci0JaWYgKGNyZWF0ZV9sb2NrX29uKSB7Ci0JCVNDVFBf
QVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7Ci0JfQotCi0JU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
LQlyZXR1cm4gKGVycm9yKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotaW50Ci1zY3RwY29ubl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIpCi17Ci0jaWZkZWYgU0NUUF9NVlJGCi0JaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYK
LQl2b2lkICpwID0gTlVMTDsKLQlpbnQgZXJyb3IgPSAwOwotCWludCBjcmVhdGVfbG9ja19vbiA9
IDA7Ci0JdWludDMyX3QgdnJmX2lkOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0
IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNv
LT5zb19wY2I7Ci0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBU
Q1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKLQl9Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQly
ZXR1cm4gRUlOVkFMOwotCX0KLQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotI2lmZGVmIElO
RVQKLQljYXNlIEFGX0lORVQ6Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xl
biAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJl
dHVybiAoRUlOVkFMKTsKLQkJfQotI2VuZGlmCi0JCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5F
VDYKLQljYXNlIEFGX0lORVQ2OgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCWlmIChhZGRyLT5zYV9s
ZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLQljYXNlIEFG
X0NPTk46Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5W
QUwpOwotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFGTk9TVVBQT1JU
KTsKLQkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOwotCX0KLQlTQ1RQX0lOUF9JTkNSX1JFRihpbnAp
OwotCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwotCWNyZWF0ZV9sb2NrX29uID0gMTsKLQot
Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkg
fHwKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkg
ewotCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUZBVUxUKTsKLQkgICAg
ICAgIGVycm9yID0gRUZBVUxUOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2lmZGVmIElORVQ2Ci0J
aWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApICYm
Ci0JICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpKSB7Ci0JCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7Ci0J
CWVycm9yID0gRUlOVkFMOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotI2VuZGlmCi0JaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSBTQ1RQX1BDQl9GTEFHU19V
TkJPVU5EKSB7Ci0JCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9ydCAqLwotCQllcnJvciA9IHNjdHBf
aW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCk7Ci0JCWlmIChlcnJvcikgewotCQkJZ290byBv
dXRfbm93OwotCQl9Ci0JfQotCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAqLwotCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYKLQkgICAgKHNjdHBfaXNf
ZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgewotCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOwotCQllcnJvciA9IEVJTlZBTDsKLQkJZ290byBvdXRfbm93OwotCX0KLQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCi0JICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7Ci0JCS8qIFdlIGFyZSBhbHJlYWR5
IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUREUklOVVNFKTsKLQkJZXJy
b3IgPSBFQUREUklOVVNFOwotCQlnb3RvIG91dF9ub3c7Ci0JfQotCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOwotCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7Ci0JfSBlbHNlIHsKLQkJLyogV2UgaW5jcmVtZW50IGhlcmUgc2luY2Ugc2N0
cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbGwKLQkJICogZG8gYSBkZWNyZW1lbnQgaWYg
aXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2VkCi0JCSAqIHRjYiAobGFzdCBh
cmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCi0JCSAqLwotCQlTQ1RQX0lOUF9JTkNS
X1JFRihpbnApOwotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBh
ZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKLQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
LQkJfQotCX0KLQlpZiAoc3RjYiAhPSBOVUxMKSB7Ci0JCS8qIEFscmVhZHkgaGF2ZSBvciBhbSBi
cmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLwotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7Ci0JCWVycm9yID0gRUFM
UkVBRFk7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0KLQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7
Ci0jaWZkZWYgU0NUUF9NVlJGCi0JZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykg
ewotCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQlmbmQgPSAxOwotCQkJ
YnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKCFmbmQpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJZXJyb3IgPSBF
SU5WQUw7Ci0JCWdvdG8gb3V0X25vdzsKLQl9Ci0jZW5kaWYKLQkvKiBXZSBhcmUgR09PRCB0byBn
byAqLwotCXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBhZGRyLCAmZXJyb3IsIDAsIHZyZl9p
ZCwKLQkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1f
Y291bnQsCi0JICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucG9ydCwgcCk7Ci0J
aWYgKHN0Y2IgPT0gTlVMTCkgewotCQkvKiBHYWshIG5vIG1lbW9yeSAqLwotCQlnb3RvIG91dF9u
b3c7Ci0JfQotCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgewotCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRDsKLQkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUg
ZGF0YSAqLwotCQlzb2lzY29ubmVjdGluZyhzbyk7Ci0JfQotCVNDVFBfU0VUX1NUQVRFKCZzdGNi
LT5hc29jLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKLQkodm9pZClTQ1RQX0dFVFRJTUVfVElN
RVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOwotCi0JLyogaW5pdGlhbGl6ZSBhdXRoZW50
aWNhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgYXNzb2MgKi8KLQlzY3RwX2luaXRpYWxpemVfYXV0
aF9wYXJhbXMoaW5wLCBzdGNiKTsKLQotCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFND
VFBfU09fTE9DS0VEKTsKLQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0gb3V0X25vdzoKLQlpZiAo
Y3JlYXRlX2xvY2tfb24pIHsKLQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQl9Ci0K
LQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCXJldHVybiAoZXJyb3IpOwotfQotI2VuZGlmCi1p
bnQKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw
MDAKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKLXNjdHBfbGlzdGVuKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHRocmVhZCAqcCkKLSNlbHNlCi1zY3RwX2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHRocmVhZCAqcCkKLSNlbmRpZgotI2VsaWYg
ZGVmaW5lZChfX1dpbmRvd3NfXykKLXNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
YmFja2xvZywgUEtUSFJFQUQgcCkKLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXNjdHBf
bGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHByb2MgKnApCi0j
ZWxzZQotc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBwcm9jICpwKQotI2Vu
ZGlmCi17Ci0JLyoKLQkgKiBOb3RlIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gdGhlIHByb3RvY29s
IHByb2Nlc3NpbmcgYmVpbmcgY2FsbGVkCi0JICogQUZURVIgYW55IHNvY2tldCBsZXZlbCBmbGFn
cyBhbmQgYmFja2xvZyBhcmUgYXBwbGllZCB0byB0aGUKLQkgKiBzb2NrZXQuIFRoZSB0cmFkaXRp
b25hbCB3YXkgdGhhdCB0aGUgc29ja2V0IGZsYWdzIGFyZSBhcHBsaWVkIGlzCi0JICogQUZURVIg
cHJvdG9jb2wgcHJvY2Vzc2luZy4gV2UgaGF2ZSBtYWRlIGEgY2hhbmdlIHRvIHRoZQotCSAqIHN5
cy9rZXJuL3VpcGNfc29ja2V0LmMgbW9kdWxlIHRvIHJldmVyc2UgdGhpcyBidXQgdGhpcyBNVVNU
IGJlIGluCi0JICogcGxhY2UgaWYgdGhlIHNvY2tldCBBUEkgZm9yIFNDVFAgaXMgdG8gd29yayBw
cm9wZXJseS4KLQkgKi8KLQotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKGlucCA9
PSBOVUxMKSB7Ci0JCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBz
ZXR1cD8gKi8KLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JaWYg
KHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpIHsKLQkJ
LyogU2VlIGlmIHdlIGhhdmUgYSBsaXN0ZW5lciAqLwotCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqdGlu
cDsKLQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7Ci0KLQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgewotCQkJLyogbm90IGJvdW5kIGFs
bCAqLwotCQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCi0JCQlMSVNUX0ZPUkVBQ0gobGFk
ZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCQkJbWVtY3B5KCZz
dG9yZSwgJmxhZGRyLT5pZmEtPmFkZHJlc3MsIHNpemVvZihzdG9yZSkpOwotCQkJCXN3aXRjaCAo
c3RvcmUuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJCWNhc2UgQUZfSU5FVDoKLQkJ
CQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQkJCQlicmVhazsKLSNl
bmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQkJc3RvcmUuc2luNi5z
aW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCWNhc2UgQUZfQ09OTjoKLQkJCQkJc3RvcmUuc2Nvbm4u
c2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQlk
ZWZhdWx0OgotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQkJdGlucCA9IHNjdHBfcGNiX2ZpbmRlcCgm
c3RvcmUuc2EsIDAsIDAsIGlucC0+ZGVmX3ZyZl9pZCk7Ci0JCQkJaWYgKHRpbnAgJiYgKHRpbnAg
IT0gaW5wKSAmJgotCQkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfQUxMR09ORSkgPT0gMCkgJiYKLQkJCQkgICAgKCh0aW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCi0JCQkJICAgIChTQ1RQX0lTX0xJU1RF
TklORyh0aW5wKSkpIHsKLQkJCQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkgYW5kIGl0
cyBub3QgdGhpcyBpbnAuICovCi0JCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnApOwotCQkJCQly
ZXR1cm4gKEVBRERSSU5VU0UpOwotCQkJCX0gZWxzZSBpZiAodGlucCkgewotCQkJCQlTQ1RQX0lO
UF9ERUNSX1JFRih0aW5wKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBTZXR1cCBh
IGxvY2FsIGFkZHIgYm91bmQgYWxsICovCi0JCQltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2Yoc3Rv
cmUpKTsKLSNpZmRlZiBJTkVUNgotCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EX1Y2KSB7Ci0JCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZk
ZWYgSEFWRV9TQV9MRU4KLQkJCQlzdG9yZS5zYS5zYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7Ci0jZW5kaWYKLQkJCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKSB7
Ci0JCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NBX0xFTgot
CQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5k
aWYKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0g
MCkgJiYKLQkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NP
Tk4pID09IDApKSB7Ci0jZWxzZQotCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19CT1VORF9WNikgPT0gMCkgewotI2VuZGlmCi0JCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0g
QUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCQl9Ci0jZW5kaWYKLQkJCXN3aXRjaCAo
c3RvcmUuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQkJY2FzZSBBRl9JTkVUOgotCQkJ
CXN0b3JlLnNpbi5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKLQkJCQlicmVhazsKLSNlbmRp
ZgotI2lmZGVmIElORVQ2Ci0JCQljYXNlIEFGX0lORVQ2OgotCQkJCXN0b3JlLnNpbjYuc2luNl9w
b3J0ID0gaW5wLT5zY3RwX2xwb3J0OwotCQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCQkJY2FzZSBBRl9DT05OOgotCQkJCXN0b3JlLnNjb25uLnNjb25uX3Bv
cnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCWRlZmF1bHQ6Ci0J
CQkJYnJlYWs7Ci0JCQl9Ci0JCQl0aW5wID0gc2N0cF9wY2JfZmluZGVwKCZzdG9yZS5zYSwgMCwg
MCwgaW5wLT5kZWZfdnJmX2lkKTsKLQkJCWlmICh0aW5wICYmICh0aW5wICE9IGlucCkgJiYKLQkJ
CSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkg
PT0gMCkgJiYKLQkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfR09ORSkgPT0gMCkgJiYKLQkJCSAgICAoU0NUUF9JU19MSVNURU5JTkcodGlucCkpKSB7Ci0J
CQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkgYW5kIGl0cyBub3QgdGhpcyBpbnAuICov
Ci0JCQkJU0NUUF9JTlBfREVDUl9SRUYodGlucCk7Ci0JCQkJcmV0dXJuIChFQUREUklOVVNFKTsK
LQkJCX0gZWxzZSBpZiAodGlucCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKHRpbnApOwotCQkJ
fQotCQl9Ci0JfQotCVNDVFBfSU5QX1JMT0NLKGlucCk7Ci0jaWZkZWYgU0NUUF9MT0NLX0xPR0dJ
TkcKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NL
X0xPR0dJTkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX2xvY2soaW5wLCAoc3RydWN0IHNjdHBfdGNi
ICopTlVMTCwgU0NUUF9MT0dfTE9DS19TT0NLKTsKLQl9Ci0jZW5kaWYKLQlTT0NLX0xPQ0soc28p
OwotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAw
MCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWVycm9yID0gc29saXN0ZW5fcHJvdG9fY2hl
Y2soc28pOwotCVNPQ0tfVU5MT0NLKHNvKTsKLQlpZiAoZXJyb3IpIHsKLQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOwotCQlyZXR1cm4gKGVycm9yKTsKLQl9Ci0jZW5kaWYKLQlpZiAoKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpICYmCi0JICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgewotCQkvKiBUaGUgdW5s
dWNreSBjYXNlCi0JCSAqIC0gV2UgYXJlIGluIHRoZSB0Y3AgcG9vbCB3aXRoIHRoaXMgZ3V5Lgot
CQkgKiAtIFNvbWVvbmUgZWxzZSBpcyBpbiB0aGUgbWFpbiBpbnAgc2xvdC4KLQkJICogLSBXZSBt
dXN0IG1vdmUgdGhpcyBndXkgKHRoZSBsaXN0ZW5lcikgdG8gdGhlIG1haW4gc2xvdAotCQkgKiAt
IFdlIG11c3QgdGhlbiBtb3ZlIHRoZSBndXkgdGhhdCB3YXMgbGlzdGVuZXIgdG8gdGhlIFRDUCBQ
b29sLgotCQkgKi8KLQkJaWYgKHNjdHBfc3dhcF9pbnBjYl9mb3JfbGlzdGVuKGlucCkpIHsKLQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERSSU5VU0UpOwotCQkJcmV0dXJuIChF
QUREUklOVVNFKTsKLQkJfQotCX0KLQotCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgJiYKLQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkpIHsKLQkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQ
IG1vZGVsICovCi0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFERFJJTlVTRSk7Ci0J
CXJldHVybiAoRUFERFJJTlVTRSk7Ci0JfQotCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgewotCQkvKiBXZSBtdXN0
IGRvIGEgYmluZC4gKi8KLQkJaWYgKChlcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwg
TlVMTCwgcCkpKSB7Ci0JCQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICovCi0JCQlyZXR1
cm4gKGVycm9yKTsKLQkJfQotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotI2lmIChkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVmaW5lZChf
X1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDEyMDAwMzQKLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VE
UFRZUEUpID09IDApIHsKLQkJU09DS19MT0NLKHNvKTsKLQkJc29saXN0ZW5fcHJvdG8oc28sIGJh
Y2tsb2cpOwotCQlTT0NLX1VOTE9DSyhzbyk7Ci0JfQotI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNzAwMDAwIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKLQkvKiBJdCBhcHBlYXJzIGZvciA3LjAgYW5kIG9uLCB3ZSBtdXN0IGFsd2F5cyBjYWxsIHRo
aXMuICovCi0JU09DS19MT0NLKHNvKTsKLQlzb2xpc3Rlbl9wcm90byhzbywgYmFja2xvZyk7Ci0j
ZWxzZQotCVNPQ0tfTE9DSyhzbyk7Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19VRFBUWVBFKSA9PSAwKSB7Ci0JCXNvbGlzdGVuX3Byb3RvKHNvKTsKLQl9Ci0jZW5kaWYK
LSNlbmRpZgotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA8
IDEyMDAwMzQKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkg
ewotCQkvKiByZW1vdmUgdGhlIEFDQ0VQVENPTk4gZmxhZyBmb3Igb25lLXRvLW1hbnkgc29ja2V0
cyAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJc28tPnNvX29wdGlvbnMgJj0gflND
VFBfU09fQUNDRVBUQ09OTjsKLSNlbHNlCi0JCXNvLT5zb19vcHRpb25zICY9IH5TT19BQ0NFUFRD
T05OOwotI2VuZGlmCi0JfQotCVNPQ0tfVU5MT0NLKHNvKTsKLSNlbmRpZgotI2lmIChkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDApIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoYmFja2xvZyA+IDAp
IHsKLQkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORzsKLQl9IGVs
c2UgewotCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0FDQ0VQVElORzsKLQl9
Ci0jZWxzZQotCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19BQ0NFUFRJTkc7Ci0j
ZW5kaWYKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLXN0
YXRpYyBpbnQgc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQgPSAwOwotCi1pbnQKLSNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3Nf
XykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqKmFkZHIpCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LXNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGlu
dCAqbmFtZWxlbiwKLQkgICAgdm9pZCAqYWNjZXB0X2luZm8sIGludCAqYWNjZXB0X2luZm9fbGVu
KQotewotI2Vsc2UKLXNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAq
bmFtKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKik7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3RydWN0IHNjdHBfaW5w
Y2IgKmlucDsKLQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKLSNpZmRlZiBJTkVUNgotI2lm
ZGVmIFNDVFBfS0FNRQotCWludCBlcnJvcjsKLSNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KLSNlbmRp
ZgotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0KLQlpZiAoaW5wID09
IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JU0NU
UF9JTlBfUkxPQ0soaW5wKTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VURQVFlQRSkgewotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwot
CQlyZXR1cm4gKEVPUE5PVFNVUFApOwotCX0KLQlpZiAoc28tPnNvX3N0YXRlICYgU1NfSVNESVND
T05ORUNURUQpIHsKLQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQ09OTkFCT1JURUQp
OwotCQlyZXR1cm4gKEVDT05OQUJPUlRFRCk7Ci0JfQotCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAt
PnNjdHBfYXNvY19saXN0KTsKLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0Jc3RvcmUgPSBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2FkZHI7Ci0Jc3RjYi0+YXNvYy5zdGF0
ZSAmPSB+U0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUU7Ci0JU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCWNhc2UgQUZf
SU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNpbiwgc3RydWN0
IHNvY2thZGRyX2luICosIHNpemVvZiAqc2luKTsKLQkJaWYgKHNpbiA9PSBOVUxMKQotCQkJcmV0
dXJuIChFTk9NRU0pOwotI2Vsc2UKLQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7
Ci0JCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Ci0jZW5kaWYKLQkJc2luLT5zaW5fZmFt
aWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJc2luLT5zaW5fbGVuID0gc2l6
ZW9mKCpzaW4pOwotI2VuZGlmCi0JCXNpbi0+c2luX3BvcnQgPSBzdG9yZS5zaW4uc2luX3BvcnQ7
Ci0JCXNpbi0+c2luX2FkZHIgPSBzdG9yZS5zaW4uc2luX2FkZHI7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2lu
OwotI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKQotCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVv
Zigqc2luKTsKLSNlbmRpZgotCQlicmVhazsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNh
c2UgQUZfSU5FVDY6Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNp
bjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKLQkJaWYgKHNpbjYgPT0g
TlVMTCkKLQkJCXJldHVybiAoRU5PTUVNKTsKLSNlbHNlCi0JCXNpbjYgPSAoc3RydWN0IHNvY2th
ZGRyX2luNiAqKWFkZHI7Ci0JCW1lbXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsKLSNlbmRp
ZgotCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4K
LQkJc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOwotI2VuZGlmCi0JCXNpbjYtPnNpbjZf
cG9ydCA9IHN0b3JlLnNpbjYuc2luNl9wb3J0OwotCQlzaW42LT5zaW42X2FkZHIgPSBzdG9yZS5z
aW42LnNpbjZfYWRkcjsKLSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCi0jaWZk
ZWYgU0NUUF9LQU1FCi0JCWlmICgoZXJyb3IgPSBzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpKSAhPSAw
KSB7Ci0JCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0K
LSNlbHNlCi0JCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKQot
CQkJLyoKLQkJCSAqIHNpbjYtPnNpbjZfc2NvcGVfaWQgPQotCQkJICogbnRvaHMoc2luNi0+c2lu
Nl9hZGRyLnM2X2FkZHIxNlsxXSk7Ci0JCQkgKi8KLQkJCWluNl9yZWNvdmVyc2NvcGUoc2luNiwg
JnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CS8qIHNraXAgaWZwIGNoZWNrICovCi0JCWVsc2UKLQkJ
CXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwkvKiBYWFggKi8KLSNlbmRpZiAvKiBTQ1RQX0tBTUUg
Ki8KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2lu
NjsKLSNlbGlmICFkZWZpbmVkKF9fUGFuZGFfXykKLQkJU0NUUF9CVUZfTEVOKG5hbSkgPSBzaXpl
b2YoKnNpbjYpOwotI2VuZGlmCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAq
c2Nvbm47Ci0KLQkJU0NUUF9NQUxMT0NfU09OQU1FKHNjb25uLCBzdHJ1Y3Qgc29ja2FkZHJfY29u
biAqLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJaWYgKHNjb25uID09IE5VTEwp
IHsKLQkJCXJldHVybiAoRU5PTUVNKTsKLQkJfQotCQlzY29ubi0+c2Nvbm5fZmFtaWx5ID0gQUZf
Q09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCQlzY29ubi0+c2Nvbm5fbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLSNlbmRpZgotCQlzY29ubi0+c2Nvbm5fcG9ydCA9IHN0
b3JlLnNjb25uLnNjb25uX3BvcnQ7Ci0JCXNjb25uLT5zY29ubl9hZGRyID0gc3RvcmUuc2Nvbm4u
c2Nvbm5fYWRkcjsKLQkJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2Nvbm47Ci0JCWJyZWFr
OwotCX0KLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCS8qIFRTTkggKi8KLQkJYnJlYWs7Ci0JfQotCS8q
IFdha2UgYW55IGRlbGF5ZWQgc2xlZXAgYWN0aW9uICovCi0JaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgewotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlp
bnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRTsKLQkJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQpIHsKLQkJCWlucC0+c2N0cF9m
bGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVDsKLQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fc25kKTsKLQkJCWlm
IChzb3dyaXRlYWJsZShpbnAtPnNjdHBfc29ja2V0KSkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKl9fVXNlcnNwYWNlX18gY2FsbGlu
ZyBzb3d3YWt1cF9sb2NrZWQgYmVjYXVzZSBvZiBTT0NLQlVGX0xPQ0sgYWJvdmUuICovCi0jZW5k
aWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJc293d2FrZXVwX2xvY2tlZChpbnAtPnNjdHBfc29j
a2V0KTsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJLyogc29ja2V0IGlzIGxv
Y2tlZCAqLwotI2VuZGlmCi0JCQkJc293d2FrZXVwKGlucC0+c2N0cF9zb2NrZXQpOwotI2VuZGlm
Ci0JCQl9IGVsc2UgewotCQkJCVNPQ0tCVUZfVU5MT0NLKCZpbnAtPnNjdHBfc29ja2V0LT5zb19z
bmQpOwotCQkJfQotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJfQotCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUKSB7Ci0JCQlpbnAtPnNjdHBfZmxhZ3Mg
Jj0gflNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKLQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
LQkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKLQkJCWlmIChzb3Jl
YWRhYmxlKGlucC0+c2N0cF9zb2NrZXQpKSB7Ci0JCQkJc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQr
KzsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8qX19Vc2Vyc3BhY2VfXyBjYWxsaW5nIHNvcndha3VwX2xvY2tlZCBiZWNhdXNlIG9m
IFNPQ0tCVUZfTE9DSyBhYm92ZSAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJCXNv
cndha2V1cF9sb2NrZWQoaW5wLT5zY3RwX3NvY2tldCk7Ci0jZWxzZQotI2lmIGRlZmluZWQoX19B
UFBMRV9fKQotCQkJCS8qIHNvY2tldCBpcyBsb2NrZWQgKi8KLSNlbmRpZgotCQkJCXNvcndha2V1
cChpbnAtPnNjdHBfc29ja2V0KTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJCQlTT0NLQlVGX1VO
TE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKLQkJCX0KLQkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7Ci0JCX0KLQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCX0KLQlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKLQkJc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywK
LQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzE5KTsK
LQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotI2lmZGVmIElORVQKLWludAotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQot
c2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKmFkZHIp
Ci17Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykK
LXNjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIp
Ci17Ci0Jc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRk
cjsKLSNlbHNlCi1zY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYg
Km5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1Y3Qgc29j
a2FkZHJfaW4gKik7Ci0jZW5kaWYKLQl1aW50MzJfdCB2cmZfaWQ7Ci0Jc3RydWN0IHNjdHBfaW5w
Y2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwotCi0JLyoKLQkgKiBEbyB0aGUg
bWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLgotCSAqLwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVND
VFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2YgKnNpbik7
Ci0JaWYgKHNpbiA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7Ci0jZWxpZiBkZWZpbmVkKF9f
UGFuZGFfXykKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2Vsc2UKLQlTQ1RQX0JV
Rl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikp
OwotI2VuZGlmCi0Jc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9M
RU4KLQlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7Ci0jZW5kaWYKLQlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmICghaW5wKSB7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0J
CVNDVFBfRlJFRV9TT05BTUUoc2luKTsKLSNlbmRpZgotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4g
KEVDT05OUkVTRVQpOwotCX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCXNpbi0+c2luX3BvcnQg
PSBpbnAtPnNjdHBfbHBvcnQ7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMKSB7Ci0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05O
RUNURUQpIHsKLQkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQkJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luX2E7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0JCQlpbnQgZm5kOwotCi0JCQlz
dGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7Ci0JCQlpZiAoc3RjYiA9PSBO
VUxMKSB7Ci0JCQkJZ290byBub3RDb25uOwotCQkJfQotCQkJZm5kID0gMDsKLQkJCXNpbl9hID0g
TlVMTDsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0
Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCQkJc2luX2EgPSAoc3RydWN0IHNvY2thZGRy
X2luICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQlpZiAoc2luX2EgPT0gTlVMTCkKLQkJCQkJLyog
dGhpcyB3aWxsIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KLQkJCQkJY29udGludWU7Ci0KLQkJCQlp
ZiAoc2luX2EtPnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJCQlmbmQgPSAxOwotCQkJCQli
cmVhazsKLQkJCQl9Ci0JCQl9Ci0JCQlpZiAoKCFmbmQpIHx8IChzaW5fYSA9PSBOVUxMKSkgewot
CQkJCS8qIHB1bnQgKi8KLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQkJZ290byBub3RD
b25uOwotCQkJfQotCi0JCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7Ci0JCQlzY3RwX2lmYSA9
IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwKLQkJCQkJCQkJIHN0Y2IsCi0JCQkJ
CQkJCSAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCi0JCQkJCQkJCSBuZXQsIDAsIHZyZl9pZCk7
Ci0JCQlpZiAoc2N0cF9pZmEpIHsKLQkJCQlzaW4tPnNpbl9hZGRyID0gc2N0cF9pZmEtPmFkZHJl
c3Muc2luLnNpbl9hZGRyOwotCQkJCXNjdHBfZnJlZV9pZmEoc2N0cF9pZmEpOwotCQkJfQotCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9IGVsc2UgewotCQkJLyogRm9yIHRoZSBib3VuZCBh
bGwgY2FzZSB5b3UgZ2V0IGJhY2sgMCAqLwotCW5vdENvbm46Ci0JCQlzaW4tPnNpbl9hZGRyLnNf
YWRkciA9IDA7Ci0JCX0KLQotCX0gZWxzZSB7Ci0JCS8qIFRha2UgdGhlIGZpcnN0IElQdjQgYWRk
cmVzcyBpbiB0aGUgbGlzdCAqLwotCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Ci0JCWludCBm
bmQgPSAwOwotCi0JCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNj
dHBfbnh0X2FkZHIpIHsKLQkJCWlmIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9
PSBBRl9JTkVUKSB7Ci0JCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKLQotCQkJCXNpbl9h
ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luOwotCQkJCXNpbi0+c2luX2FkZHIgPSBzaW5fYS0+
c2luX2FkZHI7Ci0JCQkJZm5kID0gMTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlpZiAoIWZu
ZCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKQotCQkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOwotI2VuZGlmCi0J
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9FTlQpOwotCQkJcmV0dXJuIChFTk9F
TlQpOwotCQl9Ci0JfQotCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQko
KmFkZHIpID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19
Ci0KLWludAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2thZGRyICoqYWRkcikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKLSNl
bGlmIGRlZmluZWQoX19QYW5kYV9fKQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2thZGRyICphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7Ci0jZWxzZQotc2N0cF9wZWVyYWRkcihzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9
IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7Ci0KLSNlbmRpZgotCWludCBmbmQ7Ci0J
c3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0
cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQkvKiBEbyB0
aGUgbWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLiAqLwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVND
VFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzaXplb2YgKnNpbik7
Ci0JaWYgKHNpbiA9PSBOVUxMKQotCQlyZXR1cm4gKEVOT01FTSk7Ci0jZWxpZiBkZWZpbmVkKF9f
UGFuZGFfXykKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikpOwotI2Vsc2UKLQlTQ1RQX0JV
Rl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKLQltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNpbikp
OwotI2VuZGlmCi0Jc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9M
RU4KLQlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7Ci0jZW5kaWYKLQotCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JaWYgKChpbnAgPT0gTlVMTCkgfHwKLQkgICAg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDApKSB7Ci0J
CS8qIFVEUCB0eXBlIGFuZCBsaXN0ZW5lcnMgd2lsbCBkcm9wIG91dCBoZXJlICovCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pCi0JCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKLSNlbmRpZgotCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7
Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQlTQ1RQX0lOUF9STE9DSyhpbnApOwotCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQlpZiAoc3RjYikgewotCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOwotCX0KLQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JaWYgKHN0Y2Ig
PT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbik7Ci0jZW5k
aWYKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JZm5kID0gMDsK
LQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7Ci0JCXNp
bl9hID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7Ci0JCWlmIChzaW5f
YS0+c2luX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlmbmQgPSAxOwotCQkJc2luLT5zaW5fcG9y
dCA9IHN0Y2ItPnJwb3J0OwotCQkJc2luLT5zaW5fYWRkciA9IHNpbl9hLT5zaW5fYWRkcjsKLQkJ
CWJyZWFrOwotCQl9Ci0JfQotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlpZiAoIWZuZCkgewot
CQkvKiBObyBJUHY0IGFkZHJlc3MgKi8KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9GUkVFX1NPTkFN
RShzaW4pOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7Ci0JCXJldHVybiAoRU5PRU5UKTsKLQl9Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCi0JKCphZGRyKSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilzaW47Ci0jZW5kaWYK
LQlyZXR1cm4gKDApOwotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi1zdHJ1Y3QgcHJfdXNycmVxcyBzY3Rw
X3VzcnJlcXMgPSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkucHJ1X2Fib3J0ID0gc2N0
cF9hYm9ydCwKLQkucHJ1X2FjY2VwdCA9IHNjdHBfYWNjZXB0LAotCS5wcnVfYXR0YWNoID0gc2N0
cF9hdHRhY2gsCi0JLnBydV9iaW5kID0gc2N0cF9iaW5kLAotCS5wcnVfY29ubmVjdCA9IHNjdHBf
Y29ubmVjdCwKLQkucHJ1X2NvbnRyb2wgPSBpbl9jb250cm9sLAotI2lmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDY5MDAwMAotCS5wcnVfY2xvc2UgPSBzY3RwX2Nsb3NlLAotCS5wcnVfZGV0YWNoID0g
c2N0cF9jbG9zZSwKLQkucHJ1X3NvcG9sbCA9IHNvcG9sbF9nZW5lcmljLAotCS5wcnVfZmx1c2gg
PSBzY3RwX2ZsdXNoLAotI2Vsc2UKLQkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAotCS5wcnVf
c29wb2xsID0gc29wb2xsLAotI2VuZGlmCi0JLnBydV9kaXNjb25uZWN0ID0gc2N0cF9kaXNjb25u
ZWN0LAotCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCi0JLnBydV9wZWVyYWRkciA9IHNjdHBf
cGVlcmFkZHIsCi0JLnBydV9zZW5kID0gc2N0cF9zZW5kbSwKLQkucHJ1X3NodXRkb3duID0gc2N0
cF9zaHV0ZG93biwKLQkucHJ1X3NvY2thZGRyID0gc2N0cF9pbmdldGFkZHIsCi0JLnBydV9zb3Nl
bmQgPSBzY3RwX3Nvc2VuZCwKLQkucHJ1X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlCi0jZWxp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkucHJ1X2Fib3J0ID0gc2N0cF9hYm9ydCwKLQkucHJ1X2Fj
Y2VwdCA9IHNjdHBfYWNjZXB0LAotCS5wcnVfYXR0YWNoID0gc2N0cF9hdHRhY2gsCi0JLnBydV9i
aW5kID0gc2N0cF9iaW5kLAotCS5wcnVfY29ubmVjdCA9IHNjdHBfY29ubmVjdCwKLQkucHJ1X2Nv
bm5lY3QyID0gcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCi0JLnBydV9jb250cm9sID0gaW5fY29udHJv
bCwKLQkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAotCS5wcnVfZGlzY29ubmVjdCA9IHNjdHBf
ZGlzY29ubmVjdCwKLQkucHJ1X2xpc3RlbiA9IHNjdHBfbGlzdGVuLAotCS5wcnVfcGVlcmFkZHIg
PSBzY3RwX3BlZXJhZGRyLAotCS5wcnVfcmN2ZCA9IE5VTEwsCi0JLnBydV9yY3Zvb2IgPSBwcnVf
cmN2b29iX25vdHN1cHAsCi0JLnBydV9zZW5kID0gc2N0cF9zZW5kbSwKLQkucHJ1X3NlbnNlID0g
cHJ1X3NlbnNlX251bGwsCi0JLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCi0JLnBydV9z
b2NrYWRkciA9IHNjdHBfaW5nZXRhZGRyLAotCS5wcnVfc29zZW5kID0gc2N0cF9zb3NlbmQsCi0J
LnBydV9zb3JlY2VpdmUgPSBzY3RwX3NvcmVjZWl2ZSwKLQkucHJ1X3NvcG9sbCA9IHNvcG9sbAot
I2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlzY3RwX2Fib3J0LAotCXNjdHBfYWNjZXB0LAot
CXNjdHBfYXR0YWNoLAotCXNjdHBfYmluZCwKLQlzY3RwX2Nvbm5lY3QsCi0JcHJ1X2Nvbm5lY3Qy
X25vdHN1cHAsCi0JTlVMTCwKLQlOVUxMLAotCXNjdHBfZGlzY29ubmVjdCwKLQlzY3RwX2xpc3Rl
biwKLQlzY3RwX3BlZXJhZGRyLAotCU5VTEwsCi0JcHJ1X3Jjdm9vYl9ub3RzdXBwLAotCU5VTEws
Ci0JcHJ1X3NlbnNlX251bGwsCi0Jc2N0cF9zaHV0ZG93biwKLQlzY3RwX2ZsdXNoLAotCXNjdHBf
aW5nZXRhZGRyLAotCXNjdHBfc29zZW5kLAotCXNjdHBfc29yZWNlaXZlLAotCXNvcG9sbF9nZW5l
cmljLAotCU5VTEwsCi0Jc2N0cF9jbG9zZQotI2VuZGlmCi19OwotI2VsaWYgIWRlZmluZWQoX19Q
YW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwX3VzcnJlcShzbywg
cmVxLCBtLCBuYW0sIGNvbnRyb2wpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0JaW50IHJlcTsKLQlz
dHJ1Y3QgbWJ1ZiAqbSwgKm5hbSwgKmNvbnRyb2w7Ci17Ci0Jc3RydWN0IHByb2MgKnAgPSBjdXJw
cm9jOwotCXVpbnQzMl90IHZyZl9pZDsKLQlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKLQlpbnQgZXJy
b3I7Ci0JaW50IGZhbWlseTsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gKHN0cnVjdCBzY3Rw
X2lucGNiICopc28tPnNvX3BjYjsKLQotCWVycm9yID0gMDsKLQlmYW1pbHkgPSBzby0+c29fcHJv
dG8tPnByX2RvbWFpbi0+ZG9tX2ZhbWlseTsKLQlpZiAocmVxID09IFBSVV9DT05UUk9MKSB7Ci0J
CXN3aXRjaCAoZmFtaWx5KSB7Ci0JCWNhc2UgUEZfSU5FVDoKLQkJCWVycm9yID0gaW5fY29udHJv
bChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAotCQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250
cm9sKTsKLQkJCWJyZWFrOwotI2lmZGVmIElORVQ2Ci0JCWNhc2UgUEZfSU5FVDY6Ci0JCQllcnJv
ciA9IGluNl9jb250cm9sKHNvLCAobG9uZyltLCAoY2FkZHJfdCluYW0sCi0JCQkgICAgKHN0cnVj
dCBpZm5ldCAqKWNvbnRyb2wsIHApOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVBRk5PU1VQUE9SVCk7Ci0JCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJfQotCQlyZXR1
cm4gKGVycm9yKTsKLQl9Ci0Jc3dpdGNoIChyZXEpIHsKLQljYXNlIFBSVV9BVFRBQ0g6Ci0JCWVy
cm9yID0gc2N0cF9hdHRhY2goc28sIGZhbWlseSwgcCk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0RF
VEFDSDoKLQkJZXJyb3IgPSBzY3RwX2RldGFjaChzbyk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0JJ
TkQ6Ci0JCWlmIChuYW0gPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJldHVybiAoRUlO
VkFMKTsKLQkJfQotCQllcnJvciA9IHNjdHBfYmluZChzbywgbmFtLCBwKTsKLQkJYnJlYWs7Ci0J
Y2FzZSBQUlVfTElTVEVOOgotCQllcnJvciA9IHNjdHBfbGlzdGVuKHNvLCBwKTsKLQkJYnJlYWs7
Ci0JY2FzZSBQUlVfQ09OTkVDVDoKLQkJaWYgKG5hbSA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cF9jb25uZWN0KHNvLCBu
YW0sIHApOwotCQlicmVhazsKLQljYXNlIFBSVV9ESVNDT05ORUNUOgotCQllcnJvciA9IHNjdHBf
ZGlzY29ubmVjdChzbyk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX0FDQ0VQVDoKLQkJaWYgKG5hbSA9
PSBOVUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWVy
cm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX1NIVVRET1dO
OgotCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOwotCQlicmVhazsKLQotCWNhc2UgUFJVX1JD
VkQ6Ci0JCS8qCi0JCSAqIEZvciBPcGVuIGFuZCBOZXQgQlNELCB0aGlzIGlzIHJlYWwgdWdseS4g
VGhlIG1idWYgKm5hbQotCQkgKiB0aGF0IGlzIHBhc3NlZCAoYnkgc29yZWNlaXZlKCkpIGlzIHRo
ZSBpbnQgZmxhZ3MgYyBhc3QgYXMKLQkJICogYSAobWJ1ZiAqKSB5dWNrIQotCQkgKi8KLQkJYnJl
YWs7Ci0KLQljYXNlIFBSVV9TRU5EOgotCQkvKiBGbGFncyBhcmUgaWdub3JlZCAqLwotCQl7Ci0J
CQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7Ci0KLQkJCWlmIChuYW0gPT0gTlVMTCkKLQkJCQlhZGRy
ID0gTlVMTDsKLQkJCWVsc2UKLQkJCQlhZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAq
KTsKLQotCQkJZXJyb3IgPSBzY3RwX3NlbmRtKHNvLCAwLCBtLCBhZGRyLCBjb250cm9sLCBwKTsK
LQkJfQotCQlicmVhazsKLQljYXNlIFBSVV9BQk9SVDoKLQkJZXJyb3IgPSBzY3RwX2Fib3J0KHNv
KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFBSVV9TRU5TRToKLQkJZXJyb3IgPSAwOwotCQlicmVhazsK
LQljYXNlIFBSVV9SQ1ZPT0I6Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7Ci0JCWVycm9yID0gRUFGTk9T
VVBQT1JUOwotCQlicmVhazsKLQljYXNlIFBSVV9TRU5ET09COgotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUZOT1NVUFBPUlQp
OwotCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfUEVFUkFERFI6
Ci0JCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVf
U09DS0FERFI6Ci0JCWVycm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7Ci0JCWJyZWFrOwot
CWNhc2UgUFJVX1NMT1dUSU1POgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0J
CWJyZWFrOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotI2VuZGlmCi0jZW5kaWYKLQotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotcmVnaXN0ZXJfcmVjdl9jYihzdHJ1Y3Qgc29j
a2V0ICpzbywKLSAgICAgICAgICAgICAgICAgaW50ICgqcmVjZWl2ZV9jYikoc3RydWN0IHNvY2tl
dCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKLSAgICAgICAg
ICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3JjdmluZm8sIGludCBmbGFncywg
dm9pZCAqdWxwX2luZm8pKQotewotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0KLQlpbnAgPSAo
c3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJ
cmV0dXJuICgwKTsKLQl9Ci0JU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQlpbnAtPnJlY3ZfY2FsbGJh
Y2sgPSByZWNlaXZlX2NiOwotCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQlyZXR1cm4gKDEpOwot
fQotCi1pbnQKLXJlZ2lzdGVyX3NlbmRfY2Ioc3RydWN0IHNvY2tldCAqc28sIHVpbnQzMl90IHNi
X3RocmVzaG9sZCwgaW50ICgqc2VuZF9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdWludDMyX3Qg
c2JfZnJlZSkpCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqKSBzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlyZXR1cm4g
KDApOwotCX0KLQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCWlucC0+c2VuZF9jYWxsYmFjayA9IHNl
bmRfY2I7Ci0JaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IHNiX3RocmVzaG9sZDsKLQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7Ci0JLyogRklYTUUgY2hhbmdlIHRvIGN1cnJlbnQgYW1vdW50IGZyZWUu
IFRoaXMgd2lsbCBiZSB0aGUgZnVsbCBidWZmZXIKLQkgKiB0aGUgZmlyc3QgdGltZSB0aGlzIGlz
IHJlZ2lzdGVyZWQgYnV0IGl0IGNvdWxkIGJlIG9ubHkgYSBwb3J0aW9uCi0JICogb2YgdGhlIHNl
bmQgYnVmZmVyIGlmIHRoaXMgaXMgY2FsbGVkIGEgc2Vjb25kIHRpbWUgZS5nLiBpZiB0aGUKLQkg
KiB0aHJlc2hvbGQgY2hhbmdlcy4KLQkgKi8KLQlyZXR1cm4gKDEpOwotfQotCi1pbnQKLXJlZ2lz
dGVyX3VscF9pbmZvIChzdHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2luZm8pCi17Ci0Jc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKSBzby0+
c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlyZXR1cm4gKDApOwotCX0KLQlTQ1RQX0lO
UF9XTE9DSyhpbnApOwotCWlucC0+dWxwX2luZm8gPSB1bHBfaW5mbzsKLQlTQ1RQX0lOUF9XVU5M
T0NLKGlucCk7Ci0JcmV0dXJuICgxKTsKLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX3Zhci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Zhci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5OTIyNjg1NDU3NjUwZTY3MDA3MjRlMzg1NmJlYmUyYWQ4
ODlkNmQwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF92YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDUxMyArMCwwIEBA
Ci0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAot
ICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
LSAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQotICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5jbHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF92YXIuaCAzMTc0NTcgMjAxNy0wNC0yNiAxOToy
Njo0MFogdHVleGVuICQiKTsKLSNlbmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUX1NDVFBfVkFSX0hf
Ci0jZGVmaW5lIF9ORVRJTkVUX1NDVFBfVkFSX0hfCi0KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
dWlvLmg+Ci0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
LQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKQotZXh0ZXJuIHN0cnVjdCBwcl91c3JyZXFzIHNjdHBfdXNycmVxczsK
LSNlbmRpZgotCi0KLSNkZWZpbmUgc2N0cF9mZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgIChpbnAt
PnNjdHBfZmVhdHVyZXMgfD0gZmVhdHVyZSkKLSNkZWZpbmUgc2N0cF9mZWF0dXJlX29mZihpbnAs
IGZlYXR1cmUpIChpbnAtPnNjdHBfZmVhdHVyZXMgJj0gfmZlYXR1cmUpCi0jZGVmaW5lIHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIGZlYXR1cmUpICgoaW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVy
ZSkgPT0gZmVhdHVyZSkKLSNkZWZpbmUgc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIGZlYXR1cmUp
ICgoaW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gMCkKLQotI2RlZmluZSBzY3RwX3N0
Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIGZlYXR1cmUpIHtcCi0JaWYgKHN0Y2IpIHsgXAotCQlz
dGNiLT5hc29jLnNjdHBfZmVhdHVyZXMgfD0gZmVhdHVyZTsgXAotCX0gZWxzZSBpZiAoaW5wKSB7
IFwKLQkJaW5wLT5zY3RwX2ZlYXR1cmVzIHw9IGZlYXR1cmU7IFwKLQl9IFwKLX0KLSNkZWZpbmUg
c2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgZmVhdHVyZSkge1wKLQlpZiAoc3RjYikg
eyBcCi0JCXN0Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyAmPSB+ZmVhdHVyZTsgXAotCX0gZWxzZSBp
ZiAoaW5wKSB7IFwKLQkJaW5wLT5zY3RwX2ZlYXR1cmVzICY9IH5mZWF0dXJlOyBcCi0JfSBcCi19
Ci0jZGVmaW5lIHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKGlucCwgc3RjYiwgZmVhdHVyZSkgXAot
CSgoKHN0Y2IgIT0gTlVMTCkgJiYgXAotCSAgKChzdGNiLT5hc29jLnNjdHBfZmVhdHVyZXMgJiBm
ZWF0dXJlKSA9PSBmZWF0dXJlKSkgfHwgXAotCSAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBO
VUxMKSAmJiBcCi0JICAoKGlucC0+c2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IGZlYXR1cmUp
KSkKLSNkZWZpbmUgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgZmVhdHVyZSkg
XAotCSgoKHN0Y2IgIT0gTlVMTCkgJiYgXAotCSAgKChzdGNiLT5hc29jLnNjdHBfZmVhdHVyZXMg
JiBmZWF0dXJlKSA9PSAwKSkgfHwgXAotCSAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxM
KSAmJiBcCi0JICAoKGlucC0+c2N0cF9mZWF0dXJlcyAmIGZlYXR1cmUpID09IDApKSB8fCBcCi0J
ICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wID09IE5VTEwpKSkKLQotLyogbWFuYWdpbmcgbW9iaWxp
dHlfZmVhdHVyZSBpbiBpbnBjYiAoYnkgbWljY2hpZSkgKi8KLSNkZWZpbmUgc2N0cF9tb2JpbGl0
eV9mZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgIChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMg
fD0gZmVhdHVyZSkKLSNkZWZpbmUgc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIGZlYXR1
cmUpIChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgJj0gfmZlYXR1cmUpCi0jZGVmaW5lIHNj
dHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihpbnAsIGZlYXR1cmUpIChpbnAtPnNjdHBfbW9iaWxp
dHlfZmVhdHVyZXMgJiBmZWF0dXJlKQotI2RlZmluZSBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVf
b2ZmKGlucCwgZmVhdHVyZSkgKChpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXMgJiBmZWF0dXJl
KSA9PSAwKQotCi0jZGVmaW5lIHNjdHBfbWF4c3BhY2Uoc2IpIChtYXgoKHNiKS0+c2JfaGl3YXQs
U0NUUF9NSU5JTUFMX1JXTkQpKQotCi0jZGVmaW5lCXNjdHBfc2JzcGFjZShhc29jLCBzYikgKChs
b25nKSAoKHNjdHBfbWF4c3BhY2Uoc2IpID4gKGFzb2MpLT5zYl9jYykgPyAoc2N0cF9tYXhzcGFj
ZShzYikgLSAoYXNvYyktPnNiX2NjKSA6IDApKQotCi0jZGVmaW5lCXNjdHBfc2JzcGFjZV9mYWls
ZWRtc2dzKHNiKSAoKGxvbmcpICgoc2N0cF9tYXhzcGFjZShzYikgPiAoc2IpLT5zYl9jYykgPyAo
c2N0cF9tYXhzcGFjZShzYikgLSAoc2IpLT5zYl9jYykgOiAwKSkKLQotI2RlZmluZSBzY3RwX3Ni
c3BhY2Vfc3ViKGEsYikgKCgoYSkgPiAoYikpID8gKChhKSAtIChiKSkgOiAwKQotCi0vKgotICog
SSB0cmllZCB0byBjYWNoZSB0aGUgcmVhZHEgZW50cmllcyBhdCBvbmUgcG9pbnQuIEJ1dCB0aGUg
cmVhbGl0eQotICogaXMgdGhhdCBpdCBkaWQgbm90IGFkZCBhbnkgcGVyZm9ybWFuY2Ugc2luY2Ug
dGhpcyBtZWFudCB3ZSBoYWQgdG8KLSAqIGxvY2sgdGhlIFNUQ0Igb24gcmVhZC4gQW5kIGF0IHRo
YXQgcG9pbnQgb25jZSB5b3UgaGF2ZSB0byBkbyBhbgotICogZXh0cmEgbG9jaywgaXQgcmVhbGx5
IGRvZXMgbm90IG1hdHRlciBpZiB0aGUgbG9jayBpcyBpbiB0aGUgWk9ORQotICogc3R1ZmYgb3Ig
aW4gb3VyIGNvZGUuIE5vdGUgdGhhdCB0aGlzIHNhbWUgcHJvYmxlbSB3b3VsZCBvY2N1ciB3aXRo
Ci0gKiBhbiBtYnVmIGNhY2hlIGFzIHdlbGwgc28gaXQgaXMgbm90IHJlYWxseSB3b3J0aCBkb2lu
ZywgYXQgbGVhc3QKLSAqIHJpZ2h0IG5vdyA6LUQKLSAqLwotI2lmZGVmIElOVkFSSUFOVFMKLSNk
ZWZpbmUgc2N0cF9mcmVlX2FfcmVhZHEoX3N0Y2IsIF9yZWFkcSkgeyBcCi0JaWYgKChfcmVhZHEp
LT5vbl9zdHJtX3EpIFwKLQkJcGFuaWMoIk9uIHN0cm0gcSBzdGNiOiVwIHJlYWRxOiVwIiwgKF9z
dGNiKSwgKF9yZWFkcSkpOyBcCi0JU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfcmVhZHEpLCAoX3JlYWRxKSk7IFwKLQlTQ1RQX0RFQ1JfUkVBRFFfQ09VTlQoKTsgXAotfQot
I2Vsc2UKLSNkZWZpbmUgc2N0cF9mcmVlX2FfcmVhZHEoX3N0Y2IsIF9yZWFkcSkgeyBcCi0JU0NU
UF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCAoX3JlYWRxKSk7IFwK
LQlTQ1RQX0RFQ1JfUkVBRFFfQ09VTlQoKTsgXAotfQotI2VuZGlmCi0KLSNkZWZpbmUgc2N0cF9h
bGxvY19hX3JlYWRxKF9zdGNiLCBfcmVhZHEpIHsgXAotCShfcmVhZHEpID0gU0NUUF9aT05FX0dF
VChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9yZWFkcSksIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkKTsgXAotCWlmICgoX3JlYWRxKSkgeyBcCi0JICAgICBTQ1RQX0lOQ1JfUkVBRFFfQ09VTlQo
KTsgXAotCX0gXAotfQotCi0jZGVmaW5lIHNjdHBfZnJlZV9hX3N0cm1vcShfc3RjYiwgX3N0cm1v
cSwgX3NvX2xvY2tlZCkgeyBcCi0JaWYgKChfc3RybW9xKS0+aG9sZHNfa2V5X3JlZikgeyBcCi0J
CXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBzcC0+YXV0aF9rZXlpZCwgX3NvX2xvY2tlZCk7
IFwKLQkJKF9zdHJtb3EpLT5ob2xkc19rZXlfcmVmID0gMDsgXAotCX0gXAotCVNDVFBfWk9ORV9G
UkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX3N0cm1vcSksIChfc3RybW9xKSk7IFwKLQlTQ1RQ
X0RFQ1JfU1RSTU9RX0NPVU5UKCk7IFwKLX0KLQotI2RlZmluZSBzY3RwX2FsbG9jX2Ffc3RybW9x
KF9zdGNiLCBfc3RybW9xKSB7IFwKLQkoX3N0cm1vcSkgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFT
RV9JTkZPKGlwaV96b25lX3N0cm1vcSksIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5n
KTsgXAotCWlmICgoX3N0cm1vcSkpIHsgXAotCQltZW1zZXQoX3N0cm1vcSwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKSk7IFwKLQkJU0NUUF9JTkNSX1NUUk1PUV9D
T1VOVCgpOyBcCi0JCShfc3RybW9xKS0+aG9sZHNfa2V5X3JlZiA9IDA7IFwKLQl9IFwKLX0KLQot
I2RlZmluZSBzY3RwX2ZyZWVfYV9jaHVuayhfc3RjYiwgX2NoaywgX3NvX2xvY2tlZCkgeyBcCi0J
aWYgKChfY2hrKS0+aG9sZHNfa2V5X3JlZikge1wKLQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKChf
c3RjYiksIChfY2hrKS0+YXV0aF9rZXlpZCwgX3NvX2xvY2tlZCk7IFwKLQkJKF9jaGspLT5ob2xk
c19rZXlfcmVmID0gMDsgXAotCX0gXAotCWlmIChfc3RjYikgeyBcCi0JCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKChfc3RjYikpOyBcCi0JCWlmICgoX2NoayktPndob1RvKSB7IFwKLQkJCXNjdHBfZnJl
ZV9yZW1vdGVfYWRkcigoX2NoayktPndob1RvKTsgXAotCQkJKF9jaGspLT53aG9UbyA9IE5VTEw7
IFwKLQkJfSBcCi0JCWlmICgoKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rX2NudCA+IFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCkpIHx8IFwKLQkJICAgIChTQ1RQX0JB
U0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpID4gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N5c3RlbV9m
cmVlX3Jlc2NfbGltaXQpKSkgeyBcCi0JCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhp
cGlfem9uZV9jaHVuayksIChfY2hrKSk7IFwKLQkJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsgXAot
CQl9IGVsc2UgeyBcCi0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmKF9zdGNiKS0+YXNvYy5mcmVlX2No
dW5rcywgKF9jaGspLCBzY3RwX25leHQpOyBcCi0JCQkoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtf
Y250Kys7IFwKLQkJCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVu
a3MpLCAxKTsgXAotCQl9IFwKLQl9IGVsc2UgeyBcCi0JCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFT
RV9JTkZPKGlwaV96b25lX2NodW5rKSwgKF9jaGspKTsgXAotCQlTQ1RQX0RFQ1JfQ0hLX0NPVU5U
KCk7IFwKLQl9IFwKLX0KLQotI2RlZmluZSBzY3RwX2FsbG9jX2FfY2h1bmsoX3N0Y2IsIF9jaGsp
IHsgXAotCWlmIChUQUlMUV9FTVBUWSgmKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rcykpIHsgXAot
CQkoX2NoaykgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwg
c3RydWN0IHNjdHBfdG1pdF9jaHVuayk7IFwKLQkJaWYgKChfY2hrKSkgeyBcCi0JCQlTQ1RQX0lO
Q1JfQ0hLX0NPVU5UKCk7IFwKLQkJCShfY2hrKS0+d2hvVG8gPSBOVUxMOyBcCi0JCQkoX2Noaykt
PmhvbGRzX2tleV9yZWYgPSAwOyBcCi0JCX0gXAotCX0gZWxzZSB7IFwKLQkJKF9jaGspID0gVEFJ
TFFfRklSU1QoJihfc3RjYiktPmFzb2MuZnJlZV9jaHVua3MpOyBcCi0JCVRBSUxRX1JFTU9WRSgm
KF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rcywgKF9jaGspLCBzY3RwX25leHQpOyBcCi0JCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5rcyksIDEpOyBcCi0J
CShfY2hrKS0+aG9sZHNfa2V5X3JlZiA9IDA7IFwKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfY2Fj
aGVkX2Noayk7IFwKLQkJKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rX2NudC0tOyBcCi0JfSBcCi19
Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAw
MAotCi0jZGVmaW5lIHNjdHBfZnJlZV9yZW1vdGVfYWRkcihfX25ldCkgeyBcCi0JaWYgKChfX25l
dCkpIHsgIFwKLQkJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmKF9fbmV0
KS0+cmVmX2NvdW50KSkgeyBcCi0JCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJihfX25ldCkt
PnJ4dF90aW1lci50aW1lcik7IFwKLQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0
KS0+cG10dV90aW1lci50aW1lcik7IFwKLQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9f
bmV0KS0+aGJfdGltZXIudGltZXIpOyBcCi0JCQlpZiAoKF9fbmV0KS0+cm8ucm9fcnQpIHsgXAot
CQkJCVJURlJFRSgoX19uZXQpLT5yby5yb19ydCk7IFwKLQkJCQkoX19uZXQpLT5yby5yb19ydCA9
IE5VTEw7IFwKLQkJCX0gXAotCQkJaWYgKChfX25ldCktPnNyY19hZGRyX3NlbGVjdGVkKSB7IFwK
LQkJCQlzY3RwX2ZyZWVfaWZhKChfX25ldCktPnJvLl9zX2FkZHIpOyBcCi0JCQkJKF9fbmV0KS0+
cm8uX3NfYWRkciA9IE5VTEw7IFwKLQkJCX0gXAotCQkJKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0
ZWQgPSAwOyBcCi0JCQkoX19uZXQpLT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxF
OyBcCi0JCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQpLCAoX19u
ZXQpKTsgXAotCQkJU0NUUF9ERUNSX1JBRERSX0NPVU5UKCk7IFwKLQkJfSBcCi0JfSBcCi19Ci0K
LSNkZWZpbmUgc2N0cF9zYmZyZWUoY3RsLCBzdGNiLCBzYiwgbSkgeyBcCi0JU0NUUF9TQVZFX0FU
T01JQ19ERUNSRU1FTlQoJihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQlTQ1RQ
X1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAotCWlmICgo
KGN0bCktPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNiKSB7XAotCQlTQ1RQX1NBVkVfQVRP
TUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwK
LQkJU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRy
b2xfbGVuLCBNU0laRSk7IFwKLQl9IFwKLQlpZiAoU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9EQVRB
ICYmIFNDVFBfQlVGX1RZUEUobSkgIT0gTVRfSEVBREVSICYmIFwKLQkgICAgU0NUUF9CVUZfVFlQ
RShtKSAhPSBNVF9PT0JEQVRBKSBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJihzYiktPnNiX2N0
bCxTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLX0KLQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwg
c2IsIG0pIHsgXAotCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jYyxTQ1RQX0JVRl9MRU4oKG0p
KSk7IFwKLQlhdG9taWNfYWRkX2ludCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAotCWlmIChz
dGNiKSB7IFwKLQkJYXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5zYl9jYywgU0NUUF9CVUZf
TEVOKChtKSkpOyBcCi0JCWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2MubXlfcnduZF9jb250
cm9sX2xlbiwgTVNJWkUpOyBcCi0JfSBcCi0JaWYgKFNDVFBfQlVGX1RZUEUobSkgIT0gTVRfREFU
QSAmJiBTQ1RQX0JVRl9UWVBFKG0pICE9IE1UX0hFQURFUiAmJiBcCi0JICAgIFNDVFBfQlVGX1RZ
UEUobSkgIT0gTVRfT09CREFUQSkgXAotCQlhdG9taWNfYWRkX2ludCgmKHNiKS0+c2JfY3RsLFND
VFBfQlVGX0xFTigobSkpKTsgXAotfQotCi0jZWxzZQkJCQkvKiBGcmVlQlNEIFZlcnNpb24gPD0g
NTAwMDAwIG9yIG5vbi1GcmVlQlNEICovCi0KLSNkZWZpbmUgc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KF9fbmV0KSB7IFwKLQlpZiAoKF9fbmV0KSkgeyBcCi0JCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRf
Q0hFQ0tfUkVGQ09VTlQoJihfX25ldCktPnJlZl9jb3VudCkpIHsgXAotCQkJKHZvaWQpU0NUUF9P
U19USU1FUl9TVE9QKCYoX19uZXQpLT5yeHRfdGltZXIudGltZXIpOyBcCi0JCQkodm9pZClTQ1RQ
X09TX1RJTUVSX1NUT1AoJihfX25ldCktPnBtdHVfdGltZXIudGltZXIpOyBcCi0JCQkodm9pZClT
Q1RQX09TX1RJTUVSX1NUT1AoJihfX25ldCktPmhiX3RpbWVyLnRpbWVyKTsgXAotCQkJaWYgKChf
X25ldCktPnJvLnJvX3J0KSB7IFwKLQkJCQlSVEZSRUUoKF9fbmV0KS0+cm8ucm9fcnQpOyBcCi0J
CQkJKF9fbmV0KS0+cm8ucm9fcnQgPSBOVUxMOyBcCi0JCQl9IFwKLQkJCWlmICgoX19uZXQpLT5z
cmNfYWRkcl9zZWxlY3RlZCkgeyBcCi0JCQkJc2N0cF9mcmVlX2lmYSgoX19uZXQpLT5yby5fc19h
ZGRyKTsgXAotCQkJCShfX25ldCktPnJvLl9zX2FkZHIgPSBOVUxMOyBcCi0JCQl9IFwKLQkJCShf
X25ldCktPnNyY19hZGRyX3NlbGVjdGVkID0gMDsgXAotCQkJKF9fbmV0KS0+ZGVzdF9zdGF0ZSAm
PX5TQ1RQX0FERFJfUkVBQ0hBQkxFOyBcCi0JCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9uZXQpLCAoX19uZXQpKTsgXAotCQkJU0NUUF9ERUNSX1JBRERSX0NPVU5UKCk7
IFwKLQkJfSBcCi0JfSBcCi19Ci0KLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLSNkZWZpbmUgc2N0
cF9zYmZyZWUoY3RsLCBzdGNiLCBzYiwgbSkgeyBcCi0JaWYgKChzYiktPnNiX2NjID49ICh1aW50
MzJfdClTQ1RQX0JVRl9MRU4oKG0pKSkgeyBcCi0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJihzYikt
PnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQl9IGVsc2UgeyBcCi0JCShzYiktPnNiX2Nj
ID0gMDsgXAotCX0gXAotCWlmICgoKGN0bCktPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNi
KSB7IFwKLQkJaWYgKChzdGNiKS0+YXNvYy5zYl9jYyA+PSAodWludDMyX3QpU0NUUF9CVUZfTEVO
KChtKSkpIHsgXAotCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBT
Q1RQX0JVRl9MRU4oKG0pKSk7IFwKLQkJfSBlbHNlIHsgXAotCQkJKHN0Y2IpLT5hc29jLnNiX2Nj
ID0gMDsgXAotCQl9IFwKLQl9IFwKLX0KLQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwgc2Is
IG0pIHsgXAotCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkp
OyBcCi0JaWYgKHN0Y2IpIHsgXAotCQlhdG9taWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLnNiX2Nj
LCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQl9IFwKLX0KLQotI2Vsc2UKLQotI2RlZmluZSBzY3Rw
X3NiZnJlZShjdGwsIHN0Y2IsIHNiLCBtKSB7IFwKLQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVO
VCgmKHNiKS0+c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAotCVNDVFBfU0FWRV9BVE9NSUNf
REVDUkVNRU5UKCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCi0JaWYgKCgoY3RsKS0+ZG9fbm90
X3JlZl9zdGNiID09IDApICYmIHN0Y2IpIHsgXAotCQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVO
VCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKLQkJU0NUUF9TQVZF
X0FUT01JQ19ERUNSRU1FTlQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRyb2xfbGVuLCBNU0la
RSk7IFwKLQl9IFwKLX0KLQotI2RlZmluZSBzY3RwX3NiYWxsb2Moc3RjYiwgc2IsIG0pIHsgXAot
CWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCi0JYXRv
bWljX2FkZF9pbnQoJihzYiktPnNiX21iY250LCBNU0laRSk7IFwKLQlpZiAoc3RjYikgeyBcCi0J
CWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsg
XAotCQlhdG9taWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1T
SVpFKTsgXAotCX0gXAotfQotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZSBzY3RwX3Vjb3VudF9p
bmNyKHZhbCkgeyBcCi0JdmFsKys7IFwKLX0KLQotI2RlZmluZSBzY3RwX3Vjb3VudF9kZWNyKHZh
bCkgeyBcCi0JaWYgKHZhbCA+IDApIHsgXAotCQl2YWwtLTsgXAotCX0gZWxzZSB7IFwKLQkJdmFs
ID0gMDsgXAotCX0gXAotfQotCi0jZGVmaW5lIHNjdHBfbWJ1Zl9jcnVzaChkYXRhKSBkbyB7IFwK
LQlzdHJ1Y3QgbWJ1ZiAqX207IFwKLQlfbSA9IChkYXRhKTsgXAotCXdoaWxlIChfbSAmJiAoU0NU
UF9CVUZfTEVOKF9tKSA9PSAwKSkgeyBcCi0JCShkYXRhKSAgPSBTQ1RQX0JVRl9ORVhUKF9tKTsg
XAotCQlTQ1RQX0JVRl9ORVhUKF9tKSA9IE5VTEw7IFwKLQkJc2N0cF9tX2ZyZWUoX20pOyBcCi0J
CV9tID0gKGRhdGEpOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIHNjdHBfZmxpZ2h0
X3NpemVfZGVjcmVhc2UodHAxKSBkbyB7IFwKLQlpZiAodHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUg
Pj0gdHAxLT5ib29rX3NpemUpIFwKLQkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgLT0gdHAxLT5i
b29rX3NpemU7IFwKLQllbHNlIFwKLQkJdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUgPSAwOyBcCi19
IHdoaWxlICgwKQotCi0jZGVmaW5lIHNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKSBkbyB7
IFwKLQkodHAxKS0+d2hvVG8tPmZsaWdodF9zaXplICs9ICh0cDEpLT5ib29rX3NpemU7IFwKLX0g
d2hpbGUgKDApCi0KLSNpZmRlZiBTQ1RQX0ZTX1NQRUNfTE9HCi0jZGVmaW5lIHNjdHBfdG90YWxf
ZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSkgZG8geyBcCi0JaWYgKHN0Y2ItPmFzb2MuZnNfaW5k
ZXggPiBTQ1RQX0ZTX1NQRUNfTE9HX1NJWkUpIFwKLQkJc3RjYi0+YXNvYy5mc19pbmRleCA9IDA7
XAotCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0udG90YWxfZmxpZ2h0ID0g
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7IFwKLQlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2Mu
ZnNfaW5kZXhdLnRzbiA9IHRwMS0+cmVjLmRhdGEudHNuOyBcCi0Jc3RjYi0+YXNvYy5mc2xvZ1tz
dGNiLT5hc29jLmZzX2luZGV4XS5ib29rID0gdHAxLT5ib29rX3NpemU7IFwKLQlzdGNiLT5hc29j
LmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLnNlbnQgPSB0cDEtPnNlbnQ7IFwKLQlzdGNiLT5h
c29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmluY3IgPSAwOyBcCi0Jc3RjYi0+YXNvYy5m
c2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS5kZWNyID0gMTsgXAotCXN0Y2ItPmFzb2MuZnNfaW5k
ZXgrKzsgXAotCXRwMS0+d2luZG93X3Byb2JlID0gMDsgXAotCWlmIChzdGNiLT5hc29jLnRvdGFs
X2ZsaWdodCA+PSB0cDEtPmJvb2tfc2l6ZSkgeyBcCi0JCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
IC09IHRwMS0+Ym9va19zaXplOyBcCi0JCWlmIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3Vu
dCA+IDApIFwKLQkJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50LS07IFwKLQl9IGVsc2Ug
eyBcCi0JCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID0gMDsgXAotCQlzdGNiLT5hc29jLnRvdGFs
X2ZsaWdodF9jb3VudCA9IDA7IFwKLQl9IFwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgc2N0cF90
b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKSBkbyB7IFwKLQlpZiAoc3RjYi0+YXNvYy5m
c19pbmRleCA+IFNDVFBfRlNfU1BFQ19MT0dfU0laRSkgXAotCQlzdGNiLT5hc29jLmZzX2luZGV4
ID0gMDtcCi0Jc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50b3RhbF9mbGln
aHQgPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodDsgXAotCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+
YXNvYy5mc19pbmRleF0udHNuID0gdHAxLT5yZWMuZGF0YS50c247IFwKLQlzdGNiLT5hc29jLmZz
bG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmJvb2sgPSB0cDEtPmJvb2tfc2l6ZTsgXAotCXN0Y2It
PmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uc2VudCA9IHRwMS0+c2VudDsgXAotCXN0
Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uaW5jciA9IDE7IFwKLQlzdGNiLT5h
c29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmRlY3IgPSAwOyBcCi0Jc3RjYi0+YXNvYy5m
c19pbmRleCsrOyBcCi0JKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCsrOyBcCi0JKHN0
Y2IpLT5hc29jLnRvdGFsX2ZsaWdodCArPSAodHAxKS0+Ym9va19zaXplOyBcCi19IHdoaWxlICgw
KQotCi0jZWxzZQotCi0jZGVmaW5lIHNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRw
MSkgZG8geyBcCi0JdHAxLT53aW5kb3dfcHJvYmUgPSAwOyBcCi0JaWYgKHN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0ID49IHRwMS0+Ym9va19zaXplKSB7IFwKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGln
aHQgLT0gdHAxLT5ib29rX3NpemU7IFwKLQkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2Nv
dW50ID4gMCkgXAotCQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQtLTsgXAotCX0gZWxz
ZSB7IFwKLQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPSAwOyBcCi0JCXN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0X2NvdW50ID0gMDsgXAotCX0gXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBzY3Rw
X3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCB0cDEpIGRvIHsgXAotCShzdGNiKS0+YXNvYy50
b3RhbF9mbGlnaHRfY291bnQrKzsgXAotCShzdGNiKS0+YXNvYy50b3RhbF9mbGlnaHQgKz0gKHRw
MSktPmJvb2tfc2l6ZTsgXAotfSB3aGlsZSAoMCkKLQotI2VuZGlmCi0KLSNkZWZpbmUgU0NUUF9Q
Rl9FTkFCTEVEKF9uZXQpIChfbmV0LT5wZl90aHJlc2hvbGQgPCBfbmV0LT5mYWlsdXJlX3RocmVz
aG9sZCkKLSNkZWZpbmUgU0NUUF9ORVRfSVNfUEYoX25ldCkgKF9uZXQtPnBmX3RocmVzaG9sZCA8
IF9uZXQtPmVycm9yX2NvdW50KQotCi1zdHJ1Y3Qgc2N0cF9uZXRzOwotc3RydWN0IHNjdHBfaW5w
Y2I7Ci1zdHJ1Y3Qgc2N0cF90Y2I7Ci1zdHJ1Y3Qgc2N0cGhkcjsKLQotCi0jaWYgKGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi12b2lkIHNjdHBfY2xvc2Uoc3Ry
dWN0IHNvY2tldCAqc28pOwotI2Vsc2UKLWludCBzY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpz
byk7Ci0jZW5kaWYKLWludCBzY3RwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
IDwgOTAyMDAwCi12b2lkIHNjdHBfY3RsaW5wdXQgX19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAq
LCB2b2lkICopKTsKLWludCBzY3RwX2N0bG91dHB1dCBfX1AoKHN0cnVjdCBzb2NrZXQgKiwgc3Ry
dWN0IHNvY2tvcHQgKikpOwotI2lmZGVmIElORVQKLXZvaWQgc2N0cF9pbnB1dF93aXRoX3BvcnQg
X19QKChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQxNl90KSk7Ci12b2lkIHNjdHBfaW5wdXQgX19Q
KChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpKTsKLSNlbmRpZgotdm9pZCBzY3RwX3BhdGhtdHVfYWRqdXN0
bWVudCBfX1AoKHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50MTZfdCkpOwotI2Vsc2UKLXZvaWQgc2N0
cF9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICopOwotaW50IHNjdHBfY3Rs
b3V0cHV0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2tvcHQgKik7Ci0jaWZkZWYgSU5FVAot
dm9pZCBzY3RwX2lucHV0X3dpdGhfcG9ydChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQxNl90KTsK
LSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDIw
Ci1pbnQgc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCk7Ci0jZWxzZQotdm9p
ZCBzY3RwX2lucHV0KHN0cnVjdCBtYnVmICosIGludCk7Ci0jZW5kaWYKLSNlbmRpZgotdm9pZCBz
Y3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDE2X3QpOwotI2Vu
ZGlmCi0jZWxzZQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQotdm9pZCBzY3RwX2lucHV0KHBha2hh
bmRsZV90eXBlIGlfcGFrKTsKLSNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0
cF9wYXRobXR1X2FkanVzdG1lbnQoc3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90KTsKLSNlbHNl
Ci12b2lkIHNjdHBfaW5wdXQoc3RydWN0IG1idWYgKiwuLi4pOwotI2VuZGlmCi12b2lkICpzY3Rw
X2N0bGlucHV0KGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKik7Ci1pbnQgc2N0cF9jdGxv
dXRwdXQoaW50LCBzdHJ1Y3Qgc29ja2V0ICosIGludCwgaW50LCBzdHJ1Y3QgbWJ1ZiAqKik7Ci0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkw
MjAwMAotdm9pZCBzY3RwX2RyYWluIF9fUCgodm9pZCkpOwotI2Vsc2UKLXZvaWQgc2N0cF9kcmFp
bih2b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXZvaWQgc2N0cF9p
bml0KHVpbnQxNl90LAotICAgICAgICAgICAgICAgaW50ICgqKSh2b2lkICphZGRyLCB2b2lkICpi
dWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiksCi0gICAg
ICAgICAgICAgICB2b2lkICgqKShjb25zdCBjaGFyICosIC4uLikpOwotI2VsaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKLXZvaWQgc2N0cF9pbml0
IF9fUCgodm9pZCkpOwotI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVmaW5lZChBUFBM
RV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYhZGVmaW5lZChBUFBM
RV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pKQotdm9pZCBzY3RwX2luaXQo
c3RydWN0IHByb3Rvc3cgKnBwLCBzdHJ1Y3QgZG9tYWluICpkcCk7Ci0jZWxzZQotdm9pZCBzY3Rw
X2luaXQodm9pZCk7Ci12b2lkIHNjdHBfbm90aWZ5KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVj
dCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosCi0gICAgdWludDhfdCwgdWludDhfdCwg
dWludDE2X3QsIHVpbnQzMl90KTsKLSNlbmRpZgotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQot
dm9pZCBzY3RwX2ZpbmlzaCh2b2lkKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludCBz
Y3RwX2ZsdXNoKHN0cnVjdCBzb2NrZXQgKiwgaW50KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAyMDAwCi1pbnQgc2N0cF9zaHV0ZG93
biBfX1AoKHN0cnVjdCBzb2NrZXQgKikpOwotI2Vsc2UKLWludCBzY3RwX3NodXRkb3duKHN0cnVj
dCBzb2NrZXQgKik7Ci0jZW5kaWYKLWludCBzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKiwgaW50
LCBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqLAotCWludCwgaW50LCBzdHJ1Y3QgcHJvYyAqKTsK
LS8qIGNhbid0IHVzZSBzY3RwX2Fzc29jX3QgaGVyZSAqLwotaW50IHNjdHBfcGVlbG9mZihzdHJ1
Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrZXQgKiwgaW50LCBjYWRkcl90LCBpbnQgKik7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pCi1pbnQgc2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29j
a2FkZHIgKiopOwotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCi1pbnQgc2N0cF9pbmdldGFkZHIo
c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0jZWxzZQotaW50IHNjdHBfaW5n
ZXRhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1idWYgKik7Ci0jZW5kaWYKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRv
d3NfXykKLWludCBzY3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRy
ICoqKTsKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQotaW50IHNjdHBfcGVlcmFkZHIoc3RydWN0
IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0jZWxzZQotaW50IHNjdHBfcGVlcmFkZHIo
c3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAotI2lmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDcwMDAwMAotaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBz
dHJ1Y3QgdGhyZWFkICopOwotI2Vsc2UKLWludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICos
IHN0cnVjdCB0aHJlYWQgKik7Ci0jZW5kaWYKLSNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCi1p
bnQgc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBpbnQsIFBLVEhSRUFEKTsKLSNlbGlmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIGlu
dCwgc3RydWN0IHByb2MgKik7Ci0jZWxzZQotaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQg
Kiwgc3RydWN0IHByb2MgKik7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotaW50IHNjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2th
ZGRyICoqKTsKLSNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQotaW50IHNjdHBfYWNjZXB0KHN0cnVj
dCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosIGludCAqLCB2b2lkICosIGludCAqKTsKLSNl
bHNlCi1pbnQgc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLSNl
bmRpZgotCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0jZW5kaWYgLyogIV9ORVRJTkVUX1NDVFBf
VkFSX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDg4
Y2M2ZDQwYmNmOWU0NmI0ZGRiZjAyNDg1NjQ3NWZjZTkwODRmNTMuLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwdXRpbC5j
CisrKyAvZGV2L251bGwKQEAgLTEsODI2MyArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykg
MjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVu
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZSBtZXQ6Ci0gKgotICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAotICogICAgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiBiKSBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluCi0gKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBjKSBOZWl0aGVyIHRo
ZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqICAg
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQotICog
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmZGVmIF9fRnJlZUJTRF9fCi0jaW5j
bHVkZSA8c3lzL2NkZWZzLmg+Ci1fX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQv
c2N0cHV0aWwuYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNlbmRp
ZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3BjYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfdmFyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgotI2lmZGVmIElO
RVQ2Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSB8fCBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
I2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
dGltZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+LyogZm9yIHNjdHBfZGVs
aXZlcl9kYXRhKCkgKi8KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIu
aD4KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2Nv
bnN0YW50cy5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVk
KElORVQ2KSB8fCBkZWZpbmVkKElORVQpCi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+Ci0j
ZW5kaWYKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zh
ci5oPgotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jaWZkZWYgSU5FVDYKLSNpbmNsdWRlIDxuZXRp
bmV0L2ljbXA2Lmg+Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0j
ZGVmaW5lIEFQUExFX0ZJTEVfTk8gOAotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19f
KQotI2lmICFkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotI2luY2x1ZGUgImV2ZW50cmFj
ZV9uZXRpbmV0LmgiCi0jaW5jbHVkZSAic2N0cHV0aWwudG1oIiAvKiB0aGlzIGlzIHRoZSBmaWxl
IHRoYXQgd2lsbCBiZSBhdXRvIGdlbmVyYXRlZCAqLwotI2VuZGlmCi0jZWxzZQotI2lmbmRlZiBL
VFJfU0NUUAotI2RlZmluZSBLVFJfU0NUUCBLVFJfU1VCU1lTCi0jZW5kaWYKLSNlbmRpZgotCi1l
eHRlcm4gY29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2NfZnVuY3Rpb25zW107
Ci1leHRlcm4gY29uc3Qgc3RydWN0IHNjdHBfc3NfZnVuY3Rpb25zIHNjdHBfc3NfZnVuY3Rpb25z
W107Ci0KLXZvaWQKLXNjdHBfc2Jsb2coc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIGludCBmcm9tLCBpbnQgaW5jcikKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9n
IHNjdHBfY2xvZzsKLQotCXNjdHBfY2xvZy54LnNiLnN0Y2IgPSBzdGNiOwotCXNjdHBfY2xvZy54
LnNiLnNvX3NiY2MgPSBzYi0+c2JfY2M7Ci0JaWYgKHN0Y2IpCi0JCXNjdHBfY2xvZy54LnNiLnN0
Y2Jfc2JjYyA9IHN0Y2ItPmFzb2Muc2JfY2M7Ci0JZWxzZQotCQlzY3RwX2Nsb2cueC5zYi5zdGNi
X3NiY2MgPSAwOwotCXNjdHBfY2xvZy54LnNiLmluY3IgPSBpbmNyOwotCVNDVFBfQ1RSNihLVFJf
U0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKLQkgICAgIFNDVFBfTE9HX0VWRU5UX1NC
LAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNj
dHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9sb2dfY2xvc2lu
ZyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludDE2X3Qg
bG9jKQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9U
UkFDRV9CVUYpCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0cF9jbG9n
LnguY2xvc2UuaW5wID0gKHZvaWQgKilpbnA7Ci0Jc2N0cF9jbG9nLnguY2xvc2Uuc2N0cF9mbGFn
cyA9IGlucC0+c2N0cF9mbGFnczsKLQlpZiAoc3RjYikgewotCQlzY3RwX2Nsb2cueC5jbG9zZS5z
dGNiID0gKHZvaWQgKilzdGNiOwotCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGF0ZSA9ICh1aW50MTZf
dClzdGNiLT5hc29jLnN0YXRlOwotCX0gZWxzZSB7Ci0JCXNjdHBfY2xvZy54LmNsb3NlLnN0Y2Ig
PSAwOwotCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGF0ZSA9IDA7Ci0JfQotCXNjdHBfY2xvZy54LmNs
b3NlLmxvYyA9IGxvYzsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0l
eC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9DTE9TRSwKLQkgICAgIDAsCi0JICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBz
Y3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2Vu
ZGlmCi19Ci0KLXZvaWQKLXJ0b19sb2dnaW5nKHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGZy
b20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RS
QUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQltZW1zZXQoJnNj
dHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBfY2xvZykpOwotCXNjdHBfY2xvZy54LnJ0by5uZXQgPSAo
dm9pZCAqKSBuZXQ7Ci0Jc2N0cF9jbG9nLngucnRvLnJ0dCA9IG5ldC0+cnR0IC8gMTAwMDsKLQlT
Q1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQ
X0xPR19FVkVOVF9SVFQsCi0JICAgICBmcm9tLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cx
LAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5s
b2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKLSNlbmRpZgotfQotCi12b2lkCi1z
Y3RwX2xvZ19zdHJtX2RlbF9hbHQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCB0c24s
IHVpbnQxNl90IHNzZXEsIHVpbnQxNl90IHN0cmVhbSwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qg
c2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC5zdHJsb2cuc3RjYiA9IHN0
Y2I7Ci0Jc2N0cF9jbG9nLnguc3RybG9nLm5fdHNuID0gdHNuOwotCXNjdHBfY2xvZy54LnN0cmxv
Zy5uX3NzZXEgPSBzc2VxOwotCXNjdHBfY2xvZy54LnN0cmxvZy5lX3RzbiA9IDA7Ci0Jc2N0cF9j
bG9nLnguc3RybG9nLmVfc3NlcSA9IDA7Ci0Jc2N0cF9jbG9nLnguc3RybG9nLnN0cm0gPSBzdHJl
YW07Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAotCSAg
ICAgU0NUUF9MT0dfRVZFTlRfU1RSTSwKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0K
LXZvaWQKLXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFj
dGlvbikKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxf
VFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCXNjdHBfY2xv
Zy54Lm5hZ2xlLnN0Y2IgPSAodm9pZCAqKXN0Y2I7Ci0Jc2N0cF9jbG9nLngubmFnbGUudG90YWxf
ZmxpZ2h0ID0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7Ci0Jc2N0cF9jbG9nLngubmFnbGUudG90
YWxfaW5fcXVldWUgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwotCXNjdHBf
Y2xvZy54Lm5hZ2xlLmNvdW50X2luX3F1ZXVlID0gc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1
ZXVlOwotCXNjdHBfY2xvZy54Lm5hZ2xlLmNvdW50X2luX2ZsaWdodCA9IHN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0X2NvdW50OwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4
LSV4LSV4IiwKLQkgICAgIFNDVFBfTE9HX0VWRU5UX05BR0xFLAotCSAgICAgYWN0aW9uLAotCSAg
ICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAot
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0
KTsKLSNlbmRpZgotfQotCi12b2lkCi1zY3RwX2xvZ19zYWNrKHVpbnQzMl90IG9sZF9jdW1hY2ss
IHVpbnQzMl90IGN1bWFjaywgdWludDMyX3QgdHNuLCB1aW50MTZfdCBnYXBzLCB1aW50MTZfdCBk
dXBzLCBpbnQgZnJvbSkKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFND
VFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQot
CXNjdHBfY2xvZy54LnNhY2suY3VtYWNrID0gY3VtYWNrOwotCXNjdHBfY2xvZy54LnNhY2sub2xk
Y3VtYWNrID0gb2xkX2N1bWFjazsKLQlzY3RwX2Nsb2cueC5zYWNrLnRzbiA9IHRzbjsKLQlzY3Rw
X2Nsb2cueC5zYWNrLm51bUdhcHMgPSBnYXBzOwotCXNjdHBfY2xvZy54LnNhY2subnVtRHVwcyA9
IGR1cHM7Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAot
CSAgICAgU0NUUF9MT0dfRVZFTlRfU0FDSywKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19
Ci0KLXZvaWQKLXNjdHBfbG9nX21hcCh1aW50MzJfdCBtYXAsIHVpbnQzMl90IGN1bSwgdWludDMy
X3QgaGlnaCwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5l
ZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7
Ci0KLQltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBfY2xvZykpOwotCXNjdHBfY2xv
Zy54Lm1hcC5iYXNlID0gbWFwOwotCXNjdHBfY2xvZy54Lm1hcC5jdW0gPSBjdW07Ci0Jc2N0cF9j
bG9nLngubWFwLmhpZ2ggPSBoaWdoOwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRd
OiV4LSV4LSV4LSV4IiwKLQkgICAgIFNDVFBfTE9HX0VWRU5UX01BUCwKLQkgICAgIGZyb20sCi0J
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIs
Ci0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzQpOwotI2VuZGlmCi19Ci0KLXZvaWQKLXNjdHBfbG9nX2ZyKHVpbnQzMl90IGJpZ2dlc3RfdHNu
LCB1aW50MzJfdCBiaWdnZXN0X25ld190c24sIHVpbnQzMl90IHRzbiwgaW50IGZyb20pCi17Ci0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikK
LQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQltZW1zZXQoJnNjdHBfY2xvZywg
MCwgc2l6ZW9mKHNjdHBfY2xvZykpOwotCXNjdHBfY2xvZy54LmZyLmxhcmdlc3RfdHNuID0gYmln
Z2VzdF90c247Ci0Jc2N0cF9jbG9nLnguZnIubGFyZ2VzdF9uZXdfdHNuID0gYmlnZ2VzdF9uZXdf
dHNuOwotCXNjdHBfY2xvZy54LmZyLnRzbiA9IHRzbjsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJT
Q1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9GUiwKLQkgICAg
IGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLSNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORwotdm9p
ZAotc2N0cF9sb2dfbWIoc3RydWN0IG1idWYgKm0sIGludCBmcm9tKQotewotI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0Jc3RydWN0IHNj
dHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0cF9jbG9nLngubWIubXAgPSBtOwotCXNjdHBf
Y2xvZy54Lm1iLm1idWZfZmxhZ3MgPSAodWludDhfdCkoU0NUUF9CVUZfR0VUX0ZMQUdTKG0pKTsK
LQlzY3RwX2Nsb2cueC5tYi5zaXplID0gKHVpbnQxNl90KShTQ1RQX0JVRl9MRU4obSkpOwotCXNj
dHBfY2xvZy54Lm1iLmRhdGEgPSBTQ1RQX0JVRl9BVChtLCAwKTsKLQlpZiAoU0NUUF9CVUZfSVNf
RVhURU5ERUQobSkpIHsKLQkJc2N0cF9jbG9nLngubWIuZXh0ID0gU0NUUF9CVUZfRVhURU5EX0JB
U0UobSk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCS8qIEFQUExFIGRvZXMgbm90IHVzZSBh
IHJlZl9jbnQsIGJ1dCBhIGZvcndhcmQvYmFja3dhcmQgcmVmIHF1ZXVlICovCi0jZWxzZQotCQlz
Y3RwX2Nsb2cueC5tYi5yZWZjbnQgPSAodWludDhfdCkoU0NUUF9CVUZfRVhURU5EX1JFRkNOVCht
KSk7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQlzY3RwX2Nsb2cueC5tYi5leHQgPSAwOwotCQlzY3Rw
X2Nsb2cueC5tYi5yZWZjbnQgPSAwOwotCX0KLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVk
WyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9NQlVGLAotCSAgICAgZnJv
bSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9sb2dfbWJjKHN0cnVjdCBtYnVmICpt
LCBpbnQgZnJvbSkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbWF0OwotCi0JZm9yIChtYXQgPSBtOyBtYXQ7
IG1hdCA9IFNDVFBfQlVGX05FWFQobWF0KSkgewotCQlzY3RwX2xvZ19tYihtYXQsIGZyb20pOwot
CX0KLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwX2xvZ19zdHJtX2RlbChzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbCwgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnBvc2Noaywg
aW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xP
Q0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlpZiAo
Y29udHJvbCA9PSBOVUxMKSB7Ci0JCVNDVFBfUFJJTlRGKCJHYWsgbG9nIG9mIE5VTEw/XG4iKTsK
LQkJcmV0dXJuOwotCX0KLQlzY3RwX2Nsb2cueC5zdHJsb2cuc3RjYiA9IGNvbnRyb2wtPnN0Y2I7
Ci0Jc2N0cF9jbG9nLnguc3RybG9nLm5fdHNuID0gY29udHJvbC0+c2luZm9fdHNuOwotCXNjdHBf
Y2xvZy54LnN0cmxvZy5uX3NzZXEgPSAodWludDE2X3QpY29udHJvbC0+bWlkOwotCXNjdHBfY2xv
Zy54LnN0cmxvZy5zdHJtID0gY29udHJvbC0+c2luZm9fc3RyZWFtOwotCWlmIChwb3NjaGsgIT0g
TlVMTCkgewotCQlzY3RwX2Nsb2cueC5zdHJsb2cuZV90c24gPSBwb3NjaGstPnNpbmZvX3RzbjsK
LQkJc2N0cF9jbG9nLnguc3RybG9nLmVfc3NlcSA9ICh1aW50MTZfdClwb3NjaGstPm1pZDsKLQl9
IGVsc2UgewotCQlzY3RwX2Nsb2cueC5zdHJsb2cuZV90c24gPSAwOwotCQlzY3RwX2Nsb2cueC5z
dHJsb2cuZV9zc2VxID0gMDsKLQl9Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06
JXgtJXgtJXgtJXgiLAotCSAgICAgU0NUUF9MT0dfRVZFTlRfU1RSTSwKLQkgICAgIGZyb20sCi0J
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIs
Ci0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzQpOwotI2VuZGlmCi19Ci0KLXZvaWQKLXNjdHBfbG9nX2N3bmQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBhdWdtZW50LCB1aW50OF90IGZyb20pCi17
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JV
RikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC5jd25k
Lm5ldCA9IG5ldDsKLQlpZiAoc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudCA+IDI1NSkKLQkJc2N0
cF9jbG9nLnguY3duZC5jbnRfaW5fc2VuZCA9IDI1NTsKLQllbHNlCi0JCXNjdHBfY2xvZy54LmN3
bmQuY250X2luX3NlbmQgPSBzdGNiLT5hc29jLnNlbmRfcXVldWVfY250OwotCWlmIChzdGNiLT5h
c29jLnN0cmVhbV9xdWV1ZV9jbnQgPiAyNTUpCi0JCXNjdHBfY2xvZy54LmN3bmQuY250X2luX3N0
ciA9IDI1NTsKLQllbHNlCi0JCXNjdHBfY2xvZy54LmN3bmQuY250X2luX3N0ciA9IHN0Y2ItPmFz
b2Muc3RyZWFtX3F1ZXVlX2NudDsKLQotCWlmIChuZXQpIHsKLQkJc2N0cF9jbG9nLnguY3duZC5j
d25kX25ld192YWx1ZSA9IG5ldC0+Y3duZDsKLQkJc2N0cF9jbG9nLnguY3duZC5pbmZsaWdodCA9
IG5ldC0+ZmxpZ2h0X3NpemU7Ci0JCXNjdHBfY2xvZy54LmN3bmQucHNldWRvX2N1bWFjayA9IG5l
dC0+cHNldWRvX2N1bWFjazsKLQkJc2N0cF9jbG9nLnguY3duZC5tZWV0c19wc2V1ZG9fY3VtYWNr
ID0gbmV0LT5uZXdfcHNldWRvX2N1bWFjazsKLQkJc2N0cF9jbG9nLnguY3duZC5uZWVkX25ld19w
c2V1ZG9fY3VtYWNrID0gbmV0LT5maW5kX3BzZXVkb19jdW1hY2s7Ci0JfQotCWlmIChTQ1RQX0NX
TkRMT0dfUFJFU0VORCA9PSBmcm9tKSB7Ci0JCXNjdHBfY2xvZy54LmN3bmQubWVldHNfcHNldWRv
X2N1bWFjayA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKLQl9Ci0Jc2N0cF9jbG9nLnguY3duZC5j
d25kX2F1Z21lbnQgPSBhdWdtZW50OwotCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRd
OiV4LSV4LSV4LSV4IiwKLQkgICAgIFNDVFBfTE9HX0VWRU5UX0NXTkQsCi0JICAgICBmcm9tLAot
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cy
LAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5s
b2c0KTsKLSNlbmRpZgotfQotCi0jaWZuZGVmIF9fQVBQTEVfXwotdm9pZAotc2N0cF9sb2dfbG9j
ayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3Qg
ZnJvbSkKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxf
VFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCW1lbXNldCgm
c2N0cF9jbG9nLCAwLCBzaXplb2Yoc2N0cF9jbG9nKSk7Ci0JaWYgKGlucCkgewotCQlzY3RwX2Ns
b2cueC5sb2NrLnNvY2sgPSAodm9pZCAqKSBpbnAtPnNjdHBfc29ja2V0OwotCi0JfSBlbHNlIHsK
LQkJc2N0cF9jbG9nLngubG9jay5zb2NrID0gKHZvaWQgKikgTlVMTDsKLQl9Ci0Jc2N0cF9jbG9n
LngubG9jay5pbnAgPSAodm9pZCAqKSBpbnA7Ci0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMzAwMCkgfHwgKGRlZmluZWQoX19BUFBMRV9fKSkKLQlp
ZiAoc3RjYikgewotCQlzY3RwX2Nsb2cueC5sb2NrLnRjYl9sb2NrID0gbXR4X293bmVkKCZzdGNi
LT50Y2JfbXR4KTsKLQl9IGVsc2UgewotCQlzY3RwX2Nsb2cueC5sb2NrLnRjYl9sb2NrID0gU0NU
UF9MT0NLX1VOS05PV047Ci0JfQotCWlmIChpbnApIHsKLQkJc2N0cF9jbG9nLngubG9jay5pbnBf
bG9jayA9IG10eF9vd25lZCgmaW5wLT5pbnBfbXR4KTsKLQkJc2N0cF9jbG9nLngubG9jay5jcmVh
dGVfbG9jayA9IG10eF9vd25lZCgmaW5wLT5pbnBfY3JlYXRlX210eCk7Ci0JfSBlbHNlIHsKLQkJ
c2N0cF9jbG9nLngubG9jay5pbnBfbG9jayA9IFNDVFBfTE9DS19VTktOT1dOOwotCQlzY3RwX2Ns
b2cueC5sb2NrLmNyZWF0ZV9sb2NrID0gU0NUUF9MT0NLX1VOS05PV047Ci0JfQotI2lmIChkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA2MDIwMDApCi0Jc2N0cF9j
bG9nLngubG9jay5pbmZvX2xvY2sgPSBtdHhfb3duZWQoJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9t
dHgpKTsKLSNlbHNlCi0Jc2N0cF9jbG9nLngubG9jay5pbmZvX2xvY2sgPSByd193b3duZWQoJlND
VFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKTsKLSNlbmRpZgotCWlmIChpbnAgJiYgKGlucC0+c2N0
cF9zb2NrZXQpKSB7Ci0JCXNjdHBfY2xvZy54LmxvY2suc29ja19sb2NrID0gbXR4X293bmVkKCYo
aW5wLT5zY3RwX3NvY2tldC0+c29fcmN2LnNiX210eCkpOwotCQlzY3RwX2Nsb2cueC5sb2NrLnNv
Y2tyY3ZidWZfbG9jayA9IG10eF9vd25lZCgmKGlucC0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9t
dHgpKTsKLQkJc2N0cF9jbG9nLngubG9jay5zb2Nrc25kYnVmX2xvY2sgPSBtdHhfb3duZWQoJihp
bnAtPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfbXR4KSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF9jbG9n
LngubG9jay5zb2NrX2xvY2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQkJc2N0cF9jbG9nLngubG9j
ay5zb2NrcmN2YnVmX2xvY2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQkJc2N0cF9jbG9nLngubG9j
ay5zb2Nrc25kYnVmX2xvY2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKLQl9Ci0jZW5kaWYKLQlTQ1RQ
X0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xP
R19MT0NLX0VWRU5ULAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwK
LQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
MywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12
b2lkCi1zY3RwX2xvZ19tYXhidXJzdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwgaW50IGVycm9yLCBpbnQgYnVyc3QsIHVpbnQ4X3QgZnJvbSkKLXsKLSNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0
cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKLQotCW1lbXNldCgmc2N0cF9jbG9nLCAwLCBz
aXplb2Yoc2N0cF9jbG9nKSk7Ci0Jc2N0cF9jbG9nLnguY3duZC5uZXQgPSBuZXQ7Ci0Jc2N0cF9j
bG9nLnguY3duZC5jd25kX25ld192YWx1ZSA9IGVycm9yOwotCXNjdHBfY2xvZy54LmN3bmQuaW5m
bGlnaHQgPSBuZXQtPmZsaWdodF9zaXplOwotCXNjdHBfY2xvZy54LmN3bmQuY3duZF9hdWdtZW50
ID0gYnVyc3Q7Ci0JaWYgKHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQgPiAyNTUpCi0JCXNjdHBf
Y2xvZy54LmN3bmQuY250X2luX3NlbmQgPSAyNTU7Ci0JZWxzZQotCQlzY3RwX2Nsb2cueC5jd25k
LmNudF9pbl9zZW5kID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKLQlpZiAoc3RjYi0+YXNv
Yy5zdHJlYW1fcXVldWVfY250ID4gMjU1KQotCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIg
PSAyNTU7Ci0JZWxzZQotCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSBzdGNiLT5hc29j
LnN0cmVhbV9xdWV1ZV9jbnQ7Ci0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgt
JXgtJXgtJXgiLAotCSAgICAgU0NUUF9MT0dfRVZFTlRfTUFYQlVSU1QsCi0JICAgICBmcm9tLAot
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cy
LAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAotCSAgICAgc2N0cF9jbG9nLngubWlzYy5s
b2c0KTsKLSNlbmRpZgotfQotCi12b2lkCi1zY3RwX2xvZ19yd25kKHVpbnQ4X3QgZnJvbSwgdWlu
dDMyX3QgcGVlcnNfcnduZCwgdWludDMyX3Qgc25kX3NpemUsIHVpbnQzMl90IG92ZXJoZWFkKQot
ewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9C
VUYpCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOwotCi0Jc2N0cF9jbG9nLngucndu
ZC5yd25kID0gcGVlcnNfcnduZDsKLQlzY3RwX2Nsb2cueC5yd25kLnNlbmRfc2l6ZSA9IHNuZF9z
aXplOwotCXNjdHBfY2xvZy54LnJ3bmQub3ZlcmhlYWQgPSBvdmVyaGVhZDsKLQlzY3RwX2Nsb2cu
eC5yd25kLm5ld19yd25kID0gMDsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXTol
eC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9SV05ELAotCSAgICAgZnJvbSwKLQkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwK
LQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
NCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9sb2dfcnduZF9zZXQodWludDhfdCBmcm9tLCB1
aW50MzJfdCBwZWVyc19yd25kLCB1aW50MzJfdCBmbGlnaHRfc2l6ZSwgdWludDMyX3Qgb3Zlcmhl
YWQsIHVpbnQzMl90IGFfcnduZHZhbCkKLXsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBk
ZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQotCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBf
Y2xvZzsKLQotCXNjdHBfY2xvZy54LnJ3bmQucnduZCA9IHBlZXJzX3J3bmQ7Ci0Jc2N0cF9jbG9n
LngucnduZC5zZW5kX3NpemUgPSBmbGlnaHRfc2l6ZTsKLQlzY3RwX2Nsb2cueC5yd25kLm92ZXJo
ZWFkID0gb3ZlcmhlYWQ7Ci0Jc2N0cF9jbG9nLngucnduZC5uZXdfcnduZCA9IGFfcnduZHZhbDsK
LQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBT
Q1RQX0xPR19FVkVOVF9SV05ELAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nMSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nMywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotI2lm
ZGVmIFNDVFBfTUJDTlRfTE9HR0lORwotc3RhdGljIHZvaWQKLXNjdHBfbG9nX21iY250KHVpbnQ4
X3QgZnJvbSwgdWludDMyX3QgdG90YWxfb3EsIHVpbnQzMl90IGJvb2ssIHVpbnQzMl90IHRvdGFs
X21iY250X3EsIHVpbnQzMl90IG1iY250KQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0Jc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0
cF9jbG9nOwotCi0Jc2N0cF9jbG9nLngubWJjbnQudG90YWxfcXVldWVfc2l6ZSA9IHRvdGFsX29x
OwotCXNjdHBfY2xvZy54Lm1iY250LnNpemVfY2hhbmdlID0gYm9vazsKLQlzY3RwX2Nsb2cueC5t
YmNudC50b3RhbF9xdWV1ZV9tYl9zaXplID0gdG90YWxfbWJjbnRfcTsKLQlzY3RwX2Nsb2cueC5t
YmNudC5tYmNudF9jaGFuZ2UgPSBtYmNudDsKLQlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVk
WyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xPR19FVkVOVF9NQkNOVCwKLQkgICAgIGZy
b20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNj
LmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzQpOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotdm9pZAotc2N0cF9taXNjX2ludHModWlu
dDhfdCBmcm9tLCB1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBk
KQotewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoU0NUUF9MT0NBTF9UUkFD
RV9CVUYpCi0JU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAot
CSAgICAgU0NUUF9MT0dfTUlTQ19FVkVOVCwKLQkgICAgIGZyb20sCi0JICAgICBhLCBiLCBjLCBk
KTsKLSNlbmRpZgotfQotCi12b2lkCi1zY3RwX3dha2V1cF9sb2coc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50MzJfdCB3YWtlX2NudCwgaW50IGZyb20pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25k
X2xvZyBzY3RwX2Nsb2c7Ci0KLQlzY3RwX2Nsb2cueC53YWtlLnN0Y2IgPSAodm9pZCAqKXN0Y2I7
Ci0Jc2N0cF9jbG9nLngud2FrZS53YWtlX2NudCA9IHdha2VfY250OwotCXNjdHBfY2xvZy54Lndh
a2UuZmxpZ2h0ID0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQ7Ci0Jc2N0cF9jbG9nLngu
d2FrZS5zZW5kX3EgPSBzdGNiLT5hc29jLnNlbmRfcXVldWVfY250OwotCXNjdHBfY2xvZy54Lndh
a2Uuc2VudF9xID0gc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudDsKLQotCWlmIChzdGNiLT5hc29j
LnN0cmVhbV9xdWV1ZV9jbnQgPCAweGZmKQotCQlzY3RwX2Nsb2cueC53YWtlLnN0cmVhbV9xY250
ID0gKHVpbnQ4X3QpIHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudDsKLQllbHNlCi0JCXNjdHBf
Y2xvZy54Lndha2Uuc3RyZWFtX3FjbnQgPSAweGZmOwotCi0JaWYgKHN0Y2ItPmFzb2MuY2h1bmtz
X29uX291dF9xdWV1ZSA8IDB4ZmYpCi0JCXNjdHBfY2xvZy54Lndha2UuY2h1bmtzX29uX29xdWUg
PSAodWludDhfdCkgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlOwotCWVsc2UKLQkJc2N0
cF9jbG9nLngud2FrZS5jaHVua3Nfb25fb3F1ZSA9IDB4ZmY7Ci0KLQlzY3RwX2Nsb2cueC53YWtl
LnNjdHBmbGFncyA9IDA7Ci0JLyogc2V0IGluIHRoZSBkZWZlcmVkIG1vZGUgc3R1ZmYgKi8KLQlp
ZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkK
LQkJc2N0cF9jbG9nLngud2FrZS5zY3RwZmxhZ3MgfD0gMTsKLQlpZiAoc3RjYi0+c2N0cF9lcC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQpCi0JCXNjdHBfY2xvZy54Lndh
a2Uuc2N0cGZsYWdzIHw9IDI7Ci0JaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19XQUtFSU5QVVQpCi0JCXNjdHBfY2xvZy54Lndha2Uuc2N0cGZsYWdzIHw9IDQ7
Ci0JLyogd2hhdCBhYm91dCB0aGUgc2IgKi8KLQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKLQkJ
c3RydWN0IHNvY2tldCAqc28gPSBzdGNiLT5zY3RwX3NvY2tldDsKLQotCQlzY3RwX2Nsb2cueC53
YWtlLnNiZmxhZ3MgPSAodWludDhfdCkoKHNvLT5zb19zbmQuc2JfZmxhZ3MgJiAweDAwZmYpKTsK
LQl9IGVsc2UgewotCQlzY3RwX2Nsb2cueC53YWtlLnNiZmxhZ3MgPSAweGZmOwotCX0KLQlTQ1RQ
X0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQX0xP
R19FVkVOVF9XQUtFLAotCSAgICAgZnJvbSwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwK
LQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
MywKLQkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0
cF9sb2dfYmxvY2sodWludDhfdCBmcm9tLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywg
c2l6ZV90IHNlbmRsZW4pCi17Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChT
Q1RQX0xPQ0FMX1RSQUNFX0JVRikKLQlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7Ci0K
LQlzY3RwX2Nsb2cueC5ibGsub25zYiA9IGFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplOwot
CXNjdHBfY2xvZy54LmJsay5zZW5kX3NlbnRfcWNudCA9ICh1aW50MTZfdCkgKGFzb2MtPnNlbmRf
cXVldWVfY250ICsgYXNvYy0+c2VudF9xdWV1ZV9jbnQpOwotCXNjdHBfY2xvZy54LmJsay5wZWVy
X3J3bmQgPSBhc29jLT5wZWVyc19yd25kOwotCXNjdHBfY2xvZy54LmJsay5zdHJlYW1fcWNudCA9
ICh1aW50MTZfdCkgYXNvYy0+c3RyZWFtX3F1ZXVlX2NudDsKLQlzY3RwX2Nsb2cueC5ibGsuY2h1
bmtzX29uX29xdWUgPSAodWludDE2X3QpIGFzb2MtPmNodW5rc19vbl9vdXRfcXVldWU7Ci0Jc2N0
cF9jbG9nLnguYmxrLmZsaWdodF9zaXplID0gKHVpbnQxNl90KSAoYXNvYy0+dG90YWxfZmxpZ2h0
LzEwMjQpOwotCXNjdHBfY2xvZy54LmJsay5zbmRsZW4gPSAodWludDMyX3Qpc2VuZGxlbjsKLQlT
Q1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCi0JICAgICBTQ1RQ
X0xPR19FVkVOVF9CTE9DSywKLQkgICAgIGZyb20sCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzEsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCi0JICAgICBzY3RwX2Nsb2cueC5taXNj
LmxvZzMsCi0JICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOwotI2VuZGlmCi19Ci0KLWludAot
c2N0cF9maWxsX3N0YXRfbG9nKHZvaWQgKm9wdHZhbCBTQ1RQX1VOVVNFRCwgc2l6ZV90ICpvcHRz
aXplIFNDVFBfVU5VU0VEKQotewotCS8qIE1heSBuZWVkIHRvIGZpeCB0aGlzIGlmIGt0cmR1bXAg
ZG9lcyBub3Qgd29yayAqLwotCXJldHVybiAoMCk7Ci19Ci0KLSNpZmRlZiBTQ1RQX0FVRElUSU5H
X0VOQUJMRUQKLXVpbnQ4X3Qgc2N0cF9hdWRpdF9kYXRhW1NDVFBfQVVESVRfU0laRV1bMl07Ci1z
dGF0aWMgaW50IHNjdHBfYXVkaXRfaW5keCA9IDA7Ci0KLXN0YXRpYwotdm9pZAotc2N0cF9wcmlu
dF9hdWRpdF9yZXBvcnQodm9pZCkKLXsKLQlpbnQgaTsKLQlpbnQgY250OwotCi0JY250ID0gMDsK
LQlmb3IgKGkgPSBzY3RwX2F1ZGl0X2luZHg7IGkgPCBTQ1RQX0FVRElUX1NJWkU7IGkrKykgewot
CQlpZiAoKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGUwKSAmJgotCQkgICAgKHNjdHBfYXVk
aXRfZGF0YVtpXVsxXSA9PSAweDAxKSkgewotCQkJY250ID0gMDsKLQkJCVNDVFBfUFJJTlRGKCJc
biIpOwotCQl9IGVsc2UgaWYgKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGYwKSB7Ci0JCQlj
bnQgPSAwOwotCQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JCX0gZWxzZSBpZiAoKHNjdHBfYXVkaXRf
ZGF0YVtpXVswXSA9PSAweGMwKSAmJgotCQkgICAgKHNjdHBfYXVkaXRfZGF0YVtpXVsxXSA9PSAw
eDAxKSkgewotCQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JCQljbnQgPSAwOwotCQl9Ci0JCVNDVFBf
UFJJTlRGKCIlMi4yeCUyLjJ4ICIsICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzBdLAot
CQkJICAgICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzFdKTsKLQkJY250Kys7Ci0JCWlm
ICgoY250ICUgMTQpID09IDApCi0JCQlTQ1RQX1BSSU5URigiXG4iKTsKLQl9Ci0JZm9yIChpID0g
MDsgaSA8IHNjdHBfYXVkaXRfaW5keDsgaSsrKSB7Ci0JCWlmICgoc2N0cF9hdWRpdF9kYXRhW2ld
WzBdID09IDB4ZTApICYmCi0JCSAgICAoc2N0cF9hdWRpdF9kYXRhW2ldWzFdID09IDB4MDEpKSB7
Ci0JCQljbnQgPSAwOwotCQkJU0NUUF9QUklOVEYoIlxuIik7Ci0JCX0gZWxzZSBpZiAoc2N0cF9h
dWRpdF9kYXRhW2ldWzBdID09IDB4ZjApIHsKLQkJCWNudCA9IDA7Ci0JCQlTQ1RQX1BSSU5URigi
XG4iKTsKLQkJfSBlbHNlIGlmICgoc2N0cF9hdWRpdF9kYXRhW2ldWzBdID09IDB4YzApICYmCi0J
CSAgICAoc2N0cF9hdWRpdF9kYXRhW2ldWzFdID09IDB4MDEpKSB7Ci0JCQlTQ1RQX1BSSU5URigi
XG4iKTsKLQkJCWNudCA9IDA7Ci0JCX0KLQkJU0NUUF9QUklOVEYoIiUyLjJ4JTIuMnggIiwgKHVp
bnQzMl90KSBzY3RwX2F1ZGl0X2RhdGFbaV1bMF0sCi0JCQkgICAgKHVpbnQzMl90KSBzY3RwX2F1
ZGl0X2RhdGFbaV1bMV0pOwotCQljbnQrKzsKLQkJaWYgKChjbnQgJSAxNCkgPT0gMCkKLQkJCVND
VFBfUFJJTlRGKCJcbiIpOwotCX0KLQlTQ1RQX1BSSU5URigiXG4iKTsKLX0KLQotdm9pZAotc2N0
cF9hdWRpdGluZyhpbnQgZnJvbSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKLXsKLQlpbnQgcmVzZW5kX2Nu
dCwgdG90X291dCwgcmVwLCB0b3RfYm9va19jbnQ7Ci0Jc3RydWN0IHNjdHBfbmV0cyAqbG5ldDsK
LQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9h
dWRpdF9pbmR4XVswXSA9IDB4QUE7Ci0Jc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1b
MV0gPSAweDAwMDAwMGZmICYgZnJvbTsKLQlzY3RwX2F1ZGl0X2luZHgrKzsKLQlpZiAoc2N0cF9h
dWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewotCQlzY3RwX2F1ZGl0X2luZHggPSAwOwot
CX0KLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5k
eF1bMF0gPSAweEFGOwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4
MDE7Ci0JCXNjdHBfYXVkaXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBf
QVVESVRfU0laRSkgewotCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0J
fQotCWlmIChzdGNiID09IE5VTEwpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5k
eF1bMF0gPSAweEFGOwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4
MDI7Ci0JCXNjdHBfYXVkaXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBf
QVVESVRfU0laRSkgewotCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXR1cm47Ci0J
fQotCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBMTsKLQlzY3RwX2F1
ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9Ci0JICAgICgweDAwMDAwMGZmICYgc3RjYi0+
YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCXNjdHBfYXVkaXRfaW5keCsrOwotCWlmIChz
Y3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7Ci0JCXNjdHBfYXVkaXRfaW5keCA9
IDA7Ci0JfQotCXJlcCA9IDA7Ci0JdG90X2Jvb2tfY250ID0gMDsKLQlyZXNlbmRfY250ID0gdG90
X291dCA9IDA7Ci0JVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNj
dHBfbmV4dCkgewotCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7Ci0J
CQlyZXNlbmRfY250Kys7Ci0JCX0gZWxzZSBpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9S
RVNFTkQpIHsKLQkJCXRvdF9vdXQgKz0gY2hrLT5ib29rX3NpemU7Ci0JCQl0b3RfYm9va19jbnQr
KzsKLQkJfQotCX0KLQlpZiAocmVzZW5kX2NudCAhPSBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCkgewotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7
Ci0JCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHhBMTsKLQkJc2N0cF9h
dWRpdF9pbmR4Kys7Ci0JCWlmIChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7
Ci0JCQlzY3RwX2F1ZGl0X2luZHggPSAwOwotCQl9Ci0JCVNDVFBfUFJJTlRGKCJyZXNlbmRfY250
OiVkIGFzb2MtdG90OiVkXG4iLAotCQkJICAgIHJlc2VuZF9jbnQsIHN0Y2ItPmFzb2Muc2VudF9x
dWV1ZV9yZXRyYW5fY250KTsKLQkJcmVwID0gMTsKLQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQgPSByZXNlbmRfY250OwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4
XVswXSA9IDB4QTI7Ci0JCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0KLQkJ
ICAgICgweDAwMDAwMGZmICYgc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOwotCQlz
Y3RwX2F1ZGl0X2luZHgrKzsKLQkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJ
WkUpIHsKLQkJCXNjdHBfYXVkaXRfaW5keCA9IDA7Ci0JCX0KLQl9Ci0JaWYgKHRvdF9vdXQgIT0g
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRf
aW5keF1bMF0gPSAweEFGOwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9
IDB4QTI7Ci0JCXNjdHBfYXVkaXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFND
VFBfQVVESVRfU0laRSkgewotCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXAgPSAx
OwotCQlTQ1RQX1BSSU5URigidG90X2ZsdDolZCBhc29jX3RvdDolZFxuIiwgdG90X291dCwKLQkJ
CSAgICAoaW50KXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0KTsKLQkJc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQgPSB0b3Rfb3V0OwotCX0KLQlpZiAodG90X2Jvb2tfY250ICE9IHN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0X2NvdW50KSB7Ci0JCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBd
ID0gMHhBRjsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweEE1Owot
CQlzY3RwX2F1ZGl0X2luZHgrKzsKLQkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElU
X1NJWkUpIHsKLQkJCXNjdHBfYXVkaXRfaW5keCA9IDA7Ci0JCX0KLQkJcmVwID0gMTsKLQkJU0NU
UF9QUklOVEYoInRvdF9mbHRfYm9vazolZFxuIiwgdG90X2Jvb2tfY250KTsKLQotCQlzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodF9jb3VudCA9IHRvdF9ib29rX2NudDsKLQl9Ci0JdG90X291dCA9IDA7
Ci0JVEFJTFFfRk9SRUFDSChsbmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKLQkJ
dG90X291dCArPSBsbmV0LT5mbGlnaHRfc2l6ZTsKLQl9Ci0JaWYgKHRvdF9vdXQgIT0gc3RjYi0+
YXNvYy50b3RhbF9mbGlnaHQpIHsKLQkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1b
MF0gPSAweEFGOwotCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4QTM7
Ci0JCXNjdHBfYXVkaXRfaW5keCsrOwotCQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVE
SVRfU0laRSkgewotCQkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKLQkJfQotCQlyZXAgPSAxOwotCQlT
Q1RQX1BSSU5URigicmVhbCBmbGlnaHQ6JWQgbmV0IHRvdGFsIHdhcyAlZFxuIiwKLQkJCSAgICBz
dGNiLT5hc29jLnRvdGFsX2ZsaWdodCwgdG90X291dCk7Ci0JCS8qIG5vdyBjb3JyZWN0aXZlIGFj
dGlvbiAqLwotCQlUQUlMUV9GT1JFQUNIKGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4
dCkgewotCi0JCQl0b3Rfb3V0ID0gMDsKLQkJCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNv
Yy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJCQlpZiAoKGNoay0+d2hvVG8gPT0gbG5ldCkg
JiYKLQkJCQkgICAgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSkgewotCQkJCQl0
b3Rfb3V0ICs9IGNoay0+Ym9va19zaXplOwotCQkJCX0KLQkJCX0KLQkJCWlmIChsbmV0LT5mbGln
aHRfc2l6ZSAhPSB0b3Rfb3V0KSB7Ci0JCQkJU0NUUF9QUklOVEYoIm5ldDolcCBmbGlnaHQgd2Fz
ICVkIGNvcnJlY3RlZCB0byAlZFxuIiwKLQkJCQkJICAgICh2b2lkICopbG5ldCwgbG5ldC0+Zmxp
Z2h0X3NpemUsCi0JCQkJCSAgICB0b3Rfb3V0KTsKLQkJCQlsbmV0LT5mbGlnaHRfc2l6ZSA9IHRv
dF9vdXQ7Ci0JCQl9Ci0JCX0KLQl9Ci0JaWYgKHJlcCkgewotCQlzY3RwX3ByaW50X2F1ZGl0X3Jl
cG9ydCgpOwotCX0KLX0KLQotdm9pZAotc2N0cF9hdWRpdF9sb2codWludDhfdCBldiwgdWludDhf
dCBmZCkKLXsKLQotCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gZXY7Ci0J
c2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSBmZDsKLQlzY3RwX2F1ZGl0X2lu
ZHgrKzsKLQlpZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgewotCQlzY3Rw
X2F1ZGl0X2luZHggPSAwOwotCX0KLX0KLQotI2VuZGlmCi0KLS8qCi0gKiBzY3RwX3N0b3BfdGlt
ZXJzX2Zvcl9zaHV0ZG93bigpIHNob3VsZCBiZSBjYWxsZWQKLSAqIHdoZW4gZW50ZXJpbmcgdGhl
IFNIVVRET1dOX1NFTlQgb3IgU0hVVERPV05fQUNLX1NFTlQKLSAqIHN0YXRlIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGFsbCB0aW1lcnMgYXJlIHN0b3BwZWQuCi0gKi8KLXZvaWQKLXNjdHBfc3RvcF90aW1l
cnNfZm9yX3NodXRkb3duKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYzsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0KLQlhc29jID0gJnN0
Y2ItPmFzb2M7Ci0KLQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRhY2tfdGltZXIu
dGltZXIpOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIu
dGltZXIpOwotCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXNjb25mX3RpbWVyLnRp
bWVyKTsKLQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmF1dG9jbG9zZV90aW1lci50
aW1lcik7Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kZWxheWVkX2V2ZW50X3Rp
bWVyLnRpbWVyKTsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkg
ewotCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+cG10dV90aW1lci50aW1lcik7Ci0J
CSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5oYl90aW1lci50aW1lcik7Ci0JfQotfQot
Ci0vKgotICogYSBsaXN0IG9mIHNpemVzIGJhc2VkIG9uIHR5cGljYWwgbXR1J3MsIHVzZWQgb25s
eSBpZiBuZXh0IGhvcCBzaXplIG5vdAotICogcmV0dXJuZWQuCi0gKi8KLXN0YXRpYyB1aW50MzJf
dCBzY3RwX210dV9zaXplc1tdID0gewotCTY4LAotCTI5NiwKLQk1MDgsCi0JNTEyLAotCTU0NCwK
LQk1NzYsCi0JMTAwNiwKLQkxNDkyLAotCTE1MDAsCi0JMTUzNiwKLQkyMDAyLAotCTIwNDgsCi0J
NDM1MiwKLQk0NDY0LAotCTgxNjYsCi0JMTc5MTQsCi0JMzIwMDAsCi0JNjU1MzUKLX07Ci0KLS8q
Ci0gKiBSZXR1cm4gdGhlIGxhcmdlc3QgTVRVIHNtYWxsZXIgdGhhbiB2YWwuIElmIHRoZXJlIGlz
IG5vCi0gKiBlbnRyeSwganVzdCByZXR1cm4gdmFsLgotICovCi11aW50MzJfdAotc2N0cF9nZXRf
cHJldl9tdHUodWludDMyX3QgdmFsKQotewotCXVpbnQzMl90IGk7Ci0KLQlpZiAodmFsIDw9IHNj
dHBfbXR1X3NpemVzWzBdKSB7Ci0JCXJldHVybiAodmFsKTsKLQl9Ci0JZm9yIChpID0gMTsgaSA8
IChzaXplb2Yoc2N0cF9tdHVfc2l6ZXMpIC8gc2l6ZW9mKHVpbnQzMl90KSk7IGkrKykgewotCQlp
ZiAodmFsIDw9IHNjdHBfbXR1X3NpemVzW2ldKSB7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1
cm4gKHNjdHBfbXR1X3NpemVzW2kgLSAxXSk7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gdGhlIHNtYWxs
ZXN0IE1UVSBsYXJnZXIgdGhhbiB2YWwuIElmIHRoZXJlIGlzIG5vCi0gKiBlbnRyeSwganVzdCBy
ZXR1cm4gdmFsLgotICovCi11aW50MzJfdAotc2N0cF9nZXRfbmV4dF9tdHUodWludDMyX3QgdmFs
KQotewotCS8qIHNlbGVjdCBhbm90aGVyIE1UVSB0aGF0IGlzIGp1c3QgYmlnZ2VyIHRoYW4gdGhp
cyBvbmUgKi8KLQl1aW50MzJfdCBpOwotCi0JZm9yIChpID0gMDsgaSA8IChzaXplb2Yoc2N0cF9t
dHVfc2l6ZXMpIC8gc2l6ZW9mKHVpbnQzMl90KSk7IGkrKykgewotCQlpZiAodmFsIDwgc2N0cF9t
dHVfc2l6ZXNbaV0pIHsKLQkJCXJldHVybiAoc2N0cF9tdHVfc2l6ZXNbaV0pOwotCQl9Ci0JfQot
CXJldHVybiAodmFsKTsKLX0KLQotdm9pZAotc2N0cF9maWxsX3JhbmRvbV9zdG9yZShzdHJ1Y3Qg
c2N0cF9wY2IgKm0pCi17Ci0JLyoKLQkgKiBIZXJlIHdlIHVzZSB0aGUgTUQ1L1NIQS0xIHRvIGhh
c2ggd2l0aCBvdXIgZ29vZCByYW5kb21OdW1iZXJzIGFuZAotCSAqIG91ciBjb3VudGVyLiBUaGUg
cmVzdWx0IGJlY29tZXMgb3VyIGdvb2QgcmFuZG9tIG51bWJlcnMgYW5kIHdlCi0JICogdGhlbiBz
ZXR1cCB0byBnaXZlIHRoZXNlIG91dC4gTm90ZSB0aGF0IHdlIGRvIG5vIGxvY2tpbmcgdG8KLQkg
KiBwcm90ZWN0IHRoaXMuIFRoaXMgaXMgb2ssIHNpbmNlIGlmIGNvbXBldGluZyBmb2xrcyBjYWxs
IHRoaXMgd2UKLQkgKiB3aWxsIGdldCBtb3JlIGdvYmJsZWQgZ29vayBpbiB0aGUgcmFuZG9tIHN0
b3JlIHdoaWNoIGlzIHdoYXQgd2UKLQkgKiB3YW50LiBUaGVyZSBpcyBhIGRhbmdlciB0aGF0IHR3
byBndXlzIHdpbGwgdXNlIHRoZSBzYW1lIHJhbmRvbQotCSAqIG51bWJlcnMsIGJ1dCB0aGF0cyBv
ayB0b28gc2luY2UgdGhhdCBpcyByYW5kb20gYXMgd2VsbCA6LT4KLQkgKi8KLQltLT5zdG9yZV9h
dCA9IDA7Ci0JKHZvaWQpc2N0cF9obWFjKFNDVFBfSE1BQywgKHVpbnQ4X3QgKiltLT5yYW5kb21f
bnVtYmVycywKLQkgICAgc2l6ZW9mKG0tPnJhbmRvbV9udW1iZXJzKSwgKHVpbnQ4X3QgKikmbS0+
cmFuZG9tX2NvdW50ZXIsCi0JICAgIHNpemVvZihtLT5yYW5kb21fY291bnRlciksICh1aW50OF90
ICopbS0+cmFuZG9tX3N0b3JlKTsKLQltLT5yYW5kb21fY291bnRlcisrOwotfQotCi11aW50MzJf
dAotc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oc3RydWN0IHNjdHBfcGNiICppbnApCi17Ci0JLyoK
LQkgKiBBIHRydWUgaW1wbGVtZW50YXRpb24gc2hvdWxkIHVzZSByYW5kb20gc2VsZWN0aW9uIHBy
b2Nlc3MgdG8gZ2V0Ci0JICogdGhlIGluaXRpYWwgc3RyZWFtIHNlcXVlbmNlIG51bWJlciwgdXNp
bmcgUkZDMTc1MCBhcyBhIGdvb2QKLQkgKiBndWlkZWxpbmUKLQkgKi8KLQl1aW50MzJfdCB4LCAq
eHA7Ci0JdWludDhfdCAqcDsKLQlpbnQgc3RvcmVfYXQsIG5ld19zdG9yZTsKLQotCWlmIChpbnAt
PmluaXRpYWxfc2VxdWVuY2VfZGVidWcgIT0gMCkgewotCQl1aW50MzJfdCByZXQ7Ci0KLQkJcmV0
ID0gaW5wLT5pbml0aWFsX3NlcXVlbmNlX2RlYnVnOwotCQlpbnAtPmluaXRpYWxfc2VxdWVuY2Vf
ZGVidWcrKzsKLQkJcmV0dXJuIChyZXQpOwotCX0KLSByZXRyeToKLQlzdG9yZV9hdCA9IGlucC0+
c3RvcmVfYXQ7Ci0JbmV3X3N0b3JlID0gc3RvcmVfYXQgKyBzaXplb2YodWludDMyX3QpOwotCWlm
IChuZXdfc3RvcmUgPj0gKFNDVFBfU0lHTkFUVVJFX1NJWkUtMykpIHsKLQkJbmV3X3N0b3JlID0g
MDsKLQl9Ci0JaWYgKCFhdG9taWNfY21wc2V0X2ludCgmaW5wLT5zdG9yZV9hdCwgc3RvcmVfYXQs
IG5ld19zdG9yZSkpIHsKLQkJZ290byByZXRyeTsKLQl9Ci0JaWYgKG5ld19zdG9yZSA9PSAwKSB7
Ci0JCS8qIFJlZmlsbCB0aGUgcmFuZG9tIHN0b3JlICovCi0JCXNjdHBfZmlsbF9yYW5kb21fc3Rv
cmUoaW5wKTsKLQl9Ci0JcCA9ICZpbnAtPnJhbmRvbV9zdG9yZVtzdG9yZV9hdF07Ci0JeHAgPSAo
dWludDMyX3QgKilwOwotCXggPSAqeHA7Ci0JcmV0dXJuICh4KTsKLX0KLQotdWludDMyX3QKLXNj
dHBfc2VsZWN0X2FfdGFnKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1
aW50MTZfdCBycG9ydCwgaW50IGNoZWNrKQotewotCXVpbnQzMl90IHg7Ci0Jc3RydWN0IHRpbWV2
YWwgbm93OwotCi0JaWYgKGNoZWNrKSB7Ci0JCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZu
b3cpOwotCX0KLQlmb3IgKDs7KSB7Ci0JCXggPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5w
LT5zY3RwX2VwKTsKLQkJaWYgKHggPT0gMCkgewotCQkJLyogd2UgbmV2ZXIgdXNlIDAgKi8KLQkJ
CWNvbnRpbnVlOwotCQl9Ci0JCWlmICghY2hlY2sgfHwgc2N0cF9pc192dGFnX2dvb2QoeCwgbHBv
cnQsIHJwb3J0LCAmbm93KSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuICh4KTsKLX0K
LQotaW50MzJfdAotc2N0cF9tYXBfYXNzb2Nfc3RhdGUoaW50IGtlcm5lbF9zdGF0ZSkKLXsKLQlp
bnQzMl90IHVzZXJfc3RhdGU7Ci0KLQlpZiAoa2VybmVsX3N0YXRlICYgU0NUUF9TVEFURV9XQVNf
QUJPUlRFRCkgewotCQl1c2VyX3N0YXRlID0gU0NUUF9DTE9TRUQ7Ci0JfSBlbHNlIGlmIChrZXJu
ZWxfc3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKLQkJdXNlcl9zdGF0ZSA9
IFNDVFBfU0hVVERPV05fUEVORElORzsKLQl9IGVsc2UgewotCQlzd2l0Y2ggKGtlcm5lbF9zdGF0
ZSAmIFNDVFBfU1RBVEVfTUFTSykgewotCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6Ci0JCQl1c2Vy
X3N0YXRlID0gU0NUUF9DTE9TRUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNF
OgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9T
VEFURV9DT09LSUVfV0FJVDoKLQkJCXVzZXJfc3RhdGUgPSBTQ1RQX0NPT0tJRV9XQUlUOwotCQkJ
YnJlYWs7Ci0JCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgotCQkJdXNlcl9zdGF0ZSA9
IFNDVFBfQ09PS0lFX0VDSE9FRDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfT1BFTjoK
LQkJCXVzZXJfc3RhdGUgPSBTQ1RQX0VTVEFCTElTSEVEOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NU
UF9TVEFURV9TSFVURE9XTl9TRU5UOgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fU0VO
VDsKLQkJCWJyZWFrOwotCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6Ci0JCQl1
c2VyX3N0YXRlID0gU0NUUF9TSFVURE9XTl9SRUNFSVZFRDsKLQkJCWJyZWFrOwotCQljYXNlIFND
VFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQ6Ci0JCQl1c2VyX3N0YXRlID0gU0NUUF9TSFVURE9X
Tl9BQ0tfU0VOVDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdXNlcl9zdGF0ZSA9IFNDVFBf
Q0xPU0VEOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JcmV0dXJuICh1c2VyX3N0YXRlKTsKLX0KLQot
aW50Ci1zY3RwX2luaXRfYXNvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCi0gICAgICAgICAgICAgICB1aW50MzJfdCBvdmVycmlkZV90YWcsIHVpbnQzMl90
IHZyZl9pZCwgdWludDE2X3Qgb19zdHJtcykKLXsKLQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsKLQkvKgotCSAqIEFueXRoaW5nIHNldCB0byB6ZXJvIGlzIHRha2VuIGNhcmUgb2YgYnkg
dGhlIGFsbG9jYXRpb24gcm91dGluZSdzCi0JICogYnplcm8KLQkgKi8KLQotCS8qCi0JICogVXAg
ZnJvbnQgc2VsZWN0IHdoYXQgc2NvcGluZyB0byBhcHBseSBvbiBhZGRyZXNzZXMgSSB0ZWxsIG15
IHBlZXIKLQkgKiBOb3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2UgcmlnaHQgbm93LCB3ZSB3
aWxsIG5lZWQgdG8gY29tZSB1cAotCSAqIHdpdGggYSB3YXkgdG8gc2V0IHRoZW0uIFdlIG1heSBu
ZWVkIHRvIHBhc3MgdGhlbSB0aHJvdWdoIGZyb20gdGhlCi0JICogY2FsbGVyIGluIHRoZSBzY3Rw
X2Fsb2NfYXNzb2MoKSBmdW5jdGlvbi4KLQkgKi8KLQlpbnQgaTsKLSNpZiBkZWZpbmVkKFNDVFBf
REVUQUlMRURfU1RSX1NUQVRTKQotCWludCBqOwotI2VuZGlmCi0KLQlhc29jID0gJnN0Y2ItPmFz
b2M7Ci0JLyogaW5pdCBhbGwgdmFyaWFibGVzIHRvIGEga25vd24gdmFsdWUuICovCi0JU0NUUF9T
RVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfSU5VU0UpOwotCWFzb2MtPm1heF9idXJz
dCA9IGlucC0+c2N0cF9lcC5tYXhfYnVyc3Q7Ci0JYXNvYy0+ZnJfbWF4X2J1cnN0ID0gaW5wLT5z
Y3RwX2VwLmZyX21heF9idXJzdDsKLQlhc29jLT5oZWFydF9iZWF0X2RlbGF5ID0gVElDS1NfVE9f
TVNFQyhpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRd
KTsKLQlhc29jLT5jb29raWVfbGlmZSA9IGlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmU7Ci0J
YXNvYy0+c2N0cF9jbXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7Ci0JYXNvYy0+ZWNu
X3N1cHBvcnRlZCA9IGlucC0+ZWNuX3N1cHBvcnRlZDsKLQlhc29jLT5wcnNjdHBfc3VwcG9ydGVk
ID0gaW5wLT5wcnNjdHBfc3VwcG9ydGVkOwotCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+
aWRhdGFfc3VwcG9ydGVkOwotCWFzb2MtPmF1dGhfc3VwcG9ydGVkID0gaW5wLT5hdXRoX3N1cHBv
cnRlZDsKLQlhc29jLT5hc2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOwot
CWFzb2MtPnJlY29uZmlnX3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOwotCWFz
b2MtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7Ci0JYXNvYy0+cGt0
ZHJvcF9zdXBwb3J0ZWQgPSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOwotCWFzb2MtPmlkYXRhX3N1
cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9ydGVkOwotCWFzb2MtPnNjdHBfY210X3BmID0gKHVp
bnQ4X3QpMDsKLQlhc29jLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsK
LQlhc29jLT5zY3RwX2ZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwotCWFzb2MtPmRlZmF1
bHRfZHNjcCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2RzY3A7Ci0JYXNvYy0+bWF4X2N3bmQgPSBp
bnAtPm1heF9jd25kOwotI2lmZGVmIElORVQ2Ci0JaWYgKGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zs
b3dsYWJlbCkgewotCQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCA9IGlucC0+c2N0cF9lcC5kZWZh
dWx0X2Zsb3dsYWJlbDsKLQl9IGVsc2UgewotCQlpZiAoaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFn
cyAmIElONlBfQVVUT0ZMT1dMQUJFTCkgewotCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSBz
Y3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKLQkJCWFzb2MtPmRlZmF1bHRf
Zmxvd2xhYmVsICY9IDB4MDAwZmZmZmY7Ci0JCQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCB8PSAw
eDgwMDAwMDAwOwotCQl9IGVsc2UgewotCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSAwOwot
CQl9Ci0JfQotI2VuZGlmCi0JYXNvYy0+c2Jfc2VuZF9yZXN2ID0gMDsKLQlpZiAob3ZlcnJpZGVf
dGFnKSB7Ci0JCWFzb2MtPm15X3Z0YWcgPSBvdmVycmlkZV90YWc7Ci0JfSBlbHNlIHsKLQkJYXNv
Yy0+bXlfdnRhZyA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9s
cG9ydCwgc3RjYi0+cnBvcnQsICAxKTsKLQl9Ci0JLyogR2V0IHRoZSBub25jZSB0YWdzICovCi0J
YXNvYy0+bXlfdnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9l
cC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIDApOwotCWFzb2MtPnBlZXJfdnRhZ19ub25jZSA9
IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+
cnBvcnQsIDApOwotCWFzb2MtPnZyZl9pZCA9IHZyZl9pZDsKLQotI2lmZGVmIFNDVFBfQVNPQ0xP
R19PRl9UU05TCi0JYXNvYy0+dHNuX2luX2F0ID0gMDsKLQlhc29jLT50c25fb3V0X2F0ID0gMDsK
LQlhc29jLT50c25faW5fd3JhcHBlZCA9IDA7Ci0JYXNvYy0+dHNuX291dF93cmFwcGVkID0gMDsK
LQlhc29jLT5jdW1hY2tfbG9nX2F0ID0gMDsKLQlhc29jLT5jdW1hY2tfbG9nX2F0c250ID0gMDsK
LSNlbmRpZgotI2lmZGVmIFNDVFBfRlNfU1BFQ19MT0cKLQlhc29jLT5mc19pbmRleCA9IDA7Ci0j
ZW5kaWYKLQlhc29jLT5yZWZjbnQgPSAwOwotCWFzb2MtPmFzc29jX3VwX3NlbnQgPSAwOwotCWFz
b2MtPmFzY29uZl9zZXFfb3V0ID0gYXNvYy0+c3RyX3Jlc2V0X3NlcV9vdXQgPSBhc29jLT5pbml0
X3NlcV9udW1iZXIgPSBhc29jLT5zZW5kaW5nX3NlcSA9Ci0JICAgIHNjdHBfc2VsZWN0X2luaXRp
YWxfVFNOKCZpbnAtPnNjdHBfZXApOwotCWFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkID0gYXNv
Yy0+YXNjb25mX3NlcV9vdXQgLSAxOwotCS8qIHdlIGFyZSBvcHRpbWlzaXRpYyBoZXJlICovCi0J
YXNvYy0+cGVlcl9zdXBwb3J0c19uYXQgPSAwOwotCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2Nu
dCA9IDA7Ci0KLQkvKiBmb3IgQ01UICovCi0gICAgICAgIGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5k
X3N0YXJ0ZWQgPSBOVUxMOwotCi0JLyogVGhpcyB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQgKi8K
LQlhc29jLT5sYXN0X2Fja2VkX3NlcSA9IGFzb2MtPmluaXRfc2VxX251bWJlciAtIDE7Ci0JYXNv
Yy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKLQlhc29j
LT5hc2NvbmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7Ci0KLQkvKiBoZXJlIHdlIGFy
ZSBkaWZmZXJlbnQsIHdlIGhvbGQgdGhlIG5leHQgb25lIHdlIGV4cGVjdCAqLwotCWFzb2MtPnN0
cl9yZXNldF9zZXFfaW4gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7Ci0KLQlhc29jLT5pbml0
aWFsX2luaXRfcnRvX21heCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRfcnRvX21heDsKLQlh
c29jLT5pbml0aWFsX3J0byA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKLQotCWFzb2MtPm1h
eF9pbml0X3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9pbml0X3RpbWVzOwotCWFzb2MtPm1heF9z
ZW5kX3RpbWVzID0gaW5wLT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzOwotCWFzb2MtPmRlZl9uZXRf
ZmFpbHVyZSA9IGlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7Ci0JYXNvYy0+ZGVmX25ldF9w
Zl90aHJlc2hvbGQgPSBpbnAtPnNjdHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7Ci0JYXNvYy0+
ZnJlZV9jaHVua19jbnQgPSAwOwotCi0JYXNvYy0+aWFtX2Jsb2NraW5nID0gMDsKLQlhc29jLT5j
b250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7Ci0JYXNvYy0+bG9jYWxfc3RycmVzZXRfc3VwcG9y
dCA9IGlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKLQlhc29jLT5kZWZfc2VuZCA9IGlucC0+
ZGVmX3NlbmQ7Ci0JYXNvYy0+ZGVsYXllZF9hY2sgPSBUSUNLU19UT19NU0VDKGlucC0+c2N0cF9l
cC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1JFQ1ZdKTsKLQlhc29jLT5zYWNrX2ZyZXEg
PSBpbnAtPnNjdHBfZXAuc2N0cF9zYWNrX2ZyZXE7Ci0JYXNvYy0+cHJfc2N0cF9jbnQgPSAwOwot
CWFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKLQotCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgewotCQlhc29jLT5zY29wZS5pcHY2X2FkZHJf
bGVnYWwgPSAxOwotCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpbnApID09IDApIHsKLQkJCWFzb2Mt
PnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlhc29jLT5zY29wZS5p
cHY0X2FkZHJfbGVnYWwgPSAwOwotCQl9Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCQkJ
YXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMDsKLSNlbmRpZgotCX0gZWxzZSB7Ci0JCWFz
b2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQotCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgewot
CQkJYXNvYy0+c2NvcGUuY29ubl9hZGRyX2xlZ2FsID0gMTsKLQkJCWFzb2MtPnNjb3BlLmlwdjRf
YWRkcl9sZWdhbCA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlhc29jLT5zY29wZS5jb25uX2FkZHJfbGVn
YWwgPSAwOwotCQkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKLQkJfQotI2Vsc2UK
LQkJYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKLSNlbmRpZgotCX0KLQotCWFzb2Mt
Pm15X3J3bmQgPSBtYXgoU0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCksIFNDVFBf
TUlOSU1BTF9SV05EKTsKLQlhc29jLT5wZWVyc19yd25kID0gU0NUUF9TQl9MSU1JVF9SQ1YoaW5w
LT5zY3RwX3NvY2tldCk7Ci0KLQlhc29jLT5zbWFsbGVzdF9tdHUgPSBpbnAtPnNjdHBfZnJhZ19w
b2ludDsKLQlhc29jLT5taW5ydG8gPSBpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG87Ci0JYXNvYy0+
bWF4cnRvID0gaW5wLT5zY3RwX2VwLnNjdHBfbWF4cnRvOwotCi0JYXNvYy0+c3RyZWFtX2xvY2tl
ZF9vbiA9IDA7Ci0JYXNvYy0+ZWNuX2VjaG9fY250X29ucSA9IDA7Ci0JYXNvYy0+c3RyZWFtX2xv
Y2tlZCA9IDA7Ci0KLQlhc29jLT5zZW5kX3NhY2sgPSAxOwotCi0JTElTVF9JTklUKCZhc29jLT5z
Y3RwX3Jlc3RyaWN0ZWRfYWRkcnMpOwotCi0JVEFJTFFfSU5JVCgmYXNvYy0+bmV0cyk7Ci0JVEFJ
TFFfSU5JVCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+
YXNjb25mX2Fja19zZW50KTsKLQkvKiBTZXR1cCB0byBmaWxsIHRoZSBoYiByYW5kb20gY2FjaGUg
YXQgZmlyc3QgSEIgKi8KLQlhc29jLT5oYl9yYW5kb21faWR4ID0gNDsKLQotCWFzb2MtPnNjdHBf
YXV0b2Nsb3NlX3RpY2tzID0gaW5wLT5zY3RwX2VwLmF1dG9fY2xvc2VfdGltZTsKLQotCXN0Y2It
PmFzb2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZSA9IGlucC0+c2N0cF9lcC5zY3RwX2RlZmF1
bHRfY2NfbW9kdWxlOwotCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zID0gc2N0cF9jY19mdW5jdGlv
bnNbaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1bGVdOwotCi0Jc3RjYi0+YXNvYy5z
dHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBpbnAtPnNjdHBfZXAuc2N0cF9kZWZhdWx0X3NzX21v
ZHVsZTsKLQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucyA9IHNjdHBfc3NfZnVuY3Rpb25zW2lucC0+
c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlXTsKLQotCS8qCi0JICogTm93IHRoZSBzdHJl
YW0gcGFyYW1ldGVycywgaGVyZSB3ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIHN0cmVhbXMKLQkg
KiB0aGF0IHdlIHJlcXVlc3QgYnkgZGVmYXVsdC4KLQkgKi8KLQlhc29jLT5zdHJtX3JlYWxvdXRz
aXplID0gYXNvYy0+c3RyZWFtb3V0Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9Ci0JICAg
IG9fc3RybXM7Ci0JU0NUUF9NQUxMT0MoYXNvYy0+c3RybW91dCwgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqLAotCQkgICAgYXNvYy0+c3RyZWFtb3V0Y250ICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0
cmVhbV9vdXQpLAotCQkgICAgU0NUUF9NX1NUUk1PKTsKLQlpZiAoYXNvYy0+c3RybW91dCA9PSBO
VUxMKSB7Ci0JCS8qIGJpZyB0cm91YmxlIG5vIG1lbW9yeSAqLwotCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKLQkJcmV0
dXJuIChFTk9NRU0pOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBp
KyspIHsKLQkJLyoKLQkJICogaW5ib3VuZCBzaWRlIG11c3QgYmUgc2V0IHRvIDB4ZmZmZiwgYWxz
byBOT1RFIHdoZW4gd2UgZ2V0Ci0JCSAqIHRoZSBJTklULUFDSyBiYWNrIChmb3IgSU5JVCBzZW5k
ZXIpIHdlIE1VU1QgcmVkdWNlIHRoZQotCQkgKiBjb3VudCAoc3RyZWFtb3V0Y250KSBidXQgZmly
c3QgY2hlY2sgaWYgd2Ugc2VudCB0byBhbnkgb2YKLQkJICogdGhlIHVwcGVyIHN0cmVhbXMgdGhh
dCB3ZXJlIGRyb3BwZWQgKGlmIHNvbWUgd2VyZSkuIFRob3NlCi0JCSAqIHRoYXQgd2VyZSBkcm9w
cGVkIG11c3QgYmUgbm90aWZpZWQgdG8gdGhlIHVwcGVyIGxheWVyIGFzCi0JCSAqIGZhaWxlZCB0
byBzZW5kLgotCQkgKi8KLQkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsK
LQkJYXNvYy0+c3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOwotCQlUQUlMUV9JTklU
KCZhc29jLT5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKLQkJYXNvYy0+c3RybW91dFtpXS5jaHVua3Nf
b25fcXVldWVzID0gMDsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQotCQlm
b3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykgewotCQkJYXNvYy0+c3Ry
bW91dFtpXS5hYmFuZG9uZWRfc2VudFtqXSA9IDA7Ci0JCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5k
b25lZF91bnNlbnRbal0gPSAwOwotCQl9Ci0jZWxzZQotCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5k
b25lZF9zZW50WzBdID0gMDsKLQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBd
ID0gMDsKLSNlbmRpZgotCQlhc29jLT5zdHJtb3V0W2ldLnNpZCA9IGk7Ci0JCWFzb2MtPnN0cm1v
dXRbaV0ubGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7Ci0JCWFzb2MtPnN0cm1vdXRbaV0uc3RhdGUg
PSBTQ1RQX1NUUkVBTV9PUEVOSU5HOwotCQlhc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0
X3N0cmVhbShzdGNiLCAmYXNvYy0+c3RybW91dFtpXSwgTlVMTCk7Ci0JfQotCWFzb2MtPnNzX2Z1
bmN0aW9ucy5zY3RwX3NzX2luaXQoc3RjYiwgYXNvYywgMCk7Ci0KLQkvKiBOb3cgdGhlIG1hcHBp
bmcgYXJyYXkgKi8KLQlhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgPSBTQ1RQX0lOSVRJQUxfTUFQ
UElOR19BUlJBWTsKLQlTQ1RQX01BTExPQyhhc29jLT5tYXBwaW5nX2FycmF5LCB1aW50OF90ICos
IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSwKLQkJICAgIFNDVFBfTV9NQVApOwotCWlmIChhc29j
LT5tYXBwaW5nX2FycmF5ID09IE5VTEwpIHsKLQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFND
VFBfTV9TVFJNTyk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCW1lbXNl
dChhc29jLT5tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwotCVND
VFBfTUFMTE9DKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIHVpbnQ4X3QgKiwgYXNvYy0+bWFwcGlu
Z19hcnJheV9zaXplLAotCSAgICBTQ1RQX01fTUFQKTsKLQlpZiAoYXNvYy0+bnJfbWFwcGluZ19h
cnJheSA9PSBOVUxMKSB7Ci0JCVNDVFBfRlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQX01fU1RSTU8p
OwotCQlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7Ci0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9N
RU0pOwotCQlyZXR1cm4gKEVOT01FTSk7Ci0JfQotCW1lbXNldChhc29jLT5ucl9tYXBwaW5nX2Fy
cmF5LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOwotCi0JLyogTm93IHRoZSBpbml0IG9m
IHRoZSBvdGhlciBvdXRxdWV1ZXMgKi8KLQlUQUlMUV9JTklUKCZhc29jLT5mcmVlX2NodW5rcyk7
Ci0JVEFJTFFfSU5JVCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKTsKLQlUQUlMUV9JTklUKCZh
c29jLT5hc2NvbmZfc2VuZF9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+c2VuZF9xdWV1ZSk7
Ci0JVEFJTFFfSU5JVCgmYXNvYy0+c2VudF9xdWV1ZSk7Ci0JVEFJTFFfSU5JVCgmYXNvYy0+cmVz
ZXRIZWFkKTsKLQlhc29jLT5tYXhfaW5ib3VuZF9zdHJlYW1zID0gaW5wLT5zY3RwX2VwLm1heF9v
cGVuX3N0cmVhbXNfaW50b21lOwotCVRBSUxRX0lOSVQoJmFzb2MtPmFzY29uZl9xdWV1ZSk7Ci0J
LyogYXV0aGVudGljYXRpb24gZmllbGRzICovCi0JYXNvYy0+YXV0aGluZm8ucmFuZG9tID0gTlVM
TDsKLQlhc29jLT5hdXRoaW5mby5hY3RpdmVfa2V5aWQgPSAwOwotCWFzb2MtPmF1dGhpbmZvLmFz
c29jX2tleSA9IE5VTEw7Ci0JYXNvYy0+YXV0aGluZm8uYXNzb2Nfa2V5aWQgPSAwOwotCWFzb2Mt
PmF1dGhpbmZvLnJlY3Zfa2V5ID0gTlVMTDsKLQlhc29jLT5hdXRoaW5mby5yZWN2X2tleWlkID0g
MDsKLQlMSVNUX0lOSVQoJmFzb2MtPnNoYXJlZF9rZXlzKTsKLQlhc29jLT5tYXJrZWRfcmV0cmFu
cyA9IDA7Ci0JYXNvYy0+cG9ydCA9IGlucC0+c2N0cF9lcC5wb3J0OwotCWFzb2MtPnRpbW9pbml0
ID0gMDsKLQlhc29jLT50aW1vZGF0YSA9IDA7Ci0JYXNvYy0+dGltb3NhY2sgPSAwOwotCWFzb2Mt
PnRpbW9zaHV0ZG93biA9IDA7Ci0JYXNvYy0+dGltb2hlYXJ0YmVhdCA9IDA7Ci0JYXNvYy0+dGlt
b2Nvb2tpZSA9IDA7Ci0JYXNvYy0+dGltb3NodXRkb3duYWNrID0gMDsKLQkodm9pZClTQ1RQX0dF
VFRJTUVfVElNRVZBTCgmYXNvYy0+c3RhcnRfdGltZSk7Ci0JYXNvYy0+ZGlzY29udGludWl0eV90
aW1lID0gYXNvYy0+c3RhcnRfdGltZTsKLQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9QUl9TQ1RQX01B
WCArIDE7IGkrKykgewotCQlhc29jLT5hYmFuZG9uZWRfdW5zZW50W2ldID0gMDsKLQkJYXNvYy0+
YWJhbmRvbmVkX3NlbnRbaV0gPSAwOwotCX0KLQkvKiBzYV9pZ25vcmUgTUVNTEVBSyB7bWVtb3J5
IGlzIHB1dCBpbiB0aGUgYXNzb2MgbWFwcGluZyBhcnJheSBhbmQgZnJlZWQgbGF0ZXIgd2hlbgot
CSAqIHRoZSBhc3NvY2lhdGlvbiBpcyBmcmVlZC4KLQkgKi8KLQlyZXR1cm4gKDApOwotfQotCi12
b2lkCi1zY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MpCi17Ci0JdW5zaWduZWQgaW50IGksIGxpbWl0OwotCi0JU0NUUF9QUklOVEYoIk1hcHBpbmcg
YXJyYXkgc2l6ZTogJWQsIGJhc2VUU046ICU4Ljh4LCBjdW1BY2s6ICU4Ljh4LCBoaWdoZXN0VFNO
OiAoJTguOHgsICU4Ljh4KS5cbiIsCi0JICAgICAgICAgICAgYXNvYy0+bWFwcGluZ19hcnJheV9z
aXplLAotCSAgICAgICAgICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sCi0JICAgICAg
ICAgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sCi0JICAgICAgICAgICAgYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCwKLQkgICAgICAgICAgICBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJf
bWFwKTsKLQlmb3IgKGxpbWl0ID0gYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBsaW1pdCA+IDE7
IGxpbWl0LS0pIHsKLQkJaWYgKGFzb2MtPm1hcHBpbmdfYXJyYXlbbGltaXQgLSAxXSAhPSAwKSB7
Ci0JCQlicmVhazsKLQkJfQotCX0KLQlTQ1RQX1BSSU5URigiUmVuZWdhYmxlIG1hcHBpbmcgYXJy
YXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3Np
emUgLSBsaW1pdCk7Ci0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJU0NUUF9QUklO
VEYoIiUyLjJ4JWMiLCBhc29jLT5tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcg
JyA6ICdcbicpOwotCX0KLQlpZiAobGltaXQgJSAxNikKLQkJU0NUUF9QUklOVEYoIlxuIik7Ci0J
Zm9yIChsaW1pdCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsgbGltaXQgPiAxOyBsaW1pdC0t
KSB7Ci0JCWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5W2xpbWl0IC0gMV0pIHsKLQkJCWJyZWFr
OwotCQl9Ci0JfQotCVNDVFBfUFJJTlRGKCJOb24gcmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxh
c3QgJWQgZW50cmllcyBhcmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBs
aW1pdCk7Ci0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKLQkJU0NUUF9QUklOVEYoIiUy
LjJ4JWMiLCBhc29jLT5ucl9tYXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcgJzog
J1xuJyk7Ci0JfQotCWlmIChsaW1pdCAlIDE2KQotCQlTQ1RQX1BSSU5URigiXG4iKTsKLX0KLQot
aW50Ci1zY3RwX2V4cGFuZF9tYXBwaW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLCB1aW50MzJfdCBuZWVkZWQpCi17Ci0JLyogbWFwcGluZyBhcnJheSBuZWVkcyB0byBncm93
ICovCi0JdWludDhfdCAqbmV3X2FycmF5MSwgKm5ld19hcnJheTI7Ci0JdWludDMyX3QgbmV3X3Np
emU7Ci0KLQluZXdfc2l6ZSA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSArICgobmVlZGVkKzcp
LzggKyBTQ1RQX01BUFBJTkdfQVJSQVlfSU5DUik7Ci0JU0NUUF9NQUxMT0MobmV3X2FycmF5MSwg
dWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7Ci0JU0NUUF9NQUxMT0MobmV3X2FycmF5
MiwgdWludDhfdCAqLCBuZXdfc2l6ZSwgU0NUUF9NX01BUCk7Ci0JaWYgKChuZXdfYXJyYXkxID09
IE5VTEwpIHx8IChuZXdfYXJyYXkyID09IE5VTEwpKSB7Ci0JCS8qIGNhbid0IGdldCBtb3JlLCBm
b3JnZXQgaXQgKi8KLQkJU0NUUF9QUklOVEYoIk5vIG1lbW9yeSBmb3IgZXhwYW5zaW9uIG9mIFND
VFAgbWFwcGluZyBhcnJheSAlZFxuIiwgbmV3X3NpemUpOwotCQlpZiAobmV3X2FycmF5MSkgewot
CQkJU0NUUF9GUkVFKG5ld19hcnJheTEsIFNDVFBfTV9NQVApOwotCQl9Ci0JCWlmIChuZXdfYXJy
YXkyKSB7Ci0JCQlTQ1RQX0ZSRUUobmV3X2FycmF5MiwgU0NUUF9NX01BUCk7Ci0JCX0KLQkJcmV0
dXJuICgtMSk7Ci0JfQotCW1lbXNldChuZXdfYXJyYXkxLCAwLCBuZXdfc2l6ZSk7Ci0JbWVtc2V0
KG5ld19hcnJheTIsIDAsIG5ld19zaXplKTsKLQltZW1jcHkobmV3X2FycmF5MSwgYXNvYy0+bWFw
cGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKLQltZW1jcHkobmV3X2FycmF5
MiwgYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKLQlT
Q1RQX0ZSRUUoYXNvYy0+bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7Ci0JU0NUUF9GUkVFKGFz
b2MtPm5yX21hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwotCWFzb2MtPm1hcHBpbmdfYXJyYXkg
PSBuZXdfYXJyYXkxOwotCWFzb2MtPm5yX21hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkyOwotCWFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSA9IG5ld19zaXplOwotCXJldHVybiAoMCk7Ci19Ci0KLQot
c3RhdGljIHZvaWQKLXNjdHBfaXRlcmF0b3Jfd29yayhzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQp
Ci17Ci0JaW50IGl0ZXJhdGlvbl9jb3VudCA9IDA7Ci0JaW50IGlucF9za2lwID0gMDsKLQlpbnQg
Zmlyc3RfaW4gPSAxOwotCXN0cnVjdCBzY3RwX2lucGNiICp0aW5wOwotCi0JU0NUUF9JTlBfSU5G
T19STE9DSygpOwotCVNDVFBfSVRFUkFUT1JfTE9DSygpOwotCXNjdHBfaXRfY3RsLmN1cl9pdCA9
IGl0OwotCWlmIChpdC0+aW5wKSB7Ci0JCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOwotCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpdC0+aW5wKTsKLQl9Ci0JaWYgKGl0LT5pbnAgPT0gTlVMTCkgewotCQkv
KiBpdGVyYXRvciBpcyBjb21wbGV0ZSAqLwotZG9uZV93aXRoX2l0ZXJhdG9yOgotCQlzY3RwX2l0
X2N0bC5jdXJfaXQgPSBOVUxMOwotCQlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOwotCQlTQ1RQX0lO
UF9JTkZPX1JVTkxPQ0soKTsKLQkJaWYgKGl0LT5mdW5jdGlvbl9hdGVuZCAhPSBOVUxMKSB7Ci0J
CQkoKml0LT5mdW5jdGlvbl9hdGVuZCkgKGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKLQkJfQotCQlT
Q1RQX0ZSRUUoaXQsIFNDVFBfTV9JVEVSKTsKLQkJcmV0dXJuOwotCX0KLXNlbGVjdF9hX25ld19l
cDoKLQlpZiAoZmlyc3RfaW4pIHsKLQkJZmlyc3RfaW4gPSAwOwotCX0gZWxzZSB7Ci0JCVNDVFBf
SU5QX1JMT0NLKGl0LT5pbnApOwotCX0KLQl3aGlsZSAoKChpdC0+cGNiX2ZsYWdzKSAmJgotCSAg
ICAgICAgKChpdC0+aW5wLT5zY3RwX2ZsYWdzICYgaXQtPnBjYl9mbGFncykgIT0gaXQtPnBjYl9m
bGFncykpIHx8Ci0JICAgICAgICgoaXQtPnBjYl9mZWF0dXJlcykgJiYKLQkJKChpdC0+aW5wLT5z
Y3RwX2ZlYXR1cmVzICYgaXQtPnBjYl9mZWF0dXJlcykgIT0gaXQtPnBjYl9mZWF0dXJlcykpKSB7
Ci0JCS8qIGVuZHBvaW50IGZsYWdzIG9yIGZlYXR1cmVzIGRvbid0IG1hdGNoLCBzbyBrZWVwIGxv
b2tpbmcgKi8KLQkJaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lO
R0xFX0lOUCkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKLQkJCWdvdG8gZG9uZV93
aXRoX2l0ZXJhdG9yOwotCQl9Ci0JCXRpbnAgPSBpdC0+aW5wOwotCQlpdC0+aW5wID0gTElTVF9O
RVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7Ci0JCVNDVFBfSU5QX1JVTkxPQ0sodGlucCk7Ci0JCWlm
IChpdC0+aW5wID09IE5VTEwpIHsKLQkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOwotCQl9Ci0J
CVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOwotCX0KLQkvKiBub3cgZ28gdGhyb3VnaCBlYWNoIGFz
c29jIHdoaWNoIGlzIGluIHRoZSBkZXNpcmVkIHN0YXRlICovCi0JaWYgKGl0LT5kb25lX2N1cnJl
bnRfZXAgPT0gMCkgewotCQlpZiAoaXQtPmZ1bmN0aW9uX2lucCAhPSBOVUxMKQotCQkJaW5wX3Nr
aXAgPSAoKml0LT5mdW5jdGlvbl9pbnApKGl0LT5pbnAsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsK
LQkJaXQtPmRvbmVfY3VycmVudF9lcCA9IDE7Ci0JfQotCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7
Ci0JCS8qIHJ1biB0aGUgcGVyIGluc3RhbmNlIGZ1bmN0aW9uICovCi0JCWl0LT5zdGNiID0gTElT
VF9GSVJTVCgmaXQtPmlucC0+c2N0cF9hc29jX2xpc3QpOwotCX0KLQlpZiAoKGlucF9za2lwKSB8
fCBpdC0+c3RjYiA9PSBOVUxMKSB7Ci0JCWlmIChpdC0+ZnVuY3Rpb25faW5wX2VuZCAhPSBOVUxM
KSB7Ci0JCQlpbnBfc2tpcCA9ICgqaXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCi0JCQkJ
CQkJICAgaXQtPnBvaW50ZXIsCi0JCQkJCQkJICAgaXQtPnZhbCk7Ci0JCX0KLQkJU0NUUF9JTlBf
UlVOTE9DSyhpdC0+aW5wKTsKLQkJZ290byBub19zdGNiOwotCX0KLQl3aGlsZSAoaXQtPnN0Y2Ip
IHsKLQkJU0NUUF9UQ0JfTE9DSyhpdC0+c3RjYik7Ci0JCWlmIChpdC0+YXNvY19zdGF0ZSAmJiAo
KGl0LT5zdGNiLT5hc29jLnN0YXRlICYgaXQtPmFzb2Nfc3RhdGUpICE9IGl0LT5hc29jX3N0YXRl
KSkgewotCQkJLyogbm90IGluIHRoZSByaWdodCBzdGF0ZS4uLiBrZWVwIGxvb2tpbmcgKi8KLQkJ
CVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7Ci0JCQlnb3RvIG5leHRfYXNzb2M7Ci0JCX0KLQkJ
Lyogc2VlIGlmIHdlIGhhdmUgbGltaXRlZCBvdXQgdGhlIGl0ZXJhdG9yIGxvb3AgKi8KLQkJaXRl
cmF0aW9uX2NvdW50Kys7Ci0JCWlmIChpdGVyYXRpb25fY291bnQgPiBTQ1RQX0lURVJBVE9SX01B
WF9BVF9PTkNFKSB7Ci0JCQkvKiBQYXVzZSB0byBsZXQgb3RoZXJzIGdyYWIgdGhlIGxvY2sgKi8K
LQkJCWF0b21pY19hZGRfaW50KCZpdC0+c3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJU0NUUF9U
Q0JfVU5MT0NLKGl0LT5zdGNiKTsKLQkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOwotCQkJ
U0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKLQkJCVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7Ci0J
CQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKLQkJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKLQkJ
CVNDVFBfSVRFUkFUT1JfTE9DSygpOwotCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdz
KSB7Ci0JCQkJLyogV2Ugd29uJ3QgYmUgc3RheWluZyBoZXJlICovCi0JCQkJU0NUUF9JTlBfREVD
Ul9SRUYoaXQtPmlucCk7Ci0JCQkJYXRvbWljX2FkZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNu
dCwgLTEpOwotI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJCWlmIChzY3RwX2l0X2N0bC5p
dGVyYXRvcl9mbGFncyAmCi0JCQkJICAgU0NUUF9JVEVSQVRPUl9NVVNUX0VYSVQpIHsKLQkJCQkJ
Z290byBkb25lX3dpdGhfaXRlcmF0b3I7Ci0JCQkJfQotI2VuZGlmCi0JCQkJaWYgKHNjdHBfaXRf
Y3RsLml0ZXJhdG9yX2ZsYWdzICYKLQkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUKSB7
Ci0JCQkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICY9IH5TQ1RQX0lURVJBVE9SX1NUT1Bf
Q1VSX0lUOwotCQkJCQlnb3RvIGRvbmVfd2l0aF9pdGVyYXRvcjsKLQkJCQl9Ci0JCQkJaWYgKHNj
dHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYKLQkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VS
X0lOUCkgewotCQkJCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAmPSB+U0NUUF9JVEVSQVRP
Ul9TVE9QX0NVUl9JTlA7Ci0JCQkJCWdvdG8gbm9fc3RjYjsKLQkJCQl9Ci0JCQkJLyogSWYgd2Ug
cmVhY2ggaGVyZSBodWg/ICovCi0JCQkJU0NUUF9QUklOVEYoIlVua25vd24gaXQgY3RsIGZsYWcg
JXhcbiIsCi0JCQkJCSAgICBzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyk7Ci0JCQkJc2N0cF9p
dF9jdGwuaXRlcmF0b3JfZmxhZ3MgPSAwOwotCQkJfQotCQkJU0NUUF9JTlBfUkxPQ0soaXQtPmlu
cCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpdC0+aW5wKTsKLQkJCVNDVFBfVENCX0xPQ0soaXQt
PnN0Y2IpOwotCQkJYXRvbWljX2FkZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOwot
CQkJaXRlcmF0aW9uX2NvdW50ID0gMDsKLQkJfQotCi0JCS8qIHJ1biBmdW5jdGlvbiBvbiB0aGlz
IG9uZSAqLwotCQkoKml0LT5mdW5jdGlvbl9hc3NvYykoaXQtPmlucCwgaXQtPnN0Y2IsIGl0LT5w
b2ludGVyLCBpdC0+dmFsKTsKLQotCQkvKgotCQkgKiB3ZSBsaWUgaGVyZSwgaXQgcmVhbGx5IG5l
ZWRzIHRvIGhhdmUgaXRzIG93biB0eXBlIGJ1dAotCQkgKiBmaXJzdCBJIG11c3QgdmVyaWZ5IHRo
YXQgdGhpcyB3b24ndCBlZmZlY3QgdGhpbmdzIDotMAotCQkgKi8KLQkJaWYgKGl0LT5ub19jaHVu
a19vdXRwdXQgPT0gMCkKLQkJCXNjdHBfY2h1bmtfb3V0cHV0KGl0LT5pbnAsIGl0LT5zdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCi0JCVNDVFBfVENCX1VO
TE9DSyhpdC0+c3RjYik7Ci0JbmV4dF9hc3NvYzoKLQkJaXQtPnN0Y2IgPSBMSVNUX05FWFQoaXQt
PnN0Y2IsIHNjdHBfdGNibGlzdCk7Ci0JCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7Ci0JCQkvKiBS
dW4gbGFzdCBmdW5jdGlvbiAqLwotCQkJaWYgKGl0LT5mdW5jdGlvbl9pbnBfZW5kICE9IE5VTEwp
IHsKLQkJCQlpbnBfc2tpcCA9ICgqaXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCi0JCQkJ
CQkJCSAgIGl0LT5wb2ludGVyLAotCQkJCQkJCQkgICBpdC0+dmFsKTsKLQkJCX0KLQkJfQotCX0K
LQlTQ1RQX0lOUF9SVU5MT0NLKGl0LT5pbnApOwotIG5vX3N0Y2I6Ci0JLyogZG9uZSB3aXRoIGFs
bCBhc3NvY3Mgb24gdGhpcyBlbmRwb2ludCwgbW92ZSBvbiB0byBuZXh0IGVuZHBvaW50ICovCi0J
aXQtPmRvbmVfY3VycmVudF9lcCA9IDA7Ci0JaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBf
SVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgewotCQlpdC0+aW5wID0gTlVMTDsKLQl9IGVsc2Ugewot
CQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7Ci0JfQotCWlmIChpdC0+
aW5wID09IE5VTEwpIHsKLQkJZ290byBkb25lX3dpdGhfaXRlcmF0b3I7Ci0JfQotCWdvdG8gc2Vs
ZWN0X2FfbmV3X2VwOwotfQotCi12b2lkCi1zY3RwX2l0ZXJhdG9yX3dvcmtlcih2b2lkKQotewot
CXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCwgKm5pdDsKLQotCS8qIFRoaXMgZnVuY3Rpb24gaXMg
Y2FsbGVkIHdpdGggdGhlIFdRIGxvY2sgaW4gcGxhY2UgKi8KLQotCXNjdHBfaXRfY3RsLml0ZXJh
dG9yX3J1bm5pbmcgPSAxOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShpdCwgJnNjdHBfaXRfY3RsLml0
ZXJhdG9yaGVhZCwgc2N0cF9ueHRfaXRyLCBuaXQpIHsKLQkJLyogbm93IGxldHMgd29yayBvbiB0
aGlzIG9uZSAqLwotCQlUQUlMUV9SRU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQs
IHNjdHBfbnh0X2l0cik7Ci0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOwotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQlDVVJW
TkVUX1NFVChpdC0+dm4pOwotI2VuZGlmCi0JCXNjdHBfaXRlcmF0b3Jfd29yayhpdCk7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNV
UlZORVRfUkVTVE9SRSgpOwotI2VuZGlmCi0JCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsK
LSNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2Zs
YWdzICYgU0NUUF9JVEVSQVRPUl9NVVNUX0VYSVQpIHsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYK
LQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9Ci0Jc2N0cF9pdF9jdGwuaXRlcmF0b3Jf
cnVubmluZyA9IDA7Ci0JcmV0dXJuOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX2hhbmRsZV9h
ZGRyX3dxKHZvaWQpCi17Ci0JLyogZGVhbCB3aXRoIHRoZSBBRERSIHdxIGZyb20gdGhlIHJ0c29j
ayBjYWxscyAqLwotCXN0cnVjdCBzY3RwX2xhZGRyICp3aSwgKm53aTsKLQlzdHJ1Y3Qgc2N0cF9h
c2NvbmZfaXRlcmF0b3IgKmFzYzsKLQotCVNDVFBfTUFMTE9DKGFzYywgc3RydWN0IHNjdHBfYXNj
b25mX2l0ZXJhdG9yICosCi0JCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9y
KSwgU0NUUF9NX0FTQ19JVCk7Ci0JaWYgKGFzYyA9PSBOVUxMKSB7Ci0JCS8qIFRyeSBsYXRlciwg
bm8gbWVtb3J5ICovCi0JCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1Es
Ci0JCQkJIChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKU5VTEwsCi0JCQkJIChzdHJ1Y3Qgc2N0cF90Y2Ig
KilOVUxMLAotCQkJCSAoc3RydWN0IHNjdHBfbmV0cyAqKU5VTEwpOwotCQlyZXR1cm47Ci0JfQot
CUxJU1RfSU5JVCgmYXNjLT5saXN0X29mX3dvcmspOwotCWFzYy0+Y250ID0gMDsKLQotCVNDVFBf
V1FfQUREUl9MT0NLKCk7Ci0JTElTVF9GT1JFQUNIX1NBRkUod2ksICZTQ1RQX0JBU0VfSU5GTyhh
ZGRyX3dxKSwgc2N0cF9ueHRfYWRkciwgbndpKSB7Ci0JCUxJU1RfUkVNT1ZFKHdpLCBzY3RwX254
dF9hZGRyKTsKLQkJTElTVF9JTlNFUlRfSEVBRCgmYXNjLT5saXN0X29mX3dvcmssIHdpLCBzY3Rw
X254dF9hZGRyKTsKLQkJYXNjLT5jbnQrKzsKLQl9Ci0JU0NUUF9XUV9BRERSX1VOTE9DSygpOwot
Ci0JaWYgKGFzYy0+Y250ID09IDApIHsKLQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7
Ci0JfSBlbHNlIHsKLQkJaW50IHJldDsKLQotCQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9y
KHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNjdHBfYXNjb25mX2l0ZXJhdG9yX3N0Y2IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgTlVMTCwgLyogTm8gZXAgZW5kIGZvciBib3VuZGFsbCAqLwotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUENCX0FOWV9GRUFUVVJFUywKLQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0FTT0NfQU5ZX1NUQVRFLAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICh2b2lkICopYXNjLCAwLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj
dHBfYXNjb25mX2l0ZXJhdG9yX2VuZCwgTlVMTCwgMCk7Ci0JCWlmIChyZXQpIHsKLQkJCVNDVFBf
UFJJTlRGKCJGYWlsZWQgdG8gaW5pdGlhdGUgaXRlcmF0b3IgZm9yIGhhbmRsZV9hZGRyX3dxXG4i
KTsKLQkJCS8qIEZyZWVpbmcgaWYgd2UgYXJlIHN0b3BwaW5nIG9yIHB1dCBiYWNrIG9uIHRoZSBh
ZGRyX3dxLiAqLwotCQkJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09
IDApIHsKLQkJCQlzY3RwX2FzY29uZl9pdGVyYXRvcl9lbmQoYXNjLCAwKTsKLQkJCX0gZWxzZSB7
Ci0JCQkJU0NUUF9XUV9BRERSX0xPQ0soKTsKLQkJCQlMSVNUX0ZPUkVBQ0god2ksICZhc2MtPmxp
c3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRkcikgewotCQkJCQlMSVNUX0lOU0VSVF9IRUFEKCZTQ1RQ
X0JBU0VfSU5GTyhhZGRyX3dxKSwgd2ksIHNjdHBfbnh0X2FkZHIpOwotCQkJCX0KLQkJCQlTQ1RQ
X1dRX0FERFJfVU5MT0NLKCk7Ci0JCQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7Ci0J
CQl9Ci0JCX0KLQl9Ci19Ci0KLXZvaWQKLXNjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCi17
Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7Ci0Jc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OwotCXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7Ci0Jc3RydWN0IG1i
dWYgKm9wX2VycjsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCWludCBkaWRfb3V0cHV0
OwotCWludCB0eXBlOwotCi0JdG1yID0gKHN0cnVjdCBzY3RwX3RpbWVyICopdDsKLQlpbnAgPSAo
c3RydWN0IHNjdHBfaW5wY2IgKil0bXItPmVwOwotCXN0Y2IgPSAoc3RydWN0IHNjdHBfdGNiICop
dG1yLT50Y2I7Ci0JbmV0ID0gKHN0cnVjdCBzY3RwX25ldHMgKil0bXItPm5ldDsKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKLQlDVVJWTkVU
X1NFVCgoc3RydWN0IHZuZXQgKil0bXItPnZuZXQpOwotI2VuZGlmCi0JZGlkX291dHB1dCA9IDE7
Ci0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQlzY3RwX2F1ZGl0X2xvZygweEYwLCAo
dWludDhfdCkgdG1yLT50eXBlKTsKLQlzY3RwX2F1ZGl0aW5nKDMsIGlucCwgc3RjYiwgbmV0KTsK
LSNlbmRpZgotCi0JLyogc2FuaXR5IGNoZWNrcy4uLiAqLwotCWlmICh0bXItPnNlbGYgIT0gKHZv
aWQgKil0bXIpIHsKLQkJLyoKLQkJICogU0NUUF9QUklOVEYoIlN0YWxlIFNDVFAgdGltZXIgZmly
ZWQgKCVwKSwgaWdub3JpbmcuLi5cbiIsCi0JCSAqICAgICAgICAgICAgICh2b2lkICopdG1yKTsK
LQkJICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
ODAxMDAwCi0JCUNVUlZORVRfUkVTVE9SRSgpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JdG1y
LT5zdG9wcGVkX2Zyb20gPSAweGEwMDE7Ci0JaWYgKCFTQ1RQX0lTX1RJTUVSX1RZUEVfVkFMSUQo
dG1yLT50eXBlKSkgewotCQkvKgotCQkgKiBTQ1RQX1BSSU5URigiU0NUUCB0aW1lciBmaXJlZCB3
aXRoIGludmFsaWQgdHlwZTogMHgleFxuIiwKLQkJICogdG1yLT50eXBlKTsKLQkJICovCi0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCUNV
UlZORVRfUkVTVE9SRSgpOwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0JdG1yLT5zdG9wcGVkX2Zy
b20gPSAweGEwMDI7Ci0JaWYgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FERFJfV1Ep
ICYmIChpbnAgPT0gTlVMTCkpIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDEwMDAKLQkJQ1VSVk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYKLQkJcmV0
dXJuOwotCX0KLQkvKiBpZiB0aGlzIGlzIGFuIGl0ZXJhdG9yIHRpbWVvdXQsIGdldCB0aGUgc3Ry
dWN0IGFuZCBjbGVhciBpbnAgKi8KLQl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwMzsKLQlpZiAo
aW5wKSB7Ci0JCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7Ci0JCWlmICgoaW5wLT5zY3RwX3NvY2tl
dCA9PSBOVUxMKSAmJgotCQkgICAgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0lOUEtJ
TEwpICYmCi0JCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgJiYKLQkJ
ICAgICAodG1yLT50eXBlICE9IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAmJgotCQkgICAgICh0bXIt
PnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1JFQ1YpICYmCi0JCSAgICAgKHRtci0+dHlwZSAhPSBT
Q1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9U
SU1FUl9UWVBFX1NIVVRET1dOKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOQUNLKSAmJgotCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOR1VBUkQpICYmCi0JCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVf
QVNPQ0tJTEwpKQotCQkJKSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQkJQ1VSVk5F
VF9SRVNUT1JFKCk7Ci0jZW5kaWYKLQkJCXJldHVybjsKLQkJfQotCX0KLQl0bXItPnN0b3BwZWRf
ZnJvbSA9IDB4YTAwNDsKLQlpZiAoc3RjYikgewotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIDEpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7Ci0JCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQkJCWlmIChpbnApIHsKLQkJCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpbnApOwotCQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAotCQkJQ1VSVk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYK
LQkJCXJldHVybjsKLQkJfQotCX0KLQl0eXBlID0gdG1yLT50eXBlOwotCXRtci0+c3RvcHBlZF9m
cm9tID0gMHhhMDA1OwotCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICJUaW1lciB0eXBlICVk
IGdvZXMgb2ZmXG4iLCB0eXBlKTsKLQlpZiAoIVNDVFBfT1NfVElNRVJfQUNUSVZFKCZ0bXItPnRp
bWVyKSkgewotCQlpZiAoaW5wKSB7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQl9Ci0J
CWlmIChzdGNiKSB7Ci0JCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsK
LQkJfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MTAwMAotCQlDVVJWTkVUX1JFU1RPUkUoKTsKLSNlbmRpZgotCQlyZXR1cm47Ci0JfQotCXRtci0+
c3RvcHBlZF9mcm9tID0gMHhhMDA2OwotCi0JaWYgKHN0Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7Ci0JCWlmICgo
dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwpICYmCi0JCSAgICAoKHN0Y2ItPmFzb2Mu
c3RhdGUgPT0gMCkgfHwKLQkJICAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJP
VVRfVE9fQkVfRlJFRUQpKSkgewotCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJaWYgKGlu
cCkgewotCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCi0JCQlDVVJWTkVUX1JFU1RP
UkUoKTsKLSNlbmRpZgotCQkJcmV0dXJuOwotCQl9Ci0JfQotCS8qIHJlY29yZCBpbiBzdG9wcGVk
IHdoYXQgdC1vIG9jY3VycmVkICovCi0JdG1yLT5zdG9wcGVkX2Zyb20gPSB0eXBlOwotCi0JLyog
bWFyayBhcyBiZWluZyBzZXJ2aWNlZCBub3cgKi8KLQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5H
KCZ0bXItPnRpbWVyKSkgewotCQkvKgotCQkgKiBDYWxsb3V0IGhhcyBiZWVuIHJlc2NoZWR1bGVk
LgotCQkgKi8KLQkJZ290byBnZXRfb3V0OwotCX0KLQlpZiAoIVNDVFBfT1NfVElNRVJfQUNUSVZF
KCZ0bXItPnRpbWVyKSkgewotCQkvKgotCQkgKiBOb3QgYWN0aXZlLCBzbyBubyBhY3Rpb24uCi0J
CSAqLwotCQlnb3RvIGdldF9vdXQ7Ci0JfQotCVNDVFBfT1NfVElNRVJfREVBQ1RJVkFURSgmdG1y
LT50aW1lcik7Ci0KLQkvKiBjYWxsIHRoZSBoYW5kbGVyIGZvciB0aGUgYXBwcm9wcmlhdGUgdGlt
ZXIgdHlwZSAqLwotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1pFUk9f
Q09QWToKLQkJaWYgKGlucCA9PSBOVUxMKSB7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSkpIHsKLQkJ
CVNDVFBfWkVST19DT1BZX0VWRU5UKGlucCwgaW5wLT5zY3RwX3NvY2tldCk7Ci0JCX0KLQkJYnJl
YWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfWkNPUFlfU0VORFE6Ci0JCWlmIChpbnAgPT0gTlVM
TCkgewotCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX1pFUk9fQ09QWV9BQ1RJVkUpKSB7Ci0JCSAgICBTQ1RQX1pFUk9fQ09QWV9TRU5E
UV9FVkVOVChpbnAsIGlucC0+c2N0cF9zb2NrZXQpOwotCQl9Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUToKLQkJc2N0cF9oYW5kbGVfYWRkcl93
cSgpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TRU5EOgotCQlpZiAoKHN0Y2Ig
PT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfdGltb2RhdGEpOwotCQlzdGNiLT5hc29jLnRpbW9kYXRhKys7Ci0JCXN0Y2It
PmFzb2MubnVtX3NlbmRfdGltZXJzX3VwLS07Ci0JCWlmIChzdGNiLT5hc29jLm51bV9zZW5kX3Rp
bWVyc191cCA8IDApIHsKLQkJCXN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwID0gMDsKLQkJ
fQotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQkJaWYgKHNjdHBfdDNyeHRfdGltZXIo
aW5wLCBzdGNiLCBuZXQpKSB7Ci0JCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdv
bmUgKi8KLQotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChz
dGNiKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJc2N0cF9hdWRpdGluZyg0LCBp
bnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlpZiAoKHN0Y2ItPmFz
b2MubnVtX3NlbmRfdGltZXJzX3VwID09IDApICYmCi0JCSAgICAoc3RjYi0+YXNvYy5zZW50X3F1
ZXVlX2NudCA+IDApKSB7Ci0JCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7Ci0KLQkJCS8q
Ci0JCQkgKiBzYWZlZ3VhcmQuIElmIHRoZXJlIG9uIHNvbWUgb24gdGhlIHNlbnQgcXVldWUKLQkJ
CSAqIHNvbWV3aGVyZSBidXQgbm8gdGltZXJzIHJ1bm5pbmcgc29tZXRoaW5nIGlzCi0JCQkgKiB3
cm9uZy4uLiBzbyB3ZSBzdGFydCBhIHRpbWVyIG9uIHRoZSBmaXJzdCBjaHVuawotCQkJICogb24g
dGhlIHNlbmQgcXVldWUgb24gd2hhdGV2ZXIgbmV0IGl0IGlzIHNlbnQgdG8uCi0JCQkgKi8KLQkJ
CWNoayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwotCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLAotCQkJICAgIGNoay0+d2hv
VG8pOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOSVQ6Ci0JCWlmICgo
c3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc190aW1vaW5pdCk7Ci0JCXN0Y2ItPmFzb2MudGltb2luaXQrKzsKLQkJ
aWYgKHNjdHBfdDFpbml0X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8gbmVlZCB0
byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9Ci0JCS8q
IFdlIGRvIG91dHB1dCBidXQgbm90IGhlcmUgKi8KLQkJZGlkX291dHB1dCA9IDA7Ci0JCWJyZWFr
OwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1JFQ1Y6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAo
aW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190
aW1vc2Fjayk7Ci0JCXN0Y2ItPmFzb2MudGltb3NhY2srKzsKLQkJc2N0cF9zZW5kX3NhY2soc3Rj
YiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLQkJ
c2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NBQ0tfVE1SLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTjoKLQkJaWYg
KChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlm
IChzY3RwX3NodXRkb3duX3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8gbmVlZCB0
byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9Ci0JCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zaHV0ZG93bik7Ci0JCXN0Y2ItPmFzb2MudGltb3NodXRk
b3duKys7Ci0jaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECi0JCXNjdHBfYXVkaXRpbmcoNCwg
aW5wLCBzdGNiLCBuZXQpOwotI2VuZGlmCi0JCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwg
U0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJYnJlYWs7
Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkg
fHwgKGlucCA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc190aW1vaGVhcnRiZWF0KTsKLQkJc3RjYi0+YXNvYy50aW1vaGVh
cnRiZWF0Kys7Ci0JCWlmIChzY3RwX2hlYXJ0YmVhdF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsK
LQkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRf
ZGVjcjsKLQkJfQotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1ZGl0aW5n
KDQsIGlucCwgc3RjYiwgbmV0KTsKLSNlbmRpZgotCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfTk9IQikpIHsKLQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hF
QVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQpOwotCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBTQ1RQX09VVFBVVF9GUk9NX0hCX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLQkJfQotCQli
cmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9DT09LSUU6Ci0JCWlmICgoc3RjYiA9PSBOVUxM
KSB8fCAoaW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzY3RwX2Nvb2tp
ZV90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRj
YiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc190aW1vY29va2llKTsKLQkJc3RjYi0+YXNvYy50aW1vY29va2llKys7Ci0jaWZkZWYgU0NU
UF9BVURJVElOR19FTkFCTEVECi0JCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQpOwot
I2VuZGlmCi0JCS8qCi0JCSAqIFdlIGNvbnNpZGVyIFQzIGFuZCBDb29raWUgdGltZXIgcHJldHR5
IG11Y2ggdGhlIHNhbWUgd2l0aAotCQkgKiByZXNwZWN0IHRvIHdoZXJlIGZyb20gaW4gY2h1bmtf
b3V0cHV0LgotCQkgKi8KLQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElN
RVJfVFlQRV9ORVdDT09LSUU6Ci0JCXsKLQkJCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkJaW50IGks
IHNlY3JldDsKLQkJCWlmIChpbnAgPT0gTlVMTCkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3NlY3JldCk7Ci0JCQkodm9pZClTQ1RQX0dFVFRJTUVfVElN
RVZBTCgmdHYpOwotCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKLQkJCWlucC0+c2N0cF9lcC50aW1l
X29mX3NlY3JldF9jaGFuZ2UgPSB0di50dl9zZWM7Ci0JCQlpbnAtPnNjdHBfZXAubGFzdF9zZWNy
ZXRfbnVtYmVyID0KLQkJCSAgICBpbnAtPnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyOwot
CQkJaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcisrOwotCQkJaWYgKGlucC0+c2N0
cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXIgPj0KLQkJCSAgICBTQ1RQX0hPV19NQU5ZX1NFQ1JF
VFMpIHsKLQkJCQlpbnAtPnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID0gMDsKLQkJCX0K
LQkJCXNlY3JldCA9IChpbnQpaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlcjsKLQkJ
CWZvciAoaSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9PRl9TRUNSRVRTOyBpKyspIHsKLQkJCQlpbnAt
PnNjdHBfZXAuc2VjcmV0X2tleVtzZWNyZXRdW2ldID0KLQkJCQkgICAgc2N0cF9zZWxlY3RfaW5p
dGlhbF9UU04oJmlucC0+c2N0cF9lcCk7Ci0JCQl9Ci0JCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUUsIGlucCwgc3Rj
YiwgbmV0KTsKLQkJfQotCQlkaWRfb3V0cHV0ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfUEFUSE1UVVJBSVNFOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBO
VUxMKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3BhdGht
dHUpOwotCQlzY3RwX3BhdGhtdHVfdGltZXIoaW5wLCBzdGNiLCBuZXQpOwotCQlkaWRfb3V0cHV0
ID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0s6Ci0JCWlm
ICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7Ci0JCQlicmVhazsKLQkJfQotCQlp
ZiAoc2N0cF9zaHV0ZG93bmFja190aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5l
ZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQot
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vc2h1dGRvd25hY2spOwotCQlzdGNiLT5hc29jLnRp
bW9zaHV0ZG93bmFjaysrOwotI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAotCQlzY3RwX2F1
ZGl0aW5nKDQsIGlucCwgc3RjYiwgbmV0KTsKLSNlbmRpZgotCQlzY3RwX2NodW5rX291dHB1dChp
bnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU0hVVF9BQ0tfVE1SLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJEOgotCQlp
ZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkgewotCQkJYnJlYWs7Ci0JCX0KLQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3NodXRkb3duZ3VhcmQpOwotCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCi0J
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNodXRkb3duIGd1YXJkIHRpbWVyIGV4cGly
ZWQiKTsKLQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKLQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25l
ICovCi0JCWdvdG8gb3V0X2RlY3I7Ci0KLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVDoK
LQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9
Ci0JCWlmIChzY3RwX3N0cnJlc2V0X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgewotCQkJLyogbm8g
bmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCi0JCQlnb3RvIG91dF9kZWNyOwotCQl9
Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zdHJtcnN0KTsKLQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NUUlJTVF9UTVIsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FTQ09ORjoKLQkJaWYgKChz
dGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmIChz
Y3RwX2FzY29uZl90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKLQkJCS8qIG5vIG5lZWQgdG8gdW5s
b2NrIG9uIHRjYiBpdHMgZ29uZSAqLwotCQkJZ290byBvdXRfZGVjcjsKLQkJfQotCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc190aW1vYXNjb25mKTsKLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQK
LQkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7Ci0jZW5kaWYKLQkJc2N0cF9jaHVu
a19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0FTQ09ORl9UTVIsIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRF
RDoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKLQkJCWJyZWFrOwot
CQl9Ci0JCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoaW5wLCBzdGNiLCBuZXQpOwotCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc190aW1vZGVscHJpbSk7Ci0JCWJyZWFrOwotCi0JY2FzZSBTQ1RQX1RJTUVS
X1RZUEVfQVVUT0NMT1NFOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9PSBOVUxMKSkg
ewotCQkJYnJlYWs7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2F1dG9jbG9zZSk7
Ci0JCXNjdHBfYXV0b2Nsb3NlX3RpbWVyKGlucCwgc3RjYiwgbmV0KTsKLQkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIsIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7Ci0JCWRpZF9vdXRwdXQgPSAwOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElN
RVJfVFlQRV9BU09DS0lMTDoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkp
IHsKLQkJCWJyZWFrOwotCQl9Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9hc3NvY2tpbGwp
OwotCQkvKiBDYW4gd2UgZnJlZSBpdCB5ZXQ/ICovCi0JCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
Ci0JCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwg
TlVMTCwKLQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzEp
OwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQotCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9D
SyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNlbmRpZgotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Mo
aW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAotCQkgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMik7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywg
MSk7Ci0jZW5kaWYKLQkJLyoKLQkJICogZnJlZSBhc29jLCBhbHdheXMgdW5sb2NrcyAob3IgZGVz
dHJveSdzKSBzbyBwcmV2ZW50Ci0JCSAqIGR1cGxpY2F0ZSB1bmxvY2sgb3IgdW5sb2NrIG9mIGEg
ZnJlZSBtdHggOi0wCi0JCSAqLwotCQlzdGNiID0gTlVMTDsKLQkJZ290byBvdXRfbm9fZGVjcjsK
LQljYXNlIFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMOgotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190
aW1vaW5wa2lsbCk7Ci0JCWlmIChpbnAgPT0gTlVMTCkgewotCQkJYnJlYWs7Ci0JCX0KLQkJLyoK
LQkJICogc3BlY2lhbCBjYXNlLCB0YWtlIGF3YXkgb3VyIGluY3JlbWVudCBzaW5jZSBXRSBhcmUg
dGhlCi0JCSAqIGtpbGxlcgotCQkgKi8KLQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKLQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMLCBpbnAsIE5VTEwsIE5VTEwsCi0J
CSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18zKTsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLQkJU0NUUF9TT0NLRVRfTE9DSyhTQ1RQX0lOUF9TTyhpbnApLCAx
KTsKLSNlbmRpZgotCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9B
Qk9SVCwKLQkJCQlTQ1RQX0NBTExFRF9GUk9NX0lOUEtJTExfVElNRVIpOwotI2lmIGRlZmluZWQo
X19BUFBMRV9fKQotCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0j
ZW5kaWYKLQkJaW5wID0gTlVMTDsKLQkJZ290byBvdXRfbm9fZGVjcjsKLQlkZWZhdWx0OgotCQlT
Q1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAic2N0cF90aW1lb3V0X2hhbmRsZXI6dW5rbm93biB0
aW1lciAlZFxuIiwKLQkJCXR5cGUpOwotCQlicmVhazsKLQl9Ci0jaWZkZWYgU0NUUF9BVURJVElO
R19FTkFCTEVECi0Jc2N0cF9hdWRpdF9sb2coMHhGMSwgKHVpbnQ4X3QpIHR5cGUpOwotCWlmIChp
bnApCi0JCXNjdHBfYXVkaXRpbmcoNSwgaW5wLCBzdGNiLCBuZXQpOwotI2VuZGlmCi0JaWYgKChk
aWRfb3V0cHV0KSAmJiBzdGNiKSB7Ci0JCS8qCi0JCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFuIHVw
IHRoZSBjb250cm9sIGNodW5rIGNoYWluIGlmIGFuCi0JCSAqIEVDTkUgaXMgb24gaXQuIEl0IG11
c3QgYmUgbWFya2VkIGFzIFVOU0VOVCBhZ2FpbiBzbyBuZXh0Ci0JCSAqIGNhbGwgd2lsbCBjb250
aW51ZSB0byBzZW5kIGl0IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldAotCQkgKiBhIENXUiwg
dG8gcmVtb3ZlIGl0LiBJdCBpcywgaG93ZXZlciwgbGVzcyBsaWtlbHkgdGhhdCB3ZQotCQkgKiB3
aWxsIGZpbmQgYSBlY24gZWNobyBvbiB0aGUgY2hhaW4gdGhvdWdoLgotCQkgKi8KLQkJc2N0cF9m
aXhfZWNuX2VjaG8oJnN0Y2ItPmFzb2MpOwotCX0KLWdldF9vdXQ6Ci0JaWYgKHN0Y2IpIHsKLQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCX0KLQotb3V0X2RlY3I6Ci0JaWYgKGlucCkgewotCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOwotCX0KLQotb3V0X25vX2RlY3I6Ci0JU0NUUERCRyhTQ1RQ
X0RFQlVHX1RJTUVSMSwgIlRpbWVyIG5vdyBjb21wbGV0ZSAodHlwZSA9ICVkKVxuIiwgdHlwZSk7
Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAw
Ci0JQ1VSVk5FVF9SRVNUT1JFKCk7Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF90aW1lcl9zdGFy
dChpbnQgdF90eXBlLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQotewotCXVpbnQzMl90IHRvX3RpY2tzOwot
CXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7Ci0KLQlpZiAoKHRfdHlwZSAhPSBTQ1RQX1RJTUVSX1RZ
UEVfQUREUl9XUSkgJiYgKGlucCA9PSBOVUxMKSkKLQkJcmV0dXJuOwotCi0JdG1yID0gTlVMTDsK
LQlpZiAoc3RjYikgewotCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKLQl9Ci0Jc3dpdGNo
ICh0X3R5cGUpIHsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9aRVJPX0NPUFk6Ci0JCXRtciA9ICZp
bnAtPnNjdHBfZXAuemVyb19jb3B5X3RpbWVyOwotCQl0b190aWNrcyA9IFNDVFBfWkVST19DT1BZ
X1RJQ0tfREVMQVk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1pDT1BZX1NFTkRR
OgotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnplcm9fY29weV9zZW5kcV90aW1lcjsKLQkJdG9fdGlj
a3MgPSBTQ1RQX1pFUk9fQ09QWV9TRU5EUV9USUNLX0RFTEFZOwotCQlicmVhazsKLQljYXNlIFND
VFBfVElNRVJfVFlQRV9BRERSX1dROgotCQkvKiBPbmx5IDEgdGljayBhd2F5IDotKSAqLwotCQl0
bXIgPSAmU0NUUF9CQVNFX0lORk8oYWRkcl93cV90aW1lcik7Ci0JCXRvX3RpY2tzID0gU0NUUF9B
RERSRVNTX1RJQ0tfREVMQVk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6
Ci0JCS8qIEhlcmUgd2UgdXNlIHRoZSBSVE8gdGltZXIgKi8KLQkJewotCQkJaW50IHJ0b192YWw7
Ci0KLQkJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQkJcmV0dXJu
OwotCQkJfQotCQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQkJaWYgKG5ldC0+UlRPID09IDAp
IHsKLQkJCQlydG9fdmFsID0gc3RjYi0+YXNvYy5pbml0aWFsX3J0bzsKLQkJCX0gZWxzZSB7Ci0J
CQkJcnRvX3ZhbCA9IG5ldC0+UlRPOwotCQkJfQotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tT
KHJ0b192YWwpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOSVQ6Ci0J
CS8qCi0JCSAqIEhlcmUgd2UgdXNlIHRoZSBJTklUIHRpbWVyIGRlZmF1bHQgdXN1YWxseSBhYm91
dCAxCi0JCSAqIG1pbnV0ZS4KLQkJICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09
IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlp
ZiAobmV0LT5SVE8gPT0gMCkgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFz
b2MuaW5pdGlhbF9ydG8pOwotCQl9IGVsc2UgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tT
KG5ldC0+UlRPKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9SRUNWOgot
CQkvKgotCQkgKiBIZXJlIHdlIHVzZSB0aGUgRGVsYXllZC1BY2sgdGltZXIgdmFsdWUgZnJvbSB0
aGUgaW5wCi0JCSAqIHVzdXN1YWxseSBhYm91dCAyMDBtcy4KLQkJICovCi0JCWlmIChzdGNiID09
IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5kYWNrX3RpbWVy
OwotCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5kZWxheWVkX2Fjayk7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgotCQkvKiBIZXJlIHdlIHVz
ZSB0aGUgUlRPIG9mIHRoZSBkZXN0aW5hdGlvbi4gKi8KLQkJaWYgKChzdGNiID09IE5VTEwpIHx8
IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAobmV0LT5SVE8gPT0gMCkg
ewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8pOwot
CQl9IGVsc2UgewotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKLQkJfQot
CQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBF
X0hFQVJUQkVBVDoKLQkJLyoKLQkJICogdGhlIG5ldCBpcyB1c2VkIGhlcmUgc28gdGhhdCB3ZSBj
YW4gYWRkIGluIHRoZSBSVE8uIEV2ZW4KLQkJICogdGhvdWdoIHdlIHVzZSBhIGRpZmZlcmVudCB0
aW1lci4gV2UgYWxzbyBhZGQgdGhlIEhCIHRpbWVyCi0JCSAqIFBMVVMgYSByYW5kb20gaml0dGVy
LgotCQkgKi8KLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJl
dHVybjsKLQkJfSBlbHNlIHsKLQkJCXVpbnQzMl90IHJuZHZhbDsKLQkJCXVpbnQzMl90IGppdHRl
cjsKLQotCQkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgJiYKLQkJCSAg
ICAhKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpIHsKLQkJCQlyZXR1
cm47Ci0JCQl9Ci0JCQlpZiAobmV0LT5SVE8gPT0gMCkgewotCQkJCXRvX3RpY2tzID0gc3RjYi0+
YXNvYy5pbml0aWFsX3J0bzsKLQkJCX0gZWxzZSB7Ci0JCQkJdG9fdGlja3MgPSBuZXQtPlJUTzsK
LQkJCX0KLQkJCXJuZHZhbCA9IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXAp
OwotCQkJaml0dGVyID0gcm5kdmFsICUgdG9fdGlja3M7Ci0JCQlpZiAoaml0dGVyID49ICh0b190
aWNrcyA+PiAxKSkgewotCQkJCXRvX3RpY2tzID0gdG9fdGlja3MgKyAoaml0dGVyIC0gKHRvX3Rp
Y2tzID4+IDEpKTsKLQkJCX0gZWxzZSB7Ci0JCQkJdG9fdGlja3MgPSB0b190aWNrcyAtIGppdHRl
cjsKLQkJCX0KLQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1F
RCkgJiYKLQkJCSAgICAhKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpIHsKLQkJCQl0
b190aWNrcyArPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7Ci0JCQl9Ci0JCQkvKgotCQkJICogTm93
IHdlIG11c3QgY29udmVydCB0aGUgdG9fdGlja3MgdGhhdCBhcmUgbm93IGluCi0JCQkgKiBtcyB0
byB0aWNrcy4KLQkJCSAqLwotCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHRvX3RpY2tzKTsK
LQkJCXRtciA9ICZuZXQtPmhiX3RpbWVyOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1F
Ul9UWVBFX0NPT0tJRToKLQkJLyoKLQkJICogSGVyZSB3ZSBjYW4gdXNlIHRoZSBSVE8gdGltZXIg
ZnJvbSB0aGUgbmV0d29yayBzaW5jZSBvbmUKLQkJICogUlRUIHdhcyBjb21wZWxldGUuIElmIGEg
cmV0cmFuIGhhcHBlbmVkIHRoZW4gd2Ugd2lsbCBiZQotCQkgKiB1c2luZyB0aGUgUlRPIGluaXRp
YWwgdmFsdWUuCi0JCSAqLwotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkg
ewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChuZXQtPlJUTyA9PSAwKSB7Ci0JCQl0b190aWNrcyA9
IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7Ci0JCX0gZWxzZSB7Ci0JCQl0
b190aWNrcyA9IE1TRUNfVE9fVElDS1MobmV0LT5SVE8pOwotCQl9Ci0JCXRtciA9ICZuZXQtPnJ4
dF90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFOgotCQkv
KgotCQkgKiBub3RoaW5nIG5lZWRlZCBidXQgdGhlIGVuZHBvaW50IGhlcmUgdXN1c3VhbGx5IGFi
b3V0IDYwCi0JCSAqIG1pbnV0ZXMuCi0JCSAqLwotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25h
dHVyZV9jaGFuZ2U7Ci0JCXRvX3RpY2tzID0gaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tz
W1NDVFBfVElNRVJfU0lHTkFUVVJFXTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVf
QVNPQ0tJTEw6Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIg
PSAmc3RjYi0+YXNvYy5zdHJyZXNldF90aW1lcjsKLQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tT
KFNDVFBfQVNPQ19LSUxMX1RJTUVPVVQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQ
RV9JTlBLSUxMOgotCQkvKgotCQkgKiBUaGUgaW5wIGlzIHNldHVwIHRvIGRpZS4gV2UgcmUtdXNl
IHRoZSBzaWduYXR1cmVfY2hhZ2UKLQkJICogdGltZXIgc2luY2UgdGhhdCBoYXMgc3RvcHBlZCBh
bmQgd2UgYXJlIGluIHRoZSBHT05FCi0JCSAqIHN0YXRlLgotCQkgKi8KLQkJdG1yID0gJmlucC0+
c2N0cF9lcC5zaWduYXR1cmVfY2hhbmdlOwotCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1MoU0NU
UF9JTlBfS0lMTF9USU1FT1VUKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUEFU
SE1UVVJBSVNFOgotCQkvKgotCQkgKiBIZXJlIHdlIHVzZSB0aGUgdmFsdWUgZm91bmQgaW4gdGhl
IEVQIGZvciBQTVRVIHVzdXN1YWxseQotCQkgKiBhYm91dCAxMCBtaW51dGVzLgotCQkgKi8KLQkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJfQot
CQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PX1BNVFVEKSB7Ci0JCQlyZXR1cm47
Ci0JCX0KLQkJdG9fdGlja3MgPSBpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9U
SU1FUl9QTVRVXTsKLQkJdG1yID0gJm5ldC0+cG10dV90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV05BQ0s6Ci0JCS8qIEhlcmUgd2UgdXNlIHRoZSBSVE8gb2Yg
dGhlIGRlc3RpbmF0aW9uICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwp
KSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJCXRvX3RpY2tz
ID0gTVNFQ19UT19USUNLUyhzdGNiLT5hc29jLmluaXRpYWxfcnRvKTsKLQkJfSBlbHNlIHsKLQkJ
CXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhuZXQtPlJUTyk7Ci0JCX0KLQkJdG1yID0gJm5ldC0+
cnh0X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJE
OgotCQkvKgotCQkgKiBIZXJlIHdlIHVzZSB0aGUgZW5kcG9pbnRzIHNodXRkb3duIGd1YXJkIHRp
bWVyIHVzdWFsbHkKLQkJICogYWJvdXQgMyBtaW51dGVzLgotCQkgKi8KLQkJaWYgKHN0Y2IgPT0g
TlVMTCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCWlmIChpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0
dGlja3NbU0NUUF9USU1FUl9NQVhTSFVURE9XTl0gPT0gMCkgewotCQkJdG9fdGlja3MgPSA1ICog
TVNFQ19UT19USUNLUyhzdGNiLT5hc29jLm1heHJ0byk7Ci0JCX0gZWxzZSB7Ci0JCQl0b190aWNr
cyA9IGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNIVVRET1dO
XTsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5zaHV0X2d1YXJkX3RpbWVyOwotCQlicmVhazsK
LQljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVDoKLQkJLyoKLQkJICogSGVyZSB0aGUgdGlt
ZXIgY29tZXMgZnJvbSB0aGUgc3RjYiBidXQgaXRzIHZhbHVlIGlzIGZyb20KLQkJICogdGhlIG5l
dCdzIFJUTy4KLQkJICovCi0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7
Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKG5ldC0+UlRPID09IDApIHsKLQkJCXRvX3RpY2tzID0g
TVNFQ19UT19USUNLUyhzdGNiLT5hc29jLmluaXRpYWxfcnRvKTsKLQkJfSBlbHNlIHsKLQkJCXRv
X3RpY2tzID0gTVNFQ19UT19USUNLUyhuZXQtPlJUTyk7Ci0JCX0KLQkJdG1yID0gJnN0Y2ItPmFz
b2Muc3RycmVzZXRfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FTQ09O
RjoKLQkJLyoKLQkJICogSGVyZSB0aGUgdGltZXIgY29tZXMgZnJvbSB0aGUgc3RjYiBidXQgaXRz
IHZhbHVlIGlzIGZyb20KLQkJICogdGhlIG5ldCdzIFJUTy4KLQkJICovCi0JCWlmICgoc3RjYiA9
PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKG5ldC0+
UlRPID09IDApIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhzdGNiLT5hc29jLmluaXRp
YWxfcnRvKTsKLQkJfSBlbHNlIHsKLQkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhuZXQtPlJU
Tyk7Ci0JCX0KLQkJdG1yID0gJnN0Y2ItPmFzb2MuYXNjb25mX3RpbWVyOwotCQlicmVhazsKLQlj
YXNlIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQ6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8
fCAobmV0ICE9IE5VTEwpKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdG9fdGlja3MgPSBNU0VDX1RP
X1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8pOwotCQl0bXIgPSAmc3RjYi0+YXNvYy5kZWxl
dGVfcHJpbV90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVVUT0NMT1NF
OgotCQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJaWYgKHN0Y2ItPmFz
b2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgPT0gMCkgewotCQkJLyoKLQkJCSAqIFJlYWxseSBhbiBl
cnJvciBzaW5jZSBzdGNiIGlzIE5PVCBzZXQgdG8KLQkJCSAqIGF1dG9jbG9zZQotCQkJICovCi0J
CQlyZXR1cm47Ci0JCX0KLQkJdG9fdGlja3MgPSBzdGNiLT5hc29jLnNjdHBfYXV0b2Nsb3NlX3Rp
Y2tzOwotCQl0bXIgPSAmc3RjYi0+YXNvYy5hdXRvY2xvc2VfdGltZXI7Ci0JCWJyZWFrOwotCWRl
ZmF1bHQ6Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIlczogVW5rbm93biB0aW1lciB0
eXBlICVkXG4iLAotCQkJX19mdW5jX18sIHRfdHlwZSk7Ci0JCXJldHVybjsKLQkJYnJlYWs7Ci0J
fQotCWlmICgodG9fdGlja3MgPD0gMCkgfHwgKHRtciA9PSBOVUxMKSkgewotCQlTQ1RQREJHKFND
VFBfREVCVUdfVElNRVIxLCAiJXM6ICVkOnNvZnR3YXJlIGVycm9yIHRvX3RpY2tzOiVkIHRtcjol
cCBub3Qgc2V0ID8/XG4iLAotCQkJX19mdW5jX18sIHRfdHlwZSwgdG9fdGlja3MsICh2b2lkICop
dG1yKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZ0bXItPnRp
bWVyKSkgewotCQkvKgotCQkgKiB3ZSBkbyBOT1QgYWxsb3cgeW91IHRvIGhhdmUgaXQgYWxyZWFk
eSBydW5uaW5nLiBpZiBpdCBpcwotCQkgKiB3ZSBsZWF2ZSB0aGUgY3VycmVudCBvbmUgdXAgdW5j
aGFuZ2VkCi0JCSAqLwotCQlyZXR1cm47Ci0JfQotCS8qIEF0IHRoaXMgcG9pbnQgd2UgY2FuIHBy
b2NlZWQgKi8KLQlpZiAodF90eXBlID09IFNDVFBfVElNRVJfVFlQRV9TRU5EKSB7Ci0JCXN0Y2It
PmFzb2MubnVtX3NlbmRfdGltZXJzX3VwKys7Ci0JfQotCXRtci0+c3RvcHBlZF9mcm9tID0gMDsK
LQl0bXItPnR5cGUgPSB0X3R5cGU7Ci0JdG1yLT5lcCA9ICh2b2lkICopaW5wOwotCXRtci0+dGNi
ID0gKHZvaWQgKilzdGNiOwotCXRtci0+bmV0ID0gKHZvaWQgKiluZXQ7Ci0JdG1yLT5zZWxmID0g
KHZvaWQgKil0bXI7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDAwCi0JdG1yLT52bmV0ID0gKHZvaWQgKiljdXJ2bmV0OwotI2VuZGlmCi0jaWZu
ZGVmIF9fUGFuZGFfXwotCXRtci0+dGlja3MgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7Ci0jZW5k
aWYKLQkodm9pZClTQ1RQX09TX1RJTUVSX1NUQVJUKCZ0bXItPnRpbWVyLCB0b190aWNrcywgc2N0
cF90aW1lb3V0X2hhbmRsZXIsIHRtcik7Ci0JcmV0dXJuOwotfQotCi12b2lkCi1zY3RwX3RpbWVy
X3N0b3AoaW50IHRfdHlwZSwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAotICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDMyX3QgZnJvbSkKLXsKLQlz
dHJ1Y3Qgc2N0cF90aW1lciAqdG1yOwotCi0JaWYgKCh0X3R5cGUgIT0gU0NUUF9USU1FUl9UWVBF
X0FERFJfV1EpICYmCi0JICAgIChpbnAgPT0gTlVMTCkpCi0JCXJldHVybjsKLQotCXRtciA9IE5V
TEw7Ci0JaWYgKHN0Y2IpIHsKLQkJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7Ci0JfQotCXN3
aXRjaCAodF90eXBlKSB7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfWkVST19DT1BZOgotCQl0bXIg
PSAmaW5wLT5zY3RwX2VwLnplcm9fY29weV90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfWkNPUFlfU0VORFE6Ci0JCXRtciA9ICZpbnAtPnNjdHBfZXAuemVyb19jb3B5X3Nl
bmRxX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BRERSX1dROgotCQl0
bXIgPSAmU0NUUF9CQVNFX0lORk8oYWRkcl93cV90aW1lcik7Ci0JCWJyZWFrOwotCWNhc2UgU0NU
UF9USU1FUl9UWVBFX1NFTkQ6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwp
KSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlicmVhazsK
LQljYXNlIFNDVFBfVElNRVJfVFlQRV9JTklUOgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5l
dCA9PSBOVUxMKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsK
LQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfUkVDVjoKLQkJaWYgKHN0Y2IgPT0gTlVM
TCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLmRhY2tfdGltZXI7Ci0J
CWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgotCQlpZiAoKHN0Y2IgPT0g
TlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZuZXQt
PnJ4dF90aW1lcjsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgot
CQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewotCQkJcmV0dXJuOwotCQl9
Ci0JCXRtciA9ICZuZXQtPmhiX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQ
RV9DT09LSUU6Ci0JCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7Ci0JCQly
ZXR1cm47Ci0JCX0KLQkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFND
VFBfVElNRVJfVFlQRV9ORVdDT09LSUU6Ci0JCS8qIG5vdGhpbmcgbmVlZGVkIGJ1dCB0aGUgZW5k
cG9pbnQgaGVyZSAqLwotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7Ci0J
CS8qCi0JCSAqIFdlIHJlLXVzZSB0aGUgbmV3Y29va2llIHRpbWVyIGZvciB0aGUgSU5QIGtpbGwg
dGltZXIuIFdlCi0JCSAqIG11c3QgYXNzdXJlIHRoYXQgd2UgZG8gbm90IGtpbGwgaXQgYnkgYWNj
aWRlbnQuCi0JCSAqLwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoK
LQkJLyoKLQkJICogU3RvcCB0aGUgYXNvYyBraWxsIHRpbWVyLgotCQkgKi8KLQkJaWYgKHN0Y2Ig
PT0gTlVMTCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0
X3RpbWVyOwotCQlicmVhazsKLQotCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOUEtJTEw6Ci0JCS8q
Ci0JCSAqIFRoZSBpbnAgaXMgc2V0dXAgdG8gZGllLiBXZSByZS11c2UgdGhlIHNpZ25hdHVyZV9j
aGFnZQotCQkgKiB0aW1lciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVkIGFuZCB3ZSBhcmUgaW4gdGhl
IEdPTkUKLQkJICogc3RhdGUuCi0JCSAqLwotCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVy
ZV9jaGFuZ2U7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRToK
LQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKLQkJCXJldHVybjsKLQkJ
fQotCQl0bXIgPSAmbmV0LT5wbXR1X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJf
VFlQRV9TSFVURE9XTkFDSzoKLQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkp
IHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7Ci0JCWJyZWFrOwot
CWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6Ci0JCWlmIChzdGNiID09IE5VTEwp
IHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5zaHV0X2d1YXJkX3RpbWVy
OwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVDoKLQkJaWYgKHN0Y2Ig
PT0gTlVMTCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0
X3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9BU0NPTkY6Ci0JCWlmIChz
dGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIgPSAmc3RjYi0+YXNvYy5hc2Nv
bmZfdGltZXI7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRDoK
LQkJaWYgKHN0Y2IgPT0gTlVMTCkgewotCQkJcmV0dXJuOwotCQl9Ci0JCXRtciA9ICZzdGNiLT5h
c29jLmRlbGV0ZV9wcmltX3RpbWVyOwotCQlicmVhazsKLQljYXNlIFNDVFBfVElNRVJfVFlQRV9B
VVRPQ0xPU0U6Ci0JCWlmIChzdGNiID09IE5VTEwpIHsKLQkJCXJldHVybjsKLQkJfQotCQl0bXIg
PSAmc3RjYi0+YXNvYy5hdXRvY2xvc2VfdGltZXI7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCVND
VFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIlczogVW5rbm93biB0aW1lciB0eXBlICVkXG4iLAot
CQkJX19mdW5jX18sIHRfdHlwZSk7Ci0JCWJyZWFrOwotCX0KLQlpZiAodG1yID09IE5VTEwpIHsK
LQkJcmV0dXJuOwotCX0KLQlpZiAoKHRtci0+dHlwZSAhPSB0X3R5cGUpICYmIHRtci0+dHlwZSkg
ewotCQkvKgotCQkgKiBPayB3ZSBoYXZlIGEgdGltZXIgdGhhdCBpcyB1bmRlciBqb2ludCB1c2Uu
IENvb2tpZSB0aW1lcgotCQkgKiBwZXIgY2hhbmNlIHdpdGggdGhlIFNFTkQgdGltZXIuIFdlIHRo
ZXJlZm9yZSBhcmUgTk9UCi0JCSAqIHJ1bm5pbmcgdGhlIHRpbWVyIHRoYXQgdGhlIGNhbGxlciB3
YW50cyBzdG9wcGVkLiAgU28ganVzdAotCQkgKiByZXR1cm4uCi0JCSAqLwotCQlyZXR1cm47Ci0J
fQotCWlmICgodF90eXBlID09IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAmJiAoc3RjYiAhPSBOVUxM
KSkgewotCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cC0tOwotCQlpZiAoc3RjYi0+YXNv
Yy5udW1fc2VuZF90aW1lcnNfdXAgPCAwKSB7Ci0JCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVy
c191cCA9IDA7Ci0JCX0KLQl9Ci0JdG1yLT5zZWxmID0gTlVMTDsKLQl0bXItPnN0b3BwZWRfZnJv
bSA9IGZyb207Ci0JKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZ0bXItPnRpbWVyKTsKLQlyZXR1
cm47Ci19Ci0KLXVpbnQzMl90Ci1zY3RwX2NhbGN1bGF0ZV9sZW4oc3RydWN0IG1idWYgKm0pCi17
Ci0JdWludDMyX3QgdGxlbiA9IDA7Ci0Jc3RydWN0IG1idWYgKmF0OwotCi0JYXQgPSBtOwotCXdo
aWxlIChhdCkgewotCQl0bGVuICs9IFNDVFBfQlVGX0xFTihhdCk7Ci0JCWF0ID0gU0NUUF9CVUZf
TkVYVChhdCk7Ci0JfQotCXJldHVybiAodGxlbik7Ci19Ci0KLXZvaWQKLXNjdHBfbXR1X3NpemVf
cmVzZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYywgdWludDMyX3QgbXR1KQotewotCS8qCi0JICogUmVzZXQgdGhlIFAtTVRVIHNpemUg
b24gdGhpcyBhc3NvY2lhdGlvbiwgdGhpcyBpbnZvbHZlcyBjaGFuZ2luZwotCSAqIHRoZSBhc29j
IE1UVSwgZ29pbmcgdGhyb3VnaCBBTlkgY2h1bmsrb3ZlcmhlYWQgbGFyZ2VyIHRoYW4gbXR1IHRv
Ci0JICogYWxsb3cgdGhlIERGIGZsYWcgdG8gYmUgY2xlYXJlZC4KLQkgKi8KLQlzdHJ1Y3Qgc2N0
cF90bWl0X2NodW5rICpjaGs7Ci0JdW5zaWduZWQgaW50IGVmZl9tdHUsIG92aDsKLQotCWFzb2Mt
PnNtYWxsZXN0X210dSA9IG10dTsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpIHsKLQkJb3ZoID0gU0NUUF9NSU5fT1ZFUkhFQUQ7Ci0JfSBlbHNlIHsKLQkJ
b3ZoID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7Ci0JfQotCWVmZl9tdHUgPSBtdHUgLSBvdmg7Ci0J
VEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKLQkJaWYg
KGNoay0+c2VuZF9zaXplID4gZWZmX210dSkgewotCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFH
U19GUkFHTUVOVF9PSzsKLQkJfQotCX0KLQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRf
cXVldWUsIHNjdHBfbmV4dCkgewotCQlpZiAoY2hrLT5zZW5kX3NpemUgPiBlZmZfbXR1KSB7Ci0J
CQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOwotCQl9Ci0JfQotfQotCi0K
LS8qCi0gKiBnaXZlbiBhbiBhc3NvY2lhdGlvbiBhbmQgc3RhcnRpbmcgdGltZSBvZiB0aGUgY3Vy
cmVudCBSVFQgcGVyaW9kIHJldHVybgotICogUlRPIGluIG51bWJlciBvZiBtc2VjcyBuZXQgc2hv
dWxkIHBvaW50IHRvIHRoZSBjdXJyZW50IG5ldHdvcmsKLSAqLwotCi11aW50MzJfdAotc2N0cF9j
YWxjdWxhdGVfcnRvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLQkJICAgc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2MsCi0JCSAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKLQkJICAgc3RydWN0
IHRpbWV2YWwgKnRvbGQsCi0JCSAgIGludCBzYWZlLCBpbnQgcnR0X2Zyb21fc2FjaykKLXsKLQkv
Ki0KLQkgKiBnaXZlbiBhbiBhc3NvY2lhdGlvbiBhbmQgdGhlIHN0YXJ0aW5nIHRpbWUgb2YgdGhl
IGN1cnJlbnQgUlRUCi0JICogcGVyaW9kIChpbiB2YWx1ZTEvdmFsdWUyKSByZXR1cm4gUlRPIGlu
IG51bWJlciBvZiBtc2Vjcy4KLQkgKi8KLQlpbnQzMl90IHJ0dDsgLyogUlRUIGluIG1zICovCi0J
dWludDMyX3QgbmV3X3J0bzsKLQlpbnQgZmlyc3RfbWVhc3VyZSA9IDA7Ci0Jc3RydWN0IHRpbWV2
YWwgbm93LCB0aGVuLCAqb2xkOwotCi0JLyogQ29weSBpdCBvdXQgZm9yIHNwYXJjNjQgKi8KLQlp
ZiAoc2FmZSA9PSBzY3RwX2FsaWduX3Vuc2FmZV9tYWtlY29weSkgewotCQlvbGQgPSAmdGhlbjsK
LQkJbWVtY3B5KCZ0aGVuLCB0b2xkLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLQl9IGVsc2Ug
aWYgKHNhZmUgPT0gc2N0cF9hbGlnbl9zYWZlX25vY29weSkgewotCQlvbGQgPSB0b2xkOwotCX0g
ZWxzZSB7Ci0JCS8qIGVycm9yICovCi0JCVNDVFBfUFJJTlRGKCJIdWgsIGJhZCBydG8gY2FsYyBj
YWxsXG4iKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0JLyoqKioqKioqKioqKioqKioqKioqKioqKi8K
LQkvKiAxLiBjYWxjdWxhdGUgbmV3IFJUVCAqLwotCS8qKioqKioqKioqKioqKioqKioqKioqKiov
Ci0JLyogZ2V0IHRoZSBjdXJyZW50IHRpbWUgKi8KLQlpZiAoc3RjYi0+YXNvYy51c2VfcHJlY2lz
ZV90aW1lKSB7Ci0JCSh2b2lkKVNDVFBfR0VUUFRJTUVfVElNRVZBTCgmbm93KTsKLQl9IGVsc2Ug
ewotCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKLQl9Ci0JdGltZXZhbHN1Yigm
bm93LCBvbGQpOwotCS8qIHN0b3JlIHRoZSBjdXJyZW50IFJUVCBpbiB1cyAqLwotCW5ldC0+cnR0
ID0gKHVpbnQ2NF90KTEwMDAwMDAgKiAodWludDY0X3Qpbm93LnR2X3NlYyArCi0JICAgICAgICAg
ICAodWludDY0X3Qpbm93LnR2X3VzZWM7Ci0JLyogY29tcHV0ZSBydHQgaW4gbXMgKi8KLQlydHQg
PSAoaW50MzJfdCkobmV0LT5ydHQgLyAxMDAwKTsKLQlpZiAoKGFzb2MtPmNjX2Z1bmN0aW9ucy5z
Y3RwX3J0dF9jYWxjdWxhdGVkKSAmJiAocnR0X2Zyb21fc2FjayA9PSBTQ1RQX1JUVF9GUk9NX0RB
VEEpKSB7Ci0JCS8qIFRlbGwgdGhlIENDIG1vZHVsZSB0aGF0IGEgbmV3IHVwZGF0ZSBoYXMganVz
dCBvY2N1cnJlZCBmcm9tIGEgc2FjayAqLwotCQkoKmFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX3J0
dF9jYWxjdWxhdGVkKShzdGNiLCBuZXQsICZub3cpOwotCX0KLQkvKiBEbyB3ZSBuZWVkIHRvIGRl
dGVybWluZSB0aGUgbGFuPyBXZSBkbyB0aGlzIG9ubHkKLQkgKiBvbiBzYWNrcyBpLmUuIFJUVCBi
ZWluZyBkZXRlcm1pbmVkIGZyb20gZGF0YSBub3QKLQkgKiBub24tZGF0YSAoSEIvSU5JVC0+SU5J
VEFDSykuCi0JICovCi0JaWYgKChydHRfZnJvbV9zYWNrID09IFNDVFBfUlRUX0ZST01fREFUQSkg
JiYKLQkgICAgKG5ldC0+bGFuX3R5cGUgPT0gU0NUUF9MQU5fVU5LTk9XTikpIHsKLQkJaWYgKG5l
dC0+cnR0ID4gU0NUUF9MT0NBTF9MQU5fUlRUKSB7Ci0JCQluZXQtPmxhbl90eXBlID0gU0NUUF9M
QU5fSU5URVJORVQ7Ci0JCX0gZWxzZSB7Ci0JCQluZXQtPmxhbl90eXBlID0gU0NUUF9MQU5fTE9D
QUw7Ci0JCX0KLQl9Ci0KLQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCS8qIDIuIHVw
ZGF0ZSBSVFRWQVIgJiBTUlRUICovCi0JLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQkv
Ki0KLQkgKiBDb21wdXRlIHRoZSBzY2FsZWQgYXZlcmFnZSBsYXN0c2EgYW5kIHRoZQotCSAqIHNj
YWxlZCB2YXJpYW5jZSBsYXN0c3YgYXMgZGVzY3JpYmVkIGluIHZhbiBKYWNvYnNvbgotCSAqIFBh
cGVyICJDb25nZXN0aW9uIEF2b2lkYW5jZSBhbmQgQ29udHJvbCIsIEFubmV4IEEuCi0JICoKLQkg
KiAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpIGlzIHRoZSBzcnR0Ci0JICogKG5ldC0+
bGFzdHNhID4+IFNDVFBfUlRUX1ZBUl9TSElGVCkgaXMgdGhlIHJ0dHZhcgotCSAqLwotCWlmIChu
ZXQtPlJUT19tZWFzdXJlZCkgewotCQlydHQgLT0gKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NI
SUZUKTsKLQkJbmV0LT5sYXN0c2EgKz0gcnR0OwotCQlpZiAocnR0IDwgMCkgewotCQkJcnR0ID0g
LXJ0dDsKLQkJfQotCQlydHQgLT0gKG5ldC0+bGFzdHN2ID4+IFNDVFBfUlRUX1ZBUl9TSElGVCk7
Ci0JCW5ldC0+bGFzdHN2ICs9IHJ0dDsKLQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfUlRUVkFSX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlydG9fbG9nZ2lu
ZyhuZXQsIFNDVFBfTE9HX1JUVFZBUik7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBGaXJzdCBSVE8g
bWVhc3VybWVudCAqLwotCQluZXQtPlJUT19tZWFzdXJlZCA9IDE7Ci0JCWZpcnN0X21lYXN1cmUg
PSAxOwotCQluZXQtPmxhc3RzYSA9IHJ0dCA8PCBTQ1RQX1JUVF9TSElGVDsKLQkJbmV0LT5sYXN0
c3YgPSAocnR0IC8gMikgPDwgU0NUUF9SVFRfVkFSX1NISUZUOwotCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9SVFRWQVJfTE9HR0lOR19FTkFCTEUpIHsK
LQkJCXJ0b19sb2dnaW5nKG5ldCwgU0NUUF9MT0dfSU5JVElBTF9SVFQpOwotCQl9Ci0JfQotCWlm
IChuZXQtPmxhc3RzdiA9PSAwKSB7Ci0JCW5ldC0+bGFzdHN2ID0gU0NUUF9DTE9DS19HUkFOVUxB
UklUWTsKLQl9Ci0JbmV3X3J0byA9IChuZXQtPmxhc3RzYSA+PiBTQ1RQX1JUVF9TSElGVCkgKyBu
ZXQtPmxhc3RzdjsKLQlpZiAoKG5ld19ydG8gPiBTQ1RQX1NBVF9ORVRXT1JLX01JTikgJiYKLQkg
ICAgKHN0Y2ItPmFzb2Muc2F0X25ldHdvcmtfbG9ja291dCA9PSAwKSkgewotCQlzdGNiLT5hc29j
LnNhdF9uZXR3b3JrID0gMTsKLQl9IGVsc2UgaWYgKCghZmlyc3RfbWVhc3VyZSkgJiYgc3RjYi0+
YXNvYy5zYXRfbmV0d29yaykgewotCQlzdGNiLT5hc29jLnNhdF9uZXR3b3JrID0gMDsKLQkJc3Rj
Yi0+YXNvYy5zYXRfbmV0d29ya19sb2Nrb3V0ID0gMTsKLQl9Ci0JLyogYm91bmQgaXQsIHBlciBD
Ni9DNyBpbiBTZWN0aW9uIDUuMy4xICovCi0JaWYgKG5ld19ydG8gPCBzdGNiLT5hc29jLm1pbnJ0
bykgewotCQluZXdfcnRvID0gc3RjYi0+YXNvYy5taW5ydG87Ci0JfQotCWlmIChuZXdfcnRvID4g
c3RjYi0+YXNvYy5tYXhydG8pIHsKLQkJbmV3X3J0byA9IHN0Y2ItPmFzb2MubWF4cnRvOwotCX0K
LQkvKiB3ZSBhcmUgbm93IHJldHVybmluZyB0aGUgUlRPICovCi0JcmV0dXJuIChuZXdfcnRvKTsK
LX0KLQotLyoKLSAqIHJldHVybiBhIHBvaW50ZXIgdG8gYSBjb250aWd1b3VzIHBpZWNlIG9mIGRh
dGEgZnJvbSB0aGUgZ2l2ZW4gbWJ1ZiBjaGFpbgotICogc3RhcnRpbmcgYXQgJ29mZicgZm9yICds
ZW4nIGJ5dGVzLiAgSWYgdGhlIGRlc2lyZWQgcGllY2Ugc3BhbnMgbW9yZSB0aGFuCi0gKiBvbmUg
bWJ1ZiwgYSBjb3B5IGlzIG1hZGUgYXQgJ3B0cicuIGNhbGxlciBtdXN0IGVuc3VyZSB0aGF0IHRo
ZSBidWZmZXIgc2l6ZQotICogaXMgPj0gJ2xlbicgcmV0dXJucyBOVUxMIGlmIHRoZXJlIHRoZXJl
IGlzbid0ICdsZW4nIGJ5dGVzIGluIHRoZSBjaGFpbi4KLSAqLwotY2FkZHJfdAotc2N0cF9tX2dl
dHB0cihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZiwgaW50IGxlbiwgdWludDhfdCAqIGluX3B0cikK
LXsKLQl1aW50MzJfdCBjb3VudDsKLQl1aW50OF90ICpwdHI7Ci0KLQlwdHIgPSBpbl9wdHI7Ci0J
aWYgKChvZmYgPCAwKSB8fCAobGVuIDw9IDApKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JLyogZmlu
ZCB0aGUgZGVzaXJlZCBzdGFydCBsb2NhdGlvbiAqLwotCXdoaWxlICgobSAhPSBOVUxMKSAmJiAo
b2ZmID4gMCkpIHsKLQkJaWYgKG9mZiA8IFNDVFBfQlVGX0xFTihtKSkKLQkJCWJyZWFrOwotCQlv
ZmYgLT0gU0NUUF9CVUZfTEVOKG0pOwotCQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQl9Ci0JaWYg
KG0gPT0gTlVMTCkKLQkJcmV0dXJuIChOVUxMKTsKLQotCS8qIGlzIHRoZSBjdXJyZW50IG1idWYg
bGFyZ2UgZW5vdWdoIChlZy4gY29udGlndW91cyk/ICovCi0JaWYgKChTQ1RQX0JVRl9MRU4obSkg
LSBvZmYpID49IGxlbikgewotCQlyZXR1cm4gKG10b2QobSwgY2FkZHJfdCkgKyBvZmYpOwotCX0g
ZWxzZSB7Ci0JCS8qIGVsc2UsIGl0IHNwYW5zIG1vcmUgdGhhbiBvbmUgbWJ1Ziwgc28gc2F2ZSBh
IHRlbXAgY29weS4uLiAqLwotCQl3aGlsZSAoKG0gIT0gTlVMTCkgJiYgKGxlbiA+IDApKSB7Ci0J
CQljb3VudCA9IG1pbihTQ1RQX0JVRl9MRU4obSkgLSBvZmYsIGxlbik7Ci0JCQltZW1jcHkocHRy
LCBtdG9kKG0sIGNhZGRyX3QpICsgb2ZmLCBjb3VudCk7Ci0JCQlsZW4gLT0gY291bnQ7Ci0JCQlw
dHIgKz0gY291bnQ7Ci0JCQlvZmYgPSAwOwotCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCX0K
LQkJaWYgKChtID09IE5VTEwpICYmIChsZW4gPiAwKSkKLQkJCXJldHVybiAoTlVMTCk7Ci0JCWVs
c2UKLQkJCXJldHVybiAoKGNhZGRyX3QpaW5fcHRyKTsKLQl9Ci19Ci0KLQotCi1zdHJ1Y3Qgc2N0
cF9wYXJhbWhkciAqCi1zY3RwX2dldF9uZXh0X3BhcmFtKHN0cnVjdCBtYnVmICptLAotICAgIGlu
dCBvZmZzZXQsCi0gICAgc3RydWN0IHNjdHBfcGFyYW1oZHIgKnB1bGwsCi0gICAgaW50IHB1bGxf
bGltaXQpCi17Ci0JLyogVGhpcyBqdXN0IHByb3ZpZGVzIGEgdHlwZWQgc2lnbmF0dXJlIHRvIFBl
dGVyJ3MgUHVsbCByb3V0aW5lICovCi0JcmV0dXJuICgoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcHVsbF9saW1pdCwKLQkgICAgKHVpbnQ4X3QgKikgcHVs
bCkpOwotfQotCi0KLXN0cnVjdCBtYnVmICoKLXNjdHBfYWRkX3BhZF90b21idWYoc3RydWN0IG1i
dWYgKm0sIGludCBwYWRsZW4pCi17Ci0Jc3RydWN0IG1idWYgKm1fbGFzdDsKLQljYWRkcl90IGRw
OwotCi0JaWYgKHBhZGxlbiA+IDMpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKHBhZGxl
biA8PSBNX1RSQUlMSU5HU1BBQ0UobSkpIHsKLQkJLyoKLQkJICogVGhlIGVhc3kgd2F5LiBXZSBo
b3BlIHRoZSBtYWpvcml0eSBvZiB0aGUgdGltZSB3ZSBoaXQKLQkJICogaGVyZSA6KQotCQkgKi8K
LQkJbV9sYXN0ID0gbTsKLQl9IGVsc2UgewotCQkvKiBIYXJkIHdheSB3ZSBtdXN0IGdyb3cgdGhl
IG1idWYgY2hhaW4gKi8KLQkJbV9sYXN0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHBhZGxlbiwg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCQlpZiAobV9sYXN0ID09IE5VTEwpIHsKLQkJCXJl
dHVybiAoTlVMTCk7Ci0JCX0KLQkJU0NUUF9CVUZfTEVOKG1fbGFzdCkgPSAwOwotCQlTQ1RQX0JV
Rl9ORVhUKG1fbGFzdCkgPSBOVUxMOwotCQlTQ1RQX0JVRl9ORVhUKG0pID0gbV9sYXN0OwotCX0K
LQlkcCA9IG10b2QobV9sYXN0LCBjYWRkcl90KSArIFNDVFBfQlVGX0xFTihtX2xhc3QpOwotCVND
VFBfQlVGX0xFTihtX2xhc3QpICs9IHBhZGxlbjsKLQltZW1zZXQoZHAsIDAsIHBhZGxlbik7Ci0J
cmV0dXJuIChtX2xhc3QpOwotfQotCi1zdHJ1Y3QgbWJ1ZiAqCi1zY3RwX3BhZF9sYXN0bWJ1Zihz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IHBhZHZhbCwgc3RydWN0IG1idWYgKmxhc3RfbWJ1ZikKLXsKLQkv
KiBmaW5kIHRoZSBsYXN0IG1idWYgaW4gY2hhaW4gYW5kIHBhZCBpdCAqLwotCXN0cnVjdCBtYnVm
ICptX2F0OwotCi0JaWYgKGxhc3RfbWJ1ZiAhPSBOVUxMKSB7Ci0JCXJldHVybiAoc2N0cF9hZGRf
cGFkX3RvbWJ1ZihsYXN0X21idWYsIHBhZHZhbCkpOwotCX0gZWxzZSB7Ci0JCWZvciAobV9hdCA9
IG07IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7Ci0JCQlpZiAoU0NUUF9CVUZf
TkVYVChtX2F0KSA9PSBOVUxMKSB7Ci0JCQkJcmV0dXJuIChzY3RwX2FkZF9wYWRfdG9tYnVmKG1f
YXQsIHBhZHZhbCkpOwotCQkJfQotCQl9Ci0JfQotCXJldHVybiAoTlVMTCk7Ci19Ci0KLXN0YXRp
YyB2b2lkCi1zY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UodWludDE2X3Qgc3RhdGUsIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKLSAgICB1aW50MTZfdCBlcnJvciwgc3RydWN0IHNjdHBfYWJvcnRfY2h1
bmsgKmFib3J0LCB1aW50OF90IGZyb21fcGVlciwgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVk
KF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9V
TlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3RydWN0
IHNjdHBfYXNzb2NfY2hhbmdlICpzYWM7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNv
bnRyb2w7Ci0JdW5zaWduZWQgaW50IG5vdGlmX2xlbjsKLQl1aW50MTZfdCBhYm9ydF9sZW47Ci0J
dW5zaWduZWQgaW50IGk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYKLQotCWlmIChzdGNi
ID09IE5VTEwpIHsKLQkJcmV0dXJuOwotCX0KLQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24o
c3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCkpIHsKLQkJ
bm90aWZfbGVuID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdl
KTsKLQkJaWYgKGFib3J0ICE9IE5VTEwpIHsKLQkJCWFib3J0X2xlbiA9IG50b2hzKGFib3J0LT5j
aC5jaHVua19sZW5ndGgpOwotCQl9IGVsc2UgewotCQkJYWJvcnRfbGVuID0gMDsKLQkJfQotCQlp
ZiAoKHN0YXRlID09IFNDVFBfQ09NTV9VUCkgfHwgKHN0YXRlID09IFNDVFBfUkVTVEFSVCkpIHsK
LQkJCW5vdGlmX2xlbiArPSBTQ1RQX0FTU09DX1NVUFBPUlRTX01BWDsKLQkJfSBlbHNlIGlmICgo
c3RhdGUgPT0gU0NUUF9DT01NX0xPU1QpIHx8IChzdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09D
KSkgewotCQkJbm90aWZfbGVuICs9IGFib3J0X2xlbjsKLQkJfQotCQltX25vdGlmeSA9IHNjdHBf
Z2V0X21idWZfZm9yX21zZyhub3RpZl9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJ
aWYgKG1fbm90aWZ5ID09IE5VTEwpIHsKLQkJCS8qIFJldHJ5IHdpdGggc21hbGxlciB2YWx1ZS4g
Ki8KLQkJCW5vdGlmX2xlbiA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29j
X2NoYW5nZSk7Ci0JCQltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhub3RpZl9sZW4s
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQkJCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7Ci0J
CQkJZ290byBzZXRfZXJyb3I7Ci0JCQl9Ci0JCX0KLQkJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkg
PSBOVUxMOwotCQlzYWMgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2Ug
Kik7Ci0JCW1lbXNldChzYWMsIDAsIG5vdGlmX2xlbik7Ci0JCXNhYy0+c2FjX3R5cGUgPSBTQ1RQ
X0FTU09DX0NIQU5HRTsKLQkJc2FjLT5zYWNfZmxhZ3MgPSAwOwotCQlzYWMtPnNhY19sZW5ndGgg
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKLQkJc2FjLT5zYWNfc3RhdGUgPSBz
dGF0ZTsKLQkJc2FjLT5zYWNfZXJyb3IgPSBlcnJvcjsKLQkJLyogWFhYIHZlcmlmeSB0aGVzZSBz
dHJlYW0gY291bnRzICovCi0JCXNhYy0+c2FjX291dGJvdW5kX3N0cmVhbXMgPSBzdGNiLT5hc29j
LnN0cmVhbW91dGNudDsKLQkJc2FjLT5zYWNfaW5ib3VuZF9zdHJlYW1zID0gc3RjYi0+YXNvYy5z
dHJlYW1pbmNudDsKLQkJc2FjLT5zYWNfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2Ip
OwotCQlpZiAobm90aWZfbGVuID4gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSkpIHsK
LQkJCWlmICgoc3RhdGUgPT0gU0NUUF9DT01NX1VQKSB8fCAoc3RhdGUgPT0gU0NUUF9SRVNUQVJU
KSkgewotCQkJCWkgPSAwOwotCQkJCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0g
MSkgewotCQkJCQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSOwot
CQkJCX0KLQkJCQlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCQkJCXNh
Yy0+c2FjX2luZm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVVUSDsKLQkJCQl9Ci0JCQkJ
aWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7Ci0JCQkJCXNhYy0+c2FjX2lu
Zm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GOwotCQkJCX0KLQkJCQlpZiAoc3Rj
Yi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkgewotCQkJCQlzYWMtPnNhY19pbmZvW2krK10g
PSBTQ1RQX0FTU09DX1NVUFBPUlRTX0lOVEVSTEVBVklORzsKLQkJCQl9Ci0JCQkJc2FjLT5zYWNf
aW5mb1tpKytdID0gU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRjsKLQkJCQlpZiAoc3RjYi0+
YXNvYy5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMSkgewotCQkJCQlzYWMtPnNhY19pbmZvW2krK10g
PSBTQ1RQX0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJRzsKLQkJCQl9Ci0JCQkJc2FjLT5zYWNfbGVu
Z3RoICs9IGk7Ci0JCQl9IGVsc2UgaWYgKChzdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkgfHwgKHN0
YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSB7Ci0JCQkJbWVtY3B5KHNhYy0+c2FjX2luZm8s
IGFib3J0LCBhYm9ydF9sZW4pOwotCQkJCXNhYy0+c2FjX2xlbmd0aCArPSBhYm9ydF9sZW47Ci0J
CQl9Ci0JCX0KLQkJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNhYy0+c2FjX2xlbmd0aDsKLQkJ
Y29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBz
dGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1fbm90aWZ5KTsKLQkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgewotCQkJY29udHJvbC0+
bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQkJCWNvbnRyb2wtPnNwZWNfZmxhZ3Mg
PSBNX05PVElGSUNBVElPTjsKLQkJCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwotCQkJY29u
dHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0JCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5z
Y3RwX2VwLCBzdGNiLAotCQkJICAgICAgICAgICAgICAgICAgY29udHJvbCwKLQkJCSAgICAgICAg
ICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19O
T1RfSEVMRCwKLQkJCSAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Ci0JCX0gZWxzZSB7Ci0J
CQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOwotCQl9Ci0JfQotCS8qCi0JICogRm9yIDEtdG8tMSBz
dHlsZSBzb2NrZXRzLCB3ZSBzZW5kIHVwIGFuZCBlcnJvciB3aGVuIGFuIEFCT1JUCi0JICogY29t
ZXMgaW4uCi0JICovCi1zZXRfZXJyb3I6Ci0JaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgotCSAgICAoKHN0YXRlID09
IFNDVFBfQ09NTV9MT1NUKSB8fCAoc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpKSB7Ci0J
CVNPQ0tfTE9DSyhzdGNiLT5zY3RwX3NvY2tldCk7Ci0JCWlmIChmcm9tX3BlZXIpIHsKLQkJCWlm
IChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkg
ewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBVVElMLCBFQ09OTlJFRlVTRUQpOwotCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19lcnJvciA9
IEVDT05OUkVGVVNFRDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVDT05OUkVTRVQpOwotCQkJCXN0Y2It
PnNjdHBfc29ja2V0LT5zb19lcnJvciA9IEVDT05OUkVTRVQ7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0J
CQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9X
QUlUKSB8fAotCQkJICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFVElNRURPVVQpOwotCQkJCXN0Y2ItPnNjdHBfc29j
a2V0LT5zb19lcnJvciA9IEVUSU1FRE9VVDsKLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVDT05OQUJPUlRF
RCk7Ci0JCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX2Vycm9yID0gRUNPTk5BQk9SVEVEOwotCQkJ
fQotCQl9Ci0JCVNPQ0tfVU5MT0NLKHN0Y2ItPnNjdHBfc29ja2V0KTsKLQl9Ci0JLyogV2FrZSBB
Tlkgc2xlZXBlcnMgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKLQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOwotCWlmICgh
c29fbG9ja2VkKSB7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0J
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVND
VFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NL
RVQpIHsKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9
Ci0jZW5kaWYKLQlpZiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVENQVFlQRSkgfHwKLQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkpICYmCi0JICAgICgoc3RhdGUgPT0gU0NUUF9DT01NX0xPU1Qp
IHx8IChzdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkpIHsKLQkJc29jYW50cmN2bW9yZShz
dGNiLT5zY3RwX3NvY2tldCk7Ci0JfQotCXNvcndha2V1cChzdGNiLT5zY3RwX3NvY2tldCk7Ci0J
c293d2FrZXVwKHN0Y2ItPnNjdHBfc29ja2V0KTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlpZiAoIXNvX2xvY2tlZCkgewotCQlTQ1RQ
X1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotCX0KLSNlbmRpZgotfQotCi1zdGF0aWMgdm9pZAotc2N0
cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90
IHN0YXRlLAotICAgIHN0cnVjdCBzb2NrYWRkciAqc2EsIHVpbnQzMl90IGVycm9yLCBpbnQgc29f
bG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0pCi17Ci0Jc3RydWN0IG1idWYgKm1f
bm90aWZ5OwotCXN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSAqc3BjOwotCXN0cnVjdCBzY3RwX3F1
ZXVlZF90b19yZWFkICpjb250cm9sOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgIHNj
dHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFH
U19SRUNWUEFERFJFVk5UKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47
Ci0JfQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0
cF9wYWRkcl9jaGFuZ2UpLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JaWYgKG1fbm90aWZ5
ID09IE5VTEwpCi0JCXJldHVybjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlzcGMg
PSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKik7Ci0JbWVtc2V0KHNw
YywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRyX2NoYW5nZSkpOwotCXNwYy0+c3BjX3R5cGUg
PSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U7Ci0Jc3BjLT5zcGNfZmxhZ3MgPSAwOwotCXNwYy0+c3Bj
X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpOwotCXN3aXRjaCAoc2Et
PnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0jaWZkZWYgSU5FVDYK
LQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BDQl9GTEFHU19O
RUVEU19NQVBQRURfVjQpKSB7Ci0JCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKilzYSwKLQkJCSAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kikmc3BjLT5zcGNfYWFkZHIpOwotCQl9IGVsc2UgewotCQkJbWVtY3B5KCZzcGMtPnNwY19hYWRk
ciwgc2EsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQkJfQotI2Vsc2UKLQkJbWVtY3B5
KCZzcGMtPnNwY19hYWRkciwgc2EsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSNlbmRp
ZgotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQl7Ci0j
aWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OwotI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KLQkJbWVtY3B5KCZzcGMtPnNw
Y19hYWRkciwgc2EsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0KLSNpZmRlZiBTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFCi0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGMt
PnNwY19hYWRkcjsKLQkJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRk
cikpIHsKLQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKLQkJCQkvKiByZWNvdmVy
IHNjb3BlX2lkIGZvciB1c2VyICovCi0jaWZkZWYgU0NUUF9LQU1FCi0JCQkJKHZvaWQpc2E2X3Jl
Y292ZXJzY29wZShzaW42KTsKLSNlbHNlCi0JCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42
LCAmc2luNi0+c2luNl9hZGRyLAotCQkJCQkJICAgICAgIE5VTEwpOwotI2VuZGlmCi0JCQl9IGVs
c2UgewotCQkJCS8qIGNsZWFyIGVtYmVkZGVkIHNjb3BlX2lkIGZvciB1c2VyICovCi0JCQkJaW42
X2NsZWFyc2NvcGUoJnNpbjYtPnNpbjZfYWRkcik7Ci0JCQl9Ci0JCX0KLSNlbmRpZiAvKiBTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFICovCi0JCWJyZWFrOwotCX0KLSNlbmRpZgotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLQljYXNlIEFGX0NPTk46Ci0JCW1lbWNweSgmc3BjLT5zcGNfYWFkZHIs
IHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKLQkJYnJlYWs7Ci0jZW5kaWYKLQlk
ZWZhdWx0OgotCQkvKiBUU05IICovCi0JCWJyZWFrOwotCX0KLQlzcGMtPnNwY19zdGF0ZSA9IHN0
YXRlOwotCXNwYy0+c3BjX2Vycm9yID0gZXJyb3I7Ci0Jc3BjLT5zcGNfYXNzb2NfaWQgPSBzY3Rw
X2dldF9hc3NvY2lkKHN0Y2IpOwotCi0JU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVM
TDsKLQotCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KLQljb250cm9sID0gc2N0cF9idWlsZF9yZWFk
cV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAw
LAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKLQlpZiAoY29u
dHJvbCA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0obV9ub3Rp
ZnkpOwotCQlyZXR1cm47Ci0JfQotCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25v
dGlmeSk7Ci0JY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOwotCS8qIG5vdCB0
aGF0IHdlIG5lZWQgdGhpcyAqLwotCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OwotCXNj
dHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCi0JICAgICAgICAgICAgICAgICAg
Y29udHJvbCwKLQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdiwg
MSwKLQkgICAgICAgICAgICAgICAgICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKLQkgICAgICAg
ICAgICAgICAgICBzb19sb2NrZWQpOwotfQotCi0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9z
ZW5kX2ZhaWxlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3Qgc2VudCwgdWludDMyX3Qg
ZXJyb3IsCi0gICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgc29fbG9ja2VkCi0j
aWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykK
LSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgKQotewotCXN0cnVjdCBtYnVmICptX25vdGlm
eTsKLQlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCAqc3NmOwotCXN0cnVjdCBzY3RwX3NlbmRfZmFp
bGVkX2V2ZW50ICpzc2ZlOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOwot
CXN0cnVjdCBzY3RwX2NodW5raGRyICpjaGtoZHI7Ci0JaW50IG5vdGlmaGRyX2xlbiwgY2hrX2xl
biwgY2hraGRyX2xlbiwgcGFkZGluZ19sZW4sIHBheWxvYWRfbGVuOwotCi0JaWYgKChzdGNiID09
IE5VTEwpIHx8Ci0JICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwg
c3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVCkgJiYKLQkgICAgIHNjdHBfc3Rj
Yl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNW
TlNFTkRGQUlMRVZOVCkpKSB7Ci0JCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCi0JCXJldHVybjsK
LQl9Ci0KLQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwg
U0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQpKSB7Ci0JCW5vdGlmaGRyX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCk7Ci0JfSBlbHNlIHsKLQkJbm90aWZo
ZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKTsKLQl9Ci0JbV9ub3RpZnkg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90aWZoZHJfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRf
REFUQSk7Ci0JaWYgKG1fbm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJ
cmV0dXJuOwotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBub3RpZmhkcl9sZW47Ci0JaWYgKHN0
Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7Ci0JCWNoa2hkcl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNjdHBfaWRhdGFfY2h1bmspOwotCX0gZWxzZSB7Ci0JCWNoa2hkcl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfZGF0YV9jaHVuayk7Ci0JfQotCS8qIFVzZSBzb21lIGRlZmF1bHRzIGluIGNhc2Ug
d2UgY2FuJ3QgYWNjZXNzIHRoZSBjaHVuayBoZWFkZXIgKi8KLQlpZiAoY2hrLT5zZW5kX3NpemUg
Pj0gY2hraGRyX2xlbikgewotCQlwYXlsb2FkX2xlbiA9IGNoay0+c2VuZF9zaXplIC0gY2hraGRy
X2xlbjsKLQl9IGVsc2UgewotCQlwYXlsb2FkX2xlbiA9IDA7Ci0JfQotCXBhZGRpbmdfbGVuID0g
MDsKLQlpZiAoY2hrLT5kYXRhICE9IE5VTEwpIHsKLQkJY2hraGRyID0gbXRvZChjaGstPmRhdGEs
IHN0cnVjdCBzY3RwX2NodW5raGRyICopOwotCQlpZiAoY2hraGRyICE9IE5VTEwpIHsKLQkJCWNo
a19sZW4gPSBudG9ocyhjaGtoZHItPmNodW5rX2xlbmd0aCk7Ci0JCQlpZiAoKGNoa19sZW4gPj0g
Y2hraGRyX2xlbikgJiYKLQkJCSAgICAoY2hrLT5zZW5kX3NpemUgPj0gY2hrX2xlbikgJiYKLQkJ
CSAgICAoY2hrLT5zZW5kX3NpemUgLSBjaGtfbGVuIDwgNCkpIHsKLQkJCQlwYWRkaW5nX2xlbiA9
IGNoay0+c2VuZF9zaXplIC0gY2hrX2xlbjsKLQkJCQlwYXlsb2FkX2xlbiA9IGNoay0+c2VuZF9z
aXplIC0gY2hraGRyX2xlbiAtIHBhZGRpbmdfbGVuOwotCQkJfQotCQl9Ci0JfQotCWlmIChzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19S
RUNWTlNFTkRGQUlMRVZOVCkpIHsKLQkJc3NmZSA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3Rw
X3NlbmRfZmFpbGVkX2V2ZW50ICopOwotCQltZW1zZXQoc3NmZSwgMCwgbm90aWZoZHJfbGVuKTsK
LQkJc3NmZS0+c3NmZV90eXBlID0gU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDsKLQkJaWYgKHNlbnQp
IHsKLQkJCXNzZmUtPnNzZmVfZmxhZ3MgPSBTQ1RQX0RBVEFfU0VOVDsKLQkJfSBlbHNlIHsKLQkJ
CXNzZmUtPnNzZmVfZmxhZ3MgPSBTQ1RQX0RBVEFfVU5TRU5UOwotCQl9Ci0JCXNzZmUtPnNzZmVf
bGVuZ3RoID0gKHVpbnQzMl90KShub3RpZmhkcl9sZW4gKyBwYXlsb2FkX2xlbik7Ci0JCXNzZmUt
PnNzZmVfZXJyb3IgPSBlcnJvcjsKLQkJLyogbm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50
IGluLCBidXQgc2hvdWxkIGJlIGNsb3NlIDopICovCi0JCXNzZmUtPnNzZmVfaW5mby5zbmRfc2lk
ID0gY2hrLT5yZWMuZGF0YS5zaWQ7Ci0JCXNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MgPSBjaGst
PnJlYy5kYXRhLnJjdl9mbGFnczsKLQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkID0gY2hrLT5y
ZWMuZGF0YS5wcGlkOwotCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2NvbnRleHQgPSBjaGstPnJlYy5k
YXRhLmNvbnRleHQ7Ci0JCXNzZmUtPnNzZmVfaW5mby5zbmRfYXNzb2NfaWQgPSBzY3RwX2dldF9h
c3NvY2lkKHN0Y2IpOwotCQlzc2ZlLT5zc2ZlX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChz
dGNiKTsKLQl9IGVsc2UgewotCQlzc2YgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5k
X2ZhaWxlZCAqKTsKLQkJbWVtc2V0KHNzZiwgMCwgbm90aWZoZHJfbGVuKTsKLQkJc3NmLT5zc2Zf
dHlwZSA9IFNDVFBfU0VORF9GQUlMRUQ7Ci0JCWlmIChzZW50KSB7Ci0JCQlzc2YtPnNzZl9mbGFn
cyA9IFNDVFBfREFUQV9TRU5UOwotCQl9IGVsc2UgewotCQkJc3NmLT5zc2ZfZmxhZ3MgPSBTQ1RQ
X0RBVEFfVU5TRU5UOwotCQl9Ci0JCXNzZi0+c3NmX2xlbmd0aCA9ICh1aW50MzJfdCkobm90aWZo
ZHJfbGVuICsgcGF5bG9hZF9sZW4pOwotCQlzc2YtPnNzZl9lcnJvciA9IGVycm9yOwotCQkvKiBu
b3QgZXhhY3RseSB3aGF0IHRoZSB1c2VyIHNlbnQgaW4sIGJ1dCBzaG91bGQgYmUgY2xvc2UgOikg
Ki8KLQkJc3NmLT5zc2ZfaW5mby5zaW5mb19zdHJlYW0gPSBjaGstPnJlYy5kYXRhLnNpZDsKLQkJ
c3NmLT5zc2ZfaW5mby5zaW5mb19zc24gPSAodWludDE2X3QpY2hrLT5yZWMuZGF0YS5taWQ7Ci0J
CXNzZi0+c3NmX2luZm8uc2luZm9fZmxhZ3MgPSBjaGstPnJlYy5kYXRhLnJjdl9mbGFnczsKLQkJ
c3NmLT5zc2ZfaW5mby5zaW5mb19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOwotCQlzc2YtPnNz
Zl9pbmZvLnNpbmZvX2NvbnRleHQgPSBjaGstPnJlYy5kYXRhLmNvbnRleHQ7Ci0JCXNzZi0+c3Nm
X2luZm8uc2luZm9fYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCQlzc2YtPnNz
Zl9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JfQotCWlmIChjaGstPmRhdGEg
IT0gTlVMTCkgewotCQkvKiBUcmltIG9mZiB0aGUgc2N0cCBjaHVuayBoZWFkZXIgKGl0IHNob3Vs
ZCBiZSB0aGVyZSkgKi8KLQkJaWYgKGNoay0+c2VuZF9zaXplID09IGNoa2hkcl9sZW4gKyBwYXls
b2FkX2xlbiArIHBhZGRpbmdfbGVuKSB7Ci0JCQltX2FkaihjaGstPmRhdGEsIGNoa2hkcl9sZW4p
OwotCQkJbV9hZGooY2hrLT5kYXRhLCAtcGFkZGluZ19sZW4pOwotCQkJc2N0cF9tYnVmX2NydXNo
KGNoay0+ZGF0YSk7Ci0JCQljaGstPnNlbmRfc2l6ZSAtPSAoY2hraGRyX2xlbiArIHBhZGRpbmdf
bGVuKTsKLQkJfQotCX0KLQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IGNoay0+ZGF0YTsKLQkv
KiBTdGVhbCBvZmYgdGhlIG1idWYgKi8KLQljaGstPmRhdGEgPSBOVUxMOwotCS8qCi0JICogRm9y
IHRoaXMgY2FzZSwgd2UgY2hlY2sgdGhlIGFjdHVhbCBzb2NrZXQgYnVmZmVyLCBzaW5jZSB0aGUg
YXNzb2MKLQkgKiBpcyBnb2luZyBhd2F5IHdlIGRvbid0IHdhbnQgdG8gb3ZlcmZpbGwgdGhlIHNv
Y2tldCBidWZmZXIgZm9yIGEKLQkgKiBub24tcmVhZGVyCi0JICovCi0JaWYgKHNjdHBfc2JzcGFj
ZV9mYWlsZWRtc2dzKCZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2KSA8IFNDVFBfQlVGX0xFTiht
X25vdGlmeSkpIHsKLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQkv
KiBhcHBlbmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnko
c3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0g
TlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJ
cmV0dXJuOwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwot
CWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBu
ZWVkIHRoaXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90
b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICAgICAgICAgICAgICAgIGNvbnRyb2ws
Ci0JICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCi0JICAg
ICAgICAgICAgICAgICAgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsCi0JICAgICAgICAgICAgICAg
ICAgc29fbG9ja2VkKTsKLX0KLQotCi1zdGF0aWMgdm9pZAotc2N0cF9ub3RpZnlfc2VuZF9mYWls
ZWQyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgZXJyb3IsCi0JCQkgc3RydWN0IHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgKQotewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxl
ZCAqc3NmOwotCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICpzc2ZlOwotCXN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOwotCWludCBub3RpZmhkcl9sZW47Ci0KLQlpZiAo
KHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKSAmJgotCSAgICAg
c2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkpIHsKLQkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KLQkJ
cmV0dXJuOwotCX0KLQlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwg
c3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQpKSB7Ci0JCW5vdGlmaGRyX2xl
biA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCk7Ci0JfSBlbHNlIHsKLQkJ
bm90aWZoZHJfbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkKTsKLQl9Ci0JbV9u
b3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90aWZoZHJfbGVuLCAwLCBNX05PV0FJVCwg
MSwgTVRfREFUQSk7Ci0JaWYgKG1fbm90aWZ5ID09IE5VTEwpIHsKLQkJLyogbm8gc3BhY2UgbGVm
dCAqLwotCQlyZXR1cm47Ci0JfQotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBub3RpZmhkcl9s
ZW47Ci0JaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFND
VFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgewotCQlzc2ZlID0gbXRvZChtX25vdGlm
eSwgc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKik7Ci0JCW1lbXNldChzc2ZlLCAwLCBu
b3RpZmhkcl9sZW4pOwotCQlzc2ZlLT5zc2ZlX3R5cGUgPSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5U
OwotCQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKLQkJc3NmZS0+c3NmZV9s
ZW5ndGggPSAodWludDMyX3QpKG5vdGlmaGRyX2xlbiArIHNwLT5sZW5ndGgpOwotCQlzc2ZlLT5z
c2ZlX2Vycm9yID0gZXJyb3I7Ci0JCS8qIG5vdCBleGFjdGx5IHdoYXQgdGhlIHVzZXIgc2VudCBp
biwgYnV0IHNob3VsZCBiZSBjbG9zZSA6KSAqLwotCQlzc2ZlLT5zc2ZlX2luZm8uc25kX3NpZCA9
IHNwLT5zaWQ7Ci0JCWlmIChzcC0+c29tZV90YWtlbikgewotCQkJc3NmZS0+c3NmZV9pbmZvLnNu
ZF9mbGFncyA9IFNDVFBfREFUQV9MQVNUX0ZSQUc7Ci0JCX0gZWxzZSB7Ci0JCQlzc2ZlLT5zc2Zl
X2luZm8uc25kX2ZsYWdzID0gU0NUUF9EQVRBX05PVF9GUkFHOwotCQl9Ci0JCXNzZmUtPnNzZmVf
aW5mby5zbmRfcHBpZCA9IHNwLT5wcGlkOwotCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2NvbnRleHQg
PSBzcC0+Y29udGV4dDsKLQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9hc3NvY19pZCA9IHNjdHBfZ2V0
X2Fzc29jaWQoc3RjYik7Ci0JCXNzZmUtPnNzZmVfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lk
KHN0Y2IpOwotCX0gZWxzZSB7Ci0JCXNzZiA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3Nl
bmRfZmFpbGVkICopOwotCQltZW1zZXQoc3NmLCAwLCBub3RpZmhkcl9sZW4pOwotCQlzc2YtPnNz
Zl90eXBlID0gU0NUUF9TRU5EX0ZBSUxFRDsKLQkJc3NmLT5zc2ZfZmxhZ3MgPSBTQ1RQX0RBVEFf
VU5TRU5UOwotCQlzc2YtPnNzZl9sZW5ndGggPSAodWludDMyX3QpKG5vdGlmaGRyX2xlbiArIHNw
LT5sZW5ndGgpOwotCQlzc2YtPnNzZl9lcnJvciA9IGVycm9yOwotCQkvKiBub3QgZXhhY3RseSB3
aGF0IHRoZSB1c2VyIHNlbnQgaW4sIGJ1dCBzaG91bGQgYmUgY2xvc2UgOikgKi8KLQkJc3NmLT5z
c2ZfaW5mby5zaW5mb19zdHJlYW0gPSBzcC0+c2lkOwotCQlzc2YtPnNzZl9pbmZvLnNpbmZvX3Nz
biA9IDA7Ci0JCWlmIChzcC0+c29tZV90YWtlbikgewotCQkJc3NmLT5zc2ZfaW5mby5zaW5mb19m
bGFncyA9IFNDVFBfREFUQV9MQVNUX0ZSQUc7Ci0JCX0gZWxzZSB7Ci0JCQlzc2YtPnNzZl9pbmZv
LnNpbmZvX2ZsYWdzID0gU0NUUF9EQVRBX05PVF9GUkFHOwotCQl9Ci0JCXNzZi0+c3NmX2luZm8u
c2luZm9fcHBpZCA9IHNwLT5wcGlkOwotCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2NvbnRleHQgPSBz
cC0+Y29udGV4dDsKLQkJc3NmLT5zc2ZfaW5mby5zaW5mb19hc3NvY19pZCA9IHNjdHBfZ2V0X2Fz
c29jaWQoc3RjYik7Ci0JCXNzZi0+c3NmX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNi
KTsKLQl9Ci0JU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBzcC0+ZGF0YTsKLQotCS8qIFN0ZWFs
IG9mZiB0aGUgbWJ1ZiAqLwotCXNwLT5kYXRhID0gTlVMTDsKLQkvKgotCSAqIEZvciB0aGlzIGNh
c2UsIHdlIGNoZWNrIHRoZSBhY3R1YWwgc29ja2V0IGJ1ZmZlciwgc2luY2UgdGhlIGFzc29jCi0J
ICogaXMgZ29pbmcgYXdheSB3ZSBkb24ndCB3YW50IHRvIG92ZXJmaWxsIHRoZSBzb2NrZXQgYnVm
ZmVyIGZvciBhCi0JICogbm9uLXJlYWRlcgotCSAqLwotCWlmIChzY3RwX3Nic3BhY2VfZmFpbGVk
bXNncygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkp
KSB7Ci0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogYXBwZW5k
IHRvIHNvY2tldCAqLwotCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCi0JICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOwotCWlmIChjb250cm9sID09IE5VTEwpIHsK
LQkJLyogbm8gbWVtb3J5ICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsK
LQl9Ci0JY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQljb250cm9s
LT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047Ci0JLyogbm90IHRoYXQgd2UgbmVlZCB0aGlz
ICovCi0JY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0Jc2N0cF9hZGRfdG9fcmVhZHEo
c3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkgICAgY29udHJvbCwKLQkgICAgJnN0Y2ItPnNjdHBfc29j
a2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBzb19sb2NrZWQpOwotfQot
Ci0KLQotc3RhdGljIHZvaWQKLXNjdHBfbm90aWZ5X2FkYXB0YXRpb25fbGF5ZXIoc3RydWN0IHNj
dHBfdGNiICpzdGNiKQotewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9h
ZGFwdGF0aW9uX2V2ZW50ICpzYWk7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRy
b2w7Ci0KLQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVf
b2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UKSkg
ewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JbV9ub3RpZnkg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0aW9uX2V2ZW50
KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKQotCQkv
KiBubyBzcGFjZSBsZWZ0ICovCi0JCXJldHVybjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0g
MDsKLQlzYWkgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50ICop
OwotCW1lbXNldChzYWksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50KSk7
Ci0Jc2FpLT5zYWlfdHlwZSA9IFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOwotCXNhaS0+c2Fp
X2ZsYWdzID0gMDsKLQlzYWktPnNhaV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRh
dGlvbl9ldmVudCk7Ci0Jc2FpLT5zYWlfYWRhcHRhdGlvbl9pbmQgPSBzdGNiLT5hc29jLnBlZXJz
X2FkYXB0YXRpb247Ci0Jc2FpLT5zYWlfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2Ip
OwotCi0JU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hZGFwdGF0
aW9uX2V2ZW50KTsKLQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0KLQkvKiBhcHBl
bmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwg
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYgKGNvbnRyb2wgPT0gTlVMTCkg
ewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0dXJu
OwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOwotCWNvbnRy
b2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBub3QgdGhhdCB3ZSBuZWVkIHRo
aXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsKLQlzY3RwX2FkZF90b19yZWFk
cShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICBjb250cm9sLAotCSAgICAmc3RjYi0+c2N0cF9z
b2NrZXQtPnNvX3JjdiwgMSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7Ci19Ci0KLS8qIFRoaXMgYWx3YXlzIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIHJlYWQt
cXVldWUgTE9DS0VEIGluIHRoZSBJTlAgKi8KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9wYXJ0
aWFsX2RlbGl2ZXJ5X2luZGljYXRpb24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBl
cnJvciwKLQkJCQkJdWludDMyX3QgdmFsLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0Jc3RydWN0
IHNjdHBfcGRhcGlfZXZlbnQgKnBkYXBpOwotCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpj
b250cm9sOwotCXN0cnVjdCBzb2NrYnVmICpzYjsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8fAot
CSAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9Q
Q0JfRkxBR1NfUERBUElFVk5UKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1
cm47Ci0JfQotCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0NBTlRfUkVBRCkgewotCQlyZXR1cm47Ci0JfQotCi0JbV9ub3RpZnkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSwgMCwgTV9OT1dB
SVQsIDEsIE1UX0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKQotCQkvKiBubyBzcGFjZSBs
ZWZ0ICovCi0JCXJldHVybjsKLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlwZGFwaSA9
IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50ICopOwotCW1lbXNldChwZGFw
aSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KSk7Ci0JcGRhcGktPnBkYXBpX3R5
cGUgPSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ7Ci0JcGRhcGktPnBkYXBpX2ZsYWdzID0g
MDsKLQlwZGFwaS0+cGRhcGlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50
KTsKLQlwZGFwaS0+cGRhcGlfaW5kaWNhdGlvbiA9IGVycm9yOwotCXBkYXBpLT5wZGFwaV9zdHJl
YW0gPSAodmFsID4+IDE2KTsKLQlwZGFwaS0+cGRhcGlfc2VxID0gKHZhbCAmIDB4MDAwMGZmZmYp
OwotCXBkYXBpLT5wZGFwaV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0KLQlT
Q1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50KTsK
LQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7Ci0JY29udHJvbCA9IHNjdHBfYnVpbGRf
cmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCQkJCQkg
MCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAotCQkJCQkgbV9ub3RpZnkpOwotCWlm
IChjb250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5ICovCi0JCXNjdHBfbV9mcmVlbSht
X25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVO
KG1fbm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047Ci0JLyog
bm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7
Ci0Jc2IgPSAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdjsKLQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQlzY3Rw
X3NibG9nKHNiLCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19T
QkFMTE9DLCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpKTsKLQl9Ci0Jc2N0cF9zYmFsbG9jKHN0Y2Is
IHNiLCBtX25vdGlmeSk7Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKLQkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+
ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCX0KLQlj
b250cm9sLT5lbmRfYWRkZWQgPSAxOwotCWlmIChzdGNiLT5hc29jLmNvbnRyb2xfcGRhcGkpCi0J
CVRBSUxRX0lOU0VSVF9BRlRFUigmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgc3RjYi0+YXNv
Yy5jb250cm9sX3BkYXBpLCAgY29udHJvbCwgbmV4dCk7Ci0JZWxzZSB7Ci0JCS8qIHdlIHJlYWxs
eSBzaG91bGQgbm90IHNlZSB0aGlzIGNhc2UgKi8KLQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2It
PnNjdHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCX0KLQlpZiAoc3RjYi0+c2N0
cF9lcCAmJiBzdGNiLT5zY3RwX3NvY2tldCkgewotCQkvKiBUaGlzIHNob3VsZCBhbHdheXMgYmUg
dGhlIGNhc2UgKi8KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKLQkJc3RydWN0IHNvY2tldCAqc287Ci0KLQkJc28gPSBTQ1RQX0lOUF9TTyhz
dGNiLT5zY3RwX2VwKTsKLQkJaWYgKCFzb19sb2NrZWQpIHsKLQkJCWF0b21pY19hZGRfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQ
X1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlpZiAoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJCQlyZXR1cm47Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlz
Y3RwX3Nvcndha2V1cChzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWlmICgh
c29fbG9ja2VkKSB7Ci0JCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotCQl9Ci0jZW5kaWYK
LQl9Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IpCi17Ci0Jc3RydWN0IG1idWYgKm1fbm90aWZ5OwotCXN0cnVjdCBzY3Rw
X3NodXRkb3duX2V2ZW50ICpzc2U7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRy
b2w7Ci0KLQkvKgotCSAqIEZvciBUQ1AgbW9kZWwgQU5EIFVEUCBjb25uZWN0ZWQgc29ja2V0cyB3
ZSB3aWxsIHNlbmQgYW4gZXJyb3IgdXAKLQkgKiB3aGVuIGFuIFNIVVRET1dOIGNvbXBsZXRlcwot
CSAqLwotCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8Ci0JICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfSU5fVENQUE9PTCkpIHsKLQkJLyogbWFyayBzb2NrZXQgY2xvc2VkIGZvciByZWFkL3dyaXRl
IGFuZCB3YWtldXAhICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0JCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JCXNvID0gU0NUUF9JTlBf
U08oc3RjYi0+c2N0cF9lcCk7Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7Ci0JCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7
Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKLQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NF
RF9TT0NLRVQpIHsKLQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0JCQlyZXR1cm47Ci0J
CX0KLSNlbmRpZgotCQlzb2NhbnRzZW5kbW9yZShzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCVNDVFBf
U09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci0JaWYgKHNjdHBfc3RjYl9pc19mZWF0
dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05F
Vk5UKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQlyZXR1cm47Ci0JfQotCi0JbV9u
b3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3du
X2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxM
KQotCQkvKiBubyBzcGFjZSBsZWZ0ICovCi0JCXJldHVybjsKLQlzc2UgPSBtdG9kKG1fbm90aWZ5
LCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCAqKTsKLQltZW1zZXQoc3NlLCAwLCBzaXplb2Yo
c3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQpKTsKLQlzc2UtPnNzZV90eXBlID0gU0NUUF9TSFVU
RE9XTl9FVkVOVDsKLQlzc2UtPnNzZV9mbGFncyA9IDA7Ci0Jc3NlLT5zc2VfbGVuZ3RoID0gc2l6
ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KTsKLQlzc2UtPnNzZV9hc3NvY19pZCA9IHNj
dHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KTsKLQlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9
IE5VTEw7Ci0KLQkvKiBhcHBlbmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRf
cmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwg
MCwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYg
KGNvbnRyb2wgPT0gTlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1f
bm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpOwotCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBu
b3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsK
LQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICBjb250cm9sLAot
CSAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hF
TEQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9z
ZW5kZXJfZHJ5X2V2ZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQotewot
CXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICpl
dmVudDsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQotCWlmICgoc3Rj
YiA9PSBOVUxMKSB8fAotCSAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9l
cCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCkpIHsKLQkJLyogZXZlbnQgbm90IGVuYWJs
ZWQgKi8KLQkJcmV0dXJuOwotCX0KLQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7Ci0JCS8qIG5vIHNwYWNlIGxlZnQgKi8K
LQkJcmV0dXJuOwotCX0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKLQlldmVudCA9IG10
b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgKik7Ci0JbWVtc2V0KGV2
ZW50LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCkpOwotCWV2ZW50LT5z
ZW5kZXJfZHJ5X3R5cGUgPSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ7Ci0JZXZlbnQtPnNlbmRlcl9k
cnlfZmxhZ3MgPSAwOwotCWV2ZW50LT5zZW5kZXJfZHJ5X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KTsKLQlldmVudC0+c2VuZGVyX2RyeV9hc3NvY19pZCA9IHNj
dHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0KLQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkp
ID0gTlVMTDsKLQotCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KLQljb250cm9sID0gc2N0cF9idWls
ZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAw
LCAwLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKLQlp
ZiAoY29udHJvbCA9PSBOVUxMKSB7Ci0JCS8qIG5vIG1lbW9yeSAqLwotCQlzY3RwX21fZnJlZW0o
bV9ub3RpZnkpOwotCQlyZXR1cm47Ci0JfQotCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xF
TihtX25vdGlmeSk7Ci0JY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOwotCS8q
IG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLwotCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5
OwotCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCi0JICAg
ICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9M
T0NLX05PVF9IRUxELCBzb19sb2NrZWQpOwotfQotCi0KLXZvaWQKLXNjdHBfbm90aWZ5X3N0cmVh
bV9yZXNldF9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBudW1iZXJpbiwgdWlu
dDE2X3QgbnVtYmVyb3V0LCBpbnQgZmxhZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7Ci0J
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0Jc3RydWN0IHNjdHBfc3RyZWFt
X2NoYW5nZV9ldmVudCAqc3RyYWRkOwotCi0JaWYgKChzdGNiID09IE5VTEwpIHx8Ci0JICAgIChz
Y3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxB
R1NfU1RSRUFNX0NIQU5HRUVWTlQpKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxlZCAqLwotCQly
ZXR1cm47Ci0JfQotCWlmICgoc3RjYi0+YXNvYy5wZWVyX3JlcV9vdXQpICYmIGZsYWcpIHsKLQkJ
LyogUGVlciBtYWRlIHRoZSByZXF1ZXN0LCBkb24ndCB0ZWxsIHRoZSBsb2NhbCB1c2VyICovCi0J
CXN0Y2ItPmFzb2MucGVlcl9yZXFfb3V0ID0gMDsKLQkJcmV0dXJuOwotCX0KLQlzdGNiLT5hc29j
LnBlZXJfcmVxX291dCA9IDA7Ci0JbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6
ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpLCAwLCBNX05PV0FJVCwgMSwgTVRf
REFUQSk7Ci0JaWYgKG1fbm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8KLQkJ
cmV0dXJuOwotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOwotCXN0cmFkZCA9IG10b2QobV9u
b3RpZnksIHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgKik7Ci0JbWVtc2V0KHN0cmFk
ZCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpKTsKLQlzdHJhZGQt
PnN0cmNoYW5nZV90eXBlID0gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOwotCXN0cmFkZC0+c3Ry
Y2hhbmdlX2ZsYWdzID0gZmxhZzsKLQlzdHJhZGQtPnN0cmNoYW5nZV9sZW5ndGggPSBzaXplb2Yo
c3RydWN0IHNjdHBfc3RyZWFtX2NoYW5nZV9ldmVudCk7Ci0Jc3RyYWRkLT5zdHJjaGFuZ2VfYXNz
b2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOwotCXN0cmFkZC0+c3RyY2hhbmdlX2luc3Ry
bXMgPSBudW1iZXJpbjsKLQlzdHJhZGQtPnN0cmNoYW5nZV9vdXRzdHJtcyA9IG51bWJlcm91dDsK
LQlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFu
Z2VfZXZlbnQpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQlpZiAoc2N0cF9z
YnNwYWNlKCZzdGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JV
Rl9MRU4obV9ub3RpZnkpKSB7Ci0JCS8qIG5vIHNwYWNlICovCi0JCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogYXBwZW5kIHRvIHNvY2tldCAqLwotCWNvbnRyb2wg
PSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29j
LmNvbnRleHQsIDAsIDAsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9u
b3RpZnkpOwotCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5ICovCi0JCXNj
dHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+bGVuZ3RoID0g
U0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklD
QVRJT047Ci0JLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+dGFpbF9tYnVm
ID0gbV9ub3RpZnk7Ci0Jc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKLQkg
ICAgY29udHJvbCwKLQkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi12b2lkCi1zY3RwX25v
dGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgc2Vu
ZGluZ190c24sIHVpbnQzMl90IHJlY3ZfdHNuLCBpbnQgZmxhZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAq
bV9ub3RpZnk7Ci0Jc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7Ci0Jc3RydWN0
IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQgKnN0cmFzb2M7Ci0KLQlpZiAoKHN0Y2IgPT0gTlVMTCkg
fHwKLQkgICAgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBT
Q1RQX1BDQl9GTEFHU19BU1NPQ19SRVNFVEVWTlQpKSkgewotCQkvKiBldmVudCBub3QgZW5hYmxl
ZCAqLwotCQlyZXR1cm47Ci0JfQotCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKLQlpZiAobV9ub3RpZnkgPT0gTlVMTCkKLQkJLyogbm8gc3BhY2UgbGVmdCAqLwotCQly
ZXR1cm47Ci0JU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7Ci0Jc3RyYXNvYyA9IG10b2QobV9u
b3RpZnksIHN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50ICAqKTsKLQltZW1zZXQoc3RyYXNv
YywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50KSk7Ci0Jc3RyYXNvYy0+
YXNzb2NyZXNldF90eXBlID0gU0NUUF9BU1NPQ19SRVNFVF9FVkVOVDsKLQlzdHJhc29jLT5hc3Nv
Y3Jlc2V0X2ZsYWdzID0gZmxhZzsKLQlzdHJhc29jLT5hc3NvY3Jlc2V0X2xlbmd0aCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCk7Ci0Jc3RyYXNvYy0+YXNzb2NyZXNldF9h
c3NvY19pZD0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQlzdHJhc29jLT5hc3NvY3Jlc2V0X2xv
Y2FsX3RzbiA9IHNlbmRpbmdfdHNuOwotCXN0cmFzb2MtPmFzc29jcmVzZXRfcmVtb3RlX3RzbiA9
IHJlY3ZfdHNuOwotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3RydWN0IHNjdHBf
YXNzb2NfcmVzZXRfZXZlbnQpOwotCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKLQlp
ZiAoc2N0cF9zYnNwYWNlKCZzdGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Jjdikg
PCBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpKSB7Ci0JCS8qIG5vIHNwYWNlICovCi0JCXNjdHBfbV9m
cmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogYXBwZW5kIHRvIHNvY2tldCAqLwot
CWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbiwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBz
dGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbV9ub3RpZnkpOwotCWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogbm8gbWVtb3J5
ICovCi0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7Ci0JCXJldHVybjsKLQl9Ci0JY29udHJvbC0+
bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKLQljb250cm9sLT5zcGVjX2ZsYWdzID0g
TV9OT1RJRklDQVRJT047Ci0JLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JY29udHJvbC0+
dGFpbF9tYnVmID0gbV9ub3RpZnk7Ci0Jc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwg
c3RjYiwKLQkgICAgY29udHJvbCwKLQkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEs
IFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQotCi0KLQot
c3RhdGljIHZvaWQKLXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gICAgaW50IG51bWJlcl9lbnRyaWVzLCB1aW50MTZfdCAqIGxpc3QsIGludCBmbGFnKQot
ewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAq
Y29udHJvbDsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgKnN0cnJlc2V0OwotCWlu
dCBsZW47Ci0KLQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHNjdHBfc3RjYl9pc19mZWF0
dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRF
Vk5UKSkpIHsKLQkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KLQkJcmV0dXJuOwotCX0KLQotCW1f
bm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwg
TVRfREFUQSk7Ci0JaWYgKG1fbm90aWZ5ID09IE5VTEwpCi0JCS8qIG5vIHNwYWNlIGxlZnQgKi8K
LQkJcmV0dXJuOwotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOwotCWxlbiA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQpICsgKG51bWJlcl9lbnRyaWVzICogc2l6ZW9m
KHVpbnQxNl90KSk7Ci0JaWYgKGxlbiA+IE1fVFJBSUxJTkdTUEFDRShtX25vdGlmeSkpIHsKLQkJ
LyogbmV2ZXIgZW5vdWdoIHJvb20gKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0
dXJuOwotCX0KLQlzdHJyZXNldCA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9ldmVudCAqKTsKLQltZW1zZXQoc3RycmVzZXQsIDAsIGxlbik7Ci0Jc3RycmVzZXQtPnN0
cnJlc2V0X3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVDsKLQlzdHJyZXNldC0+c3RycmVz
ZXRfZmxhZ3MgPSBmbGFnOwotCXN0cnJlc2V0LT5zdHJyZXNldF9sZW5ndGggPSBsZW47Ci0Jc3Ry
cmVzZXQtPnN0cnJlc2V0X2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKLQlpZiAo
bnVtYmVyX2VudHJpZXMpIHsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9l
bnRyaWVzOyBpKyspIHsKLQkJCXN0cnJlc2V0LT5zdHJyZXNldF9zdHJlYW1fbGlzdFtpXSA9IG50
b2hzKGxpc3RbaV0pOwotCQl9Ci0JfQotCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBsZW47Ci0J
U0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOwotCWlmIChzY3RwX3Nic3BhY2UoJnN0Y2It
PmFzb2MsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2KSA8IFNDVFBfQlVGX0xFTihtX25vdGlm
eSkpIHsKLQkJLyogbm8gc3BhY2UgKi8KLQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKLQkJcmV0
dXJuOwotCX0KLQkvKiBhcHBlbmQgdG8gc29ja2V0ICovCi0JY29udHJvbCA9IHNjdHBfYnVpbGRf
cmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwg
MCwgMCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7Ci0JaWYg
KGNvbnRyb2wgPT0gTlVMTCkgewotCQkvKiBubyBtZW1vcnkgKi8KLQkJc2N0cF9tX2ZyZWVtKG1f
bm90aWZ5KTsKLQkJcmV0dXJuOwotCX0KLQljb250cm9sLT5sZW5ndGggPSBTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpOwotCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKLQkvKiBu
b3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KLQljb250cm9sLT50YWlsX21idWYgPSBtX25vdGlmeTsK
LQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAotCSAgICAgICAgICAgICAg
ICAgIGNvbnRyb2wsCi0JICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19y
Y3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotfQot
Ci0KLXN0YXRpYyB2b2lkCi1zY3RwX25vdGlmeV9yZW1vdGVfZXJyb3Ioc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCB1aW50MTZfdCBlcnJvciwgc3RydWN0IHNjdHBfZXJyb3JfY2h1bmsgKmNodW5rKQot
ewotCXN0cnVjdCBtYnVmICptX25vdGlmeTsKLQlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgKnNy
ZTsKLQlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKLQl1bnNpZ25lZCBpbnQg
bm90aWZfbGVuOwotCXVpbnQxNl90IGNodW5rX2xlbjsKLQotCWlmICgoc3RjYiA9PSBOVUxMKSB8
fAotCSAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpKSB7Ci0JCXJldHVybjsKLQl9Ci0JaWYgKGNodW5rICE9
IE5VTEwpIHsKLQkJY2h1bmtfbGVuID0gbnRvaHMoY2h1bmstPmNoLmNodW5rX2xlbmd0aCk7Ci0J
fSBlbHNlIHsKLQkJY2h1bmtfbGVuID0gMDsKLQl9Ci0Jbm90aWZfbGVuID0gKHVuc2lnbmVkIGlu
dCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcikgKyBjaHVua19sZW4pOwotCW1fbm90
aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmX2xlbiwgMCwgTV9OT1dBSVQsIDEsIE1U
X0RBVEEpOwotCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7Ci0JCS8qIFJldHJ5IHdpdGggc21hbGxl
ciB2YWx1ZS4gKi8KLQkJbm90aWZfbGVuID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNj
dHBfcmVtb3RlX2Vycm9yKTsKLQkJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90
aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7Ci0JCWlmIChtX25vdGlmeSA9PSBOVUxM
KSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQl9Ci0JU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxM
OwotCXNyZSA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvciAqKTsKLQlt
ZW1zZXQoc3JlLCAwLCBub3RpZl9sZW4pOwotCXNyZS0+c3JlX3R5cGUgPSBTQ1RQX1JFTU9URV9F
UlJPUjsKLQlzcmUtPnNyZV9mbGFncyA9IDA7Ci0Jc3JlLT5zcmVfbGVuZ3RoID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7Ci0Jc3JlLT5zcmVfZXJyb3IgPSBlcnJvcjsKLQlzcmUt
PnNyZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7Ci0JaWYgKG5vdGlmX2xlbiA+
IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IpKSB7Ci0JCW1lbWNweShzcmUtPnNyZV9k
YXRhLCBjaHVuaywgY2h1bmtfbGVuKTsKLQkJc3JlLT5zcmVfbGVuZ3RoICs9IGNodW5rX2xlbjsK
LQl9Ci0JU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNyZS0+c3JlX2xlbmd0aDsKLQljb250cm9s
ID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb24sCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNv
Yy5jb250ZXh0LCAwLCAwLCAwLAotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
bm90aWZ5KTsKLQlpZiAoY29udHJvbCAhPSBOVUxMKSB7Ci0JCWNvbnRyb2wtPmxlbmd0aCA9IFND
VFBfQlVGX0xFTihtX25vdGlmeSk7Ci0JCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNB
VElPTjsKLQkJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCi0JCWNvbnRyb2wtPnRhaWxfbWJ1
ZiA9IG1fbm90aWZ5OwotCQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAot
CQkgICAgICAgICAgICAgICAgICBjb250cm9sLAotCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+
c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKLQkJCQkgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBT
Q1RQX1NPX05PVF9MT0NLRUQpOwotCX0gZWxzZSB7Ci0JCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7
Ci0JfQotfQotCi0KLXZvaWQKLXNjdHBfdWxwX25vdGlmeSh1aW50MzJfdCBub3RpZmljYXRpb24s
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICB1aW50MzJfdCBlcnJvciwgdm9pZCAqZGF0YSwg
aW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlpZiAo
KHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKLQkgICAgKHN0Y2ItPmFzb2Mu
c3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpKSB7Ci0JCS8qIElmIHRoZSBzb2NrZXQg
aXMgZ29uZSB3ZSBhcmUgb3V0IG9mIGhlcmUgKi8KLQkJcmV0dXJuOwotCX0KLSNpZiAoZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCi0JaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Yuc2Jfc3RhdGUgJiBT
QlNfQ0FOVFJDVk1PUkUpIHsKLSNlbHNlCi0JaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zdGF0
ZSAmIFNTX0NBTlRSQ1ZNT1JFKSB7Ci0jZW5kaWYKLQkJcmV0dXJuOwotCX0KLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLQlpZiAoc29fbG9ja2VkKSB7Ci0JCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChT
Q1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7Ci0JfQotI2VuZGlmCi0JaWYgKChzdGNiLT5hc29j
LnN0YXRlICYgU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKLQkgICAgKHN0Y2ItPmFzb2Muc3Rh
dGUgJiAgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgewotCQlpZiAoKG5vdGlmaWNhdGlvbiA9
PSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTikgfHwKLQkJICAgIChub3RpZmljYXRpb24gPT0g
U0NUUF9OT1RJRllfSU5URVJGQUNFX1VQKSB8fAotCQkgICAgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQ
X05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVEKSkgewotCQkJLyogRG9uJ3QgcmVwb3J0IHRoZXNl
IGluIGZyb250IHN0YXRlcyAqLwotCQkJcmV0dXJuOwotCQl9Ci0JfQotCXN3aXRjaCAobm90aWZp
Y2F0aW9uKSB7Ci0JY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19VUDoKLQkJaWYgKHN0Y2ItPmFzb2Mu
YXNzb2NfdXBfc2VudCA9PSAwKSB7Ci0JCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9D
T01NX1VQLCBzdGNiLCBlcnJvciwgTlVMTCwgMCwgc29fbG9ja2VkKTsKLQkJCXN0Y2ItPmFzb2Mu
YXNzb2NfdXBfc2VudCA9IDE7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9uZWVk
ZWQgJiYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9zZW50ID09IDApKSB7Ci0JCQlzY3RwX25vdGlm
eV9hZGFwdGF0aW9uX2xheWVyKHN0Y2IpOwotCQl9Ci0JCWlmIChzdGNiLT5hc29jLmF1dGhfc3Vw
cG9ydGVkID09IDApIHsKLQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVSX0FV
VEgsIHN0Y2IsIDAsCi0JCQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKLQkJfQot
CQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX0FTU09DX0RPV046Ci0JCXNjdHBfbm90aWZ5X2Fz
c29jX2NoYW5nZShTQ1RQX1NIVVRET1dOX0NPTVAsIHN0Y2IsIGVycm9yLCBOVUxMLCAwLCBzb19s
b2NrZWQpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJaWYgKHN0Y2ItPnNjdHBfZXAt
PnJlY3ZfY2FsbGJhY2spIHsKLQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgewotCQkJCXVuaW9u
IHNjdHBfc29ja3N0b3JlIGFkZHI7Ci0JCQkJc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7Ci0KLQkJ
CQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOwotCQkJCW1l
bXNldCgmcmN2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOwotCQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQkJCXN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQsIGFk
ZHIsIE5VTEwsIDAsIHJjdiwgMCwgc3RjYi0+c2N0cF9lcC0+dWxwX2luZm8pOwotCQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZj
bnQsIDEpOwotCQkJfQotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9J
TlRFUkZBQ0VfRE9XTjoKLQkJewotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JCQluZXQg
PSAoc3RydWN0IHNjdHBfbmV0cyAqKWRhdGE7Ci0JCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hh
bmdlKHN0Y2IsIFNDVFBfQUREUl9VTlJFQUNIQUJMRSwKLQkJCSAgICAoc3RydWN0IHNvY2thZGRy
ICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7Ci0JCQlicmVhazsKLQkJfQot
CWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQOgotCQl7Ci0JCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7Ci0KLQkJCW5ldCA9IChzdHJ1Y3Qgc2N0cF9uZXRzICopZGF0YTsKLQkJCXNjdHBfbm90
aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RjYiwgU0NUUF9BRERSX0FWQUlMQUJMRSwKLQkJCSAgICAo
c3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7Ci0J
CQlicmVhazsKLQkJfQotCWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRDoKLQkJ
ewotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCi0JCQluZXQgPSAoc3RydWN0IHNjdHBfbmV0
cyAqKWRhdGE7Ci0JCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQURE
Ul9DT05GSVJNRUQsCi0JCQkgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIs
IGVycm9yLCBzb19sb2NrZWQpOwotCQkJYnJlYWs7Ci0JCX0KLQljYXNlIFNDVFBfTk9USUZZX1NQ
RUNJQUxfU1BfRkFJTDoKLQkJc2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQyKHN0Y2IsIGVycm9yLAot
CQkgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICopZGF0YSwgc29fbG9ja2VkKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9TRU5U
X0RHX0ZBSUw6Ci0JCXNjdHBfbm90aWZ5X3NlbmRfZmFpbGVkKHN0Y2IsIDEsIGVycm9yLAotCQkg
ICAgKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOwotCQlicmVhazsK
LQljYXNlIFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMOgotCQlzY3RwX25vdGlmeV9zZW5kX2Zh
aWxlZChzdGNiLCAwLCBlcnJvciwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBz
Y3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBf
Tk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTjoKLQkJewotCQkJdWludDMyX3QgdmFs
OwotCQkJdmFsID0gKigodWludDMyX3QgKilkYXRhKTsKLQotCQkJc2N0cF9ub3RpZnlfcGFydGlh
bF9kZWxpdmVyeV9pbmRpY2F0aW9uKHN0Y2IsIGVycm9yLCB2YWwsIHNvX2xvY2tlZCk7Ci0JCWJy
ZWFrOwotCQl9Ci0JY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRDoKLQkJaWYgKCgo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9DT09LSUVf
V0FJVCkgfHwKLQkJICAgICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0g
U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgewotCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdl
KFNDVFBfQ0FOVF9TVFJfQVNTT0MsIHN0Y2IsIGVycm9yLCBkYXRhLCAwLCBzb19sb2NrZWQpOwot
CQl9IGVsc2UgewotCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ09NTV9MT1NULCBz
dGNiLCBlcnJvciwgZGF0YSwgMCwgc29fbG9ja2VkKTsKLQkJfQotCQlicmVhazsKLQljYXNlIFND
VFBfTk9USUZZX0FTU09DX1JFTV9BQk9SVEVEOgotCQlpZiAoKChzdGNiLT5hc29jLnN0YXRlICYg
U0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAotCQkgICAgKChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpKSB7Ci0JCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DQU5UX1NUUl9BU1NP
Qywgc3RjYiwgZXJyb3IsIGRhdGEsIDEsIHNvX2xvY2tlZCk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3Rw
X25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DT01NX0xPU1QsIHN0Y2IsIGVycm9yLCBkYXRhLCAx
LCBzb19sb2NrZWQpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfQVNTT0NfUkVT
VEFSVDoKLQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfUkVTVEFSVCwgc3RjYiwgZXJy
b3IsIE5VTEwsIDAsIHNvX2xvY2tlZCk7Ci0JCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVk
ID09IDApIHsKLQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9OT19QRUVSX0FVVEgsIHN0
Y2IsIDAsCi0JCQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9ja2VkKTsKLQkJfQotCQlicmVh
azsKLQljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9TRU5EOgotCQlzY3RwX25vdGlmeV9zdHJl
YW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksIFNDVFBfU1RSRUFNX1JF
U0VUX09VVEdPSU5HX1NTTik7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfU1RSX1JFU0VU
X1JFQ1Y6Ci0JCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50MTZf
dCAqKSBkYXRhKSwgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcpOwotCQlicmVhazsKLQljYXNl
IFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VUOgotCQlzY3RwX25vdGlmeV9zdHJlYW1f
cmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCi0JCSAgICAgICAgICAgICAg
ICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFNX1JF
U0VUX0ZBSUxFRCkpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5J
RURfT1VUOgotCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2
X3QgKikgZGF0YSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVT
RVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCkpOwotCQlicmVhazsKLQlj
YXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfSU46Ci0JCXNjdHBfbm90aWZ5X3N0cmVh
bV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50MTZfdCAqKSBkYXRhKSwKLQkJICAgICAgICAgICAg
ICAgICAgICAgICAgIChTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlOR3xTQ1RQX1NUUkVBTV9SRVNF
VF9GQUlMRUQpKTsKLQkJYnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRfREVOSUVE
X0lOOgotCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3Qg
KikgZGF0YSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRf
SU5DT01JTkd8U0NUUF9TVFJFQU1fUkVTRVRfREVOSUVEKSk7Ci0JCWJyZWFrOwotCWNhc2UgU0NU
UF9OT1RJRllfQVNDT05GX0FERF9JUDoKLQkJc2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShz
dGNiLCBTQ1RQX0FERFJfQURERUQsIGRhdGEsCi0JCSAgICBlcnJvciwgc29fbG9ja2VkKTsKLQkJ
YnJlYWs7Ci0JY2FzZSBTQ1RQX05PVElGWV9BU0NPTkZfREVMRVRFX0lQOgotCQlzY3RwX25vdGlm
eV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9SRU1PVkVELCBkYXRhLAotCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQlj
YXNlIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWToKLQkJc2N0cF9ub3RpZnlfcGVlcl9h
ZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfTUFERV9QUklNLCBkYXRhLAotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFND
VFBfTk9USUZZX1BFRVJfU0hVVERPV046Ci0JCXNjdHBfbm90aWZ5X3NodXRkb3duX2V2ZW50KHN0
Y2IpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX0FVVEhfTkVXX0tFWToKLQkJc2N0cF9u
b3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksIGVycm9yLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKHVpbnRwdHJfdClkYXRhLAotCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFND
VFBfTk9USUZZX0FVVEhfRlJFRV9LRVk6Ci0JCXNjdHBfbm90aWZ5X2F1dGhlbnRpY2F0aW9uKHN0
Y2IsIFNDVFBfQVVUSF9GUkVFX0tFWSwgZXJyb3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh1aW50MTZfdCkodWludHB0cl90KWRhdGEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNvX2xvY2tlZCk7Ci0JCWJyZWFrOwotCWNhc2UgU0NUUF9OT1RJRllfTk9fUEVFUl9BVVRI
OgotCQlzY3RwX25vdGlmeV9hdXRoZW50aWNhdGlvbihzdGNiLCBTQ1RQX0FVVEhfTk9fQVVUSCwg
ZXJyb3IsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkodWludHB0cl90
KWRhdGEsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Ci0JCWJyZWFr
OwotCWNhc2UgU0NUUF9OT1RJRllfU0VOREVSX0RSWToKLQkJc2N0cF9ub3RpZnlfc2VuZGVyX2Ry
eV9ldmVudChzdGNiLCBzb19sb2NrZWQpOwotCQlicmVhazsKLQljYXNlIFNDVFBfTk9USUZZX1JF
TU9URV9FUlJPUjoKLQkJc2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9yKHN0Y2IsIGVycm9yLCBkYXRh
KTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VUSUwxLCAiJXM6
IHVua25vd24gbm90aWZpY2F0aW9uICV4aCAoJXUpXG4iLAotCQkJX19mdW5jX18sIG5vdGlmaWNh
dGlvbiwgbm90aWZpY2F0aW9uKTsKLQkJYnJlYWs7Ci0JfQkJCS8qIGVuZCBzd2l0Y2ggKi8KLX0K
LQotdm9pZAotc2N0cF9yZXBvcnRfYWxsX291dGJvdW5kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
dWludDE2X3QgZXJyb3IsIGludCBob2xkc19sb2NrLCBpbnQgc29fbG9ja2VkCi0jaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQ
X1VOVVNFRAotI2VuZGlmCi0gICAgKQotewotCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
OwotCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7Ci0Jc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrLCAqbmNoazsKLQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsICpu
c3A7Ci0JaW50IGk7Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JYXNv
YyA9ICZzdGNiLT5hc29jOwotCWlmIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9f
QkVfRlJFRUQpIHsKLQkJLyogYWxyZWFkeSBiZWluZyBmcmVlZCAqLwotCQlyZXR1cm47Ci0JfQot
I2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9sb2NrX2Fz
c2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF91bmxv
Y2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYKLQlpZiAo
KHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkg
fHwKLQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NL
RVRfQUxMR09ORSkgfHwKLQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09D
S0VUKSkgewotCQlyZXR1cm47Ci0JfQotCS8qIG5vdyB0aHJvdWdoIGFsbCB0aGUgZ3VuayBmcmVl
aW5nIGNodW5rcyAqLwotCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9M
T0NLKHN0Y2IpOwotCX0KLQkvKiBzZW50IHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLwotCVRBSUxR
X0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsK
LQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7Ci0JCWFz
b2MtPnNlbnRfcXVldWVfY250LS07Ci0JCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9O
Ul9BQ0tFRCkgewotCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLmNodW5r
c19vbl9xdWV1ZXMgPiAwKSB7Ci0JCQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0u
Y2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCX0gZWxzZSB7Ci0JCQkJ
cGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgY2hrLT5yZWMuZGF0
YS5zaWQpOwotI2VuZGlmCi0JCQl9Ci0JCX0KLQkJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7Ci0J
CQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAxKTsKLQkJCXNjdHBfdWxwX25v
dGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkgICAgICAgICAgICAgICAg
ZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKLQkJCWlmIChjaGstPmRhdGEpIHsKLQkJCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJfQotCQl9Ci0JCXNj
dHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJLypzYV9pZ25vcmUgRlJF
RURfTUVNT1JZKi8KLQl9Ci0JLyogcGVuZGluZyBzZW5kIHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAq
LwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQs
IG5jaGspIHsKLQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4
dCk7Ci0JCWFzb2MtPnNlbmRfcXVldWVfY250LS07Ci0JCWlmIChhc29jLT5zdHJtb3V0W2Noay0+
cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgewotCQkJYXNvYy0+c3RybW91dFtj
aGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwotI2lmZGVmIElOVkFSSUFOVFMK
LQkJfSBlbHNlIHsKLQkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Igc2lkICV1
LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsKLSNlbmRpZgotCQl9Ci0JCWlmIChjaGstPmRhdGEgIT0g
TlVMTCkgewotCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIGNoaywgMSk7Ci0JCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCi0JCQkgICAg
ICAgICAgICAgICAgZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKLQkJCWlmIChjaGstPmRhdGEpIHsK
LQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKLQkJCQljaGstPmRhdGEgPSBOVUxMOwotCQkJ
fQotCQl9Ci0JCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsKLQkJLypz
YV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQl9Ci0JZm9yIChpID0gMDsgaSA8IGFzb2MtPnN0cmVh
bW91dGNudDsgaSsrKSB7Ci0JCS8qIEZvciBlYWNoIHN0cmVhbSAqLwotCQlvdXRzID0gJmFzb2Mt
PnN0cm1vdXRbaV07Ci0JCS8qIGNsZWFuIHVwIGFueSBzZW5kcyB0aGVyZSAqLwotCQlUQUlMUV9G
T1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNwKSB7Ci0JCQlhdG9taWNf
c3VidHJhY3RfaW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsKLQkJCVRBSUxRX1JFTU9W
RSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKLQkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25z
LnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91dHMsIHNwLCBob2xkc19s
b2NrKTsKLQkJCXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2MsIHNwKTsKLQkJCWlmIChz
cC0+ZGF0YSkgewotCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TUEVDSUFMX1NQX0ZB
SUwsIHN0Y2IsCi0JCQkJCQllcnJvciwgKHZvaWQgKilzcCwgc29fbG9ja2VkKTsKLQkJCQlpZiAo
c3AtPmRhdGEpIHsKLQkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKLQkJCQkJc3AtPmRhdGEg
PSBOVUxMOwotCQkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKLQkJCQkJc3AtPmxlbmd0aCA9IDA7
Ci0JCQkJfQotCQkJfQotCQkJaWYgKHNwLT5uZXQpIHsKLQkJCQlzY3RwX2ZyZWVfcmVtb3RlX2Fk
ZHIoc3AtPm5ldCk7Ci0JCQkJc3AtPm5ldCA9IE5VTEw7Ci0JCQl9Ci0JCQkvKiBGcmVlIHRoZSBj
aHVuayAqLwotCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOwotCQkJ
LypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KLQkJfQotCX0KLQotCWlmIChob2xkc19sb2NrID09
IDApIHsKLQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7Ci0JfQotfQotCi12b2lkCi1zY3Rw
X2Fib3J0X25vdGlmaWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgZnJvbV9w
ZWVyLCB1aW50MTZfdCBlcnJvciwKLQkJCXN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICphYm9ydCwg
aW50IHNvX2xvY2tlZAotI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotICAgICkKLXsKLQlpZiAo
c3RjYiA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0J
aWYgKHNvX2xvY2tlZCkgewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNj
dHBfZXApKTsKLQl9IGVsc2UgewotCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3Rj
Yi0+c2N0cF9lcCkpOwotCX0KLSNlbmRpZgotCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8Ci0JICAgICgoc3RjYi0+c2N0cF9lcC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYmCi0JICAgICAoc3RjYi0+c2N0
cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpKSB7Ci0JCXN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQ7Ci0JfQot
CWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSB8fAotCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9BTExHT05FKSB8fAotCSAgICAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVf
Q0xPU0VEX1NPQ0tFVCkpIHsKLQkJcmV0dXJuOwotCX0KLQkvKiBUZWxsIHRoZW0gd2UgbG9zdCB0
aGUgYXNvYyAqLwotCXNjdHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdGNiLCBlcnJvciwgMSwgc29f
bG9ja2VkKTsKLQlpZiAoZnJvbV9wZWVyKSB7Ci0JCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElG
WV9BU1NPQ19SRU1fQUJPUlRFRCwgc3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOwotCX0g
ZWxzZSB7Ci0JCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19MT0NfQUJPUlRFRCwg
c3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOwotCX0KLX0KLQotdm9pZAotc2N0cF9hYm9y
dF9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLAot
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3RydWN0IHNvY2th
ZGRyICpkc3QsCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3Ry
dWN0IG1idWYgKm9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwKLSNlbmRpZgot
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCi17
Ci0JdWludDMyX3QgdnRhZzsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0JdnRhZyA9
IDA7Ci0JaWYgKHN0Y2IgIT0gTlVMTCkgewotCQl2dGFnID0gc3RjYi0+YXNvYy5wZWVyX3Z0YWc7
Ci0JCXZyZl9pZCA9IHN0Y2ItPmFzb2MudnJmX2lkOwotCX0KLQlzY3RwX3NlbmRfYWJvcnQobSwg
aXBobGVuLCBzcmMsIGRzdCwgc2gsIHZ0YWcsIG9wX2VyciwKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQotCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAot
I2VuZGlmCi0JICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7Ci0JaWYgKHN0Y2IgIT0gTlVM
TCkgewotCQkvKiBXZSBoYXZlIGEgVENCIHRvIGFib3J0LCBzZW5kIG5vdGlmaWNhdGlvbiB0b28g
Ki8KLQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMCwgMCwgTlVMTCwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKLQkJc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVE
OwotCQkvKiBPaywgbm93IGxldHMgZnJlZSBpdCAqLwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7
Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKLQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCVNDVFBfVENCX0xPQ0so
c3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKLSNl
bmRpZgotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JCWlmICgo
U0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgfHwKLQkJICAg
IChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNF
SVZFRCkpIHsKLQkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQkJ
fQotCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAot
CQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNCk7
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
Ci0JCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Ci0jZW5kaWYKLQl9Ci19Ci0jaWZkZWYgU0NU
UF9BU09DTE9HX09GX1RTTlMKLXZvaWQKLXNjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IpCi17Ci0jaWZkZWYgTk9TSVlfUFJJTlRTCi0JaW50IGk7Ci0JU0NUUF9Q
UklOVEYoIkxhc3QgZXAgcmVhc29uOiV4XG4iLCBzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2Nv
ZGUpOwotCVNDVFBfUFJJTlRGKCJJTiBib3VuZCBUU04gbG9nLWFhYVxuIik7Ci0JaWYgKChzdGNi
LT5hc29jLnRzbl9pbl9hdCA9PSAwKSAmJiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCA9PSAw
KSkgewotCQlTQ1RQX1BSSU5URigiTm9uZSByY3ZkXG4iKTsKLQkJZ290byBub25lX2luOwotCX0K
LQlpZiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCkgewotCQlmb3IgKGkgPSBzdGNiLT5hc29j
LnRzbl9pbl9hdDsgaSA8IFNDVFBfVFNOX0xPR19TSVpFOyBpKyspIHsKLQkJCVNDVFBfUFJJTlRG
KCJUU046JXggc3RybTolZCBzZXE6JWQgZmxhZ3M6JXggc3o6JWRcbiIsCi0JCQkJICAgIHN0Y2It
PmFzb2MuaW5fdHNubG9nW2ldLnRzbiwKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0u
c3RybSwKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc2VxLAotCQkJCSAgICBzdGNi
LT5hc29jLmluX3RzbmxvZ1tpXS5mbGdzLAotCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tp
XS5zeik7Ci0JCX0KLQl9Ci0JaWYgKHN0Y2ItPmFzb2MudHNuX2luX2F0KSB7Ci0JCWZvciAoaSA9
IDA7IGkgPCBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSsrKSB7Ci0JCQlTQ1RQX1BSSU5URigiVFNO
OiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAotCQkJCSAgICBzdGNiLT5hc29j
LmluX3RzbmxvZ1tpXS50c24sCi0JCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnN0cm0s
Ci0JCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnNlcSwKLQkJCQkgICAgc3RjYi0+YXNv
Yy5pbl90c25sb2dbaV0uZmxncywKLQkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uc3op
OwotCQl9Ci0JfQotIG5vbmVfaW46Ci0JU0NUUF9QUklOVEYoIk9VVCBib3VuZCBUU04gbG9nLWFh
YVxuIik7Ci0JaWYgKChzdGNiLT5hc29jLnRzbl9vdXRfYXQgPT0gMCkgJiYKLQkgICAgKHN0Y2It
PmFzb2MudHNuX291dF93cmFwcGVkID09IDApKSB7Ci0JCVNDVFBfUFJJTlRGKCJOb25lIHNlbnRc
biIpOwotCX0KLQlpZiAoc3RjYi0+YXNvYy50c25fb3V0X3dyYXBwZWQpIHsKLQkJZm9yIChpID0g
c3RjYi0+YXNvYy50c25fb3V0X2F0OyBpIDwgU0NUUF9UU05fTE9HX1NJWkU7IGkrKykgewotCQkJ
U0NUUF9QUklOVEYoIlRTTjoleCBzdHJtOiVkIHNlcTolZCBmbGFnczoleCBzejolZFxuIiwKLQkJ
CQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnRzbiwKLQkJCQkgICAgc3RjYi0+YXNvYy5v
dXRfdHNubG9nW2ldLnN0cm0sCi0JCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5zZXEs
Ci0JCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5mbGdzLAotCQkJCSAgICBzdGNiLT5h
c29jLm91dF90c25sb2dbaV0uc3opOwotCQl9Ci0JfQotCWlmIChzdGNiLT5hc29jLnRzbl9vdXRf
YXQpIHsKLQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2MudHNuX291dF9hdDsgaSsrKSB7Ci0J
CQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAot
CQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0udHNuLAotCQkJCSAgICBzdGNiLT5hc29j
Lm91dF90c25sb2dbaV0uc3RybSwKLQkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnNl
cSwKLQkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLmZsZ3MsCi0JCQkJICAgIHN0Y2It
PmFzb2Mub3V0X3RzbmxvZ1tpXS5zeik7Ci0JCX0KLQl9Ci0jZW5kaWYKLX0KLSNlbmRpZgotCi12
b2lkCi1zY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1i
dWYgKm9wX2VyciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNvX2xvY2tlZAotI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSkKLXsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlzdHJ1
Y3Qgc29ja2V0ICpzbzsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0Jc28gPSBTQ1RQX0lOUF9TTyhpbnApOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaWYgKHNvX2xvY2tlZCkgewotCQlzY3RwX2xvY2tf
YXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0gZWxzZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2Vy
dChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9Ci0jZW5kaWYKLQlpZiAoc3RjYiA9PSBOVUxMKSB7Ci0J
CS8qIEdvdCB0byBoYXZlIGEgVENCICovCi0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgewotCQkJaWYgKExJU1RfRU1QVFkoJmlucC0+c2N0cF9hc29j
X2xpc3QpKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJaWYgKCFzb19sb2NrZWQpIHsK
LQkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJc2N0cF9p
bnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCi0JCQkJCQlTQ1RQX0NB
TExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQkJaWYg
KCFzb19sb2NrZWQpIHsKLQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJCQl9Ci0j
ZW5kaWYKLQkJCX0KLQkJfQotCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJc3RjYi0+YXNvYy5zdGF0
ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOwotCX0KLQkvKiBub3RpZnkgdGhlIHBlZXIgKi8K
LQlzY3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2Vyciwgc29fbG9ja2VkKTsKLQlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7Ci0JaWYgKChTQ1RQX0dFVF9TVEFURSgm
c3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAotCSAgICAoU0NUUF9HRVRfU1RBVEUo
JnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7Ci0JCVNDVFBf
U1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKLQl9Ci0JLyogbm90aWZ5IHRoZSB1
bHAgKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05F
KSA9PSAwKSB7Ci0JCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDAsIDAsIE5VTEwsIHNv
X2xvY2tlZCk7Ci0JfQotCS8qIG5vdyBmcmVlIHRoZSBhc29jICovCi0jaWZkZWYgU0NUUF9BU09D
TE9HX09GX1RTTlMKLQlzY3RwX3ByaW50X291dF90cmFja19sb2coc3RjYik7Ci0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQlp
ZiAoIXNvX2xvY2tlZCkgewotCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEp
OwotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwot
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7Ci0JfQotI2VuZGlmCi0JKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3Rj
YiwgU0NUUF9OT1JNQUxfUFJPQywKLQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBVVElMICsgU0NUUF9MT0NfNSk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JaWYgKCFzb19sb2NrZWQpIHsKLQkJU0NUUF9TT0NLRVRf
VU5MT0NLKHNvLCAxKTsKLQl9Ci0jZW5kaWYKLX0KLQotdm9pZAotc2N0cF9oYW5kbGVfb290Yihz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAgICAgICAgICAgICAgICAg
c3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAqZHN0LAotICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgICAg
ICAgICAgICAgIHN0cnVjdCBtYnVmICpjYXVzZSwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQot
ICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dpZCwgdWlu
dDE2X3QgZmlibnVtLAotI2VuZGlmCi0gICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwg
dWludDE2X3QgcG9ydCkKLXsKLQlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNodW5rX2J1ZjsK
LQl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKLQlpbnQgY29udGFpbnNfaW5pdF9jaHVuazsKLQot
CVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19vdXRvZnRoZWJsdWUpOwotCS8qIEdlbmVy
YXRlIGEgVE8gYWRkcmVzcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAqLwotCWlmIChpbnAgJiYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSkgewotCQlpZiAoTElT
VF9FTVBUWSgmaW5wLT5zY3RwX2Fzb2NfbGlzdCkpIHsKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LQkJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0jZW5kaWYKLQkJCXNj
dHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAotCQkJCQlTQ1RQ
X0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7Ci0jZW5kaWYKLQkJfQotCX0K
LQljb250YWluc19pbml0X2NodW5rID0gMDsKLQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
KXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAotCSAgICBzaXplb2YoKmNoKSwgKHVpbnQ4X3QgKikg
JiBjaHVua19idWYpOwotCXdoaWxlIChjaCAhPSBOVUxMKSB7Ci0JCWNoa19sZW5ndGggPSBudG9o
cyhjaC0+Y2h1bmtfbGVuZ3RoKTsKLQkJaWYgKGNoa19sZW5ndGggPCBzaXplb2YoKmNoKSkgewot
CQkJLyogYnJlYWsgdG8gYWJvcnQgbGFuZCAqLwotCQkJYnJlYWs7Ci0JCX0KLQkJc3dpdGNoIChj
aC0+Y2h1bmtfdHlwZSkgewotCQljYXNlIFNDVFBfSU5JVDoKLQkJCWNvbnRhaW5zX2luaXRfY2h1
bmsgPSAxOwotCQkJYnJlYWs7Ci0JCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKLQkJCS8qIHdl
IGRvbid0IHJlc3BvbmQgdG8gcGt0LWRyb3BwZWQgKi8KLQkJCXJldHVybjsKLQkJY2FzZSBTQ1RQ
X0FCT1JUX0FTU09DSUFUSU9OOgotCQkJLyogd2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIEFCT1JU
IHRvIGFuIEFCT1JUICovCi0JCQlyZXR1cm47Ci0JCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QTEVU
RToKLQkJCS8qCi0JCQkgKiB3ZSBpZ25vcmUgaXQgc2luY2Ugd2UgYXJlIG5vdCB3YWl0aW5nIGZv
ciBpdCBhbmQKLQkJCSAqIHBlZXIgaXMgZ29uZQotCQkJICovCi0JCQlyZXR1cm47Ci0JCWNhc2Ug
U0NUUF9TSFVURE9XTl9BQ0s6Ci0JCQlzY3RwX3NlbmRfc2h1dGRvd25fY29tcGxldGUyKHNyYywg
ZHN0LCBzaCwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKLSNlbmRpZgotCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwotCQkJcmV0dXJuOwotCQlkZWZh
dWx0OgotCQkJYnJlYWs7Ci0JCX0KLQkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5ndGgp
OwotCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0
LAotCQkgICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKLQl9Ci0JaWYg
KChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9PSAwKSB8fAotCSAgICAoKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09IDEpICYmCi0JICAgICAoY29udGFpbnNfaW5p
dF9jaHVuayA9PSAwKSkpIHsKLQkJc2N0cF9zZW5kX2Fib3J0KG0sIGlwaGxlbiwgc3JjLCBkc3Qs
IHNoLCAwLCBjYXVzZSwKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkgICAgICAgICAgICAg
ICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCi0jZW5kaWYKLQkJICAgICAgICAgICAgICAg
IHZyZl9pZCwgcG9ydCk7Ci0JfQotfQotCi0vKgotICogY2hlY2sgdGhlIGluYm91bmQgZGF0YWdy
YW0gdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbiBhYm9ydCBpbnNpZGUgaXQsCi0gKiBpZiB0
aGVyZSBpcyByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KLSAqLwotaW50Ci1zY3RwX2lzX3RoZXJl
X2FuX2Fib3J0X2hlcmUoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHVpbnQzMl90ICogdnRh
Z2ZpbGwpCi17Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCXN0cnVjdCBzY3RwX2luaXRf
Y2h1bmsgKmluaXRfY2hrLCBjaHVua19idWY7Ci0JaW50IG9mZnNldDsKLQl1bnNpZ25lZCBpbnQg
Y2hrX2xlbmd0aDsKLQotCW9mZnNldCA9IGlwaGxlbiArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7
Ci0JY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwg
c2l6ZW9mKCpjaCksCi0JICAgICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKLQl3aGlsZSAoY2gg
IT0gTlVMTCkgewotCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7Ci0JCWlm
IChjaGtfbGVuZ3RoIDwgc2l6ZW9mKCpjaCkpIHsKLQkJCS8qIHBhY2tldCBpcyBwcm9iYWJseSBj
b3JydXB0ICovCi0JCQlicmVhazsKLQkJfQotCQkvKiB3ZSBzZWVtIHRvIGJlIG9rLCBpcyBpdCBh
biBhYm9ydD8gKi8KLQkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQUJPUlRfQVNTT0NJQVRJ
T04pIHsKLQkJCS8qIHllcCwgdGVsbCB0aGVtICovCi0JCQlyZXR1cm4gKDEpOwotCQl9Ci0JCWlm
IChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKLQkJCS8qIG5lZWQgdG8gdXBk
YXRlIHRoZSBWdGFnICovCi0JCQlpbml0X2NoayA9IChzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICop
c2N0cF9tX2dldHB0cihtLAotCQkJICAgIG9mZnNldCwgc2l6ZW9mKCppbml0X2NoayksICh1aW50
OF90ICopICYgY2h1bmtfYnVmKTsKLQkJCWlmIChpbml0X2NoayAhPSBOVUxMKSB7Ci0JCQkJKnZ0
YWdmaWxsID0gbnRvaGwoaW5pdF9jaGstPmluaXQuaW5pdGlhdGVfdGFnKTsKLQkJCX0KLQkJfQot
CQkvKiBOb3BlLCBtb3ZlIHRvIHRoZSBuZXh0IGNodW5rICovCi0JCW9mZnNldCArPSBTQ1RQX1NJ
WkUzMihjaGtfbGVuZ3RoKTsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21f
Z2V0cHRyKG0sIG9mZnNldCwKLQkJICAgIHNpemVvZigqY2gpLCAodWludDhfdCAqKSAmIGNodW5r
X2J1Zik7Ci0JfQotCXJldHVybiAoMCk7Ci19Ci0KLS8qCi0gKiBjdXJyZW50bHkgKDIvMDIpLCBp
ZmFfYWRkciBlbWJlZHMgc2NvcGVfaWQncyBhbmQgZG9uJ3QgaGF2ZSBzaW42X3Njb3BlX2lkCi0g
KiBzZXQgKGkuZS4gaXQncyAwKSBzbywgY3JlYXRlIHRoaXMgZnVuY3Rpb24gdG8gY29tcGFyZSBs
aW5rIGxvY2FsIHNjb3BlcwotICovCi0jaWZkZWYgSU5FVDYKLXVpbnQzMl90Ci1zY3RwX2lzX3Nh
bWVfc2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjEsIHN0cnVjdCBzb2NrYWRkcl9pbjYg
KmFkZHIyKQotewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLSAgICAvKl9fVXNlcnNwYWNl
X18gUmV0dXJuaW5nIDEgaGVyZSBhbHdheXMgKi8KLSNlbmRpZgotI2lmIGRlZmluZWQoU0NUUF9F
TUJFRERFRF9WNl9TQ09QRSkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGEsIGI7Ci0KLQkvKiBzYXZl
IGNvcGllcyAqLwotCWEgPSAqYWRkcjE7Ci0JYiA9ICphZGRyMjsKLQotCWlmIChhLnNpbjZfc2Nv
cGVfaWQgPT0gMCkKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoJmEp
KSB7Ci0jZWxzZQotCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYSwgJmEuc2luNl9hZGRyLCBOVUxM
KSkgewotI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLwotCQkJLyogY2FuJ3QgZ2V0IHNjb3BlLCBz
byBjYW4ndCBtYXRjaCAqLwotCQkJcmV0dXJuICgwKTsKLQkJfQotCWlmIChiLnNpbjZfc2NvcGVf
aWQgPT0gMCkKLSNpZmRlZiBTQ1RQX0tBTUUKLQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoJmIpKSB7
Ci0jZWxzZQotCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYiwgJmIuc2luNl9hZGRyLCBOVUxMKSkg
ewotI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLwotCQkJLyogY2FuJ3QgZ2V0IHNjb3BlLCBzbyBj
YW4ndCBtYXRjaCAqLwotCQkJcmV0dXJuICgwKTsKLQkJfQotCWlmIChhLnNpbjZfc2NvcGVfaWQg
IT0gYi5zaW42X3Njb3BlX2lkKQotCQlyZXR1cm4gKDApOwotI2Vsc2UKLQlpZiAoYWRkcjEtPnNp
bjZfc2NvcGVfaWQgIT0gYWRkcjItPnNpbjZfc2NvcGVfaWQpCi0JCXJldHVybiAoMCk7Ci0jZW5k
aWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotCi0JcmV0dXJuICgxKTsKLX0KLQotI2lm
IGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKLS8qCi0gKiByZXR1cm5zIGEgc29ja2Fk
ZHJfaW42IHdpdGggZW1iZWRkZWQgc2NvcGUgcmVjb3ZlcmVkIGFuZCByZW1vdmVkCi0gKi8KLXN0
cnVjdCBzb2NrYWRkcl9pbjYgKgotc2N0cF9yZWNvdmVyX3Njb3BlKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKmFkZHIsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnN0b3JlKQotewotCS8qIGNoZWNrIGFuZCBz
dHJpcCBlbWJlZGRlZCBzY29wZSBqdW5rICovCi0JaWYgKGFkZHItPnNpbjZfZmFtaWx5ID09IEFG
X0lORVQ2KSB7Ci0JCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2FkZHIp
KSB7Ci0JCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7Ci0JCQkJKnN0b3JlID0gKmFk
ZHI7Ci0jaWZkZWYgU0NUUF9LQU1FCi0JCQkJaWYgKCFzYTZfcmVjb3ZlcnNjb3BlKHN0b3JlKSkg
ewotI2Vsc2UKLQkJCQlpZiAoIWluNl9yZWNvdmVyc2NvcGUoc3RvcmUsICZzdG9yZS0+c2luNl9h
ZGRyLAotCQkJCSAgICBOVUxMKSkgewotI2VuZGlmIC8qIFNDVFBfS0FNRSAqLwotCQkJCQkvKiB1
c2UgdGhlIHJlY292ZXJlZCBzY29wZSAqLwotCQkJCQlhZGRyID0gc3RvcmU7Ci0JCQkJfQotCQkJ
fSBlbHNlIHsKLQkJCQkvKiBlbHNlLCByZXR1cm4gdGhlIG9yaWdpbmFsICJ0byIgYWRkciAqLwot
CQkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIpOwotCQkJfQotCQl9Ci0JfQotCXJl
dHVybiAoYWRkcik7Ci19Ci0jZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotI2Vu
ZGlmCi0KLS8qCi0gKiBhcmUgdGhlIHR3byBhZGRyZXNzZXMgdGhlIHNhbWU/ICBjdXJyZW50bHkg
YSAic2NvcGVsZXNzIiBjaGVjayByZXR1cm5zOiAxCi0gKiBpZiBzYW1lLCAwIGlmIG5vdAotICov
Ci1pbnQKLXNjdHBfY21wYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnNhMSwgc3RydWN0IHNvY2thZGRy
ICpzYTIpCi17Ci0KLQkvKiBtdXN0IGJlIHZhbGlkICovCi0JaWYgKHNhMSA9PSBOVUxMIHx8IHNh
MiA9PSBOVUxMKQotCQlyZXR1cm4gKDApOwotCi0JLyogbXVzdCBiZSB0aGUgc2FtZSBmYW1pbHkg
Ki8KLQlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1pbHkpCi0JCXJldHVybiAoMCk7
Ci0KLQlzd2l0Y2ggKHNhMS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lO
RVQ2OgotCXsKLQkJLyogSVB2NiBhZGRyZXNzZXMgKi8KLQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNl8xLCAqc2luNl8yOwotCi0JCXNpbjZfMSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2Ex
OwotCQlzaW42XzIgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhMjsKLQkJcmV0dXJuIChTQ1RQ
Nl9BUkVfQUREUl9FUVVBTChzaW42XzEsCi0JCSAgICBzaW42XzIpKTsKLQl9Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVUOgotCXsKLQkJLyogSVB2NCBhZGRyZXNzZXMgKi8KLQkJ
c3RydWN0IHNvY2thZGRyX2luICpzaW5fMSwgKnNpbl8yOwotCi0JCXNpbl8xID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKXNhMTsKLQkJc2luXzIgPSAoc3RydWN0IHNvY2thZGRyX2luICopc2EyOwot
CQlyZXR1cm4gKHNpbl8xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2luXzItPnNpbl9hZGRyLnNfYWRk
cik7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09O
TjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubl8xLCAqc2Nvbm5fMjsKLQotCQlz
Y29ubl8xID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2ExOwotCQlzY29ubl8yID0gKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopc2EyOwotCQlyZXR1cm4gKHNjb25uXzEtPnNjb25uX2FkZHIgPT0g
c2Nvbm5fMi0+c2Nvbm5fYWRkcik7Ci0JfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJLyogd2UgZG9u
J3QgZG8gdGhlc2UuLi4gKi8KLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLXZvaWQKLXNjdHBfcHJp
bnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhKQotewotI2lmZGVmIElORVQ2Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCi0JY2hhciBp
cDZidWZbSU5FVDZfQUREUlNUUkxFTl07Ci0jZW5kaWYKLSNlbmRpZgotCi0Jc3dpdGNoIChzYS0+
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCXsKLQkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilz
YTsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJl
c3M6ICV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4OnBvcnQ6JWQgc2NvcGU6JXVcbiIsCi0JCQkgICAg
bnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlswXSksCi0JCQkgICAgbnRvaHMoc2luNi0+
c2luNl9hZGRyLnM2X2FkZHIxNlsxXSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2
X2FkZHIxNlsyXSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlszXSks
Ci0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls0XSksCi0JCQkgICAgbnRv
aHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls1XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2lu
Nl9hZGRyLnM2X2FkZHIxNls2XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2Fk
ZHIxNls3XSksCi0JCQkgICAgbnRvaHMoc2luNi0+c2luNl9wb3J0KSwKLQkJCSAgICBzaW42LT5z
aW42X3Njb3BlX2lkKTsKLSNlbHNlCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gNzAwMDAwCi0JCVNDVFBfUFJJTlRGKCJJUHY2IGFkZHJlc3M6ICVzOnBv
cnQ6JWQgc2NvcGU6JXVcbiIsCi0JCQkgICAgaXA2X3NwcmludGYoaXA2YnVmLCAmc2luNi0+c2lu
Nl9hZGRyKSwKLQkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAotCQkJICAgIHNpbjYtPnNp
bjZfc2NvcGVfaWQpOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYoIklQdjYgYWRkcmVzczogJXM6cG9y
dDolZCBzY29wZToldVxuIiwKLQkJCSAgICBpcDZfc3ByaW50Zigmc2luNi0+c2luNl9hZGRyKSwK
LQkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAotCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVf
aWQpOwotI2VuZGlmCi0jZW5kaWYKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0jaWZkZWYgSU5FVAot
CWNhc2UgQUZfSU5FVDoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotCQl1bnNpZ25l
ZCBjaGFyICpwOwotCi0JCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQkJcCA9ICh1
bnNpZ25lZCBjaGFyICopJnNpbi0+c2luX2FkZHI7Ci0JCVNDVFBfUFJJTlRGKCJJUHY0IGFkZHJl
c3M6ICV1LiV1LiV1LiV1OiVkXG4iLAotCQkJICAgIHBbMF0sIHBbMV0sIHBbMl0sIHBbM10sIG50
b2hzKHNpbi0+c2luX3BvcnQpKTsKLQkJYnJlYWs7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQl7Ci0JCXN0cnVjdCBzb2NrYWRkcl9jb25u
ICpzY29ubjsKLQotCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOwotCQlTQ1RQ
X1BSSU5URigiQUZfQ09OTiBhZGRyZXNzOiAlcFxuIiwgc2Nvbm4tPnNjb25uX2FkZHIpOwotCQli
cmVhazsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlTQ1RQX1BSSU5URigiP1xuIik7Ci0JCWJy
ZWFrOwotCX0KLX0KLQotdm9pZAotc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoc3Ry
dWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsCi0gICAgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19pbnAs
Ci0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAotICAgIGludCB3YWl0ZmxhZ3MpCi17Ci0JLyoK
LQkgKiBnbyB0aHJvdWdoIG91ciBvbGQgSU5QIGFuZCBwdWxsIG9mZiBhbnkgY29udHJvbCBzdHJ1
Y3R1cmVzIHRoYXQKLQkgKiBiZWxvbmcgdG8gc3RjYiBhbmQgbW92ZSB0aGVuIHRvIHRoZSBuZXcg
aW5wLgotCSAqLwotCXN0cnVjdCBzb2NrZXQgKm9sZF9zbywgKm5ld19zbzsKLQlzdHJ1Y3Qgc2N0
cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jdGw7Ci0Jc3RydWN0IHNjdHBfcmVhZGhlYWQg
dG1wX3F1ZXVlOwotCXN0cnVjdCBtYnVmICptOwotCWludCBlcnJvciA9IDA7Ci0KLQlvbGRfc28g
PSBvbGRfaW5wLT5zY3RwX3NvY2tldDsKLQluZXdfc28gPSBuZXdfaW5wLT5zY3RwX3NvY2tldDsK
LQlUQUlMUV9JTklUKCZ0bXBfcXVldWUpOwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwCi0JU09DS0JVRl9MT0NLKCYob2xkX3NvLT5zb19yY3Yp
KTsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9f
KQotCWVycm9yID0gc2Jsb2NrKCZvbGRfc28tPnNvX3Jjdiwgd2FpdGZsYWdzKTsKLSNlbmRpZgot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwCi0J
U09DS0JVRl9VTkxPQ0soJihvbGRfc28tPnNvX3JjdikpOwotI2VuZGlmCi0JaWYgKGVycm9yKSB7
Ci0JCS8qIEdhaywgY2FuJ3QgZ2V0IHNibG9jaywgd2UgaGF2ZSBhIHByb2JsZW0uCi0JCSAqIGRh
dGEgd2lsbCBiZSBsZWZ0IHN0cmFuZGVkLi4gYW5kIHdlCi0JCSAqIGRvbid0IGRhcmUgbG9vayBh
dCBpdCBzaW5jZSB0aGUKLQkJICogb3RoZXIgdGhyZWFkIG1heSBiZSByZWFkaW5nIHNvbWV0aGlu
Zy4KLQkJICogT2ggd2VsbCwgaXRzIGEgc2NyZXdlZCB1cCBhcHAgdGhhdCBkb2VzCi0JCSAqIGEg
cGVlbG9mZiBPUiBhIGFjY2VwdCB3aGlsZSByZWFkaW5nCi0JCSAqIGZyb20gdGhlIG1haW4gc29j
a2V0Li4uIGFjdHVhbGx5IGl0cwotCQkgKiBvbmx5IHRoZSBwZWVsb2ZmKCkgY2FzZSwgc2luY2Ug
SSB0aGluawotCQkgKiByZWFkIHdpbGwgZmFpbCBvbiBhIGxpc3RlbmluZyBzb2NrZXQuLgotCQkg
Ki8KLQkJcmV0dXJuOwotCX0KLQkvKiBsb2NrIHRoZSBzb2NrZXQgYnVmZmVycyAqLwotCVNDVFBf
SU5QX1JFQURfTE9DSyhvbGRfaW5wKTsKLQlUQUlMUV9GT1JFQUNIX1NBRkUoY29udHJvbCwgJm9s
ZF9pbnAtPnJlYWRfcXVldWUsIG5leHQsIG5jdGwpIHsKLQkJLyogUHVsbCBvZmYgYWxsIGZvciBv
dXQgdGFyZ2V0IHN0Y2IgKi8KLQkJaWYgKGNvbnRyb2wtPnN0Y2IgPT0gc3RjYikgewotCQkJLyog
cmVtb3ZlIGl0IHdlIHdhbnQgaXQgKi8KLQkJCVRBSUxRX1JFTU9WRSgmb2xkX2lucC0+cmVhZF9x
dWV1ZSwgY29udHJvbCwgbmV4dCk7Ci0JCQlUQUlMUV9JTlNFUlRfVEFJTCgmdG1wX3F1ZXVlLCBj
b250cm9sLCBuZXh0KTsKLQkJCW0gPSBjb250cm9sLT5kYXRhOwotCQkJd2hpbGUgKG0pIHsKLQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dH
SU5HX0VOQUJMRSkgewotCQkJCQlzY3RwX3NibG9nKCZvbGRfc28tPnNvX3JjdiwgY29udHJvbC0+
ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JGUkVFLFNDVFBfQlVGX0xFTiht
KSk7Ci0JCQkJfQotCQkJCXNjdHBfc2JmcmVlKGNvbnRyb2wsIHN0Y2IsICZvbGRfc28tPnNvX3Jj
diwgbSk7Ci0JCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQkJc2N0cF9zYmxvZygmb2xkX3NvLT5zb19yY3Ys
IGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxULCAw
KTsKLQkJCQl9Ci0JCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JCQl9Ci0JCX0KLQl9Ci0JU0NU
UF9JTlBfUkVBRF9VTkxPQ0sob2xkX2lucCk7Ci0JLyogUmVtb3ZlIHRoZSBzYi1sb2NrIG9uIHRo
ZSBvbGQgc29ja2V0ICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPCA3MDAwMDAKLQlTT0NLQlVGX0xPQ0soJihvbGRfc28tPnNvX3JjdikpOwotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2J1bmxvY2soJm9sZF9zby0+c29fcmN2LCAxKTsK
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQlzYnVubG9jaygmb2xkX3NvLT5z
b19yY3YpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPCA3MDAwMDAKLQlTT0NLQlVGX1VOTE9DSygmKG9sZF9zby0+c29fcmN2KSk7Ci0jZW5k
aWYKLQkvKiBOb3cgd2UgbW92ZSB0aGVtIG92ZXIgdG8gdGhlIG5ldyBzb2NrZXQgYnVmZmVyICov
Ci0JU0NUUF9JTlBfUkVBRF9MT0NLKG5ld19pbnApOwotCVRBSUxRX0ZPUkVBQ0hfU0FGRShjb250
cm9sLCAmdG1wX3F1ZXVlLCBuZXh0LCBuY3RsKSB7Ci0JCVRBSUxRX0lOU0VSVF9UQUlMKCZuZXdf
aW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJbSA9IGNvbnRyb2wtPmRhdGE7Ci0J
CXdoaWxlIChtKSB7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfc2Jsb2coJm5ld19zby0+c29f
cmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFMTE9D
LCBTQ1RQX0JVRl9MRU4obSkpOwotCQkJfQotCQkJc2N0cF9zYmFsbG9jKHN0Y2IsICZuZXdfc28t
PnNvX3JjdiwgbSk7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCXNjdHBfc2Jsb2coJm5ld19zby0+c29f
cmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQlJFU1VM
VCwgMCk7Ci0JCQl9Ci0JCQltID0gU0NUUF9CVUZfTkVYVChtKTsKLQkJfQotCX0KLQlTQ1RQX0lO
UF9SRUFEX1VOTE9DSyhuZXdfaW5wKTsKLX0KLQotdm9pZAotc2N0cF93YWtldXBfdGhlX3JlYWRf
c29ja2V0KHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0gICAgc3RydWN0IHNjdHBfdGNiICpzdGNi
LAotICAgIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSkKLXsKLQlp
ZiAoKGlucCAhPSBOVUxMKSAmJiAoaW5wLT5zY3RwX3NvY2tldCAhPSBOVUxMKSkgewotCQlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfWkVST19DT1BZX0FDVElWRSkp
IHsKLQkJCVNDVFBfWkVST19DT1BZX0VWRU5UKGlucCwgaW5wLT5zY3RwX3NvY2tldCk7Ci0JCX0g
ZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCi0JCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLQotCQkJc28gPSBTQ1RQX0lOUF9TTyhpbnAp
OwotCQkJaWYgKCFzb19sb2NrZWQpIHsKLQkJCQlpZiAoc3RjYikgewotCQkJCQlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
Ci0JCQkJfQotCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotCQkJCWlmIChzdGNiKSB7Ci0J
CQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKLQkJCQl9Ci0JCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7Ci0JCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7
Ci0JCQkJCXJldHVybjsKLQkJCQl9Ci0JCQl9Ci0jZW5kaWYKLQkJCXNjdHBfc29yd2FrZXVwKGlu
cCwgaW5wLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCQlpZiAoIXNvX2xvY2tlZCkgewotCQkJCVNDVFBfU09D
S0VUX1VOTE9DSyhzbywgMSk7Ci0JCQl9Ci0jZW5kaWYKLQkJfQotCX0KLX0KLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0KLXZvaWQKLXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqY29udHJvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlucF9yZWFk
X2xvY2tfaGVsZCkKLXsKLQl1aW50MzJfdCBwZF9wb2ludCwgbGVuZ3RoOwotCi0JaWYgKChpbnAt
PnJlY3ZfY2FsbGJhY2sgPT0gTlVMTCkgfHwKLQkgICAgKHN0Y2IgPT0gTlVMTCkgfHwKLQkgICAg
KHN0Y2ItPnNjdHBfc29ja2V0ID09IE5VTEwpKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQlsZW5ndGgg
PSBjb250cm9sLT5sZW5ndGg7Ci0JaWYgKHN0Y2IgIT0gTlVMTCAmJiBzdGNiLT5zY3RwX3NvY2tl
dCAhPSBOVUxMKSB7Ci0JCXBkX3BvaW50ID0gbWluKFNDVFBfU0JfTElNSVRfUkNWKHN0Y2ItPnNj
dHBfc29ja2V0KSA+PiBTQ1RQX1BBUlRJQUxfREVMSVZFUllfU0hJRlQsCi0JCQkgICAgICAgc3Rj
Yi0+c2N0cF9lcC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCk7Ci0JfSBlbHNlIHsKLQkJcGRfcG9p
bnQgPSBpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQ7Ci0JfQotCWlmICgoY29udHJvbC0+ZW5k
X2FkZGVkID09IDEpIHx8IChsZW5ndGggPj0gcGRfcG9pbnQpKSB7Ci0JCXN0cnVjdCBzb2NrZXQg
KnNvOwotCQlzdHJ1Y3QgbWJ1ZiAqbTsKLQkJY2hhciAqYnVmZmVyOwotCQlzdHJ1Y3Qgc2N0cF9y
Y3ZpbmZvIHJjdjsKLQkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcjsKLQkJaW50IGZsYWdzOwot
Ci0JCWlmICgoYnVmZmVyID0gbWFsbG9jKGxlbmd0aCkpID09IE5VTEwpIHsKLQkJCXJldHVybjsK
LQkJfQotCQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09IDApIHsKLQkJCVNDVFBfSU5QX1JFQURf
TE9DSyhpbnApOwotCQl9Ci0JCXNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7Ci0JCWZvciAobSA9IGNv
bnRyb2wtPmRhdGE7IG07IG0gPSBTQ1RQX0JVRl9ORVhUKG0pKSB7Ci0JCQlzY3RwX3NiZnJlZShj
b250cm9sLCBjb250cm9sLT5zdGNiLCAmc28tPnNvX3JjdiwgbSk7Ci0JCX0KLQkJbV9jb3B5ZGF0
YShjb250cm9sLT5kYXRhLCAwLCBsZW5ndGgsIGJ1ZmZlcik7Ci0JCW1lbXNldCgmcmN2LCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpOwotCQlyY3YucmN2X3NpZCA9IGNvbnRyb2wtPnNp
bmZvX3N0cmVhbTsKLQkJcmN2LnJjdl9zc24gPSAodWludDE2X3QpY29udHJvbC0+bWlkOwotCQly
Y3YucmN2X2ZsYWdzID0gY29udHJvbC0+c2luZm9fZmxhZ3M7Ci0JCXJjdi5yY3ZfcHBpZCA9IGNv
bnRyb2wtPnNpbmZvX3BwaWQ7Ci0JCXJjdi5yY3ZfdHNuID0gY29udHJvbC0+c2luZm9fdHNuOwot
CQlyY3YucmN2X2N1bXRzbiA9IGNvbnRyb2wtPnNpbmZvX2N1bXRzbjsKLQkJcmN2LnJjdl9jb250
ZXh0ID0gY29udHJvbC0+c2luZm9fY29udGV4dDsKLQkJcmN2LnJjdl9hc3NvY19pZCA9IGNvbnRy
b2wtPnNpbmZvX2Fzc29jX2lkOwotCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZih1bmlvbiBzY3Rw
X3NvY2tzdG9yZSkpOwotCQlzd2l0Y2ggKGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2Eu
c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlhZGRyLnNpbiA9
IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQkJYWRkci5zaW42ID0gY29udHJvbC0+d2hv
RnJvbS0+cm8uX2xfYWRkci5zaW42OwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05O
OgotCQkJYWRkci5zY29ubiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2Nvbm47Ci0J
CQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWFkZHIuc2EgPSBjb250cm9sLT53aG9Gcm9tLT5yby5f
bF9hZGRyLnNhOwotCQkJYnJlYWs7Ci0JCX0KLQkJZmxhZ3MgPSAwOwotCQlpZiAoY29udHJvbC0+
ZW5kX2FkZGVkID09IDEpIHsKLQkJCWZsYWdzIHw9IE1TR19FT1I7Ci0JCX0KLQkJaWYgKGNvbnRy
b2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgewotCQkJZmxhZ3MgfD0gTVNHX05PVElG
SUNBVElPTjsKLQkJfQotCQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7Ci0JCWNvbnRyb2wt
PmRhdGEgPSBOVUxMOwotCQljb250cm9sLT50YWlsX21idWYgPSBOVUxMOwotCQljb250cm9sLT5s
ZW5ndGggPSAwOwotCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7Ci0JCQlUQUlMUV9SRU1PVkUo
JnN0Y2ItPnNjdHBfZXAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJY29udHJvbC0+
b25fcmVhZF9xID0gMDsKLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9t
KTsKLQkJCWNvbnRyb2wtPndob0Zyb20gPSBOVUxMOwotCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3Rj
YiwgY29udHJvbCk7Ci0JCX0KLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09
IDApIHsKLQkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7Ci0JCX0KLQkJaW5wLT5yZWN2X2Nh
bGxiYWNrKHNvLCBhZGRyLCBidWZmZXIsIGxlbmd0aCwgcmN2LCBmbGFncywgaW5wLT51bHBfaW5m
byk7Ci0JCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKLQl9Ci19Ci0jZW5kaWYKLQotdm9pZAotc2N0cF9hZGRfdG9fcmVh
ZHEoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0g
ICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAgc3RydWN0IHNvY2ti
dWYgKnNiLAotICAgIGludCBlbmQsCi0gICAgaW50IGlucF9yZWFkX2xvY2tfaGVsZCwKLSAgICBp
bnQgc29fbG9ja2VkCi0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgKQotewotCS8qCi0J
ICogSGVyZSB3ZSBtdXN0IHBsYWNlIHRoZSBjb250cm9sIG9uIHRoZSBlbmQgb2YgdGhlIHNvY2tl
dCByZWFkCi0JICogcXVldWUgQU5EIGluY3JlbWVudCBzYl9jYyBzbyB0aGF0IHNlbGVjdCB3aWxs
IHdvcmsgcHJvcGVybHkgb24KLQkgKiByZWFkLgotCSAqLwotCXN0cnVjdCBtYnVmICptLCAqcHJl
diA9IE5VTEw7Ci0KLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJLyogR2FrLCBUU05IISEgKi8KLSNp
ZmRlZiBJTlZBUklBTlRTCi0JCXBhbmljKCJHYWssIGlucCBOVUxMIG9uIGFkZF90b19yZWFkcSIp
OwotI2VuZGlmCi0JCXJldHVybjsKLQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JaWYgKHNv
X2xvY2tlZCkgewotCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOwotCX0gZWxz
ZSB7Ci0JCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKLQl9Ci0jZW5kaWYK
LQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09IDApCi0JCVNDVFBfSU5QX1JFQURfTE9DSyhpbnAp
OwotCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQ0FOVF9SRUFE
KSB7Ci0JCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKLQkJaWYgKGNv
bnRyb2wtPmRhdGEpIHsKLQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKLQkJCWNvbnRy
b2wtPmRhdGEgPSBOVUxMOwotCQl9Ci0JCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wp
OwotCQlpZiAoaW5wX3JlYWRfbG9ja19oZWxkID09IDApCi0JCQlTQ1RQX0lOUF9SRUFEX1VOTE9D
SyhpbnApOwotCQlyZXR1cm47Ci0JfQotCWlmICghKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05P
VElGSUNBVElPTikpIHsKLQkJYXRvbWljX2FkZF9pbnQoJmlucC0+dG90YWxfcmVjdnMsIDEpOwot
CQlpZiAoIWNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYikgewotCQkJYXRvbWljX2FkZF9pbnQoJnN0
Y2ItPnRvdGFsX3JlY3ZzLCAxKTsKLQkJfQotCX0KLQltID0gY29udHJvbC0+ZGF0YTsKLQljb250
cm9sLT5oZWxkX2xlbmd0aCA9IDA7Ci0JY29udHJvbC0+bGVuZ3RoID0gMDsKLQl3aGlsZSAobSkg
ewotCQlpZiAoU0NUUF9CVUZfTEVOKG0pID09IDApIHsKLQkJCS8qIFNraXAgbWJ1ZnMgd2l0aCBO
TyBsZW5ndGggKi8KLQkJCWlmIChwcmV2ID09IE5VTEwpIHsKLQkJCQkvKiBGaXJzdCBvbmUgKi8K
LQkJCQljb250cm9sLT5kYXRhID0gc2N0cF9tX2ZyZWUobSk7Ci0JCQkJbSA9IGNvbnRyb2wtPmRh
dGE7Ci0JCQl9IGVsc2UgewotCQkJCVNDVFBfQlVGX05FWFQocHJldikgPSBzY3RwX21fZnJlZSht
KTsKLQkJCQltID0gU0NUUF9CVUZfTkVYVChwcmV2KTsKLQkJCX0KLQkJCWlmIChtID09IE5VTEwp
IHsKLQkJCQljb250cm9sLT50YWlsX21idWYgPSBwcmV2OwotCQkJfQotCQkJY29udGludWU7Ci0J
CX0KLQkJcHJldiA9IG07Ci0JCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQlzY3RwX3NibG9nKHNiLCBjb250cm9s
LT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkFMTE9DLCBTQ1RQX0JVRl9M
RU4obSkpOwotCQl9Ci0JCXNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSk7Ci0JCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7
Ci0JCQlzY3RwX3NibG9nKHNiLCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBT
Q1RQX0xPR19TQlJFU1VMVCwgMCk7Ci0JCX0KLQkJYXRvbWljX2FkZF9pbnQoJmNvbnRyb2wtPmxl
bmd0aCwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJbSA9IFNDVFBfQlVGX05FWFQobSk7Ci0JfQotCWlm
IChwcmV2ICE9IE5VTEwpIHsKLQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKLQl9IGVsc2Ug
ewotCQkvKiBFdmVyeXRoaW5nIGdvdCBjb2xsYXBzZWQgb3V0Pz8gKi8KLQkJc2N0cF9mcmVlX3Jl
bW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20pOwotCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBj
b250cm9sKTsKLQkJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKQotCQkJU0NUUF9JTlBfUkVB
RF9VTkxPQ0soaW5wKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoZW5kKSB7Ci0JCWNvbnRyb2wtPmVu
ZF9hZGRlZCA9IDE7Ci0JfQotCVRBSUxRX0lOU0VSVF9UQUlMKCZpbnAtPnJlYWRfcXVldWUsIGNv
bnRyb2wsIG5leHQpOwotCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDE7Ci0JaWYgKGlucF9yZWFkX2xv
Y2tfaGVsZCA9PSAwKQotCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLQlzY3RwX2ludm9rZV9yZWN2X2NhbGxiYWNrKGlucCwgc3RjYiwgY29u
dHJvbCwgaW5wX3JlYWRfbG9ja19oZWxkKTsKLSNlbmRpZgotCWlmIChpbnAgJiYgaW5wLT5zY3Rw
X3NvY2tldCkgewotCQlzY3RwX3dha2V1cF90aGVfcmVhZF9zb2NrZXQoaW5wLCBzdGNiLCBzb19s
b2NrZWQpOwotCX0KLX0KLQotLyoqKioqKioqKioqKipIT0xEIFRISVMgQ09NTUVOVCBGT1IgUEFU
Q0ggRklMRSBPRgotICoqKioqKioqKioqKipBTFRFUk5BVEUgUk9VVElORyBDT0RFCi0gKi8KLQot
LyoqKioqKioqKioqKipIT0xEIFRISVMgQ09NTUVOVCBGT1IgRU5EIE9GIFBBVENIIEZJTEUgT0YK
LSAqKioqKioqKioqKioqQUxURVJOQVRFIFJPVVRJTkcgQ09ERQotICovCi0KLXN0cnVjdCBtYnVm
ICoKLXNjdHBfZ2VuZXJhdGVfY2F1c2UodWludDE2X3QgY29kZSwgY2hhciAqaW5mbykKLXsKLQlz
dHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKmNhdXNlOwotCXNp
emVfdCBpbmZvX2xlbjsKLQl1aW50MTZfdCBsZW47Ci0KLQlpZiAoKGNvZGUgPT0gMCkgfHwgKGlu
Zm8gPT0gTlVMTCkpIHsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaW5mb19sZW4gPSBzdHJsZW4o
aW5mbyk7Ci0JaWYgKGluZm9fbGVuID4gKFNDVFBfTUFYX0NBVVNFX0xFTkdUSCAtIHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcikpKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCWxlbiA9ICh1
aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIGluZm9fbGVuKTsKLQltID0g
c2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwotCWlm
IChtICE9IE5VTEwpIHsKLQkJU0NUUF9CVUZfTEVOKG0pID0gbGVuOwotCQljYXVzZSA9IG10b2Qo
bSwgc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICopOwotCQljYXVzZS0+Y29kZSA9IGh0b25z
KGNvZGUpOwotCQljYXVzZS0+bGVuZ3RoID0gaHRvbnMobGVuKTsKLQkJbWVtY3B5KGNhdXNlLT5p
bmZvLCBpbmZvLCBpbmZvX2xlbik7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0KLXN0cnVjdCBtYnVm
ICoKLXNjdHBfZ2VuZXJhdGVfbm9fdXNlcl9kYXRhX2NhdXNlKHVpbnQzMl90IHRzbikKLXsKLQlz
dHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3Qgc2N0cF9lcnJvcl9ub191c2VyX2RhdGEgKm5vX3VzZXJf
ZGF0YV9jYXVzZTsKLQl1aW50MTZfdCBsZW47Ci0KLQlsZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX2Vycm9yX25vX3VzZXJfZGF0YSk7Ci0JbSA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhsZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKLQlpZiAobSAhPSBOVUxMKSB7Ci0JCVND
VFBfQlVGX0xFTihtKSA9IGxlbjsKLQkJbm9fdXNlcl9kYXRhX2NhdXNlID0gbXRvZChtLCBzdHJ1
Y3Qgc2N0cF9lcnJvcl9ub191c2VyX2RhdGEgKik7Ci0JCW5vX3VzZXJfZGF0YV9jYXVzZS0+Y2F1
c2UuY29kZSA9IGh0b25zKFNDVFBfQ0FVU0VfTk9fVVNFUl9EQVRBKTsKLQkJbm9fdXNlcl9kYXRh
X2NhdXNlLT5jYXVzZS5sZW5ndGggPSBodG9ucyhsZW4pOwotCQlub191c2VyX2RhdGFfY2F1c2Ut
PnRzbiA9IGh0b25sKHRzbik7Ci0JfQotCXJldHVybiAobSk7Ci19Ci0KLSNpZmRlZiBTQ1RQX01C
Q05UX0xPR0dJTkcKLXZvaWQKLXNjdHBfZnJlZV9idWZzcGFjZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAotICAgIHN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKnRwMSwgaW50IGNoa19jbnQpCi17Ci0JaWYgKHRwMS0+ZGF0YSA9PSBOVUxMKSB7Ci0J
CXJldHVybjsKLQl9Ci0JYXNvYy0+Y2h1bmtzX29uX291dF9xdWV1ZSAtPSBjaGtfY250OwotCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CQ05UX0xPR0dJ
TkdfRU5BQkxFKSB7Ci0JCXNjdHBfbG9nX21iY250KFNDVFBfTE9HX01CQ05UX0RFQ1JFQVNFLAot
CQkJICAgICAgIGFzb2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplLAotCQkJICAgICAgIHRwMS0+
Ym9va19zaXplLAotCQkJICAgICAgIDAsCi0JCQkgICAgICAgdHAxLT5tYmNudCk7Ci0JfQotCWlm
IChhc29jLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA+PSB0cDEtPmJvb2tfc2l6ZSkgewotCQlh
dG9taWNfYWRkX2ludCgmYXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsIC10cDEtPmJvb2tf
c2l6ZSk7Ci0JfSBlbHNlIHsKLQkJYXNvYy0+dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOwot
CX0KLQotCWlmIChzdGNiLT5zY3RwX3NvY2tldCAmJiAoKChzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHx8Ci0JCQkJICAoKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSkpKSB7Ci0JCWlmIChzdGNi
LT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID49IHRwMS0+Ym9va19zaXplKSB7Ci0JCQlzdGNi
LT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjIC09IHRwMS0+Ym9va19zaXplOwotCQl9IGVsc2Ug
ewotCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7Ci0KLQkJfQotCX0KLX0K
LQotI2VuZGlmCi0KLWludAotc2N0cF9yZWxlYXNlX3ByX3NjdHBfY2h1bmsoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsCi0JCQkgICB1aW50OF90IHNl
bnQsIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQotCQkJICAgU0NUUF9VTlVTRUQKLSNlbmRpZgotCSkKLXsKLQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxOwotCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNo
ayA9IE5VTEwsICp0cDI7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwOwot
CXVpbnQzMl90IG1pZDsKLQl1aW50MTZfdCBzaWQ7Ci0JdWludDhfdCBmb3VuZGVvbSA9IDA7Ci0J
aW50IHJldF9zeiA9IDA7Ci0JaW50IG5vdGRvbmU7Ci0JaW50IGRvX3dha2V1cF9yb3V0aW5lID0g
MDsKLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotCWlmIChzb19sb2NrZWQpIHsKLQkJc2N0cF9s
b2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7Ci0JfSBlbHNlIHsKLQkJc2N0
cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKLQl9Ci0jZW5kaWYK
LQlzaWQgPSB0cDEtPnJlYy5kYXRhLnNpZDsKLQltaWQgPSB0cDEtPnJlYy5kYXRhLm1pZDsKLQlp
ZiAoc2VudCB8fCAhKHRwMS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZS
QUcpKSB7Ci0JCXN0Y2ItPmFzb2MuYWJhbmRvbmVkX3NlbnRbMF0rKzsKLQkJc3RjYi0+YXNvYy5h
YmFuZG9uZWRfc2VudFtQUl9TQ1RQX1BPTElDWSh0cDEtPmZsYWdzKV0rKzsKLQkJc3RjYi0+YXNv
Yy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbMF0rKzsKLSNpZiBkZWZpbmVkKFNDVFBfREVU
QUlMRURfU1RSX1NUQVRTKQotCQlzdGNiLT5hc29jLnN0cm1vdXRbc3RyZWFtXS5hYmFuZG9uZWRf
c2VudFtQUl9TQ1RQX1BPTElDWSh0cDEtPmZsYWdzKV0rKzsKLSNlbmRpZgotCX0gZWxzZSB7Ci0J
CXN0Y2ItPmFzb2MuYWJhbmRvbmVkX3Vuc2VudFswXSsrOwotCQlzdGNiLT5hc29jLmFiYW5kb25l
ZF91bnNlbnRbUFJfU0NUUF9QT0xJQ1kodHAxLT5mbGFncyldKys7Ci0JCXN0Y2ItPmFzb2Muc3Ry
bW91dFtzaWRdLmFiYW5kb25lZF91bnNlbnRbMF0rKzsKLSNpZiBkZWZpbmVkKFNDVFBfREVUQUlM
RURfU1RSX1NUQVRTKQotCQlzdGNiLT5hc29jLnN0cm1vdXRbc3RyZWFtXS5hYmFuZG9uZWRfdW5z
ZW50W1BSX1NDVFBfUE9MSUNZKHRwMS0+ZmxhZ3MpXSsrOwotI2VuZGlmCi0JfQotCWRvIHsKLQkJ
cmV0X3N6ICs9IHRwMS0+Ym9va19zaXplOwotCQlpZiAodHAxLT5kYXRhICE9IE5VTEwpIHsKLQkJ
CWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewotCQkJCXNjdHBfZmxpZ2h0
X3NpemVfZGVjcmVhc2UodHAxKTsKLQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNi
LCB0cDEpOwotCQkJfQotCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCB0
cDEsIDEpOwotCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kICs9IHRwMS0+c2VuZF9zaXplOwotCQkJ
c3RjYi0+YXNvYy5wZWVyc19yd25kICs9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5r
X29oKTsKLQkJCWlmIChzZW50KSB7Ci0JCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NF
TlRfREdfRkFJTCwgc3RjYiwgMCwgdHAxLCBzb19sb2NrZWQpOwotCQkJfSBlbHNlIHsKLQkJCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsIDAsIHRwMSwg
c29fbG9ja2VkKTsKLQkJCX0KLQkJCWlmICh0cDEtPmRhdGEpIHsKLQkJCQlzY3RwX21fZnJlZW0o
dHAxLT5kYXRhKTsKLQkJCQl0cDEtPmRhdGEgPSBOVUxMOwotCQkJfQotCQkJZG9fd2FrZXVwX3Jv
dXRpbmUgPSAxOwotCQkJaWYgKFBSX1NDVFBfQlVGX0VOQUJMRUQodHAxLT5mbGFncykpIHsKLQkJ
CQlzdGNiLT5hc29jLnNlbnRfcXVldWVfY250X3JlbW92ZWFibGUtLTsKLQkJCX0KLQkJfQotCQl0
cDEtPnNlbnQgPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVA7Ci0JCWlmICgodHAxLT5yZWMuZGF0YS5y
Y3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpID09Ci0JCSAgICBTQ1RQX0RBVEFfTk9UX0ZS
QUcpIHsKLQkJCS8qIG5vdCBmcmFnJ2VkIHdlIGFlIGRvbmUgICAqLwotCQkJbm90ZG9uZSA9IDA7
Ci0JCQlmb3VuZGVvbSA9IDE7Ci0JCX0gZWxzZSBpZiAodHAxLT5yZWMuZGF0YS5yY3ZfZmxhZ3Mg
JiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7Ci0JCQkvKiBlbmQgb2YgZnJhZywgd2UgYXJlIGRvbmUg
Ki8KLQkJCW5vdGRvbmUgPSAwOwotCQkJZm91bmRlb20gPSAxOwotCQl9IGVsc2UgewotCQkJLyoK
LQkJCSAqIEl0cyBhIGJlZ2luIG9yIG1pZGRsZSBwaWVjZSwgd2UgbXVzdCBtYXJrIGFsbCBvZgot
CQkJICogaXQKLQkJCSAqLwotCQkJbm90ZG9uZSA9IDE7Ci0JCQl0cDEgPSBUQUlMUV9ORVhUKHRw
MSwgc2N0cF9uZXh0KTsKLQkJfQotCX0gd2hpbGUgKHRwMSAmJiBub3Rkb25lKTsKLQlpZiAoZm91
bmRlb20gPT0gMCkgewotCQkvKgotCQkgKiBUaGUgbXVsdGktcGFydCBtZXNzYWdlIHdhcyBzY2F0
dGVyZWQgYWNyb3NzIHRoZSBzZW5kIGFuZAotCQkgKiBzZW50IHF1ZXVlLgotCQkgKi8KLQkJVEFJ
TFFfRk9SRUFDSF9TQUZFKHRwMSwgJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCB0
cDIpIHsKLQkJCWlmICgodHAxLT5yZWMuZGF0YS5zaWQgIT0gc2lkKSB8fAotCQkJICAgICghU0NU
UF9NSURfRVEoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQsIHRwMS0+cmVjLmRhdGEubWlkLCBt
aWQpKSkgewotCQkJCWJyZWFrOwotCQkJfQotCQkJLyogc2F2ZSB0byBjaGsgaW4gY2FzZSB3ZSBo
YXZlIHNvbWUgb24gc3RyZWFtIG91dAotCQkJICogcXVldWUuIElmIHNvIGFuZCB3ZSBoYXZlIGFu
IHVuLXRyYW5zbWl0dGVkIG9uZQotCQkJICogd2UgZG9uJ3QgaGF2ZSB0byBmdWRnZSB0aGUgVFNO
LgotCQkJICovCi0JCQljaGsgPSB0cDE7Ci0JCQlyZXRfc3ogKz0gdHAxLT5ib29rX3NpemU7Ci0J
CQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgJnN0Y2ItPmFzb2MsIHRwMSwgMSk7Ci0JCQlpZiAo
c2VudCkgewotCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0
Y2IsIDAsIHRwMSwgc29fbG9ja2VkKTsKLQkJCX0gZWxzZSB7Ci0JCQkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7Ci0J
CQl9Ci0JCQlpZiAodHAxLT5kYXRhKSB7Ci0JCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7Ci0J
CQkJdHAxLT5kYXRhID0gTlVMTDsKLQkJCX0KLQkJCS8qIE5vIGZsaWdodCBpbnZvbHZlZCBoZXJl
IGJvb2sgdGhlIHNpemUgdG8gMCAqLwotCQkJdHAxLT5ib29rX3NpemUgPSAwOwotCQkJaWYgKHRw
MS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgewotCQkJCWZvdW5k
ZW9tID0gMTsKLQkJCX0KLQkJCWRvX3dha2V1cF9yb3V0aW5lID0gMTsKLQkJCXRwMS0+c2VudCA9
IFNDVFBfRk9SV0FSRF9UU05fU0tJUDsKLQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5zZW5k
X3F1ZXVlLCB0cDEsIHNjdHBfbmV4dCk7Ci0JCQkvKiBvbiB0byB0aGUgc2VudCBxdWV1ZSBzbyB3
ZSBjYW4gd2FpdCBmb3IgaXQgdG8gYmUgcGFzc2VkIGJ5LiAqLwotCQkJVEFJTFFfSU5TRVJUX1RB
SUwoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgdHAxLAotCQkJCQkgIHNjdHBfbmV4dCk7Ci0JCQlz
dGNiLT5hc29jLnNlbmRfcXVldWVfY250LS07Ci0JCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfY250
Kys7Ci0JCX0KLQl9Ci0JaWYgKGZvdW5kZW9tID09IDApIHsKLQkJLyoKLQkJICogU3RpbGwgbm8g
ZW9tIGZvdW5kLiBUaGF0IG1lYW5zIHRoZXJlCi0JCSAqIGlzIHN0dWZmIGxlZnQgb24gdGhlIHN0
cmVhbSBvdXQgcXVldWUuLiB5dWNrLgotCQkgKi8KLQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2Ip
OwotCQlzdHJxID0gJnN0Y2ItPmFzb2Muc3RybW91dFtzaWRdOwotCQlzcCA9IFRBSUxRX0ZJUlNU
KCZzdHJxLT5vdXRxdWV1ZSk7Ci0JCWlmIChzcCAhPSBOVUxMKSB7Ci0JCQlzcC0+ZGlzY2FyZF9y
ZXN0ID0gMTsKLQkJCS8qCi0JCQkgKiBXZSBtYXkgbmVlZCB0byBwdXQgYSBjaHVuayBvbiB0aGUK
LQkJCSAqIHF1ZXVlIHRoYXQgaG9sZHMgdGhlIFRTTiB0aGF0Ci0JCQkgKiB3b3VsZCBoYXZlIGJl
ZW4gc2VudCB3aXRoIHRoZSBMQVNUCi0JCQkgKiBiaXQuCi0JCQkgKi8KLQkJCWlmIChjaGsgPT0g
TlVMTCkgewotCQkJCS8qIFllcCwgd2UgaGF2ZSB0byAqLwotCQkJCXNjdHBfYWxsb2NfYV9jaHVu
ayhzdGNiLCBjaGspOwotCQkJCWlmIChjaGsgPT0gTlVMTCkgewotCQkJCQkvKiB3ZSBhcmUgaG9z
ZWQuIEFsbCB3ZSBjYW4KLQkJCQkJICogZG8gaXMgbm90aGluZy4uIHdoaWNoIHdpbGwKLQkJCQkJ
ICogY2F1c2UgYW4gYWJvcnQgaWYgdGhlIHBlZXIgaXMKLQkJCQkJICogcGF5aW5nIGF0dGVudGlv
bi4KLQkJCQkJICovCi0JCQkJCWdvdG8gb2hfd2VsbDsKLQkJCQl9Ci0JCQkJbWVtc2V0KGNoaywg
MCwgc2l6ZW9mKCpjaGspKTsKLQkJCQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyA9IDA7Ci0JCQkJ
Y2hrLT5zZW50ID0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQOwotCQkJCWNoay0+YXNvYyA9ICZzdGNi
LT5hc29jOwotCQkJCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJ
CWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgewotCQkJCQkJY2hrLT5yZWMu
ZGF0YS5taWQgPSAwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJY2hrLT5yZWMuZGF0YS5taWQgPSBz
dHJxLT5uZXh0X21pZF9vcmRlcmVkOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHNw
LT5zaW5mb19mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7Ci0JCQkJCQljaGstPnJlYy5kYXRhLm1p
ZCA9IHN0cnEtPm5leHRfbWlkX3Vub3JkZXJlZDsKLQkJCQkJfSBlbHNlIHsKLQkJCQkJCWNoay0+
cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKLQkJCQkJfQotCQkJCX0KLQkJ
CQljaGstPnJlYy5kYXRhLnNpZCA9IHNwLT5zaWQ7Ci0JCQkJY2hrLT5yZWMuZGF0YS5wcGlkID0g
c3AtPnBwaWQ7Ci0JCQkJY2hrLT5yZWMuZGF0YS5jb250ZXh0ID0gc3AtPmNvbnRleHQ7Ci0JCQkJ
Y2hrLT5mbGFncyA9IHNwLT5hY3RfZmxhZ3M7Ci0JCQkJY2hrLT53aG9UbyA9IE5VTEw7Ci0jaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1BhbmRhX18pCi0JCQkJY2hrLT5yZWMu
ZGF0YS50c24gPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZzdGNiLT5hc29jLnNlbmRpbmdfc2VxLCAx
KTsKLSNlbHNlCi0JCQkJY2hrLT5yZWMuZGF0YS50c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2Vx
Kys7Ci0jZW5kaWYKLQkJCQlzdHJxLT5jaHVua3Nfb25fcXVldWVzKys7Ci0JCQkJVEFJTFFfSU5T
RVJUX1RBSUwoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwotCQkJCXN0
Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQrKzsKLQkJCQlzdGNiLT5hc29jLnByX3NjdHBfY250Kys7
Ci0JCQl9Ci0JCQljaGstPnJlYy5kYXRhLnJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfTEFTVF9GUkFH
OwotCQkJaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7Ci0JCQkJY2hrLT5y
ZWMuZGF0YS5yY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1VOT1JERVJFRDsKLQkJCX0KLQkJCWlmIChz
dGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7Ci0JCQkJaWYgKChzcC0+c2luZm9fZmxh
Z3MgJiBTQ1RQX1VOT1JERVJFRCkgPT0gMCkgewotCQkJCQlzdHJxLT5uZXh0X21pZF9vcmRlcmVk
Kys7Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9V
Tk9SREVSRUQpIHsKLQkJCQkJc3RycS0+bmV4dF9taWRfdW5vcmRlcmVkKys7Ci0JCQkJfSBlbHNl
IHsKLQkJCQkJc3RycS0+bmV4dF9taWRfb3JkZXJlZCsrOwotCQkJCX0KLQkJCX0KLQkJb2hfd2Vs
bDoKLQkJCWlmIChzcC0+ZGF0YSkgewotCQkJCS8qIFB1bGwgYW55IGRhdGEgdG8gZnJlZSB1cCB0
aGUgU0IgYW5kCi0JCQkJICogYWxsb3cgc2VuZGVyIHRvICJhZGQgbW9yZSIgd2hpbGUgd2UKLQkJ
CQkgKiB3aWxsIHRocm93IGF3YXkgOi0pCi0JCQkJICovCi0JCQkJc2N0cF9mcmVlX3NwYnVmc3Bh
Y2Uoc3RjYiwgJnN0Y2ItPmFzb2MsIHNwKTsKLQkJCQlyZXRfc3ogKz0gc3AtPmxlbmd0aDsKLQkJ
CQlkb193YWtldXBfcm91dGluZSA9IDE7Ci0JCQkJc3AtPnNvbWVfdGFrZW4gPSAxOwotCQkJCXNj
dHBfbV9mcmVlbShzcC0+ZGF0YSk7Ci0JCQkJc3AtPmRhdGEgPSBOVUxMOwotCQkJCXNwLT50YWls
X21idWYgPSBOVUxMOwotCQkJCXNwLT5sZW5ndGggPSAwOwotCQkJfQotCQl9Ci0JCVNDVFBfVENC
X1NFTkRfVU5MT0NLKHN0Y2IpOwotCX0KLQlpZiAoZG9fd2FrZXVwX3JvdXRpbmUpIHsKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJc3Ry
dWN0IHNvY2tldCAqc287Ci0KLQkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKLQkJ
aWYgKCFzb19sb2NrZWQpIHsKLQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7Ci0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAx
KTsKLQkJCVNDVFBfVENCX0xPQ0soc3RjYik7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNi
LT5hc29jLnJlZmNudCwgMSk7Ci0JCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVf
Q0xPU0VEX1NPQ0tFVCkgewotCQkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVu
bG9ja2VkICovCi0JCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLQkJCQlyZXR1cm4gKHJl
dF9zeik7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlzY3RwX3Nvd3dha2V1cChzdGNiLT5zY3RwX2Vw
LCBzdGNiLT5zY3RwX3NvY2tldCk7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCi0JCWlmICghc29fbG9ja2VkKSB7Ci0JCQlTQ1RQX1NPQ0tF
VF9VTkxPQ0soc28sIDEpOwotCQl9Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIChyZXRfc3opOwotfQot
Ci0vKgotICogY2hlY2tzIHRvIHNlZSBpZiB0aGUgZ2l2ZW4gYWRkcmVzcywgc2EsIGlzIG9uZSB0
aGF0IGlzIGN1cnJlbnRseSBrbm93biBieQotICogdGhlIGtlcm5lbCBub3RlOiBjYW4ndCBkaXN0
aW5ndWlzaCB0aGUgc2FtZSBhZGRyZXNzIG9uIG11bHRpcGxlIGludGVyZmFjZXMKLSAqIGFuZCBk
b2Vzbid0IGhhbmRsZSBtdWx0aXBsZSBhZGRyZXNzZXMgd2l0aCBkaWZmZXJlbnQgem9uZS9zY29w
ZSBpZCdzIG5vdGU6Ci0gKiBpZmFfaWZ3aXRoYWRkcigpIGNvbXBhcmVzIHRoZSBlbnRpcmUgc29j
a2FkZHIgc3RydWN0Ci0gKi8KLXN0cnVjdCBzY3RwX2lmYSAqCi1zY3RwX2ZpbmRfaWZhX2luX2Vw
KHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLQkJICAgIGlu
dCBob2xkc19sb2NrKQotewotCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKLQotCWlmIChob2xk
c19sb2NrID09IDApIHsKLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQl9Ci0KLQlMSVNUX0ZPUkVB
Q0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7Ci0JCWlmIChs
YWRkci0+aWZhID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJaWYgKGFkZHItPnNhX2ZhbWlseSAh
PSBsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkKLQkJCWNvbnRpbnVlOwotI2lmZGVm
IElORVQKLQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlpZiAoKChzdHJ1
Y3Qgc29ja2FkZHJfaW4gKilhZGRyKS0+c2luX2FkZHIuc19hZGRyID09Ci0JCQkgICAgbGFkZHIt
PmlmYS0+YWRkcmVzcy5zaW4uc2luX2FkZHIuc19hZGRyKSB7Ci0JCQkJLyogZm91bmQgaGltLiAq
LwotCQkJCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OwotCQkJCX0KLQkJCQlyZXR1cm4gKGxhZGRyLT5pZmEpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9
Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2
KSB7Ci0JCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilh
ZGRyLAotCQkJCQkJICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjYpKSB7Ci0JCQkJLyogZm91bmQg
aGltLiAqLwotCQkJCWlmIChob2xkc19sb2NrID09IDApIHsKLQkJCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOwotCQkJCX0KLQkJCQlyZXR1cm4gKGxhZGRyLT5pZmEpOwotCQkJCWJyZWFrOwotCQkJ
fQotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCWlmIChhZGRyLT5z
YV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilh
ZGRyKS0+c2Nvbm5fYWRkciA9PSBsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25uLnNjb25uX2FkZHIp
IHsKLQkJCQkvKiBmb3VuZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgewotCQkJ
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCQkJfQotCQkJCXJldHVybiAobGFkZHItPmlmYSk7
Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlpZiAoaG9sZHNfbG9jayA9PSAw
KSB7Ci0JCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKLQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLQot
dWludDMyX3QKLXNjdHBfZ2V0X2lmYV9oYXNoX3ZhbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17
Ci0Jc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9JTkVU
OgotCXsKLQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0KLQkJc2luID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKWFkZHI7Ci0JCXJldHVybiAoc2luLT5zaW5fYWRkci5zX2FkZHIgXiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgPj4gMTYpKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2Ug
QUZfSU5FVDY6Ci0JewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotCQl1aW50MzJfdCBo
YXNoX29mX2FkZHI7Ci0KLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLSNp
ZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJT
RCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSAmJiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotCQloYXNoX29mX2FkZHIgPSAoc2luNi0+c2luNl9hZGRyLnM2X2Fk
ZHIzMlswXSArCi0JCQkJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsxXSArCi0JCQkJc2luNi0+
c2luNl9hZGRyLnM2X2FkZHIzMlsyXSArCi0JCQkJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsz
XSk7Ci0jZWxzZQotCQloYXNoX29mX2FkZHIgPSAoKCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2Fk
ZHIpWzBdICsKLQkJCQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbMV0gKwotCQkJCSgo
dWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVsyXSArCi0JCQkJKCh1aW50MzJfdCAqKSZzaW42
LT5zaW42X2FkZHIpWzNdKTsKLSNlbmRpZgotCQloYXNoX29mX2FkZHIgPSAoaGFzaF9vZl9hZGRy
IF4gKGhhc2hfb2ZfYWRkciA+PiAxNikpOwotCQlyZXR1cm4gKGhhc2hfb2ZfYWRkcik7Ci0JfQot
I2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotCWNhc2UgQUZfQ09OTjoKLQl7Ci0J
CXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKLQkJdWludHB0cl90IHRlbXA7Ci0KLQkJc2Nv
bm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOwotCQl0ZW1wID0gKHVpbnRwdHJfdClz
Y29ubi0+c2Nvbm5fYWRkcjsKLQkJcmV0dXJuICgodWludDMyX3QpKHRlbXAgXiAodGVtcCA+PiAx
NikpKTsKLQl9Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlicmVhazsKLQl9Ci0JcmV0dXJuICgwKTsK
LX0KLQotc3RydWN0IHNjdHBfaWZhICoKLXNjdHBfZmluZF9pZmFfYnlfYWRkcihzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsIHVpbnQzMl90IHZyZl9pZCwgaW50IGhvbGRzX2xvY2spCi17Ci0Jc3RydWN0
IHNjdHBfaWZhICpzY3RwX2lmYXA7Ci0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0Jc3RydWN0IHNj
dHBfaWZhbGlzdCAqaGFzaF9oZWFkOwotCXVpbnQzMl90IGhhc2hfb2ZfYWRkcjsKLQotCWlmICho
b2xkc19sb2NrID09IDApCi0JCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKLQotCXZyZiA9IHNjdHBf
ZmluZF92cmYodnJmX2lkKTsKLQlpZiAodnJmID09IE5VTEwpIHsKLQkJaWYgKGhvbGRzX2xvY2sg
PT0gMCkKLQkJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOwotCQlyZXR1cm4gKE5VTEwpOwotCX0K
LQotCWhhc2hfb2ZfYWRkciA9IHNjdHBfZ2V0X2lmYV9oYXNoX3ZhbChhZGRyKTsKLQotCWhhc2hf
aGVhZCA9ICZ2cmYtPnZyZl9hZGRyX2hhc2hbKGhhc2hfb2ZfYWRkciAmIHZyZi0+dnJmX2FkZHJf
aGFzaG1hcmspXTsKLQlpZiAoaGFzaF9oZWFkID09IE5VTEwpIHsKLQkJU0NUUF9QUklOVEYoImhh
c2hfb2ZfYWRkcjoleCBtYXNrOiV4IHRhYmxlOiV4IC0gIiwKLQkJCSAgICBoYXNoX29mX2FkZHIs
ICh1aW50MzJfdCl2cmYtPnZyZl9hZGRyX2hhc2htYXJrLAotCQkJICAgICh1aW50MzJfdCkoaGFz
aF9vZl9hZGRyICYgdnJmLT52cmZfYWRkcl9oYXNobWFyaykpOwotCQlzY3RwX3ByaW50X2FkZHJl
c3MoYWRkcik7Ci0JCVNDVFBfUFJJTlRGKCJObyBzdWNoIGJ1Y2tldCBmb3IgYWRkcmVzc1xuIik7
Ci0JCWlmIChob2xkc19sb2NrID09IDApCi0JCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlMSVNUX0ZPUkVBQ0goc2N0cF9pZmFwLCBoYXNoX2hlYWQs
IG5leHRfYnVja2V0KSB7Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gc2N0cF9pZmFwLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSkKLQkJCWNvbnRpbnVlOwotI2lmZGVmIElORVQKLQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlpZiAoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilh
ZGRyKS0+c2luX2FkZHIuc19hZGRyID09Ci0JCQkgICAgc2N0cF9pZmFwLT5hZGRyZXNzLnNpbi5z
aW5fYWRkci5zX2FkZHIpIHsKLQkJCQkvKiBmb3VuZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xv
Y2sgPT0gMCkKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuIChzY3Rw
X2lmYXApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQlp
ZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQlpZiAoU0NUUDZfQVJFX0FERFJf
RVFVQUwoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyLAotCQkJCQkJICZzY3RwX2lmYXAtPmFk
ZHJlc3Muc2luNikpIHsKLQkJCQkvKiBmb3VuZCBoaW0uICovCi0JCQkJaWYgKGhvbGRzX2xvY2sg
PT0gMCkKLQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCQkJcmV0dXJuIChzY3RwX2lm
YXApOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCi0JCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgewotCQkJaWYgKCgoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyKS0+c2Nvbm5fYWRkciA9PSBzY3RwX2lmYXAtPmFkZHJl
c3Muc2Nvbm4uc2Nvbm5fYWRkcikgewotCQkJCS8qIGZvdW5kIGhpbS4gKi8KLQkJCQlpZiAoaG9s
ZHNfbG9jayA9PSAwKQotCQkJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQkJCQlyZXR1cm4g
KHNjdHBfaWZhcCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCX0KLQlpZiAoaG9s
ZHNfbG9jayA9PSAwKQotCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQlyZXR1cm4gKE5VTEwp
OwotfQotCi1zdGF0aWMgdm9pZAotc2N0cF91c2VyX3JjdmQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCB1aW50MzJfdCAqZnJlZWRfc29fZmFyLCBpbnQgaG9sZF9ybG9jaywKLQkgICAgICAgdWludDMy
X3QgcnduZF9yZXEpCi17Ci0JLyogVXNlciBwdWxsZWQgc29tZSBkYXRhLCBkbyB3ZSBuZWVkIGEg
cnduZCB1cGRhdGU/ICovCi0JaW50IHJfdW5sb2NrZWQgPSAwOwotCXVpbnQzMl90IGRpZiwgcndu
ZDsKLQlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7Ci0KLQlpZiAoc3RjYiA9PSBOVUxMKQotCQly
ZXR1cm47Ci0KLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCi0JaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgJiAoU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCB8Ci0JCQkJ
U0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCB8Ci0JCQkJU0NUUF9TVEFURV9TSFVURE9XTl9B
Q0tfU0VOVCkpIHsKLQkJLyogUHJlLWNoZWNrIElmIHdlIGFyZSBmcmVlaW5nIG5vIHVwZGF0ZSAq
LwotCQlnb3RvIG5vX2xvY2s7Ci0JfQotCVNDVFBfSU5QX0lOQ1JfUkVGKHN0Y2ItPnNjdHBfZXAp
OwotCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSB8fAotCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSkgewotCQlnb3RvIG91dDsKLQl9Ci0Jc28gPSBzdGNiLT5zY3Rw
X3NvY2tldDsKLQlpZiAoc28gPT0gTlVMTCkgewotCQlnb3RvIG91dDsKLQl9Ci0JYXRvbWljX2Fk
ZF9pbnQoJnN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdCwgKmZyZWVkX3NvX2Zhcik7Ci0J
LyogSGF2ZSB5b3UgaGF2ZSBmcmVlZCBlbm91Z2ggdG8gbG9vayAqLwotCSpmcmVlZF9zb19mYXIg
PSAwOwotCS8qIFllcCwgaXRzIHdvcnRoIGEgbG9vayBhbmQgdGhlIGxvY2sgb3ZlcmhlYWQgKi8K
LQotCS8qIEZpZ3VyZSBvdXQgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAqLwotCXJ3bmQgPSBzY3Rw
X2NhbGNfcnduZChzdGNiLCAmc3RjYi0+YXNvYyk7Ci0JaWYgKHJ3bmQgPj0gc3RjYi0+YXNvYy5t
eV9sYXN0X3JlcG9ydGVkX3J3bmQpIHsKLQkJZGlmID0gcnduZCAtIHN0Y2ItPmFzb2MubXlfbGFz
dF9yZXBvcnRlZF9yd25kOwotCX0gZWxzZSB7Ci0JCWRpZiA9IDA7Ci0JfQotCWlmIChkaWYgPj0g
cnduZF9yZXEpIHsKLQkJaWYgKGhvbGRfcmxvY2spIHsKLQkJCVNDVFBfSU5QX1JFQURfVU5MT0NL
KHN0Y2ItPnNjdHBfZXApOwotCQkJcl91bmxvY2tlZCA9IDE7Ci0JCX0KLQkJaWYgKHN0Y2ItPmFz
b2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7Ci0JCQkvKgotCQkJICog
T25lIGxhc3QgY2hlY2sgYmVmb3JlIHdlIGFsbG93IHRoZSBndXkgcG9zc2libHkKLQkJCSAqIHRv
IGdldCBpbi4gVGhlcmUgaXMgYSByYWNlLCB3aGVyZSB0aGUgZ3V5IGhhcyBub3QKLQkJCSAqIHJl
YWNoZWQgdGhlIGdhdGUuIEluIHRoYXQgY2FzZQotCQkJICovCi0JCQlnb3RvIG91dDsKLQkJfQot
CQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RB
VEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKLQkJCS8qIE5vIHJlcG9ydHMgaGVyZSAqLwotCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJZ290byBvdXQ7Ci0JCX0KLQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfd3Vfc2Fja3Nfc2VudCk7Ci0JCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBfU09fTE9D
S0VEKTsKLQotCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLAotCQkJCSAg
U0NUUF9PVVRQVVRfRlJPTV9VU1JfUkNWRCwgU0NUUF9TT19MT0NLRUQpOwotCQkvKiBtYWtlIHN1
cmUgbm8gdGltZXIgaXMgcnVubmluZyAqLwotCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX1JFQ1YsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCi0JCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ182KTsKLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCX0gZWxzZSB7Ci0JCS8qIFVwZGF0ZSBob3cgbXVjaCB3ZSBoYXZlIHBlbmRpbmcgKi8KLQkJ
c3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0gZGlmOwotCX0KLSBvdXQ6Ci0JaWYgKHNv
ICYmIHJfdW5sb2NrZWQgJiYgaG9sZF9ybG9jaykgewotCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3Rj
Yi0+c2N0cF9lcCk7Ci0JfQotCi0JU0NUUF9JTlBfREVDUl9SRUYoc3RjYi0+c2N0cF9lcCk7Ci0g
bm9fbG9jazoKLQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKLQlyZXR1
cm47Ci19Ci0KLWludAotc2N0cF9zb3JlY3Ztc2coc3RydWN0IHNvY2tldCAqc28sCi0gICAgc3Ry
dWN0IHVpbyAqdWlvLAotICAgIHN0cnVjdCBtYnVmICoqbXAsCi0gICAgc3RydWN0IHNvY2thZGRy
ICpmcm9tLAotICAgIGludCBmcm9tbGVuLAotICAgIGludCAqbXNnX2ZsYWdzLAotICAgIHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvLAotICAgIGludCBmaWxsaW5nX3NpbmZvKQotewotCS8q
Ci0JICogTVNHIGZsYWdzIHdlIHdpbGwgbG9vayBhdCBNU0dfRE9OVFdBSVQgLSBub24tYmxvY2tp
bmcgSU8uCi0JICogTVNHX1BFRUsgLSBMb29rIGRvbid0IHRvdWNoIDotRCAob25seSB2YWxpZCB3
aXRoIE9VVCBtYnVmIGNvcHkKLQkgKiBtcD1OVUxMIHRodXMgdWlvIGlzIHRoZSBjb3B5IG1ldGhv
ZCB0byB1c2VybGFuZCkgTVNHX1dBSVRBTEwgLSA/PwotCSAqIE9uIHRoZSB3YXkgb3V0IHdlIG1h
eSBzZW5kIG91dCBhbnkgY29tYmluYXRpb24gb2Y6Ci0JICogTVNHX05PVElGSUNBVElPTiBNU0df
RU9SCi0JICoKLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTDsKLQlpbnQgbXlf
bGVuID0gMDsKLQlpbnQgY3BfbGVuID0gMCwgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3RwX3F1ZXVl
ZF90b19yZWFkICpjb250cm9sID0gTlVMTCwgKmN0bCA9IE5VTEwsICpueHQgPSBOVUxMOwotCXN0
cnVjdCBtYnVmICptID0gTlVMTDsKLQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOwotCWlu
dCB3YWtldXBfcmVhZF9zb2NrZXQgPSAwOwotCWludCBmcmVlY250X2FwcGxpZWQgPSAwOwotCWlu
dCBvdXRfZmxhZ3MgPSAwLCBpbl9mbGFncyA9IDA7Ci0JaW50IGJsb2NrX2FsbG93ZWQgPSAxOwot
CXVpbnQzMl90IGZyZWVkX3NvX2ZhciA9IDA7Ci0JdWludDMyX3QgY29waWVkX3NvX2ZhciA9IDA7
Ci0JaW50IGluX2Vlb3JfbW9kZSA9IDA7Ci0JaW50IG5vX3Jjdl9uZWVkZWQgPSAwOwotCXVpbnQz
Ml90IHJ3bmRfcmVxID0gMDsKLQlpbnQgaG9sZF9zYmxvY2sgPSAwOwotCWludCBob2xkX3Jsb2Nr
ID0gMDsKLQlzc2l6ZV90IHNsZW4gPSAwOwotCXVpbnQzMl90IGhlbGRfbGVuZ3RoID0gMDsKLSNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKLQlp
bnQgc29ja2J1Zl9sb2NrID0gMDsKLSNlbmRpZgotCi0JaWYgKHVpbyA9PSBOVUxMKSB7Ci0JCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJ
TlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0KLQlpZiAobXNnX2ZsYWdzKSB7Ci0JCWlu
X2ZsYWdzID0gKm1zZ19mbGFnczsKLQkJaWYgKGluX2ZsYWdzICYgTVNHX1BFRUspCi0JCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19yZWFkX3BlZWtzKTsKLQl9IGVsc2UgewotCQlpbl9mbGFncyA9IDA7
Ci0JfQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkK
LQlzbGVuID0gdWlvLT51aW9fcmVzaWQ7Ci0jZWxzZQotCXNsZW4gPSB1aW9fcmVzaWQodWlvKTsK
LSNlbmRpZgotI2Vsc2UKLQlzbGVuID0gdWlvLT51aW9fcmVzaWQ7Ci0jZW5kaWYKLQotCS8qIFB1
bGwgaW4gYW5kIHNldCB1cCBvdXIgaW50IGZsYWdzICovCi0JaWYgKGluX2ZsYWdzICYgTVNHX09P
QikgewotCQkvKiBPdXQgb2YgYmFuZCdzIE5PVCBzdXBwb3J0ZWQgKi8KLQkJcmV0dXJuIChFT1BO
T1RTVVBQKTsKLQl9Ci0JaWYgKChpbl9mbGFncyAmIE1TR19QRUVLKSAmJiAobXAgIT0gTlVMTCkp
IHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQlpZiAoKGluX2ZsYWdzICYg
KE1TR19ET05UV0FJVAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID4gNTAwMDAwCi0JCQkgfCBNU0dfTkJJTwotI2VuZGlmCi0JCSAgICAgKSkgfHwKLQkgICAg
U0NUUF9TT19JU19OQklPKHNvKSkgewotCQlibG9ja19hbGxvd2VkID0gMDsKLQl9Ci0JLyogc2V0
dXAgdGhlIGVuZHBvaW50ICovCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3Bj
YjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVGQVVMVCk7Ci0JCXJldHVybiAoRUZBVUxUKTsK
LQl9Ci0JcnduZF9yZXEgPSAoU0NUUF9TQl9MSU1JVF9SQ1Yoc28pID4+IFNDVFBfUldORF9ISVdB
VF9TSElGVCk7Ci0JLyogTXVzdCBiZSBhdCBsZWFzdCBhIE1UVSdzIHdvcnRoICovCi0JaWYgKHJ3
bmRfcmVxIDwgU0NUUF9NSU5fUldORCkKLQkJcnduZF9yZXEgPSBTQ1RQX01JTl9SV05EOwotCWlu
X2Vlb3JfbW9kZSA9IHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYUExJ
Q0lUX0VPUik7Ci0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfUkVDVl9SV05EX0xPR0dJTkdfRU5BQkxFKSB7Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0j
aWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9F
TlRFUiwKLQkJCSAgICAgICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2Nj
LCB1aW8tPnVpb19yZXNpZCk7Ci0jZWxzZQotCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9F
TlRFUiwKLQkJCSAgICAgICByd25kX3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2Nj
LCB1aW9fcmVzaWQodWlvKSk7Ci0jZW5kaWYKLSNlbHNlCi0JCXNjdHBfbWlzY19pbnRzKFNDVFBf
U09SRUNWX0VOVEVSLAotCQkJICAgICAgIHJ3bmRfcmVxLCBpbl9lZW9yX21vZGUsIHNvLT5zb19y
Y3Yuc2JfY2MsICh1aW50MzJfdCl1aW8tPnVpb19yZXNpZCk7Ci0jZW5kaWYKLQl9Ci0jaWYgKGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCi0JU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKLQlob2xkX3Ni
bG9jayA9IDE7Ci0jZW5kaWYKLQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICZTQ1RQX1JFQ1ZfUldORF9MT0dHSU5HX0VOQUJMRSkgewotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKLQkJc2N0cF9taXNjX2ludHMoU0NUUF9T
T1JFQ1ZfRU5URVJQTCwKLQkJCSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNv
X3Jjdi5zYl9jYywgdWlvLT51aW9fcmVzaWQpOwotI2Vsc2UKLQkJc2N0cF9taXNjX2ludHMoU0NU
UF9TT1JFQ1ZfRU5URVJQTCwKLQkJCSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28t
PnNvX3Jjdi5zYl9jYywgdWlvX3Jlc2lkKHVpbykpOwotI2VuZGlmCi0jZWxzZQotCQlzY3RwX21p
c2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRFUlBMLAotCQkJICAgICAgIHJ3bmRfcmVxLCBibG9ja19h
bGxvd2VkLCBzby0+c29fcmN2LnNiX2NjLCAodWludDMyX3QpdWlvLT51aW9fcmVzaWQpOwotI2Vu
ZGlmCi0JfQotCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JZXJyb3IgPSBzYmxvY2soJnNvLT5z
b19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQllcnJvciA9IHNibG9jaygmc28tPnNvX3JjdiwgKGJsb2NrX2FsbG93ZWQgPyBT
QkxfV0FJVCA6IDApKTsKLSNlbmRpZgotCWlmIChlcnJvcikgewotCQlnb3RvIHJlbGVhc2VfdW5s
b2NrZWQ7Ci0JfQotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDcwMDAwMAotICAgICAgICBzb2NrYnVmX2xvY2sgPSAxOwotI2VuZGlmCi0gcmVzdGFydDoK
LSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAp
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpZiAoaG9sZF9zYmxvY2sgPT0gMCkgewotCQlT
T0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwotCQlob2xkX3NibG9jayA9IDE7Ci0JfQotI2VuZGlm
Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2J1bmxvY2soJnNvLT5zb19yY3YsIDEpOwotI2Vu
ZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcw
MDAwMAotCXNidW5sb2NrKCZzby0+c29fcmN2KTsKLSNlbmRpZgotCi0gcmVzdGFydF9ub3NibG9j
a3M6Ci0JaWYgKGhvbGRfc2Jsb2NrID09IDApIHsKLQkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2
KTsKLQkJaG9sZF9zYmxvY2sgPSAxOwotCX0KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAotCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpKSB7Ci0JCWdvdG8gb3V0OwotCX0KLSNpZiAoZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCi0JaWYgKChzby0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JF
KSAmJiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSkgewotI2Vsc2UKLQlpZiAoKHNvLT5zb19zdGF0
ZSAmIFNTX0NBTlRSQ1ZNT1JFKSAmJiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAwKSkgewotI2VuZGlm
Ci0JCWlmIChzby0+c29fZXJyb3IpIHsKLQkJCWVycm9yID0gc28tPnNvX2Vycm9yOwotCQkJaWYg
KChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKQotCQkJCXNvLT5zb19lcnJvciA9IDA7Ci0JCQln
b3RvIG91dDsKLQkJfSBlbHNlIHsKLQkJCWlmIChzby0+c29fcmN2LnNiX2NjID09IDApIHsKLQkJ
CQkvKiBpbmRpY2F0ZSBFT0YgKi8KLQkJCQllcnJvciA9IDA7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9
Ci0JCX0KLQl9Ci0JaWYgKHNvLT5zb19yY3Yuc2JfY2MgPD0gaGVsZF9sZW5ndGgpIHsKLQkJaWYg
KHNvLT5zb19lcnJvcikgewotCQkJZXJyb3IgPSBzby0+c29fZXJyb3I7Ci0JCQlpZiAoKGluX2Zs
YWdzICYgTVNHX1BFRUspID09IDApIHsKLQkJCQlzby0+c29fZXJyb3IgPSAwOwotCQkJfQotCQkJ
Z290byBvdXQ7Ci0JCX0KLQkJaWYgKChzby0+c29fcmN2LnNiX2NjID09IDApICYmCi0JCSAgICAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8Ci0JCSAgICAgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSkgewotCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpID09IDApIHsKLQkJCQkv
KiBGb3IgYWN0aXZlIG9wZW4gc2lkZSBjbGVhciBmbGFncyBmb3IgcmUtdXNlCi0JCQkJICogcGFz
c2l2ZSBvcGVuIGlzIGJsb2NrZWQgYnkgY29ubmVjdC4KLQkJCQkgKi8KLQkJCQlpZiAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FTX0FCT1JURUQpIHsKLQkJCQkJLyogWW91IHdl
cmUgYWJvcnRlZCwgcGFzc2l2ZSBzaWRlIGFsd2F5cyBoaXRzIGhlcmUgKi8KLQkJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUNPTk5S
RVNFVCk7Ci0JCQkJCWVycm9yID0gRUNPTk5SRVNFVDsKLQkJCQl9Ci0JCQkJc28tPnNvX3N0YXRl
ICY9IH4oU1NfSVNDT05ORUNUSU5HIHwKLQkJCQkJCSAgU1NfSVNESVNDT05ORUNUSU5HIHwKLQkJ
CQkJCSAgU1NfSVNDT05GSVJNSU5HIHwKLQkJCQkJCSAgU1NfSVNDT05ORUNURUQpOwotCQkJCWlm
IChlcnJvciA9PSAwKSB7Ci0JCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfV0FTX0NPTk5FQ1RFRCkgPT0gMCkgewotCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PVENPTk4pOwotCQkJCQkJZXJyb3Ig
PSBFTk9UQ09OTjsKLQkJCQkJfQotCQkJCX0KLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJfQotCQlp
ZiAoYmxvY2tfYWxsb3dlZCkgewotCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19yY3YpOwotCQkJ
aWYgKGVycm9yKSB7Ci0JCQkJZ290byBvdXQ7Ci0JCQl9Ci0JCQloZWxkX2xlbmd0aCA9IDA7Ci0J
CQlnb3RvIHJlc3RhcnRfbm9zYmxvY2tzOwotCQl9IGVsc2UgewotCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRVdPVUxEQkxPQ0spOwot
CQkJZXJyb3IgPSBFV09VTERCTE9DSzsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQotCWlmIChob2xk
X3NibG9jayA9PSAxKSB7Ci0JCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9z
YmxvY2sgPSAwOwotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQllcnJvciA9IHNibG9jaygm
c28tPnNvX3JjdiwgU0JMT0NLV0FJVChpbl9mbGFncykpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAKLQllcnJvciA9IHNibG9j
aygmc28tPnNvX3JjdiwgKGJsb2NrX2FsbG93ZWQgPyBNX1dBSVRPSyA6IDApKTsKLSNlbmRpZgot
CS8qIHdlIHBvc3NpYmx5IGhhdmUgZGF0YSB3ZSBjYW4gcmVhZCAqLwotCS8qc2FfaWdub3JlIEZS
RUVEX01FTU9SWSovCi0JY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZpbnAtPnJlYWRfcXVldWUpOwot
CWlmIChjb250cm9sID09IE5VTEwpIHsKLQkJLyogVGhpcyBjb3VsZCBiZSBoYXBwZW5pbmcgc2lu
Y2UKLQkJICogdGhlIGFwcGVuZGVyIGRpZCB0aGUgaW5jcmVtZW50IGJ1dCBhcyBub3QKLQkJICog
eWV0IGRpZCB0aGUgdGFpbHEgaW5zZXJ0IG9udG8gdGhlIHJlYWRfcXVldWUKLQkJICovCi0JCWlm
IChob2xkX3Jsb2NrID09IDApIHsKLQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOwotCQl9Ci0J
CWNvbnRyb2wgPSBUQUlMUV9GSVJTVCgmaW5wLT5yZWFkX3F1ZXVlKTsKLQkJaWYgKChjb250cm9s
ID09IE5VTEwpICYmIChzby0+c29fcmN2LnNiX2NjICE9IDApKSB7Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCQkJcGFuaWMoIkh1aCwgaXRzIG5vbiB6ZXJvIGFuZCBub3RoaW5nIG9uIGNvbnRyb2w/Iik7
Ci0jZW5kaWYKLQkJCXNvLT5zb19yY3Yuc2JfY2MgPSAwOwotCQl9Ci0JCVNDVFBfSU5QX1JFQURf
VU5MT0NLKGlucCk7Ci0JCWhvbGRfcmxvY2sgPSAwOwotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCi0J
aWYgKChjb250cm9sLT5sZW5ndGggPT0gMCkgJiYKLQkgICAgKGNvbnRyb2wtPmRvX25vdF9yZWZf
c3RjYikpIHsKLQkJLyogQ2xlYW4gdXAgY29kZSBmb3IgZnJlZWluZyBhc3NvYyB0aGF0IGxlZnQg
YmVoaW5kIGEgcGRhcGkuLgotCQkgKiBtYXliZSBhIHBlZXIgaW4gRUVPUiB0aGF0IGp1c3QgY2xv
c2VkIGFmdGVyIHNlbmRpbmcgYW5kCi0JCSAqIG5ldmVyIGluZGljYXRlZCBhIEVPUi4KLQkJICov
Ci0JCWlmIChob2xkX3Jsb2NrID09IDApIHsKLQkJCWhvbGRfcmxvY2sgPSAxOwotCQkJU0NUUF9J
TlBfUkVBRF9MT0NLKGlucCk7Ci0JCX0KLQkJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOwotCQlp
ZiAoY29udHJvbC0+ZGF0YSkgewotCQkJLyogSG1tIHRoZXJlIGlzIGRhdGEgaGVyZSAuLiBmaXgg
Ki8KLQkJCXN0cnVjdCBtYnVmICptX3RtcDsKLQkJCWludCBjbnQgPSAwOwotCQkJbV90bXAgPSBj
b250cm9sLT5kYXRhOwotCQkJd2hpbGUgKG1fdG1wKSB7Ci0JCQkJY250ICs9IFNDVFBfQlVGX0xF
TihtX3RtcCk7Ci0JCQkJaWYgKFNDVFBfQlVGX05FWFQobV90bXApID09IE5VTEwpIHsKLQkJCQkJ
Y29udHJvbC0+dGFpbF9tYnVmID0gbV90bXA7Ci0JCQkJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7
Ci0JCQkJfQotCQkJCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7Ci0JCQl9Ci0JCQljb250
cm9sLT5sZW5ndGggPSBjbnQ7Ci0JCX0gZWxzZSB7Ci0JCQkvKiByZW1vdmUgaXQgKi8KLQkJCVRB
SUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKLQkJCS8qIEFkZCBi
YWNrIGFueSBoaWRkZW5kIGRhdGEgKi8KLQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9s
LT53aG9Gcm9tKTsKLQkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOwotCQl9Ci0J
CWlmIChob2xkX3Jsb2NrKSB7Ci0JCQlob2xkX3Jsb2NrID0gMDsKLQkJCVNDVFBfSU5QX1JFQURf
VU5MT0NLKGlucCk7Ci0JCX0KLQkJZ290byByZXN0YXJ0OwotCX0KLQlpZiAoKGNvbnRyb2wtPmxl
bmd0aCA9PSAwKSAmJgotCSAgICAoY29udHJvbC0+ZW5kX2FkZGVkID09IDEpKSB7Ci0JCS8qIERv
IHdlIGFsc28gbmVlZCB0byBjaGVjayBmb3IgKGNvbnRyb2wtPnBkYXBpX2Fib3J0ZWQgPT0gMSk/
ICovCi0JCWlmIChob2xkX3Jsb2NrID09IDApIHsKLQkJCWhvbGRfcmxvY2sgPSAxOwotCQkJU0NU
UF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0JCX0KLQkJVEFJTFFfUkVNT1ZFKCZpbnAtPnJlYWRfcXVl
dWUsIGNvbnRyb2wsIG5leHQpOwotCQlpZiAoY29udHJvbC0+ZGF0YSkgewotI2lmZGVmIElOVkFS
SUFOVFMKLQkJCXBhbmljKCJjb250cm9sLT5kYXRhIG5vdCBudWxsIGJ1dCBjb250cm9sLT5sZW5n
dGggPT0gMCIpOwotI2Vsc2UKLQkJCVNDVFBfUFJJTlRGKCJTdHJhbmdlLCBkYXRhIGxlZnQgaW4g
dGhlIGNvbnRyb2wgYnVmZmVyLiBDbGVhbmluZyB1cC5cbiIpOwotCQkJc2N0cF9tX2ZyZWVtKGNv
bnRyb2wtPmRhdGEpOwotCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYKLQkJfQotCQlp
ZiAoY29udHJvbC0+YXV4X2RhdGEpIHsKLQkJCXNjdHBfbV9mcmVlIChjb250cm9sLT5hdXhfZGF0
YSk7Ci0JCQljb250cm9sLT5hdXhfZGF0YSA9IE5VTEw7Ci0JCX0KLSNpZmRlZiBJTlZBUklBTlRT
Ci0JCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKLQkJCXBhbmljKCJBYm91dCB0byBmcmVlIGN0
bDolcCBzbzolcCBhbmQgaXRzIGluICVkIiwKLQkJCSAgICAgIGNvbnRyb2wsIHNvLCBjb250cm9s
LT5vbl9zdHJtX3EpOwotCQl9Ci0jZW5kaWYKLQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRy
b2wtPndob0Zyb20pOwotCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKLQkJaWYg
KGhvbGRfcmxvY2spIHsKLQkJCWhvbGRfcmxvY2sgPSAwOwotCQkJU0NUUF9JTlBfUkVBRF9VTkxP
Q0soaW5wKTsKLQkJfQotCQlnb3RvIHJlc3RhcnQ7Ci0JfQotCWlmIChjb250cm9sLT5sZW5ndGgg
PT0gMCkgewotCQlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZS
QUdfSU5URVJMRUFWRSkpICYmCi0JCSAgICAoZmlsbGluZ19zaW5mbykpIHsKLQkJCS8qIGZpbmQg
YSBtb3JlIHN1aXRhYmxlIG9uZSB0aGVuIHRoaXMgKi8KLQkJCWN0bCA9IFRBSUxRX05FWFQoY29u
dHJvbCwgbmV4dCk7Ci0JCQl3aGlsZSAoY3RsKSB7Ci0JCQkJaWYgKChjdGwtPnN0Y2IgIT0gY29u
dHJvbC0+c3RjYikgJiYgKGN0bC0+bGVuZ3RoKSAmJgotCQkJCSAgICAoY3RsLT5zb21lX3Rha2Vu
IHx8Ci0JCQkJICAgICAoY3RsLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHx8Ci0JCQkJ
ICAgICAoKGN0bC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCi0JCQkJICAgICAgKGN0bC0+c3Rj
Yi0+YXNvYy5zdHJtaW5bY3RsLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPT0gMCkp
KQotCQkJCQkpIHsKLQkJCQkJLyotCi0JCQkJCSAqIElmIHdlIGhhdmUgYSBkaWZmZXJlbnQgVENC
IG5leHQsIGFuZCB0aGVyZSBpcyBkYXRhCi0JCQkJCSAqIHByZXNlbnQuIElmIHdlIGhhdmUgYWxy
ZWFkeSB0YWtlbiBzb21lIChwZGFwaSksIE9SIHdlIGNhbgotCQkJCQkgKiByZWYgdGhlIHRjYiBh
bmQgbm8gZGVsaXZlcnkgYXMgc3RhcnRlZCBvbiB0aGlzIHN0cmVhbSwgd2UKLQkJCQkJICogdGFr
ZSBpdC4gTm90ZSB3ZSBhbGxvdyBhIG5vdGlmaWNhdGlvbiBvbiBhIGRpZmZlcmVudAotCQkJCQkg
KiBhc3NvYyB0byBiZSBkZWxpdmVyZWQuLgotCQkJCQkgKi8KLQkJCQkJY29udHJvbCA9IGN0bDsK
LQkJCQkJZ290byBmb3VuZF9vbmU7Ci0JCQkJfSBlbHNlIGlmICgoc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykpICYmCi0JCQkJCSAgIChjdGwt
Pmxlbmd0aCkgJiYKLQkJCQkJICAgKChjdGwtPnNvbWVfdGFrZW4pIHx8Ci0JCQkJCSAgICAoKGN0
bC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCi0JCQkJCSAgICAgKChjdGwtPnNwZWNfZmxhZ3Mg
JiBNX05PVElGSUNBVElPTikgPT0gMCkgJiYKLQkJCQkJICAgICAoY3RsLT5zdGNiLT5hc29jLnN0
cm1pbltjdGwtPnNpbmZvX3N0cmVhbV0uZGVsaXZlcnlfc3RhcnRlZCA9PSAwKSkpKSB7Ci0JCQkJ
CS8qLQotCQkJCQkgKiBJZiB3ZSBoYXZlIHRoZSBzYW1lIHRjYiwgYW5kIHRoZXJlIGlzIGRhdGEg
cHJlc2VudCwgYW5kIHdlCi0JCQkJCSAqIGhhdmUgdGhlIHN0cm0gaW50ZXJsZWF2ZSBmZWF0dXJl
IHByZXNlbnQuIFRoZW4gaWYgd2UgaGF2ZQotCQkJCQkgKiB0YWtlbiBzb21lIChwZGFwaSkgb3Ig
d2UgY2FuIHJlZmVyIHRvIHRodCB0Y2IgQU5EIHdlIGhhdmUKLQkJCQkJICogbm90IHN0YXJ0ZWQg
YSBkZWxpdmVyeSBmb3IgdGhpcyBzdHJlYW0sIHdlIGNhbiB0YWtlIGl0LgotCQkJCQkgKiBOb3Rl
IHdlIGRvIE5PVCBhbGxvdyBhIG5vdGlmaWNhaXRvbiBvbiB0aGUgc2FtZSBhc3NvYyB0bwotCQkJ
CQkgKiBiZSBkZWxpdmVyZWQuCi0JCQkJCSAqLwotCQkJCQljb250cm9sID0gY3RsOwotCQkJCQln
b3RvIGZvdW5kX29uZTsKLQkJCQl9Ci0JCQkJY3RsID0gVEFJTFFfTkVYVChjdGwsIG5leHQpOwot
CQkJfQotCQl9Ci0JCS8qCi0JCSAqIGlmIHdlIHJlYWNoIGhlcmUsIG5vdCBzdWl0YWJsZSByZXBs
YWNlbWVudCBpcyBhdmFpbGFibGUKLQkJICogPG9yPiBmcmFnbWVudCBpbnRlcmxlYXZlIGlzIE5P
VCBvbi4gU28gc3R1ZmYgdGhlIHNiX2NjCi0JCSAqIGludG8gdGhlIG91ciBoZWxkIGNvdW50LCBh
bmQgaXRzIHRpbWUgdG8gc2xlZXAgYWdhaW4uCi0JCSAqLwotCQloZWxkX2xlbmd0aCA9IHNvLT5z
b19yY3Yuc2JfY2M7Ci0JCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gc28tPnNvX3Jjdi5zYl9jYzsK
LQkJZ290byByZXN0YXJ0OwotCX0KLQkvKiBDbGVhciB0aGUgaGVsZCBsZW5ndGggc2luY2UgdGhl
cmUgaXMgc29tZXRoaW5nIHRvIHJlYWQgKi8KLQljb250cm9sLT5oZWxkX2xlbmd0aCA9IDA7Ci0g
Zm91bmRfb25lOgotCS8qCi0JICogSWYgd2UgcmVhY2ggaGVyZSwgY29udHJvbCBoYXMgYSBzb21l
IGRhdGEgZm9yIHVzIHRvIHJlYWQgb2ZmLgotCSAqIE5vdGUgdGhhdCBzdGNiIENPVUxEIGJlIE5V
TEwuCi0JICovCi0JaWYgKGhvbGRfcmxvY2sgPT0gMCkgewotCQlob2xkX3Jsb2NrID0gMTsKLQkJ
U0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0JfQotCWNvbnRyb2wtPnNvbWVfdGFrZW4rKzsKLQlz
dGNiID0gY29udHJvbC0+c3RjYjsKLQlpZiAoc3RjYikgewotCQlpZiAoKGNvbnRyb2wtPmRvX25v
dF9yZWZfc3RjYiA9PSAwKSAmJgotCQkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0FCT1VUX1RPX0JFX0ZSRUVEKSkgewotCQkJaWYgKGZyZWVjbnRfYXBwbGllZCA9PSAwKQotCQkJ
CXN0Y2IgPSBOVUxMOwotCQl9IGVsc2UgaWYgKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAw
KSB7Ci0JCQkvKiB5b3UgY2FuJ3QgZnJlZSBpdCBvbiBtZSBwbGVhc2UgKi8KLQkJCS8qCi0JCQkg
KiBUaGUgbG9jayBvbiB0aGUgc29ja2V0IGJ1ZmZlciBwcm90ZWN0cyB1cyBzbyB0aGUKLQkJCSAq
IGZyZWUgY29kZSB3aWxsIHN0b3AuIEJ1dCBzaW5jZSB3ZSB1c2VkIHRoZSBzb2NrZXRidWYKLQkJ
CSAqIGxvY2sgYW5kIHRoZSBzZW5kZXIgdXNlcyB0aGUgdGNiX2xvY2sgdG8gaW5jcmVtZW50LAot
CQkJICogd2UgbmVlZCB0byB1c2UgdGhlIGF0b21pYyBhZGQgdG8gdGhlIHJlZmNudAotCQkJICov
Ci0JCQlpZiAoZnJlZWNudF9hcHBsaWVkKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCXBhbmlj
KCJyZWZjbnQgYWxyZWFkeSBpbmNyZW1lbnRlZCIpOwotI2Vsc2UKLQkJCQlTQ1RQX1BSSU5URigi
cmVmY250IGFscmVhZHkgaW5jcmVtZW50ZWQ/XG4iKTsKLSNlbmRpZgotCQkJfSBlbHNlIHsKLQkJ
CQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOwotCQkJCWZyZWVjbnRfYXBw
bGllZCA9IDE7Ci0JCQl9Ci0JCQkvKgotCQkJICogU2V0dXAgdG8gcmVtZW1iZXIgaG93IG11Y2gg
d2UgaGF2ZSBub3QgeWV0IHRvbGQKLQkJCSAqIHRoZSBwZWVyIG91ciByd25kIGhhcyBvcGVuZWQg
dXAuIE5vdGUgd2UgZ3JhYgotCQkJICogdGhlIHZhbHVlIGZyb20gdGhlIHRjYiBmcm9tIGxhc3Qg
dGltZS4KLQkJCSAqIE5vdGUgdG9vIHRoYXQgc2FjayBzZW5kaW5nIGNsZWFycyB0aGlzIHdoZW4g
YSBzYWNrCi0JCQkgKiBpcyBzZW50LCB3aGljaCBpcyBmaW5lLiBPbmNlIHdlIGhpdCB0aGUgcndu
ZF9yZXEsCi0JCQkgKiB3ZSB0aGVuIHdpbGwgZ28gdG8gdGhlIHNjdHBfdXNlcl9yY3ZkKCkgdGhh
dCB3aWxsCi0JCQkgKiBub3QgbG9jayB1bnRpbCBpdCBLTk9XcyBpdCBNVVNUIHNlbmQgYSBXVVAt
U0FDSy4KLQkJCSAqLwotCQkJZnJlZWRfc29fZmFyID0gc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2lu
Y2VsYXN0OwotCQkJc3RjYi0+ZnJlZWRfYnlfc29yY3Zfc2luY2VsYXN0ID0gMDsKLQkJfQotCX0K
LQlpZiAoc3RjYiAmJgotCSAgICAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElP
TikgPT0gMCkgJiYKLQkgICAgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApIHsKLQkJc3Rj
Yi0+YXNvYy5zdHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0g
MTsKLQl9Ci0KLQkvKiBGaXJzdCBsZXRzIGdldCBvZmYgdGhlIHNpbmZvIGFuZCBzb2NrYWRkciBp
bmZvICovCi0JaWYgKChzaW5mbyAhPSBOVUxMKSAmJiAoZmlsbGluZ19zaW5mbyAhPSAwKSkgewot
CQlzaW5mby0+c2luZm9fc3RyZWFtID0gY29udHJvbC0+c2luZm9fc3RyZWFtOwotCQlzaW5mby0+
c2luZm9fc3NuID0gKHVpbnQxNl90KWNvbnRyb2wtPm1pZDsKLQkJc2luZm8tPnNpbmZvX2ZsYWdz
ID0gY29udHJvbC0+c2luZm9fZmxhZ3M7Ci0JCXNpbmZvLT5zaW5mb19wcGlkID0gY29udHJvbC0+
c2luZm9fcHBpZDsKLQkJc2luZm8tPnNpbmZvX2NvbnRleHQgPWNvbnRyb2wtPnNpbmZvX2NvbnRl
eHQ7Ci0JCXNpbmZvLT5zaW5mb190aW1ldG9saXZlID0gY29udHJvbC0+c2luZm9fdGltZXRvbGl2
ZTsKLQkJc2luZm8tPnNpbmZvX3RzbiA9IGNvbnRyb2wtPnNpbmZvX3RzbjsKLQkJc2luZm8tPnNp
bmZvX2N1bXRzbiA9IGNvbnRyb2wtPnNpbmZvX2N1bXRzbjsKLQkJc2luZm8tPnNpbmZvX2Fzc29j
X2lkID0gY29udHJvbC0+c2luZm9fYXNzb2NfaWQ7Ci0JCW54dCA9IFRBSUxRX05FWFQoY29udHJv
bCwgbmV4dCk7Ci0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19F
WFRfUkNWSU5GTykgfHwKLQkJICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZOWFRJTkZPKSkgewotCQkJc3RydWN0IHNjdHBfZXh0cmN2aW5mbyAqc19leHRyYTsK
LQkJCXNfZXh0cmEgPSAoc3RydWN0IHNjdHBfZXh0cmN2aW5mbyAqKXNpbmZvOwotCQkJaWYgKChu
eHQpICYmCi0JCQkgICAgKG54dC0+bGVuZ3RoKSkgewotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4
dF9mbGFncyA9IFNDVFBfTkVYVF9NU0dfQVZBSUw7Ci0JCQkJaWYgKG54dC0+c2luZm9fZmxhZ3Mg
JiBTQ1RQX1VOT1JERVJFRCkgewotCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgfD0g
U0NUUF9ORVhUX01TR19JU19VTk9SREVSRUQ7Ci0JCQkJfQotCQkJCWlmIChueHQtPnNwZWNfZmxh
Z3MgJiBNX05PVElGSUNBVElPTikgewotCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3Mg
fD0gU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT047Ci0JCQkJfQotCQkJCXNfZXh0cmEtPnNl
cmluZm9fbmV4dF9haWQgPSBueHQtPnNpbmZvX2Fzc29jX2lkOwotCQkJCXNfZXh0cmEtPnNlcmlu
Zm9fbmV4dF9sZW5ndGggPSBueHQtPmxlbmd0aDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRf
cHBpZCA9IG54dC0+c2luZm9fcHBpZDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfc3RyZWFt
ID0gbnh0LT5zaW5mb19zdHJlYW07Ci0JCQkJaWYgKG54dC0+dGFpbF9tYnVmICE9IE5VTEwpIHsK
LQkJCQkJaWYgKG54dC0+ZW5kX2FkZGVkKSB7Ci0JCQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRf
ZmxhZ3MgfD0gU0NUUF9ORVhUX01TR19JU0NPTVBMRVRFOwotCQkJCQl9Ci0JCQkJfQotCQkJfSBl
bHNlIHsKLQkJCQkvKiB3ZSBleHBsaWNpdGx5IDAgdGhpcywgc2luY2UgdGhlIG1lbWNweSBnb3QK
LQkJCQkgKiBzb21lIG90aGVyIHRoaW5ncyBiZXlvbmQgdGhlIG9sZGVyIHNpbmZvXwotCQkJCSAq
IHRoYXQgaXMgb24gdGhlIGNvbnRyb2wncyBzdHJ1Y3R1cmUgOi1ECi0JCQkJICovCi0JCQkJbnh0
ID0gTlVMTDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgPSBTQ1RQX05PX05FWFRf
TVNHOwotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9haWQgPSAwOwotCQkJCXNfZXh0cmEtPnNl
cmluZm9fbmV4dF9sZW5ndGggPSAwOwotCQkJCXNfZXh0cmEtPnNlcmluZm9fbmV4dF9wcGlkID0g
MDsKLQkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfc3RyZWFtID0gMDsKLQkJCX0KLQkJfQotCQkv
KgotCQkgKiB1cGRhdGUgb2ZmIHRoZSByZWFsIGN1cnJlbnQgY3VtLWFjaywgaWYgd2UgaGF2ZSBh
biBzdGNiLgotCQkgKi8KLQkJaWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYg
c3RjYikKLQkJCXNpbmZvLT5zaW5mb19jdW10c24gPSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNu
OwotCQkvKgotCQkgKiBtYXNrIG9mZiB0aGUgaGlnaCBiaXRzLCB3ZSBrZWVwIHRoZSBhY3R1YWwg
Y2h1bmsgYml0cyBpbgotCQkgKiB0aGVyZS4KLQkJICovCi0JCXNpbmZvLT5zaW5mb19mbGFncyAm
PSAweDAwZmY7Ci0JCWlmICgoY29udHJvbC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFf
VU5PUkRFUkVEKSB7Ci0JCQlzaW5mby0+c2luZm9fZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7Ci0J
CX0KLQl9Ci0jaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKLQl7Ci0JCWludCBpbmRleCwgbmV3
aW5kZXg7Ci0JCXN0cnVjdCBzY3RwX3BjYnRzbl9ybG9nICplbnRyeTsKLQkJZG8gewotCQkJaW5k
ZXggPSBpbnAtPnJlYWRsb2dfaW5kZXg7Ci0JCQluZXdpbmRleCA9IGluZGV4ICsgMTsKLQkJCWlm
IChuZXdpbmRleCA+PSBTQ1RQX1JFQURfTE9HX1NJWkUpIHsKLQkJCQluZXdpbmRleCA9IDA7Ci0J
CQl9Ci0JCX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnJlYWRsb2dfaW5kZXgsIGlu
ZGV4LCBuZXdpbmRleCkgPT0gMCk7Ci0JCWVudHJ5ID0gJmlucC0+cmVhZGxvZ1tpbmRleF07Ci0J
CWVudHJ5LT52dGFnID0gY29udHJvbC0+c2luZm9fYXNzb2NfaWQ7Ci0JCWVudHJ5LT5zdHJtID0g
Y29udHJvbC0+c2luZm9fc3RyZWFtOwotCQllbnRyeS0+c2VxID0gKHVpbnQxNl90KWNvbnRyb2wt
Pm1pZDsKLQkJZW50cnktPnN6ID0gY29udHJvbC0+bGVuZ3RoOwotCQllbnRyeS0+ZmxncyA9IGNv
bnRyb2wtPnNpbmZvX2ZsYWdzOwotCX0KLSNlbmRpZgotCWlmICgoZnJvbWxlbiA+IDApICYmIChm
cm9tICE9IE5VTEwpKSB7Ci0JCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOwotCQlzaXplX3Qg
bGVuOwotCi0JCXN3aXRjaCAoY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zYS5zYV9mYW1p
bHkpIHsKLSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlsZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQkJc3RvcmUuc2luNiA9IGNvbnRyb2wtPndob0Zyb20t
PnJvLl9sX2FkZHIuc2luNjsKLQkJCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IGNvbnRyb2wtPnBv
cnRfZnJvbTsKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQKLQkJCWNhc2UgQUZfSU5F
VDoKLSNpZmRlZiBJTkVUNgotCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7Ci0JCQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKLQkJCQkJaW42X3Npbl8yX3Y0bWFwc2luNigmY29udHJvbC0+d2hvRnJvbS0+
cm8uX2xfYWRkci5zaW4sCi0JCQkJCQkJICAgICZzdG9yZS5zaW42KTsKLQkJCQkJc3RvcmUuc2lu
Ni5zaW42X3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQkJCXN0b3JlLnNpbiA9IGNvbnRyb2wt
Pndob0Zyb20tPnJvLl9sX2FkZHIuc2luOwotCQkJCQlzdG9yZS5zaW4uc2luX3BvcnQgPSBjb250
cm9sLT5wb3J0X2Zyb207Ci0JCQkJfQotI2Vsc2UKLQkJCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKLQkJCQlzdG9yZS5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRy
LnNpbjsKLQkJCQlzdG9yZS5zaW4uc2luX3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207Ci0jZW5k
aWYKLQkJCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCWNh
c2UgQUZfQ09OTjoKLQkJCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotCQkJ
CXN0b3JlLnNjb25uID0gY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zY29ubjsKLQkJCQlz
dG9yZS5zY29ubi5zY29ubl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOwotCQkJCWJyZWFrOwot
I2VuZGlmCi0JCQlkZWZhdWx0OgotCQkJCWxlbiA9IDA7Ci0JCQkJYnJlYWs7Ci0JCX0KLQkJbWVt
Y3B5KGZyb20sICZzdG9yZSwgbWluKChzaXplX3QpZnJvbWxlbiwgbGVuKSk7Ci0jaWYgZGVmaW5l
ZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQotI2lmZGVmIElORVQ2Ci0JCXsKLQkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgbHNhNiwgKmZyb202OwotCi0JCQlmcm9tNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopZnJvbTsKLQkJCXNjdHBfcmVjb3Zlcl9zY29wZV9tYWMoZnJvbTYsICgmbHNhNikpOwot
CQl9Ci0jZW5kaWYKLSNlbmRpZgotCX0KLQlpZiAoaG9sZF9ybG9jaykgewotCQlTQ1RQX0lOUF9S
RUFEX1VOTE9DSyhpbnApOwotCQlob2xkX3Jsb2NrID0gMDsKLQl9Ci0JaWYgKGhvbGRfc2Jsb2Nr
KSB7Ci0JCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxvY2sgPSAwOwot
CX0KLQkvKiBub3cgY29weSBvdXQgd2hhdCBkYXRhIHdlIGNhbiAqLwotCWlmIChtcCA9PSBOVUxM
KSB7Ci0JCS8qIGNvcHkgb3V0IGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gdXAgdG8gbGVuZ3RoICov
Ci0JZ2V0X21vcmVfZGF0YToKLQkJbSA9IGNvbnRyb2wtPmRhdGE7Ci0JCXdoaWxlIChtKSB7Ci0J
CQkvKiBNb3ZlIG91dCBhbGwgd2UgY2FuICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYg
ZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQkJY3BfbGVuID0gKGludCl1aW8tPnVpb19yZXNpZDsK
LSNlbHNlCi0JCQljcF9sZW4gPSAoaW50KXVpb19yZXNpZCh1aW8pOwotI2VuZGlmCi0jZWxzZQot
CQkJY3BfbGVuID0gKGludCl1aW8tPnVpb19yZXNpZDsKLSNlbmRpZgotCQkJbXlfbGVuID0gKGlu
dClTQ1RQX0JVRl9MRU4obSk7Ci0JCQlpZiAoY3BfbGVuID4gbXlfbGVuKSB7Ci0JCQkJLyogbm90
IGVub3VnaCBpbiB0aGlzIGJ1ZiAqLwotCQkJCWNwX2xlbiA9IG15X2xlbjsKLQkJCX0KLQkJCWlm
IChob2xkX3Jsb2NrKSB7Ci0JCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKLQkJCQlob2xk
X3Jsb2NrID0gMDsKLQkJCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMCk7Ci0jZW5kaWYKLQkJCWlmIChjcF9sZW4gPiAwKQotCQkJCWVycm9yID0g
dWlvbW92ZShtdG9kKG0sIGNoYXIgKiksIGNwX2xlbiwgdWlvKTsKLSNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKLQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDApOwotI2VuZGlmCi0JCQkvKiByZS1yZWFk
ICovCi0JCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUp
IHsKLQkJCQlnb3RvIHJlbGVhc2U7Ci0JCQl9Ci0KLQkJCWlmICgoY29udHJvbC0+ZG9fbm90X3Jl
Zl9zdGNiID09IDApICYmIHN0Y2IgJiYKLQkJCSAgICBzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9T
VEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewotCQkJCW5vX3Jjdl9uZWVkZWQgPSAxOwotCQkJfQot
CQkJaWYgKGVycm9yKSB7Ci0JCQkJLyogZXJyb3Igd2UgYXJlIG91dCBvZiBoZXJlICovCi0JCQkJ
Z290byByZWxlYXNlOwotCQkJfQotCQkJU0NUUF9JTlBfUkVBRF9MT0NLKGlucCk7Ci0JCQlob2xk
X3Jsb2NrID0gMTsKLQkJCWlmIChjcF9sZW4gPT0gU0NUUF9CVUZfTEVOKG0pKSB7Ci0JCQkJaWYg
KChTQ1RQX0JVRl9ORVhUKG0pPT0gTlVMTCkgJiYKLQkJCQkgICAgKGNvbnRyb2wtPmVuZF9hZGRl
ZCkpIHsKLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19FT1I7Ci0JCQkJCWlmICgoY29udHJvbC0+ZG9f
bm90X3JlZl9zdGNiID09IDApICAmJgotCQkJCQkgICAgKGNvbnRyb2wtPnN0Y2IgIT0gTlVMTCkg
JiYKLQkJCQkJICAgICgoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSA9PSAw
KSkKLQkJCQkJCWNvbnRyb2wtPnN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVh
bV0uZGVsaXZlcnlfc3RhcnRlZCA9IDA7Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5zcGVjX2Zs
YWdzICYgTV9OT1RJRklDQVRJT04pIHsKLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19OT1RJRklDQVRJ
T047Ci0JCQkJfQotCQkJCS8qIHdlIGF0ZSB1cCB0aGUgbWJ1ZiAqLwotCQkJCWlmIChpbl9mbGFn
cyAmIE1TR19QRUVLKSB7Ci0JCQkJCS8qIGp1c3QgbG9va2luZyAqLwotCQkJCQltID0gU0NUUF9C
VUZfTkVYVChtKTsKLQkJCQkJY29waWVkX3NvX2ZhciArPSBjcF9sZW47Ci0JCQkJfSBlbHNlIHsK
LQkJCQkJLyogZGlzcG9zZSBvZiB0aGUgbWJ1ZiAqLwotCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJCQkJ
c2N0cF9zYmxvZygmc28tPnNvX3JjdiwKLQkJCQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3Rj
Yj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCRlJFRSwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJCQkJfQot
CQkJCQlzY3RwX3NiZnJlZShjb250cm9sLCBzdGNiLCAmc28tPnNvX3JjdiwgbSk7Ci0JCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdf
RU5BQkxFKSB7Ci0JCQkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LAotCQkJCQkJICAgY29udHJv
bC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCQkJ
CQl9Ci0JCQkJCWNvcGllZF9zb19mYXIgKz0gY3BfbGVuOwotCQkJCQlmcmVlZF9zb19mYXIgKz0g
Y3BfbGVuOwotCQkJCQlmcmVlZF9zb19mYXIgKz0gTVNJWkU7Ci0JCQkJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgY3BfbGVuKTsKLQkJCQkJY29udHJvbC0+ZGF0YSA9IHNj
dHBfbV9mcmVlKG0pOwotCQkJCQltID0gY29udHJvbC0+ZGF0YTsKLQkJCQkJLyogYmVlbiB0aHJv
dWdoIGl0IGFsbCwgbXVzdCBob2xkIHNiIGxvY2sgb2sgdG8gbnVsbCB0YWlsICovCi0JCQkJCWlm
IChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0jaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKLQkJCQkJCWlmICgoY29udHJvbC0+ZW5kX2FkZGVkID09IDApIHx8Ci0J
CQkJCQkgICAgKFRBSUxRX05FWFQoY29udHJvbCwgbmV4dCkgPT0gTlVMTCkpIHsKLQkJCQkJCQkv
KiBJZiB0aGUgZW5kIGlzIG5vdCBhZGRlZCwgT1IgdGhlCi0JCQkJCQkJICogbmV4dCBpcyBOT1Qg
bnVsbCB3ZSBNVVNUIGhhdmUgdGhlIGxvY2suCi0JCQkJCQkJICovCi0JCQkJCQkJaWYgKG10eF9v
d25lZCgmaW5wLT5pbnBfcmRhdGFfbXR4KSA9PSAwKSB7Ci0JCQkJCQkJCXBhbmljKCJIbW0gd2Ug
ZG9uJ3Qgb3duIHRoZSBsb2NrPyIpOwotCQkJCQkJCX0KLQkJCQkJCX0KLSNlbmRpZgotI2VuZGlm
Ci0JCQkJCQljb250cm9sLT50YWlsX21idWYgPSBOVUxMOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJ
CQkJCWlmICgoY29udHJvbC0+ZW5kX2FkZGVkKSAmJiAoKG91dF9mbGFncyAmIE1TR19FT1IpID09
IDApKSB7Ci0JCQkJCQkJcGFuaWMoImVuZF9hZGRlZCwgbm90aGluZyBsZWZ0IGFuZCBubyBNU0df
RU9SIik7Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJfQotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJ
LyogRG8gd2UgbmVlZCB0byB0cmltIHRoZSBtYnVmPyAqLwotCQkJCWlmIChjb250cm9sLT5zcGVj
X2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19OT1RJRklD
QVRJT047Ci0JCQkJfQotCQkJCWlmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgewotCQkJ
CQlTQ1RQX0JVRl9SRVNWX1VGKG0sIGNwX2xlbik7Ci0JCQkJCVNDVFBfQlVGX0xFTihtKSAtPSBj
cF9sZW47Ci0JCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7Ci0JCQkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LCBj
b250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsIGNwX2xl
bik7Ci0JCQkJCX0KLQkJCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc28tPnNvX3Jjdi5zYl9jYywg
Y3BfbGVuKTsKLQkJCQkJaWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKLQkJ
CQkJICAgIHN0Y2IpIHsKLQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Muc2Jf
Y2MsIGNwX2xlbik7Ci0JCQkJCX0KLQkJCQkJY29waWVkX3NvX2ZhciArPSBjcF9sZW47Ci0JCQkJ
CWZyZWVkX3NvX2ZhciArPSBjcF9sZW47Ci0JCQkJCWZyZWVkX3NvX2ZhciArPSBNU0laRTsKLQkJ
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9H
R0lOR19FTkFCTEUpIHsKLQkJCQkJCXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsIGNvbnRyb2wtPmRv
X25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsCi0JCQkJCQkJICAgU0NUUF9MT0dfU0JSRVNVTFQsIDAp
OwotCQkJCQl9Ci0JCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmNvbnRyb2wtPmxlbmd0aCwgY3Bf
bGVuKTsKLQkJCQl9IGVsc2UgewotCQkJCQljb3BpZWRfc29fZmFyICs9IGNwX2xlbjsKLQkJCQl9
Ci0JCQl9Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJE
KQotCQkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB8fCAodWlvLT51aW9fcmVzaWQgPT0gMCkp
IHsKLSNlbHNlCi0JCQlpZiAoKG91dF9mbGFncyAmIE1TR19FT1IpIHx8ICh1aW9fcmVzaWQodWlv
KSA9PSAwKSkgewotI2VuZGlmCi0jZWxzZQotCQkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB8
fCAodWlvLT51aW9fcmVzaWQgPT0gMCkpIHsKLSNlbmRpZgotCQkJCWJyZWFrOwotCQkJfQotCQkJ
aWYgKCgoc3RjYikgJiYgKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApICYmCi0JCQkgICAgKGNv
bnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJgotCQkJICAgIChmcmVlZF9zb19mYXIgPj0g
cnduZF9yZXEpKSB7Ci0JCQkJc2N0cF91c2VyX3JjdmQoc3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9s
ZF9ybG9jaywgcnduZF9yZXEpOwotCQkJfQotCQl9IC8qIGVuZCB3aGlsZShtKSAqLwotCQkvKgot
CQkgKiBBdCB0aGlzIHBvaW50IHdlIGhhdmUgbG9va2VkIGF0IGl0IGFsbCBhbmQgd2UgZWl0aGVy
IGhhdmUKLQkJICogYSBNU0dfRU9SL29yIHJlYWQgYWxsIHRoZSB1c2VyIHdhbnRzLi4uIDxPUj4K
LQkJICogY29udHJvbC0+bGVuZ3RoID09IDAuCi0JCSAqLwotCQlpZiAoKG91dF9mbGFncyAmIE1T
R19FT1IpICYmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkpIHsKLQkJCS8qIHdlIGFyZSBk
b25lIHdpdGggdGhpcyBjb250cm9sICovCi0JCQlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsK
LQkJCQlpZiAoY29udHJvbC0+ZGF0YSkgewotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQkJcGFuaWMo
ImNvbnRyb2wtPmRhdGEgbm90IG51bGwgYXQgcmVhZCBlb3I/Iik7Ci0jZWxzZQotCQkJCQlTQ1RQ
X1BSSU5URigiU3RyYW5nZSwgZGF0YSBsZWZ0IGluIHRoZSBjb250cm9sIGJ1ZmZlciAuLiBpbnZh
cmllbnRzIHdvdWxkIHBhbmljP1xuIik7Ci0JCQkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRh
KTsKLQkJCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7Ci0jZW5kaWYKLQkJCQl9Ci0JCQlkb25lX3dp
dGhfY29udHJvbDoKLQkJCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7Ci0JCQkJCVNDVFBfSU5QX1JF
QURfTE9DSyhpbnApOwotCQkJCQlob2xkX3Jsb2NrID0gMTsKLQkJCQl9Ci0JCQkJVEFJTFFfUkVN
T1ZFKCZpbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOwotCQkJCS8qIEFkZCBiYWNrIGFu
eSBoaWRkZW5kIGRhdGEgKi8KLQkJCQlpZiAoY29udHJvbC0+aGVsZF9sZW5ndGgpIHsKLQkJCQkJ
aGVsZF9sZW5ndGggPSAwOwotCQkJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IDA7Ci0JCQkJCXdh
a2V1cF9yZWFkX3NvY2tldCA9IDE7Ci0JCQkJfQotCQkJCWlmIChjb250cm9sLT5hdXhfZGF0YSkg
ewotCQkJCQlzY3RwX21fZnJlZSAoY29udHJvbC0+YXV4X2RhdGEpOwotCQkJCQljb250cm9sLT5h
dXhfZGF0YSA9IE5VTEw7Ci0JCQkJfQotCQkJCW5vX3Jjdl9uZWVkZWQgPSBjb250cm9sLT5kb19u
b3RfcmVmX3N0Y2I7Ci0JCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zyb20p
OwotCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxMOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJCQlpZiAo
Y29udHJvbC0+b25fc3RybV9xKSB7Ci0JCQkJCXBhbmljKCJBYm91dCB0byBmcmVlIGN0bDolcCBz
bzolcCBhbmQgaXRzIGluICVkIiwKLQkJCQkJICAgICAgY29udHJvbCwgc28sIGNvbnRyb2wtPm9u
X3N0cm1fcSk7Ci0JCQkJfQotI2VuZGlmCi0JCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29u
dHJvbCk7Ci0JCQkJY29udHJvbCA9IE5VTEw7Ci0JCQkJaWYgKChmcmVlZF9zb19mYXIgPj0gcndu
ZF9yZXEpICYmCi0JCQkJICAgIChub19yY3ZfbmVlZGVkID09IDApKQotCQkJCQlzY3RwX3VzZXJf
cmN2ZChzdGNiLCAmZnJlZWRfc29fZmFyLCBob2xkX3Jsb2NrLCByd25kX3JlcSk7Ci0KLQkJCX0g
ZWxzZSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGUgdXNlciBkaWQgbm90IHJlYWQgYWxsIG9mIHRoaXMK
LQkJCQkgKiBtZXNzYWdlLCB0dXJuIG9mZiB0aGUgcmV0dXJuZWQgTVNHX0VPUgotCQkJCSAqIHNp
bmNlIHdlIGFyZSBsZWF2aW5nIG1vcmUgYmVoaW5kIG9uIHRoZQotCQkJCSAqIGNvbnRyb2wgdG8g
cmVhZC4KLQkJCQkgKi8KLSNpZmRlZiBJTlZBUklBTlRTCi0JCQkJaWYgKGNvbnRyb2wtPmVuZF9h
ZGRlZCAmJgotCQkJCSAgICAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSAmJgotCQkJCSAgICAoY29u
dHJvbC0+dGFpbF9tYnVmID09IE5VTEwpKSB7Ci0JCQkJCXBhbmljKCJHYWssIGNvbnRyb2wtPmxl
bmd0aCBpcyBjb3JydXB0PyIpOwotCQkJCX0KLSNlbmRpZgotCQkJCW5vX3Jjdl9uZWVkZWQgPSBj
b250cm9sLT5kb19ub3RfcmVmX3N0Y2I7Ci0JCQkJb3V0X2ZsYWdzICY9IH5NU0dfRU9SOwotCQkJ
fQotCQl9Ci0JCWlmIChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB7Ci0JCQlnb3RvIHJlbGVhc2U7Ci0J
CX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCi0J
CWlmICgodWlvLT51aW9fcmVzaWQgPT0gMCkgfHwKLSNlbHNlCi0JCWlmICgodWlvX3Jlc2lkKHVp
bykgPT0gMCkgfHwKLSNlbmRpZgotI2Vsc2UKLQkJaWYgKCh1aW8tPnVpb19yZXNpZCA9PSAwKSB8
fAotI2VuZGlmCi0JCSAgICAoKGluX2Vlb3JfbW9kZSkgJiYKLQkJICAgICAoY29waWVkX3NvX2Zh
ciA+PSAodWludDMyX3QpbWF4KHNvLT5zb19yY3Yuc2JfbG93YXQsIDEpKSkpIHsKLQkJCWdvdG8g
cmVsZWFzZTsKLQkJfQotCQkvKgotCQkgKiBJZiBJIGhpdCBoZXJlIHRoZSByZWNlaXZlciB3YW50
cyBtb3JlIGFuZCB0aGlzIG1lc3NhZ2UgaXMKLQkJICogTk9UIGRvbmUgKHBkLWFwaSkuIFNvIHR3
byBxdWVzdGlvbnMuIENhbiB3ZSBibG9jaz8gaWYgbm90Ci0JCSAqIHdlIGFyZSBkb25lLiBEaWQg
dGhlIHVzZXIgTk9UIHNldCBNU0dfV0FJVEFMTD8KLQkJICovCi0JCWlmIChibG9ja19hbGxvd2Vk
ID09IDApIHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotCQkvKgotCQkgKiBXZSBuZWVkIHRvIHdh
aXQgZm9yIG1vcmUgZGF0YSBhIGZldyB0aGluZ3M6IC0gV2UgZG9uJ3QKLQkJICogc2J1bmxvY2so
KSBzbyB3ZSBkb24ndCBnZXQgc29tZW9uZSBlbHNlIHJlYWRpbmcuIC0gV2UKLQkJICogbXVzdCBi
ZSBzdXJlIHRvIGFjY291bnQgZm9yIHRoZSBjYXNlIHdoZXJlIHdoYXQgaXMgYWRkZWQKLQkJICog
aXMgTk9UIHRvIG91ciBjb250cm9sIHdoZW4gd2Ugd2FrZXVwLgotCQkgKi8KLQotCQkvKiBEbyB3
ZSBuZWVkIHRvIHRlbGwgdGhlIHRyYW5zcG9ydCBhIHJ3bmQgdXBkYXRlIG1pZ2h0IGJlCi0JCSAq
IG5lZWRlZCBiZWZvcmUgd2UgZ28gdG8gc2xlZXA/Ci0JCSAqLwotCQlpZiAoKChzdGNiKSAmJiAo
aW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkgJiYKLQkJICAgICgoZnJlZWRfc29fZmFyID49IHJ3
bmRfcmVxKSAmJgotCQkgICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKLQkJ
ICAgICAobm9fcmN2X25lZWRlZCA9PSAwKSkpIHsKLQkJCXNjdHBfdXNlcl9yY3ZkKHN0Y2IsICZm
cmVlZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsKLQkJfQotCXdhaXRfc29tZV9tb3Jl
OgotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAw
MCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJaWYgKHNvLT5zb19yY3Yuc2Jfc3RhdGUgJiBT
QlNfQ0FOVFJDVk1PUkUpIHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotI2Vsc2UKLQkJaWYgKHNv
LT5zb19zdGF0ZSAmIFNTX0NBTlRSQ1ZNT1JFKSB7Ci0JCQlnb3RvIHJlbGVhc2U7Ci0JCX0KLSNl
bmRpZgotCi0JCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09O
RSkKLQkJCWdvdG8gcmVsZWFzZTsKLQotCQlpZiAoaG9sZF9ybG9jayA9PSAxKSB7Ci0JCQlTQ1RQ
X0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCQkJaG9sZF9ybG9jayA9IDA7Ci0JCX0KLQkJaWYgKGhv
bGRfc2Jsb2NrID09IDApIHsKLQkJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7Ci0JCQlob2xk
X3NibG9jayA9IDE7Ci0JCX0KLQkJaWYgKChjb3BpZWRfc29fZmFyKSAmJiAoY29udHJvbC0+bGVu
Z3RoID09IDApICYmCi0JCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfRlJBR19JTlRFUkxFQVZFKSkpIHsKLQkJCWdvdG8gcmVsZWFzZTsKLQkJfQotI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKQotCQlzYnVubG9jaygmc28tPnNvX3JjdiwgMSk7Ci0jZW5kaWYKLQkJaWYg
KHNvLT5zb19yY3Yuc2JfY2MgPD0gY29udHJvbC0+aGVsZF9sZW5ndGgpIHsKLQkJCWVycm9yID0g
c2J3YWl0KCZzby0+c29fcmN2KTsKLQkJCWlmIChlcnJvcikgewotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCi0JCQkJZ290byByZWxlYXNlOwotI2Vsc2UKLQkJCQlnb3RvIHJlbGVhc2VfdW5sb2Nr
ZWQ7Ci0jZW5kaWYKLQkJCX0KLQkJCWNvbnRyb2wtPmhlbGRfbGVuZ3RoID0gMDsKLQkJfQotI2lm
IGRlZmluZWQoX19BUFBMRV9fKQotCQllcnJvciA9IHNibG9jaygmc28tPnNvX3JjdiwgU0JMT0NL
V0FJVChpbl9mbGFncykpOwotI2VuZGlmCi0JCWlmIChob2xkX3NibG9jaykgewotCQkJU09DS0JV
Rl9VTkxPQ0soJnNvLT5zb19yY3YpOwotCQkJaG9sZF9zYmxvY2sgPSAwOwotCQl9Ci0JCWlmIChj
b250cm9sLT5sZW5ndGggPT0gMCkgewotCQkJLyogc3RpbGwgbm90aGluZyBoZXJlICovCi0JCQlp
ZiAoY29udHJvbC0+ZW5kX2FkZGVkID09IDEpIHsKLQkJCQkvKiBoZSBhYm9ydGVkLCBvciBpcyBk
b25lIGkuZS5kaWQgYSBzaHV0ZG93biAqLwotCQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJ
CWlmIChjb250cm9sLT5wZGFwaV9hYm9ydGVkKSB7Ci0JCQkJCWlmICgoY29udHJvbC0+ZG9fbm90
X3JlZl9zdGNiID09IDApICYmICgoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9O
KSA9PSAwKSkKLQkJCQkJCWNvbnRyb2wtPnN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZv
X3N0cmVhbV0uZGVsaXZlcnlfc3RhcnRlZCA9IDA7Ci0KLQkJCQkJb3V0X2ZsYWdzIHw9IE1TR19U
UlVOQzsKLQkJCQl9IGVsc2UgewotCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9
PSAwKSAmJiAoKGNvbnRyb2wtPnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCi0J
CQkJCQljb250cm9sLT5zdGNiLT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRl
bGl2ZXJ5X3N0YXJ0ZWQgPSAwOwotCQkJCX0KLQkJCQlnb3RvIGRvbmVfd2l0aF9jb250cm9sOwot
CQkJfQotCQkJaWYgKHNvLT5zb19yY3Yuc2JfY2MgPiBoZWxkX2xlbmd0aCkgewotCQkJCWNvbnRy
b2wtPmhlbGRfbGVuZ3RoID0gc28tPnNvX3Jjdi5zYl9jYzsKLQkJCQloZWxkX2xlbmd0aCA9IDA7
Ci0JCQl9Ci0JCQlnb3RvIHdhaXRfc29tZV9tb3JlOwotCQl9IGVsc2UgaWYgKGNvbnRyb2wtPmRh
dGEgPT0gTlVMTCkgewotCQkJLyogd2UgbXVzdCByZS1zeW5jIHNpbmNlIGRhdGEKLQkJCSAqIGlz
IHByb2JhYmx5IGJlaW5nIGFkZGVkCi0JCQkgKi8KLQkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnAp
OwotCQkJaWYgKChjb250cm9sLT5sZW5ndGggPiAwKSAmJiAoY29udHJvbC0+ZGF0YSA9PSBOVUxM
KSkgewotCQkJCS8qIGJpZyB0cm91YmxlLi4gd2UgaGF2ZSB0aGUgbG9jayBhbmQgaXRzIGNvcnJ1
cHQ/ICovCi0jaWZkZWYgSU5WQVJJQU5UUwotCQkJCXBhbmljICgiSW1wb3NzaWJsZSBkYXRhPT1O
VUxMIGxlbmd0aCAhPTAiKTsKLSNlbmRpZgotCQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJ
CW91dF9mbGFncyB8PSBNU0dfVFJVTkM7Ci0JCQkJY29udHJvbC0+bGVuZ3RoID0gMDsKLQkJCQlT
Q1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCQkJCWdvdG8gZG9uZV93aXRoX2NvbnRyb2w7Ci0J
CQl9Ci0JCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCQkJLyogV2Ugd2lsbCBmYWxsIGFy
b3VuZCB0byBnZXQgbW9yZSBkYXRhICovCi0JCX0KLQkJZ290byBnZXRfbW9yZV9kYXRhOwotCX0g
ZWxzZSB7Ci0JCS8qLQotCQkgKiBHaXZlIGNhbGxlciBiYWNrIHRoZSBtYnVmIGNoYWluLAotCQkg
KiBzdG9yZSBpbiB1aW9fcmVzaWQgdGhlIGxlbmd0aAotCQkgKi8KLQkJd2FrZXVwX3JlYWRfc29j
a2V0ID0gMDsKLQkJaWYgKChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkgfHwKLQkJICAgIChUQUlM
UV9ORVhUKGNvbnRyb2wsIG5leHQpID09IE5VTEwpKSB7Ci0JCQkvKiBOZWVkIHRvIGdldCBybG9j
ayAqLwotCQkJaWYgKGhvbGRfcmxvY2sgPT0gMCkgewotCQkJCVNDVFBfSU5QX1JFQURfTE9DSyhp
bnApOwotCQkJCWhvbGRfcmxvY2sgPSAxOwotCQkJfQotCQl9Ci0JCWlmIChjb250cm9sLT5lbmRf
YWRkZWQpIHsKLQkJCW91dF9mbGFncyB8PSBNU0dfRU9SOwotCQkJaWYgKChjb250cm9sLT5kb19u
b3RfcmVmX3N0Y2IgPT0gMCkgJiYKLQkJCSAgICAoY29udHJvbC0+c3RjYiAhPSBOVUxMKSAmJgot
CQkJICAgICgoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSA9PSAwKSkKLQkJ
CQljb250cm9sLT5zdGNiLT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2
ZXJ5X3N0YXJ0ZWQgPSAwOwotCQl9Ci0JCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJ
RklDQVRJT04pIHsKLQkJCW91dF9mbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOwotCQl9Ci0jaWYg
ZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQotCQl1aW8tPnVp
b19yZXNpZCA9IGNvbnRyb2wtPmxlbmd0aDsKLSNlbHNlCi0JCXVpb19zZXRyZXNpZCh1aW8sIGNv
bnRyb2wtPmxlbmd0aCk7Ci0jZW5kaWYKLSNlbHNlCi0JCXVpby0+dWlvX3Jlc2lkID0gY29udHJv
bC0+bGVuZ3RoOwotI2VuZGlmCi0JCSptcCA9IGNvbnRyb2wtPmRhdGE7Ci0JCW0gPSBjb250cm9s
LT5kYXRhOwotCQl3aGlsZSAobSkgewotCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKLQkJCQlzY3RwX3NibG9nKCZz
by0+c29fcmN2LAotCQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFND
VFBfTE9HX1NCRlJFRSwgU0NUUF9CVUZfTEVOKG0pKTsKLQkJCX0KLQkJCXNjdHBfc2JmcmVlKGNv
bnRyb2wsIHN0Y2IsICZzby0+c29fcmN2LCBtKTsKLQkJCWZyZWVkX3NvX2ZhciArPSBTQ1RQX0JV
Rl9MRU4obSk7Ci0JCQlmcmVlZF9zb19mYXIgKz0gTVNJWkU7Ci0JCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgewotCQkJ
CXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsCi0JCQkJICAgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNi
P05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwotCQkJfQotCQkJbSA9IFNDVFBfQlVG
X05FWFQobSk7Ci0JCX0KLQkJY29udHJvbC0+ZGF0YSA9IGNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5V
TEw7Ci0JCWNvbnRyb2wtPmxlbmd0aCA9IDA7Ci0JCWlmIChvdXRfZmxhZ3MgJiBNU0dfRU9SKSB7
Ci0JCQkvKiBEb25lIHdpdGggdGhpcyBjb250cm9sICovCi0JCQlnb3RvIGRvbmVfd2l0aF9jb250
cm9sOwotCQl9Ci0JfQotIHJlbGVhc2U6Ci0JaWYgKGhvbGRfcmxvY2sgPT0gMSkgewotCQlTQ1RQ
X0lOUF9SRUFEX1VOTE9DSyhpbnApOwotCQlob2xkX3Jsb2NrID0gMDsKLQl9Ci0jaWYgKGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JaWYgKGhvbGRfc2Jsb2NrID09IDApIHsKLQkJU09DS0JVRl9MT0NL
KCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxvY2sgPSAxOwotCX0KLSNlbHNlCi0JaWYgKGhvbGRf
c2Jsb2NrID09IDEpIHsKLQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3YpOwotCQlob2xkX3Ni
bG9jayA9IDA7Ci0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0Jc2J1bmxvY2so
JnNvLT5zb19yY3YsIDEpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCXNi
dW5sb2NrKCZzby0+c29fcmN2KTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA3MDAwMDAKLQlzb2NrYnVmX2xvY2sgPSAwOwotI2VuZGlmCi0jZW5kaWYK
LQotIHJlbGVhc2VfdW5sb2NrZWQ6Ci0JaWYgKGhvbGRfc2Jsb2NrKSB7Ci0JCVNPQ0tCVUZfVU5M
T0NLKCZzby0+c29fcmN2KTsKLQkJaG9sZF9zYmxvY2sgPSAwOwotCX0KLQlpZiAoKHN0Y2IpICYm
IChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSB7Ci0JCWlmICgoZnJlZWRfc29fZmFyID49IHJ3
bmRfcmVxKSAmJgotCQkgICAgKGNvbnRyb2wgJiYgKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9
PSAwKSkgJiYKLQkJICAgIChub19yY3ZfbmVlZGVkID09IDApKQotCQkJc2N0cF91c2VyX3JjdmQo
c3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9sZF9ybG9jaywgcnduZF9yZXEpOwotCX0KLSBvdXQ6Ci0J
aWYgKG1zZ19mbGFncykgewotCQkqbXNnX2ZsYWdzID0gb3V0X2ZsYWdzOwotCX0KLQlpZiAoKChv
dXRfZmxhZ3MgJiBNU0dfRU9SKSA9PSAwKSAmJgotCSAgICAoKGluX2ZsYWdzICYgTVNHX1BFRUsp
ID09IDApICYmCi0JICAgIChzaW5mbykgJiYKLQkgICAgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKSB8fAotCSAgICAgc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSkgewotCQlzdHJ1Y3Qgc2N0cF9leHRy
Y3ZpbmZvICpzX2V4dHJhOwotCQlzX2V4dHJhID0gKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKilz
aW5mbzsKLQkJc19leHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzID0gU0NUUF9OT19ORVhUX01TRzsK
LQl9Ci0JaWYgKGhvbGRfcmxvY2sgPT0gMSkgewotCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnAp
OwotCX0KLQlpZiAoaG9sZF9zYmxvY2spIHsKLQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19yY3Yp
OwotCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3
MDAwMDAKLQlpZiAoc29ja2J1Zl9sb2NrKSB7Ci0JCXNidW5sb2NrKCZzby0+c29fcmN2KTsKLQl9
Ci0jZW5kaWYKLQotCWlmIChmcmVlY250X2FwcGxpZWQpIHsKLQkJLyoKLQkJICogVGhlIGxvY2sg
b24gdGhlIHNvY2tldCBidWZmZXIgcHJvdGVjdHMgdXMgc28gdGhlIGZyZWUKLQkJICogY29kZSB3
aWxsIHN0b3AuIEJ1dCBzaW5jZSB3ZSB1c2VkIHRoZSBzb2NrZXRidWYgbG9jayBhbmQKLQkJICog
dGhlIHNlbmRlciB1c2VzIHRoZSB0Y2JfbG9jayB0byBpbmNyZW1lbnQsIHdlIG5lZWQgdG8gdXNl
Ci0JCSAqIHRoZSBhdG9taWMgYWRkIHRvIHRoZSByZWZjbnQuCi0JCSAqLwotCQlpZiAoc3RjYiA9
PSBOVUxMKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQkJcGFuaWMoInN0Y2IgZm9yIHJlZmNudCBo
YXMgZ29uZSBOVUxMPyIpOwotCQkJZ290byBzdGFnZV9sZWZ0OwotI2Vsc2UKLQkJCWdvdG8gc3Rh
Z2VfbGVmdDsKLSNlbmRpZgotCQl9Ci0JCS8qIFNhdmUgdGhlIHZhbHVlIGJhY2sgZm9yIG5leHQg
dGltZSAqLwotCQlzdGNiLT5mcmVlZF9ieV9zb3Jjdl9zaW5jZWxhc3QgPSBmcmVlZF9zb19mYXI7
Ci0JCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOwotCX0KLQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICZTQ1RQX1JFQ1ZfUldORF9MT0dHSU5H
X0VOQUJMRSkgewotCQlpZiAoc3RjYikgewotCQkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1Zf
RE9ORSwKLQkJCQkgICAgICAgZnJlZWRfc29fZmFyLAotI2lmIGRlZmluZWQoX19BUFBMRV9fKQot
I2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKLQkJCQkgICAgICAgKCh1aW8pID8gKHNsZW4gLSB1
aW8tPnVpb19yZXNpZCkgOiBzbGVuKSwKLSNlbHNlCi0JCQkJICAgICAgICgodWlvKSA/IChzbGVu
IC0gdWlvX3Jlc2lkKHVpbykpIDogc2xlbiksCi0jZW5kaWYKLSNlbHNlCi0JCQkJICAgICAgICh1
aW50MzJfdCkoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlvX3Jlc2lkKSA6IHNsZW4pLAotI2VuZGlm
Ci0JCQkJICAgICAgIHN0Y2ItPmFzb2MubXlfcnduZCwKLQkJCQkgICAgICAgc28tPnNvX3Jjdi5z
Yl9jYyk7Ci0JCX0gZWxzZSB7Ci0JCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9ET05FLAot
CQkJCSAgICAgICBmcmVlZF9zb19mYXIsCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0jaWYgZGVm
aW5lZChBUFBMRV9MRU9QQVJEKQotCQkJCSAgICAgICAoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlv
X3Jlc2lkKSA6IHNsZW4pLAotI2Vsc2UKLQkJCQkgICAgICAgKCh1aW8pID8gKHNsZW4gLSB1aW9f
cmVzaWQodWlvKSkgOiBzbGVuKSwKLSNlbmRpZgotI2Vsc2UKLQkJCQkgICAgICAgKHVpbnQzMl90
KSgodWlvKSA/IChzbGVuIC0gdWlvLT51aW9fcmVzaWQpIDogc2xlbiksCi0jZW5kaWYKLQkJCQkg
ICAgICAgMCwKLQkJCQkgICAgICAgc28tPnNvX3Jjdi5zYl9jYyk7Ci0JCX0KLQl9Ci0gc3RhZ2Vf
bGVmdDoKLQlpZiAod2FrZXVwX3JlYWRfc29ja2V0KSB7Ci0JCXNjdHBfc29yd2FrZXVwKGlucCwg
c28pOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotCi0jaWZkZWYgU0NUUF9NQlVGX0xPR0dJ
TkcKLXN0cnVjdCBtYnVmICoKLXNjdHBfbV9mcmVlKHN0cnVjdCBtYnVmICptKQotewotCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19F
TkFCTEUpIHsKLQkJc2N0cF9sb2dfbWIobSwgU0NUUF9NQlVGX0lGUkVFKTsKLQl9Ci0JcmV0dXJu
IChtX2ZyZWUobSkpOwotfQotCi12b2lkIHNjdHBfbV9mcmVlbShzdHJ1Y3QgbWJ1ZiAqbWIpCi17
Ci0Jd2hpbGUgKG1iICE9IE5VTEwpCi0JCW1iID0gc2N0cF9tX2ZyZWUobWIpOwotfQotCi0jZW5k
aWYKLQotaW50Ci1zY3RwX2R5bmFtaWNfc2V0X3ByaW1hcnkoc3RydWN0IHNvY2thZGRyICpzYSwg
dWludDMyX3QgdnJmX2lkKQotewotCS8qIEdpdmVuIGEgbG9jYWwgYWRkcmVzcy4gRm9yIGFsbCBh
c3NvY2lhdGlvbnMKLQkgKiB0aGF0IGhvbGRzIHRoZSBhZGRyZXNzLCByZXF1ZXN0IGEgcGVlci1z
ZXQtcHJpbWFyeS4KLQkgKi8KLQlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKLQlzdHJ1Y3Qgc2N0cF9s
YWRkciAqd2k7Ci0KLQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoc2EsIHZyZl9pZCwgMCk7
Ci0JaWYgKGlmYSA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQUREUk5PVEFWQUlMKTsKLQkJcmV0dXJuIChFQURE
Uk5PVEFWQUlMKTsKLQl9Ci0JLyogTm93IHRoYXQgd2UgaGF2ZSB0aGUgaWZhIHdlIG11c3QgYXdh
a2VuIHRoZQotCSAqIGl0ZXJhdG9yIHdpdGggdGhpcyBtZXNzYWdlLgotCSAqLwotCXdpID0gU0NU
UF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIHN0cnVjdCBzY3RwX2xh
ZGRyKTsKLQlpZiAod2kgPT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKLQkJcmV0dXJuIChFTk9NRU0p
OwotCX0KLQkvKiBOb3cgaW5jciB0aGUgY291bnQgYW5kIGludCB3aSBzdHJ1Y3R1cmUgKi8KLQlT
Q1RQX0lOQ1JfTEFERFJfQ09VTlQoKTsKLQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsKLQko
dm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmd2ktPnN0YXJ0X3RpbWUpOwotCXdpLT5pZmEgPSBp
ZmE7Ci0Jd2ktPmFjdGlvbiA9IFNDVFBfU0VUX1BSSU1fQUREUjsKLQlhdG9taWNfYWRkX2ludCgm
aWZhLT5yZWZjb3VudCwgMSk7Ci0KLQkvKiBOb3cgYWRkIGl0IHRvIHRoZSB3b3JrIHF1ZXVlICov
Ci0JU0NUUF9XUV9BRERSX0xPQ0soKTsKLQkvKgotCSAqIFNob3VsZCB0aGlzIHJlYWxseSBiZSBh
IHRhaWxxPyBBcyBpdCBpcyB3ZSB3aWxsIHByb2Nlc3MgdGhlCi0JICogbmV3ZXN0IGZpcnN0IDot
MAotCSAqLwotCUxJU1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3EpLCB3aSwg
c2N0cF9ueHRfYWRkcik7Ci0JU0NUUF9XUV9BRERSX1VOTE9DSygpOwotCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCi0JCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVM
TCwKLQkJCSAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwKLQkJCSAoc3RydWN0IHNjdHBfbmV0cyAq
KU5VTEwpOwotCXJldHVybiAoMCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0v
KiBubyBzY3RwX3NvcmVjZWl2ZSBmb3IgX19Vc2Vyc3BhY2VfXyBub3cgKi8KLSNlbmRpZgotCi0j
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWludAotc2N0cF9zb3JlY2VpdmUoCXN0cnVjdCBz
b2NrZXQgKnNvLAotCQlzdHJ1Y3Qgc29ja2FkZHIgKipwc2EsCi0JCXN0cnVjdCB1aW8gKnVpbywK
LQkJc3RydWN0IG1idWYgKiptcDAsCi0JCXN0cnVjdCBtYnVmICoqY29udHJvbHAsCi0JCWludCAq
ZmxhZ3NwKQotewotCWludCBlcnJvciwgZnJvbWxlbjsKLQl1aW50OF90IHNvY2tidWZbMjU2XTsK
LQlzdHJ1Y3Qgc29ja2FkZHIgKmZyb207Ci0Jc3RydWN0IHNjdHBfZXh0cmN2aW5mbyBzaW5mbzsK
LQlpbnQgZmlsbGluZ19zaW5mbyA9IDE7Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQotCWlu
cCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0JLyogcGlja3VwIHRoZSBhc3Nv
YyB3ZSBhcmUgcmVhZGluZyBmcm9tICovCi0JaWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7
Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0JaWYgKChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQpICYmCi0JICAgICBzY3RwX2lzX2ZlYXR1cmVf
b2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pICYmCi0JICAgICBzY3RwX2lzX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB8fAotCSAgICAoY29u
dHJvbHAgPT0gTlVMTCkpIHsKLQkJLyogdXNlciBkb2VzIG5vdCB3YW50IHRoZSBzbmRyY3YgY3Rs
ICovCi0JCWZpbGxpbmdfc2luZm8gPSAwOwotCX0KLQlpZiAocHNhKSB7Ci0JCWZyb20gPSAoc3Ry
dWN0IHNvY2thZGRyICopc29ja2J1ZjsKLQkJZnJvbWxlbiA9IHNpemVvZihzb2NrYnVmKTsKLSNp
ZmRlZiBIQVZFX1NBX0xFTgotCQlmcm9tLT5zYV9sZW4gPSAwOwotI2VuZGlmCi0JfSBlbHNlIHsK
LQkJZnJvbSA9IE5VTEw7Ci0JCWZyb21sZW4gPSAwOwotCX0KLQotI2lmIGRlZmluZWQoX19BUFBM
RV9fKQotCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOwotI2VuZGlmCi0JaWYgKGZpbGxpbmdfc2lu
Zm8pIHsKLQkJbWVtc2V0KCZzaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8p
KTsKLQl9Ci0JZXJyb3IgPSBzY3RwX3NvcmVjdm1zZyhzbywgdWlvLCBtcDAsIGZyb20sIGZyb21s
ZW4sIGZsYWdzcCwKLQkgICAgKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2luZm8sIGZpbGxp
bmdfc2luZm8pOwotCWlmIChjb250cm9scCAhPSBOVUxMKSB7Ci0JCS8qIGNvcHkgYmFjayB0aGUg
c2luZm8gaW4gYSBDTVNHIGZvcm1hdCAqLwotCQlpZiAoZmlsbGluZ19zaW5mbykKLQkJCSpjb250
cm9scCA9IHNjdHBfYnVpbGRfY3RsX25jaHVuayhpbnAsCi0JCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKikmc2luZm8pOwotCQllbHNl
Ci0JCQkqY29udHJvbHAgPSBOVUxMOwotCX0KLQlpZiAocHNhKSB7Ci0JCS8qIGNvcHkgYmFjayB0
aGUgYWRkcmVzcyBpbmZvICovCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGZyb20gJiYgZnJv
bS0+c2FfbGVuKSB7Ci0jZWxzZQotCQlpZiAoZnJvbSkgewotI2VuZGlmCi0jaWYgKGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAwKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKQotCQkJKnBzYSA9IHNvZHVwc29ja2FkZHIoZnJvbSwgTV9OT1dBSVQpOwotI2Vs
c2UKLQkJCSpwc2EgPSBkdXBfc29ja2FkZHIoZnJvbSwgbXAwID09IDApOwotI2VuZGlmCi0JCX0g
ZWxzZSB7Ci0JCQkqcHNhID0gTlVMTDsKLQkJfQotCX0KLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
LQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwotI2VuZGlmCi0JcmV0dXJuIChlcnJvcik7Ci19
Ci0KLQotI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDYw
MzAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLS8qCi0gKiBHZW5lcmFsIHJvdXRpbmUgdG8g
YWxsb2NhdGUgYSBoYXNoIHRhYmxlIHdpdGggY29udHJvbCBvZiBtZW1vcnkgZmxhZ3MuCi0gKiBp
cyBpbiA3LjAgYW5kIGJleW9uZCBmb3Igc3VyZSA6LSkKLSAqLwotdm9pZCAqCi1zY3RwX2hhc2hp
bml0X2ZsYWdzKGludCBlbGVtZW50cywgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLAotICAgICAg
ICAgICAgICAgICAgICB1X2xvbmcgKmhhc2htYXNrLCBpbnQgZmxhZ3MpCi17Ci0JbG9uZyBoYXNo
c2l6ZTsKLQlMSVNUX0hFQUQoZ2VuZXJpYywgZ2VuZXJpYykgKmhhc2h0Ymw7Ci0JaW50IGk7Ci0K
LQotCWlmIChlbGVtZW50cyA8PSAwKSB7Ci0jaWZkZWYgSU5WQVJJQU5UUwotCQlwYW5pYygiaGFz
aGluaXQ6IGJhZCBlbGVtZW50cyIpOwotI2Vsc2UKLQkJU0NUUF9QUklOVEYoImhhc2hpbml0OiBi
YWQgZWxlbWVudHM/Iik7Ci0JCWVsZW1lbnRzID0gMTsKLSNlbmRpZgotCX0KLQlmb3IgKGhhc2hz
aXplID0gMTsgaGFzaHNpemUgPD0gZWxlbWVudHM7IGhhc2hzaXplIDw8PSAxKQotCQljb250aW51
ZTsKLQloYXNoc2l6ZSA+Pj0gMTsKLQlpZiAoZmxhZ3MgJiBIQVNIX1dBSVRPSykKLQkJaGFzaHRi
bCA9IG1hbGxvYygodV9sb25nKWhhc2hzaXplICogc2l6ZW9mKCpoYXNodGJsKSwgdHlwZSwgTV9X
QUlUT0spOwotCWVsc2UgaWYgKGZsYWdzICYgSEFTSF9OT1dBSVQpCi0JCWhhc2h0YmwgPSBtYWxs
b2MoKHVfbG9uZyloYXNoc2l6ZSAqIHNpemVvZigqaGFzaHRibCksIHR5cGUsIE1fTk9XQUlUKTsK
LQllbHNlIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JCXBhbmljKCJmbGFnIGluY29ycmVjdCBpbiBo
YXNoaW5pdF9mbGFncyIpOwotI2Vsc2UKLQkJcmV0dXJuIChOVUxMKTsKLSNlbmRpZgotCX0KLQot
CS8qIG5vIG1lbW9yeT8gKi8KLQlpZiAoaGFzaHRibCA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwp
OwotCi0JZm9yIChpID0gMDsgaSA8IGhhc2hzaXplOyBpKyspCi0JCUxJU1RfSU5JVCgmaGFzaHRi
bFtpXSk7Ci0JKmhhc2htYXNrID0gaGFzaHNpemUgLSAxOwotCXJldHVybiAoaGFzaHRibCk7Ci19
Ci0jZW5kaWYKLQotI2Vsc2UgLyogIF9fVXNlcnNwYWNlX18gaWZkZWYgYWJvdmUgc2N0cF9zb3Jl
Y2VpdmUgKi8KLS8qCi0gKiBfX1VzZXJzcGFjZV9fIERlZmluaW5nIHNjdHBfaGFzaGluaXRfZmxh
Z3MoKSBhbmQgc2N0cF9oYXNoZGVzdHJveSgpIGZvciB1c2VybGFuZC4KLSAqIE5PVEU6IFdlIGRv
bid0IHdhbnQgbXVsdGlwbGUgZGVmaW5pdGlvbnMgaGVyZS4gU28gc2N0cF9oYXNoaW5pdF9mbGFn
cygpIGFib3ZlIGZvcgotICpfX0ZyZWVCU0RfXyBtdXN0IGJlIGV4Y2x1ZGVkLgotICoKLSAqLwot
Ci12b2lkICoKLXNjdHBfaGFzaGluaXRfZmxhZ3MoaW50IGVsZW1lbnRzLCBzdHJ1Y3QgbWFsbG9j
X3R5cGUgKnR5cGUsCi0gICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaGFzaG1hc2ssIGludCBm
bGFncykKLXsKLQlsb25nIGhhc2hzaXplOwotCUxJU1RfSEVBRChnZW5lcmljLCBnZW5lcmljKSAq
aGFzaHRibDsKLQlpbnQgaTsKLQotCWlmIChlbGVtZW50cyA8PSAwKSB7Ci0JCVNDVFBfUFJJTlRG
KCJoYXNoaW5pdDogYmFkIGVsZW1lbnRzPyIpOwotI2lmZGVmIElOVkFSSUFOVFMKLQkJcmV0dXJu
IChOVUxMKTsKLSNlbHNlCi0JCWVsZW1lbnRzID0gMTsKLSNlbmRpZgotCX0KLQlmb3IgKGhhc2hz
aXplID0gMTsgaGFzaHNpemUgPD0gZWxlbWVudHM7IGhhc2hzaXplIDw8PSAxKQotCQljb250aW51
ZTsKLQloYXNoc2l6ZSA+Pj0gMTsKLQkvKmNhbm5vdCB1c2UgTUFMTE9DIGhlcmUgYmVjYXVzZSBp
dCBoYXMgdG8gYmUgZGVjbGFyZWQgb3IgZGVmaW5lZAotCSAgdXNpbmcgTUFMTE9DX0RFQ0xBUkUg
b3IgTUFMTE9DX0RFRklORSBmaXJzdC4gKi8KLQlpZiAoZmxhZ3MgJiBIQVNIX1dBSVRPSykKLQkJ
aGFzaHRibCA9IG1hbGxvYygodV9sb25nKWhhc2hzaXplICogc2l6ZW9mKCpoYXNodGJsKSk7Ci0J
ZWxzZSBpZiAoZmxhZ3MgJiBIQVNIX05PV0FJVCkKLQkJaGFzaHRibCA9IG1hbGxvYygodV9sb25n
KWhhc2hzaXplICogc2l6ZW9mKCpoYXNodGJsKSk7Ci0JZWxzZSB7Ci0jaWZkZWYgSU5WQVJJQU5U
UwotCQlTQ1RQX1BSSU5URigiZmxhZyBpbmNvcnJlY3QgaW4gaGFzaGluaXRfZmxhZ3MuXG4iKTsK
LSNlbmRpZgotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQotCS8qIG5vIG1lbW9yeT8gKi8KLQlpZiAo
aGFzaHRibCA9PSBOVUxMKQotCQlyZXR1cm4gKE5VTEwpOwotCi0JZm9yIChpID0gMDsgaSA8IGhh
c2hzaXplOyBpKyspCi0JCUxJU1RfSU5JVCgmaGFzaHRibFtpXSk7Ci0JKmhhc2htYXNrID0gaGFz
aHNpemUgLSAxOwotCXJldHVybiAoaGFzaHRibCk7Ci19Ci0KLQotdm9pZAotc2N0cF9oYXNoZGVz
dHJveSh2b2lkICp2aGFzaHRibCwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFz
aG1hc2spCi17Ci0JTElTVF9IRUFEKGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsLCAqaHA7Ci0K
LQloYXNodGJsID0gdmhhc2h0Ymw7Ci0JZm9yIChocCA9IGhhc2h0Ymw7IGhwIDw9ICZoYXNodGJs
W2hhc2htYXNrXTsgaHArKykKLQkJaWYgKCFMSVNUX0VNUFRZKGhwKSkgewotCQkJU0NUUF9QUklO
VEYoImhhc2hkZXN0cm95OiBoYXNoIG5vdCBlbXB0eS5cbiIpOwotCQkJcmV0dXJuOwotCQl9Ci0J
RlJFRShoYXNodGJsLCB0eXBlKTsKLX0KLQotCi12b2lkCi1zY3RwX2hhc2hmcmVlZGVzdHJveSh2
b2lkICp2aGFzaHRibCwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCB1X2xvbmcgaGFzaG1hc2sp
Ci17Ci0JTElTVF9IRUFEKGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsLyosICpocCovOwotCS8q
Ci0JTElTVF9FTlRSWSh0eXBlKSAqc3RhcnQsICp0ZW1wOwotCSAqLwotCWhhc2h0YmwgPSB2aGFz
aHRibDsKLQkvKiBBcHBhcmVudGx5IHRlbXAgaXMgbm90IGR5bmFtaWNhbGx5IGFsbG9jYXRlZCwg
c28gYXR0ZW1wdHMgdG8KLQkgICBmcmVlIGl0IHJlc3VsdHMgaW4gZXJyb3IuCi0JZm9yIChocCA9
IGhhc2h0Ymw7IGhwIDw9ICZoYXNodGJsW2hhc2htYXNrXTsgaHArKykKLQkJaWYgKCFMSVNUX0VN
UFRZKGhwKSkgewotCQkJc3RhcnQgPSBMSVNUX0ZJUlNUKGhwKTsKLQkJCXdoaWxlIChzdGFydCAh
PSBOVUxMKSB7Ci0JCQkJdGVtcCA9IHN0YXJ0OwotCQkJCXN0YXJ0ID0gc3RhcnQtPmxlX25leHQ7
Ci0JCQkJU0NUUF9QUklOVEYoIiVzOiAlcCBcbiIsIF9fZnVuY19fLCAodm9pZCAqKXRlbXApOwot
CQkJCUZSRUUodGVtcCwgdHlwZSk7Ci0JCQl9Ci0JCX0KLQkgKi8KLQlGUkVFKGhhc2h0YmwsIHR5
cGUpOwotfQotCi0KLSNlbmRpZgotCi0KLWludAotc2N0cF9jb25uZWN0eF9oZWxwZXJfYWRkKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICphZGRyLAotCQkJIGludCB0b3Rh
ZGRyLCBpbnQgKmVycm9yKQotewotCWludCBhZGRlZCA9IDA7Ci0JaW50IGk7Ci0Jc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCXNpemVfdCBpbmNyID0gMDsK
LSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyX2luICpzaW47Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYKLQotCXNhID0gYWRkcjsK
LQlpbnAgPSBzdGNiLT5zY3RwX2VwOwotCSplcnJvciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IHRv
dGFkZHI7IGkrKykgewotCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
CWNhc2UgQUZfSU5FVDoKLQkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKLQkJCWlmICgoc2luLT5zaW5fYWRkci5z
X2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKLQkJCSAgICAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0g
SU5BRERSX0JST0FEQ0FTVCkgfHwKLQkJCSAgICBJTl9NVUxUSUNBU1QobnRvaGwoc2luLT5zaW5f
YWRkci5zX2FkZHIpKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3Nv
YyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzcpOwotCQkJCSplcnJvciA9IEVJTlZBTDsK
LQkJCQlnb3RvIG91dF9ub3c7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9hZGRfcmVtb3RlX2FkZHIoc3Rj
Yiwgc2EsIE5VTEwsIHN0Y2ItPmFzb2MucG9ydCwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX0RPTk9UX1NFVFNDT1BFLAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBf
QUREUl9JU19DT05GSVJNRUQpKSB7Ci0JCQkJLyogYXNzb2MgZ29uZSBubyB1bi1sb2NrICovCi0J
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVU
SUwsIEVOT0JVRlMpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBf
Tk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJ
TCArIFNDVFBfTE9DXzgpOwotCQkJCSplcnJvciA9IEVOT0JVRlM7Ci0JCQkJZ290byBvdXRfbm93
OwotCQkJfQotCQkJYWRkZWQrKzsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJ
Y2FzZSBBRl9JTkVUNjoKLQkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0J
CQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKLQkJCWlmIChJTjZfSVNfQUREUl9V
TlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSB8fAotCQkJICAgIElONl9JU19BRERSX01VTFRJ
Q0FTVCgmc2luNi0+c2luNl9hZGRyKSkgewotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJCSh2b2lkKXNjdHBf
ZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFNDVFBfTE9DXzkpOwotCQkJCSplcnJvciA9
IEVJTlZBTDsKLQkJCQlnb3RvIG91dF9ub3c7Ci0JCQl9Ci0JCQlpZiAoc2N0cF9hZGRfcmVtb3Rl
X2FkZHIoc3RjYiwgc2EsIE5VTEwsIHN0Y2ItPmFzb2MucG9ydCwKLQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLAotCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgIFNDVFBfQUREUl9JU19DT05GSVJNRUQpKSB7Ci0JCQkJLyogYXNzb2MgZ29uZSBubyB1bi1s
b2NrICovCi0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUFVUSUwsIEVOT0JVRlMpOwotCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0
Y2IsIFNDVFBfTk9STUFMX1BST0MsCi0JCQkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQVVRJTCArIFNDVFBfTE9DXzEwKTsKLQkJCQkqZXJyb3IgPSBFTk9CVUZTOwotCQkJCWdv
dG8gb3V0X25vdzsKLQkJCX0KLQkJCWFkZGVkKys7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJY2FzZSBBRl9DT05OOgotCQkJaW5jciA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCBz
YSwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAotCQkJICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfRE9OT1RfU0VUU0NPUEUsCi0JCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9BRERS
X0lTX0NPTkZJUk1FRCkpIHsKLQkJCQkvKiBhc3NvYyBnb25lIG5vIHVuLWxvY2sgKi8KLQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwg
RU5PQlVGUyk7Ci0JCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JN
QUxfUFJPQywKLQkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsg
U0NUUF9MT0NfMTEpOwotCQkJCSplcnJvciA9IEVOT0JVRlM7Ci0JCQkJZ290byBvdXRfbm93Owot
CQkJfQotCQkJYWRkZWQrKzsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWRlZmF1bHQ6Ci0JCQlicmVh
azsKLQkJfQotCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBpbmNyKTsK
LQl9Ci0gb3V0X25vdzoKLQlyZXR1cm4gKGFkZGVkKTsKLX0KLQotc3RydWN0IHNjdHBfdGNiICoK
LXNjdHBfY29ubmVjdHhfaGVscGVyX2ZpbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0
IHNvY2thZGRyICphZGRyLAotCQkJICB1bnNpZ25lZCBpbnQgKnRvdGFkZHIsCi0JCQkgIHVuc2ln
bmVkIGludCAqbnVtX3Y0LCB1bnNpZ25lZCBpbnQgKm51bV92NiwgaW50ICplcnJvciwKLQkJCSAg
dW5zaWduZWQgaW50IGxpbWl0LCBpbnQgKmJhZF9hZGRyKQotewotCXN0cnVjdCBzb2NrYWRkciAq
c2E7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgaW5jciwg
YXQsIGk7Ci0KLQlhdCA9IDA7Ci0Jc2EgPSBhZGRyOwotCSplcnJvciA9ICpudW1fdjYgPSAqbnVt
X3Y0ID0gMDsKLQkvKiBhY2NvdW50IGFuZCB2YWxpZGF0ZSBhZGRyZXNzZXMgKi8KLQlmb3IgKGkg
PSAwOyBpIDwgKnRvdGFkZHI7IGkrKykgewotCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNp
ZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJCWluY3IgPSAodW5zaWduZWQgaW50KXNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2EtPnNh
X2xlbiAhPSBpbmNyKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJ
KmJhZF9hZGRyID0gMTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotI2VuZGlmCi0JCQkoKm51
bV92NCkgKz0gMTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9J
TkVUNjoKLQkJewotCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKLQotCQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7Ci0JCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKLQkJCQkvKiBNdXN0IGJlIG5vbi1tYXBwZWQgZm9yIGNvbm5lY3R4
ICovCi0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQVVRJTCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJKmJhZF9hZGRyID0g
MTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotCQkJaW5jciA9ICh1bnNpZ25lZCBpbnQpc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2Et
PnNhX2xlbiAhPSBpbmNyKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0J
CQkJKmJhZF9hZGRyID0gMTsKLQkJCQlyZXR1cm4gKE5VTEwpOwotCQkJfQotI2VuZGlmCi0JCQko
Km51bV92NikgKz0gMTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCSp0
b3RhZGRyID0gaTsKLQkJCWluY3IgPSAwOwotCQkJLyogd2UgYXJlIGRvbmUgKi8KLQkJCWJyZWFr
OwotCQl9Ci0JCWlmIChpID09ICp0b3RhZGRyKSB7Ci0JCQlicmVhazsKLQkJfQotCQlTQ1RQX0lO
UF9JTkNSX1JFRihpbnApOwotCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigm
aW5wLCBzYSwgTlVMTCwgTlVMTCwgTlVMTCk7Ci0JCWlmIChzdGNiICE9IE5VTEwpIHsKLQkJCS8q
IEFscmVhZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLwotCQkJcmV0dXJu
IChzdGNiKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCX0KLQkJ
aWYgKChhdCArIGluY3IpID4gbGltaXQpIHsKLQkJCSp0b3RhZGRyID0gaTsKLQkJCWJyZWFrOwot
CQl9Ci0JCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIGluY3IpOwotCX0K
LQlyZXR1cm4gKChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMKTsKLX0KLQotLyoKLSAqIHNjdHBfYmlu
ZHgoQUREKSBmb3Igb25lIGFkZHJlc3MuCi0gKiBhc3N1bWVzIGFsbCBhcmd1bWVudHMgYXJlIHZh
bGlkL2NoZWNrZWQgYnkgY2FsbGVyLgotICovCi12b2lkCi1zY3RwX2JpbmR4X2FkZF9hZGRyZXNz
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAotCQkgICAgICAgc3Ry
dWN0IHNvY2thZGRyICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkgICAgICAgdWludDMy
X3QgdnJmX2lkLCBpbnQgKmVycm9yLCB2b2lkICpwKQotewotCXN0cnVjdCBzb2NrYWRkciAqYWRk
cl90b3VzZTsKLSNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCi0Jc3RydWN0IHNv
Y2thZGRyX2luIHNpbjsKLSNlbmRpZgotI2lmZGVmIFNDVFBfTVZSRgotCWludCBpLCBmbmQgPSAw
OwotI2VuZGlmCi0KLQkvKiBzZWUgaWYgd2UncmUgYm91bmQgYWxsIGFscmVhZHkhICovCi0JaWYg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7
Ci0JCSplcnJvciA9IEVJTlZBTDsKLQkJcmV0dXJuOwotCX0KLSNpZmRlZiBTQ1RQX01WUkYKLQkv
KiBJcyB0aGUgVlJGIG9uZSB3ZSBoYXZlICovCi0JZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3Zy
ZnM7IGkrKykgewotCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ldKSB7Ci0JCQlmbmQg
PSAxOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKCFmbmQpIHsKLQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJKmVy
cm9yID0gRUlOVkFMOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmCi0JYWRkcl90b3VzZSA9IHNhOwot
I2lmZGVmIElORVQ2Ci0JaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLSNpZmRlZiBJ
TkVUCi0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLSNlbmRpZgotI2lmZGVmIEhBVkVf
U0FfTEVOCi0JCWlmIChzYS0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkg
ewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUlOVkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotI2Vu
ZGlmCi0JCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09
IDApIHsKLQkJCS8qIGNhbiBvbmx5IGJpbmQgdjYgb24gUEZfSU5FVDYgc29ja2V0cyAqLwotCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwg
RUlOVkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotI2lmZGVmIElO
RVQKLQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcl90b3VzZTsKLQkJaWYgKElO
Nl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0JCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkJICAgIFNDVFBfSVBWNl9W
Nk9OTFkoaW5wKSkgewotCQkJCS8qIGNhbid0IGJpbmQgdjQtbWFwcGVkIG9uIFBGX0lORVQgc29j
a2V0cyAqLwotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCQkJKmVycm9yID0gRUlOVkFMOwotCQkJCXJldHVybjsK
LQkJCX0KLQkJCWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjYpOwotCQkJYWRkcl90b3VzZSA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luOwotCQl9Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUCi0JaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotI2lmZGVmIEhBVkVfU0FfTEVO
Ci0JCWlmIChzYS0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBF
SU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKLQkJICAg
IFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkgewotCQkJLyogY2FuJ3QgYmluZCB2NCBvbiBQRl9JTkVU
IHNvY2tldHMgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm47
Ci0JCX0KLQl9Ci0jZW5kaWYKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VU5CT1VORCkgewotI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dz
X18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCi0JCWlmIChwID09IE5VTEwpIHsKLQkJCS8q
IENhbid0IGdldCBwcm9jIGZvciBOZXQvT3BlbiBCU0QgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0JCQkqZXJy
b3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQkqZXJyb3IgPSBzY3RwX2lu
cGNiX2JpbmQoc28sIGFkZHJfdG91c2UsIE5VTEwsIHApOwotCQlyZXR1cm47Ci0JfQotCS8qCi0J
ICogTm8gbG9ja3MgcmVxdWlyZWQgaGVyZSBzaW5jZSBiaW5kIGFuZCBtZ210X2VwX3NhCi0JICog
YWxsIGRvIHRoZWlyIG93biBsb2NraW5nLiBJZiB3ZSBkbyBzb21ldGhpbmcgZm9yCi0JICogdGhl
IEZJWDogYmVsb3cgd2UgbWF5IG5lZWQgdG8gbG9jayBpbiB0aGF0IGNhc2UuCi0JICovCi0JaWYg
KGFzc29jX2lkID09IDApIHsKLQkJLyogYWRkIHRoZSBhZGRyZXNzICovCi0JCXN0cnVjdCBzY3Rw
X2lucGNiICpsZXA7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbiAqbHNpbiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gKilhZGRyX3RvdXNlOwotCi0JCS8qIHZhbGlkYXRlIHRoZSBpbmNvbWluZyBwb3J0ICov
Ci0JCWlmICgobHNpbi0+c2luX3BvcnQgIT0gMCkgJiYKLQkJICAgIChsc2luLT5zaW5fcG9ydCAh
PSBpbnAtPnNjdHBfbHBvcnQpKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwot
CQkJcmV0dXJuOwotCQl9IGVsc2UgewotCQkJLyogdXNlciBzcGVjaWZpZWQgMCBwb3J0LCBzZXQg
aXQgdG8gZXhpc3RpbmcgcG9ydCAqLwotCQkJbHNpbi0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBv
cnQ7Ci0JCX0KLQotCQlsZXAgPSBzY3RwX3BjYl9maW5kZXAoYWRkcl90b3VzZSwgMSwgMCwgdnJm
X2lkKTsKLQkJaWYgKGxlcCAhPSBOVUxMKSB7Ci0JCQkvKgotCQkJICogV2UgbXVzdCBkZWNyZW1l
bnQgdGhlIHJlZmNvdW50Ci0JCQkgKiBzaW5jZSB3ZSBoYXZlIHRoZSBlcCBhbHJlYWR5IGFuZAot
CQkJICogYXJlIGJpbmRpbmcuIE5vIHJlbW92ZSBnb2luZyBvbgotCQkJICogaGVyZS4KLQkJCSAq
LwotCQkJU0NUUF9JTlBfREVDUl9SRUYobGVwKTsKLQkJfQotCQlpZiAobGVwID09IGlucCkgewot
CQkJLyogYWxyZWFkeSBib3VuZCB0byBpdC4uIG9rICovCi0JCQlyZXR1cm47Ci0JCX0gZWxzZSBp
ZiAobGVwID09IE5VTEwpIHsKLQkJCSgoc3RydWN0IHNvY2thZGRyX2luICopYWRkcl90b3VzZSkt
PnNpbl9wb3J0ID0gMDsKLQkJCSplcnJvciA9IHNjdHBfYWRkcl9tZ210X2VwX3NhKGlucCwgYWRk
cl90b3VzZSwKLQkJCQkJCSAgICAgIFNDVFBfQUREX0lQX0FERFJFU1MsCi0JCQkJCQkgICAgICB2
cmZfaWQsIE5VTEwpOwotCQl9IGVsc2UgewotCQkJKmVycm9yID0gRUFERFJJTlVTRTsKLQkJfQot
CQlpZiAoKmVycm9yKQotCQkJcmV0dXJuOwotCX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEZJWDogZGVj
aWRlIHdoZXRoZXIgd2UgYWxsb3cgYXNzb2MgYmFzZWQKLQkJICogYmluZHgKLQkJICovCi0JfQot
fQotCi0vKgotICogc2N0cF9iaW5keChERUxFVEUpIGZvciBvbmUgYWRkcmVzcy4KLSAqIGFzc3Vt
ZXMgYWxsIGFyZ3VtZW50cyBhcmUgdmFsaWQvY2hlY2tlZCBieSBjYWxsZXIuCi0gKi8KLXZvaWQK
LXNjdHBfYmluZHhfZGVsZXRlX2FkZHJlc3Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLQkJCSAg
c3RydWN0IHNvY2thZGRyICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkJICB1aW50MzJf
dCB2cmZfaWQsIGludCAqZXJyb3IpCi17Ci0Jc3RydWN0IHNvY2thZGRyICphZGRyX3RvdXNlOwot
I2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c2luOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9NVlJGCi0JaW50IGksIGZuZCA9IDA7Ci0jZW5kaWYK
LQotCS8qIHNlZSBpZiB3ZSdyZSBib3VuZCBhbGwgYWxyZWFkeSEgKi8KLQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKLQkJKmVycm9y
ID0gRUlOVkFMOwotCQlyZXR1cm47Ci0JfQotI2lmZGVmIFNDVFBfTVZSRgotCS8qIElzIHRoZSBW
UkYgb25lIHdlIGhhdmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7
Ci0JCWlmICh2cmZfaWQgPT0gaW5wLT5tX3ZyZl9pZHNbaV0pIHsKLQkJCWZuZCA9IDE7Ci0JCQli
cmVhazsKLQkJfQotCX0KLQlpZiAoIWZuZCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwotCQkqZXJyb3IgPSBFSU5W
QUw7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQlhZGRyX3RvdXNlID0gc2E7Ci0jaWZkZWYgSU5F
VDYKLQlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgewotI2lmZGVmIElORVQKLQkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNjsKLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJ
aWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5W
QUwpOwotCQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJaWYg
KChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgewotCQkJ
LyogY2FuIG9ubHkgYmluZCB2NiBvbiBQRl9JTkVUNiBzb2NrZXRzICovCi0JCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwot
CQkJKmVycm9yID0gRUlOVkFMOwotCQkJcmV0dXJuOwotCQl9Ci0jaWZkZWYgSU5FVAotCQlzaW42
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3RvdXNlOwotCQlpZiAoSU42X0lTX0FERFJf
VjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCi0JCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnAp
KSB7Ci0JCQkJLyogY2FuJ3QgYmluZCBtYXBwZWQtdjQgb24gUEZfSU5FVCBzb2NrZXRzICovCi0J
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJ
TCwgRUlOVkFMKTsKLQkJCQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQkJ
aW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNik7Ci0JCQlhZGRyX3RvdXNlID0gKHN0cnVjdCBzb2Nr
YWRkciAqKSZzaW47Ci0JCX0KLSNlbmRpZgotCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQlpZiAo
c2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKHNh
LT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKLQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7Ci0J
CQkqZXJyb3IgPSBFSU5WQUw7Ci0JCQlyZXR1cm47Ci0JCX0KLSNlbmRpZgotCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgotCQkgICAgU0NUUF9JUFY2
X1Y2T05MWShpbnApKSB7Ci0JCQkvKiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lORVQgc29ja2V0cyAq
LwotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUlOVkFMKTsKLQkJCSplcnJvciA9IEVJTlZBTDsKLQkJCXJldHVybjsKLQkJfQotCX0K
LSNlbmRpZgotCS8qCi0JICogTm8gbG9jayByZXF1aXJlZCBtZ210X2VwX3NhIGRvZXMgaXRzIG93
biBsb2NraW5nLgotCSAqIElmIHRoZSBGSVg6IGJlbG93IGlzIGV2ZXIgY2hhbmdlZCB3ZSBtYXkg
bmVlZCB0bwotCSAqIGxvY2sgYmVmb3JlIGNhbGxpbmcgYXNzb2NpYXRpb24gbGV2ZWwgYmluZGlu
Zy4KLQkgKi8KLQlpZiAoYXNzb2NfaWQgPT0gMCkgewotCQkvKiBkZWxldGUgdGhlIGFkZHJlc3Mg
Ki8KLQkJKmVycm9yID0gc2N0cF9hZGRyX21nbXRfZXBfc2EoaW5wLCBhZGRyX3RvdXNlLAotCQkJ
CQkgICAgICBTQ1RQX0RFTF9JUF9BRERSRVNTLAotCQkJCQkgICAgICB2cmZfaWQsIE5VTEwpOwot
CX0gZWxzZSB7Ci0JCS8qCi0JCSAqIEZJWDogZGVjaWRlIHdoZXRoZXIgd2UgYWxsb3cgYXNzb2Mg
YmFzZWQKLQkJICogYmluZHgKLQkJICovCi0JfQotfQotCi0vKgotICogcmV0dXJucyB0aGUgdmFs
aWQgbG9jYWwgYWRkcmVzcyBjb3VudCBmb3IgYW4gYXNzb2MsIHRha2luZyBpbnRvIGFjY291bnQK
LSAqIGFsbCBzY29waW5nIHJ1bGVzCi0gKi8KLWludAotc2N0cF9sb2NhbF9hZGRyX2NvdW50KHN0
cnVjdCBzY3RwX3RjYiAqc3RjYikKLXsKLQlpbnQgbG9vcGJhY2tfc2NvcGU7Ci0jaWYgZGVmaW5l
ZChJTkVUKQotCWludCBpcHY0X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkIChJTkVUNikKLQlpbnQgbG9jYWxfc2NvcGUsIHNpdGVfc2NvcGUsIGlwdjZf
YWRkcl9sZWdhbDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlpbnQgY29u
bl9hZGRyX2xlZ2FsOwotI2VuZGlmCi0Jc3RydWN0IHNjdHBfdnJmICp2cmY7Ci0Jc3RydWN0IHNj
dHBfaWZuICpzY3RwX2lmbjsKLQlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOwotCWludCBjb3Vu
dCA9IDA7Ci0KLQkvKiBUdXJuIG9uIGFsbCB0aGUgYXBwcm9wcmlhdGUgc2NvcGVzICovCi0JbG9v
cGJhY2tfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlOwotI2lmIGRlZmlu
ZWQoSU5FVCkKLQlpcHY0X2xvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2Fs
X3Njb3BlOwotCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9hZGRyX2xl
Z2FsOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQlsb2NhbF9zY29wZSA9IHN0Y2ItPmFz
b2Muc2NvcGUubG9jYWxfc2NvcGU7Ci0Jc2l0ZV9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUuc2l0
ZV9zY29wZTsKLQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9s
ZWdhbDsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQljb25uX2FkZHJfbGVn
YWwgPSBzdGNiLT5hc29jLnNjb3BlLmNvbm5fYWRkcl9sZWdhbDsKLSNlbmRpZgotCVNDVFBfSVBJ
X0FERFJfUkxPQ0soKTsKLQl2cmYgPSBzY3RwX2ZpbmRfdnJmKHN0Y2ItPmFzb2MudnJmX2lkKTsK
LQlpZiAodnJmID09IE5VTEwpIHsKLQkJLyogbm8gdnJmLCBubyBhZGRyZXNzZXMgKi8KLQkJU0NU
UF9JUElfQUREUl9SVU5MT0NLKCk7Ci0JCXJldHVybiAoMCk7Ci0JfQotCi0JaWYgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgewotCQkvKgotCQkg
KiBib3VuZCBhbGwgY2FzZTogZ28gdGhyb3VnaCBhbGwgaWZucyBvbiB0aGUgdnJmCi0JCSAqLwot
CQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm4sICZ2cmYtPmlmbmxpc3QsIG5leHRfaWZuKSB7Ci0JCQlp
ZiAoKGxvb3BiYWNrX3Njb3BlID09IDApICYmCi0JCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Ao
c2N0cF9pZm4pKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlMSVNUX0ZPUkVBQ0goc2N0cF9p
ZmEsICZzY3RwX2lmbi0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKLQkJCQlpZiAoc2N0cF9pc19hZGRy
X3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpKQotCQkJCQljb250aW51ZTsKLQkJCQlzd2l0Y2gg
KHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQljYXNl
IEFGX0lORVQ6Ci0JCQkJCWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKLQkJCQkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOwotCi0JCQkJCQlzaW4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luOwotCQkJ
CQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKLQkJCQkJCQkvKiBza2lwIHVuc3Bl
Y2lmaWVkIGFkZHJzICovCi0JCQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKLQkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBfZXAtPmlw
X2lucC5pbnAuaW5wX2NyZWQsCi0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5f
YWRkcikgIT0gMCkgewotCQkJCQkJCWNvbnRpbnVlOwotCQkJCQkJfQotI2VuZGlmCi0JCQkJCQlp
ZiAoKGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAgICAoSU40X0lTUFJJVkFURV9B
RERSRVNTKCZzaW4tPnNpbl9hZGRyKSkpIHsKLQkJCQkJCQljb250aW51ZTsKLQkJCQkJCX0KLQkJ
CQkJCS8qIGNvdW50IHRoaXMgb25lICovCi0JCQkJCQljb3VudCsrOwotCQkJCQl9IGVsc2Ugewot
CQkJCQkJY29udGludWU7Ci0JCQkJCX0KLQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVU
NgotCQkJCWNhc2UgQUZfSU5FVDY6Ci0JCQkJCWlmIChpcHY2X2FkZHJfbGVnYWwpIHsKLQkJCQkJ
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0KLSNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURf
VjZfU0NPUEUpICYmICFkZWZpbmVkKFNDVFBfS0FNRSkKLQkJCQkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgbHNhNjsKLSNlbmRpZgotCQkJCQkJc2luNiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42Owot
CQkJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7Ci0J
CQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJCQkJ
CWlmIChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQs
Ci0JCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0J
CQkJCQkJY29udGludWU7Ci0JCQkJCQl9Ci0jZW5kaWYKLQkJCQkJCWlmIChJTjZfSVNfQUREUl9M
SU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0g
MCkKLQkJCQkJCQkJY29udGludWU7Ci0jaWYgZGVmaW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BF
KQotCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKLSNpZmRlZiBTQ1RQX0tB
TUUKLQkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkKLQkJCQkJCQkJCS8q
Ci0JCQkJCQkJCQkgKiBiYWQgbGluawotCQkJCQkJCQkJICogbG9jYWwKLQkJCQkJCQkJCSAqIGFk
ZHJlc3MKLQkJCQkJCQkJCSAqLwotCQkJCQkJCQkJY29udGludWU7Ci0jZWxzZQotCQkJCQkJCQls
c2E2ID0gKnNpbjY7Ci0JCQkJCQkJCWlmIChpbjZfcmVjb3ZlcnNjb3BlKCZsc2E2LAotCQkJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAmbHNhNi5zaW42X2FkZHIsCi0JCQkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgIE5VTEwpKQotCQkJCQkJCQkJLyoKLQkJCQkJCQkJCSAqIGJhZCBsaW5rCi0J
CQkJCQkJCQkgKiBsb2NhbAotCQkJCQkJCQkJICogYWRkcmVzcwotCQkJCQkJCQkJICovCi0JCQkJ
CQkJCQljb250aW51ZTsKLQkJCQkJCQkJc2luNiA9ICZsc2E2OwotI2VuZGlmIC8qIFNDVFBfS0FN
RSAqLwotCQkJCQkJCX0KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0JCQkJ
CQl9Ci0JCQkJCQlpZiAoKHNpdGVfc2NvcGUgPT0gMCkgJiYKLQkJCQkJCSAgICAoSU42X0lTX0FE
RFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgewotCQkJCQkJCWNvbnRpbnVlOwotCQkJ
CQkJfQotCQkJCQkJLyogY291bnQgdGhpcyBvbmUgKi8KLQkJCQkJCWNvdW50Kys7Ci0JCQkJCX0K
LQkJCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQkJY2Fz
ZSBBRl9DT05OOgotCQkJCQlpZiAoY29ubl9hZGRyX2xlZ2FsKSB7Ci0JCQkJCQljb3VudCsrOwot
CQkJCQl9Ci0JCQkJCWJyZWFrOwotI2VuZGlmCi0JCQkJZGVmYXVsdDoKLQkJCQkJLyogVFNOSCAq
LwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgewotCQkvKgotCQkgKiBz
dWJzZXQgYm91bmQgY2FzZQotCQkgKi8KLQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwotCQlM
SVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5zY3RwX2VwLT5zY3RwX2FkZHJfbGlzdCwKLQkJCSAg
ICAgc2N0cF9ueHRfYWRkcikgewotCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2Is
IGxhZGRyLT5pZmEpKSB7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQkvKiBjb3VudCB0aGlzIG9u
ZSAqLwotCQkJY291bnQrKzsKLQkJfQotCX0KLQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKLQly
ZXR1cm4gKGNvdW50KTsKLX0KLQotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCi0K
LXZvaWQKLXNjdHBfbG9nX3RyYWNlKHVpbnQzMl90IHN1YnN5cywgY29uc3QgY2hhciAqc3RyIFND
VFBfVU5VU0VELCB1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50MzJfdCBk
LCB1aW50MzJfdCBlLCB1aW50MzJfdCBmKQotewotCXVpbnQzMl90IHNhdmVpbmRleCwgbmV3aW5k
ZXg7Ci0KLSNpZiBkZWZpbmVkKF9fV2luZG93c19fKQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nKSA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JZG8gewotCQlzYXZlaW5kZXggPSBT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+aW5kZXg7Ci0JCWlmIChzYXZlaW5kZXggPj0gU0NU
UF9NQVhfTE9HR0lOR19TSVpFKSB7Ci0JCQluZXdpbmRleCA9IDE7Ci0JCX0gZWxzZSB7Ci0JCQlu
ZXdpbmRleCA9IHNhdmVpbmRleCArIDE7Ci0JCX0KLQl9IHdoaWxlIChhdG9taWNfY21wc2V0X2lu
dCgmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmluZGV4LCBzYXZlaW5kZXgsIG5ld2luZGV4
KSA9PSAwKTsKLQlpZiAoc2F2ZWluZGV4ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgewotCQlz
YXZlaW5kZXggPSAwOwotCX0KLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2
ZWluZGV4XS50aW1lc3RhbXAgPSBTQ1RQX0dFVF9DWUNMRUNPVU5UOwotCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnN1YnN5cyA9IHN1YnN5czsKLQlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMF0gPSBhOwotCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9IGI7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzJd
ID0gYzsKLQlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJh
bXNbM10gPSBkOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhd
LnBhcmFtc1s0XSA9IGU7Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVp
bmRleF0ucGFyYW1zWzVdID0gZjsKLSNlbHNlCi0JZG8gewotCQlzYXZlaW5kZXggPSBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nKS5pbmRleDsKLQkJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9M
T0dHSU5HX1NJWkUpIHsKLQkJCW5ld2luZGV4ID0gMTsKLQkJfSBlbHNlIHsKLQkJCW5ld2luZGV4
ID0gc2F2ZWluZGV4ICsgMTsKLQkJfQotCX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5pbmRleCwgc2F2ZWluZGV4LCBuZXdpbmRleCkgPT0gMCk7
Ci0JaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJWkUpIHsKLQkJc2F2ZWluZGV4
ID0gMDsKLQl9Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS50
aW1lc3RhbXAgPSBTQ1RQX0dFVF9DWUNMRUNPVU5UOwotCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLmVudHJ5W3NhdmVpbmRleF0uc3Vic3lzID0gc3Vic3lzOwotCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzBdID0gYTsKLQlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1sxXSA9IGI7Ci0JU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMl0gPSBjOwotCVNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzNdID0gZDsKLQlT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s0XSA9IGU7
Ci0JU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbNV0g
PSBmOwotI2VuZGlmCi19Ci0KLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDQ0Ci1zdGF0aWMgdm9pZAotc2N0cF9yZWN2X3VkcF90
dW5uZWxlZF9wYWNrZXQoc3RydWN0IG1idWYgKm0sIGludCBvZmYsIHN0cnVjdCBpbnBjYiAqaW5w
LAotICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EgU0NUUF9VTlVTRUQsIHZvaWQgKmN0eCBT
Q1RQX1VOVVNFRCkKLXsKLQlzdHJ1Y3QgaXAgKmlwaDsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBp
cDZfaGRyICppcDY7Ci0jZW5kaWYKLQlzdHJ1Y3QgbWJ1ZiAqc3AsICpsYXN0OwotCXN0cnVjdCB1
ZHBoZHIgKnVoZHI7Ci0JdWludDE2X3QgcG9ydDsKLQotCWlmICgobS0+bV9mbGFncyAmIE1fUEtU
SERSKSA9PSAwKSB7Ci0JCS8qIENhbid0IGhhbmRsZSBvbmUgdGhhdCBpcyBub3QgYSBwa3QgaGRy
ICovCi0JCWdvdG8gb3V0OwotCX0KLQkvKiBQdWxsIHRoZSBzcmMgcG9ydCAqLwotCWlwaCA9IG10
b2QobSwgc3RydWN0IGlwICopOwotCXVoZHIgPSAoc3RydWN0IHVkcGhkciAqKSgoY2FkZHJfdClp
cGggKyBvZmYpOwotCXBvcnQgPSB1aGRyLT51aF9zcG9ydDsKLQkvKiBTcGxpdCBvdXQgdGhlIG1i
dWYgY2hhaW4uIExlYXZlIHRoZQotCSAqIElQIGhlYWRlciBpbiBtLCBwbGFjZSB0aGUKLQkgKiBy
ZXN0IGluIHRoZSBzcC4KLQkgKi8KLQlzcCA9IG1fc3BsaXQobSwgb2ZmLCBNX05PV0FJVCk7Ci0J
aWYgKHNwID09IE5VTEwpIHsKLQkJLyogR2FrLCBkcm9wIHBhY2tldCwgd2UgY2FuJ3QgZG8gYSBz
cGxpdCAqLwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKHNwLT5tX3BrdGhkci5sZW4gPCBzaXplb2Yo
c3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSB7Ci0JCS8qIEdhaywgcGFj
a2V0IGNhbid0IGhhdmUgYW4gU0NUUCBoZWFkZXIgaW4gaXQgLSB0b28gc21hbGwgKi8KLQkJbV9m
cmVlbShzcCk7Ci0JCWdvdG8gb3V0OwotCX0KLQkvKiBOb3cgcHVsbCB1cCB0aGUgVURQIGhlYWRl
ciBhbmQgU0NUUCBoZWFkZXIgdG9nZXRoZXIgKi8KLQlzcCA9IG1fcHVsbHVwKHNwLCBzaXplb2Yo
c3RydWN0IHVkcGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQlpZiAoc3AgPT0gTlVM
TCkgewotCQkvKiBHYWsgcHVsbHVwIGZhaWxlZCAqLwotCQlnb3RvIG91dDsKLQl9Ci0JLyogVHJp
bSBvdXQgdGhlIFVEUCBoZWFkZXIgKi8KLQltX2FkaihzcCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
KTsKLQotCS8qIE5vdyByZWNvbnN0cnVjdCB0aGUgbWJ1ZiBjaGFpbiAqLwotCWZvciAobGFzdCA9
IG07IGxhc3QtPm1fbmV4dDsgbGFzdCA9IGxhc3QtPm1fbmV4dCk7Ci0JbGFzdC0+bV9uZXh0ID0g
c3A7Ci0JbS0+bV9wa3RoZHIubGVuICs9IHNwLT5tX3BrdGhkci5sZW47Ci0JLyoKLQkgKiBUaGUg
Q1NVTV9EQVRBX1ZBTElEIGZsYWdzIGluZGljYXRlcyB0aGF0IHRoZSBIVyBjaGVja2VkIHRoZQot
CSAqIFVEUCBjaGVja3N1bSBhbmQgaXQgd2FzIHZhbGlkLgotCSAqIFNpbmNlIENTVU1fREFUQV9W
QUxJRCA9PSBDU1VNX1NDVFBfVkFMSUQgdGhpcyB3b3VsZCBpbXBseSB0aGF0Ci0JICogdGhlIEhX
IGFsc28gdmVyaWZpZWQgdGhlIFNDVFAgY2hlY2tzdW0uIFRoZXJlZm9yZSwgY2xlYXIgdGhlIGJp
dC4KLQkgKi8KLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAwNDkKLQlTQ1RQREJHKFNDVFBf
REVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tl
dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAw
eCViLlxuIiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIGlmX25hbWUobS0+
bV9wa3RoZHIucmN2aWYpLAotCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCBD
U1VNX0JJVFMpOwotI2Vsc2UKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAg
ICAgICJzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tldCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVk
IHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0tPm1f
cGt0aGRyLmxlbiwKLQkgICAgICAgIGlmX25hbWUobS0+bV9wa3RoZHIucmN2aWYpLAotCSAgICAg
ICAgbS0+bV9wa3RoZHIuY3N1bV9mbGFncyk7Ci0jZW5kaWYKLQltLT5tX3BrdGhkci5jc3VtX2Zs
YWdzICY9IH5DU1VNX0RBVEFfVkFMSUQ7Ci0JaXBoID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7Ci0J
c3dpdGNoIChpcGgtPmlwX3YpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBJUFZFUlNJT046Ci0jaWYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gMTAwMDAwMAotCQlpcGgtPmlwX2xlbiA9IGh0b25zKG50b2hz
KGlwaC0+aXBfbGVuKSAtIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7Ci0jZWxzZQotCQlpcGgtPmlw
X2xlbiAtPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7Ci0jZW5kaWYKLQkJc2N0cF9pbnB1dF93aXRo
X3BvcnQobSwgb2ZmLCBwb3J0KTsKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNh
c2UgSVBWNl9WRVJTSU9OID4+IDQ6Ci0JCWlwNiA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7
Ci0JCWlwNi0+aXA2X3BsZW4gPSBodG9ucyhudG9ocyhpcDYtPmlwNl9wbGVuKSAtIHNpemVvZihz
dHJ1Y3QgdWRwaGRyKSk7Ci0JCXNjdHA2X2lucHV0X3dpdGhfcG9ydCgmbSwgJm9mZiwgcG9ydCk7
Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJZ290byBvdXQ7Ci0JCWJyZWFrOwotCX0K
LQlyZXR1cm47Ci0gb3V0OgotCW1fZnJlZW0obSk7Ci19Ci0jZW5kaWYKLQotI2lmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDExMDAwMDAKLSNpZmRlZiBJTkVUCi1zdGF0aWMgdm9pZAotc2N0cF9yZWN2
X2ljbXBfdHVubmVsZWRfcGFja2V0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQg
KnZpcCwgdm9pZCAqY3R4IFNDVFBfVU5VU0VEKQotewotCXN0cnVjdCBpcCAqb3V0ZXJfaXAsICpp
bm5lcl9pcDsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0Jc3RydWN0IGljbXAgKmljbXA7Ci0Jc3Ry
dWN0IHVkcGhkciAqdWRwOwotCXN0cnVjdCBzY3RwX2lucGNiICppbnA7Ci0Jc3RydWN0IHNjdHBf
dGNiICpzdGNiOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3Qgc2N0cF9pbml0X2No
dW5rICpjaDsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7Ci0JdWludDhfdCB0eXBlLCBj
b2RlOwotCi0JaW5uZXJfaXAgPSAoc3RydWN0IGlwICopdmlwOwotCWljbXAgPSAoc3RydWN0IGlj
bXAgKikoKGNhZGRyX3QpaW5uZXJfaXAgLQotCSAgICAoc2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNp
emVvZihzdHJ1Y3QgaXApKSk7Ci0Jb3V0ZXJfaXAgPSAoc3RydWN0IGlwICopKChjYWRkcl90KWlj
bXAgLSBzaXplb2Yoc3RydWN0IGlwKSk7Ci0JaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pIDwK
LQkgICAgc2l6ZW9mKHN0cnVjdCBpcCkgKyA4ICsgKGlubmVyX2lwLT5pcF9obCA8PCAyKSArIHNp
emVvZihzdHJ1Y3QgdWRwaGRyKSArIDgpIHsKLQkJcmV0dXJuOwotCX0KLQl1ZHAgPSAoc3RydWN0
IHVkcGhkciAqKSgoY2FkZHJfdClpbm5lcl9pcCArIChpbm5lcl9pcC0+aXBfaGwgPDwgMikpOwot
CXNoID0gKHN0cnVjdCBzY3RwaGRyICopKHVkcCArIDEpOwotCW1lbXNldCgmc3JjLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0Jc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lm
ZGVmIEhBVkVfU0lOX0xFTgotCXNyYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7Ci0jZW5kaWYKLQlzcmMuc2luX3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0Jc3JjLnNpbl9hZGRy
ID0gaW5uZXJfaXAtPmlwX3NyYzsKLQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOwotCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSNpZmRlZiBIQVZFX1NJTl9M
RU4KLQlkc3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0J
ZHN0LnNpbl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKLQlkc3Quc2luX2FkZHIgPSBpbm5lcl9pcC0+
aXBfZHN0OwotCS8qCi0JICogJ2RzdCcgaG9sZHMgdGhlIGRlc3Qgb2YgdGhlIHBhY2tldCB0aGF0
IGZhaWxlZCB0byBiZSBzZW50LgotCSAqICdzcmMnIGhvbGRzIG91ciBsb2NhbCBlbmRwb2ludCBh
ZGRyZXNzLiBUaHVzIHdlIHJldmVyc2UKLQkgKiB0aGUgZHN0IGFuZCB0aGUgc3JjIGluIHRoZSBs
b29rdXAuCi0JICovCi0JaW5wID0gTlVMTDsKLQluZXQgPSBOVUxMOwotCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9hZGRyX3NhKChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYKLQkgICAgKG5ldCAhPSBOVUxMKSAmJgotCSAgICAoaW5wICE9IE5V
TEwpKSB7Ci0JCS8qIENoZWNrIHRoZSBVRFAgcG9ydCBudW1iZXJzICovCi0JCWlmICgodWRwLT51
aF9kcG9ydCAhPSBuZXQtPnBvcnQpIHx8Ci0JCSAgICAodWRwLT51aF9zcG9ydCAhPSBodG9ucyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSkpKSB7Ci0JCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNh
dGlvbiB0YWcgKi8KLQkJaWYgKG50b2hsKHNoLT52X3RhZykgIT0gMCkgewotCQkJLyoKLQkJCSAq
IFRoaXMgbXVzdCBiZSB0aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkCi0JCQkgKiBmb3Igc2VuZGlu
ZyBvdXQgcGFja2V0cy4gV2UgZG9uJ3QKLQkJCSAqIGNvbnNpZGVyIHBhY2tldHMgcmVmbGVjdGlu
ZyB0aGUKLQkJCSAqIHZlcmlmaWNhdGlvbiB0YWcuCi0JCQkgKi8KLQkJCWlmIChudG9obChzaC0+
dl90YWcpICE9IHN0Y2ItPmFzb2MucGVlcl92dGFnKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCWlmIChudG9ocyhvdXRlcl9p
cC0+aXBfbGVuKSA+PQotCQkJICAgIHNpemVvZihzdHJ1Y3QgaXApICsKLQkJCSAgICA4ICsgKGlu
bmVyX2lwLT5pcF9obCA8PCAyKSArIDggKyAyMCkgewotCQkJCS8qCi0JCQkJICogSW4gdGhpcyBj
YXNlIHdlIGNhbiBjaGVjayBpZiB3ZQotCQkJCSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0
aGUKLQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KLQkJCQkgKi8KLQkJCQljaCA9IChzdHJ1
Y3Qgc2N0cF9pbml0X2NodW5rICopKHNoICsgMSk7Ci0JCQkJaWYgKChjaC0+Y2guY2h1bmtfdHlw
ZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHx8Ci0JCQkJICAgIChudG9obChjaC0+aW5pdC5pbml0aWF0
ZV90YWcpICE9IHN0Y2ItPmFzb2MubXlfdnRhZykpIHsKLQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOwotCQkJCQlyZXR1cm47Ci0JCQkJfQotCQkJfSBlbHNlIHsKLQkJCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQkJcmV0dXJuOwotCQkJfQotCQl9Ci0JCXR5cGUgPSBpY21wLT5pY21wX3R5
cGU7Ci0JCWNvZGUgPSBpY21wLT5pY21wX2NvZGU7Ci0JCWlmICgodHlwZSA9PSBJQ01QX1VOUkVB
Q0gpICYmCi0JCSAgICAoY29kZSA9PSBJQ01QX1VOUkVBQ0hfUE9SVCkpIHsKLQkJCWNvZGUgPSBJ
Q01QX1VOUkVBQ0hfUFJPVE9DT0w7Ci0JCX0KLQkJc2N0cF9ub3RpZnkoaW5wLCBzdGNiLCBuZXQs
IHR5cGUsIGNvZGUsCi0JCSAgICAgICAgICAgIG50b2hzKGlubmVyX2lwLT5pcF9sZW4pLAotCQkg
ICAgICAgICAgICAodWludDMyX3QpbnRvaHMoaWNtcC0+aWNtcF9uZXh0bXR1KSk7Ci0JfSBlbHNl
IHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAw
MAotCQkvKgotCQkgKiBYWFggbXVzdCBiZSBmaXhlZCBmb3IgNS54IGFuZCBoaWdoZXIsIGxlYXZl
IGZvcgotCQkgKiA0LngKLQkJICovCi0JCWlmIChQUkNfSVNfUkVESVJFQ1QoY21kKSAmJiAoaW5w
ICE9IE5VTEwpKSB7Ci0JCQlpbl9ydGNoYW5nZSgoc3RydWN0IGlucGNiICopaW5wLAotCQkJICAg
IGluZXRjdGxlcnJtYXBbY21kXSk7Ci0JCX0KLSNlbmRpZgotCQlpZiAoKHN0Y2IgPT0gTlVMTCkg
JiYgKGlucCAhPSBOVUxMKSkgewotCQkJLyogcmVkdWNlIHJlZi1jb3VudCAqLwotCQkJU0NUUF9J
TlBfV0xPQ0soaW5wKTsKLQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7Ci0JCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7Ci0JCX0KLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKLQkJfQotCX0KLQlyZXR1cm47Ci19Ci0jZW5kaWYKLQotI2lmZGVmIElORVQ2Ci1zdGF0aWMg
dm9pZAotc2N0cF9yZWN2X2ljbXA2X3R1bm5lbGVkX3BhY2tldChpbnQgY21kLCBzdHJ1Y3Qgc29j
a2FkZHIgKnNhLCB2b2lkICpkLCB2b2lkICpjdHggU0NUUF9VTlVTRUQpCi17Ci0Jc3RydWN0IGlw
NmN0bHBhcmFtICppcDZjcDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3Rw
X3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0Jc3RydWN0IHNjdHBoZHIgc2g7
Ci0Jc3RydWN0IHVkcGhkciB1ZHA7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKLQl1
aW50OF90IHR5cGUsIGNvZGU7Ci0KLQlpcDZjcCA9IChzdHJ1Y3QgaXA2Y3RscGFyYW0gKilkOwot
CS8qCi0JICogWFhYOiBXZSBhc3N1bWUgdGhhdCB3aGVuIElQVjYgaXMgbm9uIE5VTEwsIE0gYW5k
IE9GRiBhcmUKLQkgKiB2YWxpZC4KLQkgKi8KLQlpZiAoaXA2Y3AtPmlwNmNfbSA9PSBOVUxMKSB7
Ci0JCXJldHVybjsKLQl9Ci0JLyogQ2hlY2sgaWYgd2UgY2FuIHNhZmVseSBleGFtaW5lIHRoZSBw
b3J0cyBhbmQgdGhlCi0JICogdmVyaWZpY2F0aW9uIHRhZyBvZiB0aGUgU0NUUCBjb21tb24gaGVh
ZGVyLgotCSAqLwotCWlmIChpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5sZW4gPAotCSAgICBpcDZj
cC0+aXA2Y19vZmYgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikrIG9mZnNldG9mKHN0cnVjdCBzY3Rw
aGRyLCBjaGVja3N1bSkpIHsKLQkJcmV0dXJuOwotCX0KLQkvKiBDb3B5IG91dCB0aGUgVURQIGhl
YWRlci4gKi8KLQltZW1zZXQoJnVkcCwgMCwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKLQltX2Nv
cHlkYXRhKGlwNmNwLT5pcDZjX20sCi0JCSAgIGlwNmNwLT5pcDZjX29mZiwKLQkJICAgc2l6ZW9m
KHN0cnVjdCB1ZHBoZHIpLAotCQkgICAoY2FkZHJfdCkmdWRwKTsKLQkvKiBDb3B5IG91dCB0aGUg
cG9ydCBudW1iZXJzIGFuZCB0aGUgdmVyaWZpY2F0aW9uIHRhZy4gKi8KLQltZW1zZXQoJnNoLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCi0J
CSAgIGlwNmNwLT5pcDZjX29mZiArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSwKLQkJICAgc2l6ZW9m
KHVpbnQxNl90KSArIHNpemVvZih1aW50MTZfdCkgKyBzaXplb2YodWludDMyX3QpLAotCQkgICAo
Y2FkZHJfdCkmc2gpOwotCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
NikpOwotCXNyYy5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4K
LQlzcmMuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQlz
cmMuc2luNl9wb3J0ID0gc2guc3JjX3BvcnQ7Ci0Jc3JjLnNpbjZfYWRkciA9IGlwNmNwLT5pcDZj
X2lwNi0+aXA2X3NyYzsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCWlmIChpbjZfc2V0c2Nv
cGUoJnNyYy5zaW42X2FkZHIsIGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLnJjdmlmLCBOVUxMKSAh
PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0jZW5kaWYKLQltZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRl
ZiBIQVZFX1NJTjZfTEVOCi0JZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpOwotI2VuZGlmCi0JZHN0LnNpbjZfcG9ydCA9IHNoLmRlc3RfcG9ydDsKLQlkc3Quc2luNl9h
ZGRyID0gaXA2Y3AtPmlwNmNfaXA2LT5pcDZfZHN0OwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
Ci0JaWYgKGluNl9zZXRzY29wZSgmZHN0LnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNfbS0+bV9wa3Ro
ZHIucmN2aWYsIE5VTEwpICE9IDApIHsKLQkJcmV0dXJuOwotCX0KLSNlbmRpZgotCWlucCA9IE5V
TEw7Ci0JbmV0ID0gTlVMTDsKLQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fYWRkcl9zYSgo
c3RydWN0IHNvY2thZGRyICopJmRzdCwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmaW5wLCAmbmV0LCAxLCBTQ1RQX0RFRkFVTFRfVlJGSUQpOwotCWlmICgoc3Rj
YiAhPSBOVUxMKSAmJgotCSAgICAobmV0ICE9IE5VTEwpICYmCi0JICAgIChpbnAgIT0gTlVMTCkp
IHsKLQkJLyogQ2hlY2sgdGhlIFVEUCBwb3J0IG51bWJlcnMgKi8KLQkJaWYgKCh1ZHAudWhfZHBv
cnQgIT0gbmV0LT5wb3J0KSB8fAotCQkgICAgKHVkcC51aF9zcG9ydCAhPSBodG9ucyhTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSkpKSB7Ci0JCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0
YWcgKi8KLQkJaWYgKG50b2hsKHNoLnZfdGFnKSAhPSAwKSB7Ci0JCQkvKgotCQkJICogVGhpcyBt
dXN0IGJlIHRoZSB2ZXJpZmljYXRpb24gdGFnIHVzZWQgZm9yCi0JCQkgKiBzZW5kaW5nIG91dCBw
YWNrZXRzLiBXZSBkb24ndCBjb25zaWRlcgotCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2
ZXJpZmljYXRpb24gdGFnLgotCQkJICovCi0JCQlpZiAobnRvaGwoc2gudl90YWcpICE9IHN0Y2It
PmFzb2MucGVlcl92dGFnKSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVy
bjsKLQkJCX0KLQkJfSBlbHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQkJaWYgKGlw
NmNwLT5pcDZjX20tPm1fcGt0aGRyLmxlbiA+PQotCQkJICAgIGlwNmNwLT5pcDZjX29mZiArIHNp
emVvZihzdHJ1Y3QgdWRwaGRyKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NodW5raGRyKSArCi0JCQkgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2Yoc3RydWN0
IHNjdHBfaW5pdCwgYV9yd25kKSkgewotCQkJCS8qCi0JCQkJICogSW4gdGhpcyBjYXNlIHdlIGNh
biBjaGVjayBpZiB3ZQotCQkJCSAqIGdvdCBhbiBJTklUIGNodW5rIGFuZCBpZiB0aGUKLQkJCQkg
KiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KLQkJCQkgKi8KLQkJCQl1aW50MzJfdCBpbml0aWF0ZV90
YWc7Ci0JCQkJdWludDhfdCBjaHVua190eXBlOwotCi0JCQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2
Y19tLAotCQkJCQkgICBpcDZjcC0+aXA2Y19vZmYgKwotCQkJCQkgICBzaXplb2Yoc3RydWN0IHVk
cGhkcikgKwotCQkJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpLAotCQkJCQkgICBzaXplb2Yo
dWludDhfdCksCi0JCQkJCSAgIChjYWRkcl90KSZjaHVua190eXBlKTsKLQkJCQltX2NvcHlkYXRh
KGlwNmNwLT5pcDZjX20sCi0JCQkJCSAgIGlwNmNwLT5pcDZjX29mZiArCi0JCQkJCSAgIHNpemVv
ZihzdHJ1Y3QgdWRwaGRyKSArCi0JCQkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkJ
CQkgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLAotCQkJCQkgICBzaXplb2YodWludDMy
X3QpLAotCQkJCQkgICAoY2FkZHJfdCkmaW5pdGlhdGVfdGFnKTsKLQkJCQlpZiAoKGNodW5rX3R5
cGUgIT0gU0NUUF9JTklUSUFUSU9OKSB8fAotCQkJCSAgICAobnRvaGwoaW5pdGlhdGVfdGFnKSAh
PSBzdGNiLT5hc29jLm15X3Z0YWcpKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJ
CQkJcmV0dXJuOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OwotCQkJCXJldHVybjsKLQkJCX0KLSNlbHNlCi0JCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0J
CQlyZXR1cm47Ci0jZW5kaWYKLQkJfQotCQl0eXBlID0gaXA2Y3AtPmlwNmNfaWNtcDYtPmljbXA2
X3R5cGU7Ci0JCWNvZGUgPSBpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfY29kZTsKLQkJaWYgKCh0
eXBlID09IElDTVA2X0RTVF9VTlJFQUNIKSAmJgotCQkgICAgKGNvZGUgPT0gSUNNUDZfRFNUX1VO
UkVBQ0hfTk9QT1JUKSkgewotCQkJdHlwZSA9IElDTVA2X1BBUkFNX1BST0I7Ci0JCQljb2RlID0g
SUNNUDZfUEFSQU1QUk9CX05FWFRIRUFERVI7Ci0JCX0KLQkJc2N0cDZfbm90aWZ5KGlucCwgc3Rj
YiwgbmV0LCB0eXBlLCBjb2RlLAotCQkJICAgICBudG9obChpcDZjcC0+aXA2Y19pY21wNi0+aWNt
cDZfbXR1KSk7Ci0JfSBlbHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDUwMDAwMAotCQlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkgJiYgKGlucCAh
PSBOVUxMKSkgewotCQkJaW42X3J0Y2hhbmdlKChzdHJ1Y3QgaW42cGNiICopaW5wLAotCQkJICAg
IGluZXQ2Y3RsZXJybWFwW2NtZF0pOwotCQl9Ci0jZW5kaWYKLQkJaWYgKChzdGNiID09IE5VTEwp
ICYmIChpbnAgIT0gTlVMTCkpIHsKLQkJCS8qIHJlZHVjZSBpbnAncyByZWYtY291bnQgKi8KLQkJ
CVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOwotCQkJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOwotCQl9Ci0JCWlmIChzdGNiKSB7Ci0JCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7Ci0JCX0KLQl9Ci19Ci0jZW5kaWYKLSNlbmRpZgotCi12b2lkCi1zY3RwX292ZXJf
dWRwX3N0b3Aodm9pZCkKLXsKLQkvKgotCSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBzeXNjdGwg
Y2FsbGVyIGhvbGRzIHNjdHBfc3lzY3RsX2luZm9fbG9jaygpIGZvciB3cml0dGluZyEKLQkgKi8K
LSNpZmRlZiBJTkVUCi0JaWYgKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgIT0gTlVM
TCkgewotCQlzb2Nsb3NlKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkpOwotCQlTQ1RQ
X0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpID0gTlVMTDsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJ
TkVUNgotCWlmIChTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKLQkJ
c29jbG9zZShTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpKTsKLQkJU0NUUF9CQVNFX0lO
Rk8odWRwNl90dW5fc29ja2V0KSA9IE5VTEw7Ci0JfQotI2VuZGlmCi19Ci0KLWludAotc2N0cF9v
dmVyX3VkcF9zdGFydCh2b2lkKQotewotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA0NAot
CXVpbnQxNl90IHBvcnQ7Ci0JaW50IHJldDsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRy
X2luIHNpbjsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzaW42
OwotI2VuZGlmCi0JLyoKLQkgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgc3lzY3RsIGNhbGxlciBo
b2xkcyBzY3RwX3N5c2N0bF9pbmZvX2xvY2soKSBmb3Igd3JpdHRpbmchCi0JICovCi0JcG9ydCA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpOwotCWlmIChudG9ocyhw
b3J0KSA9PSAwKSB7Ci0JCS8qIE11c3QgaGF2ZSBhIHBvcnQgc2V0ICovCi0JCXJldHVybiAoRUlO
VkFMKTsKLQl9Ci0jaWZkZWYgSU5FVAotCWlmIChTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2Nr
ZXQpICE9IE5VTEwpIHsKLQkJLyogQWxyZWFkeSBydW5uaW5nIC0tIG11c3Qgc3RvcCBmaXJzdCAq
LwotCQlyZXR1cm4gKEVBTFJFQURZKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWlmIChT
Q1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpICE9IE5VTEwpIHsKLQkJLyogQWxyZWFkeSBy
dW5uaW5nIC0tIG11c3Qgc3RvcCBmaXJzdCAqLwotCQlyZXR1cm4gKEVBTFJFQURZKTsKLQl9Ci0j
ZW5kaWYKLSNpZmRlZiBJTkVUCi0JaWYgKChyZXQgPSBzb2NyZWF0ZShQRl9JTkVULCAmU0NUUF9C
QVNFX0lORk8odWRwNF90dW5fc29ja2V0KSwKLQkgICAgICAgICAgICAgICAgICAgIFNPQ0tfREdS
QU0sIElQUFJPVE9fVURQLAotCSAgICAgICAgICAgICAgICAgICAgY3VydGhyZWFkLT50ZF91Y3Jl
ZCwgY3VydGhyZWFkKSkpIHsKLQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCXJldHVybiAocmV0
KTsKLQl9Ci0JLyogQ2FsbCB0aGUgc3BlY2lhbCBVRFAgaG9vay4gKi8KLQlpZiAoKHJldCA9IHVk
cF9zZXRfa2VybmVsX3R1bm5lbGluZyhTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1bl9zb2NrZXQpLAot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcmVjdl91ZHBfdHVubmVs
ZWRfcGFja2V0LAotI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMDAKLQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3ZfaWNtcF90dW5uZWxlZF9wYWNrZXQs
Ci0jZW5kaWYKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKSkpIHsK
LQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0JLyogT2ssIHdl
IGhhdmUgYSBzb2NrZXQsIGJpbmQgaXQgdG8gdGhlIHBvcnQuICovCi0JbWVtc2V0KCZzaW4sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOwotCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlzaW4uc2luX3Bv
cnQgPSBodG9ucyhwb3J0KTsKLQlpZiAoKHJldCA9IHNvYmluZChTQ1RQX0JBU0VfSU5GTyh1ZHA0
X3R1bl9zb2NrZXQpLAotCSAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2lu
LCBjdXJ0aHJlYWQpKSkgewotCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKLQkJcmV0dXJuIChyZXQp
OwotCX0KLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JaWYgKChyZXQgPSBzb2NyZWF0ZShQRl9JTkVU
NiwgJlNDVFBfQkFTRV9JTkZPKHVkcDZfdHVuX3NvY2tldCksCi0JICAgICAgICAgICAgICAgICAg
ICBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwKLQkgICAgICAgICAgICAgICAgICAgIGN1cnRocmVh
ZC0+dGRfdWNyZWQsIGN1cnRocmVhZCkpKSB7Ci0JCXNjdHBfb3Zlcl91ZHBfc3RvcCgpOwotCQly
ZXR1cm4gKHJldCk7Ci0JfQotCS8qIENhbGwgdGhlIHNwZWNpYWwgVURQIGhvb2suICovCi0JaWYg
KChyZXQgPSB1ZHBfc2V0X2tlcm5lbF90dW5uZWxpbmcoU0NUUF9CQVNFX0lORk8odWRwNl90dW5f
c29ja2V0KSwKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3Zf
dWRwX3R1bm5lbGVkX3BhY2tldCwKLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDAwCi0J
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9yZWN2X2ljbXA2X3R1bm5l
bGVkX3BhY2tldCwKLSNlbmRpZgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IE5VTEwpKSkgewotCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKLQkJcmV0dXJuIChyZXQpOwotCX0K
LQkvKiBPaywgd2UgaGF2ZSBhIHNvY2tldCwgYmluZCBpdCB0byB0aGUgcG9ydC4gKi8KLQltZW1z
ZXQoJnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0Jc2luNi5zaW42X2xl
biA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQlzaW42LnNpbjZfZmFtaWx5ID0gQUZf
SU5FVDY7Ci0Jc2luNi5zaW42X3BvcnQgPSBodG9ucyhwb3J0KTsKLQlpZiAoKHJldCA9IHNvYmlu
ZChTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpLAotCSAgICAgICAgICAgICAgICAgIChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgY3VydGhyZWFkKSkpIHsKLQkJc2N0cF9vdmVyX3VkcF9z
dG9wKCk7Ci0JCXJldHVybiAocmV0KTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gKDApOwotI2Vsc2UK
LQlyZXR1cm4gKEVOT1RTVVApOwotI2VuZGlmCi19Ci0jZW5kaWYKLQotLyoKLSAqIHNjdHBfbWlu
X210dSAoKXJldHVybnMgdGhlIG1pbmltdW0gb2YgYWxsIG5vbi16ZXJvIGFyZ3VtZW50cy4KLSAq
IElmIGFsbCBhcmd1bWVudHMgYXJlIHplcm8sIHplcm8gaXMgcmV0dXJuZWQuCi0gKi8KLXVpbnQz
Ml90Ci1zY3RwX21pbl9tdHUodWludDMyX3QgbXR1MSwgdWludDMyX3QgbXR1MiwgdWludDMyX3Qg
bXR1MykKLXsKLQlpZiAobXR1MSA+IDApIHsKLQkJaWYgKG10dTIgPiAwKSB7Ci0JCQlpZiAobXR1
MyA+IDApIHsKLQkJCQlyZXR1cm4gKG1pbihtdHUxLCBtaW4obXR1MiwgbXR1MykpKTsKLQkJCX0g
ZWxzZSB7Ci0JCQkJcmV0dXJuIChtaW4obXR1MSwgbXR1MikpOwotCQkJfQotCQl9IGVsc2Ugewot
CQkJaWYgKG10dTMgPiAwKSB7Ci0JCQkJcmV0dXJuIChtaW4obXR1MSwgbXR1MykpOwotCQkJfSBl
bHNlIHsKLQkJCQlyZXR1cm4gKG10dTEpOwotCQkJfQotCQl9Ci0JfSBlbHNlIHsKLQkJaWYgKG10
dTIgPiAwKSB7Ci0JCQlpZiAobXR1MyA+IDApIHsKLQkJCQlyZXR1cm4gKG1pbihtdHUyLCBtdHUz
KSk7Ci0JCQl9IGVsc2UgewotCQkJCXJldHVybiAobXR1Mik7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0J
CQlyZXR1cm4gKG10dTMpOwotCQl9Ci0JfQotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LXZvaWQKLXNjdHBfaGNfc2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqYWRkciwgdWludDE2
X3QgZmlibnVtLCB1aW50MzJfdCBtdHUpCi17Ci0Jc3RydWN0IGluX2Nvbm5pbmZvIGluYzsKLQot
CW1lbXNldCgmaW5jLCAwLCBzaXplb2Yoc3RydWN0IGluX2Nvbm5pbmZvKSk7Ci0JaW5jLmluY19m
aWJudW0gPSBmaWJudW07Ci0Jc3dpdGNoIChhZGRyLT5zYS5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJ
TkVUCi0JY2FzZSBBRl9JTkVUOgotCQlpbmMuaW5jX2ZhZGRyID0gYWRkci0+c2luLnNpbl9hZGRy
OwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVUNjoKLQkJaW5j
LmluY19mbGFncyB8PSBJTkNfSVNJUFY2OwotCQlpbmMuaW5jNl9mYWRkciA9IGFkZHItPnNpbjYu
c2luNl9hZGRyOwotCQlicmVhazsKLSNlbmRpZgotCWRlZmF1bHQ6Ci0JCXJldHVybjsKLQl9Ci0J
dGNwX2hjX3VwZGF0ZW10dSgmaW5jLCAodV9sb25nKW10dSk7Ci19Ci0KLXVpbnQzMl90Ci1zY3Rw
X2hjX2dldF9tdHUodW5pb24gc2N0cF9zb2Nrc3RvcmUgKmFkZHIsIHVpbnQxNl90IGZpYm51bSkK
LXsKLQlzdHJ1Y3QgaW5fY29ubmluZm8gaW5jOwotCi0JbWVtc2V0KCZpbmMsIDAsIHNpemVvZihz
dHJ1Y3QgaW5fY29ubmluZm8pKTsKLQlpbmMuaW5jX2ZpYm51bSA9IGZpYm51bTsKLQlzd2l0Y2gg
KGFkZHItPnNhLnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWlu
Yy5pbmNfZmFkZHIgPSBhZGRyLT5zaW4uc2luX2FkZHI7Ci0JCWJyZWFrOwotI2VuZGlmCi0jaWZk
ZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCQlpbmMuaW5jX2ZsYWdzIHw9IElOQ19JU0lQVjY7
Ci0JCWluYy5pbmM2X2ZhZGRyID0gYWRkci0+c2luNi5zaW42X2FkZHI7Ci0JCWJyZWFrOwotI2Vu
ZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuICgwKTsKLQl9Ci0JcmV0dXJuICgodWludDMyX3QpdGNw
X2hjX2dldG10dSgmaW5jKSk7Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cHV0aWwuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggNTlkZDM2NDQyZjU0NjUxOTZlMWViYmUxY2M1ZDVlNTE0ZGU0Y2Q4
MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHB1dGlsLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjggKzAsMCBAQAotLyot
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwg
U3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0g
KgotICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
Ci0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUKLSAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRl
ZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNE
OiBoZWFkL3N5cy9uZXRpbmV0L3NjdHB1dGlsLmggMzIwMjYwIDIwMTctMDYtMjMgMDg6MzQ6MDFa
IHR1ZXhlbiAkIik7Ci0jZW5kaWYKLQotI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1VUSUxfSF8KLSNk
ZWZpbmUgX05FVElORVRfU0NUUF9VVElMX0hfCi0KLSNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKLQotI2RlZmluZSBTQ1RQX1JFQURfTE9DS19IRUxEIDEKLSNk
ZWZpbmUgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQgMAotCi0jaWZkZWYgU0NUUF9BU09DTE9HX09G
X1RTTlMKLXZvaWQgc2N0cF9wcmludF9vdXRfdHJhY2tfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yik7Ci0jZW5kaWYKLQotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi1zdHJ1Y3QgbWJ1ZiAqc2N0
cF9tX2ZyZWUoc3RydWN0IG1idWYgKm0pOwotdm9pZCBzY3RwX21fZnJlZW0oc3RydWN0IG1idWYg
Km0pOwotI2Vsc2UKLSNkZWZpbmUgc2N0cF9tX2ZyZWUgbV9mcmVlCi0jZGVmaW5lIHNjdHBfbV9m
cmVlbSBtX2ZyZWVtCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYp
IHx8IGRlZmluZWQoX19BUFBMRV9fKQotdm9pZAotc2N0cF9sb2dfdHJhY2UodWludDMyX3QgZnIs
IGNvbnN0IGNoYXIgKnN0ciBTQ1RQX1VOVVNFRCwgdWludDMyX3QgYSwgdWludDMyX3QgYiwgdWlu
dDMyX3QgYywgdWludDMyX3QgZCwgdWludDMyX3QgZSwgdWludDMyX3QgZik7Ci0jZW5kaWYKLQot
I2RlZmluZSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpICgoc2N0cF9hc3NvY190KXN0Y2ItPmFzb2Mu
YXNzb2NfaWQpCi0KLQotLyoKLSAqIEZ1bmN0aW9uIHByb3RvdHlwZXMKLSAqLwotaW50MzJfdAot
c2N0cF9tYXBfYXNzb2Nfc3RhdGUoaW50KTsKLQotdWludDMyX3QKLXNjdHBfZ2V0X2lmYV9oYXNo
X3ZhbChzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOwotCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0cF9m
aW5kX2lmYV9pbl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIsIGludCBob2xkX2xvY2spOwotCi1zdHJ1Y3Qgc2N0cF9pZmEgKgotc2N0cF9maW5kX2lmYV9i
eV9hZGRyKHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgdnJmX2lkLCBpbnQgaG9sZHNf
bG9jayk7Ci0KLXVpbnQzMl90IHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKHN0cnVjdCBzY3RwX3Bj
YiAqKTsKLQotdWludDMyX3Qgc2N0cF9zZWxlY3RfYV90YWcoc3RydWN0IHNjdHBfaW5wY2IgKiwg
dWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0LCBpbnQpOwotCi1pbnQgc2N0cF9pbml0X2Fz
b2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosIHVpbnQzMl90LCB1aW50
MzJfdCwgdWludDE2X3QpOwotCi12b2lkIHNjdHBfZmlsbF9yYW5kb21fc3RvcmUoc3RydWN0IHNj
dHBfcGNiICopOwotCi12b2lkCi1zY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDE2X3QgbnVtYmVyaW4sCi0JCQkgICAgIHVpbnQxNl90IG51bWJl
cm91dCwgaW50IGZsYWcpOwotdm9pZAotc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X3RzbihzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IHNlbmRpbmdfdHNuLCB1aW50MzJfdCByZWN2X3Rz
biwgaW50IGZsYWcpOwotCi12b2lkCi1zY3RwX3RpbWVyX3N0YXJ0KGludCwgc3RydWN0IHNjdHBf
aW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKLQot
dm9pZAotc2N0cF90aW1lcl9zdG9wKGludCwgc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNj
dHBfdGNiICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqLCB1aW50MzJfdCk7Ci0KLWludAotc2N0
cF9keW5hbWljX3NldF9wcmltYXJ5KHN0cnVjdCBzb2NrYWRkciAqc2EsIHVpbnQzMl90IHZyZl9p
ZCk7Ci0KLXZvaWQKLXNjdHBfbXR1X3NpemVfcmVzZXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdWludDMyX3QpOwotCi12b2lkCi1zY3RwX3dha2V1cF90
aGVfcmVhZF9zb2NrZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAotICAgIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSk7Ci0K
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi12b2lkIHNjdHBfaW52b2tlX3JlY3ZfY2FsbGJh
Y2soc3RydWN0IHNjdHBfaW5wY2IgKiwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqLAotICAgIGludCk7Ci0KLSNlbmRpZgotdm9pZAotc2N0
cF9hZGRfdG9fcmVhZHEoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCi0gICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCi0gICAg
c3RydWN0IHNvY2tidWYgKnNiLAotICAgIGludCBlbmQsCi0gICAgaW50IGlucHJlYWRfbG9ja2Vk
LAotICAgIGludCBzb19sb2NrZWQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSAgICApOwot
Ci12b2lkIHNjdHBfaXRlcmF0b3Jfd29ya2VyKHZvaWQpOwotCi11aW50MzJfdCBzY3RwX2dldF9w
cmV2X210dSh1aW50MzJfdCk7Ci11aW50MzJfdCBzY3RwX2dldF9uZXh0X210dSh1aW50MzJfdCk7
Ci0KLXZvaWQKLXNjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKik7Ci0KLXVpbnQzMl90Ci1zY3Rw
X2NhbGN1bGF0ZV9ydG8oc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICosCi0gICAgc3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQsIGludCk7
Ci0KLXVpbnQzMl90IHNjdHBfY2FsY3VsYXRlX2xlbihzdHJ1Y3QgbWJ1ZiAqKTsKLQotY2FkZHJf
dCBzY3RwX21fZ2V0cHRyKHN0cnVjdCBtYnVmICosIGludCwgaW50LCB1aW50OF90ICopOwotCi1z
dHJ1Y3Qgc2N0cF9wYXJhbWhkciAqCi1zY3RwX2dldF9uZXh0X3BhcmFtKHN0cnVjdCBtYnVmICos
IGludCwKLSAgICBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqLCBpbnQpOwotCi1zdHJ1Y3QgbWJ1ZiAq
Ci1zY3RwX2FkZF9wYWRfdG9tYnVmKHN0cnVjdCBtYnVmICosIGludCk7Ci0KLXN0cnVjdCBtYnVm
ICoKLXNjdHBfcGFkX2xhc3RtYnVmKHN0cnVjdCBtYnVmICosIGludCwgc3RydWN0IG1idWYgKik7
Ci0KLXZvaWQgc2N0cF91bHBfbm90aWZ5KHVpbnQzMl90LCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWlu
dDMyX3QsIHZvaWQgKiwgaW50Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2VuZGlmCi0gICAgKTsKLQot
dm9pZAotc2N0cF9wdWxsX29mZl9jb250cm9sX3RvX25ld19pbnAoc3RydWN0IHNjdHBfaW5wY2Ig
Km9sZF9pbnAsCi0gICAgc3RydWN0IHNjdHBfaW5wY2IgKm5ld19pbnAsCi0gICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBpbnQgd2FpdGZsYWdzKTsKLQotCi12b2lkIHNjdHBfc3RvcF90aW1lcnNf
Zm9yX3NodXRkb3duKHN0cnVjdCBzY3RwX3RjYiAqKTsKLQotdm9pZCBzY3RwX3JlcG9ydF9hbGxf
b3V0Ym91bmQoc3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90LCBpbnQsIGludAotI2lmICFkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NU
UF9VTlVTRUQKLSNlbmRpZgotICAgICk7Ci0KLWludCBzY3RwX2V4cGFuZF9tYXBwaW5nX2FycmF5
KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVpbnQzMl90KTsKLQotdm9pZCBzY3RwX2Fib3J0
X25vdGlmaWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDhfdCwgdWludDE2X3QsCi0JCQkg
ICAgIHN0cnVjdCBzY3RwX2Fib3J0X2NodW5rICosIGludAotI2lmICFkZWZpbmVkKF9fQVBQTEVf
XykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0gICAgU0NUUF9VTlVTRUQKLSNl
bmRpZgotICAgICk7Ci0KLS8qIFdlIGFib3J0IHJlc3BvbmRpbmcgdG8gYW4gSVAgcGFja2V0IGZv
ciBzb21lIHJlYXNvbiAqLwotdm9pZAotc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYgKiwKLSAgICAgICAgICAg
ICAgICAgICAgICAgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICosCi0g
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBtYnVmICosCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCwg
dWludDMyX3QsCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QsIHVpbnQx
Nl90KTsKLQotCi0vKiBXZSBjaG9vc2UgdG8gYWJvcnQgdmlhIHVzZXIgaW5wdXQgKi8KLXZvaWQK
LXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNj
dHBfdGNiICosCi0gICAgc3RydWN0IG1idWYgKiwgaW50Ci0jaWYgIWRlZmluZWQoX19BUFBMRV9f
KSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLSAgICBTQ1RQX1VOVVNFRAotI2Vu
ZGlmCi0pOwotCi12b2lkIHNjdHBfaGFuZGxlX29vdGIoc3RydWN0IG1idWYgKiwgaW50LCBpbnQs
Ci0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRk
ciAqLAotICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwaGRyICosIHN0cnVjdCBzY3Rw
X2lucGNiICosCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKiwKLSNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQotICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90
LCB1aW50MTZfdCwKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50
MTZfdCk7Ci0KLWludCBzY3RwX2Nvbm5lY3R4X2hlbHBlcl9hZGQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgaW50IHRvdGFkZHIsIGludCAqZXJyb3Ip
OwotCi1zdHJ1Y3Qgc2N0cF90Y2IgKgotc2N0cF9jb25uZWN0eF9oZWxwZXJfZmluZChzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgdW5zaWduZWQgaW50
ICp0b3RhZGRyLCB1bnNpZ25lZCBpbnQgKm51bV92NCwgdW5zaWduZWQgaW50ICpudW1fdjYsCi0g
ICAgaW50ICplcnJvciwgdW5zaWduZWQgaW50IGxpbWl0LCBpbnQgKmJhZF9hZGRyKTsKLQotaW50
IHNjdHBfaXNfdGhlcmVfYW5fYWJvcnRfaGVyZShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHVpbnQzMl90
ICopOwotI2lmZGVmIElORVQ2Ci11aW50MzJfdCBzY3RwX2lzX3NhbWVfc2NvcGUoc3RydWN0IHNv
Y2thZGRyX2luNiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotCi0jaWYgZGVmaW5lZChTQ1RQ
X0VNQkVEREVEX1Y2X1NDT1BFKQotc3RydWN0IHNvY2thZGRyX2luNiAqCi1zY3RwX3JlY292ZXJf
c2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotCi0j
aWZkZWYgU0NUUF9LQU1FCi0jZGVmaW5lIHNjdHBfcmVjb3Zlcl9zY29wZV9tYWMoYWRkciwgc3Rv
cmUpIGRvIHsgXAotCSBpZiAoKGFkZHItPnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSAmJiBcCi0J
ICAgICAoSU42X0lTX1NDT1BFX0xJTktMT0NBTCgmYWRkci0+c2luNl9hZGRyKSkpIHsgXAotCQkq
c3RvcmUgPSAqYWRkcjsgXAotCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7IFwKLQkJ
CWlmICghc2E2X3JlY292ZXJzY29wZShzdG9yZSkpIHsgXAotCQkJCWFkZHIgPSBzdG9yZTsgXAot
CQkJfSBcCi0JCX0gZWxzZSB7IFwKLQkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIp
OyBcCi0JCQlhZGRyID0gc3RvcmU7IFwKLQkJfSBcCi0JIH0gXAotfSB3aGlsZSAoMCkKLSNlbHNl
Ci0jZGVmaW5lIHNjdHBfcmVjb3Zlcl9zY29wZV9tYWMoYWRkciwgc3RvcmUpIGRvIHsgXAotCWlm
ICgoYWRkci0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpICYmIFwKLQkgICAgKElONl9JU19TQ09Q
RV9MSU5LTE9DQUwoJmFkZHItPnNpbjZfYWRkcikpKSB7IFwKLQkJKnN0b3JlID0gKmFkZHI7IFwK
LQkJaWYgKGFkZHItPnNpbjZfc2NvcGVfaWQgPT0gMCkgeyBcCi0JCQlpZiAoIWluNl9yZWNvdmVy
c2NvcGUoc3RvcmUsICZzdG9yZS0+c2luNl9hZGRyLCBcCi0JCQkJCSAgICAgIE5VTEwpKSB7IFwK
LQkJCQlhZGRyID0gc3RvcmU7IFwKLQkJCX0gXAotCQl9IGVsc2UgeyBcCi0JCQlpbjZfY2xlYXJz
Y29wZSgmYWRkci0+c2luNl9hZGRyKTsgXAotCQkJYWRkciA9IHN0b3JlOyBcCi0JCX0gXAotCX0g
XAotfSB3aGlsZSAoMCkKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotaW50IHNjdHBfY21wYWRk
cihzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRyICopOwotCi12b2lkIHNjdHBfcHJp
bnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLWludAotc2N0cF9yZWxlYXNlX3ByX3Nj
dHBfY2h1bmsoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwKLSAg
ICB1aW50OF90LCBpbnQKLSNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQotICAgIFNDVFBfVU5VU0VECi0jZW5kaWYKLSk7Ci0KLXN0cnVjdCBt
YnVmICpzY3RwX2dlbmVyYXRlX2NhdXNlKHVpbnQxNl90LCBjaGFyICopOwotc3RydWN0IG1idWYg
KnNjdHBfZ2VuZXJhdGVfbm9fdXNlcl9kYXRhX2NhdXNlKHVpbnQzMl90KTsKLQotdm9pZCBzY3Rw
X2JpbmR4X2FkZF9hZGRyZXNzKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLAotCQkJICAgIHN0cnVjdCBzb2NrYWRkciAqc2EsIHNjdHBfYXNzb2NfdCBhc3NvY19pZCwK
LQkJCSAgICB1aW50MzJfdCB2cmZfaWQsIGludCAqZXJyb3IsIHZvaWQgKnApOwotdm9pZCBzY3Rw
X2JpbmR4X2RlbGV0ZV9hZGRyZXNzKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCi0JCQkgICAgICAg
c3RydWN0IHNvY2thZGRyICpzYSwgc2N0cF9hc3NvY190IGFzc29jX2lkLAotCQkJICAgICAgIHVp
bnQzMl90IHZyZl9pZCwgaW50ICplcnJvcik7Ci0KLWludCBzY3RwX2xvY2FsX2FkZHJfY291bnQo
c3RydWN0IHNjdHBfdGNiICpzdGNiKTsKLQotI2lmZGVmIFNDVFBfTUJDTlRfTE9HR0lORwotdm9p
ZAotc2N0cF9mcmVlX2J1ZnNwYWNlKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqLAotICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwgaW50KTsKLQotI2Vsc2UK
LSNkZWZpbmUgc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgY2hrX2NudCkgIFwK
LWRvIHsgXAotCWlmICh0cDEtPmRhdGEgIT0gTlVMTCkgeyBcCi0JCWF0b21pY19zdWJ0cmFjdF9p
bnQoJigoYXNvYyktPmNodW5rc19vbl9vdXRfcXVldWUpLCBjaGtfY250KTsgXAotCQlpZiAoKGFz
b2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA+PSB0cDEtPmJvb2tfc2l6ZSkgeyBcCi0JCQlh
dG9taWNfc3VidHJhY3RfaW50KCYoKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSksIHRw
MS0+Ym9va19zaXplKTsgXAotCQl9IGVsc2UgeyBcCi0JCQkoYXNvYyktPnRvdGFsX291dHB1dF9x
dWV1ZV9zaXplID0gMDsgXAotCQl9IFwKLQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0ICYmICgoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8IFwKLQkJ
ICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkpKSB7IFwKLQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID49IHRwMS0+
Ym9va19zaXplKSB7IFwKLQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCYoKHN0Y2IpLT5zY3RwX3Nv
Y2tldC0+c29fc25kLnNiX2NjKSwgdHAxLT5ib29rX3NpemUpOyBcCi0JCQl9IGVsc2UgeyBcCi0J
CQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7IFwKLQkJCX0gXAotCQl9IFwK
LQl9IFwKLX0gd2hpbGUgKDApCi0KLSNlbmRpZgotCi0jZGVmaW5lIHNjdHBfZnJlZV9zcGJ1ZnNw
YWNlKHN0Y2IsIGFzb2MsIHNwKSAgXAotZG8geyBcCi0JaWYgKHNwLT5kYXRhICE9IE5VTEwpIHsg
XAotCQlpZiAoKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA+PSBzcC0+bGVuZ3RoKSB7
IFwKLQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJihhc29jKS0+dG90YWxfb3V0cHV0X3F1ZXVlX3Np
emUsIHNwLT5sZW5ndGgpOyBcCi0JCX0gZWxzZSB7IFwKLQkJCShhc29jKS0+dG90YWxfb3V0cHV0
X3F1ZXVlX3NpemUgPSAwOyBcCi0JCX0gXAotCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgJiYgKChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwgXAot
CQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSkpIHsgXAotCQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPj0gc3At
Pmxlbmd0aCkgeyBcCi0JCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3NuZC5zYl9jYyxzcC0+bGVuZ3RoKTsgXAotCQkJfSBlbHNlIHsgXAotCQkJCXN0Y2ItPnNj
dHBfc29ja2V0LT5zb19zbmQuc2JfY2MgPSAwOyBcCi0JCQl9IFwKLQkJfSBcCi0JfSBcCi19IHdo
aWxlICgwKQotCi0jZGVmaW5lIHNjdHBfc25kX3NiX2FsbG9jKHN0Y2IsIHN6KSAgXAotZG8geyBc
Ci0JYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsc3op
OyBcCi0JaWYgKChzdGNiLT5zY3RwX3NvY2tldCAhPSBOVUxMKSAmJiBcCi0JICAgICgoc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8IFwKLQkgICAg
IChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkp
KSB7IFwKLQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2Ms
c3opOyBcCi0JfSBcCi19IHdoaWxlICgwKQotCi0vKiBmdW5jdGlvbnMgdG8gc3RhcnQvc3RvcCB1
ZHAgdHVubmVsaW5nICovCi0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVl
QlNEX18pCi12b2lkIHNjdHBfb3Zlcl91ZHBfc3RvcCh2b2lkKTsKLWludCBzY3RwX292ZXJfdWRw
X3N0YXJ0KHZvaWQpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLXZvaWQgc2N0
cF9vdmVyX3VkcF9yZXN0YXJ0KHZvaWQpOwotI2VuZGlmCi0KLWludAotc2N0cF9zb3JlY2VpdmUo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKnBzYSwKLSAgICBzdHJ1Y3QgdWlv
ICp1aW8sCi0gICAgc3RydWN0IG1idWYgKiptcDAsCi0gICAgc3RydWN0IG1idWYgKipjb250cm9s
cCwKLSAgICBpbnQgKmZsYWdzcCk7Ci0KLXZvaWQKLXNjdHBfbWlzY19pbnRzKHVpbnQ4X3QgZnJv
bSwgdWludDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCk7Ci0KLXZv
aWQKLXNjdHBfd2FrZXVwX2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gICAgdWludDMyX3Qg
d2FrZV9jbnQsIGludCBmcm9tKTsKLQotdm9pZCBzY3RwX2xvZ19zdHJtX2RlbF9hbHQoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBpbnQpOwotCi12
b2lkIHNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGFjdGlv
bik7Ci0KLQotI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCi12b2lkCi1zY3RwX2xvZ19tYihzdHJ1
Y3QgbWJ1ZiAqbSwgaW50IGZyb20pOwotCi12b2lkCi1zY3RwX2xvZ19tYmMoc3RydWN0IG1idWYg
Km0sIGludCBmcm9tKTsKLSNlbmRpZgotCi12b2lkCi1zY3RwX3NibG9nKHN0cnVjdCBzb2NrYnVm
ICpzYiwKLSAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBmcm9tLCBpbnQgaW5jcik7Ci0K
LXZvaWQKLXNjdHBfbG9nX3N0cm1fZGVsKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sLAotICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpwb3NjaGssCi0gICAgaW50IGZy
b20pOwotdm9pZCBzY3RwX2xvZ19jd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfbmV0cyAqLCBpbnQsIHVpbnQ4X3QpOwotdm9pZCBydG9fbG9nZ2luZyhzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsIGludCBmcm9tKTsKLQotdm9pZCBzY3RwX2xvZ19jbG9zaW5nKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50MTZfdCBsb2MpOwotCi12b2lk
IHNjdHBfbG9nX2xvY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50OF90IGZyb20pOwotdm9pZCBzY3RwX2xvZ19tYXhidXJzdChzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50LCBpbnQsIHVpbnQ4X3QpOwotdm9pZCBz
Y3RwX2xvZ19ibG9jayh1aW50OF90LCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLCBzaXplX3Qp
Owotdm9pZCBzY3RwX2xvZ19yd25kKHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMy
X3QpOwotdm9pZCBzY3RwX2xvZ19yd25kX3NldCh1aW50OF90LCB1aW50MzJfdCwgdWludDMyX3Qs
IHVpbnQzMl90LCB1aW50MzJfdCk7Ci1pbnQgc2N0cF9maWxsX3N0YXRfbG9nKHZvaWQgKiwgc2l6
ZV90ICopOwotdm9pZCBzY3RwX2xvZ19mcih1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90LCBp
bnQpOwotdm9pZCBzY3RwX2xvZ19zYWNrKHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVp
bnQxNl90LCB1aW50MTZfdCwgaW50KTsKLXZvaWQgc2N0cF9sb2dfbWFwKHVpbnQzMl90LCB1aW50
MzJfdCwgdWludDMyX3QsIGludCk7Ci12b2lkIHNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7Ci12b2lkIHNjdHBfY2xyX3N0YXRfbG9nKHZvaWQp
OwotCi0KLSNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKLXZvaWQKLXNjdHBfYXVkaXRpbmco
aW50LCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKLSAgICBzdHJ1Y3Qg
c2N0cF9uZXRzICopOwotdm9pZCBzY3RwX2F1ZGl0X2xvZyh1aW50OF90LCB1aW50OF90KTsKLQot
I2VuZGlmCi11aW50MzJfdCBzY3RwX21pbl9tdHUodWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJf
dCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLXZvaWQgc2N0cF9oY19zZXRfbXR1KHVuaW9u
IHNjdHBfc29ja3N0b3JlICosIHVpbnQxNl90LCB1aW50MzJfdCk7Ci11aW50MzJfdCBzY3RwX2hj
X2dldF9tdHUodW5pb24gc2N0cF9zb2Nrc3RvcmUgKiwgdWludDE2X3QpOwotI2VuZGlmCi0jZW5k
aWYJCQkJLyogX0tFUk5FTCAqLwotI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
Ni8uZ2l0YXR0cmlidXRlcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQ2Ly5naXRhdHRyaWJ1dGVzCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlMmJkNjhjMDM0ZjUxNTkzY2M5OTc5NTRjZjZlYzFj
NWRhMjJhMzEzLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQ2Ly5naXRhdHRyaWJ1dGVzCisrKyAvZGV2L251bGwKQEAgLTEgKzAs
MCBAQAotc2N0cDZfdXNycmVxLmMgc3ZuLXByb3BlcnRpZXM9YWxsb3ctdGFicz1vbgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
Ni9zY3RwNl91c3JyZXEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM5YmJkOWRh
YTFkMzcxM2UyYjQwYmVmMDJhYWI0Yzc5MDY4MGEyZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwor
KysgL2Rldi9udWxsCkBAIC0xLDE4NjggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIw
MDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0aGUg
bmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0Ni9z
Y3RwNl91c3JyZXEuYyAzMjEyMDQgMjAxNy0wNy0xOSAxNDoyODo1OFogdHVleGVuICQiKTsKLSNl
bmRpZgotCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0jaWZkZWYgSU5FVDYKLSNpZmRl
ZiBfX0ZyZWVCU0RfXwotI2luY2x1ZGUgPHN5cy9wcm9jLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfcGNiLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0Ni9zY3RwNl92YXIu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX291dHB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KLSNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfYXNjb25mLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9pbmRhdGEuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGlt
ZXIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgotI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9pbnB1dC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KLSNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIu
aD4KLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2luY2x1ZGUgPG5ldGlu
ZXQvaWNtcDYuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0KLSNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKLSNkZWZpbmUgQVBQTEVfRklMRV9OTyA5Ci0jZW5kaWYKLSNpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotZXh0ZXJuIHN0cnVjdCBwcm90b3N3IGluZXRzd1tdOwotI2Vu
ZGlmCi0jaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLWlu
dCBpcDZfdjZvbmx5PTA7Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0jaWZk
ZWYgSU5FVAotdm9pZAotaW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICpzaW4sIHN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYpCi17Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCXVpbnQzMl90IHRlbXA7Ci0jZW5kaWYKLQltZW1zZXQoc2luLCAwLCBzaXplb2Yo
KnNpbikpOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCXNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0Jc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLQlz
aW4tPnNpbl9wb3J0ID0gc2luNi0+c2luNl9wb3J0OwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLQl0ZW1wID0gc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls3XTsKLQl0ZW1w
ID0gdGVtcCA8PCAxNjsKLQl0ZW1wID0gdGVtcCB8IHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMTZb
Nl07Ci0Jc2luLT5zaW5fYWRkci5zX2FkZHIgPSB0ZW1wOwotI2Vsc2UKLQlzaW4tPnNpbl9hZGRy
LnNfYWRkciA9IHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM107Ci0jZW5kaWYKLX0KLQotdm9p
ZAotaW42X3NpbjZfMl9zaW5faW5fc29jayhzdHJ1Y3Qgc29ja2FkZHIgKm5hbSkKLXsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbl9wOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKLQotCS8q
IHNhdmUgb3JpZ2luYWwgc29ja2FkZHJfaW42IGFkZHIgYW5kIGNvbnZlcnQgaXQgdG8gc29ja2Fk
ZHJfaW4gICovCi0Jc2luNiA9ICooc3RydWN0IHNvY2thZGRyX2luNiAqKW5hbTsKLQlzaW5fcCA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKiluYW07Ci0JaW42X3NpbjZfMl9zaW4oc2luX3AsICZzaW42
KTsKLX0KLQotdm9pZAotaW42X3Npbl8yX3Y0bWFwc2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
biwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikKLXsKLQltZW1zZXQoc2luNiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsK
LSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7Ci0jZW5kaWYKLQlzaW42LT5zaW42X3BvcnQgPSBzaW4tPnNpbl9wb3J0Owot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkoKHVpbnQzMl90ICopJnNpbjYt
PnNpbjZfYWRkcilbMF0gPSAwOwotCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVsxXSA9
IDA7Ci0JKCh1aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIpWzJdID0gaHRvbmwoMHhmZmZmKTsK
LQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilbM10gPSBzaW4tPnNpbl9hZGRyLnNfYWRk
cjsKLSNlbHNlCi0gCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMF0gPSAwOwotCXNpbjYtPnNp
bjZfYWRkci5zNl9hZGRyMzJbMV0gPSAwOwotIAlzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzJd
ID0gaHRvbmwoMHhmZmZmKTsKLQlzaW42LT5zaW42X2FkZHIuczZfYWRkcjMyWzNdID0gc2luLT5z
aW5fYWRkci5zX2FkZHI7Ci0jZW5kaWYKLX0KLSNlbmRpZgotI2VuZGlmCi0KLSNpZiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQotaW50Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19GcmVlQlNEX18pCi1zY3RwNl9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKippX3Bhaywg
aW50ICpvZmZwLCB1aW50MTZfdCBwb3J0KQotI2VsaWYgZGVmaW5lZCggX19QYW5kYV9fKQotc2N0
cDZfaW5wdXQocGFraGFuZGxlX3R5cGUgKmlfcGFrKQotI2Vsc2UKLXNjdHA2X2lucHV0KHN0cnVj
dCBtYnVmICoqaV9wYWssIGludCAqb2ZmcCwgaW50IHByb3RvKQotI2VuZGlmCi17Ci0Jc3RydWN0
IG1idWYgKm07Ci0JaW50IGlwaGxlbjsKLQl1aW50MzJfdCB2cmZfaWQ7Ci0JdWludDhfdCBlY25f
Yml0czsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OwotCXN0cnVjdCBpcDZfaGRyICpp
cDY7Ci0Jc3RydWN0IHNjdHBoZHIgKnNoOwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlp
bnQgbGVuZ3RoLCBvZmZzZXQ7Ci0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JdWlu
dDhfdCBjb21wdXRlX2NyYzsKLSNlbmRpZgotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCi0JdWlu
dDMyX3QgbWZsb3dpZDsKLQl1aW50OF90IG1mbG93dHlwZTsKLQl1aW50MTZfdCBmaWJudW07Ci0j
ZW5kaWYKLSNpZiAhKGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykp
Ci0JdWludDE2X3QgcG9ydCA9IDA7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoX19QYW5kYV9fKQot
CS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3Jr
IHJpZ2h0LiAqLwotCWlwaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7Ci0jZWxzZQotCWlw
aGxlbiA9ICpvZmZwOwotI2VuZGlmCi0JaWYgKFNDVFBfR0VUX1BLVF9WUkZJRCgqaV9wYWssIHZy
Zl9pZCkpIHsKLQkJU0NUUF9SRUxFQVNFX1BLVCgqaV9wYWspOwotCQlyZXR1cm4gKElQUFJPVE9f
RE9ORSk7Ci0JfQotCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTigqaV9wYWspOwotI2lmZGVmIF9f
UGFuZGFfXwotCVNDVFBfREVUQUNIX0hFQURFUl9GUk9NX0NIQUlOKCppX3Bhayk7Ci0JKHZvaWQp
U0NUUF9SRUxFQVNFX0hFQURFUigqaV9wYWspOwotI2VuZGlmCi0jaWZkZWYgU0NUUF9NQlVGX0xP
R0dJTkcKLQkvKiBMb2cgaW4gYW55IGlucHV0IG1idWZzICovCi0JaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewotCQlz
Y3RwX2xvZ19tYmMobSwgU0NUUF9NQlVGX0lOUFVUKTsKLQl9Ci0jZW5kaWYKLSNpZmRlZiBTQ1RQ
X1BBQ0tFVF9MT0dHSU5HCi0JaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykgewotCQlzY3RwX3BhY2tldF9sb2cobSk7Ci0J
fQotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+IDEwMDAwNDkKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJz
Y3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1
bV9mbGFncyAweCViLlxuIiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIGlm
X25hbWUobS0+bV9wa3RoZHIucmN2aWYpLAotCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3Vt
X2ZsYWdzLCBDU1VNX0JJVFMpOwotI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0J
U0NUUERCRyhTQ1RQX0RFQlVHX0NSQ09GRkxPQUQsCi0JICAgICAgICAic2N0cDZfaW5wdXQoKTog
UGFja2V0IG9mIGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5c
biIsCi0JICAgICAgICBtLT5tX3BrdGhkci5sZW4sCi0JICAgICAgICBpZl9uYW1lKG0tPm1fcGt0
aGRyLnJjdmlmKSwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2Vsc2UKLQlT
Q1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQ
YWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4Llxu
IiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlm
LT5pZl94bmFtZSwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0j
ZW5kaWYKLSNpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZG
TE9BRCwKLQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2Vp
dmVkIG9uICVzJWQgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAotCSAgICAgICAgbS0+bV9wa3Ro
ZHIubGVuLAotCSAgICAgICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX25hbWUsCi0JICAgICAgICBt
LT5tX3BrdGhkci5yY3ZpZi0+aWZfdW5pdCwKLQkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxh
Z3MpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKLQlTQ1RQREJHKFNDVFBfREVC
VUdfQ1JDT0ZGTE9BRCwKLQkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3Ro
ICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKLQkgICAgICAgIG0t
Pm1fcGt0aGRyLmxlbiwKLQkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKLQkg
ICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOwotI2VuZGlmCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQltZmxvd2lkID0gbS0+bV9wa3RoZHIuZmxvd2lkOwotCW1mbG93dHlwZSA9IE1f
SEFTSFRZUEVfR0VUKG0pOwotCWZpYm51bSA9IE1fR0VURklCKG0pOwotI2VuZGlmCi0JU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChz
Y3Rwc19pbnBhY2tldHMpOwotCS8qIEdldCBJUCwgU0NUUCwgYW5kIGZpcnN0IGNodW5rIGhlYWRl
ciB0b2dldGhlciBpbiB0aGUgZmlyc3QgbWJ1Zi4gKi8KLQlvZmZzZXQgPSBpcGhsZW4gKyBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKLQlpcDYg
PSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRyICopOwotCUlQNl9FWFRIRFJfR0VUKHNoLCBzdHJ1Y3Qg
c2N0cGhkciAqLCBtLCBpcGhsZW4sCi0JCSAgICAgICAoaW50KShzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkpOwotCWlmIChzaCA9PSBOVUxMKSB7
Ci0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7Ci0JCXJldHVybiAoSVBQUk9UT19ET05F
KTsKLQl9Ci0JY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpKTsKLQlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5r
aGRyKTsKLQltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQlz
cmMuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc3JjLnNp
bjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0Jc3JjLnNpbjZf
cG9ydCA9IHNoLT5zcmNfcG9ydDsKLQlzcmMuc2luNl9hZGRyID0gaXA2LT5pcDZfc3JjOwotI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pCi0jaWYgZGVmaW5lZChfX0FQUExFX18pCi0JLyogWFhYOiBU
aGlzIGNvZGUgc2hvdWxkIGFsc28gYmUgdXNlZCBvbiBBcHBsZSAqLwotI2VuZGlmCi0JaWYgKGlu
Nl9zZXRzY29wZSgmc3JjLnNpbjZfYWRkciwgbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDAp
IHsKLQkJZ290byBvdXQ7Ci0JfQotI2VuZGlmCi0JbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSk7Ci0JZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0jaWZkZWYg
SEFWRV9TSU42X0xFTgotCWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KTsKLSNlbmRpZgotCWRzdC5zaW42X3BvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCWRzdC5zaW42X2Fk
ZHIgPSBpcDYtPmlwNl9kc3Q7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLSNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKLQkvKiBYWFg6IFRoaXMgY29kZSBzaG91bGQgYWxzbyBiZSB1c2VkIG9uIEFw
cGxlICovCi0jZW5kaWYKLQlpZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBtLT5tX3Br
dGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkgewotCQlnb3RvIG91dDsKLQl9Ci0jZW5kaWYKLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKLSNpZiBkZWZpbmVkKE5GQUlUSCkgJiYgMCA8IE5GQUlUSAotCWlm
IChmYWl0aHByZWZpeCgmZHN0LnNpbjZfYWRkcikpIHsKLQkJZ290byBvdXQ7Ci0JfQotI2VuZGlm
Ci0jZW5kaWYKLQlsZW5ndGggPSBudG9ocyhpcDYtPmlwNl9wbGVuKSArIGlwaGxlbjsKLQkvKiBW
YWxpZGF0ZSBtYnVmIGNoYWluIGxlbmd0aCB3aXRoIElQIHBheWxvYWQgbGVuZ3RoLiAqLwotCWlm
IChTQ1RQX0hFQURFUl9MRU4obSkgIT0gbGVuZ3RoKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsCi0JCSAgICAgICAgInNjdHA2X2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0
aDolZFxuIiwgbGVuZ3RoLCBTQ1RQX0hFQURFUl9MRU4obSkpOwotCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19oZHJvcHMpOwotCQlnb3RvIG91dDsKLQl9Ci0JaWYgKElONl9JU19BRERSX01VTFRJQ0FT
VCgmaXA2LT5pcDZfZHN0KSkgewotCQlnb3RvIG91dDsKLQl9Ci0JZWNuX2JpdHMgPSAoKG50b2hs
KGlwNi0+aXA2X2Zsb3cpID4+IDIwKSAmIDB4MDAwMDAwZmYpOwotI2lmIGRlZmluZWQoU0NUUF9X
SVRIX05PX0NTVU0pCi0JU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdm5vY3JjKTsKLSNlbHNlCi0j
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCi0J
aWYgKG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgJiBDU1VNX1NDVFBfVkFMSUQpIHsKLQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKLQkJY29tcHV0ZV9jcmMgPSAwOwotCX0gZWxzZSB7
Ci0jZWxzZQotCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykg
JiYKLQkgICAgKElONl9BUkVfQUREUl9FUVVBTCgmc3JjLnNpbjZfYWRkciwgJmRzdC5zaW42X2Fk
ZHIpKSkgewotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2bm9jcmMpOwotCQljb21wdXRlX2Ny
YyA9IDA7Ci0JfSBlbHNlIHsKLSNlbmRpZgotCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3dj
cmMpOwotCQljb21wdXRlX2NyYyA9IDE7Ci0JfQotI2VuZGlmCi0Jc2N0cF9jb21tb25faW5wdXRf
cHJvY2Vzc2luZygmbSwgaXBobGVuLCBvZmZzZXQsIGxlbmd0aCwKLQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzaCwgY2gsCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWNuX2JpdHMsCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVt
LAotI2VuZGlmCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwot
IG91dDoKLQlpZiAobSkgewotCQlzY3RwX21fZnJlZW0obSk7Ci0JfQotCXJldHVybiAoSVBQUk9U
T19ET05FKTsKLX0KLQotI2lmIGRlZmluZWQoX19BUFBMRV9fKQotaW50Ci1zY3RwNl9pbnB1dChz
dHJ1Y3QgbWJ1ZiAqKmlfcGFrLCBpbnQgKm9mZnApCi17Ci0JcmV0dXJuIChzY3RwNl9pbnB1dF93
aXRoX3BvcnQoaV9wYWssIG9mZnAsIDApKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLWludAotc2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZw
LCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQpCi17Ci0JcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3Bv
cnQoaV9wYWssIG9mZnAsIDApKTsKLX0KLSNlbmRpZgotCi12b2lkCi1zY3RwNl9ub3RpZnkoc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwKLSAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
Ci0gICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAotICAgICAgICAgICAgIHVpbnQ4
X3QgaWNtcDZfdHlwZSwKLSAgICAgICAgICAgICB1aW50OF90IGljbXA2X2NvZGUsCi0gICAgICAg
ICAgICAgdWludDMyX3QgbmV4dF9tdHUpCi17Ci0jaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCi0Jc3RydWN0IHNvY2tldCAqc287Ci0jZW5kaWYK
LQlpbnQgdGltZXJfc3RvcHBlZDsKLQotCXN3aXRjaCAoaWNtcDZfdHlwZSkgewotCWNhc2UgSUNN
UDZfRFNUX1VOUkVBQ0g6Ci0JCWlmICgoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9O
T1JPVVRFKSB8fAotCQkgICAgKGljbXA2X2NvZGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4p
IHx8Ci0JCSAgICAoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRSkg
fHwKLQkJICAgIChpY21wNl9jb2RlID09IElDTVA2X0RTVF9VTlJFQUNIX0FERFIpKSB7Ci0JCQkv
KiBNYXJrIHRoZSBuZXQgdW5yZWFjaGFibGUuICovCi0JCQlpZiAobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1JFQUNIQUJMRSkgewotCQkJCS8qIE9rIHRoYXQgZGVzdGluYXRpb24gaXMgbm90
IHJlYWNoYWJsZSAqLwotCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJM
RTsKLQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKLQkJCQlzY3RwX3VscF9u
b3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sCi0JCQkJICAgICAgICAgICAgICAgIHN0
Y2IsIDAsICh2b2lkICopbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOwotCQkJfQotCQl9Ci0JCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJYnJlYWs7Ci0JY2FzZSBJQ01QNl9QQVJBTV9QUk9COgot
CQkvKiBUcmVhdCBpdCBsaWtlIGFuIEFCT1JULiAqLwotCQlpZiAoaWNtcDZfY29kZSA9PSBJQ01Q
Nl9QQVJBTVBST0JfTkVYVEhFQURFUikgewotCQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3Rj
YiwgMSwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKLSNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKLQkJCXNvID0gU0NUUF9JTlBfU08o
aW5wKTsKLQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7Ci0JCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7Ci0JCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKLQkJCVNDVFBf
VENCX0xPQ0soc3RjYik7Ci0JCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7Ci0jZW5kaWYKLQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBf
Tk9STUFMX1BST0MsCi0JCQkJCSAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9D
XzIpOwotI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQotCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKLSNlbmRpZgotCQl9IGVsc2Ugewot
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgSUNNUDZfUEFD
S0VUX1RPT19CSUc6Ci0JCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cG10dV90aW1l
ci50aW1lcikpIHsKLQkJCXRpbWVyX3N0b3BwZWQgPSAxOwotCQkJc2N0cF90aW1lcl9zdG9wKFND
VFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0LAotCQkJICAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzEpOwotCQl9IGVsc2Ugewot
CQkJdGltZXJfc3RvcHBlZCA9IDA7Ci0JCX0KLQkJLyogVXBkYXRlIHRoZSBwYXRoIE1UVS4gKi8K
LQkJaWYgKG5ldC0+cG9ydCkgewotCQkJbmV4dF9tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
OwotCQl9Ci0JCWlmIChuZXQtPm10dSA+IG5leHRfbXR1KSB7Ci0JCQluZXQtPm10dSA9IG5leHRf
bXR1OwotCQl9Ci0JCS8qIFVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gTVRVICovCi0JCWlmIChzdGNi
LT5hc29jLnNtYWxsZXN0X210dSA+IG5leHRfbXR1KSB7Ci0JCQlzY3RwX3BhdGhtdHVfYWRqdXN0
bWVudChzdGNiLCBuZXh0X210dSk7Ci0JCX0KLQkJLyogRmluYWxseSwgc3RhcnQgdGhlIFBNVFUg
dGltZXIgaWYgaXQgd2FzIHJ1bm5pbmcgYmVmb3JlLiAqLwotCQlpZiAodGltZXJfc3RvcHBlZCkg
ewotCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAs
IHN0Y2IsIG5ldCk7Ci0JCX0KLQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQlicmVhazsKLQlk
ZWZhdWx0OgotCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCWJyZWFrOwotCX0KLX0KLQotdm9p
ZAotc2N0cDZfY3RsaW5wdXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpwa3Rkc3QsIHZvaWQg
KmQpCi17Ci0Jc3RydWN0IGlwNmN0bHBhcmFtICppcDZjcDsKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7Ci0J
c3RydWN0IHNjdHBoZHIgc2g7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKLQotI2lm
ZGVmIEhBVkVfU0FfTEVOCi0JaWYgKHBrdGRzdC0+c2FfZmFtaWx5ICE9IEFGX0lORVQ2IHx8Ci0J
ICAgIHBrdGRzdC0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotI2Vs
c2UKLQlpZiAocGt0ZHN0LT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKLSNlbmRpZgotCQlyZXR1
cm47Ci0JfQotCi0JaWYgKCh1bnNpZ25lZCljbWQgPj0gUFJDX05DTURTKSB7Ci0JCXJldHVybjsK
LQl9Ci0JaWYgKFBSQ19JU19SRURJUkVDVChjbWQpKSB7Ci0JCWQgPSBOVUxMOwotCX0gZWxzZSBp
ZiAoaW5ldDZjdGxlcnJtYXBbY21kXSA9PSAwKSB7Ci0JCXJldHVybjsKLQl9Ci0JLyogSWYgdGhl
IHBhcmFtZXRlciBpcyBmcm9tIGljbXA2LCBkZWNvZGUgaXQuICovCi0JaWYgKGQgIT0gTlVMTCkg
ewotCQlpcDZjcCA9IChzdHJ1Y3QgaXA2Y3RscGFyYW0gKilkOwotCX0gZWxzZSB7Ci0JCWlwNmNw
ID0gKHN0cnVjdCBpcDZjdGxwYXJhbSAqKU5VTEw7Ci0JfQotCi0JaWYgKGlwNmNwICE9IE5VTEwp
IHsKLQkJLyoKLQkJICogWFhYOiBXZSBhc3N1bWUgdGhhdCB3aGVuIElQVjYgaXMgbm9uIE5VTEws
IE0gYW5kIE9GRiBhcmUKLQkJICogdmFsaWQuCi0JCSAqLwotCQlpZiAoaXA2Y3AtPmlwNmNfbSA9
PSBOVUxMKSB7Ci0JCQlyZXR1cm47Ci0JCX0KLQotCQkvKiBDaGVjayBpZiB3ZSBjYW4gc2FmZWx5
IGV4YW1pbmUgdGhlIHBvcnRzIGFuZCB0aGUKLQkJICogdmVyaWZpY2F0aW9uIHRhZyBvZiB0aGUg
U0NUUCBjb21tb24gaGVhZGVyLgotCQkgKi8KLQkJaWYgKGlwNmNwLT5pcDZjX20tPm1fcGt0aGRy
LmxlbiA8Ci0JCSAgICAoaW50MzJfdCkoaXA2Y3AtPmlwNmNfb2ZmICsgb2Zmc2V0b2Yoc3RydWN0
IHNjdHBoZHIsIGNoZWNrc3VtKSkpIHsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qIENvcHkgb3V0
IHRoZSBwb3J0IG51bWJlcnMgYW5kIHRoZSB2ZXJpZmljYXRpb24gdGFnLiAqLwotCQltZW1zZXQo
JnNoLCAwLCBzaXplb2Yoc2gpKTsKLQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAotCQkgICAg
ICAgICAgIGlwNmNwLT5pcDZjX29mZiwKLQkJICAgICAgICAgICBzaXplb2YodWludDE2X3QpICsg
c2l6ZW9mKHVpbnQxNl90KSArIHNpemVvZih1aW50MzJfdCksCi0JCSAgICAgICAgICAgKGNhZGRy
X3QpJnNoKTsKLQkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
Ci0JCXNyYy5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJ
c3JjLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCXNy
Yy5zaW42X3BvcnQgPSBzaC5zcmNfcG9ydDsKLQkJc3JjLnNpbjZfYWRkciA9IGlwNmNwLT5pcDZj
X2lwNi0+aXA2X3NyYzsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotCQlpZiAoaW42X3NldHNj
b3BlKCZzcmMuc2luNl9hZGRyLCBpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkg
IT0gMCkgewotCQkJcmV0dXJuOwotCQl9Ci0jZW5kaWYKLQkJbWVtc2V0KCZkc3QsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owot
I2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOwotI2VuZGlmCi0JCWRzdC5zaW42X3BvcnQgPSBzaC5kZXN0X3BvcnQ7Ci0JCWRz
dC5zaW42X2FkZHIgPSBpcDZjcC0+aXA2Y19pcDYtPmlwNl9kc3Q7Ci0jaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKLQkJaWYgKGluNl9zZXRzY29wZSgmZHN0LnNpbjZfYWRkciwgaXA2Y3AtPmlwNmNf
bS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKLQkJCXJldHVybjsKLQkJfQotI2VuZGlm
Ci0JCWlucCA9IE5VTEw7Ci0JCW5ldCA9IE5VTEw7Ci0JCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9hZGRyX3NhKChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKLQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlucCwgJm5ldCwgMSwgU0NUUF9ERUZBVUxUX1ZS
RklEKTsKLQkJaWYgKChzdGNiICE9IE5VTEwpICYmCi0JCSAgICAobmV0ICE9IE5VTEwpICYmCi0J
CSAgICAoaW5wICE9IE5VTEwpKSB7Ci0JCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAq
LwotCQkJaWYgKG50b2hsKHNoLnZfdGFnKSAhPSAwKSB7Ci0JCQkJLyoKLQkJCQkgKiBUaGlzIG11
c3QgYmUgdGhlIHZlcmlmaWNhdGlvbiB0YWcgdXNlZCBmb3IKLQkJCQkgKiBzZW5kaW5nIG91dCBw
YWNrZXRzLiBXZSBkb24ndCBjb25zaWRlcgotCQkJCSAqIHBhY2tldHMgcmVmbGVjdGluZyB0aGUg
dmVyaWZpY2F0aW9uIHRhZy4KLQkJCQkgKi8KLQkJCQlpZiAobnRvaGwoc2gudl90YWcpICE9IHN0
Y2ItPmFzb2MucGVlcl92dGFnKSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJ
cmV0dXJuOwotCQkJCX0KLQkJCX0gZWxzZSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKLQkJ
CQlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIubGVuID49Ci0JCQkJICAgIGlwNmNwLT5pcDZj
X29mZiArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKwotCQkJCSAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsKLQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgb2Zmc2V0b2Yoc3RydWN0IHNjdHBfaW5pdCwgYV9yd25kKSkgewotCQkJCQkvKgotCQkJCQkg
KiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdlCi0JCQkJCSAqIGdvdCBhbiBJTklUIGNo
dW5rIGFuZCBpZiB0aGUKLQkJCQkJICogaW5pdGlhdGUgdGFnIG1hdGNoZXMuCi0JCQkJCSAqLwot
CQkJCQl1aW50MzJfdCBpbml0aWF0ZV90YWc7Ci0JCQkJCXVpbnQ4X3QgY2h1bmtfdHlwZTsKLQot
CQkJCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCi0JCQkJCSAgICAgICAgICAgaXA2Y3AtPmlw
NmNfb2ZmICsKLQkJCQkJICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpLAotCQkJCQkg
ICAgICAgICAgIHNpemVvZih1aW50OF90KSwKLQkJCQkJICAgICAgICAgICAoY2FkZHJfdCkmY2h1
bmtfdHlwZSk7Ci0JCQkJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKLQkJCQkJICAgICAgICAg
ICBpcDZjcC0+aXA2Y19vZmYgKwotCQkJCQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikgKwotCQkJCQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkciksCi0JCQkJ
CSAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSwKLQkJCQkJICAgICAgICAgICAoY2FkZHJfdCkm
aW5pdGlhdGVfdGFnKTsKLQkJCQkJaWYgKChjaHVua190eXBlICE9IFNDVFBfSU5JVElBVElPTikg
fHwKLQkJCQkJICAgIChudG9obChpbml0aWF0ZV90YWcpICE9IHN0Y2ItPmFzb2MubXlfdnRhZykp
IHsKLQkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJCXJldHVybjsKLQkJCQkJfQot
CQkJCX0gZWxzZSB7Ci0JCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkJCQkJcmV0dXJuOwot
CQkJCX0KLSNlbHNlCi0JCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwotCQkJCXJldHVybjsKLSNl
bmRpZgotCQkJfQotCQkJc2N0cDZfbm90aWZ5KGlucCwgc3RjYiwgbmV0LAotCQkJICAgICAgICAg
ICAgIGlwNmNwLT5pcDZjX2ljbXA2LT5pY21wNl90eXBlLAotCQkJICAgICAgICAgICAgIGlwNmNw
LT5pcDZjX2ljbXA2LT5pY21wNl9jb2RlLAotCQkJICAgICAgICAgICAgIG50b2hsKGlwNmNwLT5p
cDZjX2ljbXA2LT5pY21wNl9tdHUpKTsKLQkJfSBlbHNlIHsKLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAotCQkJaWYgKFBSQ19JU19SRURJUkVD
VChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKLQkJCQlpbjZfcnRjaGFuZ2UoKHN0cnVjdCBpbjZw
Y2IgKilpbnAsCi0JCQkJICAgIGluZXQ2Y3RsZXJybWFwW2NtZF0pOwotCQkJfQotI2VuZGlmCi0J
CQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgewotCQkJCS8qIHJlZHVjZSBp
bnAncyByZWYtY291bnQgKi8KLQkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKGlucCk7Ci0JCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwotCQkJfQotCQkJaWYg
KHN0Y2IpIHsKLQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7Ci0JCQl9Ci0JCX0KLQl9Ci19Ci0j
ZW5kaWYKLQotLyoKLSAqIHRoaXMgcm91dGluZSBjYW4gcHJvYmFibHkgYmUgY29sbGFzcGVkIGlu
dG8gdGhlIG9uZSBpbiBzY3RwX3VzZXJyZXEuYwotICogc2luY2UgdGhleSBkbyB0aGUgc2FtZSB0
aGluZyBhbmQgbm93IHdlIGxvb2t1cCB3aXRoIGEgc29ja2FkZHIKLSAqLwotI2lmZGVmIF9fRnJl
ZUJTRF9fCi1zdGF0aWMgaW50Ci1zY3RwNl9nZXRjcmVkKFNZU0NUTF9IQU5ETEVSX0FSR1MpCi17
Ci0Jc3RydWN0IHh1Y3JlZCB4dWM7Ci0Jc3RydWN0IHNvY2thZGRyX2luNiBhZGRyc1syXTsKLQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKLQlzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2I7Ci0JaW50IGVycm9yOwotCXVpbnQzMl90IHZyZl9pZDsKLQotI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotCXZyZl9pZCA9IFNDVFBf
REVGQVVMVF9WUkZJRDsKLSNlbHNlCi0JdnJmX2lkID0gcGFuZGFfZ2V0X3ZyZl9mcm9tX2NhbGwo
KTsgLyogZnJvbSBjb25uZWN0eCBjYWxsPyAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAotCWVycm9yID0gcHJpdl9jaGVj
ayhyZXEtPnRkLCBQUklWX05FVElORVRfR0VUQ1JFRCk7Ci0jZWxpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLQllcnJvciA9IHN1c2VyKHJlcS0+
dGQpOwotI2Vsc2UKLQllcnJvciA9IHN1c2VyKHJlcS0+cCk7Ci0jZW5kaWYKLQlpZiAoZXJyb3Ip
Ci0JCXJldHVybiAoZXJyb3IpOwotCi0JaWYgKHJlcS0+bmV3bGVuICE9IHNpemVvZihhZGRycykp
IHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UDZfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmIChyZXEtPm9s
ZGxlbiAhPSBzaXplb2Yoc3RydWN0IHVjcmVkKSkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5V
TEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJldHVy
biAoRUlOVkFMKTsKLQl9Ci0JZXJyb3IgPSBTWVNDVExfSU4ocmVxLCBhZGRycywgc2l6ZW9mKGFk
ZHJzKSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gKGVycm9yKTsKLQotCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9hZGRyX3NhKHNpbjZ0b3NhKCZhZGRyc1sxXSksCi0JICAgIHNpbjZ0b3Nh
KCZhZGRyc1swXSksCi0JICAgICZpbnAsICZuZXQsIDEsIHZyZl9pZCk7Ci0JaWYgKHN0Y2IgPT0g
TlVMTCB8fCBpbnAgPT0gTlVMTCB8fCBpbnAtPnNjdHBfc29ja2V0ID09IE5VTEwpIHsKLQkJaWYg
KChpbnAgIT0gTlVMTCkgJiYgKHN0Y2IgPT0gTlVMTCkpIHsKLQkJCS8qIHJlZHVjZSByZWYtY291
bnQgKi8KLQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnAp
OwotCQkJZ290byBjcmVkX2Nhbl9jb250OwotCQl9Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOwotCQllcnJvciA9
IEVOT0VOVDsKLQkJZ290byBvdXQ7Ci0JfQotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQkvKiBX
ZSB1c2UgdGhlIHdyaXRlIGxvY2sgaGVyZSwgb25seQotCSAqIHNpbmNlIGluIHRoZSBlcnJvciBs
ZWcgd2UgbmVlZCBpdC4KLQkgKiBJZiB3ZSB1c2VkIFJMT0NLLCB0aGVuIHdlIHdvdWxkIGhhdmUK
LQkgKiB0byB3bG9jay9kZWNyL3VubG9jay9ybG9jay4gV2hpY2gKLQkgKiBpbiB0aGVvcnkgY291
bGQgY3JlYXRlIGEgaG9sZS4gQmV0dGVyCi0JICogdG8gdXNlIGhpZ2hlciB3bG9jay4KLQkgKi8K
LQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotIGNyZWRfY2FuX2NvbnQ6Ci0JZXJyb3IgPSBjcl9jYW5z
ZWVzb2NrZXQocmVxLT50ZC0+dGRfdWNyZWQsIGlucC0+c2N0cF9zb2NrZXQpOwotCWlmIChlcnJv
cikgewotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCWdvdG8gb3V0OwotCX0KLQljcnUyeChp
bnAtPnNjdHBfc29ja2V0LT5zb19jcmVkLCAmeHVjKTsKLQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
Ci0JZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnh1Yywgc2l6ZW9mKHN0cnVjdCB4dWNyZWQpKTsK
LW91dDoKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotU1lTQ1RMX1BST0MoX25ldF9pbmV0Nl9zY3Rw
NiwgT0lEX0FVVE8sIGdldGNyZWQsIENUTFRZUEVfT1BBUVVFIHwgQ1RMRkxBR19SVywKLSAgICAw
LCAwLAotICAgIHNjdHA2X2dldGNyZWQsICJTLHVjcmVkIiwgIkdldCB0aGUgdWNyZWQgb2YgYSBT
Q1RQNiBjb25uZWN0aW9uIik7Ci0KLSNlbmRpZgotCi0vKiBUaGlzIGlzIHRoZSBzYW1lIGFzIHRo
ZSBzY3RwX2Fib3J0KCkgY291bGQgYmUgbWFkZSBjb21tb24gKi8KLSNpZiAoZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pCi1zdGF0aWMgdm9pZAotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLWludAotI2Vsc2UKLXN0YXRpYyBpbnQKLSNlbmRpZgotc2N0cDZfYWJv
cnQoc3RydWN0IHNvY2tldCAqc28pCi17Ci0Jc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKLQl1aW50
MzJfdCBmbGFnczsKLQotCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7Ci0J
aWYgKGlucCA9PSBOVUxMKSB7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotI2lmIChkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3Nf
XykKLQkJcmV0dXJuOwotI2Vsc2UKLQkJcmV0dXJuIChFSU5WQUwpOwotI2VuZGlmCi0JfQotIHNj
dHBfbXVzdF90cnlfYWdhaW46Ci0JZmxhZ3MgPSBpbnAtPnNjdHBfZmxhZ3M7Ci0jaWZkZWYgU0NU
UF9MT0dfQ0xPU0lORwotCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxNyk7Ci0jZW5kaWYK
LQlpZiAoKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSAmJgotCSAg
ICAoYXRvbWljX2NtcHNldF9pbnQoJmlucC0+c2N0cF9mbGFncywgZmxhZ3MsIChmbGFncyB8IFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FIHwgU0NUUF9QQ0JfRkxBR1NfQ0xPU0VfSVApKSkpIHsK
LSNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCi0JCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAx
Nik7Ci0jZW5kaWYKLQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0Vf
QUJPUlQsCi0JCQkJU0NUUF9DQUxMRURfQUZURVJfQ01QU0VUX09GQ0xPU0UpOwotCQlTT0NLX0xP
Q0soc28pOwotCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19zbmQpOwotCQkvKiBzYW1lIGZvciB0aGUg
cmN2IG9uZXMsIHRoZXkgYXJlIG9ubHkKLQkJICogaGVyZSBmb3IgdGhlIGFjY291bnRpbmcvc2Vs
ZWN0LgotCQkgKi8KLQkJU0NUUF9TQl9DTEVBUihzby0+c29fcmN2KTsKLSNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKLQkJc28tPnNvX3VzZWNvdW50LS07Ci0jZWxzZQotCQkvKiBOb3cgbnVsbCBvdXQg
dGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNvbXBsZXRlbHkgZGV0YWNoZWQuICovCi0JCXNvLT5zb19w
Y2IgPSBOVUxMOwotI2VuZGlmCi0JCVNPQ0tfVU5MT0NLKHNvKTsKLQl9IGVsc2UgewotCQlmbGFn
cyA9IGlucC0+c2N0cF9mbGFnczsKLQkJaWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tF
VF9HT05FKSA9PSAwKSB7Ci0JCQlnb3RvIHNjdHBfbXVzdF90cnlfYWdhaW47Ci0JCX0KLQl9Ci0j
aWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKQotCXJldHVybjsKLSNlbHNlCi0JcmV0dXJuICgwKTsKLSNl
bmRpZgotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNTAwMDAwCi1zdGF0aWMgaW50Ci1zY3RwNl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGlu
dCBwcm90byBTQ1RQX1VOVVNFRCwgc3RydWN0IHRocmVhZCAqcCBTQ1RQX1VOVVNFRCkKLSNlbGlm
IGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCi1pbnQKLXNjdHA2
X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvIFNDVFBfVU5VU0VELCB1aW50MzJf
dCB2cmZfaWQpCi0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3RhdGljIGludAotc2N0cDZf
YXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFE
IHAgU0NUUF9VTlVTRUQpCi0jZWxzZQotc3RhdGljIGludAotc2N0cDZfYXR0YWNoKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIHN0cnVjdCBwcm9jICpwIFNDVFBfVU5V
U0VEKQotI2VuZGlmCi17Ci0Jc3RydWN0IGluNnBjYiAqaW5wNjsKLQlpbnQgZXJyb3I7Ci0Jc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi0JdWludDMyX3QgdnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOwot
I2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChp
bnAgIT0gTlVMTCkgewotCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLQot
CWlmIChzby0+c29fc25kLnNiX2hpd2F0ID09IDAgfHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAw
KSB7Ci0JCWVycm9yID0gU0NUUF9TT1JFU0VSVkUoc28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9z
ZW5kc3BhY2UpLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSk7Ci0JCWlmIChlcnJv
cikKLQkJCXJldHVybiAoZXJyb3IpOwotCX0KLQllcnJvciA9IHNjdHBfaW5wY2JfYWxsb2Moc28s
IHZyZl9pZCk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gKGVycm9yKTsKLQlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCVNDVFBfSU5QX1dMT0NLKGlucCk7Ci0JaW5wLT5z
Y3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2OwkvKiBJJ20gdjYhICovCi0JaW5w
NiA9IChzdHJ1Y3QgaW42cGNiICopaW5wOwotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQlpbnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7Ci0jZWxzZQotCWlucC0+
aW5wX3ZmbGFnIHw9IElOUF9JUFY2OwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19QYW5kYV9fKQot
CWlucDYtPmluNnBfaG9wcyA9IC0xOwkvKiB1c2Uga2VybmVsIGRlZmF1bHQgKi8KLQlpbnA2LT5p
bjZwX2Nrc3VtID0gLTE7CS8qIGp1c3QgdG8gYmUgc3VyZSAqLwotI2VuZGlmCi0jaWZkZWYgSU5F
VAotCS8qCi0JICogWFhYOiB1Z2x5ISEgSVB2NCBUVEwgaW5pdGlhbGl6YXRpb24gaXMgbmVjZXNz
YXJ5IGZvciBhbiBJUHY2Ci0JICogc29ja2V0IGFzIHdlbGwsIGJlY2F1c2UgdGhlIHNvY2tldCBt
YXkgYmUgYm91bmQgdG8gYW4gSVB2NgotCSAqIHdpbGRjYXJkIGFkZHJlc3MsIHdoaWNoIG1heSBt
YXRjaCBhbiBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MuCi0JICovCi0JaW5wNi0+aW5wX2lwX3R0
bCA9IE1PRFVMRV9HTE9CQUwoaXBfZGVmdHRsKTsKLSNlbmRpZgotCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKLQlyZXR1cm4gKDApOwotfQotCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCi1zdGF0aWMgaW50Ci1zY3RwNl9iaW5kKHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCB0aHJlYWQgKnApCi17Ci0j
ZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKLXN0YXRpYyBp
bnQKLXNjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwg
c3RydWN0IHByb2MgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsIHZvaWQgKiBwKQotewotI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykK
LXN0YXRpYyBpbnQKLXNjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqYWRkciwgUEtUSFJFQUQgcCkKLXsKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwNl9iaW5kKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLQlz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBuYW0gPyBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICop
OiBOVUxMOwotCi0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwotCXN0cnVjdCBpbjZw
Y2IgKmlucDY7Ci0JaW50IGVycm9yOwotCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCXJldHVybiAo
RUlOVkFMKTsKLQl9Ci0KLSNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKLQlpZiAoYWRkcikgewot
CQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJY2FzZSBBRl9JTkVU
OgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJuIChFSU5WQUwp
OwotCQkJfQotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2Ug
QUZfSU5FVDY6Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCQkJcmV0dXJu
IChFSU5WQUwpOwotCQkJfQotI2VuZGlmCi0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0Ogot
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9V
U1JSRVEsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQl9Ci0jZW5kaWYKLQlp
bnA2ID0gKHN0cnVjdCBpbjZwY2IgKilpbnA7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwg
ZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKLQlpbnA2LT5pbnBfdmZsYWcgJj0gfklOUF9JUFY0OwotCWlucDYtPmlucF92
ZmxhZyB8PSBJTlBfSVBWNjsKLSNlbHNlCi0JaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9JUFY0Owot
CWlucC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY2OwotI2VuZGlmCi0JaWYgKChhZGRyICE9IE5VTEwp
ICYmIChTQ1RQX0lQVjZfVjZPTkxZKGlucDYpID09IDApKSB7Ci0JCXN3aXRjaCAoYWRkci0+c2Ff
ZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQkvKiBiaW5kaW5nIHY0
IGFkZHIgdG8gdjYgc29ja2V0LCBzbyByZXNldCBmbGFncyAqLwotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCi0JCQlpbnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7Ci0J
CQlpbnA2LT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OwotI2Vsc2UKLQkJCWlucC0+aW5wX3ZmbGFn
IHw9IElOUF9JUFY0OwotCQkJaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OwotI2VuZGlmCi0J
CQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZfSU5FVDY6Ci0JCXsKLQkJ
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZfcDsKLQotCQkJc2luNl9wID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilhZGRyOwotCi0JCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjZf
cC0+c2luNl9hZGRyKSkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
Ci0JCQkJaW5wNi0+aW5wX3ZmbGFnIHw9IElOUF9JUFY0OwotI2Vsc2UKLQkJCQlpbnAtPmlucF92
ZmxhZyB8PSBJTlBfSVBWNDsKLSNlbmRpZgotCQkJfQotI2lmZGVmIElORVQKLQkJCWlmIChJTjZf
SVNfQUREUl9WNE1BUFBFRCgmc2luNl9wLT5zaW42X2FkZHIpKSB7Ci0JCQkJc3RydWN0IHNvY2th
ZGRyX2luIHNpbjsKLQotCQkJCWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjZfcCk7Ci0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQkJCQlpbnA2LT5pbnBfdmZsYWcgfD0g
SU5QX0lQVjQ7Ci0JCQkJaW5wNi0+aW5wX3ZmbGFnICY9IH5JTlBfSVBWNjsKLSNlbHNlCi0JCQkJ
aW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7Ci0JCQkJaW5wLT5pbnBfdmZsYWcgJj0gfklOUF9J
UFY2OwotI2VuZGlmCi0JCQkJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBOVUxMLCBwKTsKLQkJCQlyZXR1cm4gKGVycm9yKTsKLQkJCX0KLSNlbmRp
ZgotCQkJYnJlYWs7Ci0JCX0KLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQl9
IGVsc2UgaWYgKGFkZHIgIT0gTlVMTCkgewotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42X3A7
Ci0KLQkJLyogSVBWNl9WNk9OTFkgc29ja2V0ICovCi0jaWZkZWYgSU5FVAotCQlpZiAoYWRkci0+
c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKLQkJCS8qIGNhbid0IGJpbmQgdjQgYWRkciB0byB2NiBv
bmx5IHNvY2tldCEgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9
Ci0jZW5kaWYKLQkJc2luNl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCi0JCWlm
IChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNl9wLT5zaW42X2FkZHIpKSB7Ci0JCQkvKiBjYW4n
dCBiaW5kIHY0LW1hcHBlZCBhZGRycyBlaXRoZXIhICovCi0JCQkvKiBOT1RFOiB3ZSBkb24ndCBz
dXBwb3J0IFNJSVQgKi8KLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9
Ci0JfQotCWVycm9yID0gc2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBwKTsKLQlyZXR1
cm4gKGVycm9yKTsKLX0KLQotCi0jaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLXN0YXRpYyB2b2lkCi0j
ZWxzZQotdm9pZAotI2VuZGlmCi1zY3RwNl9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlz
Y3RwX2Nsb3NlKHNvKTsKLX0KLQotLyogVGhpcyBjb3VsZCBiZSBtYWRlIGNvbW1vbiB3aXRoIHNj
dHBfZGV0YWNoKCkgc2luY2UgdGhleSBhcmUgaWRlbnRpY2FsICovCi0jZWxzZQotCi0jaWYgIWRl
ZmluZWQoX19QYW5kYV9fKQotc3RhdGljCi0jZW5kaWYKLWludAotc2N0cDZfZGV0YWNoKHN0cnVj
dCBzb2NrZXQgKnNvKQotewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKLQlzY3RwX2Nsb3Nl
KHNvKTsKLQlyZXR1cm4gKDApOwotI2Vsc2UKLQlyZXR1cm4gKHNjdHBfZGV0YWNoKHNvKSk7Ci0j
ZW5kaWYKLX0KLQotI2VuZGlmCi0KLSNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCi1zdGF0aWMKLSNlbmRpZgotaW50Ci1zY3RwNl9kaXNjb25uZWN0KHN0
cnVjdCBzb2NrZXQgKnNvKQotewotCXJldHVybiAoc2N0cF9kaXNjb25uZWN0KHNvKSk7Ci19Ci0K
LQotaW50Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0g
NTAwMDAwCi1zY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBt
YnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0gICAgc3RydWN0IG1idWYgKmNvbnRyb2ws
IHN0cnVjdCB0aHJlYWQgKnApOwotCi0jZWxzZQotc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0ICpz
bywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAotICAg
IHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCk7Ci0KLSNlbmRpZgotCi0jaWYg
IWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA1MDAwMDAKLXN0YXRpYyBpbnQKLXNjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28s
IGludCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKLSAgICBz
dHJ1Y3QgbWJ1ZiAqY29udHJvbCwgc3RydWN0IHRocmVhZCAqcCkKLXsKLSNlbGlmIGRlZmluZWQo
X19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQotc3RhdGljIGludAotc2N0cDZfc2Vu
ZChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNv
Y2thZGRyICphZGRyLAotICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCkK
LXsKLSNlbHNlCi1zdGF0aWMgaW50Ci1zY3RwNl9zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
ZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqbmFtLAotICAgIHN0cnVjdCBtYnVm
ICpjb250cm9sLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBu
YW0gPyBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOiBOVUxMOwotI2VuZGlmCi0Jc3RydWN0
IHNjdHBfaW5wY2IgKmlucDsKLQlzdHJ1Y3QgaW42cGNiICppbnA2OwotCi0jaWZkZWYgSU5FVAot
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0jZW5kaWYgLyogSU5FVCAqLwotCS8qIE5vIFNQ
TCBuZWVkZWQgc2luY2Ugc2N0cF9vdXRwdXQgZG9lcyB0aGlzICovCi0KLQlpbnAgPSAoc3RydWN0
IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotCQlpZiAoY29u
dHJvbCkgewotCQkJU0NUUF9SRUxFQVNFX1BLVChjb250cm9sKTsKLQkJCWNvbnRyb2wgPSBOVUxM
OwotCQl9Ci0JCVNDVFBfUkVMRUFTRV9QS1QobSk7Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JfQotCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKLQkvKgotCSAqIEZv
ciB0aGUgVENQIG1vZGVsIHdlIG1heSBnZXQgYSBOVUxMIGFkZHIsIGlmIHdlIGFyZSBhIGNvbm5l
Y3RlZAotCSAqIHNvY2tldCB0aGF0cyBvay4KLQkgKi8KLQlpZiAoKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgJiYKLQkgICAgKGFkZHIgPT0gTlVMTCkpIHsKLQkJ
Z290byBjb25uZWN0ZWRfdHlwZTsKLQl9Ci0JaWYgKGFkZHIgPT0gTlVMTCkgewotCQlTQ1RQX1JF
TEVBU0VfUEtUKG0pOwotCQlpZiAoY29udHJvbCkgewotCQkJU0NUUF9SRUxFQVNFX1BLVChjb250
cm9sKTsKLQkJCWNvbnRyb2wgPSBOVUxMOwotCQl9Ci0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFREVTVEFERFJSRVEpOwotCQly
ZXR1cm4gKEVERVNUQUREUlJFUSk7Ci0JfQotI2lmZGVmIElORVQKLQlzaW42ID0gKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilhZGRyOwotCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucDYpKSB7Ci0JCS8q
Ci0JCSAqIGlmIElQVjZfVjZPTkxZIGZsYWcsIHdlIGRpc2NhcmQgZGF0YWdyYW1zIGRlc3RpbmVk
IHRvIGEKLQkJICogdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgotCQkgKi8KLQkJaWYgKGFkZHIt
PnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKLQkJCXJldHVybiAoRUlO
VkFMKTsKLQkJfQotCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikp
IHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JfQotCWlmIChJ
TjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkgewotCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luOwotCi0JCS8qIGNvbnZlcnQgdjQtbWFwcGVkIGludG8gdjQgYWRkciBhbmQgc2Vu
ZCAqLwotCQlpbjZfc2luNl8yX3Npbigmc2luLCBzaW42KTsKLQkJcmV0dXJuIChzY3RwX3NlbmRt
KHNvLCBmbGFncywgbSwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIGNvbnRyb2wsIHApKTsKLQl9
Ci0jZW5kaWYJCQkJLyogSU5FVCAqLwotY29ubmVjdGVkX3R5cGU6Ci0JLyogbm93IHdoYXQgYWJv
dXQgY29udHJvbCAqLwotCWlmIChjb250cm9sKSB7Ci0JCWlmIChpbnAtPmNvbnRyb2wpIHsKLQkJ
CVNDVFBfUFJJTlRGKCJodWg/IGNvbnRyb2wgc2V0P1xuIik7Ci0JCQlTQ1RQX1JFTEVBU0VfUEtU
KGlucC0+Y29udHJvbCk7Ci0JCQlpbnAtPmNvbnRyb2wgPSBOVUxMOwotCQl9Ci0JCWlucC0+Y29u
dHJvbCA9IGNvbnRyb2w7Ci0JfQotCS8qIFBsYWNlIHRoZSBkYXRhICovCi0JaWYgKGlucC0+cGt0
KSB7Ci0JCVNDVFBfQlVGX05FWFQoaW5wLT5wa3RfbGFzdCkgPSBtOwotCQlpbnAtPnBrdF9sYXN0
ID0gbTsKLQl9IGVsc2UgewotCQlpbnAtPnBrdF9sYXN0ID0gaW5wLT5wa3QgPSBtOwotCX0KLQlp
ZiAoCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCi0JLyog
RnJlZUJTRCBhbmQgTWFjT1NYIHVzZXMgYSBmbGFnIHBhc3NlZCAqLwotCSAgICAoKGZsYWdzICYg
UFJVU19NT1JFVE9DT01FKSA9PSAwKQotI2Vsc2UKLQkgICAgMQkJCS8qIE9wZW4gQlNEIGRvZXMg
bm90IGhhdmUgYW55ICJtb3JlIHRvIGNvbWUiCi0JCQkJICogaW5kaWNhdGlvbiAqLwotI2VuZGlm
Ci0JICAgICkgewotCQkvKgotCQkgKiBub3RlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lvbiB0aGlz
IGNvZGUgd2lsbCBvbmx5IGJlIHVzZWQKLQkJICogYnkgT3BlbkJTRCwgTmV0QlNEIGFuZCBGcmVl
QlNEIGhhdmUgbWV0aG9kcyBmb3IKLQkJICogcmUtZGVmaW5pbmcgc29zZW5kKCkgdG8gdXNlIHNj
dHBfc29zZW5kKCkuICBPbmUgY2FuCi0JCSAqIG9wdGlvbmFseSBzd2l0Y2ggYmFjayB0byB0aGlz
IGNvZGUgKGJ5IGNoYW5naW5nIGJhY2sgdGhlCi0JCSAqIGRlZmluaW5pdGlvbnMgYnV0IHRoaXMg
aXMgbm90IGFkdmlzYWJsZS4KLQkJICovCi0JCWludCByZXQ7Ci0KLQkJcmV0ID0gc2N0cF9vdXRw
dXQoaW5wLCBpbnAtPnBrdCwgYWRkciwgaW5wLT5jb250cm9sLCBwLCBmbGFncyk7Ci0JCWlucC0+
cGt0ID0gTlVMTDsKLQkJaW5wLT5jb250cm9sID0gTlVMTDsKLQkJcmV0dXJuIChyZXQpOwotCX0g
ZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKLXN0YXRpYyBpbnQKLXNjdHA2
X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0
IHRocmVhZCAqcCkKLXsKLSNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19B
UFBMRV9fKQotc3RhdGljIGludAotc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgcHJvYyAqcCkKLXsKLSNlbGlmIGRlZmluZWQoX19Q
YW5kYV9fKQotaW50Ci1zY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsIHZvaWQgKnApCi17Ci0jZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQotc3Rh
dGljIGludAotc2N0cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRy
ICphZGRyLCBQS1RIUkVBRCBwKQotewotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50
Ci1zY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIp
Ci17Ci0Jdm9pZCAqcCA9IE5VTEw7Ci0jZWxzZQotc3RhdGljIGludAotc2N0cDZfY29ubmVjdChz
dHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSwgc3RydWN0IHByb2MgKnApCi17Ci0J
c3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLSNl
bmRpZgotCXVpbnQzMl90IHZyZl9pZDsKLQlpbnQgZXJyb3IgPSAwOwotCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7Ci0Jc3RydWN0IHNjdHBfdGNiICpzdGNiOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qg
aW42cGNiICppbnA2OwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JdW5pb24gc2N0cF9z
b2Nrc3RvcmUgc3RvcmU7Ci0jZW5kaWYKLQotI2lmZGVmIElORVQKLQlpbnA2ID0gKHN0cnVjdCBp
bjZwY2IgKilzby0+c29fcGNiOwotI2VuZGlmCi0JaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICop
c28tPnNvX3BjYjsKLQlpZiAoaW5wID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVDT05OUkVTRVQpOwotCQly
ZXR1cm4gKEVDT05OUkVTRVQpOwkvKiBJIG1hZGUgdGhlIHNhbWUgYXMgVENQIHNpbmNlIHdlIGFy
ZQotCQkJCQkgKiBub3Qgc2V0dXA/ICovCi0JfQotCWlmIChhZGRyID09IE5VTEwpIHsKLQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEs
IEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0jaWYgIWRlZmluZWQoX19XaW5kb3dz
X18pCi0Jc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JY2FzZSBBRl9J
TkVUOgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5WQUwp
OwotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCWNhc2UgQUZf
SU5FVDY6Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpIHsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5W
QUwpOwotCQl9Ci0jZW5kaWYKLQkJYnJlYWs7Ci0jZW5kaWYKLQlkZWZhdWx0OgotCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlO
VkFMKTsKLQkJcmV0dXJuIChFSU5WQUwpOwotCX0KLSNlbmRpZgotCi0JdnJmX2lkID0gaW5wLT5k
ZWZfdnJmX2lkOwotCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOwotCVNDVFBfSU5QX1JMT0NL
KGlucCk7Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9
PQotCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7Ci0JCS8qIEJpbmQgYSBlcGhlbWVyYWwg
cG9ydCAqLwotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JCWVycm9yID0gc2N0cDZfYmluZChz
bywgTlVMTCwgcCk7Ci0JCWlmIChlcnJvcikgewotCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0so
aW5wKTsKLQotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
LQl9Ci0JaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSAmJgot
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSkgewotCQkv
KiBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQgQU5EIHRoZSBUQ1AgbW9kZWwgKi8KLQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOwotCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwg
RUFERFJJTlVTRSk7Ci0JCXJldHVybiAoRUFERFJJTlVTRSk7Ci0JfQotI2lmZGVmIElORVQKLQlz
aW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwotCWlmIChTQ1RQX0lQVjZfVjZPTkxZ
KGlucDYpKSB7Ci0JCS8qCi0JCSAqIGlmIElQVjZfVjZPTkxZIGZsYWcsIGlnbm9yZSBjb25uZWN0
aW9ucyBkZXN0aW5lZCB0byBhIHY0Ci0JCSAqIGFkZHIgb3IgdjQtbWFwcGVkIGFkZHIKLQkJICov
Ci0JCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgewotCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOwotCQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwp
OwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgm
c2luNi0+c2luNl9hZGRyKSkgewotCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwotCQkJU0NUUF9B
U09DX0NSRUFURV9VTkxPQ0soaW5wKTsKLQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJcmV0dXJuIChFSU5W
QUwpOwotCQl9Ci0JfQotCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRy
KSkgewotCQkvKiBjb252ZXJ0IHY0LW1hcHBlZCBpbnRvIHY0IGFkZHIgKi8KLQkJaW42X3NpbjZf
Ml9zaW4oJnN0b3JlLnNpbiwgc2luNik7Ci0JCWFkZHIgPSAmc3RvcmUuc2E7Ci0JfQotI2VuZGlm
CQkJCS8qIElORVQgKi8KLQkvKiBOb3cgZG8gd2UgY29ubmVjdD8gKi8KLQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB7Ci0JCXN0Y2IgPSBMSVNUX0ZJUlNU
KCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQkJaWYgKHN0Y2IpIHsKLQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKLQkJfQotCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0JfSBlbHNlIHsKLQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOwotCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOwotCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7Ci0JCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsIE5VTEwsIE5VTEwsIE5VTEwpOwotCQlp
ZiAoc3RjYiA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwotCQkJU0NUUF9JTlBf
REVDUl9SRUYoaW5wKTsKLQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKLQkJfQotCX0KLQotCWlm
IChzdGNiICE9IE5VTEwpIHsKLQkJLyogQWxyZWFkeSBoYXZlIG9yIGFtIGJyaW5nIHVwIGFuIGFz
c29jaWF0aW9uICovCi0JCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7Ci0JCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVBTFJFQURZKTsKLQkJcmV0dXJuIChFQUxSRUFEWSk7Ci0J
fQotCS8qIFdlIGFyZSBHT09EIHRvIGdvICovCi0Jc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhpbnAs
IGFkZHIsICZlcnJvciwgMCwgdnJmX2lkLAotCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5z
Y3RwX2VwLnByZV9vcGVuX3N0cmVhbV9jb3VudCwKLQkgICAgICAgICAgICAgICAgICAgICAgIGlu
cC0+c2N0cF9lcC5wb3J0LCBwKTsKLQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOwotCWlm
IChzdGNiID09IE5VTEwpIHsKLQkJLyogR2FrISBubyBtZW1vcnkgKi8KLQkJcmV0dXJuIChlcnJv
cik7Ci0JfQotCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgewotCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRDsKLQkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUg
ZGF0YSAqLwotCQlzb2lzY29ubmVjdGluZyhzbyk7Ci0JfQotCXN0Y2ItPmFzb2Muc3RhdGUgPSBT
Q1RQX1NUQVRFX0NPT0tJRV9XQUlUOwotCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNi
LT5hc29jLnRpbWVfZW50ZXJlZCk7Ci0KLQkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBh
cmFtZXRlcnMgZm9yIHRoZSBhc3NvYyAqLwotCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhp
bnAsIHN0Y2IpOwotCi0Jc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NL
RUQpOwotCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotc3Rh
dGljIGludAotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKQotc2N0cDZfZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2thZGRyICoqYWRkcikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owot
I2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCi1zY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLSNlbHNlCi1zY3RwNl9nZXRhZGRyKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYg
KnNpbjYgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKLSNlbmRpZgotCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7Ci0JdWludDMyX3QgdnJmX2lkOwotCXN0cnVjdCBzY3RwX2lmYSAq
c2N0cF9pZmE7Ci0KLSNpZmRlZiBTQ1RQX0tBTUUKLQlpbnQgZXJyb3I7Ci0jZW5kaWYgLyogU0NU
UF9LQU1FICovCi0KLQkvKgotCSAqIERvIHRoZSBtYWxsb2MgZmlyc3QgaW4gY2FzZSBpdCBibG9j
a3MuCi0JICovCi0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVj
dCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mKCpzaW42KSk7Ci0JaWYgKHNpbjYgPT0gTlVMTCkKLQkJ
cmV0dXJuIChFTk9NRU0pOwotI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCi0JbWVtc2V0KHNpbjYs
IDAsIHNpemVvZigqc2luNikpOwotI2Vsc2UKLQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigq
c2luNik7Ci0JbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotI2VuZGlmCi0Jc2luNi0+
c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0Jc2luNi0+c2lu
Nl9sZW4gPSBzaXplb2YoKnNpbjYpOwotI2VuZGlmCi0KLQlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKilzby0+c29fcGNiOwotCWlmIChpbnAgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlT
Q1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKLQkJcmV0
dXJuIChFQ09OTlJFU0VUKTsKLQl9Ci0JU0NUUF9JTlBfUkxPQ0soaW5wKTsKLQlzaW42LT5zaW42
X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7Ci0JaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EQUxMKSB7Ci0JCS8qIEZvciB0aGUgYm91bmQgYWxsIGNhc2UgeW91IGdldCBi
YWNrIDAgKi8KLQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkgewotCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOwotCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luX2E2OwotCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OwotCQkJaW50IGZuZDsKLQkJCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQkJCWlmIChzdGNiID09IE5VTEwp
IHsKLQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQkJU0NUUF9G
UkVFX1NPTkFNRShzaW42KTsKLSNlbmRpZgotCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOwotCQkJCXJldHVybiAo
RU5PRU5UKTsKLQkJCX0KLQkJCWZuZCA9IDA7Ci0JCQlzaW5fYTYgPSBOVUxMOwotCQkJVEFJTFFf
Rk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgewotCQkJCXNpbl9hNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKLQkJCQlpZiAoc2luX2E2
ID09IE5VTEwpCi0JCQkJCS8qIHRoaXMgd2lsbCBtYWtlIGNvdmVyaXR5IGhhcHB5ICovCi0JCQkJ
CWNvbnRpbnVlOwotCi0JCQkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsK
LQkJCQkJZm5kID0gMTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQotCQkJfQotCQkJaWYgKCghZm5kKSB8
fCAoc2luX2E2ID09IE5VTEwpKSB7Ci0JCQkJLyogcHVudCAqLwotCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2Vu
ZGlmCi0JCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVOT0VOVCk7Ci0JCQkJcmV0dXJuIChFTk9FTlQpOwotCQkJfQotCQkJdnJm
X2lkID0gaW5wLT5kZWZfdnJmX2lkOwotCQkJc2N0cF9pZmEgPSBzY3RwX3NvdXJjZV9hZGRyZXNz
X3NlbGVjdGlvbihpbnAsIHN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywgbmV0LCAwLCB2
cmZfaWQpOwotCQkJaWYgKHNjdHBfaWZhKSB7Ci0JCQkJc2luNi0+c2luNl9hZGRyID0gc2N0cF9p
ZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQkvKiBGb3Ig
dGhlIGJvdW5kIGFsbCBjYXNlIHlvdSBnZXQgYmFjayAwICovCi0JCQltZW1zZXQoJnNpbjYtPnNp
bjZfYWRkciwgMCwgc2l6ZW9mKHNpbjYtPnNpbjZfYWRkcikpOwotCQl9Ci0JfSBlbHNlIHsKLQkJ
LyogVGFrZSB0aGUgZmlyc3QgSVB2NiBhZGRyZXNzIGluIHRoZSBsaXN0ICovCi0JCXN0cnVjdCBz
Y3RwX2xhZGRyICpsYWRkcjsKLQkJaW50IGZuZCA9IDA7Ci0KLQkJTElTVF9GT1JFQUNIKGxhZGRy
LCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgewotCQkJaWYgKGxhZGRyLT5p
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0JCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luX2E7Ci0KLQkJCQlzaW5fYSA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7
Ci0JCQkJc2luNi0+c2luNl9hZGRyID0gc2luX2EtPnNpbjZfYWRkcjsKLQkJCQlmbmQgPSAxOwot
CQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICghZm5kKSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCi0JCQlT
Q1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2
X1VTUlJFUSwgRU5PRU5UKTsKLQkJCXJldHVybiAoRU5PRU5UKTsKLQkJfQotCX0KLQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7Ci0JLyogU2NvcGluZyB0aGluZ3MgZm9yIHY2ICovCi0jaWZkZWYgU0NU
UF9FTUJFRERFRF9WNl9TQ09QRQotI2lmZGVmIFNDVFBfS0FNRQotCWlmICgoZXJyb3IgPSBzYTZf
cmVjb3ZlcnNjb3BlKHNpbjYpKSAhPSAwKSB7Ci0JCVNDVFBfRlJFRV9TT05BTUUoc2luNik7Ci0J
CXJldHVybiAoZXJyb3IpOwotCX0KLSNlbHNlCi0JaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwo
JnNpbjYtPnNpbjZfYWRkcikpCi0JCS8qIHNraXAgaWZwIGNoZWNrIGJlbG93ICovCi0JCWluNl9y
ZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7Ci0JZWxzZQotCQlzaW42
LT5zaW42X3Njb3BlX2lkID0gMDsJLyogWFhYICovCi0jZW5kaWYgLyogU0NUUF9LQU1FICovCi0j
ZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCSgqYWRk
cikgPSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0K
LXN0YXRpYyBpbnQKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXNjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7Ci0jZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKLXNjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCi17Ci0Jc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKLSNlbHNlCi1zY3RwNl9wZWVyYWRk
cihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42ID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7Ci0jZW5kaWYK
LQlpbnQgZm5kOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbl9hNjsKLQlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOwotCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKLQlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7Ci0jaWZkZWYgU0NUUF9LQU1FCi0JaW50IGVycm9yOwotI2VuZGlmCi0KLQkvKiBEbyB0aGUg
bWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLiAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCVNDVFBf
TUFMTE9DX1NPTkFNRShzaW42LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHNpemVvZiAqc2luNik7
Ci0JaWYgKHNpbjYgPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9NRU0pOwotI2VsaWYgZGVmaW5lZChf
X1BhbmRhX18pCi0JbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOwotI2Vsc2UKLQlTQ1RQ
X0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luNik7Ci0JbWVtc2V0KHNpbjYsIDAsIHNpemVvZigq
c2luNikpOwotI2VuZGlmCi0Jc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSNpZmRlZiBI
QVZFX1NJTjZfTEVOCi0Jc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOwotI2VuZGlmCi0K
LQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOwotCWlmICgoaW5wID09IE5V
TEwpIHx8Ci0JICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVE
KSA9PSAwKSkgewotCQkvKiBVRFAgdHlwZSBhbmQgbGlzdGVuZXJzIHdpbGwgZHJvcCBvdXQgaGVy
ZSAqLwotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0J
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNS
UkVRLCBFTk9UQ09OTik7Ci0JCXJldHVybiAoRU5PVENPTk4pOwotCX0KLQlTQ1RQX0lOUF9STE9D
SyhpbnApOwotCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKLQlpZiAo
c3RjYikgewotCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwotCX0KLQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7Ci0JaWYgKHN0Y2IgPT0gTlVMTCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09O
QU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKLQkJcmV0dXJuIChFQ09OTlJF
U0VUKTsKLQl9Ci0JZm5kID0gMDsKLQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7Ci0JCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+
cm8uX2xfYWRkcjsKLQkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKLQkJ
CWZuZCA9IDE7Ci0JCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKLQkJCXNpbjYtPnNp
bjZfYWRkciA9IHNpbl9hNi0+c2luNl9hZGRyOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOwotCWlmICghZm5kKSB7Ci0JCS8qIE5vIElQdjQgYWRkcmVzcyAqLwot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwotI2VuZGlmCi0JCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBF
Tk9FTlQpOwotCQlyZXR1cm4gKEVOT0VOVCk7Ci0JfQotI2lmZGVmIFNDVFBfRU1CRURERURfVjZf
U0NPUEUKLSNpZmRlZiBTQ1RQX0tBTUUKLQlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZShz
aW42KSkgIT0gMCkgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwot
I2VuZGlmCi0JCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUDZfVVNSUkVRLCBlcnJvcik7Ci0JCXJldHVybiAoZXJyb3IpOwotCX0KLSNlbHNlCi0JaW42
X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKLSNlbmRpZiAvKiBT
Q1RQX0tBTUUgKi8KLSNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCi0jaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pCi0JKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKLSNlbmRpZgotCXJldHVy
biAoMCk7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXN0YXRpYyBpbnQKLXNjdHA2X2luNmdldGFkZHIo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSkKLXsKLSNlbGlmIGRlZmlu
ZWQoX19QYW5kYV9fKQotaW50Ci1zY3RwNl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2FkZHIgKm5hbSwgdWludDMyX3QgKm5hbWVsZW4pCi17Ci0Jc3RydWN0IHNvY2th
ZGRyICphZGRyID0gbmFtOwotI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3Rw
Nl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQotewotI2lm
ZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2th
ZGRyICopOwotI2VuZGlmCi0jZWxzZQotc3RhdGljIGludAotc2N0cDZfaW42Z2V0YWRkcihzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKLXsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0
IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLSNlbmRpZgot
I2VuZGlmCi0Jc3RydWN0IGluNnBjYiAqaW5wNiA9IHNvdG9pbjZwY2Ioc28pOwotCWludCBlcnJv
cjsKLQotCWlmIChpbnA2ID09IE5VTEwpIHsKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQlyZXR1cm4gKEVJ
TlZBTCk7Ci0JfQotCi0JLyogYWxsb3cgdjYgYWRkcmVzc2VzIHByZWNlZGVuY2UgKi8KLQllcnJv
ciA9IHNjdHA2X2dldGFkZHIoc28sIG5hbSk7Ci0jaWZkZWYgSU5FVAotCWlmIChlcnJvcikgewot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQotCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OwotI2Vsc2UKLQkJc3Ry
dWN0IHNvY2thZGRyX2luNiBzaW42OwotI2VuZGlmCi0KLQkJLyogdHJ5IHY0IG5leHQgaWYgdjYg
ZmFpbGVkICovCi0JCWVycm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7Ci0JCWlmIChlcnJv
cikgewotCQkJcmV0dXJuIChlcnJvcik7Ci0JCX0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLQkJU0NUUF9NQUxM
T0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKLQkJ
aWYgKHNpbjYgPT0gTlVMTCkgewotCQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKLQkJCXJldHVy
biAoRU5PTUVNKTsKLQkJfQotCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKikqbmFtLCBzaW42KTsKLQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKLQkJKm5hbSA9IChz
dHJ1Y3Qgc29ja2FkZHIgKilzaW42OwotI2Vsc2UKLQkJaW42X3Npbl8yX3Y0bWFwc2luNigoc3Ry
dWN0IHNvY2thZGRyX2luICopYWRkciwgJnNpbjYpOwotCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJbWVtY3B5KGFkZHIsICZzaW42LCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOwotI2VuZGlmCi0JfQotI2VuZGlmCi0jaWYgZGVmaW5lZChf
X1BhbmRhX18pCi0JKm5hbWVsZW4gPSBuYW0tPnNhX2xlbjsKLSNlbmRpZgotCXJldHVybiAoZXJy
b3IpOwotfQotCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXN0YXRpYyBpbnQKLXNjdHA2X2dldHBlZXJhZGRy
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pCi17Ci0jZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLWludAotc2N0cDZfZ2V0cGVlcmFkZHIoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYWRkciAqbmFtLCB1aW50MzJfdCAqbmFtZWxlbikKLXsKLQlzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopbmFtOwotI2VsaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQotaW50Ci1zY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IG1idWYgKm5hbSkKLXsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyICphZGRyID0g
bXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKLSNlbmRpZgotI2Vsc2UKLXN0YXRpYwotaW50
Ci1zY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkK
LXsKLSNpZmRlZiBJTkVUCi0Jc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVj
dCBzb2NrYWRkciAqKTsKLSNlbmRpZgotCi0jZW5kaWYKLQlzdHJ1Y3QgaW42cGNiICppbnA2ID0g
c290b2luNnBjYihzbyk7Ci0JaW50IGVycm9yOwotCi0JaWYgKGlucDYgPT0gTlVMTCkgewotCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JS
RVEsIEVJTlZBTCk7Ci0JCXJldHVybiAoRUlOVkFMKTsKLQl9Ci0KLQkvKiBhbGxvdyB2NiBhZGRy
ZXNzZXMgcHJlY2VkZW5jZSAqLwotCWVycm9yID0gc2N0cDZfcGVlcmFkZHIoc28sIG5hbSk7Ci0j
aWZkZWYgSU5FVAotCWlmIChlcnJvcikgewotI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OwotI2Vsc2UKLQkJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OwotI2VuZGlm
Ci0KLQkJLyogdHJ5IHY0IG5leHQgaWYgdjYgZmFpbGVkICovCi0JCWVycm9yID0gc2N0cF9wZWVy
YWRkcihzbywgbmFtKTsKLQkJaWYgKGVycm9yKSB7Ci0JCQlyZXR1cm4gKGVycm9yKTsKLQkJfQot
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQotCQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRy
X2luNiAqLCBzaXplb2YgKnNpbjYpOwotCQlpZiAoc2luNiA9PSBOVUxMKSB7Ci0JCQlTQ1RQX0ZS
RUVfU09OQU1FKCpuYW0pOwotCQkJcmV0dXJuIChFTk9NRU0pOwotCQl9Ci0JCWluNl9zaW5fMl92
NG1hcHNpbjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOwotCQlTQ1RQX0ZSRUVf
U09OQU1FKCpuYW0pOwotCQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7Ci0jZWxzZQot
CQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyLCAmc2luNik7
Ci0JCVNDVFBfQlVGX0xFTihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQlt
ZW1jcHkoYWRkciwgJnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0jZW5kaWYK
LQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fUGFuZGFfXykKLQkqbmFtZWxlbiA9IG5hbS0+c2Ff
bGVuOwotI2VuZGlmCi0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLSNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKLXN0cnVj
dCBwcl91c3JyZXFzIHNjdHA2X3VzcnJlcXMgPSB7Ci0jaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
LQkucHJ1X2Fib3J0ID0gc2N0cDZfYWJvcnQsCi0JLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwK
LQkucHJ1X2F0dGFjaCA9IHNjdHA2X2F0dGFjaCwKLQkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAot
CS5wcnVfY29ubmVjdCA9IHNjdHA2X2Nvbm5lY3QsCi0JLnBydV9jb250cm9sID0gaW42X2NvbnRy
b2wsCi0jaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNjkwMDAwCi0JLnBydV9jbG9zZSA9IHNjdHA2
X2Nsb3NlLAotCS5wcnVfZGV0YWNoID0gc2N0cDZfY2xvc2UsCi0JLnBydV9zb3BvbGwgPSBzb3Bv
bGxfZ2VuZXJpYywKLQkucHJ1X2ZsdXNoID0gc2N0cF9mbHVzaCwKLSNlbHNlCi0JLnBydV9kZXRh
Y2ggPSBzY3RwNl9kZXRhY2gsCi0JLnBydV9zb3BvbGwgPSBzb3BvbGwsCi0jZW5kaWYKLQkucHJ1
X2Rpc2Nvbm5lY3QgPSBzY3RwNl9kaXNjb25uZWN0LAotCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0
ZW4sCi0JLnBydV9wZWVyYWRkciA9IHNjdHA2X2dldHBlZXJhZGRyLAotCS5wcnVfc2VuZCA9IHNj
dHA2X3NlbmQsCi0JLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCi0JLnBydV9zb2NrYWRk
ciA9IHNjdHA2X2luNmdldGFkZHIsCi0JLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKLQkucHJ1
X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlCi0jZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKLQku
cHJ1X2Fib3J0ID0gc2N0cDZfYWJvcnQsCi0JLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKLQku
cHJ1X2F0dGFjaCA9IHNjdHA2X2F0dGFjaCwKLQkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAotCS5w
cnVfY29ubmVjdCA9IHNjdHA2X2Nvbm5lY3QsCi0JLnBydV9jb25uZWN0MiA9IHBydV9jb25uZWN0
Ml9ub3RzdXBwLAotCS5wcnVfY29udHJvbCA9IGluNl9jb250cm9sLAotCS5wcnVfZGV0YWNoID0g
c2N0cDZfZGV0YWNoLAotCS5wcnVfZGlzY29ubmVjdCA9IHNjdHA2X2Rpc2Nvbm5lY3QsCi0JLnBy
dV9saXN0ZW4gPSBzY3RwX2xpc3RlbiwKLQkucHJ1X3BlZXJhZGRyID0gc2N0cDZfZ2V0cGVlcmFk
ZHIsCi0JLnBydV9yY3ZkID0gTlVMTCwKLQkucHJ1X3Jjdm9vYiA9IHBydV9yY3Zvb2Jfbm90c3Vw
cCwKLQkucHJ1X3NlbmQgPSBzY3RwNl9zZW5kLAotCS5wcnVfc2Vuc2UgPSBwcnVfc2Vuc2VfbnVs
bCwKLQkucHJ1X3NodXRkb3duID0gc2N0cF9zaHV0ZG93biwKLQkucHJ1X3NvY2thZGRyID0gc2N0
cDZfaW42Z2V0YWRkciwKLQkucHJ1X3Nvc2VuZCA9IHNjdHBfc29zZW5kLAotCS5wcnVfc29yZWNl
aXZlID0gc2N0cF9zb3JlY2VpdmUsCi0JLnBydV9zb3BvbGwgPSBzb3BvbGwKLSNlbGlmIGRlZmlu
ZWQoX19XaW5kb3dzX18pCi0Jc2N0cDZfYWJvcnQsCi0Jc2N0cF9hY2NlcHQsCi0Jc2N0cDZfYXR0
YWNoLAotCXNjdHA2X2JpbmQsCi0Jc2N0cDZfY29ubmVjdCwKLQlwcnVfY29ubmVjdDJfbm90c3Vw
cCwKLQlOVUxMLAotCU5VTEwsCi0Jc2N0cDZfZGlzY29ubmVjdCwKLQlzY3RwX2xpc3RlbiwKLQlz
Y3RwNl9nZXRwZWVyYWRkciwKLQlOVUxMLAotCXBydV9yY3Zvb2Jfbm90c3VwcCwKLQlOVUxMLAot
CXBydV9zZW5zZV9udWxsLAotCXNjdHBfc2h1dGRvd24sCi0Jc2N0cF9mbHVzaCwKLQlzY3RwNl9p
bjZnZXRhZGRyLAotCXNjdHBfc29zZW5kLAotCXNjdHBfc29yZWNlaXZlLAotCXNvcG9sbF9nZW5l
cmljLAotCU5VTEwsCi0Jc2N0cDZfY2xvc2UKLSNlbmRpZgotfTsKLQotI2VsaWYgIWRlZmluZWQo
X19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zY3RwNl91c3JyZXEo
c28sIHJlcSwgbSwgbmFtLCBjb250cm9sLCBwKQotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCBy
ZXE7Ci0Jc3RydWN0IG1idWYgKm0sICpuYW0sICpjb250cm9sOwotCXN0cnVjdCBwcm9jICpwOwot
ewotCWludCBzOwotCWludCBlcnJvciA9IDA7Ci0JaW50IGZhbWlseTsKLQl1aW50MzJfdCB2cmZf
aWQ7Ci0JZmFtaWx5ID0gc28tPnNvX3Byb3RvLT5wcl9kb21haW4tPmRvbV9mYW1pbHk7Ci0KLQlp
ZiAocmVxID09IFBSVV9DT05UUk9MKSB7Ci0JCXN3aXRjaCAoZmFtaWx5KSB7Ci0JCWNhc2UgUEZf
SU5FVDoKLQkJCWVycm9yID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAot
CQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sCi0JCQkgICAgKTsKLSNpZmRlZiBJTkVUNgot
CQljYXNlIFBGX0lORVQ2OgotCQkJZXJyb3IgPSBpbjZfY29udHJvbChzbywgKGxvbmcpbSwgKGNh
ZGRyX3QpbmFtLAotCQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sLCBwKTsKLSNlbmRpZgot
CQlkZWZhdWx0OgotCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOwotCQkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7Ci0JCX0KLQkJcmV0dXJuIChlcnJvcik7Ci0JfQotCXN3aXRjaCAocmVxKSB7Ci0JY2FzZSBQ
UlVfQVRUQUNIOgotCQllcnJvciA9IHNjdHA2X2F0dGFjaChzbywgZmFtaWx5LCBwKTsKLQkJYnJl
YWs7Ci0JY2FzZSBQUlVfREVUQUNIOgotCQllcnJvciA9IHNjdHA2X2RldGFjaChzbyk7Ci0JCWJy
ZWFrOwotCWNhc2UgUFJVX0JJTkQ6Ci0JCWlmIChuYW0gPT0gTlVMTCkgewotCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5W
QUwpOwotCQkJcmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cDZfYmluZChzbywg
bmFtLCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfTElTVEVOOgotCQllcnJvciA9IHNjdHBfbGlz
dGVuKHNvLCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfQ09OTkVDVDoKLQkJaWYgKG5hbSA9PSBO
VUxMKSB7Ci0JCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7Ci0JCQlyZXR1cm4gKEVJTlZBTCk7Ci0JCX0KLQkJZXJy
b3IgPSBzY3RwNl9jb25uZWN0KHNvLCBuYW0sIHApOwotCQlicmVhazsKLQljYXNlIFBSVV9ESVND
T05ORUNUOgotCQllcnJvciA9IHNjdHA2X2Rpc2Nvbm5lY3Qoc28pOwotCQlicmVhazsKLQljYXNl
IFBSVV9BQ0NFUFQ6Ci0JCWlmIChuYW0gPT0gTlVMTCkgewotCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOwotCQkJ
cmV0dXJuIChFSU5WQUwpOwotCQl9Ci0JCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7Ci0J
CWJyZWFrOwotCWNhc2UgUFJVX1NIVVRET1dOOgotCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28p
OwotCQlicmVhazsKLQotCWNhc2UgUFJVX1JDVkQ6Ci0JCS8qCi0JCSAqIEZvciBPcGVuQlNEIGFu
ZCBOZXRCU0QsIHRoaXMgaXMgcmVhbCB1Z2x5LiBUaGUgKG1idWYgKikKLQkJICogbmFtIHRoYXQg
aXMgcGFzc2VkIChieSBzb3JlY2VpdmUoKSkgaXMgdGhlIGludCBmbGFncyBjYXN0Ci0JCSAqIGFz
IGEgKG1idWYgKikgeXVjayEKLQkJICovCi0JCWVycm9yID0gc2N0cF91c3JfcmVjdmQoc28sIChp
bnQpKChsb25nKW5hbSkpOwotCQlicmVhazsKLQotCWNhc2UgUFJVX1NFTkQ6Ci0JCS8qIEZsYWdz
IGFyZSBpZ25vcmVkICovCi0JCWVycm9yID0gc2N0cDZfc2VuZChzbywgMCwgbSwgbmFtLCBjb250
cm9sLCBwKTsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfQUJPUlQ6Ci0JCWVycm9yID0gc2N0cDZfYWJv
cnQoc28pOwotCQlicmVhazsKLQotCWNhc2UgUFJVX1NFTlNFOgotCQllcnJvciA9IDA7Ci0JCWJy
ZWFrOwotCWNhc2UgUFJVX1JDVk9PQjoKLQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOwotCQllcnJvciA9
IEVBRk5PU1VQUE9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVfU0VORE9PQjoKLQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZO
T1NVUFBPUlQpOwotCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKLQkJYnJlYWs7Ci0JY2FzZSBQUlVf
UEVFUkFERFI6Ci0JCWVycm9yID0gc2N0cDZfZ2V0cGVlcmFkZHIoc28sIG5hbSk7Ci0JCWJyZWFr
OwotCWNhc2UgUFJVX1NPQ0tBRERSOgotCQllcnJvciA9IHNjdHA2X2luNmdldGFkZHIoc28sIG5h
bSk7Ci0JCWJyZWFrOwotCWNhc2UgUFJVX1NMT1dUSU1POgotCQllcnJvciA9IDA7Ci0JCWJyZWFr
OwotCWRlZmF1bHQ6Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLSNlbmRpZgot
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaCBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL25ldGluZXQ2L3NjdHA2X3Zhci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAy
ZGNhNjg0MTAzZGQ4NzA5ZmQ5NjYxZTU3NWEzMjlhYjI5MjkwYzg4Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zh
ci5oCisrKyAvZGV2L251bGwKQEAgLTEsODcgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhl
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUgbWV0OgotICoKLSAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKLSAqICAgIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKgotICogYikgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbgotICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogYykgTmVpdGhlciB0
aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCi0gKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKLSAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZmRlZiBfX0ZyZWVCU0RfXwotI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgotX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0
Ni9zY3RwNl92YXIuaCAzMTc0NTcgMjAxNy0wNC0yNiAxOToyNjo0MFogdHVleGVuICQiKTsKLSNl
bmRpZgotCi0jaWZuZGVmIF9ORVRJTkVUNl9TQ1RQNl9WQVJfSF8KLSNkZWZpbmUgX05FVElORVQ2
X1NDVFA2X1ZBUl9IXwotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotI2lmZGVmIElORVQK
LWV4dGVybiB2b2lkIGluNl9zaW42XzJfc2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopOwotZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9zaW5faW5fc29jayhzdHJ1
Y3Qgc29ja2FkZHIgKik7Ci1leHRlcm4gdm9pZCBpbjZfc2luXzJfdjRtYXBzaW42KHN0cnVjdCBz
b2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotI2VuZGlmCi0jZW5kaWYKLSNp
ZiBkZWZpbmVkKF9LRVJORUwpCi0KLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCAoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQotU1lTQ1RMX0RFQ0woX25ldF9pbmV0Nl9zY3Rw
Nik7Ci1leHRlcm4gc3RydWN0IHByX3VzcnJlcXMgc2N0cDZfdXNycmVxczsKLSNlbHNlCi1pbnQg
c2N0cDZfdXNycmVxKHN0cnVjdCBzb2NrZXQgKiwgaW50LCBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qg
bWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX0FQUExFX18p
Ci1pbnQgc2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKiosIGludCAqKTsKLWludCBzY3RwNl9pbnB1
dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKiosIGludCAqLCB1aW50MTZfdCk7Ci0jZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKLWludCBzY3RwNl9pbnB1dCAocGFraGFuZGxlX3R5cGUgKik7Ci0jZWxp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMjAwMAotaW50
IHNjdHA2X2lucHV0IF9fUCgoc3RydWN0IG1idWYgKiosIGludCAqLCBpbnQpKTsKLWludCBzY3Rw
Nl9pbnB1dF93aXRoX3BvcnQgX19QKChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIHVpbnQxNl90KSk7
Ci0jZWxzZQotaW50IHNjdHA2X2lucHV0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwgaW50KTsKLWlu
dCBzY3RwNl9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKiosIGludCAqLCB1aW50MTZfdCk7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8
IDkwMjAwMAotaW50IHNjdHA2X291dHB1dAotX19QKChzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1
Y3QgbWJ1ZiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKLSAgICAgc3RydWN0IG1idWYgKiwgc3RydWN0
IHByb2MgKikpOwotdm9pZCBzY3RwNl9jdGxpbnB1dCBfX1AoKGludCwgc3RydWN0IHNvY2thZGRy
ICosIHZvaWQgKikpOwotI2Vsc2UKLWludCBzY3RwNl9vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2Ig
Kiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHNvY2thZGRyICosCi0gICAgICAgICAgICAgICAgIHN0
cnVjdCBtYnVmICosIHN0cnVjdCBwcm9jICopOwotdm9pZCBzY3RwNl9jdGxpbnB1dChpbnQsIHN0
cnVjdCBzb2NrYWRkciAqLCB2b2lkICopOwotI2VuZGlmCi0jaWYgIShkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykpCi1leHRlcm4gdm9pZCBpbjZfc2luXzJfdjRtYXBz
aW42KHN0cnVjdCBzb2NrYWRkcl9pbiAqLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOwotZXh0ZXJu
IHZvaWQgaW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRk
cl9pbjYgKik7Ci1leHRlcm4gdm9pZCBpbjZfc2luNl8yX3Npbl9pbl9zb2NrKHN0cnVjdCBzb2Nr
YWRkciAqKTsKLSNlbmRpZgotdm9pZCBzY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKiwg
c3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwKLSAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQzMl90KTsKLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy8uZ2l0YXR0cmlidXRlcyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zLy5n
aXRhdHRyaWJ1dGVzCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjk1YjViOWJhODky
MmQxNTRlZGUxMjg3MGJiNDdmY2Q1YWMzODgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zLy5naXRhdHRyaWJ1dGVzCisrKyAv
ZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotZGlzY2FyZF9zZXJ2ZXIuYyBzdm4tcHJvcGVydGll
cz1hbGxvdy10YWJzPW9uCi1lY2hvX3NlcnZlci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9
b24KLWVrcl9jbGllbnQuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1la3JfbG9vcC5j
IHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRhYnM9b24KLWVrcl9sb29wX29mZmxvYWQuYyBzdm4tcHJv
cGVydGllcz1hbGxvdy10YWJzPW9uCi1la3JfcGVlci5jIHN2bi1wcm9wZXJ0aWVzPWFsbG93LXRh
YnM9b24KLWVrcl9zZXJ2ZXIuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi1ydGN3ZWIu
YyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCi10ZXN0X3RpbWVyLmMgc3ZuLXByb3BlcnRp
ZXM9YWxsb3ctdGFicz1vbgotdHNjdHAuYyBzdm4tcHJvcGVydGllcz1hbGxvdy10YWJzPW9uCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3By
b2dyYW1zL0NNYWtlTGlzdHMudHh0CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFk
OGMyZTQ4YzUzOTEuLmFiNGM3ZmRhMzliNzEzZGM4Y2Q0MWVlMDFlNWM5N2QzZWVmMWIwNTEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsOTkgQEAKKyMKKyMgQ29weXJpZ2h0
IChDKSAyMDE1LTIwMTUgT2xlZyBBbGV4ZWVua292CisjIENvcHlyaWdodCAoQykgMjAxNS0yMDE3
IEZlbGl4IFdlaW5yYW5rCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjIDMuIE5laXRoZXIg
dGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3Jz
CisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVD
VCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisjIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJP
SkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorIyBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1BR0UuCisjCisKKworIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBJTkNMVURF
IE1PRFVMRVMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMKKworaW5jbHVkZShDaGVja0luY2x1ZGVGaWxlKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ0hFQ0sgSU5DTFVERVMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZV9kaXJl
Y3Rvcmllcygke0NNQUtFX1NPVVJDRV9ESVJ9L3VzcnNjdHBsaWIpCisKKworIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBPUyBERVBFTkRFTlQKKyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaWYgKCR7
Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikKKwlhZGRfZGVmaW5pdGlvbnMoLURf
R05VX1NPVVJDRSkKK2VuZGlmICgpCisKK2lmICgke0NNQUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVT
ICJEYXJ3aW4iKQorCWFkZF9kZWZpbml0aW9ucygtRF9fQVBQTEVfVVNFX1JGQ18yMjkyKQorZW5k
aWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjCisjIE1JU0MKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMKKworZmluZF9wYWNrYWdlKFRocmVhZHMpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQUk9HUkFNUworIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzZXQoY2hlY2tfcHJvZ3JhbXMK
KwljbGllbnQuYworCWRheXRpbWVfc2VydmVyLmMKKwlkaXNjYXJkX3NlcnZlci5jCisJZWNob19z
ZXJ2ZXIuYworCWVrcl9jbGllbnQuYworCWVrcl9sb29wX29mZmxvYWQuYworCWVrcl9sb29wLmMK
Kwlla3JfcGVlci5jCisJZWtyX3NlcnZlci5jCisJaHR0cF9jbGllbnQuYworCXJ0Y3dlYi5jCisJ
dGVzdF9saWJtZ210LmMKKwl0ZXN0X3RpbWVyLmMKKwl0c2N0cC5jCispCisKK2ZvcmVhY2ggKHNv
dXJjZV9maWxlICR7Y2hlY2tfcHJvZ3JhbXN9KQorCWdldF9maWxlbmFtZV9jb21wb25lbnQoc291
cmNlX2ZpbGVfd2UgJHtzb3VyY2VfZmlsZX0gTkFNRV9XRSkKKwlhZGRfZXhlY3V0YWJsZSgKKwkJ
JHtzb3VyY2VfZmlsZV93ZX0KKwkJJHtzb3VyY2VfZmlsZX0KKwkpCisKKwl0YXJnZXRfbGlua19s
aWJyYXJpZXMoJHtzb3VyY2VfZmlsZV93ZX0KKwkJJHtwcm9ncmFtc19saW5rX2xpYnJhcnl9CisJ
CSR7Q01BS0VfVEhSRUFEX0xJQlNfSU5JVH0KKwkpCitlbmRmb3JlYWNoICgpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9NYWtlZmlsZS5hbSBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2Vm
aWxlLmFtCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjQ1
YzI0OGZiYTNlOWM4NjhjMzk2YjM3ZjM2MmYwMTFmNjI5MDNiZTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL01ha2VmaWxlLmFtCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxl
LmFtCkBAIC0wLDAgKzEsNjIgQEAKKyMKKyMgQ29weXJpZ2h0IChDKSAyMDExLTIwMTIgTWljaGFl
bCBUdWV4ZW4KKyMKKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFt
ZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyMgICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyMgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyMgQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKyMKKworQU1fQ1BQRkxBR1Mg
PSAtSSQoc3JjZGlyKS8uLi91c3JzY3RwbGliCitFWFRSQV9ESVNUID0gTWFrZWZpbGUubm1ha2Ug
dHNjdHAuYyBkYXl0aW1lX3NlcnZlci5jIGRpc2NhcmRfc2VydmVyLmMgZWNob19zZXJ2ZXIuYyBj
bGllbnQuYyBydGN3ZWIuYyBla3JfY2xpZW50LmMgZWtyX3NlcnZlci5jIGVrcl9sb29wLmMgZWty
X2xvb3Bfb2ZmbG9hZC5jIHRlc3RfbGlibWdtdC5jIGh0dHBfY2xpZW50LmMKKworbm9pbnN0X1BS
T0dSQU1TID0gdHNjdHAgZGF5dGltZV9zZXJ2ZXIgZGlzY2FyZF9zZXJ2ZXIgZWNob19zZXJ2ZXIg
Y2xpZW50IHJ0Y3dlYiBla3JfY2xpZW50IGVrcl9zZXJ2ZXIgZWtyX3BlZXIgZWtyX2xvb3AgZWty
X2xvb3Bfb2ZmbG9hZCB0ZXN0X2xpYm1nbXQgdGVzdF90aW1lciBodHRwX2NsaWVudAordGVzdF9s
aWJtZ210X1NPVVJDRVMgPSB0ZXN0X2xpYm1nbXQuYwordGVzdF9saWJtZ210X0xEQUREID0gLi4v
dXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCit0ZXN0X3RpbWVyX1NPVVJDRVMgPSB0ZXN0X3RpbWVy
LmMKK3Rlc3RfdGltZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK3RzY3Rw
X1NPVVJDRVMgPSB0c2N0cC5jCit0c2N0cF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0
cC5sYQorZGF5dGltZV9zZXJ2ZXJfU09VUkNFUyA9IGRheXRpbWVfc2VydmVyLmMKK2RheXRpbWVf
c2VydmVyX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitkaXNjYXJkX3NlcnZl
cl9TT1VSQ0VTID0gZGlzY2FyZF9zZXJ2ZXIuYworZGlzY2FyZF9zZXJ2ZXJfTERBREQgPSAuLi91
c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2VjaG9fc2VydmVyX1NPVVJDRVMgPSBlY2hvX3NlcnZl
ci5jCitlY2hvX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorY2xp
ZW50X1NPVVJDRVMgPSBjbGllbnQuYworY2xpZW50X0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1
c3JzY3RwLmxhCitydGN3ZWJfU09VUkNFUyA9IHJ0Y3dlYi5jCitydGN3ZWJfTERBREQgPSAuLi91
c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Vrcl9zZXJ2ZXJfU09VUkNFUyA9IGVrcl9zZXJ2ZXIu
YworZWtyX3NlcnZlcl9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5sYQorZWtyX2Ns
aWVudF9TT1VSQ0VTID0gZWtyX2NsaWVudC5jCitla3JfY2xpZW50X0xEQUREID0gLi4vdXNyc2N0
cGxpYi9saWJ1c3JzY3RwLmxhCitla3JfcGVlcl9TT1VSQ0VTID0gZWtyX3BlZXIuYworZWtyX3Bl
ZXJfTERBREQgPSAuLi91c3JzY3RwbGliL2xpYnVzcnNjdHAubGEKK2Vrcl9sb29wX1NPVVJDRVMg
PSBla3JfbG9vcC5jCitla3JfbG9vcF9MREFERCA9IC4uL3VzcnNjdHBsaWIvbGlidXNyc2N0cC5s
YQorZWtyX2xvb3Bfb2ZmbG9hZF9TT1VSQ0VTID0gZWtyX2xvb3Bfb2ZmbG9hZC5jCitla3JfbG9v
cF9vZmZsb2FkX0xEQUREID0gLi4vdXNyc2N0cGxpYi9saWJ1c3JzY3RwLmxhCitodHRwX2NsaWVu
dF9TT1VSQ0VTID0gaHR0cF9jbGllbnQuYworaHR0cF9jbGllbnRfTERBREQgPSAuLi91c3JzY3Rw
bGliL2xpYnVzcnNjdHAubGEKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL01ha2VmaWxl
Lm5tYWtlIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUubm1ha2UKaW5kZXggZTY5ZGUyOWJi
MmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uMDFjNDExY2VmNjg5ZWI4OGI5OGI0ZmY2
OGZlYjQwZjliNGY4MzY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUu
bm1ha2UKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvTWFrZWZpbGUubm1ha2UKQEAgLTAsMCArMSwx
MjYgQEAKKyMNCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuDQorIw0K
KyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4NCisjDQorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0K
KyMgYXJlIG1ldDoNCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQ0KKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisjIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorIyAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUNCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLg0KKyMNCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisjIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFDQorIyBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pF
Q1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisjIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTDQorIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorIyBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZDQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQorIyBTVUNIIERBTUFHRS4NCisjDQor
DQorQ0ZMQUdTPS9XMyAvV1ggL0kuLlx1c3JzY3RwbGliDQorDQorQ1ZBUlNETEw9LURJTkVUIC1E
SU5FVDYNCisNCitMSU5LRkxBR1M9L0xJQlBBVEg6Li5cdXNyc2N0cGxpYiB1c3JzY3RwLmxpYg0K
Kw0KKy5jLm9iajo6DQorCSQoQ0MpICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtRmQuXCAtYyAkPA0K
Kw0KK2FsbDogXA0KKwljbGllbnQgXA0KKwlkYXl0aW1lX3NlcnZlciBcDQorCWRpc2NhcmRfc2Vy
dmVyIFwNCisJZWNob19zZXJ2ZXIgXA0KKwl0c2N0cCBcDQorCXJ0Y3dlYiBcDQorCWVrcl9jbGll
bnQgXA0KKwlla3Jfc2VydmVyIFwNCisJZWtyX3BlZXIgXA0KKwlla3JfbG9vcCBcDQorCXRlc3Rf
bGlibWdtdCBcDQorCWh0dHBfY2xpZW50DQorDQorY2xpZW50Og0KKwkkKENDKSAkKENGTEFHUykg
JChDVkFSU0RMTCkgLWMgY2xpZW50LmMNCisJbGluayAtb3V0OmNsaWVudC5leGUgY2xpZW50Lm9i
aiAkKExJTktGTEFHUykNCisNCitkYXl0aW1lX3NlcnZlcjoNCisJJChDQykgJChDRkxBR1MpICQo
Q1ZBUlNETEwpIC1jIGRheXRpbWVfc2VydmVyLmMNCisJbGluayAtb3V0OmRheXRpbWVfc2VydmVy
LmV4ZSBkYXl0aW1lX3NlcnZlci5vYmogJChMSU5LRkxBR1MpDQorDQorZGlzY2FyZF9zZXJ2ZXI6
DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBkaXNjYXJkX3NlcnZlci5jDQorCWxp
bmsgLW91dDpkaXNjYXJkX3NlcnZlci5leGUgZGlzY2FyZF9zZXJ2ZXIub2JqICQoTElOS0ZMQUdT
KQ0KKw0KK2VjaG9fc2VydmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWNo
b19zZXJ2ZXIuYw0KKwlsaW5rIC1vdXQ6ZWNob19zZXJ2ZXIuZXhlIGVjaG9fc2VydmVyLm9iaiAk
KExJTktGTEFHUykNCisNCit0c2N0cDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1j
IHRzY3RwLmMNCisJbGluayAtb3V0OnRzY3RwLmV4ZSB0c2N0cC5vYmogJChMSU5LRkxBR1MpDQor
DQorcnRjd2ViOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgcnRjd2ViLmMNCisJ
bGluayAtb3V0OnJ0Y3dlYi5leGUgcnRjd2ViLm9iaiAkKExJTktGTEFHUykNCisNCitla3JfY2xp
ZW50Og0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX2NsaWVudC5jDQorCWxp
bmsgLW91dDpla3JfY2xpZW50LmV4ZSBla3JfY2xpZW50Lm9iaiAkKExJTktGTEFHUykNCisNCitl
a3Jfc2VydmVyOg0KKwkkKENDKSAkKENGTEFHUykgJChDVkFSU0RMTCkgLWMgZWtyX3NlcnZlci5j
DQorCWxpbmsgLW91dDpla3Jfc2VydmVyLmV4ZSBla3Jfc2VydmVyLm9iaiAkKExJTktGTEFHUykN
CisNCitla3JfcGVlcjoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIGVrcl9wZWVy
LmMNCisJbGluayAtb3V0OmVrcl9wZWVyLmV4ZSBla3JfcGVlci5vYmogJChMSU5LRkxBR1MpDQor
DQorZWtyX2xvb3A6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExMKSAtYyBla3JfbG9vcC5j
DQorCWxpbmsgLW91dDpla3JfbG9vcC5leGUgZWtyX2xvb3Aub2JqICQoTElOS0ZMQUdTKQ0KKw0K
K3Rlc3RfbGlibWdtdDoNCisJJChDQykgJChDRkxBR1MpICQoQ1ZBUlNETEwpIC1jIHRlc3RfbGli
bWdtdC5jDQorCWxpbmsgLW91dDp0ZXN0X2xpYm1nbXQuZXhlIHRlc3RfbGlibWdtdC5vYmogJChM
SU5LRkxBR1MpDQorDQoraHR0cF9jbGllbnQ6DQorCSQoQ0MpICQoQ0ZMQUdTKSAkKENWQVJTRExM
KSAtYyBodHRwX2NsaWVudC5jDQorCWxpbmsgLW91dDpodHRwX2NsaWVudC5leGUgaHR0cF9jbGll
bnQub2JqICQoTElOS0ZMQUdTKQ0KKw0KK2NsZWFuOg0KKwlkZWwgL0YgY2xpZW50LmV4ZQ0KKwlk
ZWwgL0YgY2xpZW50Lm9iag0KKwlkZWwgL0YgZGF5dGltZV9zZXJ2ZXIuZXhlDQorCWRlbCAvRiBk
YXl0aW1lX3NlcnZlci5vYmoNCisJZGVsIC9GIGRpc2NhcmRfc2VydmVyLmV4ZQ0KKwlkZWwgL0Yg
ZGlzY2FyZF9zZXJ2ZXIub2JqDQorCWRlbCAvRiBlY2hvX3NlcnZlci5leGUNCisJZGVsIC9GIGVj
aG9fc2VydmVyLm9iag0KKwlkZWwgL0YgdHNjdHAuZXhlDQorCWRlbCAvRiB0c2N0cC5vYmoNCisJ
ZGVsIC9GIHJ0Y3dlYi5leGUNCisJZGVsIC9GIHJ0Y3dlYi5vYmoNCisJZGVsIC9GIGVrcl9jbGll
bnQuZXhlDQorCWRlbCAvRiBla3JfY2xpZW50Lm9iag0KKwlkZWwgL0YgZWtyX3NlcnZlci5leGUN
CisJZGVsIC9GIGVrcl9zZXJ2ZXIub2JqDQorCWRlbCAvRiBla3JfcGVlci5leGUNCisJZGVsIC9G
IGVrcl9wZWVyLm9iag0KKwlkZWwgL0YgZWtyX2xvb3AuZXhlDQorCWRlbCAvRiBla3JfbG9vcC5v
YmoNCisJZGVsIC9GIHRlc3RfbGlibWdtdC5leGUNCisJZGVsIC9GIHRlc3RfbGlibWdtdC5vYmoN
CisJZGVsIC9GIGh0dHBfY2xpZW50LmV4ZQ0KKwlkZWwgL0YgaHR0cF9jbGllbnQub2JqDQpkaWZm
IC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9j
bGllbnQuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4x
ZmU3NTc5MWRlMmZmYzdkYmUyZmNkNTIyYTZjNTBiOGM3YThmYWFmIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9jbGllbnQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9jbGllbnQuYwpA
QCAtMCwwICsxLDUwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE1pY2hhZWwg
VHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRo
ZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0
b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9y
dCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19wb3J0XQor
ICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNl
bmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUg
PHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4z
MgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5j
bHVkZSA8YXJwYS9pbmV0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKyNpbmNs
dWRlIDx1c3JzY3RwLmg+CisKK2ludCBkb25lID0gMDsKKworI2lmZGVmIF9XSU4zMgordHlwZWRl
ZiBjaGFyKiBjYWRkcl90OworI2VuZGlmCisKK3N0YXRpYyB2b2lkCitoYW5kbGVfYXNzb2NpYXRp
b25fY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjKQoreworCXVuc2ln
bmVkIGludCBpLCBuOworCisJcHJpbnRmKCJBc3NvY2lhdGlvbiBjaGFuZ2UgIik7CisJc3dpdGNo
IChzYWMtPnNhY19zdGF0ZSkgeworCWNhc2UgU0NUUF9DT01NX1VQOgorCQlwcmludGYoIlNDVFBf
Q09NTV9VUCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09NTV9MT1NUOgorCQlwcmludGYoIlND
VFBfQ09NTV9MT1NUIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9SRVNUQVJUOgorCQlwcmludGYo
IlNDVFBfUkVTVEFSVCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fQ09NUDoKKwkJ
cHJpbnRmKCJTQ1RQX1NIVVRET1dOX0NPTVAiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NBTlRf
U1RSX0FTU09DOgorCQlwcmludGYoIlNDVFBfQ0FOVF9TVFJfQVNTT0MiKTsKKwkJYnJlYWs7CisJ
ZGVmYXVsdDoKKwkJcHJpbnRmKCJVTktOT1dOIik7CisJCWJyZWFrOworCX0KKwlwcmludGYoIiwg
c3RyZWFtcyAoaW4vb3V0KSA9ICgldS8ldSkiLAorCSAgICAgICBzYWMtPnNhY19pbmJvdW5kX3N0
cmVhbXMsIHNhYy0+c2FjX291dGJvdW5kX3N0cmVhbXMpOworCW4gPSBzYWMtPnNhY19sZW5ndGgg
LSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlKTsKKwlpZiAoKChzYWMtPnNhY19zdGF0
ZSA9PSBTQ1RQX0NPTU1fVVApIHx8CisJICAgICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9SRVNU
QVJUKSkgJiYgKG4gPiAwKSkgeworCQlwcmludGYoIiwgc3VwcG9ydHMiKTsKKwkJZm9yIChpID0g
MDsgaSA8IG47IGkrKykgeworCQkJc3dpdGNoIChzYWMtPnNhY19pbmZvW2ldKSB7CisJCQljYXNl
IFNDVFBfQVNTT0NfU1VQUE9SVFNfUFI6CisJCQkJcHJpbnRmKCIgUFIiKTsKKwkJCQlicmVhazsK
KwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19BVVRIOgorCQkJCXByaW50ZigiIEFVVEgiKTsK
KwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19BU0NPTkY6CisJCQkJcHJp
bnRmKCIgQVNDT05GIik7CisJCQkJYnJlYWs7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNf
TVVMVElCVUY6CisJCQkJcHJpbnRmKCIgTVVMVElCVUYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug
U0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05GSUc6CisJCQkJcHJpbnRmKCIgUkUtQ09ORklHIik7
CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCXByaW50ZigiIFVOS05PV04oMHglMDJ4KSIs
IHNhYy0+c2FjX2luZm9baV0pOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfSBlbHNlIGlmICgo
KHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fAorCSAgICAgICAgICAgIChzYWMt
PnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgJiYgKG4gPiAwKSkgeworCQlwcmlu
dGYoIiwgQUJPUlQgPSIpOworCQlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYo
IiAweCUwMngiLCBzYWMtPnNhY19pbmZvW2ldKTsKKwkJfQorCX0KKwlwcmludGYoIi5cbiIpOwor
CWlmICgoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykgfHwKKwkgICAgKHNh
Yy0+c2FjX3N0YXRlID09IFNDVFBfU0hVVERPV05fQ09NUCkgfHwKKwkgICAgKHNhYy0+c2FjX3N0
YXRlID09IFNDVFBfQ09NTV9MT1NUKSkgeworCQlleGl0KDApOworCX0KKwlyZXR1cm47Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfcGVlcl9hZGRyZXNzX2NoYW5nZV9ldmVudChzdHJ1Y3Qgc2N0
cF9wYWRkcl9jaGFuZ2UgKnNwYykKK3sKKwljaGFyIGFkZHJfYnVmW0lORVQ2X0FERFJTVFJMRU5d
OworCWNvbnN0IGNoYXIgKmFkZHI7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwlz
d2l0Y2ggKHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJYWRkciA9IGluZXRf
bnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYWRkcl9idWYsIElORVRfQUREUlNUUkxFTik7
CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKSZzcGMtPnNwY19hYWRkcjsKKwkJYWRkciA9IGluZXRfbnRvcChBRl9JTkVUNiwgJnNpbjYt
PnNpbjZfYWRkciwgYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4pOworCQlicmVhazsKKwljYXNl
IEFGX0NPTk46CisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJnNwYy0+c3BjX2Fh
ZGRyOworI2lmZGVmIF9XSU4zMgorCQlfc25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJM
RU4sICIlcCIsIHNjb25uLT5zY29ubl9hZGRyKTsKKyNlbHNlCisJCXNucHJpbnRmKGFkZHJfYnVm
LCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBzY29ubi0+c2Nvbm5fYWRkcik7CisjZW5kaWYKKwkJ
YWRkciA9IGFkZHJfYnVmOworCQlicmVhazsKKwlkZWZhdWx0OgorI2lmZGVmIF9XSU4zMgorCQlf
c25wcmludGYoYWRkcl9idWYsIElORVQ2X0FERFJTVFJMRU4sICJVbmtub3duIGZhbWlseSAlZCIs
IHNwYy0+c3BjX2FhZGRyLnNzX2ZhbWlseSk7CisjZWxzZQorCQlzbnByaW50ZihhZGRyX2J1Ziwg
SU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3Nf
ZmFtaWx5KTsKKyNlbmRpZgorCQlhZGRyID0gYWRkcl9idWY7CisJCWJyZWFrOworCX0KKwlwcmlu
dGYoIlBlZXIgYWRkcmVzcyAlcyBpcyBub3cgIiwgYWRkcik7CisJc3dpdGNoIChzcGMtPnNwY19z
dGF0ZSkgeworCWNhc2UgU0NUUF9BRERSX0FWQUlMQUJMRToKKwkJcHJpbnRmKCJTQ1RQX0FERFJf
QVZBSUxBQkxFIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1VOUkVBQ0hBQkxFOgorCQlw
cmludGYoIlNDVFBfQUREUl9VTlJFQUNIQUJMRSIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQURE
Ul9SRU1PVkVEOgorCQlwcmludGYoIlNDVFBfQUREUl9SRU1PVkVEIik7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9BRERSX0FEREVEOgorCQlwcmludGYoIlNDVFBfQUREUl9BRERFRCIpOworCQlicmVh
azsKKwljYXNlIFNDVFBfQUREUl9NQURFX1BSSU06CisJCXByaW50ZigiU0NUUF9BRERSX01BREVf
UFJJTSIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQUREUl9DT05GSVJNRUQ6CisJCXByaW50Zigi
U0NUUF9BRERSX0NPTkZJUk1FRCIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVO
S05PV04iKTsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiIChlcnJvciA9IDB4JTA4eCkuXG4iLCBz
cGMtPnNwY19lcnJvcik7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3NlbmRf
ZmFpbGVkX2V2ZW50KHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICpzc2ZlKQoreworCXNp
emVfdCBpLCBuOworCisJaWYgKHNzZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5TRU5UKSB7
CisJCXByaW50ZigiVW5zZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBf
REFUQV9TRU5UKSB7CisJCXByaW50ZigiU2VudCAiKTsKKwl9CisJaWYgKHNzZmUtPnNzZmVfZmxh
Z3MgJiB+KFNDVFBfREFUQV9TRU5UIHwgU0NUUF9EQVRBX1VOU0VOVCkpIHsKKwkJcHJpbnRmKCIo
ZmxhZ3MgPSAleCkgIiwgc3NmZS0+c3NmZV9mbGFncyk7CisJfQorCXByaW50ZigibWVzc2FnZSB3
aXRoIFBQSUQgPSAldSwgU0lEID0gJXUsIGZsYWdzOiAweCUwNHggZHVlIHRvIGVycm9yID0gMHgl
MDh4IiwKKwkgICAgICAgbnRvaGwoc3NmZS0+c3NmZV9pbmZvLnNuZF9wcGlkKSwgc3NmZS0+c3Nm
ZV9pbmZvLnNuZF9zaWQsCisJICAgICAgIHNzZmUtPnNzZmVfaW5mby5zbmRfZmxhZ3MsIHNzZmUt
PnNzZmVfZXJyb3IpOworCW4gPSBzc2ZlLT5zc2ZlX2xlbmd0aCAtIHNpemVvZihzdHJ1Y3Qgc2N0
cF9zZW5kX2ZhaWxlZF9ldmVudCk7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlwcmlu
dGYoIiAweCUwMngiLCBzc2ZlLT5zc2ZlX2RhdGFbaV0pOworCX0KKwlwcmludGYoIi5cbiIpOwor
CXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9ub3RpZmljYXRpb24odW5pb24gc2N0
cF9ub3RpZmljYXRpb24gKm5vdGlmLCBzaXplX3QgbikKK3sKKwlpZiAobm90aWYtPnNuX2hlYWRl
ci5zbl9sZW5ndGggIT0gKHVpbnQzMl90KW4pIHsKKwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKG5v
dGlmLT5zbl9oZWFkZXIuc25fdHlwZSkgeworCWNhc2UgU0NUUF9BU1NPQ19DSEFOR0U6CisJCWhh
bmRsZV9hc3NvY2lhdGlvbl9jaGFuZ2VfZXZlbnQoJihub3RpZi0+c25fYXNzb2NfY2hhbmdlKSk7
CisJCWJyZWFrOworCWNhc2UgU0NUUF9QRUVSX0FERFJfQ0hBTkdFOgorCQloYW5kbGVfcGVlcl9h
ZGRyZXNzX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9wYWRkcl9jaGFuZ2UpKTsKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dO
X0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQli
cmVhazsKKwljYXNlIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9FVkVOVDoKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfU0VOREVS
X0RSWV9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9F
VkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRfRkFJTEVEX0VWRU5UOgorCQloYW5kbGVf
c2VuZF9mYWlsZWRfZXZlbnQoJihub3RpZi0+c25fc2VuZF9mYWlsZWRfZXZlbnQpKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0FTU09DX1JFU0VUX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfU1RSRUFNX0NIQU5HRV9F
VkVOVDoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50
CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFk
ZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9y
Y3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlpZiAoZGF0YSA9PSBO
VUxMKSB7CisJCWRvbmUgPSAxOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0gZWxzZSB7CisJ
CWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24o
KHVuaW9uIHNjdHBfbm90aWZpY2F0aW9uICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7Cisj
aWZkZWYgX1dJTjMyCisJCQlfd3JpdGUoX2ZpbGVubyhzdGRvdXQpLCBkYXRhLCAodW5zaWduZWQg
aW50KWRhdGFsZW4pOworI2Vsc2UKKwkJCWlmICh3cml0ZShmaWxlbm8oc3Rkb3V0KSwgZGF0YSwg
ZGF0YWxlbikgPCAwKSB7CisJCQkJcGVycm9yKCJ3cml0ZSIpOworCQkJfQorI2VuZGlmCisJCX0K
KwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJpbnRm
KGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChh
cCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2lu
dAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7
CisJc3RydWN0IHNvY2thZGRyICphZGRyLCAqYWRkcnM7CisJc3RydWN0IHNvY2thZGRyX2luIGFk
ZHI0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBz
IGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cHN0YXQgc3RhdDsKKwlzdHJ1Y3Qgc2N0cF9ldmVudCBldmVu
dDsKKwl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBfQVNTT0NfQ0hBTkdFLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJfQ0hBTkdFLAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVH07CisJY2hhciBidWZmZXJbODBd
OworCXVuc2lnbmVkIGludCBpOworCWludCBuOworCisJaWYgKGFyZ2MgPCAzKSB7CisJCXByaW50
ZigiJXMiLCAiVXNhZ2U6IGNsaWVudCByZW1vdGVfYWRkciByZW1vdGVfcG9ydCBsb2NhbF9wb3J0
IGxvY2FsX2VuY2Fwc19wb3J0IHJlbW90ZV9lbmNhcHNfcG9ydFxuIik7CisJCXJldHVybiAoLTEp
OworCX0KKwlpZiAoYXJnYyA+IDQpIHsKKwkJdXNyc2N0cF9pbml0KGF0b2koYXJndls0XSksIE5V
TEwsIGRlYnVnX3ByaW50Zik7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9pbml0KDk4OTksIE5VTEws
IGRlYnVnX3ByaW50Zik7CisJfQorI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFG
X0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCBO
VUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7CisJfQorCW1lbXNl
dCgmZXZlbnQsIDAsIHNpemVvZihldmVudCkpOworCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9B
TExfQVNTT0M7CisJZXZlbnQuc2Vfb24gPSAxOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZXZl
bnRfdHlwZXMpL3NpemVvZih1aW50MTZfdCk7IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZl
bnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVvZihldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJz
ZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKKwkJfQorCX0KKwlpZiAoYXJnYyA+IDMpIHsKKwkJbWVt
c2V0KCh2b2lkICopJmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lm
ZGVmIEhBVkVfU0lONl9MRU4KKwkJYWRkcjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisjZW5kaWYKKwkJYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwkJYWRk
cjYuc2luNl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzNdKSk7CisJCWFkZHI2LnNpbjZfYWRkciA9
IGluNmFkZHJfYW55OworCQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkcjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisJCQlwZXJyb3Io
ImJpbmQiKTsKKwkJfQorCX0KKwlpZiAoYXJnYyA+IDUpIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAs
IHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNz
X2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3Zb
NV0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBf
UkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qp
c2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nr
b3B0Iik7CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICopJmFkZHI0LCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICopJmFkZHI2LCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWFkZHI0LnNpbl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorI2lmZGVmIEhBVkVfU0lONl9MRU4K
KwlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgor
CWFkZHI0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCWFkZHI2LnNpbjZfZmFtaWx5ID0gQUZfSU5F
VDY7CisJYWRkcjQuc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlhZGRyNi5zaW42
X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBh
cmd2WzFdLCAmYWRkcjYuc2luNl9hZGRyKSA9PSAxKSB7CisJCWlmICh1c3JzY3RwX2Nvbm5lY3Qo
c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bjYpKSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCX0KKwl9IGVsc2Ug
aWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsK
KwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFkZHI0LCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfY29u
bmVjdCIpOworCQl9CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJJbGxlZ2FsIGRlc3RpbmF0aW9uIGFk
ZHJlc3MuXG4iKTsKKwl9CisJaWYgKChuID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFk
ZHJzKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRsYWRkcnMiKTsKKwl9IGVsc2Ugewor
CQlhZGRyID0gYWRkcnM7CisJCXByaW50ZigiTG9jYWwgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChp
ID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpbjsgaSsrKSB7CisJCQlpZiAoaSA+IDApIHsKKwkJCQlw
cmludGYoIiVzIiwgIiwgIik7CisJCQl9CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgewor
CQkJY2FzZSBBRl9JTkVUOgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJ
CWNoYXIgYnVmW0lORVRfQUREUlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJ
CXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3Ao
QUZfSU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwcmlu
dGYoIiVzIiwgbmFtZSk7CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KyNlbmRpZgorCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5d
OworCQkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2Fk
ZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lm
bmRlZiBIQVZFX1NBX0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90
KWFkZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJCQkJYnJlYWs7
CisJCQl9CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVO
CisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2Ff
bGVuKTsKKyNlbmRpZgorCQl9CisJCXByaW50ZigiLlxuIik7CisJCXVzcnNjdHBfZnJlZWxhZGRy
cyhhZGRycyk7CisJfQorCWlmICgobiA9IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ssIDAsICZhZGRy
cykpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0cGFkZHJzIik7CisJfSBlbHNlIHsKKwkJ
YWRkciA9IGFkZHJzOworCQlwcmludGYoIlBlZXIgYWRkcmVzc2VzOiAiKTsKKwkJZm9yIChpID0g
MDsgaSA8ICh1bnNpZ25lZCBpbnQpbjsgaSsrKSB7CisJCQlpZiAoaSA+IDApIHsKKwkJCQlwcmlu
dGYoIiVzIiwgIiwgIik7CisJCQl9CisJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworCQkJ
Y2FzZSBBRl9JTkVUOgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCWNo
YXIgYnVmW0lORVRfQUREUlNUUkxFTl07CisJCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJCXNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZf
SU5FVCwgJnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwcmludGYo
IiVzIiwgbmFtZSk7CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQkJYWRkciA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikoKGNhZGRyX3QpYWRkciArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNl
bmRpZgorCQkJCWJyZWFrOworCQkJfQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCXsKKwkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOwor
CQkJCWNvbnN0IGNoYXIgKm5hbWU7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilhZGRyOworCQkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIs
IGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQkJcHJpbnRmKCIlcyIsIG5hbWUpOworI2lmbmRl
ZiBIQVZFX1NBX0xFTgorCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFk
ZHIgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJCQkJYnJlYWs7CisJ
CQl9CisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorI2lmZGVmIEhBVkVfU0FfTEVOCisJ
CQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVu
KTsKKyNlbmRpZgorCQl9CisJCXByaW50ZigiLlxuIik7CisJCXVzcnNjdHBfZnJlZXBhZGRycyhh
ZGRycyk7CisJfQorCXdoaWxlICgoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4p
ICE9IE5VTEwpICYmICFkb25lKSB7CisJCXVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVyLCBzdHJs
ZW4oYnVmZmVyKSwgTlVMTCwgMCwgTlVMTCwgMCwgU0NUUF9TRU5EVl9OT0lORk8sIDApOworCX0K
KwlpZiAoIWRvbmUpIHsKKwkJaWYgKHVzcnNjdHBfc2h1dGRvd24oc29jaywgU0hVVF9XUikgPCAw
KSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2h1dGRvd24iKTsKKwkJfQorCX0KKwl3aGlsZSAoIWRv
bmUpIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAo
MSk7CisjZW5kaWYKKwl9CisJdXNyc2N0cF9nZXRfc3RhdCgmc3RhdCk7CisJcHJpbnRmKCJOdW1i
ZXIgb2YgcGFja2V0cyAoc2VudC9yZWNlaXZlZCk6ICgldS8ldSkuXG4iLAorCSAgICAgICBzdGF0
LnNjdHBzX291dHBhY2tldHMsIHN0YXQuc2N0cHNfaW5wYWNrZXRzKTsKKwl3aGlsZSAodXNyc2N0
cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEgKiAxMDAwKTsKKyNl
bHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorCXJldHVybigwKTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL2RhdGFjaGFuLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXRhY2hh
bi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5
YWU3NzVhZDhjMmU0OGM1MzkxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXRhY2hhbl9zZXJ2LmMgYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9kYXRhY2hhbl9zZXJ2LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dy
YW1zL2RheXRpbWVfc2VydmVyLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kYXl0aW1lX3NlcnZlci5j
CmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjM1Y2FkZjUz
ZDExOTAzZTFkOTRhZjgyOTVjYTFmMjAyNzU2YjcyZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3By
b2dyYW1zL2RheXRpbWVfc2VydmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZGF5dGltZV9z
ZXJ2ZXIuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMi0yMDEz
IE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
IDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMg
Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisg
KiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogVXNhZ2U6IGRheXRpbWVfc2VydmVyIFtsb2Nh
bF9lbmNhcHNfcG9ydF0gW3JlbW90ZV9lbmNhcHNfcG9ydF0KKyAqIAorICogRXhhbXBsZQorICog
U2VydmVyOiAkIC4vZGF5dGltZV9zZXJ2ZXIgMTExMTEgMjIyMjIKKyAqIENsaWVudDogJCAuL2Ns
aWVudCAxMjcuMC4wLjEgMTMgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRlZiBfV0lOMzIKKyNk
ZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3Rk
YXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2lmbmRl
ZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisj
aW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIFBPUlQgMTMKKyNkZWZpbmUgREFZVElNRV9Q
UElEIDQwCisjZGVmaW5lIFNMRUVQIDEKKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIg
KmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsK
Kwl2cHJpbnRmKGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQg
YXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2ssICpjb25uX3NvY2s7
CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2Fw
czsKKwlzb2NrbGVuX3QgYWRkcl9sZW47CisJY2hhciBidWZmZXJbODBdOworCXRpbWVfdCBub3c7
CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCisJaWYgKGFyZ2MgPiAxKSB7CisJCXVz
cnNjdHBfaW5pdChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0gZWxzZSB7
CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0KKyNpZmRlZiBT
Q1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19O
T05FKTsKKyNlbmRpZgorCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKwor
CWlmICgoc29jayA9IHVzcnNjdHBfc29ja2V0KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RP
X1NDVFAsIE5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0
cF9zb2NrZXQiKTsKKwl9CisJaWYgKGFyZ2MgPiAyKSB7CisJCW1lbXNldCgmZW5jYXBzLCAwLCBz
aXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSk7CisJCWVuY2Fwcy5zdWVfYWRkcmVzcy5zc19m
YW1pbHkgPSBBRl9JTkVUOworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0p
KTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVN
T1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0
Iik7CisJCX0KKwl9CisJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlhZGRyLnNpbl9sZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisJYWRkci5zaW5fcG9ydCA9IGh0b25zKFBPUlQpOworCWFkZHIuc2luX2FkZHIuc19hZGRyID0g
aHRvbmwoSU5BRERSX0FOWSk7CisJaWYgKHVzcnNjdHBfYmluZChzb2NrLCAoc3RydWN0IHNvY2th
ZGRyICopJmFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkg
eworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7CisJCWFkZHJf
bGVuID0gMDsKKwkJaWYgKChjb25uX3NvY2sgPSB1c3JzY3RwX2FjY2VwdChzb2NrLCBOVUxMLCAm
YWRkcl9sZW4pKSA9PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQorCQl0aW1lKCZub3cpOwor
I2lmZGVmIF9XSU4zMgorCQlfc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgIiVzIiwg
Y3RpbWUoJm5vdykpOworI2Vsc2UKKwkJc25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
IiVzIiwgY3RpbWUoJm5vdykpOworI2VuZGlmCisJCXNuZGluZm8uc25kX3NpZCA9IDA7CisJCXNu
ZGluZm8uc25kX2ZsYWdzID0gMDsKKwkJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERBWVRJTUVf
UFBJRCk7CisJCXNuZGluZm8uc25kX2NvbnRleHQgPSAwOworCQlzbmRpbmZvLnNuZF9hc3NvY19p
ZCA9IDA7CisJCWlmICh1c3JzY3RwX3NlbmR2KGNvbm5fc29jaywgYnVmZmVyLCBzdHJsZW4oYnVm
ZmVyKSwgTlVMTCwgMCwgKHZvaWQgKikmc25kaW5mbywKKwkJICAgICAgICAgICAgICAgICAgKHNv
Y2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywg
MCkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJfQorCQl1c3JzY3RwX2Ns
b3NlKGNvbm5fc29jayk7CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUgKHVzcnNj
dHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDAp
OworI2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
cHJvZ3JhbXMvZGlzY2FyZF9zZXJ2ZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi4zOTg0NmRkZWQwNGI5OTA5YTE4YzM0MDNiNjhlYjZhYjY3ZGJkMDUz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9kaXNjYXJkX3NlcnZlci5jCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3Byb2dyYW1zL2Rpc2NhcmRfc2VydmVyLmMKQEAgLTAsMCArMSwyNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9q
ZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJl
CisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRP
UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVz
YWdlOiBkaXNjYXJkX3NlcnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3Bv
cnRdCisgKiAKKyAqIEV4YW1wbGUKKyAqIFNlcnZlcjogJCAuL2Rpc2NhcmRfc2VydmVyIDExMTEx
IDIyMjIyCisgKiBDbGllbnQ6ICQgLi9jbGllbnQgMTI3LjAuMC4xIDkgMCAyMjIyMiAxMTExMQor
ICovCisKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNl
bmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8
c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5k
aWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgUE9SVCA5CisjZGVmaW5lIEJVRkZF
Ul9TSVpFIDEwMjQwCisjZGVmaW5lIFNMRUVQIDEKKworY29uc3QgaW50IHVzZV9jYiA9IDA7CisK
K3N0YXRpYyBpbnQKK3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9z
b2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0
cnVjdCBzY3RwX3JjdmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWNo
YXIgbmFtZWJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQx
Nl90IHBvcnQ7CisKKwlpZiAoZGF0YSkgeworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9O
KSB7CisJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAo
aW50KWRhdGFsZW4pOworCQl9IGVsc2UgeworCQkJc3dpdGNoIChhZGRyLnNhLnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFG
X0lORVQsICZhZGRyLnNpbi5zaW5fYWRkciwgbmFtZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJ
CQlwb3J0ID0gbnRvaHMoYWRkci5zaW4uc2luX3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9J
TkVUNiwgJmFkZHIuc2luNi5zaW42X2FkZHIsIG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4pLAor
CQkJCXBvcnQgPSBudG9ocyhhZGRyLnNpbjYuc2luNl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRp
ZgorCQkJY2FzZSBBRl9DT05OOgorI2lmZGVmIF9XSU4zMgorCQkJCV9zbnByaW50ZihuYW1lYnVm
LCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpOworI2Vsc2UK
KwkJCQlzbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25u
LnNjb25uX2FkZHIpOworI2VuZGlmCisJCQkJbmFtZSA9IG5hbWVidWY7CisJCQkJcG9ydCA9IG50
b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJ
CW5hbWUgPSBOVUxMOworCQkJCXBvcnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJpbnRm
KCJNc2cgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGgg
U1NOICV1IGFuZCBUU04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChp
bnQpZGF0YWxlbiwKKwkJCSAgICAgICBuYW1lLAorCQkJICAgICAgIHBvcnQsCisJCQkgICAgICAg
cmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90
c24sCisJCQkgICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2Nv
bnRleHQpOworCQl9CisJCWZyZWUoZGF0YSk7CisJfQorCXJldHVybiAoMSk7Cit9CisKK3ZvaWQK
K2RlYnVnX3ByaW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOwor
CisJdmFfc3RhcnQoYXAsIGZvcm1hdCk7CisJdnByaW50Zihmb3JtYXQsIGFwKTsKKwl2YV9lbmQo
YXApOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKwlzdHJ1Y3Qg
c29ja2V0ICpzb2NrOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKwlzdHJ1Y3Qgc2N0cF91
ZHBlbmNhcHMgZW5jYXBzOworCXN0cnVjdCBzY3RwX2V2ZW50IGV2ZW50OworCXVpbnQxNl90IGV2
ZW50X3R5cGVzW10gPSB7U0NUUF9BU1NPQ19DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICBTQ1RQX1BFRVJfQUREUl9DSEFOR0UsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX1JFTU9URV9FUlJPUiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU0hVVERP
V05fRVZFTlQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FEQVBUQVRJT05fSU5E
SUNBVElPTiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEFSVElBTF9ERUxJVkVS
WV9FVkVOVH07CisJdW5zaWduZWQgaW50IGk7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7
CisJY29uc3QgaW50IG9uID0gMTsKKwlzc2l6ZV90IG47CisJaW50IGZsYWdzOworCXNvY2tsZW5f
dCBmcm9tX2xlbjsKKwljaGFyIGJ1ZmZlcltCVUZGRVJfU0laRV07CisJY2hhciBuYW1lW0lORVQ2
X0FERFJTVFJMRU5dOworCXNvY2tsZW5fdCBpbmZvbGVuOworCXN0cnVjdCBzY3RwX3JjdmluZm8g
cmN2X2luZm87CisJdW5zaWduZWQgaW50IGluZm90eXBlOworCisJaWYgKGFyZ2MgPiAxKSB7CisJ
CXVzcnNjdHBfaW5pdChhdG9pKGFyZ3ZbMV0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0gZWxz
ZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5LCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0KKyNpZmRl
ZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJV
R19BTEwpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOwor
CisJaWYgKChzb2NrID0gdXNyc2N0cF9zb2NrZXQoQUZfSU5FVDYsIFNPQ0tfU0VRUEFDS0VULCBJ
UFBST1RPX1NDVFAsIHVzZV9jYj9yZWNlaXZlX2NiOk5VTEwsIE5VTEwsIDAsIE5VTEwpKSA9PSBO
VUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0
c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSLCAo
Y29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIiKTsKKwl9CisJ
bWVtc2V0KCZhdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSk7CisJYXYuYXNz
b2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IDQ3OworCisJaWYgKHVz
cnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OVEVYVCwgKGNvbnN0
IHZvaWQqKSZhdiwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKSA8
IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9DT05URVhUIik7CisJfQor
CWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX1JFQ1ZSQ1ZJ
TkZPLCAmb24sIHNpemVvZihpbnQpKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlpZiAoYXJnYyA+IDIpIHsKKwkJbWVtc2V0KCZl
bmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9h
ZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQgPSBodG9ucyhh
dG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1ND
VFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZlbmNhcHMsIChz
b2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9y
KCJ1c3JzY3RwX3NldHNvY2tvcHQgU0NUUF9SRU1PVEVfVURQX0VOQ0FQU19QT1JUIik7CisJCX0K
Kwl9CisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9mKGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2Nf
aWQgPSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKwlldmVudC5zZV9vbiA9IDE7CisJZm9yIChpID0gMDsg
aSA8ICh1bnNpZ25lZCBpbnQpKHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVpbnQxNl90KSk7
IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3JzY3Rw
X3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9ldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJ1c3JzY3RwX3NldHNvY2tv
cHQgU0NUUF9FVkVOVCIpOworCQl9CisJfQorCW1lbXNldCgodm9pZCAqKSZhZGRyLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlhZGRyLnNp
bjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkci5zaW42
X2ZhbWlseSA9IEFGX0lORVQ2OworCWFkZHIuc2luNl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJYWRk
ci5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKKwlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1
Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsK
KwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwl9CisJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ss
IDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJfQorCXdoaWxlICgxKSB7
CisJCWlmICh1c2VfY2IpIHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKFNMRUVQICogMTAwMCk7
CisjZWxzZQorCQkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcm9tX2xl
biA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJZmxhZ3MgPSAw
OworCQkJaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOwor
CQkJbiA9IHVzcnNjdHBfcmVjdnYoc29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChz
dHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCisJ
CQkgICAgICAgICAgICAgICAgICAmaW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworCQkJaWYg
KG4gPiAwKSB7CisJCQkJaWYgKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCQlwcmlu
dGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBs
b25nIGxvbmcpbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVD
VlZfUkNWSU5GTykgeworCQkJCQkJcHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQg
ZnJvbSAlczoldSBvbiBzdHJlYW0gJXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwg
Y29udGV4dCAldSwgY29tcGxldGUgJWQuXG4iLAorCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9u
ZyBsb25nKW4sCisJCQkJCQkgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9h
ZGRyLCBuYW1lLCBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAorCQkJ
CQkJICAgICAgICByY3ZfaW5mby5yY3Zfc2lkLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zf
c3NuLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3ZfdHNuLAorCQkJCQkJICAgICAgICBudG9o
bChyY3ZfaW5mby5yY3ZfcHBpZCksCisJCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0
LAorCQkJCQkJICAgICAgICAoZmxhZ3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKKwkJCQkJfSBlbHNl
IHsKKwkJCQkJCXByaW50ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUs
IGNvbXBsZXRlICVkLlxuIiwKKwkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAor
CQkJCQkJICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwg
SU5FVDZfQUREUlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKKwkJCQkJCSAgICAgICAg
KGZsYWdzICYgTVNHX0VPUikgPyAxIDogMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2Ugewor
CQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUg
KHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAq
IDEwMDApOworI2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7
Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvcHJvZ3JhbXMvZWNob19zZXJ2ZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi42NGYxMmM1NmQ5OTEyYTQ4N2JkMGI2Zjc5ZTA4OGMzNzM5MTRhY2E4
IDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9lY2hvX3NlcnZlci5jCisrKyBiL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3Byb2dyYW1zL2VjaG9fc2VydmVyLmMKQEAgLTAsMCArMSwyODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQor
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFVzYWdlOiBl
Y2hvX3NlcnZlciBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdCisgKiAK
KyAqIEV4YW1wbGUKKyAqIFNlcnZlcjogJCAuL2VjaG9fc2VydmVyIDExMTExIDIyMjIyCisgKiBD
bGllbnQ6ICQgLi9jbGllbnQgMTI3LjAuMC4xIDcgMCAyMjIyMiAxMTExMQorICovCisKKyNpZmRl
ZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4z
MgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpbmNsdWRl
IDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgUE9SVCA3CisjZGVmaW5lIEJVRkZFUl9TSVpFIDEwMjQw
CisjZGVmaW5lIFNMRUVQIDEKKworY29uc3QgaW50IHVzZV9jYiA9IDA7CisKK3N0YXRpYyBpbnQK
K3JlY2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRk
ciwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3Jj
dmluZm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWNoYXIgbmFtZWJ1ZltJ
TkVUNl9BRERSU1RSTEVOXTsKKwljb25zdCBjaGFyICpuYW1lOworCXVpbnQxNl90IHBvcnQ7CisK
KwlpZiAoZGF0YSkgeworCQlpZiAoZmxhZ3MgJiBNU0dfTk9USUZJQ0FUSU9OKSB7CisJCQlwcmlu
dGYoIk5vdGlmaWNhdGlvbiBvZiBsZW5ndGggJWQgcmVjZWl2ZWQuXG4iLCAoaW50KWRhdGFsZW4p
OworCQl9IGVsc2UgeworCQkJc3dpdGNoIChhZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElO
RVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQsICZhZGRy
LnNpbi5zaW5fYWRkciwgbmFtZWJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCQlwb3J0ID0gbnRv
aHMoYWRkci5zaW4uc2luX3BvcnQpOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIu
c2luNi5zaW42X2FkZHIsIG5hbWVidWYsIElORVQ2X0FERFJTVFJMRU4pLAorCQkJCXBvcnQgPSBu
dG9ocyhhZGRyLnNpbjYuc2luNl9wb3J0KTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJY2FzZSBB
Rl9DT05OOgorI2lmZGVmIF9XSU4zMgorCQkJCV9zbnByaW50ZihuYW1lYnVmLCBJTkVUNl9BRERS
U1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIpOworI2Vsc2UKKwkJCQlzbnByaW50
ZihuYW1lYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiJXAiLCBhZGRyLnNjb25uLnNjb25uX2FkZHIp
OworI2VuZGlmCisJCQkJbmFtZSA9IG5hbWVidWY7CisJCQkJcG9ydCA9IG50b2hzKGFkZHIuc2Nv
bm4uc2Nvbm5fcG9ydCk7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCW5hbWUgPSBOVUxM
OworCQkJCXBvcnQgPSAwOworCQkJCWJyZWFrOworCQkJfQorCQkJcHJpbnRmKCJNc2cgb2YgbGVu
Z3RoICVkIHJlY2VpdmVkIGZyb20gJXM6JXUgb24gc3RyZWFtICV1IHdpdGggU1NOICV1IGFuZCBU
U04gJXUsIFBQSUQgJXUsIGNvbnRleHQgJXUuXG4iLAorCQkJICAgICAgIChpbnQpZGF0YWxlbiwK
KwkJCSAgICAgICBuYW1lLAorCQkJICAgICAgIHBvcnQsCisJCQkgICAgICAgcmN2LnJjdl9zaWQs
CisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAg
ICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQkJ
aWYgKGZsYWdzICYgTVNHX0VPUikgeworCQkJCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kX2luZm87
CisKKwkJCQlzbmRfaW5mby5zbmRfc2lkID0gcmN2LnJjdl9zaWQ7CisJCQkJc25kX2luZm8uc25k
X2ZsYWdzID0gMDsKKwkJCQlpZiAocmN2LnJjdl9mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJ
CQkJCXNuZF9pbmZvLnNuZF9mbGFncyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCQl9CisJCQkJc25k
X2luZm8uc25kX3BwaWQgPSByY3YucmN2X3BwaWQ7CisJCQkJc25kX2luZm8uc25kX2NvbnRleHQg
PSAwOworCQkJCXNuZF9pbmZvLnNuZF9hc3NvY19pZCA9IHJjdi5yY3ZfYXNzb2NfaWQ7CisJCQkJ
aWYgKHVzcnNjdHBfc2VuZHYoc29jaywgZGF0YSwgZGF0YWxlbiwgTlVMTCwgMCwgJnNuZF9pbmZv
LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAw
KSB7CisJCQkJCXBlcnJvcigic2N0cF9zZW5kdiIpOworCQkJCX0KKwkJCX0KKwkJfQorCQlmcmVl
KGRhdGEpOworCX0KKwlyZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19wcmludGYoY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3Jt
YXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworaW50CittYWlu
KGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJc3RydWN0IHNvY2tldCAqc29jazsKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlz
dHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBf
QVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJf
Q0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9SRU1PVEVfRVJST1IsCisJ
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX1NIVVRET1dOX0VWRU5ULAorCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04sCisJICAgICAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlR9OworCXVuc2lnbmVk
IGludCBpOworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGF2OworCWNvbnN0IGludCBvbiA9IDE7
CisJc3NpemVfdCBuOworCWludCBmbGFnczsKKwlzb2NrbGVuX3QgZnJvbV9sZW47CisJY2hhciBi
dWZmZXJbQlVGRkVSX1NJWkVdOworCWNoYXIgbmFtZVtJTkVUNl9BRERSU1RSTEVOXTsKKwlzb2Nr
bGVuX3QgaW5mb2xlbjsKKwlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdl9pbmZvOworCXVuc2lnbmVk
IGludCBpbmZvdHlwZTsKKworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShh
cmd2WzFdKSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQo
OTg5OSwgTlVMTCwgZGVidWdfcHJpbnRmKTsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1
c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9ibGFja2hvbGUoMik7CisKKwlpZiAoKHNvY2sgPSB1c3Jz
Y3RwX3NvY2tldChBRl9JTkVUNiwgU09DS19TRVFQQUNLRVQsIElQUFJPVE9fU0NUUCwgdXNlX2Ni
P3JlY2VpdmVfY2I6TlVMTCwgTlVMTCwgMCwgTlVMTCkpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1
c3JzY3RwX3NvY2tldCIpOworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJP
VE9fU0NUUCwgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFIsIChjb25zdCB2b2lkKikmb24sIChz
b2NrbGVuX3Qpc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29w
dCBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiIpOworCX0KKwltZW1zZXQoJmF2LCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpKTsKKwlhdi5hc3NvY19pZCA9IFNDVFBfQUxMX0FT
U09DOworCWF2LmFzc29jX3ZhbHVlID0gNDc7CisKKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNv
Y2ssIElQUFJPVE9fU0NUUCwgU0NUUF9DT05URVhULCAoY29uc3Qgdm9pZCopJmF2LCAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkgeworCQlwZXJyb3IoInVz
cnNjdHBfc2V0c29ja29wdCBTQ1RQX0NPTlRFWFQiKTsKKwl9CisJaWYgKHVzcnNjdHBfc2V0c29j
a29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGlu
dCkpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX1JFQ1ZSQ1ZJTkZP
Iik7CisJfQorCWlmIChhcmdjID4gMikgeworCQltZW1zZXQoJmVuY2FwcywgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Muc3NfZmFtaWx5ID0g
QUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCQlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9SRU1PVEVfVURQ
X0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClzaXplb2Yoc3Ry
dWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29w
dCBTQ1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQiKTsKKwkJfQorCX0KKwltZW1zZXQoJmV2ZW50
LCAwLCBzaXplb2YoZXZlbnQpKTsKKwlldmVudC5zZV9hc3NvY19pZCA9IFNDVFBfRlVUVVJFX0FT
U09DOworCWV2ZW50LnNlX29uID0gMTsKKwlmb3IgKGkgPSAwOyBpIDwgKHVuc2lnbmVkIGludCko
c2l6ZW9mKGV2ZW50X3R5cGVzKS9zaXplb2YodWludDE2X3QpKTsgaSsrKSB7CisJCWV2ZW50LnNl
X3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVudCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50
KSkgPCAwKSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2V0c29ja29wdCBTQ1RQX0VWRU5UIik7CisJ
CX0KKwl9CisJbWVtc2V0KCh2b2lkICopJmFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KSk7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFkZHIuc2luNl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7
CisJYWRkci5zaW42X3BvcnQgPSBodG9ucyhQT1JUKTsKKwlhZGRyLnNpbjZfYWRkciA9IGluNmFk
ZHJfYW55OworCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBf
YmluZCIpOworCX0KKwlpZiAodXNyc2N0cF9saXN0ZW4oc29jaywgMSkgPCAwKSB7CisJCXBlcnJv
cigidXNyc2N0cF9saXN0ZW4iKTsKKwl9CisJd2hpbGUgKDEpIHsKKwkJaWYgKHVzZV9jYikgewor
I2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDApOworI2Vsc2UKKwkJc2xlZXAoU0xF
RVApOworI2VuZGlmCisJCX0gZWxzZSB7CisJCQlmcm9tX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJZmxhZ3MgPSAwOworCQkJaW5mb2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOworCQkJbiA9IHVzcnNjdHBfcmVjdnYo
c29jaywgKHZvaWQqKWJ1ZmZlciwgQlVGRkVSX1NJWkUsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFk
ZHIsICZmcm9tX2xlbiwgKHZvaWQgKikmcmN2X2luZm8sCisJCQkgICAgICAgICAgICAgICAgICAm
aW5mb2xlbiwgJmluZm90eXBlLCAmZmxhZ3MpOworCQkJaWYgKG4gPiAwKSB7CisJCQkJaWYgKGZs
YWdzICYgTVNHX05PVElGSUNBVElPTikgeworCQkJCQlwcmludGYoIk5vdGlmaWNhdGlvbiBvZiBs
ZW5ndGggJWxsdSByZWNlaXZlZC5cbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpbik7CisJCQkJfSBl
bHNlIHsKKwkJCQkJaWYgKGluZm90eXBlID09IFNDVFBfUkVDVlZfUkNWSU5GTykgeworCQkJCQkJ
cHJpbnRmKCJNc2cgb2YgbGVuZ3RoICVsbHUgcmVjZWl2ZWQgZnJvbSAlczoldSBvbiBzdHJlYW0g
JXUgd2l0aCBTU04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgY29tcGxldGUg
JWQuXG4iLAorCQkJCQkJICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKW4sCisJCQkJCQkgICAg
ICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmFkZHIuc2luNl9hZGRyLCBuYW1lLCBJTkVUNl9BRERS
U1RSTEVOKSwgbnRvaHMoYWRkci5zaW42X3BvcnQpLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5y
Y3Zfc2lkLAorCQkJCQkJICAgICAgICByY3ZfaW5mby5yY3Zfc3NuLAorCQkJCQkJICAgICAgICBy
Y3ZfaW5mby5yY3ZfdHNuLAorCQkJCQkJICAgICAgICBudG9obChyY3ZfaW5mby5yY3ZfcHBpZCks
CisJCQkJCQkgICAgICAgIHJjdl9pbmZvLnJjdl9jb250ZXh0LAorCQkJCQkJICAgICAgICAoZmxh
Z3MgJiBNU0dfRU9SKSA/IDEgOiAwKTsKKwkJCQkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKKwkJ
CQkJCQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZF9pbmZvOworCisJCQkJCQkJc25kX2luZm8uc25k
X3NpZCA9IHJjdl9pbmZvLnJjdl9zaWQ7CisJCQkJCQkJc25kX2luZm8uc25kX2ZsYWdzID0gMDsK
KwkJCQkJCQlpZiAocmN2X2luZm8ucmN2X2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJ
CQkJc25kX2luZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQkJCQkJCX0KKwkJCQkJ
CQlzbmRfaW5mby5zbmRfcHBpZCA9IHJjdl9pbmZvLnJjdl9wcGlkOworCQkJCQkJCXNuZF9pbmZv
LnNuZF9jb250ZXh0ID0gMDsKKwkJCQkJCQlzbmRfaW5mby5zbmRfYXNzb2NfaWQgPSByY3ZfaW5m
by5yY3ZfYXNzb2NfaWQ7CisJCQkJCQkJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywgYnVmZmVyLCAo
c2l6ZV90KW4sIE5VTEwsIDAsICZzbmRfaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNj
dHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCQkJCQkJCXBlcnJv
cigic2N0cF9zZW5kdiIpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJ
CXByaW50ZigiTXNnIG9mIGxlbmd0aCAlbGx1IHJlY2VpdmVkIGZyb20gJXM6JXUsIGNvbXBsZXRl
ICVkLlxuIiwKKwkJCQkJCSAgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZyluLAorCQkJCQkJICAg
ICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLnNpbjZfYWRkciwgbmFtZSwgSU5FVDZfQURE
UlNUUkxFTiksIG50b2hzKGFkZHIuc2luNl9wb3J0KSwKKwkJCQkJCSAgICAgICAgKGZsYWdzICYg
TVNHX0VPUikgPyAxIDogMCk7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJfQorCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJd2hpbGUgKHVzcnNjdHBf
ZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlTbGVlcChTTEVFUCAqIDEwMDApOwor
I2Vsc2UKKwkJc2xlZXAoU0xFRVApOworI2VuZGlmCisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfY2xpZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFt
cy9la3JfY2xpZW50LmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhj
NTM5MS4uMWU1ZTdlMzJlZDZjNWU3NTk0YjJiMThiNWFkYjY3MmFkZThjMTRiOCAxMDA2NDQKLS0t
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2NsaWVudC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1z
L2Vrcl9jbGllbnQuYwpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MS0yMDEzIE1pY2hhZWwgVHVleGVuCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBv
ZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisg
KiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4J
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQor
ICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikK
KyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRf
U0VDVVJFX05PX1dBUk5JTkdTCisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg
PHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lu
Y2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxzeXMvc29ja2V0
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2Vsc2UKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2luY2x1ZGUgPHdzMnRjcGlwLmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDx1c3JzY3RwLmg+CisKKyNkZWZpbmUgTUFYX1BBQ0tFVF9TSVpFICgx
PDwxNikKKyNkZWZpbmUgQlVGRkVSX1NJWkUgODAKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisK
KyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAq
CisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlT
T0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZjsK
Kwlzc2l6ZV90IGxlbmd0aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYg
X1dJTjMyCisJZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsK
KyNlbmRpZgorCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRf
dGVzdGNhbmNlbCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFD
S0VUX1NJWkUsIDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVz
cnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkp
ICE9IE5VTEwpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWYpOworCQkJCXVz
cnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCQkJfQorCQkJdXNyc2N0cF9jb25uaW5w
dXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQorCX0KKyNpZmRlZiBfV0lOMzIK
KwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQorCitzdGF0aWMg
aW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYsIHNpemVfdCBsZW5ndGgsIHVp
bnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpkdW1wX2J1ZjsKKyNpZmRlZiBf
V0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVm
IF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRk
cjsKKyNlbmRpZgorCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1bXBwYWNrZXQoYnVmLCBsZW5n
dGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJZnByaW50ZihzdGRlcnIsICIl
cyIsIGR1bXBfYnVmKTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJfQor
I2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGludClsZW5ndGgsIDApID09IFNP
Q0tFVF9FUlJPUikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYg
KHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNl
bmRpZgorCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNl
aXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZv
aWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZv
IHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlmIChkYXRhKSB7CisJCWlm
IChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCXByaW50ZigiTm90aWZpY2F0aW9uIG9m
IGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlw
cmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3
aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAg
ICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAg
ICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQs
CisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAg
ICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9
CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3Mo
dWxwX2luZm8pOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOworfQor
Cit2b2lkCitkZWJ1Z19wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlz
dCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJ
dmFfZW5kKGFwKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJ
c3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNp
ZmRlZiBfV0lOMzIKKwlTT0NLRVQgZmQ7CisjZWxzZQorCWludCBmZDsKKyNlbmRpZgorCXN0cnVj
dCBzb2NrZXQgKnM7CisjaWZkZWYgX1dJTjMyCisJSEFORExFIHRpZDsKKyNlbHNlCisJcHRocmVh
ZF90IHRpZDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKwljaGFyIGJ1
ZmZlcltCVUZGRVJfU0laRV07CisjaWZkZWYgX1dJTjMyCisJV1NBREFUQSB3c2FEYXRhOworI2Vu
ZGlmCisKKwlpZiAoYXJnYyA8IDQpIHsKKwkJcHJpbnRmKCJlcnJvcjogdGhpcyBwcm9ncmFtIHJl
cXVpcmVzIDQgYXJndW1lbnRzIVxuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKyNp
ZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0g
MCkgeworCQlwcmludGYoIldTQVN0YXJ0dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoRVhJVF9GQUlM
VVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3RwX2luaXQoMCwgY29ubl9vdXRwdXQsIGRlYnVnX3By
aW50Zik7CisJLyogc2V0IHVwIGEgY29ubmVjdGVkIFVEUCBzb2NrZXQgKi8KKyNpZmRlZiBfV0lO
MzIKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkg
PT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJv
cjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KyNlbHNlCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VE
UCkpIDwgMCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorI2VuZGlmCisJbWVtc2V0KCZzaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KwlzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNp
bl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9y
dCA9IGh0b25zKGF0b2koYXJndlsyXSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3Zb
MV0sICZzaW4uc2luX2FkZHIuc19hZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRk
cmVzc1xuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYg
KGJpbmQoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVy
cm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorI2Vsc2UKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJ
Tl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlm
CisJc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzRdKSk7CisJaWYgKCFpbmV0X3B0b24o
QUZfSU5FVCwgYXJndlszXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJcHJpbnRmKCJlcnJv
cjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNpZmRl
ZiBfV0lOMzIKKwlpZiAoY29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjb25u
ZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChjb25uZWN0KGZkLCAoc3RydWN0IHNv
Y2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJy
b3IoImNvbm5lY3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVm
IFNDVFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVH
X05PTkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsK
Kwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworI2lmZGVmIF9XSU4zMgor
CXRpZCA9IENyZWF0ZVRocmVhZChOVUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZk
LCAwLCBOVUxMKTsKKyNlbHNlCisJcHRocmVhZF9jcmVhdGUoJnRpZCwgTlVMTCwgJmhhbmRsZV9w
YWNrZXRzLCAodm9pZCAqKSZmZCk7CisjZW5kaWYKKwlpZiAoKHMgPSB1c3JzY3RwX3NvY2tldChB
Rl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAm
ZmQpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwl9CisKKwltZW1z
ZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29u
bl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5f
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25u
X3BvcnQgPSBodG9ucygwKTsKKwlzY29ubi5zY29ubl9hZGRyID0gTlVMTDsKKwlpZiAodXNyc2N0
cF9iaW5kKHMsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCX0KKworCW1lbXNl
dCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25u
X2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9s
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5f
cG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmQ7CisJaWYgKHVzcnNj
dHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwl9CisJ
bWVtc2V0KGJ1ZmZlciwgJ0EnLCBCVUZGRVJfU0laRSk7CisJc25kaW5mby5zbmRfc2lkID0gMTsK
KwlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJc25kaW5mby5zbmRfcHBpZCA9IGh0b25sKERJU0NB
UkRfUFBJRCk7CisJc25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJc25kaW5mby5zbmRfYXNzb2Nf
aWQgPSAwOworCWlmICh1c3JzY3RwX3NlbmR2KHMsIGJ1ZmZlciwgQlVGRkVSX1NJWkUsIE5VTEws
IDAsICh2b2lkICopJnNuZGluZm8sCisJICAgICAgICAgICAgICAgICAgKHNvY2tsZW5fdClzaXpl
b2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJ
CXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCX0KKworCXVzcnNjdHBfc2h1dGRvd24ocywgU0hV
VF9XUik7CisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgor
CQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorI2lmZGVmIF9X
SU4zMgorCVRlcm1pbmF0ZVRocmVhZCh0aWQsIDApOworCVdhaXRGb3JTaW5nbGVPYmplY3QodGlk
LCBJTkZJTklURSk7CisJaWYgKGNsb3Nlc29ja2V0KGZkKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJ
cHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworCX0KKwlXU0FDbGVhbnVwKCk7CisjZWxzZQorCXB0aHJlYWRfY2FuY2VsKHRp
ZCk7CisJcHRocmVhZF9qb2luKHRpZCwgTlVMTCk7CisJaWYgKGNsb3NlKGZkKSA8IDApIHsKKwkJ
cGVycm9yKCJjbG9zZSIpOworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi9wcm9ncmFtcy9la3JfbG9vcC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2xv
b3AuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43N2U3
MmM1Yjg0ZjY0MWRiZTk3MTZlNDlkYWU3ZjRmYzk3N2QxNTQ5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9wcm9ncmFtcy9la3JfbG9vcC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wLmMK
QEAgLTAsMCArMSw1NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVs
IFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0
aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1
dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNI
QUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJO
SU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNp
bmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5j
bHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAoMTw8MTYpCisjZGVmaW5l
IExJTkVfTEVOR1RIICgxPDwyMCkKKyNkZWZpbmUgRElTQ0FSRF9QUElEIDM5CisKKyNpZmRlZiBf
V0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYK
K2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZk
cDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwljaGFyICpkdW1wX2J1ZjsKKwlzc2l6ZV90
IGxlbmd0aDsKKwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCisjaWZkZWYgX1dJTjMyCisJ
ZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgor
CWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNl
bCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3YoKmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUs
IDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVt
cHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBTQ1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwp
IHsKKwkJCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBkdW1wX2J1Zik7CisJCQkJdXNyc2N0cF9m
cmVlZHVtcGJ1ZmZlcihkdW1wX2J1Zik7CisJCQl9CisJCQl1c3JzY3RwX2Nvbm5pbnB1dChmZHAs
IGJ1ZiwgKHNpemVfdClsZW5ndGgsIDApOworCQl9CisJfQorI2lmZGVmIF9XSU4zMgorCXJldHVy
biAwOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2Nv
bm5fb3V0cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCB0
b3MsIHVpbnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVmOworI2lmZGVmIF9XSU4zMgor
CVNPQ0tFVCAqZmRwOworI2Vsc2UKKwlpbnQgKmZkcDsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMy
CisJZmRwID0gKFNPQ0tFVCAqKWFkZHI7CisjZWxzZQorCWZkcCA9IChpbnQgKilhZGRyOworI2Vu
ZGlmCisJaWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIGxlbmd0aCwgU0NU
UF9EVU1QX09VVEJPVU5EKSkgIT0gTlVMTCkgeworCQkvL2ZwcmludGYoc3RkZXJyLCAiJXMiLCBk
dW1wX2J1Zik7CisJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCX0KKyNpZmRl
ZiBfV0lOMzIKKwlpZiAoc2VuZCgqZmRwLCBidWYsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRf
RVJST1IpIHsKKwkJcmV0dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5k
KCpmZHAsIGJ1ZiwgbGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYK
Kwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIGludAorcmVjZWl2ZV9j
YihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpk
YXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3Ys
IGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJcHJpbnRmKCJNZXNzYWdlICVwIHJlY2Vp
dmVkIG9uIHNvY2sgPSAlcC5cbiIsIGRhdGEsICh2b2lkICopc29jayk7CisJaWYgKGRhdGEpIHsK
KwkJaWYgKChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pID09IDApIHsKKwkJCXByaW50ZigiTWVz
c3NhZ2Ugb2YgbGVuZ3RoICVkIHJlY2VpdmVkIHZpYSAlcDoldSBvbiBzdHJlYW0gJXUgd2l0aCBT
U04gJXUgYW5kIFRTTiAldSwgUFBJRCAldSwgY29udGV4dCAldSwgZmxhZ3MgJXguXG4iLAorCQkJ
ICAgICAgIChpbnQpZGF0YWxlbiwKKwkJCSAgICAgICBhZGRyLnNjb25uLnNjb25uX2FkZHIsCisJ
CQkgICAgICAgbnRvaHMoYWRkci5zY29ubi5zY29ubl9wb3J0KSwKKwkJCSAgICAgICByY3YucmN2
X3NpZCwKKwkJCSAgICAgICByY3YucmN2X3NzbiwKKwkJCSAgICAgICByY3YucmN2X3RzbiwKKwkJ
CSAgICAgICBudG9obChyY3YucmN2X3BwaWQpLAorCQkJICAgICAgIHJjdi5yY3ZfY29udGV4dCwK
KwkJCSAgICAgICBmbGFncyk7CisJCX0KKwkJZnJlZShkYXRhKTsKKwl9IGVsc2UgeworCQl1c3Jz
Y3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyh1bHBfaW5mbyk7CisJCXVzcnNjdHBfY2xvc2Uoc29jayk7
CisJfQorCXJldHVybiAoMSk7Cit9CisKKyNpZiAwCitzdGF0aWMgdm9pZAorcHJpbnRfYWRkcmVz
c2VzKHN0cnVjdCBzb2NrZXQgKnNvY2spCit7CisJaW50IGksIG47CisJc3RydWN0IHNvY2thZGRy
ICphZGRycywgKmFkZHI7CisKKwluID0gdXNyc2N0cF9nZXRsYWRkcnMoc29jaywgMCwgJmFkZHJz
KTsKKwlhZGRyID0gYWRkcnM7CisJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQlzd2l0Y2gg
KGFkZHItPnNhX2ZhbWlseSkgeworCQljYXNlIEFGX0lORVQ6CisJCXsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbiAqc2luOworCQkJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNo
YXIgKm5hbWU7CisKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJbmFt
ZSA9IGluZXRfbnRvcChBRl9JTkVULCAmc2luLT5zaW5fYWRkciwgYnVmLCBJTkVUX0FERFJTVFJM
RU4pOworCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJ
CWJyZWFrOworCQl9CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjY7CisJCQljaGFyIGJ1ZltJTkVUNl9BRERSU1RSTEVOXTsKKwkJCWNvbnN0IGNoYXIg
Km5hbWU7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQluYW1l
ID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2luNl9hZGRyLCBidWYsIElORVQ2X0FERFJT
VFJMRU4pOworCQkJcHJpbnRmKCIlczolZCIsIG5hbWUsIG50b2hzKHNpbjYtPnNpbjZfcG9ydCkp
OworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBBRl9DT05OOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqc2Nvbm47CisKKwkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRk
cjsKKwkJCXByaW50ZigiJXA6JWQiLCBzY29ubi0+c2Nvbm5fYWRkciwgbnRvaHMoc2Nvbm4tPnNj
b25uX3BvcnQpKTsKKwkJCWJyZWFrOworCQl9CisJCWRlZmF1bHQ6CisJCQlwcmludGYoIlVua25v
d24gZmFtaWx5OiAlZCIsIGFkZHItPnNhX2ZhbWlseSk7CisJCQlicmVhazsKKwkJfQorCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhZGRyICsgYWRkci0+c2FfbGVuKTsKKwkJ
aWYgKGkgIT0gbiAtIDEpIHsKKwkJCXByaW50ZigiLCIpOworCQl9CisJfQorCWlmIChuID4gMCkg
eworCQl1c3JzY3RwX2ZyZWVsYWRkcnMoYWRkcnMpOworCX0KKwlwcmludGYoIjwtPiIpOworCW4g
PSB1c3JzY3RwX2dldHBhZGRycyhzb2NrLCAwLCAmYWRkcnMpOworCWFkZHIgPSBhZGRyczsKKwlm
b3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisJ
CWNhc2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQljaGFy
IGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luID0g
KHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQluYW1lID0gaW5ldF9udG9wKEFGX0lORVQs
ICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxFTik7CisJCQlwcmludGYoIiVzOiVk
IiwgbmFtZSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCQkJYnJlYWs7CisJCX0KKwkJY2FzZSBB
Rl9JTkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwkJCWNoYXIgYnVm
W0lORVQ2X0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAqbmFtZTsKKworCQkJc2luNiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVDYs
ICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCQlwcmludGYoIiVz
OiVkIiwgbmFtZSwgbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7CisJCQlicmVhazsKKwkJfQorCQlj
YXNlIEFGX0NPTk46CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJ
c2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJcHJpbnRmKCIlcDolZCIs
IHNjb25uLT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+c2Nvbm5fcG9ydCkpOworCQkJYnJlYWs7
CisJCX0KKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVW5rbm93biBmYW1pbHk6ICVkIiwgYWRkci0+
c2FfZmFtaWx5KTsKKwkJCWJyZWFrOworCQl9CisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworCQlpZiAoaSAhPSBuIC0gMSkgeworCQkJ
cHJpbnRmKCIsIik7CisJCX0KKwl9CisJaWYgKG4gPiAwKSB7CisJCXVzcnNjdHBfZnJlZXBhZGRy
cyhhZGRycyk7CisJfQorCXByaW50ZigiXG4iKTsKK30KKyNlbmRpZgorCit2b2lkCitkZWJ1Z19w
cmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0
YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30K
KworaW50CittYWluKHZvaWQpCit7CisJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zLCBzaW5fYzsK
KwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgZmRf
YywgZmRfczsKKyNlbHNlCisJaW50IGZkX2MsIGZkX3M7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0
ICpzX2MsICpzX3MsICpzX2w7CisjaWZkZWYgX1dJTjMyCisJSEFORExFIHRpZF9jLCB0aWRfczsK
KyNlbHNlCisJcHRocmVhZF90IHRpZF9jLCB0aWRfczsKKyNlbmRpZgorCWludCBjdXJfYnVmX3Np
emUsIHNuZF9idWZfc2l6ZSwgcmN2X2J1Zl9zaXplOworCXNvY2tsZW5fdCBvcHRfbGVuOworCXN0
cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKwljaGFyICpsaW5lOworI2lmZGVmIF9XSU4zMgor
CVdTQURBVEEgd3NhRGF0YTsKKyNlbmRpZgorCisjaWZkZWYgX1dJTjMyCisJaWYgKFdTQVN0YXJ0
dXAoTUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKKwkJcHJpbnRmKCJXU0FTdGFydHVw
IGZhaWxlZFxuIik7CisJCWV4aXQgKEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0
cF9pbml0KDAsIGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGYpOworCS8qIHNldCB1cCBhIGNvbm5l
Y3RlZCBVRFAgc29ja2V0ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZF9jID0gc29ja2V0KEFG
X0lORVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJ
cHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJv
cigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3MgPSBzb2NrZXQoQUZf
SU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlw
cmludGYoInNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9y
KCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkX2MgPSBzb2Nr
ZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJz
b2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoKGZkX3MgPSBzb2NrZXQo
QUZfSU5FVCwgU09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2Nr
ZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luX2Ms
IDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW5fYy5zaW5fZmFtaWx5ID0gQUZf
SU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW5fYy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW5fYy5zaW5fcG9ydCA9IGh0b25zKDk5MDApOwor
CXNpbl9jLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisJbWVtc2V0
KCZzaW5fcywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbl9zLnNpbl9mYW1p
bHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbl9zLnNpbl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbl9zLnNpbl9wb3J0ID0gaHRvbnMo
OTkwMSk7CisJc2luX3Muc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0xPT1BCQUNLKTsK
KyNpZmRlZiBfV0lOMzIKKwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9j
LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50
ZigiYmluZCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1Ip
IHsKKwkJcHJpbnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChiaW5kKGZk
X2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
KSA8IDApIHsKKwkJcGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
aWYgKGJpbmQoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fcywgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorCWlmIChjb25uZWN0KGZkX2MsIChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NL
RVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4i
LCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKGNv
bm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbHNlCisJaWYgKGNvbm5lY3QoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZz
aW5fcywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5l
Y3QiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlpZiAoY29ubmVjdChmZF9zLCAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7
CisJCXBlcnJvcigiY29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlm
CisjaWZkZWYgX1dJTjMyCisJdGlkX2MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9w
YWNrZXRzLCAodm9pZCAqKSZmZF9jLCAwLCBOVUxMKTsKKwl0aWRfcyA9IENyZWF0ZVRocmVhZChO
VUxMLCAwLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkX3MsIDAsIE5VTEwpOworI2Vsc2UK
KwlpZiAocHRocmVhZF9jcmVhdGUoJnRpZF9jLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lk
ICopJmZkX2MpKSB7CisJCXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX2MiKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKworCWlmIChwdGhyZWFkX2NyZWF0ZSgmdGlkX3MsIE5VTEwsICZo
YW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfcykpIHsKKwkJcGVycm9yKCJwdGhyZWFkX2NyZWF0
ZSB0aWRfcyIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfTsKKyNlbmRpZgorI2lmZGVmIFND
VFBfREVCVUcKKwl1c3JzY3RwX3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX05P
TkUpOworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwl1
c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmRfYyk7CisJdXNyc2N0cF9yZWdpc3Rl
cl9hZGRyZXNzKCh2b2lkICopJmZkX3MpOworCWlmICgoc19jID0gdXNyc2N0cF9zb2NrZXQoQUZf
Q09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZk
X2MpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9zb2NrZXQiKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKwlvcHRfbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJf
YnVmX3NpemUgPSAwOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBT
T19TTkRCVUYsICZjdXJfYnVmX3NpemUsICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX2dldHNvY2tvcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlwcmludGYoIkNo
YW5nZSBzZW5kIHNvY2tldCBidWZmZXIgc2l6ZSBmcm9tICVkICIsIGN1cl9idWZfc2l6ZSk7CisJ
c25kX2J1Zl9zaXplID0gMTw8MjI7IC8qIDQgTUIgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0
KHNfYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmc25kX2J1Zl9zaXplLCBzaXplb2YoaW50KSkg
PCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9z
aXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05E
QlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9n
ZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5c
biIsIGN1cl9idWZfc2l6ZSk7CisJaWYgKChzX2wgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBT
T0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfcykpID09
IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVS
RSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6
ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzX2wsIFNPTF9TT0NLRVQsIFNPX1JDVkJV
RiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9sZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0
c29ja29wdCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCXByaW50ZigiQ2hhbmdlIHJl
Y2VpdmUgc29ja2V0IGJ1ZmZlciBzaXplIGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwlyY3Zf
YnVmX3NpemUgPSAxPDwxNjsgLyogNjQgS0IgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNf
bCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmcmN2X2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAw
KSB7CisJCXBlcnJvcigidXNyc2N0cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJF
KTsKKwl9CisJb3B0X2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXpl
ID0gMDsKKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVG
LCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRz
b2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5cbiIs
IGN1cl9idWZfc2l6ZSk7CisJLyogQmluZCB0aGUgY2xpZW50IHNpZGUuICovCisJbWVtc2V0KCZz
Y29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFt
aWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0
ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4uc2Nvbm5fYWRkciA9ICZmZF9jOworCWlmICh1c3JzY3Rw
X2JpbmQoc19jLCAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKwkvKiBCaW5kIHRoZSBzZXJ2ZXIgc2lkZS4gKi8KKwltZW1zZXQoJnNj
b25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1p
bHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQg
PSBodG9ucyg1MDAxKTsKKwlzY29ubi5zY29ubl9hZGRyID0gJmZkX3M7CisJaWYgKHVzcnNjdHBf
YmluZChzX2wsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubikpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCS8qIE1ha2Ugc2VydmVyIHNpZGUgcGFzc2l2ZS4uLiAqLworCWlmICh1
c3JzY3RwX2xpc3RlbihzX2wsIDEpIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJLyogSW5pdGlhdGUgdGhlIGhhbmRzaGFrZSAq
LworCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNj
b25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29u
bi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nv
bm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUwMDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfYzsK
KwlpZiAodXNyc2N0cF9jb25uZWN0KHNfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9jb25u
ZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJaWYgKChzX3MgPSB1c3JzY3RwX2Fj
Y2VwdChzX2wsIE5VTEwsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9hY2Nl
cHQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwl1c3JzY3RwX2Nsb3NlKHNfbCk7CisJ
aWYgKChsaW5lID0gbWFsbG9jKExJTkVfTEVOR1RIKSkgPT0gTlVMTCkgeworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCW1lbXNldChsaW5lLCAnQScsIExJTkVfTEVOR1RIKTsKKwlzbmRpbmZv
LnNuZF9zaWQgPSAxOworCXNuZGluZm8uc25kX2ZsYWdzID0gMDsKKwlzbmRpbmZvLnNuZF9wcGlk
ID0gaHRvbmwoRElTQ0FSRF9QUElEKTsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRp
bmZvLnNuZF9hc3NvY19pZCA9IDA7CisJLyogU2VuZCBhIDEgTUIgb3JkZXJlZCBtZXNzYWdlICov
CisJaWYgKHVzcnNjdHBfc2VuZHYoc19jLCBsaW5lLCBMSU5FX0xFTkdUSCwgTlVMTCwgMCwgKHZv
aWQgKikmc25kaW5mbywKKwkgICAgICAgICAgICAgICAgIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sIDApIDwgMCkgeworCQlwZXJyb3Io
InVzcnNjdHBfc2VuZHYiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBTZW5kIGEg
MSBNQiBvcmRlcmVkIG1lc3NhZ2UgKi8KKwlpZiAodXNyc2N0cF9zZW5kdihzX2MsIGxpbmUsIExJ
TkVfTEVOR1RILCBOVUxMLCAwLCAodm9pZCAqKSZzbmRpbmZvLAorCSAgICAgICAgICAgICAgICAg
KHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5G
TywgMCkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorCWZyZWUobGluZSk7CisJdXNyc2N0cF9zaHV0ZG93bihzX2MsIFNIVVRfV1Ip
OworCisJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9XSU4zMgorCQlT
bGVlcCgxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEpOworI2VuZGlmCisJfQorI2lmZGVmIF9XSU4z
MgorCVRlcm1pbmF0ZVRocmVhZCh0aWRfYywgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWRf
YywgSU5GSU5JVEUpOworCVRlcm1pbmF0ZVRocmVhZCh0aWRfcywgMCk7CisJV2FpdEZvclNpbmds
ZU9iamVjdCh0aWRfcywgSU5GSU5JVEUpOworCWlmIChjbG9zZXNvY2tldChmZF9jKSA9PSBTT0NL
RVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjbG9zZXNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAl
ZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlm
IChjbG9zZXNvY2tldChmZF9zKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJpbnRmKCJjbG9zZXNv
Y2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQll
eGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCVdTQUNsZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9j
YW5jZWwodGlkX2MpOworCXB0aHJlYWRfam9pbih0aWRfYywgTlVMTCk7CisJcHRocmVhZF9jYW5j
ZWwodGlkX3MpOworCXB0aHJlYWRfam9pbih0aWRfcywgTlVMTCk7CisJaWYgKGNsb3NlKGZkX2Mp
IDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
aWYgKGNsb3NlKGZkX3MpIDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvcHJvZ3JhbXMvZWtyX2xvb3Bfb2ZmbG9hZC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX2xv
b3Bfb2ZmbG9hZC5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUz
OTEuLjU1ZjdkN2ZjNjk0NWI3NWEwNjA1ZDc4NWVhNTk1ZDc4ZDY2MTZjNmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9sb29wX29mZmxvYWQuYworKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9la3JfbG9vcF9vZmZsb2FkLmMKQEAgLTAsMCArMSw1NTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0
aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9XSU4zMgorI2Rl
ZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRh
cmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8
c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2lu
ZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRl
IDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0
Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIE1BWF9QQUNL
RVRfU0laRSAoMTw8MTYpCisjZGVmaW5lIExJTkVfTEVOR1RIICgxPDwyMCkKKyNkZWZpbmUgRElT
Q0FSRF9QUElEIDM5CisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNl
CitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sKKyNp
ZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKwlj
aGFyICpkdW1wX2J1ZmZlcjsKKwlzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICpoZHI7CisJc3Np
emVfdCBsZW5ndGg7CisJY2hhciBidWZmZXJbTUFYX1BBQ0tFVF9TSVpFXTsKKwl1aW50MzJfdCBy
ZWNlaXZlZF9jcmMzMmMsIGNvbXB1dGVkX2NyYzMyYzsKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9
IChTT0NLRVQgKilhcmc7CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYKKwlmb3Ig
KDs7KSB7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsK
KyNlbmRpZgorCQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZmZlciwgTUFYX1BBQ0tFVF9TSVpFLCAw
KTsKKwkJaWYgKGxlbmd0aCA+IDApIHsKKwkJCWlmICgoZHVtcF9idWZmZXIgPSB1c3JzY3RwX2R1
bXBwYWNrZXQoYnVmZmVyLCAoc2l6ZV90KWxlbmd0aCwgU0NUUF9EVU1QX0lOQk9VTkQpKSAhPSBO
VUxMKSB7CisJCQkJLy9mcHJpbnRmKHN0ZGVyciwgIiVzIiwgZHVtcF9idWZmZXIpOworCQkJCXVz
cnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWZmZXIpOworCQkJfQorCQkJaWYgKChzaXplX3Qp
bGVuZ3RoID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyKSkgeworCQkJCWhkciA9
IChzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICopYnVmZmVyOworCQkJCXJlY2VpdmVkX2NyYzMy
YyA9IGhkci0+Y3JjMzJjOworCQkJCWhkci0+Y3JjMzJjID0gaHRvbmwoMCk7CisJCQkJY29tcHV0
ZWRfY3JjMzJjID0gdXNyc2N0cF9jcmMzMmMoYnVmZmVyLCAoc2l6ZV90KWxlbmd0aCk7CisJCQkJ
aGRyLT5jcmMzMmMgPSByZWNlaXZlZF9jcmMzMmM7CisJCQkJaWYgKHJlY2VpdmVkX2NyYzMyYyA9
PSBjb21wdXRlZF9jcmMzMmMpIHsKKwkJCQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWZmZXIs
IChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJCQl9IGVsc2UgeworCQkJCQlmcHJpbnRmKHN0ZGVyciwg
Ildyb25nIENSQzMyYzogZXhwZWN0ZWQgJTA4eCByZWNlaXZlZCAlMDh4XG4iLAorCQkJCQkgICAg
ICAgIG50b2hsKGNvbXB1dGVkX2NyYzMyYyksIG50b2hsKHJlY2VpdmVkX2NyYzMyYykpOworCQkJ
CX0KKwkJCX0gZWxzZSB7CisJCQkJZnByaW50ZihzdGRlcnIsICJQYWNrZXQgdG9vIHNob3J0OiBs
ZW5ndGggJXp1IiwgKHNpemVfdClsZW5ndGgpOworCQkJfQorCQl9CisJfQorI2lmZGVmIF9XSU4z
MgorCXJldHVybiAwOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRp
YyBpbnQKK2Nvbm5fb3V0cHV0KHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0
aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKQoreworCWNoYXIgKmR1bXBfYnVmZmVyOwor
CXN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIgKmhkcjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQg
KmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9
IChTT0NLRVQgKilhZGRyOworI2Vsc2UKKwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgorCWlm
IChsZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NvbW1vbl9oZWFkZXIpKSB7CisJCWhkciA9
IChzdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVyICopYnVmZmVyOworCQloZHItPmNyYzMyYyA9IHVz
cnNjdHBfY3JjMzJjKGJ1ZmZlciwgKHNpemVfdClsZW5ndGgpOworCX0KKwlpZiAoKGR1bXBfYnVm
ZmVyID0gdXNyc2N0cF9kdW1wcGFja2V0KGJ1ZmZlciwgbGVuZ3RoLCBTQ1RQX0RVTVBfT1VUQk9V
TkQpKSAhPSBOVUxMKSB7CisJCS8vZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmZmVyKTsK
KwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihkdW1wX2J1ZmZlcik7CisJfQorI2lmZGVmIF9XSU4z
MgorCWlmIChzZW5kKCpmZHAsIGJ1ZmZlciwgKGludClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJP
UikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZk
cCwgYnVmZmVyLCBsZW5ndGgsIDApIDwgMCkgeworCQlyZXR1cm4gKGVycm5vKTsKKyNlbmRpZgor
CX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitzdGF0aWMgaW50CityZWNlaXZlX2Ni
KHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRh
dGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwg
aW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKwlwcmludGYoIk1lc3NhZ2UgJXAgcmVjZWl2
ZWQgb24gc29jayA9ICVwLlxuIiwgZGF0YSwgKHZvaWQgKilzb2NrKTsKKwlpZiAoZGF0YSkgewor
CQlpZiAoKGZsYWdzICYgTVNHX05PVElGSUNBVElPTikgPT0gMCkgeworCQkJcHJpbnRmKCJNZXNz
c2FnZSBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3aXRoIFNT
TiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LCBmbGFncyAleC5cbiIsCisJCQkg
ICAgICAgKGludClkYXRhbGVuLAorCQkJICAgICAgIGFkZHIuc2Nvbm4uc2Nvbm5fYWRkciwKKwkJ
CSAgICAgICBudG9ocyhhZGRyLnNjb25uLnNjb25uX3BvcnQpLAorCQkJICAgICAgIHJjdi5yY3Zf
c2lkLAorCQkJICAgICAgIHJjdi5yY3Zfc3NuLAorCQkJICAgICAgIHJjdi5yY3ZfdHNuLAorCQkJ
ICAgICAgIG50b2hsKHJjdi5yY3ZfcHBpZCksCisJCQkgICAgICAgcmN2LnJjdl9jb250ZXh0LAor
CQkJICAgICAgIGZsYWdzKTsKKwkJfQorCQlmcmVlKGRhdGEpOworCX0gZWxzZSB7CisJCXVzcnNj
dHBfZGVyZWdpc3Rlcl9hZGRyZXNzKHVscF9pbmZvKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsK
Kwl9CisJcmV0dXJuICgxKTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkCitwcmludF9hZGRyZXNz
ZXMoc3RydWN0IHNvY2tldCAqc29jaykKK3sKKwlpbnQgaSwgbjsKKwlzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHJzLCAqYWRkcjsKKworCW4gPSB1c3JzY3RwX2dldGxhZGRycyhzb2NrLCAwLCAmYWRkcnMp
OworCWFkZHIgPSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXN3aXRjaCAo
YWRkci0+c2FfZmFtaWx5KSB7CisJCWNhc2UgQUZfSU5FVDoKKwkJeworCQkJc3RydWN0IHNvY2th
ZGRyX2luICpzaW47CisJCQljaGFyIGJ1ZltJTkVUX0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hh
ciAqbmFtZTsKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQluYW1l
ID0gaW5ldF9udG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBidWYsIElORVRfQUREUlNUUkxF
Tik7CisJCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luLT5zaW5fcG9ydCkpOworCQkJ
YnJlYWs7CisJCX0KKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNjsKKwkJCWNoYXIgYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCQkJY29uc3QgY2hhciAq
bmFtZTsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCW5hbWUg
PSBpbmV0X250b3AoQUZfSU5FVDYsICZzaW42LT5zaW42X2FkZHIsIGJ1ZiwgSU5FVDZfQUREUlNU
UkxFTik7CisJCQlwcmludGYoIiVzOiVkIiwgbmFtZSwgbnRvaHMoc2luNi0+c2luNl9wb3J0KSk7
CisJCQlicmVhazsKKwkJfQorCQljYXNlIEFGX0NPTk46CisJCXsKKwkJCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzY29ubjsKKworCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRy
OworCQkJcHJpbnRmKCIlcDolZCIsIHNjb25uLT5zY29ubl9hZGRyLCBudG9ocyhzY29ubi0+c2Nv
bm5fcG9ydCkpOworCQkJYnJlYWs7CisJCX0KKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVW5rbm93
biBmYW1pbHk6ICVkIiwgYWRkci0+c2FfZmFtaWx5KTsKKwkJCWJyZWFrOworCQl9CisJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWFkZHIgKyBhZGRyLT5zYV9sZW4pOworCQlp
ZiAoaSAhPSBuIC0gMSkgeworCQkJcHJpbnRmKCIsIik7CisJCX0KKwl9CisJaWYgKG4gPiAwKSB7
CisJCXVzcnNjdHBfZnJlZWxhZGRycyhhZGRycyk7CisJfQorCXByaW50ZigiPC0+Iik7CisJbiA9
IHVzcnNjdHBfZ2V0cGFkZHJzKHNvY2ssIDAsICZhZGRycyk7CisJYWRkciA9IGFkZHJzOworCWZv
ciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJc3dpdGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKwkJ
Y2FzZSBBRl9JTkVUOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwkJCWNoYXIg
YnVmW0lORVRfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCW5hbWUgPSBpbmV0X250b3AoQUZfSU5FVCwg
JnNpbi0+c2luX2FkZHIsIGJ1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJCXByaW50ZigiJXM6JWQi
LCBuYW1lLCBudG9ocyhzaW4tPnNpbl9wb3J0KSk7CisJCQlicmVhazsKKwkJfQorCQljYXNlIEFG
X0lORVQ2OgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQkJY2hhciBidWZb
SU5FVDZfQUREUlNUUkxFTl07CisJCQljb25zdCBjaGFyICpuYW1lOworCisJCQlzaW42ID0gKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJbmFtZSA9IGluZXRfbnRvcChBRl9JTkVUNiwg
JnNpbjYtPnNpbjZfYWRkciwgYnVmLCBJTkVUNl9BRERSU1RSTEVOKTsKKwkJCXByaW50ZigiJXM6
JWQiLCBuYW1lLCBudG9ocyhzaW42LT5zaW42X3BvcnQpKTsKKwkJCWJyZWFrOworCQl9CisJCWNh
c2UgQUZfQ09OTjoKKwkJeworCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNjb25uOworCisJCQlz
Y29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQlwcmludGYoIiVwOiVkIiwg
c2Nvbm4tPnNjb25uX2FkZHIsIG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSk7CisJCQlicmVhazsK
KwkJfQorCQlkZWZhdWx0OgorCQkJcHJpbnRmKCJVbmtub3duIGZhbWlseTogJWQiLCBhZGRyLT5z
YV9mYW1pbHkpOworCQkJYnJlYWs7CisJCX0KKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKiko
KGNhZGRyX3QpYWRkciArIGFkZHItPnNhX2xlbik7CisJCWlmIChpICE9IG4gLSAxKSB7CisJCQlw
cmludGYoIiwiKTsKKwkJfQorCX0KKwlpZiAobiA+IDApIHsKKwkJdXNyc2N0cF9mcmVlcGFkZHJz
KGFkZHJzKTsKKwl9CisJcHJpbnRmKCJcbiIpOworfQorI2VuZGlmCisKK3ZvaWQKK2RlYnVnX3By
aW50Zihjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJdmFfc3Rh
cnQoYXAsIGZvcm1hdCk7CisJdnByaW50Zihmb3JtYXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQor
CitpbnQKK21haW4odm9pZCkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3MsIHNpbl9jOwor
CXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOworI2lmZGVmIF9XSU4zMgorCVNPQ0tFVCBmZF9j
LCBmZF9zOworI2Vsc2UKKwlpbnQgZmRfYywgZmRfczsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQg
KnNfYywgKnNfcywgKnNfbDsKKyNpZmRlZiBfV0lOMzIKKwlIQU5ETEUgdGlkX2MsIHRpZF9zOwor
I2Vsc2UKKwlwdGhyZWFkX3QgdGlkX2MsIHRpZF9zOworI2VuZGlmCisJaW50IGN1cl9idWZfc2l6
ZSwgc25kX2J1Zl9zaXplLCByY3ZfYnVmX3NpemU7CisJc29ja2xlbl90IG9wdF9sZW47CisJc3Ry
dWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCWNoYXIgKmxpbmU7CisjaWZkZWYgX1dJTjMyCisJ
V1NBREFUQSB3c2FEYXRhOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlpZiAoV1NBU3RhcnR1
cChNQUtFV09SRCgyLDIpLCAmd3NhRGF0YSkgIT0gMCkgeworCQlwcmludGYoIldTQVN0YXJ0dXAg
ZmFpbGVkXG4iKTsKKwkJZXhpdCAoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwl1c3JzY3Rw
X2luaXQoMCwgY29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zik7CisJdXNyc2N0cF9lbmFibGVfY3Jj
MzJjX29mZmxvYWQoKTsKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQgVURQIHNvY2tldCAqLworI2lm
ZGVmIF9XSU4zMgorCWlmICgoZmRfYyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBS
T1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCXByaW50Zigic29ja2V0KCkgZmFpbGVk
IHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJaWYgKChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQUFJP
VE9fVURQKSkgPT0gSU5WQUxJRF9TT0NLRVQpIHsKKwkJcHJpbnRmKCJzb2NrZXQoKSBmYWlsZWQg
d2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKyNlbHNlCisJaWYgKChmZF9jID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0s
IElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJaWYgKChmZF9zID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfREdSQU0sIElQ
UFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbl9jLCAwLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSk7CisJc2luX2Muc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5f
TEVOCisJc2luX2Muc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlm
CisJc2luX2Muc2luX3BvcnQgPSBodG9ucyg5ODk5KTsKKwlzaW5fYy5zaW5fYWRkci5zX2FkZHIg
PSBodG9ubChJTkFERFJfTE9PUEJBQ0spOworCW1lbXNldCgmc2luX3MsIDAsIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW5fcy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwlzaW5fcy5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwlzaW5fcy5zaW5fcG9ydCA9IGh0b25zKDk5MDEpOworCXNpbl9zLnNpbl9hZGRy
LnNfYWRkciA9IGh0b25sKElOQUREUl9MT09QQkFDSyk7CisjaWZkZWYgX1dJTjMyCisJaWYgKGJp
bmQoZmRfYywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImJpbmQoKSBmYWlsZWQgd2l0aCBl
cnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOwor
CX0KKwlpZiAoYmluZChmZF9zLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiYmluZCgpIGZh
aWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoYmluZChmZF9jLCAoc3RydWN0IHNvY2thZGRyICop
JnNpbl9jLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiYmlu
ZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChiaW5kKGZkX3MsIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA8IDApIHsKKwkJ
cGVycm9yKCJiaW5kIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKyNpZmRl
ZiBfV0lOMzIKKwlpZiAoY29ubmVjdChmZF9jLCAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50Zigi
Y29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCWlmIChjb25uZWN0KGZkX3MsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luX2MsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJS
T1IpIHsKKwkJcHJpbnRmKCJjb25uZWN0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FH
ZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChj
b25uZWN0KGZkX2MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3MsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJaWYgKGNvbm5lY3QoZmRfcywgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fYywg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlwZXJyb3IoImNvbm5lY3QiKTsK
KwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorI2lmZGVmIF9XSU4zMgorCXRpZF9j
ID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmRfYywg
MCwgTlVMTCk7CisJdGlkX3MgPSBDcmVhdGVUaHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9wYWNrZXRz
LCAodm9pZCAqKSZmZF9zLCAwLCBOVUxMKTsKKyNlbHNlCisJaWYgKHB0aHJlYWRfY3JlYXRlKCZ0
aWRfYywgTlVMTCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZF9jKSkgeworCQlwZXJyb3Io
InB0aHJlYWRfY3JlYXRlIHRpZF9jIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisKKwlp
ZiAocHRocmVhZF9jcmVhdGUoJnRpZF9zLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICop
JmZkX3MpKSB7CisJCXBlcnJvcigicHRocmVhZF9jcmVhdGUgdGlkX3MiKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX07CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJdXNyc2N0cF9zeXNj
dGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwpOworI2VuZGlmCisJdXNyc2N0cF9z
eXNjdGxfc2V0X3NjdHBfZWNuX2VuYWJsZSgwKTsKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3Mo
KHZvaWQgKikmZmRfYyk7CisJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKCh2b2lkICopJmZkX3Mp
OworCWlmICgoc19jID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJP
VE9fU0NUUCwgcmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZkX2MpKSA9PSBOVUxMKSB7CisJCXBlcnJv
cigidXNyc2N0cF9zb2NrZXQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwlvcHRfbGVu
ID0gKHNvY2tsZW5fdClzaXplb2YoaW50KTsKKwljdXJfYnVmX3NpemUgPSAwOworCWlmICh1c3Jz
Y3RwX2dldHNvY2tvcHQoc19jLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZjdXJfYnVmX3NpemUs
ICZvcHRfbGVuKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX2dldHNvY2tvcHQiKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKwlwcmludGYoIkNoYW5nZSBzZW5kIHNvY2tldCBidWZmZXIg
c2l6ZSBmcm9tICVkICIsIGN1cl9idWZfc2l6ZSk7CisJc25kX2J1Zl9zaXplID0gMTw8MjA7IC8q
IDEgTUIgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05E
QlVGLCAmc25kX2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0
cF9zZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChz
b2NrbGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9n
ZXRzb2Nrb3B0KHNfYywgU09MX1NPQ0tFVCwgU09fU05EQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0
X2xlbikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7CisJaWYg
KChzX2wgPSB1c3JzY3RwX3NvY2tldChBRl9DT05OLCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQ
LCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmZmRfcykpID09IE5VTEwpIHsKKwkJcGVycm9yKCJ1c3Jz
Y3RwX3NvY2tldCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW9wdF9sZW4gPSAoc29j
a2xlbl90KXNpemVvZihpbnQpOworCWN1cl9idWZfc2l6ZSA9IDA7CisJaWYgKHVzcnNjdHBfZ2V0
c29ja29wdChzX2wsIFNPTF9TT0NLRVQsIFNPX1JDVkJVRiwgJmN1cl9idWZfc2l6ZSwgJm9wdF9s
ZW4pIDwgMCkgeworCQlwZXJyb3IoInVzcnNjdHBfZ2V0c29ja29wdCIpOworCQlleGl0KEVYSVRf
RkFJTFVSRSk7CisJfQorCXByaW50ZigiQ2hhbmdlIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBzaXpl
IGZyb20gJWQgIiwgY3VyX2J1Zl9zaXplKTsKKwlyY3ZfYnVmX3NpemUgPSAxPDwxNjsgLyogNjQg
S0IgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVG
LCAmcmN2X2J1Zl9zaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9z
ZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJb3B0X2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKGludCk7CisJY3VyX2J1Zl9zaXplID0gMDsKKwlpZiAodXNyc2N0cF9nZXRz
b2Nrb3B0KHNfbCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAmY3VyX2J1Zl9zaXplLCAmb3B0X2xl
bikgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9nZXRzb2Nrb3B0Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJcHJpbnRmKCJ0byAlZC5cbiIsIGN1cl9idWZfc2l6ZSk7CisJLyogQmlu
ZCB0aGUgY2xpZW50IHNpZGUuICovCisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBI
QVZFX1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoNTAwMSk7CisJc2Nvbm4u
c2Nvbm5fYWRkciA9ICZmZF9jOworCWlmICh1c3JzY3RwX2JpbmQoc19jLCAoc3RydWN0IHNvY2th
ZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVy
cm9yKCJ1c3JzY3RwX2JpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKwkvKiBCaW5k
IHRoZSBzZXJ2ZXIgc2lkZS4gKi8KKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhB
VkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyg1MDAxKTsKKwlzY29ubi5z
Y29ubl9hZGRyID0gJmZkX3M7CisJaWYgKHVzcnNjdHBfYmluZChzX2wsIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpIDwgMCkgeworCQlwZXJy
b3IoInVzcnNjdHBfYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCS8qIE1ha2Ug
c2VydmVyIHNpZGUgcGFzc2l2ZS4uLiAqLworCWlmICh1c3JzY3RwX2xpc3RlbihzX2wsIDEpIDwg
MCkgeworCQlwZXJyb3IoInVzcnNjdHBfbGlzdGVuIik7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsK
Kwl9CisJLyogSW5pdGlhdGUgdGhlIGhhbmRzaGFrZSAqLworCW1lbXNldCgmc2Nvbm4sIDAsIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NP
Tk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKDUw
MDEpOworCXNjb25uLnNjb25uX2FkZHIgPSAmZmRfYzsKKwlpZiAodXNyc2N0cF9jb25uZWN0KHNf
YywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25u
KSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9jb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlM
VVJFKTsKKwl9CisJaWYgKChzX3MgPSB1c3JzY3RwX2FjY2VwdChzX2wsIE5VTEwsIE5VTEwpKSA9
PSBOVUxMKSB7CisJCXBlcnJvcigidXNyc2N0cF9hY2NlcHQiKTsKKwkJZXhpdChFWElUX0ZBSUxV
UkUpOworCX0KKwl1c3JzY3RwX2Nsb3NlKHNfbCk7CisJaWYgKChsaW5lID0gbWFsbG9jKExJTkVf
TEVOR1RIKSkgPT0gTlVMTCkgeworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorCW1lbXNldChs
aW5lLCAnQScsIExJTkVfTEVOR1RIKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSAxOworCXNuZGluZm8u
c25kX2ZsYWdzID0gMDsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FSRF9QUElEKTsK
KwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRpbmZvLnNuZF9hc3NvY19pZCA9IDA7CisJ
LyogU2VuZCBhIDEgTUIgbWVzc2FnZSAqLworCWlmICh1c3JzY3RwX3NlbmR2KHNfYywgbGluZSwg
TElORV9MRU5HVEgsIE5VTEwsIDAsICh2b2lkICopJnNuZGluZm8sCisJICAgICAgICAgICAgICAg
ICAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJ
TkZPLCAwKSA8IDApIHsKKwkJcGVycm9yKCJ1c3JzY3RwX3NlbmR2Iik7CisJCWV4aXQoRVhJVF9G
QUlMVVJFKTsKKwl9CisJZnJlZShsaW5lKTsKKwl1c3JzY3RwX3NodXRkb3duKHNfYywgU0hVVF9X
Uik7CisKKwl3aGlsZSAodXNyc2N0cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJ
CVNsZWVwKDEwMDApOworI2Vsc2UKKwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJ
TjMyCisJVGVybWluYXRlVGhyZWFkKHRpZF9jLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRp
ZF9jLCBJTkZJTklURSk7CisJVGVybWluYXRlVGhyZWFkKHRpZF9zLCAwKTsKKwlXYWl0Rm9yU2lu
Z2xlT2JqZWN0KHRpZF9zLCBJTkZJTklURSk7CisJaWYgKGNsb3Nlc29ja2V0KGZkX2MpID09IFNP
Q0tFVF9FUlJPUikgeworCQlwcmludGYoImNsb3Nlc29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6
ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJ
aWYgKGNsb3Nlc29ja2V0KGZkX3MpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImNsb3Nl
c29ja2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJ
CWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisJV1NBQ2xlYW51cCgpOworI2Vsc2UKKwlwdGhyZWFk
X2NhbmNlbCh0aWRfYyk7CisJcHRocmVhZF9qb2luKHRpZF9jLCBOVUxMKTsKKwlwdGhyZWFkX2Nh
bmNlbCh0aWRfcyk7CisJcHRocmVhZF9qb2luKHRpZF9zLCBOVUxMKTsKKwlpZiAoY2xvc2UoZmRf
YykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0K
KwlpZiAoY2xvc2UoZmRfcykgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwkJZXhpdChFWElU
X0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9wcm9ncmFtcy9la3JfcGVlci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3BlZXIuYwpp
bmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5jYTBjNjRkNmRh
ZDE1ZTU2NmEyYWFmOWE0Y2U4ODBmZDJjYzhmYzQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9n
cmFtcy9la3JfcGVlci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9wZWVyLmMKQEAgLTAs
MCArMSw1NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBNaWNoYWVsIFR1ZXhl
bgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9K
RUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRI
RSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmZGVmIF9XSU4zMgorI2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwor
I2VuZGlmCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRl
IDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNp
bmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZm5kZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tl
dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNp
bmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQu
aD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgor
I2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIE1BWF9QQUNLRVRfU0laRSAo
MTw8MTYpCisjZGVmaW5lIExJTkVfTEVOR1RIIDgwCisjZGVmaW5lIERJU0NBUkRfUFBJRCAzOQor
CisjaWZkZWYgX1dJTjMyCitzdGF0aWMgRFdPUkQgV0lOQVBJCisjZWxzZQorc3RhdGljIHZvaWQg
KgorI2VuZGlmCitoYW5kbGVfcGFja2V0cyh2b2lkICphcmcpCit7CisjaWZkZWYgX1dJTjMyCisJ
U09DS0VUICpmZHA7CisjZWxzZQorCWludCAqZmRwOworI2VuZGlmCisJc3NpemVfdCBsZW5ndGg7
CisJY2hhciBidWZbTUFYX1BBQ0tFVF9TSVpFXTsKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChT
T0NLRVQgKilhcmc7CisjZWxzZQorCWZkcCA9IChpbnQgKilhcmc7CisjZW5kaWYKKwlmb3IgKDs7
KSB7CisjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorCQlwdGhyZWFkX3Rlc3RjYW5jZWwoKTsKKyNl
bmRpZgorCQlsZW5ndGggPSByZWN2KCpmZHAsIGJ1ZiwgTUFYX1BBQ0tFVF9TSVpFLCAwKTsKKwkJ
aWYgKGxlbmd0aCA+IDApIHsKKwkJCXVzcnNjdHBfY29ubmlucHV0KGZkcCwgYnVmLCAoc2l6ZV90
KWxlbmd0aCwgMCk7CisJCX0KKwl9CisjaWZkZWYgX1dJTjMyCisJcmV0dXJuIDA7CisjZWxzZQor
CXJldHVybiAoTlVMTCk7CisjZW5kaWYKK30KKworc3RhdGljIGludAorY29ubl9vdXRwdXQodm9p
ZCAqYWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhf
dCBzZXRfZGYpCit7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUICpmZHA7CisjZWxzZQorCWludCAq
ZmRwOworI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKwlmZHAgPSAoU09DS0VUICopYWRkcjsKKyNl
bHNlCisJZmRwID0gKGludCAqKWFkZHI7CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwlpZiAoc2Vu
ZCgqZmRwLCBidWZmZXIsIChpbnQpbGVuZ3RoLCAwKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcmV0
dXJuIChXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCWlmIChzZW5kKCpmZHAsIGJ1ZmZlciwg
bGVuZ3RoLCAwKSA8IDApIHsKKwkJcmV0dXJuIChlcnJubyk7CisjZW5kaWYKKwl9IGVsc2Ugewor
CQlyZXR1cm4gKDApOworCX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9hc3NvY2lhdGlvbl9j
aGFuZ2VfZXZlbnQoc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlICpzYWMpCit7CisJdW5zaWduZWQg
aW50IGksIG47CisKKwlwcmludGYoIkFzc29jaWF0aW9uIGNoYW5nZSAiKTsKKwlzd2l0Y2ggKHNh
Yy0+c2FjX3N0YXRlKSB7CisJY2FzZSBTQ1RQX0NPTU1fVVA6CisJCXByaW50ZigiU0NUUF9DT01N
X1VQIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT01NX0xPU1Q6CisJCXByaW50ZigiU0NUUF9D
T01NX0xPU1QiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1JFU1RBUlQ6CisJCXByaW50ZigiU0NU
UF9SRVNUQVJUIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9DT01QOgorCQlwcmlu
dGYoIlNDVFBfU0hVVERPV05fQ09NUCIpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ0FOVF9TVFJf
QVNTT0M6CisJCXByaW50ZigiU0NUUF9DQU5UX1NUUl9BU1NPQyIpOworCQlicmVhazsKKwlkZWZh
dWx0OgorCQlwcmludGYoIlVOS05PV04iKTsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiLCBzdHJl
YW1zIChpbi9vdXQpID0gKCV1LyV1KSIsCisJICAgICAgIHNhYy0+c2FjX2luYm91bmRfc3RyZWFt
cywgc2FjLT5zYWNfb3V0Ym91bmRfc3RyZWFtcyk7CisJbiA9IHNhYy0+c2FjX2xlbmd0aCAtIHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpOworCWlmICgoKHNhYy0+c2FjX3N0YXRlID09
IFNDVFBfQ09NTV9VUCkgfHwKKwkgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX1JFU1RBUlQp
KSAmJiAobiA+IDApKSB7CisJCXByaW50ZigiLCBzdXBwb3J0cyIpOworCQlmb3IgKGkgPSAwOyBp
IDwgbjsgaSsrKSB7CisJCQlzd2l0Y2ggKHNhYy0+c2FjX2luZm9baV0pIHsKKwkJCWNhc2UgU0NU
UF9BU1NPQ19TVVBQT1JUU19QUjoKKwkJCQlwcmludGYoIiBQUiIpOworCQkJCWJyZWFrOworCQkJ
Y2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FVVEg6CisJCQkJcHJpbnRmKCIgQVVUSCIpOworCQkJ
CWJyZWFrOworCQkJY2FzZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORjoKKwkJCQlwcmludGYo
IiBBU0NPTkYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxU
SUJVRjoKKwkJCQlwcmludGYoIiBNVUxUSUJVRiIpOworCQkJCWJyZWFrOworCQkJY2FzZSBTQ1RQ
X0FTU09DX1NVUFBPUlRTX1JFX0NPTkZJRzoKKwkJCQlwcmludGYoIiBSRS1DT05GSUciKTsKKwkJ
CQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJcHJpbnRmKCIgVU5LTk9XTigweCUwMngpIiwgc2Fj
LT5zYWNfaW5mb1tpXSk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKCgoc2Fj
LT5zYWNfc3RhdGUgPT0gU0NUUF9DT01NX0xPU1QpIHx8CisJICAgICAgICAgICAgKHNhYy0+c2Fj
X3N0YXRlID09IFNDVFBfQ0FOVF9TVFJfQVNTT0MpKSAmJiAobiA+IDApKSB7CisJCXByaW50Zigi
LCBBQk9SVCA9Iik7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCXByaW50ZigiIDB4
JTAyeCIsIHNhYy0+c2FjX2luZm9baV0pOworCQl9CisJfQorCXByaW50ZigiLlxuIik7CisJaWYg
KChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSB8fAorCSAgICAoc2FjLT5z
YWNfc3RhdGUgPT0gU0NUUF9TSFVURE9XTl9DT01QKSB8fAorCSAgICAoc2FjLT5zYWNfc3RhdGUg
PT0gU0NUUF9DT01NX0xPU1QpKSB7CisJCWV4aXQoMCk7CisJfQorCXJldHVybjsKK30KKworc3Rh
dGljIHZvaWQKK2hhbmRsZV9wZWVyX2FkZHJlc3NfY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3RwX3Bh
ZGRyX2NoYW5nZSAqc3BjKQoreworCWNoYXIgYWRkcl9idWZbSU5FVDZfQUREUlNUUkxFTl07CisJ
Y29uc3QgY2hhciAqYWRkcjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCXN3aXRj
aCAoc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4gPSAo
c3RydWN0IHNvY2thZGRyX2luICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9w
KEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBhZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsKKwkJ
YnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
JnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+c2lu
Nl9hZGRyLCBhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWNhc2UgQUZf
Q09OTjoKKwkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKikmc3BjLT5zcGNfYWFkZHI7
CisjaWZkZWYgX1dJTjMyCisJCV9zbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwg
IiVwIiwgc2Nvbm4tPnNjb25uX2FkZHIpOworI2Vsc2UKKwkJc25wcmludGYoYWRkcl9idWYsIElO
RVQ2X0FERFJTVFJMRU4sICIlcCIsIHNjb25uLT5zY29ubl9hZGRyKTsKKyNlbmRpZgorCQlhZGRy
ID0gYWRkcl9idWY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisjaWZkZWYgX1dJTjMyCisJCV9zbnBy
aW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3Bj
LT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKKyNlbHNlCisJCXNucHJpbnRmKGFkZHJfYnVmLCBJTkVU
Nl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkgJWQiLCBzcGMtPnNwY19hYWRkci5zc19mYW1p
bHkpOworI2VuZGlmCisJCWFkZHIgPSBhZGRyX2J1ZjsKKwkJYnJlYWs7CisJfQorCXByaW50Zigi
UGVlciBhZGRyZXNzICVzIGlzIG5vdyAiLCBhZGRyKTsKKwlzd2l0Y2ggKHNwYy0+c3BjX3N0YXRl
KSB7CisJY2FzZSBTQ1RQX0FERFJfQVZBSUxBQkxFOgorCQlwcmludGYoIlNDVFBfQUREUl9BVkFJ
TEFCTEUiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfVU5SRUFDSEFCTEU6CisJCXByaW50
ZigiU0NUUF9BRERSX1VOUkVBQ0hBQkxFIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1JF
TU9WRUQ6CisJCXByaW50ZigiU0NUUF9BRERSX1JFTU9WRUQiKTsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX0FERFJfQURERUQ6CisJCXByaW50ZigiU0NUUF9BRERSX0FEREVEIik7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9BRERSX01BREVfUFJJTToKKwkJcHJpbnRmKCJTQ1RQX0FERFJfTUFERV9QUklN
Iik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX0NPTkZJUk1FRDoKKwkJcHJpbnRmKCJTQ1RQ
X0FERFJfQ09ORklSTUVEIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9X
TiIpOworCQlicmVhazsKKwl9CisJcHJpbnRmKCIgKGVycm9yID0gMHglMDh4KS5cbiIsIHNwYy0+
c3BjX2Vycm9yKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfc2VuZF9mYWls
ZWRfZXZlbnQoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgKnNzZmUpCit7CisJc2l6ZV90
IGksIG47CisKKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAmIFNDVFBfREFUQV9VTlNFTlQpIHsKKwkJ
cHJpbnRmKCJVbnNlbnQgIik7CisJfQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgU0NUUF9EQVRB
X1NFTlQpIHsKKwkJcHJpbnRmKCJTZW50ICIpOworCX0KKwlpZiAoc3NmZS0+c3NmZV9mbGFncyAm
IH4oU0NUUF9EQVRBX1NFTlQgfCBTQ1RQX0RBVEFfVU5TRU5UKSkgeworCQlwcmludGYoIihmbGFn
cyA9ICV4KSAiLCBzc2ZlLT5zc2ZlX2ZsYWdzKTsKKwl9CisJcHJpbnRmKCJtZXNzYWdlIHdpdGgg
UFBJRCA9ICV1LCBTSUQgPSAldSwgZmxhZ3M6IDB4JTA0eCBkdWUgdG8gZXJyb3IgPSAweCUwOHgi
LAorCSAgICAgICBudG9obChzc2ZlLT5zc2ZlX2luZm8uc25kX3BwaWQpLCBzc2ZlLT5zc2ZlX2lu
Zm8uc25kX3NpZCwKKwkgICAgICAgc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncywgc3NmZS0+c3Nm
ZV9lcnJvcik7CisJbiA9IHNzZmUtPnNzZmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3Nl
bmRfZmFpbGVkX2V2ZW50KTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJCXByaW50Zigi
IDB4JTAyeCIsIHNzZmUtPnNzZmVfZGF0YVtpXSk7CisJfQorCXByaW50ZigiLlxuIik7CisJcmV0
dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX25vdGlmaWNhdGlvbih1bmlvbiBzY3RwX25v
dGlmaWNhdGlvbiAqbm90aWYsIHNpemVfdCBuKQoreworCWlmIChub3RpZi0+c25faGVhZGVyLnNu
X2xlbmd0aCAhPSAodWludDMyX3QpbikgeworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobm90aWYt
PnNuX2hlYWRlci5zbl90eXBlKSB7CisJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJaGFuZGxl
X2Fzc29jaWF0aW9uX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9hc3NvY19jaGFuZ2UpKTsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6CisJCWhhbmRsZV9wZWVyX2FkZHJl
c3NfY2hhbmdlX2V2ZW50KCYobm90aWYtPnNuX3BhZGRyX2NoYW5nZSkpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfUkVNT1RFX0VSUk9SOgorCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fRVZF
TlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046CisJCWJyZWFr
OworCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFND
VFBfQVVUSEVOVElDQVRJT05fRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9TRU5ERVJfRFJZ
X0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5U
OgorCQlicmVhazsKKwljYXNlIFNDVFBfU0VORF9GQUlMRURfRVZFTlQ6CisJCWhhbmRsZV9zZW5k
X2ZhaWxlZF9ldmVudCgmKG5vdGlmLT5zbl9zZW5kX2ZhaWxlZF9ldmVudCkpOworCQlicmVhazsK
KwljYXNlIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UOgorCQlicmVhazsKKwljYXNlIFNDVFBfQVNT
T0NfUkVTRVRfRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5U
OgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3Jl
Y2VpdmVfY2Ioc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwg
dm9pZCAqZGF0YSwKKyAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3RwX3Jjdmlu
Zm8gcmN2LCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKQoreworCWlmIChkYXRhKSB7CisJCWlm
IChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24oKHVu
aW9uIHNjdHBfbm90aWZpY2F0aW9uICopZGF0YSwgZGF0YWxlbik7CisJCX0gZWxzZSB7CisJCQlw
cmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1IG9uIHN0cmVhbSAldSB3
aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1LlxuIiwKKwkJCSAgICAg
ICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29ubl9hZGRyLAorCQkJICAg
ICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAgICAgcmN2LnJjdl9zaWQs
CisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJjdl90c24sCisJCQkgICAg
ICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2X2NvbnRleHQpOworCQl9
CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3Mo
dWxwX2luZm8pOworCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCX0KKwlyZXR1cm4gKDEpOworfQor
Cit2b2lkCitkZWJ1Z19wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlz
dCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmb3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJ
dmFfZW5kKGFwKTsKK30KKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisJ
c3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKwlz
dHJ1Y3Qgc2N0cF9ldmVudCBldmVudDsKKwl1aW50MTZfdCBldmVudF90eXBlc1tdID0ge1NDVFBf
QVNTT0NfQ0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9QRUVSX0FERFJf
Q0hBTkdFLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVO
VH07CisJdW5zaWduZWQgaW50IGk7CisjaWZkZWYgX1dJTjMyCisJU09DS0VUIGZkOworI2Vsc2UK
KwlpbnQgZmQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzOworI2lmZGVmIF9XSU4zMgorCUhB
TkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9z
bmRpbmZvIHNuZGluZm87CisJY2hhciBsaW5lW0xJTkVfTEVOR1RIXTsKKyNpZmRlZiBfV0lOMzIK
KwlXU0FEQVRBIHdzYURhdGE7CisjZW5kaWYKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmludGYo
ImVycm9yOiB0aGlzIHByb2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhpdChF
WElUX0ZBSUxVUkUpOworCX0KKworI2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1BS0VX
T1JEKDIsMiksICZ3c2FEYXRhKSAhPSAwKSB7CisJCXByaW50ZigiV1NBU3RhcnR1cCBmYWlsZWRc
biIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJdXNyc2N0cF9pbml0KDAs
IGNvbm5fb3V0cHV0LCBkZWJ1Z19wcmludGYpOworCS8qIHNldCB1cCBhIGNvbm5lY3RlZCBVRFAg
c29ja2V0ICovCisjaWZkZWYgX1dJTjMyCisJaWYgKChmZCA9IHNvY2tldChBRl9JTkVULCBTT0NL
X0RHUkFNLCBJUFBST1RPX1VEUCkpID09IElOVkFMSURfU09DS0VUKSB7CisJCXByaW50Zigic29j
a2V0KCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCWV4
aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA8IDApIHsKKwkJcGVycm9yKCJzb2NrZXQiKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNldCgmc2luLCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVm
IEhBVkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisjZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwlpZiAoIWlu
ZXRfcHRvbihBRl9JTkVULCBhcmd2WzFdLCAmc2luLnNpbl9hZGRyLnNfYWRkcikpeworCQlwcmlu
dGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJ
fQorI2lmZGVmIF9XSU4zMgorCWlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYo
ImJpbmQoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJ
ZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJaWYgKGJpbmQoZmQsIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJv
cigiYmluZCIpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2VuZGlmCisJbWVtc2V0KCZz
aW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzaW4uc2luX2ZhbWlseSA9IEFG
X0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJc2luLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNpbi5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndls0
XSkpOworCWlmICghaW5ldF9wdG9uKEFGX0lORVQsIGFyZ3ZbM10sICZzaW4uc2luX2FkZHIuc19h
ZGRyKSl7CisJCXByaW50ZigiZXJyb3I6IGludmFsaWQgYWRkcmVzc1xuIik7CisJCWV4aXQoRVhJ
VF9GQUlMVVJFKTsKKwl9CisjaWZkZWYgX1dJTjMyCisJaWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPT0gU09DS0VUX0VS
Uk9SKSB7CisJCXByaW50ZigiY29ubmVjdCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NB
R2V0TGFzdEVycm9yKCkpOworCQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAo
Y29ubmVjdChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKSA8IDApIHsKKwkJcGVycm9yKCJjb25uZWN0Iik7CisJCWV4aXQoRVhJVF9GQUlMVVJF
KTsKKwl9CisjZW5kaWYKKyNpZmRlZiBfV0lOMzIKKwl0aWQgPSBDcmVhdGVUaHJlYWQoTlVMTCwg
MCwgJmhhbmRsZV9wYWNrZXRzLCAodm9pZCAqKSZmZCwgMCwgTlVMTCk7CisjZWxzZQorCXB0aHJl
YWRfY3JlYXRlKCZ0aWQsIE5VTEwsICZoYW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQpOworI2Vu
ZGlmCisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2RlYnVnX29u
KFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3JlZ2lzdGVyX2FkZHJlc3MoKHZv
aWQgKikmZmQpOworCXVzcnNjdHBfc3lzY3RsX3NldF9zY3RwX2Vjbl9lbmFibGUoMCk7CisJaWYg
KChzID0gdXNyc2N0cF9zb2NrZXQoQUZfQ09OTiwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwg
cmVjZWl2ZV9jYiwgTlVMTCwgMCwgJmZkKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBf
c29ja2V0Iik7CisJfQorCS8qIEVuYWJsZSB0aGUgZXZlbnRzIG9mIGludGVyZXN0LiAqLworCWlm
ICh1c3JzY3RwX3NldF9ub25fYmxvY2tpbmcocywgMSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0
cF9zZXRfbm9uX2Jsb2NraW5nIik7CisJfQorCW1lbXNldCgmZXZlbnQsIDAsIHNpemVvZihldmVu
dCkpOworCWV2ZW50LnNlX2Fzc29jX2lkID0gU0NUUF9BTExfQVNTT0M7CisJZXZlbnQuc2Vfb24g
PSAxOworCWZvciAoaSA9IDA7IGkgPCBzaXplb2YoZXZlbnRfdHlwZXMpL3NpemVvZih1aW50MTZf
dCk7IGkrKykgeworCQlldmVudC5zZV90eXBlID0gZXZlbnRfdHlwZXNbaV07CisJCWlmICh1c3Jz
Y3RwX3NldHNvY2tvcHQocywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VWRU5ULCAmZXZlbnQsIHNpemVv
ZihldmVudCkpIDwgMCkgeworCQkJcGVycm9yKCJzZXRzb2Nrb3B0IFNDVFBfRVZFTlQiKTsKKwkJ
fQorCX0KKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJ
c2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgor
CXNjb25uLnNjb25uX3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbNV0pKTsKKwlzY29ubi5zY29ubl9h
ZGRyID0gJmZkOworCWlmICh1c3JzY3RwX2JpbmQocywgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29u
biwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0
cF9iaW5kIik7CisJfQorCW1lbXNldCgmc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubikpOworCXNjb25uLnNjb25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09O
Tl9MRU4KKwlzY29ubi5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwor
I2VuZGlmCisJc2Nvbm4uc2Nvbm5fcG9ydCA9IGh0b25zKGF0b2koYXJndls2XSkpOworCXNjb25u
LnNjb25uX2FkZHIgPSAmZmQ7CisJaWYgKHVzcnNjdHBfY29ubmVjdChzLCAoc3RydWN0IHNvY2th
ZGRyICopJnNjb25uLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSA8IDApIHsKKwkJcGVy
cm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwl9CisJZm9yICg7OykgeworI2lmZGVmIF9XSU4zMgor
CQlpZiAoZ2V0c19zKGxpbmUsIExJTkVfTEVOR1RIKSA9PSBOVUxMKSB7CisjZWxzZQorCQlpZiAo
ZmdldHMobGluZSwgTElORV9MRU5HVEgsIHN0ZGluKSA9PSBOVUxMKSB7CisjZW5kaWYKKwkJCWlm
ICh1c3JzY3RwX3NodXRkb3duKHMsIFNIVVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0
cF9zaHV0ZG93biIpOworCQkJfQorCQkJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgewor
I2lmZGVmIF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNl
bmRpZgorCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJc25kaW5mby5zbmRfc2lkID0gMTsKKwkJc25k
aW5mby5zbmRfZmxhZ3MgPSAwOworCQlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoRElTQ0FSRF9Q
UElEKTsKKwkJc25kaW5mby5zbmRfY29udGV4dCA9IDA7CisJCXNuZGluZm8uc25kX2Fzc29jX2lk
ID0gMDsKKwkJaWYgKHVzcnNjdHBfc2VuZHYocywgbGluZSwgc3RybGVuKGxpbmUpLCBOVUxMLCAw
LCAodm9pZCAqKSZzbmRpbmZvLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvY2tsZW5f
dClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAw
KSB7CisJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJfQorCX0KKwl3aGlsZSAodXNyc2N0
cF9maW5pc2goKSAhPSAwKSB7CisjaWZkZWYgX1dJTjMyCisJCVNsZWVwKDEwMDApOworI2Vsc2UK
KwkJc2xlZXAoMSk7CisjZW5kaWYKKwl9CisjaWZkZWYgX1dJTjMyCisJVGVybWluYXRlVGhyZWFk
KHRpZCwgMCk7CisJV2FpdEZvclNpbmdsZU9iamVjdCh0aWQsIElORklOSVRFKTsKKwlpZiAoY2xv
c2Vzb2NrZXQoZmQpID09IFNPQ0tFVF9FUlJPUikgeworCQlwcmludGYoImNsb3Nlc29ja2V0KCkg
ZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJfQorCVdTQUNs
ZWFudXAoKTsKKyNlbHNlCisJcHRocmVhZF9jYW5jZWwodGlkKTsKKwlwdGhyZWFkX2pvaW4odGlk
LCBOVUxMKTsKKwlpZiAoY2xvc2UoZmQpIDwgMCkgeworCQlwZXJyb3IoImNsb3NlIik7CisJfQor
I2VuZGlmCisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vr
cl9zZXJ2ZXIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2Vrcl9zZXJ2ZXIuYwppbmRleCBlNjlkZTI5
YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi41NTQ1YWJiMzI2NWRkMTIwOGI0NjY5
MmJjMzdmNWU5YzYzOGM2MjNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9la3Jfc2Vy
dmVyLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvZWtyX3NlcnZlci5jCkBAIC0wLDAgKzEsMzA2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLTIwMTMgTWljaGFlbCBUdWV4ZW4KKyAqCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp
cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVD
VCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgor
CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJp
bmcuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpZm5k
ZWYgX1dJTjMyCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4u
aD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg
PHB0aHJlYWQuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbHNlCisjaW5jbHVkZSA8d2luc29j
azIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5o
PgorCisjZGVmaW5lIFBPUlQgNTAwMQorI2RlZmluZSBNQVhfUEFDS0VUX1NJWkUgKDE8PDE2KQor
I2RlZmluZSBTTEVFUCAxCisKKyNpZmRlZiBfV0lOMzIKK3N0YXRpYyBEV09SRCBXSU5BUEkKKyNl
bHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRsZV9wYWNrZXRzKHZvaWQgKmFyZykKK3sK
KyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7CisjZW5kaWYK
KwljaGFyIGJ1ZltNQVhfUEFDS0VUX1NJWkVdOworCWNoYXIgKmR1bXBfYnVmOworCXNzaXplX3Qg
bGVuZ3RoOworCisjaWZkZWYgX1dJTjMyCisJZmRwID0gKFNPQ0tFVCAqKWFyZzsKKyNlbHNlCisJ
ZmRwID0gKGludCAqKWFyZzsKKyNlbmRpZgorCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkKF9fTmV0
QlNEX18pCisJCXB0aHJlYWRfdGVzdGNhbmNlbCgpOworI2VuZGlmCisJCWxlbmd0aCA9IHJlY3Yo
KmZkcCwgYnVmLCBNQVhfUEFDS0VUX1NJWkUsIDApOworCQlpZiAobGVuZ3RoID4gMCkgeworCQkJ
aWYgKChkdW1wX2J1ZiA9IHVzcnNjdHBfZHVtcHBhY2tldChidWYsIChzaXplX3QpbGVuZ3RoLCBT
Q1RQX0RVTVBfSU5CT1VORCkpICE9IE5VTEwpIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwg
ZHVtcF9idWYpOworCQkJCXVzcnNjdHBfZnJlZWR1bXBidWZmZXIoZHVtcF9idWYpOworCQkJfQor
CQkJdXNyc2N0cF9jb25uaW5wdXQoZmRwLCBidWYsIChzaXplX3QpbGVuZ3RoLCAwKTsKKwkJfQor
CX0KKyNpZmRlZiBfV0lOMzIKKwlyZXR1cm4gMDsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNl
bmRpZgorfQorCitzdGF0aWMgaW50Citjb25uX291dHB1dCh2b2lkICphZGRyLCB2b2lkICpidWYs
IHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZikKK3sKKwljaGFyICpk
dW1wX2J1ZjsKKyNpZmRlZiBfV0lOMzIKKwlTT0NLRVQgKmZkcDsKKyNlbHNlCisJaW50ICpmZHA7
CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCWZkcCA9IChTT0NLRVQgKilhZGRyOworI2Vsc2UK
KwlmZHAgPSAoaW50ICopYWRkcjsKKyNlbmRpZgorCWlmICgoZHVtcF9idWYgPSB1c3JzY3RwX2R1
bXBwYWNrZXQoYnVmLCBsZW5ndGgsIFNDVFBfRFVNUF9PVVRCT1VORCkpICE9IE5VTEwpIHsKKwkJ
ZnByaW50ZihzdGRlcnIsICIlcyIsIGR1bXBfYnVmKTsKKwkJdXNyc2N0cF9mcmVlZHVtcGJ1ZmZl
cihkdW1wX2J1Zik7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChzZW5kKCpmZHAsIGJ1ZiwgKGlu
dClsZW5ndGgsIDApID09IFNPQ0tFVF9FUlJPUikgeworCQlyZXR1cm4gKFdTQUdldExhc3RFcnJv
cigpKTsKKyNlbHNlCisJaWYgKHNlbmQoKmZkcCwgYnVmLCBsZW5ndGgsIDApIDwgMCkgeworCQly
ZXR1cm4gKGVycm5vKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQor
CitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnMsIHVuaW9uIHNjdHBfc29j
a3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1
Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbykKK3sKKworCWlm
IChkYXRhKSB7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCXByaW50Zigi
Tm90aWZpY2F0aW9uIG9mIGxlbmd0aCAlZCByZWNlaXZlZC5cbiIsIChpbnQpZGF0YWxlbik7CisJ
CX0gZWxzZSB7CisJCQlwcmludGYoIk1zZyBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgdmlhICVwOiV1
IG9uIHN0cmVhbSAldSB3aXRoIFNTTiAldSBhbmQgVFNOICV1LCBQUElEICV1LCBjb250ZXh0ICV1
LlxuIiwKKwkJCSAgICAgICAoaW50KWRhdGFsZW4sCisJCQkgICAgICAgYWRkci5zY29ubi5zY29u
bl9hZGRyLAorCQkJICAgICAgIG50b2hzKGFkZHIuc2Nvbm4uc2Nvbm5fcG9ydCksCisJCQkgICAg
ICAgcmN2LnJjdl9zaWQsCisJCQkgICAgICAgcmN2LnJjdl9zc24sCisJCQkgICAgICAgcmN2LnJj
dl90c24sCisJCQkgICAgICAgbnRvaGwocmN2LnJjdl9wcGlkKSwKKwkJCSAgICAgICByY3YucmN2
X2NvbnRleHQpOworCQl9CisJCWZyZWUoZGF0YSk7CisJfSBlbHNlIHsKKwkJdXNyc2N0cF9jbG9z
ZShzKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNo
YXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0
KTsKKwl2cHJpbnRmKGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihp
bnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisJc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisjaWZkZWYgX1dJTjMyCisJU09DS0VUIGZkOworI2Vs
c2UKKwlpbnQgZmQ7CisjZW5kaWYKKwlzdHJ1Y3Qgc29ja2V0ICpzOworI2lmZGVmIF9XSU4zMgor
CUhBTkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYKKyNpZmRlZiBfV0lO
MzIKKwlXU0FEQVRBIHdzYURhdGE7CisjZW5kaWYKKworCWlmIChhcmdjIDwgNCkgeworCQlwcmlu
dGYoImVycm9yOiB0aGlzIHByb2dyYW0gcmVxdWlyZXMgNCBhcmd1bWVudHMhXG4iKTsKKwkJZXhp
dChFWElUX0ZBSUxVUkUpOworCX0KKworI2lmZGVmIF9XSU4zMgorCWlmIChXU0FTdGFydHVwKE1B
S0VXT1JEKDIsMiksICZ3c2FEYXRhKSAhPSAwKSB7CisJCXByaW50ZigiV1NBU3RhcnR1cCBmYWls
ZWRcbiIpOworCQlleGl0IChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCXVzcnNjdHBfaW5p
dCgwLCBjb25uX291dHB1dCwgZGVidWdfcHJpbnRmKTsKKwkvKiBzZXQgdXAgYSBjb25uZWN0ZWQg
VURQIHNvY2tldCAqLworI2lmZGVmIF9XSU4zMgorCWlmICgoZmQgPSBzb2NrZXQoQUZfSU5FVCwg
U09DS19ER1JBTSwgSVBQUk9UT19VRFApKSA9PSBJTlZBTElEX1NPQ0tFVCkgeworCQlwcmludGYo
InNvY2tldCgpIGZhaWxlZCB3aXRoIGVycm9yOiAlZFxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwor
CQlleGl0KEVYSVRfRkFJTFVSRSk7CisJfQorI2Vsc2UKKwlpZiAoKGZkID0gc29ja2V0KEFGX0lO
RVQsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPCAwKSB7CisJCXBlcnJvcigic29ja2V0Iik7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZW5kaWYKKwltZW1zZXQoJnNpbiwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNp
ZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworI2VuZGlmCisJc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7CisJaWYg
KCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndlsxXSwgJnNpbi5zaW5fYWRkci5zX2FkZHIpKXsKKwkJ
cHJpbnRmKCJlcnJvcjogaW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUp
OworCX0KKyNpZmRlZiBfV0lOMzIKKwlpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciAqKSZz
aW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSA9PSBTT0NLRVRfRVJST1IpIHsKKwkJcHJp
bnRmKCJiaW5kKCkgZmFpbGVkIHdpdGggZXJyb3I6ICVkXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7
CisJCWV4aXQoRVhJVF9GQUlMVVJFKTsKKwl9CisjZWxzZQorCWlmIChiaW5kKGZkLCAoc3RydWN0
IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQlw
ZXJyb3IoImJpbmQiKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbmRpZgorCW1lbXNl
dCgmc2luLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJc2luLnNpbl9mYW1pbHkg
PSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlzaW4uc2luX3BvcnQgPSBodG9ucyhhdG9pKGFy
Z3ZbNF0pKTsKKwlpZiAoIWluZXRfcHRvbihBRl9JTkVULCBhcmd2WzNdLCAmc2luLnNpbl9hZGRy
LnNfYWRkcikpeworCQlwcmludGYoImVycm9yOiBpbnZhbGlkIGFkZHJlc3NcbiIpOworCQlleGl0
KEVYSVRfRkFJTFVSRSk7CisJfQorI2lmZGVmIF9XSU4zMgorCWlmIChjb25uZWN0KGZkLCAoc3Ry
dWN0IHNvY2thZGRyICopJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IFNPQ0tF
VF9FUlJPUikgeworCQlwcmludGYoImNvbm5lY3QoKSBmYWlsZWQgd2l0aCBlcnJvcjogJWRcbiIs
IFdTQUdldExhc3RFcnJvcigpKTsKKwkJZXhpdChFWElUX0ZBSUxVUkUpOworCX0KKyNlbHNlCisJ
aWYgKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgPCAwKSB7CisJCXBlcnJvcigiY29ubmVjdCIpOworCQlleGl0KEVYSVRfRkFJ
TFVSRSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3Nl
dF9zY3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0
bF9zZXRfc2N0cF9lY25fZW5hYmxlKDApOworCXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcygodm9p
ZCAqKSZmZCk7CisjaWZkZWYgX1dJTjMyCisJdGlkID0gQ3JlYXRlVGhyZWFkKE5VTEwsIDAsICZo
YW5kbGVfcGFja2V0cywgKHZvaWQgKikmZmQsIDAsIE5VTEwpOworI2Vsc2UKKwlwdGhyZWFkX2Ny
ZWF0ZSgmdGlkLCBOVUxMLCAmaGFuZGxlX3BhY2tldHMsICh2b2lkICopJmZkKTsKKyNlbmRpZgor
CWlmICgocyA9IHVzcnNjdHBfc29ja2V0KEFGX0NPTk4sIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1ND
VFAsIHJlY2VpdmVfY2IsIE5VTEwsIDAsIE5VTEwpKSA9PSBOVUxMKSB7CisJCXBlcnJvcigidXNy
c2N0cF9zb2NrZXQiKTsKKwl9CisJbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9jb25uKSk7CisJc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZF
X1NDT05OX0xFTgorCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bik7CisjZW5kaWYKKwlzY29ubi5zY29ubl9wb3J0ID0gaHRvbnMoUE9SVCk7CisJc2Nvbm4uc2Nv
bm5fYWRkciA9ICh2b2lkICopJmZkOworCWlmICh1c3JzY3RwX2JpbmQocywgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzY29ubiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgPCAwKSB7CisJCXBl
cnJvcigidXNyc2N0cF9iaW5kIik7CisJfQorCWlmICh1c3JzY3RwX2xpc3RlbihzLCAxKSA8IDAp
IHsKKwkJcGVycm9yKCJ1c3JzY3RwX2xpc3RlbiIpOworCX0KKwl3aGlsZSAoMSkgeworCQlpZiAo
dXNyc2N0cF9hY2NlcHQocywgTlVMTCwgTlVMTCkgPT0gTlVMTCkgeworCQkJcGVycm9yKCJ1c3Jz
Y3RwX2FjY2VwdCIpOworCQl9CisJfQorCXVzcnNjdHBfY2xvc2Uocyk7CisJdXNyc2N0cF9kZXJl
Z2lzdGVyX2FkZHJlc3MoKHZvaWQgKikmZmQpOworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9
IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoU0xFRVAgKiAxMDAwKTsKKyNlbHNlCisJCXNs
ZWVwKFNMRUVQKTsKKyNlbmRpZgorCX0KKyNpZmRlZiBfV0lOMzIKKwlUZXJtaW5hdGVUaHJlYWQo
dGlkLCAwKTsKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KHRpZCwgSU5GSU5JVEUpOworCWlmIChjbG9z
ZXNvY2tldChmZCkgPT0gU09DS0VUX0VSUk9SKSB7CisJCXByaW50ZigiY2xvc2Vzb2NrZXQoKSBm
YWlsZWQgd2l0aCBlcnJvcjogJWRcbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwl9CisJV1NBQ2xl
YW51cCgpOworI2Vsc2UKKwlwdGhyZWFkX2NhbmNlbCh0aWQpOworCXB0aHJlYWRfam9pbih0aWQs
IE5VTEwpOworCWlmIChjbG9zZShmZCkgPCAwKSB7CisJCXBlcnJvcigiY2xvc2UiKTsKKwl9Cisj
ZW5kaWYKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0
cF9jbGllbnQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL2h0dHBfY2xpZW50LmMKaW5kZXggZTY5ZGUy
OWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNGRjMTk3ZjAxMzdiZDJiYWRiOWZj
ZmFhNzZlMmM5NmJmMmExOTgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvaHR0cF9j
bGllbnQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9odHRwX2NsaWVudC5jCkBAIC0wLDAgKzEs
MjM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEZlbGl4IFdlaW5yYW5rCisgKgorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisv
KgorICogVXNhZ2U6IGh0dHBfY2xpZW50IHJlbW90ZV9hZGRyIHJlbW90ZV9wb3J0IFtsb2NhbF9w
b3J0XSBbbG9jYWxfZW5jYXBzX3BvcnRdIFtyZW1vdGVfZW5jYXBzX3BvcnRdIFt1cmldCisgKiAK
KyAqIEV4YW1wbGUKKyAqIENsaWVudDogJCAuL2h0dHBfY2xpZW50IDIxMi4yMDEuMTIxLjEwMCA4
MCAwIDk4OTkgOTg5OSAvY2dpLWJpbi9oZQorICogICAgICAgICAgIC4vaHR0cF9jbGllbnQgMmEw
MjpjNmEwOjQwMTU6MTA6OjEwMCA4MCAwIDk4OTkgOTg5OSAvY2dpLWJpbi9oZQorICovCisKKyNp
ZmRlZiBfV0lOMzIKKyNkZWZpbmUgX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MKKyNlbmRpZgorI2lu
Y2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+
CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZuZGVmIF9XSU4zMgorI2luY2x1
ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJw
YS9pbmV0Lmg+CisjZWxzZQorI2luY2x1ZGUgPGlvLmg+CisjZW5kaWYKKyNpbmNsdWRlIDx1c3Jz
Y3RwLmg+CisKK2ludCBkb25lID0gMDsKK3N0YXRpYyBjb25zdCBjaGFyICpyZXF1ZXN0X3ByZWZp
eCA9ICJHRVQiOworc3RhdGljIGNvbnN0IGNoYXIgKnJlcXVlc3RfcG9zdGZpeCA9ICJIVFRQLzEu
MFxyXG5Vc2VyLWFnZW50OiBsaWJ1c3JzY3RwXHJcbkNvbm5lY3Rpb246IGNsb3NlXHJcblxyXG4i
OworY2hhciByZXF1ZXN0WzUxMl07CisKKyNpZmRlZiBfV0lOMzIKK3R5cGVkZWYgY2hhciogY2Fk
ZHJfdDsKKyNlbmRpZgorCitzdGF0aWMgaW50CityZWNlaXZlX2NiKHN0cnVjdCBzb2NrZXQgKnNv
Y2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgIHNp
emVfdCBkYXRhbGVuLCBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJjdiwgaW50IGZsYWdzLCB2b2lkICp1
bHBfaW5mbykKK3sKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWRvbmUgPSAxOworCQl1c3JzY3Rw
X2Nsb3NlKHNvY2spOworCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCV93cml0ZShfZmlsZW5v
KHN0ZG91dCksIGRhdGEsICh1bnNpZ25lZCBpbnQpZGF0YWxlbik7CisjZWxzZQorCQlpZiAod3Jp
dGUoZmlsZW5vKHN0ZG91dCksIGRhdGEsIGRhdGFsZW4pIDwgMCkgeworCQkJcGVycm9yKCJ3cml0
ZSIpOworCQl9CisjZW5kaWYKKwkJZnJlZShkYXRhKTsKKwl9CisJcmV0dXJuICgxKTsKK30KKwor
dm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQoreworCXZhX2xpc3Qg
YXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2cHJpbnRmKGZvcm1hdCwgYXApOworCXZh
X2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworCXN0
cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2thZGRyX2luIGFkZHI0OworCXN0cnVjdCBz
b2NrYWRkcl9pbjYgYWRkcjY7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1
Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisJaW50IHJlc3VsdDsKKworICAgIGlmIChhcmdjIDwg
MykgeworICAgICAgICBwcmludGYoIlVzYWdlOiBodHRwX2NsaWVudCByZW1vdGVfYWRkciByZW1v
dGVfcG9ydCBbbG9jYWxfcG9ydF0gW2xvY2FsX2VuY2Fwc19wb3J0XSBbcmVtb3RlX2VuY2Fwc19w
b3J0XSBbdXJpXVxuIik7CisgICAgICAgIHJldHVybihFWElUX0ZBSUxVUkUpOworICAgIH0KKwor
CXJlc3VsdCA9IDA7CisJaWYgKGFyZ2MgPiA0KSB7CisJCXVzcnNjdHBfaW5pdChhdG9pKGFyZ3Zb
NF0pLCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0gZWxzZSB7CisJCXVzcnNjdHBfaW5pdCg5ODk5
LCBOVUxMLCBkZWJ1Z19wcmludGYpOworCX0KKworI2lmZGVmIFNDVFBfREVCVUcKKwl1c3JzY3Rw
X3N5c2N0bF9zZXRfc2N0cF9kZWJ1Z19vbihTQ1RQX0RFQlVHX0FMTCk7CisjZW5kaWYKKworCXVz
cnNjdHBfc3lzY3RsX3NldF9zY3RwX2JsYWNraG9sZSgyKTsKKworCWlmICgoc29jayA9IHVzcnNj
dHBfc29ja2V0KEFGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2Ni
LCBOVUxMLCAwLCBOVUxMKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInVzcnNjdHBfc29ja2V0Iik7
CisJCXJlc3VsdCA9IDE7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChhcmdjID4gMykgeworCQlt
ZW1zZXQoKHZvaWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Cisj
aWZkZWYgSEFWRV9TSU42X0xFTgorCQlhZGRyNi5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKKyNlbmRpZgorCQlhZGRyNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCQlh
ZGRyNi5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGFyZ3ZbM10pKTsKKwkJYWRkcjYuc2luNl9hZGRy
ID0gaW42YWRkcl9hbnk7CisJCWlmICh1c3JzY3RwX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRk
ciAqKSZhZGRyNiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSA8IDApIHsKKwkJCXBlcnJv
cigiYmluZCIpOworCQkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJCXJlc3VsdCA9IDI7CisJCQln
b3RvIG91dDsKKwkJfQorCX0KKworCWlmIChhcmdjID4gNSkgeworCQltZW1zZXQoJmVuY2Fwcywg
MCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpOworCQllbmNhcHMuc3VlX2FkZHJlc3Mu
c3NfZmFtaWx5ID0gQUZfSU5FVDY7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKGF0b2koYXJn
dls1XSkpOworCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9SRU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCAqKSZlbmNhcHMsIChzb2NrbGVu
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgeworCQkJcGVycm9yKCJzZXRz
b2Nrb3B0Iik7CisJCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQkJcmVzdWx0ID0gMzsKKwkJCWdv
dG8gb3V0OworCQl9CisJfQorCisJaWYgKGFyZ2MgPiA2KSB7CisjaWZkZWYgX1dJTjMyCisJCV9z
bnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJl
Zml4LCBhcmd2WzZdLCByZXF1ZXN0X3Bvc3RmaXgpOworI2Vsc2UKKwkJc25wcmludGYocmVxdWVz
dCwgc2l6ZW9mKHJlcXVlc3QpLCAiJXMgJXMgJXMiLCByZXF1ZXN0X3ByZWZpeCwgYXJndls2XSwg
cmVxdWVzdF9wb3N0Zml4KTsKKyNlbmRpZgorCX0gZWxzZSB7CisjaWZkZWYgX1dJTjMyCisJCV9z
bnByaW50ZihyZXF1ZXN0LCBzaXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJl
Zml4LCAiLyIsIHJlcXVlc3RfcG9zdGZpeCk7CisjZWxzZQorCQlzbnByaW50ZihyZXF1ZXN0LCBz
aXplb2YocmVxdWVzdCksICIlcyAlcyAlcyIsIHJlcXVlc3RfcHJlZml4LCAiLyIsIHJlcXVlc3Rf
cG9zdGZpeCk7CisjZW5kaWYKKwl9CisKKwlwcmludGYoIlxuSFRUUCByZXF1ZXN0OlxuJXNcbiIs
IHJlcXVlc3QpOworCXByaW50ZigiXG5IVFRQIHJlc3BvbnNlOlxuIik7CisKKwltZW1zZXQoKHZv
aWQgKikmYWRkcjQsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwltZW1zZXQoKHZv
aWQgKikmYWRkcjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgSEFW
RV9TSU5fTEVOCisJYWRkcjQuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
I2VuZGlmCisjaWZkZWYgSEFWRV9TSU42X0xFTgorCWFkZHI2LnNpbjZfbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJYWRkcjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7
CisJYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlhZGRyNC5zaW5fcG9ydCA9IGh0b25z
KGF0b2koYXJndlsyXSkpOworCWFkZHI2LnNpbjZfcG9ydCA9IGh0b25zKGF0b2koYXJndlsyXSkp
OworCWlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFyZ3ZbMV0sICZhZGRyNi5zaW42X2FkZHIpID09
IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmFk
ZHI2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgeworCQkJcGVycm9yKCJ1c3Jz
Y3RwX2Nvbm5lY3QiKTsKKwkJCXVzcnNjdHBfY2xvc2Uoc29jayk7CisJCQlyZXN1bHQgPSA0Owor
CQkJZ290byBvdXQ7CisJCX0KKwl9IGVsc2UgaWYgKGluZXRfcHRvbihBRl9JTkVULCBhcmd2WzFd
LCAmYWRkcjQuc2luX2FkZHIpID09IDEpIHsKKwkJaWYgKHVzcnNjdHBfY29ubmVjdChzb2NrLCAo
c3RydWN0IHNvY2thZGRyICopJmFkZHI0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgPCAw
KSB7CisJCQlwZXJyb3IoInVzcnNjdHBfY29ubmVjdCIpOworCQkJdXNyc2N0cF9jbG9zZShzb2Nr
KTsKKwkJCXJlc3VsdCA9IDU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCXByaW50
ZigiSWxsZWdhbCBkZXN0aW5hdGlvbiBhZGRyZXNzXG4iKTsKKwkJdXNyc2N0cF9jbG9zZShzb2Nr
KTsKKwkJcmVzdWx0ID0gNjsKKwkJZ290byBvdXQ7CisJfQorCisJbWVtc2V0KCZzbmRpbmZvLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9u
bCg2Myk7IC8qIFBQSUQgZm9yIEhUVFAvU0NUUCAqLworCS8qIHNlbmQgR0VUIHJlcXVlc3QgKi8K
KwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLCByZXF1ZXN0LCBzdHJsZW4ocmVxdWVzdCksIE5VTEws
IDAsICZzbmRpbmZvLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBfU0VORFZfU05E
SU5GTywgMCkgPCAwKSB7CisJCXBlcnJvcigidXNyc2N0cF9zZW5kdiIpOworCQl1c3JzY3RwX2Ns
b3NlKHNvY2spOworCQlyZXN1bHQgPSA2OworCQlnb3RvIG91dDsKKwl9CisKKwl3aGlsZSAoIWRv
bmUpIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAoMSoxMDAwKTsKKyNlbHNlCisJCXNsZWVwKDEp
OworI2VuZGlmCisJfQorb3V0OgorCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNp
ZmRlZiBfV0lOMzIKKwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgor
CX0KKwlyZXR1cm4gKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy9y
dGN3ZWIuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jCmluZGV4IGU2OWRlMjliYjJkMWQ2
NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjVjNTkwOGQ4NTU2NjkwMmEwZGRkNDg3ZjhhYWY5
MzdiYTVjMDI5NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jCisrKyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3Byb2dyYW1zL3J0Y3dlYi5jCkBAIC0wLDAgKzEsMTUyNSBAQAorLyotCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTItMjAxMyBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0IChDKSAy
MDEyLTIwMTMgSXJlbmUgUnVlbmdlbGVyCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1l
cyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5E
CisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1F
RC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAkSWQ6IHJ0Y3dlYi5jLHYgMS4yNiAyMDEy
LTA3LTE3IDEzOjUwOjAyIHR1ZXhlbiBFeHAgJAorICovCisKKy8qCisgKiBnY2MgLVdhbGwgLXN0
ZD1jOTkgLXBlZGFudGljIC1vIHJ0Y3dlYiBydGN3ZWIuYyAtbHVzcnNjdHAKKyAqLworCisjaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgX1dJTjMyCisjZGVmaW5lIF9DUlRfU0VDVVJFX05P
X1dBUk5JTkdTCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgor
I2luY2x1ZGUgPGNydGRiZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5j
bHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxh
cnBhL2luZXQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+Cisj
aW5jbHVkZSA8c3RkaW50Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRl
IDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2lu
Y2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisjZGVmaW5lIExJTkVfTEVO
R1RIICgxMDI0KQorI2RlZmluZSBCVUZGRVJfU0laRSAoMTw8MTYpCisjZGVmaW5lIE5VTUJFUl9P
Rl9DSEFOTkVMUyAoMTAwKQorI2RlZmluZSBOVU1CRVJfT0ZfU1RSRUFNUyAoMTAwKQorCisjZGVm
aW5lIERBVEFfQ0hBTk5FTF9QUElEX0NPTlRST0wgICA1MAorI2RlZmluZSBEQVRBX0NIQU5ORUxf
UFBJRF9ET01TVFJJTkcgNTEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX1BQSURfQklOQVJZICAgIDUy
CisKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0NMT1NFRCAgICAgMAorI2RlZmluZSBEQVRBX0NIQU5O
RUxfQ09OTkVDVElORyAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9PUEVOICAgICAgIDIKKyNkZWZp
bmUgREFUQV9DSEFOTkVMX0NMT1NJTkcgICAgMworCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFH
U19TRU5EX1JFUSAweDAwMDAwMDAxCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JT
UCAweDAwMDAwMDAyCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSyAweDAwMDAw
MDA0CisKK3N0cnVjdCBjaGFubmVsIHsKKwl1aW50MzJfdCBpZDsKKwl1aW50MzJfdCBwcl92YWx1
ZTsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDE2X3QgaV9zdHJlYW07CisJdWludDE2X3Qg
b19zdHJlYW07CisJdWludDhfdCB1bm9yZGVyZWQ7CisJdWludDhfdCBzdGF0ZTsKKwl1aW50MzJf
dCBmbGFnczsKK307CisKK3N0cnVjdCBwZWVyX2Nvbm5lY3Rpb24geworCXN0cnVjdCBjaGFubmVs
IGNoYW5uZWxzW05VTUJFUl9PRl9DSEFOTkVMU107CisJc3RydWN0IGNoYW5uZWwgKmlfc3RyZWFt
X2NoYW5uZWxbTlVNQkVSX09GX1NUUkVBTVNdOworCXN0cnVjdCBjaGFubmVsICpvX3N0cmVhbV9j
aGFubmVsW05VTUJFUl9PRl9TVFJFQU1TXTsKKwl1aW50MTZfdCBvX3N0cmVhbV9idWZmZXJbTlVN
QkVSX09GX1NUUkVBTVNdOworCXVpbnQzMl90IG9fc3RyZWFtX2J1ZmZlcl9jb3VudGVyOworI2lm
ZGVmIF9XSU4zMgorCUNSSVRJQ0FMX1NFQ1RJT04gbXV0ZXg7CisjZWxzZQorCXB0aHJlYWRfbXV0
ZXhfdCBtdXRleDsKKyNlbmRpZgorCXN0cnVjdCBzb2NrZXQgKnNvY2s7Cit9IHBlZXJfY29ubmVj
dGlvbjsKKworI2RlZmluZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVFVRVNUICAwCisjZGVmaW5lIERB
VEFfQ0hBTk5FTF9PUEVOX1JFU1BPTlNFIDEKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0FDSyAgICAg
ICAgICAgMgorCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRSAgICAgICAgICAgICAgICAw
CisjZGVmaW5lIERBVEFfQ0hBTk5FTF9SRUxJQUJMRV9TVFJFQU0gICAgICAgICAxCisjZGVmaW5l
IERBVEFfQ0hBTk5FTF9VTlJFTElBQkxFICAgICAgICAgICAgICAyCisjZGVmaW5lIERBVEFfQ0hB
Tk5FTF9QQVJUSUFMX1JFTElBQkxFX1JFWE1JVCAzCisjZGVmaW5lIERBVEFfQ0hBTk5FTF9QQVJU
SUFMX1JFTElBQkxFX1RJTUVEICA0CisKKyNkZWZpbmUgREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09G
X09SREVSX0FMTE9XRUQgMHgwMDAxCisKKyNpZm5kZWYgX1dJTjMyCisjZGVmaW5lIFNDVFBfUEFD
S0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI3ByYWdtYSBwYWNrIChwdXNoLCAx
KQorI2RlZmluZSBTQ1RQX1BBQ0tFRAorI2VuZGlmCisKK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5u
ZWxfb3Blbl9yZXF1ZXN0IHsKKwl1aW50OF90IG1zZ190eXBlOyAvKiBEQVRBX0NIQU5ORUxfT1BF
Tl9SRVFVRVNUICovCisJdWludDhfdCBjaGFubmVsX3R5cGU7CisJdWludDE2X3QgZmxhZ3M7CisJ
dWludDE2X3QgcmVsaWFiaWxpdHlfcGFyYW1zOworCWludDE2X3QgcHJpb3JpdHk7CisJY2hhciBs
YWJlbFtdOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVu
X3Jlc3BvbnNlIHsKKwl1aW50OF90ICBtc2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX09QRU5fUkVT
UE9OU0UgKi8KKwl1aW50OF90ICBlcnJvcjsKKwl1aW50MTZfdCBmbGFnczsKKwl1aW50MTZfdCBy
ZXZlcnNlX3N0cmVhbTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBydGN3ZWJfZGF0YWNoYW5u
ZWxfYWNrIHsKKwl1aW50OF90ICBtc2dfdHlwZTsgLyogREFUQV9DSEFOTkVMX0FDSyAqLworfSBT
Q1RQX1BBQ0tFRDsKKworI2lmZGVmIF9XSU4zMgorI3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgor
CisjdW5kZWYgU0NUUF9QQUNLRUQKKworc3RhdGljIHZvaWQKK2xvY2tfcGVlcl9jb25uZWN0aW9u
KHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKik7CisKK3N0YXRpYyB2b2lkCit1bmxvY2tfcGVlcl9j
b25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKik7CisKK3N0YXRpYyB2b2lkCitpbml0
X3BlZXJfY29ubmVjdGlvbihzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sKKwl1aW50MzJf
dCBpOworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCisjaWZkZWYgX1dJTjMyCisJSW5pdGlh
bGl6ZUNyaXRpY2FsU2VjdGlvbigmKHBjLT5tdXRleCkpOworI2Vsc2UKKwlwdGhyZWFkX211dGV4
X2luaXQoJnBjLT5tdXRleCwgTlVMTCk7CisjZW5kaWYKKwlsb2NrX3BlZXJfY29ubmVjdGlvbihw
Yyk7CisJZm9yIChpID0gMDsgaSA8IE5VTUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5u
ZWwgPSAmKHBjLT5jaGFubmVsc1tpXSk7CisJCWNoYW5uZWwtPmlkID0gaTsKKwkJY2hhbm5lbC0+
c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOworCQljaGFubmVsLT5wcl9wb2xpY3kgPSBTQ1RQ
X1BSX1NDVFBfTk9ORTsKKwkJY2hhbm5lbC0+cHJfdmFsdWUgPSAwOworCQljaGFubmVsLT5pX3N0
cmVhbSA9IDA7CisJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJY2hhbm5lbC0+dW5vcmRlcmVk
ID0gMDsKKwkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgTlVNQkVS
X09GX1NUUkVBTVM7IGkrKykgeworCQlwYy0+aV9zdHJlYW1fY2hhbm5lbFtpXSA9IE5VTEw7CisJ
CXBjLT5vX3N0cmVhbV9jaGFubmVsW2ldID0gTlVMTDsKKwkJcGMtPm9fc3RyZWFtX2J1ZmZlcltp
XSA9IDA7CisJfQorCXBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlciA9IDA7CisJcGMtPnNvY2sg
PSBOVUxMOworCXVubG9ja19wZWVyX2Nvbm5lY3Rpb24ocGMpOworfQorCitzdGF0aWMgdm9pZAor
bG9ja19wZWVyX2Nvbm5lY3Rpb24oc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisjaWZk
ZWYgX1dJTjMyCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJihwYy0+bXV0ZXgpKTsKKyNlbHNlCisJ
cHRocmVhZF9tdXRleF9sb2NrKCZwYy0+bXV0ZXgpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lk
Cit1bmxvY2tfcGVlcl9jb25uZWN0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQorewor
I2lmZGVmIF9XSU4zMgorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYocGMtPm11dGV4KSk7CisjZWxz
ZQorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZwYy0+bXV0ZXgpOworI2VuZGlmCit9CisKK3N0YXRp
YyBzdHJ1Y3QgY2hhbm5lbCAqCitmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0oc3RydWN0IHBlZXJf
Y29ubmVjdGlvbiAqcGMsIHVpbnQxNl90IGlfc3RyZWFtKQoreworCWlmIChpX3N0cmVhbSA8IE5V
TUJFUl9PRl9TVFJFQU1TKSB7CisJCXJldHVybiAocGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJl
YW1dKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKE5VTEwpOworCX0KK30KKworc3RhdGljIHN0cnVj
dCBjaGFubmVsICoKK2ZpbmRfY2hhbm5lbF9ieV9vX3N0cmVhbShzdHJ1Y3QgcGVlcl9jb25uZWN0
aW9uICpwYywgdWludDE2X3Qgb19zdHJlYW0pCit7CisJaWYgKG9fc3RyZWFtIDwgTlVNQkVSX09G
X1NUUkVBTVMpIHsKKwkJcmV0dXJuIChwYy0+b19zdHJlYW1fY2hhbm5lbFtvX3N0cmVhbV0pOwor
CX0gZWxzZSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IGNoYW5u
ZWwgKgorZmluZF9mcmVlX2NoYW5uZWwoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJ
dWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykg
eworCQlpZiAocGMtPmNoYW5uZWxzW2ldLnN0YXRlID09IERBVEFfQ0hBTk5FTF9DTE9TRUQpIHsK
KwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpID09IE5VTUJFUl9PRl9DSEFOTkVMUykgeworCQly
ZXR1cm4gKE5VTEwpOworCX0gZWxzZSB7CisJCXJldHVybiAoJihwYy0+Y2hhbm5lbHNbaV0pKTsK
Kwl9Cit9CisKK3N0YXRpYyB1aW50MTZfdAorZmluZF9mcmVlX29fc3RyZWFtKHN0cnVjdCBwZWVy
X2Nvbm5lY3Rpb24gKnBjKQoreworCXN0cnVjdCBzY3RwX3N0YXR1cyBzdGF0dXM7CisJdWludDMy
X3QgaSwgbGltaXQ7CisJc29ja2xlbl90IGxlbjsKKworCWxlbiA9IChzb2NrbGVuX3Qpc2l6ZW9m
KHN0cnVjdCBzY3RwX3N0YXR1cyk7CisJaWYgKHVzcnNjdHBfZ2V0c29ja29wdChwYy0+c29jaywg
SVBQUk9UT19TQ1RQLCBTQ1RQX1NUQVRVUywgJnN0YXR1cywgJmxlbikgPCAwKSB7CisJCXBlcnJv
cigiZ2V0c29ja29wdCIpOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc3RhdHVzLnNzdGF0X291
dHN0cm1zIDwgTlVNQkVSX09GX1NUUkVBTVMpIHsKKwkJbGltaXQgPSBzdGF0dXMuc3N0YXRfb3V0
c3RybXM7CisJfSBlbHNlIHsKKwkJbGltaXQgPSBOVU1CRVJfT0ZfU1RSRUFNUzsKKwl9CisJLyog
c3RyZWFtIGlkIDAgaXMgcmVzZXJ2ZWQgKi8KKwlmb3IgKGkgPSAxOyBpIDwgbGltaXQ7IGkrKykg
eworCQlpZiAocGMtPm9fc3RyZWFtX2NoYW5uZWxbaV0gPT0gTlVMTCkgeworCQkJYnJlYWs7CisJ
CX0KKwl9CisJaWYgKGkgPT0gbGltaXQpIHsKKwkJcmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQly
ZXR1cm4gKCh1aW50MTZfdClpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCityZXF1ZXN0X21vcmVf
b19zdHJlYW1zKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjKQoreworCXN0cnVjdCBzY3RwX3N0
YXR1cyBzdGF0dXM7CisJc3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgc2FzOworCXVpbnQzMl90IGks
IG9fc3RyZWFtc19uZWVkZWQ7CisJc29ja2xlbl90IGxlbjsKKworCW9fc3RyZWFtc19uZWVkZWQg
PSAwOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAo
KHBjLT5jaGFubmVsc1tpXS5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORykgJiYKKwkJ
ICAgIChwYy0+Y2hhbm5lbHNbaV0ub19zdHJlYW0gPT0gMCkpIHsKKwkJCW9fc3RyZWFtc19uZWVk
ZWQrKzsKKwkJfQorCX0KKwlsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0
dXMpOworCWlmICh1c3JzY3RwX2dldHNvY2tvcHQocGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NU
UF9TVEFUVVMsICZzdGF0dXMsICZsZW4pIDwgMCkgeworCQlwZXJyb3IoImdldHNvY2tvcHQiKTsK
KwkJcmV0dXJuOworCX0KKwlpZiAoc3RhdHVzLnNzdGF0X291dHN0cm1zICsgb19zdHJlYW1zX25l
ZWRlZCA+IE5VTUJFUl9PRl9TVFJFQU1TKSB7CisJCW9fc3RyZWFtc19uZWVkZWQgPSBOVU1CRVJf
T0ZfU1RSRUFNUyAtIHN0YXR1cy5zc3RhdF9vdXRzdHJtczsKKwl9CisJaWYgKG9fc3RyZWFtc19u
ZWVkZWQgPT0gMCkgeworCQlyZXR1cm47CisJfQorCW1lbXNldCgmc2FzLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfYWRkX3N0cmVhbXMpKTsKKwlzYXMuc2FzX2luc3RybXMgPSAwOworCXNhcy5zYXNf
b3V0c3RybXMgPSAodWludDE2X3Qpb19zdHJlYW1zX25lZWRlZDsgLyogWFhYIGVyb3IgaGFuZGxp
bmcgKi8KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBjLT5zb2NrLCBJUFBST1RPX1NDVFAsIFND
VFBfQUREX1NUUkVBTVMsICZzYXMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2FkZF9z
dHJlYW1zKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCX0KKwlyZXR1cm47Cit9
CisKK3N0YXRpYyBpbnQKK3NlbmRfb3Blbl9yZXF1ZXN0X21lc3NhZ2Uoc3RydWN0IHNvY2tldCAq
c29jaywgdWludDE2X3Qgb19zdHJlYW0sIHVpbnQ4X3QgdW5vcmRlcmVkLCB1aW50MTZfdCBwcl9w
b2xpY3ksIHVpbnQzMl90IHByX3ZhbHVlKQoreworCS8qIFhYWDogVGhpcyBzaG91bGQgYmUgZW5j
b2RlZCBpbiBhIGJldHRlciB3YXkgKi8KKwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5f
cmVxdWVzdCByZXE7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCisJbWVtc2V0KCZy
ZXEsIDAsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVzdCkpOwor
CXJlcS5tc2dfdHlwZSA9IERBVEFfQ0hBTk5FTF9PUEVOX1JFUVVFU1Q7CisJc3dpdGNoIChwcl9w
b2xpY3kpIHsKKwljYXNlIFNDVFBfUFJfU0NUUF9OT05FOgorCQkvKiBYWFg6IFdoYXQgYWJvdXQg
REFUQV9DSEFOTkVMX1JFTElBQkxFX1NUUkVBTSAqLworCQlyZXEuY2hhbm5lbF90eXBlID0gREFU
QV9DSEFOTkVMX1JFTElBQkxFOworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU0NUUF9UVEw6CisJ
CS8qIFhYWDogV2hhdCBhYm91dCBEQVRBX0NIQU5ORUxfVU5SRUxJQUJMRSAqLworCQlyZXEuY2hh
bm5lbF90eXBlID0gREFUQV9DSEFOTkVMX1BBUlRJQUxfUkVMSUFCTEVfVElNRUQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9QUl9TQ1RQX1JUWDoKKwkJcmVxLmNoYW5uZWxfdHlwZSA9IERBVEFfQ0hB
Tk5FTF9QQVJUSUFMX1JFTElBQkxFX1JFWE1JVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0
dXJuICgwKTsKKwl9CisJcmVxLmZsYWdzID0gaHRvbnMoMCk7CisJaWYgKHVub3JkZXJlZCkgewor
CQlyZXEuZmxhZ3MgfD0gaHRvbnMoREFUQV9DSEFOTkVMX0ZMQUdfT1VUX09GX09SREVSX0FMTE9X
RUQpOworCX0KKwlyZXEucmVsaWFiaWxpdHlfcGFyYW1zID0gaHRvbnMoKHVpbnQxNl90KXByX3Zh
bHVlKTsgLyogWFhYIFdoeSAxNi1iaXQgKi8KKwlyZXEucHJpb3JpdHkgPSBodG9ucygwKTsgLyog
WFhYOiBhZGQgc3VwcG9ydCAqLworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3NuZGluZm8pKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSBvX3N0cmVhbTsKKwlzbmRpbmZvLnNu
ZF9mbGFncyA9IFNDVFBfRU9SOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NIQU5O
RUxfUFBJRF9DT05UUk9MKTsKKwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLAorCSAgICAgICAgICAg
ICAgICAgICZyZXEsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVxdWVz
dCksCisJICAgICAgICAgICAgICAgICAgTlVMTCwgMCwKKwkgICAgICAgICAgICAgICAgICAmc25k
aW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksCisJICAgICAgICAg
ICAgICAgICAgU0NUUF9TRU5EVl9TTkRJTkZPLCAwKSA8IDApIHsKKwkJcGVycm9yKCJzY3RwX3Nl
bmR2Iik7CisJCXJldHVybiAoMCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgxKTsKKwl9Cit9CisK
K3N0YXRpYyBpbnQKK3NlbmRfb3Blbl9yZXNwb25zZV9tZXNzYWdlKHN0cnVjdCBzb2NrZXQgKnNv
Y2ssIHVpbnQxNl90IG9fc3RyZWFtLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwkvKiBYWFg6IFRo
aXMgc2hvdWxkIGJlIGVuY29kZWQgaW4gYSBiZXR0ZXIgd2F5ICovCisJc3RydWN0IHJ0Y3dlYl9k
YXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlIHJzcDsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGlu
Zm87CisKKwltZW1zZXQoJnJzcCwgMCwgc2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxf
b3Blbl9yZXNwb25zZSkpOworCXJzcC5tc2dfdHlwZSA9IERBVEFfQ0hBTk5FTF9PUEVOX1JFU1BP
TlNFOworCXJzcC5lcnJvciA9IDA7CisJcnNwLmZsYWdzID0gaHRvbnMoMCk7CisJcnNwLnJldmVy
c2Vfc3RyZWFtID0gaHRvbnMoaV9zdHJlYW0pOworCW1lbXNldCgmc25kaW5mbywgMCwgc2l6ZW9m
KHN0cnVjdCBzY3RwX3NuZGluZm8pKTsKKwlzbmRpbmZvLnNuZF9zaWQgPSBvX3N0cmVhbTsKKwlz
bmRpbmZvLnNuZF9mbGFncyA9IFNDVFBfRU9SOworCXNuZGluZm8uc25kX3BwaWQgPSBodG9ubChE
QVRBX0NIQU5ORUxfUFBJRF9DT05UUk9MKTsKKwlpZiAodXNyc2N0cF9zZW5kdihzb2NrLAorCSAg
ICAgICAgICAgICAgICAgICZyc3AsIHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29w
ZW5fcmVzcG9uc2UpLAorCSAgICAgICAgICAgICAgICAgIE5VTEwsIDAsCisJICAgICAgICAgICAg
ICAgICAgJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLAor
CSAgICAgICAgICAgICAgICAgIFNDVFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCXBlcnJv
cigic2N0cF9zZW5kdiIpOworCQlyZXR1cm4gKDApOworCX0gZWxzZSB7CisJCXJldHVybiAoMSk7
CisJfQorfQorCitzdGF0aWMgaW50CitzZW5kX29wZW5fYWNrX21lc3NhZ2Uoc3RydWN0IHNvY2tl
dCAqc29jaywgdWludDE2X3Qgb19zdHJlYW0pCit7CisJLyogWFhYOiBUaGlzIHNob3VsZCBiZSBl
bmNvZGVkIGluIGEgYmV0dGVyIHdheSAqLworCXN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNr
IGFjazsKKwlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNuZGluZm87CisKKwltZW1zZXQoJmFjaywgMCwg
c2l6ZW9mKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSk7CisJYWNrLm1zZ190eXBlID0g
REFUQV9DSEFOTkVMX0FDSzsKKwltZW1zZXQoJnNuZGluZm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0
cF9zbmRpbmZvKSk7CisJc25kaW5mby5zbmRfc2lkID0gb19zdHJlYW07CisJc25kaW5mby5zbmRf
ZmxhZ3MgPSBTQ1RQX0VPUjsKKwlzbmRpbmZvLnNuZF9wcGlkID0gaHRvbmwoREFUQV9DSEFOTkVM
X1BQSURfQ09OVFJPTCk7CisJaWYgKHVzcnNjdHBfc2VuZHYoc29jaywKKwkgICAgICAgICAgICAg
ICAgICAmYWNrLCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9hY2spLAorCSAgICAg
ICAgICAgICAgICAgIE5VTEwsIDAsCisJICAgICAgICAgICAgICAgICAgJnNuZGluZm8sIChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pLAorCSAgICAgICAgICAgICAgICAgIFND
VFBfU0VORFZfU05ESU5GTywgMCkgPCAwKSB7CisJCXBlcnJvcigic2N0cF9zZW5kdiIpOworCQly
ZXR1cm4gKDApOworCX0gZWxzZSB7CisJCXJldHVybiAoMSk7CisJfQorfQorCitzdGF0aWMgdm9p
ZAorc2VuZF9kZWZlcnJlZF9tZXNzYWdlcyhzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYykKK3sK
Kwl1aW50MzJfdCBpOworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCisJZm9yIChpID0gMDsg
aSA8IE5VTUJFUl9PRl9DSEFOTkVMUzsgaSsrKSB7CisJCWNoYW5uZWwgPSAmKHBjLT5jaGFubmVs
c1tpXSk7CisJCWlmIChjaGFubmVsLT5mbGFncyAmIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JF
USkgeworCQkJaWYgKHNlbmRfb3Blbl9yZXF1ZXN0X21lc3NhZ2UocGMtPnNvY2ssIGNoYW5uZWwt
Pm9fc3RyZWFtLCBjaGFubmVsLT51bm9yZGVyZWQsIGNoYW5uZWwtPnByX3BvbGljeSwgY2hhbm5l
bC0+cHJfdmFsdWUpKSB7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgJj0gfkRBVEFfQ0hBTk5FTF9GTEFH
U19TRU5EX1JFUTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGVycm5vICE9IEVBR0FJTikgeworCQkJ
CQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nICovCisJCQkJfQorCQkJfQorCQl9CisJCWlmIChjaGFu
bmVsLT5mbGFncyAmIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUCkgeworCQkJaWYgKHNlbmRf
b3Blbl9yZXNwb25zZV9tZXNzYWdlKHBjLT5zb2NrLCBjaGFubmVsLT5vX3N0cmVhbSwgY2hhbm5l
bC0+aV9zdHJlYW0pKSB7CisJCQkJY2hhbm5lbC0+ZmxhZ3MgJj0gfkRBVEFfQ0hBTk5FTF9GTEFH
U19TRU5EX1JTUDsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGVycm5vICE9IEVBR0FJTikgeworCQkJ
CQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nICovCisJCQkJfQorCQkJfQorCQl9CisJCWlmIChjaGFu
bmVsLT5mbGFncyAmIERBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSykgeworCQkJaWYgKHNlbmRf
b3Blbl9hY2tfbWVzc2FnZShwYy0+c29jaywgY2hhbm5lbC0+b19zdHJlYW0pKSB7CisJCQkJY2hh
bm5lbC0+ZmxhZ3MgJj0gfkRBVEFfQ0hBTk5FTF9GTEFHU19TRU5EX0FDSzsKKwkJCX0gZWxzZSB7
CisJCQkJaWYgKGVycm5vICE9IEVBR0FJTikgeworCQkJCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5n
ICovCisJCQkJfQorCQkJfQorCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCBj
aGFubmVsICoKK29wZW5fY2hhbm5lbChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdWludDhf
dCB1bm9yZGVyZWQsIHVpbnQxNl90IHByX3BvbGljeSwgdWludDMyX3QgcHJfdmFsdWUpCit7CisJ
c3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisJdWludDE2X3Qgb19zdHJlYW07CisKKwlpZiAoKHBy
X3BvbGljeSAhPSBTQ1RQX1BSX1NDVFBfTk9ORSkgJiYKKwkgICAgKHByX3BvbGljeSAhPSBTQ1RQ
X1BSX1NDVFBfVFRMKSAmJgorCSAgICAocHJfcG9saWN5ICE9IFNDVFBfUFJfU0NUUF9SVFgpKSB7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgodW5vcmRlcmVkICE9IDApICYmICh1bm9yZGVy
ZWQgIT0gMSkpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChwcl9wb2xpY3kgPT0gU0NU
UF9QUl9TQ1RQX05PTkUpICYmIChwcl92YWx1ZSAhPSAwKSkgeworCQlyZXR1cm4gKE5VTEwpOwor
CX0KKwlpZiAoKGNoYW5uZWwgPSBmaW5kX2ZyZWVfY2hhbm5lbChwYykpID09IE5VTEwpIHsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19zdHJlYW0ocGMpOwor
CWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkc7CisJY2hhbm5lbC0+dW5v
cmRlcmVkID0gdW5vcmRlcmVkOworCWNoYW5uZWwtPnByX3BvbGljeSA9IHByX3BvbGljeTsKKwlj
aGFubmVsLT5wcl92YWx1ZSA9IHByX3ZhbHVlOworCWNoYW5uZWwtPm9fc3RyZWFtID0gb19zdHJl
YW07CisJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCWlmIChvX3N0cmVhbSA9PSAwKSB7CisJCXJlcXVl
c3RfbW9yZV9vX3N0cmVhbXMocGMpOworCX0gZWxzZSB7CisJCWlmIChzZW5kX29wZW5fcmVxdWVz
dF9tZXNzYWdlKHBjLT5zb2NrLCBvX3N0cmVhbSwgdW5vcmRlcmVkLCBwcl9wb2xpY3ksIHByX3Zh
bHVlKSkgeworCQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJ
fSBlbHNlIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQlwYy0+b19zdHJlYW1fY2hh
bm5lbFtvX3N0cmVhbV0gPSBjaGFubmVsOworCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hB
Tk5FTF9GTEFHU19TRU5EX1JFUTsKKwkJCX0gZWxzZSB7CisJCQkJY2hhbm5lbC0+c3RhdGUgPSBE
QVRBX0NIQU5ORUxfQ0xPU0VEOworCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJY2hh
bm5lbC0+cHJfcG9saWN5ID0gMDsKKwkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJY2hh
bm5lbC0+b19zdHJlYW0gPSAwOworCQkJCWNoYW5uZWwtPmZsYWdzID0gMDsKKwkJCQljaGFubmVs
ID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKGNoYW5uZWwpOworfQorCitzdGF0aWMg
aW50CitzZW5kX3VzZXJfbWVzc2FnZShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0
IGNoYW5uZWwgKmNoYW5uZWwsIGNoYXIgKm1lc3NhZ2UsIHNpemVfdCBsZW5ndGgpCit7CisJc3Ry
dWN0IHNjdHBfc2VuZHZfc3BhIHNwYTsKKworCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJcmV0
dXJuICgwKTsKKwl9CisJaWYgKChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfT1BFTikg
JiYKKwkgICAgKGNoYW5uZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSkgewor
CQkvKiBYWFg6IFdoYXQgdG8gZG8gaW4gb3RoZXIgc3RhdGVzICovCisJCXJldHVybiAoMCk7CisJ
fQorCisJbWVtc2V0KCZzcGEsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpKTsKKwlz
cGEuc2VuZHZfc25kaW5mby5zbmRfc2lkID0gY2hhbm5lbC0+b19zdHJlYW07CisJaWYgKChjaGFu
bmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfT1BFTikgJiYKKwkgICAgKGNoYW5uZWwtPnVub3Jk
ZXJlZCkpIHsKKwkJc3BhLnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzID0gU0NUUF9FT1IgfCBTQ1RQ
X1VOT1JERVJFRDsKKwl9IGVsc2UgeworCQlzcGEuc2VuZHZfc25kaW5mby5zbmRfZmxhZ3MgPSBT
Q1RQX0VPUjsKKwl9CisJc3BhLnNlbmR2X3NuZGluZm8uc25kX3BwaWQgPSBodG9ubChEQVRBX0NI
QU5ORUxfUFBJRF9ET01TVFJJTkcpOworCXNwYS5zZW5kdl9mbGFncyA9IFNDVFBfU0VORF9TTkRJ
TkZPX1ZBTElEOworCWlmICgoY2hhbm5lbC0+cHJfcG9saWN5ID09IFNDVFBfUFJfU0NUUF9UVEwp
IHx8CisJICAgIChjaGFubmVsLT5wcl9wb2xpY3kgPT0gU0NUUF9QUl9TQ1RQX1JUWCkpIHsKKwkJ
c3BhLnNlbmR2X3ByaW5mby5wcl9wb2xpY3kgPSBjaGFubmVsLT5wcl9wb2xpY3k7CisJCXNwYS5z
ZW5kdl9wcmluZm8ucHJfdmFsdWUgPSBjaGFubmVsLT5wcl92YWx1ZTsKKwkJc3BhLnNlbmR2X2Zs
YWdzIHw9IFNDVFBfU0VORF9QUklORk9fVkFMSUQ7CisJfQorCWlmICh1c3JzY3RwX3NlbmR2KHBj
LT5zb2NrLAorCSAgICAgICAgICAgICAgICAgIG1lc3NhZ2UsIGxlbmd0aCwKKwkgICAgICAgICAg
ICAgICAgICBOVUxMLCAwLAorCSAgICAgICAgICAgICAgICAgICZzcGEsIChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSksCisJICAgICAgICAgICAgICAgICAgU0NUUF9TRU5E
Vl9TUEEsIDApIDwgMCkgeworCQlwZXJyb3IoInNjdHBfc2VuZHYiKTsKKwkJcmV0dXJuICgwKTsK
Kwl9IGVsc2UgeworCQlyZXR1cm4gKDEpOworCX0KK30KKworc3RhdGljIHZvaWQKK3Jlc2V0X291
dGdvaW5nX3N0cmVhbShzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgdWludDE2X3Qgb19zdHJl
YW0pCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBwYy0+b19zdHJlYW1fYnVm
ZmVyX2NvdW50ZXI7IGkrKykgeworCQlpZiAocGMtPm9fc3RyZWFtX2J1ZmZlcltpXSA9PSBvX3N0
cmVhbSkgeworCQkJcmV0dXJuOworCQl9CisJfQorCXBjLT5vX3N0cmVhbV9idWZmZXJbcGMtPm9f
c3RyZWFtX2J1ZmZlcl9jb3VudGVyKytdID0gb19zdHJlYW07CisJcmV0dXJuOworfQorCitzdGF0
aWMgdm9pZAorc2VuZF9vdXRnb2luZ19zdHJlYW1fcmVzZXQoc3RydWN0IHBlZXJfY29ubmVjdGlv
biAqcGMpCit7CisJc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqc3JzOworCXVpbnQzMl90IGk7
CisJc2l6ZV90IGxlbjsKKworCWlmIChwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXIgPT0gMCkg
eworCQlyZXR1cm47CisJfQorCWxlbiA9IHNpemVvZihzY3RwX2Fzc29jX3QpICsgKDIgKyBwYy0+
b19zdHJlYW1fYnVmZmVyX2NvdW50ZXIpICogc2l6ZW9mKHVpbnQxNl90KTsKKwlzcnMgPSAoc3Ry
dWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqKW1hbGxvYyhsZW4pOworCWlmIChzcnMgPT0gTlVMTCkg
eworCQlyZXR1cm47CisJfQorCW1lbXNldChzcnMsIDAsIGxlbik7CisJc3JzLT5zcnNfZmxhZ3Mg
PSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lORzsKKwlzcnMtPnNyc19udW1iZXJfc3RyZWFtcyA9
IHBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlcjsKKwlmb3IgKGkgPSAwOyBpIDwgcGMtPm9fc3Ry
ZWFtX2J1ZmZlcl9jb3VudGVyOyBpKyspIHsKKwkJc3JzLT5zcnNfc3RyZWFtX2xpc3RbaV0gPSBw
Yy0+b19zdHJlYW1fYnVmZmVyW2ldOworCX0KKwlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBjLT5z
b2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVTRVRfU1RSRUFNUywgc3JzLCAoc29ja2xlbl90KWxl
bikgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCX0gZWxzZSB7CisJCWZvciAoaSA9
IDA7IGkgPCBwYy0+b19zdHJlYW1fYnVmZmVyX2NvdW50ZXI7IGkrKykgeworCQkJc3JzLT5zcnNf
c3RyZWFtX2xpc3RbaV0gPSAwOworCQl9CisJCXBjLT5vX3N0cmVhbV9idWZmZXJfY291bnRlciA9
IDA7CisJfQorCWZyZWUoc3JzKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitjbG9zZV9j
aGFubmVsKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCBzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5l
bCkKK3sKKwlpZiAoY2hhbm5lbCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJaWYgKGNoYW5u
ZWwtPnN0YXRlICE9IERBVEFfQ0hBTk5FTF9PUEVOKSB7CisJCXJldHVybjsKKwl9CisJcmVzZXRf
b3V0Z29pbmdfc3RyZWFtKHBjLCBjaGFubmVsLT5vX3N0cmVhbSk7CisJc2VuZF9vdXRnb2luZ19z
dHJlYW1fcmVzZXQocGMpOworCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NMT1NJTkc7
CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX29wZW5fcmVxdWVzdF9tZXNzYWdl
KHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXF1ZXN0ICpyZXEsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKwl1
aW50MzJfdCBwcl92YWx1ZTsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDE2X3Qgb19zdHJl
YW07CisJdWludDhfdCB1bm9yZGVyZWQ7CisKKwlpZiAoKGNoYW5uZWwgPSBmaW5kX2NoYW5uZWxf
YnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKSkpIHsKKwkJcHJpbnRmKCJoYW5kbGVfb3Blbl9yZXF1
ZXN0X21lc3NhZ2U6IGNoYW5uZWwgJWQgaXMgaW4gc3RhdGUgJWQgaW5zdGVhZCBvZiBDTE9TRUQu
XG4iLAorCQkgICAgICAgY2hhbm5lbC0+aWQsIGNoYW5uZWwtPnN0YXRlKTsKKwkJLyogWFhYOiBz
b21lIGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybjsKKwl9CisJaWYgKChjaGFubmVsID0gZmlu
ZF9mcmVlX2NoYW5uZWwocGMpKSA9PSBOVUxMKSB7CisJCS8qIFhYWDogc29tZSBlcnJvciBoYW5k
bGluZyAqLworCQlyZXR1cm47CisJfQorCXN3aXRjaCAocmVxLT5jaGFubmVsX3R5cGUpIHsKKwlj
YXNlIERBVEFfQ0hBTk5FTF9SRUxJQUJMRToKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX05P
TkU7CisJCWJyZWFrOworCS8qIFhYWCBEb2Vzbid0IG1ha2Ugc2Vuc2UgKi8KKwljYXNlIERBVEFf
Q0hBTk5FTF9SRUxJQUJMRV9TVFJFQU06CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05F
OworCQlicmVhazsKKwkvKiBYWFggRG9lc24ndCBtYWtlIHNlbnNlICovCisJY2FzZSBEQVRBX0NI
QU5ORUxfVU5SRUxJQUJMRToKKwkJcHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQX1RUTDsKKwkJYnJl
YWs7CisJY2FzZSBEQVRBX0NIQU5ORUxfUEFSVElBTF9SRUxJQUJMRV9SRVhNSVQ6CisJCXByX3Bv
bGljeSA9IFNDVFBfUFJfU0NUUF9SVFg7CisJCWJyZWFrOworCWNhc2UgREFUQV9DSEFOTkVMX1BB
UlRJQUxfUkVMSUFCTEVfVElNRUQ6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9UVEw7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCXByX3BvbGljeSA9IFNDVFBfUFJfU0NUUF9OT05FOworCQkv
KiBYWFggZXJyb3IgaGFuZGxpbmcgKi8KKwkJYnJlYWs7CisJfQorCXByX3ZhbHVlID0gbnRvaHMo
cmVxLT5yZWxpYWJpbGl0eV9wYXJhbXMpOworCWlmIChudG9ocyhyZXEtPmZsYWdzKSAmIERBVEFf
Q0hBTk5FTF9GTEFHX09VVF9PRl9PUkRFUl9BTExPV0VEKSB7CisJCXVub3JkZXJlZCA9IDE7CisJ
fSBlbHNlIHsKKwkJdW5vcmRlcmVkID0gMDsKKwl9CisJb19zdHJlYW0gPSBmaW5kX2ZyZWVfb19z
dHJlYW0ocGMpOworCWNoYW5uZWwtPnN0YXRlID0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkc7CisJ
Y2hhbm5lbC0+dW5vcmRlcmVkID0gdW5vcmRlcmVkOworCWNoYW5uZWwtPnByX3BvbGljeSA9IHBy
X3BvbGljeTsKKwljaGFubmVsLT5wcl92YWx1ZSA9IHByX3ZhbHVlOworCWNoYW5uZWwtPmlfc3Ry
ZWFtID0gaV9zdHJlYW07CisJY2hhbm5lbC0+b19zdHJlYW0gPSBvX3N0cmVhbTsKKwljaGFubmVs
LT5mbGFncyA9IDA7CisJcGMtPmlfc3RyZWFtX2NoYW5uZWxbaV9zdHJlYW1dID0gY2hhbm5lbDsK
KwlpZiAob19zdHJlYW0gPT0gMCkgeworCQlyZXF1ZXN0X21vcmVfb19zdHJlYW1zKHBjKTsKKwl9
IGVsc2UgeworCQlpZiAoc2VuZF9vcGVuX3Jlc3BvbnNlX21lc3NhZ2UocGMtPnNvY2ssIG9fc3Ry
ZWFtLCBpX3N0cmVhbSkpIHsKKwkJCXBjLT5vX3N0cmVhbV9jaGFubmVsW29fc3RyZWFtXSA9IGNo
YW5uZWw7CisJCX0gZWxzZSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJCQkJY2hhbm5l
bC0+ZmxhZ3MgfD0gREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfUlNQOworCQkJCXBjLT5vX3N0cmVh
bV9jaGFubmVsW29fc3RyZWFtXSA9IGNoYW5uZWw7CisJCQl9IGVsc2UgeworCQkJCS8qIFhYWDog
U2lnbmFsIGVycm9yIHRvIHRoZSBvdGhlciBlbmQuICovCisJCQkJcGMtPmlfc3RyZWFtX2NoYW5u
ZWxbaV9zdHJlYW1dID0gTlVMTDsKKwkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9D
TE9TRUQ7CisJCQkJY2hhbm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQljaGFubmVsLT5wcl9wb2xp
Y3kgPSAwOworCQkJCWNoYW5uZWwtPnByX3ZhbHVlID0gMDsKKwkJCQljaGFubmVsLT5pX3N0cmVh
bSA9IDA7CisJCQkJY2hhbm5lbC0+b19zdHJlYW0gPSAwOworCQkJCWNoYW5uZWwtPmZsYWdzID0g
MDsKKwkJCX0KKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9vcGVuX3Jlc3BvbnNl
X21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSAqcnNwLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoLCB1aW50MTZfdCBpX3N0
cmVhbSkKK3sKKwl1aW50MTZfdCBvX3N0cmVhbTsKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsK
KworCW9fc3RyZWFtID0gbnRvaHMocnNwLT5yZXZlcnNlX3N0cmVhbSk7CisJY2hhbm5lbCA9IGZp
bmRfY2hhbm5lbF9ieV9vX3N0cmVhbShwYywgb19zdHJlYW0pOworCWlmIChjaGFubmVsID09IE5V
TEwpIHsKKwkJLyogWFhYOiBpbXByb3ZlIGVycm9yIGhhbmRsaW5nICovCisJCXByaW50ZigiaGFu
ZGxlX29wZW5fcmVzcG9uc2VfbWVzc2FnZTogQ2FuJ3QgZmluZCBjaGFubmVsIGZvciBvdXRnb2lu
ZyBzdGVhbSAlZC5cbiIsIG9fc3RyZWFtKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY2hhbm5lbC0+
c3RhdGUgIT0gREFUQV9DSEFOTkVMX0NPTk5FQ1RJTkcpIHsKKwkJLyogWFhYOiBpbXByb3ZlIGVy
cm9yIGhhbmRsaW5nICovCisJCXByaW50ZigiaGFuZGxlX29wZW5fcmVzcG9uc2VfbWVzc2FnZTog
Q2hhbm5lbCB3aXRoIGlkICVkIGZvciBvdXRnb2luZyBzdGVhbSAlZCBpcyBpbiBzdGF0ZSAlZC5c
biIsIGNoYW5uZWwtPmlkLCBvX3N0cmVhbSwgY2hhbm5lbC0+c3RhdGUpOworCQlyZXR1cm47CisJ
fQorCWlmIChmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKSkgeworCQkvKiBY
WFg6IGltcHJvdmUgZXJyb3IgaGFuZGxpbmcgKi8KKwkJcHJpbnRmKCJoYW5kbGVfb3Blbl9yZXNw
b25zZV9tZXNzYWdlOiBDaGFubmVsIGNvbGxpc2lvbiBmb3IgY2hhbm5lbCB3aXRoIGlkICVkIGFu
ZCBzdHJlYW1zIChpbi9vdXQpID0gKCVkLyVkKS5cbiIsIGNoYW5uZWwtPmlkLCBpX3N0cmVhbSwg
b19zdHJlYW0pOworCQlyZXR1cm47CisJfQorCWNoYW5uZWwtPmlfc3RyZWFtID0gaV9zdHJlYW07
CisJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfT1BFTjsKKwlwYy0+aV9zdHJlYW1fY2hh
bm5lbFtpX3N0cmVhbV0gPSBjaGFubmVsOworCWlmIChzZW5kX29wZW5fYWNrX21lc3NhZ2UocGMt
PnNvY2ssIG9fc3RyZWFtKSkgeworCQljaGFubmVsLT5mbGFncyA9IDA7CisJfSBlbHNlIHsKKwkJ
Y2hhbm5lbC0+ZmxhZ3MgfD0gREFUQV9DSEFOTkVMX0ZMQUdTX1NFTkRfQUNLOworCX0KKwlyZXR1
cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfb3Blbl9hY2tfbWVzc2FnZShzdHJ1Y3QgcGVl
cl9jb25uZWN0aW9uICpwYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGN3ZWJf
ZGF0YWNoYW5uZWxfYWNrICphY2ssCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVu
Z3RoLCB1aW50MTZfdCBpX3N0cmVhbSkKK3sKKwlzdHJ1Y3QgY2hhbm5lbCAqY2hhbm5lbDsKKwor
CWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfaV9zdHJlYW0ocGMsIGlfc3RyZWFtKTsKKwlpZiAo
Y2hhbm5lbCA9PSBOVUxMKSB7CisJCS8qIFhYWDogc29tZSBlcnJvciBoYW5kbGluZyAqLworCQly
ZXR1cm47CisJfQorCWlmIChjaGFubmVsLT5zdGF0ZSA9PSBEQVRBX0NIQU5ORUxfT1BFTikgewor
CQlyZXR1cm47CisJfQorCWlmIChjaGFubmVsLT5zdGF0ZSAhPSBEQVRBX0NIQU5ORUxfQ09OTkVD
VElORykgeworCQkvKiBYWFg6IGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybjsKKwl9CisJY2hh
bm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfT1BFTjsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2
b2lkCitoYW5kbGVfdW5rbm93bl9tZXNzYWdlKGNoYXIgKm1zZywgc2l6ZV90IGxlbmd0aCwgdWlu
dDE2X3QgaV9zdHJlYW0pCit7CisJLyogWFhYOiBTZW5kIGFuIGVycm9yIG1lc3NhZ2UgKi8KKwly
ZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfZGF0YV9tZXNzYWdlKHN0cnVjdCBwZWVy
X2Nvbm5lY3Rpb24gKnBjLAorICAgICAgICAgICAgICAgICAgICBjaGFyICpidWZmZXIsIHNpemVf
dCBsZW5ndGgsIHVpbnQxNl90IGlfc3RyZWFtKQoreworCXN0cnVjdCBjaGFubmVsICpjaGFubmVs
OworCisJY2hhbm5lbCA9IGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgaV9zdHJlYW0pOwor
CWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJLyogWFhYOiBTb21lIGVycm9yIGhhbmRsaW5nICov
CisJCXJldHVybjsKKwl9CisJaWYgKGNoYW5uZWwtPnN0YXRlID09IERBVEFfQ0hBTk5FTF9DT05O
RUNUSU5HKSB7CisJCS8qIEltcGxpY2l0IEFDSyAqLworCQljaGFubmVsLT5zdGF0ZSA9IERBVEFf
Q0hBTk5FTF9PUEVOOworCX0KKwlpZiAoY2hhbm5lbC0+c3RhdGUgIT0gREFUQV9DSEFOTkVMX09Q
RU4pIHsKKwkJLyogWFhYOiBXaGF0IGFib3V0IG90aGVyIHN0YXRlcz8gKi8KKwkJLyogWFhYOiBT
b21lIGVycm9yIGhhbmRsaW5nICovCisJCXJldHVybjsKKwl9IGVsc2UgeworCQkvKiBBc3N1bWlu
ZyBEQVRBX0NIQU5ORUxfUFBJRF9ET01TVFJJTkcgKi8KKwkJLyogWFhYOiBQcm90ZWN0IGZvciBu
b24gMCB0ZXJtaW5hdGVkIGJ1ZmZlciAqLworCQlwcmludGYoIk1lc3NhZ2UgcmVjZWl2ZWQgb2Yg
bGVuZ3RoICV6dSBvbiBjaGFubmVsIHdpdGggaWQgJWQ6ICUuKnNcbiIsCisJCSAgICAgICBsZW5n
dGgsIGNoYW5uZWwtPmlkLCAoaW50KWxlbmd0aCwgYnVmZmVyKTsKKwl9CisJcmV0dXJuOworfQor
CitzdGF0aWMgdm9pZAoraGFuZGxlX21lc3NhZ2Uoc3RydWN0IHBlZXJfY29ubmVjdGlvbiAqcGMs
IGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDMyX3QgcHBpZCwgdWludDE2X3QgaV9z
dHJlYW0pCit7CisJc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgKnJlcTsK
KwlzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX29wZW5fcmVzcG9uc2UgKnJzcDsKKwlzdHJ1Y3Qg
cnRjd2ViX2RhdGFjaGFubmVsX2FjayAqYWNrLCAqbXNnOworCisJc3dpdGNoIChwcGlkKSB7CisJ
Y2FzZSBEQVRBX0NIQU5ORUxfUFBJRF9DT05UUk9MOgorCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0
cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfYWNrKSkgeworCQkJcmV0dXJuOworCQl9CisJCW1zZyA9
IChzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjayAqKWJ1ZmZlcjsKKwkJc3dpdGNoIChtc2ct
Pm1zZ190eXBlKSB7CisJCWNhc2UgREFUQV9DSEFOTkVMX09QRU5fUkVRVUVTVDoKKwkJCWlmIChs
ZW5ndGggPCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QpKSB7
CisJCQkJLyogWFhYOiBlcnJvciBoYW5kbGluZz8gKi8KKwkJCQlyZXR1cm47CisJCQl9CisJCQly
ZXEgPSAoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3JlcXVlc3QgKilidWZmZXI7CisJ
CQloYW5kbGVfb3Blbl9yZXF1ZXN0X21lc3NhZ2UocGMsIHJlcSwgbGVuZ3RoLCBpX3N0cmVhbSk7
CisJCQlicmVhazsKKwkJY2FzZSBEQVRBX0NIQU5ORUxfT1BFTl9SRVNQT05TRToKKwkJCWlmIChs
ZW5ndGggPCBzaXplb2Yoc3RydWN0IHJ0Y3dlYl9kYXRhY2hhbm5lbF9vcGVuX3Jlc3BvbnNlKSkg
eworCQkJCS8qIFhYWDogZXJyb3IgaGFuZGxpbmc/ICovCisJCQkJcmV0dXJuOworCQkJfQorCQkJ
cnNwID0gKHN0cnVjdCBydGN3ZWJfZGF0YWNoYW5uZWxfb3Blbl9yZXNwb25zZSAqKWJ1ZmZlcjsK
KwkJCWhhbmRsZV9vcGVuX3Jlc3BvbnNlX21lc3NhZ2UocGMsIHJzcCwgbGVuZ3RoLCBpX3N0cmVh
bSk7CisJCQlicmVhazsKKwkJY2FzZSBEQVRBX0NIQU5ORUxfQUNLOgorCQkJaWYgKGxlbmd0aCA8
IHNpemVvZihzdHJ1Y3QgcnRjd2ViX2RhdGFjaGFubmVsX2FjaykpIHsKKwkJCQkvKiBYWFg6IGVy
cm9yIGhhbmRsaW5nPyAqLworCQkJCXJldHVybjsKKwkJCX0KKwkJCWFjayA9IChzdHJ1Y3QgcnRj
d2ViX2RhdGFjaGFubmVsX2FjayAqKWJ1ZmZlcjsKKwkJCWhhbmRsZV9vcGVuX2Fja19tZXNzYWdl
KHBjLCBhY2ssIGxlbmd0aCwgaV9zdHJlYW0pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlo
YW5kbGVfdW5rbm93bl9tZXNzYWdlKGJ1ZmZlciwgbGVuZ3RoLCBpX3N0cmVhbSk7CisJCQlicmVh
azsKKwkJfQorCQlicmVhazsKKwljYXNlIERBVEFfQ0hBTk5FTF9QUElEX0RPTVNUUklORzoKKwlj
YXNlIERBVEFfQ0hBTk5FTF9QUElEX0JJTkFSWToKKwkJaGFuZGxlX2RhdGFfbWVzc2FnZShwYywg
YnVmZmVyLCBsZW5ndGgsIGlfc3RyZWFtKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRm
KCJNZXNzYWdlIG9mIGxlbmd0aCAlenUsIFBQSUQgJXUgb24gc3RyZWFtICV1IHJlY2VpdmVkLlxu
IiwKKwkJICAgICAgIGxlbmd0aCwgcHBpZCwgaV9zdHJlYW0pOworCQlicmVhazsKKwl9Cit9CisK
K3N0YXRpYyB2b2lkCitoYW5kbGVfYXNzb2NpYXRpb25fY2hhbmdlX2V2ZW50KHN0cnVjdCBzY3Rw
X2Fzc29jX2NoYW5nZSAqc2FjKQoreworCXVuc2lnbmVkIGludCBpLCBuOworCisJcHJpbnRmKCJB
c3NvY2lhdGlvbiBjaGFuZ2UgIik7CisJc3dpdGNoIChzYWMtPnNhY19zdGF0ZSkgeworCWNhc2Ug
U0NUUF9DT01NX1VQOgorCQlwcmludGYoIlNDVFBfQ09NTV9VUCIpOworCQlicmVhazsKKwljYXNl
IFNDVFBfQ09NTV9MT1NUOgorCQlwcmludGYoIlNDVFBfQ09NTV9MT1NUIik7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9SRVNUQVJUOgorCQlwcmludGYoIlNDVFBfUkVTVEFSVCIpOworCQlicmVhazsK
KwljYXNlIFNDVFBfU0hVVERPV05fQ09NUDoKKwkJcHJpbnRmKCJTQ1RQX1NIVVRET1dOX0NPTVAi
KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0NBTlRfU1RSX0FTU09DOgorCQlwcmludGYoIlNDVFBf
Q0FOVF9TVFJfQVNTT0MiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRmKCJVTktOT1dO
Iik7CisJCWJyZWFrOworCX0KKwlwcmludGYoIiwgc3RyZWFtcyAoaW4vb3V0KSA9ICgldS8ldSki
LAorCSAgICAgICBzYWMtPnNhY19pbmJvdW5kX3N0cmVhbXMsIHNhYy0+c2FjX291dGJvdW5kX3N0
cmVhbXMpOworCW4gPSBzYWMtPnNhY19sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2Nf
Y2hhbmdlKTsKKwlpZiAoKChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NPTU1fVVApIHx8CisJICAg
ICAoc2FjLT5zYWNfc3RhdGUgPT0gU0NUUF9SRVNUQVJUKSkgJiYgKG4gPiAwKSkgeworCQlwcmlu
dGYoIiwgc3VwcG9ydHMiKTsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKykgeworCQkJc3dpdGNo
IChzYWMtPnNhY19pbmZvW2ldKSB7CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfUFI6CisJ
CQkJcHJpbnRmKCIgUFIiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JU
U19BVVRIOgorCQkJCXByaW50ZigiIEFVVEgiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9B
U1NPQ19TVVBQT1JUU19BU0NPTkY6CisJCQkJcHJpbnRmKCIgQVNDT05GIik7CisJCQkJYnJlYWs7
CisJCQljYXNlIFNDVFBfQVNTT0NfU1VQUE9SVFNfTVVMVElCVUY6CisJCQkJcHJpbnRmKCIgTVVM
VElCVUYiKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgU0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05G
SUc6CisJCQkJcHJpbnRmKCIgUkUtQ09ORklHIik7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0Ogor
CQkJCXByaW50ZigiIFVOS05PV04oMHglMDJ4KSIsIHNhYy0+c2FjX2luZm9baV0pOworCQkJCWJy
ZWFrOworCQkJfQorCQl9CisJfSBlbHNlIGlmICgoKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09N
TV9MT1NUKSB8fAorCSAgICAgICAgICAgIChzYWMtPnNhY19zdGF0ZSA9PSBTQ1RQX0NBTlRfU1RS
X0FTU09DKSkgJiYgKG4gPiAwKSkgeworCQlwcmludGYoIiwgQUJPUlQgPSIpOworCQlmb3IgKGkg
PSAwOyBpIDwgbjsgaSsrKSB7CisJCQlwcmludGYoIiAweCUwMngiLCBzYWMtPnNhY19pbmZvW2ld
KTsKKwkJfQorCX0KKwlwcmludGYoIi5cbiIpOworCWlmICgoc2FjLT5zYWNfc3RhdGUgPT0gU0NU
UF9DQU5UX1NUUl9BU1NPQykgfHwKKwkgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfU0hVVERP
V05fQ09NUCkgfHwKKwkgICAgKHNhYy0+c2FjX3N0YXRlID09IFNDVFBfQ09NTV9MT1NUKSkgewor
CQlleGl0KDApOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVfcGVlcl9h
ZGRyZXNzX2NoYW5nZV9ldmVudChzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYykKK3sKKwlj
aGFyIGFkZHJfYnVmW0lORVQ2X0FERFJTVFJMRU5dOworCWNvbnN0IGNoYXIgKmFkZHI7CisJc3Ry
dWN0IHNvY2thZGRyX2luICpzaW47CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCXN3
aXRjaCAoc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KSB7CisJY2FzZSBBRl9JTkVUOgorCQlzaW4g
PSAoc3RydWN0IHNvY2thZGRyX2luICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9u
dG9wKEFGX0lORVQsICZzaW4tPnNpbl9hZGRyLCBhZGRyX2J1ZiwgSU5FVF9BRERSU1RSTEVOKTsK
KwkJYnJlYWs7CisJY2FzZSBBRl9JTkVUNjoKKwkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopJnNwYy0+c3BjX2FhZGRyOworCQlhZGRyID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmc2luNi0+
c2luNl9hZGRyLCBhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxFTik7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisjaWZkZWYgX1dJTjMyCisJCV9zbnByaW50ZihhZGRyX2J1ZiwgSU5FVDZfQUREUlNUUkxF
TiwgIlVua25vd24gZmFtaWx5ICVkIiwgc3BjLT5zcGNfYWFkZHIuc3NfZmFtaWx5KTsKKyNlbHNl
CisJCXNucHJpbnRmKGFkZHJfYnVmLCBJTkVUNl9BRERSU1RSTEVOLCAiVW5rbm93biBmYW1pbHkg
JWQiLCBzcGMtPnNwY19hYWRkci5zc19mYW1pbHkpOworI2VuZGlmCisJCWFkZHIgPSBhZGRyX2J1
ZjsKKwkJYnJlYWs7CisJfQorCXByaW50ZigiUGVlciBhZGRyZXNzICVzIGlzIG5vdyAiLCBhZGRy
KTsKKwlzd2l0Y2ggKHNwYy0+c3BjX3N0YXRlKSB7CisJY2FzZSBTQ1RQX0FERFJfQVZBSUxBQkxF
OgorCQlwcmludGYoIlNDVFBfQUREUl9BVkFJTEFCTEUiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0FERFJfVU5SRUFDSEFCTEU6CisJCXByaW50ZigiU0NUUF9BRERSX1VOUkVBQ0hBQkxFIik7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9BRERSX1JFTU9WRUQ6CisJCXByaW50ZigiU0NUUF9BRERSX1JF
TU9WRUQiKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FERFJfQURERUQ6CisJCXByaW50ZigiU0NU
UF9BRERSX0FEREVEIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERSX01BREVfUFJJTToKKwkJ
cHJpbnRmKCJTQ1RQX0FERFJfTUFERV9QUklNIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BRERS
X0NPTkZJUk1FRDoKKwkJcHJpbnRmKCJTQ1RQX0FERFJfQ09ORklSTUVEIik7CisJCWJyZWFrOwor
CWRlZmF1bHQ6CisJCXByaW50ZigiVU5LTk9XTiIpOworCQlicmVhazsKKwl9CisJcHJpbnRmKCIg
KGVycm9yID0gMHglMDh4KS5cbiIsIHNwYy0+c3BjX2Vycm9yKTsKKwlyZXR1cm47Cit9CisKK3N0
YXRpYyB2b2lkCitoYW5kbGVfYWRhcHRhdGlvbl9pbmRpY2F0aW9uKHN0cnVjdCBzY3RwX2FkYXB0
YXRpb25fZXZlbnQgKnNhaSkKK3sKKwlwcmludGYoIkFkYXB0YXRpb24gaW5kaWNhdGlvbjogJXgu
XG4iLCBzYWktPiBzYWlfYWRhcHRhdGlvbl9pbmQpOworCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK2hhbmRsZV9zaHV0ZG93bl9ldmVudChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCAqc3Nl
KQoreworCXByaW50ZigiU2h1dGRvd24gZXZlbnQuXG4iKTsKKwkvKiBYWFg6IG5vdGlmeSBhbGwg
Y2hhbm5lbHMuICovCisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAoraGFuZGxlX3N0cmVhbV9y
ZXNldF9ldmVudChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICpwYywgc3RydWN0IHNjdHBfc3RyZWFt
X3Jlc2V0X2V2ZW50ICpzdHJyc3QpCit7CisJdWludDMyX3QgbiwgaTsKKwlzdHJ1Y3QgY2hhbm5l
bCAqY2hhbm5lbDsKKworCW4gPSAoc3RycnN0LT5zdHJyZXNldF9sZW5ndGggLSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSkgLyBzaXplb2YodWludDE2X3QpOworCXByaW50
ZigiU3RyZWFtIHJlc2V0IGV2ZW50OiBmbGFncyA9ICV4LCAiLCBzdHJyc3QtPnN0cnJlc2V0X2Zs
YWdzKTsKKwlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JFU0VUX0lO
Q09NSU5HX1NTTikgeworCQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFN
X1JFU0VUX09VVEdPSU5HX1NTTikgeworCQkJcHJpbnRmKCJpbmNvbWluZy8iKTsKKwkJfQorCQlw
cmludGYoImluY29taW5nICIpOworCX0KKwlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFND
VFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTikgeworCQlwcmludGYoIm91dGdvaW5nICIpOwor
CX0KKwlwcmludGYoInN0cmVhbSBpZHMgPSAiKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7
CisJCWlmIChpID4gMCkgeworCQkJcHJpbnRmKCIsICIpOworCQl9CisJCXByaW50ZigiJWQiLCBz
dHJyc3QtPnN0cnJlc2V0X3N0cmVhbV9saXN0W2ldKTsKKwl9CisJcHJpbnRmKCIuXG4iKTsKKwlp
ZiAoIShzdHJyc3QtPnN0cnJlc2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfREVOSUVEKSAm
JgorCSAgICAhKHN0cnJzdC0+c3RycmVzZXRfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9GQUlM
RUQpKSB7CisJCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJCWlmIChzdHJyc3QtPnN0cnJl
c2V0X2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkdfU1NOKSB7CisJCQkJY2hhbm5l
bCA9IGZpbmRfY2hhbm5lbF9ieV9pX3N0cmVhbShwYywgc3RycnN0LT5zdHJyZXNldF9zdHJlYW1f
bGlzdFtpXSk7CisJCQkJaWYgKGNoYW5uZWwgIT0gTlVMTCkgeworCQkJCQlwYy0+aV9zdHJlYW1f
Y2hhbm5lbFtjaGFubmVsLT5pX3N0cmVhbV0gPSBOVUxMOworCQkJCQljaGFubmVsLT5pX3N0cmVh
bSA9IDA7CisJCQkJCWlmIChjaGFubmVsLT5vX3N0cmVhbSA9PSAwKSB7CisJCQkJCQljaGFubmVs
LT5wcl9wb2xpY3kgPSBTQ1RQX1BSX1NDVFBfTk9ORTsKKwkJCQkJCWNoYW5uZWwtPnByX3ZhbHVl
ID0gMDsKKwkJCQkJCWNoYW5uZWwtPnVub3JkZXJlZCA9IDA7CisJCQkJCQljaGFubmVsLT5mbGFn
cyA9IDA7CisJCQkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TRUQ7CisJCQkJ
CX0gZWxzZSB7CisJCQkJCQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFOTkVMX09QRU4p
IHsKKwkJCQkJCQlyZXNldF9vdXRnb2luZ19zdHJlYW0ocGMsIGNoYW5uZWwtPm9fc3RyZWFtKTsK
KwkJCQkJCQljaGFubmVsLT5zdGF0ZSA9IERBVEFfQ0hBTk5FTF9DTE9TSU5HOworCQkJCQkJfSBl
bHNlIHsKKwkJCQkJCQkvKiBYWFg6IFdoYXQgdG8gZG8/ICovCisJCQkJCQl9CisJCQkJCX0KKwkJ
CQl9CisJCQl9CisJCQlpZiAoc3RycnN0LT5zdHJyZXNldF9mbGFncyAmIFNDVFBfU1RSRUFNX1JF
U0VUX09VVEdPSU5HX1NTTikgeworCQkJCWNoYW5uZWwgPSBmaW5kX2NoYW5uZWxfYnlfb19zdHJl
YW0ocGMsIHN0cnJzdC0+c3RycmVzZXRfc3RyZWFtX2xpc3RbaV0pOworCQkJCWlmIChjaGFubmVs
ICE9IE5VTEwpIHsKKwkJCQkJcGMtPm9fc3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+b19zdHJlYW1d
ID0gTlVMTDsKKwkJCQkJY2hhbm5lbC0+b19zdHJlYW0gPSAwOworCQkJCQlpZiAoY2hhbm5lbC0+
aV9zdHJlYW0gPT0gMCkgeworCQkJCQkJY2hhbm5lbC0+cHJfcG9saWN5ID0gU0NUUF9QUl9TQ1RQ
X05PTkU7CisJCQkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJCQljaGFubmVsLT51bm9y
ZGVyZWQgPSAwOworCQkJCQkJY2hhbm5lbC0+ZmxhZ3MgPSAwOworCQkJCQkJY2hhbm5lbC0+c3Rh
dGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQor
CXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9zdHJlYW1fY2hhbmdlX2V2ZW50KHN0
cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50
ICpzdHJjaGcpCit7CisJdWludDE2X3Qgb19zdHJlYW07CisJdWludDMyX3QgaTsKKwlzdHJ1Y3Qg
Y2hhbm5lbCAqY2hhbm5lbDsKKworCXByaW50ZigiU3RyZWFtIGNoYW5nZSBldmVudDogc3RyZWFt
cyAoaW4vb3V0KSA9ICgldS8ldSksIGZsYWdzID0gJXguXG4iLAorCSAgICAgICBzdHJjaGctPnN0
cmNoYW5nZV9pbnN0cm1zLCBzdHJjaGctPnN0cmNoYW5nZV9vdXRzdHJtcywgc3RyY2hnLT5zdHJj
aGFuZ2VfZmxhZ3MpOworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykg
eworCQljaGFubmVsID0gJihwYy0+Y2hhbm5lbHNbaV0pOworCQlpZiAoKGNoYW5uZWwtPnN0YXRl
ID09IERBVEFfQ0hBTk5FTF9DT05ORUNUSU5HKSAmJgorCQkgICAgKGNoYW5uZWwtPm9fc3RyZWFt
ID09IDApKSB7CisJCQlpZiAoKHN0cmNoZy0+c3RyY2hhbmdlX2ZsYWdzICYgU0NUUF9TVFJFQU1f
Q0hBTkdFX0RFTklFRCkgfHwKKwkJCSAgICAoc3RyY2hnLT5zdHJjaGFuZ2VfZmxhZ3MgJiBTQ1RQ
X1NUUkVBTV9DSEFOR0VfRkFJTEVEKSkgeworCQkJCS8qIFhYWDogU2lnbmFsIHRvIHRoZSBvdGhl
ciBlbmQuICovCisJCQkJaWYgKGNoYW5uZWwtPmlfc3RyZWFtICE9IDApIHsKKwkJCQkJcGMtPmlf
c3RyZWFtX2NoYW5uZWxbY2hhbm5lbC0+aV9zdHJlYW1dID0gTlVMTDsKKwkJCQl9CisJCQkJY2hh
bm5lbC0+dW5vcmRlcmVkID0gMDsKKwkJCQljaGFubmVsLT5wcl9wb2xpY3kgPSBTQ1RQX1BSX1ND
VFBfTk9ORTsKKwkJCQljaGFubmVsLT5wcl92YWx1ZSA9IDA7CisJCQkJY2hhbm5lbC0+aV9zdHJl
YW0gPSAwOworCQkJCWNoYW5uZWwtPm9fc3RyZWFtID0gMDsKKwkJCQljaGFubmVsLT5mbGFncyA9
IDA7CisJCQkJY2hhbm5lbC0+c3RhdGUgPSBEQVRBX0NIQU5ORUxfQ0xPU0VEOworCQkJfSBlbHNl
IHsKKwkJCQlvX3N0cmVhbSA9IGZpbmRfZnJlZV9vX3N0cmVhbShwYyk7CisJCQkJaWYgKG9fc3Ry
ZWFtICE9IDApIHsKKwkJCQkJY2hhbm5lbC0+b19zdHJlYW0gPSBvX3N0cmVhbTsKKwkJCQkJcGMt
Pm9fc3RyZWFtX2NoYW5uZWxbb19zdHJlYW1dID0gY2hhbm5lbDsKKwkJCQkJaWYgKGNoYW5uZWwt
Pmlfc3RyZWFtID09IDApIHsKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERBVEFfQ0hBTk5FTF9G
TEFHU19TRU5EX1JFUTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNoYW5uZWwtPmZsYWdzIHw9IERB
VEFfQ0hBTk5FTF9GTEFHU19TRU5EX1JTUDsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCS8q
IFdlIHdpbGwgbm90IGZpbmQgbW9yZSAuLi4gKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQor
CQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2hhbmRsZV9yZW1vdGVfZXJyb3Jf
ZXZlbnQoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yICpzcmUpCit7CisJc2l6ZV90IGksIG47CisK
KwluID0gc3JlLT5zcmVfbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7
CisJcHJpbnRmKCJSZW1vdGUgRXJyb3IgKGVycm9yID0gMHglMDR4KTogIiwgc3JlLT5zcmVfZXJy
b3IpOworCWZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKwkJcHJpbnRmKCIgMHglMDJ4Iiwgc3Jl
LT4gc3JlX2RhdGFbaV0pOworCX0KKwlwcmludGYoIi5cbiIpOworCXJldHVybjsKK30KKworc3Rh
dGljIHZvaWQKK2hhbmRsZV9zZW5kX2ZhaWxlZF9ldmVudChzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxl
ZF9ldmVudCAqc3NmZSkKK3sKKwlzaXplX3QgaSwgbjsKKworCWlmIChzc2ZlLT5zc2ZlX2ZsYWdz
ICYgU0NUUF9EQVRBX1VOU0VOVCkgeworCQlwcmludGYoIlVuc2VudCAiKTsKKwl9CisJaWYgKHNz
ZmUtPnNzZmVfZmxhZ3MgJiBTQ1RQX0RBVEFfU0VOVCkgeworCQlwcmludGYoIlNlbnQgIik7CisJ
fQorCWlmIChzc2ZlLT5zc2ZlX2ZsYWdzICYgfihTQ1RQX0RBVEFfU0VOVCB8IFNDVFBfREFUQV9V
TlNFTlQpKSB7CisJCXByaW50ZigiKGZsYWdzID0gJXgpICIsIHNzZmUtPnNzZmVfZmxhZ3MpOwor
CX0KKwlwcmludGYoIm1lc3NhZ2Ugd2l0aCBQUElEID0gJXUsIFNJRCA9ICV1LCBmbGFnczogMHgl
MDR4IGR1ZSB0byBlcnJvciA9IDB4JTA4eCIsCisJICAgICAgIG50b2hsKHNzZmUtPnNzZmVfaW5m
by5zbmRfcHBpZCksIHNzZmUtPnNzZmVfaW5mby5zbmRfc2lkLAorCSAgICAgICBzc2ZlLT5zc2Zl
X2luZm8uc25kX2ZsYWdzLCBzc2ZlLT5zc2ZlX2Vycm9yKTsKKwluID0gc3NmZS0+c3NmZV9sZW5n
dGggLSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCWZvciAoaSA9IDA7
IGkgPCBuOyBpKyspIHsKKwkJcHJpbnRmKCIgMHglMDJ4Iiwgc3NmZS0+c3NmZV9kYXRhW2ldKTsK
Kwl9CisJcHJpbnRmKCIuXG4iKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitoYW5kbGVf
bm90aWZpY2F0aW9uKHN0cnVjdCBwZWVyX2Nvbm5lY3Rpb24gKnBjLCB1bmlvbiBzY3RwX25vdGlm
aWNhdGlvbiAqbm90aWYsIHNpemVfdCBuKQoreworCWlmIChub3RpZi0+c25faGVhZGVyLnNuX2xl
bmd0aCAhPSAodWludDMyX3QpbikgeworCQlyZXR1cm47CisJfQorCXN3aXRjaCAobm90aWYtPnNu
X2hlYWRlci5zbl90eXBlKSB7CisJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJaGFuZGxlX2Fz
c29jaWF0aW9uX2NoYW5nZV9ldmVudCgmKG5vdGlmLT5zbl9hc3NvY19jaGFuZ2UpKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6CisJCWhhbmRsZV9wZWVyX2FkZHJlc3Nf
Y2hhbmdlX2V2ZW50KCYobm90aWYtPnNuX3BhZGRyX2NoYW5nZSkpOworCQlicmVhazsKKwljYXNl
IFNDVFBfUkVNT1RFX0VSUk9SOgorCQloYW5kbGVfcmVtb3RlX2Vycm9yX2V2ZW50KCYobm90aWYt
PnNuX3JlbW90ZV9lcnJvcikpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hVVERPV05fRVZFTlQ6
CisJCWhhbmRsZV9zaHV0ZG93bl9ldmVudCgmKG5vdGlmLT5zbl9zaHV0ZG93bl9ldmVudCkpOwor
CQlicmVhazsKKwljYXNlIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OOgorCQloYW5kbGVfYWRh
cHRhdGlvbl9pbmRpY2F0aW9uKCYobm90aWYtPnNuX2FkYXB0YXRpb25fZXZlbnQpKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQ6CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDoKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRFUl9E
UllfRVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZF
TlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJaGFuZGxlX3Nl
bmRfZmFpbGVkX2V2ZW50KCYobm90aWYtPnNuX3NlbmRfZmFpbGVkX2V2ZW50KSk7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ6CisJCWhhbmRsZV9zdHJlYW1fcmVzZXRf
ZXZlbnQocGMsICYobm90aWYtPnNuX3N0cnJlc2V0X2V2ZW50KSk7CisJCXNlbmRfZGVmZXJyZWRf
bWVzc2FnZXMocGMpOworCQlzZW5kX291dGdvaW5nX3N0cmVhbV9yZXNldChwYyk7CisJCXJlcXVl
c3RfbW9yZV9vX3N0cmVhbXMocGMpOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNTT0NfUkVTRVRf
RVZFTlQ6CisJCWJyZWFrOworCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UOgorCQloYW5k
bGVfc3RyZWFtX2NoYW5nZV9ldmVudChwYywgJihub3RpZi0+c25fc3RyY2hhbmdlX2V2ZW50KSk7
CisJCXNlbmRfZGVmZXJyZWRfbWVzc2FnZXMocGMpOworCQlzZW5kX291dGdvaW5nX3N0cmVhbV9y
ZXNldChwYyk7CisJCXJlcXVlc3RfbW9yZV9vX3N0cmVhbXMocGMpOworCQlicmVhazsKKwlkZWZh
dWx0OgorCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF9zdGF0dXMoc3RydWN0
IHBlZXJfY29ubmVjdGlvbiAqcGMpCit7CisJc3RydWN0IHNjdHBfc3RhdHVzIHN0YXR1czsKKwlz
b2NrbGVuX3QgbGVuOworCXVpbnQzMl90IGk7CisJc3RydWN0IGNoYW5uZWwgKmNoYW5uZWw7CisK
KwlsZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCWlmICh1c3Jz
Y3RwX2dldHNvY2tvcHQocGMtPnNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9TVEFUVVMsICZzdGF0
dXMsICZsZW4pIDwgMCkgeworCQlwZXJyb3IoImdldHNvY2tvcHQiKTsKKwkJcmV0dXJuOworCX0K
KwlwcmludGYoIkFzc29jaWF0aW9uIHN0YXRlOiAiKTsKKwlzd2l0Y2ggKHN0YXR1cy5zc3RhdF9z
dGF0ZSkgeworCWNhc2UgU0NUUF9DTE9TRUQ6CisJCXByaW50ZigiQ0xPU0VEXG4iKTsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX0JPVU5EOgorCQlwcmludGYoIkJPVU5EXG4iKTsKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX0xJU1RFTjoKKwkJcHJpbnRmKCJMSVNURU5cbiIpOworCQlicmVhazsKKwljYXNl
IFNDVFBfQ09PS0lFX1dBSVQ6CisJCXByaW50ZigiQ09PS0lFX1dBSVRcbiIpOworCQlicmVhazsK
KwljYXNlIFNDVFBfQ09PS0lFX0VDSE9FRDoKKwkJcHJpbnRmKCJDT09LSUVfRUNIT0VEXG4iKTsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX0VTVEFCTElTSEVEOgorCQlwcmludGYoIkVTVEFCTElTSEVE
XG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NIVVRET1dOX1BFTkRJTkc6CisJCXByaW50Zigi
U0hVVERPV05fUEVORElOR1xuIik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9TSFVURE9XTl9TRU5U
OgorCQlwcmludGYoIlNIVVRET1dOX1NFTlRcbiIpOworCQlicmVhazsKKwljYXNlIFNDVFBfU0hV
VERPV05fUkVDRUlWRUQ6CisJCXByaW50ZigiU0hVVERPV05fUkVDRUlWRURcbiIpOworCQlicmVh
azsKKwljYXNlIFNDVFBfU0hVVERPV05fQUNLX1NFTlQ6CisJCXByaW50ZigiU0hVVERPV05fQUNL
X1NFTlRcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGYoIlVOS05PV05cbiIpOwor
CQlicmVhazsKKwl9CisJcHJpbnRmKCJOdW1iZXIgb2Ygc3RyZWFtcyAoaS9vKSA9ICgldS8ldSlc
biIsCisJICAgICAgIHN0YXR1cy5zc3RhdF9pbnN0cm1zLCBzdGF0dXMuc3N0YXRfb3V0c3RybXMp
OworCWZvciAoaSA9IDA7IGkgPCBOVU1CRVJfT0ZfQ0hBTk5FTFM7IGkrKykgeworCQljaGFubmVs
ID0gJihwYy0+Y2hhbm5lbHNbaV0pOworCQlpZiAoY2hhbm5lbC0+c3RhdGUgPT0gREFUQV9DSEFO
TkVMX0NMT1NFRCkgeworCQkJY29udGludWU7CisJCX0KKwkJcHJpbnRmKCJDaGFubmVsIHdpdGgg
aWQgPSAldTogc3RhdGUgIiwgY2hhbm5lbC0+aWQpOworCQlzd2l0Y2ggKGNoYW5uZWwtPnN0YXRl
KSB7CisJCWNhc2UgREFUQV9DSEFOTkVMX0NMT1NFRDoKKwkJCXByaW50ZigiQ0xPU0VEIik7CisJ
CQlicmVhazsKKwkJY2FzZSBEQVRBX0NIQU5ORUxfQ09OTkVDVElORzoKKwkJCXByaW50ZigiQ09O
TkVDVElORyIpOworCQkJYnJlYWs7CisJCWNhc2UgREFUQV9DSEFOTkVMX09QRU46CisJCQlwcmlu
dGYoIk9QRU4iKTsKKwkJCWJyZWFrOworCQljYXNlIERBVEFfQ0hBTk5FTF9DTE9TSU5HOgorCQkJ
cHJpbnRmKCJDTE9TSU5HIik7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigiVU5L
Tk9XTiglZCkiLCBjaGFubmVsLT5zdGF0ZSk7CisJCQlicmVhazsKKwkJfQorCQlwcmludGYoIiwg
ZmxhZ3MgPSAweCUwOHgsIHN0cmVhbSBpZCAoaW4vb3V0KTogKCV1LyV1KSwgIiwKKwkJICAgICAg
IGNoYW5uZWwtPmZsYWdzLAorCQkgICAgICAgY2hhbm5lbC0+aV9zdHJlYW0sCisJCSAgICAgICBj
aGFubmVsLT5vX3N0cmVhbSk7CisJCWlmIChjaGFubmVsLT51bm9yZGVyZWQpIHsKKwkJCXByaW50
ZigidW5vcmRlcmVkLCAiKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50Zigib3JkZXJlZCwgIik7CisJ
CX0KKwkJc3dpdGNoIChjaGFubmVsLT5wcl9wb2xpY3kpIHsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBf
Tk9ORToKKwkJCXByaW50ZigicmVsaWFibGUuXG4iKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBf
UFJfU0NUUF9UVEw6CisJCQlwcmludGYoInVucmVsaWFibGUgKHRpbWVvdXQgJXVtcykuXG4iLCBj
aGFubmVsLT5wcl92YWx1ZSk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BSX1NDVFBfUlRYOgor
CQkJcHJpbnRmKCJ1bnJlbGlhYmxlIChtYXguICV1IHJ0eCkuXG4iLCBjaGFubmVsLT5wcl92YWx1
ZSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ZigidW5rb3duIHBvbGljeSAldS5c
biIsIGNoYW5uZWwtPnByX3BvbGljeSk7CisJCQlicmVhazsKKwkJfQorCX0KK30KKworc3RhdGlj
IGludAorcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9y
ZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNj
dHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7CisJc3RydWN0IHBl
ZXJfY29ubmVjdGlvbiAqcGM7CisKKwlwYyA9IChzdHJ1Y3QgcGVlcl9jb25uZWN0aW9uICopdWxw
X2luZm87CisKKwlpZiAoZGF0YSkgeworCQlsb2NrX3BlZXJfY29ubmVjdGlvbihwYyk7CisJCWlm
IChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJCWhhbmRsZV9ub3RpZmljYXRpb24ocGMs
ICh1bmlvbiBzY3RwX25vdGlmaWNhdGlvbiAqKWRhdGEsIGRhdGFsZW4pOworCQl9IGVsc2Ugewor
CQkJaGFuZGxlX21lc3NhZ2UocGMsIGRhdGEsIGRhdGFsZW4sIG50b2hsKHJjdi5yY3ZfcHBpZCks
IHJjdi5yY3Zfc2lkKTsKKwkJfQorCQl1bmxvY2tfcGVlcl9jb25uZWN0aW9uKHBjKTsKKwl9CisJ
cmV0dXJuICgxKTsKK30KKwordm9pZAorZGVidWdfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwg
Li4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm9ybWF0KTsKKwl2cHJpbnRm
KGZvcm1hdCwgYXApOworCXZhX2VuZChhcCk7Cit9CisKK2ludAorbWFpbihpbnQgYXJnYywgY2hh
ciAqYXJndltdKQoreworCXN0cnVjdCBzb2NrZXQgKnNvY2s7CisJc3RydWN0IHNvY2thZGRyX2lu
IGFkZHI7CisJc29ja2xlbl90IGFkZHJfbGVuOworCWNoYXIgbGluZVtMSU5FX0xFTkdUSCArIDFd
OworCXVuc2lnbmVkIGludCB1bm9yZGVyZWQsIHBvbGljeSwgdmFsdWUsIGlkLCBzZWNvbmRzOwor
CXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBjaGFubmVsICpjaGFubmVsOworCWNvbnN0IGludCBv
biA9IDE7CisJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgYXY7CisJc3RydWN0IHNjdHBfZXZlbnQg
ZXZlbnQ7CisJc3RydWN0IHNjdHBfdWRwZW5jYXBzIGVuY2FwczsKKwlzdHJ1Y3Qgc2N0cF9pbml0
bXNnIGluaXRtc2c7CisJdWludDE2X3QgZXZlbnRfdHlwZXNbXSA9IHtTQ1RQX0FTU09DX0NIQU5H
RSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUEVFUl9BRERSX0NIQU5HRSwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUkVNT1RFX0VSUk9SLAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9TSFVURE9XTl9FVkVOVCwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfQURBUFRBVElPTl9JTkRJQ0FUSU9OLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5ULAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9TVFJFQU1fQ0hBTkdFX0VWRU5UfTsKKwljaGFyIGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsK
KworCWlmIChhcmdjID4gMSkgeworCQl1c3JzY3RwX2luaXQoYXRvaShhcmd2WzFdKSwgTlVMTCwg
ZGVidWdfcHJpbnRmKTsKKwl9IGVsc2UgeworCQl1c3JzY3RwX2luaXQoOTg5OSwgTlVMTCwgZGVi
dWdfcHJpbnRmKTsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCXVzcnNjdHBfc3lzY3RsX3NldF9z
Y3RwX2RlYnVnX29uKFNDVFBfREVCVUdfTk9ORSk7CisjZW5kaWYKKwl1c3JzY3RwX3N5c2N0bF9z
ZXRfc2N0cF9ibGFja2hvbGUoMik7CisKKwlpZiAoKHNvY2sgPSB1c3JzY3RwX3NvY2tldChBRl9J
TkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCByZWNlaXZlX2NiLCBOVUxMLCAwLCAmcGVl
cl9jb25uZWN0aW9uKSkgPT0gTlVMTCkgeworCQlwZXJyb3IoInNvY2tldCIpOworCX0KKwlpbml0
X3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwlpZiAoYXJnYyA+IDIpIHsKKwkJ
bWVtc2V0KCZlbmNhcHMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5j
YXBzLnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9IEFGX0lORVQ2OworCQllbmNhcHMuc3VlX3BvcnQg
PSBodG9ucyhhdG9pKGFyZ3ZbMl0pKTsKKwkJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCwgKGNvbnN0IHZvaWQqKSZl
bmNhcHMsIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3VkcGVuY2FwcykpIDwgMCkgewor
CQkJcGVycm9yKCJzZXRzb2Nrb3B0Iik7CisJCX0KKwl9CisJaWYgKHVzcnNjdHBfc2V0c29ja29w
dChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfUkVDVlJDVklORk8sICZvbiwgc2l6ZW9mKGludCkp
IDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9SRUNWUkNWSU5GTyIpOworCX0KKwlp
ZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9FWFBMSUNJVF9F
T1IsICZvbiwgc2l6ZW9mKGludCkpIDwgMCkgeworCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9F
WFBMSUNJVF9FT1IiKTsKKwl9CisJLyogQWxsb3cgcmVzZXR0aW5nIHN0cmVhbXMuICovCisJYXYu
YXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlhdi5hc3NvY192YWx1ZSA9IFNDVFBfRU5BQkxF
X1JFU0VUX1NUUkVBTV9SRVEgfCBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVROworCWlmICh1
c3JzY3RwX3NldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0VOQUJMRV9TVFJFQU1f
UkVTRVQsICZhdiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKSkgPCAwKSB7CisJCXBl
cnJvcigic2V0c29ja29wdCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQiKTsKKwl9CisJLyogRW5h
YmxlIHRoZSBldmVudHMgb2YgaW50ZXJlc3QuICovCisJbWVtc2V0KCZldmVudCwgMCwgc2l6ZW9m
KGV2ZW50KSk7CisJZXZlbnQuc2VfYXNzb2NfaWQgPSBTQ1RQX0FMTF9BU1NPQzsKKwlldmVudC5z
ZV9vbiA9IDE7CisJZm9yIChpID0gMDsgaSA8IHNpemVvZihldmVudF90eXBlcykvc2l6ZW9mKHVp
bnQxNl90KTsgaSsrKSB7CisJCWV2ZW50LnNlX3R5cGUgPSBldmVudF90eXBlc1tpXTsKKwkJaWYg
KHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfRVZFTlQsICZldmVu
dCwgc2l6ZW9mKGV2ZW50KSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tvcHQgU0NUUF9FVkVO
VCIpOworCQl9CisJfQorCW1lbXNldCgmaW5pdG1zZywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2lu
aXRtc2cpKTsKKwlpbml0bXNnLnNpbml0X251bV9vc3RyZWFtcyA9IDU7CisJaW5pdG1zZy5zaW5p
dF9tYXhfaW5zdHJlYW1zID0gNjU1MzU7CisJaWYgKHVzcnNjdHBfc2V0c29ja29wdChzb2NrLCBJ
UFBST1RPX1NDVFAsIFNDVFBfSU5JVE1TRywgJmluaXRtc2csIHNpemVvZihzdHJ1Y3Qgc2N0cF9p
bml0bXNnKSkgPCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCBTQ1RQX0lOSVRNU0ciKTsKKwl9
CisKKwlpZiAoYXJnYyA9PSA1KSB7CisJCS8qIG9wZXJhdGluZyBhcyBjbGllbnQgKi8KKwkJbWVt
c2V0KCZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWFkZHIuc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFkZHIuc2luX2xlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWlmICghaW5ldF9wdG9uKEFGX0lO
RVQsIGFyZ3ZbM10sICZhZGRyLnNpbl9hZGRyLnNfYWRkcikpeworCQkJcHJpbnRmKCJlcnJvcjog
aW52YWxpZCBhZGRyZXNzXG4iKTsKKwkJCWV4aXQoMSk7CisJCX0KKwkJYWRkci5zaW5fcG9ydCA9
IGh0b25zKGF0b2koYXJndls0XSkpOworCQlpZiAodXNyc2N0cF9jb25uZWN0KHNvY2ssIChzdHJ1
Y3Qgc29ja2FkZHIgKikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewor
CQkJcGVycm9yKCJjb25uZWN0Iik7CisJCX0KKworCQlwcmludGYoIkNvbm5lY3RlZCB0byAlczol
ZC5cbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKGFkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJTkVU
X0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbl9wb3J0KSk7CisJfSBlbHNlIGlmIChhcmdjID09
IDQpIHsKKwkJc3RydWN0IHNvY2tldCAqY29ubl9zb2NrOworCisJCS8qIG9wZXJhdGluZyBhcyBz
ZXJ2ZXIgKi8KKwkJbWVtc2V0KCZhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisJCWFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCWFk
ZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWFkZHIu
c2luX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKwkJYWRkci5zaW5fcG9ydCA9IGh0b25zKGF0
b2koYXJndlszXSkpOworCQlpZiAodXNyc2N0cF9iaW5kKHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIg
KikmYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworCQkJcGVycm9yKCJi
aW5kIik7CisJCX0KKwkJaWYgKHVzcnNjdHBfbGlzdGVuKHNvY2ssIDEpIDwgMCkgeworCQkJcGVy
cm9yKCJsaXN0ZW4iKTsKKwkJfQorCQlhZGRyX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisJCW1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOworCQlpZiAoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHNvY2ssIChzdHJ1Y3Qg
c29ja2FkZHIgKikmYWRkciwgJmFkZHJfbGVuKSkgPT0gTlVMTCkgeworCQkJcGVycm9yKCJhY2Nl
cHQiKTsKKwkJfQorCQl1c3JzY3RwX2Nsb3NlKHNvY2spOworCQlzb2NrID0gY29ubl9zb2NrOwor
CQlwcmludGYoIkNvbm5lY3RlZCB0byAlczolZC5cbiIsIGluZXRfbnRvcChBRl9JTkVULCAmKGFk
ZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBudG9ocyhhZGRyLnNpbl9w
b3J0KSk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCJVc2FnZTogJXMgbG9jYWxfdWRwX3BvcnQgcmVt
b3RlX3VkcF9wb3J0IGxvY2FsX3BvcnQgd2hlbiBvcGVyYXRpbmcgYXMgc2VydmVyXG4iCisJCSAg
ICAgICAiICAgICAgICVzIGxvY2FsX3VkcF9wb3J0IHJlbW90ZV91ZHBfcG9ydCByZW1vdGVfYWRk
ciByZW1vdGVfcG9ydCB3aGVuIG9wZXJhdGluZyBhcyBjbGllbnRcbiIsCisJCSAgICAgICBhcmd2
WzBdLCBhcmd2WzBdKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlsb2NrX3BlZXJfY29ubmVjdGlv
bigmcGVlcl9jb25uZWN0aW9uKTsKKwlwZWVyX2Nvbm5lY3Rpb24uc29jayA9IHNvY2s7CisJdW5s
b2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKworCWZvciAoOzspIHsKKyNp
ZmRlZiBfV0lOMzIKKwkJaWYgKGdldHNfcyhsaW5lLCBMSU5FX0xFTkdUSCkgPT0gTlVMTCkgewor
I2Vsc2UKKwkJaWYgKGZnZXRzKGxpbmUsIExJTkVfTEVOR1RILCBzdGRpbikgPT0gTlVMTCkgewor
I2VuZGlmCisJCQlpZiAodXNyc2N0cF9zaHV0ZG93bihzb2NrLCBTSFVUX1dSKSA8IDApIHsKKwkJ
CQlwZXJyb3IoInVzcnNjdHBfc2h1dGRvd24iKTsKKwkJCX0KKwkJCXdoaWxlICh1c3JzY3RwX2Zp
bmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCQlTbGVlcCgxMDAwKTsKKyNlbHNlCisJ
CQkJc2xlZXAoMSk7CisjZW5kaWYKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWlmIChzdHJuY21w
KGxpbmUsICI/Iiwgc3RybGVuKCI/IikpID09IDAgfHwKKwkJICAgIHN0cm5jbXAobGluZSwgImhl
bHAiLCBzdHJsZW4oImhlbHAiKSkgPT0gMCkgeworCQkJcHJpbnRmKCJDb21tYW5kczpcbiIKKwkJ
CSAgICAgICAib3BlbiB1bm9yZGVyZWQgcHJfcG9saWN5IHByX3ZhbHVlIC0gb3BlbnMgYSBjaGFu
bmVsXG4iCisJCQkgICAgICAgImNsb3NlIGNoYW5uZWwgLSBjbG9zZXMgdGhlIGNoYW5uZWxcbiIK
KwkJCSAgICAgICAic2VuZCBjaGFubmVsOnN0cmluZyAtIHNlbmRzIHN0cmluZyB1c2luZyBjaGFu
bmVsXG4iCisJCQkgICAgICAgInN0YXR1cyAtIHByaW50cyB0aGUgc3RhdHVzXG4iCisJCQkgICAg
ICAgInNsZWVwIG4gLSBzbGVlcCBmb3IgbiBzZWNvbmRzXG4iCisJCQkgICAgICAgImhlbHAgLSB0
aGlzIG1lc3NhZ2VcbiIpOworCQl9IGVsc2UgaWYgKHN0cm5jbXAobGluZSwgInN0YXR1cyIsIHN0
cmxlbigic3RhdHVzIikpID09IDApIHsKKwkJCWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nv
bm5lY3Rpb24pOworCQkJcHJpbnRfc3RhdHVzKCZwZWVyX2Nvbm5lY3Rpb24pOworCQkJdW5sb2Nr
X3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJfSBlbHNlIGlmIChzdHJuY21w
KGxpbmUsICJxdWl0Iiwgc3RybGVuKCJxdWl0IikpID09IDApIHsKKwkJCWlmICh1c3JzY3RwX3No
dXRkb3duKHNvY2ssIFNIVVRfV1IpIDwgMCkgeworCQkJCXBlcnJvcigidXNyc2N0cF9zaHV0ZG93
biIpOworCQkJfQorCQkJd2hpbGUgKHVzcnNjdHBfZmluaXNoKCkgIT0gMCkgeworI2lmZGVmIF9X
SU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgorCQkJ
fQorCQkJYnJlYWs7CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxpbmUsICJvcGVuICV1ICV1ICV1Iiwg
JnVub3JkZXJlZCwgJnBvbGljeSwgJnZhbHVlKSA9PSAzKSB7CisJCQlsb2NrX3BlZXJfY29ubmVj
dGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCWNoYW5uZWwgPSBvcGVuX2NoYW5uZWwoJnBlZXJf
Y29ubmVjdGlvbiwgKHVpbnQ4X3QpdW5vcmRlcmVkLCAodWludDE2X3QpcG9saWN5LCAodWludDMy
X3QpdmFsdWUpOworCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsK
KwkJCWlmIChjaGFubmVsID09IE5VTEwpIHsKKwkJCQlwcmludGYoIkNyZWF0aW5nIGNoYW5uZWwg
ZmFpbGVkLlxuIik7CisJCQl9IGVsc2UgeworCQkJCXByaW50ZigiQ2hhbm5lbCB3aXRoIGlkICV1
IGNyZWF0ZWQuXG4iLCBjaGFubmVsLT5pZCk7CisJCQl9CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxp
bmUsICJjbG9zZSAldSIsICZpZCkgPT0gMSkgeworCQkJaWYgKGlkIDwgTlVNQkVSX09GX0NIQU5O
RUxTKSB7CisJCQkJbG9ja19wZWVyX2Nvbm5lY3Rpb24oJnBlZXJfY29ubmVjdGlvbik7CisJCQkJ
Y2xvc2VfY2hhbm5lbCgmcGVlcl9jb25uZWN0aW9uLCAmcGVlcl9jb25uZWN0aW9uLmNoYW5uZWxz
W2lkXSk7CisJCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlvbigmcGVlcl9jb25uZWN0aW9uKTsKKwkJ
CX0KKwkJfSBlbHNlIGlmIChzc2NhbmYobGluZSwgInNlbmQgJXUiLCAmaWQpID09IDEpIHsKKwkJ
CWlmIChpZCA8IE5VTUJFUl9PRl9DSEFOTkVMUykgeworCQkJCWNoYXIgKm1zZzsKKworCQkJCW1z
ZyA9IHN0cnN0cihsaW5lLCAiOiIpOworCQkJCWlmIChtc2cpIHsKKwkJCQkJbXNnKys7CisJCQkJ
CWxvY2tfcGVlcl9jb25uZWN0aW9uKCZwZWVyX2Nvbm5lY3Rpb24pOworI2lmZGVmIF9XSU4zMgor
CQkJCQlpZiAoc2VuZF91c2VyX21lc3NhZ2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVj
dGlvbi5jaGFubmVsc1tpZF0sIG1zZywgc3RybGVuKG1zZykpKSB7CisjZWxzZQorCQkJCQlpZiAo
c2VuZF91c2VyX21lc3NhZ2UoJnBlZXJfY29ubmVjdGlvbiwgJnBlZXJfY29ubmVjdGlvbi5jaGFu
bmVsc1tpZF0sIG1zZywgc3RybGVuKG1zZykgLSAxKSkgeworI2VuZGlmCisJCQkJCQlwcmludGYo
Ik1lc3NhZ2Ugc2VudC5cbiIpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcHJpbnRmKCJNZXNzYWdl
IHNlbmRpbmcgZmFpbGVkLlxuIik7CisJCQkJCX0KKwkJCQkJdW5sb2NrX3BlZXJfY29ubmVjdGlv
bigmcGVlcl9jb25uZWN0aW9uKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAoc3NjYW5mKGxp
bmUsICJzbGVlcCAldSIsICZzZWNvbmRzKSA9PSAxKSB7CisjaWZkZWYgX1dJTjMyCisJCQlTbGVl
cChzZWNvbmRzICogMTAwMCk7CisjZWxzZQorCQkJc2xlZXAoc2Vjb25kcyk7CisjZW5kaWYKKwkJ
fSBlbHNlIHsKKwkJCXByaW50ZigiVW5rbm93biBjb21tYW5kOiAlcyIsIGxpbmUpOworCQl9CisJ
fQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90ZXN0X2xp
Ym1nbXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCmluZGV4IGU2OWRlMjli
YjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmRlNWUwZjAyYTgwZGZiZDlkMTI0NDc1
YTI2NWZiNmFkNDM4MzM0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfbGli
bWdtdC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfbGlibWdtdC5jCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0
aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBfV0lOMzIKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUg
InVzcnNjdHAuaCIKKworaW50CittYWluKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAw
OyBpIDwgMTAwMDA7IGkrKykgeworCQl1c3JzY3RwX2luaXQoMCwgTlVMTCwgTlVMTCk7CisJCXdo
aWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJCVNsZWVwKDEw
MDApOworI2Vsc2UKKwkJCXNsZWVwKDEpOworI2VuZGlmCisJCX0KKwl9CisJcmV0dXJuICgwKTsK
K30KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Byb2dyYW1zL3Rlc3RfdGltZXIuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL3Rlc3RfdGltZXIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVh
ZDhjMmU0OGM1MzkxLi45MGE5M2M4NDVhNWE0MDkzZDY1ZWY5Zjc0YjkzMDZkYzc2ZjcyOTg5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90ZXN0X3RpbWVyLmMKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
cHJvZ3JhbXMvdGVzdF90aW1lci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
KyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LglJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF
CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2lmbmRlZiBfV0lOMzIKKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHVzcnNjdHAuaD4KKworaW50CittYWlu
KHZvaWQpIAoreworCXVuc2lnbmVkIGludCBpOworCisJdXNyc2N0cF9pbml0KDAsIE5VTEwsIE5V
TEwpOworCXByaW50ZigiRW50ZXJpbmcgdGhlIGxvb3BcbiIpOworCWZvciAoaSA9IDA7IGkgPCAx
MDAwMDAwOyBpKyspIHsKKwkJdXNyc2N0cF9yZWdpc3Rlcl9hZGRyZXNzKE5VTEwpOworCQl1c3Jz
Y3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyhOVUxMKTsKKwl9CisJcHJpbnRmKCJFeGl0ZWQgdGhlIGxv
b3BcbiIpOworCXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIK
KwkJU2xlZXAoMTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4g
KDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHAuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3Byb2dyYW1zL3RzY3RwLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uYzg1ZGEyMmIxODhlZjNhOGUwNGQzNTE3YmZjODhmZGExMzA5MWNlMiAxMDA2NDQK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvcHJvZ3JhbXMvdHNjdHAuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9wcm9ncmFtcy90
c2N0cC5jCkBAIC0wLDAgKzEsODI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMTMg
TWljaGFlbCBUdWV4ZW4KKyAqIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIElyZW5lIFJ1ZW5nZWxl
cgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9K
RUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuCUlOIE5PIEVWRU5UIFNIQUxMIFRI
RSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9XSU4zMgorI2luY2x1ZGUg
PHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4K
KyNpbmNsdWRlIDxjcnRkYmcuaD4KKyNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbHNlCisjaW5j
bHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxh
cnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgor
I2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1
ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+Cisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBMSU5VWAorI2lu
Y2x1ZGUgPGdldG9wdC5oPgorI2VuZGlmCisjaW5jbHVkZSA8dXNyc2N0cC5oPgorCisvKiBnbG9i
YWwgZm9yIHRoZSBzZW5kIGNhbGxiYWNrLCBidXQgdXNlZCBpbiBrZXJuZWwgdmVyc2lvbiBhcyB3
ZWxsICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBudW1iZXJfb2ZfbWVzc2FnZXM7CitzdGF0aWMg
Y2hhciAqYnVmZmVyOworc3RhdGljIGludCBsZW5ndGg7CitzdGF0aWMgc3RydWN0IHNvY2thZGRy
X2luIHJlbW90ZV9hZGRyOworc3RhdGljIGludCB1bm9yZGVyZWQ7Cit1aW50MzJfdCBvcHR2YWwg
PSAxOworc3RydWN0IHNvY2tldCAqcHNvY2sgPSBOVUxMOworCitzdGF0aWMgc3RydWN0IHRpbWV2
YWwgc3RhcnRfdGltZTsKK3Vuc2lnbmVkIGludCBydW50aW1lID0gMDsKK3N0YXRpYyB1bnNpZ25l
ZCBsb25nIG1lc3NhZ2VzID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZmlyc3RfbGVu
Z3RoID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgc3VtID0gMDsKK3N0YXRpYyB1bnNp
Z25lZCBpbnQgdXNlX2NiID0gMDsKKworI2lmbmRlZiB0aW1lcnN1YgorI2RlZmluZSB0aW1lcnN1
Yih0dnAsIHV2cCwgdnZwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisJCSh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjIC0gKHV2cCktPnR2X3NlYzsgICAgXAor
CQkodnZwKS0+dHZfdXNlYyA9ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7IFwKKwkJ
aWYgKCh2dnApLT50dl91c2VjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQko
dnZwKS0+dHZfc2VjLS07ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQkodnZwKS0+dHZf
dXNlYyArPSAxMDAwMDAwOyAgICAgICAgICAgICAgICBcCisJCX0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZW5kaWYKKwor
CitjaGFyIFVzYWdlW10gPQorIlVzYWdlOiB0c2N0cCBbb3B0aW9uc10gW2FkZHJlc3NdXG4iCisi
T3B0aW9uczpcbiIKKyIgICAgICAgIC1hICAgICAgICAgICAgIHNldCBhZGFwdGF0aW9uIGxheWVy
IGluZGljYXRpb25cbiIKKyIgICAgICAgIC1jICAgICAgICAgICAgIHVzZSBjYWxsYmFjayBBUElc
biIKKyIgICAgICAgIC1FICAgICAgICAgICAgIGxvY2FsIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQg
KGRlZmF1bHQgOTg5OSlcbiIKKyIgICAgICAgIC1mICAgICAgICAgICAgIGZyYWdtZW50YXRpb24g
cG9pbnRcbiIKKyIgICAgICAgIC1sICAgICAgICAgICAgIHNpemUgb2Ygc2VuZC9yZWNlaXZlIGJ1
ZmZlclxuIgorIiAgICAgICAgLUwgICAgICAgICAgICAgYmluZCB0byBsb2NhbCBJUCAoZGVmYXVs
dCBJTkFERFJfQU5ZKVxuIgorIiAgICAgICAgLW4gICAgICAgICAgICAgbnVtYmVyIG9mIG1lc3Nh
Z2VzIHNlbnQgKDAgbWVhbnMgaW5maW5pdGUpL3JlY2VpdmVkXG4iCisiICAgICAgICAtRCAgICAg
ICAgICAgICB0dXJucyBOYWdsZSBvZmZcbiIKKyIgICAgICAgIC1SICAgICAgICAgICAgIHNvY2tl
dCByZWN2IGJ1ZmZlclxuIgorIiAgICAgICAgLVMgICAgICAgICAgICAgc29ja2V0IHNlbmQgYnVm
ZmVyXG4iCisiICAgICAgICAtVCAgICAgICAgICAgICB0aW1lIHRvIHNlbmQgbWVzc2FnZXNcbiIK
KyIgICAgICAgIC11ICAgICAgICAgICAgIHVzZSB1bm9yZGVyZWQgdXNlciBtZXNzYWdlc1xuIgor
IiAgICAgICAgLVUgICAgICAgICAgICAgcmVtb3RlIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnRcbiIK
KyIgICAgICAgIC12ICAgICAgICAgICAgIHZlcmJvc2VcbiIKKyIgICAgICAgIC1WICAgICAgICAg
ICAgIHZlcnkgdmVyYm9zZVxuIgorOworCisjZGVmaW5lIERFRkFVTFRfTEVOR1RIICAgICAgICAg
ICAgIDEwMjQKKyNkZWZpbmUgREVGQVVMVF9OVU1CRVJfT0ZfTUVTU0FHRVMgMTAyNAorI2RlZmlu
ZSBERUZBVUxUX1BPUlQgICAgICAgICAgICAgICA1MDAxCisjZGVmaW5lIEJVRkZFUlNJWkUgICAg
ICAgICAgICAgICAgICgxPDwxNikKKworc3RhdGljIGludCB2ZXJib3NlLCB2ZXJ5X3ZlcmJvc2U7
CitzdGF0aWMgdW5zaWduZWQgaW50IGRvbmU7CisKK3ZvaWQgc3RvcF9zZW5kZXIoaW50IHNpZykK
K3sKKwlkb25lID0gMTsKK30KKworI2lmZGVmIF9XSU4zMgorc3RhdGljIHZvaWQKK2dldHRpbWVv
ZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYsIHZvaWQgKmlnbm9yZSkKK3sKKwlzdHJ1Y3QgdGltZWIg
dGI7CisKKwlmdGltZSgmdGIpOworCXR2LT50dl9zZWMgPSAobG9uZyl0Yi50aW1lOworIAl0di0+
dHZfdXNlYyA9IHRiLm1pbGxpdG0gKiAxMDAwOworfQorI2VuZGlmCisKKyNpZmRlZiBfV0lOMzIK
K3N0YXRpYyBEV09SRCBXSU5BUEkKKyNlbHNlCitzdGF0aWMgdm9pZCAqCisjZW5kaWYKK2hhbmRs
ZV9jb25uZWN0aW9uKHZvaWQgKmFyZykKK3sKKwlzc2l6ZV90IG47CisJY2hhciAqYnVmOworI2lm
ZGVmIF9XSU4zMgorCUhBTkRMRSB0aWQ7CisjZWxzZQorCXB0aHJlYWRfdCB0aWQ7CisjZW5kaWYK
KwlzdHJ1Y3Qgc29ja2V0ICpjb25uX3NvY2s7CisJc3RydWN0IHRpbWV2YWwgdGltZV9zdGFydCwg
dGltZV9ub3csIHRpbWVfZGlmZjsKKwlkb3VibGUgc2Vjb25kczsKKwl1bnNpZ25lZCBsb25nIHJl
Y3ZfY2FsbHMgPSAwOworCXVuc2lnbmVkIGxvbmcgbm90aWZpY2F0aW9ucyA9IDA7CisJaW50IGZs
YWdzOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCXNvY2tsZW5fdCBsZW47CisJdW5pb24g
c2N0cF9ub3RpZmljYXRpb24gKnNucDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsK
KwlzdHJ1Y3QgdGltZXZhbCBub3RlX3RpbWU7CisJdW5zaWduZWQgaW50IGluZm90eXBlOworCXN0
cnVjdCBzY3RwX3JlY3Z2X3JuIHJuOworCXNvY2tsZW5fdCBpbmZvbGVuID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX3JlY3Z2X3JuKTsKKworCWNvbm5fc29jayA9ICooc3RydWN0IHNvY2tldCAqKilhcmc7
CisjaWZkZWYgX1dJTjMyCisJdGlkID0gR2V0Q3VycmVudFRocmVhZCgpOworI2Vsc2UKKwl0aWQg
PSBwdGhyZWFkX3NlbGYoKTsKKwlwdGhyZWFkX2RldGFjaCh0aWQpOworI2VuZGlmCisKKwlidWYg
PSBtYWxsb2MoQlVGRkVSU0laRSk7CisJZmxhZ3MgPSAwOworCWxlbiA9IChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJaW5mb3R5cGUgPSAwOworCW1lbXNldCgmcm4sIDAs
IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2dl9ybikpOworCW4gPSB1c3JzY3RwX3JlY3Z2KGNvbm5f
c29jaywgYnVmLCBCVUZGRVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAo
dm9pZCAqKSZybiwKKwkgICAgICAgICAgICAgICAgICZpbmZvbGVuLCAmaW5mb3R5cGUsICZmbGFn
cyk7CisKKwlnZXR0aW1lb2ZkYXkoJnRpbWVfc3RhcnQsIE5VTEwpOworCXdoaWxlIChuID4gMCkg
eworCQlyZWN2X2NhbGxzKys7CisJCWlmIChmbGFncyAmIE1TR19OT1RJRklDQVRJT04pIHsKKwkJ
CW5vdGlmaWNhdGlvbnMrKzsKKwkJCWdldHRpbWVvZmRheSgmbm90ZV90aW1lLCBOVUxMKTsKKwkJ
CXByaW50Zigibm90aWZpY2F0aW9uIGFycml2ZWQgYXQgJWZcbiIsIG5vdGVfdGltZS50dl9zZWMr
KGRvdWJsZSlub3RlX3RpbWUudHZfdXNlYy8xMDAwMDAwLjApOworCQkJc25wID0gKHVuaW9uIHNj
dHBfbm90aWZpY2F0aW9uICopYnVmOworCQkJaWYgKHNucC0+c25faGVhZGVyLnNuX3R5cGU9PVND
VFBfUEVFUl9BRERSX0NIQU5HRSkKKwkJCXsKKwkJCQlzcGMgPSAmc25wLT5zbl9wYWRkcl9jaGFu
Z2U7CisJCQkJcHJpbnRmKCJTQ1RQX1BFRVJfQUREUl9DSEFOR0U6IHN0YXRlPSVkLCBlcnJvcj0l
ZFxuIixzcGMtPnNwY19zdGF0ZSwgc3BjLT5zcGNfZXJyb3IpOworCQkJfQorCQl9IGVsc2Ugewor
CQkJaWYgKHZlcnlfdmVyYm9zZSkgeworCQkJCXByaW50ZigiTWVzc2FnZSByZWNlaXZlZFxuIik7
CisJCQl9CisJCQlzdW0gKz0gbjsKKwkJCWlmIChmbGFncyAmIE1TR19FT1IpIHsKKwkJCQltZXNz
YWdlcysrOworCQkJCWlmIChmaXJzdF9sZW5ndGggPT0gMCkKKwkJCQkJZmlyc3RfbGVuZ3RoID0g
c3VtOworCQkJfQorCQl9CisJCWZsYWdzID0gMDsKKwkJbGVuID0gKHNvY2tsZW5fdClzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKTsKKwkJaW5mb2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2
dl9ybik7CisJCWluZm90eXBlID0gMDsKKwkJbWVtc2V0KCZybiwgMCwgc2l6ZW9mKHN0cnVjdCBz
Y3RwX3JlY3Z2X3JuKSk7CisJCW4gPSB1c3JzY3RwX3JlY3Z2KGNvbm5fc29jaywgKHZvaWQgKikg
YnVmLCBCVUZGRVJTSVpFLCAoc3RydWN0IHNvY2thZGRyICopICZhZGRyLCAmbGVuLCAodm9pZCAq
KSZybiwKKwkJICAgICAgICAgICAgICAgICAgJmluZm9sZW4sICZpbmZvdHlwZSwgJmZsYWdzKTsK
Kwl9CisJaWYgKG4gPCAwKQorCQlwZXJyb3IoInNjdHBfcmVjdnYiKTsKKwlnZXR0aW1lb2ZkYXko
JnRpbWVfbm93LCBOVUxMKTsKKwl0aW1lcnN1YigmdGltZV9ub3csICZ0aW1lX3N0YXJ0LCAmdGlt
ZV9kaWZmKTsKKwlzZWNvbmRzID0gdGltZV9kaWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZm
LnR2X3VzZWMvMTAwMDAwMC4wOworCXByaW50ZigiJWxsdSwgJWx1LCAlbHUsICVsdSwgJWxsdSwg
JWYsICVmXG4iLAorCSAgICAgICAgZmlyc3RfbGVuZ3RoLCBtZXNzYWdlcywgcmVjdl9jYWxscywg
bm90aWZpY2F0aW9ucywgc3VtLCBzZWNvbmRzLCAoZG91YmxlKWZpcnN0X2xlbmd0aCAqIChkb3Vi
bGUpbWVzc2FnZXMgLyBzZWNvbmRzKTsKKwlmZmx1c2goc3Rkb3V0KTsKKwl1c3JzY3RwX2Nsb3Nl
KGNvbm5fc29jayk7CisJZnJlZShidWYpOworI2lmZGVmIF9XSU4zMgorCXJldHVybiAwOworI2Vs
c2UKKwlyZXR1cm4gKE5VTEwpOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK3NlbmRfY2Ioc3Ry
dWN0IHNvY2tldCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSkgeworCXN0cnVjdCBzY3RwX3NuZGlu
Zm8gc25kaW5mbzsKKworCWlmICgobWVzc2FnZXMgPT0gMCkgJiB2ZXJib3NlKSB7CisJCXByaW50
ZigiU3RhcnQgc2VuZGluZyAiKTsKKwkJaWYgKG51bWJlcl9vZl9tZXNzYWdlcyA+IDApIHsKKwkJ
CXByaW50ZigiJWxkIG1lc3NhZ2VzICIsIChsb25nKW51bWJlcl9vZl9tZXNzYWdlcyk7CisJCX0K
KwkJaWYgKHJ1bnRpbWUgPiAwKSB7CisJCQlwcmludGYoImZvciAldSBzZWNvbmRzIC4uLiIsIHJ1
bnRpbWUpOworCQl9CisJCXByaW50ZigiXG4iKTsKKwkJZmZsdXNoKHN0ZG91dCk7CisJfQorCisJ
c25kaW5mby5zbmRfc2lkID0gMDsKKwlzbmRpbmZvLnNuZF9mbGFncyA9IDA7CisJaWYgKHVub3Jk
ZXJlZCAhPSAwKSB7CisJCXNuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCX0K
KwlzbmRpbmZvLnNuZF9wcGlkID0gMDsKKwlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwlzbmRp
bmZvLnNuZF9hc3NvY19pZCA9IDA7CisKKwl3aGlsZSAoIWRvbmUgJiYgKChudW1iZXJfb2ZfbWVz
c2FnZXMgPT0gMCkgfHwgKG1lc3NhZ2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkpIHsK
KwkJaWYgKHZlcnlfdmVyYm9zZSkgeworCQkJcHJpbnRmKCJTZW5kaW5nIG1lc3NhZ2UgbnVtYmVy
ICVsdS5cbiIsIG1lc3NhZ2VzICsgMSk7CisJCX0KKworCQlpZiAodXNyc2N0cF9zZW5kdihwc29j
aywgYnVmZmVyLCBsZW5ndGgsCisJCSAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIg
KikgJnJlbW90ZV9hZGRyLCAxLAorCQkgICAgICAgICAgICAgICAgICAodm9pZCAqKSZzbmRpbmZv
LCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJ
TkZPLAorCQkgICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFV09V
TERCTE9DSyAmJiBlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYg
KGNiKSIpOworCQkJCWV4aXQoMSk7CisJCQl9IGVsc2UgeworCQkJCWlmICh2ZXJ5X3ZlcmJvc2Up
eworCQkJCQlwcmludGYoIkVXT1VMREJMT0NLIG9yIEVBR0FJTiBmb3IgbWVzc2FnZSBudW1iZXIg
JWx1IC0gd2lsbCByZXRyeVxuIiwgbWVzc2FnZXMgKyAxKTsKKwkJCQl9CisJCQkJLyogc2VuZCB1
bnRpbCBFV09VTERCTE9DSyB0aGVuIGV4aXQgY2FsbGJhY2suICovCisJCQkJcmV0dXJuICgxKTsK
KwkJCX0KKwkJfQorCQltZXNzYWdlcysrOworCX0KKwlpZiAoKGRvbmUgPT0gMSkgfHwgKG1lc3Nh
Z2VzID09IChudW1iZXJfb2ZfbWVzc2FnZXMgLSAxKSkpIHsKKwkJaWYgKHZlcnlfdmVyYm9zZSkK
KwkJCXByaW50ZigiU2VuZGluZyBmaW5hbCBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBtZXNzYWdl
cyArIDEpOworCisJCXNuZGluZm8uc25kX2ZsYWdzIHw9IFNDVFBfRU9GOworCQlpZiAodXNyc2N0
cF9zZW5kdihwc29jaywgYnVmZmVyLCBsZW5ndGgsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnJlbW90
ZV9hZGRyLCAxLAorCQkgICAgICAgICAgICAgICAgICAodm9pZCAqKSZzbmRpbmZvLCAoc29ja2xl
bl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRpbmZvKSwgU0NUUF9TRU5EVl9TTkRJTkZPLAorCQkg
ICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCWlmIChlcnJubyAhPSBFV09VTERCTE9DSyAm
JiBlcnJubyAhPSBFQUdBSU4pIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYgKGNiKSIpOwor
CQkJCWV4aXQoMSk7CisJCQl9IGVsc2UgeworCQkJCWlmICh2ZXJ5X3ZlcmJvc2UpeworCQkJCQlw
cmludGYoIkVXT1VMREJMT0NLIG9yIEVBR0FJTiBmb3IgZmluYWwgbWVzc2FnZSBudW1iZXIgJWx1
IC0gd2lsbCByZXRyeVxuIiwgbWVzc2FnZXMgKyAxKTsKKwkJCQl9CisJCQkJLyogc2VuZCB1bnRp
bCBFV09VTERCTE9DSyB0aGVuIGV4aXQgY2FsbGJhY2suICovCisJCQkJcmV0dXJuICgxKTsKKwkJ
CX0KKwkJfQorCQltZXNzYWdlcysrOworCQlkb25lID0gMjsKKwl9CisKKwlyZXR1cm4gKDEpOwor
fQorCitzdGF0aWMgaW50CitzZXJ2ZXJfcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1
bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3Qg
ZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2lu
Zm8pCit7CisJc3RydWN0IHRpbWV2YWwgbm93LCBkaWZmX3RpbWU7CisJZG91YmxlIHNlY29uZHM7
CisKKwlpZiAoZGF0YSA9PSBOVUxMKSB7CisJCWdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKKwkJ
dGltZXJzdWIoJm5vdywgJnN0YXJ0X3RpbWUsICZkaWZmX3RpbWUpOworCQlzZWNvbmRzID0gZGlm
Zl90aW1lLnR2X3NlYyArIChkb3VibGUpZGlmZl90aW1lLnR2X3VzZWMvMTAwMDAwMC4wOworCQlw
cmludGYoIiVsbHUsICVsdSwgJWxsdSwgJWYsICVmXG4iLAorCQkJZmlyc3RfbGVuZ3RoLCBtZXNz
YWdlcywgc3VtLCBzZWNvbmRzLCAoZG91YmxlKWZpcnN0X2xlbmd0aCAqIChkb3VibGUpbWVzc2Fn
ZXMgLyBzZWNvbmRzKTsKKwkJdXNyc2N0cF9jbG9zZShzb2NrKTsKKwkJZmlyc3RfbGVuZ3RoID0g
MDsKKwkJc3VtID0gMDsKKwkJbWVzc2FnZXMgPSAwOworCQlyZXR1cm4gKDEpOworCX0KKwlpZiAo
Zmlyc3RfbGVuZ3RoID09IDApIHsKKwkJZmlyc3RfbGVuZ3RoID0gKHVuc2lnbmVkIGludClkYXRh
bGVuOworCQlnZXR0aW1lb2ZkYXkoJnN0YXJ0X3RpbWUsIE5VTEwpOworCX0KKwlzdW0gKz0gZGF0
YWxlbjsKKwltZXNzYWdlcysrOworCisJZnJlZShkYXRhKTsKKwlyZXR1cm4gKDEpOworfQorCitz
dGF0aWMgaW50CitjbGllbnRfcmVjZWl2ZV9jYihzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1bmlvbiBz
Y3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAgICAgICAgICBzaXplX3QgZGF0YWxl
biwgc3RydWN0IHNjdHBfcmN2aW5mbyByY3YsIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pCit7
CisJZnJlZShkYXRhKTsKKwlyZXR1cm4gKDEpOworfQorCit2b2lkCitkZWJ1Z19wcmludGYoY29u
c3QgY2hhciAqZm9ybWF0LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBm
b3JtYXQpOworCXZwcmludGYoZm9ybWF0LCBhcCk7CisJdmFfZW5kKGFwKTsKK30KKworaW50IG1h
aW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworI2lmbmRlZiBfV0lOMzIKKwlpbnQgYzsKKyNl
bmRpZgorCXNvY2tsZW5fdCBhZGRyX2xlbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gbG9jYWxfYWRk
cjsKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lX3N0YXJ0LCB0aW1lX25vdywgdGltZV9kaWZmOworCWlu
dCBjbGllbnQ7CisJdWludDE2X3QgbG9jYWxfcG9ydCwgcmVtb3RlX3BvcnQsIHBvcnQsIGxvY2Fs
X3VkcF9wb3J0LCByZW1vdGVfdWRwX3BvcnQ7CisJaW50IHJjdmJ1ZnNpemU9MCwgc25kYnVmc2l6
ZT0wLCBteXJjdmJ1ZnNpemUsIG15c25kYnVmc2l6ZTsKKwlzb2NrbGVuX3QgaW50bGVuOworCWRv
dWJsZSBzZWNvbmRzOworCWRvdWJsZSB0aHJvdWdocHV0OworCWludCBub2RlbGF5ID0gMDsKKwlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSBhdjsKKwlzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgZW5jYXBz
OworCXN0cnVjdCBzY3RwX3NuZGluZm8gc25kaW5mbzsKKyNpZmRlZiBfV0lOMzIKKwl1bnNpZ25l
ZCBsb25nIHNyY0FkZHI7CisJSEFORExFIHRpZDsKKyNlbHNlCisJaW5fYWRkcl90IHNyY0FkZHI7
CisJcHRocmVhZF90IHRpZDsKKyNlbmRpZgorCWludCBmcmFncG9pbnQgPSAwOworCXN0cnVjdCBz
Y3RwX3NldGFkYXB0YXRpb24gaW5kID0gezB9OworI2lmZGVmIF9XSU4zMgorCWNoYXIgKm9wdDsK
KwlpbnQgb3B0aW5kOworI2VuZGlmCisJdW5vcmRlcmVkID0gMDsKKworCWxlbmd0aCA9IERFRkFV
TFRfTEVOR1RIOworCW51bWJlcl9vZl9tZXNzYWdlcyA9IERFRkFVTFRfTlVNQkVSX09GX01FU1NB
R0VTOworCXBvcnQgPSBERUZBVUxUX1BPUlQ7CisJcmVtb3RlX3VkcF9wb3J0ID0gMDsKKwlsb2Nh
bF91ZHBfcG9ydCA9IDk4OTk7CisJdmVyYm9zZSA9IDA7CisJdmVyeV92ZXJib3NlID0gMDsKKwlz
cmNBZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7CisKKwltZW1zZXQoKHZvaWQgKikgJnJlbW90ZV9h
ZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCh2b2lkICopICZs
b2NhbF9hZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisKKyNpZm5kZWYgX1dJ
TjMyCisJd2hpbGUgKChjID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICJhOmNwOmw6RTpmOkw6bjpSOlM6
VDp1VTp2VkQiKSkgIT0gLTEpCisJCXN3aXRjaChjKSB7CisJCQljYXNlICdhJzoKKwkJCQlpbmQu
c3NiX2FkYXB0YXRpb25faW5kID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOworCQkJY2FzZSAn
Yyc6CisJCQkJdXNlX2NiID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2wnOgorCQkJCWxlbmd0
aCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ24nOgorCQkJCW51bWJlcl9v
Zl9tZXNzYWdlcyA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3AnOgorCQkJ
CXBvcnQgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJCQljYXNlICdFJzoKKwkJCQlsb2Nh
bF91ZHBfcG9ydCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ2YnOgorCQkJ
CWZyYWdwb2ludCA9IGF0b2kob3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0wnOgorCQkJ
CWlmIChpbmV0X3B0b24oQUZfSU5FVCwgb3B0YXJnLCAmc3JjQWRkcikgIT0gMSkgeworCQkJCQlw
cmludGYoIkNhbid0IHBhcnNlICVzXG4iLCBvcHRhcmcpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CWNhc2UgJ1InOgorCQkJCXJjdmJ1ZnNpemUgPSBhdG9pKG9wdGFyZyk7CisJCQkJYnJlYWs7CisJ
CQljYXNlICdTJzoKKwkJCQlzbmRidWZzaXplID0gYXRvaShvcHRhcmcpOworCQkJCWJyZWFrOwor
CQkJY2FzZSAnVCc6CisJCQkJcnVudGltZSA9IGF0b2kob3B0YXJnKTsKKwkJCQludW1iZXJfb2Zf
bWVzc2FnZXMgPSAwOworCQkJCWJyZWFrOworCQkJY2FzZSAndSc6CisJCQkJdW5vcmRlcmVkID0g
MTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1UnOgorCQkJCXJlbW90ZV91ZHBfcG9ydCA9IGF0b2ko
b3B0YXJnKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3YnOgorCQkJCXZlcmJvc2UgPSAxOworCQkJ
CWJyZWFrOworCQkJY2FzZSAnVic6CisJCQkJdmVyYm9zZSA9IDE7CisJCQkJdmVyeV92ZXJib3Nl
ID0gMTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ0QnOgorCQkJCW5vZGVsYXkgPSAxOworCQkJCWJy
ZWFrOworCQkJZGVmYXVsdDoKKwkJCQlmcHJpbnRmKHN0ZGVyciwgIiVzIiwgVXNhZ2UpOworCQkJ
CWV4aXQoMSk7CisJCX0KKyNlbHNlCisJZm9yIChvcHRpbmQgPSAxOyBvcHRpbmQgPCBhcmdjOyBv
cHRpbmQrKykgeworCQlpZiAoYXJndltvcHRpbmRdWzBdID09ICctJykgeworCQkJc3dpdGNoIChh
cmd2W29wdGluZF1bMV0pIHsKKwkJCQljYXNlICdhJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFy
Z2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9
CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsKKwkJCQkJaW5kLnNzYl9hZGFwdGF0aW9uX2luZCA9
IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnYyc6CisJCQkJCXVzZV9jYiA9IDE7
CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJ2wnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykg
eworCQkJCQkJcHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJ
CQkJb3B0ID0gYXJndltvcHRpbmRdOworCQkJCQlsZW5ndGggPSBhdG9pKG9wdCk7CisJCQkJCWJy
ZWFrOworCQkJCWNhc2UgJ3AnOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJ
cHJpbnRmKCIlcyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0g
YXJndltvcHRpbmRdOworCQkJCQlwb3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQlj
YXNlICduJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMi
LCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5k
XTsKKwkJCQkJbnVtYmVyX29mX21lc3NhZ2VzID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJ
CQljYXNlICdmJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50Zigi
JXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0
aW5kXTsKKwkJCQkJZnJhZ3BvaW50ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNl
ICdMJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBV
c2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsK
KwkJCQkJaW5ldF9wdG9uKEFGX0lORVQsIG9wdCwgJnNyY0FkZHIpOworCQkJCQlicmVhazsKKwkJ
CQljYXNlICdVJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50Zigi
JXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0
aW5kXTsKKwkJCQkJcmVtb3RlX3VkcF9wb3J0ID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJ
CQljYXNlICdFJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50Zigi
JXMiLCBVc2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0
aW5kXTsKKwkJCQkJbG9jYWxfdWRwX3BvcnQgPSBhdG9pKG9wdCk7CisJCQkJCWJyZWFrOworCQkJ
CWNhc2UgJ1InOgorCQkJCQlpZiAoKytvcHRpbmQgPj0gYXJnYykgeworCQkJCQkJcHJpbnRmKCIl
cyIsIFVzYWdlKTsKKwkJCQkJCWV4aXQoMSk7CisJCQkJCX0KKwkJCQkJb3B0ID0gYXJndltvcHRp
bmRdOworCQkJCQlyY3ZidWZzaXplID0gYXRvaShvcHQpOworCQkJCQlicmVhazsKKwkJCQljYXNl
ICdTJzoKKwkJCQkJaWYgKCsrb3B0aW5kID49IGFyZ2MpIHsKKwkJCQkJCXByaW50ZigiJXMiLCBV
c2FnZSk7CisJCQkJCQlleGl0KDEpOworCQkJCQl9CisJCQkJCW9wdCA9IGFyZ3Zbb3B0aW5kXTsK
KwkJCQkJc25kYnVmc2l6ZSA9IGF0b2kob3B0KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSAnVCc6
CisJCQkJCWlmICgrK29wdGluZCA+PSBhcmdjKSB7CisJCQkJCQlwcmludGYoIiVzIiwgVXNhZ2Up
OworCQkJCQkJZXhpdCgxKTsKKwkJCQkJfQorCQkJCQlvcHQgPSBhcmd2W29wdGluZF07CisJCQkJ
CXJ1bnRpbWUgPSBhdG9pKG9wdCk7CisJCQkJCW51bWJlcl9vZl9tZXNzYWdlcyA9IDA7CisJCQkJ
CWJyZWFrOworCQkJCWNhc2UgJ3UnOgorCQkJCQl1bm9yZGVyZWQgPSAxOworCQkJCQlicmVhazsK
KwkJCQljYXNlICd2JzoKKwkJCQkJdmVyYm9zZSA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNhc2Ug
J1YnOgorCQkJCQl2ZXJib3NlID0gMTsKKwkJCQkJdmVyeV92ZXJib3NlID0gMTsKKwkJCQkJYnJl
YWs7CisJCQkJY2FzZSAnRCc6CisJCQkJCW5vZGVsYXkgPSAxOworCQkJCQlicmVhazsKKwkJCQlk
ZWZhdWx0OgorCQkJCQlwcmludGYoIiVzIiwgVXNhZ2UpOworCQkJCQlleGl0KDEpOworCQkJfQor
CQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisjZW5kaWYKKwlpZiAob3B0aW5kID09IGFy
Z2MpIHsKKwkJY2xpZW50ID0gMDsKKwkJbG9jYWxfcG9ydCA9IHBvcnQ7CisJCXJlbW90ZV9wb3J0
ID0gMDsKKwl9IGVsc2UgeworCQljbGllbnQgPSAxOworCQlsb2NhbF9wb3J0ID0gMDsKKwkJcmVt
b3RlX3BvcnQgPSBwb3J0OworCX0KKwlsb2NhbF9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwor
I2lmZGVmIEhBVkVfU0lOX0xFTgorCWxvY2FsX2FkZHIuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pOworI2VuZGlmCisJbG9jYWxfYWRkci5zaW5fcG9ydCA9IGh0b25zKGxvY2Fs
X3BvcnQpOworCWxvY2FsX2FkZHIuc2luX2FkZHIuc19hZGRyID0gc3JjQWRkcjsKKworCXVzcnNj
dHBfaW5pdChsb2NhbF91ZHBfcG9ydCwgTlVMTCwgZGVidWdfcHJpbnRmKTsKKyNpZmRlZiBTQ1RQ
X0RFQlVHCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfZGVidWdfb24oU0NUUF9ERUJVR19BTEwp
OworI2VuZGlmCisJdXNyc2N0cF9zeXNjdGxfc2V0X3NjdHBfYmxhY2tob2xlKDIpOworCXVzcnNj
dHBfc3lzY3RsX3NldF9zY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5KDEpOworCisJaWYgKGNs
aWVudCkgeworCQlpZiAodXNlX2NiKSB7CisJCQlpZiAoIShwc29jayA9IHVzcnNjdHBfc29ja2V0
KEFGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1NDVFAsIGNsaWVudF9yZWNlaXZlX2NiLCBz
ZW5kX2NiLCBsZW5ndGgsIE5VTEwpKSkgeworCQkJCXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJ
CQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3Nv
Y2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBO
VUxMKSkpIHsKKwkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0K
KwkJfQorCX0gZWxzZSB7CisJCWlmICh1c2VfY2IpIHsKKwkJCWlmICghKHBzb2NrID0gdXNyc2N0
cF9zb2NrZXQoQUZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fU0NUUCwgc2VydmVyX3JlY2Vp
dmVfY2IsIE5VTEwsIDAsIE5VTEwpKSkgeworCQkJCXBlcnJvcigidXNlcl9zb2NrZXQiKTsKKwkJ
CQlleGl0KDEpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCEocHNvY2sgPSB1c3JzY3RwX3Nv
Y2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19TQ1RQLCBOVUxMLCBOVUxMLCAwLCBO
VUxMKSkpIHsKKwkJCQlwZXJyb3IoInVzZXJfc29ja2V0Iik7CisJCQkJZXhpdCgxKTsKKwkJCX0K
KwkJfQorCX0KKworCWlmICh1c3JzY3RwX2JpbmQocHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikm
bG9jYWxfYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpID09IC0xKSB7CisJCXBlcnJv
cigidXNyc2N0cF9iaW5kIik7CisJCWV4aXQoMSk7CisJfQorCisJaWYgKHVzcnNjdHBfc2V0c29j
a29wdChwc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0FEQVBUQVRJT05fTEFZRVIsIChjb25zdCB2
b2lkKikmaW5kLCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uKSkg
PCAwKSB7CisJCXBlcnJvcigic2V0c29ja29wdCIpOworCX0KKworCWlmICghY2xpZW50KSB7CisJ
CWlmIChyY3ZidWZzaXplKSB7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xf
U09DS0VULCBTT19SQ1ZCVUYsICZyY3ZidWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJ
cGVycm9yKCJzZXRzb2Nrb3B0OiByY3ZidWYiKTsKKwkJCX0KKwkJfQorCQlpZiAodmVyYm9zZSkg
eworCQkJaW50bGVuID0gc2l6ZW9mKGludCk7CisJCQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBz
b2NrLCBTT0xfU09DS0VULCBTT19SQ1ZCVUYsICZteXJjdmJ1ZnNpemUsIChzb2NrbGVuX3QgKikm
aW50bGVuKSA8IDApIHsKKwkJCQlwZXJyb3IoImdldHNvY2tvcHQ6IHJjdmJ1ZiIpOworCQkJfSBl
bHNlIHsKKwkJCQlmcHJpbnRmKHN0ZG91dCwiUmVjZWl2ZSBidWZmZXIgc2l6ZTogJWQuXG4iLCBt
eXJjdmJ1ZnNpemUpOworCQkJfQorCQl9CisKKwkJaWYgKHVzcnNjdHBfbGlzdGVuKHBzb2NrLCAx
KSA8IDApIHsKKwkJCXBlcnJvcigidXNyc2N0cF9saXN0ZW4iKTsKKwkJCWV4aXQoMSk7CisJCX0K
KworCQl3aGlsZSAoMSkgeworCQkJbWVtc2V0KCZyZW1vdGVfYWRkciwgMCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpOworCQkJYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKKwkJCWlmICh1c2VfY2IpIHsKKwkJCQlzdHJ1Y3Qgc29ja2V0ICpjb25uX3NvY2s7CisKKwkJ
CQlpZiAoKGNvbm5fc29jayA9IHVzcnNjdHBfYWNjZXB0KHBzb2NrLCAoc3RydWN0IHNvY2thZGRy
ICopICZyZW1vdGVfYWRkciwgJmFkZHJfbGVuKSk9PSBOVUxMKSB7CisJCQkJCXBlcnJvcigidXNy
c2N0cF9hY2NlcHQiKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlz
dHJ1Y3Qgc29ja2V0ICoqY29ubl9zb2NrOworCisJCQkJY29ubl9zb2NrID0gKHN0cnVjdCBzb2Nr
ZXQgKiopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2V0ICopKTsKKwkJCQlpZiAoKCpjb25uX3Nv
Y2sgPSB1c3JzY3RwX2FjY2VwdChwc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSAmcmVtb3RlX2Fk
ZHIsICZhZGRyX2xlbikpPT0gTlVMTCkgeworCQkJCQlwZXJyb3IoInVzcnNjdHBfYWNjZXB0Iik7
CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKyNpZmRlZiBfV0lOMzIKKwkJCQl0aWQgPSBDcmVhdGVU
aHJlYWQoTlVMTCwgMCwgJmhhbmRsZV9jb25uZWN0aW9uLCAodm9pZCAqKWNvbm5fc29jaywgMCwg
TlVMTCk7CisjZWxzZQorCQkJCXB0aHJlYWRfY3JlYXRlKCZ0aWQsIE5VTEwsICZoYW5kbGVfY29u
bmVjdGlvbiwgKHZvaWQgKiljb25uX3NvY2spOworI2VuZGlmCisJCQl9CisJCQlpZiAodmVyYm9z
ZSkgeworCQkJCS8vIGNvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNy
YywgY2hhciAqZHN0LCBzb2NrbGVuX3Qgc2l6ZSkKKwkJCQkvL2luZXRfbnRvYShyZW1vdGVfYWRk
ci5zaW5fYWRkcikKKwkJCQljaGFyIGFkZHJidWZbSU5FVF9BRERSU1RSTEVOXTsKKwkJCQlwcmlu
dGYoIkNvbm5lY3Rpb24gYWNjZXB0ZWQgZnJvbSAlczolZFxuIiwgaW5ldF9udG9wKEFGX0lORVQs
ICYocmVtb3RlX2FkZHIuc2luX2FkZHIpLCBhZGRyYnVmLCBJTkVUX0FERFJTVFJMRU4pLCBudG9o
cyhyZW1vdGVfYWRkci5zaW5fcG9ydCkpOworCQkJfQorCQl9CisJCS8vdXNyc2N0cF9jbG9zZShw
c29jayk7IC8vIHVucmVhY2hhYmxlCisJfSBlbHNlIHsKKwkJbWVtc2V0KCZlbmNhcHMsIDAsIHNp
emVvZihzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMpKTsKKwkJZW5jYXBzLnN1ZV9hZGRyZXNzLnNzX2Zh
bWlseSA9IEFGX0lORVQ7CisJCWVuY2Fwcy5zdWVfcG9ydCA9IGh0b25zKHJlbW90ZV91ZHBfcG9y
dCk7CisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQUFJPVE9fU0NUUCwgU0NUUF9S
RU1PVEVfVURQX0VOQ0FQU19QT1JULCAoY29uc3Qgdm9pZCopJmVuY2FwcywgKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNjdHBfdWRwZW5jYXBzKSkgPCAwKSB7CisJCQlwZXJyb3IoInNldHNvY2tv
cHQiKTsKKwkJfQorCisJCXJlbW90ZV9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVm
IEhBVkVfU0lOX0xFTgorCQlyZW1vdGVfYWRkci5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7CisjZW5kaWYKKwkJaWYgKCFpbmV0X3B0b24oQUZfSU5FVCwgYXJndltvcHRpbmRd
LCAmcmVtb3RlX2FkZHIuc2luX2FkZHIuc19hZGRyKSl7CisJCQlwcmludGYoImVycm9yOiBpbnZh
bGlkIGRlc3RpbmF0aW9uIGFkZHJlc3NcbiIpOworCQkJZXhpdCgxKTsKKwkJfQorCQlyZW1vdGVf
YWRkci5zaW5fcG9ydCA9IGh0b25zKHJlbW90ZV9wb3J0KTsKKworCQkvKiBUT0RPIGZyYWdwb2lu
dCBzdHVmZiAqLworCQlpZiAobm9kZWxheSA9PSAxKSB7CisJCQlvcHR2YWwgPSAxOworCQl9IGVs
c2UgeworCQkJb3B0dmFsID0gMDsKKwkJfQorCQl1c3JzY3RwX3NldHNvY2tvcHQocHNvY2ssIElQ
UFJPVE9fU0NUUCwgU0NUUF9OT0RFTEFZLCAmb3B0dmFsLCBzaXplb2YoaW50KSk7CisKKwkJaWYg
KGZyYWdwb2ludCkgeworCQkJYXYuYXNzb2NfaWQgPSAwOworCQkJYXYuYXNzb2NfdmFsdWUgPSBm
cmFncG9pbnQ7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBJUFBST1RPX1NDVFAs
IFNDVFBfTUFYU0VHLCAmYXYsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSkpIDwgMCkg
eworCQkJCXBlcnJvcigic2V0c29ja29wdDogU0NUUF9NQVhTRUciKTsKKwkJCX0KKwkJfQorCisJ
CWlmIChzbmRidWZzaXplKSB7CisJCQlpZiAodXNyc2N0cF9zZXRzb2Nrb3B0KHBzb2NrLCBTT0xf
U09DS0VULCBTT19TTkRCVUYsICZzbmRidWZzaXplLCBzaXplb2YoaW50KSkgPCAwKSB7CisJCQkJ
cGVycm9yKCJzZXRzb2Nrb3B0OiBzbmRidWYiKTsKKwkJCX0KKwkJfQorCQlpZiAodmVyYm9zZSkg
eworCQkJaW50bGVuID0gc2l6ZW9mKGludCk7CisJCQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHBz
b2NrLCBTT0xfU09DS0VULCBTT19TTkRCVUYsICZteXNuZGJ1ZnNpemUsIChzb2NrbGVuX3QgKikm
aW50bGVuKSA8IDApIHsKKwkJCQlwZXJyb3IoInNldHNvY2tvcHQ6IFNPX1NOREJVRiIpOworCQkJ
fSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZG91dCwiU2VuZCBidWZmZXIgc2l6ZTogJWQuXG4iLCBt
eXNuZGJ1ZnNpemUpOworCQkJfQorCQl9CisKKwkJYnVmZmVyID0gbWFsbG9jKGxlbmd0aCk7CisJ
CW1lbXNldChidWZmZXIsICdiJywgbGVuZ3RoKTsKKworCQlpZiAodXNyc2N0cF9jb25uZWN0KHBz
b2NrLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpID09IC0xICkgeworCQkJcGVycm9yKCJ1c3JzY3RwX2Nvbm5lY3QiKTsKKwkJCWV4
aXQoMSk7CisJCX0KKworCQlnZXR0aW1lb2ZkYXkoJnRpbWVfc3RhcnQsIE5VTEwpOworCisJCWRv
bmUgPSAwOworCisJCWlmIChydW50aW1lID4gMCkgeworI2lmbmRlZiBfV0lOMzIKKwkJCXNpZ25h
bChTSUdBTFJNLCBzdG9wX3NlbmRlcik7CisJCQlhbGFybShydW50aW1lKTsKKyNlbHNlCisJCQlw
cmludGYoIllvdSBjYW5ub3Qgc2V0IHRoZSBydW50aW1lIGluIFdpbmRvd3MgeWV0XG4iKTsKKwkJ
CWV4aXQoLTEpOworI2VuZGlmCisJCX0KKworCQlpZiAodXNlX2NiKSB7CisJCQl3aGlsZSAoZG9u
ZSA8IDIgJiYgKG1lc3NhZ2VzIDwgKG51bWJlcl9vZl9tZXNzYWdlcyAtIDEpKSkgeworI2lmZGVm
IF9XSU4zMgorCQkJCVNsZWVwKDEwMDApOworI2Vsc2UKKwkJCQlzbGVlcCgxKTsKKyNlbmRpZgor
CQkJfQorCQl9IGVsc2UgeworCQkJc25kaW5mby5zbmRfc2lkID0gMDsKKwkJCXNuZGluZm8uc25k
X2ZsYWdzID0gMDsKKwkJCWlmICh1bm9yZGVyZWQgIT0gMCkgeworCQkJCXNuZGluZm8uc25kX2Zs
YWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQkJfQorCQkJc25kaW5mby5zbmRfcHBpZCA9IDA7CisJ
CQlzbmRpbmZvLnNuZF9jb250ZXh0ID0gMDsKKwkJCXNuZGluZm8uc25kX2Fzc29jX2lkID0gMDsK
KwkJCWlmICh2ZXJib3NlKSB7CisJCQkJcHJpbnRmKCJTdGFydCBzZW5kaW5nICIpOworCQkJCWlm
IChudW1iZXJfb2ZfbWVzc2FnZXMgPiAwKSB7CisJCQkJCXByaW50ZigiJWxkIG1lc3NhZ2VzICIs
IChsb25nKW51bWJlcl9vZl9tZXNzYWdlcyk7CisJCQkJfQorCQkJCWlmIChydW50aW1lID4gMCkg
eworCQkJCQlwcmludGYoImZvciAldSBzZWNvbmRzIC4uLiIsIHJ1bnRpbWUpOworCQkJCX0KKwkJ
CQlwcmludGYoIlxuIik7CisJCQkJZmZsdXNoKHN0ZG91dCk7CisJCQl9CisJCQl3aGlsZSAoIWRv
bmUgJiYgKChudW1iZXJfb2ZfbWVzc2FnZXMgPT0gMCkgfHwgKG1lc3NhZ2VzIDwgKG51bWJlcl9v
Zl9tZXNzYWdlcyAtIDEpKSkpIHsKKwkJCQlpZiAodmVyeV92ZXJib3NlKSB7CisJCQkJCXByaW50
ZigiU2VuZGluZyBtZXNzYWdlIG51bWJlciAlbHUuXG4iLCBtZXNzYWdlcyArIDEpOworCQkJCX0K
KworCQkJCWlmICh1c3JzY3RwX3NlbmR2KHBzb2NrLCBidWZmZXIsIGxlbmd0aCwgKHN0cnVjdCBz
b2NrYWRkciAqKSAmcmVtb3RlX2FkZHIsIDEsCisJCQkJICAgICAgICAgICAgICAgICAgKHZvaWQg
Kikmc25kaW5mbywgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIFNDVFBf
U0VORFZfU05ESU5GTywKKwkJCQkgICAgICAgICAgICAgICAgICAwKSA8IDApIHsKKwkJCQkJcGVy
cm9yKCJ1c3JzY3RwX3NlbmR2Iik7CisJCQkJCWV4aXQoMSk7CisJCQkJfQorCQkJCW1lc3NhZ2Vz
Kys7CisJCQl9CisJCQlpZiAodmVyeV92ZXJib3NlKSB7CisJCQkJcHJpbnRmKCJTZW5kaW5nIG1l
c3NhZ2UgbnVtYmVyICVsdS5cbiIsIG1lc3NhZ2VzICsgMSk7CisJCQl9CisKKwkJCXNuZGluZm8u
c25kX2ZsYWdzIHw9IFNDVFBfRU9GOworCQkJaWYgKHVzcnNjdHBfc2VuZHYocHNvY2ssIGJ1ZmZl
ciwgbGVuZ3RoLCAoc3RydWN0IHNvY2thZGRyICopICZyZW1vdGVfYWRkciwgMSwKKwkJCSAgICAg
ICAgICAgICAgICAgICh2b2lkICopJnNuZGluZm8sIChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3NuZGluZm8pLCBTQ1RQX1NFTkRWX1NORElORk8sCisJCQkgICAgICAgICAgICAgICAgICAw
KSA8IDApIHsKKwkJCQlwZXJyb3IoInVzcnNjdHBfc2VuZHYiKTsKKwkJCQlleGl0KDEpOworCQkJ
fQorCQkJbWVzc2FnZXMrKzsKKwkJfQorCQlmcmVlIChidWZmZXIpOworCisJCWlmICh2ZXJib3Nl
KSB7CisJCQlwcmludGYoIkNsb3Npbmcgc29ja2V0LlxuIik7CisJCX0KKworCQl1c3JzY3RwX2Ns
b3NlKHBzb2NrKTsKKwkJZ2V0dGltZW9mZGF5KCZ0aW1lX25vdywgTlVMTCk7CisJCXRpbWVyc3Vi
KCZ0aW1lX25vdywgJnRpbWVfc3RhcnQsICZ0aW1lX2RpZmYpOworCQlzZWNvbmRzID0gdGltZV9k
aWZmLnR2X3NlYyArIChkb3VibGUpdGltZV9kaWZmLnR2X3VzZWMvMTAwMDAwMDsKKwkJcHJpbnRm
KCIlcyBvZiAlbGQgbWVzc2FnZXMgb2YgbGVuZ3RoICV1IHRvb2sgJWYgc2Vjb25kcy5cbiIsCisJ
CSAgICAgICAiU2VuZGluZyIsIG1lc3NhZ2VzLCBsZW5ndGgsIHNlY29uZHMpOworCQl0aHJvdWdo
cHV0ID0gKGRvdWJsZSltZXNzYWdlcyAqIChkb3VibGUpbGVuZ3RoIC8gc2Vjb25kczsKKwkJcHJp
bnRmKCJUaHJvdWdocHV0IHdhcyAlZiBCeXRlL3NlYy5cbiIsIHRocm91Z2hwdXQpOworCX0KKwor
CXdoaWxlICh1c3JzY3RwX2ZpbmlzaCgpICE9IDApIHsKKyNpZmRlZiBfV0lOMzIKKwkJU2xlZXAo
MTAwMCk7CisjZWxzZQorCQlzbGVlcCgxKTsKKyNlbmRpZgorCX0KKwlyZXR1cm4gMDsKK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzZXJfYXRvbWljLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5o
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmMzQ0MDU1ZGM1YmI4MTU3MmJlMjUyOGM1
NzU5N2IwYjgyZDFlYjliLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzZXJfYXRvbWljLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMTYgKzAs
MCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29w
eXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDEx
LTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVs
IFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICog
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQot
ICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9B
VE9NSUNfSF8KLSNkZWZpbmUgX1VTRVJfQVRPTUlDX0hfCi0KLS8qIF9fVXNlcnNwYWNlX18gdmVy
c2lvbiBvZiBzeXMvaTM4Ni9pbmNsdWRlL2F0b21pYy5oIGdvZXMgaGVyZSAqLwotCi0vKiBUT0RP
IEluIHRoZSBmdXR1cmUsIG1pZ2h0IHdhbnQgdG8gbm90IHVzZSBpMzg2IHNwZWNpZmljIGFzc2Vt
Ymx5LgotICogICAgVGhlIG9wdGlvbnMgaW5jbHVkZToKLSAqICAgICAgIC0gaW1wbGVtZW50IHRo
ZW0gZ2VuZXJpY2FsbHkgKGJ1dCBtYXliZSBub3QgdHJ1bHkgYXRvbWljPykgaW4gdXNlcnNwYWNl
Ci0gKiAgICAgICAtIGhhdmUgaWZkZWYncyBmb3IgX19Vc2Vyc3BhY2VfYXJjaF8gcGVyaGFwcyAo
T1MgaXNuJ3QgZW5vdWdoLi4uKQotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN5cy90eXBlcy5oPgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRl
ZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLSNkZWZpbmUgYXRvbWljX2FkZF9pbnQoYWRkciwgdmFsKSBJbnRlcmxvY2tl
ZEV4Y2hhbmdlQWRkKChMUExPTkcpYWRkciwgKExPTkcpdmFsKQotI2RlZmluZSBhdG9taWNfZmV0
Y2hhZGRfaW50KGFkZHIsIHZhbCkgSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFkZHIs
IChMT05HKXZhbCkKLSNkZWZpbmUgYXRvbWljX3N1YnRyYWN0X2ludChhZGRyLCB2YWwpICAgSW50
ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFkZHIsLSgoTE9ORyl2YWwpKQotI2RlZmluZSBh
dG9taWNfY21wc2V0X2ludChkc3QsIGV4cCwgc3JjKSBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5n
ZSgoTFBMT05HKWRzdCwgc3JjLCBleHApCi0jZGVmaW5lIFNDVFBfREVDUkVNRU5UX0FORF9DSEVD
S19SRUZDT1VOVChhZGRyKSAoSW50ZXJsb2NrZWRFeGNoYW5nZUFkZCgoTFBMT05HKWFkZHIsICgt
MUwpKSA9PSAxKQotI2Vsc2UKLSNpbmNsdWRlIDxsaWJrZXJuL09TQXRvbWljLmg+Ci0jZGVmaW5l
IGF0b21pY19hZGRfaW50KGFkZHIsIHZhbCkgT1NBdG9taWNBZGQzMkJhcnJpZXIodmFsLCAoaW50
MzJfdCAqKWFkZHIpCi0jZGVmaW5lIGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgdmFsKSBPU0F0
b21pY0FkZDMyQmFycmllcih2YWwsIChpbnQzMl90ICopYWRkcikKLSNkZWZpbmUgYXRvbWljX3N1
YnRyYWN0X2ludChhZGRyLCB2YWwpIE9TQXRvbWljQWRkMzJCYXJyaWVyKC12YWwsIChpbnQzMl90
ICopYWRkcikKLSNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgT1NBdG9t
aWNDb21wYXJlQW5kU3dhcEludEJhcnJpZXIoZXhwLCBzcmMsIChpbnQgKilkc3QpCi0jZGVmaW5l
IFNDVFBfREVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVChhZGRyKSAoYXRvbWljX2ZldGNoYWRk
X2ludChhZGRyLCAtMSkgPT0gMCkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQot
I2RlZmluZSBTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVChhZGRyLCB2YWwpIFwKLXsgXAotCWlu
dDMyX3QgbmV3dmFsOyBcCi0JbmV3dmFsID0gYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtdmFs
KTsgXAotCWlmIChuZXd2YWwgPCAwKSB7IFwKLQkJcGFuaWMoIkNvdW50ZXIgZ29lcyBuZWdhdGl2
ZSIpOyBcCi0JfSBcCi19Ci0jZWxzZQotI2RlZmluZSBTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVO
VChhZGRyLCB2YWwpIFwKLXsgXAotCWludDMyX3QgbmV3dmFsOyBcCi0JbmV3dmFsID0gYXRvbWlj
X2ZldGNoYWRkX2ludChhZGRyLCAtdmFsKTsgXAotCWlmIChuZXd2YWwgPCAwKSB7IFwKLQkJKmFk
ZHIgPSAwOyBcCi0JfSBcCi19Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dp
bmRvd3MpCi1zdGF0aWMgdm9pZCBhdG9taWNfaW5pdCgpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJl
IG5vdCB1c2luZyBhdG9taWNfbXR4ICovCi0jZWxzZQotLy8gV2ViS2l0IGNoYW5nZSwgdGhpcyBj
b25mbGljdHMgd2l0aCBhdG9taWNfaW5pdCBNYWNPUyBtYWNyby4KLS8vIHN0YXRpYyBpbmxpbmUg
dm9pZCBhdG9taWNfaW5pdCgpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9t
aWNfbXR4ICovCi0jZW5kaWYKLQotI2Vsc2UKLS8qIFVzaW5nIGdjYyBidWlsdC1pbiBmdW5jdGlv
bnMgZm9yIGF0b21pYyBtZW1vcnkgb3BlcmF0aW9ucwotICAgUmVmZXJlbmNlOiBodHRwOi8vZ2Nj
LmdudS5vcmcvb25saW5lZG9jcy9nY2MtNC4xLjAvZ2NjL0F0b21pYy1CdWlsdGlucy5odG1sCi0g
ICBSZXF1aXJlcyBnY2MgdmVyc2lvbiA0LjEuMAotICAgY29tcGlsZSB3aXRoIC1tYXJjaD1pNDg2
Ci0gKi8KLQotLypBdG9taWNhbGx5IGFkZCBWIHRvICpQLiovCi0jZGVmaW5lIGF0b21pY19hZGRf
aW50KFAsIFYpCSAodm9pZCkgX19zeW5jX2ZldGNoX2FuZF9hZGQoUCwgVikKLQotLypBdG9taWNh
bGx5IHN1YnRyYWNlIFYgZnJvbSAqUC4qLwotI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KFAs
IFYpICh2b2lkKSBfX3N5bmNfZmV0Y2hfYW5kX3N1YihQLCBWKQotCi0vKgotICogQXRvbWljYWxs
eSBhZGQgdGhlIHZhbHVlIG9mIHYgdG8gdGhlIGludGVnZXIgcG9pbnRlZCB0byBieSBwIGFuZCBy
ZXR1cm4KLSAqIHRoZSBwcmV2aW91cyB2YWx1ZSBvZiAqcC4KLSAqLwotI2RlZmluZSBhdG9taWNf
ZmV0Y2hhZGRfaW50KHAsIHYpIF9fc3luY19mZXRjaF9hbmRfYWRkKHAsIHYpCi0KLS8qIEZvbGxv
d2luZyBleHBsYW5hdGlvbiBmcm9tIHNyYy9zeXMvaTM4Ni9pbmNsdWRlL2F0b21pYy5oLAotICog
Zm9yIGF0b21pYyBjb21wYXJlIGFuZCBzZXQKLSAqCi0gKiBpZiAoKmRzdCA9PSBleHApICpkc3Qg
PSBzcmMgKGFsbCAzMiBiaXQgd29yZHMpCi0gKgotICogUmV0dXJucyAwIG9uIGZhaWx1cmUsIG5v
bi16ZXJvIG9uIHN1Y2Nlc3MKLSAqLwotCi0jZGVmaW5lIGF0b21pY19jbXBzZXRfaW50KGRzdCwg
ZXhwLCBzcmMpIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXAoZHN0LCBleHAsIHNyYykKLQot
I2RlZmluZSBTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoYWRkcikgKGF0b21pY19m
ZXRjaGFkZF9pbnQoYWRkciwgLTEpID09IDEpCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQotI2Rl
ZmluZSBTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVChhZGRyLCB2YWwpIFwKLXsgXAotCWludDMy
X3Qgb2xkdmFsOyBcCi0Jb2xkdmFsID0gYXRvbWljX2ZldGNoYWRkX2ludChhZGRyLCAtdmFsKTsg
XAotCWlmIChvbGR2YWwgPCB2YWwpIHsgXAotCQlwYW5pYygiQ291bnRlciBnb2VzIG5lZ2F0aXZl
Iik7IFwKLQl9IFwKLX0KLSNlbHNlCi0jZGVmaW5lIFNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5U
KGFkZHIsIHZhbCkgXAoteyBcCi0JaW50MzJfdCBvbGR2YWw7IFwKLQlvbGR2YWwgPSBhdG9taWNf
ZmV0Y2hhZGRfaW50KGFkZHIsIC12YWwpOyBcCi0JaWYgKG9sZHZhbCA8IHZhbCkgeyBcCi0JCSph
ZGRyID0gMDsgXAotCX0gXAotfQotI2VuZGlmCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2lu
aXQoKSB7fSAvKiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwotI2Vu
ZGlmCi0KLSNpZiAwIC8qIHVzaW5nIGxpYmF0b21pY19vcHMgKi8KLSNpbmNsdWRlICJ1c2VyX2lu
Y2x1ZGUvYXRvbWljX29wcy5oIgotCi0vKkF0b21pY2FsbHkgYWRkIGluY3IgdG8gKlAsIGFuZCBy
ZXR1cm4gdGhlIG9yaWdpbmFsIHZhbHVlIG9mICpQLiovCi0jZGVmaW5lIGF0b21pY19hZGRfaW50
KFAsIFYpCSBBT19mZXRjaF9hbmRfYWRkKChBT190KilQLCBWKQotCi0jZGVmaW5lIGF0b21pY19z
dWJ0cmFjdF9pbnQoUCwgVikgQU9fZmV0Y2hfYW5kX2FkZCgoQU9fdCopUCwgLShWKSkKLQotLyoK
LSAqIEF0b21pY2FsbHkgYWRkIHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQg
dG8gYnkgcCBhbmQgcmV0dXJuCi0gKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCi0gKi8KLSNk
ZWZpbmUgYXRvbWljX2ZldGNoYWRkX2ludChwLCB2KSBBT19mZXRjaF9hbmRfYWRkKChBT190Kilw
LCB2KQotCi0vKiBBdG9taWNhbGx5IGNvbXBhcmUgKmFkZHIgdG8gb2xkX3ZhbCwgYW5kIHJlcGxh
Y2UgKmFkZHIgYnkgbmV3X3ZhbAotICAgaWYgdGhlIGZpcnN0IGNvbXBhcmlzb24gc3VjY2VlZHMu
ICBSZXR1cm5zIG5vbnplcm8gaWYgdGhlIGNvbXBhcmlzb24KLSAgIHN1Y2NlZWRlZCBhbmQgKmFk
ZHIgd2FzIHVwZGF0ZWQuCi0qLwotLyogRm9sbG93aW5nIEV4cGxhbmF0aW9uIGZyb20gc3JjL3N5
cy9pMzg2L2luY2x1ZGUvYXRvbWljLmgsIHdoaWNoCi0gICBtYXRjaGVzIHRoYXQgb2YgQU9fY29t
cGFyZV9hbmRfc3dhcCBhYm92ZS4KLSAqIEF0b21pYyBjb21wYXJlIGFuZCBzZXQsIHVzZWQgYnkg
dGhlIG11dGV4IGZ1bmN0aW9ucwotICoKLSAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAo
YWxsIDMyIGJpdCB3b3JkcykKLSAqCi0gKiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8g
b24gc3VjY2VzcwotICovCi0KLSNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNy
YykgQU9fY29tcGFyZV9hbmRfc3dhcCgoQU9fdCopZHN0LCBleHAsIHNyYykKLQotc3RhdGljIGlu
bGluZSB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5n
IGF0b21pY19tdHggKi8KLSNlbmRpZiAvKiBjbG9zaW5nICNpZiBmb3IgbGliYXRvbWljICovCi0K
LSNpZiAwIC8qIHVzaW5nIGF0b21pY19tdHggKi8KLQotI2luY2x1ZGUgPHB0aHJlYWQuaD4KLQot
ZXh0ZXJuIHVzZXJsYW5kX211dGV4X3QgYXRvbWljX210eDsKLQotI2lmIGRlZmluZWQgKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7Ci0J
SW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7Ci19Ci1zdGF0aWMgaW5saW5l
IHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7Ci0JRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZhdG9taWNf
bXR4KTsKLX0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfbG9jaygpIHsKLQlFbnRlckNyaXRp
Y2FsU2VjdGlvbigmYXRvbWljX210eCk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3Vu
bG9jaygpIHsKLQlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7Ci19Ci0jZWxzZQot
c3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkgewotCXB0aHJlYWRfbXV0ZXhhdHRyX3Qg
bXV0ZXhfYXR0cjsKLQotCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOwotI2lm
ZGVmIElOVkFSSUFOVFMKLQlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleF9hdHRyLCBQ
VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spOwotI2VuZGlmCi0JcHRocmVhZF9tdXRleF9pbml0KCZh
Y2NlcHRfbXR4LCAmbXV0ZXhfYXR0cik7Ci0JcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0
ZXhfYXR0cik7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7Ci0JKHZv
aWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZhdG9taWNfbXR4KTsKLX0KLXN0YXRpYyBpbmxpbmUg
dm9pZCBhdG9taWNfbG9jaygpIHsKLSNpZmRlZiBJTlZBUklBTlRTCi0JS0FTU0VSVChwdGhyZWFk
X211dGV4X2xvY2soJmF0b21pY19tdHgpID09IDAsICgiYXRvbWljX2xvY2s6IGF0b21pY19tdHgg
YWxyZWFkeSBsb2NrZWQiKSkKLSNlbHNlCi0JKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZhdG9t
aWNfbXR4KTsKLSNlbmRpZgotfQotc3RhdGljIGlubGluZSB2b2lkIGF0b21pY191bmxvY2soKSB7
Ci0jaWZkZWYgSU5WQVJJQU5UUwotCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJmF0b21p
Y19tdHgpID09IDAsICgiYXRvbWljX3VubG9jazogYXRvbWljX210eCBub3QgbG9ja2VkIikpCi0j
ZWxzZQotCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdG9taWNfbXR4KTsKLSNlbmRpZgot
fQotI2VuZGlmCi0vKgotICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxvY2sgcHJlZml4ZXMg
c28gdGhhdCB0aGUgYmluYXJpZXMgd2lsbCBydW4KLSAqIG9uIGJvdGggU01QIGFuZCAhU01QIHN5
c3RlbXMuCi0gKi8KLQotI2RlZmluZQlNUExPQ0tFRAkibG9jayA7ICIKLQotLyoKLSAqIEF0b21p
Y2FsbHkgYWRkIHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBh
bmQgcmV0dXJuCi0gKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCi0gKi8KLXN0YXRpYyBfX2lu
bGluZSB1X2ludAotYXRvbWljX2ZldGNoYWRkX2ludCh2b2xhdGlsZSB2b2lkICpuLCB1X2ludCB2
KQotewotCWludCAqcCA9IChpbnQgKikgbjsKLQlhdG9taWNfbG9jaygpOwotCV9fYXNtIF9fdm9s
YXRpbGUoCi0JIgkiIE1QTE9DS0VEICIJCSIKLQkiCXhhZGRsCSUwLCAlMSA7CSIKLQkiIyBhdG9t
aWNfZmV0Y2hhZGRfaW50IgotCTogIityIiAodiksCQkJLyogMCAocmVzdWx0KSAqLwotCSAgIj1t
IiAoKnApCQkJLyogMSAqLwotCTogIm0iICgqcCkpOwkJCS8qIDIgKi8KLQlhdG9taWNfdW5sb2Nr
KCk7Ci0KLQlyZXR1cm4gKHYpOwotfQotCi0KLSNpZmRlZiBDUFVfRElTQUJMRV9DTVBYQ0hHCi0K
LXN0YXRpYyBfX2lubGluZSBpbnQKLWF0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpk
c3QsIHVfaW50IGV4cCwgdV9pbnQgc3JjKQotewotCXVfY2hhciByZXM7Ci0KLQlhdG9taWNfbG9j
aygpOwotCV9fYXNtIF9fdm9sYXRpbGUoCi0JIglwdXNoZmwgOwkJIgotCSIJY2xpIDsJCQkiCi0J
IgljbXBsCSUzLCU0IDsJCSIKLQkiCWpuZQkxZiA7CQkiCi0JIgltb3ZsCSUyLCUxIDsJCSIKLQki
MToJCQkJIgotCSIgICAgICAgc2V0ZQklMCA7CQkiCi0JIglwb3BmbCA7CQkJIgotCSIjIGF0b21p
Y19jbXBzZXRfaW50IgotCTogIj1xIiAocmVzKSwJCQkvKiAwICovCi0JICAiPW0iICgqZHN0KQkJ
CS8qIDEgKi8KLQk6ICJyIiAoc3JjKSwJCQkvKiAyICovCi0JICAiciIgKGV4cCksCQkJLyogMyAq
LwotCSAgIm0iICgqZHN0KQkJCS8qIDQgKi8KLQk6ICJtZW1vcnkiKTsKLQlhdG9taWNfdW5sb2Nr
KCk7Ci0KLQlyZXR1cm4gKHJlcyk7Ci19Ci0KLSNlbHNlIC8qICFDUFVfRElTQUJMRV9DTVBYQ0hH
ICovCi0KLXN0YXRpYyBfX2lubGluZSBpbnQKLWF0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVf
aW50ICpkc3QsIHVfaW50IGV4cCwgdV9pbnQgc3JjKQotewotCWF0b21pY19sb2NrKCk7Ci0JdV9j
aGFyIHJlczsKLQotCV9fYXNtIF9fdm9sYXRpbGUoCi0JIgkiIE1QTE9DS0VEICIJCSIKLQkiCWNt
cHhjaGdsICUyLCUxIDsJIgotCSIJc2V0ZQklMCA7CQkiCi0JIjE6CQkJCSIKLQkiIyBhdG9taWNf
Y21wc2V0X2ludCIKLQk6ICI9YSIgKHJlcyksCQkJLyogMCAqLwotCSAgIj1tIiAoKmRzdCkJCQkv
KiAxICovCi0JOiAiciIgKHNyYyksCQkJLyogMiAqLwotCSAgImEiIChleHApLAkJCS8qIDMgKi8K
LQkgICJtIiAoKmRzdCkJCQkvKiA0ICovCi0JOiAibWVtb3J5Iik7Ci0JYXRvbWljX3VubG9jaygp
OwotCi0JcmV0dXJuIChyZXMpOwotfQotCi0jZW5kaWYgLyogQ1BVX0RJU0FCTEVfQ01QWENIRyAq
LwotCi0jZGVmaW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSBkbyB7ICAgXAotCQlhdG9taWNfbG9j
aygpOyAgICAgICAgICBcCi0JCSgqKHVfaW50ICopKFApICs9IChWKSk7IFwKLQkJYXRvbWljX3Vu
bG9jaygpOyAgICAgICAgXAotfSB3aGlsZSgwKQotI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50
KFAsIFYpICBkbyB7ICAgXAotCQlhdG9taWNfbG9jaygpOyAgICAgICAgICAgIFwKLQkJKCoodV9p
bnQgKikoUCkgLT0gKFYpKTsgICBcCi0JCWF0b21pY191bmxvY2soKTsgICAgICAgICAgXAotfSB3
aGlsZSgwKQotCi0jZW5kaWYKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9lbnZp
cm9ubWVudC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9lbnZpcm9ubWVudC5jCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2ODMwYTIzNjhiODdiNjY0MTdiZDBkMjZlNGQ3Yjc5MmE5Njk1MjNmLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
ZXJfZW52aXJvbm1lbnQuYworKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qLQotICog
Q29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYKLSAqIENvcHlyaWdodCAoYykgMjAw
OS0yMDEwIEh1bWFpcmEgS2FtYWwKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1
ZW5nZWxlcgotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KLSAqCi0g
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAq
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0g
KiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQot
ICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIF9fVXNlcnNwYWNlX18gKi8KLQotI2luY2x1
ZGUgPHN0ZGxpYi5oPgotI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2lu
Y2x1ZGUgPHN0ZGludC5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaD4K
LSNlbmRpZgotI2luY2x1ZGUgPHVzZXJfZW52aXJvbm1lbnQuaD4KLSNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KLS8qICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4gZGVmaW5lcyBNSU4gKi8KLSNpZiAhZGVm
aW5lZChNSU4pCi0jZGVmaW5lIE1JTihhcmcxLGFyZzIpICgoYXJnMSkgPCAoYXJnMikgPyAoYXJn
MSkgOiAoYXJnMikpCi0jZW5kaWYKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotI2RlZmluZSB1SFog
MTAwMAotCi0vKiBTZWUgdXNlcl9pbmNsdWRlL3VzZXJfZW52aXJvbm1lbnQuaCBmb3IgY29tbWVu
dHMgYWJvdXQgdGhlc2UgdmFyaWFibGVzICovCi1pbnQgbWF4c29ja2V0cyA9IDI1NjAwOwotaW50
IGh6ID0gdUhaOwotaW50IGlwX2RlZnR0bCA9IDY0OwotaW50IGlwcG9ydF9maXJzdGF1dG8gPSA0
OTE1MiwgaXBwb3J0X2xhc3RhdXRvID0gNjU1MzU7Ci1pbnQgbm1iY2x1c3RlcnMgPSA2NTUzNjsK
LQotLyogU291cmNlIGlwX291dHB1dC5jLiBleHRlcm4nZCBpbiBpcF92YXIuaCAqLwotdV9zaG9y
dCBpcF9pZCA9IDA7IC8qX19Vc2Vyc3BhY2VfXyBUT0RPIFNob3VsZCBpdCBiZSBpbml0aWFsaXpl
ZCB0byB6ZXJvPyAqLwotCi0vKiB1c2VkIGluIHVzZXJfaW5jbHVkZS91c2VyX2F0b21pYy5oIGlu
IG9yZGVyIHRvIG1ha2UgdGhlIG9wZXJhdGlvbnMKLSAqIGRlZmluZWQgdGhlcmUgdHJ1bHkgYXRv
bWljCi0gKi8KLXVzZXJsYW5kX211dGV4X3QgYXRvbWljX210eDsKLQotLyogU291cmNlOiAvdXNy
L3NyYy9zeXMvZGV2L3JhbmRvbS9oYXJ2ZXN0LmMgKi8KLXN0YXRpYyBpbnQgcmVhZF9yYW5kb21f
cGhvbnkodm9pZCAqLCBpbnQpOwotCi1zdGF0aWMgaW50ICgqcmVhZF9mdW5jKSh2b2lkICosIGlu
dCkgPSByZWFkX3JhbmRvbV9waG9ueTsKLQotLyogVXNlcmxhbmQtdmlzaWJsZSB2ZXJzaW9uIG9m
IHJlYWRfcmFuZG9tICovCi1pbnQKLXJlYWRfcmFuZG9tKHZvaWQgKmJ1ZiwgaW50IGNvdW50KQot
ewotCXJldHVybiAoKCpyZWFkX2Z1bmMpKGJ1ZiwgY291bnQpKTsKLX0KLQotLyogSWYgdGhlIGVu
dHJvcHkgZGV2aWNlIGlzIG5vdCBsb2FkZWQsIG1ha2UgYSB0b2tlbiBlZmZvcnQgdG8KLSAqIHBy
b3ZpZGUgX3NvbWVfIGtpbmQgb2YgcmFuZG9tbmVzcy4gVGhpcyBzaG91bGQgb25seSBiZSB1c2Vk
Ci0gKiBpbnNpZGUgb3RoZXIgUk5HJ3MsIGxpa2UgYXJjNHJhbmRvbSg5KS4KLSAqLwotc3RhdGlj
IGludAotcmVhZF9yYW5kb21fcGhvbnkodm9pZCAqYnVmLCBpbnQgY291bnQpCi17Ci0JdWludDMy
X3QgcmFuZHZhbDsKLQlpbnQgc2l6ZSwgaTsKLQotCS8qIHNyYW5kb20oKSBpcyBjYWxsZWQgaW4g
a2Vybi9pbml0X21haW4uYzpwcm9jMF9wb3N0KCkgKi8KLQotCS8qIEZpbGwgYnVmW10gd2l0aCBy
YW5kb20oOSkgb3V0cHV0ICovCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKz0gKGludClzaXpl
b2YodWludDMyX3QpKSB7Ci0JCXJhbmR2YWwgPSByYW5kb20oKTsKLQkJc2l6ZSA9IE1JTihjb3Vu
dCAtIGksIChpbnQpc2l6ZW9mKHVpbnQzMl90KSk7Ci0JCW1lbWNweSgmKChjaGFyICopYnVmKVtp
XSwgJnJhbmR2YWwsIChzaXplX3Qpc2l6ZSk7Ci0JfQotCi0JcmV0dXJuIChjb3VudCk7Ci19Ci0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaCBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJf
ZW52aXJvbm1lbnQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzA2ZmY2YjU1YjQ2
M2M1MGI2ZGQ5MGM1MjAzOTc1M2Y0ZTc2MjJjMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBC
cmFkIFBlbm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICog
Q29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMp
IDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU
SE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2lmbmRlZiBfVVNFUl9FTlZJUk9OTUVOVF9IXwotI2RlZmluZSBfVVNFUl9FTlZJUk9OTUVO
VF9IXwotLyogX19Vc2Vyc3BhY2VfXyAqLwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCi0jaWZk
ZWYgX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRAotI2lmbmRlZiBfU1lTX01VVEVYX0hfCi0jaW5jbHVk
ZSA8c3lzL211dGV4Lmg+Ci0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNl
X29zX1dpbmRvd3MpCi0jaW5jbHVkZSAibmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oIgotI2Vu
ZGlmCi0KLS8qIG1heHNvY2tldHMgaXMgdXNlZCBpbiBTQ1RQX1pPTkVfSU5JVCBjYWxsLiBJdCBy
ZWZlcnMgdG8KLSAqIGtlcm4uaXBjLm1heHNvY2tldHMga2VybmVsIGVudmlyb25tZW50IHZhcmlh
YmxlLgotICovCi1leHRlcm4gaW50IG1heHNvY2tldHM7Ci0KLS8qIGludCBoejsgaXMgZGVjbGFy
ZWQgaW4gc3lzL2tlcm4vc3Vicl9wYXJhbS5jIGFuZCByZWZlcnMgdG8ga2VybmVsIHRpbWVyIGZy
ZXF1ZW5jeS4KLSAqIFNlZSBodHRwOi8vaXZvcmFzLnNoYXJhbmV0Lm9yZy9mcmVlYnNkL3Ztd2Fy
ZS5odG1sIGZvciBhZGRpdGlvbmFsIGluZm8gYWJvdXQga2Vybi5oegotICogaHogaXMgaW5pdGlh
bGl6ZWQgaW4gdm9pZCBpbml0X3BhcmFtMSh2b2lkKSBpbiB0aGF0IGZpbGUuCi0gKi8KLWV4dGVy
biBpbnQgaHo7Ci0KLQotLyogVGhlIGZvbGxvd2luZyB0d28gaW50cyBkZWZpbmUgYSByYW5nZSBv
ZiBhdmFpbGFibGUgZXBoZXJtYWwgcG9ydHMuICovCi1leHRlcm4gaW50IGlwcG9ydF9maXJzdGF1
dG8sIGlwcG9ydF9sYXN0YXV0bzsKLQotLyogbm1iY2x1c3RlcnMgaXMgdXNlZCBpbiBzY3RwX3Vz
cnJlcS5jIChlLmcuLCBzY3RwX2luaXQpLiBJbiB0aGUgRnJlZUJTRCBrZXJuZWwsCi0gKiAgdGhp
cyBpcyAxMDI0ICsgbWF4dXNlcnMgKiA2NC4KLSAqLwotZXh0ZXJuIGludCBubWJjbHVzdGVyczsK
LQotI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBtaW4oYSxi
KSAoKGEpPihiKT8oYik6KGEpKQotI2RlZmluZSBtYXgoYSxiKSAoKGEpPihiKT8oYSk6KGIpKQot
I2VuZGlmCi0KLWV4dGVybiBpbnQgcmVhZF9yYW5kb20odm9pZCAqYnVmLCBpbnQgY291bnQpOwot
Ci0vKiBlcnJubydzIG1heSBkaWZmZXIgcGVyIE9TLiAgZXJybm8uaCBub3cgaW5jbHVkZWQgaW4g
c2N0cF9vc191c2Vyc3BhY2UuaCAqLwotLyogU291cmNlOiAvdXNyL3NyYy9zeXMvc3lzL2Vycm5v
LmggKi8KLS8qICNkZWZpbmUJRU5PU1BDCQkyOCAqLwkJLyogTm8gc3BhY2UgbGVmdCBvbiBkZXZp
Y2UgKi8KLS8qICNkZWZpbmUJRU5PQlVGUwkJNTUgKi8JCS8qIE5vIGJ1ZmZlciBzcGFjZSBhdmFp
bGFibGUgKi8KLS8qICNkZWZpbmUJRU5PTUVNCQkxMiAqLwkJLyogQ2Fubm90IGFsbG9jYXRlIG1l
bW9yeSAqLwotLyogI2RlZmluZQlFQUNDRVMJCTEzICovCQkvKiBQZXJtaXNzaW9uIGRlbmllZCAq
LwotLyogI2RlZmluZQlFRkFVTFQJCTE0ICovCQkvKiBCYWQgYWRkcmVzcyAqLwotLyogI2RlZmlu
ZQlFSE9TVERPV04JNjQgKi8JCS8qIEhvc3QgaXMgZG93biAqLwotLyogI2RlZmluZQlFSE9TVFVO
UkVBQ0gJNjUgKi8JCS8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KLQotLyogU291cmNlIGlwX291dHB1
dC5jLiBleHRlcm4nZCBpbiBpcF92YXIuaCAqLwotZXh0ZXJuIHVfc2hvcnQgaXBfaWQ7Ci0KLSNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2RlZmluZSBJUFY2X1ZFUlNJT04gICAg
ICAgICAgICAweDYwCi0jZW5kaWYKLQotI2lmIGRlZmluZWQoSU5WQVJJQU5UUykKLSNpbmNsdWRl
IDxzdGRsaWIuaD4KLQotc3RhdGljIGlubGluZSB2b2lkCi10ZXJtaW5hdGVfbm9uX2dyYWNlZnVs
KHZvaWQpIHsKLQlhYm9ydCgpOwotfQotCi0jZGVmaW5lIHBhbmljKC4uLikgICAgICAgICAgICAg
ICAgICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCVNDVFBf
UFJJTlRGKF9fVkFfQVJHU19fKTtcCi0JCVNDVFBfUFJJTlRGKCJcbiIpOyAgICAgICBcCi0JCXRl
cm1pbmF0ZV9ub25fZ3JhY2VmdWwoKTtcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIEtBU1NFUlQo
Y29uZCwgYXJncykgICAgICAgICAgXAotCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgXAot
CQlpZiAoIShjb25kKSkgeyAgICAgICBcCi0JCQlwYW5pYyBhcmdzIDtcCi0JCX0gICAgICAgICAg
ICAgICAgICAgIFwKLQl9IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgS0FTU0VSVChjb25kLCBh
cmdzKQotI2VuZGlmCi0KLS8qIG5lY2Vzc2FyeSBmb3Igc2N0cF9wY2IuYyAqLwotZXh0ZXJuIGlu
dCBpcF9kZWZ0dGw7Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfaW5wY2IuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzZXJfaW5wY2IuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzU1
N2NkMGExM2MyZWE0NTdkOGM5ZWRmMDQ1ZmNjOTNmOTgxOTEzZi4uMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2lucGNiLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwzNzggKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5
ODYsIDE5OTAsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm
b3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUg
bmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
LSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVH
RU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFH
RS4KLSAqCi0gKglAKCMpaW5fcGNiLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MwotICogJEZyZWVC
U0Q6IHNyYy9zeXMvbmV0aW5ldC9pbl9wY2IuaCx2IDEuMTAwLjIuMSAyMDA3LzEyLzA3IDA1OjQ2
OjA4IGttYWN5IEV4cCAkCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9JTlBDQl9IXwotI2RlZmluZSBf
VVNFUl9JTlBDQl9IXwotCi0jaW5jbHVkZSA8dXNlcl9yb3V0ZS5oPiAvKiB3YXMgPG5ldC9yb3V0
ZS5oPiAqLwotCi0jZGVmaW5lCWluNnBjYgkJaW5wY2IJLyogZm9yIEtBTUUgc3JjIHN5bmMgb3Zl
ciBCU0QqJ3MgKi8KLSNkZWZpbmUJaW42cF9zcAkJaW5wX3NwCS8qIGZvciBLQU1FIHNyYyBzeW5j
IG92ZXIgQlNEKidzICovCi1zdHJ1Y3QgaW5wY2Jwb2xpY3k7Ci0KLS8qCi0gKiBTdHJ1Y3QgaW5w
Y2IgaXMgdGhlIG9tbW9uIHN0cnVjdHVyZSBwY2IgZm9yIHRoZSBJbnRlcm5ldCBQcm90b2NvbAot
ICogaW1wbGVtZW50YXRpb24uCi0gKgotICogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIGZvcmVpZ24g
aG9zdCB0YWJsZSBlbnRyaWVzLCBsb2NhbCBhbmQgZm9yZWlnbiBzb2NrZXQKLSAqIG51bWJlcnMs
IGFuZCBwb2ludGVycyB1cCAodG8gYSBzb2NrZXQgc3RydWN0dXJlKSBhbmQgZG93biAodG8gYQot
ICogcHJvdG9jb2wtc3BlY2lmaWMgY29udHJvbCBibG9jaykgYXJlIHN0b3JlZCBoZXJlLgotICov
Ci1MSVNUX0hFQUQoaW5wY2JoZWFkLCBpbnBjYik7Ci1MSVNUX0hFQUQoaW5wY2Jwb3J0aGVhZCwg
aW5wY2Jwb3J0KTsKLQotLyoKLSAqIFBDQiB3aXRoIEFGX0lORVQ2IG51bGwgYmluZCdlZCBsYWRk
ciBjYW4gcmVjZWl2ZSBBRl9JTkVUIGlucHV0IHBhY2tldC4KLSAqIFNvLCBBRl9JTkVUNiBudWxs
IGxhZGRyIGlzIGFsc28gdXNlZCBhcyBBRl9JTkVUIG51bGwgbGFkZHIsIGJ5IHV0aWxpemluZwot
ICogdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUuCi0gKi8KLXN0cnVjdCBpbl9hZGRyXzRpbjYgewot
CXVfaW50MzJfdAlpYTQ2X3BhZDMyWzNdOwotCXN0cnVjdAlpbl9hZGRyCWlhNDZfYWRkcjQ7Ci19
OwotCi0vKgotICogTk9URTogaXB2NiBhZGRycyBzaG91bGQgYmUgNjQtYml0IGFsaWduZWQsIHBl
ciBSRkMgMjU1My4gIGluX2Nvbm5pbmZvIGhhcwotICogc29tZSBleHRyYSBwYWRkaW5nIHRvIGFj
Y29tcGxpc2ggdGhpcy4KLSAqLwotc3RydWN0IGluX2VuZHBvaW50cyB7Ci0JdV9pbnQxNl90CWll
X2Zwb3J0OwkJLyogZm9yZWlnbiBwb3J0ICovCi0JdV9pbnQxNl90CWllX2xwb3J0OwkJLyogbG9j
YWwgcG9ydCAqLwotCS8qIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LCBsb2NhbCBhbmQgZm9yZWln
biBhZGRyICovCi0JdW5pb24gewotCQkvKiBmb3JlaWduIGhvc3QgdGFibGUgZW50cnkgKi8KLQkJ
c3RydWN0CWluX2FkZHJfNGluNiBpZTQ2X2ZvcmVpZ247Ci0JCXN0cnVjdAlpbjZfYWRkciBpZTZf
Zm9yZWlnbjsKLQl9IGllX2RlcGVuZGZhZGRyOwotCXVuaW9uIHsKLQkJLyogbG9jYWwgaG9zdCB0
YWJsZSBlbnRyeSAqLwotCQlzdHJ1Y3QJaW5fYWRkcl80aW42IGllNDZfbG9jYWw7Ci0JCXN0cnVj
dAlpbjZfYWRkciBpZTZfbG9jYWw7Ci0JfSBpZV9kZXBlbmRsYWRkcjsKLSNkZWZpbmUJaWVfZmFk
ZHIJaWVfZGVwZW5kZmFkZHIuaWU0Nl9mb3JlaWduLmlhNDZfYWRkcjQKLSNkZWZpbmUJaWVfbGFk
ZHIJaWVfZGVwZW5kbGFkZHIuaWU0Nl9sb2NhbC5pYTQ2X2FkZHI0Ci0jZGVmaW5lCWllNl9mYWRk
cglpZV9kZXBlbmRmYWRkci5pZTZfZm9yZWlnbgotI2RlZmluZQlpZTZfbGFkZHIJaWVfZGVwZW5k
bGFkZHIuaWU2X2xvY2FsCi19OwotCi0vKgotICogWFhYIFRoZSBkZWZpbmVzIGZvciBpbmNfKiBh
cmUgaGFja3MgYW5kIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRpcmVjdAotICogcmVmZXJlbmNlcy4K
LSAqLwotc3RydWN0IGluX2Nvbm5pbmZvIHsKLQl1X2ludDhfdAlpbmNfZmxhZ3M7Ci0JdV9pbnQ4
X3QJaW5jX2xlbjsKLQl1X2ludDE2X3QJaW5jX3BhZDsJLyogWFhYIGFsaWdubWVudCBmb3IgaW5f
ZW5kcG9pbnRzICovCi0JLyogcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQgKi8KLQlzdHJ1Y3QJaW5f
ZW5kcG9pbnRzIGluY19pZTsKLX07Ci0jZGVmaW5lIGluY19pc2lwdjYJaW5jX2ZsYWdzCS8qIHRl
bXAgY29tcGF0YWJpbGl0eSAqLwotI2RlZmluZQlpbmNfZnBvcnQJaW5jX2llLmllX2Zwb3J0Ci0j
ZGVmaW5lCWluY19scG9ydAlpbmNfaWUuaWVfbHBvcnQKLSNkZWZpbmUJaW5jX2ZhZGRyCWluY19p
ZS5pZV9mYWRkcgotI2RlZmluZQlpbmNfbGFkZHIJaW5jX2llLmllX2xhZGRyCi0jZGVmaW5lCWlu
YzZfZmFkZHIJaW5jX2llLmllNl9mYWRkcgotI2RlZmluZQlpbmM2X2xhZGRyCWluY19pZS5pZTZf
bGFkZHIKLQotc3RydWN0CWljbXA2X2ZpbHRlcjsKLQotc3RydWN0IGlucGNiIHsKLQlMSVNUX0VO
VFJZKGlucGNiKSBpbnBfaGFzaDsJLyogaGFzaCBsaXN0ICovCi0JTElTVF9FTlRSWShpbnBjYikg
aW5wX2xpc3Q7CS8qIGxpc3QgZm9yIGFsbCBQQ0JzIG9mIHRoaXMgcHJvdG8gKi8KLQl2b2lkCSpp
bnBfcHBjYjsJCS8qIHBvaW50ZXIgdG8gcGVyLXByb3RvY29sIHBjYiAqLwotCXN0cnVjdAlpbnBj
YmluZm8gKmlucF9wY2JpbmZvOwkvKiBQQ0IgbGlzdCBpbmZvICovCi0Jc3RydWN0CXNvY2tldCAq
aW5wX3NvY2tldDsJLyogYmFjayBwb2ludGVyIHRvIHNvY2tldCAqLwotCi0JdV9pbnQzMl90CWlu
cF9mbG93OwotCWludAlpbnBfZmxhZ3M7CQkvKiBnZW5lcmljIElQL2RhdGFncmFtIGZsYWdzICov
Ci0KLQl1X2NoYXIJaW5wX3ZmbGFnOwkJLyogSVAgdmVyc2lvbiBmbGFnICh2NC92NikgKi8KLSNk
ZWZpbmUJSU5QX0lQVjQJMHgxCi0jZGVmaW5lCUlOUF9JUFY2CTB4MgotI2RlZmluZQlJTlBfSVBW
NlBST1RPCTB4NAkJLyogb3BlbmVkIHVuZGVyIElQdjYgcHJvdG9jb2wgKi8KLSNkZWZpbmUJSU5Q
X1RJTUVXQUlUCTB4OAkJLyogLi4gcHJvYmFibHkgZG9lc24ndCBnbyBoZXJlICovCi0jZGVmaW5l
CUlOUF9PTkVTQkNBU1QJMHgxMAkJLyogc2VuZCBhbGwtb25lcyBicm9hZGNhc3QgKi8KLSNkZWZp
bmUJSU5QX0RST1BQRUQJMHgyMAkJLyogcHJvdG9jb2wgZHJvcCBmbGFnICovCi0jZGVmaW5lCUlO
UF9TT0NLUkVGCTB4NDAJCS8qIHN0cm9uZyBzb2NrZXQgcmVmZXJlbmNlICovCi0jZGVmaW5lIElO
UF9DT05OICAgICAgICAweDgwCi0JdV9jaGFyCWlucF9pcF90dGw7CQkvKiB0aW1lIHRvIGxpdmUg
cHJvdG8gKi8KLQl1X2NoYXIJaW5wX2lwX3A7CQkvKiBwcm90b2NvbCBwcm90byAqLwotCXVfY2hh
cglpbnBfaXBfbWludHRsOwkJLyogbWluaW11bSBUVEwgb3IgZHJvcCAqLwotCXVpbnQzMl90IGlu
cF9pc3BhcmUxOwkJLyogY29ubmVjdGlvbiBpZCAvIHF1ZXVlIGlkICovCi0Jdm9pZAkqaW5wX3Bz
cGFyZVsyXTsJCS8qIHJ0ZW50cnkgLyBnZW5lcmFsIHVzZSAqLwotCi0JLyogTG9jYWwgYW5kIGZv
cmVpZ24gcG9ydHMsIGxvY2FsIGFuZCBmb3JlaWduIGFkZHIuICovCi0Jc3RydWN0CWluX2Nvbm5p
bmZvIGlucF9pbmM7Ci0KLQkJCQkJLyogbGlzdCBmb3IgdGhpcyBQQ0IncyBsb2NhbCBwb3J0ICov
Ci0Jc3RydWN0CWxhYmVsICppbnBfbGFiZWw7CS8qIE1BQyBsYWJlbCAqLwotCXN0cnVjdAlpbnBj
YnBvbGljeSAqaW5wX3NwOyAgICAvKiBmb3IgSVBTRUMgKi8KLQotCS8qIFByb3RvY29sLWRlcGVu
ZGVudCBwYXJ0OyBvcHRpb25zLiAqLwotCXN0cnVjdCB7Ci0JCXVfY2hhcglpbnA0X2lwX3RvczsJ
CS8qIHR5cGUgb2Ygc2VydmljZSBwcm90byAqLwotCQlzdHJ1Y3QJbWJ1ZiAqaW5wNF9vcHRpb25z
OwkvKiBJUCBvcHRpb25zICovCi0JCXN0cnVjdAlpcF9tb3B0aW9ucyAqaW5wNF9tb3B0aW9uczsg
LyogSVAgbXVsdGljYXN0IG9wdGlvbnMgKi8KLQl9IGlucF9kZXBlbmQ0OwotI2RlZmluZQlpbnBf
ZnBvcnQJaW5wX2luYy5pbmNfZnBvcnQKLSNkZWZpbmUJaW5wX2xwb3J0CWlucF9pbmMuaW5jX2xw
b3J0Ci0jZGVmaW5lCWlucF9mYWRkcglpbnBfaW5jLmluY19mYWRkcgotI2RlZmluZQlpbnBfbGFk
ZHIJaW5wX2luYy5pbmNfbGFkZHIKLSNkZWZpbmUJaW5wX2lwX3RvcwlpbnBfZGVwZW5kNC5pbnA0
X2lwX3RvcwotI2RlZmluZQlpbnBfb3B0aW9ucwlpbnBfZGVwZW5kNC5pbnA0X29wdGlvbnMKLSNk
ZWZpbmUJaW5wX21vcHRpb25zCWlucF9kZXBlbmQ0LmlucDRfbW9wdGlvbnMKLQlzdHJ1Y3Qgewot
CQkvKiBJUCBvcHRpb25zICovCi0JCXN0cnVjdAltYnVmICppbnA2X29wdGlvbnM7Ci0JCS8qIElQ
NiBvcHRpb25zIGZvciBvdXRnb2luZyBwYWNrZXRzICovCi0JCXN0cnVjdAlpcDZfcGt0b3B0cyAq
aW5wNl9vdXRwdXRvcHRzOwotCQkvKiBJUCBtdWx0aWNhc3Qgb3B0aW9ucyAqLwotI2lmIDAKLQkJ
c3RydWN0CWlwNl9tb3B0aW9ucyAqaW5wNl9tb3B0aW9uczsKLSNlbmRpZgotCQkvKiBJQ01QdjYg
Y29kZSB0eXBlIGZpbHRlciAqLwotCQlzdHJ1Y3QJaWNtcDZfZmlsdGVyICppbnA2X2ljbXA2Zmls
dDsKLQkJLyogSVBWNl9DSEVDS1NVTSBzZXRzb2Nrb3B0ICovCi0JCWludAlpbnA2X2Nrc3VtOwot
CQlzaG9ydAlpbnA2X2hvcHM7Ci0JfSBpbnBfZGVwZW5kNjsKLQlMSVNUX0VOVFJZKGlucGNiKSBp
bnBfcG9ydGxpc3Q7Ci0Jc3RydWN0CWlucGNicG9ydCAqaW5wX3BoZDsJLyogaGVhZCBvZiB0aGlz
IGxpc3QgKi8KLSNkZWZpbmUgaW5wX3plcm9fc2l6ZSBvZmZzZXRvZihzdHJ1Y3QgaW5wY2IsIGlu
cF9nZW5jbnQpCi0Jc3RydWN0IG10eAlpbnBfbXR4OwotCi0jZGVmaW5lCWluNnBfZmFkZHIJaW5w
X2luYy5pbmM2X2ZhZGRyCi0jZGVmaW5lCWluNnBfbGFkZHIJaW5wX2luYy5pbmM2X2xhZGRyCi0j
ZGVmaW5lCWluNnBfaG9wcwlpbnBfZGVwZW5kNi5pbnA2X2hvcHMJLyogZGVmYXVsdCBob3AgbGlt
aXQgKi8KLSNkZWZpbmUJaW42cF9pcDZfbnh0CWlucF9pcF9wCi0jZGVmaW5lCWluNnBfZmxvd2lu
Zm8JaW5wX2Zsb3cKLSNkZWZpbmUJaW42cF92ZmxhZwlpbnBfdmZsYWcKLSNkZWZpbmUJaW42cF9v
cHRpb25zCWlucF9kZXBlbmQ2LmlucDZfb3B0aW9ucwotI2RlZmluZQlpbjZwX291dHB1dG9wdHMJ
aW5wX2RlcGVuZDYuaW5wNl9vdXRwdXRvcHRzCi0jaWYgMAotI2RlZmluZQlpbjZwX21vcHRpb25z
CWlucF9kZXBlbmQ2LmlucDZfbW9wdGlvbnMKLSNlbmRpZgotI2RlZmluZQlpbjZwX2ljbXA2Zmls
dAlpbnBfZGVwZW5kNi5pbnA2X2ljbXA2ZmlsdAotI2RlZmluZQlpbjZwX2Nrc3VtCWlucF9kZXBl
bmQ2LmlucDZfY2tzdW0KLSNkZWZpbmUJaW42cF9mbGFncwlpbnBfZmxhZ3MgIC8qIGZvciBLQU1F
IHNyYyBzeW5jIG92ZXIgQlNEKidzICovCi0jZGVmaW5lCWluNnBfc29ja2V0CWlucF9zb2NrZXQg
IC8qIGZvciBLQU1FIHNyYyBzeW5jIG92ZXIgQlNEKidzICovCi0jZGVmaW5lCWluNnBfbHBvcnQJ
aW5wX2xwb3J0ICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLwotI2RlZmluZQlp
bjZwX2Zwb3J0CWlucF9mcG9ydCAgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8K
LSNkZWZpbmUJaW42cF9wcGNiCWlucF9wcGNiICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJT
RConcyAqLwotfTsKLS8qCi0gKiBUaGUgcmFuZ2Ugb2YgdGhlIGdlbmVyYXRpb24gY291bnQsIGFz
IHVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaXMgOWUxOS4KLSAqIFdlIHdvdWxkIGhhdmUg
dG8gY3JlYXRlIDMwMCBiaWxsaW9uIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgZm9yIHRoaXMgbnVt
YmVyCi0gKiB0byByb2xsIG92ZXIgaW4gYSB5ZWFyLiAgVGhpcyBzZWVtcyBzdWZmaWNpZW50bHkg
dW5saWtlbHkgdGhhdCB3ZSBzaW1wbHkKLSAqIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdpdGgg
dGhhdCBwb3NzaWJpbGl0eS4KLSAqLwotCi1zdHJ1Y3QgaW5wY2Jwb3J0IHsKLQlMSVNUX0VOVFJZ
KGlucGNicG9ydCkgcGhkX2hhc2g7Ci0Jc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsKLQl1
X3Nob3J0IHBoZF9wb3J0OwotfTsKLQotLyoKLSAqIEdsb2JhbCBkYXRhIHN0cnVjdHVyZSBmb3Ig
ZWFjaCBoaWdoLWxldmVsIHByb3RvY29sIChVRFAsIFRDUCwgLi4uKSBpbiBib3RoCi0gKiBJUHY0
IGFuZCBJUHY2LiAgSG9sZHMgaW5wY2IgbGlzdHMgYW5kIGluZm9ybWF0aW9uIGZvciBtYW5hZ2lu
ZyB0aGVtLgotICovCi1zdHJ1Y3QgaW5wY2JpbmZvIHsKLQkvKgotCSAqIEdsb2JhbCBsaXN0IG9m
IGlucGNicyBvbiB0aGUgcHJvdG9jb2wuCi0JICovCi0Jc3RydWN0IGlucGNiaGVhZAkqaXBpX2xp
c3RoZWFkOwotCXVfaW50CQkJIGlwaV9jb3VudDsKLQotCS8qCi0JICogR2xvYmFsIGhhc2ggb2Yg
aW5wY2JzLCBoYXNoZWQgYnkgbG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGFuZAotCSAqIHBv
cnQgbnVtYmVycy4KLQkgKi8KLQlzdHJ1Y3QgaW5wY2JoZWFkCSppcGlfaGFzaGJhc2U7Ci0JdV9s
b25nCQkJIGlwaV9oYXNobWFzazsKLQotCS8qCi0JICogR2xvYmFsIGhhc2ggb2YgaW5wY2JzLCBo
YXNoZWQgYnkgb25seSBsb2NhbCBwb3J0IG51bWJlci4KLQkgKi8KLQlzdHJ1Y3QgaW5wY2Jwb3J0
aGVhZAkqaXBpX3BvcnRoYXNoYmFzZTsKLQl1X2xvbmcJCQkgaXBpX3BvcnRoYXNobWFzazsKLQot
CS8qCi0JICogRmllbGRzIGFzc29jaWF0ZWQgd2l0aCBwb3J0IGxvb2t1cCBhbmQgYWxsb2NhdGlv
bi4KLQkgKi8KLQl1X3Nob3J0CQkJIGlwaV9sYXN0cG9ydDsKLQl1X3Nob3J0CQkJIGlwaV9sYXN0
bG93OwotCXVfc2hvcnQJCQkgaXBpX2xhc3RoaTsKLQotCS8qCi0JICogVU1BIHpvbmUgZnJvbSB3
aGljaCBpbnBjYnMgYXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm90b2NvbC4KLQkgKi8KLQlzdHJ1
Y3QJdW1hX3pvbmUJKmlwaV96b25lOwotCi0JLyoKLQkgKiBHZW5lcmF0aW9uIGNvdW50LS1pbmNy
ZW1lbnRlZCBlYWNoIHRpbWUgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZAotCSAqIG9yIGZyZWVk
LgotCSAqLwotCXN0cnVjdCBtdHgJCSBpcGlfbXR4OwotCi0JLyoKLQkgKiB2aW1hZ2UgMQotCSAq
IGdlbmVyYWwgdXNlIDEKLQkgKi8KLQl2b2lkIAkJCSppcGlfcHNwYXJlWzJdOwotfTsKLQotI2Rl
ZmluZSBJTlBfTE9DS19JTklUKGlucCwgZCwgdCkgXAotCW10eF9pbml0KCYoaW5wKS0+aW5wX210
eCwgKGQpLCAodCksIE1UWF9ERUYgfCBNVFhfUkVDVVJTRSB8IE1UWF9EVVBPSykKLSNkZWZpbmUg
SU5QX0xPQ0tfREVTVFJPWShpbnApCW10eF9kZXN0cm95KCYoaW5wKS0+aW5wX210eCkKLSNkZWZp
bmUgSU5QX0xPQ0soaW5wKQkJbXR4X2xvY2soJihpbnApLT5pbnBfbXR4KQotI2RlZmluZSBJTlBf
VU5MT0NLKGlucCkJCW10eF91bmxvY2soJihpbnApLT5pbnBfbXR4KQotI2RlZmluZSBJTlBfTE9D
S19BU1NFUlQoaW5wKQltdHhfYXNzZXJ0KCYoaW5wKS0+aW5wX210eCwgTUFfT1dORUQpCi0jZGVm
aW5lCUlOUF9VTkxPQ0tfQVNTRVJUKGlucCkJbXR4X2Fzc2VydCgmKGlucCktPmlucF9tdHgsIE1B
X05PVE9XTkVEKQotCi0jZGVmaW5lIElOUF9JTkZPX0xPQ0tfSU5JVChpcGksIGQpIFwKLQltdHhf
aW5pdCgmKGlwaSktPmlwaV9tdHgsIChkKSwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNFKQot
I2RlZmluZSBJTlBfSU5GT19MT0NLX0RFU1RST1koaXBpKSAgbXR4X2Rlc3Ryb3koJihpcGkpLT5p
cGlfbXR4KQotI2RlZmluZSBJTlBfSU5GT19STE9DSyhpcGkpCW10eF9sb2NrKCYoaXBpKS0+aXBp
X210eCkKLSNkZWZpbmUgSU5QX0lORk9fV0xPQ0soaXBpKQltdHhfbG9jaygmKGlwaSktPmlwaV9t
dHgpCi0jZGVmaW5lIElOUF9JTkZPX1JVTkxPQ0soaXBpKQltdHhfdW5sb2NrKCYoaXBpKS0+aXBp
X210eCkKLSNkZWZpbmUgSU5QX0lORk9fV1VOTE9DSyhpcGkpCW10eF91bmxvY2soJihpcGkpLT5p
cGlfbXR4KQotI2RlZmluZSBJTlBfSU5GT19STE9DS19BU1NFUlQoaXBpKQltdHhfYXNzZXJ0KCYo
aXBpKS0+aXBpX210eCwgTUFfT1dORUQpCi0jZGVmaW5lIElOUF9JTkZPX1dMT0NLX0FTU0VSVChp
cGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9PV05FRCkKLSNkZWZpbmUgSU5QX0lO
Rk9fVU5MT0NLX0FTU0VSVChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9OT1RP
V05FRCkKLQotI2RlZmluZSBJTlBfUENCSEFTSChmYWRkciwgbHBvcnQsIGZwb3J0LCBtYXNrKSBc
Ci0JKCgoZmFkZHIpIF4gKChmYWRkcikgPj4gMTYpIF4gbnRvaHMoKGxwb3J0KSBeIChmcG9ydCkp
KSAmIChtYXNrKSkKLSNkZWZpbmUgSU5QX1BDQlBPUlRIQVNIKGxwb3J0LCBtYXNrKSBcCi0JKG50
b2hzKChscG9ydCkpICYgKG1hc2spKQotCi0vKiBmbGFncyBpbiBpbnBfZmxhZ3M6ICovCi0jZGVm
aW5lCUlOUF9SRUNWT1BUUwkJMHgwMQkvKiByZWNlaXZlIGluY29taW5nIElQIG9wdGlvbnMgKi8K
LSNkZWZpbmUJSU5QX1JFQ1ZSRVRPUFRTCQkweDAyCS8qIHJlY2VpdmUgSVAgb3B0aW9ucyBmb3Ig
cmVwbHkgKi8KLSNkZWZpbmUJSU5QX1JFQ1ZEU1RBRERSCQkweDA0CS8qIHJlY2VpdmUgSVAgZHN0
IGFkZHJlc3MgKi8KLSNkZWZpbmUJSU5QX0hEUklOQ0wJCTB4MDgJLyogdXNlciBzdXBwbGllcyBl
bnRpcmUgSVAgaGVhZGVyICovCi0jZGVmaW5lCUlOUF9ISUdIUE9SVAkJMHgxMAkvKiB1c2VyIHdh
bnRzICJoaWdoIiBwb3J0IGJpbmRpbmcgKi8KLSNkZWZpbmUJSU5QX0xPV1BPUlQJCTB4MjAJLyog
dXNlciB3YW50cyAibG93IiBwb3J0IGJpbmRpbmcgKi8KLSNkZWZpbmUJSU5QX0FOT05QT1JUCQkw
eDQwCS8qIHBvcnQgY2hvc2VuIGZvciB1c2VyICovCi0jZGVmaW5lCUlOUF9SRUNWSUYJCTB4ODAJ
LyogcmVjZWl2ZSBpbmNvbWluZyBpbnRlcmZhY2UgKi8KLSNkZWZpbmUJSU5QX01UVURJU0MJCTB4
MTAwCS8qIHVzZXIgY2FuIGRvIE1UVSBkaXNjb3ZlcnkgKi8KLSNkZWZpbmUJSU5QX0ZBSVRICQkw
eDIwMAkvKiBhY2NlcHQgRkFJVEgnZWQgY29ubmVjdGlvbnMgKi8KLSNkZWZpbmUJSU5QX1JFQ1ZU
VEwJCTB4NDAwCS8qIHJlY2VpdmUgaW5jb21pbmcgSVAgVFRMICovCi0jZGVmaW5lCUlOUF9ET05U
RlJBRwkJMHg4MDAJLyogZG9uJ3QgZnJhZ21lbnQgcGFja2V0ICovCi0KLSNkZWZpbmUgSU42UF9J
UFY2X1Y2T05MWQkweDAwODAwMCAvKiByZXN0cmljdCBBRl9JTkVUNiBzb2NrZXQgZm9yIHY2ICov
Ci0KLSNkZWZpbmUJSU42UF9QS1RJTkZPCQkweDAxMDAwMCAvKiByZWNlaXZlIElQNiBkc3QgYW5k
IEkvRiAqLwotI2RlZmluZQlJTjZQX0hPUExJTUlUCQkweDAyMDAwMCAvKiByZWNlaXZlIGhvcGxp
bWl0ICovCi0jZGVmaW5lCUlONlBfSE9QT1BUUwkJMHgwNDAwMDAgLyogcmVjZWl2ZSBob3AtYnkt
aG9wIG9wdGlvbnMgKi8KLSNkZWZpbmUJSU42UF9EU1RPUFRTCQkweDA4MDAwMCAvKiByZWNlaXZl
IGRzdCBvcHRpb25zIGFmdGVyIHJ0aGRyICovCi0jZGVmaW5lCUlONlBfUlRIRFIJCTB4MTAwMDAw
IC8qIHJlY2VpdmUgcm91dGluZyBoZWFkZXIgKi8KLSNkZWZpbmUJSU42UF9SVEhEUkRTVE9QVFMJ
MHgyMDAwMDAgLyogcmVjZWl2ZSBkc3RvcHRpb25zIGJlZm9yZSBydGhkciAqLwotI2RlZmluZQlJ
TjZQX1RDTEFTUwkJMHg0MDAwMDAgLyogcmVjZWl2ZSB0cmFmZmljIGNsYXNzIHZhbHVlICovCi0j
ZGVmaW5lCUlONlBfQVVUT0ZMT1dMQUJFTAkweDgwMDAwMCAvKiBhdHRhY2ggZmxvd2xhYmVsIGF1
dG9tYXRpY2FsbHkgKi8KLSNkZWZpbmUJSU42UF9SRkMyMjkyCQkweDQwMDAwMDAwIC8qIHVzZWQg
UkZDMjI5MiBBUEkgb24gdGhlIHNvY2tldCAqLwotI2RlZmluZQlJTjZQX01UVQkJMHg4MDAwMDAw
MCAvKiByZWNlaXZlIHBhdGggTVRVICovCi0KLSNkZWZpbmUJSU5QX0NPTlRST0xPUFRTCQkoSU5Q
X1JFQ1ZPUFRTfElOUF9SRUNWUkVUT1BUU3xJTlBfUkVDVkRTVEFERFJ8XAotCQkJCSBJTlBfUkVD
VklGfElOUF9SRUNWVFRMfFwKLQkJCQkgSU42UF9QS1RJTkZPfElONlBfSE9QTElNSVR8SU42UF9I
T1BPUFRTfFwKLQkJCQkgSU42UF9EU1RPUFRTfElONlBfUlRIRFJ8SU42UF9SVEhEUkRTVE9QVFN8
XAotCQkJCSBJTjZQX1RDTEFTU3xJTjZQX0FVVE9GTE9XTEFCRUx8SU42UF9SRkMyMjkyfFwKLQkJ
CQkgSU42UF9NVFUpCi0jZGVmaW5lCUlOUF9VTk1BUFBBQkxFT1BUUwkoSU42UF9IT1BPUFRTfElO
NlBfRFNUT1BUU3xJTjZQX1JUSERSfFwKLQkJCQkgSU42UF9UQ0xBU1N8SU42UF9BVVRPRkxPV0xB
QkVMKQotCi0gLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KLSNkZWZpbmUJSU42
UF9ISUdIUE9SVAkJSU5QX0hJR0hQT1JUCi0jZGVmaW5lCUlONlBfTE9XUE9SVAkJSU5QX0xPV1BP
UlQKLSNkZWZpbmUJSU42UF9BTk9OUE9SVAkJSU5QX0FOT05QT1JUCi0jZGVmaW5lCUlONlBfUkVD
VklGCQlJTlBfUkVDVklGCi0jZGVmaW5lCUlONlBfTVRVRElTQwkJSU5QX01UVURJU0MKLSNkZWZp
bmUJSU42UF9GQUlUSAkJSU5QX0ZBSVRICi0jZGVmaW5lCUlONlBfQ09OVFJPTE9QVFMgSU5QX0NP
TlRST0xPUFRTCi0JLyoKLQkgKiBzb2NrZXQgQUYgdmVyc2lvbiBpcyB7bmV3ZXIgdGhhbixvciBp
bmNsdWRlfQotCSAqIGFjdHVhbCBkYXRhZ3JhbSBBRiB2ZXJzaW9uCi0JICovCi0KLSNkZWZpbmUJ
SU5QTE9PS1VQX1dJTERDQVJECTEKLSNkZWZpbmUJc290b2lucGNiKHNvKQkoKHN0cnVjdCBpbnBj
YiAqKShzbyktPnNvX3BjYikKLSNkZWZpbmUJc290b2luNnBjYihzbykJc290b2lucGNiKHNvKSAv
KiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLwotCi0jZGVmaW5lCUlOUF9TT0NLQUYo
c28pIHNvLT5zb19wcm90by0+cHJfZG9tYWluLT5kb21fZmFtaWx5Ci0KLSNkZWZpbmUJSU5QX0NI
RUNLX1NPQ0tBRihzbywgYWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKLQotLyogI2lmZGVmIF9L
RVJORUwgKi8KLWV4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkaGlnaDsKLWV4dGVybiBpbnQJaXBw
b3J0X3Jlc2VydmVkbG93OwotZXh0ZXJuIGludAlpcHBvcnRfbG93Zmlyc3RhdXRvOwotZXh0ZXJu
IGludAlpcHBvcnRfbG93bGFzdGF1dG87Ci1leHRlcm4gaW50CWlwcG9ydF9maXJzdGF1dG87Ci1l
eHRlcm4gaW50CWlwcG9ydF9sYXN0YXV0bzsKLWV4dGVybiBpbnQJaXBwb3J0X2hpZmlyc3RhdXRv
OwotZXh0ZXJuIGludAlpcHBvcnRfaGlsYXN0YXV0bzsKLWV4dGVybiBzdHJ1Y3QgY2FsbG91dCBp
cHBvcnRfdGlja19jYWxsb3V0OwotCi12b2lkCWluX3BjYnB1cmdlaWYwKHN0cnVjdCBpbnBjYmlu
Zm8gKiwgc3RydWN0IGlmbmV0ICopOwotaW50CWluX3BjYmFsbG9jKHN0cnVjdCBzb2NrZXQgKiwg
c3RydWN0IGlucGNiaW5mbyAqKTsKLWludAlpbl9wY2JiaW5kKHN0cnVjdCBpbnBjYiAqLCBzdHJ1
Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHVjcmVkICopOwotaW50CWluX3BjYmNvbm5lY3Qoc3RydWN0
IGlucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdWNyZWQgKik7Ci12b2lkCWluX3Bj
YmRldGFjaChzdHJ1Y3QgaW5wY2IgKik7Ci12b2lkCWluX3BjYmRpc2Nvbm5lY3Qoc3RydWN0IGlu
cGNiICopOwotdm9pZAlpbl9wY2Jkcm9wKHN0cnVjdCBpbnBjYiAqKTsKLXZvaWQJaW5fcGNiZnJl
ZShzdHJ1Y3QgaW5wY2IgKik7Ci1pbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5wY2IgKik7Ci1z
dHJ1Y3QgaW5wY2IgKgotCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2JpbmZvICosCi0J
ICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsKLXN0cnVjdCBpbnBjYiAqCi0JaW5fcGNi
bG9va3VwX2hhc2goc3RydWN0IGlucGNiaW5mbyAqLCBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQsCi0J
ICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50LCBzdHJ1Y3QgaWZuZXQgKik7Ci12b2lkCWlu
X3BjYm5vdGlmeWFsbChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRkciwK
LQkgICAgaW50LCBzdHJ1Y3QgaW5wY2IgKigqKShzdHJ1Y3QgaW5wY2IgKiwgaW50KSk7Ci12b2lk
CWluX3BjYnJlaGFzaChzdHJ1Y3QgaW5wY2IgKik7Ci12b2lkCWluX3BjYnNldHNvbGFiZWwoc3Ry
dWN0IHNvY2tldCAqc28pOwotaW50CWluX2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwotaW50CWluX2dldHNvY2thZGRyKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwotdm9pZAlpbl9wY2Jzb3NldGxhYmVsKHN0cnVj
dCBzb2NrZXQgKnNvKTsKLXZvaWQJaW5fcGNicmVtbGlzdHMoc3RydWN0IGlucGNiICppbnApOwot
dm9pZAlpcHBvcnRfdGljayh2b2lkICp4dHApOwotCi0vKgotICogRGVidWdnaW5nIHJvdXRpbmVz
IGNvbXBpbGVkIGluIHdoZW4gRERCIGlzIHByZXNlbnQuCi0gKi8KLXZvaWQJZGJfcHJpbnRfaW5w
Y2Ioc3RydWN0IGlucGNiICppbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRlbnQpOwotCi0v
KiAjZW5kaWYgIF9LRVJORUwgKi8KLQotI2VuZGlmIC8qICFfTkVUSU5FVF9JTl9QQ0JfSF8gKi8K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfaXA2X3Zhci5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9pcDZf
dmFyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY1ZTRhNjBlNGYyN2M1NmU2NmFi
MTM5M2VjMGE2ODFjZWI3OTFlYTIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmgKKysrIC9kZXYvbnVsbApAQCAtMSwx
MjYgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAx
OTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAz
LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNv
bnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAq
IFNVQ0ggREFNQUdFLgotICoKLSAqLwotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYs
IDE5OTMKLSAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5p
YS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1l
IG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICog
ICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRT
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
UkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAot
ICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QK
LSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgot
ICoKLSAqLwotCi0jaWZuZGVmIF9VU0VSX0lQNl9WQVJfSF8KLSNkZWZpbmUgX1VTRVJfSVA2X1ZB
Ul9IXwotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotc3RydWN0IGlwNl9o
ZHIgewotCXVuaW9uIHsKLQkJc3RydWN0IGlwNl9oZHJjdGwgewotCQkJdV9pbnQzMl90IGlwNl91
bjFfZmxvdzsJLyogMjAgYml0cyBvZiBmbG93LUlEICovCi0JCQl1X2ludDE2X3QgaXA2X3VuMV9w
bGVuOwkvKiBwYXlsb2FkIGxlbmd0aCAqLwotCQkJdV9pbnQ4X3QgIGlwNl91bjFfbnh0OwkvKiBu
ZXh0IGhlYWRlciAqLwotCQkJdV9pbnQ4X3QgIGlwNl91bjFfaGxpbTsJLyogaG9wIGxpbWl0ICov
Ci0JCX0gaXA2X3VuMTsKLQkJdV9pbnQ4X3QgaXA2X3VuMl92ZmM7CS8qIDQgYml0cyB2ZXJzaW9u
LCB0b3AgNCBiaXRzIGNsYXNzICovCi0JfSBpcDZfY3RsdW47Ci0Jc3RydWN0IGluNl9hZGRyIGlw
Nl9zcmM7CS8qIHNvdXJjZSBhZGRyZXNzICovCi0Jc3RydWN0IGluNl9hZGRyIGlwNl9kc3Q7CS8q
IGRlc3RpbmF0aW9uIGFkZHJlc3MgKi8KLX07Ci0jZGVmaW5lIGlwNl92ZmMJCWlwNl9jdGx1bi5p
cDZfdW4yX3ZmYwotI2RlZmluZSBpcDZfZmxvdwlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2Zs
b3cKLSNkZWZpbmUgaXA2X3BsZW4JaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9wbGVuCi0jZGVm
aW5lIGlwNl9ueHQJCWlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfbnh0Ci0jZGVmaW5lIGlwNl9o
bGltCWlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfaGxpbQotI2RlZmluZSBpcDZfaG9wcwlpcDZf
Y3RsdW4uaXA2X3VuMS5pcDZfdW4xX2hsaW0KLQotI2RlZmluZSBJUFY2X1ZFUlNJT04JCTB4NjAK
LSNlbmRpZgotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2RlZmluZSBz
Nl9hZGRyMTYgdS5Xb3JkCi0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQotI2RlZmluZSBzNl9hZGRy
OCAgX191Nl9hZGRyLl9fdTZfYWRkcjgKLSNkZWZpbmUgczZfYWRkcjE2IF9fdTZfYWRkci5fX3U2
X2FkZHIxNgotI2RlZmluZSBzNl9hZGRyMzIgX191Nl9hZGRyLl9fdTZfYWRkcjMyCi0jZW5kaWYK
LSNlbmRpZgotCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJh
Z29uRmx5KQotc3RydWN0IHJvdXRlX2luNiB7Ci0Jc3RydWN0CXJ0ZW50cnkgKnJvX3J0OwotCXN0
cnVjdAlsbGVudHJ5ICpyb19sbGU7Ci0Jc3RydWN0CWluNl9hZGRyICpyb19pYTY7Ci0JaW50CQly
b19mbGFnczsKLQlzdHJ1Y3QJc29ja2FkZHJfaW42IHJvX2RzdDsKLX07Ci0jZW5kaWYKLSNkZWZp
bmUgSVA2X0VYVEhEUl9HRVQodmFsLCB0eXAsIG0sIG9mZiwgbGVuKSBcCi1kbyB7CQkJCQkJCQkJ
XAotCXN0cnVjdCBtYnVmICp0OwkJCQkJCQlcCi0JaW50IHRtcDsJCQkJCQkJXAotCWlmICgobSkt
Pm1fbGVuID49IChvZmYpICsgKGxlbikpCQkJCVwKLQkJKHZhbCkgPSAodHlwKShtdG9kKChtKSwg
Y2FkZHJfdCkgKyAob2ZmKSk7CQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCXQgPSBtX3B1bGxkb3du
KChtKSwgKG9mZiksIChsZW4pLCAmdG1wKTsJCVwKLQkJaWYgKHQpIHsJCQkJCQlcCi0JCQlLQVNT
RVJUKHQtPm1fbGVuID49IHRtcCArIChsZW4pLAkJXAotCQkJICAgICAgICAoIm1fcHVsbGRvd24g
bWFsZnVuY3Rpb24iKSk7CQlcCi0JCQkodmFsKSA9ICh0eXApKG10b2QodCwgY2FkZHJfdCkgKyB0
bXApOwkJXAotCQl9IGVsc2UgewkJCQkJCVwKLQkJCSh2YWwpID0gKHR5cClOVUxMOwkJCQlcCi0J
CQkobSkgPSBOVUxMOwkJCQkJXAotCQl9CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi19IHdoaWxlICgw
KQotCi0jZW5kaWYgLyogIV9VU0VSX0lQNl9WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzZXJfaXBfaWNtcC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9pcF9pY21wLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGY2ZmQ1NDg3ZTJiY2UzYzBhZWI4MThhNmFlNGNiZTEyM2ZhODU0NGQu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNlcl9pcF9pY21wLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMjUgKzAsMCBAQAotLyotCi0gKiBD
b3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2
ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICog
NC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0
cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICog
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAq
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
Ci0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9JUF9JQ01QX0hfCi0j
ZGVmaW5lIF9VU0VSX0lQX0lDTVBfSF8KLQotLyoKLSAqIEludGVyZmFjZSBDb250cm9sIE1lc3Nh
Z2UgUHJvdG9jb2wgRGVmaW5pdGlvbnMuCi0gKiBQZXIgUkZDIDc5MiwgU2VwdGVtYmVyIDE5ODEu
Ci0gKi8KLQotLyoKLSAqIEludGVybmFsIG9mIGFuIElDTVAgUm91dGVyIEFkdmVydGlzZW1lbnQK
LSAqLwotc3RydWN0IGljbXBfcmFfYWRkciB7Ci0JdV9pbnQzMl90IGlyYV9hZGRyOwotCXVfaW50
MzJfdCBpcmFfcHJlZmVyZW5jZTsKLX07Ci0KLS8qCi0gKiBTdHJ1Y3R1cmUgb2YgYW4gaWNtcCBo
ZWFkZXIuCi0gKi8KLXN0cnVjdCBpY21waGRyIHsKLQl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlw
ZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KLQl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBz
dWIgY29kZSAqLwotCXVfc2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1
bSBvZiBzdHJ1Y3QgKi8KLX07Ci0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
Ci0jcHJhZ21hIHBhY2sgKHB1c2gsIDEpCi1zdHJ1Y3QgaWNtcDZfaGRyIHsKLQl1X2ludDhfdCBp
Y21wNl90eXBlOwotCXVfaW50OF90IGljbXA2X2NvZGU7Ci0JdV9pbnQxNl90IGljbXA2X2Nrc3Vt
OwotCXVuaW9uIHsKLQkJdV9pbnQzMl90IGljbXA2X3VuX2RhdGEzMlsxXTsKLQkJdV9pbnQxNl90
IGljbXA2X3VuX2RhdGExNlsyXTsKLQkJdV9pbnQ4X3QgaWNtcDZfdW5fZGF0YThbNF07Ci0JfSBp
Y21wNl9kYXRhdW47Ci19OwotI3ByYWdtYSBwYWNrKHBvcCkKLQotI2RlZmluZSBpY21wNl9kYXRh
MzIgaWNtcDZfZGF0YXVuLmljbXA2X3VuX2RhdGEzMgotI2RlZmluZSBpY21wNl9tdHUgaWNtcDZf
ZGF0YTMyWzBdCi0jZW5kaWYKLQotLyoKLSAqIFN0cnVjdHVyZSBvZiBhbiBpY21wIHBhY2tldC4K
LSAqCi0gKiBYWFg6IHNob3VsZCBzdGFydCB3aXRoIGEgc3RydWN0IGljbXBoZHIuCi0gKi8KLXN0
cnVjdCBpY21wIHsKLQl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUg
YmVsb3cgKi8KLQl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLwotCXVfc2hv
cnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KLQl1
bmlvbiB7Ci0JCXVfY2hhciBpaF9wcHRyOwkJCS8qIElDTVBfUEFSQU1QUk9CICovCi0JCXN0cnVj
dCBpbl9hZGRyIGloX2d3YWRkcjsJLyogSUNNUF9SRURJUkVDVCAqLwotCQlzdHJ1Y3QgaWhfaWRz
ZXEgewotCQkJdWludDE2X3QJaWNkX2lkOwkvKiBuZXR3b3JrIGZvcm1hdCAqLwotCQkJdWludDE2
X3QJaWNkX3NlcTsgLyogbmV0d29yayBmb3JtYXQgKi8KLQkJfSBpaF9pZHNlcTsKLQkJaW50IGlo
X3ZvaWQ7Ci0KLQkJLyogSUNNUF9VTlJFQUNIX05FRURGUkFHIC0tIFBhdGggTVRVIERpc2NvdmVy
eSAoUkZDMTE5MSkgKi8KLQkJc3RydWN0IGloX3BtdHUgewotCQkJdWludDE2X3QgaXBtX3ZvaWQ7
CS8qIG5ldHdvcmsgZm9ybWF0ICovCi0JCQl1aW50MTZfdCBpcG1fbmV4dG10dTsJLyogbmV0d29y
ayBmb3JtYXQgKi8KLQkJfSBpaF9wbXR1OwotCi0JCXN0cnVjdCBpaF9ydHJhZHYgewotCQkJdV9j
aGFyIGlydF9udW1fYWRkcnM7Ci0JCQl1X2NoYXIgaXJ0X3dwYTsKLQkJCXVfaW50MTZfdCBpcnRf
bGlmZXRpbWU7Ci0JCX0gaWhfcnRyYWR2OwotCX0gaWNtcF9odW47Ci0jZGVmaW5lCWljbXBfcHB0
cglpY21wX2h1bi5paF9wcHRyCi0jZGVmaW5lCWljbXBfZ3dhZGRyCWljbXBfaHVuLmloX2d3YWRk
cgotI2RlZmluZQlpY21wX2lkCQlpY21wX2h1bi5paF9pZHNlcS5pY2RfaWQKLSNkZWZpbmUJaWNt
cF9zZXEJaWNtcF9odW4uaWhfaWRzZXEuaWNkX3NlcQotI2RlZmluZQlpY21wX3ZvaWQJaWNtcF9o
dW4uaWhfdm9pZAotI2RlZmluZQlpY21wX3Btdm9pZAlpY21wX2h1bi5paF9wbXR1LmlwbV92b2lk
Ci0jZGVmaW5lCWljbXBfbmV4dG10dQlpY21wX2h1bi5paF9wbXR1LmlwbV9uZXh0bXR1Ci0jZGVm
aW5lCWljbXBfbnVtX2FkZHJzCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCi0jZGVm
aW5lCWljbXBfd3BhCWljbXBfaHVuLmloX3J0cmFkdi5pcnRfd3BhCi0jZGVmaW5lCWljbXBfbGlm
ZXRpbWUJaWNtcF9odW4uaWhfcnRyYWR2LmlydF9saWZldGltZQotCXVuaW9uIHsKLQkJc3RydWN0
IGlkX3RzIHsJCQkvKiBJQ01QIFRpbWVzdGFtcCAqLwotCQkJLyoKLQkJCSAqIFRoZSBuZXh0IDMg
ZmllbGRzIGFyZSBpbiBuZXR3b3JrIGZvcm1hdCwKLQkJCSAqIG1pbGxpc2Vjb25kcyBzaW5jZSAw
MDowMCBHTVQKLQkJCSAqLwotCQkJdWludDMyX3QgaXRzX290aW1lOwkvKiBPcmlnaW5hdGUgKi8K
LQkJCXVpbnQzMl90IGl0c19ydGltZTsJLyogUmVjZWl2ZSAqLwotCQkJdWludDMyX3QgaXRzX3R0
aW1lOwkvKiBUcmFuc21pdCAqLwotCQl9IGlkX3RzOwotCQlzdHJ1Y3QgaWRfaXAgIHsKLQkJCXN0
cnVjdCBpcCBpZGlfaXA7Ci0JCQkvKiBvcHRpb25zIGFuZCB0aGVuIDY0IGJpdHMgb2YgZGF0YSAq
LwotCQl9IGlkX2lwOwotCQlzdHJ1Y3QgaWNtcF9yYV9hZGRyIGlkX3JhZHY7Ci0JCXVfaW50MzJf
dCBpZF9tYXNrOwotCQljaGFyCWlkX2RhdGFbMV07Ci0JfSBpY21wX2R1bjsKLSNkZWZpbmUJaWNt
cF9vdGltZQlpY21wX2R1bi5pZF90cy5pdHNfb3RpbWUKLSNkZWZpbmUJaWNtcF9ydGltZQlpY21w
X2R1bi5pZF90cy5pdHNfcnRpbWUKLSNkZWZpbmUJaWNtcF90dGltZQlpY21wX2R1bi5pZF90cy5p
dHNfdHRpbWUKLSNkZWZpbmUJaWNtcF9pcAkJaWNtcF9kdW4uaWRfaXAuaWRpX2lwCi0jZGVmaW5l
CWljbXBfcmFkdglpY21wX2R1bi5pZF9yYWR2Ci0jZGVmaW5lCWljbXBfbWFzawlpY21wX2R1bi5p
ZF9tYXNrCi0jZGVmaW5lCWljbXBfZGF0YQlpY21wX2R1bi5pZF9kYXRhCi19OwotCi0vKgotICog
TG93ZXIgYm91bmRzIG9uIHBhY2tldCBsZW5ndGhzIGZvciB2YXJpb3VzIHR5cGVzLgotICogRm9y
IHRoZSBlcnJvciBhZHZpY2UgcGFja2V0cyBtdXN0IGZpcnN0IGluc3VyZSB0aGF0IHRoZQotICog
cGFja2V0IGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSByZXR1cm5lZCBpcCBoZWFkZXIu
Ci0gKiBPbmx5IHRoZW4gY2FuIHdlIGRvIHRoZSBjaGVjayB0byBzZWUgaWYgNjQgYml0cyBvZiBw
YWNrZXQKLSAqIGRhdGEgaGF2ZSBiZWVuIHJldHVybmVkLCBzaW5jZSB3ZSBuZWVkIHRvIGNoZWNr
IHRoZSByZXR1cm5lZAotICogaXAgaGVhZGVyIGxlbmd0aC4KLSAqLwotI2RlZmluZQlJQ01QX01J
TkxFTgk4CQkJCS8qIGFicyBtaW5pbXVtICovCi0jZGVmaW5lCUlDTVBfVFNMRU4JKDggKyAzICog
c2l6ZW9mICh1aW50MzJfdCkpCS8qIHRpbWVzdGFtcCAqLwotI2RlZmluZQlJQ01QX01BU0tMRU4J
MTIJCQkJLyogYWRkcmVzcyBtYXNrICovCi0jZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6
ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWluICovCi0jZGVmaW5lCUlDTVBfQURWTEVOKHApCSg4
ICsgKChwKS0+aWNtcF9pcC5pcF9obCA8PCAyKSArIDgpCi0JLyogTi5CLjogbXVzdCBzZXBhcmF0
ZWx5IGNoZWNrIHRoYXQgaXBfaGwgPj0gNSAqLwotCi0vKgotICogRGVmaW5pdGlvbiBvZiB0eXBl
IGFuZCBjb2RlIGZpZWxkIHZhbHVlcy4KLSAqLwotI2RlZmluZQlJQ01QX0VDSE9SRVBMWQkJMAkJ
LyogZWNobyByZXBseSAqLwotI2RlZmluZQlJQ01QX1VOUkVBQ0gJCTMJCS8qIGRlc3QgdW5yZWFj
aGFibGUsIGNvZGVzOiAqLwotI2RlZmluZQkJSUNNUF9VTlJFQUNIX05FVAkwCQkvKiBiYWQgbmV0
ICovCi0jZGVmaW5lCQlJQ01QX1VOUkVBQ0hfSE9TVAkxCQkvKiBiYWQgaG9zdCAqLwotI2RlZmlu
ZQkJSUNNUF9VTlJFQUNIX1BST1RPQ09MCTIJCS8qIGJhZCBwcm90b2NvbCAqLwotI2RlZmluZQkJ
SUNNUF9VTlJFQUNIX1BPUlQJMwkJLyogYmFkIHBvcnQgKi8KLSNkZWZpbmUJCUlDTVBfVU5SRUFD
SF9ORUVERlJBRwk0CQkvKiBJUF9ERiBjYXVzZWQgZHJvcCAqLwotI2RlZmluZQkJSUNNUF9VTlJF
QUNIX1NSQ0ZBSUwJNQkJLyogc3JjIHJvdXRlIGZhaWxlZCAqLwotI2RlZmluZQkJSUNNUF9VTlJF
QUNIX05FVF9VTktOT1dOIDYJCS8qIHVua25vd24gbmV0ICovCi0jZGVmaW5lCQlJQ01QX1VOUkVB
Q0hfSE9TVF9VTktOT1dOIDcJCS8qIHVua25vd24gaG9zdCAqLwotI2RlZmluZQkJSUNNUF9VTlJF
QUNIX0lTT0xBVEVECTgJCS8qIHNyYyBob3N0IGlzb2xhdGVkICovCi0jZGVmaW5lCQlJQ01QX1VO
UkVBQ0hfTkVUX1BST0hJQgk5CQkvKiBwcm9oaWJpdGVkIGFjY2VzcyAqLwotI2RlZmluZQkJSUNN
UF9VTlJFQUNIX0hPU1RfUFJPSElCIDEwCQkvKiBkaXR0byAqLwotI2RlZmluZQkJSUNNUF9VTlJF
QUNIX1RPU05FVAkxMQkJLyogYmFkIHRvcyBmb3IgbmV0ICovCi0jZGVmaW5lCQlJQ01QX1VOUkVB
Q0hfVE9TSE9TVAkxMgkJLyogYmFkIHRvcyBmb3IgaG9zdCAqLwotI2RlZmluZQkJSUNNUF9VTlJF
QUNIX0ZJTFRFUl9QUk9ISUIgMTMJCS8qIGFkbWluIHByb2hpYiAqLwotI2RlZmluZQkJSUNNUF9V
TlJFQUNIX0hPU1RfUFJFQ0VERU5DRSAxNAkJLyogaG9zdCBwcmVjIHZpby4gKi8KLSNkZWZpbmUJ
CUlDTVBfVU5SRUFDSF9QUkVDRURFTkNFX0NVVE9GRiAxNQkvKiBwcmVjIGN1dG9mZiAqLwotI2Rl
ZmluZQlJQ01QX1NPVVJDRVFVRU5DSAk0CQkvKiBwYWNrZXQgbG9zdCwgc2xvdyBkb3duICovCi0j
ZGVmaW5lCUlDTVBfUkVESVJFQ1QJCTUJCS8qIHNob3J0ZXIgcm91dGUsIGNvZGVzOiAqLwotI2Rl
ZmluZQkJSUNNUF9SRURJUkVDVF9ORVQJMAkJLyogZm9yIG5ldHdvcmsgKi8KLSNkZWZpbmUJCUlD
TVBfUkVESVJFQ1RfSE9TVAkxCQkvKiBmb3IgaG9zdCAqLwotI2RlZmluZQkJSUNNUF9SRURJUkVD
VF9UT1NORVQJMgkJLyogZm9yIHRvcyBhbmQgbmV0ICovCi0jZGVmaW5lCQlJQ01QX1JFRElSRUNU
X1RPU0hPU1QJMwkJLyogZm9yIHRvcyBhbmQgaG9zdCAqLwotI2RlZmluZQlJQ01QX0FMVEhPU1RB
RERSCTYJCS8qIGFsdGVybmF0ZSBob3N0IGFkZHJlc3MgKi8KLSNkZWZpbmUJSUNNUF9FQ0hPCQk4
CQkvKiBlY2hvIHNlcnZpY2UgKi8KLSNkZWZpbmUJSUNNUF9ST1VURVJBRFZFUlQJOQkJLyogcm91
dGVyIGFkdmVydGlzZW1lbnQgKi8KLSNkZWZpbmUJCUlDTVBfUk9VVEVSQURWRVJUX05PUk1BTAkJ
MAkvKiBub3JtYWwgYWR2ZXJ0aXNlbWVudCAqLwotI2RlZmluZQkJSUNNUF9ST1VURVJBRFZFUlRf
Tk9ST1VURV9DT01NT04JMTYJLyogc2VsZWN0aXZlIHJvdXRpbmcgKi8KLSNkZWZpbmUJSUNNUF9S
T1VURVJTT0xJQ0lUCTEwCQkvKiByb3V0ZXIgc29saWNpdGF0aW9uICovCi0jZGVmaW5lCUlDTVBf
VElNWENFRUQJCTExCQkvKiB0aW1lIGV4Y2VlZGVkLCBjb2RlOiAqLwotI2RlZmluZQkJSUNNUF9U
SU1YQ0VFRF9JTlRSQU5TCTAJCS8qIHR0bD09MCBpbiB0cmFuc2l0ICovCi0jZGVmaW5lCQlJQ01Q
X1RJTVhDRUVEX1JFQVNTCTEJCS8qIHR0bD09MCBpbiByZWFzcyAqLwotI2RlZmluZQlJQ01QX1BB
UkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBiYWQgKi8KLSNkZWZpbmUJCUlDTVBfUEFSQU1QUk9C
X0VSUkFUUFRSIDAJCS8qIGVycm9yIGF0IHBhcmFtIHB0ciAqLwotI2RlZmluZQkJSUNNUF9QQVJB
TVBST0JfT1BUQUJTRU5UIDEJCS8qIHJlcS4gb3B0LiBhYnNlbnQgKi8KLSNkZWZpbmUJCUlDTVBf
UEFSQU1QUk9CX0xFTkdUSCAyCQkJLyogYmFkIGxlbmd0aCAqLwotI2RlZmluZQlJQ01QX1RTVEFN
UAkJMTMJCS8qIHRpbWVzdGFtcCByZXF1ZXN0ICovCi0jZGVmaW5lCUlDTVBfVFNUQU1QUkVQTFkJ
MTQJCS8qIHRpbWVzdGFtcCByZXBseSAqLwotI2RlZmluZQlJQ01QX0lSRVEJCTE1CQkvKiBpbmZv
cm1hdGlvbiByZXF1ZXN0ICovCi0jZGVmaW5lCUlDTVBfSVJFUVJFUExZCQkxNgkJLyogaW5mb3Jt
YXRpb24gcmVwbHkgKi8KLSNkZWZpbmUJSUNNUF9NQVNLUkVRCQkxNwkJLyogYWRkcmVzcyBtYXNr
IHJlcXVlc3QgKi8KLSNkZWZpbmUJSUNNUF9NQVNLUkVQTFkJCTE4CQkvKiBhZGRyZXNzIG1hc2sg
cmVwbHkgKi8KLSNkZWZpbmUJSUNNUF9UUkFDRVJPVVRFCQkzMAkJLyogdHJhY2Vyb3V0ZSAqLwot
I2RlZmluZQlJQ01QX0RBVEFDT05WRVJSCTMxCQkvKiBkYXRhIGNvbnZlcnNpb24gZXJyb3IgKi8K
LSNkZWZpbmUJSUNNUF9NT0JJTEVfUkVESVJFQ1QJMzIJCS8qIG1vYmlsZSBob3N0IHJlZGlyZWN0
ICovCi0jZGVmaW5lCUlDTVBfSVBWNl9XSEVSRUFSRVlPVQkzMwkJLyogSVB2NiB3aGVyZS1hcmUt
eW91ICovCi0jZGVmaW5lCUlDTVBfSVBWNl9JQU1IRVJFCTM0CQkvKiBJUHY2IGktYW0taGVyZSAq
LwotI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVFVRVNUCTM1CQkvKiBtb2JpbGUgcmVnaXN0cmF0
aW9uIHJlcSAqLwotI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVBMWQkzNgkJLyogbW9iaWxlIHJl
Z2lzdHJhdGlvbiByZXBseSAqLwotI2RlZmluZQlJQ01QX1NLSVAJCTM5CQkvKiBTS0lQICovCi0j
ZGVmaW5lCUlDTVBfUEhPVFVSSVMJCTQwCQkvKiBQaG90dXJpcyAqLwotI2RlZmluZQkJSUNNUF9Q
SE9UVVJJU19VTktOT1dOX0lOREVYCTEJLyogdW5rbm93biBzZWMgaW5kZXggKi8KLSNkZWZpbmUJ
CUlDTVBfUEhPVFVSSVNfQVVUSF9GQUlMRUQJMgkvKiBhdXRoIGZhaWxlZCAqLwotI2RlZmluZQkJ
SUNNUF9QSE9UVVJJU19ERUNSWVBUX0ZBSUxFRAkzCS8qIGRlY3J5cHQgZmFpbGVkICovCi0KLSNk
ZWZpbmUJSUNNUF9NQVhUWVBFCQk0MAotCi0jZGVmaW5lCUlDTVBfSU5GT1RZUEUodHlwZSkgXAot
CSgodHlwZSkgPT0gSUNNUF9FQ0hPUkVQTFkgfHwgKHR5cGUpID09IElDTVBfRUNITyB8fCBcCi0J
KHR5cGUpID09IElDTVBfUk9VVEVSQURWRVJUIHx8ICh0eXBlKSA9PSBJQ01QX1JPVVRFUlNPTElD
SVQgfHwgXAotCSh0eXBlKSA9PSBJQ01QX1RTVEFNUCB8fCAodHlwZSkgPT0gSUNNUF9UU1RBTVBS
RVBMWSB8fCBcCi0JKHR5cGUpID09IElDTVBfSVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQ
TFkgfHwgXAotCSh0eXBlKSA9PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JF
UExZKQotCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfbWFsbG9jLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDczOTA0
Y2E1YjQ3YmJiNThiOGZiNmI5ZjZiYmM0NDRmZDZkMjIxMTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaAorKysgL2Rl
di9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5
MwotICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIENv
cHlyaWdodCAoYykgMjAwNSBSb2JlcnQgTi4gTS4gV2F0c29uCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBu
b3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICog
ICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0g
KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
Ci0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotLyogVGhpcyBm
aWxlIGhhcyBiZWVuIHJlbmFtZWQgdXNlcl9tYWxsb2MuaCBmb3IgVXNlcnNwYWNlICovCi0jaWZu
ZGVmIF9VU0VSX01BTExPQ19IXwotI2RlZmluZQlfVVNFUl9NQUxMT0NfSF8KLQotLypfX1VzZXJz
cGFjZV9fKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNp
ZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpbmNsdWRlIDxzdHJpbmdzLmg+
Ci0jaW5jbHVkZSA8c3RkaW50Lmg+Ci0jZWxzZQotI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIF9N
U0NfVkVSID49IDE2MDAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbGlmIGRlZmluZWQoU0NUUF9T
VERJTlRfSU5DTFVERSkKLSNpbmNsdWRlIFNDVFBfU1RESU5UX0lOQ0xVREUKLSNlbHNlCi0jZGVm
aW5lIHVpbnQzMl90IHVuc2lnbmVkIF9faW50MzIKLSNkZWZpbmUgdWludDY0X3QgdW5zaWduZWQg
X19pbnQ2NAotI2VuZGlmCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNlbmRpZgotCi0jZGVmaW5l
CU1JTkFMTE9DU0laRQlVTUFfU01BTExFU1RfVU5JVAotCi0vKgotICogZmxhZ3MgdG8gbWFsbG9j
LgotICovCi0jZGVmaW5lCU1fTk9XQUlUCTB4MDAwMQkJLyogZG8gbm90IGJsb2NrICovCi0jZGVm
aW5lCU1fV0FJVE9LCTB4MDAwMgkJLyogb2sgdG8gYmxvY2sgKi8KLSNkZWZpbmUJTV9aRVJPCQkw
eDAxMDAJCS8qIGJ6ZXJvIHRoZSBhbGxvY2F0aW9uICovCi0jZGVmaW5lCU1fTk9WTQkJMHgwMjAw
CQkvKiBkb24ndCBhc2sgVk0gZm9yIHBhZ2VzICovCi0jZGVmaW5lCU1fVVNFX1JFU0VSVkUJMHgw
NDAwCQkvKiBjYW4gYWxsb2Mgb3V0IG9mIHJlc2VydmUgbWVtb3J5ICovCi0KLSNkZWZpbmUJTV9N
QUdJQwkJODc3OTgzOTc3CS8qIHRpbWUgd2hlbiBmaXJzdCBkZWZpbmVkIDotKSAqLwotCi0vKgot
ICogVHdvIG1hbGxvYyB0eXBlIHN0cnVjdHVyZXMgYXJlIHByZXNlbnQ6IG1hbGxvY190eXBlLCB3
aGljaCBpcyB1c2VkIGJ5IGEKLSAqIHR5cGUgb3duZXIgdG8gZGVjbGFyZSB0aGUgdHlwZSwgYW5k
IG1hbGxvY190eXBlX2ludGVybmFsLCB3aGljaCBob2xkcwotICogbWFsbG9jLW93bmVkIHN0YXRp
c3RpY3MgYW5kIG90aGVyIEFCSS1zZW5zaXRpdmUgZmllbGRzLCBzdWNoIGFzIHRoZSBzZXQgb2YK
LSAqIG1hbGxvYyBzdGF0aXN0aWNzIGluZGV4ZWQgYnkgdGhlIGNvbXBpbGUtdGltZSBNQVhDUFUg
Y29uc3RhbnQuCi0gKiBBcHBsaWNhdGlvbnMgc2hvdWxkIGF2b2lkIGludHJvZHVjaW5nIGRlcGVu
ZGVuY2Ugb24gdGhlIGFsbG9jYXRvciBwcml2YXRlCi0gKiBkYXRhIGxheW91dCBhbmQgc2l6ZS4K
LSAqCi0gKiBUaGUgbWFsbG9jX3R5cGUga3NfbmV4dCBmaWVsZCBpcyBwcm90ZWN0ZWQgYnkgbWFs
bG9jX210eC4gIE90aGVyIGZpZWxkcyBpbgotICogbWFsbG9jX3R5cGUgYXJlIHN0YXRpYyBhZnRl
ciBpbml0aWFsaXphdGlvbiBzbyB1bnN5bmNocm9uaXplZC4KLSAqCi0gKiBTdGF0aXN0aWNzIGlu
IG1hbGxvY190eXBlX3N0YXRzIGFyZSB3cml0dGVuIG9ubHkgd2hlbiBob2xkaW5nIGEgY3JpdGlj
YWwKLSAqIHNlY3Rpb24gYW5kIHJ1bm5pbmcgb24gdGhlIENQVSBhc3NvY2lhdGVkIHdpdGggdGhl
IGluZGV4IGludG8gdGhlIHN0YXQKLSAqIGFycmF5LCBidXQgcmVhZCBsb2NrLWZyZWUgcmVzdWx0
aW5nIGluIHBvc3NpYmxlIChtaW5vcikgcmFjZXMsIHdoaWNoIHRoZQotICogbW9uaXRvcmluZyBh
cHAgc2hvdWxkIHRha2UgaW50byBhY2NvdW50LgotICovCi1zdHJ1Y3QgbWFsbG9jX3R5cGVfc3Rh
dHMgewotCXVpbnQ2NF90CW10c19tZW1hbGxvY2VkOwkvKiBCeXRlcyBhbGxvY2F0ZWQgb24gQ1BV
LiAqLwotCXVpbnQ2NF90CW10c19tZW1mcmVlZDsJLyogQnl0ZXMgZnJlZWQgb24gQ1BVLiAqLwot
CXVpbnQ2NF90CW10c19udW1hbGxvY3M7CS8qIE51bWJlciBvZiBhbGxvY2F0ZXMgb24gQ1BVLiAq
LwotCXVpbnQ2NF90CW10c19udW1mcmVlczsJLyogbnVtYmVyIG9mIGZyZWVzIG9uIENQVS4gKi8K
LQl1aW50NjRfdAltdHNfc2l6ZTsJLyogQml0bWFzayBvZiBzaXplcyBhbGxvY2F0ZWQgb24gQ1BV
LiAqLwotCXVpbnQ2NF90CV9tdHNfcmVzZXJ2ZWQxOwkvKiBSZXNlcnZlZCBmaWVsZC4gKi8KLQl1
aW50NjRfdAlfbXRzX3Jlc2VydmVkMjsJLyogUmVzZXJ2ZWQgZmllbGQuICovCi0JdWludDY0X3QJ
X210c19yZXNlcnZlZDM7CS8qIFJlc2VydmVkIGZpZWxkLiAqLwotfTsKLQotI2lmbmRlZiBNQVhD
UFUgLyogbmVjZXNzYXJ5IG9uIExpbnV4ICovCi0jZGVmaW5lIE1BWENQVSA0IC8qIGFyYml0cmFy
eT8gKi8KLSNlbmRpZgotCi1zdHJ1Y3QgbWFsbG9jX3R5cGVfaW50ZXJuYWwgewotCXN0cnVjdCBt
YWxsb2NfdHlwZV9zdGF0cwltdGlfc3RhdHNbTUFYQ1BVXTsKLX07Ci0KLS8qCi0gKiBBQkktY29t
cGF0aWJsZSB2ZXJzaW9uIG9mIHRoZSBvbGQgJ3N0cnVjdCBtYWxsb2NfdHlwZScsIG9ubHkgYWxs
IHN0YXRzIGFyZQotICogbm93IG1hbGxvYy1tYW5hZ2VkIGluIG1hbGxvYy1vd25lZCBtZW1vcnkg
cmF0aGVyIHRoYW4gaW4gY2FsbGVyIG1lbW9yeSwgc28KLSAqIGFzIHRvIGF2b2lkIEFCSSBpc3N1
ZXMuICBUaGUga3NfbmV4dCBwb2ludGVyIGlzIHJldXNlZCBhcyBhIHBvaW50ZXIgdG8gdGhlCi0g
KiBpbnRlcm5hbCBkYXRhIGhhbmRsZS4KLSAqLwotc3RydWN0IG1hbGxvY190eXBlIHsKLQlzdHJ1
Y3QgbWFsbG9jX3R5cGUgKmtzX25leHQ7CS8qIE5leHQgaW4gZ2xvYmFsIGNoYWluLiAqLwotCXVf
bG9uZwkJIF9rc19tZW11c2U7CS8qIE5vIGxvbmdlciB1c2VkLiAqLwotCXVfbG9uZwkJIF9rc19z
aXplOwkvKiBObyBsb25nZXIgdXNlZC4gKi8KLQl1X2xvbmcJCSBfa3NfaW51c2U7CS8qIE5vIGxv
bmdlciB1c2VkLiAqLwotCXVpbnQ2NF90CSBfa3NfY2FsbHM7CS8qIE5vIGxvbmdlciB1c2VkLiAq
LwotCXVfbG9uZwkJIF9rc19tYXh1c2VkOwkvKiBObyBsb25nZXIgdXNlZC4gKi8KLQl1X2xvbmcJ
CSBrc19tYWdpYzsJLyogRGV0ZWN0IHByb2dyYW1tZXIgZXJyb3IuICovCi0JY29uc3QgY2hhcgkq
a3Nfc2hvcnRkZXNjOwkvKiBQcmludGFibGUgdHlwZSBuYW1lLiAqLwotCi0JLyoKLQkgKiBzdHJ1
Y3QgbWFsbG9jX3R5cGUgd2FzIHRlcm1pbmF0ZWQgd2l0aCBhIHN0cnVjdCBtdHgsIHdoaWNoIGlz
IG5vCi0JICogbG9uZ2VyIHJlcXVpcmVkLiAgRm9yIEFCSSByZWFzb25zLCBjb250aW51ZSB0byBm
bGVzaCBvdXQgdGhlIGZ1bGwKLQkgKiBzaXplIG9mIHRoZSBvbGQgc3RydWN0dXJlLCBidXQgcmV1
c2UgdGhlIF9sb19jbGFzcyBmaWVsZCBmb3Igb3VyCi0JICogaW50ZXJuYWwgZGF0YSBoYW5kbGUu
Ci0JICovCi0Jdm9pZAkJKmtzX2hhbmRsZTsJLyogUHJpdi4gZGF0YSwgd2FzIGxvX2NsYXNzLiAq
LwotCWNvbnN0IGNoYXIJKl9sb19uYW1lOwotCWNvbnN0IGNoYXIJKl9sb190eXBlOwotCXVfaW50
CQkgX2xvX2ZsYWdzOwotCXZvaWQJCSpfbG9fbGlzdF9uZXh0OwotCXN0cnVjdCB3aXRuZXNzCSpf
bG9fd2l0bmVzczsKLQl1aW50cHRyX3QJIF9tdHhfbG9jazsKLQl1X2ludAkJIF9tdHhfcmVjdXJz
ZTsKLX07Ci0KLS8qCi0gKiBTdGF0aXN0aWNzIHN0cnVjdHVyZSBoZWFkZXJzIGZvciB1c2VyIHNw
YWNlLiAgVGhlIGtlcm4ubWFsbG9jIHN5c2N0bAotICogZXhwb3NlcyBhIHN0cnVjdHVyZSBzdHJl
YW0gY29uc2lzdGluZyBvZiBhIHN0cmVhbSBoZWFkZXIsIHRoZW4gYSBzZXJpZXMgb2YKLSAqIG1h
bGxvYyB0eXBlIGhlYWRlcnMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAocXVhbnRpdHkgbWF4
Y3B1cykuICBGb3IKLSAqIGNvbnZlbmllbmNlLCB0aGUga2VybmVsIHdpbGwgcHJvdmlkZSB0aGUg
Y3VycmVudCB2YWx1ZSBvZiBtYXhjcHVzIGF0IHRoZQotICogaGVhZCBvZiB0aGUgc3RyZWFtLgot
ICovCi0jZGVmaW5lCU1BTExPQ19UWVBFX1NUUkVBTV9WRVJTSU9OCTB4MDAwMDAwMDEKLXN0cnVj
dCBtYWxsb2NfdHlwZV9zdHJlYW1faGVhZGVyIHsKLQl1aW50MzJfdAltdHNoX3ZlcnNpb247CS8q
IFN0cmVhbSBmb3JtYXQgdmVyc2lvbi4gKi8KLQl1aW50MzJfdAltdHNoX21heGNwdXM7CS8qIFZh
bHVlIG9mIE1BWENQVSBmb3Igc3RyZWFtLiAqLwotCXVpbnQzMl90CW10c2hfY291bnQ7CS8qIE51
bWJlciBvZiByZWNvcmRzLiAqLwotCXVpbnQzMl90CV9tdHNoX3BhZDsJLyogUGFkL3Jlc2VydmVk
IGZpZWxkLiAqLwotfTsKLQotI2RlZmluZQlNQUxMT0NfTUFYX05BTUUJMzIKLXN0cnVjdCBtYWxs
b2NfdHlwZV9oZWFkZXIgewotCWNoYXIJCQkJbXRoX25hbWVbTUFMTE9DX01BWF9OQU1FXTsKLX07
Ci0KLS8qIF9fVXNlcnNwYWNlX18KLU5vdGljZSB0aGF0IGF0IHBsYWNlcyBpdCB1c2VzIGlmZGVm
IF9LRVJORUwuIFRoYXQgbGluZSBjYW5ub3QgYmUKLXJlbW92ZWQgYmVjYXVzZSBpdCBjYXVzZXMg
Y29uZmxpY3RzIHdpdGggbWFsbG9jIGRlZmluaXRpb24gaW4KLS91c3IvaW5jbHVkZS9tYWxsb2Mu
aCwgd2hpY2ggZXNzZW50aWFsbHkgc2F5cyB0aGF0IG1hbGxvYy5oIGhhcwotYmVlbiBvdmVycmlk
ZGVuIGJ5IHN0ZGxpYi5oLiBXZSB3aWxsIG5lZWQgdG8gdXNlIG5hbWVzIGxpa2UKLXVzZXJfbWFs
bG9jLmggZm9yIGlzb2xhdGluZyBrZXJuZWwgaW50ZXJmYWNlIGhlYWRlcnMuIHVzaW5nCi1vcmln
aW5hbCBuYW1lcyBsaWtlIG1hbGxvYy5oIGluIGEgdXNlcl9pbmNsdWRlIGhlYWRlciBjYW4gYmUK
LWNvbmZ1c2luZywgQWxsIHVzZXJzcGFjZSBoZWFkZXIgZmlsZXMgYXJlIGJlaW5nIHBsYWNlZCBp
biAuL3VzZXJfaW5jbHVkZQotQmV0dGVyIHN0aWxsIHRvIHJlbW92ZSBmcm9tIHVzZXJfaW5jbHVk
ZS5oIGFsbCBpcnJlbGV2YW50IGNvZGUgc3VjaAotYXMgdGhhdCBpbiB0aGUgYmxvY2sgc3RhcnRp
bmcgd2l0aCAjaWZkZWYgX0tFUk5FTC4gSSBhbSBvbmx5IGxlYXZpbmcKLWl0IGluIGZvciB0aGUg
dGltZSBiZWluZyB0byBzZWUgd2hhdCBmdW5jdGlvbmFsaXR5IGlzIGluIHRoaXMgZmlsZQotdGhh
dCBrZXJuZWwgdXNlcy4KLQotU3RhcnQgY29weTogQ29waWVkIGNvZGUgZm9yIF9fVXNlcnNwYWNl
X18gKi8KLSNkZWZpbmUJTUFMTE9DX0RFRklORSh0eXBlLCBzaG9ydGRlc2MsIGxvbmdkZXNjKQkJ
CVwKLQlzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXSA9IHsJCQkJCVwKLQkJeyBOVUxMLCAwLCAw
LCAwLCAwLCAwLCBNX01BR0lDLCBzaG9ydGRlc2MsIE5VTEwsIE5VTEwsCVwKLQkJICAgIE5VTEws
IDAsIE5VTEwsIE5VTEwsIDAsIDAgfQkJCQlcCi0JfQotCi0vKiBSZW1vdmVkICJleHRlcm4iIGlu
IF9fVXNlcnNwYWNlX18gY29kZSAqLwotLyogSWYgd2UgbmVlZCB0byB1c2UgTUFMTE9DX0RFQ0xB
UkUgYmVmb3JlIHVzaW5nIE1BTExPQyB0aGVuCi0gICB3ZSBoYXZlIHRvIHJlbW92ZSBleHRlcm4u
Ci0gICAgIEluIC91c3IvaW5jbHVkZS9zeXMvbWFsbG9jLmggdGhlcmUgaXMgdGhpcyBkZWZpbml0
aW9uOgotICAgICAjZGVmaW5lICAgIE1BTExPQ19ERUNMQVJFKHR5cGUpIFwKLSAgICAgICAgZXh0
ZXJuIHN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdCi0gICAgIGFuZCBsb2FkZXIgaXMgdW5hYmxl
IHRvIGZpbmQgdGhlIGV4dGVybiBtYWxsb2NfdHlwZSBiZWNhdXNlCi0gICAgIGl0IG1heSBiZSBk
ZWZpbmVkIGluIG9uZSBvZiBrZXJuZWwgb2JqZWN0IGZpbGVzLgotICAgICBJdCBzZWVtcyB0aGF0
IE1BTExPQ19ERUNMQVJFIGFuZCBNQUxMT0NfREVGSU5FIGNhbm5vdCBiZSB1c2VkIGF0Ci0gICAg
IHRoZSBzYW1lIHRpbWUgZm9yIHNhbWUgInR5cGUiIHZhcmlhYmxlLiBBbHNvLCBpbiBSYW5kYWxs
J3MgYXJjaGl0ZWN0dXJlCi0gICAgIGRvY3VtZW50LCB3aGVyZSBpdCBzcGVjaWZpZXMgTy9TIHNw
ZWNpZmljIG1hY3JvcyBhbmQgZnVuY3Rpb25zLCBpdCBzYXlzCi0gICAgIHRoYXQgdGhlIG5hbWUg
aW4gU0NUUF9NQUxMT0MgZG9lcyBub3QgaGF2ZSB0byBiZSB1c2VkLgotKi8KLSNkZWZpbmUJTUFM
TE9DX0RFQ0xBUkUodHlwZSkgXAotCWV4dGVybiBzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXQot
Ci0jZGVmaW5lCUZSRUUoYWRkciwgdHlwZSkgZnJlZSgoYWRkcikpCi0KLS8qIGNoYW5nZWQgZGVm
aW5pdGlvbnMgb2YgTUFMTE9DIGFuZCBGUkVFICovCi0vKiBVc2luZyBtZW1zZXQgaWYgZmxhZyBN
X1pFUk8gaXMgc3BlY2lmaWVkLiBUb2RvOiBNX1dBSVRPSyBhbmQgTV9OT1dBSVQgKi8KLSNkZWZp
bmUJTUFMTE9DKHNwYWNlLCBjYXN0LCBzaXplLCB0eXBlLCBmbGFncykgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKLSAgICAoKHNwYWNlKSA9IChjYXN0KW1hbGxvYygodV9sb25nKShzaXplKSkp
OyAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICBkbyB7CQkJCQkJCQlcCi0gICAgICAg
IGlmIChmbGFncyAmIE1fWkVSTykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotCSAgbWVtc2V0KHNwYWNlLDAsc2l6ZSk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCi0JfQkJCQkJCQkJXAotICAgIH0gd2hpbGUgKDApOwotCi0K
LS8qIEVuZCBjb3B5OiBDb3BpZWQgY29kZSBmb3IgX19Vc2Vyc3BhY2VfXyAqLwotCi0jaWYgMAot
I2lmZGVmIF9LRVJORUwKLSNkZWZpbmUJTUFMTE9DX0RFRklORSh0eXBlLCBzaG9ydGRlc2MsIGxv
bmdkZXNjKQkJCVwKLQlzdHJ1Y3QgbWFsbG9jX3R5cGUgdHlwZVsxXSA9IHsJCQkJCVwKLQkJeyBO
VUxMLCAwLCAwLCAwLCAwLCAwLCBNX01BR0lDLCBzaG9ydGRlc2MsIE5VTEwsIE5VTEwsCVwKLQkJ
ICAgIE5VTEwsIDAsIE5VTEwsIE5VTEwsIDAsIDAgfQkJCQlcCi0JfTsJCQkJCQkJCVwKLQlTWVNJ
TklUKHR5cGUjI19pbml0LCBTSV9TVUJfS01FTSwgU0lfT1JERVJfU0VDT05ELCBtYWxsb2NfaW5p
dCwJXAotCSAgICB0eXBlKTsJCQkJCQkJXAotCVNZU1VOSU5JVCh0eXBlIyNfdW5pbml0LCBTSV9T
VUJfS01FTSwgU0lfT1JERVJfQU5ZLAkJXAotCSAgICBtYWxsb2NfdW5pbml0LCB0eXBlKQotCi0K
LSNkZWZpbmUJTUFMTE9DX0RFQ0xBUkUodHlwZSkgXAotCWV4dGVybiBzdHJ1Y3QgbWFsbG9jX3R5
cGUgdHlwZVsxXQotCi1NQUxMT0NfREVDTEFSRShNX0NBQ0hFKTsKLU1BTExPQ19ERUNMQVJFKE1f
REVWQlVGKTsKLU1BTExPQ19ERUNMQVJFKE1fVEVNUCk7Ci0KLU1BTExPQ19ERUNMQVJFKE1fSVA2
T1BUKTsgLyogZm9yIElORVQ2ICovCi1NQUxMT0NfREVDTEFSRShNX0lQNk5EUCk7IC8qIGZvciBJ
TkVUNiAqLwotCi0vKgotICogRGVwcmVjYXRlZCBtYWNybyB2ZXJzaW9ucyBvZiBub3QtcXVpdGUt
bWFsbG9jKCkgYW5kIGZyZWUoKS4KLSAqLwotI2RlZmluZQlNQUxMT0Moc3BhY2UsIGNhc3QsIHNp
emUsIHR5cGUsIGZsYWdzKSBcCi0JKChzcGFjZSkgPSAoY2FzdCltYWxsb2MoKHVfbG9uZykoc2l6
ZSksICh0eXBlKSwgKGZsYWdzKSkpCi0jZGVmaW5lCUZSRUUoYWRkciwgdHlwZSkgZnJlZSgoYWRk
ciksICh0eXBlKSkKLQotLyoKLSAqIFhYWCB0aGlzIHNob3VsZCBiZSBkZWNsYXJlZCBpbiA8c3lz
L3Vpby5oPiwgYnV0IHRoYXQgdGVuZHMgdG8gZmFpbAotICogYmVjYXVzZSA8c3lzL3Vpby5oPiBp
cyBpbmNsdWRlZCBpbiBhIGhlYWRlciBiZWZvcmUgdGhlIHNvdXJjZSBmaWxlCi0gKiBoYXMgYSBj
aGFuY2UgdG8gaW5jbHVkZSA8c3lzL21hbGxvYy5oPiB0byBnZXQgTUFMTE9DX0RFQ0xBUkUoKSBk
ZWZpbmVkLgotICovCi1NQUxMT0NfREVDTEFSRShNX0lPVik7Ci0KLWV4dGVybiBzdHJ1Y3QgbXR4
IG1hbGxvY19tdHg7Ci0KLS8qIFhYWCBzdHJ1Y3QgbWFsbG9jX3R5cGUgaXMgdW51c2VkIGZvciBj
b250aWcqKCkuICovCi12b2lkCWNvbnRpZ2ZyZWUodm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBz
aXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUpOwotdm9pZAkqY29udGlnbWFsbG9jKHVuc2ln
bmVkIGxvbmcgc2l6ZSwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCBpbnQgZmxhZ3MsCi0JICAg
IHZtX3BhZGRyX3QgbG93LCB2bV9wYWRkcl90IGhpZ2gsIHVuc2lnbmVkIGxvbmcgYWxpZ25tZW50
LAotCSAgICB1bnNpZ25lZCBsb25nIGJvdW5kYXJ5KTsKLXZvaWQJZnJlZSh2b2lkICphZGRyLCBz
dHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUpOwotdm9pZAkqbWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6
ZSwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLCBpbnQgZmxhZ3MpOwotdm9pZAltYWxsb2NfaW5p
dCh2b2lkICopOwotaW50CW1hbGxvY19sYXN0X2ZhaWwodm9pZCk7Ci12b2lkCW1hbGxvY190eXBl
X2FsbG9jYXRlZChzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7
Ci12b2lkCW1hbGxvY190eXBlX2ZyZWVkKHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdW5zaWdu
ZWQgbG9uZyBzaXplKTsKLXZvaWQJbWFsbG9jX3VuaW5pdCh2b2lkICopOwotdm9pZAkqcmVhbGxv
Yyh2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlw
ZSwKLQkgICAgaW50IGZsYWdzKTsKLXZvaWQJKnJlYWxsb2NmKHZvaWQgKmFkZHIsIHVuc2lnbmVk
IGxvbmcgc2l6ZSwgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLAotCSAgICBpbnQgZmxhZ3MpOwot
Ci0KLSNlbmRpZiAvKiBfS0VSTkVMICovCi0jZW5kaWYKLQotI2VuZGlmIC8qICFfU1lTX01BTExP
Q19IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2Vy
X21idWYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2ViZDhhMjdiNmI3N2QwYWI1
OGE2M2M5ZTc3ZDJiY2RmMTUzMTcyYi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX21idWYuYworKysgL2Rldi9udWxsCkBAIC0xLDE0
MjkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5ODgsIDE5OTMK
LSAqICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9m
IHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0
aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFO
RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVH
RU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICog
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAq
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoK
LSAqLwotCi0vKgotICogIF9fVXNlcnNwYWNlX18gdmVyc2lvbiBvZiAvdXNyL3NyYy9zeXMva2Vy
bi9rZXJuX21idWYuYwotICogIFdlIGFyZSBpbml0aWFsaXppbmcgdHdvIHpvbmVzIGZvciBNYnVm
cyBhbmQgQ2x1c3RlcnMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUg
PHN0cmluZy5oPgotLyogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPiBUaGlzIGRlZmluZXMgTVNJWkUg
MjU2ICovCi0jaWYgIWRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotI2luY2x1ZGUgInVt
ZW0uaCIKLSNlbmRpZgotI2luY2x1ZGUgInVzZXJfbWJ1Zi5oIgotI2luY2x1ZGUgInVzZXJfZW52
aXJvbm1lbnQuaCIKLSNpbmNsdWRlICJ1c2VyX2F0b21pYy5oIgotI2luY2x1ZGUgIm5ldGluZXQv
c2N0cF9wY2IuaCIKLQotc3RydWN0IG1ic3RhdCBtYnN0YXQ7Ci0jZGVmaW5lIEtJUENfTUFYX0xJ
TktIRFIgICAgICAgIDQgICAgICAgLyogaW50OiBtYXggbGVuZ3RoIG9mIGxpbmsgaGVhZGVyIChz
ZWUgc3lzL3N5c2NsdC5oKSAqLwotI2RlZmluZSBLSVBDX01BWF9QUk9UT0hEUgk1CS8qIGludDog
bWF4IGxlbmd0aCBvZiBuZXR3b3JrIGhlYWRlciAoc2VlIHN5cy9zeXNjbHQuaCkqLwotaW50IG1h
eF9saW5raGRyID0gS0lQQ19NQVhfTElOS0hEUjsKLWludCBtYXhfcHJvdG9oZHIgPSBLSVBDX01B
WF9QUk9UT0hEUjsgLyogU2l6ZSBvZiBsYXJnZXN0IHByb3RvY29sIGxheWVyIGhlYWRlci4gKi8K
LQotLyoKLSAqIFpvbmVzIGZyb20gd2hpY2ggd2UgYWxsb2NhdGUuCi0gKi8KLXNjdHBfem9uZV90
CXpvbmVfbWJ1ZjsKLXNjdHBfem9uZV90CXpvbmVfY2x1c3Q7Ci1zY3RwX3pvbmVfdAl6b25lX2V4
dF9yZWZjbnQ7Ci0KLS8qIF9fVXNlcnNwYWNlX18gY2x1c3RfbWJfYXJncyB3aWxsIGJlIHBhc3Nl
ZCBhcyBjYWxsYmFjayBkYXRhIHRvIG1iX2N0b3JfY2x1c3QKLSAqIGFuZCBtYl9kdG9yX2NsdXN0
LgotICogTm90ZTogSSBoYWQgdG8gdXNlIHN0cnVjdCBjbHVzdF9hcmdzIGFzIGFuIGVuY2Fwc3Vs
YXRpb24gZm9yIGFuIG1idWYgcG9pbnRlci4KLSAqIHN0cnVjdCBtYnVmICogY2x1c3RfbWJfYXJn
czsgZG9lcyBub3Qgd29yay4KLSAqLwotc3RydWN0IGNsdXN0X2FyZ3MgY2x1c3RfbWJfYXJnczsK
LQotCi0vKiBfX1VzZXJzcGFjZV9fCi0gKiBMb2NhbCBwcm90b3R5cGVzLgotICovCi1zdGF0aWMg
aW50CW1iX2N0b3JfbWJ1Zih2b2lkICosIHZvaWQgKiwgaW50KTsKLXN0YXRpYyBpbnQgICAgICBt
Yl9jdG9yX2NsdXN0KHZvaWQgKiwgdm9pZCAqLCBpbnQpOwotc3RhdGljIHZvaWQJbWJfZHRvcl9t
YnVmKHZvaWQgKiwgIHZvaWQgKik7Ci1zdGF0aWMgdm9pZAltYl9kdG9yX2NsdXN0KHZvaWQgKiwg
dm9pZCAqKTsKLQotCi0vKioqKioqKioqKioqKioqKiogRnVuY3Rpb25zIHRha2VuIGZyb20gdXNl
cl9tYnVmLmggKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCBtYnVmX2NvbnN0cnVjdG9yX2R1
cChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IHBrdGhkciwgc2hvcnQgdHlwZSkKLXsKLQlpbnQgZmxhZ3Mg
PSBwa3RoZHI7Ci0JaWYgKHR5cGUgPT0gTVRfTk9JTklUKQotCQlyZXR1cm4gKDApOwotCi0JbS0+
bV9uZXh0ID0gTlVMTDsKLQltLT5tX25leHRwa3QgPSBOVUxMOwotCW0tPm1fbGVuID0gMDsKLQlt
LT5tX2ZsYWdzID0gZmxhZ3M7Ci0JbS0+bV90eXBlID0gdHlwZTsKLQlpZiAoZmxhZ3MgJiBNX1BL
VEhEUikgewotCQltLT5tX2RhdGEgPSBtLT5tX3BrdGRhdDsKLQkJbS0+bV9wa3RoZHIucmN2aWYg
PSBOVUxMOwotCQltLT5tX3BrdGhkci5sZW4gPSAwOwotCQltLT5tX3BrdGhkci5oZWFkZXIgPSBO
VUxMOwotCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gMDsKLQkJbS0+bV9wa3RoZHIuY3N1bV9k
YXRhID0gMDsKLQkJbS0+bV9wa3RoZHIudHNvX3NlZ3N6ID0gMDsKLQkJbS0+bV9wa3RoZHIuZXRo
ZXJfdnRhZyA9IDA7Ci0JCVNMSVNUX0lOSVQoJm0tPm1fcGt0aGRyLnRhZ3MpOwotCX0gZWxzZQot
CQltLT5tX2RhdGEgPSBtLT5tX2RhdDsKLQotCXJldHVybiAoMCk7Ci19Ci0KLS8qIF9fVXNlcnNw
YWNlX18gKi8KLXN0cnVjdCBtYnVmICoKLW1fZ2V0KGludCBob3csIHNob3J0IHR5cGUpCi17Ci0J
c3RydWN0IG1idWYgKm1yZXQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0J
c3RydWN0IG1iX2FyZ3MgbWJ1Zl9tYl9hcmdzOwotCi0JLyogVGhlIGZvbGxvd2luZyBzZXR0ZXIg
ZnVuY3Rpb24gaXMgbm90IHlldCBiZWluZyBlbmNsb3NlZCB3aXRoaW4KLQkgKiAjaWYgVVNJTkdf
TUJVRl9DT05TVFJVQ1RPUiAtICNlbmRpZiwgdW50aWwgSSBoYXZlIHRob3JvdWdobHkgdGVzdGVk
Ci0JICogbWJfZHRvcl9tYnVmLiBTZWUgY29tbWVudCB0aGVyZQotCSAqLwotCW1idWZfbWJfYXJn
cy5mbGFncyA9IDA7Ci0JbWJ1Zl9tYl9hcmdzLnR5cGUgPSB0eXBlOwotI2VuZGlmCi0JLyogTWJ1
ZiBtYXN0ZXIgem9uZSwgem9uZV9tYnVmLCBoYXMgYWxyZWFkeSBiZWVuCi0JICogY3JlYXRlZCBp
biBtYnVmX2luaXRpYWxpemUoKSAqLwotCW1yZXQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfbWJ1Ziwg
c3RydWN0IG1idWYpOwotI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotCW1iX2N0
b3JfbWJ1ZihtcmV0LCAmbWJ1Zl9tYl9hcmdzLCAwKTsKLSNlbmRpZgotCS8qbXJldCA9ICAoKHN0
cnVjdCBtYnVmICopdW1lbV9jYWNoZV9hbGxvYyh6b25lX21idWYsIFVNRU1fREVGQVVMVCkpOyov
Ci0KLQkvKiBUaGVyZSBhcmUgY2FzZXMgd2hlbiBhbiBvYmplY3QgYXZhaWxhYmxlIGluIHRoZSBj
dXJyZW50IENQVSdzCi0JICogbG9hZGVkIG1hZ2F6aW5lIGFuZCBpbiB0aG9zZSBjYXNlcyB0aGUg
b2JqZWN0J3MgY29uc3RydWN0b3IgaXMgbm90IGFwcGxpZWQuCi0JICogSWYgdGhhdCBpcyB0aGUg
Y2FzZSwgdGhlbiB3ZSBhcmUgZHVwbGljYXRpbmcgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24g
aGVyZSwKLQkgKiBzbyB0aGF0IHRoZSBtYnVmIGlzIHByb3Blcmx5IGNvbnN0cnVjdGVkIGJlZm9y
ZSByZXR1cm5pbmcgaXQuCi0JICovCi0JaWYgKG1yZXQpIHsKLSNpZiBVU0lOR19NQlVGX0NPTlNU
UlVDVE9SCi0JCWlmICghIChtcmV0LT5tX3R5cGUgPT0gdHlwZSkgKSB7Ci0JCQltYnVmX2NvbnN0
cnVjdG9yX2R1cChtcmV0LCAwLCB0eXBlKTsKLQkJfQotI2Vsc2UKLQkJbWJ1Zl9jb25zdHJ1Y3Rv
cl9kdXAobXJldCwgMCwgdHlwZSk7Ci0jZW5kaWYKLQotCX0KLQlyZXR1cm4gbXJldDsKLX0KLQot
Ci0vKiBfX1VzZXJzcGFjZV9fICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX2dldGhkcihpbnQgaG93LCBz
aG9ydCB0eXBlKQotewotCXN0cnVjdCBtYnVmICptcmV0OwotI2lmIGRlZmluZWQoU0NUUF9TSU1Q
TEVfQUxMT0NBVE9SKQotCXN0cnVjdCBtYl9hcmdzIG1idWZfbWJfYXJnczsKLQotCS8qIFRoZSBm
b2xsb3dpbmcgc2V0dGVyIGZ1bmN0aW9uIGlzIG5vdCB5ZXQgYmVpbmcgZW5jbG9zZWQgd2l0aGlu
Ci0JICogI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IgLSAjZW5kaWYsIHVudGlsIEkgaGF2ZSB0
aG9yb3VnaGx5IHRlc3RlZAotCSAqIG1iX2R0b3JfbWJ1Zi4gU2VlIGNvbW1lbnQgdGhlcmUKLQkg
Ki8KLQltYnVmX21iX2FyZ3MuZmxhZ3MgPSBNX1BLVEhEUjsKLQltYnVmX21iX2FyZ3MudHlwZSA9
IHR5cGU7Ci0jZW5kaWYKLQltcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX21idWYsIHN0cnVjdCBt
YnVmKTsKLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQltYl9jdG9yX21idWYo
bXJldCwgJm1idWZfbWJfYXJncywgMCk7Ci0jZW5kaWYKLQkvKm1yZXQgPSAoKHN0cnVjdCBtYnVm
ICopdW1lbV9jYWNoZV9hbGxvYyh6b25lX21idWYsIFVNRU1fREVGQVVMVCkpOyovCi0JLyogVGhl
cmUgYXJlIGNhc2VzIHdoZW4gYW4gb2JqZWN0IGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBDUFUn
cwotCSAqIGxvYWRlZCBtYWdhemluZSBhbmQgaW4gdGhvc2UgY2FzZXMgdGhlIG9iamVjdCdzIGNv
bnN0cnVjdG9yIGlzIG5vdCBhcHBsaWVkLgotCSAqIElmIHRoYXQgaXMgdGhlIGNhc2UsIHRoZW4g
d2UgYXJlIGR1cGxpY2F0aW5nIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uIGhlcmUsCi0JICog
c28gdGhhdCB0aGUgbWJ1ZiBpcyBwcm9wZXJseSBjb25zdHJ1Y3RlZCBiZWZvcmUgcmV0dXJuaW5n
IGl0LgotCSAqLwotCWlmIChtcmV0KSB7Ci0jaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RPUgotCQlp
ZiAoISAoKG1yZXQtPm1fZmxhZ3MgJiBNX1BLVEhEUikgJiYgKG1yZXQtPm1fdHlwZSA9PSB0eXBl
KSkgKSB7Ci0JCQltYnVmX2NvbnN0cnVjdG9yX2R1cChtcmV0LCBNX1BLVEhEUiwgdHlwZSk7Ci0J
CX0KLSNlbHNlCi0JCW1idWZfY29uc3RydWN0b3JfZHVwKG1yZXQsIE1fUEtUSERSLCB0eXBlKTsK
LSNlbmRpZgotCX0KLQlyZXR1cm4gbXJldDsKLX0KLQotLyogX19Vc2Vyc3BhY2VfXyAqLwotc3Ry
dWN0IG1idWYgKgotbV9mcmVlKHN0cnVjdCBtYnVmICptKQotewotCi0Jc3RydWN0IG1idWYgKm4g
PSBtLT5tX25leHQ7Ci0KLQlpZiAobS0+bV9mbGFncyAmIE1fRVhUKQotCQltYl9mcmVlX2V4dCht
KTsKLQllbHNlIGlmICgobS0+bV9mbGFncyAmIE1fTk9GUkVFKSA9PSAwKSB7Ci0jaWYgZGVmaW5l
ZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0JCW1iX2R0b3JfbWJ1ZihtLCBOVUxMKTsKLSNlbmRp
ZgotCQlTQ1RQX1pPTkVfRlJFRSh6b25lX21idWYsIG0pOwotCX0KLQkJLyp1bWVtX2NhY2hlX2Zy
ZWUoem9uZV9tYnVmLCBtKTsqLwotCXJldHVybiAobik7Ci19Ci0KLQotc3RhdGljIGludCBjbHVz
dF9jb25zdHJ1Y3Rvcl9kdXAoY2FkZHJfdCBtX2NsdXN0LCBzdHJ1Y3QgbWJ1ZiogbSkKLXsKLQl1
X2ludCAqcmVmY250OwotCWludCB0eXBlLCBzaXplOwotCi0JLyogQXNzaWduaW5nIGNsdXN0ZXIg
b2YgTUNMQllURVMuIFRPRE86IEFkZCBqdW1ibyBmcmFtZSBmdW5jdGlvbmFsaXR5ICovCi0JdHlw
ZSA9IEVYVF9DTFVTVEVSOwotCXNpemUgPSBNQ0xCWVRFUzsKLQotCXJlZmNudCA9IFNDVFBfWk9O
RV9HRVQoem9uZV9leHRfcmVmY250LCB1X2ludCk7Ci0JLypyZWZjbnQgPSAodV9pbnQgKil1bWVt
X2NhY2hlX2FsbG9jKHpvbmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLwotCWlmIChyZWZj
bnQgPT0gTlVMTCkgewotI2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQkJdW1l
bV9yZWFwKCk7Ci0jZW5kaWYKLQkJcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9yZWZj
bnQsIHVfaW50KTsKLQkJLypyZWZjbnQgPSAodV9pbnQgKil1bWVtX2NhY2hlX2FsbG9jKHpvbmVf
ZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLwotCX0KLQkqcmVmY250ID0gMTsKLQlpZiAobSAh
PSBOVUxMKSB7Ci0JCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltX2NsdXN0OwotCQltLT5t
X2RhdGEgPSBtLT5tX2V4dC5leHRfYnVmOwotCQltLT5tX2ZsYWdzIHw9IE1fRVhUOwotCQltLT5t
X2V4dC5leHRfZnJlZSA9IE5VTEw7Ci0JCW0tPm1fZXh0LmV4dF9hcmdzID0gTlVMTDsKLQkJbS0+
bV9leHQuZXh0X3NpemUgPSBzaXplOwotCQltLT5tX2V4dC5leHRfdHlwZSA9IHR5cGU7Ci0JCW0t
Pm1fZXh0LnJlZl9jbnQgPSByZWZjbnQ7Ci0JfSBlbHNlCi0JCVNDVFBfWk9ORV9GUkVFKHpvbmVf
ZXh0X3JlZmNudCwgcmVmY250KTsKLQotCXJldHVybiAoMCk7Ci19Ci0KLQotCi0vKiBfX1VzZXJz
cGFjZV9fICovCi12b2lkCi1tX2NsZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93KQotewotCWNh
ZGRyX3QgbWNsdXN0X3JldDsKLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQlz
dHJ1Y3QgY2x1c3RfYXJncyBjbHVzdF9tYl9hcmdzX2w7Ci0jZW5kaWYKLQlpZiAobS0+bV9mbGFn
cyAmIE1fRVhUKSB7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogJXAgbWJ1ZiBhbHJl
YWR5IGhhcyBjbHVzdGVyXG4iLCBfX2Z1bmNfXywgKHZvaWQgKiltKTsKLQl9Ci0JbS0+bV9leHQu
ZXh0X2J1ZiA9IChjaGFyICopTlVMTDsKLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRP
UikKLQljbHVzdF9tYl9hcmdzX2wucGFyZW50X21idWYgPSBtOwotI2VuZGlmCi0JbWNsdXN0X3Jl
dCA9IFNDVFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJ
TVBMRV9BTExPQ0FUT1IpCi0JbWJfY3Rvcl9jbHVzdChtY2x1c3RfcmV0LCAmY2x1c3RfbWJfYXJn
c19sLCAwKTsKLSNlbmRpZgotCS8qbWNsdXN0X3JldCA9IHVtZW1fY2FjaGVfYWxsb2Moem9uZV9j
bHVzdCwgVU1FTV9ERUZBVUxUKTsqLwotCS8qCi0JIE9uIGEgY2x1c3RlciBhbGxvY2F0aW9uIGZh
aWx1cmUsIGNhbGwgdW1lbV9yZWFwKCkgYW5kIHJldHJ5LgotCSAqLwotCi0JaWYgKG1jbHVzdF9y
ZXQgPT0gTlVMTCkgewotI2lmICFkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQkvKglt
Y2x1c3RfcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKLQkJbWJfY3Rvcl9j
bHVzdChtY2x1c3RfcmV0LCAmY2x1c3RfbWJfYXJncywgMCk7Ci0jZWxzZSovCi0JCXVtZW1fcmVh
cCgpOwotCQltY2x1c3RfcmV0ID0gU0NUUF9aT05FX0dFVCh6b25lX2NsdXN0LCBjaGFyKTsKLSNl
bmRpZgotCQkvKm1jbHVzdF9yZXQgPSB1bWVtX2NhY2hlX2FsbG9jKHpvbmVfY2x1c3QsIFVNRU1f
REVGQVVMVCk7Ki8KLQkJaWYgKE5VTEwgPT0gbWNsdXN0X3JldCkgewotCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIk1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUgaW4gJXNcbiIsIF9fZnVuY19f
KTsKLQkJfQotCX0KLQotI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKLQlpZiAoKG0tPm1fZXh0
LmV4dF9idWYgPT0gTlVMTCkpIHsKLQkJY2x1c3RfY29uc3RydWN0b3JfZHVwKG1jbHVzdF9yZXQs
IG0pOwotCX0KLSNlbHNlCi0JY2x1c3RfY29uc3RydWN0b3JfZHVwKG1jbHVzdF9yZXQsIG0pOwot
I2VuZGlmCi19Ci0KLS8qCi0gKiBVbmxpbmsgYSB0YWcgZnJvbSB0aGUgbGlzdCBvZiB0YWdzIGFz
c29jaWF0ZWQgd2l0aCBhbiBtYnVmLgotICovCi1zdGF0aWMgX19pbmxpbmUgdm9pZAotbV90YWdf
dW5saW5rKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCi17Ci0KLQlTTElTVF9SRU1P
VkUoJm0tPm1fcGt0aGRyLnRhZ3MsIHQsIG1fdGFnLCBtX3RhZ19saW5rKTsKLX0KLQotLyoKLSAq
IFJlY2xhaW0gcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIHRhZy4KLSAqLwotc3RhdGljIF9f
aW5saW5lIHZvaWQKLW1fdGFnX2ZyZWUoc3RydWN0IG1fdGFnICp0KQotewotCi0JKCp0LT5tX3Rh
Z19mcmVlKSh0KTsKLX0KLQotLyoKLSAqIFNldCB1cCB0aGUgY29udGVudHMgb2YgYSB0YWcuICBO
b3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBmaWxsIGluIHRoZSBmcmVlCi0gKiBtZXRob2Q7IHRoZSBj
YWxsZXIgaXMgZXhwZWN0ZWQgdG8gZG8gdGhhdC4KLSAqCi0gKiBYWFggcHJvYmFibHkgc2hvdWxk
IGJlIGNhbGxlZCBtX3RhZ19pbml0LCBidXQgdGhhdCB3YXMgYWxyZWFkeSB0YWtlbi4KLSAqLwot
c3RhdGljIF9faW5saW5lIHZvaWQKLW1fdGFnX3NldHVwKHN0cnVjdCBtX3RhZyAqdCwgdV9pbnQz
Ml90IGNvb2tpZSwgaW50IHR5cGUsIGludCBsZW4pCi17Ci0KLQl0LT5tX3RhZ19pZCA9IHR5cGU7
Ci0JdC0+bV90YWdfbGVuID0gbGVuOwotCXQtPm1fdGFnX2Nvb2tpZSA9IGNvb2tpZTsKLX0KLQot
LyoqKioqKioqKioqKiBFbmQgZnVuY3Rpb25zIGZyb20gdXNlcl9tYnVmLmggICoqKioqKioqKioq
KioqKioqKi8KLQotCi0KLS8qKioqKioqKioqKiogRW5kIGZ1bmN0aW9ucyB0byBzdWJzdGl0dXRl
IHVtZW1fY2FjaGVfYWxsb2MgYW5kIHVtZW1fY2FjaGVfZnJlZSAqKioqKioqKioqKioqKi8KLQot
dm9pZAotbWJ1Zl9pbml0aWFsaXplKHZvaWQgKmR1bW15KQotewotCi0JLyoKLQkgKiBfX1VzZXJz
cGFjZV9fQ29uZmlndXJlIFVNQSB6b25lcyBmb3IgTWJ1ZnMgYW5kIENsdXN0ZXJzLgotCSAqIChU
T0RPOiBtX2dldGNsKCkgLSB1c2luZyBwYWNrZXQgc2Vjb25kYXJ5IHpvbmUpLgotCSAqIFRoZXJl
IGlzIG5vIHByb3Zpc2lvbiBmb3IgdHJhc2hfaW5pdCBhbmQgdHJhc2hfZmluaSBpbiB1bWVtLgot
CSAqCi0JICovCi0gLyogem9uZV9tYnVmID0gdW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9NRU1fTkFN
RSwgTVNJWkUsIDAsCi0JCQkJbWJfY3Rvcl9tYnVmLCBtYl9kdG9yX21idWYsIE5VTEwsCi0JCQkJ
Jm1idWZfbWJfYXJncywKLQkJCQlOVUxMLCAwKTsKLQl6b25lX21idWYgPSB1bWVtX2NhY2hlX2Ny
ZWF0ZShNQlVGX01FTV9OQU1FLCBNU0laRSwgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVM
TCwgMCk7Ki8KLSNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKLQlTQ1RQX1pPTkVf
SU5JVCh6b25lX21idWYsIE1CVUZfTUVNX05BTUUsIE1TSVpFLCAwKTsKLSNlbHNlCi0Jem9uZV9t
YnVmID0gdW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9NRU1fTkFNRSwgTVNJWkUsIDAsCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWJfY3Rvcl9tYnVmLCBtYl9kdG9yX21idWYsIE5VTEws
Ci0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVVTEwsCi0JICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCwgMCk7Ci0jZW5kaWYKLQkvKnpvbmVfZXh0X3JlZmNudCA9IHVt
ZW1fY2FjaGVfY3JlYXRlKE1CVUZfRVhUUkVGQ05UX01FTV9OQU1FLCBzaXplb2YodV9pbnQpLCAw
LAotCQkJCU5VTEwsIE5VTEwsIE5VTEwsCi0JCQkJTlVMTCwKLQkJCQlOVUxMLCAwKTsqLwotCVND
VFBfWk9ORV9JTklUKHpvbmVfZXh0X3JlZmNudCwgTUJVRl9FWFRSRUZDTlRfTUVNX05BTUUsIHNp
emVvZih1X2ludCksIDApOwotCi0gIC8qem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1C
VUZfQ0xVU1RFUl9NRU1fTkFNRSwgTUNMQllURVMsIDAsCi0JCQkJIG1iX2N0b3JfY2x1c3QsIG1i
X2R0b3JfY2x1c3QsIE5VTEwsCi0JCQkJICZjbHVzdF9tYl9hcmdzLAotCQkJCSBOVUxMLCAwKTsK
LQl6b25lX2NsdXN0ID0gdW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9DTFVTVEVSX01FTV9OQU1FLCBN
Q0xCWVRFUywgMCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCwwKTsqLwotI2lmIGRlZmlu
ZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotCVNDVFBfWk9ORV9JTklUKHpvbmVfY2x1c3QsIE1C
VUZfQ0xVU1RFUl9NRU1fTkFNRSwgTUNMQllURVMsIDApOwotI2Vsc2UKLQl6b25lX2NsdXN0ID0g
dW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9DTFVTVEVSX01FTV9OQU1FLCBNQ0xCWVRFUywgMCwKLQkJ
CQkJCQkJICAgbWJfY3Rvcl9jbHVzdCwgbWJfZHRvcl9jbHVzdCwgTlVMTCwKLQkJCQkJCQkJICAg
JmNsdXN0X21iX2FyZ3MsCi0JCQkJCQkJCSAgIE5VTEwsIDApOwotI2VuZGlmCi0KLQkvKiB1bWFf
cHJlYWxsb2MoKSBnb2VzIGhlcmUuLi4gKi8KLQotCS8qIF9fVXNlcnNwYWNlX18gQWRkIHVtZW1f
cmVhcCBoZXJlIGZvciBsb3cgbWVtb3J5IHNpdHVhdGlvbj8KLQkgKgotCSAqLwotCi0KLQkvKgot
CSAqIFtSZV1zZXQgY291bnRlcnMgYW5kIGxvY2FsIHN0YXRpc3RpY3Mga25vYnMuCi0JICoKLQkg
Ki8KLQotCW1ic3RhdC5tX21idWZzID0gMDsKLQltYnN0YXQubV9tY2x1c3RzID0gMDsKLQltYnN0
YXQubV9kcmFpbiA9IDA7Ci0JbWJzdGF0Lm1fbXNpemUgPSBNU0laRTsKLQltYnN0YXQubV9tY2xi
eXRlcyA9IE1DTEJZVEVTOwotCW1ic3RhdC5tX21pbmNsc2l6ZSA9IE1JTkNMU0laRTsKLQltYnN0
YXQubV9tbGVuID0gTUxFTjsKLQltYnN0YXQubV9taGxlbiA9IE1ITEVOOwotCW1ic3RhdC5tX251
bXR5cGVzID0gTVRfTlRZUEVTOwotCi0JbWJzdGF0Lm1fbWNmYWlsID0gbWJzdGF0Lm1fbXBmYWls
ID0gMDsKLQltYnN0YXQuc2ZfaW9jbnQgPSAwOwotCW1ic3RhdC5zZl9hbGxvY3dhaXQgPSBtYnN0
YXQuc2ZfYWxsb2NmYWlsID0gMDsKLQotfQotCi0KLQotLyoKLSAqIF9fVXNlcnNwYWNlX18KLSAq
Ci0gKiBDb25zdHJ1Y3RvciBmb3IgTWJ1ZiBtYXN0ZXIgem9uZS4gV2UgaGF2ZSBhIGRpZmZlcmVu
dCBjb25zdHJ1Y3RvcgotICogZm9yIGFsbG9jYXRpbmcgdGhlIGNsdXN0ZXIuCi0gKgotICogVGhl
ICdhcmcnIHBvaW50ZXIgcG9pbnRzIHRvIGEgbWJfYXJncyBzdHJ1Y3R1cmUgd2hpY2gKLSAqIGNv
bnRhaW5zIGNhbGwtc3BlY2lmaWMgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gc3VwcG9ydCB0aGUK
LSAqIG1idWYgYWxsb2NhdGlvbiBBUEkuICBTZWUgdXNlcl9tYnVmLmguCi0gKgotICogVGhlIGZs
Z3MgcGFyYW1ldGVyIGJlbG93IGNhbiBiZSBVTUVNX0RFRkFVTFQgb3IgVU1FTV9OT0ZBSUwgZGVw
ZW5kaW5nIG9uIHdoYXQKLSAqIHdhcyBwYXNzZWQgd2hlbiB1bWVtX2NhY2hlX2FsbG9jIHdhcyBj
YWxsZWQuCi0gKiBUT0RPOiBVc2UgVU1FTV9OT0ZBSUwgaW4gdW1lbV9jYWNoZV9hbGxvYyBhbmQg
YWxzbyBkZWZpbmUgYSBmYWlsdXJlIGhhbmRsZXIKLSAqIGFuZCBjYWxsIHVtZW1fbm9mYWlsX2Nh
bGxiYWNrKG15X2ZhaWx1cmVfaGFuZGxlcikgaW4gdGhlIHN0YWNrIGluaXRpYWxpemF0aW9uIHJv
dXRpbmVzCi0gKiBUaGUgYWR2YW50YWdlIG9mIHVzaW5nIFVNRU1fTk9GQUlMIGlzIHRoYXQgd2Ug
ZG9uJ3QgaGF2ZSB0byBjaGVjayBpZiB1bWVtX2NhY2hlX2FsbG9jCi0gKiB3YXMgc3VjY2Vzc2Z1
bCBvciBub3QuIFRoZSBmYWlsdXJlIGhhbmRsZXIgd291bGQgdGFrZSBjYXJlIG9mIGl0LCBpZiB3
ZSB1c2UgdGhlIFVNRU1fTk9GQUlMCi0gKiBmbGFnLgotICoKLSAqIE5PVEUgUmVmOiBodHRwOi8v
ZG9jcy5zdW4uY29tL2FwcC9kb2NzL2RvYy84MTktMjI0My82bjRpMDk5cDI/bD1lbiZhPXZpZXcm
cT11bWVtX3phbGxvYykKLSAqIFRoZSB1bWVtX25vZmFpbF9jYWxsYmFjaygpIGZ1bmN0aW9uIHNl
dHMgdGhlICoqcHJvY2Vzcy13aWRlKiogVU1FTV9OT0ZBSUwgY2FsbGJhY2suCi0gKiBJdCBhbHNv
IG1lbnRpb25zIHRoYXQgdW1lbV9ub2ZhaWxfY2FsbGJhY2sgaXMgRXZvbHZpbmcuCi0gKgotICov
Ci1zdGF0aWMgaW50Ci1tYl9jdG9yX21idWYodm9pZCAqbWVtLCB2b2lkICphcmcsIGludCBmbGdz
KQotewotI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNUT1IKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1
Y3QgbWJfYXJncyAqYXJnczsKLQotCWludCBmbGFnczsKLQlzaG9ydCB0eXBlOwotCi0JbSA9IChz
dHJ1Y3QgbWJ1ZiAqKW1lbTsKLQlhcmdzID0gKHN0cnVjdCBtYl9hcmdzICopYXJnOwotCWZsYWdz
ID0gYXJncy0+ZmxhZ3M7Ci0JdHlwZSA9IGFyZ3MtPnR5cGU7Ci0KLQkvKgotCSAqIFRoZSBtYnVm
IGlzIGluaXRpYWxpemVkIGxhdGVyLgotCSAqCi0JICovCi0JaWYgKHR5cGUgPT0gTVRfTk9JTklU
KQotCQlyZXR1cm4gKDApOwotCi0JbS0+bV9uZXh0ID0gTlVMTDsKLQltLT5tX25leHRwa3QgPSBO
VUxMOwotCW0tPm1fbGVuID0gMDsKLQltLT5tX2ZsYWdzID0gZmxhZ3M7Ci0JbS0+bV90eXBlID0g
dHlwZTsKLQlpZiAoZmxhZ3MgJiBNX1BLVEhEUikgewotCQltLT5tX2RhdGEgPSBtLT5tX3BrdGRh
dDsKLQkJbS0+bV9wa3RoZHIucmN2aWYgPSBOVUxMOwotCQltLT5tX3BrdGhkci5sZW4gPSAwOwot
CQltLT5tX3BrdGhkci5oZWFkZXIgPSBOVUxMOwotCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0g
MDsKLQkJbS0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMDsKLQkJbS0+bV9wa3RoZHIudHNvX3NlZ3N6
ID0gMDsKLQkJbS0+bV9wa3RoZHIuZXRoZXJfdnRhZyA9IDA7Ci0JCVNMSVNUX0lOSVQoJm0tPm1f
cGt0aGRyLnRhZ3MpOwotCX0gZWxzZQotCQltLT5tX2RhdGEgPSBtLT5tX2RhdDsKLSNlbmRpZgot
CXJldHVybiAoMCk7Ci19Ci0KLQotLyoKLSAqIF9fVXNlcnNwYWNlX18KLSAqIFRoZSBNYnVmIG1h
c3RlciB6b25lIGRlc3RydWN0b3IuCi0gKiBUaGlzIHdvdWxkIGJlIGNhbGxlZCBpbiByZXNwb25z
ZSB0byB1bWVtX2NhY2hlX2Rlc3Ryb3kKLSAqIFRPRE86IFJlY2hlY2sgaWYgdGhpcyBpcyB3aGF0
IHdlIHdhbnQgdG8gZG8gaW4gdGhpcyBkZXN0cnVjdG9yLgotICogKE5vdGU6IHRoZSBudW1iZXIg
b2YgdGltZXMgbWJfZHRvcl9tYnVmIGlzIGNhbGxlZCBpcyBlcXVhbCB0byB0aGUKLSAqIG51bWJl
ciBvZiBpbmRpdmlkdWFsIG1idWZzIGFsbG9jYXRlZCBmcm9tIHpvbmVfbWJ1Zi4KLSAqLwotc3Rh
dGljIHZvaWQKLW1iX2R0b3JfbWJ1Zih2b2lkICptZW0sIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qg
bWJ1ZiAqbTsKLQotCW0gPSAoc3RydWN0IG1idWYgKiltZW07Ci0JaWYgKChtLT5tX2ZsYWdzICYg
TV9QS1RIRFIpICE9IDApIHsKLQkJbV90YWdfZGVsZXRlX2NoYWluKG0sIE5VTEwpOwotCX0KLX0K
LQotCi0vKiBfX1VzZXJzcGFjZV9fCi0gKiBUaGUgQ2x1c3RlciB6b25lIGNvbnN0cnVjdG9yLgot
ICoKLSAqIEhlcmUgdGhlICdhcmcnIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBNYnVmIHdoaWNoIHdl
Ci0gKiBhcmUgY29uZmlndXJpbmcgY2x1c3RlciBzdG9yYWdlIGZvci4gIElmICdhcmcnIGlzCi0g
KiBlbXB0eSB3ZSBhbGxvY2F0ZSBqdXN0IHRoZSBjbHVzdGVyIHdpdGhvdXQgc2V0dGluZwotICog
dGhlIG1idWYgdG8gaXQuICBTZWUgbWJ1Zi5oLgotICovCi1zdGF0aWMgaW50Ci1tYl9jdG9yX2Ns
dXN0KHZvaWQgKm1lbSwgdm9pZCAqYXJnLCBpbnQgZmxncykKLXsKLQotI2lmIFVTSU5HX01CVUZf
Q09OU1RSVUNUT1IKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1Y3QgY2x1c3RfYXJncyAqIGNsYTsK
LQl1X2ludCAqcmVmY250OwotCWludCB0eXBlLCBzaXplOwotCXNjdHBfem9uZV90IHpvbmU7Ci0K
LQkvKiBBc3NpZ25pbmcgY2x1c3RlciBvZiBNQ0xCWVRFUy4gVE9ETzogQWRkIGp1bWJvIGZyYW1l
IGZ1bmN0aW9uYWxpdHkgKi8KLQl0eXBlID0gRVhUX0NMVVNURVI7Ci0Jem9uZSA9IHpvbmVfY2x1
c3Q7Ci0Jc2l6ZSA9IE1DTEJZVEVTOwotCi0JY2xhID0gKHN0cnVjdCBjbHVzdF9hcmdzICopYXJn
OwotCW0gPSBjbGEtPnBhcmVudF9tYnVmOwotCi0JcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25l
X2V4dF9yZWZjbnQsIHVfaW50KTsKLQkvKnJlZmNudCA9ICh1X2ludCAqKXVtZW1fY2FjaGVfYWxs
b2Moem9uZV9leHRfcmVmY250LCBVTUVNX0RFRkFVTFQpOyovCi0JKnJlZmNudCA9IDE7Ci0KLQlp
ZiAobSAhPSBOVUxMKSB7Ci0JCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltZW07Ci0JCW0t
Pm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9idWY7Ci0JCW0tPm1fZmxhZ3MgfD0gTV9FWFQ7Ci0JCW0t
Pm1fZXh0LmV4dF9mcmVlID0gTlVMTDsKLQkJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOwotCQlt
LT5tX2V4dC5leHRfc2l6ZSA9IHNpemU7Ci0JCW0tPm1fZXh0LmV4dF90eXBlID0gdHlwZTsKLQkJ
bS0+bV9leHQucmVmX2NudCA9IHJlZmNudDsKLQl9IGVsc2UKLQkJU0NUUF9aT05FX0ZSRUUoem9u
ZV9leHRfcmVmY250LCByZWZjbnQpOwotI2VuZGlmCi0JcmV0dXJuICgwKTsKLX0KLQotLyogX19V
c2Vyc3BhY2VfXyAqLwotc3RhdGljIHZvaWQKLW1iX2R0b3JfY2x1c3Qodm9pZCAqbWVtLCB2b2lk
ICphcmcpCi17Ci0KLSAgLyogbWVtIGlzIG9mIHR5cGUgY2FkZHJfdC4gIEluIHN5cy90eXBlcy5o
IHdlIGhhdmUgdHlwZWRlZiBjaGFyICogY2FkZHJfdDsgICovCi0gIC8qIG1iX2R0b3JfY2x1c3Qg
aXMgY2FsbGVkIGF0IHRpbWUgb2YgdW1lbV9jYWNoZV9kZXN0cm95KCkgKHRoZSBudW1iZXIgb2Yg
dGltZXMKLSAgICogbWJfZHRvcl9jbHVzdCBpcyBjYWxsZWQgaXMgZXF1YWwgdG8gdGhlIG51bWJl
ciBvZiBpbmRpdmlkdWFsIG1idWZzIGFsbG9jYXRlZAotICAgKiBmcm9tIHpvbmVfY2x1c3QuIFNp
bWlsYXJseSBmb3IgbWJfZHRvcl9tYnVmKS4KLSAgICogQXQgdGhpcyBwb2ludCB0aGUgZm9sbG93
aW5nOgotICAgKiAgc3RydWN0IG1idWYgKm07Ci0gICAqICAgbSA9IChzdHJ1Y3QgbWJ1ZiAqKWFy
ZzsKLSAgICogIGFzc2VydCAoKihtLT5tX2V4dC5yZWZfY250KSA9PSAwKTsgaXMgbm90IG1lYW5p
bmdmdWwgc2luY2UgIG0tPm1fZXh0LnJlZl9jbnQgPSBOVUxMOwotICAgKiAgaGFzIGJlZW4gZG9u
ZSBpbiBtYl9mcmVlX2V4dCgpLgotICAgKi8KLQotfQotCi0KLQotCi0vKiBVbmxpbmsgYW5kIGZy
ZWUgYSBwYWNrZXQgdGFnLiAqLwotdm9pZAotbV90YWdfZGVsZXRlKHN0cnVjdCBtYnVmICptLCBz
dHJ1Y3QgbV90YWcgKnQpCi17Ci0JS0FTU0VSVChtICYmIHQsICgibV90YWdfZGVsZXRlOiBudWxs
IGFyZ3VtZW50LCBtICVwIHQgJXAiLCAodm9pZCAqKW0sICh2b2lkICopdCkpOwotCW1fdGFnX3Vu
bGluayhtLCB0KTsKLQltX3RhZ19mcmVlKHQpOwotfQotCi0KLS8qIFVubGluayBhbmQgZnJlZSBh
IHBhY2tldCB0YWcgY2hhaW4sIHN0YXJ0aW5nIGZyb20gZ2l2ZW4gdGFnLiAqLwotdm9pZAotbV90
YWdfZGVsZXRlX2NoYWluKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCi17Ci0KLQlz
dHJ1Y3QgbV90YWcgKnAsICpxOwotCi0JS0FTU0VSVChtLCAoIm1fdGFnX2RlbGV0ZV9jaGFpbjog
bnVsbCBtYnVmIikpOwotCWlmICh0ICE9IE5VTEwpCi0JCXAgPSB0OwotCWVsc2UKLQkJcCA9IFNM
SVNUX0ZJUlNUKCZtLT5tX3BrdGhkci50YWdzKTsKLQlpZiAocCA9PSBOVUxMKQotCQlyZXR1cm47
Ci0Jd2hpbGUgKChxID0gU0xJU1RfTkVYVChwLCBtX3RhZ19saW5rKSkgIT0gTlVMTCkKLQkJbV90
YWdfZGVsZXRlKG0sIHEpOwotCW1fdGFnX2RlbGV0ZShtLCBwKTsKLX0KLQotI2lmIDAKLXN0YXRp
YyB2b2lkCi1zY3RwX3ByaW50X21idWZfY2hhaW4oc3RydWN0IG1idWYgKm0pCi17Ci0JU0NUUF9E
RUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJQcmludGluZyBtYnVmIGNoYWluICVwLlxuIiwgKHZv
aWQgKiltKTsKLQlmb3IoOyBtOyBtPW0tPm1fbmV4dCkgewotCQlTQ1RQX0RFQlVHX1VTUihTQ1RQ
X0RFQlVHX1VTUiwgIiVwOiBtX2xlbiA9ICVsZCwgbV90eXBlID0gJXgsIG1fbmV4dCA9ICVwLlxu
IiwgKHZvaWQgKiltLCBtLT5tX2xlbiwgbS0+bV90eXBlLCAodm9pZCAqKW0tPm1fbmV4dCk7Ci0J
CWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VT
UiwgIiVwOiBleHRlbmRfc2l6ZSA9ICVkLCBleHRlbmRfYnVmZmVyID0gJXAsIHJlZl9jbnQgPSAl
ZC5cbiIsICh2b2lkICopbSwgbS0+bV9leHQuZXh0X3NpemUsICh2b2lkICopbS0+bV9leHQuZXh0
X2J1ZiwgKihtLT5tX2V4dC5yZWZfY250KSk7Ci0JfQotfQotI2VuZGlmCi0KLS8qCi0gKiBGcmVl
IGFuIGVudGlyZSBjaGFpbiBvZiBtYnVmcyBhbmQgYXNzb2NpYXRlZCBleHRlcm5hbCBidWZmZXJz
LCBpZgotICogYXBwbGljYWJsZS4KLSAqLwotdm9pZAotbV9mcmVlbShzdHJ1Y3QgbWJ1ZiAqbWIp
Ci17Ci0Jd2hpbGUgKG1iICE9IE5VTEwpCi0JCW1iID0gbV9mcmVlKG1iKTsKLX0KLQotLyoKLSAq
IF9fVXNlcnNwYWNlX18KLSAqIGNsZWFuIG1idWZzIHdpdGggTV9FWFQgc3RvcmFnZSBhdHRhY2hl
ZCB0byB0aGVtCi0gKiBpZiB0aGUgcmVmZXJlbmNlIGNvdW50IGhpdHMgMS4KLSAqLwotdm9pZAot
bWJfZnJlZV9leHQoc3RydWN0IG1idWYgKm0pCi17Ci0KLQlpbnQgc2tpcG1idWY7Ci0KLQlLQVNT
RVJUKChtLT5tX2ZsYWdzICYgTV9FWFQpID09IE1fRVhULCAoIiVzOiBNX0VYVCBub3Qgc2V0Iiwg
X19mdW5jX18pKTsKLQlLQVNTRVJUKG0tPm1fZXh0LnJlZl9jbnQgIT0gTlVMTCwgKCIlczogcmVm
X2NudCBub3Qgc2V0IiwgX19mdW5jX18pKTsKLQotCS8qCi0JICogY2hlY2sgaWYgdGhlIGhlYWRl
ciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3RlcgotCSAqLwotCXNraXBtYnVmID0gKG0tPm1fZmxh
Z3MgJiBNX05PRlJFRSk7Ci0KLQkvKiBGcmVlIHRoZSBleHRlcm5hbCBhdHRhY2hlZCBzdG9yYWdl
IGlmIHRoaXMKLQkgKiBtYnVmIGlzIHRoZSBvbmx5IHJlZmVyZW5jZSB0byBpdC4KLQkgKl9fVXNl
cnNwYWNlX18gVE9ETzoganVtYm8gZnJhbWVzCi0JICoKLQkqLwotCS8qIE5PVEU6IFdlIGhhZCB0
aGUgc2FtZSBjb2RlIHRoYXQgU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UCi0JICAg
ICAgICAgcmVkdWNlcyB0byBoZXJlIGJlZm9yZSBidXQgdGhlIElQSE9ORSBtYWxsb2MgY29tbWl0
IGhhZCBjaGFuZ2VkCi0JICAgICAgICAgdGhpcyB0byBjb21wYXJlIHRvIDAgaW5zdGVhZCBvZiAx
IChzZWUgbmV4dCBsaW5lKS4gIFdoeT8KLQkgICAgICAgIC4gLi4gdGhpcyBjYXVzZWQgYSBodWdl
IG1lbW9yeSBsZWFrIGluIExpbnV4LgotCSovCi0jaWZkZWYgSVBIT05FCi0JaWYgKGF0b21pY19m
ZXRjaGFkZF9pbnQobS0+bV9leHQucmVmX2NudCwgLTEpID09IDApCi0jZWxzZQotCWlmIChTQ1RQ
X0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQobS0+bV9leHQucmVmX2NudCkpCi0jZW5kaWYK
LQl7Ci0JCWlmIChtLT5tX2V4dC5leHRfdHlwZSA9PSBFWFRfQ0xVU1RFUil7Ci0jaWYgZGVmaW5l
ZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCi0JCQltYl9kdG9yX2NsdXN0KG0tPm1fZXh0LmV4dF9i
dWYsICZjbHVzdF9tYl9hcmdzKTsKLSNlbmRpZgotCQkJU0NUUF9aT05FX0ZSRUUoem9uZV9jbHVz
dCwgbS0+bV9leHQuZXh0X2J1Zik7Ci0JCQlTQ1RQX1pPTkVfRlJFRSh6b25lX2V4dF9yZWZjbnQs
ICh1X2ludCopbS0+bV9leHQucmVmX2NudCk7Ci0JCQltLT5tX2V4dC5yZWZfY250ID0gTlVMTDsK
LQkJfQotCX0KLQotCWlmIChza2lwbWJ1ZikKLQkJcmV0dXJuOwotCi0KLQkvKiBfX1VzZXJzcGFj
ZV9fIEFsc28gZnJlZWluZyB0aGUgc3RvcmFnZSBmb3IgcmVmX2NudAotCSAqIEZyZWUgdGhpcyBt
YnVmIGJhY2sgdG8gdGhlIG1idWYgem9uZSB3aXRoIGFsbCBtX2V4dAotCSAqIGluZm9ybWF0aW9u
IHB1cmdlZC4KLQkgKi8KLQltLT5tX2V4dC5leHRfYnVmID0gTlVMTDsKLQltLT5tX2V4dC5leHRf
ZnJlZSA9IE5VTEw7Ci0JbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxMOwotCW0tPm1fZXh0LnJlZl9j
bnQgPSBOVUxMOwotCW0tPm1fZXh0LmV4dF9zaXplID0gMDsKLQltLT5tX2V4dC5leHRfdHlwZSA9
IDA7Ci0JbS0+bV9mbGFncyAmPSB+TV9FWFQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExP
Q0FUT1IpCi0JbWJfZHRvcl9tYnVmKG0sIE5VTEwpOwotI2VuZGlmCi0JU0NUUF9aT05FX0ZSRUUo
em9uZV9tYnVmLCBtKTsKLQotCS8qdW1lbV9jYWNoZV9mcmVlKHpvbmVfbWJ1ZiwgbSk7Ki8KLX0K
LQotLyoKLSAqICJNb3ZlIiBtYnVmIHBrdGhkciBmcm9tICJmcm9tIiB0byAidG8iLgotICogImZy
b20iIG11c3QgaGF2ZSBNX1BLVEhEUiBzZXQsIGFuZCAidG8iIG11c3QgYmUgZW1wdHkuCi0gKi8K
LXZvaWQKLW1fbW92ZV9wa3RoZHIoc3RydWN0IG1idWYgKnRvLCBzdHJ1Y3QgbWJ1ZiAqZnJvbSkK
LXsKLQotCXRvLT5tX2ZsYWdzID0gKGZyb20tPm1fZmxhZ3MgJiBNX0NPUFlGTEFHUykgfCAodG8t
Pm1fZmxhZ3MgJiBNX0VYVCk7Ci0JaWYgKCh0by0+bV9mbGFncyAmIE1fRVhUKSA9PSAwKQotCQl0
by0+bV9kYXRhID0gdG8tPm1fcGt0ZGF0OwotCXRvLT5tX3BrdGhkciA9IGZyb20tPm1fcGt0aGRy
OwkJLyogZXNwZWNpYWxseSB0YWdzICovCi0JU0xJU1RfSU5JVCgmZnJvbS0+bV9wa3RoZHIudGFn
cyk7CS8qIHB1cmdlIHRhZ3MgZnJvbSBzcmMgKi8KLQlmcm9tLT5tX2ZsYWdzICY9IH5NX1BLVEhE
UjsKLX0KLQotCi0vKgotICogUmVhcmFuZ2UgYW4gbWJ1ZiBjaGFpbiBzbyB0aGF0IGxlbiBieXRl
cyBhcmUgY29udGlndW91cwotICogYW5kIGluIHRoZSBkYXRhIGFyZWEgb2YgYW4gbWJ1ZiAoc28g
dGhhdCBtdG9kIGFuZCBkdG9tCi0gKiB3aWxsIHdvcmsgZm9yIGEgc3RydWN0dXJlIG9mIHNpemUg
bGVuKS4gIFJldHVybnMgdGhlIHJlc3VsdGluZwotICogbWJ1ZiBjaGFpbiBvbiBzdWNjZXNzLCBm
cmVlcyBpdCBhbmQgcmV0dXJucyBudWxsIG9uIGZhaWx1cmUuCi0gKiBJZiB0aGVyZSBpcyByb29t
LCBpdCB3aWxsIGFkZCB1cCB0byBtYXhfcHJvdG9oZHItbGVuIGV4dHJhIGJ5dGVzIHRvIHRoZQot
ICogY29udGlndW91cyByZWdpb24gaW4gYW4gYXR0ZW1wdCB0byBhdm9pZCBiZWluZyBjYWxsZWQg
bmV4dCB0aW1lLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX3B1bGx1cChzdHJ1Y3QgbWJ1ZiAqbiwg
aW50IGxlbikKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlpbnQgY291bnQ7Ci0JaW50IHNwYWNlOwot
Ci0JLyoKLQkgKiBJZiBmaXJzdCBtYnVmIGhhcyBubyBjbHVzdGVyLCBhbmQgaGFzIHJvb20gZm9y
IGxlbiBieXRlcwotCSAqIHdpdGhvdXQgc2hpZnRpbmcgY3VycmVudCBkYXRhLCBwdWxsdXAgaW50
byBpdCwKLQkgKiBvdGhlcndpc2UgYWxsb2NhdGUgYSBuZXcgbWJ1ZiB0byBwcmVwZW5kIHRvIHRo
ZSBjaGFpbi4KLQkgKi8KLQlpZiAoKG4tPm1fZmxhZ3MgJiBNX0VYVCkgPT0gMCAmJgotCSAgICBu
LT5tX2RhdGEgKyBsZW4gPCAmbi0+bV9kYXRbTUxFTl0gJiYgbi0+bV9uZXh0KSB7Ci0JCWlmIChu
LT5tX2xlbiA+PSBsZW4pCi0JCQlyZXR1cm4gKG4pOwotCQltID0gbjsKLQkJbiA9IG4tPm1fbmV4
dDsKLQkJbGVuIC09IG0tPm1fbGVuOwotCX0gZWxzZSB7Ci0JCWlmIChsZW4gPiBNSExFTikKLQkJ
CWdvdG8gYmFkOwotCQlNR0VUKG0sIE1fTk9XQUlULCBuLT5tX3R5cGUpOwotCQlpZiAobSA9PSBO
VUxMKQotCQkJZ290byBiYWQ7Ci0JCW0tPm1fbGVuID0gMDsKLQkJaWYgKG4tPm1fZmxhZ3MgJiBN
X1BLVEhEUikKLQkJCU1fTU9WRV9QS1RIRFIobSwgbik7Ci0JfQotCXNwYWNlID0gKGludCkoJm0t
Pm1fZGF0W01MRU5dIC0gKG0tPm1fZGF0YSArIG0tPm1fbGVuKSk7Ci0JZG8gewotCQljb3VudCA9
IG1pbihtaW4obWF4KGxlbiwgbWF4X3Byb3RvaGRyKSwgc3BhY2UpLCBuLT5tX2xlbik7Ci0JCW1l
bWNweShtdG9kKG0sIGNhZGRyX3QpICsgbS0+bV9sZW4sbXRvZChuLCBjYWRkcl90KSwgKHVfaW50
KWNvdW50KTsKLQkJbGVuIC09IGNvdW50OwotCQltLT5tX2xlbiArPSBjb3VudDsKLQkJbi0+bV9s
ZW4gLT0gY291bnQ7Ci0JCXNwYWNlIC09IGNvdW50OwotCQlpZiAobi0+bV9sZW4pCi0JCQluLT5t
X2RhdGEgKz0gY291bnQ7Ci0JCWVsc2UKLQkJCW4gPSBtX2ZyZWUobik7Ci0JfSB3aGlsZSAobGVu
ID4gMCAmJiBuKTsKLQlpZiAobGVuID4gMCkgewotCQkodm9pZCkgbV9mcmVlKG0pOwotCQlnb3Rv
IGJhZDsKLQl9Ci0JbS0+bV9uZXh0ID0gbjsKLQlyZXR1cm4gKG0pOwotYmFkOgotCW1fZnJlZW0o
bik7Ci0JbWJzdGF0Lm1fbXBmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVuY3kuICovCi0JcmV0
dXJuIChOVUxMKTsKLX0KLQotCi1zdGF0aWMgc3RydWN0IG1idWYgKgotbV9kdXAxKHN0cnVjdCBt
YnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgd2FpdCkKLXsKLQlzdHJ1Y3QgbWJ1ZiAqbiA9
IE5VTEw7Ci0JaW50IGNvcHloZHI7Ci0KLQlpZiAobGVuID4gTUNMQllURVMpCi0JCXJldHVybiBO
VUxMOwotCWlmIChvZmYgPT0gMCAmJiAobS0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwKQotCQlj
b3B5aGRyID0gMTsKLQllbHNlCi0JCWNvcHloZHIgPSAwOwotCWlmIChsZW4gPj0gTUlOQ0xTSVpF
KSB7Ci0JCWlmIChjb3B5aGRyID09IDEpIHsKLQkJCW1fY2xnZXQobiwgd2FpdCk7IC8qIFRPRE86
IGluY2x1ZGUgY29kZSBmb3IgY29weWluZyB0aGUgaGVhZGVyICovCi0JCQltX2R1cF9wa3RoZHIo
biwgbSwgd2FpdCk7Ci0JCX0gZWxzZQotCQkJbV9jbGdldChuLCB3YWl0KTsKLQl9IGVsc2Ugewot
CQlpZiAoY29weWhkciA9PSAxKQotCQkJbiA9IG1fZ2V0aGRyKHdhaXQsIG0tPm1fdHlwZSk7Ci0J
CWVsc2UKLQkJCW4gPSBtX2dldCh3YWl0LCBtLT5tX3R5cGUpOwotCX0KLQlpZiAoIW4pCi0JCXJl
dHVybiBOVUxMOyAvKiBFTk9CVUZTICovCi0KLQlpZiAoY29weWhkciAmJiAhbV9kdXBfcGt0aGRy
KG4sIG0sIHdhaXQpKSB7Ci0JCW1fZnJlZShuKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCW1fY29w
eWRhdGEobSwgb2ZmLCBsZW4sIG10b2QobiwgY2FkZHJfdCkpOwotCW4tPm1fbGVuID0gbGVuOwot
CXJldHVybiBuOwotfQotCi0KLS8qIFRha2VuIGZyb20gc3lzL2tlcm4vdWlwY19tYnVmMi5jICov
Ci1zdHJ1Y3QgbWJ1ZiAqCi1tX3B1bGxkb3duKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQg
bGVuLCBpbnQgKm9mZnApCi17Ci0Jc3RydWN0IG1idWYgKm4sICpvOwotCWludCBobGVuLCB0bGVu
LCBvbGVuOwotCWludCB3cml0YWJsZTsKLQotCS8qIGNoZWNrIGludmFsaWQgYXJndW1lbnRzLiAq
LwotCUtBU1NFUlQobSwgKCJtID09IE5VTEwgaW4gbV9wdWxsZG93bigpIikpOwotCWlmIChsZW4g
PiBNQ0xCWVRFUykgewotCQltX2ZyZWVtKG0pOwotCQlyZXR1cm4gTlVMTDsgICAgLyogaW1wb3Nz
aWJsZSAqLwotCX0KLQotI2lmZGVmIFBVTExET1dOX0RFQlVHCi0JewotCQlzdHJ1Y3QgbWJ1ZiAq
dDsKLQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJiZWZvcmU6Iik7Ci0JCWZvciAo
dCA9IG07IHQ7IHQgPSB0LT5tX25leHQpCi0JCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VT
UiwgIiAlZCIsIHQtPm1fbGVuKTsKLQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJc
biIpOwotCX0KLSNlbmRpZgotCW4gPSBtOwotCXdoaWxlIChuICE9IE5VTEwgJiYgb2ZmID4gMCkg
ewotCQlpZiAobi0+bV9sZW4gPiBvZmYpCi0JCQlicmVhazsKLQkJb2ZmIC09IG4tPm1fbGVuOwot
CQluID0gbi0+bV9uZXh0OwotCX0KLQkvKiBiZSBzdXJlIHRvIHBvaW50IG5vbi1lbXB0eSBtYnVm
ICovCi0Jd2hpbGUgKG4gIT0gTlVMTCAmJiBuLT5tX2xlbiA9PSAwKQotCQluID0gbi0+bV9uZXh0
OwotCWlmICghbikgewotCQltX2ZyZWVtKG0pOwotCQlyZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBj
aGFpbiB0b28gc2hvcnQgKi8KLQl9Ci0KLQl3cml0YWJsZSA9IDA7Ci0JaWYgKChuLT5tX2ZsYWdz
ICYgTV9FWFQpID09IDAgfHwKLQkgICAgKG4tPm1fZXh0LmV4dF90eXBlID09IEVYVF9DTFVTVEVS
ICYmIE1fV1JJVEFCTEUobikpKQotCQl3cml0YWJsZSA9IDE7Ci0KLQkvKgotCSAqIHRoZSB0YXJn
ZXQgZGF0YSBpcyBvbiA8biwgb2ZmPi4KLQkgKiBpZiB3ZSBnb3QgZW5vdWdoIGRhdGEgb24gdGhl
IG1idWYgIm4iLCB3ZSdyZSBkb25lLgotCSAqLwotCWlmICgob2ZmID09IDAgfHwgb2ZmcCkgJiYg
bGVuIDw9IG4tPm1fbGVuIC0gb2ZmICYmIHdyaXRhYmxlKQotCQlnb3RvIG9rOwotCi0JLyoKLQkg
KiB3aGVuIGxlbiA8PSBuLT5tX2xlbiAtIG9mZiBhbmQgb2ZmICE9IDAsIGl0IGlzIGEgc3BlY2lh
bCBjYXNlLgotCSAqIGxlbiBieXRlcyBmcm9tIDxuLCBvZmY+IHNpdHMgaW4gc2luZ2xlIG1idWYs
IGJ1dCB0aGUgY2FsbGVyIGRvZXMKLQkgKiBub3QgbGlrZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24g
KG9mZikuCi0JICogY2hvcCB0aGUgY3VycmVudCBtYnVmIGludG8gdHdvIHBpZWNlcywgc2V0IG9m
ZiB0byAwLgotCSAqLwotCWlmIChsZW4gPD0gbi0+bV9sZW4gLSBvZmYpIHsKLQkJbyA9IG1fZHVw
MShuLCBvZmYsIG4tPm1fbGVuIC0gb2ZmLCBNX05PV0FJVCk7Ci0JCWlmIChvID09IE5VTEwpIHsK
LQkJCW1fZnJlZW0obSk7Ci0JCXJldHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICovCi0JCX0KLQkJ
bi0+bV9sZW4gPSBvZmY7Ci0JCW8tPm1fbmV4dCA9IG4tPm1fbmV4dDsKLQkJbi0+bV9uZXh0ID0g
bzsKLQkJbiA9IG4tPm1fbmV4dDsKLQkJb2ZmID0gMDsKLQkJZ290byBvazsKLQl9Ci0JLyoKLQkg
KiB3ZSBuZWVkIHRvIHRha2UgaGxlbiBmcm9tIDxuLCBvZmY+IGFuZCB0bGVuIGZyb20gPG4tPm1f
bmV4dCwgMD4sCi0JICogYW5kIGNvbnN0cnVjdCBjb250aWd1b3VzIG1idWYgd2l0aCBtX2xlbiA9
PSBsZW4uCi0JICogbm90ZSB0aGF0IGhsZW4gKyB0bGVuID09IGxlbiwgYW5kIHRsZW4gPiAwLgot
CSAqLwotCWhsZW4gPSBuLT5tX2xlbiAtIG9mZjsKLQl0bGVuID0gbGVuIC0gaGxlbjsKLQotCS8q
Ci0JICogZW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2ggdHJhaWxpbmcgZGF0YSBvbiBtYnVmIGNo
YWluLgotCSAqIGlmIG5vdCwgd2UgY2FuIGRvIG5vdGhpbmcgYWJvdXQgdGhlIGNoYWluLgotCSAq
LwotCW9sZW4gPSAwOwotCWZvciAobyA9IG4tPm1fbmV4dDsgbyAhPSBOVUxMOyBvID0gby0+bV9u
ZXh0KQotCQlvbGVuICs9IG8tPm1fbGVuOwotCWlmIChobGVuICsgb2xlbiA8IGxlbikgewotCQlt
X2ZyZWVtKG0pOwotCQlyZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBjaGFpbiB0b28gc2hvcnQgKi8K
LQl9Ci0KLQkvKgotCSAqIGVhc3kgY2FzZXMgZmlyc3QuCi0JICogd2UgbmVlZCB0byB1c2UgbV9j
b3B5ZGF0YSgpIHRvIGdldCBkYXRhIGZyb20gPG4tPm1fbmV4dCwgMD4uCi0JICovCi0JaWYgKChv
ZmYgPT0gMCB8fCBvZmZwKSAmJiBNX1RSQUlMSU5HU1BBQ0UobikgPj0gdGxlbgotCSAgICAmJiB3
cml0YWJsZSkgewotCQltX2NvcHlkYXRhKG4tPm1fbmV4dCwgMCwgdGxlbiwgbXRvZChuLCBjYWRk
cl90KSArIG4tPm1fbGVuKTsKLQkJbi0+bV9sZW4gKz0gdGxlbjsKLQkJbV9hZGoobi0+bV9uZXh0
LCB0bGVuKTsKLQkJZ290byBvazsKLQl9Ci0KLQlpZiAoKG9mZiA9PSAwIHx8IG9mZnApICYmIE1f
TEVBRElOR1NQQUNFKG4tPm1fbmV4dCkgPj0gaGxlbgotCSAgICAmJiB3cml0YWJsZSkgewotCQlu
LT5tX25leHQtPm1fZGF0YSAtPSBobGVuOwotCQluLT5tX25leHQtPm1fbGVuICs9IGhsZW47Ci0J
CW1lbWNweSggbXRvZChuLT5tX25leHQsIGNhZGRyX3QpLCBtdG9kKG4sIGNhZGRyX3QpICsgb2Zm
LGhsZW4pOwotCQluLT5tX2xlbiAtPSBobGVuOwotCQluID0gbi0+bV9uZXh0OwotCQlvZmYgPSAw
OwotCQlnb3RvIG9rOwotCX0KLQotCS8qCi0JICogbm93LCB3ZSBuZWVkIHRvIGRvIHRoZSBoYXJk
IHdheS4gIGRvbid0IG1fY29weSBhcyB0aGVyZSdzIG5vIHJvb20KLQkgKiBvbiBib3RoIGVuZC4K
LQkgKi8KLQlpZiAobGVuID4gTUxFTikKLQkJbV9jbGdldChvLCBNX05PV0FJVCk7Ci0JCS8qIG8g
PSBtX2dldGNsKE1fTk9XQUlULCBtLT5tX3R5cGUsIDApOyovCi0JZWxzZQotCQlvID0gbV9nZXQo
TV9OT1dBSVQsIG0tPm1fdHlwZSk7Ci0JaWYgKCFvKSB7Ci0JCW1fZnJlZW0obSk7Ci0JCXJldHVy
biBOVUxMOyAgICAvKiBFTk9CVUZTICovCi0JfQotCS8qIGdldCBobGVuIGZyb20gPG4sIG9mZj4g
aW50byA8bywgMD4gKi8KLQlvLT5tX2xlbiA9IGhsZW47Ci0JbWVtY3B5KG10b2QobywgY2FkZHJf
dCksIG10b2QobiwgY2FkZHJfdCkgKyBvZmYsIGhsZW4pOwotCW4tPm1fbGVuIC09IGhsZW47Ci0J
LyogZ2V0IHRsZW4gZnJvbSA8bi0+bV9uZXh0LCAwPiBpbnRvIDxvLCBobGVuPiAqLwotCW1fY29w
eWRhdGEobi0+bV9uZXh0LCAwLCB0bGVuLCBtdG9kKG8sIGNhZGRyX3QpICsgby0+bV9sZW4pOwot
CW8tPm1fbGVuICs9IHRsZW47Ci0JbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKLQlvLT5tX25leHQg
PSBuLT5tX25leHQ7Ci0Jbi0+bV9uZXh0ID0gbzsKLQluID0gbzsKLQlvZmYgPSAwOwotb2s6Ci0j
aWZkZWYgUFVMTERPV05fREVCVUcKLQl7Ci0JCXN0cnVjdCBtYnVmICp0OwotCQlTQ1RQX0RFQlVH
X1VTUihTQ1RQX0RFQlVHX1VTUiwgImFmdGVyOiIpOwotCQlmb3IgKHQgPSBtOyB0OyB0ID0gdC0+
bV9uZXh0KQotCQkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICIlYyVkIiwgdCA9PSBu
ID8gJyonIDogJyAnLCB0LT5tX2xlbik7Ci0JCVNDVFBfREVCVUdfVVNSKFNDVFBfREVCVUdfVVNS
LCAiIChvZmY9JWQpXG4iLCBvZmYpOwotCX0KLSNlbmRpZgotCWlmIChvZmZwKQotCQkqb2ZmcCA9
IG9mZjsKLQlyZXR1cm4gbjsKLX0KLQotLyoKLSAqIEF0dGFjaCB0aGUgdGhlIGNsdXN0ZXIgZnJv
bSAqbSB0byAqbiwgc2V0IHVwIG1fZXh0IGluICpuCi0gKiBhbmQgYnVtcCB0aGUgcmVmY291bnQg
b2YgdGhlIGNsdXN0ZXIuCi0gKi8KLXN0YXRpYyB2b2lkCi1tYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAq
biwgc3RydWN0IG1idWYgKm0pCi17Ci0JS0FTU0VSVCgobS0+bV9mbGFncyAmIE1fRVhUKSA9PSBN
X0VYVCwgKCIlczogTV9FWFQgbm90IHNldCIsIF9fZnVuY19fKSk7Ci0JS0FTU0VSVChtLT5tX2V4
dC5yZWZfY250ICE9IE5VTEwsICgiJXM6IHJlZl9jbnQgbm90IHNldCIsIF9fZnVuY19fKSk7Ci0J
S0FTU0VSVCgobi0+bV9mbGFncyAmIE1fRVhUKSA9PSAwLCAoIiVzOiBNX0VYVCBzZXQiLCBfX2Z1
bmNfXykpOwotCi0JaWYgKCoobS0+bV9leHQucmVmX2NudCkgPT0gMSkKLQkJKihtLT5tX2V4dC5y
ZWZfY250KSArPSAxOwotCWVsc2UKLQkJYXRvbWljX2FkZF9pbnQobS0+bV9leHQucmVmX2NudCwg
MSk7Ci0Jbi0+bV9leHQuZXh0X2J1ZiA9IG0tPm1fZXh0LmV4dF9idWY7Ci0Jbi0+bV9leHQuZXh0
X2ZyZWUgPSBtLT5tX2V4dC5leHRfZnJlZTsKLQluLT5tX2V4dC5leHRfYXJncyA9IG0tPm1fZXh0
LmV4dF9hcmdzOwotCW4tPm1fZXh0LmV4dF9zaXplID0gbS0+bV9leHQuZXh0X3NpemU7Ci0Jbi0+
bV9leHQucmVmX2NudCA9IG0tPm1fZXh0LnJlZl9jbnQ7Ci0Jbi0+bV9leHQuZXh0X3R5cGUgPSBt
LT5tX2V4dC5leHRfdHlwZTsKLQluLT5tX2ZsYWdzIHw9IE1fRVhUOwotfQotCi0KLS8qCi0gKiBN
YWtlIGEgY29weSBvZiBhbiBtYnVmIGNoYWluIHN0YXJ0aW5nICJvZmYwIiBieXRlcyBmcm9tIHRo
ZSBiZWdpbm5pbmcsCi0gKiBjb250aW51aW5nIGZvciAibGVuIiBieXRlcy4gIElmIGxlbiBpcyBN
X0NPUFlBTEwsIGNvcHkgdG8gZW5kIG9mIG1idWYuCi0gKiBUaGUgd2FpdCBwYXJhbWV0ZXIgaXMg
YSBjaG9pY2Ugb2YgTV9UUllXQUlUL01fTk9XQUlUIGZyb20gY2FsbGVyLgotICogTm90ZSB0aGF0
IHRoZSBjb3B5IGlzIHJlYWQtb25seSwgYmVjYXVzZSBjbHVzdGVycyBhcmUgbm90IGNvcGllZCwK
LSAqIG9ubHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBhcmUgaW5jcmVtZW50ZWQuCi0gKi8KLQot
c3RydWN0IG1idWYgKgotbV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZjAsIGludCBsZW4s
IGludCB3YWl0KQotewotCXN0cnVjdCBtYnVmICpuLCAqKm5wOwotCWludCBvZmYgPSBvZmYwOwot
CXN0cnVjdCBtYnVmICp0b3A7Ci0JaW50IGNvcHloZHIgPSAwOwotCi0JS0FTU0VSVChvZmYgPj0g
MCwgKCJtX2NvcHltLCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKLQlLQVNTRVJUKGxlbiA+PSAw
LCAoIm1fY29weW0sIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOwotCi0JaWYgKG9mZiA9PSAwICYm
IG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikKLQkJY29weWhkciA9IDE7Ci0Jd2hpbGUgKG9mZiA+IDAp
IHsKLQkJS0FTU0VSVChtICE9IE5VTEwsICgibV9jb3B5bSwgb2Zmc2V0ID4gc2l6ZSBvZiBtYnVm
IGNoYWluIikpOwotCQlpZiAob2ZmIDwgbS0+bV9sZW4pCi0JCQlicmVhazsKLQkJb2ZmIC09IG0t
Pm1fbGVuOwotCQltID0gbS0+bV9uZXh0OwotCX0KLQlucCA9ICZ0b3A7Ci0JdG9wID0gMDsKLQl3
aGlsZSAobGVuID4gMCkgewotCQlpZiAobSA9PSBOVUxMKSB7Ci0JCQlLQVNTRVJUKGxlbiA9PSBN
X0NPUFlBTEwsICgibV9jb3B5bSwgbGVuZ3RoID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOwotCQkJ
YnJlYWs7Ci0JCX0KLQkJaWYgKGNvcHloZHIpCi0JCQlNR0VUSERSKG4sIHdhaXQsIG0tPm1fdHlw
ZSk7Ci0JCWVsc2UKLQkJCU1HRVQobiwgd2FpdCwgbS0+bV90eXBlKTsKLQkJKm5wID0gbjsKLQkJ
aWYgKG4gPT0gTlVMTCkKLQkJCWdvdG8gbm9zcGFjZTsKLQkJaWYgKGNvcHloZHIpIHsKLQkJCWlm
ICghbV9kdXBfcGt0aGRyKG4sIG0sIHdhaXQpKQotCQkJCWdvdG8gbm9zcGFjZTsKLQkJCWlmIChs
ZW4gPT0gTV9DT1BZQUxMKQotCQkJCW4tPm1fcGt0aGRyLmxlbiAtPSBvZmYwOwotCQkJZWxzZQot
CQkJCW4tPm1fcGt0aGRyLmxlbiA9IGxlbjsKLQkJCWNvcHloZHIgPSAwOwotCQl9Ci0JCW4tPm1f
bGVuID0gbWluKGxlbiwgbS0+bV9sZW4gLSBvZmYpOwotCQlpZiAobS0+bV9mbGFncyAmIE1fRVhU
KSB7Ci0JCQluLT5tX2RhdGEgPSBtLT5tX2RhdGEgKyBvZmY7Ci0JCQltYl9kdXBjbChuLCBtKTsK
LQkJfSBlbHNlCi0JCQltZW1jcHkobXRvZChuLCBjYWRkcl90KSwgbXRvZChtLCBjYWRkcl90KSAr
IG9mZiwgKHVfaW50KW4tPm1fbGVuKTsKLQkJaWYgKGxlbiAhPSBNX0NPUFlBTEwpCi0JCQlsZW4g
LT0gbi0+bV9sZW47Ci0JCW9mZiA9IDA7Ci0JCW0gPSBtLT5tX25leHQ7Ci0JCW5wID0gJm4tPm1f
bmV4dDsKLQl9Ci0JaWYgKHRvcCA9PSBOVUxMKQotCQltYnN0YXQubV9tY2ZhaWwrKzsJLyogWFhY
OiBObyBjb25zaXN0ZW5jeS4gKi8KLQotCXJldHVybiAodG9wKTsKLW5vc3BhY2U6Ci0JbV9mcmVl
bSh0b3ApOwotCW1ic3RhdC5tX21jZmFpbCsrOwkvKiBYWFg6IE5vIGNvbnNpc3RlbmN5LiAqLwot
CXJldHVybiAoTlVMTCk7Ci19Ci0KLQotaW50Ci1tX3RhZ19jb3B5X2NoYWluKHN0cnVjdCBtYnVm
ICp0bywgc3RydWN0IG1idWYgKmZyb20sIGludCBob3cpCi17Ci0Jc3RydWN0IG1fdGFnICpwLCAq
dCwgKnRwcmV2ID0gTlVMTDsKLQotCUtBU1NFUlQodG8gJiYgZnJvbSwgKCJtX3RhZ19jb3B5X2No
YWluOiBudWxsIGFyZ3VtZW50LCB0byAlcCBmcm9tICVwIiwgKHZvaWQgKil0bywgKHZvaWQgKilm
cm9tKSk7Ci0JbV90YWdfZGVsZXRlX2NoYWluKHRvLCBOVUxMKTsKLQlTTElTVF9GT1JFQUNIKHAs
ICZmcm9tLT5tX3BrdGhkci50YWdzLCBtX3RhZ19saW5rKSB7Ci0JCXQgPSBtX3RhZ19jb3B5KHAs
IGhvdyk7Ci0JCWlmICh0ID09IE5VTEwpIHsKLQkJCW1fdGFnX2RlbGV0ZV9jaGFpbih0bywgTlVM
TCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlpZiAodHByZXYgPT0gTlVMTCkKLQkJCVNMSVNUX0lO
U0VSVF9IRUFEKCZ0by0+bV9wa3RoZHIudGFncywgdCwgbV90YWdfbGluayk7Ci0JCWVsc2UKLQkJ
CVNMSVNUX0lOU0VSVF9BRlRFUih0cHJldiwgdCwgbV90YWdfbGluayk7Ci0JCXRwcmV2ID0gdDsK
LQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBEdXBsaWNhdGUgImZyb20iJ3MgbWJ1ZiBwa3Ro
ZHIgaW4gInRvIi4KLSAqICJmcm9tIiBtdXN0IGhhdmUgTV9QS1RIRFIgc2V0LCBhbmQgInRvIiBt
dXN0IGJlIGVtcHR5LgotICogSW4gcGFydGljdWxhciwgdGhpcyBkb2VzIGEgZGVlcCBjb3B5IG9m
IHRoZSBwYWNrZXQgdGFncy4KLSAqLwotaW50Ci1tX2R1cF9wa3RoZHIoc3RydWN0IG1idWYgKnRv
LCBzdHJ1Y3QgbWJ1ZiAqZnJvbSwgaW50IGhvdykKLXsKLQotCUtBU1NFUlQodG8sICgibV9kdXBf
cGt0aGRyOiB0byBpcyBOVUxMIikpOwotCUtBU1NFUlQoZnJvbSwgKCJtX2R1cF9wa3RoZHI6IGZy
b20gaXMgTlVMTCIpKTsKLQl0by0+bV9mbGFncyA9IChmcm9tLT5tX2ZsYWdzICYgTV9DT1BZRkxB
R1MpIHwgKHRvLT5tX2ZsYWdzICYgTV9FWFQpOwotCWlmICgodG8tPm1fZmxhZ3MgJiBNX0VYVCkg
PT0gMCkKLQkJdG8tPm1fZGF0YSA9IHRvLT5tX3BrdGRhdDsKLQl0by0+bV9wa3RoZHIgPSBmcm9t
LT5tX3BrdGhkcjsKLQlTTElTVF9JTklUKCZ0by0+bV9wa3RoZHIudGFncyk7Ci0JcmV0dXJuICht
X3RhZ19jb3B5X2NoYWluKHRvLCBmcm9tLCBNQlRPTShob3cpKSk7Ci19Ci0KLS8qIENvcHkgYSBz
aW5nbGUgdGFnLiAqLwotc3RydWN0IG1fdGFnICoKLW1fdGFnX2NvcHkoc3RydWN0IG1fdGFnICp0
LCBpbnQgaG93KQotewotCXN0cnVjdCBtX3RhZyAqcDsKLQotCUtBU1NFUlQodCwgKCJtX3RhZ19j
b3B5OiBudWxsIHRhZyIpKTsKLQlwID0gbV90YWdfYWxsb2ModC0+bV90YWdfY29va2llLCB0LT5t
X3RhZ19pZCwgdC0+bV90YWdfbGVuLCBob3cpOwotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiAo
TlVMTCk7Ci0JbWVtY3B5KHAgKyAxLCB0ICsgMSwgdC0+bV90YWdfbGVuKTsgLyogQ29weSB0aGUg
ZGF0YSAqLwotCXJldHVybiBwOwotfQotCi0vKiBHZXQgYSBwYWNrZXQgdGFnIHN0cnVjdHVyZSBh
bG9uZyB3aXRoIHNwZWNpZmllZCBkYXRhIGZvbGxvd2luZy4gKi8KLXN0cnVjdCBtX3RhZyAqCi1t
X3RhZ19hbGxvYyh1X2ludDMyX3QgY29va2llLCBpbnQgdHlwZSwgaW50IGxlbiwgaW50IHdhaXQp
Ci17Ci0Jc3RydWN0IG1fdGFnICp0OwotCi0JaWYgKGxlbiA8IDApCi0JCXJldHVybiBOVUxMOwot
CXQgPSBtYWxsb2MobGVuICsgc2l6ZW9mKHN0cnVjdCBtX3RhZykpOwotCWlmICh0ID09IE5VTEwp
Ci0JCXJldHVybiBOVUxMOwotCW1fdGFnX3NldHVwKHQsIGNvb2tpZSwgdHlwZSwgbGVuKTsKLQl0
LT5tX3RhZ19mcmVlID0gbV90YWdfZnJlZV9kZWZhdWx0OwotCXJldHVybiB0OwotfQotCi0vKiBG
cmVlIGEgcGFja2V0IHRhZy4gKi8KLXZvaWQKLW1fdGFnX2ZyZWVfZGVmYXVsdChzdHJ1Y3QgbV90
YWcgKnQpCi17Ci0gIGZyZWUodCk7Ci19Ci0KLS8qCi0gKiBDb3B5IGRhdGEgZnJvbSBhIGJ1ZmZl
ciBiYWNrIGludG8gdGhlIGluZGljYXRlZCBtYnVmIGNoYWluLAotICogc3RhcnRpbmcgIm9mZiIg
Ynl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nLCBleHRlbmRpbmcgdGhlIG1idWYKLSAqIGNoYWluIGlm
IG5lY2Vzc2FyeS4KLSAqLwotdm9pZAotbV9jb3B5YmFjayhzdHJ1Y3QgbWJ1ZiAqbTAsIGludCBv
ZmYsIGludCBsZW4sIGNhZGRyX3QgY3ApCi17Ci0JaW50IG1sZW47Ci0Jc3RydWN0IG1idWYgKm0g
PSBtMCwgKm47Ci0JaW50IHRvdGxlbiA9IDA7Ci0KLQlpZiAobTAgPT0gTlVMTCkKLQkJcmV0dXJu
OwotCXdoaWxlIChvZmYgPiAobWxlbiA9IG0tPm1fbGVuKSkgewotCQlvZmYgLT0gbWxlbjsKLQkJ
dG90bGVuICs9IG1sZW47Ci0JCWlmIChtLT5tX25leHQgPT0gTlVMTCkgewotCQkJbiA9IG1fZ2V0
KE1fTk9XQUlULCBtLT5tX3R5cGUpOwotCQkJaWYgKG4gPT0gTlVMTCkKLQkJCQlnb3RvIG91dDsK
LQkJCW1lbXNldChtdG9kKG4sIGNhZGRyX3QpLCAwLCBNTEVOKTsKLQkJCW4tPm1fbGVuID0gbWlu
KE1MRU4sIGxlbiArIG9mZik7Ci0JCQltLT5tX25leHQgPSBuOwotCQl9Ci0JCW0gPSBtLT5tX25l
eHQ7Ci0JfQotCXdoaWxlIChsZW4gPiAwKSB7Ci0JCW1sZW4gPSBtaW4gKG0tPm1fbGVuIC0gb2Zm
LCBsZW4pOwotCQltZW1jcHkob2ZmICsgbXRvZChtLCBjYWRkcl90KSwgY3AsICh1X2ludCltbGVu
KTsKLQkJY3AgKz0gbWxlbjsKLQkJbGVuIC09IG1sZW47Ci0JCW1sZW4gKz0gb2ZmOwotCQlvZmYg
PSAwOwotCQl0b3RsZW4gKz0gbWxlbjsKLQkJaWYgKGxlbiA9PSAwKQotCQkJYnJlYWs7Ci0JCWlm
IChtLT5tX25leHQgPT0gTlVMTCkgewotCQkJbiA9IG1fZ2V0KE1fTk9XQUlULCBtLT5tX3R5cGUp
OwotCQkJaWYgKG4gPT0gTlVMTCkKLQkJCQlicmVhazsKLQkJCW4tPm1fbGVuID0gbWluKE1MRU4s
IGxlbik7Ci0JCQltLT5tX25leHQgPSBuOwotCQl9Ci0JCW0gPSBtLT5tX25leHQ7Ci0JfQotb3V0
OglpZiAoKChtID0gbTApLT5tX2ZsYWdzICYgTV9QS1RIRFIpICYmIChtLT5tX3BrdGhkci5sZW4g
PCB0b3RsZW4pKQotCQltLT5tX3BrdGhkci5sZW4gPSB0b3RsZW47Ci19Ci0KLQotLyoKLSAqIExl
c3Nlci11c2VkIHBhdGggZm9yIE1fUFJFUEVORDoKLSAqIGFsbG9jYXRlIG5ldyBtYnVmIHRvIHBy
ZXBlbmQgdG8gY2hhaW4sCi0gKiBjb3B5IGp1bmsgYWxvbmcuCi0gKi8KLXN0cnVjdCBtYnVmICoK
LW1fcHJlcGVuZChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGhvdykKLXsKLQlzdHJ1Y3Qg
bWJ1ZiAqbW47Ci0KLQlpZiAobS0+bV9mbGFncyAmIE1fUEtUSERSKQotCQlNR0VUSERSKG1uLCBo
b3csIG0tPm1fdHlwZSk7Ci0JZWxzZQotCQlNR0VUKG1uLCBob3csIG0tPm1fdHlwZSk7Ci0JaWYg
KG1uID09IE5VTEwpIHsKLQkJbV9mcmVlbShtKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYg
KG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikKLQkJTV9NT1ZFX1BLVEhEUihtbiwgbSk7Ci0JbW4tPm1f
bmV4dCA9IG07Ci0JbSA9IG1uOwotCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpIHsKLQkJaWYg
KGxlbiA8IE1ITEVOKQotCQkJTUhfQUxJR04obSwgbGVuKTsKLQl9IGVsc2UgewotCQlpZiAobGVu
IDwgTUxFTikKLQkJCU1fQUxJR04obSwgbGVuKTsKLQl9Ci0JbS0+bV9sZW4gPSBsZW47Ci0JcmV0
dXJuIChtKTsKLX0KLQotLyoKLSAqIENvcHkgZGF0YSBmcm9tIGFuIG1idWYgY2hhaW4gc3RhcnRp
bmcgIm9mZiIgYnl0ZXMgZnJvbSB0aGUgYmVnaW5uaW5nLAotICogY29udGludWluZyBmb3IgImxl
biIgYnl0ZXMsIGludG8gdGhlIGluZGljYXRlZCBidWZmZXIuCi0gKi8KLXZvaWQKLW1fY29weWRh
dGEoY29uc3Qgc3RydWN0IG1idWYgKm0sIGludCBvZmYsIGludCBsZW4sIGNhZGRyX3QgY3ApCi17
Ci0JdV9pbnQgY291bnQ7Ci0KLQlLQVNTRVJUKG9mZiA+PSAwLCAoIm1fY29weWRhdGEsIG5lZ2F0
aXZlIG9mZiAlZCIsIG9mZikpOwotCUtBU1NFUlQobGVuID49IDAsICgibV9jb3B5ZGF0YSwgbmVn
YXRpdmUgbGVuICVkIiwgbGVuKSk7Ci0Jd2hpbGUgKG9mZiA+IDApIHsKLQkJS0FTU0VSVChtICE9
IE5VTEwsICgibV9jb3B5ZGF0YSwgb2Zmc2V0ID4gc2l6ZSBvZiBtYnVmIGNoYWluIikpOwotCQlp
ZiAob2ZmIDwgbS0+bV9sZW4pCi0JCQlicmVhazsKLQkJb2ZmIC09IG0tPm1fbGVuOwotCQltID0g
bS0+bV9uZXh0OwotCX0KLQl3aGlsZSAobGVuID4gMCkgewotCQlLQVNTRVJUKG0gIT0gTlVMTCwg
KCJtX2NvcHlkYXRhLCBsZW5ndGggPiBzaXplIG9mIG1idWYgY2hhaW4iKSk7Ci0JCWNvdW50ID0g
bWluKG0tPm1fbGVuIC0gb2ZmLCBsZW4pOwotCQltZW1jcHkoY3AsIG10b2QobSwgY2FkZHJfdCkg
KyBvZmYsIGNvdW50KTsKLQkJbGVuIC09IGNvdW50OwotCQljcCArPSBjb3VudDsKLQkJb2ZmID0g
MDsKLQkJbSA9IG0tPm1fbmV4dDsKLQl9Ci19Ci0KLQotLyoKLSAqIENvbmNhdGVuYXRlIG1idWYg
Y2hhaW4gbiB0byBtLgotICogQm90aCBjaGFpbnMgbXVzdCBiZSBvZiB0aGUgc2FtZSB0eXBlIChl
LmcuIE1UX0RBVEEpLgotICogQW55IG1fcGt0aGRyIGlzIG5vdCB1cGRhdGVkLgotICovCi12b2lk
Ci1tX2NhdChzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKm4pCi17Ci0Jd2hpbGUgKG0tPm1f
bmV4dCkKLQkJbSA9IG0tPm1fbmV4dDsKLQl3aGlsZSAobikgewotCQlpZiAobS0+bV9mbGFncyAm
IE1fRVhUIHx8Ci0JCSAgICBtLT5tX2RhdGEgKyBtLT5tX2xlbiArIG4tPm1fbGVuID49ICZtLT5t
X2RhdFtNTEVOXSkgewotCQkJLyoganVzdCBqb2luIHRoZSB0d28gY2hhaW5zICovCi0JCQltLT5t
X25leHQgPSBuOwotCQkJcmV0dXJuOwotCQl9Ci0JCS8qIHNwbGF0IHRoZSBkYXRhIGZyb20gb25l
IGludG8gdGhlIG90aGVyICovCi0JCW1lbWNweShtdG9kKG0sIGNhZGRyX3QpICsgbS0+bV9sZW4s
IG10b2QobiwgY2FkZHJfdCksICh1X2ludCluLT5tX2xlbik7Ci0JCW0tPm1fbGVuICs9IG4tPm1f
bGVuOwotCQluID0gbV9mcmVlKG4pOwotCX0KLX0KLQotCi12b2lkCi1tX2FkaihzdHJ1Y3QgbWJ1
ZiAqbXAsIGludCByZXFfbGVuKQotewotCWludCBsZW4gPSByZXFfbGVuOwotCXN0cnVjdCBtYnVm
ICptOwotCWludCBjb3VudDsKLQotCWlmICgobSA9IG1wKSA9PSBOVUxMKQotCQlyZXR1cm47Ci0J
aWYgKGxlbiA+PSAwKSB7Ci0JCS8qCi0JCSAqIFRyaW0gZnJvbSBoZWFkLgotCQkgKi8KLQkJd2hp
bGUgKG0gIT0gTlVMTCAmJiBsZW4gPiAwKSB7Ci0JCQlpZiAobS0+bV9sZW4gPD0gbGVuKSB7Ci0J
CQkJbGVuIC09IG0tPm1fbGVuOwotCQkJCW0tPm1fbGVuID0gMDsKLQkJCQltID0gbS0+bV9uZXh0
OwotCQkJfSBlbHNlIHsKLQkJCQltLT5tX2xlbiAtPSBsZW47Ci0JCQkJbS0+bV9kYXRhICs9IGxl
bjsKLQkJCQlsZW4gPSAwOwotCQkJfQotCQl9Ci0JCW0gPSBtcDsKLQkJaWYgKG1wLT5tX2ZsYWdz
ICYgTV9QS1RIRFIpCi0JCQltLT5tX3BrdGhkci5sZW4gLT0gKHJlcV9sZW4gLSBsZW4pOwotCX0g
ZWxzZSB7Ci0JCS8qCi0JCSAqIFRyaW0gZnJvbSB0YWlsLiAgU2NhbiB0aGUgbWJ1ZiBjaGFpbiwK
LQkJICogY2FsY3VsYXRpbmcgaXRzIGxlbmd0aCBhbmQgZmluZGluZyB0aGUgbGFzdCBtYnVmLgot
CQkgKiBJZiB0aGUgYWRqdXN0bWVudCBvbmx5IGFmZmVjdHMgdGhpcyBtYnVmLCB0aGVuIGp1c3QK
LQkJICogYWRqdXN0IGFuZCByZXR1cm4uICBPdGhlcndpc2UsIHJlc2NhbiBhbmQgdHJ1bmNhdGUK
LQkJICogYWZ0ZXIgdGhlIHJlbWFpbmluZyBzaXplLgotCQkgKi8KLQkJbGVuID0gLWxlbjsKLQkJ
Y291bnQgPSAwOwotCQlmb3IgKDs7KSB7Ci0JCQljb3VudCArPSBtLT5tX2xlbjsKLQkJCWlmICht
LT5tX25leHQgPT0gKHN0cnVjdCBtYnVmICopMCkKLQkJCQlicmVhazsKLQkJCW0gPSBtLT5tX25l
eHQ7Ci0JCX0KLQkJaWYgKG0tPm1fbGVuID49IGxlbikgewotCQkJbS0+bV9sZW4gLT0gbGVuOwot
CQkJaWYgKG1wLT5tX2ZsYWdzICYgTV9QS1RIRFIpCi0JCQkJbXAtPm1fcGt0aGRyLmxlbiAtPSBs
ZW47Ci0JCQlyZXR1cm47Ci0JCX0KLQkJY291bnQgLT0gbGVuOwotCQlpZiAoY291bnQgPCAwKQot
CQkJY291bnQgPSAwOwotCQkvKgotCQkgKiBDb3JyZWN0IGxlbmd0aCBmb3IgY2hhaW4gaXMgImNv
dW50Ii4KLQkJICogRmluZCB0aGUgbWJ1ZiB3aXRoIGxhc3QgZGF0YSwgYWRqdXN0IGl0cyBsZW5n
dGgsCi0JCSAqIGFuZCB0b3NzIGRhdGEgZnJvbSByZW1haW5pbmcgbWJ1ZnMgb24gY2hhaW4uCi0J
CSAqLwotCQltID0gbXA7Ci0JCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCi0JCQltLT5tX3Br
dGhkci5sZW4gPSBjb3VudDsKLQkJZm9yICg7IG07IG0gPSBtLT5tX25leHQpIHsKLQkJCWlmICht
LT5tX2xlbiA+PSBjb3VudCkgewotCQkJCW0tPm1fbGVuID0gY291bnQ7Ci0JCQkJaWYgKG0tPm1f
bmV4dCAhPSBOVUxMKSB7Ci0JCQkJCW1fZnJlZW0obS0+bV9uZXh0KTsKLQkJCQkJbS0+bV9uZXh0
ID0gTlVMTDsKLQkJCQl9Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCQljb3VudCAtPSBtLT5tX2xlbjsK
LQkJfQotCX0KLX0KLQotCi0vKiBtX3NwbGl0IGlzIHVzZWQgd2l0aGluIHNjdHBfaGFuZGxlX2Nv
b2tpZV9lY2hvLiAqLwotCi0vKgotICogUGFydGl0aW9uIGFuIG1idWYgY2hhaW4gaW4gdHdvIHBp
ZWNlcywgcmV0dXJuaW5nIHRoZSB0YWlsIC0tCi0gKiBhbGwgYnV0IHRoZSBmaXJzdCBsZW4wIGJ5
dGVzLiAgSW4gY2FzZSBvZiBmYWlsdXJlLCBpdCByZXR1cm5zIE5VTEwgYW5kCi0gKiBhdHRlbXB0
cyB0byByZXN0b3JlIHRoZSBjaGFpbiB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCi0gKgotICogTm90
ZSB0aGF0IHRoZSByZXN1bHRpbmcgbWJ1ZnMgbWlnaHQgYmUgcmVhZC1vbmx5LCBiZWNhdXNlIHRo
ZSBuZXcKLSAqIG1idWYgY2FuIGVuZCB1cCBzaGFyaW5nIGFuIG1idWYgY2x1c3RlciB3aXRoIHRo
ZSBvcmlnaW5hbCBtYnVmIGlmCi0gKiB0aGUgImJyZWFraW5nIHBvaW50IiBoYXBwZW5zIHRvIGxp
ZSB3aXRoaW4gYSBjbHVzdGVyIG1idWYuIFVzZSB0aGUKLSAqIE1fV1JJVEFCTEUoKSBtYWNybyB0
byBjaGVjayBmb3IgdGhpcyBjYXNlLgotICovCi1zdHJ1Y3QgbWJ1ZiAqCi1tX3NwbGl0KHN0cnVj
dCBtYnVmICptMCwgaW50IGxlbjAsIGludCB3YWl0KQotewotCXN0cnVjdCBtYnVmICptLCAqbjsK
LQl1X2ludCBsZW4gPSBsZW4wLCByZW1haW47Ci0KLQkvKiBNQlVGX0NIRUNLU0xFRVAod2FpdCk7
ICovCi0JZm9yIChtID0gbTA7IG0gJiYgKGludClsZW4gPiBtLT5tX2xlbjsgbSA9IG0tPm1fbmV4
dCkKLQkJbGVuIC09IG0tPm1fbGVuOwotCWlmIChtID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7
Ci0JcmVtYWluID0gbS0+bV9sZW4gLSBsZW47Ci0JaWYgKG0wLT5tX2ZsYWdzICYgTV9QS1RIRFIp
IHsKLQkJTUdFVEhEUihuLCB3YWl0LCBtMC0+bV90eXBlKTsKLQkJaWYgKG4gPT0gTlVMTCkKLQkJ
CXJldHVybiAoTlVMTCk7Ci0JCW4tPm1fcGt0aGRyLnJjdmlmID0gbTAtPm1fcGt0aGRyLnJjdmlm
OwotCQluLT5tX3BrdGhkci5sZW4gPSBtMC0+bV9wa3RoZHIubGVuIC0gbGVuMDsKLQkJbTAtPm1f
cGt0aGRyLmxlbiA9IGxlbjA7Ci0JCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCi0JCQlnb3RvIGV4
dHBhY2tldDsKLQkJaWYgKHJlbWFpbiA+IE1ITEVOKSB7Ci0JCQkvKiBtIGNhbid0IGJlIHRoZSBs
ZWFkIHBhY2tldCAqLwotCQkJTUhfQUxJR04obiwgMCk7Ci0JCQluLT5tX25leHQgPSBtX3NwbGl0
KG0sIGxlbiwgd2FpdCk7Ci0JCQlpZiAobi0+bV9uZXh0ID09IE5VTEwpIHsKLQkJCQkodm9pZCkg
bV9mcmVlKG4pOwotCQkJCXJldHVybiAoTlVMTCk7Ci0JCQl9IGVsc2UgewotCQkJCW4tPm1fbGVu
ID0gMDsKLQkJCQlyZXR1cm4gKG4pOwotCQkJfQotCQl9IGVsc2UKLQkJCU1IX0FMSUdOKG4sIHJl
bWFpbik7Ci0JfSBlbHNlIGlmIChyZW1haW4gPT0gMCkgewotCQluID0gbS0+bV9uZXh0OwotCQlt
LT5tX25leHQgPSBOVUxMOwotCQlyZXR1cm4gKG4pOwotCX0gZWxzZSB7Ci0JCU1HRVQobiwgd2Fp
dCwgbS0+bV90eXBlKTsKLQkJaWYgKG4gPT0gTlVMTCkKLQkJCXJldHVybiAoTlVMTCk7Ci0JCU1f
QUxJR04obiwgcmVtYWluKTsKLQl9Ci1leHRwYWNrZXQ6Ci0JaWYgKG0tPm1fZmxhZ3MgJiBNX0VY
VCkgewotCQluLT5tX2RhdGEgPSBtLT5tX2RhdGEgKyBsZW47Ci0JCW1iX2R1cGNsKG4sIG0pOwot
CX0gZWxzZSB7Ci0JCW1lbWNweShtdG9kKG4sIGNhZGRyX3QpLCBtdG9kKG0sIGNhZGRyX3QpICsg
bGVuLCByZW1haW4pOwotCX0KLQluLT5tX2xlbiA9IHJlbWFpbjsKLQltLT5tX2xlbiA9IGxlbjsK
LQluLT5tX25leHQgPSBtLT5tX25leHQ7Ci0JbS0+bV9uZXh0ID0gTlVMTDsKLQlyZXR1cm4gKG4p
OwotfQotCi0KLQotCi1pbnQKLXBhY2tfc2VuZF9idWZmZXIoY2FkZHJfdCBidWZmZXIsIHN0cnVj
dCBtYnVmKiBtYil7Ci0KLQlpbnQgY291bnRfdG9fY29weTsKLQlpbnQgdG90YWxfY291bnRfY29w
aWVkID0gMDsKLQlpbnQgb2Zmc2V0ID0gMDsKLQotCWRvIHsKLQkJY291bnRfdG9fY29weSA9IG1i
LT5tX2xlbjsKLQkJbWVtY3B5KGJ1ZmZlcitvZmZzZXQsIG10b2QobWIsIGNhZGRyX3QpLCBjb3Vu
dF90b19jb3B5KTsKLQkJb2Zmc2V0ICs9IGNvdW50X3RvX2NvcHk7Ci0JCXRvdGFsX2NvdW50X2Nv
cGllZCArPSBjb3VudF90b19jb3B5OwotCQltYiA9IG1iLT5tX25leHQ7Ci0JfSB3aGlsZShtYik7
Ci0KLQlyZXR1cm4gKHRvdGFsX2NvdW50X2NvcGllZCk7Ci19CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c2VyX21idWYuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfbWJ1Zi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCBlNTQ3ZWUzNGRiN2U3ZGNlZWE2OTQ4YzA5ODVhNjY0Y2Y1NGNlMDU2Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJf
bWJ1Zi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDM3ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0
IChjKSAxOTgyLCAxOTg2LCAxOTg4LCAxOTkzCi0gKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBV
bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVz
IG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQK
LSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9NQlVGX0hf
Ci0jZGVmaW5lIF9VU0VSX01CVUZfSF8KLQotLyogX19Vc2Vyc3BhY2VfXyBoZWFkZXIgZmlsZSBm
b3IgbWJ1ZnMgKi8KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmICFkZWZpbmVkKFNDVFBfU0lNUExF
X0FMTE9DQVRPUikKLSNpbmNsdWRlICJ1bWVtLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJ1c2VyX21h
bGxvYy5oIgotI2luY2x1ZGUgIm5ldGluZXQvc2N0cF9vc191c2Vyc3BhY2UuaCIKLQotI2RlZmlu
ZSBVU0lOR19NQlVGX0NPTlNUUlVDVE9SIDAKLQotLyogRm9yIExpbnV4ICovCi0jaWZuZGVmIE1T
SVpFCi0jZGVmaW5lIE1TSVpFIDI1NgotLyogI2RlZmluZSBNU0laRSAxMDI0ICovCi0jZW5kaWYK
LSNpZm5kZWYgTUNMQllURVMKLSNkZWZpbmUgTUNMQllURVMgMjA0OAotI2VuZGlmCi0KLXN0cnVj
dCBtYnVmICogbV9nZXRoZHIoaW50IGhvdywgc2hvcnQgdHlwZSk7Ci1zdHJ1Y3QgbWJ1ZiAqIG1f
Z2V0KGludCBob3csIHNob3J0IHR5cGUpOwotc3RydWN0IG1idWYgKiBtX2ZyZWUoc3RydWN0IG1i
dWYgKm0pOwotdm9pZCBtX2NsZ2V0KHN0cnVjdCBtYnVmICptLCBpbnQgaG93KTsKLQotCi0vKiBt
YnVmIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uICovCi12b2lkIG1idWZfaW5pdGlhbGl6ZSh2b2lk
ICopOwotCi0jZGVmaW5lCU1fTU9WRV9QS1RIRFIodG8sIGZyb20pCW1fbW92ZV9wa3RoZHIoKHRv
KSwgKGZyb20pKQotI2RlZmluZQlNR0VUKG0sIGhvdywgdHlwZSkJKChtKSA9IG1fZ2V0KChob3cp
LCAodHlwZSkpKQotI2RlZmluZQlNR0VUSERSKG0sIGhvdywgdHlwZSkJKChtKSA9IG1fZ2V0aGRy
KChob3cpLCAodHlwZSkpKQotI2RlZmluZQlNQ0xHRVQobSwgaG93KQkJbV9jbGdldCgobSksICho
b3cpKQotCi0KLSNkZWZpbmUgTV9IRFJfUEFEICgoc2l6ZW9mKGludHB0cl90KT09NCkgPyAyIDog
NikgLyogbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18gKi8KLQotLyogTGVuZ3RoIHRvIG1fY29w
eSB0byBjb3B5IGFsbC4gKi8KLSNkZWZpbmUJTV9DT1BZQUxMCTEwMDAwMDAwMDAKLQotLyogdW1l
bV9jYWNoZV90IGlzIGRlZmluZWQgaW4gdXNlcl9pbmNsdWRlL3VtZW0uaCBhcwotICogdHlwZWRl
ZiBzdHJ1Y3QgdW1lbV9jYWNoZSB1bWVtX2NhY2hlX3Q7Ci0gKiBOb3RlOnVtZW1fem9uZV90IGlz
IGEgcG9pbnRlci4KLSAqLwotI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQotdHlw
ZWRlZiBzaXplX3Qgc2N0cF96b25lX3Q7Ci0jZWxzZQotdHlwZWRlZiB1bWVtX2NhY2hlX3QgKnNj
dHBfem9uZV90OwotI2VuZGlmCi0KLWV4dGVybiBzY3RwX3pvbmVfdCB6b25lX21idWY7Ci1leHRl
cm4gc2N0cF96b25lX3Qgem9uZV9jbHVzdDsKLWV4dGVybiBzY3RwX3pvbmVfdCB6b25lX2V4dF9y
ZWZjbnQ7Ci0KLS8qLQotICogTWFjcm9zIGZvciB0eXBlIGNvbnZlcnNpb246Ci0gKiBtdG9kKG0s
IHQpCS0tIENvbnZlcnQgbWJ1ZiBwb2ludGVyIHRvIGRhdGEgcG9pbnRlciBvZiBjb3JyZWN0IHR5
cGUuCi0gKiBkdG9tKHgpCS0tIENvbnZlcnQgZGF0YSBwb2ludGVyIHdpdGhpbiBtYnVmIHRvIG1i
dWYgcG9pbnRlciAoWFhYKS4KLSAqLwotI2RlZmluZQltdG9kKG0sIHQpCSgodCkoKG0pLT5tX2Rh
dGEpKQotI2RlZmluZQlkdG9tKHgpCQkoKHN0cnVjdCBtYnVmICopKChpbnRwdHJfdCkoeCkgJiB+
KE1TSVpFLTEpKSkKLQotc3RydWN0IG1iX2FyZ3MgewotCWludAlmbGFnczsJLyogRmxhZ3MgZm9y
IG1idWYgYmVpbmcgYWxsb2NhdGVkICovCi0Jc2hvcnQJdHlwZTsJLyogVHlwZSBvZiBtYnVmIGJl
aW5nIGFsbG9jYXRlZCAqLwotfTsKLQotc3RydWN0IGNsdXN0X2FyZ3MgewotCXN0cnVjdCBtYnVm
ICogcGFyZW50X21idWY7Ci19OwotCi1zdHJ1Y3QgbWJ1ZiAqICAgIG1fc3BsaXQoc3RydWN0IG1i
dWYgKiwgaW50LCBpbnQpOwotdm9pZCAgICAgICAgICAgICBtX2NhdChzdHJ1Y3QgbWJ1ZiAqbSwg
c3RydWN0IG1idWYgKm4pOwotdm9pZAkJIG1fYWRqKHN0cnVjdCBtYnVmICosIGludCk7Ci12b2lk
ICBtYl9mcmVlX2V4dChzdHJ1Y3QgbWJ1ZiAqKTsKLXZvaWQgIG1fZnJlZW0oc3RydWN0IG1idWYg
Kik7Ci1zdHJ1Y3QgbV90YWcJKm1fdGFnX2FsbG9jKHVfaW50MzJfdCwgaW50LCBpbnQsIGludCk7
Ci1zdHJ1Y3QgbWJ1ZgkqbV9jb3B5bShzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgaW50KTsKLXZv
aWQJCSBtX2NvcHliYWNrKHN0cnVjdCBtYnVmICosIGludCwgaW50LCBjYWRkcl90KTsKLXN0cnVj
dCBtYnVmCSptX3B1bGx1cChzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0IG1idWYJKm1fcHVs
bGRvd24oc3RydWN0IG1idWYgKiwgaW50IG9mZiwgaW50IGxlbiwgaW50ICpvZmZwKTsKLWludAkJ
IG1fZHVwX3BrdGhkcihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0
IG1fdGFnCSptX3RhZ19jb3B5KHN0cnVjdCBtX3RhZyAqLCBpbnQpOwotaW50CQkgbV90YWdfY29w
eV9jaGFpbihzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwotc3RydWN0IG1idWYJ
Km1fcHJlcGVuZChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCk7Ci12b2lkCQkgbV9jb3B5ZGF0YShj
b25zdCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY2FkZHJfdCk7Ci0KLSNkZWZpbmUgTUJVRl9N
RU1fTkFNRSAibWJ1ZiIKLSNkZWZpbmUgTUJVRl9DTFVTVEVSX01FTV9OQU1FICJtYnVmX2NsdXN0
ZXIiCi0jZGVmaW5lCU1CVUZfRVhUUkVGQ05UX01FTV9OQU1FCSJtYnVmX2V4dF9yZWZjbnQiCi0K
LSNkZWZpbmUJTVRfTk9JTklUCTI1NQkvKiBOb3QgYSB0eXBlIGJ1dCBhIGZsYWcgdG8gYWxsb2Nh
dGUKLQkJCQkgICBhIG5vbi1pbml0aWFsaXplZCBtYnVmICovCi0KLS8qCi0gKiBHZW5lcmFsIG1i
dWYgYWxsb2NhdG9yIHN0YXRpc3RpY3Mgc3RydWN0dXJlLgotICogX19Vc2Vyc3BhY2VfXyBtYnN0
YXQgbWF5IGJlIHVzZWZ1bCBmb3IgZ2F0aGVyaW5nIHN0YXRpc3RpY3MuCi0gKiBJbiB0aGUga2Vy
bmVsIG1hbnkgb2YgdGhlc2Ugc3RhdGlzdGljcyBhcmUgbm8gbG9uZ2VyIHVzZWQgYXMKLSAqIHRo
ZXkgdHJhY2sgYWxsb2NhdG9yIHN0YXRpc3RpY3MgdGhyb3VnaCBrZXJuZWwgVU1BJ3MgYnVpbHQg
aW4gc3RhdGlzdGljcyBtZWNoYW5pc20uCi0gKi8KLXN0cnVjdCBtYnN0YXQgewotCXVfbG9uZwlt
X21idWZzOwkvKiBYWFggKi8KLQl1X2xvbmcJbV9tY2x1c3RzOwkvKiBYWFggKi8KLQotCXVfbG9u
ZwltX2RyYWluOwkvKiB0aW1lcyBkcmFpbmVkIHByb3RvY29scyBmb3Igc3BhY2UgKi8KLQl1X2xv
bmcJbV9tY2ZhaWw7CS8qIFhYWDogdGltZXMgbV9jb3B5bSBmYWlsZWQgKi8KLQl1X2xvbmcJbV9t
cGZhaWw7CS8qIFhYWDogdGltZXMgbV9wdWxsdXAgZmFpbGVkICovCi0JdV9sb25nCW1fbXNpemU7
CS8qIGxlbmd0aCBvZiBhbiBtYnVmICovCi0JdV9sb25nCW1fbWNsYnl0ZXM7CS8qIGxlbmd0aCBv
ZiBhbiBtYnVmIGNsdXN0ZXIgKi8KLQl1X2xvbmcJbV9taW5jbHNpemU7CS8qIG1pbiBsZW5ndGgg
b2YgZGF0YSB0byBhbGxvY2F0ZSBhIGNsdXN0ZXIgKi8KLQl1X2xvbmcJbV9tbGVuOwkJLyogbGVu
Z3RoIG9mIGRhdGEgaW4gYW4gbWJ1ZiAqLwotCXVfbG9uZwltX21obGVuOwkvKiBsZW5ndGggb2Yg
ZGF0YSBpbiBhIGhlYWRlciBtYnVmICovCi0KLQkvKiBOdW1iZXIgb2YgbWJ0eXBlcyAoZ2l2ZXMg
IyBlbGVtcyBpbiBtYnR5cGVzW10gYXJyYXk6ICovCi0Jc2hvcnQJbV9udW10eXBlczsKLQotCS8q
IFhYWDogU2VuZGZpbGUgc3RhdHMgc2hvdWxkIGV2ZW50dWFsbHkgbW92ZSB0byB0aGVpciBvd24g
c3RydWN0ICovCi0JdV9sb25nCXNmX2lvY250OwkvKiB0aW1lcyBzZW5kZmlsZSBoYWQgdG8gZG8g
ZGlzayBJL08gKi8KLQl1X2xvbmcJc2ZfYWxsb2NmYWlsOwkvKiB0aW1lcyBzZmJ1ZiBhbGxvY2F0
aW9uIGZhaWxlZCAqLwotCXVfbG9uZwlzZl9hbGxvY3dhaXQ7CS8qIHRpbWVzIHNmYnVmIGFsbG9j
YXRpb24gaGFkIHRvIHdhaXQgKi8KLX07Ci0KLQotLyoKLSAqIE1idWZzIGFyZSBvZiBhIHNpbmds
ZSBzaXplLCBNU0laRSAoc3lzL3BhcmFtLmgpLCB3aGljaCBpbmNsdWRlcyBvdmVyaGVhZC4KLSAq
IEFuIG1idWYgbWF5IGFkZCBhIHNpbmdsZSAibWJ1ZiBjbHVzdGVyIiBvZiBzaXplIE1DTEJZVEVT
IChhbHNvIGluCi0gKiBzeXMvcGFyYW0uaCksIHdoaWNoIGhhcyBubyBhZGRpdGlvbmFsIG92ZXJo
ZWFkIGFuZCBpcyB1c2VkIGluc3RlYWQgb2YgdGhlCi0gKiBpbnRlcm5hbCBkYXRhIGFyZWE7IHRo
aXMgaXMgZG9uZSB3aGVuIGF0IGxlYXN0IE1JTkNMU0laRSBvZiBkYXRhIG11c3QgYmUKLSAqIHN0
b3JlZC4gIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gYWxsb2NhdGUgYSBzZXBhcmF0
ZSBidWZmZXIKLSAqIGV4dGVybmFsbHkgYW5kIGF0dGFjaCBpdCB0byB0aGUgbWJ1ZiBpbiBhIHdh
eSBzaW1pbGFyIHRvIHRoYXQgb2YgbWJ1ZgotICogY2x1c3RlcnMuCi0gKi8KLSNkZWZpbmUJTUxF
TgkJKChpbnQpKE1TSVpFIC0gc2l6ZW9mKHN0cnVjdCBtX2hkcikpKQkvKiBub3JtYWwgZGF0YSBs
ZW4gKi8KLSNkZWZpbmUJTUhMRU4JCSgoaW50KShNTEVOIC0gc2l6ZW9mKHN0cnVjdCBwa3RoZHIp
KSkJLyogZGF0YSBsZW4gdy9wa3RoZHIgKi8KLSNkZWZpbmUJTUlOQ0xTSVpFCSgoaW50KShNSExF
TiArIDEpKQkvKiBzbWFsbGVzdCBhbW91bnQgdG8gcHV0IGluIGNsdXN0ZXIgKi8KLSNkZWZpbmUJ
TV9NQVhDT01QUkVTUwkoTUhMRU4gLyAyKQkvKiBtYXggYW1vdW50IHRvIGNvcHkgZm9yIGNvbXBy
ZXNzaW9uICovCi0KLQotLyoKLSAqIEhlYWRlciBwcmVzZW50IGF0IHRoZSBiZWdpbm5pbmcgb2Yg
ZXZlcnkgbWJ1Zi4KLSAqLwotc3RydWN0IG1faGRyIHsKLQlzdHJ1Y3QgbWJ1ZgkqbWhfbmV4dDsJ
LyogbmV4dCBidWZmZXIgaW4gY2hhaW4gKi8KLQlzdHJ1Y3QgbWJ1ZgkqbWhfbmV4dHBrdDsJLyog
bmV4dCBjaGFpbiBpbiBxdWV1ZS9yZWNvcmQgKi8KLQljYWRkcl90CQkgbWhfZGF0YTsJLyogbG9j
YXRpb24gb2YgZGF0YSAqLwotCWludAkJIG1oX2xlbjsJLyogYW1vdW50IG9mIGRhdGEgaW4gdGhp
cyBtYnVmICovCi0JaW50CQkgbWhfZmxhZ3M7CS8qIGZsYWdzOyBzZWUgYmVsb3cgKi8KLQlzaG9y
dAkJIG1oX3R5cGU7CS8qIHR5cGUgb2YgZGF0YSBpbiB0aGlzIG1idWYgKi8KLQl1aW50OF90ICAg
ICAgICAgIHBhZFtNX0hEUl9QQURdOy8qIHdvcmQgYWxpZ24gICAgICAgICAgICAgICAgICAqLwot
fTsKLQotLyoKLSAqIFBhY2tldCB0YWcgc3RydWN0dXJlIChzZWUgYmVsb3cgZm9yIGRldGFpbHMp
LgotICovCi1zdHJ1Y3QgbV90YWcgewotCVNMSVNUX0VOVFJZKG1fdGFnKQltX3RhZ19saW5rOwkv
KiBMaXN0IG9mIHBhY2tldCB0YWdzICovCi0JdV9pbnQxNl90CQltX3RhZ19pZDsJLyogVGFnIElE
ICovCi0JdV9pbnQxNl90CQltX3RhZ19sZW47CS8qIExlbmd0aCBvZiBkYXRhICovCi0JdV9pbnQz
Ml90CQltX3RhZ19jb29raWU7CS8qIEFCSS9Nb2R1bGUgSUQgKi8KLQl2b2lkCQkJKCptX3RhZ19m
cmVlKShzdHJ1Y3QgbV90YWcgKik7Ci19OwotCi0vKgotICogUmVjb3JkL3BhY2tldCBoZWFkZXIg
aW4gZmlyc3QgbWJ1ZiBvZiBjaGFpbjsgdmFsaWQgb25seSBpZiBNX1BLVEhEUiBpcyBzZXQuCi0g
Ki8KLXN0cnVjdCBwa3RoZHIgewotCXN0cnVjdCBpZm5ldAkqcmN2aWY7CQkvKiByY3YgaW50ZXJm
YWNlICovCi0JLyogdmFyaWFibGVzIGZvciBpcCBhbmQgdGNwIHJlYXNzZW1ibHkgKi8KLQl2b2lk
CQkqaGVhZGVyOwkvKiBwb2ludGVyIHRvIHBhY2tldCBoZWFkZXIgKi8KLQlpbnQJCSBsZW47CQkv
KiB0b3RhbCBwYWNrZXQgbGVuZ3RoICovCi0JLyogdmFyaWFibGVzIGZvciBoYXJkd2FyZSBjaGVj
a3N1bSAqLwotCWludAkJIGNzdW1fZmxhZ3M7CS8qIGZsYWdzIHJlZ2FyZGluZyBjaGVja3N1bSAq
LwotCWludAkJIGNzdW1fZGF0YTsJLyogZGF0YSBmaWVsZCB1c2VkIGJ5IGNzdW0gcm91dGluZXMg
Ki8KLQl1X2ludDE2X3QJIHRzb19zZWdzejsJLyogVFNPIHNlZ21lbnQgc2l6ZSAqLwotCXVfaW50
MTZfdAkgZXRoZXJfdnRhZzsJLyogRXRoZXJuZXQgODAyLjFwK3EgdmxhbiB0YWcgKi8KLQlTTElT
VF9IRUFEKHBhY2tldF90YWdzLCBtX3RhZykgdGFnczsgLyogbGlzdCBvZiBwYWNrZXQgdGFncyAq
LwotfTsKLQotLyoKLSAqIERlc2NyaXB0aW9uIG9mIGV4dGVybmFsIHN0b3JhZ2UgbWFwcGVkIGlu
dG8gbWJ1ZjsgdmFsaWQgb25seSBpZiBNX0VYVCBpcwotICogc2V0LgotICovCi1zdHJ1Y3QgbV9l
eHQgewotCWNhZGRyX3QJCSBleHRfYnVmOwkvKiBzdGFydCBvZiBidWZmZXIgKi8KLQl2b2lkCQko
KmV4dF9mcmVlKQkvKiBmcmVlIHJvdXRpbmUgaWYgbm90IHRoZSB1c3VhbCAqLwotCQkJICAgICh2
b2lkICosIHZvaWQgKik7Ci0Jdm9pZAkJKmV4dF9hcmdzOwkvKiBvcHRpb25hbCBhcmd1bWVudCBw
b2ludGVyICovCi0JdV9pbnQJCSBleHRfc2l6ZTsJLyogc2l6ZSBvZiBidWZmZXIsIGZvciBleHRf
ZnJlZSAqLwotCXZvbGF0aWxlIHVfaW50CSpyZWZfY250OwkvKiBwb2ludGVyIHRvIHJlZiBjb3Vu
dCBpbmZvICovCi0JaW50CQkgZXh0X3R5cGU7CS8qIHR5cGUgb2YgZXh0ZXJuYWwgc3RvcmFnZSAq
LwotfTsKLQotCi0vKgotICogVGhlIGNvcmUgb2YgdGhlIG1idWYgb2JqZWN0IGFsb25nIHdpdGgg
c29tZSBzaG9ydGN1dCBkZWZpbmVkIGZvciBwcmFjdGljYWwKLSAqIHB1cnBvc2VzLgotICovCi1z
dHJ1Y3QgbWJ1ZiB7Ci0Jc3RydWN0IG1faGRyCW1faGRyOwotCXVuaW9uIHsKLQkJc3RydWN0IHsK
LQkJCXN0cnVjdCBwa3RoZHIJTUhfcGt0aGRyOwkvKiBNX1BLVEhEUiBzZXQgKi8KLQkJCXVuaW9u
IHsKLQkJCQlzdHJ1Y3QgbV9leHQJTUhfZXh0OwkvKiBNX0VYVCBzZXQgKi8KLQkJCQljaGFyCQlN
SF9kYXRhYnVmW01ITEVOXTsKLQkJCX0gTUhfZGF0OwotCQl9IE1IOwotCQljaGFyCU1fZGF0YWJ1
ZltNTEVOXTsJCS8qICFNX1BLVEhEUiwgIU1fRVhUICovCi0JfSBNX2RhdDsKLX07Ci0KLSNkZWZp
bmUJbV9uZXh0CQltX2hkci5taF9uZXh0Ci0jZGVmaW5lCW1fbGVuCQltX2hkci5taF9sZW4KLSNk
ZWZpbmUJbV9kYXRhCQltX2hkci5taF9kYXRhCi0jZGVmaW5lCW1fdHlwZQkJbV9oZHIubWhfdHlw
ZQotI2RlZmluZQltX2ZsYWdzCQltX2hkci5taF9mbGFncwotI2RlZmluZQltX25leHRwa3QJbV9o
ZHIubWhfbmV4dHBrdAotI2RlZmluZQltX2FjdAkJbV9uZXh0cGt0Ci0jZGVmaW5lCW1fcGt0aGRy
CU1fZGF0Lk1ILk1IX3BrdGhkcgotI2RlZmluZQltX2V4dAkJTV9kYXQuTUguTUhfZGF0Lk1IX2V4
dAotI2RlZmluZQltX3BrdGRhdAlNX2RhdC5NSC5NSF9kYXQuTUhfZGF0YWJ1ZgotI2RlZmluZQlt
X2RhdAkJTV9kYXQuTV9kYXRhYnVmCi0KLQotLyoKLSAqIG1idWYgZmxhZ3MuCi0gKi8KLSNkZWZp
bmUJTV9FWFQJCTB4MDAwMQkvKiBoYXMgYXNzb2NpYXRlZCBleHRlcm5hbCBzdG9yYWdlICovCi0j
ZGVmaW5lCU1fUEtUSERSCTB4MDAwMgkvKiBzdGFydCBvZiByZWNvcmQgKi8KLSNkZWZpbmUJTV9F
T1IJCTB4MDAwNAkvKiBlbmQgb2YgcmVjb3JkICovCi0jZGVmaW5lCU1fUkRPTkxZCTB4MDAwOAkv
KiBhc3NvY2lhdGVkIGRhdGEgaXMgbWFya2VkIHJlYWQtb25seSAqLwotI2RlZmluZQlNX1BST1RP
MQkweDAwMTAJLyogcHJvdG9jb2wtc3BlY2lmaWMgKi8KLSNkZWZpbmUJTV9QUk9UTzIJMHgwMDIw
CS8qIHByb3RvY29sLXNwZWNpZmljICovCi0jZGVmaW5lCU1fUFJPVE8zCTB4MDA0MAkvKiBwcm90
b2NvbC1zcGVjaWZpYyAqLwotI2RlZmluZQlNX1BST1RPNAkweDAwODAJLyogcHJvdG9jb2wtc3Bl
Y2lmaWMgKi8KLSNkZWZpbmUJTV9QUk9UTzUJMHgwMTAwCS8qIHByb3RvY29sLXNwZWNpZmljICov
Ci0jZGVmaW5lCU1fRlJFRUxJU1QJMHg4MDAwCS8qIG1idWYgaXMgb24gdGhlIGZyZWUgbGlzdCAq
LwotCi0KLS8qCi0gKiBGbGFncyBjb3BpZWQgd2hlbiBjb3B5aW5nIG1fcGt0aGRyLgotICovCi0j
ZGVmaW5lCU1fQ09QWUZMQUdTCShNX1BLVEhEUnxNX0VPUnxNX1JET05MWXxNX1BST1RPMXxNX1BS
T1RPMXxNX1BST1RPMnxcCi0JCQkgICAgTV9QUk9UTzN8TV9QUk9UTzR8TV9QUk9UTzV8XAotCQkJ
ICAgIE1fQkNBU1R8TV9NQ0FTVHxNX0ZSQUd8TV9GSVJTVEZSQUd8TV9MQVNURlJBR3xcCi0JCQkg
ICAgTV9WTEFOVEFHfE1fUFJPTUlTQykKLQotCi0vKgotICogbWJ1ZiBwa3RoZHIgZmxhZ3MgKGFs
c28gc3RvcmVkIGluIG1fZmxhZ3MpLgotICovCi0jZGVmaW5lCU1fQkNBU1QJCTB4MDIwMAkvKiBz
ZW5kL3JlY2VpdmVkIGFzIGxpbmstbGV2ZWwgYnJvYWRjYXN0ICovCi0jZGVmaW5lCU1fTUNBU1QJ
CTB4MDQwMAkvKiBzZW5kL3JlY2VpdmVkIGFzIGxpbmstbGV2ZWwgbXVsdGljYXN0ICovCi0jZGVm
aW5lCU1fRlJBRwkJMHgwODAwCS8qIHBhY2tldCBpcyBhIGZyYWdtZW50IG9mIGEgbGFyZ2VyIHBh
Y2tldCAqLwotI2RlZmluZQlNX0ZJUlNURlJBRwkweDEwMDAJLyogcGFja2V0IGlzIGZpcnN0IGZy
YWdtZW50ICovCi0jZGVmaW5lCU1fTEFTVEZSQUcJMHgyMDAwCS8qIHBhY2tldCBpcyBsYXN0IGZy
YWdtZW50ICovCi0jZGVmaW5lCU1fVkxBTlRBRwkweDEwMDAwCS8qIGV0aGVyX3Z0YWcgaXMgdmFs
aWQgKi8KLSNkZWZpbmUJTV9QUk9NSVNDCTB4MjAwMDAJLyogcGFja2V0IHdhcyBub3QgZm9yIHVz
ICovCi0jZGVmaW5lCU1fTk9GUkVFCTB4NDAwMDAJLyogZG8gbm90IGZyZWUgbWJ1ZiAtIGl0IGlz
IGVtYmVkZGVkIGluIHRoZSBjbHVzdGVyICovCi0KLQotLyoKLSAqIEV4dGVybmFsIGJ1ZmZlciB0
eXBlczogaWRlbnRpZnkgZXh0X2J1ZiB0eXBlLgotICovCi0jZGVmaW5lCUVYVF9DTFVTVEVSCTEJ
LyogbWJ1ZiBjbHVzdGVyICovCi0jZGVmaW5lCUVYVF9TRkJVRgkyCS8qIHNlbmRmaWxlKDIpJ3Mg
c2ZfYnVmcyAqLwotI2RlZmluZQlFWFRfSlVNQk9QCTMJLyoganVtYm8gY2x1c3RlciA0MDk2IGJ5
dGVzICovCi0jZGVmaW5lCUVYVF9KVU1CTzkJNAkvKiBqdW1ibyBjbHVzdGVyIDkyMTYgYnl0ZXMg
Ki8KLSNkZWZpbmUJRVhUX0pVTUJPMTYJNQkvKiBqdW1ibyBjbHVzdGVyIDE2MTg0IGJ5dGVzICov
Ci0jZGVmaW5lCUVYVF9QQUNLRVQJNgkvKiBtYnVmK2NsdXN0ZXIgZnJvbSBwYWNrZXQgem9uZSAq
LwotI2RlZmluZQlFWFRfTUJVRgk3CS8qIGV4dGVybmFsIG1idWYgcmVmZXJlbmNlIChNX0lPVkVD
KSAqLwotI2RlZmluZQlFWFRfTkVUX0RSVgkxMDAJLyogY3VzdG9tIGV4dF9idWYgcHJvdmlkZWQg
YnkgbmV0IGRyaXZlcihzKSAqLwotI2RlZmluZQlFWFRfTU9EX1RZUEUJMjAwCS8qIGN1c3RvbSBt
b2R1bGUncyBleHRfYnVmIHR5cGUgKi8KLSNkZWZpbmUJRVhUX0RJU1BPU0FCTEUJMzAwCS8qIGNh
biB0aHJvdyB0aGlzIGJ1ZmZlciBhd2F5IHcvcGFnZSBmbGlwcGluZyAqLwotI2RlZmluZQlFWFRf
RVhUUkVGCTQwMAkvKiBoYXMgZXh0ZXJuYWxseSBtYWludGFpbmVkIHJlZl9jbnQgcHRyICovCi0K
LQotLyoKLSAqIG1idWYgdHlwZXMuCi0gKi8KLSNkZWZpbmUJTVRfTk9UTUJVRgkwCS8qIFVTRUQg
SU5URVJOQUxMWSBPTkxZISBPYmplY3QgaXMgbm90IG1idWYgKi8KLSNkZWZpbmUJTVRfREFUQQkJ
MQkvKiBkeW5hbWljIChkYXRhKSBhbGxvY2F0aW9uICovCi0jZGVmaW5lCU1UX0hFQURFUglNVF9E
QVRBCS8qIHBhY2tldCBoZWFkZXIsIHVzZSBNX1BLVEhEUiBpbnN0ZWFkICovCi0jZGVmaW5lCU1U
X1NPTkFNRQk4CS8qIHNvY2tldCBuYW1lICovCi0jZGVmaW5lCU1UX0NPTlRST0wJMTQJLyogZXh0
cmEtZGF0YSBwcm90b2NvbCBtZXNzYWdlICovCi0jZGVmaW5lCU1UX09PQkRBVEEJMTUJLyogZXhw
ZWRpdGVkIGRhdGEgICovCi0jZGVmaW5lCU1UX05UWVBFUwkxNgkvKiBudW1iZXIgb2YgbWJ1ZiB0
eXBlcyBmb3IgbWJ0eXBlc1tdICovCi0KLSNkZWZpbmUJTVRfTk9JTklUCTI1NQkvKiBOb3QgYSB0
eXBlIGJ1dCBhIGZsYWcgdG8gYWxsb2NhdGUKLQkJCQkgICBhIG5vbi1pbml0aWFsaXplZCBtYnVm
ICovCi0KLS8qCi0gKiBfX1VzZXJzcGFjZV9fIGZsYWdzIGxpa2UgTV9OT1dBSVQgYXJlIGRlZmlu
ZWQgaW4gbWFsbG9jLmgKLSAqIEZsYWdzIGxpa2UgdGhlc2UgYXJlIHVzZWQgaW4gZnVuY3Rpb25z
IGxpa2UgdW1hX3phbGxvYygpCi0gKiBidXQgZG9uJ3QgaGF2ZSBhbiBlcXVpdmFsZW50IGluIHVz
ZXJsYW5kIHVtZW0KLSAqIEZsYWdzIHNwZWNpZnlpbmcgaG93IGFuIGFsbG9jYXRpb24gc2hvdWxk
IGJlIG1hZGUuCi0gKgotICogVGhlIGZsYWcgdG8gdXNlIGlzIGFzIGZvbGxvd3M6Ci0gKiAtIE1f
RE9OVFdBSVQgb3IgTV9OT1dBSVQgZnJvbSBhbiBpbnRlcnJ1cHQgaGFuZGxlciB0byBub3QgYmxv
Y2sgYWxsb2NhdGlvbi4KLSAqIC0gTV9XQUlUIG9yIE1fV0FJVE9LIG9yIE1fVFJZV0FJVCBmcm9t
IHdoZXJldmVyIGl0IGlzIHNhZmUgdG8gYmxvY2suCi0gKgotICogTV9ET05UV0FJVC9NX05PV0FJ
VCBtZWFucyB0aGF0IHdlIHdpbGwgbm90IGJsb2NrIHRoZSB0aHJlYWQgZXhwbGljaXRseSBhbmQK
LSAqIGlmIHdlIGNhbm5vdCBhbGxvY2F0ZSBpbW1lZGlhdGVseSB3ZSBtYXkgcmV0dXJuIE5VTEws
IHdoZXJlYXMKLSAqIE1fV0FJVC9NX1dBSVRPSy9NX1RSWVdBSVQgbWVhbnMgdGhhdCBpZiB3ZSBj
YW5ub3QgYWxsb2NhdGUgcmVzb3VyY2VzIHdlCi0gKiB3aWxsIGJsb2NrIHVudGlsIHRoZXkgYXJl
IGF2YWlsYWJsZSwgYW5kIHRodXMgbmV2ZXIgcmV0dXJuIE5VTEwuCi0gKgotICogWFhYIEV2ZW50
dWFsbHkganVzdCBwaGFzZSB0aGlzIG91dCB0byB1c2UgTV9XQUlUT0svTV9OT1dBSVQuCi0gKi8K
LSNkZWZpbmUJTUJUT00oaG93KQkoaG93KQotCi12b2lkCQkgbV90YWdfZGVsZXRlKHN0cnVjdCBt
YnVmICosIHN0cnVjdCBtX3RhZyAqKTsKLXZvaWQJCSBtX3RhZ19kZWxldGVfY2hhaW4oc3RydWN0
IG1idWYgKiwgc3RydWN0IG1fdGFnICopOwotdm9pZAkJIG1fbW92ZV9wa3RoZHIoc3RydWN0IG1i
dWYgKiwgc3RydWN0IG1idWYgKik7Ci12b2lkCQkgbV90YWdfZnJlZV9kZWZhdWx0KHN0cnVjdCBt
X3RhZyAqKTsKLQotZXh0ZXJuIGludCBtYXhfbGlua2hkcjsgICAgLyogTGFyZ2VzdCBsaW5rLWxl
dmVsIGhlYWRlciAqLwotZXh0ZXJuIGludCBtYXhfcHJvdG9oZHI7IC8qIFNpemUgb2YgbGFyZ2Vz
dCBwcm90b2NvbCBsYXllciBoZWFkZXIuIFNlZSB1c2VyX21idWYuYyAqLwotCi1leHRlcm4gc3Ry
dWN0IG1ic3RhdAltYnN0YXQ7CQkvKiBHZW5lcmFsIG1idWYgc3RhdHMvaW5mb3MgKi8KLQotCi0v
KgotICogRXZhbHVhdGUgVFJVRSBpZiBpdCdzIHNhZmUgdG8gd3JpdGUgdG8gdGhlIG1idWYgbSdz
IGRhdGEgcmVnaW9uICh0aGlzIGNhbgotICogYmUgYm90aCB0aGUgbG9jYWwgZGF0YSBwYXlsb2Fk
LCBvciBhbiBleHRlcm5hbCBidWZmZXIgYXJlYSwgZGVwZW5kaW5nIG9uCi0gKiB3aGV0aGVyIE1f
RVhUIGlzIHNldCkuCi0gKi8KLSNkZWZpbmUJTV9XUklUQUJMRShtKQkoISgobSktPm1fZmxhZ3Mg
JiBNX1JET05MWSkgJiYJCQlcCi0JCQkgKCEoKChtKS0+bV9mbGFncyAmIE1fRVhUKSkgfHwJCQlc
Ci0JCQkgKCooKG0pLT5tX2V4dC5yZWZfY250KSA9PSAxKSkgKQkJXAotCi0KLS8qCi0gKiBDb21w
dXRlIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlIGJlZm9yZSB0aGUgY3VycmVudCBzdGFy
dCBvZiBkYXRhIGluCi0gKiBhbiBtYnVmLgotICoKLSAqIFRoZSBNX1dSSVRBQkxFKCkgaXMgYSB0
ZW1wb3JhcnksIGNvbnNlcnZhdGl2ZSBzYWZldHkgbWVhc3VyZTogdGhlIGJ1cmRlbgotICogb2Yg
Y2hlY2tpbmcgd3JpdGFiaWxpdHkgb2YgdGhlIG1idWYgZGF0YSBhcmVhIHJlc3RzIHNvbGVseSB3
aXRoIHRoZSBjYWxsZXIuCi0gKi8KLSNkZWZpbmUJTV9MRUFESU5HU1BBQ0UobSkJCQkJCQlcCi0J
KChtKS0+bV9mbGFncyAmIE1fRVhUID8JCQkJCQlcCi0JICAgIChNX1dSSVRBQkxFKG0pID8gKG0p
LT5tX2RhdGEgLSAobSktPm1fZXh0LmV4dF9idWYgOiAwKToJXAotCSAgICAobSktPm1fZmxhZ3Mg
JiBNX1BLVEhEUiA/IChtKS0+bV9kYXRhIC0gKG0pLT5tX3BrdGRhdCA6CVwKLQkgICAgKG0pLT5t
X2RhdGEgLSAobSktPm1fZGF0KQotCi0vKgotICogQ29tcHV0ZSB0aGUgYW1vdW50IG9mIHNwYWNl
IGF2YWlsYWJsZSBhZnRlciB0aGUgZW5kIG9mIGRhdGEgaW4gYW4gbWJ1Zi4KLSAqCi0gKiBUaGUg
TV9XUklUQUJMRSgpIGlzIGEgdGVtcG9yYXJ5LCBjb25zZXJ2YXRpdmUgc2FmZXR5IG1lYXN1cmU6
IHRoZSBidXJkZW4KLSAqIG9mIGNoZWNraW5nIHdyaXRhYmlsaXR5IG9mIHRoZSBtYnVmIGRhdGEg
YXJlYSByZXN0cyBzb2xlbHkgd2l0aCB0aGUgY2FsbGVyLgotICovCi0jZGVmaW5lCU1fVFJBSUxJ
TkdTUEFDRShtKQkJCQkJCVwKLQkoKG0pLT5tX2ZsYWdzICYgTV9FWFQgPwkJCQkJCVwKLQkgICAg
KE1fV1JJVEFCTEUobSkgPyAobSktPm1fZXh0LmV4dF9idWYgKyAobSktPm1fZXh0LmV4dF9zaXpl
CVwKLQkJLSAoKG0pLT5tX2RhdGEgKyAobSktPm1fbGVuKSA6IDApIDoJCQlcCi0JICAgICYobSkt
Pm1fZGF0W01MRU5dIC0gKChtKS0+bV9kYXRhICsgKG0pLT5tX2xlbikpCi0KLQotCi0vKgotICog
QXJyYW5nZSB0byBwcmVwZW5kIHNwYWNlIG9mIHNpemUgcGxlbiB0byBtYnVmIG0uICBJZiBhIG5l
dyBtYnVmIG11c3QgYmUKLSAqIGFsbG9jYXRlZCwgaG93IHNwZWNpZmllcyB3aGV0aGVyIHRvIHdh
aXQuICBJZiB0aGUgYWxsb2NhdGlvbiBmYWlscywgdGhlCi0gKiBvcmlnaW5hbCBtYnVmIGNoYWlu
IGlzIGZyZWVkIGFuZCBtIGlzIHNldCB0byBOVUxMLgotICovCi0jZGVmaW5lCU1fUFJFUEVORCht
LCBwbGVuLCBob3cpIGRvIHsJCQkJCVwKLQlzdHJ1Y3QgbWJ1ZiAqKl9tbXAgPSAmKG0pOwkJCQkJ
XAotCXN0cnVjdCBtYnVmICpfbW0gPSAqX21tcDsJCQkJCVwKLQlpbnQgX21wbGVuID0gKHBsZW4p
OwkJCQkJCVwKLQlpbnQgX19taG93ID0gKGhvdyk7CQkJCQkJXAotCQkJCQkJCQkJXAotCWlmIChN
X0xFQURJTkdTUEFDRShfbW0pID49IF9tcGxlbikgewkJCQlcCi0JCV9tbS0+bV9kYXRhIC09IF9t
cGxlbjsJCQkJCVwKLQkJX21tLT5tX2xlbiArPSBfbXBsZW47CQkJCQlcCi0JfSBlbHNlCQkJCQkJ
CQlcCi0JCV9tbSA9IG1fcHJlcGVuZChfbW0sIF9tcGxlbiwgX19taG93KTsJCQlcCi0JaWYgKF9t
bSAhPSBOVUxMICYmIF9tbS0+bV9mbGFncyAmIE1fUEtUSERSKQkJCVwKLQkJX21tLT5tX3BrdGhk
ci5sZW4gKz0gX21wbGVuOwkJCQlcCi0JKl9tbXAgPSBfbW07CQkJCQkJCVwKLX0gd2hpbGUgKDAp
Ci0KLS8qCi0gKiBTZXQgdGhlIG1fZGF0YSBwb2ludGVyIG9mIGEgbmV3bHktYWxsb2NhdGVkIG1i
dWYgKG1fZ2V0L01HRVQpIHRvIHBsYWNlIGFuCi0gKiBvYmplY3Qgb2YgdGhlIHNwZWNpZmllZCBz
aXplIGF0IHRoZSBlbmQgb2YgdGhlIG1idWYsIGxvbmd3b3JkIGFsaWduZWQuCi0gKi8KLSNkZWZp
bmUJTV9BTElHTihtLCBsZW4pIGRvIHsJCQkJCQlcCi0gICAgICAgIEtBU1NFUlQoISgobSktPm1f
ZmxhZ3MgJiAoTV9QS1RIRFJ8TV9FWFQpKSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg
ICAgICAgICAgKCIlczogTV9BTElHTiBub3Qgbm9ybWFsIG1idWYiLCBfX2Z1bmNfXykpOyAgICAg
ICAgICAgICBcCi0gICAgICAgIEtBU1NFUlQoKG0pLT5tX2RhdGEgPT0gKG0pLT5tX2RhdCwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgKCIlczogTV9BTElH
TiBub3QgYSB2aXJnaW4gbWJ1ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgICBcCi0JKG0pLT5tX2Rh
dGEgKz0gKE1MRU4gLSAobGVuKSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwkJXAotfSB3aGlsZSAo
MCkKLQotLyoKLSAqIEFzIGFib3ZlLCBmb3IgbWJ1ZnMgYWxsb2NhdGVkIHdpdGggbV9nZXRoZHIv
TUdFVEhEUiBvciBpbml0aWFsaXplZCBieQotICogTV9EVVAvTU9WRV9QS1RIRFIuCi0gKi8KLSNk
ZWZpbmUJTUhfQUxJR04obSwgbGVuKSBkbyB7CQkJCQkJXAotICAgICAgICBLQVNTRVJUKChtKS0+
bV9mbGFncyAmIE1fUEtUSERSICYmICEoKG0pLT5tX2ZsYWdzICYgTV9FWFQpLCAgICAgXAotICAg
ICAgICAgICAgICAgICgiJXM6IE1IX0FMSUdOIG5vdCBQS1RIRFIgbWJ1ZiIsIF9fZnVuY19fKSk7
ICAgICAgICAgICAgXAotICAgICAgICBLQVNTRVJUKChtKS0+bV9kYXRhID09IChtKS0+bV9wa3Rk
YXQsICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICgiJXM6IE1I
X0FMSUdOIG5vdCBhIHZpcmdpbiBtYnVmIiwgX19mdW5jX18pKTsgICAgICAgICAgXAotCShtKS0+
bV9kYXRhICs9IChNSExFTiAtIChsZW4pKSAmIH4oc2l6ZW9mKGxvbmcpIC0gMSk7CQlcCi19IHdo
aWxlICgwKQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcXVldWUuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzZXJfcXVldWUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRmODk5
NDkwMjY2MTkwYjhjNzg2MWFiMDJiMjdmZjczMmIyMTdkZC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3F1ZXVlLmgKKysrIC9kZXYv
bnVsbApAQCAtMSw2MzkgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMK
LSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5p
dmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0
d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQot
I2lmbmRlZiBfVVNFUl9RVUVVRV9IXwotI2RlZmluZQlfVVNFUl9RVUVVRV9IXwotCi0vKgotICog
VGhpcyBmaWxlIGRlZmluZXMgZm91ciB0eXBlcyBvZiBkYXRhIHN0cnVjdHVyZXM6IHNpbmdseS1s
aW5rZWQgbGlzdHMsCi0gKiBzaW5nbHktbGlua2VkIHRhaWwgcXVldWVzLCBsaXN0cyBhbmQgdGFp
bCBxdWV1ZXMuCi0gKgotICogQSBzaW5nbHktbGlua2VkIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2lu
Z2xlIGZvcndhcmQgcG9pbnRlci4gVGhlIGVsZW1lbnRzCi0gKiBhcmUgc2luZ2x5IGxpbmtlZCBm
b3IgbWluaW11bSBzcGFjZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3ZlcmhlYWQgYXQKLSAq
IHRoZSBleHBlbnNlIG9mIE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVsZW1lbnRzLiBOZXcg
ZWxlbWVudHMgY2FuIGJlCi0gKiBhZGRlZCB0byB0aGUgbGlzdCBhZnRlciBhbiBleGlzdGluZyBl
bGVtZW50IG9yIGF0IHRoZSBoZWFkIG9mIHRoZSBsaXN0LgotICogRWxlbWVudHMgYmVpbmcgcmVt
b3ZlZCBmcm9tIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHNob3VsZCB1c2UgdGhlIGV4cGxpY2l0Ci0g
KiBtYWNybyBmb3IgdGhpcyBwdXJwb3NlIGZvciBvcHRpbXVtIGVmZmljaWVuY3kuIEEgc2luZ2x5
LWxpbmtlZCBsaXN0IG1heQotICogb25seSBiZSB0cmF2ZXJzZWQgaW4gdGhlIGZvcndhcmQgZGly
ZWN0aW9uLiAgU2luZ2x5LWxpbmtlZCBsaXN0cyBhcmUgaWRlYWwKLSAqIGZvciBhcHBsaWNhdGlv
bnMgd2l0aCBsYXJnZSBkYXRhc2V0cyBhbmQgZmV3IG9yIG5vIHJlbW92YWxzIG9yIGZvcgotICog
aW1wbGVtZW50aW5nIGEgTElGTyBxdWV1ZS4KLSAqCi0gKiBBIHNpbmdseS1saW5rZWQgdGFpbCBx
dWV1ZSBpcyBoZWFkZWQgYnkgYSBwYWlyIG9mIHBvaW50ZXJzLCBvbmUgdG8gdGhlCi0gKiBoZWFk
IG9mIHRoZSBsaXN0IGFuZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuIFRoZSBl
bGVtZW50cyBhcmUKLSAqIHNpbmdseSBsaW5rZWQgZm9yIG1pbmltdW0gc3BhY2UgYW5kIHBvaW50
ZXIgbWFuaXB1bGF0aW9uIG92ZXJoZWFkIGF0IHRoZQotICogZXhwZW5zZSBvZiBPKG4pIHJlbW92
YWwgZm9yIGFyYml0cmFyeSBlbGVtZW50cy4gTmV3IGVsZW1lbnRzIGNhbiBiZSBhZGRlZAotICog
dG8gdGhlIGxpc3QgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhl
IGxpc3QsIG9yIGF0IHRoZQotICogZW5kIG9mIHRoZSBsaXN0LiBFbGVtZW50cyBiZWluZyByZW1v
dmVkIGZyb20gdGhlIGhlYWQgb2YgdGhlIHRhaWwgcXVldWUKLSAqIHNob3VsZCB1c2UgdGhlIGV4
cGxpY2l0IG1hY3JvIGZvciB0aGlzIHB1cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5jeS4KLSAq
IEEgc2luZ2x5LWxpbmtlZCB0YWlsIHF1ZXVlIG1heSBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUg
Zm9yd2FyZCBkaXJlY3Rpb24uCi0gKiBTaW5nbHktbGlua2VkIHRhaWwgcXVldWVzIGFyZSBpZGVh
bCBmb3IgYXBwbGljYXRpb25zIHdpdGggbGFyZ2UgZGF0YXNldHMKLSAqIGFuZCBmZXcgb3Igbm8g
cmVtb3ZhbHMgb3IgZm9yIGltcGxlbWVudGluZyBhIEZJRk8gcXVldWUuCi0gKgotICogQSBsaXN0
IGlzIGhlYWRlZCBieSBhIHNpbmdsZSBmb3J3YXJkIHBvaW50ZXIgKG9yIGFuIGFycmF5IG9mIGZv
cndhcmQKLSAqIHBvaW50ZXJzIGZvciBhIGhhc2ggdGFibGUgaGVhZGVyKS4gVGhlIGVsZW1lbnRz
IGFyZSBkb3VibHkgbGlua2VkCi0gKiBzbyB0aGF0IGFuIGFyYml0cmFyeSBlbGVtZW50IGNhbiBi
ZSByZW1vdmVkIHdpdGhvdXQgYSBuZWVkIHRvCi0gKiB0cmF2ZXJzZSB0aGUgbGlzdC4gTmV3IGVs
ZW1lbnRzIGNhbiBiZSBhZGRlZCB0byB0aGUgbGlzdCBiZWZvcmUKLSAqIG9yIGFmdGVyIGFuIGV4
aXN0aW5nIGVsZW1lbnQgb3IgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIEEgbGlzdAotICogbWF5
IG9ubHkgYmUgdHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4KLSAqCi0gKiBBIHRh
aWwgcXVldWUgaXMgaGVhZGVkIGJ5IGEgcGFpciBvZiBwb2ludGVycywgb25lIHRvIHRoZSBoZWFk
IG9mIHRoZQotICogbGlzdCBhbmQgdGhlIG90aGVyIHRvIHRoZSB0YWlsIG9mIHRoZSBsaXN0LiBU
aGUgZWxlbWVudHMgYXJlIGRvdWJseQotICogbGlua2VkIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVs
ZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBhIG5lZWQgdG8KLSAqIHRyYXZlcnNlIHRoZSBs
aXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkIHRvIHRoZSBsaXN0IGJlZm9yZSBvcgotICog
YWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCwgYXQgdGhlIGhlYWQgb2YgdGhlIGxpc3QsIG9yIGF0
IHRoZSBlbmQgb2YKLSAqIHRoZSBsaXN0LiBBIHRhaWwgcXVldWUgbWF5IGJlIHRyYXZlcnNlZCBp
biBlaXRoZXIgZGlyZWN0aW9uLgotICoKLSAqIEZvciBkZXRhaWxzIG9uIHRoZSB1c2Ugb2YgdGhl
c2UgbWFjcm9zLCBzZWUgdGhlIHF1ZXVlKDMpIG1hbnVhbCBwYWdlLgotICoKLSAqCi0gKgkJCQlT
TElTVAlMSVNUCVNUQUlMUQlUQUlMUQotICogX0hFQUQJCQkrCSsJKwkrCi0gKiBfSEVBRF9JTklU
SUFMSVpFUgkJKwkrCSsJKwotICogX0VOVFJZCQkJKwkrCSsJKwotICogX0lOSVQJCQkrCSsJKwkr
Ci0gKiBfRU1QVFkJCQkrCSsJKwkrCi0gKiBfRklSU1QJCQkrCSsJKwkrCi0gKiBfTkVYVAkJCSsJ
KwkrCSsKLSAqIF9QUkVWCQkJLQktCS0JKwotICogX0xBU1QJCQktCS0JKwkrCi0gKiBfRk9SRUFD
SAkJCSsJKwkrCSsKLSAqIF9GT1JFQUNIX1NBRkUJCSsJKwkrCSsKLSAqIF9GT1JFQUNIX1JFVkVS
U0UJCS0JLQktCSsKLSAqIF9GT1JFQUNIX1JFVkVSU0VfU0FGRQktCS0JLQkrCi0gKiBfSU5TRVJU
X0hFQUQJCQkrCSsJKwkrCi0gKiBfSU5TRVJUX0JFRk9SRQkJLQkrCS0JKwotICogX0lOU0VSVF9B
RlRFUgkJKwkrCSsJKwotICogX0lOU0VSVF9UQUlMCQkJLQktCSsJKwotICogX0NPTkNBVAkJCS0J
LQkrCSsKLSAqIF9SRU1PVkVfQUZURVIJCSsJLQkrCS0KLSAqIF9SRU1PVkVfSEVBRAkJCSsJLQkr
CS0KLSAqIF9SRU1PVkUJCQkrCSsJKwkrCi0gKiBfU1dBUAkJCSsJKwkrCSsKLSAqCi0gKi8KLSNp
ZmRlZiBRVUVVRV9NQUNST19ERUJVRwotLyogU3RvcmUgdGhlIGxhc3QgMiBwbGFjZXMgdGhlIHF1
ZXVlIGVsZW1lbnQgb3IgaGVhZCB3YXMgYWx0ZXJlZCAqLwotc3RydWN0IHFtX3RyYWNlIHsKLQlj
aGFyICogbGFzdGZpbGU7Ci0JaW50IGxhc3RsaW5lOwotCWNoYXIgKiBwcmV2ZmlsZTsKLQlpbnQg
cHJldmxpbmU7Ci19OwotCi0jZGVmaW5lCVRSQUNFQlVGCXN0cnVjdCBxbV90cmFjZSB0cmFjZTsK
LSNkZWZpbmUJVFJBU0hJVCh4KQlkbyB7KHgpID0gKHZvaWQgKiktMTt9IHdoaWxlICgwKQotI2Rl
ZmluZQlRTURfU0FWRUxJTksobmFtZSwgbGluaykJdm9pZCAqKm5hbWUgPSAodm9pZCAqKSYobGlu
aykKLQotI2RlZmluZQlRTURfVFJBQ0VfSEVBRChoZWFkKSBkbyB7CQkJCQlcCi0JKGhlYWQpLT50
cmFjZS5wcmV2bGluZSA9IChoZWFkKS0+dHJhY2UubGFzdGxpbmU7CQlcCi0JKGhlYWQpLT50cmFj
ZS5wcmV2ZmlsZSA9IChoZWFkKS0+dHJhY2UubGFzdGZpbGU7CQlcCi0JKGhlYWQpLT50cmFjZS5s
YXN0bGluZSA9IF9fTElORV9fOwkJCQlcCi0JKGhlYWQpLT50cmFjZS5sYXN0ZmlsZSA9IF9fRklM
RV9fOwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVFNRF9UUkFDRV9FTEVNKGVsZW0pIGRv
IHsJCQkJCVwKLQkoZWxlbSktPnRyYWNlLnByZXZsaW5lID0gKGVsZW0pLT50cmFjZS5sYXN0bGlu
ZTsJCVwKLQkoZWxlbSktPnRyYWNlLnByZXZmaWxlID0gKGVsZW0pLT50cmFjZS5sYXN0ZmlsZTsJ
CVwKLQkoZWxlbSktPnRyYWNlLmxhc3RsaW5lID0gX19MSU5FX187CQkJCVwKLQkoZWxlbSktPnRy
YWNlLmxhc3RmaWxlID0gX19GSUxFX187CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNlbHNlCi0jZGVm
aW5lCVFNRF9UUkFDRV9FTEVNKGVsZW0pCi0jZGVmaW5lCVFNRF9UUkFDRV9IRUFEKGhlYWQpCi0j
ZGVmaW5lCVFNRF9TQVZFTElOSyhuYW1lLCBsaW5rKQotI2RlZmluZQlUUkFDRUJVRgotI2RlZmlu
ZQlUUkFTSElUKHgpCi0jZW5kaWYJLyogUVVFVUVfTUFDUk9fREVCVUcgKi8KLQotLyoKLSAqIFNp
bmdseS1saW5rZWQgTGlzdCBkZWNsYXJhdGlvbnMuCi0gKi8KLSNkZWZpbmUJU0xJU1RfSEVBRChu
YW1lLCB0eXBlKQkJCQkJCVwKLXN0cnVjdCBuYW1lIHsJCQkJCQkJCVwKLQlzdHJ1Y3QgdHlwZSAq
c2xoX2ZpcnN0OwkvKiBmaXJzdCBlbGVtZW50ICovCQkJXAotfQotCi0jZGVmaW5lCVNMSVNUX0hF
QURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKLQl7IE5VTEwgfQotCi0jaWYgZGVmaW5lZCAoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKLSNpZiBkZWZpbmVkIChTTElTVF9FTlRSWSkKLSN1bmRlZiBT
TElTVF9FTlRSWQotI2VuZGlmCi0jZW5kaWYKLQotI2RlZmluZQlTTElTVF9FTlRSWSh0eXBlKQkJ
CQkJCVwKLXN0cnVjdCB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnNsZV9uZXh0OwkvKiBuZXh0
IGVsZW1lbnQgKi8JCQlcCi19Ci0KLS8qCi0gKiBTaW5nbHktbGlua2VkIExpc3QgZnVuY3Rpb25z
LgotICovCi0jZGVmaW5lCVNMSVNUX0VNUFRZKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCA9PSBO
VUxMKQotCi0jZGVmaW5lCVNMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnNsaF9maXJzdCkKLQot
I2RlZmluZQlTTElTVF9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCi0JZm9yICgodmFy
KSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwKLQkgICAgKHZhcik7CQkJCQkJCVwKLQkgICAg
KHZhcikgPSBTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJU0xJU1RfRk9SRUFD
SF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAotCWZvciAoKHZhcikgPSBTTElTVF9G
SVJTVCgoaGVhZCkpOwkJCQlcCi0JICAgICh2YXIpICYmICgodHZhcikgPSBTTElTVF9ORVhUKCh2
YXIpLCBmaWVsZCksIDEpOwkJXAotCSAgICAodmFyKSA9ICh0dmFyKSkKLQotI2RlZmluZQlTTElT
VF9GT1JFQUNIX1BSRVZQVFIodmFyLCB2YXJwLCBoZWFkLCBmaWVsZCkJCQlcCi0JZm9yICgodmFy
cCkgPSAmU0xJU1RfRklSU1QoKGhlYWQpKTsJCQkJXAotCSAgICAoKHZhcikgPSAqKHZhcnApKSAh
PSBOVUxMOwkJCQkJXAotCSAgICAodmFycCkgPSAmU0xJU1RfTkVYVCgodmFyKSwgZmllbGQpKQot
Ci0jZGVmaW5lCVNMSVNUX0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKLQlTTElTVF9GSVJTVCgoaGVh
ZCkpID0gTlVMTDsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU0xJU1RfSU5TRVJUX0FG
VEVSKHNsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCVNMSVNUX05FWFQoKGVsbSksIGZp
ZWxkKSA9IFNMSVNUX05FWFQoKHNsaXN0ZWxtKSwgZmllbGQpOwlcCi0JU0xJU1RfTkVYVCgoc2xp
c3RlbG0pLCBmaWVsZCkgPSAoZWxtKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTTElT
VF9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCVNMSVNUX05FWFQoKGVs
bSksIGZpZWxkKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJXAotCVNMSVNUX0ZJUlNUKChoZWFk
KSkgPSAoZWxtKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU0xJU1RfTkVYVChlbG0s
IGZpZWxkKQkoKGVsbSktPmZpZWxkLnNsZV9uZXh0KQotCi0jZGVmaW5lCVNMSVNUX1JFTU9WRSho
ZWFkLCBlbG0sIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRuZXh0LCAo
ZWxtKS0+ZmllbGQuc2xlX25leHQpOwkJCVwKLQlpZiAoU0xJU1RfRklSU1QoKGhlYWQpKSA9PSAo
ZWxtKSkgewkJCQlcCi0JCVNMSVNUX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKLQl9
CQkJCQkJCQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCXN0cnVjdCB0eXBlICpjdXJlbG0gPSBTTElT
VF9GSVJTVCgoaGVhZCkpOwkJXAotCQl3aGlsZSAoU0xJU1RfTkVYVChjdXJlbG0sIGZpZWxkKSAh
PSAoZWxtKSkJCVwKLQkJCWN1cmVsbSA9IFNMSVNUX05FWFQoY3VyZWxtLCBmaWVsZCk7CQlcCi0J
CVNMSVNUX1JFTU9WRV9BRlRFUihjdXJlbG0sIGZpZWxkKTsJCQlcCi0JfQkJCQkJCQkJXAotCVRS
QVNISVQoKm9sZG5leHQpOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0xJU1RfUkVN
T1ZFX0FGVEVSKGVsbSwgZmllbGQpIGRvIHsJCQkJXAotCVNMSVNUX05FWFQoZWxtLCBmaWVsZCkg
PQkJCQkJXAotCSAgICBTTElTVF9ORVhUKFNMSVNUX05FWFQoZWxtLCBmaWVsZCksIGZpZWxkKTsJ
CQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVNMSVNUX1JFTU9WRV9IRUFEKGhlYWQsIGZpZWxk
KSBkbyB7CQkJCVwKLQlTTElTVF9GSVJTVCgoaGVhZCkpID0gU0xJU1RfTkVYVChTTElTVF9GSVJT
VCgoaGVhZCkpLCBmaWVsZCk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU0xJU1RfU1dBUCho
ZWFkMSwgaGVhZDIsIHR5cGUpIGRvIHsJCQkJXAotCXN0cnVjdCB0eXBlICpzd2FwX2ZpcnN0ID0g
U0xJU1RfRklSU1QoaGVhZDEpOwkJCVwKLQlTTElTVF9GSVJTVChoZWFkMSkgPSBTTElTVF9GSVJT
VChoZWFkMik7CQkJXAotCVNMSVNUX0ZJUlNUKGhlYWQyKSA9IHN3YXBfZmlyc3Q7CQkJCVwKLX0g
d2hpbGUgKDApCi0KLS8qCi0gKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZGVjbGFyYXRpb25z
LgotICovCi0jZGVmaW5lCVNUQUlMUV9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAotc3RydWN0IG5h
bWUgewkJCQkJCQkJXAotCXN0cnVjdCB0eXBlICpzdHFoX2ZpcnN0Oy8qIGZpcnN0IGVsZW1lbnQg
Ki8JCQlcCi0Jc3RydWN0IHR5cGUgKipzdHFoX2xhc3Q7LyogYWRkciBvZiBsYXN0IG5leHQgZWxl
bWVudCAqLwkJXAotfQotCi0jZGVmaW5lCVNUQUlMUV9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJ
CQlcCi0JeyBOVUxMLCAmKGhlYWQpLnN0cWhfZmlyc3QgfQotCi0jZGVmaW5lCVNUQUlMUV9FTlRS
WSh0eXBlKQkJCQkJCVwKLXN0cnVjdCB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnN0cWVfbmV4
dDsJLyogbmV4dCBlbGVtZW50ICovCQkJXAotfQotCi0vKgotICogU2luZ2x5LWxpbmtlZCBUYWls
IHF1ZXVlIGZ1bmN0aW9ucy4KLSAqLwotI2RlZmluZQlTVEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFk
MikgZG8gewkJCQlcCi0JaWYgKCFTVEFJTFFfRU1QVFkoKGhlYWQyKSkpIHsJCQkJCVwKLQkJKiho
ZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfZmlyc3Q7CQlcCi0JCShoZWFkMSktPnN0
cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfbGFzdDsJCVwKLQkJU1RBSUxRX0lOSVQoKGhlYWQyKSk7
CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTVEFJTFFfRU1QVFko
aGVhZCkJKChoZWFkKS0+c3RxaF9maXJzdCA9PSBOVUxMKQotCi0jZGVmaW5lCVNUQUlMUV9GSVJT
VChoZWFkKQkoKGhlYWQpLT5zdHFoX2ZpcnN0KQotCi0jZGVmaW5lCVNUQUlMUV9GT1JFQUNIKHZh
ciwgaGVhZCwgZmllbGQpCQkJCVwKLQlmb3IoKHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJ
CQkJXAotCSAgICh2YXIpOwkJCQkJCQlcCi0JICAgKHZhcikgPSBTVEFJTFFfTkVYVCgodmFyKSwg
ZmllbGQpKQotCi0KLSNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxk
LCB0dmFyKQkJCVwKLQlmb3IgKCh2YXIpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKLQkg
ICAgKHZhcikgJiYgKCh0dmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAot
CSAgICAodmFyKSA9ICh0dmFyKSkKLQotI2RlZmluZQlTVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJ
CQkJXAotCVNUQUlMUV9GSVJTVCgoaGVhZCkpID0gTlVMTDsJCQkJCVwKLQkoaGVhZCktPnN0cWhf
bGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5l
CVNUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgdHFlbG0sIGVsbSwgZmllbGQpIGRvIHsJCVwKLQlp
ZiAoKFNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBTVEFJTFFfTkVYVCgodHFlbG0pLCBmaWVs
ZCkpID09IE5VTEwpXAotCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfTkVYVCgoZWxtKSwg
ZmllbGQpOwkJXAotCVNUQUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSA9IChlbG0pOwkJCQlcCi19
IHdoaWxlICgwKQotCi0jZGVmaW5lCVNUQUlMUV9JTlNFUlRfSEVBRChoZWFkLCBlbG0sIGZpZWxk
KSBkbyB7CQkJXAotCWlmICgoU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IFNUQUlMUV9GSVJT
VCgoaGVhZCkpKSA9PSBOVUxMKQlcCi0JCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhU
KChlbG0pLCBmaWVsZCk7CQlcCi0JU1RBSUxRX0ZJUlNUKChoZWFkKSkgPSAoZWxtKTsJCQkJCVwK
LX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU1RBSUxRX0lOU0VSVF9UQUlMKGhlYWQsIGVsbSwgZmll
bGQpIGRvIHsJCQlcCi0JU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IE5VTEw7CQkJCVwKLQkq
KGhlYWQpLT5zdHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKLQkoaGVhZCktPnN0cWhfbGFzdCA9ICZT
VEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJU1RB
SUxRX0xBU1QoaGVhZCwgdHlwZSwgZmllbGQpCQkJCQlcCi0JKFNUQUlMUV9FTVBUWSgoaGVhZCkp
ID8JCQkJCQlcCi0JCU5VTEwgOgkJCQkJCQlcCi0JICAgICAgICAoKHN0cnVjdCB0eXBlICopKHZv
aWQgKikJCQkJXAotCQkoKGNoYXIgKikoKGhlYWQpLT5zdHFoX2xhc3QpIC0gX19vZmZzZXRvZihz
dHJ1Y3QgdHlwZSwgZmllbGQpKSkpCi0KLSNkZWZpbmUJU1RBSUxRX05FWFQoZWxtLCBmaWVsZCkJ
KChlbG0pLT5maWVsZC5zdHFlX25leHQpCi0KLSNkZWZpbmUJU1RBSUxRX1JFTU9WRShoZWFkLCBl
bG0sIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAotCVFNRF9TQVZFTElOSyhvbGRuZXh0LCAoZWxtKS0+
ZmllbGQuc3RxZV9uZXh0KTsJCQlcCi0JaWYgKFNUQUlMUV9GSVJTVCgoaGVhZCkpID09IChlbG0p
KSB7CQkJCVwKLQkJU1RBSUxRX1JFTU9WRV9IRUFEKChoZWFkKSwgZmllbGQpOwkJCVwKLQl9CQkJ
CQkJCQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCXN0cnVjdCB0eXBlICpjdXJlbG0gPSBTVEFJTFFf
RklSU1QoKGhlYWQpKTsJCVwKLQkJd2hpbGUgKFNUQUlMUV9ORVhUKGN1cmVsbSwgZmllbGQpICE9
IChlbG0pKQkJXAotCQkJY3VyZWxtID0gU1RBSUxRX05FWFQoY3VyZWxtLCBmaWVsZCk7CQlcCi0J
CVNUQUlMUV9SRU1PVkVfQUZURVIoaGVhZCwgY3VyZWxtLCBmaWVsZCk7CQlcCi0JfQkJCQkJCQkJ
XAotCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgU1RB
SUxRX1JFTU9WRV9BRlRFUihoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAotCWlmICgoU1RBSUxR
X05FWFQoZWxtLCBmaWVsZCkgPQkJCQkJXAotCSAgICAgU1RBSUxRX05FWFQoU1RBSUxRX05FWFQo
ZWxtLCBmaWVsZCksIGZpZWxkKSkgPT0gTlVMTCkJXAotCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZT
VEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlTVEFJ
TFFfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAotCWlmICgoU1RBSUxRX0ZJUlNU
KChoZWFkKSkgPQkJCQkJXAotCSAgICAgU1RBSUxRX05FWFQoU1RBSUxRX0ZJUlNUKChoZWFkKSks
IGZpZWxkKSkgPT0gTlVMTCkJCVwKLQkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX0ZJUlNU
KChoZWFkKSk7CQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lIFNUQUlMUV9TV0FQKGhlYWQxLCBo
ZWFkMiwgdHlwZSkgZG8gewkJCQlcCi0Jc3RydWN0IHR5cGUgKnN3YXBfZmlyc3QgPSBTVEFJTFFf
RklSU1QoaGVhZDEpOwkJCVwKLQlzdHJ1Y3QgdHlwZSAqKnN3YXBfbGFzdCA9IChoZWFkMSktPnN0
cWhfbGFzdDsJCQlcCi0JU1RBSUxRX0ZJUlNUKGhlYWQxKSA9IFNUQUlMUV9GSVJTVChoZWFkMik7
CQkJXAotCShoZWFkMSktPnN0cWhfbGFzdCA9IChoZWFkMiktPnN0cWhfbGFzdDsJCQlcCi0JU1RB
SUxRX0ZJUlNUKGhlYWQyKSA9IHN3YXBfZmlyc3Q7CQkJCVwKLQkoaGVhZDIpLT5zdHFoX2xhc3Qg
PSBzd2FwX2xhc3Q7CQkJCQlcCi0JaWYgKFNUQUlMUV9FTVBUWShoZWFkMSkpCQkJCQlcCi0JCSho
ZWFkMSktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoaGVhZDEpOwkJXAotCWlmIChTVEFJTFFf
RU1QVFkoaGVhZDIpKQkJCQkJXAotCQkoaGVhZDIpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX0ZJUlNU
KGhlYWQyKTsJCVwKLX0gd2hpbGUgKDApCi0KLQotLyoKLSAqIExpc3QgZGVjbGFyYXRpb25zLgot
ICovCi0jZGVmaW5lCUxJU1RfSEVBRChuYW1lLCB0eXBlKQkJCQkJCVwKLXN0cnVjdCBuYW1lIHsJ
CQkJCQkJCVwKLQlzdHJ1Y3QgdHlwZSAqbGhfZmlyc3Q7CS8qIGZpcnN0IGVsZW1lbnQgKi8JCQlc
Ci19Ci0KLSNkZWZpbmUJTElTVF9IRUFEX0lOSVRJQUxJWkVSKGhlYWQpCQkJCQlcCi0JeyBOVUxM
IH0KLQotI2RlZmluZQlMSVNUX0VOVFJZKHR5cGUpCQkJCQkJXAotc3RydWN0IHsJCQkJCQkJCVwK
LQlzdHJ1Y3QgdHlwZSAqbGVfbmV4dDsJLyogbmV4dCBlbGVtZW50ICovCQkJXAotCXN0cnVjdCB0
eXBlICoqbGVfcHJldjsJLyogYWRkcmVzcyBvZiBwcmV2aW91cyBuZXh0IGVsZW1lbnQgKi8JXAot
fQotCi0vKgotICogTGlzdCBmdW5jdGlvbnMuCi0gKi8KLQotI2lmIGRlZmluZWQoSU5WQVJJQU5U
UykKLSNkZWZpbmUJUU1EX0xJU1RfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQkJXAot
CWlmIChMSVNUX0ZJUlNUKChoZWFkKSkgIT0gTlVMTCAmJgkJCQkJXAotCSAgICBMSVNUX0ZJUlNU
KChoZWFkKSktPmZpZWxkLmxlX3ByZXYgIT0JCQkJXAotCSAgICAgJkxJU1RfRklSU1QoKGhlYWQp
KSkJCQkJCQlcCi0JCXBhbmljKCJCYWQgbGlzdCBoZWFkICVwIGZpcnN0LT5wcmV2ICE9IGhlYWQi
LCAodm9pZCAqKShoZWFkKSk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJUU1EX0xJU1RfQ0hF
Q0tfTkVYVChlbG0sIGZpZWxkKSBkbyB7CQkJCQlcCi0JaWYgKExJU1RfTkVYVCgoZWxtKSwgZmll
bGQpICE9IE5VTEwgJiYJCQkJCVwKLQkgICAgTElTVF9ORVhUKChlbG0pLCBmaWVsZCktPmZpZWxk
LmxlX3ByZXYgIT0JCQkJXAotCSAgICAgJigoZWxtKS0+ZmllbGQubGVfbmV4dCkpCQkJCQkJXAot
CSAgICAgCXBhbmljKCJCYWQgbGluayBlbG0gJXAgbmV4dC0+cHJldiAhPSBlbG0iLCAodm9pZCAq
KShlbG0pKTsJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlRTURfTElTVF9DSEVDS19QUkVWKGVs
bSwgZmllbGQpIGRvIHsJCQkJCVwKLQlpZiAoKihlbG0pLT5maWVsZC5sZV9wcmV2ICE9IChlbG0p
KQkJCQkJXAotCQlwYW5pYygiQmFkIGxpbmsgZWxtICVwIHByZXYtPm5leHQgIT0gZWxtIiwgKHZv
aWQgKikoZWxtKSk7CVwKLX0gd2hpbGUgKDApCi0jZWxzZQotI2RlZmluZQlRTURfTElTVF9DSEVD
S19IRUFEKGhlYWQsIGZpZWxkKQotI2RlZmluZQlRTURfTElTVF9DSEVDS19ORVhUKGVsbSwgZmll
bGQpCi0jZGVmaW5lCVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkKLSNlbmRpZiAvKiAo
SU5WQVJJQU5UUykgKi8KLQotI2RlZmluZQlMSVNUX0VNUFRZKGhlYWQpCSgoaGVhZCktPmxoX2Zp
cnN0ID09IE5VTEwpCi0KLSNkZWZpbmUJTElTVF9GSVJTVChoZWFkKQkoKGhlYWQpLT5saF9maXJz
dCkKLQotI2RlZmluZQlMSVNUX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKLQlmb3Ig
KCh2YXIpID0gTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlcCi0JICAgICh2YXIpOwkJCQkJCQlcCi0J
ICAgICh2YXIpID0gTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCi0KLSNkZWZpbmUJTElTVF9GT1JF
QUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikJCQlcCi0JZm9yICgodmFyKSA9IExJU1Rf
RklSU1QoKGhlYWQpKTsJCQkJXAotCSAgICAodmFyKSAmJiAoKHR2YXIpID0gTElTVF9ORVhUKCh2
YXIpLCBmaWVsZCksIDEpOwkJXAotCSAgICAodmFyKSA9ICh0dmFyKSkKLQotI2RlZmluZQlMSVNU
X0lOSVQoaGVhZCkgZG8gewkJCQkJCVwKLQlMSVNUX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJ
XAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlMSVNUX0lOU0VSVF9BRlRFUihsaXN0ZWxtLCBlbG0s
IGZpZWxkKSBkbyB7CQkJXAotCVFNRF9MSVNUX0NIRUNLX05FWFQobGlzdGVsbSwgZmllbGQpOwkJ
CQlcCi0JaWYgKChMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IExJU1RfTkVYVCgobGlzdGVsbSks
IGZpZWxkKSkgIT0gTlVMTClcCi0JCUxJU1RfTkVYVCgobGlzdGVsbSksIGZpZWxkKS0+ZmllbGQu
bGVfcHJldiA9CQlcCi0JCSAgICAmTElTVF9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKLQlMSVNU
X05FWFQoKGxpc3RlbG0pLCBmaWVsZCkgPSAoZWxtKTsJCQkJXAotCShlbG0pLT5maWVsZC5sZV9w
cmV2ID0gJkxJU1RfTkVYVCgobGlzdGVsbSksIGZpZWxkKTsJCVwKLX0gd2hpbGUgKDApCi0KLSNk
ZWZpbmUJTElTVF9JTlNFUlRfQkVGT1JFKGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCi0J
UU1EX0xJU1RfQ0hFQ0tfUFJFVihsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKLQkoZWxtKS0+ZmllbGQu
bGVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQubGVfcHJldjsJCVwKLQlMSVNUX05FWFQoKGVsbSks
IGZpZWxkKSA9IChsaXN0ZWxtKTsJCQkJXAotCSoobGlzdGVsbSktPmZpZWxkLmxlX3ByZXYgPSAo
ZWxtKTsJCQkJXAotCShsaXN0ZWxtKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05FWFQoKGVsbSks
IGZpZWxkKTsJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJTElTVF9JTlNFUlRfSEVBRChoZWFk
LCBlbG0sIGZpZWxkKSBkbyB7CQkJCVwKLQlRTURfTElTVF9DSEVDS19IRUFEKChoZWFkKSwgZmll
bGQpOwkJCQlcCi0JaWYgKChMSVNUX05FWFQoKGVsbSksIGZpZWxkKSA9IExJU1RfRklSU1QoKGhl
YWQpKSkgIT0gTlVMTCkJXAotCQlMSVNUX0ZJUlNUKChoZWFkKSktPmZpZWxkLmxlX3ByZXYgPSAm
TElTVF9ORVhUKChlbG0pLCBmaWVsZCk7XAotCUxJU1RfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJ
CQkJXAotCShlbG0pLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQpKTsJCQlcCi19
IHdoaWxlICgwKQotCi0jZGVmaW5lCUxJU1RfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxk
LmxlX25leHQpCi0KLSNkZWZpbmUJTElTVF9SRU1PVkUoZWxtLCBmaWVsZCkgZG8gewkJCQkJXAot
CVFNRF9TQVZFTElOSyhvbGRuZXh0LCAoZWxtKS0+ZmllbGQubGVfbmV4dCk7CQkJXAotCVFNRF9T
QVZFTElOSyhvbGRwcmV2LCAoZWxtKS0+ZmllbGQubGVfcHJldik7CQkJXAotCVFNRF9MSVNUX0NI
RUNLX05FWFQoZWxtLCBmaWVsZCk7CQkJCVwKLQlRTURfTElTVF9DSEVDS19QUkVWKGVsbSwgZmll
bGQpOwkJCQlcCi0JaWYgKExJU1RfTkVYVCgoZWxtKSwgZmllbGQpICE9IE5VTEwpCQkJCVwKLQkJ
TElTVF9ORVhUKChlbG0pLCBmaWVsZCktPmZpZWxkLmxlX3ByZXYgPSAJCVwKLQkJICAgIChlbG0p
LT5maWVsZC5sZV9wcmV2OwkJCQlcCi0JKihlbG0pLT5maWVsZC5sZV9wcmV2ID0gTElTVF9ORVhU
KChlbG0pLCBmaWVsZCk7CQlcCi0JVFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAotCVRSQVNISVQo
Km9sZHByZXYpOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgTElTVF9TV0FQKGhlYWQx
LCBoZWFkMiwgdHlwZSwgZmllbGQpIGRvIHsJCQlcCi0Jc3RydWN0IHR5cGUgKnN3YXBfdG1wID0g
TElTVF9GSVJTVCgoaGVhZDEpKTsJCQlcCi0JTElTVF9GSVJTVCgoaGVhZDEpKSA9IExJU1RfRklS
U1QoKGhlYWQyKSk7CQkJXAotCUxJU1RfRklSU1QoKGhlYWQyKSkgPSBzd2FwX3RtcDsJCQkJCVwK
LQlpZiAoKHN3YXBfdG1wID0gTElTVF9GSVJTVCgoaGVhZDEpKSkgIT0gTlVMTCkJCQlcCi0JCXN3
YXBfdG1wLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfRklSU1QoKGhlYWQxKSk7CQlcCi0JaWYgKChz
d2FwX3RtcCA9IExJU1RfRklSU1QoKGhlYWQyKSkpICE9IE5VTEwpCQkJXAotCQlzd2FwX3RtcC0+
ZmllbGQubGVfcHJldiA9ICZMSVNUX0ZJUlNUKChoZWFkMikpOwkJXAotfSB3aGlsZSAoMCkKLQot
LyoKLSAqIFRhaWwgcXVldWUgZGVjbGFyYXRpb25zLgotICovCi0jZGVmaW5lCVRBSUxRX0hFQUQo
bmFtZSwgdHlwZSkJCQkJCQlcCi1zdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUg
KnRxaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKLQlzdHJ1Y3QgdHlwZSAqKnRxaF9s
YXN0OwkvKiBhZGRyIG9mIGxhc3QgbmV4dCBlbGVtZW50ICovCQlcCi0JVFJBQ0VCVUYJCQkJCQkJ
XAotfQotCi0jZGVmaW5lCVRBSUxRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKLQl7IE5V
TEwsICYoaGVhZCkudHFoX2ZpcnN0IH0KLQotI2RlZmluZQlUQUlMUV9FTlRSWSh0eXBlKQkJCQkJ
CVwKLXN0cnVjdCB7CQkJCQkJCQlcCi0Jc3RydWN0IHR5cGUgKnRxZV9uZXh0OwkvKiBuZXh0IGVs
ZW1lbnQgKi8JCQlcCi0Jc3RydWN0IHR5cGUgKip0cWVfcHJldjsJLyogYWRkcmVzcyBvZiBwcmV2
aW91cyBuZXh0IGVsZW1lbnQgKi8JXAotCVRSQUNFQlVGCQkJCQkJCVwKLX0KLQotLyoKLSAqIFRh
aWwgcXVldWUgZnVuY3Rpb25zLgotICovCi0jaWYgZGVmaW5lZChJTlZBUklBTlRTKQotI2RlZmlu
ZQlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCkgZG8gewkJCQkJXAotCWlmICghVEFJ
TFFfRU1QVFkoaGVhZCkgJiYJCQkJCQlcCi0JICAgIFRBSUxRX0ZJUlNUKChoZWFkKSktPmZpZWxk
LnRxZV9wcmV2ICE9CQkJCVwKLQkgICAgICZUQUlMUV9GSVJTVCgoaGVhZCkpKQkJCQkJCVwKLQkJ
cGFuaWMoIkJhZCB0YWlscSBoZWFkICVwIGZpcnN0LT5wcmV2ICE9IGhlYWQiLCAodm9pZCAqKSho
ZWFkKSk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1RBSUwoaGVh
ZCwgZmllbGQpIGRvIHsJCQkJCVwKLQlpZiAoKihoZWFkKS0+dHFoX2xhc3QgIT0gTlVMTCkJCQkJ
CQlcCi0JICAgIAlwYW5pYygiQmFkIHRhaWxxIE5FWFQoJXAtPnRxaF9sYXN0KSAhPSBOVUxMIiwg
KHZvaWQgKikoaGVhZCkpOyAJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlRTURfVEFJTFFfQ0hF
Q0tfTkVYVChlbG0sIGZpZWxkKSBkbyB7CQkJCQlcCi0JaWYgKFRBSUxRX05FWFQoKGVsbSksIGZp
ZWxkKSAhPSBOVUxMICYmCQkJCQlcCi0JICAgIFRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+Zmll
bGQudHFlX3ByZXYgIT0JCQkJXAotCSAgICAgJigoZWxtKS0+ZmllbGQudHFlX25leHQpKQkJCQkJ
CVwKLQkJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBuZXh0LT5wcmV2ICE9IGVsbSIsICh2b2lkICop
KGVsbSkpOwlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVs
bSwgZmllbGQpIGRvIHsJCQkJCVwKLQlpZiAoKihlbG0pLT5maWVsZC50cWVfcHJldiAhPSAoZWxt
KSkJCQkJCVwKLQkJcGFuaWMoIkJhZCBsaW5rIGVsbSAlcCBwcmV2LT5uZXh0ICE9IGVsbSIsICh2
b2lkICopKGVsbSkpOwlcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUJUU1EX1RBSUxRX0NI
RUNLX0hFQUQoaGVhZCwgZmllbGQpCi0jZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19UQUlMKGhlYWQs
IGhlYWRuYW1lKQotI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfTkVYVChlbG0sIGZpZWxkKQotI2Rl
ZmluZQlRTURfVEFJTFFfQ0hFQ0tfUFJFVihlbG0sIGZpZWxkKQotI2VuZGlmIC8qIChJTlZBUklB
TlRTKSAqLwotCi0jZGVmaW5lCVRBSUxRX0NPTkNBVChoZWFkMSwgaGVhZDIsIGZpZWxkKSBkbyB7
CQkJCVwKLQlpZiAoIVRBSUxRX0VNUFRZKGhlYWQyKSkgewkJCQkJXAotCQkqKGhlYWQxKS0+dHFo
X2xhc3QgPSAoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCi0JCShoZWFkMiktPnRxaF9maXJzdC0+Zmll
bGQudHFlX3ByZXYgPSAoaGVhZDEpLT50cWhfbGFzdDsJXAotCQkoaGVhZDEpLT50cWhfbGFzdCA9
IChoZWFkMiktPnRxaF9sYXN0OwkJCVwKLQkJVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwKLQkJ
UU1EX1RSQUNFX0hFQUQoaGVhZDEpOwkJCQkJXAotCQlRTURfVFJBQ0VfSEVBRChoZWFkMik7CQkJ
CQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlUQUlMUV9FTVBUWShoZWFk
KQkoKGhlYWQpLT50cWhfZmlyc3QgPT0gTlVMTCkKLQotI2RlZmluZQlUQUlMUV9GSVJTVChoZWFk
KQkoKGhlYWQpLT50cWhfZmlyc3QpCi0KLSNkZWZpbmUJVEFJTFFfRk9SRUFDSCh2YXIsIGhlYWQs
IGZpZWxkKQkJCQkJXAotCWZvciAoKHZhcikgPSBUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCi0J
ICAgICh2YXIpOwkJCQkJCQlcCi0JICAgICh2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQp
KQotCi0jZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQsIGZpZWxkLCB0dmFyKQkJ
CVwKLQlmb3IgKCh2YXIpID0gVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAotCSAgICAodmFyKSAm
JiAoKHR2YXIpID0gVEFJTFFfTkVYVCgodmFyKSwgZmllbGQpLCAxKTsJCVwKLQkgICAgKHZhcikg
PSAodHZhcikpCi0KLSNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFKHZhciwgaGVhZCwgaGVh
ZG5hbWUsIGZpZWxkKQkJXAotCWZvciAoKHZhcikgPSBUQUlMUV9MQVNUKChoZWFkKSwgaGVhZG5h
bWUpOwkJCVwKLQkgICAgKHZhcik7CQkJCQkJCVwKLQkgICAgKHZhcikgPSBUQUlMUV9QUkVWKCh2
YXIpLCBoZWFkbmFtZSwgZmllbGQpKQotCi0jZGVmaW5lCVRBSUxRX0ZPUkVBQ0hfUkVWRVJTRV9T
QUZFKHZhciwgaGVhZCwgaGVhZG5hbWUsIGZpZWxkLCB0dmFyKQlcCi0JZm9yICgodmFyKSA9IFRB
SUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJXAotCSAgICAodmFyKSAmJiAoKHR2YXIpID0g
VEFJTFFfUFJFVigodmFyKSwgaGVhZG5hbWUsIGZpZWxkKSwgMSk7CVwKLQkgICAgKHZhcikgPSAo
dHZhcikpCi0KLSNkZWZpbmUJVEFJTFFfSU5JVChoZWFkKSBkbyB7CQkJCQkJXAotCVRBSUxRX0ZJ
UlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAotCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfRklS
U1QoKGhlYWQpKTsJCQlcCi0JUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAotfSB3aGlsZSAo
MCkKLQotI2RlZmluZQlUQUlMUV9JTlNFUlRfQUZURVIoaGVhZCwgbGlzdGVsbSwgZWxtLCBmaWVs
ZCkgZG8gewkJXAotCVFNRF9UQUlMUV9DSEVDS19ORVhUKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAot
CWlmICgoVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gVEFJTFFfTkVYVCgobGlzdGVsbSksIGZp
ZWxkKSkgIT0gTlVMTClcCi0JCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQudHFlX3By
ZXYgPSAJCVwKLQkJICAgICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQkJCVwKLQllbHNlIHsJ
CQkJCQkJCVwKLQkJKGhlYWQpLT50cWhfbGFzdCA9ICZUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7
CQlcCi0JCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJXAotCX0JCQkJCQkJCVwKLQlUQUlMUV9O
RVhUKChsaXN0ZWxtKSwgZmllbGQpID0gKGVsbSk7CQkJCVwKLQkoZWxtKS0+ZmllbGQudHFlX3By
ZXYgPSAmVEFJTFFfTkVYVCgobGlzdGVsbSksIGZpZWxkKTsJCVwKLQlRTURfVFJBQ0VfRUxFTSgm
KGVsbSktPmZpZWxkKTsJCQkJCVwKLQlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQpOwkJ
CQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVRBSUxRX0lOU0VSVF9CRUZPUkUobGlzdGVsbSwg
ZWxtLCBmaWVsZCkgZG8gewkJCVwKLQlRTURfVEFJTFFfQ0hFQ0tfUFJFVihsaXN0ZWxtLCBmaWVs
ZCk7CQkJCVwKLQkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAobGlzdGVsbSktPmZpZWxkLnRxZV9w
cmV2OwkJXAotCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IChsaXN0ZWxtKTsJCQkJXAotCSoo
bGlzdGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGVsbSk7CQkJCVwKLQkobGlzdGVsbSktPmZpZWxk
LnRxZV9wcmV2ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKLQlRTURfVFJBQ0VfRUxF
TSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKLQlRTURfVFJBQ0VfRUxFTSgmbGlzdGVsbS0+ZmllbGQp
OwkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCVRBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVs
bSwgZmllbGQpIGRvIHsJCQlcCi0JUU1EX1RBSUxRX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQpOwkJ
CQlcCi0JaWYgKChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkgPSBUQUlMUV9GSVJTVCgoaGVhZCkp
KSAhPSBOVUxMKQlcCi0JCVRBSUxRX0ZJUlNUKChoZWFkKSktPmZpZWxkLnRxZV9wcmV2ID0JCQlc
Ci0JCSAgICAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJCQlcCi0JZWxzZQkJCQkJCQkJXAot
CQkoaGVhZCktPnRxaF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKLQlUQUlM
UV9GSVJTVCgoaGVhZCkpID0gKGVsbSk7CQkJCQlcCi0JKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0g
JlRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJXAotCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJCQkJCVwK
LQlRTURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNk
ZWZpbmUJVEFJTFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKLQlRTURf
VEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBmaWVsZCk7CQkJCVwKLQlUQUlMUV9ORVhUKChlbG0pLCBm
aWVsZCkgPSBOVUxMOwkJCQlcCi0JKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gKGhlYWQpLT50cWhf
bGFzdDsJCQlcCi0JKihoZWFkKS0+dHFoX2xhc3QgPSAoZWxtKTsJCQkJCVwKLQkoaGVhZCktPnRx
aF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCQlcCi0JUU1EX1RSQUNFX0hFQUQo
aGVhZCk7CQkJCQkJXAotCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJXAotfSB3
aGlsZSAoMCkKLQotI2RlZmluZQlUQUlMUV9MQVNUKGhlYWQsIGhlYWRuYW1lKQkJCQkJXAotCSgq
KCgoc3RydWN0IGhlYWRuYW1lICopKChoZWFkKS0+dHFoX2xhc3QpKS0+dHFoX2xhc3QpKQotCi0j
ZGVmaW5lCVRBSUxRX05FWFQoZWxtLCBmaWVsZCkgKChlbG0pLT5maWVsZC50cWVfbmV4dCkKLQot
I2RlZmluZQlUQUlMUV9QUkVWKGVsbSwgaGVhZG5hbWUsIGZpZWxkKQkJCQlcCi0JKCooKChzdHJ1
Y3QgaGVhZG5hbWUgKikoKGVsbSktPmZpZWxkLnRxZV9wcmV2KSktPnRxaF9sYXN0KSkKLQotI2Rl
ZmluZQlUQUlMUV9SRU1PVkUoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCQlcCi0JUU1EX1NBVkVM
SU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC50cWVfbmV4dCk7CQkJXAotCVFNRF9TQVZFTElOSyhv
bGRwcmV2LCAoZWxtKS0+ZmllbGQudHFlX3ByZXYpOwkJCVwKLQlRTURfVEFJTFFfQ0hFQ0tfTkVY
VChlbG0sIGZpZWxkKTsJCQkJXAotCVFNRF9UQUlMUV9DSEVDS19QUkVWKGVsbSwgZmllbGQpOwkJ
CQlcCi0JaWYgKChUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCkpICE9IE5VTEwpCQkJCVwKLQkJVEFJ
TFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJXAotCQkgICAgKGVsbSkt
PmZpZWxkLnRxZV9wcmV2OwkJCQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCShoZWFkKS0+dHFoX2xh
c3QgPSAoZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlcCi0JCVFNRF9UUkFDRV9IRUFEKGhlYWQpOwkJ
CQkJXAotCX0JCQkJCQkJCVwKLQkqKGVsbSktPmZpZWxkLnRxZV9wcmV2ID0gVEFJTFFfTkVYVCgo
ZWxtKSwgZmllbGQpOwkJXAotCVRSQVNISVQoKm9sZG5leHQpOwkJCQkJCVwKLQlUUkFTSElUKCpv
bGRwcmV2KTsJCQkJCQlcCi0JUU1EX1RSQUNFX0VMRU0oJihlbG0pLT5maWVsZCk7CQkJCQlcCi19
IHdoaWxlICgwKQotCi0jZGVmaW5lIFRBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlLCBmaWVs
ZCkgZG8gewkJCVwKLQlzdHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IChoZWFkMSktPnRxaF9maXJz
dDsJCQlcCi0Jc3RydWN0IHR5cGUgKipzd2FwX2xhc3QgPSAoaGVhZDEpLT50cWhfbGFzdDsJCQlc
Ci0JKGhlYWQxKS0+dHFoX2ZpcnN0ID0gKGhlYWQyKS0+dHFoX2ZpcnN0OwkJCVwKLQkoaGVhZDEp
LT50cWhfbGFzdCA9IChoZWFkMiktPnRxaF9sYXN0OwkJCQlcCi0JKGhlYWQyKS0+dHFoX2ZpcnN0
ID0gc3dhcF9maXJzdDsJCQkJXAotCShoZWFkMiktPnRxaF9sYXN0ID0gc3dhcF9sYXN0OwkJCQkJ
XAotCWlmICgoc3dhcF9maXJzdCA9IChoZWFkMSktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCi0J
CXN3YXBfZmlyc3QtPmZpZWxkLnRxZV9wcmV2ID0gJihoZWFkMSktPnRxaF9maXJzdDsJXAotCWVs
c2UJCQkJCQkJCVwKLQkJKGhlYWQxKS0+dHFoX2xhc3QgPSAmKGhlYWQxKS0+dHFoX2ZpcnN0OwkJ
XAotCWlmICgoc3dhcF9maXJzdCA9IChoZWFkMiktPnRxaF9maXJzdCkgIT0gTlVMTCkJCQlcCi0J
CXN3YXBfZmlyc3QtPmZpZWxkLnRxZV9wcmV2ID0gJihoZWFkMiktPnRxaF9maXJzdDsJXAotCWVs
c2UJCQkJCQkJCVwKLQkJKGhlYWQyKS0+dHFoX2xhc3QgPSAmKGhlYWQyKS0+dHFoX2ZpcnN0OwkJ
XAotfSB3aGlsZSAoMCkKLQotI2VuZGlmIC8qICFfU1lTX1FVRVVFX0hfICovCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFk
LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYTlkMDExMmU0NGRhN2VkMzViNmVh
OWY4MDA0OWViZmUxZjA1OWYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5jCisrKyAvZGV2L251bGwKQEAgLTEs
MTUzMiArMCwwIEBACi0vKi0KLSAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEJyYWQgUGVub2Zm
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBIdW1haXJhIEthbWFsCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIKLSAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEy
IE1pY2hhZWwgVHVleGVuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAq
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK
LSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaWYgZGVm
aW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lm
ICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRl
IDxwdGhyZWFkLmg+Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSAmJiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19OZXRCU0QpCi0jaW5jbHVkZSA8c3lzL3Vpby5oPgotI2Vsc2UKLSNpbmNsdWRlIDx1c2VyX2lw
Nl92YXIuaD4KLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+Ci0j
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2Iu
aD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KLSNpZiAwCi0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19MaW51eCkKLSNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaWZkZWYg
SEFWRV9MSU5VWF9JRl9BRERSX0gKLSNpbmNsdWRlIDxsaW51eC9pZl9hZGRyLmg+Ci0jZW5kaWYK
LSNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICi0jaW5jbHVkZSA8bGludXgvcnRuZXRsaW5r
Lmg+Ci0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19E
YXJ3aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0ZyZWVCU0QpCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0jZW5kaWYKLS8q
IGxvY2FsIG1hY3JvcyBhbmQgZGF0YXR5cGVzIHVzZWQgdG8gZ2V0IElQIGFkZHJlc3NlcyBzeXN0
ZW0gaW5kZXBlbmRlbnRseSAqLwotI2lmICFkZWZpbmVkKElQX1BLVElORk8gKSAmJiAhIGRlZmlu
ZWQoSVBfUkVDVkRTVEFERFIpCi0jIGVycm9yICJDYW4ndCBkZXRlcm1pbmUgc29ja2V0IG9wdGlv
biB0byB1c2UgdG8gZ2V0IFVEUCBJUCIKLSNlbmRpZgotCi12b2lkIHJlY3ZfdGhyZWFkX2Rlc3Ry
b3kodm9pZCk7Ci0jZGVmaW5lIE1BWExFTl9NQlVGX0NIQUlOIDMyIC8qIFdoYXQgc2hvdWxkIHRo
aXMgdmFsdWUgYmU/ICovCi0jZGVmaW5lIFJPVU5EVVAoYSwgc2l6ZSkgKCgoYSkgJiAoKHNpemUp
LTEpKSA/ICgxICsgKChhKSB8ICgoc2l6ZSktMSkpKSA6IChhKSkKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLSNkZWZpbmUgTkVYVF9TQShhcCkgYXAg
PSAoc3RydWN0IHNvY2thZGRyICopIFwKLQkoKGNhZGRyX3QpIGFwICsgKGFwLT5zYV9sZW4gPyBS
T1VORFVQKGFwLT5zYV9sZW4sIHNpemVvZiAodWludDMyX3QpKSA6IHNpemVvZih1aW50MzJfdCkp
KQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJl
ZUJTRCkKLXN0YXRpYyB2b2lkCi1zY3RwX2dldF9ydGFkZHJzKGludCBhZGRycywgc3RydWN0IHNv
Y2thZGRyICpzYSwgc3RydWN0IHNvY2thZGRyICoqcnRpX2luZm8pCi17Ci0JaW50IGk7Ci0KLQlm
b3IgKGkgPSAwOyBpIDwgUlRBWF9NQVg7IGkrKykgewotCQlpZiAoYWRkcnMgJiAoMSA8PCBpKSkg
ewotCQkJcnRpX2luZm9baV0gPSBzYTsKLQkJCU5FWFRfU0Eoc2EpOwotCQl9IGVsc2UgewotCQkJ
cnRpX2luZm9baV0gPSBOVUxMOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotc2N0cF9oYW5k
bGVfaWZhbXNnKHVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsIHN0cnVj
dCBzb2NrYWRkciAqc2EpCi17Ci0JaW50IHJjOwotCXN0cnVjdCBpZmFkZHJzICppZmEsICppZmFz
OwotCi0JLyogaGFuZGxlIG9ubHkgdGhlIHR5cGVzIHdlIHdhbnQgKi8KLQlpZiAoKHR5cGUgIT0g
UlRNX05FV0FERFIpICYmICh0eXBlICE9IFJUTV9ERUxBRERSKSkgewotCQlyZXR1cm47Ci0JfQot
Ci0JcmMgPSBnZXRpZmFkZHJzKCZpZmFzKTsKLQlpZiAocmMgIT0gMCkgewotCQlyZXR1cm47Ci0J
fQotCWZvciAoaWZhID0gaWZhczsgaWZhOyBpZmEgPSBpZmEtPmlmYV9uZXh0KSB7Ci0JCWlmIChp
bmRleCA9PSBpZl9uYW1ldG9pbmRleChpZmEtPmlmYV9uYW1lKSkgewotCQkJYnJlYWs7Ci0JCX0K
LQl9Ci0JaWYgKGlmYSA9PSBOVUxMKSB7Ci0JCWZyZWVpZmFkZHJzKGlmYXMpOwotCQlyZXR1cm47
Ci0JfQotCi0JLyogcmVsYXkgdGhlIGFwcHJvcHJpYXRlIGFkZHJlc3MgY2hhbmdlIHRvIHRoZSBi
YXNlIGNvZGUgKi8KLQlpZiAodHlwZSA9PSBSVE1fTkVXQUREUikgewotCQkodm9pZClzY3RwX2Fk
ZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsCi0JCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIE5VTEwsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4
KGlmYS0+aWZhX25hbWUpLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAotCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9uYW1lLAotCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICBOVUxMLAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzYSwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
MSk7Ci0JfSBlbHNlIHsKLQkJc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZihTQ1RQX0RFRkFVTFRfVlJG
SUQsIGlmYS0+aWZhX2FkZHIsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZfbmFtZXRvaW5k
ZXgoaWZhLT5pZmFfbmFtZSksCi0JCSAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFt
ZSk7Ci0JfQotCWZyZWVpZmFkZHJzKGlmYXMpOwotfQotCi1zdGF0aWMgdm9pZCAqCi1yZWN2X2Z1
bmN0aW9uX3JvdXRlKHZvaWQgKmFyZykKLXsKLQlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaWZhX21z
Z2hkciAqaWZhOwotCWNoYXIgcnRfYnVmZmVyWzEwMjRdOwotCXN0cnVjdCBzb2NrYWRkciAqc2Es
ICpydGlfaW5mb1tSVEFYX01BWF07Ci0KLQlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgi
U0NUUCBhZGRyIG1vbiIpOwotCi0Jd2hpbGUgKDEpIHsKLQkJbWVtc2V0KHJ0X2J1ZmZlciwgMCwg
c2l6ZW9mKHJ0X2J1ZmZlcikpOwotCQlyZXQgPSByZWN2KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3JvdXRlKSwgcnRfYnVmZmVyLCBzaXplb2YocnRfYnVmZmVyKSwgMCk7Ci0KLQkJaWYgKHJldCA+
IDApIHsKLQkJCWlmYSA9IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBydF9idWZmZXI7Ci0JCQlpZiAo
aWZhLT5pZmFtX3R5cGUgIT0gUlRNX0RFTEFERFIgJiYgaWZhLT5pZmFtX3R5cGUgIT0gUlRNX05F
V0FERFIpIHsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAq
KSAoaWZhICsgMSk7Ci0JCQlzY3RwX2dldF9ydGFkZHJzKGlmYS0+aWZhbV9hZGRycywgc2EsIHJ0
aV9pbmZvKTsKLQkJCXN3aXRjaCAoaWZhLT5pZmFtX3R5cGUpIHsKLQkJCWNhc2UgUlRNX0RFTEFE
RFI6Ci0JCQljYXNlIFJUTV9ORVdBRERSOgotCQkJCXNjdHBfaGFuZGxlX2lmYW1zZyhpZmEtPmlm
YW1fdHlwZSwgaWZhLT5pZmFtX2luZGV4LCBydGlfaW5mb1tSVEFYX0lGQV0pOwotCQkJCWJyZWFr
OwotCQkJZGVmYXVsdDoKLQkJCQkvKiBpZ25vcmUgdGhpcyByb3V0aW5nIGV2ZW50ICovCi0JCQkJ
YnJlYWs7Ci0JCQl9Ci0JCX0KLQkJaWYgKHJldCA8IDApIHsKLQkJCWlmIChlcnJubyA9PSBFQUdB
SU4pIHsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0K
LQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLSNlbmRpZgotCi0jaWYgMAotLyogVGhpcyBkb2VzIG5v
dCB5ZXQgd29yayBvbiBMaW51eCAqLwotc3RhdGljIHZvaWQgKgotcmVjdl9mdW5jdGlvbl9yb3V0
ZSh2b2lkICphcmcpCi17Ci0JaW50IGxlbjsKLQljaGFyIGJ1Zls0MDk2XTsKLQlzdHJ1Y3QgaW92
ZWMgaW92ID0geyBidWYsIHNpemVvZihidWYpIH07Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3Ry
dWN0IG5sbXNnaGRyICpuaDsKLQlzdHJ1Y3QgaWZhZGRybXNnICpydG1zZzsKLQlzdHJ1Y3QgcnRh
dHRyICpydGF0cDsKLQlzdHJ1Y3QgaW5fYWRkciAqaW5wOwotCXN0cnVjdCBzb2NrYWRkcl9ubCBz
YW5sOwotI2lmZGVmIElORVQKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNhOwotI2VuZGlmCi0jaWZk
ZWYgSU5FVDYKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7Ci0jZW5kaWYKLQotCWZvciAoOzsp
IHsKLQkJbWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOwotCQlzYW5sLm5sX2ZhbWlseSA9
IEFGX05FVExJTks7Ci0JCXNhbmwubmxfZ3JvdXBzID0gUlRNR1JQX0lQVjZfSUZBRERSIHwgUlRN
R1JQX0lQVjRfSUZBRERSOwotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIp
KTsKLQkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikmc2FubDsKLQkJbXNnLm1zZ19uYW1lbGVuID0g
c2l6ZW9mKHNhbmwpOwotCQltc2cubXNnX2lvdiA9ICZpb3Y7Ci0JCW1zZy5tc2dfaW92bGVuID0g
MTsKLQkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsK
LQotCQlsZW4gPSByZWN2bXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSwgJm1zZywg
MCk7Ci0KLQkJaWYgKGxlbiA8IDApIHsKLQkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKLQkJCQlj
b250aW51ZTsKLQkJCX0gZWxzZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJZm9yIChuaCA9
IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOyBOTE1TR19PSyAobmgsIGxlbik7Ci0JCQluaCA9IE5M
TVNHX05FWFQgKG5oLCBsZW4pKSB7Ci0JCQlpZiAobmgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9O
RSkKLQkJCQlicmVhazsKLQotCQkJaWYgKG5oLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8
IG5oLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERSKSB7Ci0JCQkJcnRtc2cgPSAoc3RydWN0IGlm
YWRkcm1zZyAqKU5MTVNHX0RBVEEobmgpOwotCQkJCXJ0YXRwID0gKHN0cnVjdCBydGF0dHIgKilJ
RkFfUlRBKHJ0bXNnKTsKLQkJCQlpZiAocnRhdHAtPnJ0YV90eXBlID09IElGQV9BRERSRVNTKSB7
Ci0JCQkJCWlucCA9IChzdHJ1Y3QgaW5fYWRkciAqKVJUQV9EQVRBKHJ0YXRwKTsKLQkJCQkJc3dp
dGNoIChydG1zZy0+aWZhX2ZhbWlseSkgewotI2lmZGVmIElORVQKLQkJCQkJY2FzZSBBRl9JTkVU
OgotCQkJCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKLQkJCQkJCXNhLT5zaW5fZmFtaWx5ID0gcnRtc2ctPmlmYV9mYW1pbHk7
Ci0JCQkJCQlzYS0+c2luX3BvcnQgPSAwOwotCQkJCQkJbWVtY3B5KCZzYS0+c2luX2FkZHIsIGlu
cCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCQkJCQlzY3RwX2hhbmRsZV9pZmFtc2cobmgt
Pm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qgc29ja2FkZHIgKilzYSk7Ci0J
CQkJCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCQkJCWNhc2UgQUZfSU5FVDY6Ci0J
CQkJCQlzYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNikpOwotCQkJCQkJc2E2LT5zaW42X2ZhbWlseSA9IHJ0bXNnLT5pZmFfZmFtaWx5
OwotCQkJCQkJc2E2LT5zaW42X3BvcnQgPSAwOwotCQkJCQkJbWVtY3B5KCZzYTYtPnNpbjZfYWRk
ciwgaW5wLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7Ci0JCQkJCQlzY3RwX2hhbmRsZV9pZmFt
c2cobmgtPm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFfaW5kZXgsIChzdHJ1Y3Qgc29ja2FkZHIgKilz
YTYpOwotCQkJCQkJYnJlYWs7Ci0jZW5kaWYKLQkJCQkJZGVmYXVsdDoKLQkJCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19VU1IsICJBZGRyZXNzIGZhbWlseSAlZCBub3Qgc3VwcG9ydGVkLlxuIiwgcnRt
c2ctPmlmYV9mYW1pbHkpOwotCQkJCQkJYnJlYWs7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0K
LQl9Ci0JcmV0dXJuIChOVUxMKTsKLX0KLSNlbmRpZgotCi0jaWZkZWYgSU5FVAotc3RhdGljIHZv
aWQgKgotcmVjdl9mdW5jdGlvbl9yYXcodm9pZCAqYXJnKQotewotCXN0cnVjdCBtYnVmICoqcmVj
dm1idWY7Ci0Jc3RydWN0IGlwICppcGhkcjsKLQlzdHJ1Y3Qgc2N0cGhkciAqc2g7Ci0JdWludDE2
X3QgcG9ydDsKLQlpbnQgb2Zmc2V0LCBlY24gPSAwOwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9O
T19DU1VNKQotCWludCBjb21wdXRlX2NyYyA9IDE7Ci0jZW5kaWYKLQlzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciAqY2g7Ci0Jc3RydWN0IHNvY2thZGRyX2luIHNyYywgZHN0OwotI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JdW5zaWduZWQgaW50IG5jb3VudGVyOwotCXN0cnVjdCBt
c2doZHIgbXNnOwotCXN0cnVjdCBpb3ZlYyByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsK
LSNlbHNlCi0JV1NBQlVGIHJlY3ZfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOwotCWludCBuUmVz
dWx0LCBtX0Vycm9yQ29kZTsKLQlEV09SRCBmbGFnczsKLQlEV09SRCBuY291bnRlcjsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gZnJvbTsKLQlpbnQgZnJvbWxlbjsKLSNlbmRpZgotCS8qSW5pdGlhbGx5
IHRoZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRlZC4KLQkgIHRvX2ZpbGwg
aW5kaWNhdGVzIHRoaXMgYW1vdW50LiAqLwotCWludCB0b19maWxsID0gTUFYTEVOX01CVUZfQ0hB
SU47Ci0JLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBpbiB0aGUgY2hhaW4gKi8K
LQlpbnQgaSwgbjsKLQl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7Ci0JaW50IHdhbnRf
ZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKLQlpbnQgd2FudF9oZWFkZXIgPSAwOwotCi0J
c2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAvSVA0IHJjdiIpOwotCi0JbWVtc2V0
KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQltZW1zZXQoJmRzdCwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCi0JcmVjdm1idWYgPSBtYWxsb2Moc2l6ZW9m
KHN0cnVjdCBtYnVmICopICogTUFYTEVOX01CVUZfQ0hBSU4pOwotCi0Jd2hpbGUgKDEpIHsKLQkJ
Zm9yIChpID0gMDsgaSA8IHRvX2ZpbGw7IGkrKykgewotCQkJLyogTm90IGdldHRpbmcgdGhlIHBh
Y2tldCBoZWFkZXIuIFRlc3RzIHdpdGggY2hhaW4gb2Ygb25lIHJ1bgotCQkJICAgYXMgdXN1YWwg
d2l0aG91dCBoYXZpbmcgdGhlIHBhY2tldCBoZWFkZXIuCi0JCQkgICBIYXZlIHRyaWVkIGJvdGgg
c2VuZGluZyBhbmQgcmVjZWl2aW5nCi0JCQkgKi8KLQkJCXJlY3ZtYnVmW2ldID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4dCwgTVRf
REFUQSk7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCXJlY3ZfaW92
ZWNbaV0uaW92X2Jhc2UgPSAoY2FkZHJfdClyZWN2bWJ1ZltpXS0+bV9kYXRhOwotCQkJcmVjdl9p
b3ZlY1tpXS5pb3ZfbGVuID0gaW92bGVuOwotI2Vsc2UKLQkJCXJlY3ZfaW92ZWNbaV0uYnVmID0g
KGNhZGRyX3QpcmVjdm1idWZbaV0tPm1fZGF0YTsKLQkJCXJlY3ZfaW92ZWNbaV0ubGVuID0gaW92
bGVuOwotI2VuZGlmCi0JCX0KLQkJdG9fZmlsbCA9IDA7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKQotCQlmbGFncyA9IDA7Ci0JCW5jb3VudGVyID0gMDsKLQkJZnJvbWxlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQltZW1zZXQoJmZyb20sIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLQotCQluUmVzdWx0ID0gV1NBUmVjdkZyb20oU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksIHJlY3ZfaW92ZWMsIE1BWExFTl9NQlVGX0NIQUlOLCAm
bmNvdW50ZXIsICZmbGFncywgKHN0cnVjdCBzb2NrYWRkciAqKSZmcm9tLCAmZnJvbWxlbiwgTlVM
TCwgTlVMTCk7Ci0JCWlmIChuUmVzdWx0ICE9IDApIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NBR2V0
TGFzdEVycm9yKCk7Ci0JCQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKSB7Ci0JCQkJ
Y29udGludWU7Ci0JCQl9Ci0JCQlpZiAoKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLKSB8fCAo
bV9FcnJvckNvZGUgPT0gV1NBRUlOVFIpKSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQkJbiA9
IG5jb3VudGVyOwotI2Vsc2UKLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3QgbXNnaGRy
KSk7Ci0JCW1zZy5tc2dfbmFtZSA9IE5VTEw7Ci0JCW1zZy5tc2dfbmFtZWxlbiA9IDA7Ci0JCW1z
Zy5tc2dfaW92ID0gcmVjdl9pb3ZlYzsKLQkJbXNnLm1zZ19pb3ZsZW4gPSBNQVhMRU5fTUJVRl9D
SEFJTjsKLQkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsKLQkJbXNnLm1zZ19jb250cm9sbGVuID0g
MDsKLQkJbmNvdW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdz
Y3RwKSwgJm1zZywgMCk7Ci0JCWlmIChuIDwgMCkgewotCQkJaWYgKGVycm5vID09IEVBR0FJTikg
ewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2Vu
ZGlmCi0JCVNDVFBfSEVBREVSX0xFTihyZWN2bWJ1ZlswXSkgPSBuOyAvKiBsZW5ndGggb2YgdG90
YWwgcGFja2V0ICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKLQkJU0NU
UF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7Ci0KLQkJaWYgKCh1bnNpZ25l
ZCBpbnQpbiA8PSBpb3ZsZW4pIHsKLQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZlswXSkgPSBuOwot
CQkJKHRvX2ZpbGwpKys7Ci0JCX0gZWxzZSB7Ci0JCQlpID0gMDsKLQkJCVNDVFBfQlVGX0xFTihy
ZWN2bWJ1ZlswXSkgPSBpb3ZsZW47Ci0KLQkJCW5jb3VudGVyIC09IGlvdmxlbjsKLQkJCSh0b19m
aWxsKSsrOwotCQkJZG8gewotCQkJCXJlY3ZtYnVmW2ldLT5tX25leHQgPSByZWN2bWJ1ZltpKzFd
OwotCQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZltpXS0+bV9uZXh0KSA9IG1pbihuY291bnRlciwg
aW92bGVuKTsKLQkJCQlpKys7Ci0JCQkJbmNvdW50ZXIgLT0gaW92bGVuOwotCQkJCSh0b19maWxs
KSsrOwotCQkJfSB3aGlsZSAobmNvdW50ZXIgPiAwKTsKLQkJfQotCi0JCWlwaGRyID0gbXRvZChy
ZWN2bWJ1ZlswXSwgc3RydWN0IGlwICopOwotCQlzaCA9IChzdHJ1Y3Qgc2N0cGhkciAqKSgoY2Fk
ZHJfdClpcGhkciArIHNpemVvZihzdHJ1Y3QgaXApKTsKLQkJY2ggPSAoc3RydWN0IHNjdHBfY2h1
bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKLQkJb2Zmc2V0
ID0gc2l6ZW9mKHN0cnVjdCBpcCkgKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCWlmIChp
cGhkci0+aXBfdG9zICE9IDApIHsKLQkJCWVjbiA9IGlwaGRyLT5pcF90b3MgJiAweDAyOwotCQl9
Ci0KLQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlk
c3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCWRzdC5z
aW5fYWRkciA9IGlwaGRyLT5pcF9kc3Q7Ci0JCWRzdC5zaW5fcG9ydCA9IHNoLT5kZXN0X3BvcnQ7
Ci0KLQkJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQlz
cmMuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotI2VuZGlmCi0JCXNyYy5z
aW5fYWRkciA9IGlwaGRyLT5pcF9zcmM7Ci0JCXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsK
LQotCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLwot
CQlpZiAoSU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkgewotCQkJbV9m
cmVlbShyZWN2bWJ1ZlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoU0NUUF9JU19JVF9C
Uk9BRENBU1QoZHN0LnNpbl9hZGRyLCByZWN2bWJ1ZlswXSkpIHsKLQkJCW1fZnJlZW0ocmVjdm1i
dWZbMF0pOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlwb3J0ID0gMDsKLQotI2lmIGRlZmluZWQo
U0NUUF9XSVRIX05PX0NTVU0pCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0j
ZWxzZQotCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYm
Ci0JCSAgICAoKElONF9JU0xPT1BCQUNLX0FERFJFU1MoJnNyYy5zaW5fYWRkcikgJiYKLQkJICAg
ICAgSU40X0lTTE9PUEJBQ0tfQUREUkVTUygmZHN0LnNpbl9hZGRyKSkgfHwKLQkJICAgICAoc3Jj
LnNpbl9hZGRyLnNfYWRkciA9PSBkc3Quc2luX2FkZHIuc19hZGRyKSkpIHsKLQkJCWNvbXB1dGVf
Y3JjID0gMDsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0JCX0gZWxzZSB7
Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOwotCQl9Ci0jZW5kaWYKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRlcy4iLCBfX2Z1bmNfXywg
bik7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5nIHNjdHBfY29tbW9uX2lu
cHV0X3Byb2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIG9mZnNldCk7Ci0JCXNjdHBfY29tbW9uX2lu
cHV0X3Byb2Nlc3NpbmcoJnJlY3ZtYnVmWzBdLCBzaXplb2Yoc3RydWN0IGlwKSwgb2Zmc2V0LCBu
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3Jj
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0
LAotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChT
Q1RQX1dJVEhfTk9fQ1NVTSkKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRl
X2NyYywKLSNlbmRpZgotCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjbiwKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIHBvcnQpOwotCQlp
ZiAocmVjdm1idWZbMF0pIHsKLQkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOwotCQl9Ci0JfQotCWZv
ciAoaSA9IDA7IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsrKSB7Ci0JCW1fZnJlZShyZWN2bWJ1
ZltpXSk7Ci0JfQotCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLwotCWZyZWUocmVjdm1idWYp
OwotCXJldHVybiAoTlVMTCk7Ci19Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoSU5FVDYpCi1zdGF0
aWMgdm9pZCAqCi1yZWN2X2Z1bmN0aW9uX3JhdzYodm9pZCAqYXJnKQotewotCXN0cnVjdCBtYnVm
ICoqcmVjdm1idWY2OwotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JdW5z
aWduZWQgaW50IG5jb3VudGVyID0gMDsKLQlzdHJ1Y3QgaW92ZWMgcmVjdl9pb3ZlY1tNQVhMRU5f
TUJVRl9DSEFJTl07Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGNtc2doZHIgKmNtc2dw
dHI7Ci0JY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8p
KV07Ci0jZWxzZQotCVdTQUJVRiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKLQlpbnQg
blJlc3VsdCwgbV9FcnJvckNvZGU7Ci0JRFdPUkQgZmxhZ3M7Ci0JRFdPUkQgbmNvdW50ZXIgPSAw
OwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgZnJvbTsKLQlpbnQgZnJvbWxlbjsKLQlHVUlEIFdTQVJl
Y3ZNc2dfR1VJRCA9IFdTQUlEX1dTQVJFQ1ZNU0c7Ci0JTFBGTl9XU0FSRUNWTVNHIFdTQVJlY3ZN
c2c7Ci0JV1NBQ01TR0hEUiAqY21zZ3B0cjsKLQlXU0FNU0cgbXNnOwotCWNoYXIgQ29udHJvbEJ1
ZmZlclsxMDI0XTsKLSNlbmRpZgotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7Ci0Jc3Ry
dWN0IHNjdHBoZHIgKnNoOwotCWludCBvZmZzZXQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNo
OwotCS8qSW5pdGlhbGx5IHRoZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFsbG9jYXRl
ZC4KLQkgIHRvX2ZpbGwgaW5kaWNhdGVzIHRoaXMgYW1vdW50LiAqLwotCWludCB0b19maWxsID0g
TUFYTEVOX01CVUZfQ0hBSU47Ci0JLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2ggbWJ1ZiBp
biB0aGUgY2hhaW4gKi8KLQlpbnQgaSwgbjsKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NV
TSkKLQlpbnQgY29tcHV0ZV9jcmMgPSAxOwotI2VuZGlmCi0JdW5zaWduZWQgaW50IGlvdmxlbiA9
IE1DTEJZVEVTOwotCWludCB3YW50X2V4dCA9IChpb3ZsZW4gPiBNTEVOKT8gMSA6IDA7Ci0JaW50
IHdhbnRfaGVhZGVyID0gMDsKLQotCXNjdHBfdXNlcnNwYWNlX3NldF90aHJlYWRuYW1lKCJTQ1RQ
L0lQNiByY3YiKTsKLQotCXJlY3ZtYnVmNiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1idWYgKikg
KiBNQVhMRU5fTUJVRl9DSEFJTik7Ci0KLQlmb3IgKDs7KSB7Ci0JCWZvciAoaSA9IDA7IGkgPCB0
b19maWxsOyBpKyspIHsKLQkJCS8qIE5vdCBnZXR0aW5nIHRoZSBwYWNrZXQgaGVhZGVyLiBUZXN0
cyB3aXRoIGNoYWluIG9mIG9uZSBydW4KLQkJCSAgIGFzIHVzdWFsIHdpdGhvdXQgaGF2aW5nIHRo
ZSBwYWNrZXQgaGVhZGVyLgotCQkJICAgSGF2ZSB0cmllZCBib3RoIHNlbmRpbmcgYW5kIHJlY2Vp
dmluZwotCQkJICovCi0JCQlyZWN2bWJ1ZjZbaV0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coaW92
bGVuLCB3YW50X2hlYWRlciwgTV9OT1dBSVQsIHdhbnRfZXh0LCBNVF9EQVRBKTsKLSNpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfYmFzZSA9
IChjYWRkcl90KXJlY3ZtYnVmNltpXS0+bV9kYXRhOwotCQkJcmVjdl9pb3ZlY1tpXS5pb3ZfbGVu
ID0gaW92bGVuOwotI2Vsc2UKLQkJCXJlY3ZfaW92ZWNbaV0uYnVmID0gKGNhZGRyX3QpcmVjdm1i
dWY2W2ldLT5tX2RhdGE7Ci0JCQlyZWN2X2lvdmVjW2ldLmxlbiA9IGlvdmxlbjsKLSNlbmRpZgot
CQl9Ci0JCXRvX2ZpbGwgPSAwOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LQkJZmxhZ3MgPSAwOwotCQluY291bnRlciA9IDA7Ci0JCWZyb21sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7Ci0JCW1lbXNldCgmZnJvbSwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKLQkJblJlc3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHA2KSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKLQkJICAgICAgICAg
ICAgICAgICAgICZXU0FSZWN2TXNnX0dVSUQsIHNpemVvZiBXU0FSZWN2TXNnX0dVSUQsCi0JCSAg
ICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZywgc2l6ZW9mIFdTQVJlY3ZNc2csCi0JCSAgICAg
ICAgICAgICAgICAgICAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOwotCQlpZiAoblJlc3VsdCA9PSAw
KSB7Ci0JCQltc2cubmFtZSA9ICh2b2lkICopJnNyYzsKLQkJCW1zZy5uYW1lbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJbXNnLmxwQnVmZmVycyA9IHJlY3ZfaW92ZWM7Ci0J
CQltc2cuZHdCdWZmZXJDb3VudCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQkJbXNnLkNvbnRyb2wu
bGVuID0gc2l6ZW9mIENvbnRyb2xCdWZmZXI7Ci0JCQltc2cuQ29udHJvbC5idWYgPSBDb250cm9s
QnVmZmVyOwotCQkJbXNnLmR3RmxhZ3MgPSAwOwotCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2coU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAmbXNnLCAmbmNvdW50ZXIsIE5VTEwsIE5V
TEwpOwotCQl9Ci0JCWlmIChuUmVzdWx0ICE9IDApIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NBR2V0
TGFzdEVycm9yKCk7Ci0JCQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKQotCQkJCWNv
bnRpbnVlOwotCQkJaWYgKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLIHx8IG1fRXJyb3JDb2Rl
ID09IFdTQUVJTlRSKQotCQkJCWJyZWFrOwotCQl9Ci0JCW4gPSBuY291bnRlcjsKLSNlbHNlCi0J
CW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOwotCQltZW1zZXQoJnNyYywg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJbWVtc2V0KCZkc3QsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JCW1lbXNldChjbXNnYnVmLCAwLCBDTVNHX1NQQUNF
KHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSkpOwotCQltc2cubXNnX25hbWUgPSAodm9pZCAq
KSZzcmM7Ci0JCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsK
LQkJbXNnLm1zZ19pb3YgPSByZWN2X2lvdmVjOwotCQltc2cubXNnX2lvdmxlbiA9IE1BWExFTl9N
QlVGX0NIQUlOOwotCQltc2cubXNnX2NvbnRyb2wgPSAodm9pZCAqKWNtc2didWY7Ci0JCW1zZy5t
c2dfY29udHJvbGxlbiA9IChzb2NrbGVuX3QpQ01TR19MRU4oc2l6ZW9mIChzdHJ1Y3QgaW42X3Br
dGluZm8pKTsKLQkJbXNnLm1zZ19mbGFncyA9IDA7Ci0KLQkJbmNvdW50ZXIgPSBuID0gcmVjdm1z
ZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksICZtc2csIDApOwotCQlpZiAobiA8
IDApIHsKLQkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKLQkJCQljb250aW51ZTsKLQkJCX0gZWxz
ZSB7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLSNlbmRpZgotCQlTQ1RQX0hFQURFUl9MRU4ocmVj
dm1idWY2WzBdKSA9IG47IC8qIGxlbmd0aCBvZiB0b3RhbCBwYWNrZXQgKi8KLQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfaW5wYWNrZXRzKTsKLQotCQlpZiAoKHVuc2lnbmVkIGludCluIDw9IGlvdmxlbikgewotCQkJ
U0NUUF9CVUZfTEVOKHJlY3ZtYnVmNlswXSkgPSBuOwotCQkJKHRvX2ZpbGwpKys7Ci0JCX0gZWxz
ZSB7Ci0JCQlpID0gMDsKLQkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbMF0pID0gaW92bGVuOwot
Ci0JCQluY291bnRlciAtPSBpb3ZsZW47Ci0JCQkodG9fZmlsbCkrKzsKLQkJCWRvIHsKLQkJCQly
ZWN2bWJ1ZjZbaV0tPm1fbmV4dCA9IHJlY3ZtYnVmNltpKzFdOwotCQkJCVNDVFBfQlVGX0xFTihy
ZWN2bWJ1ZjZbaV0tPm1fbmV4dCkgPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7Ci0JCQkJaSsrOwot
CQkJCW5jb3VudGVyIC09IGlvdmxlbjsKLQkJCQkodG9fZmlsbCkrKzsKLQkJCX0gd2hpbGUgKG5j
b3VudGVyID4gMCk7Ci0JCX0KLQotCQlmb3IgKGNtc2dwdHIgPSBDTVNHX0ZJUlNUSERSKCZtc2cp
OyBjbXNncHRyICE9IE5VTEw7IGNtc2dwdHIgPSBDTVNHX05YVEhEUigmbXNnLCBjbXNncHRyKSkg
ewotCQkJaWYgKChjbXNncHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVBWNikgJiYgKGNtc2dw
dHItPmNtc2dfdHlwZSA9PSBJUFY2X1BLVElORk8pKSB7Ci0JCQkJc3RydWN0IGluNl9wa3RpbmZv
ICogaW5mbzsKLQotCQkJCWluZm8gPSAoc3RydWN0IGluNl9wa3RpbmZvICopQ01TR19EQVRBKGNt
c2dwdHIpOwotCQkJCW1lbWNweSgodm9pZCAqKSZkc3Quc2luNl9hZGRyLCAoY29uc3Qgdm9pZCAq
KSAmKGluZm8tPmlwaTZfYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLQkJCQlicmVh
azsKLQkJCX0KLQkJfQotCi0JCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBt
dWx0aWNhc3RzICovCi0JCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmRzdC5zaW42X2FkZHIp
KSB7Ci0JCQltX2ZyZWVtKHJlY3ZtYnVmNlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCXNo
ID0gbXRvZChyZWN2bWJ1ZjZbMF0sIHN0cnVjdCBzY3RwaGRyICopOwotCQljaCA9IChzdHJ1Y3Qg
c2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdClzaCArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOwot
CQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCWRzdC5zaW42X2ZhbWlseSA9
IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2VuZGlmCi0JCWRzdC5zaW42X3BvcnQgPSBzaC0+ZGVz
dF9wb3J0OwotCi0JCXNyYy5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVfU0lO
Nl9MRU4KLQkJc3JjLnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotI2Vu
ZGlmCi0JCXNyYy5zaW42X3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0jaWYgZGVmaW5lZChTQ1RQX1dJ
VEhfTk9fQ1NVTSkKLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdm5vY3JjKTsKLSNlbHNlCi0J
CWlmIChtZW1jbXAoJnNyYy5zaW42X2FkZHIsICZkc3Quc2luNl9hZGRyLCBzaXplb2Yoc3RydWN0
IGluNl9hZGRyKSkgPT0gMCkgewotCQkJY29tcHV0ZV9jcmMgPSAwOwotCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcmVjdm5vY3JjKTsKLQkJfSBlbHNlIHsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X3JlY3Zzd2NyYyk7Ci0JCX0KLSNlbmRpZgotCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6
IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVuY19fLCBuKTsKLQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZyB3aXRoIG9mZj0l
ZFxuIiwgb2Zmc2V0KTsKLQkJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmcmVjdm1idWY2
WzBdLCAwLCBvZmZzZXQsIG4sCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzb2NrYWRkciAqKSZzcmMsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzb2NrYWRkciAqKSZkc3QsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNo
LAotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbXB1dGVfY3JjLAotI2VuZGlmCi0JCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwKLQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJG
SUQsIDApOwotCQlpZiAocmVjdm1idWY2WzBdKSB7Ci0JCQltX2ZyZWVtKHJlY3ZtYnVmNlswXSk7
Ci0JCX0KLQl9Ci0JZm9yIChpID0gMDsgaSA8IE1BWExFTl9NQlVGX0NIQUlOOyBpKyspIHsKLQkJ
bV9mcmVlKHJlY3ZtYnVmNltpXSk7Ci0JfQotCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLwot
CWZyZWUocmVjdm1idWY2KTsKLQlyZXR1cm4gKE5VTEwpOwotfQotI2VuZGlmCi0KLSNpZmRlZiBJ
TkVUCi1zdGF0aWMgdm9pZCAqCi1yZWN2X2Z1bmN0aW9uX3VkcCh2b2lkICphcmcpCi17Ci0Jc3Ry
dWN0IG1idWYgKip1ZHByZWN2bWJ1ZjsKLQkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBt
YnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCi0JICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3Vu
dC4gKi8KLQlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCS8qIGlvdmxlbiBpcyB0
aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCi0JaW50IGksIG4sIG9mZnNldDsK
LQl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7Ci0JaW50IHdhbnRfZXh0ID0gKGlvdmxl
biA+IE1MRU4pPyAxIDogMDsKLQlpbnQgd2FudF9oZWFkZXIgPSAwOwotCXN0cnVjdCBzY3RwaGRy
ICpzaDsKLQl1aW50MTZfdCBwb3J0OwotCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKLQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gc3JjLCBkc3Q7Ci0jaWYgZGVmaW5lZChJUF9QS1RJTkZPKQotCWNoYXIg
Y21zZ2J1ZltDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKLSNlbHNlCi0J
Y2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSldOwotI2VuZGlm
Ci0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JaW50IGNvbXB1dGVfY3JjID0gMTsK
LSNlbmRpZgotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JdW5zaWduZWQg
aW50IG5jb3VudGVyOwotCXN0cnVjdCBpb3ZlYyBpb3ZbTUFYTEVOX01CVUZfQ0hBSU5dOwotCXN0
cnVjdCBtc2doZHIgbXNnOwotCXN0cnVjdCBjbXNnaGRyICpjbXNncHRyOwotI2Vsc2UKLQlHVUlE
IFdTQVJlY3ZNc2dfR1VJRCA9IFdTQUlEX1dTQVJFQ1ZNU0c7Ci0JTFBGTl9XU0FSRUNWTVNHIFdT
QVJlY3ZNc2c7Ci0JY2hhciBDb250cm9sQnVmZmVyWzEwMjRdOwotCVdTQUJVRiBpb3ZbTUFYTEVO
X01CVUZfQ0hBSU5dOwotCVdTQU1TRyBtc2c7Ci0JaW50IG5SZXN1bHQsIG1fRXJyb3JDb2RlOwot
CVdTQUNNU0dIRFIgKmNtc2dwdHI7Ci0JRFdPUkQgbmNvdW50ZXI7Ci0jZW5kaWYKLQotCXNjdHBf
dXNlcnNwYWNlX3NldF90aHJlYWRuYW1lKCJTQ1RQL1VEUC9JUDQgcmN2Iik7Ci0KLQl1ZHByZWN2
bWJ1ZiA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IG1idWYgKikgKiBNQVhMRU5fTUJVRl9DSEFJTik7
Ci0KLQl3aGlsZSAoMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7Ci0JCQkv
KiBOb3QgZ2V0dGluZyB0aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUg
cnVuCi0JCQkgICBhcyB1c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4KLQkJ
CSAgIEhhdmUgdHJpZWQgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKLQkJCSAqLwotCQkJdWRw
cmVjdm1idWZbaV0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coaW92bGVuLCB3YW50X2hlYWRlciwg
TV9OT1dBSVQsIHdhbnRfZXh0LCBNVF9EQVRBKTsKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQotCQkJaW92W2ldLmlvdl9iYXNlID0gKGNhZGRyX3QpdWRwcmVjdm1idWZbaV0t
Pm1fZGF0YTsKLQkJCWlvdltpXS5pb3ZfbGVuID0gaW92bGVuOwotI2Vsc2UKLQkJCWlvdltpXS5i
dWYgPSAoY2FkZHJfdCl1ZHByZWN2bWJ1ZltpXS0+bV9kYXRhOwotCQkJaW92W2ldLmxlbiA9IGlv
dmxlbjsKLSNlbmRpZgotCQl9Ci0JCXRvX2ZpbGwgPSAwOwotI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCi0JCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikp
OwotI2Vsc2UKLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihXU0FNU0cpKTsKLSNlbmRpZgotCQlt
ZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQltZW1zZXQoJmRz
dCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQltZW1zZXQoY21zZ2J1ZiwgMCwg
c2l6ZW9mKGNtc2didWYpKTsKLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
Ci0JCW1zZy5tc2dfbmFtZSA9ICh2b2lkICopJnNyYzsKLQkJbXNnLm1zZ19uYW1lbGVuID0gc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCW1zZy5tc2dfaW92ID0gaW92OwotCQltc2cubXNn
X2lvdmxlbiA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQltc2cubXNnX2NvbnRyb2wgPSAodm9pZCAq
KWNtc2didWY7Ci0JCW1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnYnVmKTsKLQkJbXNn
Lm1zZ19mbGFncyA9IDA7Ci0KLQkJbmNvdW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV91ZHBzY3RwKSwgJm1zZywgMCk7Ci0JCWlmIChuIDwgMCkgewotCQkJaWYgKGVy
cm5vID09IEVBR0FJTikgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsKLQkJCQlicmVhazsK
LQkJCX0KLQkJfQotI2Vsc2UKLQkJblJlc3VsdCA9IFdTQUlvY3RsKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3VkcHNjdHApLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLAotCQkg
JldTQVJlY3ZNc2dfR1VJRCwgc2l6ZW9mIFdTQVJlY3ZNc2dfR1VJRCwKLQkJICZXU0FSZWN2TXNn
LCBzaXplb2YgV1NBUmVjdk1zZywKLQkJICZuY291bnRlciwgTlVMTCwgTlVMTCk7Ci0JCWlmIChu
UmVzdWx0ID09IDApIHsKLQkJCW1zZy5uYW1lID0gKHZvaWQgKikmc3JjOwotCQkJbXNnLm5hbWVs
ZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQkJCW1zZy5scEJ1ZmZlcnMgPSBpb3Y7
Ci0JCQltc2cuZHdCdWZmZXJDb3VudCA9IE1BWExFTl9NQlVGX0NIQUlOOwotCQkJbXNnLkNvbnRy
b2wubGVuID0gc2l6ZW9mIENvbnRyb2xCdWZmZXI7Ci0JCQltc2cuQ29udHJvbC5idWYgPSBDb250
cm9sQnVmZmVyOwotCQkJbXNnLmR3RmxhZ3MgPSAwOwotCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2co
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksICZtc2csICZuY291bnRlciwgTlVMTCwg
TlVMTCk7Ci0JCX0KLQkJaWYgKG5SZXN1bHQgIT0gMCkgewotCQkJbV9FcnJvckNvZGUgPSBXU0FH
ZXRMYXN0RXJyb3IoKTsKLQkJCWlmIChtX0Vycm9yQ29kZSA9PSBXU0FFVElNRURPVVQpIHsKLQkJ
CQljb250aW51ZTsKLQkJCX0KLQkJCWlmICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0spIHx8
IChtX0Vycm9yQ29kZSA9PSBXU0FFSU5UUikpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlu
ID0gbmNvdW50ZXI7Ci0jZW5kaWYKLQkJU0NUUF9IRUFERVJfTEVOKHVkcHJlY3ZtYnVmWzBdKSA9
IG47IC8qIGxlbmd0aCBvZiB0b3RhbCBwYWNrZXQgKi8KLQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
cmVjdnBhY2tldHMpOwotCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5wYWNrZXRz
KTsKLQotCQlpZiAoKHVuc2lnbmVkIGludCluIDw9IGlvdmxlbikgewotCQkJU0NUUF9CVUZfTEVO
KHVkcHJlY3ZtYnVmWzBdKSA9IG47Ci0JCQkodG9fZmlsbCkrKzsKLQkJfSBlbHNlIHsKLQkJCWkg
PSAwOwotCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3ZtYnVmWzBdKSA9IGlvdmxlbjsKLQotCQkJbmNv
dW50ZXIgLT0gaW92bGVuOwotCQkJKHRvX2ZpbGwpKys7Ci0JCQlkbyB7Ci0JCQkJdWRwcmVjdm1i
dWZbaV0tPm1fbmV4dCA9IHVkcHJlY3ZtYnVmW2krMV07Ci0JCQkJU0NUUF9CVUZfTEVOKHVkcHJl
Y3ZtYnVmW2ldLT5tX25leHQpID0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOwotCQkJCWkrKzsKLQkJ
CQluY291bnRlciAtPSBpb3ZsZW47Ci0JCQkJKHRvX2ZpbGwpKys7Ci0JCQl9IHdoaWxlIChuY291
bnRlciA+IDApOwotCQl9Ci0KLQkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsg
Y21zZ3B0ciAhPSBOVUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsK
LSNpZiBkZWZpbmVkKElQX1BLVElORk8pCi0JCQlpZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0g
SVBQUk9UT19JUCkgJiYgKGNtc2dwdHItPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSkgewotCQkJ
CXN0cnVjdCBpbl9wa3RpbmZvICppbmZvOwotCi0JCQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVU
OwotI2lmZGVmIEhBVkVfU0lOX0xFTgotCQkJCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJCQlpbmZvID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01T
R19EQVRBKGNtc2dwdHIpOwotCQkJCW1lbWNweSgodm9pZCAqKSZkc3Quc2luX2FkZHIsIChjb25z
dCB2b2lkICopJihpbmZvLT5pcGlfYWRkciksIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotCQkJ
CWJyZWFrOwotCQkJfQotI2Vsc2UKLQkJCWlmICgoY21zZ3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBS
T1RPX0lQKSAmJiAoY21zZ3B0ci0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKSkgewotCQkJ
CXN0cnVjdCBpbl9hZGRyICphZGRyOwotCi0JCQkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwot
I2lmZGVmIEhBVkVfU0lOX0xFTgotCQkJCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7Ci0jZW5kaWYKLQkJCQlhZGRyID0gKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRB
KGNtc2dwdHIpOwotCQkJCW1lbWNweSgodm9pZCAqKSZkc3Quc2luX2FkZHIsIChjb25zdCB2b2lk
ICopYWRkciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0jZW5k
aWYKLQkJfQotCi0JCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBvciBtdWx0aWNh
c3RzICovCi0JCWlmIChJTl9NVUxUSUNBU1QobnRvaGwoZHN0LnNpbl9hZGRyLnNfYWRkcikpKSB7
Ci0JCQltX2ZyZWVtKHVkcHJlY3ZtYnVmWzBdKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JCWlmIChT
Q1RQX0lTX0lUX0JST0FEQ0FTVChkc3Quc2luX2FkZHIsIHVkcHJlY3ZtYnVmWzBdKSkgewotCQkJ
bV9mcmVlbSh1ZHByZWN2bWJ1ZlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qb2Zmc2V0
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7
Ki8KLQkJc2ggPSBtdG9kKHVkcHJlY3ZtYnVmWzBdLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKLQkJY2gg
PSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNj
dHBoZHIpKTsKLQkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKLQkJcG9ydCA9IHNy
Yy5zaW5fcG9ydDsKLQkJc3JjLnNpbl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQlkc3Quc2luX3Bv
cnQgPSBzaC0+ZGVzdF9wb3J0OwotI2lmIGRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi0JCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zub2NyYyk7Ci0jZWxzZQotCQlpZiAoc3JjLnNpbl9hZGRy
LnNfYWRkciA9PSBkc3Quc2luX2FkZHIuc19hZGRyKSB7Ci0JCQljb21wdXRlX2NyYyA9IDA7Ci0J
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2bm9jcmMpOwotCQl9IGVsc2UgewotCQkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKLQkJfQotI2VuZGlmCi0JCVNDVFBEQkcoU0NUUF9E
RUJVR19VU1IsICIlczogUmVjZWl2ZWQgJWQgYnl0ZXMuIiwgX19mdW5jX18sIG4pOwotCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiIC0gY2FsbGluZyBzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNz
aW5nIHdpdGggb2ZmPSVkXG4iLCBvZmZzZXQpOwotCQlzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNz
aW5nKCZ1ZHByZWN2bWJ1ZlswXSwgMCwgb2Zmc2V0LCBuLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
U0NUUF9ERUZBVUxUX1ZSRklELCBwb3J0KTsKLQkJaWYgKHVkcHJlY3ZtYnVmWzBdKSB7Ci0JCQlt
X2ZyZWVtKHVkcHJlY3ZtYnVmWzBdKTsKLQkJfQotCX0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYTEVO
X01CVUZfQ0hBSU47IGkrKykgewotCQltX2ZyZWUodWRwcmVjdm1idWZbaV0pOwotCX0KLQkvKiBm
cmVlIHRoZSBhcnJheSBpdHNlbGYgKi8KLQlmcmVlKHVkcHJlY3ZtYnVmKTsKLQlyZXR1cm4gKE5V
TEwpOwotfQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKElORVQ2KQotc3RhdGljIHZvaWQgKgotcmVj
dl9mdW5jdGlvbl91ZHA2KHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgbWJ1ZiAqKnVkcHJlY3ZtYnVm
NjsKLQkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0
ZWQuCi0JICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KLQlpbnQgdG9fZmlsbCA9
IE1BWExFTl9NQlVGX0NIQUlOOwotCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYg
aW4gdGhlIGNoYWluICovCi0JaW50IGksIG4sIG9mZnNldDsKLQl1bnNpZ25lZCBpbnQgaW92bGVu
ID0gTUNMQllURVM7Ci0JaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDogMDsKLQlp
bnQgd2FudF9oZWFkZXIgPSAwOwotCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7Ci0Jc3Ry
dWN0IHNjdHBoZHIgKnNoOwotCXVpbnQxNl90IHBvcnQ7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIg
KmNoOwotCWNoYXIgY21zZ2J1ZltDTVNHX1NQQUNFKHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZv
KSldOwotI2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotCWludCBjb21wdXRlX2NyYyA9
IDE7Ci0jZW5kaWYKLSNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCXVuc2ln
bmVkIGludCBuY291bnRlcjsKLQlzdHJ1Y3QgaW92ZWMgaW92W01BWExFTl9NQlVGX0NIQUlOXTsK
LQlzdHJ1Y3QgbXNnaGRyIG1zZzsKLQlzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKLSNlbHNlCi0J
R1VJRCBXU0FSZWN2TXNnX0dVSUQgPSBXU0FJRF9XU0FSRUNWTVNHOwotCUxQRk5fV1NBUkVDVk1T
RyBXU0FSZWN2TXNnOwotCWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKLQlXU0FCVUYgaW92W01B
WExFTl9NQlVGX0NIQUlOXTsKLQlXU0FNU0cgbXNnOwotCWludCBuUmVzdWx0LCBtX0Vycm9yQ29k
ZTsKLQlEV09SRCBuY291bnRlcjsKLQlXU0FDTVNHSERSICpjbXNncHRyOwotI2VuZGlmCi0KLQlz
Y3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUC9VRFAvSVA2IHJjdiIpOwotCi0JdWRw
cmVjdm1idWY2ID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWJ1ZiAqKSAqIE1BWExFTl9NQlVGX0NI
QUlOKTsKLQl3aGlsZSAoMSkgewotCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7Ci0J
CQkvKiBOb3QgZ2V0dGluZyB0aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBv
bmUgcnVuCi0JCQkgICBhcyB1c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4K
LQkJCSAgIEhhdmUgdHJpZWQgYm90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKLQkJCSAqLwotCQkJ
dWRwcmVjdm1idWY2W2ldID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFk
ZXIsIE1fTk9XQUlULCB3YW50X2V4dCwgTVRfREFUQSk7Ci0jaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLQkJCWlvdltpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXVkcHJlY3ZtYnVm
NltpXS0+bV9kYXRhOwotCQkJaW92W2ldLmlvdl9sZW4gPSBpb3ZsZW47Ci0jZWxzZQotCQkJaW92
W2ldLmJ1ZiA9IChjYWRkcl90KXVkcHJlY3ZtYnVmNltpXS0+bV9kYXRhOwotCQkJaW92W2ldLmxl
biA9IGlvdmxlbjsKLSNlbmRpZgotCQl9Ci0JCXRvX2ZpbGwgPSAwOwotCi0jaWYgIWRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJbWVtc2V0KCZtc2csIDAsIHNpemVvZihzdHJ1Y3Qg
bXNnaGRyKSk7Ci0jZWxzZQotCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKFdTQU1TRykpOwotI2Vu
ZGlmCi0JCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQlt
ZW1zZXQoJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJbWVtc2V0KGNt
c2didWYsIDAsIENNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKSk7Ci0KLSNp
ZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQltc2cubXNnX25hbWUgPSAodm9p
ZCAqKSZzcmM7Ci0JCW1zZy5tc2dfbmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42
KTsKLQkJbXNnLm1zZ19pb3YgPSBpb3Y7Ci0JCW1zZy5tc2dfaW92bGVuID0gTUFYTEVOX01CVUZf
Q0hBSU47Ci0JCW1zZy5tc2dfY29udHJvbCA9ICh2b2lkICopY21zZ2J1ZjsKLQkJbXNnLm1zZ19j
b250cm9sbGVuID0gKHNvY2tsZW5fdClDTVNHX0xFTihzaXplb2YgKHN0cnVjdCBpbjZfcGt0aW5m
bykpOwotCQltc2cubXNnX2ZsYWdzID0gMDsKLQotCQluY291bnRlciA9IG4gPSByZWN2bXNnKFND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgJm1zZywgMCk7Ci0JCWlmIChuIDwgMCkg
ewotCQkJaWYgKGVycm5vID09IEVBR0FJTikgewotCQkJCWNvbnRpbnVlOwotCQkJfSBlbHNlIHsK
LQkJCQlicmVhazsKLQkJCX0KLQkJfQotI2Vsc2UKLQkJblJlc3VsdCA9IFdTQUlvY3RsKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05f
UE9JTlRFUiwKLQkJICAgICAgICAgICAgICAgICAgICZXU0FSZWN2TXNnX0dVSUQsIHNpemVvZiBX
U0FSZWN2TXNnX0dVSUQsCi0JCSAgICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZywgc2l6ZW9m
IFdTQVJlY3ZNc2csCi0JCSAgICAgICAgICAgICAgICAgICAmbmNvdW50ZXIsIE5VTEwsIE5VTEwp
OwotCQlpZiAoblJlc3VsdCA9PSBTT0NLRVRfRVJST1IpIHsKLQkJCW1fRXJyb3JDb2RlID0gV1NB
R2V0TGFzdEVycm9yKCk7Ci0JCQlXU0FSZWN2TXNnID0gTlVMTDsKLQkJfQotCQlpZiAoblJlc3Vs
dCA9PSAwKSB7Ci0JCQltc2cubmFtZSA9ICh2b2lkICopJnNyYzsKLQkJCW1zZy5uYW1lbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQkJbXNnLmxwQnVmZmVycyA9IGlvdjsKLQkJ
CW1zZy5kd0J1ZmZlckNvdW50ID0gTUFYTEVOX01CVUZfQ0hBSU47Ci0JCQltc2cuQ29udHJvbC5s
ZW4gPSBzaXplb2YgQ29udHJvbEJ1ZmZlcjsKLQkJCW1zZy5Db250cm9sLmJ1ZiA9IENvbnRyb2xC
dWZmZXI7Ci0JCQltc2cuZHdGbGFncyA9IDA7Ci0JCQluUmVzdWx0ID0gV1NBUmVjdk1zZyhTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksICZtc2csICZuY291bnRlciwgTlVMTCwgTlVM
TCk7Ci0JCX0KLQkJaWYgKG5SZXN1bHQgIT0gMCkgewotCQkJbV9FcnJvckNvZGUgPSBXU0FHZXRM
YXN0RXJyb3IoKTsKLQkJCWlmIChtX0Vycm9yQ29kZSA9PSBXU0FFVElNRURPVVQpIHsKLQkJCQlj
b250aW51ZTsKLQkJCX0KLQkJCWlmICgobV9FcnJvckNvZGUgPT0gV1NBRU5PVFNPQ0spIHx8ICht
X0Vycm9yQ29kZSA9PSBXU0FFSU5UUikpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQluID0g
bmNvdW50ZXI7Ci0jZW5kaWYKLQkJU0NUUF9IRUFERVJfTEVOKHVkcHJlY3ZtYnVmNlswXSkgPSBu
OyAvKiBsZW5ndGggb2YgdG90YWwgcGFja2V0ICovCi0JCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3ZwYWNrZXRzKTsKLQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7
Ci0KLQkJaWYgKCh1bnNpZ25lZCBpbnQpbiA8PSBpb3ZsZW4pIHsKLQkJCVNDVFBfQlVGX0xFTih1
ZHByZWN2bWJ1ZjZbMF0pID0gbjsKLQkJCSh0b19maWxsKSsrOwotCQl9IGVsc2UgewotCQkJaSA9
IDA7Ci0JCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWY2WzBdKSA9IGlvdmxlbjsKLQotCQkJbmNv
dW50ZXIgLT0gaW92bGVuOwotCQkJKHRvX2ZpbGwpKys7Ci0JCQlkbyB7Ci0JCQkJdWRwcmVjdm1i
dWY2W2ldLT5tX25leHQgPSB1ZHByZWN2bWJ1ZjZbaSsxXTsKLQkJCQlTQ1RQX0JVRl9MRU4odWRw
cmVjdm1idWY2W2ldLT5tX25leHQpID0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOwotCQkJCWkrKzsK
LQkJCQluY291bnRlciAtPSBpb3ZsZW47Ci0JCQkJKHRvX2ZpbGwpKys7Ci0JCQl9IHdoaWxlIChu
Y291bnRlciA+IDApOwotCQl9Ci0KLQkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNn
KTsgY21zZ3B0ciAhPSBOVUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikp
IHsKLQkJCWlmICgoY21zZ3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYpICYmIChjbXNn
cHRyLT5jbXNnX3R5cGUgPT0gSVBWNl9QS1RJTkZPKSkgewotCQkJCXN0cnVjdCBpbjZfcGt0aW5m
byAqaW5mbzsKLQotCQkJCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotI2lmZGVmIEhBVkVf
U0lONl9MRU4KLQkJCQlkc3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7
Ci0jZW5kaWYKLQkJCQlpbmZvID0gKHN0cnVjdCBpbjZfcGt0aW5mbyAqKUNNU0dfREFUQShjbXNn
cHRyKTsKLQkJCQkvKmRzdC5zaW42X3BvcnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7Ki8KLQkJCQltZW1jcHkoKHZvaWQgKikmZHN0LnNpbjZfYWRk
ciwgKGNvbnN0IHZvaWQgKikmKGluZm8tPmlwaTZfYWRkciksIHNpemVvZihzdHJ1Y3QgaW42X2Fk
ZHIpKTsKLQkJCX0KLQkJfQotCi0JCS8qIFNDVFAgZG9lcyBub3QgYWxsb3cgYnJvYWRjYXN0cyBv
ciBtdWx0aWNhc3RzICovCi0JCWlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoJmRzdC5zaW42X2Fk
ZHIpKSB7Ci0JCQltX2ZyZWVtKHVkcHJlY3ZtYnVmNlswXSk7Ci0JCQljb250aW51ZTsKLQkJfQot
Ci0JCXNoID0gbXRvZCh1ZHByZWN2bWJ1ZjZbMF0sIHN0cnVjdCBzY3RwaGRyICopOwotCQljaCA9
IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKSgoY2FkZHJfdClzaCArIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcikpOwotCQlvZmZzZXQgPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOwotCi0JCXBvcnQgPSBz
cmMuc2luNl9wb3J0OwotCQlzcmMuc2luNl9wb3J0ID0gc2gtPnNyY19wb3J0OwotCQlkc3Quc2lu
Nl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKLSNpZiBkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQot
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2bm9jcmMpOwotI2Vsc2UKLQkJaWYgKChtZW1jbXAo
JnNyYy5zaW42X2FkZHIsICZkc3Quc2luNl9hZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkg
PT0gMCkpIHsKLQkJCWNvbXB1dGVfY3JjID0gMDsKLQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Jl
Y3Zub2NyYyk7Ci0JCX0gZWxzZSB7Ci0JCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMp
OwotCQl9Ci0jZW5kaWYKLQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAl
ZCBieXRlcy4iLCBfX2Z1bmNfXywgbik7Ci0JCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBj
YWxsaW5nIHNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIChpbnQp
c2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0JCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3Npbmco
JnVkcHJlY3ZtYnVmNlswXSwgMCwgb2Zmc2V0LCBuLAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmZHN0LAotCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9fQ1NVTSkKLQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb21wdXRlX2NyYywKLSNlbmRpZgotCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCi0JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9ERUZBVUxUX1ZSRklELCBwb3J0KTsKLQkJaWYgKHVkcHJlY3ZtYnVmNlswXSkgewotCQkJbV9m
cmVlbSh1ZHByZWN2bWJ1ZjZbMF0pOwotCQl9Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5f
TUJVRl9DSEFJTjsgaSsrKSB7Ci0JCW1fZnJlZSh1ZHByZWN2bWJ1ZjZbaV0pOwotCX0KLQkvKiBm
cmVlIHRoZSBhcnJheSBpdHNlbGYgKi8KLQlmcmVlKHVkcHJlY3ZtYnVmNik7Ci0JcmV0dXJuIChO
VUxMKTsKLX0KLSNlbmRpZgotCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LXN0YXRpYyB2b2lkCi1zZXRSZWNlaXZlQnVmZmVyU2l6ZShTT0NLRVQgc2ZkLCBpbnQgbmV3X3Np
emUpCi0jZWxzZQotc3RhdGljIHZvaWQKLXNldFJlY2VpdmVCdWZmZXJTaXplKGludCBzZmQsIGlu
dCBuZXdfc2l6ZSkKLSNlbmRpZgotewotCWludCBjaCA9IG5ld19zaXplOwotCi0JaWYgKHNldHNv
Y2tvcHQgKHNmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAodm9pZCopJmNoLCBzaXplb2YoY2gp
KSA8IDApIHsKLSNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IHJlY3YtYnVmZmVycyBzaXplIChlcnJubyA9ICVk
KS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLSNlbHNlCi0JCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBzZXQgcmVjdi1idWZmZXJzIHNpemUgKGVycm5vID0gJWQpLlxuIiwgZXJybm8p
OwotI2VuZGlmCi0JfQotCXJldHVybjsKLX0KLQotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCi1zdGF0aWMgdm9pZAotc2V0U2VuZEJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50
IG5ld19zaXplKQotI2Vsc2UKLXN0YXRpYyB2b2lkCi1zZXRTZW5kQnVmZmVyU2l6ZShpbnQgc2Zk
LCBpbnQgbmV3X3NpemUpCi0jZW5kaWYKLXsKLQlpbnQgY2ggPSBuZXdfc2l6ZTsKLQotCWlmIChz
ZXRzb2Nrb3B0IChzZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9m
KGNoKSkgPCAwKSB7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBzZW5kLWJ1ZmZlcnMgc2l6ZSAoZXJybm8g
PSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3Qgc2V0IHNlbmQtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIGVy
cm5vKTsKLSNlbmRpZgotCX0KLQlyZXR1cm47Ci19Ci0KLSNkZWZpbmUgU09DS0VUX1RJTUVPVVQg
MTAwIC8qIGluIG1zICovCi12b2lkCi1yZWN2X3RocmVhZF9pbml0KHZvaWQpCi17Ci0jaWYgZGVm
aW5lZChJTkVUKQotCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyX2lwdjQ7Ci0JY29uc3QgaW50IGhk
cmluY2wgPSAxOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJf
aW42IGFkZHJfaXB2NjsKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVU
NikKLQljb25zdCBpbnQgb24gPSAxOwotI2VuZGlmCi0jaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLQlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OwotCi0JbWVtc2V0KCZ0aW1lb3V0
LCAwLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLQl0aW1lb3V0LnR2X3NlYyAgPSAoU09DS0VU
X1RJTUVPVVQgLyAxMDAwKTsKLQl0aW1lb3V0LnR2X3VzZWMgPSAoU09DS0VUX1RJTUVPVVQgJSAx
MDAwKSAqIDEwMDA7Ci0jZWxzZQotCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU09DS0VUX1RJTUVP
VVQ7IC8qIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCi0jZW5kaWYKLSNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkp
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLQlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2Vfcm91dGUpID09IC0xKSB7Ci0JCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpID0gc29ja2V0KEFGX1JPVVRFLCBTT0NLX1JBVywgMCkpID09IC0xKSB7Ci0JCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHJvdXRpbmcgc29ja2V0IChlcnJubyA9
ICVkKS5cbiIsIGVycm5vKTsKLQkJfQotI2lmIDAKLQkJc3RydWN0IHNvY2thZGRyX25sIHNhbmw7
Ci0KLQkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSBzb2NrZXQoQUZfTkVU
TElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpKSA8IDApIHsKLQkJCVNDVFBEQkcoU0NUUF9E
RUJVR19VU1IsICJDYW4ndCBjcmVhdGUgcm91dGluZyBzb2NrZXQgKGVycm5vID0gJWQuXG4iLCBl
cnJubyk7Ci0JCX0KLQkJbWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOwotCQlzYW5sLm5s
X2ZhbWlseSA9IEFGX05FVExJTks7Ci0JCXNhbmwubmxfZ3JvdXBzID0gMDsKLSNpZmRlZiBJTkVU
Ci0JCXNhbmwubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY0X0lGQUREUjsKLSNlbmRpZgotI2lmZGVm
IElORVQ2Ci0JCXNhbmwubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKLSNlbmRpZgot
CQlpZiAoYmluZChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikgJnNhbmwsIHNpemVvZihzYW5sKSkgPCAwKSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3QgYmluZCByb3V0aW5nIHNvY2tldCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7
Ci0JCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOwotCQkJU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7Ci0JCX0KLSNlbmRpZgotCQlpZiAoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2Vfcm91dGUpICE9IC0xKSB7Ci0JCQlpZiAoc2V0c29ja29wdChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLChjb25zdCB2
b2lkKikmdGltZW91dCwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSkgPCAwKSB7Ci0JCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHJvdXRpbmcgc29ja2V0IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi0JCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKLSNl
bHNlCi0JCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKLSNlbmRpZgot
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSA9IC0xOwotCQkJfQotCQl9Ci0JfQot
I2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUKQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSA9PSAtMSkgewotCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX1NDVFApKSA9PSAtMSkgewotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBjcmVhdGUgcmF3IHNvY2tldCBmb3IgSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGNyZWF0ZSByYXcgc29ja2V0IGZvciBJUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsK
LSNlbmRpZgotCQl9IGVsc2UgewotCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFND
VFAgc29ja2V0ICovCi0JCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSwgSVBQUk9UT19JUCwgSVBfSERSSU5DTCwoY29uc3Qgdm9pZCopJmhkcmluY2wsIHNp
emVvZihpbnQpKSA8IDApIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9IRFJJTkNMIChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0jZWxzZQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBzZXQgSVBfSERSSU5DTCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJ
Y2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOwotI2VuZGlmCi0JCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgPSAtMTsKLQkJCX0gZWxzZSBpZiAoc2V0c29j
a29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNW
VElNRU8sIChjb25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7Ci0j
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8g
PSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0JCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOwotI2Vsc2UKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3Qgc2V0IHRpbWVvdXQgb24gc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVycm5vID0g
JWQpLlxuIiwgZXJybm8pOwotCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3Nj
dHApKTsKLSNlbmRpZgotCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7
Ci0JCQl9IGVsc2UgewotCQkJCW1lbXNldCgodm9pZCAqKSZhZGRyX2lwdjQsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSNpZmRlZiBIQVZFX1NJTl9MRU4KLQkJCQlhZGRyX2lwdjQu
c2luX2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0jZW5kaWYKLQkJ
CQlhZGRyX2lwdjQuc2luX2ZhbWlseSAgICAgID0gQUZfSU5FVDsKLQkJCQlhZGRyX2lwdjQuc2lu
X3BvcnQgICAgICAgID0gaHRvbnMoMCk7Ci0JCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9
IGh0b25sKElOQUREUl9BTlkpOwotCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHApLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZv
ciBTQ1RQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0jZWxzZQotCQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2
NCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApKTsKLSNlbmRpZgotCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSA9IC0xOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLICovCi0JCQkJ
CXNldFNlbmRCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9S
QVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/
IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAqLwotCQkJCX0KLQkJCX0KLQkJfQotCX0KLQlpZiAo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPT0gLTEpIHsKLQkJaWYgKChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJ
UFBST1RPX1VEUCkpID09IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFND
VFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotI2Vsc2UK
LQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVhdGUgc29ja2V0IGZvciBTQ1RQ
L1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgotCQl9IGVsc2Ugewot
I2lmIGRlZmluZWQoSVBfUEtUSU5GTykKLQkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApLCBJUFBST1RPX0lQLCBJUF9QS1RJTkZPLCAoY29uc3Qgdm9pZCAq
KSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7Ci0jZWxzZQotCQkJaWYgKHNldHNvY2tvcHQo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RB
RERSLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7Ci0jZW5kaWYK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVmaW5lZChJUF9QS1RJ
TkZPKQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBfUEtUSU5GTyBv
biBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVy
cm9yKCkpOwotI2Vsc2UKLQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQ
X1JFQ1ZEU1RBRERSIG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCkuXG4i
LCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZW5kaWYKLQkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7Ci0jZWxzZQotI2lmIGRlZmluZWQoSVBfUEtUSU5GTykK
LQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1BLVElORk8gb24gc29j
a2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbHNlCi0J
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9SRUNWRFNUQUREUiBvbiBz
b2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotI2VuZGlm
Ci0JCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2VuZGlmCi0J
CQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKLQkJCX0gZWxzZSBpZiAo
c2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgU09MX1NPQ0tFVCwg
U09fUkNWVElNRU8sIChjb25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAw
KSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQ
djQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJCWNsb3Nlc29ja2V0
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKLSNlbHNlCi0JCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAv
SVB2NCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cCkgPSAtMTsKLQkJCX0gZWxzZSB7Ci0JCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2
NCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotI2lmZGVmIEhBVkVfU0lOX0xFTgot
CQkJCWFkZHJfaXB2NC5zaW5fbGVuICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKLSNlbmRpZgotCQkJCWFkZHJfaXB2NC5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOwotCQkJ
CWFkZHJfaXB2NC5zaW5fcG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7Ci0JCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0
b25sKElOQUREUl9BTlkpOwotCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Vk
cHNjdHApLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBT
Q1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQkJ
Y2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2Vsc2UKLQkJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VE
UC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLQkJCQkJY2xvc2UoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCkpOwotI2VuZGlmCi0JCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3VkcHNjdHApID0gLTE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNp
emUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEyOEsgKi8K
LQkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCks
IFNCX1JBVyk7IC8qIDEyOEsgSXMgdGhpcyBzZXR0aW5nIG5ldC5pbmV0LnJhdy5tYXhkZ3JhbSB2
YWx1ZT8gU2hvdWxkIGl0IGJlIHNldCB0byA2NEs/ICovCi0JCQkJfQotCQkJfQotCQl9Ci0JfQot
I2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpID09IC0xKSB7Ci0JCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19TQ1RQKSkgPT0gLTEpIHsK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5c
biIsIFdTQUdldExhc3RFcnJvcigpKTsKLSNlbHNlCi0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNS
LCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVy
cm5vKTsKLSNlbmRpZgotCQl9IGVsc2UgewotCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUg
cmF3IFNDVFAgc29ja2V0ICovCi0jaWYgZGVmaW5lZChJUFY2X1JFQ1ZQS1RJTkZPKQotCQkJaWYg
KHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQ
VjYsIElQVjZfUkVDVlBLVElORk8sIChjb25zdCB2b2lkICopJm9uLCBzaXplb2Yob24pKSA8IDAp
IHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NU
UC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQljbG9zZXNv
Y2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwotI2Vsc2UKLQkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUkVDVlBLVElORk8gb24gc29ja2V0
IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOwotCQkJCWNsb3NlKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7Ci0jZW5kaWYKLQkJCQlTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKLQkJCX0gZWxzZSB7Ci0jZWxzZQotCQkJaWYgKHNl
dHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYs
IElQVjZfUEtUSU5GTywoY29uc3Qgdm9pZCopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKLSNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5v
ID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOwotCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7Ci0jZWxzZQotCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgSVBWNl9QS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLQkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwNikpOwotI2VuZGlmCi0JCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpID0gLTE7Ci0JCQl9IGVsc2UgewotI2VuZGlmCi0JCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAo
Y29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihvbikpIDwgMCkgewotI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IkNhbid0IHNldCBJUFY2X1Y2T05MWSBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAl
ZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKLSNlbmRpZgotCQkJCX0KLQkJCQlpZiAoc2V0c29ja29w
dChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksIFNPTF9TT0NLRVQsIFNPX1JDVlRJ
TUVPLCAoY29uc3Qgdm9pZCAqKSZ0aW1lb3V0LCBzaXplb2YodGltZW91dCkpIDwgMCkgewotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKLSNlbHNlCi0JCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8g
PSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHA2KSk7Ci0jZW5kaWYKLQkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYp
ID0gLTE7Ci0JCQkJfSBlbHNlIHsKLQkJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNpZmRlZiBIQVZFX1NJTjZfTEVOCi0JCQkJ
CWFkZHJfaXB2Ni5zaW42X2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OwotI2VuZGlmCi0JCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7Ci0J
CQkJCWFkZHJfaXB2Ni5zaW42X3BvcnQgICAgICAgID0gaHRvbnMoMCk7Ci0JCQkJCWFkZHJfaXB2
Ni5zaW42X2FkZHIgICAgICAgID0gaW42YWRkcl9hbnk7Ci0JCQkJCWlmIChiaW5kKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy
X2lwdjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7Ci0jaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFz
dEVycm9yKCkpOwotCQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3
c2N0cDYpKTsKLSNlbHNlCi0JCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmlu
ZCBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7Ci0JCQkJCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwotI2VuZGlmCi0JCQkJCQlT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKLQkJCQkJfSBlbHNlIHsKLQkJ
CQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2
KSwgU0JfUkFXKTsgLyogMTI4SyAqLwotCQkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGlu
ZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAq
LwotCQkJCQl9Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwNikgPT0gLTEpIHsKLQkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwNikgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0g
LTEpIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJy
bm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7Ci0jZWxzZQotCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5v
ID0gJWQpLlxuIiwgZXJybm8pOwotI2VuZGlmCi0JCX0KLSNpZiBkZWZpbmVkKElQVjZfUkVDVlBL
VElORk8pCi0JCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZQS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGlu
dClzaXplb2YoaW50KSkgPCAwKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZP
IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7Ci0JCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3Rw
NikpOwotI2Vsc2UKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9S
RUNWUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwg
ZXJybm8pOwotCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNl
bmRpZgotCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0JCX0gZWxz
ZSB7Ci0jZWxzZQotCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwNiksIElQUFJPVE9fSVBWNiwgSVBWNl9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGlu
dClzaXplb2YoaW50KSkgPCAwKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24g
c29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJv
cigpKTsKLQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7
Ci0jZWxzZQotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElO
Rk8gb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsK
LQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7Ci0jZW5kaWYKLQkJ
CVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOwotCQl9IGVsc2UgewotI2Vu
ZGlmCi0JCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiks
IElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIChjb25zdCB2b2lkICopJm9uLCAoc29ja2xlbl90
KXNpemVvZihvbikpIDwgMCkgewotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
LQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNv
Y2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7Ci0jZWxzZQotCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9W
Nk9OTFkgb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5v
KTsKLSNlbmRpZgotCQkJfQotCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfdWRwc2N0cDYpLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGlt
ZW91dCwgc2l6ZW9mKHRpbWVvdXQpKSA8IDApIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0
IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7Ci0JCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cDYpKTsKLSNlbHNlCi0JCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1l
b3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7
Ci0JCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbmRpZgot
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOwotCQkJfSBlbHNlIHsK
LQkJCQltZW1zZXQoKHZvaWQgKikmYWRkcl9pcHY2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOwotI2lmZGVmIEhBVkVfU0lONl9MRU4KLQkJCQlhZGRyX2lwdjYuc2luNl9sZW4gICAg
ICAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCQkJCWFkZHJfaXB2
Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7Ci0JCQkJYWRkcl9pcHY2LnNpbjZfcG9ydCAg
ICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7
Ci0JCQkJYWRkcl9pcHY2LnNpbjZfYWRkciAgICAgICAgPSBpbjZhZGRyX2FueTsKLQkJCQlpZiAo
YmluZChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIChjb25zdCBzdHJ1Y3Qgc29j
a2FkZHIgKikmYWRkcl9pcHY2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgewot
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVk
KS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKLQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKLSNlbHNlCi0JCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBiaW5kIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4i
LCBlcnJubyk7Ci0JCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7
Ci0jZW5kaWYKLQkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0J
CQkJfSBlbHNlIHsKLQkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfdWRwc2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLICovCi0JCQkJCXNldFNlbmRCdWZmZXJT
aXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgU0JfUkFXKTsgLyogMTI4SyBJ
cyB0aGlzIHNldHRpbmcgbmV0LmluZXQucmF3Lm1heGRncmFtIHZhbHVlPyBTaG91bGQgaXQgYmUg
c2V0IHRvIDY0Sz8gKi8KLQkJCQl9Ci0JCQl9Ci0JCX0KLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25G
bHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKLSNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSAh
PSAtMSkgewotCQlpbnQgcmM7Ci0KLQkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJvdXRlKSwgJnJlY3ZfZnVuY3Rpb25fcm91
dGUpKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IHJvdXRpbmcg
dGhyZWFkICglZCkuXG4iLCByYyk7Ci0JCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
b3V0ZSkpOwotCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7Ci0JCX0KLQl9
Ci0jZW5kaWYKLSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVCkKLQlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cCkgIT0gLTEpIHsKLQkJaW50IHJjOwotCi0JCWlmICgocmMgPSBzY3Rw
X3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCAm
cmVjdl9mdW5jdGlvbl9yYXcpKSkgewotCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0
IHN0YXJ0IFNDVFAvSVB2NCByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOwotI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApKTsKLSNlbHNlCi0JCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwKSk7Ci0jZW5kaWYKLQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
ID0gLTE7Ci0JCX0KLQl9Ci0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9
IC0xKSB7Ci0JCWludCByYzsKLQotCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFkX2Ny
ZWF0ZSgmU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwKSwgJnJlY3ZfZnVuY3Rpb25fdWRwKSkp
IHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL1VEUC9JUHY0
IHJlY3YgdGhyZWFkICglZCkuXG4iLCByYyk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQotCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkp
OwotI2Vsc2UKLQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKLSNl
bmRpZgotCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKLQkJfQotCX0K
LSNlbmRpZgotI2lmIGRlZmluZWQoSU5FVDYpCi0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSAhPSAtMSkgewotCQlpbnQgcmM7Ci0KLQkJaWYgKChyYyA9IHNjdHBfdXNlcnNw
YWNlX3RocmVhZF9jcmVhdGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJhdzYpLCAmcmVjdl9m
dW5jdGlvbl9yYXc2KSkpIHsKLQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFy
dCBTQ1RQL0lQdjYgcmVjdiB0aHJlYWQgKCVkKS5cbiIsIHJjKTsKLSNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi0JCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwNikpOwotI2Vsc2UKLQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHA2KSk7Ci0jZW5kaWYKLQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9
IC0xOwotCQl9Ci0JfQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0g
LTEpIHsKLQkJaW50IHJjOwotCi0JCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3Jl
YXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHA2KSwgJnJlY3ZfZnVuY3Rpb25fdWRwNikp
KSB7Ci0JCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc3RhcnQgU0NUUC9VRFAvSVB2
NiByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSk7Ci0jZWxzZQotCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsK
LSNlbmRpZgotCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7Ci0JCX0K
LQl9Ci0jZW5kaWYKLX0KLQotdm9pZAotcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKQotewotI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RyYWdvbkZseSkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQotI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpICE9IC0xKSB7Ci0JCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7
Ci0JfQotI2VuZGlmCi0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQpCi0JaWYgKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3Jhd3NjdHApICE9IC0xKSB7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQotCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3Rw
KSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Ci0j
ZW5kaWYKLQl9Ci0JaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQljbG9zZXNvY2tldChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7Ci0jZW5kaWYKLQl9Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KElORVQ2KQotCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsK
LSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCWNsb3Nlc29ja2V0KFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOwotI2VuZGlmCi0JfQotCWlmIChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpIHsKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCi0JCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSk7Ci0jZWxzZQotCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOwot
I2VuZGlmCi0JfQotI2VuZGlmCi19Ci0jZWxzZQotaW50IGZvbzsKLSNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVhZC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9yZWN2X3RocmVh
ZC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWNkZjE3MjExMmM1MWFjMGZlM2Jj
YWZmOGI0ODU1Y2Y3YTYwYWNmLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaAorKysgL2Rldi9udWxsCkBAIC0x
LDM0ICswLDAgQEAKLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDEyIE1pY2hhZWwgVHVleGVuCi0g
KiBDb3B5cmlnaHQgKGMpIDIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV
VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpZm5kZWYgX1VTRVJfUkVDVl9USFJFQURfSF8KLSNkZWZpbmUJX1VTRVJfUkVD
Vl9USFJFQURfSF8KLQotdm9pZCByZWN2X3RocmVhZF9pbml0KHZvaWQpOwotdm9pZCByZWN2X3Ro
cmVhZF9kZXN0cm95KHZvaWQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJf
cm91dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzZXJfcm91dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggODJiMDdkNzY5YTljZWMzOWMwNDEzZjBmNTQ5YzRkMjA2MmQ3ZmU1YS4uMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3JvdXRl
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmlnaHQgKGMp
IDE5ODAsIDE5ODYsIDE5OTMKLSAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh
bGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogNC4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKLSAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQot
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKLSAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKLSAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCi0gKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERB
TUFHRS4KLSAqCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9ST1VURV9IXwotI2RlZmluZSBfVVNFUl9S
T1VURV9IXwotCi0vKgotICogS2VybmVsIHJlc2lkZW50IHJvdXRpbmcgdGFibGVzLgotICoKLSAq
IFRoZSByb3V0aW5nIHRhYmxlcyBhcmUgaW5pdGlhbGl6ZWQgd2hlbiBpbnRlcmZhY2UgYWRkcmVz
c2VzCi0gKiBhcmUgc2V0IGJ5IG1ha2luZyBlbnRyaWVzIGZvciBhbGwgZGlyZWN0bHkgY29ubmVj
dGVkIGludGVyZmFjZXMuCi0gKi8KLQotLyoKLSAqIEEgcm91dGUgY29uc2lzdHMgb2YgYSBkZXN0
aW5hdGlvbiBhZGRyZXNzIGFuZCBhIHJlZmVyZW5jZQotICogdG8gYSByb3V0aW5nIGVudHJ5LiAg
VGhlc2UgYXJlIG9mdGVuIGhlbGQgYnkgcHJvdG9jb2xzCi0gKiBpbiB0aGVpciBjb250cm9sIGJs
b2NrcywgZS5nLiBpbnBjYi4KLSAqLwotCi1zdHJ1Y3Qgc2N0cF9yb3V0ZSB7Ci0Jc3RydWN0CXNj
dHBfcnRlbnRyeSAqcm9fcnQ7Ci0Jc3RydWN0CXNvY2thZGRyIHJvX2RzdDsKLX07Ci0KLS8qCi0g
KiBUaGVzZSBudW1iZXJzIGFyZSB1c2VkIGJ5IHJlbGlhYmxlIHByb3RvY29scyBmb3IgZGV0ZXJt
aW5pbmcKLSAqIHJldHJhbnNtaXNzaW9uIGJlaGF2aW9yIGFuZCBhcmUgaW5jbHVkZWQgaW4gdGhl
IHJvdXRpbmcgc3RydWN0dXJlLgotICovCi1zdHJ1Y3Qgc2N0cF9ydF9tZXRyaWNzX2xpdGUgewot
CXVpbnQzMl90IHJteF9tdHU7CS8qIE1UVSBmb3IgdGhpcyBwYXRoICovCi0jaWYgMAotCXVfbG9u
ZwlybXhfZXhwaXJlOwkvKiBsaWZldGltZSBmb3Igcm91dGUsIGUuZy4gcmVkaXJlY3QgKi8KLQl1
X2xvbmcJcm14X3Brc2VudDsJLyogcGFja2V0cyBzZW50IHVzaW5nIHRoaXMgcm91dGUgKi8KLSNl
bmRpZgotfTsKLQotLyoKLSAqIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gcm91dGVzIHRvIGhvc3Rz
IGFuZCByb3V0ZXMgdG8gbmV0d29ya3MsCi0gKiBwcmVmZXJyaW5nIHRoZSBmb3JtZXIgaWYgYXZh
aWxhYmxlLiAgRm9yIGVhY2ggcm91dGUgd2UgaW5mZXIKLSAqIHRoZSBpbnRlcmZhY2UgdG8gdXNl
IGZyb20gdGhlIGdhdGV3YXkgYWRkcmVzcyBzdXBwbGllZCB3aGVuCi0gKiB0aGUgcm91dGUgd2Fz
IGVudGVyZWQuICBSb3V0ZXMgdGhhdCBmb3J3YXJkIHBhY2tldHMgdGhyb3VnaAotICogZ2F0ZXdh
eXMgYXJlIG1hcmtlZCBzbyB0aGF0IHRoZSBvdXRwdXQgcm91dGluZXMga25vdyB0byBhZGRyZXNz
IHRoZQotICogZ2F0ZXdheSByYXRoZXIgdGhhbiB0aGUgdWx0aW1hdGUgZGVzdGluYXRpb24uCi0g
Ki8KLXN0cnVjdCBzY3RwX3J0ZW50cnkgewotI2lmIDAKLQlzdHJ1Y3QJcmFkaXhfbm9kZSBydF9u
b2Rlc1syXTsJLyogdHJlZSBnbHVlLCBhbmQgb3RoZXIgdmFsdWVzICovCi0JLyoKLQkgKiBYWFgg
c3RydWN0IHJ0ZW50cnkgbXVzdCBiZWdpbiB3aXRoIGEgc3RydWN0IHJhZGl4X25vZGUgKG9yIHR3
byEpCi0JICogYmVjYXVzZSB0aGUgY29kZSBkb2VzIHNvbWUgY2FzdHMgb2YgYSAnc3RydWN0IHJh
ZGl4X25vZGUgKicKLQkgKiB0byBhICdzdHJ1Y3QgcnRlbnRyeSAqJwotCSAqLwotI2RlZmluZQly
dF9rZXkocikJKCooKHN0cnVjdCBzb2NrYWRkciAqKikoJihyKS0+cnRfbm9kZXMtPnJuX2tleSkp
KQotI2RlZmluZQlydF9tYXNrKHIpCSgqKChzdHJ1Y3Qgc29ja2FkZHIgKiopKCYociktPnJ0X25v
ZGVzLT5ybl9tYXNrKSkpCi0Jc3RydWN0CXNvY2thZGRyICpydF9nYXRld2F5OwkvKiB2YWx1ZSAq
LwotCXVfbG9uZwlydF9mbGFnczsJCS8qIHVwL2Rvd24/LCBob3N0L25ldCAqLwotI2VuZGlmCi0J
c3RydWN0CWlmbmV0ICpydF9pZnA7CQkvKiB0aGUgYW5zd2VyOiBpbnRlcmZhY2UgdG8gdXNlICov
Ci0Jc3RydWN0CWlmYWRkciAqcnRfaWZhOwkJLyogdGhlIGFuc3dlcjogaW50ZXJmYWNlIGFkZHJl
c3MgdG8gdXNlICovCi0Jc3RydWN0CXNjdHBfcnRfbWV0cmljc19saXRlIHJ0X3JteDsJLyogbWV0
cmljcyB1c2VkIGJ5IHJ4J2luZyBwcm90b2NvbHMgKi8KLQlsb25nCXJ0X3JlZmNudDsJCS8qICMg
aGVsZCByZWZlcmVuY2VzICovCi0jaWYgMAotCXN0cnVjdAlzb2NrYWRkciAqcnRfZ2VubWFzazsJ
LyogZm9yIGdlbmVyYXRpb24gb2YgY2xvbmVkIHJvdXRlcyAqLwotCWNhZGRyX3QJcnRfbGxpbmZv
OwkJLyogcG9pbnRlciB0byBsaW5rIGxldmVsIGluZm8gY2FjaGUgKi8KLQlzdHJ1Y3QJcnRlbnRy
eSAqcnRfZ3dyb3V0ZTsJLyogaW1wbGllZCBlbnRyeSBmb3IgZ2F0ZXdheWVkIHJvdXRlcyAqLwot
CXN0cnVjdAlydGVudHJ5ICpydF9wYXJlbnQ7IAkvKiBjbG9uaW5nIHBhcmVudCBvZiB0aGlzIHJv
dXRlICovCi0jZW5kaWYKLQlzdHJ1Y3QJbXR4IHJ0X210eDsJCS8qIG11dGV4IGZvciByb3V0aW5n
IGVudHJ5ICovCi19OwotCi0jZGVmaW5lCVJUX0xPQ0tfSU5JVChfcnQpCW10eF9pbml0KCYoX3J0
KS0+cnRfbXR4LCAicnRlbnRyeSIsIE5VTEwsIE1UWF9ERUYgfCBNVFhfRFVQT0spCi0jZGVmaW5l
CVJUX0xPQ0soX3J0KQkJbXR4X2xvY2soJihfcnQpLT5ydF9tdHgpCi0jZGVmaW5lCVJUX1VOTE9D
SyhfcnQpCQltdHhfdW5sb2NrKCYoX3J0KS0+cnRfbXR4KQotI2RlZmluZQlSVF9MT0NLX0RFU1RS
T1koX3J0KQltdHhfZGVzdHJveSgmKF9ydCktPnJ0X210eCkKLSNkZWZpbmUJUlRfTE9DS19BU1NF
UlQoX3J0KQltdHhfYXNzZXJ0KCYoX3J0KS0+cnRfbXR4LCBNQV9PV05FRCkKLQotI2RlZmluZQlS
VF9BRERSRUYoX3J0KQlkbyB7CQkJCQlcCi0JUlRfTE9DS19BU1NFUlQoX3J0KTsJCQkJCVwKLQlL
QVNTRVJUKChfcnQpLT5ydF9yZWZjbnQgPj0gMCwJCQkJXAotCQkoIm5lZ2F0aXZlIHJlZmNudCAl
bGQiLCAoX3J0KS0+cnRfcmVmY250KSk7CVwKLQkoX3J0KS0+cnRfcmVmY250Kys7CQkJCQlcCi19
IHdoaWxlICgwKQotI2RlZmluZQlSVF9SRU1SRUYoX3J0KQlkbyB7CQkJCQlcCi0JUlRfTE9DS19B
U1NFUlQoX3J0KTsJCQkJCVwKLQlLQVNTRVJUKChfcnQpLT5ydF9yZWZjbnQgPiAwLAkJCQlcCi0J
CSgiYm9ndXMgcmVmY250ICVsZCIsIChfcnQpLT5ydF9yZWZjbnQpKTsJXAotCShfcnQpLT5ydF9y
ZWZjbnQtLTsJCQkJCVwKLX0gd2hpbGUgKDApCi0jZGVmaW5lCVJURlJFRV9MT0NLRUQoX3J0KSBk
byB7CQkJCQlcCi0JCWlmICgoX3J0KS0+cnRfcmVmY250IDw9IDEpIHsJCQlcCi0JCQlydGZyZWUo
X3J0KTsJCQkJXAotCQl9IGVsc2UgewkJCQkJXAotCQkJUlRfUkVNUkVGKF9ydCk7CQkJCVwKLQkJ
CVJUX1VOTE9DSyhfcnQpOwkJCQlcCi0JCX0JCQkJCQlcCi0JCS8qIGd1YXJkIGFnYWluc3QgaW52
YWxpZCByZWZzICovCQlcCi0JCV9ydCA9IE5VTEw7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLSNkZWZp
bmUJUlRGUkVFKF9ydCkgZG8gewkJCQkJXAotCQlSVF9MT0NLKF9ydCk7CQkJCQlcCi0JCVJURlJF
RV9MT0NLRUQoX3J0KTsJCQkJXAotfSB3aGlsZSAoMCkKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNlcl9zb2NrZXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGI5NGUxZTVjMjRhZjMzMGVjNjc4NzYxZTkyMGE1NWU3ZmIxOTY4
MWQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNlcl9zb2NrZXQuYworKysgL2Rldi9udWxsCkBAIC0xLDM1NDkgKzAsMCBAQAotLyotCi0g
KiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5ODgsIDE5OTAsIDE5OTMKLSAqICAgICAgVGhl
IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KLSAqIENvcHlyaWdodCAo
YykgMjAwNCBUaGUgRnJlZUJTRCBGb3VuZGF0aW9uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDQtMjAw
OCBSb2JlcnQgTi4gTS4gV2F0c29uCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBl
bm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJp
Z2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEt
MjAxMiBNaWNoYWVsIFR1ZXhlbgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJV
VE9SUyBgYEFTIElTJycgQU5ECi0gKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
Ci0gKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRQotICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKLSAqIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTCi0gKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikKLSAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCi0gKiBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCi0gKiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4K
LSNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zh
ci5oPgotI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zeXNjdGwuaD4KLSNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfaW5wdXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGVlbG9mZi5oPgotI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8bmV0aW5l
dDYvc2N0cDZfdmFyLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVC
U0QpCi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0xpbnV4KQotI2RlZmluZSBfX0ZBVk9SX0JTRCAgICAvKiAob24gVWJ1bnR1IGF0IGxl
YXN0KSBlbmFibGVzIFVEUCBoZWFkZXIgZmllbGQgbmFtZXMgbGlrZSBCU0QgaW4gUkZDIDc2OCAq
LwotI2VuZGlmCi0jaWYgIWRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0jaWYgZGVm
aW5lZCBJTkVUIHx8IGRlZmluZWQgSU5FVDYKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2Vu
ZGlmCi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZWxzZQotI2luY2x1ZGUgPHVzZXJfc29ja2V0
dmFyLmg+Ci0jZW5kaWYKLXVzZXJsYW5kX211dGV4X3QgYWNjZXB0X210eDsKLXVzZXJsYW5kX2Nv
bmRfdCBhY2NlcHRfY29uZDsKLSNpZmRlZiBfV0lOMzIKLSNpbmNsdWRlIDx0aW1lLmg+Ci0jaW5j
bHVkZSA8c3lzL3RpbWViLmg+Ci0jZW5kaWYKLQotTUFMTE9DX0RFRklORShNX1BDQiwgInNjdHBf
cGNiIiwgInNjdHAgcGNiIik7Ci1NQUxMT0NfREVGSU5FKE1fU09OQU1FLCAic2N0cF9zb25hbWUi
LCAic2N0cCBzb25hbWUiKTsKLSNkZWZpbmUgTUFYTEVOX01CVUZfQ0hBSU4gIDMyCi0KLS8qIFBy
b3RvdHlwZXMgKi8KLWV4dGVybiBpbnQgc2N0cF9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHVpbyAqdWlvLAotICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCwgaW50IGZsYWdzLAot
ICAgICAgICAgICAgICAgICAgICAgICAvKiBwcm9jIGlzIGEgZHVtbXkgaW4gX19Vc2Vyc3BhY2Vf
XyBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHNjdHBfbG93ZXJfc29zZW5kICovCi0gICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jICpwKTsKLQotZXh0ZXJuIGludCBzY3RwX2F0dGFj
aChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvLCB1aW50MzJfdCB2cmZfaWQpOwotZXh0ZXJu
IGludCBzY3RwY29ubl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMy
X3QgdnJmX2lkKTsKLQotdm9pZAotdXNyc2N0cF9pbml0KHVpbnQxNl90IHBvcnQsCi0gICAgICAg
ICAgICAgaW50ICgqY29ubl9vdXRwdXQpKHZvaWQgKmFkZHIsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90
IGxlbmd0aCwgdWludDhfdCB0b3MsIHVpbnQ4X3Qgc2V0X2RmKSwKLSAgICAgICAgICAgICB2b2lk
ICgqZGVidWdfcHJpbnRmKShjb25zdCBjaGFyICpmb3JtYXQsIC4uLikpCi17Ci0jaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKLQlXU0FEQVRBIHdzYURhdGE7Ci0KLQlpZiAoV1NBU3RhcnR1cChNQUtFV09SRCgyLDIp
LCAmd3NhRGF0YSkgIT0gMCkgewotCQlTQ1RQX1BSSU5URigiV1NBU3RhcnR1cCBmYWlsZWRcbiIp
OwotCQlleGl0ICgtMSk7Ci0JfQotI2VuZGlmCi0JSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxl
KCZhY2NlcHRfY29uZCk7Ci0JSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmYWNjZXB0X210eCk7
Ci0jZWxzZQotCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0cjsKLQotCXB0aHJlYWRfbXV0
ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOwotI2lmZGVmIElOVkFSSUFOVFMKLQlwdGhyZWFkX211
dGV4YXR0cl9zZXR0eXBlKCZtdXRleF9hdHRyLCBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spOwot
I2VuZGlmCi0JcHRocmVhZF9tdXRleF9pbml0KCZhY2NlcHRfbXR4LCAmbXV0ZXhfYXR0cik7Ci0J
cHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhfYXR0cik7Ci0JcHRocmVhZF9jb25kX2lu
aXQoJmFjY2VwdF9jb25kLCBOVUxMKTsKLSNlbmRpZgotCXNjdHBfaW5pdChwb3J0LCBjb25uX291
dHB1dCwgZGVidWdfcHJpbnRmKTsKLX0KLQotCi0vKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9r
ZXJuL3VpcGNfc29ja2J1Zi5jIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXyovCi0vKgot
ICogU29jYW50c2VuZG1vcmUgaW5kaWNhdGVzIHRoYXQgbm8gbW9yZSBkYXRhIHdpbGwgYmUgc2Vu
dCBvbiB0aGUgc29ja2V0OyBpdAotICogd291bGQgbm9ybWFsbHkgYmUgYXBwbGllZCB0byBhIHNv
Y2tldCB3aGVuIHRoZSB1c2VyIGluZm9ybXMgdGhlIHN5c3RlbQotICogdGhhdCBubyBtb3JlIGRh
dGEgaXMgdG8gYmUgc2VudCwgYnkgdGhlIHByb3RvY29sIGNvZGUgKGluIGNhc2UKLSAqIFBSVV9T
SFVURE9XTikuICBTb2NhbnRyY3Ztb3JlIGluZGljYXRlcyB0aGF0IG5vIG1vcmUgZGF0YSB3aWxs
IGJlCi0gKiByZWNlaXZlZCwgYW5kIHdpbGwgbm9ybWFsbHkgYmUgYXBwbGllZCB0byB0aGUgc29j
a2V0IGJ5IGEgcHJvdG9jb2wgd2hlbiBpdAotICogZGV0ZWN0cyB0aGF0IHRoZSBwZWVyIHdpbGwg
c2VuZCBubyBtb3JlIGRhdGEuICBEYXRhIHF1ZXVlZCBmb3IgcmVhZGluZyBpbgotICogdGhlIHNv
Y2tldCBtYXkgeWV0IGJlIHJlYWQuCi0gKi8KLQotdm9pZCBzb2NhbnRyY3Ztb3JlX2xvY2tlZChz
dHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlTT0NLQlVGX0xPQ0tfQVNTRVJUKCZzby0+c29fcmN2KTsK
LQlzby0+c29fcmN2LnNiX3N0YXRlIHw9IFNCU19DQU5UUkNWTU9SRTsKLQlzb3J3YWtldXBfbG9j
a2VkKHNvKTsKLX0KLQotdm9pZCBzb2NhbnRyY3Ztb3JlKHN0cnVjdCBzb2NrZXQgKnNvKQotewot
CVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7Ci0Jc29jYW50cmN2bW9yZV9sb2NrZWQoc28pOwot
fQotCi12b2lkCi1zb2NhbnRzZW5kbW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAqc28pCi17Ci0J
U09DS0JVRl9MT0NLX0FTU0VSVCgmc28tPnNvX3NuZCk7Ci0Jc28tPnNvX3NuZC5zYl9zdGF0ZSB8
PSBTQlNfQ0FOVFNFTkRNT1JFOwotCXNvd3dha2V1cF9sb2NrZWQoc28pOwotfQotCi12b2lkCi1z
b2NhbnRzZW5kbW9yZShzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlTT0NLQlVGX0xPQ0soJnNvLT5z
b19zbmQpOwotCXNvY2FudHNlbmRtb3JlX2xvY2tlZChzbyk7Ci19Ci0KLQotCi0vKiBUYWtlbiBm
cm9tICB1c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2J1Zi5jIGFuZCBjYWxsZWQgd2l0aGluIHNj
dHBfbG93ZXJfc29zZW5kLgotICovCi1pbnQKLXNid2FpdChzdHJ1Y3Qgc29ja2J1ZiAqc2IpCi17
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAvKiBfX1VzZXJzcGFjZV9fICovCi0KLQlTT0NL
QlVGX0xPQ0tfQVNTRVJUKHNiKTsKLQotCXNiLT5zYl9mbGFncyB8PSBTQl9XQUlUOwotI2lmIGRl
ZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFi
bGVDUygmKHNiLT5zYl9jb25kKSwgJihzYi0+c2JfbXR4KSwgSU5GSU5JVEUpKQotCQlyZXR1cm4g
MDsKLQllbHNlCi0JCXJldHVybiAtMTsKLSNlbHNlCi0JcmV0dXJuIChwdGhyZWFkX2NvbmRfd2Fp
dCgmKHNiLT5zYl9jb25kKSwgJihzYi0+c2JfbXR4KSkpOwotI2VuZGlmCi0KLSNlbHNlCi0JU09D
S0JVRl9MT0NLX0FTU0VSVChzYik7Ci0KLQlzYi0+c2JfZmxhZ3MgfD0gU0JfV0FJVDsKLQlyZXR1
cm4gKG1zbGVlcCgmc2ItPnNiX2NjLCAmc2ItPnNiX210eCwKLQkgICAgKHNiLT5zYl9mbGFncyAm
IFNCX05PSU5UUikgPyBQU09DSyA6IFBTT0NLIHwgUENBVENILCAic2J3YWl0IiwKLQkgICAgc2It
PnNiX3RpbWVvKSk7Ci0jZW5kaWYKLX0KLQotCi0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMv
a2Vybi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAq
Lwotc3RhdGljIHN0cnVjdCBzb2NrZXQgKgotc29hbGxvYyh2b2lkKQotewotCXN0cnVjdCBzb2Nr
ZXQgKnNvOwotCi0JLyoKLQkgKiBzb2FsbG9jKCkgc2V0cyBvZiBzb2NrZXQgbGF5ZXIgc3RhdGUg
Zm9yIGEgc29ja2V0LAotCSAqIGNhbGxlZCBvbmx5IGJ5IHNvY3JlYXRlKCkgYW5kIHNvbmV3Y29u
bigpLgotCSAqCi0JICogc29kZWFsbG9jKCkgdGVhcnMgZG93biBzb2NrZXQgbGF5ZXIgc3RhdGUg
Zm9yIGEgc29ja2V0LAotCSAqIGNhbGxlZCBvbmx5IGJ5IHNvZnJlZSgpIGFuZCBzb25ld2Nvbm4o
KS4KLQkgKiBfX1VzZXJzcGFjZV9fIFRPRE8gOiBNYWtlIHN1cmUgc28gaXMgcHJvcGVybHkgZGVh
bGxvY2F0ZWQKLQkgKiB3aGVuIHRlYXJpbmcgZG93biB0aGUgY29ubmVjdGlvbi4KLQkgKi8KLQot
CXNvID0gKHN0cnVjdCBzb2NrZXQgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrZXQpKTsKLQot
CWlmIChzbyA9PSBOVUxMKSB7Ci0JCXJldHVybiAoTlVMTCk7Ci0JfQotCW1lbXNldChzbywgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrZXQpKTsKLQotCS8qIF9fVXNlcnNwYWNlX18gSW5pdGlhbGl6aW5n
IHRoZSBzb2NrZXQgbG9ja3MgaGVyZSAqLwotCVNPQ0tCVUZfTE9DS19JTklUKCZzby0+c29fc25k
LCAic29fc25kIik7Ci0JU09DS0JVRl9MT0NLX0lOSVQoJnNvLT5zb19yY3YsICJzb19yY3YiKTsK
LQlTT0NLQlVGX0NPTkRfSU5JVCgmc28tPnNvX3NuZCk7Ci0JU09DS0JVRl9DT05EX0lOSVQoJnNv
LT5zb19yY3YpOwotCVNPQ0tfQ09ORF9JTklUKHNvKTsgLyogdGltZW9fY29uZCAqLwotCi0JLyog
X19Vc2Vyc3BhY2VfXyBBbnkgcmVmIGNvdW50aW5nIHJlcXVpcmVkIGhlcmU/IFdpbGwgd2UgaGF2
ZSBhbnkgdXNlIGZvciBhaW9qb2JxPwotCSAgIFdoYXQgYWJvdXQgZ2VuY250IGFuZCBudW1vcGVu
c29ja2V0cz8qLwotCVRBSUxRX0lOSVQoJnNvLT5zb19haW9qb2JxKTsKLQlyZXR1cm4gKHNvKTsK
LX0KLQotc3RhdGljIHZvaWQKLXNvZGVhbGxvYyhzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQotCUtB
U1NFUlQoc28tPnNvX2NvdW50ID09IDAsICgic29kZWFsbG9jKCk6IHNvX2NvdW50ICVkIiwgc28t
PnNvX2NvdW50KSk7Ci0JS0FTU0VSVChzby0+c29fcGNiID09IE5VTEwsICgic29kZWFsbG9jKCk6
IHNvX3BjYiAhPSBOVUxMIikpOwotCi0JU09DS0JVRl9DT05EX0RFU1RST1koJnNvLT5zb19zbmQp
OwotCVNPQ0tCVUZfQ09ORF9ERVNUUk9ZKCZzby0+c29fcmN2KTsKLQotCVNPQ0tfQ09ORF9ERVNU
Uk9ZKHNvKTsKLQotCVNPQ0tCVUZfTE9DS19ERVNUUk9ZKCZzby0+c29fc25kKTsKLQlTT0NLQlVG
X0xPQ0tfREVTVFJPWSgmc28tPnNvX3Jjdik7Ci0KLQlmcmVlKHNvKTsKLX0KLQotLyogVGFrZW4g
ZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9f
VXNlcnNwYWNlX18KLSAqLwotdm9pZAotc29mcmVlKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXN0
cnVjdCBzb2NrZXQgKmhlYWQ7Ci0KLQlBQ0NFUFRfTE9DS19BU1NFUlQoKTsKLQlTT0NLX0xPQ0tf
QVNTRVJUKHNvKTsKLQkvKiBTU19OT0ZEUkVGIHVuc2V0IGluIGFjY2VwdCBjYWxsLiAgdGhpcyBj
b25kaXRpb24gc2VlbXMgaXJyZWxldmVudAotCSAqICBmb3IgX19Vc2Vyc3BhY2VfXy4uLgotCSAq
LwotCWlmIChzby0+c29fY291bnQgIT0gMCB8fAotCSAgICAoc28tPnNvX3N0YXRlICYgU1NfUFJP
VE9SRUYpIHx8IChzby0+c29fcXN0YXRlICYgU1FfQ09NUCkpIHsKLQkJU09DS19VTkxPQ0soc28p
OwotCQlBQ0NFUFRfVU5MT0NLKCk7Ci0JCXJldHVybjsKLQl9Ci0JaGVhZCA9IHNvLT5zb19oZWFk
OwotCWlmIChoZWFkICE9IE5VTEwpIHsKLQkJS0FTU0VSVCgoc28tPnNvX3FzdGF0ZSAmIFNRX0NP
TVApICE9IDAgfHwKLQkJICAgIChzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSAhPSAwLAotCQkg
ICAgKCJzb2ZyZWU6IHNvX2hlYWQgIT0gTlVMTCwgYnV0IG5laXRoZXIgU1FfQ09NUCBub3IgIgot
CQkgICAgIlNRX0lOQ09NUCIpKTsKLQkJS0FTU0VSVCgoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVAp
ID09IDAgfHwKLQkJICAgIChzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSA9PSAwLAotCQkgICAg
KCJzb2ZyZWU6IHNvLT5zb19xc3RhdGUgaXMgU1FfQ09NUCBhbmQgYWxzbyBTUV9JTkNPTVAiKSk7
Ci0JCVRBSUxRX1JFTU9WRSgmaGVhZC0+c29faW5jb21wLCBzbywgc29fbGlzdCk7Ci0JCWhlYWQt
PnNvX2luY3FsZW4tLTsKLQkJc28tPnNvX3FzdGF0ZSAmPSB+U1FfSU5DT01QOwotCQlzby0+c29f
aGVhZCA9IE5VTEw7Ci0JfQotCUtBU1NFUlQoKHNvLT5zb19xc3RhdGUgJiBTUV9DT01QKSA9PSAw
ICYmCi0JICAgIChzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSA9PSAwLAotCSAgICAoInNvZnJl
ZTogc29faGVhZCA9PSBOVUxMLCBidXQgc3RpbGwgU1FfQ09NUCglZCkgb3IgU1FfSU5DT01QKCVk
KSIsCi0JICAgIHNvLT5zb19xc3RhdGUgJiBTUV9DT01QLCBzby0+c29fcXN0YXRlICYgU1FfSU5D
T01QKSk7Ci0JaWYgKHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19BQ0NFUFRDT05OKSB7Ci0JCUtB
U1NFUlQoKFRBSUxRX0VNUFRZKCZzby0+c29fY29tcCkpLCAoInNvZnJlZTogc29fY29tcCBwb3B1
bGF0ZWQiKSk7Ci0JCUtBU1NFUlQoKFRBSUxRX0VNUFRZKCZzby0+c29faW5jb21wKSksICgic29m
cmVlOiBzb19jb21wIHBvcHVsYXRlZCIpKTsKLQl9Ci0JU09DS19VTkxPQ0soc28pOwotCUFDQ0VQ
VF9VTkxPQ0soKTsKLQlzY3RwX2Nsb3NlKHNvKTsgLyogd2FzLi4uICAgIHNjdHBfZGV0YWNoKHNv
KTsgKi8KLQkvKgotCSAqIEZyb20gdGhpcyBwb2ludCBvbiwgd2UgYXNzdW1lIHRoYXQgbm8gb3Ro
ZXIgcmVmZXJlbmNlcyB0byB0aGlzCi0JICogc29ja2V0IGV4aXN0IGFueXdoZXJlIGVsc2UgaW4g
dGhlIHN0YWNrLiAgVGhlcmVmb3JlLCBubyBsb2NrcyBuZWVkCi0JICogdG8gYmUgYWNxdWlyZWQg
b3IgaGVsZC4KLQkgKgotCSAqIFdlIHVzZWQgdG8gZG8gYSBsb3Qgb2Ygc29ja2V0IGJ1ZmZlciBh
bmQgc29ja2V0IGxvY2tpbmcgaGVyZSwgYXMKLQkgKiB3ZWxsIGFzIGludm9rZSBzb3JmbHVzaCgp
IGFuZCBwZXJmb3JtIHdha2V1cHMuICBUaGUgZGlyZWN0IGNhbGwgdG8KLQkgKiBkb21fZGlzcG9z
ZSgpIGFuZCBzYnJlbGVhc2VfaW50ZXJuYWwoKSBhcmUgYW4gaW5saW5pbmcgb2Ygd2hhdCB3YXMK
LQkgKiBuZWNlc3NhcnkgZnJvbSBzb3JmbHVzaCgpLgotCSAqCi0JICogTm90aWNlIHRoYXQgdGhl
IHNvY2tldCBidWZmZXIgYW5kIGtxdWV1ZSBzdGF0ZSBhcmUgdG9ybiBkb3duCi0JICogYmVmb3Jl
IGNhbGxpbmcgcHJ1X2RldGFjaC4gIFRoaXMgbWVhbnMgdGhhdCBwcm90b2NvbHMgc2hvbGQgbm90
Ci0JICogYXNzdW1lIHRoZXkgY2FuIHBlcmZvcm0gc29ja2V0IHdha2V1cHMsIGV0YywgaW4gdGhl
aXIgZGV0YWNoIGNvZGUuCi0JICovCi0Jc29kZWFsbG9jKHNvKTsKLX0KLQotCi0KLS8qIFRha2Vu
IGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYyAqLwotdm9pZAotc29hYm9ydChzdHJ1
Y3Qgc29ja2V0ICpzbykKLXsKLSNpZiBkZWZpbmVkKElORVQ2KQotCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoSU5FVDYpCi0JaW5wID0gKHN0cnVjdCBzY3Rw
X2lucGNiICopc28tPnNvX3BjYjsKLQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpIHsKLQkJc2N0cDZfYWJvcnQoc28pOwotCX0gZWxzZSB7Ci0jaWYgZGVmaW5l
ZChJTkVUKQotCQlzY3RwX2Fib3J0KHNvKTsKLSNlbmRpZgotCX0KLSNlbGlmIGRlZmluZWQoSU5F
VCkKLQlzY3RwX2Fib3J0KHNvKTsKLSNlbmRpZgotCUFDQ0VQVF9MT0NLKCk7Ci0JU09DS19MT0NL
KHNvKTsKLQlzb2ZyZWUoc28pOwotfQotCi0KLS8qIFRha2VuIGZyb20gIHVzci9zcmMvc3lzL2tl
cm4vdWlwY19zb2NrZXQuYyBhbmQgY2FsbGVkIHdpdGhpbiBzY3RwX2Nvbm5lY3QgKHNjdHBfdXNy
cmVxLmMpLgotICogIFdlIHVzZSBzY3RwX2Nvbm5lY3QgZm9yIHNlbmRfb25lX2luaXRfcmVhbCBp
biBtczEuCi0gKi8KLXZvaWQKLXNvaXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKQotewot
Ci0JU09DS19MT0NLKHNvKTsKLQlzby0+c29fc3RhdGUgJj0gfihTU19JU0NPTk5FQ1RFRHxTU19J
U0RJU0NPTk5FQ1RJTkcpOwotCXNvLT5zb19zdGF0ZSB8PSBTU19JU0NPTk5FQ1RJTkc7Ci0JU09D
S19VTkxPQ0soc28pOwotfQotCi0vKiBUYWtlbiBmcm9tICB1c3Ivc3JjL3N5cy9rZXJuL3VpcGNf
c29ja2V0LmMgYW5kIGNhbGxlZCB3aXRoaW4gc2N0cF9kaXNjb25uZWN0IChzY3RwX3VzcnJlcS5j
KS4KLSAqICBUT0RPIERvIHdlIHVzZSBzY3RwX2Rpc2Nvbm5lY3Q/Ci0gKi8KLXZvaWQKLXNvaXNk
aXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCi0gICAgICAgIC8qCi0gICAgICAg
ICAqIE5vdGU6IFRoaXMgY29kZSBhc3N1bWVzIHRoYXQgU09DS19MT0NLKHNvKSBhbmQKLSAgICAg
ICAgICogU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KSBhcmUgdGhlIHNhbWUuCi0gICAgICAgICAq
LwotICAgICAgICBTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOwotICAgICAgICBzby0+c29fc3Rh
dGUgJj0gflNTX0lTQ09OTkVDVElORzsKLSAgICAgICAgc28tPnNvX3N0YXRlIHw9IFNTX0lTRElT
Q09OTkVDVElORzsKLSAgICAgICAgc28tPnNvX3Jjdi5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFJDVk1P
UkU7Ci0gICAgICAgIHNvcndha2V1cF9sb2NrZWQoc28pOwotICAgICAgICBTT0NLQlVGX0xPQ0so
JnNvLT5zb19zbmQpOwotICAgICAgICBzby0+c29fc25kLnNiX3N0YXRlIHw9IFNCU19DQU5UU0VO
RE1PUkU7Ci0gICAgICAgIHNvd3dha2V1cF9sb2NrZWQoc28pOwotICAgICAgICB3YWtldXAoImR1
bW15Iixzbyk7Ci0gICAgICAgIC8qIHJlcXVpcmVzIDIgYXJncyBidXQgdGhpcyB3YXMgaW4gb3Jp
ZyAqLwotICAgICAgICAvKiB3YWtldXAoJnNvLT5zb190aW1lbyk7ICovCi19Ci0KLQotLyogVGFr
ZW4gZnJvbSBzeXMva2Vybi9rZXJuX3N5bmNoLmMgYW5kCi0gICBtb2RpZmllZCBmb3IgX19Vc2Vy
c3BhY2VfXwotKi8KLQotLyoKLSAqIE1ha2UgYWxsIHRocmVhZHMgc2xlZXBpbmcgb24gdGhlIHNw
ZWNpZmllZCBpZGVudGlmaWVyIHJ1bm5hYmxlLgotICogQXNzb2NpYXRpbmcgd2FrZXVwIHdpdGgg
c29fdGltZW8gaWRlbnRpZmllciBhbmQgdGltZW9fY29uZAotICogY29uZGl0aW9uIHZhcmlhYmxl
LiBUT0RPLiBJZiB3ZSB1c2UgaXRlcmF0b3IgdGhyZWFkIHRoZW4gd2UgbmVlZCB0bwotICogbW9k
aWZ5IHdha2V1cCBzbyBpdCBjYW4gZGlzdGluZ3Vpc2ggYmV0d2VlbiBpdGVyYXRvciBpZGVudGlm
aWVyIGFuZAotICogdGltZW8gaWRlbnRpZmllci4KLSAqLwotdm9pZAotd2FrZXVwKGlkZW50LCBz
bykKLQl2b2lkICppZGVudDsKLQlzdHJ1Y3Qgc29ja2V0ICpzbzsKLXsKLQlTT0NLX0xPQ0soc28p
OwotI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JV2FrZUFsbENvbmRpdGlv
blZhcmlhYmxlKCYoc28pLT50aW1lb19jb25kKTsKLSNlbHNlCi0JcHRocmVhZF9jb25kX2Jyb2Fk
Y2FzdCgmKHNvKS0+dGltZW9fY29uZCk7Ci0jZW5kaWYKLQlTT0NLX1VOTE9DSyhzbyk7Ci19Ci0K
LQotLyoKLSAqIE1ha2UgYSB0aHJlYWQgc2xlZXBpbmcgb24gdGhlIHNwZWNpZmllZCBpZGVudGlm
aWVyIHJ1bm5hYmxlLgotICogTWF5IHdha2UgbW9yZSB0aGFuIG9uZSB0aHJlYWQgaWYgYSB0YXJn
ZXQgdGhyZWFkIGlzIGN1cnJlbnRseQotICogc3dhcHBlZCBvdXQuCi0gKi8KLXZvaWQKLXdha2V1
cF9vbmUodm9pZCAqaWRlbnQpCi17Ci0JLyogX19Vc2Vyc3BhY2VfXyBDaGVjazogV2UgYXJlIHVz
aW5nIGFjY2VwdF9jb25kIGZvciB3YWtldXBfb25lLgotCSAgSXQgc2VlbXMgdGhhdCB3YWtldXBf
b25lIGlzIG9ubHkgY2FsbGVkIHdpdGhpbgotCSAgc29pc2Nvbm5lY3RlZCgpIGFuZCBzb25ld2Nv
bm4oKSB3aXRoIGlkZW50ICZoZWFkLT5zb190aW1lbwotCSAgaGVhZCBpcyBzby0+c29faGVhZCwg
d2hpY2ggaXMgYmFjayBwb2ludGVyIHRvIGxpc3RlbiBzb2NrZXQKLQkgIFRoaXMgc2VlbXMgdG8g
aW5kaWNhdGUgdGhhdCB0aGUgdXNlIG9mIGFjY2VwdF9jb25kIGlzIGNvcnJlY3QKLQkgIHNpbmNl
IHNvY2tldCB3aGVyZSBhY2NlcHRzIG9jY3VyIGlzIHNvX2hlYWQgaW4gYWxsCi0JICBzdWJzaWRp
YXJ5IHNvY2tldHMuCi0JICovCi0JQUNDRVBUX0xPQ0soKTsKLSNpZiBkZWZpbmVkIChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQotCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQp
OwotI2Vsc2UKLQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCZhY2NlcHRfY29uZCk7Ci0jZW5kaWYK
LQlBQ0NFUFRfVU5MT0NLKCk7Ci19Ci0KLQotLyogQ2FsbGVkIHdpdGhpbiBzY3RwX3Byb2Nlc3Nf
Y29va2llX1tleGlzdGluZy9uZXddICovCi12b2lkCi1zb2lzY29ubmVjdGVkKHN0cnVjdCBzb2Nr
ZXQgKnNvKQotewotCXN0cnVjdCBzb2NrZXQgKmhlYWQ7Ci0KLQlBQ0NFUFRfTE9DSygpOwotCVNP
Q0tfTE9DSyhzbyk7Ci0Jc28tPnNvX3N0YXRlICY9IH4oU1NfSVNDT05ORUNUSU5HfFNTX0lTRElT
Q09OTkVDVElOR3xTU19JU0NPTkZJUk1JTkcpOwotCXNvLT5zb19zdGF0ZSB8PSBTU19JU0NPTk5F
Q1RFRDsKLQloZWFkID0gc28tPnNvX2hlYWQ7Ci0JaWYgKGhlYWQgIT0gTlVMTCAmJiAoc28tPnNv
X3FzdGF0ZSAmIFNRX0lOQ09NUCkpIHsKLQkJU09DS19VTkxPQ0soc28pOwotCQlUQUlMUV9SRU1P
VkUoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3QpOwotCQloZWFkLT5zb19pbmNxbGVuLS07
Ci0JCXNvLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsKLQkJVEFJTFFfSU5TRVJUX1RBSUwoJmhl
YWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsKLQkJaGVhZC0+c29fcWxlbisrOwotCQlzby0+c29f
cXN0YXRlIHw9IFNRX0NPTVA7Ci0JCUFDQ0VQVF9VTkxPQ0soKTsKLQkJc29yd2FrZXVwKGhlYWQp
OwotCQl3YWtldXBfb25lKCZoZWFkLT5zb190aW1lbyk7Ci0JCXJldHVybjsKLQl9Ci0JU09DS19V
TkxPQ0soc28pOwotCUFDQ0VQVF9VTkxPQ0soKTsKLQl3YWtldXAoJnNvLT5zb190aW1lbywgc28p
OwotCXNvcndha2V1cChzbyk7Ci0Jc293d2FrZXVwKHNvKTsKLQotfQotCi0vKiBjYWxsZWQgd2l0
aGluIHNjdHBfaGFuZGxlX2Nvb2tpZV9lY2hvICovCi0KLXN0cnVjdCBzb2NrZXQgKgotc29uZXdj
b25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGludCBjb25uc3RhdHVzKQotewotCXN0cnVjdCBzb2Nr
ZXQgKnNvOwotCWludCBvdmVyOwotCi0JQUNDRVBUX0xPQ0soKTsKLQlvdmVyID0gKGhlYWQtPnNv
X3FsZW4gPiAzICogaGVhZC0+c29fcWxpbWl0IC8gMik7Ci0JQUNDRVBUX1VOTE9DSygpOwotI2lm
ZGVmIFJFR1JFU1NJT04KLQlpZiAocmVncmVzc2lvbl9zb25ld2Nvbm5fZWFybHl0ZXN0ICYmIG92
ZXIpCi0jZWxzZQotCWlmIChvdmVyKQotI2VuZGlmCi0JCXJldHVybiAoTlVMTCk7Ci0Jc28gPSBz
b2FsbG9jKCk7Ci0JaWYgKHNvID09IE5VTEwpCi0JCXJldHVybiAoTlVMTCk7Ci0Jc28tPnNvX2hl
YWQgPSBoZWFkOwotCXNvLT5zb190eXBlID0gaGVhZC0+c29fdHlwZTsKLQlzby0+c29fb3B0aW9u
cyA9IGhlYWQtPnNvX29wdGlvbnMgJn4gU0NUUF9TT19BQ0NFUFRDT05OOwotCXNvLT5zb19saW5n
ZXIgPSBoZWFkLT5zb19saW5nZXI7Ci0Jc28tPnNvX3N0YXRlID0gaGVhZC0+c29fc3RhdGUgfCBT
U19OT0ZEUkVGOwotCXNvLT5zb19kb20gPSBoZWFkLT5zb19kb207Ci0jaWZkZWYgTUFDCi0JU09D
S19MT0NLKGhlYWQpOwotCW1hY19jcmVhdGVfc29ja2V0X2Zyb21fc29ja2V0KGhlYWQsIHNvKTsK
LQlTT0NLX1VOTE9DSyhoZWFkKTsKLSNlbmRpZgotCWlmIChzb3Jlc2VydmUoc28sIGhlYWQtPnNv
X3NuZC5zYl9oaXdhdCwgaGVhZC0+c29fcmN2LnNiX2hpd2F0KSkgewotCQlzb2RlYWxsb2Moc28p
OwotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQlzd2l0Y2ggKGhlYWQtPnNvX2RvbSkgewotI2lmZGVm
IElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCWlmIChzY3RwX2F0dGFjaChzbywgSVBQUk9UT19TQ1RQ
LCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7Ci0JCQlzb2RlYWxsb2Moc28pOwotCQkJcmV0dXJuIChO
VUxMKTsKLQkJfQotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVU
NjoKLQkJaWYgKHNjdHA2X2F0dGFjaChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJG
SUQpKSB7Ci0JCQlzb2RlYWxsb2Moc28pOwotCQkJcmV0dXJuIChOVUxMKTsKLQkJfQotCQlicmVh
azsKLSNlbmRpZgotCWNhc2UgQUZfQ09OTjoKLQkJaWYgKHNjdHBjb25uX2F0dGFjaChzbywgSVBQ
Uk9UT19TQ1RQLCBTQ1RQX0RFRkFVTFRfVlJGSUQpKSB7Ci0JCQlzb2RlYWxsb2Moc28pOwotCQkJ
cmV0dXJuIChOVUxMKTsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OgotCQlzb2RlYWxsb2Moc28p
OwotCQlyZXR1cm4gKE5VTEwpOwotCQlicmVhazsKLQl9Ci0Jc28tPnNvX3Jjdi5zYl9sb3dhdCA9
IGhlYWQtPnNvX3Jjdi5zYl9sb3dhdDsKLQlzby0+c29fc25kLnNiX2xvd2F0ID0gaGVhZC0+c29f
c25kLnNiX2xvd2F0OwotCXNvLT5zb19yY3Yuc2JfdGltZW8gPSBoZWFkLT5zb19yY3Yuc2JfdGlt
ZW87Ci0Jc28tPnNvX3NuZC5zYl90aW1lbyA9IGhlYWQtPnNvX3NuZC5zYl90aW1lbzsKLQlzby0+
c29fcmN2LnNiX2ZsYWdzIHw9IGhlYWQtPnNvX3Jjdi5zYl9mbGFncyAmIFNCX0FVVE9TSVpFOwot
CXNvLT5zb19zbmQuc2JfZmxhZ3MgfD0gaGVhZC0+c29fc25kLnNiX2ZsYWdzICYgU0JfQVVUT1NJ
WkU7Ci0Jc28tPnNvX3N0YXRlIHw9IGNvbm5zdGF0dXM7Ci0JQUNDRVBUX0xPQ0soKTsKLQlpZiAo
Y29ubnN0YXR1cykgewotCQlUQUlMUV9JTlNFUlRfVEFJTCgmaGVhZC0+c29fY29tcCwgc28sIHNv
X2xpc3QpOwotCQlzby0+c29fcXN0YXRlIHw9IFNRX0NPTVA7Ci0JCWhlYWQtPnNvX3FsZW4rKzsK
LQl9IGVsc2UgewotCQkvKgotCQkgKiBLZWVwIHJlbW92aW5nIHNvY2tldHMgZnJvbSB0aGUgaGVh
ZCB1bnRpbCB0aGVyZSdzIHJvb20gZm9yCi0JCSAqIHVzIHRvIGluc2VydCBvbiB0aGUgdGFpbC4g
IEluIHByZS1sb2NraW5nIHJldmlzaW9ucywgdGhpcwotCQkgKiB3YXMgYSBzaW1wbGUgaWYgKCks
IGJ1dCBhcyB3ZSBjb3VsZCBiZSByYWNpbmcgd2l0aCBvdGhlcgotCQkgKiB0aHJlYWRzIGFuZCBz
b2Fib3J0KCkgcmVxdWlyZXMgZHJvcHBpbmcgbG9ja3MsIHdlIG11c3QKLQkJICogbG9vcCB3YWl0
aW5nIGZvciB0aGUgY29uZGl0aW9uIHRvIGJlIHRydWUuCi0JCSAqLwotCQl3aGlsZSAoaGVhZC0+
c29faW5jcWxlbiA+IGhlYWQtPnNvX3FsaW1pdCkgewotCQkJc3RydWN0IHNvY2tldCAqc3A7Ci0J
CQlzcCA9IFRBSUxRX0ZJUlNUKCZoZWFkLT5zb19pbmNvbXApOwotCQkJVEFJTFFfUkVNT1ZFKCZo
ZWFkLT5zb19pbmNvbXAsIHNwLCBzb19saXN0KTsKLQkJCWhlYWQtPnNvX2luY3FsZW4tLTsKLQkJ
CXNwLT5zb19xc3RhdGUgJj0gflNRX0lOQ09NUDsKLQkJCXNwLT5zb19oZWFkID0gTlVMTDsKLQkJ
CUFDQ0VQVF9VTkxPQ0soKTsKLQkJCXNvYWJvcnQoc3ApOwotCQkJQUNDRVBUX0xPQ0soKTsKLQkJ
fQotCQlUQUlMUV9JTlNFUlRfVEFJTCgmaGVhZC0+c29faW5jb21wLCBzbywgc29fbGlzdCk7Ci0J
CXNvLT5zb19xc3RhdGUgfD0gU1FfSU5DT01QOwotCQloZWFkLT5zb19pbmNxbGVuKys7Ci0JfQot
CUFDQ0VQVF9VTkxPQ0soKTsKLQlpZiAoY29ubnN0YXR1cykgewotCQlzb3J3YWtldXAoaGVhZCk7
Ci0JCXdha2V1cF9vbmUoJmhlYWQtPnNvX3RpbWVvKTsKLQl9Ci0JcmV0dXJuIChzbyk7Ci0KLX0K
LQotLyogRnJvbSAvc3JjL3N5cy9zeXMvc3lzcHJvdG8uaCAqLwotc3RydWN0IHNjdHBfZ2VuZXJp
Y19zZW5kbXNnX2FyZ3MgewotCWludCBzZDsKLQljYWRkcl90IG1zZzsKLQlpbnQgbWxlbjsKLQlj
YWRkcl90IHRvOwotCXNvY2tsZW5fdCB0b2xlbjsgIC8qIHdhcyBfX3NvY2tsZW5fdCAqLwotCXN0
cnVjdCBzY3RwX3NuZHJjdmluZm8gKiBzaW5mbzsKLQlpbnQgZmxhZ3M7Ci19OwotCi1zdHJ1Y3Qg
c2N0cF9nZW5lcmljX3JlY3Ztc2dfYXJncyB7Ci0gICAgICAgIGludCBzZDsKLSAgICAgICAgc3Ry
dWN0IGlvdmVjICppb3Y7Ci0gICAgICAgIGludCBpb3ZsZW47Ci0gICAgICAgIHN0cnVjdCBzb2Nr
YWRkciAqZnJvbTsKLSAgICAgICAgc29ja2xlbl90ICpmcm9tbGVuYWRkcjsgLyogd2FzIF9fc29j
a2xlbl90ICovCi0gICAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvOwotICAgICAg
ICBpbnQgKm1zZ19mbGFnczsKLX07Ci0KLQotIC8qCi0gICBTb3VyY2U6IC9zcmMvc3lzL2dudS9m
cy94ZnMvRnJlZUJTRC94ZnNfaW9jdGwuYwotICovCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQKLWNv
cHlfdG9fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgewotCW1lbWNweShk
c3QsIHNyYywgbGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50Ci1j
b3B5X2Zyb21fdXNlcih2b2lkICpkc3QsIHZvaWQgKnNyYywgc2l6ZV90IGxlbikgewotCW1lbWNw
eShkc3QsIHNyYywgbGVuKTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSBSZWZlcmVuY2VzOgotIHNy
Yy9zeXMvZGV2L2xtYy9pZl9sbWMuaDoKLSBzcmMvc3lzL3Bvd2VycGMvcG93ZXJwYy9jb3B5aW5v
dXQuYwotIHNyYy9zeXMvc3lzL3N5c3RtLmgKLSovCi0jIGRlZmluZSBjb3B5aW4odSwgaywgbGVu
KQljb3B5X2Zyb21fdXNlcihrLCB1LCBsZW4pCi0KLS8qIFJlZmVyZW5jZXM6Ci0gICBzcmMvc3lz
L3Bvd2VycGMvcG93ZXJwYy9jb3B5aW5vdXQuYwotICAgc3JjL3N5cy9zeXMvc3lzdG0uaAotKi8K
LSMgZGVmaW5lIGNvcHlvdXQoaywgdSwgbGVuKQljb3B5X3RvX3VzZXIodSwgaywgbGVuKQotCi0K
LS8qIGNvcHlpbmlvdiBkZWZpbml0aW9uIGNvcGllZC9tb2RpZmllZCBmcm9tIHNyYy9zeXMva2Vy
bi9rZXJuX3N1YnIuYyAqLwotaW50Ci1jb3B5aW5pb3Yoc3RydWN0IGlvdmVjICppb3ZwLCB1X2lu
dCBpb3ZjbnQsIHN0cnVjdCBpb3ZlYyAqKmlvdiwgaW50IGVycm9yKQotewotCXVfaW50IGlvdmxl
bjsKLQotCSppb3YgPSBOVUxMOwotCWlmIChpb3ZjbnQgPiBVSU9fTUFYSU9WKQotCQlyZXR1cm4g
KGVycm9yKTsKLQlpb3ZsZW4gPSBpb3ZjbnQgKiBzaXplb2YgKHN0cnVjdCBpb3ZlYyk7Ci0JKmlv
diA9IG1hbGxvYyhpb3ZsZW4pOyAvKiwgTV9JT1YsIE1fV0FJVE9LKTsgKi8KLQllcnJvciA9IGNv
cHlpbihpb3ZwLCAqaW92LCBpb3ZsZW4pOwotCWlmIChlcnJvcikgewotCQlmcmVlKCppb3YpOyAv
KiwgTV9JT1YpOyAqLwotCQkqaW92ID0gTlVMTDsKLQl9Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0K
LS8qIChfX1VzZXJzcGFjZV9fKSB2ZXJzaW9uIG9mIHVpb21vdmUgKi8KLWludAotdWlvbW92ZSh2
b2lkICpjcCwgaW50IG4sIHN0cnVjdCB1aW8gKnVpbykKLXsKLQlzdHJ1Y3QgaW92ZWMgKmlvdjsK
LQlzaXplX3QgY250OwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAoKHVpby0+dWlvX3J3ICE9IFVJ
T19SRUFEKSAmJgotCSAgICAodWlvLT51aW9fcncgIT0gVUlPX1dSSVRFKSkgewotCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JfQotCi0Jd2hpbGUgKG4gPiAwICYmIHVpby0+dWlvX3Jlc2lkKSB7Ci0JCWlv
diA9IHVpby0+dWlvX2lvdjsKLQkJY250ID0gaW92LT5pb3ZfbGVuOwotCQlpZiAoY250ID09IDAp
IHsKLQkJCXVpby0+dWlvX2lvdisrOwotCQkJdWlvLT51aW9faW92Y250LS07Ci0JCQljb250aW51
ZTsKLQkJfQotCQlpZiAoY250ID4gKHNpemVfdCluKQotCQkJY250ID0gbjsKLQotCQlzd2l0Y2gg
KHVpby0+dWlvX3NlZ2ZsZykgewotCi0JCWNhc2UgVUlPX1VTRVJTUEFDRToKLQkJCWlmICh1aW8t
PnVpb19ydyA9PSBVSU9fUkVBRCkKLQkJCQllcnJvciA9IGNvcHlvdXQoY3AsIGlvdi0+aW92X2Jh
c2UsIGNudCk7Ci0JCQllbHNlCi0JCQkJZXJyb3IgPSBjb3B5aW4oaW92LT5pb3ZfYmFzZSwgY3As
IGNudCk7Ci0JCQlpZiAoZXJyb3IpCi0JCQkJZ290byBvdXQ7Ci0JCQlicmVhazsKLQotCQljYXNl
IFVJT19TWVNTUEFDRToKLQkJCWlmICh1aW8tPnVpb19ydyA9PSBVSU9fUkVBRCkKLQkJCQltZW1j
cHkoaW92LT5pb3ZfYmFzZSwgY3AsIGNudCk7Ci0JCQllbHNlCi0JCQkJbWVtY3B5KGNwLCBpb3Yt
Pmlvdl9iYXNlLCBjbnQpOwotCQkJYnJlYWs7Ci0JCX0KLQkJaW92LT5pb3ZfYmFzZSA9IChjaGFy
ICopaW92LT5pb3ZfYmFzZSArIGNudDsKLQkJaW92LT5pb3ZfbGVuIC09IGNudDsKLQkJdWlvLT51
aW9fcmVzaWQgLT0gY250OwotCQl1aW8tPnVpb19vZmZzZXQgKz0gKG9mZl90KWNudDsKLQkJY3Ag
PSAoY2hhciAqKWNwICsgY250OwotCQluIC09IChpbnQpY250OwotCX0KLW91dDoKLQlyZXR1cm4g
KGVycm9yKTsKLX0KLQotCi0vKiBTb3VyY2U6IHNyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMg
Ki8KLWludAotZ2V0c29ja2FkZHIoc3RydWN0IHNvY2thZGRyICoqbmFtcCwgY2FkZHJfdCB1YWRk
ciwgc2l6ZV90IGxlbikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOwotCWludCBlcnJvcjsKLQot
CWlmIChsZW4gPiBTT0NLX01BWEFERFJMRU4pCi0JCXJldHVybiAoRU5BTUVUT09MT05HKTsKLQlp
ZiAobGVuIDwgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyLCBzYV9kYXRhKSkKLQkJcmV0dXJuIChF
SU5WQUwpOwotCU1BTExPQyhzYSwgc3RydWN0IHNvY2thZGRyICosIGxlbiwgTV9TT05BTUUsIE1f
V0FJVE9LKTsKLQllcnJvciA9IGNvcHlpbih1YWRkciwgc2EsIGxlbik7Ci0JaWYgKGVycm9yKSB7
Ci0JCUZSRUUoc2EsIE1fU09OQU1FKTsKLQl9IGVsc2UgewotI2lmZGVmIEhBVkVfU0FfTEVOCi0J
CXNhLT5zYV9sZW4gPSBsZW47Ci0jZW5kaWYKLQkJKm5hbXAgPSBzYTsKLQl9Ci0JcmV0dXJuIChl
cnJvcik7Ci19Ci0KLWludAotdXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICB2b2lkICpvcHRp
b25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbik7Ci0KLXNjdHBfYXNzb2NfdAotdXNyc2N0
cF9nZXRhc3NvY2lkKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17
Ci0Jc3RydWN0IHNjdHBfcGFkZHJpbmZvIHNwOwotCXNvY2tsZW5fdCBzaXo7Ci0jaWZuZGVmIEhB
VkVfU0FfTEVOCi0Jc2l6ZV90IHNhX2xlbjsKLSNlbmRpZgotCi0JLyogRmlyc3QgZ2V0IHRoZSBh
c3NvYyBpZCAqLwotCXNpeiA9IHNpemVvZihzcCk7Ci0JbWVtc2V0KCZzcCwgMCwgc2l6ZW9mKHNw
KSk7Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQltZW1jcHkoKGNhZGRyX3QpJnNwLnNwaW5mb19hZGRy
ZXNzLCBzYSwgc2EtPnNhX2xlbik7Ci0jZWxzZQotCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewot
I2lmZGVmIElORVQKLQljYXNlIEFGX0lORVQ6Ci0JCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pOwotCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JY2FzZSBBRl9JTkVU
NjoKLQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCQlicmVhazsKLSNl
bmRpZgotCWNhc2UgQUZfQ09OTjoKLQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJc2FfbGVuID0gMDsKLQkJYnJlYWs7Ci0JfQot
CW1lbWNweSgoY2FkZHJfdCkmc3Auc3BpbmZvX2FkZHJlc3MsIHNhLCBzYV9sZW4pOwotI2VuZGlm
Ci0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzb2NrLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BF
RVJfQUREUl9JTkZPLCAmc3AsICZzaXopICE9IDApIHsKLQkJLyogV2UgZGVwZW5kIG9uIHRoZSBm
YWN0IHRoYXQgMCBjYW4gbmV2ZXIgYmUgcmV0dXJuZWQgKi8KLQkJcmV0dXJuICgoc2N0cF9hc3Nv
Y190KSAwKTsKLQl9Ci0JcmV0dXJuIChzcC5zcGluZm9fYXNzb2NfaWQpOwotfQotCi0KLS8qIFRh
a2VuIGZyb20gIC9zcmMvbGliL2xpYmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKLSAqIGFuZCBtb2Rp
ZmllZCBmb3IgX19Vc2Vyc3BhY2VfXwotICogY2FsbGluZyBzY3RwX2dlbmVyaWNfc2VuZG1zZyBm
cm9tIHRoaXMgZnVuY3Rpb24KLSAqLwotc3NpemVfdAotdXNlcnNwYWNlX3NjdHBfc2VuZG1zZyhz
dHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiwKLSAgICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IHNvY2thZGRyICp0bywKLSAgICAgICAgICAgICAgICAgICAgICAgc29ja2xl
bl90IHRvbGVuLAotICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3QgcHBpZCwKLSAgICAg
ICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAg
ICB1X2ludDE2X3Qgc3RyZWFtX25vLAotICAgICAgICAgICAgICAgICAgICAgICB1X2ludDMyX3Qg
dGltZXRvbGl2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IGNvbnRleHQpCi17
Ci0Jc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzbmRyY3ZpbmZvLCAqc2luZm8gPSAmc25kcmN2aW5m
bzsKLQlzdHJ1Y3QgdWlvIGF1aW87Ci0Jc3RydWN0IGlvdmVjIGlvdlsxXTsKLQotCW1lbXNldChz
aW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKLQlzaW5mby0+c2luZm9f
cHBpZCA9IHBwaWQ7Ci0Jc2luZm8tPnNpbmZvX2ZsYWdzID0gZmxhZ3M7Ci0Jc2luZm8tPnNpbmZv
X3N0cmVhbSA9IHN0cmVhbV9ubzsKLQlzaW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IHRpbWV0b2xp
dmU7Ci0Jc2luZm8tPnNpbmZvX2NvbnRleHQgPSBjb250ZXh0OwotCXNpbmZvLT5zaW5mb19hc3Nv
Y19pZCA9IDA7Ci0KLQotCS8qIFBlcmZvcm0gZXJyb3IgY2hlY2tzIG9uIGRlc3RpbmF0aW9uICh0
bykgKi8KLQlpZiAodG9sZW4gPiBTT0NLX01BWEFERFJMRU4pIHsKLQkJZXJybm8gPSBFTkFNRVRP
T0xPTkc7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoKHRvbGVuID4gMCkgJiYKLQkgICAgKCh0
byA9PSBOVUxMKSB8fCAodG9sZW4gPCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc29ja2FkZHIp
KSkpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoZGF0YSA9
PSBOVUxMKSB7Ci0JCWVycm5vID0gRUZBVUxUOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogQWRk
aW5nIHRoZSBmb2xsb3dpbmcgYXMgcGFydCBvZiBkZWZlbnNpdmUgcHJvZ3JhbW1pbmcsIGluIGNh
c2UgdGhlIGFwcGxpY2F0aW9uCi0JICAgZG9lcyBub3QgZG8gaXQgd2hlbiBwcmVwYXJpbmcgdGhl
IGRlc3RpbmF0aW9uIGFkZHJlc3MuKi8KLSNpZmRlZiBIQVZFX1NBX0xFTgotCWlmICh0byAhPSBO
VUxMKSB7Ci0JCXRvLT5zYV9sZW4gPSB0b2xlbjsKLQl9Ci0jZW5kaWYKLQotCWlvdlswXS5pb3Zf
YmFzZSA9IChjYWRkcl90KWRhdGE7Ci0JaW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVp
b19pb3YgPSAgaW92OwotCWF1aW8udWlvX2lvdmNudCA9IDE7Ci0JYXVpby51aW9fc2VnZmxnID0g
VUlPX1VTRVJTUEFDRTsKLQlhdWlvLnVpb19ydyA9IFVJT19XUklURTsKLQlhdWlvLnVpb19vZmZz
ZXQgPSAwOwkJCS8qIFhYWCAqLwotCWF1aW8udWlvX3Jlc2lkID0gbGVuOwotCWVycm5vID0gc2N0
cF9sb3dlcl9zb3NlbmQoc28sIHRvLCAmYXVpbywgTlVMTCwgTlVMTCwgMCwgc2luZm8pOwotCWlm
IChlcnJubyA9PSAwKSB7Ci0JCXJldHVybiAobGVuIC0gYXVpby51aW9fcmVzaWQpOwotCX0gZWxz
ZSB7Ci0JCXJldHVybiAoLTEpOwotCX0KLX0KLQotCi1zc2l6ZV90Ci11c3JzY3RwX3NlbmR2KHN0
cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAotICAgICAg
ICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAot
ICAgICAgICAgICAgICBpbnQgYWRkcmNudCwKLSAgICAgICAgICAgICAgdm9pZCAqaW5mbywKLSAg
ICAgICAgICAgICAgc29ja2xlbl90IGluZm9sZW4sCi0gICAgICAgICAgICAgIHVuc2lnbmVkIGlu
dCBpbmZvdHlwZSwKLSAgICAgICAgICAgICAgaW50IGZsYWdzKQotewotCXN0cnVjdCBzY3RwX3Nu
ZHJjdmluZm8gc2luZm87Ci0Jc3RydWN0IHVpbyBhdWlvOwotCXN0cnVjdCBpb3ZlYyBpb3ZbMV07
Ci0JaW50IHVzZV9zaW5mbzsKLQlzY3RwX2Fzc29jX3QgKmFzc29jX2lkOwotCi0JaWYgKHNvID09
IE5VTEwpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlmIChkYXRh
ID09IE5VTEwpIHsKLQkJZXJybm8gPSBFRkFVTFQ7Ci0JCXJldHVybiAoLTEpOwotCX0KLQltZW1z
ZXQoJnNpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykpOwotCWFzc29jX2lk
ID0gTlVMTDsKLQl1c2Vfc2luZm8gPSAwOwotCXN3aXRjaCAoaW5mb3R5cGUpIHsKLQljYXNlIFND
VFBfU0VORFZfTk9JTkZPOgotCQlpZiAoKGluZm9sZW4gIT0gMCkgfHwgKGluZm8gIT0gTlVMTCkp
IHsKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJYnJlYWs7Ci0J
Y2FzZSBTQ1RQX1NFTkRWX1NORElORk86Ci0JCWlmICgoaW5mbyA9PSBOVUxMKSB8fCAoaW5mb2xl
biAhPSBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbykpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsK
LQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCXNpbmZvLnNpbmZvX3N0cmVhbSA9ICgoc3RydWN0IHNj
dHBfc25kaW5mbyAqKWluZm8pLT5zbmRfc2lkOwotCQlzaW5mby5zaW5mb19mbGFncyA9ICgoc3Ry
dWN0IHNjdHBfc25kaW5mbyAqKWluZm8pLT5zbmRfZmxhZ3M7Ci0JCXNpbmZvLnNpbmZvX3BwaWQg
PSAoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25kX3BwaWQ7Ci0JCXNpbmZvLnNpbmZv
X2NvbnRleHQgPSAoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25kX2NvbnRleHQ7Ci0J
CXNpbmZvLnNpbmZvX2Fzc29jX2lkID0gKChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNu
ZF9hc3NvY19pZDsKLQkJYXNzb2NfaWQgPSAmKCgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWluZm8p
LT5zbmRfYXNzb2NfaWQpOwotCQl1c2Vfc2luZm8gPSAxOwotCQlicmVhazsKLQljYXNlIFNDVFBf
U0VORFZfUFJJTkZPOgotCQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3ByaW5mbykpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAo
LTEpOwotCQl9Ci0JCXNpbmZvLnNpbmZvX3N0cmVhbSA9IDA7Ci0JCXNpbmZvLnNpbmZvX2ZsYWdz
ID0gUFJfU0NUUF9QT0xJQ1koKChzdHJ1Y3Qgc2N0cF9wcmluZm8gKilpbmZvKS0+cHJfcG9saWN5
KTsKLQkJc2luZm8uc2luZm9fdGltZXRvbGl2ZSA9ICgoc3RydWN0IHNjdHBfcHJpbmZvICopaW5m
byktPnByX3ZhbHVlOwotCQl1c2Vfc2luZm8gPSAxOwotCQlicmVhazsKLQljYXNlIFNDVFBfU0VO
RFZfQVVUSElORk86Ci0JCWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQljYXNlIFND
VFBfU0VORFZfU1BBOgotCQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4gIT0gc2l6ZW9m
KHN0cnVjdCBzY3RwX3NlbmR2X3NwYSkpKSB7Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVy
biAoLTEpOwotCQl9Ci0JCWlmICgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5k
dl9mbGFncyAmIFNDVFBfU0VORF9TTkRJTkZPX1ZBTElEKSB7Ci0JCQlzaW5mby5zaW5mb19zdHJl
YW0gPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9zbmRpbmZvLnNuZF9z
aWQ7Ci0JCQlzaW5mby5zaW5mb19mbGFncyA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5m
byktPnNlbmR2X3NuZGluZm8uc25kX2ZsYWdzOwotCQkJc2luZm8uc2luZm9fcHBpZCA9ICgoc3Ry
dWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX3BwaWQ7Ci0JCQlz
aW5mby5zaW5mb19jb250ZXh0ID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2Vu
ZHZfc25kaW5mby5zbmRfY29udGV4dDsKLQkJCXNpbmZvLnNpbmZvX2Fzc29jX2lkID0gKChzdHJ1
Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfYXNzb2NfaWQ7Ci0J
CQlhc3NvY19pZCA9ICYoKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25k
aW5mby5zbmRfYXNzb2NfaWQpOwotCQl9IGVsc2UgewotCQkJc2luZm8uc2luZm9fZmxhZ3MgPSAw
OwotCQkJc2luZm8uc2luZm9fc3RyZWFtID0gMDsKLQkJfQotCQlpZiAoKChzdHJ1Y3Qgc2N0cF9z
ZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfZmxhZ3MgJiBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElEKSB7
Ci0JCQlzaW5mby5zaW5mb19mbGFncyB8PSBQUl9TQ1RQX1BPTElDWSgoKHN0cnVjdCBzY3RwX3Nl
bmR2X3NwYSAqKWluZm8pLT5zZW5kdl9wcmluZm8ucHJfcG9saWN5KTsKLQkJCXNpbmZvLnNpbmZv
X3RpbWV0b2xpdmUgPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9wcmlu
Zm8ucHJfdmFsdWU7Ci0JCX0KLQkJaWYgKCgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbykt
PnNlbmR2X2ZsYWdzICYgU0NUUF9TRU5EX0FVVEhJTkZPX1ZBTElEKSB7Ci0JCQllcnJubyA9IEVJ
TlZBTDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JCXVzZV9zaW5mbyA9IDE7Ci0JCWJyZWFrOwot
CWRlZmF1bHQ6Ci0JCWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQkvKiBQ
ZXJmb3JtIGVycm9yIGNoZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8pICovCi0JaWYgKGFkZHJjbnQg
PiAxKSB7Ci0JCWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0KLQlpb3ZbMF0u
aW92X2Jhc2UgPSAoY2FkZHJfdClkYXRhOwotCWlvdlswXS5pb3ZfbGVuID0gbGVuOwotCi0JYXVp
by51aW9faW92ID0gIGlvdjsKLQlhdWlvLnVpb19pb3ZjbnQgPSAxOwotCWF1aW8udWlvX3NlZ2Zs
ZyA9IFVJT19VU0VSU1BBQ0U7Ci0JYXVpby51aW9fcncgPSBVSU9fV1JJVEU7Ci0JYXVpby51aW9f
b2Zmc2V0ID0gMDsJCQkvKiBYWFggKi8KLQlhdWlvLnVpb19yZXNpZCA9IGxlbjsKLQllcnJubyA9
IHNjdHBfbG93ZXJfc29zZW5kKHNvLCB0bywgJmF1aW8sIE5VTEwsIE5VTEwsIGZsYWdzLCB1c2Vf
c2luZm8gPyAmc2luZm8gOiBOVUxMKTsKLQlpZiAoZXJybm8gPT0gMCkgewotCQlpZiAoKHRvICE9
IE5VTEwpICYmIChhc3NvY19pZCAhPSBOVUxMKSkgewotCQkJKmFzc29jX2lkID0gdXNyc2N0cF9n
ZXRhc3NvY2lkKHNvLCB0byk7Ci0JCX0KLQkJcmV0dXJuIChsZW4gLSBhdWlvLnVpb19yZXNpZCk7
Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotfQotCi0KLXNzaXplX3QKLXVzZXJzcGFj
ZV9zY3RwX3NlbmRtYnVmKHN0cnVjdCBzb2NrZXQgKnNvLAotICAgIHN0cnVjdCBtYnVmKiBtYnVm
ZGF0YSwKLSAgICBzaXplX3QgbGVuLAotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCi0gICAgc29j
a2xlbl90IHRvbGVuLAotICAgIHVfaW50MzJfdCBwcGlkLAotICAgIHVfaW50MzJfdCBmbGFncywK
LSAgICB1X2ludDE2X3Qgc3RyZWFtX25vLAotICAgIHVfaW50MzJfdCB0aW1ldG9saXZlLAotICAg
IHVfaW50MzJfdCBjb250ZXh0KQotewotCi0gICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzbmRy
Y3ZpbmZvLCAqc2luZm8gPSAmc25kcmN2aW5mbzsKLSAgICAvKiAgICBzdHJ1Y3QgdWlvIGF1aW87
Ci0gICAgICAgICAgc3RydWN0IGlvdmVjIGlvdlsxXTsgKi8KLSAgICBpbnQgZXJyb3IgPSAwOwot
ICAgIGludCB1ZmxhZ3MgPSAwOwotICAgIHNzaXplX3QgcmV0dmFsOwotCi0gICAgc2luZm8tPnNp
bmZvX3BwaWQgPSBwcGlkOwotICAgIHNpbmZvLT5zaW5mb19mbGFncyA9IGZsYWdzOwotICAgIHNp
bmZvLT5zaW5mb19zdHJlYW0gPSBzdHJlYW1fbm87Ci0gICAgc2luZm8tPnNpbmZvX3RpbWV0b2xp
dmUgPSB0aW1ldG9saXZlOwotICAgIHNpbmZvLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsKLSAg
ICBzaW5mby0+c2luZm9fYXNzb2NfaWQgPSAwOwotCi0gICAgLyogUGVyZm9ybSBlcnJvciBjaGVj
a3Mgb24gZGVzdGluYXRpb24gKHRvKSAqLwotICAgIGlmICh0b2xlbiA+IFNPQ0tfTUFYQUREUkxF
Til7Ci0gICAgICAgIGVycm9yID0gKEVOQU1FVE9PTE9ORyk7Ci0gICAgICAgIGdvdG8gc2VuZG1z
Z19yZXR1cm47Ci0gICAgfQotICAgIGlmICh0b2xlbiA8IChzb2NrbGVuX3Qpb2Zmc2V0b2Yoc3Ry
dWN0IHNvY2thZGRyLCBzYV9kYXRhKSl7Ci0gICAgICAgIGVycm9yID0gKEVJTlZBTCk7Ci0gICAg
ICAgIGdvdG8gc2VuZG1zZ19yZXR1cm47Ci0gICAgfQotICAgIC8qIEFkZGluZyB0aGUgZm9sbG93
aW5nIGFzIHBhcnQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBpbiBjYXNlIHRoZSBhcHBsaWNh
dGlvbgotICAgICAgIGRvZXMgbm90IGRvIGl0IHdoZW4gcHJlcGFyaW5nIHRoZSBkZXN0aW5hdGlv
biBhZGRyZXNzLiovCi0jaWZkZWYgSEFWRV9TQV9MRU4KLSAgICB0by0+c2FfbGVuID0gdG9sZW47
Ci0jZW5kaWYKLQotICAgIGVycm9yID0gc2N0cF9sb3dlcl9zb3NlbmQoc28sIHRvLCBOVUxMLyp1
aW8qLywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3QgbWJ1ZiAqKW1idWZk
YXRhLCAoc3RydWN0IG1idWYgKilOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dWZsYWdzLCBzaW5mbyk7Ci1zZW5kbXNnX3JldHVybjoKLSAgICAvKiBUT0RPOiBOZWVkcyBhIGNv
bmRpdGlvbiBmb3Igbm9uLWJsb2NraW5nIHdoZW4gZXJyb3IgaXMgRVdPVUxEQkxPQ0sgKi8KLSAg
ICBpZiAoMCA9PSBlcnJvcikKLSAgICAgICAgcmV0dmFsID0gbGVuOwotICAgIGVsc2UgaWYgKGVy
cm9yID09IEVXT1VMREJMT0NLKSB7Ci0gICAgICAgIGVycm5vID0gRVdPVUxEQkxPQ0s7Ci0gICAg
ICAgIHJldHZhbCA9IC0xOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIFNDVFBfUFJJTlRGKCIlczog
ZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKLSAgICAgICAgZXJybm8gPSBlcnJvcjsK
LSAgICAgICAgcmV0dmFsID0gLTE7Ci0gICAgfQotICAgIHJldHVybiAocmV0dmFsKTsKLQotfQot
Ci0KLS8qIHRha2VuIGZyb20gdXNyLmxpYi9zY3RwX3N5c19jYWxscy5jIGFuZCBuZWVkZWQgaGVy
ZSAqLwotI2RlZmluZSAgICAgICAgU0NUUF9TTUFMTF9JT1ZFQ19TSVpFIDIKLQotLyogVGFrZW4g
ZnJvbSAgL3NyYy9saWIvbGliYy9uZXQvc2N0cF9zeXNfY2FsbHMuYwotICogYW5kIG1vZGlmaWVk
IGZvciBfX1VzZXJzcGFjZV9fCi0gKiBjYWxsaW5nIHNjdHBfZ2VuZXJpY19yZWN2bXNnIGZyb20g
dGhpcyBmdW5jdGlvbgotICovCi1zc2l6ZV90Ci11c2Vyc3BhY2Vfc2N0cF9yZWN2bXNnKHN0cnVj
dCBzb2NrZXQgKnNvLAotICAgIHZvaWQgKmRidWYsCi0gICAgc2l6ZV90IGxlbiwKLSAgICBzdHJ1
Y3Qgc29ja2FkZHIgKmZyb20sCi0gICAgc29ja2xlbl90ICpmcm9tbGVucCwKLSAgICBzdHJ1Y3Qg
c2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKLSAgICBpbnQgKm1zZ19mbGFncykKLXsKLQlzdHJ1Y3Qg
dWlvIGF1aW87Ci0Jc3RydWN0IGlvdmVjIGlvdltTQ1RQX1NNQUxMX0lPVkVDX1NJWkVdOwotCXN0
cnVjdCBpb3ZlYyAqdGlvdjsKLQlpbnQgaW92bGVuID0gMTsKLQlpbnQgZXJyb3IgPSAwOwotCXNz
aXplX3QgdWxlbjsKLQlpbnQgaTsKLQlzb2NrbGVuX3QgZnJvbWxlbjsKLQotCWlvdlswXS5pb3Zf
YmFzZSA9IGRidWY7Ci0JaW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVpb19pb3YgPSBp
b3Y7Ci0JYXVpby51aW9faW92Y250ID0gaW92bGVuOwotCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19V
U0VSU1BBQ0U7Ci0JYXVpby51aW9fcncgPSBVSU9fUkVBRDsKLQlhdWlvLnVpb19vZmZzZXQgPSAw
OwkJCS8qIFhYWCAqLwotCWF1aW8udWlvX3Jlc2lkID0gMDsKLQl0aW92ID0gaW92OwotCWZvciAo
aSA9IDA7IGkgPGlvdmxlbjsgaSsrLCB0aW92KyspIHsKLQkJaWYgKChhdWlvLnVpb19yZXNpZCAr
PSB0aW92LT5pb3ZfbGVuKSA8IDApIHsKLQkJCWVycm9yID0gRUlOVkFMOwotCQkJU0NUUF9QUklO
VEYoIiVzOiBlcnJvciA9ICVkXG4iLCBfX2Z1bmNfXywgZXJyb3IpOwotCQkJcmV0dXJuICgtMSk7
Ci0JCX0KLQl9Ci0JdWxlbiA9IGF1aW8udWlvX3Jlc2lkOwotCWlmIChmcm9tbGVucCAhPSBOVUxM
KSB7Ci0JCWZyb21sZW4gPSAqZnJvbWxlbnA7Ci0JfSBlbHNlIHsKLQkJZnJvbWxlbiA9IDA7Ci0J
fQotCWVycm9yID0gc2N0cF9zb3JlY3Ztc2coc28sICZhdWlvLCAoc3RydWN0IG1idWYgKiopTlVM
TCwKLQkJICAgIGZyb20sIGZyb21sZW4sIG1zZ19mbGFncywKLQkJICAgIChzdHJ1Y3Qgc2N0cF9z
bmRyY3ZpbmZvICopc2luZm8sIDEpOwotCi0JaWYgKGVycm9yKSB7Ci0JCWlmICgoYXVpby51aW9f
cmVzaWQgIT0gdWxlbikgJiYKLQkJICAgIChlcnJvciA9PSBFSU5UUiB8fAotI2lmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX05ldEJTRCkKLQkJICAgICBlcnJvciA9PSBFUkVTVEFSVCB8fAotI2Vu
ZGlmCi0JCSAgICAgZXJyb3IgPT0gRVdPVUxEQkxPQ0spKSB7Ci0JCQllcnJvciA9IDA7Ci0JCX0K
LQl9Ci0JaWYgKChmcm9tbGVucCAhPSBOVUxMKSAmJiAoZnJvbWxlbiA+IDApICYmIChmcm9tICE9
IE5VTEwpKSB7Ci0JCXN3aXRjaCAoZnJvbS0+c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVU
KQotCQljYXNlIEFGX0lORVQ6Ci0JCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5lZChJTkVUNikKLQkJY2FzZSBBRl9J
TkVUNjoKLQkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCWJy
ZWFrOwotI2VuZGlmCi0JCWNhc2UgQUZfQ09OTjoKLQkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfY29ubik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCSpmcm9tbGVucCA9
IDA7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoKmZyb21sZW5wID4gZnJvbWxlbikgewotCQkJKmZy
b21sZW5wID0gZnJvbWxlbjsKLQkJfQotCX0KLQlpZiAoZXJyb3IgPT0gMCkgewotCQkvKiByZWFk
eSByZXR1cm4gdmFsdWUgKi8KLQkJcmV0dXJuICh1bGVuIC0gYXVpby51aW9fcmVzaWQpOwotCX0g
ZWxzZSB7Ci0JCVNDVFBfUFJJTlRGKCIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9y
KTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotfQotCi1zc2l6ZV90Ci11c3JzY3RwX3JlY3Z2KHN0cnVj
dCBzb2NrZXQgKnNvLAotICAgIHZvaWQgKmRidWYsCi0gICAgc2l6ZV90IGxlbiwKLSAgICBzdHJ1
Y3Qgc29ja2FkZHIgKmZyb20sCi0gICAgc29ja2xlbl90ICpmcm9tbGVucCwKLSAgICB2b2lkICpp
bmZvLAotICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKLSAgICB1bnNpZ25lZCBpbnQgKmluZm90eXBl
LAotICAgIGludCAqbXNnX2ZsYWdzKQotewotCXN0cnVjdCB1aW8gYXVpbzsKLQlzdHJ1Y3QgaW92
ZWMgaW92W1NDVFBfU01BTExfSU9WRUNfU0laRV07Ci0Jc3RydWN0IGlvdmVjICp0aW92OwotCWlu
dCBpb3ZsZW4gPSAxOwotCXNzaXplX3QgdWxlbjsKLQlpbnQgaTsKLQlzb2NrbGVuX3QgZnJvbWxl
bjsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvICpyY3Y7Ci0Jc3RydWN0IHNjdHBfcmVjdnZfcm4gKnJu
OwotCXN0cnVjdCBzY3RwX2V4dHJjdmluZm8gc2VpbmZvOwotCi0JaWYgKHNvID09IE5VTEwpIHsK
LQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlvdlswXS5pb3ZfYmFzZSA9
IGRidWY7Ci0JaW92WzBdLmlvdl9sZW4gPSBsZW47Ci0KLQlhdWlvLnVpb19pb3YgPSBpb3Y7Ci0J
YXVpby51aW9faW92Y250ID0gaW92bGVuOwotCWF1aW8udWlvX3NlZ2ZsZyA9IFVJT19VU0VSU1BB
Q0U7Ci0JYXVpby51aW9fcncgPSBVSU9fUkVBRDsKLQlhdWlvLnVpb19vZmZzZXQgPSAwOwkJCS8q
IFhYWCAqLwotCWF1aW8udWlvX3Jlc2lkID0gMDsKLQl0aW92ID0gaW92OwotCWZvciAoaSA9IDA7
IGkgPGlvdmxlbjsgaSsrLCB0aW92KyspIHsKLQkJaWYgKChhdWlvLnVpb19yZXNpZCArPSB0aW92
LT5pb3ZfbGVuKSA8IDApIHsKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0J
CX0KLQl9Ci0JdWxlbiA9IGF1aW8udWlvX3Jlc2lkOwotCWlmIChmcm9tbGVucCAhPSBOVUxMKSB7
Ci0JCWZyb21sZW4gPSAqZnJvbWxlbnA7Ci0JfSBlbHNlIHsKLQkJZnJvbWxlbiA9IDA7Ci0JfQot
CWVycm5vID0gc2N0cF9zb3JlY3Ztc2coc28sICZhdWlvLCAoc3RydWN0IG1idWYgKiopTlVMTCwK
LQkJICAgIGZyb20sIGZyb21sZW4sIG1zZ19mbGFncywKLQkJICAgIChzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvICopJnNlaW5mbywgMSk7Ci0JaWYgKGVycm5vKSB7Ci0JCWlmICgoYXVpby51aW9fcmVz
aWQgIT0gdWxlbikgJiYKLQkJICAgIChlcnJubyA9PSBFSU5UUiB8fAotI2lmICFkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX05ldEJTRCkKLQkJICAgICBlcnJubyA9PSBFUkVTVEFSVCB8fAotI2VuZGlm
Ci0JCSAgICAgZXJybm8gPT0gRVdPVUxEQkxPQ0spKSB7Ci0JCQllcnJubyA9IDA7Ci0JCX0KLQl9
Ci0JaWYgKCgqbXNnX2ZsYWdzICYgTVNHX05PVElGSUNBVElPTikgPT0gMCkgewotCQlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOwotCi0JCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19w
Y2I7Ci0JCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhU
SU5GTykgJiYKLQkJICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JF
Q1ZSQ1ZJTkZPKSAmJgotCQkgICAgKmluZm9sZW4gPj0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0
IHNjdHBfcmVjdnZfcm4pICYmCi0JCSAgICBzZWluZm8uc3JlaW5mb19uZXh0X2ZsYWdzICYgU0NU
UF9ORVhUX01TR19BVkFJTCkgewotCQkJcm4gPSAoc3RydWN0IHNjdHBfcmVjdnZfcm4gKilpbmZv
OwotCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2X3NpZCA9IHNlaW5mby5zaW5mb19zdHJlYW07Ci0J
CQlybi0+cmVjdnZfcmN2aW5mby5yY3Zfc3NuID0gc2VpbmZvLnNpbmZvX3NzbjsKLQkJCXJuLT5y
ZWN2dl9yY3ZpbmZvLnJjdl9mbGFncyA9IHNlaW5mby5zaW5mb19mbGFnczsKLQkJCXJuLT5yZWN2
dl9yY3ZpbmZvLnJjdl9wcGlkID0gc2VpbmZvLnNpbmZvX3BwaWQ7Ci0JCQlybi0+cmVjdnZfcmN2
aW5mby5yY3ZfY29udGV4dCA9IHNlaW5mby5zaW5mb19jb250ZXh0OwotCQkJcm4tPnJlY3Z2X3Jj
dmluZm8ucmN2X3RzbiA9IHNlaW5mby5zaW5mb190c247Ci0JCQlybi0+cmVjdnZfcmN2aW5mby5y
Y3ZfY3VtdHNuID0gc2VpbmZvLnNpbmZvX2N1bXRzbjsKLQkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJj
dl9hc3NvY19pZCA9IHNlaW5mby5zaW5mb19hc3NvY19pZDsKLQkJCXJuLT5yZWN2dl9ueHRpbmZv
Lm54dF9zaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0X3N0cmVhbTsKLQkJCXJuLT5yZWN2dl9ueHRp
bmZvLm54dF9mbGFncyA9IDA7Ci0JCQlpZiAoc2VpbmZvLnNyZWluZm9fbmV4dF9mbGFncyAmIFND
VFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEKSB7Ci0JCQkJcm4tPnJlY3Z2X254dGluZm8ubnh0X2Zs
YWdzIHw9IFNDVFBfVU5PUkRFUkVEOwotCQkJfQotCQkJaWYgKHNlaW5mby5zcmVpbmZvX25leHRf
ZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0lTX05PVElGSUNBVElPTikgewotCQkJCXJuLT5yZWN2dl9u
eHRpbmZvLm54dF9mbGFncyB8PSBTQ1RQX05PVElGSUNBVElPTjsKLQkJCX0KLQkJCWlmIChzZWlu
Zm8uc3JlaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhUX01TR19JU0NPTVBMRVRFKSB7Ci0JCQkJ
cm4tPnJlY3Z2X254dGluZm8ubnh0X2ZsYWdzIHw9IFNDVFBfQ09NUExFVEU7Ci0JCQl9Ci0JCQly
bi0+cmVjdnZfbnh0aW5mby5ueHRfcHBpZCA9IHNlaW5mby5zcmVpbmZvX25leHRfcHBpZDsKLQkJ
CXJuLT5yZWN2dl9ueHRpbmZvLm54dF9sZW5ndGggPSBzZWluZm8uc3JlaW5mb19uZXh0X2xlbmd0
aDsKLQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9hc3NvY19pZCA9IHNlaW5mby5zcmVpbmZvX25l
eHRfYWlkOwotCQkJKmluZm9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9yZWN2
dl9ybik7Ci0JCQkqaW5mb3R5cGUgPSBTQ1RQX1JFQ1ZWX1JOOwotCQl9IGVsc2UgaWYgKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgotCQkgICAg
ICAgICAgICppbmZvbGVuID49IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8p
KSB7Ci0JCQlyY3YgPSAoc3RydWN0IHNjdHBfcmN2aW5mbyAqKWluZm87Ci0JCQlyY3YtPnJjdl9z
aWQgPSBzZWluZm8uc2luZm9fc3RyZWFtOwotCQkJcmN2LT5yY3Zfc3NuID0gc2VpbmZvLnNpbmZv
X3NzbjsKLQkJCXJjdi0+cmN2X2ZsYWdzID0gc2VpbmZvLnNpbmZvX2ZsYWdzOwotCQkJcmN2LT5y
Y3ZfcHBpZCA9IHNlaW5mby5zaW5mb19wcGlkOwotCQkJcmN2LT5yY3ZfY29udGV4dCA9IHNlaW5m
by5zaW5mb19jb250ZXh0OwotCQkJcmN2LT5yY3ZfdHNuID0gc2VpbmZvLnNpbmZvX3RzbjsKLQkJ
CXJjdi0+cmN2X2N1bXRzbiA9IHNlaW5mby5zaW5mb19jdW10c247Ci0JCQlyY3YtPnJjdl9hc3Nv
Y19pZCA9IHNlaW5mby5zaW5mb19hc3NvY19pZDsKLQkJCSppbmZvbGVuID0gKHNvY2tsZW5fdClz
aXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbyk7Ci0JCQkqaW5mb3R5cGUgPSBTQ1RQX1JFQ1ZWX1JD
VklORk87Ci0JCX0gZWxzZSB7Ci0JCQkqaW5mb3R5cGUgPSBTQ1RQX1JFQ1ZWX05PSU5GTzsKLQkJ
CSppbmZvbGVuID0gMDsKLQkJfQotCX0KLQlpZiAoKGZyb21sZW5wICE9IE5VTEwpICYmIChmcm9t
bGVuID4gMCkgJiYgKGZyb20gIT0gTlVMTCkpIHsKLQkJc3dpdGNoIChmcm9tLT5zYV9mYW1pbHkp
IHsKLSNpZiBkZWZpbmVkKElORVQpCi0JCWNhc2UgQUZfSU5FVDoKLQkJCSpmcm9tbGVucCA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZiBkZWZpbmVk
KElORVQ2KQotCQljYXNlIEFGX0lORVQ2OgotCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbjYpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05OOgotCQkJKmZy
b21sZW5wID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKLQkJCWJyZWFrOwotCQlkZWZh
dWx0OgotCQkJKmZyb21sZW5wID0gMDsKLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgqZnJvbWxlbnAg
PiBmcm9tbGVuKSB7Ci0JCQkqZnJvbWxlbnAgPSBmcm9tbGVuOwotCQl9Ci0JfQotCWlmIChlcnJu
byA9PSAwKSB7Ci0JCS8qIHJlYWR5IHJldHVybiB2YWx1ZSAqLwotCQlyZXR1cm4gKHVsZW4gLSBh
dWlvLnVpb19yZXNpZCk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgtMSk7Ci0JfQotfQotCi0KLQot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vy
bi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqIHNv
Y3JlYXRlIHJldHVybnMgYSBzb2NrZXQuICBUaGUgc29ja2V0IHNob3VsZCBiZQotICogY2xvc2Vk
IHdpdGggc29jbG9zZSgpLgotICovCi1pbnQKLXNvY3JlYXRlKGludCBkb20sIHN0cnVjdCBzb2Nr
ZXQgKiphc28sIGludCB0eXBlLCBpbnQgcHJvdG8pCi17Ci0Jc3RydWN0IHNvY2tldCAqc287Ci0J
aW50IGVycm9yOwotCi0JaWYgKChkb20gIT0gQUZfQ09OTikgJiYgKGRvbSAhPSBBRl9JTkVUKSAm
JiAoZG9tICE9IEFGX0lORVQ2KSkgewotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JfQotCWlmICgodHlw
ZSAhPSBTT0NLX1NUUkVBTSkgJiYgKHR5cGUgIT0gU09DS19TRVFQQUNLRVQpKSB7Ci0JCXJldHVy
biAoRUlOVkFMKTsKLQl9Ci0JaWYgKHByb3RvICE9IElQUFJPVE9fU0NUUCkgewotCQlyZXR1cm4g
KEVJTlZBTCk7Ci0JfQotCi0Jc28gPSBzb2FsbG9jKCk7Ci0JaWYgKHNvID09IE5VTEwpIHsKLQkJ
cmV0dXJuIChFTk9CVUZTKTsKLQl9Ci0KLQkvKgotCSAqIHNvX2luY29tcCByZXByZXNlbnRzIGEg
cXVldWUgb2YgY29ubmVjdGlvbnMgdGhhdAotCSAqIG11c3QgYmUgY29tcGxldGVkIGF0IHByb3Rv
Y29sIGxldmVsIGJlZm9yZSBiZWluZwotCSAqIHJldHVybmVkLiBzb19jb21wIGZpZWxkIGhlYWRz
IGEgbGlzdCBvZiBzb2NrZXRzCi0JICogdGhhdCBhcmUgcmVhZHkgdG8gYmUgcmV0dXJuZWQgdG8g
dGhlIGxpc3RlbmluZyBwcm9jZXNzCi0JICpfX1VzZXJzcGFjZV9fIFRoZXNlIHF1ZXVlcyBhcmUg
YmVpbmcgdXNlZCBhdCBhIG51bWJlciBvZiBwbGFjZXMgbGlrZSBhY2NlcHQgZXRjLgotCSAqLwot
CVRBSUxRX0lOSVQoJnNvLT5zb19pbmNvbXApOwotCVRBSUxRX0lOSVQoJnNvLT5zb19jb21wKTsK
LQlzby0+c29fdHlwZSA9IHR5cGU7Ci0Jc28tPnNvX2NvdW50ID0gMTsKLQlzby0+c29fZG9tID0g
ZG9tOwotCS8qCi0JICogQXV0by1zaXppbmcgb2Ygc29ja2V0IGJ1ZmZlcnMgaXMgbWFuYWdlZCBi
eSB0aGUgcHJvdG9jb2xzIGFuZAotCSAqIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBtdXN0IGJlIHNl
dCBpbiB0aGUgcHJ1X2F0dGFjaCBmdW5jdGlvbi4KLQkgKiBGb3IgX19Vc2Vyc3BhY2VfXyBUaGUg
cHJ1X2F0dGFjaCBmdW5jdGlvbiBpbiB0aGlzIGNhc2UgaXMgc2N0cF9hdHRhY2guCi0JICovCi0J
c3dpdGNoIChkb20pIHsKLSNpZiBkZWZpbmVkKElORVQpCi0JY2FzZSBBRl9JTkVUOgotCQllcnJv
ciA9IHNjdHBfYXR0YWNoKHNvLCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJYnJlYWs7
Ci0jZW5kaWYKLSNpZiBkZWZpbmVkKElORVQ2KQotCWNhc2UgQUZfSU5FVDY6Ci0JCWVycm9yID0g
c2N0cDZfYXR0YWNoKHNvLCBwcm90bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJYnJlYWs7Ci0j
ZW5kaWYKLQljYXNlIEFGX0NPTk46Ci0JCWVycm9yID0gc2N0cGNvbm5fYXR0YWNoKHNvLCBwcm90
bywgU0NUUF9ERUZBVUxUX1ZSRklEKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZXJyb3IgPSBF
QUZOT1NVUFBPUlQ7Ci0JCWJyZWFrOwotCX0KLQlpZiAoZXJyb3IpIHsKLQkJS0FTU0VSVChzby0+
c29fY291bnQgPT0gMSwgKCJzb2NyZWF0ZTogc29fY291bnQgJWQiLCBzby0+c29fY291bnQpKTsK
LQkJc28tPnNvX2NvdW50ID0gMDsKLQkJc29kZWFsbG9jKHNvKTsKLQkJcmV0dXJuIChlcnJvcik7
Ci0JfQotCSphc28gPSBzbzsKLQlyZXR1cm4gKDApOwotfQotI2Vsc2UKLS8qIFRoZSBrZXJuZWwg
dmVyc2lvbiBmb3IgcmVmZXJlbmNlIGlzIGJlbG93LiBUaGUgI2Vsc2UKLSAgIHNob3VsZCBiZSBy
ZW1vdmVkIG9uY2UgdGhlIF9fVXNlcnNwYWNlX18KLSAgIHZlcnNpb24gaXMgdGVzdGVkLgotICog
c29jcmVhdGUgcmV0dXJucyBhIHNvY2tldCB3aXRoIGEgcmVmIGNvdW50IG9mIDEuICBUaGUgc29j
a2V0IHNob3VsZCBiZQotICogY2xvc2VkIHdpdGggc29jbG9zZSgpLgotICovCi1pbnQKLXNvY3Jl
YXRlKGludCBkb20sIHN0cnVjdCBzb2NrZXQgKiphc28sIGludCB0eXBlLCBpbnQgcHJvdG8sCi0g
ICAgc3RydWN0IHVjcmVkICpjcmVkLCBzdHJ1Y3QgdGhyZWFkICp0ZCkKLXsKLQlzdHJ1Y3QgcHJv
dG9zdyAqcHJwOwotCXN0cnVjdCBzb2NrZXQgKnNvOwotCWludCBlcnJvcjsKLQotCWlmIChwcm90
bykKLQkJcHJwID0gcGZmaW5kcHJvdG8oZG9tLCBwcm90bywgdHlwZSk7Ci0JZWxzZQotCQlwcnAg
PSBwZmZpbmR0eXBlKGRvbSwgdHlwZSk7Ci0KLQlpZiAocHJwID09IE5VTEwgfHwgcHJwLT5wcl91
c3JyZXFzLT5wcnVfYXR0YWNoID09IE5VTEwgfHwKLQkgICAgcHJwLT5wcl91c3JyZXFzLT5wcnVf
YXR0YWNoID09IHBydV9hdHRhY2hfbm90c3VwcCkKLQkJcmV0dXJuIChFUFJPVE9OT1NVUFBPUlQp
OwotCi0JaWYgKGphaWxlZChjcmVkKSAmJiBqYWlsX3NvY2tldF91bml4aXByb3V0ZV9vbmx5ICYm
Ci0JICAgIHBycC0+cHJfZG9tYWluLT5kb21fZmFtaWx5ICE9IFBGX0xPQ0FMICYmCi0JICAgIHBy
cC0+cHJfZG9tYWluLT5kb21fZmFtaWx5ICE9IFBGX0lORVQgJiYKLQkgICAgcHJwLT5wcl9kb21h
aW4tPmRvbV9mYW1pbHkgIT0gUEZfUk9VVEUpIHsKLQkJcmV0dXJuIChFUFJPVE9OT1NVUFBPUlQp
OwotCX0KLQotCWlmIChwcnAtPnByX3R5cGUgIT0gdHlwZSkKLQkJcmV0dXJuIChFUFJPVE9UWVBF
KTsKLQlzbyA9IHNvYWxsb2MoKTsKLQlpZiAoc28gPT0gTlVMTCkKLQkJcmV0dXJuIChFTk9CVUZT
KTsKLQotCVRBSUxRX0lOSVQoJnNvLT5zb19pbmNvbXApOwotCVRBSUxRX0lOSVQoJnNvLT5zb19j
b21wKTsKLQlzby0+c29fdHlwZSA9IHR5cGU7Ci0Jc28tPnNvX2NyZWQgPSBjcmhvbGQoY3JlZCk7
Ci0Jc28tPnNvX3Byb3RvID0gcHJwOwotI2lmZGVmIE1BQwotCW1hY19jcmVhdGVfc29ja2V0KGNy
ZWQsIHNvKTsKLSNlbmRpZgotCWtubGlzdF9pbml0KCZzby0+c29fcmN2LnNiX3NlbC5zaV9ub3Rl
LCBTT0NLQlVGX01UWCgmc28tPnNvX3JjdiksCi0JICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCWtu
bGlzdF9pbml0KCZzby0+c29fc25kLnNiX3NlbC5zaV9ub3RlLCBTT0NLQlVGX01UWCgmc28tPnNv
X3NuZCksCi0JICAgIE5VTEwsIE5VTEwsIE5VTEwpOwotCXNvLT5zb19jb3VudCA9IDE7Ci0JLyoK
LQkgKiBBdXRvLXNpemluZyBvZiBzb2NrZXQgYnVmZmVycyBpcyBtYW5hZ2VkIGJ5IHRoZSBwcm90
b2NvbHMgYW5kCi0JICogdGhlIGFwcHJvcHJpYXRlIGZsYWdzIG11c3QgYmUgc2V0IGluIHRoZSBw
cnVfYXR0YWNoIGZ1bmN0aW9uLgotCSAqLwotCWVycm9yID0gKCpwcnAtPnByX3VzcnJlcXMtPnBy
dV9hdHRhY2gpKHNvLCBwcm90bywgdGQpOwotCWlmIChlcnJvcikgewotCQlLQVNTRVJUKHNvLT5z
b19jb3VudCA9PSAxLCAoInNvY3JlYXRlOiBzb19jb3VudCAlZCIsCi0JCSAgICBzby0+c29fY291
bnQpKTsKLQkJc28tPnNvX2NvdW50ID0gMDsKLQkJc29kZWFsbG9jKHNvKTsKLQkJcmV0dXJuIChl
cnJvcik7Ci0JfQotCSphc28gPSBzbzsKLQlyZXR1cm4gKDApOwotfQotI2VuZGlmCi0KLQotCi0K
LS8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCi0gKiBhbmQgbW9k
aWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqIFJlbW92aW5nIHN0cnVjdCB0aHJlYWQgdGQuCi0g
Ki8KLXN0cnVjdCBzb2NrZXQgKgotdXNlcnNwYWNlX3NvY2tldChpbnQgZG9tYWluLCBpbnQgdHlw
ZSwgaW50IHByb3RvY29sKQotewotCXN0cnVjdCBzb2NrZXQgKnNvID0gTlVMTDsKLQotCWVycm5v
ID0gc29jcmVhdGUoZG9tYWluLCAmc28sIHR5cGUsIHByb3RvY29sKTsKLQlpZiAoZXJybm8pIHsK
LQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JLyoKLQkgKiBUaGUgb3JpZ2luYWwgc29ja2V0IGNhbGwg
cmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLgotCSAqIHRkLT50ZF9yZXR2YWxbMF0gPSBm
ZC4KLQkgKiBXZSBhcmUgcmV0dXJuaW5nIHN0cnVjdCBzb2NrZXQgKnNvLgotCSAqLwotCXJldHVy
biAoc28pOwotfQotCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNjdHBfc29ja2V0KGludCBkb21haW4s
IGludCB0eXBlLCBpbnQgcHJvdG9jb2wsCi0JICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVj
dCBzb2NrZXQgKnNvY2ssIHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNj
dHBfcmN2aW5mbywgaW50IGZsYWdzLCB2b2lkICp1bHBfaW5mbyksCi0JICAgICAgIGludCAoKnNl
bmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUpLAotCSAgICAgICB1
aW50MzJfdCBzYl90aHJlc2hvbGQsCi0JICAgICAgIHZvaWQgKnVscF9pbmZvKQotewotCXN0cnVj
dCBzb2NrZXQgKnNvOwotCi0JaWYgKChwcm90b2NvbCA9PSBJUFBST1RPX1NDVFApICYmIChTQ1RQ
X0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSkgewotCQllcnJubyA9IEVQUk9U
T05PU1VQUE9SVDsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JaWYgKChyZWNlaXZlX2NiID09IE5V
TEwpICYmCi0JICAgICgoc2VuZF9jYiAhPSBOVUxMKSB8fCAoc2JfdGhyZXNob2xkICE9IDApIHx8
ICh1bHBfaW5mbyAhPSBOVUxMKSkpIHsKLQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoTlVM
TCk7Ci0JfQotCWlmICgoZG9tYWluID09IEFGX0NPTk4pICYmIChTQ1RQX0JBU0VfVkFSKGNvbm5f
b3V0cHV0KSA9PSBOVUxMKSkgewotCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JZXJybm8gPSBzb2NyZWF0ZShkb21haW4sICZzbywgdHlwZSwgcHJvdG9jb2wp
OwotCWlmIChlcnJubykgewotCQlyZXR1cm4gKE5VTEwpOwotCX0KLQkvKgotCSAqIFRoZSBvcmln
aW5hbCBzb2NrZXQgY2FsbCByZXR1cm5zIHRoZSBmaWxlIGRlc2NyaXB0b3IgZmQuCi0JICogdGQt
PnRkX3JldHZhbFswXSA9IGZkLgotCSAqIFdlIGFyZSByZXR1cm5pbmcgc3RydWN0IHNvY2tldCAq
c28uCi0JICovCi0JcmVnaXN0ZXJfcmVjdl9jYihzbywgcmVjZWl2ZV9jYik7Ci0JcmVnaXN0ZXJf
c2VuZF9jYihzbywgc2JfdGhyZXNob2xkLCBzZW5kX2NiKTsKLQlyZWdpc3Rlcl91bHBfaW5mbyhz
bywgdWxwX2luZm8pOwotCXJldHVybiAoc28pOwotfQotCi0KLXVfbG9uZwlzYl9tYXggPSBTQl9N
QVg7Ci11X2xvbmcgc2JfbWF4X2FkaiA9Ci0gICAgICAgU0JfTUFYICogTUNMQllURVMgLyAoTVNJ
WkUgKyBNQ0xCWVRFUyk7IC8qIGFkanVzdGVkIHNiX21heCAqLwotCi1zdGF0aWMJdV9sb25nIHNi
X2VmZmljaWVuY3kgPSA4OwkvKiBwYXJhbWV0ZXIgZm9yIHNicmVzZXJ2ZSgpICovCi0KLS8qCi0g
KiBBbGxvdCBtYnVmcyB0byBhIHNvY2tidWYuICBBdHRlbXB0IHRvIHNjYWxlIG1ibWF4IHNvIHRo
YXQgbWJjbnQgZG9lc24ndAotICogYmVjb21lIGxpbWl0aW5nIGlmIGJ1ZmZlcmluZyBlZmZpY2ll
bmN5IGlzIG5lYXIgdGhlIG5vcm1hbCBjYXNlLgotICovCi1pbnQKLXNicmVzZXJ2ZV9sb2NrZWQo
c3RydWN0IHNvY2tidWYgKnNiLCB1X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvKQotewotCVNP
Q0tCVUZfTE9DS19BU1NFUlQoc2IpOwotCXNiLT5zYl9tYm1heCA9ICh1X2ludCltaW4oY2MgKiBz
Yl9lZmZpY2llbmN5LCBzYl9tYXgpOwotCXNiLT5zYl9oaXdhdCA9ICh1X2ludCljYzsKLQlpZiAo
c2ItPnNiX2xvd2F0ID4gKGludClzYi0+c2JfaGl3YXQpCi0JCXNiLT5zYl9sb3dhdCA9IChpbnQp
c2ItPnNiX2hpd2F0OwotCXJldHVybiAoMSk7Ci19Ci0KLXN0YXRpYyBpbnQKLXNicmVzZXJ2ZShz
dHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfbG9uZyBjYywgc3RydWN0IHNvY2tldCAqc28pCi17Ci0JaW50
IGVycm9yOwotCi0JU09DS0JVRl9MT0NLKHNiKTsKLQllcnJvciA9IHNicmVzZXJ2ZV9sb2NrZWQo
c2IsIGNjLCBzbyk7Ci0JU09DS0JVRl9VTkxPQ0soc2IpOwotCXJldHVybiAoZXJyb3IpOwotfQot
Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotaW50Ci1zb3Jlc2VydmUoc3RydWN0IHNvY2tl
dCAqc28sIHVfbG9uZyBzbmRjYywgdV9sb25nIHJjdmNjKQotewotCVNPQ0tCVUZfTE9DSygmc28t
PnNvX3NuZCk7Ci0JU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKLQlzby0+c29fc25kLnNiX2hp
d2F0ID0gKHVpbnQzMl90KXNuZGNjOwotCXNvLT5zb19yY3Yuc2JfaGl3YXQgPSAodWludDMyX3Qp
cmN2Y2M7Ci0KLQlpZiAoc2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3NuZCwgc25kY2MsIHNvKSA9
PSAwKSB7Ci0JCWdvdG8gYmFkOwotCX0KLQlpZiAoc2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3Jj
diwgcmN2Y2MsIHNvKSA9PSAwKSB7Ci0JCWdvdG8gYmFkOwotCX0KLQlpZiAoc28tPnNvX3Jjdi5z
Yl9sb3dhdCA9PSAwKQotCQlzby0+c29fcmN2LnNiX2xvd2F0ID0gMTsKLQlpZiAoc28tPnNvX3Nu
ZC5zYl9sb3dhdCA9PSAwKQotCQlzby0+c29fc25kLnNiX2xvd2F0ID0gTUNMQllURVM7Ci0JaWYg
KHNvLT5zb19zbmQuc2JfbG93YXQgPiAoaW50KXNvLT5zb19zbmQuc2JfaGl3YXQpCi0JCXNvLT5z
b19zbmQuc2JfbG93YXQgPSAoaW50KXNvLT5zb19zbmQuc2JfaGl3YXQ7Ci0JU09DS0JVRl9VTkxP
Q0soJnNvLT5zb19yY3YpOwotCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKLQlyZXR1cm4g
KDApOwotCi0gYmFkOgotCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKLQlTT0NLQlVGX1VO
TE9DSygmc28tPnNvX3NuZCk7Ci0JcmV0dXJuIChFTk9CVUZTKTsKLX0KLSNlbHNlIC8qIGtlcm5l
bCB2ZXJzaW9uIGZvciByZWZlcmVuY2UgKi8KLWludAotc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQg
KnNvLCB1X2xvbmcgc25kY2MsIHVfbG9uZyByY3ZjYykKLXsKLQlzdHJ1Y3QgdGhyZWFkICp0ZCA9
IGN1cnRocmVhZDsKLQotCVNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCk7Ci0JU09DS0JVRl9MT0NL
KCZzby0+c29fcmN2KTsKLQlpZiAoc2JyZXNlcnZlX2xvY2tlZCgmc28tPnNvX3NuZCwgc25kY2Ms
IHNvLCB0ZCkgPT0gMCkKLQkJZ290byBiYWQ7Ci0JaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5z
b19yY3YsIHJjdmNjLCBzbywgdGQpID09IDApCi0JCWdvdG8gYmFkMjsKLQlpZiAoc28tPnNvX3Jj
di5zYl9sb3dhdCA9PSAwKQotCQlzby0+c29fcmN2LnNiX2xvd2F0ID0gMTsKLQlpZiAoc28tPnNv
X3NuZC5zYl9sb3dhdCA9PSAwKQotCQlzby0+c29fc25kLnNiX2xvd2F0ID0gTUNMQllURVM7Ci0J
aWYgKHNvLT5zb19zbmQuc2JfbG93YXQgPiBzby0+c29fc25kLnNiX2hpd2F0KQotCQlzby0+c29f
c25kLnNiX2xvd2F0ID0gc28tPnNvX3NuZC5zYl9oaXdhdDsKLQlTT0NLQlVGX1VOTE9DSygmc28t
PnNvX3Jjdik7Ci0JU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCXJldHVybiAoMCk7Ci1i
YWQyOgotCXNicmVsZWFzZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNvKTsKLWJhZDoKLQlTT0NLQlVG
X1VOTE9DSygmc28tPnNvX3Jjdik7Ci0JU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQpOwotCXJl
dHVybiAoRU5PQlVGUyk7Ci19Ci0jZW5kaWYKLQotCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3Jj
L3N5cy9rZXJuL3VpcGNfc29ja2J1Zi5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNl
X18KLSAqLwotCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotdm9pZAotc293YWtldXAoc3Ry
dWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYnVmICpzYikKLXsKLQotCVNPQ0tCVUZfTE9DS19B
U1NFUlQoc2IpOwotCi0Jc2ItPnNiX2ZsYWdzICY9IH5TQl9TRUw7Ci0JaWYgKHNiLT5zYl9mbGFn
cyAmIFNCX1dBSVQpIHsKLQkJc2ItPnNiX2ZsYWdzICY9IH5TQl9XQUlUOwotI2lmIGRlZmluZWQg
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCi0JCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmKHNi
KS0+c2JfY29uZCk7Ci0jZWxzZQotCQlwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KCYoc2IpLT5zYl9j
b25kKTsKLSNlbmRpZgotCX0KLQlTT0NLQlVGX1VOTE9DSyhzYik7Ci0JLypfX1VzZXJzcGFjZV9f
IHdoYXQgdG9kbyBhYm91dCBzb191cGNhbGw/Ki8KLQotfQotI2Vsc2UgLyoga2VybmVsIHZlcnNp
b24gZm9yIHJlZmVyZW5jZSAqLwotLyoKLSAqIFdha2V1cCBwcm9jZXNzZXMgd2FpdGluZyBvbiBh
IHNvY2tldCBidWZmZXIuICBEbyBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uCi0gKiB2aWEgU0lH
SU8gaWYgdGhlIHNvY2tldCBoYXMgdGhlIFNTX0FTWU5DIGZsYWcgc2V0LgotICoKLSAqIENhbGxl
ZCB3aXRoIHRoZSBzb2NrZXQgYnVmZmVyIGxvY2sgaGVsZDsgd2lsbCByZWxlYXNlIHRoZSBsb2Nr
IGJ5IHRoZSBlbmQKLSAqIG9mIHRoZSBmdW5jdGlvbi4gIFRoaXMgYWxsb3dzIHRoZSBjYWxsZXIg
dG8gYWNxdWlyZSB0aGUgc29ja2V0IGJ1ZmZlciBsb2NrCi0gKiB3aGlsZSB0ZXN0aW5nIGZvciB0
aGUgbmVlZCBmb3IgdmFyaW91cyBzb3J0cyBvZiB3YWtldXAgYW5kIGhvbGQgaXQgdGhyb3VnaAot
ICogdG8gdGhlIHBvaW50IHdoZXJlIGl0J3Mgbm8gbG9uZ2VyIHJlcXVpcmVkLiAgV2UgY3VycmVu
dGx5IGhvbGQgdGhlIGxvY2sKLSAqIHRocm91Z2ggY2FsbHMgb3V0IHRvIG90aGVyIHN1YnN5c3Rl
bXMgKHdpdGggdGhlIGV4Y2VwdGlvbiBvZiBrcXVldWUpLCBhbmQKLSAqIHRoZW4gcmVsZWFzZSBp
dCB0byBhdm9pZCBsb2NrIG9yZGVyIGlzc3Vlcy4gIEl0J3Mgbm90IGNsZWFyIHRoYXQncwotICog
Y29ycmVjdC4KLSAqLwotdm9pZAotc293YWtldXAoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBz
b2NrYnVmICpzYikKLXsKLQotCVNPQ0tCVUZfTE9DS19BU1NFUlQoc2IpOwotCi0Jc2Vsd2FrZXVw
cHJpKCZzYi0+c2Jfc2VsLCBQU09DSyk7Ci0Jc2ItPnNiX2ZsYWdzICY9IH5TQl9TRUw7Ci0JaWYg
KHNiLT5zYl9mbGFncyAmIFNCX1dBSVQpIHsKLQkJc2ItPnNiX2ZsYWdzICY9IH5TQl9XQUlUOwot
CQl3YWtldXAoJnNiLT5zYl9jYyk7Ci0JfQotCUtOT1RFX0xPQ0tFRCgmc2ItPnNiX3NlbC5zaV9u
b3RlLCAwKTsKLQlTT0NLQlVGX1VOTE9DSyhzYik7Ci0JaWYgKChzby0+c29fc3RhdGUgJiBTU19B
U1lOQykgJiYgc28tPnNvX3NpZ2lvICE9IE5VTEwpCi0JCXBnc2lnaW8oJnNvLT5zb19zaWdpbywg
U0lHSU8sIDApOwotCWlmIChzYi0+c2JfZmxhZ3MgJiBTQl9VUENBTEwpCi0JCSgqc28tPnNvX3Vw
Y2FsbCkoc28sIHNvLT5zb191cGNhbGxhcmcsIE1fTk9XQUlUKTsKLQlpZiAoc2ItPnNiX2ZsYWdz
ICYgU0JfQUlPKQotCQlhaW9fc3dha2Uoc28sIHNiKTsKLQltdHhfYXNzZXJ0KFNPQ0tCVUZfTVRY
KHNiKSwgTUFfTk9UT1dORUQpOwotfQotI2VuZGlmCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3Jj
L3N5cy9rZXJuL3VpcGNfc29ja2V0LmMKLSAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2Vf
XwotICovCi0KLWludAotc29iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
Km5hbSkKLXsKLQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQot
CWNhc2UgQUZfSU5FVDoKLQkJcmV0dXJuIChzY3RwX2JpbmQoc28sIG5hbSkpOwotI2VuZGlmCi0j
aWYgZGVmaW5lZChJTkVUNikKLQljYXNlIEFGX0lORVQ2OgotCQlyZXR1cm4gKHNjdHA2X2JpbmQo
c28sIG5hbSwgTlVMTCkpOwotI2VuZGlmCi0JY2FzZSBBRl9DT05OOgotCQlyZXR1cm4gKHNjdHBj
b25uX2JpbmQoc28sIG5hbSkpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBFQUZOT1NVUFBPUlQ7Ci0J
fQotfQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYwotICog
YW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCi0gKi8KLQotaW50Ci11c3JzY3RwX2JpbmQo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCi17
Ci0Jc3RydWN0IHNvY2thZGRyICpzYTsKLQotCWlmIChzbyA9PSBOVUxMKSB7Ci0JCWVycm5vID0g
RUJBREY7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoKGVycm5vID0gZ2V0c29ja2FkZHIoJnNh
LCAoY2FkZHJfdCluYW1lLCBuYW1lbGVuKSkgIT0gMCkKLQkJcmV0dXJuICgtMSk7Ci0KLQllcnJu
byA9IHNvYmluZChzbywgc2EpOwotCUZSRUUoc2EsIE1fU09OQU1FKTsKLQlpZiAoZXJybm8pIHsK
LQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9Ci19Ci0KLWludAot
dXNlcnNwYWNlX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwg
aW50IG5hbWVsZW4pCi17Ci0JcmV0dXJuICh1c3JzY3RwX2JpbmQoc28sIG5hbWUsIG5hbWVsZW4p
KTsKLX0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3NvY2tldC5jCi0gKiBh
bmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqLwotCi1pbnQKLXNvbGlzdGVuKHN0cnVj
dCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZykKLXsKLQlpZiAoc28gPT0gTlVMTCkgewotCQlyZXR1
cm4gKEVCQURGKTsKLQl9IGVsc2UgewotCQlyZXR1cm4gKHNjdHBfbGlzdGVuKHNvLCBiYWNrbG9n
LCBOVUxMKSk7Ci0JfQotfQotCi0KLWludAotc29saXN0ZW5fcHJvdG9fY2hlY2soc3RydWN0IHNv
Y2tldCAqc28pCi17Ci0KLQlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsKLQotCWlmIChzby0+c29fc3Rh
dGUgJiAoU1NfSVNDT05ORUNURUQgfCBTU19JU0NPTk5FQ1RJTkcgfAotCSAgICBTU19JU0RJU0NP
Tk5FQ1RJTkcpKQotCQlyZXR1cm4gKEVJTlZBTCk7Ci0JcmV0dXJuICgwKTsKLX0KLQotc3RhdGlj
IGludCBzb21heGNvbm4gPSBTT01BWENPTk47Ci0KLXZvaWQKLXNvbGlzdGVuX3Byb3RvKHN0cnVj
dCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZykKLXsKLQotCVNPQ0tfTE9DS19BU1NFUlQoc28pOwot
Ci0JaWYgKGJhY2tsb2cgPCAwIHx8IGJhY2tsb2cgPiBzb21heGNvbm4pCi0JCWJhY2tsb2cgPSBz
b21heGNvbm47Ci0Jc28tPnNvX3FsaW1pdCA9IGJhY2tsb2c7Ci0Jc28tPnNvX29wdGlvbnMgfD0g
U0NUUF9TT19BQ0NFUFRDT05OOwotfQotCi0KLQotCi0vKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9r
ZXJuL3VpcGNfc3lzY2FsbHMuYwotICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCi0g
Ki8KLQotaW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2cp
Ci17Ci0JZXJybm8gPSBzb2xpc3RlbihzbywgYmFja2xvZyk7Ci0JaWYgKGVycm5vKSB7Ci0JCXJl
dHVybiAoLTEpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotfQotCi1pbnQKLXVzZXJz
cGFjZV9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQotewotCXJldHVybiAo
dXNyc2N0cF9saXN0ZW4oc28sIGJhY2tsb2cpKTsKLX0KLQotLyogVGFrZW4gZnJvbSAgL3NyYy9z
eXMva2Vybi91aXBjX3NvY2tldC5jCi0gKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18K
LSAqLwotCi1pbnQKLXNvYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KipuYW0pCi17Ci0JaW50IGVycm9yOwotCi0JU09DS19MT0NLKHNvKTsKLQlLQVNTRVJUKChzby0+
c29fc3RhdGUgJiBTU19OT0ZEUkVGKSAhPSAwLCAoInNvYWNjZXB0OiAhTk9GRFJFRiIpKTsKLQlz
by0+c29fc3RhdGUgJj0gflNTX05PRkRSRUY7Ci0JU09DS19VTkxPQ0soc28pOwotCWVycm9yID0g
c2N0cF9hY2NlcHQoc28sIG5hbSk7Ci0JcmV0dXJuIChlcnJvcik7Ci19Ci0KLQotCi0vKiBUYWtl
biBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYwotICoga2Vybl9hY2NlcHQgbW9k
aWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KLSAqLwotaW50Ci11c2VyX2FjY2VwdChzdHJ1Y3Qgc29j
a2V0ICpoZWFkLCAgc3RydWN0IHNvY2thZGRyICoqbmFtZSwgc29ja2xlbl90ICpuYW1lbGVuLCBz
dHJ1Y3Qgc29ja2V0ICoqcHRyX2FjY2VwdF9yZXRfc29jaykKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIg
KnNhID0gTlVMTDsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IHNvY2tldCAqc28gPSBOVUxMOwotCi0K
LQlpZiAobmFtZSkgewotCQkqbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKChoZWFkLT5zb19vcHRp
b25zICYgU0NUUF9TT19BQ0NFUFRDT05OKSA9PSAwKSB7Ci0JCWVycm9yID0gRUlOVkFMOwotCQln
b3RvIGRvbmU7Ci0JfQotCi0JQUNDRVBUX0xPQ0soKTsKLQlpZiAoKGhlYWQtPnNvX3N0YXRlICYg
U1NfTkJJTykgJiYgVEFJTFFfRU1QVFkoJmhlYWQtPnNvX2NvbXApKSB7Ci0JCUFDQ0VQVF9VTkxP
Q0soKTsKLQkJZXJyb3IgPSBFV09VTERCTE9DSzsKLQkJZ290byBub2Nvbm5lY3Rpb247Ci0JfQot
CXdoaWxlIChUQUlMUV9FTVBUWSgmaGVhZC0+c29fY29tcCkgJiYgaGVhZC0+c29fZXJyb3IgPT0g
MCkgewotCQlpZiAoaGVhZC0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB7Ci0J
CQloZWFkLT5zb19lcnJvciA9IEVDT05OQUJPUlRFRDsKLQkJCWJyZWFrOwotCQl9Ci0jaWYgZGVm
aW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQkJaWYgKFNsZWVwQ29uZGl0aW9uVmFyaWFi
bGVDUygmYWNjZXB0X2NvbmQsICZhY2NlcHRfbXR4LCBJTkZJTklURSkpCi0JCQllcnJvciA9IDA7
Ci0JCWVsc2UKLQkJCWVycm9yID0gR2V0TGFzdEVycm9yKCk7Ci0jZWxzZQotCQllcnJvciA9IHB0
aHJlYWRfY29uZF93YWl0KCZhY2NlcHRfY29uZCwgJmFjY2VwdF9tdHgpOwotI2VuZGlmCi0JCWlm
IChlcnJvcikgewotCQkJQUNDRVBUX1VOTE9DSygpOwotCQkJZ290byBub2Nvbm5lY3Rpb247Ci0J
CX0KLQl9Ci0JaWYgKGhlYWQtPnNvX2Vycm9yKSB7Ci0JCWVycm9yID0gaGVhZC0+c29fZXJyb3I7
Ci0JCWhlYWQtPnNvX2Vycm9yID0gMDsKLQkJQUNDRVBUX1VOTE9DSygpOwotCQlnb3RvIG5vY29u
bmVjdGlvbjsKLQl9Ci0Jc28gPSBUQUlMUV9GSVJTVCgmaGVhZC0+c29fY29tcCk7Ci0JS0FTU0VS
VCghKHNvLT5zb19xc3RhdGUgJiBTUV9JTkNPTVApLCAoImFjY2VwdDE6IHNvIFNRX0lOQ09NUCIp
KTsKLQlLQVNTRVJUKHNvLT5zb19xc3RhdGUgJiBTUV9DT01QLCAoImFjY2VwdDE6IHNvIG5vdCBT
UV9DT01QIikpOwotCi0JLyoKLQkgKiBCZWZvcmUgY2hhbmdpbmcgdGhlIGZsYWdzIG9uIHRoZSBz
b2NrZXQsIHdlIGhhdmUgdG8gYnVtcCB0aGUKLQkgKiByZWZlcmVuY2UgY291bnQuICBPdGhlcndp
c2UsIGlmIHRoZSBwcm90b2NvbCBjYWxscyBzb2ZyZWUoKSwKLQkgKiB0aGUgc29ja2V0IHdpbGwg
YmUgcmVsZWFzZWQgZHVlIHRvIGEgemVybyByZWZjb3VudC4KLQkgKi8KLQlTT0NLX0xPQ0soc28p
OwkJCS8qIHNvcmVmKCkgYW5kIHNvX3N0YXRlIHVwZGF0ZSAqLwotCXNvcmVmKHNvKTsJCQkvKiBm
aWxlIGRlc2NyaXB0b3IgcmVmZXJlbmNlICovCi0KLQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2Nv
bXAsIHNvLCBzb19saXN0KTsKLQloZWFkLT5zb19xbGVuLS07Ci0Jc28tPnNvX3N0YXRlIHw9ICho
ZWFkLT5zb19zdGF0ZSAmIFNTX05CSU8pOwotCXNvLT5zb19xc3RhdGUgJj0gflNRX0NPTVA7Ci0J
c28tPnNvX2hlYWQgPSBOVUxMOwotCVNPQ0tfVU5MT0NLKHNvKTsKLQlBQ0NFUFRfVU5MT0NLKCk7
Ci0KLQotCS8qCi0JICogVGhlIG9yaWdpbmFsIGFjY2VwdCByZXR1cm5zIGZkIHZhbHVlIHZpYSB0
ZC0+dGRfcmV0dmFsWzBdID0gZmQ7Ci0JICogd2Ugd2lsbCByZXR1cm4gdGhlIHNvY2tldCBmb3Ig
YWNjZXB0ZWQgY29ubmVjdGlvbi4KLQkgKi8KLQotCWVycm9yID0gc29hY2NlcHQoc28sICZzYSk7
Ci0JaWYgKGVycm9yKSB7Ci0JCS8qCi0JCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Ig
b2xkZXIgY29kZSB3aGljaCBtaWdodAotCQkgKiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9t
IGFjY2VwdC4KLQkJICovCi0JCWlmIChuYW1lKQotCQkJKm5hbWVsZW4gPSAwOwotCQlnb3RvIG5v
Y29ubmVjdGlvbjsKLQl9Ci0JaWYgKHNhID09IE5VTEwpIHsKLQkJaWYgKG5hbWUpCi0JCQkqbmFt
ZWxlbiA9IDA7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0JaWYgKG5hbWUpIHsKLSNpZmRlZiBIQVZFX1NB
X0xFTgotCQkvKiBjaGVjayBzYV9sZW4gYmVmb3JlIGl0IGlzIGRlc3Ryb3llZCAqLwotCQlpZiAo
Km5hbWVsZW4gPiBzYS0+c2FfbGVuKSB7Ci0JCQkqbmFtZWxlbiA9IHNhLT5zYV9sZW47Ci0JCX0K
LSNlbHNlCi0JCXNvY2tsZW5fdCBzYV9sZW47Ci0KLQkJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7
Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0JCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBB
Rl9JTkVUNjoKLQkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLQkJCWJy
ZWFrOwotI2VuZGlmCi0JCWNhc2UgQUZfQ09OTjoKLQkJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubik7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXNhX2xlbiA9IDA7Ci0J
CQlicmVhazsKLQkJfQotCQlpZiAoKm5hbWVsZW4gPiBzYV9sZW4pIHsKLQkJCSpuYW1lbGVuID0g
c2FfbGVuOwotCQl9Ci0jZW5kaWYKLQkJKm5hbWUgPSBzYTsKLQkJc2EgPSBOVUxMOwotCX0KLW5v
Y29ubmVjdGlvbjoKLQlpZiAoc2EpIHsKLQkJRlJFRShzYSwgTV9TT05BTUUpOwotCX0KLQotZG9u
ZToKLQkqcHRyX2FjY2VwdF9yZXRfc29jayA9IHNvOwotCXJldHVybiAoZXJyb3IpOwotfQotCi0K
LQotLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKLSAqIGFuZCBt
b2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXwotICovCi0vKgotICogYWNjZXB0MSgpCi0gKi8KLXN0
YXRpYyBpbnQKLWFjY2VwdDEoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYW5h
bWUsIHNvY2tsZW5fdCAqYW5hbWVsZW4sIHN0cnVjdCBzb2NrZXQgKipwdHJfYWNjZXB0X3JldF9z
b2NrKQotewotCXN0cnVjdCBzb2NrYWRkciAqbmFtZTsKLQlzb2NrbGVuX3QgbmFtZWxlbjsKLQlp
bnQgZXJyb3I7Ci0KLQlpZiAoc28gPT0gTlVMTCkgewotCQlyZXR1cm4gKEVCQURGKTsKLQl9Ci0J
aWYgKGFuYW1lID09IE5VTEwpIHsKLQkJcmV0dXJuICh1c2VyX2FjY2VwdChzbywgTlVMTCwgTlVM
TCwgcHRyX2FjY2VwdF9yZXRfc29jaykpOwotCX0KLQotCWVycm9yID0gY29weWluKGFuYW1lbGVu
LCAmbmFtZWxlbiwgc2l6ZW9mIChuYW1lbGVuKSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gKGVy
cm9yKTsKLQotCWVycm9yID0gdXNlcl9hY2NlcHQoc28sICZuYW1lLCAmbmFtZWxlbiwgcHRyX2Fj
Y2VwdF9yZXRfc29jayk7Ci0KLQkvKgotCSAqIHJldHVybiBhIG5hbWVsZW4gb2YgemVybyBmb3Ig
b2xkZXIgY29kZSB3aGljaCBtaWdodAotCSAqIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlIGZyb20g
YWNjZXB0LgotCSAqLwotCWlmIChlcnJvcikgewotCQkodm9pZCkgY29weW91dCgmbmFtZWxlbiwK
LQkJICAgIGFuYW1lbGVuLCBzaXplb2YoKmFuYW1lbGVuKSk7Ci0JCXJldHVybiAoZXJyb3IpOwot
CX0KLQotCWlmIChlcnJvciA9PSAwICYmIG5hbWUgIT0gTlVMTCkgewotCQllcnJvciA9IGNvcHlv
dXQobmFtZSwgYW5hbWUsIG5hbWVsZW4pOwotCX0KLQlpZiAoZXJyb3IgPT0gMCkgewotCQllcnJv
ciA9IGNvcHlvdXQoJm5hbWVsZW4sIGFuYW1lbGVuLCBzaXplb2YobmFtZWxlbikpOwotCX0KLQot
CWlmIChuYW1lKSB7Ci0JCUZSRUUobmFtZSwgTV9TT05BTUUpOwotCX0KLQlyZXR1cm4gKGVycm9y
KTsKLX0KLQotc3RydWN0IHNvY2tldCAqCi11c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpz
bywgc3RydWN0IHNvY2thZGRyICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikKLXsKLQlzdHJ1
Y3Qgc29ja2V0ICphY2NlcHRfcmV0dXJuX3NvY2sgPSBOVUxMOwotCi0JZXJybm8gPSBhY2NlcHQx
KHNvLCBhbmFtZSwgYW5hbWVsZW4sICZhY2NlcHRfcmV0dXJuX3NvY2spOwotCWlmIChlcnJubykg
ewotCQlyZXR1cm4gKE5VTEwpOwotCX0gZWxzZSB7Ci0JCXJldHVybiAoYWNjZXB0X3JldHVybl9z
b2NrKTsKLQl9Ci19Ci0KLXN0cnVjdCBzb2NrZXQgKgotdXNlcnNwYWNlX2FjY2VwdChzdHJ1Y3Qg
c29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphbmFtZSwgc29ja2xlbl90ICphbmFtZWxlbikK
LXsKLQlyZXR1cm4gKHVzcnNjdHBfYWNjZXB0KHNvLCBhbmFtZSwgYW5hbWVsZW4pKTsKLX0KLQot
c3RydWN0IHNvY2tldCAqCi11c3JzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0
cF9hc3NvY190IGlkKQotewotCXN0cnVjdCBzb2NrZXQgKnNvOwotCi0JaWYgKChlcnJubyA9IHNj
dHBfY2FuX3BlZWxfb2ZmKGhlYWQsIGlkKSkgIT0gMCkgewotCQlyZXR1cm4gKE5VTEwpOwotCX0K
LQlpZiAoKHNvID0gc29uZXdjb25uKGhlYWQsIFNTX0lTQ09OTkVDVEVEKSkgPT0gTlVMTCkgewot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlBQ0NFUFRfTE9DSygpOwotCVNPQ0tfTE9DSyhzbyk7Ci0J
c29yZWYoc28pOwotCVRBSUxRX1JFTU9WRSgmaGVhZC0+c29fY29tcCwgc28sIHNvX2xpc3QpOwot
CWhlYWQtPnNvX3FsZW4tLTsKLQlzby0+c29fc3RhdGUgfD0gKGhlYWQtPnNvX3N0YXRlICYgU1Nf
TkJJTyk7Ci0Jc28tPnNvX3FzdGF0ZSAmPSB+U1FfQ09NUDsKLQlzby0+c29faGVhZCA9IE5VTEw7
Ci0JU09DS19VTkxPQ0soc28pOwotCUFDQ0VQVF9VTkxPQ0soKTsKLQlpZiAoKGVycm5vID0gc2N0
cF9kb19wZWVsb2ZmKGhlYWQsIHNvLCBpZCkpICE9IDApIHsKLQkJc28tPnNvX2NvdW50ID0gMDsK
LQkJc29kZWFsbG9jKHNvKTsKLQkJcmV0dXJuIChOVUxMKTsKLQl9Ci0JcmV0dXJuIChzbyk7Ci19
Ci0KLWludAotc29kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKQotewotCWludCBlcnJvcjsK
LQotCWlmICgoc28tPnNvX3N0YXRlICYgU1NfSVNDT05ORUNURUQpID09IDApCi0JCXJldHVybiAo
RU5PVENPTk4pOwotCWlmIChzby0+c29fc3RhdGUgJiBTU19JU0RJU0NPTk5FQ1RJTkcpCi0JCXJl
dHVybiAoRUFMUkVBRFkpOwotCWVycm9yID0gc2N0cF9kaXNjb25uZWN0KHNvKTsKLQlyZXR1cm4g
KGVycm9yKTsKLX0KLQotaW50Ci11c3JzY3RwX3NldF9ub25fYmxvY2tpbmcoc3RydWN0IHNvY2tl
dCAqc28sIGludCBvbm9mZikKLXsKLQlpZiAoc28gPT0gTlVMTCkgewotCQllcnJubyA9IEVCQURG
OwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JU09DS19MT0NLKHNvKTsKLQlpZiAob25vZmYgIT0gMCkg
ewotCQlzby0+c29fc3RhdGUgfD0gU1NfTkJJTzsKLQl9IGVsc2UgewotCQlzby0+c29fc3RhdGUg
Jj0gflNTX05CSU87Ci0JfQotCVNPQ0tfVU5MT0NLKHNvKTsKLQlyZXR1cm4gKDApOwotfQotCi1p
bnQKLXVzcnNjdHBfZ2V0X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICpzbykKLXsKLQlpbnQg
cmVzdWx0OwotCi0JaWYgKHNvID09IE5VTEwpIHsKLQkJZXJybm8gPSBFQkFERjsKLQkJcmV0dXJu
ICgtMSk7Ci0JfQotCVNPQ0tfTE9DSyhzbyk7Ci0JaWYgKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8p
IHsKLQkJcmVzdWx0ID0gMTsKLQl9IGVsc2UgewotCQlyZXN1bHQgPSAwOwotCX0KLQlTT0NLX1VO
TE9DSyhzbyk7Ci0JcmV0dXJuIChyZXN1bHQpOwotfQotCi1pbnQKLXNvY29ubmVjdChzdHJ1Y3Qg
c29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0pCi17Ci0JaW50IGVycm9yOwotCi0JaWYg
KHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19BQ0NFUFRDT05OKQotCQlyZXR1cm4gKEVPUE5PVFNV
UFApOwotCS8qCi0JICogSWYgcHJvdG9jb2wgaXMgY29ubmVjdGlvbi1iYXNlZCwgY2FuIG9ubHkg
Y29ubmVjdCBvbmNlLgotCSAqIE90aGVyd2lzZSwgaWYgY29ubmVjdGVkLCB0cnkgdG8gZGlzY29u
bmVjdCBmaXJzdC4gIFRoaXMgYWxsb3dzCi0JICogdXNlciB0byBkaXNjb25uZWN0IGJ5IGNvbm5l
Y3RpbmcgdG8sIGUuZy4sIGEgbnVsbCBhZGRyZXNzLgotCSAqLwotCWlmIChzby0+c29fc3RhdGUg
JiAoU1NfSVNDT05ORUNURUR8U1NfSVNDT05ORUNUSU5HKSAmJiAoZXJyb3IgPSBzb2Rpc2Nvbm5l
Y3Qoc28pKSkgewotCQllcnJvciA9IEVJU0NPTk47Ci0JfSBlbHNlIHsKLQkJLyoKLQkJICogUHJl
dmVudCBhY2N1bXVsYXRlZCBlcnJvciBmcm9tIHByZXZpb3VzIGNvbm5lY3Rpb24gZnJvbQotCQkg
KiBiaXRpbmcgdXMuCi0JCSAqLwotCQlzby0+c29fZXJyb3IgPSAwOwotCQlzd2l0Y2ggKG5hbS0+
c2FfZmFtaWx5KSB7Ci0jaWYgZGVmaW5lZChJTkVUKQotCQljYXNlIEFGX0lORVQ6Ci0JCQllcnJv
ciA9IHNjdHBfY29ubmVjdChzbywgbmFtKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWYgZGVmaW5l
ZChJTkVUNikKLQkJY2FzZSBBRl9JTkVUNjoKLQkJCWVycm9yID0gc2N0cDZfY29ubmVjdChzbywg
bmFtKTsKLQkJCWJyZWFrOwotI2VuZGlmCi0JCWNhc2UgQUZfQ09OTjoKLQkJCWVycm9yID0gc2N0
cGNvbm5fY29ubmVjdChzbywgbmFtKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyb3Ig
PSBFQUZOT1NVUFBPUlQ7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotCi0KLWlu
dCB1c2VyX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqc2EpCi17
Ci0JaW50IGVycm9yOwotCWludCBpbnRlcnJ1cHRlZCA9IDA7Ci0KLQlpZiAoc28gPT0gTlVMTCkg
ewotCQllcnJvciA9IEVCQURGOwotCQlnb3RvIGRvbmUxOwotCX0KLQlpZiAoc28tPnNvX3N0YXRl
ICYgU1NfSVNDT05ORUNUSU5HKSB7Ci0JCWVycm9yID0gRUFMUkVBRFk7Ci0JCWdvdG8gZG9uZTE7
Ci0JfQotCi0JZXJyb3IgPSBzb2Nvbm5lY3Qoc28sIHNhKTsKLQlpZiAoZXJyb3IpIHsKLQkJZ290
byBiYWQ7Ci0JfQotCWlmICgoc28tPnNvX3N0YXRlICYgU1NfTkJJTykgJiYgKHNvLT5zb19zdGF0
ZSAmIFNTX0lTQ09OTkVDVElORykpIHsKLQkJZXJyb3IgPSBFSU5QUk9HUkVTUzsKLQkJZ290byBk
b25lMTsKLQl9Ci0KLQlTT0NLX0xPQ0soc28pOwotCXdoaWxlICgoc28tPnNvX3N0YXRlICYgU1Nf
SVNDT05ORUNUSU5HKSAmJiBzby0+c29fZXJyb3IgPT0gMCkgewotI2lmIGRlZmluZWQgKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCi0JCWlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoU09DS19D
T05EKHNvKSwgU09DS19NVFgoc28pLCBJTkZJTklURSkpCi0JCQllcnJvciA9IDA7Ci0JCWVsc2UK
LQkJCWVycm9yID0gLTE7Ci0jZWxzZQotCQllcnJvciA9IHB0aHJlYWRfY29uZF93YWl0KFNPQ0tf
Q09ORChzbyksIFNPQ0tfTVRYKHNvKSk7Ci0jZW5kaWYKLQkJaWYgKGVycm9yKSB7Ci0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCi0JCQlpZiAoZXJyb3IgPT0gRUlOVFIpIHsKLSNl
bHNlCi0JCQlpZiAoZXJyb3IgPT0gRUlOVFIgfHwgZXJyb3IgPT0gRVJFU1RBUlQpIHsKLSNlbmRp
ZgotCQkJCWludGVycnVwdGVkID0gMTsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChl
cnJvciA9PSAwKSB7Ci0JCWVycm9yID0gc28tPnNvX2Vycm9yOwotCQlzby0+c29fZXJyb3IgPSAw
OwotCX0KLQlTT0NLX1VOTE9DSyhzbyk7Ci0KLWJhZDoKLQlpZiAoIWludGVycnVwdGVkKSB7Ci0J
CXNvLT5zb19zdGF0ZSAmPSB+U1NfSVNDT05ORUNUSU5HOwotCX0KLSNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19OZXRCU0QpCi0JaWYgKGVycm9yID09IEVSRVNUQVJUKSB7Ci0JCWVycm9yID0g
RUlOVFI7Ci0JfQotI2VuZGlmCi1kb25lMToKLQlyZXR1cm4gKGVycm9yKTsKLX0KLQotaW50IHVz
cnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW1lLCBp
bnQgbmFtZWxlbikKLXsKLQlzdHJ1Y3Qgc29ja2FkZHIgKnNhID0gTlVMTDsKLQotCWVycm5vID0g
Z2V0c29ja2FkZHIoJnNhLCAoY2FkZHJfdCluYW1lLCBuYW1lbGVuKTsKLQlpZiAoZXJybm8pIHsK
LQkJaWYgKHNhKQotCQkJRlJFRShzYSwgTV9TT05BTUUpOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0K
LQllcnJubyA9IHVzZXJfY29ubmVjdChzbywgc2EpOwotCUZSRUUoc2EsIE1fU09OQU1FKTsKLQlp
ZiAoZXJybm8pIHsKLQkJcmV0dXJuICgtMSk7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuICgwKTsKLQl9
Ci19Ci0KLWludCB1c2Vyc3BhY2VfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNv
Y2thZGRyICpuYW1lLCBpbnQgbmFtZWxlbikKLXsKLQlyZXR1cm4gKHVzcnNjdHBfY29ubmVjdChz
bywgbmFtZSwgbmFtZWxlbikpOwotfQotCi0jZGVmaW5lIFNDVFBfU1RBQ0tfQlVGX1NJWkUgICAg
ICAgICAyMDQ4Ci0KLXZvaWQKLXVzcnNjdHBfY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pIHsKLQlp
ZiAoc28gIT0gTlVMTCkgewotCQlpZiAoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0FDQ0VQVENP
Tk4pIHsKLQkJCXN0cnVjdCBzb2NrZXQgKnNwOwotCi0JCQlBQ0NFUFRfTE9DSygpOwotCQkJd2hp
bGUgKChzcCA9IFRBSUxRX0ZJUlNUKCZzby0+c29fY29tcCkpICE9IE5VTEwpIHsKLQkJCQlUQUlM
UV9SRU1PVkUoJnNvLT5zb19jb21wLCBzcCwgc29fbGlzdCk7Ci0JCQkJc28tPnNvX3FsZW4tLTsK
LQkJCQlzcC0+c29fcXN0YXRlICY9IH5TUV9DT01QOwotCQkJCXNwLT5zb19oZWFkID0gTlVMTDsK
LQkJCQlBQ0NFUFRfVU5MT0NLKCk7Ci0JCQkJc29hYm9ydChzcCk7Ci0JCQkJQUNDRVBUX0xPQ0so
KTsKLQkJCX0KLQkJCUFDQ0VQVF9VTkxPQ0soKTsKLQkJfQotCQlBQ0NFUFRfTE9DSygpOwotCQlT
T0NLX0xPQ0soc28pOwotCQlzb3JlbGUoc28pOwotCX0KLX0KLQotdm9pZAotdXNlcnNwYWNlX2Ns
b3NlKHN0cnVjdCBzb2NrZXQgKnNvKQotewotCXVzcnNjdHBfY2xvc2Uoc28pOwotfQotCi1pbnQK
LXVzcnNjdHBfc2h1dGRvd24oc3RydWN0IHNvY2tldCAqc28sIGludCBob3cpCi17Ci0JaWYgKCEo
aG93ID09IFNIVVRfUkQgfHwgaG93ID09IFNIVVRfV1IgfHwgaG93ID09IFNIVVRfUkRXUikpIHsK
LQkJZXJybm8gPSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlpZiAoc28gPT0gTlVMTCkg
ewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0Jc2N0cF9mbHVzaChzbywg
aG93KTsKLQlpZiAoaG93ICE9IFNIVVRfV1IpCi0JCSBzb2NhbnRyY3Ztb3JlKHNvKTsKLQlpZiAo
aG93ICE9IFNIVVRfUkQpIHsKLQkJZXJybm8gPSBzY3RwX3NodXRkb3duKHNvKTsKLQkJaWYgKGVy
cm5vKSB7Ci0JCQlyZXR1cm4gKC0xKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAoMCk7Ci0JCX0K
LQl9Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci11c2Vyc3BhY2Vfc2h1dGRvd24oc3RydWN0IHNv
Y2tldCAqc28sIGludCBob3cpCi17Ci0JcmV0dXJuICh1c3JzY3RwX3NodXRkb3duKHNvLCBob3cp
KTsKLX0KLQotaW50Ci11c3JzY3RwX2ZpbmlzaCh2b2lkKQotewotCWlmIChTQ1RQX0JBU0VfVkFS
KHNjdHBfcGNiX2luaXRpYWxpemVkKSA9PSAwKSB7Ci0JCXJldHVybiAoMCk7Ci0JfQotCWlmIChT
Q1RQX0lOUF9JTkZPX1RSWUxPQ0soKSkgewotCQlpZiAoIUxJU1RfRU1QVFkoJlNDVFBfQkFTRV9J
TkZPKGxpc3RoZWFkKSkpIHsKLQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwotCQkJcmV0dXJu
ICgtMSk7Ci0JCX0KLQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7Ci0JfSBlbHNlIHsKLQkJcmV0
dXJuICgtMSk7Ci0JfQotCXNjdHBfZmluaXNoKCk7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQotCURlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCZhY2NlcHRfY29uZCk7Ci0JRGVs
ZXRlQ3JpdGljYWxTZWN0aW9uKCZhY2NlcHRfbXR4KTsKLSNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCi0JV1NBQ2xlYW51cCgpOwotI2VuZGlmCi0jZWxzZQotCXB0aHJlYWRfY29u
ZF9kZXN0cm95KCZhY2NlcHRfY29uZCk7Ci0JcHRocmVhZF9tdXRleF9kZXN0cm95KCZhY2NlcHRf
bXR4KTsKLSNlbmRpZgotCXJldHVybiAoMCk7Ci19Ci0KLWludAotdXNlcnNwYWNlX2ZpbmlzaCh2
b2lkKQotewotCXJldHVybiAodXNyc2N0cF9maW5pc2goKSk7Ci19Ci0KLS8qIG5lZWRlZCBmcm9t
IHNjdHBfdXNycmVxLmMgKi8KLWludAotc2N0cF9zZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGlu
dCBvcHRuYW1lLCB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRzaXplLCB2b2lkICpwKTsKLQotaW50
Ci11c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBsZXZlbCwgaW50IG9w
dGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92YWx1ZSwg
c29ja2xlbl90IG9wdGlvbl9sZW4pCi17Ci0JaWYgKHNvID09IE5VTEwpIHsKLQkJZXJybm8gPSBF
QkFERjsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNPTF9T
T0NLRVQ6Ci0JewotCQlzd2l0Y2ggKG9wdGlvbl9uYW1lKSB7Ci0JCWNhc2UgU09fUkNWQlVGOgot
CQkJaWYgKG9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8g
PSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCWludCAqYnVmX3Np
emU7Ci0KLQkJCQlidWZfc2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7Ci0JCQkJaWYgKCpidWZf
c2l6ZSA8IDEpIHsKLQkJCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJCXJldHVybiAoLTEpOwotCQkJ
CX0KLQkJCQlzYnJlc2VydmUoJnNvLT5zb19yY3YsICh1X2xvbmcpKmJ1Zl9zaXplLCBzbyk7Ci0J
CQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNPX1NOREJVRjoKLQkJCWlm
IChvcHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgewotCQkJCWVycm5vID0gRUlO
VkFMOwotCQkJCXJldHVybiAoLTEpOwotCQkJfSBlbHNlIHsKLQkJCQlpbnQgKmJ1Zl9zaXplOwot
Ci0JCQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOwotCQkJCWlmICgqYnVmX3NpemUg
PCAxKSB7Ci0JCQkJCWVycm5vID0gRUlOVkFMOwotCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQl9Ci0J
CQkJc2JyZXNlcnZlKCZzby0+c29fc25kLCAodV9sb25nKSpidWZfc2l6ZSwgc28pOwotCQkJCXJl
dHVybiAoMCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTT19MSU5HRVI6Ci0JCQlpZiAob3B0
aW9uX2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7Ci0JCQkJZXJybm8g
PSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCXN0cnVjdCBsaW5n
ZXIgKmw7Ci0KLQkJCQlsID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFsdWU7Ci0JCQkJc28t
PnNvX2xpbmdlciA9IGwtPmxfbGluZ2VyOwotCQkJCWlmIChsLT5sX29ub2ZmKSB7Ci0JCQkJCXNv
LT5zb19vcHRpb25zIHw9IFNDVFBfU09fTElOR0VSOwotCQkJCX0gZWxzZSB7Ci0JCQkJCXNvLT5z
b19vcHRpb25zICY9IH5TQ1RQX1NPX0xJTkdFUjsKLQkJCQl9Ci0JCQkJcmV0dXJuICgwKTsKLQkJ
CX0KLQkJZGVmYXVsdDoKLQkJCWVycm5vID0gRUlOVkFMOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0K
LQl9Ci0JY2FzZSBJUFBST1RPX1NDVFA6Ci0JCWVycm5vID0gc2N0cF9zZXRvcHQoc28sIG9wdGlv
bl9uYW1lLCAodm9pZCAqKSBvcHRpb25fdmFsdWUsIChzaXplX3Qpb3B0aW9uX2xlbiwgTlVMTCk7
Ci0JCWlmIChlcnJubykgewotCQkJcmV0dXJuICgtMSk7Ci0JCX0gZWxzZSB7Ci0JCQlyZXR1cm4g
KDApOwotCQl9Ci0JZGVmYXVsdDoKLQkJZXJybm8gPSBFTk9QUk9UT09QVDsKLQkJcmV0dXJuICgt
MSk7Ci0JfQotfQotCi1pbnQKLXVzZXJzcGFjZV9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHZvaWQgKm9wdGlvbl92YWx1ZSwgc29ja2xlbl90IG9wdGlvbl9sZW4pCi17Ci0JcmV0dXJuICh1
c3JzY3RwX3NldHNvY2tvcHQoc28sIGxldmVsLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCBv
cHRpb25fbGVuKSk7Ci19Ci0KLS8qIG5lZWRlZCBmcm9tIHNjdHBfdXNycmVxLmMgKi8KLWludAot
c2N0cF9nZXRvcHQoc3RydWN0IHNvY2tldCAqc28sIGludCBvcHRuYW1lLCB2b2lkICpvcHR2YWws
IHNpemVfdCAqb3B0c2l6ZSwKLQkgICAgdm9pZCAqcCk7Ci0KLWludAotdXNyc2N0cF9nZXRzb2Nr
b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKLSAgICAg
ICAgICAgICAgICAgICB2b2lkICpvcHRpb25fdmFsdWUsIHNvY2tsZW5fdCAqb3B0aW9uX2xlbikK
LXsKLQlpZiAoc28gPT0gTlVMTCkgewotCQllcnJubyA9IEVCQURGOwotCQlyZXR1cm4gKC0xKTsK
LQl9Ci0JaWYgKG9wdGlvbl9sZW4gPT0gTlVMTCkgewotCQllcnJubyA9IEVGQVVMVDsKLQkJcmV0
dXJuICgtMSk7Ci0JfQotCXN3aXRjaCAobGV2ZWwpIHsKLQljYXNlIFNPTF9TT0NLRVQ6Ci0JCXN3
aXRjaCAob3B0aW9uX25hbWUpIHsKLQkJY2FzZSBTT19SQ1ZCVUY6Ci0JCQlpZiAoKm9wdGlvbl9s
ZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJ
cmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCWludCAqYnVmX3NpemU7Ci0KLQkJCQlidWZf
c2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7Ci0JCQkJKmJ1Zl9zaXplID0gc28tPnNvX3Jjdi5z
Yl9oaXdhdDs7Ci0JCQkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOwotCQkJ
CXJldHVybiAoMCk7Ci0JCQl9Ci0JCQlicmVhazsKLQkJY2FzZSBTT19TTkRCVUY6Ci0JCQlpZiAo
Km9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihpbnQpKSB7Ci0JCQkJZXJybm8gPSBFSU5W
QUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJCWludCAqYnVmX3NpemU7Ci0K
LQkJCQlidWZfc2l6ZSA9IChpbnQgKilvcHRpb25fdmFsdWU7Ci0JCQkJKmJ1Zl9zaXplID0gc28t
PnNvX3NuZC5zYl9oaXdhdDsKLQkJCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3Qpc2l6ZW9mKGlu
dCk7Ci0JCQkJcmV0dXJuICgwKTsKLQkJCX0KLQkJCWJyZWFrOwotCQljYXNlIFNPX0xJTkdFUjoK
LQkJCWlmICgqb3B0aW9uX2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpKSB7
Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7Ci0JCQl9IGVsc2UgewotCQkJ
CXN0cnVjdCBsaW5nZXIgKmw7Ci0KLQkJCQlsID0gKHN0cnVjdCBsaW5nZXIgKilvcHRpb25fdmFs
dWU7Ci0JCQkJbC0+bF9saW5nZXIgPSBzby0+c29fbGluZ2VyOwotCQkJCWlmIChzby0+c29fb3B0
aW9ucyAmIFNDVFBfU09fTElOR0VSKSB7Ci0JCQkJCWwtPmxfb25vZmYgPSAxOwotCQkJCX0gZWxz
ZSB7Ci0JCQkJCWwtPmxfb25vZmYgPSAwOwotCQkJCX0KLQkJCQkqb3B0aW9uX2xlbiA9IChzb2Nr
bGVuX3Qpc2l6ZW9mKHN0cnVjdCBsaW5nZXIpOwotCQkJCXJldHVybiAoMCk7Ci0JCQl9Ci0JCWRl
ZmF1bHQ6Ci0JCQllcnJubyA9IEVJTlZBTDsKLQkJCXJldHVybiAoLTEpOwotCQl9Ci0JY2FzZSBJ
UFBST1RPX1NDVFA6Ci0JewotCQlzaXplX3QgbGVuOwotCi0JCWxlbiA9IChzaXplX3QpKm9wdGlv
bl9sZW47Ci0JCWVycm5vID0gc2N0cF9nZXRvcHQoc28sIG9wdGlvbl9uYW1lLCBvcHRpb25fdmFs
dWUsICZsZW4sIE5VTEwpOwotCQkqb3B0aW9uX2xlbiA9IChzb2NrbGVuX3QpbGVuOwotCQlpZiAo
ZXJybm8pIHsKLQkJCXJldHVybiAoLTEpOwotCQl9IGVsc2UgewotCQkJcmV0dXJuICgwKTsKLQkJ
fQotCX0KLQlkZWZhdWx0OgotCQllcnJubyA9IEVOT1BST1RPT1BUOwotCQlyZXR1cm4gKC0xKTsK
LQl9Ci19Ci0KLWludAotdXNlcnNwYWNlX2dldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sIGlu
dCBsZXZlbCwgaW50IG9wdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0
aW9uX3ZhbHVlLCBzb2NrbGVuX3QgKm9wdGlvbl9sZW4pCi17Ci0JcmV0dXJuICh1c3JzY3RwX2dl
dHNvY2tvcHQoc28sIGxldmVsLCBvcHRpb25fbmFtZSwgb3B0aW9uX3ZhbHVlLCBvcHRpb25fbGVu
KSk7Ci19Ci0KLWludAotdXNyc2N0cF9zZXRfdWxwaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzbywgdm9p
ZCAqdWxwX2luZm8pCi17Ci0JcmV0dXJuIChyZWdpc3Rlcl91bHBfaW5mbyhzbywgdWxwX2luZm8p
KTsKLX0KLQotaW50Ci11c3JzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHJzLCBpbnQgYWRkcmNudCwgaW50IGZsYWdzKQotewotCXN0cnVjdCBzY3RwX2dl
dGFkZHJlc3NlcyAqZ2FkZHJzOwotCXN0cnVjdCBzb2NrYWRkciAqc2E7Ci0jaWZkZWYgSU5FVAot
CXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42OwotI2VuZGlmCi0JaW50IGk7Ci0Jc2l6ZV90IGFyZ3N6OwotI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKLQl1aW50MTZfdCBzcG9ydCA9IDA7Ci0j
ZW5kaWYKLQotCS8qIHZhbGlkYXRlIHRoZSBmbGFncyAqLwotCWlmICgoZmxhZ3MgIT0gU0NUUF9C
SU5EWF9BRERfQUREUikgJiYKLQkgICAgKGZsYWdzICE9IFNDVFBfQklORFhfUkVNX0FERFIpKSB7
Ci0JCWVycm5vID0gRUZBVUxUOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogdmFsaWRhdGUgdGhl
IGFkZHJlc3MgY291bnQgYW5kIGxpc3QgKi8KLQlpZiAoKGFkZHJjbnQgPD0gMCkgfHwgKGFkZHJz
ID09IE5VTEwpKSB7Ci0JCWVycm5vID0gRUlOVkFMOwotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyog
Rmlyc3QgcHJlLXNjcmVlbiB0aGUgYWRkcmVzc2VzICovCi0Jc2EgPSBhZGRyczsKLQlmb3IgKGkg
PSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7Ci0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lm
ZGVmIElORVQKLQkJY2FzZSBBRl9JTkVUOgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoc2Et
PnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewotCQkJCWVycm5vID0gRUlO
VkFMOwotCQkJCXJldHVybiAoLTEpOwotCQkJfQotI2VuZGlmCi0JCQlzaW4gPSAoc3RydWN0IHNv
Y2thZGRyX2luICopc2E7Ci0JCQlpZiAoc2luLT5zaW5fcG9ydCkgewotCQkJCS8qIG5vbi16ZXJv
IHBvcnQsIGNoZWNrIG9yIHNhdmUgKi8KLQkJCQlpZiAoc3BvcnQpIHsKLQkJCQkJLyogQ2hlY2sg
YWdhaW5zdCBvdXIgcG9ydCAqLwotCQkJCQlpZiAoc3BvcnQgIT0gc2luLT5zaW5fcG9ydCkgewot
CQkJCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJCQlyZXR1cm4gKC0xKTsKLQkJCQkJfQotCQkJCX0g
ZWxzZSB7Ci0JCQkJCS8qIHNhdmUgb2ZmIHRoZSBwb3J0ICovCi0JCQkJCXNwb3J0ID0gc2luLT5z
aW5fcG9ydDsKLQkJCQl9Ci0JCQl9Ci0jaWZuZGVmIEhBVkVfU0FfTEVOCi0JCQlzYSA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
Ci0jZW5kaWYKLQkJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSU5FVDYKLQkJY2FzZSBBRl9JTkVU
NjoKLSNpZmRlZiBIQVZFX1NBX0xFTgotCQkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJuICgtMSk7
Ci0JCQl9Ci0jZW5kaWYKLQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQkJ
aWYgKHNpbjYtPnNpbjZfcG9ydCkgewotCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9yIHNh
dmUgKi8KLQkJCQlpZiAoc3BvcnQpIHsKLQkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9ydCAq
LwotCQkJCQlpZiAoc3BvcnQgIT0gc2luNi0+c2luNl9wb3J0KSB7Ci0JCQkJCQllcnJubyA9IEVJ
TlZBTDsKLQkJCQkJCXJldHVybiAoLTEpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJLyog
c2F2ZSBvZmYgdGhlIHBvcnQgKi8KLQkJCQkJc3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7Ci0JCQkJ
fQotCQkJfQotI2lmbmRlZiBIQVZFX1NBX0xFTgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICop
KChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSNlbmRpZgotCQkJ
YnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCS8qIEludmFsaWQgYWRkcmVzcyBmYW1pbHkg
c3BlY2lmaWVkLiAqLwotCQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JCQlyZXR1cm4gKC0xKTsK
LQkJfQotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2Fk
ZHJfdClzYSArIHNhLT5zYV9sZW4pOwotI2VuZGlmCi0JfQotCWFyZ3N6ID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2dldGFkZHJlc3NlcykgKwotCSAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9z
dG9yYWdlKTsKLQlpZiAoKGdhZGRycyA9IChzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKiltYWxs
b2MoYXJnc3opKSA9PSBOVUxMKSB7Ci0JCWVycm5vID0gRU5PTUVNOwotCQlyZXR1cm4gKC0xKTsK
LQl9Ci0Jc2EgPSBhZGRyczsKLQlmb3IgKGkgPSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7Ci0jaWZu
ZGVmIEhBVkVfU0FfTEVOCi0JCXNpemVfdCBzYV9sZW47Ci0jZW5kaWYKLQkJbWVtc2V0KGdhZGRy
cywgMCwgYXJnc3opOwotCQlnYWRkcnMtPnNnZXRfYXNzb2NfaWQgPSAwOwotI2lmZGVmIEhBVkVf
U0FfTEVOCi0JCW1lbWNweShnYWRkcnMtPmFkZHIsIHNhLCBzYS0+c2FfbGVuKTsKLSNpZiBkZWZp
bmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0g
MCkpIHsKLQkJCXN3aXRjaCAoZ2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVU
Ci0JCQljYXNlIEFGX0lORVQ6Ci0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRy
cy0+YWRkcjsKLQkJCQlzaW4tPnNpbl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbjYgKilnYWRkcnMtPmFkZHI7Ci0JCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7Ci0J
CQkJYnJlYWs7Ci0jZW5kaWYKLQkJCX0KLQkJfQotI2VuZGlmCi0JCWlmICh1c3JzY3RwX3NldHNv
Y2tvcHQoc28sIElQUFJPVE9fU0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikg
IT0gMCkgewotCQkJZnJlZShnYWRkcnMpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJc2EgPSAo
c3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2EtPnNhX2xlbik7Ci0jZWxzZQotCQlz
d2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0JCWNhc2UgQUZfSU5FVDoKLQkJ
CXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJYnJlYWs7Ci0jZW5kaWYK
LSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJZGVmYXVsdDoKLQkJCXNhX2xl
biA9IDA7Ci0JCQlicmVhazsKLQkJfQotCQltZW1jcHkoZ2FkZHJzLT5hZGRyLCBzYSwgc2FfbGVu
KTsKLQkJLyoKLQkJICogTm93LCBpZiB0aGVyZSB3YXMgYSBwb3J0IG1lbnRpb25lZCwgYXNzdXJl
IHRoYXQgdGhlCi0JCSAqIGZpcnN0IGFkZHJlc3MgaGFzIHRoYXQgcG9ydCB0byBtYWtlIHN1cmUg
aXQgZmFpbHMgb3IKLQkJICogc3VjY2VlZHMgY29ycmVjdGx5LgotCQkgKi8KLSNpZiBkZWZpbmVk
KElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkp
IHsKLQkJCXN3aXRjaCAoZ2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKLSNpZmRlZiBJTkVUCi0J
CQljYXNlIEFGX0lORVQ6Ci0JCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+
YWRkcjsKLQkJCQlzaW4tPnNpbl9wb3J0ID0gc3BvcnQ7Ci0JCQkJYnJlYWs7Ci0jZW5kaWYKLSNp
ZmRlZiBJTkVUNgotCQkJY2FzZSBBRl9JTkVUNjoKLQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKilnYWRkcnMtPmFkZHI7Ci0JCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7Ci0JCQkJ
YnJlYWs7Ci0jZW5kaWYKLQkJCX0KLQkJfQotI2VuZGlmCi0JCWlmICh1c3JzY3RwX3NldHNvY2tv
cHQoc28sIElQUFJPVE9fU0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0g
MCkgewotCQkJZnJlZShnYWRkcnMpOwotCQkJcmV0dXJuICgtMSk7Ci0JCX0KLQkJc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2FfbGVuKTsKLSNlbmRpZgotCX0KLQlmcmVl
KGdhZGRycyk7Ci0JcmV0dXJuICgwKTsKLX0KLQotaW50Ci11c3JzY3RwX2Nvbm5lY3R4KHN0cnVj
dCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHJzLCBpbnQgYWRkcmNudCwKLSAgICAgICAgICAgICAgICAgc2N0cF9hc3NvY190ICppZCkKLXsK
LSNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCi0JY2hhciBidWZbU0NUUF9TVEFD
S19CVUZfU0laRV07Ci0JaW50IGksIHJldCwgY250LCAqYWE7Ci0JY2hhciAqY3B0bzsKLQljb25z
dCBzdHJ1Y3Qgc29ja2FkZHIgKmF0OwotCXNjdHBfYXNzb2NfdCAqcF9pZDsKLQlzaXplX3QgbGVu
ID0gc2l6ZW9mKGludCk7Ci0KLQkvKiB2YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlz
dCAqLwotCWlmICgoYWRkcnMgPT0gTlVMTCkgfHwgKGFkZHJjbnQgPD0gMCkpIHsKLQkJZXJybm8g
PSBFSU5WQUw7Ci0JCXJldHVybiAoLTEpOwotCX0KLQlhdCA9IGFkZHJzOwotCWNudCA9IDA7Ci0J
Y3B0byA9ICgoY2FkZHJfdClidWYgKyBzaXplb2YoaW50KSk7Ci0JLyogdmFsaWRhdGUgYWxsIHRo
ZSBhZGRyZXNzZXMgYW5kIGdldCB0aGUgc2l6ZSAqLwotCWZvciAoaSA9IDA7IGkgPCBhZGRyY250
OyBpKyspIHsKLQkJc3dpdGNoIChhdC0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNl
IEFGX0lORVQ6Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQkJCWlmIChhdC0+c2FfbGVuICE9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSB7Ci0JCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQkJcmV0dXJu
ICgtMSk7Ci0JCQl9Ci0jZW5kaWYKLQkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOwotCQkJY3B0byA9ICgoY2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOwotCQkJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotCQkJ
YXQgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KWF0ICsgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbikpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRlZiBJTkVUNgotCQljYXNlIEFGX0lO
RVQ2OgotI2lmZGVmIEhBVkVfU0FfTEVOCi0JCQlpZiAoYXQtPnNhX2xlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNikpIHsKLQkJCQllcnJubyA9IEVJTlZBTDsKLQkJCQlyZXR1cm4gKC0x
KTsKLQkJCX0KLSNlbmRpZgotI2lmZGVmIElORVQKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBF
RCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYXQpLT5zaW42X2FkZHIpKSB7Ci0JCQkJaW42X3Np
bjZfMl9zaW4oKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWNwdG8sIChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopYXQpOwotCQkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKTsKLQkJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0JCQl9IGVs
c2UgewotCQkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsK
LQkJCQljcHRvID0gKChjYWRkcl90KWNwdG8gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
OwotCQkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0JCQl9Ci0jZWxzZQot
CQkJbWVtY3B5KGNwdG8sIGF0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCQkJY3B0
byA9ICgoY2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCWxl
biArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0jZW5kaWYKLQkJCWF0ID0gKHN0cnVj
dCBzb2NrYWRkciAqKSgoY2FkZHJfdClhdCArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
Ci0JCQlicmVhazsKLSNlbmRpZgotCQlkZWZhdWx0OgotCQkJZXJybm8gPSBFSU5WQUw7Ci0JCQly
ZXR1cm4gKC0xKTsKLQkJfQotCQlpZiAobGVuID4gKHNpemVvZihidWYpIC0gc2l6ZW9mKGludCkp
KSB7Ci0JCQkvKiBOZXZlciBlbm91Z2ggbWVtb3J5ICovCi0JCQllcnJubyA9IEUyQklHOwotCQkJ
cmV0dXJuICgtMSk7Ci0JCX0KLQkJY250Kys7Ci0JfQotCS8qIGRvIHdlIGhhdmUgYW55PyAqLwot
CWlmIChjbnQgPT0gMCkgewotCQllcnJubyA9IEVJTlZBTDsKLQkJcmV0dXJuICgtMSk7Ci0JfQot
CWFhID0gKGludCAqKWJ1ZjsKLQkqYWEgPSBjbnQ7Ci0JcmV0ID0gdXNyc2N0cF9zZXRzb2Nrb3B0
KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfQ09OTkVDVF9YLCAodm9pZCAqKWJ1ZiwgKHNvY2tsZW5f
dClsZW4pOwotCWlmICgocmV0ID09IDApICYmIGlkKSB7Ci0JCXBfaWQgPSAoc2N0cF9hc3NvY190
ICopYnVmOwotCQkqaWQgPSAqcF9pZDsKLQl9Ci0JcmV0dXJuIChyZXQpOwotI2Vsc2UKLQllcnJu
byA9IEVJTlZBTDsKLQlyZXR1cm4gKC0xKTsKLSNlbmRpZgotfQotCi1pbnQKLXVzcnNjdHBfZ2V0
cGFkZHJzKHN0cnVjdCBzb2NrZXQgKnNvLCBzY3RwX2Fzc29jX3QgaWQsIHN0cnVjdCBzb2NrYWRk
ciAqKnJhZGRycykKLXsKLQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKmFkZHJzOwotCXN0cnVj
dCBzb2NrYWRkciAqc2E7Ci0Jc2N0cF9hc3NvY190IGFzb2M7Ci0JY2FkZHJfdCBsaW07Ci0Jc29j
a2xlbl90IG9wdF9sZW47Ci0JaW50IGNudDsKLQotCWlmIChyYWRkcnMgPT0gTlVMTCkgewotCQll
cnJubyA9IEVGQVVMVDsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWFzb2MgPSBpZDsKLQlvcHRfbGVu
ID0gKHNvY2tsZW5fdClzaXplb2Yoc2N0cF9hc3NvY190KTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nr
b3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1JFTU9URV9BRERSX1NJWkUsICZhc29jLCAm
b3B0X2xlbikgIT0gMCkgewotCQlyZXR1cm4gKC0xKTsKLQl9Ci0JLyogc2l6ZSByZXF1aXJlZCBp
cyByZXR1cm5lZCBpbiAnYXNvYycgKi8KLQlvcHRfbGVuID0gKHNvY2tsZW5fdCkoKHNpemVfdClh
c29jICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcykpOwotCWFkZHJzID0gY2FsbG9j
KDEsIChzaXplX3Qpb3B0X2xlbik7Ci0JaWYgKGFkZHJzID09IE5VTEwpIHsKLQkJZXJybm8gPSBF
Tk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQlhZGRycy0+c2dldF9hc3NvY19pZCA9IGlkOwot
CS8qIE5vdyBsZXRzIGdldCB0aGUgYXJyYXkgb2YgYWRkcmVzc2VzICovCi0JaWYgKHVzcnNjdHBf
Z2V0c29ja29wdChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9QRUVSX0FERFJFU1NFUywgYWRk
cnMsICZvcHRfbGVuKSAhPSAwKSB7Ci0JCWZyZWUoYWRkcnMpOwotCQlyZXR1cm4gKC0xKTsKLQl9
Ci0JKnJhZGRycyA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcnMtPmFkZHJbMF07Ci0JY250ID0g
MDsKLQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkcnMtPmFkZHJbMF07Ci0JbGltID0gKGNh
ZGRyX3QpYWRkcnMgKyBvcHRfbGVuOwotI2lmZGVmIEhBVkVfU0FfTEVOCi0Jd2hpbGUgKCgoY2Fk
ZHJfdClzYSA8IGxpbSkgJiYgKHNhLT5zYV9sZW4gPiAwKSkgewotCQlzYSA9IChzdHJ1Y3Qgc29j
a2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzYS0+c2FfbGVuKTsKLSNlbHNlCi0Jd2hpbGUgKChjYWRk
cl90KXNhIDwgbGltKSB7Ci0JCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewotI2lmZGVmIElORVQK
LQkJY2FzZSBBRl9JTkVUOgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNh
ICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLSNpZmRl
ZiBJTkVUNgotCQljYXNlIEFGX0lORVQ2OgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChj
YWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQkJCWJyZWFrOwotI2Vu
ZGlmCi0JCWNhc2UgQUZfQ09OTjoKLQkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJf
dClzYSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOwotCQkJYnJlYWs7Ci0JCWRlZmF1
bHQ6Ci0JCQlyZXR1cm4gKGNudCk7Ci0JCQlicmVhazsKLQkJfQotI2VuZGlmCi0JCWNudCsrOwot
CX0KLQlyZXR1cm4gKGNudCk7Ci19Ci0KLXZvaWQKLXVzcnNjdHBfZnJlZXBhZGRycyhzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHJzKQotewotCS8qIFRha2UgYXdheSB0aGUgaGlkZGVuIGFzc29jaWF0aW9u
IGlkICovCi0Jdm9pZCAqZnJfYWRkcjsKLQotCWZyX2FkZHIgPSAodm9pZCAqKSgoY2FkZHJfdClh
ZGRycyAtIHNpemVvZihzY3RwX2Fzc29jX3QpKTsKLQkvKiBOb3cgZnJlZSBpdCAqLwotCWZyZWUo
ZnJfYWRkcik7Ci19Ci0KLWludAotdXNyc2N0cF9nZXRsYWRkcnMoc3RydWN0IHNvY2tldCAqc28s
IHNjdHBfYXNzb2NfdCBpZCwgc3RydWN0IHNvY2thZGRyICoqcmFkZHJzKQotewotCXN0cnVjdCBz
Y3RwX2dldGFkZHJlc3NlcyAqYWRkcnM7Ci0JY2FkZHJfdCBsaW07Ci0Jc3RydWN0IHNvY2thZGRy
ICpzYTsKLQlzaXplX3Qgc2l6ZV9vZl9hZGRyZXNzZXM7Ci0Jc29ja2xlbl90IG9wdF9sZW47Ci0J
aW50IGNudDsKLQotCWlmIChyYWRkcnMgPT0gTlVMTCkgewotCQllcnJubyA9IEVGQVVMVDsKLQkJ
cmV0dXJuICgtMSk7Ci0JfQotCXNpemVfb2ZfYWRkcmVzc2VzID0gMDsKLQlvcHRfbGVuID0gKHNv
Y2tsZW5fdClzaXplb2YoaW50KTsKLQlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RP
X1NDVFAsIFNDVFBfR0VUX0xPQ0FMX0FERFJfU0laRSwgJnNpemVfb2ZfYWRkcmVzc2VzLCAmb3B0
X2xlbikgIT0gMCkgewotCQllcnJubyA9IEVOT01FTTsKLQkJcmV0dXJuICgtMSk7Ci0JfQotCWlm
IChzaXplX29mX2FkZHJlc3NlcyA9PSAwKSB7Ci0JCWVycm5vID0gRU5PVENPTk47Ci0JCXJldHVy
biAoLTEpOwotCX0KLQlvcHRfbGVuID0gKHNvY2tsZW5fdCkoc2l6ZV9vZl9hZGRyZXNzZXMgKwot
CSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UpICsK
LQkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3Nlcykp
OwotCWFkZHJzID0gY2FsbG9jKDEsIChzaXplX3Qpb3B0X2xlbik7Ci0JaWYgKGFkZHJzID09IE5V
TEwpIHsKLQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQlhZGRycy0+c2dl
dF9hc3NvY19pZCA9IGlkOwotCS8qIE5vdyBsZXRzIGdldCB0aGUgYXJyYXkgb2YgYWRkcmVzc2Vz
ICovCi0JaWYgKHVzcnNjdHBfZ2V0c29ja29wdChzbywgSVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9M
T0NBTF9BRERSRVNTRVMsIGFkZHJzLCAmb3B0X2xlbikgIT0gMCkgewotCQlmcmVlKGFkZHJzKTsK
LQkJZXJybm8gPSBFTk9NRU07Ci0JCXJldHVybiAoLTEpOwotCX0KLQkqcmFkZHJzID0gKHN0cnVj
dCBzb2NrYWRkciAqKSZhZGRycy0+YWRkclswXTsKLQljbnQgPSAwOwotCXNhID0gKHN0cnVjdCBz
b2NrYWRkciAqKSZhZGRycy0+YWRkclswXTsKLQlsaW0gPSAoY2FkZHJfdClhZGRycyArIG9wdF9s
ZW47Ci0jaWZkZWYgSEFWRV9TQV9MRU4KLQl3aGlsZSAoKChjYWRkcl90KXNhIDwgbGltKSAmJiAo
c2EtPnNhX2xlbiA+IDApKSB7Ci0JCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClz
YSArIHNhLT5zYV9sZW4pOwotI2Vsc2UKLQl3aGlsZSAoKGNhZGRyX3Qpc2EgPCBsaW0pIHsKLQkJ
c3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0jaWZkZWYgSU5FVAotCQljYXNlIEFGX0lORVQ6Ci0J
CQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSk7Ci0JCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIElORVQ2Ci0JCWNhc2UgQUZf
SU5FVDY6Ci0JCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOwotCQkJYnJlYWs7Ci0jZW5kaWYKLQkJY2FzZSBBRl9DT05O
OgotCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAoY250
KTsKLQkJCWJyZWFrOwotCQl9Ci0jZW5kaWYKLQkJY250Kys7Ci0JfQotCXJldHVybiAoY250KTsK
LX0KLQotdm9pZAotdXNyc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMpCi17
Ci0JLyogVGFrZSBhd2F5IHRoZSBoaWRkZW4gYXNzb2NpYXRpb24gaWQgKi8KLQl2b2lkICpmcl9h
ZGRyOwotCi0JZnJfYWRkciA9ICh2b2lkICopKChjYWRkcl90KWFkZHJzIC0gc2l6ZW9mKHNjdHBf
YXNzb2NfdCkpOwotCS8qIE5vdyBmcmVlIGl0ICovCi0JZnJlZShmcl9hZGRyKTsKLX0KLQotI2lm
ZGVmIElORVQKLXZvaWQKLXNjdHBfdXNlcnNwYWNlX2lwX291dHB1dChpbnQgKnJlc3VsdCwgc3Ry
dWN0IG1idWYgKm9fcGFrLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcm91dGVfdCAq
cm8sIHZvaWQgKnN0Y2IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lk
KQotewotCXN0cnVjdCBtYnVmICptOwotCXN0cnVjdCBtYnVmICptX29yaWc7Ci0JaW50IGlvdmNu
dDsKLQlpbnQgc2VuZF9sZW47Ci0JaW50IGxlbjsKLQlpbnQgc2VuZF9jb3VudDsKLQlzdHJ1Y3Qg
aXAgKmlwOwotCXN0cnVjdCB1ZHBoZHIgKnVkcDsKLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKLQlpbnQgcmVzOwotI2VuZGlmCi0Jc3RydWN0IHNvY2thZGRyX2luIGRzdDsK
LSNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCVdTQU1TRyB3aW5fbXNnX2hk
cjsKLQlEV09SRCB3aW5fc2VudF9sZW47Ci0JV1NBQlVGIHNlbmRfaW92ZWNbTUFYTEVOX01CVUZf
Q0hBSU5dOwotCVdTQUJVRiB3aW5idWY7Ci0jZWxzZQotCXN0cnVjdCBpb3ZlYyBzZW5kX2lvdmVj
W01BWExFTl9NQlVGX0NIQUlOXTsKLQlzdHJ1Y3QgbXNnaGRyIG1zZ19oZHI7Ci0jZW5kaWYKLQlp
bnQgdXNlX3VkcF90dW5uZWxpbmc7Ci0KLQkqcmVzdWx0ID0gMDsKLQotCW0gPSBTQ1RQX0hFQURF
Ul9UT19DSEFJTihvX3Bhayk7Ci0JbV9vcmlnID0gbTsKLQotCWxlbiA9IHNpemVvZihzdHJ1Y3Qg
aXApOwotCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsKLQkJaWYgKChtID0gbV9wdWxsdXAo
bSwgbGVuKSkgPT0gMCkgewotCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBJUCBoZWFk
ZXIgaW4gdGhlIGZpcnN0IG1idWYuXG4iKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpcCA9IG10
b2QobSwgc3RydWN0IGlwICopOwotCXVzZV91ZHBfdHVubmVsaW5nID0gKGlwLT5pcF9wID09IElQ
UFJPVE9fVURQKTsKLQotCWlmICh1c2VfdWRwX3R1bm5lbGluZykgewotCQlsZW4gPSBzaXplb2Yo
c3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQkJaWYgKFNDVFBfQlVGX0xFTiht
KSA8IGxlbikgewotCQkJaWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkgPT0gMCkgewotCQkJCVND
VFBfUFJJTlRGKCJDYW4gbm90IGdldCB0aGUgVURQL0lQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1
Zi5cbiIpOwotCQkJCXJldHVybjsKLQkJCX0KLQkJCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7
Ci0JCX0KLQkJdWRwID0gKHN0cnVjdCB1ZHBoZHIgKikoaXAgKyAxKTsKLQl9IGVsc2UgewotCQl1
ZHAgPSBOVUxMOwotCX0KLQotCWlmICghdXNlX3VkcF90dW5uZWxpbmcpIHsKLQkJaWYgKGlwLT5p
cF9zcmMuc19hZGRyID09IElOQUREUl9BTlkpIHsKLQkJCS8qIFRPRE8gZ2V0IGFkZHIgb2Ygb3V0
Z29pbmcgaW50ZXJmYWNlICovCi0JCQlTQ1RQX1BSSU5URigiV2h5IGRpZCB0aGUgU0NUUCBpbXBs
ZW1lbnRhdGlvbiBkaWQgbm90IGNob29zZSBhIHNvdXJjZSBhZGRyZXNzP1xuIik7Ci0JCX0KLQkJ
LyogVE9ETyBuZWVkIHRvIHdvcnJ5IGFib3V0IHJvLT5yb19kc3QgYXMgaW4gaXBfb3V0cHV0PyAq
LwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRlZmluZWQgKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpIHx8IChkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpICYmIChf
X0ZyZWVCU0RfdmVyc2lvbiA+PSAxMTAwMDMwKSkKLQkJLyogbmVlZCB0byBwdXQgY2VydGFpbiBm
aWVsZHMgaW50byBuZXR3b3JrIG9yZGVyIGZvciBMaW51eCAqLwotCQlpcC0+aXBfbGVuID0gaHRv
bnMoaXAtPmlwX2xlbik7Ci0JCWlwLT5pcF9vZmYgPSAwOwotI2VuZGlmCi0JfQotCi0JbWVtc2V0
KCh2b2lkICopJmRzdCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCWRzdC5zaW5f
ZmFtaWx5ID0gQUZfSU5FVDsKLQlkc3Quc2luX2FkZHIuc19hZGRyID0gaXAtPmlwX2RzdC5zX2Fk
ZHI7Ci0jaWZkZWYgSEFWRV9TSU5fTEVOCi0JZHN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKTsKLSNlbmRpZgotCWlmICh1c2VfdWRwX3R1bm5lbGluZykgewotCQlkc3Quc2lu
X3BvcnQgPSB1ZHAtPnVoX2Rwb3J0OwotCX0gZWxzZSB7Ci0JCWRzdC5zaW5fcG9ydCA9IDA7Ci0J
fQotCi0JLyogdHdlYWsgdGhlIG1idWYgY2hhaW4gKi8KLQlpZiAodXNlX3VkcF90dW5uZWxpbmcp
IHsKLQkJbV9hZGoobSwgc2l6ZW9mKHN0cnVjdCBpcCkgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikp
OwotCX0KLQotCXNlbmRfbGVuID0gU0NUUF9IRUFERVJfTEVOKG0pOyAvKiBsZW5ndGggb2YgZW50
aXJlIHBhY2tldCAqLwotCXNlbmRfY291bnQgPSAwOwotCWZvciAoaW92Y250ID0gMDsgbSAhPSBO
VUxMICYmIGlvdmNudCA8IE1BWExFTl9NQlVGX0NIQUlOOyBtID0gbS0+bV9uZXh0LCBpb3ZjbnQr
KykgewotI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCQlzZW5kX2lvdmVj
W2lvdmNudF0uaW92X2Jhc2UgPSAoY2FkZHJfdCltLT5tX2RhdGE7Ci0JCXNlbmRfaW92ZWNbaW92
Y250XS5pb3ZfbGVuID0gU0NUUF9CVUZfTEVOKG0pOwotCQlzZW5kX2NvdW50ICs9IHNlbmRfaW92
ZWNbaW92Y250XS5pb3ZfbGVuOwotI2Vsc2UKLQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmJ1ZiA9IChj
YWRkcl90KW0tPm1fZGF0YTsKLQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbiA9IFNDVFBfQlVGX0xF
TihtKTsKLQkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0ubGVuOwotI2VuZGlmCi0J
fQotCi0JaWYgKG0gIT0gTlVMTCkgewotCQlTQ1RQX1BSSU5URigibWJ1ZiBjaGFpbiBjb3VsZG4n
dCBiZSBjb3BpZWQgY29tcGxldGVseVxuIik7Ci0JCWdvdG8gZnJlZV9tYnVmOwotCX0KLQotI2lm
ICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotCW1zZ19oZHIubXNnX25hbWUgPSAo
c3RydWN0IHNvY2thZGRyICopICZkc3Q7Ci0JbXNnX2hkci5tc2dfbmFtZWxlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOwotCW1zZ19oZHIubXNnX2lvdiA9IHNlbmRfaW92ZWM7Ci0JbXNn
X2hkci5tc2dfaW92bGVuID0gaW92Y250OwotCW1zZ19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOwot
CW1zZ19oZHIubXNnX2NvbnRyb2xsZW4gPSAwOwotCW1zZ19oZHIubXNnX2ZsYWdzID0gMDsKLQot
CWlmICgoIXVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3
c2N0cCkgIT0gLTEpKSB7Ci0JCWlmICgocmVzID0gc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwKSwgJm1zZ19oZHIsIE1TR19ET05UV0FJVCkpICE9IHNlbmRfbGVuKSB7Ci0J
CQkqcmVzdWx0ID0gZXJybm87Ci0JCX0KLQl9Ci0JaWYgKCh1c2VfdWRwX3R1bm5lbGluZykgJiYg
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSkgewotCQlpZiAoKHJlcyA9
IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksICZtc2dfaGRyLCBNU0df
RE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgewotCQkJKnJlc3VsdCA9IGVycm5vOwotCQl9Ci0JfQot
I2Vsc2UKLQl3aW5fbXNnX2hkci5uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmZHN0OwotCXdp
bl9tc2dfaGRyLm5hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKLQl3aW5fbXNn
X2hkci5scEJ1ZmZlcnMgPSAoTFBXU0FCVUYpc2VuZF9pb3ZlYzsKLQl3aW5fbXNnX2hkci5kd0J1
ZmZlckNvdW50ID0gaW92Y250OwotCXdpbmJ1Zi5sZW4gPSAwOwotCXdpbmJ1Zi5idWYgPSBOVUxM
OwotCXdpbl9tc2dfaGRyLkNvbnRyb2wgPSB3aW5idWY7Ci0Jd2luX21zZ19oZHIuZHdGbGFncyA9
IDA7Ci0KLQlpZiAoKCF1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3Jhd3NjdHApICE9IC0xKSkgewotCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApLCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9zZW50
X2xlbiwgd2luX21zZ19oZHIuZHdGbGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2luX21z
Z19oZHIubmFtZWxlbiwgTlVMTCwgTlVMTCkgIT0gMCkgewotCQkJKnJlc3VsdCA9IFdTQUdldExh
c3RFcnJvcigpOwotCQl9IGVsc2UgaWYgKHdpbl9zZW50X2xlbiAhPSBzZW5kX2xlbikgewotCQkJ
KnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOwotCQl9Ci0JfQotCWlmICgodXNlX3VkcF90dW5u
ZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSAhPSAtMSkpIHsKLQkJ
aWYgKFdTQVNlbmRUbyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgKExQV1NBQlVG
KSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3Ms
IHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwp
ICE9IDApIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfSBlbHNlIGlmICh3
aW5fc2VudF9sZW4gIT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3Io
KTsKLQkJfQotCX0KLSNlbmRpZgotZnJlZV9tYnVmOgotCXNjdHBfbV9mcmVlbShtX29yaWcpOwot
fQotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChJTkVUNikKLXZvaWQgc2N0cF91c2Vyc3BhY2VfaXA2
X291dHB1dChpbnQgKnJlc3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgcm91dGVfaW42ICpybywgdm9pZCAq
c3RjYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMy
X3QgdnJmX2lkKQotewotCXN0cnVjdCBtYnVmICptOwotCXN0cnVjdCBtYnVmICptX29yaWc7Ci0J
aW50IGlvdmNudDsKLQlpbnQgc2VuZF9sZW47Ci0JaW50IGxlbjsKLQlpbnQgc2VuZF9jb3VudDsK
LQlzdHJ1Y3QgaXA2X2hkciAqaXA2OwotCXN0cnVjdCB1ZHBoZHIgKnVkcDsKLSNpZiAhZGVmaW5l
ZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlpbnQgcmVzOwotI2VuZGlmCi0Jc3RydWN0IHNv
Y2thZGRyX2luNiBkc3Q7Ci0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLQlX
U0FNU0cgd2luX21zZ19oZHI7Ci0JRFdPUkQgd2luX3NlbnRfbGVuOwotCVdTQUJVRiBzZW5kX2lv
dmVjW01BWExFTl9NQlVGX0NIQUlOXTsKLQlXU0FCVUYgd2luYnVmOwotI2Vsc2UKLQlzdHJ1Y3Qg
aW92ZWMgc2VuZF9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07Ci0Jc3RydWN0IG1zZ2hkciBtc2df
aGRyOwotI2VuZGlmCi0JaW50IHVzZV91ZHBfdHVubmVsaW5nOwotCi0JKnJlc3VsdCA9IDA7Ci0K
LQltID0gU0NUUF9IRUFERVJfVE9fQ0hBSU4ob19wYWspOwotCW1fb3JpZyA9IG07Ci0KLQlsZW4g
PSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpOwotCi0JaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikg
ewotCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7Ci0JCQlTQ1RQX1BSSU5URigi
Q2FuIG5vdCBnZXQgdGhlIElQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOwotCQkJcmV0
dXJuOwotCQl9Ci0JfQotCi0JaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKLQl1c2Vf
dWRwX3R1bm5lbGluZyA9IChpcDYtPmlwNl9ueHQgPT0gSVBQUk9UT19VRFApOwotCi0JaWYgKHVz
ZV91ZHBfdHVubmVsaW5nKSB7Ci0JCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcikgKyBzaXpl
b2Yoc3RydWN0IHVkcGhkcik7Ci0JCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsKLQkJCWlm
ICgobSA9IG1fcHVsbHVwKG0sIGxlbikpID09IDApIHsKLQkJCQlTQ1RQX1BSSU5URigiQ2FuIG5v
dCBnZXQgdGhlIFVEUC9JUCBoZWFkZXIgaW4gdGhlIGZpcnN0IG1idWYuXG4iKTsKLQkJCQlyZXR1
cm47Ci0JCQl9Ci0JCQlpcDYgPSBtdG9kKG0sIHN0cnVjdCBpcDZfaGRyICopOwotCQl9Ci0JCXVk
cCA9IChzdHJ1Y3QgdWRwaGRyICopKGlwNiArIDEpOwotCX0gZWxzZSB7Ci0JCXVkcCA9IE5VTEw7
Ci0JfQotCi0JaWYgKCF1c2VfdWRwX3R1bm5lbGluZykgewotCQlpZiAoaXA2LT5pcDZfc3JjLnM2
X2FkZHIgPT0gaW42YWRkcl9hbnkuczZfYWRkcikgewotCQkJLyogVE9ETyBnZXQgYWRkciBvZiBv
dXRnb2luZyBpbnRlcmZhY2UgKi8KLQkJCVNDVFBfUFJJTlRGKCJXaHkgZGlkIHRoZSBTQ1RQIGlt
cGxlbWVudGF0aW9uIGRpZCBub3QgY2hvb3NlIGEgc291cmNlIGFkZHJlc3M/XG4iKTsKLQkJfQot
CQkvKiBUT0RPIG5lZWQgdG8gd29ycnkgYWJvdXQgcm8tPnJvX2RzdCBhcyBpbiBpcF9vdXRwdXQ/
ICovCi0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwgZGVmaW5lZCAoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKLQkJLyogbmVlZCB0byBwdXQgY2VydGFpbiBmaWVsZHMgaW50byBu
ZXR3b3JrIG9yZGVyIGZvciBMaW51eCAqLwotCQlpcDYtPmlwNl9wbGVuID0gaHRvbnMoaXA2LT5p
cDZfcGxlbik7Ci0jZW5kaWYKLQl9Ci0KLQltZW1zZXQoKHZvaWQgKikmZHN0LCAwLCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOwotCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwotCWRz
dC5zaW42X2FkZHIgPSBpcDYtPmlwNl9kc3Q7Ci0jaWZkZWYgSEFWRV9TSU42X0xFTgotCWRzdC5z
aW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSNlbmRpZgotCi0JaWYgKHVz
ZV91ZHBfdHVubmVsaW5nKSB7Ci0JCWRzdC5zaW42X3BvcnQgPSB1ZHAtPnVoX2Rwb3J0OwotCX0g
ZWxzZSB7Ci0JCWRzdC5zaW42X3BvcnQgPSAwOwotCX0KLQotCS8qIHR3ZWFrIHRoZSBtYnVmIGNo
YWluICovCi0JaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7Ci0JCW1fYWRqKG0sIHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikgKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwotCX0gZWxzZSB7Ci0JICBtX2Fk
aihtLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKLQl9Ci0KLQlzZW5kX2xlbiA9IFNDVFBfSEVB
REVSX0xFTihtKTsgLyogbGVuZ3RoIG9mIGVudGlyZSBwYWNrZXQgKi8KLQlzZW5kX2NvdW50ID0g
MDsKLQlmb3IgKGlvdmNudCA9IDA7IG0gIT0gTlVMTCAmJiBpb3ZjbnQgPCBNQVhMRU5fTUJVRl9D
SEFJTjsgbSA9IG0tPm1fbmV4dCwgaW92Y250KyspIHsKLSNpZiAhZGVmaW5lZCAoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKLQkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmlvdl9iYXNlID0gKGNhZGRyX3Qp
bS0+bV9kYXRhOwotCQlzZW5kX2lvdmVjW2lvdmNudF0uaW92X2xlbiA9IFNDVFBfQlVGX0xFTiht
KTsKLQkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0uaW92X2xlbjsKLSNlbHNlCi0J
CXNlbmRfaW92ZWNbaW92Y250XS5idWYgPSAoY2FkZHJfdCltLT5tX2RhdGE7Ci0JCXNlbmRfaW92
ZWNbaW92Y250XS5sZW4gPSBTQ1RQX0JVRl9MRU4obSk7Ci0JCXNlbmRfY291bnQgKz0gc2VuZF9p
b3ZlY1tpb3ZjbnRdLmxlbjsKLSNlbmRpZgotCX0KLQlpZiAobSAhPSBOVUxMKSB7Ci0JCVNDVFBf
UFJJTlRGKCJtYnVmIGNoYWluIGNvdWxkbid0IGJlIGNvcGllZCBjb21wbGV0ZWx5XG4iKTsKLQkJ
Z290byBmcmVlX21idWY7Ci0JfQotCi0jaWYgIWRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCi0JbXNnX2hkci5tc2dfbmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRzdDsKLQltc2df
aGRyLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCW1zZ19oZHIu
bXNnX2lvdiA9IHNlbmRfaW92ZWM7Ci0JbXNnX2hkci5tc2dfaW92bGVuID0gaW92Y250OwotCW1z
Z19oZHIubXNnX2NvbnRyb2wgPSBOVUxMOwotCW1zZ19oZHIubXNnX2NvbnRyb2xsZW4gPSAwOwot
CW1zZ19oZHIubXNnX2ZsYWdzID0gMDsKLQotCWlmICgoIXVzZV91ZHBfdHVubmVsaW5nKSAmJiAo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSkgewotCQlpZiAoKHJlcyA9
IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAmbXNnX2hkciwgTVNH
X0RPTlRXQUlUKSkgIT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBlcnJubzsKLQkJfQotCX0K
LQlpZiAoKHVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRw
c2N0cDYpICE9IC0xKSkgewotCQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfdWRwc2N0cDYpLCAmbXNnX2hkciwgTVNHX0RPTlRXQUlUKSkgIT0gc2VuZF9sZW4pIHsK
LQkJCSpyZXN1bHQgPSBlcnJubzsKLQkJfQotCX0KLSNlbHNlCi0Jd2luX21zZ19oZHIubmFtZSA9
IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRzdDsKLQl3aW5fbXNnX2hkci5uYW1lbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotCXdpbl9tc2dfaGRyLmxwQnVmZmVycyA9IChMUFdTQUJV
RilzZW5kX2lvdmVjOwotCXdpbl9tc2dfaGRyLmR3QnVmZmVyQ291bnQgPSBpb3ZjbnQ7Ci0Jd2lu
YnVmLmxlbiA9IDA7Ci0Jd2luYnVmLmJ1ZiA9IE5VTEw7Ci0Jd2luX21zZ19oZHIuQ29udHJvbCA9
IHdpbmJ1ZjsKLQl3aW5fbXNnX2hkci5kd0ZsYWdzID0gMDsKLQotCWlmICgoIXVzZV91ZHBfdHVu
bmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpICE9IC0xKSkgewot
CQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKExQV1NB
QlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3Rmxh
Z3MsIHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5V
TEwpICE9IDApIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfSBlbHNlIGlm
ICh3aW5fc2VudF9sZW4gIT0gc2VuZF9sZW4pIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJy
b3IoKTsKLQkJfQotCX0KLQlpZiAoKHVzZV91ZHBfdHVubmVsaW5nKSAmJiAoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpICE9IC0xKSkgewotCQlpZiAoV1NBU2VuZFRvKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgKExQV1NBQlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQs
ICZ3aW5fc2VudF9sZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2dfaGRyLm5hbWUsIChp
bnQpIHdpbl9tc2dfaGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsKLQkJCSpyZXN1bHQg
PSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfSBlbHNlIGlmICh3aW5fc2VudF9sZW4gIT0gc2VuZF9s
ZW4pIHsKLQkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKLQkJfQotCX0KLSNlbmRpZgot
ZnJlZV9tYnVmOgotCXNjdHBfbV9mcmVlbShtX29yaWcpOwotfQotI2VuZGlmCi0KLXZvaWQKLXVz
cnNjdHBfcmVnaXN0ZXJfYWRkcmVzcyh2b2lkICphZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9j
b25uIHNjb25uOwotCi0JbWVtc2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05O
X0xFTgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0j
ZW5kaWYKLQlzY29ubi5zY29ubl9wb3J0ID0gMDsKLQlzY29ubi5zY29ubl9hZGRyID0gYWRkcjsK
LQlzY3RwX2FkZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsCi0JICAgICAgICAgICAg
ICAgICAgICAgTlVMTCwKLQkgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotCSAgICAg
ICAgICAgICAgICAgICAgIDAsCi0JICAgICAgICAgICAgICAgICAgICAgImNvbm4iLAotCSAgICAg
ICAgICAgICAgICAgICAgIE5VTEwsCi0JICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzY29ubiwKLQkgICAgICAgICAgICAgICAgICAgICAwLAotCSAgICAgICAgICAgICAg
ICAgICAgIDApOwotfQotCi12b2lkCi11c3JzY3RwX2RlcmVnaXN0ZXJfYWRkcmVzcyh2b2lkICph
ZGRyKQotewotCXN0cnVjdCBzb2NrYWRkcl9jb25uIHNjb25uOwotCi0JbWVtc2V0KCZzY29ubiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7Ci0Jc2Nvbm4uc2Nvbm5fZmFtaWx5ID0g
QUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xFTgotCXNjb25uLnNjb25uX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7Ci0jZW5kaWYKLQlzY29ubi5zY29ubl9wb3J0ID0gMDsK
LQlzY29ubi5zY29ubl9hZGRyID0gYWRkcjsKLQlzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKFNDVFBf
REVGQVVMVF9WUkZJRCwKLQkgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2Nvbm4sCi0JICAgICAgICAgICAgICAgICAgICAgICAweGZmZmZmZmZmLAotCSAgICAgICAg
ICAgICAgICAgICAgICAgImNvbm4iKTsKLX0KLQotI2RlZmluZSBQUkVBTUJMRV9GT1JNQVQgIlxu
JWMgJTAyZDolMDJkOiUwMmQuJTA2bGQgIgotI2RlZmluZSBQUkVBTUJMRV9MRU5HVEggMTkKLSNk
ZWZpbmUgSEVBREVSICIwMDAwICIKLSNkZWZpbmUgVFJBSUxFUiAiIyBTQ1RQX1BBQ0tFVFxuIgot
Ci1jaGFyICoKLXVzcnNjdHBfZHVtcHBhY2tldChjb25zdCB2b2lkICpidWYsIHNpemVfdCBsZW4s
IGludCBvdXRib3VuZCkKLXsKLQlzaXplX3QgaSwgcG9zOwotCWNoYXIgKmR1bXBfYnVmLCAqcGFj
a2V0OwotI2lmZGVmIF9XSU4zMgotCXN0cnVjdCB0aW1lYiB0YjsKLQlzdHJ1Y3QgdG0gdDsKLSNl
bHNlCi0Jc3RydWN0IHRpbWV2YWwgdHY7Ci0Jc3RydWN0IHRtICp0OwotCXRpbWVfdCBzZWM7Ci0j
ZW5kaWYKLQotCWlmICgobGVuID09IDApIHx8IChidWYgPT0gTlVMTCkpIHsKLQkJcmV0dXJuIChO
VUxMKTsKLQl9Ci0JaWYgKChkdW1wX2J1ZiA9IG1hbGxvYyhQUkVBTUJMRV9MRU5HVEggKyBzdHJs
ZW4oSEVBREVSKSArIDMgKiBsZW4gKyBzdHJsZW4oVFJBSUxFUikgKyAxKSkgPT0gTlVMTCkgewot
CQlyZXR1cm4gKE5VTEwpOwotCX0KLQlwb3MgPSAwOwotI2lmZGVmIF9XSU4zMgotCWZ0aW1lKCZ0
Yik7Ci0JbG9jYWx0aW1lX3MoJnQsICZ0Yi50aW1lKTsKLQlfc25wcmludGZfcyhkdW1wX2J1Ziwg
UFJFQU1CTEVfTEVOR1RIICsgMSwgUFJFQU1CTEVfTEVOR1RILCBQUkVBTUJMRV9GT1JNQVQsCi0J
ICAgICAgICAgICAgb3V0Ym91bmQgPyAnTycgOiAnSScsCi0JICAgICAgICAgICAgdC50bV9ob3Vy
LCB0LnRtX21pbiwgdC50bV9zZWMsIChsb25nKSgxMDAwICogdGIubWlsbGl0bSkpOwotI2Vsc2UK
LQlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKLQlzZWMgPSAodGltZV90KXR2LnR2X3NlYzsKLQl0
ID0gbG9jYWx0aW1lKChjb25zdCB0aW1lX3QgKikmc2VjKTsKLQlzbnByaW50ZihkdW1wX2J1Ziwg
UFJFQU1CTEVfTEVOR1RIICsgMSwgUFJFQU1CTEVfRk9STUFULAotCSAgICAgICAgIG91dGJvdW5k
ID8gJ08nIDogJ0knLAotCSAgICAgICAgIHQtPnRtX2hvdXIsIHQtPnRtX21pbiwgdC0+dG1fc2Vj
LCAobG9uZyl0di50dl91c2VjKTsKLSNlbmRpZgotCXBvcyArPSBQUkVBTUJMRV9MRU5HVEg7Ci0j
aWZkZWYgX1dJTjMyCi0Jc3RybmNweV9zKGR1bXBfYnVmICsgcG9zLCBzdHJsZW4oSEVBREVSKSAr
IDEsIEhFQURFUiwgc3RybGVuKEhFQURFUikpOwotI2Vsc2UKLQlzdHJjcHkoZHVtcF9idWYgKyBw
b3MsIEhFQURFUik7Ci0jZW5kaWYKLQlwb3MgKz0gc3RybGVuKEhFQURFUik7Ci0JcGFja2V0ID0g
KGNoYXIgKilidWY7Ci0JZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7Ci0JCXVpbnQ4X3QgYnl0
ZSwgbG93LCBoaWdoOwotCi0JCWJ5dGUgPSAodWludDhfdClwYWNrZXRbaV07Ci0JCWhpZ2ggPSBi
eXRlIC8gMTY7Ci0JCWxvdyA9IGJ5dGUgJSAxNjsKLQkJZHVtcF9idWZbcG9zKytdID0gaGlnaCA8
IDEwID8gJzAnICsgaGlnaCA6ICdhJyArIChoaWdoIC0gMTApOwotCQlkdW1wX2J1Zltwb3MrK10g
PSBsb3cgPCAxMCA/ICcwJyArIGxvdyA6ICdhJyArIChsb3cgLSAxMCk7Ci0JCWR1bXBfYnVmW3Bv
cysrXSA9ICcgJzsKLQl9Ci0jaWZkZWYgX1dJTjMyCi0Jc3RybmNweV9zKGR1bXBfYnVmICsgcG9z
LCBzdHJsZW4oVFJBSUxFUikgKyAxLCBUUkFJTEVSLCBzdHJsZW4oVFJBSUxFUikpOwotI2Vsc2UK
LQlzdHJjcHkoZHVtcF9idWYgKyBwb3MsIFRSQUlMRVIpOwotI2VuZGlmCi0JcG9zICs9IHN0cmxl
bihUUkFJTEVSKTsKLQlkdW1wX2J1Zltwb3MrK10gPSAnXDAnOwotCXJldHVybiAoZHVtcF9idWYp
OwotfQotCi12b2lkCi11c3JzY3RwX2ZyZWVkdW1wYnVmZmVyKGNoYXIgKmJ1ZikKLXsKLQlmcmVl
KGJ1Zik7Ci19Ci0KLXZvaWQKLXVzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKHZvaWQpCi17
Ci0JU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9IDE7Ci19Ci0KLXZvaWQKLXVzcnNj
dHBfZGlzYWJsZV9jcmMzMmNfb2ZmbG9hZCh2b2lkKQotewotCVNDVFBfQkFTRV9WQVIoY3JjMzJj
X29mZmxvYWRlZCkgPSAwOwotfQotCi0vKiBDb21wdXRlIHRoZSBDUkMzMkMgaW4gbmV0d29yayBi
eXRlIG9yZGVyICovCi11aW50MzJfdAotdXNyc2N0cF9jcmMzMmModm9pZCAqYnVmZmVyLCBzaXpl
X3QgbGVuZ3RoKQotewotCXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOwotCi0JYmFzZSA9IGNh
bGN1bGF0ZV9jcmMzMmMoMHhmZmZmZmZmZiwgKHVuc2lnbmVkIGNoYXIgKilidWZmZXIsICh1bnNp
Z25lZCBpbnQpIGxlbmd0aCk7Ci0JYmFzZSA9IHNjdHBfZmluYWxpemVfY3JjMzJjKGJhc2UpOwot
CXJldHVybiAoYmFzZSk7Ci19Ci0KLXZvaWQKLXVzcnNjdHBfY29ubmlucHV0KHZvaWQgKmFkZHIs
IGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdWludDhfdCBlY25fYml0cykKLXsK
LQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzcmMsIGRzdDsKLQlzdHJ1Y3QgbWJ1ZiAqbTsKLQlzdHJ1
Y3Qgc2N0cGhkciAqc2g7Ci0Jc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwotCi0JU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOwotCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rw
c19pbnBhY2tldHMpOwotCW1lbXNldCgmc3JjLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pKTsKLQlzcmMuc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBIQVZFX1NDT05OX0xF
TgotCXNyYy5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwotI2VuZGlm
Ci0Jc3JjLnNjb25uX2FkZHIgPSBhZGRyOwotCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKTsKLQlkc3Quc2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKLSNpZmRlZiBI
QVZFX1NDT05OX0xFTgotCWRzdC5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pOwotI2VuZGlmCi0JZHN0LnNjb25uX2FkZHIgPSBhZGRyOwotCWlmICgobSA9IHNjdHBfZ2V0
X21idWZfZm9yX21zZygodW5zaWduZWQgaW50KWxlbmd0aCwgMSwgTV9OT1dBSVQsIDAsIE1UX0RB
VEEpKSA9PSBOVUxMKSB7Ci0JCXJldHVybjsKLQl9Ci0JbV9jb3B5YmFjayhtLCAwLCAoaW50KWxl
bmd0aCwgKGNhZGRyX3QpYnVmZmVyKTsKLQlpZiAoU0NUUF9CVUZfTEVOKG0pIDwgKGludCkoc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpKSB7Ci0J
CWlmICgobSA9IG1fcHVsbHVwKG0sIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpKSkgPT0gTlVMTCkgewotCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
aGRyb3BzKTsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlzaCA9IG10b2QobSwgc3RydWN0IHNjdHBo
ZHIgKik7OwotCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6
ZW9mKHN0cnVjdCBzY3RwaGRyKSk7Ci0Jc3JjLnNjb25uX3BvcnQgPSBzaC0+c3JjX3BvcnQ7Ci0J
ZHN0LnNjb25uX3BvcnQgPSBzaC0+ZGVzdF9wb3J0OwotCXNjdHBfY29tbW9uX2lucHV0X3Byb2Nl
c3NpbmcoJm0sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cGhkciksIChpbnQpbGVuZ3RoLAotCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCi0JICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKLQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKLSNpZiAhZGVmaW5lZChTQ1RQX1dJVEhfTk9f
Q1NVTSkKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoY3JjMzJj
X29mZmxvYWRlZCkgPT0gMSA/IDAgOiAxLAotI2VuZGlmCi0JICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlY25fYml0cywKLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfREVG
QVVMVF9WUkZJRCwgMCk7Ci0JaWYgKG0pIHsKLQkJc2N0cF9tX2ZyZWVtKG0pOwotCX0KLQlyZXR1
cm47Ci19Ci0KLQotI2RlZmluZSBVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKF9fZmllbGQpIFwKLXZv
aWQgdXNyc2N0cF9zeXNjdGxfc2V0XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKSB7IFwKLQlT
Q1RQX0JBU0VfU1lTQ1RMKF9fZmllbGQpID0gdmFsdWU7IFwKLX0KLQotVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX3NlbmRzcGFjZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9yZWN2
c3BhY2UpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfYXV0b19hc2NvbmYpCi1VU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfbXVsdGlwbGVfYXNjb25mcykKLVVTUlNDVFBfU1lTQ1RMX1NF
VF9ERUYoc2N0cF9lY25fZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3ByX2Vu
YWJsZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hdXRoX2VuYWJsZSkKLVVTUlNDVFBf
U1lTQ1RMX1NFVF9ERUYoc2N0cF9hc2NvbmZfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX3JlY29uZmlnX2VuYWJsZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ucnNh
Y2tfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BrdGRyb3BfZW5hYmxlKQot
I2lmICFkZWZpbmVkKFNDVFBfV0lUSF9OT19DU1VNKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX25vX2NzdW1fb25fbG9vcGJhY2spCi0jZW5kaWYKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYo
c2N0cF9wZWVyX2NodW5rX29oKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21heF9idXJz
dF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21heF9jaHVua3Nfb25fcXVl
dWUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaGFzaHRibHNpemUpCi1VU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfcGNidGJsc2l6ZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0
cF9taW5fc3BsaXRfcG9pbnQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfY2h1bmtzY2Fs
ZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0
KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3NhY2tfZnJlcV9kZWZhdWx0KQotVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQpCi1VU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpCi1VU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RF
RihzY3RwX3J0b19tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ydG9f
bWluX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnRvX2luaXRpYWxfZGVm
YXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVsdCkK
LVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KQot
VVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0KQotVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lT
Q1RMX1NFVF9ERUYoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NF
VF9ERUYoc2N0cF9hZGRfbW9yZV90aHJlc2hvbGQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX25yX291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYo
c2N0cF9jbXRfb25fb2ZmKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2NtdF91c2VfZGFj
KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KQot
VVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25hdF9mcmllbmRseSkKLVVTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF9MMl9hYmNfdmFyaWFibGUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZG9f
ZHJhaW4pCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaGJfbWF4YnVyc3QpCi1VU1JTQ1RQ
X1NZU0NUTF9TRVRfREVGKHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQpCi1VU1JT
Q1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWluX3Jlc2lkdWFsKQotVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX21heF9yZXRyYW5fY2h1bmspCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBf
bG9nZ2luZ19sZXZlbCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X2NjX21v
ZHVsZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2
ZSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9tb2JpbGl0eV9iYXNlKQotVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmKQotVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KQotVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYo
c2N0cF9lbmFibGVfc2Fja19pbW1lZGlhdGVseSkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0
cF92dGFnX3RpbWVfd2FpdCkKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ibGFja2hvbGUp
Ci1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGlhZ19pbmZvX2NvZGUpCi1VU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfZGVmYXVsdF9zc19tb2R1bGUpCi1VU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0dmFy
X2J3KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0dHZhcl9ydHQpCi1VU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfcnR0dmFyX2VxcmV0KQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX3N0ZWFkeV9zdGVwKQotVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3VzZV9kY2NjX2Vj
bikKLVVTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9idWZmZXJfc3BsaXR0aW5nKQotVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX2luaXRpYWxfY3duZCkKLSNpZmRlZiBTQ1RQX0RFQlVHCi1V
U1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVidWdfb24pCi0jZW5kaWYKLQotI2RlZmluZSBV
U1JTQ1RQX1NZU0NUTF9HRVRfREVGKF9fZmllbGQpIFwKLXVpbnQzMl90IHVzcnNjdHBfc3lzY3Rs
X2dldF8gIyMgX19maWVsZCh2b2lkKSB7IFwKLQlyZXR1cm4gU0NUUF9CQVNFX1NZU0NUTChfX2Zp
ZWxkKTsgXAotfQotCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2VuZHNwYWNlKQotVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3JlY3ZzcGFjZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9hdXRvX2FzY29uZikKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tdWx0aXBs
ZV9hc2NvbmZzKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2Vjbl9lbmFibGUpCi1VU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcHJfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2F1dGhfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2FzY29uZl9l
bmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcmVjb25maWdfZW5hYmxlKQotVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX25yc2Fja19lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9H
RVRfREVGKHNjdHBfcGt0ZHJvcF9lbmFibGUpCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NT
VU0pCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykKLSNl
bmRpZgotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3BlZXJfY2h1bmtfb2gpCi1VU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9H
RVRfREVGKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYo
c2N0cF9oYXNodGJsc2l6ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wY2J0YmxzaXpl
KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX21pbl9zcGxpdF9wb2ludCkKLVVTUlNDVFBf
U1lTQ1RMX0dFVF9ERUYoc2N0cF9jaHVua3NjYWxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNj
dHBfc2Fja19mcmVxX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc3lzdGVt
X2ZyZWVfcmVzY19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hc29jX2ZyZWVf
cmVzY19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9oZWFydGJlYXRfaW50ZXJ2
YWxfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wbXR1X3JhaXNlX3RpbWVf
ZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1l
X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2Rl
ZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfcnRvX21heF9kZWZhdWx0KQotVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0b19taW5fZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBf
aW5pdF9ydHhfbWF4X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYXNzb2Nf
cnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3BhdGhfcnR4X21h
eF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2FkZF9tb3JlX3RocmVzaG9s
ZCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1
bHQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZh
dWx0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2NtdF9vbl9vZmYpCi1VU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfY210X3VzZV9kYWMpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNj
dHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBf
bmF0X2ZyaWVuZGx5KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX0wyX2FiY192YXJpYWJs
ZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKLVVT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kb19kcmFpbikKLVVTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9oYl9tYXhidXJzdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hYm9ydF9p
Zl9vbmVfMl9vbmVfaGl0c19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9taW5f
cmVzaWR1YWwpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbWF4X3JldHJhbl9jaHVuaykK
LVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9sb2dnaW5nX2xldmVsKQotVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX2RlZmF1bHRfY2NfbW9kdWxlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX21vYmlsaXR5X2Jhc2UpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbW9iaWxpdHlf
ZmFzdGhhbmRvZmYpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdHNfaW5jbHVkZV9u
YXRfZnJpZW5kbHkpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdWRwX3R1bm5lbGluZ19w
b3J0KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5
KQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3Z0YWdfdGltZV93YWl0KQotVVNSU0NUUF9T
WVNDVExfR0VUX0RFRihzY3RwX2JsYWNraG9sZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0
cF9kaWFnX2luZm9fY29kZSkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9mcl9tYXhfYnVy
c3RfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9wYXRoX3BmX3RocmVzaG9s
ZCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKLVVTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfYncpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfcnR0dmFyX3J0dCkKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfZXFy
ZXQpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfc3RlYWR5X3N0ZXApCi1VU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfdXNlX2RjY2NfZWNuKQotVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX2J1ZmZlcl9zcGxpdHRpbmcpCi1VU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdGlh
bF9jd25kKQotI2lmZGVmIFNDVFBfREVCVUcKLVVTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9k
ZWJ1Z19vbikKLSNlbmRpZgotCi12b2lkIHVzcnNjdHBfZ2V0X3N0YXQoc3RydWN0IHNjdHBzdGF0
ICpzdGF0KQotewotCSpzdGF0ID0gU0NUUF9CQVNFX1NUQVRTOwotfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNlcl9zb2NrZXR2YXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZmYzgyNzBlZmRhNDZmOGJjYzk5ZTliNTE4NDI2NWYw
NjhmMjljOTQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDg2MCArMCwwIEBA
Ci0vKi0KLSAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk5MCwgMTk5MwotICoJVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
LSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0vKiBfX1VzZXJz
cGFjZV9fIHZlcnNpb24gb2YgPHN5cy9zb2NrZXR2YXIuaD4gZ29lcyBoZXJlLiovCi0KLSNpZm5k
ZWYgX1VTRVJfU09DS0VUVkFSX0hfCi0jZGVmaW5lIF9VU0VSX1NPQ0tFVFZBUl9IXwotCi0jaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0j
aW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotLyogI2luY2x1ZGUgPHN5cy9zZWxpbmZvLmg+
ICovIC8qX19Vc2Vyc3BhY2VfXyBhbHRlcm5hdGl2ZT8qLwkvKiBmb3Igc3RydWN0IHNlbGluZm8g
Ki8KLS8qICNpbmNsdWRlIDxzeXMvX2xvY2suaD4gIHdhcyAwIGJ5dGUgZmlsZSAqLwotLyogI2lu
Y2x1ZGUgPHN5cy9fbXV0ZXguaD4gd2FzIDAgYnl0ZSBmaWxlICovCi0vKiAjaW5jbHVkZSA8c3lz
L19zeC5oPiAqLyAvKl9fVXNlcnNwYWNlX18gYWx0ZXJuYXRpdmU/Ki8KLSNpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19EcmFnb25GbHkpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVC
U0QpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05ldEJTRCkgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKLSNpbmNs
dWRlIDxzeXMvdWlvLmg+Ci0jZW5kaWYKLSNkZWZpbmUgU09DS19NQVhBRERSTEVOIDI1NQotI2lm
ICFkZWZpbmVkKE1TR19OT1RJRklDQVRJT04pCi0jZGVmaW5lIE1TR19OT1RJRklDQVRJT04gMHgy
MDAwICAgICAgICAgLyogU0NUUCBub3RpZmljYXRpb24gKi8KLSNlbmRpZgotI2RlZmluZSBTQ1RQ
X1NPX0xJTkdFUiAgICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfU09fQUNDRVBUQ09OTiAweDAwMDIK
LSNkZWZpbmUgU1NfQ0FOVFJDVk1PUkUgMHgwMjAKLSNkZWZpbmUgU1NfQ0FOVFNFTkRNT1JFIDB4
MDEwCi0KLSNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkg
fHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19PcGVuQlNEKSB8fCBkZWZpbmVkIChfX1VzZXJzcGFj
ZV9vc19XaW5kb3dzKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX05hQ2wpCi0jZGVmaW5lIFVJ
T19NQVhJT1YgMTAyNAotI2RlZmluZSBFUkVTVEFSVCAoLTEpCi0jZW5kaWYKLQotI2lmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0
QlNEKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19PcGVuQlNEKQotZW51bQl1aW9fcncgeyBV
SU9fUkVBRCwgVUlPX1dSSVRFIH07Ci0jZW5kaWYKLQotI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX05ldEJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkKLS8qIFNlZ21l
bnQgZmxhZyB2YWx1ZXMuICovCi1lbnVtIHVpb19zZWcgewotCVVJT19VU0VSU1BBQ0UsCQkvKiBm
cm9tIHVzZXIgZGF0YSBzcGFjZSAqLwotCVVJT19TWVNTUEFDRQkJLyogZnJvbSBzeXN0ZW0gc3Bh
Y2UgKi8KLX07Ci0jZW5kaWYKLQotc3RydWN0IHByb2MgewotICAgIGludCBzdHViOyAvKiBzdHJ1
Y3QgcHJvYyBpcyBhIGR1bW15IGZvciBfX1VzZXJzcGFjZV9fICovCi19OwotCi1NQUxMT0NfREVD
TEFSRShNX0FDQ0YpOwotTUFMTE9DX0RFQ0xBUkUoTV9QQ0IpOwotTUFMTE9DX0RFQ0xBUkUoTV9T
T05BTUUpOwotCi0vKiBfX1VzZXJzcGFjZV9fIEFyZSB0aGVzZSBhbGwgdGhlIGZpZWxkcyB3ZSBu
ZWVkPwotICogUmVtb3Zpbmcgc3RydWN0IHRocmVhZCAqdWlvX3RkOyAgICBvd25lciBmaWVsZAot
Ki8KLXN0cnVjdCB1aW8gewotICAgIHN0cnVjdAlpb3ZlYyAqdWlvX2lvdjsJCS8qIHNjYXR0ZXIv
Z2F0aGVyIGxpc3QgKi8KLSAgICBpbnQJCXVpb19pb3ZjbnQ7CQkvKiBsZW5ndGggb2Ygc2NhdHRl
ci9nYXRoZXIgbGlzdCAqLwotICAgIG9mZl90CXVpb19vZmZzZXQ7CQkvKiBvZmZzZXQgaW4gdGFy
Z2V0IG9iamVjdCAqLwotICAgIHNzaXplX3QgCXVpb19yZXNpZDsJCS8qIHJlbWFpbmluZyBieXRl
cyB0byBwcm9jZXNzICovCi0gICAgZW51bQl1aW9fc2VnIHVpb19zZWdmbGc7CS8qIGFkZHJlc3Mg
c3BhY2UgKi8KLSAgICBlbnVtCXVpb19ydyB1aW9fcnc7CQkvKiBvcGVyYXRpb24gKi8KLX07Ci0K
LQotLyogX19Vc2Vyc3BhY2VfXyAqLwotCi0vKgotICogS2VybmVsIHN0cnVjdHVyZSBwZXIgc29j
a2V0LgotICogQ29udGFpbnMgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXIgcXVldWVzLAotICogaGFu
ZGxlIG9uIHByb3RvY29sIGFuZCBwb2ludGVyIHRvIHByb3RvY29sCi0gKiBwcml2YXRlIGRhdGEg
YW5kIGVycm9yIGluZm9ybWF0aW9uLgotICovCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKLSNkZWZpbmUgQUZfUk9VVEUgIDE3Ci10eXBlZGVmIF9faW50MzIgcGlkX3Q7Ci10
eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgdWlkX3Q7Ci1lbnVtIHNpZ1R5cGUgewotCVNJR05BTCA9
IDAsCi0JQlJPQURDQVNUID0gMSwKLQlNQVhfRVZFTlRTID0gMgotfTsKLSNlbmRpZgotCi0vKi0K
LSAqIExvY2tpbmcga2V5IHRvIHN0cnVjdCBzb2NrZXQ6Ci0gKiAoYSkgY29uc3RhbnQgYWZ0ZXIg
YWxsb2NhdGlvbiwgbm8gbG9ja2luZyByZXF1aXJlZC4KLSAqIChiKSBsb2NrZWQgYnkgU09DS19M
T0NLKHNvKS4KLSAqIChjKSBsb2NrZWQgYnkgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KS4KLSAq
IChkKSBsb2NrZWQgYnkgU09DS0JVRl9MT0NLKCZzby0+c29fc25kKS4KLSAqIChlKSBsb2NrZWQg
YnkgQUNDRVBUX0xPQ0soKS4KLSAqIChmKSBub3QgbG9ja2VkIHNpbmNlIGludGVnZXIgcmVhZHMv
d3JpdGVzIGFyZSBhdG9taWMuCi0gKiAoZykgdXNlZCBvbmx5IGFzIGEgc2xlZXAvd2FrZXVwIGFk
ZHJlc3MsIG5vIHZhbHVlLgotICogKGgpIGxvY2tlZCBieSBnbG9iYWwgbXV0ZXggc29fZ2xvYmFs
X210eC4KLSAqLwotc3RydWN0IHNvY2tldCB7Ci0JaW50CXNvX2NvdW50OwkJLyogKGIpIHJlZmVy
ZW5jZSBjb3VudCAqLwotCXNob3J0CXNvX3R5cGU7CQkvKiAoYSkgZ2VuZXJpYyB0eXBlLCBzZWUg
c29ja2V0LmggKi8KLQlzaG9ydAlzb19vcHRpb25zOwkJLyogZnJvbSBzb2NrZXQgY2FsbCwgc2Vl
IHNvY2tldC5oICovCi0Jc2hvcnQJc29fbGluZ2VyOwkJLyogdGltZSB0byBsaW5nZXIgd2hpbGUg
Y2xvc2luZyAqLwotCXNob3J0CXNvX3N0YXRlOwkJLyogKGIpIGludGVybmFsIHN0YXRlIGZsYWdz
IFNTXyogKi8KLQlpbnQJc29fcXN0YXRlOwkJLyogKGUpIGludGVybmFsIHN0YXRlIGZsYWdzIFNR
XyogKi8KLQl2b2lkCSpzb19wY2I7CQkvKiBwcm90b2NvbCBjb250cm9sIGJsb2NrICovCi0JaW50
CXNvX2RvbTsKLS8qCi0gKiBWYXJpYWJsZXMgZm9yIGNvbm5lY3Rpb24gcXVldWluZy4KLSAqIFNv
Y2tldCB3aGVyZSBhY2NlcHRzIG9jY3VyIGlzIHNvX2hlYWQgaW4gYWxsIHN1YnNpZGlhcnkgc29j
a2V0cy4KLSAqIElmIHNvX2hlYWQgaXMgMCwgc29ja2V0IGlzIG5vdCByZWxhdGVkIHRvIGFuIGFj
Y2VwdC4KLSAqIEZvciBoZWFkIHNvY2tldCBzb19pbmNvbXAgcXVldWVzIHBhcnRpYWxseSBjb21w
bGV0ZWQgY29ubmVjdGlvbnMsCi0gKiB3aGlsZSBzb19jb21wIGlzIGEgcXVldWUgb2YgY29ubmVj
dGlvbnMgcmVhZHkgdG8gYmUgYWNjZXB0ZWQuCi0gKiBJZiBhIGNvbm5lY3Rpb24gaXMgYWJvcnRl
ZCBhbmQgaXQgaGFzIHNvX2hlYWQgc2V0LCB0aGVuCi0gKiBpdCBoYXMgdG8gYmUgcHVsbGVkIG91
dCBvZiBlaXRoZXIgc29faW5jb21wIG9yIHNvX2NvbXAuCi0gKiBXZSBhbGxvdyBjb25uZWN0aW9u
cyB0byBxdWV1ZSB1cCBiYXNlZCBvbiBjdXJyZW50IHF1ZXVlIGxlbmd0aHMKLSAqIGFuZCBsaW1p
dCBvbiBudW1iZXIgb2YgcXVldWVkIGNvbm5lY3Rpb25zIGZvciB0aGlzIHNvY2tldC4KLSAqLwot
CXN0cnVjdAlzb2NrZXQgKnNvX2hlYWQ7CS8qIChlKSBiYWNrIHBvaW50ZXIgdG8gbGlzdGVuIHNv
Y2tldCAqLwotCVRBSUxRX0hFQUQoLCBzb2NrZXQpIHNvX2luY29tcDsJLyogKGUpIHF1ZXVlIG9m
IHBhcnRpYWwgdW5hY2NlcHRlZCBjb25uZWN0aW9ucyAqLwotCVRBSUxRX0hFQUQoLCBzb2NrZXQp
IHNvX2NvbXA7CS8qIChlKSBxdWV1ZSBvZiBjb21wbGV0ZSB1bmFjY2VwdGVkIGNvbm5lY3Rpb25z
ICovCi0JVEFJTFFfRU5UUlkoc29ja2V0KSBzb19saXN0OwkvKiAoZSkgbGlzdCBvZiB1bmFjY2Vw
dGVkIGNvbm5lY3Rpb25zICovCi0JdV9zaG9ydAlzb19xbGVuOwkJLyogKGUpIG51bWJlciBvZiB1
bmFjY2VwdGVkIGNvbm5lY3Rpb25zICovCi0JdV9zaG9ydAlzb19pbmNxbGVuOwkJLyogKGUpIG51
bWJlciBvZiB1bmFjY2VwdGVkIGluY29tcGxldGUKLQkJCQkJICAgY29ubmVjdGlvbnMgKi8KLQl1
X3Nob3J0CXNvX3FsaW1pdDsJCS8qIChlKSBtYXggbnVtYmVyIHF1ZXVlZCBjb25uZWN0aW9ucyAq
LwotCXNob3J0CXNvX3RpbWVvOwkJLyogKGcpIGNvbm5lY3Rpb24gdGltZW91dCAqLwotCXVzZXJs
YW5kX2NvbmRfdCB0aW1lb19jb25kOyAgICAgIC8qIHRpbWVvX2NvbmQgY29uZGl0aW9uIHZhcmlh
YmxlIGJlaW5nIHVzZWQgaW4gd2FrZXVwICovCi0KLQl1X3Nob3J0CXNvX2Vycm9yOwkJLyogKGYp
IGVycm9yIGFmZmVjdGluZyBjb25uZWN0aW9uICovCi0Jc3RydWN0CXNpZ2lvICpzb19zaWdpbzsJ
LyogW3NnXSBpbmZvcm1hdGlvbiBmb3IgYXN5bmMgSS9PIG9yCi0JCQkJCSAgIG91dCBvZiBiYW5k
IGRhdGEgKFNJR1VSRykgKi8KLQl1X2xvbmcJc29fb29ibWFyazsJCS8qIChjKSBjaGFycyB0byBv
b2IgbWFyayAqLwotCVRBSUxRX0hFQUQoLCBhaW9jYmxpc3QpIHNvX2Fpb2pvYnE7IC8qIEFJTyBv
cHMgd2FpdGluZyBvbiBzb2NrZXQgKi8KLS8qCi0gKiBWYXJpYWJsZXMgZm9yIHNvY2tldCBidWZm
ZXJpbmcuCi0gKi8KLQlzdHJ1Y3Qgc29ja2J1ZiB7Ci0JCS8qIF9fVXNlcnNwYWNlX18gTWFueSBv
ZiB0aGVzZSBmaWVsZHMgbWF5Ci0JCSAqIG5vdCBiZSByZXF1aXJlZCBmb3IgdGhlIHNjdHAgc3Rh
Y2suCi0JCSAqIENvbW1lbnRpbmcgb3V0IHRoZSBmb2xsb3dpbmcuCi0JCSAqIEluY2x1ZGluZyBw
dGhyZWFkIG11dGV4IGFuZCBjb25kaXRpb24gdmFyaWFibGUgdG8gYmUKLQkJICogdXNlZCBieSBz
YndhaXQsIHNvcndha2V1cCBhbmQgc293d2FrZXVwLgotCQkqLwotCQkvKiBzdHJ1Y3QJc2VsaW5m
byBzYl9zZWw7Ki8gLyogcHJvY2VzcyBzZWxlY3RpbmcgcmVhZC93cml0ZSAqLwotCQkvKiBzdHJ1
Y3QJbXR4IHNiX210eDsqLwkvKiBzb2NrYnVmIGxvY2sgKi8KLQkJLyogc3RydWN0CXN4IHNiX3N4
OyovCS8qIHByZXZlbnQgSS9PIGludGVybGFjaW5nICovCi0JCXVzZXJsYW5kX2NvbmRfdCBzYl9j
b25kOyAvKiBzb2NrYnVmIGNvbmRpdGlvbiB2YXJpYWJsZSAqLwotCQl1c2VybGFuZF9tdXRleF90
IHNiX210eDsgLyogc29ja2J1ZiBsb2NrIGFzc29jaWF0ZWQgd2l0aCBzYl9jb25kICovCi0JCXNo
b3J0CXNiX3N0YXRlOwkvKiAoYy9kKSBzb2NrZXQgc3RhdGUgb24gc29ja2J1ZiAqLwotI2RlZmlu
ZQlzYl9zdGFydHplcm8Jc2JfbWIKLQkJc3RydWN0CW1idWYgKnNiX21iOwkvKiAoYy9kKSB0aGUg
bWJ1ZiBjaGFpbiAqLwotCQlzdHJ1Y3QJbWJ1ZiAqc2JfbWJ0YWlsOyAvKiAoYy9kKSB0aGUgbGFz
dCBtYnVmIGluIHRoZSBjaGFpbiAqLwotCQlzdHJ1Y3QJbWJ1ZiAqc2JfbGFzdHJlY29yZDsJLyog
KGMvZCkgZmlyc3QgbWJ1ZiBvZiBsYXN0Ci0JCQkJCQkgKiByZWNvcmQgaW4gc29ja2V0IGJ1ZmZl
ciAqLwotCQlzdHJ1Y3QJbWJ1ZiAqc2Jfc25kcHRyOyAvKiAoYy9kKSBwb2ludGVyIGludG8gbWJ1
ZiBjaGFpbiAqLwotCQl1X2ludAlzYl9zbmRwdHJvZmY7CS8qIChjL2QpIGJ5dGUgb2Zmc2V0IG9m
IHB0ciBpbnRvIGNoYWluICovCi0JCXVfaW50CXNiX2NjOwkJLyogKGMvZCkgYWN0dWFsIGNoYXJz
IGluIGJ1ZmZlciAqLwotCQl1X2ludAlzYl9oaXdhdDsJLyogKGMvZCkgbWF4IGFjdHVhbCBjaGFy
IGNvdW50ICovCi0JCXVfaW50CXNiX21iY250OwkvKiAoYy9kKSBjaGFycyBvZiBtYnVmcyB1c2Vk
ICovCi0JCXVfaW50CXNiX21ibWF4OwkvKiAoYy9kKSBtYXggY2hhcnMgb2YgbWJ1ZnMgdG8gdXNl
ICovCi0JCXVfaW50CXNiX2N0bDsJCS8qIChjL2QpIG5vbi1kYXRhIGNoYXJzIGluIGJ1ZmZlciAq
LwotCQlpbnQJc2JfbG93YXQ7CS8qIChjL2QpIGxvdyB3YXRlciBtYXJrICovCi0JCWludAlzYl90
aW1lbzsJLyogKGMvZCkgdGltZW91dCBmb3IgcmVhZC93cml0ZSAqLwotCQlzaG9ydAlzYl9mbGFn
czsJLyogKGMvZCkgZmxhZ3MsIHNlZSBiZWxvdyAqLwotCX0gc29fcmN2LCBzb19zbmQ7Ci0vKgot
ICogQ29uc3RhbnRzIGZvciBzYl9mbGFncyBmaWVsZCBvZiBzdHJ1Y3Qgc29ja2J1Zi4KLSAqLwot
I2RlZmluZQlTQl9NQVgJCSgyNTYqMTAyNCkJLyogZGVmYXVsdCBmb3IgbWF4IGNoYXJzIGluIHNv
Y2tidWYgKi8KLSNkZWZpbmUgU0JfUkFXICAgICAgICAgICg2NCoxMDI0KjIpICAgIC8qQWxpZ25p
bmcgc28tPnNvX3Jjdi5zYl9oaXdhdCB3aXRoIHRoZSByZWNlaXZlIGJ1ZmZlciBzaXplIG9mIHJh
dyBzb2NrZXQqLwotLyoKLSAqIENvbnN0YW50cyBmb3Igc2JfZmxhZ3MgZmllbGQgb2Ygc3RydWN0
IHNvY2tidWYuCi0gKi8KLSNkZWZpbmUJU0JfV0FJVAkJMHgwNAkJLyogc29tZW9uZSBpcyB3YWl0
aW5nIGZvciBkYXRhL3NwYWNlICovCi0jZGVmaW5lCVNCX1NFTAkJMHgwOAkJLyogc29tZW9uZSBp
cyBzZWxlY3RpbmcgKi8KLSNkZWZpbmUJU0JfQVNZTkMJMHgxMAkJLyogQVNZTkMgSS9PLCBuZWVk
IHNpZ25hbHMgKi8KLSNkZWZpbmUJU0JfVVBDQUxMCTB4MjAJCS8qIHNvbWVvbmUgd2FudHMgYW4g
dXBjYWxsICovCi0jZGVmaW5lCVNCX05PSU5UUgkweDQwCQkvKiBvcGVyYXRpb25zIG5vdCBpbnRl
cnJ1cHRpYmxlICovCi0jZGVmaW5lCVNCX0FJTwkJMHg4MAkJLyogQUlPIG9wZXJhdGlvbnMgcXVl
dWVkICovCi0jZGVmaW5lCVNCX0tOT1RFCTB4MTAwCQkvKiBrZXJuZWwgbm90ZSBhdHRhY2hlZCAq
LwotI2RlZmluZQlTQl9BVVRPU0laRQkweDgwMAkJLyogYXV0b21hdGljYWxseSBzaXplIHNvY2tl
dCBidWZmZXIgKi8KLQotCXZvaWQJKCpzb191cGNhbGwpKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAq
LCBpbnQpOwotCXZvaWQJKnNvX3VwY2FsbGFyZzsKLQlzdHJ1Y3QJdWNyZWQgKnNvX2NyZWQ7CQkv
KiAoYSkgdXNlciBjcmVkZW50aWFscyAqLwotCXN0cnVjdAlsYWJlbCAqc29fbGFiZWw7CS8qIChi
KSBNQUMgbGFiZWwgZm9yIHNvY2tldCAqLwotCXN0cnVjdAlsYWJlbCAqc29fcGVlcmxhYmVsOwkv
KiAoYikgY2FjaGVkIE1BQyBsYWJlbCBmb3IgcGVlciAqLwotCS8qIE5COiBnZW5lcmF0aW9uIGNv
dW50IG11c3Qgbm90IGJlIGZpcnN0LiAqLwotCXVpbnQzMl90IHNvX2dlbmNudDsJCS8qIChoKSBn
ZW5lcmF0aW9uIGNvdW50ICovCi0Jdm9pZAkqc29fZW11bGRhdGE7CQkvKiAoYikgcHJpdmF0ZSBk
YXRhIGZvciBlbXVsYXRvcnMgKi8KLSAJc3RydWN0IHNvX2FjY2YgewotCQlzdHJ1Y3QJYWNjZXB0
X2ZpbHRlciAqc29fYWNjZXB0X2ZpbHRlcjsKLQkJdm9pZAkqc29fYWNjZXB0X2ZpbHRlcl9hcmc7
CS8qIHNhdmVkIGZpbHRlciBhcmdzICovCi0JCWNoYXIJKnNvX2FjY2VwdF9maWx0ZXJfc3RyOwkv
KiBzYXZlZCB1c2VyIGFyZ3MgKi8KLQl9ICpzb19hY2NmOwotfTsKLQotI2RlZmluZSBTQl9FTVBU
WV9GSVhVUChzYikgZG8gewkJCQkJCVwKLQlpZiAoKHNiKS0+c2JfbWIgPT0gTlVMTCkgewkJCQkJ
XAotCQkoc2IpLT5zYl9tYnRhaWwgPSBOVUxMOwkJCQkJXAotCQkoc2IpLT5zYl9sYXN0cmVjb3Jk
ID0gTlVMTDsJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQotCi0v
KgotICogR2xvYmFsIGFjY2VwdCBtdXRleCB0byBzZXJpYWxpemUgYWNjZXNzIHRvIGFjY2VwdCBx
dWV1ZXMgYW5kCi0gKiBmaWVsZHMgYXNzb2NpYXRlZCB3aXRoIG11bHRpcGxlIHNvY2tldHMuICBU
aGlzIGFsbG93cyB1cyB0bwotICogYXZvaWQgZGVmaW5pbmcgYSBsb2NrIG9yZGVyIGJldHdlZW4g
bGlzdGVuIGFuZCBhY2NlcHQgc29ja2V0cwotICogdW50aWwgc3VjaCB0aW1lIGFzIGl0IHByb3Zl
cyB0byBiZSBhIGdvb2QgaWRlYS4KLSAqLwotI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKLWV4dGVybiB1c2VybGFuZF9tdXRleF90IGFjY2VwdF9tdHg7Ci1leHRlcm4gdXNlcmxh
bmRfY29uZF90IGFjY2VwdF9jb25kOwotI2RlZmluZSBBQ0NFUFRfTE9DS19BU1NFUlQoKQotI2Rl
ZmluZQlBQ0NFUFRfTE9DSygpIGRvIHsgXAotCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZhY2NlcHRf
bXR4KTsgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DSygpCWRvIHsgXAotCUxl
YXZlQ3JpdGljYWxTZWN0aW9uKCZhY2NlcHRfbXR4KTsgXAotfSB3aGlsZSAoMCkKLSNkZWZpbmUJ
QUNDRVBUX1VOTE9DS19BU1NFUlQoKQotI2Vsc2UKLWV4dGVybiB1c2VybGFuZF9tdXRleF90IGFj
Y2VwdF9tdHg7Ci0KLWV4dGVybiB1c2VybGFuZF9jb25kX3QgYWNjZXB0X2NvbmQ7Ci0jaWZkZWYg
SU5WQVJJQU5UUwotI2RlZmluZQlBQ0NFUFRfTE9DSygpCUtBU1NFUlQocHRocmVhZF9tdXRleF9s
b2NrKCZhY2NlcHRfbXR4KSA9PSAwLCAoIiVzOiBhY2NlcHRfbXR4IGFscmVhZHkgbG9ja2VkIiwg
X19mdW5jX18pKQotI2RlZmluZQlBQ0NFUFRfVU5MT0NLKCkJS0FTU0VSVChwdGhyZWFkX211dGV4
X3VubG9jaygmYWNjZXB0X210eCkgPT0gMCwgKCIlczogYWNjZXB0X210eCBub3QgbG9ja2VkIiwg
X19mdW5jX18pKQotI2Vsc2UKLSNkZWZpbmUJQUNDRVBUX0xPQ0soKSAgICh2b2lkKXB0aHJlYWRf
bXV0ZXhfbG9jaygmYWNjZXB0X210eCkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DSygpICh2b2lkKXB0
aHJlYWRfbXV0ZXhfdW5sb2NrKCZhY2NlcHRfbXR4KQotI2VuZGlmCi0jZGVmaW5lCUFDQ0VQVF9M
T0NLX0FTU0VSVCgpIFwKLSAgICAgICAgICBLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdHJ5bG9jaygm
YWNjZXB0X210eCkgPT0gRUJVU1ksICgiJXM6IGFjY2VwdF9tdHggbm90IGxvY2tlZCIsIF9fZnVu
Y19fKSkKLSNkZWZpbmUJQUNDRVBUX1VOTE9DS19BU1NFUlQoKSBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCSAgS0FT
U0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2soJmFjY2VwdF9tdHgpID09IDAsICgiJXM6IGFjY2Vw
dF9tdHggIGxvY2tlZCIsIF9fZnVuY19fKSk7IFwKLQkgICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5s
b2NrKCZhY2NlcHRfbXR4KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi0gICAgICAgIH0gd2hpbGUgKDApCi0jZW5kaWYKLQotLyoKLSAqIFBlci1zb2Nr
ZXQgYnVmZmVyIG11dGV4IHVzZWQgdG8gcHJvdGVjdCBtb3N0IGZpZWxkcyBpbiB0aGUgc29ja2V0
Ci0gKiBidWZmZXIuCi0gKi8KLSNkZWZpbmUJU09DS0JVRl9NVFgoX3NiKSAoJihfc2IpLT5zYl9t
dHgpCi0jaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKLSNkZWZpbmUgU09DS0JV
Rl9MT0NLX0lOSVQoX3NiLCBfbmFtZSkgXAotCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24oU09D
S0JVRl9NVFgoX3NiKSkKLSNkZWZpbmUgU09DS0JVRl9MT0NLX0RFU1RST1koX3NiKSBEZWxldGVD
cml0aWNhbFNlY3Rpb24oU09DS0JVRl9NVFgoX3NiKSkKLSNkZWZpbmUgU09DS0JVRl9DT05EX0lO
SVQoX3NiKSBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoKCYoX3NiKS0+c2JfY29uZCkpCi0j
ZGVmaW5lIFNPQ0tCVUZfQ09ORF9ERVNUUk9ZKF9zYikgRGVsZXRlQ29uZGl0aW9uVmFyaWFibGUo
KCYoX3NiKS0+c2JfY29uZCkpCi0jZGVmaW5lIFNPQ0tfQ09ORF9JTklUKF9zbykgSW5pdGlhbGl6
ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zbyktPnRpbWVvX2NvbmQpKQotI2RlZmluZSBTT0NLX0NP
TkRfREVTVFJPWShfc28pIERlbGV0ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zbyktPnRpbWVvX2Nv
bmQpKQotI2RlZmluZSBTT0NLX0NPTkQoX3NvKSAoJihfc28pLT50aW1lb19jb25kKQotI2Vsc2UK
LSNpZmRlZiBJTlZBUklBTlRTCi0jZGVmaW5lIFNPQ0tCVUZfTE9DS19JTklUKF9zYiwgX25hbWUp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JcHRocmVhZF9tdXRleGF0
dHJfdCBtdXRleF9hdHRyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAotCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCi0JcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0
ZXhfYXR0ciwgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLKTsgIFwKLQlwdGhyZWFkX211dGV4X2lu
aXQoU09DS0JVRl9NVFgoX3NiKSwgJm11dGV4X2F0dHIpOyAgICAgICAgICAgICAgICAgXAotCXB0
aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4X2F0dHIpOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCi19IHdoaWxlICgwKQotI2Vsc2UKLSNkZWZpbmUgU09DS0JVRl9MT0NLX0lOSVQo
X3NiLCBfbmFtZSkgXAotCXB0aHJlYWRfbXV0ZXhfaW5pdChTT0NLQlVGX01UWChfc2IpLCBOVUxM
KQotI2VuZGlmCi0jZGVmaW5lIFNPQ0tCVUZfTE9DS19ERVNUUk9ZKF9zYikgcHRocmVhZF9tdXRl
eF9kZXN0cm95KFNPQ0tCVUZfTVRYKF9zYikpCi0jZGVmaW5lIFNPQ0tCVUZfQ09ORF9JTklUKF9z
YikgcHRocmVhZF9jb25kX2luaXQoKCYoX3NiKS0+c2JfY29uZCksIE5VTEwpCi0jZGVmaW5lIFNP
Q0tCVUZfQ09ORF9ERVNUUk9ZKF9zYikgcHRocmVhZF9jb25kX2Rlc3Ryb3koKCYoX3NiKS0+c2Jf
Y29uZCkpCi0jZGVmaW5lIFNPQ0tfQ09ORF9JTklUKF9zbykgcHRocmVhZF9jb25kX2luaXQoKCYo
X3NvKS0+dGltZW9fY29uZCksIE5VTEwpCi0jZGVmaW5lIFNPQ0tfQ09ORF9ERVNUUk9ZKF9zbykg
cHRocmVhZF9jb25kX2Rlc3Ryb3koKCYoX3NvKS0+dGltZW9fY29uZCkpCi0jZGVmaW5lIFNPQ0tf
Q09ORChfc28pICgmKF9zbyktPnRpbWVvX2NvbmQpCi0jZW5kaWYKLS8qX19Vc2Vyc3BhY2VfXyBT
T0NLQlVGX0xPQ0soX3NiKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19s
b2NrLmggKi8KLQotLyogI2RlZmluZQlTT0NLQlVGX09XTkVEKF9zYikJCW10eF9vd25lZChTT0NL
QlVGX01UWChfc2IpKSB1bnVzZWQgKi8KLS8qX19Vc2Vyc3BhY2VfXyBTT0NLQlVGX1VOTE9DSyhf
c2IpIGlzIG5vdyBkZWZpbmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLwotCi0v
Kl9fVXNlcnNwYWNlX18gU09DS0JVRl9MT0NLX0FTU0VSVChfc2IpIGlzIG5vdyBkZWZpbmVkIGlu
IG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLwotCi0vKiAjZGVmaW5lCVNPQ0tCVUZfVU5M
T0NLX0FTU0VSVChfc2IpCW10eF9hc3NlcnQoU09DS0JVRl9NVFgoX3NiKSwgTUFfTk9UT1dORUQp
ICAgdW51c2VkICovCi0KLS8qCi0gKiBQZXItc29ja2V0IG11dGV4OiB3ZSByZXVzZSB0aGUgcmVj
ZWl2ZSBzb2NrZXQgYnVmZmVyIG11dGV4IGZvciBzcGFjZQotICogZWZmaWNpZW5jeS4gIFRoaXMg
ZGVjaXNpb24gc2hvdWxkIHByb2JhYmx5IGJlIHJldmlzaXRlZCBhcyB3ZSBvcHRpbWl6ZQotICog
bG9ja2luZyBmb3IgdGhlIHNvY2tldCBjb2RlLgotICovCi0jZGVmaW5lCVNPQ0tfTVRYKF9zbykJ
CQlTT0NLQlVGX01UWCgmKF9zbyktPnNvX3JjdikKLS8qX19Vc2Vyc3BhY2VfXyBTT0NLX0xPQ0so
X3NvKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KLQot
LyogI2RlZmluZQlTT0NLX09XTkVEKF9zbykJCQlTT0NLQlVGX09XTkVEKCYoX3NvKS0+c29fcmN2
KSB1bnVzZWQgKi8KLS8qX19Vc2Vyc3BhY2VfXyBTT0NLX1VOTE9DSyhfc28pIGlzIG5vdyBkZWZp
bmVkIGluIG5ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaCAqLwotCi0jZGVmaW5lCVNPQ0tfTE9D
S19BU1NFUlQoX3NvKQkJU09DS0JVRl9MT0NLX0FTU0VSVCgmKF9zbyktPnNvX3JjdikKLQotLyoK
LSAqIFNvY2tldCBzdGF0ZSBiaXRzLgotICoKLSAqIEhpc3RvcmljYWxseSwgdGhpcyBiaXRzIHdl
cmUgYWxsIGtlcHQgaW4gdGhlIHNvX3N0YXRlIGZpZWxkLiAgRm9yCi0gKiBsb2NraW5nIHJlYXNv
bnMsIHRoZXkgYXJlIG5vdyBpbiBtdWx0aXBsZSBmaWVsZHMsIGFzIHRoZXkgYXJlCi0gKiBsb2Nr
ZWQgZGlmZmVyZW50bHkuICBzb19zdGF0ZSBtYWludGFpbnMgYmFzaWMgc29ja2V0IHN0YXRlIHBy
b3RlY3RlZAotICogYnkgdGhlIHNvY2tldCBsb2NrLiAgc29fcXN0YXRlIGhvbGRzIGluZm9ybWF0
aW9uIGFib3V0IHRoZSBzb2NrZXQKLSAqIGFjY2VwdCBxdWV1ZXMuICBFYWNoIHNvY2tldCBidWZm
ZXIgYWxzbyBoYXMgYSBzdGF0ZSBmaWVsZCBob2xkaW5nCi0gKiBpbmZvcm1hdGlvbiByZWxldmFu
dCB0byB0aGF0IHNvY2tldCBidWZmZXIgKGNhbid0IHNlbmQsIHJjdikuICBNYW55Ci0gKiBmaWVs
ZHMgd2lsbCBiZSByZWFkIHdpdGhvdXQgbG9ja3MgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQg
YXZvaWQKLSAqIGxvY2sgb3JkZXIgaXNzdWVzLiAgSG93ZXZlciwgdGhpcyBhcHByb2FjaCBtdXN0
IGJlIHVzZWQgd2l0aCBjYXV0aW9uLgotICovCi0jZGVmaW5lCVNTX05PRkRSRUYJCTB4MDAwMQkv
KiBubyBmaWxlIHRhYmxlIHJlZiBhbnkgbW9yZSAqLwotI2RlZmluZQlTU19JU0NPTk5FQ1RFRAkJ
MHgwMDAyCS8qIHNvY2tldCBjb25uZWN0ZWQgdG8gYSBwZWVyICovCi0jZGVmaW5lCVNTX0lTQ09O
TkVDVElORwkJMHgwMDA0CS8qIGluIHByb2Nlc3Mgb2YgY29ubmVjdGluZyB0byBwZWVyICovCi0j
ZGVmaW5lCVNTX0lTRElTQ09OTkVDVElORwkweDAwMDgJLyogaW4gcHJvY2VzcyBvZiBkaXNjb25u
ZWN0aW5nICovCi0jZGVmaW5lCVNTX05CSU8JCQkweDAxMDAJLyogbm9uLWJsb2NraW5nIG9wcyAq
LwotI2RlZmluZQlTU19BU1lOQwkJMHgwMjAwCS8qIGFzeW5jIGkvbyBub3RpZnkgKi8KLSNkZWZp
bmUJU1NfSVNDT05GSVJNSU5HCQkweDA0MDAJLyogZGVjaWRpbmcgdG8gYWNjZXB0IGNvbm5lY3Rp
b24gcmVxICovCi0jZGVmaW5lCVNTX0lTRElTQ09OTkVDVEVECTB4MjAwMAkvKiBzb2NrZXQgZGlz
Y29ubmVjdGVkIGZyb20gcGVlciAqLwotLyoKLSAqIFByb3RvY29scyBjYW4gbWFyayBhIHNvY2tl
dCBhcyBTU19QUk9UT1JFRiB0byBpbmRpY2F0ZSB0aGF0LCBmb2xsb3dpbmcKLSAqIHBydV9kZXRh
Y2gsIHRoZXkgc3RpbGwgd2FudCB0aGUgc29ja2V0IHRvIHBlcnNpc3QsIGFuZCB3aWxsIGZyZWUg
aXQKLSAqIHRoZW1zZWx2ZXMgd2hlbiB0aGV5IGFyZSBkb25lLiAgUHJvdG9jb2xzIHNob3VsZCBv
bmx5IGV2ZXIgY2FsbCBzb2ZyZWUoKQotICogZm9sbG93aW5nIHNldHRpbmcgdGhpcyBmbGFnIGlu
IHBydV9kZXRhY2goKSwgYW5kIG5ldmVyIG90aGVyd2lzZSwgYXMKLSAqIHNvZnJlZSgpIGJ5cGFz
c2VzIHNvY2tldCByZWZlcmVuY2UgY291bnRpbmcuCi0gKi8KLSNkZWZpbmUJU1NfUFJPVE9SRUYJ
CTB4NDAwMAkvKiBzdHJvbmcgcHJvdG9jb2wgcmVmZXJlbmNlICovCi0KLS8qCi0gKiBTb2NrZXQg
c3RhdGUgYml0cyBub3cgc3RvcmVkIGluIHRoZSBzb2NrZXQgYnVmZmVyIHN0YXRlIGZpZWxkLgot
ICovCi0jZGVmaW5lCVNCU19DQU5UU0VORE1PUkUJMHgwMDEwCS8qIGNhbid0IHNlbmQgbW9yZSBk
YXRhIHRvIHBlZXIgKi8KLSNkZWZpbmUJU0JTX0NBTlRSQ1ZNT1JFCQkweDAwMjAJLyogY2FuJ3Qg
cmVjZWl2ZSBtb3JlIGRhdGEgZnJvbSBwZWVyICovCi0jZGVmaW5lCVNCU19SQ1ZBVE1BUksJCTB4
MDA0MAkvKiBhdCBtYXJrIG9uIGlucHV0ICovCi0KLS8qCi0gKiBTb2NrZXQgc3RhdGUgYml0cyBz
dG9yZWQgaW4gc29fcXN0YXRlLgotICovCi0jZGVmaW5lCVNRX0lOQ09NUAkJMHgwODAwCS8qIHVu
YWNjZXB0ZWQsIGluY29tcGxldGUgY29ubmVjdGlvbiAqLwotI2RlZmluZQlTUV9DT01QCQkJMHgx
MDAwCS8qIHVuYWNjZXB0ZWQsIGNvbXBsZXRlIGNvbm5lY3Rpb24gKi8KLQotLyoKLSAqIEV4dGVy
bmFsaXplZCBmb3JtIG9mIHN0cnVjdCBzb2NrZXQgdXNlZCBieSB0aGUgc3lzY3RsKDMpIGludGVy
ZmFjZS4KLSAqLwotc3RydWN0IHhzb2NrZXQgewotCXNpemVfdAl4c29fbGVuOwkvKiBsZW5ndGgg
b2YgdGhpcyBzdHJ1Y3R1cmUgKi8KLQlzdHJ1Y3QJc29ja2V0ICp4c29fc287CS8qIG1ha2VzIGEg
Y29udmVuaWVudCBoYW5kbGUgc29tZXRpbWVzICovCi0Jc2hvcnQJc29fdHlwZTsKLQlzaG9ydAlz
b19vcHRpb25zOwotCXNob3J0CXNvX2xpbmdlcjsKLQlzaG9ydAlzb19zdGF0ZTsKLQljYWRkcl90
CXNvX3BjYjsJCS8qIGFub3RoZXIgY29udmVuaWVudCBoYW5kbGUgKi8KLQlpbnQJeHNvX3Byb3Rv
Y29sOwotCWludAl4c29fZmFtaWx5OwotCXVfc2hvcnQJc29fcWxlbjsKLQl1X3Nob3J0CXNvX2lu
Y3FsZW47Ci0JdV9zaG9ydAlzb19xbGltaXQ7Ci0Jc2hvcnQJc29fdGltZW87Ci0JdV9zaG9ydAlz
b19lcnJvcjsKLQlwaWRfdAlzb19wZ2lkOwotCXVfbG9uZwlzb19vb2JtYXJrOwotCXN0cnVjdCB4
c29ja2J1ZiB7Ci0JCXVfaW50CXNiX2NjOwotCQl1X2ludAlzYl9oaXdhdDsKLQkJdV9pbnQJc2Jf
bWJjbnQ7Ci0JCXVfaW50CXNiX21ibWF4OwotCQlpbnQJc2JfbG93YXQ7Ci0JCWludAlzYl90aW1l
bzsKLQkJc2hvcnQJc2JfZmxhZ3M7Ci0JfSBzb19yY3YsIHNvX3NuZDsKLQl1aWRfdAlzb191aWQ7
CQkvKiBYWFggKi8KLX07Ci0KLSNpZiBkZWZpbmVkKF9LRVJORUwpCi0KLQotLyoKLSAqIE1hY3Jv
cyBmb3Igc29ja2V0cyBhbmQgc29ja2V0IGJ1ZmZlcmluZy4KLSAqLwotCi0vKgotICogRG8gd2Ug
bmVlZCB0byBub3RpZnkgdGhlIG90aGVyIHNpZGUgd2hlbiBJL08gaXMgcG9zc2libGU/Ci0gKi8K
LSNkZWZpbmUJc2Jfbm90aWZ5KHNiKQkoKChzYiktPnNiX2ZsYWdzICYgKFNCX1dBSVQgfCBTQl9T
RUwgfCBTQl9BU1lOQyB8IFwKLSAgICBTQl9VUENBTEwgfCBTQl9BSU8gfCBTQl9LTk9URSkpICE9
IDApCi0KLS8qCi0gKiBIb3cgbXVjaCBzcGFjZSBpcyB0aGVyZSBpbiBhIHNvY2tldCBidWZmZXIg
KHNvLT5zb19zbmQgb3Igc28tPnNvX3Jjdik/Ci0gKiBUaGlzIGlzIHByb2JsZW1hdGljYWwgaWYg
dGhlIGZpZWxkcyBhcmUgdW5zaWduZWQsIGFzIHRoZSBzcGFjZSBtaWdodAotICogc3RpbGwgYmUg
bmVnYXRpdmUgKGNjID4gaGl3YXQgb3IgbWJjbnQgPiBtYm1heCkuICBTaG91bGQgZGV0ZWN0Ci0g
KiBvdmVyZmxvdyBhbmQgcmV0dXJuIDAuICBTaG91bGQgdXNlICJsbWluIiBidXQgaXQgZG9lc24n
dCBleGlzdCBub3cuCi0gKi8KLSNkZWZpbmUJc2JzcGFjZShzYikgXAotICAgICgobG9uZykgaW1p
bigoaW50KSgoc2IpLT5zYl9oaXdhdCAtIChzYiktPnNiX2NjKSwgXAotCSAoaW50KSgoc2IpLT5z
Yl9tYm1heCAtIChzYiktPnNiX21iY250KSkpCi0KLS8qIGRvIHdlIGhhdmUgdG8gc2VuZCBhbGwg
YXQgb25jZSBvbiBhIHNvY2tldD8gKi8KLSNkZWZpbmUJc29zZW5kYWxsYXRvbmNlKHNvKSBcCi0g
ICAgKChzbyktPnNvX3Byb3RvLT5wcl9mbGFncyAmIFBSX0FUT01JQykKLQotLyogY2FuIHdlIHJl
YWQgc29tZXRoaW5nIGZyb20gc28/ICovCi0jZGVmaW5lCXNvcmVhZGFibGUoc28pIFwKLSAgICAo
KHNvKS0+c29fcmN2LnNiX2NjID49IChzbyktPnNvX3Jjdi5zYl9sb3dhdCB8fCBcCi0JKChzbykt
PnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgfHwgXAotCSFUQUlMUV9FTVBUWSgm
KHNvKS0+c29fY29tcCkgfHwgKHNvKS0+c29fZXJyb3IpCi0KLS8qIGNhbiB3ZSB3cml0ZSBzb21l
dGhpbmcgdG8gc28/ICovCi0jZGVmaW5lCXNvd3JpdGVhYmxlKHNvKSBcCi0gICAgKChzYnNwYWNl
KCYoc28pLT5zb19zbmQpID49IChzbyktPnNvX3NuZC5zYl9sb3dhdCAmJiBcCi0JKCgoc28pLT5z
b19zdGF0ZSZTU19JU0NPTk5FQ1RFRCkgfHwgXAotCSAgKChzbyktPnNvX3Byb3RvLT5wcl9mbGFn
cyZQUl9DT05OUkVRVUlSRUQpPT0wKSkgfHwgXAotICAgICAoKHNvKS0+c29fc25kLnNiX3N0YXRl
ICYgU0JTX0NBTlRTRU5ETU9SRSkgfHwgXAotICAgICAoc28pLT5zb19lcnJvcikKLQotLyogYWRq
dXN0IGNvdW50ZXJzIGluIHNiIHJlZmxlY3RpbmcgYWxsb2NhdGlvbiBvZiBtICovCi0jZGVmaW5l
CXNiYWxsb2Moc2IsIG0pIHsgXAotCShzYiktPnNiX2NjICs9IChtKS0+bV9sZW47IFwKLQlpZiAo
KG0pLT5tX3R5cGUgIT0gTVRfREFUQSAmJiAobSktPm1fdHlwZSAhPSBNVF9PT0JEQVRBKSBcCi0J
CShzYiktPnNiX2N0bCArPSAobSktPm1fbGVuOyBcCi0JKHNiKS0+c2JfbWJjbnQgKz0gTVNJWkU7
IFwKLQlpZiAoKG0pLT5tX2ZsYWdzICYgTV9FWFQpIFwKLQkJKHNiKS0+c2JfbWJjbnQgKz0gKG0p
LT5tX2V4dC5leHRfc2l6ZTsgXAotfQotCi0vKiBhZGp1c3QgY291bnRlcnMgaW4gc2IgcmVmbGVj
dGluZyBmcmVlaW5nIG9mIG0gKi8KLSNkZWZpbmUJc2JmcmVlKHNiLCBtKSB7IFwKLQkoc2IpLT5z
Yl9jYyAtPSAobSktPm1fbGVuOyBcCi0JaWYgKChtKS0+bV90eXBlICE9IE1UX0RBVEEgJiYgKG0p
LT5tX3R5cGUgIT0gTVRfT09CREFUQSkgXAotCQkoc2IpLT5zYl9jdGwgLT0gKG0pLT5tX2xlbjsg
XAotCShzYiktPnNiX21iY250IC09IE1TSVpFOyBcCi0JaWYgKChtKS0+bV9mbGFncyAmIE1fRVhU
KSBcCi0JCShzYiktPnNiX21iY250IC09IChtKS0+bV9leHQuZXh0X3NpemU7IFwKLQlpZiAoKHNi
KS0+c2Jfc25kcHRyID09IChtKSkgeyBcCi0JCShzYiktPnNiX3NuZHB0ciA9IE5VTEw7IFwKLQkJ
KHNiKS0+c2Jfc25kcHRyb2ZmID0gMDsgXAotCX0gXAotCWlmICgoc2IpLT5zYl9zbmRwdHJvZmYg
IT0gMCkgXAotCQkoc2IpLT5zYl9zbmRwdHJvZmYgLT0gKG0pLT5tX2xlbjsgXAotfQotCi0vKgot
ICogc29yZWYoKS9zb3JlbGUoKSByZWYtY291bnQgdGhlIHNvY2tldCBzdHJ1Y3R1cmUuICBOb3Rl
IHRoYXQgeW91IG11c3QKLSAqIHN0aWxsIGV4cGxpY2l0bHkgY2xvc2UgdGhlIHNvY2tldCwgYnV0
IHRoZSBsYXN0IHJlZiBjb3VudCB3aWxsIGZyZWUKLSAqIHRoZSBzdHJ1Y3R1cmUuCi0gKi8KLSNk
ZWZpbmUJc29yZWYoc28pIGRvIHsJCQkJCQkJXAotCVNPQ0tfTE9DS19BU1NFUlQoc28pOwkJCQkJ
CVwKLQkrKyhzbyktPnNvX2NvdW50OwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc29y
ZWxlKHNvKSBkbyB7CQkJCQkJCVwKLQlBQ0NFUFRfTE9DS19BU1NFUlQoKTsJCQkJCQlcCi0JU09D
S19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAotCUtBU1NFUlQoKHNvKS0+c29fY291bnQgPiAwLCAo
InNvcmVsZSIpKTsJCQlcCi0JaWYgKC0tKHNvKS0+c29fY291bnQgPT0gMCkJCQkJCVwKLQkJc29m
cmVlKHNvKTsJCQkJCQlcCi0JZWxzZSB7CQkJCQkJCQlcCi0JCVNPQ0tfVU5MT0NLKHNvKTsJCQkJ
CVwKLQkJQUNDRVBUX1VOTE9DSygpOwkJCQkJXAotCX0JCQkJCQkJCVwKLX0gd2hpbGUgKDApCi0K
LSNkZWZpbmUJc290cnlmcmVlKHNvKSBkbyB7CQkJCQkJXAotCUFDQ0VQVF9MT0NLX0FTU0VSVCgp
OwkJCQkJCVwKLQlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsJCQkJCQlcCi0JaWYgKChzbyktPnNvX2Nv
dW50ID09IDApCQkJCQlcCi0JCXNvZnJlZShzbyk7CQkJCQkJXAotCWVsc2UgewkJCQkJCQkJXAot
CQlTT0NLX1VOTE9DSyhzbyk7CQkJCQlcCi0JCUFDQ0VQVF9VTkxPQ0soKTsJCQkJCVwKLQl9CQkJ
CQkJCQlcCi19IHdoaWxlKDApCi0KLS8qCi0gKiBJbiBzb3J3YWtldXAoKSBhbmQgc293d2FrZXVw
KCksIGFjcXVpcmUgdGhlIHNvY2tldCBidWZmZXIgbG9jayB0bwotICogYXZvaWQgYSBub24tYXRv
bWljIHRlc3QtYW5kLXdha2V1cC4gIEhvd2V2ZXIsIHNvd2FrZXVwIGlzCi0gKiByZXNwb25zaWJs
ZSBmb3IgcmVsZWFzaW5nIHRoZSBsb2NrIGlmIGl0IGlzIGNhbGxlZC4gIFdlIHVubG9jayBvbmx5
Ci0gKiBpZiB3ZSBkb24ndCBjYWxsIGludG8gc293YWtldXAuICBJZiBhbnkgY29kZSBpcyBpbnRy
b2R1Y2VkIHRoYXQKLSAqIGRpcmVjdGx5IGludm9rZXMgdGhlIHVuZGVybHlpbmcgc293YWtldXAo
KSBwcmltaXRpdmVzLCBpdCBtdXN0Ci0gKiBtYWludGFpbiB0aGUgc2FtZSBzZW1hbnRpY3MuCi0g
Ki8KLSNkZWZpbmUJc29yd2FrZXVwX2xvY2tlZChzbykgZG8gewkJCQkJXAotCVNPQ0tCVUZfTE9D
S19BU1NFUlQoJihzbyktPnNvX3Jjdik7CQkJCVwKLQlpZiAoc2Jfbm90aWZ5KCYoc28pLT5zb19y
Y3YpKQkJCQkJXAotCQlzb3dha2V1cCgoc28pLCAmKHNvKS0+c29fcmN2KTsJIAkJCVwKLQllbHNl
CQkJCQkJCQlcCi0JCVNPQ0tCVUZfVU5MT0NLKCYoc28pLT5zb19yY3YpOwkJCQlcCi19IHdoaWxl
ICgwKQotCi0jZGVmaW5lCXNvcndha2V1cChzbykgZG8gewkJCQkJCVwKLQlTT0NLQlVGX0xPQ0so
JihzbyktPnNvX3Jjdik7CQkJCQlcCi0Jc29yd2FrZXVwX2xvY2tlZChzbyk7CQkJCQkJXAotfSB3
aGlsZSAoMCkKLQotI2RlZmluZQlzb3d3YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlcCi0JU09D
S0JVRl9MT0NLX0FTU0VSVCgmKHNvKS0+c29fc25kKTsJCQkJXAotCWlmIChzYl9ub3RpZnkoJihz
byktPnNvX3NuZCkpCQkJCQlcCi0JCXNvd2FrZXVwKChzbyksICYoc28pLT5zb19zbmQpOyAJCQkJ
XAotCWVsc2UJCQkJCQkJCVwKLQkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CQkJCVwK
LX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc293d2FrZXVwKHNvKSBkbyB7CQkJCQkJXAotCVNPQ0tC
VUZfTE9DSygmKHNvKS0+c29fc25kKTsJCQkJCVwKLQlzb3d3YWtldXBfbG9ja2VkKHNvKTsJCQkJ
CQlcCi19IHdoaWxlICgwKQotCi0vKgotICogQXJndW1lbnQgc3RydWN0dXJlIGZvciBzb3NldG9w
dCBldCBzZXEuICBUaGlzIGlzIGluIHRoZSBLRVJORUwKLSAqIHNlY3Rpb24gYmVjYXVzZSBpdCB3
aWxsIG5ldmVyIGJlIHZpc2libGUgdG8gdXNlciBjb2RlLgotICovCi1lbnVtIHNvcHRfZGlyIHsg
U09QVF9HRVQsIFNPUFRfU0VUIH07Ci1zdHJ1Y3Qgc29ja29wdCB7Ci0JZW51bQlzb3B0X2RpciBz
b3B0X2RpcjsgLyogaXMgdGhpcyBhIGdldCBvciBhIHNldD8gKi8KLQlpbnQJc29wdF9sZXZlbDsJ
Lyogc2Vjb25kIGFyZyBvZiBbZ3NdZXRzb2Nrb3B0ICovCi0JaW50CXNvcHRfbmFtZTsJLyogdGhp
cmQgYXJnIG9mIFtnc11ldHNvY2tvcHQgKi8KLQl2b2lkICAgKnNvcHRfdmFsOwkvKiBmb3VydGgg
YXJnIG9mIFtnc11ldHNvY2tvcHQgKi8KLQlzaXplX3QJc29wdF92YWxzaXplOwkvKiAoYWxtb3N0
KSBmaWZ0aCBhcmcgb2YgW2dzXWV0c29ja29wdCAqLwotCXN0cnVjdAl0aHJlYWQgKnNvcHRfdGQ7
IC8qIGNhbGxpbmcgdGhyZWFkIG9yIG51bGwgaWYga2VybmVsICovCi19OwotCi1zdHJ1Y3QgYWNj
ZXB0X2ZpbHRlciB7Ci0JY2hhcglhY2NmX25hbWVbMTZdOwotCXZvaWQJKCphY2NmX2NhbGxiYWNr
KQotCQkoc3RydWN0IHNvY2tldCAqc28sIHZvaWQgKmFyZywgaW50IHdhaXRmbGFnKTsKLQl2b2lk
ICoJKCphY2NmX2NyZWF0ZSkKLQkJKHN0cnVjdCBzb2NrZXQgKnNvLCBjaGFyICphcmcpOwotCXZv
aWQJKCphY2NmX2Rlc3Ryb3kpCi0JCShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci0JU0xJU1RfRU5UUlko
YWNjZXB0X2ZpbHRlcikgYWNjZl9uZXh0OwotfTsKLQotZXh0ZXJuIGludAltYXhzb2NrZXRzOwot
ZXh0ZXJuIHVfbG9uZwlzYl9tYXg7Ci1leHRlcm4gc3RydWN0IHVtYV96b25lICpzb2NrZXRfem9u
ZTsKLWV4dGVybiBzb19nZW5fdCBzb19nZW5jbnQ7Ci0KLXN0cnVjdCBtYnVmOwotc3RydWN0IHNv
Y2thZGRyOwotc3RydWN0IHVjcmVkOwotc3RydWN0IHVpbzsKLQotLyoKLSAqIEZyb20gdWlwY19z
b2NrZXQgYW5kIGZyaWVuZHMKLSAqLwotaW50CWRvX2dldG9wdF9hY2NlcHRfZmlsdGVyKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29wdCAqc29wdCk7Ci1pbnQJZG9fc2V0b3B0X2FjY2Vw
dF9maWx0ZXIoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KTsKLWludAlz
b19zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAot
CSAgICB2b2lkICpvcHR2YWwsIHNpemVfdCBvcHRsZW4pOwotaW50CXNvY2thcmdzKHN0cnVjdCBt
YnVmICoqbXAsIGNhZGRyX3QgYnVmLCBpbnQgYnVmbGVuLCBpbnQgdHlwZSk7Ci1pbnQJZ2V0c29j
a2FkZHIoc3RydWN0IHNvY2thZGRyICoqbmFtcCwgY2FkZHJfdCB1YWRkciwgc2l6ZV90IGxlbik7
Ci12b2lkCXNiYXBwZW5kKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0pOwotdm9p
ZAlzYmFwcGVuZF9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSk7Ci12
b2lkCXNiYXBwZW5kc3RyZWFtKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IG1idWYgKm0pOwot
dm9pZAlzYmFwcGVuZHN0cmVhbV9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1
ZiAqbSk7Ci1pbnQJc2JhcHBlbmRhZGRyKHN0cnVjdCBzb2NrYnVmICpzYiwgY29uc3Qgc3RydWN0
IHNvY2thZGRyICphc2EsCi0JICAgIHN0cnVjdCBtYnVmICptMCwgc3RydWN0IG1idWYgKmNvbnRy
b2wpOwotaW50CXNiYXBwZW5kYWRkcl9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBjb25zdCBz
dHJ1Y3Qgc29ja2FkZHIgKmFzYSwKLQkgICAgc3RydWN0IG1idWYgKm0wLCBzdHJ1Y3QgbWJ1ZiAq
Y29udHJvbCk7Ci1pbnQJc2JhcHBlbmRjb250cm9sKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0
IG1idWYgKm0wLAotCSAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJvbCk7Ci1pbnQJc2JhcHBlbmRjb250
cm9sX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptMCwKLQkgICAgc3Ry
dWN0IG1idWYgKmNvbnRyb2wpOwotdm9pZAlzYmFwcGVuZHJlY29yZChzdHJ1Y3Qgc29ja2J1ZiAq
c2IsIHN0cnVjdCBtYnVmICptMCk7Ci12b2lkCXNiYXBwZW5kcmVjb3JkX2xvY2tlZChzdHJ1Y3Qg
c29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptMCk7Ci12b2lkCXNiY2hlY2soc3RydWN0IHNvY2ti
dWYgKnNiKTsKLXZvaWQJc2Jjb21wcmVzcyhzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVm
ICptLCBzdHJ1Y3QgbWJ1ZiAqbik7Ci1zdHJ1Y3QgbWJ1ZiAqCi0Jc2JjcmVhdGVjb250cm9sKGNh
ZGRyX3QgcCwgaW50IHNpemUsIGludCB0eXBlLCBpbnQgbGV2ZWwpOwotdm9pZAlzYmRlc3Ryb3ko
c3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNiZHJvcChzdHJ1
Y3Qgc29ja2J1ZiAqc2IsIGludCBsZW4pOwotdm9pZAlzYmRyb3BfbG9ja2VkKHN0cnVjdCBzb2Nr
YnVmICpzYiwgaW50IGxlbik7Ci12b2lkCXNiZHJvcHJlY29yZChzdHJ1Y3Qgc29ja2J1ZiAqc2Ip
Owotdm9pZAlzYmRyb3ByZWNvcmRfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYik7Ci12b2lkCXNi
Zmx1c2goc3RydWN0IHNvY2tidWYgKnNiKTsKLXZvaWQJc2JmbHVzaF9sb2NrZWQoc3RydWN0IHNv
Y2tidWYgKnNiKTsKLXZvaWQJc2JyZWxlYXNlKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNv
Y2tldCAqc28pOwotdm9pZAlzYnJlbGVhc2VfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgc3Ry
dWN0IHNvY2tldCAqc28pOwotaW50CXNicmVzZXJ2ZShzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfbG9u
ZyBjYywgc3RydWN0IHNvY2tldCAqc28sCi0JICAgIHN0cnVjdCB0aHJlYWQgKnRkKTsKLWludAlz
YnJlc2VydmVfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwgdV9sb25nIGNjLCBzdHJ1Y3Qgc29j
a2V0ICpzbywKLQkgICAgc3RydWN0IHRocmVhZCAqdGQpOwotc3RydWN0IG1idWYgKgotCXNic25k
cHRyKHN0cnVjdCBzb2NrYnVmICpzYiwgdV9pbnQgb2ZmLCB1X2ludCBsZW4sIHVfaW50ICptb2Zm
KTsKLXZvaWQJc2J0b3hzb2NrYnVmKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHhzb2NrYnVm
ICp4c2IpOwotaW50CXNid2FpdChzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwotaW50CXNibG9jayhzdHJ1
Y3Qgc29ja2J1ZiAqc2IsIGludCBmbGFncyk7Ci12b2lkCXNidW5sb2NrKHN0cnVjdCBzb2NrYnVm
ICpzYik7Ci12b2lkCXNvYWJvcnQoc3RydWN0IHNvY2tldCAqc28pOwotaW50CXNvYWNjZXB0KHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwotaW50CXNvY2hlY2t1aWQo
c3RydWN0IHNvY2tldCAqc28sIHVpZF90IHVpZCk7Ci1pbnQJc29iaW5kKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwgc3RydWN0IHRocmVhZCAqdGQpOwotdm9pZAlzb2Nh
bnRyY3Ztb3JlKHN0cnVjdCBzb2NrZXQgKnNvKTsKLXZvaWQJc29jYW50cmN2bW9yZV9sb2NrZWQo
c3RydWN0IHNvY2tldCAqc28pOwotdm9pZAlzb2NhbnRzZW5kbW9yZShzdHJ1Y3Qgc29ja2V0ICpz
byk7Ci12b2lkCXNvY2FudHNlbmRtb3JlX2xvY2tlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1pbnQJ
c29jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1pbnQJc29jb25uZWN0KHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwgc3RydWN0IHRocmVhZCAqdGQpOwotaW50CXNvY29u
bmVjdDIoc3RydWN0IHNvY2tldCAqc28xLCBzdHJ1Y3Qgc29ja2V0ICpzbzIpOwotaW50CXNvY293
X3NldHVwKHN0cnVjdCBtYnVmICptMCwgc3RydWN0IHVpbyAqdWlvKTsKLWludAlzb2NyZWF0ZShp
bnQgZG9tLCBzdHJ1Y3Qgc29ja2V0ICoqYXNvLCBpbnQgdHlwZSwgaW50IHByb3RvLAotCSAgICBz
dHJ1Y3QgdWNyZWQgKmNyZWQsIHN0cnVjdCB0aHJlYWQgKnRkKTsKLWludAlzb2Rpc2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28pOwotc3RydWN0CXNvY2thZGRyICpzb2R1cHNvY2thZGRyKGNvbnN0
IHN0cnVjdCBzb2NrYWRkciAqc2EsIGludCBtZmxhZ3MpOwotdm9pZAlzb2ZyZWUoc3RydWN0IHNv
Y2tldCAqc28pOwotaW50CXNvZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja29w
dCAqc29wdCk7Ci12b2lkCXNvaGFzb3V0b2ZiYW5kKHN0cnVjdCBzb2NrZXQgKnNvKTsKLXZvaWQJ
c29pc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvaXNjb25uZWN0aW5nKHN0
cnVjdCBzb2NrZXQgKnNvKTsKLXZvaWQJc29pc2Rpc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpz
byk7Ci12b2lkCXNvaXNkaXNjb25uZWN0aW5nKHN0cnVjdCBzb2NrZXQgKnNvKTsKLWludAlzb2xp
c3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJhY2tsb2csIHN0cnVjdCB0aHJlYWQgKnRkKTsK
LXZvaWQJc29saXN0ZW5fcHJvdG8oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKTsKLWlu
dAlzb2xpc3Rlbl9wcm90b19jaGVjayhzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1zdHJ1Y3Qgc29ja2V0
ICoKLQlzb25ld2Nvbm4oc3RydWN0IHNvY2tldCAqaGVhZCwgaW50IGNvbm5zdGF0dXMpOwotaW50
CXNvb3B0Y29weWluKHN0cnVjdCBzb2Nrb3B0ICpzb3B0LCB2b2lkICpidWYsIHNpemVfdCBsZW4s
IHNpemVfdCBtaW5sZW4pOwotaW50CXNvb3B0Y29weW91dChzdHJ1Y3Qgc29ja29wdCAqc29wdCwg
Y29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbGVuKTsKLQotLyogWFhYOyBwcmVwYXJlIG1idWYgZm9y
IChfX0ZyZWVCU0RfXyA8IDMpIHJvdXRpbmVzLiAqLwotaW50CXNvb3B0X2dldG0oc3RydWN0IHNv
Y2tvcHQgKnNvcHQsIHN0cnVjdCBtYnVmICoqbXApOwotaW50CXNvb3B0X21jb3B5aW4oc3RydWN0
IHNvY2tvcHQgKnNvcHQsIHN0cnVjdCBtYnVmICptKTsKLWludAlzb29wdF9tY29weW91dChzdHJ1
Y3Qgc29ja29wdCAqc29wdCwgc3RydWN0IG1idWYgKm0pOwotCi1pbnQJc29wb2xsKHN0cnVjdCBz
b2NrZXQgKnNvLCBpbnQgZXZlbnRzLCBzdHJ1Y3QgdWNyZWQgKmFjdGl2ZV9jcmVkLAotCSAgICBz
dHJ1Y3QgdGhyZWFkICp0ZCk7Ci1pbnQJc29wb2xsX2dlbmVyaWMoc3RydWN0IHNvY2tldCAqc28s
IGludCBldmVudHMsCi0JICAgIHN0cnVjdCB1Y3JlZCAqYWN0aXZlX2NyZWQsIHN0cnVjdCB0aHJl
YWQgKnRkKTsKLWludAlzb3JlY2VpdmUoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRk
ciAqKnBhZGRyLCBzdHJ1Y3QgdWlvICp1aW8sCi0JICAgIHN0cnVjdCBtYnVmICoqbXAwLCBzdHJ1
Y3QgbWJ1ZiAqKmNvbnRyb2xwLCBpbnQgKmZsYWdzcCk7Ci1pbnQJc29yZWNlaXZlX2dlbmVyaWMo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKnBhZGRyLAotCSAgICBzdHJ1Y3Qg
dWlvICp1aW8sIHN0cnVjdCBtYnVmICoqbXAwLCBzdHJ1Y3QgbWJ1ZiAqKmNvbnRyb2xwLAotCSAg
ICBpbnQgKmZsYWdzcCk7Ci1pbnQJc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcg
c25kY2MsIHVfbG9uZyByY3ZjYyk7Ci12b2lkCXNvcmZsdXNoKHN0cnVjdCBzb2NrZXQgKnNvKTsK
LWludAlzb3NlbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3Ry
dWN0IHVpbyAqdWlvLAotCSAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLCBzdHJ1Y3QgbWJ1ZiAqY29udHJv
bCwgaW50IGZsYWdzLAotCSAgICBzdHJ1Y3QgdGhyZWFkICp0ZCk7Ci1pbnQJc29zZW5kX2RncmFt
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JICAgIHN0cnVjdCB1
aW8gKnVpbywgc3RydWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0JICAgIGlu
dCBmbGFncywgc3RydWN0IHRocmVhZCAqdGQpOwotaW50CXNvc2VuZF9nZW5lcmljKHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCi0JICAgIHN0cnVjdCB1aW8gKnVpbywg
c3RydWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2wsCi0JICAgIGludCBmbGFncywg
c3RydWN0IHRocmVhZCAqdGQpOwotaW50CXNvc2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja29wdCAqc29wdCk7Ci1pbnQJc29zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGhvdyk7Ci12b2lkCXNvdG94c29ja2V0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgeHNvY2tl
dCAqeHNvKTsKLXZvaWQJc293YWtldXAoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYnVm
ICpzYik7Ci0KLSNpZmRlZiBTT0NLQlVGX0RFQlVHCi12b2lkCXNibGFzdHJlY29yZGNoayhzdHJ1
Y3Qgc29ja2J1ZiAqLCBjb25zdCBjaGFyICosIGludCk7Ci0jZGVmaW5lCVNCTEFTVFJFQ09SRENI
SyhzYikJc2JsYXN0cmVjb3JkY2hrKChzYiksIF9fRklMRV9fLCBfX0xJTkVfXykKLQotdm9pZAlz
Ymxhc3RtYnVmY2hrKHN0cnVjdCBzb2NrYnVmICosIGNvbnN0IGNoYXIgKiwgaW50KTsKLSNkZWZp
bmUJU0JMQVNUTUJVRkNISyhzYikJc2JsYXN0bWJ1ZmNoaygoc2IpLCBfX0ZJTEVfXywgX19MSU5F
X18pCi0jZWxzZQotI2RlZmluZQlTQkxBU1RSRUNPUkRDSEsoc2IpICAgICAgLyogbm90aGluZyAq
LwotI2RlZmluZQlTQkxBU1RNQlVGQ0hLKHNiKSAgICAgICAgLyogbm90aGluZyAqLwotI2VuZGlm
IC8qIFNPQ0tCVUZfREVCVUcgKi8KLQotLyoKLSAqIEFjY2VwdCBmaWx0ZXIgZnVuY3Rpb25zIChk
dWgpLgotICovCi1pbnQJYWNjZXB0X2ZpbHRfYWRkKHN0cnVjdCBhY2NlcHRfZmlsdGVyICpmaWx0
KTsKLWludAlhY2NlcHRfZmlsdF9kZWwoY2hhciAqbmFtZSk7Ci1zdHJ1Y3QJYWNjZXB0X2ZpbHRl
ciAqYWNjZXB0X2ZpbHRfZ2V0KGNoYXIgKm5hbWUpOwotI2lmZGVmIEFDQ0VQVF9GSUxURVJfTU9E
Ci0jaWZkZWYgU1lTQ1RMX0RFQ0wKLVNZU0NUTF9ERUNMKF9uZXRfaW5ldF9hY2NmKTsKLSNlbmRp
ZgotaW50CWFjY2VwdF9maWx0X2dlbmVyaWNfbW9kX2V2ZW50KG1vZHVsZV90IG1vZCwgaW50IGV2
ZW50LCB2b2lkICpkYXRhKTsKLSNlbmRpZgotCi0jZW5kaWYgLyogX0tFUk5FTCAqLwotCi0KLS8q
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0qLwotLyogICAgICAgICAgICAgICAgICAgX19Vc2Vyc3BhY2VfXyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyogdGhpcyBu
ZXcgX19Vc2Vyc3BhY2VfXyBzZWN0aW9uIGlzIHRvIGNvcHkgcG9ydGlvbnMgb2YgdGhlIF9LRVJO
RUwgYmxvY2sKLSAqICBhYm92ZSBpbnRvLCBhdm9pZGluZyBoYXZpbmcgdG8gcG9ydCB0aGUgZW50
aXJlIHRoaW5nIGF0IG9uY2UuLi4KLSAqICBGb3IgZnVuY3Rpb24gcHJvdG90eXBlcywgdGhlIGZ1
bGwgYm9kaWVzIGFyZSBpbiB1c2VyX3NvY2tldC5jIC4KLSAqLwotI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwotLyogLS0tIGZ1bmN0aW9uIHByb3RvdHlwZXMgKGltcGxlbWVu
dGVkIGluIHVzZXJfc29ja2V0LmMpIC0tLSAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotdm9pZAlzb2lzY29ubmVjdGlu
ZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvaXNkaXNjb25uZWN0aW5nKHN0cnVjdCBzb2Nr
ZXQgKnNvKTsKLXZvaWQJc29pc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1zdHJ1Y3Qg
c29ja2V0ICogc29uZXdjb25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGludCBjb25uc3RhdHVzKTsK
LXZvaWQJc29jYW50cmN2bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci12b2lkCXNvY2FudHNlbmRt
b3JlKHN0cnVjdCBzb2NrZXQgKnNvKTsKLQotCi0KLS8qIC0tLS0tLS0tLS0tLS0tICovCi0vKiAt
LS0gbWFjcm9zIC0tLSAqLwotLyogLS0tLS0tLS0tLS0tLS0gKi8KLQotI2RlZmluZQlzb3JlZihz
bykgZG8gewkJCQkJCQlcCi0JU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAotCSsrKHNvKS0+
c29fY291bnQ7CQkJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlzb3JlbGUoc28pIGRvIHsJ
CQkJCQkJXAotCUFDQ0VQVF9MT0NLX0FTU0VSVCgpOwkJCQkJCVwKLQlTT0NLX0xPQ0tfQVNTRVJU
KHNvKTsJCQkJCQlcCi0JS0FTU0VSVCgoc28pLT5zb19jb3VudCA+IDAsICgic29yZWxlIikpOwkJ
CVwKLQlpZiAoLS0oc28pLT5zb19jb3VudCA9PSAwKQkJCQkJXAotCQlzb2ZyZWUoc28pOwkJCQkJ
CVwKLQllbHNlIHsJCQkJCQkJCVwKLQkJU09DS19VTkxPQ0soc28pOwkJCQkJXAotCQlBQ0NFUFRf
VU5MT0NLKCk7CQkJCQlcCi0JfQkJCQkJCQkJXAotfSB3aGlsZSAoMCkKLQotCi0vKiByZXBsYWNp
bmcgaW1pbiB3aXRoIG1pbiAodXNlcl9lbnZpcm9ubWVudC5oKSAqLwotI2RlZmluZQlzYnNwYWNl
KHNiKSBcCi0gICAgKChsb25nKSBtaW4oKGludCkoKHNiKS0+c2JfaGl3YXQgLSAoc2IpLT5zYl9j
YyksIFwKLQkgKGludCkoKHNiKS0+c2JfbWJtYXggLSAoc2IpLT5zYl9tYmNudCkpKQotCi0vKiBk
byB3ZSBoYXZlIHRvIHNlbmQgYWxsIGF0IG9uY2Ugb24gYSBzb2NrZXQ/ICovCi0jZGVmaW5lCXNv
c2VuZGFsbGF0b25jZShzbykgXAotICAgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MgJiBQUl9B
VE9NSUMpCi0KLS8qIGNhbiB3ZSByZWFkIHNvbWV0aGluZyBmcm9tIHNvPyAqLwotI2RlZmluZQlz
b3JlYWRhYmxlKHNvKSBcCi0gICAgKChpbnQpKChzbyktPnNvX3Jjdi5zYl9jYykgPj0gKHNvKS0+
c29fcmN2LnNiX2xvd2F0IHx8IFwKLQkoKHNvKS0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRS
Q1ZNT1JFKSB8fCBcCi0JIVRBSUxRX0VNUFRZKCYoc28pLT5zb19jb21wKSB8fCAoc28pLT5zb19l
cnJvcikKLQotI2lmIDAgIC8qICBvcmlnaW5hbCAqLwotI2RlZmluZSBQUl9DT05OUkVRVUlSRUQg
MHgwNCAgLyogZnJvbSBzeXMvcHJvdG9zdy5oICJuZWVkZWQiIGZvciBzb3dyaXRlYWJsZSAqLwot
I2RlZmluZQlzb3dyaXRlYWJsZShzbykgXAotICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+
PSAoc28pLT5zb19zbmQuc2JfbG93YXQgJiYgXAotCSgoKHNvKS0+c29fc3RhdGUmU1NfSVNDT05O
RUNURUQpIHx8IFwKLQkgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MmUFJfQ09OTlJFUVVJUkVE
KT09MCkpIHx8IFwKLSAgICAgKChzbyktPnNvX3NuZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1P
UkUpIHx8IFwKLSAgICAgKHNvKS0+c29fZXJyb3IpCi0jZWxzZSAgLyogbGluZSB3aXRoIFBSX0NP
Tk5SRVFVSVJFRCByZW1vdmVkICovCi0vKiBjYW4gd2Ugd3JpdGUgc29tZXRoaW5nIHRvIHNvPyAq
LwotI2RlZmluZQlzb3dyaXRlYWJsZShzbykgXAotICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25k
KSA+PSAoc28pLT5zb19zbmQuc2JfbG93YXQgJiYgXAotICAgICAgKCgoc28pLT5zb19zdGF0ZSZT
U19JU0NPTk5FQ1RFRCkpKSB8fCAgICAgICAgICAgICAgXAotICAgICAoKHNvKS0+c29fc25kLnNi
X3N0YXRlICYgU0JTX0NBTlRTRU5ETU9SRSkgfHwgXAotICAgICAoc28pLT5zb19lcnJvcikKLSNl
bmRpZgotCi1leHRlcm4gdm9pZCBzb2xpc3Rlbl9wcm90byhzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGJhY2tsb2cpOwotZXh0ZXJuIGludCBzb2xpc3Rlbl9wcm90b19jaGVjayhzdHJ1Y3Qgc29ja2V0
ICpzbyk7Ci1leHRlcm4gaW50IHNjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFj
a2xvZywgc3RydWN0IHByb2MgKnApOwotZXh0ZXJuIHZvaWQgc29jYW50cmN2bW9yZV9sb2NrZWQo
c3RydWN0IHNvY2tldCAqc28pOwotZXh0ZXJuIGludCBzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7Ci1leHRlcm4gaW50IHNjdHA2X2JpbmQoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdm9pZCAqcHJvYyk7Ci0jaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQotZXh0ZXJuIGludCBzY3RwY29ubl9iaW5kKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOwotI2VuZGlmCi1leHRlcm4gaW50IHNjdHBf
YWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyKTsKLWV4dGVy
biBpbnQgc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3Qg
dnJmX2lkKTsKLWV4dGVybiBpbnQgc2N0cDZfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
cHJvdG8sIHVpbnQzMl90IHZyZl9pZCk7Ci1leHRlcm4gaW50IHNjdHBfYWJvcnQoc3RydWN0IHNv
Y2tldCAqc28pOwotZXh0ZXJuIGludCBzY3RwNl9hYm9ydChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1l
eHRlcm4gdm9pZCBzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKTsKLWV4dGVybiBpbnQgc29h
Y2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSk7Ci1leHRlcm4g
aW50IHNvbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZyk7Ci1leHRlcm4gaW50
ICBzb3Jlc2VydmUoc3RydWN0IHNvY2tldCAqc28sIHVfbG9uZyBzbmRjYywgdV9sb25nIHJjdmNj
KTsKLWV4dGVybiB2b2lkIHNvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2J1
ZiAqc2IpOwotZXh0ZXJuIHZvaWQgd2FrZXVwKHZvaWQgKmlkZW50LCBzdHJ1Y3Qgc29ja2V0ICpz
byk7IC8qX19Vc2Vyc3BhY2VfXyAqLwotZXh0ZXJuIGludCB1aW9tb3ZlKHZvaWQgKmNwLCBpbnQg
biwgc3RydWN0IHVpbyAqdWlvKTsKLWV4dGVybiBpbnQgc2J3YWl0KHN0cnVjdCBzb2NrYnVmICpz
Yik7Ci1leHRlcm4gaW50IHNvZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbyk7Ci1leHRlcm4g
aW50IHNvY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0pOwot
ZXh0ZXJuIGludCBzY3RwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28pOwotZXh0ZXJuIGlu
dCBzY3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcik7
Ci1leHRlcm4gaW50IHNjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqYWRkcik7Ci0jaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQotZXh0ZXJuIGludCBzY3Rw
Y29ubl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOwot
I2VuZGlmCi1leHRlcm4gdm9pZCBzY3RwX2ZpbmlzaCh2b2lkKTsKLQotLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiAtLS0tLSAgbWFjcm9z
IGNvcGllZCBmcm9tIGFib3ZlIC0tLS0gKi8KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKgotICogRG8gd2UgbmVlZCB0byBub3RpZnkg
dGhlIG90aGVyIHNpZGUgd2hlbiBJL08gaXMgcG9zc2libGU/Ci0gKi8KLSNkZWZpbmUJc2Jfbm90
aWZ5KHNiKQkoKChzYiktPnNiX2ZsYWdzICYgKFNCX1dBSVQgfCBTQl9TRUwgfCBTQl9BU1lOQyB8
IFwKLSAgICBTQl9VUENBTEwgfCBTQl9BSU8gfCBTQl9LTk9URSkpICE9IDApCi0KLQotLyoKLSAq
IEluIHNvcndha2V1cCgpIGFuZCBzb3d3YWtldXAoKSwgYWNxdWlyZSB0aGUgc29ja2V0IGJ1ZmZl
ciBsb2NrIHRvCi0gKiBhdm9pZCBhIG5vbi1hdG9taWMgdGVzdC1hbmQtd2FrZXVwLiAgSG93ZXZl
ciwgc293YWtldXAgaXMKLSAqIHJlc3BvbnNpYmxlIGZvciByZWxlYXNpbmcgdGhlIGxvY2sgaWYg
aXQgaXMgY2FsbGVkLiAgV2UgdW5sb2NrIG9ubHkKLSAqIGlmIHdlIGRvbid0IGNhbGwgaW50byBz
b3dha2V1cC4gIElmIGFueSBjb2RlIGlzIGludHJvZHVjZWQgdGhhdAotICogZGlyZWN0bHkgaW52
b2tlcyB0aGUgdW5kZXJseWluZyBzb3dha2V1cCgpIHByaW1pdGl2ZXMsIGl0IG11c3QKLSAqIG1h
aW50YWluIHRoZSBzYW1lIHNlbWFudGljcy4KLSAqLwotI2RlZmluZQlzb3J3YWtldXBfbG9ja2Vk
KHNvKSBkbyB7CQkJCQlcCi0JU09DS0JVRl9MT0NLX0FTU0VSVCgmKHNvKS0+c29fcmN2KTsJCQkJ
XAotCWlmIChzYl9ub3RpZnkoJihzbyktPnNvX3JjdikpCQkJCQlcCi0JCXNvd2FrZXVwKChzbyks
ICYoc28pLT5zb19yY3YpOwkgCQkJXAotCWVsc2UJCQkJCQkJCVwKLQkJU09DS0JVRl9VTkxPQ0so
JihzbyktPnNvX3Jjdik7CQkJCVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUJc29yd2FrZXVwKHNv
KSBkbyB7CQkJCQkJXAotCVNPQ0tCVUZfTE9DSygmKHNvKS0+c29fcmN2KTsJCQkJCVwKLQlzb3J3
YWtldXBfbG9ja2VkKHNvKTsJCQkJCQlcCi19IHdoaWxlICgwKQotCi0jZGVmaW5lCXNvd3dha2V1
cF9sb2NrZWQoc28pIGRvIHsJCQkJCVwKLQlTT0NLQlVGX0xPQ0tfQVNTRVJUKCYoc28pLT5zb19z
bmQpOwkJCQlcCi0JaWYgKHNiX25vdGlmeSgmKHNvKS0+c29fc25kKSkJCQkJCVwKLQkJc293YWtl
dXAoKHNvKSwgJihzbyktPnNvX3NuZCk7IAkJCQlcCi0JZWxzZQkJCQkJCQkJXAotCQlTT0NLQlVG
X1VOTE9DSygmKHNvKS0+c29fc25kKTsJCQkJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZQlzb3d3
YWtldXAoc28pIGRvIHsJCQkJCQlcCi0JU09DS0JVRl9MT0NLKCYoc28pLT5zb19zbmQpOwkJCQkJ
XAotCXNvd3dha2V1cF9sb2NrZWQoc28pOwkJCQkJCVwKLX0gd2hpbGUgKDApCi0KLQotCi0jZW5k
aWYgLyogX19Vc2Vyc3BhY2VfXyAqLwotCi0jZW5kaWYgLyogIV9TWVNfU09DS0VUVkFSX0hfICov
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX3VtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl91bWEuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWJkZWZkYjgwOTY4YWU5YzQ5ZWY0ZWIwYTI1
ZmExYTljZTlhNGI0Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c2VyX3VtYS5oCisrKyAvZGV2L251bGwKQEAgLTEsOTggKzAsMCBAQAot
LyotCi0gKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29weXJpZ2h0
IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIg
SXJlbmUgUnVlbmdlbGVyCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhl
bgotICoKLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfVVNFUl9VTUFfSF8K
LSNkZWZpbmUgX1VTRVJfVU1BX0hfCi0KLSNkZWZpbmUgVU1BX1pGTEFHX0ZVTEwJCTB4NDAwMDAw
MDAJLyogUmVhY2hlZCB1el9tYXhwYWdlcyAqLwotI2RlZmluZSBVTUFfQUxJR05fUFRSCShzaXpl
b2Yodm9pZCAqKSAtIDEpCS8qIEFsaWdubWVudCBmaXQgZm9yIHB0ciAqLwotCi0vKiBfX1VzZXJz
cGFjZV9fIEFsbCB0aGVzZSBkZWZpbml0aW9ucyB3aWxsIGNoYW5nZSBmb3IKLXVzZXJzcGFjZSBV
bml2ZXJzYWwgTWVtb3J5IEFsbG9jYXRvciAoVU1BKS4gVGhlc2UgYXJlIGluY2x1ZGVkCi1mb3Ig
cmVmZXJlbmNlIHB1cnBvc2VzIGFuZCB0byBhdm9pZCBjb21waWxlIGVycm9ycyBmb3IgdGhlIHRp
bWUgYmVpbmcuCi0qLwotdHlwZWRlZiBpbnQgKCp1bWFfY3Rvcikodm9pZCAqbWVtLCBpbnQgc2l6
ZSwgdm9pZCAqYXJnLCBpbnQgZmxhZ3MpOwotdHlwZWRlZiB2b2lkICgqdW1hX2R0b3IpKHZvaWQg
Km1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Ci10eXBlZGVmIGludCAoKnVtYV9pbml0KSh2b2lk
ICptZW0sIGludCBzaXplLCBpbnQgZmxhZ3MpOwotdHlwZWRlZiB2b2lkICgqdW1hX2ZpbmkpKHZv
aWQgKm1lbSwgaW50IHNpemUpOwotdHlwZWRlZiBzdHJ1Y3QgdW1hX3pvbmUgKiB1bWFfem9uZV90
OwotdHlwZWRlZiBzdHJ1Y3QgdW1hX2tlZyAqIHVtYV9rZWdfdDsKLQotc3RydWN0IHVtYV9jYWNo
ZSB7Ci0gICAgaW50IHN0dWI7IC8qIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLwotfTsKLQotc3RydWN0
IHVtYV9rZWcgewotICAgIGludCBzdHViOyAvKiBUT0RPIF9fVXNlcnNwYWNlX18gKi8KLX07Ci0K
LXN0cnVjdCB1bWFfem9uZSB7Ci0JY2hhcgkJKnV6X25hbWU7CS8qIFRleHQgbmFtZSBvZiB0aGUg
em9uZSAqLwotCXN0cnVjdCBtdHgJKnV6X2xvY2s7CS8qIExvY2sgZm9yIHRoZSB6b25lIChrZWcn
cyBsb2NrKSAqLwotCXVtYV9rZWdfdAl1el9rZWc7CQkvKiBPdXIgdW5kZXJseWluZyBLZWcgKi8K
LQotCUxJU1RfRU5UUlkodW1hX3pvbmUpCXV6X2xpbms7CS8qIExpc3Qgb2YgYWxsIHpvbmVzIGlu
IGtlZyAqLwotCUxJU1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnVsbF9idWNrZXQ7CS8qIGZ1bGwg
YnVja2V0cyAqLwotCUxJU1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnJlZV9idWNrZXQ7CS8qIEJ1
Y2tldHMgZm9yIGZyZWVzICovCi0KLQl1bWFfY3Rvcgl1el9jdG9yOwkvKiBDb25zdHJ1Y3RvciBm
b3IgZWFjaCBhbGxvY2F0aW9uICovCi0JdW1hX2R0b3IJdXpfZHRvcjsJLyogRGVzdHJ1Y3RvciAq
LwotCXVtYV9pbml0CXV6X2luaXQ7CS8qIEluaXRpYWxpemVyIGZvciBlYWNoIGl0ZW0gKi8KLQl1
bWFfZmluaQl1el9maW5pOwkvKiBEaXNjYXJkcyBtZW1vcnkgKi8KLQotCXVfaW50NjRfdAl1el9h
bGxvY3M7CS8qIFRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyAqLwotCXVfaW50NjRfdAl1el9m
cmVlczsJLyogVG90YWwgbnVtYmVyIG9mIGZyZWVzICovCi0JdV9pbnQ2NF90CXV6X2ZhaWxzOwkv
KiBUb3RhbCBudW1iZXIgb2YgYWxsb2MgZmFpbHVyZXMgKi8KLQl1aW50MTZfdAl1el9maWxsczsJ
LyogT3V0c3RhbmRpbmcgYnVja2V0IGZpbGxzICovCi0JdWludDE2X3QJdXpfY291bnQ7CS8qIEhp
Z2hlc3QgdmFsdWUgdWJfcHRyIGNhbiBoYXZlICovCi0KLQkvKgotCSAqIFRoaXMgSEFTIHRvIGJl
IHRoZSBsYXN0IGl0ZW0gYmVjYXVzZSB3ZSBhZGp1c3QgdGhlIHpvbmUgc2l6ZQotCSAqIGJhc2Vk
IG9uIE5DUFUgYW5kIHRoZW4gYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgem9uZXMuCi0JICov
Ci0Jc3RydWN0IHVtYV9jYWNoZQl1el9jcHVbMV07CS8qIFBlciBjcHUgY2FjaGVzICovCi19Owot
Ci0vKiBQcm90b3R5cGUgKi8KLXVtYV96b25lX3QKLXVtYV96Y3JlYXRlKGNoYXIgKm5hbWUsIHNp
emVfdCBzaXplLCB1bWFfY3RvciBjdG9yLCB1bWFfZHRvciBkdG9yLAotCSAgICB1bWFfaW5pdCB1
bWluaXQsIHVtYV9maW5pIGZpbmksIGludCBhbGlnbiwgdV9pbnQzMl90IGZsYWdzKTsKLQotCi0j
ZGVmaW5lIHVtYV96b25lX3NldF9tYXgoem9uZSwgbnVtYmVyKSAvKiBzdHViIFRPRE8gX19Vc2Vy
c3BhY2VfXyAqLwotCi11bWFfem9uZV90Ci11bWFfemNyZWF0ZShjaGFyICpuYW1lLCBzaXplX3Qg
c2l6ZSwgdW1hX2N0b3IgY3RvciwgdW1hX2R0b3IgZHRvciwKLQkgICAgdW1hX2luaXQgdW1pbml0
LCB1bWFfZmluaSBmaW5pLCBpbnQgYWxpZ24sIHVfaW50MzJfdCBmbGFncykKLXsKLSAgICByZXR1
cm4gTlVMTDsgLyogc3R1YiBUT0RPIF9fVXNlcnNwYWNlX18uIEFsc28gcGxhY2UgaW1wbGVtZW50
YXRpb24gaW4gYSBzZXBhcmF0ZSAuYyBmaWxlICovCi0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cC5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA2Yzk4MDMzMDZhOTlkYmVmYTFlODUxZGVmMzAzYzI3ZDE1NzMzOWZhLi4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHAuaAorKysgL2Rldi9udWxsCkBAIC0xLDEyNzAgKzAsMCBAQAotLyotCi0gKiBDb3B5cmln
aHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgotICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAg
SHVtYWlyYSBLYW1hbAotICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVy
Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgotICoKLSAqIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICog
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2lmbmRlZiBfX1VTUlNDVFBfSF9fCi0jZGVmaW5lIF9fVVNS
U0NUUF9IX18KLQotI2lmZGVmICBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQot
I2luY2x1ZGUgPGVycm5vLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgX1dJTjMy
Ci0jaWZkZWYgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKQotI2VuZGlm
Ci0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2Vsc2UKLSNp
bmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0K
LSNpZm5kZWYgTVNHX05PVElGSUNBVElPTgotLyogVGhpcyBkZWZpbml0aW9uIE1VU1QgYmUgaW4g
c3luYyB3aXRoIHVzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIuaCAqLwotI2RlZmluZSBNU0dfTk9U
SUZJQ0FUSU9OIDB4MjAwMAotI2VuZGlmCi0KLSNpZm5kZWYgSVBQUk9UT19TQ1RQCi0vKiBUaGlz
IGlzIHRoZSBJQU5BIGFzc2lnbmVkIHByb3RvY29sIG51bWJlciBvZiBTQ1RQLiAqLwotI2RlZmlu
ZSBJUFBST1RPX1NDVFAgMTMyCi0jZW5kaWYKLQotI2lmZGVmIF9XSU4zMgotI2lmIGRlZmluZWQo
X01TQ19WRVIpICYmIF9NU0NfVkVSID49IDE2MDAKLSNpbmNsdWRlIDxzdGRpbnQuaD4KLSNlbGlm
IGRlZmluZWQoU0NUUF9TVERJTlRfSU5DTFVERSkKLSNpbmNsdWRlIFNDVFBfU1RESU5UX0lOQ0xV
REUKLSNlbHNlCi0jZGVmaW5lIHVpbnQ4X3QgICB1bnNpZ25lZCBfX2ludDgKLSNkZWZpbmUgdWlu
dDE2X3QgIHVuc2lnbmVkIF9faW50MTYKLSNkZWZpbmUgdWludDMyX3QgIHVuc2lnbmVkIF9faW50
MzIKLSNkZWZpbmUgdWludDY0X3QgIHVuc2lnbmVkIF9faW50NjQKLSNkZWZpbmUgaW50MTZfdCAg
IF9faW50MTYKLSNkZWZpbmUgaW50MzJfdCAgIF9faW50MzIKLSNlbmRpZgotCi0jZGVmaW5lIHNz
aXplX3QgICBfX2ludDY0Ci0jZGVmaW5lIE1TR19FT1IgICAweDgKLSNpZm5kZWYgRVdPVUxEQkxP
Q0sKLSNkZWZpbmUgRVdPVUxEQkxPQ0sgIFdTQUVXT1VMREJMT0NLCi0jZW5kaWYKLSNpZm5kZWYg
RUlOUFJPR1JFU1MKLSNkZWZpbmUgRUlOUFJPR1JFU1MgIFdTQUVJTlBST0dSRVNTCi0jZW5kaWYK
LSNkZWZpbmUgU0hVVF9SRCAgICAxCi0jZGVmaW5lIFNIVVRfV1IgICAgMgotI2RlZmluZSBTSFVU
X1JEV1IgIDMKLSNlbmRpZgotCi10eXBlZGVmIHVpbnQzMl90IHNjdHBfYXNzb2NfdDsKLQotI2lm
IGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSBwYWNrIChwdXNo
LCAxKQotI2RlZmluZSBTQ1RQX1BBQ0tFRAotI2Vsc2UKLSNkZWZpbmUgU0NUUF9QQUNLRUQgX19h
dHRyaWJ1dGVfXygocGFja2VkKSkKLSNlbmRpZgotCi1zdHJ1Y3Qgc2N0cF9jb21tb25faGVhZGVy
IHsKLQl1aW50MTZfdCBzb3VyY2VfcG9ydDsKLQl1aW50MTZfdCBkZXN0aW5hdGlvbl9wb3J0Owot
CXVpbnQzMl90IHZlcmlmaWNhdGlvbl90YWc7Ci0JdWludDMyX3QgY3JjMzJjOwotfSBTQ1RQX1BB
Q0tFRDsKLQotI2lmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdt
YSBwYWNrKHBvcCkKLSNlbmRpZgotI3VuZGVmIFNDVFBfUEFDS0VECi0KLSNkZWZpbmUgQUZfQ09O
TiAxMjMKLS8qIFRoZSBkZWZpbml0aW9uIG9mIHN0cnVjdCBzb2NrYWRkcl9jb25uIE1VU1QgYmUg
aW4KLSAqIHR1bmUgd2l0aCBvdGhlciBzb2NrYWRkcl8qIHN0cnVjdHVyZXMuCi0gKi8KLSNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0JpdHJpZ19fKSB8fCBkZWZpbmVkKF9fRHJh
Z29uRmx5X18pIHx8IFwKLSAgICBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fT3Bl
bkJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCi1zdHJ1Y3Qgc29ja2FkZHJfY29ubiB7Ci0J
dWludDhfdCBzY29ubl9sZW47Ci0JdWludDhfdCBzY29ubl9mYW1pbHk7Ci0JdWludDE2X3Qgc2Nv
bm5fcG9ydDsKLQl2b2lkICpzY29ubl9hZGRyOwotfTsKLSNlbHNlCi1zdHJ1Y3Qgc29ja2FkZHJf
Y29ubiB7Ci0JdWludDE2X3Qgc2Nvbm5fZmFtaWx5OwotCXVpbnQxNl90IHNjb25uX3BvcnQ7Ci0J
dm9pZCAqc2Nvbm5fYWRkcjsKLX07Ci0jZW5kaWYKLQotdW5pb24gc2N0cF9zb2Nrc3RvcmUgewot
I2lmIGRlZmluZWQoSU5FVCkKLQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwotI2VuZGlmCi0jaWYg
ZGVmaW5lZChJTkVUNikKLQlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7Ci0jZW5kaWYKLQlzdHJ1
Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKLQlzdHJ1Y3Qgc29ja2FkZHIgc2E7Ci19OwotCi0jZGVm
aW5lIFNDVFBfRlVUVVJFX0FTU09DICAwCi0jZGVmaW5lIFNDVFBfQ1VSUkVOVF9BU1NPQyAxCi0j
ZGVmaW5lIFNDVFBfQUxMX0FTU09DICAgICAyCi0KLS8qKiogIFN0cnVjdHVyZXMgYW5kIGRlZmlu
aXRpb25zIHRvIHVzZSB0aGUgc29ja2V0IEFQSSAgKioqLwotCi0jZGVmaW5lIFNDVFBfQUxJR05f
UkVTVl9QQUQgOTIKLSNkZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRF9TSE9SVCA3NgotCi1zdHJ1
Y3Qgc2N0cF9yY3ZpbmZvIHsKLQl1aW50MTZfdCByY3Zfc2lkOwotCXVpbnQxNl90IHJjdl9zc247
Ci0JdWludDE2X3QgcmN2X2ZsYWdzOwotCXVpbnQzMl90IHJjdl9wcGlkOwotCXVpbnQzMl90IHJj
dl90c247Ci0JdWludDMyX3QgcmN2X2N1bXRzbjsKLQl1aW50MzJfdCByY3ZfY29udGV4dDsKLQlz
Y3RwX2Fzc29jX3QgcmN2X2Fzc29jX2lkOwotfTsKLQotc3RydWN0IHNjdHBfbnh0aW5mbyB7Ci0J
dWludDE2X3Qgbnh0X3NpZDsKLQl1aW50MTZfdCBueHRfZmxhZ3M7Ci0JdWludDMyX3Qgbnh0X3Bw
aWQ7Ci0JdWludDMyX3Qgbnh0X2xlbmd0aDsKLQlzY3RwX2Fzc29jX3Qgbnh0X2Fzc29jX2lkOwot
fTsKLQotI2RlZmluZSBTQ1RQX05PX05FWFRfTVNHICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUg
U0NUUF9ORVhUX01TR19BVkFJTCAgICAgICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfTkVYVF9NU0df
SVNDT01QTEVURSAgIDB4MDAwMgotI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTX1VOT1JERVJFRCAw
eDAwMDQKLSNkZWZpbmUgU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04gMHgwMDA4Ci0KLXN0
cnVjdCBzY3RwX3JlY3Z2X3JuIHsKLQlzdHJ1Y3Qgc2N0cF9yY3ZpbmZvIHJlY3Z2X3JjdmluZm87
Ci0Jc3RydWN0IHNjdHBfbnh0aW5mbyByZWN2dl9ueHRpbmZvOwotfTsKLQotI2RlZmluZSBTQ1RQ
X1JFQ1ZWX05PSU5GTyAgMAotI2RlZmluZSBTQ1RQX1JFQ1ZWX1JDVklORk8gMQotI2RlZmluZSBT
Q1RQX1JFQ1ZWX05YVElORk8gMgotI2RlZmluZSBTQ1RQX1JFQ1ZWX1JOICAgICAgMwotCi0jZGVm
aW5lIFNDVFBfU0VORFZfTk9JTkZPICAgMAotI2RlZmluZSBTQ1RQX1NFTkRWX1NORElORk8gIDEK
LSNkZWZpbmUgU0NUUF9TRU5EVl9QUklORk8gICAyCi0jZGVmaW5lIFNDVFBfU0VORFZfQVVUSElO
Rk8gMwotI2RlZmluZSBTQ1RQX1NFTkRWX1NQQSAgICAgIDQKLQotI2RlZmluZSBTQ1RQX1NFTkRf
U05ESU5GT19WQUxJRCAgMHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX1NFTkRfUFJJTkZPX1ZBTElE
ICAgMHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQX1NFTkRfQVVUSElORk9fVkFMSUQgMHgwMDAwMDAw
NAotCi1zdHJ1Y3Qgc2N0cF9zbmRfYWxsX2NvbXBsZXRlcyB7Ci0JdWludDE2X3Qgc2FsbF9zdHJl
YW07Ci0JdWludDE2X3Qgc2FsbF9mbGFnczsKLQl1aW50MzJfdCBzYWxsX3BwaWQ7Ci0JdWludDMy
X3Qgc2FsbF9jb250ZXh0OwotCXVpbnQzMl90IHNhbGxfbnVtX3NlbnQ7Ci0JdWludDMyX3Qgc2Fs
bF9udW1fZmFpbGVkOwotfTsKLQotc3RydWN0IHNjdHBfc25kaW5mbyB7Ci0JdWludDE2X3Qgc25k
X3NpZDsKLQl1aW50MTZfdCBzbmRfZmxhZ3M7Ci0JdWludDMyX3Qgc25kX3BwaWQ7Ci0JdWludDMy
X3Qgc25kX2NvbnRleHQ7Ci0Jc2N0cF9hc3NvY190IHNuZF9hc3NvY19pZDsKLX07Ci0KLXN0cnVj
dCBzY3RwX3ByaW5mbyB7Ci0JdWludDE2X3QgcHJfcG9saWN5OwotCXVpbnQzMl90IHByX3ZhbHVl
OwotfTsKLQotc3RydWN0IHNjdHBfYXV0aGluZm8gewotCXVpbnQxNl90IGF1dGhfa2V5bnVtYmVy
OwotfTsKLQotc3RydWN0IHNjdHBfc2VuZHZfc3BhIHsKLQl1aW50MzJfdCBzZW5kdl9mbGFnczsK
LQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNlbmR2X3NuZGluZm87Ci0Jc3RydWN0IHNjdHBfcHJpbmZv
IHNlbmR2X3ByaW5mbzsKLQlzdHJ1Y3Qgc2N0cF9hdXRoaW5mbyBzZW5kdl9hdXRoaW5mbzsKLX07
Ci0KLXN0cnVjdCBzY3RwX3VkcGVuY2FwcyB7Ci0Jc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3Vl
X2FkZHJlc3M7Ci0JdWludDMyX3Qgc3VlX2Fzc29jX2lkOwotCXVpbnQxNl90IHN1ZV9wb3J0Owot
fTsKLQotLyoqKioqKioqICBOb3RpZmljYXRpb25zICAqKioqKioqKioqKioqKi8KLQotLyogbm90
aWZpY2F0aW9uIHR5cGVzICovCi0jZGVmaW5lIFNDVFBfQVNTT0NfQ0hBTkdFICAgICAgICAgICAg
ICAgICAweDAwMDEKLSNkZWZpbmUgU0NUUF9QRUVSX0FERFJfQ0hBTkdFICAgICAgICAgICAgIDB4
MDAwMgotI2RlZmluZSBTQ1RQX1JFTU9URV9FUlJPUiAgICAgICAgICAgICAgICAgMHgwMDAzCi0j
ZGVmaW5lIFNDVFBfU0VORF9GQUlMRUQgICAgICAgICAgICAgICAgICAweDAwMDQKLSNkZWZpbmUg
U0NUUF9TSFVURE9XTl9FVkVOVCAgICAgICAgICAgICAgIDB4MDAwNQotI2RlZmluZSBTQ1RQX0FE
QVBUQVRJT05fSU5ESUNBVElPTiAgICAgICAgMHgwMDA2Ci0jZGVmaW5lIFNDVFBfUEFSVElBTF9E
RUxJVkVSWV9FVkVOVCAgICAgICAweDAwMDcKLSNkZWZpbmUgU0NUUF9BVVRIRU5USUNBVElPTl9F
VkVOVCAgICAgICAgIDB4MDAwOAotI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCAgICAg
ICAgICAgMHgwMDA5Ci0jZGVmaW5lIFNDVFBfU0VOREVSX0RSWV9FVkVOVCAgICAgICAgICAgICAw
eDAwMGEKLSNkZWZpbmUgU0NUUF9OT1RJRklDQVRJT05TX1NUT1BQRURfRVZFTlQgIDB4MDAwYgot
I2RlZmluZSBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UICAgICAgICAgICAgMHgwMDBjCi0jZGVmaW5l
IFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVCAgICAgICAgICAweDAwMGQKLSNkZWZpbmUgU0NUUF9T
RU5EX0ZBSUxFRF9FVkVOVCAgICAgICAgICAgIDB4MDAwZQotCi0vKiBub3RpZmljYXRpb24gZXZl
bnQgc3RydWN0dXJlcyAqLwotCi0KLS8qIGFzc29jaWF0aW9uIGNoYW5nZSBldmVudCAqLwotc3Ry
dWN0IHNjdHBfYXNzb2NfY2hhbmdlIHsKLQl1aW50MTZfdCBzYWNfdHlwZTsKLQl1aW50MTZfdCBz
YWNfZmxhZ3M7Ci0JdWludDMyX3Qgc2FjX2xlbmd0aDsKLQl1aW50MTZfdCBzYWNfc3RhdGU7Ci0J
dWludDE2X3Qgc2FjX2Vycm9yOwotCXVpbnQxNl90IHNhY19vdXRib3VuZF9zdHJlYW1zOwotCXVp
bnQxNl90IHNhY19pbmJvdW5kX3N0cmVhbXM7Ci0Jc2N0cF9hc3NvY190IHNhY19hc3NvY19pZDsK
LQl1aW50OF90IHNhY19pbmZvW107IC8qIG5vdCBhdmFpbGFibGUgeWV0ICovCi19OwotCi0vKiBz
YWNfc3RhdGUgdmFsdWVzICovCi0jZGVmaW5lIFNDVFBfQ09NTV9VUCAgICAgICAgMHgwMDAxCi0j
ZGVmaW5lIFNDVFBfQ09NTV9MT1NUICAgICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfUkVTVEFSVCAg
ICAgICAgMHgwMDAzCi0jZGVmaW5lIFNDVFBfU0hVVERPV05fQ09NUCAgMHgwMDA0Ci0jZGVmaW5l
IFNDVFBfQ0FOVF9TVFJfQVNTT0MgMHgwMDA1Ci0KLS8qIHNhY19pbmZvIHZhbHVlcyAqLwotI2Rl
ZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX1BSICAgICAgICAweDAxCi0jZGVmaW5lIFNDVFBfQVNT
T0NfU1VQUE9SVFNfQVVUSCAgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19B
U0NPTkYgICAgMHgwMwotI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGICAweDA0
Ci0jZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfUkVfQ09ORklHIDB4MDUKLSNkZWZpbmUgU0NU
UF9BU1NPQ19TVVBQT1JUU19NQVggICAgICAgMHgwNQotCi0vKiBBZGRyZXNzIGV2ZW50ICovCi1z
dHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgewotCXVpbnQxNl90IHNwY190eXBlOwotCXVpbnQxNl90
IHNwY19mbGFnczsKLQl1aW50MzJfdCBzcGNfbGVuZ3RoOwotCXN0cnVjdCBzb2NrYWRkcl9zdG9y
YWdlIHNwY19hYWRkcjsKLQl1aW50MzJfdCBzcGNfc3RhdGU7Ci0JdWludDMyX3Qgc3BjX2Vycm9y
OwotCXNjdHBfYXNzb2NfdCBzcGNfYXNzb2NfaWQ7Ci0JdWludDhfdCBzcGNfcGFkZGluZ1s0XTsK
LX07Ci0KLS8qIHBhZGRyIHN0YXRlIHZhbHVlcyAqLwotI2RlZmluZSBTQ1RQX0FERFJfQVZBSUxB
QkxFICAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfQUREUl9VTlJFQUNIQUJMRSAweDAwMDIKLSNkZWZp
bmUgU0NUUF9BRERSX1JFTU9WRUQgICAgIDB4MDAwMwotI2RlZmluZSBTQ1RQX0FERFJfQURERUQg
ICAgICAgMHgwMDA0Ci0jZGVmaW5lIFNDVFBfQUREUl9NQURFX1BSSU0gICAweDAwMDUKLSNkZWZp
bmUgU0NUUF9BRERSX0NPTkZJUk1FRCAgIDB4MDAwNgotCi0vKiByZW1vdGUgZXJyb3IgZXZlbnRz
ICovCi1zdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IgewotCXVpbnQxNl90IHNyZV90eXBlOwotCXVp
bnQxNl90IHNyZV9mbGFnczsKLQl1aW50MzJfdCBzcmVfbGVuZ3RoOwotCXVpbnQxNl90IHNyZV9l
cnJvcjsKLQlzY3RwX2Fzc29jX3Qgc3JlX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3JlX2RhdGFbNF07
Ci19OwotCi0vKiBzaHV0ZG93biBldmVudCAqLwotc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQg
ewotCXVpbnQxNl90IHNzZV90eXBlOwotCXVpbnQxNl90IHNzZV9mbGFnczsKLQl1aW50MzJfdCBz
c2VfbGVuZ3RoOwotCXNjdHBfYXNzb2NfdCBzc2VfYXNzb2NfaWQ7Ci19OwotCi0vKiBBZGFwdGF0
aW9uIGxheWVyIGluZGljYXRpb24gKi8KLXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgewot
CXVpbnQxNl90IHNhaV90eXBlOwotCXVpbnQxNl90IHNhaV9mbGFnczsKLQl1aW50MzJfdCBzYWlf
bGVuZ3RoOwotCXVpbnQzMl90IHNhaV9hZGFwdGF0aW9uX2luZDsKLQlzY3RwX2Fzc29jX3Qgc2Fp
X2Fzc29jX2lkOwotfTsKLQotLyogUGFydGlhbCBkZWxpdmVyeSBldmVudCAqLwotc3RydWN0IHNj
dHBfcGRhcGlfZXZlbnQgewotCXVpbnQxNl90IHBkYXBpX3R5cGU7Ci0JdWludDE2X3QgcGRhcGlf
ZmxhZ3M7Ci0JdWludDMyX3QgcGRhcGlfbGVuZ3RoOwotCXVpbnQzMl90IHBkYXBpX2luZGljYXRp
b247Ci0JdWludDMyX3QgcGRhcGlfc3RyZWFtOwotCXVpbnQzMl90IHBkYXBpX3NlcTsKLQlzY3Rw
X2Fzc29jX3QgcGRhcGlfYXNzb2NfaWQ7Ci19OwotCi0vKiBpbmRpY2F0aW9uIHZhbHVlcyAqLwot
I2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRCAgMHgwMDAxCi0KLS8qIFNDVFAg
YXV0aGVudGljYXRpb24gZXZlbnQgKi8KLXN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgewotCXVp
bnQxNl90IGF1dGhfdHlwZTsKLQl1aW50MTZfdCBhdXRoX2ZsYWdzOwotCXVpbnQzMl90IGF1dGhf
bGVuZ3RoOwotCXVpbnQxNl90IGF1dGhfa2V5bnVtYmVyOwotCXVpbnQzMl90IGF1dGhfaW5kaWNh
dGlvbjsKLQlzY3RwX2Fzc29jX3QgYXV0aF9hc3NvY19pZDsKLX07Ci0KLS8qIGluZGljYXRpb24g
dmFsdWVzICovCi0jZGVmaW5lIFNDVFBfQVVUSF9ORVdfS0VZICAgMHgwMDAxCi0jZGVmaW5lIFND
VFBfQVVUSF9OT19BVVRIICAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfQVVUSF9GUkVFX0tFWSAgMHgw
MDAzCi0KLS8qIFNDVFAgc2VuZGVyIGRyeSBldmVudCAqLwotc3RydWN0IHNjdHBfc2VuZGVyX2Ry
eV9ldmVudCB7Ci0JdWludDE2X3Qgc2VuZGVyX2RyeV90eXBlOwotCXVpbnQxNl90IHNlbmRlcl9k
cnlfZmxhZ3M7Ci0JdWludDMyX3Qgc2VuZGVyX2RyeV9sZW5ndGg7Ci0Jc2N0cF9hc3NvY190IHNl
bmRlcl9kcnlfYXNzb2NfaWQ7Ci19OwotCi0KLS8qIFN0cmVhbSByZXNldCBldmVudCAtIHN1YnNj
cmliZSB0byBTQ1RQX1NUUkVBTV9SRVNFVF9FVkVOVCAqLwotc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2V2ZW50IHsKLQl1aW50MTZfdCBzdHJyZXNldF90eXBlOwotCXVpbnQxNl90IHN0cnJlc2V0
X2ZsYWdzOwotCXVpbnQzMl90IHN0cnJlc2V0X2xlbmd0aDsKLQlzY3RwX2Fzc29jX3Qgc3RycmVz
ZXRfYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc3RycmVzZXRfc3RyZWFtX2xpc3RbXTsKLX07Ci0KLS8q
IGZsYWdzIGluIHN0cmVhbV9yZXNldF9ldmVudCAoc3RycmVzZXRfZmxhZ3MpICovCi0jZGVmaW5l
IFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTiAgMHgwMDAxCi0jZGVmaW5lIFNDVFBfU1RS
RUFNX1JFU0VUX09VVEdPSU5HX1NTTiAgMHgwMDAyCi0jZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VU
X0RFTklFRCAgICAgICAgMHgwMDA0IC8qIFNDVFBfU1RSUkVTRVRfRkFJTEVEICovCi0jZGVmaW5l
IFNDVFBfU1RSRUFNX1JFU0VUX0ZBSUxFRCAgICAgICAgMHgwMDA4IC8qIFNDVFBfU1RSUkVTRVRf
RkFJTEVEICovCi0jZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRURfREVOSUVEICAgICAgMHgwMDEw
Ci0KLSNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcgICAgICAweDAwMDAwMDAxCi0j
ZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HICAgICAgMHgwMDAwMDAwMgotCi0KLS8q
IEFzc29jIHJlc2V0IGV2ZW50IC0gc3Vic2NyaWJlIHRvIFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQg
Ki8KLXN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50IHsKLQl1aW50MTZfdCBhc3NvY3Jlc2V0
X3R5cGU7Ci0JdWludDE2X3QgYXNzb2NyZXNldF9mbGFnczsKLQl1aW50MzJfdCBhc3NvY3Jlc2V0
X2xlbmd0aDsKLQlzY3RwX2Fzc29jX3QgYXNzb2NyZXNldF9hc3NvY19pZDsKLQl1aW50MzJfdCBh
c3NvY3Jlc2V0X2xvY2FsX3RzbjsKLQl1aW50MzJfdCBhc3NvY3Jlc2V0X3JlbW90ZV90c247Ci19
OwotCi0jZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRfREVOSUVEICAgICAgICAweDAwMDQKLSNkZWZp
bmUgU0NUUF9BU1NPQ19SRVNFVF9GQUlMRUQgICAgICAgIDB4MDAwOAotCi0KLS8qIFN0cmVhbSBj
aGFuZ2UgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UICovCi1z
dHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHsKLQl1aW50MTZfdCBzdHJjaGFuZ2VfdHlw
ZTsKLQl1aW50MTZfdCBzdHJjaGFuZ2VfZmxhZ3M7Ci0JdWludDMyX3Qgc3RyY2hhbmdlX2xlbmd0
aDsKLQlzY3RwX2Fzc29jX3Qgc3RyY2hhbmdlX2Fzc29jX2lkOwotCXVpbnQxNl90IHN0cmNoYW5n
ZV9pbnN0cm1zOwotCXVpbnQxNl90IHN0cmNoYW5nZV9vdXRzdHJtczsKLX07Ci0KLSNkZWZpbmUg
U0NUUF9TVFJFQU1fQ0hBTkdFX0RFTklFRAkweDAwMDQKLSNkZWZpbmUgU0NUUF9TVFJFQU1fQ0hB
TkdFX0ZBSUxFRAkweDAwMDgKLQotCi0vKiBTQ1RQIHNlbmQgZmFpbGVkIGV2ZW50ICovCi1zdHJ1
Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCB7Ci0JdWludDE2X3Qgc3NmZV90eXBlOwotCXVpbnQx
Nl90IHNzZmVfZmxhZ3M7Ci0JdWludDMyX3Qgc3NmZV9sZW5ndGg7Ci0JdWludDMyX3Qgc3NmZV9l
cnJvcjsKLQlzdHJ1Y3Qgc2N0cF9zbmRpbmZvIHNzZmVfaW5mbzsKLQlzY3RwX2Fzc29jX3Qgc3Nm
ZV9hc3NvY19pZDsKLQl1aW50OF90ICBzc2ZlX2RhdGFbXTsKLX07Ci0KLS8qIGZsYWcgdGhhdCBp
bmRpY2F0ZXMgc3RhdGUgb2YgZGF0YSAqLwotI2RlZmluZSBTQ1RQX0RBVEFfVU5TRU5UICAweDAw
MDEJLyogaW5xdWV1ZSBuZXZlciBvbiB3aXJlICovCi0jZGVmaW5lIFNDVFBfREFUQV9TRU5UICAg
IDB4MDAwMgkvKiBvbiB3aXJlIGF0IGZhaWx1cmUgKi8KLQotLyogU0NUUCBldmVudCBvcHRpb24g
Ki8KLXN0cnVjdCBzY3RwX2V2ZW50IHsKLQlzY3RwX2Fzc29jX3QgICBzZV9hc3NvY19pZDsKLQl1
aW50MTZfdCAgICAgICBzZV90eXBlOwotCXVpbnQ4X3QgICAgICAgIHNlX29uOwotfTsKLQotdW5p
b24gc2N0cF9ub3RpZmljYXRpb24gewotCXN0cnVjdCBzY3RwX3RsdiB7Ci0JCXVpbnQxNl90IHNu
X3R5cGU7Ci0JCXVpbnQxNl90IHNuX2ZsYWdzOwotCQl1aW50MzJfdCBzbl9sZW5ndGg7Ci0JfSBz
bl9oZWFkZXI7Ci0Jc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlIHNuX2Fzc29jX2NoYW5nZTsKLQlz
dHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2Ugc25fcGFkZHJfY2hhbmdlOwotCXN0cnVjdCBzY3RwX3Jl
bW90ZV9lcnJvciBzbl9yZW1vdGVfZXJyb3I7Ci0Jc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQg
c25fc2h1dGRvd25fZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCBzbl9hZGFw
dGF0aW9uX2V2ZW50OwotCXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHNuX3BkYXBpX2V2ZW50Owot
CXN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgc25fYXV0aF9ldmVudDsKLQlzdHJ1Y3Qgc2N0cF9z
ZW5kZXJfZHJ5X2V2ZW50IHNuX3NlbmRlcl9kcnlfZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfc2VuZF9m
YWlsZWRfZXZlbnQgc25fc2VuZF9mYWlsZWRfZXZlbnQ7Ci0Jc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2V2ZW50IHNuX3N0cnJlc2V0X2V2ZW50OwotCXN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2
ZW50ICBzbl9hc3NvY3Jlc2V0X2V2ZW50OwotCXN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZl
bnQgc25fc3RyY2hhbmdlX2V2ZW50OwotfTsKLQotc3RydWN0IHNjdHBfZXZlbnRfc3Vic2NyaWJl
IHsKLQl1aW50OF90IHNjdHBfZGF0YV9pb19ldmVudDsKLQl1aW50OF90IHNjdHBfYXNzb2NpYXRp
b25fZXZlbnQ7Ci0JdWludDhfdCBzY3RwX2FkZHJlc3NfZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3Nl
bmRfZmFpbHVyZV9ldmVudDsKLQl1aW50OF90IHNjdHBfcGVlcl9lcnJvcl9ldmVudDsKLQl1aW50
OF90IHNjdHBfc2h1dGRvd25fZXZlbnQ7Ci0JdWludDhfdCBzY3RwX3BhcnRpYWxfZGVsaXZlcnlf
ZXZlbnQ7Ci0JdWludDhfdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfZXZlbnQ7Ci0JdWludDhfdCBz
Y3RwX2F1dGhlbnRpY2F0aW9uX2V2ZW50OwotCXVpbnQ4X3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50
OwotCXVpbnQ4X3Qgc2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQ7Ci19OwotCi0KLQotLyogRmxhZ3Mg
dGhhdCBnbyBpbnRvIHRoZSBzaW5mby0+c2luZm9fZmxhZ3MgZmllbGQgKi8KLSNkZWZpbmUgU0NU
UF9OT1RJRklDQVRJT04gICAgIDB4MDAxMCAvKiBuZXh0IG1lc3NhZ2UgaXMgYSBub3RpZmljYXRp
b24gKi8KLSNkZWZpbmUgU0NUUF9DT01QTEVURSAgICAgICAgIDB4MDAyMCAvKiBuZXh0IG1lc3Nh
Z2UgaXMgY29tcGxldGUgKi8KLSNkZWZpbmUgU0NUUF9FT0YgICAgICAgICAgICAgIDB4MDEwMCAv
KiBTdGFydCBzaHV0ZG93biBwcm9jZWR1cmVzICovCi0jZGVmaW5lIFNDVFBfQUJPUlQgICAgICAg
ICAgICAweDAyMDAgLyogU2VuZCBhbiBBQk9SVCB0byBwZWVyICovCi0jZGVmaW5lIFNDVFBfVU5P
UkRFUkVEICAgICAgICAweDA0MDAgLyogTWVzc2FnZSBpcyB1bi1vcmRlcmVkICovCi0jZGVmaW5l
IFNDVFBfQUREUl9PVkVSICAgICAgICAweDA4MDAgLyogT3ZlcnJpZGUgdGhlIHByaW1hcnktYWRk
cmVzcyAqLwotI2RlZmluZSBTQ1RQX1NFTkRBTEwgICAgICAgICAgMHgxMDAwIC8qIFNlbmQgdGhp
cyBvbiBhbGwgYXNzb2NpYXRpb25zICovCi0jZGVmaW5lIFNDVFBfRU9SICAgICAgICAgICAgICAw
eDIwMDAgLyogZW5kIG9mIG1lc3NhZ2Ugc2lnbmFsICovCi0jZGVmaW5lIFNDVFBfU0FDS19JTU1F
RElBVEVMWSAweDQwMDAgLyogU2V0IEktQml0ICovCi0KLSNkZWZpbmUgSU5WQUxJRF9TSU5GT19G
TEFHKHgpICgoKHgpICYgMHhmZmZmZmZmMCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmIH4oU0NUUF9FT0YgfCBTQ1RQX0FCT1JUIHwgU0NUUF9VTk9SREVSRUQgfFwKLQkJ
CQkgICAgICAgIFNDVFBfQUREUl9PVkVSIHwgU0NUUF9TRU5EQUxMIHwgU0NUUF9FT1IgfFwKLQkJ
CQkJU0NUUF9TQUNLX0lNTUVESUFURUxZKSkgIT0gMCkKLS8qIGZvciB0aGUgZW5kcG9pbnQgKi8K
LQotLyogVGhlIGxvd2VyIGJ5dGUgaXMgYW4gZW51bWVyYXRpb24gb2YgUFItU0NUUCBwb2xpY2ll
cyAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfTk9ORSAweDAwMDAgLyogUmVsaWFibGUgdHJhbnNm
ZXIgKi8KLSNkZWZpbmUgU0NUUF9QUl9TQ1RQX1RUTCAgMHgwMDAxIC8qIFRpbWUgYmFzZWQgUFIt
U0NUUCAqLwotI2RlZmluZSBTQ1RQX1BSX1NDVFBfQlVGICAweDAwMDIgLyogQnVmZmVyIGJhc2Vk
IFBSLVNDVFAgKi8KLSNkZWZpbmUgU0NUUF9QUl9TQ1RQX1JUWCAgMHgwMDAzIC8qIE51bWJlciBv
ZiByZXRyYW5zbWlzc2lvbnMgYmFzZWQgUFItU0NUUCAqLwotCi0jZGVmaW5lIFBSX1NDVFBfUE9M
SUNZKHgpICAgICAgICAgKCh4KSAmIDB4MGYpCi0jZGVmaW5lIFBSX1NDVFBfRU5BQkxFRCh4KSAg
ICAgICAgKFBSX1NDVFBfUE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9OT05FKQotI2RlZmluZSBQ
Ul9TQ1RQX1RUTF9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1ND
VFBfVFRMKQotI2RlZmluZSBQUl9TQ1RQX0JVRl9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElD
WSh4KSA9PSBTQ1RQX1BSX1NDVFBfQlVGKQotI2RlZmluZSBQUl9TQ1RQX1JUWF9FTkFCTEVEKHgp
ICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfUlRYKQotI2RlZmluZSBQUl9T
Q1RQX0lOVkFMSURfUE9MSUNZKHgpIChQUl9TQ1RQX1BPTElDWSh4KSA+IFNDVFBfUFJfU0NUUF9S
VFgpCi0KLQotLyoKLSAqIHVzZXIgc29ja2V0IG9wdGlvbnM6IHNvY2tldCBBUEkgZGVmaW5lZAot
ICovCi0vKgotICogcmVhZC13cml0ZSBvcHRpb25zCi0gKi8KLSNkZWZpbmUgU0NUUF9SVE9JTkZP
ICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAxCi0jZGVmaW5lIFNDVFBfQVNTT0NJTkZPICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAwMgotI2RlZmluZSBTQ1RQX0lOSVRNU0cgICAgICAgICAg
ICAgICAgICAgIDB4MDAwMDAwMDMKLSNkZWZpbmUgU0NUUF9OT0RFTEFZICAgICAgICAgICAgICAg
ICAgICAweDAwMDAwMDA0Ci0jZGVmaW5lIFNDVFBfQVVUT0NMT1NFICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAwNQotI2RlZmluZSBTQ1RQX1BSSU1BUllfQUREUiAgICAgICAgICAgICAgIDB4MDAw
MDAwMDcKLSNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0xBWUVSICAgICAgICAgICAweDAwMDAwMDA4
Ci0jZGVmaW5lIFNDVFBfRElTQUJMRV9GUkFHTUVOVFMgICAgICAgICAgMHgwMDAwMDAwOQotI2Rl
ZmluZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVMgICAgICAgICAgIDB4MDAwMDAwMGEKLS8qIGFuY2ls
bGFyeSBkYXRhL25vdGlmaWNhdGlvbiBpbnRlcmVzdCBvcHRpb25zICovCi0vKiBXaXRob3V0IHRo
aXMgYXBwbGllZCB3ZSB3aWxsIGdpdmUgVjQgYW5kIFY2IGFkZHJlc3NlcyBvbiBhIFY2IHNvY2tl
dCAqLwotI2RlZmluZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUiAgICAgIDB4MDAwMDAwMGQK
LSNkZWZpbmUgU0NUUF9NQVhTRUcgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDBlCi0jZGVm
aW5lIFNDVFBfREVMQVlFRF9TQUNLICAgICAgICAgICAgICAgMHgwMDAwMDAwZgotI2RlZmluZSBT
Q1RQX0ZSQUdNRU5UX0lOVEVSTEVBVkUgICAgICAgIDB4MDAwMDAwMTAKLSNkZWZpbmUgU0NUUF9Q
QVJUSUFMX0RFTElWRVJZX1BPSU5UICAgICAweDAwMDAwMDExCi0vKiBhdXRoZW50aWNhdGlvbiBz
dXBwb3J0ICovCi0jZGVmaW5lIFNDVFBfSE1BQ19JREVOVCAgICAgICAgICAgICAgICAgMHgwMDAw
MDAxNAotI2RlZmluZSBTQ1RQX0FVVEhfQUNUSVZFX0tFWSAgICAgICAgICAgIDB4MDAwMDAwMTUK
LSNkZWZpbmUgU0NUUF9BVVRPX0FTQ09ORiAgICAgICAgICAgICAgICAweDAwMDAwMDE4Ci0jZGVm
aW5lIFNDVFBfTUFYX0JVUlNUICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxOQotLyogYXNzb2Mg
bGV2ZWwgY29udGV4dCAqLwotI2RlZmluZSBTQ1RQX0NPTlRFWFQgICAgICAgICAgICAgICAgICAg
IDB4MDAwMDAwMWEKLS8qIGV4cGxpY2l0IEVPUiBzaWduYWxsaW5nICovCi0jZGVmaW5lIFNDVFBf
RVhQTElDSVRfRU9SICAgICAgICAgICAgICAgMHgwMDAwMDAxYgotI2RlZmluZSBTQ1RQX1JFVVNF
X1BPUlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWMKLQotI2RlZmluZSBTQ1RQX0VWRU5UICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMWUKLSNkZWZpbmUgU0NUUF9SRUNWUkNWSU5GTyAg
ICAgICAgICAgICAgICAweDAwMDAwMDFmCi0jZGVmaW5lIFNDVFBfUkVDVk5YVElORk8gICAgICAg
ICAgICAgICAgMHgwMDAwMDAyMAotI2RlZmluZSBTQ1RQX0RFRkFVTFRfU05ESU5GTyAgICAgICAg
ICAgIDB4MDAwMDAwMjEKLSNkZWZpbmUgU0NUUF9ERUZBVUxUX1BSSU5GTyAgICAgICAgICAgICAw
eDAwMDAwMDIyCi0jZGVmaW5lIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCAgICAgMHgwMDAw
MDAyNAotCi0jZGVmaW5lIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVCAgICAgICAgMHgwMDAwMDkw
MCAvKiBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqLwotCi0vKiBQbHVnZ2FibGUgU3RyZWFtIFNj
aGVkdWxpbmcgU29ja2V0IG9wdGlvbiAqLwotI2RlZmluZSBTQ1RQX1BMVUdHQUJMRV9TUyAgICAg
ICAgICAgICAgIDB4MDAwMDEyMDMKLSNkZWZpbmUgU0NUUF9TU19WQUxVRSAgICAgICAgICAgICAg
ICAgICAweDAwMDAxMjA0Ci0KLS8qCi0gKiByZWFkLW9ubHkgb3B0aW9ucwotICovCi0jZGVmaW5l
IFNDVFBfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwMAotI2RlZmluZSBTQ1RQ
X0dFVF9QRUVSX0FERFJfSU5GTyAgICAgICAgIDB4MDAwMDAxMDEKLS8qIGF1dGhlbnRpY2F0aW9u
IHN1cHBvcnQgKi8KLSNkZWZpbmUgU0NUUF9QRUVSX0FVVEhfQ0hVTktTICAgICAgICAgICAweDAw
MDAwMTAyCi0jZGVmaW5lIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MgICAgICAgICAgMHgwMDAwMDEw
MwotI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19OVU1CRVIgICAgICAgICAgIDB4MDAwMDAxMDQKLSNk
ZWZpbmUgU0NUUF9HRVRfQVNTT0NfSURfTElTVCAgICAgICAgICAweDAwMDAwMTA1Ci0jZGVmaW5l
IFNDVFBfVElNRU9VVFMgICAgICAgICAgICAgICAgICAgMHgwMDAwMDEwNgotI2RlZmluZSBTQ1RQ
X1BSX1NUUkVBTV9TVEFUVVMgICAgICAgICAgIDB4MDAwMDAxMDcKLSNkZWZpbmUgU0NUUF9QUl9B
U1NPQ19TVEFUVVMgICAgICAgICAgICAweDAwMDAwMTA4Ci0KLS8qCi0gKiB3cml0ZS1vbmx5IG9w
dGlvbnMKLSAqLwotI2RlZmluZSBTQ1RQX1NFVF9QRUVSX1BSSU1BUllfQUREUiAgICAgIDB4MDAw
MDAwMDYKLSNkZWZpbmUgU0NUUF9BVVRIX0NIVU5LICAgICAgICAgICAgICAgICAweDAwMDAwMDEy
Ci0jZGVmaW5lIFNDVFBfQVVUSF9LRVkgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMwotI2Rl
ZmluZSBTQ1RQX0FVVEhfREVBQ1RJVkFURV9LRVkgICAgICAgIDB4MDAwMDAwMWQKLSNkZWZpbmUg
U0NUUF9BVVRIX0RFTEVURV9LRVkgICAgICAgICAgICAweDAwMDAwMDE2Ci0jZGVmaW5lIFNDVFBf
UkVTRVRfU1RSRUFNUyAgICAgICAgICAgICAgMHgwMDAwMDkwMSAvKiBzdHJ1Y3Qgc2N0cF9yZXNl
dF9zdHJlYW1zICovCi0jZGVmaW5lIFNDVFBfUkVTRVRfQVNTT0MgICAgICAgICAgICAgICAgMHgw
MDAwMDkwMiAvKiBzY3RwX2Fzc29jX3QgKi8KLSNkZWZpbmUgU0NUUF9BRERfU1RSRUFNUyAgICAg
ICAgICAgICAgICAweDAwMDAwOTAzIC8qIHN0cnVjdCBzY3RwX2FkZF9zdHJlYW1zICovCi0KLXN0
cnVjdCBzY3RwX2luaXRtc2cgewotCXVpbnQxNl90IHNpbml0X251bV9vc3RyZWFtczsKLQl1aW50
MTZfdCBzaW5pdF9tYXhfaW5zdHJlYW1zOwotCXVpbnQxNl90IHNpbml0X21heF9hdHRlbXB0czsK
LQl1aW50MTZfdCBzaW5pdF9tYXhfaW5pdF90aW1lbzsKLX07Ci0KLXN0cnVjdCBzY3RwX3J0b2lu
Zm8gewotCXNjdHBfYXNzb2NfdCBzcnRvX2Fzc29jX2lkOwotCXVpbnQzMl90IHNydG9faW5pdGlh
bDsKLQl1aW50MzJfdCBzcnRvX21heDsKLQl1aW50MzJfdCBzcnRvX21pbjsKLX07Ci0KLXN0cnVj
dCBzY3RwX2Fzc29jcGFyYW1zIHsKLQlzY3RwX2Fzc29jX3Qgc2Fzb2NfYXNzb2NfaWQ7Ci0JdWlu
dDMyX3Qgc2Fzb2NfcGVlcl9yd25kOwotCXVpbnQzMl90IHNhc29jX2xvY2FsX3J3bmQ7Ci0JdWlu
dDMyX3Qgc2Fzb2NfY29va2llX2xpZmU7Ci0JdWludDE2X3Qgc2Fzb2NfYXNvY21heHJ4dDsKLQl1
aW50MTZfdCBzYXNvY19udW1iZXJfcGVlcl9kZXN0aW5hdGlvbnM7Ci19OwotCi1zdHJ1Y3Qgc2N0
cF9zZXRwcmltIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BfYWRkcjsKLQlzY3RwX2Fz
c29jX3Qgc3NwX2Fzc29jX2lkOwotCXVpbnQ4X3Qgc3NwX3BhZGRpbmdbNF07Ci19OwotCi1zdHJ1
Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIHsKLQl1aW50MzJfdCAgIHNzYl9hZGFwdGF0aW9uX2luZDsK
LX07Ci0KLXN0cnVjdCBzY3RwX3BhZGRycGFyYW1zIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFn
ZSBzcHBfYWRkcmVzczsKLQlzY3RwX2Fzc29jX3Qgc3BwX2Fzc29jX2lkOwotCXVpbnQzMl90IHNw
cF9oYmludGVydmFsOwotCXVpbnQzMl90IHNwcF9wYXRobXR1OwotCXVpbnQzMl90IHNwcF9mbGFn
czsKLQl1aW50MzJfdCBzcHBfaXB2Nl9mbG93bGFiZWw7Ci0JdWludDE2X3Qgc3BwX3BhdGhtYXhy
eHQ7Ci0JdWludDhfdCBzcHBfZHNjcDsKLX07Ci0KLSNkZWZpbmUgU1BQX0hCX0VOQUJMRSAgICAg
ICAweDAwMDAwMDAxCi0jZGVmaW5lIFNQUF9IQl9ESVNBQkxFICAgICAgMHgwMDAwMDAwMgotI2Rl
ZmluZSBTUFBfSEJfREVNQU5EICAgICAgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU1BQX1BNVFVEX0VO
QUJMRSAgICAweDAwMDAwMDA4Ci0jZGVmaW5lIFNQUF9QTVRVRF9ESVNBQkxFICAgMHgwMDAwMDAx
MAotI2RlZmluZSBTUFBfSEJfVElNRV9JU19aRVJPIDB4MDAwMDAwODAKLSNkZWZpbmUgU1BQX0lQ
VjZfRkxPV0xBQkVMICAweDAwMDAwMTAwCi0jZGVmaW5lIFNQUF9EU0NQICAgICAgICAgICAgMHgw
MDAwMDIwMAotCi0vKiBVc2VkIGZvciBTQ1RQX01BWFNFRywgU0NUUF9NQVhfQlVSU1QsIFNDVFBf
RU5BQkxFX1NUUkVBTV9SRVNFVCwgYW5kIFNDVFBfQ09OVEVYVCAqLwotc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgewotCXNjdHBfYXNzb2NfdCBhc3NvY19pZDsKLQl1aW50MzJfdCBhc3NvY192YWx1
ZTsKLX07Ci0KLS8qIFRvIGVuYWJsZSBzdHJlYW0gcmVzZXQgKi8KLSNkZWZpbmUgU0NUUF9FTkFC
TEVfUkVTRVRfU1RSRUFNX1JFUSAgMHgwMDAwMDAwMQotI2RlZmluZSBTQ1RQX0VOQUJMRV9SRVNF
VF9BU1NPQ19SRVEgICAweDAwMDAwMDAyCi0jZGVmaW5lIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NP
Q19SRVEgIDB4MDAwMDAwMDQKLSNkZWZpbmUgU0NUUF9FTkFCTEVfVkFMVUVfTUFTSyAgICAgICAg
MHgwMDAwMDAwNwotCi1zdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zIHsKLQlzY3RwX2Fzc29jX3Qg
c3JzX2Fzc29jX2lkOwotCXVpbnQxNl90IHNyc19mbGFnczsKLQl1aW50MTZfdCBzcnNfbnVtYmVy
X3N0cmVhbXM7ICAvKiAwID09IEFMTCAqLwotCXVpbnQxNl90IHNyc19zdHJlYW1fbGlzdFtdOyAg
IC8qIGxpc3QgaWYgc3RycnN0X251bV9zdHJlYW1zIGlzIG5vdCAwICovCi19OwotCi1zdHJ1Y3Qg
c2N0cF9hZGRfc3RyZWFtcyB7Ci0Jc2N0cF9hc3NvY190CXNhc19hc3NvY19pZDsKLQl1aW50MTZf
dAlzYXNfaW5zdHJtczsKLQl1aW50MTZfdAlzYXNfb3V0c3RybXM7Ci19OwotCi1zdHJ1Y3Qgc2N0
cF9obWFjYWxnbyB7Ci0JdWludDMyX3Qgc2htYWNfbnVtYmVyX29mX2lkZW50czsKLQl1aW50MTZf
dCBzaG1hY19pZGVudHNbXTsKLX07Ci0KLS8qIEFVVEggaG1hY19pZCAqLwotI2RlZmluZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9SU1ZEICAgIDB4MDAwMAotI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19JRF9T
SEExICAgIDB4MDAwMQkvKiBkZWZhdWx0LCBtYW5kYXRvcnkgKi8KLSNkZWZpbmUgU0NUUF9BVVRI
X0hNQUNfSURfU0hBMjU2ICAweDAwMDMKLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMjI0
ICAweDAwMDQKLSNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMzg0ICAweDAwMDUKLSNkZWZp
bmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBNTEyICAweDAwMDYKLQotCi1zdHJ1Y3Qgc2N0cF9zYWNr
X2luZm8gewotCXNjdHBfYXNzb2NfdCBzYWNrX2Fzc29jX2lkOwotCXVpbnQzMl90IHNhY2tfZGVs
YXk7Ci0JdWludDMyX3Qgc2Fja19mcmVxOwotfTsKLQotc3RydWN0IHNjdHBfZGVmYXVsdF9wcmlu
Zm8gewotCXVpbnQxNl90IHByX3BvbGljeTsKLQl1aW50MzJfdCBwcl92YWx1ZTsKLQlzY3RwX2Fz
c29jX3QgcHJfYXNzb2NfaWQ7Ci19OwotCi1zdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gewotCXN0cnVj
dCBzb2NrYWRkcl9zdG9yYWdlIHNwaW5mb19hZGRyZXNzOwotCXNjdHBfYXNzb2NfdCBzcGluZm9f
YXNzb2NfaWQ7Ci0JaW50MzJfdCBzcGluZm9fc3RhdGU7Ci0JdWludDMyX3Qgc3BpbmZvX2N3bmQ7
Ci0JdWludDMyX3Qgc3BpbmZvX3NydHQ7Ci0JdWludDMyX3Qgc3BpbmZvX3J0bzsKLQl1aW50MzJf
dCBzcGluZm9fbXR1OwotfTsKLQotc3RydWN0IHNjdHBfc3RhdHVzIHsKLQlzY3RwX2Fzc29jX3Qg
c3N0YXRfYXNzb2NfaWQ7Ci0JaW50MzJfdCAgc3N0YXRfc3RhdGU7Ci0JdWludDMyX3Qgc3N0YXRf
cnduZDsKLQl1aW50MTZfdCBzc3RhdF91bmFja2RhdGE7Ci0JdWludDE2X3Qgc3N0YXRfcGVuZGRh
dGE7Ci0JdWludDE2X3Qgc3N0YXRfaW5zdHJtczsKLQl1aW50MTZfdCBzc3RhdF9vdXRzdHJtczsK
LQl1aW50MzJfdCBzc3RhdF9mcmFnbWVudGF0aW9uX3BvaW50OwotCXN0cnVjdCBzY3RwX3BhZGRy
aW5mbyBzc3RhdF9wcmltYXJ5OwotfTsKLQotLyoKLSAqIHVzZXIgc3RhdGUgdmFsdWVzCi0gKi8K
LSNkZWZpbmUgU0NUUF9DTE9TRUQgICAgICAgICAgICAgMHgwMDAwCi0jZGVmaW5lIFNDVFBfQk9V
TkQgICAgICAgICAgICAgIDB4MTAwMAotI2RlZmluZSBTQ1RQX0xJU1RFTiAgICAgICAgICAgICAw
eDIwMDAKLSNkZWZpbmUgU0NUUF9DT09LSUVfV0FJVCAgICAgICAgMHgwMDAyCi0jZGVmaW5lIFND
VFBfQ09PS0lFX0VDSE9FRCAgICAgIDB4MDAwNAotI2RlZmluZSBTQ1RQX0VTVEFCTElTSEVEICAg
ICAgICAweDAwMDgKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9TRU5UICAgICAgMHgwMDEwCi0jZGVm
aW5lIFNDVFBfU0hVVERPV05fUkVDRUlWRUQgIDB4MDAyMAotI2RlZmluZSBTQ1RQX1NIVVRET1dO
X0FDS19TRU5UICAweDAwNDAKLSNkZWZpbmUgU0NUUF9TSFVURE9XTl9QRU5ESU5HICAgMHgwMDgw
Ci0KLQotI2RlZmluZSBTQ1RQX0FDVElWRSAgICAgICAweDAwMDEgIC8qIFNDVFBfQUREUl9SRUFD
SEFCTEUgKi8KLSNkZWZpbmUgU0NUUF9JTkFDVElWRSAgICAgMHgwMDAyICAvKiBuZWl0aGVyIFND
VFBfQUREUl9SRUFDSEFCTEUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
b3IgU0NUUF9BRERSX1VOQ09ORklSTUVEICovCi0jZGVmaW5lIFNDVFBfVU5DT05GSVJNRUQgIDB4
MDIwMCAgLyogU0NUUF9BRERSX1VOQ09ORklSTUVEICovCi0KLXN0cnVjdCBzY3RwX2F1dGhjaHVu
a3MgewotCXNjdHBfYXNzb2NfdCBnYXV0aF9hc3NvY19pZDsKLS8qCXVpbnQzMl90IGdhdXRoX251
bWJlcl9vZl9jaHVua3M7IG5vdCBhdmFpbGFibGUgKi8KLQl1aW50OF90ICBnYXV0aF9jaHVua3Nb
XTsKLX07Ci0KLXN0cnVjdCBzY3RwX2Fzc29jX2lkcyB7Ci0JdWludDMyX3QgZ2FpZHNfbnVtYmVy
X29mX2lkczsKLQlzY3RwX2Fzc29jX3QgZ2FpZHNfYXNzb2NfaWRbXTsKLX07Ci0KLXN0cnVjdCBz
Y3RwX3NldHBlZXJwcmltIHsKLQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BwX2FkZHI7Ci0J
c2N0cF9hc3NvY190IHNzcHBfYXNzb2NfaWQ7Ci0JdWludDhfdCBzc3BwX3BhZGRpbmdbNF07Ci19
OwotCi1zdHJ1Y3Qgc2N0cF9hdXRoY2h1bmsgewotCXVpbnQ4X3Qgc2F1dGhfY2h1bms7Ci19Owot
Ci0KLXN0cnVjdCBzY3RwX2dldF9ub25jZV92YWx1ZXMgewotCXNjdHBfYXNzb2NfdCBnbl9hc3Nv
Y19pZDsKLQl1aW50MzJfdCBnbl9wZWVyc190YWc7Ci0JdWludDMyX3QgZ25fbG9jYWxfdGFnOwot
fTsKLQotCi0vKgotICogTWFpbiBTQ1RQIGNodW5rIHR5cGVzCi0gKi8KLS8qKioqKioqKioqKiow
eDAwIHNlcmllcyAqKioqKioqKioqKi8KLSNkZWZpbmUgU0NUUF9EQVRBICAgICAgICAgICAgICAg
MHgwMAotI2RlZmluZSBTQ1RQX0lOSVRJQVRJT04gICAgICAgICAweDAxCi0jZGVmaW5lIFNDVFBf
SU5JVElBVElPTl9BQ0sgICAgIDB4MDIKLSNkZWZpbmUgU0NUUF9TRUxFQ1RJVkVfQUNLICAgICAg
MHgwMwotI2RlZmluZSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUICAweDA0Ci0jZGVmaW5lIFNDVFBf
SEVBUlRCRUFUX0FDSyAgICAgIDB4MDUKLSNkZWZpbmUgU0NUUF9BQk9SVF9BU1NPQ0lBVElPTiAg
MHgwNgotI2RlZmluZSBTQ1RQX1NIVVRET1dOICAgICAgICAgICAweDA3Ci0jZGVmaW5lIFNDVFBf
U0hVVERPV05fQUNLICAgICAgIDB4MDgKLSNkZWZpbmUgU0NUUF9PUEVSQVRJT05fRVJST1IgICAg
MHgwOQotI2RlZmluZSBTQ1RQX0NPT0tJRV9FQ0hPICAgICAgICAweDBhCi0jZGVmaW5lIFNDVFBf
Q09PS0lFX0FDSyAgICAgICAgIDB4MGIKLSNkZWZpbmUgU0NUUF9FQ05fRUNITyAgICAgICAgICAg
MHgwYwotI2RlZmluZSBTQ1RQX0VDTl9DV1IgICAgICAgICAgICAweDBkCi0jZGVmaW5lIFNDVFBf
U0hVVERPV05fQ09NUExFVEUgIDB4MGUKLS8qIFJGQzQ4OTUgKi8KLSNkZWZpbmUgU0NUUF9BVVRI
RU5USUNBVElPTiAgICAgMHgwZgotLyogRVkgbnJfc2FjayBjaHVuayBpZCovCi0jZGVmaW5lIFND
VFBfTlJfU0VMRUNUSVZFX0FDSyAgIDB4MTAKLS8qKioqKioqKioqKioweDQwIHNlcmllcyAqKioq
KioqKioqKi8KLS8qKioqKioqKioqKioweDgwIHNlcmllcyAqKioqKioqKioqKi8KLS8qIFJGQzUw
NjEgKi8KLSNkZWZpbmUJU0NUUF9BU0NPTkZfQUNLICAgICAgICAgMHg4MAotLyogZHJhZnQtaWV0
Zi1zdGV3YXJ0LXBrdGRycHNjdHAgKi8KLSNkZWZpbmUgU0NUUF9QQUNLRVRfRFJPUFBFRCAgICAg
MHg4MQotLyogZHJhZnQtaWV0Zi1zdGV3YXJ0LXN0cnJlc2V0LXh4eCAqLwotI2RlZmluZSBTQ1RQ
X1NUUkVBTV9SRVNFVCAgICAgICAweDgyCi0KLS8qIFJGQzQ4MjAgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLSNkZWZpbmUgU0NUUF9QQURfQ0hVTksgICAgICAgICAgMHg4NAotLyoqKioqKioq
KioqKjB4YzAgc2VyaWVzICoqKioqKioqKioqLwotLyogUkZDMzc1OCAqLwotI2RlZmluZSBTQ1RQ
X0ZPUldBUkRfQ1VNX1RTTiAgICAweGMwCi0vKiBSRkM1MDYxICovCi0jZGVmaW5lIFNDVFBfQVND
T05GICAgICAgICAgICAgIDB4YzEKLQotc3RydWN0IHNjdHBfYXV0aGtleSB7Ci0Jc2N0cF9hc3Nv
Y190IHNjYV9hc3NvY19pZDsKLQl1aW50MTZfdCBzY2Ffa2V5bnVtYmVyOwotCXVpbnQxNl90IHNj
YV9rZXlsZW5ndGg7Ci0JdWludDhfdCAgc2NhX2tleVtdOwotfTsKLQotc3RydWN0IHNjdHBfYXV0
aGtleWlkIHsKLQlzY3RwX2Fzc29jX3Qgc2NhY3RfYXNzb2NfaWQ7Ci0JdWludDE2X3Qgc2NhY3Rf
a2V5bnVtYmVyOwotfTsKLQotc3RydWN0IHNjdHBfY2Nfb3B0aW9uIHsKLQlpbnQgb3B0aW9uOwot
CXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGFpZF92YWx1ZTsKLX07Ci0KLXN0cnVjdCBzY3RwX3N0
cmVhbV92YWx1ZSB7Ci0Jc2N0cF9hc3NvY190IGFzc29jX2lkOwotCXVpbnQxNl90IHN0cmVhbV9p
ZDsKLQl1aW50MTZfdCBzdHJlYW1fdmFsdWU7Ci19OwotCi1zdHJ1Y3Qgc2N0cF90aW1lb3V0cyB7
Ci0Jc2N0cF9hc3NvY190IHN0aW1vX2Fzc29jX2lkOwotCXVpbnQzMl90IHN0aW1vX2luaXQ7Ci0J
dWludDMyX3Qgc3RpbW9fZGF0YTsKLQl1aW50MzJfdCBzdGltb19zYWNrOwotCXVpbnQzMl90IHN0
aW1vX3NodXRkb3duOwotCXVpbnQzMl90IHN0aW1vX2hlYXJ0YmVhdDsKLQl1aW50MzJfdCBzdGlt
b19jb29raWU7Ci0JdWludDMyX3Qgc3RpbW9fc2h1dGRvd25hY2s7Ci19OwotCi1zdHJ1Y3Qgc2N0
cF9wcnN0YXR1cyB7Ci0Jc2N0cF9hc3NvY190IHNwcnN0YXRfYXNzb2NfaWQ7Ci0JdWludDE2X3Qg
c3Byc3RhdF9zaWQ7Ci0JdWludDE2X3Qgc3Byc3RhdF9wb2xpY3k7Ci0JdWludDY0X3Qgc3Byc3Rh
dF9hYmFuZG9uZWRfdW5zZW50OwotCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3NlbnQ7Ci19
OwotCi0vKiBTdGFuZGFyZCBUQ1AgQ29uZ2VzdGlvbiBDb250cm9sICovCi0jZGVmaW5lIFNDVFBf
Q0NfUkZDMjU4MSAgICAgICAgIDB4MDAwMDAwMDAKLS8qIEhpZ2ggU3BlZWQgVENQIENvbmdlc3Rp
b24gQ29udHJvbCAoRmxveWQpICovCi0jZGVmaW5lIFNDVFBfQ0NfSFNUQ1AgICAgICAgICAgIDB4
MDAwMDAwMDEKLS8qIEhUQ1AgQ29uZ2VzdGlvbiBDb250cm9sICovCi0jZGVmaW5lIFNDVFBfQ0Nf
SFRDUCAgICAgICAgICAgIDB4MDAwMDAwMDIKLS8qIFJUQ0MgQ29uZ2VzdGlvbiBDb250cm9sIC0g
UkZDMjU4MSBwbHVzICovCi0jZGVmaW5lIFNDVFBfQ0NfUlRDQyAgICAgICAgICAgIDB4MDAwMDAw
MDMKLQotI2RlZmluZSBTQ1RQX0NDX09QVF9SVENDX1NFVE1PREUgMHgwMDAwMjAwMAotI2RlZmlu
ZSBTQ1RQX0NDX09QVF9VU0VfRENDQ19FQyAgMHgwMDAwMjAwMQotI2RlZmluZSBTQ1RQX0NDX09Q
VF9TVEVBRFlfU1RFUCAgMHgwMDAwMjAwMgotCi0jZGVmaW5lIFNDVFBfQ01UX09GRiAgICAgICAg
ICAgIDAKLSNkZWZpbmUgU0NUUF9DTVRfQkFTRSAgICAgICAgICAgMQotI2RlZmluZSBTQ1RQX0NN
VF9SUFYxICAgICAgICAgICAyCi0jZGVmaW5lIFNDVFBfQ01UX1JQVjIgICAgICAgICAgIDMKLSNk
ZWZpbmUgU0NUUF9DTVRfTVBUQ1AgICAgICAgICAgNAotI2RlZmluZSBTQ1RQX0NNVF9NQVggICAg
ICAgICAgICBTQ1RQX0NNVF9NUFRDUAotCi0vKiBSUyAtIFN1cHBvcnRlZCBzdHJlYW0gc2NoZWR1
bGluZyBtb2R1bGVzIGZvciBwbHVnZ2FibGUKLSAqIHN0cmVhbSBzY2hlZHVsaW5nCi0gKi8KLS8q
IERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluICovCi0jZGVmaW5lIFNDVFBfU1NfREVGQVVMVCAg
ICAgICAgICAgICAweDAwMDAwMDAwCi0vKiBSZWFsIHJvdW5kLXJvYmluICovCi0jZGVmaW5lIFND
VFBfU1NfUk9VTkRfUk9CSU4gICAgICAgICAweDAwMDAwMDAxCi0vKiBSZWFsIHJvdW5kLXJvYmlu
IHBlciBwYWNrZXQgKi8KLSNkZWZpbmUgU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQgIDB4MDAw
MDAwMDIKLS8qIFByaW9yaXR5ICovCi0jZGVmaW5lIFNDVFBfU1NfUFJJT1JJVFkgICAgICAgICAg
ICAweDAwMDAwMDAzCi0vKiBGYWlyIEJhbmR3aWR0aCAqLwotI2RlZmluZSBTQ1RQX1NTX0ZBSVJf
QkFORFdJVEggICAgICAgMHgwMDAwMDAwNAotLyogRmlyc3QtY29tZSwgZmlyc3Qtc2VydmUgKi8K
LSNkZWZpbmUgU0NUUF9TU19GSVJTVF9DT01FICAgICAgICAgIDB4MDAwMDAwMDUKLQotLyoqKioq
KioqKioqKioqKioqKioqIFN5c3RlbSBjYWxscyAqKioqKioqKioqKioqLwotCi1zdHJ1Y3Qgc29j
a2V0OwotCi12b2lkCi11c3JzY3RwX2luaXQodWludDE2X3QsCi0gICAgICAgICAgICAgaW50ICgq
KSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1
aW50OF90IHNldF9kZiksCi0gICAgICAgICAgICAgdm9pZCAoKikoY29uc3QgY2hhciAqZm9ybWF0
LCAuLi4pKTsKLQotc3RydWN0IHNvY2tldCAqCi11c3JzY3RwX3NvY2tldChpbnQgZG9tYWluLCBp
bnQgdHlwZSwgaW50IHByb3RvY29sLAotICAgICAgICAgICAgICAgaW50ICgqcmVjZWl2ZV9jYiko
c3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwgdm9pZCAqZGF0
YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBkYXRhbGVuLCBzdHJ1
Y3Qgc2N0cF9yY3ZpbmZvLCBpbnQgZmxhZ3MsIHZvaWQgKnVscF9pbmZvKSwKLSAgICAgICAgICAg
ICAgIGludCAoKnNlbmRfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHVpbnQzMl90IHNiX2ZyZWUp
LAotICAgICAgICAgICAgICAgdWludDMyX3Qgc2JfdGhyZXNob2xkLAotICAgICAgICAgICAgICAg
dm9pZCAqdWxwX2luZm8pOwotCi1pbnQKLXVzcnNjdHBfc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0
ICpzbywKLSAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCi0gICAgICAgICAgICAgICAgICAg
aW50IG9wdGlvbl9uYW1lLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKm9wdGlvbl92
YWx1ZSwKLSAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3Qgb3B0aW9uX2xlbik7Ci0KLWludAot
dXNyc2N0cF9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgICAg
IGludCBsZXZlbCwKLSAgICAgICAgICAgICAgICAgICBpbnQgb3B0aW9uX25hbWUsCi0gICAgICAg
ICAgICAgICAgICAgdm9pZCAqb3B0aW9uX3ZhbHVlLAotICAgICAgICAgICAgICAgICAgIHNvY2ts
ZW5fdCAqb3B0aW9uX2xlbik7Ci0KLWludAotdXNyc2N0cF9nZXRwYWRkcnMoc3RydWN0IHNvY2tl
dCAqc28sCi0gICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCi0gICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpOwotCi12b2lkCi11c3JzY3RwX2ZyZWVwYWRk
cnMoc3RydWN0IHNvY2thZGRyICphZGRycyk7Ci0KLWludAotdXNyc2N0cF9nZXRsYWRkcnMoc3Ry
dWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgaWQsCi0gICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKipyYWRkcnMpOwotCi12b2lkCi11c3JzY3Rw
X2ZyZWVsYWRkcnMoc3RydWN0IHNvY2thZGRyICphZGRycyk7Ci0KLXNzaXplX3QKLXVzcnNjdHBf
c2VuZHYoc3RydWN0IHNvY2tldCAqc28sCi0gICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEs
Ci0gICAgICAgICAgICAgIHNpemVfdCBsZW4sCi0gICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk
ciAqdG8sCi0gICAgICAgICAgICAgIGludCBhZGRyY250LAotICAgICAgICAgICAgICB2b2lkICpp
bmZvLAotICAgICAgICAgICAgICBzb2NrbGVuX3QgaW5mb2xlbiwKLSAgICAgICAgICAgICAgdW5z
aWduZWQgaW50IGluZm90eXBlLAotICAgICAgICAgICAgICBpbnQgZmxhZ3MpOwotCi1zc2l6ZV90
Ci11c3JzY3RwX3JlY3Z2KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICB2b2lkICpk
YnVmLAotICAgICAgICAgICAgICBzaXplX3QgbGVuLAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHIgKmZyb20sCi0gICAgICAgICAgICAgIHNvY2tsZW5fdCAqIGZyb21sZW4sCi0gICAgICAg
ICAgICAgIHZvaWQgKmluZm8sCi0gICAgICAgICAgICAgIHNvY2tsZW5fdCAqaW5mb2xlbiwKLSAg
ICAgICAgICAgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwKLSAgICAgICAgICAgICAgaW50ICpt
c2dfZmxhZ3MpOwotCi1pbnQKLXVzcnNjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCi0gICAgICAgICAgICAgc29ja2xlbl90IG5h
bWVsZW4pOwotCi0jZGVmaW5lIFNDVFBfQklORFhfQUREX0FERFIgMHgwMDAwODAwMQotI2RlZmlu
ZSBTQ1RQX0JJTkRYX1JFTV9BRERSIDB4MDAwMDgwMDIKLQotaW50Ci11c3JzY3RwX2JpbmR4KHN0
cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLAot
ICAgICAgICAgICAgICBpbnQgYWRkcmNudCwKLSAgICAgICAgICAgICAgaW50IGZsYWdzKTsKLQot
aW50Ci11c3JzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgIGlu
dCBiYWNrbG9nKTsKLQotc3RydWN0IHNvY2tldCAqCi11c3JzY3RwX2FjY2VwdChzdHJ1Y3Qgc29j
a2V0ICpzbywKLSAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqIGFuYW1lLAotICAgICAg
ICAgICAgICAgc29ja2xlbl90ICogYW5hbWVsZW4pOwotCi1zdHJ1Y3Qgc29ja2V0ICoKLXVzcnNj
dHBfcGVlbG9mZihzdHJ1Y3Qgc29ja2V0ICosIHNjdHBfYXNzb2NfdCk7Ci0KLWludAotdXNyc2N0
cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLAotICAgICAgICAgICAgICAgIHN0cnVjdCBzb2Nr
YWRkciAqbmFtZSwKLSAgICAgICAgICAgICAgICBzb2NrbGVuX3QgbmFtZWxlbik7Ci0KLWludAot
dXNyc2N0cF9jb25uZWN0eChzdHJ1Y3Qgc29ja2V0ICpzbywKLSAgICAgICAgICAgICAgICAgY29u
c3Qgc3RydWN0IHNvY2thZGRyICphZGRycywgaW50IGFkZHJjbnQsCi0gICAgICAgICAgICAgICAg
IHNjdHBfYXNzb2NfdCAqaWQpOwotCi12b2lkCi11c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQg
KnNvKTsKLQotc2N0cF9hc3NvY190Ci11c3JzY3RwX2dldGFzc29jaWQoc3RydWN0IHNvY2tldCAq
LCBzdHJ1Y3Qgc29ja2FkZHIgKik7Ci0KLWludAotdXNyc2N0cF9maW5pc2godm9pZCk7Ci0KLWlu
dAotdXNyc2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdyk7Ci0KLXZvaWQK
LXVzcnNjdHBfY29ubmlucHV0KHZvaWQgKiwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIHVpbnQ4X3Qp
OwotCi1pbnQKLXVzcnNjdHBfc2V0X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICosIGludCk7
Ci0KLWludAotdXNyc2N0cF9nZXRfbm9uX2Jsb2NraW5nKHN0cnVjdCBzb2NrZXQgKik7Ci0KLXZv
aWQKLXVzcnNjdHBfcmVnaXN0ZXJfYWRkcmVzcyh2b2lkICopOwotCi12b2lkCi11c3JzY3RwX2Rl
cmVnaXN0ZXJfYWRkcmVzcyh2b2lkICopOwotCi1pbnQKLXVzcnNjdHBfc2V0X3VscGluZm8oc3Ry
dWN0IHNvY2tldCAqLCB2b2lkICopOwotCi0jZGVmaW5lIFNDVFBfRFVNUF9PVVRCT1VORCAxCi0j
ZGVmaW5lIFNDVFBfRFVNUF9JTkJPVU5EICAwCi0KLWNoYXIgKgotdXNyc2N0cF9kdW1wcGFja2V0
KGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOwotCi12b2lkCi11c3JzY3RwX2ZyZWVkdW1wYnVm
ZmVyKGNoYXIgKik7Ci0KLXZvaWQKLXVzcnNjdHBfZW5hYmxlX2NyYzMyY19vZmZsb2FkKHZvaWQp
OwotCi12b2lkCi11c3JzY3RwX2Rpc2FibGVfY3JjMzJjX29mZmxvYWQodm9pZCk7Ci0KLXVpbnQz
Ml90Ci11c3JzY3RwX2NyYzMyYyh2b2lkICosIHNpemVfdCk7Ci0KLSNkZWZpbmUgVVNSU0NUUF9T
WVNDVExfREVDTChfX2ZpZWxkKSAgICAgICAgICAgICAgICBcCi12b2lkIHVzcnNjdHBfc3lzY3Rs
X3NldF8gIyMgX19maWVsZCh1aW50MzJfdCB2YWx1ZSk7XAotdWludDMyX3QgdXNyc2N0cF9zeXNj
dGxfZ2V0XyAjIyBfX2ZpZWxkKHZvaWQpOwotCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2Vu
ZHNwYWNlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3JlY3ZzcGFjZSkKLVVTUlNDVFBfU1lT
Q1RMX0RFQ0woc2N0cF9hdXRvX2FzY29uZikKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9tdWx0
aXBsZV9hc2NvbmZzKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2Vjbl9lbmFibGUpCi1VU1JT
Q1RQX1NZU0NUTF9ERUNMKHNjdHBfcHJfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3Rw
X2F1dGhfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2FzY29uZl9lbmFibGUpCi1V
U1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcmVjb25maWdfZW5hYmxlKQotVVNSU0NUUF9TWVNDVExf
REVDTChzY3RwX25yc2Fja19lbmFibGUpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcGt0ZHJv
cF9lbmFibGUpCi0jaWYgIWRlZmluZWQoU0NUUF9XSVRIX05PX0NTVU0pCi1VU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykKLSNlbmRpZgotVVNSU0NUUF9TWVNDVExf
REVDTChzY3RwX3BlZXJfY2h1bmtfb2gpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X2J1
cnN0X2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1
ZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oYXNodGJsc2l6ZSkKLVVTUlNDVFBfU1lTQ1RM
X0RFQ0woc2N0cF9wY2J0YmxzaXplKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21pbl9zcGxp
dF9wb2ludCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9jaHVua3NjYWxlKQotVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfc2Fja19mcmVxX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
c3lzdGVtX2ZyZWVfcmVzY19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hc29jX2Zy
ZWVfcmVzY19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oZWFydGJlYXRfaW50ZXJ2
YWxfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVm
YXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1
bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCi1V
U1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnRvX21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExf
REVDTChzY3RwX3J0b19taW5fZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydG9f
aW5pdGlhbF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2luaXRfcnRvX21heF9k
ZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1
bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpCi1VU1JT
Q1RQX1NZU0NUTF9ERUNMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX3BhdGhfcnR4X21heF9kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChz
Y3RwX2FkZF9tb3JlX3RocmVzaG9sZCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ucl9pbmNv
bWluZ19zdHJlYW1zX2RlZmF1bHQpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbnJfb3V0Z29p
bmdfc3RyZWFtc19kZWZhdWx0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2NtdF9vbl9vZmYp
Ci1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfY210X3VzZV9kYWMpCi1VU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfbmF0X2ZyaWVuZGx5KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX0wyX2FiY192YXJpYWJs
ZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKLVVTUlND
VFBfU1lTQ1RMX0RFQ0woc2N0cF9kb19kcmFpbikKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9o
Yl9tYXhidXJzdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVf
aGl0c19saW1pdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9taW5fcmVzaWR1YWwpCi1VU1JT
Q1RQX1NZU0NUTF9ERUNMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykKLVVTUlNDVFBfU1lTQ1RMX0RF
Q0woc2N0cF9sb2dnaW5nX2xldmVsKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRf
Y2NfbW9kdWxlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxl
YXZlKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21vYmlsaXR5X2Jhc2UpCi1VU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpCi1VU1JTQ1RQX1NZU0NUTF9ERUNM
KHNjdHBfaW5pdHNfaW5jbHVkZV9uYXRfZnJpZW5kbHkpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfdWRwX3R1bm5lbGluZ19wb3J0KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2VuYWJsZV9z
YWNrX2ltbWVkaWF0ZWx5KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3Z0YWdfdGltZV93YWl0
KQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2JsYWNraG9sZSkKLVVTUlNDVFBfU1lTQ1RMX0RF
Q0woc2N0cF9kaWFnX2luZm9fY29kZSkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9mcl9tYXhf
YnVyc3RfZGVmYXVsdCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wYXRoX3BmX3RocmVzaG9s
ZCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKLVVTUlNDVFBf
U1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfYncpCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnR0
dmFyX3J0dCkKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfZXFyZXQpCi1VU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfc3RlYWR5X3N0ZXApCi1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
dXNlX2RjY2NfZWNuKQotVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcp
Ci1VU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdGlhbF9jd25kKQotI2lmZGVmIFNDVFBfREVC
VUcKLVVTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kZWJ1Z19vbikKLS8qIE1vcmUgc3BlY2lmaWMg
dmFsdWVzIGNhbiBiZSBmb3VuZCBpbiBzY3RwX2NvbnN0YW50cywgYnV0Ci0gKiBhcmUgbm90IGNv
bnNpZGVyZWQgdG8gYmUgcGFydCBvZiB0aGUgQVBJLgotICovCi0jZGVmaW5lIFNDVFBfREVCVUdf
Tk9ORSAweDAwMDAwMDAwCi0jZGVmaW5lIFNDVFBfREVCVUdfQUxMICAweGZmZmZmZmZmCi0jZW5k
aWYKLSN1bmRlZiBVU1JTQ1RQX1NZU0NUTF9ERUNMCi1zdHJ1Y3Qgc2N0cF90aW1ldmFsIHsKLQl1
aW50MzJfdCB0dl9zZWM7Ci0JdWludDMyX3QgdHZfdXNlYzsKLX07Ci0KLXN0cnVjdCBzY3Rwc3Rh
dCB7Ci0Jc3RydWN0IHNjdHBfdGltZXZhbCBzY3Rwc19kaXNjb250aW51aXR5dGltZTsgLyogc2N0
cFN0YXRzIDE4IChUaW1lU3RhbXApICovCi0JLyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3MyAq
LwotCXVpbnQzMl90ICBzY3Rwc19jdXJyZXN0YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDEg
ICAoR2F1Z2UzMikgKi8KLQl1aW50MzJfdCAgc2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAgLyog
c2N0cFN0YXRzICAyIChDb3VudGVyMzIpICovCi0JdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRlc3Rh
YjsKLQl1aW50MzJfdCAgc2N0cHNfY29sbGlzaW9uZXN0YWI7Ci0JdWludDMyX3QgIHNjdHBzX3Bh
c3NpdmVlc3RhYjsgICAgICAgIC8qIHNjdHBTdGF0cyAgMyAoQ291bnRlcjMyKSAqLwotCXVpbnQz
Ml90ICBzY3Rwc19hYm9ydGVkOyAgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50ZXIz
MikgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2h1dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0YXRz
ICA1IChDb3VudGVyMzIpICovCi0JdWludDMyX3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAgICAg
IC8qIHNjdHBTdGF0cyAgNiAoQ291bnRlcjMyKSAqLwotCXVpbnQzMl90ICBzY3Rwc19jaGVja3N1
bWVycm9yczsgICAgICAvKiBzY3RwU3RhdHMgIDcgKENvdW50ZXIzMikgKi8KLQl1aW50MzJfdCAg
c2N0cHNfb3V0Y29udHJvbGNodW5rczsgICAgLyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQpICov
Ci0JdWludDMyX3QgIHNjdHBzX291dG9yZGVyY2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAgOSAo
Q291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAvKiBz
Y3RwU3RhdHMgMTAgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9sY2h1
bmtzOyAgICAgLyogc2N0cFN0YXRzIDExIChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBz
X2lub3JkZXJjaHVua3M7ICAgICAgIC8qIHNjdHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLwotCXVp
bnQzMl90ICBzY3Rwc19pbnVub3JkZXJjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENvdW50
ZXI2NCkgKi8KLQl1aW50MzJfdCAgc2N0cHNfZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0cFN0
YXRzIDE0IChDb3VudGVyNjQpICovCi0JdWludDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsgICAg
ICAgIC8qIHNjdHBTdGF0cyAxNSAoQ291bnRlcjY0KSAqLwotCXVpbnQzMl90ICBzY3Rwc19vdXRw
YWNrZXRzOyAgICAgICAgICAvKiBzY3RwU3RhdHMgMTYgKENvdW50ZXI2NCkgKi8KLQl1aW50MzJf
dCAgc2N0cHNfaW5wYWNrZXRzOyAgICAgICAgICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVyNjQp
ICovCi0KLQkvKiBpbnB1dCBzdGF0aXN0aWNzOiAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2cGFj
a2V0czsgICAgICAgICAvKiB0b3RhbCBpbnB1dCBwYWNrZXRzICAgICAgICAqLwotCXVpbnQzMl90
ICBzY3Rwc19yZWN2ZGF0YWdyYW1zOyAgICAgICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMgICAg
ICAqLwotCXVpbnQzMl90ICBzY3Rwc19yZWN2cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBwYWNr
ZXRzIHRoYXQgaGFkIGRhdGEgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAgICAg
ICAgLyogdG90YWwgaW5wdXQgU0FDSyBjaHVua3MgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVj
dmRhdGE7ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgREFUQSBjaHVua3MgICAgKi8KLQl1aW50
MzJfdCAgc2N0cHNfcmVjdmR1cGRhdGE7ICAgICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGljYXRl
IERBVEEgY2h1bmtzICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAgIC8q
IHRvdGFsIGlucHV0IEhCIGNodW5rcyAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFy
dGJlYXRhY2s7ICAgIC8qIHRvdGFsIGlucHV0IEhCLUFDSyBjaHVua3MgICovCi0JdWludDMyX3Qg
IHNjdHBzX3JlY3ZlY25lOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtzICAg
ICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0
IEFVVEggY2h1bmtzICAgICovCi0JdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsgICAg
IC8qIHRvdGFsIGlucHV0IGNodW5rcyBtaXNzaW5nIEFVVEggKi8KLQl1aW50MzJfdCAgc2N0cHNf
cmVjdml2YWxobWFjaWQ7ICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBpZHMg
cmVjZWl2ZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyogdG90
YWwgbnVtYmVyIG9mIGludmFsaWQgc2VjcmV0IGlkcyByZWNlaXZlZCAqLwotCXVpbnQzMl90ICBz
Y3Rwc19yZWN2YXV0aGZhaWxlZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWlsZWQg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFzdCBw
YXRoIHJlY2VpdmVzIGFsbCBvbmUgY2h1bmsgKi8KLQl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJl
c3NtOyAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIG11bHRpLXBhcnQgZGF0YSAqLwotCXVpbnQz
Ml90ICBzY3Rwc19yZWN2bm9jcmM7Ci0JdWludDMyX3QgIHNjdHBzX3JlY3Zzd2NyYzsKLQl1aW50
MzJfdCAgc2N0cHNfcmVjdmh3Y3JjOwotCi0JLyogb3V0cHV0IHN0YXRpc3RpY3M6ICovCi0JdWlu
dDMyX3QgIHNjdHBzX3NlbmRwYWNrZXRzOyAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBwYWNrZXRz
ICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzYWNrczsgICAgICAgICAgIC8qIHRvdGFs
IG91dHB1dCBTQUNLcyAgICAgICAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRkYXRhOyAgICAg
ICAgICAgIC8qIHRvdGFsIG91dHB1dCBEQVRBIGNodW5rcyAgICovCi0JdWludDMyX3QgIHNjdHBz
X3NlbmRyZXRyYW5zZGF0YTsgICAgIC8qIHRvdGFsIG91dHB1dCByZXRyYW5zbWl0dGVkIERBVEEg
Y2h1bmtzICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRmYXN0cmV0cmFuczsgICAgIC8qIHRvdGFs
IG91dHB1dCBmYXN0IHJldHJhbnNtaXR0ZWQgREFUQSBjaHVua3MgKi8KLQl1aW50MzJfdCAgc2N0
cHNfc2VuZG11bHRmYXN0cmV0cmFuczsgLyogdG90YWwgRlIncyB0aGF0IGhhcHBlbmVkIG1vcmUg
dGhhbiBvbmNlCi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHNh
bWUgY2h1bmsgKHUtZGVsIG11bHRpLWZyIGFsZ28pLgotCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGhlYXJ0YmVhdDsgICAgICAg
LyogdG90YWwgb3V0cHV0IEhCIGNodW5rcyAgICAgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2VuZGVj
bmU7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IEVDTkUgY2h1bmtzICAgICovCi0JdWludDMy
X3QgIHNjdHBzX3NlbmRhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBBVVRIIGNodW5r
cyBGSVhNRSAgICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRlcnJvcnM7ICAgICAgICAgIC8qIGlw
X291dHB1dCBlcnJvciBjb3VudGVyICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRub2NyYzsKLQl1
aW50MzJfdCAgc2N0cHNfc2VuZHN3Y3JjOwotCXVpbnQzMl90ICBzY3Rwc19zZW5kaHdjcmM7Ci0J
LyogUENLRFJPUFJFUCBzdGF0aXN0aWNzOiAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwZm1ib3g7
ICAgICAgICAgICAvKiBQYWNrZXQgZHJvcCBmcm9tIG1pZGRsZSBib3ggKi8KLQl1aW50MzJfdCAg
c2N0cHNfcGRycGZlaG9zOyAgICAgICAgICAgLyogUC1kcm9wIGZyb20gZW5kIGhvc3QgKi8KLQl1
aW50MzJfdCAgc2N0cHNfcGRycG1iZGE7ICAgICAgICAgICAgLyogUC1kcm9wcyB3aXRoIGRhdGEg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfcGRycG1iY3Q7ICAgICAgICAgICAgLyogUC1kcm9wcywgbm9u
LWRhdGEsIG5vbi1lbmRob3N0ICovCi0JdWludDMyX3QgIHNjdHBzX3BkcnBid3JwdDsgICAgICAg
ICAgIC8qIFAtZHJvcCwgbm9uLWVuZGhvc3QsIGJhbmR3aWR0aCByZXAgb25seSAqLwotCXVpbnQz
Ml90ICBzY3Rwc19wZHJwY3J1cHQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2ggZm9y
IGNodW5rIGhlYWRlciAqLwotCXVpbnQzMl90ICBzY3Rwc19wZHJwbmVkYXQ7ICAgICAgICAgICAv
KiBQLWRyb3AsIG5vdCBlbm91Z2ggZGF0YSB0byBjb25maXJtICovCi0JdWludDMyX3QgIHNjdHBz
X3BkcnBwZGJyazsgICAgICAgICAgIC8qIFAtZHJvcCwgd2hlcmUgcHJvY2Vzc19jaHVua19kcm9w
IHNhaWQgYnJlYWsgKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycHRzbm5mOyAgICAgICAgICAgLyog
UC1kcm9wLCBjb3VsZCBub3QgZmluZCBUU04gKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGRuZm5k
OyAgICAgICAgICAgLyogUC1kcm9wLCBhdHRlbXB0IHJldmVyc2UgVFNOIGxvb2t1cCAqLwotCXVp
bnQzMl90ICBzY3Rwc19wZHJwZGl3bnA7ICAgICAgICAgICAvKiBQLWRyb3AsIGUtaG9zdCBjb25m
aXJtcyB6ZXJvLXJ3bmQgKi8KLQl1aW50MzJfdCAgc2N0cHNfcGRycGRpenJ3OyAgICAgICAgICAg
LyogUC1kcm9wLCBtaWRib3ggY29uZmlybXMgbm8gc3BhY2UgKi8KLQl1aW50MzJfdCAgc2N0cHNf
cGRycGJhZGQ7ICAgICAgICAgICAgLyogUC1kcm9wLCBkYXRhIGRpZCBub3QgbWF0Y2ggVFNOICov
Ci0JdWludDMyX3QgIHNjdHBzX3BkcnBtYXJrOyAgICAgICAgICAgIC8qIFAtZHJvcCwgVFNOJ3Mg
bWFya2VkIGZvciBGYXN0IFJldHJhbiAqLwotCS8qIHRpbWVvdXRzICovCi0JdWludDMyX3QgIHNj
dHBzX3RpbW9pdGVyYXRvcjsgICAgICAgIC8qIE51bWJlciBvZiBpdGVyYXRvciB0aW1lcnMgdGhh
dCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vZGF0YTsgICAgICAgICAgICAvKiBOdW1i
ZXIgb2YgVDMgZGF0YSB0aW1lIG91dHMgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3dpbmRvd3By
b2JlOyAgICAgLyogTnVtYmVyIG9mIHdpbmRvdyBwcm9iZSAoVDMpIHRpbWVycyB0aGF0IGZpcmVk
ICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9pbml0OyAgICAgICAgICAgIC8qIE51bWJlciBvZiBJ
TklUIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9zYWNrOyAgICAg
ICAgICAgIC8qIE51bWJlciBvZiBzYWNrIHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3Qg
IHNjdHBzX3RpbW9zaHV0ZG93bjsgICAgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biB0aW1lcnMg
dGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vaGVhcnRiZWF0OyAgICAgICAvKiBO
dW1iZXIgb2YgaGVhcnRiZWF0IHRpbWVycyB0aGF0IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBz
X3RpbW9jb29raWU7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIGNvb2tpZSB0aW1lb3V0
IGZpcmVkICovCi0JdWludDMyX3QgIHNjdHBzX3RpbW9zZWNyZXQ7ICAgICAgICAgIC8qIE51bWJl
ciBvZiB0aW1lcyBhbiBlbmRwb2ludCBjaGFuZ2VkIGl0cyBjb29raWUgc2VjcmV0Ki8KLQl1aW50
MzJfdCAgc2N0cHNfdGltb3BhdGhtdHU7ICAgICAgICAgLyogTnVtYmVyIG9mIFBNVFUgdGltZXJz
IHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duYWNrOyAgICAgLyog
TnVtYmVyIG9mIHNodXRkb3duIGFjayB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90ICBz
Y3Rwc190aW1vc2h1dGRvd25ndWFyZDsgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gZ3VhcmQgdGlt
ZXJzIHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb3N0cm1yc3Q7ICAgICAgICAg
LyogTnVtYmVyIG9mIHN0cmVhbSByZXNldCB0aW1lcnMgdGhhdCBmaXJlZCAqLwotCXVpbnQzMl90
ICBzY3Rwc190aW1vZWFybHlmcjsgICAgICAgICAvKiBOdW1iZXIgb2YgZWFybHkgRlIgdGltZXJz
IHRoYXQgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb2FzY29uZjsgICAgICAgICAgLyog
TnVtYmVyIG9mIHRpbWVzIGFuIGFzY29uZiB0aW1lciBmaXJlZCAqLwotCXVpbnQzMl90ICBzY3Rw
c190aW1vZGVscHJpbTsJICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYSBwcmltX2RlbGV0ZWQgdGlt
ZXIgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdGltb2F1dG9jbG9zZTsgICAgICAgLyogTnVt
YmVyIG9mIHRpbWVzIGF1dG8gY2xvc2UgdGltZXIgZmlyZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNf
dGltb2Fzc29ja2lsbDsgICAgICAgLyogTnVtYmVyIG9mIGFzb2MgZnJlZSB0aW1lcnMgZXhwaXJl
ZCAqLwotCXVpbnQzMl90ICBzY3Rwc190aW1vaW5wa2lsbDsgICAgICAgICAvKiBOdW1iZXIgb2Yg
aW5wIGZyZWUgdGltZXJzIGV4cGlyZWQgKi8KLQkvKiBmb3JtZXIgZWFybHkgRlIgY291bnRlcnMg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfc3BhcmVbMTFdOwotCS8qIG90aGVycyAqLwotCXVpbnQzMl90
ICBzY3Rwc19oZHJvcHM7ICAgICAgICAgICAgICAvKiBwYWNrZXQgc2hvcnRlciB0aGFuIGhlYWRl
ciAqLwotCXVpbnQzMl90ICBzY3Rwc19iYWRzdW07ICAgICAgICAgICAgICAvKiBjaGVja3N1bSBl
cnJvciAgICAgICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19ub3BvcnQ7ICAgICAgICAgICAg
ICAvKiBubyBlbmRwb2ludCBmb3IgcG9ydCAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19iYWR2
dGFnOyAgICAgICAgICAgICAvKiBiYWQgdi10YWcgICAgICAgICAgICAgICAgICAqLwotCXVpbnQz
Ml90ICBzY3Rwc19iYWRzaWQ7ICAgICAgICAgICAgICAvKiBiYWQgU0lEICAgICAgICAgICAgICAg
ICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19ub21lbTsgICAgICAgICAgICAgICAvKiBubyBtZW1v
cnkgICAgICAgICAgICAgICAgICAqLwotCXVpbnQzMl90ICBzY3Rwc19mYXN0cmV0cmFuc2lucnR0
OyAgICAvKiBudW1iZXIgb2YgbXVsdGlwbGUgRlIgaW4gYSBSVFQgd2luZG93ICovCi0JdWludDMy
X3QgIHNjdHBzX21hcmtlZHJldHJhbnM7Ci0JdWludDMyX3QgIHNjdHBzX25hZ2xlc2VudDsgICAg
ICAgICAgIC8qIG5hZ2xlIGFsbG93ZWQgc2VuZGluZyAgICAgICovCi0JdWludDMyX3QgIHNjdHBz
X25hZ2xlcXVldWVkOyAgICAgICAgIC8qIG5hZ2xlIGRvZXNuJ3QgYWxsb3cgc2VuZGluZyAqLwot
CXVpbnQzMl90ICBzY3Rwc19tYXhidXJzdHF1ZXVlZDsgICAgICAvKiBtYXggYnVyc3QgZG9lc24n
dCBhbGxvdyBzZW5kaW5nICovCi0JdWludDMyX3QgIHNjdHBzX2lmbm9tZW1xdWV1ZWQ7ICAgICAg
IC8qIGxvb2sgYWhlYWQgdGVsbHMgdXMgbm8gbWVtb3J5IGluCi0JICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAqIGludGVyZmFjZSByaW5nIGJ1ZmZlciBPUiB3ZSBoYWQgYQot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzZW5kIGVycm9yIGFuZCBh
cmUgcXVldWluZyBvbmUgc2VuZC4KLQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICovCi0JdWludDMyX3QgIHNjdHBzX3dpbmRvd3Byb2JlZDsgICAgICAgIC8qIHRvdGFsIG51
bWJlciBvZiB3aW5kb3cgcHJvYmVzIHNlbnQgKi8KLQl1aW50MzJfdCAgc2N0cHNfbG93bGV2ZWxl
cnI7ICAgICAgICAgLyogdG90YWwgdGltZXMgYW4gb3V0cHV0IGVycm9yIGNhdXNlcyB1cwotCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0byBjbGFtcCBkb3duIG9uIG5l
eHQgdXNlciBzZW5kLgotCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K
LQl1aW50MzJfdCAgc2N0cHNfbG93bGV2ZWxlcnJ1c3I7ICAgICAgLyogdG90YWwgdGltZXMgc2N0
cF9zZW5kZXJyb3JzIHdlcmUgY2F1c2VkIGZyb20KLQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICogYSB1c2VyIHNlbmQgZnJvbSBhIHVzZXIgaW52b2tlZCBzZW5kIG5vdAot
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhIHNhY2sgcmVzcG9uc2UK
LQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0JdWludDMyX3QgIHNj
dHBzX2RhdGFkcm9wY2hrbG10OyAgICAgIC8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0
byBjaHVuayBsaW1pdCByZWFjaGVkICovCi0JdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wcnduZDsg
ICAgICAgIC8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3BzIGR1ZSB0byByd25kIGxpbWl0IHJlYWNo
ZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfZWNuZXJlZHVjZWRjd25kOyAgICAgLyogTnVtYmVyIG9m
IHRpbWVzIGEgRUNOIHJlZHVjZWQgdGhlIGN3bmQgKi8KLQl1aW50MzJfdCAgc2N0cHNfdnRhZ2V4
cHJlc3M7ICAgICAgICAgLyogVXNlZCBleHByZXNzIGxvb2t1cCB2aWEgdnRhZyAqLwotCXVpbnQz
Ml90ICBzY3Rwc192dGFnYm9ndXM7ICAgICAgICAgICAvKiBDb2xsaXNpb24gaW4gZXhwcmVzcyBs
b29rdXAuICovCi0JdWludDMyX3QgIHNjdHBzX3ByaW1hcnlfcmFuZHJ5OyAgICAgIC8qIE51bWJl
ciBvZiB0aW1lcyB0aGUgc2VuZGVyIHJhbiBkcnkgb2YgdXNlciBkYXRhIG9uIHByaW1hcnkgKi8K
LQl1aW50MzJfdCAgc2N0cHNfY210X3JhbmRyeTsgICAgICAgICAgLyogU2FtZSBmb3IgYWJvdmUg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfc2xvd3BhdGhfc2FjazsgICAgICAgLyogU2Fja3MgdGhlIHNs
b3cgd2F5ICovCi0JdWludDMyX3QgIHNjdHBzX3d1X3NhY2tzX3NlbnQ7ICAgICAgIC8qIFdpbmRv
dyBVcGRhdGUgb25seSBzYWNrcyBzZW50ICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhf
ZmxhZ3M7ICAgIC8qIG51bWJlciBvZiBzZW5kcyB3aXRoIHNpbmZvX2ZsYWdzICE9MCAqLwotCXVp
bnQzMl90ICBzY3Rwc19zZW5kc193aXRoX3Vub3JkOyAgICAvKiBudW1iZXIgb2YgdW5vcmRlcmVk
IHNlbmRzICovCi0JdWludDMyX3QgIHNjdHBzX3NlbmRzX3dpdGhfZW9mOyAgICAgIC8qIG51bWJl
ciBvZiBzZW5kcyB3aXRoIEVPRiBmbGFnIHNldCAqLwotCXVpbnQzMl90ICBzY3Rwc19zZW5kc193
aXRoX2Fib3J0OyAgICAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBBQk9SVCBmbGFnIHNldCAqLwot
CXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxsczsvKiBudW1iZXIgb2YgdGltZXMg
cHJvdG9jb2wgZHJhaW4gY2FsbGVkICovCi0JdWludDMyX3QgIHNjdHBzX3Byb3RvY29sX2RyYWlu
c19kb25lOy8qIG51bWJlciBvZiB0aW1lcyB3ZSBkaWQgYSBwcm90b2NvbCBkcmFpbiAqLwotCXVp
bnQzMl90ICBzY3Rwc19yZWFkX3BlZWtzOyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgcmVj
diB3YXMgY2FsbGVkIHdpdGggcGVlayAqLwotCXVpbnQzMl90ICBzY3Rwc19jYWNoZWRfY2hrOyAg
ICAgICAgICAvKiBOdW1iZXIgb2YgY2FjaGVkIGNodW5rcyB1c2VkICovCi0JdWludDMyX3QgIHNj
dHBzX2NhY2hlZF9zdHJtb3E7ICAgICAgIC8qIE51bWJlciBvZiBjYWNoZWQgc3RyZWFtIG9xJ3Mg
dXNlZCAqLwotCXVpbnQzMl90ICBzY3Rwc19sZWZ0X2FiYW5kb247ICAgICAgICAvKiBOdW1iZXIg
b2YgdW5yZWFkIG1lc3NhZ2VzIGFiYW5kb25lZCBieSBjbG9zZSAqLwotCXVpbnQzMl90ICBzY3Rw
c19zZW5kX2J1cnN0X2F2b2lkOyAgICAvKiBVbnVzZWQgKi8KLQl1aW50MzJfdCAgc2N0cHNfc2Vu
ZF9jd25kX2F2b2lkOyAgICAgLyogU2VuZCBjd25kIGZ1bGwgIGF2b2lkYW5jZSwgYWxyZWFkeSBt
YXggYnVyc3QgaW5mbGlnaHQgdG8gbmV0ICovCi0JdWludDMyX3QgIHNjdHBzX2Z3ZHRzbl9tYXBf
b3ZlcjsgICAgIC8qIG51bWJlciBvZiBtYXAgYXJyYXkgb3Zlci1ydW5zIHZpYSBmd2QtdHNuJ3Mg
Ki8KLQl1aW50MzJfdCAgc2N0cHNfcXVldWVfdXBkX2VjbmU7ICAgICAgLyogTnVtYmVyIG9mIHRp
bWVzIHdlIHF1ZXVlZCBvciB1cGRhdGVkIGFuIEVDTiBjaHVuayBvbiBzZW5kIHF1ZXVlICovCi0J
dWludDMyX3QgIHNjdHBzX3Jlc2VydmVkWzMxXTsgICAgICAgIC8qIEZ1dHVyZSBBQkkgY29tcGF0
IC0gcmVtb3ZlIGludCdzIGZyb20gaGVyZSB3aGVuIGFkZGluZyBuZXcgKi8KLX07Ci0KLXZvaWQK
LXVzcnNjdHBfZ2V0X3N0YXQoc3RydWN0IHNjdHBzdGF0ICopOwotCi0jaWZkZWYgX1dJTjMyCi0j
aWZkZWYgX01TQ19WRVIKLSNwcmFnbWEgd2FybmluZyhkZWZhdWx0OiA0MjAwKQotI2VuZGlmCi0j
ZW5kaWYKLSNpZmRlZiAgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwLnBjLmluIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cC5wYy5pbgppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5hMWVjZDJmNzRlYmY4YWUw
MmIzMTQ5Y2E1MmU3NzhhNDdjMDY3NWFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwLnBj
LmluCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHAucGMuaW4KQEAgLTAsMCArMSwxMiBAQAorcHJlZml4
PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitsaWJkaXI9QGxpYmRpckAKK2lu
Y2x1ZGVkaXI9QGluY2x1ZGVkaXJACisKK05hbWU6IHVzcnNjdHAKK0Rlc2NyaXB0aW9uOiBTQ1RQ
IGltcGxlbWVudGF0aW9uCitVUkw6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY3RwbGFiL3VzcnNjdHAK
K1ZlcnNpb246IEBWRVJTSU9OQAorUmVxdWlyZXM6IAorTGliczogLUwke2xpYmRpcn0gLWx1c3Jz
Y3RwCitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfSBAQVBQQ0ZMQUdTQApkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvQ01h
a2VMaXN0cy50eHQKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5
MS4uYzViNzIyOTZiNjUxMzM2NTYwNGY0MzVlM2U3MTk0MGVjZWQ0Yzg4NSAxMDA2NDQKLS0tIGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMTk0IEBACisjCisjIENvcHlyaWdodCAoQykg
MjAxNS0yMDE1IE9sZWcgQWxleGVlbmtvdgorIyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBGZWxp
eCBXZWlucmFuaworIworIyBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIyAzLiBOZWl0aGVyIHRoZSBu
YW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworIyAg
ICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
IHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorIyBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorIyBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUworIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyMgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyMgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisjIFNVQ0ggREFNQUdFLgorIworCisKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgSU5DTFVERSBNT0RV
TEVTIEFORCBTRVRUSU5HUworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIworCitzZXQoVkVSU0lPTiAiMS4wLjAiKQorCitzZXQocHJlZml4IAkJCQkJJHtD
TUFLRV9JTlNUQUxMX1BSRUZJWH0pCitzZXQoZXhlY19wcmVmaXggCQkJJHtwcmVmaXh9KQorc2V0
KGxpYmRpciAJCQkJCSR7ZXhlY19wcmVmaXh9L2xpYikKK3NldChpbmNsdWRlZGlyIAkJCQkke3By
ZWZpeH0vaW5jbHVkZS91c3JzY3RwKQorc2V0KENNQUtFX1JFUVVJUkVEX0lOQ0xVREVTICR7Q01B
S0VfQ1VSUkVOVF9TT1VSQ0VfRElSfSkKK3NldChDTUFLRV9NQUNPU1hfUlBBVEggCQkxKQorCith
ZGRfZGVmaW5pdGlvbnMoLURfX1VzZXJzcGFjZV9fKQorYWRkX2RlZmluaXRpb25zKC1EX19Vc2Vy
c3BhY2Vfb3NfJHtDTUFLRV9TWVNURU1fTkFNRX0pCithZGRfZGVmaW5pdGlvbnMoLURTQ1RQX1NJ
TVBMRV9BTExPQ0FUT1IpCithZGRfZGVmaW5pdGlvbnMoLURTQ1RQX1BST0NFU1NfTEVWRUxfTE9D
S1MpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IworIyBPUyBERVBFTkRFTlQKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMKKworaWYgKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIkxpbnV4IikK
KwlhZGRfZGVmaW5pdGlvbnMoLURfR05VX1NPVVJDRSkKK2VuZGlmICgpCisKK2lmICgke0NNQUtF
X1NZU1RFTV9OQU1FfSBNQVRDSEVTICJGcmVlQlNEIikKKwlhZGRfZGVmaW5pdGlvbnMoLVVfX0Zy
ZWVCU0RfXykKKwlzZXQoQ01BS0VfQ19GTEFHUyAiJHtDTUFLRV9DX0ZMQUdTfSAgICAgLVduby1h
ZGRyZXNzLW9mLXBhY2tlZC1tZW1iZXIiKQorCXNldChDTUFLRV9DWFhfRkxBR1MgIiR7Q01BS0Vf
Q1hYX0ZMQUdTfSAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlciIpCitlbmRpZiAoKQorCitp
ZiAoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFUQ0hFUyAiRGFyd2luIikKKwlhZGRfZGVmaW5pdGlv
bnMoLVVfX0FQUExFX18pCisJYWRkX2RlZmluaXRpb25zKC1EX19BUFBMRV9VU0VfUkZDXzIyOTIp
CisJc2V0KENNQUtFX0NfRkxBR1MgIiR7Q01BS0VfQ19GTEFHU30gICAgIC1Xbm8tYWRkcmVzcy1v
Zi1wYWNrZWQtbWVtYmVyIC1Xbm8tZGVwcmVjYXRlZC1kZWNsYXJhdGlvbnMiKQorCXNldChDTUFL
RV9DWFhfRkxBR1MgIiR7Q01BS0VfQ1hYX0ZMQUdTfSAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1l
bWJlciAtV25vLWRlcHJlY2F0ZWQtZGVjbGFyYXRpb25zIikKK2VuZGlmICgpCisKK2lmICgke0NN
QUtFX1NZU1RFTV9OQU1FfSBNQVRDSEVTICJEcmFnb25GbHkiKQorCWFkZF9kZWZpbml0aW9ucygt
VV9fRHJhZ29uRmx5X18pCitlbmRpZiAoKQorCitpZiAoJHtDTUFLRV9TWVNURU1fTkFNRX0gTUFU
Q0hFUyAiTmV0QlNEIikKKwlhZGRfZGVmaW5pdGlvbnMoLVVfX05ldEJTRF9fKQorZW5kaWYgKCkK
KworaWYgKCR7Q01BS0VfU1lTVEVNX05BTUV9IE1BVENIRVMgIk9wZW5CU0QiKQorCWFkZF9kZWZp
bml0aW9ucygtVV9fT3BlbkJTRF9fKQorZW5kaWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIExJQlJBUlkgRklMRVMKKyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworaW5jbHVkZV9kaXJl
Y3Rvcmllcygke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0pCisKK2xpc3QoQVBQRU5EIHVzcnNj
dHBfcm9vdF9oZWFkZXJzCisJdXNlcl9hdG9taWMuaAorCXVzZXJfZW52aXJvbm1lbnQuaAorCXVz
ZXJfaW5wY2IuaAorCXVzZXJfaXBfaWNtcC5oCisJdXNlcl9pcDZfdmFyLmgKKwl1c2VyX21hbGxv
Yy5oCisJdXNlcl9tYnVmLmgKKwl1c2VyX3F1ZXVlLmgKKwl1c2VyX3JlY3ZfdGhyZWFkLmgKKwl1
c2VyX3JvdXRlLmgKKwl1c2VyX3NvY2tldHZhci5oCisJdXNlcl91bWEuaAorCXVzcnNjdHAuaAor
KQorCitsaXN0KEFQUEVORCB1c3JzY3RwX25ldGluZXRfaGVhZGVycworCW5ldGluZXQvc2N0cF9h
c2NvbmYuaAorCW5ldGluZXQvc2N0cF9hdXRoLmgKKwluZXRpbmV0L3NjdHBfYnNkX2FkZHIuaAor
CW5ldGluZXQvc2N0cF9jYWxsb3V0LmgKKwluZXRpbmV0L3NjdHBfY29uc3RhbnRzLmgKKwluZXRp
bmV0L3NjdHBfY3JjMzIuaAorCW5ldGluZXQvc2N0cF9oZWFkZXIuaAorCW5ldGluZXQvc2N0cF9p
bmRhdGEuaAorCW5ldGluZXQvc2N0cF9pbnB1dC5oCisJbmV0aW5ldC9zY3RwX2xvY2tfdXNlcnNw
YWNlLmgKKwluZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNlLmgKKwluZXRpbmV0L3NjdHBfb3MuaAor
CW5ldGluZXQvc2N0cF9vdXRwdXQuaAorCW5ldGluZXQvc2N0cF9wY2IuaAorCW5ldGluZXQvc2N0
cF9wZWVsb2ZmLmgKKwluZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmgKKwluZXRpbmV0L3NjdHBf
c2hhMS5oCisJbmV0aW5ldC9zY3RwX3N0cnVjdHMuaAorCW5ldGluZXQvc2N0cF9zeXNjdGwuaAor
CW5ldGluZXQvc2N0cF90aW1lci5oCisJbmV0aW5ldC9zY3RwX3Vpby5oCisJbmV0aW5ldC9zY3Rw
X3Zhci5oCisJbmV0aW5ldC9zY3RwdXRpbC5oCisJbmV0aW5ldC9zY3RwLmgKKykKKworbGlzdChB
UFBFTkQgdXNyc2N0cF9uZXRpbmV0Nl9oZWFkZXJzCisJbmV0aW5ldDYvc2N0cDZfdmFyLmgKKykK
KworbGlzdChBUFBFTkQgdXNyc2N0cF9oZWFkZXJzCisJJHt1c3JzY3RwX3Jvb3RfaGVhZGVyc30K
Kwkke3VzcnNjdHBfbmV0aW5ldF9oZWFkZXJzfQorCSR7dXNyc2N0cF9uZXRpbmV0Nl9oZWFkZXJz
fQorKQorCitsaXN0KEFQUEVORCB1c3JzY3RwX3NvdXJjZXMKKwluZXRpbmV0L3NjdHBfYXNjb25m
LmMKKwluZXRpbmV0L3NjdHBfYXV0aC5jCisJbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKKwluZXRp
bmV0L3NjdHBfY2FsbG91dC5jCisJbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jCisJbmV0aW5l
dC9zY3RwX2NyYzMyLmMKKwluZXRpbmV0L3NjdHBfaW5kYXRhLmMKKwluZXRpbmV0L3NjdHBfaW5w
dXQuYworCW5ldGluZXQvc2N0cF9vdXRwdXQuYworCW5ldGluZXQvc2N0cF9wY2IuYworCW5ldGlu
ZXQvc2N0cF9wZWVsb2ZmLmMKKwluZXRpbmV0L3NjdHBfc2hhMS5jCisJbmV0aW5ldC9zY3RwX3Nz
X2Z1bmN0aW9ucy5jCisJbmV0aW5ldC9zY3RwX3N5c2N0bC5jCisJbmV0aW5ldC9zY3RwX3RpbWVy
LmMKKwluZXRpbmV0L3NjdHBfdXNlcnNwYWNlLmMKKwluZXRpbmV0L3NjdHBfdXNycmVxLmMKKwlu
ZXRpbmV0L3NjdHB1dGlsLmMKKwluZXRpbmV0Ni9zY3RwNl91c3JyZXEuYworCXVzZXJfZW52aXJv
bm1lbnQuYworCXVzZXJfbWJ1Zi5jCisJdXNlcl9yZWN2X3RocmVhZC5jCisJdXNlcl9zb2NrZXQu
YworKQorCithZGRfbGlicmFyeSh1c3JzY3RwIFNIQVJFRCAke3VzcnNjdHBfc291cmNlc30gJHt1
c3JzY3RwX2hlYWRlcnN9KQorYWRkX2xpYnJhcnkodXNyc2N0cC1zdGF0aWMgU1RBVElDICR7dXNy
c2N0cF9zb3VyY2VzfSAke3VzcnNjdHBfaGVhZGVyc30pCisKK2lmIChXSU4zMikKKwltZXNzYWdl
KFNUQVRVUyAibGluayBsaWJyYXJ5OiB3czJfMzIiKQorCXRhcmdldF9saW5rX2xpYnJhcmllcyh1
c3JzY3RwIHdzMl8zMikKKwl0YXJnZXRfbGlua19saWJyYXJpZXModXNyc2N0cC1zdGF0aWMgd3My
XzMyKQorZW5kaWYgKCkKKworc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHVzcnNjdHAtc3RhdGljIFBS
T1BFUlRJRVMgT1VUUFVUX05BTUUgInVzcnNjdHAiKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKHVz
cnNjdHAgUFJPUEVSVElFUyBJTVBPUlRfU1VGRklYICJfaW1wb3J0LmxpYiIpCitzZXRfdGFyZ2V0
X3Byb3BlcnRpZXModXNyc2N0cCBQUk9QRVJUSUVTIFNPVkVSU0lPTiAxIFZFUlNJT04gMS4wLjAp
CisKK2lmIChOT1QgREVGSU5FRCBDTUFLRV9JTlNUQUxMX0xJQkRJUikKKwlTRVQoQ01BS0VfSU5T
VEFMTF9MSUJESVIgbGliKQorZW5kaWYgKCkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIElOU1RBTEwgTElCUkFSWSBBTkQgSEVBREVSCisj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2luc3Rh
bGwoVEFSR0VUUyB1c3JzY3RwIHVzcnNjdHAtc3RhdGljIERFU1RJTkFUSU9OICR7Q01BS0VfSU5T
VEFMTF9MSUJESVJ9KQoraW5zdGFsbChGSUxFUyB1c3JzY3RwLmggREVTVElOQVRJT04gaW5jbHVk
ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0gYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL01ha2VmaWxlLmFtCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLjg1MjQwYjdjZWE4ZjY2YjA5YjM1ZWQwN2I3ZDJmNmZlY2U5YzUxNzEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUuYW0KKysrIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5hbQpAQCAtMCwwICsxLDgxIEBACisjCisjIENvcHlyaWdo
dCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisjCisjIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisjICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorIyAgICB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyMgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisjIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisjIEFSRSBESVNDTEFJTUVELglJTiBOTyBFVkVO
VCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisjIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMCisjIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisjIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIyBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVAorIyBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisjIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyMgU1VDSCBEQU1B
R0UuCisjCisKK0FVVE9NQUtFX09QVElPTlMgICAgICAgPSBzdWJkaXItb2JqZWN0cworRVhUUkFf
RElTVCAgICAgICAgICAgICA9IE1ha2VmaWxlLm5tYWtlCitsaWJfTFRMSUJSQVJJRVMgICAgICAg
ID0gbGlidXNyc2N0cC5sYQorbGlidXNyc2N0cF9sYV9TT1VSQ0VTICA9IHVzZXJfYXRvbWljLmgg
XAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfZW52aXJvbm1lbnQuYyB1c2VyX2Vudmly
b25tZW50LmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfaW5wY2IuaCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlcl9pcF9pY21wLmggXAorICAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZXJfaXA2X3Zhci5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21h
bGxvYy5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX21idWYuYyBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgdXNlcl9tYnVmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAg
IHVzZXJfcXVldWUuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9yZWN2X3RocmVh
ZC5jIHVzZXJfcmVjdl90aHJlYWQuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9y
b3V0ZS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3NvY2tldC5jIFwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VyX3NvY2tldHZhci5oIFwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICB1c2VyX3VtYS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3Nj
dHAuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2FzY29uZi5jIG5l
dGluZXQvc2N0cF9hc2NvbmYuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9z
Y3RwX2F1dGguYyBuZXRpbmV0L3NjdHBfYXV0aC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBuZXRpbmV0L3NjdHBfYnNkX2FkZHIuYyBuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaCBcCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NhbGxvdXQuYyBuZXRpbmV0L3NjdHBf
Y2FsbG91dC5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfY2NfZnVu
Y3Rpb25zLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9jb25zdGFu
dHMuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2NyYzMyLmMgbmV0
aW5ldC9zY3RwX2NyYzMyLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0
cF9oZWFkZXIuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX2luZGF0
YS5jIG5ldGluZXQvc2N0cF9pbmRhdGEuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0
aW5ldC9zY3RwX2lucHV0LmMgbmV0aW5ldC9zY3RwX2lucHV0LmggXAorICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oIFwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICBuZXRpbmV0L3NjdHBfb3MuaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
bmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBu
ZXRpbmV0L3NjdHBfb3V0cHV0LmMgbmV0aW5ldC9zY3RwX291dHB1dC5oIFwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfcGNiLmMgbmV0aW5ldC9zY3RwX3BjYi5oIFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0L3NjdHBfcGVlbG9mZi5jIG5ldGluZXQvc2N0
cF9wZWVsb2ZmLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9wcm9j
ZXNzX2xvY2suaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC9zY3RwX3NoYTEu
YyBuZXRpbmV0L3NjdHBfc2hhMS5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0
L3NjdHBfc3NfZnVuY3Rpb25zLmMgXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQv
c2N0cF9zdHJ1Y3RzLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cF9z
eXNjdGwuYyBuZXRpbmV0L3NjdHBfc3lzY3RsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAg
IG5ldGluZXQvc2N0cF91c2Vyc3BhY2UuYyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0
aW5ldC9zY3RwX3RpbWVyLmMgbmV0aW5ldC9zY3RwX3RpbWVyLmggXAorICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ldGluZXQvc2N0cF91aW8uaCBcCisgICAgICAgICAgICAgICAgICAgICAgICAg
bmV0aW5ldC9zY3RwX3VzcnJlcS5jIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0
L3NjdHBfdmFyLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvc2N0cHV0aWwu
YyBuZXRpbmV0L3NjdHB1dGlsLmggXAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2
L3NjdHA2X3Zhci5oIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni9zY3RwNl91
c3JyZXEuYworbGlidXNyc2N0cF9sYV9DRkxBR1MgPSAkKExJQkNGTEFHUykKK2xpYnVzcnNjdHBf
bGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMTowOjAKK2luY2x1ZGVfSEVBREVSUyA9IHVzcnNj
dHAuaAorCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtlIGIv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9NYWtlZmlsZS5ubWFrZQppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi40OGQyYmQxMTBjN2U1YmNmOGI5ZDRjOWI4ZTMwNzlh
ZTViY2ZmZDUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL01ha2VmaWxlLm5tYWtl
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvTWFrZWZpbGUubm1ha2UKQEAgLTAsMCArMSwxNzkg
QEAKKyMNCisjIENvcHlyaWdodCAoQykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuDQorIw0KKyMg
QWxsIHJpZ2h0cyByZXNlcnZlZC4NCisjDQorIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQNCisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucw0KKyMg
YXJlIG1ldDoNCisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0DQorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQ0KKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4NCisjIDMuIE5laXRoZXIgdGhlIG5hbWUgb2Yg
dGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQorIyAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUNCisjICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
Lg0KKyMNCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5EDQorIyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUNCisjIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFDQorIyBBUkUgRElTQ0xBSU1FRC4JSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1Qg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQ0KKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwNCisjIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTDQorIyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikNCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUDQorIyBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZDQorIyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GDQorIyBTVUNIIERBTUFHRS4NCisjDQorDQor
Q0ZMQUdTPS9JLiAvVzMgL1dYDQorDQorQ1ZBUlNETEw9LURTQ1RQX0RFQlVHIC1EU0NUUF9TSU1Q
TEVfQUxMT0NBVE9SIC1EU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTDQorQ1ZBUlNETEw9JChDVkFS
U0RMTCkgLURfX1VzZXJzcGFjZV9fIC1EX19Vc2Vyc3BhY2Vfb3NfV2luZG93cw0KK0NWQVJTRExM
PSQoQ1ZBUlNETEwpIC1ESU5FVCAtRElORVQ2DQorQ1ZBUlNETEw9JChDVkFSU0RMTCkgLURfTElC
DQorDQorTElOS0ZMQUdTPS9MSUJQQVRIOi4gV3MyXzMyLmxpYg0KKw0KK3VzcnNjdHBfT0JKRUNU
UyA9IFwNCisJdXNlcl9lbnZpcm9ubWVudC5vYmogXA0KKwl1c2VyX21idWYub2JqIFwNCisJdXNl
cl9yZWN2X3RocmVhZC5vYmogXA0KKwl1c2VyX3NvY2tldC5vYmogXA0KKwlzY3RwX2FzY29uZi5v
YmogXA0KKwlzY3RwX2F1dGgub2JqIFwNCisJc2N0cF9ic2RfYWRkci5vYmogXA0KKwlzY3RwX2Nh
bGxvdXQub2JqIFwNCisJc2N0cF9jY19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9jcmMzMi5vYmog
XA0KKwlzY3RwX2luZGF0YS5vYmogXA0KKwlzY3RwX2lucHV0Lm9iaiBcDQorCXNjdHBfb3V0cHV0
Lm9iaiBcDQorCXNjdHBfcGNiLm9iaiBcDQorCXNjdHBfcGVlbG9mZi5vYmogXA0KKwlzY3RwX3No
YTEub2JqIFwNCisJc2N0cF9zc19mdW5jdGlvbnMub2JqIFwNCisJc2N0cF9zeXNjdGwub2JqIFwN
CisJc2N0cF90aW1lci5vYmogXA0KKwlzY3RwX3VzZXJzcGFjZS5vYmogIFwNCisJc2N0cF91c3Jy
ZXEub2JqIFwNCisJc2N0cHV0aWwub2JqIFwNCisJc2N0cDZfdXNycmVxLm9iag0KKw0KK3VzcnNj
dHBfSEVBREVSUyA9IFwNCisJdXNlcl9hdG9taWMuaCBcDQorCXVzZXJfZW52aXJvbm1lbnQuaCBc
DQorCXVzZXJfaW5wY2IuaCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJdXNlcl9tYWxsb2MuaCBc
DQorCXVzZXJfbWJ1Zi5oIFwNCisJdXNlcl9yZWN2X3RocmVhZC5oIFwNCisJdXNlcl9yb3V0ZS5o
IFwNCisJdXNlcl9zb2NrZXR2YXIuaCBcDQorCXVzZXJfdW1hLmggXA0KKwl1c2VyX3F1ZXVlLmgg
XA0KKwl1c2VyX2lwX2ljbXAuaCBcDQorCXVzZXJfaXA2X3Zhci5oIFwNCisJbmV0aW5ldFxzY3Rw
LmggXA0KKwluZXRpbmV0XHNjdHBfYXNjb25mLmggXA0KKwluZXRpbmV0XHNjdHBfYXV0aC5oIFwN
CisJbmV0aW5ldFxzY3RwX2JzZF9hZGRyLmggXA0KKwluZXRpbmV0XHNjdHBfY2FsbG91dC5oIFwN
CisJbmV0aW5ldFxzY3RwX2NvbnN0YW50cy5oIFwNCisJbmV0aW5ldFxzY3RwX2NyYzMyLmggXA0K
KwluZXRpbmV0XHNjdHBfaGVhZGVyLmggXA0KKwluZXRpbmV0XHNjdHBfaW5kYXRhLmggXA0KKwlu
ZXRpbmV0XHNjdHBfaW5wdXQuaCBcDQorCW5ldGluZXRcc2N0cF9sb2NrX3VzZXJzcGFjZS5oIFwN
CisJbmV0aW5ldFxzY3RwX29zLmggXA0KKwluZXRpbmV0XHNjdHBfb3NfdXNlcnNwYWNlLmggXA0K
KwluZXRpbmV0XHNjdHBfb3V0cHV0LmggXA0KKwluZXRpbmV0XHNjdHBfcGNiLmggXA0KKwluZXRp
bmV0XHNjdHBfcGVlbG9mZi5oIFwNCisJbmV0aW5ldFxzY3RwX3Byb2Nlc3NfbG9jay5oIFwNCisJ
bmV0aW5ldFxzY3RwX3NoYTEuaCBcDQorCW5ldGluZXRcc2N0cF9zdHJ1Y3RzLmggXA0KKwluZXRp
bmV0XHNjdHBfc3lzY3RsLmggXA0KKwluZXRpbmV0XHNjdHBfdGltZXIuaCBcDQorCW5ldGluZXRc
c2N0cF91aW8uaCBcDQorCW5ldGluZXRcc2N0cF92YXIuaCBcDQorCW5ldGluZXRcc2N0cHV0aWwu
aCBcDQorCW5ldGluZXQ2XHNjdHA2X3Zhci5oDQorDQordXNyc2N0cC5saWIgOiAkKHVzcnNjdHBf
T0JKRUNUUykNCisJbGliIC9vdXQ6dXNyc2N0cC5saWIgJChMSU5LRkxBR1MpICQodXNyc2N0cF9P
QkpFQ1RTKQ0KKw0KK3VzZXJfZW52aXJvbm1lbnQub2JqIDogdXNlcl9lbnZpcm9ubWVudC5jICQo
dXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgdXNlcl9lbnZp
cm9ubWVudC5jDQorDQordXNlcl9tYnVmLm9iaiAgOiB1c2VyX21idWYuYyAkKHVzcnNjdHBfSEVB
REVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfbWJ1Zi5jDQorDQordXNl
cl9yZWN2X3RocmVhZC5vYmo6IHVzZXJfcmVjdl90aHJlYWQuYyAkKHVzcnNjdHBfSEVBREVSUykN
CisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIHVzZXJfcmVjdl90aHJlYWQuYw0KKw0KK3Vz
ZXJfc29ja2V0Lm9iaiA6IHVzZXJfc29ja2V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQo
Q1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyB1c2VyX3NvY2tldC5jDQorDQorc2N0cF9hc2NvbmYub2Jq
IDogbmV0aW5ldFxzY3RwX2FzY29uZi5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJT
RExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX2FzY29uZi5jDQorDQorc2N0cF9hdXRoLm9i
aiA6IG5ldGluZXRcc2N0cF9hdXRoLmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNE
TEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfYXV0aC5jDQorDQorc2N0cF9ic2RfYWRkci5v
YmogOiBuZXRpbmV0XHNjdHBfYnNkX2FkZHIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChD
VkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF9ic2RfYWRkci5jDQorDQorc2N0cF9j
YWxsb3V0Lm9iaiA6IG5ldGluZXRcc2N0cF9jYWxsb3V0LmMgJCh1c3JzY3RwX0hFQURFUlMpDQor
CWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBuZXRpbmV0XHNjdHBfY2FsbG91dC5jDQorDQor
c2N0cF9jY19mdW5jdGlvbnMub2JqIDogbmV0aW5ldFxzY3RwX2NjX2Z1bmN0aW9ucy5jICQodXNy
c2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3Rw
X2NjX2Z1bmN0aW9ucy5jDQorDQorc2N0cF9jcmMzMi5vYmogOiBuZXRpbmV0XHNjdHBfY3JjMzIu
YyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGlu
ZXRcc2N0cF9jcmMzMi5jDQorDQorc2N0cF9pbmRhdGEub2JqIDogbmV0aW5ldFxzY3RwX2luZGF0
YS5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0
aW5ldFxzY3RwX2luZGF0YS5jDQorDQorc2N0cF9pbnB1dC5vYmogOiBuZXRpbmV0XHNjdHBfaW5w
dXQuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChDVkFSU0RMTCkgJChDRkxBR1MpIC1jIG5l
dGluZXRcc2N0cF9pbnB1dC5jDQorDQorc2N0cF9vdXRwdXQub2JqIDogbmV0aW5ldFxzY3RwX291
dHB1dC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMg
bmV0aW5ldFxzY3RwX291dHB1dC5jDQorDQorc2N0cF9wY2Iub2JqIDogbmV0aW5ldFxzY3RwX3Bj
Yi5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0
aW5ldFxzY3RwX3BjYi5jDQorDQorc2N0cF9wZWVsb2ZmLm9iaiA6IG5ldGluZXRcc2N0cF9wZWVs
b2ZmLmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBu
ZXRpbmV0XHNjdHBfcGVlbG9mZi5jDQorDQorc2N0cF9zaGExLm9iaiA6IG5ldGluZXRcc2N0cF9z
aGExLmMgJCh1c3JzY3RwX0hFQURFUlMpDQorCWNsICQoQ1ZBUlNETEwpICQoQ0ZMQUdTKSAtYyBu
ZXRpbmV0XHNjdHBfc2hhMS5jDQorDQorc2N0cF9zc19mdW5jdGlvbnMub2JqIDogbmV0aW5ldFxz
Y3RwX3NzX2Z1bmN0aW9ucy5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENWQVJTRExMKSAk
KENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3NzX2Z1bmN0aW9ucy5jDQorDQorc2N0cF9zeXNjdGwu
b2JqIDogbmV0aW5ldFxzY3RwX3N5c2N0bC5jICQodXNyc2N0cF9IRUFERVJTKQ0KKwljbCAkKENW
QVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3N5c2N0bC5jDQorDQorc2N0cF90aW1l
ci5vYmogOiBuZXRpbmV0XHNjdHBfdGltZXIuYyAkKHVzcnNjdHBfSEVBREVSUykNCisJY2wgJChD
VkFSU0RMTCkgJChDRkxBR1MpIC1jIG5ldGluZXRcc2N0cF90aW1lci5jDQorDQorc2N0cF91c2Vy
c3BhY2Uub2JqIDogbmV0aW5ldFxzY3RwX3VzZXJzcGFjZS5jICQodXNyc2N0cF9IRUFERVJTKQ0K
KwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzZXJzcGFjZS5jDQor
DQorc2N0cF91c3JyZXEub2JqIDogbmV0aW5ldFxzY3RwX3VzcnJlcS5jICQodXNyc2N0cF9IRUFE
RVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwX3VzcnJlcS5j
DQorDQorc2N0cHV0aWwub2JqIDogbmV0aW5ldFxzY3RwdXRpbC5jICQodXNyc2N0cF9IRUFERVJT
KQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldFxzY3RwdXRpbC5jDQorDQor
c2N0cDZfdXNycmVxLm9iaiA6IG5ldGluZXQ2XHNjdHA2X3VzcnJlcS5jICQodXNyc2N0cF9IRUFE
RVJTKQ0KKwljbCAkKENWQVJTRExMKSAkKENGTEFHUykgLWMgbmV0aW5ldDZcc2N0cDZfdXNycmVx
LmMNCisNCitjbGVhbjoNCisJZGVsICoub2JqDQorCWRlbCB1c3JzY3RwLmxpYg0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cC5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMy
ZTQ4YzUzOTEuLmY1YjFkODI4OTAyMzhiZWI4NDhkNWZhMTlmM2RiY2YwMjlkNzA3MDQgMTAwNzU1
Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwLmgKKysrIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHAuaApAQCAtMCwwICsxLDY2OCBAQAorLyotCisgKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAy
MDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhl
IG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9z
Y3RwLmggMzIzNjU3IDIwMTctMDktMTYgMjE6MjY6MDZaIHR1ZXhlbiAkIik7CisjZW5kaWYKKwor
I2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfSF8KKworI2lm
IChkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2Vu
ZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworCisjaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKyNkZWZpbmUgU0NUUF9QQUNLRUQgX19hdHRyaWJ1dGVfXygocGFja2Vk
KSkKKyNlbHNlCisjcHJhZ21hIHBhY2sgKHB1c2gsIDEpCisjZGVmaW5lIFNDVFBfUEFDS0VECisj
ZW5kaWYKKworLyoKKyAqIFNDVFAgcHJvdG9jb2wgLSBSRkM0OTYwLgorICovCitzdHJ1Y3Qgc2N0
cGhkciB7CisJdWludDE2X3Qgc3JjX3BvcnQ7CS8qIHNvdXJjZSBwb3J0ICovCisJdWludDE2X3Qg
ZGVzdF9wb3J0OwkvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisJdWludDMyX3Qgdl90YWc7CQkvKiB2
ZXJpZmljYXRpb24gdGFnIG9mIHBhY2tldCAqLworCXVpbnQzMl90IGNoZWNrc3VtOwkvKiBDUkMz
MkMgY2hlY2tzdW0gKi8KKwkvKiBjaHVua3MgZm9sbG93Li4uICovCit9IFNDVFBfUEFDS0VEOwor
CisvKgorICogU0NUUCBDaHVua3MKKyAqLworc3RydWN0IHNjdHBfY2h1bmtoZHIgeworCXVpbnQ4
X3QgY2h1bmtfdHlwZTsJLyogY2h1bmsgdHlwZSAqLworCXVpbnQ4X3QgY2h1bmtfZmxhZ3M7CS8q
IGNodW5rIGZsYWdzICovCisJdWludDE2X3QgY2h1bmtfbGVuZ3RoOwkvKiBjaHVuayBsZW5ndGgg
Ki8KKwkvKiBvcHRpb25hbCBwYXJhbXMgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCisvKgor
ICogU0NUUCBjaHVuayBwYXJhbWV0ZXJzCisgKi8KK3N0cnVjdCBzY3RwX3BhcmFtaGRyIHsKKwl1
aW50MTZfdCBwYXJhbV90eXBlOwkvKiBwYXJhbWV0ZXIgdHlwZSAqLworCXVpbnQxNl90IHBhcmFt
X2xlbmd0aDsJLyogcGFyYW1ldGVyIGxlbmd0aCAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyoKKyAq
IHVzZXIgc29ja2V0IG9wdGlvbnM6IHNvY2tldCBBUEkgZGVmaW5lZAorICovCisvKgorICogcmVh
ZC13cml0ZSBvcHRpb25zCisgKi8KKyNkZWZpbmUgU0NUUF9SVE9JTkZPCQkJMHgwMDAwMDAwMQor
I2RlZmluZSBTQ1RQX0FTU09DSU5GTwkJCTB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9JTklUTVNH
CQkJMHgwMDAwMDAwMworI2RlZmluZSBTQ1RQX05PREVMQVkJCQkweDAwMDAwMDA0CisjZGVmaW5l
IFNDVFBfQVVUT0NMT1NFCQkJMHgwMDAwMDAwNQorI2RlZmluZSBTQ1RQX1NFVF9QRUVSX1BSSU1B
UllfQUREUgkweDAwMDAwMDA2CisjZGVmaW5lIFNDVFBfUFJJTUFSWV9BRERSCQkweDAwMDAwMDA3
CisjZGVmaW5lIFNDVFBfQURBUFRBVElPTl9MQVlFUgkJMHgwMDAwMDAwOAorLyogc2FtZSBhcyBh
Ym92ZSAqLworI2RlZmluZSBTQ1RQX0FEQVBUSU9OX0xBWUVSCQkweDAwMDAwMDA4CisjZGVmaW5l
IFNDVFBfRElTQUJMRV9GUkFHTUVOVFMJCTB4MDAwMDAwMDkKKyNkZWZpbmUgU0NUUF9QRUVSX0FE
RFJfUEFSQU1TIAkJMHgwMDAwMDAwYQorI2RlZmluZSBTQ1RQX0RFRkFVTFRfU0VORF9QQVJBTQkJ
MHgwMDAwMDAwYgorLyogYW5jaWxsYXJ5IGRhdGEvbm90aWZpY2F0aW9uIGludGVyZXN0IG9wdGlv
bnMgKi8KKyNkZWZpbmUgU0NUUF9FVkVOVFMJCQkweDAwMDAwMDBjIC8qIGRlcHJlY2F0ZWQgKi8K
Ky8qIFdpdGhvdXQgdGhpcyBhcHBsaWVkIHdlIHdpbGwgZ2l2ZSBWNCBhbmQgVjYgYWRkcmVzc2Vz
IG9uIGEgVjYgc29ja2V0ICovCisjZGVmaW5lIFNDVFBfSV9XQU5UX01BUFBFRF9WNF9BRERSCTB4
MDAwMDAwMGQKKyNkZWZpbmUgU0NUUF9NQVhTRUcgCQkJMHgwMDAwMDAwZQorI2RlZmluZSBTQ1RQ
X0RFTEFZRURfU0FDSyAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgU0NUUF9GUkFH
TUVOVF9JTlRFUkxFQVZFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfUEFSVElBTF9E
RUxJVkVSWV9QT0lOVCAgICAgMHgwMDAwMDAxMQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAq
LworI2RlZmluZSBTQ1RQX0FVVEhfQ0hVTksgCQkweDAwMDAwMDEyCisjZGVmaW5lIFNDVFBfQVVU
SF9LRVkgCQkJMHgwMDAwMDAxMworI2RlZmluZSBTQ1RQX0hNQUNfSURFTlQgCQkweDAwMDAwMDE0
CisjZGVmaW5lIFNDVFBfQVVUSF9BQ1RJVkVfS0VZIAkJMHgwMDAwMDAxNQorI2RlZmluZSBTQ1RQ
X0FVVEhfREVMRVRFX0tFWSAJCTB4MDAwMDAwMTYKKyNkZWZpbmUgU0NUUF9VU0VfRVhUX1JDVklO
Rk8JCTB4MDAwMDAwMTcKKyNkZWZpbmUgU0NUUF9BVVRPX0FTQ09ORgkJMHgwMDAwMDAxOCAvKiBy
dyAqLworI2RlZmluZSBTQ1RQX01BWEJVUlNUCQkJMHgwMDAwMDAxOSAvKiBydyAqLworI2RlZmlu
ZSBTQ1RQX01BWF9CVVJTVAkJCTB4MDAwMDAwMTkgLyogcncgKi8KKy8qIGFzc29jIGxldmVsIGNv
bnRleHQgKi8KKyNkZWZpbmUgU0NUUF9DT05URVhUICAgICAgICAgICAgICAgICAgICAweDAwMDAw
MDFhIC8qIHJ3ICovCisvKiBleHBsaWNpdCBFT1Igc2lnbmFsbGluZyAqLworI2RlZmluZSBTQ1RQ
X0VYUExJQ0lUX0VPUiAgICAgICAgICAgICAgIDB4MDAwMDAwMWIKKyNkZWZpbmUgU0NUUF9SRVVT
RV9QT1JUICAgICAgICAgICAgICAgICAweDAwMDAwMDFjIC8qIHJ3ICovCisjZGVmaW5lIFNDVFBf
QVVUSF9ERUFDVElWQVRFX0tFWQkweDAwMDAwMDFkCisjZGVmaW5lIFNDVFBfRVZFTlQgICAgICAg
ICAgICAgICAgICAgICAgMHgwMDAwMDAxZQorI2RlZmluZSBTQ1RQX1JFQ1ZSQ1ZJTkZPICAgICAg
ICAgICAgICAgIDB4MDAwMDAwMWYKKyNkZWZpbmUgU0NUUF9SRUNWTlhUSU5GTyAgICAgICAgICAg
ICAgICAweDAwMDAwMDIwCisjZGVmaW5lIFNDVFBfREVGQVVMVF9TTkRJTkZPICAgICAgICAgICAg
MHgwMDAwMDAyMQorI2RlZmluZSBTQ1RQX0RFRkFVTFRfUFJJTkZPICAgICAgICAgICAgIDB4MDAw
MDAwMjIKKyNkZWZpbmUgU0NUUF9QRUVSX0FERFJfVEhMRFMgICAgICAgICAgICAweDAwMDAwMDIz
CisjZGVmaW5lIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVCAgICAgMHgwMDAwMDAyNAorI2Rl
ZmluZSBTQ1RQX0VDTl9TVVBQT1JURUQgICAgICAgICAgICAgIDB4MDAwMDAwMjUKKyNkZWZpbmUg
U0NUUF9QUl9TVVBQT1JURUQgICAgICAgICAgICAgICAweDAwMDAwMDI2CisjZGVmaW5lIFNDVFBf
QVVUSF9TVVBQT1JURUQgICAgICAgICAgICAgMHgwMDAwMDAyNworI2RlZmluZSBTQ1RQX0FTQ09O
Rl9TVVBQT1JURUQgICAgICAgICAgIDB4MDAwMDAwMjgKKyNkZWZpbmUgU0NUUF9SRUNPTkZJR19T
VVBQT1JURUQgICAgICAgICAweDAwMDAwMDI5CisjZGVmaW5lIFNDVFBfTlJTQUNLX1NVUFBPUlRF
RCAgICAgICAgICAgMHgwMDAwMDAzMAorI2RlZmluZSBTQ1RQX1BLVERST1BfU1VQUE9SVEVEICAg
ICAgICAgIDB4MDAwMDAwMzEKKyNkZWZpbmUgU0NUUF9NQVhfQ1dORCAgICAgICAgICAgICAgICAg
ICAweDAwMDAwMDMyCisKKy8qCisgKiByZWFkLW9ubHkgb3B0aW9ucworICovCisjZGVmaW5lIFND
VFBfU1RBVFVTCQkJMHgwMDAwMDEwMAorI2RlZmluZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTwkJ
MHgwMDAwMDEwMQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBTQ1RQX1BF
RVJfQVVUSF9DSFVOS1MgCQkweDAwMDAwMTAyCisjZGVmaW5lIFNDVFBfTE9DQUxfQVVUSF9DSFVO
S1MgCQkweDAwMDAwMTAzCisjZGVmaW5lIFNDVFBfR0VUX0FTU09DX05VTUJFUiAgICAgICAgICAg
MHgwMDAwMDEwNCAvKiBybyAqLworI2RlZmluZSBTQ1RQX0dFVF9BU1NPQ19JRF9MSVNUICAgICAg
ICAgIDB4MDAwMDAxMDUgLyogcm8gKi8KKyNkZWZpbmUgU0NUUF9USU1FT1VUUyAgICAgICAgICAg
ICAgICAgICAweDAwMDAwMTA2CisjZGVmaW5lIFNDVFBfUFJfU1RSRUFNX1NUQVRVUyAgICAgICAg
ICAgMHgwMDAwMDEwNworI2RlZmluZSBTQ1RQX1BSX0FTU09DX1NUQVRVUyAgICAgICAgICAgIDB4
MDAwMDAxMDgKKworLyoKKyAqIHVzZXIgc29ja2V0IG9wdGlvbnM6IEJTRCBpbXBsZW1lbnRhdGlv
biBzcGVjaWZpYworICovCisvKgorICogQmxvY2tpbmcgSS9PIGlzIGVuYWJsZWQgb24gYW55IFRD
UCB0eXBlIHNvY2tldCBieSBkZWZhdWx0LiBGb3IgdGhlIFVEUAorICogbW9kZWwgaWYgdGhpcyBp
cyB0dXJuZWQgb24gdGhlbiB0aGUgc29ja2V0IGJ1ZmZlciBpcyBzaGFyZWQgZm9yIHNlbmQKKyAq
IHJlc291cmNlcyBhbW9uZ3N0IGFsbCBhc3NvY2lhdGlvbnMuICBUaGUgZGVmYXVsdCBmb3IgdGhl
IFVEUCBtb2RlbCBpcyB0aGF0CisgKiBpcyBTU19OQklPIGlzIHNldC4gIFdoaWNoIG1lYW5zIGFs
bCBhc3NvY2lhdGlvbnMgaGF2ZSBhIHNlcGFyYXRlIHNlbmQKKyAqIGxpbWl0IEJVVCB0aGV5IHdp
bGwgTk9UIGV2ZXIgQkxPQ0sgaW5zdGVhZCB5b3Ugd2lsbCBnZXQgYW4gZXJyb3IgYmFjaworICog
RUFHQUlOIGlmIHlvdSB0cnkgdG8gc2VuZCB0b28gbXVjaC4gSWYgeW91IHdhbnQgdGhlIGJsb2Nr
aW5nIHNlbWFudGljcyB5b3UKKyAqIHNldCB0aGlzIG9wdGlvbiBhdCB0aGUgY29zdCBvZiBzaGFy
aW5nIG9uZSBzb2NrZXQgc2VuZCBidWZmZXIgc2l6ZSBhbW9uZ3N0CisgKiBhbGwgYXNzb2NpYXRp
b25zLiBQZWVsZWQgb2ZmIHNvY2tldHMgdHVybiB0aGlzIG9wdGlvbiBvZmYgYW5kIGJsb2NrLiBC
dXQKKyAqIHNpbmNlIGJvdGggVENQIGFuZCBwZWVsZWQgb2ZmIHNvY2tldHMgaGF2ZSBvbmx5IG9u
ZSBhc3NvYyBwZXIgc29ja2V0IHRoaXMKKyAqIGlzIGZpbmUuIEl0IHByb2JhYmx5IGRvZXMgTk9U
IG1ha2Ugc2Vuc2UgdG8gc2V0IHRoaXMgb24gU1NfTkJJTyBvbiBhIFRDUAorICogbW9kZWwgT1Ig
cGVlbGVkIG9mZiBVRFAgbW9kZWwsIGJ1dCB3ZSBkbyBhbGxvdyB5b3UgdG8gZG8gc28uIFlvdSBq
dXN0IHVzZQorICogdGhlIG5vcm1hbCBzeXNjYWxsIHRvIHRvZ2dsZSBTU19OQklPIHRoZSB3YXkg
eW91IHdhbnQuCisgKgorICogQmxvY2tpbmcgSS9PIGlzIGNvbnRyb2xsZWQgYnkgdGhlIFNTX05C
SU8gZmxhZyBvbiB0aGUgc29ja2V0IHN0YXRlIHNvX3N0YXRlCisgKiBmaWVsZC4KKyAqLworCisj
ZGVmaW5lIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNFVAkweDAwMDAwOTAwIC8qIHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlICovCisjZGVmaW5lIFNDVFBfUkVTRVRfU1RSRUFNUwkJMHgwMDAwMDkwMSAv
KiBzdHJ1Y3Qgc2N0cF9yZXNldF9zdHJlYW1zICovCisjZGVmaW5lIFNDVFBfUkVTRVRfQVNTT0MJ
CTB4MDAwMDA5MDIgLyogc2N0cF9hc3NvY190ICovCisjZGVmaW5lIFNDVFBfQUREX1NUUkVBTVMJ
CTB4MDAwMDA5MDMgLyogc3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgKi8KKworLyogRm9yIGVuYWJs
ZSBzdHJlYW0gcmVzZXQgKi8KKyNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfU1RSRUFNX1JFUSAJ
MHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0VOQUJMRV9SRVNFVF9BU1NPQ19SRVEgCTB4MDAwMDAw
MDIKKyNkZWZpbmUgU0NUUF9FTkFCTEVfQ0hBTkdFX0FTU09DX1JFUSAJMHgwMDAwMDAwNAorI2Rl
ZmluZSBTQ1RQX0VOQUJMRV9WQUxVRV9NQVNLCQkweDAwMDAwMDA3CisvKiBGb3IgcmVzZXQgc3Ry
ZWFtcyAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORwkweDAwMDAwMDAxCisj
ZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HCTB4MDAwMDAwMDIKKworCisvKiBoZXJl
IG9uIGRvd24gYXJlIG1vcmUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWMgKi8KKyNkZWZpbmUgU0NU
UF9TRVRfREVCVUdfTEVWRUwJCTB4MDAwMDEwMDUKKyNkZWZpbmUgU0NUUF9DTFJfU1RBVF9MT0cg
ICAgICAgICAgICAgICAweDAwMDAxMDA3CisvKiBDTVQgT04vT0ZGIHNvY2tldCBvcHRpb24gKi8K
KyNkZWZpbmUgU0NUUF9DTVRfT05fT0ZGICAgICAgICAgICAgICAgICAweDAwMDAxMjAwCisjZGVm
aW5lIFNDVFBfQ01UX1VTRV9EQUMgICAgICAgICAgICAgICAgMHgwMDAwMTIwMQorLyogSlJTIC0g
UGx1Z2dhYmxlIENvbmdlc3Rpb24gQ29udHJvbCBTb2NrZXQgb3B0aW9uICovCisjZGVmaW5lIFND
VFBfUExVR0dBQkxFX0NDICAgICAgICAgICAgICAgMHgwMDAwMTIwMgorLyogUlMgLSBQbHVnZ2Fi
bGUgU3RyZWFtIFNjaGVkdWxpbmcgU29ja2V0IG9wdGlvbiAqLworI2RlZmluZSBTQ1RQX1BMVUdH
QUJMRV9TUwkJMHgwMDAwMTIwMworI2RlZmluZSBTQ1RQX1NTX1ZBTFVFCQkJMHgwMDAwMTIwNAor
I2RlZmluZSBTQ1RQX0NDX09QVElPTgkJCTB4MDAwMDEyMDUgLyogT3B0aW9ucyBmb3IgQ0MgbW9k
dWxlcyAqLworLyogRm9yIEktREFUQSAqLworI2RlZmluZSBTQ1RQX0lOVEVSTEVBVklOR19TVVBQ
T1JURUQJMHgwMDAwMTIwNgorCisvKiByZWFkIG9ubHkgKi8KKyNkZWZpbmUgU0NUUF9HRVRfU05E
QlVGX1VTRQkJMHgwMDAwMTEwMQorI2RlZmluZSBTQ1RQX0dFVF9TVEFUX0xPRwkJMHgwMDAwMTEw
MworI2RlZmluZSBTQ1RQX1BDQl9TVEFUVVMJCQkweDAwMDAxMTA0CisjZGVmaW5lIFNDVFBfR0VU
X05PTkNFX1ZBTFVFUyAgICAgICAgICAgMHgwMDAwMTEwNQorCisKKy8qIFNwZWNpYWwgaG9vayBm
b3IgZHluYW1pY2FsbHkgc2V0dGluZyBwcmltYXJ5IGZvciBhbGwgYXNzb2MncywKKyAqIHRoaXMg
aXMgYSB3cml0ZSBvbmx5IG9wdGlvbiB0aGF0IHJlcXVpcmVzIHJvb3QgcHJpdmlsZWdlLgorICov
CisjZGVmaW5lIFNDVFBfU0VUX0RZTkFNSUNfUFJJTUFSWSAgICAgICAgMHgwMDAwMjAwMQorCisv
KiBWUkYgKHZpcnR1YWwgcm91dGVyIGZlYXR1cmUpIGFuZCBtdWx0aS1WUkYgc3VwcG9ydAorICog
b3B0aW9ucy4gVlJGJ3MgcHJvdmlkZSBzcGxpdHMgd2l0aGluIGEgcm91dGVyCisgKiB0aGF0IGdp
dmUgdGhlIHZpZXdzIG9mIG11bHRpcGxlIHJvdXRlcnMuIEEKKyAqIHN0YW5kYXJkIGhvc3QsIHdp
dGhvdXQgVlJGIHN1cHBvcnQsIGlzIGp1c3QKKyAqIGEgc2luZ2xlIFZSRi4gSWYgVlJGJ3MgYXJl
IHN1cHBvcnRlZCB0aGVuCisgKiB0aGUgdHJhbnNwb3J0IG11c3QgYmUgVlJGIGF3YXJlLiBUaGlz
IG1lYW5zCisgKiB0aGF0IGV2ZXJ5IHNvY2tldCBjYWxsIGNvbWluZyBpbiBtdXN0IGJlIGRpcmVj
dGVkCisgKiB3aXRoaW4gdGhlIGVuZHBvaW50IHRvIG9uZSBvZiB0aGUgVlJGJ3MgaXQgYmVsb25n
cworICogdG8uIFRoZSBlbmRwb2ludCwgYmVmb3JlIGJpbmRpbmcsIG1heSBzZWxlY3QKKyAqIHRo
ZSAiZGVmYXVsdCIgVlJGIGl0IGlzIGluIGJ5IHVzaW5nIGEgc2V0IHNvY2tldAorICogb3B0aW9u
IHdpdGggU0NUUF9WUkZfSUQuIFRoaXMgd2lsbCBhbHNvCisgKiBnZXQgcHJvcGFnYXRlZCB0byB0
aGUgZGVmYXVsdCBWUkYuIE9uY2UgdGhlCisgKiBlbmRwb2ludCBiaW5kcyBhbiBhZGRyZXNzIHRo
ZW4gaXQgQ0FOTk9UIGFkZAorICogYWRkaXRpb25hbCBWUkYncyB0byBiZWNvbWUgYSBNdWx0aS1W
UkYgZW5kcG9pbnQuCisgKgorICogQmVmb3JlIEJJTkRJTkcgYWRkaXRpb25hbCBWUkYncyBjYW4g
YmUgYWRkZWQgd2l0aAorICogdGhlIFNDVFBfQUREX1ZSRl9JRCBjYWxsIG9yIGRlbGV0ZWQgd2l0
aAorICogU0NUUF9ERUxfVlJGX0lELgorICoKKyAqIEFzc29jaWF0aW9ucyBhcmUgQUxXQVlTIGNv
bnRhaW5lZCBpbnNpZGUgYSBzaW5nbGUKKyAqIFZSRi4gVGhleSBjYW5ub3QgcmVzaWRlIGluIHR3
byAob3IgbW9yZSkgVlJGJ3MuIEluY29taW5nCisgKiBwYWNrZXRzLCBhc3N1bWluZyB0aGUgcm91
dGVyIGlzIFZSRiBhd2FyZSwgY2FuIGFsd2F5cworICogdGVsbCB1cyB3aGF0IFZSRiB0aGV5IGFy
cml2ZWQgb24uIEEgaG9zdCBub3Qgc3VwcG9ydGluZworICogYW55IFZSRidzIHdpbGwgZmluZCB0
aGF0IHRoZSBwYWNrZXRzIGFsd2F5cyBhcnJpdmVkIG9uIHRoZQorICogc2luZ2xlIFZSRiB0aGF0
IHRoZSBob3N0IGhhcy4KKyAqCisgKi8KKworI2RlZmluZSBTQ1RQX1ZSRl9JRAkJCTB4MDAwMDMw
MDEKKyNkZWZpbmUgU0NUUF9BRERfVlJGX0lECQkJMHgwMDAwMzAwMgorI2RlZmluZSBTQ1RQX0dF
VF9WUkZfSURTCQkweDAwMDAzMDAzCisjZGVmaW5lIFNDVFBfR0VUX0FTT0NfVlJGICAgICAgICAg
ICAgICAgMHgwMDAwMzAwNAorI2RlZmluZSBTQ1RQX0RFTF9WUkZfSUQgICAgICAgICAgICAgICAg
IDB4MDAwMDMwMDUKKworLyoKKyAqIElmIHlvdSBlbmFibGUgcGFja2V0IGxvZ2dpbmcgeW91IGNh
biBnZXQKKyAqIGEgcG9vciBtYW5zIGV0aGVyZWFsIG91dHB1dCBpbiBiaW5hcnkKKyAqIGZvcm0u
IE5vdGUgdGhpcyBpcyBhIGNvbXBpbGUgb3B0aW9uIHRvCisgKiB0aGUga2VybmVsLCAgU0NUUF9Q
QUNLRVRfTE9HR0lORywgYW5kCisgKiB3aXRob3V0IGl0IGluIHlvdXIga2VybmVsIHlvdQorICog
d2lsbCBnZXQgYSBFT1BOT1RTVVBQCisgKi8KKyNkZWZpbmUgU0NUUF9HRVRfUEFDS0VUX0xPRyAg
ICAgICAgICAgICAweDAwMDA0MDAxCisKKy8qCisgKiBoaWRkZW4gaW1wbGVtZW50YXRpb24gc3Bl
Y2lmaWMgb3B0aW9ucyB0aGVzZSBhcmUgTk9UIHVzZXIgdmlzaWJsZSAoc2hvdWxkCisgKiBtb3Zl
IG91dCBvZiBzY3RwLmgpCisgKi8KKy8qIHNjdHBfYmluZHgoKSBmbGFncyBhcyBoaWRkZW4gc29j
a2V0IG9wdGlvbnMgKi8KKyNkZWZpbmUgU0NUUF9CSU5EWF9BRERfQUREUgkJMHgwMDAwODAwMQor
I2RlZmluZSBTQ1RQX0JJTkRYX1JFTV9BRERSCQkweDAwMDA4MDAyCisvKiBIaWRkZW4gc29ja2V0
IG9wdGlvbiB0aGF0IGdldHMgdGhlIGFkZHJlc3NlcyAqLworI2RlZmluZSBTQ1RQX0dFVF9QRUVS
X0FERFJFU1NFUwkJMHgwMDAwODAwMworI2RlZmluZSBTQ1RQX0dFVF9MT0NBTF9BRERSRVNTRVMJ
MHgwMDAwODAwNAorLyogcmV0dXJuIHRoZSB0b3RhbCBjb3VudCBpbiBieXRlcyBuZWVkZWQgdG8g
aG9sZCBhbGwgbG9jYWwgYWRkcmVzc2VzIGJvdW5kICovCisjZGVmaW5lIFNDVFBfR0VUX0xPQ0FM
X0FERFJfU0laRQkweDAwMDA4MDA1CisvKiBSZXR1cm4gdGhlIHRvdGFsIGNvdW50IGluIGJ5dGVz
IG5lZWRlZCB0byBob2xkIHRoZSByZW1vdGUgYWRkcmVzcyAqLworI2RlZmluZSBTQ1RQX0dFVF9S
RU1PVEVfQUREUl9TSVpFCTB4MDAwMDgwMDYKKy8qIGhpZGRlbiBvcHRpb24gZm9yIGNvbm5lY3R4
ICovCisjZGVmaW5lIFNDVFBfQ09OTkVDVF9YCQkJMHgwMDAwODAwNworLyogaGlkZGVuIG9wdGlv
biBmb3IgY29ubmVjdHhfZGVsYXllZCwgcGFydCBvZiBzZW5keCAqLworI2RlZmluZSBTQ1RQX0NP
Tk5FQ1RfWF9ERUxBWUVECQkweDAwMDA4MDA4CisjZGVmaW5lIFNDVFBfQ09OTkVDVF9YX0NPTVBM
RVRFICAgICAgICAgMHgwMDAwODAwOQorLyogaGlkZGVuIHNvY2tldCBvcHRpb24gYmFzZWQgc2N0
cF9wZWVsb2ZmICovCisjZGVmaW5lIFNDVFBfUEVFTE9GRiAgICAgICAgICAgICAgICAgICAgMHgw
MDAwODAwYQorLyogdGhlIHJlYWwgd29ya2VyIGZvciBzY3RwX2dldGFkZHJsZW4oKSAqLworI2Rl
ZmluZSBTQ1RQX0dFVF9BRERSX0xFTiAgICAgICAgICAgICAgIDB4MDAwMDgwMGIKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKy8qIHRlbXBvcmFyeSB3b3JrYXJvdW5kIGZvciBBcHBsZSBsaXN0ZW4o
KSBpc3N1ZSwgbm8gYXJncyB1c2VkICovCisjZGVmaW5lIFNDVFBfTElTVEVOX0ZJWAkJCTB4MDAw
MDgwMGMKKyNlbmRpZgorI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisvKiB3b3JrYXJvdW5kIGZv
ciBDeWd3aW4gb24gV2luZG93czogcmV0dXJucyB0aGUgU09DS0VUIGhhbmRsZSAqLworI2RlZmlu
ZSBTQ1RQX0dFVF9IQU5ETEUJCQkweDAwMDA4MDBkCisjZW5kaWYKKy8qIERlYnVnIHRoaW5ncyB0
aGF0IG5lZWQgdG8gYmUgcHVyZ2VkICovCisjZGVmaW5lIFNDVFBfU0VUX0lOSVRJQUxfREJHX1NF
UQkweDAwMDA5ZjAwCisKKy8qIEpSUyAtIFN1cHBvcnRlZCBjb25nZXN0aW9uIGNvbnRyb2wgbW9k
dWxlcyBmb3IgcGx1Z2dhYmxlCisgKiBjb25nZXN0aW9uIGNvbnRyb2wKKyAqLworLyogU3RhbmRh
cmQgVENQIENvbmdlc3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX1JGQzI1ODEJCTB4
MDAwMDAwMDAKKy8qIEhpZ2ggU3BlZWQgVENQIENvbmdlc3Rpb24gQ29udHJvbCAoRmxveWQpICov
CisjZGVmaW5lIFNDVFBfQ0NfSFNUQ1AJCTB4MDAwMDAwMDEKKy8qIEhUQ1AgQ29uZ2VzdGlvbiBD
b250cm9sICovCisjZGVmaW5lIFNDVFBfQ0NfSFRDUAkJMHgwMDAwMDAwMgorLyogUlRDQyBDb25n
ZXN0aW9uIENvbnRyb2wgLSBSRkMyNTgxIHBsdXMgKi8KKyNkZWZpbmUgU0NUUF9DQ19SVENDICAg
ICAgICAgICAgMHgwMDAwMDAwMworCisjZGVmaW5lIFNDVFBfQ0NfT1BUX1JUQ0NfU0VUTU9ERQkw
eDAwMDAyMDAwCisjZGVmaW5lIFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDTgkweDAwMDAyMDAxCisj
ZGVmaW5lIFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQICAgICAgICAgMHgwMDAwMjAwMgorCisjZGVm
aW5lIFNDVFBfQ01UX09GRiAgICAgICAgICAgIDAKKyNkZWZpbmUgU0NUUF9DTVRfQkFTRSAgICAg
ICAgICAgMQorI2RlZmluZSBTQ1RQX0NNVF9SUFYxICAgICAgICAgICAyCisjZGVmaW5lIFNDVFBf
Q01UX1JQVjIgICAgICAgICAgIDMKKyNkZWZpbmUgU0NUUF9DTVRfTVBUQ1AgICAgICAgICAgNAor
I2RlZmluZSBTQ1RQX0NNVF9NQVggICAgICAgICAgICBTQ1RQX0NNVF9NUFRDUAorCisvKiBSUyAt
IFN1cHBvcnRlZCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGVzIGZvciBwbHVnZ2FibGUKKyAqIHN0
cmVhbSBzY2hlZHVsaW5nCisgKi8KKy8qIERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluICovCisj
ZGVmaW5lIFNDVFBfU1NfREVGQVVMVAkJCTB4MDAwMDAwMDAKKy8qIFJlYWwgcm91bmQtcm9iaW4g
Ki8KKyNkZWZpbmUgU0NUUF9TU19ST1VORF9ST0JJTgkJMHgwMDAwMDAwMQorLyogUmVhbCByb3Vu
ZC1yb2JpbiBwZXIgcGFja2V0ICovCisjZGVmaW5lIFNDVFBfU1NfUk9VTkRfUk9CSU5fUEFDS0VU
CTB4MDAwMDAwMDIKKy8qIFByaW9yaXR5ICovCisjZGVmaW5lIFNDVFBfU1NfUFJJT1JJVFkJCTB4
MDAwMDAwMDMKKy8qIEZhaXIgQmFuZHdpZHRoICovCisjZGVmaW5lIFNDVFBfU1NfRkFJUl9CQU5E
V0lUSAkJMHgwMDAwMDAwNAorLyogRmlyc3QtY29tZSwgZmlyc3Qtc2VydmUgKi8KKyNkZWZpbmUg
U0NUUF9TU19GSVJTVF9DT01FCQkweDAwMDAwMDA1CisKKworLyogZnJhZ21lbnQgaW50ZXJsZWF2
ZSBjb25zdGFudHMKKyAqIHNldHRpbmcgbXVzdCBiZSBvbmUgb2YgdGhlc2Ugb3IKKyAqIEVJTlZB
TCByZXR1cm5lZC4KKyAqLworI2RlZmluZSBTQ1RQX0ZSQUdfTEVWRUxfMCAgICAweDAwMDAwMDAw
CisjZGVmaW5lIFNDVFBfRlJBR19MRVZFTF8xICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9G
UkFHX0xFVkVMXzIgICAgMHgwMDAwMDAwMgorCisvKgorICogdXNlciBzdGF0ZSB2YWx1ZXMKKyAq
LworI2RlZmluZSBTQ1RQX0NMT1NFRAkJCTB4MDAwMAorI2RlZmluZSBTQ1RQX0JPVU5ECQkJMHgx
MDAwCisjZGVmaW5lIFNDVFBfTElTVEVOCQkJMHgyMDAwCisjZGVmaW5lIFNDVFBfQ09PS0lFX1dB
SVQJCTB4MDAwMgorI2RlZmluZSBTQ1RQX0NPT0tJRV9FQ0hPRUQJCTB4MDAwNAorI2RlZmluZSBT
Q1RQX0VTVEFCTElTSEVECQkweDAwMDgKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9TRU5UCQkweDAw
MTAKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9SRUNFSVZFRAkJMHgwMDIwCisjZGVmaW5lIFNDVFBf
U0hVVERPV05fQUNLX1NFTlQJCTB4MDA0MAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1BFTkRJTkcJ
CTB4MDA4MAorCisvKgorICogU0NUUCBvcGVyYXRpb25hbCBlcnJvciBjb2RlcyAodXNlciB2aXNp
YmxlKQorICovCisjZGVmaW5lIFNDVFBfQ0FVU0VfTk9fRVJST1IJCTB4MDAwMAorI2RlZmluZSBT
Q1RQX0NBVVNFX0lOVkFMSURfU1RSRUFNCTB4MDAwMQorI2RlZmluZSBTQ1RQX0NBVVNFX01JU1NJ
TkdfUEFSQU0JMHgwMDAyCisjZGVmaW5lIFNDVFBfQ0FVU0VfU1RBTEVfQ09PS0lFCQkweDAwMDMK
KyNkZWZpbmUgU0NUUF9DQVVTRV9PVVRfT0ZfUkVTQwkJMHgwMDA0CisjZGVmaW5lIFNDVFBfQ0FV
U0VfVU5SRVNPTFZBQkxFX0FERFIJMHgwMDA1CisjZGVmaW5lIFNDVFBfQ0FVU0VfVU5SRUNPR19D
SFVOSwkweDAwMDYKKyNkZWZpbmUgU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNCTB4MDAwNworI2Rl
ZmluZSBTQ1RQX0NBVVNFX1VOUkVDT0dfUEFSQU0JMHgwMDA4CisjZGVmaW5lIFNDVFBfQ0FVU0Vf
Tk9fVVNFUl9EQVRBCQkweDAwMDkKKyNkZWZpbmUgU0NUUF9DQVVTRV9DT09LSUVfSU5fU0hVVERP
V04JMHgwMDBhCisjZGVmaW5lIFNDVFBfQ0FVU0VfUkVTVEFSVF9XX05FV0FERFIJMHgwMDBiCisj
ZGVmaW5lIFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJUCTB4MDAwYworI2RlZmluZSBTQ1RQ
X0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTgkweDAwMGQKKworLyogRXJyb3IgY2F1c2VzIGZyb20g
UkZDNTA2MSAqLworI2RlZmluZSBTQ1RQX0NBVVNFX0RFTEVUSU5HX0xBU1RfQUREUgkweDAwYTAK
KyNkZWZpbmUgU0NUUF9DQVVTRV9SRVNPVVJDRV9TSE9SVEFHRQkweDAwYTEKKyNkZWZpbmUgU0NU
UF9DQVVTRV9ERUxFVElOR19TUkNfQUREUgkweDAwYTIKKyNkZWZpbmUgU0NUUF9DQVVTRV9JTExF
R0FMX0FTQ09ORl9BQ0sJMHgwMGEzCisjZGVmaW5lIFNDVFBfQ0FVU0VfUkVRVUVTVF9SRUZVU0VE
CTB4MDBhNAorCisvKiBFcnJvciBjYXVzZXMgZnJvbSBuYXQtZHJhZnQgKi8KKyNkZWZpbmUgU0NU
UF9DQVVTRV9OQVRfQ09MTElESU5HX1NUQVRFICAweDAwYjAKKyNkZWZpbmUgU0NUUF9DQVVTRV9O
QVRfTUlTU0lOR19TVEFURSAgICAweDAwYjEKKworLyogRXJyb3IgY2F1c2VzIGZyb20gUkZDNDg5
NSAqLworI2RlZmluZSBTQ1RQX0NBVVNFX1VOU1VQUE9SVEVEX0hNQUNJRAkweDAxMDUKKworLyoK
KyAqIGVycm9yIGNhdXNlIHBhcmFtZXRlcnMgKHVzZXIgdmlzaWJsZSkKKyAqLworc3RydWN0IHNj
dHBfZ2VuX2Vycm9yX2NhdXNlIHsKKwl1aW50MTZfdCBjb2RlOworCXVpbnQxNl90IGxlbmd0aDsK
Kwl1aW50OF90IGluZm9bXTsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX2Nh
dXNlIHsKKwl1aW50MTZfdCBjb2RlOworCXVpbnQxNl90IGxlbmd0aDsKKwkvKiBvcHRpb25hbCBj
YXVzZS1zcGVjaWZpYyBpbmZvIG1heSBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVj
dCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFtIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBj
YXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX0lOVkFMSURfU1RSRUFNICovCisJdWludDE2X3Qgc3Ry
ZWFtX2lkOwkvKiBzdHJlYW0gaWQgb2YgdGhlIERBVEEgaW4gZXJyb3IgKi8KKwl1aW50MTZfdCBy
ZXNlcnZlZDsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX21pc3NpbmdfcGFy
YW0geworCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0Vf
TUlTU0lOR19QQVJBTSAqLworCXVpbnQzMl90IG51bV9taXNzaW5nX3BhcmFtczsJLyogbnVtYmVy
IG9mIG1pc3NpbmcgcGFyYW1ldGVycyAqLworCXVpbnQxNl90IHR5cGVbXTsKK30gU0NUUF9QQUNL
RUQ7CisKK3N0cnVjdCBzY3RwX2Vycm9yX3N0YWxlX2Nvb2tpZSB7CisJc3RydWN0IHNjdHBfZXJy
b3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9TVEFMRV9DT09LSUUgKi8KKwl1aW50
MzJfdCBzdGFsZV90aW1lOwkvKiB0aW1lIGluIHVzZWMgb2Ygc3RhbGVuZXNzICovCit9IFNDVFBf
UEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9lcnJvcl9vdXRfb2ZfcmVzb3VyY2UgeworCXN0cnVjdCBz
Y3RwX2Vycm9yX2NhdXNlIGNhdXNlOwkvKiBjb2RlPVNDVFBfQ0FVU0VfT1VUX09GX1JFU09VUkNF
UyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfdW5yZXNvbHZfYWRkciB7
CisJc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgY2F1c2U7CS8qIGNvZGU9U0NUUF9DQVVTRV9VTlJF
U09MVkFCTEVfQUREUiAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfZXJyb3JfdW5y
ZWNvZ25pemVkX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVzZTsJLyogY29k
ZT1TQ1RQX0NBVVNFX1VOUkVDT0dfQ0hVTksgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsv
KiBoZWFkZXIgZnJvbSBjaHVuayBpbiBlcnJvciAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0
IHNjdHBfZXJyb3Jfbm9fdXNlcl9kYXRhIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSBjYXVz
ZTsJLyogY29kZT1TQ1RQX0NBVVNFX05PX1VTRVJfREFUQSAqLworCXVpbnQzMl90IHRzbjsJCQkv
KiBUU04gb2YgdGhlIGVtcHR5IGRhdGEgY2h1bmsgKi8KK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVj
dCBzY3RwX2Vycm9yX2F1dGhfaW52YWxpZF9obWFjIHsKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVz
ZSBjYXVzZTsJLyogY29kZT1TQ1RQX0NBVVNFX1VOU1VQUE9SVEVEX0hNQUNJRCAqLworCXVpbnQx
Nl90IGhtYWNfaWQ7Cit9IFNDVFBfUEFDS0VEOworCisvKgorICogTWFpbiBTQ1RQIGNodW5rIHR5
cGVzIHdlIHBsYWNlIHRoZXNlIGhlcmUgc28gbmF0ZCBhbmQgZi93J3MgaW4gdXNlciBsYW5kCisg
KiBjYW4gZmluZCB0aGVtLgorICovCisvKioqKioqKioqKioqMHgwMCBzZXJpZXMgKioqKioqKioq
KiovCisjZGVmaW5lIFNDVFBfREFUQQkJMHgwMAorI2RlZmluZSBTQ1RQX0lOSVRJQVRJT04JCTB4
MDEKKyNkZWZpbmUgU0NUUF9JTklUSUFUSU9OX0FDSwkweDAyCisjZGVmaW5lIFNDVFBfU0VMRUNU
SVZFX0FDSwkweDAzCisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1QJMHgwNAorI2RlZmlu
ZSBTQ1RQX0hFQVJUQkVBVF9BQ0sJMHgwNQorI2RlZmluZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9O
CTB4MDYKKyNkZWZpbmUgU0NUUF9TSFVURE9XTgkJMHgwNworI2RlZmluZSBTQ1RQX1NIVVRET1dO
X0FDSwkweDA4CisjZGVmaW5lIFNDVFBfT1BFUkFUSU9OX0VSUk9SCTB4MDkKKyNkZWZpbmUgU0NU
UF9DT09LSUVfRUNITwkweDBhCisjZGVmaW5lIFNDVFBfQ09PS0lFX0FDSwkJMHgwYgorI2RlZmlu
ZSBTQ1RQX0VDTl9FQ0hPCQkweDBjCisjZGVmaW5lIFNDVFBfRUNOX0NXUgkJMHgwZAorI2RlZmlu
ZSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFCTB4MGUKKy8qIFJGQzQ4OTUgKi8KKyNkZWZpbmUgU0NU
UF9BVVRIRU5USUNBVElPTiAgICAgMHgwZgorLyogRVkgbnJfc2FjayBjaHVuayBpZCovCisjZGVm
aW5lIFNDVFBfTlJfU0VMRUNUSVZFX0FDSwkweDEwCisvKioqKioqKioqKioqMHg0MCBzZXJpZXMg
KioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfSURBVEEJCTB4NDAKKy8qKioqKioqKioqKioweDgw
IHNlcmllcyAqKioqKioqKioqKi8KKy8qIFJGQzUwNjEgKi8KKyNkZWZpbmUJU0NUUF9BU0NPTkZf
QUNLCQkweDgwCisvKiBkcmFmdC1pZXRmLXN0ZXdhcnQtcGt0ZHJwc2N0cCAqLworI2RlZmluZSBT
Q1RQX1BBQ0tFVF9EUk9QUEVECTB4ODEKKy8qIGRyYWZ0LWlldGYtc3Rld2FydC1zdHJyZXNldC14
eHggKi8KKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVQgICAgICAgMHg4MgorCisvKiBSRkM0ODIw
ICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNDVFBfUEFEX0NIVU5LICAgICAg
ICAgIDB4ODQKKy8qKioqKioqKioqKioweGMwIHNlcmllcyAqKioqKioqKioqKi8KKy8qIFJGQzM3
NTggKi8KKyNkZWZpbmUgU0NUUF9GT1JXQVJEX0NVTV9UU04JMHhjMAorLyogUkZDNTA2MSAqLwor
I2RlZmluZSBTQ1RQX0FTQ09ORgkJMHhjMQorI2RlZmluZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU04J
MHhjMgorCisvKiBBQk9SVCBhbmQgU0hVVERPV04gQ09NUExFVEUgRkxBRyAqLworI2RlZmluZSBT
Q1RQX0hBRF9OT19UQ0IJCTB4MDEKKworLyogUGFja2V0IGRyb3BwZWQgZmxhZ3MgKi8KKyNkZWZp
bmUgU0NUUF9GUk9NX01JRERMRV9CT1gJU0NUUF9IQURfTk9fVENCCisjZGVmaW5lIFNDVFBfQkFE
Q1JDCQkweDAyCisjZGVmaW5lIFNDVFBfUEFDS0VUX1RSVU5DQVRFRAkweDA0CisKKy8qIEZsYWcg
Zm9yIEVDTiAtQ1dSICovCisjZGVmaW5lIFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERSAweDAxCisj
ZGVmaW5lIFNDVFBfQ1dSX0lOX1NBTUVfV0lORE9XICAweDAyCisKKyNkZWZpbmUgU0NUUF9TQVRf
TkVUV09SS19NSU4JNDAwCS8qIG1pbiBtcyBmb3IgUlRUIHRvIHNldCBzYXRlbGxpdGUKKwkJCQkJ
ICogdGltZSAqLworI2RlZmluZSBTQ1RQX1NBVF9ORVRXT1JLX0JVUlNUX0lOQ1IgIDIJLyogaG93
IG1hbnkgdGltZXMgdG8gbXVsdGlwbHkgbWF4YnVyc3QKKwkJCQkJICogaW4gc2F0ICovCisKKy8q
IERhdGEgQ2h1Y2sgU3BlY2lmaWMgRmxhZ3MgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX0ZSQUdfTUFT
SyAgICAgICAgMHgwMworI2RlZmluZSBTQ1RQX0RBVEFfTUlERExFX0ZSQUcgICAgICAweDAwCisj
ZGVmaW5lIFNDVFBfREFUQV9MQVNUX0ZSQUcgICAgICAgIDB4MDEKKyNkZWZpbmUgU0NUUF9EQVRB
X0ZJUlNUX0ZSQUcgICAgICAgMHgwMgorI2RlZmluZSBTQ1RQX0RBVEFfTk9UX0ZSQUcgICAgICAg
ICAweDAzCisjZGVmaW5lIFNDVFBfREFUQV9VTk9SREVSRUQgICAgICAgIDB4MDQKKyNkZWZpbmUg
U0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFkgMHgwOAorLyogRUNOIE5vbmNlOiBTQUNLIENodW5r
IFNwZWNpZmljIEZsYWdzICovCisjZGVmaW5lIFNDVFBfU0FDS19OT05DRV9TVU0gICAgICAgIDB4
MDEKKworLyogQ01UIERBQyBhbGdvcml0aG0gU0FDSyBmbGFnICovCisjZGVmaW5lIFNDVFBfU0FD
S19DTVRfREFDICAgICAgICAgIDB4ODAKKworLyoKKyAqIFBDQiBmbGFncyAoaW4gc2N0cF9mbGFn
cyBiaXRtYXNrKS4KKyAqIE5vdGUgdGhlIGZlYXR1cmVzIGFuZCBmbGFncyBhcmUgbWVhbnQKKyAq
IGZvciB1c2UgYnkgbmV0c3RhdC4KKyAqLworI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19VRFBUWVBF
CQkweDAwMDAwMDAxCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUJCTB4MDAwMDAwMDIK
KyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwJCTB4MDAwMDAwMDQKKyNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfQUNDRVBUSU5HCTB4MDAwMDAwMDgKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1Nf
VU5CT1VORAkJMHgwMDAwMDAxMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCAgICAg
ICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfV0FTX0NPTk5FQ1RFRCAgICAw
eDAwMDgwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1dBU19BQk9SVEVEICAgICAgMHgwMDEw
MDAwMAorLyogVENQIG1vZGVsIHN1cHBvcnQgKi8KKworI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19D
T05ORUNURUQJMHgwMDIwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MCTB4
MDA0MDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFCTB4MDA4MDAwMDAKKyNk
ZWZpbmUgU0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVAkweDAxMDAwMDAwCisjZGVmaW5lIFNDVFBf
UENCX0ZMQUdTX1dBS0VJTlBVVAkweDAyMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JP
VU5EX1Y2CQkweDA0MDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0JMT0NLSU5HX0lPCTB4
MDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUJMHgxMDAwMDAwMAor
I2RlZmluZSBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORQkweDIwMDAwMDAwCisjZGVmaW5l
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9DQU5UX1JFQUQJMHg0MDAwMDAwMAorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTiAgICAgICAw
eDgwMDAwMDAwCisKKy8qIGZsYWdzIHRvIGNvcHkgdG8gbmV3IFBDQiAqLworI2RlZmluZSBTQ1RQ
X1BDQl9DT1BZX0ZMQUdTCQkoU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEx8XAorCQkJCQkgU0NUUF9Q
Q0JfRkxBR1NfV0FLRUlOUFVUfFwKKwkJCQkJIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2fFwKKwkJ
CQkJIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pCisjZWxzZQorCisvKiBmbGFncyB0byBjb3B5
IHRvIG5ldyBQQ0IgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfQ09QWV9GTEFHUwkJKFNDVFBfUENCX0ZM
QUdTX0JPVU5EQUxMfFwKKwkJCQkJIFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVHxcCisJCQkJCSBT
Q1RQX1BDQl9GTEFHU19CT1VORF9WNikKKyNlbmRpZgorCisvKgorICogUENCIEZlYXR1cmVzIChp
biBzY3RwX2ZlYXR1cmVzIGJpdG1hc2spCisgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRE9f
Tk9UX1BNVFVEICAgICAgMHgwMDAwMDAwMDAwMDAwMDAxCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdT
X0VYVF9SQ1ZJTkZPICAgICAgIDB4MDAwMDAwMDAwMDAwMDAwMiAvKiBkZXByZWNhdGVkICovCisj
ZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCAgIDB4MDAwMDAwMDAwMDAwMDAw
NAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUgICAweDAwMDAwMDAwMDAw
MDAwMDgKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyAgMHgwMDAwMDAw
MDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORiAgICAgICAgIDB4MDAw
MDAwMDAwMDAwMDAyMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORiAgICAgICAw
eDAwMDAwMDAwMDAwMDAwNDAKKy8qIHNvY2tldCBvcHRpb25zICovCisjZGVmaW5lIFNDVFBfUENC
X0ZMQUdTX05PREVMQVkgICAgICAgICAgIDB4MDAwMDAwMDAwMDAwMDEwMAorI2RlZmluZSBTQ1RQ
X1BDQl9GTEFHU19BVVRPQ0xPU0UgICAgICAgICAweDAwMDAwMDAwMDAwMDAyMDAKKyNkZWZpbmUg
U0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VWTlQgICAgMHgwMDAwMDAwMDAwMDAwNDAwIC8qIGRl
cHJlY2F0ZWQgKi8KKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVkFTU09DRVZOVCAgICAgMHgw
MDAwMDAwMDAwMDAwODAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQgICAg
IDB4MDAwMDAwMDAwMDAwMTAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19SRUNWUEVFUkVSUiAg
ICAgICAweDAwMDAwMDAwMDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRG
QUlMRVZOVCAgMHgwMDAwMDAwMDAwMDA0MDAwIC8qIGRlcHJlY2F0ZWQgKi8KKyNkZWZpbmUgU0NU
UF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCAgMHgwMDAwMDAwMDAwMDA4MDAwCisjZGVmaW5l
IFNDVFBfUENCX0ZMQUdTX0FEQVBUQVRJT05FVk5UICAgIDB4MDAwMDAwMDAwMDAxMDAwMAorI2Rl
ZmluZSBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQgICAgICAgICAweDAwMDAwMDAwMDAwMjAwMDAK
KyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfQVVUSEVWTlQgICAgICAgICAgMHgwMDAwMDAwMDAwMDQw
MDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQgIDB4MDAwMDAwMDAw
MDA4MDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19OT19GUkFHTUVOVCAgICAgICAweDAwMDAw
MDAwMDAxMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SICAgICAgMHgw
MDAwMDAwMDAwNDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBFRF9WNCAg
IDB4MDAwMDAwMDAwMDgwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NP
TkZTICAweDAwMDAwMDAwMDEwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNF
ICAgICAgICAgMHgwMDAwMDAwMDAyMDAwMDAwCisjZGVmaW5lIFNDVFBfUENCX0ZMQUdTX0RSWUVW
TlQgICAgICAgICAgIDB4MDAwMDAwMDAwNDAwMDAwMAorI2RlZmluZSBTQ1RQX1BDQl9GTEFHU19S
RUNWUkNWSU5GTyAgICAgICAweDAwMDAwMDAwMDgwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfRkxB
R1NfUkVDVk5YVElORk8gICAgICAgMHgwMDAwMDAwMDEwMDAwMDAwCisjZGVmaW5lIFNDVFBfUENC
X0ZMQUdTX0FTU09DX1JFU0VURVZOVCAgIDB4MDAwMDAwMDAyMDAwMDAwMAorI2RlZmluZSBTQ1RQ
X1BDQl9GTEFHU19TVFJFQU1fQ0hBTkdFRVZOVCAweDAwMDAwMDAwNDAwMDAwMDAKKyNkZWZpbmUg
U0NUUF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQgMHgwMDAwMDAwMDgwMDAwMDAwCisKKy8q
LQorICogbW9iaWxpdHlfZmVhdHVyZXMgcGFyYW1ldGVycyAoYnkgbWljY2hpZSkuTm90ZQorICog
dGhlc2UgZmVhdHVyZXMgYXJlIGFwcGxpZWQgYWdhaW5zdCB0aGUKKyAqIHNjdHBfbW9iaWxpdHlf
ZmVhdHVyZXMgZmxhZ3MuLiBub3QgdGhlIHNjdHBfZmVhdHVyZXMKKyAqIGZsYWdzLgorICovCisj
ZGVmaW5lIFNDVFBfTU9CSUxJVFlfQkFTRSAgICAgICAgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZp
bmUgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRiAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBT
Q1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCAgICAgICAweDAwMDAwMDA0CisKKworI2RlZmluZSBT
Q1RQX1NNQUxMRVNUX1BNVFUgNTEyCSAvKiBzbWFsbGVzdCBwbXR1IGFsbG93ZWQgd2hlbiBkaXNh
YmxpbmcgUE1UVSBkaXNjb3ZlcnkgKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKyNwcmFnbWEgcGFjayhwb3ApCisjZW5kaWYKKyN1bmRlZiBTQ1RQX1BBQ0tFRAorCisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgorCisvKiBUaGlzIGRpY3RhdGVzIHRoZSBzaXpl
IG9mIHRoZSBwYWNrZXQKKyAqIGNvbGxlY3Rpb24gYnVmZmVyLiBUaGlzIG9ubHkgYXBwbGllcwor
ICogaWYgU0NUUF9QQUNLRVRfTE9HR0lORyBpcyBlbmFibGVkIGluCisgKiB5b3VyIGNvbmZpZy4K
KyAqLworI2RlZmluZSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSA2NTUzNgorCisvKiBNYXhpbXVtIGRl
bGF5cyBhbmQgc3VjaCBhIHVzZXIgY2FuIHNldCBmb3Igb3B0aW9ucyB0aGF0CisgKiB0YWtlIG1z
LgorICovCisjZGVmaW5lIFNDVFBfTUFYX1NBQ0tfREVMQVkgNTAwIC8qIHBlciBSRkM0OTYwICov
CisjZGVmaW5lIFNDVFBfTUFYX0hCX0lOVEVSVkFMIDE0NDAwMDAwIC8qIDQgaG91cnMgaW4gbXMg
Ki8KKyNkZWZpbmUgU0NUUF9NQVhfQ09PS0lFX0xJRkUgIDM2MDAwMDAgLyogMSBob3VyIGluIG1z
ICovCisKKworLyogVHlwZXMgb2YgbG9nZ2luZy9LVFIgdHJhY2luZyAgdGhhdCBjYW4gYmUgZW5h
YmxlZCB2aWEgdGhlCisgKiBzeXNjdGwgbmV0LmluZXQuc2N0cC5zY3RwX2xvZ2dpbmcuIFlvdSBt
dXN0IGFsc28gZW5hYmxlCisgKiBTVUJTWVMgdHJhY2luZy4KKyAqIE5vdGUgdGhhdCB5b3UgbXVz
dCBoYXZlIHRoZSBTQ1RQIG9wdGlvbiBpbiB0aGUga2VybmVsCisgKiB0byBlbmFibGUgdGhlc2Ug
YXMgd2VsbC4KKyAqLworI2RlZmluZSBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDAw
MDAxCisjZGVmaW5lIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRQkJCTB4MDAwMDAwMDIKKyNkZWZp
bmUgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDAwNAorI2RlZmluZSBTQ1RQX0ZM
SUdIVF9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9GUl9MT0dHSU5H
X0VOQUJMRQkJCQkweDAwMDAwMDQwCisjZGVmaW5lIFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRQkJ
CTB4MDAwMDAwODAKKyNkZWZpbmUgU0NUUF9NQVBfTE9HR0lOR19FTkFCTEUJCQkJMHgwMDAwMDEw
MAorI2RlZmluZSBTQ1RQX01CQ05UX0xPR0dJTkdfRU5BQkxFCQkJMHgwMDAwMDIwMAorI2RlZmlu
ZSBTQ1RQX01CVUZfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAwNDAwCisjZGVmaW5lIFNDVFBfTkFH
TEVfTE9HR0lOR19FTkFCTEUJCQkweDAwMDAwODAwCisjZGVmaW5lIFNDVFBfUkVDVl9SV05EX0xP
R0dJTkdfRU5BQkxFCQkJMHgwMDAwMTAwMAorI2RlZmluZSBTQ1RQX1JUVFZBUl9MT0dHSU5HX0VO
QUJMRQkJCTB4MDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFCQkJMHgw
MDAwNDAwMAorI2RlZmluZSBTQ1RQX1NBQ0tfUldORF9MT0dHSU5HX0VOQUJMRQkJCTB4MDAwMDgw
MDAKKyNkZWZpbmUgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRQkJCQkweDAwMDEwMDAwCisjZGVmaW5l
IFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFCQkJCTB4MDAwMjAwMDAKKyNkZWZpbmUgU0NUUF9XQUtF
X0xPR0dJTkdfRU5BQkxFCQkJMHgwMDA0MDAwMAorI2RlZmluZSBTQ1RQX0xPR19NQVhCVVJTVF9F
TkFCTEUJCQkweDAwMDgwMDAwCisjZGVmaW5lIFNDVFBfTE9HX1JXTkRfRU5BQkxFICAgIAkJCTB4
MDAxMDAwMDAKKyNkZWZpbmUgU0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUJCQkweDAwMjAw
MDAwCisjZGVmaW5lIFNDVFBfTFRSQUNFX0NIVU5LX0VOQUJMRQkJCTB4MDA0MDAwMDAKKyNkZWZp
bmUgU0NUUF9MVFJBQ0VfRVJST1JfRU5BQkxFCQkJMHgwMDgwMDAwMAorI2RlZmluZSBTQ1RQX0xB
U1RfUEFDS0VUX1RSQUNJTkcJCQkweDAxMDAwMDAwCisjZGVmaW5lIFNDVFBfVEhSRVNIT0xEX0xP
R0dJTkcJCQkJMHgwMjAwMDAwMAorI2RlZmluZSBTQ1RQX0xPR19BVF9TRU5EXzJfU0NUUAkJCQkw
eDA0MDAwMDAwCisjZGVmaW5lIFNDVFBfTE9HX0FUX1NFTkRfMl9PVVRRCQkJCTB4MDgwMDAwMDAK
KyNkZWZpbmUgU0NUUF9MT0dfVFJZX0FEVkFOQ0UJCQkJMHgxMDAwMDAwMAorCisjZW5kaWYJCQkJ
LyogIV9ORVRJTkVUX1NDVFBfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX2FzY29uZi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
YXNjb25mLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4u
NzA0ZGZkZTAxMGMxNDZhOTg0ZWY2MjU4NjVkNWUyYzg5NDk0NmZkYyAxMDA3NTUKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKKysrIGIvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfYXNjb25mLmMKQEAgLTAsMCArMSwzNTE5IEBACisvKi0KKyAq
IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1
ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhl
ciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisg
KiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUK
KyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXwor
I2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRp
bmV0L3NjdHBfYXNjb25mLmMgMzI0MDU2IDIwMTctMDktMjcgMTM6MDU6MjNaIHR1ZXhlbiAkIik7
CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291
dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfdGltZXIuaD4KKworLyoKKyAqIGRlYnVnIGZsYWdzOgorICogU0NUUF9ERUJVR19B
U0NPTkYxOiBwcm90b2NvbCBpbmZvLCBnZW5lcmFsIGluZm8gYW5kIGVycm9ycworICogU0NUUF9E
RUJVR19BU0NPTkYyOiBkZXRhaWxlZCBpbmZvCisgKi8KKworI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorI2RlZmluZSBBUFBMRV9GSUxFX05PIDEKKyNlbmRpZgorCisvKgorICogUkZDIDUwNjEKKyAq
CisgKiBBbiBBU0NPTkYgcGFyYW1ldGVyIHF1ZXVlIGV4aXN0cyBwZXIgYXNvYyB3aGljaCBob2xk
cyB0aGUgcGVuZGluZyBhZGRyZXNzCisgKiBvcGVyYXRpb25zLiAgTGlzdHMgYXJlIHVwZGF0ZWQg
dXBvbiByZWNlaXB0IG9mIEFTQ09ORi1BQ0suCisgKgorICogQSByZXN0cmljdGVkX2FkZHJzIGxp
c3QgZXhpc3RzIHBlciBhc3NvYyB0byBob2xkIGxvY2FsIGFkZHJlc3NlcyB0aGF0IGFyZQorICog
bm90ICh5ZXQpIHVzYWJsZSBieSB0aGUgYXNzb2MgYXMgYSBzb3VyY2UgYWRkcmVzcy4gIFRoZXNl
IGFkZHJlc3NlcyBhcmUKKyAqIGVpdGhlciBwZW5kaW5nIGFuIEFTQ09ORiBvcGVyYXRpb24gKGFu
ZCBleGlzdCBvbiB0aGUgQVNDT05GIHBhcmFtZXRlcgorICogcXVldWUpLCBvciB0aGV5IGFyZSBw
ZXJtYW5lbnRseSByZXN0cmljdGVkICh0aGUgcGVlciBoYXMgcmV0dXJuZWQgYW4KKyAqIEVSUk9S
IGluZGljYXRpb24gdG8gYW4gQVNDT05GKEFERCksIG9yIHRoZSBwZWVyIGRvZXMgbm90IHN1cHBv
cnQgQVNDT05GKS4KKyAqCisgKiBEZWxldGVkIGFkZHJlc3NlcyBhcmUgYWx3YXlzIGltbWVkaWF0
ZWx5IHJlbW92ZWQgZnJvbSB0aGUgbGlzdHMgYXMgdGhleSB3aWxsCisgKiAoc2hvcnRseSkgbm8g
bG9uZ2VyIGV4aXN0IGluIHRoZSBrZXJuZWwuICBXZSBzZW5kIEFTQ09ORnMgYXMgYSBjb3VydGVz
eSwKKyAqIG9ubHkgaWYgYWxsb3dlZC4KKyAqLworCisvKgorICogQVNDT05GIHBhcmFtZXRlciBw
cm9jZXNzaW5nLgorICogcmVzcG9uc2VfcmVxdWlyZWQ6IHNldCBpZiBhIHJlcGx5IGlzIHJlcXVp
cmVkIChlZy4gU1VDQ0VTU19SRVBPUlQpLgorICogcmV0dXJucyBhIG1idWYgdG8gYW4gImVycm9y
IiByZXNwb25zZSBwYXJhbWV0ZXIgb3IgTlVMTC8ic3VjY2VzcyIgaWYgb2suCisgKiBGSVg6IGFs
bG9jYXRpbmcgdGhpcyBtYW55IG1idWZzIG9uIHRoZSBmbHkgaXMgcHJldHR5IGluZWZmaWNpZW50
Li4uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FzY29uZl9zdWNjZXNzX3Jlc3Bv
bnNlKHVpbnQzMl90IGlkKQoreworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0gTlVMTDsKKwlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaDsKKworCW1fcmVwbHkgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksCisJCQkJCTAsIE1f
Tk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9yZXBseSA9PSBOVUxMKSB7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19BU0NPTkYxLAorCQkJImFzY29uZl9zdWNjZXNzX3Jlc3BvbnNlOiBjb3VsZG4n
dCBnZXQgbWJ1ZiFcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlhcGggPSBtdG9kKG1fcmVw
bHksIHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKTsKKwlhcGgtPmNvcnJlbGF0aW9uX2lk
ID0gaWQ7CisJYXBoLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVUNDRVNTX1JFUE9SVCk7
CisJYXBoLT5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyKTsKKwlTQ1RQX0JVRl9MRU4obV9yZXBseSkgPSBhcGgtPnBoLnBhcmFtX2xlbmd0aDsKKwlh
cGgtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFwaC0+cGgucGFyYW1fbGVuZ3RoKTsKKworCXJl
dHVybiAobV9yZXBseSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FzY29uZl9l
cnJvcl9yZXNwb25zZSh1aW50MzJfdCBpZCwgdWludDE2X3QgY2F1c2UsIHVpbnQ4X3QgKmVycm9y
X3RsdiwKKwkJCSAgIHVpbnQxNl90IHRsdl9sZW5ndGgpCit7CisJc3RydWN0IG1idWYgKm1fcmVw
bHkgPSBOVUxMOworCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOworCXN0cnVjdCBz
Y3RwX2Vycm9yX2NhdXNlICplcnJvcjsKKwl1aW50OF90ICp0bHY7CisKKwltX3JlcGx5ID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKChzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSAr
CisJCQkJCSB0bHZfbGVuZ3RoICsKKwkJCQkJIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVz
ZSkpLAorCQkJCQkwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fcmVwbHkgPT0gTlVM
TCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJCSJhc2NvbmZfZXJyb3JfcmVz
cG9uc2U6IGNvdWxkbid0IGdldCBtYnVmIVxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWFw
aCA9IG10b2QobV9yZXBseSwgc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopOworCWVycm9y
ID0gKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKGFwaCArIDEpOworCisJYXBoLT5jb3JyZWxh
dGlvbl9pZCA9IGlkOworCWFwaC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfRVJST1JfQ0FV
U0VfSU5EKTsKKwllcnJvci0+Y29kZSA9IGh0b25zKGNhdXNlKTsKKwllcnJvci0+bGVuZ3RoID0g
dGx2X2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSk7CisJYXBoLT5waC5w
YXJhbV9sZW5ndGggPSBlcnJvci0+bGVuZ3RoICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2Fz
Y29uZl9wYXJhbWhkcik7CisKKwlpZiAoYXBoLT5waC5wYXJhbV9sZW5ndGggPiBNTEVOKSB7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJImFzY29uZl9lcnJvcl9yZXNwb25zZTog
dGx2X2xlbmd0aCAoJXhoKSB0b28gYmlnXG4iLAorCQkJdGx2X2xlbmd0aCk7CisJCXNjdHBfbV9m
cmVlbShtX3JlcGx5KTsJLyogZGlzY2FyZCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAo
ZXJyb3JfdGx2ICE9IE5VTEwpIHsKKwkJdGx2ID0gKHVpbnQ4X3QgKikgKGVycm9yICsgMSk7CisJ
CW1lbWNweSh0bHYsIGVycm9yX3RsdiwgdGx2X2xlbmd0aCk7CisJfQorCVNDVFBfQlVGX0xFTiht
X3JlcGx5KSA9IGFwaC0+cGgucGFyYW1fbGVuZ3RoOworCWVycm9yLT5sZW5ndGggPSBodG9ucyhl
cnJvci0+bGVuZ3RoKTsKKwlhcGgtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGFwaC0+cGgucGFy
YW1fbGVuZ3RoKTsKKworCXJldHVybiAobV9yZXBseSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbWJ1
ZiAqCitzY3RwX3Byb2Nlc3NfYXNjb25mX2FkZF9pcChzdHJ1Y3Qgc29ja2FkZHIgKnNyYywgc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGgsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzZW5kX2hiLCBpbnQgcmVzcG9uc2VfcmVxdWly
ZWQpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBtYnVmICptX3JlcGx5ID0g
TlVMTDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciAqcGg7CisJdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0aDsKKyNpZiBkZWZpbmVk
KElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1fbGVuZ3RoOworI2VuZGlm
CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKwlpbnQgYmFk
X2FkZHJlc3MgPSAwOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlz
dHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFt
ICp2NmFkZHI7CisjZW5kaWYKKworCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFt
X2xlbmd0aCk7CisJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7CisJcGFy
YW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRl
ZmluZWQoSU5FVDYpCisJcGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7Cisj
ZW5kaWYKKwlzYSA9ICZzdG9yZS5zYTsKKwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKyNpZmRlZiBJ
TkVUCisJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAhPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBhcmFtIHNp
emUgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjRhZGRyID0gKHN0cnVjdCBzY3RwX2lw
djRhZGRyX3BhcmFtICopcGg7CisJCXNpbiA9ICZzdG9yZS5zaW47CisJCW1lbXNldChzaW4sIDAs
IHNpemVvZigqc2luKSk7CisJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFW
RV9TSU5fTEVOCisJCXNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwor
I2VuZGlmCisJCXNpbi0+c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJc2luLT5zaW5fYWRkci5z
X2FkZHIgPSB2NGFkZHItPmFkZHI7CisJCWlmICgoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5B
RERSX0JST0FEQ0FTVCkgfHwKKwkJICAgIElOX01VTFRJQ0FTVChudG9obChzaW4tPnNpbl9hZGRy
LnNfYWRkcikpKSB7CisJCQliYWRfYWRkcmVzcyA9IDE7CisJCX0KKwkJaWYgKHNpbi0+c2luX2Fk
ZHIuc19hZGRyID09IElOQUREUl9BTlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3NfYXNjb25mX2FkZF9pcDogYWRkaW5nICIpOwor
CQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzYSk7CisJCWJyZWFrOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgorCQlpZiAocGFyYW1fbGVu
Z3RoICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpIHsKKwkJCS8qIGludmFs
aWQgcGFyYW0gc2l6ZSAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQl2NmFkZHIgPSAoc3Ry
dWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaDsKKwkJc2luNiA9ICZzdG9yZS5zaW42OworCQlt
ZW1zZXQoc2luNiwgMCwgc2l6ZW9mKCpzaW42KSk7CisJCXNpbjYtPnNpbjZfZmFtaWx5ID0gQUZf
SU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlzaW42LT5zaW42X2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5y
cG9ydDsKKwkJbWVtY3B5KChjYWRkcl90KSZzaW42LT5zaW42X2FkZHIsIHY2YWRkci0+YWRkciwK
KwkJICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJaWYgKElONl9JU19BRERSX01VTFRJ
Q0FTVCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJYmFkX2FkZHJlc3MgPSAxOworCQl9CisJCWlm
IChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCXplcm9fYWRk
cmVzcyA9IDE7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2NvbmZf
YWRkX2lwOiBhZGRpbmcgIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNh
KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZf
ZXJyb3JfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfSU5W
QUxJRF9QQVJBTSwgKHVpbnQ4X3QgKikgYXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJCXJl
dHVybiAobV9yZXBseSk7CisJfQkJCS8qIGVuZCBzd2l0Y2ggKi8KKworCS8qIGlmIDAuMC4wLjAv
OjowLCBhZGQgdGhlIHNvdXJjZSBhZGRyZXNzIGluc3RlYWQgKi8KKwlpZiAoemVyb19hZGRyZXNz
ICYmIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9uYXRfZnJpZW5kbHkpKSB7CisJCXNhID0gc3JjOwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJICAgICAgICAicHJvY2Vzc19hc2NvbmZf
YWRkX2lwOiB1c2luZyBzb3VyY2UgYWRkciAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdf
QVNDT05GMSwgc3JjKTsKKwl9CisJLyogYWRkIHRoZSBhZGRyZXNzICovCisJaWYgKGJhZF9hZGRy
ZXNzKSB7CisJCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJl
bGF0aW9uX2lkLAorCQkgICAgU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAodWludDhfdCAqKSBh
cGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsKKwl9IGVsc2UgaWYgKHNjdHBfYWRkX3JlbW90ZV9h
ZGRyKHN0Y2IsIHNhLCAmbmV0LCBzdGNiLT5hc29jLnBvcnQsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0RPTk9UX1NFVFNDT1BFLAorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgU0NUUF9BRERSX0RZTkFNSUNfQURERUQpICE9IDApIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfYWRkX2lwOiBlcnJvciBhZGRp
bmcgYWRkcmVzc1xuIik7CisJCW1fcmVwbHkgPSBzY3RwX2FzY29uZl9lcnJvcl9yZXNwb25zZShh
cGgtPmNvcnJlbGF0aW9uX2lkLAorCQkgICAgU0NUUF9DQVVTRV9SRVNPVVJDRV9TSE9SVEFHRSwg
KHVpbnQ4X3QgKikgYXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJLyog
bm90aWZ5IHVwcGVyIGxheWVyICovCisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU0NP
TkZfQUREX0lQLCBzdGNiLCAwLCBzYSwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJaWYgKHJlc3Bv
bnNlX3JlcXVpcmVkKSB7CisJCQltX3JlcGx5ID0KKwkJCSAgICBzY3RwX2FzY29uZl9zdWNjZXNz
X3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQpOworCQl9CisJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsK
KwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3Rw
X2VwLAorCQkgICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCk7CisJCWlmIChzZW5kX2hiKSB7CisJ
CQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQl9CisJfQor
CXJldHVybiAobV9yZXBseSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfYXNjb25mX2RlbF9yZW1v
dGVfYWRkcnNfZXhjZXB0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpz
cmMpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqc3JjX25ldCwgKm5ldDsKKworCS8qIG1ha2Ugc3Vy
ZSB0aGUgc291cmNlIGFkZHJlc3MgZXhpc3RzIGFzIGEgZGVzdGluYXRpb24gbmV0ICovCisJc3Jj
X25ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBzcmMpOworCWlmIChzcmNfbmV0ID09IE5VTEwpIHsK
KwkJLyogbm90IGZvdW5kICovCisJCXJldHVybiAoLTEpOworCX0KKworCS8qIGRlbGV0ZSBhbGwg
ZGVzdGluYXRpb24gYWRkcmVzc2VzIGV4Y2VwdCB0aGUgc291cmNlICovCisJVEFJTFFfRk9SRUFD
SChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAobmV0ICE9IHNyY19u
ZXQpIHsKKwkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCXNjdHBfcmVtb3ZlX25ldChz
dGNiLCBuZXQpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImFzY29uZl9k
ZWxfcmVtb3RlX2FkZHJzX2V4Y2VwdDogZGVsZXRpbmcgIik7CisJCQlTQ1RQREJHX0FERFIoU0NU
UF9ERUJVR19BU0NPTkYxLAorCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9s
X2FkZHIpOworCQkJLyogbm90aWZ5IHVwcGVyIGxheWVyICovCisJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfQVNDT05GX0RFTEVURV9JUCwgc3RjYiwgMCwKKwkJCSAgICAoc3RydWN0IHNv
Y2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQorCX0K
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgc3RydWN0IG1idWYgKgorc2N0cF9wcm9jZXNzX2Fz
Y29uZl9kZWxldGVfaXAoc3RydWN0IHNvY2thZGRyICpzcmMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKKwkJCSAgICAgIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IHJlc3BvbnNlX3JlcXVpcmVkKQoreworCXN0cnVjdCBt
YnVmICptX3JlcGx5ID0gTlVMTDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDE2X3QgcGFyYW1fdHlwZSwgYXBhcmFtX2xlbmd0
aDsKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1f
bGVuZ3RoOworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlpbnQgemVyb19hZGRyZXNz
ID0gMDsKKwlpbnQgcmVzdWx0OworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
bjsKKwlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRyOworI2VuZGlmCisjaWZkZWYg
SU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtICp2NmFkZHI7CisjZW5kaWYKKworCWFwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBo
LnBhcmFtX2xlbmd0aCk7CisJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7
CisJcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJcGFyYW1fbGVuZ3RoID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0
aCk7CisjZW5kaWYKKwlzYSA9ICZzdG9yZS5zYTsKKwlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKyNp
ZmRlZiBJTkVUCisJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0aCAh
PSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlkIHBh
cmFtIHNpemUgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjRhZGRyID0gKHN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtICopcGg7CisJCXNpbiA9ICZzdG9yZS5zaW47CisJCW1lbXNldChz
aW4sIDAsIHNpemVvZigqc2luKSk7CisJCXNpbi0+c2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZk
ZWYgSEFWRV9TSU5fTEVOCisJCXNpbi0+c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW4pOworI2VuZGlmCisJCXNpbi0+c2luX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJc2luLT5zaW5f
YWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7CisJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9
PSBJTkFERFJfQU5ZKQorCQkJemVyb19hZGRyZXNzID0gMTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfZGVsZXRlX2lwOiBkZWxldGluZyAiKTsKKwkJ
U0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc2EpOworCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJaWYgKHBhcmFtX2xlbmd0
aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7CisJCQkvKiBpbnZhbGlk
IHBhcmFtIHNpemUgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJdjZhZGRyID0gKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGg7CisJCXNpbjYgPSAmc3RvcmUuc2luNjsKKwkJbWVt
c2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lO
RVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJc2luNi0+c2luNl9wb3J0ID0gc3RjYi0+cnBv
cnQ7CisJCW1lbWNweSgmc2luNi0+c2luNl9hZGRyLCB2NmFkZHItPmFkZHIsCisJCSAgICBzaXpl
b2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2lu
Ni0+c2luNl9hZGRyKSkKKwkJCXplcm9fYWRkcmVzcyA9IDE7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19BU0NPTkYxLAorCQkJInByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogZGVsZXRpbmcgIik7CisJ
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7CisjZW5kaWYK
KwlkZWZhdWx0OgorCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVzcG9uc2UoYXBoLT5j
b3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxFX0FERFIsICh1aW50
OF90ICopIGFwaCwKKwkJICAgIGFwYXJhbV9sZW5ndGgpOworCQlyZXR1cm4gKG1fcmVwbHkpOwor
CX0KKworCS8qIG1ha2Ugc3VyZSB0aGUgc291cmNlIGFkZHJlc3MgaXMgbm90IGJlaW5nIGRlbGV0
ZWQgKi8KKwlpZiAoc2N0cF9jbXBhZGRyKHNhLCBzcmMpKSB7CisJCS8qIHRyeWluZyB0byBkZWxl
dGUgdGhlIHNvdXJjZSBhZGRyZXNzISAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
InByb2Nlc3NfYXNjb25mX2RlbGV0ZV9pcDogdHJpZWQgdG8gZGVsZXRlIHNvdXJjZSBhZGRyXG4i
KTsKKwkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRp
b25faWQsCisJCSAgICBTQ1RQX0NBVVNFX0RFTEVUSU5HX1NSQ19BRERSLCAodWludDhfdCAqKSBh
cGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsKKwkJcmV0dXJuIChtX3JlcGx5KTsKKwl9CisKKwkv
KiBpZiBkZWxldGluZyAwLjAuMC4wLzo6MCwgZGVsZXRlIGFsbCBhZGRyZXNzZXMgZXhjZXB0IHNy
YyBhZGRyICovCisJaWYgKHplcm9fYWRkcmVzcyAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0
X2ZyaWVuZGx5KSkgeworCQlyZXN1bHQgPSBzY3RwX2FzY29uZl9kZWxfcmVtb3RlX2FkZHJzX2V4
Y2VwdChzdGNiLCBzcmMpOworCisJCWlmIChyZXN1bHQpIHsKKwkJCS8qIHNyYyBhZGRyZXNzIGRp
ZCBub3QgZXhpc3Q/ICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInByb2Nlc3Nf
YXNjb25mX2RlbGV0ZV9pcDogc3JjIGFkZHIgZG9lcyBub3QgZXhpc3Q/XG4iKTsKKwkJCS8qIHdo
YXQgZXJyb3IgdG8gcmVwbHkgd2l0aD8/ICovCisJCQltX3JlcGx5ID0KKwkJCSAgICBzY3RwX2Fz
Y29uZl9lcnJvcl9yZXNwb25zZShhcGgtPmNvcnJlbGF0aW9uX2lkLAorCQkJICAgIFNDVFBfQ0FV
U0VfUkVRVUVTVF9SRUZVU0VELCAodWludDhfdCAqKSBhcGgsCisJCQkgICAgYXBhcmFtX2xlbmd0
aCk7CisJCX0gZWxzZSBpZiAocmVzcG9uc2VfcmVxdWlyZWQpIHsKKwkJCW1fcmVwbHkgPQorCQkJ
ICAgIHNjdHBfYXNjb25mX3N1Y2Nlc3NfcmVzcG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7CisJ
CX0KKwkJcmV0dXJuIChtX3JlcGx5KTsKKwl9CisKKwkvKiBkZWxldGUgdGhlIGFkZHJlc3MgKi8K
KwlyZXN1bHQgPSBzY3RwX2RlbF9yZW1vdGVfYWRkcihzdGNiLCBzYSk7CisJLyoKKwkgKiBub3Rl
IGlmIHJlc3VsdCA9PSAtMiwgdGhlIGFkZHJlc3MgZG9lc24ndCBleGlzdCBpbiB0aGUgYXNvYyBi
dXQKKwkgKiBzaW5jZSBpdCdzIGJlaW5nIGRlbGV0ZWQgYW55d2F5cywgd2UganVzdCBhY2sgdGhl
IGRlbGV0ZSAtLSBidXQKKwkgKiB0aGlzIHByb2JhYmx5IG1lYW5zIHNvbWV0aGluZyBoYXMgYWxy
ZWFkeSBnb25lIGF3cnkKKwkgKi8KKwlpZiAocmVzdWx0ID09IC0xKSB7CisJCS8qIG9ubHkgb25l
IGFkZHJlc3MgaW4gdGhlIGFzb2MgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJw
cm9jZXNzX2FzY29uZl9kZWxldGVfaXA6IHRyaWVkIHRvIGRlbGV0ZSBsYXN0IElQIGFkZHIhXG4i
KTsKKwkJbV9yZXBseSA9IHNjdHBfYXNjb25mX2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRp
b25faWQsCisJCSAgICBTQ1RQX0NBVVNFX0RFTEVUSU5HX0xBU1RfQUREUiwgKHVpbnQ4X3QgKikg
YXBoLAorCQkgICAgYXBhcmFtX2xlbmd0aCk7CisJfSBlbHNlIHsKKwkJaWYgKHJlc3BvbnNlX3Jl
cXVpcmVkKSB7CisJCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfc3VjY2Vzc19yZXNwb25zZShhcGgt
PmNvcnJlbGF0aW9uX2lkKTsKKwkJfQorCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0FTQ09ORl9ERUxFVEVfSVAsIHN0Y2IsIDAsIHNhLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwlyZXR1cm4gKG1fcmVwbHkpOworfQorCitzdGF0aWMg
c3RydWN0IG1idWYgKgorc2N0cF9wcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeShzdHJ1Y3Qgc29j
a2FkZHIgKnNyYywKKwkJCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFwaCwKKwkJCQlz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCByZXNwb25zZV9yZXF1aXJlZCkKK3sKKwlzdHJ1Y3Qg
bWJ1ZiAqbV9yZXBseSA9IE5VTEw7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7CisJc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKnBoOworCXVpbnQxNl90IHBhcmFtX3R5cGUsIGFwYXJhbV9sZW5n
dGg7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXVpbnQxNl90IHBhcmFt
X2xlbmd0aDsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkciAqc2E7CisJaW50IHplcm9fYWRkcmVz
cyA9IDA7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCXN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtICp2NGFkZHI7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVj
dCBzb2NrYWRkcl9pbjYgKnNpbjY7CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKnY2YWRk
cjsKKyNlbmRpZgorCisJYXBhcmFtX2xlbmd0aCA9IG50b2hzKGFwaC0+cGgucGFyYW1fbGVuZ3Ro
KTsKKwlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShhcGggKyAxKTsKKwlwYXJhbV90eXBl
ID0gbnRvaHMocGgtPnBhcmFtX3R5cGUpOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlwYXJhbV9sZW5ndGggPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKyNlbmRpZgor
CXNhID0gJnN0b3JlLnNhOworCXN3aXRjaCAocGFyYW1fdHlwZSkgeworI2lmZGVmIElORVQKKwlj
YXNlIFNDVFBfSVBWNF9BRERSRVNTOgorCQlpZiAocGFyYW1fbGVuZ3RoICE9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpIHsKKwkJCS8qIGludmFsaWQgcGFyYW0gc2l6ZSAqLwor
CQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQl2NGFkZHIgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJf
cGFyYW0gKilwaDsKKwkJc2luID0gJnN0b3JlLnNpbjsKKwkJbWVtc2V0KHNpbiwgMCwgc2l6ZW9m
KCpzaW4pKTsKKwkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9M
RU4KKwkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYK
KwkJc2luLT5zaW5fYWRkci5zX2FkZHIgPSB2NGFkZHItPmFkZHI7CisJCWlmIChzaW4tPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKQorCQkJemVyb19hZGRyZXNzID0gMTsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJwcm9jZXNzX2FzY29uZl9zZXRfcHJpbWFyeTogIik7CisJ
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCWlmIChwYXJhbV9sZW5n
dGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgeworCQkJLyogaW52YWxp
ZCBwYXJhbSBzaXplICovCisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXY2YWRkciA9IChzdHJ1
Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoOworCQlzaW42ID0gJnN0b3JlLnNpbjY7CisJCW1l
bXNldChzaW42LCAwLCBzaXplb2YoKnNpbjYpKTsKKwkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9J
TkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJCW1lbWNweSgoY2FkZHJfdCkmc2luNi0+c2lu
Nl9hZGRyLCB2NmFkZHItPmFkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJ
CWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCXplcm9f
YWRkcmVzcyA9IDE7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicHJvY2Vzc19hc2Nv
bmZfc2V0X3ByaW1hcnk6ICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBz
YSk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJbV9yZXBseSA9IHNjdHBfYXNjb25m
X2Vycm9yX3Jlc3BvbnNlKGFwaC0+Y29ycmVsYXRpb25faWQsCisJCSAgICBTQ1RQX0NBVVNFX1VO
UkVTT0xWQUJMRV9BRERSLCAodWludDhfdCAqKSBhcGgsCisJCSAgICBhcGFyYW1fbGVuZ3RoKTsK
KwkJcmV0dXJuIChtX3JlcGx5KTsKKwl9CisKKwkvKiBpZiAwLjAuMC4wLzo6MCwgdXNlIHRoZSBz
b3VyY2UgYWRkcmVzcyBpbnN0ZWFkICovCisJaWYgKHplcm9fYWRkcmVzcyAmJiBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSkgeworCQlzYSA9IHNyYzsKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHVzaW5nIHNv
dXJjZSBhZGRyICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYxLCBzcmMpOwor
CX0KKwkvKiBzZXQgdGhlIHByaW1hcnkgYWRkcmVzcyAqLworCWlmIChzY3RwX3NldF9wcmltYXJ5
X2FkZHIoc3RjYiwgc2EsIE5VTEwpID09IDApIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsCisJCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6IHByaW1hcnkgYWRkcmVzcyBzZXRc
biIpOworCQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkJc2N0cF91bHBfbm90aWZ5KFNDVFBf
Tk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWSwgc3RjYiwgMCwgc2EsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisJCWlmICgoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1JFQUNIQUJMRSkgJiYKKwkJICAgICghKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikpICYmCisJCSAgICAoc3RjYi0+YXNv
Yy5hbHRlcm5hdGUpKSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRl
cm5hdGUpOworCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOworCQl9CisJCWlmIChyZXNw
b25zZV9yZXF1aXJlZCkgeworCQkJbV9yZXBseSA9IHNjdHBfYXNjb25mX3N1Y2Nlc3NfcmVzcG9u
c2UoYXBoLT5jb3JyZWxhdGlvbl9pZCk7CisJCX0KKwkJLyogTW9iaWxpdHkgYWRhcHRhdGlvbi4K
KwkJICAgSWRlYWxseSwgd2hlbiB0aGUgcmVjZXB0aW9uIG9mIFNFVCBQUklNQVJZIHdpdGggREVM
RVRFIElQCisJCSAgIEFERFJFU1Mgb2YgdGhlIHByZXZpb3VzIHByaW1hcnkgZGVzdGluYXRpb24s
IHVuYWNrbm93bGVkZ2VkCisJCSAgIERBVEEgYXJlIHJldHJhbnNtaXR0ZWQgaW1tZWRpYXRlbHkg
dG8gdGhlIG5ldyBwcmltYXJ5CisJCSAgIGRlc3RpbmF0aW9uIGZvciBzZWFtbGVzcyBoYW5kb3Zl
ci4KKwkJICAgSWYgdGhlIGRlc3RpbmF0aW9uIGlzIFVOQ09ORklSTUVEIGFuZCBtYXJrZWQgdG8g
UkVRX1BSSU0sCisJCSAgIFRoZSByZXRyYW5zbWlzc2lvbiBvY2N1ciB3aGVuIHJlY2VwdGlvbiBv
ZiB0aGUKKwkJICAgSEVBUlRCRUFULUFDSy4gIChTZWUgc2N0cF9oYW5kbGVfaGVhcnRiZWF0X2Fj
ayBpbgorCQkgICBzY3RwX2lucHV0LmMpCisJCSAgIEFsc28sIHdoZW4gY2hhbmdlIG9mIHRoZSBw
cmltYXJ5IGRlc3RpbmF0aW9uLCBpdCBpcyBiZXR0ZXIKKwkJICAgdGhhdCBhbGwgc3Vic2VxdWVu
dCBuZXcgREFUQSBjb250YWluaW5nIGFscmVhZHkgcXVldWVkIERBVEEKKwkJICAgYXJlIHRyYW5z
bWl0dGVkIHRvIHRoZSBuZXcgcHJpbWFyeSBkZXN0aW5hdGlvbi4gKGJ5IG1pY2NoaWUpCisJCSAq
LworCQlpZiAoKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0JBU0UpIHx8CisJ
CSAgICBzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01PQklMSVRZX0ZBU1RIQU5ET0ZGKSkgJiYK
KwkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKSAm
JgorCQkgICAgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+ZGVzdF9zdGF0ZSAmCisJ
CSAgICAgU0NUUF9BRERSX1VOQ09ORklSTUVEKSA9PSAwKSB7CisKKwkJCXNjdHBfdGltZXJfc3Rv
cChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAorCQkJICAgICAgICAgICAgICAgIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
QVNDT05GICsgU0NUUF9MT0NfMSk7CisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsCisJCQkJCVNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7CisJCQkJ
c2N0cF9hc3NvY19pbW1lZGlhdGVfcmV0cmFucyhzdGNiLAorCQkJCQkJc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uKTsKKwkJCX0KKwkJCWlmIChzY3RwX2lzX21vYmlsaXR5X2ZlYXR1cmVf
b24oc3RjYi0+c2N0cF9lcCwKKwkJCQkJU0NUUF9NT0JJTElUWV9CQVNFKSkgeworCQkJCXNjdHBf
bW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwKKwkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmlt
YXJ5KTsKKwkJCX0KKwkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+c2N0cF9lcCwgc3Rj
YiwKKwkJCQkJCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKwkJfQorCX0gZWxzZSB7CisJ
CS8qIGNvdWxkbid0IHNldCB0aGUgcmVxdWVzdGVkIHByaW1hcnkgYWRkcmVzcyEgKi8KKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkicHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnk6
IHNldCBwcmltYXJ5IGZhaWxlZCFcbiIpOworCQkvKiBtdXN0IGhhdmUgYmVlbiBhbiBpbnZhbGlk
IGFkZHJlc3MsIHNvIHJlcG9ydCAqLworCQltX3JlcGx5ID0gc2N0cF9hc2NvbmZfZXJyb3JfcmVz
cG9uc2UoYXBoLT5jb3JyZWxhdGlvbl9pZCwKKwkJICAgIFNDVFBfQ0FVU0VfVU5SRVNPTFZBQkxF
X0FERFIsICh1aW50OF90ICopIGFwaCwKKwkJICAgIGFwYXJhbV9sZW5ndGgpOworCX0KKworCXJl
dHVybiAobV9yZXBseSk7Cit9CisKKy8qCisgKiBoYW5kbGVzIGFuIEFTQ09ORiBjaHVuay4KKyAq
IGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBwcm9jZXNzZWQgb2ssIHNlbmQgYSBwbGFpbiAoZW1wdHkp
IEFTQ09ORi1BQ0sKKyAqLwordm9pZAorc2N0cF9oYW5kbGVfYXNjb25mKHN0cnVjdCBtYnVmICpt
LCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk
ciAqc3JjLAorCQkgICBzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90
Y2IgKnN0Y2IsCisJCSAgIGludCBmaXJzdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsKKwl1aW50MzJfdCBzZXJpYWxfbnVtOworCXN0cnVjdCBtYnVmICpuLCAqbV9hY2ssICpt
X3Jlc3VsdCwgKm1fdGFpbDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICphY2tfY3A7
CisJc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICphcGg7CisJc3RydWN0IHNjdHBfaXB2NmFk
ZHJfcGFyYW0gKnBfYWRkcjsKKwl1bnNpZ25lZCBpbnQgYXNjb25mX2xpbWl0LCBjbnQ7CisJaW50
IGVycm9yID0gMDsJCS8qIGRpZCBhbiBlcnJvciBvY2N1cj8gKi8KKworCS8qIGFzY29uZiBwYXJh
bSBidWZmZXIgKi8KKwl1aW50OF90IGFwYXJhbV9idWZbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07
CisJc3RydWN0IHNjdHBfYXNjb25mX2FjayAqYWNrLCAqYWNrX25leHQ7CisKKwkvKiB2ZXJpZnkg
bWluaW11bSBsZW5ndGggKi8KKwlpZiAobnRvaHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXpl
b2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKSkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwKKwkJCSJoYW5kbGVfYXNjb25mOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIsCisJCQlu
dG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9CisJYXNvYyA9ICZzdGNi
LT5hc29jOworCXNlcmlhbF9udW0gPSBudG9obChjcC0+c2VyaWFsX251bWJlcik7CisKKwlpZiAo
U0NUUF9UU05fR0UoYXNvYy0+YXNjb25mX3NlcV9pbiwgc2VyaWFsX251bSkpIHsKKwkJLyogZ290
IGEgZHVwbGljYXRlIEFTQ09ORiAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJ
CSJoYW5kbGVfYXNjb25mOiBnb3QgZHVwbGljYXRlIHNlcmlhbCBudW1iZXIgPSAleGhcbiIsCisJ
CQlzZXJpYWxfbnVtKTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoc2VyaWFsX251bSAhPSAoYXNv
Yy0+YXNjb25mX3NlcV9pbiArIDEpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAi
aGFuZGxlX2FzY29uZjogaW5jb3JyZWN0IHNlcmlhbCBudW1iZXIgPSAleGggKGV4cGVjdGVkIG5l
eHQgPSAleGgpXG4iLAorCQkJc2VyaWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9pbiArIDEpOwor
CQlyZXR1cm47CisJfQorCisJLyogaXQncyB0aGUgZXhwZWN0ZWQgIm5leHQiIHNlcXVlbmNlIG51
bWJlciwgc28gcHJvY2VzcyBpdCAqLworCWFzb2MtPmFzY29uZl9zZXFfaW4gPSBzZXJpYWxfbnVt
OwkvKiB1cGRhdGUgc2VxdWVuY2UgKi8KKwkvKiBnZXQgbGVuZ3RoIG9mIGFsbCB0aGUgcGFyYW0n
cyBpbiB0aGUgQVNDT05GICovCisJYXNjb25mX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMoY3AtPmNo
LmNodW5rX2xlbmd0aCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSJoYW5kbGVf
YXNjb25mOiBhc2NvbmZfbGltaXQ9JXUsIHNlcXVlbmNlPSV4aFxuIiwKKwkJYXNjb25mX2xpbWl0
LCBzZXJpYWxfbnVtKTsKKworCWlmIChmaXJzdCkgeworCQkvKiBkZWxldGUgb2xkIGNhY2hlICov
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCJoYW5kbGVfYXNjb25mOiBOb3cgcHJvY2Vz
c2luZyBmaXJzdCBBU0NPTkYuIFRyeSB0byBkZWxldGUgb2xkIGNhY2hlXG4iKTsKKworCQlUQUlM
UV9GT1JFQUNIX1NBRkUoYWNrLCAmYXNvYy0+YXNjb25mX2Fja19zZW50LCBuZXh0LCBhY2tfbmV4
dCkgeworCQkJaWYgKGFjay0+c2VyaWFsX251bWJlciA9PSBzZXJpYWxfbnVtKQorCQkJCWJyZWFr
OworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsImhhbmRsZV9hc2NvbmY6IGRlbGV0ZSBv
bGQoJXUpIDwgZmlyc3QoJXUpXG4iLAorCQkJICAgIGFjay0+c2VyaWFsX251bWJlciwgc2VyaWFs
X251bSk7CisJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9hY2tfc2VudCwgYWNrLCBuZXh0
KTsKKwkJCWlmIChhY2stPmRhdGEgIT0gTlVMTCkgeworCQkJCXNjdHBfbV9mcmVlbShhY2stPmRh
dGEpOworCQkJfQorCQkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNj
b25mX2FjayksIGFjayk7CisJCX0KKwl9CisKKwltX2FjayA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayksIDAsCisJCQkJICAgICAgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX2FjayA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19BU0NPTkYxLAorCQkJImhhbmRsZV9hc2NvbmY6IGNvdWxkbid0IGdldCBtYnVmIVxu
Iik7CisJCXJldHVybjsKKwl9CisJbV90YWlsID0gbV9hY2s7CQkvKiBjdXJyZW50IHJlcGx5IGNo
YWluJ3MgdGFpbCAqLworCisJLyogZmlsbCBpbiBBU0NPTkYtQUNLIGhlYWRlciAqLworCWFja19j
cCA9IG10b2QobV9hY2ssIHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKik7CisJYWNrX2Nw
LT5jaC5jaHVua190eXBlID0gU0NUUF9BU0NPTkZfQUNLOworCWFja19jcC0+Y2guY2h1bmtfZmxh
Z3MgPSAwOworCWFja19jcC0+c2VyaWFsX251bWJlciA9IGh0b25sKHNlcmlhbF9udW0pOworCS8q
IHNldCBpbml0aWFsIGxlbmd0aHMgKGVnLiBqdXN0IGFuIEFTQ09ORi1BQ0spLCBudG9oeCBhdCB0
aGUgZW5kISAqLworCVNDVFBfQlVGX0xFTihtX2FjaykgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNj
b25mX2Fja19jaHVuayk7CisJYWNrX2NwLT5jaC5jaHVua19sZW5ndGggPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX2Fja19jaHVuayk7CisKKwkvKiBza2lwIHRoZSBsb29rdXAgYWRkcmVzcyBw
YXJhbWV0ZXIgKi8KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayk7
CisJcF9hZGRyID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopc2N0cF9tX2dldHB0ciht
LCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksICh1aW50OF90ICopJmFwYXJh
bV9idWYpOworCWlmIChwX2FkZHIgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMSwKKwkJCSJoYW5kbGVfYXNjb25mOiBjb3VsZG4ndCBnZXQgbG9va3VwIGFkZHIhXG4iKTsK
KwkJLyogcmVzcG9uZCB3aXRoIGEgbWlzc2luZy9pbnZhbGlkIG1hbmRhdG9yeSBwYXJhbWV0ZXIg
ZXJyb3IgKi8KKwkJcmV0dXJuOworCX0KKwkvKiBwYXJhbV9sZW5ndGggaXMgYWxyZWFkeSB2YWxp
ZGF0ZWQgaW4gcHJvY2Vzc19jb250cm9sLi4uICovCisJb2Zmc2V0ICs9IG50b2hzKHBfYWRkci0+
cGgucGFyYW1fbGVuZ3RoKTsJLyogc2tpcCBsb29rdXAgYWRkciAqLworCS8qIGdldCBwb2ludGVy
IHRvIGZpcnN0IGFzY29uZiBwYXJhbSBpbiBBU0NPTkYgKi8KKwlhcGggPSAoc3RydWN0IHNjdHBf
YXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihzdHJ1Y3Qg
c2N0cF9hc2NvbmZfcGFyYW1oZHIpLCAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKKwlpZiAoYXBo
ID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJFbXB0eSBBU0NPTkYg
cmVjZWl2ZWQ/XG4iKTsKKwkJZ290byBzZW5kX3JlcGx5OworCX0KKwkvKiBwcm9jZXNzIHRocm91
Z2ggYWxsIHBhcmFtZXRlcnMgKi8KKwljbnQgPSAwOworCXdoaWxlIChhcGggIT0gTlVMTCkgewor
CQl1bnNpZ25lZCBpbnQgcGFyYW1fbGVuZ3RoLCBwYXJhbV90eXBlOworCisJCXBhcmFtX3R5cGUg
PSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5cGUpOworCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgt
PnBoLnBhcmFtX2xlbmd0aCk7CisJCWlmIChvZmZzZXQgKyBwYXJhbV9sZW5ndGggPiBhc2NvbmZf
bGltaXQpIHsKKwkJCS8qIHBhcmFtZXRlciBnb2VzIGJleW9uZCBlbmQgb2YgY2h1bmshICovCisJ
CQlzY3RwX21fZnJlZW0obV9hY2spOworCQkJcmV0dXJuOworCQl9CisJCW1fcmVzdWx0ID0gTlVM
TDsKKworCQlpZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7CisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUp
IGxhcmdlciB0aGFuIGJ1ZmZlciBzaXplIVxuIiwgcGFyYW1fbGVuZ3RoKTsKKwkJCXNjdHBfbV9m
cmVlbShtX2Fjayk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHBhcmFtX2xlbmd0aCA8PSBzaXpl
b2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgImhhbmRsZV9hc2NvbmY6IHBhcmFtIGxlbmd0aCAoJXUpIHRvbyBzaG9ydFxuIiwgcGFyYW1f
bGVuZ3RoKTsKKwkJCXNjdHBfbV9mcmVlbShtX2Fjayk7CisJCX0KKwkJLyogZ2V0IHRoZSBlbnRp
cmUgcGFyYW1ldGVyICovCisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKKwkJaWYg
KGFwaCA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9h
c2NvbmY6IGNvdWxkbid0IGdldCBlbnRpcmUgcGFyYW1cbiIpOworCQkJc2N0cF9tX2ZyZWVtKG1f
YWNrKTsKKwkJCXJldHVybjsKKwkJfQorCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsKKwkJY2FzZSBT
Q1RQX0FERF9JUF9BRERSRVNTOgorCQkJbV9yZXN1bHQgPSBzY3RwX3Byb2Nlc3NfYXNjb25mX2Fk
ZF9pcChzcmMsIGFwaCwgc3RjYiwKKwkJCSAgICAoY250IDwgU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2hiX21heGJ1cnN0KSksIGVycm9yKTsKKwkJCWNudCsrOworCQkJYnJlYWs7CisJCWNhc2UgU0NU
UF9ERUxfSVBfQUREUkVTUzoKKwkJCW1fcmVzdWx0ID0gc2N0cF9wcm9jZXNzX2FzY29uZl9kZWxl
dGVfaXAoc3JjLCBhcGgsIHN0Y2IsCisJCQkgICAgZXJyb3IpOworCQkJYnJlYWs7CisJCWNhc2Ug
U0NUUF9FUlJPUl9DQVVTRV9JTkQ6CisJCQkvKiBub3QgdmFsaWQgaW4gYW4gQVNDT05GIGNodW5r
ICovCisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6CisJCQltX3Jlc3VsdCA9
IHNjdHBfcHJvY2Vzc19hc2NvbmZfc2V0X3ByaW1hcnkoc3JjLCBhcGgsCisJCQkgICAgc3RjYiwg
ZXJyb3IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9OQVRfVlRBR1M6CisJCSAgICAgICAgU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJoYW5kbGVfYXNjb25mOiBzZWVzIGEgTkFUIFZUQUcg
c3RhdGUgcGFyYW1ldGVyXG4iKTsKKwkJICAgICAgICBicmVhazsKKwkJY2FzZSBTQ1RQX1NVQ0NF
U1NfUkVQT1JUOgorCQkJLyogbm90IHZhbGlkIGluIGFuIEFTQ09ORiBjaHVuayAqLworCQkJYnJl
YWs7CisJCWNhc2UgU0NUUF9VTFBfQURBUFRBVElPTjoKKwkJCS8qIEZJWCAqLworCQkJYnJlYWs7
CisJCWRlZmF1bHQ6CisJCQlpZiAoKHBhcmFtX3R5cGUgJiAweDgwMDApID09IDApIHsKKwkJCQkv
KiBCZWVuIHRvbGQgdG8gU1RPUCBhdCB0aGlzIHBhcmFtICovCisJCQkJYXNjb25mX2xpbWl0ID0g
b2Zmc2V0OworCQkJCS8qCisJCQkJICogRklYIEZJWCAtIFdlIG5lZWQgdG8gY2FsbAorCQkJCSAq
IHNjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoKQorCQkJCSAqIHRvIGdldCBh
IG9wZXJyIGFuZCBzZW5kIGl0IGZvciBhbnkKKwkJCQkgKiBwYXJhbSdzIHdpdGggdGhlIDB4NDAw
MCBiaXQgc2V0IE9SIGRvIGl0CisJCQkJICogaGVyZSBvdXJzZWx2ZXMuLi4gbm90ZSB3ZSBzdGls
bCBtdXN0IFNUT1AKKwkJCQkgKiBpZiB0aGUgMHg4MDAwIGJpdCBpcyBjbGVhci4KKwkJCQkgKi8K
KwkJCX0KKwkJCS8qIHVua25vd24vaW52YWxpZCBwYXJhbSB0eXBlICovCisJCQlicmVhazsKKwkJ
fSAvKiBzd2l0Y2ggKi8KKworCQkvKiBhZGQgYW55IChlcnJvcikgcmVzdWx0IHRvIHRoZSByZXBs
eSBtYnVmIGNoYWluICovCisJCWlmIChtX3Jlc3VsdCAhPSBOVUxMKSB7CisJCQlTQ1RQX0JVRl9O
RVhUKG1fdGFpbCkgPSBtX3Jlc3VsdDsKKwkJCW1fdGFpbCA9IG1fcmVzdWx0OworCQkJLyogdXBk
YXRlIGxlbmd0aHMsIG1ha2Ugc3VyZSBpdCdzIGFsaWduZWQgdG9vICovCisJCQlTQ1RQX0JVRl9M
RU4obV9yZXN1bHQpID0gU0NUUF9TSVpFMzIoU0NUUF9CVUZfTEVOKG1fcmVzdWx0KSk7CisJCQlh
Y2tfY3AtPmNoLmNodW5rX2xlbmd0aCArPSBTQ1RQX0JVRl9MRU4obV9yZXN1bHQpOworCQkJLyog
c2V0IGZsYWcgdG8gZm9yY2Ugc3VjY2VzcyByZXBvcnRzICovCisJCQllcnJvciA9IDE7CisJCX0K
KwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBhcmFtX2xlbmd0aCk7CisJCS8qIHVwZGF0ZSByZW1h
aW5pbmcgQVNDT05GIG1lc3NhZ2UgbGVuZ3RoIHRvIHByb2Nlc3MgKi8KKwkJaWYgKG9mZnNldCA+
PSBhc2NvbmZfbGltaXQpIHsKKwkJCS8qIG5vIG1vcmUgZGF0YSBpbiB0aGUgbWJ1ZiBjaGFpbiAq
LworCQkJYnJlYWs7CisJCX0KKwkJLyogZ2V0IHBvaW50ZXIgdG8gbmV4dCBhc2NvbmYgcGFyYW0g
Ki8KKwkJYXBoID0gKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciksCisJ
CSAgICAodWludDhfdCAqKSZhcGFyYW1fYnVmKTsKKwkJaWYgKGFwaCA9PSBOVUxMKSB7CisJCQkv
KiBjYW4ndCBnZXQgYW4gYXNjb25mIHBhcmFtaGRyICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
QVNDT05GMSwgImhhbmRsZV9hc2NvbmY6IGNhbid0IGdldCBhc2NvbmYgcGFyYW0gaGRyIVxuIik7
CisJCQkvKiBGSVggTUUgLSBhZGQgZXJyb3IgaGVyZS4uLiAqLworCQl9CisJfQorCisgc2VuZF9y
ZXBseToKKwlhY2tfY3AtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGFja19jcC0+Y2guY2h1bmtf
bGVuZ3RoKTsKKwkvKiBzYXZlIHRoZSBBU0NPTkYtQUNLIHJlcGx5ICovCisJYWNrID0gU0NUUF9a
T05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc2NvbmZfYWNrKSwKKwkgICAgc3RydWN0
IHNjdHBfYXNjb25mX2Fjayk7CisJaWYgKGFjayA9PSBOVUxMKSB7CisJCXNjdHBfbV9mcmVlbSht
X2Fjayk7CisJCXJldHVybjsKKwl9CisJYWNrLT5zZXJpYWxfbnVtYmVyID0gc2VyaWFsX251bTsK
KwlhY2stPmxhc3Rfc2VudF90byA9IE5VTEw7CisJYWNrLT5kYXRhID0gbV9hY2s7CisJYWNrLT5s
ZW4gPSAwOworCWZvciAobiA9IG1fYWNrOyBuICE9IE5VTEw7IG4gPSBTQ1RQX0JVRl9ORVhUKG4p
KSB7CisJCWFjay0+bGVuICs9IFNDVFBfQlVGX0xFTihuKTsKKwl9CisJVEFJTFFfSU5TRVJUX1RB
SUwoJnN0Y2ItPmFzb2MuYXNjb25mX2Fja19zZW50LCBhY2ssIG5leHQpOworCisJLyogc2VlIGlm
IGxhc3RfY29udHJvbF9jaHVua19mcm9tIGlzIHNldCBwcm9wZXJseSAodXNlIElQIHNyYyBhZGRy
KSAqLworCWlmIChzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsK
KwkJLyoKKwkJICogdGhpcyBjb3VsZCBoYXBwZW4gaWYgdGhlIHNvdXJjZSBhZGRyZXNzIHdhcyBq
dXN0IG5ld2x5CisJCSAqIGFkZGVkCisJCSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgImhhbmRsZV9hc2NvbmY6IGxvb2tpbmcgdXAgbmV0IGZvciBJUCBzb3VyY2UgYWRkcmVzc1xu
Iik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiTG9va2luZyBmb3IgSVAgc291cmNl
OiAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgc3JjKTsKKwkJLyogbG9v
ayB1cCB0aGUgZnJvbSBhZGRyZXNzICovCisJCXN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5r
X2Zyb20gPSBzY3RwX2ZpbmRuZXQoc3RjYiwgc3JjKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJCWlm
IChzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tID09IE5VTEwpIHsKKwkJCVNDVFBE
QkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaGFuZGxlX2FzY29uZjogSVAgc291cmNlIGFkZHJlc3Mg
bm90IGZvdW5kPyFcbiIpOworCQl9CisjZW5kaWYKKwl9Cit9CisKKy8qCisgKiBkb2VzIHRoZSBh
ZGRyZXNzIG1hdGNoPyByZXR1cm5zIDAgaWYgbm90LCAxIGlmIHNvCisgKi8KK3N0YXRpYyB1aW50
MzJfdAorc2N0cF9hc2NvbmZfYWRkcl9tYXRjaChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAqYWEs
IHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJLyogWFhYIHNjb3BlaWQgKi8KKwkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisKKwkJ
aWYgKChhYS0+YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgJiYK
KwkJICAgIChtZW1jbXAoJmFhLT5hcC5hZGRycC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAorCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7CisJCQlyZXR1cm4gKDEpOworCQl9
CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJewor
CQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsKKwor
CQlpZiAoKGFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID09IFNDVFBfSVBWNF9BRERSRVNTKSAm
JgorCQkgICAgKG1lbWNtcCgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW4tPnNpbl9hZGRyLAorCQkg
ICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgPT0gMCkpIHsKKwkJCXJldHVybiAoMSk7CisJCX0K
KwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAo
MCk7Cit9CisKKy8qCisgKiBkb2VzIHRoZSBhZGRyZXNzIG1hdGNoPyByZXR1cm5zIDAgaWYgbm90
LCAxIGlmIHNvCisgKi8KK3N0YXRpYyB1aW50MzJfdAorc2N0cF9hZGRyX21hdGNoKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICpwaCwgc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKyNpZiBkZWZpbmVkKElO
RVQpIHx8IGRlZmluZWQoSU5FVDYpCisJdWludDE2X3QgcGFyYW1fdHlwZSwgcGFyYW1fbGVuZ3Ro
OworCisJcGFyYW1fdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKwlwYXJhbV9sZW5ndGgg
PSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKyNlbmRpZgorCXN3aXRjaCAoc2EtPnNhX2ZhbWls
eSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCS8qIFhYWCBzY29wZWlk
ICovCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAq
KXNhOworCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqdjZhZGRyOworCisJCXY2YWRkciA9
IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqKXBoOworCQlpZiAoKHBhcmFtX3R5cGUgPT0g
U0NUUF9JUFY2X0FERFJFU1MpICYmCisJCSAgICAocGFyYW1fbGVuZ3RoID09IHNpemVvZihzdHJ1
Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkpICYmCisJCSAgICAobWVtY21wKCZ2NmFkZHItPmFkZHIs
ICZzaW42LT5zaW42X2FkZHIsCisJCSAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgPT0gMCkp
IHsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5F
VAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKXNhOworCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqdjRhZGRy
OworCisJCXY0YWRkciA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoOworCQlpZiAo
KHBhcmFtX3R5cGUgPT0gU0NUUF9JUFY0X0FERFJFU1MpICYmCisJCSAgICAocGFyYW1fbGVuZ3Ro
ID09IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkpICYmCisJCSAgICAobWVtY21w
KCZ2NGFkZHItPmFkZHIsICZzaW4tPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9h
ZGRyKSkgPT0gMCkpIHsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJYnJlYWs7CisJfQorI2VuZGlm
CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisvKgorICogQ2xlYW51
cCBmb3Igbm9uLXJlc3BvbmRlZC9PUCBFUlInZCBBU0NPTkYKKyAqLwordm9pZAorc2N0cF9hc2Nv
bmZfY2xlYW51cChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkK
K3sKKwkvKgorCSAqIGNsZWFyIG91dCBhbnkgZXhpc3RpbmcgYXNjb25mcyBnb2luZyBvdXQKKwkg
Ki8KKwlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0cF9l
cCwgc3RjYiwgbmV0LAorCQkJU0NUUF9GUk9NX1NDVFBfQVNDT05GICsgU0NUUF9MT0NfMik7CisJ
c3RjYi0+YXNvYy5hc2NvbmZfc2VxX291dF9hY2tlZCA9IHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9v
dXQ7CisJLyogcmVtb3ZlIHRoZSBvbGQgQVNDT05GIG9uIG91ciBvdXRib3VuZCBxdWV1ZSAqLwor
CXNjdHBfdG9zc19vbGRfYXNjb25mKHN0Y2IpOworfQorCisvKgorICogY2xlYW51cCBhbnkgY2Fj
aGVkIHNvdXJjZSBhZGRyZXNzZXMgdGhhdCBtYXkgYmUgdG9wb2xvZ2ljYWxseQorICogaW5jb3Jy
ZWN0IGFmdGVyIGEgbmV3IGFkZHJlc3MgaGFzIGJlZW4gYWRkZWQgdG8gdGhpcyBpbnRlcmZhY2Uu
CisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX2FzY29uZl9uZXRzX2NsZWFudXAoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZm4gKmlmbikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7CisKKwkvKgorCSAqIElkZWFsbHksIHdlIHdhbnQgdG8gb25seSBjbGVhciBjYWNoZWQgcm91
dGVzIGFuZCBzb3VyY2UgYWRkcmVzc2VzCisJICogdGhhdCBhcmUgdG9wb2xvZ2ljYWxseSBpbmNv
cnJlY3QuICBCdXQgc2luY2UgdGhlcmUgaXMgbm8gZWFzeSB3YXkKKwkgKiB0byBrbm93IHdoZXRo
ZXIgdGhlIG5ld2x5IGFkZGVkIGFkZHJlc3Mgb24gdGhlIGlmbiB3b3VsZCBjYXVzZSBhCisJICog
cm91dGluZyBjaGFuZ2UgKGkuZS4gYSBuZXcgZWdyZXNzIGludGVyZmFjZSB3b3VsZCBiZSBjaG9z
ZW4pCisJICogd2l0aG91dCBkb2luZyBhIG5ldyByb3V0aW5nIGxvb2t1cCBhbmQgc291cmNlIGFk
ZHJlc3Mgc2VsZWN0aW9uLAorCSAqIHdlIHdpbGwgKGZvciBub3cpIGp1c3QgZmx1c2ggYW55IGNh
Y2hlZCByb3V0ZSB1c2luZyBhIGRpZmZlcmVudAorCSAqIGlmbiAoYW5kIGNhY2hlZCBzb3VyY2Ug
YWRkcnMpIGFuZCBsZXQgb3V0cHV0IHJlLWNob29zZSB0aGVtIGR1cmluZworCSAqIHRoZSBuZXh0
IHNlbmQgb24gdGhhdCBuZXQuCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKgorCQkgKiBjbGVhciBhbnkgY2FjaGVkIHJvdXRlIChh
bmQgY2FjaGVkIHNvdXJjZSBhZGRyZXNzKSBpZiB0aGUKKwkJICogcm91dGUncyBpbnRlcmZhY2Ug
aXMgTk9UIHRoZSBzYW1lIGFzIHRoZSBhZGRyZXNzIGNoYW5nZS4KKwkJICogSWYgaXQncyB0aGUg
c2FtZSBpbnRlcmZhY2UsIGp1c3QgY2xlYXIgdGhlIGNhY2hlZCBzb3VyY2UKKwkJICogYWRkcmVz
cy4KKwkJICovCisJCWlmIChTQ1RQX1JPVVRFX0hBU19WQUxJRF9JRk4oJm5ldC0+cm8pICYmCisJ
CSAgICAoKGlmbiA9PSBOVUxMKSB8fAorCQkgICAgIChTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JP
VVRFKCZuZXQtPnJvKSAhPSBpZm4tPmlmbl9pbmRleCkpKSB7CisJCQkvKiBjbGVhciBhbnkgY2Fj
aGVkIHJvdXRlICovCisJCQlSVEZSRUUobmV0LT5yby5yb19ydCk7CisJCQluZXQtPnJvLnJvX3J0
ID0gTlVMTDsKKwkJfQorCQkvKiBjbGVhciBhbnkgY2FjaGVkIHNvdXJjZSBhZGRyZXNzICovCisJ
CWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7CisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8u
X3NfYWRkcik7CisJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJbmV0LT5zcmNfYWRkcl9z
ZWxlY3RlZCA9IDA7CisJCX0KKwl9Cit9CisKKwordm9pZAorc2N0cF9hc3NvY19pbW1lZGlhdGVf
cmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKmRzdG5ldCkK
K3sKKwlpbnQgZXJyb3I7CisKKwlpZiAoZHN0bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VO
Q09ORklSTUVEKSB7CisJCXJldHVybjsKKwl9CisJaWYgKHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmlt
YXJ5ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCWlmICghVEFJTFFfRU1QVFkoJnN0Y2It
PmFzb2Muc2VudF9xdWV1ZSkpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJhc3Nv
Y19pbW1lZGlhdGVfcmV0cmFuczogRGVsZXRlZCBwcmltYXJ5IGlzICIpOworCQlTQ1RQREJHX0FE
RFIoU0NUUF9ERUJVR19BU0NPTkYxLCAmc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnktPnJvLl9s
X2FkZHIuc2EpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgIkN1cnJlbnQgUHJpbWFy
eSBpcyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMSwgJnN0Y2ItPmFzb2Mu
cHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRkci5zYSk7CisJCXNjdHBfdGltZXJfc3RvcChT
Q1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQlzdGNiLT5hc29j
LmRlbGV0ZWRfcHJpbWFyeSwKKwkJCQlTQ1RQX0ZST01fU0NUUF9BU0NPTkYgKyBTQ1RQX0xPQ18z
KTsKKwkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAtLTsKKwkJaWYgKHN0Y2ItPmFzb2Mu
bnVtX3NlbmRfdGltZXJzX3VwIDwgMCkgeworCQkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNf
dXAgPSAwOworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCQllcnJvciA9IHNj
dHBfdDNyeHRfdGltZXIoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJc3RjYi0+YXNvYy5kZWxl
dGVkX3ByaW1hcnkpOworCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKHN0Y2It
PnNjdHBfZXApOworCQkJcmV0dXJuOworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2Ip
OworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIHN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5KTsKKyNlbmRpZgorCQlz
Y3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1Qz
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlpZiAoKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJz
X3VwID09IDApICYmCisJCSAgICAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCA+IDApKSB7CisJ
CQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwkJCWNoayA9IFRBSUxRX0ZJUlNUKCZz
dGNiLT5hc29jLnNlbnRfcXVldWUpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKKwkJCQkJIHN0Y2IsIGNoay0+d2hvVG8pOworCQl9CisJ
fQorCXJldHVybjsKK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitzdGF0aWMgaW50CitzY3RwX2FzY29u
Zl9xdWV1ZV9tZ210KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9pZmEgKiwgdWludDE2
X3QpOworCit2b2lkCitzY3RwX25ldF9pbW1lZGlhdGVfcmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGs7CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgIm5ldF9pbW1lZGlhdGVfcmV0
cmFuczogUlRPIGlzICVkXG4iLCBuZXQtPlJUTyk7CisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiArIFNDVFBfTE9DXzQpOworCXN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RjYiwgbmV0KTsKKwluZXQtPmVycm9y
X2NvdW50ID0gMDsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCWlmIChjaGstPndob1RvID09IG5ldCkgeworCQkJaWYgKGNoay0+c2Vu
dCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JB
TV9SRVNFTkQ7CisJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCk7CisJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZShjaGspOworCQkJCXNjdHBf
dG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7CisJCQkJbmV0LT5tYXJrZWRfcmV0cmFu
cysrOworCQkJCXN0Y2ItPmFzb2MubWFya2VkX3JldHJhbnMrKzsKKwkJCX0KKwkJfQorCX0KKwlp
ZiAobmV0LT5tYXJrZWRfcmV0cmFucykgeworCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0K
K30KKworc3RhdGljIHZvaWQKK3NjdHBfcGF0aF9jaGVja19hbmRfcmVhY3Qoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKm5ld2lmYSkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7CisJaW50IGFkZHJudW0sIGNoYW5nZWQ7CisKKwkvKiAgIElmIG51bWJlciBvZiBsb2Nh
bCB2YWxpZCBhZGRyZXNzZXMgaXMgMSwgdGhlIHZhbGlkIGFkZHJlc3MgaXMKKwkgICAgIHByb2Jh
Ymx5IG5ld2x5IGFkZGVkIGFkZHJlc3MuCisJICAgICBTZXZlcmFsIHZhbGlkIGFkZHJlc3NlcyBp
biB0aGlzIGFzc29jaWF0aW9uLiAgQSBzb3VyY2UgYWRkcmVzcworCSAgICAgbWF5IG5vdCBiZSBj
aGFuZ2VkLiAgQWRkaXRpb25hbGx5LCB0aGV5IGNhbiBiZSBjb25maWd1cmVkIG9uIGEKKwkgICAg
IHNhbWUgaW50ZXJmYWNlIGFzICJhbGlhcyIgYWRkcmVzc2VzLiAgKGJ5IG1pY2NoaWUpCisJICov
CisJYWRkcm51bSA9IHNjdHBfbG9jYWxfYWRkcl9jb3VudChzdGNiKTsKKwlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMSwgInBfY2hlY2tfcmVhY3QoKTogJWQgbG9jYWwgYWRkcmVzc2VzXG4iLAor
CQlhZGRybnVtKTsKKwlpZiAoYWRkcm51bSA9PSAxKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
c3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCS8qIGNsZWFyIGFueSBjYWNoZWQgcm91
dGUgYW5kIHNvdXJjZSBhZGRyZXNzICovCisJCQlpZiAobmV0LT5yby5yb19ydCkgeworCQkJCVJU
RlJFRShuZXQtPnJvLnJvX3J0KTsKKwkJCQluZXQtPnJvLnJvX3J0ID0gTlVMTDsKKwkJCX0KKwkJ
CWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkKSB7CisJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJv
Ll9zX2FkZHIpOworCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJbmV0LT5zcmNfYWRk
cl9zZWxlY3RlZCA9IDA7CisJCQl9CisJCQkvKiBSZXRyYW5zbWl0IHVuYWNrbm93bGVkZ2VkIERB
VEEgY2h1bmtzIGltbWVkaWF0ZWx5ICovCisJCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJl
X29uKHN0Y2ItPnNjdHBfZXAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFND
VFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSB7CisJCQkJc2N0cF9uZXRfaW1tZWRpYXRlX3JldHJh
bnMoc3RjYiwgbmV0KTsKKwkJCX0KKwkJCS8qIGFsc28sIFNFVCBQUklNQVJZIGlzIG1heWJlIGFs
cmVhZHkgc2VudCAqLworCQl9CisJCXJldHVybjsKKwl9CisKKwkvKiBNdWx0aXBsZSBsb2NhbCBh
ZGRyZXNzZXMgZXhzaXN0IGluIHRoZSBhc3NvY2lhdGlvbi4gICovCisJVEFJTFFfRk9SRUFDSChu
ZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkvKiBjbGVhciBhbnkgY2FjaGVk
IHJvdXRlIGFuZCBzb3VyY2UgYWRkcmVzcyAqLworCQlpZiAobmV0LT5yby5yb19ydCkgeworCQkJ
UlRGUkVFKG5ldC0+cm8ucm9fcnQpOworCQkJbmV0LT5yby5yb19ydCA9IE5VTEw7CisJCX0KKwkJ
aWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsKKwkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5f
c19hZGRyKTsKKwkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQluZXQtPnNyY19hZGRyX3Nl
bGVjdGVkID0gMDsKKwkJfQorCQkvKiBDaGVjayBpZiB0aGUgbmV4dGhvcCBpcyBjb3JyZXNwb25k
aW5nIHRvIHRoZSBuZXcgYWRkcmVzcy4KKwkJICAgSWYgdGhlIG5ldyBhZGRyZXNzIGlzIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIGN1cnJlbnQgbmV4dGhvcCwKKwkJICAgdGhlIHBhdGggd2lsbCBiZSBj
aGFuZ2VkLgorCQkgICBJZiB0aGUgbmV3IGFkZHJlc3MgaXMgTk9UIGNvcnJlc3BvbmRpbmcgdG8g
dGhlIGN1cnJlbnQKKwkJICAgbmV4dGhvcCwgdGhlIHBhdGggd2lsbCBub3QgYmUgY2hhbmdlZC4K
KwkJICovCisJCVNDVFBfUlRBTExPQygoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkgICAg
IHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZfaWQsCisJCQkgICAgIHN0Y2ItPnNjdHBfZXAtPmZpYm51
bSk7CisJCWlmIChuZXQtPnJvLnJvX3J0ID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQljaGFu
Z2VkID0gMDsKKwkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlpZiAoc2N0cF92NHNyY19tYXRjaF9uZXh0aG9w
KG5ld2lmYSwgKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvKSkgeworCQkJCWNoYW5nZWQgPSAxOwor
CQkJfQorCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2Ogor
CQkJaWYgKHNjdHBfdjZzcmNfbWF0Y2hfbmV4dGhvcCgKKwkJCSAgICAmbmV3aWZhLT5hZGRyZXNz
LnNpbjYsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybykpIHsKKwkJCQljaGFuZ2VkID0gMTsKKwkJ
CX0KKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCQkvKiBp
ZiB0aGUgbmV3bHkgYWRkZWQgYWRkcmVzcyBkb2VzIG5vdCByZWxhdGUgcm91dGluZworCQkgICBp
bmZvcm1hdGlvbiwgd2Ugc2tpcC4KKwkJICovCisJCWlmIChjaGFuZ2VkID09IDApCisJCQljb250
aW51ZTsKKwkJLyogUmV0cmFuc21pdCB1bmFja25vd2xlZGdlZCBEQVRBIGNodW5rcyBpbW1lZGlh
dGVseSAqLworCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9GQVNUSEFO
RE9GRikpIHsKKwkJCXNjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsIG5ldCk7CisJCX0K
KwkJLyogU2VuZCBTRVQgUFJJTUFSWSBmb3IgdGhpcyBuZXcgYWRkcmVzcyAqLworCQlpZiAobmV0
ID09IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikgeworCQkJKHZvaWQpc2N0cF9hc2Nv
bmZfcXVldWVfbWdtdChzdGNiLCBuZXdpZmEsCisJCQkJCQkgICAgIFNDVFBfU0VUX1BSSU1fQURE
Uik7CisJCX0KKwl9Cit9CisjZW5kaWYgLyogX19GcmVlQlNEX18gIF9fQVBQTEVfXyAgX19Vc2Vy
c3BhY2VfXyAqLworCisvKgorICogcHJvY2VzcyBhbiBBREQvREVMRVRFIElQIGFjayBmcm9tIHBl
ZXIuCisgKiBhZGRyOiBjb3JyZXNwb25kaW5nIHNjdHBfaWZhIHRvIHRoZSBhZGRyZXNzIGJlaW5n
IGFkZGVkL2RlbGV0ZWQuCisgKiB0eXBlOiBTQ1RQX0FERF9JUF9BRERSRVNTIG9yIFNDVFBfREVM
X0lQX0FERFJFU1MuCisgKiBmbGFnOiAxPXN1Y2Nlc3MsIDA9ZmFpbHVyZS4KKyAqLworc3RhdGlj
IHZvaWQKK3NjdHBfYXNjb25mX2FkZHJfbWdtdF9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9pZmEgKmFkZHIsIHVpbnQzMl90IGZsYWcpCit7CisJLyoKKwkgKiBkbyB0aGUg
bmVjZXNzYXJ5IGFzb2MgbGlzdCB3b3JrLSBpZiB3ZSBnZXQgYSBmYWlsdXJlIGluZGljYXRpb24s
CisJICogbGVhdmUgdGhlIGFkZHJlc3Mgb24gdGhlIGFzc29jJ3MgcmVzdHJpY3RlZCBsaXN0LiAg
SWYgd2UgZ2V0IGEKKwkgKiBzdWNjZXNzIGluZGljYXRpb24sIHJlbW92ZSB0aGUgYWRkcmVzcyBm
cm9tIHRoZSByZXN0cmljdGVkIGxpc3QuCisJICovCisJLyoKKwkgKiBOb3RlOiB0aGlzIHdpbGwg
b25seSBvY2N1ciBmb3IgQUREX0lQX0FERFJFU1MsIHNpbmNlCisJICogREVMX0lQX0FERFJFU1Mg
aXMgbmV2ZXIgYWN0dWFsbHkgYWRkZWQgdG8gdGhlIGxpc3QuLi4KKwkgKi8KKwlpZiAoZmxhZykg
eworCQkvKiBzdWNjZXNzIGNhc2UsIHNvIHJlbW92ZSBmcm9tIHRoZSByZXN0cmljdGVkIGxpc3Qg
Ki8KKwkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFkZHIpOworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJaWYgKHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3Rw
X2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFT
RSkgfHwKKwkJICAgIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRP
RkYpKSB7CisJCQlzY3RwX3BhdGhfY2hlY2tfYW5kX3JlYWN0KHN0Y2IsIGFkZHIpOworCQkJcmV0
dXJuOworCQl9CisjZW5kaWYgLyogX19GcmVlQlNEX18gX19BUFBMRV9fIF9fVXNlcnNwYWNlX18g
Ki8KKwkJLyogY2xlYXIgYW55IGNhY2hlZC90b3BvbG9naWNhbGx5IGluY29ycmVjdCBzb3VyY2Ug
YWRkcmVzc2VzICovCisJCXNjdHBfYXNjb25mX25ldHNfY2xlYW51cChzdGNiLCBhZGRyLT5pZm5f
cCk7CisJfQorCS8qIGVsc2UsIGxlYXZlIGl0IG9uIHRoZSBsaXN0ICovCit9CisKKy8qCisgKiBh
ZGQgYW4gYXNjb25mIGFkZC9kZWxldGUvc2V0IHByaW1hcnkgSVAgYWRkcmVzcyBwYXJhbWV0ZXIg
dG8gdGhlIHF1ZXVlLgorICogdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVMX0lQ
X0FERFJFU1MsIFNDVFBfU0VUX1BSSU1fQUREUi4KKyAqIHJldHVybnMgMCBpZiBxdWV1ZWQsIC0x
IGlmIG5vdCBxdWV1ZWQvcmVtb3ZlZC4KKyAqIE5PVEU6IGlmIGFkZGluZywgYnV0IGEgZGVsZXRl
IGZvciB0aGUgc2FtZSBhZGRyZXNzIGlzIGFscmVhZHkgc2NoZWR1bGVkCisgKiAoYW5kIG5vdCB5
ZXQgc2VudCBvdXQpLCBzaW1wbHkgcmVtb3ZlIGl0IGZyb20gcXVldWUuICBTYW1lIGZvciBkZWxl
dGluZworICogYW4gYWRkcmVzcyBhbHJlYWR5IHNjaGVkdWxlZCBmb3IgYWRkLiAgSWYgYSBkdXBs
aWNhdGUgb3BlcmF0aW9uIGlzIGZvdW5kLAorICogaWdub3JlIHRoZSBuZXcgb25lLgorICovCitz
dGF0aWMgaW50CitzY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNjdHBfaWZhICppZmEsCisJCSAgICAgICB1aW50MTZfdCB0eXBlKQoreworCXN0cnVj
dCBzY3RwX2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7CisKKwkvKiBtYWtlIHN1cmUgdGhlIHJl
cXVlc3QgaXNuJ3QgYWxyZWFkeSBpbiB0aGUgcXVldWUgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUo
YWEsICZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgbmV4dCwgYWFfbmV4dCkgeworCQkvKiBhZGRy
ZXNzIG1hdGNoPyAqLworCQlpZiAoc2N0cF9hc2NvbmZfYWRkcl9tYXRjaChhYSwgJmlmYS0+YWRk
cmVzcy5zYSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVxdWVzdCBhbHJlYWR5
IGluIHF1ZXVlIGJ1dCBub3Qgc2VudD8KKwkJICogcGFzcyB0aGUgcmVxdWVzdCBhbHJlYWR5IHNl
bnQgaW4gb3JkZXIgdG8gcmVzb2x2ZSB0aGUgZm9sbG93aW5nIGNhc2U6CisJCSAqICAxLiBhcnJp
dmFsIG9mIEFERCwgdGhlbiBzZW50CisJCSAqICAyLiBhcnJpdmFsIG9mIERFTC4gd2UgY2FuJ3Qg
cmVtb3ZlIHRoZSBBREQgcmVxdWVzdCBhbHJlYWR5IHNlbnQKKwkJICogIDMuIGFycml2YWwgb2Yg
QURECisJCSAqLworCQlpZiAoYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID09IHR5cGUgJiYgYWEt
PnNlbnQgPT0gMCkgeworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogaXMgdGhlIG5lZ2F0aXZl
IHJlcXVlc3QgYWxyZWFkeSBpbiBxdWV1ZSwgYW5kIG5vdCBzZW50ICovCisJCWlmICgoYWEtPnNl
bnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgJiYKKwkJICAgIChhYS0+
YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0gU0NUUF9ERUxfSVBfQUREUkVTUykpIHsKKwkJCS8qIGFk
ZCByZXF1ZXN0ZWQsIGRlbGV0ZSBhbHJlYWR5IHF1ZXVlZCAqLworCQkJVEFJTFFfUkVNT1ZFKCZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOworCQkJLyogcmVtb3ZlIHRoZSBpZmEg
ZnJvbSB0aGUgcmVzdHJpY3RlZCBsaXN0ICovCisJCQlzY3RwX2RlbF9sb2NhbF9hZGRyX3Jlc3Ry
aWN0ZWQoc3RjYiwgaWZhKTsKKwkJCS8qIGZyZWUgdGhlIGFzY29uZiBwYXJhbSAqLworCQkJU0NU
UF9GUkVFKGFhLCBTQ1RQX01fQVNDX0FERFIpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjIsICJhc2NvbmZfcXVldWVfbWdtdDogYWRkIHJlbW92ZXMgcXVldWVkIGVudHJ5XG4iKTsKKwkJ
CXJldHVybiAoLTEpOworCQl9CisJCWlmICgoYWEtPnNlbnQgPT0gMCkgJiYgKHR5cGUgPT0gU0NU
UF9ERUxfSVBfQUREUkVTUykgJiYKKwkJICAgIChhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPT0g
U0NUUF9BRERfSVBfQUREUkVTUykpIHsKKwkJCS8qIGRlbGV0ZSByZXF1ZXN0ZWQsIGFkZCBhbHJl
YWR5IHF1ZXVlZCAqLworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwg
YWEsIG5leHQpOworCQkJLyogcmVtb3ZlIHRoZSBhYS0+aWZhIGZyb20gdGhlIHJlc3RyaWN0ZWQg
bGlzdCAqLworCQkJc2N0cF9kZWxfbG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEp
OworCQkJLyogZnJlZSB0aGUgYXNjb25mIHBhcmFtICovCisJCQlTQ1RQX0ZSRUUoYWEsIFNDVFBf
TV9BU0NfQUREUik7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1
ZV9tZ210OiBkZWxldGUgcmVtb3ZlcyBxdWV1ZWQgZW50cnlcbiIpOworCQkJcmV0dXJuICgtMSk7
CisJCX0KKwl9IC8qIGZvciBlYWNoIGFhICovCisKKwkvKiBhZGRpbmcgbmV3IHJlcXVlc3QgdG8g
dGhlIHF1ZXVlICovCisJU0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICos
IHNpemVvZigqYWEpLAorCQkgICAgU0NUUF9NX0FTQ19BRERSKTsKKwlpZiAoYWEgPT0gTlVMTCkg
eworCQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05G
MSwgImFzY29uZl9xdWV1ZV9tZ210OiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIpOworCQlyZXR1
cm4gKC0xKTsKKwl9CisJYWEtPnNwZWNpYWxfZGVsID0gMDsKKwkvKiBmaWxsIGluIGFzY29uZiBh
ZGRyZXNzIHBhcmFtZXRlciBmaWVsZHMgKi8KKwkvKiB0b3AgbGV2ZWwgZWxlbWVudHMgYXJlICJu
ZXR3b3JrZWQiIGR1cmluZyBzZW5kICovCisJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gdHlw
ZTsKKwlhYS0+aWZhID0gaWZhOworCWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsK
KwkvKiBjb3JyZWxhdGlvbl9pZCBmaWxsZWQgaW4gZHVyaW5nIHNlbmQgcm91dGluZSBsYXRlci4u
LiAqLworCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2
CisJY2FzZSBBRl9JTkVUNjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJ
c2luNiA9ICZpZmEtPmFkZHJlc3Muc2luNjsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUg
PSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJYWEtPmFwLmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKTsKKwkJYWEtPmFwLmFwaC5waC5wYXJh
bV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSArCisJCSAgICBz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pOworCQltZW1jcHkoJmFhLT5hcC5hZGRy
cC5hZGRyLCAmc2luNi0+c2luNl9hZGRyLAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRk
cikpOworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgor
CXsKKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJc2luID0gJmlmYS0+YWRkcmVzcy5z
aW47CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJ
CWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSAoc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtKSk7CisJCWFhLT5hcC5hcGgucGgucGFyYW1fbGVuZ3RoID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2FzY29uZl9wYXJhbWhkcikgKworCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtKTsKKwkJbWVtY3B5KCZhYS0+YXAuYWRkcnAuYWRkciwgJnNpbi0+c2luX2FkZHIs
CisJCSAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJYnJlYWs7CisJfQorI2VuZGlm
CisJZGVmYXVsdDoKKwkJLyogaW52YWxpZCBmYW1pbHkhICovCisJCVNDVFBfRlJFRShhYSwgU0NU
UF9NX0FTQ19BRERSKTsKKwkJc2N0cF9mcmVlX2lmYShpZmEpOworCQlyZXR1cm4gKC0xKTsKKwl9
CisJYWEtPnNlbnQgPSAwOwkJLyogY2xlYXIgc2VudCBmbGFnICovCisKKwlUQUlMUV9JTlNFUlRf
VEFJTCgmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIGFhLCBuZXh0KTsKKyNpZmRlZiBTQ1RQX0RF
QlVHCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FT
Q09ORjIpIHsKKwkJaWYgKHR5cGUgPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJU0NUUF9Q
UklOVEYoImFzY29uZl9xdWV1ZV9tZ210OiBpbnNlcnRlZCBhc2NvbmYgQUREX0lQX0FERFJFU1M6
ICIpOworCQkJU0NUUERCR19BRERSKFNDVFBfREVCVUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5z
YSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlTQ1RQ
X1BSSU5URigiYXNjb25mX3F1ZXVlX21nbXQ6IGFwcGVuZGVkIGFzY29uZiBERUxfSVBfQUREUkVT
UzogIik7CisJCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19BU0NPTkYyLCAmaWZhLT5hZGRyZXNz
LnNhKTsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfUFJJTlRGKCJhc2NvbmZfcXVldWVfbWdtdDogYXBw
ZW5kZWQgYXNjb25mIFNFVF9QUklNX0FERFI6ICIpOworCQkJU0NUUERCR19BRERSKFNDVFBfREVC
VUdfQVNDT05GMiwgJmlmYS0+YWRkcmVzcy5zYSk7CisJCX0KKwl9CisjZW5kaWYKKworCXJldHVy
biAoMCk7Cit9CisKKworLyoKKyAqIGFkZCBhbiBhc2NvbmYgb3BlcmF0aW9uIGZvciB0aGUgZ2l2
ZW4gaWZhIGFuZCB0eXBlLgorICogdHlwZSA9IFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfREVM
X0lQX0FERFJFU1MsIFNDVFBfU0VUX1BSSU1fQUREUi4KKyAqIHJldHVybnMgMCBpZiBjb21wbGV0
ZWQsIC0xIGlmIG5vdCBjb21wbGV0ZWQsIDEgaWYgaW1tZWRpYXRlIHNlbmQgaXMKKyAqIGFkdmlz
YWJsZS4KKyAqLworc3RhdGljIGludAorc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEsCisJCSAgICAgIHVpbnQxNl90IHR5cGUp
Cit7CisJdWludDMyX3Qgc3RhdHVzOworCWludCBwZW5kaW5nX2RlbGV0ZV9xdWV1ZWQgPSAwOwor
CWludCBsYXN0OworCisJLyogc2VlIGlmIHBlZXIgc3VwcG9ydHMgQVNDT05GICovCisJaWYgKHN0
Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKwor
CS8qCisJICogaWYgdGhpcyBpcyBkZWxldGluZyB0aGUgbGFzdCBhZGRyZXNzIGZyb20gdGhlIGFz
c29jLCBtYXJrIGl0IGFzCisJICogcGVuZGluZy4KKwkgKi8KKwlpZiAoKHR5cGUgPT0gU0NUUF9E
RUxfSVBfQUREUkVTUykgJiYgIXN0Y2ItPmFzb2MuYXNjb25mX2RlbF9wZW5kaW5nKSB7CisJCWlm
IChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsK
KwkJCWxhc3QgPSAoc2N0cF9sb2NhbF9hZGRyX2NvdW50KHN0Y2IpID09IDApOworCQl9IGVsc2Ug
eworCQkJbGFzdCA9IChzY3RwX2xvY2FsX2FkZHJfY291bnQoc3RjYikgPT0gMSk7CisJCX0KKwkJ
aWYgKGxhc3QpIHsKKwkJCS8qIHNldCB0aGUgcGVuZGluZyBkZWxldGUgaW5mbyBvbmx5ICovCisJ
CQlzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyA9IDE7CisJCQlzdGNiLT5hc29jLmFzY29u
Zl9hZGRyX2RlbF9wZW5kaW5nID0gaWZhOworCQkJYXRvbWljX2FkZF9pbnQoJmlmYS0+cmVmY291
bnQsIDEpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjIsCisJCQkJImFzY29uZl9xdWV1
ZV9hZGQ6IG1hcmsgZGVsZXRlIGxhc3QgYWRkcmVzcyBwZW5kaW5nXG4iKTsKKwkJCXJldHVybiAo
LTEpOworCQl9CisJfQorCisJLyogcXVldWUgYW4gYXNjb25mIHBhcmFtZXRlciAqLworCXN0YXR1
cyA9IHNjdHBfYXNjb25mX3F1ZXVlX21nbXQoc3RjYiwgaWZhLCB0eXBlKTsKKworCS8qCisJICog
aWYgdGhpcyBpcyBhbiBhZGQsIGFuZCB0aGVyZSBpcyBhIGRlbGV0ZSBhbHNvIHBlbmRpbmcgKGku
ZS4gdGhlCisJICogbGFzdCBsb2NhbCBhZGRyZXNzIGlzIGJlaW5nIGNoYW5nZWQpLCBxdWV1ZSB0
aGUgcGVuZGluZyBkZWxldGUgdG9vLgorCSAqLworCWlmICgodHlwZSA9PSBTQ1RQX0FERF9JUF9B
RERSRVNTKSAmJiBzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVuZGluZyAmJiAoc3RhdHVzID09IDAp
KSB7CisJCS8qIHF1ZXVlIGluIHRoZSBwZW5kaW5nIGRlbGV0ZSAqLworCQlpZiAoc2N0cF9hc2Nv
bmZfcXVldWVfbWdtdChzdGNiLAorCQkJCQkgICBzdGNiLT5hc29jLmFzY29uZl9hZGRyX2RlbF9w
ZW5kaW5nLAorCQkJCQkgICBTQ1RQX0RFTF9JUF9BRERSRVNTKSA9PSAwKSB7CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfQVNDT05GMiwgImFzY29uZl9xdWV1ZV9hZGQ6IHF1ZWluZyBwZW5kaW5nIGRl
bGV0ZVxuIik7CisJCQlwZW5kaW5nX2RlbGV0ZV9xdWV1ZWQgPSAxOworCQkJLyogY2xlYXIgb3V0
IHRoZSBwZW5kaW5nIGRlbGV0ZSBpbmZvICovCisJCQlzdGNiLT5hc29jLmFzY29uZl9kZWxfcGVu
ZGluZyA9IDA7CisJCQlzY3RwX2ZyZWVfaWZhKHN0Y2ItPmFzb2MuYXNjb25mX2FkZHJfZGVsX3Bl
bmRpbmcpOworCQkJc3RjYi0+YXNvYy5hc2NvbmZfYWRkcl9kZWxfcGVuZGluZyA9IE5VTEw7CisJ
CX0KKwl9CisKKwlpZiAocGVuZGluZ19kZWxldGVfcXVldWVkKSB7CisJCXN0cnVjdCBzY3RwX25l
dHMgKm5ldDsKKwkJLyoKKwkJICogc2luY2Ugd2Uga25vdyB0aGF0IHRoZSBvbmx5L2xhc3QgYWRk
cmVzcyBpcyBub3cgYmVpbmcKKwkJICogY2hhbmdlZCBpbiB0aGlzIGNhc2UsIHJlc2V0IHRoZSBj
d25kL3J0byBvbiBhbGwgbmV0cyB0bworCQkgKiBzdGFydCBhcyBhIG5ldyBhZGRyZXNzIGFuZCBw
YXRoLiAgQWxzbyBjbGVhciB0aGUgZXJyb3IKKwkJICogY291bnRzIHRvIGdpdmUgdGhlIGFzc29j
IHRoZSBiZXN0IGNoYW5jZSB0byBjb21wbGV0ZSB0aGUKKwkJICogYWRkcmVzcyBjaGFuZ2UuCisJ
CSAqLworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0
Y2IsCisJCQkJCQkJCQkgIG5ldCk7CisJCQluZXQtPlJUTyA9IDA7CisJCQluZXQtPmVycm9yX2Nv
dW50ID0gMDsKKwkJfQorCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9USFJFU0hPTERf
TE9HR0lORykgeworCQkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCQkJ
ICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkgICAgICAgMCwKKwkJ
CQkgICAgICAgU0NUUF9GUk9NX1NDVFBfQVNDT05GLAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJ
CX0KKworCQkvKiBxdWV1ZSBpbiBhbiBhZHZpc29yeSBzZXQgcHJpbWFyeSB0b28gKi8KKwkJKHZv
aWQpc2N0cF9hc2NvbmZfcXVldWVfbWdtdChzdGNiLCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUik7
CisJCS8qIGxldCBjYWxsZXIga25vdyB3ZSBzaG91bGQgc2VuZCB0aGlzIG91dCBpbW1lZGlhdGVs
eSAqLworCQlzdGF0dXMgPSAxOworCX0KKwlyZXR1cm4gKHN0YXR1cyk7Cit9CisKKy8qLQorICog
YWRkIGFuIGFzY29uZiBkZWxldGUgSVAgYWRkcmVzcyBwYXJhbWV0ZXIgdG8gdGhlIHF1ZXVlIGJ5
IHNvY2thZGRyIGFuZAorICogcG9zc2libHkgd2l0aCBubyBzY3RwX2lmYSBhdmFpbGFibGUuICBU
aGlzIGlzIG9ubHkgY2FsbGVkIGJ5IHRoZSByb3V0aW5lCisgKiB0aGF0IGNoZWNrcyB0aGUgYWRk
cmVzc2VzIGluIGFuIElOSVQtQUNLIGFnYWluc3QgdGhlIGN1cnJlbnQgYWRkcmVzcyBsaXN0Lgor
ICogcmV0dXJucyAwIGlmIGNvbXBsZXRlZCwgbm9uLXplcm8gaWYgbm90IGNvbXBsZXRlZC4KKyAq
IE5PVEU6IGlmIGFuIGFkZCBpcyBhbHJlYWR5IHNjaGVkdWxlZCAoYW5kIG5vdCB5ZXQgc2VudCBv
dXQpLCBzaW1wbHkKKyAqIHJlbW92ZSBpdCBmcm9tIHF1ZXVlLiAgSWYgYSBkdXBsaWNhdGUgb3Bl
cmF0aW9uIGlzIGZvdW5kLCBpZ25vcmUgdGhlCisgKiBuZXcgb25lLgorICovCitzdGF0aWMgaW50
CitzY3RwX2FzY29uZl9xdWV1ZV9zYV9kZWxldGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc29ja2FkZHIgKnNhKQoreworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJl
dHVybiAoLTEpOworCX0KKwkvKiBzZWUgaWYgcGVlciBzdXBwb3J0cyBBU0NPTkYgKi8KKwlpZiAo
c3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsKKwkJcmV0dXJuICgtMSk7CisJfQor
CS8qIG1ha2Ugc3VyZSB0aGUgcmVxdWVzdCBpc24ndCBhbHJlYWR5IGluIHRoZSBxdWV1ZSAqLwor
CVRBSUxRX0ZPUkVBQ0hfU0FGRShhYSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBh
YV9uZXh0KSB7CisJCS8qIGFkZHJlc3MgbWF0Y2g/ICovCisJCWlmIChzY3RwX2FzY29uZl9hZGRy
X21hdGNoKGFhLCBzYSkgPT0gMCkKKwkJCWNvbnRpbnVlOworCQkvKiBpcyB0aGUgcmVxdWVzdCBh
bHJlYWR5IGluIHF1ZXVlIChzZW50IG9yIG5vdCkgKi8KKwkJaWYgKGFhLT5hcC5hcGgucGgucGFy
YW1fdHlwZSA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQor
CQkvKiBpcyB0aGUgbmVnYXRpdmUgcmVxdWVzdCBhbHJlYWR5IGluIHF1ZXVlLCBhbmQgbm90IHNl
bnQgKi8KKwkJaWYgKGFhLT5zZW50ID09IDEpCisJCQljb250aW51ZTsKKwkJaWYgKGFhLT5hcC5h
cGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGQgYWxy
ZWFkeSBxdWV1ZWQsIHNvIHJlbW92ZSBleGlzdGluZyBlbnRyeSAqLworCQkJVEFJTFFfUkVNT1ZF
KCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYWEsIG5leHQpOworCQkJc2N0cF9kZWxfbG9jYWxf
YWRkcl9yZXN0cmljdGVkKHN0Y2IsIGFhLT5pZmEpOworCQkJLyogZnJlZSB0aGUgZW50cnkgKi8K
KwkJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJCXJldHVybiAoLTEpOworCQl9
CisJfSAvKiBmb3IgZWFjaCBhYSAqLworCisJLyogZmluZCBhbnkgZXhpc3RpbmcgaWZhLS0gTk9U
RSBpZmEgQ0FOIGJlIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCWlmYSA9IHNjdHBfZmluZF9pZmFf
YnlfYWRkcihzYSwgc3RjYi0+YXNvYy52cmZfaWQsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwor
CS8qIGFkZGluZyBuZXcgcmVxdWVzdCB0byB0aGUgcXVldWUgKi8KKwlTQ1RQX01BTExPQyhhYSwg
c3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwgc2l6ZW9mKCphYSksCisJCSAgICBTQ1RQX01fQVND
X0FERFIpOworCWlmIChhYSA9PSBOVUxMKSB7CisJCS8qIGRpZG4ndCBnZXQgbWVtb3J5ICovCisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAorCQkJInNjdHBfYXNjb25mX3F1ZXVlX3NhX2Rl
bGV0ZTogZmFpbGVkIHRvIGdldCBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFh
LT5zcGVjaWFsX2RlbCA9IDA7CisJLyogZmlsbCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJhbWV0ZXIg
ZmllbGRzICovCisJLyogdG9wIGxldmVsIGVsZW1lbnRzIGFyZSAibmV0d29ya2VkIiBkdXJpbmcg
c2VuZCAqLworCWFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9IFNDVFBfREVMX0lQX0FERFJFU1M7
CisJYWEtPmlmYSA9IGlmYTsKKwlpZiAoaWZhKQorCQlhdG9taWNfYWRkX2ludCgmaWZhLT5yZWZj
b3VudCwgMSk7CisJLyogY29ycmVsYXRpb25faWQgZmlsbGVkIGluIGR1cmluZyBzZW5kIHJvdXRp
bmUgbGF0ZXIuLi4gKi8KKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgor
CWNhc2UgQUZfSU5FVDY6CisJeworCQkvKiBJUHY2IGFkZHJlc3MgKi8KKwkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilzYTsKKwkJ
YWEtPmFwLmFkZHJwLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJYWEtPmFw
LmFkZHJwLnBoLnBhcmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0pKTsKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBf
YXNjb25mX3BhcmFtaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSk7CisJ
CW1lbWNweSgmYWEtPmFwLmFkZHJwLmFkZHIsICZzaW42LT5zaW42X2FkZHIsCisJCSAgICBzaXpl
b2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisJeworCQkvKiBJUHY0IGFkZHJlc3MgKi8KKwkJc3RydWN0IHNvY2th
ZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc2E7CisKKwkJYWEtPmFwLmFkZHJw
LnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0lQVjRfQUREUkVTUzsKKwkJYWEtPmFwLmFkZHJwLnBoLnBh
cmFtX2xlbmd0aCA9IChzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKTsKKwkJYWEt
PmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFt
aGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSk7CisJCW1lbWNweSgmYWEt
PmFwLmFkZHJwLmFkZHIsICZzaW4tPnNpbl9hZGRyLAorCQkgICAgc2l6ZW9mKHN0cnVjdCBpbl9h
ZGRyKSk7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIGludmFsaWQgZmFt
aWx5ISAqLworCQlTQ1RQX0ZSRUUoYWEsIFNDVFBfTV9BU0NfQUREUik7CisJCWlmIChpZmEpCisJ
CQlzY3RwX2ZyZWVfaWZhKGlmYSk7CisJCXJldHVybiAoLTEpOworCX0KKwlhYS0+c2VudCA9IDA7
CQkvKiBjbGVhciBzZW50IGZsYWcgKi8KKworCS8qIGRlbGV0ZSBnb2VzIHRvIHRoZSBiYWNrIG9m
IHRoZSBxdWV1ZSAqLworCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1
ZSwgYWEsIG5leHQpOworCisJLyogc2FfaWdub3JlIE1FTUxFQUsge21lbW9yeSBpcyBwdXQgb24g
dGhlIHRhaWxxfSAqLworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBmaW5kIGEgc3BlY2lmaWMg
YXNjb25mIHBhcmFtIG9uIG91ciAic2VudCIgcXVldWUKKyAqLworc3RhdGljIHN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRyICoKK3NjdHBfYXNjb25mX2ZpbmRfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50MzJfdCBjb3JyZWxhdGlvbl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRk
ciAqYWE7CisKKwlUQUlMUV9GT1JFQUNIKGFhLCAmc3RjYi0+YXNvYy5hc2NvbmZfcXVldWUsIG5l
eHQpIHsKKwkJaWYgKGFhLT5hcC5hcGguY29ycmVsYXRpb25faWQgPT0gY29ycmVsYXRpb25faWQg
JiYKKwkJICAgIGFhLT5zZW50ID09IDEpIHsKKwkJCS8qIGZvdW5kIGl0ICovCisJCQlyZXR1cm4g
KGFhKTsKKwkJfQorCX0KKwkvKiBkaWRuJ3QgZmluZCBpdCAqLworCXJldHVybiAoTlVMTCk7Cit9
CisKKy8qCisgKiBwcm9jZXNzIGFuIFNDVFBfRVJST1JfQ0FVU0VfSU5EIGZvciBhIEFTQ09ORi1B
Q0sgcGFyYW1ldGVyIGFuZCBkbworICogbm90aWZpY2F0aW9ucyBiYXNlZCBvbiB0aGUgZXJyb3Ig
cmVzcG9uc2UKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfYXNjb25mX3Byb2Nlc3NfZXJyb3Ioc3Ry
dWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELAorCQkJICBzdHJ1Y3Qgc2N0cF9hc2NvbmZf
cGFyYW1oZHIgKmFwaCkKK3sKKwlzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqZWg7CisJc3RydWN0
IHNjdHBfcGFyYW1oZHIgKnBoOworCXVpbnQxNl90IHBhcmFtX3R5cGU7CisJdWludDE2X3QgZXJy
b3JfY29kZTsKKworCWVoID0gKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICopKGFwaCArIDEpOwor
CXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKGVoICsgMSk7CisJLyogdmFsaWRhdGUgbGVu
Z3RocyAqLworCWlmIChodG9ucyhlaC0+bGVuZ3RoKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJv
cl9jYXVzZSkgPgorCSAgICBodG9ucyhhcGgtPnBoLnBhcmFtX2xlbmd0aCkpIHsKKwkJLyogaW52
YWxpZCBlcnJvciBjYXVzZSBsZW5ndGggKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
CisJCQkiYXNjb25mX3Byb2Nlc3NfZXJyb3I6IGNhdXNlIGVsZW1lbnQgdG9vIGxvbmdcbiIpOwor
CQlyZXR1cm47CisJfQorCWlmIChodG9ucyhwaC0+cGFyYW1fbGVuZ3RoKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikgPgorCSAgICBodG9ucyhlaC0+bGVuZ3RoKSkgeworCQkvKiBpbnZh
bGlkIGluY2x1ZGVkIFRMViBsZW5ndGggKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
CisJCQkiYXNjb25mX3Byb2Nlc3NfZXJyb3I6IGluY2x1ZGVkIFRMViB0b28gbG9uZ1xuIik7CisJ
CXJldHVybjsKKwl9CisJLyogd2hpY2ggZXJyb3IgY29kZSA/ICovCisJZXJyb3JfY29kZSA9IG50
b2hzKGVoLT5jb2RlKTsKKwlwYXJhbV90eXBlID0gbnRvaHMoYXBoLT5waC5wYXJhbV90eXBlKTsK
KwkvKiBGSVg6IHRoaXMgc2hvdWxkIGdvIGJhY2sgdXAgdGhlIFJFTU9URV9FUlJPUiBVTFAgbm90
aWZ5ICovCisJc3dpdGNoIChlcnJvcl9jb2RlKSB7CisJY2FzZSBTQ1RQX0NBVVNFX1JFU09VUkNF
X1NIT1JUQUdFOgorCQkvKiB3ZSBhbGxvdyBvdXJzZWx2ZXMgdG8gInRyeSBhZ2FpbiIgZm9yIHRo
aXMgZXJyb3IgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogcGVlciBjYW4ndCBoYW5kbGUg
aXQuLi4gKi8KKwkJc3dpdGNoIChwYXJhbV90eXBlKSB7CisJCWNhc2UgU0NUUF9BRERfSVBfQURE
UkVTUzoKKwkJY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNTOgorCQljYXNlIFNDVFBfU0VUX1BSSU1f
QUREUjoKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKKy8q
CisgKiBwcm9jZXNzIGFuIGFzY29uZiBxdWV1ZSBwYXJhbS4KKyAqIGFwYXJhbTogcGFyYW1ldGVy
IHRvIHByb2Nlc3MsIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBxdWV1ZS4KKyAqIGZsYWc6IDE9
c3VjY2VzcyBjYXNlLCAwPWZhaWx1cmUgY2FzZQorICovCitzdGF0aWMgdm9pZAorc2N0cF9hc2Nv
bmZfcHJvY2Vzc19wYXJhbV9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgc3Ry
dWN0IHNjdHBfYXNjb25mX2FkZHIgKmFwYXJhbSwgdWludDMyX3QgZmxhZykKK3sKKwl1aW50MTZf
dCBwYXJhbV90eXBlOworCisJLyogcHJvY2VzcyB0aGlzIHBhcmFtICovCisJcGFyYW1fdHlwZSA9
IGFwYXJhbS0+YXAuYXBoLnBoLnBhcmFtX3R5cGU7CisJc3dpdGNoIChwYXJhbV90eXBlKSB7CisJ
Y2FzZSBTQ1RQX0FERF9JUF9BRERSRVNTOgorCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwK
KwkJCSJwcm9jZXNzX3BhcmFtX2FjazogYWRkZWQgSVAgYWRkcmVzc1xuIik7CisJCXNjdHBfYXNj
b25mX2FkZHJfbWdtdF9hY2soc3RjYiwgYXBhcmFtLT5pZmEsIGZsYWcpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfREVMX0lQX0FERFJFU1M6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJInByb2Nlc3NfcGFyYW1fYWNrOiBkZWxldGVkIElQIGFkZHJlc3NcbiIpOworCQkvKiBub3Ro
aW5nIHJlYWxseSB0byBkby4uLiBsaXN0cyBhbHJlYWR5IHVwZGF0ZWQgKi8KKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX1NFVF9QUklNX0FERFI6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJInByb2Nlc3NfcGFyYW1fYWNrOiBzZXQgcHJpbWFyeSBJUCBhZGRyZXNzXG4iKTsKKwkJLyog
bm90aGluZyB0byBkby4uLiBwZWVyIG1heSBzdGFydCB1c2luZyB0aGlzIGFkZHIgKi8KKwkJYnJl
YWs7CisJZGVmYXVsdDoKKwkJLyogc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworCQlicmVhazsKKwl9
CisKKwkvKiByZW1vdmUgdGhlIHBhcmFtIGFuZCBmcmVlIGl0ICovCisJVEFJTFFfUkVNT1ZFKCZz
dGNiLT5hc29jLmFzY29uZl9xdWV1ZSwgYXBhcmFtLCBuZXh0KTsKKwlpZiAoYXBhcmFtLT5pZmEp
CisJCXNjdHBfZnJlZV9pZmEoYXBhcmFtLT5pZmEpOworCVNDVFBfRlJFRShhcGFyYW0sIFNDVFBf
TV9BU0NfQUREUik7Cit9CisKKy8qCisgKiBjbGVhbnVwIGZyb20gYSBiYWQgYXNjb25mIGFjayBw
YXJhbWV0ZXIKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfYXNjb25mX2Fja19jbGVhcihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQpCit7CisJLyogYXNzdW1lIHBlZXIgZG9lc24ndCBy
ZWFsbHkga25vdyBob3cgdG8gZG8gYXNjb25mcyAqLworCS8qIFhYWCB3ZSBjb3VsZCBmcmVlIHRo
ZSBwZW5kaW5nIHF1ZXVlIGhlcmUgKi8KKworfQorCit2b2lkCitzY3RwX2hhbmRsZV9hc2NvbmZf
YWNrKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorCQkgICAgICAgc3RydWN0IHNjdHBfYXNj
b25mX2Fja19jaHVuayAqY3AsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwgaW50ICphYm9ydF9ub191bmxvY2spCit7CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3Qgc2VyaWFsX251bTsKKwl1aW50MTZfdCBhY2tf
bGVuZ3RoOworCXN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOworCXN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRyICphYSwgKmFhX25leHQ7CisJdWludDMyX3QgbGFzdF9lcnJvcl9pZCA9IDA7
CS8qIGxhc3QgZXJyb3IgY29ycmVsYXRpb24gaWQgKi8KKwl1aW50MzJfdCBpZDsKKwlzdHJ1Y3Qg
c2N0cF9hc2NvbmZfYWRkciAqYXA7CisKKwkvKiBhc2NvbmYgcGFyYW0gYnVmZmVyICovCisJdWlu
dDhfdCBhcGFyYW1fYnVmW1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOworCisJLyogdmVyaWZ5IG1p
bmltdW0gbGVuZ3RoICovCisJaWYgKG50b2hzKGNwLT5jaC5jaHVua19sZW5ndGgpIDwgc2l6ZW9m
KHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmspKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19B
U0NPTkYxLAorCQkJImhhbmRsZV9hc2NvbmZfYWNrOiBjaHVuayB0b28gc21hbGwgPSAleGhcbiIs
CisJCQludG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9CisJYXNvYyA9
ICZzdGNiLT5hc29jOworCXNlcmlhbF9udW0gPSBudG9obChjcC0+c2VyaWFsX251bWJlcik7CisK
KwkvKgorCSAqIE5PVEU6IHdlIG1heSB3YW50IHRvIGhhbmRsZSB0aGlzIGRpZmZlcmVudGx5LSBj
dXJyZW50bHksIHdlIHdpbGwKKwkgKiBhYm9ydCB3aGVuIHdlIGdldCBhbiBhY2sgZm9yIHRoZSBl
eHBlY3RlZCBzZXJpYWwgbnVtYmVyICsgMSAoZWcuCisJICogd2UgZGlkbid0IHNlbmQgaXQpLCBw
cm9jZXNzIGFuIGFjayBub3JtYWxseSBpZiBpdCBpcyB0aGUgZXhwZWN0ZWQKKwkgKiBzZXJpYWwg
bnVtYmVyLCBhbmQgcmUtc2VuZCB0aGUgcHJldmlvdXMgYWNrIGZvciAqQUxMKiBvdGhlcgorCSAq
IHNlcmlhbCBudW1iZXJzCisJICovCisKKwkvKgorCSAqIGlmIHRoZSBzZXJpYWwgbnVtYmVyIGlz
IHRoZSBuZXh0IGV4cGVjdGVkLCBidXQgSSBkaWRuJ3Qgc2VuZCBpdCwKKwkgKiBhYm9ydCB0aGUg
YXNvYywgc2luY2Ugc29tZW9uZSBwcm9iYWJseSBqdXN0IGhpamFja2VkIHVzLi4uCisJICovCisJ
aWYgKHNlcmlhbF9udW0gPT0gKGFzb2MtPmFzY29uZl9zZXFfb3V0ICsgMSkpIHsKKwkJc3RydWN0
IG1idWYgKm9wX2VycjsKKwkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2NvbmZfYWNrOiBnb3QgdW5leHBlY3Rl
ZCBuZXh0IHNlcmlhbCBudW1iZXIhIEFib3J0aW5nIGFzb2MhXG4iKTsKKwkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIk5ldmVyIHNlbnQgc2VyaWFsIG51bWJlciAlOC44eCIsCisJCQkgc2Vy
aWFsX251bSk7CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9QUk9U
T0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkqYWJvcnRfbm9f
dW5sb2NrID0gMTsKKwkJcmV0dXJuOworCX0KKwlpZiAoc2VyaWFsX251bSAhPSBhc29jLT5hc2Nv
bmZfc2VxX291dF9hY2tlZCArIDEpIHsKKwkJLyogZ290IGEgZHVwbGljYXRlL3VuZXhwZWN0ZWQg
QVNDT05GLUFDSyAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImhhbmRsZV9hc2Nv
bmZfYWNrOiBnb3QgZHVwbGljYXRlL3VuZXhwZWN0ZWQgc2VyaWFsIG51bWJlciA9ICV4aCAoZXhw
ZWN0ZWQgPSAleGgpXG4iLAorCQkJc2VyaWFsX251bSwgYXNvYy0+YXNjb25mX3NlcV9vdXRfYWNr
ZWQgKyAxKTsKKwkJcmV0dXJuOworCX0KKworCWlmIChzZXJpYWxfbnVtID09IGFzb2MtPmFzY29u
Zl9zZXFfb3V0IC0gMSkgeworCQkvKiBzdG9wIG91ciB0aW1lciAqLworCQlzY3RwX3RpbWVyX3N0
b3AoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJ
CVNDVFBfRlJPTV9TQ1RQX0FTQ09ORiArIFNDVFBfTE9DXzUpOworCX0KKworCS8qIHByb2Nlc3Mg
dGhlIEFTQ09ORi1BQ0sgY29udGVudHMgKi8KKwlhY2tfbGVuZ3RoID0gbnRvaHMoY3AtPmNoLmNo
dW5rX2xlbmd0aCkgLQorCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayk7
CisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKTsKKwkvKiBw
cm9jZXNzIHRocm91Z2ggYWxsIHBhcmFtZXRlcnMgKi8KKwl3aGlsZSAoYWNrX2xlbmd0aCA+PSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSkgeworCQl1bnNpZ25lZCBpbnQgcGFy
YW1fbGVuZ3RoLCBwYXJhbV90eXBlOworCisJCS8qIGdldCBwb2ludGVyIHRvIG5leHQgYXNjb25m
IHBhcmFtZXRlciAqLworCQlhcGggPSAoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0
cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyKSwgYXBhcmFtX2J1Zik7CisJCWlmIChhcGggPT0gTlVMTCkgeworCQkJLyogY2FuJ3Qg
Z2V0IGFuIGFzY29uZiBwYXJhbWhkciAqLworCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2Ip
OworCQkJcmV0dXJuOworCQl9CisJCXBhcmFtX3R5cGUgPSBudG9ocyhhcGgtPnBoLnBhcmFtX3R5
cGUpOworCQlwYXJhbV9sZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCWlm
IChwYXJhbV9sZW5ndGggPiBhY2tfbGVuZ3RoKSB7CisJCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIo
c3RjYik7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKHBhcmFtX2xlbmd0aCA8IHNpemVvZihzdHJ1
Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCXNjdHBfYXNjb25mX2Fja19jbGVhcihzdGNiKTsKKwkJ
CXJldHVybjsKKwkJfQorCQkvKiBnZXQgdGhlIGNvbXBsZXRlIHBhcmFtZXRlci4uLiAqLworCQlp
ZiAocGFyYW1fbGVuZ3RoID4gc2l6ZW9mKGFwYXJhbV9idWYpKSB7CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfQVNDT05GMSwKKwkJCQkicGFyYW0gbGVuZ3RoICgldSkgbGFyZ2VyIHRoYW4gYnVmZmVy
IHNpemUhXG4iLCBwYXJhbV9sZW5ndGgpOworCQkJc2N0cF9hc2NvbmZfYWNrX2NsZWFyKHN0Y2Ip
OworCQkJcmV0dXJuOworCQl9CisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIg
KilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKKwkJ
aWYgKGFwaCA9PSBOVUxMKSB7CisJCQlzY3RwX2FzY29uZl9hY2tfY2xlYXIoc3RjYik7CisJCQly
ZXR1cm47CisJCX0KKwkJLyogY29ycmVsYXRpb25faWQgaXMgdHJhbnNwYXJlbnQgdG8gcGVlciwg
bm8gbnRvaGwgbmVlZGVkICovCisJCWlkID0gYXBoLT5jb3JyZWxhdGlvbl9pZDsKKworCQlzd2l0
Y2ggKHBhcmFtX3R5cGUpIHsKKwkJY2FzZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKKwkJCWxhc3Rf
ZXJyb3JfaWQgPSBpZDsKKwkJCS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBhcmFt
IGluIG91ciBxdWV1ZSAqLworCQkJYXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2IsIGlk
KTsKKwkJCWlmIChhcCA9PSBOVUxMKSB7CisJCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhpcyBp
biBvdXIgcXVldWUhICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBwcm9jZXNzIHRoZSBwYXJh
bWV0ZXIsIGZhaWxlZCBmbGFnICovCisJCQlzY3RwX2FzY29uZl9wcm9jZXNzX3BhcmFtX2Fjayhz
dGNiLCBhcCwgMCk7CisJCQkvKiBwcm9jZXNzIHRoZSBlcnJvciByZXNwb25zZSAqLworCQkJc2N0
cF9hc2NvbmZfcHJvY2Vzc19lcnJvcihzdGNiLCBhcGgpOworCQkJYnJlYWs7CisJCWNhc2UgU0NU
UF9TVUNDRVNTX1JFUE9SVDoKKwkJCS8qIGZpbmQgdGhlIGNvcnJlc3BvbmRpbmcgYXNjb25mIHBh
cmFtIGluIG91ciBxdWV1ZSAqLworCQkJYXAgPSBzY3RwX2FzY29uZl9maW5kX3BhcmFtKHN0Y2Is
IGlkKTsKKwkJCWlmIChhcCA9PSBOVUxMKSB7CisJCQkJLyogaG1tLi4uIGNhbid0IGZpbmQgdGhp
cyBpbiBvdXIgcXVldWUhICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBwcm9jZXNzIHRoZSBw
YXJhbWV0ZXIsIHN1Y2Nlc3MgZmxhZyAqLworCQkJc2N0cF9hc2NvbmZfcHJvY2Vzc19wYXJhbV9h
Y2soc3RjYiwgYXAsIDEpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQkJ
Lyogc3dpdGNoICovCisKKwkJLyogdXBkYXRlIHJlbWFpbmluZyBBU0NPTkYtQUNLIG1lc3NhZ2Ug
bGVuZ3RoIHRvIHByb2Nlc3MgKi8KKwkJYWNrX2xlbmd0aCAtPSBTQ1RQX1NJWkUzMihwYXJhbV9s
ZW5ndGgpOworCQlpZiAoYWNrX2xlbmd0aCA8PSAwKSB7CisJCQkvKiBubyBtb3JlIGRhdGEgaW4g
dGhlIG1idWYgY2hhaW4gKi8KKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCArPSBTQ1RQX1NJWkUz
MihwYXJhbV9sZW5ndGgpOworCX0gLyogd2hpbGUgKi8KKworCS8qCisJICogaWYgdGhlcmUgYXJl
IGFueSAic2VudCIgcGFyYW1zIHN0aWxsIG9uIHRoZSBxdWV1ZSwgdGhlc2UgYXJlCisJICogaW1w
bGljaXRseSAic3VjY2VzcyIsIG9yICJmYWlsZWQiIChpZiB3ZSBnb3QgYW4gZXJyb3IgYmFjaykg
Li4uCisJICogc28gcHJvY2VzcyB0aGVzZSBhcHByb3ByaWF0ZWx5CisJICoKKwkgKiB3ZSBhc3N1
bWUgdGhhdCB0aGUgY29ycmVsYXRpb25faWQncyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n
CisJICogYmVnaW5uaW5nIGZyb20gMSBhbmQgdGhhdCB3ZSBkb24ndCBoYXZlICp0aGF0KiBtYW55
IG91dHN0YW5kaW5nCisJICogYXQgYW55IGdpdmVuIHRpbWUKKwkgKi8KKwlpZiAobGFzdF9lcnJv
cl9pZCA9PSAwKQorCQlsYXN0X2Vycm9yX2lkLS07CS8qIHNldCB0byAibWF4IiB2YWx1ZSAqLwor
CVRBSUxRX0ZPUkVBQ0hfU0FGRShhYSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0LCBh
YV9uZXh0KSB7CisJCWlmIChhYS0+c2VudCA9PSAxKSB7CisJCQkvKgorCQkJICogaW1wbGljaXRs
eSBzdWNjZXNzZnVsIG9yIGZhaWxlZCBpZiBjb3JyZWxhdGlvbl9pZAorCQkJICogPCBsYXN0X2Vy
cm9yX2lkLCB0aGVuIHN1Y2Nlc3MgZWxzZSwgZmFpbHVyZQorCQkJICovCisJCQlpZiAoYWEtPmFw
LmFwaC5jb3JyZWxhdGlvbl9pZCA8IGxhc3RfZXJyb3JfaWQpCisJCQkJc2N0cF9hc2NvbmZfcHJv
Y2Vzc19wYXJhbV9hY2soc3RjYiwgYWEsIDEpOworCQkJZWxzZQorCQkJCXNjdHBfYXNjb25mX3By
b2Nlc3NfcGFyYW1fYWNrKHN0Y2IsIGFhLCAwKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBz
aW5jZSB3ZSBhbHdheXMgcHJvY2VzcyBpbiBvcmRlciAoRklGTyBxdWV1ZSkgaWYKKwkJCSAqIHdl
IHJlYWNoIG9uZSB0aGF0IGhhc24ndCBiZWVuIHNlbnQsIHRoZSByZXN0CisJCQkgKiBzaG91bGQg
bm90IGhhdmUgYmVlbiBzZW50IGVpdGhlci4gc28sIHdlJ3JlCisJCQkgKiBkb25lLi4uCisJCQkg
Ki8KKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogdXBkYXRlIHRoZSBuZXh0IHNlcXVlbmNlIG51
bWJlciB0byB1c2UgKi8KKwlhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCsrOworCS8qIHJlbW92
ZSB0aGUgb2xkIEFTQ09ORiBvbiBvdXIgb3V0Ym91bmQgcXVldWUgKi8KKwlzY3RwX3Rvc3Nfb2xk
X2FzY29uZihzdGNiKTsKKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1
ZSkpIHsKKyNpZmRlZiBTQ1RQX1RJTUVSX0JBU0VEX0FTQ09ORgorCQkvKiB3ZSBoYXZlIG1vcmUg
cGFyYW1zLCBzbyByZXN0YXJ0IG91ciB0aW1lciAqLworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9BU0NPTkYsIHN0Y2ItPnNjdHBfZXAsCisJCQkJIHN0Y2IsIG5ldCk7CisjZWxz
ZQorCQkvKiB3ZSBoYXZlIG1vcmUgcGFyYW1zLCBzbyBzZW5kIG91dCBtb3JlICovCisJCXNjdHBf
c2VuZF9hc2NvbmYoc3RjYiwgbmV0LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisjZW5kaWYKKwl9
Cit9CisKKyNpZmRlZiBJTkVUNgorc3RhdGljIHVpbnQzMl90CitzY3RwX2lzX3Njb3BlaWRfaW5f
bmV0cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNiwgKm5ldDY7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0Owor
CisJaWYgKHNhLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKKwkJLyogd3JvbmcgZmFtaWx5ICov
CisJCXJldHVybiAoMCk7CisJfQorCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwor
CWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikgPT0gMCkgeworCQkv
KiBub3QgbGluayBsb2NhbCBhZGRyZXNzICovCisJCXJldHVybiAoMCk7CisJfQorCS8qIGh1bnQg
dGhyb3VnaCBvdXIgZGVzdGluYXRpb24gbmV0cyBsaXN0IGZvciB0aGlzIHNjb3BlX2lkICovCisJ
VEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAo
KChzdHJ1Y3Qgc29ja2FkZHIgKikoJm5ldC0+cm8uX2xfYWRkcikpLT5zYV9mYW1pbHkgIT0KKwkJ
ICAgIEFGX0lORVQ2KQorCQkJY29udGludWU7CisJCW5ldDYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJm5ldDYt
PnNpbjZfYWRkcikgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlpZiAoc2N0cF9pc19zYW1lX3Njb3Bl
KHNpbjYsIG5ldDYpKSB7CisJCQkvKiBmb3VuZCBvbmUgKi8KKwkJCXJldHVybiAoMSk7CisJCX0K
Kwl9CisJLyogZGlkbid0IGZpbmQgb25lICovCisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCisv
KgorICogYWRkcmVzcyBtYW5hZ2VtZW50IGZ1bmN0aW9ucworICovCitzdGF0aWMgdm9pZAorc2N0
cF9hZGRyX21nbXRfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorCQkgICAgIHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MTZfdCB0eXBlLCBpbnQg
YWRkcl9sb2NrZWQpCit7CisJaW50IHN0YXR1czsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDAgfHwKKwkgICAgc2N0cF9pc19mZWF0dXJlX29m
ZihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpIHsKKwkJLyogc3Vic2V0IGJvdW5kLCBu
byBBU0NPTkYgYWxsb3dlZCBjYXNlLCBzbyBpZ25vcmUgKi8KKwkJcmV0dXJuOworCX0KKwkvKgor
CSAqIG5vdGU6IHdlIGtub3cgdGhpcyBpcyBub3QgdGhlIHN1YnNldCBib3VuZCwgbm8gQVNDT05G
IGNhc2UgZWcuCisJICogdGhpcyBpcyBib3VuZGFsbCBvciBzdWJzZXQgYm91bmQgdy9BU0NPTkYg
YWxsb3dlZAorCSAqLworCisJLyogZmlyc3QsIG1ha2Ugc3VyZSB0aGF0IHRoZSBhZGRyZXNzIGlz
IElQdjQgb3IgSVB2NiBhbmQgbm90IGphaWxlZCAqLworCXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNh
LnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5w
X2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luNi5zaW42X2Fk
ZHIpICE9IDApIHsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlp
ZiAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAg
ICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSB7CisJCQlyZXR1
cm47CisJCX0KKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsK
Kwl9CisjaWZkZWYgSU5FVDYKKwkvKiBtYWtlIHN1cmUgd2UncmUgImFsbG93ZWQiIHRvIGFkZCB0
aGlzIHR5cGUgb2YgYWRkciAqLworCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFG
X0lORVQ2KSB7CisJCS8qIGludmFsaWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkKKwkJ
CXJldHVybjsKKwkJLyogaXMgdGhlIHY2IGFkZHIgcmVhbGx5IHZhbGlkID8gKi8KKwkJaWYgKGlm
YS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgeworCQkJcmV0dXJu
OworCQl9CisJfQorI2VuZGlmCisJLyogcHV0IHRoaXMgYWRkcmVzcyBvbiB0aGUgInBlbmRpbmcv
ZG8gbm90IHVzZSB5ZXQiIGxpc3QgKi8KKwlzY3RwX2FkZF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQo
c3RjYiwgaWZhKTsKKwkvKgorCSAqIGNoZWNrIGFkZHJlc3Mgc2NvcGUgaWYgYWRkcmVzcyBpcyBv
dXQgb2Ygc2NvcGUsIGRvbid0IHF1ZXVlCisJICogYW55dGhpbmcuLi4gbm90ZTogdGhpcyB3b3Vs
ZCBsZWF2ZSB0aGUgYWRkcmVzcyBvbiBib3RoIGlucCBhbmQKKwkgKiBhc29jIGxpc3RzCisJICov
CisJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwlj
YXNlIEFGX0lORVQ2OgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlzaW42
ID0gJmlmYS0+YWRkcmVzcy5zaW42OworCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKKwkJCS8qIHdlIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8K
KwkJCXJldHVybjsKKwkJfQorCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42
X2FkZHIpKSB7CisJCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwKSB7CisJ
CQkJcmV0dXJuOworCQkJfQorCQkJLyogaXMgaXQgdGhlIHJpZ2h0IGxpbmsgbG9jYWwgc2NvcGU/
ICovCisJCQlpZiAoc2N0cF9pc19zY29wZWlkX2luX25ldHMoc3RjYiwgJmlmYS0+YWRkcmVzcy5z
YSkgPT0gMCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29w
ZS5zaXRlX3Njb3BlID09IDAgJiYKKwkJICAgIElONl9JU19BRERSX1NJVEVMT0NBTCgmc2luNi0+
c2luNl9hZGRyKSkgeworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworCX0KKyNlbmRpZgorI2lm
ZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsK
KwkJc3RydWN0IGluNnBjYiAqaW5wNjsKKworCQlpbnA2ID0gKHN0cnVjdCBpbjZwY2IgKikmaW5w
LT5pcF9pbnAuaW5wOworCQkvKiBpbnZhbGlkIGlmIHdlIGFyZSBhIHY2IG9ubHkgZW5kcG9pbnQg
Ki8KKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYK
KwkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpCisJCQlyZXR1cm47CisKKwkJc2luID0gJmlm
YS0+YWRkcmVzcy5zaW47CisJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkv
KiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQlyZXR1cm47CisJCX0KKwkJaWYg
KHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCisJCSAgICBJTjRfSVNQ
UklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJYnJl
YWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogZWxzZSwgbm90IEFGX0lORVQgb3IgQUZf
SU5FVDYsIHNvIHNraXAgKi8KKwkJcmV0dXJuOworCX0KKworCS8qIHF1ZXVlIGFuIGFzY29uZiBm
b3IgdGhpcyBhZGRyZXNzIGFkZC9kZWxldGUgKi8KKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgeworCQkvKiBkb2VzIHRoZSBwZWVyIGRvIGFz
Y29uZj8gKi8KKwkJaWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCkgeworCQkJLyogcXVl
dWUgYW4gYXNjb25mIGZvciB0aGlzIGFkZHIgKi8KKwkJCXN0YXR1cyA9IHNjdHBfYXNjb25mX3F1
ZXVlX2FkZChzdGNiLCBpZmEsIHR5cGUpOworCisJCQkvKgorCQkJICogaWYgcXVldWVkIG9rLCBh
bmQgaW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0IHRoZQorCQkJICogQVNDT05GLiAgSWYgaW4g
dGhlIG5vbi1vcGVuIHN0YXRlLCB0aGVzZSB3aWxsIGJlCisJCQkgKiBzZW50IHdoZW4gdGhlIHN0
YXRlIGdvZXMgb3Blbi4KKwkJCSAqLworCQkJaWYgKHN0YXR1cyA9PSAwICYmCisJCQkgICAgKChT
Q1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJICAg
ICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpKSkgeworI2lmZGVmIFNDVFBfVElNRVJfQkFTRURfQVNDT05GCisJCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQVNDT05GLCBpbnAsCisJCQkJICAgIHN0Y2IsIHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisjZWxzZQorCQkJCXNjdHBfc2VuZF9hc2NvbmYo
c3RjYiwgTlVMTCwgYWRkcl9sb2NrZWQpOworI2VuZGlmCisJCQl9CisJCX0KKwl9Cit9CisKKwor
aW50CitzY3RwX2FzY29uZl9pdGVyYXRvcl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lk
ICpwdHIsIHVpbnQzMl90IHZhbCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZf
aXRlcmF0b3IgKmFzYzsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKwlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbDsKKwlpbnQgY250X2ludmFsaWQgPSAwOworCisJYXNjID0gKHN0cnVjdCBzY3RwX2FzY29u
Zl9pdGVyYXRvciAqKXB0cjsKKwlMSVNUX0ZPUkVBQ0gobCwgJmFzYy0+bGlzdF9vZl93b3JrLCBz
Y3RwX254dF9hZGRyKSB7CisJCWlmYSA9IGwtPmlmYTsKKwkJc3dpdGNoIChpZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCS8qIGlu
dmFsaWQgaWYgd2UncmUgbm90IGEgdjYgZW5kcG9pbnQgKi8KKwkJCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApIHsKKwkJCQljbnRfaW52YWxpZCsr
OworCQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJ
CX0KKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsK
KwkJCS8qIGludmFsaWQgaWYgd2UgYXJlIGEgdjYgb25seSBlbmRwb2ludCAqLworCQkJc3RydWN0
IGluNnBjYiAqaW5wNjsKKwkJCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5p
bnA7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAm
JgorCQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJCQljbnRfaW52YWxpZCsrOwor
CQkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52YWxpZCkKKwkJCQkJcmV0dXJuICgxKTsKKwkJCX0K
KwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIGludmFsaWQgYWRkcmVz
cyBmYW1pbHkgKi8KKwkJCWNudF9pbnZhbGlkKys7CisJCQlpZiAoYXNjLT5jbnQgPT0gY250X2lu
dmFsaWQpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgaW50CitzY3RwX2FzY29uZl9pdGVyYXRvcl9lcF9lbmQoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwgdm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0IHNjdHBf
aWZhICppZmE7CisJc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNj
dHBfbGFkZHIgKmxhZGRyLCAqbmxhZGRyLCAqbDsKKworCS8qIE9ubHkgZm9yIHNwZWNpZmljIGNh
c2Ugbm90IGJvdW5kIGFsbCAqLworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3Ig
KilwdHI7CisJTElTVF9GT1JFQUNIKGwsICZhc2MtPmxpc3Rfb2Zfd29yaywgc2N0cF9ueHRfYWRk
cikgeworCQlpZmEgPSBsLT5pZmE7CisJCWlmIChsLT5hY3Rpb24gPT0gU0NUUF9BRERfSVBfQURE
UkVTUykgeworCQkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwKKwkJ
CQkgICAgIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsKKwkJ
CQkJbGFkZHItPmFjdGlvbiA9IDA7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJfQorCQl9IGVs
c2UgaWYgKGwtPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlMSVNUX0ZPUkVB
Q0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIsIG5sYWRk
cikgeworCQkJCS8qIHJlbW92ZSBvbmx5IGFmdGVyIGFsbCBndXlzIGFyZSBkb25lICovCisJCQkJ
aWYgKGxhZGRyLT5pZmEgPT0gaWZhKSB7CisJCQkJCXNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoaW5w
LCBpZmEpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCit2b2lkCitz
Y3RwX2FzY29uZl9pdGVyYXRvcl9zdGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKwkJCSAgdm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQp
Cit7CisJc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfaWZh
ICppZmE7CisJc3RydWN0IHNjdHBfbGFkZHIgKmw7CisJaW50IGNudF9pbnZhbGlkID0gMDsKKwlp
bnQgdHlwZSwgc3RhdHVzOworCWludCBudW1fcXVldWVkID0gMDsKKworCWFzYyA9IChzdHJ1Y3Qg
c2N0cF9hc2NvbmZfaXRlcmF0b3IgKilwdHI7CisJTElTVF9GT1JFQUNIKGwsICZhc2MtPmxpc3Rf
b2Zfd29yaywgc2N0cF9ueHRfYWRkcikgeworCQlpZmEgPSBsLT5pZmE7CisJCXR5cGUgPSBsLT5h
Y3Rpb247CisKKwkJLyogYWRkcmVzcydzIHZyZl9pZCBtdXN0IGJlIHRoZSB2cmZfaWQgb2YgdGhl
IGFzc29jICovCisJCWlmIChpZmEtPnZyZl9pZCAhPSBzdGNiLT5hc29jLnZyZl9pZCkgeworCQkJ
Y29udGludWU7CisJCX0KKworCQkvKiBTYW1lIGNoZWNrcyBhZ2FpbiBmb3IgYXNzb2MgKi8KKwkJ
c3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJY2Fz
ZSBBRl9JTkVUNjoKKwkJeworCQkJLyogaW52YWxpZCBpZiB3ZSdyZSBub3QgYSB2NiBlbmRwb2lu
dCAqLworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgeworCQkJCWNudF9pbnZhbGlk
Kys7CisJCQkJaWYgKGFzYy0+Y250ID09IGNudF9pbnZhbGlkKQorCQkJCQlyZXR1cm47CisJCQkJ
ZWxzZQorCQkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNpbjY7
CisJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJ
CQkvKiB3ZSBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQkJY29udGludWU7CisJCQl9
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCWlmIChwcmlzb25fY2hlY2tfaXA2KGlucC0+
aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42
X2FkZHIpICE9IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKElONl9J
U19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWlmIChzdGNiLT5hc29j
LnNjb3BlLmxvY2FsX3Njb3BlID09IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCS8q
IGlzIGl0IHRoZSByaWdodCBsaW5rIGxvY2FsIHNjb3BlPyAqLworCQkJCWlmIChzY3RwX2lzX3Nj
b3BlaWRfaW5fbmV0cyhzdGNiLCAmaWZhLT5hZGRyZXNzLnNhKSA9PSAwKSB7CisJCQkJCWNvbnRp
bnVlOworCQkJCX0KKwkJCX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJ
CWNhc2UgQUZfSU5FVDoKKwkJeworCQkJLyogaW52YWxpZCBpZiB3ZSBhcmUgYSB2NiBvbmx5IGVu
ZHBvaW50ICovCisJCQlzdHJ1Y3QgaW42cGNiICppbnA2OworCQkJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW47CisKKwkJCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKSZpbnAtPmlwX2lucC5pbnA7CisJ
CQkvKiBpbnZhbGlkIGlmIHdlIGFyZSBhIHY2IG9ubHkgZW5kcG9pbnQgKi8KKwkJCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkgICAgU0NUUF9J
UFY2X1Y2T05MWShpbnA2KSkKKwkJCQljb250aW51ZTsKKworCQkJc2luID0gJmlmYS0+YWRkcmVz
cy5zaW47CisJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJCS8qIHdlIHNr
aXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5w
LmlucF9jcmVkLAorCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDAp
IHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUu
aXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCisJCQkgICAgSU40X0lTUFJJVkFURV9BRERSRVNTKCZz
aW4tPnNpbl9hZGRyKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQVjZfVjZP
TkxZKGlucDYpKSB7CisJCQkJY250X2ludmFsaWQrKzsKKwkJCQlpZiAoYXNjLT5jbnQgPT0gY250
X2ludmFsaWQpCisJCQkJCXJldHVybjsKKwkJCQllbHNlCisJCQkJCWNvbnRpbnVlOworCQkJfQor
CQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJLyogaW52YWxpZCBhZGRyZXNz
IGZhbWlseSAqLworCQkJY250X2ludmFsaWQrKzsKKwkJCWlmIChhc2MtPmNudCA9PSBjbnRfaW52
YWxpZCkKKwkJCQlyZXR1cm47CisJCQllbHNlCisJCQkJY29udGludWU7CisJCQlicmVhazsKKwkJ
fQorCisJCWlmICh0eXBlID09IFNDVFBfQUREX0lQX0FERFJFU1MpIHsKKwkJCS8qIHByZXZlbnQg
dGhpcyBhZGRyZXNzIGZyb20gYmVpbmcgdXNlZCBhcyBhIHNvdXJjZSAqLworCQkJc2N0cF9hZGRf
bG9jYWxfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGlmYSk7CisJCX0gZWxzZSBpZiAodHlwZSA9PSBT
Q1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCQlUQUlM
UV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJc2N0cF9y
dGVudHJ5X3QgKnJ0OworCisJCQkJLyogZGVsZXRlIHRoaXMgYWRkcmVzcyBpZiBjYWNoZWQgKi8K
KwkJCQlpZiAobmV0LT5yby5fc19hZGRyID09IGlmYSkgeworCQkJCQlzY3RwX2ZyZWVfaWZhKG5l
dC0+cm8uX3NfYWRkcik7CisJCQkJCW5ldC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJCW5ldC0+
c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJCQlydCA9IG5ldC0+cm8ucm9fcnQ7CisJCQkJCWlm
IChydCkgeworCQkJCQkJUlRGUkVFKHJ0KTsKKwkJCQkJCW5ldC0+cm8ucm9fcnQgPSBOVUxMOwor
CQkJCQl9CisJCQkJCS8qCisJCQkJCSAqIE5vdyB3ZSBkZWxldGVkIG91ciBzcmMgYWRkcmVzcywK
KwkJCQkJICogc2hvdWxkIHdlIG5vdCBhbHNvIG5vdyByZXNldCB0aGUKKwkJCQkJICogY3duZC9y
dG8gdG8gc3RhcnQgYXMgaWYgaXRzIGEgbmV3CisJCQkJCSAqIGFkZHJlc3M/CisJCQkJCSAqLwor
CQkJCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0
Y2IsIG5ldCk7CisJCQkJCW5ldC0+UlRPID0gMDsKKworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlm
ICh0eXBlID09IFNDVFBfU0VUX1BSSU1fQUREUikgeworCQkJaWYgKChzdGNiLT5zY3RwX2VwLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpID09IDApIHsKKwkJCQkvKiBtdXN0
IHZhbGlkYXRlIHRoZSBpZmEgaXMgaW4gdGhlIGVwICovCisJCQkJaWYgKHNjdHBfaXNfYWRkcl9p
bl9lcChzdGNiLT5zY3RwX2VwLCBpZmEpID09IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQor
CQkJfSBlbHNlIHsKKwkJCQkvKiBOZWVkIHRvIGNoZWNrIHNjb3BlcyBmb3IgdGhpcyBndXkgKi8K
KwkJCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2ItPmFzb2Muc2NvcGUs
IDApID09IDApIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQl9CisJCS8qIHF1ZXVl
IGFuIGFzY29uZiBmb3IgdGhpcyBhZGRyZXNzIGFkZC9kZWxldGUgKi8KKwkJaWYgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikgJiYKKwkJICAgIHN0Y2It
PmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7CisJCQkvKiBxdWV1ZSBhbiBhc2NvbmYgZm9y
IHRoaXMgYWRkciAqLworCQkJc3RhdHVzID0gc2N0cF9hc2NvbmZfcXVldWVfYWRkKHN0Y2IsIGlm
YSwgdHlwZSk7CisJCQkvKgorCQkJICogaWYgcXVldWVkIG9rLCBhbmQgaW4gdGhlIG9wZW4gc3Rh
dGUsIHVwZGF0ZSB0aGUKKwkJCSAqIGNvdW50IG9mIHF1ZXVlZCBwYXJhbXMuICBJZiBpbiB0aGUg
bm9uLW9wZW4gc3RhdGUsCisJCQkgKiB0aGVzZSBnZXQgc2VudCB3aGVuIHRoZSBhc3NvYyBnb2Vz
IG9wZW4uCisJCQkgKi8KKwkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFND
VFBfU1RBVEVfT1BFTikgfHwKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJaWYgKHN0YXR1cyA+PSAwKSB7
CisJCQkJCW51bV9xdWV1ZWQrKzsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisJLyoKKwkgKiBJZiB3
ZSBoYXZlIHF1ZXVlZCBwYXJhbXMgaW4gdGhlIG9wZW4gc3RhdGUsIHNlbmQgb3V0IGFuIEFTQ09O
Ri4KKwkgKi8KKwlpZiAobnVtX3F1ZXVlZCA+IDApIHsKKwkJc2N0cF9zZW5kX2FzY29uZihzdGNi
LCBOVUxMLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJfQorfQorCit2b2lkCitzY3RwX2FzY29u
Zl9pdGVyYXRvcl9lbmQodm9pZCAqcHRyLCB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJ
c3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICphc2M7CisJc3RydWN0IHNjdHBfaWZhICppZmE7
CisJc3RydWN0IHNjdHBfbGFkZHIgKmwsICpubDsKKworCWFzYyA9IChzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfaXRlcmF0b3IgKilwdHI7CisJTElTVF9GT1JFQUNIX1NBRkUobCwgJmFzYy0+bGlzdF9vZl93
b3JrLCBzY3RwX254dF9hZGRyLCBubCkgeworCQlpZmEgPSBsLT5pZmE7CisJCWlmIChsLT5hY3Rp
b24gPT0gU0NUUF9BRERfSVBfQUREUkVTUykgeworCQkJLyogQ2xlYXIgdGhlIGRlZmVyIHVzZSBm
bGFnICovCisJCQlpZmEtPmxvY2FsaWZhX2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOwor
CQl9CisJCXNjdHBfZnJlZV9pZmEoaWZhKTsKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lO
Rk8oaXBpX3pvbmVfbGFkZHIpLCBsKTsKKwkJU0NUUF9ERUNSX0xBRERSX0NPVU5UKCk7CisJfQor
CVNDVFBfRlJFRShhc2MsIFNDVFBfTV9BU0NfSVQpOworfQorCisvKgorICogc2EgaXMgdGhlIHNv
Y2thZGRyIHRvIGFzayB0aGUgcGVlciB0byBzZXQgcHJpbWFyeSB0by4KKyAqIHJldHVybnM6IDAg
PSBjb21wbGV0ZWQsIC0xID0gZXJyb3IKKyAqLworaW50MzJfdAorc2N0cF9zZXRfcHJpbWFyeV9p
cF9hZGRyZXNzX3NhKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICpzYSkK
K3sKKwl1aW50MzJfdCB2cmZfaWQ7CisJc3RydWN0IHNjdHBfaWZhICppZmE7CisKKwkvKiBmaW5k
IHRoZSBpZmEgZm9yIHRoZSBkZXNpcmVkIHNldCBwcmltYXJ5ICovCisJdnJmX2lkID0gc3RjYi0+
YXNvYy52cmZfaWQ7CisJaWZhID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKHNhLCB2cmZfaWQsIFND
VFBfQUREUl9OT1RfTE9DS0VEKTsKKwlpZiAoaWZhID09IE5VTEwpIHsKKwkJLyogSW52YWxpZCBh
ZGRyZXNzICovCisJCXJldHVybiAoLTEpOworCX0KKworCS8qIHF1ZXVlIGFuIEFTQ09ORjpTRVRf
UFJJTV9BRERSIHRvIGJlIHNlbnQgKi8KKwlpZiAoIXNjdHBfYXNjb25mX3F1ZXVlX2FkZChzdGNi
LCBpZmEsIFNDVFBfU0VUX1BSSU1fQUREUikpIHsKKwkJLyogc2V0IHByaW1hcnkgcXVldWluZyBz
dWNjZWVkZWQgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkic2V0X3ByaW1h
cnlfaXBfYWRkcmVzc19zYTogcXVldWVkIG9uIHRjYj0lcCwgIiwKKwkJCSh2b2lkICopc3RjYik7
CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJaWYgKChTQ1RQX0dF
VF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkgICAgKFNDVFBf
R0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkg
eworI2lmZGVmIFNDVFBfVElNRVJfQkFTRURfQVNDT05GCisJCQlzY3RwX3RpbWVyX3N0YXJ0KFND
VFBfVElNRVJfVFlQRV9BU0NPTkYsCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkg
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKyNlbHNlCisJCQlzY3RwX3NlbmRfYXNj
b25mKHN0Y2IsIE5VTEwsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKyNlbmRpZgorCQl9CisJfSBl
bHNlIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJzZXRfcHJpbWFyeV9pcF9hZGRy
ZXNzX3NhOiBmYWlsZWQgdG8gYWRkIHRvIHF1ZXVlIG9uIHRjYj0lcCwgIiwKKwkJCSh2b2lkICop
c3RjYik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjEsIHNhKTsKKwkJcmV0dXJu
ICgtMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0cF9pc19hZGRyX3BlbmRpbmco
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhKQoreworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisJdW5zaWduZWQgaW50IG9mZnNldCwg
YXNjb25mX2xpbWl0OworCXN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqYWNwOworCXN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkciAqYXBoOworCXVpbnQ4X3QgYXBhcmFtX2J1ZltTQ1RQX1BBUkFN
X0JVRkZFUl9TSVpFXTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJaW50IGFkZF9jbnQs
IGRlbF9jbnQ7CisJdWludDE2X3QgbGFzdF9wYXJhbV90eXBlOworCisJYWRkX2NudCA9IGRlbF9j
bnQgPSAwOworCWxhc3RfcGFyYW1fdHlwZSA9IDA7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywg
JnN0Y2ItPmFzb2MuYXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAo
Y2hrLT5kYXRhID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNf
YWRkcl9wZW5kaW5nOiBObyBtYnVmIGRhdGE/XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCW9m
ZnNldCA9IDA7CisJCWFjcCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1
bmsgKik7CisJCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKTsKKwkJ
YXNjb25mX2xpbWl0ID0gbnRvaHMoYWNwLT5jaC5jaHVua19sZW5ndGgpOworCQlwaCA9IChzdHJ1
Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksIGFwYXJhbV9idWYpOworCQlpZiAocGggPT0gTlVMTCkg
eworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IGNvdWxk
bid0IGdldCBsb29rdXAgYWRkciFcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJb2Zmc2V0ICs9
IG50b2hzKHBoLT5wYXJhbV9sZW5ndGgpOworCisJCWFwaCA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZf
cGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKGNoay0+ZGF0YSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX3BhcmFtaGRyKSwgYXBhcmFtX2J1Zik7CisJCWlmIChhcGggPT0gTlVMTCkg
eworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IEVtcHR5
IEFTQ09ORiB3aWxsIGJlIHNlbnQ/XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXdoaWxlIChh
cGggIT0gTlVMTCkgeworCQkJdW5zaWduZWQgaW50IHBhcmFtX2xlbmd0aCwgcGFyYW1fdHlwZTsK
KworCQkJcGFyYW1fdHlwZSA9IG50b2hzKGFwaC0+cGgucGFyYW1fdHlwZSk7CisJCQlwYXJhbV9s
ZW5ndGggPSBudG9ocyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCQlpZiAob2Zmc2V0ICsgcGFy
YW1fbGVuZ3RoID4gYXNjb25mX2xpbWl0KSB7CisJCQkJLyogcGFyYW1ldGVyIGdvZXMgYmV5b25k
IGVuZCBvZiBjaHVuayEgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChwYXJhbV9sZW5ndGgg
PiBzaXplb2YoYXBhcmFtX2J1ZikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwg
ImlzX2FkZHJfcGVuZGluZzogcGFyYW0gbGVuZ3RoICgldSkgbGFyZ2VyIHRoYW4gYnVmZmVyIHNp
emUhXG4iLCBwYXJhbV9sZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKHBhcmFtX2xl
bmd0aCA8PSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0FTQ09ORjEsICJpc19hZGRyX3BlbmRpbmc6IHBhcmFtIGxlbmd0aCgldSkgdG9vIHNo
b3J0XG4iLCBwYXJhbV9sZW5ndGgpOworCQkJCWJyZWFrOworCQkJfQorCisJCQlhcGggPSAoc3Ry
dWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyICopc2N0cF9tX2dldHB0cihjaGstPmRhdGEsIG9mZnNl
dCwgcGFyYW1fbGVuZ3RoLCBhcGFyYW1fYnVmKTsKKwkJCWlmIChhcGggPT0gTlVMTCkgeworCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAiaXNfYWRkcl9wZW5kaW5nOiBjb3VsZG4ndCBn
ZXQgZW50aXJlIHBhcmFtXG4iKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJcGggPSAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKikoYXBoICsgMSk7CisJCQlpZiAoc2N0cF9hZGRyX21hdGNoKHBoLCAm
c2N0cF9pZmEtPmFkZHJlc3Muc2EpICE9IDApIHsKKwkJCQlzd2l0Y2ggKHBhcmFtX3R5cGUpIHsK
KwkJCQljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6CisJCQkJCWFkZF9jbnQrKzsKKwkJCQkJYnJl
YWs7CisJCQkJY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNTOgorCQkJCQlkZWxfY250Kys7CisJCQkJ
CWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlsYXN0X3BhcmFt
X3R5cGUgPSBwYXJhbV90eXBlOworCQkJfQorCisJCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGFy
YW1fbGVuZ3RoKTsKKwkJCWlmIChvZmZzZXQgPj0gYXNjb25mX2xpbWl0KSB7CisJCQkJLyogbm8g
bW9yZSBkYXRhIGluIHRoZSBtYnVmIGNoYWluICovCisJCQkJYnJlYWs7CisJCQl9CisJCQkvKiBn
ZXQgcG9pbnRlciB0byBuZXh0IGFzY29uZiBwYXJhbSAqLworCQkJYXBoID0gKHN0cnVjdCBzY3Rw
X2FzY29uZl9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIoY2hrLT5kYXRhLCBvZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpLCBhcGFyYW1fYnVmKTsKKwkJfQorCX0KKwor
CS8qIHdlIHdhbnQgdG8gZmluZCB0aGUgc2VxdWVuY2VzIHdoaWNoIGNvbnNpc3Qgb2YgQUREIC0+
IERFTCAtPiBBREQgb3IgREVMIC0+IEFERCAqLworCWlmIChhZGRfY250ID4gZGVsX2NudCB8fAor
CSAgICAoYWRkX2NudCA9PSBkZWxfY250ICYmIGxhc3RfcGFyYW1fdHlwZSA9PSBTQ1RQX0FERF9J
UF9BRERSRVNTKSkgeworCQlyZXR1cm4gKDEpOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0
aWMgc3RydWN0IHNvY2thZGRyICoKK3NjdHBfZmluZF92YWxpZF9sb2NhbGFkZHIoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBpbnQgYWRkcl9sb2NrZWQpCit7CisJc3RydWN0IHNjdHBfdnJmICp2cmYg
PSBOVUxMOworCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJc3RydWN0IHNjdHBfaWZhICpz
Y3RwX2lmYTsKKworCWlmIChhZGRyX2xvY2tlZCA9PSBTQ1RQX0FERFJfTk9UX0xPQ0tFRCkKKwkJ
U0NUUF9JUElfQUREUl9STE9DSygpOworCXZyZiA9IHNjdHBfZmluZF92cmYoc3RjYi0+YXNvYy52
cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQlpZiAoYWRkcl9sb2NrZWQgPT0gU0NUUF9B
RERSX05PVF9MT0NLRUQpCisJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lm
bikgeworCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSA9PSAwICYmCisJCSAg
ICBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIFNraXAgaWYgbG9vcGJh
Y2tfc2NvcGUgbm90IHNldCAqLworCQkJY29udGludWU7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNj
dHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQlzd2l0Y2ggKHNjdHBf
aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5F
VDoKKwkJCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQkJc3Ry
dWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNp
bjsKKwkJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCQkJCS8qIHNraXAg
dW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+c2N0cF9l
cC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+
c2luX2FkZHIpICE9IDApIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKwkJCQkJ
aWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJ
TjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKQorCQkJCQkJY29udGludWU7CisK
KwkJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJ
CQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzY3RwX2lmYSkpKQorCQkJCQkJY29u
dGludWU7CisJCQkJCS8qIGZvdW5kIGEgdmFsaWQgbG9jYWwgdjQgYWRkcmVzcyB0byB1c2UgKi8K
KwkJCQkJaWYgKGFkZHJfbG9ja2VkID09IFNDVFBfQUREUl9OT1RfTE9DS0VEKQorCQkJCQkJU0NU
UF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAoJnNjdHBfaWZhLT5hZGRyZXNzLnNh
KTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCQlpZiAoc2N0cF9pZmEtPmxvY2FsaWZh
X2ZsYWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJ
CQl9CisKKwkJCQkJc2luNiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42OworCQkJCQlpZiAoSU42
X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCS8qIHdlIHNr
aXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoc3RjYi0+c2N0
cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNp
bjYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgor
CQkJCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJ
TjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQljb250aW51ZTsK
KwkJCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZSA9PSAwICYmCisJCQkJCSAgICBJ
TjZfSVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQljb250aW51ZTsK
KworCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmEpICYmCisJ
CQkJCSAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNjdHBfaWZhKSkpCisJCQkJCQlj
b250aW51ZTsKKwkJCQkJLyogZm91bmQgYSB2YWxpZCBsb2NhbCB2NiBhZGRyZXNzIHRvIHVzZSAq
LworCQkJCQlpZiAoYWRkcl9sb2NrZWQgPT0gU0NUUF9BRERSX05PVF9MT0NLRUQpCisJCQkJCQlT
Q1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJCQkJcmV0dXJuICgmc2N0cF9pZmEtPmFkZHJlc3Mu
c2EpOworCQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsK
KwkJCX0KKwkJfQorCX0KKwkvKiBubyB2YWxpZCBhZGRyZXNzZXMgZm91bmQgKi8KKwlpZiAoYWRk
cl9sb2NrZWQgPT0gU0NUUF9BRERSX05PVF9MT0NLRUQpCisJCVNDVFBfSVBJX0FERFJfUlVOTE9D
SygpOworCXJldHVybiAoTlVMTCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29ja2FkZHIgKgorc2N0
cF9maW5kX3ZhbGlkX2xvY2FsYWRkcl9lcChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3Ry
dWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+c2N0
cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJaWYgKGxhZGRyLT5pZmEg
PT0gTlVMTCkgeworCQkJY29udGludWU7CisJCX0KKwkJLyogaXMgdGhlIGFkZHJlc3MgcmVzdHJp
Y3RlZCA/ICovCisJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZh
KSAmJgorCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBsYWRkci0+aWZhKSkpCisJ
CQljb250aW51ZTsKKworCQkvKiBmb3VuZCBhIHZhbGlkIGxvY2FsIGFkZHJlc3MgdG8gdXNlICov
CisJCXJldHVybiAoJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2EpOworCX0KKwkvKiBubyB2YWxpZCBh
ZGRyZXNzZXMgZm91bmQgKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogYnVpbGRzIGFu
IEFTQ09ORiBjaHVuayBmcm9tIHF1ZXVlZCBBU0NPTkYgcGFyYW1zLgorICogcmV0dXJucyBOVUxM
IG9uIGVycm9yIChubyBtYnVmLCBubyBBU0NPTkYgcGFyYW1zIHF1ZXVlZCwgZXRjKS4KKyAqLwor
c3RydWN0IG1idWYgKgorc2N0cF9jb21wb3NlX2FzY29uZihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IGludCAqcmV0bGVuLCBpbnQgYWRkcl9sb2NrZWQpCit7CisJc3RydWN0IG1idWYgKm1fYXNjb25m
LCAqbV9hc2NvbmZfY2hrOworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphYTsKKwlzdHJ1Y3Qg
c2N0cF9hc2NvbmZfY2h1bmsgKmFjcDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgKmFw
aDsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSAqYWFwOworCXVpbnQzMl90IHBfbGVu
Z3RoOworCXVpbnQzMl90IGNvcnJlbGF0aW9uX2lkID0gMTsJLyogMCBpcyByZXNlcnZlZC4uLiAq
LworCWNhZGRyX3QgcHRyLCBsb29rdXBfcHRyOworCXVpbnQ4X3QgbG9va3VwX3VzZWQgPSAwOwor
CisJLyogYXJlIHRoZXJlIGFueSBhc2NvbmYgcGFyYW1zIHRvIHNlbmQ/ICovCisJVEFJTFFfRk9S
RUFDSChhYSwgJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0KSB7CisJCWlmIChhYS0+c2Vu
dCA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChhYSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwp
OworCisJLyoKKwkgKiBnZXQgYSBjaHVuayBoZWFkZXIgbWJ1ZiBhbmQgYSBjbHVzdGVyIGZvciB0
aGUgYXNjb25mIHBhcmFtcyBzaW5jZQorCSAqIGl0J3Mgc2ltcGxlciB0byBmaWxsIGluIHRoZSBh
c2NvbmYgY2h1bmsgaGVhZGVyIGxvb2t1cCBhZGRyZXNzIG9uCisJICogdGhlIGZseQorCSAqLwor
CW1fYXNjb25mX2NoayA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBf
YXNjb25mX2NodW5rKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX2FzY29uZl9j
aGsgPT0gTlVMTCkgeworCQkvKiBubyBtYnVmJ3MgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FT
Q09ORjEsCisJCQkiY29tcG9zZV9hc2NvbmY6IGNvdWxkbid0IGdldCBjaHVuayBtYnVmIVxuIik7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCW1fYXNjb25mID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNn
KE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fYXNjb25mID09IE5V
TEwpIHsKKwkJLyogbm8gbWJ1ZidzICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLAor
CQkJImNvbXBvc2VfYXNjb25mOiBjb3VsZG4ndCBnZXQgbWJ1ZiFcbiIpOworCQlzY3RwX21fZnJl
ZW0obV9hc2NvbmZfY2hrKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJU0NUUF9CVUZfTEVOKG1f
YXNjb25mX2NoaykgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2NodW5rKTsKKwlTQ1RQX0JV
Rl9MRU4obV9hc2NvbmYpID0gMDsKKwlhY3AgPSBtdG9kKG1fYXNjb25mX2Noaywgc3RydWN0IHNj
dHBfYXNjb25mX2NodW5rICopOworCW1lbXNldChhY3AsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9h
c2NvbmZfY2h1bmspKTsKKwkvKiBzYXZlIHBvaW50ZXJzIHRvIGxvb2t1cCBhZGRyZXNzIGFuZCBh
c2NvbmYgcGFyYW1zICovCisJbG9va3VwX3B0ciA9IChjYWRkcl90KShhY3AgKyAxKTsJLyogYWZ0
ZXIgdGhlIGhlYWRlciAqLworCXB0ciA9IG10b2QobV9hc2NvbmYsIGNhZGRyX3QpOwkvKiBiZWdp
bm5pbmcgb2YgY2x1c3RlciAqLworCisJLyogZmlsbCBpbiBjaHVuayBoZWFkZXIgaW5mbyAqLwor
CWFjcC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfQVNDT05GOworCWFjcC0+Y2guY2h1bmtfZmxhZ3Mg
PSAwOworCWFjcC0+c2VyaWFsX251bWJlciA9IGh0b25sKHN0Y2ItPmFzb2MuYXNjb25mX3NlcV9v
dXQpOworCXN0Y2ItPmFzb2MuYXNjb25mX3NlcV9vdXQrKzsKKworCS8qIGFkZCBwYXJhbWV0ZXJz
Li4uIHVwIHRvIHNtYWxsZXN0IE1UVSBhbGxvd2VkICovCisJVEFJTFFfRk9SRUFDSChhYSwgJnN0
Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBuZXh0KSB7CisJCWlmIChhYS0+c2VudCkKKwkJCWNvbnRp
bnVlOworCQkvKiBnZXQgdGhlIHBhcmFtZXRlciBsZW5ndGggKi8KKwkJcF9sZW5ndGggPSBTQ1RQ
X1NJWkUzMihhYS0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCk7CisJCS8qIHdpbGwgaXQgZml0IGlu
IGN1cnJlbnQgY2h1bms/ICovCisJCWlmICgoU0NUUF9CVUZfTEVOKG1fYXNjb25mKSArIHBfbGVu
Z3RoID4gc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUpIHx8CisJCSAgICAoU0NUUF9CVUZfTEVOKG1f
YXNjb25mKSArIHBfbGVuZ3RoID4gTUNMQllURVMpKSB7CisJCQkvKiB3b24ndCBmaXQsIHNvIHdl
J3JlIGRvbmUgd2l0aCB0aGlzIGNodW5rICovCisJCQlicmVhazsKKwkJfQorCQkvKiBhc3NpZ24g
KGFuZCBzdG9yZSkgYSBjb3JyZWxhdGlvbiBpZCAqLworCQlhYS0+YXAuYXBoLmNvcnJlbGF0aW9u
X2lkID0gY29ycmVsYXRpb25faWQrKzsKKworCQkvKgorCQkgKiBmaWxsIGluIGFkZHJlc3MgaWYg
d2UncmUgZG9pbmcgYSBkZWxldGUgdGhpcyBpcyBhIHNpbXBsZQorCQkgKiB3YXkgZm9yIHVzIHRv
IGZpbGwgaW4gdGhlIGNvcnJlbGF0aW9uIGFkZHJlc3MsIHdoaWNoCisJCSAqIHNob3VsZCBvbmx5
IGJlIHVzZWQgYnkgdGhlIHBlZXIgaWYgd2UncmUgZGVsZXRpbmcgb3VyCisJCSAqIHNvdXJjZSBh
ZGRyZXNzIGFuZCBhZGRpbmcgYSBuZXcgYWRkcmVzcyAoZS5nLiByZW51bWJlcmluZworCQkgKiBj
YXNlKQorCQkgKi8KKwkJaWYgKGxvb2t1cF91c2VkID09IDAgJiYKKwkJICAgIChhYS0+c3BlY2lh
bF9kZWwgPT0gMCkgJiYKKwkJICAgIGFhLT5hcC5hcGgucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0RF
TF9JUF9BRERSRVNTKSB7CisJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqbG9va3VwOwor
CQkJdWludDE2X3QgcF9zaXplLCBhZGRyX3NpemU7CisKKwkJCWxvb2t1cCA9IChzdHJ1Y3Qgc2N0
cF9pcHY2YWRkcl9wYXJhbSAqKWxvb2t1cF9wdHI7CisJCQlsb29rdXAtPnBoLnBhcmFtX3R5cGUg
PQorCQkJICAgIGh0b25zKGFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlKTsKKwkJCWlmIChhYS0+
YXAuYWRkcnAucGgucGFyYW1fdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgeworCQkJCS8qIGNv
cHkgSVB2NiBhZGRyZXNzICovCisJCQkJcF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZh
ZGRyX3BhcmFtKTsKKwkJCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKwkJ
CX0gZWxzZSB7CisJCQkJLyogY29weSBJUHY0IGFkZHJlc3MgKi8KKwkJCQlwX3NpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pOworCQkJCWFkZHJfc2l6ZSA9IHNpemVvZihz
dHJ1Y3QgaW5fYWRkcik7CisJCQl9CisJCQlsb29rdXAtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25z
KFNDVFBfU0laRTMyKHBfc2l6ZSkpOworCQkJbWVtY3B5KGxvb2t1cC0+YWRkciwgJmFhLT5hcC5h
ZGRycC5hZGRyLCBhZGRyX3NpemUpOworCQkJU0NUUF9CVUZfTEVOKG1fYXNjb25mX2NoaykgKz0g
U0NUUF9TSVpFMzIocF9zaXplKTsKKwkJCWxvb2t1cF91c2VkID0gMTsKKwkJfQorCQkvKiBjb3B5
IGludG8gY3VycmVudCBzcGFjZSAqLworCQltZW1jcHkocHRyLCAmYWEtPmFwLCBwX2xlbmd0aCk7
CisKKwkJLyogbmV0d29yayBlbGVtZW50cyBhbmQgdXBkYXRlIGxlbmd0aHMgKi8KKwkJYXBoID0g
KHN0cnVjdCBzY3RwX2FzY29uZl9wYXJhbWhkciAqKXB0cjsKKwkJYWFwID0gKHN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRyX3BhcmFtICopcHRyOworCQkvKiBjb3JyZWxhdGlvbl9pZCBpcyB0cmFuc3Bh
cmVudCB0byBwZWVyLCBubyBodG9ubCBuZWVkZWQgKi8KKwkJYXBoLT5waC5wYXJhbV90eXBlID0g
aHRvbnMoYXBoLT5waC5wYXJhbV90eXBlKTsKKwkJYXBoLT5waC5wYXJhbV9sZW5ndGggPSBodG9u
cyhhcGgtPnBoLnBhcmFtX2xlbmd0aCk7CisJCWFhcC0+YWRkcnAucGgucGFyYW1fdHlwZSA9IGh0
b25zKGFhcC0+YWRkcnAucGgucGFyYW1fdHlwZSk7CisJCWFhcC0+YWRkcnAucGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMoYWFwLT5hZGRycC5waC5wYXJhbV9sZW5ndGgpOworCisJCVNDVFBfQlVGX0xF
TihtX2FzY29uZikgKz0gU0NUUF9TSVpFMzIocF9sZW5ndGgpOworCQlwdHIgKz0gU0NUUF9TSVpF
MzIocF9sZW5ndGgpOworCisJCS8qCisJCSAqIHRoZXNlIHBhcmFtcyBhcmUgcmVtb3ZlZCBvZmYg
dGhlIHBlbmRpbmcgbGlzdCB1cG9uCisJCSAqIGdldHRpbmcgYW4gQVNDT05GLUFDSyBiYWNrIGZy
b20gdGhlIHBlZXIsIGp1c3Qgc2V0IGZsYWcKKwkJICovCisJCWFhLT5zZW50ID0gMTsKKwl9CisJ
LyogY2hlY2sgdG8gc2VlIGlmIHRoZSBsb29rdXAgYWRkciBoYXMgYmVlbiBwb3B1bGF0ZWQgeWV0
ICovCisJaWYgKGxvb2t1cF91c2VkID09IDApIHsKKwkJLyogTk9URTogaWYgdGhlIGFkZHJlc3Mg
cGFyYW0gaXMgb3B0aW9uYWwsIGNhbiBza2lwIHRoaXMuLi4gKi8KKwkJLyogYWRkIGFueSB2YWxp
ZCAoZXhpc3RpbmcpIGFkZHJlc3MuLi4gKi8KKwkJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0g
Kmxvb2t1cDsKKwkJdWludDE2X3QgcF9zaXplLCBhZGRyX3NpemU7CisJCXN0cnVjdCBzb2NrYWRk
ciAqZm91bmRfYWRkcjsKKwkJY2FkZHJfdCBhZGRyX3B0cjsKKworCQlpZiAoc3RjYi0+c2N0cF9l
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKQorCQkJZm91bmRfYWRkciA9
IHNjdHBfZmluZF92YWxpZF9sb2NhbGFkZHIoc3RjYiwKKwkJCQkJCQkgICAgICAgYWRkcl9sb2Nr
ZWQpOworCQllbHNlCisJCQlmb3VuZF9hZGRyID0gc2N0cF9maW5kX3ZhbGlkX2xvY2FsYWRkcl9l
cChzdGNiKTsKKworCQlsb29rdXAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilsb29r
dXBfcHRyOworCQlpZiAoZm91bmRfYWRkciAhPSBOVUxMKSB7CisJCQlzd2l0Y2ggKGZvdW5kX2Fk
ZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCS8q
IGNvcHkgSVB2NiBhZGRyZXNzICovCisJCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0KKwkJCQkg
ICAgaHRvbnMoU0NUUF9JUFY2X0FERFJFU1MpOworCQkJCXBfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9pcHY2YWRkcl9wYXJhbSk7CisJCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZf
YWRkcik7CisJCQkJYWRkcl9wdHIgPSAoY2FkZHJfdCkmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
CisJCQkJICAgIGZvdW5kX2FkZHIpLT5zaW42X2FkZHI7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNp
ZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJLyogY29weSBJUHY0IGFkZHJlc3MgKi8K
KwkJCQlsb29rdXAtPnBoLnBhcmFtX3R5cGUgPQorCQkJCSAgICBodG9ucyhTQ1RQX0lQVjRfQURE
UkVTUyk7CisJCQkJcF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsK
KwkJCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOworCQkJCWFkZHJfcHRyID0g
KGNhZGRyX3QpJigoc3RydWN0IHNvY2thZGRyX2luICopCisJCQkJICAgIGZvdW5kX2FkZHIpLT5z
aW5fYWRkcjsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlwX3NpemUgPSAw
OworCQkJCWFkZHJfc2l6ZSA9IDA7CisJCQkJYWRkcl9wdHIgPSBOVUxMOworCQkJCWJyZWFrOwor
CQkJfQorCQkJbG9va3VwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihwX3Np
emUpKTsKKwkJCW1lbWNweShsb29rdXAtPmFkZHIsIGFkZHJfcHRyLCBhZGRyX3NpemUpOworCQkJ
U0NUUF9CVUZfTEVOKG1fYXNjb25mX2NoaykgKz0gU0NUUF9TSVpFMzIocF9zaXplKTsKKwkJfSBl
bHNlIHsKKwkJCS8qIHVoIG9oLi4uIGRvbid0IGhhdmUgYW55IGFkZHJlc3M/PyAqLworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCQkJImNvbXBvc2VfYXNjb25mOiBubyBsb29rdXAg
YWRkciFcbiIpOworCQkJLyogWFhYIGZvciBub3csIHdlIHNlbmQgYSBJUHY0IGFkZHJlc3Mgb2Yg
MC4wLjAuMCAqLworCQkJbG9va3VwLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9JUFY0X0FE
RFJFU1MpOworCQkJbG9va3VwLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhTQ1RQX1NJWkUzMihz
aXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSk7CisJCQltZW1zZXQobG9va3VwLT5h
ZGRyLCAwLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJCVNDVFBfQlVGX0xFTihtX2FzY29u
Zl9jaGspICs9IFNDVFBfU0laRTMyKHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkp
OworCQl9CisJfQorCS8qIGNoYWluIGl0IGFsbCB0b2dldGhlciAqLworCVNDVFBfQlVGX05FWFQo
bV9hc2NvbmZfY2hrKSA9IG1fYXNjb25mOworCSpyZXRsZW4gPSBTQ1RQX0JVRl9MRU4obV9hc2Nv
bmZfY2hrKSArIFNDVFBfQlVGX0xFTihtX2FzY29uZik7CisJYWNwLT5jaC5jaHVua19sZW5ndGgg
PSBodG9ucygqcmV0bGVuKTsKKworCXJldHVybiAobV9hc2NvbmZfY2hrKTsKK30KKworLyoKKyAq
IHNlY3Rpb24gdG8gaGFuZGxlIGFkZHJlc3MgY2hhbmdlcyBiZWZvcmUgYW4gYXNzb2NpYXRpb24g
aXMgdXAgZWcuIGNoYW5nZXMKKyAqIGR1cmluZyBJTklUL0lOSVQtQUNLL0NPT0tJRS1FQ0hPIGhh
bmRzaGFrZQorICovCisKKy8qCisgKiBwcm9jZXNzZXMgdGhlIChsb2NhbCkgYWRkcmVzc2VzIGlu
IHRoZSBJTklULUFDSyBjaHVuaworICovCitzdGF0aWMgdm9pZAorc2N0cF9wcm9jZXNzX2luaXRh
Y2tfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCisgICAg
dW5zaWduZWQgaW50IG9mZnNldCwgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciB0bXBfcGFyYW0sICpwaDsKKwl1aW50MTZfdCBwbGVuLCBwdHlwZTsKKwlzdHJ1
Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXVuaW9uIHNjdHBfc29ja3N0b3JlIHN0b3JlOworI2lm
ZGVmIElORVQ2CisJc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gYWRkcjZfc3RvcmU7CisjZW5k
aWYKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gYWRkcjRfc3RvcmU7
CisjZW5kaWYKKworCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYyLCAicHJvY2Vzc2luZyBpbml0
LWFjayBhZGRyZXNzZXNcbiIpOworCWlmIChzdGNiID09IE5VTEwpIC8qIFVuLW5lZWRlZCBjaGVj
ayBmb3IgU0EgKi8KKwkJcmV0dXJuOworCisJLyogY29udmVydCB0byB1cHBlciBib3VuZCAqLwor
CWxlbmd0aCArPSBvZmZzZXQ7CisKKwlpZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9w
YXJhbWhkcikpID4gbGVuZ3RoKSB7CisJCXJldHVybjsKKwl9CisJLyogZ28gdGhyb3VnaCB0aGUg
YWRkcmVzc2VzIGluIHRoZSBpbml0LWFjayAqLworCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRy
ICopCisJICAgICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyKSwKKwkgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmdG1wX3BhcmFtKTsKKwl3
aGlsZSAocGggIT0gTlVMTCkgeworCQlwdHlwZSA9IG50b2hzKHBoLT5wYXJhbV90eXBlKTsKKwkJ
cGxlbiA9IG50b2hzKHBoLT5wYXJhbV9sZW5ndGgpOworCQlzd2l0Y2ggKHB0eXBlKSB7CisjaWZk
ZWYgSU5FVDYKKwkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJeworCQkJc3RydWN0IHNjdHBf
aXB2NmFkZHJfcGFyYW0gKmE2cDsKKworCQkJLyogZ2V0IHRoZSBlbnRpcmUgSVB2NiBhZGRyZXNz
IHBhcmFtICovCisJCQlhNnAgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKikKKwkJCSAg
ICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0pLAorCQkJICAgICh1aW50OF90ICopJmFkZHI2X3N0b3JlKTsKKwkJCWlmIChw
bGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSkgfHwKKwkJCSAgICBhNnAg
PT0gTlVMTCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1lbXNldCgmc3RvcmUsIDAsIHNpemVv
Zih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOworCQkJc3RvcmUuc2luNi5zaW42X2ZhbWlseSA9IEFG
X0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCXN0b3JlLnNpbjYuc2luNl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCXN0b3JlLnNpbjYuc2luNl9w
b3J0ID0gc3RjYi0+cnBvcnQ7CisJCQltZW1jcHkoJnN0b3JlLnNpbjYuc2luNl9hZGRyLCBhNnAt
PmFkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYK
KyNpZmRlZiBJTkVUCisJCWNhc2UgU0NUUF9JUFY0X0FERFJFU1M6CisJCXsKKwkJCXN0cnVjdCBz
Y3RwX2lwdjRhZGRyX3BhcmFtICphNHA7CisKKwkJCS8qIGdldCB0aGUgZW50aXJlIElQdjQgYWRk
cmVzcyBwYXJhbSAqLworCQkJYTRwID0gKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICopc2N0
cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCQkJCQkJCQkgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0
YWRkcl9wYXJhbSksCisJCQkJCQkJCQkgICh1aW50OF90ICopJmFkZHI0X3N0b3JlKTsKKwkJCWlm
IChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSkgfHwKKwkJCSAgICBh
NHAgPT0gTlVMTCkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJCW1lbXNldCgmc3RvcmUsIDAsIHNp
emVvZih1bmlvbiBzY3RwX3NvY2tzdG9yZSkpOworCQkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBB
Rl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQkJc3RvcmUuc2luLnNpbl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0g
c3RjYi0+cnBvcnQ7CisJCQlzdG9yZS5zaW4uc2luX2FkZHIuc19hZGRyID0gYTRwLT5hZGRyOwor
CQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJZ290byBuZXh0X2FkZHI7CisJ
CX0KKworCQkvKiBzZWUgaWYgdGhpcyBhZGRyZXNzIHJlYWxseSAoc3RpbGwpIGV4aXN0cyAqLwor
CQlzY3RwX2lmYSA9IHNjdHBfZmluZF9pZmFfYnlfYWRkcigmc3RvcmUuc2EsIHN0Y2ItPmFzb2Mu
dnJmX2lkLAorCQkJCQkJIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwkJaWYgKHNjdHBfaWZhID09
IE5VTEwpIHsKKwkJCS8qIGFkZHJlc3MgZG9lc24ndCBleGlzdCBhbnltb3JlICovCisJCQlpbnQg
c3RhdHVzOworCisJCQkvKiBhcmUgQVNDT05GcyBhbGxvd2VkID8gKi8KKwkJCWlmICgoc2N0cF9p
c19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCQkgICAgU0NUUF9QQ0JfRkxBR1NfRE9fQVND
T05GKSkgJiYKKwkJCSAgICBzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQpIHsKKwkJCQkvKiBx
dWV1ZSBhbiBBU0NPTkYgREVMX0lQX0FERFJFU1MgKi8KKwkJCQlzdGF0dXMgPSBzY3RwX2FzY29u
Zl9xdWV1ZV9zYV9kZWxldGUoc3RjYiwgJnN0b3JlLnNhKTsKKwkJCQkvKgorCQkJCSAqIGlmIHF1
ZXVlZCBvaywgYW5kIGluIGNvcnJlY3Qgc3RhdGUsIHNlbmQKKwkJCQkgKiBvdXQgdGhlIEFTQ09O
Ri4KKwkJCQkgKi8KKwkJCQlpZiAoc3RhdHVzID09IDAgJiYKKwkJCQkgICAgU0NUUF9HRVRfU1RB
VEUoJnN0Y2ItPmFzb2MpID09CisJCQkJICAgIFNDVFBfU1RBVEVfT1BFTikgeworI2lmZGVmIFND
VFBfVElNRVJfQkFTRURfQVNDT05GCisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9U
WVBFX0FTQ09ORiwKKwkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgc3RjYi0+
YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKyNlbHNlCisJCQkJCXNjdHBfc2VuZF9hc2NvbmYo
c3RjYiwgTlVMTCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJCQkJfQorCQkJfQor
CQl9CisKK25leHRfYWRkcjoKKwkJLyoKKwkJICogU2FuaXR5IGNoZWNrOiAgTWFrZSBzdXJlIHRo
ZSBsZW5ndGggaXNuJ3QgMCwgb3RoZXJ3aXNlCisJCSAqIHdlJ2xsIGJlIHN0dWNrIGluIHRoaXMg
bG9vcCBmb3IgYSBsb25nIHRpbWUuLi4KKwkJICovCisJCWlmIChTQ1RQX1NJWkUzMihwbGVuKSA9
PSAwKSB7CisJCQlTQ1RQX1BSSU5URigicHJvY2Vzc19pbml0YWNrX2FkZHJzOiBiYWQgbGVuICgl
ZCkgdHlwZT0leGhcbiIsCisJCQkJICAgIHBsZW4sIHB0eXBlKTsKKwkJCXJldHVybjsKKwkJfQor
CQkvKiBnZXQgbmV4dCBwYXJhbWV0ZXIgKi8KKwkJb2Zmc2V0ICs9IFNDVFBfU0laRTMyKHBsZW4p
OworCQlpZiAoKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpID4gbGVuZ3Ro
KQorCQkJcmV0dXJuOworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRw
dHIobSwgb2Zmc2V0LAorCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4
X3QgKikmdG1wX3BhcmFtKTsKKwl9IC8qIHdoaWxlICovCit9CisKKy8qIEZJWCBNRTogbmVlZCB0
byB2ZXJpZnkgcmV0dXJuIHJlc3VsdCBmb3IgdjYgYWRkcmVzcyB0eXBlIGlmIHY2IGRpc2FibGVk
ICovCisvKgorICogY2hlY2tzIHRvIHNlZSBpZiBhIHNwZWNpZmljIGFkZHJlc3MgaXMgaW4gdGhl
IGluaXRhY2sgYWRkcmVzcyBsaXN0IHJldHVybnMKKyAqIDEgaWYgZm91bmQsIDAgaWYgbm90Cisg
Ki8KK3N0YXRpYyB1aW50MzJfdAorc2N0cF9hZGRyX2luX2luaXRhY2soc3RydWN0IG1idWYgKm0s
IHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQor
eworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHRtcF9wYXJhbSwgKnBoOworCXVpbnQxNl90IHBsZW4s
IHB0eXBlOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKwlzdHJ1Y3Qg
c2N0cF9pcHY0YWRkcl9wYXJhbSAqYTRwOworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIGFk
ZHI0X3N0b3JlOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42OworCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICphNnA7CisJc3RydWN0IHNjdHBfaXB2
NmFkZHJfcGFyYW0gYWRkcjZfc3RvcmU7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNl90bXA7CisjZW5kaWYKKyNlbmRpZgorCisJc3dpdGNo
IChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWJyZWFrOworI2VuZGlm
CisJZGVmYXVsdDoKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlTQ1RQREJHKFNDVFBfREVCVUdfQVND
T05GMiwgImZpbmRfaW5pdGFja19hZGRyOiBzdGFydGluZyBzZWFyY2ggZm9yICIpOworCVNDVFBE
QkdfQUREUihTQ1RQX0RFQlVHX0FTQ09ORjIsIHNhKTsKKwkvKiBjb252ZXJ0IHRvIHVwcGVyIGJv
dW5kICovCisJbGVuZ3RoICs9IG9mZnNldDsKKworCWlmICgob2Zmc2V0ICsgc2l6ZW9mKHN0cnVj
dCBzY3RwX3BhcmFtaGRyKSkgPiBsZW5ndGgpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsCisJCQkiZmluZF9pbml0YWNrX2FkZHI6IGludmFsaWQgb2Zmc2V0P1xuIik7CisJCXJldHVy
biAoMCk7CisJfQorCS8qIGdvIHRocm91Z2ggdGhlIGFkZHJlc3NlcyBpbiB0aGUgaW5pdC1hY2sg
Ki8KKwlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0
LAorCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLCAodWludDhfdCAqKSAmIHRtcF9w
YXJhbSk7CisJd2hpbGUgKHBoICE9IE5VTEwpIHsKKwkJcHR5cGUgPSBudG9ocyhwaC0+cGFyYW1f
dHlwZSk7CisJCXBsZW4gPSBudG9ocyhwaC0+cGFyYW1fbGVuZ3RoKTsKKwkJc3dpdGNoIChwdHlw
ZSkgeworI2lmZGVmIElORVQ2CisJCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCQlpZiAoc2Et
PnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCS8qIGdldCB0aGUgZW50aXJlIElQdjYgYWRk
cmVzcyBwYXJhbSAqLworCQkJCWlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2YWRk
cl9wYXJhbSkpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIGdldCB0aGUgZW50aXJlIElQ
djYgYWRkcmVzcyBwYXJhbSAqLworCQkJCWE2cCA9IChzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJh
bSAqKQorCQkJCSAgICAgIHNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKSwKKwkJCQkgICAgICAg
ICAgICAgICAgICAgICh1aW50OF90ICopJmFkZHI2X3N0b3JlKTsKKwkJCQlpZiAoYTZwID09IE5V
TEwpIHsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopc2E7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJCWlmIChJTjZf
SVNfU0NPUEVfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCS8qIGNyZWF0ZSBh
IGNvcHkgYW5kIGNsZWFyIHNjb3BlICovCisJCQkJCW1lbWNweSgmc2luNl90bXAsIHNpbjYsCisJ
CQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQlzaW42ID0gJnNp
bjZfdG1wOworCQkJCQlpbjZfY2xlYXJzY29wZSgmc2luNi0+c2luNl9hZGRyKTsKKwkJCQl9Cisj
ZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQkJCWlmIChtZW1jbXAoJnNpbjYt
PnNpbjZfYWRkciwgYTZwLT5hZGRyLAorCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZf
YWRkcikpID09IDApIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJcmV0dXJuICgxKTsKKwkJ
CQl9CisJCQl9CisJCQlicmVhazsKKyNlbmRpZiAvKiBJTkVUNiAqLworI2lmZGVmIElORVQKKwkJ
Y2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJCWlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQp
IHsKKwkJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQkvKiBnZXQgdGhlIGVudGlyZSBJUHY0IGFkZHJlc3Mg
cGFyYW0gKi8KKwkJCQlhNHAgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKikKKwkJCQkg
ICAgICBzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJCQkgICAgICAgICAgICAgICAgICAgIHNp
emVvZihzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSksCisJCQkJICAgICAgICAgICAgICAgICAg
ICAodWludDhfdCAqKSZhZGRyNF9zdG9yZSk7CisJCQkJaWYgKGE0cCA9PSBOVUxMKSB7CisJCQkJ
CXJldHVybiAoMCk7CisJCQkJfQorCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilzYTsK
KwkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gYTRwLT5hZGRyKSB7CisJCQkJCS8qIGZv
dW5kIGl0ICovCisJCQkJCXJldHVybiAoMSk7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisjZW5k
aWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCS8qIGdldCBuZXh0IHBhcmFtZXRlciAq
LworCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJCWlmIChvZmZzZXQgKyBzaXplb2Yo
c3RydWN0IHNjdHBfcGFyYW1oZHIpID4gbGVuZ3RoKSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJ
CXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopCisJCSAgICBzY3RwX21fZ2V0cHRyKG0sIG9m
ZnNldCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwKKwkJICAgICh1aW50OF90ICopICYg
dG1wX3BhcmFtKTsKKwl9IC8qIHdoaWxlICovCisJLyogbm90IGZvdW5kISAqLworCXJldHVybiAo
MCk7Cit9CisKKy8qCisgKiBtYWtlcyBzdXJlIHRoYXQgdGhlIGN1cnJlbnQgZW5kcG9pbnQgbG9j
YWwgYWRkciBsaXN0IGlzIGNvbnNpc3RlbnQgd2l0aAorICogdGhlIG5ldyBhc3NvY2lhdGlvbiAo
ZWcuIHN1YnNldCBib3VuZCwgYXNjb25mIGFsbG93ZWQpIGFkZHMgYWRkcmVzc2VzIGFzCisgKiBu
ZWNlc3NhcnkKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfY2hlY2tfYWRkcmVzc19saXN0X2VwKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50
IGxlbmd0aCwgc3RydWN0IHNvY2thZGRyICppbml0X2FkZHIpCit7CisJc3RydWN0IHNjdHBfbGFk
ZHIgKmxhZGRyOworCisJLyogZ28gdGhyb3VnaCB0aGUgZW5kcG9pbnQgbGlzdCAqLworCUxJU1Rf
Rk9SRUFDSChsYWRkciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9h
ZGRyKSB7CisJCS8qIGJlIHBhcmFub2lkIGFuZCB2YWxpZGF0ZSB0aGUgbGFkZHIgKi8KKwkJaWYg
KGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJ
CQkJImNoZWNrX2FkZHJfbGlzdF9lcDogbGFkZHItPmlmYSBpcyBOVUxMIik7CisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVC
VUdfQVNDT05GMSwgImNoZWNrX2FkZHJfbGlzdF9lcDogbGFkZHItPmlmYS0+aWZhX2FkZHIgaXMg
TlVMTCIpOworCQkJY29udGludWU7CisJCX0KKwkJLyogZG8gaSBoYXZlIGl0IGltcGxpY2l0bHk/
ICovCisJCWlmIChzY3RwX2NtcGFkZHIoJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2EsIGluaXRfYWRk
cikpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIGNoZWNrIHRvIHNlZSBpZiBpbiB0aGUgaW5p
dC1hY2sgKi8KKwkJaWYgKCFzY3RwX2FkZHJfaW5faW5pdGFjayhtLCBvZmZzZXQsIGxlbmd0aCwg
JmxhZGRyLT5pZmEtPmFkZHJlc3Muc2EpKSB7CisJCQkvKiB0cnkgdG8gYWRkIGl0ICovCisJCQlz
Y3RwX2FkZHJfbWdtdF9hc3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBsYWRkci0+aWZhLAorCQkJ
ICAgIFNDVFBfQUREX0lQX0FERFJFU1MsIFNDVFBfQUREUl9OT1RfTE9DS0VEKTsKKwkJfQorCX0K
K30KKworLyoKKyAqIG1ha2VzIHN1cmUgdGhhdCB0aGUgY3VycmVudCBrZXJuZWwgYWRkcmVzcyBs
aXN0IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUgbmV3CisgKiBhc3NvY2lhdGlvbiAod2l0aCBhbGwg
YWRkcnMgYm91bmQpIGFkZHMgYWRkcmVzc2VzIGFzIG5lY2Vzc2FyeQorICovCitzdGF0aWMgdm9p
ZAorc2N0cF9jaGVja19hZGRyZXNzX2xpc3RfYWxsKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisgICAgaW50IGxlbmd0aCwgc3RydWN0IHNvY2thZGRy
ICppbml0X2FkZHIsCisgICAgdWludDE2X3QgbG9jYWxfc2NvcGUsIHVpbnQxNl90IHNpdGVfc2Nv
cGUsCisgICAgdWludDE2X3QgaXB2NF9zY29wZSwgdWludDE2X3QgbG9vcGJhY2tfc2NvcGUpCit7
CisJc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9p
Zm47CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKwl1aW50MzJfdCB2cmZfaWQ7CisjaWZk
ZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2VuZGlmCisKKwlpZiAoc3RjYikgeworCQl2
cmZfaWQgPSBzdGNiLT5hc29jLnZyZl9pZDsKKwl9IGVsc2UgeworCQlyZXR1cm47CisJfQorCVND
VFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYg
KHZyZiA9PSBOVUxMKSB7CisJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQlyZXR1cm47CisJ
fQorCS8qIGdvIHRocm91Z2ggYWxsIG91ciBrbm93biBpbnRlcmZhY2VzICovCisJTElTVF9GT1JF
QUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQlpZiAobG9vcGJhY2tf
c2NvcGUgPT0gMCAmJiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIHNr
aXAgbG9vcGJhY2sgaW50ZXJmYWNlICovCisJCQljb250aW51ZTsKKwkJfQorCQkvKiBnbyB0aHJv
dWdoIGVhY2ggaW50ZXJmYWNlIGFkZHJlc3MgKi8KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAm
c2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkvKiBkbyBpIGhhdmUgaXQgaW1wbGlj
aXRseT8gKi8KKwkJCWlmIChzY3RwX2NtcGFkZHIoJnNjdHBfaWZhLT5hZGRyZXNzLnNhLCBpbml0
X2FkZHIpKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzd2l0Y2ggKHNjdHBfaWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlz
aW4gPSAmc2N0cF9pZmEtPmFkZHJlc3Muc2luOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJ
CQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3Jl
ZCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luLT5zaW5fYWRkcikgIT0gMCkgeworCQkJ
CQljb250aW51ZTsKKwkJCQl9CisjZW5kaWYKKwkJCQlpZiAoKGlwdjRfc2NvcGUgPT0gMCkgJiYK
KwkJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQkJ
CS8qIHByaXZhdGUgYWRkcmVzcyBub3QgaW4gc2NvcGUgKi8KKwkJCQkJY29udGludWU7CisJCQkJ
fQorCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJ
CQkJc2luNiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW42OworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJCQkJaWYgKHByaXNvbl9jaGVja19pcDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5p
bnBfY3JlZCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRyKSAhPSAw
KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKyNlbmRpZgorCQkJCWlmICgobG9jYWxfc2NvcGUg
PT0gMCkgJiYKKwkJCQkgICAgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRy
KSkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAwKSAm
JgorCQkJCSAgICAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkgewor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJ
CQkJYnJlYWs7CisJCQl9CisJCQkvKiBjaGVjayB0byBzZWUgaWYgaW4gdGhlIGluaXQtYWNrICov
CisJCQlpZiAoIXNjdHBfYWRkcl9pbl9pbml0YWNrKG0sIG9mZnNldCwgbGVuZ3RoLCAmc2N0cF9p
ZmEtPmFkZHJlc3Muc2EpKSB7CisJCQkJLyogdHJ5IHRvIGFkZCBpdCAqLworCQkJCXNjdHBfYWRk
cl9tZ210X2Fzc29jKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJICAgIHNjdHBfaWZhLCBTQ1RQ
X0FERF9JUF9BRERSRVNTLAorCQkJCSAgICBTQ1RQX0FERFJfTE9DS0VEKTsKKwkJCX0KKwkJfSAv
KiBlbmQgZm9yZWFjaCBpZmEgKi8KKwl9IC8qIGVuZCBmb3JlYWNoIGlmbiAqLworCVNDVFBfSVBJ
X0FERFJfUlVOTE9DSygpOworfQorCisvKgorICogdmFsaWRhdGVzIGFuIGluaXQtYWNrIGNodW5r
IChmcm9tIGEgY29va2llLWVjaG8pIHdpdGggY3VycmVudCBhZGRyZXNzZXMKKyAqIGFkZHMgYWRk
cmVzc2VzIGZyb20gdGhlIGluaXQtYWNrIGludG8gb3VyIGxvY2FsIGFkZHJlc3MgbGlzdCwgaWYg
bmVlZGVkCisgKiBxdWV1ZXMgYXNjb25mIGFkZHMvZGVsZXRlcyBhZGRyZXNzZXMgYXMgbmVlZGVk
IGFuZCBtYWtlcyBhcHByb3ByaWF0ZSBsaXN0CisgKiBjaGFuZ2VzIGZvciBzb3VyY2UgYWRkcmVz
cyBzZWxlY3Rpb24gbSwgb2Zmc2V0OiBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZQorICogYWRk
cmVzcyBsaXN0IGluIGFuIGluaXQtYWNrIGNodW5rIGxlbmd0aDogdG90YWwgbGVuZ3RoIG9mIHRo
ZSBhZGRyZXNzCisgKiBwYXJhbXMgb25seSBpbml0X2FkZHI6IGFkZHJlc3Mgd2hlcmUgbXkgSU5J
VC1BQ0sgd2FzIHNlbnQgZnJvbQorICovCit2b2lkCitzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorICAgIGlu
dCBsZW5ndGgsIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9hZGRyLAorICAgIHVpbnQxNl90IGxvY2Fs
X3Njb3BlLCB1aW50MTZfdCBzaXRlX3Njb3BlLAorICAgIHVpbnQxNl90IGlwdjRfc2NvcGUsIHVp
bnQxNl90IGxvb3BiYWNrX3Njb3BlKQoreworCS8qIHByb2Nlc3MgdGhlIGxvY2FsIGFkZHJlc3Nl
cyBpbiB0aGUgaW5pdGFjayAqLworCXNjdHBfcHJvY2Vzc19pbml0YWNrX2FkZHJlc3NlcyhzdGNi
LCBtLCBvZmZzZXQsIGxlbmd0aCk7CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qIGJvdW5kIGFsbCBjYXNlICovCisJCXNj
dHBfY2hlY2tfYWRkcmVzc19saXN0X2FsbChzdGNiLCBtLCBvZmZzZXQsIGxlbmd0aCwgaW5pdF9h
ZGRyLAorCQkgICAgbG9jYWxfc2NvcGUsIHNpdGVfc2NvcGUsIGlwdjRfc2NvcGUsIGxvb3BiYWNr
X3Njb3BlKTsKKwl9IGVsc2UgeworCQkvKiBzdWJzZXQgYm91bmQgY2FzZSAqLworCQlpZiAoc2N0
cF9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICBTQ1RQX1BDQl9GTEFHU19ET19B
U0NPTkYpKSB7CisJCQkvKiBhc2NvbmYncyBhbGxvd2VkICovCisJCQlzY3RwX2NoZWNrX2FkZHJl
c3NfbGlzdF9lcChzdGNiLCBtLCBvZmZzZXQsIGxlbmd0aCwKKwkJCSAgICBpbml0X2FkZHIpOwor
CQl9CisJCS8qIGVsc2UsIG5vIGFzY29uZnMgYWxsb3dlZCwgc28gd2hhdCB3ZSBzZW50IGlzIHdo
YXQgd2UgZ2V0ICovCisJfQorfQorCisvKgorICogc2N0cF9iaW5keCgpIHN1cHBvcnQKKyAqLwor
dWludDMyX3QKK3NjdHBfYWRkcl9tZ210X2VwX3NhKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0
cnVjdCBzb2NrYWRkciAqc2EsCisgICAgdWludDMyX3QgdHlwZSwgdWludDMyX3QgdnJmX2lkLCBz
dHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcCkKK3sKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKwlz
dHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpubGFkZHI7CisKKyNpZmRlZiBIQVZFX1NBX0xFTgor
CWlmIChzYS0+c2FfbGVuID09IDApIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX0FTQ09ORiwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwp
OworCX0KKyNlbmRpZgorCWlmIChzY3RwX2lmYXApIHsKKwkJaWZhID0gc2N0cF9pZmFwOworCX0g
ZWxzZSBpZiAodHlwZSA9PSBTQ1RQX0FERF9JUF9BRERSRVNTKSB7CisJCS8qIEZvciBhbiBhZGQg
dGhlIGFkZHJlc3MgTVVTVCBiZSBvbiB0aGUgc3lzdGVtICovCisJCWlmYSA9IHNjdHBfZmluZF9p
ZmFfYnlfYWRkcihzYSwgdnJmX2lkLCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJfSBlbHNlIGlm
ICh0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJLyogRm9yIGEgZGVsZXRlIHdlIG5l
ZWQgdG8gZmluZCBpdCBpbiB0aGUgaW5wICovCisJCWlmYSA9IHNjdHBfZmluZF9pZmFfaW5fZXAo
aW5wLCBzYSwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCWlmYSA9IE5VTEw7
CisJfQorCWlmIChpZmEgIT0gTlVMTCkgeworCQlpZiAodHlwZSA9PSBTQ1RQX0FERF9JUF9BRERS
RVNTKSB7CisJCQlzY3RwX2FkZF9sb2NhbF9hZGRyX2VwKGlucCwgaWZhLCB0eXBlKTsKKwkJfSBl
bHNlIGlmICh0eXBlID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCWlmIChpbnAtPmxhZGRy
X2NvdW50IDwgMikgeworCQkJCS8qIGNhbid0IGRlbGV0ZSB0aGUgbGFzdCBsb2NhbCBhZGRyZXNz
ICovCisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX0FTQ09ORiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCQlMSVNU
X0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LAorCQkJCSAgICAgc2N0cF9ueHRf
YWRkcikgeworCQkJCWlmIChpZmEgPT0gbGFkZHItPmlmYSkgeworCQkJCQkvKiBNYXJrIGluIHRo
ZSBkZWxldGUgKi8KKwkJCQkJbGFkZHItPmFjdGlvbiA9IHR5cGU7CisJCQkJfQorCQkJfQorCQl9
CisJCWlmIChMSVNUX0VNUFRZKCZpbnAtPnNjdHBfYXNvY19saXN0KSkgeworCQkJLyoKKwkJCSAq
IFRoZXJlIGlzIG5vIG5lZWQgdG8gc3RhcnQgdGhlIGl0ZXJhdG9yIGlmCisJCQkgKiB0aGUgaW5w
IGhhcyBubyBhc3NvY2lhdGlvbnMuCisJCQkgKi8KKwkJCWlmICh0eXBlID09IFNDVFBfREVMX0lQ
X0FERFJFU1MpIHsKKwkJCQlMSVNUX0ZPUkVBQ0hfU0FGRShsYWRkciwgJmlucC0+c2N0cF9hZGRy
X2xpc3QsIHNjdHBfbnh0X2FkZHIsIG5sYWRkcikgeworCQkJCQlpZiAobGFkZHItPmlmYSA9PSBp
ZmEpIHsKKwkJCQkJCXNjdHBfZGVsX2xvY2FsX2FkZHJfZXAoaW5wLCBpZmEpOworCQkJCQl9CisJ
CQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICph
c2M7CisJCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqd2k7CisJCQlpbnQgcmV0OworCisJCQlTQ1RQX01B
TExPQyhhc2MsIHN0cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciAqLAorCQkJICAgICAgICAgICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9pdGVyYXRvciksCisJCQkgICAgICAgICAgICBTQ1RQ
X01fQVNDX0lUKTsKKwkJCWlmIChhc2MgPT0gTlVMTCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9BU0NPTkYsIEVOT01FTSk7CisJCQkJ
cmV0dXJuIChFTk9NRU0pOworCQkJfQorCQkJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9J
TkZPKGlwaV96b25lX2xhZGRyKSwgc3RydWN0IHNjdHBfbGFkZHIpOworCQkJaWYgKHdpID09IE5V
TEwpIHsKKwkJCQlTQ1RQX0ZSRUUoYXNjLCBTQ1RQX01fQVNDX0lUKTsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBFTk9NRU0p
OworCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCX0KKwkJCUxJU1RfSU5JVCgmYXNjLT5saXN0X29m
X3dvcmspOworCQkJYXNjLT5jbnQgPSAxOworCQkJU0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7CisJ
CQl3aS0+aWZhID0gaWZhOworCQkJd2ktPmFjdGlvbiA9IHR5cGU7CisJCQlhdG9taWNfYWRkX2lu
dCgmaWZhLT5yZWZjb3VudCwgMSk7CisJCQlMSVNUX0lOU0VSVF9IRUFEKCZhc2MtPmxpc3Rfb2Zf
d29yaywgd2ksIHNjdHBfbnh0X2FkZHIpOworCQkJcmV0ID0gc2N0cF9pbml0aWF0ZV9pdGVyYXRv
cihzY3RwX2FzY29uZl9pdGVyYXRvcl9lcCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2N0cF9hc2NvbmZfaXRlcmF0b3Jfc3RjYiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2N0cF9hc2NvbmZfaXRlcmF0b3JfZXBfZW5kLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBTQ1RQX1BDQl9BTllfRkxBR1MsCisJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFNDVFBfUENCX0FOWV9GRUFUVVJFUywKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9BU09DX0FOWV9TVEFURSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHZvaWQgKilhc2MsIDAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBf
YXNjb25mX2l0ZXJhdG9yX2VuZCwgaW5wLCAwKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlTQ1RQX1BS
SU5URigiRmFpbGVkIHRvIGluaXRpYXRlIGl0ZXJhdG9yIGZvciBhZGRyX21nbXRfZXBfc2FcbiIp
OworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9BU0NPTkYsIEVGQVVMVCk7CisJCQkJICAgICAgICAgICAgICAgICAgICBzY3RwX2FzY29uZl9p
dGVyYXRvcl9lbmQoYXNjLCAwKTsKKwkJCQlyZXR1cm4gKEVGQVVMVCk7CisJCQl9CisJCX0KKwkJ
cmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQkvKiBpbnZhbGlkIGFkZHJlc3MhICovCisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfQVNDT05GLCBF
QUREUk5PVEFWQUlMKTsKKwkJcmV0dXJuIChFQUREUk5PVEFWQUlMKTsKKwl9Cit9CisKK3ZvaWQK
K3NjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
CisJCQkJICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNjb25mX2Fk
ZHIgKmFhOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCXN0cnVjdCBzY3RwX2FzY29u
Zl90YWdfcGFyYW0gKnZ0YWc7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG87
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvNjsKKyNlbmRp
ZgorCWlmIChuZXQgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgInNj
dHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogTWlzc2luZyBuZXRcbiIpOworCQlyZXR1
cm47CisJfQorCWlmIChzdGNiID09IE5VTEwpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09O
RjEsICJzY3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGU6IE1pc3Npbmcgc3RjYlxuIik7
CisJCXJldHVybjsKKwl9CisgIC8qIE5lZWQgdG8gaGF2ZSBpbiB0aGUgYXNjb25mOgorICAgKiAt
IHZ0YWdwYXJhbShteV92dGFnL3BlZXJfdnRhZykKKyAgICogLSBhZGQoMC4wLjAuMCkKKyAgICog
LSBkZWwoMC4wLjAuMCkKKyAgICogLSBBbnkgZ2xvYmFsIGFkZHJlc3NlcyBhZGQoYWRkcikKKyAg
ICovCisJU0NUUF9NQUxMT0MoYWEsIHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICosIHNpemVvZigq
YWEpLAorCSAgICAgICAgICAgIFNDVFBfTV9BU0NfQUREUik7CisJaWYgKGFhID09IE5VTEwpIHsK
KwkJLyogZGlkbid0IGdldCBtZW1vcnkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEs
CisJCSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogZmFpbGVkIHRv
IGdldCBtZW1vcnkhXG4iKTsKKwkJcmV0dXJuOworCX0KKwlhYS0+c3BlY2lhbF9kZWwgPSAwOwor
CS8qIGZpbGwgaW4gYXNjb25mIGFkZHJlc3MgcGFyYW1ldGVyIGZpZWxkcyAqLworCS8qIHRvcCBs
ZXZlbCBlbGVtZW50cyBhcmUgIm5ldHdvcmtlZCIgZHVyaW5nIHNlbmQgKi8KKwlhYS0+aWZhID0g
TlVMTDsKKwlhYS0+c2VudCA9IDA7CQkvKiBjbGVhciBzZW50IGZsYWcgKi8KKwl2dGFnID0gKHN0
cnVjdCBzY3RwX2FzY29uZl90YWdfcGFyYW0gKikmYWEtPmFwLmFwaDsKKwl2dGFnLT5hcGgucGgu
cGFyYW1fdHlwZSA9IFNDVFBfTkFUX1ZUQUdTOworCXZ0YWctPmFwaC5waC5wYXJhbV9sZW5ndGgg
PSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3RhZ19wYXJhbSk7CisJdnRhZy0+bG9jYWxfdnRh
ZyA9IGh0b25sKHN0Y2ItPmFzb2MubXlfdnRhZyk7CisJdnRhZy0+cmVtb3RlX3Z0YWcgPSBodG9u
bChzdGNiLT5hc29jLnBlZXJfdnRhZyk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2Mu
YXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisKKwlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBf
YXNjb25mX2FkZHIgKiwgc2l6ZW9mKCphYSksCisJICAgICAgICAgICAgU0NUUF9NX0FTQ19BRERS
KTsKKwlpZiAoYWEgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLworCQlTQ1RQ
REJHKFNDVFBfREVCVUdfQVNDT05GMSwKKwkJICAgICAgICAic2N0cF9hc2NvbmZfc2VuZF9uYXRf
c3RhdGVfdXBkYXRlOiBmYWlsZWQgdG8gZ2V0IG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQor
CW1lbXNldChhYSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyKSk7CisJLyogZmls
bCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJhbWV0ZXIgZmllbGRzICovCisJLyogQUREKDAuMC4wLjAp
ICovCisJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCWNhc2UgQUZfSU5FVDoKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV90eXBlID0gU0NUUF9BRERf
SVBfQUREUkVTUzsKKwkJYWEtPmFwLmFwaC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSk7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBl
ID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBz
aXplb2YgKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQg
YW4gYWRkcmVzcywgd2UgYXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwo
JnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUg
PSBTQ1RQX0FERF9JUF9BRERSRVNTOworCQlhYS0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSk7CisJCWFhLT5hcC5hZGRycC5waC5w
YXJhbV90eXBlID0gU0NUUF9JUFY2X0FERFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9s
ZW5ndGggPSBzaXplb2YgKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVl
ZCB0byBhZGQgYW4gYWRkcmVzcywgd2UgYXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5T
RVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJCWJyZWFrOwor
I2VuZGlmCisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSAgICAg
ICAgInNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZTogdW5rbm93biBhZGRyZXNzIGZh
bWlseVxuIik7CisJCVNDVFBfRlJFRShhYSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJcmV0dXJuOwor
CX0KKwlTQ1RQX01BTExPQyhhYSwgc3RydWN0IHNjdHBfYXNjb25mX2FkZHIgKiwgc2l6ZW9mKCph
YSksCisJICAgICAgICAgICAgU0NUUF9NX0FTQ19BRERSKTsKKwlpZiAoYWEgPT0gTlVMTCkgewor
CQkvKiBkaWRuJ3QgZ2V0IG1lbW9yeSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwK
KwkJICAgICAgICAic2N0cF9hc2NvbmZfc2VuZF9uYXRfc3RhdGVfdXBkYXRlOiBmYWlsZWQgdG8g
Z2V0IG1lbW9yeSFcbiIpOworCQlyZXR1cm47CisJfQorCW1lbXNldChhYSwgMCwgc2l6ZW9mKHN0
cnVjdCBzY3RwX2FzY29uZl9hZGRyKSk7CisJLyogZmlsbCBpbiBhc2NvbmYgYWRkcmVzcyBwYXJh
bWV0ZXIgZmllbGRzICovCisJLyogQUREKDAuMC4wLjApICovCisJc3dpdGNoIChuZXQtPnJvLl9s
X2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJYWEt
PmFwLmFwaC5waC5wYXJhbV90eXBlID0gU0NUUF9BRERfSVBfQUREUkVTUzsKKwkJYWEtPmFwLmFw
aC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJh
bSk7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJ
CWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBzY3RwX2lwdjRh
ZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQgYW4gYWRkcmVzcywgd2UgYXJlIHVzaW5n
IDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNjb25mX3F1ZXVl
LCBhYSwgbmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lO
RVQ2OgorCQlhYS0+YXAuYXBoLnBoLnBhcmFtX3R5cGUgPSBTQ1RQX0RFTF9JUF9BRERSRVNTOwor
CQlhYS0+YXAuYXBoLnBoLnBhcmFtX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZf
YWRkcl9wYXJhbSk7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV90eXBlID0gU0NUUF9JUFY2X0FE
RFJFU1M7CisJCWFhLT5hcC5hZGRycC5waC5wYXJhbV9sZW5ndGggPSBzaXplb2YgKHN0cnVjdCBz
Y3RwX2lwdjZhZGRyX3BhcmFtKTsKKwkJLyogTm8gbmVlZCB0byBhZGQgYW4gYWRkcmVzcywgd2Ug
YXJlIHVzaW5nIDAuMC4wLjAgKi8KKwkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFzb2MuYXNj
b25mX3F1ZXVlLCBhYSwgbmV4dCk7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsCisJCSAgICAgICAgInNjdHBfYXNjb25mX3NlbmRfbmF0
X3N0YXRlX3VwZGF0ZTogdW5rbm93biBhZGRyZXNzIGZhbWlseVxuIik7CisJCVNDVFBfRlJFRShh
YSwgU0NUUF9NX0FTQ19BRERSKTsKKwkJcmV0dXJuOworCX0KKwkvKiBOb3cgd2UgbXVzdCBodW50
IHRoZSBhZGRyZXNzZXMgYW5kIGFkZCBhbGwgZ2xvYmFsIGFkZHJlc3NlcyAqLworCWlmIChzdGNi
LT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJc3Ry
dWN0IHNjdHBfdnJmICp2cmYgPSBOVUxMOworCQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsK
KwkJdWludDMyX3QgdnJmX2lkOworCisJCXZyZl9pZCA9IHN0Y2ItPnNjdHBfZXAtPmRlZl92cmZf
aWQ7CisJCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwkJaWYgKHZyZiA9PSBOVUxMKSB7
CisJCQlnb3RvIHNraXBfcmVzdDsKKwkJfQorCisJCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwkJ
TElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCUxJ
U1RfRk9SRUFDSChzY3RwX2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJ
CQkJc3dpdGNoIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJdG8gPSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNChzdGNi
LT5zY3RwX2VwLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAmdG8tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlm
CisJCQkJCWlmIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpIHsKKwkJCQkJ
CWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWlmIChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZ0by0+
c2luX2FkZHIpKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJdG82ID0gJnNjdHBfaWZh
cC0+YWRkcmVzcy5zaW42OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCWlmIChwcmlz
b25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICZ0bzYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnRvNi0+
c2luNl9hZGRyKSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJaWYgKElONl9JU19B
RERSX0xJTktMT0NBTCgmdG82LT5zaW42X2FkZHIpKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJ
fQorCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCWNvbnRpbnVlOworCQkJ
CX0KKwkJCQlzY3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0Y2IsIHNjdHBfaWZhcCwgU0NUUF9BRERf
SVBfQUREUkVTUyk7CisJCQl9CisJCX0KKwkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJfSBl
bHNlIHsKKwkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJCUxJU1RfRk9SRUFDSChsYWRk
ciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlp
ZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobGFk
ZHItPmlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpCisJCQkJLyogQWRk
cmVzcyBiZWluZyBkZWxldGVkIGJ5IHRoZSBzeXN0ZW0sIGRvbnQKKwkJCQkgKiBsaXN0LgorCQkJ
CSAqLworCQkJCWNvbnRpbnVlOworCQkJaWYgKGxhZGRyLT5hY3Rpb24gPT0gU0NUUF9ERUxfSVBf
QUREUkVTUykgeworCQkJCS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBvbiB0aGlzIGVwCisJCQkJ
ICogZG9uJ3QgbGlzdC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXNjdHBfaWZh
cCA9IGxhZGRyLT5pZmE7CisJCQlzd2l0Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJdG8gPSAmc2N0cF9pZmFw
LT5hZGRyZXNzLnNpbjsKKwkJCQlpZiAoSU40X0lTUFJJVkFURV9BRERSRVNTKCZ0by0+c2luX2Fk
ZHIpKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoSU40X0lTTE9PUEJBQ0tfQURE
UkVTUygmdG8tPnNpbl9hZGRyKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQl0bzYgPSAmc2N0
cF9pZmFwLT5hZGRyZXNzLnNpbjY7CisJCQkJaWYgKElONl9JU19BRERSX0xPT1BCQUNLKCZ0bzYt
PnNpbjZfYWRkcikpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmIChJTjZfSVNfQURE
Ul9MSU5LTE9DQUwoJnRvNi0+c2luNl9hZGRyKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJ
CQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlz
Y3RwX2FzY29uZl9xdWV1ZV9tZ210KHN0Y2IsIHNjdHBfaWZhcCwgU0NUUF9BRERfSVBfQUREUkVT
Uyk7CisJCX0KKwl9Cisgc2tpcF9yZXN0OgorCS8qIE5vdyB3ZSBtdXN0IHNlbmQgdGhlIGFzY29u
ZiBpbnRvIHRoZSBxdWV1ZSAqLworCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgbmV0LCBTQ1RQX0FE
RFJfTk9UX0xPQ0tFRCk7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF9hc2NvbmYuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29u
Zi5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjI4MTMw
ZjNiMmY2MDBkODY5ODk0NTk4M2RmNzA0ZWMzMjhhZWY2NjkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2FzY29uZi5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qLQorICogU1BEWC1M
aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAw
MS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBt
ZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBu
YW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVk
ZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0
cF9hc2NvbmYuaCAzMjQwNTYgMjAxNy0wOS0yNyAxMzowNToyM1ogdHVleGVuICQiKTsKKyNlbmRp
ZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBfQVNDT05GX0hfCisjZGVmaW5lIF9ORVRJTkVUX1ND
VFBfQVNDT05GX0hfCisKKyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworZXh0ZXJuIHZvaWQgc2N0
cF9hc2NvbmZfY2xlYW51cChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsK
KworZXh0ZXJuIHN0cnVjdCBtYnVmICpzY3RwX2NvbXBvc2VfYXNjb25mKHN0cnVjdCBzY3RwX3Rj
YiAqLCBpbnQgKiwgaW50KTsKKworZXh0ZXJuIHZvaWQKK3NjdHBfaGFuZGxlX2FzY29uZihzdHJ1
Y3QgbWJ1ZiAqLCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50
KTsKKworZXh0ZXJuIHZvaWQKK3NjdHBfaGFuZGxlX2FzY29uZl9hY2soc3RydWN0IG1idWYgKiwg
aW50LCBzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rICosCisgICAgIHN0cnVjdCBzY3RwX3Rj
YiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCAqKTsKKworZXh0ZXJuIHVpbnQzMl90CitzY3Rw
X2FkZHJfbWdtdF9lcF9zYShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwK
KwkJICAgICB1aW50MzJfdCwgdWludDMyX3QsIHN0cnVjdCBzY3RwX2lmYSAqKTsKKworCitleHRl
cm4gaW50IHNjdHBfYXNjb25mX2l0ZXJhdG9yX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHZv
aWQgKnB0ciwKKwkJCQkgICB1aW50MzJfdCB2YWwpOworZXh0ZXJuIHZvaWQgc2N0cF9hc2NvbmZf
aXRlcmF0b3Jfc3RjYihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJCSAgICAgIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKwkJCQkgICAgICB2b2lkICpwdHIsIHVpbnQzMl90IHR5cGUpOworZXh0
ZXJuIHZvaWQgc2N0cF9hc2NvbmZfaXRlcmF0b3JfZW5kKHZvaWQgKnB0ciwgdWludDMyX3QgdmFs
KTsKKworCitleHRlcm4gaW50MzJfdAorc2N0cF9zZXRfcHJpbWFyeV9pcF9hZGRyZXNzX3NhKHN0
cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzb2NrYWRkciAqKTsKKworZXh0ZXJuIHZvaWQK
K3NjdHBfY2hlY2tfYWRkcmVzc19saXN0KHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAq
LCBpbnQsIGludCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QsIHVpbnQxNl90LCB1
aW50MTZfdCwgdWludDE2X3QpOworCitleHRlcm4gdm9pZAorc2N0cF9hc3NvY19pbW1lZGlhdGVf
cmV0cmFucyhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqKTsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorZXh0ZXJuIHZvaWQKK3NjdHBfbmV0X2ltbWVkaWF0ZV9yZXRyYW5zKHN0cnVjdCBz
Y3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICopOworI2VuZGlmCisKK2V4dGVybiB2b2lkCitz
Y3RwX2FzY29uZl9zZW5kX25hdF9zdGF0ZV91cGRhdGUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAor
CQkJCSAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KTsKKworZXh0ZXJuIGludAorc2N0cF9pc19hZGRy
X3BlbmRpbmcoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lmYSAqKTsKKyNlbmRpZgkJ
CQkvKiBfS0VSTkVMICovCisKKyNlbmRpZgkJCQkvKiAhX05FVElORVRfU0NUUF9BU0NPTkZfSF8g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguYyBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguYwppbmRleCBlNjlkZTI5YmIy
ZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi41ZTU4MTNiM2YxN2NmNjM4N2RiMDA0ZDNh
YmUxZTUzMGQwMTg0MDhlIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQv
c2N0cF9hdXRoLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5j
CkBAIC0wLDAgKzEsMjM1MSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3Rl
bXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2F1dGguYyAzMzQ1MzIgMjAxOC0w
Ni0wMiAxNjoyODoxMFogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2hlYWRlci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRh
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9hdXRoLmg+CisKKyNpZmRlZiBTQ1RQX0RFQlVHCisjZGVmaW5lIFNDVFBfQVVUSF9ERUJV
RwkJKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWJ1Z19vbikgJiBTQ1RQX0RFQlVHX0FVVEgxKQor
I2RlZmluZSBTQ1RQX0FVVEhfREVCVUcyCShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24p
ICYgU0NUUF9ERUJVR19BVVRIMikKKyNlbmRpZiAvKiBTQ1RQX0RFQlVHICovCisKKwordm9pZAor
c2N0cF9jbGVhcl9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCkKK3sKKwlt
ZW1zZXQoY2hrbGlzdCwgMCwgc2l6ZW9mKCpjaGtsaXN0KSk7CisJLyogY2hrbGlzdC0+bnVtX2No
dW5rcyA9IDA7ICovCit9CisKK3NjdHBfYXV0aF9jaGtsaXN0X3QgKgorc2N0cF9hbGxvY19jaHVu
a2xpc3Qodm9pZCkKK3sKKwlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0OworCisJU0NUUF9N
QUxMT0MoY2hrbGlzdCwgc2N0cF9hdXRoX2Noa2xpc3RfdCAqLCBzaXplb2YoKmNoa2xpc3QpLAor
CQkgICAgU0NUUF9NX0FVVEhfQ0wpOworCWlmIChjaGtsaXN0ID09IE5VTEwpIHsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FVVEgxLCAic2N0cF9hbGxvY19jaHVua2xpc3Q6IGZhaWxlZCB0byBnZXQg
bWVtb3J5IVxuIik7CisJfSBlbHNlIHsKKwkJc2N0cF9jbGVhcl9jaHVua2xpc3QoY2hrbGlzdCk7
CisJfQorCXJldHVybiAoY2hrbGlzdCk7Cit9CisKK3ZvaWQKK3NjdHBfZnJlZV9jaHVua2xpc3Qo
c2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlpZiAobGlzdCAhPSBOVUxMKQorCQlTQ1RQ
X0ZSRUUobGlzdCwgU0NUUF9NX0FVVEhfQ0wpOworfQorCitzY3RwX2F1dGhfY2hrbGlzdF90ICoK
K3NjdHBfY29weV9jaHVua2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkKK3sKKwlzY3Rw
X2F1dGhfY2hrbGlzdF90ICpuZXdfbGlzdDsKKworCWlmIChsaXN0ID09IE5VTEwpCisJCXJldHVy
biAoTlVMTCk7CisKKwkvKiBnZXQgYSBuZXcgbGlzdCAqLworCW5ld19saXN0ID0gc2N0cF9hbGxv
Y19jaHVua2xpc3QoKTsKKwlpZiAobmV3X2xpc3QgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsK
KwkvKiBjb3B5IGl0ICovCisJbWVtY3B5KG5ld19saXN0LCBsaXN0LCBzaXplb2YoKm5ld19saXN0
KSk7CisKKwlyZXR1cm4gKG5ld19saXN0KTsKK30KKworCisvKgorICogYWRkIGEgY2h1bmsgdG8g
dGhlIHJlcXVpcmVkIGNodW5rcyBsaXN0CisgKi8KK2ludAorc2N0cF9hdXRoX2FkZF9jaHVuayh1
aW50OF90IGNodW5rLCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0KQoreworCWlmIChsaXN0ID09
IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJLyogaXMgY2h1bmsgcmVzdHJpY3RlZD8gKi8KKwlp
ZiAoKGNodW5rID09IFNDVFBfSU5JVElBVElPTikgfHwKKwkgICAgKGNodW5rID09IFNDVFBfSU5J
VElBVElPTl9BQ0spIHx8CisJICAgIChjaHVuayA9PSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFKSB8
fAorCSAgICAoY2h1bmsgPT0gU0NUUF9BVVRIRU5USUNBVElPTikpIHsKKwkJcmV0dXJuICgtMSk7
CisJfQorCWlmIChsaXN0LT5jaHVua3NbY2h1bmtdID09IDApIHsKKwkJbGlzdC0+Y2h1bmtzW2No
dW5rXSA9IDE7CisJCWxpc3QtPm51bV9jaHVua3MrKzsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FV
VEgxLAorCQkJIlNDVFA6IGFkZGVkIGNodW5rICV1ICgweCUwMngpIHRvIEF1dGggbGlzdFxuIiwK
KwkJCWNodW5rLCBjaHVuayk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBkZWxldGUg
YSBjaHVuayBmcm9tIHRoZSByZXF1aXJlZCBjaHVua3MgbGlzdAorICovCitpbnQKK3NjdHBfYXV0
aF9kZWxldGVfY2h1bmsodWludDhfdCBjaHVuaywgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCkK
K3sKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCWlmIChsaXN0LT5jaHVu
a3NbY2h1bmtdID09IDEpIHsKKwkJbGlzdC0+Y2h1bmtzW2NodW5rXSA9IDA7CisJCWxpc3QtPm51
bV9jaHVua3MtLTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFA6IGRlbGV0
ZWQgY2h1bmsgJXUgKDB4JTAyeCkgZnJvbSBBdXRoIGxpc3RcbiIsCisJCQljaHVuaywgY2h1bmsp
OworCX0KKwlyZXR1cm4gKDApOworfQorCitzaXplX3QKK3NjdHBfYXV0aF9nZXRfY2hrbGlzdF9z
aXplKGNvbnN0IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJaWYgKGxpc3QgPT0gTlVM
TCkKKwkJcmV0dXJuICgwKTsKKwllbHNlCisJCXJldHVybiAobGlzdC0+bnVtX2NodW5rcyk7Cit9
CisKKy8qCisgKiByZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIGFuZCBsaXN0IG9mIHJlcXVpcmVk
IGNodW5rcyBjYWxsZXIgbXVzdAorICogZ3VhcmFudGVlIHB0ciBoYXMgc3BhY2UgZm9yIHVwIHRv
IDI1NiBieXRlcworICovCitpbnQKK3NjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNvbnN0IHNj
dHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QsIHVpbnQ4X3QgKnB0cikKK3sKKwlpbnQgaSwgY291bnQg
PSAwOworCisJaWYgKGxpc3QgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKworCWZvciAoaSA9IDA7
IGkgPCAyNTY7IGkrKykgeworCQlpZiAobGlzdC0+Y2h1bmtzW2ldICE9IDApIHsKKwkJCSpwdHIr
KyA9IGk7CisJCQljb3VudCsrOworCQl9CisJfQorCXJldHVybiAoY291bnQpOworfQorCitpbnQK
K3NjdHBfcGFja19hdXRoX2NodW5rcyhjb25zdCBzY3RwX2F1dGhfY2hrbGlzdF90ICpsaXN0LCB1
aW50OF90ICpwdHIpCit7CisJaW50IGksIHNpemUgPSAwOworCisJaWYgKGxpc3QgPT0gTlVMTCkK
KwkJcmV0dXJuICgwKTsKKworCWlmIChsaXN0LT5udW1fY2h1bmtzIDw9IDMyKSB7CisJCS8qIGp1
c3QgbGlzdCB0aGVtLCBvbmUgYnl0ZSBlYWNoICovCisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkr
KykgeworCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7CisJCQkJKnB0cisrID0gaTsKKwkJ
CQlzaXplKys7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaW5kZXgsIG9mZnNldDsKKwor
CQkvKiBwYWNrIGludG8gYSAzMiBieXRlIGJpdGZpZWxkICovCisJCWZvciAoaSA9IDA7IGkgPCAy
NTY7IGkrKykgeworCQkJaWYgKGxpc3QtPmNodW5rc1tpXSAhPSAwKSB7CisJCQkJaW5kZXggPSBp
IC8gODsKKwkJCQlvZmZzZXQgPSBpICUgODsKKwkJCQlwdHJbaW5kZXhdIHw9ICgxIDw8IG9mZnNl
dCk7CisJCQl9CisJCX0KKwkJc2l6ZSA9IDMyOworCX0KKwlyZXR1cm4gKHNpemUpOworfQorCitp
bnQKK3NjdHBfdW5wYWNrX2F1dGhfY2h1bmtzKGNvbnN0IHVpbnQ4X3QgKnB0ciwgdWludDhfdCBu
dW1fY2h1bmtzLAorICAgIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpCit7CisJaW50IGk7CisJ
aW50IHNpemU7CisKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJaWYgKG51
bV9jaHVua3MgPD0gMzIpIHsKKwkJLyoganVzdCBwdWxsIHRoZW0sIG9uZSBieXRlIGVhY2ggKi8K
KwkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVua3M7IGkrKykgeworCQkJKHZvaWQpc2N0cF9hdXRo
X2FkZF9jaHVuaygqcHRyKyssIGxpc3QpOworCQl9CisJCXNpemUgPSBudW1fY2h1bmtzOworCX0g
ZWxzZSB7CisJCWludCBpbmRleCwgb2Zmc2V0OworCisJCS8qIHVucGFjayBmcm9tIGEgMzIgYnl0
ZSBiaXRmaWVsZCAqLworCQlmb3IgKGluZGV4ID0gMDsgaW5kZXggPCAzMjsgaW5kZXgrKykgewor
CQkJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCA4OyBvZmZzZXQrKykgeworCQkJCWlmIChwdHJb
aW5kZXhdICYgKDEgPDwgb2Zmc2V0KSkgeworCQkJCQkodm9pZClzY3RwX2F1dGhfYWRkX2NodW5r
KChpbmRleCAqIDgpICsgb2Zmc2V0LCBsaXN0KTsKKwkJCQl9CisJCQl9CisJCX0KKwkJc2l6ZSA9
IDMyOworCX0KKwlyZXR1cm4gKHNpemUpOworfQorCisKKy8qCisgKiBhbGxvY2F0ZSBzdHJ1Y3R1
cmUgc3BhY2UgZm9yIGEga2V5IG9mIGxlbmd0aCBrZXlsZW4KKyAqLworc2N0cF9rZXlfdCAqCitz
Y3RwX2FsbG9jX2tleSh1aW50MzJfdCBrZXlsZW4pCit7CisJc2N0cF9rZXlfdCAqbmV3X2tleTsK
KworCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBfa2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSAr
IGtleWxlbiwKKwkJICAgIFNDVFBfTV9BVVRIX0tZKTsKKwlpZiAobmV3X2tleSA9PSBOVUxMKSB7
CisJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbmV3X2tleS0+
a2V5bGVuID0ga2V5bGVuOworCXJldHVybiAobmV3X2tleSk7Cit9CisKK3ZvaWQKK3NjdHBfZnJl
ZV9rZXkoc2N0cF9rZXlfdCAqa2V5KQoreworCWlmIChrZXkgIT0gTlVMTCkKKwkJU0NUUF9GUkVF
KGtleSxTQ1RQX01fQVVUSF9LWSk7Cit9CisKK3ZvaWQKK3NjdHBfcHJpbnRfa2V5KHNjdHBfa2V5
X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKQoreworCXVpbnQzMl90IGk7CisKKwlpZiAoa2V5ID09
IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIiVzOiBbTnVsbCBrZXldXG4iLCBzdHIpOworCQlyZXR1
cm47CisJfQorCVNDVFBfUFJJTlRGKCIlczogbGVuICV1LCAiLCBzdHIsIGtleS0+a2V5bGVuKTsK
KwlpZiAoa2V5LT5rZXlsZW4pIHsKKwkJZm9yIChpID0gMDsgaSA8IGtleS0+a2V5bGVuOyBpKysp
CisJCQlTQ1RQX1BSSU5URigiJTAyeCIsIGtleS0+a2V5W2ldKTsKKwkJU0NUUF9QUklOVEYoIlxu
Iik7CisJfSBlbHNlIHsKKwkJU0NUUF9QUklOVEYoIltOdWxsIGtleV1cbiIpOworCX0KK30KKwor
dm9pZAorc2N0cF9zaG93X2tleShzY3RwX2tleV90ICprZXksIGNvbnN0IGNoYXIgKnN0cikKK3sK
Kwl1aW50MzJfdCBpOworCisJaWYgKGtleSA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCIlczog
W051bGwga2V5XVxuIiwgc3RyKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX1BSSU5URigiJXM6IGxl
biAldSwgIiwgc3RyLCBrZXktPmtleWxlbik7CisJaWYgKGtleS0+a2V5bGVuKSB7CisJCWZvciAo
aSA9IDA7IGkgPCBrZXktPmtleWxlbjsgaSsrKQorCQkJU0NUUF9QUklOVEYoIiUwMngiLCBrZXkt
PmtleVtpXSk7CisJCVNDVFBfUFJJTlRGKCJcbiIpOworCX0gZWxzZSB7CisJCVNDVFBfUFJJTlRG
KCJbTnVsbCBrZXldXG4iKTsKKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9nZXRfa2V5
bGVuKHNjdHBfa2V5X3QgKmtleSkKK3sKKwlpZiAoa2V5ICE9IE5VTEwpCisJCXJldHVybiAoa2V5
LT5rZXlsZW4pOworCWVsc2UKKwkJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIGdlbmVyYXRlIGEg
bmV3IHJhbmRvbSBrZXkgb2YgbGVuZ3RoICdrZXlsZW4nCisgKi8KK3NjdHBfa2V5X3QgKgorc2N0
cF9nZW5lcmF0ZV9yYW5kb21fa2V5KHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90ICpu
ZXdfa2V5OworCisJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19r
ZXkgPT0gTlVMTCkgeworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJ
fQorCVNDVFBfUkVBRF9SQU5ET00obmV3X2tleS0+a2V5LCBrZXlsZW4pOworCW5ld19rZXktPmtl
eWxlbiA9IGtleWxlbjsKKwlyZXR1cm4gKG5ld19rZXkpOworfQorCitzY3RwX2tleV90ICoKK3Nj
dHBfc2V0X2tleSh1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbikKK3sKKwlzY3RwX2tleV90
ICpuZXdfa2V5OworCisJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5KGtleWxlbik7CisJaWYgKG5l
d19rZXkgPT0gTlVMTCkgeworCQkvKiBvdXQgb2YgbWVtb3J5ICovCisJCXJldHVybiAoTlVMTCk7
CisJfQorCW1lbWNweShuZXdfa2V5LT5rZXksIGtleSwga2V5bGVuKTsKKwlyZXR1cm4gKG5ld19r
ZXkpOworfQorCisvKi0KKyAqIGdpdmVuIHR3byBrZXlzIG9mIHZhcmlhYmxlIHNpemUsIGNvbXB1
dGUgd2hpY2gga2V5IGlzICJsYXJnZXIvc21hbGxlciIKKyAqIHJldHVybnM6ICAxIGlmIGtleTEg
PiBrZXkyCisgKiAgICAgICAgICAtMSBpZiBrZXkxIDwga2V5MgorICogICAgICAgICAgIDAgaWYg
a2V5MSA9IGtleTIKKyAqLworc3RhdGljIGludAorc2N0cF9jb21wYXJlX2tleShzY3RwX2tleV90
ICprZXkxLCBzY3RwX2tleV90ICprZXkyKQoreworCXVpbnQzMl90IG1heGxlbjsKKwl1aW50MzJf
dCBpOworCXVpbnQzMl90IGtleTFsZW4sIGtleTJsZW47CisJdWludDhfdCAqa2V5XzEsICprZXlf
MjsKKwl1aW50OF90IHZhbDEsIHZhbDI7CisKKwkvKiBzYW5pdHkvbGVuZ3RoIGNoZWNrICovCisJ
a2V5MWxlbiA9IHNjdHBfZ2V0X2tleWxlbihrZXkxKTsKKwlrZXkybGVuID0gc2N0cF9nZXRfa2V5
bGVuKGtleTIpOworCWlmICgoa2V5MWxlbiA9PSAwKSAmJiAoa2V5MmxlbiA9PSAwKSkKKwkJcmV0
dXJuICgwKTsKKwllbHNlIGlmIChrZXkxbGVuID09IDApCisJCXJldHVybiAoLTEpOworCWVsc2Ug
aWYgKGtleTJsZW4gPT0gMCkKKwkJcmV0dXJuICgxKTsKKworCWlmIChrZXkxbGVuIDwga2V5Mmxl
bikgeworCQltYXhsZW4gPSBrZXkybGVuOworCX0gZWxzZSB7CisJCW1heGxlbiA9IGtleTFsZW47
CisJfQorCWtleV8xID0ga2V5MS0+a2V5OworCWtleV8yID0ga2V5Mi0+a2V5OworCS8qIGNoZWNr
IGZvciBudW1lcmljIGVxdWFsaXR5ICovCisJZm9yIChpID0gMDsgaSA8IG1heGxlbjsgaSsrKSB7
CisJCS8qIGxlZnQtcGFkIHdpdGggemVyb3MgKi8KKwkJdmFsMSA9IChpIDwgKG1heGxlbiAtIGtl
eTFsZW4pKSA/IDAgOiAqKGtleV8xKyspOworCQl2YWwyID0gKGkgPCAobWF4bGVuIC0ga2V5Mmxl
bikpID8gMCA6ICooa2V5XzIrKyk7CisJCWlmICh2YWwxID4gdmFsMikgeworCQkJcmV0dXJuICgx
KTsKKwkJfSBlbHNlIGlmICh2YWwxIDwgdmFsMikgeworCQkJcmV0dXJuICgtMSk7CisJCX0KKwl9
CisJLyoga2V5cyBhcmUgZXF1YWwgdmFsdWUsIHNvIGNoZWNrIGxlbmd0aHMgKi8KKwlpZiAoa2V5
MWxlbiA9PSBrZXkybGVuKQorCQlyZXR1cm4gKDApOworCWVsc2UgaWYgKGtleTFsZW4gPCBrZXky
bGVuKQorCQlyZXR1cm4gKC0xKTsKKwllbHNlCisJCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBn
ZW5lcmF0ZSB0aGUgY29uY2F0ZW5hdGVkIGtleWluZyBtYXRlcmlhbCBiYXNlZCBvbiB0aGUgdHdv
IGtleXMgYW5kIHRoZQorICogc2hhcmVkIGtleSAoaWYgYXZhaWxhYmxlKS4gZHJhZnQtaWV0Zi10
c3Z3Zy1hdXRoIHNwZWNpZmllcyB0aGUgc3BlY2lmaWMKKyAqIG9yZGVyIGZvciBjb25jYXRlbmF0
aW9uCisgKi8KK3NjdHBfa2V5X3QgKgorc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAq
a2V5MSwgc2N0cF9rZXlfdCAqa2V5Miwgc2N0cF9rZXlfdCAqc2hhcmVkKQoreworCXVpbnQzMl90
IGtleWxlbjsKKwlzY3RwX2tleV90ICpuZXdfa2V5OworCXVpbnQ4X3QgKmtleV9wdHI7CisKKwlr
ZXlsZW4gPSBzY3RwX2dldF9rZXlsZW4oa2V5MSkgKyBzY3RwX2dldF9rZXlsZW4oa2V5MikgKwor
CSAgICBzY3RwX2dldF9rZXlsZW4oc2hhcmVkKTsKKworCWlmIChrZXlsZW4gPiAwKSB7CisJCS8q
IGdldCBzcGFjZSBmb3IgdGhlIG5ldyBrZXkgKi8KKwkJbmV3X2tleSA9IHNjdHBfYWxsb2Nfa2V5
KGtleWxlbik7CisJCWlmIChuZXdfa2V5ID09IE5VTEwpIHsKKwkJCS8qIG91dCBvZiBtZW1vcnkg
Ki8KKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJbmV3X2tleS0+a2V5bGVuID0ga2V5bGVuOwor
CQlrZXlfcHRyID0gbmV3X2tleS0+a2V5OworCX0gZWxzZSB7CisJCS8qIGFsbCBrZXlzIGVtcHR5
L251bGw/ISAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qIGNvbmNhdGVuYXRlIHRoZSBr
ZXlzICovCisJaWYgKHNjdHBfY29tcGFyZV9rZXkoa2V5MSwga2V5MikgPD0gMCkgeworCQkvKiBr
ZXkgaXMgc2hhcmVkICsga2V5MSArIGtleTIgKi8KKwkJaWYgKHNjdHBfZ2V0X2tleWxlbihzaGFy
ZWQpKSB7CisJCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5rZXksIHNoYXJlZC0+a2V5bGVuKTsK
KwkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47CisJCX0KKwkJaWYgKHNjdHBfZ2V0X2tleWxl
bihrZXkxKSkgeworCQkJbWVtY3B5KGtleV9wdHIsIGtleTEtPmtleSwga2V5MS0+a2V5bGVuKTsK
KwkJCWtleV9wdHIgKz0ga2V5MS0+a2V5bGVuOworCQl9CisJCWlmIChzY3RwX2dldF9rZXlsZW4o
a2V5MikpIHsKKwkJCW1lbWNweShrZXlfcHRyLCBrZXkyLT5rZXksIGtleTItPmtleWxlbik7CisJ
CX0KKwl9IGVsc2UgeworCQkvKiBrZXkgaXMgc2hhcmVkICsga2V5MiArIGtleTEgKi8KKwkJaWYg
KHNjdHBfZ2V0X2tleWxlbihzaGFyZWQpKSB7CisJCQltZW1jcHkoa2V5X3B0ciwgc2hhcmVkLT5r
ZXksIHNoYXJlZC0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0gc2hhcmVkLT5rZXlsZW47CisJCX0K
KwkJaWYgKHNjdHBfZ2V0X2tleWxlbihrZXkyKSkgeworCQkJbWVtY3B5KGtleV9wdHIsIGtleTIt
PmtleSwga2V5Mi0+a2V5bGVuKTsKKwkJCWtleV9wdHIgKz0ga2V5Mi0+a2V5bGVuOworCQl9CisJ
CWlmIChzY3RwX2dldF9rZXlsZW4oa2V5MSkpIHsKKwkJCW1lbWNweShrZXlfcHRyLCBrZXkxLT5r
ZXksIGtleTEtPmtleWxlbik7CisJCX0KKwl9CisJcmV0dXJuIChuZXdfa2V5KTsKK30KKworCitz
Y3RwX3NoYXJlZGtleV90ICoKK3NjdHBfYWxsb2Nfc2hhcmVka2V5KHZvaWQpCit7CisJc2N0cF9z
aGFyZWRrZXlfdCAqbmV3X2tleTsKKworCVNDVFBfTUFMTE9DKG5ld19rZXksIHNjdHBfc2hhcmVk
a2V5X3QgKiwgc2l6ZW9mKCpuZXdfa2V5KSwKKwkJICAgIFNDVFBfTV9BVVRIX0tZKTsKKwlpZiAo
bmV3X2tleSA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1vcnkgKi8KKwkJcmV0dXJuIChOVUxM
KTsKKwl9CisJbmV3X2tleS0+a2V5aWQgPSAwOworCW5ld19rZXktPmtleSA9IE5VTEw7CisJbmV3
X2tleS0+cmVmY291bnQgPSAxOworCW5ld19rZXktPmRlYWN0aXZhdGVkID0gMDsKKwlyZXR1cm4g
KG5ld19rZXkpOworfQorCit2b2lkCitzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5
X3QgKnNrZXkpCit7CisJaWYgKHNrZXkgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKFNDVFBf
REVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVCgmc2tleS0+cmVmY291bnQpKSB7CisJCWlmIChz
a2V5LT5rZXkgIT0gTlVMTCkKKwkJCXNjdHBfZnJlZV9rZXkoc2tleS0+a2V5KTsKKwkJU0NUUF9G
UkVFKHNrZXksIFNDVFBfTV9BVVRIX0tZKTsKKwl9Cit9CisKK3NjdHBfc2hhcmVka2V5X3QgKgor
c2N0cF9maW5kX3NoYXJlZGtleShzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzaGFyZWRfa2V5cywgdWlu
dDE2X3Qga2V5X2lkKQoreworCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7CisKKwlMSVNUX0ZPUkVB
Q0goc2tleSwgc2hhcmVkX2tleXMsIG5leHQpIHsKKwkJaWYgKHNrZXktPmtleWlkID09IGtleV9p
ZCkKKwkJCXJldHVybiAoc2tleSk7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKK2ludAorc2N0
cF9pbnNlcnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9rZXlzLAorCQkg
ICAgICBzY3RwX3NoYXJlZGtleV90ICpuZXdfc2tleSkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpz
a2V5OworCisJaWYgKChzaGFyZWRfa2V5cyA9PSBOVUxMKSB8fCAobmV3X3NrZXkgPT0gTlVMTCkp
CisJCXJldHVybiAoRUlOVkFMKTsKKworCS8qIGluc2VydCBpbnRvIGFuIGVtcHR5IGxpc3Q/ICov
CisJaWYgKExJU1RfRU1QVFkoc2hhcmVkX2tleXMpKSB7CisJCUxJU1RfSU5TRVJUX0hFQUQoc2hh
cmVkX2tleXMsIG5ld19za2V5LCBuZXh0KTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyogaW5zZXJ0
IGludG8gdGhlIGV4aXN0aW5nIGxpc3QsIG9yZGVyZWQgYnkga2V5IGlkICovCisJTElTVF9GT1JF
QUNIKHNrZXksIHNoYXJlZF9rZXlzLCBuZXh0KSB7CisJCWlmIChuZXdfc2tleS0+a2V5aWQgPCBz
a2V5LT5rZXlpZCkgeworCQkJLyogaW5zZXJ0IGl0IGJlZm9yZSBoZXJlICovCisJCQlMSVNUX0lO
U0VSVF9CRUZPUkUoc2tleSwgbmV3X3NrZXksIG5leHQpOworCQkJcmV0dXJuICgwKTsKKwkJfSBl
bHNlIGlmIChuZXdfc2tleS0+a2V5aWQgPT0gc2tleS0+a2V5aWQpIHsKKwkJCS8qIHJlcGxhY2Ug
dGhlIGV4aXN0aW5nIGtleSAqLworCQkJLyogdmVyaWZ5IHRoaXMga2V5ICpjYW4qIGJlIHJlcGxh
Y2VkICovCisJCQlpZiAoKHNrZXktPmRlYWN0aXZhdGVkKSAmJiAoc2tleS0+cmVmY291bnQgPiAx
KSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkJImNhbid0IHJlcGxhY2Ug
c2hhcmVkIGtleSBpZCAldVxuIiwKKwkJCQkJbmV3X3NrZXktPmtleWlkKTsKKwkJCQlyZXR1cm4g
KEVCVVNZKTsKKwkJCX0KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkicmVwbGFj
aW5nIHNoYXJlZCBrZXkgaWQgJXVcbiIsCisJCQkJbmV3X3NrZXktPmtleWlkKTsKKwkJCUxJU1Rf
SU5TRVJUX0JFRk9SRShza2V5LCBuZXdfc2tleSwgbmV4dCk7CisJCQlMSVNUX1JFTU9WRShza2V5
LCBuZXh0KTsKKwkJCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7CisJCQlyZXR1cm4gKDApOwor
CQl9CisJCWlmIChMSVNUX05FWFQoc2tleSwgbmV4dCkgPT0gTlVMTCkgeworCQkJLyogYmVsb25n
cyBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0ICovCisJCQlMSVNUX0lOU0VSVF9BRlRFUihza2V5LCBu
ZXdfc2tleSwgbmV4dCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qIHNob3VsZG4ndCBy
ZWFjaCBoZXJlICovCisJcmV0dXJuIChFSU5WQUwpOworfQorCit2b2lkCitzY3RwX2F1dGhfa2V5
X2FjcXVpcmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlfaWQpCit7CisJc2N0
cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8KKwlza2V5
ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5X2lkKTsK
KworCS8qIGJ1bXAgdGhlIHJlZiBjb3VudCAqLworCWlmIChza2V5KSB7CisJCWF0b21pY19hZGRf
aW50KCZza2V5LT5yZWZjb3VudCwgMSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMiwKKwkJ
CSIlczogc3RjYiAlcCBrZXkgJXUgcmVmY291bnQgYWNxdWlyZSB0byAlZFxuIiwKKwkJCV9fZnVu
Y19fLCAodm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQpOworCX0KK30KKwordm9p
ZAorc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qg
a2V5X2lkLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5l
ZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1VOVVNFRAorI2VuZGlmCispCit7CisJc2N0
cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCS8qIGZpbmQgdGhlIHNoYXJlZCBrZXkgKi8KKwlza2V5
ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5X2lkKTsK
KworCS8qIGRlY3JlbWVudCB0aGUgcmVmIGNvdW50ICovCisJaWYgKHNrZXkpIHsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0FVVEgyLAorCQkJIiVzOiBzdGNiICVwIGtleSAldSByZWZjb3VudCByZWxl
YXNlIHRvICVkXG4iLAorCQkJX19mdW5jX18sICh2b2lkICopc3RjYiwga2V5X2lkLCBza2V5LT5y
ZWZjb3VudCk7CisKKwkJLyogc2VlIGlmIGEgbm90aWZpY2F0aW9uIHNob3VsZCBiZSBnZW5lcmF0
ZWQgKi8KKwkJaWYgKChza2V5LT5yZWZjb3VudCA8PSAyKSAmJiAoc2tleS0+ZGVhY3RpdmF0ZWQp
KSB7CisJCQkvKiBub3RpZnkgVUxQIHRoYXQga2V5IGlzIG5vIGxvbmdlciB1c2VkICovCisJCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwgc3RjYiwKKwkJCQkJa2V5
X2lkLCAwLCBzb19sb2NrZWQpOworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgyLAorCQkJCSIl
czogc3RjYiAlcCBrZXkgJXUgbm8gbG9uZ2VyIHVzZWQsICVkXG4iLAorCQkJCV9fZnVuY19fLCAo
dm9pZCAqKXN0Y2IsIGtleV9pZCwgc2tleS0+cmVmY291bnQpOworCQl9CisJCXNjdHBfZnJlZV9z
aGFyZWRrZXkoc2tleSk7CisJfQorfQorCitzdGF0aWMgc2N0cF9zaGFyZWRrZXlfdCAqCitzY3Rw
X2NvcHlfc2hhcmVka2V5KGNvbnN0IHNjdHBfc2hhcmVka2V5X3QgKnNrZXkpCit7CisJc2N0cF9z
aGFyZWRrZXlfdCAqbmV3X3NrZXk7CisKKwlpZiAoc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKE5V
TEwpOworCW5ld19za2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsKKwlpZiAobmV3X3NrZXkg
PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlpZiAoc2tleS0+a2V5ICE9IE5VTEwpCisJCW5l
d19za2V5LT5rZXkgPSBzY3RwX3NldF9rZXkoc2tleS0+a2V5LT5rZXksIHNrZXktPmtleS0+a2V5
bGVuKTsKKwllbHNlCisJCW5ld19za2V5LT5rZXkgPSBOVUxMOworCW5ld19za2V5LT5rZXlpZCA9
IHNrZXktPmtleWlkOworCXJldHVybiAobmV3X3NrZXkpOworfQorCitpbnQKK3NjdHBfY29weV9z
a2V5bGlzdChjb25zdCBzdHJ1Y3Qgc2N0cF9rZXloZWFkICpzcmMsIHN0cnVjdCBzY3RwX2tleWhl
YWQgKmRlc3QpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqc2tleSwgKm5ld19za2V5OworCWludCBj
b3VudCA9IDA7CisKKwlpZiAoKHNyYyA9PSBOVUxMKSB8fCAoZGVzdCA9PSBOVUxMKSkKKwkJcmV0
dXJuICgwKTsKKwlMSVNUX0ZPUkVBQ0goc2tleSwgc3JjLCBuZXh0KSB7CisJCW5ld19za2V5ID0g
c2N0cF9jb3B5X3NoYXJlZGtleShza2V5KTsKKwkJaWYgKG5ld19za2V5ICE9IE5VTEwpIHsKKwkJ
CWlmIChzY3RwX2luc2VydF9zaGFyZWRrZXkoZGVzdCwgbmV3X3NrZXkpKSB7CisJCQkJc2N0cF9m
cmVlX3NoYXJlZGtleShuZXdfc2tleSk7CisJCQl9IGVsc2UgeworCQkJCWNvdW50Kys7CisJCQl9
CisJCX0KKwl9CisJcmV0dXJuIChjb3VudCk7Cit9CisKKworc2N0cF9obWFjbGlzdF90ICoKK3Nj
dHBfYWxsb2NfaG1hY2xpc3QodWludDE2X3QgbnVtX2htYWNzKQoreworCXNjdHBfaG1hY2xpc3Rf
dCAqbmV3X2xpc3Q7CisJaW50IGFsbG9jX3NpemU7CisKKwlhbGxvY19zaXplID0gc2l6ZW9mKCpu
ZXdfbGlzdCkgKyBudW1faG1hY3MgKiBzaXplb2YobmV3X2xpc3QtPmhtYWNbMF0pOworCVNDVFBf
TUFMTE9DKG5ld19saXN0LCBzY3RwX2htYWNsaXN0X3QgKiwgYWxsb2Nfc2l6ZSwKKwkJICAgIFND
VFBfTV9BVVRIX0hMKTsKKwlpZiAobmV3X2xpc3QgPT0gTlVMTCkgeworCQkvKiBvdXQgb2YgbWVt
b3J5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCW5ld19saXN0LT5tYXhfYWxnbyA9IG51bV9o
bWFjczsKKwluZXdfbGlzdC0+bnVtX2FsZ28gPSAwOworCXJldHVybiAobmV3X2xpc3QpOworfQor
Cit2b2lkCitzY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KQoreworCWlm
IChsaXN0ICE9IE5VTEwpIHsKKwkJU0NUUF9GUkVFKGxpc3QsU0NUUF9NX0FVVEhfSEwpOworCQls
aXN0ID0gTlVMTDsKKwl9Cit9CisKK2ludAorc2N0cF9hdXRoX2FkZF9obWFjaWQoc2N0cF9obWFj
bGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFjX2lkKQoreworCWludCBpOworCWlmIChsaXN0ID09
IE5VTEwpCisJCXJldHVybiAoLTEpOworCWlmIChsaXN0LT5udW1fYWxnbyA9PSBsaXN0LT5tYXhf
YWxnbykgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogSE1BQyBpZCBs
aXN0IGZ1bGwsIGlnbm9yaW5nIGFkZCAldVxuIiwgaG1hY19pZCk7CisJCXJldHVybiAoLTEpOwor
CX0KKyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwlpZiAoKGhtYWNfaWQg
IT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgJiYKKwkgICAgKGhtYWNfaWQgIT0gU0NUUF9BVVRI
X0hNQUNfSURfU0hBMjU2KSkgeworI2Vsc2UKKwlpZiAoaG1hY19pZCAhPSBTQ1RQX0FVVEhfSE1B
Q19JRF9TSEExKSB7CisjZW5kaWYKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIE5vdyBpcyBpdCBh
bHJlYWR5IGluIHRoZSBsaXN0ICovCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBp
KyspIHsKKwkJaWYgKGxpc3QtPmhtYWNbaV0gPT0gaG1hY19pZCkgeworCQkJLyogYWxyZWFkeSBp
biBsaXN0ICovCisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdf
QVVUSDEsICJTQ1RQOiBhZGQgSE1BQyBpZCAldSB0byBsaXN0XG4iLCBobWFjX2lkKTsKKwlsaXN0
LT5obWFjW2xpc3QtPm51bV9hbGdvKytdID0gaG1hY19pZDsKKwlyZXR1cm4gKDApOworfQorCitz
Y3RwX2htYWNsaXN0X3QgKgorc2N0cF9jb3B5X2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlz
dCkKK3sKKwlzY3RwX2htYWNsaXN0X3QgKm5ld19saXN0OworCWludCBpOworCisJaWYgKGxpc3Qg
PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwkvKiBnZXQgYSBuZXcgbGlzdCAqLworCW5ld19s
aXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdChsaXN0LT5tYXhfYWxnbyk7CisJaWYgKG5ld19saXN0
ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJLyogY29weSBpdCAqLworCW5ld19saXN0LT5t
YXhfYWxnbyA9IGxpc3QtPm1heF9hbGdvOworCW5ld19saXN0LT5udW1fYWxnbyA9IGxpc3QtPm51
bV9hbGdvOworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsgaSsrKQorCQluZXdfbGlz
dC0+aG1hY1tpXSA9IGxpc3QtPmhtYWNbaV07CisJcmV0dXJuIChuZXdfbGlzdCk7Cit9CisKK3Nj
dHBfaG1hY2xpc3RfdCAqCitzY3RwX2RlZmF1bHRfc3VwcG9ydGVkX2htYWNsaXN0KHZvaWQpCit7
CisJc2N0cF9obWFjbGlzdF90ICpuZXdfbGlzdDsKKworI2lmIGRlZmluZWQoU0NUUF9TVVBQT1JU
X0hNQUNfU0hBMjU2KQorCW5ld19saXN0ID0gc2N0cF9hbGxvY19obWFjbGlzdCgyKTsKKyNlbHNl
CisJbmV3X2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KDEpOworI2VuZGlmCisJaWYgKG5ld19s
aXN0ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRf
SE1BQ19TSEEyNTYpCisJLyogV2UgcHJlZmVyIFNIQTI1Niwgc28gbGlzdCBpdCBmaXJzdCAqLwor
CSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lkKG5ld19saXN0LCBTQ1RQX0FVVEhfSE1BQ19JRF9T
SEEyNTYpOworI2VuZGlmCisJKHZvaWQpc2N0cF9hdXRoX2FkZF9obWFjaWQobmV3X2xpc3QsIFND
VFBfQVVUSF9ITUFDX0lEX1NIQTEpOworCXJldHVybiAobmV3X2xpc3QpOworfQorCisvKi0KKyAq
IEhNQUMgYWxnb3MgYXJlIGxpc3RlZCBpbiBwcmlvcml0eS9wcmVmZXJlbmNlIG9yZGVyCisgKiBm
aW5kIHRoZSBiZXN0IEhNQUMgaWQgdG8gdXNlIGZvciB0aGUgcGVlciBiYXNlZCBvbiBsb2NhbCBz
dXBwb3J0CisgKi8KK3VpbnQxNl90CitzY3RwX25lZ290aWF0ZV9obWFjaWQoc2N0cF9obWFjbGlz
dF90ICpwZWVyLCBzY3RwX2htYWNsaXN0X3QgKmxvY2FsKQoreworCWludCBpLCBqOworCisJaWYg
KChsb2NhbCA9PSBOVUxMKSB8fCAocGVlciA9PSBOVUxMKSkKKwkJcmV0dXJuIChTQ1RQX0FVVEhf
SE1BQ19JRF9SU1ZEKTsKKworCWZvciAoaSA9IDA7IGkgPCBwZWVyLT5udW1fYWxnbzsgaSsrKSB7
CisJCWZvciAoaiA9IDA7IGogPCBsb2NhbC0+bnVtX2FsZ287IGorKykgeworCQkJaWYgKHBlZXIt
PmhtYWNbaV0gPT0gbG9jYWwtPmhtYWNbal0pIHsKKwkJCQkvKiBmb3VuZCB0aGUgImJlc3QiIG9u
ZSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCQkJIlNDVFA6IG5lZ290aWF0
ZWQgcGVlciBITUFDIGlkICV1XG4iLAorCQkJCQlwZWVyLT5obWFjW2ldKTsKKwkJCQlyZXR1cm4g
KHBlZXItPmhtYWNbaV0pOworCQkJfQorCQl9CisJfQorCS8qIGRpZG4ndCBmaW5kIG9uZSEgKi8K
KwlyZXR1cm4gKFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQpOworfQorCisvKi0KKyAqIHNlcmlhbGl6
ZSB0aGUgSE1BQyBhbGdvIGxpc3QgYW5kIHJldHVybiBzcGFjZSB1c2VkCisgKiBjYWxsZXIgbXVz
dCBndWFyYW50ZWUgcHRyIGhhcyBhcHByb3ByaWF0ZSBzcGFjZQorICovCitpbnQKK3NjdHBfc2Vy
aWFsaXplX2htYWNsaXN0KHNjdHBfaG1hY2xpc3RfdCAqbGlzdCwgdWludDhfdCAqcHRyKQorewor
CWludCBpOworCXVpbnQxNl90IGhtYWNfaWQ7CisKKwlpZiAobGlzdCA9PSBOVUxMKQorCQlyZXR1
cm4gKDApOworCisJZm9yIChpID0gMDsgaSA8IGxpc3QtPm51bV9hbGdvOyBpKyspIHsKKwkJaG1h
Y19pZCA9IGh0b25zKGxpc3QtPmhtYWNbaV0pOworCQltZW1jcHkocHRyLCAmaG1hY19pZCwgc2l6
ZW9mKGhtYWNfaWQpKTsKKwkJcHRyICs9IHNpemVvZihobWFjX2lkKTsKKwl9CisJcmV0dXJuIChs
aXN0LT5udW1fYWxnbyAqIHNpemVvZihobWFjX2lkKSk7Cit9CisKK2ludAorc2N0cF92ZXJpZnlf
aG1hY19wYXJhbSAoc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzLCB1aW50MzJfdCBu
dW1faG1hY3MpCit7CisJdWludDMyX3QgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1faG1hY3M7
IGkrKykgeworCQlpZiAobnRvaHMoaG1hY3MtPmhtYWNfaWRzW2ldKSA9PSBTQ1RQX0FVVEhfSE1B
Q19JRF9TSEExKSB7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCXJldHVybiAoLTEpOworfQor
CitzY3RwX2F1dGhpbmZvX3QgKgorc2N0cF9hbGxvY19hdXRoaW5mbyh2b2lkKQoreworCXNjdHBf
YXV0aGluZm9fdCAqbmV3X2F1dGhpbmZvOworCisJU0NUUF9NQUxMT0MobmV3X2F1dGhpbmZvLCBz
Y3RwX2F1dGhpbmZvX3QgKiwgc2l6ZW9mKCpuZXdfYXV0aGluZm8pLAorCQkgICAgU0NUUF9NX0FV
VEhfSUYpOworCisJaWYgKG5ld19hdXRoaW5mbyA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1v
cnkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJbWVtc2V0KG5ld19hdXRoaW5mbywgMCwgc2l6
ZW9mKCpuZXdfYXV0aGluZm8pKTsKKwlyZXR1cm4gKG5ld19hdXRoaW5mbyk7Cit9CisKK3ZvaWQK
K3NjdHBfZnJlZV9hdXRoaW5mbyhzY3RwX2F1dGhpbmZvX3QgKmF1dGhpbmZvKQoreworCWlmIChh
dXRoaW5mbyA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoYXV0aGluZm8tPnJhbmRvbSAhPSBO
VUxMKQorCQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yYW5kb20pOworCWlmIChhdXRoaW5mby0+
cGVlcl9yYW5kb20gIT0gTlVMTCkKKwkJc2N0cF9mcmVlX2tleShhdXRoaW5mby0+cGVlcl9yYW5k
b20pOworCWlmIChhdXRoaW5mby0+YXNzb2Nfa2V5ICE9IE5VTEwpCisJCXNjdHBfZnJlZV9rZXko
YXV0aGluZm8tPmFzc29jX2tleSk7CisJaWYgKGF1dGhpbmZvLT5yZWN2X2tleSAhPSBOVUxMKQor
CQlzY3RwX2ZyZWVfa2V5KGF1dGhpbmZvLT5yZWN2X2tleSk7CisKKwkvKiBXZSBhcmUgTk9UIGR5
bmFtaWNhbGx5IGFsbG9jYXRpbmcgYXV0aGluZm8ncyByaWdodCBub3cuLi4gKi8KKwkvKiBTQ1RQ
X0ZSRUUoYXV0aGluZm8sIFNDVFBfTV9BVVRIXz8/KTsgKi8KK30KKworCit1aW50MzJfdAorc2N0
cF9nZXRfYXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19hbGdvKQoreworCWludCBzaXplOwor
CisJc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rKSArIHNjdHBfZ2V0X2htYWNf
ZGlnZXN0X2xlbihobWFjX2FsZ28pOworCXJldHVybiAoU0NUUF9TSVpFMzIoc2l6ZSkpOworfQor
Cit1aW50MzJfdAorc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykK
K3sKKwlzd2l0Y2ggKGhtYWNfYWxnbykgeworCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToK
KwkJcmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExKTsKKyNpZiBkZWZpbmVkKFNDVFBf
U1VQUE9SVF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJ
cmV0dXJuIChTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYpOworI2VuZGlmCisJZGVmYXVsdDoK
KwkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0
dXJuICgwKTsKKwl9IC8qIGVuZCBzd2l0Y2ggKi8KK30KKworc3RhdGljIGlubGluZSBpbnQKK3Nj
dHBfZ2V0X2htYWNfYmxvY2tfbGVuKHVpbnQxNl90IGhtYWNfYWxnbykKK3sKKwlzd2l0Y2ggKGht
YWNfYWxnbykgeworCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfU0hBMToKKwkJcmV0dXJuICg2NCk7
CisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQX0FVVEhf
SE1BQ19JRF9TSEEyNTY6CisJCXJldHVybiAoNjQpOworI2VuZGlmCisJY2FzZSBTQ1RQX0FVVEhf
SE1BQ19JRF9SU1ZEOgorCWRlZmF1bHQ6CisJCS8qIHVua25vd24gSE1BQyBhbGdvcml0aG06IGNh
bid0IGRvIGFueXRoaW5nICovCisJCXJldHVybiAoMCk7CisJfSAvKiBlbmQgc3dpdGNoICovCit9
CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisvKiBfX1VzZXJzcGFjZV9fIFNIQTFfSW5p
dCBpcyBkZWZpbmVkIGluIGxpYmNyeXB0by5hIChsaWJzc2wtZGV2IG9uIFVidW50dSkgKi8KKyNl
bmRpZgorc3RhdGljIHZvaWQKK3NjdHBfaG1hY19pbml0KHVpbnQxNl90IGhtYWNfYWxnbywgc2N0
cF9oYXNoX2NvbnRleHRfdCAqY3R4KQoreworCXN3aXRjaCAoaG1hY19hbGdvKSB7CisJY2FzZSBT
Q1RQX0FVVEhfSE1BQ19JRF9TSEExOgorCQlTQ1RQX1NIQTFfSU5JVCgmY3R4LT5zaGExKTsKKwkJ
YnJlYWs7CisjaWYgZGVmaW5lZChTQ1RQX1NVUFBPUlRfSE1BQ19TSEEyNTYpCisJY2FzZSBTQ1RQ
X0FVVEhfSE1BQ19JRF9TSEEyNTY6CisJCVNDVFBfU0hBMjU2X0lOSVQoJmN0eC0+c2hhMjU2KTsK
KwkJYnJlYWs7CisjZW5kaWYKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1JTVkQ6CisJZGVmYXVs
dDoKKwkJLyogdW5rbm93biBITUFDIGFsZ29yaXRobTogY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJ
cmV0dXJuOworCX0gLyogZW5kIHN3aXRjaCAqLworfQorCitzdGF0aWMgdm9pZAorc2N0cF9obWFj
X3VwZGF0ZSh1aW50MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAg
ICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuKQoreworCXN3aXRjaCAoaG1hY19hbGdv
KSB7CisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExOgorCQlTQ1RQX1NIQTFfVVBEQVRFKCZj
dHgtPnNoYTEsIHRleHQsIHRleHRsZW4pOworCQlicmVhazsKKyNpZiBkZWZpbmVkKFNDVFBfU1VQ
UE9SVF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NjoKKwkJU0NU
UF9TSEEyNTZfVVBEQVRFKCZjdHgtPnNoYTI1NiwgdGV4dCwgdGV4dGxlbik7CisJCWJyZWFrOwor
I2VuZGlmCisJY2FzZSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEOgorCWRlZmF1bHQ6CisJCS8qIHVu
a25vd24gSE1BQyBhbGdvcml0aG06IGNhbid0IGRvIGFueXRoaW5nICovCisJCXJldHVybjsKKwl9
IC8qIGVuZCBzd2l0Y2ggKi8KK30KKworc3RhdGljIHZvaWQKK3NjdHBfaG1hY19maW5hbCh1aW50
MTZfdCBobWFjX2FsZ28sIHNjdHBfaGFzaF9jb250ZXh0X3QgKmN0eCwKKyAgICB1aW50OF90ICpk
aWdlc3QpCit7CisJc3dpdGNoIChobWFjX2FsZ28pIHsKKwljYXNlIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTE6CisJCVNDVFBfU0hBMV9GSU5BTChkaWdlc3QsICZjdHgtPnNoYTEpOworCQlicmVhazsK
KyNpZiBkZWZpbmVkKFNDVFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwljYXNlIFNDVFBfQVVUSF9I
TUFDX0lEX1NIQTI1NjoKKwkJU0NUUF9TSEEyNTZfRklOQUwoZGlnZXN0LCAmY3R4LT5zaGEyNTYp
OworCQlicmVhazsKKyNlbmRpZgorCWNhc2UgU0NUUF9BVVRIX0hNQUNfSURfUlNWRDoKKwlkZWZh
dWx0OgorCQkvKiB1bmtub3duIEhNQUMgYWxnb3JpdGhtOiBjYW4ndCBkbyBhbnl0aGluZyAqLwor
CQlyZXR1cm47CisJfSAvKiBlbmQgc3dpdGNoICovCit9CisKKy8qLQorICogS2V5ZWQtSGFzaGlu
ZyBmb3IgTWVzc2FnZSBBdXRoZW50aWNhdGlvbjogRklQUyAxOTggKFJGQyAyMTA0KQorICoKKyAq
IENvbXB1dGUgdGhlIEhNQUMgZGlnZXN0IHVzaW5nIHRoZSBkZXNpcmVkIGhhc2gga2V5LCB0ZXh0
LCBhbmQgSE1BQworICogYWxnb3JpdGhtLiAgUmVzdWx0aW5nIGRpZ2VzdCBpcyBwbGFjZWQgaW4g
J2RpZ2VzdCcgYW5kIGRpZ2VzdCBsZW5ndGgKKyAqIGlzIHJldHVybmVkLCBpZiB0aGUgSE1BQyB3
YXMgcGVyZm9ybWVkLgorICoKKyAqIFdBUk5JTkc6IGl0IGlzIHVwIHRvIHRoZSBjYWxsZXIgdG8g
c3VwcGx5IHN1ZmZpY2llbnQgc3BhY2UgdG8gaG9sZCB0aGUKKyAqIHJlc3VsdGFudCBkaWdlc3Qu
CisgKi8KK3VpbnQzMl90CitzY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICpr
ZXksIHVpbnQzMl90IGtleWxlbiwKKyAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVu
LCB1aW50OF90ICpkaWdlc3QpCit7CisJdWludDMyX3QgZGlnZXN0bGVuOworCXVpbnQzMl90IGJs
b2NrbGVuOworCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OworCXVpbnQ4X3QgaXBhZFsxMjhdLCBv
cGFkWzEyOF07CS8qIGtleWVkIGhhc2ggaW5uZXIvb3V0ZXIgcGFkcyAqLworCXVpbnQ4X3QgdGVt
cFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCXVpbnQzMl90IGk7CisKKwkvKiBzYW5pdHkg
Y2hlY2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KKwlpZiAoKGtleSA9PSBOVUxMKSB8fCAo
a2V5bGVuID09IDApIHx8ICh0ZXh0ID09IE5VTEwpIHx8CisJICAgICh0ZXh0bGVuID09IDApIHx8
IChkaWdlc3QgPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBv
ciB0ZXh0IG9yIGRpZ2VzdCBzdG9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwkvKiB2YWxpZGF0
ZSB0aGUgaG1hYyBhbGdvIGFuZCBnZXQgdGhlIGRpZ2VzdCBsZW5ndGggKi8KKwlkaWdlc3RsZW4g
PSBzY3RwX2dldF9obWFjX2RpZ2VzdF9sZW4oaG1hY19hbGdvKTsKKwlpZiAoZGlnZXN0bGVuID09
IDApCisJCXJldHVybiAoMCk7CisKKwkvKiBoYXNoIHRoZSBrZXkgaWYgaXQgaXMgbG9uZ2VyIHRo
YW4gdGhlIGhhc2ggYmxvY2sgc2l6ZSAqLworCWJsb2NrbGVuID0gc2N0cF9nZXRfaG1hY19ibG9j
a19sZW4oaG1hY19hbGdvKTsKKwlpZiAoa2V5bGVuID4gYmxvY2tsZW4pIHsKKwkJc2N0cF9obWFj
X2luaXQoaG1hY19hbGdvLCAmY3R4KTsKKwkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZj
dHgsIGtleSwga2V5bGVuKTsKKwkJc2N0cF9obWFjX2ZpbmFsKGhtYWNfYWxnbywgJmN0eCwgdGVt
cCk7CisJCS8qIHNldCB0aGUgaGFzaGVkIGtleSBhcyB0aGUga2V5ICovCisJCWtleWxlbiA9IGRp
Z2VzdGxlbjsKKwkJa2V5ID0gdGVtcDsKKwl9CisJLyogaW5pdGlhbGl6ZSB0aGUgaW5uZXIvb3V0
ZXIgcGFkcyB3aXRoIHRoZSBrZXkgYW5kICJhcHBlbmQiIHplcm9lcyAqLworCW1lbXNldChpcGFk
LCAwLCBibG9ja2xlbik7CisJbWVtc2V0KG9wYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1jcHkoaXBh
ZCwga2V5LCBrZXlsZW4pOworCW1lbWNweShvcGFkLCBrZXksIGtleWxlbik7CisKKwkvKiBYT1Ig
dGhlIGtleSB3aXRoIGlwYWQgYW5kIG9wYWQgdmFsdWVzICovCisJZm9yIChpID0gMDsgaSA8IGJs
b2NrbGVuOyBpKyspIHsKKwkJaXBhZFtpXSBePSAweDM2OworCQlvcGFkW2ldIF49IDB4NWM7CisJ
fQorCisJLyogcGVyZm9ybSBpbm5lciBoYXNoICovCisJc2N0cF9obWFjX2luaXQoaG1hY19hbGdv
LCAmY3R4KTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgaXBhZCwgYmxvY2ts
ZW4pOworCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0ZXh0LCB0ZXh0bGVuKTsK
KwlzY3RwX2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKworCS8qIHBlcmZvcm0g
b3V0ZXIgaGFzaCAqLworCXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7CisJc2N0cF9o
bWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIG9wYWQsIGJsb2NrbGVuKTsKKwlzY3RwX2htYWNf
dXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgdGVtcCwgZGlnZXN0bGVuKTsKKwlzY3RwX2htYWNfZmlu
YWwoaG1hY19hbGdvLCAmY3R4LCBkaWdlc3QpOworCisJcmV0dXJuIChkaWdlc3RsZW4pOworfQor
CisvKiBtYnVmIHZlcnNpb24gKi8KK3VpbnQzMl90CitzY3RwX2htYWNfbSh1aW50MTZfdCBobWFj
X2FsZ28sIHVpbnQ4X3QgKmtleSwgdWludDMyX3Qga2V5bGVuLAorICAgIHN0cnVjdCBtYnVmICpt
LCB1aW50MzJfdCBtX29mZnNldCwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCB0cmFpbGVyKQor
eworCXVpbnQzMl90IGRpZ2VzdGxlbjsKKwl1aW50MzJfdCBibG9ja2xlbjsKKwlzY3RwX2hhc2hf
Y29udGV4dF90IGN0eDsKKwl1aW50OF90IGlwYWRbMTI4XSwgb3BhZFsxMjhdOwkvKiBrZXllZCBo
YXNoIGlubmVyL291dGVyIHBhZHMgKi8KKwl1aW50OF90IHRlbXBbU0NUUF9BVVRIX0RJR0VTVF9M
RU5fTUFYXTsKKwl1aW50MzJfdCBpOworCXN0cnVjdCBtYnVmICptX3RtcDsKKworCS8qIHNhbml0
eSBjaGVjayB0aGUgbWF0ZXJpYWwgYW5kIGxlbmd0aCAqLworCWlmICgoa2V5ID09IE5VTEwpIHx8
IChrZXlsZW4gPT0gMCkgfHwgKG0gPT0gTlVMTCkgfHwgKGRpZ2VzdCA9PSBOVUxMKSkgeworCQkv
KiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkga2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICov
CisJCXJldHVybiAoMCk7CisJfQorCS8qIHZhbGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0
aGUgZGlnZXN0IGxlbmd0aCAqLworCWRpZ2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xl
bihobWFjX2FsZ28pOworCWlmIChkaWdlc3RsZW4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCS8q
IGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25nZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICov
CisJYmxvY2tsZW4gPSBzY3RwX2dldF9obWFjX2Jsb2NrX2xlbihobWFjX2FsZ28pOworCWlmIChr
ZXlsZW4gPiBibG9ja2xlbikgeworCQlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOwor
CQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwga2V5LCBrZXlsZW4pOworCQlzY3Rw
X2htYWNfZmluYWwoaG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKwkJLyogc2V0IHRoZSBoYXNoZWQg
a2V5IGFzIHRoZSBrZXkgKi8KKwkJa2V5bGVuID0gZGlnZXN0bGVuOworCQlrZXkgPSB0ZW1wOwor
CX0KKwkvKiBpbml0aWFsaXplIHRoZSBpbm5lci9vdXRlciBwYWRzIHdpdGggdGhlIGtleSBhbmQg
ImFwcGVuZCIgemVyb2VzICovCisJbWVtc2V0KGlwYWQsIDAsIGJsb2NrbGVuKTsKKwltZW1zZXQo
b3BhZCwgMCwgYmxvY2tsZW4pOworCW1lbWNweShpcGFkLCBrZXksIGtleWxlbik7CisJbWVtY3B5
KG9wYWQsIGtleSwga2V5bGVuKTsKKworCS8qIFhPUiB0aGUga2V5IHdpdGggaXBhZCBhbmQgb3Bh
ZCB2YWx1ZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgYmxvY2tsZW47IGkrKykgeworCQlpcGFkW2ld
IF49IDB4MzY7CisJCW9wYWRbaV0gXj0gMHg1YzsKKwl9CisKKwkvKiBwZXJmb3JtIGlubmVyIGhh
c2ggKi8KKwlzY3RwX2htYWNfaW5pdChobWFjX2FsZ28sICZjdHgpOworCXNjdHBfaG1hY191cGRh
dGUoaG1hY19hbGdvLCAmY3R4LCBpcGFkLCBibG9ja2xlbik7CisJLyogZmluZCB0aGUgY29ycmVj
dCBzdGFydGluZyBtYnVmIGFuZCBvZmZzZXQgKGdldCBzdGFydCBvZiB0ZXh0KSAqLworCW1fdG1w
ID0gbTsKKwl3aGlsZSAoKG1fdG1wICE9IE5VTEwpICYmIChtX29mZnNldCA+PSAodWludDMyX3Qp
IFNDVFBfQlVGX0xFTihtX3RtcCkpKSB7CisJCW1fb2Zmc2V0IC09IFNDVFBfQlVGX0xFTihtX3Rt
cCk7CisJCW1fdG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQorCS8qIG5vdyB1c2UgdGhl
IHJlc3Qgb2YgdGhlIG1idWYgY2hhaW4gZm9yIHRoZSB0ZXh0ICovCisJd2hpbGUgKG1fdG1wICE9
IE5VTEwpIHsKKwkJaWYgKChTQ1RQX0JVRl9ORVhUKG1fdG1wKSA9PSBOVUxMKSAmJiB0cmFpbGVy
KSB7CisJCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0eCwgbXRvZChtX3RtcCwgdWlu
dDhfdCAqKSArIG1fb2Zmc2V0LAorCQkJCQkgU0NUUF9CVUZfTEVOKG1fdG1wKSAtICh0cmFpbGVy
K21fb2Zmc2V0KSk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywg
JmN0eCwgbXRvZChtX3RtcCwgdWludDhfdCAqKSArIG1fb2Zmc2V0LAorCQkJCQkgU0NUUF9CVUZf
TEVOKG1fdG1wKSAtIG1fb2Zmc2V0KTsKKwkJfQorCisJCS8qIGNsZWFyIHRoZSBvZmZzZXQgc2lu
Y2UgaXQncyBvbmx5IGZvciB0aGUgZmlyc3QgbWJ1ZiAqLworCQltX29mZnNldCA9IDA7CisJCW1f
dG1wID0gU0NUUF9CVUZfTkVYVChtX3RtcCk7CisJfQorCXNjdHBfaG1hY19maW5hbChobWFjX2Fs
Z28sICZjdHgsIHRlbXApOworCisJLyogcGVyZm9ybSBvdXRlciBoYXNoICovCisJc2N0cF9obWFj
X2luaXQoaG1hY19hbGdvLCAmY3R4KTsKKwlzY3RwX2htYWNfdXBkYXRlKGhtYWNfYWxnbywgJmN0
eCwgb3BhZCwgYmxvY2tsZW4pOworCXNjdHBfaG1hY191cGRhdGUoaG1hY19hbGdvLCAmY3R4LCB0
ZW1wLCBkaWdlc3RsZW4pOworCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIGRpZ2Vz
dCk7CisKKwlyZXR1cm4gKGRpZ2VzdGxlbik7Cit9CisKKy8qLQorICogdmVyaWZ5IHRoZSBITUFD
IGRpZ2VzdCB1c2luZyB0aGUgZGVzaXJlZCBoYXNoIGtleSwgdGV4dCwgYW5kIEhNQUMKKyAqIGFs
Z29yaXRobS4KKyAqIFJldHVybnMgLTEgb24gZXJyb3IsIDAgb24gc3VjY2Vzcy4KKyAqLworaW50
CitzY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4sCisgICAgdWludDhfdCAqdGV4dCwgdWludDMyX3QgdGV4dGxlbiwKKyAgICB1
aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikKK3sKKwl1aW50MzJfdCBsZW47CisJ
dWludDhfdCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBzYW5pdHkgY2hl
Y2sgdGhlIG1hdGVyaWFsIGFuZCBsZW5ndGggKi8KKwlpZiAoKGtleSA9PSBOVUxMKSB8fCAoa2V5
bGVuID09IDApIHx8CisJICAgICh0ZXh0ID09IE5VTEwpIHx8ICh0ZXh0bGVuID09IDApIHx8IChk
aWdlc3QgPT0gTlVMTCkpIHsKKwkJLyogY2FuJ3QgZG8gSE1BQyB3aXRoIGVtcHR5IGtleSBvciB0
ZXh0IG9yIGRpZ2VzdCAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisJbGVuID0gc2N0cF9nZXRfaG1h
Y19kaWdlc3RfbGVuKGhtYWNfYWxnbyk7CisJaWYgKChsZW4gPT0gMCkgfHwgKGRpZ2VzdGxlbiAh
PSBsZW4pKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGNvbXB1dGUgdGhlIGV4cGVjdGVkIGhhc2gg
Ki8KKwlpZiAoc2N0cF9obWFjKGhtYWNfYWxnbywga2V5LCBrZXlsZW4sIHRleHQsIHRleHRsZW4s
IHRlbXApICE9IGxlbikKKwkJcmV0dXJuICgtMSk7CisKKwlpZiAobWVtY21wKGRpZ2VzdCwgdGVt
cCwgZGlnZXN0bGVuKSAhPSAwKQorCQlyZXR1cm4gKC0xKTsKKwllbHNlCisJCXJldHVybiAoMCk7
Cit9CisKKworLyoKKyAqIGNvbXB1dGVzIHRoZSByZXF1ZXN0ZWQgSE1BQyB1c2luZyBhIGtleSBz
dHJ1Y3QgKHdoaWNoIG1heSBiZSBtb2RpZmllZCBpZgorICogdGhlIGtleWxlbiBleGNlZWRzIHRo
ZSBITUFDIGJsb2NrIGxlbikuCisgKi8KK3VpbnQzMl90CitzY3RwX2NvbXB1dGVfaG1hYyh1aW50
MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgdWludDhfdCAqdGV4dCwKKyAgICB1aW50
MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdlc3QpCit7CisJdWludDMyX3QgZGlnZXN0bGVuOwor
CXVpbnQzMl90IGJsb2NrbGVuOworCXNjdHBfaGFzaF9jb250ZXh0X3QgY3R4OworCXVpbnQ4X3Qg
dGVtcFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCisJLyogc2FuaXR5IGNoZWNrICovCisJ
aWYgKChrZXkgPT0gTlVMTCkgfHwgKHRleHQgPT0gTlVMTCkgfHwgKHRleHRsZW4gPT0gMCkgfHwK
KwkgICAgKGRpZ2VzdCA9PSBOVUxMKSkgeworCQkvKiBjYW4ndCBkbyBITUFDIHdpdGggZW1wdHkg
a2V5IG9yIHRleHQgb3IgZGlnZXN0IHN0b3JlICovCisJCXJldHVybiAoMCk7CisJfQorCS8qIHZh
bGlkYXRlIHRoZSBobWFjIGFsZ28gYW5kIGdldCB0aGUgZGlnZXN0IGxlbmd0aCAqLworCWRpZ2Vz
dGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2FsZ28pOworCWlmIChkaWdlc3Rs
ZW4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKworCS8qIGhhc2ggdGhlIGtleSBpZiBpdCBpcyBsb25n
ZXIgdGhhbiB0aGUgaGFzaCBibG9jayBzaXplICovCisJYmxvY2tsZW4gPSBzY3RwX2dldF9obWFj
X2Jsb2NrX2xlbihobWFjX2FsZ28pOworCWlmIChrZXktPmtleWxlbiA+IGJsb2NrbGVuKSB7CisJ
CXNjdHBfaG1hY19pbml0KGhtYWNfYWxnbywgJmN0eCk7CisJCXNjdHBfaG1hY191cGRhdGUoaG1h
Y19hbGdvLCAmY3R4LCBrZXktPmtleSwga2V5LT5rZXlsZW4pOworCQlzY3RwX2htYWNfZmluYWwo
aG1hY19hbGdvLCAmY3R4LCB0ZW1wKTsKKwkJLyogc2F2ZSB0aGUgaGFzaGVkIGtleSBhcyB0aGUg
bmV3IGtleSAqLworCQlrZXktPmtleWxlbiA9IGRpZ2VzdGxlbjsKKwkJbWVtY3B5KGtleS0+a2V5
LCB0ZW1wLCBrZXktPmtleWxlbik7CisJfQorCXJldHVybiAoc2N0cF9obWFjKGhtYWNfYWxnbywg
a2V5LT5rZXksIGtleS0+a2V5bGVuLCB0ZXh0LCB0ZXh0bGVuLAorCSAgICBkaWdlc3QpKTsKK30K
KworLyogbWJ1ZiB2ZXJzaW9uICovCit1aW50MzJfdAorc2N0cF9jb21wdXRlX2htYWNfbSh1aW50
MTZfdCBobWFjX2FsZ28sIHNjdHBfa2V5X3QgKmtleSwgc3RydWN0IG1idWYgKm0sCisgICAgdWlu
dDMyX3QgbV9vZmZzZXQsIHVpbnQ4X3QgKmRpZ2VzdCkKK3sKKwl1aW50MzJfdCBkaWdlc3RsZW47
CisJdWludDMyX3QgYmxvY2tsZW47CisJc2N0cF9oYXNoX2NvbnRleHRfdCBjdHg7CisJdWludDhf
dCB0ZW1wW1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBzYW5pdHkgY2hlY2sgKi8K
KwlpZiAoKGtleSA9PSBOVUxMKSB8fCAobSA9PSBOVUxMKSB8fCAoZGlnZXN0ID09IE5VTEwpKSB7
CisJCS8qIGNhbid0IGRvIEhNQUMgd2l0aCBlbXB0eSBrZXkgb3IgdGV4dCBvciBkaWdlc3Qgc3Rv
cmUgKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJLyogdmFsaWRhdGUgdGhlIGhtYWMgYWxnbyBhbmQg
Z2V0IHRoZSBkaWdlc3QgbGVuZ3RoICovCisJZGlnZXN0bGVuID0gc2N0cF9nZXRfaG1hY19kaWdl
c3RfbGVuKGhtYWNfYWxnbyk7CisJaWYgKGRpZ2VzdGxlbiA9PSAwKQorCQlyZXR1cm4gKDApOwor
CisJLyogaGFzaCB0aGUga2V5IGlmIGl0IGlzIGxvbmdlciB0aGFuIHRoZSBoYXNoIGJsb2NrIHNp
emUgKi8KKwlibG9ja2xlbiA9IHNjdHBfZ2V0X2htYWNfYmxvY2tfbGVuKGhtYWNfYWxnbyk7CisJ
aWYgKGtleS0+a2V5bGVuID4gYmxvY2tsZW4pIHsKKwkJc2N0cF9obWFjX2luaXQoaG1hY19hbGdv
LCAmY3R4KTsKKwkJc2N0cF9obWFjX3VwZGF0ZShobWFjX2FsZ28sICZjdHgsIGtleS0+a2V5LCBr
ZXktPmtleWxlbik7CisJCXNjdHBfaG1hY19maW5hbChobWFjX2FsZ28sICZjdHgsIHRlbXApOwor
CQkvKiBzYXZlIHRoZSBoYXNoZWQga2V5IGFzIHRoZSBuZXcga2V5ICovCisJCWtleS0+a2V5bGVu
ID0gZGlnZXN0bGVuOworCQltZW1jcHkoa2V5LT5rZXksIHRlbXAsIGtleS0+a2V5bGVuKTsKKwl9
CisJcmV0dXJuIChzY3RwX2htYWNfbShobWFjX2FsZ28sIGtleS0+a2V5LCBrZXktPmtleWxlbiwg
bSwgbV9vZmZzZXQsIGRpZ2VzdCwgMCkpOworfQorCitpbnQKK3NjdHBfYXV0aF9pc19zdXBwb3J0
ZWRfaG1hYyhzY3RwX2htYWNsaXN0X3QgKmxpc3QsIHVpbnQxNl90IGlkKQoreworCWludCBpOwor
CisJaWYgKChsaXN0ID09IE5VTEwpIHx8IChpZCA9PSBTQ1RQX0FVVEhfSE1BQ19JRF9SU1ZEKSkK
KwkJcmV0dXJuICgwKTsKKworCWZvciAoaSA9IDA7IGkgPCBsaXN0LT5udW1fYWxnbzsgaSsrKQor
CQlpZiAobGlzdC0+aG1hY1tpXSA9PSBpZCkKKwkJCXJldHVybiAoMSk7CisKKwkvKiBub3QgaW4g
dGhlIGxpc3QgKi8KKwlyZXR1cm4gKDApOworfQorCisKKy8qLQorICogY2xlYXIgYW55IGNhY2hl
ZCBrZXkocykgaWYgdGhleSBtYXRjaCB0aGUgZ2l2ZW4ga2V5IGlkIG9uIGFuIGFzc29jaWF0aW9u
LgorICogdGhlIGNhY2hlZCBrZXkocykgd2lsbCBiZSByZWNvbXB1dGVkIGFuZCByZS1jYWNoZWQg
YXQgbmV4dCB1c2UuCisgKiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkgaGVsZAorICovCit2
b2lkCitzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZf
dCBrZXlpZCkKK3sKKwlpZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoa2V5aWQg
PT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCkgeworCQlzY3RwX2ZyZWVfa2V5KHN0
Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5hc3Nv
Y19rZXkgPSBOVUxMOworCX0KKwlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2
X2tleWlkKSB7CisJCXNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleSk7
CisJCXN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPSBOVUxMOworCX0KK30KKworLyotCisg
KiBjbGVhciBhbnkgY2FjaGVkIGtleShzKSBpZiB0aGV5IG1hdGNoIHRoZSBnaXZlbiBrZXkgaWQg
Zm9yIGFsbCBhc3NvY3Mgb24KKyAqIGFuIGVuZHBvaW50LgorICogQVNTVU1FUyBJTlBfV0xPQ0sg
aXMgYWxyZWFkeSBoZWxkCisgKi8KK3ZvaWQKK3NjdHBfY2xlYXJfY2FjaGVka2V5c19lcChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2I7CisKKwlpZiAoaW5wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIGNsZWFyIHRoZSBj
YWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIG9uIHRoaXMgaW5zdGFuY2UgKi8KKwlMSVNUX0ZPUkVB
Q0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOworCQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwga2V5aWQpOworCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJfQorfQorCisvKi0KKyAqIGRlbGV0ZSBhIHNoYXJlZCBr
ZXkgZnJvbSBhbiBhc3NvY2lhdGlvbgorICogQVNTVU1FUyBUQ0JfTE9DSyBpcyBhbHJlYWR5IGhl
bGQKKyAqLworaW50CitzY3RwX2RlbGV0ZV9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNi
LCB1aW50MTZfdCBrZXlpZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJaWYgKHN0
Y2IgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBpcyB0aGUga2V5aWQgdGhlIGFzc29j
IGFjdGl2ZSBzZW5kaW5nIGtleSAqLworCWlmIChrZXlpZCA9PSBzdGNiLT5hc29jLmF1dGhpbmZv
LmFjdGl2ZV9rZXlpZCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/
ICovCisJc2tleSA9IHNjdHBfZmluZF9zaGFyZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMs
IGtleWlkKTsKKwlpZiAoc2tleSA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGFyZSB0
aGVyZSBvdGhlciByZWZjb3VudCBob2xkZXJzIG9uIHRoZSBrZXk/ICovCisJaWYgKHNrZXktPnJl
ZmNvdW50ID4gMSkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiByZW1vdmUgaXQgKi8KKwlMSVNUX1JF
TU9WRShza2V5LCBuZXh0KTsKKwlzY3RwX2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBmcmVlcyBz
a2V5LT5rZXkgYXMgd2VsbCAqLworCisJLyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICovCisJc2N0
cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIGtleWlkKTsKKwlyZXR1cm4gKDApOworfQorCisvKi0K
KyAqIGRlbGV0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVuZHBvaW50CisgKiBBU1NVTUVTIElO
UF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKKyAqLworaW50CitzY3RwX2RlbGV0ZV9zaGFyZWRrZXlf
ZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpCit7CisJc2N0cF9zaGFy
ZWRrZXlfdCAqc2tleTsKKworCWlmIChpbnAgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkv
KiBpcyB0aGUga2V5aWQgdGhlIGFjdGl2ZSBzZW5kaW5nIGtleSBvbiB0aGUgZW5kcG9pbnQgKi8K
KwlpZiAoa2V5aWQgPT0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQpCisJCXJldHVybiAoLTEp
OworCisJLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLworCXNrZXkgPSBzY3RwX2ZpbmRfc2hhcmVk
a2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlkKTsKKwlpZiAoc2tleSA9PSBOVUxM
KQorCQlyZXR1cm4gKC0xKTsKKworCS8qIGVuZHBvaW50IGtleXMgYXJlIG5vdCByZWZjb3VudGVk
ICovCisKKwkvKiByZW1vdmUgaXQgKi8KKwlMSVNUX1JFTU9WRShza2V5LCBuZXh0KTsKKwlzY3Rw
X2ZyZWVfc2hhcmVka2V5KHNrZXkpOwkvKiBmcmVlcyBza2V5LT5rZXkgYXMgd2VsbCAqLworCisJ
LyogY2xlYXIgYW55IGNhY2hlZCBrZXlzICovCisJc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKGlu
cCwga2V5aWQpOworCXJldHVybiAoMCk7Cit9CisKKy8qLQorICogc2V0IHRoZSBhY3RpdmUga2V5
IG9uIGFuIGFzc29jaWF0aW9uCisgKiBBU1NVTUVTIFRDQl9MT0NLIGlzIGFscmVhZHkgaGVsZAor
ICovCitpbnQKK3NjdHBfYXV0aF9zZXRhY3RpdmVrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1
aW50MTZfdCBrZXlpZCkKK3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5ID0gTlVMTDsKKworCS8q
IGZpbmQgdGhlIGtleSBvbiB0aGUgYXNzb2MgKi8KKwlza2V5ID0gc2N0cF9maW5kX3NoYXJlZGtl
eSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywga2V5aWQpOworCWlmIChza2V5ID09IE5VTEwpIHsK
KwkJLyogdGhhdCBrZXkgZG9lc24ndCBleGlzdCAqLworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYg
KChza2V5LT5kZWFjdGl2YXRlZCkgJiYgKHNrZXktPnJlZmNvdW50ID4gMSkpIHsKKwkJLyogY2Fu
J3QgcmVhY3RpdmF0ZSBhIGRlYWN0aXZhdGVkIGtleSB3aXRoIG90aGVyIHJlZmNvdW50cyAqLwor
CQlyZXR1cm4gKC0xKTsKKwl9CisKKwkvKiBzZXQgdGhlIChuZXcpIGFjdGl2ZSBrZXkgKi8KKwlz
dGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCA9IGtleWlkOworCS8qIHJlc2V0IHRoZSBk
ZWFjdGl2YXRlZCBmbGFnICovCisJc2tleS0+ZGVhY3RpdmF0ZWQgPSAwOworCisJcmV0dXJuICgw
KTsKK30KKworLyotCisgKiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24gYW4gZW5kcG9pbnQKKyAqIEFT
U1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAorICovCitpbnQKK3NjdHBfYXV0aF9zZXRh
Y3RpdmVrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpCit7CisJ
c2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCS8qIGZpbmQgdGhlIGtleSAqLworCXNrZXkgPSBz
Y3RwX2ZpbmRfc2hhcmVka2V5KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsIGtleWlkKTsKKwlp
ZiAoc2tleSA9PSBOVUxMKSB7CisJCS8qIHRoYXQga2V5IGRvZXNuJ3QgZXhpc3QgKi8KKwkJcmV0
dXJuICgtMSk7CisJfQorCWlucC0+c2N0cF9lcC5kZWZhdWx0X2tleWlkID0ga2V5aWQ7CisJcmV0
dXJuICgwKTsKK30KKworLyotCisgKiBkZWFjdGl2YXRlcyBhIHNoYXJlZCBrZXkgZnJvbSB0aGUg
YXNzb2NpYXRpb24KKyAqIEFTU1VNRVMgSU5QX1dMT0NLIGlzIGFscmVhZHkgaGVsZAorICovCitp
bnQKK3NjdHBfZGVhY3Rfc2hhcmVka2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qg
a2V5aWQpCit7CisJc2N0cF9zaGFyZWRrZXlfdCAqc2tleTsKKworCWlmIChzdGNiID09IE5VTEwp
CisJCXJldHVybiAoLTEpOworCisJLyogaXMgdGhlIGtleWlkIHRoZSBhc3NvYyBhY3RpdmUgc2Vu
ZGluZyBrZXkgKi8KKwlpZiAoa2V5aWQgPT0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5
aWQpCisJCXJldHVybiAoLTEpOworCisJLyogZG9lcyB0aGUga2V5IGV4aXN0PyAqLworCXNrZXkg
PSBzY3RwX2ZpbmRfc2hhcmVka2V5KCZzdGNiLT5hc29jLnNoYXJlZF9rZXlzLCBrZXlpZCk7CisJ
aWYgKHNrZXkgPT0gTlVMTCkKKwkJcmV0dXJuICgtMSk7CisKKwkvKiBhcmUgdGhlcmUgb3RoZXIg
cmVmY291bnQgaG9sZGVycyBvbiB0aGUga2V5PyAqLworCWlmIChza2V5LT5yZWZjb3VudCA9PSAx
KSB7CisJCS8qIG5vIG90aGVyIHVzZXJzLCBzZW5kIGEgbm90aWZpY2F0aW9uIGZvciB0aGlzIGtl
eSAqLworCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSwgc3RjYiwg
a2V5aWQsIDAsCisJCQkJU0NUUF9TT19MT0NLRUQpOworCX0KKworCS8qIG1hcmsgdGhlIGtleSBh
cyBkZWFjdGl2YXRlZCAqLworCXNrZXktPmRlYWN0aXZhdGVkID0gMTsKKworCXJldHVybiAoMCk7
Cit9CisKKy8qLQorICogZGVhY3RpdmF0ZXMgYSBzaGFyZWQga2V5IGZyb20gdGhlIGVuZHBvaW50
CisgKiBBU1NVTUVTIElOUF9XTE9DSyBpcyBhbHJlYWR5IGhlbGQKKyAqLworaW50CitzY3RwX2Rl
YWN0X3NoYXJlZGtleV9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB1aW50MTZfdCBrZXlpZCkK
K3sKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCisJaWYgKGlucCA9PSBOVUxMKQorCQlyZXR1
cm4gKC0xKTsKKworCS8qIGlzIHRoZSBrZXlpZCB0aGUgYWN0aXZlIHNlbmRpbmcga2V5IG9uIHRo
ZSBlbmRwb2ludCAqLworCWlmIChrZXlpZCA9PSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9rZXlpZCkK
KwkJcmV0dXJuICgtMSk7CisKKwkvKiBkb2VzIHRoZSBrZXkgZXhpc3Q/ICovCisJc2tleSA9IHNj
dHBfZmluZF9zaGFyZWRrZXkoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywga2V5aWQpOworCWlm
IChza2V5ID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJLyogZW5kcG9pbnQga2V5cyBhcmUg
bm90IHJlZmNvdW50ZWQgKi8KKworCS8qIHJlbW92ZSBpdCAqLworCUxJU1RfUkVNT1ZFKHNrZXks
IG5leHQpOworCXNjdHBfZnJlZV9zaGFyZWRrZXkoc2tleSk7CS8qIGZyZWVzIHNrZXktPmtleSBh
cyB3ZWxsICovCisKKwlyZXR1cm4gKDApOworfQorCisvKgorICogZ2V0IGxvY2FsIGF1dGhlbnRp
Y2F0aW9uIHBhcmFtZXRlcnMgZnJvbSBjb29raWUgKGZyb20gSU5JVC1BQ0spCisgKi8KK3ZvaWQK
K3NjdHBfYXV0aF9nZXRfY29va2llX3BhcmFtcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBtYnVmICptLAorICAgIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgbGVuZ3RoKQoreworCXN0
cnVjdCBzY3RwX3BhcmFtaGRyICpwaGRyLCB0bXBfcGFyYW07CisJdWludDE2X3QgcGxlbiwgcHR5
cGU7CisJdWludDhfdCByYW5kb21fc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJc3Ry
dWN0IHNjdHBfYXV0aF9yYW5kb20gKnBfcmFuZG9tID0gTlVMTDsKKwl1aW50MTZfdCByYW5kb21f
bGVuID0gMDsKKwl1aW50OF90IGhtYWNzX3N0b3JlW1NDVFBfUEFSQU1fQlVGRkVSX1NJWkVdOwor
CXN0cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjcyA9IE5VTEw7CisJdWludDE2X3QgaG1h
Y3NfbGVuID0gMDsKKwl1aW50OF90IGNodW5rc19zdG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpF
XTsKKwlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rcyA9IE5VTEw7CisJdWludDE2
X3QgbnVtX2NodW5rcyA9IDA7CisJc2N0cF9rZXlfdCAqbmV3X2tleTsKKwl1aW50MzJfdCBrZXls
ZW47CisKKwkvKiBjb252ZXJ0IHRvIHVwcGVyIGJvdW5kICovCisJbGVuZ3RoICs9IG9mZnNldDsK
KworCXBoZHIgPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNl
dCwKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgKHVpbnQ4X3QgKikmdG1wX3Bh
cmFtKTsKKwl3aGlsZSAocGhkciAhPSBOVUxMKSB7CisJCXB0eXBlID0gbnRvaHMocGhkci0+cGFy
YW1fdHlwZSk7CisJCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOworCisJCWlmICgo
cGxlbiA9PSAwKSB8fCAob2Zmc2V0ICsgcGxlbiA+IGxlbmd0aCkpCisJCQlicmVhazsKKworCQlp
ZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKKwkJCWlmIChwbGVuID4gc2l6ZW9mKHJhbmRvbV9z
dG9yZSkpCisJCQkJYnJlYWs7CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZz
ZXQsCisJCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopcmFuZG9tX3N0b3JlLCBwbGVuKTsK
KwkJCWlmIChwaGRyID09IE5VTEwpCisJCQkJcmV0dXJuOworCQkJLyogc2F2ZSB0aGUgcmFuZG9t
IGFuZCBsZW5ndGggZm9yIHRoZSBrZXkgKi8KKwkJCXBfcmFuZG9tID0gKHN0cnVjdCBzY3RwX2F1
dGhfcmFuZG9tICopcGhkcjsKKwkJCXJhbmRvbV9sZW4gPSBwbGVuIC0gc2l6ZW9mKCpwX3JhbmRv
bSk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXVpbnQxNl90
IG51bV9obWFjczsKKwkJCXVpbnQxNl90IGk7CisKKwkJCWlmIChwbGVuID4gc2l6ZW9mKGhtYWNz
X3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9m
ZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilobWFjc19zdG9yZSwgcGxlbik7
CisJCQlpZiAocGhkciA9PSBOVUxMKQorCQkJCXJldHVybjsKKwkJCS8qIHNhdmUgdGhlIGhtYWNz
IGxpc3QgYW5kIG51bSBmb3IgdGhlIGtleSAqLworCQkJaG1hY3MgPSAoc3RydWN0IHNjdHBfYXV0
aF9obWFjX2FsZ28gKilwaGRyOworCQkJaG1hY3NfbGVuID0gcGxlbiAtIHNpemVvZigqaG1hY3Mp
OworCQkJbnVtX2htYWNzID0gaG1hY3NfbGVuIC8gc2l6ZW9mKGhtYWNzLT5obWFjX2lkc1swXSk7
CisJCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKQorCQkJCXNjdHBfZnJlZV9o
bWFjbGlzdChzdGNiLT5hc29jLmxvY2FsX2htYWNzKTsKKwkJCXN0Y2ItPmFzb2MubG9jYWxfaG1h
Y3MgPSBzY3RwX2FsbG9jX2htYWNsaXN0KG51bV9obWFjcyk7CisJCQlpZiAoc3RjYi0+YXNvYy5s
b2NhbF9obWFjcyAhPSBOVUxMKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG51bV9obWFjczsgaSsr
KSB7CisJCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfaG1hY2lkKHN0Y2ItPmFzb2MubG9jYWxfaG1h
Y3MsCisJCQkJCSAgICBudG9ocyhobWFjcy0+aG1hY19pZHNbaV0pKTsKKwkJCQl9CisJCQl9CisJ
CX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9DSFVOS19MSVNUKSB7CisJCQlpbnQgaTsKKworCQkJ
aWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCXBoZHIgPSBz
Y3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1o
ZHIgKiljaHVua3Nfc3RvcmUsIHBsZW4pOworCQkJaWYgKHBoZHIgPT0gTlVMTCkKKwkJCQlyZXR1
cm47CisJCQljaHVua3MgPSAoc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICopcGhkcjsKKwkJ
CW51bV9jaHVua3MgPSBwbGVuIC0gc2l6ZW9mKCpjaHVua3MpOworCQkJLyogc2F2ZSBjaHVua3Mg
bGlzdCBhbmQgbnVtIGZvciB0aGUga2V5ICovCisJCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9hdXRo
X2NodW5rcyAhPSBOVUxMKQorCQkJCXNjdHBfY2xlYXJfY2h1bmtsaXN0KHN0Y2ItPmFzb2MubG9j
YWxfYXV0aF9jaHVua3MpOworCQkJZWxzZQorCQkJCXN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVu
a3MgPSBzY3RwX2FsbG9jX2NodW5rbGlzdCgpOworCQkJZm9yIChpID0gMDsgaSA8IG51bV9jaHVu
a3M7IGkrKykgeworCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoY2h1bmtzLT5jaHVua190
eXBlc1tpXSwKKwkJCQkgICAgc3RjYi0+YXNvYy5sb2NhbF9hdXRoX2NodW5rcyk7CisJCQl9CisJ
CX0KKwkJLyogZ2V0IG5leHQgcGFyYW1ldGVyICovCisJCW9mZnNldCArPSBTQ1RQX1NJWkUzMihw
bGVuKTsKKwkJaWYgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgPiBsZW5n
dGgpCisJCQlicmVhazsKKwkJcGhkciA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKXNjdHBfbV9n
ZXRwdHIobSwgb2Zmc2V0LCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLAorCQkgICAgKHVp
bnQ4X3QgKikmdG1wX3BhcmFtKTsKKwl9CisJLyogY29uY2F0ZW5hdGUgdGhlIGZ1bGwgcmFuZG9t
IGtleSAqLworCWtleWxlbiA9IHNpemVvZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbiArIHNpemVv
ZigqaG1hY3MpICsgaG1hY3NfbGVuOworCWlmIChjaHVua3MgIT0gTlVMTCkgeworCQlrZXlsZW4g
Kz0gc2l6ZW9mKCpjaHVua3MpICsgbnVtX2NodW5rczsKKwl9CisJbmV3X2tleSA9IHNjdHBfYWxs
b2Nfa2V5KGtleWxlbik7CisJaWYgKG5ld19rZXkgIT0gTlVMTCkgeworCQkvKiBjb3B5IGluIHRo
ZSBSQU5ET00gKi8KKwkJaWYgKHBfcmFuZG9tICE9IE5VTEwpIHsKKwkJCWtleWxlbiA9IHNpemVv
ZigqcF9yYW5kb20pICsgcmFuZG9tX2xlbjsKKwkJCW1lbWNweShuZXdfa2V5LT5rZXksIHBfcmFu
ZG9tLCBrZXlsZW4pOworCQl9IGVsc2UgeworCQkJa2V5bGVuID0gMDsKKwkJfQorCQkvKiBhcHBl
bmQgaW4gdGhlIEFVVEggY2h1bmtzICovCisJCWlmIChjaHVua3MgIT0gTlVMTCkgeworCQkJbWVt
Y3B5KG5ld19rZXktPmtleSArIGtleWxlbiwgY2h1bmtzLAorCQkJICAgICAgIHNpemVvZigqY2h1
bmtzKSArIG51bV9jaHVua3MpOworCQkJa2V5bGVuICs9IHNpemVvZigqY2h1bmtzKSArIG51bV9j
aHVua3M7CisJCX0KKwkJLyogYXBwZW5kIGluIHRoZSBITUFDcyAqLworCQlpZiAoaG1hY3MgIT0g
TlVMTCkgeworCQkJbWVtY3B5KG5ld19rZXktPmtleSArIGtleWxlbiwgaG1hY3MsCisJCQkgICAg
ICAgc2l6ZW9mKCpobWFjcykgKyBobWFjc19sZW4pOworCQl9CisJfQorCWlmIChzdGNiLT5hc29j
LmF1dGhpbmZvLnJhbmRvbSAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0
aGluZm8ucmFuZG9tKTsKKwlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSA9IG5ld19rZXk7CisJ
c3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb21fbGVuID0gcmFuZG9tX2xlbjsKKwlzY3RwX2NsZWFy
X2NhY2hlZGtleXMoc3RjYiwgc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCk7CisJc2N0
cF9jbGVhcl9jYWNoZWRrZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCk7
CisKKwkvKiBuZWdvdGlhdGUgd2hhdCBITUFDIHRvIHVzZSBmb3IgdGhlIHBlZXIgKi8KKwlzdGNi
LT5hc29jLnBlZXJfaG1hY19pZCA9IHNjdHBfbmVnb3RpYXRlX2htYWNpZChzdGNiLT5hc29jLnBl
ZXJfaG1hY3MsCisJICAgIHN0Y2ItPmFzb2MubG9jYWxfaG1hY3MpOworCisJLyogY29weSBkZWZh
dWx0cyBmcm9tIHRoZSBlbmRwb2ludCAqLworCS8qIEZJWCBNRTogcHV0IGluIGNvb2tpZT8gKi8K
KwlzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZCA9IHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZXAuZGVmYXVsdF9rZXlpZDsKKwkvKiBjb3B5IG91dCB0aGUgc2hhcmVkIGtleSBsaXN0IChieSBy
ZWZlcmVuY2UpIGZyb20gdGhlIGVuZHBvaW50ICovCisJKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0
KCZzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNoYXJlZF9rZXlzLAorCQkJCSAmc3RjYi0+YXNvYy5z
aGFyZWRfa2V5cyk7Cit9CisKKy8qCisgKiBjb21wdXRlIGFuZCBmaWxsIGluIHRoZSBITUFDIGRp
Z2VzdCBmb3IgYSBwYWNrZXQKKyAqLwordm9pZAorc2N0cF9maWxsX2htYWNfZGlnZXN0X20oc3Ry
dWN0IG1idWYgKm0sIHVpbnQzMl90IGF1dGhfb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX2F1dGhf
Y2h1bmsgKmF1dGgsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpCit7CisJ
dWludDMyX3QgZGlnZXN0bGVuOworCXNjdHBfc2hhcmVka2V5X3QgKnNrZXk7CisJc2N0cF9rZXlf
dCAqa2V5OworCisJaWYgKChzdGNiID09IE5VTEwpIHx8IChhdXRoID09IE5VTEwpKQorCQlyZXR1
cm47CisKKwkvKiB6ZXJvIHRoZSBkaWdlc3QgKyBjaHVuayBwYWRkaW5nICovCisJZGlnZXN0bGVu
ID0gc2N0cF9nZXRfaG1hY19kaWdlc3RfbGVuKHN0Y2ItPmFzb2MucGVlcl9obWFjX2lkKTsKKwlt
ZW1zZXQoYXV0aC0+aG1hYywgMCwgU0NUUF9TSVpFMzIoZGlnZXN0bGVuKSk7CisKKwkvKiBpcyB0
aGUgZGVzaXJlZCBrZXkgY2FjaGVkPyAqLworCWlmICgoa2V5aWQgIT0gc3RjYi0+YXNvYy5hdXRo
aW5mby5hc3NvY19rZXlpZCkgfHwKKwkgICAgKHN0Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5
ID09IE5VTEwpKSB7CisJCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleSAhPSBOVUxM
KSB7CisJCQkvKiBmcmVlIHRoZSBvbGQgY2FjaGVkIGtleSAqLworCQkJc2N0cF9mcmVlX2tleShz
dGNiLT5hc29jLmF1dGhpbmZvLmFzc29jX2tleSk7CisJCX0KKwkJc2tleSA9IHNjdHBfZmluZF9z
aGFyZWRrZXkoJnN0Y2ItPmFzb2Muc2hhcmVkX2tleXMsIGtleWlkKTsKKwkJLyogdGhlIG9ubHkg
d2F5IHNrZXkgaXMgTlVMTCBpcyBpZiBudWxsIGtleSBpZCAwIGlzIHVzZWQgKi8KKwkJaWYgKHNr
ZXkgIT0gTlVMTCkKKwkJCWtleSA9IHNrZXktPmtleTsKKwkJZWxzZQorCQkJa2V5ID0gTlVMTDsK
KwkJLyogY29tcHV0ZSBhIG5ldyBhc3NvYyBrZXkgYW5kIGNhY2hlIGl0ICovCisJCXN0Y2ItPmFz
b2MuYXV0aGluZm8uYXNzb2Nfa2V5ID0KKwkJICAgIHNjdHBfY29tcHV0ZV9oYXNoa2V5KHN0Y2It
PmFzb2MuYXV0aGluZm8ucmFuZG9tLAorCQkJCQkgc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVyX3Jh
bmRvbSwga2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCA9IGtleWlkOwor
CQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsICJjYWNoaW5nIGtleSBpZCAldVxuIiwKKwkJCXN0
Y2ItPmFzb2MuYXV0aGluZm8uYXNzb2Nfa2V5aWQpOworI2lmZGVmIFNDVFBfREVCVUcKKwkJaWYg
KFNDVFBfQVVUSF9ERUJVRykKKwkJCXNjdHBfcHJpbnRfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8u
YXNzb2Nfa2V5LAorCQkJCSAgICAgICAiQXNzb2MgS2V5Iik7CisjZW5kaWYKKwl9CisKKwkvKiBz
ZXQgaW4gdGhlIGFjdGl2ZSBrZXkgaWQgKi8KKwlhdXRoLT5zaGFyZWRfa2V5X2lkID0gaHRvbnMo
a2V5aWQpOworCisJLyogY29tcHV0ZSBhbmQgZmlsbCBpbiB0aGUgZGlnZXN0ICovCisJKHZvaWQp
c2N0cF9jb21wdXRlX2htYWNfbShzdGNiLT5hc29jLnBlZXJfaG1hY19pZCwgc3RjYi0+YXNvYy5h
dXRoaW5mby5hc3NvY19rZXksCisJCQkJICBtLCBhdXRoX29mZnNldCwgYXV0aC0+aG1hYyk7Cit9
CisKKworc3RhdGljIHZvaWQKK3NjdHBfemVyb19tKHN0cnVjdCBtYnVmICptLCB1aW50MzJfdCBt
X29mZnNldCwgdWludDMyX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJdWludDhf
dCAqZGF0YTsKKworCS8qIHNhbml0eSBjaGVjayAqLworCWlmIChtID09IE5VTEwpCisJCXJldHVy
bjsKKworCS8qIGZpbmQgdGhlIGNvcnJlY3Qgc3RhcnRpbmcgbWJ1ZiBhbmQgb2Zmc2V0IChnZXQg
c3RhcnQgcG9zaXRpb24pICovCisJbV90bXAgPSBtOworCXdoaWxlICgobV90bXAgIT0gTlVMTCkg
JiYgKG1fb2Zmc2V0ID49ICh1aW50MzJfdCkgU0NUUF9CVUZfTEVOKG1fdG1wKSkpIHsKKwkJbV9v
ZmZzZXQgLT0gU0NUUF9CVUZfTEVOKG1fdG1wKTsKKwkJbV90bXAgPSBTQ1RQX0JVRl9ORVhUKG1f
dG1wKTsKKwl9CisJLyogbm93IHVzZSB0aGUgcmVzdCBvZiB0aGUgbWJ1ZiBjaGFpbiAqLworCXdo
aWxlICgobV90bXAgIT0gTlVMTCkgJiYgKHNpemUgPiAwKSkgeworCQlkYXRhID0gbXRvZChtX3Rt
cCwgdWludDhfdCAqKSArIG1fb2Zmc2V0OworCQlpZiAoc2l6ZSA+ICh1aW50MzJfdCkoU0NUUF9C
VUZfTEVOKG1fdG1wKSAtIG1fb2Zmc2V0KSkgeworCQkJbWVtc2V0KGRhdGEsIDAsIFNDVFBfQlVG
X0xFTihtX3RtcCkgLSBtX29mZnNldCk7CisJCQlzaXplIC09IFNDVFBfQlVGX0xFTihtX3RtcCkg
LSBtX29mZnNldDsKKwkJfSBlbHNlIHsKKwkJCW1lbXNldChkYXRhLCAwLCBzaXplKTsKKwkJCXNp
emUgPSAwOworCQl9CisJCS8qIGNsZWFyIHRoZSBvZmZzZXQgc2luY2UgaXQncyBvbmx5IGZvciB0
aGUgZmlyc3QgbWJ1ZiAqLworCQltX29mZnNldCA9IDA7CisJCW1fdG1wID0gU0NUUF9CVUZfTkVY
VChtX3RtcCk7CisJfQorfQorCisvKi0KKyAqIHByb2Nlc3MgdGhlIGluY29taW5nIEF1dGhlbnRp
Y2F0aW9uIGNodW5rCisgKiByZXR1cm4gY29kZXM6CisgKiAgIC0xIG9uIGFueSBhdXRoZW50aWNh
dGlvbiBlcnJvcgorICogICAgMCBvbiBhdXRoZW50aWNhdGlvbiB2ZXJpZmljYXRpb24KKyAqLwor
aW50CitzY3RwX2hhbmRsZV9hdXRoKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
YXV0aF9jaHVuayAqYXV0aCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQor
eworCXVpbnQxNl90IGNodW5rbGVuOworCXVpbnQxNl90IHNoYXJlZF9rZXlfaWQ7CisJdWludDE2
X3QgaG1hY19pZDsKKwlzY3RwX3NoYXJlZGtleV90ICpza2V5OworCXVpbnQzMl90IGRpZ2VzdGxl
bjsKKwl1aW50OF90IGRpZ2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOworCXVpbnQ4X3Qg
Y29tcHV0ZWRfZGlnZXN0W1NDVFBfQVVUSF9ESUdFU1RfTEVOX01BWF07CisKKwkvKiBhdXRoIGlz
IGNoZWNrZWQgZm9yIE5VTEwgYnkgY2FsbGVyICovCisJY2h1bmtsZW4gPSBudG9ocyhhdXRoLT5j
aC5jaHVua19sZW5ndGgpOworCWlmIChjaHVua2xlbiA8IHNpemVvZigqYXV0aCkpIHsKKwkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGhmYWlsZWQpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmF1dGgpOworCisJLyogZ2V0IHRoZSBhdXRoIHBhcmFt
cyAqLworCXNoYXJlZF9rZXlfaWQgPSBudG9ocyhhdXRoLT5zaGFyZWRfa2V5X2lkKTsKKwlobWFj
X2lkID0gbnRvaHMoYXV0aC0+aG1hY19pZCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAor
CQkiU0NUUCBBVVRIIENodW5rOiBzaGFyZWQga2V5ICV1LCBITUFDIGlkICV1XG4iLAorCQlzaGFy
ZWRfa2V5X2lkLCBobWFjX2lkKTsKKworCS8qIGlzIHRoZSBpbmRpY2F0ZWQgSE1BQyBzdXBwb3J0
ZWQ/ICovCisJaWYgKCFzY3RwX2F1dGhfaXNfc3VwcG9ydGVkX2htYWMoc3RjYi0+YXNvYy5sb2Nh
bF9obWFjcywgaG1hY19pZCkpIHsKKwkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJc3RydWN0IHNj
dHBfZXJyb3JfYXV0aF9pbnZhbGlkX2htYWMgKmNhdXNlOworCisJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX3JlY3ZpdmFsaG1hY2lkKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlND
VFAgQXV0aDogdW5zdXBwb3J0ZWQgSE1BQyBpZCAldVxuIiwKKwkJCWhtYWNfaWQpOworCQkvKgor
CQkgKiByZXBvcnQgdGhpcyBpbiBhbiBFcnJvciBDaHVuazogVW5zdXBwb3J0ZWQgSE1BQworCQkg
KiBJZGVudGlmaWVyCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6
ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2F1dGhfaW52YWxpZF9obWFjKSwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCQlpZiAob3Bf
ZXJyICE9IE5VTEwpIHsKKwkJCS8qIHByZS1yZXNlcnZlIHNvbWUgc3BhY2UgKi8KKwkJCVNDVFBf
QlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKKwkJCS8q
IGZpbGwgaW4gdGhlIGVycm9yICovCisJCQljYXVzZSA9IG10b2Qob3BfZXJyLCBzdHJ1Y3Qgc2N0
cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYyAqKTsKKwkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRv
bnMoU0NUUF9DQVVTRV9VTlNVUFBPUlRFRF9ITUFDSUQpOworCQkJY2F1c2UtPmNhdXNlLmxlbmd0
aCA9IGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9hdXRoX2ludmFsaWRfaG1hYykpOwor
CQkJY2F1c2UtPmhtYWNfaWQgPSBudG9ocyhobWFjX2lkKTsKKwkJCVNDVFBfQlVGX0xFTihvcF9l
cnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2F1dGhfaW52YWxpZF9obWFjKTsKKwkJCS8q
IHF1ZXVlIGl0ICovCisJCQlzY3RwX3F1ZXVlX29wX2VycihzdGNiLCBvcF9lcnIpOworCQl9CisJ
CXJldHVybiAoLTEpOworCX0KKwkvKiBnZXQgdGhlIGluZGljYXRlZCBzaGFyZWQga2V5LCBpZiBh
dmFpbGFibGUgKi8KKwlpZiAoKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkgPT0gTlVMTCkg
fHwKKwkgICAgKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCAhPSBzaGFyZWRfa2V5X2lk
KSkgeworCQkvKiBmaW5kIHRoZSBzaGFyZWQga2V5IG9uIHRoZSBhc3NvYyBmaXJzdCAqLworCQlz
a2V5ID0gc2N0cF9maW5kX3NoYXJlZGtleSgmc3RjYi0+YXNvYy5zaGFyZWRfa2V5cywKKwkJCQkJ
ICAgc2hhcmVkX2tleV9pZCk7CisJCS8qIGlmIHRoZSBzaGFyZWQga2V5IGlzbid0IGZvdW5kLCBk
aXNjYXJkIHRoZSBjaHVuayAqLworCQlpZiAoc2tleSA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2aXZhbGtleWlkKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwK
KwkJCQkiU0NUUCBBdXRoOiB1bmtub3duIGtleSBpZCAldVxuIiwKKwkJCQlzaGFyZWRfa2V5X2lk
KTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCS8qIGdlbmVyYXRlIGEgbm90aWZpY2F0aW9uIGlm
IHRoaXMgaXMgYSBuZXcga2V5IGlkICovCisJCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zf
a2V5aWQgIT0gc2hhcmVkX2tleV9pZCkKKwkJCS8qCisJCQkgKiBzY3RwX3VscF9ub3RpZnkoU0NU
UF9OT1RJRllfQVVUSF9ORVdfS0VZLCBzdGNiLAorCQkJICogc2hhcmVkX2tleV9pZCwgKHZvaWQK
KwkJCSAqICopc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkKTsKKwkJCSAqLworCQkJc2N0
cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05FV19LRVksCisJCQkgICAg
c2hhcmVkX2tleV9pZCwgc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkLAorCQkJICAgIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCS8qIGNvbXB1dGUgYSBuZXcgcmVjdiBhc3NvYyBrZXkgYW5k
IGNhY2hlIGl0ICovCisJCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ICE9IE5VTEwp
CisJCQlzY3RwX2ZyZWVfa2V5KHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXkpOworCQlzdGNi
LT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5ID0KKwkJICAgIHNjdHBfY29tcHV0ZV9oYXNoa2V5KHN0
Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tLAorCQkgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5wZWVy
X3JhbmRvbSwgc2tleS0+a2V5KTsKKwkJc3RjYi0+YXNvYy5hdXRoaW5mby5yZWN2X2tleWlkID0g
c2hhcmVkX2tleV9pZDsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJCWlmIChTQ1RQX0FVVEhfREVCVUcp
CisJCQlzY3RwX3ByaW50X2tleShzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LCAiUmVjdiBL
ZXkiKTsKKyNlbmRpZgorCX0KKwkvKiB2YWxpZGF0ZSB0aGUgZGlnZXN0IGxlbmd0aCAqLworCWRp
Z2VzdGxlbiA9IHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihobWFjX2lkKTsKKwlpZiAoY2h1bmts
ZW4gPCAoc2l6ZW9mKCphdXRoKSArIGRpZ2VzdGxlbikpIHsKKwkJLyogaW52YWxpZCBkaWdlc3Qg
bGVuZ3RoICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRoZmFpbGVkKTsKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJIlNDVFAgQXV0aDogY2h1bmsgdG9vIHNob3J0IGZv
ciBITUFDXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIHNhdmUgYSBjb3B5IG9mIHRoZSBk
aWdlc3QsIHplcm8gdGhlIHBzZXVkbyBoZWFkZXIsIGFuZCB2YWxpZGF0ZSAqLworCW1lbWNweShk
aWdlc3QsIGF1dGgtPmhtYWMsIGRpZ2VzdGxlbik7CisJc2N0cF96ZXJvX20obSwgb2Zmc2V0ICsg
c2l6ZW9mKCphdXRoKSwgU0NUUF9TSVpFMzIoZGlnZXN0bGVuKSk7CisJKHZvaWQpc2N0cF9jb21w
dXRlX2htYWNfbShobWFjX2lkLCBzdGNiLT5hc29jLmF1dGhpbmZvLnJlY3Zfa2V5LAorCSAgICBt
LCBvZmZzZXQsIGNvbXB1dGVkX2RpZ2VzdCk7CisKKwkvKiBjb21wYXJlIHRoZSBjb21wdXRlZCBk
aWdlc3Qgd2l0aCB0aGUgb25lIGluIHRoZSBBVVRIIGNodW5rICovCisJaWYgKG1lbWNtcChkaWdl
c3QsIGNvbXB1dGVkX2RpZ2VzdCwgZGlnZXN0bGVuKSAhPSAwKSB7CisJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3JlY3ZhdXRoZmFpbGVkKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0FVVEgxLAorCQkJ
IlNDVFAgQXV0aDogSE1BQyBkaWdlc3QgY2hlY2sgZmFpbGVkXG4iKTsKKwkJcmV0dXJuICgtMSk7
CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBHZW5lcmF0ZSBOT1RJRklDQVRJT04KKyAq
Lwordm9pZAorc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RydWN0IHNjdHBfdGNiICpzdGNi
LCB1aW50MzJfdCBpbmRpY2F0aW9uLAorCQkJICAgdWludDE2X3Qga2V5aWQsIHVpbnQxNl90IGFs
dF9rZXlpZCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJU0NUUF9VTlVTRUQKKyNlbmRpZgorKQoreworCXN0
cnVjdCBtYnVmICptX25vdGlmeTsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50ICphdXRoOwor
CXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCisJaWYgKChzdGNiID09IE5V
TEwpIHx8CisJICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfR09ORSkgfHwKKwkgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9T
VEFURV9DTE9TRURfU09DS0VUKQorCQkpIHsKKwkJLyogSWYgdGhlIHNvY2tldCBpcyBnb25lIHdl
IGFyZSBvdXQgb2YgaGVyZSAqLworCQlyZXR1cm47CisJfQorCisJaWYgKHNjdHBfc3RjYl9pc19m
ZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVCkp
CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJCXJldHVybjsKKworCW1fbm90aWZ5ID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50KSwKKwkJ
CQkJICAwLCBNX05PV0FJVCwgMSwgTVRfSEVBREVSKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkK
KwkJLyogbm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisKKwlTQ1RQX0JVRl9MRU4obV9ub3Rp
ZnkpID0gMDsKKwlhdXRoID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYXV0aGtleV9ldmVu
dCAqKTsKKwltZW1zZXQoYXV0aCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQp
KTsKKwlhdXRoLT5hdXRoX3R5cGUgPSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5UOworCWF1dGgt
PmF1dGhfZmxhZ3MgPSAwOworCWF1dGgtPmF1dGhfbGVuZ3RoID0gc2l6ZW9mKCphdXRoKTsKKwlh
dXRoLT5hdXRoX2tleW51bWJlciA9IGtleWlkOworCWF1dGgtPmF1dGhfYWx0a2V5bnVtYmVyID0g
YWx0X2tleWlkOworCWF1dGgtPmF1dGhfaW5kaWNhdGlvbiA9IGluZGljYXRpb247CisJYXV0aC0+
YXV0aF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisKKwlTQ1RQX0JVRl9MRU4o
bV9ub3RpZnkpID0gc2l6ZW9mKCphdXRoKTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5V
TEw7CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNjdHBfYnVpbGRfcmVh
ZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLAorCSAgICAwLCAw
LCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAsIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9
PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOwor
CQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7
CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdl
IG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRk
X3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3Rw
X3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsK
K30KKworCisvKi0KKyAqIHZhbGlkYXRlcyB0aGUgQVVUSGVudGljYXRpb24gcmVsYXRlZCBwYXJh
bWV0ZXJzIGluIGFuIElOSVQvSU5JVC1BQ0sKKyAqIE5vdGU6IGN1cnJlbnRseSBvbmx5IHVzZWQg
Zm9yIElOSVQgYXMgSU5JVC1BQ0sgaXMgaGFuZGxlZCBpbmxpbmUKKyAqIHdpdGggc2N0cF9sb2Fk
X2FkZHJlc3Nlc19mcm9tX2luaXQoKQorICovCitpbnQKK3NjdHBfdmFsaWRhdGVfaW5pdF9hdXRo
X3BhcmFtcyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwgaW50IGxpbWl0KQoreworCXN0cnVj
dCBzY3RwX3BhcmFtaGRyICpwaGRyLCBwYXJhbV9idWY7CisJdWludDE2X3QgcHR5cGUsIHBsZW47
CisJaW50IHBlZXJfc3VwcG9ydHNfYXNjb25mID0gMDsKKwlpbnQgcGVlcl9zdXBwb3J0c19hdXRo
ID0gMDsKKwlpbnQgZ290X3JhbmRvbSA9IDAsIGdvdF9obWFjcyA9IDAsIGdvdF9jaGtsaXN0ID0g
MDsKKwl1aW50OF90IHNhd19hc2NvbmYgPSAwOworCXVpbnQ4X3Qgc2F3X2FzY29uZl9hY2sgPSAw
OworCisJLyogZ28gdGhyb3VnaCBlYWNoIG9mIHRoZSBwYXJhbXMuICovCisJcGhkciA9IHNjdHBf
Z2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLCBzaXplb2YocGFyYW1fYnVmKSk7
CisJd2hpbGUgKHBoZHIpIHsKKwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJ
cGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisKKwkJaWYgKG9mZnNldCArIHBsZW4g
PiBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHBsZW4gPCBzaXplb2Yoc3RydWN0IHNj
dHBfcGFyYW1oZHIpKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAocHR5cGUgPT0gU0NUUF9TVVBQ
T1JURURfQ0hVTktfRVhUKSB7CisJCQkvKiBBIHN1cHBvcnRlZCBleHRlbnNpb24gY2h1bmsgKi8K
KwkJCXN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVk
OworCQkJdWludDhfdCBsb2NhbF9zdG9yZVtTQ1RQX1NNQUxMX0NIVU5LX1NUT1JFXTsKKwkJCWlu
dCBudW1fZW50LCBpOworCisJCQlpZiAocGxlbiA+IHNpemVvZihsb2NhbF9zdG9yZSkpIHsKKwkJ
CQlicmVhazsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKSZs
b2NhbF9zdG9yZSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsZW4pOworCQkJaWYg
KHBoZHIgPT0gTlVMTCkgeworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJcHJfc3VwcG9ydGVk
ID0gKHN0cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqKXBoZHI7CisJCQlu
dW1fZW50ID0gcGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCQlmb3IgKGkg
PSAwOyBpIDwgbnVtX2VudDsgaSsrKSB7CisJCQkJc3dpdGNoIChwcl9zdXBwb3J0ZWQtPmNodW5r
X3R5cGVzW2ldKSB7CisJCQkJY2FzZSBTQ1RQX0FTQ09ORjoKKwkJCQljYXNlIFNDVFBfQVNDT05G
X0FDSzoKKwkJCQkJcGVlcl9zdXBwb3J0c19hc2NvbmYgPSAxOworCQkJCQlicmVhazsKKwkJCQlk
ZWZhdWx0OgorCQkJCQkvKiBvbmUgd2UgZG9uJ3QgY2FyZSBhYm91dCAqLworCQkJCQlicmVhazsK
KwkJCQl9CisJCQl9CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9SQU5ET00pIHsKKwkJCS8q
IGVuZm9yY2UgdGhlIHJhbmRvbSBsZW5ndGggKi8KKwkJCWlmIChwbGVuICE9IChzaXplb2Yoc3Ry
dWN0IHNjdHBfYXV0aF9yYW5kb20pICsKKwkJCQkgICAgIFNDVFBfQVVUSF9SQU5ET01fU0laRV9S
RVFVSVJFRCkpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkJCSJTQ1RQOiBp
bnZhbGlkIFJBTkRPTSBsZW5cbiIpOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJZ290X3Jh
bmRvbSA9IDE7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXN0
cnVjdCBzY3RwX2F1dGhfaG1hY19hbGdvICpobWFjczsKKwkJCXVpbnQ4X3Qgc3RvcmVbU0NUUF9Q
QVJBTV9CVUZGRVJfU0laRV07CisJCQlpbnQgbnVtX2htYWNzOworCisJCQlpZiAocGxlbiA+IHNp
emVvZihzdG9yZSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0
X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciAqKXN0b3JlLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxl
bik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlo
bWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqKXBoZHI7CisJCQludW1faG1hY3Mg
PSAocGxlbiAtIHNpemVvZigqaG1hY3MpKSAvIHNpemVvZihobWFjcy0+aG1hY19pZHNbMF0pOwor
CQkJLyogdmFsaWRhdGUgdGhlIGhtYWMgbGlzdCAqLworCQkJaWYgKHNjdHBfdmVyaWZ5X2htYWNf
cGFyYW0oaG1hY3MsIG51bV9obWFjcykpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEs
CisJCQkJCSJTQ1RQOiBpbnZhbGlkIEhNQUMgcGFyYW1cbiIpOworCQkJCXJldHVybiAoLTEpOwor
CQkJfQorCQkJZ290X2htYWNzID0gMTsKKwkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX0NIVU5L
X0xJU1QpIHsKKwkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqY2h1bmtzOworCQkJdWlu
dDhfdCBjaHVua3Nfc3RvcmVbU0NUUF9TTUFMTF9DSFVOS19TVE9SRV07CisJCQlpbnQgaSwgbnVt
X2NodW5rczsKKworCQkJaWYgKHBsZW4gPiBzaXplb2YoY2h1bmtzX3N0b3JlKSkgeworCQkJCWJy
ZWFrOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJ
CQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopY2h1bmtzX3N0b3JlLAorCQkJCQkJICAgcGxl
bik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQkv
Ki0KKwkJCSAqIEZsaXAgdGhyb3VnaCB0aGUgbGlzdCBhbmQgbWFyayB0aGF0IHRoZQorCQkJICog
cGVlciBzdXBwb3J0cyBhc2NvbmYvYXNjb25mX2Fjay4KKwkJCSAqLworCQkJY2h1bmtzID0gKHN0
cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKXBoZHI7CisJCQludW1fY2h1bmtzID0gcGxlbiAt
IHNpemVvZigqY2h1bmtzKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBudW1fY2h1bmtzOyBpKyspIHsK
KwkJCQkvKiByZWNvcmQgYXNjb25mL2FzY29uZi1hY2sgaWYgbGlzdGVkICovCisJCQkJaWYgKGNo
dW5rcy0+Y2h1bmtfdHlwZXNbaV0gPT0gU0NUUF9BU0NPTkYpCisJCQkJCXNhd19hc2NvbmYgPSAx
OworCQkJCWlmIChjaHVua3MtPmNodW5rX3R5cGVzW2ldID09IFNDVFBfQVNDT05GX0FDSykKKwkJ
CQkJc2F3X2FzY29uZl9hY2sgPSAxOworCisJCQl9CisJCQlpZiAobnVtX2NodW5rcykKKwkJCQln
b3RfY2hrbGlzdCA9IDE7CisJCX0KKworCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIocGxlbik7CisJ
CWlmIChvZmZzZXQgPj0gbGltaXQpIHsKKwkJCWJyZWFrOworCQl9CisJCXBoZHIgPSBzY3RwX2dl
dF9uZXh0X3BhcmFtKG0sIG9mZnNldCwgJnBhcmFtX2J1ZiwKKwkJICAgIHNpemVvZihwYXJhbV9i
dWYpKTsKKwl9CisJLyogdmFsaWRhdGUgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgcGFyYW1ldGVy
cyAqLworCWlmIChnb3RfcmFuZG9tICYmIGdvdF9obWFjcykgeworCQlwZWVyX3N1cHBvcnRzX2F1
dGggPSAxOworCX0gZWxzZSB7CisJCXBlZXJfc3VwcG9ydHNfYXV0aCA9IDA7CisJfQorCWlmICgh
cGVlcl9zdXBwb3J0c19hdXRoICYmIGdvdF9jaGtsaXN0KSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19BVVRIMSwKKwkJCSJTQ1RQOiBwZWVyIHNlbnQgY2h1bmsgbGlzdCB3L28gQVVUSFxuIik7CisJ
CXJldHVybiAoLTEpOworCX0KKwlpZiAocGVlcl9zdXBwb3J0c19hc2NvbmYgJiYgIXBlZXJfc3Vw
cG9ydHNfYXV0aCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVVUSDEsCisJCQkiU0NUUDogcGVl
ciBzdXBwb3J0cyBBU0NPTkYgYnV0IG5vdCBBVVRIXG4iKTsKKwkJcmV0dXJuICgtMSk7CisJfSBl
bHNlIGlmICgocGVlcl9zdXBwb3J0c19hc2NvbmYpICYmIChwZWVyX3N1cHBvcnRzX2F1dGgpICYm
CisJCSAgICgoc2F3X2FzY29uZiA9PSAwKSB8fCAoc2F3X2FzY29uZl9hY2sgPT0gMCkpKSB7CisJ
CXJldHVybiAoLTIpOworCX0KKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX2luaXRpYWxp
emVfYXV0aF9wYXJhbXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpz
dGNiKQoreworCXVpbnQxNl90IGNodW5rc19sZW4gPSAwOworCXVpbnQxNl90IGhtYWNzX2xlbiA9
IDA7CisJdWludDE2X3QgcmFuZG9tX2xlbiA9IFNDVFBfQVVUSF9SQU5ET01fU0laRV9ERUZBVUxU
OworCXNjdHBfa2V5X3QgKm5ld19rZXk7CisJdWludDE2X3Qga2V5bGVuOworCisJLyogaW5pdGlh
bGl6ZSBobWFjIGxpc3QgZnJvbSBlbmRwb2ludCAqLworCXN0Y2ItPmFzb2MubG9jYWxfaG1hY3Mg
PSBzY3RwX2NvcHlfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwlpZiAoc3Rj
Yi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxMKSB7CisJCWhtYWNzX2xlbiA9IHN0Y2ItPmFzb2Mu
bG9jYWxfaG1hY3MtPm51bV9hbGdvICoKKwkJICAgIHNpemVvZihzdGNiLT5hc29jLmxvY2FsX2ht
YWNzLT5obWFjWzBdKTsKKwl9CisJLyogaW5pdGlhbGl6ZSBhdXRoIGNodW5rcyBsaXN0IGZyb20g
ZW5kcG9pbnQgKi8KKwlzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzID0KKwkgICAgc2N0cF9j
b3B5X2NodW5rbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCWlmIChzdGNi
LT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzICE9IE5VTEwpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9
IDA7IGkgPCAyNTY7IGkrKykgeworCQkJaWYgKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3Mt
PmNodW5rc1tpXSkKKwkJCQljaHVua3NfbGVuKys7CisJCX0KKwl9CisJLyogY29weSBkZWZhdWx0
cyBmcm9tIHRoZSBlbmRwb2ludCAqLworCXN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlk
ID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQ7CisKKwkvKiBjb3B5IG91dCB0aGUgc2hhcmVk
IGtleSBsaXN0IChieSByZWZlcmVuY2UpIGZyb20gdGhlIGVuZHBvaW50ICovCisJKHZvaWQpc2N0
cF9jb3B5X3NrZXlsaXN0KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJCQkJICZzdGNiLT5h
c29jLnNoYXJlZF9rZXlzKTsKKworCS8qIG5vdyBzZXQgdGhlIGNvbmNhdGVuYXRlZCBrZXkgKHJh
bmRvbSArIGNodW5rcyArIGhtYWNzKSAqLworCS8qIGtleSBpbmNsdWRlcyBwYXJhbWV0ZXIgaGVh
ZGVycyAqLworCWtleWxlbiA9ICgzICogc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSkgKyBy
YW5kb21fbGVuICsgY2h1bmtzX2xlbiArCisJICAgIGhtYWNzX2xlbjsKKwluZXdfa2V5ID0gc2N0
cF9hbGxvY19rZXkoa2V5bGVuKTsKKwlpZiAobmV3X2tleSAhPSBOVUxMKSB7CisJCXN0cnVjdCBz
Y3RwX3BhcmFtaGRyICpwaDsKKwkJaW50IHBsZW47CisJCS8qIGdlbmVyYXRlIGFuZCBjb3B5IGlu
IHRoZSBSQU5ET00gKi8KKwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKiluZXdfa2V5LT5r
ZXk7CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9SQU5ET00pOworCQlwbGVuID0gc2l6
ZW9mKCpwaCkgKyByYW5kb21fbGVuOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7
CisJCVNDVFBfUkVBRF9SQU5ET00obmV3X2tleS0+a2V5ICsgc2l6ZW9mKCpwaCksIHJhbmRvbV9s
ZW4pOworCQlrZXlsZW4gPSBwbGVuOworCisJCS8qIGFwcGVuZCBpbiB0aGUgQVVUSCBjaHVua3Mg
Ki8KKwkJLyogTk9URTogY3VycmVudGx5IHdlIGFsd2F5cyBoYXZlIGNodW5rcyB0byBsaXN0ICov
CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG5ld19rZXktPmtleSArIGtleWxlbik7
CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9DSFVOS19MSVNUKTsKKwkJcGxlbiA9IHNp
emVvZigqcGgpICsgY2h1bmtzX2xlbjsKKwkJcGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBsZW4p
OworCQlrZXlsZW4gKz0gc2l6ZW9mKCpwaCk7CisJCWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhf
Y2h1bmtzKSB7CisJCQlpbnQgaTsKKwkJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJ
CWlmIChzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzLT5jaHVua3NbaV0pCisJCQkJCW5ld19r
ZXktPmtleVtrZXlsZW4rK10gPSBpOworCQkJfQorCQl9CisKKwkJLyogYXBwZW5kIGluIHRoZSBI
TUFDcyAqLworCQlwaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShuZXdfa2V5LT5rZXkgKyBr
ZXlsZW4pOworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSE1BQ19MSVNUKTsKKwkJcGxl
biA9IHNpemVvZigqcGgpICsgaG1hY3NfbGVuOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMo
cGxlbik7CisJCWtleWxlbiArPSBzaXplb2YoKnBoKTsKKwkJKHZvaWQpc2N0cF9zZXJpYWxpemVf
aG1hY2xpc3Qoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywKKwkJCQkJbmV3X2tleS0+a2V5ICsga2V5
bGVuKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tICE9IE5VTEwpCisJICAg
IHNjdHBfZnJlZV9rZXkoc3RjYi0+YXNvYy5hdXRoaW5mby5yYW5kb20pOworCXN0Y2ItPmFzb2Mu
YXV0aGluZm8ucmFuZG9tID0gbmV3X2tleTsKKwlzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbV9s
ZW4gPSByYW5kb21fbGVuOworfQorCisKKyNpZmRlZiBTQ1RQX0hNQUNfVEVTVAorLyoKKyAqIEhN
QUMgYW5kIGtleSBjb25jYXRlbmF0aW9uIHRlc3RzCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3By
aW50X2RpZ2VzdCh1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbiwgY29uc3QgY2hh
ciAqc3RyKQoreworCXVpbnQzMl90IGk7CisKKwlTQ1RQX1BSSU5URigiXG4lczogMHgiLCBzdHIp
OworCWlmIChkaWdlc3QgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IGRp
Z2VzdGxlbjsgaSsrKQorCQlTQ1RQX1BSSU5URigiJTAyeCIsIGRpZ2VzdFtpXSk7Cit9CisKK3N0
YXRpYyBpbnQKK3NjdHBfdGVzdF9obWFjKGNvbnN0IGNoYXIgKnN0ciwgdWludDE2X3QgaG1hY19p
ZCwgdWludDhfdCAqa2V5LAorICAgIHVpbnQzMl90IGtleWxlbiwgdWludDhfdCAqdGV4dCwgdWlu
dDMyX3QgdGV4dGxlbiwKKyAgICB1aW50OF90ICpkaWdlc3QsIHVpbnQzMl90IGRpZ2VzdGxlbikK
K3sKKwl1aW50OF90IGNvbXB1dGVkX2RpZ2VzdFtTQ1RQX0FVVEhfRElHRVNUX0xFTl9NQVhdOwor
CisJU0NUUF9QUklOVEYoIlxuJXM6Iiwgc3RyKTsKKwlzY3RwX2htYWMoaG1hY19pZCwga2V5LCBr
ZXlsZW4sIHRleHQsIHRleHRsZW4sIGNvbXB1dGVkX2RpZ2VzdCk7CisJc2N0cF9wcmludF9kaWdl
c3QoZGlnZXN0LCBkaWdlc3RsZW4sICJFeHBlY3RlZCBkaWdlc3QiKTsKKwlzY3RwX3ByaW50X2Rp
Z2VzdChjb21wdXRlZF9kaWdlc3QsIGRpZ2VzdGxlbiwgIkNvbXB1dGVkIGRpZ2VzdCIpOworCWlm
IChtZW1jbXAoZGlnZXN0LCBjb21wdXRlZF9kaWdlc3QsIGRpZ2VzdGxlbikgIT0gMCkgeworCQlT
Q1RQX1BSSU5URigiXG5GQUlMRUQiKTsKKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlIHsKKwkJU0NU
UF9QUklOVEYoIlxuUEFTU0VEIik7CisJCXJldHVybiAoMCk7CisJfQorfQorCisKKy8qCisgKiBS
RkMgMjIwMjogSE1BQy1TSEExIHRlc3QgY2FzZXMKKyAqLwordm9pZAorc2N0cF90ZXN0X2htYWNf
c2hhMSh2b2lkKQoreworCXVpbnQ4X3QgKmRpZ2VzdDsKKwl1aW50OF90IGtleVsxMjhdOworCXVp
bnQzMl90IGtleWxlbjsKKwl1aW50OF90IHRleHRbMTI4XTsKKwl1aW50MzJfdCB0ZXh0bGVuOwor
CXVpbnQzMl90IGRpZ2VzdGxlbiA9IDIwOworCWludCBmYWlsZWQgPSAwOworCisJLyotCisJICog
dGVzdF9jYXNlID0gICAgIDEKKwkgKiBrZXkgPSAgICAgICAgICAgMHgwYjBiMGIwYjBiMGIwYjBi
MGIwYjBiMGIwYjBiMGIwYjBiMGIwYjBiCisJICoga2V5X2xlbiA9ICAgICAgIDIwCisJICogZGF0
YSA9ICAgICAgICAgICJIaSBUaGVyZSIKKwkgKiBkYXRhX2xlbiA9ICAgICAgOAorCSAqIGRpZ2Vz
dCA9ICAgICAgICAweGI2MTczMTg2NTUwNTcyNjRlMjhiYzBiNmZiMzc4YzhlZjE0NmJlMDAKKwkg
Ki8KKwlrZXlsZW4gPSAyMDsKKwltZW1zZXQoa2V5LCAweDBiLCBrZXlsZW4pOworCXRleHRsZW4g
PSA4OworCXN0cmNweSh0ZXh0LCAiSGkgVGhlcmUiKTsKKwlkaWdlc3QgPSAiXHhiNlx4MTdceDMx
XHg4Nlx4NTVceDA1XHg3Mlx4NjRceGUyXHg4Ylx4YzBceGI2XHhmYlx4MzdceDhjXHg4ZVx4ZjFc
eDQ2XHhiZVx4MDAiOworCWlmIChzY3RwX3Rlc3RfaG1hYygiU0hBMSB0ZXN0IGNhc2UgMSIsIFND
VFBfQVVUSF9ITUFDX0lEX1NIQTEsIGtleSwga2V5bGVuLAorCSAgICB0ZXh0LCB0ZXh0bGVuLCBk
aWdlc3QsIGRpZ2VzdGxlbikgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qLQorCSAqIHRlc3RfY2Fz
ZSA9ICAgICAyCisJICoga2V5ID0gICAgICAgICAgICJKZWZlIgorCSAqIGtleV9sZW4gPSAgICAg
ICA0CisJICogZGF0YSA9ICAgICAgICAgICJ3aGF0IGRvIHlhIHdhbnQgZm9yIG5vdGhpbmc/Igor
CSAqIGRhdGFfbGVuID0gICAgICAyOAorCSAqIGRpZ2VzdCA9ICAgICAgICAweGVmZmNkZjZhZTVl
YjJmYTJkMjc0MTZkNWYxODRkZjljMjU5YTdjNzkKKwkgKi8KKwlrZXlsZW4gPSA0OworCXN0cmNw
eShrZXksICJKZWZlIik7CisJdGV4dGxlbiA9IDI4OworCXN0cmNweSh0ZXh0LCAid2hhdCBkbyB5
YSB3YW50IGZvciBub3RoaW5nPyIpOworCWRpZ2VzdCA9ICJceGVmXHhmY1x4ZGZceDZhXHhlNVx4
ZWJceDJmXHhhMlx4ZDJceDc0XHgxNlx4ZDVceGYxXHg4NFx4ZGZceDljXHgyNVx4OWFceDdjXHg3
OSI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSAyIiwgU0NUUF9BVVRIX0hN
QUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGln
ZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNlID0gICAgIDMK
KwkgKiBrZXkgPSAgICAgICAgICAgMHhhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh
YWFhYWFhCisJICoga2V5X2xlbiA9ICAgICAgIDIwCisJICogZGF0YSA9ICAgICAgICAgIDB4ZGQg
cmVwZWF0ZWQgNTAgdGltZXMKKwkgKiBkYXRhX2xlbiA9ICAgICAgNTAKKwkgKiBkaWdlc3QgPSAg
ICAgICAgMHgxMjVkNzM0MmI5YWMxMWNkOTFhMzlhZjQ4YWExN2I0ZjYzZjE3NWQzCisJICovCisJ
a2V5bGVuID0gMjA7CisJbWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKKwl0ZXh0bGVuID0gNTA7
CisJbWVtc2V0KHRleHQsIDB4ZGQsIHRleHRsZW4pOworCWRpZ2VzdCA9ICJceDEyXHg1ZFx4NzNc
eDQyXHhiOVx4YWNceDExXHhjZFx4OTFceGEzXHg5YVx4ZjRceDhhXHhhMVx4N2JceDRmXHg2M1x4
ZjFceDc1XHhkMyI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSAzIiwgU0NU
UF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4sIGRp
Z2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9jYXNl
ID0gICAgIDQKKwkgKiBrZXkgPSAgICAgICAgICAgMHgwMTAyMDMwNDA1MDYwNzA4MDkwYTBiMGMw
ZDBlMGYxMDExMTIxMzE0MTUxNjE3MTgxOQorCSAqIGtleV9sZW4gPSAgICAgICAyNQorCSAqIGRh
dGEgPSAgICAgICAgICAweGNkIHJlcGVhdGVkIDUwIHRpbWVzCisJICogZGF0YV9sZW4gPSAgICAg
IDUwCisJICogZGlnZXN0ID0gICAgICAgIDB4NGM5MDA3ZjQwMjYyNTBjNmJjODQxNGY5YmY1MGM4
NmMyZDcyMzVkYQorCSAqLworCWtleWxlbiA9IDI1OworCW1lbWNweShrZXksICJceDAxXHgwMlx4
MDNceDA0XHgwNVx4MDZceDA3XHgwOFx4MDlceDBhXHgwYlx4MGNceDBkXHgwZVx4MGZceDEwXHgx
MVx4MTJceDEzXHgxNFx4MTVceDE2XHgxN1x4MThceDE5Iiwga2V5bGVuKTsKKwl0ZXh0bGVuID0g
NTA7CisJbWVtc2V0KHRleHQsIDB4Y2QsIHRleHRsZW4pOworCWRpZ2VzdCA9ICJceDRjXHg5MFx4
MDdceGY0XHgwMlx4NjJceDUwXHhjNlx4YmNceDg0XHgxNFx4ZjlceGJmXHg1MFx4YzhceDZjXHgy
ZFx4NzJceDM1XHhkYSI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3QgY2FzZSA0Iiwg
U0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQsIHRleHRsZW4s
IGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJICogdGVzdF9j
YXNlID0gICAgIDUKKwkgKiBrZXkgPSAgICAgICAgICAgMHgwYzBjMGMwYzBjMGMwYzBjMGMwYzBj
MGMwYzBjMGMwYzBjMGMwYzBjCisJICoga2V5X2xlbiA9ICAgICAgIDIwCisJICogZGF0YSA9ICAg
ICAgICAgICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIKKwkgKiBkYXRhX2xlbiA9ICAgICAgMjAKKwkg
KiBkaWdlc3QgPSAgICAgICAgMHg0YzFhMDM0MjRiNTVlMDdmZTdmMjdiZTFkNThiYjkzMjRhOWE1
YTA0CisJICogZGlnZXN0LTk2ID0gICAgIDB4NGMxYTAzNDI0YjU1ZTA3ZmU3ZjI3YmUxCisJICov
CisJa2V5bGVuID0gMjA7CisJbWVtc2V0KGtleSwgMHgwYywga2V5bGVuKTsKKwl0ZXh0bGVuID0g
MjA7CisJc3RyY3B5KHRleHQsICJUZXN0IFdpdGggVHJ1bmNhdGlvbiIpOworCWRpZ2VzdCA9ICJc
eDRjXHgxYVx4MDNceDQyXHg0Ylx4NTVceGUwXHg3Zlx4ZTdceGYyXHg3Ylx4ZTFceGQ1XHg4Ylx4
YjlceDMyXHg0YVx4OWFceDVhXHgwNCI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJTSEExIHRlc3Qg
Y2FzZSA1IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJICAgIHRleHQs
IHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOworCisJLyotCisJ
ICogdGVzdF9jYXNlID0gICAgIDYKKwkgKiBrZXkgPSAgICAgICAgICAgMHhhYSByZXBlYXRlZCA4
MCB0aW1lcworCSAqIGtleV9sZW4gPSAgICAgICA4MAorCSAqIGRhdGEgPSAgICAgICAgICAiVGVz
dCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSAtIEhhc2ggS2V5IEZpcnN0IgorCSAq
IGRhdGFfbGVuID0gICAgICA1NAorCSAqIGRpZ2VzdCA9ICAgICAgICAweGFhNGFlNWUxNTI3MmQw
MGU5NTcwNTYzN2NlOGEzYjU1ZWQ0MDIxMTIKKwkgKi8KKwlrZXlsZW4gPSA4MDsKKwltZW1zZXQo
a2V5LCAweGFhLCBrZXlsZW4pOworCXRleHRsZW4gPSA1NDsKKwlzdHJjcHkodGV4dCwgIlRlc3Qg
VXNpbmcgTGFyZ2VyIFRoYW4gQmxvY2stU2l6ZSBLZXkgLSBIYXNoIEtleSBGaXJzdCIpOworCWRp
Z2VzdCA9ICJceGFhXHg0YVx4ZTVceGUxXHg1Mlx4NzJceGQwXHgwZVx4OTVceDcwXHg1Nlx4Mzdc
eGNlXHg4YVx4M2JceDU1XHhlZFx4NDBceDIxXHgxMiI7CisJaWYgKHNjdHBfdGVzdF9obWFjKCJT
SEExIHRlc3QgY2FzZSA2IiwgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSwga2V5LCBrZXlsZW4sCisJ
ICAgIHRleHQsIHRleHRsZW4sIGRpZ2VzdCwgZGlnZXN0bGVuKSA8IDApCisJCWZhaWxlZCsrOwor
CisJLyotCisJICogdGVzdF9jYXNlID0gICAgIDcKKwkgKiBrZXkgPSAgICAgICAgICAgMHhhYSBy
ZXBlYXRlZCA4MCB0aW1lcworCSAqIGtleV9sZW4gPSAgICAgICA4MAorCSAqIGRhdGEgPSAgICAg
ICAgICAiVGVzdCBVc2luZyBMYXJnZXIgVGhhbiBCbG9jay1TaXplIEtleSBhbmQgTGFyZ2VyIFRo
YW4gT25lIEJsb2NrLVNpemUgRGF0YSIKKwkgKiBkYXRhX2xlbiA9ICAgICAgNzMKKwkgKiBkaWdl
c3QgPSAgICAgICAgMHhlOGU5OWQwZjQ1MjM3ZDc4NmQ2YmJhYTc5NjVjNzgwOGJiZmYxYTkxCisJ
ICovCisJa2V5bGVuID0gODA7CisJbWVtc2V0KGtleSwgMHhhYSwga2V5bGVuKTsKKwl0ZXh0bGVu
ID0gNzM7CisJc3RyY3B5KHRleHQsICJUZXN0IFVzaW5nIExhcmdlciBUaGFuIEJsb2NrLVNpemUg
S2V5IGFuZCBMYXJnZXIgVGhhbiBPbmUgQmxvY2stU2l6ZSBEYXRhIik7CisJZGlnZXN0ID0gIlx4
ZThceGU5XHg5ZFx4MGZceDQ1XHgyM1x4N2RceDc4XHg2ZFx4NmJceGJhXHhhN1x4OTZceDVjXHg3
OFx4MDhceGJiXHhmZlx4MWFceDkxIjsKKwlpZiAoc2N0cF90ZXN0X2htYWMoIlNIQTEgdGVzdCBj
YXNlIDciLCBTQ1RQX0FVVEhfSE1BQ19JRF9TSEExLCBrZXksIGtleWxlbiwKKwkgICAgdGV4dCwg
dGV4dGxlbiwgZGlnZXN0LCBkaWdlc3RsZW4pIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiBkb25l
IHdpdGggYWxsIHRlc3RzICovCisJaWYgKGZhaWxlZCkKKwkJU0NUUF9QUklOVEYoIlxuU0hBMSB0
ZXN0IHJlc3VsdHM6ICVkIGNhc2VzIGZhaWxlZCIsIGZhaWxlZCk7CisJZWxzZQorCQlTQ1RQX1BS
SU5URigiXG5TSEExIHRlc3QgcmVzdWx0czogYWxsIHRlc3QgY2FzZXMgcGFzc2VkIik7Cit9CisK
Ky8qCisgKiB0ZXN0IGFzc29jIGtleSBjb25jYXRlbmF0aW9uCisgKi8KK3N0YXRpYyBpbnQKK3Nj
dHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihzY3RwX2tleV90ICprZXkxLCBzY3RwX2tleV90ICpr
ZXkyLAorICAgIHNjdHBfa2V5X3QgKmV4cGVjdGVkX2tleSkKK3sKKwlzY3RwX2tleV90ICprZXk7
CisJaW50IHJldF92YWw7CisKKwlzY3RwX3Nob3dfa2V5KGtleTEsICJcbmtleTEiKTsKKwlzY3Rw
X3Nob3dfa2V5KGtleTIsICJcbmtleTIiKTsKKwlrZXkgPSBzY3RwX2NvbXB1dGVfaGFzaGtleShr
ZXkxLCBrZXkyLCBOVUxMKTsKKwlzY3RwX3Nob3dfa2V5KGV4cGVjdGVkX2tleSwgIlxuRXhwZWN0
ZWQiKTsKKwlzY3RwX3Nob3dfa2V5KGtleSwgIlxuQ29tcHV0ZWQiKTsKKwlpZiAobWVtY21wKGtl
eSwgZXhwZWN0ZWRfa2V5LCBleHBlY3RlZF9rZXktPmtleWxlbikgIT0gMCkgeworCQlTQ1RQX1BS
SU5URigiXG5GQUlMRUQiKTsKKwkJcmV0X3ZhbCA9IC0xOworCX0gZWxzZSB7CisJCVNDVFBfUFJJ
TlRGKCJcblBBU1NFRCIpOworCQlyZXRfdmFsID0gMDsKKwl9CisJc2N0cF9mcmVlX2tleShrZXkx
KTsKKwlzY3RwX2ZyZWVfa2V5KGtleTIpOworCXNjdHBfZnJlZV9rZXkoZXhwZWN0ZWRfa2V5KTsK
KwlzY3RwX2ZyZWVfa2V5KGtleSk7CisJcmV0dXJuIChyZXRfdmFsKTsKK30KKworCit2b2lkCitz
Y3RwX3Rlc3RfYXV0aGtleSh2b2lkKQoreworCXNjdHBfa2V5X3QgKmtleTEsICprZXkyLCAqZXhw
ZWN0ZWRfa2V5OworCWludCBmYWlsZWQgPSAwOworCisJLyogdGVzdCBjYXNlIDEgKi8KKwlrZXkx
ID0gc2N0cF9zZXRfa2V5KCJceDAxXHgwMVx4MDFceDAxIiwgNCk7CisJa2V5MiA9IHNjdHBfc2V0
X2tleSgiXHgwMVx4MDJceDAzXHgwNCIsIDQpOworCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tl
eSgiXHgwMVx4MDFceDAxXHgwMVx4MDFceDAyXHgwM1x4MDQiLCA4KTsKKwlpZiAoc2N0cF90ZXN0
X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVkX2tleSkgPCAwKQorCQlmYWls
ZWQrKzsKKworCS8qIHRlc3QgY2FzZSAyICovCisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4
MDBceDAwXHgwMSIsIDQpOworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDIiLCAxKTsKKwlleHBl
Y3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDFceDAyIiwgNSk7CisJaWYg
KHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlvbihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwg
MCkKKwkJZmFpbGVkKys7CisKKwkvKiB0ZXN0IGNhc2UgMyAqLworCWtleTEgPSBzY3RwX3NldF9r
ZXkoIlx4MDEiLCAxKTsKKwlrZXkyID0gc2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAyIiwg
NCk7CisJZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJceDAxXHgwMFx4MDBceDAwXHgwMiIs
IDUpOworCWlmIChzY3RwX3Rlc3Rfa2V5X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0
ZWRfa2V5KSA8IDApCisJCWZhaWxlZCsrOworCisJLyogdGVzdCBjYXNlIDQgKi8KKwlrZXkxID0g
c2N0cF9zZXRfa2V5KCJceDAwXHgwMFx4MDBceDAxIiwgNCk7CisJa2V5MiA9IHNjdHBfc2V0X2tl
eSgiXHgwMSIsIDEpOworCWV4cGVjdGVkX2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMVx4MDBceDAw
XHgwMFx4MDEiLCA1KTsKKwlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtl
eTIsIGV4cGVjdGVkX2tleSkgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qIHRlc3QgY2FzZSA1ICov
CisJa2V5MSA9IHNjdHBfc2V0X2tleSgiXHgwMSIsIDEpOworCWtleTIgPSBzY3RwX3NldF9rZXko
Ilx4MDBceDAwXHgwMFx4MDEiLCA0KTsKKwlleHBlY3RlZF9rZXkgPSBzY3RwX3NldF9rZXkoIlx4
MDFceDAwXHgwMFx4MDBceDAxIiwgNSk7CisJaWYgKHNjdHBfdGVzdF9rZXlfY29uY2F0ZW5hdGlv
bihrZXkxLCBrZXkyLCBleHBlY3RlZF9rZXkpIDwgMCkKKwkJZmFpbGVkKys7CisKKwkvKiB0ZXN0
IGNhc2UgNiAqLworCWtleTEgPSBzY3RwX3NldF9rZXkoIlx4MDBceDAwXHgwMFx4MDBceDAxXHgw
Mlx4MDNceDA0XHgwNVx4MDZceDA3IiwgMTEpOworCWtleTIgPSBzY3RwX3NldF9rZXkoIlx4MDBc
eDAwXHgwMFx4MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA4IiwgMTEpOworCWV4cGVjdGVk
X2tleSA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1
XHgwNlx4MDdceDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwOCIsIDIy
KTsKKwlpZiAoc2N0cF90ZXN0X2tleV9jb25jYXRlbmF0aW9uKGtleTEsIGtleTIsIGV4cGVjdGVk
X2tleSkgPCAwKQorCQlmYWlsZWQrKzsKKworCS8qIHRlc3QgY2FzZSA3ICovCisJa2V5MSA9IHNj
dHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgwM1x4MDRceDA1XHgwNlx4MDgi
LCAxMSk7CisJa2V5MiA9IHNjdHBfc2V0X2tleSgiXHgwMFx4MDBceDAwXHgwMFx4MDFceDAyXHgw
M1x4MDRceDA1XHgwNlx4MDciLCAxMSk7CisJZXhwZWN0ZWRfa2V5ID0gc2N0cF9zZXRfa2V5KCJc
eDAwXHgwMFx4MDBceDAwXHgwMVx4MDJceDAzXHgwNFx4MDVceDA2XHgwN1x4MDBceDAwXHgwMFx4
MDBceDAxXHgwMlx4MDNceDA0XHgwNVx4MDZceDA4IiwgMjIpOworCWlmIChzY3RwX3Rlc3Rfa2V5
X2NvbmNhdGVuYXRpb24oa2V5MSwga2V5MiwgZXhwZWN0ZWRfa2V5KSA8IDApCisJCWZhaWxlZCsr
OworCisJLyogZG9uZSB3aXRoIGFsbCB0ZXN0cyAqLworCWlmIChmYWlsZWQpCisJCVNDVFBfUFJJ
TlRGKCJcbktleSBjb25jYXRlbmF0aW9uIHRlc3QgcmVzdWx0czogJWQgY2FzZXMgZmFpbGVkIiwg
ZmFpbGVkKTsKKwllbHNlCisJCVNDVFBfUFJJTlRGKCJcbktleSBjb25jYXRlbmF0aW9uIHRlc3Qg
cmVzdWx0czogYWxsIHRlc3QgY2FzZXMgcGFzc2VkIik7Cit9CisKKworI2lmIGRlZmluZWQoU1RB
TkRBTE9ORV9ITUFDX1RFU1QpCitpbnQKK21haW4odm9pZCkKK3sKKwlzY3RwX3Rlc3RfaG1hY19z
aGExKCk7CisJc2N0cF90ZXN0X2F1dGhrZXkoKTsKK30KKworI2VuZGlmIC8qIFNUQU5EQUxPTkVf
SE1BQ19URVNUICovCisKKyNlbmRpZiAvKiBTQ1RQX0hNQUNfVEVTVCAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5oIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfYXV0aC5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3
NWFkOGMyZTQ4YzUzOTEuLmMxZjgyZDg4MjVhNGQ4MDIzZmU0YWRiMzAxZGY0OTc2NDZhYzgwOGMg
MTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2F1dGguaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9hdXRoLmgKQEAgLTAsMCArMSwyMTgg
QEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAq
IENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3
YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisg
KiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9f
RnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhl
YWQvc3lzL25ldGluZXQvc2N0cF9hdXRoLmggMzEwNTkwIDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1
ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0FVVEhfSF8KKyNkZWZp
bmUgX05FVElORVRfU0NUUF9BVVRIX0hfCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4K
KworLyogZGlnZXN0IGxlbmd0aHMgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX0RJR0VTVF9MRU5fU0hB
MQkyMAorI2RlZmluZSBTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEEyNTYJMzIKKyNkZWZpbmUgU0NU
UF9BVVRIX0RJR0VTVF9MRU5fTUFYCVNDVFBfQVVUSF9ESUdFU1RfTEVOX1NIQTI1NgorCisvKiBy
YW5kb20gc2l6ZXMgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX0RFRkFVTFQJMzIK
KyNkZWZpbmUgU0NUUF9BVVRIX1JBTkRPTV9TSVpFX1JFUVVJUkVECTMyCisKKy8qIHVuaW9uIG9m
IGFsbCBzdXBwb3J0ZWQgSE1BQyBhbGdvcml0aG0gY29udGV4dHMgKi8KK3R5cGVkZWYgdW5pb24g
c2N0cF9oYXNoX2NvbnRleHQgeworCVNDVFBfU0hBMV9DVFggc2hhMTsKKyNpZiBkZWZpbmVkKFND
VFBfU1VQUE9SVF9ITUFDX1NIQTI1NikKKwlTQ1RQX1NIQTI1Nl9DVFggc2hhMjU2OworI2VuZGlm
Cit9IHNjdHBfaGFzaF9jb250ZXh0X3Q7CisKK3R5cGVkZWYgc3RydWN0IHNjdHBfa2V5IHsKKwl1
aW50MzJfdCBrZXlsZW47CisJdWludDhfdCBrZXlbXTsKK30gc2N0cF9rZXlfdDsKKwordHlwZWRl
ZiBzdHJ1Y3Qgc2N0cF9zaGFyZWRfa2V5IHsKKwlMSVNUX0VOVFJZKHNjdHBfc2hhcmVkX2tleSkg
bmV4dDsKKwlzY3RwX2tleV90ICprZXk7CS8qIGtleSB0ZXh0ICovCisJdWludDMyX3QgcmVmY291
bnQ7CS8qIHJlZmVyZW5jZSBjb3VudCAqLworCXVpbnQxNl90IGtleWlkOwkJLyogc2hhcmVkIGtl
eSBJRCAqLworCXVpbnQ4X3QgZGVhY3RpdmF0ZWQ7CS8qIGtleSBpcyBkZWFjdGl2YXRlZCAqLwor
fSBzY3RwX3NoYXJlZGtleV90OworCitMSVNUX0hFQUQoc2N0cF9rZXloZWFkLCBzY3RwX3NoYXJl
ZF9rZXkpOworCisvKiBhdXRoZW50aWNhdGlvbiBjaHVua3MgbGlzdCAqLwordHlwZWRlZiBzdHJ1
Y3Qgc2N0cF9hdXRoX2Noa2xpc3QgeworCXVpbnQ4X3QgY2h1bmtzWzI1Nl07CisJdWludDhfdCBu
dW1fY2h1bmtzOworfSBzY3RwX2F1dGhfY2hrbGlzdF90OworCisvKiBobWFjIGFsZ29zIHN1cHBv
cnRlZCBsaXN0ICovCit0eXBlZGVmIHN0cnVjdCBzY3RwX2htYWNsaXN0IHsKKwl1aW50MTZfdCBt
YXhfYWxnbzsJLyogbWF4IGFsZ29yaXRobXMgYWxsb2NhdGVkICovCisJdWludDE2X3QgbnVtX2Fs
Z287CS8qIG51bSBhbGdvcml0aG1zIHVzZWQgKi8KKwl1aW50MTZfdCBobWFjW107Cit9IHNjdHBf
aG1hY2xpc3RfdDsKKworLyogYXV0aGVudGljYXRpb24gaW5mbyAqLwordHlwZWRlZiBzdHJ1Y3Qg
c2N0cF9hdXRoaW5mb3JtYXRpb24geworCXNjdHBfa2V5X3QgKnJhbmRvbTsJLyogbG9jYWwgcmFu
ZG9tIGtleSAoY29uY2F0ZW5hdGVkKSAqLworCXVpbnQzMl90IHJhbmRvbV9sZW47CS8qIGxvY2Fs
IHJhbmRvbSBudW1iZXIgbGVuZ3RoIGZvciBwYXJhbSAqLworCXNjdHBfa2V5X3QgKnBlZXJfcmFu
ZG9tOy8qIHBlZXIncyByYW5kb20ga2V5IChjb25jYXRlbmF0ZWQpICovCisJc2N0cF9rZXlfdCAq
YXNzb2Nfa2V5OwkvKiBjYWNoZWQgY29uY2F0ZW5hdGVkIHNlbmQga2V5ICovCisJc2N0cF9rZXlf
dCAqcmVjdl9rZXk7CS8qIGNhY2hlZCBjb25jYXRlbmF0ZWQgcmVjdiBrZXkgKi8KKwl1aW50MTZf
dCBhY3RpdmVfa2V5aWQ7CS8qIGFjdGl2ZSBzZW5kIGtleWlkICovCisJdWludDE2X3QgYXNzb2Nf
a2V5aWQ7CS8qIGN1cnJlbnQgc2VuZCBrZXlpZCAoY2FjaGVkKSAqLworCXVpbnQxNl90IHJlY3Zf
a2V5aWQ7CS8qIGxhc3QgcmVjdiBrZXlpZCAoY2FjaGVkKSAqLworfSBzY3RwX2F1dGhpbmZvX3Q7
CisKKworCisvKgorICogTWFjcm9zCisgKi8KKyNkZWZpbmUgc2N0cF9hdXRoX2lzX3JlcXVpcmVk
X2NodW5rKGNodW5rLCBsaXN0KSAoKGxpc3QgPT0gTlVMTCkgPyAoMCkgOiAobGlzdC0+Y2h1bmtz
W2NodW5rXSAhPSAwKSkKKworLyoKKyAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAqLworCisvKiBz
b2NrZXQgb3B0aW9uIGFwaSBmdW5jdGlvbnMgKi8KK2V4dGVybiBzY3RwX2F1dGhfY2hrbGlzdF90
ICpzY3RwX2FsbG9jX2NodW5rbGlzdCh2b2lkKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9jaHVu
a2xpc3Qoc2N0cF9hdXRoX2Noa2xpc3RfdCAqY2hrbGlzdCk7CitleHRlcm4gdm9pZCBzY3RwX2Ns
ZWFyX2NodW5rbGlzdChzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0KTsKK2V4dGVybiBzY3Rw
X2F1dGhfY2hrbGlzdF90ICpzY3RwX2NvcHlfY2h1bmtsaXN0KHNjdHBfYXV0aF9jaGtsaXN0X3Qg
KmNoa2xpc3QpOworZXh0ZXJuIGludCBzY3RwX2F1dGhfYWRkX2NodW5rKHVpbnQ4X3QgY2h1bmss
IHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOworZXh0ZXJuIGludCBzY3RwX2F1dGhfZGVsZXRl
X2NodW5rKHVpbnQ4X3QgY2h1bmssIHNjdHBfYXV0aF9jaGtsaXN0X3QgKmxpc3QpOworZXh0ZXJu
IHNpemVfdCBzY3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShjb25zdCBzY3RwX2F1dGhfY2hrbGlz
dF90ICpsaXN0KTsKK2V4dGVybiBpbnQgc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY29uc3Qg
c2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwKKyAgICB1aW50OF90ICpwdHIpOworZXh0ZXJuIGlu
dCBzY3RwX3BhY2tfYXV0aF9jaHVua3MoY29uc3Qgc2N0cF9hdXRoX2Noa2xpc3RfdCAqbGlzdCwK
KyAgICB1aW50OF90ICpwdHIpOworZXh0ZXJuIGludCBzY3RwX3VucGFja19hdXRoX2NodW5rcyhj
b25zdCB1aW50OF90ICpwdHIsIHVpbnQ4X3QgbnVtX2NodW5rcywKKyAgICBzY3RwX2F1dGhfY2hr
bGlzdF90ICpsaXN0KTsKKworLyoga2V5IGhhbmRsaW5nICovCitleHRlcm4gc2N0cF9rZXlfdCAq
c2N0cF9hbGxvY19rZXkodWludDMyX3Qga2V5bGVuKTsKK2V4dGVybiB2b2lkIHNjdHBfZnJlZV9r
ZXkoc2N0cF9rZXlfdCAqa2V5KTsKK2V4dGVybiB2b2lkIHNjdHBfcHJpbnRfa2V5KHNjdHBfa2V5
X3QgKmtleSwgY29uc3QgY2hhciAqc3RyKTsKK2V4dGVybiB2b2lkIHNjdHBfc2hvd19rZXkoc2N0
cF9rZXlfdCAqa2V5LCBjb25zdCBjaGFyICpzdHIpOworZXh0ZXJuIHNjdHBfa2V5X3QgKnNjdHBf
Z2VuZXJhdGVfcmFuZG9tX2tleSh1aW50MzJfdCBrZXlsZW4pOworZXh0ZXJuIHNjdHBfa2V5X3Qg
KnNjdHBfc2V0X2tleSh1aW50OF90ICprZXksIHVpbnQzMl90IGtleWxlbik7CitleHRlcm4gc2N0
cF9rZXlfdCAqc2N0cF9jb21wdXRlX2hhc2hrZXkoc2N0cF9rZXlfdCAqa2V5MSwgc2N0cF9rZXlf
dCAqa2V5MiwKKyAgICBzY3RwX2tleV90ICpzaGFyZWQpOworCisvKiBzaGFyZWQga2V5IGhhbmRs
aW5nICovCitleHRlcm4gc2N0cF9zaGFyZWRrZXlfdCAqc2N0cF9hbGxvY19zaGFyZWRrZXkodm9p
ZCk7CitleHRlcm4gdm9pZCBzY3RwX2ZyZWVfc2hhcmVka2V5KHNjdHBfc2hhcmVka2V5X3QgKnNr
ZXkpOworZXh0ZXJuIHNjdHBfc2hhcmVka2V5X3QgKnNjdHBfZmluZF9zaGFyZWRrZXkoc3RydWN0
IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXMsCisgICAgdWludDE2X3Qga2V5X2lkKTsKK2V4dGVy
biBpbnQgc2N0cF9pbnNlcnRfc2hhcmVka2V5KHN0cnVjdCBzY3RwX2tleWhlYWQgKnNoYXJlZF9r
ZXlzLAorICAgIHNjdHBfc2hhcmVka2V5X3QgKm5ld19za2V5KTsKK2V4dGVybiBpbnQgc2N0cF9j
b3B5X3NrZXlsaXN0KGNvbnN0IHN0cnVjdCBzY3RwX2tleWhlYWQgKnNyYywKKyAgICBzdHJ1Y3Qg
c2N0cF9rZXloZWFkICpkZXN0KTsKKy8qIHJlZiBjb3VudHMgb24gc2hhcmVkIGtleXMsIGJ5IGtl
eSBpZCAqLworZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9hY3F1aXJlKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOworZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2tleV9yZWxl
YXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQsCisgICAgaW50IHNvX2xv
Y2tlZCk7CisKKworLyogaG1hYyBsaXN0IGhhbmRsaW5nICovCitleHRlcm4gc2N0cF9obWFjbGlz
dF90ICpzY3RwX2FsbG9jX2htYWNsaXN0KHVpbnQxNl90IG51bV9obWFjcyk7CitleHRlcm4gdm9p
ZCBzY3RwX2ZyZWVfaG1hY2xpc3Qoc2N0cF9obWFjbGlzdF90ICpsaXN0KTsKK2V4dGVybiBpbnQg
c2N0cF9hdXRoX2FkZF9obWFjaWQoc2N0cF9obWFjbGlzdF90ICpsaXN0LCB1aW50MTZfdCBobWFj
X2lkKTsKK2V4dGVybiBzY3RwX2htYWNsaXN0X3QgKnNjdHBfY29weV9obWFjbGlzdChzY3RwX2ht
YWNsaXN0X3QgKmxpc3QpOworZXh0ZXJuIHNjdHBfaG1hY2xpc3RfdCAqc2N0cF9kZWZhdWx0X3N1
cHBvcnRlZF9obWFjbGlzdCh2b2lkKTsKK2V4dGVybiB1aW50MTZfdCBzY3RwX25lZ290aWF0ZV9o
bWFjaWQoc2N0cF9obWFjbGlzdF90ICpwZWVyLAorICAgIHNjdHBfaG1hY2xpc3RfdCAqbG9jYWwp
OworZXh0ZXJuIGludCBzY3RwX3NlcmlhbGl6ZV9obWFjbGlzdChzY3RwX2htYWNsaXN0X3QgKmxp
c3QsIHVpbnQ4X3QgKnB0cik7CitleHRlcm4gaW50IHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0oc3Ry
dWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzLAorICAgIHVpbnQzMl90IG51bV9obWFjcyk7
CisKK2V4dGVybiBzY3RwX2F1dGhpbmZvX3QgKnNjdHBfYWxsb2NfYXV0aGluZm8odm9pZCk7Citl
eHRlcm4gdm9pZCBzY3RwX2ZyZWVfYXV0aGluZm8oc2N0cF9hdXRoaW5mb190ICphdXRoaW5mbyk7
CisKKy8qIGtleWVkLUhNQUMgZnVuY3Rpb25zICovCitleHRlcm4gdWludDMyX3Qgc2N0cF9nZXRf
YXV0aF9jaHVua19sZW4odWludDE2X3QgaG1hY19hbGdvKTsKK2V4dGVybiB1aW50MzJfdCBzY3Rw
X2dldF9obWFjX2RpZ2VzdF9sZW4odWludDE2X3QgaG1hY19hbGdvKTsKK2V4dGVybiB1aW50MzJf
dCBzY3RwX2htYWModWludDE2X3QgaG1hY19hbGdvLCB1aW50OF90ICprZXksIHVpbnQzMl90IGtl
eWxlbiwKKyAgICB1aW50OF90ICp0ZXh0LCB1aW50MzJfdCB0ZXh0bGVuLCB1aW50OF90ICpkaWdl
c3QpOworZXh0ZXJuIGludCBzY3RwX3ZlcmlmeV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgdWlu
dDhfdCAqa2V5LCB1aW50MzJfdCBrZXlsZW4sCisgICAgdWludDhfdCAqdGV4dCwgdWludDMyX3Qg
dGV4dGxlbiwgdWludDhfdCAqZGlnZXN0LCB1aW50MzJfdCBkaWdlc3RsZW4pOworZXh0ZXJuIHVp
bnQzMl90IHNjdHBfY29tcHV0ZV9obWFjKHVpbnQxNl90IGhtYWNfYWxnbywgc2N0cF9rZXlfdCAq
a2V5LAorICAgIHVpbnQ4X3QgKnRleHQsIHVpbnQzMl90IHRleHRsZW4sIHVpbnQ4X3QgKmRpZ2Vz
dCk7CitleHRlcm4gaW50IHNjdHBfYXV0aF9pc19zdXBwb3J0ZWRfaG1hYyhzY3RwX2htYWNsaXN0
X3QgKmxpc3QsIHVpbnQxNl90IGlkKTsKKworLyogbWJ1ZiB2ZXJzaW9ucyAqLworZXh0ZXJuIHVp
bnQzMl90IHNjdHBfaG1hY19tKHVpbnQxNl90IGhtYWNfYWxnbywgdWludDhfdCAqa2V5LCB1aW50
MzJfdCBrZXlsZW4sCisgICAgc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50
OF90ICpkaWdlc3QsIHVpbnQzMl90IHRyYWlsZXIpOworZXh0ZXJuIHVpbnQzMl90IHNjdHBfY29t
cHV0ZV9obWFjX20odWludDE2X3QgaG1hY19hbGdvLCBzY3RwX2tleV90ICprZXksCisgICAgc3Ry
dWN0IG1idWYgKm0sIHVpbnQzMl90IG1fb2Zmc2V0LCB1aW50OF90ICpkaWdlc3QpOworCisvKgor
ICogYXV0aGVudGljYXRpb24gcm91dGluZXMKKyAqLworZXh0ZXJuIHZvaWQgc2N0cF9jbGVhcl9j
YWNoZWRrZXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOworZXh0ZXJu
IHZvaWQgc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVp
bnQxNl90IGtleWlkKTsKK2V4dGVybiBpbnQgc2N0cF9kZWxldGVfc2hhcmVka2V5KHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5aWQpOworZXh0ZXJuIGludCBzY3RwX2RlbGV0ZV9z
aGFyZWRrZXlfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgdWludDE2X3Qga2V5aWQpOworZXh0
ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWlu
dDE2X3Qga2V5aWQpOworZXh0ZXJuIGludCBzY3RwX2F1dGhfc2V0YWN0aXZla2V5X2VwKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGtleWlkKTsKK2V4dGVybiBpbnQgc2N0cF9kZWFj
dF9zaGFyZWRrZXkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZfdCBrZXlpZCk7CitleHRl
cm4gaW50IHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVp
bnQxNl90IGtleWlkKTsKKworZXh0ZXJuIHZvaWQgc2N0cF9hdXRoX2dldF9jb29raWVfcGFyYW1z
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm0sCisgICAgdWludDMyX3Qgb2Zm
c2V0LCB1aW50MzJfdCBsZW5ndGgpOworZXh0ZXJuIHZvaWQgc2N0cF9maWxsX2htYWNfZGlnZXN0
X20oc3RydWN0IG1idWYgKm0sIHVpbnQzMl90IGF1dGhfb2Zmc2V0LAorICAgIHN0cnVjdCBzY3Rw
X2F1dGhfY2h1bmsgKmF1dGgsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qga2V5X2lk
KTsKK2V4dGVybiBzdHJ1Y3QgbWJ1ZiAqc2N0cF9hZGRfYXV0aF9jaHVuayhzdHJ1Y3QgbWJ1ZiAq
bSwgc3RydWN0IG1idWYgKiptX2VuZCwKKyAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICoqYXV0
aF9yZXQsIHVpbnQzMl90ICpvZmZzZXQsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
OF90IGNodW5rKTsKK2V4dGVybiBpbnQgc2N0cF9oYW5kbGVfYXV0aChzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKmNoLAorICAgIHN0cnVjdCBtYnVmICptLCB1
aW50MzJfdCBvZmZzZXQpOworZXh0ZXJuIHZvaWQgc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24o
c3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHVpbnQzMl90IGluZGljYXRpb24sIHVpbnQxNl90
IGtleWlkLCB1aW50MTZfdCBhbHRfa2V5aWQsIGludCBzb19sb2NrZWQpOworZXh0ZXJuIGludCBz
Y3RwX3ZhbGlkYXRlX2luaXRfYXV0aF9wYXJhbXMoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQs
CisgICAgaW50IGxpbWl0KTsKK2V4dGVybiB2b2lkIHNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFt
cyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7CisK
Ky8qIHRlc3QgZnVuY3Rpb25zICovCisjaWZkZWYgU0NUUF9ITUFDX1RFU1QKK2V4dGVybiB2b2lk
IHNjdHBfdGVzdF9obWFjX3NoYTEodm9pZCk7CitleHRlcm4gdm9pZCBzY3RwX3Rlc3RfYXV0aGtl
eSh2b2lkKTsKKyNlbmRpZgorI2VuZGlmIC8qIF9fU0NUUF9BVVRIX0hfXyAqLwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfYnNkX2FkZHIuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0
MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZTNiNmUxYjZkZTdlZGMwZjFiYWYyZTVlNWY0MzY4
YmVkM2E4MDk0YiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBf
YnNkX2FkZHIuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRk
ci5jCkBAIC0wLDAgKzEsMTAxMiBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog
QlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5
c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVt
cywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2JzZF9hZGRyLmMgMzMzODEz
IDIwMTgtMDUtMTggMjA6MTM6MzRaIG1tYWN5ICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRw
dXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfdWlvLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X2luZGF0YS5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL3VuaXN0
ZC5oPgorI2VuZGlmCisKKy8qIERlY2xhcmUgYWxsIG9mIG91ciBtYWxsb2MgbmFtZWQgdHlwZXMg
Ki8KKyNpZm5kZWYgX19QYW5kYV9fCitNQUxMT0NfREVGSU5FKFNDVFBfTV9NQVAsICJzY3RwX21h
cCIsICJzY3RwIGFzb2MgbWFwIGRlc2NyaXB0b3IiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX1NU
Uk1JLCAic2N0cF9zdHJpIiwgInNjdHAgc3RyZWFtIGluIGFycmF5Iik7CitNQUxMT0NfREVGSU5F
KFNDVFBfTV9TVFJNTywgInNjdHBfc3RybyIsICJzY3RwIHN0cmVhbSBvdXQgYXJyYXkiKTsKK01B
TExPQ19ERUZJTkUoU0NUUF9NX0FTQ19BRERSLCAic2N0cF9hYWRyIiwgInNjdHAgYXNjb25mIGFk
ZHJlc3MiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0FTQ19JVCwgInNjdHBfYV9pdCIsICJzY3Rw
IGFzY29uZiBpdGVyYXRvciIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQVVUSF9DTCwgInNjdHBf
YXRjbCIsICJzY3RwIGF1dGggY2h1bmtsaXN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9BVVRI
X0tZLCAic2N0cF9hdGt5IiwgInNjdHAgYXV0aCBrZXkiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9N
X0FVVEhfSEwsICJzY3RwX2F0aG0iLCAic2N0cCBhdXRoIGhtYWMgbGlzdCIpOworTUFMTE9DX0RF
RklORShTQ1RQX01fQVVUSF9JRiwgInNjdHBfYXRoaSIsICJzY3RwIGF1dGggaW5mbyIpOworTUFM
TE9DX0RFRklORShTQ1RQX01fU1RSRVNFVCwgInNjdHBfc3RyZSIsICJzY3RwIHN0cmVhbSByZXNl
dCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fQ01TRywgInNjdHBfY21zZyIsICJzY3RwIENNU0cg
YnVmZmVyIik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9DT1BZQUwsICJzY3RwX2NwYWwiLCAic2N0
cCBjb3B5IGFsbCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fVlJGLCAic2N0cF92cmYiLCAic2N0
cCB2cmYgc3RydWN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9JRkEsICJzY3RwX2lmYSIsICJz
Y3RwIGlmYSBzdHJ1Y3QiKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX0lGTiwgInNjdHBfaWZuIiwg
InNjdHAgaWZuIHN0cnVjdCIpOworTUFMTE9DX0RFRklORShTQ1RQX01fVElNVywgInNjdHBfdGlt
dyIsICJzY3RwIHRpbWUgYmxvY2siKTsKK01BTExPQ19ERUZJTkUoU0NUUF9NX01WUkYsICJzY3Rw
X212cmYiLCAic2N0cCBtdnJmIHBjYiBsaXN0Iik7CitNQUxMT0NfREVGSU5FKFNDVFBfTV9JVEVS
LCAic2N0cF9pdGVyIiwgInNjdHAgaXRlcmF0b3IgY29udHJvbCIpOworTUFMTE9DX0RFRklORShT
Q1RQX01fU09DS09QVCwgInNjdHBfc29ja28iLCAic2N0cCBzb2NrZXQgb3B0aW9uIik7CitNQUxM
T0NfREVGSU5FKFNDVFBfTV9NQ09SRSwgInNjdHBfbWNvcmUiLCAic2N0cCBtY29yZSBxdWV1ZSIp
OworI2VuZGlmCisKKy8qIEdsb2JhbCBOT04tVk5FVCBzdHJ1Y3R1cmUgdGhhdCBjb250cm9scyB0
aGUgaXRlcmF0b3IgKi8KK3N0cnVjdCBpdGVyYXRvcl9jb250cm9sIHNjdHBfaXRfY3RsOworCisj
aWYgIWRlZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9jbGVhbnVwX2l0cXVl
dWUodm9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQsICpuaXQ7CisKKwlUQUlMUV9G
T1JFQUNIX1NBRkUoaXQsICZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIHNjdHBfbnh0X2l0ciwg
bml0KSB7CisJCWlmIChpdC0+ZnVuY3Rpb25fYXRlbmQgIT0gTlVMTCkgeworCQkJKCppdC0+ZnVu
Y3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwgaXQtPnZhbCk7CisJCX0KKwkJVEFJTFFfUkVNT1ZF
KCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCQlTQ1RQX0ZS
RUUoaXQsIFNDVFBfTV9JVEVSKTsKKwl9Cit9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisvKl9fVXNlcnNwYWNlX18gVE9ETyBpZiB3ZSB1c2UgdGhyZWFkIGJhc2VkIGl0ZXJh
dG9yCisgKiB0aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB3YWtldXAgd2lsbCBuZWVkIHRvIGNo
YW5nZS4KKyAqIEN1cnJlbnRseSB3ZSBhcmUgdXNpbmcgdGltZW9fY29uZCBmb3IgaWRlbnQgc29f
dGltZW8KKyAqIGJ1dCB0aGF0IGlzIG5vdCBzdWZmaWNpZW50IGlmIHdlIG5lZWQgdG8gdXNlIGFu
b3RoZXIgaWRlbnQKKyAqIGxpa2Ugd2FrZXVwKCZzY3RwcGNiaW5mby5pdGVyYXRvcl9ydW5uaW5n
KTsKKyAqLworI2VuZGlmCisKK3ZvaWQKK3NjdHBfd2FrZXVwX2l0ZXJhdG9yKHZvaWQpCit7Cisj
aWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorCVdha2VBbGxDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9pdF9jdGwu
aXRlcmF0b3Jfd2FrZXVwKTsKKyNlbHNlCisJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmc2N0cF9p
dF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKKyNlbmRpZgorI2Vsc2UKKwl3YWtldXAoJnNjdHBfaXRf
Y3RsLml0ZXJhdG9yX3J1bm5pbmcpOworI2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCitzdGF0aWMgdm9pZCAqCisjZWxzZQorc3RhdGljIHZvaWQKKyNlbmRpZgorc2N0cF9p
dGVyYXRvcl90aHJlYWQodm9pZCAqdiBTQ1RQX1VOVVNFRCkKK3sKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5hbWUoIlNDVFAgaXRlcmF0b3Ii
KTsKKyNlbmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwkvKiBJbiBGcmVlQlNE
IHRoaXMgdGhyZWFkIG5ldmVyIHRlcm1pbmF0ZXMuICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwlmb3IgKDs7KSB7CisjZWxzZQorCXdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxh
Z3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgPT0gMCkgeworI2VuZGlmCisjaWYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJbXNsZWVwKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl9ydW5uaW5n
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAmc2N0cF9pdF9jdGwuaXBpX2l0
ZXJhdG9yX3dxX210eCwKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0RhcndpbikKKwkJICAgICAgIHNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9t
dHgsCisjZW5kaWYKKwkJICAgICAgIDAsICJ3YWl0aW5nX2Zvcl93b3JrIiwgMCk7CisjZWxzZQor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJU2xlZXBDb25kaXRpb25WYXJp
YWJsZUNTKCZzY3RwX2l0X2N0bC5pdGVyYXRvcl93YWtldXAsICZzY3RwX2l0X2N0bC5pcGlfaXRl
cmF0b3Jfd3FfbXR4LCBJTkZJTklURSk7CisjZWxzZQorCQlwdGhyZWFkX2NvbmRfd2FpdCgmc2N0
cF9pdF9jdGwuaXRlcmF0b3Jfd2FrZXVwLCAmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210
eCk7CisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlpZiAoc2N0
cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVCkgeworCQkJ
YnJlYWs7CisJCX0KKyNlbmRpZgorCQlzY3RwX2l0ZXJhdG9yX3dvcmtlcigpOworCX0KKyNpZiAh
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkvKiBOb3cgdGhpcyB0aHJlYWQgbmVlZHMgdG8gYmUgdGVy
bWluYXRlZCAqLworCXNjdHBfY2xlYW51cF9pdHF1ZXVlKCk7CisJc2N0cF9pdF9jdGwuaXRlcmF0
b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9FWElURUQ7CisJU0NUUF9JUElfSVRFUkFUT1JfV1Ff
VU5MT0NLKCk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNjdHBfd2FrZXVwX2l0ZXJh
dG9yKCk7CisJcmV0dXJuIChOVUxMKTsKKyNlbHNlCisJd2FrZXVwKCZzY3RwX2l0X2N0bC5pdGVy
YXRvcl9mbGFncyk7CisJdGhyZWFkX3Rlcm1pbmF0ZShjdXJyZW50X3RocmVhZCgpKTsKKyNpZmRl
ZiBJTlZBUklBTlRTCisJcGFuaWMoIkhtbS4gdGhyZWFkX3Rlcm1pbmF0ZSgpIGNvbnRpbnVlcy4u
LiIpOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorfQorCit2b2lkCitzY3RwX3N0YXJ0dXBfaXRl
cmF0b3Iodm9pZCkKK3sKKwlpZiAoc2N0cF9pdF9jdGwudGhyZWFkX3Byb2MpIHsKKwkJLyogWW91
IG9ubHkgZ2V0IG9uZSAqLworCQlyZXR1cm47CisJfQorCS8qIEluaXRpYWxpemUgZ2xvYmFsIGxv
Y2tzIGhlcmUsIHRodXMgb25seSBvbmNlLiAqLworCVNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCk7
CisJU0NUUF9JUElfSVRFUkFUT1JfV1FfSU5JVCgpOworCVRBSUxRX0lOSVQoJnNjdHBfaXRfY3Rs
Lml0ZXJhdG9yaGVhZCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8PSA3MDEwMDAKKwlrdGhyZWFkX2NyZWF0ZShzY3RwX2l0ZXJhdG9yX3RocmVhZCwK
KyNlbHNlCisJa3Byb2NfY3JlYXRlKHNjdHBfaXRlcmF0b3JfdGhyZWFkLAorI2VuZGlmCisJICAg
ICAgICAgICAgICh2b2lkICopTlVMTCwKKwkgICAgICAgICAgICAgJnNjdHBfaXRfY3RsLnRocmVh
ZF9wcm9jLAorCSAgICAgICAgICAgICBSRlBST0MsCisJICAgICAgICAgICAgIFNDVFBfS1RIUkVB
RF9QQUdFUywKKwkgICAgICAgICAgICAgU0NUUF9LVFJIRUFEX05BTUUpOworI2VsaWYgZGVmaW5l
ZChfX0FQUExFX18pCisJa2VybmVsX3RocmVhZF9zdGFydCgodGhyZWFkX2NvbnRpbnVlX3Qpc2N0
cF9pdGVyYXRvcl90aHJlYWQsIE5VTEwsICZzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7CisjZWxp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHNjdHBfdXNlcnNwYWNlX3RocmVhZF9jcmVh
dGUoJnNjdHBfaXRfY3RsLnRocmVhZF9wcm9jLCAmc2N0cF9pdGVyYXRvcl90aHJlYWQpKSB7CisJ
CVNDVFBfUFJJTlRGKCJFUlJPUjogQ3JlYXRpbmcgc2N0cF9pdGVyYXRvcl90aHJlYWQgZmFpbGVk
LlxuIik7CisJfQorI2VuZGlmCit9CisKKyNpZmRlZiBJTkVUNgorCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorLyogX19Vc2Vyc3BhY2VfXyBUT0RPLiBzdHJ1Y3QgaW42X2lmYWRkciBpcyBk
ZWZpbmVkIGluIHN5cy9uZXRpbmV0Ni9pbjZfdmFyLmgKKyAgIGlwNl91c2VfZGVwcmVjYXRlZCBp
cyBkZWZpbmVkIGFzICBpbnQgaXA2X3VzZV9kZXByZWNhdGVkID0gMTsgaW4gL3NyYy9zeXMvbmV0
aW5ldDYvaW42X3Byb3RvLmMKKyAqLwordm9pZAorc2N0cF9nYXRoZXJfaW50ZXJuYWxfaWZhX2Zs
YWdzKHN0cnVjdCBzY3RwX2lmYSAqaWZhKQoreworICAgIHJldHVybjsgLyogc3R1YiAqLworfQor
I2Vsc2UKK3ZvaWQKK3NjdHBfZ2F0aGVyX2ludGVybmFsX2lmYV9mbGFncyhzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSkKK3sKKwlzdHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKKworCWlmYTYgPSAoc3RydWN0
IGluNl9pZmFkZHIgKilpZmEtPmlmYTsKKwlpZmEtPmZsYWdzID0gaWZhNi0+aWE2X2ZsYWdzOwor
CWlmICghTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlcHJlY2F0ZWQpKSB7CisJCWlmIChpZmEtPmZs
YWdzICYKKwkJICAgIElONl9JRkZfREVQUkVDQVRFRCkgeworCQkJaWZhLT5sb2NhbGlmYV9mbGFn
cyB8PSBTQ1RQX0FERFJfSUZBX1VOVVNFQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWlmYS0+bG9jYWxp
ZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOworCQl9CisJfSBlbHNlIHsKKwkJ
aWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7CisJfQorCWlm
IChpZmEtPmZsYWdzICYKKwkgICAgKElONl9JRkZfREVUQUNIRUQgfAorCSAgICAgSU42X0lGRl9B
TllDQVNUIHwKKwkgICAgIElONl9JRkZfTk9UUkVBRFkpKSB7CisJCWlmYS0+bG9jYWxpZmFfZmxh
Z3MgfD0gU0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7CisJfSBlbHNlIHsKKwkJaWZhLT5sb2NhbGlm
YV9mbGFncyAmPSB+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEU7CisJfQorfQorI2VuZGlmIC8qIF9f
VXNlcnNwYWNlX18gKi8KKyNlbmRpZiAvKiBJTkVUNiAqLworCisKKyNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorc3RhdGljIHVpbnQzMl90CitzY3RwX2lzX2Rlc2lyZWRfaW50ZXJmYWNlX3R5
cGUoc3RydWN0IGlmbmV0ICppZm4pCit7CisJaW50IHJlc3VsdDsKKworCS8qIGNoZWNrIHRoZSBp
bnRlcmZhY2UgdHlwZSB0byBzZWUgaWYgaXQncyBvbmUgd2UgY2FyZSBhYm91dCAqLworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQorCXN3aXRjaChpZm5ldF90eXBlKGlmbikpIHsKKyNlbHNlCisJc3dp
dGNoIChpZm4tPmlmX3R5cGUpIHsKKyNlbmRpZgorCWNhc2UgSUZUX0VUSEVSOgorCWNhc2UgSUZU
X0lTTzg4MDIzOgorCWNhc2UgSUZUX0lTTzg4MDI0OgorCWNhc2UgSUZUX0lTTzg4MDI1OgorCWNh
c2UgSUZUX0lTTzg4MDI2OgorCWNhc2UgSUZUX1NUQVJMQU46CisJY2FzZSBJRlRfUDEwOgorCWNh
c2UgSUZUX1A4MDoKKwljYXNlIElGVF9IWToKKwljYXNlIElGVF9GRERJOgorCWNhc2UgSUZUX1hF
VEhFUjoKKwljYXNlIElGVF9JU0ROQkFTSUM6CisJY2FzZSBJRlRfSVNETlBSSU1BUlk6CisJY2Fz
ZSBJRlRfUFRQU0VSSUFMOgorCWNhc2UgSUZUX09USEVSOgorCWNhc2UgSUZUX1BQUDoKKwljYXNl
IElGVF9MT09QOgorCWNhc2UgSUZUX1NMSVA6CisJY2FzZSBJRlRfR0lGOgorCWNhc2UgSUZUX0wy
VkxBTjoKKwljYXNlIElGVF9TVEY6CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKQorCWNhc2UgSUZU
X0lQOgorCWNhc2UgSUZUX0lQT1ZFUkNETEM6CisJY2FzZSBJRlRfSVBPVkVSQ0xBVzoKKwljYXNl
IElGVF9QUk9QVklSVFVBTDogLyogTmV0R3JhcGggVmlydHVhbCB0b28gKi8KKwljYXNlIElGVF9W
SVJUVUFMSVBBRERSRVNTOgorI2VuZGlmCisJCXJlc3VsdCA9IDE7CisJCWJyZWFrOworCWRlZmF1
bHQ6CisJCXJlc3VsdCA9IDA7CisJfQorCisJcmV0dXJuIChyZXN1bHQpOworfQorI2VuZGlmCisK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK2ludAorc2N0cF9pc192bXdhcmVfaW50ZXJmYWNlKHN0
cnVjdCBpZm5ldCAqaWZuKQoreworCXJldHVybiAoc3RybmNtcChpZm5ldF9uYW1lKGlmbiksICJ2
bW5ldCIsIDUpID09IDApOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisjaWZkZWYgTUFMTE9DCisjdW5kZWYgTUFMTE9DCisjZGVmaW5lIE1BTExPQyh4
KSBIZWFwQWxsb2MoR2V0UHJvY2Vzc0hlYXAoKSwgMCwgKHgpKQorI2VuZGlmCisjaWZkZWYgRlJF
RQorI3VuZGVmIEZSRUUKKyNkZWZpbmUgRlJFRSh4KSBIZWFwRnJlZShHZXRQcm9jZXNzSGVhcCgp
LCAwLCAoeCkpCisjZW5kaWYKK3N0YXRpYyB2b2lkCitzY3RwX2luaXRfaWZuc19mb3JfdnJmKGlu
dCB2cmZpZCkKK3sKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJc3RydWN0
IHNjdHBfaWZhICpzY3RwX2lmYTsKKwlEV09SRCBFcnIsIEFkYXB0ZXJBZGRyc1NpemU7CisJUElQ
X0FEQVBURVJfQUREUkVTU0VTIHBBZGFwdGVyQWRkcnMsIHBBZGFwdDsKKwlQSVBfQURBUFRFUl9V
TklDQVNUX0FERFJFU1MgcFVuaWNhc3Q7CisjZW5kaWYKKworI2lmZGVmIElORVQKKwlBZGFwdGVy
QWRkcnNTaXplID0gMDsKKworCWlmICgoRXJyID0gR2V0QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5F
VCwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCWlmICgoRXJy
ICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRf
QlVGRkVSKSkgeworCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjRBZGRyZXNzZXMoKSBzaXpp
bmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJCVNDVFBfUFJJTlRGKCJl
cnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1NpemUp
OworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogQWxsb2NhdGUgbWVtb3J5IGZyb20gc2l6aW5n
IGluZm9ybWF0aW9uICovCisJaWYgKChwQWRhcHRlckFkZHJzID0gKFBJUF9BREFQVEVSX0FERFJF
U1NFUykgR2xvYmFsQWxsb2MoR1BUUiwgQWRhcHRlckFkZHJzU2l6ZSkpID09IE5VTEwpIHsKKwkJ
U0NUUF9QUklOVEYoIk1lbW9yeSBhbGxvY2F0aW9uIGVycm9yIVxuIik7CisJCXJldHVybjsKKwl9
CisJLyogR2V0IGFjdHVhbCBhZGFwdGVyIGluZm9ybWF0aW9uICovCisJaWYgKChFcnIgPSBHZXRB
ZGFwdGVyc0FkZHJlc3NlcyhBRl9JTkVULCAwLCBOVUxMLCBwQWRhcHRlckFkZHJzLCAmQWRhcHRl
ckFkZHJzU2l6ZSkpICE9IEVSUk9SX1NVQ0NFU1MpIHsKKwkJU0NUUF9QUklOVEYoIkdldEFkYXB0
ZXJzVjRBZGRyZXNzZXMoKSBmYWlsZWQgd2l0aCBlcnJvciBjb2RlICVkXG4iLCBFcnIpOworCQlG
UkVFKHBBZGFwdGVyQWRkcnMpOworCQlyZXR1cm47CisJfQorCS8qIEVudW1lcmF0ZSB0aHJvdWdo
IGVhY2ggcmV0dXJuZWQgYWRhcHRlciBhbmQgc2F2ZSBpdHMgaW5mb3JtYXRpb24gKi8KKwlmb3Ig
KHBBZGFwdCA9IHBBZGFwdGVyQWRkcnM7IHBBZGFwdDsgcEFkYXB0ID0gcEFkYXB0LT5OZXh0KSB7
CisJCWlmIChwQWRhcHQtPklmVHlwZSA9PSBJRl9UWVBFX0lFRUU4MDIxMSB8fCBwQWRhcHQtPklm
VHlwZSA9PSBJRl9UWVBFX0VUSEVSTkVUX0NTTUFDRCkgeworCQkJZm9yIChwVW5pY2FzdCA9IHBB
ZGFwdC0+Rmlyc3RVbmljYXN0QWRkcmVzczsgcFVuaWNhc3Q7IHBVbmljYXN0ID0gcFVuaWNhc3Qt
Pk5leHQpIHsKKwkJCQlpZiAoSU40X0lTTElOS0xPQ0FMX0FERFJFU1MoJigoKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKShwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRyKSktPnNpbl9hZGRyKSkpIHsK
KwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192
cmYoMCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwQWRhcHQtPklmSW5kZXgsCisJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocEFkYXB0LT5JZlR5cGUgPT0gSUZfVFlQRV9JRUVF
ODAyMTEpP01JQl9JRl9UWVBFX0VUSEVSTkVUOnBBZGFwdC0+SWZUeXBlLAorCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5BZGFwdGVyTmFtZSwKKwkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwVW5pY2FzdC0+QWRkcmVzcy5scFNvY2thZGRyLAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcEFkYXB0LT5GbGFncywKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDApOworCQkJCWlmIChzY3RwX2lmYSkgeworCQkJCQlzY3RwX2lmYS0+
bG9jYWxpZmFfZmxhZ3MgJj0gflNDVFBfQUREUl9ERUZFUl9VU0U7CisJCQkJfQorCQkJfQorCQl9
CisJfQorCUZSRUUocEFkYXB0ZXJBZGRycyk7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCUFkYXB0
ZXJBZGRyc1NpemUgPSAwOworCisJaWYgKChFcnIgPSBHZXRBZGFwdGVyc0FkZHJlc3NlcyhBRl9J
TkVUNiwgMCwgTlVMTCwgTlVMTCwgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCWlmICgo
RXJyICE9IEVSUk9SX0JVRkZFUl9PVkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lF
TlRfQlVGRkVSKSkgeworCQkJU0NUUF9QUklOVEYoIkdldEFkYXB0ZXJzVjZBZGRyZXNzZXMoKSBz
aXppbmcgZmFpbGVkIHdpdGggZXJyb3IgY29kZSAlZFxuIiwgRXJyKTsKKwkJCVNDVFBfUFJJTlRG
KCJlcnIgPSAlZDsgQWRhcHRlckFkZHJzU2l6ZSA9ICVkXG4iLCBFcnIsIEFkYXB0ZXJBZGRyc1Np
emUpOworCQkJcmV0dXJuOworCQl9CisJfQorCS8qIEFsbG9jYXRlIG1lbW9yeSBmcm9tIHNpemlu
ZyBpbmZvcm1hdGlvbiAqLworCWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9BRERS
RVNTRVMpIEdsb2JhbEFsbG9jKEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7CisJ
CVNDVFBfUFJJTlRGKCJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOworCQlyZXR1cm47CisJ
fQorCS8qIEdldCBhY3R1YWwgYWRhcHRlciBpbmZvcm1hdGlvbiAqLworCWlmICgoRXJyID0gR2V0
QWRhcHRlcnNBZGRyZXNzZXMoQUZfSU5FVDYsIDAsIE5VTEwsIHBBZGFwdGVyQWRkcnMsICZBZGFw
dGVyQWRkcnNTaXplKSkgIT0gRVJST1JfU1VDQ0VTUykgeworCQlTQ1RQX1BSSU5URigiR2V0QWRh
cHRlcnNWNkFkZHJlc3NlcygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJ
CUZSRUUocEFkYXB0ZXJBZGRycyk7CisJCXJldHVybjsKKwl9CisJLyogRW51bWVyYXRlIHRocm91
Z2ggZWFjaCByZXR1cm5lZCBhZGFwdGVyIGFuZCBzYXZlIGl0cyBpbmZvcm1hdGlvbiAqLworCWZv
ciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBwQWRhcHQgPSBwQWRhcHQtPk5leHQp
IHsKKwkJaWYgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExIHx8IHBBZGFwdC0+
SWZUeXBlID09IElGX1RZUEVfRVRIRVJORVRfQ1NNQUNEKSB7CisJCQlmb3IgKHBVbmljYXN0ID0g
cEFkYXB0LT5GaXJzdFVuaWNhc3RBZGRyZXNzOyBwVW5pY2FzdDsgcFVuaWNhc3QgPSBwVW5pY2Fz
dC0+TmV4dCkgeworCQkJCXNjdHBfaWZhID0gc2N0cF9hZGRfYWRkcl90b192cmYoMCwKKwkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwQWRhcHQtPklwdjZJZkluZGV4LAorCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBBZGFwdC0+SWZUeXBlID09IElGX1RZUEVfSUVFRTgwMjExKT9N
SUJfSUZfVFlQRV9FVEhFUk5FVDpwQWRhcHQtPklmVHlwZSwKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBBZGFwdC0+QWRhcHRlck5hbWUsCisJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBOVUxMLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcFVuaWNhc3QtPkFkZHJlc3MubHBTb2NrYWRkciwKKwkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHBBZGFwdC0+RmxhZ3MsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAwKTsKKwkJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQkJc2N0cF9pZmEtPmxvY2FsaWZh
X2ZsYWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlG
UkVFKHBBZGFwdGVyQWRkcnMpOworI2VuZGlmCit9CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCitzdGF0aWMgdm9pZAorc2N0cF9pbml0X2lmbnNfZm9yX3ZyZihpbnQgdnJmaWQpCit7Cisj
aWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWludCByYzsKKwlzdHJ1Y3QgaWZh
ZGRycyAqaWZhLCAqaWZhczsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXVpbnQzMl90
IGlmYV9mbGFnczsKKworCXJjID0gZ2V0aWZhZGRycygmaWZhcyk7CisJaWYgKHJjICE9IDApIHsK
KwkJcmV0dXJuOworCX0KKwlmb3IgKGlmYSA9IGlmYXM7IGlmYTsgaWZhID0gaWZhLT5pZmFfbmV4
dCkgeworCQlpZiAoaWZhLT5pZmFfYWRkciA9PSBOVUxMKSB7CisJCQljb250aW51ZTsKKwkJfQor
I2lmICFkZWZpbmVkKElORVQpCisJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZf
SU5FVDYpIHsKKwkJCS8qIG5vbiBpbmV0NiBza2lwICovCisJCQljb250aW51ZTsKKwkJfQorI2Vs
aWYgIWRlZmluZWQoSU5FVDYpCisJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZf
SU5FVCkgeworCQkJLyogbm9uIGluZXQgc2tpcCAqLworCQkJY29udGludWU7CisJCX0KKyNlbHNl
CisJCWlmICgoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ICE9IEFGX0lORVQpICYmIChpZmEtPmlm
YV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYpKSB7CisJCQkvKiBub24gaW5ldC9pbmV0NiBz
a2lwICovCisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwkJ
aWYgKChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpICYmCisJCSAgICBJTjZf
SVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopaWZhLT5pZmFfYWRk
ciktPnNpbjZfYWRkcikpIHsKKwkJCS8qIHNraXAgdW5zcGVjaWZlZCBhZGRyZXNzZXMgKi8KKwkJ
CWNvbnRpbnVlOworCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpCisJCWlmIChpZmEtPmlm
YV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCAmJgorCQkgICAgKChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKilpZmEtPmlmYV9hZGRyKS0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCWNvbnRpbnVl
OworCQl9CisjZW5kaWYKKwkJaWZhX2ZsYWdzID0gMDsKKwkJc2N0cF9pZmEgPSBzY3RwX2FkZF9h
ZGRyX3RvX3ZyZih2cmZpZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4KGlmYS0+
aWZhX25hbWUpLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBOVUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmYS0+aWZhX2FkZHIsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZh
X2ZsYWdzLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCQlpZiAoc2N0
cF9pZmEpIHsKKwkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RFRkVS
X1VTRTsKKwkJfQorCX0KKwlmcmVlaWZhZGRycyhpZmFzKTsKKyNlbmRpZgorfQorI2VuZGlmCisK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3N0YXRpYyB2b2lkCitzY3RwX2luaXRfaWZuc19mb3Jf
dnJmKGludCB2cmZpZCkKK3sKKwkvKiBIZXJlIHdlIG11c3QgYXBwbHkgQU5ZIGxvY2tzIG5lZWRl
ZCBieSB0aGUKKwkgKiBJRk4gd2UgYWNjZXNzIGFuZCBhbHNvIG1ha2Ugc3VyZSB3ZSBsb2NrCisJ
ICogYW55IElGQSB0aGF0IGV4aXN0cyBhcyB3ZSBmbG9hdCB0aHJvdWdoIHRoZQorCSAqIGxpc3Qg
b2YgSUZBJ3MKKwkgKi8KKwlzdHJ1Y3QgaWZuZXQgKippZm5ldGxpc3Q7CisJdWludDMyX3QgaSwg
aiwgY291bnQ7CisJY2hhciBuYW1lW1NDVFBfSUZOQU1TSVpdOworCXN0cnVjdCBpZm5ldCAqaWZu
OworCXN0cnVjdCBpZmFkZHIgKippZmFkZHJsaXN0OworCXN0cnVjdCBpZmFkZHIgKmlmYTsKKwlz
dHJ1Y3QgaW42X2lmYWRkciAqaWZhNjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhOworCXVp
bnQzMl90IGlmYV9mbGFnczsKKworCWlmIChpZm5ldF9saXN0X2dldChJRk5FVF9GQU1JTFlfQU5Z
LCAmaWZuZXRsaXN0LCAmY291bnQpICE9IDApIHsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAw
OyBpIDwgY291bnQ7IGkrKykgeworCQlpZm4gPSBpZm5ldGxpc3RbaV07CisJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKSAmJiBzY3RwX2lzX3Ztd2Fy
ZV9pbnRlcmZhY2UoaWZuKSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHNjdHBfaXNfZGVz
aXJlZF9pbnRlcmZhY2VfdHlwZShpZm4pID09IDApIHsKKwkJCS8qIG5vbiBkZXNpcmVkIHR5cGUg
Ki8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChpZm5ldF9nZXRfYWRkcmVzc19saXN0KGlmbiwg
JmlmYWRkcmxpc3QpICE9IDApIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoaiA9IDA7IGlm
YWRkcmxpc3Rbal0gIT0gTlVMTDsgaisrKSB7CisJCQlpZmEgPSBpZmFkZHJsaXN0W2pdOworCQkJ
aWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYg
KChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgJiYgKGlmYS0+aWZhX2FkZHIt
PnNhX2ZhbWlseSAhPSBBRl9JTkVUNikpIHsKKwkJCQkvKiBub24gaW5ldC9pbmV0NiBza2lwICov
CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaWZhLT5pZmFfYWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCYoKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilpZmEtPmlmYV9hZGRyKS0+c2luNl9hZGRyKSkgeworCQkJCQkvKiBza2lw
IHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0gZWxz
ZSB7CisJCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopaWZhLT5pZmFfYWRkciktPnNpbl9h
ZGRyLnNfYWRkciA9PSBJTkFERFJfQU5ZKSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0K
KwkJCWlmIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlpZmE2
ID0gKHN0cnVjdCBpbjZfaWZhZGRyICopaWZhOworCQkJCWlmYV9mbGFncyA9IGlmYTYtPmlhNl9m
bGFnczsKKwkJCX0gZWxzZSB7CisJCQkJaWZhX2ZsYWdzID0gMDsKKwkJCX0KKwkJCXNucHJpbnRm
KG5hbWUsIFNDVFBfSUZOQU1TSVosICIlcyVkIiwgaWZuZXRfbmFtZShpZm4pLCBpZm5ldF91bml0
KGlmbikpOworCQkJc2N0cF9pZmEgPSBzY3RwX2FkZF9hZGRyX3RvX3ZyZih2cmZpZCwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpZm4sIC8qIFhYWCAqLworCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF9pbmRleChpZm4pLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm5ldF90eXBlKGlmbiksCisJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsCisJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh2b2lkICopaWZhLCAvKiBYWFggKi8KKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWZhLT5pZmFfYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWZhX2ZsYWdzLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsK
KwkJCWlmIChzY3RwX2lmYSkgeworCQkJCXNjdHBfaWZhLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NU
UF9BRERSX0RFRkVSX1VTRTsKKwkJCX0KKwkJfQorCQlpZm5ldF9mcmVlX2FkZHJlc3NfbGlzdChp
ZmFkZHJsaXN0KTsKKwl9CisJaWZuZXRfbGlzdF9mcmVlKGlmbmV0bGlzdCk7Cit9CisjZW5kaWYK
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9pbml0X2lmbnNf
Zm9yX3ZyZihpbnQgdnJmaWQpCit7CisJLyogSGVyZSB3ZSBtdXN0IGFwcGx5IEFOWSBsb2NrcyBu
ZWVkZWQgYnkgdGhlCisJICogSUZOIHdlIGFjY2VzcyBhbmQgYWxzbyBtYWtlIHN1cmUgd2UgbG9j
aworCSAqIGFueSBJRkEgdGhhdCBleGlzdHMgYXMgd2UgZmxvYXQgdGhyb3VnaCB0aGUKKwkgKiBs
aXN0IG9mIElGQSdzCisJICovCisJc3RydWN0IGlmbmV0ICppZm47CisJc3RydWN0IGlmYWRkciAq
aWZhOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJdWludDMyX3QgaWZhX2ZsYWdzOwor
I2lmZGVmIElORVQ2CisJc3RydWN0IGluNl9pZmFkZHIgKmlmYTY7CisjZW5kaWYKKworCUlGTkVU
X1JMT0NLKCk7CisJVEFJTFFfRk9SRUFDSChpZm4sICZNT0RVTEVfR0xPQkFMKGlmbmV0KSwgaWZf
bGluaykgeworCQlpZiAoc2N0cF9pc19kZXNpcmVkX2ludGVyZmFjZV90eXBlKGlmbikgPT0gMCkg
eworCQkJLyogbm9uIGRlc2lyZWQgdHlwZSAqLworCQkJY29udGludWU7CisJCX0KKwkJSUZfQURE
Ul9STE9DSyhpZm4pOworCQlDS19TVEFJTFFfRk9SRUFDSChpZmEsICZpZm4tPmlmX2FkZHJoZWFk
LCBpZmFfbGluaykgeworCQkJaWYgKGlmYS0+aWZhX2FkZHIgPT0gTlVMTCkgeworCQkJCWNvbnRp
bnVlOworCQkJfQorCQkJc3dpdGNoIChpZmEtPmlmYV9hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICop
aWZhLT5pZmFfYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOwor
CQkJCX0KKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2
OgorCQkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmKChzdHJ1Y3Qgc29ja2FkZHJfaW42
ICopaWZhLT5pZmFfYWRkciktPnNpbjZfYWRkcikpIHsKKwkJCQkJLyogc2tpcCB1bnNwZWNpZmVk
IGFkZHJlc3NlcyAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYK
KwkJCWRlZmF1bHQ6CisJCQkJY29udGludWU7CisJCQl9CisJCQlzd2l0Y2ggKGlmYS0+aWZhX2Fk
ZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQlpZmFf
ZmxhZ3MgPSAwOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZf
SU5FVDY6CisJCQkJaWZhNiA9IChzdHJ1Y3QgaW42X2lmYWRkciAqKWlmYTsKKwkJCQlpZmFfZmxh
Z3MgPSBpZmE2LT5pYTZfZmxhZ3M7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJ
CQkJaWZhX2ZsYWdzID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXNjdHBfaWZhID0gc2N0cF9h
ZGRfYWRkcl90b192cmYodnJmaWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICh2b2lkICopaWZuLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm4tPmlm
X2luZGV4LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZm4tPmlmX3R5cGUs
CisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmbi0+aWZfeG5hbWUsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopaWZhLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYV9hZGRyLAorCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZmFfZmxhZ3MsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDApOworCQkJaWYgKHNjdHBfaWZhKSB7CisJCQkJc2N0cF9pZmEtPmxvY2FsaWZhX2Zs
YWdzICY9IH5TQ1RQX0FERFJfREVGRVJfVVNFOworCQkJfQorCQl9CisJCUlGX0FERFJfUlVOTE9D
SyhpZm4pOworCX0KKwlJRk5FVF9SVU5MT0NLKCk7Cit9CisjZW5kaWYKKwordm9pZAorc2N0cF9p
bml0X3ZyZl9saXN0KGludCB2cmZpZCkKK3sKKwlpZiAodnJmaWQgPiBTQ1RQX01BWF9WUkZfSUQp
CisJCS8qIGNhbid0IGRvIHRoYXQgKi8KKwkJcmV0dXJuOworCisJLyogRG9uJ3QgY2FyZSBhYm91
dCByZXR1cm4gaGVyZSAqLworCSh2b2lkKXNjdHBfYWxsb2NhdGVfdnJmKHZyZmlkKTsKKworCS8q
IE5vdyB3ZSBuZWVkIHRvIGJ1aWxkIGFsbCB0aGUgaWZuJ3MKKwkgKiBmb3IgdGhpcyB2cmYgYW5k
IHRoZXJlIGFkZHJlc3NlcworCSAqLworCXNjdHBfaW5pdF9pZm5zX2Zvcl92cmYodnJmaWQpOwor
fQorCit2b2lkCitzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlmYSwgaW50IGNtZCkK
K3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgIHJldHVybjsKKyNlbHNlCisJ
dWludDMyX3QgaWZhX2ZsYWdzID0gMDsKKworCWlmIChTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2lu
aXRpYWxpemVkKSA9PSAwKSB7CisJCXJldHVybjsKKwl9CisJLyogQlNEIG9ubHkgaGFzIG9uZSBW
UkYsIGlmIHRoaXMgY2hhbmdlcworCSAqIHdlIHdpbGwgbmVlZCB0byBob29rIGluIHRoZSByaWdo
dAorCSAqIHRoaW5ncyBoZXJlIHRvIGdldCB0aGUgaWQgdG8gcGFzcyB0bworCSAqIHRoZSBhZGRy
ZXNzIG1hbmFnZW1lbnQgcm91dGluZS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNFX1ZBUihmaXJzdF90
aW1lKSA9PSAwKSB7CisJCS8qIFNwZWNpYWwgdGVzdCB0byBzZWUgaWYgbXkgOjoxIHdpbGwgc2hv
d3VwIHdpdGggdGhpcyAqLworCQlTQ1RQX0JBU0VfVkFSKGZpcnN0X3RpbWUpID0gMTsKKwkJc2N0
cF9pbml0X2lmbnNfZm9yX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQpOworCX0KKworCWlmICgoY21k
ICE9IFJUTV9BREQpICYmIChjbWQgIT0gUlRNX0RFTEVURSkpIHsKKwkJLyogZG9uJ3Qga25vdyB3
aGF0IHRvIGRvIHdpdGggdGhpcyAqLworCQlyZXR1cm47CisJfQorCisJaWYgKGlmYS0+aWZhX2Fk
ZHIgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChzY3RwX2lzX2Rlc2lyZWRfaW50ZXJm
YWNlX3R5cGUoaWZhLT5pZmFfaWZwKSA9PSAwKSB7CisJCS8qIG5vbiBkZXNpcmVkIHR5cGUgKi8K
KwkJcmV0dXJuOworCX0KKwlzd2l0Y2ggKGlmYS0+aWZhX2FkZHItPnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCWlmICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWlm
YS0+aWZhX2FkZHIpLT5zaW5fYWRkci5zX2FkZHIgPT0gMCkgeworCQkJcmV0dXJuOworCQl9CisJ
CWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpZmFfZmxh
Z3MgPSAoKHN0cnVjdCBpbjZfaWZhZGRyICopaWZhKS0+aWE2X2ZsYWdzOworCQlpZiAoSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWlmYS0+aWZhX2FkZHIp
LT5zaW42X2FkZHIpKSB7CisJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2VzICovCisJCQly
ZXR1cm47CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBub24gaW5ldC9p
bmV0NiBza2lwICovCisJCXJldHVybjsKKwl9CisJaWYgKGNtZCA9PSBSVE1fQUREKSB7CisJCSh2
b2lkKXNjdHBfYWRkX2FkZHJfdG9fdnJmKFNDVFBfREVGQVVMVF9WUkZJRCwgKHZvaWQgKilpZmEt
PmlmYV9pZnAsCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmbmV0X2luZGV4KGlmYS0+aWZhX2lmcCksIGlmbmV0X3R5cGUoaWZhLT5pZmFfaWZw
KSwgaWZuZXRfbmFtZShpZmEtPmlmYV9pZnApLAorI2Vsc2UKKwkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWZhLT5pZmFfaWZwLT5pZl9pbmRleCwgaWZhLT5pZmFfaWZwLT5pZl90eXBlLCBp
ZmEtPmlmYV9pZnAtPmlmX3huYW1lLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICh2b2lkICopaWZhLCBpZmEtPmlmYV9hZGRyLCBpZmFfZmxhZ3MsIDEpOworCX0gZWxzZSB7
CisKKwkJc2N0cF9kZWxfYWRkcl9mcm9tX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsIGlmYS0+aWZh
X2FkZHIsCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAg
aWZuZXRfaW5kZXgoaWZhLT5pZmFfaWZwKSwKKwkJICAgICAgICAgICAgICAgICAgICAgICBpZm5l
dF9uYW1lKGlmYS0+aWZhX2lmcCkpOworI2Vsc2UKKwkJICAgICAgICAgICAgICAgICAgICAgICBp
ZmEtPmlmYV9pZnAtPmlmX2luZGV4LAorCQkgICAgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZh
X2lmcC0+aWZfeG5hbWUpOworI2VuZGlmCisKKwkJLyogV2UgZG9uJ3QgYnVtcCByZWZjb3VudCBo
ZXJlIHNvIHdoZW4gaXQgY29tcGxldGVzCisJCSAqIHRoZSBmaW5hbCBkZWxldGUgd2lsbCBoYXBw
ZW4uCisJCSAqLworCX0KKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3Zv
aWQKK3NjdHBfYWRkX29yX2RlbF9pbnRlcmZhY2VzKGludCAoKnByZWQpKHN0cnVjdCBpZm5ldCAq
KSwgaW50IGFkZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmbjsKKwlzdHJ1Y3QgaWZhZGRyICppZmE7
CisKKwlJRk5FVF9STE9DSygpOworCVRBSUxRX0ZPUkVBQ0goaWZuLCAmTU9EVUxFX0dMT0JBTChp
Zm5ldCksIGlmX2xpbmspIHsKKwkJaWYgKCEoKnByZWQpKGlmbikpIHsKKwkJCWNvbnRpbnVlOwor
CQl9CisJCUNLX1NUQUlMUV9GT1JFQUNIKGlmYSwgJmlmbi0+aWZfYWRkcmhlYWQsIGlmYV9saW5r
KSB7CisJCQlzY3RwX2FkZHJfY2hhbmdlKGlmYSwgYWRkID8gUlRNX0FERCA6IFJUTV9ERUxFVEUp
OworCQl9CisJfQorCUlGTkVUX1JVTkxPQ0soKTsKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoX19B
UFBMRV9fKQordm9pZAorc2N0cF9hZGRfb3JfZGVsX2ludGVyZmFjZXMoaW50ICgqcHJlZCkoc3Ry
dWN0IGlmbmV0ICopLCBpbnQgYWRkKQoreworCXN0cnVjdCBpZm5ldCAqKmlmbmV0bGlzdDsKKwlz
dHJ1Y3QgaWZhZGRyICoqaWZhZGRybGlzdDsKKwl1aW50MzJfdCBpLCBqLCBjb3VudDsKKworCWlm
IChpZm5ldF9saXN0X2dldChJRk5FVF9GQU1JTFlfQU5ZLCAmaWZuZXRsaXN0LCAmY291bnQpICE9
IDApIHsKKwkJcmV0dXJuOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlp
ZiAoISgqcHJlZCkoaWZuZXRsaXN0W2ldKSkgeworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGlm
bmV0X2dldF9hZGRyZXNzX2xpc3QoaWZuZXRsaXN0W2ldLCAmaWZhZGRybGlzdCkgIT0gMCkgewor
CQkJY29udGludWU7CisJCX0KKwkJZm9yIChqID0gMDsgaWZhZGRybGlzdFtqXSAhPSBOVUxMOyBq
KyspIHsKKwkJCXNjdHBfYWRkcl9jaGFuZ2UoaWZhZGRybGlzdFtqXSwgYWRkID8gUlRNX0FERCA6
IFJUTV9ERUxFVEUpOworCQl9CisJCWlmbmV0X2ZyZWVfYWRkcmVzc19saXN0KGlmYWRkcmxpc3Qp
OworCX0KKwlpZm5ldF9saXN0X2ZyZWUoaWZuZXRsaXN0KTsKKwlyZXR1cm47Cit9CisjZW5kaWYK
Kworc3RydWN0IG1idWYgKgorc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHVuc2lnbmVkIGludCBzcGFj
ZV9uZWVkZWQsIGludCB3YW50X2hlYWRlciwKKwkJICAgICAgaW50IGhvdywgaW50IGFsbG9uZWJ1
ZiwgaW50IHR5cGUpCit7CisJc3RydWN0IG1idWYgKm0gPSBOVUxMOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA1MiB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCW0gPSAgbV9nZXRtMihOVUxM
LCBzcGFjZV9uZWVkZWQsIGhvdywgdHlwZSwgd2FudF9oZWFkZXIgPyBNX1BLVEhEUiA6IDAsIGFs
bG9uZWJ1Zik7CisjZWxzZQorCW0gPSAgbV9nZXRtMihOVUxMLCBzcGFjZV9uZWVkZWQsIGhvdywg
dHlwZSwgd2FudF9oZWFkZXIgPyBNX1BLVEhEUiA6IDApOworI2VuZGlmCisJaWYgKG0gPT0gTlVM
TCkgeworCQkvKiBiYWQsIG5vIG1lbW9yeSAqLworCQlyZXR1cm4gKG0pOworCX0KKyNpZiAhZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChhbGxvbmVidWYpIHsKKwkJaWYgKFNDVFBfQlVGX1NJ
WkUobSkgPCBzcGFjZV9uZWVkZWQpIHsKKwkJCW1fZnJlZW0obSk7CisJCQlyZXR1cm4gKE5VTEwp
OworCQl9CisJCUtBU1NFUlQoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxMLCAoIiVzOiBubyBjaGFp
biBhbGxvd2VkIiwgX19GVU5DVElPTl9fKSk7CisJfQorI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVG
X0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JQUxM
T0MpOworCX0KKyNlbmRpZgorI2Vsc2UKKwlpbnQgbWJ1Zl90aHJlc2hvbGQ7CisJdW5zaWduZWQg
aW50IHNpemU7CisKKwlpZiAod2FudF9oZWFkZXIpIHsKKwkJTUdFVEhEUihtLCBob3csIHR5cGUp
OworCQlzaXplID0gTUhMRU47CisJfSBlbHNlIHsKKwkJTUdFVChtLCBob3csIHR5cGUpOworCQlz
aXplID0gTUxFTjsKKwl9CisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0K
KwlpZiAoYWxsb25lYnVmID09IDApIHsKKwkJbWJ1Zl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpOworCX0gZWxzZSB7CisJCW1idWZfdGhyZXNo
b2xkID0gMTsKKwl9CisKKwlpZiAoc3BhY2VfbmVlZGVkID4gKHVuc2lnbmVkIGludCkoKChtYnVm
X3RocmVzaG9sZCAtIDEpICogTUxFTikgKyBNSExFTikpIHsKKwkJTUNMR0VUKG0sIGhvdyk7CisJ
CWlmIChtID09IE5VTEwpIHsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJaWYgKFNDVFBfQlVG
X0lTX0VYVEVOREVEKG0pID09IDApIHsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwkJc2l6ZSA9IFNDVFBfQlVGX0VYVEVORF9TSVpFKG0pOworCX0KKwlpZiAo
YWxsb25lYnVmICE9IDAgJiYgc2l6ZSA8IHNwYWNlX25lZWRlZCkgeworCQltX2ZyZWVtKG0pOwor
CQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0JVRl9MRU4obSkgPSAwOworCVNDVFBfQlVGX05F
WFQobSkgPSBTQ1RQX0JVRl9ORVhUX1BLVChtKSA9IE5VTEw7CisjaWZkZWYgU0NUUF9NQlVGX0xP
R0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9N
QlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFNDVFBfTUJVRl9JQUxMT0Mp
OworCX0KKyNlbmRpZgorI2VuZGlmCisJcmV0dXJuIChtKTsKK30KKworCisjaWZkZWYgU0NUUF9Q
QUNLRVRfTE9HR0lORwordm9pZAorc2N0cF9wYWNrZXRfbG9nKHN0cnVjdCBtYnVmICptKQorewor
CWludCAqbGVuYXQsIHRoaXNvbmU7CisJdm9pZCAqY29weXRvOworCXVpbnQzMl90ICp0aWNrX3Rv
Y2s7CisJaW50IGxlbmd0aDsKKwlpbnQgdG90YWxfbGVuOworCWludCBncmFiYmVkX2xvY2sgPSAw
OworCWludCB2YWx1ZSwgbmV3dmFsLCB0aGlzZW5kLCB0aGlzYmVnaW47CisJLyoKKwkgKiBCdWZm
ZXIgbGF5b3V0LgorCSAqIC1zaXplb2YgdGhpcyBlbnRyeSAodG90YWxfbGVuKQorCSAqIC1wcmV2
aW91cyBlbmQgICAgICAodmFsdWUpCisJICogLXRpY2tzIG9mIGxvZyAgICAgICh0aWNrcykKKwkg
KiBvIC1pcCBwYWNrZXQKKwkgKiBvIC1hcyBsb2dnZWQKKwkgKiAtIHdoZXJlIHRoaXMgc3RhcnRl
ZCAodGhpc2JlZ2luKQorCSAqIHggPC0tZW5kIHBvaW50cyBoZXJlCisJICovCisJbGVuZ3RoID0g
U0NUUF9IRUFERVJfTEVOKG0pOworCXRvdGFsX2xlbiA9IFNDVFBfU0laRTMyKChsZW5ndGggKyAo
NCAqIHNpemVvZihpbnQpKSkpOworCS8qIExvZyBhIHBhY2tldCB0byB0aGUgYnVmZmVyLiAqLwor
CWlmICh0b3RhbF9sZW4+IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCS8qIENhbid0IGxvZyB0
aGlzIHBhY2tldCBJIGhhdmUgbm90IGEgYnVmZmVyIGJpZyBlbm91Z2ggKi8KKwkJcmV0dXJuOwor
CX0KKwlpZiAobGVuZ3RoIDwgKGludCkoU0NUUF9NSU5fVjRfT1ZFUkhFQUQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfY29va2llX2Fja19jaHVuaykpKSB7CisJCXJldHVybjsKKwl9CisJYXRvbWljX2Fk
ZF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgMSk7CisgdHJ5X2FnYWlu
OgorCWlmIChTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycykgPiBTQ1RQX1BLVExPR19X
UklURVJTX05FRURfTE9DSykgeworCQlTQ1RQX0lQX1BLVExPR19MT0NLKCk7CisJCWdyYWJiZWRf
bG9jayA9IDE7CisJYWdhaW5fbG9ja2VkOgorCQl2YWx1ZSA9IFNDVFBfQkFTRV9WQVIocGFja2V0
X2xvZ19lbmQpOworCQluZXd2YWwgPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSArIHRv
dGFsX2xlbjsKKwkJaWYgKG5ld3ZhbCA+PSBTQ1RQX1BBQ0tFVF9MT0dfU0laRSkgeworCQkJLyog
d2Ugd3JhcHBlZCAqLworCQkJdGhpc2JlZ2luID0gMDsKKwkJCXRoaXNlbmQgPSB0b3RhbF9sZW47
CisJCX0gZWxzZSB7CisJCQl0aGlzYmVnaW4gPSBTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfZW5k
KTsKKwkJCXRoaXNlbmQgPSBuZXd2YWw7CisJCX0KKwkJaWYgKCEoYXRvbWljX2NtcHNldF9pbnQo
JlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpLCB2YWx1ZSwgdGhpc2VuZCkpKSB7CisJCQln
b3RvIGFnYWluX2xvY2tlZDsKKwkJfQorCX0gZWxzZSB7CisJCXZhbHVlID0gU0NUUF9CQVNFX1ZB
UihwYWNrZXRfbG9nX2VuZCk7CisJCW5ld3ZhbCA9IFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19l
bmQpICsgdG90YWxfbGVuOworCQlpZiAobmV3dmFsID49IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7
CisJCQkvKiB3ZSB3cmFwcGVkICovCisJCQl0aGlzYmVnaW4gPSAwOworCQkJdGhpc2VuZCA9IHRv
dGFsX2xlbjsKKwkJfSBlbHNlIHsKKwkJCXRoaXNiZWdpbiA9IFNDVFBfQkFTRV9WQVIocGFja2V0
X2xvZ19lbmQpOworCQkJdGhpc2VuZCA9IG5ld3ZhbDsKKwkJfQorCQlpZiAoIShhdG9taWNfY21w
c2V0X2ludCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX2VuZCksIHZhbHVlLCB0aGlzZW5kKSkp
IHsKKwkJCWdvdG8gdHJ5X2FnYWluOworCQl9CisJfQorCS8qIFNhbml0eSBjaGVjayAqLworCWlm
ICh0aGlzZW5kID49IFNDVFBfUEFDS0VUX0xPR19TSVpFKSB7CisJCVNDVFBfUFJJTlRGKCJJbnNh
bml0eSBzdG9wcyBhIGxvZyB0aGlzYmVnaW46JWQgdGhpc2VuZDolZCB3cml0ZXJzOiVkIGxvY2s6
JWQgZW5kOiVkXG4iLAorCQkgICAgICAgICAgICB0aGlzYmVnaW4sCisJCSAgICAgICAgICAgIHRo
aXNlbmQsCisJCSAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwK
KwkJICAgICAgICAgICAgZ3JhYmJlZF9sb2NrLAorCQkgICAgICAgICAgICBTQ1RQX0JBU0VfVkFS
KHBhY2tldF9sb2dfZW5kKSk7CisJCVNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpID0gMDsK
KwkJZ290byBub19sb2c7CisKKwl9CisJbGVuYXQgPSAoaW50ICopJlNDVFBfQkFTRV9WQVIocGFj
a2V0X2xvZ19idWZmZXIpW3RoaXNiZWdpbl07CisJKmxlbmF0ID0gdG90YWxfbGVuOworCWxlbmF0
Kys7CisJKmxlbmF0ID0gdmFsdWU7CisJbGVuYXQrKzsKKwl0aWNrX3RvY2sgPSAodWludDMyX3Qg
KilsZW5hdDsKKwlsZW5hdCsrOworCSp0aWNrX3RvY2sgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7
CisJY29weXRvID0gKHZvaWQgKilsZW5hdDsKKwl0aGlzb25lID0gdGhpc2VuZCAtIHNpemVvZihp
bnQpOworCWxlbmF0ID0gKGludCAqKSZTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKVt0
aGlzb25lXTsKKwkqbGVuYXQgPSB0aGlzYmVnaW47CisJaWYgKGdyYWJiZWRfbG9jaykgeworCQlT
Q1RQX0lQX1BLVExPR19VTkxPQ0soKTsKKwkJZ3JhYmJlZF9sb2NrID0gMDsKKwl9CisJbV9jb3B5
ZGF0YShtLCAwLCBsZW5ndGgsIChjYWRkcl90KWNvcHl0byk7Cisgbm9fbG9nOgorCWlmIChncmFi
YmVkX2xvY2spIHsKKwkJU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCk7CisJfQorCWF0b21pY19zdWJ0
cmFjdF9pbnQoJlNDVFBfQkFTRV9WQVIocGFja2V0X2xvZ193cml0ZXJzKSwgMSk7Cit9CisKKwor
aW50CitzY3RwX2NvcHlfb3V0X3BhY2tldF9sb2codWludDhfdCAqdGFyZ2V0LCBpbnQgbGVuZ3Ro
KQoreworCS8qIFdlIHdpbmQgdGhyb3VnaCB0aGUgcGFja2V0IGxvZyBzdGFydGluZyBhdAorCSAq
IHN0YXJ0IGNvcHlpbmcgdXAgdG8gbGVuZ3RoIGJ5dGVzIG91dC4KKwkgKiBXZSByZXR1cm4gdGhl
IG51bWJlciBvZiBieXRlcyBjb3BpZWQuCisJICovCisJaW50IHRvY29weSwgdGhpc19jb3B5Owor
CWludCAqbGVuYXQ7CisJaW50IGRpZF9kZWxheSA9IDA7CisKKwl0b2NvcHkgPSBsZW5ndGg7CisJ
aWYgKGxlbmd0aCA8IChpbnQpKDIgKiBzaXplb2YoaW50KSkpIHsKKwkJLyogbm90IGVub3VnaCBy
b29tICovCisJCXJldHVybiAoMCk7CisJfQorCWlmIChTQ1RQX1BLVExPR19XUklURVJTX05FRURf
TE9DSykgeworCQlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRl
cnMpLCBTQ1RQX1BLVExPR19XUklURVJTX05FRURfTE9DSyk7CisJYWdhaW46CisJCWlmICgoZGlk
X2RlbGF5ID09IDApICYmIChTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfd3JpdGVycykgIT0gU0NU
UF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spKSB7CisJCQkvKiB3ZSBkZWxheSBoZXJlIGZvciBq
dXN0IGEgbW9tZW50IGhvcGluZyB0aGUgd3JpdGVyKHMpIHRoYXQgd2VyZQorCQkJICogcHJlc2Vu
dCB3aGVuIHdlIGVudGVyZWQgd2lsbCBoYXZlIGxlZnQgYW5kIHdlIG9ubHkgaGF2ZQorCQkJICog
bG9ja2luZyBvbmVzIHRoYXQgd2lsbCBjb250ZW5kIHdpdGggdXMgZm9yIHRoZSBsb2NrLiBUaGlz
CisJCQkgKiBkb2VzIG5vdCBhc3N1cmUgMTAwJSBhY2Nlc3MsIGJ1dCBpdHMgZ29vZCBlbm91Z2gg
Zm9yCisJCQkgKiBhIGxvZ2dpbmcgZmFjaWxpdHkgbGlrZSB0aGlzLgorCQkJICovCisJCQlkaWRf
ZGVsYXkgPSAxOworCQkJREVMQVkoMTApOworCQkJZ290byBhZ2FpbjsKKwkJfQorCX0KKwlTQ1RQ
X0lQX1BLVExPR19MT0NLKCk7CisJbGVuYXQgPSAoaW50ICopdGFyZ2V0OworCSpsZW5hdCA9IFND
VFBfQkFTRV9WQVIocGFja2V0X2xvZ19lbmQpOworCWxlbmF0Kys7CisJdGhpc19jb3B5ID0gbWlu
KChsZW5ndGggLSBzaXplb2YoaW50KSksIFNDVFBfUEFDS0VUX0xPR19TSVpFKTsKKwltZW1jcHko
KHZvaWQgKilsZW5hdCwgKHZvaWQgKilTQ1RQX0JBU0VfVkFSKHBhY2tldF9sb2dfYnVmZmVyKSwg
dGhpc19jb3B5KTsKKwlpZiAoU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0spIHsKKwkJYXRv
bWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpLAorCQkJ
CSAgICBTQ1RQX1BLVExPR19XUklURVJTX05FRURfTE9DSyk7CisJfQorCVNDVFBfSVBfUEtUTE9H
X1VOTE9DSygpOworCXJldHVybiAodGhpc19jb3B5ICsgc2l6ZW9mKGludCkpOworfQorCisjZW5k
aWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2JzZF9hZGRy
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9ic2RfYWRkci5oCmluZGV4IGU2
OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmE4M2MwZWM0Yzc2OTdkNTAy
NjVhYTczOGFhMjVlNmU4ZWE5OTU0NDkgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfYnNkX2FkZHIuaApAQCAtMCwwICsxLDcxIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1J
ZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywg
YnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoK
KyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
bgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBD
aXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAq
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklH
SFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9j
ZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfYnNkX2Fk
ZHIuaCAzMTA1OTAgMjAxNi0xMi0yNiAxMTowNjo0MVogdHVleGVuICQiKTsKKyNlbmRpZgorCisj
aWZuZGVmIF9ORVRJTkVUX1NDVFBfQlNEX0FERFJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9C
U0RfQUREUl9IXworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorCisjaWYgZGVmaW5l
ZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKK2V4dGVybiBzdHJ1Y3QgaXRl
cmF0b3JfY29udHJvbCBzY3RwX2l0X2N0bDsKK3ZvaWQgc2N0cF93YWtldXBfaXRlcmF0b3Iodm9p
ZCk7CisKK3ZvaWQgc2N0cF9zdGFydHVwX2l0ZXJhdG9yKHZvaWQpOworCisKKyNpZmRlZiBJTkVU
Ngordm9pZCBzY3RwX2dhdGhlcl9pbnRlcm5hbF9pZmFfZmxhZ3Moc3RydWN0IHNjdHBfaWZhICpp
ZmEpOworI2VuZGlmCisKKyNpZmRlZiAgU0NUUF9QQUNLRVRfTE9HR0lORworCit2b2lkIHNjdHBf
cGFja2V0X2xvZyhzdHJ1Y3QgbWJ1ZiAqbSk7CitpbnQgc2N0cF9jb3B5X291dF9wYWNrZXRfbG9n
KHVpbnQ4X3QgKnRhcmdldCwgaW50IGxlbmd0aCk7CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQo
X19QYW5kYV9fKQordm9pZCBzY3RwX2FkZHJfY2hhbmdlKHN0cnVjdCBpZmFkZHIgKmlmYSwgaW50
IGNtZCk7CisjZW5kaWYKKwordm9pZCBzY3RwX2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhpbnQgKCpw
cmVkKShzdHJ1Y3QgaWZuZXQgKiksIGludCBhZGQpOworCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5jCmluZGV4IGU2OWRlMjliYjJkMWQ2
NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjhmYzU3YzdhZmYwYmZmOGFkZGUwZDVkNzkyY2Q5
NzY1MmE2ZGQ1ZTYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2NhbGxvdXQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0
LmMKQEAgLTAsMCArMSwyMjcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJT
RC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0
ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0
IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQg
bm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMs
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxzeXMvdHlwZXMu
aD4KKyNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNsdWRlIDxzeXMv
d2FpdC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKKyNpbmNsdWRlIDxzeXMvc2VsZWN0
Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNp
bmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dXNlcl9hdG9t
aWMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3BjYi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfY2FsbG91dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2Iu
aD4KKyNlbmRpZgorCisvKgorICogQ2FsbG91dC9UaW1lciByb3V0aW5lcyBmb3IgT1MgdGhhdCBk
b2Vzbid0IGhhdmUgdGhlbQorICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK3N0YXRpYyBpbnQgdGlja3MgPSAwOworI2Vsc2UKK2V4dGVybiBpbnQg
dGlja3M7CisjZW5kaWYKKworaW50IHNjdHBfZ2V0X3RpY2tfY291bnQodm9pZCkgeworCWludCBy
ZXQ7CisKKwlTQ1RQX1RJTUVSUV9MT0NLKCk7CisJcmV0ID0gdGlja3M7CisJU0NUUF9USU1FUlFf
VU5MT0NLKCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNDVFBfVElNRVJRX0xPQ0sgcHJv
dGVjdHM6CisgKiAtIFNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSkKKyAqIC0gc2N0cF9vc190aW1l
cl9uZXh0OiBuZXh0IHRpbWVyIHRvIGNoZWNrCisgKi8KK3N0YXRpYyBzY3RwX29zX3RpbWVyX3Qg
KnNjdHBfb3NfdGltZXJfbmV4dCA9IE5VTEw7CisKK3ZvaWQKK3NjdHBfb3NfdGltZXJfaW5pdChz
Y3RwX29zX3RpbWVyX3QgKmMpCit7CisJbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOworfQorCit2
b2lkCitzY3RwX29zX3RpbWVyX3N0YXJ0KHNjdHBfb3NfdGltZXJfdCAqYywgaW50IHRvX3RpY2tz
LCB2b2lkICgqZnRuKSAodm9pZCAqKSwKKyAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKQor
eworCS8qIHBhcmFub2lhICovCisJaWYgKChjID09IE5VTEwpIHx8IChmdG4gPT0gTlVMTCkpCisJ
ICAgIHJldHVybjsKKworCVNDVFBfVElNRVJRX0xPQ0soKTsKKwkvKiBjaGVjayB0byBzZWUgaWYg
d2UncmUgcmVzY2hlZHVsaW5nIGEgdGltZXIgKi8KKwlpZiAoYy0+Y19mbGFncyAmIFNDVFBfQ0FM
TE9VVF9QRU5ESU5HKSB7CisJCWlmIChjID09IHNjdHBfb3NfdGltZXJfbmV4dCkgeworCQkJc2N0
cF9vc190aW1lcl9uZXh0ID0gVEFJTFFfTkVYVChjLCB0cWUpOworCQl9CisJCVRBSUxRX1JFTU9W
RSgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSwgYywgdHFlKTsKKwkJLyoKKwkJICogcGFydCBv
ZiB0aGUgbm9ybWFsICJzdG9wIGEgcGVuZGluZyBjYWxsb3V0IiBwcm9jZXNzCisJCSAqIGlzIHRv
IGNsZWFyIHRoZSBDQUxMT1VUX0FDVElWRSBhbmQgQ0FMTE9VVF9QRU5ESU5HCisJCSAqIGZsYWdz
LiAgV2UgZG9uJ3QgYm90aGVyIHNpbmNlIHdlIGFyZSBzZXR0aW5nIHRoZXNlCisJCSAqIGJlbG93
IGFuZCB3ZSBzdGlsbCBob2xkIHRoZSBsb2NrLgorCQkgKi8KKwl9CisKKwkvKgorCSAqIFdlIGNv
dWxkIHVubG9jay9zcGx4IGhlcmUgYW5kIGxvY2svc3BsIGF0IHRoZSBUQUlMUV9JTlNFUlRfVEFJ
TCwKKwkgKiBidXQgdGhlcmUncyBubyBwb2ludCBzaW5jZSBkb2luZyB0aGlzIHNldHVwIGRvZXNu
J3QgdGFrZSBtdWNoIHRpbWUuCisJICovCisJaWYgKHRvX3RpY2tzIDw9IDApCisJCXRvX3RpY2tz
ID0gMTsKKworCWMtPmNfYXJnID0gYXJnOworCWMtPmNfZmxhZ3MgPSAoU0NUUF9DQUxMT1VUX0FD
VElWRSB8IFNDVFBfQ0FMTE9VVF9QRU5ESU5HKTsKKwljLT5jX2Z1bmMgPSBmdG47CisJYy0+Y190
aW1lID0gdGlja3MgKyB0b190aWNrczsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmU0NUUF9CQVNFX0lO
Rk8oY2FsbHF1ZXVlKSwgYywgdHFlKTsKKwlTQ1RQX1RJTUVSUV9VTkxPQ0soKTsKK30KKworaW50
CitzY3RwX29zX3RpbWVyX3N0b3Aoc2N0cF9vc190aW1lcl90ICpjKQoreworCVNDVFBfVElNRVJR
X0xPQ0soKTsKKwkvKgorCSAqIERvbid0IGF0dGVtcHQgdG8gZGVsZXRlIGEgY2FsbG91dCB0aGF0
J3Mgbm90IG9uIHRoZSBxdWV1ZS4KKwkgKi8KKwlpZiAoIShjLT5jX2ZsYWdzICYgU0NUUF9DQUxM
T1VUX1BFTkRJTkcpKSB7CisJCWMtPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9BQ1RJVkU7CisJ
CVNDVFBfVElNRVJRX1VOTE9DSygpOworCQlyZXR1cm4gKDApOworCX0KKwljLT5jX2ZsYWdzICY9
IH4oU0NUUF9DQUxMT1VUX0FDVElWRSB8IFNDVFBfQ0FMTE9VVF9QRU5ESU5HKTsKKwlpZiAoYyA9
PSBzY3RwX29zX3RpbWVyX25leHQpIHsKKwkJc2N0cF9vc190aW1lcl9uZXh0ID0gVEFJTFFfTkVY
VChjLCB0cWUpOworCX0KKwlUQUlMUV9SRU1PVkUoJlNDVFBfQkFTRV9JTkZPKGNhbGxxdWV1ZSks
IGMsIHRxZSk7CisJU0NUUF9USU1FUlFfVU5MT0NLKCk7CisJcmV0dXJuICgxKTsKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfaGFuZGxlX3RpY2soaW50IGRlbHRhKQoreworCXNjdHBfb3NfdGltZXJf
dCAqYzsKKwl2b2lkICgqY19mdW5jKSh2b2lkICopOworCXZvaWQgKmNfYXJnOworCisJU0NUUF9U
SU1FUlFfTE9DSygpOworCS8qIHVwZGF0ZSBvdXIgdGljayBjb3VudCAqLworCXRpY2tzICs9IGRl
bHRhOworCWMgPSBUQUlMUV9GSVJTVCgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSk7CisJd2hp
bGUgKGMpIHsKKwkJaWYgKGMtPmNfdGltZSA8PSB0aWNrcykgeworCQkJc2N0cF9vc190aW1lcl9u
ZXh0ID0gVEFJTFFfTkVYVChjLCB0cWUpOworCQkJVEFJTFFfUkVNT1ZFKCZTQ1RQX0JBU0VfSU5G
TyhjYWxscXVldWUpLCBjLCB0cWUpOworCQkJY19mdW5jID0gYy0+Y19mdW5jOworCQkJY19hcmcg
PSBjLT5jX2FyZzsKKwkJCWMtPmNfZmxhZ3MgJj0gflNDVFBfQ0FMTE9VVF9QRU5ESU5HOworCQkJ
U0NUUF9USU1FUlFfVU5MT0NLKCk7CisJCQljX2Z1bmMoY19hcmcpOworCQkJU0NUUF9USU1FUlFf
TE9DSygpOworCQkJYyA9IHNjdHBfb3NfdGltZXJfbmV4dDsKKwkJfSBlbHNlIHsKKwkJCWMgPSBU
QUlMUV9ORVhUKGMsIHRxZSk7CisJCX0KKwl9CisJc2N0cF9vc190aW1lcl9uZXh0ID0gTlVMTDsK
KwlTQ1RQX1RJTUVSUV9VTkxPQ0soKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQordm9p
ZAorc2N0cF90aW1lb3V0KHZvaWQgKmFyZyBTQ1RQX1VOVVNFRCkKK3sKKwlzY3RwX2hhbmRsZV90
aWNrKFNDVFBfQkFTRV9WQVIoc2N0cF9tYWluX3RpbWVyX3RpY2tzKSk7CisJc2N0cF9zdGFydF9t
YWluX3RpbWVyKCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNk
ZWZpbmUgVElNRU9VVF9JTlRFUlZBTCAxMAorCit2b2lkICoKK3VzZXJfc2N0cF90aW1lcl9pdGVy
YXRlKHZvaWQgKmFyZykKK3sKKwlzY3RwX3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUCB0
aW1lciIpOworCWZvciAoOzspIHsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQlTbGVlcChUSU1FT1VUX0lOVEVSVkFMKTsKKyNlbHNlCisJCXN0cnVjdCB0aW1ldmFsIHRp
bWVvdXQ7CisKKwkJdGltZW91dC50dl9zZWMgID0gMDsKKwkJdGltZW91dC50dl91c2VjID0gMTAw
MCAqIFRJTUVPVVRfSU5URVJWQUw7CisJCXNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCAmdGlt
ZW91dCk7CisjZW5kaWYKKwkJaWYgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfVkFSKHRp
bWVyX3RocmVhZF9zaG91bGRfZXhpdCksIDEsIDEpKSB7CisJCQlicmVhazsKKwkJfQorCQlzY3Rw
X2hhbmRsZV90aWNrKE1TRUNfVE9fVElDS1MoVElNRU9VVF9JTlRFUlZBTCkpOworCX0KKwlyZXR1
cm4gKE5VTEwpOworfQorCit2b2lkCitzY3RwX3N0YXJ0X3RpbWVyKHZvaWQpCit7CisJLyoKKwkg
KiBObyBuZWVkIHRvIGRvIFNDVFBfVElNRVJRX0xPQ0tfSU5JVCgpOworCSAqIGhlcmUsIGl0IGlz
IGJlaW5nIGRvbmUgaW4gc2N0cF9wY2JfaW5pdCgpCisJICovCisJaW50IHJjOworCisJcmMgPSBz
Y3RwX3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCks
IHVzZXJfc2N0cF90aW1lcl9pdGVyYXRlKTsKKwlpZiAocmMpIHsKKwkJU0NUUF9QUklOVEYoIkVS
Uk9SOyByZXR1cm4gY29kZSBmcm9tIHNjdHBfdGhyZWFkX2NyZWF0ZSgpIGlzICVkXG4iLCByYyk7
CisJfQorfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2NhbGxvdXQuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NhbGxv
dXQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43NjVm
OTY2YmQxYzMyMWE4MDAwM2U3NTYyZWI1NTMzNTQ5MDYyYjY3IDEwMDc1NQotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jYWxsb3V0LmgKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfY2FsbG91dC5oCkBAIC0wLDAgKzEsMTEwIEBACisvKi0KKyAqIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhl
bi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUg
b2YgdGhlIHByb2plY3Qgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRo
aXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5E
IENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9K
RUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICog
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgi
JEZyZWVCU0QkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0NBTExPVVRfCisj
ZGVmaW5lIF9ORVRJTkVUX1NDVFBfQ0FMTE9VVF8KKworLyoKKyAqIE5PVEU6IHRoZSBmb2xsb3dp
bmcgTUFDUk9TIGFyZSByZXF1aXJlZCBmb3IgbG9ja2luZyB0aGUgY2FsbG91dAorICogcXVldWUg
YWxvbmcgd2l0aCBhIGxvY2svbXV0ZXggaW4gdGhlIE9TIHNwZWNpZmljIGhlYWRlcnMgYW5kCisg
KiBpbXBsZW1lbnRhdGlvbiBmaWxlczo6CisgKiAtIFNDVFBfVElNRVJRX0xPQ0soKQorICogLSBT
Q1RQX1RJTUVSUV9VTkxPQ0soKQorICogLSBTQ1RQX1RJTUVSUV9MT0NLX0lOSVQoKQorICogLSBT
Q1RQX1RJTUVSUV9MT0NLX0RFU1RST1koKQorICovCisKKyNkZWZpbmUgX1NDVFBfTkVFRFNfQ0FM
TE9VVF8gMQorCisjZGVmaW5lIFNDVFBfVElDS1NfUEVSX0ZBU1RUSU1PIDIwCS8qIGNhbGxlZCBh
Ym91dCBldmVyeSAyMG1zICovCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLKCkg
ICAgICAgICAgRW50ZXJDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkK
KyNkZWZpbmUgU0NUUF9USU1FUlFfVU5MT0NLKCkgICAgICAgIExlYXZlQ3JpdGljYWxTZWN0aW9u
KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210eCkpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0tfSU5J
VCgpICAgICBJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfVkFSKHRpbWVyX210
eCkpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0tfREVTVFJPWSgpICBEZWxldGVDcml0aWNhbFNl
Y3Rpb24oJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKKyNlbHNlCisjaWZkZWYgSU5WQVJJQU5U
UworI2RlZmluZSBTQ1RQX1RJTUVSUV9MT0NLKCkgICAgICAgICAgS0FTU0VSVChwdGhyZWFkX211
dGV4X2xvY2soJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkgPT0gMCwgKCIlczogdGltZXJfbXR4
IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX1RJTUVSUV9VTkxPQ0so
KSAgICAgICAgS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX1ZBUih0aW1l
cl9tdHgpKSA9PSAwLCAoIiVzOiB0aW1lcl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNl
bHNlCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0soKSAgICAgICAgICAodm9pZClwdGhyZWFkX211
dGV4X2xvY2soJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkKKyNkZWZpbmUgU0NUUF9USU1FUlFf
VU5MT0NLKCkgICAgICAgICh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfVkFS
KHRpbWVyX210eCkpCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9USU1FUlFfTE9DS19JTklUKCkgICAg
ICh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX1ZBUih0aW1lcl9tdHgpLCAmU0NU
UF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfVElNRVJRX0xPQ0tfREVTVFJPWSgp
ICAodm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJlNDVFBfQkFTRV9WQVIodGltZXJfbXR4KSkK
KyNlbmRpZgorI2VuZGlmCisKK2ludCBzY3RwX2dldF90aWNrX2NvdW50KHZvaWQpOworCitUQUlM
UV9IRUFEKGNhbGxvdXRsaXN0LCBzY3RwX2NhbGxvdXQpOworCitzdHJ1Y3Qgc2N0cF9jYWxsb3V0
IHsKKwlUQUlMUV9FTlRSWShzY3RwX2NhbGxvdXQpIHRxZTsKKwlpbnQgY190aW1lOwkJLyogdGlj
a3MgdG8gdGhlIGV2ZW50ICovCisJdm9pZCAqY19hcmc7CQkvKiBmdW5jdGlvbiBhcmd1bWVudCAq
LworCXZvaWQgKCpjX2Z1bmMpKHZvaWQgKik7CS8qIGZ1bmN0aW9uIHRvIGNhbGwgKi8KKwlpbnQg
Y19mbGFnczsJCS8qIHN0YXRlIG9mIHRoaXMgZW50cnkgKi8KK307Cit0eXBlZGVmIHN0cnVjdCBz
Y3RwX2NhbGxvdXQgc2N0cF9vc190aW1lcl90OworCisjZGVmaW5lCVNDVFBfQ0FMTE9VVF9BQ1RJ
VkUJMHgwMDAyCS8qIGNhbGxvdXQgaXMgY3VycmVudGx5IGFjdGl2ZSAqLworI2RlZmluZQlTQ1RQ
X0NBTExPVVRfUEVORElORwkweDAwMDQJLyogY2FsbG91dCBpcyB3YWl0aW5nIGZvciB0aW1lb3V0
ICovCisKK3ZvaWQgc2N0cF9vc190aW1lcl9pbml0KHNjdHBfb3NfdGltZXJfdCAqdG1yKTsKK3Zv
aWQgc2N0cF9vc190aW1lcl9zdGFydChzY3RwX29zX3RpbWVyX3QgKiwgaW50LCB2b2lkICgqKSh2
b2lkICopLCB2b2lkICopOworaW50IHNjdHBfb3NfdGltZXJfc3RvcChzY3RwX29zX3RpbWVyX3Qg
Kik7CisKKyNkZWZpbmUgU0NUUF9PU19USU1FUl9JTklUCXNjdHBfb3NfdGltZXJfaW5pdAorI2Rl
ZmluZSBTQ1RQX09TX1RJTUVSX1NUQVJUCXNjdHBfb3NfdGltZXJfc3RhcnQKKyNkZWZpbmUgU0NU
UF9PU19USU1FUl9TVE9QCXNjdHBfb3NfdGltZXJfc3RvcAorLyogTVQgRklYTUU6IElzIHRoZSBm
b2xsb3dpbmcgY29ycmVjdD8gKi8KKyNkZWZpbmUgU0NUUF9PU19USU1FUl9TVE9QX0RSQUlOIFND
VFBfT1NfVElNRVJfU1RPUAorI2RlZmluZQlTQ1RQX09TX1RJTUVSX1BFTkRJTkcodG1yKSAoKHRt
ciktPmNfZmxhZ3MgJiBTQ1RQX0NBTExPVVRfUEVORElORykKKyNkZWZpbmUJU0NUUF9PU19USU1F
Ul9BQ1RJVkUodG1yKSAoKHRtciktPmNfZmxhZ3MgJiBTQ1RQX0NBTExPVVRfQUNUSVZFKQorI2Rl
ZmluZQlTQ1RQX09TX1RJTUVSX0RFQUNUSVZBVEUodG1yKSAoKHRtciktPmNfZmxhZ3MgJj0gflND
VFBfQ0FMTE9VVF9BQ1RJVkUpCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkIHNj
dHBfc3RhcnRfdGltZXIodm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3Zv
aWQgc2N0cF90aW1lb3V0KHZvaWQgKik7CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jY19mdW5jdGlvbnMuYyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NjX2Z1bmN0aW9ucy5jCmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmU1M2U0ZDc0N2YzMjE4OTA0YWFlZTUzYWY4
YTJhYWNmMjc1N2M5ZTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2NjX2Z1bmN0aW9ucy5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2NjX2Z1bmN0aW9ucy5jCkBAIC0wLDAgKzEsMjUwOCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcs
IGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq
CisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2Yg
Q2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2NjX2Z1
bmN0aW9ucy5jIDMxMDU5MCAyMDE2LTEyLTI2IDExOjA2OjQxWiB0dWV4ZW4gJCIpOworI2VuZGlm
CisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
dmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
aW5kYXRhLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Vpby5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9kdHJhY2Vf
ZGVjbGFyZS5oPgorI2VuZGlmCisKKyNkZWZpbmUgU0hJRlRfTVBUQ1BfTVVMVElfTiA0MAorI2Rl
ZmluZSBTSElGVF9NUFRDUF9NVUxUSV9aIDE2CisjZGVmaW5lIFNISUZUX01QVENQX01VTFRJIDgK
Kworc3RhdGljIHZvaWQKK3NjdHBfZW5mb3JjZV9jd25kX2xpbWl0KHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc3NvYywgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWlmICgoYXNzb2MtPm1h
eF9jd25kID4gMCkgJiYKKwkgICAgKG5ldC0+Y3duZCA+IGFzc29jLT5tYXhfY3duZCkgJiYKKwkg
ICAgKG5ldC0+Y3duZCA+IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSkgewor
CQluZXQtPmN3bmQgPSBhc3NvYy0+bWF4X2N3bmQgOworCQlpZiAobmV0LT5jd25kIDwgKG5ldC0+
bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkpIHsKKwkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3Nj
dHBfc2V0X2luaXRpYWxfY2NfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzc29jOworCXVpbnQz
Ml90IGN3bmRfaW5fbXR1OworCisJYXNzb2MgPSAmc3RjYi0+YXNvYzsKKwljd25kX2luX210dSA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpOworCWlmIChjd25kX2luX210dSA9
PSAwKSB7CisJCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUgb2YgUkZDIDQ5NjAgaXMg
dXNlZC4gKi8KKwkJbmV0LT5jd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQt
Pm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgdGFr
ZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRoZQorCQkgKiBpbml0aWFsIGNv
bmdlc3Rpb24gd2luZG93LgorCQkgKi8KKwkJaWYgKChhc3NvYy0+bWF4X2J1cnN0ID4gMCkgJiYg
KGN3bmRfaW5fbXR1ID4gYXNzb2MtPm1heF9idXJzdCkpCisJCQljd25kX2luX210dSA9IGFzc29j
LT5tYXhfYnVyc3Q7CisJCW5ldC0+Y3duZCA9IChuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcikpICogY3duZF9pbl9tdHU7CisJfQorCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9v
ZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2Zm
ID09IFNDVFBfQ01UX1JQVjIpKSB7CisJCS8qIEluIGNhc2Ugb2YgcmVzb3VyY2UgcG9vbGluZyBp
bml0aWFsaXplIGFwcHJvcHJpYXRlbHkgKi8KKwkJbmV0LT5jd25kIC89IGFzc29jLT5udW1uZXRz
OworCQlpZiAobmV0LT5jd25kIDwgKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkp
IHsKKwkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJ
fQorCX0KKwlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc3NvYywgbmV0KTsKKwluZXQtPnNzdGhy
ZXNoID0gYXNzb2MtPnBlZXJzX3J3bmQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIGlu
aXQsCisJICAgICAgICAgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCisJICAgICAgICAgIDAsIG5ldC0+
Y3duZCk7CisjZW5kaWYKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYKKwkgICAgKFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRXxTQ1RQX0NXTkRfTE9HR0lOR19FTkFC
TEUpKSB7CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfSU5JVElBTEla
QVRJT04pOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIo
c3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJdWlu
dDMyX3QgdF9zc3RocmVzaCwgdF9jd25kOworCXVpbnQ2NF90IHRfdWN3bmRfc2J3OworCisJLyog
TVQgRklYTUU6IERvbid0IGNvbXB1dGUgdGhpcyBvdmVyIGFuZCBvdmVyIGFnYWluICovCisJdF9z
c3RocmVzaCA9IDA7CisJdF9jd25kID0gMDsKKwl0X3Vjd25kX3NidyA9IDA7CisJaWYgKChhc29j
LT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKGFzb2MtPnNjdHBf
Y210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYyKSkgeworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJdF9zc3RocmVzaCArPSBuZXQtPnNzdGhyZXNoOwor
CQkJdF9jd25kICs9IG5ldC0+Y3duZDsKKwkJCWlmIChuZXQtPmxhc3RzYSA+IDApIHsKKwkJCQl0
X3Vjd25kX3NidyArPSAodWludDY0X3QpbmV0LT5jd25kIC8gKHVpbnQ2NF90KW5ldC0+bGFzdHNh
OworCQkJfQorCQl9CisJCWlmICh0X3Vjd25kX3NidyA9PSAwKSB7CisJCQl0X3Vjd25kX3NidyA9
IDE7CisJCX0KKwl9CisKKwkvKi0KKwkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRv
IGRlYnVnLiAoKHNjdHBfY210X29uX29mZiA+IDApICYmCisJICogKG5ldC0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSA9PSAwKSkpCisJICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5u
ZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5
ID09IDApIHx8CisJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkpIHsKKwkJCS8qIG91
dCBvZiBhIFJGQzI1ODIgRmFzdCByZWNvdmVyeSB3aW5kb3c/ICovCisJCQlpZiAobmV0LT5uZXRf
YWNrID4gMCkgeworCQkJCS8qCisJCQkJICogcGVyIHNlY3Rpb24gNy4yLjMsIGFyZSB0aGVyZSBh
bnkKKwkJCQkgKiBkZXN0aW5hdGlvbnMgdGhhdCBoYWQgYSBmYXN0IHJldHJhbnNtaXQKKwkJCQkg
KiB0byB0aGVtLiBJZiBzbyB3aGF0IHdlIG5lZWQgdG8gZG8gaXMKKwkJCQkgKiBhZGp1c3Qgc3N0
aHJlc2ggYW5kIGN3bmQuCisJCQkJICovCisJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqbGNo
azsKKwkJCQlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwkJCQlpZiAoKGFzb2MtPnNjdHBf
Y210X29uX29mZiA9PSBTQ1RQX0NNVF9SUFYxKSB8fAorCQkJCSAgICAoYXNvYy0+c2N0cF9jbXRf
b25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7CisJCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9v
ZmYgPT0gU0NUUF9DTVRfUlBWMSkgeworCQkJCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCko
KCh1aW50NjRfdCk0ICoKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNoKTsKKworCQkJCQl9CisJCQkJCWlmIChhc29j
LT5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMikgeworCQkJCQkJdWludDMyX3Qgc3J0
dDsKKworCQkJCQkJc3J0dCA9IG5ldC0+bGFzdHNhOworCQkJCQkJLyogbGFzdHNhPj4zOyAgd2Ug
ZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8KKwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJ
CQlzcnR0ID0gMTsKKwkJCQkJCX0KKwkJCQkJCS8qIFNob3J0IFZlcnNpb24gPT4gRXF1YWwgdG8g
Q29udGVsIFZlcnNpb24gTUJlICovCisJCQkJCQluZXQtPnNzdGhyZXNoID0gKHVpbnQzMl90KSAo
KCh1aW50NjRfdCk0ICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KW5ldC0+bXR1ICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ2
NF90KW5ldC0+Y3duZCkgLworCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWlu
dDY0X3Qpc3J0dCAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRfdWN3bmRf
c2J3KSk7CisJCQkJCQkJCQkgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLzsKKwkJCQkJfQorCQkJ
CQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCisJCQkJCSAgICAobmV0LT5zc3RocmVz
aCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7CisJCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0
LT5jd25kIC0gdF9jd25kIC8gMjsKKwkJCQkJfQorCQkJCQlpZiAobmV0LT5zc3RocmVzaCA8IG5l
dC0+bXR1KSB7CisJCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kIC8gMjsKKwkJCQkJaWYgKG5l
dC0+c3N0aHJlc2ggPCAobmV0LT5tdHUgKiAyKSkgeworCQkJCQkJbmV0LT5zc3RocmVzaCA9IDIg
KiBuZXQtPm10dTsKKwkJCQkJfQorCQkJCX0KKwkJCQluZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNo
OworCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KGFzb2MsIG5ldCk7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkJU0RUX1BST0JF
NShzY3RwLCBjd25kLCBuZXQsIGZyLAorCQkJCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywgKChzdGNi
LT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLCBuZXQsCisJCQkJ
CSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJ
CXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAorCQkJCQkJ
U0NUUF9DV05EX0xPR19GUk9NX0ZSKTsKKwkJCQl9CisJCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5zZW5kX3F1ZXVlKTsKKworCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJ
CQkJLyogVHVybiBvbiBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLworCQkJCWFzb2MtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCQkJCWlmIChsY2hrID09IE5VTEwpIHsKKwkJCQkJLyog
TWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9
IGFzb2MtPnNlbmRpbmdfc2VxIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5mYXN0X3Jl
Y292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJLyoKKwkJ
CQkgKiBDTVQgZmFzdCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KKwkJCQkgKiByZWNvdmVy
eSB2YXJpYWJsZS4KKwkJCQkgKi8KKwkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zlcnkg
PSAxOworCisJCQkJaWYgKGxjaGsgPT0gTlVMTCkgeworCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUg
d2luZG93ICovCisJCQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3Nl
cSAtIDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGst
PnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElN
RVJfVFlQRV9TRU5ELAorCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18xKTsKKwkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJIHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCk7CisJCQl9CisJCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkg
eworCQkJLyoKKwkJCSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25k
CisJCQkgKiByZWR1Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgorCQkJ
ICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKKwkJfQorCX0K
K30KKworLyogRGVmaW5lcyBmb3IgaW5zdGFudGFuZW91cyBidyBkZWNpc2lvbnMgKi8KKyNkZWZp
bmUgU0NUUF9JTlNUX0xPT1NJTkcgMSAvKiBMb3NpbmcgdG8gb3RoZXIgZmxvd3MgKi8KKyNkZWZp
bmUgU0NUUF9JTlNUX05FVVRSQUwgMiAvKiBOZXV0cmFsLCBubyBpbmRpY2F0aW9uICovCisjZGVm
aW5lIFNDVFBfSU5TVF9HQUlOSU5HIDMgLyogR2FpbmluZywgc3RlcCBkb3duIHBvc3NpYmxlICov
CisKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MzAwMAorc3RhdGljIGludAorY2NfYndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LAorCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQs
IHVpbnQ2NF90IHZ0YWcsIHVpbnQ4X3QgaW5zdF9pbmQpCisjZWxzZQorc3RhdGljIGludAorY2Nf
Yndfc2FtZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCwgdWludDY0X3QgbmJ3LAorCSAgIHVpbnQ2NF90IHJ0dF9vZmZzZXQsIHVpbnQ4X3Qg
aW5zdF9pbmQpCisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA4MDMwMDAKKwl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7CisjZW5kaWYK
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAw
MAorCXByb2JlcG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKKyNlbmRpZgor
CWlmIChuZXQtPnJ0dCA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCArIHJ0dF9vZmZzZXQpIHsK
KwkJLyoKKwkJICogcnR0IGluY3JlYXNlZAorCQkgKiB3ZSBkb24ndCB1cGRhdGUgYncuLiBzbyB3
ZSBkb24ndAorCQkgKiB1cGRhdGUgdGhlIHJ0dCBlaXRoZXIuCisJCSAqLworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkvKiBQcm9iZSBw
b2ludCA1ICovCisJCXByb2JlcG9pbnQgfD0gICgoNSA8PCAxNikgfCAxKTsKKwkJU0RUX1BST0JF
NShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKKwkJCSAgdnRhZywKKwkJCSAgKChuZXQtPmNjX21v
ZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0
dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkgIHByb2Jl
cG9pbnQpOworI2VuZGlmCisJCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYg
KGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgeworCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0
Y2MubGFzdF9zdGVwX3N0YXRlID09IDUpCisJCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCsr
OworCQkJZWxzZQorCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAxOworCQkJbmV0LT5j
Y19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSA1OworCQkJaWYgKChuZXQtPmNjX21vZC5ydGNj
LnN0ZXBfY250ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8CisJCQkgICAgKChu
ZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID4gbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkg
JiYKKwkJCSAgICAgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ICUgbmV0LT5jY19tb2QucnRj
Yy5zdGVhZHlfc3RlcCkgPT0gMCkpKSB7CisJCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkJ
b3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOworCQkJCW90aCA8PD0gMTY7CisJCQkJ
b3RoIHw9IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7CisJCQkJb3RoIDw8PSAxNjsKKwkJCQlv
dGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7CisJCQkJU0RUX1BST0JFNShz
Y3RwLCBjd25kLCBuZXQsIHJ0dHN0ZXAsCisJCQkJCSAgdnRhZywKKwkJCQkJICAoKG5ldC0+Y2Nf
bW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxi
d19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCQkgIG90aCwKKwkJCQkJICBwcm9iZXBvaW50
KTsKKyNlbmRpZgorCQkJCWlmIChuZXQtPmN3bmQgPiAoNCAqIG5ldC0+bXR1KSkgeworCQkJCQlu
ZXQtPmN3bmQgLT0gbmV0LT5tdHU7CisJCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSsr
OworCQkJCX0gZWxzZSB7CisJCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOworCQkJ
CX0KKwkJCX0KKwkJfQorCQlyZXR1cm4gKDEpOworCX0KKwlpZiAobmV0LT5ydHQgPCBuZXQtPmNj
X21vZC5ydGNjLmxid19ydHQtcnR0X29mZnNldCkgeworCQkvKgorCQkgKiBydHQgZGVjcmVhc2Vk
LCB0aGVyZSBjb3VsZCBiZSBtb3JlIHJvb20uCisJCSAqIHdlIHVwZGF0ZSBib3RoIHRoZSBidyBh
bmQgdGhlIHJ0dCBoZXJlIHRvCisJCSAqIGxvY2sgdGhpcyBpbiBhcyBhIGdvb2Qgc3RlcCBkb3du
LgorCQkgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDMwMDAKKwkJLyogUHJvYmUgcG9pbnQgNiAqLworCQlwcm9iZXBvaW50IHw9ICAoKDYgPDwg
MTYpIHwgMCk7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCQkgIHZ0
YWcsCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCSAgKChu
ZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJICBuZXQtPmZs
aWdodF9zaXplLAorCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQlpZiAobmV0LT5jY19tb2Qu
cnRjYy5zdGVhZHlfc3RlcCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMzAwMAorCQkJb3RoID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNl
OworCQkJb3RoIDw8PSAxNjsKKwkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250Owor
CQkJb3RoIDw8PSAxNjsKKwkJCW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0
ZTsKKwkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHRzdGVwLAorCQkJCSAgdnRhZywK
KwkJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCQkgICgobmV0
LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkgIG90aCwKKwkJ
CQkgIHByb2JlcG9pbnQpOworI2VuZGlmCisJCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9z
dGVwX3N0YXRlID09IDUpICYmCisJCQkgICAgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPiBu
ZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSkgeworCQkJCS8qIFN0ZXAgZG93biB3b3JrZWQg
Ki8KKwkJCQluZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250ID0gMDsKKwkJCQlyZXR1cm4gKDEpOwor
CQkJfSBlbHNlIHsKKwkJCQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDY7CisJ
CQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJCQl9CisJCX0KKwkJbmV0LT5jY19t
b2QucnRjYy5sYncgPSBuYnc7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+cnR0
OworCQluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOworCQlpZiAo
aW5zdF9pbmQgPT0gU0NUUF9JTlNUX0dBSU5JTkcpCisJCQlyZXR1cm4gKDEpOworCQllbHNlIGlm
IChpbnN0X2luZCA9PSBTQ1RQX0lOU1RfTkVVVFJBTCkKKwkJCXJldHVybiAoMSk7CisJCWVsc2UK
KwkJCXJldHVybiAoMCk7CisJfQorCS8qIE9rIGJ3IGFuZCBydHQgcmVtYWluZWQgdGhlIHNhbWUg
Li4gbm8gdXBkYXRlIHRvIGFueQorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCS8qIFByb2JlIHBvaW50IDcgKi8KKwlwcm9iZXBv
aW50IHw9ICAoKDcgPDwgMTYpIHwgbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSk7CisJU0RU
X1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHJ0dHZhciwKKwkJICB2dGFnLAorCQkgICgobmV0LT5j
Y19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3
X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJICBwcm9i
ZXBvaW50KTsKKyNlbmRpZgorCWlmICgobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkgJiYg
KGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09TSU5HKSkgeworCQlpZiAobmV0LT5jY19tb2QucnRj
Yy5sYXN0X3N0ZXBfc3RhdGUgPT0gNSkKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQrKzsK
KwkJZWxzZQorCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDE7CisJCW5ldC0+Y2NfbW9k
LnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gNTsKKwkJaWYgKChuZXQtPmNjX21vZC5ydGNjLnN0ZXBf
Y250ID09IG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHx8CisJCSAgICAoKG5ldC0+Y2Nf
bW9kLnJ0Y2Muc3RlcF9jbnQgPiBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSAmJgorCQkg
ICAgICgobmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCAlIG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5
X3N0ZXApID09IDApKSkgeworCQkJLyogVHJ5IGEgc3RlcCBkb3duICovCisJCQlpZiAobmV0LT5j
d25kID4gKDQgKiBuZXQtPm10dSkpIHsKKwkJCQluZXQtPmN3bmQgLT0gbmV0LT5tdHU7CisJCQkJ
bmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlKys7CisJCQkJcmV0dXJuICgxKTsKKwkJCX0gZWxz
ZSB7CisJCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJCQl9CisJCX0KKwl9CisJ
aWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKQorCQlyZXR1cm4gKDEpOworCWVsc2Ug
aWYgKGluc3RfaW5kID09IFNDVFBfSU5TVF9ORVVUUkFMKQorCQlyZXR1cm4gKDEpOworCWVsc2UK
KwkJcmV0dXJuICgoaW50KW5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpOworfQorCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCitzdGF0
aWMgaW50CitjY19id19kZWNyZWFzZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwgdWludDY0X3QgbmJ3LCB1aW50NjRfdCBydHRfb2Zmc2V0LAorCSAgICAgICB1
aW50NjRfdCB2dGFnLCB1aW50OF90IGluc3RfaW5kKQorI2Vsc2UKK3N0YXRpYyBpbnQKK2NjX2J3
X2RlY3JlYXNlKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0LCB1aW50NjRfdCBuYncsIHVpbnQ2NF90IHJ0dF9vZmZzZXQsCisJICAgICAgIHVp
bnQ4X3QgaW5zdF9pbmQpCisjZW5kaWYKK3sKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwl1aW50NjRfdCBvdGgsIHByb2JlcG9pbnQ7Cisj
ZW5kaWYKKworCS8qIEJhbmR3aWR0aCBkZWNyZWFzZWQuKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwlwcm9iZXBvaW50ID0gKCgodWlu
dDY0X3QpbmV0LT5jd25kKSA8PCAzMik7CisjZW5kaWYKKwlpZiAobmV0LT5ydHQgID4gbmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0K3J0dF9vZmZzZXQpIHsKKwkJLyogcnR0IGluY3JlYXNlZCAqLwor
CQkvKiBEaWQgd2UgYWRkIG1vcmUgKi8KKwkJaWYgKChuZXQtPmN3bmQgPiBuZXQtPmNjX21vZC5y
dGNjLmN3bmRfYXRfYndfc2V0KSAmJgorCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9MT09T
SU5HKSkgeworCQkJLyogV2UgY2F1c2VkIGl0IG1heWJlLi4gYmFjayBvZmY/ICovCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkvKiBQ
Uk9CRSBQT0lOVCAxICovCisJCQlwcm9iZXBvaW50IHw9ICAoKDEgPDwgMTYpIHwgMSk7CisJCQlT
RFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJCSAgdnRhZywKKwkJCQkgICgo
bmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgbmJ3KSwKKwkJCQkgICgobmV0LT5jY19tb2Qu
cnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUs
CisJCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQkJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2MucmV0
X2Zyb21fZXEpIHsKKwkJCQkvKiBTd2l0Y2ggb3ZlciB0byBDQSBpZiB3ZSBhcmUgbGVzcyBhZ2dy
ZXNzaXZlICovCisJCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZC0xOworCQkJCW5ldC0+cGFy
dGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCQl9CisJCQlyZXR1cm4gKDEpOworCQl9CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCS8qIFBy
b2JlIHBvaW50IDIgKi8KKwkJcHJvYmVwb2ludCB8PSAgKCgyIDw8IDE2KSB8IDApOworCQlTRFRf
UFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAorCQkJICAoKG5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5s
YndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAg
cHJvYmVwb2ludCk7CisjZW5kaWYKKwkJLyogU29tZW9uZSBlbHNlIC0gZmlnaHQgZm9yIG1vcmU/
ICovCisJCWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQlvdGggPSBuZXQt
PmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+
Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQ7CisJCQlvdGggPDw9IDE2OworCQkJb3RoIHw9IG5ldC0+Y2Nf
bW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOworCQkJU0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQs
IHJ0dHN0ZXAsCisJCQkJICB2dGFnLAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAz
MikgfCBuYncpLAorCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPDwgMzIpIHwgbmV0
LT5ydHQpLAorCQkJCSAgb3RoLAorCQkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCS8qIERp
ZCB3ZSB2b2x1bnRhcmlseSBnaXZlIHVwIHNvbWU/IGlmIHNvIHRha2UKKwkJCSAqIG9uZSBiYWNr
IHBsZWFzZQorCQkJICovCisJCQlpZiAoKG5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSkgJiYK
KwkJCSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNUX0dBSU5JTkcpKSB7CisJCQkJbmV0LT5jd25k
ICs9IG5ldC0+bXR1OworCQkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBu
ZXQpOworCQkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZS0tOworCQkJfQorCQkJbmV0LT5j
Y19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAyOworCQkJbmV0LT5jY19tb2QucnRjYy5zdGVw
X2NudCA9IDA7CisJCX0KKwkJZ290byBvdXRfZGVjaXNpb247CisJfSBlbHNlICBpZiAobmV0LT5y
dHQgIDwgbmV0LT5jY19tb2QucnRjYy5sYndfcnR0LXJ0dF9vZmZzZXQpIHsKKwkJLyogYncgJiBy
dHQgZGVjcmVhc2VkICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAzMDAwCisJCS8qIFByb2JlIHBvaW50IDMgKi8KKwkJcHJvYmVwb2ludCB8PSAg
KCgzIDw8IDE2KSB8IDApOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAor
CQkJICB2dGFnLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJ
CQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJCSAg
bmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJaWYgKG5ldC0+
Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCW90aCA9IG5ldC0+Y2NfbW9kLnJ0Y2Mudm9s
X3JlZHVjZTsKKwkJCW90aCA8PD0gMTY7CisJCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5zdGVw
X2NudDsKKwkJCW90aCA8PD0gMTY7CisJCQlvdGggfD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0
ZXBfc3RhdGU7CisJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0c3RlcCwKKwkJCQkg
IHZ0YWcsCisJCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCQkJ
ICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQtPnJ0dCksCisJCQkJICBv
dGgsCisJCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQkJaWYgKChuZXQtPmNjX21vZC5ydGNj
LnZvbF9yZWR1Y2UpICYmCisJCQkgICAgKGluc3RfaW5kICE9IFNDVFBfSU5TVF9HQUlOSU5HKSkg
eworCQkJCW5ldC0+Y3duZCArPSBuZXQtPm10dTsKKwkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1p
dCgmc3RjYi0+YXNvYywgbmV0KTsKKwkJCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UtLTsK
KwkJCX0KKwkJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gMzsKKwkJCW5ldC0+
Y2NfbW9kLnJ0Y2Muc3RlcF9jbnQgPSAwOworCQl9CisJCWdvdG8gb3V0X2RlY2lzaW9uOworCX0K
KwkvKiBUaGUgYncgZGVjcmVhc2VkIGJ1dCBydHQgc3RheWVkIHRoZSBzYW1lICovCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJLyogUHJv
YmUgcG9pbnQgNCAqLworCXByb2JlcG9pbnQgfD0gICgoNCA8PCAxNikgfCAwKTsKKwlTRFRfUFJP
QkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkgIHZ0YWcsCisJCSAgKChuZXQtPmNjX21v
ZC5ydGNjLmxidyA8PCAzMikgfCBuYncpLAorCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0
IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJICBuZXQtPmZsaWdodF9zaXplLAorCQkgIHByb2JlcG9p
bnQpOworI2VuZGlmCisJaWYgKG5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXApIHsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJb3Ro
ID0gbmV0LT5jY19tb2QucnRjYy52b2xfcmVkdWNlOworCQlvdGggPDw9IDE2OworCQlvdGggfD0g
bmV0LT5jY19tb2QucnRjYy5zdGVwX2NudDsKKwkJb3RoIDw8PSAxNjsKKwkJb3RoIHw9IG5ldC0+
Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlOworCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5l
dCwgcnR0c3RlcCwKKwkJCSAgdnRhZywKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxidyA8PCAz
MikgfCBuYncpLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA8PCAzMikgfCBuZXQt
PnJ0dCksCisJCQkgIG90aCwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJaWYgKChuZXQt
PmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UpICYmCisJCSAgICAoaW5zdF9pbmQgIT0gU0NUUF9JTlNU
X0dBSU5JTkcpKSB7CisJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQlzY3RwX2VuZm9yY2Vf
Y3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKKwkJCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3Jl
ZHVjZS0tOworCQl9CisJCW5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9zdGVwX3N0YXRlID0gNDsKKwkJ
bmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJfQorb3V0X2RlY2lzaW9uOgorCW5ldC0+
Y2NfbW9kLnJ0Y2MubGJ3ID0gbmJ3OworCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA9IG5ldC0+
cnR0OworCW5ldC0+Y2NfbW9kLnJ0Y2MuY3duZF9hdF9id19zZXQgPSBuZXQtPmN3bmQ7CisJaWYg
KGluc3RfaW5kID09IFNDVFBfSU5TVF9HQUlOSU5HKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNl
IHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKK3N0YXRpYyBpbnQKK2NjX2J3X2luY3JlYXNlKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncs
IHVpbnQ2NF90IHZ0YWcpCisjZWxzZQorc3RhdGljIGludAorY2NfYndfaW5jcmVhc2Uoc3RydWN0
IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQ2
NF90IG5idykKKyNlbmRpZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMzAwMAorCXVpbnQ2NF90IG90aCwgcHJvYmVwb2ludDsKKworI2VuZGlm
CisJLyogQlcgaW5jcmVhc2VkLCBzbyB1cGRhdGUgYW5kCisJICogcmV0dXJuIDAsIHNpbmNlIGFs
bCBhY3Rpb25zIGluCisJICogb3VyIHRhYmxlIHNheSB0byBkbyB0aGUgbm9ybWFsIENDCisJICog
dXBkYXRlLiBOb3RlIHRoYXQgd2UgcGF5IG5vIGF0dGVudGlvbiB0bworCSAqIHRoZSBpbnN0X2lu
ZCBzaW5jZSBvdXIgb3ZlcmFsbCBzdW0gaXMgaW5jcmVhc2luZy4KKwkgKi8KKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkvKiBQUk9CRSBQ
T0lOVCAwICovCisJcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOwor
CVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIsCisJCSAgdnRhZywKKwkJICAoKG5l
dC0+Y2NfbW9kLnJ0Y2MubGJ3IDw8IDMyKSB8IG5idyksCisJCSAgKChuZXQtPmNjX21vZC5ydGNj
Lmxid19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCSAg
cHJvYmVwb2ludCk7CisjZW5kaWYKKwlpZiAobmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCkg
eworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAw
MAorCQlvdGggPSBuZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2U7CisJCW90aCA8PD0gMTY7CisJ
CW90aCB8PSBuZXQtPmNjX21vZC5ydGNjLnN0ZXBfY250OworCQlvdGggPDw9IDE2OworCQlvdGgg
fD0gbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGU7CisJCVNEVF9QUk9CRTUoc2N0cCwg
Y3duZCwgbmV0LCBydHRzdGVwLAorCQkJICB2dGFnLAorCQkJICAoKG5ldC0+Y2NfbW9kLnJ0Y2Mu
bGJ3IDw8IDMyKSB8IG5idyksCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMy
KSB8IG5ldC0+cnR0KSwKKwkJCSAgb3RoLAorCQkJICBwcm9iZXBvaW50KTsKKyNlbmRpZgorCQlu
ZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2Mu
c3RlcF9jbnQgPSAwOworCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2UgPSAwOworCX0KKwlu
ZXQtPmNjX21vZC5ydGNjLmxidyA9IG5idzsKKwluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBu
ZXQtPnJ0dDsKKwluZXQtPmNjX21vZC5ydGNjLmN3bmRfYXRfYndfc2V0ID0gbmV0LT5jd25kOwor
CXJldHVybiAoMCk7Cit9CisKKy8qIFJUQ0MgQWxnb3JpdGhtIHRvIGxpbWl0IGdyb3d0aCBvZiBj
d25kLCByZXR1cm4KKyAqIHRydWUgaWYgeW91IHdhbnQgdG8gTk9UIGFsbG93IGN3bmQgZ3Jvd3Ro
CisgKi8KK3N0YXRpYyBpbnQKK2NjX2J3X2xpbWl0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50NjRfdCBuYncpCit7CisJdWludDY0X3QgYndfb2Zmc2V0
LCBydHRfb2Zmc2V0OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uID49IDgwMzAwMAorCXVpbnQ2NF90IHByb2JlcG9pbnQsIHJ0dCwgdnRhZzsKKyNlbmRpZgor
CXVpbnQ2NF90IGJ5dGVzX2Zvcl90aGlzX3J0dCwgaW5zdF9idzsKKwl1aW50NjRfdCBkaXYsIGlu
c3Rfb2ZmOworCWludCBid19zaGlmdDsKKwl1aW50OF90IGluc3RfaW5kOworCWludCByZXQ7CisJ
LyotCisJICogSGVyZSB3ZSBuZWVkIHRvIHNlZSBpZiB3ZSB3YW50CisJICogdG8gbGltaXQgY3du
ZCBncm93dGggZHVlIHRvIGluY3JlYXNlCisJICogaW4gb3ZlcmFsbCBydHQgYnV0IG5vIGluY3Jl
YXNlIGluIGJ3LgorCSAqIFdlIHVzZSB0aGUgZm9sbG93aW5nIHRhYmxlIHRvIGZpZ3VyZQorCSAq
IG91dCB3aGF0IHdlIHNob3VsZCBkby4gV2hlbiB3ZSByZXR1cm4KKwkgKiAwLCBjYyB1cGRhdGUg
Z29lcyBvbiBhcyBwbGFubmVkLiBJZiB3ZQorCSAqIHJldHVybiAxLCB0aGVuIG5vIGNjIHVwZGF0
ZSBoYXBwZW5zIGFuZCBjd25kCisJICogc3RheXMgd2hlcmUgaXQgaXMgYXQuCisJICogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgQlcgICAgfCAgICBSVFQgICB8IEFj
dGlvbgorCSAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCSAqICAgSU5DICAg
fCAgICBJTkMgICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCSAqICAgSU5DICAgfCAgICBTQU1FICB8IHJldHVybiAwCisJICogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgSU5DICAgfCAgICBERUNSICB8IHJldHVybiAw
CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAgfCAg
ICBJTkMgICB8IHJldHVybiAxCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCSAqICAgU0FNRSAgfCAgICBTQU1FICB8IHJldHVybiAxCisJICogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgU0FNRSAgfCAgICBERUNSICB8IHJldHVybiAwCisJ
ICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgREVDUiAgfCAgICBJ
TkMgICB8IHJldHVybiAwIG9yIDEgYmFzZWQgb24gaWYgd2UgY2F1c2VkLgorCSAqIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIERFQ1IgIHwgICAgU0FNRSAgfCByZXR1
cm4gMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIERFQ1Ig
IHwgICAgREVDUiAgfCByZXR1cm4gMAorCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKgorCSAqIFdlIGFyZSBhIGJpdCBmdXp6IG9uIHdoYXQgYW4gaW5jcmVhc2Ugb3IK
KwkgKiBkZWNyZWFzZSBpcy4gRm9yIEJXIGl0IGlzIHRoZSBzYW1lIGlmCisJICogaXQgZGlkIG5v
dCBjaGFuZ2Ugd2l0aGluIDEvNjR0aC4gRm9yCisJICogUlRUIGl0IHN0YXllZCB0aGUgc2FtZSBp
ZiBpdCBkaWQgbm90CisJICogY2hhbmdlIHdpdGhpbiAxLzMybmQKKwkgKi8KKwlid19zaGlmdCA9
IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCXJ0dCA9IHN0Y2ItPmFzb2MubXlf
dnRhZzsKKwl2dGFnID0gKHJ0dCA8PCAzMikgfCAoKCh1aW50MzJfdCkoc3RjYi0+c2N0cF9lcC0+
c2N0cF9scG9ydCkpIDw8IDE2KSB8IChzdGNiLT5ycG9ydCk7CisJcHJvYmVwb2ludCA9ICgoKHVp
bnQ2NF90KW5ldC0+Y3duZCkgPDwgMzIpOworCXJ0dCA9IG5ldC0+cnR0OworI2VuZGlmCisJaWYg
KG5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2spIHsKKwkJbmV0LT5jY19tb2QucnRj
Yy5ydHRfc2V0X3RoaXNfc2FjayA9IDA7CisJCWJ5dGVzX2Zvcl90aGlzX3J0dCA9IG5ldC0+Y2Nf
bW9kLnJ0Y2MuYndfYnl0ZXMgLSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzX2F0X2xhc3RfcnR0
YzsKKwkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSBuZXQtPmNjX21v
ZC5ydGNjLmJ3X2J5dGVzOworCQlpZiAobmV0LT5ydHQpIHsKKwkJCWRpdiA9IG5ldC0+cnR0IC8g
MTAwMDsKKwkJCWlmIChkaXYpIHsKKwkJCQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8g
ZGl2OworCQkJCWluc3Rfb2ZmID0gaW5zdF9idyA+PiBid19zaGlmdDsKKwkJCQlpZiAoaW5zdF9i
dyA+IG5idykKKwkJCQkJaW5zdF9pbmQgPSBTQ1RQX0lOU1RfR0FJTklORzsKKwkJCQllbHNlIGlm
ICgoaW5zdF9idytpbnN0X29mZikgPCBuYncpCisJCQkJCWluc3RfaW5kID0gU0NUUF9JTlNUX0xP
T1NJTkc7CisJCQkJZWxzZQorCQkJCQlpbnN0X2luZCA9IFNDVFBfSU5TVF9ORVVUUkFMOworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkJ
CXByb2JlcG9pbnQgfD0gICgoMHhiIDw8IDE2KSB8IGluc3RfaW5kKTsKKyNlbmRpZgorCQkJfSBl
bHNlIHsKKwkJCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJ
CQlpbnN0X2J3ID0gYnl0ZXNfZm9yX3RoaXNfcnR0IC8gKHVpbnQ2NF90KShuZXQtPnJ0dCk7CisJ
CQkJLyogQ2FuJ3QgZGV0ZXJtaW5lIGRvIG5vdCBjaGFuZ2UgKi8KKwkJCQlwcm9iZXBvaW50IHw9
ICAoKDB4YyA8PCAxNikgfCBpbnN0X2luZCk7CisjZW5kaWYKKwkJCX0KKwkJfSBlbHNlIHsKKwkJ
CWluc3RfaW5kID0gbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kOworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkJaW5zdF9idyA9
IGJ5dGVzX2Zvcl90aGlzX3J0dDsKKwkJCS8qIENhbid0IGRldGVybWluZSBkbyBub3QgY2hhbmdl
ICovCisJCQlwcm9iZXBvaW50IHw9ICAoKDB4ZCA8PCAxNikgfCBpbnN0X2luZCk7CisjZW5kaWYK
KwkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MzAwMAorCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgcnR0dmFyLAorCQkJICB2dGFnLAor
CQkJICAoKG5idyA8PCAzMikgfCBpbnN0X2J3KSwKKwkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxi
d19ydHQgPDwgMzIpIHwgcnR0KSwKKwkJCSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAgcHJvYmVw
b2ludCk7CisjZW5kaWYKKwl9IGVsc2UgeworCQkvKiBObyBydHQgbWVhc3VyZW1lbnQsIHVzZSBs
YXN0IG9uZSAqLworCQlpbnN0X2luZCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGFzdF9pbnN0X2luZDsK
Kwl9CisJYndfb2Zmc2V0ID0gbmV0LT5jY19tb2QucnRjYy5sYncgPj4gYndfc2hpZnQ7CisJaWYg
KG5idyA+IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ICsgYndfb2Zmc2V0KSB7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCXJldCA9IGNjX2J3
X2luY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCB2dGFnKTsKKyNlbHNlCisJCXJldCA9IGNjX2J3X2lu
Y3JlYXNlKHN0Y2IsIG5ldCwgbmJ3KTsKKyNlbmRpZgorCQlnb3RvIG91dDsKKwl9CisJcnR0X29m
ZnNldCA9IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3X3J0dCA+PiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
cnR0dmFyX3J0dCk7CisJaWYgKG5idyA8IG5ldC0+Y2NfbW9kLnJ0Y2MubGJ3IC0gYndfb2Zmc2V0
KSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAz
MDAwCisJCXJldCA9IGNjX2J3X2RlY3JlYXNlKHN0Y2IsIG5ldCwgbmJ3LCBydHRfb2Zmc2V0LCB2
dGFnLCBpbnN0X2luZCk7CisjZWxzZQorCQlyZXQgPSBjY19id19kZWNyZWFzZShzdGNiLCBuZXQs
IG5idywgcnR0X29mZnNldCwgaW5zdF9pbmQpOworI2VuZGlmCisJCWdvdG8gb3V0OworCX0KKwkv
KiBJZiB3ZSByZWFjaCBoZXJlIHRoZW4KKwkgKiB3ZSBhcmUgaW4gYSBzaXR1YXRpb24gd2hlcmUK
KwkgKiB0aGUgYncgc3RheWVkIHRoZSBzYW1lLgorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCXJldCA9IGNjX2J3X3NhbWUoc3Rj
YiwgbmV0LCBuYncsIHJ0dF9vZmZzZXQsIHZ0YWcsIGluc3RfaW5kKTsKKyNlbHNlCisJcmV0ID0g
Y2NfYndfc2FtZShzdGNiLCBuZXQsIG5idywgcnR0X29mZnNldCwgaW5zdF9pbmQpOworI2VuZGlm
CitvdXQ6CisJbmV0LT5jY19tb2QucnRjYy5sYXN0X2luc3RfaW5kID0gaW5zdF9pbmQ7CisJcmV0
dXJuIChyZXQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNr
X2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICAgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCisJCQkJICAgaW50IGFjY3VtX21vdmVkLCBpbnQgcmVuZWdlZF9hbGwgU0NU
UF9VTlVTRUQsIGludCB3aWxsX2V4aXQsIGludCB1c2VfcnRjYykKK3sKKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAzMDAwCisJaW50IG9sZF9jd25kOworI2VuZGlmCisJdWludDMyX3QgdF9zc3RocmVzaCwg
dF9jd25kLCBpbmNyOworCXVpbnQ2NF90IHRfdWN3bmRfc2J3OworCXVpbnQ2NF90IHRfcGF0aF9t
cHRjcDsKKwl1aW50NjRfdCBtcHRjcF9saWtlX2FscGhhOworCXVpbnQzMl90IHNydHQ7CisJdWlu
dDY0X3QgbWF4X3BhdGg7CisKKwkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIg
YW5kIG92ZXIgYWdhaW4gKi8KKwl0X3NzdGhyZXNoID0gMDsKKwl0X2N3bmQgPSAwOworCXRfdWN3
bmRfc2J3ID0gMDsKKwl0X3BhdGhfbXB0Y3AgPSAwOworCW1wdGNwX2xpa2VfYWxwaGEgPSAxOwor
CWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkg
ICAgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpIHx8CisJICAg
IChzdGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9PSBTQ1RQX0NNVF9NUFRDUCkpIHsKKwkJbWF4
X3BhdGggPSAwOworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7CisJCQl0X3NzdGhyZXNoICs9IG5ldC0+c3N0aHJlc2g7CisJCQl0X2N3bmQgKz0gbmV0
LT5jd25kOworCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkZXZpZGUgLi4uKi8K
KwkJCXNydHQgPSBuZXQtPmxhc3RzYTsKKwkJCWlmIChzcnR0ID4gMCkgeworCQkJCXVpbnQ2NF90
IHRtcDsKKworCQkJCXRfdWN3bmRfc2J3ICs9ICh1aW50NjRfdCluZXQtPmN3bmQgLyAodWludDY0
X3Qpc3J0dDsKKwkJCQl0X3BhdGhfbXB0Y3AgKz0gKCgodWludDY0X3QpbmV0LT5jd25kKSA8PCBT
SElGVF9NUFRDUF9NVUxUSV9aKSAvCisJCQkJICAgICAgICAgICAgICAgICgoKHVpbnQ2NF90KW5l
dC0+bXR1KSAqICh1aW50NjRfdClzcnR0KTsKKwkJCQl0bXAgPSAoKCh1aW50NjRfdCluZXQtPmN3
bmQpIDw8IFNISUZUX01QVENQX01VTFRJX04pIC8KKwkJCQkgICAgICAoKHVpbnQ2NF90KW5ldC0+
bXR1ICogKHVpbnQ2NF90KShzcnR0ICogc3J0dCkpOworCQkJCWlmICh0bXAgPiBtYXhfcGF0aCkg
eworCQkJCQltYXhfcGF0aCA9IHRtcDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHRfcGF0aF9t
cHRjcCA+IDApIHsKKwkJCW1wdGNwX2xpa2VfYWxwaGEgPSBtYXhfcGF0aCAvICh0X3BhdGhfbXB0
Y3AgKiB0X3BhdGhfbXB0Y3ApOworCQl9IGVsc2UgeworCQkJbXB0Y3BfbGlrZV9hbHBoYSA9IDE7
CisJCX0KKwl9CisJaWYgKHRfc3N0aHJlc2ggPT0gMCkgeworCQl0X3NzdGhyZXNoID0gMTsKKwl9
CisJaWYgKHRfdWN3bmRfc2J3ID09IDApIHsKKwkJdF91Y3duZF9zYncgPSAxOworCX0KKwkvKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIHVwZGF0ZSBjd25kIGFuZCBFYXJseSBG
UiAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlUQUlMUV9GT1JFQUNI
KG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCisjaWZkZWYgSkFOQV9DTVRfRkFTVF9S
RUNPVkVSWQorCQkvKgorCQkgKiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVn
LgorCQkgKi8KKwkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiBuZXQtPm5l
d19wc2V1ZG9fY3VtYWNrKSB7CisJCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9z
ZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8CisJCQkgICAgU0NUUF9UU05fR0UobmV0LT5w
c2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pKSB7CisJCQkJbmV0LT53aWxsX2V4
aXRfZmFzdF9yZWNvdmVyeSA9IDE7CisJCQl9CisJCX0KKyNlbmRpZgorCQkvKiBpZiBub3RoaW5n
IHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNraXAgaXQgKi8KKwkJaWYgKG5ldC0+bmV0
X2FjayA9PSAwKSB7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBu
ZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9
CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorICAgICAgICAgICAgICAgIC8qIENNVCBm
YXN0IHJlY292ZXJ5IGNvZGUKKwkJICovCisJCS8qCisJCSAgaWYgKHNjdHBfY210X29uX29mZiA+
IDAgJiYgbmV0LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmIG5ldC0+d2lsbF9leGl0X2Zh
c3RfcmVjb3ZlcnkgPT0gMCkgeworCQkgIEBAQCBEbyBzb21ldGhpbmcKKwkJICB9CisJCSAgZWxz
ZSBpZiAoc2N0cF9jbXRfb25fb2ZmID09IDAgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNv
dmVyeSAmJiB3aWxsX2V4aXQgPT0gMCkgeworCQkqLworI2VuZGlmCisKKwkJaWYgKGFzb2MtPmZh
c3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKKwkJICAgICh3aWxsX2V4aXQgPT0gMCkgJiYKKwkJ
ICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBh
cmUgaW4gbG9zcyByZWNvdmVyeSB3ZSBza2lwIGFueSBjd25kCisJCQkgKiB1cGRhdGUKKwkJCSAq
LworCQkJcmV0dXJuOworCQl9CisJCS8qCisJCSAqIERpZCBhbnkgbWVhc3VyZW1lbnRzIGdvIG9u
IGZvciB0aGlzIG5ldHdvcms/CisJCSAqLworCQlpZiAodXNlX3J0Y2MgJiYgKG5ldC0+Y2NfbW9k
LnJ0Y2MudGxzX25lZWRzX3NldCA+IDApKSB7CisJCQl1aW50NjRfdCBuYnc7CisJCQkvKgorCQkJ
ICogQXQgdGhpcyBwb2ludCBvdXIgYndfYnl0ZXMgaGFzIGJlZW4gdXBkYXRlZAorCQkJICogYnkg
aW5jb21pbmcgc2FjayBpbmZvcm1hdGlvbi4KKwkJCSAqCisJCQkgKiBCdXQgb3VyIGJ3IG1heSBu
b3QgeWV0IGJlIHNldC4KKwkJCSAqCisJCQkgKi8KKwkJCWlmICgobmV0LT5jY19tb2QucnRjYy5u
ZXdfdG90X3RpbWUvMTAwMCkgPiAwKSB7CisJCQkJbmJ3ID0gbmV0LT5jY19tb2QucnRjYy5id19i
eXRlcy8obmV0LT5jY19tb2QucnRjYy5uZXdfdG90X3RpbWUvMTAwMCk7CisJCQl9IGVsc2Ugewor
CQkJCW5idyA9IG5ldC0+Y2NfbW9kLnJ0Y2MuYndfYnl0ZXM7CisJCQl9CisJCQlpZiAobmV0LT5j
Y19tb2QucnRjYy5sYncpIHsKKwkJCQlpZiAoY2NfYndfbGltaXQoc3RjYiwgbmV0LCBuYncpKSB7
CisJCQkJCS8qIEhvbGQgaGVyZSwgbm8gdXBkYXRlICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0K
KwkJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAzMDAwCisJCQkJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKKworCQkJCXByb2Jl
cG9pbnQgPSAoKCh1aW50NjRfdCluZXQtPmN3bmQpIDw8IDMyKTsKKwkJCQlwcm9iZXBvaW50IHw9
ICAoKDB4YSA8PCAxNikgfCAwKTsKKwkJCQl2dGFnID0gKG5ldC0+cnR0IDw8IDMyKSB8CisJCQkJ
CSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkgPDwgMTYpIHwKKwkJCQkJ
KHN0Y2ItPnJwb3J0KTsKKworCQkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2YXIs
CisJCQkJCSAgdnRhZywKKwkJCQkJICBuYncsCisJCQkJCSAgKChuZXQtPmNjX21vZC5ydGNjLmxi
d19ydHQgPDwgMzIpIHwgbmV0LT5ydHQpLAorCQkJCQkgIG5ldC0+ZmxpZ2h0X3NpemUsCisJCQkJ
CSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJCQluZXQtPmNjX21vZC5ydGNjLmxidyA9IG5idzsK
KwkJCQluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSBuZXQtPnJ0dDsKKwkJCQlpZiAobmV0LT5j
Y19tb2QucnRjYy5ydHRfc2V0X3RoaXNfc2FjaykgeworCQkJCQluZXQtPmNjX21vZC5ydGNjLnJ0
dF9zZXRfdGhpc19zYWNrID0gMDsKKwkJCQkJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9s
YXN0X3J0dGMgPSBuZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzOworCQkJCX0KKwkJCX0KKwkJfQor
CQkvKgorCQkgKiBDTVQ6IENVQyBhbGdvcml0aG0uIFVwZGF0ZSBjd25kIGlmIHBzZXVkby1jdW1h
Y2sgaGFzCisJCSAqIG1vdmVkLgorCQkgKi8KKwkJaWYgKGFjY3VtX21vdmVkIHx8CisJCSAgICAo
KGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmIG5ldC0+bmV3X3BzZXVkb19jdW1hY2spKSB7
CisJCQkvKiBJZiB0aGUgY3VtdWxhdGl2ZSBhY2sgbW92ZWQgd2UgY2FuIHByb2NlZWQgKi8KKwkJ
CWlmIChuZXQtPmN3bmQgPD0gbmV0LT5zc3RocmVzaCkgeworCQkJCS8qIFdlIGFyZSBpbiBzbG93
IHN0YXJ0ICovCisJCQkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0
LT5jd25kKSB7CisJCQkJCXVpbnQzMl90IGxpbWl0OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJCQkJCW9sZF9jd25kID0gbmV0LT5j
d25kOworI2VuZGlmCisJCQkJCXN3aXRjaCAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmKSB7CisJCQkJ
CWNhc2UgU0NUUF9DTVRfUlBWMToKKwkJCQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90
KW5ldC0+bXR1ICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpICoKKwkJCQkJCSAgICAgICAgICAgICAgICAg
ICAgKHVpbnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICAo
dWludDY0X3QpdF9zc3RocmVzaCk7CisJCQkJCQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90
KW5ldC0+bmV0X2FjayAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+
c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRfdCl0X3NzdGhyZXNo
KTsKKwkJCQkJCWlmIChpbmNyID4gbGltaXQpIHsKKwkJCQkJCQlpbmNyID0gbGltaXQ7CisJCQkJ
CQl9CisJCQkJCQlpZiAoaW5jciA9PSAwKSB7CisJCQkJCQkJaW5jciA9IDE7CisJCQkJCQl9CisJ
CQkJCQlicmVhazsKKwkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYyOgorCQkJCQkJLyogbGFzdHNhPj4z
OyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uKi8KKwkJCQkJCXNydHQgPSBuZXQtPmxhc3Rz
YTsKKwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsKKwkJCQkJCX0KKwkJ
CQkJCWxpbWl0ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bXR1ICoKKwkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFy
aWFibGUpICoKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkg
LworCQkJCQkJICAgICAgICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqIHRfdWN3bmRfc2J3
KSk7CisJCQkJCQkgICAgICAgICAgICAgICAgICAgLyogSU5DUkVBU0UgRkFDVE9SICovCisJCQkJ
CQlpbmNyID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgKHVpbnQ2NF90KW5ldC0+Y3duZCkgLworCQkJCQkJICAgICAgICAgICAg
ICAgICAgKCh1aW50NjRfdClzcnR0ICogdF91Y3duZF9zYncpKTsKKwkJCQkJCSAgICAgICAgICAg
ICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RPUiAqLworCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkgewor
CQkJCQkJCWluY3IgPSBsaW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID09IDApIHsKKwkJ
CQkJCQlpbmNyID0gMTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFNDVFBfQ01U
X01QVENQOgorCQkJCQkJbGltaXQgPSAodWludDMyX3QpKCgodWludDY0X3QpbmV0LT5tdHUgKgor
CQkJCQkJICAgICAgICAgICAgICAgICAgICBtcHRjcF9saWtlX2FscGhhICoKKwkJCQkJCSAgICAg
ICAgICAgICAgICAgICAgKHVpbnQ2NF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFy
aWFibGUpKSA+PgorCQkJCQkJICAgICAgICAgICAgICAgICAgIFNISUZUX01QVENQX01VTFRJKTsK
KwkJCQkJCWluY3IgID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KW5ldC0+bmV0X2FjayAqCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgIG1wdGNwX2xpa2VfYWxwaGEpID4+CisJCQkJCQkgICAgICAg
ICAgICAgICAgICAgU0hJRlRfTVBUQ1BfTVVMVEkpOworCQkJCQkJaWYgKGluY3IgPiBsaW1pdCkg
eworCQkJCQkJCWluY3IgPSBsaW1pdDsKKwkJCQkJCX0KKwkJCQkJCWlmIChpbmNyID4gbmV0LT5u
ZXRfYWNrKSB7CisJCQkJCQkJaW5jciA9IG5ldC0+bmV0X2FjazsKKwkJCQkJCX0KKwkJCQkJCWlm
IChpbmNyID4gbmV0LT5tdHUpIHsKKwkJCQkJCQlpbmNyID0gbmV0LT5tdHU7CisJCQkJCQl9CisJ
CQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWluY3IgPSBuZXQtPm5ldF9hY2s7CisJ
CQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192
YXJpYWJsZSkpIHsKKwkJCQkJCQlpbmNyID0gbmV0LT5tdHUgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfTDJfYWJjX3ZhcmlhYmxlKTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJ
CW5ldC0+Y3duZCArPSBpbmNyOworCQkJCQlzY3RwX2VuZm9yY2VfY3duZF9saW1pdChhc29jLCBu
ZXQpOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
aW5jciwKKwkJCQkJCSAgICAgICAgICAgICAgU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKKwkJCQkJ
fQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAw
MAorCQkJCQlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwgYWNrLAorCQkJCQkgICAgICAgICAg
c3RjYi0+YXNvYy5teV92dGFnLAorCQkJCQkgICAgICAgICAgKChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAorCQkJCQkgICAgICAgICAgbmV0LAorCQkJ
CQkgICAgICAgICAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwkJCQl9IGVsc2Ugewor
CQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05E
X0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5u
ZXRfYWNrLAorCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOworCQkJCQl9CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBXZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2Ug
Ki8KKwkJCQkvKgorCQkJCSAqIEFkZCB0byBwYmEKKwkJCQkgKi8KKwkJCSAgICAgICAgbmV0LT5w
YXJ0aWFsX2J5dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKKworCQkJCWlmICgobmV0LT5mbGln
aHRfc2l6ZSArIG5ldC0+bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID49IG5ldC0+Y3du
ZCkpIHsKKwkJCQkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkIC09IG5ldC0+Y3duZDsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCQkJ
b2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisjZW5kaWYKKwkJCQkJc3dpdGNoIChhc29jLT5zY3RwX2Nt
dF9vbl9vZmYpIHsKKwkJCQkJY2FzZSBTQ1RQX0NNVF9SUFYxOgorCQkJCQkJaW5jciA9ICh1aW50
MzJfdCkoKCh1aW50NjRfdCluZXQtPm10dSAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVp
bnQ2NF90KW5ldC0+c3N0aHJlc2gpIC8KKwkJCQkJCSAgICAgICAgICAgICAgICAgICh1aW50NjRf
dCl0X3NzdGhyZXNoKTsKKwkJCQkJCWlmIChpbmNyID09IDApIHsKKwkJCQkJCQlpbmNyID0gMTsK
KwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFNDVFBfQ01UX1JQVjI6CisJCQkJCQkv
KiBsYXN0c2E+PjM7ICB3ZSBkb24ndCBuZWVkIHRvIGRpdmlkZSAuLi4gKi8KKwkJCQkJCXNydHQg
PSBuZXQtPmxhc3RzYTsKKwkJCQkJCWlmIChzcnR0ID09IDApIHsKKwkJCQkJCQlzcnR0ID0gMTsK
KwkJCQkJCX0KKwkJCQkJCWluY3IgPSAodWludDMyX3QpKCh1aW50NjRfdCluZXQtPm10dSAqCisJ
CQkJCQkgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5jd25kIC8KKwkJCQkJCSAgICAg
ICAgICAgICAgICAgICgodWludDY0X3Qpc3J0dCAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAg
dF91Y3duZF9zYncpKTsKKwkJCQkJCSAgICAgICAgICAgICAgICAgIC8qIElOQ1JFQVNFIEZBQ1RP
UiAqLworCQkJCQkJaWYgKGluY3IgPT0gMCkgeworCQkJCQkJCWluY3IgPSAxOworCQkJCQkJfQor
CQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgU0NUUF9DTVRfTVBUQ1A6CisJCQkJCQlpbmNyID0gKHVp
bnQzMl90KSgobXB0Y3BfbGlrZV9hbHBoYSAqCisJCQkJCQkgICAgICAgICAgICAgICAgICAgKHVp
bnQ2NF90KSBuZXQtPmN3bmQpID4+CisJCQkJCQkgICAgICAgICAgICAgICAgICBTSElGVF9NUFRD
UF9NVUxUSSk7CisJCQkJCQlpZiAoaW5jciA+IG5ldC0+bXR1KSB7CisJCQkJCQkJaW5jciA9IG5l
dC0+bXR1OworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCWRlZmF1bHQ6CisJCQkJCQlpbmNy
ID0gbmV0LT5tdHU7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQluZXQtPmN3bmQgKz0gaW5j
cjsKKwkJCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoYXNvYywgbmV0KTsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJCQkJU0RUX1BS
T0JFNShzY3RwLCBjd25kLCBuZXQsIGFjaywKKwkJCQkJCSAgc3RjYi0+YXNvYy5teV92dGFnLAor
CQkJCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0
KSksCisJCQkJCQkgIG5ldCwKKwkJCQkJCSAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYK
KwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dO
RF9NT05JVE9SX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+
bXR1LAorCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfRlJPTV9DQSk7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5l
dCwgbmV0LT5uZXRfYWNrLAorCQkJCQkJCSAgICAgIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EpOwor
CQkJCQl9CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNj
dHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJICAgICAgU0NUUF9DV05EX0xP
R19OT19DVU1BQ0spOworCQkJfQorCQl9CisJfQorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCitzdGF0aWMgdm9pZAorc2N0cF9jd25k
X3VwZGF0ZV9leGl0X3BmX2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCkKKyNlbHNlCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9leGl0X3Bm
X2NvbW1vbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25l
dHMgKm5ldCkKKyNlbmRpZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uID49IDgwMzAwMAorCWludCBvbGRfY3duZDsKKworCW9sZF9jd25kID0gbmV0LT5j
d25kOworI2VuZGlmCisJbmV0LT5jd25kID0gbmV0LT5tdHU7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJU0RUX1BST0JFNShzY3RwLCBj
d25kLCBuZXQsIGFjaywKKwkgICAgICAgICAgc3RjYi0+YXNvYy5teV92dGFnLCAoKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSksIG5ldCwKKwkgICAgICAg
ICAgb2xkX2N3bmQsIG5ldC0+Y3duZCk7CisjZW5kaWYKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5E
QVRBMSwgIkRlc3RpbmF0aW9uICVwIG1vdmVkIGZyb20gUEYgdG8gcmVhY2hhYmxlIHdpdGggY3du
ZCAlZC5cbiIsCisJICAgICAgICAodm9pZCAqKW5ldCwgbmV0LT5jd25kKTsKK30KKworCitzdGF0
aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWludCBvbGRfY3duZCA9IG5ldC0+Y3du
ZDsKKwl1aW50MzJfdCB0X3NzdGhyZXNoLCB0X2N3bmQ7CisJdWludDY0X3QgdF91Y3duZF9zYnc7
CisKKwkvKiBNVCBGSVhNRTogRG9uJ3QgY29tcHV0ZSB0aGlzIG92ZXIgYW5kIG92ZXIgYWdhaW4g
Ki8KKwl0X3NzdGhyZXNoID0gMDsKKwl0X2N3bmQgPSAwOworCWlmICgoc3RjYi0+YXNvYy5zY3Rw
X2NtdF9vbl9vZmYgPT0gU0NUUF9DTVRfUlBWMSkgfHwKKwkgICAgKHN0Y2ItPmFzb2Muc2N0cF9j
bXRfb25fb2ZmID09IFNDVFBfQ01UX1JQVjIpKSB7CisJCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7
CisJCXVpbnQzMl90IHNydHQ7CisKKwkJdF91Y3duZF9zYncgPSAwOworCQlUQUlMUV9GT1JFQUNI
KGxuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJdF9zc3RocmVzaCArPSBs
bmV0LT5zc3RocmVzaDsKKwkJCXRfY3duZCArPSBsbmV0LT5jd25kOworCQkJc3J0dCA9IGxuZXQt
Pmxhc3RzYTsKKwkJCS8qIGxhc3RzYT4+MzsgIHdlIGRvbid0IG5lZWQgdG8gZGl2aWRlIC4uLiAq
LworCQkJaWYgKHNydHQgPiAwKSB7CisJCQkJdF91Y3duZF9zYncgKz0gKHVpbnQ2NF90KWxuZXQt
PmN3bmQgLyAodWludDY0X3Qpc3J0dDsKKwkJCX0KKwkJfQorCQlpZiAodF9zc3RocmVzaCA8IDEp
IHsKKwkJCXRfc3N0aHJlc2ggPSAxOworCQl9CisJCWlmICh0X3Vjd25kX3NidyA8IDEpIHsKKwkJ
CXRfdWN3bmRfc2J3ID0gMTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYg
PT0gU0NUUF9DTVRfUlBWMSkgeworCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKCh1aW50
NjRfdCk0ICoKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpbmV0LT5t
dHUgKgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50NjRfdCluZXQtPnNzdGhy
ZXNoKSAvCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDY0X3QpdF9zc3RocmVz
aCk7CisJCX0gZWxzZSB7CisJCQl1aW50NjRfdCBjY19kZWx0YTsKKworCQkJc3J0dCA9IG5ldC0+
bGFzdHNhOworCQkJLyogbGFzdHNhPj4zOyAgd2UgZG9uJ3QgbmVlZCB0byBkaXZpZGUgLi4uICov
CisJCQlpZiAoc3J0dCA9PSAwKSB7CisJCQkJc3J0dCA9IDE7CisJCQl9CisJCQljY19kZWx0YSA9
IHRfdWN3bmRfc2J3ICogKHVpbnQ2NF90KXNydHQgLyAyOworCQkJaWYgKGNjX2RlbHRhIDwgdF9j
d25kKSB7CisJCQkJbmV0LT5zc3RocmVzaCA9ICh1aW50MzJfdCkoKHVpbnQ2NF90KXRfY3duZCAt
IGNjX2RlbHRhKTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0LT5zc3RocmVzaCAgPSBuZXQtPm10dTsK
KwkJCX0KKwkJfQorCQlpZiAoKG5ldC0+Y3duZCA+IHRfY3duZCAvIDIpICYmCisJCSAgICAobmV0
LT5zc3RocmVzaCA8IG5ldC0+Y3duZCAtIHRfY3duZCAvIDIpKSB7CisJCQluZXQtPnNzdGhyZXNo
ID0gbmV0LT5jd25kIC0gdF9jd25kIC8gMjsKKwkJfQorCQlpZiAobmV0LT5zc3RocmVzaCA8IG5l
dC0+bXR1KSB7CisJCQluZXQtPnNzdGhyZXNoID0gbmV0LT5tdHU7CisJCX0KKwl9IGVsc2Ugewor
CQluZXQtPnNzdGhyZXNoID0gbWF4KG5ldC0+Y3duZCAvIDIsIDQgKiBuZXQtPm10dSk7CisJfQor
CW5ldC0+Y3duZCA9IG5ldC0+bXR1OworCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7Cisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAzMDAwCisJ
U0RUX1BST0JFNShzY3RwLCBjd25kLCBuZXQsIHRvLAorCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywK
KwkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYpIHwgKHN0Y2ItPnJwb3J0KSks
CisJCSAgbmV0LAorCQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOworI2VuZGlmCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJM
RSkgeworCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5jd25kIC0gb2xkX2N3bmQsIFND
VFBfQ1dORF9MT0dfRlJPTV9SVFgpOworCX0KK30KKworc3RhdGljIHZvaWQKK3NjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfZWNuX2VjaG9fY29tbW9uKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfbmV0cyAqbmV0LAorCQkJCQkgICAgaW50IGluX3dpbmRvdywgaW50IG51bV9wa3RfbG9z
dCwgaW50IHVzZV9ydGNjKQoreworCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKwlpZiAoKHVz
ZV9ydGNjKSAmJiAobmV0LT5sYW5fdHlwZSA9PSBTQ1RQX0xBTl9MT0NBTCkgJiYgKG5ldC0+Y2Nf
bW9kLnJ0Y2MudXNlX2RjY2NfZWNuKSkgeworCQkvKiBEYXRhIGNlbnRlciBDb25nZXN0aW9uIENv
bnRyb2wgKi8KKwkJaWYgKGluX3dpbmRvdyA9PSAwKSB7CisJCQkvKiBHbyB0byBDQSB3aXRoIHRo
ZSBjd25kIGF0IHRoZSBwb2ludCB3ZSBzZW50CisJCQkgKiB0aGUgVFNOIHRoYXQgd2FzIG1hcmtl
ZCB3aXRoIGEgQ0UuCisJCQkgKi8KKwkJCWlmIChuZXQtPmVjbl9wcmV2X2N3bmQgPCBuZXQtPmN3
bmQpIHsKKwkJCQkvKiBSZXN0b3JlIHRvIHByZXYgY3duZCAqLworCQkJCW5ldC0+Y3duZCA9IG5l
dC0+ZWNuX3ByZXZfY3duZCAtIChuZXQtPm10dSAqIG51bV9wa3RfbG9zdCk7CisJCQl9IGVsc2Ug
eworCQkJCS8qIEp1c3QgY3V0IGluIDEvMiAqLworCQkJCW5ldC0+Y3duZCAvPSAyOworCQkJfQor
CQkJLyogRHJvcCB0byBDQSAqLworCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAtIChudW1f
cGt0X2xvc3QgKiBuZXQtPm10dSk7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3du
ZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9T
QVQpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogRnVydGhlciB0dW5pbmcgZG93biByZXF1aXJl
ZCBvdmVyIHRoZSBkcmFzdGljIG9yaWdpbmFsIGN1dCAqLworCQkJbmV0LT5zc3RocmVzaCAtPSAo
bmV0LT5tdHUgKiBudW1fcGt0X2xvc3QpOworCQkJbmV0LT5jd25kIC09IChuZXQtPm10dSAqIG51
bV9wa3RfbG9zdCk7CisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBu
ZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0dfRlJPTV9TQVQpOworCQkJ
fQorCisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKKwl9ICBl
bHNlIHsKKwkJaWYgKGluX3dpbmRvdyA9PSAwKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19l
Y25lcmVkdWNlZGN3bmQpOworCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7CisJCQlp
ZiAobmV0LT5zc3RocmVzaCA8IG5ldC0+bXR1KSB7CisJCQkJbmV0LT5zc3RocmVzaCA9IG5ldC0+
bXR1OworCQkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRpbWVyIGFzIHdlbGwsIHRvIHNsb3cgdXMg
ZG93biAqLworCQkJCW5ldC0+UlRPIDw8PSAxOworCQkJfQorCQkJbmV0LT5jd25kID0gbmV0LT5z
c3RocmVzaDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDMwMDAKKwkJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBlY24sCisJCQkJICBzdGNi
LT5hc29jLm15X3Z0YWcsCisJCQkJICAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQgPDwgMTYp
IHwgKHN0Y2ItPnJwb3J0KSksCisJCQkJICBuZXQsCisJCQkJICBvbGRfY3duZCwgbmV0LT5jd25k
KTsKKyNlbmRpZgorCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0
LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKKwkJCX0K
KwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNr
ZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJc3RydWN0IHNjdHBfbmV0cyAqbmV0
LCBzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKKwl1aW50MzJfdCAqYm90dGxlX2J3LCB1
aW50MzJfdCAqb25fcXVldWUpCit7CisJdWludDMyX3QgYndfYXZhaWw7CisJdW5zaWduZWQgaW50
IGluY3I7CisJaW50IG9sZF9jd25kID0gbmV0LT5jd25kOworCisJLyogZ2V0IGJvdHRsZSBuZWNr
IGJ3ICovCisJKmJvdHRsZV9idyA9IG50b2hsKGNwLT5ib3R0bGVfYncpOworCS8qIGFuZCB3aGF0
cyBvbiBxdWV1ZSAqLworCSpvbl9xdWV1ZSA9IG50b2hsKGNwLT5jdXJyZW50X29ucSk7CisJLyoK
KwkgKiBhZGp1c3QgdGhlIG9uLXF1ZXVlIGlmIG91ciBmbGlnaHQgaXMgbW9yZSBpdCBjb3VsZCBi
ZQorCSAqIHRoYXQgdGhlIHJvdXRlciBoYXMgbm90IHlldCBnb3R0ZW4gZGF0YSAiaW4tZmxpZ2h0
IiB0byBpdAorCSAqLworCWlmICgqb25fcXVldWUgPCBuZXQtPmZsaWdodF9zaXplKSB7CisJCSpv
bl9xdWV1ZSA9IG5ldC0+ZmxpZ2h0X3NpemU7CisJfQorCS8qIHJ0dCBpcyBtZWFzdXJlZCBpbiBt
aWNybyBzZWNvbmRzLCBib3R0bGVfYncgaW4gYnl0ZXMgcGVyIHNlY29uZCAqLworCWJ3X2F2YWls
ID0gKHVpbnQzMl90KSgoKHVpbnQ2NF90KSgqYm90dGxlX2J3KSAqIG5ldC0+cnR0KSAvICh1aW50
NjRfdCkxMDAwMDAwKTsKKwlpZiAoYndfYXZhaWwgPiAqYm90dGxlX2J3KSB7CisJCS8qCisJCSAq
IENhcCB0aGUgZ3Jvd3RoIHRvIG5vIG1vcmUgdGhhbiB0aGUgYm90dGxlIG5lY2suCisJCSAqIFRo
aXMgY2FuIGhhcHBlbiBhcyBSVFQgc2xpZGVzIHVwIGR1ZSB0byBxdWV1ZXMuCisJCSAqIEl0IGFs
c28gbWVhbnMgaWYgeW91IGhhdmUgbW9yZSB0aGFuIGEgMSBzZWNvbmQKKwkJICogUlRUIHdpdGgg
YSBlbXB0eSBxdWV1ZSB5b3Ugd2lsbCBiZSBsaW1pdGVkIHRvIHRoZQorCQkgKiBib3R0bGVfYncg
cGVyIHNlY29uZCBubyBtYXR0ZXIgaWYgb3RoZXIgcG9pbnRzCisJCSAqIGhhdmUgMS8yIHRoZSBS
VFQgYW5kIHlvdSBjb3VsZCBnZXQgbW9yZSBvdXQuLi4KKwkJICovCisJCWJ3X2F2YWlsID0gKmJv
dHRsZV9idzsKKwl9CisJaWYgKCpvbl9xdWV1ZSA+IGJ3X2F2YWlsKSB7CisJCS8qCisJCSAqIE5v
IHJvb20gZm9yIGFueXRoaW5nIGVsc2UgZG9uJ3QgYWxsb3cgYW55dGhpbmcKKwkJICogZWxzZSB0
byBiZSAiYWRkZWQgdG8gdGhlIGZpcmUiLgorCQkgKi8KKwkJaW50IHNlZ19pbmZsaWdodCwgc2Vn
X29ucXVldWUsIG15X3BvcnRpb247CisKKwkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsK
KwkJLyogaG93IG11Y2ggYXJlIHdlIG92ZXIgcXVldWUgc2l6ZT8gKi8KKwkJaW5jciA9ICpvbl9x
dWV1ZSAtIGJ3X2F2YWlsOworCQlpZiAoc3RjYi0+YXNvYy5zZWVuX2Ffc2Fja190aGlzX3BrdCkg
eworCQkJLyoKKwkJCSAqIHVuZG8gYW55IGN3bmQgYWRqdXN0bWVudCB0aGF0IHRoZSBzYWNrCisJ
CQkgKiBtaWdodCBoYXZlIG1hZGUKKwkJCSAqLworCQkJbmV0LT5jd25kID0gbmV0LT5wcmV2X2N3
bmQ7CisJCX0KKwkJLyogTm93IGhvdyBtdWNoIG9mIHRoYXQgaXMgbWluZT8gKi8KKwkJc2VnX2lu
ZmxpZ2h0ID0gbmV0LT5mbGlnaHRfc2l6ZSAvIG5ldC0+bXR1OworCQlzZWdfb25xdWV1ZSA9ICpv
bl9xdWV1ZSAvIG5ldC0+bXR1OworCQlteV9wb3J0aW9uID0gKGluY3IgKiBzZWdfaW5mbGlnaHQp
IC8gc2VnX29ucXVldWU7CisKKwkJLyogSGF2ZSBJIG1hZGUgYW4gYWRqdXN0bWVudCBhbHJlYWR5
ICovCisJCWlmIChuZXQtPmN3bmQgPiBuZXQtPmZsaWdodF9zaXplKSB7CisJCQkvKgorCQkJICog
Zm9yIHRoaXMgZmxpZ2h0IEkgbWFkZSBhbiBhZGp1c3RtZW50IHdlCisJCQkgKiBuZWVkIHRvIGRl
Y3JlYXNlIHRoZSBwb3J0aW9uIGJ5IGEgc2hhcmUKKwkJCSAqIG91ciBwcmV2aW91cyBhZGp1c3Rt
ZW50LgorCQkJICovCisJCQlpbnQgZGlmZl9hZGo7CisKKwkJCWRpZmZfYWRqID0gbmV0LT5jd25k
IC0gbmV0LT5mbGlnaHRfc2l6ZTsKKwkJCWlmIChkaWZmX2FkaiA+IG15X3BvcnRpb24pCisJCQkJ
bXlfcG9ydGlvbiA9IDA7CisJCQllbHNlCisJCQkJbXlfcG9ydGlvbiAtPSBkaWZmX2FkajsKKwkJ
fQorCQkvKgorCQkgKiBiYWNrIGRvd24gdG8gdGhlIHByZXZpb3VzIGN3bmQgKGFzc3VtZSB3ZSBo
YXZlCisJCSAqIGhhZCBhIHNhY2sgYmVmb3JlIHRoaXMgcGFja2V0KS4gbWludXMgd2hhdCBldmVy
CisJCSAqIHBvcnRpb24gb2YgdGhlIG92ZXJhZ2UgaXMgbXkgZmF1bHQuCisJCSAqLworCQluZXQt
PmN3bmQgLT0gbXlfcG9ydGlvbjsKKworCQkvKiB3ZSB3aWxsIE5PVCBiYWNrIGRvd24gbW9yZSB0
aGFuIDEgTVRVICovCisJCWlmIChuZXQtPmN3bmQgPD0gbmV0LT5tdHUpIHsKKwkJCW5ldC0+Y3du
ZCA9IG5ldC0+bXR1OworCQl9CisJCS8qIGZvcmNlIGludG8gQ0EgKi8KKwkJbmV0LT5zc3RocmVz
aCA9IG5ldC0+Y3duZCAtIDE7CisJfSBlbHNlIHsKKwkJLyoKKwkJICogVGFrZSAxLzQgb2YgdGhl
IHNwYWNlIGxlZnQgb3IgbWF4IGJ1cnN0IHVwIC4uCisJCSAqIHdoaWNoZXZlciBpcyBsZXNzLgor
CQkgKi8KKwkJaW5jciA9IChid19hdmFpbCAtICpvbl9xdWV1ZSkgPj4gMjsKKwkJaWYgKChzdGNi
LT5hc29jLm1heF9idXJzdCA+IDApICYmCisJCSAgICAoc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBu
ZXQtPm10dSA8IGluY3IpKSB7CisJCQlpbmNyID0gc3RjYi0+YXNvYy5tYXhfYnVyc3QgKiBuZXQt
Pm10dTsKKwkJfQorCQluZXQtPmN3bmQgKz0gaW5jcjsKKwl9CisJaWYgKG5ldC0+Y3duZCA+IGJ3
X2F2YWlsKSB7CisJCS8qIFdlIGNhbid0IGV4Y2VlZCB0aGUgcGlwZSBzaXplICovCisJCW5ldC0+
Y3duZCA9IGJ3X2F2YWlsOworCX0KKwlpZiAobmV0LT5jd25kIDwgbmV0LT5tdHUpIHsKKwkJLyog
V2UgYWx3YXlzIGhhdmUgMSBNVFUgKi8KKwkJbmV0LT5jd25kID0gbmV0LT5tdHU7CisJfQorCXNj
dHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCWlmIChuZXQtPmN3bmQg
LSBvbGRfY3duZCAhPSAwKSB7CisJCS8qIGxvZyBvbmx5IGNoYW5nZXMgKi8KKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDMwMDAKKwkJU0RUX1BST0JF
NShzY3RwLCBjd25kLCBuZXQsIHBkLAorCQkJICBzdGNiLT5hc29jLm15X3Z0YWcsCisJCQkgICgo
c3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCA8PCAxNikgfCAoc3RjYi0+cnBvcnQpKSwKKwkJCSAg
bmV0LAorCQkJICBvbGRfY3duZCwgbmV0LT5jd25kKTsKKyNlbmRpZgorCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7
CisJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKG5ldC0+Y3duZCAtIG9sZF9jd25kKSwKKwkJ
CQlTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK3Nj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCSAg
ICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGJ1cnN0X2xpbWl0KQoreworCWludCBvbGRf
Y3duZCA9IG5ldC0+Y3duZDsKKworCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5jd25kKQorCQlu
ZXQtPnNzdGhyZXNoID0gbmV0LT5jd25kOworCWlmIChidXJzdF9saW1pdCkgeworCQluZXQtPmN3
bmQgPSAobmV0LT5mbGlnaHRfc2l6ZSArIChidXJzdF9saW1pdCAqIG5ldC0+bXR1KSk7CisJCXNj
dHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQlTRFRfUFJPQkU1KHNj
dHAsIGN3bmQsIG5ldCwgYmwsCisJCQkgIHN0Y2ItPmFzb2MubXlfdnRhZywKKwkJCSAgKChzdGNi
LT5zY3RwX2VwLT5zY3RwX2xwb3J0IDw8IDE2KSB8IChzdGNiLT5ycG9ydCkpLAorCQkJICBuZXQs
CisJCQkgIG9sZF9jd25kLCBuZXQtPmN3bmQpOworI2VuZGlmCisJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJ
CXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NX
TkRfTE9HX0ZST01fQlJTVCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICAgIGludCBhY2N1bV9tb3ZlZCwgaW50IHJlbmVn
ZWRfYWxsLCBpbnQgd2lsbF9leGl0KQoreworCS8qIFBhc3NpbmcgYSB6ZXJvIGFyZ3VtZW50IGlu
IGxhc3QgZGlzYWJsZXMgdGhlIHJ0Y2MgYWxnb3JpdGhtICovCisJc2N0cF9jd25kX3VwZGF0ZV9h
ZnRlcl9zYWNrX2NvbW1vbihzdGNiLCBhc29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdp
bGxfZXhpdCwgMCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vj
bl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorCWlu
dCBpbl93aW5kb3csIGludCBudW1fcGt0X2xvc3QpCit7CisJLyogUGFzc2luZyBhIHplcm8gYXJn
dW1lbnQgaW4gbGFzdCBkaXNhYmxlcyB0aGUgcnRjYyBhbGdvcml0aG0gKi8KKwlzY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX2Vjbl9lY2hvX2NvbW1vbihzdGNiLCBuZXQsIGluX3dpbmRvdywgbnVtX3Br
dF9sb3N0LCAwKTsKK30KKworLyogSGVyZSBzdGFydHMgdGhlIFJUQ0NWQVIgdHlwZSBDQyBpbnZl
bnRlZCBieSBSUlMgd2hpY2gKKyAqIGlzIGEgc2xpZ2h0IG1vZCB0byBSRkMyNTgxLiBXZSByZXVz
ZSBhIGNvbW1vbiByb3V0aW5lIG9yCisgKiB0d28gc2luY2UgdGhlc2UgYWxnb3JpdGhtcyBhcmUg
c28gY2xvc2UgYW5kIG5lZWQgdG8KKyAqIHJlbWFpbiB0aGUgc2FtZS4KKyAqLworc3RhdGljIHZv
aWQKK3NjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9lY25fZWNobyhzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJCQkgICAgIGludCBpbl93aW5kb3csIGlu
dCBudW1fcGt0X2xvc3QpCit7CisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNob19jb21t
b24oc3RjYiwgbmV0LCBpbl93aW5kb3csIG51bV9wa3RfbG9zdCwgMSk7Cit9CisKKworc3RhdGlj
Cit2b2lkIHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkKHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCwKKwkJCQkJICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSkKK3sKKwlu
ZXQtPmNjX21vZC5ydGNjLmJ3X2J5dGVzICs9IHRwMS0+c2VuZF9zaXplOworfQorCitzdGF0aWMg
dm9pZAorc2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2soc3RydWN0IHNjdHBfdGNi
ICpzdGNiIFNDVFBfVU5VU0VELAorCQkJCSAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJ
aWYgKG5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA+IDApIHsKKwkJLyogV2UgaGFkIGEg
YncgbWVhc3VybWVudCBnb2luZyBvbiAqLworCQlzdHJ1Y3QgdGltZXZhbCBsdGxzOworCQlTQ1RQ
X0dFVFBUSU1FX1RJTUVWQUwoJmx0bHMpOworCQl0aW1ldmFsc3ViKCZsdGxzLCAmbmV0LT5jY19t
b2QucnRjYy50bHMpOworCQluZXQtPmNjX21vZC5ydGNjLm5ld190b3RfdGltZSA9IChsdGxzLnR2
X3NlYyAqIDEwMDAwMDApICsgbHRscy50dl91c2VjOworCX0KK30KKworc3RhdGljIHZvaWQKK3Nj
dHBfY3duZF9uZXdfcnRjY190cmFuc21pc3Npb25fYmVnaW5zKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKwkJCQkgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCXVpbnQ2NF90IHZ0YWcs
IHByb2JlcG9pbnQ7CisKKyNlbmRpZgorCWlmIChuZXQtPmNjX21vZC5ydGNjLmxidykgeworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMzAwMAorCQkv
KiBDbGVhciB0aGUgb2xkIGJ3Li4gd2Ugd2VudCB0byAwIGluLWZsaWdodCAqLworCQl2dGFnID0g
KG5ldC0+cnR0IDw8IDMyKSB8ICgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0
KSkgPDwgMTYpIHwKKwkJCShzdGNiLT5ycG9ydCk7CisJCXByb2JlcG9pbnQgPSAoKCh1aW50NjRf
dCluZXQtPmN3bmQpIDw8IDMyKTsKKwkJLyogUHJvYmUgcG9pbnQgOCAqLworCQlwcm9iZXBvaW50
IHw9ICAoKDggPDwgMTYpIHwgMCk7CisJCVNEVF9QUk9CRTUoc2N0cCwgY3duZCwgbmV0LCBydHR2
YXIsCisJCQkgIHZ0YWcsCisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYncgPDwgMzIpIHwgMCks
CisJCQkgICgobmV0LT5jY19tb2QucnRjYy5sYndfcnR0IDw8IDMyKSB8IG5ldC0+cnR0KSwKKwkJ
CSAgbmV0LT5mbGlnaHRfc2l6ZSwKKwkJCSAgcHJvYmVwb2ludCk7CisjZW5kaWYKKwkJbmV0LT5j
Y19tb2QucnRjYy5sYndfcnR0ID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5jd25kX2F0X2J3X3Nl
dCA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MubGJ3ID0gMDsKKwkJbmV0LT5jY19tb2QucnRjYy5i
d19ieXRlc19hdF9sYXN0X3J0dGMgPSAwOworCQluZXQtPmNjX21vZC5ydGNjLnZvbF9yZWR1Y2Ug
PSAwOworCQluZXQtPmNjX21vZC5ydGNjLmJ3X3RvdF90aW1lID0gMDsKKwkJbmV0LT5jY19tb2Qu
cnRjYy5id19ieXRlcyA9IDA7CisJCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7
CisJCWlmIChuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwKSB7CisJCQluZXQtPmNjX21vZC5y
dGNjLnZvbF9yZWR1Y2UgPSAwOworCQkJbmV0LT5jY19tb2QucnRjYy5zdGVwX2NudCA9IDA7CisJ
CQluZXQtPmNjX21vZC5ydGNjLmxhc3Rfc3RlcF9zdGF0ZSA9IDA7CisJCX0KKwkJaWYgKG5ldC0+
Y2NfbW9kLnJ0Y2MucmV0X2Zyb21fZXEpIHsKKwkJCS8qIGxlc3MgYWdncmVzc2l2ZSBvbmUgLSBy
ZXNldCBjd25kIHRvbyAqLworCQkJdWludDMyX3QgY3duZF9pbl9tdHUsIGN3bmQ7CisKKwkJCWN3
bmRfaW5fbXR1ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRpYWxfY3duZCk7CisJCQlpZiAo
Y3duZF9pbl9tdHUgPT0gMCkgeworCQkJCS8qIFVzaW5nIDAgbWVhbnMgdGhhdCB0aGUgdmFsdWUg
b2YgUkZDIDQ5NjAgaXMgdXNlZC4gKi8KKwkJCQljd25kID0gbWluKChuZXQtPm10dSAqIDQpLCBt
YXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7CisJCQl9IGVsc2UgeworCQkJ
CS8qCisJCQkJICogV2UgdGFrZSB0aGUgbWluaW11bSBvZiB0aGUgYnVyc3QgbGltaXQgYW5kIHRo
ZQorCQkJCSAqIGluaXRpYWwgY29uZ2VzdGlvbiB3aW5kb3cuCisJCQkJICovCisJCQkJaWYgKChz
dGNiLT5hc29jLm1heF9idXJzdCA+IDApICYmIChjd25kX2luX210dSA+IHN0Y2ItPmFzb2MubWF4
X2J1cnN0KSkKKwkJCQkJY3duZF9pbl9tdHUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKKwkJCQlj
d25kID0gKG5ldC0+bXR1IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkgKiBjd25kX2luX210dTsK
KwkJCX0KKwkJCWlmIChuZXQtPmN3bmQgPiBjd25kKSB7CisJCQkJLyogT25seSBzZXQgaWYgd2Ug
YXJlIG5vdCBhIHRpbWVvdXQgKGkuZS4gZG93biB0byAxIG10dSkgKi8KKwkJCQluZXQtPmN3bmQg
PSBjd25kOworCQkJfQorCQl9CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9zZXRfcnRjY19p
bml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCSAgICAgICBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQpCit7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAzMDAwCisJdWludDY0X3QgdnRhZywgcHJvYmVwb2ludDsKKworI2VuZGlm
CisJc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCXN0Y2ItPmFzb2MudXNl
X3ByZWNpc2VfdGltZSA9IDE7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAzMDAwCisJcHJvYmVwb2ludCA9ICgoKHVpbnQ2NF90KW5ldC0+Y3duZCkg
PDwgMzIpOworCXByb2JlcG9pbnQgfD0gICgoOSA8PCAxNikgfCAwKTsKKwl2dGFnID0gKG5ldC0+
cnR0IDw8IDMyKSB8CisJCSgoKHVpbnQzMl90KShzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0KSkg
PDwgMTYpIHwKKwkJKHN0Y2ItPnJwb3J0KTsKKwlTRFRfUFJPQkU1KHNjdHAsIGN3bmQsIG5ldCwg
cnR0dmFyLAorCQkgIHZ0YWcsCisJCSAgMCwKKwkJICAwLAorCQkgIDAsCisJCSAgcHJvYmVwb2lu
dCk7CisjZW5kaWYKKwluZXQtPmNjX21vZC5ydGNjLmxid19ydHQgPSAwOworCW5ldC0+Y2NfbW9k
LnJ0Y2MuY3duZF9hdF9id19zZXQgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3JlZHVjZSA9
IDA7CisJbmV0LT5jY19tb2QucnRjYy5sYncgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2Mudm9sX3Jl
ZHVjZSA9IDA7CisJbmV0LT5jY19tb2QucnRjYy5id19ieXRlc19hdF9sYXN0X3J0dGMgPSAwOwor
CW5ldC0+Y2NfbW9kLnJ0Y2MuYndfdG90X3RpbWUgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2MuYndf
Ynl0ZXMgPSAwOworCW5ldC0+Y2NfbW9kLnJ0Y2MudGxzX25lZWRzX3NldCA9IDA7CisJbmV0LT5j
Y19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFy
ZXQpOworCW5ldC0+Y2NfbW9kLnJ0Y2Muc3RlYWR5X3N0ZXAgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc3RlYWR5X3N0ZXApOworCW5ldC0+Y2NfbW9kLnJ0Y2MudXNlX2RjY2NfZWNuID0gU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3VzZV9kY2NjX2Vjbik7CisJbmV0LT5jY19tb2QucnRjYy5zdGVwX2Nu
dCA9IDA7CisJbmV0LT5jY19tb2QucnRjYy5sYXN0X3N0ZXBfc3RhdGUgPSAwOworCisKK30KKwor
c3RhdGljIGludAorc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbihzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIGludCBzZXRvcmdldCwKKwkJCSAgICAgc3RydWN0IHNjdHBfY2Nfb3B0aW9uICpjY19v
cHQpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCWlmIChzZXRvcmdldCA9PSAxKSB7CisJ
CS8qIGEgc2V0ICovCisJCWlmIChjY19vcHQtPm9wdGlvbiA9PSBTQ1RQX0NDX09QVF9SVENDX1NF
VE1PREUpIHsKKwkJCWlmICgoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMCkgJiYK
KwkJCSAgICAoY2Nfb3B0LT5haWRfdmFsdWUuYXNzb2NfdmFsdWUgIT0gMSkpIHsKKwkJCQlyZXR1
cm4gKEVJTlZBTCk7CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7CisJCQkJbmV0LT5jY19tb2QucnRjYy5yZXRfZnJvbV9lcSA9IGNjX29w
dC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJfQorCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0
aW9uID09IFNDVFBfQ0NfT1BUX1VTRV9EQ0NDX0VDTikgeworCQkJaWYgKChjY19vcHQtPmFpZF92
YWx1ZS5hc3NvY192YWx1ZSAhPSAwKSAmJgorCQkJICAgIChjY19vcHQtPmFpZF92YWx1ZS5hc3Nv
Y192YWx1ZSAhPSAxKSkgeworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCVRBSUxRX0ZP
UkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQluZXQtPmNjX21v
ZC5ydGNjLnVzZV9kY2NjX2VjbiA9IGNjX29wdC0+YWlkX3ZhbHVlLmFzc29jX3ZhbHVlOworCQkJ
fQorCQl9IGVsc2UgaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0NfT1BUX1NURUFEWV9TVEVQ
KSB7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCQkJbmV0LT5jY19tb2QucnRjYy5zdGVhZHlfc3RlcCA9IGNjX29wdC0+YWlkX3ZhbHVlLmFz
c29jX3ZhbHVlOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJ
fSBlbHNlIHsKKwkJLyogYSBnZXQgKi8KKwkJaWYgKGNjX29wdC0+b3B0aW9uID09IFNDVFBfQ0Nf
T1BUX1JUQ0NfU0VUTU9ERSkgeworCQkJbmV0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0
cyk7CisJCQlpZiAobmV0ID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKEVGQVVMVCk7CisJCQl9CisJ
CQljY19vcHQtPmFpZF92YWx1ZS5hc3NvY192YWx1ZSA9IG5ldC0+Y2NfbW9kLnJ0Y2MucmV0X2Zy
b21fZXE7CisJCX0gZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfVVNFX0RD
Q0NfRUNOKSB7CisJCQluZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJCWlm
IChuZXQgPT0gTlVMTCkgeworCQkJCXJldHVybiAoRUZBVUxUKTsKKwkJCX0KKwkJCWNjX29wdC0+
YWlkX3ZhbHVlLmFzc29jX3ZhbHVlID0gbmV0LT5jY19tb2QucnRjYy51c2VfZGNjY19lY247CisJ
CX0gZWxzZSBpZiAoY2Nfb3B0LT5vcHRpb24gPT0gU0NUUF9DQ19PUFRfU1RFQURZX1NURVApIHsK
KwkJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKG5ldCA9PSBO
VUxMKSB7CisJCQkJcmV0dXJuIChFRkFVTFQpOworCQkJfQorCQkJY2Nfb3B0LT5haWRfdmFsdWUu
YXNzb2NfdmFsdWUgPSBuZXQtPmNjX21vZC5ydGNjLnN0ZWFkeV9zdGVwOworCQl9IGVsc2Ugewor
CQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2
b2lkCitzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfcGFja2V0X3RyYW5zbWl0dGVkKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWlmIChuZXQtPmNjX21vZC5ydGNj
LnRsc19uZWVkc19zZXQgPT0gMCkgeworCQlTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5ldC0+Y2Nf
bW9kLnJ0Y2MudGxzKTsKKwkJbmV0LT5jY19tb2QucnRjYy50bHNfbmVlZHNfc2V0ID0gMjsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfc2FjayhzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAor
CQkJCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2FsbCwgaW50IHdpbGxfZXhpdCkKK3sK
KwkvKiBQYXNzaW5nIGEgb25lIGFyZ3VtZW50IGF0IHRoZSBsYXN0IGVuYWJsZXMgdGhlIHJ0Y2Mg
YWxnb3JpdGhtICovCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrX2NvbW1vbihzdGNiLCBh
c29jLCBhY2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdCwgMSk7Cit9CisKK3N0YXRp
YyB2b2lkCitzY3RwX3J0dF9ydGNjX2NhbGN1bGF0ZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiIFND
VFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5l
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqbm93IFNDVFBfVU5V
U0VEKQoreworCW5ldC0+Y2NfbW9kLnJ0Y2MucnR0X3NldF90aGlzX3NhY2sgPSAxOworfQorCisv
KiBIZXJlIHN0YXJ0cyBTYWxseSBGbG95ZHMgSFMtVENQICovCisKK3N0cnVjdCBzY3RwX2hzX3Jh
aXNlX2Ryb3AgeworCWludDMyX3QgY3duZDsKKwlpbnQ4X3QgaW5jcmVhc2U7CisJaW50OF90IGRy
b3BfcGVyY2VudDsKK307CisKKyNkZWZpbmUgU0NUUF9IU19UQUJMRV9TSVpFIDczCisKK3N0YXRp
YyBjb25zdCBzdHJ1Y3Qgc2N0cF9oc19yYWlzZV9kcm9wIHNjdHBfY3duZF9hZGp1c3RbU0NUUF9I
U19UQUJMRV9TSVpFXSA9IHsKKwl7MzgsIDEsIDUwfSwJCS8qIDAgICAqLworCXsxMTgsIDIsIDQ0
fSwJCS8qIDEgICAqLworCXsyMjEsIDMsIDQxfSwJCS8qIDIgICAqLworCXszNDcsIDQsIDM4fSwJ
CS8qIDMgICAqLworCXs0OTUsIDUsIDM3fSwJCS8qIDQgICAqLworCXs2NjMsIDYsIDM1fSwJCS8q
IDUgICAqLworCXs4NTEsIDcsIDM0fSwJCS8qIDYgICAqLworCXsxMDU4LCA4LCAzM30sCQkvKiA3
ICAgKi8KKwl7MTI4NCwgOSwgMzJ9LAkJLyogOCAgICovCisJezE1MjksIDEwLCAzMX0sCQkvKiA5
ICAgKi8KKwl7MTc5MywgMTEsIDMwfSwJCS8qIDEwICAqLworCXsyMDc2LCAxMiwgMjl9LAkJLyog
MTEgICovCisJezIzNzgsIDEzLCAyOH0sCQkvKiAxMiAgKi8KKwl7MjY5OSwgMTQsIDI4fSwJCS8q
IDEzICAqLworCXszMDM5LCAxNSwgMjd9LAkJLyogMTQgICovCisJezMzOTksIDE2LCAyN30sCQkv
KiAxNSAgKi8KKwl7Mzc3OCwgMTcsIDI2fSwJCS8qIDE2ICAqLworCXs0MTc3LCAxOCwgMjZ9LAkJ
LyogMTcgICovCisJezQ1OTYsIDE5LCAyNX0sCQkvKiAxOCAgKi8KKwl7NTAzNiwgMjAsIDI1fSwJ
CS8qIDE5ICAqLworCXs1NDk3LCAyMSwgMjR9LAkJLyogMjAgICovCisJezU5NzksIDIyLCAyNH0s
CQkvKiAyMSAgKi8KKwl7NjQ4MywgMjMsIDIzfSwJCS8qIDIyICAqLworCXs3MDA5LCAyNCwgMjN9
LAkJLyogMjMgICovCisJezc1NTgsIDI1LCAyMn0sCQkvKiAyNCAgKi8KKwl7ODEzMCwgMjYsIDIy
fSwJCS8qIDI1ICAqLworCXs4NzI2LCAyNywgMjJ9LAkJLyogMjYgICovCisJezkzNDYsIDI4LCAy
MX0sCQkvKiAyNyAgKi8KKwl7OTk5MSwgMjksIDIxfSwJCS8qIDI4ICAqLworCXsxMDY2MSwgMzAs
IDIxfSwJLyogMjkgICovCisJezExMzU4LCAzMSwgMjB9LAkvKiAzMCAgKi8KKwl7MTIwODIsIDMy
LCAyMH0sCS8qIDMxICAqLworCXsxMjgzNCwgMzMsIDIwfSwJLyogMzIgICovCisJezEzNjE0LCAz
NCwgMTl9LAkvKiAzMyAgKi8KKwl7MTQ0MjQsIDM1LCAxOX0sCS8qIDM0ICAqLworCXsxNTI2NSwg
MzYsIDE5fSwJLyogMzUgICovCisJezE2MTM3LCAzNywgMTl9LAkvKiAzNiAgKi8KKwl7MTcwNDIs
IDM4LCAxOH0sCS8qIDM3ICAqLworCXsxNzk4MSwgMzksIDE4fSwJLyogMzggICovCisJezE4OTU1
LCA0MCwgMTh9LAkvKiAzOSAgKi8KKwl7MTk5NjUsIDQxLCAxN30sCS8qIDQwICAqLworCXsyMTAx
MywgNDIsIDE3fSwJLyogNDEgICovCisJezIyMTAxLCA0MywgMTd9LAkvKiA0MiAgKi8KKwl7MjMy
MzAsIDQ0LCAxN30sCS8qIDQzICAqLworCXsyNDQwMiwgNDUsIDE2fSwJLyogNDQgICovCisJezI1
NjE4LCA0NiwgMTZ9LAkvKiA0NSAgKi8KKwl7MjY4ODEsIDQ3LCAxNn0sCS8qIDQ2ICAqLworCXsy
ODE5MywgNDgsIDE2fSwJLyogNDcgICovCisJezI5NTU3LCA0OSwgMTV9LAkvKiA0OCAgKi8KKwl7
MzA5NzUsIDUwLCAxNX0sCS8qIDQ5ICAqLworCXszMjQ1MCwgNTEsIDE1fSwJLyogNTAgICovCisJ
ezMzOTg2LCA1MiwgMTV9LAkvKiA1MSAgKi8KKwl7MzU1ODYsIDUzLCAxNH0sCS8qIDUyICAqLwor
CXszNzI1MywgNTQsIDE0fSwJLyogNTMgICovCisJezM4OTkyLCA1NSwgMTR9LAkvKiA1NCAgKi8K
Kwl7NDA4MDgsIDU2LCAxNH0sCS8qIDU1ICAqLworCXs0MjcwNywgNTcsIDEzfSwJLyogNTYgICov
CisJezQ0Njk0LCA1OCwgMTN9LAkvKiA1NyAgKi8KKwl7NDY3NzYsIDU5LCAxM30sCS8qIDU4ICAq
LworCXs0ODk2MSwgNjAsIDEzfSwJLyogNTkgICovCisJezUxMjU4LCA2MSwgMTN9LAkvKiA2MCAg
Ki8KKwl7NTM2NzcsIDYyLCAxMn0sCS8qIDYxICAqLworCXs1NjIzMCwgNjMsIDEyfSwJLyogNjIg
ICovCisJezU4OTMyLCA2NCwgMTJ9LAkvKiA2MyAgKi8KKwl7NjE3OTksIDY1LCAxMn0sCS8qIDY0
ICAqLworCXs2NDg1MSwgNjYsIDExfSwJLyogNjUgICovCisJezY4MTEzLCA2NywgMTF9LAkvKiA2
NiAgKi8KKwl7NzE2MTcsIDY4LCAxMX0sCS8qIDY3ICAqLworCXs3NTQwMSwgNjksIDEwfSwJLyog
NjggICovCisJezc5NTE3LCA3MCwgMTB9LAkvKiA2OSAgKi8KKwl7ODQwMzUsIDcxLCAxMH0sCS8q
IDcwICAqLworCXs4OTA1MywgNzIsIDEwfSwJLyogNzEgICovCisJezk0NzE3LCA3MywgOX0JCS8q
IDcyICAqLworfTsKKworc3RhdGljIHZvaWQKK3NjdHBfaHNfY3duZF9pbmNyZWFzZShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlpbnQgY3VyX3ZhbCwg
aSwgaW5keCwgaW5jcjsKKwlpbnQgb2xkX2N3bmQgPSBuZXQtPmN3bmQ7CisKKwljdXJfdmFsID0g
bmV0LT5jd25kID4+IDEwOworCWluZHggPSBTQ1RQX0hTX1RBQkxFX1NJWkUgLSAxOworCisJaWYg
KGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQpIHsKKwkJLyogbm9ybWFsIG1vZGUg
Ki8KKwkJaWYgKG5ldC0+bmV0X2FjayA+IG5ldC0+bXR1KSB7CisJCQluZXQtPmN3bmQgKz0gbmV0
LT5tdHU7CisJCX0gZWxzZSB7CisJCQluZXQtPmN3bmQgKz0gbmV0LT5uZXRfYWNrOworCQl9CisJ
fSBlbHNlIHsKKwkJZm9yIChpID0gbmV0LT5sYXN0X2hzX3VzZWQ7IGkgPCBTQ1RQX0hTX1RBQkxF
X1NJWkU7IGkrKykgeworCQkJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0W2ldLmN3bmQp
IHsKKwkJCQlpbmR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQluZXQtPmxhc3RfaHNf
dXNlZCA9IGluZHg7CisJCWluY3IgPSAoKChpbnQzMl90KXNjdHBfY3duZF9hZGp1c3RbaW5keF0u
aW5jcmVhc2UpIDw8IDEwKTsKKwkJbmV0LT5jd25kICs9IGluY3I7CisJfQorCXNjdHBfZW5mb3Jj
ZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJc2N0cF9s
b2dfY3duZChzdGNiLCBuZXQsIChuZXQtPmN3bmQgLSBvbGRfY3duZCksIFNDVFBfQ1dORF9MT0df
RlJPTV9TUyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9oc19jd25kX2RlY3JlYXNlKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCWludCBjdXJf
dmFsLCBpLCBpbmR4OworCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCWN1cl92YWwgPSBu
ZXQtPmN3bmQgPj4gMTA7CisJaWYgKGN1cl92YWwgPCBzY3RwX2N3bmRfYWRqdXN0WzBdLmN3bmQp
IHsKKwkJLyogbm9ybWFsIG1vZGUgKi8KKwkJbmV0LT5zc3RocmVzaCA9IG5ldC0+Y3duZCAvIDI7
CisJCWlmIChuZXQtPnNzdGhyZXNoIDwgKG5ldC0+bXR1ICogMikpIHsKKwkJCW5ldC0+c3N0aHJl
c2ggPSAyICogbmV0LT5tdHU7CisJCX0KKwkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKKwl9
IGVsc2UgeworCQkvKiBkcm9wIGJ5IHRoZSBwcm9wZXIgYW1vdW50ICovCisJCW5ldC0+c3N0aHJl
c2ggPSBuZXQtPmN3bmQgLSAoaW50KSgobmV0LT5jd25kIC8gMTAwKSAqCisJCSAgICAoaW50MzJf
dClzY3RwX2N3bmRfYWRqdXN0W25ldC0+bGFzdF9oc191c2VkXS5kcm9wX3BlcmNlbnQpOworCQlu
ZXQtPmN3bmQgPSBuZXQtPnNzdGhyZXNoOworCQkvKiBub3cgd2hlcmUgYXJlIHdlICovCisJCWlu
ZHggPSBuZXQtPmxhc3RfaHNfdXNlZDsKKwkJY3VyX3ZhbCA9IG5ldC0+Y3duZCA+PiAxMDsKKwkJ
LyogcmVzZXQgd2hlcmUgd2UgYXJlIGluIHRoZSB0YWJsZSAqLworCQlpZiAoY3VyX3ZhbCA8IHNj
dHBfY3duZF9hZGp1c3RbMF0uY3duZCkgeworCQkJLyogZmVlbCBvdXQgb2YgaHMgKi8KKwkJCW5l
dC0+bGFzdF9oc191c2VkID0gMDsKKwkJfSBlbHNlIHsKKwkJCWZvciAoaSA9IGluZHg7IGkgPj0g
MTsgaS0tKSB7CisJCQkJaWYgKGN1cl92YWwgPiBzY3RwX2N3bmRfYWRqdXN0W2kgLSAxXS5jd25k
KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCW5ldC0+bGFzdF9oc191c2VkID0gaW5k
eDsKKwkJfQorCX0KKwlzY3RwX2VuZm9yY2VfY3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsK
KwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01P
TklUT1JfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0g
b2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fRlIpOworCX0KK30KKworc3RhdGljIHZvaWQK
K3NjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykK
K3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCS8qCisJICogQ01UIGZhc3QgcmVjb3Zlcnkg
Y29kZS4gTmVlZCB0byBkZWJ1Zy4gKChzY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAqIChuZXQt
PmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPT0gMCkpKQorCSAqLworCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCWlmICgoYXNvYy0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSA9PSAwKSB8fAorCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDAp
KSB7CisJCQkvKiBvdXQgb2YgYSBSRkMyNTgyIEZhc3QgcmVjb3Zlcnkgd2luZG93PyAqLworCQkJ
aWYgKG5ldC0+bmV0X2FjayA+IDApIHsKKwkJCQkvKgorCQkJCSAqIHBlciBzZWN0aW9uIDcuMi4z
LCBhcmUgdGhlcmUgYW55CisJCQkJICogZGVzdGluYXRpb25zIHRoYXQgaGFkIGEgZmFzdCByZXRy
YW5zbWl0CisJCQkJICogdG8gdGhlbS4gSWYgc28gd2hhdCB3ZSBuZWVkIHRvIGRvIGlzCisJCQkJ
ICogYWRqdXN0IHNzdGhyZXNoIGFuZCBjd25kLgorCQkJCSAqLworCQkJCXN0cnVjdCBzY3RwX3Rt
aXRfY2h1bmsgKmxjaGs7CisKKwkJCQlzY3RwX2hzX2N3bmRfZGVjcmVhc2Uoc3RjYiwgbmV0KTsK
KworCQkJCWxjaGsgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c2VuZF9xdWV1ZSk7CisKKwkJCQluZXQt
PnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOworCQkJCS8qIFR1cm4gb24gZmFzdCByZWNvdmVyeSB3
aW5kb3cgKi8KKwkJCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKKwkJCQlp
ZiAobGNoayA9PSBOVUxMKSB7CisJCQkJCS8qIE1hcmsgZW5kIG9mIHRoZSB3aW5kb3cgKi8KKwkJ
CQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJYXNvYy0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50
c24gLSAxOworCQkJCX0KKworCQkJCS8qCisJCQkJICogQ01UIGZhc3QgcmVjb3ZlcnkgLS0gcGVy
IGRlc3RpbmF0aW9uCisJCQkJICogcmVjb3ZlcnkgdmFyaWFibGUuCisJCQkJICovCisJCQkJbmV0
LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMTsKKworCQkJCWlmIChsY2hrID09IE5VTEwp
IHsKKwkJCQkJLyogTWFyayBlbmQgb2YgdGhlIHdpbmRvdyAqLworCQkJCQluZXQtPmZhc3RfcmVj
b3ZlcnlfdHNuID0gYXNvYy0+c2VuZGluZ19zZXEgLSAxOworCQkJCX0gZWxzZSB7CisJCQkJCW5l
dC0+ZmFzdF9yZWNvdmVyeV90c24gPSBsY2hrLT5yZWMuZGF0YS50c24gLSAxOworCQkJCX0KKwor
CQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwKKwkJCQkJCXN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfQ0Nf
RlVOQ1RJT05TICsgU0NUUF9MT0NfMik7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfU0VORCwKKwkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJfQorCQl9
IGVsc2UgaWYgKG5ldC0+bmV0X2FjayA+IDApIHsKKwkJCS8qCisJCQkgKiBNYXJrIGEgcGVnIHRo
YXQgd2UgV09VTEQgaGF2ZSBkb25lIGEgY3duZAorCQkJICogcmVkdWN0aW9uIGJ1dCBSRkMyNTgy
IHByZXZlbnRlZCB0aGlzIGFjdGlvbi4KKwkJCSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
ZmFzdHJldHJhbnNpbnJ0dCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hzX2N3
bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSBpbnQgYWNjdW1fbW92ZWQsIGludCByZW5lZ2VkX2Fs
bCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiB1cGRhdGUgY3duZCBhbmQg
RWFybHkgRlIgICAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJVEFJTFFf
Rk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKworI2lmZGVmIEpBTkFfQ01U
X0ZBU1RfUkVDT1ZFUlkKKwkJLyoKKwkJICogQ01UIGZhc3QgcmVjb3ZlcnkgY29kZS4gTmVlZCB0
byBkZWJ1Zy4KKwkJICovCisJCWlmIChuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYg
bmV0LT5uZXdfcHNldWRvX2N1bWFjaykgeworCQkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3Rf
YWNrZWRfc2VxLCBuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSB8fAorCQkJICAgIFNDVFBfVFNOX0dF
KG5ldC0+cHNldWRvX2N1bWFjayxuZXQtPmZhc3RfcmVjb3ZlcnlfdHNuKSkgeworCQkJCW5ldC0+
d2lsbF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAxOworCQkJfQorCQl9CisjZW5kaWYKKwkJLyogaWYg
bm90aGluZyB3YXMgYWNrZWQgb24gdGhpcyBkZXN0aW5hdGlvbiBza2lwIGl0ICovCisJCWlmIChu
ZXQtPm5ldF9hY2sgPT0gMCkgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQo
c3RjYiwgbmV0LCAwLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7CisJCQl9CisJCQljb250aW51
ZTsKKwkJfQorI2lmZGVmIEpBTkFfQ01UX0ZBU1RfUkVDT1ZFUlkKKyAgICAgICAgICAgICAgICAv
KiBDTVQgZmFzdCByZWNvdmVyeSBjb2RlCisJCSAqLworCQkvKgorCQlpZiAoc2N0cF9jbXRfb25f
b2ZmID4gMCAmJiBuZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgbmV0LT53aWxsX2V4
aXRfZmFzdF9yZWNvdmVyeSA9PSAwKSB7CisJCSAgICBAQEAgRG8gc29tZXRoaW5nCisJCSB9CisJ
CSBlbHNlIGlmIChzY3RwX2NtdF9vbl9vZmYgPT0gMCAmJiBhc29jLT5mYXN0X3JldHJhbl9sb3Nz
X3JlY292ZXJ5ICYmIHdpbGxfZXhpdCA9PSAwKSB7CisJCSovCisjZW5kaWYKKworCQkgaWYgKGFz
b2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYKKwkJICAgICAod2lsbF9leGl0ID09IDAp
ICYmCisJCSAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQkJLyoKKwkJCSAq
IElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQKKwkJCSAqIHVwZGF0
ZQorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogQ01UOiBDVUMgYWxnb3JpdGht
LiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkgKiBtb3ZlZC4KKwkJICovCisJ
CWlmIChhY2N1bV9tb3ZlZCB8fAorCQkgICAgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAm
JiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgeworCQkJLyogSWYgdGhlIGN1bXVsYXRpdmUgYWNr
IG1vdmVkIHdlIGNhbiBwcm9jZWVkICovCisJCQlpZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJl
c2gpIHsKKwkJCQkvKiBXZSBhcmUgaW4gc2xvdyBzdGFydCAqLworCQkJCWlmIChuZXQtPmZsaWdo
dF9zaXplICsgbmV0LT5uZXRfYWNrID49IG5ldC0+Y3duZCkgeworCQkJCQlzY3RwX2hzX2N3bmRf
aW5jcmVhc2Uoc3RjYiwgbmV0KTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQkJCVNDVFBf
Q1dORF9MT0dfTk9BRFZfU1MpOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBX
ZSBhcmUgaW4gY29uZ2VzdGlvbiBhdm9pZGFuY2UgKi8KKwkJCQluZXQtPnBhcnRpYWxfYnl0ZXNf
YWNrZWQgKz0gbmV0LT5uZXRfYWNrOworCQkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSArIG5ldC0+
bmV0X2FjayA+PSBuZXQtPmN3bmQpICYmCisJCQkJICAgIChuZXQtPnBhcnRpYWxfYnl0ZXNfYWNr
ZWQgPj0gbmV0LT5jd25kKSkgeworCQkJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgLT0gbmV0
LT5jd25kOworCQkJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQkJCXNjdHBfZW5mb3JjZV9j
d25kX2xpbWl0KGFzb2MsIG5ldCk7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9n
X2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJCQlTQ1RQX0NXTkRfTE9HX0ZST01fQ0Ep
OworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9s
b2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bmV0X2FjaywKKwkJCQkJCQlTQ1RQX0NXTkRfTE9HX05P
QURWX0NBKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUp
IHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5tdHUsCisJCQkJCVNDVFBfQ1dO
RF9MT0dfTk9fQ1VNQUNLKTsKKwkJCX0KKwkJfQorCX0KK30KKworCisvKgorICogSC1UQ1AgY29u
Z2VzdGlvbiBjb250cm9sLiBUaGUgYWxnb3JpdGhtIGlzIGRldGFpbGVkIGluOgorICogUi5OLlNo
b3J0ZW4sIEQuSi5MZWl0aDoKKyAqICAgIkgtVENQOiBUQ1AgZm9yIGhpZ2gtc3BlZWQgYW5kIGxv
bmctZGlzdGFuY2UgbmV0d29ya3MiCisgKiAgIFByb2MuIFBGTERuZXQsIEFyZ29ubmUsIDIwMDQu
CisgKiBodHRwOi8vd3d3LmhhbWlsdG9uLmllL25ldC9odGNwMy5wZGYKKyAqLworCisKK3N0YXRp
YyBpbnQgdXNlX3J0dF9zY2FsaW5nID0gMTsKK3N0YXRpYyBpbnQgdXNlX2JhbmR3aWR0aF9zd2l0
Y2ggPSAxOworCitzdGF0aWMgaW5saW5lIGludAorYmV0d2Vlbih1aW50MzJfdCBzZXExLCB1aW50
MzJfdCBzZXEyLCB1aW50MzJfdCBzZXEzKQoreworCXJldHVybiAoc2VxMyAtIHNlcTIgPj0gc2Vx
MSAtIHNlcTIpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitodGNwX2NvbmdfdGltZShz
dHJ1Y3QgaHRjcCAqY2EpCit7CisJcmV0dXJuIChzY3RwX2dldF90aWNrX2NvdW50KCkgLSBjYS0+
bGFzdF9jb25nKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdAoraHRjcF9jY291bnQoc3Ry
dWN0IGh0Y3AgKmNhKQoreworCXJldHVybiAoaHRjcF9jb25nX3RpbWUoY2EpL2NhLT5taW5SVFQp
OworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2h0Y3BfcmVzZXQoc3RydWN0IGh0Y3AgKmNhKQor
eworCWNhLT51bmRvX2xhc3RfY29uZyA9IGNhLT5sYXN0X2Nvbmc7CisJY2EtPnVuZG9fbWF4UlRU
ID0gY2EtPm1heFJUVDsKKwljYS0+dW5kb19vbGRfbWF4QiA9IGNhLT5vbGRfbWF4QjsKKwljYS0+
bGFzdF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOworfQorCisjaWZkZWYgU0NUUF9OT1Rf
VVNFRAorCitzdGF0aWMgdWludDMyX3QKK2h0Y3BfY3duZF91bmRvKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFz
dF9jb25nID0gbmV0LT5jY19tb2QuaHRjcF9jYS51bmRvX2xhc3RfY29uZzsKKwluZXQtPmNjX21v
ZC5odGNwX2NhLm1heFJUVCA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19tYXhSVFQ7CisJbmV0
LT5jY19tb2QuaHRjcF9jYS5vbGRfbWF4QiA9IG5ldC0+Y2NfbW9kLmh0Y3BfY2EudW5kb19vbGRf
bWF4QjsKKwlyZXR1cm4gKG1heChuZXQtPmN3bmQsICgobmV0LT5zc3RocmVzaC9uZXQtPm10dTw8
NykvbmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhKSpuZXQtPm10dSkpOworfQorCisjZW5kaWYKKwor
c3RhdGljIGlubGluZSB2b2lkCittZWFzdXJlX3J0dChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7
CisJdWludDMyX3Qgc3J0dCA9IG5ldC0+bGFzdHNhPj5TQ1RQX1JUVF9TSElGVDsKKworCS8qIGtl
ZXAgdHJhY2sgb2YgbWluaW11bSBSVFQgc2VlbiBzbyBmYXIsIG1pblJUVCBpcyB6ZXJvIGF0IGZp
cnN0ICovCisJaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID4gc3J0dCB8fCAhbmV0LT5j
Y19tb2QuaHRjcF9jYS5taW5SVFQpCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWluUlRUID0gc3J0
dDsKKworCS8qIG1heCBSVFQgKi8KKwlpZiAobmV0LT5mYXN0X3JldHJhbl9pcCA9PSAwICYmIG5l
dC0+c3N0aHJlc2ggPCAweEZGRkYgJiYgaHRjcF9jY291bnQoJm5ldC0+Y2NfbW9kLmh0Y3BfY2Ep
ID4gMykgeworCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5tYXhSVFQgPCBuZXQtPmNjX21vZC5o
dGNwX2NhLm1pblJUVCkKKwkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gbmV0LT5jY19t
b2QuaHRjcF9jYS5taW5SVFQ7CisJCWlmIChuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA8IHNy
dHQgJiYgc3J0dCA8PSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCtNU0VDX1RPX1RJQ0tTKDIw
KSkKKwkJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4UlRUID0gc3J0dDsKKwl9Cit9CisKK3N0YXRp
YyB2b2lkCittZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQoc3RydWN0IHNjdHBfbmV0cyAqbmV0
KQoreworCXVpbnQzMl90IG5vdyA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsKKworCWlmIChuZXQt
PmZhc3RfcmV0cmFuX2lwID09IDApCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQg
PSBuZXQtPm5ldF9hY2s7CisKKwlpZiAoIXVzZV9iYW5kd2lkdGhfc3dpdGNoKQorCQlyZXR1cm47
CisKKwkvKiBhY2hpZXZlZCB0aHJvdWdocHV0IGNhbGN1bGF0aW9ucyAqLworCS8qIEpSUyAtIG5v
dCAxMDAlIHN1cmUgb2YgdGhpcyBzdGF0ZW1lbnQgKi8KKwlpZiAobmV0LT5mYXN0X3JldHJhbl9p
cCA9PSAxKSB7CisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZWNvdW50ID0gMDsKKwkJbmV0LT5j
Y19tb2QuaHRjcF9jYS5sYXN0dGltZSA9IG5vdzsKKwkJcmV0dXJuOworCX0KKworCW5ldC0+Y2Nf
bW9kLmh0Y3BfY2EuYnl0ZWNvdW50ICs9IG5ldC0+bmV0X2FjazsKKwlpZiAoKG5ldC0+Y2NfbW9k
Lmh0Y3BfY2EuYnl0ZWNvdW50ID49IG5ldC0+Y3duZCAtICgoKG5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
YWxwaGEgPj4gNykgPyAobmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA+PiA3KSA6IDEpICogbmV0
LT5tdHUpKSAmJgorCSAgICAobm93IC0gbmV0LT5jY19tb2QuaHRjcF9jYS5sYXN0dGltZSA+PSBu
ZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVCkgJiYKKwkgICAgKG5ldC0+Y2NfbW9kLmh0Y3BfY2Eu
bWluUlRUID4gMCkpIHsKKwkJdWludDMyX3QgY3VyX0JpID0gbmV0LT5jY19tb2QuaHRjcF9jYS5i
eXRlY291bnQvbmV0LT5tdHUqaHovKG5vdyAtIG5ldC0+Y2NfbW9kLmh0Y3BfY2EubGFzdHRpbWUp
OworCisJCWlmIChodGNwX2Njb3VudCgmbmV0LT5jY19tb2QuaHRjcF9jYSkgPD0gMykgeworCQkJ
LyoganVzdCBhZnRlciBiYWNrb2ZmICovCisJCQluZXQtPmNjX21vZC5odGNwX2NhLm1pbkIgPSBu
ZXQtPmNjX21vZC5odGNwX2NhLm1heEIgPSBuZXQtPmNjX21vZC5odGNwX2NhLkJpID0gY3VyX0Jp
OworCQl9IGVsc2UgeworCQkJbmV0LT5jY19tb2QuaHRjcF9jYS5CaSA9ICgzKm5ldC0+Y2NfbW9k
Lmh0Y3BfY2EuQmkgKyBjdXJfQmkpLzQ7CisJCQlpZiAobmV0LT5jY19tb2QuaHRjcF9jYS5CaSA+
IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKKwkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1heEIg
PSBuZXQtPmNjX21vZC5odGNwX2NhLkJpOworCQkJaWYgKG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWlu
QiA+IG5ldC0+Y2NfbW9kLmh0Y3BfY2EubWF4QikKKwkJCQluZXQtPmNjX21vZC5odGNwX2NhLm1p
bkIgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1heEI7CisJCX0KKwkJbmV0LT5jY19tb2QuaHRjcF9j
YS5ieXRlY291bnQgPSAwOworCQluZXQtPmNjX21vZC5odGNwX2NhLmxhc3R0aW1lID0gbm93Owor
CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitodGNwX2JldGFfdXBkYXRlKHN0cnVjdCBodGNw
ICpjYSwgdWludDMyX3QgbWluUlRULCB1aW50MzJfdCBtYXhSVFQpCit7CisJaWYgKHVzZV9iYW5k
d2lkdGhfc3dpdGNoKSB7CisJCXVpbnQzMl90IG1heEIgPSBjYS0+bWF4QjsKKwkJdWludDMyX3Qg
b2xkX21heEIgPSBjYS0+b2xkX21heEI7CisJCWNhLT5vbGRfbWF4QiA9IGNhLT5tYXhCOworCisJ
CWlmICghYmV0d2Vlbig1Km1heEIsIDQqb2xkX21heEIsIDYqb2xkX21heEIpKSB7CisJCQljYS0+
YmV0YSA9IEJFVEFfTUlOOworCQkJY2EtPm1vZGVzd2l0Y2ggPSAwOworCQkJcmV0dXJuOworCQl9
CisJfQorCisJaWYgKGNhLT5tb2Rlc3dpdGNoICYmIG1pblJUVCA+ICh1aW50MzJfdClNU0VDX1RP
X1RJQ0tTKDEwKSAmJiBtYXhSVFQpIHsKKwkJY2EtPmJldGEgPSAobWluUlRUPDw3KS9tYXhSVFQ7
CisJCWlmIChjYS0+YmV0YSA8IEJFVEFfTUlOKQorCQkJY2EtPmJldGEgPSBCRVRBX01JTjsKKwkJ
ZWxzZSBpZiAoY2EtPmJldGEgPiBCRVRBX01BWCkKKwkJCWNhLT5iZXRhID0gQkVUQV9NQVg7CisJ
fSBlbHNlIHsKKwkJY2EtPmJldGEgPSBCRVRBX01JTjsKKwkJY2EtPm1vZGVzd2l0Y2ggPSAxOwor
CX0KK30KKworc3RhdGljIGlubGluZSB2b2lkCitodGNwX2FscGhhX3VwZGF0ZShzdHJ1Y3QgaHRj
cCAqY2EpCit7CisJdWludDMyX3QgbWluUlRUID0gY2EtPm1pblJUVDsKKwl1aW50MzJfdCBmYWN0
b3IgPSAxOworCXVpbnQzMl90IGRpZmYgPSBodGNwX2NvbmdfdGltZShjYSk7CisKKwlpZiAoZGlm
ZiA+ICh1aW50MzJfdCloeikgeworCQlkaWZmIC09IGh6OworCQlmYWN0b3IgPSAxKyAoIDEwKmRp
ZmYgKyAoKGRpZmYvMikqKGRpZmYvMikvaHopKS9oejsKKwl9CisKKwlpZiAodXNlX3J0dF9zY2Fs
aW5nICYmIG1pblJUVCkgeworCQl1aW50MzJfdCBzY2FsZSA9IChoejw8MykvKDEwKm1pblJUVCk7
CisJCXNjYWxlID0gbWluKG1heChzY2FsZSwgMVU8PDIpLCAxMFU8PDMpOyAvKiBjbGFtcGluZyBy
YXRpbyB0byBpbnRlcnZhbCBbMC41LDEwXTw8MyAqLworCQlmYWN0b3IgPSAoZmFjdG9yPDwzKS9z
Y2FsZTsKKwkJaWYgKCFmYWN0b3IpCisJCQlmYWN0b3IgPSAxOworCX0KKworCWNhLT5hbHBoYSA9
IDIqZmFjdG9yKigoMTw8NyktY2EtPmJldGEpOworCWlmICghY2EtPmFscGhhKQorCQljYS0+YWxw
aGEgPSBBTFBIQV9CQVNFOworfQorCisvKiBBZnRlciB3ZSBoYXZlIHRoZSBydHQgZGF0YSB0byBj
YWxjdWxhdGUgYmV0YSwgd2UnZCBzdGlsbCBwcmVmZXIgdG8gd2FpdCBvbmUKKyAqIHJ0dCBiZWZv
cmUgd2UgYWRqdXN0IG91ciBiZXRhIHRvIGVuc3VyZSB3ZSBhcmUgd29ya2luZyBmcm9tIGEgY29u
c2lzdGVudAorICogZGF0YS4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQg
d2hlbiB3ZSBoaXQgYSBjb25nZXN0aW9uIGV2ZW50IHNpbmNlIG9ubHkgYXQKKyAqIHRoYXQgcG9p
bnQgZG8gd2UgcmVhbGx5IGhhdmUgYSByZWFsIHNlbnNlIG9mIG1heFJUVCAodGhlIHF1ZXVlcyBl
biByb3V0ZQorICogd2VyZSBnZXR0aW5nIGp1c3QgdG9vIGZ1bGwgbm93KS4KKyAqLworc3RhdGlj
IHZvaWQKK2h0Y3BfcGFyYW1fdXBkYXRlKHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1aW50
MzJfdCBtaW5SVFQgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1pblJUVDsKKwl1aW50MzJfdCBtYXhS
VFQgPSBuZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVDsKKworCWh0Y3BfYmV0YV91cGRhdGUoJm5l
dC0+Y2NfbW9kLmh0Y3BfY2EsIG1pblJUVCwgbWF4UlRUKTsKKwlodGNwX2FscGhhX3VwZGF0ZSgm
bmV0LT5jY19tb2QuaHRjcF9jYSk7CisKKwkvKiBhZGQgc2xvd2x5IGZhZGluZyBtZW1vcnkgZm9y
IG1heFJUVCB0byBhY2NvbW1vZGF0ZSByb3V0aW5nIGNoYW5nZXMgZXRjICovCisJaWYgKG1pblJU
VCA+IDAgJiYgbWF4UlRUID4gbWluUlRUKQorCQluZXQtPmNjX21vZC5odGNwX2NhLm1heFJUVCA9
IG1pblJUVCArICgobWF4UlRULW1pblJUVCkqOTUpLzEwMDsKK30KKworc3RhdGljIHVpbnQzMl90
CitodGNwX3JlY2FsY19zc3RocmVzaChzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaHRjcF9w
YXJhbV91cGRhdGUobmV0KTsKKwlyZXR1cm4gKG1heCgoKG5ldC0+Y3duZC9uZXQtPm10dSAqIG5l
dC0+Y2NfbW9kLmh0Y3BfY2EuYmV0YSkgPj4gNykqbmV0LT5tdHUsIDJVKm5ldC0+bXR1KSk7Cit9
CisKK3N0YXRpYyB2b2lkCitodGNwX2NvbmdfYXZvaWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJLyotCisJICogSG93IHRvIGhhbmRsZSB0aGVzZSBm
dW5jdGlvbnM/CisgICAgICAgICAqCWlmICghdGNwX2lzX2N3bmRfbGltaXRlZChzaywgaW5fZmxp
Z2h0KSkgUlJTIC0gZ29vZCBxdWVzdGlvbi4KKwkgKgkJcmV0dXJuOworCSAqLworICAgICAgICBp
ZiAobmV0LT5jd25kIDw9IG5ldC0+c3N0aHJlc2gpIHsKKwkJLyogV2UgYXJlIGluIHNsb3cgc3Rh
cnQgKi8KKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUgKyBuZXQtPm5ldF9hY2sgPj0gbmV0LT5jd25k
KSB7CisJCQlpZiAobmV0LT5uZXRfYWNrID4gKG5ldC0+bXR1ICogU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX0wyX2FiY192YXJpYWJsZSkpKSB7CisJCQkJbmV0LT5jd25kICs9IChuZXQtPm10dSAqIFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9MMl9hYmNfdmFyaWFibGUpKTsKKwkJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7
CisJCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0LCBuZXQtPm10dSwKKwkJCQkJCVNDVFBfQ1dO
RF9MT0dfRlJPTV9TUyk7CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCW5ldC0+Y3duZCArPSBu
ZXQtPm5ldF9hY2s7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfQ1dORF9NT05JVE9SX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQkJU0NUUF9DV05EX0xPR19GUk9NX1NTKTsKKwkJCQl9
CisKKwkJCX0KKwkJCXNjdHBfZW5mb3JjZV9jd25kX2xpbWl0KCZzdGNiLT5hc29jLCBuZXQpOwor
CQl9IGVsc2UgeworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbmV0
LCBuZXQtPm5ldF9hY2ssCisJCQkJCVNDVFBfQ1dORF9MT0dfTk9BRFZfU1MpOworCQkJfQorCQl9
CisJfSBlbHNlIHsKKwkJbWVhc3VyZV9ydHQobmV0KTsKKworCQkvKiBJbiBkYW5nZXJvdXMgYXJl
YSwgaW5jcmVhc2Ugc2xvd2x5LgorCQkgKiBJbiB0aGVvcnkgdGhpcyBpcyBuZXQtPmN3bmQgKz0g
YWxwaGEgLyBuZXQtPmN3bmQKKwkJICovCisJCS8qIFdoYXQgaXMgc25kX2N3bmRfY250Pz8gKi8K
KwkJaWYgKCgobmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkL25ldC0+bXR1ICogbmV0LT5jY19tb2Qu
aHRjcF9jYS5hbHBoYSkgPj4gNykqbmV0LT5tdHUgPj0gbmV0LT5jd25kKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAvKi0KKwkJCSAqIERvZXMgU0NUUCBoYXZlIGEgY3duZCBjbGFtcD8KKwkJ
CSAqIGlmIChuZXQtPnNuZF9jd25kIDwgbmV0LT5zbmRfY3duZF9jbGFtcCkgLSBOb3BlIChSUlMp
LgorCQkJICovCisJCQluZXQtPmN3bmQgKz0gbmV0LT5tdHU7CisJCQluZXQtPnBhcnRpYWxfYnl0
ZXNfYWNrZWQgPSAwOworCQkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQoJnN0Y2ItPmFzb2MsIG5l
dCk7CisJCQlodGNwX2FscGhhX3VwZGF0ZSgmbmV0LT5jY19tb2QuaHRjcF9jYSk7CisJCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1Jf
RU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+bXR1LAorCQkJCQlT
Q1RQX0NXTkRfTE9HX0ZST01fQ0EpOworCQkJfQorCQl9IGVsc2UgeworCQkJbmV0LT5wYXJ0aWFs
X2J5dGVzX2Fja2VkICs9IG5ldC0+bmV0X2FjazsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3Rw
X2xvZ19jd25kKHN0Y2IsIG5ldCwgbmV0LT5uZXRfYWNrLAorCQkJCQlTQ1RQX0NXTkRfTE9HX05P
QURWX0NBKTsKKwkJCX0KKwkJfQorCisJCW5ldC0+Y2NfbW9kLmh0Y3BfY2EuYnl0ZXNfYWNrZWQg
PSBuZXQtPm10dTsKKwl9Cit9CisKKyNpZmRlZiBTQ1RQX05PVF9VU0VECisvKiBMb3dlciBib3Vu
ZCBvbiBjb25nZXN0aW9uIHdpbmRvdy4gKi8KK3N0YXRpYyB1aW50MzJfdAoraHRjcF9taW5fY3du
ZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlyZXR1
cm4gKG5ldC0+c3N0aHJlc2gpOworfQorI2VuZGlmCisKK3N0YXRpYyB2b2lkCitodGNwX2luaXQo
c3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCW1lbXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSwg
MCwgc2l6ZW9mKHN0cnVjdCBodGNwKSk7CisJbmV0LT5jY19tb2QuaHRjcF9jYS5hbHBoYSA9IEFM
UEhBX0JBU0U7CisJbmV0LT5jY19tb2QuaHRjcF9jYS5iZXRhID0gQkVUQV9NSU47CisJbmV0LT5j
Y19tb2QuaHRjcF9jYS5ieXRlc19hY2tlZCA9IG5ldC0+bXR1OworCW5ldC0+Y2NfbW9kLmh0Y3Bf
Y2EubGFzdF9jb25nID0gc2N0cF9nZXRfdGlja19jb3VudCgpOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0KQoreworCS8qCisJICogV2UgdGFrZSB0aGUgbWF4IG9mIHRoZSBi
dXJzdCBsaW1pdCB0aW1lcyBhIE1UVSBvciB0aGUKKwkgKiBJTklUSUFMX0NXTkQuIFdlIHRoZW4g
bGltaXQgdGhpcyB0byA0IE1UVSdzIG9mIHNlbmRpbmcuCisJICovCisJbmV0LT5jd25kID0gbWlu
KChuZXQtPm10dSAqIDQpLCBtYXgoKDIgKiBuZXQtPm10dSksIFNDVFBfSU5JVElBTF9DV05EKSk7
CisJbmV0LT5zc3RocmVzaCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKKwlzY3RwX2VuZm9yY2Vf
Y3duZF9saW1pdCgmc3RjYi0+YXNvYywgbmV0KTsKKwlodGNwX2luaXQobmV0KTsKKworCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiAoU0NUUF9DV05EX01PTklUT1Jf
RU5BQkxFfFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkpIHsKKwkJc2N0cF9sb2dfY3duZChzdGNi
LCBuZXQsIDAsIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTik7CisJfQorfQorCitzdGF0aWMgdm9p
ZAorc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2soc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorCQkgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSBpbnQgYWNjdW1fbW92ZWQs
IGludCByZW5lZ2VkX2FsbCBTQ1RQX1VOVVNFRCwgaW50IHdpbGxfZXhpdCkKK3sKKwlzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQ7CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8q
IHVwZGF0ZSBjd25kIGFuZCBFYXJseSBGUiAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgewor
CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQorCQkvKgorCQkgKiBDTVQgZmFzdCByZWNv
dmVyeSBjb2RlLiBOZWVkIHRvIGRlYnVnLgorCQkgKi8KKwkJaWYgKG5ldC0+ZmFzdF9yZXRyYW5f
bG9zc19yZWNvdmVyeSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSB7CisJCQlpZiAoU0NUUF9U
U05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIG5ldC0+ZmFzdF9yZWNvdmVyeV90c24pIHx8CisJ
CQkgICAgU0NUUF9UU05fR0UobmV0LT5wc2V1ZG9fY3VtYWNrLG5ldC0+ZmFzdF9yZWNvdmVyeV90
c24pKSB7CisJCQkJbmV0LT53aWxsX2V4aXRfZmFzdF9yZWNvdmVyeSA9IDE7CisJCQl9CisJCX0K
KyNlbmRpZgorCQkvKiBpZiBub3RoaW5nIHdhcyBhY2tlZCBvbiB0aGlzIGRlc3RpbmF0aW9uIHNr
aXAgaXQgKi8KKwkJaWYgKG5ldC0+bmV0X2FjayA9PSAwKSB7CisJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJ
CQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIDAsIFNDVFBfQ1dORF9MT0dfRlJPTV9TQUNLKTsK
KwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisjaWZkZWYgSkFOQV9DTVRfRkFTVF9SRUNPVkVSWQor
ICAgICAgICAgICAgICAgIC8qIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUKKwkJICovCisJCS8qCisJ
CWlmIChzY3RwX2NtdF9vbl9vZmYgPiAwICYmIG5ldC0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVy
eSAmJiBuZXQtPndpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID09IDApIHsKKwkJICAgIEBAQCBEbyBz
b21ldGhpbmcKKwkJIH0KKwkJIGVsc2UgaWYgKHNjdHBfY210X29uX29mZiA9PSAwICYmIGFzb2Mt
PmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgd2lsbF9leGl0ID09IDApIHsKKwkJKi8KKyNl
bmRpZgorCisJCWlmIChhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ICYmCisJCSAgICB3
aWxsX2V4aXQgPT0gMCAmJgorCQkgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkgewor
CQkJLyoKKwkJCSAqIElmIHdlIGFyZSBpbiBsb3NzIHJlY292ZXJ5IHdlIHNraXAgYW55IGN3bmQK
KwkJCSAqIHVwZGF0ZQorCQkJICovCisJCQlyZXR1cm47CisJCX0KKwkJLyoKKwkJICogQ01UOiBD
VUMgYWxnb3JpdGhtLiBVcGRhdGUgY3duZCBpZiBwc2V1ZG8tY3VtYWNrIGhhcworCQkgKiBtb3Zl
ZC4KKwkJICovCisJCWlmIChhY2N1bV9tb3ZlZCB8fAorCQkgICAgKChhc29jLT5zY3RwX2NtdF9v
bl9vZmYgPiAwKSAmJiBuZXQtPm5ld19wc2V1ZG9fY3VtYWNrKSkgeworCQkJaHRjcF9jb25nX2F2
b2lkKHN0Y2IsIG5ldCk7CisJCQltZWFzdXJlX2FjaGlldmVkX3Rocm91Z2hwdXQobmV0KTsKKwkJ
fSBlbHNlIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwg
bmV0LT5tdHUsCisJCQkJCVNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLKTsKKwkJCX0KKwkJfQorCX0K
K30KKworc3RhdGljIHZvaWQKK3NjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9mcihzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkvKgorCSAqIENNVCBmYXN0IHJlY292ZXJ5IGNvZGUuIE5l
ZWQgdG8gZGVidWcuICgoc2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKKwkgKiAobmV0LT5mYXN0X3Jl
dHJhbl9sb3NzX3JlY292ZXJ5ID09IDApKSkKKwkgKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVj
b3ZlcnkgPT0gMCkgfHwKKwkJICAgIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSkgeworCQkJ
Lyogb3V0IG9mIGEgUkZDMjU4MiBGYXN0IHJlY292ZXJ5IHdpbmRvdz8gKi8KKwkJCWlmIChuZXQt
Pm5ldF9hY2sgPiAwKSB7CisJCQkJLyoKKwkJCQkgKiBwZXIgc2VjdGlvbiA3LjIuMywgYXJlIHRo
ZXJlIGFueQorCQkJCSAqIGRlc3RpbmF0aW9ucyB0aGF0IGhhZCBhIGZhc3QgcmV0cmFuc21pdAor
CQkJCSAqIHRvIHRoZW0uIElmIHNvIHdoYXQgd2UgbmVlZCB0byBkbyBpcworCQkJCSAqIGFkanVz
dCBzc3RocmVzaCBhbmQgY3duZC4KKwkJCQkgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpsY2hrOworCQkJCWludCBvbGRfY3duZCA9IG5ldC0+Y3duZDsKKworCQkJCS8qIEpSUyAtIHJl
c2V0IGFzIGlmIHN0YXRlIHdlcmUgY2hhbmdlZCAqLworCQkJCWh0Y3BfcmVzZXQoJm5ldC0+Y2Nf
bW9kLmh0Y3BfY2EpOworCQkJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChu
ZXQpOworCQkJCW5ldC0+Y3duZCA9IG5ldC0+c3N0aHJlc2g7CisJCQkJc2N0cF9lbmZvcmNlX2N3
bmRfbGltaXQoYXNvYywgbmV0KTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9DV05EX01PTklUT1JfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2N3
bmQoc3RjYiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLAorCQkJCQkJU0NUUF9DV05EX0xP
R19GUk9NX0ZSKTsKKwkJCQl9CisJCQkJbGNoayA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW5kX3F1
ZXVlKTsKKworCQkJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJCQkJLyogVHVybiBv
biBmYXN0IHJlY292ZXJ5IHdpbmRvdyAqLworCQkJCWFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVj
b3ZlcnkgPSAxOworCQkJCWlmIChsY2hrID09IE5VTEwpIHsKKwkJCQkJLyogTWFyayBlbmQgb2Yg
dGhlIHdpbmRvdyAqLworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9IGFzb2MtPnNlbmRp
bmdfc2VxIC0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5mYXN0X3JlY292ZXJ5X3RzbiA9
IGxjaGstPnJlYy5kYXRhLnRzbiAtIDE7CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBDTVQgZmFz
dCByZWNvdmVyeSAtLSBwZXIgZGVzdGluYXRpb24KKwkJCQkgKiByZWNvdmVyeSB2YXJpYWJsZS4K
KwkJCQkgKi8KKwkJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAxOworCisJCQkJ
aWYgKGxjaGsgPT0gTlVMTCkgeworCQkJCQkvKiBNYXJrIGVuZCBvZiB0aGUgd2luZG93ICovCisJ
CQkJCW5ldC0+ZmFzdF9yZWNvdmVyeV90c24gPSBhc29jLT5zZW5kaW5nX3NlcSAtIDE7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJbmV0LT5mYXN0X3JlY292ZXJ5X3RzbiA9IGxjaGstPnJlYy5kYXRhLnRz
biAtIDE7CisJCQkJfQorCisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5E
LAorCQkJCQkJc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9DQ19GVU5DVElPTlMgKyBTQ1RQX0xPQ18zKTsKKwkJCQlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG5ldCk7CisJCQl9CisJCX0gZWxzZSBpZiAobmV0LT5uZXRfYWNrID4gMCkgeworCQkJLyoKKwkJ
CSAqIE1hcmsgYSBwZWcgdGhhdCB3ZSBXT1VMRCBoYXZlIGRvbmUgYSBjd25kCisJCQkgKiByZWR1
Y3Rpb24gYnV0IFJGQzI1ODIgcHJldmVudGVkIHRoaXMgYWN0aW9uLgorCQkJICovCisJCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19mYXN0cmV0cmFuc2lucnR0KTsKKwkJfQorCX0KK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0KHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJCWludCBvbGRfY3duZCA9IG5l
dC0+Y3duZDsKKworCQkvKiBKUlMgLSByZXNldCBhcyBpZiB0aGUgc3RhdGUgd2VyZSBiZWluZyBj
aGFuZ2VkIHRvIHRpbWVvdXQgKi8KKwkJaHRjcF9yZXNldCgmbmV0LT5jY19tb2QuaHRjcF9jYSk7
CisJCW5ldC0+c3N0aHJlc2ggPSBodGNwX3JlY2FsY19zc3RocmVzaChuZXQpOworCQluZXQtPmN3
bmQgPSBuZXQtPm10dTsKKwkJbmV0LT5wYXJ0aWFsX2J5dGVzX2Fja2VkID0gMDsKKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9NT05JVE9SX0VO
QUJMRSkgeworCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIG5ldC0+Y3duZCAtIG9sZF9jd25k
LCBTQ1RQX0NXTkRfTE9HX0ZST01fUlRYKTsKKwkJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9o
dGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJ
c3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQgbnVtX3BrdF9sb3N0IFND
VFBfVU5VU0VEKQoreworCWludCBvbGRfY3duZDsKKwlvbGRfY3duZCA9IG5ldC0+Y3duZDsKKwor
CS8qIEpSUyAtIHJlc2V0IGhjdHAgYXMgaWYgc3RhdGUgY2hhbmdlZCAqLworCWlmIChpbl93aW5k
b3cgPT0gMCkgeworCQlodGNwX3Jlc2V0KCZuZXQtPmNjX21vZC5odGNwX2NhKTsKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfZWNuZXJlZHVjZWRjd25kKTsKKwkJbmV0LT5zc3RocmVzaCA9IGh0Y3Bf
cmVjYWxjX3NzdGhyZXNoKG5ldCk7CisJCWlmIChuZXQtPnNzdGhyZXNoIDwgbmV0LT5tdHUpIHsK
KwkJCW5ldC0+c3N0aHJlc2ggPSBuZXQtPm10dTsKKwkJCS8qIGhlcmUgYmFjayBvZmYgdGhlIHRp
bWVyIGFzIHdlbGwsIHRvIHNsb3cgdXMgZG93biAqLworCQkJbmV0LT5SVE8gPDw9IDE7CisJCX0K
KwkJbmV0LT5jd25kID0gbmV0LT5zc3RocmVzaDsKKwkJc2N0cF9lbmZvcmNlX2N3bmRfbGltaXQo
JnN0Y2ItPmFzb2MsIG5ldCk7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX2N3bmQoc3Rj
YiwgbmV0LCAobmV0LT5jd25kIC0gb2xkX2N3bmQpLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FUKTsK
KwkJfQorCX0KK30KKworY29uc3Qgc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIHNjdHBfY2NfZnVu
Y3Rpb25zW10gPSB7Cit7CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQorCXNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0sCisJc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9zYWNrLAorCXNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24s
CisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3Rp
bWVvdXQsCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobywKKwlzY3RwX2N3bmRfdXBk
YXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0
LAorI2Vsc2UKKwkuc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSA9IHNjdHBfc2V0X2luaXRpYWxf
Y2NfcGFyYW0sCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayA9IHNjdHBfY3duZF91cGRh
dGVfYWZ0ZXJfc2FjaywKKwkuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmID0gc2N0cF9jd25kX3Vw
ZGF0ZV9leGl0X3BmX2NvbW1vbiwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciA9IHNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfZnIsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9
IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRl
cl9lY25fZWNobyA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8sCisJLnNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3Bh
Y2tldF9kcm9wcGVkLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3du
ZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAorI2VuZGlmCit9LAoreworI2lmIGRlZmluZWQoX19XaW5k
b3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlzY3RwX3NldF9pbml0
aWFsX2NjX3BhcmFtLAorCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfc2FjaywKKwlzY3RwX2N3
bmRfdXBkYXRlX2V4aXRfcGZfY29tbW9uLAorCXNjdHBfaHNfY3duZF91cGRhdGVfYWZ0ZXJfZnIs
CisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAorCXNjdHBfY3duZF91cGRhdGVfYWZ0
ZXJfZWNuX2VjaG8sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwlz
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwKKyNlbHNlCisJLnNjdHBfc2V0X2luaXRpYWxf
Y2NfcGFyYW0gPSBzY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtLAorCS5zY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX3NhY2sgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCisJLnNjdHBfY3du
ZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJLnNj
dHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2hzX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAor
CS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVy
X3RpbWVvdXQsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3bmRf
dXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9k
cm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJvcHBlZCwKKwkuc2N0cF9j
d25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCwK
KyNlbmRpZgorfSwKK3sKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisJc2N0cF9odGNwX3NldF9pbml0aWFsX2NjX3BhcmFtLAorCXNj
dHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrLAorCXNjdHBfY3duZF91cGRhdGVfZXhpdF9w
Zl9jb21tb24sCisJc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2ZyLAorCXNjdHBfaHRjcF9j
d25kX3VwZGF0ZV9hZnRlcl90aW1lb3V0LAorCXNjdHBfaHRjcF9jd25kX3VwZGF0ZV9hZnRlcl9l
Y25fZWNobywKKwlzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAorCXNjdHBf
Y3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0LAorI2Vsc2UKKwkuc2N0cF9zZXRfaW5pdGlhbF9jY19w
YXJhbSA9IHNjdHBfaHRjcF9zZXRfaW5pdGlhbF9jY19wYXJhbSwKKwkuc2N0cF9jd25kX3VwZGF0
ZV9hZnRlcl9zYWNrID0gc2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX3NhY2ssCisJLnNjdHBf
Y3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJ
LnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2h0Y3BfY3duZF91cGRhdGVfYWZ0ZXJf
ZnIsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfdGltZW91dCA9IHNjdHBfaHRjcF9jd25kX3Vw
ZGF0ZV9hZnRlcl90aW1lb3V0LAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvID0g
c2N0cF9odGNwX2N3bmRfdXBkYXRlX2FmdGVyX2Vjbl9lY2hvLAorCS5zY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX3BhY2tldF9kcm9wcGVkID0gc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJv
cHBlZCwKKwkuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQgPSBzY3RwX2N3bmRfdXBkYXRl
X2FmdGVyX291dHB1dCwKKyNlbmRpZgorfSwKK3sKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJc2N0cF9zZXRfcnRjY19pbml0aWFs
X2NjX3BhcmFtLAorCXNjdHBfY3duZF91cGRhdGVfcnRjY19hZnRlcl9zYWNrLAorCXNjdHBfY3du
ZF91cGRhdGVfZXhpdF9wZl9jb21tb24sCisJc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9mciwKKwlz
Y3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQsCisJc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2Fm
dGVyX2Vjbl9lY2hvLAorCXNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfcGFja2V0X2Ryb3BwZWQsCisJ
c2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQsCisJc2N0cF9jd25kX3VwZGF0ZV9ydGNjX3Bh
Y2tldF90cmFuc21pdHRlZCwKKwlzY3RwX2N3bmRfdXBkYXRlX3J0Y2NfdHNuX2Fja25vd2xlZGdl
ZCwKKwlzY3RwX2N3bmRfbmV3X3J0Y2NfdHJhbnNtaXNzaW9uX2JlZ2lucywKKwlzY3RwX2N3bmRf
cHJlcGFyZV9ydGNjX25ldF9mb3Jfc2FjaywKKwlzY3RwX2N3bmRfcnRjY19zb2NrZXRfb3B0aW9u
LAorCXNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAorI2Vsc2UKKwkuc2N0cF9zZXRfaW5pdGlhbF9j
Y19wYXJhbSA9IHNjdHBfc2V0X3J0Y2NfaW5pdGlhbF9jY19wYXJhbSwKKwkuc2N0cF9jd25kX3Vw
ZGF0ZV9hZnRlcl9zYWNrID0gc2N0cF9jd25kX3VwZGF0ZV9ydGNjX2FmdGVyX3NhY2ssCisJLnNj
dHBfY3duZF91cGRhdGVfZXhpdF9wZiA9IHNjdHBfY3duZF91cGRhdGVfZXhpdF9wZl9jb21tb24s
CisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX2Zy
LAorCS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQgPSBzY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX3RpbWVvdXQsCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZWNuX2VjaG8gPSBzY3RwX2N3
bmRfdXBkYXRlX3J0Y2NfYWZ0ZXJfZWNuX2VjaG8sCisJLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
cGFja2V0X2Ryb3BwZWQgPSBzY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkLAor
CS5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX291dHB1dCA9IHNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
b3V0cHV0LAorCS5zY3RwX2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCA9IHNjdHBfY3du
ZF91cGRhdGVfcnRjY19wYWNrZXRfdHJhbnNtaXR0ZWQsCisJLnNjdHBfY3duZF91cGRhdGVfdHNu
X2Fja25vd2xlZGdlZCA9IHNjdHBfY3duZF91cGRhdGVfcnRjY190c25fYWNrbm93bGVkZ2VkLAor
CS5zY3RwX2N3bmRfbmV3X3RyYW5zbWlzc2lvbl9iZWdpbnMgPSBzY3RwX2N3bmRfbmV3X3J0Y2Nf
dHJhbnNtaXNzaW9uX2JlZ2lucywKKwkuc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrID0g
c2N0cF9jd25kX3ByZXBhcmVfcnRjY19uZXRfZm9yX3NhY2ssCisJLnNjdHBfY3duZF9zb2NrZXRf
b3B0aW9uID0gc2N0cF9jd25kX3J0Y2Nfc29ja2V0X29wdGlvbiwKKwkuc2N0cF9ydHRfY2FsY3Vs
YXRlZCA9IHNjdHBfcnR0X3J0Y2NfY2FsY3VsYXRlZAorI2VuZGlmCit9Cit9OwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY29uc3RhbnRzLmggYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25zdGFudHMuaAppbmRleCBlNjlkZTI5YmIyZDFk
NjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5mOWE4N2E0N2IyYTE4YzFhOGIwNzI1ZDVjZmFh
MDMzNzU3OWZjNzhkIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jb25zdGFudHMuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jb25z
dGFudHMuaApAQCAtMCwwICsxLDEwODcgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNj
byBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAg
ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5
c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jb25zdGFudHMuaCAz
Mjg0NzggMjAxOC0wMS0yNyAxMzo0Njo1NVogdHVleGVuICQiKTsKKyNlbmRpZgorCisjaWZuZGVm
IF9ORVRJTkVUX1NDVFBfQ09OU1RBTlRTX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfQ09OU1RB
TlRTX0hfCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCitleHRlcm4gdm9p
ZCBnZXR3aW50aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KTsKKyNlbmRpZgorCisvKiBJQU5B
IGFzc2lnbmVkIHBvcnQgbnVtYmVyIGZvciBTQ1RQIG92ZXIgVURQIGVuY2Fwc3VsYXRpb24gKi8K
KyNkZWZpbmUgU0NUUF9PVkVSX1VEUF9UVU5ORUxJTkdfUE9SVCA5ODk5CisKKy8qIE51bWJlciBv
ZiBwYWNrZXRzIHRvIGdldCBiZWZvcmUgc2FjayBzZW50IGJ5IGRlZmF1bHQgKi8KKyNkZWZpbmUg
U0NUUF9ERUZBVUxUX1NBQ0tfRlJFUSAyCisKKy8qIEFkZHJlc3MgbGltaXQgLSBUaGlzIHZhcmlh
YmxlIGlzIGNhbGN1bGF0ZWQKKyAqIGJhc2VkIG9uIGFuIDY1NTM1IGJ5dGUgbWF4IGlwIHBhY2tl
dC4gV2UgdGFrZSBvdXQgMTAwIGJ5dGVzCisgKiBmb3IgdGhlIGNvb2tpZSwgNDAgYnl0ZXMgZm9y
IGEgdjYgaGVhZGVyIGFuZCAzMgorICogYnl0ZXMgZm9yIHRoZSBpbml0IHN0cnVjdHVyZS4gQSBz
ZWNvbmQgaW5pdCBzdHJ1Y3R1cmUKKyAqIGZvciB0aGUgaW5pdC1hY2sgYW5kIHRoZW4gZmluYWxs
eSBhIHRoaXJkIG9uZSBmb3IgdGhlCisgKiBpbWJlZGRlZCBpbml0LiBUaGlzIHllaWxkcyAxMDAr
NDArKDMgKiAzMikgPSAyMzYgYnl0ZXMuCisgKiBUaGlzIGxlYXZlcyA2NTI5OSBieXRlcyBmb3Ig
YWRkcmVzc2VzLiBXZSB0aHJvdyBvdXQgdGhlIDI5OSBieXRlcy4KKyAqIE5vdyB3aGF0ZXZlciB3
ZSBzZW5kIGluIHRoZSBJTklUKCkgd2UgbmVlZCB0byBhbGxvdyB0byBnZXQgYmFjayBpbiB0aGUK
KyAqIElOSVQtQUNLIHBsdXMgYWxsIHRoZSB2YWx1ZXMgZnJvbSBJTklUIGFuZCBJTklULUFDSwor
ICogbGlzdGVkIGluIHRoZSBjb29raWUuIFBsdXMgd2UgbmVlZCBzb21lIG92ZXJoZWFkIGZvcgor
ICogbWF5YmUgY29waWVkIHBhcmFtZXRlcnMgaW4gdGhlIENPT0tJRS4gSWYgd2UKKyAqIGFsbG93
IDEwODAgYWRkcmVzc2VzLCBhbmQgZWFjaCBzaWRlIGhhcyAxMDgwIFY2IGFkZHJlc3NlcworICog
dGhhdCB3aWxsIGJlIDIxNjAwIGJ5dGVzLiBJbiB0aGUgSU5JVC1BQ0sgd2Ugd2lsbAorICogc2Vl
IHRoZSBJTklULUFDSyAyMTYwMCArIDQzMjAwIGluIHRoZSBjb29raWUuIFRoaXMgbGVhdmVzCisg
KiBhYm91dCA1MDAgYnl0ZXMgc2xhY2sgZm9yIG1pc2MgdGhpbmdzIGluIHRoZSBjb29raWUuCisg
Ki8KKyNkZWZpbmUgU0NUUF9BRERSRVNTX0xJTUlUIDEwODAKKworLyogV2UgbmVlZCBhdCBsZWFz
dCAyayBvZiBzcGFjZSBmb3IgdXMsIGluaXRzCisgKiBsYXJnZXIgdGhhbiB0aGF0IGxldHMgYWJv
cnQuCisgKi8KKyNkZWZpbmUgU0NUUF9MQVJHRVNUX0lOSVRfQUNDRVBURUQgKDY1NTM1IC0gMjA0
OCkKKworLyogTGFyZ2VzdCBsZW5ndGggb2YgYSBjaHVuayAqLworI2RlZmluZSBTQ1RQX01BWF9D
SFVOS19MRU5HVEggMHhmZmZmCisvKiBMYXJnZXN0IGxlbmd0aCBvZiBhbiBlcnJvciBjYXVzZSAq
LworI2RlZmluZSBTQ1RQX01BWF9DQVVTRV9MRU5HVEggMHhmZmZmCisvKiBOdW1iZXIgb2YgYWRk
cmVzc2VzIHdoZXJlIHdlIGp1c3Qgc2tpcCB0aGUgY291bnRpbmcgKi8KKyNkZWZpbmUgU0NUUF9D
T1VOVF9MSU1JVCA0MAorCisjZGVmaW5lIFNDVFBfWkVST19DT1BZX1RJQ0tfREVMQVkgKCgoMTAw
ICogaHopICsgOTk5KSAvIDEwMDApCisjZGVmaW5lIFNDVFBfWkVST19DT1BZX1NFTkRRX1RJQ0tf
REVMQVkgKCgoMTAwICogaHopICsgOTk5KSAvIDEwMDApCisKKy8qIE51bWJlciBvZiB0aWNrcyB0
byBkZWxheSBiZWZvcmUgcnVubmluZworICogaXRlcmF0b3Igb24gYW4gYWRkcmVzcyBjaGFuZ2Uu
CisgKi8KKyNkZWZpbmUgU0NUUF9BRERSRVNTX1RJQ0tfREVMQVkgMgorCisjZGVmaW5lIFNDVFBf
VkVSU0lPTl9TVFJJTkcgIktBTUUtQlNEIDEuMSIKKy8qICNkZWZpbmUgU0NUUF9BVURJVElOR19F
TkFCTEVEIDEgdXNlZCBmb3IgZGVidWcvYXVkaXRpbmcgKi8KKyNkZWZpbmUgU0NUUF9BVURJVF9T
SVpFIDI1NgorCisKKyNkZWZpbmUgU0NUUF9LVFJIRUFEX05BTUUgInNjdHBfaXRlcmF0b3IiCisj
ZGVmaW5lIFNDVFBfS1RIUkVBRF9QQUdFUyAwCisKKyNkZWZpbmUgU0NUUF9NQ09SRV9OQU1FICJz
Y3RwX2NvcmVfd29ya2VyIgorCisKKy8qIElmIHlvdSBzdXBwb3J0IE11bHRpLVZSRiBob3cgYmln
IHRvCisgKiBtYWtlIHRoZSBpbml0aWFsIGFycmF5IG9mIFZSRidzIHRvLgorICovCisjZGVmaW5l
IFNDVFBfREVGQVVMVF9WUkZfU0laRSA0CisKKy8qIEpSUyAtIFZhbHVlcyBkZWZpbmVkIGZvciB0
aGUgSFRDUCBhbGdvcml0aG0gKi8KKyNkZWZpbmUgQUxQSEFfQkFTRQkoMTw8NykgIC8qIDEuMCB3
aXRoIHNoaWZ0IDw8IDcgKi8KKyNkZWZpbmUgQkVUQV9NSU4JKDE8PDYpICAvKiAwLjUgd2l0aCBz
aGlmdCA8PCA3ICovCisjZGVmaW5lIEJFVEFfTUFYCTEwMgkvKiAwLjggd2l0aCBzaGlmdCA8PCA3
ICovCisKKy8qIFBsYWNlcyB0aGF0IENXTkQgbG9nIGNhbiBoYXBwZW4gZnJvbSAqLworI2RlZmlu
ZSBTQ1RQX0NXTkRfTE9HX0ZST01fRlIJMQorI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fUlRY
CTIKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX0JSU1QJMworI2RlZmluZSBTQ1RQX0NXTkRf
TE9HX0ZST01fU1MJNAorI2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZST01fQ0EJNQorI2RlZmluZSBT
Q1RQX0NXTkRfTE9HX0ZST01fU0FUCTYKKyNkZWZpbmUgU0NUUF9CTE9DS19MT0dfSU5UT19CTEsg
NworI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19PVVRPRl9CTEsgOAorI2RlZmluZSBTQ1RQX0JMT0NL
X0xPR19DSEVDSyAgICAgOQorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlRPX1NUUkQgMTAK
KyNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU1NRURfREVMIDExCisjZGVmaW5lIFNDVFBfU1RS
X0xPR19GUk9NX0lOU0VSVF9IRCAxMgorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNFUlRf
TUQgMTMKKyNkZWZpbmUgU0NUUF9TVFJfTE9HX0ZST01fSU5TRVJUX1RMIDE0CisjZGVmaW5lIFND
VFBfU1RSX0xPR19GUk9NX01BUktfVFNOICAxNQorI2RlZmluZSBTQ1RQX1NUUl9MT0dfRlJPTV9F
WFBSU19ERUwgMTYKKyNkZWZpbmUgU0NUUF9GUl9MT0dfQklHR0VTVF9UU05TICAgIDE3CisjZGVm
aW5lIFNDVFBfRlJfTE9HX1NUUklLRV9URVNUICAgICAxOAorI2RlZmluZSBTQ1RQX0ZSX0xPR19T
VFJJS0VfQ0hVTksgICAgMTkKKyNkZWZpbmUgU0NUUF9GUl9UM19USU1FT1VUICAgICAgICAgIDIw
CisjZGVmaW5lIFNDVFBfTUFQX1BSRVBBUkVfU0xJREUgICAgICAyMQorI2RlZmluZSBTQ1RQX01B
UF9TTElERV9GUk9NICAgICAgICAgMjIKKyNkZWZpbmUgU0NUUF9NQVBfU0xJREVfUkVTVUxUICAg
ICAgIDIzCisjZGVmaW5lIFNDVFBfTUFQX1NMSURFX0NMRUFSRUQJICAgIDI0CisjZGVmaW5lIFND
VFBfTUFQX1NMSURFX05PTkUgICAgICAgICAyNQorI2RlZmluZSBTQ1RQX0ZSX1QzX01BUktfVElN
RSAgICAgICAgMjYKKyNkZWZpbmUgU0NUUF9GUl9UM19NQVJLRUQgICAgICAgICAgIDI3CisjZGVm
aW5lIFNDVFBfRlJfVDNfU1RPUFBFRCAgICAgICAgICAyOAorI2RlZmluZSBTQ1RQX0ZSX01BUktF
RCAgICAgICAgICAgICAgMzAKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19OT0FEVl9TUyAgICAgIDMx
CisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9BRFZfQ0EgICAgICAzMgorI2RlZmluZSBTQ1RQX01B
WF9CVVJTVF9BUFBMSUVEICAgICAgMzMKKyNkZWZpbmUgU0NUUF9NQVhfSUZQX0FQUExJRUQgICAg
ICAgIDM0CisjZGVmaW5lIFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NUT1AgICAzNQorI2RlZmluZSBT
Q1RQX0lOQ1JFQVNFX1BFRVJfUldORCAgICAgMzYKKyNkZWZpbmUgU0NUUF9ERUNSRUFTRV9QRUVS
X1JXTkQgICAgIDM3CisjZGVmaW5lIFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSyAzOAorI2Rl
ZmluZSBTQ1RQX0xPR19NQkNOVF9JTkNSRUFTRSAgICAgMzkKKyNkZWZpbmUgU0NUUF9MT0dfTUJD
TlRfREVDUkVBU0UgICAgIDQwCisjZGVmaW5lIFNDVFBfTE9HX01CQ05UX0NIS1NFVCAgICAgICA0
MQorI2RlZmluZSBTQ1RQX0xPR19ORVdfU0FDSyAgICAgICAgICAgNDIKKyNkZWZpbmUgU0NUUF9M
T0dfVFNOX0FDS0VEICAgICAgICAgIDQzCisjZGVmaW5lIFNDVFBfTE9HX1RTTl9SRVZPS0VEICAg
ICAgICA0NAorI2RlZmluZSBTQ1RQX0xPR19MT0NLX1RDQiAgICAgICAgICAgNDUKKyNkZWZpbmUg
U0NUUF9MT0dfTE9DS19JTlAgICAgICAgICAgIDQ2CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tfU09D
SyAgICAgICAgICA0NworI2RlZmluZSBTQ1RQX0xPR19MT0NLX1NPQ0tCVUZfUiAgICAgNDgKKyNk
ZWZpbmUgU0NUUF9MT0dfTE9DS19TT0NLQlVGX1MgICAgIDQ5CisjZGVmaW5lIFNDVFBfTE9HX0xP
Q0tfQ1JFQVRFICAgICAgICA1MAorI2RlZmluZSBTQ1RQX0xPR19JTklUSUFMX1JUVCAgICAgICAg
NTEKKyNkZWZpbmUgU0NUUF9MT0dfUlRUVkFSICAgICAgICAgICAgIDUyCisjZGVmaW5lIFNDVFBf
TE9HX1NCQUxMT0MgICAgICAgICAgICA1MworI2RlZmluZSBTQ1RQX0xPR19TQkZSRUUgICAgICAg
ICAgICAgNTQKKyNkZWZpbmUgU0NUUF9MT0dfU0JSRVNVTFQgICAgICAgICAgIDU1CisjZGVmaW5l
IFNDVFBfRlJfRFVQRUQgICAgICAgICAgICAgICA1NgorI2RlZmluZSBTQ1RQX0ZSX01BUktFRF9F
QVJMWSAgICAgICAgNTcKKyNkZWZpbmUgU0NUUF9GUl9DV05EX1JFUE9SVCAgICAgICAgIDU4Cisj
ZGVmaW5lIFNDVFBfRlJfQ1dORF9SRVBPUlRfU1RBUlQgICA1OQorI2RlZmluZSBTQ1RQX0ZSX0NX
TkRfUkVQT1JUX1NUT1AgICAgNjAKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NFTkQgICAg
IDYxCisjZGVmaW5lIFNDVFBfQ1dORF9JTklUSUFMSVpBVElPTiAgICA2MgorI2RlZmluZSBTQ1RQ
X0NXTkRfTE9HX0ZST01fVDMgICAgICAgNjMKKyNkZWZpbmUgU0NUUF9DV05EX0xPR19GUk9NX1NB
Q0sgICAgIDY0CisjZGVmaW5lIFNDVFBfQ1dORF9MT0dfTk9fQ1VNQUNLICAgICA2NQorI2RlZmlu
ZSBTQ1RQX0NXTkRfTE9HX0ZST01fUkVTRU5EICAgNjYKKyNkZWZpbmUgU0NUUF9GUl9MT0dfQ0hF
Q0tfU1RSSUtFICAgIDY3CisjZGVmaW5lIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTICAgICA2OAor
I2RlZmluZSBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQgNjkKKyNkZWZpbmUgU0NUUF9D
V05EX0xPR19GSUxMX09VVFFfRklMTFMgIDcwCisjZGVmaW5lIFNDVFBfTE9HX0ZSRUVfU0VOVCAg
ICAgICAgICAgICA3MQorI2RlZmluZSBTQ1RQX05BR0xFX0FQUExJRUQgICAgICAgICAgNzIKKyNk
ZWZpbmUgU0NUUF9OQUdMRV9TS0lQUEVEICAgICAgICAgIDczCisjZGVmaW5lIFNDVFBfV0FLRVNO
RF9GUk9NX1NBQ0sgICAgICA3NAorI2RlZmluZSBTQ1RQX1dBS0VTTkRfRlJPTV9GV0RUU04gICAg
NzUKKyNkZWZpbmUgU0NUUF9OT1dBS0VfRlJPTV9TQUNLICAgICAgIDc2CisjZGVmaW5lIFNDVFBf
Q1dORExPR19QUkVTRU5EICAgICAgICA3NworI2RlZmluZSBTQ1RQX0NXTkRMT0dfRU5EU0VORCAg
ICAgICAgNzgKKyNkZWZpbmUgU0NUUF9BVF9FTkRfT0ZfU0FDSyAgICAgICAgIDc5CisjZGVmaW5l
IFNDVFBfUkVBU09OX0ZPUl9TQyAgICAgICAgICA4MAorI2RlZmluZSBTQ1RQX0JMT0NLX0xPR19J
TlRPX0JMS0EgICAgODEKKyNkZWZpbmUgU0NUUF9FTlRFUl9VU0VSX1JFQ1YgICAgICAgIDgyCisj
ZGVmaW5lIFNDVFBfVVNFUl9SRUNWX1NBQ0tTICAgICAgICA4MworI2RlZmluZSBTQ1RQX1NPUkVD
Vl9CTE9DS1NBICAgICAgICAgODQKKyNkZWZpbmUgU0NUUF9TT1JFQ1ZfQkxPQ0tTQiAgICAgICAg
IDg1CisjZGVmaW5lIFNDVFBfU09SRUNWX0RPTkUgICAgICAgICAgICA4NgorI2RlZmluZSBTQ1RQ
X1NBQ0tfUldORF9VUERBVEUgICAgICAgODcKKyNkZWZpbmUgU0NUUF9TT1JFQ1ZfRU5URVIgICAg
ICAgICAgIDg4CisjZGVmaW5lIFNDVFBfU09SRUNWX0VOVEVSUEwgICAgICAgICA4OQorI2RlZmlu
ZSBTQ1RQX01CVUZfSU5QVVQgICAgICAgICAgICAgOTAKKyNkZWZpbmUgU0NUUF9NQlVGX0lBTExP
QyAgICAgICAgICAgIDkxCisjZGVmaW5lIFNDVFBfTUJVRl9JRlJFRSAgICAgICAgICAgICA5Mgor
I2RlZmluZSBTQ1RQX01CVUZfSUNPUFkgICAgICAgICAgICAgOTMKKyNkZWZpbmUgU0NUUF9NQlVG
X1NQTElUICAgICAgICAgICAgIDk0CisjZGVmaW5lIFNDVFBfU09SQ1ZfRlJFRUNUTCAgICAgICAg
ICA5NQorI2RlZmluZSBTQ1RQX1NPUkNWX0RPRVNDUFkgICAgICAgICAgOTYKKyNkZWZpbmUgU0NU
UF9TT1JDVl9ET0VTTENLICAgICAgICAgIDk3CisjZGVmaW5lIFNDVFBfU09SQ1ZfRE9FU0FESiAg
ICAgICAgICA5OAorI2RlZmluZSBTQ1RQX1NPUkNWX0JPVFdISUxFICAgICAgICAgOTkKKyNkZWZp
bmUgU0NUUF9TT1JDVl9QQVNTQkYgICAgICAgICAgMTAwCisjZGVmaW5lIFNDVFBfU09SQ1ZfQURK
RCAgICAgICAgICAgIDEwMQorI2RlZmluZSBTQ1RQX1VOS05PV05fTUFYICAgICAgICAgICAxMDIK
KyNkZWZpbmUgU0NUUF9SQU5EWV9TVFVGRiAgICAgICAgICAgMTAzCisjZGVmaW5lIFNDVFBfUkFO
RFlfU1RVRkYxICAgICAgICAgIDEwNAorI2RlZmluZSBTQ1RQX1NUUk1PVVRfTE9HX0FTU0lHTgkg
ICAxMDUKKyNkZWZpbmUgU0NUUF9TVFJNT1VUX0xPR19TRU5ECSAgIDEwNgorI2RlZmluZSBTQ1RQ
X0ZMSUdIVF9MT0dfRE9XTl9DQSAgICAxMDcKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX1VQICAg
ICAgICAgMTA4CisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX0dBUCAgIDEwOQorI2RlZmlu
ZSBTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9SU05EICAxMTAKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9H
X1VQX1JTTkQgICAgMTExCisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1JTTkRfVE8gICAg
MTEyCisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1dQICAgIDExMworI2RlZmluZSBTQ1RQ
X0ZMSUdIVF9MT0dfVVBfUkVWT0tFICAxMTQKKyNkZWZpbmUgU0NUUF9GTElHSFRfTE9HX0RPV05f
UERSUCAgMTE1CisjZGVmaW5lIFNDVFBfRkxJR0hUX0xPR19ET1dOX1BNVFUgIDExNgorI2RlZmlu
ZSBTQ1RQX1NBQ0tfTE9HX05PUk1BTAkgICAxMTcKKyNkZWZpbmUgU0NUUF9TQUNLX0xPR19FWFBS
RVNTCSAgIDExOAorI2RlZmluZSBTQ1RQX01BUF9UU05fRU5URVJTICAgICAgICAxMTkKKyNkZWZp
bmUgU0NUUF9USFJFU0hPTERfQ0xFQVIgICAgICAgMTIwCisjZGVmaW5lIFNDVFBfVEhSRVNIT0xE
X0lOQ1IgICAgICAgIDEyMQorI2RlZmluZSBTQ1RQX0ZMSUdIVF9MT0dfRFdOX1dQX0ZXRCAxMjIK
KyNkZWZpbmUgU0NUUF9GV0RfVFNOX0NIRUNLICAgICAgICAgMTIzCisjZGVmaW5lIFNDVFBfTE9H
X01BWF9UWVBFUyAxMjQKKy8qCisgKiBUbyB0dXJuIG9uIHZhcmlvdXMgbG9nZ2luZywgeW91IG11
c3QgZmlyc3QgZW5hYmxlICdvcHRpb25zIEtUUicgYW5kCisgKiB5b3UgbWlnaHQgd2FudCB0byBi
dW1wIHRoZSBlbnRpcmVzICdvcHRpb25zIEtUUl9FTlRSSUVTPTgwMDAwJy4KKyAqIFRvIGdldCBz
b21ldGhpbmcgdG8gbG9nIHlvdSBkZWZpbmUgb25lIG9mIHRoZSBsb2dnaW5nIGRlZmluZXMuCisg
KiAoc2VlIExJTlQpLgorICoKKyAqIFRoaXMgZ2V0cyB0aGUgY29tcGlsZSBpbiBwbGFjZSwgYnV0
IHlvdSBzdGlsbCBuZWVkIHRvIHR1cm4gdGhlCisgKiBsb2dnaW5nIGZsYWcgb24gdG9vIGluIHRo
ZSBzeXNjdGwgKHNlZSBpbiBzY3RwLmgpLgorICovCisKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRf
VU5LTk9XTiAwCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX0NXTkQgIDEKKyNkZWZpbmUgU0NUUF9M
T0dfRVZFTlRfQkxPQ0sgMgorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TVFJNICAzCisjZGVmaW5l
IFNDVFBfTE9HX0VWRU5UX0ZSICAgIDQKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUFQICAgNQor
I2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQVhCVVJTVCA2CisjZGVmaW5lIFNDVFBfTE9HX0VWRU5U
X1JXTkQgIDcKKyNkZWZpbmUgU0NUUF9MT0dfRVZFTlRfTUJDTlQgOAorI2RlZmluZSBTQ1RQX0xP
R19FVkVOVF9TQUNLICA5CisjZGVmaW5lIFNDVFBfTE9HX0xPQ0tfRVZFTlQgMTAKKyNkZWZpbmUg
U0NUUF9MT0dfRVZFTlRfUlRUICAxMQorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9TQiAgIDEyCisj
ZGVmaW5lIFNDVFBfTE9HX0VWRU5UX05BR0xFIDEzCisjZGVmaW5lIFNDVFBfTE9HX0VWRU5UX1dB
S0UgMTQKKyNkZWZpbmUgU0NUUF9MT0dfTUlTQ19FVkVOVCAxNQorI2RlZmluZSBTQ1RQX0xPR19F
VkVOVF9DTE9TRSAxNgorI2RlZmluZSBTQ1RQX0xPR19FVkVOVF9NQlVGIDE3CisjZGVmaW5lIFND
VFBfTE9HX0NIVU5LX1BST0MgMTgKKyNkZWZpbmUgU0NUUF9MT0dfRVJST1JfUkVUICAxOQorCisj
ZGVmaW5lIFNDVFBfTE9HX01BWF9FVkVOVCAyMAorCisjZGVmaW5lIFNDVFBfTE9DS19VTktOT1dO
IDIKKworCisvKiBudW1iZXIgb2YgYXNzb2NpYXRpb25zIGJ5IGRlZmF1bHQgZm9yIHpvbmUgYWxs
b2NhdGlvbiAqLworI2RlZmluZSBTQ1RQX01BWF9OVU1fT0ZfQVNPQwk0MDAwMAorLyogaG93IG1h
bnkgYWRkcmVzc2VzIHBlciBhc3NvYyByZW1vdGUgYW5kIGxvY2FsICovCisjZGVmaW5lIFNDVFBf
U0NBTEVfRk9SX0FERFIJMgorCisvKiBkZWZhdWx0IE1VTFRJUExFX0FTQ09ORiBtb2RlIGVuYWJs
ZSgxKS9kaXNhYmxlKDApIHZhbHVlIChzeXNjdGwpICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9N
VUxUSVBMRV9BU0NPTkZTCTAKKworLyoKKyAqIFRocmVzaG9sZCBmb3IgcnduZCB1cGRhdGVzLCB3
ZSBoYXZlIHRvIHJlYWQgKHNiX2hpd2F0ID4+CisgKiBTQ1RQX1JXTkRfSElXQVRfU0hJRlQpIGJl
Zm9yZSB3ZSB3aWxsIGxvb2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gc2VuZCBhCisgKiB3aW5kb3cg
dXBkYXRlIHNhY2suIFdoZW4gd2UgbG9vaywgd2UgY29tcGFyZSB0aGUgbGFzdCByd25kIHdlIHNl
bnQgdnMgdGhlCisgKiBjdXJyZW50IHJ3bmQuIEl0IHRvbyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiB0
aGlzIHZhbHVlLiBVc2luZyAzIGRpdmRlcyB0aGUKKyAqIGhpd2F0IGJ5IDgsIHNvIGZvciAyMDBr
IHJ3bmQgd2UgbmVlZCB0byByZWFkIDI0ay4gRm9yIGEgNjRrIHJ3bmQgd2UgbmVlZAorICogdG8g
cmVhZCA4ay4gVGhpcyBzZWVtcyBhYm91dCByaWdodC4uIEkgaG9wZSA6LUQuLiB3ZSBkbyBzZXQg
YQorICogbWluIG9mIGEgTVRVIG9uIGl0IHNvIGlmIHRoZSByd25kIGlzIHJlYWwgc21hbGwgd2Ug
d2lsbCBpbnNpc3QKKyAqIG9uIGEgZnVsbCBNVFUgb2YgMTUwMCBieXRlcy4KKyAqLworI2RlZmlu
ZSBTQ1RQX1JXTkRfSElXQVRfU0hJRlQgMworCisvKiBIb3cgbXVjaCBvZiB0aGUgcnduZCBtdXN0
IHRoZQorICogbWVzc2FnZSBiZSB0YWtpbmcgdXAgdG8gc3RhcnQgcGFydGlhbCBkZWxpdmVyeS4K
KyAqIFdlIGNhbGN1bGF0ZSB0aGlzIGJ5IHNoaWZpbmcgdGhlIGhpX3dhdGVyIChyZWN2X3dpbikK
KyAqIGxlZnQgdGhlIGZvbGxvd2luZyAuLiBzZXQgdG8gMSwgd2hlbiBhIG1lc3NhZ2UgaG9sZHMK
KyAqIDEvMiB0aGUgcnduZC4gSWYgd2Ugc2V0IGl0IHRvIDIgd2hlbiBhIG1lc3NhZ2UgaG9sZHMK
KyAqIDEvNCB0aGUgcnduZC4uLmV0Yy4uCisgKi8KKworI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVM
SVZFUllfU0hJRlQgMQorCisvKgorICogZGVmYXVsdCBITUFDIGZvciBjb29raWVzLCBldGMuLi4g
dXNlIG9uZSBvZiB0aGUgQVVUSCBITUFDIGlkJ3MKKyAqIFNDVFBfSE1BQyBpcyB0aGUgSE1BQ19J
RCB0byB1c2UKKyAqIFNDVFBfU0lHTkFUVVJFX1NJWkUgaXMgdGhlIGRpZ2VzdCBsZW5ndGgKKyAq
LworI2RlZmluZSBTQ1RQX0hNQUMJCVNDVFBfQVVUSF9ITUFDX0lEX1NIQTEKKyNkZWZpbmUgU0NU
UF9TSUdOQVRVUkVfU0laRQlTQ1RQX0FVVEhfRElHRVNUX0xFTl9TSEExCisjZGVmaW5lIFNDVFBf
U0lHTkFUVVJFX0FMT0NfU0laRSBTQ1RQX1NJR05BVFVSRV9TSVpFCisKKy8qCisgKiB0aGUgU0NU
UCBwcm90b2NvbCBzaWduYXR1cmUgdGhpcyBpbmNsdWRlcyB0aGUgdmVyc2lvbiBudW1iZXIgZW5j
b2RlZCBpbgorICogdGhlIGxhc3QgNCBiaXRzIG9mIHRoZSBzaWduYXR1cmUuCisgKi8KKyNkZWZp
bmUgUFJPVE9fU0lHTkFUVVJFX0EJMHgzMDAwMDAwMAorI2RlZmluZSBTQ1RQX1ZFUlNJT05fTlVN
QkVSCTB4MworCisjZGVmaW5lIE1BWF9UU04JMHhmZmZmZmZmZgorCisvKiBob3cgbWFueSBleGVj
dXRpb25zIGV2ZXJ5IE4gdGljaydzICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTUFYX0FUX09O
Q0UgMjAKKworLyogbnVtYmVyIG9mIGNsb2NrIHRpY2tzIGJldHdlZW4gaXRlcmF0b3IgZXhlY3V0
aW9ucyAqLworI2RlZmluZSBTQ1RQX0lURVJBVE9SX1RJQ0tTIDEKKworLyoKKyAqIG9wdGlvbjog
SWYgeW91IGNvbW1lbnQgb3V0IHRoZSBmb2xsb3dpbmcgeW91IHdpbGwgcmVjZWl2ZSB0aGUgb2xk
IGJlaGF2aW9yCisgKiBvZiBvYmV5aW5nIGN3bmQgZm9yIHRoZSBmYXN0IHJldHJhbnNtaXQgYWxn
b3JpdGhtLiBXaXRoIHRoaXMgZGVmaW5lZCBhIEZSCisgKiBoYXBwZW5zIHJpZ2h0IGF3YXkgd2l0
aC1vdXQgd2FpdGluZyBmb3IgdGhlIGZsaWdodHNpemUgdG8gZHJvcCBiZWxvdyB0aGUKKyAqIGN3
bmQgdmFsdWUgKHdoaWNoIGlzIHJlZHVjZWQgYnkgdGhlIEZSIHRvIDEvMiB0aGUgaW5mbGlnaHQg
cGFja2V0cykuCisgKi8KKyNkZWZpbmUgU0NUUF9JR05PUkVfQ1dORF9PTl9GUiAxCisKKy8qCisg
KiBBZGRzIGltcGxlbWVudG9ycyBndWlkZSBiZWhhdmlvciB0byBvbmx5IHVzZSBuZXdlc3QgaGln
aGVzdCB1cGRhdGUgaW4gU0FDSworICogZ2FwIGFjaydzIHRvIGZpZ3VyZSBvdXQgaWYgeW91IG5l
ZWQgdG8gc3Ryb2tlIGEgY2h1bmsgZm9yIEZSLgorICovCisjZGVmaW5lIFNDVFBfTk9fRlJfVU5M
RVNTX1NFR01FTlRfU01BTExFUiAxCisKKy8qIGRlZmF1bHQgbWF4IEkgY2FuIGJ1cnN0IG91dCBh
ZnRlciBhIGZhc3QgcmV0cmFuc21pdCwgMCBkaXNhYmxlcyBpdCAqLworI2RlZmluZSBTQ1RQX0RF
Rl9NQVhfQlVSU1QgNAorI2RlZmluZSBTQ1RQX0RFRl9IQk1BWF9CVVJTVCA0CisjZGVmaW5lIFND
VFBfREVGX0ZSTUFYX0JVUlNUIDQKKworLyogUlRPIGNhbGN1bGF0aW9uIGZsYWcgdG8gc2F5IGlm
IGl0CisgKiBpcyBzYWZlIHRvIGRldGVybWluZSBsb2NhbCBsYW4gb3Igbm90LgorICovCisjZGVm
aW5lIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEgMAorI2RlZmluZSBTQ1RQX1JUVF9GUk9NX0RBVEEg
ICAgIDEKKworI2RlZmluZSBQUl9TQ1RQX1VOT1JERVJFRF9GTEFHIDB4MDAwMQorCisvKiBJUCBo
ZHIgKDIwLzQwKSArIDEyKzIrMiAoZW5ldCkgKyBzY3RwIGNvbW1vbiAxMiAqLworI2RlZmluZSBT
Q1RQX0ZJUlNUX01CVUZfUkVTViA2OAorLyogUGFja2V0IHRyYW5zbWl0IHN0YXRlcyBpbiB0aGUg
c2VudCBmaWVsZCAqLworI2RlZmluZSBTQ1RQX0RBVEFHUkFNX1VOU0VOVAkJMAorI2RlZmluZSBT
Q1RQX0RBVEFHUkFNX1NFTlQJCTEKKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQxCQkyCS8q
IG5vdCB1c2VkIChpbiBjb2RlLCBidXQgbWF5CisJCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkgKi8K
KyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9SRVNFTkQyCQkzCS8qIG5vdCB1c2VkIChpbiBjb2RlLCBi
dXQgbWF5CisJCQkJCQkgKiBoaXQgdGhpcyB2YWx1ZSkgKi8KKyNkZWZpbmUgU0NUUF9EQVRBR1JB
TV9SRVNFTkQJCTQKKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9BQ0tFRAkJMTAwMTAKKyNkZWZpbmUg
U0NUUF9EQVRBR1JBTV9NQVJLRUQJCTIwMDEwCisjZGVmaW5lIFNDVFBfRk9SV0FSRF9UU05fU0tJ
UAkJMzAwMTAKKyNkZWZpbmUgU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRAkJNDAwMTAKKworLyogY2h1
bmsgb3V0cHV0IHNlbmQgZnJvbSBsb2NhdGlvbnMgKi8KKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJP
TV9VU1JfU0VORCAgICAgICAwCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fVDMgICAgICAgCTEK
KyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9JTlBVVF9FUlJPUiAgICAyCisjZGVmaW5lIFNDVFBf
T1VUUFVUX0ZST01fQ09OVFJPTF9QUk9DICAgMworI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1NB
Q0tfVE1SICAgICAgIDQKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiAgICAgICA1
CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SICAgICAgICAgNgorI2RlZmluZSBTQ1RQ
X09VVFBVVF9GUk9NX1NIVVRfQUNLX1RNUiAgIDcKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJPTV9B
U0NPTkZfVE1SICAgICA4CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNUX1RNUiAgICAg
OQorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX0FVVE9DTE9TRV9UTVIgIDEwCisjZGVmaW5lIFND
VFBfT1VUUFVUX0ZST01fRUFSTFlfRlJfVE1SICAgMTEKKyNkZWZpbmUgU0NUUF9PVVRQVVRfRlJP
TV9TVFJSU1RfUkVRICAgICAxMgorI2RlZmluZSBTQ1RQX09VVFBVVF9GUk9NX1VTUl9SQ1ZEICAg
ICAgIDEzCisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lFX0FDSyAgICAgMTQKKyNkZWZp
bmUgU0NUUF9PVVRQVVRfRlJPTV9EUkFJTiAgICAgICAgICAxNQorI2RlZmluZSBTQ1RQX09VVFBV
VF9GUk9NX0NMT1NJTkcgICAgICAgIDE2CisjZGVmaW5lIFNDVFBfT1VUUFVUX0ZST01fU09DS09Q
VCAgICAgICAgMTcKKworLyogU0NUUCBjaHVuayB0eXBlcyBhcmUgbW92ZWQgc2N0cC5oIGZvciBh
cHBsaWNhdGlvbiAoTkFULCBGVykgdXNlICovCisKKy8qIGFsaWduIHRvIDMyLWJpdCBzaXplcyAq
LworI2RlZmluZSBTQ1RQX1NJWkUzMih4KQkoKCgoeCkgKyAzKSA+PiAyKSA8PCAyKQorCisjZGVm
aW5lIElTX1NDVFBfQ09OVFJPTChhKSAoKChhKS0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0RBVEEpICYm
ICgoYSktPmNodW5rX3R5cGUgIT0gU0NUUF9JREFUQSkpCisjZGVmaW5lIElTX1NDVFBfREFUQShh
KSAoKChhKS0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0RBVEEpIHx8ICgoYSktPmNodW5rX3R5cGUgPT0g
U0NUUF9JREFUQSkpCisKKworLyogU0NUUCBwYXJhbWV0ZXIgdHlwZXMgKi8KKy8qKioqKioqKioq
KioqMHgwMDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5lIFNDVFBfSEVBUlRCRUFUX0lO
Rk8JCTB4MDAwMQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNkZWZpbmUgU0NUUF9DT05O
X0FERFJFU1MJCTB4MDAwNAorI2VuZGlmCisjZGVmaW5lIFNDVFBfSVBWNF9BRERSRVNTCQkweDAw
MDUKKyNkZWZpbmUgU0NUUF9JUFY2X0FERFJFU1MJCTB4MDAwNgorI2RlZmluZSBTQ1RQX1NUQVRF
X0NPT0tJRQkJMHgwMDA3CisjZGVmaW5lIFNDVFBfVU5SRUNPR19QQVJBTQkJMHgwMDA4CisjZGVm
aW5lIFNDVFBfQ09PS0lFX1BSRVNFUlZFCQkweDAwMDkKKyNkZWZpbmUgU0NUUF9IT1NUTkFNRV9B
RERSRVNTCQkweDAwMGIKKyNkZWZpbmUgU0NUUF9TVVBQT1JURURfQUREUlRZUEUJCTB4MDAwYwor
CisvKiBSRkMgNjUyNSAqLworI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVAkweDAw
MGQKKyNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfSU5fUkVRVUVTVAkweDAwMGUKKyNkZWZpbmUgU0NU
UF9TVFJfUkVTRVRfVFNOX1JFUVVFU1QJMHgwMDBmCisjZGVmaW5lIFNDVFBfU1RSX1JFU0VUX1JF
U1BPTlNFCQkweDAwMTAKKyNkZWZpbmUgU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TCTB4
MDAxMQorI2RlZmluZSBTQ1RQX1NUUl9SRVNFVF9BRERfSU5fU1RSRUFNUwkweDAwMTIKKworI2Rl
ZmluZSBTQ1RQX01BWF9SRVNFVF9QQVJBTVMgMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9U
U05fREVMVEEJMHgxMDAwCisKKy8qKioqKioqKioqKioqMHg0MDAwIHNlcmllcyoqKioqKioqKioq
KiovCisKKy8qKioqKioqKioqKioqMHg4MDAwIHNlcmllcyoqKioqKioqKioqKiovCisjZGVmaW5l
IFNDVFBfRUNOX0NBUEFCTEUJCTB4ODAwMAorCisvKiBSRkMgNDg5NSAqLworI2RlZmluZSBTQ1RQ
X1JBTkRPTQkJCTB4ODAwMgorI2RlZmluZSBTQ1RQX0NIVU5LX0xJU1QJCQkweDgwMDMKKyNkZWZp
bmUgU0NUUF9ITUFDX0xJU1QJCQkweDgwMDQKKy8qIFJGQyA0ODIwICovCisjZGVmaW5lIFNDVFBf
UEFECQkJMHg4MDA1CisvKiBSRkMgNTA2MSAqLworI2RlZmluZSBTQ1RQX1NVUFBPUlRFRF9DSFVO
S19FWFQJMHg4MDA4CisKKy8qKioqKioqKioqKioqMHhDMDAwIHNlcmllcyoqKioqKioqKioqKiov
CisjZGVmaW5lIFNDVFBfUFJTQ1RQX1NVUFBPUlRFRAkJMHhjMDAwCisvKiBSRkMgNTA2MSAqLwor
I2RlZmluZSBTQ1RQX0FERF9JUF9BRERSRVNTCQkweGMwMDEKKyNkZWZpbmUgU0NUUF9ERUxfSVBf
QUREUkVTUwkJMHhjMDAyCisjZGVmaW5lIFNDVFBfRVJST1JfQ0FVU0VfSU5ECQkweGMwMDMKKyNk
ZWZpbmUgU0NUUF9TRVRfUFJJTV9BRERSCQkweGMwMDQKKyNkZWZpbmUgU0NUUF9TVUNDRVNTX1JF
UE9SVAkJMHhjMDA1CisjZGVmaW5lIFNDVFBfVUxQX0FEQVBUQVRJT04JCTB4YzAwNgorLyogYmVo
YXZlLW5hdC1kcmFmdCAqLworI2RlZmluZSBTQ1RQX0hBU19OQVRfU1VQUE9SVAkJMHhjMDA3Cisj
ZGVmaW5lIFNDVFBfTkFUX1ZUQUdTCQkJMHhjMDA4CisKKy8qIGJpdHMgZm9yIFRPUyBmaWVsZCAq
LworI2RlZmluZSBTQ1RQX0VDVDBfQklUCQkweDAyCisjZGVmaW5lIFNDVFBfRUNUMV9CSVQJCTB4
MDEKKyNkZWZpbmUgU0NUUF9DRV9CSVRTCQkweDAzCisKKy8qIGJlbG93IHR1cm5zIG9mZiBhYm92
ZSAqLworI2RlZmluZSBTQ1RQX0ZMRVhJQkxFX0FERFJFU1MJMHgyMAorI2RlZmluZSBTQ1RQX05P
X0hFQVJUQkVBVAkweDQwCisKKy8qIG1hc2sgdG8gZ2V0IHN0aWNreSAqLworI2RlZmluZSBTQ1RQ
X1NUSUNLWV9PUFRJT05TX01BU0sJMHgwYworCisKKy8qCisgKiBTQ1RQIHN0YXRlcyBmb3IgaW50
ZXJuYWwgc3RhdGUgbWFjaGluZQorICovCisjZGVmaW5lIFNDVFBfU1RBVEVfRU1QVFkJCTB4MDAw
MAorI2RlZmluZSBTQ1RQX1NUQVRFX0lOVVNFCQkweDAwMDEKKyNkZWZpbmUgU0NUUF9TVEFURV9D
T09LSUVfV0FJVAkJMHgwMDAyCisjZGVmaW5lIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRAkweDAw
MDQKKyNkZWZpbmUgU0NUUF9TVEFURV9PUEVOCQkJMHgwMDA4CisjZGVmaW5lIFNDVFBfU1RBVEVf
U0hVVERPV05fU0VOVAkweDAwMTAKKyNkZWZpbmUgU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZF
RAkweDAwMjAKKyNkZWZpbmUgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVAkweDAwNDAKKyNk
ZWZpbmUgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HCTB4MDA4MAorI2RlZmluZSBTQ1RQX1NU
QVRFX0NMT1NFRF9TT0NLRVQJMHgwMTAwCisjZGVmaW5lIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVf
RlJFRUQgICAgMHgwMjAwCisjZGVmaW5lIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCAgICAg
MHgwNDAwCisjZGVmaW5lIFNDVFBfU1RBVEVfV0FTX0FCT1JURUQgICAgICAgICAgMHgwODAwCisj
ZGVmaW5lIFNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFICAgICAgMHgxMDAwCisjZGVmaW5lIFND
VFBfU1RBVEVfTUFTSwkJCTB4MDA3ZgorCisjZGVmaW5lIFNDVFBfR0VUX1NUQVRFKGFzb2MpCSgo
YXNvYyktPnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKQorI2RlZmluZSBTQ1RQX1NFVF9TVEFURShh
c29jLCBuZXdzdGF0ZSkgICgoYXNvYyktPnN0YXRlID0gKChhc29jKS0+c3RhdGUgJiB+U0NUUF9T
VEFURV9NQVNLKSB8ICBuZXdzdGF0ZSkKKyNkZWZpbmUgU0NUUF9DTEVBUl9TVUJTVEFURShhc29j
LCBzdWJzdGF0ZSkgKChhc29jKS0+c3RhdGUgJj0gfnN1YnN0YXRlKQorI2RlZmluZSBTQ1RQX0FE
RF9TVUJTVEFURShhc29jLCBzdWJzdGF0ZSkgKChhc29jKS0+c3RhdGUgfD0gc3Vic3RhdGUpCisK
Ky8qIFNDVFAgcmVhY2hhYmlsaXR5IHN0YXRlIGZvciBlYWNoIGFkZHJlc3MgKi8KKyNkZWZpbmUg
U0NUUF9BRERSX1JFQUNIQUJMRQkJMHgwMDEKKyNkZWZpbmUgU0NUUF9BRERSX05PX1BNVFVEICAg
ICAgICAgICAgICAweDAwMgorI2RlZmluZSBTQ1RQX0FERFJfTk9IQgkJCTB4MDA0CisjZGVmaW5l
IFNDVFBfQUREUl9CRUlOR19ERUxFVEVECQkweDAwOAorI2RlZmluZSBTQ1RQX0FERFJfTk9UX0lO
X0FTU09DCQkweDAxMAorI2RlZmluZSBTQ1RQX0FERFJfT1VUX09GX1NDT1BFCQkweDA4MAorI2Rl
ZmluZSBTQ1RQX0FERFJfVU5DT05GSVJNRUQJCTB4MjAwCisjZGVmaW5lIFNDVFBfQUREUl9SRVFf
UFJJTUFSWSAgICAgICAgICAgMHg0MDAKKy8qIEpSUyA1LzEzLzA3IC0gQWRkZWQgcG90ZW50aWFs
bHkgZmFpbGVkIHN0YXRlIGZvciBDTVQgUEYgKi8KKyNkZWZpbmUgU0NUUF9BRERSX1BGICAgICAg
ICAgICAgICAgICAgICAweDgwMAorCisvKiBib3VuZCBhZGRyZXNzIHR5cGVzIChlLmcuIHZhbGlk
IGFkZHJlc3MgdHlwZXMgdG8gYWxsb3cpICovCisjZGVmaW5lIFNDVFBfQk9VTkRfVjYJCTB4MDEK
KyNkZWZpbmUgU0NUUF9CT1VORF9WNAkJMHgwMgorCisvKgorICogd2hhdCBpcyB0aGUgZGVmYXVs
dCBudW1iZXIgb2YgbWJ1ZnMgaW4gYSBjaGFpbiBJIGFsbG93IGJlZm9yZSBzd2l0Y2hpbmcgdG8K
KyAqIGEgY2x1c3RlcgorICovCisjZGVmaW5lIFNDVFBfREVGQVVMVF9NQlVGU19JTl9DSEFJTiA1
CisKKy8qIEhvdyBsb25nIGEgY29va2llIGxpdmVzIGluIG1pbGxpLXNlY29uZHMgKi8KKyNkZWZp
bmUgU0NUUF9ERUZBVUxUX0NPT0tJRV9MSUZFCTYwMDAwCisKKy8qIE1heGltdW0gdGhlIG1hcHBp
bmcgYXJyYXkgd2lsbCAgZ3JvdyB0byAoVFNOIG1hcHBpbmcgYXJyYXkpICovCisjZGVmaW5lIFND
VFBfTUFQUElOR19BUlJBWQk1MTIKKworLyogc2l6ZSBvZiB0aGUgaW5pdGlhbCBtYWxsb2Mgb24g
dGhlIG1hcHBpbmcgYXJyYXkgKi8KKyNkZWZpbmUgU0NUUF9JTklUSUFMX01BUFBJTkdfQVJSQVkg
IDE2CisvKiBob3cgbXVjaCB3ZSBncm93IHRoZSBtYXBwaW5nIGFycmF5IGVhY2ggY2FsbCAqLwor
I2RlZmluZSBTQ1RQX01BUFBJTkdfQVJSQVlfSU5DUiAgICAgMzIKKworLyoKKyAqIEhlcmUgd2Ug
ZGVmaW5lIHRoZSB0aW1lciB0eXBlcyB1c2VkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcyBhcmd1
bWVudHMgaW4KKyAqIHRoZSBzZXQvZ2V0IHRpbWVyIHR5cGUgY2FsbHMuCisgKi8KKyNkZWZpbmUg
U0NUUF9USU1FUl9JTklUIAkwCisjZGVmaW5lIFNDVFBfVElNRVJfUkVDViAJMQorI2RlZmluZSBT
Q1RQX1RJTUVSX1NFTkQgCTIKKyNkZWZpbmUgU0NUUF9USU1FUl9IRUFSVEJFQVQJMworI2RlZmlu
ZSBTQ1RQX1RJTUVSX1BNVFUJCTQKKyNkZWZpbmUgU0NUUF9USU1FUl9NQVhTSFVURE9XTgk1Cisj
ZGVmaW5lIFNDVFBfVElNRVJfU0lHTkFUVVJFCTYKKy8qCisgKiBudW1iZXIgb2YgdGltZXIgdHlw
ZXMgaW4gdGhlIGJhc2UgU0NUUCBzdHJ1Y3R1cmUgdXNlZCBpbiB0aGUgc2V0L2dldCBhbmQKKyAq
IGhhcyB0aGUgYmFzZSBkZWZhdWx0LgorICovCisjZGVmaW5lIFNDVFBfTlVNX1RNUlMJNworCisv
KiB0aW1lciB0eXBlcyAqLworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTk9ORQkJMAorI2RlZmlu
ZSBTQ1RQX1RJTUVSX1RZUEVfU0VORAkJMQorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVAkJ
MgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfUkVDVgkJMworI2RlZmluZSBTQ1RQX1RJTUVSX1RZ
UEVfU0hVVERPV04JNAorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUCTUKKyNkZWZp
bmUgU0NUUF9USU1FUl9UWVBFX0NPT0tJRQkJNgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfTkVX
Q09PS0lFCTcKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRQk4CisjZGVmaW5l
IFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSwk5CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9B
U0NPTkYJCTEwCisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJECTExCisjZGVm
aW5lIFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0UJMTIKKyNkZWZpbmUgU0NUUF9USU1FUl9UWVBF
X0VWRU5UV0FLRQkxMworI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQgICAgICAgIDE0
CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9JTlBLSUxMICAgICAgICAgMTUKKyNkZWZpbmUgU0NU
UF9USU1FUl9UWVBFX0FTT0NLSUxMICAgICAgICAxNgorI2RlZmluZSBTQ1RQX1RJTUVSX1RZUEVf
QUREUl9XUSAgICAgICAgIDE3CisjZGVmaW5lIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQg
ICAgMTgKKy8qIGFkZCBuZXcgdGltZXJzIGhlcmUgLSBhbmQgaW5jcmVtZW50IExBU1QgKi8KKyNk
ZWZpbmUgU0NUUF9USU1FUl9UWVBFX0xBU1QgICAgICAgICAgICAxOQorCisjZGVmaW5lIFNDVFBf
SVNfVElNRVJfVFlQRV9WQUxJRCh0KQkoKCh0KSA+IFNDVFBfVElNRVJfVFlQRV9OT05FKSAmJiBc
CisJCQkJCSAoKHQpIDwgU0NUUF9USU1FUl9UWVBFX0xBU1QpKQorCisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKy8qIE51bWJlciBvZiB0aWNrcyB0byBydW4gdGhlIG1haW4gdGltZXIgYXQgaW4g
bXNlYyAqLworI2RlZmluZSBTQ1RQX01BSU5fVElNRVJfREVGQVVMVAkJMTAKKyNlbmRpZgorCisv
KiBtYXggbnVtYmVyIG9mIFRTTidzIGR1cCdkIHRoYXQgSSB3aWxsIGhvbGQgKi8KKyNkZWZpbmUg
U0NUUF9NQVhfRFVQX1RTTlMJMjAKKworLyoKKyAqIEhlcmUgd2UgZGVmaW5lIHRoZSB0eXBlcyB1
c2VkIHdoZW4gc2V0dGluZyB0aGUgcmV0cnkgYW1vdW50cy4KKyAqLworLyogSG93IG1hbnkgZHJv
cCByZS1hdHRlbXB0cyB3ZSBtYWtlIG9uICBJTklUL0NPT0tJRS1FQ0hPICovCisjZGVmaW5lIFND
VFBfUkVUUllfRFJPUFBFRF9USFJFU0ggNAorCisvKgorICogTWF4bWl1bSBudW1iZXIgb2YgY2h1
bmtzIGEgc2luZ2xlIGFzc29jaWF0aW9uIGNhbiBoYXZlIG9uIGl0LiBOb3RlIHRoYXQKKyAqIHRo
aXMgaXMgYSBzcXVpc2h5IG51bWJlciBzaW5jZSB0aGUgY291bnQgY2FuIHJ1biBvdmVyIHRoaXMg
aWYgdGhlIHVzZXIKKyAqIHNlbmRzIGEgbGFyZ2UgbWVzc2FnZSBkb3duIC4uIHRoZSBmcmFnbWVu
dGVkIGNodW5rcyBkb24ndCBjb3VudCB1bnRpbAorICogQUZURVIgdGhlIG1lc3NhZ2UgaXMgb24g
cXVldWUuLiBpdCB3b3VsZCBiZSB0aGUgbmV4dCBzZW5kIHRoYXQgYmxvY2tzCisgKiB0aGluZ3Mu
IFRoaXMgbnVtYmVyIHdpbGwgZ2V0IHR1bmVkIHVwIGF0IGJvb3QgaW4gdGhlIHNjdHBfaW5pdCBh
bmQgdXNlIHRoZQorICogbnVtYmVyIG9mIGNsdXN0ZXJzIGFzIGEgYmFzZS4gVGhpcyB3YXkgaGln
aCBiYW5kd2lkdGggZW52aXJvbm1lbnRzIHdpbGwKKyAqIG5vdCBnZXQgaW1wYWN0ZWQgYnkgdGhl
IGxvd2VyIGJhbmR3aWR0aCBzZW5kaW5nIGEgYnVuY2ggb2YgMSBieXRlIGNodW5rcworICovCisj
aWZkZWYgX19QYW5kYV9fCisjZGVmaW5lIFNDVFBfQVNPQ19NQVhfQ0hVTktTX09OX1FVRVVFIDEw
MjQwCisjZWxzZQorI2RlZmluZSBTQ1RQX0FTT0NfTUFYX0NIVU5LU19PTl9RVUVVRSA1MTIKKyNl
bmRpZgorCisKKy8qIFRoZSBjb252ZXJzaW9uIGZyb20gdGltZSB0byB0aWNrcyBhbmQgdmljZSB2
ZXJzYSBpcyBkb25lIGJ5IHJvdW5kaW5nCisgKiB1cHdhcmRzLiBUaGlzIHdheSB3ZSBjYW4gdGVz
dCBpbiB0aGUgY29kZSB0aGUgdGltZSB0byBiZSBwb3NpdGl2ZSBhbmQKKyAqIGtub3cgdGhhdCB0
aGlzIGNvcnJlc3BvbmRzIHRvIGEgcG9zaXRpdmUgbnVtYmVyIG9mIHRpY2tzLgorICovCisjZGVm
aW5lIE1TRUNfVE9fVElDS1MoeCkgKChoeiA9PSAxMDAwKSA/IHggOiAoKCgoeCkgKiBoeikgKyA5
OTkpIC8gMTAwMCkpCisjZGVmaW5lIFRJQ0tTX1RPX01TRUMoeCkgKChoeiA9PSAxMDAwKSA/IHgg
OiAoKCgoeCkgKiAxMDAwKSArIChoeiAtIDEpKSAvIGh6KSkKKworI2RlZmluZSBTRUNfVE9fVElD
S1MoeCkgKCh4KSAqIGh6KQorI2RlZmluZSBUSUNLU19UT19TRUMoeCkgKCgoeCkgKyAoaHogLSAx
KSkgLyBoeikKKworLyoKKyAqIEJhc2ljYWxseSB0aGUgbWluaW11bSBhbW91bnQgb2YgdGltZSBi
ZWZvcmUgSSBkbyBhIGVhcmx5IEZSLiBNYWtpbmcgdGhpcworICogdmFsdWUgdG8gbG93IHdpbGwg
Y2F1c2UgZHVwbGljYXRlIHJldHJhbnNtaXNzaW9ucy4KKyAqLworI2RlZmluZSBTQ1RQX01JTkZS
X01TRUNfVElNRVIgMjUwCisvKiBUaGUgZmxvb3IgdGhpcyB2YWx1ZSBpcyBhbGxvd2VkIHRvIGZh
bGwgdG8gd2hlbiBzdGFydGluZyBhIHRpbWVyLiAqLworI2RlZmluZSBTQ1RQX01JTkZSX01TRUNf
RkxPT1IgMjAKKworLyogaW5pdCB0aW1lciBkZWYgPSAxIHNlYyAqLworI2RlZmluZSBTQ1RQX0lO
SVRfU0VDCTEKKworLyogc2VuZCB0aW1lciBkZWYgPSAxIHNlY29uZHMgKi8KKyNkZWZpbmUgU0NU
UF9TRU5EX1NFQwkxCisKKy8qIHJlY3YgdGltZXIgZGVmID0gMjAwbXMgICovCisjZGVmaW5lIFND
VFBfUkVDVl9NU0VDCTIwMAorCisvKiAzMCBzZWNvbmRzICsgUlRPIChpbiBtcykgKi8KKyNkZWZp
bmUgU0NUUF9IQl9ERUZBVUxUX01TRUMJMzAwMDAKKworLyoKKyAqIFRoaXMgaXMgaG93IGxvbmcg
YSBzZWNyZXQgbGl2ZXMsIE5PVCBob3cgbG9uZyBhIGNvb2tpZSBsaXZlcyBob3cgbWFueQorICog
dGlja3MgdGhlIGN1cnJlbnQgc2VjcmV0IHdpbGwgbGl2ZS4KKyAqLworI2RlZmluZSBTQ1RQX0RF
RkFVTFRfU0VDUkVUX0xJRkVfU0VDIDM2MDAKKworI2RlZmluZSBTQ1RQX1JUT19VUFBFUl9CT1VO
RAkoNjAwMDApCS8qIDYwIHNlYyBpbiBtcyAqLworI2RlZmluZSBTQ1RQX1JUT19MT1dFUl9CT1VO
RAkoMTAwMCkJLyogMSBzZWMgaXMgbXMgKi8KKyNkZWZpbmUgU0NUUF9SVE9fSU5JVElBTAkoMzAw
MCkJLyogMyBzZWMgaW4gbXMgKi8KKworCisjZGVmaW5lIFNDVFBfSU5QX0tJTExfVElNRU9VVCAy
MAkvKiBudW1iZXIgb2YgbXMgdG8gcmV0cnkga2lsbCBvZiBpbnBjYiAqLworI2RlZmluZSBTQ1RQ
X0FTT0NfS0lMTF9USU1FT1VUIDEwCS8qIG51bWJlciBvZiBtcyB0byByZXRyeSBraWxsIG9mIGlu
cGNiICovCisKKyNkZWZpbmUgU0NUUF9ERUZfTUFYX0lOSVQJCTgKKyNkZWZpbmUgU0NUUF9ERUZf
TUFYX1NFTkQJCTEwCisjZGVmaW5lIFNDVFBfREVGX01BWF9QQVRIX1JUWAkJNQorI2RlZmluZSBT
Q1RQX0RFRl9QQVRIX1BGX1RIUkVTSE9MRAlTQ1RQX0RFRl9NQVhfUEFUSF9SVFgKKworI2RlZmlu
ZSBTQ1RQX0RFRl9QTVRVX1JBSVNFX1NFQwk2MDAJLyogMTAgbWluIGJldHdlZW4gcmFpc2UgYXR0
ZW1wdHMgKi8KKworCisvKiBIb3cgbWFueSBzdHJlYW1zIEkgcmVxdWVzdCBpbml0aWFsbHkgYnkg
ZGVmYXVsdCAqLworI2RlZmluZSBTQ1RQX09TVFJFQU1fSU5JVElBTCAxMAorI2RlZmluZSBTQ1RQ
X0lTVFJFQU1fSU5JVElBTCAyMDQ4CisKKy8qCisgKiBIb3cgbWFueSBzbWFsbGVzdF9tdHUncyBu
ZWVkIHRvIGluY3JlYXNlIGJlZm9yZSBhIHdpbmRvdyB1cGRhdGUgc2FjayBpcworICogc2VudCAo
c2hvdWxkIGJlIGEgcG93ZXIgb2YgMikuCisgKi8KKy8qIFNlbmQgd2luZG93IHVwZGF0ZSAoaW5j
ciAqIHRoaXMgPiBoaXdhdCkuIFNob3VsZCBiZSBhIHBvd2VyIG9mIDIgKi8KKyNkZWZpbmUgU0NU
UF9NSU5JTUFMX1JXTkQJCSg0MDk2KQkvKiBtaW5pbWFsIHJ3bmQgKi8KKworI2RlZmluZSBTQ1RQ
X0FERFJNQVgJCTE2CisKKy8qIFNDVFAgREVCVUcgU3dpdGNoIHBhcmFtZXRlcnMgKi8KKyNkZWZp
bmUgU0NUUF9ERUJVR19USU1FUjEJMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVS
MgkweDAwMDAwMDAyCS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSMwkweDAw
MDAwMDA0CS8qIHVudXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1RJTUVSNAkweDAwMDAwMDA4
CisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUMQkweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfREVC
VUdfT1VUUFVUMgkweDAwMDAwMDIwCisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUMwkweDAwMDAw
MDQwCisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUNAkweDAwMDAwMDgwCisjZGVmaW5lIFNDVFBf
REVCVUdfVVRJTDEJMHgwMDAwMDEwMAorI2RlZmluZSBTQ1RQX0RFQlVHX1VUSUwyCTB4MDAwMDAy
MDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfQVVUSDEJMHgwMDAwMDQwMAorI2Rl
ZmluZSBTQ1RQX0RFQlVHX0FVVEgyCTB4MDAwMDA4MDAJLyogdW51c2VkICovCisjZGVmaW5lIFND
VFBfREVCVUdfSU5QVVQxCTB4MDAwMDEwMDAKKyNkZWZpbmUgU0NUUF9ERUJVR19JTlBVVDIJMHgw
MDAwMjAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX0lOUFVUMwkweDAwMDA0MDAwCisjZGVmaW5lIFND
VFBfREVCVUdfSU5QVVQ0CTB4MDAwMDgwMDAJLyogdW51c2VkICovCisjZGVmaW5lIFNDVFBfREVC
VUdfQVNDT05GMQkweDAwMDEwMDAwCisjZGVmaW5lIFNDVFBfREVCVUdfQVNDT05GMgkweDAwMDIw
MDAwCisjZGVmaW5lIFNDVFBfREVCVUdfT1VUUFVUNQkweDAwMDQwMDAwCS8qIHVudXNlZCAqLwor
I2RlZmluZSBTQ1RQX0RFQlVHX1hYWAkJMHgwMDA4MDAwMAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUg
U0NUUF9ERUJVR19QQ0IxCQkweDAwMTAwMDAwCisjZGVmaW5lIFNDVFBfREVCVUdfUENCMgkJMHgw
MDIwMDAwMAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19QQ0IzCQkweDAwNDAwMDAw
CisjZGVmaW5lIFNDVFBfREVCVUdfUENCNAkJMHgwMDgwMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVH
X0lOREFUQTEJMHgwMTAwMDAwMAorI2RlZmluZSBTQ1RQX0RFQlVHX0lOREFUQTIJMHgwMjAwMDAw
MAkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgU0NUUF9ERUJVR19JTkRBVEEzCTB4MDQwMDAwMDAJLyog
dW51c2VkICovCisjZGVmaW5lIFNDVFBfREVCVUdfQ1JDT0ZGTE9BRAkweDA4MDAwMDAwCS8qIHVu
dXNlZCAqLworI2RlZmluZSBTQ1RQX0RFQlVHX1VTUlJFUTEJMHgxMDAwMDAwMAkvKiB1bnVzZWQg
Ki8KKyNkZWZpbmUgU0NUUF9ERUJVR19VU1JSRVEyCTB4MjAwMDAwMDAJLyogdW51c2VkICovCisj
ZGVmaW5lIFNDVFBfREVCVUdfUEVFTDEJMHg0MDAwMDAwMAorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKyNkZWZpbmUgU0NUUF9ERUJVR19VU1IgCQkweDgwMDAwMDAwCisjZWxzZQorI2RlZmlu
ZSBTQ1RQX0RFQlVHX1hYWFhYCTB4ODAwMDAwMDAJLyogdW51c2VkICovCisjZW5kaWYKKyNkZWZp
bmUgU0NUUF9ERUJVR19BTEwJCTB4N2ZmM2ZmZmYKKyNkZWZpbmUgU0NUUF9ERUJVR19OT0lTWQkw
eDAwMDQwMDAwCisKKy8qIFdoYXQgc2VuZGVyIG5lZWRzIHRvIHNlZSB0byBhdm9pZCBTV1Mgb3Ig
d2UgY29uc2lkZXIgcGVlcnMgcnduZCAwICovCisjZGVmaW5lIFNDVFBfU1dTX1NFTkRFUl9ERUYJ
MTQyMAorCisvKgorICogU1dTIGlzIHNjYWxlZCB0byB0aGUgc2JfaGl3YXQgb2YgdGhlIHNvY2tl
dC4gQSB2YWx1ZSBvZiAyIGlzIGhpd2F0LzQsIDEKKyAqIHdvdWxkIGJlIGhpd2F0LzIgZXRjLgor
ICovCisvKiBXaGF0IHJlY2VpdmVyIG5lZWRzIHRvIHNlZSBpbiBzb2NrYnVmIG9yIHdlIHRlbGwg
cGVlciBpdHMgMSAqLworI2RlZmluZSBTQ1RQX1NXU19SRUNFSVZFUl9ERUYJMzAwMAorCisjZGVm
aW5lIFNDVFBfSU5JVElBTF9DV05EIDQzODAKKworI2RlZmluZSBTQ1RQX0RFRkFVTFRfTVRVIDE1
MDAgLyogZW1lcmdlbmN5IGRlZmF1bHQgTVRVICovCisvKiBhbW91bnQgcGVlciBpcyBvYmxpZ2F0
ZWQgdG8gaGF2ZSBpbiByd25kIG9yIEkgd2lsbCBhYm9ydCAqLworI2RlZmluZSBTQ1RQX01JTl9S
V05ECTE1MDAKKworI2RlZmluZSBTQ1RQX0RFRkFVTFRfTUFYU0VHTUVOVCA2NTUzNQorCisjZGVm
aW5lIFNDVFBfQ0hVTktfQlVGRkVSX1NJWkUJNTEyCisjZGVmaW5lIFNDVFBfUEFSQU1fQlVGRkVS
X1NJWkUJNTEyCisKKy8qIHNtYWxsIGNodW5rIHN0b3JlIGZvciBsb29raW5nIGF0IGNodW5rX2xp
c3QgaW4gYXV0aCAqLworI2RlZmluZSBTQ1RQX1NNQUxMX0NIVU5LX1NUT1JFIDI2MAorCisjZGVm
aW5lIFNDVFBfSE9XX01BTllfU0VDUkVUUwkyCS8qIGhvdyBtYW55IHNlY3JldHMgSSBrZWVwICov
CisKKyNkZWZpbmUgU0NUUF9OVU1CRVJfT0ZfU0VDUkVUUwk4CS8qIG9yIDggKiA0ID0gMzIgb2N0
ZXRzICovCisjZGVmaW5lIFNDVFBfU0VDUkVUX1NJWkUJMzIJLyogbnVtYmVyIG9mIG9jdGV0cyBp
biBhIDI1NiBiaXRzICovCisKKworLyoKKyAqIFNDVFAgdXBwZXIgbGF5ZXIgbm90aWZpY2F0aW9u
cworICovCisjZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX1VQICAgICAgICAgICAgICAgICAgICAg
MQorI2RlZmluZSBTQ1RQX05PVElGWV9BU1NPQ19ET1dOICAgICAgICAgICAgICAgICAgIDIKKyNk
ZWZpbmUgU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04gICAgICAgICAgICAgICAzCisjZGVmaW5l
IFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCAgICAgICAgICAgICAgICAgNAorI2RlZmluZSBTQ1RQ
X05PVElGWV9TRU5UX0RHX0ZBSUwgICAgICAgICAgICAgICAgIDUKKyNkZWZpbmUgU0NUUF9OT1RJ
RllfVU5TRU5UX0RHX0ZBSUwgICAgICAgICAgICAgICA2CisjZGVmaW5lIFNDVFBfTk9USUZZX1NQ
RUNJQUxfU1BfRkFJTCAgICAgICAgICAgICAgNworI2RlZmluZSBTQ1RQX05PVElGWV9BU1NPQ19M
T0NfQUJPUlRFRCAgICAgICAgICAgIDgKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNTT0NfUkVNX0FC
T1JURUQgICAgICAgICAgICA5CisjZGVmaW5lIFNDVFBfTk9USUZZX0FTU09DX1JFU1RBUlQgICAg
ICAgICAgICAgICAxMAorI2RlZmluZSBTQ1RQX05PVElGWV9QRUVSX1NIVVRET1dOICAgICAgICAg
ICAgICAgMTEKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVNDT05GX0FERF9JUCAgICAgICAgICAgICAg
IDEyCisjZGVmaW5lIFNDVFBfTk9USUZZX0FTQ09ORl9ERUxFVEVfSVAgICAgICAgICAgICAxMwor
I2RlZmluZSBTQ1RQX05PVElGWV9BU0NPTkZfU0VUX1BSSU1BUlkgICAgICAgICAgMTQKKyNkZWZp
bmUgU0NUUF9OT1RJRllfUEFSVElBTF9ERUxWSUVSWV9JTkRJQ0FUSU9OIDE1CisjZGVmaW5lIFND
VFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQgICAgICAgICAxNgorI2RlZmluZSBTQ1RQX05P
VElGWV9TVFJfUkVTRVRfUkVDViAgICAgICAgICAgICAgMTcKKyNkZWZpbmUgU0NUUF9OT1RJRllf
U1RSX1JFU0VUX1NFTkQgICAgICAgICAgICAgIDE4CisjZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9S
RVNFVF9GQUlMRURfT1VUICAgICAgICAxOQorI2RlZmluZSBTQ1RQX05PVElGWV9TVFJfUkVTRVRf
RkFJTEVEX0lOICAgICAgICAgMjAKKyNkZWZpbmUgU0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklF
RF9PVVQgICAgICAgIDIxCisjZGVmaW5lIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5JRURfSU4g
ICAgICAgICAyMgorI2RlZmluZSBTQ1RQX05PVElGWV9BVVRIX05FV19LRVkgICAgICAgICAgICAg
ICAgMjMKKyNkZWZpbmUgU0NUUF9OT1RJRllfQVVUSF9GUkVFX0tFWSAgICAgICAgICAgICAgIDI0
CisjZGVmaW5lIFNDVFBfTk9USUZZX05PX1BFRVJfQVVUSCAgICAgICAgICAgICAgICAyNQorI2Rl
ZmluZSBTQ1RQX05PVElGWV9TRU5ERVJfRFJZICAgICAgICAgICAgICAgICAgMjYKKyNkZWZpbmUg
U0NUUF9OT1RJRllfUkVNT1RFX0VSUk9SICAgICAgICAgICAgICAgIDI3CisKKy8qIFRoaXMgaXMg
dGhlIHZhbHVlIGZvciBtZXNzYWdlcyB0aGF0IGFyZSBOT1QgY29tcGxldGVseQorICogY29waWVk
IGRvd24gd2hlcmUgd2Ugd2lsbCBzdGFydCB0byBzcGxpdCB0aGUgbWVzc2FnZS4KKyAqIFNvLCB3
aXRoIG91ciBkZWZhdWx0LCB3ZSBzcGxpdCBvbmx5IGlmIHRoZSBwaWVjZSB3ZQorICogd2FudCB0
byB0YWtlIHdpbGwgZmlsbCB1cCBhIGZ1bGwgTVRVIChhc3N1bWluZworICogYSAxNTAwIGJ5dGUg
TVRVKS4KKyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfU1BMSVRfUE9JTlRfTUlOIDI5MDQKKwor
LyogTWF4aW11bSBsZW5ndGggb2YgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBpbiBlcnJvciBjYXVz
ZXMgKi8KKyNkZWZpbmUgU0NUUF9ESUFHX0lORk9fTEVOIDEyOAorCisvKiBBQk9SVCBDT0RFUyBh
bmQgb3RoZXIgdGVsbC10YWxlIGxvY2F0aW9uCisgKiBjb2RlcyBhcmUgZ2VuZXJhdGVkIGJ5IGFk
ZGluZyB0aGUgYmVsb3cKKyAqIHRvIHRoZSBpbnN0YW5jZSBpZC4KKyAqLworCisvKiBGaWxlIGRl
ZmluZXMgKi8KKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfSU5QVVQgICAgICAgIDB4MTAwMDAwMDAK
KyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfUENCICAgICAgICAgIDB4MjAwMDAwMDAKKyNkZWZpbmUg
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICAgICAgIDB4MzAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9N
X1NDVFBfVElNRVIgICAgICAgIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRICAgICAgIDB4NTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBVVElMICAgICAgICAg
IDB4NjAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSAgICAgIDB4NzAwMDAw
MDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfQVNDT05GICAgICAgIDB4ODAwMDAwMDAKKyNkZWZp
bmUgU0NUUF9GUk9NX1NDVFBfT1VUUFVUICAgICAgIDB4OTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9G
Uk9NX1NDVFBfUEVFTE9GRiAgICAgIDB4YTAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBf
UEFOREEgICAgICAgIDB4YjAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfU1lTQ1RMICAg
ICAgIDB4YzAwMDAwMDAKKyNkZWZpbmUgU0NUUF9GUk9NX1NDVFBfQ0NfRlVOQ1RJT05TIDB4ZDAw
MDAwMDAKKworLyogTG9jYXRpb24gSUQncyAqLworI2RlZmluZSBTQ1RQX0xPQ18xICAweDAwMDAw
MDAxCisjZGVmaW5lIFNDVFBfTE9DXzIgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9MT0NfMyAg
MHgwMDAwMDAwMworI2RlZmluZSBTQ1RQX0xPQ180ICAweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBf
TE9DXzUgIDB4MDAwMDAwMDUKKyNkZWZpbmUgU0NUUF9MT0NfNiAgMHgwMDAwMDAwNgorI2RlZmlu
ZSBTQ1RQX0xPQ183ICAweDAwMDAwMDA3CisjZGVmaW5lIFNDVFBfTE9DXzggIDB4MDAwMDAwMDgK
KyNkZWZpbmUgU0NUUF9MT0NfOSAgMHgwMDAwMDAwOQorI2RlZmluZSBTQ1RQX0xPQ18xMCAweDAw
MDAwMDBhCisjZGVmaW5lIFNDVFBfTE9DXzExIDB4MDAwMDAwMGIKKyNkZWZpbmUgU0NUUF9MT0Nf
MTIgMHgwMDAwMDAwYworI2RlZmluZSBTQ1RQX0xPQ18xMyAweDAwMDAwMDBkCisjZGVmaW5lIFND
VFBfTE9DXzE0IDB4MDAwMDAwMGUKKyNkZWZpbmUgU0NUUF9MT0NfMTUgMHgwMDAwMDAwZgorI2Rl
ZmluZSBTQ1RQX0xPQ18xNiAweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfTE9DXzE3IDB4MDAwMDAw
MTEKKyNkZWZpbmUgU0NUUF9MT0NfMTggMHgwMDAwMDAxMgorI2RlZmluZSBTQ1RQX0xPQ18xOSAw
eDAwMDAwMDEzCisjZGVmaW5lIFNDVFBfTE9DXzIwIDB4MDAwMDAwMTQKKyNkZWZpbmUgU0NUUF9M
T0NfMjEgMHgwMDAwMDAxNQorI2RlZmluZSBTQ1RQX0xPQ18yMiAweDAwMDAwMDE2CisjZGVmaW5l
IFNDVFBfTE9DXzIzIDB4MDAwMDAwMTcKKyNkZWZpbmUgU0NUUF9MT0NfMjQgMHgwMDAwMDAxOAor
I2RlZmluZSBTQ1RQX0xPQ18yNSAweDAwMDAwMDE5CisjZGVmaW5lIFNDVFBfTE9DXzI2IDB4MDAw
MDAwMWEKKyNkZWZpbmUgU0NUUF9MT0NfMjcgMHgwMDAwMDAxYgorI2RlZmluZSBTQ1RQX0xPQ18y
OCAweDAwMDAwMDFjCisjZGVmaW5lIFNDVFBfTE9DXzI5IDB4MDAwMDAwMWQKKyNkZWZpbmUgU0NU
UF9MT0NfMzAgMHgwMDAwMDAxZQorI2RlZmluZSBTQ1RQX0xPQ18zMSAweDAwMDAwMDFmCisjZGVm
aW5lIFNDVFBfTE9DXzMyIDB4MDAwMDAwMjAKKyNkZWZpbmUgU0NUUF9MT0NfMzMgMHgwMDAwMDAy
MQorI2RlZmluZSBTQ1RQX0xPQ18zNCAweDAwMDAwMDIyCisjZGVmaW5lIFNDVFBfTE9DXzM1IDB4
MDAwMDAwMjMKKworCisvKiBGcmVlIGFzc29jIGNvZGVzICovCisjZGVmaW5lIFNDVFBfTk9STUFM
X1BST0MgICAgICAwCisjZGVmaW5lIFNDVFBfUENCRlJFRV9OT0ZPUkNFICAxCisjZGVmaW5lIFND
VFBfUENCRlJFRV9GT1JDRSAgICAyCisKKy8qIEZyb20gY29kZXMgZm9yIGFkZGluZyBhZGRyZXNz
ZXMgKi8KKyNkZWZpbmUgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCA4CisjZGVmaW5lIFNDVFBfQURE
Ul9EWU5BTUlDX0FEREVEIDYKKyNkZWZpbmUgU0NUUF9JTl9DT09LSUVfUFJPQyAxMDAKKyNkZWZp
bmUgU0NUUF9BTExPQ19BU09DICAxCisjZGVmaW5lIFNDVFBfTE9BRF9BRERSXzIgMgorI2RlZmlu
ZSBTQ1RQX0xPQURfQUREUl8zIDMKKyNkZWZpbmUgU0NUUF9MT0FEX0FERFJfNCA0CisjZGVmaW5l
IFNDVFBfTE9BRF9BRERSXzUgNQorCisjZGVmaW5lIFNDVFBfRE9OT1RfU0VUU0NPUEUgMAorI2Rl
ZmluZSBTQ1RQX0RPX1NFVFNDT1BFIDEKKworCisvKiBUaGlzIHZhbHVlIGRldGVybWluZXMgdGhl
IGRlZmF1bHQgZm9yIHdoZW4KKyAqIHdlIHRyeSB0byBhZGQgbW9yZSBvbiB0aGUgc2VuZCBxdWV1
ZS4sIGlmCisgKiB0aGVyZSBpcyByb29tLiBUaGlzIHByZXZlbnRzIHVzIGZyb20gY3ljbGluZwor
ICogaW50byB0aGUgY29weV9yZXN1bWUgcm91dGluZSB0byBvZnRlbiBpZgorICogd2UgaGF2ZSBu
b3QgZ290IGVub3VnaCBzcGFjZSB0byBhZGQgYSBkZWNlbnQKKyAqIGVub3VnaCBzaXplIG1lc3Nh
Z2UuIE5vdGUgdGhhdCBpZiB3ZSBoYXZlIGVub3VnaAorICogc3BhY2UgdG8gY29tcGxldGUgdGhl
IG1lc3NhZ2UgY29weSB3ZSB3aWxsIGFsd2F5cworICogYWRkIHRvIHRoZSBtZXNzYWdlLCBubyBt
YXR0ZXIgd2hhdCB0aGUgc2l6ZS4gSXRzCisgKiBvbmx5IHdoZW4gd2UgcmVhY2ggdGhlIHBvaW50
IHRoYXQgd2UgaGF2ZSBzb21lIGxlZnQKKyAqIHRvIGFkZCwgdGhlcmUgaXMgb25seSByb29tIGZv
ciBwYXJ0IG9mIGl0IHRoYXQgd2UKKyAqIHdpbGwgdXNlIHRoaXMgdGhyZXNob2xkLiBJdHMgYWxz
byBhIHN5c2N0bC4KKyAqLworI2RlZmluZSBTQ1RQX0RFRkFVTFRfQUREX01PUkUgMTQ1MgorCisj
aWZuZGVmIFNDVFBfUENCSEFTSFNJWkUKKy8qIGRlZmF1bHQgbnVtYmVyIG9mIGFzc29jaWF0aW9u
IGhhc2ggYnVja2V0cyBpbiBlYWNoIGVuZHBvaW50ICovCisjZGVmaW5lIFNDVFBfUENCSEFTSFNJ
WkUgMjU2CisjZW5kaWYKKyNpZm5kZWYgU0NUUF9UQ0JIQVNIU0laRQorI2RlZmluZSBTQ1RQX1RD
QkhBU0hTSVpFIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNDVFBfQ0hVTktRVUVVRV9TQ0FMRQor
I2RlZmluZSBTQ1RQX0NIVU5LUVVFVUVfU0NBTEUgMTAKKyNlbmRpZgorCisjaWZkZWYgX19GcmVl
QlNEX18KKy8qIGNsb2NrIHZhcmlhbmNlIGlzIDEgbXMgKi8KKyNkZWZpbmUgU0NUUF9DTE9DS19H
UkFOVUxBUklUWQkxCisjZWxzZQorLyogY2xvY2sgdmFyaWFuY2UgaXMgMTAgbXMgKi8KKyNkZWZp
bmUgU0NUUF9DTE9DS19HUkFOVUxBUklUWQkxMAorI2VuZGlmCisjZGVmaW5lIElQX0hEUl9TSVpF
IDQwCQkvKiB3ZSB1c2UgdGhlIHNpemUgb2YgYSBJUDYgaGVhZGVyIGhlcmUgdGhpcworCQkJCSAq
IGRldHJhY3RzIGEgc21hbGwgYW1vdW50IGZvciBpcHY0IGJ1dCBpdAorCQkJCSAqIHNpbXBsaWZp
ZXMgdGhlIGlwdjYgYWRkaXRpb24gKi8KKworLyogQXJndW1lbnQgbWFnaWMgbnVtYmVyIGZvciBz
Y3RwX2lucGNiX2ZyZWUoKSAqLworCisvKiB0aGlyZCBhcmd1bWVudCAqLworI2RlZmluZSBTQ1RQ
X0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCAgICAgMAorI2RlZmluZSBTQ1RQX0NBTExFRF9BRlRF
Ul9DTVBTRVRfT0ZDTE9TRSAgMQorI2RlZmluZSBTQ1RQX0NBTExFRF9GUk9NX0lOUEtJTExfVElN
RVIgICAgMgorLyogc2Vjb25kIGFyZ3VtZW50ICovCisjZGVmaW5lIFNDVFBfRlJFRV9TSE9VTERf
VVNFX0FCT1JUICAgICAgICAgIDEKKyNkZWZpbmUgU0NUUF9GUkVFX1NIT1VMRF9VU0VfR1JBQ0VG
VUxfQ0xPU0UgMAorCisjaWZuZGVmIElQUFJPVE9fU0NUUAorI2RlZmluZSBJUFBST1RPX1NDVFAg
MTMyCS8qIHRoZSBPZmZpY2lhbCBJQU5BIG51bWJlciA6LSkgKi8KKyNlbmRpZgkJCQkvKiAhSVBQ
Uk9UT19TQ1RQICovCisKKyNkZWZpbmUgU0NUUF9NQVhfREFUQV9CVU5ETElORwkJMjU2CisKKy8q
IG1vZHVsYXIgY29tcGFyaXNvbiAqLworLyogU2VlIFJGQyAxOTgyIGZvciBkZXRhaWxzLiAqLwor
I2RlZmluZSBTQ1RQX1VJTlQxNl9HVChhLCBiKSAoKChhIDwgYikgJiYgKCh1aW50MTZfdCkoYiAt
IGEpID4gKDFVPDwxNSkpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGEg
PiBiKSAmJiAoKHVpbnQxNl90KShhIC0gYikgPCAoMVU8PDE1KSkpKQorI2RlZmluZSBTQ1RQX1VJ
TlQxNl9HRShhLCBiKSAoU0NUUF9VSU5UMTZfR1QoYSwgYikgfHwgKGEgPT0gYikpCisjZGVmaW5l
IFNDVFBfVUlOVDMyX0dUKGEsIGIpICgoKGEgPCBiKSAmJiAoKHVpbnQzMl90KShiIC0gYSkgPiAo
MVU8PDMxKSkpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYSA+IGIpICYm
ICgodWludDMyX3QpKGEgLSBiKSA8ICgxVTw8MzEpKSkpCisjZGVmaW5lIFNDVFBfVUlOVDMyX0dF
KGEsIGIpIChTQ1RQX1VJTlQzMl9HVChhLCBiKSB8fCAoYSA9PSBiKSkKKworI2RlZmluZSBTQ1RQ
X1NTTl9HVChhLCBiKSBTQ1RQX1VJTlQxNl9HVChhLCBiKQorI2RlZmluZSBTQ1RQX1NTTl9HRShh
LCBiKSBTQ1RQX1VJTlQxNl9HRShhLCBiKQorI2RlZmluZSBTQ1RQX1RTTl9HVChhLCBiKSBTQ1RQ
X1VJTlQzMl9HVChhLCBiKQorI2RlZmluZSBTQ1RQX1RTTl9HRShhLCBiKSBTQ1RQX1VJTlQzMl9H
RShhLCBiKQorI2RlZmluZSBTQ1RQX01JRF9HVChpLCBhLCBiKSAoKChpKSA9PSAxKSA/IFNDVFBf
VUlOVDMyX0dUKGEsIGIpIDogU0NUUF9VSU5UMTZfR1QoKHVpbnQxNl90KWEsICh1aW50MTZfdCli
KSkKKyNkZWZpbmUgU0NUUF9NSURfR0UoaSwgYSwgYikgKCgoaSkgPT0gMSkgPyBTQ1RQX1VJTlQz
Ml9HRShhLCBiKSA6IFNDVFBfVUlOVDE2X0dFKCh1aW50MTZfdClhLCAodWludDE2X3QpYikpCisj
ZGVmaW5lIFNDVFBfTUlEX0VRKGksIGEsIGIpICgoKGkpID09IDEpID8gYSA9PSBiIDogKHVpbnQx
Nl90KWEgPT0gKHVpbnQxNl90KWIpCisKKy8qIE1hcHBpbmcgYXJyYXkgbWFuaXB1bGF0aW9uIHJv
dXRpbmVzICovCisjZGVmaW5lIFNDVFBfSVNfVFNOX1BSRVNFTlQoYXJyeSwgZ2FwKSAoKGFycnlb
KGdhcCA+PiAzKV0gPj4gKGdhcCAmIDB4MDcpKSAmIDB4MDEpCisjZGVmaW5lIFNDVFBfU0VUX1RT
Tl9QUkVTRU5UKGFycnksIGdhcCkgKGFycnlbKGdhcCA+PiAzKV0gfD0gKDB4MDEgPDwgKChnYXAg
JiAweDA3KSkpKQorI2RlZmluZSBTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFycnksIGdhcCkgKGFy
cnlbKGdhcCA+PiAzKV0gJj0gKCh+KDB4MDEgPDwgKChnYXAgJiAweDA3KSkpKSAmIDB4ZmYpKQor
I2RlZmluZSBTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIHRzbiwgbWFwcGluZ190c24pIGRvIHsg
XAorCSAgICAgICAgICAgICAgICBpZiAodHNuID49IG1hcHBpbmdfdHNuKSB7IFwKKwkJCQkJCWdh
cCA9IHRzbiAtIG1hcHBpbmdfdHNuOyBcCisJCQkJCX0gZWxzZSB7IFwKKwkJCQkJCWdhcCA9IChN
QVhfVFNOIC0gbWFwcGluZ190c24pICsgdHNuICsgMTsgXAorCQkJCQl9IFwKKyAgICAgICAgICAg
ICAgICAgIH0gd2hpbGUgKDApCisKKworI2RlZmluZSBTQ1RQX1JFVFJBTl9ET05FIC0xCisjZGVm
aW5lIFNDVFBfUkVUUkFOX0VYSVQgLTIKKworLyoKKyAqIFRoaXMgdmFsdWUgZGVmaW5lcyB0aGUg
bnVtYmVyIG9mIHZ0YWcgYmxvY2sgdGltZSB3YWl0IGVudHJ5J3MgcGVyIGxpc3QKKyAqIGVsZW1l
bnQuICBFYWNoIGVudHJ5IHdpbGwgdGFrZSAyIDQgYnl0ZSBpbnRzIChhbmQgb2YgY291cnNlIHRo
ZSBvdmVyaGVhZAorICogb2YgdGhlIG5leHQgcG9pbnRlciBhcyB3ZWxsKS4gVXNpbmcgMTUgYXMg
YW4gZXhhbXBsZSB3aWxsIHlpZWxkICogKCg4ICoKKyAqIDE1KSArIDgpIG9yIDEyOCBieXRlcyBv
ZiBvdmVyaGVhZCBmb3IgZWFjaCB0aW1ld2FpdCBibG9jayB0aGF0IGdldHMKKyAqIGluaXRpYWxp
emVkLiBJbmNyZWFzaW5nIGl0IHRvIDMxIHdvdWxkIHlpZWxkIDI1NiBieXRlcyBwZXIgYmxvY2su
CisgKi8KKyNkZWZpbmUgU0NUUF9OVU1CRVJfSU5fVlRBR19CTE9DSyAxNQorLyoKKyAqIElmIHdl
IHVzZSB0aGUgU1RBQ0sgb3B0aW9uLCB3ZSBoYXZlIGFuIGFycmF5IG9mIHRoaXMgc2l6ZSBoZWFk
IHBvaW50ZXJzLgorICogVGhpcyBhcnJheSBpcyBtb2QnZCB0aGUgd2l0aCB0aGUgc2l6ZSB0byBm
aW5kIHdoaWNoIGJ1Y2tldCBhbmQgdGhlbiBhbGwKKyAqIGVudHJpZXMgbXVzdCBiZSBzZWFyY2hl
ZCB0byBzZWUgaWYgdGhlIHRhZyBpcyBpbiB0aW1lZCB3YWl0LiBJZiBzbyB3ZQorICogcmVqZWN0
IGl0LgorICovCisjZGVmaW5lIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUgICAzMgorCisvKgor
ICogTnVtYmVyIG9mIHNlY29uZHMgb2YgdGltZSB3YWl0IGZvciBhIHZ0YWcuCisgKi8KKyNkZWZp
bmUgU0NUUF9USU1FX1dBSVQgNjAKKworLyogSG93IG1hbnkgbWljcm8gc2Vjb25kcyBpcyB0aGUg
Y3V0b2ZmIGZyb20KKyAqIGxvY2FsIGxhbiB0eXBlIHJ0dCdzCisgKi8KKyAvKgorICAqIFdlIGFs
bG93IDkwMHVzIGZvciB0aGUgcnR0LgorICAqLworI2RlZmluZSBTQ1RQX0xPQ0FMX0xBTl9SVFQg
OTAwCisjZGVmaW5lIFNDVFBfTEFOX1VOS05PV04gIDAKKyNkZWZpbmUgU0NUUF9MQU5fTE9DQUwg
ICAgMQorI2RlZmluZSBTQ1RQX0xBTl9JTlRFUk5FVCAyCisKKyNkZWZpbmUgU0NUUF9TRU5EX0JV
RkZFUl9TUExJVFRJTkcgMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1JFQ1ZfQlVGRkVSX1NQTElU
VElORyAweDAwMDAwMDAyCisKKy8qIFRoZSBzeXN0ZW0gcmV0YWlucyBhIGNhY2hlIG9mIGZyZWUg
Y2h1bmtzIHN1Y2ggdG8KKyAqIGN1dCBkb3duIG9uIGNhbGxzIHRoZSBtZW1vcnkgYWxsb2NhdGlv
biBzeXN0ZW0uIFRoZXJlCisgKiBpcyBhIHBlciBhc3NvY2lhdGlvbiBsaW1pdCBvZiBmcmVlIGl0
ZW1zIGFuZCBhIG92ZXJhbGwKKyAqIHN5c3RlbSBsaW1pdC4gSWYgZWl0aGVyIG9uZSBnZXRzIGhp
dCB0aGVuIHRoZSByZXNvdXJjZQorICogc3RvcHMgYmVpbmcgY2FjaGVkLgorICovCisKKyNkZWZp
bmUgU0NUUF9ERUZfQVNPQ19SRVNDX0xJTUlUIDEwCisjZGVmaW5lIFNDVFBfREVGX1NZU1RFTV9S
RVNDX0xJTUlUIDEwMDAKKworLyotCisgKiBkZWZpbmVzIGZvciBzb2NrZXQgbG9jayBzdGF0ZXMu
CisgKiBVc2VkIGJ5IF9fQVBQTEVfXyBhbmQgU0NUUF9TT19MT0NLX1RFU1RJTkcKKyAqLworI2Rl
ZmluZSBTQ1RQX1NPX0xPQ0tFRAkJMQorI2RlZmluZSBTQ1RQX1NPX05PVF9MT0NLRUQJMAorCisK
Ky8qLQorICogRm9yIGFkZHJlc3MgbG9ja3MsIGRvIHdlIGhvbGQgdGhlIGxvY2s/CisgKi8KKyNk
ZWZpbmUgU0NUUF9BRERSX0xPQ0tFRCAxCisjZGVmaW5lIFNDVFBfQUREUl9OT1RfTE9DS0VEIDAK
KworI2RlZmluZSBJTjRfSVNQUklWQVRFX0FERFJFU1MoYSkgXAorICAgKCgoKHVpbnQ4X3QgKikm
KGEpLT5zX2FkZHIpWzBdID09IDEwKSB8fCBcCisgICAgKCgoKHVpbnQ4X3QgKikmKGEpLT5zX2Fk
ZHIpWzBdID09IDE3MikgJiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA+
PSAxNikgJiYgXAorICAgICAoKCh1aW50OF90ICopJihhKS0+c19hZGRyKVsxXSA8PSAzMikpIHx8
IFwKKyAgICAoKCgodWludDhfdCAqKSYoYSktPnNfYWRkcilbMF0gPT0gMTkyKSAmJiBcCisgICAg
ICgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzFdID09IDE2OCkpKQorCisjZGVmaW5lIElONF9J
U0xPT1BCQUNLX0FERFJFU1MoYSkgXAorICAgICgoKHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBd
ID09IDEyNykKKworI2RlZmluZSBJTjRfSVNMSU5LTE9DQUxfQUREUkVTUyhhKSBcCisgICAgKCgo
KHVpbnQ4X3QgKikmKGEpLT5zX2FkZHIpWzBdID09IDE2OSkgJiYgXAorICAgICAoKCh1aW50OF90
ICopJihhKS0+c19hZGRyKVsxXSA9PSAyNTQpKQorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNkZWZpbmUgU0NUUF9HRVRU
SU1FX1RJTUVWQUwoeCkJZ2V0d2ludGltZW9mZGF5KHgpCisjZGVmaW5lIFNDVFBfR0VUUFRJTUVf
VElNRVZBTCh4KSBnZXR3aW50aW1lb2ZkYXkoeCkgLyogdGhpcyBkb2Vzbid0IHNlZW0gdG8gZXZl
ciBiZSB1c2VkLi4gKi8KKyNlbHNlCisjZGVmaW5lIFNDVFBfR0VUVElNRV9USU1FVkFMKHgpCWdl
dHRpbWVvZmRheSh4LCBOVUxMKQorI2RlZmluZSBTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoeCkgZ2V0
dGltZW9mZGF5KHgsIE5VTEwpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfS0VSTkVM
KQorI2RlZmluZSBTQ1RQX0dFVFRJTUVfVElNRVZBTCh4KSAoZ2V0bWljcm91cHRpbWUoeCkpCisj
ZGVmaW5lIFNDVFBfR0VUUFRJTUVfVElNRVZBTCh4KSAobWljcm91cHRpbWUoeCkpCisjZW5kaWYK
KworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmlu
ZSBzY3RwX3Nvd3dha2V1cChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFKSB7IFwKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFND
VFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQ7IFwKKwl9IGVsc2UgeyBcCisJCXNvd3dha2V1cChzbyk7
IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjZGVmaW5lIHNjdHBf
c293d2FrZXVwX2xvY2tlZChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFKSB7IFwKKyAgICAgICAgICAgICAgICBTT0NLQlVG
X1VOTE9DSygmKChzbyktPnNvX3NuZCkpOyBcCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19XQUtFT1VUUFVUOyBcCisJfSBlbHNlIHsgXAorCQlzb3d3YWtldXBfbG9ja2VkKHNv
KTsgXAorCX0gXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIHNjdHBfc293d2FrZXVwX2xv
Y2tlZChpbnAsIHNvKSBcCitkbyB7IFwKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfRE9OVF9XQUtFKSB7IFwKKyAgICAgICAgICAgICAgICBTT0NLQlVGX1VOTE9DSygmKChz
byktPnNvX3NuZCkpOyBcCisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtF
T1VUUFVUOyBcCisJfSBlbHNlIHsgXAorCQlzb3d3YWtldXAoc28pOyBcCisJfSBcCit9IHdoaWxl
ICgwKQorI2VuZGlmCisKKyNkZWZpbmUgc2N0cF9zb3J3YWtldXAoaW5wLCBzbykgXAorZG8geyBc
CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJ
CWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKKwl9IGVsc2Ug
eyBcCisJCXNvcndha2V1cChzbyk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisjZGVmaW5lIHNjdHBfc29yd2FrZXVwX2xvY2tlZChpbnAsIHNvKSBcCitkbyB7IFwK
KwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfRE9OVF9XQUtFKSB7IFwKKwkJ
aW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsgXAorICAgICAgICAg
ICAgICAgIFNPQ0tCVUZfVU5MT0NLKCYoKHNvKS0+c29fcmN2KSk7IFwKKwl9IGVsc2UgeyBcCisJ
CXNvcndha2V1cF9sb2NrZWQoc28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2Vsc2UKKworI2Rl
ZmluZSBzY3RwX3Nvcndha2V1cF9sb2NrZWQoaW5wLCBzbykgXAorZG8geyBcCisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeyBcCisJCWlucC0+c2N0cF9m
bGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQUtFSU5QVVQ7IFwKKyAgICAgICAgICAgICAgICBTT0NL
QlVGX1VOTE9DSygmKChzbyktPnNvX3JjdikpOyBcCisJfSBlbHNlIHsgXAorCQlzb3J3YWtldXAo
c28pOyBcCisJfSBcCit9IHdoaWxlICgwKQorI2VuZGlmCisKKyNlbmRpZgkJCQkvKiBfS0VSTkVM
IHx8IF9fVXNlcnNwYWNlX18qLworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9jcmMzMi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfY3JjMzIuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1Mzkx
Li4wYmUwNzk1Y2YyYTZhODVhMDQ3YTRmODRlMzhkZjM3NjE5ZjBjNjViIDEwMDc1NQotLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9jcmMzMi5jCisrKyBiL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmMKQEAgLTAsMCArMSw4MjkgQEAKKy8qLQorICog
U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAo
YykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVl
eGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
IGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4KKyAqICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0
aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAg
ICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAq
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2lu
Y2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0
L3NjdHBfY3JjMzIuYyAzMjcyMDAgMjAxNy0xMi0yNiAxMjozNTowMlogdHVleGVuICQiKTsKKwor
I2luY2x1ZGUgIm9wdF9zY3RwLmgiCisKKyNpZmRlZiBTQ1RQCisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2NyYzMyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2Vsc2UKKyNpbmNs
dWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMv
bWJ1Zi5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CisjZW5kaWYKKyNlbHNl
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NyYzMyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3BjYi5oPgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKKy8qKgorICoKKyAq
IFJvdXRpbmUgRGVzY3JpcHRpb246CisgKgorICogQ29tcHV0ZXMgdGhlIENSQzMyYyBjaGVja3N1
bSBmb3IgdGhlIHNwZWNpZmllZCBidWZmZXIgdXNpbmcgdGhlIHNsaWNpbmcgYnkgOAorICogYWxn
b3JpdGhtIG92ZXIgNjQgYml0IHF1YW50aXRpZXMuCisgKgorICogQXJndW1lbnRzOgorICoKKyAq
CQlwX3J1bm5pbmdfY3JjIC0gcG9pbnRlciB0byB0aGUgaW5pdGlhbCBvciBmaW5hbCByZW1haW5k
ZXIgdmFsdWUKKyAqCQkJCXVzZWQgaW4gQ1JDIGNvbXB1dGF0aW9ucy4gSXQgc2hvdWxkIGJlIHNl
dCB0bworICoJCQkJbm9uLU5VTEwgaWYgdGhlIG1vZGUgYXJndW1lbnQgaXMgZXF1YWwgdG8gQ09O
VCBvciBFTkQKKyAqCQlwX2J1ZiAtIHRoZSBwYWNrZXQgYnVmZmVyIHdoZXJlIGNyYyBjb21wdXRh
dGlvbnMgYXJlIGJlaW5nIHBlcmZvcm1lZAorICoJCWxlbmd0aCAtIHRoZSBsZW5ndGggb2YgcF9i
dWYgaW4gYnl0ZXMKKyAqCQlpbml0X2J5dGVzIC0gdGhlIG51bWJlciBvZiBpbml0aWFsIGJ5dGVz
IHRoYXQgbmVlZCB0byBiZSBwcm9jZXNlZCBiZWZvcmUKKyAqCQkJCQkgYWxpZ25pbmcgcF9idWYg
dG8gbXVsdGlwbGVzIG9mIDQgYnl0ZXMKKyAqCQltb2RlIC0gY2FuIGJlIGFueSBvZiB0aGUgZm9s
bG93aW5nOiBCRUdJTiwgQ09OVCwgRU5ELCBCT0RZLCBBTElHTgorICoKKyAqIFJldHVybiB2YWx1
ZToKKyAqCisgKgkJVGhlIGNvbXB1dGVkIENSQzMyYyB2YWx1ZQorICovCisKKworLyoKKyAqIENv
cHlyaWdodCAoYykgMjAwNC0yMDA2IEludGVsIENvcnBvcmF0aW9uIC0gQWxsIFJpZ2h0cyBSZXNl
cnZlZAorICoKKyAqCisgKiBUaGlzIHNvZnR3YXJlIHByb2dyYW0gaXMgbGljZW5zZWQgc3ViamVj
dCB0byB0aGUgQlNEIExpY2Vuc2UsIGF2YWlsYWJsZSBhdAorICogaHR0cDovL3d3dy5vcGVuc291
cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5odG1sLgorICoKKyAqIEFic3RyYWN0OgorICoK
KyAqIFRhYmxlcyBmb3Igc29mdHdhcmUgQ1JDIGdlbmVyYXRpb24KKyAqLworCisvKgorICogVGhl
IGZvbGxvd2luZyBDUkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1
c2luZyB0aGUKKyAqIGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgorICoKKyAqIEdlbmVyYXRv
ciBQb2x5bm9taWFsID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQorICogR2VuZXJhdG9y
IFBvbHlub21pYWwgTGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCisgKiBSZWZsZWN0ZWQgQml0
cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIFRSVUUKKyAqIFRhYmxlIEdlbmVyYXRpb24gT2Zm
c2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIgYml0cworICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4u
Li4uLi4uLi4uLi4uLi4uLiA4IHNsaWNlcworICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiA4IDggOCA4IDggOCA4IDgKKyAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4u
Li4uLi4uLi4uLi4uLi4uLi4gLlwKKyAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4gOHgyNTZfdGFibGVzLmMKKyAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0
cF9jcmNfdGFibGVpbDhfbzMyWzI1Nl0gPQoreworCTB4MDAwMDAwMDAsIDB4RjI2QjgzMDMsIDB4
RTEzQjcwRjcsIDB4MTM1MEYzRjQsIDB4Qzc5QTk3MUYsIDB4MzVGMTE0MUMsIDB4MjZBMUU3RTgs
IDB4RDRDQTY0RUIsCisJMHg4QUQ5NThDRiwgMHg3OEIyREJDQywgMHg2QkUyMjgzOCwgMHg5OTg5
QUIzQiwgMHg0RDQzQ0ZEMCwgMHhCRjI4NENEMywgMHhBQzc4QkYyNywgMHg1RTEzM0MyNCwKKwkw
eDEwNUVDNzZGLCAweEUyMzU0NDZDLCAweEYxNjVCNzk4LCAweDAzMEUzNDlCLCAweEQ3QzQ1MDcw
LCAweDI1QUZEMzczLCAweDM2RkYyMDg3LCAweEM0OTRBMzg0LAorCTB4OUE4NzlGQTAsIDB4NjhF
QzFDQTMsIDB4N0JCQ0VGNTcsIDB4ODlENzZDNTQsIDB4NUQxRDA4QkYsIDB4QUY3NjhCQkMsIDB4
QkMyNjc4NDgsIDB4NEU0REZCNEIsCisJMHgyMEJEOEVERSwgMHhEMkQ2MERERCwgMHhDMTg2RkUy
OSwgMHgzM0VEN0QyQSwgMHhFNzI3MTlDMSwgMHgxNTRDOUFDMiwgMHgwNjFDNjkzNiwgMHhGNDc3
RUEzNSwKKwkweEFBNjRENjExLCAweDU4MEY1NTEyLCAweDRCNUZBNkU2LCAweEI5MzQyNUU1LCAw
eDZERkU0MTBFLCAweDlGOTVDMjBELCAweDhDQzUzMUY5LCAweDdFQUVCMkZBLAorCTB4MzBFMzQ5
QjEsIDB4QzI4OENBQjIsIDB4RDFEODM5NDYsIDB4MjNCM0JBNDUsIDB4Rjc3OURFQUUsIDB4MDUx
MjVEQUQsIDB4MTY0MkFFNTksIDB4RTQyOTJENUEsCisJMHhCQTNBMTE3RSwgMHg0ODUxOTI3RCwg
MHg1QjAxNjE4OSwgMHhBOTZBRTI4QSwgMHg3REEwODY2MSwgMHg4RkNCMDU2MiwgMHg5QzlCRjY5
NiwgMHg2RUYwNzU5NSwKKwkweDQxN0IxREJDLCAweEIzMTA5RUJGLCAweEEwNDA2RDRCLCAweDUy
MkJFRTQ4LCAweDg2RTE4QUEzLCAweDc0OEEwOUEwLCAweDY3REFGQTU0LCAweDk1QjE3OTU3LAor
CTB4Q0JBMjQ1NzMsIDB4MzlDOUM2NzAsIDB4MkE5OTM1ODQsIDB4RDhGMkI2ODcsIDB4MEMzOEQy
NkMsIDB4RkU1MzUxNkYsIDB4RUQwM0EyOUIsIDB4MUY2ODIxOTgsCisJMHg1MTI1REFEMywgMHhB
MzRFNTlEMCwgMHhCMDFFQUEyNCwgMHg0Mjc1MjkyNywgMHg5NkJGNERDQywgMHg2NEQ0Q0VDRiwg
MHg3Nzg0M0QzQiwgMHg4NUVGQkUzOCwKKwkweERCRkM4MjFDLCAweDI5OTcwMTFGLCAweDNBQzdG
MkVCLCAweEM4QUM3MUU4LCAweDFDNjYxNTAzLCAweEVFMEQ5NjAwLCAweEZENUQ2NUY0LCAweDBG
MzZFNkY3LAorCTB4NjFDNjkzNjIsIDB4OTNBRDEwNjEsIDB4ODBGREUzOTUsIDB4NzI5NjYwOTYs
IDB4QTY1QzA0N0QsIDB4NTQzNzg3N0UsIDB4NDc2Nzc0OEEsIDB4QjUwQ0Y3ODksCisJMHhFQjFG
Q0JBRCwgMHgxOTc0NDhBRSwgMHgwQTI0QkI1QSwgMHhGODRGMzg1OSwgMHgyQzg1NUNCMiwgMHhE
RUVFREZCMSwgMHhDREJFMkM0NSwgMHgzRkQ1QUY0NiwKKwkweDcxOTg1NDBELCAweDgzRjNENzBF
LCAweDkwQTMyNEZBLCAweDYyQzhBN0Y5LCAweEI2MDJDMzEyLCAweDQ0Njk0MDExLCAweDU3MzlC
M0U1LCAweEE1NTIzMEU2LAorCTB4RkI0MTBDQzIsIDB4MDkyQThGQzEsIDB4MUE3QTdDMzUsIDB4
RTgxMUZGMzYsIDB4M0NEQjlCREQsIDB4Q0VCMDE4REUsIDB4RERFMEVCMkEsIDB4MkY4QjY4Mjks
CisJMHg4MkY2M0I3OCwgMHg3MDlEQjg3QiwgMHg2M0NENEI4RiwgMHg5MUE2Qzg4QywgMHg0NTZD
QUM2NywgMHhCNzA3MkY2NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKKwkweDA4MkY2M0I3LCAw
eEZBNDRFMEI0LCAweEU5MTQxMzQwLCAweDFCN0Y5MDQzLCAweENGQjVGNEE4LCAweDNEREU3N0FC
LCAweDJFOEU4NDVGLCAweERDRTUwNzVDLAorCTB4OTJBOEZDMTcsIDB4NjBDMzdGMTQsIDB4NzM5
MzhDRTAsIDB4ODFGODBGRTMsIDB4NTUzMjZCMDgsIDB4QTc1OUU4MEIsIDB4QjQwOTFCRkYsIDB4
NDY2Mjk4RkMsCisJMHgxODcxQTREOCwgMHhFQTFBMjdEQiwgMHhGOTRBRDQyRiwgMHgwQjIxNTcy
QywgMHhERkVCMzNDNywgMHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhDQ0JCQzAzMywKKwkweEEy
NEJCNUE2LCAweDUwMjAzNkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUyLCAweDY1RDEyMkI5LCAw
eDk3QkFBMUJBLCAweDg0RUE1MjRFLCAweDc2ODFEMTRELAorCTB4Mjg5MkVENjksIDB4REFGOTZF
NkEsIDB4QzlBOTlEOUUsIDB4M0JDMjFFOUQsIDB4RUYwODdBNzYsIDB4MUQ2M0Y5NzUsIDB4MEUz
MzBBODEsIDB4RkM1ODg5ODIsCisJMHhCMjE1NzJDOSwgMHg0MDdFRjFDQSwgMHg1MzJFMDIzRSwg
MHhBMTQ1ODEzRCwgMHg3NThGRTVENiwgMHg4N0U0NjZENSwgMHg5NEI0OTUyMSwgMHg2NkRGMTYy
MiwKKwkweDM4Q0MyQTA2LCAweENBQTdBOTA1LCAweEQ5Rjc1QUYxLCAweDJCOUNEOUYyLCAweEZG
NTZCRDE5LCAweDBEM0QzRTFBLCAweDFFNkRDREVFLCAweEVDMDY0RUVELAorCTB4QzM4RDI2QzQs
IDB4MzFFNkE1QzcsIDB4MjJCNjU2MzMsIDB4RDBEREQ1MzAsIDB4MDQxN0IxREIsIDB4RjY3QzMy
RDgsIDB4RTUyQ0MxMkMsIDB4MTc0NzQyMkYsCisJMHg0OTU0N0UwQiwgMHhCQjNGRkQwOCwgMHhB
ODZGMEVGQywgMHg1QTA0OERGRiwgMHg4RUNFRTkxNCwgMHg3Q0E1NkExNywgMHg2RkY1OTlFMywg
MHg5RDlFMUFFMCwKKwkweEQzRDNFMUFCLCAweDIxQjg2MkE4LCAweDMyRTg5MTVDLCAweEMwODMx
MjVGLCAweDE0NDk3NkI0LCAweEU2MjJGNUI3LCAweEY1NzIwNjQzLCAweDA3MTk4NTQwLAorCTB4
NTkwQUI5NjQsIDB4QUI2MTNBNjcsIDB4QjgzMUM5OTMsIDB4NEE1QTRBOTAsIDB4OUU5MDJFN0Is
IDB4NkNGQkFENzgsIDB4N0ZBQjVFOEMsIDB4OERDMEREOEYsCisJMHhFMzMwQTgxQSwgMHgxMTVC
MkIxOSwgMHgwMjBCRDhFRCwgMHhGMDYwNUJFRSwgMHgyNEFBM0YwNSwgMHhENkMxQkMwNiwgMHhD
NTkxNEZGMiwgMHgzN0ZBQ0NGMSwKKwkweDY5RTlGMEQ1LCAweDlCODI3M0Q2LCAweDg4RDI4MDIy
LCAweDdBQjkwMzIxLCAweEFFNzM2N0NBLCAweDVDMThFNEM5LCAweDRGNDgxNzNELCAweEJEMjM5
NDNFLAorCTB4RjM2RTZGNzUsIDB4MDEwNUVDNzYsIDB4MTI1NTFGODIsIDB4RTAzRTlDODEsIDB4
MzRGNEY4NkEsIDB4QzY5RjdCNjksIDB4RDVDRjg4OUQsIDB4MjdBNDBCOUUsCisJMHg3OUI3MzdC
QSwgMHg4QkRDQjRCOSwgMHg5ODhDNDc0RCwgMHg2QUU3QzQ0RSwgMHhCRTJEQTBBNSwgMHg0QzQ2
MjNBNiwgMHg1RjE2RDA1MiwgMHhBRDdENTM1MQorfTsKKworLyoKKyAqIGVuZCBvZiB0aGUgQ1JD
IGxvb2t1cCB0YWJsZSBjcmNfdGFibGVpbDhfbzMyCisgKi8KKworCisKKy8qCisgKiBUaGUgZm9s
bG93aW5nIENSQyBsb29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5n
IHRoZQorICogZm9sbG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6CisgKgorICogR2VuZXJhdG9yIFBv
bHlub21pYWwgPSAuLi4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQxCisgKiBHZW5lcmF0b3IgUG9s
eW5vbWlhbCBMZW5ndGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKKyAqIFJlZmxlY3RlZCBCaXRzID0g
Li4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gVFJVRQorICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQg
PSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRzCisgKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4u
Li4uLi4uLi4uLi4uIDggc2xpY2VzCisgKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIDggOCA4IDggOCA4IDggOAorICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4u
Li4uLi4uLi4uLi4uLiAuXAorICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLiA4eDI1Nl90YWJsZXMuYworICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2Ny
Y190YWJsZWlsOF9vNDBbMjU2XSA9Cit7CisJMHgwMDAwMDAwMCwgMHgxM0EyOTg3NywgMHgyNzQ1
MzBFRSwgMHgzNEU3QTg5OSwgMHg0RThBNjFEQywgMHg1RDI4RjlBQiwgMHg2OUNGNTEzMiwgMHg3
QTZEQzk0NSwKKwkweDlEMTRDM0I4LCAweDhFQjY1QkNGLCAweEJBNTFGMzU2LCAweEE5RjM2QjIx
LCAweEQzOUVBMjY0LCAweEMwM0MzQTEzLCAweEY0REI5MjhBLCAweEU3NzkwQUZELAorCTB4M0ZD
NUYxODEsIDB4MkM2NzY5RjYsIDB4MTg4MEMxNkYsIDB4MEIyMjU5MTgsIDB4NzE0RjkwNUQsIDB4
NjJFRDA4MkEsIDB4NTYwQUEwQjMsIDB4NDVBODM4QzQsCisJMHhBMkQxMzIzOSwgMHhCMTczQUE0
RSwgMHg4NTk0MDJENywgMHg5NjM2OUFBMCwgMHhFQzVCNTNFNSwgMHhGRkY5Q0I5MiwgMHhDQjFF
NjMwQiwgMHhEOEJDRkI3QywKKwkweDdGOEJFMzAyLCAweDZDMjk3Qjc1LCAweDU4Q0VEM0VDLCAw
eDRCNkM0QjlCLCAweDMxMDE4MkRFLCAweDIyQTMxQUE5LCAweDE2NDRCMjMwLCAweDA1RTYyQTQ3
LAorCTB4RTI5RjIwQkEsIDB4RjEzREI4Q0QsIDB4QzVEQTEwNTQsIDB4RDY3ODg4MjMsIDB4QUMx
NTQxNjYsIDB4QkZCN0Q5MTEsIDB4OEI1MDcxODgsIDB4OThGMkU5RkYsCisJMHg0MDRFMTI4Mywg
MHg1M0VDOEFGNCwgMHg2NzBCMjI2RCwgMHg3NEE5QkExQSwgMHgwRUM0NzM1RiwgMHgxRDY2RUIy
OCwgMHgyOTgxNDNCMSwgMHgzQTIzREJDNiwKKwkweERENUFEMTNCLCAweENFRjg0OTRDLCAweEZB
MUZFMUQ1LCAweEU5QkQ3OUEyLCAweDkzRDBCMEU3LCAweDgwNzIyODkwLCAweEI0OTU4MDA5LCAw
eEE3MzcxODdFLAorCTB4RkYxN0M2MDQsIDB4RUNCNTVFNzMsIDB4RDg1MkY2RUEsIDB4Q0JGMDZF
OUQsIDB4QjE5REE3RDgsIDB4QTIzRjNGQUYsIDB4OTZEODk3MzYsIDB4ODU3QTBGNDEsCisJMHg2
MjAzMDVCQywgMHg3MUExOURDQiwgMHg0NTQ2MzU1MiwgMHg1NkU0QUQyNSwgMHgyQzg5NjQ2MCwg
MHgzRjJCRkMxNywgMHgwQkNDNTQ4RSwgMHgxODZFQ0NGOSwKKwkweEMwRDIzNzg1LCAweEQzNzBB
RkYyLCAweEU3OTcwNzZCLCAweEY0MzU5RjFDLCAweDhFNTg1NjU5LCAweDlERkFDRTJFLCAweEE5
MUQ2NkI3LCAweEJBQkZGRUMwLAorCTB4NURDNkY0M0QsIDB4NEU2NDZDNEEsIDB4N0E4M0M0RDMs
IDB4NjkyMTVDQTQsIDB4MTM0Qzk1RTEsIDB4MDBFRTBEOTYsIDB4MzQwOUE1MEYsIDB4MjdBQjNE
NzgsCisJMHg4MDlDMjUwNiwgMHg5MzNFQkQ3MSwgMHhBN0Q5MTVFOCwgMHhCNDdCOEQ5RiwgMHhD
RTE2NDREQSwgMHhEREI0RENBRCwgMHhFOTUzNzQzNCwgMHhGQUYxRUM0MywKKwkweDFEODhFNkJF
LCAweDBFMkE3RUM5LCAweDNBQ0RENjUwLCAweDI5NkY0RTI3LCAweDUzMDI4NzYyLCAweDQwQTAx
RjE1LCAweDc0NDdCNzhDLCAweDY3RTUyRkZCLAorCTB4QkY1OUQ0ODcsIDB4QUNGQjRDRjAsIDB4
OTgxQ0U0NjksIDB4OEJCRTdDMUUsIDB4RjFEM0I1NUIsIDB4RTI3MTJEMkMsIDB4RDY5Njg1QjUs
IDB4QzUzNDFEQzIsCisJMHgyMjREMTczRiwgMHgzMUVGOEY0OCwgMHgwNTA4MjdEMSwgMHgxNkFB
QkZBNiwgMHg2Q0M3NzZFMywgMHg3RjY1RUU5NCwgMHg0QjgyNDYwRCwgMHg1ODIwREU3QSwKKwkw
eEZCQzNGQUY5LCAweEU4NjE2MjhFLCAweERDODZDQTE3LCAweENGMjQ1MjYwLCAweEI1NDk5QjI1
LCAweEE2RUIwMzUyLCAweDkyMENBQkNCLCAweDgxQUUzM0JDLAorCTB4NjZENzM5NDEsIDB4NzU3
NUExMzYsIDB4NDE5MjA5QUYsIDB4NTIzMDkxRDgsIDB4Mjg1RDU4OUQsIDB4M0JGRkMwRUEsIDB4
MEYxODY4NzMsIDB4MUNCQUYwMDQsCisJMHhDNDA2MEI3OCwgMHhEN0E0OTMwRiwgMHhFMzQzM0I5
NiwgMHhGMEUxQTNFMSwgMHg4QThDNkFBNCwgMHg5OTJFRjJEMywgMHhBREM5NUE0QSwgMHhCRTZC
QzIzRCwKKwkweDU5MTJDOEMwLCAweDRBQjA1MEI3LCAweDdFNTdGODJFLCAweDZERjU2MDU5LCAw
eDE3OThBOTFDLCAweDA0M0EzMTZCLCAweDMwREQ5OUYyLCAweDIzN0YwMTg1LAorCTB4ODQ0ODE5
RkIsIDB4OTdFQTgxOEMsIDB4QTMwRDI5MTUsIDB4QjBBRkIxNjIsIDB4Q0FDMjc4MjcsIDB4RDk2
MEUwNTAsIDB4RUQ4NzQ4QzksIDB4RkUyNUQwQkUsCisJMHgxOTVDREE0MywgMHgwQUZFNDIzNCwg
MHgzRTE5RUFBRCwgMHgyREJCNzJEQSwgMHg1N0Q2QkI5RiwgMHg0NDc0MjNFOCwgMHg3MDkzOEI3
MSwgMHg2MzMxMTMwNiwKKwkweEJCOERFODdBLCAweEE4MkY3MDBELCAweDlDQzhEODk0LCAweDhG
NkE0MEUzLCAweEY1MDc4OUE2LCAweEU2QTUxMUQxLCAweEQyNDJCOTQ4LCAweEMxRTAyMTNGLAor
CTB4MjY5OTJCQzIsIDB4MzUzQkIzQjUsIDB4MDFEQzFCMkMsIDB4MTI3RTgzNUIsIDB4NjgxMzRB
MUUsIDB4N0JCMUQyNjksIDB4NEY1NjdBRjAsIDB4NUNGNEUyODcsCisJMHgwNEQ0M0NGRCwgMHgx
Nzc2QTQ4QSwgMHgyMzkxMEMxMywgMHgzMDMzOTQ2NCwgMHg0QTVFNUQyMSwgMHg1OUZDQzU1Niwg
MHg2RDFCNkRDRiwgMHg3RUI5RjVCOCwKKwkweDk5QzBGRjQ1LCAweDhBNjI2NzMyLCAweEJFODVD
RkFCLCAweEFEMjc1N0RDLCAweEQ3NEE5RTk5LCAweEM0RTgwNkVFLCAweEYwMEZBRTc3LCAweEUz
QUQzNjAwLAorCTB4M0IxMUNEN0MsIDB4MjhCMzU1MEIsIDB4MUM1NEZEOTIsIDB4MEZGNjY1RTUs
IDB4NzU5QkFDQTAsIDB4NjYzOTM0RDcsIDB4NTJERTlDNEUsIDB4NDE3QzA0MzksCisJMHhBNjA1
MEVDNCwgMHhCNUE3OTZCMywgMHg4MTQwM0UyQSwgMHg5MkUyQTY1RCwgMHhFODhGNkYxOCwgMHhG
QjJERjc2RiwgMHhDRkNBNUZGNiwgMHhEQzY4Qzc4MSwKKwkweDdCNUZERkZGLCAweDY4RkQ0Nzg4
LCAweDVDMUFFRjExLCAweDRGQjg3NzY2LCAweDM1RDVCRTIzLCAweDI2NzcyNjU0LCAweDEyOTA4
RUNELCAweDAxMzIxNkJBLAorCTB4RTY0QjFDNDcsIDB4RjVFOTg0MzAsIDB4QzEwRTJDQTksIDB4
RDJBQ0I0REUsIDB4QThDMTdEOUIsIDB4QkI2M0U1RUMsIDB4OEY4NDRENzUsIDB4OUMyNkQ1MDIs
CisJMHg0NDlBMkU3RSwgMHg1NzM4QjYwOSwgMHg2M0RGMUU5MCwgMHg3MDdEODZFNywgMHgwQTEw
NEZBMiwgMHgxOUIyRDdENSwgMHgyRDU1N0Y0QywgMHgzRUY3RTczQiwKKwkweEQ5OEVFREM2LCAw
eENBMkM3NUIxLCAweEZFQ0JERDI4LCAweEVENjk0NTVGLCAweDk3MDQ4QzFBLCAweDg0QTYxNDZE
LCAweEIwNDFCQ0Y0LCAweEEzRTMyNDgzCit9OworCisvKgorICogZW5kIG9mIHRoZSBDUkMgbG9v
a3VwIHRhYmxlIGNyY190YWJsZWlsOF9vNDAKKyAqLworCisKKworLyoKKyAqIFRoZSBmb2xsb3dp
bmcgQ1JDIGxvb2t1cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhl
CisgKiBmb2xsb3dpbmcgbW9kZWwgcGFyYW1ldGVyczoKKyAqCisgKiBHZW5lcmF0b3IgUG9seW5v
bWlhbCA9IC4uLi4uLi4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKKyAqIEdlbmVyYXRvciBQb2x5bm9t
aWFsIExlbmd0aCA9IC4uLi4uLi4uLi4gMzIgYml0cworICogUmVmbGVjdGVkIEJpdHMgPSAuLi4u
Li4uLi4uLi4uLi4uLi4uLi4uLiBUUlVFCisgKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4u
Li4uLi4uLi4uLi4uIDMyIGJpdHMKKyAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4u
Li4uLi4uLi4gOCBzbGljZXMKKyAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4gOCA4IDggOCA4IDggOCA4CisgKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4u
Li4uLi4uLi4uIC5cCisgKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IDh4MjU2X3RhYmxlcy5jCisgKi8KKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3Rh
YmxlaWw4X280OFsyNTZdID0KK3sKKwkweDAwMDAwMDAwLCAweEE1NDE5MjdFLCAweDRGNkY1MjBE
LCAweEVBMkVDMDczLCAweDlFREVBNDFBLCAweDNCOUYzNjY0LCAweEQxQjFGNjE3LCAweDc0RjA2
NDY5LAorCTB4Mzg1MTNFQzUsIDB4OUQxMEFDQkIsIDB4NzczRTZDQzgsIDB4RDI3RkZFQjYsIDB4
QTY4RjlBREYsIDB4MDNDRTA4QTEsIDB4RTlFMEM4RDIsIDB4NENBMTVBQUMsCisJMHg3MEEyN0Q4
QSwgMHhENUUzRUZGNCwgMHgzRkNEMkY4NywgMHg5QThDQkRGOSwgMHhFRTdDRDk5MCwgMHg0QjNE
NEJFRSwgMHhBMTEzOEI5RCwgMHgwNDUyMTlFMywKKwkweDQ4RjM0MzRGLCAweEVEQjJEMTMxLCAw
eDA3OUMxMTQyLCAweEEyREQ4MzNDLCAweEQ2MkRFNzU1LCAweDczNkM3NTJCLCAweDk5NDJCNTU4
LCAweDNDMDMyNzI2LAorCTB4RTE0NEZCMTQsIDB4NDQwNTY5NkEsIDB4QUUyQkE5MTksIDB4MEI2
QTNCNjcsIDB4N0Y5QTVGMEUsIDB4REFEQkNENzAsIDB4MzBGNTBEMDMsIDB4OTVCNDlGN0QsCisJ
MHhEOTE1QzVEMSwgMHg3QzU0NTdBRiwgMHg5NjdBOTdEQywgMHgzMzNCMDVBMiwgMHg0N0NCNjFD
QiwgMHhFMjhBRjNCNSwgMHgwOEE0MzNDNiwgMHhBREU1QTFCOCwKKwkweDkxRTY4NjlFLCAweDM0
QTcxNEUwLCAweERFODlENDkzLCAweDdCQzg0NkVELCAweDBGMzgyMjg0LCAweEFBNzlCMEZBLCAw
eDQwNTc3MDg5LCAweEU1MTZFMkY3LAorCTB4QTlCN0I4NUIsIDB4MENGNjJBMjUsIDB4RTZEOEVB
NTYsIDB4NDM5OTc4MjgsIDB4Mzc2OTFDNDEsIDB4OTIyODhFM0YsIDB4NzgwNjRFNEMsIDB4REQ0
N0RDMzIsCisJMHhDNzY1ODBEOSwgMHg2MjI0MTJBNywgMHg4ODBBRDJENCwgMHgyRDRCNDBBQSwg
MHg1OUJCMjRDMywgMHhGQ0ZBQjZCRCwgMHgxNkQ0NzZDRSwgMHhCMzk1RTRCMCwKKwkweEZGMzRC
RTFDLCAweDVBNzUyQzYyLCAweEIwNUJFQzExLCAweDE1MUE3RTZGLCAweDYxRUExQTA2LCAweEM0
QUI4ODc4LCAweDJFODU0ODBCLCAweDhCQzREQTc1LAorCTB4QjdDN0ZENTMsIDB4MTI4NjZGMkQs
IDB4RjhBOEFGNUUsIDB4NURFOTNEMjAsIDB4MjkxOTU5NDksIDB4OEM1OENCMzcsIDB4NjY3NjBC
NDQsIDB4QzMzNzk5M0EsCisJMHg4Rjk2QzM5NiwgMHgyQUQ3NTFFOCwgMHhDMEY5OTE5QiwgMHg2
NUI4MDNFNSwgMHgxMTQ4Njc4QywgMHhCNDA5RjVGMiwgMHg1RTI3MzU4MSwgMHhGQjY2QTdGRiwK
KwkweDI2MjE3QkNELCAweDgzNjBFOUIzLCAweDY5NEUyOUMwLCAweENDMEZCQkJFLCAweEI4RkZE
RkQ3LCAweDFEQkU0REE5LCAweEY3OTA4RERBLCAweDUyRDExRkE0LAorCTB4MUU3MDQ1MDgsIDB4
QkIzMUQ3NzYsIDB4NTExRjE3MDUsIDB4RjQ1RTg1N0IsIDB4ODBBRUUxMTIsIDB4MjVFRjczNkMs
IDB4Q0ZDMUIzMUYsIDB4NkE4MDIxNjEsCisJMHg1NjgzMDY0NywgMHhGM0MyOTQzOSwgMHgxOUVD
NTQ0QSwgMHhCQ0FEQzYzNCwgMHhDODVEQTI1RCwgMHg2RDFDMzAyMywgMHg4NzMyRjA1MCwgMHgy
MjczNjIyRSwKKwkweDZFRDIzODgyLCAweENCOTNBQUZDLCAweDIxQkQ2QThGLCAweDg0RkNGOEYx
LCAweEYwMEM5Qzk4LCAweDU1NEQwRUU2LCAweEJGNjNDRTk1LCAweDFBMjI1Q0VCLAorCTB4OEIy
Nzc3NDMsIDB4MkU2NkU1M0QsIDB4QzQ0ODI1NEUsIDB4NjEwOUI3MzAsIDB4MTVGOUQzNTksIDB4
QjBCODQxMjcsIDB4NUE5NjgxNTQsIDB4RkZENzEzMkEsCisJMHhCMzc2NDk4NiwgMHgxNjM3REJG
OCwgMHhGQzE5MUI4QiwgMHg1OTU4ODlGNSwgMHgyREE4RUQ5QywgMHg4OEU5N0ZFMiwgMHg2MkM3
QkY5MSwgMHhDNzg2MkRFRiwKKwkweEZCODUwQUM5LCAweDVFQzQ5OEI3LCAweEI0RUE1OEM0LCAw
eDExQUJDQUJBLCAweDY1NUJBRUQzLCAweEMwMUEzQ0FELCAweDJBMzRGQ0RFLCAweDhGNzU2RUEw
LAorCTB4QzNENDM0MEMsIDB4NjY5NUE2NzIsIDB4OENCQjY2MDEsIDB4MjlGQUY0N0YsIDB4NUQw
QTkwMTYsIDB4Rjg0QjAyNjgsIDB4MTI2NUMyMUIsIDB4QjcyNDUwNjUsCisJMHg2QTYzOEM1Nywg
MHhDRjIyMUUyOSwgMHgyNTBDREU1QSwgMHg4MDRENEMyNCwgMHhGNEJEMjg0RCwgMHg1MUZDQkEz
MywgMHhCQkQyN0E0MCwgMHgxRTkzRTgzRSwKKwkweDUyMzJCMjkyLCAweEY3NzMyMEVDLCAweDFE
NURFMDlGLCAweEI4MUM3MkUxLCAweENDRUMxNjg4LCAweDY5QUQ4NEY2LCAweDgzODM0NDg1LCAw
eDI2QzJENkZCLAorCTB4MUFDMUYxREQsIDB4QkY4MDYzQTMsIDB4NTVBRUEzRDAsIDB4RjBFRjMx
QUUsIDB4ODQxRjU1QzcsIDB4MjE1RUM3QjksIDB4Q0I3MDA3Q0EsIDB4NkUzMTk1QjQsCisJMHgy
MjkwQ0YxOCwgMHg4N0QxNUQ2NiwgMHg2REZGOUQxNSwgMHhDOEJFMEY2QiwgMHhCQzRFNkIwMiwg
MHgxOTBGRjk3QywgMHhGMzIxMzkwRiwgMHg1NjYwQUI3MSwKKwkweDRDNDJGNzlBLCAweEU5MDM2
NUU0LCAweDAzMkRBNTk3LCAweEE2NkMzN0U5LCAweEQyOUM1MzgwLCAweDc3RERDMUZFLCAweDlE
RjMwMThELCAweDM4QjI5M0YzLAorCTB4NzQxM0M5NUYsIDB4RDE1MjVCMjEsIDB4M0I3QzlCNTIs
IDB4OUUzRDA5MkMsIDB4RUFDRDZENDUsIDB4NEY4Q0ZGM0IsIDB4QTVBMjNGNDgsIDB4MDBFM0FE
MzYsCisJMHgzQ0UwOEExMCwgMHg5OUExMTg2RSwgMHg3MzhGRDgxRCwgMHhENkNFNEE2MywgMHhB
MjNFMkUwQSwgMHgwNzdGQkM3NCwgMHhFRDUxN0MwNywgMHg0ODEwRUU3OSwKKwkweDA0QjFCNEQ1
LCAweEExRjAyNkFCLCAweDRCREVFNkQ4LCAweEVFOUY3NEE2LCAweDlBNkYxMENGLCAweDNGMkU4
MkIxLCAweEQ1MDA0MkMyLCAweDcwNDFEMEJDLAorCTB4QUQwNjBDOEUsIDB4MDg0NzlFRjAsIDB4
RTI2OTVFODMsIDB4NDcyOENDRkQsIDB4MzNEOEE4OTQsIDB4OTY5OTNBRUEsIDB4N0NCN0ZBOTks
IDB4RDlGNjY4RTcsCisJMHg5NTU3MzI0QiwgMHgzMDE2QTAzNSwgMHhEQTM4NjA0NiwgMHg3Rjc5
RjIzOCwgMHgwQjg5OTY1MSwgMHhBRUM4MDQyRiwgMHg0NEU2QzQ1QywgMHhFMUE3NTYyMiwKKwkw
eEREQTQ3MTA0LCAweDc4RTVFMzdBLCAweDkyQ0IyMzA5LCAweDM3OEFCMTc3LCAweDQzN0FENTFF
LCAweEU2M0I0NzYwLCAweDBDMTU4NzEzLCAweEE5NTQxNTZELAorCTB4RTVGNTRGQzEsIDB4NDBC
NEREQkYsIDB4QUE5QTFEQ0MsIDB4MEZEQjhGQjIsIDB4N0IyQkVCREIsIDB4REU2QTc5QTUsIDB4
MzQ0NEI5RDYsIDB4OTEwNTJCQTgKK307CisKKy8qCisgKiBlbmQgb2YgdGhlIENSQyBsb29rdXAg
dGFibGUgY3JjX3RhYmxlaWw4X280OAorICovCisKKworCisvKgorICogVGhlIGZvbGxvd2luZyBD
UkMgbG9va3VwIHRhYmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKKyAq
IGZvbGxvd2luZyBtb2RlbCBwYXJhbWV0ZXJzOgorICoKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFs
ID0gLi4uLi4uLi4uLi4uLi4uLi4gMHgxRURDNkY0MQorICogR2VuZXJhdG9yIFBvbHlub21pYWwg
TGVuZ3RoID0gLi4uLi4uLi4uLiAzMiBiaXRzCisgKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4u
Li4uLi4uLi4uLi4uLi4uIFRSVUUKKyAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4u
Li4uLi4uLi4gMzIgYml0cworICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4u
Li4uLiA4IHNsaWNlcworICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiA4IDggOCA4IDggOCA4IDgKKyAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4u
Li4uLi4gLlwKKyAqIEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgy
NTZfdGFibGVzLmMKKyAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVp
bDhfbzU2WzI1Nl0gPQoreworCTB4MDAwMDAwMDAsIDB4REQ0NUFBQjgsIDB4QkY2NzIzODEsIDB4
NjIyMjg5MzksIDB4N0IyMjMxRjMsIDB4QTY2NzlCNEIsIDB4QzQ0NTEyNzIsIDB4MTkwMEI4Q0Es
CisJMHhGNjQ0NjNFNiwgMHgyQjAxQzk1RSwgMHg0OTIzNDA2NywgMHg5NDY2RUFERiwgMHg4RDY2
NTIxNSwgMHg1MDIzRjhBRCwgMHgzMjAxNzE5NCwgMHhFRjQ0REIyQywKKwkweEU5NjRCMTNELCAw
eDM0MjExQjg1LCAweDU2MDM5MkJDLCAweDhCNDYzODA0LCAweDkyNDY4MENFLCAweDRGMDMyQTc2
LCAweDJEMjFBMzRGLCAweEYwNjQwOUY3LAorCTB4MUYyMEQyREIsIDB4QzI2NTc4NjMsIDB4QTA0
N0YxNUEsIDB4N0QwMjVCRTIsIDB4NjQwMkUzMjgsIDB4Qjk0NzQ5OTAsIDB4REI2NUMwQTksIDB4
MDYyMDZBMTEsCisJMHhENzI1MTQ4QiwgMHgwQTYwQkUzMywgMHg2ODQyMzcwQSwgMHhCNTA3OURC
MiwgMHhBQzA3MjU3OCwgMHg3MTQyOEZDMCwgMHgxMzYwMDZGOSwgMHhDRTI1QUM0MSwKKwkweDIx
NjE3NzZELCAweEZDMjREREQ1LCAweDlFMDY1NEVDLCAweDQzNDNGRTU0LCAweDVBNDM0NjlFLCAw
eDg3MDZFQzI2LCAweEU1MjQ2NTFGLCAweDM4NjFDRkE3LAorCTB4M0U0MUE1QjYsIDB4RTMwNDBG
MEUsIDB4ODEyNjg2MzcsIDB4NUM2MzJDOEYsIDB4NDU2Mzk0NDUsIDB4OTgyNjNFRkQsIDB4RkEw
NEI3QzQsIDB4Mjc0MTFEN0MsCisJMHhDODA1QzY1MCwgMHgxNTQwNkNFOCwgMHg3NzYyRTVEMSwg
MHhBQTI3NEY2OSwgMHhCMzI3RjdBMywgMHg2RTYyNUQxQiwgMHgwQzQwRDQyMiwgMHhEMTA1N0U5
QSwKKwkweEFCQTY1RkU3LCAweDc2RTNGNTVGLCAweDE0QzE3QzY2LCAweEM5ODRENkRFLCAweEQw
ODQ2RTE0LCAweDBEQzFDNEFDLCAweDZGRTM0RDk1LCAweEIyQTZFNzJELAorCTB4NURFMjNDMDEs
IDB4ODBBNzk2QjksIDB4RTI4NTFGODAsIDB4M0ZDMEI1MzgsIDB4MjZDMDBERjIsIDB4RkI4NUE3
NEEsIDB4OTlBNzJFNzMsIDB4NDRFMjg0Q0IsCisJMHg0MkMyRUVEQSwgMHg5Rjg3NDQ2MiwgMHhG
REE1Q0Q1QiwgMHgyMEUwNjdFMywgMHgzOUUwREYyOSwgMHhFNEE1NzU5MSwgMHg4Njg3RkNBOCwg
MHg1QkMyNTYxMCwKKwkweEI0ODY4RDNDLCAweDY5QzMyNzg0LCAweDBCRTFBRUJELCAweEQ2QTQw
NDA1LCAweENGQTRCQ0NGLCAweDEyRTExNjc3LCAweDcwQzM5RjRFLCAweEFEODYzNUY2LAorCTB4
N0M4MzRCNkMsIDB4QTFDNkUxRDQsIDB4QzNFNDY4RUQsIDB4MUVBMUMyNTUsIDB4MDdBMTdBOUYs
IDB4REFFNEQwMjcsIDB4QjhDNjU5MUUsIDB4NjU4M0YzQTYsCisJMHg4QUM3Mjg4QSwgMHg1Nzgy
ODIzMiwgMHgzNUEwMEIwQiwgMHhFOEU1QTFCMywgMHhGMUU1MTk3OSwgMHgyQ0EwQjNDMSwgMHg0
RTgyM0FGOCwgMHg5M0M3OTA0MCwKKwkweDk1RTdGQTUxLCAweDQ4QTI1MEU5LCAweDJBODBEOUQw
LCAweEY3QzU3MzY4LCAweEVFQzVDQkEyLCAweDMzODA2MTFBLCAweDUxQTJFODIzLCAweDhDRTc0
MjlCLAorCTB4NjNBMzk5QjcsIDB4QkVFNjMzMEYsIDB4RENDNEJBMzYsIDB4MDE4MTEwOEUsIDB4
MTg4MUE4NDQsIDB4QzVDNDAyRkMsIDB4QTdFNjhCQzUsIDB4N0FBMzIxN0QsCisJMHg1MkEwQzkz
RiwgMHg4RkU1NjM4NywgMHhFREM3RUFCRSwgMHgzMDgyNDAwNiwgMHgyOTgyRjhDQywgMHhGNEM3
NTI3NCwgMHg5NkU1REI0RCwgMHg0QkEwNzFGNSwKKwkweEE0RTRBQUQ5LCAweDc5QTEwMDYxLCAw
eDFCODM4OTU4LCAweEM2QzYyM0UwLCAweERGQzY5QjJBLCAweDAyODMzMTkyLCAweDYwQTFCOEFC
LCAweEJERTQxMjEzLAorCTB4QkJDNDc4MDIsIDB4NjY4MUQyQkEsIDB4MDRBMzVCODMsIDB4RDlF
NkYxM0IsIDB4QzBFNjQ5RjEsIDB4MURBM0UzNDksIDB4N0Y4MTZBNzAsIDB4QTJDNEMwQzgsCisJ
MHg0RDgwMUJFNCwgMHg5MEM1QjE1QywgMHhGMkU3Mzg2NSwgMHgyRkEyOTJERCwgMHgzNkEyMkEx
NywgMHhFQkU3ODBBRiwgMHg4OUM1MDk5NiwgMHg1NDgwQTMyRSwKKwkweDg1ODVEREI0LCAweDU4
QzA3NzBDLCAweDNBRTJGRTM1LCAweEU3QTc1NDhELCAweEZFQTdFQzQ3LCAweDIzRTI0NkZGLCAw
eDQxQzBDRkM2LCAweDlDODU2NTdFLAorCTB4NzNDMUJFNTIsIDB4QUU4NDE0RUEsIDB4Q0NBNjlE
RDMsIDB4MTFFMzM3NkIsIDB4MDhFMzhGQTEsIDB4RDVBNjI1MTksIDB4Qjc4NEFDMjAsIDB4NkFD
MTA2OTgsCisJMHg2Q0UxNkM4OSwgMHhCMUE0QzYzMSwgMHhEMzg2NEYwOCwgMHgwRUMzRTVCMCwg
MHgxN0MzNUQ3QSwgMHhDQTg2RjdDMiwgMHhBOEE0N0VGQiwgMHg3NUUxRDQ0MywKKwkweDlBQTUw
RjZGLCAweDQ3RTBBNUQ3LCAweDI1QzIyQ0VFLCAweEY4ODc4NjU2LCAweEUxODczRTlDLCAweDND
QzI5NDI0LCAweDVFRTAxRDFELCAweDgzQTVCN0E1LAorCTB4RjkwNjk2RDgsIDB4MjQ0MzNDNjAs
IDB4NDY2MUI1NTksIDB4OUIyNDFGRTEsIDB4ODIyNEE3MkIsIDB4NUY2MTBEOTMsIDB4M0Q0Mzg0
QUEsIDB4RTAwNjJFMTIsCisJMHgwRjQyRjUzRSwgMHhEMjA3NUY4NiwgMHhCMDI1RDZCRiwgMHg2
RDYwN0MwNywgMHg3NDYwQzRDRCwgMHhBOTI1NkU3NSwgMHhDQjA3RTc0QywgMHgxNjQyNERGNCwK
KwkweDEwNjIyN0U1LCAweENEMjc4RDVELCAweEFGMDUwNDY0LCAweDcyNDBBRURDLCAweDZCNDAx
NjE2LCAweEI2MDVCQ0FFLCAweEQ0MjczNTk3LCAweDA5NjI5RjJGLAorCTB4RTYyNjQ0MDMsIDB4
M0I2M0VFQkIsIDB4NTk0MTY3ODIsIDB4ODQwNENEM0EsIDB4OUQwNDc1RjAsIDB4NDA0MURGNDgs
IDB4MjI2MzU2NzEsIDB4RkYyNkZDQzksCisJMHgyRTIzODI1MywgMHhGMzY2MjhFQiwgMHg5MTQ0
QTFEMiwgMHg0QzAxMEI2QSwgMHg1NTAxQjNBMCwgMHg4ODQ0MTkxOCwgMHhFQTY2OTAyMSwgMHgz
NzIzM0E5OSwKKwkweEQ4NjdFMUI1LCAweDA1MjI0QjBELCAweDY3MDBDMjM0LCAweEJBNDU2ODhD
LCAweEEzNDVEMDQ2LCAweDdFMDA3QUZFLCAweDFDMjJGM0M3LCAweEMxNjc1OTdGLAorCTB4Qzc0
NzMzNkUsIDB4MUEwMjk5RDYsIDB4NzgyMDEwRUYsIDB4QTU2NUJBNTcsIDB4QkM2NTAyOUQsIDB4
NjEyMEE4MjUsIDB4MDMwMjIxMUMsIDB4REU0NzhCQTQsCisJMHgzMTAzNTA4OCwgMHhFQzQ2RkEz
MCwgMHg4RTY0NzMwOSwgMHg1MzIxRDlCMSwgMHg0QTIxNjE3QiwgMHg5NzY0Q0JDMywgMHhGNTQ2
NDJGQSwgMHgyODAzRTg0MgorfTsKKworLyoKKyAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJs
ZSBjcmNfdGFibGVpbDhfbzU2CisgKi8KKworCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyBs
b29rdXAgdGFibGUgd2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQorICogZm9s
bG93aW5nIG1vZGVsIHBhcmFtZXRlcnM6CisgKgorICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAu
Li4uLi4uLi4uLi4uLi4uLiAweDFFREM2RjQxCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5n
dGggPSAuLi4uLi4uLi4uIDMyIGJpdHMKKyAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4u
Li4uLi4uLi4uLi4gVFJVRQorICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4u
Li4uLiAzMiBiaXRzCisgKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4u
IDggc2xpY2VzCisgKiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDgg
OCA4IDggOCA4IDggOAorICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4u
LiAuXAorICogRmlsZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90
YWJsZXMuYworICovCisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9v
NjRbMjU2XSA9Cit7CisJMHgwMDAwMDAwMCwgMHgzODExNkZBQywgMHg3MDIyREY1OCwgMHg0ODMz
QjBGNCwgMHhFMDQ1QkVCMCwgMHhEODU0RDExQywgMHg5MDY3NjFFOCwgMHhBODc2MEU0NCwKKwkw
eEM1NjcwQjkxLCAweEZENzY2NDNELCAweEI1NDVENEM5LCAweDhENTRCQjY1LCAweDI1MjJCNTIx
LCAweDFEMzNEQThELCAweDU1MDA2QTc5LCAweDZEMTEwNUQ1LAorCTB4OEYyMjYxRDMsIDB4Qjcz
MzBFN0YsIDB4RkYwMEJFOEIsIDB4QzcxMUQxMjcsIDB4NkY2N0RGNjMsIDB4NTc3NkIwQ0YsIDB4
MUY0NTAwM0IsIDB4Mjc1NDZGOTcsCisJMHg0QTQ1NkE0MiwgMHg3MjU0MDVFRSwgMHgzQTY3QjUx
QSwgMHgwMjc2REFCNiwgMHhBQTAwRDRGMiwgMHg5MjExQkI1RSwgMHhEQTIyMEJBQSwgMHhFMjMz
NjQwNiwKKwkweDFCQThCNTU3LCAweDIzQjlEQUZCLCAweDZCOEE2QTBGLCAweDUzOUIwNUEzLCAw
eEZCRUQwQkU3LCAweEMzRkM2NDRCLCAweDhCQ0ZENEJGLCAweEIzREVCQjEzLAorCTB4REVDRkJF
QzYsIDB4RTZERUQxNkEsIDB4QUVFRDYxOUUsIDB4OTZGQzBFMzIsIDB4M0U4QTAwNzYsIDB4MDY5
QjZGREEsIDB4NEVBOERGMkUsIDB4NzZCOUIwODIsCisJMHg5NDhBRDQ4NCwgMHhBQzlCQkIyOCwg
MHhFNEE4MEJEQywgMHhEQ0I5NjQ3MCwgMHg3NENGNkEzNCwgMHg0Q0RFMDU5OCwgMHgwNEVEQjU2
QywgMHgzQ0ZDREFDMCwKKwkweDUxRURERjE1LCAweDY5RkNCMEI5LCAweDIxQ0YwMDRELCAweDE5
REU2RkUxLCAweEIxQTg2MUE1LCAweDg5QjkwRTA5LCAweEMxOEFCRUZELCAweEY5OUJEMTUxLAor
CTB4Mzc1MTZBQUUsIDB4MEY0MDA1MDIsIDB4NDc3M0I1RjYsIDB4N0Y2MkRBNUEsIDB4RDcxNEQ0
MUUsIDB4RUYwNUJCQjIsIDB4QTczNjBCNDYsIDB4OUYyNzY0RUEsCisJMHhGMjM2NjEzRiwgMHhD
QTI3MEU5MywgMHg4MjE0QkU2NywgMHhCQTA1RDFDQiwgMHgxMjczREY4RiwgMHgyQTYyQjAyMywg
MHg2MjUxMDBENywgMHg1QTQwNkY3QiwKKwkweEI4NzMwQjdELCAweDgwNjI2NEQxLCAweEM4NTFE
NDI1LCAweEYwNDBCQjg5LCAweDU4MzZCNUNELCAweDYwMjdEQTYxLCAweDI4MTQ2QTk1LCAweDEw
MDUwNTM5LAorCTB4N0QxNDAwRUMsIDB4NDUwNTZGNDAsIDB4MEQzNkRGQjQsIDB4MzUyN0IwMTgs
IDB4OUQ1MUJFNUMsIDB4QTU0MEQxRjAsIDB4RUQ3MzYxMDQsIDB4RDU2MjBFQTgsCisJMHgyQ0Y5
REZGOSwgMHgxNEU4QjA1NSwgMHg1Q0RCMDBBMSwgMHg2NENBNkYwRCwgMHhDQ0JDNjE0OSwgMHhG
NEFEMEVFNSwgMHhCQzlFQkUxMSwgMHg4NDhGRDFCRCwKKwkweEU5OUVENDY4LCAweEQxOEZCQkM0
LCAweDk5QkMwQjMwLCAweEExQUQ2NDlDLCAweDA5REI2QUQ4LCAweDMxQ0EwNTc0LCAweDc5RjlC
NTgwLCAweDQxRThEQTJDLAorCTB4QTNEQkJFMkEsIDB4OUJDQUQxODYsIDB4RDNGOTYxNzIsIDB4
RUJFODBFREUsIDB4NDM5RTAwOUEsIDB4N0I4RjZGMzYsIDB4MzNCQ0RGQzIsIDB4MEJBREIwNkUs
CisJMHg2NkJDQjVCQiwgMHg1RUFEREExNywgMHgxNjlFNkFFMywgMHgyRThGMDU0RiwgMHg4NkY5
MEIwQiwgMHhCRUU4NjRBNywgMHhGNkRCRDQ1MywgMHhDRUNBQkJGRiwKKwkweDZFQTJENTVDLCAw
eDU2QjNCQUYwLCAweDFFODAwQTA0LCAweDI2OTE2NUE4LCAweDhFRTc2QkVDLCAweEI2RjYwNDQw
LCAweEZFQzVCNEI0LCAweEM2RDREQjE4LAorCTB4QUJDNURFQ0QsIDB4OTNENEIxNjEsIDB4REJF
NzAxOTUsIDB4RTNGNjZFMzksIDB4NEI4MDYwN0QsIDB4NzM5MTBGRDEsIDB4M0JBMkJGMjUsIDB4
MDNCM0QwODksCisJMHhFMTgwQjQ4RiwgMHhEOTkxREIyMywgMHg5MUEyNkJENywgMHhBOUIzMDQ3
QiwgMHgwMUM1MEEzRiwgMHgzOUQ0NjU5MywgMHg3MUU3RDU2NywgMHg0OUY2QkFDQiwKKwkweDI0
RTdCRjFFLCAweDFDRjZEMEIyLCAweDU0QzU2MDQ2LCAweDZDRDQwRkVBLCAweEM0QTIwMUFFLCAw
eEZDQjM2RTAyLCAweEI0ODBERUY2LCAweDhDOTFCMTVBLAorCTB4NzUwQTYwMEIsIDB4NEQxQjBG
QTcsIDB4MDUyOEJGNTMsIDB4M0QzOUQwRkYsIDB4OTU0RkRFQkIsIDB4QUQ1RUIxMTcsIDB4RTU2
RDAxRTMsIDB4REQ3QzZFNEYsCisJMHhCMDZENkI5QSwgMHg4ODdDMDQzNiwgMHhDMDRGQjRDMiwg
MHhGODVFREI2RSwgMHg1MDI4RDUyQSwgMHg2ODM5QkE4NiwgMHgyMDBBMEE3MiwgMHgxODFCNjVE
RSwKKwkweEZBMjgwMUQ4LCAweEMyMzk2RTc0LCAweDhBMEFERTgwLCAweEIyMUJCMTJDLCAweDFB
NkRCRjY4LCAweDIyN0NEMEM0LCAweDZBNEY2MDMwLCAweDUyNUUwRjlDLAorCTB4M0Y0RjBBNDks
IDB4MDc1RTY1RTUsIDB4NEY2REQ1MTEsIDB4Nzc3Q0JBQkQsIDB4REYwQUI0RjksIDB4RTcxQkRC
NTUsIDB4QUYyODZCQTEsIDB4OTczOTA0MEQsCisJMHg1OUYzQkZGMiwgMHg2MUUyRDA1RSwgMHgy
OUQxNjBBQSwgMHgxMUMwMEYwNiwgMHhCOUI2MDE0MiwgMHg4MUE3NkVFRSwgMHhDOTk0REUxQSwg
MHhGMTg1QjFCNiwKKwkweDlDOTRCNDYzLCAweEE0ODVEQkNGLCAweEVDQjY2QjNCLCAweEQ0QTcw
NDk3LCAweDdDRDEwQUQzLCAweDQ0QzA2NTdGLCAweDBDRjNENThCLCAweDM0RTJCQTI3LAorCTB4
RDZEMURFMjEsIDB4RUVDMEIxOEQsIDB4QTZGMzAxNzksIDB4OUVFMjZFRDUsIDB4MzY5NDYwOTEs
IDB4MEU4NTBGM0QsIDB4NDZCNkJGQzksIDB4N0VBN0QwNjUsCisJMHgxM0I2RDVCMCwgMHgyQkE3
QkExQywgMHg2Mzk0MEFFOCwgMHg1Qjg1NjU0NCwgMHhGM0YzNkIwMCwgMHhDQkUyMDRBQywgMHg4
M0QxQjQ1OCwgMHhCQkMwREJGNCwKKwkweDQyNUIwQUE1LCAweDdBNEE2NTA5LCAweDMyNzlENUZE
LCAweDBBNjhCQTUxLCAweEEyMUVCNDE1LCAweDlBMEZEQkI5LCAweEQyM0M2QjRELCAweEVBMkQw
NEUxLAorCTB4ODczQzAxMzQsIDB4QkYyRDZFOTgsIDB4RjcxRURFNkMsIDB4Q0YwRkIxQzAsIDB4
Njc3OUJGODQsIDB4NUY2OEQwMjgsIDB4MTc1QjYwREMsIDB4MkY0QTBGNzAsCisJMHhDRDc5NkI3
NiwgMHhGNTY4MDREQSwgMHhCRDVCQjQyRSwgMHg4NTRBREI4MiwgMHgyRDNDRDVDNiwgMHgxNTJE
QkE2QSwgMHg1RDFFMEE5RSwgMHg2NTBGNjUzMiwKKwkweDA4MUU2MEU3LCAweDMwMEYwRjRCLCAw
eDc4M0NCRkJGLCAweDQwMkREMDEzLCAweEU4NUJERTU3LCAweEQwNEFCMUZCLCAweDk4NzkwMTBG
LCAweEEwNjg2RUEzCit9OworCisvKgorICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNy
Y190YWJsZWlsOF9vNjQKKyAqLworCisKKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgQ1JDIGxvb2t1
cCB0YWJsZSB3YXMgZ2VuZXJhdGVkIGF1dG9tYWdpY2FsbHkgdXNpbmcgdGhlCisgKiBmb2xsb3dp
bmcgbW9kZWwgcGFyYW1ldGVyczoKKyAqCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCA9IC4uLi4u
Li4uLi4uLi4uLi4uIDB4MUVEQzZGNDEKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsIExlbmd0aCA9
IC4uLi4uLi4uLi4gMzIgYml0cworICogUmVmbGVjdGVkIEJpdHMgPSAuLi4uLi4uLi4uLi4uLi4u
Li4uLi4uLiBUUlVFCisgKiBUYWJsZSBHZW5lcmF0aW9uIE9mZnNldCA9IC4uLi4uLi4uLi4uLi4u
IDMyIGJpdHMKKyAqIE51bWJlciBvZiBTbGljZXMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCBz
bGljZXMKKyAqIFNsaWNlIExlbmd0aHMgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOCA4IDgg
OCA4IDggOCA4CisgKiBEaXJlY3RvcnkgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC5c
CisgKiBGaWxlIE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDh4MjU2X3RhYmxl
cy5jCisgKi8KKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHNjdHBfY3JjX3RhYmxlaWw4X283Mlsy
NTZdID0KK3sKKwkweDAwMDAwMDAwLCAweEVGMzA2QjE5LCAweERCOENBMEMzLCAweDM0QkNDQkRB
LCAweEIyRjUzNzc3LCAweDVEQzU1QzZFLCAweDY5Nzk5N0I0LCAweDg2NDlGQ0FELAorCTB4NjAw
NjE4MUYsIDB4OEYzNjczMDYsIDB4QkI4QUI4REMsIDB4NTRCQUQzQzUsIDB4RDJGMzJGNjgsIDB4
M0RDMzQ0NzEsIDB4MDk3RjhGQUIsIDB4RTY0RkU0QjIsCisJMHhDMDBDMzAzRSwgMHgyRjNDNUIy
NywgMHgxQjgwOTBGRCwgMHhGNEIwRkJFNCwgMHg3MkY5MDc0OSwgMHg5REM5NkM1MCwgMHhBOTc1
QTc4QSwgMHg0NjQ1Q0M5MywKKwkweEEwMEEyODIxLCAweDRGM0E0MzM4LCAweDdCODY4OEUyLCAw
eDk0QjZFM0ZCLCAweDEyRkYxRjU2LCAweEZEQ0Y3NDRGLCAweEM5NzNCRjk1LCAweDI2NDNENDhD
LAorCTB4ODVGNDE2OEQsIDB4NkFDNDdEOTQsIDB4NUU3OEI2NEUsIDB4QjE0OERENTcsIDB4Mzcw
MTIxRkEsIDB4RDgzMTRBRTMsIDB4RUM4RDgxMzksIDB4MDNCREVBMjAsCisJMHhFNUYyMEU5Miwg
MHgwQUMyNjU4QiwgMHgzRTdFQUU1MSwgMHhEMTRFQzU0OCwgMHg1NzA3MzlFNSwgMHhCODM3NTJG
QywgMHg4QzhCOTkyNiwgMHg2M0JCRjIzRiwKKwkweDQ1RjgyNkIzLCAweEFBQzg0REFBLCAweDlF
NzQ4NjcwLCAweDcxNDRFRDY5LCAweEY3MEQxMUM0LCAweDE4M0Q3QURELCAweDJDODFCMTA3LCAw
eEMzQjFEQTFFLAorCTB4MjVGRTNFQUMsIDB4Q0FDRTU1QjUsIDB4RkU3MjlFNkYsIDB4MTE0MkY1
NzYsIDB4OTcwQjA5REIsIDB4NzgzQjYyQzIsIDB4NEM4N0E5MTgsIDB4QTNCN0MyMDEsCisJMHgw
RTA0NUJFQiwgMHhFMTM0MzBGMiwgMHhENTg4RkIyOCwgMHgzQUI4OTAzMSwgMHhCQ0YxNkM5Qywg
MHg1M0MxMDc4NSwgMHg2NzdEQ0M1RiwgMHg4ODREQTc0NiwKKwkweDZFMDI0M0Y0LCAweDgxMzIy
OEVELCAweEI1OEVFMzM3LCAweDVBQkU4ODJFLCAweERDRjc3NDgzLCAweDMzQzcxRjlBLCAweDA3
N0JENDQwLCAweEU4NEJCRjU5LAorCTB4Q0UwODZCRDUsIDB4MjEzODAwQ0MsIDB4MTU4NENCMTYs
IDB4RkFCNEEwMEYsIDB4N0NGRDVDQTIsIDB4OTNDRDM3QkIsIDB4QTc3MUZDNjEsIDB4NDg0MTk3
NzgsCisJMHhBRTBFNzNDQSwgMHg0MTNFMThEMywgMHg3NTgyRDMwOSwgMHg5QUIyQjgxMCwgMHgx
Q0ZCNDRCRCwgMHhGM0NCMkZBNCwgMHhDNzc3RTQ3RSwgMHgyODQ3OEY2NywKKwkweDhCRjA0RDY2
LCAweDY0QzAyNjdGLCAweDUwN0NFREE1LCAweEJGNEM4NkJDLCAweDM5MDU3QTExLCAweEQ2MzUx
MTA4LCAweEUyODlEQUQyLCAweDBEQjlCMUNCLAorCTB4RUJGNjU1NzksIDB4MDRDNjNFNjAsIDB4
MzA3QUY1QkEsIDB4REY0QTlFQTMsIDB4NTkwMzYyMEUsIDB4QjYzMzA5MTcsIDB4ODI4RkMyQ0Qs
IDB4NkRCRkE5RDQsCisJMHg0QkZDN0Q1OCwgMHhBNENDMTY0MSwgMHg5MDcwREQ5QiwgMHg3RjQw
QjY4MiwgMHhGOTA5NEEyRiwgMHgxNjM5MjEzNiwgMHgyMjg1RUFFQywgMHhDREI1ODFGNSwKKwkw
eDJCRkE2NTQ3LCAweEM0Q0EwRTVFLCAweEYwNzZDNTg0LCAweDFGNDZBRTlELCAweDk5MEY1MjMw
LCAweDc2M0YzOTI5LCAweDQyODNGMkYzLCAweEFEQjM5OUVBLAorCTB4MUMwOEI3RDYsIDB4RjMz
OERDQ0YsIDB4Qzc4NDE3MTUsIDB4MjhCNDdDMEMsIDB4QUVGRDgwQTEsIDB4NDFDREVCQjgsIDB4
NzU3MTIwNjIsIDB4OUE0MTRCN0IsCisJMHg3QzBFQUZDOSwgMHg5MzNFQzREMCwgMHhBNzgyMEYw
QSwgMHg0OEIyNjQxMywgMHhDRUZCOThCRSwgMHgyMUNCRjNBNywgMHgxNTc3Mzg3RCwgMHhGQTQ3
NTM2NCwKKwkweERDMDQ4N0U4LCAweDMzMzRFQ0YxLCAweDA3ODgyNzJCLCAweEU4Qjg0QzMyLCAw
eDZFRjFCMDlGLCAweDgxQzFEQjg2LCAweEI1N0QxMDVDLCAweDVBNEQ3QjQ1LAorCTB4QkMwMjlG
RjcsIDB4NTMzMkY0RUUsIDB4Njc4RTNGMzQsIDB4ODhCRTU0MkQsIDB4MEVGN0E4ODAsIDB4RTFD
N0MzOTksIDB4RDU3QjA4NDMsIDB4M0E0QjYzNUEsCisJMHg5OUZDQTE1QiwgMHg3NkNDQ0E0Miwg
MHg0MjcwMDE5OCwgMHhBRDQwNkE4MSwgMHgyQjA5OTYyQywgMHhDNDM5RkQzNSwgMHhGMDg1MzZF
RiwgMHgxRkI1NURGNiwKKwkweEY5RkFCOTQ0LCAweDE2Q0FEMjVELCAweDIyNzYxOTg3LCAweENE
NDY3MjlFLCAweDRCMEY4RTMzLCAweEE0M0ZFNTJBLCAweDkwODMyRUYwLCAweDdGQjM0NUU5LAor
CTB4NTlGMDkxNjUsIDB4QjZDMEZBN0MsIDB4ODI3QzMxQTYsIDB4NkQ0QzVBQkYsIDB4RUIwNUE2
MTIsIDB4MDQzNUNEMEIsIDB4MzA4OTA2RDEsIDB4REZCOTZEQzgsCisJMHgzOUY2ODk3QSwgMHhE
NkM2RTI2MywgMHhFMjdBMjlCOSwgMHgwRDRBNDJBMCwgMHg4QjAzQkUwRCwgMHg2NDMzRDUxNCwg
MHg1MDhGMUVDRSwgMHhCRkJGNzVENywKKwkweDEyMENFQzNELCAweEZEM0M4NzI0LCAweEM5ODA0
Q0ZFLCAweDI2QjAyN0U3LCAweEEwRjlEQjRBLCAweDRGQzlCMDUzLCAweDdCNzU3Qjg5LCAweDk0
NDUxMDkwLAorCTB4NzIwQUY0MjIsIDB4OUQzQTlGM0IsIDB4QTk4NjU0RTEsIDB4NDZCNjNGRjgs
IDB4QzBGRkMzNTUsIDB4MkZDRkE4NEMsIDB4MUI3MzYzOTYsIDB4RjQ0MzA4OEYsCisJMHhEMjAw
REMwMywgMHgzRDMwQjcxQSwgMHgwOThDN0NDMCwgMHhFNkJDMTdEOSwgMHg2MEY1RUI3NCwgMHg4
RkM1ODA2RCwgMHhCQjc5NEJCNywgMHg1NDQ5MjBBRSwKKwkweEIyMDZDNDFDLCAweDVEMzZBRjA1
LCAweDY5OEE2NERGLCAweDg2QkEwRkM2LCAweDAwRjNGMzZCLCAweEVGQzM5ODcyLCAweERCN0Y1
M0E4LCAweDM0NEYzOEIxLAorCTB4OTdGOEZBQjAsIDB4NzhDODkxQTksIDB4NEM3NDVBNzMsIDB4
QTM0NDMxNkEsIDB4MjUwRENEQzcsIDB4Q0EzREE2REUsIDB4RkU4MTZEMDQsIDB4MTFCMTA2MUQs
CisJMHhGN0ZFRTJBRiwgMHgxOENFODlCNiwgMHgyQzcyNDI2QywgMHhDMzQyMjk3NSwgMHg0NTBC
RDVEOCwgMHhBQTNCQkVDMSwgMHg5RTg3NzUxQiwgMHg3MUI3MUUwMiwKKwkweDU3RjRDQThFLCAw
eEI4QzRBMTk3LCAweDhDNzg2QTRELCAweDYzNDgwMTU0LCAweEU1MDFGREY5LCAweDBBMzE5NkUw
LCAweDNFOEQ1RDNBLCAweEQxQkQzNjIzLAorCTB4MzdGMkQyOTEsIDB4RDhDMkI5ODgsIDB4RUM3
RTcyNTIsIDB4MDM0RTE5NEIsIDB4ODUwN0U1RTYsIDB4NkEzNzhFRkYsIDB4NUU4QjQ1MjUsIDB4
QjFCQjJFM0MKK307CisKKy8qCisgKiBlbmQgb2YgdGhlIENSQyBsb29rdXAgdGFibGUgY3JjX3Rh
YmxlaWw4X283MgorICovCisKKworCisvKgorICogVGhlIGZvbGxvd2luZyBDUkMgbG9va3VwIHRh
YmxlIHdhcyBnZW5lcmF0ZWQgYXV0b21hZ2ljYWxseSB1c2luZyB0aGUKKyAqIGZvbGxvd2luZyBt
b2RlbCBwYXJhbWV0ZXJzOgorICoKKyAqIEdlbmVyYXRvciBQb2x5bm9taWFsID0gLi4uLi4uLi4u
Li4uLi4uLi4gMHgxRURDNkY0MQorICogR2VuZXJhdG9yIFBvbHlub21pYWwgTGVuZ3RoID0gLi4u
Li4uLi4uLiAzMiBiaXRzCisgKiBSZWZsZWN0ZWQgQml0cyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4u
Li4uIFRSVUUKKyAqIFRhYmxlIEdlbmVyYXRpb24gT2Zmc2V0ID0gLi4uLi4uLi4uLi4uLi4gMzIg
Yml0cworICogTnVtYmVyIG9mIFNsaWNlcyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IHNsaWNl
cworICogU2xpY2UgTGVuZ3RocyA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4IDggOCA4IDgg
OCA4IDgKKyAqIERpcmVjdG9yeSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gLlwKKyAq
IEZpbGUgTmFtZSA9IC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gOHgyNTZfdGFibGVzLmMK
KyAqLworCitzdGF0aWMgY29uc3QgdWludDMyX3Qgc2N0cF9jcmNfdGFibGVpbDhfbzgwWzI1Nl0g
PQoreworCTB4MDAwMDAwMDAsIDB4NjgwMzJDQzgsIDB4RDAwNjU5OTAsIDB4QjgwNTc1NTgsIDB4
QTVFMEM1RDEsIDB4Q0RFM0U5MTksIDB4NzVFNjlDNDEsIDB4MURFNUIwODksCisJMHg0RTJERkQ1
MywgMHgyNjJFRDE5QiwgMHg5RTJCQTRDMywgMHhGNjI4ODgwQiwgMHhFQkNEMzg4MiwgMHg4M0NF
MTQ0QSwgMHgzQkNCNjExMiwgMHg1M0M4NEREQSwKKwkweDlDNUJGQUE2LCAweEY0NThENjZFLCAw
eDRDNURBMzM2LCAweDI0NUU4RkZFLCAweDM5QkIzRjc3LCAweDUxQjgxM0JGLCAweEU5QkQ2NkU3
LCAweDgxQkU0QTJGLAorCTB4RDI3NjA3RjUsIDB4QkE3NTJCM0QsIDB4MDI3MDVFNjUsIDB4NkE3
MzcyQUQsIDB4Nzc5NkMyMjQsIDB4MUY5NUVFRUMsIDB4QTc5MDlCQjQsIDB4Q0Y5M0I3N0MsCisJ
MHgzRDVCODNCRCwgMHg1NTU4QUY3NSwgMHhFRDVEREEyRCwgMHg4NTVFRjZFNSwgMHg5OEJCNDY2
QywgMHhGMEI4NkFBNCwgMHg0OEJEMUZGQywgMHgyMEJFMzMzNCwKKwkweDczNzY3RUVFLCAweDFC
NzU1MjI2LCAweEEzNzAyNzdFLCAweENCNzMwQkI2LCAweEQ2OTZCQjNGLCAweEJFOTU5N0Y3LCAw
eDA2OTBFMkFGLCAweDZFOTNDRTY3LAorCTB4QTEwMDc5MUIsIDB4QzkwMzU1RDMsIDB4NzEwNjIw
OEIsIDB4MTkwNTBDNDMsIDB4MDRFMEJDQ0EsIDB4NkNFMzkwMDIsIDB4RDRFNkU1NUEsIDB4QkNF
NUM5OTIsCisJMHhFRjJEODQ0OCwgMHg4NzJFQTg4MCwgMHgzRjJCREREOCwgMHg1NzI4RjExMCwg
MHg0QUNENDE5OSwgMHgyMkNFNkQ1MSwgMHg5QUNCMTgwOSwgMHhGMkM4MzRDMSwKKwkweDdBQjcw
NzdBLCAweDEyQjQyQkIyLCAweEFBQjE1RUVBLCAweEMyQjI3MjIyLCAweERGNTdDMkFCLCAweEI3
NTRFRTYzLCAweDBGNTE5QjNCLCAweDY3NTJCN0YzLAorCTB4MzQ5QUZBMjksIDB4NUM5OUQ2RTEs
IDB4RTQ5Q0EzQjksIDB4OEM5RjhGNzEsIDB4OTE3QTNGRjgsIDB4Rjk3OTEzMzAsIDB4NDE3QzY2
NjgsIDB4Mjk3RjRBQTAsCisJMHhFNkVDRkREQywgMHg4RUVGRDExNCwgMHgzNkVBQTQ0QywgMHg1
RUU5ODg4NCwgMHg0MzBDMzgwRCwgMHgyQjBGMTRDNSwgMHg5MzBBNjE5RCwgMHhGQjA5NEQ1NSwK
KwkweEE4QzEwMDhGLCAweEMwQzIyQzQ3LCAweDc4Qzc1OTFGLCAweDEwQzQ3NUQ3LCAweDBEMjFD
NTVFLCAweDY1MjJFOTk2LCAweEREMjc5Q0NFLCAweEI1MjRCMDA2LAorCTB4NDdFQzg0QzcsIDB4
MkZFRkE4MEYsIDB4OTdFQURENTcsIDB4RkZFOUYxOUYsIDB4RTIwQzQxMTYsIDB4OEEwRjZEREUs
IDB4MzIwQTE4ODYsIDB4NUEwOTM0NEUsCisJMHgwOUMxNzk5NCwgMHg2MUMyNTU1QywgMHhEOUM3
MjAwNCwgMHhCMUM0MENDQywgMHhBQzIxQkM0NSwgMHhDNDIyOTA4RCwgMHg3QzI3RTVENSwgMHgx
NDI0QzkxRCwKKwkweERCQjc3RTYxLCAweEIzQjQ1MkE5LCAweDBCQjEyN0YxLCAweDYzQjIwQjM5
LCAweDdFNTdCQkIwLCAweDE2NTQ5Nzc4LCAweEFFNTFFMjIwLCAweEM2NTJDRUU4LAorCTB4OTU5
QTgzMzIsIDB4RkQ5OUFGRkEsIDB4NDU5Q0RBQTIsIDB4MkQ5RkY2NkEsIDB4MzA3QTQ2RTMsIDB4
NTg3OTZBMkIsIDB4RTA3QzFGNzMsIDB4ODg3RjMzQkIsCisJMHhGNTZFMEVGNCwgMHg5RDZEMjIz
QywgMHgyNTY4NTc2NCwgMHg0RDZCN0JBQywgMHg1MDhFQ0IyNSwgMHgzODhERTdFRCwgMHg4MDg4
OTJCNSwgMHhFODhCQkU3RCwKKwkweEJCNDNGM0E3LCAweEQzNDBERjZGLCAweDZCNDVBQTM3LCAw
eDAzNDY4NkZGLCAweDFFQTMzNjc2LCAweDc2QTAxQUJFLCAweENFQTU2RkU2LCAweEE2QTY0MzJF
LAorCTB4NjkzNUY0NTIsIDB4MDEzNkQ4OUEsIDB4QjkzM0FEQzIsIDB4RDEzMDgxMEEsIDB4Q0NE
NTMxODMsIDB4QTRENjFENEIsIDB4MUNEMzY4MTMsIDB4NzREMDQ0REIsCisJMHgyNzE4MDkwMSwg
MHg0RjFCMjVDOSwgMHhGNzFFNTA5MSwgMHg5RjFEN0M1OSwgMHg4MkY4Q0NEMCwgMHhFQUZCRTAx
OCwgMHg1MkZFOTU0MCwgMHgzQUZEQjk4OCwKKwkweEM4MzU4RDQ5LCAweEEwMzZBMTgxLCAweDE4
MzNENEQ5LCAweDcwMzBGODExLCAweDZERDU0ODk4LCAweDA1RDY2NDUwLCAweEJERDMxMTA4LCAw
eEQ1RDAzREMwLAorCTB4ODYxODcwMUEsIDB4RUUxQjVDRDIsIDB4NTYxRTI5OEEsIDB4M0UxRDA1
NDIsIDB4MjNGOEI1Q0IsIDB4NEJGQjk5MDMsIDB4RjNGRUVDNUIsIDB4OUJGREMwOTMsCisJMHg1
NDZFNzdFRiwgMHgzQzZENUIyNywgMHg4NDY4MkU3RiwgMHhFQzZCMDJCNywgMHhGMThFQjIzRSwg
MHg5OThEOUVGNiwgMHgyMTg4RUJBRSwgMHg0OThCQzc2NiwKKwkweDFBNDM4QUJDLCAweDcyNDBB
Njc0LCAweENBNDVEMzJDLCAweEEyNDZGRkU0LCAweEJGQTM0RjZELCAweEQ3QTA2M0E1LCAweDZG
QTUxNkZELCAweDA3QTYzQTM1LAorCTB4OEZEOTA5OEUsIDB4RTdEQTI1NDYsIDB4NUZERjUwMUUs
IDB4MzdEQzdDRDYsIDB4MkEzOUNDNUYsIDB4NDIzQUUwOTcsIDB4RkEzRjk1Q0YsIDB4OTIzQ0I5
MDcsCisJMHhDMUY0RjRERCwgMHhBOUY3RDgxNSwgMHgxMUYyQUQ0RCwgMHg3OUYxODE4NSwgMHg2
NDE0MzEwQywgMHgwQzE3MURDNCwgMHhCNDEyNjg5QywgMHhEQzExNDQ1NCwKKwkweDEzODJGMzI4
LCAweDdCODFERkUwLCAweEMzODRBQUI4LCAweEFCODc4NjcwLCAweEI2NjIzNkY5LCAweERFNjEx
QTMxLCAweDY2NjQ2RjY5LCAweDBFNjc0M0ExLAorCTB4NURBRjBFN0IsIDB4MzVBQzIyQjMsIDB4
OERBOTU3RUIsIDB4RTVBQTdCMjMsIDB4Rjg0RkNCQUEsIDB4OTA0Q0U3NjIsIDB4Mjg0OTkyM0Es
IDB4NDA0QUJFRjIsCisJMHhCMjgyOEEzMywgMHhEQTgxQTZGQiwgMHg2Mjg0RDNBMywgMHgwQTg3
RkY2QiwgMHgxNzYyNEZFMiwgMHg3RjYxNjMyQSwgMHhDNzY0MTY3MiwgMHhBRjY3M0FCQSwKKwkw
eEZDQUY3NzYwLCAweDk0QUM1QkE4LCAweDJDQTkyRUYwLCAweDQ0QUEwMjM4LCAweDU5NEZCMkIx
LCAweDMxNEM5RTc5LCAweDg5NDlFQjIxLCAweEUxNEFDN0U5LAorCTB4MkVEOTcwOTUsIDB4NDZE
QTVDNUQsIDB4RkVERjI5MDUsIDB4OTZEQzA1Q0QsIDB4OEIzOUI1NDQsIDB4RTMzQTk5OEMsIDB4
NUIzRkVDRDQsIDB4MzMzQ0MwMUMsCisJMHg2MEY0OERDNiwgMHgwOEY3QTEwRSwgMHhCMEYyRDQ1
NiwgMHhEOEYxRjg5RSwgMHhDNTE0NDgxNywgMHhBRDE3NjRERiwgMHgxNTEyMTE4NywgMHg3RDEx
M0Q0RgorfTsKKworLyoKKyAqIGVuZCBvZiB0aGUgQ1JDIGxvb2t1cCB0YWJsZSBjcmNfdGFibGVp
bDhfbzgwCisgKi8KKworCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIENSQyBsb29rdXAgdGFibGUg
d2FzIGdlbmVyYXRlZCBhdXRvbWFnaWNhbGx5IHVzaW5nIHRoZQorICogZm9sbG93aW5nIG1vZGVs
IHBhcmFtZXRlcnM6CisgKgorICogR2VuZXJhdG9yIFBvbHlub21pYWwgPSAuLi4uLi4uLi4uLi4u
Li4uLiAweDFFREM2RjQxCisgKiBHZW5lcmF0b3IgUG9seW5vbWlhbCBMZW5ndGggPSAuLi4uLi4u
Li4uIDMyIGJpdHMKKyAqIFJlZmxlY3RlZCBCaXRzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4g
VFJVRQorICogVGFibGUgR2VuZXJhdGlvbiBPZmZzZXQgPSAuLi4uLi4uLi4uLi4uLiAzMiBiaXRz
CisgKiBOdW1iZXIgb2YgU2xpY2VzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggc2xpY2VzCisg
KiBTbGljZSBMZW5ndGhzID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDggOCA4IDggOCA4IDgg
OAorICogRGlyZWN0b3J5IE5hbWUgPSAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAuXAorICogRmls
ZSBOYW1lID0gLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiA4eDI1Nl90YWJsZXMuYworICov
CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY190YWJsZWlsOF9vODhbMjU2XSA9Cit7
CisJMHgwMDAwMDAwMCwgMHg0OTNDN0QyNywgMHg5Mjc4RkE0RSwgMHhEQjQ0ODc2OSwgMHgyMTFE
ODI2RCwgMHg2ODIxRkY0QSwgMHhCMzY1NzgyMywgMHhGQTU5MDUwNCwKKwkweDQyM0IwNERBLCAw
eDBCMDc3OUZELCAweEQwNDNGRTk0LCAweDk5N0Y4M0IzLCAweDYzMjY4NkI3LCAweDJBMUFGQjkw
LCAweEYxNUU3Q0Y5LCAweEI4NjIwMURFLAorCTB4ODQ3NjA5QjQsIDB4Q0Q0QTc0OTMsIDB4MTYw
RUYzRkEsIDB4NUYzMjhFREQsIDB4QTU2QjhCRDksIDB4RUM1N0Y2RkUsIDB4MzcxMzcxOTcsIDB4
N0UyRjBDQjAsCisJMHhDNjREMEQ2RSwgMHg4RjcxNzA0OSwgMHg1NDM1RjcyMCwgMHgxRDA5OEEw
NywgMHhFNzUwOEYwMywgMHhBRTZDRjIyNCwgMHg3NTI4NzU0RCwgMHgzQzE0MDg2QSwKKwkweDBE
MDA2NTk5LCAweDQ0M0MxOEJFLCAweDlGNzg5RkQ3LCAweEQ2NDRFMkYwLCAweDJDMURFN0Y0LCAw
eDY1MjE5QUQzLCAweEJFNjUxREJBLCAweEY3NTk2MDlELAorCTB4NEYzQjYxNDMsIDB4MDYwNzFD
NjQsIDB4REQ0MzlCMEQsIDB4OTQ3RkU2MkEsIDB4NkUyNkUzMkUsIDB4MjcxQTlFMDksIDB4RkM1
RTE5NjAsIDB4QjU2MjY0NDcsCisJMHg4OTc2NkMyRCwgMHhDMDRBMTEwQSwgMHgxQjBFOTY2Mywg
MHg1MjMyRUI0NCwgMHhBODZCRUU0MCwgMHhFMTU3OTM2NywgMHgzQTEzMTQwRSwgMHg3MzJGNjky
OSwKKwkweENCNEQ2OEY3LCAweDgyNzExNUQwLCAweDU5MzU5MkI5LCAweDEwMDlFRjlFLCAweEVB
NTBFQTlBLCAweEEzNkM5N0JELCAweDc4MjgxMEQ0LCAweDMxMTQ2REYzLAorCTB4MUEwMENCMzIs
IDB4NTMzQ0I2MTUsIDB4ODg3ODMxN0MsIDB4QzE0NDRDNUIsIDB4M0IxRDQ5NUYsIDB4NzIyMTM0
NzgsIDB4QTk2NUIzMTEsIDB4RTA1OUNFMzYsCisJMHg1ODNCQ0ZFOCwgMHgxMTA3QjJDRiwgMHhD
QTQzMzVBNiwgMHg4MzdGNDg4MSwgMHg3OTI2NEQ4NSwgMHgzMDFBMzBBMiwgMHhFQjVFQjdDQiwg
MHhBMjYyQ0FFQywKKwkweDlFNzZDMjg2LCAweEQ3NEFCRkExLCAweDBDMEUzOEM4LCAweDQ1MzI0
NUVGLCAweEJGNkI0MEVCLCAweEY2NTczRENDLCAweDJEMTNCQUE1LCAweDY0MkZDNzgyLAorCTB4
REM0REM2NUMsIDB4OTU3MUJCN0IsIDB4NEUzNTNDMTIsIDB4MDcwOTQxMzUsIDB4RkQ1MDQ0MzEs
IDB4QjQ2QzM5MTYsIDB4NkYyOEJFN0YsIDB4MjYxNEMzNTgsCisJMHgxNzAwQUVBQiwgMHg1RTND
RDM4QywgMHg4NTc4NTRFNSwgMHhDQzQ0MjlDMiwgMHgzNjFEMkNDNiwgMHg3RjIxNTFFMSwgMHhB
NDY1RDY4OCwgMHhFRDU5QUJBRiwKKwkweDU1M0JBQTcxLCAweDFDMDdENzU2LCAweEM3NDM1MDNG
LCAweDhFN0YyRDE4LCAweDc0MjYyODFDLCAweDNEMUE1NTNCLCAweEU2NUVEMjUyLCAweEFGNjJB
Rjc1LAorCTB4OTM3NkE3MUYsIDB4REE0QURBMzgsIDB4MDEwRTVENTEsIDB4NDgzMjIwNzYsIDB4
QjI2QjI1NzIsIDB4RkI1NzU4NTUsIDB4MjAxM0RGM0MsIDB4NjkyRkEyMUIsCisJMHhEMTREQTND
NSwgMHg5ODcxREVFMiwgMHg0MzM1NTk4QiwgMHgwQTA5MjRBQywgMHhGMDUwMjFBOCwgMHhCOTZD
NUM4RiwgMHg2MjI4REJFNiwgMHgyQjE0QTZDMSwKKwkweDM0MDE5NjY0LCAweDdEM0RFQjQzLCAw
eEE2Nzk2QzJBLCAweEVGNDUxMTBELCAweDE1MUMxNDA5LCAweDVDMjA2OTJFLCAweDg3NjRFRTQ3
LCAweENFNTg5MzYwLAorCTB4NzYzQTkyQkUsIDB4M0YwNkVGOTksIDB4RTQ0MjY4RjAsIDB4QUQ3
RTE1RDcsIDB4NTcyNzEwRDMsIDB4MUUxQjZERjQsIDB4QzU1RkVBOUQsIDB4OEM2Mzk3QkEsCisJ
MHhCMDc3OUZEMCwgMHhGOTRCRTJGNywgMHgyMjBGNjU5RSwgMHg2QjMzMThCOSwgMHg5MTZBMURC
RCwgMHhEODU2NjA5QSwgMHgwMzEyRTdGMywgMHg0QTJFOUFENCwKKwkweEYyNEM5QjBBLCAweEJC
NzBFNjJELCAweDYwMzQ2MTQ0LCAweDI5MDgxQzYzLCAweEQzNTExOTY3LCAweDlBNkQ2NDQwLCAw
eDQxMjlFMzI5LCAweDA4MTU5RTBFLAorCTB4MzkwMUYzRkQsIDB4NzAzRDhFREEsIDB4QUI3OTA5
QjMsIDB4RTI0NTc0OTQsIDB4MTgxQzcxOTAsIDB4NTEyMDBDQjcsIDB4OEE2NDhCREUsIDB4QzM1
OEY2RjksCisJMHg3QjNBRjcyNywgMHgzMjA2OEEwMCwgMHhFOTQyMEQ2OSwgMHhBMDdFNzA0RSwg
MHg1QTI3NzU0QSwgMHgxMzFCMDg2RCwgMHhDODVGOEYwNCwgMHg4MTYzRjIyMywKKwkweEJENzdG
QTQ5LCAweEY0NEI4NzZFLCAweDJGMEYwMDA3LCAweDY2MzM3RDIwLCAweDlDNkE3ODI0LCAweEQ1
NTYwNTAzLCAweDBFMTI4MjZBLCAweDQ3MkVGRjRELAorCTB4RkY0Q0ZFOTMsIDB4QjY3MDgzQjQs
IDB4NkQzNDA0REQsIDB4MjQwODc5RkEsIDB4REU1MTdDRkUsIDB4OTc2RDAxRDksIDB4NEMyOTg2
QjAsIDB4MDUxNUZCOTcsCisJMHgyRTAxNUQ1NiwgMHg2NzNEMjA3MSwgMHhCQzc5QTcxOCwgMHhG
NTQ1REEzRiwgMHgwRjFDREYzQiwgMHg0NjIwQTIxQywgMHg5RDY0MjU3NSwgMHhENDU4NTg1MiwK
KwkweDZDM0E1OThDLCAweDI1MDYyNEFCLCAweEZFNDJBM0MyLCAweEI3N0VERUU1LCAweDREMjdE
QkUxLCAweDA0MUJBNkM2LCAweERGNUYyMUFGLCAweDk2NjM1Qzg4LAorCTB4QUE3NzU0RTIsIDB4
RTM0QjI5QzUsIDB4MzgwRkFFQUMsIDB4NzEzM0QzOEIsIDB4OEI2QUQ2OEYsIDB4QzI1NkFCQTgs
IDB4MTkxMjJDQzEsIDB4NTAyRTUxRTYsCisJMHhFODRDNTAzOCwgMHhBMTcwMkQxRiwgMHg3QTM0
QUE3NiwgMHgzMzA4RDc1MSwgMHhDOTUxRDI1NSwgMHg4MDZEQUY3MiwgMHg1QjI5MjgxQiwgMHgx
MjE1NTUzQywKKwkweDIzMDEzOENGLCAweDZBM0Q0NUU4LCAweEIxNzlDMjgxLCAweEY4NDVCRkE2
LCAweDAyMUNCQUEyLCAweDRCMjBDNzg1LCAweDkwNjQ0MEVDLCAweEQ5NTgzRENCLAorCTB4NjEz
QTNDMTUsIDB4MjgwNjQxMzIsIDB4RjM0MkM2NUIsIDB4QkE3RUJCN0MsIDB4NDAyN0JFNzgsIDB4
MDkxQkMzNUYsIDB4RDI1RjQ0MzYsIDB4OUI2MzM5MTEsCisJMHhBNzc3MzE3QiwgMHhFRTRCNEM1
QywgMHgzNTBGQ0IzNSwgMHg3QzMzQjYxMiwgMHg4NjZBQjMxNiwgMHhDRjU2Q0UzMSwgMHgxNDEy
NDk1OCwgMHg1RDJFMzQ3RiwKKwkweEU1NEMzNUExLCAweEFDNzA0ODg2LCAweDc3MzRDRkVGLCAw
eDNFMDhCMkM4LCAweEM0NTFCN0NDLCAweDhENkRDQUVCLCAweDU2Mjk0RDgyLCAweDFGMTUzMEE1
Cit9OworCisvKgorICogZW5kIG9mIHRoZSBDUkMgbG9va3VwIHRhYmxlIGNyY190YWJsZWlsOF9v
ODgKKyAqLworCisKK3N0YXRpYyB1aW50MzJfdAorc2N0cF9jcmMzMmNfc2I4XzY0X2JpdCh1aW50
MzJfdCBjcmMsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnBf
YnVmLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBsZW5ndGgsCisgICAgICAgICAg
ICAgICAgICAgICAgIHVpbnQzMl90IGluaXRfYnl0ZXMpCit7CisJdWludDMyX3QgbGk7CisJdWlu
dDMyX3QgdGVybTEsIHRlcm0yOworCXVpbnQzMl90IHJ1bm5pbmdfbGVuZ3RoOworCXVpbnQzMl90
IGVuZF9ieXRlczsKKworCXJ1bm5pbmdfbGVuZ3RoID0gKChsZW5ndGggLSBpbml0X2J5dGVzKSAv
IDgpICogODsKKwllbmRfYnl0ZXMgPSBsZW5ndGggLSBpbml0X2J5dGVzIC0gcnVubmluZ19sZW5n
dGg7CisKKwlmb3IgKGxpID0gMDsgbGkgPCBpbml0X2J5dGVzOyBsaSsrKQorCQljcmMgPSBzY3Rw
X2NyY190YWJsZWlsOF9vMzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAwMDAwRkZdIF4KKwkJICAg
IChjcmMgPj4gOCk7CisJZm9yIChsaSA9IDA7IGxpIDwgcnVubmluZ19sZW5ndGggLyA4OyBsaSsr
KSB7CisjaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisJCWNyYyBePSAqcF9idWYrKzsKKwkJ
Y3JjIF49ICgqcF9idWYrKykgPDwgODsKKwkJY3JjIF49ICgqcF9idWYrKykgPDwgMTY7CisJCWNy
YyBePSAoKnBfYnVmKyspIDw8IDI0OworI2Vsc2UKKwkJY3JjIF49ICooY29uc3QgdWludDMyX3Qg
KikgcF9idWY7CisJCXBfYnVmICs9IDQ7CisjZW5kaWYKKwkJdGVybTEgPSBzY3RwX2NyY190YWJs
ZWlsOF9vODhbY3JjICYgMHgwMDAwMDBGRl0gXgorCQkgICAgc2N0cF9jcmNfdGFibGVpbDhfbzgw
WyhjcmMgPj4gOCkgJiAweDAwMDAwMEZGXTsKKwkJdGVybTIgPSBjcmMgPj4gMTY7CisJCWNyYyA9
IHRlcm0xIF4KKwkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X283Mlt0ZXJtMiAmIDB4MDAwMDAwRkZd
IF4KKwkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X282NFsodGVybTIgPj4gOCkgJiAweDAwMDAwMEZG
XTsKKworI2lmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorCQljcmMgXj0gc2N0cF9jcmNfdGFi
bGVpbDhfbzU2WypwX2J1ZisrXTsKKwkJY3JjIF49IHNjdHBfY3JjX3RhYmxlaWw4X280OFsqcF9i
dWYrK107CisJCWNyYyBePSBzY3RwX2NyY190YWJsZWlsOF9vNDBbKnBfYnVmKytdOworCQljcmMg
Xj0gc2N0cF9jcmNfdGFibGVpbDhfbzMyWypwX2J1ZisrXTsKKyNlbHNlCisJCXRlcm0xID0gc2N0
cF9jcmNfdGFibGVpbDhfbzU2WygqKGNvbnN0IHVpbnQzMl90ICopIHBfYnVmKSAmIDB4MDAwMDAw
RkZdIF4KKwkJICAgIHNjdHBfY3JjX3RhYmxlaWw4X280OFsoKCooY29uc3QgdWludDMyX3QgKikg
cF9idWYpID4+IDgpICYgMHgwMDAwMDBGRl07CisKKwkJdGVybTIgPSAoKihjb25zdCB1aW50MzJf
dCAqKSBwX2J1ZikgPj4gMTY7CisJCWNyYyA9IGNyYyBeCisJCSAgICB0ZXJtMSBeCisJCSAgICBz
Y3RwX2NyY190YWJsZWlsOF9vNDBbdGVybTIgJiAweDAwMDAwMEZGXSBeCisJCSAgICBzY3RwX2Ny
Y190YWJsZWlsOF9vMzJbKHRlcm0yID4+IDgpICYgMHgwMDAwMDBGRl07CisJCXBfYnVmICs9IDQ7
CisjZW5kaWYKKwl9CisJZm9yIChsaSA9IDA7IGxpIDwgZW5kX2J5dGVzOyBsaSsrKQorCQljcmMg
PSBzY3RwX2NyY190YWJsZWlsOF9vMzJbKGNyYyBeICpwX2J1ZisrKSAmIDB4MDAwMDAwRkZdIF4K
KwkJICAgIChjcmMgPj4gOCk7CisJcmV0dXJuIChjcmMpOworfQorCisKKy8qKgorICoKKyAqIFJv
dXRpbmUgRGVzY3JpcHRpb246CisgKgorICogd2FybXMgdGhlIHRhYmxlcworICoKKyAqIEFyZ3Vt
ZW50czoKKyAqCisgKgkJbm9uZQorICoKKyAqIFJldHVybiB2YWx1ZToKKyAqCisgKgkJbm9uZQor
ICovCitzdGF0aWMgdWludDMyX3QKK211bHRpdGFibGVfY3JjMzJjKHVpbnQzMl90IGNyYzMyYywK
KyAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwKKyAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkIGludCBsZW5ndGgpCit7CisJdWludDMyX3QgdG9fZXZlbl93b3Jk
OworCisJaWYgKGxlbmd0aCA9PSAwKSB7CisJCXJldHVybiAoY3JjMzJjKTsKKwl9CisJdG9fZXZl
bl93b3JkID0gKDQgLSAoKCh1aW50cHRyX3QpIGJ1ZmZlcikgJiAweDMpKTsKKwlyZXR1cm4gKHNj
dHBfY3JjMzJjX3NiOF82NF9iaXQoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCwgdG9fZXZlbl93b3Jk
KSk7Cit9CisKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBzY3RwX2NyY19jWzI1Nl0gPSB7CisJMHgw
MDAwMDAwMCwgMHhGMjZCODMwMywgMHhFMTNCNzBGNywgMHgxMzUwRjNGNCwKKwkweEM3OUE5NzFG
LCAweDM1RjExNDFDLCAweDI2QTFFN0U4LCAweEQ0Q0E2NEVCLAorCTB4OEFEOTU4Q0YsIDB4NzhC
MkRCQ0MsIDB4NkJFMjI4MzgsIDB4OTk4OUFCM0IsCisJMHg0RDQzQ0ZEMCwgMHhCRjI4NENEMywg
MHhBQzc4QkYyNywgMHg1RTEzM0MyNCwKKwkweDEwNUVDNzZGLCAweEUyMzU0NDZDLCAweEYxNjVC
Nzk4LCAweDAzMEUzNDlCLAorCTB4RDdDNDUwNzAsIDB4MjVBRkQzNzMsIDB4MzZGRjIwODcsIDB4
QzQ5NEEzODQsCisJMHg5QTg3OUZBMCwgMHg2OEVDMUNBMywgMHg3QkJDRUY1NywgMHg4OUQ3NkM1
NCwKKwkweDVEMUQwOEJGLCAweEFGNzY4QkJDLCAweEJDMjY3ODQ4LCAweDRFNERGQjRCLAorCTB4
MjBCRDhFREUsIDB4RDJENjBEREQsIDB4QzE4NkZFMjksIDB4MzNFRDdEMkEsCisJMHhFNzI3MTlD
MSwgMHgxNTRDOUFDMiwgMHgwNjFDNjkzNiwgMHhGNDc3RUEzNSwKKwkweEFBNjRENjExLCAweDU4
MEY1NTEyLCAweDRCNUZBNkU2LCAweEI5MzQyNUU1LAorCTB4NkRGRTQxMEUsIDB4OUY5NUMyMEQs
IDB4OENDNTMxRjksIDB4N0VBRUIyRkEsCisJMHgzMEUzNDlCMSwgMHhDMjg4Q0FCMiwgMHhEMUQ4
Mzk0NiwgMHgyM0IzQkE0NSwKKwkweEY3NzlERUFFLCAweDA1MTI1REFELCAweDE2NDJBRTU5LCAw
eEU0MjkyRDVBLAorCTB4QkEzQTExN0UsIDB4NDg1MTkyN0QsIDB4NUIwMTYxODksIDB4QTk2QUUy
OEEsCisJMHg3REEwODY2MSwgMHg4RkNCMDU2MiwgMHg5QzlCRjY5NiwgMHg2RUYwNzU5NSwKKwkw
eDQxN0IxREJDLCAweEIzMTA5RUJGLCAweEEwNDA2RDRCLCAweDUyMkJFRTQ4LAorCTB4ODZFMThB
QTMsIDB4NzQ4QTA5QTAsIDB4NjdEQUZBNTQsIDB4OTVCMTc5NTcsCisJMHhDQkEyNDU3MywgMHgz
OUM5QzY3MCwgMHgyQTk5MzU4NCwgMHhEOEYyQjY4NywKKwkweDBDMzhEMjZDLCAweEZFNTM1MTZG
LCAweEVEMDNBMjlCLCAweDFGNjgyMTk4LAorCTB4NTEyNURBRDMsIDB4QTM0RTU5RDAsIDB4QjAx
RUFBMjQsIDB4NDI3NTI5MjcsCisJMHg5NkJGNERDQywgMHg2NEQ0Q0VDRiwgMHg3Nzg0M0QzQiwg
MHg4NUVGQkUzOCwKKwkweERCRkM4MjFDLCAweDI5OTcwMTFGLCAweDNBQzdGMkVCLCAweEM4QUM3
MUU4LAorCTB4MUM2NjE1MDMsIDB4RUUwRDk2MDAsIDB4RkQ1RDY1RjQsIDB4MEYzNkU2RjcsCisJ
MHg2MUM2OTM2MiwgMHg5M0FEMTA2MSwgMHg4MEZERTM5NSwgMHg3Mjk2NjA5NiwKKwkweEE2NUMw
NDdELCAweDU0Mzc4NzdFLCAweDQ3Njc3NDhBLCAweEI1MENGNzg5LAorCTB4RUIxRkNCQUQsIDB4
MTk3NDQ4QUUsIDB4MEEyNEJCNUEsIDB4Rjg0RjM4NTksCisJMHgyQzg1NUNCMiwgMHhERUVFREZC
MSwgMHhDREJFMkM0NSwgMHgzRkQ1QUY0NiwKKwkweDcxOTg1NDBELCAweDgzRjNENzBFLCAweDkw
QTMyNEZBLCAweDYyQzhBN0Y5LAorCTB4QjYwMkMzMTIsIDB4NDQ2OTQwMTEsIDB4NTczOUIzRTUs
IDB4QTU1MjMwRTYsCisJMHhGQjQxMENDMiwgMHgwOTJBOEZDMSwgMHgxQTdBN0MzNSwgMHhFODEx
RkYzNiwKKwkweDNDREI5QkRELCAweENFQjAxOERFLCAweERERTBFQjJBLCAweDJGOEI2ODI5LAor
CTB4ODJGNjNCNzgsIDB4NzA5REI4N0IsIDB4NjNDRDRCOEYsIDB4OTFBNkM4OEMsCisJMHg0NTZD
QUM2NywgMHhCNzA3MkY2NCwgMHhBNDU3REM5MCwgMHg1NjNDNUY5MywKKwkweDA4MkY2M0I3LCAw
eEZBNDRFMEI0LCAweEU5MTQxMzQwLCAweDFCN0Y5MDQzLAorCTB4Q0ZCNUY0QTgsIDB4M0RERTc3
QUIsIDB4MkU4RTg0NUYsIDB4RENFNTA3NUMsCisJMHg5MkE4RkMxNywgMHg2MEMzN0YxNCwgMHg3
MzkzOENFMCwgMHg4MUY4MEZFMywKKwkweDU1MzI2QjA4LCAweEE3NTlFODBCLCAweEI0MDkxQkZG
LCAweDQ2NjI5OEZDLAorCTB4MTg3MUE0RDgsIDB4RUExQTI3REIsIDB4Rjk0QUQ0MkYsIDB4MEIy
MTU3MkMsCisJMHhERkVCMzNDNywgMHgyRDgwQjBDNCwgMHgzRUQwNDMzMCwgMHhDQ0JCQzAzMywK
KwkweEEyNEJCNUE2LCAweDUwMjAzNkE1LCAweDQzNzBDNTUxLCAweEIxMUI0NjUyLAorCTB4NjVE
MTIyQjksIDB4OTdCQUExQkEsIDB4ODRFQTUyNEUsIDB4NzY4MUQxNEQsCisJMHgyODkyRUQ2OSwg
MHhEQUY5NkU2QSwgMHhDOUE5OUQ5RSwgMHgzQkMyMUU5RCwKKwkweEVGMDg3QTc2LCAweDFENjNG
OTc1LCAweDBFMzMwQTgxLCAweEZDNTg4OTgyLAorCTB4QjIxNTcyQzksIDB4NDA3RUYxQ0EsIDB4
NTMyRTAyM0UsIDB4QTE0NTgxM0QsCisJMHg3NThGRTVENiwgMHg4N0U0NjZENSwgMHg5NEI0OTUy
MSwgMHg2NkRGMTYyMiwKKwkweDM4Q0MyQTA2LCAweENBQTdBOTA1LCAweEQ5Rjc1QUYxLCAweDJC
OUNEOUYyLAorCTB4RkY1NkJEMTksIDB4MEQzRDNFMUEsIDB4MUU2RENERUUsIDB4RUMwNjRFRUQs
CisJMHhDMzhEMjZDNCwgMHgzMUU2QTVDNywgMHgyMkI2NTYzMywgMHhEMERERDUzMCwKKwkweDA0
MTdCMURCLCAweEY2N0MzMkQ4LCAweEU1MkNDMTJDLCAweDE3NDc0MjJGLAorCTB4NDk1NDdFMEIs
IDB4QkIzRkZEMDgsIDB4QTg2RjBFRkMsIDB4NUEwNDhERkYsCisJMHg4RUNFRTkxNCwgMHg3Q0E1
NkExNywgMHg2RkY1OTlFMywgMHg5RDlFMUFFMCwKKwkweEQzRDNFMUFCLCAweDIxQjg2MkE4LCAw
eDMyRTg5MTVDLCAweEMwODMxMjVGLAorCTB4MTQ0OTc2QjQsIDB4RTYyMkY1QjcsIDB4RjU3MjA2
NDMsIDB4MDcxOTg1NDAsCisJMHg1OTBBQjk2NCwgMHhBQjYxM0E2NywgMHhCODMxQzk5MywgMHg0
QTVBNEE5MCwKKwkweDlFOTAyRTdCLCAweDZDRkJBRDc4LCAweDdGQUI1RThDLCAweDhEQzBERDhG
LAorCTB4RTMzMEE4MUEsIDB4MTE1QjJCMTksIDB4MDIwQkQ4RUQsIDB4RjA2MDVCRUUsCisJMHgy
NEFBM0YwNSwgMHhENkMxQkMwNiwgMHhDNTkxNEZGMiwgMHgzN0ZBQ0NGMSwKKwkweDY5RTlGMEQ1
LCAweDlCODI3M0Q2LCAweDg4RDI4MDIyLCAweDdBQjkwMzIxLAorCTB4QUU3MzY3Q0EsIDB4NUMx
OEU0QzksIDB4NEY0ODE3M0QsIDB4QkQyMzk0M0UsCisJMHhGMzZFNkY3NSwgMHgwMTA1RUM3Niwg
MHgxMjU1MUY4MiwgMHhFMDNFOUM4MSwKKwkweDM0RjRGODZBLCAweEM2OUY3QjY5LCAweEQ1Q0Y4
ODlELCAweDI3QTQwQjlFLAorCTB4NzlCNzM3QkEsIDB4OEJEQ0I0QjksIDB4OTg4QzQ3NEQsIDB4
NkFFN0M0NEUsCisJMHhCRTJEQTBBNSwgMHg0QzQ2MjNBNiwgMHg1RjE2RDA1MiwgMHhBRDdENTM1
MSwKK307CisKKworI2RlZmluZSBTQ1RQX0NSQzMyQyhjLGQpIChjPShjPj44KV5zY3RwX2NyY19j
WyhjXihkKSkmMHhGRl0pCisKK3N0YXRpYyB1aW50MzJfdAorc2luZ2xldGFibGVfY3JjMzJjKHVp
bnQzMl90IGNyYzMyYywKKyAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpi
dWZmZXIsCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbmd0aCkKK3sKKwl1bnNp
Z25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworCQlTQ1RQX0NS
QzMyQyhjcmMzMmMsIGJ1ZmZlcltpXSk7CisJfQorCXJldHVybiAoY3JjMzJjKTsKK30KKworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3VpbnQzMl90CisjZWxzZQorc3RhdGljIHVpbnQzMl90
CisjZW5kaWYKK2NhbGN1bGF0ZV9jcmMzMmModWludDMyX3QgY3JjMzJjLAorICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWZmZXIsCisgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBsZW5ndGgpCit7CisJaWYgKGxlbmd0aCA8IDQpIHsKKwkJcmV0dXJuIChzaW5nbGV0
YWJsZV9jcmMzMmMoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCkpOworCX0gZWxzZSB7CisJCXJldHVy
biAobXVsdGl0YWJsZV9jcmMzMmMoY3JjMzJjLCBidWZmZXIsIGxlbmd0aCkpOworCX0KK30KKwor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordWludDMyX3QKKyNlbHNlCitzdGF0
aWMgdWludDMyX3QKKyNlbmRpZgorc2N0cF9maW5hbGl6ZV9jcmMzMmModWludDMyX3QgY3JjMzJj
KQoreworCXVpbnQzMl90IHJlc3VsdDsKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwl1
aW50OF90IGJ5dGUwLCBieXRlMSwgYnl0ZTIsIGJ5dGUzOworI2VuZGlmCisKKwkvKiBDb21wbGVt
ZW50IHRoZSByZXN1bHQgKi8KKwlyZXN1bHQgPSB+Y3JjMzJjOworI2lmIEJZVEVfT1JERVIgPT0g
QklHX0VORElBTgorCS8qCisJICogRm9yIEJJRy1FTkRJQU4gcGxhdGZvcm1zIHRoZSByZXN1bHQg
aXMgaW4gbGl0dGxlLWVuZGlhbiBmb3JtLiBTbyB3ZQorCSAqIG11c3Qgc3dhcCB0aGUgYnl0ZXMg
dG8gcmV0dXJuIHRoZSByZXN1bHQgaW4gbmV0d29yayBieXRlIG9yZGVyLgorCSAqLworCWJ5dGUw
ID0gcmVzdWx0ICYgMHgwMDAwMDBmZjsKKwlieXRlMSA9IChyZXN1bHQgPj4gOCkgJiAweDAwMDAw
MGZmOworCWJ5dGUyID0gKHJlc3VsdCA+PiAxNikgJiAweDAwMDAwMGZmOworCWJ5dGUzID0gKHJl
c3VsdCA+PiAyNCkgJiAweDAwMDAwMGZmOworCWNyYzMyYyA9ICgoYnl0ZTAgPDwgMjQpIHwgKGJ5
dGUxIDw8IDE2KSB8IChieXRlMiA8PCA4KSB8IGJ5dGUzKTsKKyNlbHNlCisJLyoKKwkgKiBGb3Ig
TElUVExFIEVORElBTiBwbGF0Zm9ybXMgdGhlIHJlc3VsdCBpcyBpbiBhbHJlYWR5IGluIG5ldHdv
cmsKKwkgKiBieXRlIG9yZGVyLgorCSAqLworCWNyYzMyYyA9IHJlc3VsdDsKKyNlbmRpZgorCXJl
dHVybiAoY3JjMzJjKTsKK30KKworLyoKKyAqIENvbXB1dGUgdGhlIFNDVFAgY2hlY2tzdW0gaW4g
bmV0d29yayBieXRlIG9yZGVyIGZvciBhIGdpdmVuIG1idWYgY2hhaW4gbQorICogd2hpY2ggY29u
dGFpbnMgYW4gU0NUUCBwYWNrZXQgc3RhcnRpbmcgYXQgb2Zmc2V0LgorICogU2luY2UgdGhpcyBm
dW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBieSBpcGZ3LCBkb24ndCBhc3N1bWUgdGhhdAorICogaXQg
aXMgY29tcGlsZWQgb24gYSBrZXJuZWwgd2l0aCBTQ1RQIHN1cHBvcnQuCisgKi8KK3VpbnQzMl90
CitzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3QgbWJ1ZiAqbSwgdWludDMyX3Qgb2Zmc2V0KQor
eworCXVpbnQzMl90IGJhc2UgPSAweGZmZmZmZmZmOworCisJd2hpbGUgKG9mZnNldCA+IDApIHsK
KwkJS0FTU0VSVChtICE9IE5VTEwsICgic2N0cF9jYWxjdWxhdGVfY2tzdW0sIG9mZnNldCA+IGxl
bmd0aCBvZiBtYnVmIGNoYWluIikpOworCQlpZiAob2Zmc2V0IDwgKHVpbnQzMl90KW0tPm1fbGVu
KSB7CisJCQlicmVhazsKKwkJfQorCQlvZmZzZXQgLT0gbS0+bV9sZW47CisJCW0gPSBtLT5tX25l
eHQ7CisJfQorCWlmIChvZmZzZXQgPiAwKSB7CisJCWJhc2UgPSBjYWxjdWxhdGVfY3JjMzJjKGJh
c2UsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopKG0tPm1fZGF0
YSArIG9mZnNldCksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKG0t
Pm1fbGVuIC0gb2Zmc2V0KSk7CisJCW0gPSBtLT5tX25leHQ7CisJfQorCXdoaWxlIChtICE9IE5V
TEwpIHsKKwkJYmFzZSA9IGNhbGN1bGF0ZV9jcmMzMmMoYmFzZSwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgKHVuc2lnbmVkIGNoYXIgKiltLT5tX2RhdGEsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAgICh1bnNpZ25lZCBpbnQpbS0+bV9sZW4pOworCQltID0gbS0+bV9uZXh0OworCX0KKwli
YXNlID0gc2N0cF9maW5hbGl6ZV9jcmMzMmMoYmFzZSk7CisJcmV0dXJuIChiYXNlKTsKK30KKwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZkZWYgU0NUUAorLyoKKyAqIENvbXB1dGUgYW5k
IGluc2VydCB0aGUgU0NUUCBjaGVja3N1bSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgZm9yIGEgZ2l2
ZW4KKyAqIG1idWYgY2hhaW4gbSB3aGljaCBjb250YWlucyBhbiBTQ1RQIHBhY2tldCBzdGFydGlu
ZyBhdCBvZmZzZXQuCisgKi8KK3ZvaWQKK3NjdHBfZGVsYXllZF9ja3N1bShzdHJ1Y3QgbWJ1ZiAq
bSwgdWludDMyX3Qgb2Zmc2V0KQoreworCXVpbnQzMl90IGNoZWNrc3VtOworCisJY2hlY2tzdW0g
PSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtLCBvZmZzZXQpOworCVNDVFBfU1RBVF9ERUNSKHNjdHBz
X3NlbmRod2NyYyk7CisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKwlvZmZzZXQg
Kz0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKKworCWlmIChvZmZzZXQgKyBz
aXplb2YodWludDMyX3QpID4gKHVpbnQzMl90KShtLT5tX2xlbikpIHsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCXBhbmljKCJzY3RwX2RlbGF5ZWRfY2tzdW0oKTogbS0+bV9sZW46ICVkLCBvZmZzZXQ6
ICV1LiIsCisJCSAgICAgIG0tPm1fbGVuLCBvZmZzZXQpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYo
InNjdHBfZGVsYXllZF9ja3N1bSgpOiBtLT5tX2xlbjogJWQsIG9mZnNldDogJXUuXG4iLAorCQkg
ICAgICAgICAgICBtLT5tX2xlbiwgb2Zmc2V0KTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQorCSoo
dWludDMyX3QgKikobS0+bV9kYXRhICsgb2Zmc2V0KSA9IGNoZWNrc3VtOworfQorI2VuZGlmCisj
ZW5kaWYKKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfY3Jj
MzIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2NyYzMyLmgKaW5kZXggZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYWMyMGMxMDM0MWZhMTkxNjcx
NTAzYWIzM2EyYjM5M2Q2YmUzNGNlNyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfY3JjMzIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9jcmMzMi5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZp
ZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNj
byBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAg
ICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5
c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xE
RVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
Q09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+
CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9jcmMzMi5oIDMyNzIw
MCAyMDE3LTEyLTI2IDEyOjM1OjAyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05F
VElORVRfU0NUUF9DUkMzMl9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0NSQzMyX0hfCisKKyNp
ZiBkZWZpbmVkKF9LRVJORUwpCit1aW50MzJfdCBzY3RwX2NhbGN1bGF0ZV9ja3N1bShzdHJ1Y3Qg
bWJ1ZiAqLCB1aW50MzJfdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBTQ1RQ
Cit2b2lkIHNjdHBfZGVsYXllZF9ja3N1bShzdHJ1Y3QgbWJ1ZiAqLCB1aW50MzJfdCBvZmZzZXQp
OworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgkJCQkvKiBfS0VSTkVMICovCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQordWludDMyX3QgY2FsY3VsYXRlX2NyYzMyYyh1aW50MzJfdCwgY29uc3Qg
dW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBpbnQpOwordWludDMyX3Qgc2N0cF9maW5hbGl6ZV9j
cmMzMmModWludDMyX3QpOwordWludDMyX3Qgc2N0cF9jYWxjdWxhdGVfY2tzdW0oc3RydWN0IG1i
dWYgKiwgdWludDMyX3QpOworI2VuZGlmCisjZW5kaWYJCQkJLyogX19jcmMzMmNfaF9fICovCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9oZWFkZXIuaCBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRlci5oCmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjYwMzVkOWNiZGJiZGZiOTFmMjViOTY3NDIy
ZDhhNGEwN2Y5YjY0YTMgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX2hlYWRlci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2hlYWRl
ci5oCkBAIC0wLDAgKzEsNjExIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBC
U0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lz
dGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIw
MTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1z
LCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19G
QlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaGVhZGVyLmggMzA5NjgyIDIw
MTYtMTItMDcgMTk6MzA6NTlaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5F
VF9TQ1RQX0hFQURFUl9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0hFQURFUl9IXworCisjaWYg
ZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KyNpbmNsdWRlIDxwYWNrb24uaD4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKworI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0
cmlidXRlX18oKHBhY2tlZCkpCisjZWxzZQorI3ByYWdtYSBwYWNrIChwdXNoLCAxKQorI2RlZmlu
ZSBTQ1RQX1BBQ0tFRAorI2VuZGlmCisKKy8qCisgKiBQYXJhbWV0ZXIgc3RydWN0dXJlcworICov
CitzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7
LyogdHlwZT1TQ1RQX0lQVjRfUEFSQU1fVFlQRSwgbGVuPTggKi8KKwl1aW50MzJfdCBhZGRyOwkJ
LyogSVBWNCBhZGRyZXNzICovCit9IFNDVFBfUEFDS0VEOworCisjZGVmaW5lIFNDVFBfVjZfQURE
Ul9CWVRFUyAxNgorCisKK3N0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0
cF9wYXJhbWhkciBwaDsvKiB0eXBlPVNDVFBfSVBWNl9QQVJBTV9UWVBFLCBsZW49MjAgKi8KKwl1
aW50OF90IGFkZHJbU0NUUF9WNl9BRERSX0JZVEVTXTsJLyogSVBWNiBhZGRyZXNzICovCit9IFND
VFBfUEFDS0VEOworCisvKiBDb29raWUgUHJlc2VydmF0aXZlICovCitzdHJ1Y3Qgc2N0cF9jb29r
aWVfcGVyc2VydmVfcGFyYW0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8qIHR5cGU9U0NU
UF9DT09LSUVfUFJFU0VSVkUsIGxlbj04ICovCisJdWludDMyX3QgdGltZTsJCS8qIHRpbWUgaW4g
bXMgdG8gZXh0ZW5kIGNvb2tpZSAqLworfSBTQ1RQX1BBQ0tFRDsKKworI2RlZmluZSBTQ1RQX0FS
UkFZX01JTl9MRU4gMQorLyogSG9zdCBOYW1lIEFkZHJlc3MgKi8KK3N0cnVjdCBzY3RwX2hvc3Rf
bmFtZV9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1TQ1RQX0hPU1RO
QU1FX0FERFJFU1MgKi8KKwljaGFyIG5hbWVbU0NUUF9BUlJBWV9NSU5fTEVOXTsJCS8qIGhvc3Qg
bmFtZSAqLworfSBTQ1RQX1BBQ0tFRDsKKworLyoKKyAqIFRoaXMgaXMgdGhlIG1heGltdW0gcGFk
ZGVkIHNpemUgb2YgYSBzLWEtcAorICogc28gcGFyYW1oZWFkciArIDMgYWRkcmVzcyB0eXBlcyAo
NiBieXRlcykgKyAyIGJ5dGUgcGFkID0gMTIKKyAqLworI2RlZmluZSBTQ1RQX01BWF9BRERSX1BB
UkFNU19TSVpFIDEyCisvKiBzdXBwb3J0ZWQgYWRkcmVzcyB0eXBlICovCitzdHJ1Y3Qgc2N0cF9z
dXBwb3J0ZWRfYWRkcl9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7LyogdHlwZT1T
Q1RQX1NVUFBPUlRFRF9BRERSVFlQRSAqLworCXVpbnQxNl90IGFkZHJfdHlwZVsyXTsJLyogYXJy
YXkgb2Ygc3VwcG9ydGVkIGFkZHJlc3MgdHlwZXMgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qIGhl
YXJ0YmVhdCBpbmZvIHBhcmFtZXRlciAqLworc3RydWN0IHNjdHBfaGVhcnRiZWF0X2luZm9fcGFy
YW0geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHRpbWVfdmFsdWVfMTsK
Kwl1aW50MzJfdCB0aW1lX3ZhbHVlXzI7CisJdWludDMyX3QgcmFuZG9tX3ZhbHVlMTsKKwl1aW50
MzJfdCByYW5kb21fdmFsdWUyOworCXVpbnQ4X3QgYWRkcl9mYW1pbHk7CisJdWludDhfdCBhZGRy
X2xlbjsKKwkvKiBtYWtlIHN1cmUgdGhhdCB0aGlzIHN0cnVjdHVyZSBpcyA0IGJ5dGUgYWxpZ25l
ZCAqLworCXVpbnQ4X3QgcGFkZGluZ1syXTsKKwljaGFyIGFkZHJlc3NbU0NUUF9BRERSTUFYXTsK
K30gU0NUUF9QQUNLRUQ7CisKKworLyogZHJhZnQtaWV0Zi10c3Z3Zy1wcnNjdHAgKi8KKy8qIFBS
LVNDVFAgc3VwcG9ydGVkIHBhcmFtZXRlciAqLworc3RydWN0IHNjdHBfcHJzY3RwX3N1cHBvcnRl
ZF9wYXJhbSB7CisJc3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7Cit9IFNDVFBfUEFDS0VEOworCisK
Ky8qIGRyYWZ0LWlldGYtdHN2d2ctYWRkaXAtc2N0cCAqLworc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyIHsJLyogYW4gQVNDT05GICJwYXJhbWV0ZXIiICovCisJc3RydWN0IHNjdHBfcGFyYW1o
ZHIgcGg7LyogYSBTQ1RQIHBhcmFtZXRlciBoZWFkZXIgKi8KKwl1aW50MzJfdCBjb3JyZWxhdGlv
bl9pZDsvKiBjb3JyZWxhdGlvbiBpZCBmb3IgdGhpcyBwYXJhbSAqLworfSBTQ1RQX1BBQ0tFRDsK
Kworc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0gewkvKiBhbiBBU0NPTkYgYWRkcmVzcyBw
YXJhbWV0ZXIgKi8KKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIgYXBoOwkvKiBhc2NvbmYg
InBhcmFtZXRlciIgKi8KKwlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSBhZGRycDsJLyogbWF4
IHN0b3JhZ2Ugc2l6ZSAqLworfSBTQ1RQX1BBQ0tFRDsKKworCitzdHJ1Y3Qgc2N0cF9hc2NvbmZf
dGFnX3BhcmFtIHsJLyogYW4gQVNDT05GIE5BVC1WdGFnIHBhcmFtZXRlciAqLworCXN0cnVjdCBz
Y3RwX2FzY29uZl9wYXJhbWhkciBhcGg7CS8qIGFzY29uZiAicGFyYW1ldGVyIiAqLworICAgICAg
ICB1aW50MzJfdCBsb2NhbF92dGFnOworICAgICAgICB1aW50MzJfdCByZW1vdGVfdnRhZzsKK30g
U0NUUF9QQUNLRUQ7CisKKworc3RydWN0IHNjdHBfYXNjb25mX2FkZHJ2NF9wYXJhbSB7CS8qIGFu
IEFTQ09ORiBhZGRyZXNzICh2NCkgcGFyYW1ldGVyICovCisJc3RydWN0IHNjdHBfYXNjb25mX3Bh
cmFtaGRyIGFwaDsJLyogYXNjb25mICJwYXJhbWV0ZXIiICovCisJc3RydWN0IHNjdHBfaXB2NGFk
ZHJfcGFyYW0gYWRkcnA7CS8qIG1heCBzdG9yYWdlIHNpemUgKi8KK30gU0NUUF9QQUNLRUQ7CisK
KyNkZWZpbmUgU0NUUF9NQVhfU1VQUE9SVEVEX0VYVCAyNTYKKworc3RydWN0IHNjdHBfc3VwcG9y
dGVkX2NodW5rX3R5cGVzX3BhcmFtIHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsvKiB0eXBl
ID0gMHg4MDA4ICBsZW4gPSB4ICovCisJdWludDhfdCBjaHVua190eXBlc1tdOworfSBTQ1RQX1BB
Q0tFRDsKKworCisvKgorICogU3RydWN0dXJlcyBmb3IgREFUQSBjaHVua3MKKyAqLworc3RydWN0
IHNjdHBfZGF0YSB7CisJdWludDMyX3QgdHNuOworCXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCBz
c247CisJdWludDMyX3QgcHBpZDsKKwkvKiB1c2VyIGRhdGEgZm9sbG93cyAqLworfSBTQ1RQX1BB
Q0tFRDsKKworc3RydWN0IHNjdHBfZGF0YV9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIg
Y2g7CisJc3RydWN0IHNjdHBfZGF0YSBkcDsKK30gU0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3Rw
X2lkYXRhIHsKKwl1aW50MzJfdCB0c247CisJdWludDE2X3Qgc2lkOworCXVpbnQxNl90IHJlc2Vy
dmVkOwkvKiBXaGVyZSBkb2VzIHRoZSBTU04gZ28/ICovCisJdWludDMyX3QgbWlkOworCXVuaW9u
IHsKKwkJdWludDMyX3QgcHBpZDsKKwkJdWludDMyX3QgZnNuOwkvKiBGcmFnbWVudCBTZXF1ZW5j
ZSBOdW1iZXIgKi8KKwl9IHBwaWRfZnNuOworCS8qIHVzZXIgZGF0YSBmb2xsb3dzICovCit9IFND
VFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1
bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfaWRhdGEgZHA7Cit9IFNDVFBfUEFDS0VEOworCisvKgor
ICogU3RydWN0dXJlcyBmb3IgdGhlIGNvbnRyb2wgY2h1bmtzCisgKi8KKworLyogSW5pdGlhdGUg
KElOSVQpL0luaXRpYXRlIEFjayAoSU5JVCBBQ0spICovCitzdHJ1Y3Qgc2N0cF9pbml0IHsKKwl1
aW50MzJfdCBpbml0aWF0ZV90YWc7CS8qIGluaXRpYXRlIHRhZyAqLworCXVpbnQzMl90IGFfcndu
ZDsJLyogYV9yd25kICovCisJdWludDE2X3QgbnVtX291dGJvdW5kX3N0cmVhbXM7CS8qIE9TICov
CisJdWludDE2X3QgbnVtX2luYm91bmRfc3RyZWFtczsJLyogTUlTICovCisJdWludDMyX3QgaW5p
dGlhbF90c247CS8qIEktVFNOICovCisJLyogb3B0aW9uYWwgcGFyYW0ncyBmb2xsb3cgKi8KK30g
U0NUUF9QQUNLRUQ7CisjZGVmaW5lIFNDVFBfSURFTlRJRklDQVRJT05fU0laRSAxNgorI2RlZmlu
ZSBTQ1RQX0FERFJFU1NfU0laRSA0CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmlu
ZSBTQ1RQX1JFU0VSVkVfU1BBQ0UgNQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9SRVNFUlZFX1NQQUNF
IDYKKyNlbmRpZgorLyogc3RhdGUgY29va2llIGhlYWRlciAqLworc3RydWN0IHNjdHBfc3RhdGVf
Y29va2llIHsJLyogdGhpcyBpcyBvdXIgZGVmaW5pdGlvbi4uLiAqLworCXVpbnQ4X3QgaWRlbnRp
ZmljYXRpb25bU0NUUF9JREVOVElGSUNBVElPTl9TSVpFXTsvKiBpZCBvZiB3aG8gd2UgYXJlICov
CisJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwkvKiB0aGUgdGltZSBJIGJ1aWx0IGNvb2tp
ZSAqLworCXVpbnQzMl90IGNvb2tpZV9saWZlOwkvKiBsaWZlIEkgd2lsbCBhd2FyZCB0aGlzIGNv
b2tpZSAqLworCXVpbnQzMl90IHRpZV90YWdfbXlfdnRhZzsJLyogbXkgdGFnIGluIG9sZCBhc3Nv
Y2lhdGlvbiAqLworCisJdWludDMyX3QgdGllX3RhZ19wZWVyX3Z0YWc7CS8qIHBlZXJzIHRhZyBp
biBvbGQgYXNzb2NpYXRpb24gKi8KKwl1aW50MzJfdCBwZWVyc192dGFnOwkvKiBwZWVycyB0YWcg
aW4gSU5JVCAoZm9yIHF1aWNrIHJlZikgKi8KKworCXVpbnQzMl90IG15X3Z0YWc7CS8qIG15IHRh
ZyBpbiBJTklULUFDSyAoZm9yIHF1aWNrIHJlZikgKi8KKwl1aW50MzJfdCBhZGRyZXNzW1NDVFBf
QUREUkVTU19TSVpFXTsJLyogNCBpbnRzLzEyOCBiaXRzICovCisJdWludDMyX3QgYWRkcl90eXBl
OwkvKiBhZGRyZXNzIHR5cGUgKi8KKwl1aW50MzJfdCBsYWRkcmVzc1tTQ1RQX0FERFJFU1NfU0la
RV07CS8qIG15IGxvY2FsIGZyb20gYWRkcmVzcyAqLworCXVpbnQzMl90IGxhZGRyX3R5cGU7CS8q
IG15IGxvY2FsIGZyb20gYWRkcmVzcyB0eXBlICovCisJdWludDMyX3Qgc2NvcGVfaWQ7CS8qIHY2
IHNjb3BlIGlkIGZvciBsaW5rLWxvY2FscyAqLworCisJdWludDE2X3QgcGVlcnBvcnQ7CS8qIHBv
cnQgYWRkcmVzcyBvZiB0aGUgcGVlciBpbiB0aGUgSU5JVCAqLworCXVpbnQxNl90IG15cG9ydDsJ
LyogbXkgcG9ydCBhZGRyZXNzIHVzZWQgaW4gdGhlIElOSVQgKi8KKwl1aW50OF90IGlwdjRfYWRk
cl9sZWdhbDsvKiBBcmUgVjQgYWRkciBsZWdhbD8gKi8KKwl1aW50OF90IGlwdjZfYWRkcl9sZWdh
bDsvKiBBcmUgVjYgYWRkciBsZWdhbD8gKi8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
dWludDhfdCBjb25uX2FkZHJfbGVnYWw7CisjZW5kaWYKKwl1aW50OF90IGxvY2FsX3Njb3BlOwkv
KiBJUHY2IGxvY2FsIHNjb3BlIGZsYWcgKi8KKwl1aW50OF90IHNpdGVfc2NvcGU7CS8qIElQdjYg
c2l0ZSBzY29wZSBmbGFnICovCisKKwl1aW50OF90IGlwdjRfc2NvcGU7CS8qIElQdjQgcHJpdmF0
ZSBhZGRyIHNjb3BlICovCisJdWludDhfdCBsb29wYmFja19zY29wZTsJLyogbG9vcGJhY2sgc2Nv
cGUgaW5mb3JtYXRpb24gKi8KKwl1aW50OF90IHJlc2VydmVkW1NDVFBfUkVTRVJWRV9TUEFDRV07
ICAgIC8qIEFsaWduIHRvIDY0IGJpdHMgKi8KKwkvKgorCSAqIGF0IHRoZSBlbmQgaXMgdGFja2Vk
IG9uIHRoZSBJTklUIGNodW5rIGFuZCB0aGUgSU5JVC1BQ0sgY2h1bmsKKwkgKiAobWludXMgdGhl
IGNvb2tpZSkuCisJICovCit9IFNDVFBfUEFDS0VEOworCisvKiBzdGF0ZSBjb29raWUgcGFyYW1l
dGVyICovCitzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWVfcGFyYW0geworCXN0cnVjdCBzY3RwX3Bh
cmFtaGRyIHBoOworCXN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSBjb29raWU7Cit9IFNDVFBfUEFD
S0VEOworCitzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBj
aDsKKwlzdHJ1Y3Qgc2N0cF9pbml0IGluaXQ7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0
cF9pbml0X21zZyB7CisJc3RydWN0IHNjdHBoZHIgc2g7CisJc3RydWN0IHNjdHBfaW5pdF9jaHVu
ayBtc2c7Cit9IFNDVFBfUEFDS0VEOworCisvKiAuLi4gdXNlZCBmb3IgYm90aCBJTklUIGFuZCBJ
TklUIEFDSyAqLworI2RlZmluZSBzY3RwX2luaXRfYWNrCQlzY3RwX2luaXQKKyNkZWZpbmUgc2N0
cF9pbml0X2Fja19jaHVuawlzY3RwX2luaXRfY2h1bmsKKyNkZWZpbmUgc2N0cF9pbml0X2Fja19t
c2cJc2N0cF9pbml0X21zZworCisKKy8qIFNlbGVjdGl2ZSBBY2sgKFNBQ0spICovCitzdHJ1Y3Qg
c2N0cF9nYXBfYWNrX2Jsb2NrIHsKKwl1aW50MTZfdCBzdGFydDsJCS8qIEdhcCBBY2sgYmxvY2sg
c3RhcnQgKi8KKwl1aW50MTZfdCBlbmQ7CQkvKiBHYXAgQWNrIGJsb2NrIGVuZCAqLworfSBTQ1RQ
X1BBQ0tFRDsKKworc3RydWN0IHNjdHBfc2FjayB7CisJdWludDMyX3QgY3VtX3Rzbl9hY2s7CS8q
IGN1bXVsYXRpdmUgVFNOIEFjayAqLworCXVpbnQzMl90IGFfcnduZDsJLyogdXBkYXRlZCBhX3J3
bmQgb2Ygc2VuZGVyICovCisJdWludDE2X3QgbnVtX2dhcF9hY2tfYmxrczsJLyogbnVtYmVyIG9m
IEdhcCBBY2sgYmxvY2tzICovCisJdWludDE2X3QgbnVtX2R1cF90c25zOwkvKiBudW1iZXIgb2Yg
ZHVwbGljYXRlIFRTTnMgKi8KKwkvKiBzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrJ3MgZm9sbG93
ICovCisJLyogdWludDMyX3QgZHVwbGljYXRlX3RzbidzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tF
RDsKKworc3RydWN0IHNjdHBfc2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7
CisJc3RydWN0IHNjdHBfc2FjayBzYWNrOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBf
bnJfc2FjayB7CisJdWludDMyX3QgY3VtX3Rzbl9hY2s7CS8qIGN1bXVsYXRpdmUgVFNOIEFjayAq
LworCXVpbnQzMl90IGFfcnduZDsJLyogdXBkYXRlZCBhX3J3bmQgb2Ygc2VuZGVyICovCisJdWlu
dDE2X3QgbnVtX2dhcF9hY2tfYmxrczsJLyogbnVtYmVyIG9mIEdhcCBBY2sgYmxvY2tzICovCisJ
dWludDE2X3QgbnVtX25yX2dhcF9hY2tfYmxrczsJLyogbnVtYmVyIG9mIE5SIEdhcCBBY2sgYmxv
Y2tzICovCisJdWludDE2X3QgbnVtX2R1cF90c25zOwkvKiBudW1iZXIgb2YgZHVwbGljYXRlIFRT
TnMgKi8KKwl1aW50MTZfdCByZXNlcnZlZDsJLyogbm90IGN1cnJlbnRseSB1c2VkKi8KKwkvKiBz
dHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrJ3MgZm9sbG93ICovCisJLyogdWludDMyX3QgZHVwbGlj
YXRlX3RzbidzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfbnJfc2Fj
a19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfbnJfc2Fj
ayBucl9zYWNrOworfSBTQ1RQX1BBQ0tFRDsKKworCisvKiBIZWFydGJlYXQgUmVxdWVzdCAoSEVB
UlRCRUFUKSAqLworc3RydWN0IHNjdHBfaGVhcnRiZWF0IHsKKwlzdHJ1Y3Qgc2N0cF9oZWFydGJl
YXRfaW5mb19wYXJhbSBoYl9pbmZvOworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfaGVh
cnRiZWF0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwlzdHJ1Y3Qgc2N0cF9o
ZWFydGJlYXQgaGVhcnRiZWF0OworfSBTQ1RQX1BBQ0tFRDsKKworLyogLi4uIHVzZWQgZm9yIEhl
YXJ0YmVhdCBBY2sgKEhFQVJUQkVBVCBBQ0spICovCisjZGVmaW5lIHNjdHBfaGVhcnRiZWF0X2Fj
awkJc2N0cF9oZWFydGJlYXQKKyNkZWZpbmUgc2N0cF9oZWFydGJlYXRfYWNrX2NodW5rCXNjdHBf
aGVhcnRiZWF0X2NodW5rCisKKworLyogQWJvcnQgQXNzc29jaWF0aW9uIChBQk9SVCkgKi8KK3N0
cnVjdCBzY3RwX2Fib3J0X2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwkvKiBv
cHRpb25hbCBlcnJvciBjYXVzZSBtYXkgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1
Y3Qgc2N0cF9hYm9ydF9tc2cgeworCXN0cnVjdCBzY3RwaGRyIHNoOworCXN0cnVjdCBzY3RwX2Fi
b3J0X2NodW5rIG1zZzsKK30gU0NUUF9QQUNLRUQ7CisKKworLyogU2h1dGRvd24gQXNzb2NpYXRp
b24gKFNIVVRET1dOKSAqLworc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgeworCXN0cnVjdCBz
Y3RwX2NodW5raGRyIGNoOworCXVpbnQzMl90IGN1bXVsYXRpdmVfdHNuX2FjazsKK30gU0NUUF9Q
QUNLRUQ7CisKKworLyogU2h1dGRvd24gQWNrbm93bGVkZ21lbnQgKFNIVVRET1dOIEFDSykgKi8K
K3N0cnVjdCBzY3RwX3NodXRkb3duX2Fja19jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIg
Y2g7Cit9IFNDVFBfUEFDS0VEOworCisKKy8qIE9wZXJhdGlvbiBFcnJvciAoRVJST1IpICovCitz
dHJ1Y3Qgc2N0cF9lcnJvcl9jaHVuayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJLyog
b3B0aW9uYWwgZXJyb3IgY2F1c2VzIGZvbGxvdyAqLworfSBTQ1RQX1BBQ0tFRDsKKworCisvKiBD
b29raWUgRWNobyAoQ09PS0lFIEVDSE8pICovCitzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVu
ayB7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfc3RhdGVfY29va2ll
IGNvb2tpZTsKK30gU0NUUF9QQUNLRUQ7CisKKy8qIENvb2tpZSBBY2tub3dsZWRnbWVudCAoQ09P
S0lFIEFDSykgKi8KK3N0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmsgeworCXN0cnVjdCBzY3Rw
X2NodW5raGRyIGNoOworfSBTQ1RQX1BBQ0tFRDsKKworLyogRXhwbGljaXQgQ29uZ2VzdGlvbiBO
b3RpZmljYXRpb24gRWNobyAoRUNORSkgKi8KK3N0cnVjdCBvbGRfc2N0cF9lY25lX2NodW5rIHsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50MzJfdCB0c247Cit9IFNDVFBfUEFDS0VE
OworCitzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsK
Kwl1aW50MzJfdCB0c247CisJdWludDMyX3QgbnVtX3BrdHNfc2luY2VfY3dyOworfSBTQ1RQX1BB
Q0tFRDsKKworLyogQ29uZ2VzdGlvbiBXaW5kb3cgUmVkdWNlZCAoQ1dSKSAqLworc3RydWN0IHNj
dHBfY3dyX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciBjaDsKKwl1aW50MzJfdCB0c247
Cit9IFNDVFBfUEFDS0VEOworCisvKiBTaHV0ZG93biBDb21wbGV0ZSAoU0hVVERPV04gQ09NUExF
VEUpICovCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayB7CisJc3RydWN0IHNj
dHBfY2h1bmtoZHIgY2g7Cit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9u
X2xheWVyX2luZGljYXRpb24geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90
IGluZGljYXRpb247Cit9IFNDVFBfUEFDS0VEOworCisvKgorICogZHJhZnQtaWV0Zi10c3Z3Zy1h
ZGRpcC1zY3RwCisgKi8KKy8qIEFkZHJlc3MvU3RyZWFtIENvbmZpZ3VyYXRpb24gQ2hhbmdlIChB
U0NPTkYpICovCitzdHJ1Y3Qgc2N0cF9hc2NvbmZfY2h1bmsgeworCXN0cnVjdCBzY3RwX2NodW5r
aGRyIGNoOworCXVpbnQzMl90IHNlcmlhbF9udW1iZXI7CisJLyogbG9va3VwIGFkZHJlc3MgcGFy
YW1ldGVyIChtYW5kYXRvcnkpICovCisJLyogYXNjb25mIHBhcmFtZXRlcnMgZm9sbG93ICovCit9
IFNDVFBfUEFDS0VEOworCisvKiBBZGRyZXNzL1N0cmVhbSBDb25maWd1cmF0aW9uIEFja25vd2xl
ZGdlIChBU0NPTkYgQUNLKSAqLworc3RydWN0IHNjdHBfYXNjb25mX2Fja19jaHVuayB7CisJc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJdWludDMyX3Qgc2VyaWFsX251bWJlcjsKKwkvKiBhc2Nv
bmYgcGFyYW1ldGVycyBmb2xsb3cgKi8KK30gU0NUUF9QQUNLRUQ7CisKKy8qIGRyYWZ0LWlldGYt
dHN2d2ctcHJzY3RwICovCisvKiBGb3J3YXJkIEN1bXVsYXRpdmUgVFNOIChGT1JXQVJEIFRTTikg
Ki8KK3N0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciBjaDsKKwl1aW50MzJfdCBuZXdfY3VtdWxhdGl2ZV90c247CisJLyogc3RyZWFtL3NlcXVlbmNl
IHBhaXJzIChzY3RwX3N0cnNlcSkgZm9sbG93ICovCit9IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qg
c2N0cF9zdHJzZXEgeworCXVpbnQxNl90IHNpZDsKKwl1aW50MTZfdCBzc247Cit9IFNDVFBfUEFD
S0VEOworCitzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkIHsKKwl1aW50MTZfdCBzaWQ7CisJdWludDE2
X3QgZmxhZ3M7CisJdWludDMyX3QgbWlkOworfTsKKworc3RydWN0IHNjdHBfZm9yd2FyZF90c25f
bXNnIHsKKwlzdHJ1Y3Qgc2N0cGhkciBzaDsKKwlzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVu
ayBtc2c7Cit9IFNDVFBfUEFDS0VEOworCisvKiBzaG91bGQgYmUgYSBtdWx0aXBsZSBvZiA0IC0g
MSBha2EgMy83LzExIGV0Yy4gKi8KKworI2RlZmluZSBTQ1RQX05VTV9EQl9UT19WRVJJRlkgMzEK
Kworc3RydWN0IHNjdHBfY2h1bmtfZGVzYyB7CisJdWludDhfdCBjaHVua190eXBlOworCXVpbnQ4
X3QgZGF0YV9ieXRlc1tTQ1RQX05VTV9EQl9UT19WRVJJRlldOworCXVpbnQzMl90IHRzbl9pZmFu
eTsKK30gU0NUUF9QQUNLRUQ7CisKKworc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayB7CisJc3Ry
dWN0IHNjdHBfY2h1bmtoZHIgY2g7CisJdWludDMyX3QgYm90dGxlX2J3OworCXVpbnQzMl90IGN1
cnJlbnRfb25xOworCXVpbnQxNl90IHRydW5jX2xlbjsKKwl1aW50MTZfdCByZXNlcnZlZDsKKwl1
aW50OF90IGRhdGFbXTsKK30gU0NUUF9QQUNLRUQ7CisKKy8qKioqKioqKioqU1RSRUFNIFJFU0VU
IFNUVUZGICoqKioqKioqKioqKioqKioqKi8KKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jl
cXVlc3QgeworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHJlcXVlc3Rfc2Vx
OworfSBTQ1RQX1BBQ0tFRDsKKworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0
IHsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsJLyog
bW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIHNlcSBubyAqLworCXVpbnQzMl90IHJlc3BvbnNlX3Nl
cTsJLyogaWYgYSByZXNwb25zZSwgdGhlIHJlc3Agc2VxIG5vICovCisJdWludDMyX3Qgc2VuZF9y
ZXNldF9hdF90c247CS8qIGxhc3QgVFNOIEkgYXNzaWduZWQgb3V0Ym91bmQgKi8KKwl1aW50MTZf
dCBsaXN0X29mX3N0cmVhbXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30g
U0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0IHsKKwlz
dHJ1Y3Qgc2N0cF9wYXJhbWhkciBwaDsKKwl1aW50MzJfdCByZXF1ZXN0X3NlcTsKKwl1aW50MTZf
dCBsaXN0X29mX3N0cmVhbXNbXTsJLyogaWYgbm90IGFsbCBsaXN0IG9mIHN0cmVhbXMgKi8KK30g
U0NUUF9QQUNLRUQ7CisKK3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCB7CisJ
c3RydWN0IHNjdHBfcGFyYW1oZHIgcGg7CisJdWludDMyX3QgcmVxdWVzdF9zZXE7Cit9IFNDVFBf
UEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgeworCXN0cnVjdCBz
Y3RwX3BhcmFtaGRyIHBoOworCXVpbnQzMl90IHJlc3BvbnNlX3NlcTsJLyogaWYgYSByZXNwb25z
ZSwgdGhlIHJlc3Agc2VxIG5vICovCisJdWludDMyX3QgcmVzdWx0OworfSBTQ1RQX1BBQ0tFRDsK
Kworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiB7CisJc3RydWN0IHNjdHBf
cGFyYW1oZHIgcGg7CisJdWludDMyX3QgcmVzcG9uc2Vfc2VxOwkvKiBpZiBhIHJlc3BvbnNlLCB0
aGUgcmVzcCBzZXEgbm8gKi8KKwl1aW50MzJfdCByZXN1bHQ7CisJdWludDMyX3Qgc2VuZGVyc19u
ZXh0X3RzbjsKKwl1aW50MzJfdCByZWNlaXZlcnNfbmV4dF90c247Cit9IFNDVFBfUEFDS0VEOwor
CitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0geworICBzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciBwaDsKKyAgdWludDMyX3QgcmVxdWVzdF9zZXE7CisgIHVpbnQxNl90IG51bWJlcl9vZl9z
dHJlYW1zOworICB1aW50MTZfdCByZXNlcnZlZDsKK30gU0NUUF9QQUNLRUQ7CisKKyNkZWZpbmUg
U0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX05PVEhJTkdfVE9fRE8gICAweDAwMDAwMDAwIC8qIFhY
WDogdW51c2VkICovCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQg
ICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVE
ICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VS
Ul9fV1JPTkdfU1NOICAweDAwMDAwMDAzIC8qIFhYWDogdW51c2VkICovCisjZGVmaW5lIFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfSU5fUFJPR1JFU1MgMHgwMDAwMDAwNAorI2RlZmluZSBT
Q1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyAgIDB4MDAwMDAwMDUKKyNkZWZp
bmUgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0lOX1BST0dSRVNTICAgICAweDAwMDAwMDA2IC8q
IFhYWDogdW51c2VkICovCisKKy8qCisgKiBjb252aWVuY2Ugc3RydWN0dXJlcywgbm90ZSB0aGF0
IGlmIHlvdSBhcmUgbWFraW5nIGEgcmVxdWVzdCBmb3Igc3BlY2lmaWMKKyAqIHN0cmVhbXMgdGhl
biB0aGUgcmVxdWVzdCB3aWxsIG5lZWQgdG8gYmUgYW4gb3ZlcmxheSBzdHJ1Y3R1cmUuCisgKi8K
Kworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXEgeworCXN0cnVjdCBzY3RwX2NodW5r
aGRyIGNoOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCBzcl9yZXE7Cit9
IFNDVFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcCB7CisJc3RydWN0
IHNjdHBfY2h1bmtoZHIgY2g7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlIHNy
X3Jlc3A7Cit9IFNDVFBfUEFDS0VEOworCisvKiByZXNwb25lIG9ubHkgdmFsaWQgd2l0aCBhIFRT
TiByZXF1ZXN0ICovCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcF90c24geworCXN0cnVj
dCBzY3RwX2NodW5raGRyIGNoOworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90
c24gc3JfcmVzcDsKK30gU0NUUF9QQUNLRUQ7CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogQXV0aGVudGljYXRlZCBjaHVu
a3Mgc3VwcG9ydCBkcmFmdC1pZXRmLXRzdndnLXNjdHAtYXV0aAorICovCisKKy8qIFNob3VsZCB3
ZSBtYWtlIHRoZSBtYXggYmUgMzI/ICovCisjZGVmaW5lIFNDVFBfUkFORE9NX01BWF9TSVpFIDI1
Ngorc3RydWN0IHNjdHBfYXV0aF9yYW5kb20geworCXN0cnVjdCBzY3RwX3BhcmFtaGRyIHBoOy8q
IHR5cGUgPSAweDgwMDIgKi8KKwl1aW50OF90IHJhbmRvbV9kYXRhW107Cit9IFNDVFBfUEFDS0VE
OworCitzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgeworCXN0cnVjdCBzY3RwX3BhcmFtaGRy
IHBoOy8qIHR5cGUgPSAweDgwMDMgKi8KKwl1aW50OF90IGNodW5rX3R5cGVzW107Cit9IFNDVFBf
UEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyB7CisJc3RydWN0IHNjdHBfcGFy
YW1oZHIgcGg7LyogdHlwZSA9IDB4ODAwNCAqLworCXVpbnQxNl90IGhtYWNfaWRzW107Cit9IFND
VFBfUEFDS0VEOworCitzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rIHsKKwlzdHJ1Y3Qgc2N0cF9jaHVu
a2hkciBjaDsKKwl1aW50MTZfdCBzaGFyZWRfa2V5X2lkOworCXVpbnQxNl90IGhtYWNfaWQ7CisJ
dWludDhfdCBobWFjW107Cit9IFNDVFBfUEFDS0VEOworCisvKgorICogd2UgcHJlLXJlc2VydmUg
ZW5vdWdoIHJvb20gZm9yIGEgRUNORSBvciBDV1IgQU5EIGEgU0FDSyB3aXRoIG5vIG1pc3NpbmcK
KyAqIHBpZWNlcy4gSWYgRU5DRSBpcyBtaXNzaW5nIHdlIGNvdWxkIGhhdmUgYSBjb3VwbGUgb2Yg
YmxvY2tzLiBUaGlzIHdheSB3ZQorICogb3B0aW1pemUgc28gd2UgTU9TVCBsaWtlbHkgY2FuIGJ1
bmRsZSBhIFNBQ0svRUNOIHdpdGggdGhlIHNtYWxsZXN0IHNpemUKKyAqIGRhdGEgY2h1bmsgSSB3
aWxsIHNwbGl0IGludG8uIFdlIGNvdWxkIGluY3JlYXNlIHRocm91Z2hwdXQgc2xpZ2h0bHkgYnkK
KyAqIHRha2luZyBvdXQgdGhlc2UgdHdvIGJ1dCB0aGUgIDI0LXNhY2svOC1DV1IgaS5lLiAzMiBi
eXRlcyBJIHByZS1yZXNlcnZlIEkKKyAqIGZlZWwgaXMgd29ydGggaXQgZm9yIG5vdy4KKyAqLwor
I2lmbmRlZiBTQ1RQX01BWF9PVkVSSEVBRAorI2lmZGVmIElORVQ2CisjZGVmaW5lIFNDVFBfTUFY
X09WRVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisJCQkgICBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1
bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspICsgXAorCQkJICAg
c2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSkKKworI2RlZmluZSBTQ1RQX01FRF9PVkVSSEVBRCAoc2l6
ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSArIFwKKwkJCSAgIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpCisKKworI2RlZmluZSBTQ1RQ
X01JTl9PVkVSSEVBRCAoc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIFwKKwkJCSAgIHNpemVvZihz
dHJ1Y3Qgc2N0cGhkcikpCisKKyNlbHNlCisjZGVmaW5lIFNDVFBfTUFYX09WRVJIRUFEIChzaXpl
b2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2VjbmVfY2h1bmspICsgXAorCQkJICAg
c2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspICsgXAorCQkJICAgc2l6ZW9mKHN0cnVjdCBp
cCkpCisKKyNkZWZpbmUgU0NUUF9NRURfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRh
X2NodW5rKSArIFwKKwkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBcCisJCQkgICBzaXpl
b2Yoc3RydWN0IGlwKSkKKworCisjZGVmaW5lIFNDVFBfTUlOX09WRVJIRUFEIChzaXplb2Yoc3Ry
dWN0IGlwKSArIFwKKwkJCSAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpCisKKyNlbmRpZiAvKiBJ
TkVUNiAqLworI2VuZGlmIC8qICFTQ1RQX01BWF9PVkVSSEVBRCAqLworCisjZGVmaW5lIFNDVFBf
TUVEX1Y0X09WRVJIRUFEIChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBcCisJCQkg
ICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgXAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBp
cCkpCisKKyNkZWZpbmUgU0NUUF9NSU5fVjRfT1ZFUkhFQUQgKHNpemVvZihzdHJ1Y3QgaXApICsg
XAorCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSkKKworI2lmIGRlZmluZWQoX19XaW5k
b3dzX18pCisjaW5jbHVkZSA8cGFja29mZi5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorI3ByYWdtYSBwYWNrKHBvcCkKKyNlbmRpZgorI3VuZGVmIFNDVFBf
UEFDS0VECisjZW5kaWYJCQkJLyogIV9fc2N0cF9oZWFkZXJfaF9fICovCmRpZmYgLS1naXQgYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlh
ZTc3NWFkOGMyZTQ4YzUzOTEuLjJmYmFjMmZmMGJmN2M5MjkyMGRkZDBjNWVlMDYxZmJmZTBmYzNm
YjQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5j
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5jCkBAIC0wLDAg
KzEsNTc2NSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2luZGF0YS5jIDMzMzk3OSAyMDE4LTA1LTIxIDE0
OjUxOjIwWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3Mu
aD4KKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0
bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNjb25mLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX2luZGF0YS5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9pbnB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5o
PgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYnNkLmg+
CisjZW5kaWYKKy8qCisgKiBOT1RFUzogT24gdGhlIG91dGJvdW5kIHNpZGUgb2YgdGhpbmdzIEkg
bmVlZCB0byBjaGVjayB0aGUgc2FjayB0aW1lciB0bworICogc2VlIGlmIEkgc2hvdWxkIGdlbmVy
YXRlIGEgc2FjayBpbnRvIHRoZSBjaHVuayBxdWV1ZSAoaWYgSSBoYXZlIGRhdGEgdG8KKyAqIHNl
bmQgdGhhdCBpcyBhbmQgd2lsbCBiZSBzZW5kaW5nIGl0IC4uIGZvciBidW5kbGluZy4KKyAqCisg
KiBUaGUgY2FsbGJhY2sgaW4gc2N0cF91c3JyZXEuYyB3aWxsIGdldCBjYWxsZWQgd2hlbiB0aGUg
c29ja2V0IGlzIHJlYWQgZnJvbS4KKyAqIFRoaXMgd2lsbCBjYXVzZSBzY3RwX3NlcnZpY2VfcXVl
dWVzKCkgdG8gZ2V0IGNhbGxlZCBvbiB0aGUgdG9wIGVudHJ5IGluCisgKiB0aGUgbGlzdC4KKyAq
Lworc3RhdGljIHVpbnQzMl90CitzY3RwX2FkZF9jaGtfdG9fY29udHJvbChzdHJ1Y3Qgc2N0cF9x
dWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybSwK
KwkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jLAorCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgbG9ja19oZWxkKTsKKwor
Cit2b2lkCitzY3RwX3NldF9yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MpCit7CisJYXNvYy0+bXlfcnduZCA9IHNjdHBfY2FsY19yd25kKHN0
Y2IsIGFzb2MpOworfQorCisvKiBDYWxjdWxhdGUgd2hhdCB0aGUgcnduZCB3b3VsZCBiZSAqLwor
dWludDMyX3QKK3NjdHBfY2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJdWludDMyX3QgY2FsYyA9IDA7CisKKwkvKgorCSAq
IFRoaXMgaXMgcmVhbGx5IHNldCB3cm9uZyB3aXRoIHJlc3BlY3QgdG8gYSAxLTItbSBzb2NrZXQu
IFNpbmNlCisJICogdGhlIHNiX2NjIGlzIHRoZSBjb3VudCB0aGF0IGV2ZXJ5b25lIGFzIHB1dCB1
cC4gV2hlbiB3ZSByZS13cml0ZQorCSAqIHNjdHBfc29yZWNlaXZlIHRoZW4gd2Ugd2lsbCBmaXgg
dGhpcyBzbyB0aGF0IE9OTFkgdGhpcworCSAqIGFzc29jaWF0aW9ucyBkYXRhIGlzIHRha2VuIGlu
dG8gYWNjb3VudC4KKwkgKi8KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQly
ZXR1cm4gKGNhbGMpOworCX0KKworCUtBU1NFUlQoYXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlID4g
MCB8fCBhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID09IDAsCisJICAgICAgICAoInNpemVfb25f
cmVhc21fcXVldWUgaXMgJXUiLCBhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlKSk7CisJS0FTU0VS
VChhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMgPiAwIHx8IGFzb2MtPnNpemVfb25fYWxsX3N0cmVh
bXMgPT0gMCwKKwkgICAgICAgICgic2l6ZV9vbl9hbGxfc3RyZWFtcyBpcyAldSIsIGFzb2MtPnNp
emVfb25fYWxsX3N0cmVhbXMpKTsKKwlpZiAoc3RjYi0+YXNvYy5zYl9jYyA9PSAwICYmCisJICAg
IGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSA9PSAwICYmCisJICAgIGFzb2MtPmNudF9vbl9hbGxf
c3RyZWFtcyA9PSAwKSB7CisJCS8qIEZ1bGwgcnduZCBncmFudGVkICovCisJCWNhbGMgPSBtYXgo
U0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2NrZXQpLCBTQ1RQX01JTklNQUxfUldORCk7
CisJCXJldHVybiAoY2FsYyk7CisJfQorCS8qIGdldCBhY3R1YWwgc3BhY2UgKi8KKwljYWxjID0g
KHVpbnQzMl90KSBzY3RwX3Nic3BhY2UoJnN0Y2ItPmFzb2MsICZzdGNiLT5zY3RwX3NvY2tldC0+
c29fcmN2KTsKKwkvKgorCSAqIHRha2Ugb3V0IHdoYXQgaGFzIE5PVCBiZWVuIHB1dCBvbiBzb2Nr
ZXQgcXVldWUgYW5kIHdlIHlldCBob2xkCisJICogZm9yIHB1dHRpbmcgdXAuCisJICovCisJY2Fs
YyA9IHNjdHBfc2JzcGFjZV9zdWIoY2FsYywgKHVpbnQzMl90KShhc29jLT5zaXplX29uX3JlYXNt
X3F1ZXVlICsKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzb2Mt
PmNudF9vbl9yZWFzbV9xdWV1ZSAqIE1TSVpFKSk7CisJY2FsYyA9IHNjdHBfc2JzcGFjZV9zdWIo
Y2FsYywgKHVpbnQzMl90KShhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zICsKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyAq
IE1TSVpFKSk7CisJaWYgKGNhbGMgPT0gMCkgeworCQkvKiBvdXQgb2Ygc3BhY2UgKi8KKwkJcmV0
dXJuIChjYWxjKTsKKwl9CisKKwkvKiB3aGF0IGlzIHRoZSBvdmVyaGVhZCBvZiBhbGwgdGhlc2Ug
cnduZCdzICovCisJY2FsYyA9IHNjdHBfc2JzcGFjZV9zdWIoY2FsYywgc3RjYi0+YXNvYy5teV9y
d25kX2NvbnRyb2xfbGVuKTsKKwkvKiBJZiB0aGUgd2luZG93IGdldHMgdG9vIHNtYWxsIGR1ZSB0
byBjdHJsLXN0dWZmLCByZWR1Y2UgaXQKKwkgKiB0byAxLCBldmVuIGl0IGlzIDAuIFNXUyBlbmdh
Z2VkCisJICovCisJaWYgKGNhbGMgPCBzdGNiLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4pIHsK
KwkJY2FsYyA9IDE7CisJfQorCXJldHVybiAoY2FsYyk7Cit9CisKKworCisvKgorICogQnVpbGQg
b3V0IG91ciByZWFkcSBlbnRyeSBiYXNlZCBvbiB0aGUgaW5jb21pbmcgcGFja2V0LgorICovCitz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqCitzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgdWludDMy
X3QgdHNuLCB1aW50MzJfdCBwcGlkLAorICAgIHVpbnQzMl90IGNvbnRleHQsIHVpbnQxNl90IHNp
ZCwKKyAgICB1aW50MzJfdCBtaWQsIHVpbnQ4X3QgZmxhZ3MsCisgICAgc3RydWN0IG1idWYgKmRt
KQoreworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpyZWFkX3F1ZXVlX2UgPSBOVUxMOwor
CisJc2N0cF9hbGxvY19hX3JlYWRxKHN0Y2IsIHJlYWRfcXVldWVfZSk7CisJaWYgKHJlYWRfcXVl
dWVfZSA9PSBOVUxMKSB7CisJCWdvdG8gZmFpbGVkX2J1aWxkOworCX0KKwltZW1zZXQocmVhZF9x
dWV1ZV9lLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpKTsKKwlyZWFkX3F1
ZXVlX2UtPnNpbmZvX3N0cmVhbSA9IHNpZDsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX2ZsYWdzID0g
KGZsYWdzIDw8IDgpOworCXJlYWRfcXVldWVfZS0+c2luZm9fcHBpZCA9IHBwaWQ7CisJcmVhZF9x
dWV1ZV9lLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX3Rz
biA9IHRzbjsKKwlyZWFkX3F1ZXVlX2UtPnNpbmZvX2N1bXRzbiA9IHRzbjsKKwlyZWFkX3F1ZXVl
X2UtPnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwlyZWFkX3F1ZXVl
X2UtPm1pZCA9IG1pZDsKKwlyZWFkX3F1ZXVlX2UtPnRvcF9mc24gPSByZWFkX3F1ZXVlX2UtPmZz
bl9pbmNsdWRlZCA9IDB4ZmZmZmZmZmY7CisJVEFJTFFfSU5JVCgmcmVhZF9xdWV1ZV9lLT5yZWFz
bSk7CisJcmVhZF9xdWV1ZV9lLT53aG9Gcm9tID0gbmV0OworCWF0b21pY19hZGRfaW50KCZuZXQt
PnJlZl9jb3VudCwgMSk7CisJcmVhZF9xdWV1ZV9lLT5kYXRhID0gZG07CisJcmVhZF9xdWV1ZV9l
LT5zdGNiID0gc3RjYjsKKwlyZWFkX3F1ZXVlX2UtPnBvcnRfZnJvbSA9IHN0Y2ItPnJwb3J0Owor
ZmFpbGVkX2J1aWxkOgorCXJldHVybiAocmVhZF9xdWV1ZV9lKTsKK30KKworc3RydWN0IG1idWYg
Kgorc2N0cF9idWlsZF9jdGxfbmNodW5rKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBz
Y3RwX3NuZHJjdmluZm8gKnNpbmZvKQoreworCXN0cnVjdCBzY3RwX2V4dHJjdmluZm8gKnNlaW5m
bzsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpvdXRpbmZvOworCXN0cnVjdCBzY3RwX3Jjdmlu
Zm8gKnJjdmluZm87CisJc3RydWN0IHNjdHBfbnh0aW5mbyAqbnh0aW5mbzsKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJV1NBQ01TR0hEUiAqY21oOworI2Vsc2UKKwlzdHJ1
Y3QgY21zZ2hkciAqY21oOworI2VuZGlmCisJc3RydWN0IG1idWYgKnJldDsKKwlpbnQgbGVuOwor
CWludCB1c2VfZXh0ZW5kZWQ7CisJaW50IHByb3ZpZGVfbnh0OworCisJaWYgKHNjdHBfaXNfZmVh
dHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkgJiYKKwkgICAgc2N0
cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSAmJgorCSAg
ICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB7
CisJCS8qIHVzZXIgZG9lcyBub3Qgd2FudCBhbnkgYW5jaWxsYXJ5IGRhdGEgKi8KKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisKKwlsZW4gPSAwOworCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykpIHsKKwkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9m
KHN0cnVjdCBzY3RwX3JjdmluZm8pKTsKKwl9CisJc2VpbmZvID0gKHN0cnVjdCBzY3RwX2V4dHJj
dmluZm8gKilzaW5mbzsKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfUkVDVk5YVElORk8pICYmCisJICAgIChzZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFND
VFBfTkVYVF9NU0dfQVZBSUwpKSB7CisJCXByb3ZpZGVfbnh0ID0gMTsKKwkJbGVuICs9IENNU0df
U1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKTsKKwl9IGVsc2UgeworCQlwcm92aWRl
X254dCA9IDA7CisJfQorCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWREFUQUlPRVZOVCkpIHsKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKSkgeworCQkJdXNlX2V4dGVuZGVkID0gMTsKKwkJCWxlbiAr
PSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxzZSB7
CisJCQl1c2VfZXh0ZW5kZWQgPSAwOworCQkJbGVuICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVj
dCBzY3RwX3NuZHJjdmluZm8pKTsKKwkJfQorCX0gZWxzZSB7CisJCXVzZV9leHRlbmRlZCA9IDA7
CisJfQorCisJcmV0ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlbiwgMCwgTV9OT1dBSVQsIDEs
IE1UX0RBVEEpOworCWlmIChyZXQgPT0gTlVMTCkgeworCQkvKiBObyBzcGFjZSAqLworCQlyZXR1
cm4gKHJldCk7CisJfQorCVNDVFBfQlVGX0xFTihyZXQpID0gMDsKKworCS8qIFdlIG5lZWQgYSBD
TVNHIGhlYWRlciBmb2xsb3dlZCBieSB0aGUgc3RydWN0ICovCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorCWNtaCA9IG10b2QocmV0LCBXU0FDTVNHSERSICopOworI2Vsc2UK
KwljbWggPSBtdG9kKHJldCwgc3RydWN0IGNtc2doZHIgKik7CisjZW5kaWYKKwkvKgorCSAqIE1h
a2Ugc3VyZSB0aGF0IHRoZXJlIGlzIG5vIHVuLWluaXRpYWxpemVkIHBhZGRpbmcgYmV0d2Vlbgor
CSAqIHRoZSBjbXNnIGhlYWRlciBhbmQgY21zZyBkYXRhIGFuZCBhZnRlciB0aGUgY21zZyBkYXRh
LgorCSAqLworCW1lbXNldChjbWgsIDAsIGxlbik7CisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZSQ1ZJTkZPKSkgeworCQljbWgtPmNtc2dfbGV2ZWwgPSBJ
UFBST1RPX1NDVFA7CisJCWNtaC0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNj
dHBfcmN2aW5mbykpOworCQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfUkNWSU5GTzsKKwkJcmN2aW5m
byA9IChzdHJ1Y3Qgc2N0cF9yY3ZpbmZvICopQ01TR19EQVRBKGNtaCk7CisJCXJjdmluZm8tPnJj
dl9zaWQgPSBzaW5mby0+c2luZm9fc3RyZWFtOworCQlyY3ZpbmZvLT5yY3Zfc3NuID0gc2luZm8t
PnNpbmZvX3NzbjsKKwkJcmN2aW5mby0+cmN2X2ZsYWdzID0gc2luZm8tPnNpbmZvX2ZsYWdzOwor
CQlyY3ZpbmZvLT5yY3ZfcHBpZCA9IHNpbmZvLT5zaW5mb19wcGlkOworCQlyY3ZpbmZvLT5yY3Zf
dHNuID0gc2luZm8tPnNpbmZvX3RzbjsKKwkJcmN2aW5mby0+cmN2X2N1bXRzbiA9IHNpbmZvLT5z
aW5mb19jdW10c247CisJCXJjdmluZm8tPnJjdl9jb250ZXh0ID0gc2luZm8tPnNpbmZvX2NvbnRl
eHQ7CisJCXJjdmluZm8tPnJjdl9hc3NvY19pZCA9IHNpbmZvLT5zaW5mb19hc3NvY19pZDsKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWNtaCA9IChXU0FDTVNHSERSICop
KChjYWRkcl90KWNtaCArIENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pKSk7
CisjZWxzZQorCQljbWggPSAoc3RydWN0IGNtc2doZHIgKikoKGNhZGRyX3QpY21oICsgQ01TR19T
UEFDRShzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5mbykpKTsKKyNlbmRpZgorCQlTQ1RQX0JVRl9M
RU4ocmV0KSArPSBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSk7CisJfQor
CWlmIChwcm92aWRlX254dCkgeworCQljbWgtPmNtc2dfbGV2ZWwgPSBJUFBST1RPX1NDVFA7CisJ
CWNtaC0+Y21zZ19sZW4gPSBDTVNHX0xFTihzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpOwor
CQljbWgtPmNtc2dfdHlwZSA9IFNDVFBfTlhUSU5GTzsKKwkJbnh0aW5mbyA9IChzdHJ1Y3Qgc2N0
cF9ueHRpbmZvICopQ01TR19EQVRBKGNtaCk7CisJCW54dGluZm8tPm54dF9zaWQgPSBzZWluZm8t
PnNlcmluZm9fbmV4dF9zdHJlYW07CisJCW54dGluZm8tPm54dF9mbGFncyA9IDA7CisJCWlmIChz
ZWluZm8tPnNlcmluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEKSB7
CisJCQlueHRpbmZvLT5ueHRfZmxhZ3MgfD0gU0NUUF9VTk9SREVSRUQ7CisJCX0KKwkJaWYgKHNl
aW5mby0+c2VyaW5mb19uZXh0X2ZsYWdzICYgU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04p
IHsKKwkJCW54dGluZm8tPm54dF9mbGFncyB8PSBTQ1RQX05PVElGSUNBVElPTjsKKwkJfQorCQlp
ZiAoc2VpbmZvLT5zZXJpbmZvX25leHRfZmxhZ3MgJiBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUp
IHsKKwkJCW54dGluZm8tPm54dF9mbGFncyB8PSBTQ1RQX0NPTVBMRVRFOworCQl9CisJCW54dGlu
Zm8tPm54dF9wcGlkID0gc2VpbmZvLT5zZXJpbmZvX25leHRfcHBpZDsKKwkJbnh0aW5mby0+bnh0
X2xlbmd0aCA9IHNlaW5mby0+c2VyaW5mb19uZXh0X2xlbmd0aDsKKwkJbnh0aW5mby0+bnh0X2Fz
c29jX2lkID0gc2VpbmZvLT5zZXJpbmZvX25leHRfYWlkOworI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKwkJY21oID0gKFdTQUNNU0dIRFIgKikoKGNhZGRyX3QpY21oICsgQ01T
R19TUEFDRShzaXplb2Yoc3RydWN0IHNjdHBfbnh0aW5mbykpKTsKKyNlbHNlCisJCWNtaCA9IChz
dHJ1Y3QgY21zZ2hkciAqKSgoY2FkZHJfdCljbWggKyBDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3Qg
c2N0cF9ueHRpbmZvKSkpOworI2VuZGlmCisJCVNDVFBfQlVGX0xFTihyZXQpICs9IENNU0dfU1BB
Q0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX254dGluZm8pKTsKKwl9CisJaWYgKHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZEQVRBSU9FVk5UKSkgeworCQljbWgtPmNtc2df
bGV2ZWwgPSBJUFBST1RPX1NDVFA7CisJCW91dGluZm8gPSAoc3RydWN0IHNjdHBfc25kcmN2aW5m
byAqKUNNU0dfREFUQShjbWgpOworCQlpZiAodXNlX2V4dGVuZGVkKSB7CisJCQljbWgtPmNtc2df
bGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsKKwkJCWNtaC0+
Y21zZ190eXBlID0gU0NUUF9FWFRSQ1Y7CisJCQltZW1jcHkob3V0aW5mbywgc2luZm8sIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCQlTQ1RQX0JVRl9MRU4ocmV0KSArPSBDTVNH
X1NQQUNFKHNpemVvZihzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvKSk7CisJCX0gZWxzZSB7CisJCQlj
bWgtPmNtc2dfbGVuID0gQ01TR19MRU4oc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsK
KwkJCWNtaC0+Y21zZ190eXBlID0gU0NUUF9TTkRSQ1Y7CisJCQkqb3V0aW5mbyA9ICpzaW5mbzsK
KwkJCVNDVFBfQlVGX0xFTihyZXQpICs9IENNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBzY3RwX3Nu
ZHJjdmluZm8pKTsKKwkJfQorCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKKworc3RhdGljIHZvaWQK
K3NjdHBfbWFya19ub25fcmV2b2thYmxlKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1
aW50MzJfdCB0c24pCit7CisJdWludDMyX3QgZ2FwLCBpLCBjdW1hY2twMTsKKwlpbnQgZm5kID0g
MDsKKwlpbnQgaW5fcj0wLCBpbl9ucj0wOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9f
ZHJhaW4pID09IDApIHsKKwkJcmV0dXJuOworCX0KKwljdW1hY2twMSA9IGFzb2MtPmN1bXVsYXRp
dmVfdHNuICsgMTsKKwlpZiAoU0NUUF9UU05fR1QoY3VtYWNrcDEsIHRzbikpIHsKKwkJLyogdGhp
cyB0c24gaXMgYmVoaW5kIHRoZSBjdW0gYWNrIGFuZCB0aHVzIHdlIGRvbid0CisJCSAqIG5lZWQg
dG8gd29ycnkgYWJvdXQgaXQgYmVpbmcgbW92ZWQgZnJvbSBvbmUgdG8gdGhlIG90aGVyLgorCQkg
Ki8KKwkJcmV0dXJuOworCX0KKwlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIHRzbiwgYXNvYy0+
bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJaW5fciA9IFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNv
Yy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwlpbl9uciA9IFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNv
Yy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwlpZiAoKGluX3IgPT0gMCkgJiYgKGluX25yID09
IDApKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiVGhpbmdzIGFyZSByZWFsbHkgbWVz
c2VkIHVwIG5vdyIpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoImdhcDoleCB0c246JXhcbiIsIGdh
cCwgdHNuKTsKKwkJc2N0cF9wcmludF9tYXBwaW5nX2FycmF5KGFzb2MpOworI2VuZGlmCisJfQor
CWlmIChpbl9uciA9PSAwKQorCQlTQ1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5n
X2FycmF5LCBnYXApOworCWlmIChpbl9yKQorCQlTQ1RQX1VOU0VUX1RTTl9QUkVTRU5UKGFzb2Mt
Pm1hcHBpbmdfYXJyYXksIGdhcCk7CisJaWYgKFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21h
cCA9IHRzbjsKKwl9CisJaWYgKHRzbiA9PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSB7
CisJCS8qIFdlIG11c3QgYmFjayBkb3duIHRvIHNlZSB3aGF0IHRoZSBuZXcgaGlnaGVzdCBpcyAq
LworCQlmb3IgKGkgPSB0c24gLSAxOyBTQ1RQX1RTTl9HRShpLCBhc29jLT5tYXBwaW5nX2FycmF5
X2Jhc2VfdHNuKTsgaS0tKSB7CisJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGksIGFzb2Mt
Pm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOworCQkJaWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNv
Yy0+bWFwcGluZ19hcnJheSwgZ2FwKSkgeworCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXAgPSBpOworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmbmQp
IHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5
X2Jhc2VfdHNuIC0gMTsKKwkJfQorCX0KK30KKworc3RhdGljIGludAorc2N0cF9wbGFjZV9jb250
cm9sX2luX3N0cmVhbShzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKnN0cm0sCisJCQkgICAgIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQkJICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqY29udHJvbCkKK3sKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqYXQ7CisJc3Ry
dWN0IHNjdHBfcmVhZGhlYWQgKnE7CisJdWludDhfdCBmbGFncywgdW5vcmRlcmVkOworCisJZmxh
Z3MgPSAoY29udHJvbC0+c2luZm9fZmxhZ3MgPj4gOCk7CisJdW5vcmRlcmVkID0gZmxhZ3MgJiBT
Q1RQX0RBVEFfVU5PUkRFUkVEOworCWlmICh1bm9yZGVyZWQpIHsKKwkJcSA9ICZzdHJtLT51bm9f
aW5xdWV1ZTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAwKSB7CisJCQlpZiAoIVRB
SUxRX0VNUFRZKHEpKSB7CisJCQkJLyogT25seSBvbmUgc3RyZWFtIGNhbiBiZSBoZXJlIGluIG9s
ZCBzdHlsZSAgLS0gYWJvcnQgKi8KKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCVRBSUxRX0lO
U0VSVF9UQUlMKHEsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCWNvbnRyb2wtPm9uX3N0cm1f
cSA9IFNDVFBfT05fVU5PUkRFUkVEOworCQkJcmV0dXJuICgwKTsKKwkJfQorCX0gZWxzZSB7CisJ
CXEgPSAmc3RybS0+aW5xdWV1ZTsKKwl9CisJaWYgKChmbGFncyAmIFNDVFBfREFUQV9OT1RfRlJB
RykgPT0gU0NUUF9EQVRBX05PVF9GUkFHKSB7CisJCWNvbnRyb2wtPmVuZF9hZGRlZCA9IDE7CisJ
CWNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbiA9IDE7CisJCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVu
ID0gMTsKKwl9CisJaWYgKFRBSUxRX0VNUFRZKHEpKSB7CisJCS8qIEVtcHR5IHF1ZXVlICovCisJ
CVRBSUxRX0lOU0VSVF9IRUFEKHEsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJaWYgKHVub3Jk
ZXJlZCkgeworCQkJY29udHJvbC0+b25fc3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQ7CisJCX0g
ZWxzZSB7CisJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX09SREVSRUQ7CisJCX0KKwkJ
cmV0dXJuICgwKTsKKwl9IGVsc2UgeworCQlUQUlMUV9GT1JFQUNIKGF0LCBxLCBuZXh0X2luc3Ry
bSkgeworCQkJaWYgKFNDVFBfTUlEX0dUKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXQtPm1pZCwg
Y29udHJvbC0+bWlkKSkgeworCQkJCS8qCisJCQkJICogb25lIGluIHF1ZXVlIGlzIGJpZ2dlciB0
aGFuIHRoZQorCQkJCSAqIG5ldyBvbmUsIGluc2VydCBiZWZvcmUgdGhpcyBvbmUKKwkJCQkgKi8K
KwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKGF0LCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJ
aWYgKHVub3JkZXJlZCkgeworCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX1VOT1JE
RVJFRDsKKwkJCQl9IGVsc2UgeworCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSBTQ1RQX09OX09S
REVSRUQgOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0gZWxzZSBpZiAoU0NUUF9NSURfRVEoYXNv
Yy0+aWRhdGFfc3VwcG9ydGVkLCBhdC0+bWlkLCBjb250cm9sLT5taWQpKSB7CisJCQkJLyoKKwkJ
CQkgKiBHYWssIEhlIHNlbnQgbWUgYSBkdXBsaWNhdGUgbXNnCisJCQkJICogaWQgbnVtYmVyPz8g
cmV0dXJuIC0xIHRvIGFib3J0LgorCQkJCSAqLworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNl
IHsKKwkJCQlpZiAoVEFJTFFfTkVYVChhdCwgbmV4dF9pbnN0cm0pID09IE5VTEwpIHsKKwkJCQkJ
LyoKKwkJCQkJICogV2UgYXJlIGF0IHRoZSBlbmQsIGluc2VydAorCQkJCQkgKiBpdCBhZnRlciB0
aGlzIG9uZQorCQkJCQkgKi8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19zdHJt
X2RlbChjb250cm9sLCBhdCwKKwkJCQkJCQkJICBTQ1RQX1NUUl9MT0dfRlJPTV9JTlNFUlRfVEwp
OworCQkJCQl9CisJCQkJCVRBSUxRX0lOU0VSVF9BRlRFUihxLCBhdCwgY29udHJvbCwgbmV4dF9p
bnN0cm0pOworCQkJCQlpZiAodW5vcmRlcmVkKSB7CisJCQkJCQljb250cm9sLT5vbl9zdHJtX3Eg
PSBTQ1RQX09OX1VOT1JERVJFRCA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250cm9sLT5vbl9z
dHJtX3EgPSBTQ1RQX09OX09SREVSRUQgOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0KKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9hYm9ydF9p
bl9yZWFzbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAorICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAgICAgICAgICAgICAgICAgIGludCAqYWJvcnRf
ZmxhZywgaW50IG9wc3BvdCkKK3sKKwljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCXN0
cnVjdCBtYnVmICpvcGVyOworCisJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkKSB7CisJ
CXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCisJCQkgIlJlYXNzICV4LENGOiV4LFRTTj0lOC44
eCxTSUQ9JTQuNHgsRlNOPSU4Ljh4LE1JRDolOC44eCIsCisJCQkgb3BzcG90LAorCQkJIGNvbnRy
b2wtPmZzbl9pbmNsdWRlZCwKKwkJCSBjaGstPnJlYy5kYXRhLnRzbiwKKwkJCSBjaGstPnJlYy5k
YXRhLnNpZCwKKwkJCSBjaGstPnJlYy5kYXRhLmZzbiwgY2hrLT5yZWMuZGF0YS5taWQpOworCX0g
ZWxzZSB7CisJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCisJCQkgIlJlYXNzICV4LENJOiV4
LFRTTj0lOC44eCxTSUQ9JTQuNHgsRlNOPSU0LjR4LFNTTjolNC40eCIsCisJCQkgb3BzcG90LAor
CQkJIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwKKwkJCSBjaGstPnJlYy5kYXRhLnRzbiwKKwkJCSBj
aGstPnJlYy5kYXRhLnNpZCwKKwkJCSBjaGstPnJlYy5kYXRhLmZzbiwKKwkJCSAodWludDE2X3Qp
Y2hrLT5yZWMuZGF0YS5taWQpOworCX0KKwlvcGVyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwlzY3RwX21fZnJlZW0oY2hrLT5kYXRh
KTsKKwljaGstPmRhdGEgPSBOVUxMOworCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKwlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQ
X0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xOworCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRp
b24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BlciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkqYWJv
cnRfZmxhZyA9IDE7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2NsZWFuX3VwX2NvbnRyb2woc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCkK
K3sKKwkvKiAKKwkgKiBUaGUgY29udHJvbCBjb3VsZCBub3QgYmUgcGxhY2VkIGFuZCBtdXN0IGJl
IGNsZWFuZWQuCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlU
QUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCwgbmNoaykg
eworCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCWlm
IChjaGstPmRhdGEpCisJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJY2hrLT5kYXRhID0g
TlVMTDsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCX0KKwlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsJCit9CisKKy8qCisgKiBR
dWV1ZSB0aGUgY2h1bmsgZWl0aGVyIHJpZ2h0IGludG8gdGhlIHNvY2tldCBidWZmZXIgaWYgaXQg
aXMgdGhlIG5leHQgb25lCisgKiB0byBnbyBPUiBwdXQgaXQgaW4gdGhlIGNvcnJlY3QgcGxhY2Ug
aW4gdGhlIGRlbGl2ZXJ5IHF1ZXVlLiAgSWYgd2UgZG8KKyAqIGFwcGVuZCB0byB0aGUgc29fYnVm
LCBrZWVwIGRvaW5nIHNvIHVudGlsIHdlIGFyZSBvdXQgb2Ygb3JkZXIgYXMKKyAqIGxvbmcgYXMg
dGhlIGNvbnRyb2wncyBlbnRlcmVkIGFyZSBub24tZnJhZ21lbnRlZC4KKyAqLworc3RhdGljIHZv
aWQKK3NjdHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sLCBpbnQgKmFib3J0X2ZsYWcsIGludCAqbmVlZF9yZWFzbSkKK3sKKwkv
KgorCSAqIEZJWC1NRSBtYXliZT8gV2hhdCBoYXBwZW5zIHdoZW4gdGhlIHNzbiB3cmFwcz8gSWYg
d2UgYXJlIGdldHRpbmcKKwkgKiBhbGwgdGhlIGRhdGEgaW4gb25lIHN0cmVhbSB0aGlzIGNvdWxk
IGhhcHBlbiBxdWl0ZSByYXBpZGx5LiBPbmUKKwkgKiBjb3VsZCB1c2UgdGhlIFRTTiB0byBrZWVw
IHRyYWNrIG9mIHRoaW5ncywgYnV0IHRoaXMgc2NoZW1lIGJyZWFrcworCSAqIGRvd24gaW4gdGhl
IG90aGVyIHR5cGUgb2Ygc3RyZWFtIHVzYWdlIHRoYXQgY291bGQgb2NjdXIuIFNlbmQgYQorCSAq
IHNpbmdsZSBtc2cgdG8gc3RyZWFtIDAsIHNlbmQgNEJpbGxpb24gbWVzc2FnZXMgdG8gc3RyZWFt
IDEsIG5vdworCSAqIHNlbmQgYSBtZXNzYWdlIHRvIHN0cmVhbSAwLiBZb3UgaGF2ZSBhIHNpdHVh
dGlvbiB3aGVyZSB0aGUgVFNOCisJICogaGFzIHdyYXBwZWQgYnV0IG5vdCBpbiB0aGUgc3RyZWFt
LiBJcyB0aGlzIHdvcnRoIHdvcnJ5aW5nIGFib3V0CisJICogb3Igc2hvdWxkIHdlIGp1c3QgY2hh
bmdlIG91ciBxdWV1ZSBzb3J0IGF0IHRoZSBib3R0b20gdG8gYmUgYnkKKwkgKiBUU04uCisJICoK
KwkgKiBDb3VsZCBpdCBhbHNvIGJlIGxlZ2FsIGZvciBhIHBlZXIgdG8gc2VuZCBzc24gMSB3aXRo
IFRTTiAyIGFuZCBzc24gMgorCSAqIHdpdGggVFNOIDE/IElmIHRoZSBwZWVyIGlzIGRvaW5nIHNv
bWUgc29ydCBvZiBmdW5reSBUU04vU1NOCisJICogYXNzaWdubWVudCB0aGlzIGNvdWxkIGhhcHBl
bi4uLiBhbmQgSSBkb24ndCBzZWUgaG93IHRoaXMgd291bGQgYmUKKwkgKiBhIHZpb2xhdGlvbi4g
U28gZm9yIG5vdyBJIGFtIHVuZGVjaWRlZCBhbiB3aWxsIGxlYXZlIHRoZSBzb3J0IGJ5CisJICog
U1NOIGFsb25lLiBNYXliZSBhIGh5YnJlZCBhcHByb2FjaCBpcyB0aGUgYW5zd2VyCisJICoKKwkg
Ki8KKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqYXQ7CisJaW50IHF1ZXVlX25lZWRlZDsK
Kwl1aW50MzJfdCBueHRfdG9kZWw7CisJc3RydWN0IG1idWYgKm9wX2VycjsKKwlzdHJ1Y3Qgc2N0
cF9zdHJlYW1faW4gKnN0cm07CisJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCXN0
cm0gPSAmYXNvYy0+c3RybWluW2NvbnRyb2wtPnNpbmZvX3N0cmVhbV07CisJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxFKSB7
CisJCXNjdHBfbG9nX3N0cm1fZGVsKGNvbnRyb2wsIE5VTEwsIFNDVFBfU1RSX0xPR19GUk9NX0lO
VE9fU1RSRCk7CisJfQorCWlmIChTQ1RQX01JRF9HVCgoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSwg
c3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLCBjb250cm9sLT5taWQpKSB7CisJCS8qIFRoZSBpbmNv
bWluZyBzc2VxIGlzIGJlaGluZCB3aGVyZSB3ZSBsYXN0IGRlbGl2ZXJlZD8gKi8KKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOREFUQTEsICJEdXBsaWNhdGUgUy1TRVE6ICV1IGRlbGl2ZXJlZDogJXUg
ZnJvbSBwZWVyLCBBYm9ydCBhc3NvY2lhdGlvblxuIiwKKwkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2
ZXJlZCwgY29udHJvbC0+bWlkKTsKKwkJLyoKKwkJICogdGhyb3cgaXQgaW4gdGhlIHN0cmVhbSBz
byBpdCBnZXRzIGNsZWFuZWQgdXAgaW4KKwkJICogYXNzb2NpYXRpb24gZGVzdHJ1Y3Rpb24KKwkJ
ICovCisJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2lu
c3RybSk7CisJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksICJEZWxpdmVyZWQgTUlEPSU4Ljh4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9JTQu
NHgsIE1JRD0lOC44eCIsCisJCQkgICAgICAgICBzdHJtLT5sYXN0X21pZF9kZWxpdmVyZWQsIGNv
bnRyb2wtPnNpbmZvX3RzbiwKKwkJCSAgICAgICAgIGNvbnRyb2wtPnNpbmZvX3N0cmVhbSwgY29u
dHJvbC0+bWlkKTsKKwkJfSBlbHNlIHsKKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJE
ZWxpdmVyZWQgU1NOPSU0LjR4LCBnb3QgVFNOPSU4Ljh4LCBTSUQ9JTQuNHgsIFNTTj0lNC40eCIs
CisJCQkgICAgICAgICAodWludDE2X3Qpc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLAorCQkJICAg
ICAgICAgY29udHJvbC0+c2luZm9fdHNuLAorCQkJICAgICAgICAgY29udHJvbC0+c2luZm9fc3Ry
ZWFtLAorCQkJICAgICAgICAgKHVpbnQxNl90KWNvbnRyb2wtPm1pZCk7CisJCX0KKwkJb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNn
KTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5E
QVRBICsgU0NUUF9MT0NfMjsKKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCSphYm9ydF9mbGFnID0g
MTsKKwkJcmV0dXJuOworCisJfQorCXF1ZXVlX25lZWRlZCA9IDE7CisJYXNvYy0+c2l6ZV9vbl9h
bGxfc3RyZWFtcyArPSBjb250cm9sLT5sZW5ndGg7CisJc2N0cF91Y291bnRfaW5jcihhc29jLT5j
bnRfb25fYWxsX3N0cmVhbXMpOworCW54dF90b2RlbCA9IHN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJl
ZCArIDE7CisJaWYgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbnh0X3RvZGVs
LCBjb250cm9sLT5taWQpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAxKTsKKwkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
KwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCS8qIGNhbiBiZSBkZWxpdmVyZWQgcmlnaHQgYXdh
eT8gKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
U1RSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3RwX2xvZ19zdHJtX2RlbChjb250cm9sLCBOVUxM
LCBTQ1RQX1NUUl9MT0dfRlJPTV9JTU1FRF9ERUwpOworCQl9CisJCS8qIEVZIGl0IHdvbnQgYmUg
cXVldWVkIGlmIGl0IGNvdWxkIGJlIGRlbGl2ZXJlZCBkaXJlY3RseSAqLworCQlxdWV1ZV9uZWVk
ZWQgPSAwOworCQlpZiAoYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5n
dGgpIHsKKwkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOwor
CQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJl
YW1zID0gJXUgc21hbGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9h
bGxfc3RyZWFtcywgY29udHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJCQlhc29jLT5zaXplX29uX2Fs
bF9zdHJlYW1zID0gMDsKKyNlbmRpZgorCQl9CisJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250
X29uX2FsbF9zdHJlYW1zKTsKKwkJc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkKys7CisJCXNjdHBf
bWFya19ub25fcmV2b2thYmxlKGFzb2MsIGNvbnRyb2wtPnNpbmZvX3Rzbik7CisJCXNjdHBfYWRk
X3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCSAgICAgICAgICAgICAgICAgIGNvbnRy
b2wsCisJCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLAor
CQkgICAgICAgICAgICAgICAgICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19MT0NL
RUQpOworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY29udHJvbCwgJnN0cm0tPmlucXVldWUsIG5leHRf
aW5zdHJtLCBhdCkgeworCQkJLyogYWxsIGRlbGl2ZXJlZCAqLworCQkJbnh0X3RvZGVsID0gc3Ry
bS0+bGFzdF9taWRfZGVsaXZlcmVkICsgMTsKKwkJCWlmIChTQ1RQX01JRF9FUShhc29jLT5pZGF0
YV9zdXBwb3J0ZWQsIG54dF90b2RlbCwgY29udHJvbC0+bWlkKSAmJgorCQkJICAgICgoKGNvbnRy
b2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFf
Tk9UX0ZSQUcpKSB7CisJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVS
RUQpIHsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2lu
c3RybSk7CisJCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxl
bmd0aCkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5n
dGg7CisJCQkJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQkJcGFuaWMoInNpemVf
b25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29j
LT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJCWFz
b2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJCQkJCX0KKwkJCQkJc2N0cF91
Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCQl9IGVsc2UgeworCQkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIGlzIG9uX3N0cm1fcTog
JWQiLAorCQkJCQkgICAgICBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJ
CQkJfQorCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJc3RybS0+bGFzdF9taWRfZGVs
aXZlcmVkKys7CisJCQkJLyoKKwkJCQkgKiBXZSBpZ25vcmUgdGhlIHJldHVybiBvZiBkZWxpdmVy
X2RhdGEgaGVyZQorCQkJCSAqIHNpbmNlIHdlIGFsd2F5cyBjYW4gaG9sZCB0aGUgY2h1bmsgb24g
dGhlCisJCQkJICogZC1xdWV1ZS4gQW5kIHdlIGhhdmUgYSBmaW5pdGUgbnVtYmVyIHRoYXQKKwkJ
CQkgKiBjYW4gYmUgZGVsaXZlcmVkIGZyb20gdGhlIHN0cnEuCisJCQkJICovCisJCQkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5B
QkxFKSB7CisJCQkJCXNjdHBfbG9nX3N0cm1fZGVsKGNvbnRyb2wsIE5VTEwsCisJCQkJCQkJICBT
Q1RQX1NUUl9MT0dfRlJPTV9JTU1FRF9ERUwpOworCQkJCX0KKwkJCQlzY3RwX21hcmtfbm9uX3Jl
dm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJCXNjdHBfYWRkX3RvX3JlYWRx
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJICAgICAgICAgICAgICAgICAgY29udHJvbCwKKwkJ
CQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkJCQkg
ICAgICAgICAgICAgICAgICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwKKwkJCQkgICAgICAgICAg
ICAgICAgICBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKFND
VFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbnh0X3RvZGVsLCBjb250cm9sLT5taWQp
KSB7CisJCQkJKm5lZWRfcmVhc20gPSAxOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJU0NUUF9T
T0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCX0KKwlpZiAocXVldWVfbmVlZGVkKSB7CisJ
CS8qCisJCSAqIE9rLCB3ZSBkaWQgbm90IGRlbGl2ZXIgdGhpcyBndXksIGZpbmQgdGhlIGNvcnJl
Y3QgcGxhY2UKKwkJICogdG8gcHV0IGl0IG9uIHRoZSBxdWV1ZS4KKwkJICovCisJCWlmIChzY3Rw
X3BsYWNlX2NvbnRyb2xfaW5fc3RyZWFtKHN0cm0sIGFzb2MsIGNvbnRyb2wpKSB7CisJCQlzbnBy
aW50Zihtc2csIHNpemVvZihtc2cpLAorCQkJCSAiUXVldWUgdG8gc3RyIE1JRDogJXUgZHVwbGlj
YXRlIiwKKwkJCQkgY29udHJvbC0+bWlkKTsKKwkJCXNjdHBfY2xlYW5fdXBfY29udHJvbChzdGNi
LCBjb250cm9sKTsKKwkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9Q
Uk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2Nv
ZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18zOworCQkJc2N0cF9hYm9ydF9h
bl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJCQkqYWJvcnRfZmxhZyA9IDE7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQK
K3NjdHBfc2V0dXBfdGFpbF9wb2ludGVyKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sKQoreworCXN0cnVjdCBtYnVmICptLCAqcHJldiA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNi
ICpzdGNiOworCisJc3RjYiA9IGNvbnRyb2wtPnN0Y2I7CisJY29udHJvbC0+aGVsZF9sZW5ndGgg
PSAwOworCWNvbnRyb2wtPmxlbmd0aCA9IDA7CisJbSA9IGNvbnRyb2wtPmRhdGE7CisJd2hpbGUg
KG0pIHsKKwkJaWYgKFNDVFBfQlVGX0xFTihtKSA9PSAwKSB7CisJCQkvKiBTa2lwIG1idWZzIHdp
dGggTk8gbGVuZ3RoICovCisJCQlpZiAocHJldiA9PSBOVUxMKSB7CisJCQkJLyogRmlyc3Qgb25l
ICovCisJCQkJY29udHJvbC0+ZGF0YSA9IHNjdHBfbV9mcmVlKG0pOworCQkJCW0gPSBjb250cm9s
LT5kYXRhOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHByZXYpID0gc2N0cF9tX2Zy
ZWUobSk7CisJCQkJbSA9IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9CisJCQlpZiAobSA9PSBO
VUxMKSB7CisJCQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJCX0KKwkJCWNvbnRpbnVl
OworCQl9CisJCXByZXYgPSBtOworCQlhdG9taWNfYWRkX2ludCgmY29udHJvbC0+bGVuZ3RoLCBT
Q1RQX0JVRl9MRU4obSkpOworCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkvKgorCQkJ
ICogT24gcmVhZCBxdWV1ZSBzbyB3ZSBtdXN0IGluY3JlbWVudCB0aGUKKwkJCSAqIFNCIHN0dWZm
LCB3ZSBhc3N1bWUgY2FsbGVyIGhhcyBkb25lIGFueSBsb2NrcyBvZiBTQi4KKwkJCSAqLworCQkJ
c2N0cF9zYmFsbG9jKHN0Y2IsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBtKTsKKwkJfQor
CQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwl9CisJaWYgKHByZXYpIHsKKwkJY29udHJvbC0+dGFp
bF9tYnVmID0gcHJldjsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2FkZF90b190YWlsX3Bv
aW50ZXIoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsIHN0cnVjdCBtYnVmICpt
LCB1aW50MzJfdCAqYWRkZWQpCit7CisJc3RydWN0IG1idWYgKnByZXY9TlVMTDsKKwlzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2I7CisKKwlzdGNiID0gY29udHJvbC0+c3RjYjsKKwlpZiAoc3RjYiA9PSBO
VUxMKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiQ29udHJvbCBicm9rZW4iKTsKKyNl
bHNlCisJCXJldHVybjsKKyNlbmRpZgorCX0KKwlpZiAoY29udHJvbC0+dGFpbF9tYnVmID09IE5V
TEwpIHsKKwkJLyogVFNOSCAqLworCQljb250cm9sLT5kYXRhID0gbTsKKwkJc2N0cF9zZXR1cF90
YWlsX3BvaW50ZXIoY29udHJvbCk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+dGFpbF9tYnVm
LT5tX25leHQgPSBtOworCXdoaWxlIChtKSB7CisJCWlmIChTQ1RQX0JVRl9MRU4obSkgPT0gMCkg
eworCQkJLyogU2tpcCBtYnVmcyB3aXRoIE5PIGxlbmd0aCAqLworCQkJaWYgKHByZXYgPT0gTlVM
TCkgeworCQkJCS8qIEZpcnN0IG9uZSAqLworCQkJCWNvbnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0
ID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IGNvbnRyb2wtPnRhaWxfbWJ1Zi0+bV9uZXh0Owor
CQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0JVRl9ORVhUKHByZXYpID0gc2N0cF9tX2ZyZWUobSk7CisJ
CQkJbSA9IFNDVFBfQlVGX05FWFQocHJldik7CisJCQl9CisJCQlpZiAobSA9PSBOVUxMKSB7CisJ
CQkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJ
CXByZXYgPSBtOworCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkvKgorCQkJICogT24g
cmVhZCBxdWV1ZSBzbyB3ZSBtdXN0IGluY3JlbWVudCB0aGUKKwkJCSAqIFNCIHN0dWZmLCB3ZSBh
c3N1bWUgY2FsbGVyIGhhcyBkb25lIGFueSBsb2NrcyBvZiBTQi4KKwkJCSAqLworCQkJc2N0cF9z
YmFsbG9jKHN0Y2IsICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBtKTsKKwkJfQorCQkqYWRk
ZWQgKz0gU0NUUF9CVUZfTEVOKG0pOworCQlhdG9taWNfYWRkX2ludCgmY29udHJvbC0+bGVuZ3Ro
LCBTQ1RQX0JVRl9MRU4obSkpOworCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwl9CisJaWYgKHBy
ZXYpIHsKKwkJY29udHJvbC0+dGFpbF9tYnVmID0gcHJldjsKKwl9Cit9CisKK3N0YXRpYyB2b2lk
IAorc2N0cF9idWlsZF9yZWFkcV9lbnRyeV9mcm9tX2N0bChzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqbmMsIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sKQoreworCW1lbXNl
dChuYywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkKSk7CisJbmMtPnNpbmZv
X3N0cmVhbSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKKwluYy0+bWlkID0gY29udHJvbC0+bWlk
OworCVRBSUxRX0lOSVQoJm5jLT5yZWFzbSk7CisJbmMtPnRvcF9mc24gPSBjb250cm9sLT50b3Bf
ZnNuOworCW5jLT5taWQgPSBjb250cm9sLT5taWQ7CisJbmMtPnNpbmZvX2ZsYWdzID0gY29udHJv
bC0+c2luZm9fZmxhZ3M7CisJbmMtPnNpbmZvX3BwaWQgPSBjb250cm9sLT5zaW5mb19wcGlkOwor
CW5jLT5zaW5mb19jb250ZXh0ID0gY29udHJvbC0+c2luZm9fY29udGV4dDsKKwluYy0+ZnNuX2lu
Y2x1ZGVkID0gMHhmZmZmZmZmZjsKKwluYy0+c2luZm9fdHNuID0gY29udHJvbC0+c2luZm9fdHNu
OworCW5jLT5zaW5mb19jdW10c24gPSBjb250cm9sLT5zaW5mb19jdW10c247CisJbmMtPnNpbmZv
X2Fzc29jX2lkID0gY29udHJvbC0+c2luZm9fYXNzb2NfaWQ7CisJbmMtPndob0Zyb20gPSBjb250
cm9sLT53aG9Gcm9tOworCWF0b21pY19hZGRfaW50KCZuYy0+d2hvRnJvbS0+cmVmX2NvdW50LCAx
KTsKKwluYy0+c3RjYiA9IGNvbnRyb2wtPnN0Y2I7CisJbmMtPnBvcnRfZnJvbSA9IGNvbnRyb2wt
PnBvcnRfZnJvbTsKK30KKworc3RhdGljIHZvaWQgCitzY3RwX3Jlc2V0X2FfY29udHJvbChzdHJ1
Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgIHN0
cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQzMl90IHRzbikKK3sKKwljb250cm9sLT5mc25faW5j
bHVkZWQgPSB0c247CisJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSkgeworCQkvKiAKKwkJICogV2Ug
aGF2ZSB0byBwdXJnZSBpdCBmcm9tIHRoZXJlLAorCQkgKiBob3BlZnVsbHkgdGhpcyB3aWxsIHdv
cmsgOi0pCisJCSAqLworCQlUQUlMUV9SRU1PVkUoJmlucC0+cmVhZF9xdWV1ZSwgY29udHJvbCwg
bmV4dCk7CisJCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJfQorfQorCitzdGF0aWMgaW50Citz
Y3RwX2hhbmRsZV9vbGRfdW5vcmRlcmVkX2RhdGEoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29j
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAq
c3RybSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9xdWV1ZWRf
dG9fcmVhZCAqY29udHJvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJf
dCBwZF9wb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaW5wX3JlYWRf
bG9ja19oZWxkKQoreworCS8qIFNwZWNpYWwgaGFuZGxpbmcgZm9yIHRoZSBvbGQgdW4tb3JkZXJl
ZCBkYXRhIGNodW5rLgorCSAqIEFsbCB0aGUgY2h1bmtzL1RTTidzIGdvIHRvIG1pZCAwLiBTbwor
CSAqIHdlIGhhdmUgdG8gZG8gdGhlIG9sZCBzdHlsZSB3YXRjaGluZyB0byBzZWUKKwkgKiBpZiB3
ZSBoYXZlIGl0IGFsbC4gSWYgeW91IHJldHVybiBvbmUsIG5vIG90aGVyCisJICogY29udHJvbCBl
bnRyaWVzIG9uIHRoZSB1bi1vcmRlcmVkIHF1ZXVlIHdpbGwKKwkgKiBiZSBsb29rZWQgYXQuIElu
IHRoZW9yeSB0aGVyZSBzaG91bGQgYmUgbm8gb3RoZXJzCisJICogZW50cmllcyBpbiByZWFsaXR5
LCB1bmxlc3MgdGhlIGd1eSBpcyBzZW5kaW5nIGJvdGgKKwkgKiB1bm9yZGVyZWQgTkRBVEEgYW5k
IHVub3JkZXJlZCBEQVRBLi4uCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAq
bGNoaywgKnRjaGs7CisJdWludDMyX3QgZnNuOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFk
ICpuYzsKKwlpbnQgY250X2FkZGVkOworCisJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbiA9
PSAwKSB7CisJCS8qIE5vdGhpbmcgd2UgY2FuIGRvLCB3ZSBoYXZlIG5vdCBzZWVuIHRoZSBmaXJz
dCBwaWVjZSB5ZXQgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJLyogQ29sbGFwc2UgYW55IHdlIGNh
biAqLworCWNudF9hZGRlZCA9IDA7CityZXN0YXJ0OgorCWZzbiA9IGNvbnRyb2wtPmZzbl9pbmNs
dWRlZCArIDE7CisJLyogTm93IHdoYXQgY2FuIHdlIGFkZD8gKi8KKwlUQUlMUV9GT1JFQUNIX1NB
RkUoY2hrLCAmY29udHJvbC0+cmVhc20sIHNjdHBfbmV4dCwgbGNoaykgeworCQlpZiAoY2hrLT5y
ZWMuZGF0YS5mc24gPT0gZnNuKSB7CisJCQkvKiBPayBsZXRzIGFkZCBpdCAqLworCQkJc2N0cF9h
bGxvY19hX3JlYWRxKHN0Y2IsIG5jKTsKKwkJCWlmIChuYyA9PSBOVUxMKSB7CisJCQkJYnJlYWs7
CisJCQl9CisJCQltZW1zZXQobmMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCkpOworCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOwor
CQkJc2N0cF9hZGRfY2hrX3RvX2NvbnRyb2woY29udHJvbCwgc3RybSwgc3RjYiwgYXNvYywgY2hr
LCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7CisJCQlmc24rKzsKKwkJCWNudF9hZGRlZCsrOwor
CQkJY2hrID0gTlVMTDsKKwkJCWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCQkvKiBXZSBh
cmUgZG9uZSAqLworCQkJCWlmICghVEFJTFFfRU1QVFkoJmNvbnRyb2wtPnJlYXNtKSkgeworCQkJ
CQkvKiAKKwkJCQkJICogT2sgd2UgaGF2ZSB0byBtb3ZlIGFueXRoaW5nIGxlZnQgb24KKwkJCQkJ
ICogdGhlIGNvbnRyb2wgcXVldWUgdG8gYSBuZXcgY29udHJvbC4KKwkJCQkJICovCisJCQkJCXNj
dHBfYnVpbGRfcmVhZHFfZW50cnlfZnJvbV9jdGwobmMsIGNvbnRyb2wpOworCQkJCQl0Y2hrID0g
VEFJTFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJCQkJaWYgKHRjaGstPnJlYy5kYXRhLnJj
dl9mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUoJmNv
bnRyb2wtPnJlYXNtLCB0Y2hrLCBzY3RwX25leHQpOworCQkJCQkJaWYgKGFzb2MtPnNpemVfb25f
cmVhc21fcXVldWUgPj0gdGNoay0+c2VuZF9zaXplKSB7CisJCQkJCQkJYXNvYy0+c2l6ZV9vbl9y
ZWFzbV9xdWV1ZSAtPSB0Y2hrLT5zZW5kX3NpemU7CisJCQkJCQl9IGVsc2UgeworI2lmZGVmIElO
VkFSSUFOVFMKKwkJCQkJCXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxlciB0
aGFuIGNodW5rIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIHRjaGstPnNl
bmRfc2l6ZSk7CisjZWxzZQorCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9IDA7Cisj
ZW5kaWYKKwkJCQkJCX0KKwkJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNt
X3F1ZXVlKTsKKwkJCQkJCW5jLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQkJCQkJbmMtPmZzbl9p
bmNsdWRlZCA9IHRjaGstPnJlYy5kYXRhLmZzbjsKKwkJCQkJCW5jLT5kYXRhID0gdGNoay0+ZGF0
YTsKKwkJCQkJCW5jLT5zaW5mb19wcGlkID0gdGNoay0+cmVjLmRhdGEucHBpZDsKKwkJCQkJCW5j
LT5zaW5mb190c24gPSB0Y2hrLT5yZWMuZGF0YS50c247CisJCQkJCQlzY3RwX21hcmtfbm9uX3Jl
dm9rYWJsZShhc29jLCB0Y2hrLT5yZWMuZGF0YS50c24pOworCQkJCQkJdGNoay0+ZGF0YSA9IE5V
TEw7CisJCQkJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCB0Y2hrLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCQkJCQkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIobmMpOworCQkJCQkJdGNoayA9IFRB
SUxRX0ZJUlNUKCZjb250cm9sLT5yZWFzbSk7CisJCQkJCX0KKwkJCQkJLyogU3BpbiB0aGUgcmVz
dCBvbnRvIHRoZSBxdWV1ZSAqLworCQkJCQl3aGlsZSAodGNoaykgeworCQkJCQkJVEFJTFFfUkVN
T1ZFKCZjb250cm9sLT5yZWFzbSwgdGNoaywgc2N0cF9uZXh0KTsKKwkJCQkJCVRBSUxRX0lOU0VS
VF9UQUlMKCZuYy0+cmVhc20sIHRjaGssIHNjdHBfbmV4dCk7CisJCQkJCQl0Y2hrID0gVEFJTFFf
RklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJCQkJfQorCQkJCQkvKiBOb3cgbGV0cyBhZGQgaXQg
dG8gdGhlIHF1ZXVlIGFmdGVyIHJlbW92aW5nIGNvbnRyb2wgKi8KKwkJCQkJVEFJTFFfSU5TRVJU
X1RBSUwoJnN0cm0tPnVub19pbnF1ZXVlLCBuYywgbmV4dF9pbnN0cm0pOworCQkJCQluYy0+b25f
c3RybV9xID0gU0NUUF9PTl9VTk9SREVSRUQ7CisJCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3Ep
IHsKKwkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRf
aW5zdHJtKTsKKwkJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJCX0KKwkJCQl9CisJ
CQkJaWYgKGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQkJc3RybS0+cGRfYXBpX3N0YXJ0
ZWQgPSAwOworCQkJCQljb250cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQl9CisJCQkJaWYg
KGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1
ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7
CisJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19yZWFzbXVzcm1zZ3MpOworCQkJ
CX0KKwkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKKwkJCQkJc2N0cF9hZGRfdG9f
cmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwgY29udHJvbCwKKwkJCQkJCQkgICZzdGNiLT5zY3Rw
X3NvY2tldC0+c29fcmN2LCBjb250cm9sLT5lbmRfYWRkZWQsCisJCQkJCQkJICBpbnBfcmVhZF9s
b2NrX2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJCX0gZWxzZSB7CisJCQkJCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0
cF9lcCwgc3RjYiwgY29udHJvbCwgaW5wX3JlYWRfbG9ja19oZWxkKTsKKyNlbmRpZgorCQkJCX0K
KwkJCQlzY3RwX3dha2V1cF90aGVfcmVhZF9zb2NrZXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKwkJCQlpZiAoKG5jLT5maXJzdF9mcmFnX3NlZW4pICYmICFUQUlM
UV9FTVBUWSgmbmMtPnJlYXNtKSkgeworCQkJCQkvKiBTd2l0Y2ggdG8gdGhlIG5ldyBndXkgYW5k
IGNvbnRpbnVlICovCisJCQkJCWNvbnRyb2wgPSBuYzsKKwkJCQkJZ290byByZXN0YXJ0OworCQkJ
CX0gZWxzZSB7CisJCQkJCWlmIChuYy0+b25fc3RybV9xID09IDApIHsKKwkJCQkJCXNjdHBfZnJl
ZV9hX3JlYWRxKHN0Y2IsIG5jKTsKKwkJCQkJfQorCQkJCX0KKwkJCQlyZXR1cm4gKDEpOworCQkJ
fSBlbHNlIHsKKwkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBuYyk7CisJCQl9CisJCX0gZWxz
ZSB7CisJCQkvKiBDYW4ndCBhZGQgbW9yZSAqLworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKChj
b250cm9sLT5sZW5ndGggPiBwZF9wb2ludCkgJiYgKHN0cm0tPnBkX2FwaV9zdGFydGVkID09IDAp
KSB7CisJCXN0cm0tPnBkX2FwaV9zdGFydGVkID0gMTsKKwkJY29udHJvbC0+cGRhcGlfc3RhcnRl
ZCA9IDE7CisJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIGNvbnRyb2ws
CisJCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9s
LT5lbmRfYWRkZWQsCisJCSAgICAgICAgICAgICAgICAgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKwkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCXJldHVybiAoMCk7CisJfSBlbHNl
IHsKKwkJcmV0dXJuICgxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2luamVjdF9vbGRf
dW5vcmRlcmVkX2RhdGEoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNo
aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmFib3J0X2ZsYWcpCit7CisJ
c3RydWN0IHNjdHBfdG1pdF9jaHVuayAqYXQ7CisJaW50IGluc2VydGVkOworCS8qCisJICogSGVy
ZSB3ZSBuZWVkIHRvIHBsYWNlIHRoZSBjaHVuayBpbnRvIHRoZSBjb250cm9sIHN0cnVjdHVyZQor
CSAqIHNvcnRlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4KKwkgKi8KKwlpZiAoY2hrLT5yZWMuZGF0
YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgeworCQkvKiBJdHMgdGhlIHZlcnkg
Zmlyc3Qgb25lLiAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJImNodW5rIGlzIGEg
Zmlyc3QgZnNuOiAldSBiZWNvbWVzIGZzbl9pbmNsdWRlZFxuIiwKKwkJCWNoay0+cmVjLmRhdGEu
ZnNuKTsKKwkJaWYgKGNvbnRyb2wtPmZpcnN0X2ZyYWdfc2VlbikgeworCQkJLyoKKwkJCSAqIElu
IG9sZCB1bi1vcmRlcmVkIHdlIGNhbiByZWFzc2VtYmx5IG9uCisJCQkgKiBvbmUgY29udHJvbCBt
dWx0aXBsZSBtZXNzYWdlcy4gQXMgbG9uZworCQkJICogYXMgdGhlIG5leHQgRklSU1QgaXMgZ3Jl
YXRlciB0aGVuIHRoZSBvbGQKKwkJCSAqIGZpcnN0IChUU04gaS5lLiBGU04gd2lzZSkKKwkJCSAq
LworCQkJc3RydWN0IG1idWYgKnRkYXRhOworCQkJdWludDMyX3QgdG1wOworCisJCQlpZiAoU0NU
UF9UU05fR1QoY2hrLT5yZWMuZGF0YS5mc24sIGNvbnRyb2wtPmZzbl9pbmNsdWRlZCkpIHsKKwkJ
CQkvKiBFYXN5IHdheSB0aGUgc3RhcnQgb2YgYSBuZXcgZ3V5IGJleW9uZCB0aGUgbG93ZXN0ICov
CisJCQkJZ290byBwbGFjZV9jaHVuazsKKwkJCX0KKwkJCWlmICgoY2hrLT5yZWMuZGF0YS5mc24g
PT0gY29udHJvbC0+ZnNuX2luY2x1ZGVkKSB8fAorCQkJICAgIChjb250cm9sLT5wZGFwaV9zdGFy
dGVkKSkgeworCQkJCS8qIAorCQkJCSAqIE9rIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4sIGlmIGl0
IGRvZXMKKwkJCQkgKiB3ZSBzdGFydGVkIHRoZSBwZC1hcGkgb24gdGhlIGhpZ2hlciBUU04gKHNp
bmNlCisJCQkJICogdGhlIGVxdWFscyBwYXJ0IGlzIGEgVFNOIGZhaWx1cmUgaXQgbXVzdCBiZSB0
aGF0KS4KKwkJCQkgKgorCQkJCSAqIFdlIGFyZSBjb21wbGV0bHkgaG9zZWQgaW4gdGhhdCBjYXNl
IHNpbmNlIEkgaGF2ZQorCQkJCSAqIG5vIHdheSB0byByZWNvdmVyLiBUaGlzIHJlYWxseSB3aWxs
IG9ubHkgaGFwcGVuCisJCQkJICogaWYgd2UgY2FuIGdldCBtb3JlIFRTTidzIGhpZ2hlciBiZWZv
cmUgdGhlIHBkLWFwaS1wb2ludC4KKwkJCQkgKi8KKwkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0
Y2IsIGNvbnRyb2wsIGNoaywKKwkJCQkJCSAgICBhYm9ydF9mbGFnLAorCQkJCQkJICAgIFNDVFBf
RlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzQpOworCisJCQkJcmV0dXJuOworCQkJfQorCQkJ
LyoKKwkJCSAqIE9rIHdlIGhhdmUgdHdvIGZpcnN0cyBhbmQgdGhlIG9uZSB3ZSBqdXN0IGdvdAor
CQkJICogaXMgc21hbGxlciB0aGFuIHRoZSBvbmUgd2UgcHJldmlvdXNseSBwbGFjZWQuLiB5dWNr
IQorCQkJICogV2UgbXVzdCBzd2FwIHRoZW0gb3V0LgorCQkJICovCisJCQkvKiBzd2FwIHRoZSBt
YnVmcyAqLworCQkJdGRhdGEgPSBjb250cm9sLT5kYXRhOworCQkJY29udHJvbC0+ZGF0YSA9IGNo
ay0+ZGF0YTsKKwkJCWNoay0+ZGF0YSA9IHRkYXRhOworCQkJLyogU2F2ZSB0aGUgbGVuZ3RocyAq
LworCQkJY2hrLT5zZW5kX3NpemUgPSBjb250cm9sLT5sZW5ndGg7CisJCQkvKiBSZWNvbXB1dGUg
bGVuZ3RoIG9mIGNvbnRyb2wgYW5kIHRhaWwgcG9pbnRlciAqLworCQkJc2N0cF9zZXR1cF90YWls
X3BvaW50ZXIoY29udHJvbCk7CisJCQkvKiBGaXggdGhlIEZTTiBpbmNsdWRlZCAqLworCQkJdG1w
ID0gY29udHJvbC0+ZnNuX2luY2x1ZGVkOworCQkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hr
LT5yZWMuZGF0YS5mc247CisJCQljaGstPnJlYy5kYXRhLmZzbiA9IHRtcDsKKwkJCS8qIEZpeCB0
aGUgVFNOIGluY2x1ZGVkICovCisJCQl0bXAgPSBjb250cm9sLT5zaW5mb190c247CisJCQljb250
cm9sLT5zaW5mb190c24gPSBjaGstPnJlYy5kYXRhLnRzbjsKKwkJCWNoay0+cmVjLmRhdGEudHNu
ID0gdG1wOworCQkJLyogRml4IHRoZSBQUElEIGluY2x1ZGVkICovCisJCQl0bXAgPSBjb250cm9s
LT5zaW5mb19wcGlkOworCQkJY29udHJvbC0+c2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBp
ZDsKKwkJCWNoay0+cmVjLmRhdGEucHBpZCA9IHRtcDsKKwkJCS8qIEZpeCB0YWlsIHBvaW50ZXIg
Ki8KKwkJCWdvdG8gcGxhY2VfY2h1bms7CisJCX0KKwkJY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVu
ID0gMTsKKwkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5mc247CisJCWNv
bnRyb2wtPnRvcF9mc24gPSBjaGstPnJlYy5kYXRhLmZzbjsKKwkJY29udHJvbC0+c2luZm9fdHNu
ID0gY2hrLT5yZWMuZGF0YS50c247CisJCWNvbnRyb2wtPnNpbmZvX3BwaWQgPSBjaGstPnJlYy5k
YXRhLnBwaWQ7CisJCWNvbnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7CisJCXNjdHBfbWFya19ub25f
cmV2b2thYmxlKGFzb2MsIGNoay0+cmVjLmRhdGEudHNuKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsK
KwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlz
Y3RwX3NldHVwX3RhaWxfcG9pbnRlcihjb250cm9sKTsKKwkJcmV0dXJuOworCX0KK3BsYWNlX2No
dW5rOgorCWluc2VydGVkID0gMDsKKwlUQUlMUV9GT1JFQUNIKGF0LCAmY29udHJvbC0+cmVhc20s
IHNjdHBfbmV4dCkgeworCQlpZiAoU0NUUF9UU05fR1QoYXQtPnJlYy5kYXRhLmZzbiwgY2hrLT5y
ZWMuZGF0YS5mc24pKSB7CisJCQkvKgorCQkJICogVGhpcyBvbmUgaW4gcXVldWUgaXMgYmlnZ2Vy
IHRoYW4gdGhlIG5ldyBvbmUsIGluc2VydAorCQkJICogdGhlIG5ldyBvbmUgYmVmb3JlIGF0Lgor
CQkJICovCisJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlICs9IGNoay0+c2VuZF9zaXplOwor
CQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQkJaW5zZXJ0
ZWQgPSAxOworCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShhdCwgY2hrLCBzY3RwX25leHQpOworCQkJ
YnJlYWs7CisJCX0gZWxzZSBpZiAoYXQtPnJlYy5kYXRhLmZzbiA9PSBjaGstPnJlYy5kYXRhLmZz
bikgeworCQkJLyogCisJCQkgKiBUaGV5IHNlbnQgYSBkdXBsaWNhdGUgZnNuIG51bWJlci4gVGhp
cworCQkJICogcmVhbGx5IHNob3VsZCBub3QgaGFwcGVuIHNpbmNlIHRoZSBGU04gaXMKKwkJCSAq
IGEgVFNOIGFuZCBpdCBzaG91bGQgaGF2ZSBiZWVuIGRyb3BwZWQgZWFybGllci4KKwkJCSAqLwor
CQkJc2N0cF9hYm9ydF9pbl9yZWFzbShzdGNiLCBjb250cm9sLCBjaGssCisJCQkgICAgICAgICAg
ICAgICAgICAgIGFib3J0X2ZsYWcsCisJCQkgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOREFUQSArIFNDVFBfTE9DXzUpOworCQkJcmV0dXJuOworCQl9CisKKwl9CisJaWYgKGlu
c2VydGVkID09IDApIHsKKwkJLyogSXRzIGF0IHRoZSBlbmQgKi8KKwkJYXNvYy0+c2l6ZV9vbl9y
ZWFzbV9xdWV1ZSArPSBjaGstPnNlbmRfc2l6ZTsKKwkJc2N0cF91Y291bnRfaW5jcihhc29jLT5j
bnRfb25fcmVhc21fcXVldWUpOworCQljb250cm9sLT50b3BfZnNuID0gY2hrLT5yZWMuZGF0YS5m
c247CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQp
OworCX0KK30KKworc3RhdGljIGludAorc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX2luICpzdHJtLCBpbnQgaW5wX3JlYWRf
bG9ja19oZWxkKQoreworCS8qCisJICogR2l2ZW4gYSBzdHJlYW0sIHN0cm0sIHNlZSBpZiBhbnkg
b2YKKwkgKiB0aGUgU1NOJ3Mgb24gaXQgdGhhdCBhcmUgZnJhZ21lbnRlZAorCSAqIGFyZSByZWFk
eSB0byBkZWxpdmVyLiBJZiBzbyBnbyBhaGVhZAorCSAqIGFuZCBwbGFjZSB0aGVtIG9uIHRoZSBy
ZWFkIHF1ZXVlLiBJbgorCSAqIHNvIHBsYWNpbmcgaWYgd2UgaGF2ZSBoaXQgdGhlIGVuZCwgdGhl
bgorCSAqIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZW0gZnJvbSB0aGUgc3RyZWFtJ3MgcXVldWUuCisJ
ICovCisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsICpuY3RsID0gTlVMTDsK
Kwl1aW50MzJfdCBuZXh0X3RvX2RlbDsKKwl1aW50MzJfdCBwZF9wb2ludDsKKwlpbnQgcmV0ID0g
MDsKKworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQlwZF9wb2ludCA9IG1pbihTQ1RQX1NC
X0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCkgPj4gU0NUUF9QQVJUSUFMX0RFTElWRVJZX1NI
SUZULAorCQkJICAgICAgIHN0Y2ItPnNjdHBfZXAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQpOwor
CX0gZWxzZSB7CisJCXBkX3BvaW50ID0gc3RjYi0+c2N0cF9lcC0+cGFydGlhbF9kZWxpdmVyeV9w
b2ludDsKKwl9CisJY29udHJvbCA9IFRBSUxRX0ZJUlNUKCZzdHJtLT51bm9faW5xdWV1ZSk7CisK
KwlpZiAoKGNvbnRyb2wgIT0gTlVMTCkgJiYKKwkgICAgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9
PSAwKSkgeworCQkvKiBTcGVjaWFsIGhhbmRsaW5nIG5lZWRlZCBmb3IgIm9sZCIgZGF0YSBmb3Jt
YXQgKi8KKwkJaWYgKHNjdHBfaGFuZGxlX29sZF91bm9yZGVyZWRfZGF0YShzdGNiLCBhc29jLCBz
dHJtLCBjb250cm9sLCBwZF9wb2ludCwgaW5wX3JlYWRfbG9ja19oZWxkKSkgeworCQkJZ290byBk
b25lX3VuOworCQl9CisJfQorCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgeworCQkvKiBDYW4n
dCBhZGQgbW9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwl3aGlsZSAoY29udHJvbCkgeworCQlT
Q1RQREJHKFNDVFBfREVCVUdfWFhYLCAiTG9va2luZyBhdCBjb250cm9sOiAlcCBlKCVkKSBzc246
ICV1IHRvcF9mc246ICV1IGluY19mc246ICV1IC11b1xuIiwKKwkJCWNvbnRyb2wsIGNvbnRyb2wt
PmVuZF9hZGRlZCwgY29udHJvbC0+bWlkLCBjb250cm9sLT50b3BfZnNuLCBjb250cm9sLT5mc25f
aW5jbHVkZWQpOworCQluY3RsID0gVEFJTFFfTkVYVChjb250cm9sLCBuZXh0X2luc3RybSk7CisJ
CWlmIChjb250cm9sLT5lbmRfYWRkZWQpIHsKKwkJCS8qIFdlIGp1c3QgcHV0IHRoZSBsYXN0IGJp
dCBvbiAqLworCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fVU5PUkRFUkVEICkgeworCQkJ
CQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCB1bm9yZGVyZWQ/IiwKKwkJ
CQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCQl9CisjZW5kaWYKKwkJ
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQlUQUlM
UV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJ
Y29udHJvbC0+b25fc3RybV9xID0gMDsKKwkJCX0KKwkJCWlmIChjb250cm9sLT5vbl9yZWFkX3Eg
PT0gMCkgeworCQkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJ
CQkgIGNvbnRyb2wsCisJCQkJCQkgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCBjb250cm9s
LT5lbmRfYWRkZWQsCisJCQkJCQkgIGlucF9yZWFkX2xvY2tfaGVsZCwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIENhbiB3ZSBkbyBhIFBELUFQSSBmb3IgdGhp
cyB1bi1vcmRlcmVkIGd1eT8gKi8KKwkJCWlmICgoY29udHJvbC0+bGVuZ3RoID49IHBkX3BvaW50
KSAmJiAoc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPT0gMCkpIHsKKwkJCQlzdHJtLT5wZF9hcGlfc3Rh
cnRlZCA9IDE7CisJCQkJY29udHJvbC0+cGRhcGlfc3RhcnRlZCA9IDE7CisJCQkJc2N0cF9hZGRf
dG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAg
JnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAg
aW5wX3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKwkJY29udHJvbCA9IG5jdGw7CisJfQorZG9uZV91bjoKKwljb250cm9sID0gVEFJ
TFFfRklSU1QoJnN0cm0tPmlucXVldWUpOworCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgewor
CQkvKiBDYW4ndCBhZGQgbW9yZSAqLworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoY29udHJvbCA9
PSBOVUxMKSB7CisJCXJldHVybiAocmV0KTsKKwl9CisJaWYgKFNDVFBfTUlEX0VRKGFzb2MtPmlk
YXRhX3N1cHBvcnRlZCwgc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkLCBjb250cm9sLT5taWQpKSB7
CisJCS8qIE9rIHRoZSBndXkgYXQgdGhlIHRvcCB3YXMgYmVpbmcgcGFydGlhbGx5IGRlbGl2ZXJl
ZAorCQkgKiBjb21wbGV0ZWQsIHNvIHdlIHJlbW92ZSBpdC4gTm90ZQorCQkgKiB0aGUgcGRfYXBp
IGZsYWcgd2FzIHRha2VuIG9mZiB3aGVuIHRoZQorCQkgKiBjaHVuayB3YXMgbWVyZ2VkIG9uIGlu
IHNjdHBfcXVldWVfZGF0YV9mb3JfcmVhc20gYmVsb3cuCisJCSAqLworCQluY3RsID0gVEFJTFFf
TkVYVChjb250cm9sLCBuZXh0X2luc3RybSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJ
CQkiTG9va2luZyBhdCBjb250cm9sOiAlcCBlKCVkKSBzc246ICV1IHRvcF9mc246ICV1IGluY19m
c246ICV1IChsYXN0ZGVsOiAldSktIG9cbiIsCisJCQljb250cm9sLCBjb250cm9sLT5lbmRfYWRk
ZWQsIGNvbnRyb2wtPm1pZCwKKwkJCWNvbnRyb2wtPnRvcF9mc24sIGNvbnRyb2wtPmZzbl9pbmNs
dWRlZCwKKwkJCXN0cm0tPmxhc3RfbWlkX2RlbGl2ZXJlZCk7CisJCWlmIChjb250cm9sLT5lbmRf
YWRkZWQpIHsKKwkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSAhPSBTQ1RQX09OX09SREVSRUQgKSB7CisJCQkJ
CXBhbmljKCJIdWggY29udHJvbDogJXAgb25fcTogJWQgLS0gbm90IG9yZGVyZWQ/IiwKKwkJCQkJ
ICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQlUQUlMUV9S
RU1PVkUoJnN0cm0tPmlucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQlpZiAoYXNv
Yy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA+PSBjb250cm9sLT5sZW5ndGgpIHsKKwkJCQkJYXNvYy0+
c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJfSBlbHNlIHsKKyNp
ZmRlZiBJTlZBUklBTlRTCisJCQkJCXBhbmljKCJzaXplX29uX2FsbF9zdHJlYW1zID0gJXUgc21h
bGxlciB0aGFuIGNvbnRyb2wgbGVuZ3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcywg
Y29udHJvbC0+bGVuZ3RoKTsKKyNlbHNlCisJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
PSAwOworI2VuZGlmCisJCQkJfQorCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX2Fs
bF9zdHJlYW1zKTsKKwkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJfQorCQkJaWYgKHN0
cm0tPnBkX2FwaV9zdGFydGVkICYmIGNvbnRyb2wtPnBkYXBpX3N0YXJ0ZWQpIHsKKwkJCQljb250
cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQlzdHJtLT5wZF9hcGlfc3RhcnRlZCA9IDA7CisJ
CQl9CisJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xID09IDApIHsKKwkJCQlzY3RwX2FkZF90b19y
ZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJICBjb250cm9sLAorCQkJCQkJICAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgY29udHJvbC0+ZW5kX2FkZGVkLAorCQkJCQkJICBpbnBf
cmVhZF9sb2NrX2hlbGQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9CisJCQljb250cm9sID0g
bmN0bDsKKwkJfQorCX0KKwlpZiAoc3RybS0+cGRfYXBpX3N0YXJ0ZWQpIHsKKwkJLyogQ2FuJ3Qg
YWRkIG1vcmUgbXVzdCBoYXZlIGdvdHRlbiBhbiB1bi1vcmRlcmVkIGFib3ZlIGJlaW5nIHBhcnRp
YWxseSBkZWxpdmVyZWQuICovCisJCXJldHVybiAoMCk7CisJfQorZGVsaXZlcl9tb3JlOgorCW5l
eHRfdG9fZGVsID0gc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkICsgMTsKKwlpZiAoY29udHJvbCkg
eworCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJIkxvb2tpbmcgYXQgY29udHJvbDogJXAg
ZSglZCkgc3NuOiAldSB0b3BfZnNuOiAldSBpbmNfZnNuOiAldSAobnh0ZGVsOiAldSktIG9cbiIs
CisJCQljb250cm9sLCBjb250cm9sLT5lbmRfYWRkZWQsIGNvbnRyb2wtPm1pZCwgY29udHJvbC0+
dG9wX2ZzbiwgY29udHJvbC0+ZnNuX2luY2x1ZGVkLAorCQkJbmV4dF90b19kZWwpOworCQluY3Rs
ID0gVEFJTFFfTkVYVChjb250cm9sLCBuZXh0X2luc3RybSk7CisJCWlmIChTQ1RQX01JRF9FUShh
c29jLT5pZGF0YV9zdXBwb3J0ZWQsIGNvbnRyb2wtPm1pZCwgbmV4dF90b19kZWwpICYmCisJCSAg
ICAoY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuKSkgeworCQkJaW50IGRvbmU7CisKKwkJCS8qIE9r
IHdlIGNhbiBkZWxpdmVyIGl0IG9udG8gdGhlIHN0cmVhbS4gKi8KKwkJCWlmIChjb250cm9sLT5l
bmRfYWRkZWQpIHsKKwkJCQkvKiBXZSBhcmUgZG9uZSB3aXRoIGl0IGFmdGVyd2FyZHMgKi8KKwkJ
CQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQlpZiAo
Y29udHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fT1JERVJFRCApIHsKKwkJCQkJCXBhbmljKCJI
dWggY29udHJvbDogJXAgb25fcTogJWQgLS0gbm90IG9yZGVyZWQ/IiwKKwkJCQkJCSAgICAgIGNv
bnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1fcSk7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlTQ1RQX1NU
QVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfcmVhc211c3Jtc2dzKTsKKwkJCQkJVEFJTFFfUkVNT1ZF
KCZzdHJtLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCWlmIChhc29jLT5z
aXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+c2l6
ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7CisjaWZk
ZWYgSU5WQVJJQU5UUworCQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFs
bGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBj
b250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMg
PSAwOworI2VuZGlmCisJCQkJCX0KKwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25f
YWxsX3N0cmVhbXMpOworCQkJCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJCX0KKwkJCQly
ZXQrKzsKKwkJCX0KKwkJCWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9E
QVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiBBIHNpbmdsZXRv
biBub3cgc2xpcHBpbmcgdGhyb3VnaCAtIG1hcmsgaXQgbm9uLXJldm9rYWJsZSB0b28gKi8KKwkJ
CQlzY3RwX21hcmtfbm9uX3Jldm9rYWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJ
fSBlbHNlIGlmIChjb250cm9sLT5lbmRfYWRkZWQgPT0gMCkgeworCQkJCS8qIENoZWNrIGlmIHdl
IGNhbiBkZWZlciBhZGRpbmcgdW50aWwgaXRzIGFsbCB0aGVyZSAqLworCQkJCWlmICgoY29udHJv
bC0+bGVuZ3RoIDwgcGRfcG9pbnQpIHx8IChzdHJtLT5wZF9hcGlfc3RhcnRlZCkpIHsKKwkJCQkJ
LyogRG9uJ3QgbmVlZCBpdCBvciBjYW5ub3QgYWRkIG1vcmUgKG9uZSBiZWluZyBkZWxpdmVyZWQg
dGhhdCB3YXkpICovCisJCQkJCWdvdG8gb3V0OworCQkJCX0KKwkJCX0KKwkJCWRvbmUgPSAoY29u
dHJvbC0+ZW5kX2FkZGVkKSAmJiAoY29udHJvbC0+bGFzdF9mcmFnX3NlZW4pOworCQkJaWYgKGNv
bnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCQkJaWYgKCFkb25lKSB7CisJCQkJCWlmIChhc29j
LT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQkJYXNvYy0+
c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5ndGg7CisJCQkJCX0gZWxzZSB7Cisj
aWZkZWYgSU5WQVJJQU5UUworCQkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBz
bWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
LCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVh
bXMgPSAwOworI2VuZGlmCisJCQkJCX0KKwkJCQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAxOwor
CQkJCQljb250cm9sLT5wZGFwaV9zdGFydGVkID0gMTsKKwkJCQl9CisJCQkJc2N0cF9hZGRfdG9f
cmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCSAgY29udHJvbCwKKwkJCQkJCSAgJnN0
Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9hZGRlZCwKKwkJCQkJCSAgaW5w
X3JlYWRfbG9ja19oZWxkLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJc3RybS0+bGFz
dF9taWRfZGVsaXZlcmVkID0gbmV4dF90b19kZWw7CisJCQlpZiAoZG9uZSkgeworCQkJCWNvbnRy
b2wgPSBuY3RsOworCQkJCWdvdG8gZGVsaXZlcl9tb3JlOworCQkJfQorCQl9CisJfQorb3V0Ogor
CXJldHVybiAocmV0KTsKK30KKworCit1aW50MzJfdAorc2N0cF9hZGRfY2hrX3RvX2NvbnRyb2wo
c3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCisJCQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1faW4gKnN0cm0sCisJCQlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jLAorCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCBpbnQgaG9sZF9y
bG9jaykKK3sKKwkvKgorCSAqIEdpdmVuIGEgY29udHJvbCBhbmQgYSBjaHVuaywgbWVyZ2UgdGhl
CisJICogZGF0YSBmcm9tIHRoZSBjaGsgb250byB0aGUgY29udHJvbCBhbmQgZnJlZQorCSAqIHVw
IHRoZSBjaHVuayByZXNvdXJjZXMuCisJICovCisJdWludDMyX3QgYWRkZWQ9MDsKKwlpbnQgaV9s
b2NrZWQgPSAwOworCisJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSAmJiAoaG9sZF9ybG9jayA9PSAw
KSkgeworCQkvKgorCQkgKiBJdHMgYmVpbmcgcGQtYXBpJ2Qgc28gd2UgbXVzdAorCQkgKiBkbyBz
b21lIGxvY2tzLgorCQkgKi8KKwkJU0NUUF9JTlBfUkVBRF9MT0NLKHN0Y2ItPnNjdHBfZXApOwor
CQlpX2xvY2tlZCA9IDE7CisJfQorCWlmIChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKKwkJY29u
dHJvbC0+ZGF0YSA9IGNoay0+ZGF0YTsKKwkJc2N0cF9zZXR1cF90YWlsX3BvaW50ZXIoY29udHJv
bCk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfdG9fdGFpbF9wb2ludGVyKGNvbnRyb2wsIGNoay0+
ZGF0YSwgJmFkZGVkKTsKKwl9CisJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0
YS5mc247CisJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSAtPSBjaGstPnNlbmRfc2l6ZTsKKwlz
Y3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7CisJc2N0cF9tYXJrX25v
bl9yZXZva2FibGUoYXNvYywgY2hrLT5yZWMuZGF0YS50c24pOworCWNoay0+ZGF0YSA9IE5VTEw7
CisJaWYgKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsK
KwkJY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJY29udHJvbC0+c2luZm9fdHNuID0g
Y2hrLT5yZWMuZGF0YS50c247CisJCWNvbnRyb2wtPnNpbmZvX3BwaWQgPSBjaGstPnJlYy5kYXRh
LnBwaWQ7CisJfQorCWlmIChjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNU
X0ZSQUcpIHsKKwkJLyogSXRzIGNvbXBsZXRlICovCisJCWlmICgoY29udHJvbC0+b25fc3RybV9x
KSAmJiAoY29udHJvbC0+b25fcmVhZF9xKSkgeworCQkJaWYgKGNvbnRyb2wtPnBkYXBpX3N0YXJ0
ZWQpIHsKKwkJCQljb250cm9sLT5wZGFwaV9zdGFydGVkID0gMDsKKwkJCQlzdHJtLT5wZF9hcGlf
c3RhcnRlZCA9IDA7CisJCQl9CisJCQlpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05f
VU5PUkRFUkVEKSB7CisJCQkJLyogVW5vcmRlcmVkICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJt
LT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCWNvbnRyb2wtPm9uX3N0
cm1fcSA9IDA7CisJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09S
REVSRUQpIHsKKwkJCQkvKiBPcmRlcmVkICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdHJtLT5pbnF1
ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJLyoKKwkJCQkgKiBEb24ndCBuZWVkIHRv
IGRlY3JlbWVudCBzaXplX29uX2FsbF9zdHJlYW1zLAorCQkJCSAqIHNpbmNlIGNvbnRyb2wgaXMg
b24gdGhlIHJlYWQgcXVldWUuCisJCQkJICovCisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5j
bnRfb25fYWxsX3N0cmVhbXMpOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisjaWZkZWYg
SU5WQVJJQU5UUworCQkJfSBlbHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQlwYW5p
YygiVW5rbm93biBzdGF0ZSBvbiBjdHJsOiAlcCBvbl9zdHJtX3E6ICVkIiwgY29udHJvbCwKKwkJ
CQkgICAgICBjb250cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQl9CisJCX0KKwkJY29udHJv
bC0+ZW5kX2FkZGVkID0gMTsKKwkJY29udHJvbC0+bGFzdF9mcmFnX3NlZW4gPSAxOworCX0KKwlp
ZiAoaV9sb2NrZWQpIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJ
fQorCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwly
ZXR1cm4gKGFkZGVkKTsKK30KKworLyoKKyAqIER1bXAgb250byB0aGUgcmUtYXNzZW1ibHkgcXVl
dWUsIGluIGl0cyBwcm9wZXIgcGxhY2UuIEFmdGVyIGR1bXBpbmcgb24gdGhlCisgKiBxdWV1ZSwg
c2VlIGlmIGFudGhpbmcgY2FuIGJlIGRlbGl2ZXJlZC4gSWYgc28gcHVsbCBpdCBvZmYgKG9yIGFz
IG11Y2ggYXMKKyAqIHdlIGNhbi4gSWYgd2UgcnVuIG91dCBvZiBzcGFjZSB0aGVuIHdlIG11c3Qg
ZHVtcCB3aGF0IHdlIGNhbiBhbmQgc2V0IHRoZQorICogYXBwcm9wcmlhdGUgZmxhZyB0byBzYXkg
d2UgcXVldWVkIHdoYXQgd2UgY291bGQuCisgKi8KK3N0YXRpYyB2b2lkCitzY3RwX3F1ZXVlX2Rh
dGFfZm9yX3JlYXNtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MsCisJCQkgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLAorCQkJ
ICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisJCQkgIGludCBjcmVhdGVkX2NvbnRyb2ws
CisJCQkgIGludCAqYWJvcnRfZmxhZywgdWludDMyX3QgdHNuKQoreworCXVpbnQzMl90IG5leHRf
ZnNuOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmF0LCAqbmF0OworCXN0cnVjdCBzY3RwX3N0
cmVhbV9pbiAqc3RybTsKKwlpbnQgZG9fd2FrZXVwLCB1bm9yZGVyZWQ7CisJdWludDMyX3QgbGVu
YWRkZWQ7CisKKwlzdHJtID0gJmFzb2MtPnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dOwor
CS8qCisJICogRm9yIG9sZCB1bi1vcmRlcmVkIGRhdGEgY2h1bmtzLgorCSAqLworCWlmICgoY29u
dHJvbC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSB7CisJCXVub3Jk
ZXJlZCA9IDE7CisJfSBlbHNlIHsKKwkJdW5vcmRlcmVkID0gMDsKKwl9CisJLyogTXVzdCBiZSBh
ZGRlZCB0byB0aGUgc3RyZWFtLWluIHF1ZXVlICovCisJaWYgKGNyZWF0ZWRfY29udHJvbCkgewor
CQlpZiAodW5vcmRlcmVkID09IDApIHsKKwkJCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+Y250X29u
X2FsbF9zdHJlYW1zKTsKKwkJfQorCQlpZiAoc2N0cF9wbGFjZV9jb250cm9sX2luX3N0cmVhbShz
dHJtLCBhc29jLCBjb250cm9sKSkgeworCQkJLyogRHVwbGljYXRlIFNTTj8gKi8KKwkJCXNjdHBf
YWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJCQkgICAgYWJvcnRfZmxhZywK
KwkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzYpOworCQkJc2N0cF9j
bGVhbl91cF9jb250cm9sKHN0Y2IsIGNvbnRyb2wpOworCQkJcmV0dXJuOworCQl9CisJCWlmICgo
dHNuID09IChhc29jLT5jdW11bGF0aXZlX3RzbiArIDEpICYmIChhc29jLT5pZGF0YV9zdXBwb3J0
ZWQgPT0gMCkpKSB7CisJCQkvKiBPayB3ZSBjcmVhdGVkIHRoaXMgY29udHJvbCBhbmQgbm93CisJ
CQkgKiBsZXRzIHZhbGlkYXRlIHRoYXQgaXRzIGxlZ2FsIGkuZS4gdGhlcmUKKwkJCSAqIGlzIGEg
QiBiaXQgc2V0LCBpZiBub3QgYW5kIHdlIGhhdmUKKwkJCSAqIHVwIHRvIHRoZSBjdW0tYWNrIHRo
ZW4gaXRzIGludmFsaWQuCisJCQkgKi8KKwkJCWlmICgoY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3Mg
JiBTQ1RQX0RBVEFfRklSU1RfRlJBRykgPT0gMCkgeworCQkJCXNjdHBfYWJvcnRfaW5fcmVhc20o
c3RjYiwgY29udHJvbCwgY2hrLAorCQkJCSAgICAgICAgICAgICAgICAgICAgYWJvcnRfZmxhZywK
KwkJCQkgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9D
XzcpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGFzb2MtPmlkYXRhX3N1cHBv
cnRlZCA9PSAwKSAmJiAodW5vcmRlcmVkID09IDEpKSB7CisJCXNjdHBfaW5qZWN0X29sZF91bm9y
ZGVyZWRfZGF0YShzdGNiLCBhc29jLCBjb250cm9sLCBjaGssIGFib3J0X2ZsYWcpOworCQlyZXR1
cm47CisJfQorCS8qCisJICogT2sgd2UgbXVzdCBxdWV1ZSB0aGUgY2h1bmsgaW50byB0aGUgcmVh
c2VtYmx5IHBvcnRpb246CisJICogIG8gaWYgaXRzIHRoZSBmaXJzdCBpdCBnb2VzIHRvIHRoZSBj
b250cm9sIG1idWYuCisJICogIG8gaWYgaXRzIG5vdCBmaXJzdCBidXQgdGhlIG5leHQgaW4gc2Vx
dWVuY2UgaXQgZ29lcyB0byB0aGUgY29udHJvbCwKKwkgKiAgICBhbmQgZWFjaCBzdWNjZWVkaW5n
IG9uZSBpbiBvcmRlciBhbHNvIGdvZXMuCisJICogIG8gaWYgaXRzIG5vdCBpbiBvcmRlciB3ZSBw
bGFjZSBpdCBvbiB0aGUgbGlzdCBpbiBpdHMgcGxhY2UuCisJICovCisJaWYgKGNoay0+cmVjLmRh
dGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJLyogSXRzIHRoZSB2ZXJ5
IGZpcnN0IG9uZS4gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJjaHVuayBpcyBh
IGZpcnN0IGZzbjogJXUgYmVjb21lcyBmc25faW5jbHVkZWRcbiIsCisJCQljaGstPnJlYy5kYXRh
LmZzbik7CisJCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKKwkJCS8qCisJCQkgKiBF
cnJvciBvbiBzZW5kZXJzIHBhcnQsIHRoZXkgZWl0aGVyCisJCQkgKiBzZW50IHVzIHR3byBkYXRh
IGNodW5rcyB3aXRoIEZJUlNULAorCQkJICogb3IgdGhleSBzZW50IHR3byB1bi1vcmRlcmVkIGNo
dW5rcyB0aGF0CisJCQkgKiB3ZXJlIGZyYWdtZW50ZWQgYXQgdGhlIHNhbWUgdGltZSBpbiB0aGUg
c2FtZSBzdHJlYW0uCisJCQkgKi8KKwkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJv
bCwgY2hrLAorCQkJICAgICAgICAgICAgICAgICAgICBhYm9ydF9mbGFnLAorCQkJICAgICAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ184KTsKKwkJCXJldHVy
bjsKKwkJfQorCQljb250cm9sLT5maXJzdF9mcmFnX3NlZW4gPSAxOworCQljb250cm9sLT5zaW5m
b19wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOworCQljb250cm9sLT5zaW5mb190c24gPSBjaGst
PnJlYy5kYXRhLnRzbjsKKwkJY29udHJvbC0+ZnNuX2luY2x1ZGVkID0gY2hrLT5yZWMuZGF0YS5m
c247CisJCWNvbnRyb2wtPmRhdGEgPSBjaGstPmRhdGE7CisJCXNjdHBfbWFya19ub25fcmV2b2th
YmxlKGFzb2MsIGNoay0+cmVjLmRhdGEudHNuKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJc2N0
cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlzY3RwX3Nl
dHVwX3RhaWxfcG9pbnRlcihjb250cm9sKTsKKwkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAr
PSBjb250cm9sLT5sZW5ndGg7CisJfSBlbHNlIHsKKwkJLyogUGxhY2UgdGhlIGNodW5rIGluIG91
ciBsaXN0ICovCisJCWludCBpbnNlcnRlZD0wOworCQlpZiAoY29udHJvbC0+bGFzdF9mcmFnX3Nl
ZW4gPT0gMCkgeworCQkJLyogU3RpbGwgd2lsbGluZyB0byByYWlzZSBoaWdoZXN0IEZTTiBzZWVu
ICovCisJCQlpZiAoU0NUUF9UU05fR1QoY2hrLT5yZWMuZGF0YS5mc24sIGNvbnRyb2wtPnRvcF9m
c24pKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJIldlIGhhdmUgYSBuZXcg
dG9wX2ZzbjogJXVcbiIsCisJCQkJCWNoay0+cmVjLmRhdGEuZnNuKTsKKwkJCQljb250cm9sLT50
b3BfZnNuID0gY2hrLT5yZWMuZGF0YS5mc247CisJCQl9CisJCQlpZiAoY2hrLT5yZWMuZGF0YS5y
Y3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1hYWCwKKwkJCQkJIlRoZSBsYXN0IGZzbiBpcyBub3cgaW4gcGxhY2UgZnNuOiAldVxuIiwKKwkJ
CQkJY2hrLT5yZWMuZGF0YS5mc24pOworCQkJCWNvbnRyb2wtPmxhc3RfZnJhZ19zZWVuID0gMTsK
KwkJCX0KKwkJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgfHwgY29udHJvbC0+Zmlyc3RfZnJh
Z19zZWVuKSB7CisJCQkJLyogCisJCQkJICogRm9yIElEQVRBIHdlIGFsd2F5cyBjaGVjayBzaW5j
ZSB3ZSBrbm93IHRoYXQKKwkJCQkgKiB0aGUgZmlyc3QgZnJhZ21lbnQgaXMgMC4gRm9yIG9sZCBE
QVRBIHdlIGhhdmUKKwkJCQkgKiB0byByZWNlaXZlIHRoZSBmaXJzdCBiZWZvcmUgd2Uga25vdyB0
aGUgZmlyc3QgRlNOCisJCQkJICogKHdoaWNoIGlzIHRoZSBUU04pLgorCQkJCSAqLworCQkJCWlm
IChTQ1RQX1RTTl9HRShjb250cm9sLT5mc25faW5jbHVkZWQsIGNoay0+cmVjLmRhdGEuZnNuKSkg
eworCQkJCQkvKiBXZSBoYXZlIGFscmVhZHkgZGVsaXZlcmVkIHVwIHRvIHRoaXMgc28gaXRzIGEg
ZHVwICovCisJCQkJCXNjdHBfYWJvcnRfaW5fcmVhc20oc3RjYiwgY29udHJvbCwgY2hrLAorCQkJ
CQkJCSAgICBhYm9ydF9mbGFnLAorCQkJCQkJCSAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBT
Q1RQX0xPQ185KTsKKwkJCQkJcmV0dXJuOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlm
IChjaGstPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZSQUcpIHsKKwkJCQkv
KiBTZWNvbmQgbGFzdD8gaHVoPyAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJ
CSJEdXBsaWNhdGUgbGFzdCBmc246ICV1ICh0b3A6ICV1KSAtLSBhYm9ydFxuIiwKKwkJCQkJY2hr
LT5yZWMuZGF0YS5mc24sIGNvbnRyb2wtPnRvcF9mc24pOworCQkJCXNjdHBfYWJvcnRfaW5fcmVh
c20oc3RjYiwgY29udHJvbCwKKwkJCQkJCSAgICBjaGssIGFib3J0X2ZsYWcsCisJCQkJCQkgICAg
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTApOworCQkJCXJldHVybjsKKwkJCX0K
KwkJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgfHwgY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVu
KSB7CisJCQkJLyogCisJCQkJICogRm9yIElEQVRBIHdlIGFsd2F5cyBjaGVjayBzaW5jZSB3ZSBr
bm93IHRoYXQKKwkJCQkgKiB0aGUgZmlyc3QgZnJhZ21lbnQgaXMgMC4gRm9yIG9sZCBEQVRBIHdl
IGhhdmUKKwkJCQkgKiB0byByZWNlaXZlIHRoZSBmaXJzdCBiZWZvcmUgd2Uga25vdyB0aGUgZmly
c3QgRlNOCisJCQkJICogKHdoaWNoIGlzIHRoZSBUU04pLgorCQkJCSAqLworCisJCQkJaWYgKFND
VFBfVFNOX0dFKGNvbnRyb2wtPmZzbl9pbmNsdWRlZCwgY2hrLT5yZWMuZGF0YS5mc24pKSB7CisJ
CQkJCS8qIFdlIGhhdmUgYWxyZWFkeSBkZWxpdmVyZWQgdXAgdG8gdGhpcyBzbyBpdHMgYSBkdXAg
Ki8KKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJCSJOZXcgZnNuOiAldSBpcyBh
bHJlYWR5IHNlZW4gaW4gaW5jbHVkZWRfZnNuOiAldSAtLSBhYm9ydFxuIiwKKwkJCQkJCWNoay0+
cmVjLmRhdGEuZnNuLCBjb250cm9sLT5mc25faW5jbHVkZWQpOworCQkJCQlzY3RwX2Fib3J0X2lu
X3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKKwkJCQkJCQkgICAgYWJvcnRfZmxhZywKKwkJCQkJ
CQkgICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTEpOworCQkJCQlyZXR1cm47
CisJCQkJfQorCQkJfQorCQkJLyogdmFsaWRhdGUgbm90IGJleW9uZCB0b3AgRlNOIGlmIHdlIGhh
dmUgc2VlbiBsYXN0IG9uZSAqLworCQkJaWYgKFNDVFBfVFNOX0dUKGNoay0+cmVjLmRhdGEuZnNu
LCBjb250cm9sLT50b3BfZnNuKSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19YWFgsCisJCQkJ
CSJOZXcgZnNuOiAldSBpcyBiZXlvbmQgb3IgYXQgdG9wX2ZzbjogJXUgLS0gYWJvcnRcbiIsCisJ
CQkJCWNoay0+cmVjLmRhdGEuZnNuLAorCQkJCQljb250cm9sLT50b3BfZnNuKTsKKwkJCQlzY3Rw
X2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsIGNoaywKKwkJCQkJCSAgICBhYm9ydF9mbGFn
LAorCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzEyKTsKKwkJCQly
ZXR1cm47CisJCQl9CisJCX0KKwkJLyoKKwkJICogSWYgd2UgcmVhY2ggaGVyZSwgd2UgbmVlZCB0
byBwbGFjZSB0aGUKKwkJICogbmV3IGNodW5rIGluIHRoZSByZWFzc2VtYmx5IGZvciB0aGlzIAor
CQkgKiBjb250cm9sLgorCQkgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCSJjaHVu
ayBpcyBhIG5vdCBmaXJzdCBmc246ICV1IG5lZWRzIHRvIGJlIGluc2VydGVkXG4iLAorCQkJY2hr
LT5yZWMuZGF0YS5mc24pOworCQlUQUlMUV9GT1JFQUNIKGF0LCAmY29udHJvbC0+cmVhc20sIHNj
dHBfbmV4dCkgeworCQkJaWYgKFNDVFBfVFNOX0dUKGF0LT5yZWMuZGF0YS5mc24sIGNoay0+cmVj
LmRhdGEuZnNuKSkgeworCQkJCS8qCisJCQkJICogVGhpcyBvbmUgaW4gcXVldWUgaXMgYmlnZ2Vy
IHRoYW4gdGhlIG5ldyBvbmUsIGluc2VydAorCQkJCSAqIHRoZSBuZXcgb25lIGJlZm9yZSBhdC4K
KwkJCQkgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfWFhYLAorCQkJCQkiSW5zZXJ0IGl0IGJl
Zm9yZSBmc246ICV1XG4iLAorCQkJCQlhdC0+cmVjLmRhdGEuZnNuKTsKKwkJCQlhc29jLT5zaXpl
X29uX3JlYXNtX3F1ZXVlICs9IGNoay0+c2VuZF9zaXplOworCQkJCXNjdHBfdWNvdW50X2luY3Io
YXNvYy0+Y250X29uX3JlYXNtX3F1ZXVlKTsKKwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JFKGF0LCBj
aGssIHNjdHBfbmV4dCk7CisJCQkJaW5zZXJ0ZWQgPSAxOworCQkJCWJyZWFrOworCQkJfSBlbHNl
IGlmIChhdC0+cmVjLmRhdGEuZnNuID09IGNoay0+cmVjLmRhdGEuZnNuKSB7CisJCQkJLyogR2Fr
LCBIZSBzZW50IG1lIGEgZHVwbGljYXRlIHN0ciBzZXEgbnVtYmVyICovCisJCQkJLyoKKwkJCQkg
KiBmb28gYmFyLCBJIGd1ZXNzIEkgd2lsbCBqdXN0IGZyZWUgdGhpcyBuZXcgZ3V5LAorCQkJCSAq
IHNob3VsZCB3ZSBhYm9ydCB0b28/IEZJWCBNRSBNQVlCRT8gT3IgaXQgQ09VTEQgYmUKKwkJCQkg
KiB0aGF0IHRoZSBTU04ncyBoYXZlIHdyYXBwZWQuIE1heWJlIEkgc2hvdWxkCisJCQkJICogY29t
cGFyZSB0byBUU04gc29tZWhvdy4uLiBzaWdoIGZvciBub3cganVzdCBibG93CisJCQkJICogYXdh
eSB0aGUgY2h1bmshCisJCQkJICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwKKwkJCQkJ
IkR1cGxpY2F0ZSB0byBmc246ICV1IC0tIGFib3J0XG4iLAorCQkJCQlhdC0+cmVjLmRhdGEuZnNu
KTsKKwkJCQlzY3RwX2Fib3J0X2luX3JlYXNtKHN0Y2IsIGNvbnRyb2wsCisJCQkJCQkgICAgY2hr
LCBhYm9ydF9mbGFnLAorCQkJCQkJICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9D
XzEzKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0KKwkJaWYgKGluc2VydGVkID09IDApIHsKKwkJ
CS8qIEdvZXMgb24gdGhlIGVuZCAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkluc2Vy
dGluZyBhdCB0YWlsIG9mIGxpc3QgZnNuOiAldVxuIiwKKwkJCQljaGstPnJlYy5kYXRhLmZzbik7
CisJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlICs9IGNoay0+c2VuZF9zaXplOworCQkJc2N0
cF91Y291bnRfaW5jcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQkJVEFJTFFfSU5TRVJU
X1RBSUwoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4dCk7CisJCX0KKwl9CisJLyoKKwkg
KiBPayBsZXRzIHNlZSBpZiB3ZSBjYW4gc3VjayBhbnkgdXAgaW50byB0aGUgY29udHJvbAorCSAq
IHN0cnVjdHVyZSB0aGF0IGFyZSBpbiBzZXEgaWYgaXQgbWFrZXMgc2Vuc2UuCisJICovCisJZG9f
d2FrZXVwID0gMDsKKwkvKgorCSAqIElmIHRoZSBmaXJzdCBmcmFnbWVudCBoYXMgbm90IGJlZW4K
KwkgKiBzZWVuIHRoZXJlIGlzIG5vIHNlbnNlIGluIGxvb2tpbmcuCisJICovCisJaWYgKGNvbnRy
b2wtPmZpcnN0X2ZyYWdfc2VlbikgeworCQluZXh0X2ZzbiA9IGNvbnRyb2wtPmZzbl9pbmNsdWRl
ZCArIDE7CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShhdCwgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25l
eHQsIG5hdCkgeworCQkJaWYgKGF0LT5yZWMuZGF0YS5mc24gPT0gbmV4dF9mc24pIHsKKwkJCQkv
KiBXZSBjYW4gYWRkIHRoaXMgb25lIG5vdyB0byB0aGUgY29udHJvbCAqLworCQkJCVNDVFBEQkco
U0NUUF9ERUJVR19YWFgsCisJCQkJCSJBZGRpbmcgbW9yZSB0byBjb250cm9sOiAlcCBhdDogJXAg
ZnNuOiAldSBuZXh0X2ZzbjogJXUgaW5jbHVkZWQ6ICV1XG4iLAorCQkJCQljb250cm9sLCBhdCwK
KwkJCQkJYXQtPnJlYy5kYXRhLmZzbiwKKwkJCQkJbmV4dF9mc24sIGNvbnRyb2wtPmZzbl9pbmNs
dWRlZCk7CisJCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwgYXQsIHNjdHBfbmV4dCk7
CisJCQkJbGVuYWRkZWQgPSBzY3RwX2FkZF9jaGtfdG9fY29udHJvbChjb250cm9sLCBzdHJtLCBz
dGNiLCBhc29jLCBhdCwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworCQkJCWlmIChjb250cm9s
LT5vbl9yZWFkX3EpIHsKKwkJCQkJZG9fd2FrZXVwID0gMTsKKwkJCQl9IGVsc2UgeworCQkJCQkv
KgorCQkJCQkgKiBXZSBvbmx5IGFkZCB0byB0aGUgc2l6ZS1vbi1hbGwtc3RyZWFtcworCQkJCQkg
KiBpZiBpdHMgbm90IG9uIHRoZSByZWFkIHEuIFRoZSByZWFkIHEKKwkJCQkJICogZmxhZyB3aWxs
IGNhdXNlIGEgc2JhbGxvYyBzbyBpdHMgYWNjb3VudGVkCisJCQkJCSAqIGZvciB0aGVyZS4KKwkJ
CQkJICovCisJCQkJCWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgKz0gbGVuYWRkZWQ7CisJCQkJ
fQorCQkJCW5leHRfZnNuKys7CisJCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCAmJiBjb250cm9s
LT5wZGFwaV9zdGFydGVkKSB7CisJCQkJCWlmIChzdHJtLT5wZF9hcGlfc3RhcnRlZCkgeworCQkJ
CQkJc3RybS0+cGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJCQkJY29udHJvbC0+cGRhcGlfc3RhcnRl
ZCA9IDA7CisJCQkJCX0KKwkJCQkJaWYgKGNvbnRyb2wtPm9uX3JlYWRfcSA9PSAwKSB7CisJCQkJ
CQlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCQkgIGNvbnRy
b2wsCisJCQkJCQkJCSAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIGNvbnRyb2wtPmVuZF9h
ZGRlZCwKKwkJCQkJCQkJICBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJfQorCWlmIChkb193YWtldXApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCXNjdHBfaW52b2tlX3JlY3ZfY2FsbGJhY2soc3RjYi0+c2N0cF9lcCwgc3RjYiwg
Y29udHJvbCwgU0NUUF9SRUFEX0xPQ0tfTk9UX0hFTEQpOworI2VuZGlmCisJCS8qIE5lZWQgdG8g
d2FrZXVwIHRoZSByZWFkZXIgKi8KKwkJc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorfQorCitzdGF0aWMgc3Ry
dWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKgorc2N0cF9maW5kX3JlYXNtX2VudHJ5KHN0cnVjdCBz
Y3RwX3N0cmVhbV9pbiAqc3RybSwgdWludDMyX3QgbWlkLCBpbnQgb3JkZXJlZCwgaW50IGlkYXRh
X3N1cHBvcnRlZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwor
CWlmIChvcmRlcmVkKSB7CisJCVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPmlucXVldWUs
IG5leHRfaW5zdHJtKSB7CisJCQlpZiAoU0NUUF9NSURfRVEoaWRhdGFfc3VwcG9ydGVkLCBjb250
cm9sLT5taWQsIG1pZCkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCWlm
IChpZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCVRBSUxRX0ZPUkVBQ0goY29udHJvbCwgJnN0cm0tPnVu
b19pbnF1ZXVlLCBuZXh0X2luc3RybSkgeworCQkJCWlmIChTQ1RQX01JRF9FUShpZGF0YV9zdXBw
b3J0ZWQsIGNvbnRyb2wtPm1pZCwgbWlkKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ
CX0gZWxzZSB7CisJCQljb250cm9sID0gVEFJTFFfRklSU1QoJnN0cm0tPnVub19pbnF1ZXVlKTsK
KwkJfQorCX0KKwlyZXR1cm4gKGNvbnRyb2wpOworfQorCitzdGF0aWMgaW50CitzY3RwX3Byb2Nl
c3NfYV9kYXRhX2NodW5rKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MsCisJCQkgIHN0cnVjdCBtYnVmICoqbSwgaW50IG9mZnNldCwgIGludCBjaGtf
bGVuZ3RoLAorCQkJICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIHVpbnQzMl90ICpoaWdoX3Rzbiwg
aW50ICphYm9ydF9mbGFnLAorCQkJICBpbnQgKmJyZWFrX2ZsYWcsIGludCBsYXN0X2NodW5rLCB1
aW50OF90IGNoa190eXBlKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoayA9IE5VTEw7
IC8qIG1ha2UgZ2NjIGhhcHB5ICovCisJdWludDMyX3QgdHNuLCBmc24sIGdhcCwgbWlkOworCXN0
cnVjdCBtYnVmICpkbWJ1ZjsKKwlpbnQgdGhlX2xlbjsKKwlpbnQgbmVlZF9yZWFzbV9jaGVjayA9
IDA7CisJdWludDE2X3Qgc2lkOworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJY2hhciBtc2dbU0NU
UF9ESUFHX0lORk9fTEVOXTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwg
Km5jb250cm9sOworCXVpbnQzMl90IHBwaWQ7CisJdWludDhfdCBjaGtfZmxhZ3M7CisJc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3QgKmxpc3RlOworCWludCBvcmRlcmVkOworCXNpemVfdCBj
bGVuOworCWludCBjcmVhdGVkX2NvbnRyb2wgPSAwOworCisJaWYgKGNoa190eXBlID09IFNDVFBf
SURBVEEpIHsKKwkJc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKmNodW5rLCBjaHVua19idWY7CisK
KwkJY2h1bmsgPSAoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKilzY3RwX21fZ2V0cHRyKCptLCBv
ZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspLCAodWludDhfdCAqKSZjaHVua19idWYp
OworCQljaGtfZmxhZ3MgPSBjaHVuay0+Y2guY2h1bmtfZmxhZ3M7CisJCWNsZW4gPSBzaXplb2Yo
c3RydWN0IHNjdHBfaWRhdGFfY2h1bmspOworCQl0c24gPSBudG9obChjaHVuay0+ZHAudHNuKTsK
KwkJc2lkID0gbnRvaHMoY2h1bmstPmRwLnNpZCk7CisJCW1pZCA9IG50b2hsKGNodW5rLT5kcC5t
aWQpOworCQlpZiAoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCWZzbiA9
IDA7CisJCQlwcGlkID0gY2h1bmstPmRwLnBwaWRfZnNuLnBwaWQ7CisJCX0gZWxzZSB7CisJCQlm
c24gPSBudG9obChjaHVuay0+ZHAucHBpZF9mc24uZnNuKTsKKwkJCXBwaWQgPSAweGZmZmZmZmZm
OyAvKiBVc2UgYXMgYW4gaW52YWxpZCB2YWx1ZS4gKi8KKwkJfQorCX0gZWxzZSB7CisJCXN0cnVj
dCBzY3RwX2RhdGFfY2h1bmsgKmNodW5rLCBjaHVua19idWY7CisKKwkJY2h1bmsgPSAoc3RydWN0
IHNjdHBfZGF0YV9jaHVuayAqKXNjdHBfbV9nZXRwdHIoKm0sIG9mZnNldCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2RhdGFfY2h1bmspLCAodWludDhfdCAqKSZjaHVua19idWYpOworCQljaGtfZmxhZ3MgPSBjaHVu
ay0+Y2guY2h1bmtfZmxhZ3M7CisJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVu
ayk7CisJCXRzbiA9IG50b2hsKGNodW5rLT5kcC50c24pOworCQlzaWQgPSBudG9ocyhjaHVuay0+
ZHAuc2lkKTsKKwkJbWlkID0gKHVpbnQzMl90KShudG9ocyhjaHVuay0+ZHAuc3NuKSk7CisJCWZz
biA9IHRzbjsKKwkJcHBpZCA9IGNodW5rLT5kcC5wcGlkOworCX0KKwlpZiAoKHNpemVfdCljaGtf
bGVuZ3RoID09IGNsZW4pIHsKKwkJLyoKKwkJICogTmVlZCB0byBzZW5kIGFuIGFib3J0IHNpbmNl
IHdlIGhhZCBhCisJCSAqIGVtcHR5IGRhdGEgY2h1bmsuCisJCSAqLworCQlvcF9lcnIgPSBzY3Rw
X2dlbmVyYXRlX25vX3VzZXJfZGF0YV9jYXVzZSh0c24pOworCQlzdGNiLT5zY3RwX2VwLT5sYXN0
X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18xNDsKKwkJc2N0
cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJ
aWYgKChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfU0FDS19JTU1FRElBVEVMWSkgPT0gU0NUUF9EQVRB
X1NBQ0tfSU1NRURJQVRFTFkpIHsKKwkJYXNvYy0+c2VuZF9zYWNrID0gMTsKKwl9CisJb3JkZXJl
ZCA9ICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgPT0gMCk7CisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxF
KSB7CisJCXNjdHBfbG9nX21hcCh0c24sIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9UU05fRU5URVJTKTsKKwl9CisJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlTQ1RQX0xUUkFDRV9DSEsoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgY2hrX3R5cGUsIHRzbik7CisJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmN1bXVs
YXRpdmVfdHNuLCB0c24pKSB7CisJCS8qIEl0IGlzIGEgZHVwbGljYXRlICovCisJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3JlY3ZkdXBkYXRhKTsKKwkJaWYgKGFzb2MtPm51bWR1cHRzbnMgPCBTQ1RQ
X01BWF9EVVBfVFNOUykgeworCQkJLyogUmVjb3JkIGEgZHVwIGZvciB0aGUgbmV4dCBvdXRib3Vu
ZCBzYWNrICovCisJCQlhc29jLT5kdXBfdHNuc1thc29jLT5udW1kdXB0c25zXSA9IHRzbjsKKwkJ
CWFzb2MtPm51bWR1cHRzbnMrKzsKKwkJfQorCQlhc29jLT5zZW5kX3NhY2sgPSAxOworCQlyZXR1
cm4gKDApOworCX0KKwkvKiBDYWxjdWxhdGUgdGhlIG51bWJlciBvZiBUU04ncyBiZXR3ZWVuIHRo
ZSBiYXNlIGFuZCB0aGlzIFRTTiAqLworCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgdHNuLCBh
c29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsKKwlpZiAoZ2FwID49IChTQ1RQX01BUFBJTkdf
QVJSQVkgPDwgMykpIHsKKwkJLyogQ2FuJ3QgaG9sZCB0aGUgYml0IGluIHRoZSBtYXBwaW5nIGF0
IG1heCBhcnJheSwgdG9zcyBpdCAqLworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoZ2FwID49ICh1
aW50MzJfdCkgKGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSA8PCAzKSkgeworCQlTQ1RQX1RDQl9M
T0NLX0FTU0VSVChzdGNiKTsKKwkJaWYgKHNjdHBfZXhwYW5kX21hcHBpbmdfYXJyYXkoYXNvYywg
Z2FwKSkgeworCQkJLyogQ2FuJ3QgZXhwYW5kLCBkcm9wIGl0ICovCisJCQlyZXR1cm4gKDApOwor
CQl9CisJfQorCWlmIChTQ1RQX1RTTl9HVCh0c24sICpoaWdoX3RzbikpIHsKKwkJKmhpZ2hfdHNu
ID0gdHNuOworCX0KKwkvKiBTZWUgaWYgd2UgaGF2ZSByZWNlaXZlZCB0aGlzIG9uZSBhbHJlYWR5
ICovCisJaWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKSB8
fAorCSAgICBTQ1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIGdhcCkp
IHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmR1cGRhdGEpOworCQlpZiAoYXNvYy0+bnVt
ZHVwdHNucyA8IFNDVFBfTUFYX0RVUF9UU05TKSB7CisJCQkvKiBSZWNvcmQgYSBkdXAgZm9yIHRo
ZSBuZXh0IG91dGJvdW5kIHNhY2sgKi8KKwkJCWFzb2MtPmR1cF90c25zW2Fzb2MtPm51bWR1cHRz
bnNdID0gdHNuOworCQkJYXNvYy0+bnVtZHVwdHNucysrOworCQl9CisJCWFzb2MtPnNlbmRfc2Fj
ayA9IDE7CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogQ2hlY2sgdG8gc2VlIGFib3V0IHRo
ZSBHT05FIGZsYWcsIGR1cGxpY2F0ZXMgd291bGQgY2F1c2UgYSBzYWNrCisJICogdG8gYmUgc2Vu
dCB1cCBhYm92ZQorCSAqLworCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkpKSB7CisJCS8qCisJCSAqIHdhaXQg
YSBtaW51dGUsIHRoaXMgZ3V5IGlzIGdvbmUsIHRoZXJlIGlzIG5vIGxvbmdlciBhCisJCSAqIHJl
Y2VpdmVyLiBTZW5kIHBlZXIgYW4gQUJPUlQhCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hbl9h
c3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tF
RCk7CisJCSphYm9ydF9mbGFnID0gMTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBOb3cg
YmVmb3JlIGdvaW5nIGZ1cnRoZXIgd2Ugc2VlIGlmIHRoZXJlIGlzIHJvb20uIElmIE5PVCB0aGVu
IHdlCisJICogTUFZIGxldCBvbmUgdGhyb3VnaCBvbmx5IElGIHRoaXMgVFNOIGlzIHRoZSBvbmUg
d2UgYXJlIHdhaXRpbmcKKwkgKiBmb3Igb24gYSBwYXJ0aWFsIGRlbGl2ZXJ5IEFQSS4KKwkgKi8K
KworCS8qIElzIHRoZSBzdHJlYW0gdmFsaWQ/ICovCisJaWYgKHNpZCA+PSBhc29jLT5zdHJlYW1p
bmNudCkgeworCQlzdHJ1Y3Qgc2N0cF9lcnJvcl9pbnZhbGlkX3N0cmVhbSAqY2F1c2U7CisKKwkJ
b3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9p
bnZhbGlkX3N0cmVhbSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCBNX05P
V0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChvcF9lcnIgIT0gTlVMTCkgeworCQkJLyogYWRkIHNv
bWUgc3BhY2UgdXAgZnJvbnQgc28gcHJlcGVuZCB3aWxsIHdvcmsgd2VsbCAqLworCQkJU0NUUF9C
VUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCQkJY2F1
c2UgPSBtdG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfZXJyb3JfaW52YWxpZF9zdHJlYW0gKik7CisJ
CQkvKgorCQkJICogRXJyb3IgY2F1c2VzIGFyZSBqdXN0IHBhcmFtJ3MgYW5kIHRoaXMgb25lIGhh
cworCQkJICogdHdvIGJhY2sgdG8gYmFjayBwaGRyLCBvbmUgd2l0aCB0aGUgZXJyb3IgdHlwZQor
CQkJICogYW5kIHNpemUsIHRoZSBvdGhlciB3aXRoIHRoZSBzdHJlYW1pZCBhbmQgYSByc3ZkCisJ
CQkgKi8KKwkJCVNDVFBfQlVGX0xFTihvcF9lcnIpID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9y
X2ludmFsaWRfc3RyZWFtKTsKKwkJCWNhdXNlLT5jYXVzZS5jb2RlID0gaHRvbnMoU0NUUF9DQVVT
RV9JTlZBTElEX1NUUkVBTSk7CisJCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0gaHRvbnMoc2l6ZW9m
KHN0cnVjdCBzY3RwX2Vycm9yX2ludmFsaWRfc3RyZWFtKSk7CisJCQljYXVzZS0+c3RyZWFtX2lk
ID0gaHRvbnMoc2lkKTsKKwkJCWNhdXNlLT5yZXNlcnZlZCA9IGh0b25zKDApOworCQkJc2N0cF9x
dWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19i
YWRzaWQpOworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwkJU0NUUF9TRVRfVFNOX1BS
RVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFNDVFBfVFNOX0dUKHRz
biwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwkJaWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxh
dGl2ZV90c24gKyAxKSkgeworCQkJLyogVXBkYXRlIGN1bS1hY2sgKi8KKwkJCWFzb2MtPmN1bXVs
YXRpdmVfdHNuID0gdHNuOworCQl9CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogSWYgaXRz
IGEgZnJhZ21lbnRlZCBtZXNzYWdlLCBsZXRzIHNlZSBpZiB3ZSBjYW4KKwkgKiBmaW5kIHRoZSBj
b250cm9sIG9uIHRoZSByZWFzc2VtYmx5IHF1ZXVlcy4KKwkgKi8KKwlpZiAoKGNoa190eXBlID09
IFNDVFBfSURBVEEpICYmCisJICAgICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcp
ID09IDApICYmCisJICAgIChmc24gPT0gMCkpIHsKKwkJLyogCisJCSAqICBUaGUgZmlyc3QgKm11
c3QqIGJlIGZzbiAwLCBhbmQgb3RoZXIgCisJCSAqICAobWlkZGxlL2VuZCkgcGllY2VzIGNhbiAq
bm90KiBiZSBmc24gMC4KKwkJICogWFhYOiBUaGlzIGNhbiBoYXBwZW4gaW4gY2FzZSBvZiBhIHdy
YXAgYXJvdW5kLgorCQkgKiAgICAgIElnbm9yZSBpcyBmb3Igbm93LgorCQkgKi8KKwkJc25wcmlu
dGYobXNnLCBzaXplb2YobXNnKSwgIkZTTiB6ZXJvIGZvciBNSUQ9JTguOHgsIGJ1dCBmbGFncz0l
Mi4yeCIsCisJCSAgICAgICAgIG1pZCwgY2hrX2ZsYWdzKTsKKwkJZ290byBlcnJfb3V0OworCX0K
Kwljb250cm9sID0gc2N0cF9maW5kX3JlYXNtX2VudHJ5KCZhc29jLT5zdHJtaW5bc2lkXSwgbWlk
LCBvcmRlcmVkLCBhc29jLT5pZGF0YV9zdXBwb3J0ZWQpOworCVNDVFBEQkcoU0NUUF9ERUJVR19Y
WFgsICJjaHVua19mbGFnczoweCV4IGxvb2sgZm9yIGNvbnRyb2wgb24gcXVldWVzICVwXG4iLAor
CQljaGtfZmxhZ3MsIGNvbnRyb2wpOworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9EQVRBX05PVF9G
UkFHKSAhPSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJLyogU2VlIGlmIHdlIGNhbiBmaW5kIHRo
ZSByZS1hc3NlbWJseSBlbnRpdHkgKi8KKwkJaWYgKGNvbnRyb2wgIT0gTlVMTCkgeworCQkJLyog
V2UgZm91bmQgc29tZXRoaW5nLCBkb2VzIGl0IGJlbG9uZz8gKi8KKwkJCWlmIChvcmRlcmVkICYm
IChtaWQgIT0gY29udHJvbC0+bWlkKSkgeworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyks
ICJSZWFzc2VtYmx5IHByb2JsZW0gKE1JRD0lOC44eCkiLCBtaWQpOworCQkJZXJyX291dDoKKwkJ
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFU
SU9OLCBtc2cpOworCQkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJP
TV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE1OworCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRp
b24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJ
CSphYm9ydF9mbGFnID0gMTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKG9yZGVyZWQg
JiYgKChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9VTk9SREVSRUQpKSB7
CisJCQkJLyogV2UgY2FuJ3QgaGF2ZSBhIHN3aXRjaGVkIG9yZGVyIHdpdGggYW4gdW5vcmRlcmVk
IGNodW5rICovCisJCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIkFsbCBmcmFnbWVudHMg
b2YgYSB1c2VyIG1lc3NhZ2UgbXVzdCBiZSBvcmRlcmVkIG9yIHVub3JkZXJlZCAoVFNOPSU4Ljh4
KSIsCisJCQkJCSB0c24pOworCQkJCWdvdG8gZXJyX291dDsKKwkJCX0KKwkJCWlmICghb3JkZXJl
ZCAmJiAoKChjb250cm9sLT5zaW5mb19mbGFncyA+PiA4KSAmIFNDVFBfREFUQV9VTk9SREVSRUQp
ID09IDApKSB7CisJCQkJLyogV2UgY2FuJ3QgaGF2ZSBhIHN3aXRjaGVkIHVub3JkZXJlZCB3aXRo
IGEgb3JkZXJlZCBjaHVuayAqLworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJBbGwg
ZnJhZ21lbnRzIG9mIGEgdXNlciBtZXNzYWdlIG11c3QgYmUgb3JkZXJlZCBvciB1bm9yZGVyZWQg
KFRTTj0lOC44eCkiLAorCQkJCQkgdHNuKTsKKwkJCQlnb3RvIGVycl9vdXQ7CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQkvKiBJdHMgYSBjb21wbGV0ZSBzZWdtZW50LiBMZXRzIHZhbGlkYXRlIHdl
CisJCSAqIGRvbid0IGhhdmUgYSByZS1hc3NlbWJseSBnb2luZyBvbiB3aXRoCisJCSAqIHRoZSBz
YW1lIFN0cmVhbS9TZXEgKGZvciBvcmRlcmVkKSBvciBpbgorCQkgKiB0aGUgc2FtZSBTdHJlYW0g
Zm9yIHVub3JkZXJlZC4KKwkJICovCisJCWlmIChjb250cm9sICE9IE5VTEwpIHsKKwkJCWlmIChv
cmRlcmVkIHx8IGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19YWFgsICJjaHVua19mbGFnczogMHgleCBkdXAgZGV0ZWN0ZWQgb24gTUlEOiAldVxuIiwKKwkJ
CQkJY2hrX2ZsYWdzLCBtaWQpOworCQkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJEdXBs
aWNhdGUgTUlEPSU4Ljh4IGRldGVjdGVkLiIsIG1pZCk7CisJCQkJZ290byBlcnJfb3V0OworCQkJ
fSBlbHNlIHsKKwkJCQlpZiAoKHRzbiA9PSBjb250cm9sLT5mc25faW5jbHVkZWQgKyAxKSAmJgor
CQkJCSAgICAoY29udHJvbC0+ZW5kX2FkZGVkID09IDApKSB7CisJCQkJCXNucHJpbnRmKG1zZywg
c2l6ZW9mKG1zZyksICJJbGxlZ2FsIG1lc3NhZ2Ugc2VxdWVuY2UsIG1pc3NpbmcgZW5kIGZvciBN
SUQ6ICU4Ljh4IiwgY29udHJvbC0+ZnNuX2luY2x1ZGVkKTsKKwkJCQkJZ290byBlcnJfb3V0Owor
CQkJCX0gZWxzZSB7CisJCQkJCWNvbnRyb2wgPSBOVUxMOworCQkJCX0KKwkJCX0KKwkJfQorCX0K
KwkvKiBub3cgZG8gdGhlIHRlc3RzICovCisJaWYgKCgoYXNvYy0+Y250X29uX2FsbF9zdHJlYW1z
ICsKKwkgICAgICBhc29jLT5jbnRfb25fcmVhc21fcXVldWUgKworCSAgICAgIGFzb2MtPmNudF9t
c2dfb25fc2IpID49IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSkg
fHwKKwkgICAgKCgoaW50KWFzb2MtPm15X3J3bmQpIDw9IDApKSB7CisJCS8qCisJCSAqIFdoZW4g
d2UgaGF2ZSBOTyByb29tIGluIHRoZSByd25kIHdlIGNoZWNrIHRvIG1ha2Ugc3VyZQorCQkgKiB0
aGUgcmVhZGVyIGlzIGRvaW5nIGl0cyBqb2IuLi4KKwkJICovCisJCWlmIChzdGNiLT5zY3RwX3Nv
Y2tldC0+c29fcmN2LnNiX2NjKSB7CisJCQkvKiBzb21lIHRvIHJlYWQsIHdha2UtdXAgKi8KKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJ
CXN0cnVjdCBzb2NrZXQgKnNvOworCisJCQlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXAp
OworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJU0NUUF9UQ0Jf
TE9DSyhzdGNiKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7
CisJCQkJLyogYXNzb2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCQlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJCXJldHVybiAoMCk7CisJCQl9CisjZW5kaWYK
KwkJCXNjdHBfc29yd2FrZXVwKHN0Y2ItPnNjdHBfZXAsIHN0Y2ItPnNjdHBfc29ja2V0KTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJ
CVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJfQorCQkvKiBub3cgaXMgaXQg
aW4gdGhlIG1hcHBpbmcgYXJyYXkgb2Ygd2hhdCB3ZSBoYXZlIGFjY2VwdGVkPyAqLworCQlpZiAo
Y2hrX3R5cGUgPT0gU0NUUF9EQVRBKSB7CisJCQlpZiAoU0NUUF9UU05fR1QodHNuLCBhc29jLT5o
aWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSAmJgorCQkJICAgIFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCQkvKiBOb3BlIG5vdCBpbiB0aGUgdmFs
aWQgcmFuZ2UgZHVtcCBpdCAqLworCQkJZHVtcF9wYWNrZXQ6CisJCQkJc2N0cF9zZXRfcnduZChz
dGNiLCBhc29jKTsKKwkJCQlpZiAoKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyArCisJCQkJICAg
ICBhc29jLT5jbnRfb25fcmVhc21fcXVldWUgKworCQkJCSAgICAgYXNvYy0+Y250X21zZ19vbl9z
YikgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSB7CisJCQkJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX2RhdGFkcm9wY2hrbG10KTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19kYXRhZHJvcHJ3bmQpOworCQkJCX0KKwkJCQkqYnJlYWtf
ZmxhZyA9IDE7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChjb250
cm9sID09IE5VTEwpIHsKKwkJCQlnb3RvIGR1bXBfcGFja2V0OworCQkJfQorCQkJaWYgKFNDVFBf
VFNOX0dUKGZzbiwgY29udHJvbC0+dG9wX2ZzbikpIHsKKwkJCQlnb3RvIGR1bXBfcGFja2V0Owor
CQkJfQorCQl9CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7CisJaWYgKGFzb2MtPnRzbl9pbl9hdCA+PSBTQ1RQX1RTTl9MT0dfU0la
RSkgeworCQlhc29jLT50c25faW5fYXQgPSAwOworCQlhc29jLT50c25faW5fd3JhcHBlZCA9IDE7
CisJfQorCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRdLnRzbiA9IHRzbjsKKwlhc29j
LT5pbl90c25sb2dbYXNvYy0+dHNuX2luX2F0XS5zdHJtID0gc2lkOworCWFzb2MtPmluX3Rzbmxv
Z1thc29jLT50c25faW5fYXRdLnNlcSA9IG1pZDsKKwlhc29jLT5pbl90c25sb2dbYXNvYy0+dHNu
X2luX2F0XS5zeiA9IGNoa19sZW5ndGg7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9h
dF0uZmxncyA9IGNodW5rX2ZsYWdzOworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5fYXRd
LnN0Y2IgPSAodm9pZCAqKXN0Y2I7CisJYXNvYy0+aW5fdHNubG9nW2Fzb2MtPnRzbl9pbl9hdF0u
aW5fcG9zID0gYXNvYy0+dHNuX2luX2F0OworCWFzb2MtPmluX3RzbmxvZ1thc29jLT50c25faW5f
YXRdLmluX291dCA9IDE7CisJYXNvYy0+dHNuX2luX2F0Kys7CisjZW5kaWYKKwkvKgorCSAqIEJl
Zm9yZSB3ZSBjb250aW51ZSBsZXRzIHZhbGlkYXRlIHRoYXQgd2UgYXJlIG5vdCBiZWluZyBmb29s
ZWQgYnkKKwkgKiBhbiBldmlsIGF0dGFja2VyLiBXZSBjYW4gb25seSBoYXZlIE5rIGNodW5rcyBi
YXNlZCBvbiBvdXIgVFNOCisJICogc3ByZWFkIGFsbG93ZWQgYnkgdGhlIG1hcHBpbmcgYXJyYXkg
TiAqIDggYml0cywgc28gdGhlcmUgaXMgbm8KKwkgKiB3YXkgb3VyIHN0cmVhbSBzZXF1ZW5jZSBu
dW1iZXJzIGNvdWxkIGhhdmUgd3JhcHBlZC4gV2Ugb2YgY291cnNlCisJICogb25seSB2YWxpZGF0
ZSB0aGUgRklSU1QgZnJhZ21lbnQgc28gdGhlIGJpdCBtdXN0IGJlIHNldC4KKwkgKi8KKwlpZiAo
KGNoa19mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSAmJgorCSAgICAoVEFJTFFfRU1QVFko
JmFzb2MtPnJlc2V0SGVhZCkpICYmCisJICAgIChjaGtfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRF
UkVEKSA9PSAwICYmCisJICAgIFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXNv
Yy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZlcmVkLCBtaWQpKSB7CisJCS8qIFRoZSBpbmNv
bWluZyBzc2VxIGlzIGJlaGluZCB3aGVyZSB3ZSBsYXN0IGRlbGl2ZXJlZD8gKi8KKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOREFUQTEsICJFVklML0Jyb2tlbi1EdXAgUy1TRVE6ICV1IGRlbGl2ZXJl
ZDogJXUgZnJvbSBwZWVyLCBBYm9ydCFcbiIsCisJCQltaWQsIGFzb2MtPnN0cm1pbltzaWRdLmxh
c3RfbWlkX2RlbGl2ZXJlZCk7CisKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJ
c25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIkRlbGl2ZXJlZCBNSUQ9JTguOHgsIGdvdCBUU049
JTguOHgsIFNJRD0lNC40eCwgTUlEPSU4Ljh4IiwKKwkJCSAgICAgICAgIGFzb2MtPnN0cm1pbltz
aWRdLmxhc3RfbWlkX2RlbGl2ZXJlZCwKKwkJCSAgICAgICAgIHRzbiwKKwkJCSAgICAgICAgIHNp
ZCwKKwkJCSAgICAgICAgIG1pZCk7CisJCX0gZWxzZSB7CisJCQlzbnByaW50Zihtc2csIHNpemVv
Zihtc2cpLCAiRGVsaXZlcmVkIFNTTj0lNC40eCwgZ290IFRTTj0lOC44eCwgU0lEPSU0LjR4LCBT
U049JTQuNHgiLAorCQkJICAgICAgICAgKHVpbnQxNl90KWFzb2MtPnN0cm1pbltzaWRdLmxhc3Rf
bWlkX2RlbGl2ZXJlZCwKKwkJCSAgICAgICAgIHRzbiwKKwkJCSAgICAgICAgIHNpZCwKKwkJCSAg
ICAgICAgICh1aW50MTZfdCltaWQpOworCQl9CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1
c2UoU0NUUF9DQVVTRV9QUk9UT0NPTF9WSU9MQVRJT04sIG1zZyk7CisJCXN0Y2ItPnNjdHBfZXAt
Pmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE2Owor
CQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9wX2Vyciwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJKmFib3J0X2ZsYWcgPSAxOworCQlyZXR1cm4gKDApOwor
CX0KKwlpZiAoY2hrX3R5cGUgPT0gU0NUUF9JREFUQSkgeworCQl0aGVfbGVuID0gKGNoa19sZW5n
dGggLSBzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspKTsKKwl9IGVsc2UgeworCQl0aGVf
bGVuID0gKGNoa19sZW5ndGggLSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCX0K
KwlpZiAobGFzdF9jaHVuayA9PSAwKSB7CisJCWlmIChjaGtfdHlwZSA9PSBTQ1RQX0lEQVRBKSB7
CisJCQlkbWJ1ZiA9IFNDVFBfTV9DT1BZTSgqbSwKKwkJCQkJICAgICAob2Zmc2V0ICsgc2l6ZW9m
KHN0cnVjdCBzY3RwX2lkYXRhX2NodW5rKSksCisJCQkJCSAgICAgdGhlX2xlbiwgTV9OT1dBSVQp
OworCQl9IGVsc2UgeworCQkJZG1idWYgPSBTQ1RQX01fQ09QWU0oKm0sCisJCQkJCSAgICAgKG9m
ZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSksCisJCQkJCSAgICAgdGhlX2xl
biwgTV9OT1dBSVQpOworCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJM
RSkgeworCQkJc2N0cF9sb2dfbWJjKGRtYnVmLCBTQ1RQX01CVUZfSUNPUFkpOworCQl9CisjZW5k
aWYKKwl9IGVsc2UgeworCQkvKiBXZSBjYW4gc3RlYWwgdGhlIGxhc3QgY2h1bmsgKi8KKwkJaW50
IGxfbGVuOworCQlkbWJ1ZiA9ICptOworCQkvKiBsb3Agb2ZmIHRoZSB0b3AgcGFydCAqLworCQlp
ZiAoY2hrX3R5cGUgPT0gU0NUUF9JREFUQSkgeworCQkJbV9hZGooZG1idWYsIChvZmZzZXQgKyBz
aXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspKSk7CisJCX0gZWxzZSB7CisJCQltX2Fkaihk
bWJ1ZiwgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpOworCQl9CisJ
CWlmIChTQ1RQX0JVRl9ORVhUKGRtYnVmKSA9PSBOVUxMKSB7CisJCQlsX2xlbiA9IFNDVFBfQlVG
X0xFTihkbWJ1Zik7CisJCX0gZWxzZSB7CisJCQkvKiBuZWVkIHRvIGNvdW50IHVwIHRoZSBzaXpl
IGhvcGVmdWxseQorCQkJICogZG9lcyBub3QgaGl0IHRoaXMgdG8gb2Z0ZW4gOi0wCisJCQkgKi8K
KwkJCXN0cnVjdCBtYnVmICpsYXQ7CisKKwkJCWxfbGVuID0gMDsKKwkJCWZvciAobGF0ID0gZG1i
dWY7IGxhdDsgbGF0ID0gU0NUUF9CVUZfTkVYVChsYXQpKSB7CisJCQkJbF9sZW4gKz0gU0NUUF9C
VUZfTEVOKGxhdCk7CisJCQl9CisJCX0KKwkJaWYgKGxfbGVuID4gdGhlX2xlbikgeworCQkJLyog
VHJpbSB0aGUgZW5kIHJvdW5kIGJ5dGVzIG9mZiAgdG9vICovCisJCQltX2FkaihkbWJ1ZiwgLShs
X2xlbiAtIHRoZV9sZW4pKTsKKwkJfQorCX0KKwlpZiAoZG1idWYgPT0gTlVMTCkgeworCQlTQ1RQ
X1NUQVRfSU5DUihzY3Rwc19ub21lbSk7CisJCXJldHVybiAoMCk7CisJfQorCS8qCisJICogTm93
IG5vIG1hdHRlciB3aGF0LCB3ZSBuZWVkIGEgY29udHJvbCwgZ2V0IG9uZQorCSAqIGlmIHdlIGRv
bid0IGhhdmUgb25lICh3ZSBtYXkgaGF2ZSBnb3R0ZW4gaXQKKwkgKiBhYm92ZSB3aGVuIHdlIGZv
dW5kIHRoZSBtZXNzYWdlIHdhcyBmcmFnbWVudGVkCisJICovCisJaWYgKGNvbnRyb2wgPT0gTlVM
TCkgeworCQlzY3RwX2FsbG9jX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7CisJCXNjdHBfYnVpbGRf
cmVhZHFfZW50cnlfbWFjKGNvbnRyb2wsIHN0Y2IsIGFzb2MtPmNvbnRleHQsIG5ldCwgdHNuLAor
CQkJCQkgICBwcGlkLAorCQkJCQkgICBzaWQsCisJCQkJCSAgIGNoa19mbGFncywKKwkJCQkJICAg
TlVMTCwgZnNuLCBtaWQpOworCQlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19ub21lbSk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCWlmICgoY2hrX2ZsYWdz
ICYgU0NUUF9EQVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCXN0cnVj
dCBtYnVmICptbTsKKworCQkJY29udHJvbC0+ZGF0YSA9IGRtYnVmOworCQkJZm9yIChtbSA9IGNv
bnRyb2wtPmRhdGE7IG1tOyBtbSA9IG1tLT5tX25leHQpIHsKKwkJCQljb250cm9sLT5sZW5ndGgg
Kz0gU0NUUF9CVUZfTEVOKG1tKTsKKwkJCX0KKwkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IE5VTEw7
CisJCQljb250cm9sLT5lbmRfYWRkZWQgPSAxOworCQkJY29udHJvbC0+bGFzdF9mcmFnX3NlZW4g
PSAxOworCQkJY29udHJvbC0+Zmlyc3RfZnJhZ19zZWVuID0gMTsKKwkJCWNvbnRyb2wtPmZzbl9p
bmNsdWRlZCA9IGZzbjsKKwkJCWNvbnRyb2wtPnRvcF9mc24gPSBmc247CisJCX0KKwkJY3JlYXRl
ZF9jb250cm9sID0gMTsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgImNodW5rX2ZsYWdz
OiAweCV4IG9yZGVyZWQ6ICVkIE1JRDogJXUgY29udHJvbDogJXBcbiIsCisJCWNoa19mbGFncywg
b3JkZXJlZCwgbWlkLCBjb250cm9sKTsKKwlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9OT1Rf
RlJBRykgPT0gU0NUUF9EQVRBX05PVF9GUkFHICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5y
ZXNldEhlYWQpICYmCisJICAgICgob3JkZXJlZCA9PSAwKSB8fAorCSAgICAgKFNDVFBfTUlEX0VR
KGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgYXNvYy0+c3RybWluW3NpZF0ubGFzdF9taWRfZGVsaXZl
cmVkICsgMSwgbWlkKSAmJgorCSAgICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zdHJtaW5bc2lkXS5p
bnF1ZXVlKSkpKSB7CisJCS8qIENhbmRpZGF0ZSBmb3IgZXhwcmVzcyBkZWxpdmVyeSAqLworCQkv
KgorCQkgKiBJdHMgbm90IGZyYWdtZW50ZWQsIE5vIFBELUFQSSBpcyB1cCwgTm90aGluZyBpbiB0
aGUKKwkJICogZGVsaXZlcnkgcXVldWUsIEl0cyB1bi1vcmRlcmVkIE9SIG9yZGVyZWQgYW5kIHRo
ZSBuZXh0IHRvCisJCSAqIGRlbGl2ZXIgQU5EIG5vdGhpbmcgZWxzZSBpcyBzdHVjayBvbiB0aGUg
c3RyZWFtIHF1ZXVlLAorCQkgKiBBbmQgdGhlcmUgaXMgcm9vbSBmb3IgaXQgaW4gdGhlIHNvY2tl
dCBidWZmZXIuIExldHMganVzdAorCQkgKiBzdHVmZiBpdCB1cCB0aGUgYnVmZmVyLi4uLgorCQkg
Ki8KKwkJU0NUUF9TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsK
KwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkp
IHsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX1hYWCwgIkluamVjdGluZyBjb250cm9sOiAlcCB0byBiZSByZWFkIChN
SUQ6ICV1KVxuIiwKKwkJCWNvbnRyb2wsIG1pZCk7CisKKwkJc2N0cF9hZGRfdG9fcmVhZHEoc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwKKwkJICAgICAgICAgICAgICAgICAgY29udHJvbCwgJnN0Y2ItPnNj
dHBfc29ja2V0LT5zb19yY3YsCisJCSAgICAgICAgICAgICAgICAgIDEsIFNDVFBfUkVBRF9MT0NL
X05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCisJCWlmICgoY2hrX2ZsYWdzICYgU0NU
UF9EQVRBX1VOT1JERVJFRCkgPT0gMCkgeworCQkJLyogZm9yIG9yZGVyZWQsIGJ1bXAgd2hhdCB3
ZSBkZWxpdmVyZWQgKi8KKwkJCWFzb2MtPnN0cm1pbltzaWRdLmxhc3RfbWlkX2RlbGl2ZXJlZCsr
OworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZleHByZXNzKTsKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU1RSX0xPR0dJTkdfRU5BQkxF
KSB7CisJCQlzY3RwX2xvZ19zdHJtX2RlbF9hbHQoc3RjYiwgdHNuLCBtaWQsIHNpZCwKKwkJCQkJ
ICAgICAgU0NUUF9TVFJfTE9HX0ZST01fRVhQUlNfREVMKTsKKwkJfQorCQljb250cm9sID0gTlVM
TDsKKwkJZ290byBmaW5pc2hfZXhwcmVzc19kZWw7CisJfQorCisJLyogTm93IHdpbGwgd2UgbmVl
ZCBhIGNodW5rIHRvbz8gKi8KKwlpZiAoKGNoa19mbGFncyAmIFNDVFBfREFUQV9OT1RfRlJBRykg
IT0gU0NUUF9EQVRBX05PVF9GUkFHKSB7CisJCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGsp
OworCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCS8qIE5vIG1lbW9yeSBzbyB3ZSBkcm9wIHRoZSBj
aHVuayAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbm9tZW0pOworCQkJaWYgKGxhc3RfY2h1
bmsgPT0gMCkgeworCQkJCS8qIHdlIGNvcGllZCBpdCwgZnJlZSB0aGUgY29weSAqLworCQkJCXNj
dHBfbV9mcmVlbShkbWJ1Zik7CisJCQl9CisJCQlyZXR1cm4gKDApOworCQl9CisJCWNoay0+cmVj
LmRhdGEudHNuID0gdHNuOworCQljaGstPm5vX2ZyX2FsbG93ZWQgPSAwOworCQljaGstPnJlYy5k
YXRhLmZzbiA9IGZzbjsKKwkJY2hrLT5yZWMuZGF0YS5taWQgPSBtaWQ7CisJCWNoay0+cmVjLmRh
dGEuc2lkID0gc2lkOworCQljaGstPnJlYy5kYXRhLnBwaWQgPSBwcGlkOworCQljaGstPnJlYy5k
YXRhLmNvbnRleHQgPSBzdGNiLT5hc29jLmNvbnRleHQ7CisJCWNoay0+cmVjLmRhdGEuZG9pbmdf
ZmFzdF9yZXRyYW5zbWl0ID0gMDsKKwkJY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3MgPSBjaGtfZmxh
Z3M7CisJCWNoay0+YXNvYyA9IGFzb2M7CisJCWNoay0+c2VuZF9zaXplID0gdGhlX2xlbjsKKwkJ
Y2hrLT53aG9UbyA9IG5ldDsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIkJ1aWxkaW5nIGNr
OiAlcCBmb3IgY29udHJvbDogJXAgdG8gYmUgcmVhZCAoTUlEOiAldSlcbiIsCisJCQljaGssCisJ
CQljb250cm9sLCBtaWQpOworCQlhdG9taWNfYWRkX2ludCgmbmV0LT5yZWZfY291bnQsIDEpOwor
CQljaGstPmRhdGEgPSBkbWJ1ZjsKKwl9CisJLyogU2V0IHRoZSBhcHByb3ByaWF0ZSBUU04gbWFy
ayAqLworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZG9fZHJhaW4pID09IDApIHsKKwkJU0NU
UF9TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJaWYgKFND
VFBfVFNOX0dUKHRzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCkpIHsKKwkJCWFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPSB0c247CisJCX0KKwl9IGVsc2UgeworCQlT
Q1RQX1NFVF9UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5LCBnYXApOworCQlpZiAoU0NU
UF9UU05fR1QodHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKSkgeworCQkJYXNvYy0+
aGlnaGVzdF90c25faW5zaWRlX21hcCA9IHRzbjsKKwkJfQorCX0KKwkvKiBOb3cgaXMgaXQgY29t
cGxldGUgKGkuZS4gbm90IGZyYWdtZW50ZWQpPyAqLworCWlmICgoY2hrX2ZsYWdzICYgU0NUUF9E
QVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJLyoKKwkJICogU3BlY2lh
bCBjaGVjayBmb3Igd2hlbiBzdHJlYW1zIGFyZSByZXNldHRpbmcuIFdlCisJCSAqIGNvdWxkIGJl
IG1vcmUgc21hcnQgYWJvdXQgdGhpcyBhbmQgY2hlY2sgdGhlCisJCSAqIGFjdHVhbCBzdHJlYW0g
dG8gc2VlIGlmIGl0IGlzIG5vdCBiZWluZyByZXNldC4uCisJCSAqIHRoYXQgd2F5IHdlIHdvdWxk
IG5vdCBjcmVhdGUgYSBIT0xCIHdoZW4gYW1vbmdzdAorCQkgKiBzdHJlYW1zIGJlaW5nIHJlc2V0
IGFuZCB0aG9zZSBub3QgYmVpbmcgcmVzZXQuCisJCSAqCisJCSAqLworCQlpZiAoKChsaXN0ZSA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpKSAhPSBOVUxMKSAmJgorCQkgICAgU0NUUF9U
U05fR1QodHNuLCBsaXN0ZS0+dHNuKSkgeworCQkJLyoKKwkJCSAqIHllcCBpdHMgcGFzdCB3aGVy
ZSB3ZSBuZWVkIHRvIHJlc2V0Li4uIGdvCisJCQkgKiBhaGVhZCBhbmQgcXVldWUgaXQuCisJCQkg
Ki8KKwkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSkpIHsKKwkJ
CQkvKiBmaXJzdCBvbmUgb24gKi8KKwkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+cGVuZGlu
Z19yZXBseV9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICpsY29udHJvbCwgKm5sY29udHJvbDsKKwkJCQl1bnNpZ25lZCBj
aGFyIGluc2VydGVkID0gMDsKKwkJCQlUQUlMUV9GT1JFQUNIX1NBRkUobGNvbnRyb2wsICZhc29j
LT5wZW5kaW5nX3JlcGx5X3F1ZXVlLCBuZXh0LCBubGNvbnRyb2wpIHsKKwkJCQkJaWYgKFNDVFBf
VFNOX0dUKGNvbnRyb2wtPnNpbmZvX3RzbiwgbGNvbnRyb2wtPnNpbmZvX3RzbikpIHsKKworCQkJ
CQkJY29udGludWU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQkJ
VEFJTFFfSU5TRVJUX0JFRk9SRShsY29udHJvbCwgY29udHJvbCwgbmV4dCk7CisJCQkJCQlpbnNl
cnRlZCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCQlpZiAoaW5zZXJ0ZWQg
PT0gMCkgeworCQkJCQkvKgorCQkJCQkgKiBtdXN0IGJlIHB1dCBhdCBlbmQsIHVzZQorCQkJCQkg
KiBwcmV2UCAoYWxsIHNldHVwIGZyb20KKwkJCQkJICogbG9vcCkgdG8gc2V0dXAgbmV4dFAuCisJ
CQkJCSAqLworCQkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1
ZSwgY29udHJvbCwgbmV4dCk7CisJCQkJfQorCQkJfQorCQkJZ290byBmaW5pc2hfZXhwcmVzc19k
ZWw7CisJCX0KKwkJaWYgKGNoa19mbGFncyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKKwkJCS8q
IHF1ZXVlIGRpcmVjdGx5IGludG8gc29ja2V0IGJ1ZmZlciAqLworCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1hYWCwgIlVub3JkZXJlZCBkYXRhIHRvIGJlIHJlYWQgY29udHJvbDogJXAgTUlEOiAldVxu
IiwKKwkJCQljb250cm9sLCBtaWQpOworCQkJc2N0cF9tYXJrX25vbl9yZXZva2FibGUoYXNvYywg
Y29udHJvbC0+c2luZm9fdHNuKTsKKwkJCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsCisJCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkJICAgICAgICAgICAgICAg
ICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsCisJCQkgICAgICAgICAgICAgICAgICBT
Q1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCQl9IGVsc2Ug
eworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1hYWCwgIlF1ZXVlIGNvbnRyb2w6ICVwIGZvciByZW9y
ZGVyaW5nIE1JRDogJXVcbiIsIGNvbnRyb2wsCisJCQkJbWlkKTsKKwkJCXNjdHBfcXVldWVfZGF0
YV90b19zdHJlYW0oc3RjYiwgYXNvYywgY29udHJvbCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21f
Y2hlY2spOworCQkJaWYgKCphYm9ydF9mbGFnKSB7CisJCQkJaWYgKGxhc3RfY2h1bmspIHsKKwkJ
CQkJKm0gPSBOVUxMOworCQkJCX0KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJCWdvdG8g
ZmluaXNoX2V4cHJlc3NfZGVsOworCX0KKwkvKiBJZiB3ZSByZWFjaCBoZXJlIGl0cyBhIHJlYXNz
ZW1ibHkgKi8KKwluZWVkX3JlYXNtX2NoZWNrID0gMTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfWFhY
LAorCQkiUXVldWUgZGF0YSB0byBzdHJlYW0gZm9yIHJlYXNtIGNvbnRyb2w6ICVwIE1JRDogJXVc
biIsCisJCWNvbnRyb2wsIG1pZCk7CisJc2N0cF9xdWV1ZV9kYXRhX2Zvcl9yZWFzbShzdGNiLCBh
c29jLCBjb250cm9sLCBjaGssIGNyZWF0ZWRfY29udHJvbCwgYWJvcnRfZmxhZywgdHNuKTsKKwlp
ZiAoKmFib3J0X2ZsYWcpIHsKKwkJLyoKKwkJICogdGhlIGFzc29jIGlzIG5vdyBnb25lIGFuZCBj
aGsgd2FzIHB1dCBvbnRvIHRoZQorCQkgKiByZWFzbSBxdWV1ZSwgd2hpY2ggaGFzIGFsbCBiZWVu
IGZyZWVkLgorCQkgKi8KKwkJaWYgKGxhc3RfY2h1bmspIHsKKwkJCSptID0gTlVMTDsKKwkJfQor
CQlyZXR1cm4gKDApOworCX0KK2ZpbmlzaF9leHByZXNzX2RlbDoKKwkvKiBIZXJlIHdlIHRpZHkg
dXAgdGhpbmdzICovCisJaWYgKHRzbiA9PSAoYXNvYy0+Y3VtdWxhdGl2ZV90c24gKyAxKSkgewor
CQkvKiBVcGRhdGUgY3VtLWFjayAqLworCQlhc29jLT5jdW11bGF0aXZlX3RzbiA9IHRzbjsKKwl9
CisJaWYgKGxhc3RfY2h1bmspIHsKKwkJKm0gPSBOVUxMOworCX0KKwlpZiAob3JkZXJlZCkgewor
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5vcmRlcmNodW5rcyk7CisJfSBlbHNl
IHsKKwkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2ludW5vcmRlcmNodW5rcyk7CisJ
fQorCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZkYXRhKTsKKwkvKiBTZXQgaXQgcHJlc2VudCBw
bGVhc2UgKi8KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9TVFJfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9sb2dfc3RybV9kZWxfYWx0KHN0Y2IsIHRz
biwgbWlkLCBzaWQsIFNDVFBfU1RSX0xPR19GUk9NX01BUktfVFNOKTsKKwl9CisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxF
KSB7CisJCXNjdHBfbG9nX21hcChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLCBhc29jLT5j
dW11bGF0aXZlX3RzbiwKKwkJCSAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwgU0NU
UF9NQVBfUFJFUEFSRV9TTElERSk7CisJfQorCWlmIChuZWVkX3JlYXNtX2NoZWNrKSB7CisJCSh2
b2lkKXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCAmYXNvYy0+c3RybWluW3Np
ZF0sIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxEKTsKKwkJbmVlZF9yZWFzbV9jaGVjayA9IDA7CisJ
fQorCS8qIGNoZWNrIHRoZSBzcGVjaWFsIGZsYWcgZm9yIHN0cmVhbSByZXNldHMgKi8KKwlpZiAo
KChsaXN0ZSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5yZXNldEhlYWQpKSAhPSBOVUxMKSAmJgorCSAg
ICBTQ1RQX1RTTl9HRShhc29jLT5jdW11bGF0aXZlX3RzbiwgbGlzdGUtPnRzbikpIHsKKwkJLyoK
KwkJICogd2UgaGF2ZSBmaW5pc2hlZCB3b3JraW5nIHRocm91Z2ggdGhlIGJhY2tsb2dnZWQgVFNO
J3Mgbm93CisJCSAqIHRpbWUgdG8gcmVzZXQgc3RyZWFtcy4gMTogY2FsbCByZXNldCBmdW5jdGlv
bi4gMjogZnJlZQorCQkgKiBwZW5kaW5nX3JlcGx5IHNwYWNlIDM6IGRpc3RyaWJ1dGUgYW55IGNo
dW5rcyBpbgorCQkgKiBwZW5kaW5nX3JlcGx5X3F1ZXVlLgorCQkgKi8KKwkJc2N0cF9yZXNldF9p
bl9zdHJlYW0oc3RjYiwgbGlzdGUtPm51bWJlcl9lbnRyaWVzLCBsaXN0ZS0+bGlzdF9vZl9zdHJl
YW1zKTsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5yZXNldEhlYWQsIGxpc3RlLCBuZXh0X3Jlc3Ap
OworCQlzY3RwX3NlbmRfZGVmZXJyZWRfcmVzZXRfcmVzcG9uc2Uoc3RjYiwgbGlzdGUsIFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQpOworCQlTQ1RQX0ZSRUUobGlzdGUsIFNDVFBf
TV9TVFJFU0VUKTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJbGlzdGUgPSBUQUlM
UV9GSVJTVCgmYXNvYy0+cmVzZXRIZWFkKTsKKwkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5yZXNl
dEhlYWQpKSB7CisJCQkvKiBBbGwgY2FuIGJlIHJlbW92ZWQgKi8KKwkJCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjb250cm9sLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4dCwgbmNvbnRyb2wp
IHsKKwkJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIGNvbnRyb2ws
IG5leHQpOworCQkJCXNjdHBfcXVldWVfZGF0YV90b19zdHJlYW0oc3RjYiwgYXNvYywgY29udHJv
bCwgYWJvcnRfZmxhZywgJm5lZWRfcmVhc21fY2hlY2spOworCQkJCWlmICgqYWJvcnRfZmxhZykg
eworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCQlpZiAobmVlZF9yZWFzbV9jaGVjaykgewor
CQkJCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hlY2soc3RjYiwgYXNvYywgJmFzb2MtPnN0
cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCk7CisJ
CQkJCW5lZWRfcmVhc21fY2hlY2sgPSAwOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjb250cm9sLCAmYXNvYy0+cGVuZGluZ19yZXBseV9xdWV1ZSwgbmV4
dCwgbmNvbnRyb2wpIHsKKwkJCQlpZiAoU0NUUF9UU05fR1QoY29udHJvbC0+c2luZm9fdHNuLCBs
aXN0ZS0+dHNuKSkgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyoKKwkJCQkgKiBpZiBjb250
cm9sLT5zaW5mb190c24gaXMgPD0gbGlzdGUtPnRzbiB3ZSBjYW4KKwkJCQkgKiBwcm9jZXNzIGl0
IHdoaWNoIGlzIHRoZSBOT1Qgb2YKKwkJCQkgKiBjb250cm9sLT5zaW5mb190c24gPiBsaXN0ZS0+
dHNuCisJCQkJICovCisJCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5wZW5kaW5nX3JlcGx5X3F1ZXVl
LCBjb250cm9sLCBuZXh0KTsKKwkJCQlzY3RwX3F1ZXVlX2RhdGFfdG9fc3RyZWFtKHN0Y2IsIGFz
b2MsIGNvbnRyb2wsIGFib3J0X2ZsYWcsICZuZWVkX3JlYXNtX2NoZWNrKTsKKwkJCQlpZiAoKmFi
b3J0X2ZsYWcpIHsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQkJaWYgKG5lZWRfcmVhc21f
Y2hlY2spIHsKKwkJCQkJKHZvaWQpc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsIGFzb2Ms
ICZhc29jLT5zdHJtaW5bY29udHJvbC0+c2luZm9fc3RyZWFtXSwgU0NUUF9SRUFEX0xPQ0tfTk9U
X0hFTEQpOworCQkJCQluZWVkX3JlYXNtX2NoZWNrID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKwl9
CisJcmV0dXJuICgxKTsKK30KKworc3RhdGljIGNvbnN0IGludDhfdCBzY3RwX21hcF9sb29rdXBf
dGFiWzI1Nl0gPSB7CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAs
IDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDYs
CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAs
IDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEs
IDAsIDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDcsCisgIDAsIDEsIDAs
IDIsIDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIs
IDAsIDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAs
IDEsIDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEs
IDAsIDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDYsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAs
IDMsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMs
CisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDUsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisg
IDAsIDEsIDAsIDIsIDAsIDEsIDAsIDQsCisgIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsCisgIDAs
IDEsIDAsIDIsIDAsIDEsIDAsIDgKK307CisKKwordm9pZAorc2N0cF9zbGlkZV9tYXBwaW5nX2Fy
cmF5cyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJLyoKKwkgKiBOb3cgd2UgYWxzbyBuZWVk
IHRvIGNoZWNrIHRoZSBtYXBwaW5nIGFycmF5IGluIGEgY291cGxlIG9mIHdheXMuCisJICogMSkg
RGlkIHdlIG1vdmUgdGhlIGN1bS1hY2sgcG9pbnQ/CisJICoKKwkgKiBXaGVuIHlvdSBmaXJzdCBn
bGFuY2UgYXQgdGhpcyB5b3UgbWlnaHQgdGhpbmsKKwkgKiB0aGF0IGFsbCBlbnRyaWVzIHRoYXQg
bWFrZSB1cCB0aGUgcG9zaXRpb24KKwkgKiBvZiB0aGUgY3VtLWFjayB3b3VsZCBiZSBpbiB0aGUg
bnItbWFwcGluZyBhcnJheQorCSAqIG9ubHkuLiBpLmUuIHRoaW5ncyB1cCB0byB0aGUgY3VtLWFj
ayBhcmUgYWx3YXlzCisJICogZGVsaXZlcmFibGUuIFRoYXRzIHRydWUgd2l0aCBvbmUgZXhjZXB0
aW9uLCB3aGVuCisJICogaXRzIGEgZnJhZ21lbnRlZCBtZXNzYWdlIHdlIG1heSBub3QgZGVsaXZl
ciB0aGUgZGF0YQorCSAqIHVudGlsIHNvbWUgdGhyZXNob2xkIChvciBhbGwgb2YgaXQpIGlzIGlu
IHBsYWNlLiBTbworCSAqIHdlIG11c3QgT1IgdGhlIG5yX21hcHBpbmdfYXJyYXkgYW5kIG1hcHBp
bmdfYXJyYXkgdG8KKwkgKiBnZXQgYSB0cnVlIHBpY3R1cmUgb2YgdGhlIGN1bS1hY2suCisJICov
CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJaW50IGF0OworCXVpbnQ4X3QgdmFs
OworCWludCBzbGlkZV9mcm9tLCBzbGlkZV9lbmQsIGxnYXAsIGRpc3RhbmNlOworCXVpbnQzMl90
IG9sZF9jdW1hY2ssIG9sZF9iYXNlLCBvbGRfaGlnaGVzdCwgaGlnaGVzdF90c247CisKKwlhc29j
ID0gJnN0Y2ItPmFzb2M7CisKKwlvbGRfY3VtYWNrID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisJ
b2xkX2Jhc2UgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuOworCW9sZF9oaWdoZXN0ID0g
YXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsKKwkvKgorCSAqIFdlIGNvdWxkIHByb2JhYmx5
IGltcHJvdmUgdGhpcyBhIHNtYWxsIGJpdCBieSBjYWxjdWxhdGluZyB0aGUKKwkgKiBvZmZzZXQg
b2YgdGhlIGN1cnJlbnQgY3VtLWFjayBhcyB0aGUgc3RhcnRpbmcgcG9pbnQuCisJICovCisJYXQg
PSAwOworCWZvciAoc2xpZGVfZnJvbSA9IDA7IHNsaWRlX2Zyb20gPCBzdGNiLT5hc29jLm1hcHBp
bmdfYXJyYXlfc2l6ZTsgc2xpZGVfZnJvbSsrKSB7CisJCXZhbCA9IGFzb2MtPm5yX21hcHBpbmdf
YXJyYXlbc2xpZGVfZnJvbV0gfCBhc29jLT5tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb21dOworCQlp
ZiAodmFsID09IDB4ZmYpIHsKKwkJCWF0ICs9IDg7CisJCX0gZWxzZSB7CisJCQkvKiB0aGVyZSBp
cyBhIDAgYml0ICovCisJCQlhdCArPSBzY3RwX21hcF9sb29rdXBfdGFiW3ZhbF07CisJCQlicmVh
azsKKwkJfQorCX0KKwlhc29jLT5jdW11bGF0aXZlX3RzbiA9IGFzb2MtPm1hcHBpbmdfYXJyYXlf
YmFzZV90c24gKyAoYXQtMSk7CisKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+Y3VtdWxhdGl2ZV90
c24sIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApICYmCisgICAgICAgICAgICBTQ1RQX1RT
Tl9HVChhc29jLT5jdW11bGF0aXZlX3RzbiwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21h
cCkpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJodWgsIGN1bWFjayAweCV4IGdyZWF0
ZXIgdGhhbiBoaWdoLXRzbiAweCV4IGluIG1hcCIsCisJCSAgICAgIGFzb2MtPmN1bXVsYXRpdmVf
dHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwKTsKKyNlbHNlCisJCVNDVFBfUFJJTlRG
KCJodWgsIGN1bWFjayAweCV4IGdyZWF0ZXIgdGhhbiBoaWdoLXRzbiAweCV4IGluIG1hcCAtIHNo
b3VsZCBwYW5pYz9cbiIsCisJCQkgICAgYXNvYy0+Y3VtdWxhdGl2ZV90c24sIGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXApOworCQlzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoYXNvYyk7CisJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dH
SU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfbWFwKDAsIDYsIGFzb2MtPmhpZ2hlc3RfdHNuX2lu
c2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCX0KKwkJYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCQlhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbnJfbWFwID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247CisjZW5kaWYKKwl9CisJaWYg
KFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAsIGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXApKSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX25yX21hcDsKKwl9IGVsc2UgeworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9tYXA7CisJfQorCWlmICgoYXNvYy0+Y3VtdWxhdGl2ZV90c24gPT0gaGlnaGVz
dF90c24pICYmIChhdCA+PSA4KSkgeworCQkvKiBUaGUgY29tcGxldGUgYXJyYXkgd2FzIGNvbXBs
ZXRlZCBieSBhIHNpbmdsZSBGUiAqLworCQkvKiBoaWdoZXN0IGJlY29tZXMgdGhlIGN1bS1hY2sg
Ki8KKwkJaW50IGNscjsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXVuc2lnbmVkIGludCBpOworI2Vu
ZGlmCisKKwkJLyogY2xlYXIgdGhlIGFycmF5ICovCisJCWNsciA9ICgoYXQrNykgPj4gMyk7CisJ
CWlmIChjbHIgPiBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpIHsKKwkJCWNsciA9IGFzb2MtPm1h
cHBpbmdfYXJyYXlfc2l6ZTsKKwkJfQorCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwg
Y2xyKTsKKwkJbWVtc2V0KGFzb2MtPm5yX21hcHBpbmdfYXJyYXksIDAsIGNscik7CisjaWZkZWYg
SU5WQVJJQU5UUworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBp
KyspIHsKKwkJCWlmICgoYXNvYy0+bWFwcGluZ19hcnJheVtpXSkgfHwgKGFzb2MtPm5yX21hcHBp
bmdfYXJyYXlbaV0pKSB7CisJCQkJU0NUUF9QUklOVEYoIkVycm9yIE1hcHBpbmcgYXJyYXkncyBu
b3QgY2xlYW4gYXQgY2xlYXJcbiIpOworCQkJCXNjdHBfcHJpbnRfbWFwcGluZ19hcnJheShhc29j
KTsKKwkJCX0KKwkJfQorI2VuZGlmCisJCWFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24gPSBh
c29jLT5jdW11bGF0aXZlX3RzbiArIDE7CisJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAgPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gYXNvYy0+Y3VtdWxhdGl2ZV90c247
CisJfSBlbHNlIGlmIChhdCA+PSA4KSB7CisJCS8qIHdlIGNhbiBzbGlkZSB0aGUgbWFwcGluZyBh
cnJheSBkb3duICovCisJCS8qIHNsaWRlX2Zyb20gaG9sZHMgd2hlcmUgd2UgaGl0IHRoZSBmaXJz
dCBOT04gMHhmZiBieXRlICovCisKKwkJLyoKKwkJICogbm93IGNhbGN1bGF0ZSB0aGUgY2VpbGlu
ZyBvZiB0aGUgbW92ZSB1c2luZyBvdXIgaGlnaGVzdAorCQkgKiBUU04gdmFsdWUKKwkJICovCisJ
CVNDVFBfQ0FMQ19UU05fVE9fR0FQKGxnYXAsIGhpZ2hlc3RfdHNuLCBhc29jLT5tYXBwaW5nX2Fy
cmF5X2Jhc2VfdHNuKTsKKwkJc2xpZGVfZW5kID0gKGxnYXAgPj4gMyk7CisJCWlmIChzbGlkZV9l
bmQgPCBzbGlkZV9mcm9tKSB7CisJCQlzY3RwX3ByaW50X21hcHBpbmdfYXJyYXkoYXNvYyk7Cisj
aWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoImltcG9zc2libGUgc2xpZGUiKTsKKyNlbHNlCisJ
CQlTQ1RQX1BSSU5URigiaW1wb3NzaWJsZSBzbGlkZSBsZ2FwOiAleCBzbGlkZV9lbmQ6ICV4IHNs
aWRlX2Zyb206ICV4PyBhdDogJWRcbiIsCisJCQkgICAgICAgICAgICBsZ2FwLCBzbGlkZV9lbmQs
IHNsaWRlX2Zyb20sIGF0KTsKKwkJCXJldHVybjsKKyNlbmRpZgorCQl9CisJCWlmIChzbGlkZV9l
bmQgPiBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlw
YW5pYygid291bGQgb3ZlcnJ1biBidWZmZXIiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiR2Fr
LCB3b3VsZCBoYXZlIG92ZXJydW4gbWFwIGVuZDogJWQgc2xpZGVfZW5kOiAlZFxuIiwKKwkJCSAg
ICAgICAgICAgIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSwgc2xpZGVfZW5kKTsKKwkJCXNsaWRl
X2VuZCA9IGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZTsKKyNlbmRpZgorCQl9CisJCWRpc3RhbmNl
ID0gKHNsaWRlX2VuZCAtIHNsaWRlX2Zyb20pICsgMTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCQlzY3Rw
X2xvZ19tYXAob2xkX2Jhc2UsIG9sZF9jdW1hY2ssIG9sZF9oaWdoZXN0LAorCQkJCSAgICAgU0NU
UF9NQVBfUFJFUEFSRV9TTElERSk7CisJCQlzY3RwX2xvZ19tYXAoKHVpbnQzMl90KSBzbGlkZV9m
cm9tLCAodWludDMyX3QpIHNsaWRlX2VuZCwKKwkJCQkgICAgICh1aW50MzJfdCkgbGdhcCwgU0NU
UF9NQVBfU0xJREVfRlJPTSk7CisJCX0KKwkJaWYgKGRpc3RhbmNlICsgc2xpZGVfZnJvbSA+IGFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSB8fAorCQkgICAgZGlzdGFuY2UgPCAwKSB7CisJCQkvKgor
CQkJICogSGVyZSB3ZSBkbyBOT1Qgc2xpZGUgZm9yd2FyZCB0aGUgYXJyYXkgc28gdGhhdAorCQkJ
ICogaG9wZWZ1bGx5IHdoZW4gbW9yZSBkYXRhIGNvbWVzIGluIHRvIGZpbGwgaXQgdXAKKwkJCSAq
IHdlIHdpbGwgYmUgYWJsZSB0byBzbGlkZSBpdCBmb3J3YXJkLiBSZWFsbHkgSQorCQkJICogZG9u
J3QgdGhpbmsgdGhpcyBzaG91bGQgaGFwcGVuIDotMAorCQkJICovCisKKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkg
eworCQkJCXNjdHBfbG9nX21hcCgodWludDMyX3QpIGRpc3RhbmNlLCAodWludDMyX3QpIHNsaWRl
X2Zyb20sCisJCQkJCSAgICAgKHVpbnQzMl90KSBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUsCisJ
CQkJCSAgICAgU0NUUF9NQVBfU0xJREVfTk9ORSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpbnQg
aWk7CisKKwkJCWZvciAoaWkgPSAwOyBpaSA8IGRpc3RhbmNlOyBpaSsrKSB7CisJCQkJYXNvYy0+
bWFwcGluZ19hcnJheVtpaV0gPSBhc29jLT5tYXBwaW5nX2FycmF5W3NsaWRlX2Zyb20gKyBpaV07
CisJCQkJYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpaV0gPSBhc29jLT5ucl9tYXBwaW5nX2FycmF5
W3NsaWRlX2Zyb20gKyBpaV07CisKKwkJCX0KKwkJCWZvciAoaWkgPSBkaXN0YW5jZTsgaWkgPCBh
c29jLT5tYXBwaW5nX2FycmF5X3NpemU7IGlpKyspIHsKKwkJCQlhc29jLT5tYXBwaW5nX2FycmF5
W2lpXSA9IDA7CisJCQkJYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpaV0gPSAwOworCQkJfQorCQkJ
aWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgKyAxID09IGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24pIHsKKwkJCQlhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwICs9IChzbGlk
ZV9mcm9tIDw8IDMpOworCQkJfQorCQkJaWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAgKyAxID09IGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pIHsKKwkJCQlhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbnJfbWFwICs9IChzbGlkZV9mcm9tIDw8IDMpOworCQkJfQorCQkJYXNv
Yy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArPSAoc2xpZGVfZnJvbSA8PCAzKTsKKwkJCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VO
QUJMRSkgeworCQkJCXNjdHBfbG9nX21hcChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuLAor
CQkJCQkgICAgIGFzb2MtPmN1bXVsYXRpdmVfdHNuLCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVf
bWFwLAorCQkJCQkgICAgIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCQl9CisJCX0KKwl9Cit9
CisKK3ZvaWQKK3NjdHBfc2Fja19jaGVjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCB3YXNf
YV9nYXApCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJdWludDMyX3QgaGln
aGVzdF90c247CisJaW50IGlzX2FfZ2FwOworCisJc2N0cF9zbGlkZV9tYXBwaW5nX2FycmF5cyhz
dGNiKTsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9ucl9tYXAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXApKSB7CisJ
CWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcDsKKwl9IGVsc2Ug
eworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJfQorCS8q
IElzIHRoZXJlIGEgZ2FwIG5vdz8gKi8KKwlpc19hX2dhcCA9IFNDVFBfVFNOX0dUKGhpZ2hlc3Rf
dHNuLCBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuKTsKKworCS8qCisJICogTm93IHdlIG5lZWQg
dG8gc2VlIGlmIHdlIG5lZWQgdG8gcXVldWUgYSBzYWNrIG9yIGp1c3Qgc3RhcnQgdGhlCisJICog
dGltZXIgKGlmIGFsbG93ZWQpLgorCSAqLworCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBT
Q1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKKwkJLyoKKwkJICogT2sgc3BlY2lhbCBjYXNlLCBp
biBTSFVURE9XTi1TRU5UIGNhc2UuIGhlcmUgd2UKKwkJICogbWFrZXIgc3VyZSBTQUNLIHRpbWVy
IGlzIG9mZiBhbmQgaW5zdGVhZCBzZW5kIGEKKwkJICogU0hVVERPV04gYW5kIGEgU0FDSworCQkg
Ki8KKwkJaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRp
bWVyKSkgeworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLAorCQkJICAg
ICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTcpOworCQl9CisJCXNjdHBfc2Vu
ZF9zaHV0ZG93bihzdGNiLAorCQkgICAgICAgICAgICAgICAgICAgKChzdGNiLT5hc29jLmFsdGVy
bmF0ZSkgPyBzdGNiLT5hc29jLmFsdGVybmF0ZSA6IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbikpOworCQlpZiAoaXNfYV9nYXApIHsKKwkJCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCX0KKwl9IGVsc2UgeworCQkvKgorCQkgKiBDTVQgREFDIGFsZ29y
aXRobTogaW5jcmVhc2UgbnVtYmVyIG9mIHBhY2tldHMKKwkJICogcmVjZWl2ZWQgc2luY2UgbGFz
dCBhY2sKKwkJICovCisJCXN0Y2ItPmFzb2MuY210X2RhY19wa3RzX3JjdmQrKzsKKworCQlpZiAo
KHN0Y2ItPmFzb2Muc2VuZF9zYWNrID09IDEpIHx8ICAgICAgLyogV2UgbmVlZCB0byBzZW5kIGEg
U0FDSyAqLworCQkgICAgKCh3YXNfYV9nYXApICYmIChpc19hX2dhcCA9PSAwKSkgfHwJLyogd2Fz
IGEgZ2FwLCBidXQgbm8KKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAqIGxvbmdlciBpcyBvbmUgKi8KKwkJICAgIChzdGNiLT5hc29jLm51bWR1cHRzbnMpIHx8ICAg
ICAgICAgIC8qIHdlIGhhdmUgZHVwJ3MgKi8KKwkJICAgIChpc19hX2dhcCkgfHwgICAgICAgICAg
ICAgICAgICAgICAgIC8qIGlzIHN0aWxsIGEgZ2FwICovCisJCSAgICAoc3RjYi0+YXNvYy5kZWxh
eWVkX2FjayA9PSAwKSB8fCAgICAvKiBEZWxheWVkIHNhY2sgZGlzYWJsZWQgKi8KKwkJICAgIChz
dGNiLT5hc29jLmRhdGFfcGt0c19zZWVuID49IHN0Y2ItPmFzb2Muc2Fja19mcmVxKQkvKiBoaXQg
bGltaXQgb2YgcGt0cyAqLworCQkJKSB7CisKKwkJCWlmICgoc3RjYi0+YXNvYy5zY3RwX2NtdF9v
bl9vZmYgPiAwKSAmJgorCQkJICAgIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMp
KSAmJgorCQkJICAgIChzdGNiLT5hc29jLnNlbmRfc2FjayA9PSAwKSAmJgorCQkJICAgIChzdGNi
LT5hc29jLm51bWR1cHRzbnMgPT0gMCkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5kZWxheWVkX2Fj
aykgJiYKKwkJCSAgICAoIVNDVFBfT1NfVElNRVJfUEVORElORygmc3RjYi0+YXNvYy5kYWNrX3Rp
bWVyLnRpbWVyKSkpIHsKKworCQkJCS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0aG06IFdpdGgg
Q01ULAorCQkJCSAqIGRlbGF5IGFja3MgZXZlbiBpbiB0aGUgZmFjZSBvZgorCisJCQkJICogcmVv
cmRlcmluZy4gVGhlcmVmb3JlLCBpZiBhY2tzCisJCQkJICogdGhhdCBkbyBub3QgaGF2ZSB0byBi
ZSBzZW50CisJCQkJICogYmVjYXVzZSBvZiB0aGUgYWJvdmUgcmVhc29ucywKKwkJCQkgKiB3aWxs
IGJlIGRlbGF5ZWQuIFRoYXQgaXMsIGFja3MKKwkJCQkgKiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBz
ZW50IGR1ZSB0bworCQkJCSAqIGdhcCByZXBvcnRzIHdpbGwgYmUgZGVsYXllZCB3aXRoCisJCQkJ
ICogREFDLiBTdGFydCB0aGUgZGVsYXllZCBhY2sgdGltZXIuCisJCQkJICovCisJCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUkVDViwKKwkJCQkgICAgICAgICAgICAgICAgIHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIE9r
IHdlIG11c3QgYnVpbGQgYSBTQUNLIHNpbmNlIHRoZQorCQkJCSAqIHRpbWVyIGlzIHBlbmRpbmcs
IHdlIGdvdCBvdXIKKwkJCQkgKiBmaXJzdCBwYWNrZXQgT1IgdGhlcmUgYXJlIGdhcHMgb3IKKwkJ
CQkgKiBkdXBsaWNhdGVzLgorCQkJCSAqLworCQkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgm
c3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKTsKKwkJCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKCFTQ1RQX09TX1RJ
TUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1lcikpIHsKKwkJCQlzY3RwX3Rp
bWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9SRUNWLAorCQkJCSAgICAgICAgICAgICAgICAgc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCQl9CisJCX0KKwl9Cit9CisKK2ludAorc2N0cF9w
cm9jZXNzX2RhdGEoc3RydWN0IG1idWYgKiptbSwgaW50IGlwaGxlbiwgaW50ICpvZmZzZXQsIGlu
dCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsIHVpbnQzMl90ICpoaWdoX3RzbikKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2gsIGNo
dW5rX2J1ZjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlpbnQgbnVtX2NodW5r
cyA9IDA7CS8qIG51bWJlciBvZiBjb250cm9sIGNodW5rcyBwcm9jZXNzZWQgKi8KKwlpbnQgc3Rv
cF9wcm9jID0gMDsKKwlpbnQgYnJlYWtfZmxhZywgbGFzdF9jaHVuazsKKwlpbnQgYWJvcnRfZmxh
ZyA9IDAsIHdhc19hX2dhcDsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwl1aW50MzJfdCBoaWdoZXN0X3Rz
bjsKKwl1aW50MTZfdCBjaGtfbGVuZ3RoOworCisJLyogc2V0IHRoZSByd25kICovCisJc2N0cF9z
ZXRfcnduZChzdGNiLCAmc3RjYi0+YXNvYyk7CisKKwltID0gKm1tOworCVNDVFBfVENCX0xPQ0tf
QVNTRVJUKHN0Y2IpOworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoU0NUUF9UU05fR1QoYXNv
Yy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21h
cCkpIHsKKwkJaGlnaGVzdF90c24gPSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOwor
CX0gZWxzZSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcDsK
Kwl9CisJd2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2ItPmFzb2MuY3Vt
dWxhdGl2ZV90c24pOworCS8qCisJICogc2V0dXAgd2hlcmUgd2UgZ290IHRoZSBsYXN0IERBVEEg
cGFja2V0IGZyb20gZm9yIGFueSBTQUNLIHRoYXQKKwkgKiBtYXkgbmVlZCB0byBnbyBvdXQuIERv
bid0IGJ1bXAgdGhlIG5ldC4gVGhpcyBpcyBkb25lIE9OTFkgd2hlbiBhCisJICogY2h1bmsgaXMg
YXNzaWduZWQuCisJICovCisJYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20gPSBuZXQ7CisKKyNp
Zm5kZWYgX19QYW5kYV9fCisJLyotCisJICogTm93IGJlZm9yZSB3ZSBwcm9jZWVkIHdlIG11c3Qg
ZmlndXJlIG91dCBpZiB0aGlzIGlzIGEgd2FzdGVkCisJICogY2x1c3Rlci4uLiBpLmUuIGl0IGlz
IGEgc21hbGwgcGFja2V0IHNlbnQgaW4gYW5kIHlldCB0aGUgZHJpdmVyCisJICogdW5kZXJuZWF0
aCBhbGxvY2F0ZWQgYSBmdWxsIGNsdXN0ZXIgZm9yIGl0LiBJZiBzbyB3ZSBtdXN0IGNvcHkgaXQK
KwkgKiB0byBhIHNtYWxsZXIgbWJ1ZiBhbmQgZnJlZSB1cCB0aGUgY2x1c3RlciBtYnVmLiBUaGlz
IHdpbGwgaGVscAorCSAqIHdpdGggY2x1c3RlciBzdGFydmF0aW9uLiBOb3RlIGZvciBfX1BhbmRh
X18gd2UgZG9uJ3QgZG8gdGhpcworCSAqIHNpbmNlIGl0IGhhcyBjbHVzdGVycyBhbGwgdGhlIHdh
eSBkb3duIHRvIDY0IGJ5dGVzLgorCSAqLworCWlmIChTQ1RQX0JVRl9MRU4obSkgPCAobG9uZylN
TEVOICYmIFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkvKiB3ZSBvbmx5IGhhbmRsZSBt
YnVmcyB0aGF0IGFyZSBzaW5nbGV0b25zLi4gbm90IGNoYWlucyAqLworCQltID0gc2N0cF9nZXRf
bWJ1Zl9mb3JfbXNnKFNDVFBfQlVGX0xFTihtKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwor
CQlpZiAobSkgeworCQkJLyogb2sgbGV0cyBzZWUgaWYgd2UgY2FuIGNvcHkgdGhlIGRhdGEgdXAg
Ki8KKwkJCWNhZGRyX3QgKmZyb20sICp0bzsKKwkJCS8qIGdldCB0aGUgcG9pbnRlcnMgYW5kIGNv
cHkgKi8KKwkJCXRvID0gbXRvZChtLCBjYWRkcl90ICopOworCQkJZnJvbSA9IG10b2QoKCptbSks
IGNhZGRyX3QgKik7CisJCQltZW1jcHkodG8sIGZyb20sIFNDVFBfQlVGX0xFTigoKm1tKSkpOwor
CQkJLyogY29weSB0aGUgbGVuZ3RoIGFuZCBmcmVlIHVwIHRoZSBvbGQgKi8KKwkJCVNDVFBfQlVG
X0xFTihtKSA9IFNDVFBfQlVGX0xFTigoKm1tKSk7CisJCQlzY3RwX21fZnJlZW0oKm1tKTsKKwkJ
CS8qIHN1Y2Nlc3MsIGJhY2sgY29weSAqLworCQkJKm1tID0gbTsKKwkJfSBlbHNlIHsKKwkJCS8q
IFdlIGFyZSBpbiB0cm91YmxlIGluIHRoZSBtYnVmIHdvcmxkIC4uIHlpa2VzICovCisJCQltID0g
Km1tOworCQl9CisJfQorI2VuZGlmCisJLyogZ2V0IHBvaW50ZXIgdG8gdGhlIGZpcnN0IGNodW5r
IGhlYWRlciAqLworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0ciht
LCAqb2Zmc2V0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAodWludDhfdCAqKSZjaHVua19idWYpOworCWlmIChjaCA9PSBOVUxM
KSB7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogcHJvY2VzcyBhbGwgREFUQSBjaHVua3Mu
Li4KKwkgKi8KKwkqaGlnaF90c24gPSBhc29jLT5jdW11bGF0aXZlX3RzbjsKKwlicmVha19mbGFn
ID0gMDsKKwlhc29jLT5kYXRhX3BrdHNfc2VlbisrOworCXdoaWxlIChzdG9wX3Byb2MgPT0gMCkg
eworCQkvKiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8KKwkJY2hrX2xlbmd0aCA9IG50b2hzKGNo
LT5jaHVua19sZW5ndGgpOworCQlpZiAobGVuZ3RoIC0gKm9mZnNldCA8IGNoa19sZW5ndGgpIHsK
KwkJCS8qIGFsbCBkb25lLCBtdXR1bGF0ZWQgY2h1bmsgKi8KKwkJCXN0b3BfcHJvYyA9IDE7CisJ
CQljb250aW51ZTsKKwkJfQorCQlpZiAoKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSAmJgor
CQkgICAgKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkpIHsKKwkJCXN0cnVjdCBtYnVmICpv
cF9lcnI7CisJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQlzbnByaW50Ziht
c2csIHNpemVvZihtc2cpLCAiJXMiLCAiSS1EQVRBIGNodW5rIHJlY2VpdmVkIHdoZW4gREFUQSB3
YXMgbmVnb3RpYXRlZCIpOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NB
VVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJCXN0Y2ItPnNjdHBfZXAtPmxhc3RfYWJv
cnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzE4OworCQkJc2N0cF9h
Ym9ydF9hbl9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwkJCXJldHVybiAoMik7CisJCX0KKwkJaWYgKChhc29jLT5pZGF0YV9zdXBwb3J0ZWQgPT0g
MCkgJiYKKwkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lEQVRBKSkgeworCQkJc3RydWN0
IG1idWYgKm9wX2VycjsKKwkJCWNoYXIgbXNnW1NDVFBfRElBR19JTkZPX0xFTl07CisKKwkJCXNu
cHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICIlcyIsICJEQVRBIGNodW5rIHJlY2VpdmVkIHdoZW4g
SS1EQVRBIHdhcyBuZWdvdGlhdGVkIik7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNl
KFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJc3RjYi0+c2N0cF9lcC0+
bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMTk7CisJ
CQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCQkJcmV0dXJuICgyKTsKKwkJfQorCQlpZiAoKGNoLT5jaHVua190eXBlID09
IFNDVFBfREFUQSkgfHwKKwkJICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lEQVRBKSkgewor
CQkJdWludDE2X3QgY2xlbjsKKworCQkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfREFUQSkg
eworCQkJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuayk7CisJCQl9IGVsc2Ug
eworCQkJCWNsZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfaWRhdGFfY2h1bmspOworCQkJfQorCQkJ
aWYgKGNoa19sZW5ndGggPCBjbGVuKSB7CisJCQkJLyoKKwkJCQkgKiBOZWVkIHRvIHNlbmQgYW4g
YWJvcnQgc2luY2Ugd2UgaGFkIGEKKwkJCQkgKiBpbnZhbGlkIGRhdGEgY2h1bmsuCisJCQkJICov
CisJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19M
RU5dOworCisJCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIiVzIGNodW5rIG9mIGxlbmd0
aCAldSIsCisJCQkJICAgICAgICAgY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9EQVRBID8gIkRBVEEi
IDogIkktREFUQSIsCisJCQkJICAgICAgICAgY2hrX2xlbmd0aCk7CisJCQkJb3BfZXJyID0gc2N0
cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJ
CQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9JTkRBVEEg
KyBTQ1RQX0xPQ18yMDsKKwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwgc3RjYiwg
b3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCXJldHVybiAoMik7CisJCQl9CisjaWZk
ZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCQlzY3RwX2F1ZGl0X2xvZygweEIxLCAwKTsKKyNl
bmRpZgorCQkJaWYgKFNDVFBfU0laRTMyKGNoa19sZW5ndGgpID09IChsZW5ndGggLSAqb2Zmc2V0
KSkgeworCQkJCWxhc3RfY2h1bmsgPSAxOworCQkJfSBlbHNlIHsKKwkJCQlsYXN0X2NodW5rID0g
MDsKKwkJCX0KKwkJCWlmIChzY3RwX3Byb2Nlc3NfYV9kYXRhX2NodW5rKHN0Y2IsIGFzb2MsIG1t
LCAqb2Zmc2V0LCAKKwkJCQkJCSAgICAgIGNoa19sZW5ndGgsIG5ldCwgaGlnaF90c24sICZhYm9y
dF9mbGFnLCAmYnJlYWtfZmxhZywKKwkJCQkJCSAgICAgIGxhc3RfY2h1bmssIGNoLT5jaHVua190
eXBlKSkgeworCQkJCW51bV9jaHVua3MrKzsKKwkJCX0KKwkJCWlmIChhYm9ydF9mbGFnKQorCQkJ
CXJldHVybiAoMik7CisKKwkJCWlmIChicmVha19mbGFnKSB7CisJCQkJLyoKKwkJCQkgKiBTZXQg
YmVjYXVzZSBvZiBvdXQgb2YgcnduZCBzcGFjZSBhbmQgbm8KKwkJCQkgKiBkcm9wIHJlcCBzcGFj
ZSBsZWZ0LgorCQkJCSAqLworCQkJCXN0b3BfcHJvYyA9IDE7CisJCQkJY29udGludWU7CisJCQl9
CisJCX0gZWxzZSB7CisJCQkvKiBub3QgYSBkYXRhIGNodW5rIGluIHRoZSBkYXRhIHJlZ2lvbiAq
LworCQkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgeworCQkJY2FzZSBTQ1RQX0lOSVRJQVRJT046
CisJCQljYXNlIFNDVFBfSU5JVElBVElPTl9BQ0s6CisJCQljYXNlIFNDVFBfU0VMRUNUSVZFX0FD
SzoKKwkJCWNhc2UgU0NUUF9OUl9TRUxFQ1RJVkVfQUNLOgorCQkJY2FzZSBTQ1RQX0hFQVJUQkVB
VF9SRVFVRVNUOgorCQkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6CisJCQljYXNlIFNDVFBfQUJP
UlRfQVNTT0NJQVRJT046CisJCQljYXNlIFNDVFBfU0hVVERPV046CisJCQljYXNlIFNDVFBfU0hV
VERPV05fQUNLOgorCQkJY2FzZSBTQ1RQX09QRVJBVElPTl9FUlJPUjoKKwkJCWNhc2UgU0NUUF9D
T09LSUVfRUNITzoKKwkJCWNhc2UgU0NUUF9DT09LSUVfQUNLOgorCQkJY2FzZSBTQ1RQX0VDTl9F
Q0hPOgorCQkJY2FzZSBTQ1RQX0VDTl9DV1I6CisJCQljYXNlIFNDVFBfU0hVVERPV05fQ09NUExF
VEU6CisJCQljYXNlIFNDVFBfQVVUSEVOVElDQVRJT046CisJCQljYXNlIFNDVFBfQVNDT05GX0FD
SzoKKwkJCWNhc2UgU0NUUF9QQUNLRVRfRFJPUFBFRDoKKwkJCWNhc2UgU0NUUF9TVFJFQU1fUkVT
RVQ6CisJCQljYXNlIFNDVFBfRk9SV0FSRF9DVU1fVFNOOgorCQkJY2FzZSBTQ1RQX0FTQ09ORjoK
KwkJCXsKKwkJCQkvKgorCQkJCSAqIE5vdywgd2hhdCBkbyB3ZSBkbyB3aXRoIEtOT1dOIGNodW5r
cyB0aGF0CisJCQkJICogYXJlIE5PVCBpbiB0aGUgcmlnaHQgcGxhY2U/CisJCQkJICoKKwkJCQkg
KiBGb3Igbm93LCBJIGRvIG5vdGhpbmcgYnV0IGlnbm9yZSB0aGVtLiBXZQorCQkJCSAqIG1heSBs
YXRlciB3YW50IHRvIGFkZCBzeXNjdGwgc3R1ZmYgdG8KKwkJCQkgKiBzd2l0Y2ggb3V0IGFuZCBk
byBlaXRoZXIgYW4gQUJPUlQoKSBvcgorCQkJCSAqIHBvc3NpYmx5IHByb2Nlc3MgdGhlbS4KKwkJ
CQkgKi8KKwkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJCWNoYXIgbXNnW1NDVFBfRElBR19J
TkZPX0xFTl07CisKKwkJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLCAiREFUQSBjaHVuayBm
b2xsb3dlZCBieSBjaHVuayBvZiB0eXBlICUyLjJ4IiwKKwkJCQkgICAgICAgICBjaC0+Y2h1bmtf
dHlwZSk7CisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RP
Q09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKGlucCwg
c3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCXJldHVybiAoMik7CisJCQl9
CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogVW5rbm93biBjaHVuayB0eXBlOiB1c2UgYml0
IHJ1bGVzIGFmdGVyCisJCQkJICogY2hlY2tpbmcgbGVuZ3RoCisJCQkJICovCisJCQkJaWYgKGNo
a19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCQkJCS8qCisJCQkJ
CSAqIE5lZWQgdG8gc2VuZCBhbiBhYm9ydCBzaW5jZSB3ZSBoYWQgYQorCQkJCQkgKiBpbnZhbGlk
IGNodW5rLgorCQkJCQkgKi8KKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJY2hhciBt
c2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cp
LCAiQ2h1bmsgb2YgbGVuZ3RoICV1IiwKKwkJCQkJCSBjaGtfbGVuZ3RoKTsKKwkJCQkJb3BfZXJy
ID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNn
KTsKKwkJCQkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBf
SU5EQVRBICsgU0NUUF9MT0NfMjA7CisJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5w
LCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCXJldHVybiAoMik7CisJ
CQkJfQorCQkJCWlmIChjaC0+Y2h1bmtfdHlwZSAmIDB4NDApIHsKKwkJCQkJLyogQWRkIGEgZXJy
b3IgcmVwb3J0IHRvIHRoZSBxdWV1ZSAqLworCQkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJ
CQlzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UgKmNhdXNlOworCisJCQkJCW9wX2VyciA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlKSwK
KwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKwkJCQkJaWYgKG9wX2VyciAhPSBOVUxMKSB7CisJCQkJCQljYXVzZSAgPSBtdG9kKG9w
X2Vyciwgc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICopOworCQkJCQkJY2F1c2UtPmNvZGUg
PSBodG9ucyhTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hVTkspOworCQkJCQkJY2F1c2UtPmxlbmd0aCA9
IGh0b25zKCh1aW50MTZfdCkoY2hrX2xlbmd0aCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJy
b3JfY2F1c2UpKSk7CisJCQkJCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9nZW5fZXJyb3JfY2F1c2UpOworCQkJCQkJU0NUUF9CVUZfTkVYVChvcF9lcnIpID0gU0NU
UF9NX0NPUFlNKG0sICpvZmZzZXQsIGNoa19sZW5ndGgsIE1fTk9XQUlUKTsKKwkJCQkJCWlmIChT
Q1RQX0JVRl9ORVhUKG9wX2VycikgIT0gTlVMTCkgeworCQkJCQkJCXNjdHBfcXVldWVfb3BfZXJy
KHN0Y2IsIG9wX2Vycik7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCXNjdHBfbV9mcmVlbShvcF9l
cnIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJCWlmICgoY2gtPmNodW5rX3R5cGUgJiAw
eDgwKSA9PSAwKSB7CisJCQkJCS8qIGRpc2NhcmQgdGhlIHJlc3Qgb2YgdGhpcyBwYWNrZXQgKi8K
KwkJCQkJc3RvcF9wcm9jID0gMTsKKwkJCQl9CS8qIGVsc2Ugc2tpcCB0aGlzIGJhZCBjaHVuayBh
bmQKKwkJCQkJICogY29udGludWUuLi4gKi8KKwkJCQlicmVhazsKKwkJCX0JLyogc3dpdGNoIG9m
IGNodW5rIHR5cGUgKi8KKwkJfQorCQkqb2Zmc2V0ICs9IFNDVFBfU0laRTMyKGNoa19sZW5ndGgp
OworCQlpZiAoKCpvZmZzZXQgPj0gbGVuZ3RoKSB8fCBzdG9wX3Byb2MpIHsKKwkJCS8qIG5vIG1v
cmUgZGF0YSBsZWZ0IGluIHRoZSBtYnVmIGNoYWluICovCisJCQlzdG9wX3Byb2MgPSAxOworCQkJ
Y29udGludWU7CisJCX0KKwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21fZ2V0
cHRyKG0sICpvZmZzZXQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHVpbnQ4X3QgKikmY2h1bmtfYnVmKTsKKwkJaWYgKGNo
ID09IE5VTEwpIHsKKwkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQlzdG9wX3Byb2MgPSAxOworCQkJ
Y29udGludWU7CisJCX0KKwl9CisJaWYgKGJyZWFrX2ZsYWcpIHsKKwkJLyoKKwkJICogd2UgbmVl
ZCB0byByZXBvcnQgcnduZCBvdmVycnVuIGRyb3BzLgorCQkgKi8KKwkJc2N0cF9zZW5kX3BhY2tl
dF9kcm9wcGVkKHN0Y2IsIG5ldCwgKm1tLCBsZW5ndGgsIGlwaGxlbiwgMCk7CisJfQorCWlmIChu
dW1fY2h1bmtzKSB7CisJCS8qCisJCSAqIERpZCB3ZSBnZXQgZGF0YSwgaWYgc28gdXBkYXRlIHRo
ZSB0aW1lIGZvciBhdXRvLWNsb3NlIGFuZAorCQkgKiBnaXZlIHBlZXIgY3JlZGl0IGZvciBiZWlu
ZyBhbGl2ZS4KKwkJICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zwa3R3aXRoZGF0YSk7
CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVT
SE9MRF9MT0dHSU5HKSB7CisJCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9MRF9DTEVBUiwK
KwkJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50LAorCQkJCSAgICAgICAw
LAorCQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEsCisJCQkJICAgICAgIF9fTElORV9f
KTsKKwkJfQorCQlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCQkodm9pZClT
Q1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2xhc3RfcmN2ZCk7CisJfQorCS8q
IG5vdyBzZXJ2aWNlIGFsbCBvZiB0aGUgcmVhc3NtIHF1ZXVlIGlmIG5lZWRlZCAqLworCWlmIChT
Q1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpIHsKKwkJLyog
QXNzdXJlIHRoYXQgd2UgYWNrIHJpZ2h0IGF3YXkgKi8KKwkJc3RjYi0+YXNvYy5zZW5kX3NhY2sg
PSAxOworCX0KKwkvKiBTdGFydCBhIHNhY2sgdGltZXIgb3IgUVVFVUUgYSBTQUNLIGZvciBzZW5k
aW5nICovCisJc2N0cF9zYWNrX2NoZWNrKHN0Y2IsIHdhc19hX2dhcCk7CisJcmV0dXJuICgwKTsK
K30KKworc3RhdGljIGludAorc2N0cF9wcm9jZXNzX3NlZ21lbnRfcmFuZ2Uoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqcF90cDEsIHVpbnQzMl90IGxhc3Rf
dHNuLAorCQkJICAgdWludDE2X3QgZnJhZ19zdHJ0LCB1aW50MTZfdCBmcmFnX2VuZCwgaW50IG5y
X3NhY2tpbmcsCisJCQkgICBpbnQgKm51bV9mcnMsCisJCQkgICB1aW50MzJfdCAqYmlnZ2VzdF9u
ZXdseV9hY2tlZF90c24sCisJCQkgICB1aW50MzJfdCAgKnRoaXNfc2Fja19sb3dlc3RfbmV3YWNr
LAorCQkJICAgaW50ICpydG9fb2spCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOwor
CXVuc2lnbmVkIGludCB0aGVUU047CisJaW50IGosIHdha2VfaGltID0gMCwgY2lyY2xlZCA9IDA7
CisKKwkvKiBSZWNvdmVyIHRoZSB0cDEgd2UgbGFzdCBzYXcgKi8KKwl0cDEgPSAqcF90cDE7CisJ
aWYgKHRwMSA9PSBOVUxMKSB7CisJCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRf
cXVldWUpOworCX0KKwlmb3IgKGogPSBmcmFnX3N0cnQ7IGogPD0gZnJhZ19lbmQ7IGorKykgewor
CQl0aGVUU04gPSBqICsgbGFzdF90c247CisJCXdoaWxlICh0cDEpIHsKKwkJCWlmICh0cDEtPnJl
Yy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCkKKwkJCQkoKm51bV9mcnMpICs9IDE7CisKKwkJ
CS8qLQorCQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZvciBlYWNoIFRTTiBiZWluZworCQkJ
ICogcHJvY2Vzc2VkIGZyb20gdGhlIHNlbnQgcXVldWUsIHRyYWNrIHRoZQorCQkJICogbmV4dCBl
eHBlY3RlZCBwc2V1ZG8tY3VtYWNrLCBvcgorCQkJICogcnR4X3BzZXVkb19jdW1hY2ssIGlmIHJl
cXVpcmVkLiBTZXBhcmF0ZQorCQkJICogY3VtYWNrIHRyYWNrZXJzIGZvciBmaXJzdCB0cmFuc21p
c3Npb25zLAorCQkJICogYW5kIHJldHJhbnNtaXNzaW9ucy4KKwkJCSAqLworCQkJaWYgKCh0cDEt
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKKwkJCSAgICAodHAxLT53aG9Uby0+Zmlu
ZF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCisJCQkgICAgKHRwMS0+c25kX2NvdW50ID09IDEpKSB7
CisJCQkJdHAxLT53aG9Uby0+cHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJ
CXRwMS0+d2hvVG8tPmZpbmRfcHNldWRvX2N1bWFjayA9IDA7CisJCQl9CisJCQlpZiAoKHRwMS0+
c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSAmJgorCQkJICAgICh0cDEtPndob1RvLT5maW5k
X3J0eF9wc2V1ZG9fY3VtYWNrID09IDEpICYmCisJCQkgICAgKHRwMS0+c25kX2NvdW50ID4gMSkp
IHsKKwkJCQl0cDEtPndob1RvLT5ydHhfcHNldWRvX2N1bWFjayA9IHRwMS0+cmVjLmRhdGEudHNu
OworCQkJCXRwMS0+d2hvVG8tPmZpbmRfcnR4X3BzZXVkb19jdW1hY2sgPSAwOworCQkJfQorCQkJ
aWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRoZVRTTikgeworCQkJCWlmICh0cDEtPnNlbnQgIT0g
U0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKKwkJCQkJLyotCisJCQkJCSAqIG11c3QgYmUgaGVsZCB1
bnRpbAorCQkJCQkgKiBjdW0tYWNrIHBhc3NlcworCQkJCQkgKi8KKwkJCQkJaWYgKHRwMS0+c2Vu
dCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQkvKi0KKwkJCQkJCSAqIElmIGl0IGlz
IGxlc3MgdGhhbiBSRVNFTkQsIGl0IGlzCisJCQkJCQkgKiBub3cgbm8tbG9uZ2VyIGluIGZsaWdo
dC4KKwkJCQkJCSAqIEhpZ2hlciB2YWx1ZXMgbWF5IGFscmVhZHkgYmUgc2V0CisJCQkJCQkgKiB2
aWEgcHJldmlvdXMgR2FwIEFjayBCbG9ja3MuLi4KKwkJCQkJCSAqIGkuZS4gQUNLRUQgb3IgUkVT
RU5ELgorCQkJCQkJICovCisJCQkJCQlpZiAoU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24s
CisJCQkJCQkgICAgICAgICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuKSkgeworCQkJ
CQkJCSpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCQkJ
fQorCQkJCQkJLyotCisJCQkJCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQgSFROQSkgLSBzZXQKKwkJ
CQkJCSAqIHNhd19uZXdhY2sgdG8gMSBmb3IgZGVzdCBiZWluZworCQkJCQkJICogbmV3bHkgYWNr
ZWQuIHVwZGF0ZQorCQkJCQkJICogdGhpc19zYWNrX2hpZ2hlc3RfbmV3YWNrIGlmCisJCQkJCQkg
KiBhcHByb3ByaWF0ZS4KKwkJCQkJCSAqLworCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1bmtf
d2FzX3Jldm9rZWQgPT0gMCkKKwkJCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNrID0gMTsKKwor
CQkJCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJICAgICAgICAg
ICAgICAgIHRwMS0+d2hvVG8tPnRoaXNfc2Fja19oaWdoZXN0X25ld2FjaykpIHsKKwkJCQkJCQl0
cDEtPndob1RvLT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgPQorCQkJCQkJCQl0cDEtPnJlYy5k
YXRhLnRzbjsKKwkJCQkJCX0KKwkJCQkJCS8qLQorCQkJCQkJICogQ01UIERBQyBhbGdvOiBhbHNv
IHVwZGF0ZQorCQkJCQkJICogdGhpc19zYWNrX2xvd2VzdF9uZXdhY2sKKwkJCQkJCSAqLworCQkJ
CQkJaWYgKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjayA9PSAwKSB7CisJCQkJCQkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dHSU5HX0VOQUJM
RSkgeworCQkJCQkJCQlzY3RwX2xvZ19zYWNrKCp0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKKwkJ
CQkJCQkJCSAgICAgIGxhc3RfdHNuLAorCQkJCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24s
CisJCQkJCQkJCQkgICAgICAwLAorCQkJCQkJCQkJICAgICAgMCwKKwkJCQkJCQkJCSAgICAgIFND
VFBfTE9HX1RTTl9BQ0tFRCk7CisJCQkJCQkJfQorCQkJCQkJCSp0aGlzX3NhY2tfbG93ZXN0X25l
d2FjayA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCQkJfQorCQkJCQkJLyotCisJCQkJCQkgKiBD
TVQ6IENVQ3YyIGFsZ29yaXRobS4gSWYgKHJ0eC0pcHNldWRvLWN1bWFjayBmb3IgY29ycmVzcAor
CQkJCQkJICogZGVzdCBpcyBiZWluZyBhY2tlZCwgdGhlbiB3ZSBoYXZlIGEgbmV3IChydHgtKXBz
ZXVkby1jdW1hY2suIFNldAorCQkJCQkJICogbmV3XyhydHhfKXBzZXVkb19jdW1hY2sgdG8gVFJV
RSBzbyB0aGF0IHRoZSBjd25kIGZvciB0aGlzIGRlc3QgY2FuIGJlCisJCQkJCQkgKiB1cGRhdGVk
LiBBbHNvIHRyaWdnZXIgc2VhcmNoIGZvciB0aGUgbmV4dCBleHBlY3RlZCAocnR4LSlwc2V1ZG8t
Y3VtYWNrLgorCQkJCQkJICogU2VwYXJhdGUgcHNldWRvX2N1bWFjayB0cmFja2VycyBmb3IgZmly
c3QgdHJhbnNtaXNzaW9ucyBhbmQKKwkJCQkJCSAqIHJldHJhbnNtaXNzaW9ucy4KKwkJCQkJCSAq
LworCQkJCQkJaWYgKHRwMS0+cmVjLmRhdGEudHNuID09IHRwMS0+d2hvVG8tPnBzZXVkb19jdW1h
Y2spIHsKKwkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7
CisJCQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCQl9CisJ
CQkJCQkJdHAxLT53aG9Uby0+ZmluZF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCX0KKwkJCQkJ
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9H
R0lOR19FTkFCTEUpIHsKKwkJCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIHRwMS0+d2hvVG8sIHRw
MS0+cmVjLmRhdGEudHNuLCBTQ1RQX0NXTkRfTE9HX0ZST01fU0FDSyk7CisJCQkJCQl9CisJCQkJ
CQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHAxLT53aG9Uby0+cnR4X3BzZXVkb19jdW1hY2sp
IHsKKwkJCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCA9PSAwKSB7CisJ
CQkJCQkJCXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJCQl9CisJCQkJ
CQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCQl9CisJCQkJ
CQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQUNLX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJCQkJc2N0cF9sb2dfc2FjaygqYmlnZ2VzdF9uZXdseV9hY2tl
ZF90c24sCisJCQkJCQkJCSAgICAgIGxhc3RfdHNuLAorCQkJCQkJCQkgICAgICB0cDEtPnJlYy5k
YXRhLnRzbiwKKwkJCQkJCQkJICAgICAgZnJhZ19zdHJ0LAorCQkJCQkJCQkgICAgICBmcmFnX2Vu
ZCwKKwkJCQkJCQkJICAgICAgU0NUUF9MT0dfVFNOX0FDS0VEKTsKKwkJCQkJCX0KKwkJCQkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19ET1dO
X0dBUCwKKwkJCQkJCQkJICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkJCQkg
ICAgICAgdHAxLT5ib29rX3NpemUsCisJCQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJf
dCl0cDEtPndob1RvLAorCQkJCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJCQkJ
fQorCQkJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOworCQkJCQkJaWYgKHN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgewor
CQkJCQkJCSgqc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNr
bm93bGVkZ2VkKSh0cDEtPndob1RvLAorCQkJCQkJCQkJCQkJCQkgICAgIHRwMSk7CisJCQkJCQl9
CisJCQkJCQlzY3RwX3RvdGFsX2ZsaWdodF9kZWNyZWFzZShzdGNiLCB0cDEpOworCisJCQkJCQl0
cDEtPndob1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOworCQkJCQkJaWYgKHRwMS0+c25k
X2NvdW50IDwgMikgeworCQkJCQkJCS8qLQorCQkJCQkJCSAqIFRydWUgbm9uLXJldHJhbnNtaXRl
ZCBjaHVuaworCQkJCQkJCSAqLworCQkJCQkJCXRwMS0+d2hvVG8tPm5ldF9hY2syICs9IHRwMS0+
c2VuZF9zaXplOworCisJCQkJCQkJLyotCisJCQkJCQkJICogdXBkYXRlIFJUTyB0b28gPworCQkJ
CQkJCSAqLworCQkJCQkJCWlmICh0cDEtPmRvX3J0dCkgeworCQkJCQkJCQlpZiAoKnJ0b19vaykg
eworCQkJCQkJCQkJdHAxLT53aG9Uby0+UlRPID0KKwkJCQkJCQkJCQlzY3RwX2NhbGN1bGF0ZV9y
dG8oc3RjYiwKKwkJCQkJCQkJCQkJCSAgICZzdGNiLT5hc29jLAorCQkJCQkJCQkJCQkJICAgdHAx
LT53aG9UbywKKwkJCQkJCQkJCQkJCSAgICZ0cDEtPnNlbnRfcmN2X3RpbWUsCisJCQkJCQkJCQkJ
CQkgICBTQ1RQX1JUVF9GUk9NX0RBVEEpOworCQkJCQkJCQkJKnJ0b19vayA9IDA7CisJCQkJCQkJ
CX0KKwkJCQkJCQkJaWYgKHRwMS0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgeworCQkJCQkJCQkJ
dHAxLT53aG9Uby0+cnRvX25lZWRlZCA9IDE7CisJCQkJCQkJCX0KKwkJCQkJCQkJdHAxLT5kb19y
dHQgPSAwOworCQkJCQkJCX0KKwkJCQkJCX0KKworCQkJCQl9CisJCQkJCWlmICh0cDEtPnNlbnQg
PD0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJl
Yy5kYXRhLnRzbiwKKwkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnRoaXNfc2Fja19o
aWdoZXN0X2dhcCkpIHsKKwkJCQkJCQlzdGNiLT5hc29jLnRoaXNfc2Fja19oaWdoZXN0X2dhcCA9
CisJCQkJCQkJCXRwMS0+cmVjLmRhdGEudHNuOworCQkJCQkJfQorCQkJCQkJaWYgKHRwMS0+c2Vu
dCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQkJCXNjdHBfdWNvdW50X2RlY3Ioc3Rj
Yi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5B
QkxFRAorCQkJCQkJCXNjdHBfYXVkaXRfbG9nKDB4QjIsCisJCQkJCQkJCSAgICAgICAoc3RjYi0+
YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgJiAweDAwMDAwMGZmKSk7CisjZW5kaWYKKwkJCQkJ
CX0KKwkJCQkJfQorCQkJCQkvKi0KKwkJCQkJICogQWxsIGNodW5rcyBOT1QgVU5TRU5UIGZhbGwg
dGhyb3VnaCBoZXJlIGFuZCBhcmUgbWFya2VkCisJCQkJCSAqIChsZWF2ZSBQUi1TQ1RQIG9uZXMg
dGhhdCBhcmUgdG8gc2tpcCBhbG9uZSB0aG91Z2gpCisJCQkJCSAqLworCQkJCQlpZiAoKHRwMS0+
c2VudCAhPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApICYmCisJCQkJCSAgICAodHAxLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7CisJCQkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX01BUktFRDsKKwkJCQkJfQorCQkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2
b2tlZCkgeworCQkJCQkJLyogZGVmbGF0ZSB0aGUgY3duZCAqLworCQkJCQkJdHAxLT53aG9Uby0+
Y3duZCAtPSB0cDEtPmJvb2tfc2l6ZTsKKwkJCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jl
dm9rZWQgPSAwOworCQkJCQl9CisJCQkJCS8qIE5SIFNhY2sgY29kZSBoZXJlICovCisJCQkJCWlm
IChucl9zYWNraW5nICYmCisJCQkJCSAgICAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJf
QUNLRUQpKSB7CisJCQkJCQlpZiAoc3RjYi0+YXNvYy5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lk
XS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFt0cDEt
PnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJ
CQkJCX0gZWxzZSB7CisJCQkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBz
aWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJCQl9CisJCQkJCQlpZiAo
KHN0Y2ItPmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA9
PSAwKSAmJgorCQkJCQkJICAgIChzdGNiLT5hc29jLnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRd
LnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCisJCQkJCQkgICAgVEFJTFFf
RU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0ub3V0cXVldWUpKSB7
CisJCQkJCQkJc3RjYi0+YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsKKwkJCQkJCX0KKwkJCQkJCXRw
MS0+c2VudCA9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQ7CisJCQkJCQlpZiAodHAxLT5kYXRhKSB7
CisJCQkJCQkJLyogc2FfaWdub3JlIE5PX05VTExfQ0hLICovCisJCQkJCQkJc2N0cF9mcmVlX2J1
ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCB0cDEsIDEpOworCQkJCQkJCXNjdHBfbV9mcmVlbSh0
cDEtPmRhdGEpOworCQkJCQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQkJCQl9CisJCQkJCQl3YWtl
X2hpbSsrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQkvKiBpZiAodHAxLT50c24g
PT0gdGhlVFNOKSAqLworCQkJaWYgKFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCB0aGVU
U04pKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQl0cDEgPSBUQUlMUV9ORVhUKHRwMSwgc2N0cF9u
ZXh0KTsKKwkJCWlmICgodHAxID09IE5VTEwpICYmIChjaXJjbGVkID09IDApKSB7CisJCQkJY2ly
Y2xlZCsrOworCQkJCXRwMSA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwor
CQkJfQorCQl9CS8qIGVuZCB3aGlsZSAodHAxKSAqLworCQlpZiAodHAxID09IE5VTEwpIHsKKwkJ
CWNpcmNsZWQgPSAwOworCQkJdHAxID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VudF9xdWV1
ZSk7CisJCX0KKwkJLyogSW4gY2FzZSB0aGUgZnJhZ21lbnRzIHdlcmUgbm90IGluIG9yZGVyIHdl
IG11c3QgcmVzZXQgKi8KKwl9IC8qIGVuZCBmb3IgKGogPSBmcmFnU3RhcnQgKi8KKwkqcF90cDEg
PSB0cDE7CisJcmV0dXJuICh3YWtlX2hpbSk7CS8qIFJldHVybiB2YWx1ZSBvbmx5IHVzZWQgZm9y
IG5yLXNhY2sgKi8KK30KKworCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9zZWdtZW50cyhzdHJ1
Y3QgbWJ1ZiAqbSwgaW50ICpvZmZzZXQsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNj
dHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCXVpbnQzMl90IGxhc3RfdHNuLCB1aW50MzJfdCAqYmln
Z2VzdF90c25fYWNrZWQsCisJCXVpbnQzMl90ICpiaWdnZXN0X25ld2x5X2Fja2VkX3RzbiwgdWlu
dDMyX3QgKnRoaXNfc2Fja19sb3dlc3RfbmV3YWNrLAorCQlpbnQgbnVtX3NlZywgaW50IG51bV9u
cl9zZWcsIGludCAqcnRvX29rKQoreworCXN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKmZyYWcs
IGJsb2NrOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKKwlpbnQgaTsKKwlpbnQgbnVt
X2ZycyA9IDA7CisJaW50IGNodW5rX2ZyZWVkOworCWludCBub25fcmV2b2NhYmxlOworCXVpbnQx
Nl90IGZyYWdfc3RydCwgZnJhZ19lbmQsIHByZXZfZnJhZ19lbmQ7CisKKwl0cDEgPSBUQUlMUV9G
SVJTVCgmYXNvYy0+c2VudF9xdWV1ZSk7CisJcHJldl9mcmFnX2VuZCA9IDA7CisJY2h1bmtfZnJl
ZWQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IChudW1fc2VnICsgbnVtX25yX3NlZyk7IGkrKykg
eworCQlpZiAoaSA9PSBudW1fc2VnKSB7CisJCQlwcmV2X2ZyYWdfZW5kID0gMDsKKwkJCXRwMSA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5zZW50X3F1ZXVlKTsKKwkJfQorCQlmcmFnID0gKHN0cnVjdCBz
Y3RwX2dhcF9hY2tfYmxvY2sgKilzY3RwX21fZ2V0cHRyKG0sICpvZmZzZXQsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBz
Y3RwX2dhcF9hY2tfYmxvY2spLCAodWludDhfdCAqKSAmYmxvY2spOworCQkqb2Zmc2V0ICs9IHNp
emVvZihibG9jayk7CisJCWlmIChmcmFnID09IE5VTEwpIHsKKwkJCXJldHVybiAoY2h1bmtfZnJl
ZWQpOworCQl9CisJCWZyYWdfc3RydCA9IG50b2hzKGZyYWctPnN0YXJ0KTsKKwkJZnJhZ19lbmQg
PSBudG9ocyhmcmFnLT5lbmQpOworCisJCWlmIChmcmFnX3N0cnQgPiBmcmFnX2VuZCkgeworCQkJ
LyogVGhpcyBnYXAgcmVwb3J0IGlzIG1hbGZvcm1lZCwgc2tpcCBpdC4gKi8KKwkJCWNvbnRpbnVl
OworCQl9CisJCWlmIChmcmFnX3N0cnQgPD0gcHJldl9mcmFnX2VuZCkgeworCQkJLyogVGhpcyBn
YXAgcmVwb3J0IGlzIG5vdCBpbiBvcmRlciwgc28gcmVzdGFydC4gKi8KKwkJCSB0cDEgPSBUQUlM
UV9GSVJTVCgmYXNvYy0+c2VudF9xdWV1ZSk7CisJCX0KKwkJaWYgKFNDVFBfVFNOX0dUKChsYXN0
X3RzbiArIGZyYWdfZW5kKSwgKmJpZ2dlc3RfdHNuX2Fja2VkKSkgeworCQkJKmJpZ2dlc3RfdHNu
X2Fja2VkID0gbGFzdF90c24gKyBmcmFnX2VuZDsKKwkJfQorCQlpZiAoaSA8IG51bV9zZWcpIHsK
KwkJCW5vbl9yZXZvY2FibGUgPSAwOworCQl9IGVsc2UgeworCQkJbm9uX3Jldm9jYWJsZSA9IDE7
CisJCX0KKwkJaWYgKHNjdHBfcHJvY2Vzc19zZWdtZW50X3JhbmdlKHN0Y2IsICZ0cDEsIGxhc3Rf
dHNuLCBmcmFnX3N0cnQsIGZyYWdfZW5kLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbm9uX3Jldm9jYWJsZSwgJm51bV9mcnMsIGJpZ2dlc3RfbmV3bHlfYWNrZWRfdHNuLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHJ0
b19vaykpIHsKKwkJCWNodW5rX2ZyZWVkID0gMTsKKwkJfQorCQlwcmV2X2ZyYWdfZW5kID0gZnJh
Z19lbmQ7CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCWlmIChudW1fZnJzKQorCQkJc2N0cF9sb2dfZnIo
KmJpZ2dlc3RfdHNuX2Fja2VkLAorCQkJICAgICAgICAgICAgKmJpZ2dlc3RfbmV3bHlfYWNrZWRf
dHNuLAorCQkJICAgICAgICAgICAgbGFzdF90c24sIFNDVFBfRlJfTE9HX0JJR0dFU1RfVFNOUyk7
CisJfQorCXJldHVybiAoY2h1bmtfZnJlZWQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9jaGVj
a19mb3JfcmV2b2tlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSAgICAgICBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywgdWludDMyX3QgY3VtYWNrLAorCQkgICAgICAgdWludDMyX3Qg
YmlnZ2VzdF90c25fYWNrZWQpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCisJ
VEFJTFFfRk9SRUFDSCh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYg
KFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCBjdW1hY2spKSB7CisJCQkvKgorCQkJICog
b2sgdGhpcyBndXkgaXMgZWl0aGVyIEFDSyBvciBNQVJLRUQuIElmIGl0IGlzCisJCQkgKiBBQ0tF
RCBpdCBoYXMgYmVlbiBwcmV2aW91c2x5IGFja2VkIGJ1dCBub3QgdGhpcworCQkJICogdGltZSBp
LmUuIHJldm9rZWQuICBJZiBpdCBpcyBNQVJLRUQgaXQgd2FzIEFDSydlZAorCQkJICogYWdhaW4u
CisJCQkgKi8KKwkJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYmlnZ2VzdF90
c25fYWNrZWQpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAodHAxLT5zZW50ID09IFNDVFBf
REFUQUdSQU1fQUNLRUQpIHsKKwkJCQkvKiBpdCBoYXMgYmVlbiByZXZva2VkICovCisJCQkJdHAx
LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9TRU5UOworCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2Fz
X3Jldm9rZWQgPSAxOworCQkJCS8qIFdlIG11c3QgYWRkIHRoaXMgc3R1ZmYgYmFjayBpbiB0bwor
CQkJCSAqIGFzc3VyZSB0aW1lcnMgYW5kIHN1Y2ggZ2V0IHN0YXJ0ZWQuCisJCQkJICovCisJCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19VUF9S
RVZPS0UsCisJCQkJCQkgICAgICAgdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJCQkJCQkgICAg
ICAgdHAxLT5ib29rX3NpemUsCisJCQkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAx
LT53aG9UbywKKwkJCQkJCSAgICAgICB0cDEtPnJlYy5kYXRhLnRzbik7CisJCQkJfQorCQkJCXNj
dHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKTsKKwkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNy
ZWFzZShzdGNiLCB0cDEpOworCQkJCS8qIFdlIGluZmxhdGUgdGhlIGN3bmQgdG8gY29tcGVuc2F0
ZSBmb3Igb3VyCisJCQkJICogYXJ0aWZpY2lhbCBpbmZsYXRpb24gb2YgdGhlIGZsaWdodF9zaXpl
LgorCQkJCSAqLworCQkJCXRwMS0+d2hvVG8tPmN3bmQgKz0gdHAxLT5ib29rX3NpemU7CisJCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19MT0dH
SU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19zYWNrKGFzb2MtPmxhc3RfYWNrZWRfc2VxLAor
CQkJCQkJICAgICAgY3VtYWNrLAorCQkJCQkJICAgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJ
CQkgICAgICAwLAorCQkJCQkJICAgICAgMCwKKwkJCQkJCSAgICAgIFNDVFBfTE9HX1RTTl9SRVZP
S0VEKTsKKwkJCQl9CisJCQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX01B
UktFRCkgeworCQkJCS8qIGl0IGhhcyBiZWVuIHJlLWFja2VkIGluIHRoaXMgU0FDSyAqLworCQkJ
CXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1fQUNLRUQ7CisJCQl9CisJCX0KKwkJaWYgKHRwMS0+
c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1VOU0VOVCkKKwkJCWJyZWFrOworCX0KK30KKworCitzdGF0
aWMgdm9pZAorc2N0cF9zdHJpa2VfZ2FwX2Fja19jaHVua3Moc3RydWN0IHNjdHBfdGNiICpzdGNi
LCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJCSAgIHVpbnQzMl90IGJpZ2dlc3Rf
dHNuX2Fja2VkLCB1aW50MzJfdCBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwgdWludDMyX3QgdGhp
c19zYWNrX2xvd2VzdF9uZXdhY2ssIGludCBhY2N1bV9tb3ZlZCkKK3sKKwlzdHJ1Y3Qgc2N0cF90
bWl0X2NodW5rICp0cDE7CisJaW50IHN0cmlrZV9mbGFnID0gMDsKKwlzdHJ1Y3QgdGltZXZhbCBu
b3c7CisJaW50IHRvdF9yZXRyYW5zID0gMDsKKwl1aW50MzJfdCBzZW5kaW5nX3NlcTsKKwlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7CisJaW50IG51bV9kZXN0c19zYWNrZWQgPSAwOworCisJLyoKKwkg
KiBzZWxlY3QgdGhlIHNlbmRpbmdfc2VxLCB0aGlzIGlzIGVpdGhlciB0aGUgbmV4dCB0aGluZyBy
ZWFkeSB0byBiZQorCSAqIHNlbnQgYnV0IG5vdCB0cmFuc21pdHRlZCwgT1IsIHRoZSBuZXh0IHNl
cSB3ZSBhc3NpZ24uCisJICovCisJdHAxID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VuZF9x
dWV1ZSk7CisJaWYgKHRwMSA9PSBOVUxMKSB7CisJCXNlbmRpbmdfc2VxID0gYXNvYy0+c2VuZGlu
Z19zZXE7CisJfSBlbHNlIHsKKwkJc2VuZGluZ19zZXEgPSB0cDEtPnJlYy5kYXRhLnRzbjsKKwl9
CisKKwkvKiBDTVQgREFDIGFsZ286IGZpbmRpbmcgb3V0IGlmIFNBQ0sgaXMgYSBtaXhlZCBTQUNL
ICovCisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAgICBTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSB7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+
bmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0LT5zYXdfbmV3YWNrKQorCQkJCW51bV9kZXN0
c19zYWNrZWQrKzsKKwkJfQorCX0KKwlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSB7
CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCX0KKwlUQUlMUV9GT1JFQUNI
KHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlzdHJpa2VfZmxhZyA9IDA7
CisJCWlmICh0cDEtPm5vX2ZyX2FsbG93ZWQpIHsKKwkJCS8qIHRoaXMgb25lIGhhZCBhIHRpbWVv
dXQgb3Igc29tZXRoaW5nICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJ
aWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfbG9nX2ZyKGJp
Z2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJ
CSAgICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQX0ZSX0xPR19DSEVDS19TVFJJS0UpOworCQl9
CisJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYmlnZ2VzdF90c25fYWNrZWQp
IHx8CisJCSAgICB0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9VTlNFTlQpIHsKKwkJCS8qIGRv
bmUgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQp
IHsKKwkJCWlmICgoUFJfU0NUUF9UVExfRU5BQkxFRCh0cDEtPmZsYWdzKSkgJiYgdHAxLT5zZW50
IDwgU0NUUF9EQVRBR1JBTV9BQ0tFRCkgeworCQkJCS8qIElzIGl0IGV4cGlyZWQ/ICovCisjaWZu
ZGVmIF9fRnJlZUJTRF9fCisJCQkJaWYgKHRpbWVyY21wKCZub3csICZ0cDEtPnJlYy5kYXRhLnRp
bWV0b2Ryb3AsID4pKSB7CisjZWxzZQorCQkJCWlmICh0aW1ldmFsY21wKCZub3csICZ0cDEtPnJl
Yy5kYXRhLnRpbWV0b2Ryb3AsID4pKSB7CisjZW5kaWYKKwkJCQkJLyogWWVzIHNvIGRyb3AgaXQg
Ki8KKwkJCQkJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7CisJCQkJCQkodm9pZClzY3RwX3JlbGVh
c2VfcHJfc2N0cF9jaHVuayhzdGNiLCB0cDEsIDEsCisJCQkJCQkJCQkJIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJCQkJCX0KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCisJCX0KKwkJaWYg
KFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLCBhc29jLT50aGlzX3NhY2tfaGlnaGVzdF9n
YXApICYmCisJCSAgICAgICAgICAgICAgICAhKGFjY3VtX21vdmVkICYmIGFzb2MtPmZhc3RfcmV0
cmFuX2xvc3NfcmVjb3ZlcnkpKSB7CisJCQkvKiB3ZSBhcmUgYmV5b25kIHRoZSB0c24gaW4gdGhl
IHNhY2sgICovCisJCQlicmVhazsKKwkJfQorCQlpZiAodHAxLT5zZW50ID49IFNDVFBfREFUQUdS
QU1fUkVTRU5EKSB7CisJCQkvKiBlaXRoZXIgYSBSRVNFTkQsIEFDS0VELCBvciBNQVJLRUQgKi8K
KwkJCS8qIHNraXAgKi8KKwkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9GT1JXQVJEX1RTTl9TS0lQ
KSB7CisJCQkJLyogQ29udGludWUgc3RyaWtpbiBGV0QtVFNOIGNodW5rcyAqLworCQkJCXRwMS0+
cmVjLmRhdGEuZndkX3Rzbl9jbnQrKzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qCisJ
CSAqIENNVCA6IFNGUiBhbGdvIChjb3ZlcnMgcGFydCBvZiBEQUMgYW5kIEhUTkEgYXMgd2VsbCkK
KwkJICovCisJCWlmICh0cDEtPndob1RvICYmIHRwMS0+d2hvVG8tPnNhd19uZXdhY2sgPT0gMCkg
eworCQkJLyoKKwkJCSAqIE5vIG5ldyBhY2tzIHdlcmUgcmVjZWlldmVkIGZvciBkYXRhIHNlbnQg
dG8gdGhpcworCQkJICogZGVzdC4gVGhlcmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUiBhbGdv
IGZvcgorCQkJICogQ01ULCBubyBkYXRhIHNlbnQgdG8gdGhpcyBkZXN0IGNhbiBiZSBtYXJrZWQg
Zm9yCisJCQkgKiBGUiB1c2luZyB0aGlzIFNBQ0suCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9
IGVsc2UgaWYgKHRwMS0+d2hvVG8gJiYKKwkJICAgICAgICAgICBTQ1RQX1RTTl9HVCh0cDEtPnJl
Yy5kYXRhLnRzbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICB0cDEtPndob1RvLT50aGlzX3Nh
Y2tfaGlnaGVzdF9uZXdhY2spICYmCisJCSAgICAgICAgICAgIShhY2N1bV9tb3ZlZCAmJiBhc29j
LT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5KSkgeworCQkJLyoKKwkJCSAqIENNVDogTmV3IGFj
a3Mgd2VyZSByZWNlaWV2ZWQgZm9yIGRhdGEgc2VudCB0bworCQkJICogdGhpcyBkZXN0LiBCdXQg
bm8gbmV3IGFja3Mgd2VyZSBzZWVuIGZvciBkYXRhCisJCQkgKiBzZW50IGFmdGVyIHRwMS4gVGhl
cmVmb3JlLCBhY2NvcmRpbmcgdG8gdGhlIFNGUgorCQkJICogYWxnbyBmb3IgQ01ULCB0cDEgY2Fu
bm90IGJlIG1hcmtlZCBmb3IgRlIgdXNpbmcKKwkJCSAqIHRoaXMgU0FDSy4gVGhpcyBzdGVwIGNv
dmVycyBwYXJ0IG9mIHRoZSBEQUMgYWxnbworCQkJICogYW5kIHRoZSBIVE5BIGFsZ28gYXMgd2Vs
bC4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKwkJLyoKKwkJICogSGVyZSB3ZSBjaGVjayB0
byBzZWUgaWYgd2Ugd2VyZSBoYXZlIGFscmVhZHkgZG9uZSBhIEZSCisJCSAqIGFuZCBpZiBzbyB3
ZSBzZWUgaWYgdGhlIGJpZ2dlc3QgVFNOIHdlIHNhdyBpbiB0aGUgc2FjayBpcworCQkgKiBzbWFs
bGVyIHRoYW4gdGhlIHJlY292ZXJ5IHBvaW50LiBJZiBzbyB3ZSBkb24ndCBzdHJpa2UKKwkJICog
dGhlIHRzbi4uLiBvdGhlcndpc2Ugd2UgQ0FOIHN0cmlrZSB0aGUgVFNOLgorCQkgKi8KKwkJLyoK
KwkJICogQEBAIEpSSTogQ2hlY2sgZm9yIENNVAorCQkgKiBpZiAoYWNjdW1fbW92ZWQgJiYgYXNv
Yy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNvdmVyeSAmJiAoc2N0cF9jbXRfb25fb2ZmID09IDApKSB7
CisJCSAqLworCQlpZiAoYWNjdW1fbW92ZWQgJiYgYXNvYy0+ZmFzdF9yZXRyYW5fbG9zc19yZWNv
dmVyeSkgeworCQkJLyoKKwkJCSAqIFN0cmlrZSB0aGUgVFNOIGlmIGluIGZhc3QtcmVjb3Zlcnkg
YW5kIGN1bS1hY2sKKwkJCSAqIG1vdmVkLgorCQkJICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNj
dHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMuZGF0
YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQsCisJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0Vf
Q0hVTkspOworCQkJfQorCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQkJdHAxLT5zZW50Kys7CisJCQl9CisJCQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+
IDApICYmCisJCQkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF91c2VfZGFjKSkgeworCQkJ
CS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8KKwkJ
CQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sgdGVzdCB3aWxsIG5vdCBwYXNzCisJCQkJICogYmVj
YXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvIHRoZQorCQkJCSAqIGN1bWFjayBlYXJsaWVy
LiBJZiBub3QgYWxyZWFkeSB0byBiZQorCQkJCSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBzYWNr
IGFuZCBpZiB0cDEgaXMKKwkJCQkgKiBub3QgYmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRoZW4g
bWFyayBieQorCQkJCSAqIG9uZSBtb3JlLgorCQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2lu
ZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNpbmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRl
cyB0aGF0CisJCQkJICogdHdvIHBhY2tldHMgaGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMg
bWlzc2luZyBUU04uCisJCQkJICovCisJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFN
X1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNrZWQgPT0gMSkgJiYKKwkJCQkgICAgU0NUUF9UU05f
R1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ssIHRwMS0+cmVjLmRhdGEudHNuKSkgeworCQkJCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5H
X0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfZnIoMTYgKyBudW1fZGVzdHNfc2Fja2VkLAorCQkJ
CQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkgICAgdHAxLT5zZW50LAorCQkJCQkJ
CSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJCQl9CisJCQkJCXRwMS0+c2VudCsr
OworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIGlmICgodHAxLT5yZWMuZGF0YS5kb2luZ19mYXN0X3Jl
dHJhbnNtaXQpICYmCisJCSAgICAgICAgICAgKGFzb2MtPnNjdHBfY210X29uX29mZiA9PSAwKSkg
eworCQkJLyoKKwkJCSAqIEZvciB0aG9zZSB0aGF0IGhhdmUgZG9uZSBhIEZSIHdlIG11c3QgdGFr
ZQorCQkJICogc3BlY2lhbCBjb25zaWRlcmF0aW9uIGlmIHdlIHN0cmlrZS4gSS5lIHRoZQorCQkJ
ICogYmlnZ2VzdF9uZXdseV9hY2tlZCBtdXN0IGJlIGhpZ2hlciB0aGFuIHRoZQorCQkJICogc2Vu
ZGluZ19zZXEgYXQgdGhlIHRpbWUgd2UgZGlkIHRoZSBGUi4KKwkJCSAqLworCQkJaWYgKAorI2lm
ZGVmIFNDVFBfRlJfVE9fQUxURVJOQVRFCisJCQkJLyoKKwkJCQkgKiBJZiBGUidzIGdvIHRvIG5l
dyBuZXR3b3JrcywgdGhlbiB3ZSBtdXN0IG9ubHkgZG8KKwkJCQkgKiB0aGlzIGZvciBzaW5nbHkg
aG9tZWQgYXNvYydzLiBIb3dldmVyIGlmIHRoZSBGUidzCisJCQkJICogZ28gdG8gdGhlIHNhbWUg
bmV0d29yayAoQXJtYW5kbydzIHdvcmspIHRoZW4gaXRzCisJCQkJICogb2sgdG8gRlIgbXVsdGlw
bGUgdGltZXMuCisJCQkJICovCisJCQkJKGFzb2MtPm51bW5ldHMgPCAyKQorI2Vsc2UKKwkJCQko
MSkKKyNlbmRpZgorCQkJCSkgeworCisJCQkJaWYgKFNDVFBfVFNOX0dFKGJpZ2dlc3RfdHNuX25l
d2x5X2Fja2VkLAorCQkJCSAgICAgICAgICAgICAgICB0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFu
X3RzbikpIHsKKwkJCQkJLyoKKwkJCQkJICogU3RyaWtlIHRoZSBUU04sIHNpbmNlIHRoaXMgYWNr
IGlzCisJCQkJCSAqIGJleW9uZCB3aGVyZSB0aGluZ3Mgd2VyZSB3aGVuIHdlCisJCQkJCSAqIGRp
ZCBhIEZSLgorCQkJCQkgKi8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfbG9nX2ZyKGJp
Z2dlc3RfdHNuX25ld2x5X2Fja2VkLAorCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJ
CQkJCQkgICAgdHAxLT5zZW50LAorCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTksp
OworCQkJCQl9CisJCQkJCWlmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewor
CQkJCQkJdHAxLT5zZW50Kys7CisJCQkJCX0KKwkJCQkJc3RyaWtlX2ZsYWcgPSAxOworCQkJCQlp
ZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCisJCQkJCSAgICBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfY210X3VzZV9kYWMpKSB7CisJCQkJCQkvKgorCQkJCQkJICogQ01UIERBQyBhbGdv
cml0aG06IElmCisJCQkJCQkgKiBTQUNLIGZsYWcgaXMgc2V0IHRvIDAsCisJCQkJCQkgKiB0aGVu
IGxvd2VzdF9uZXdhY2sgdGVzdAorCQkJCQkJICogd2lsbCBub3QgcGFzcyBiZWNhdXNlIGl0CisJ
CQkJCQkgKiB3b3VsZCBoYXZlIGJlZW4gc2V0IHRvCisJCQkJCQkgKiB0aGUgY3VtYWNrIGVhcmxp
ZXIuIElmCisJCQkJCQkgKiBub3QgYWxyZWFkeSB0byBiZSBydHgnZCwKKwkJCQkJCSAqIElmIG5v
dCBhIG1peGVkIHNhY2sgYW5kCisJCQkJCQkgKiBpZiB0cDEgaXMgbm90IGJldHdlZW4gdHdvCisJ
CQkJCQkgKiBzYWNrZWQgVFNOcywgdGhlbiBtYXJrIGJ5CisJCQkJCQkgKiBvbmUgbW9yZS4KKwkJ
CQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNp
bmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0CisJCQkJCQkgKiB0d28gcGFja2V0
cyBoYXZlIGJlZW4gcmVjZWl2ZWQgYWZ0ZXIgdGhpcyBtaXNzaW5nIFRTTi4KKwkJCQkJCSAqLwor
CQkJCQkJaWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYKKwkJCQkJCSAg
ICAobnVtX2Rlc3RzX3NhY2tlZCA9PSAxKSAmJgorCQkJCQkJICAgIFNDVFBfVFNOX0dUKHRoaXNf
c2Fja19sb3dlc3RfbmV3YWNrLAorCQkJCQkJICAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEu
dHNuKSkgeworCQkJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQkJCXNjdHBfbG9nX2ZyKDMyICsgbnVt
X2Rlc3RzX3NhY2tlZCwKKwkJCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCQkJ
CSAgICB0cDEtPnNlbnQsCisJCQkJCQkJCQkgICAgU0NUUF9GUl9MT0dfU1RSSUtFX0NIVU5LKTsK
KwkJCQkJCQl9CisJCQkJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQkJCQkJCXRwMS0+c2VudCsrOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0K
KwkJCX0KKwkJCS8qCisJCQkgKiBKUkk6IFRPRE86IHJlbW92ZSBjb2RlIGZvciBIVE5BIGFsZ28u
IENNVCdzCisJCQkgKiBTRlIgYWxnbyBjb3ZlcnMgSFROQS4KKwkJCSAqLworCQl9IGVsc2UgaWYg
KFNDVFBfVFNOX0dUKHRwMS0+cmVjLmRhdGEudHNuLAorCQkgICAgICAgICAgICAgICAgICAgICAg
IGJpZ2dlc3RfdHNuX25ld2x5X2Fja2VkKSkgeworCQkJLyoKKwkJCSAqIFdlIGRvbid0IHN0cmlr
ZSB0aGVzZTogVGhpcyBpcyB0aGUgIEhUTkEKKwkJCSAqIGFsZ29yaXRobSBpLmUuIHdlIGRvbid0
IHN0cmlrZSBJZiBvdXIgVFNOIGlzCisJCQkgKiBsYXJnZXIgdGhhbiB0aGUgSGlnaGVzdCBUU04g
TmV3bHkgQWNrZWQuCisJCQkgKi8KKwkJCTsKKwkJfSBlbHNlIHsKKwkJCS8qIFN0cmlrZSB0aGUg
VFNOICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2ZyKGJpZ2dlc3RfdHNuX25ld2x5
X2Fja2VkLAorCQkJCQkgICAgdHAxLT5yZWMuZGF0YS50c24sCisJCQkJCSAgICB0cDEtPnNlbnQs
CisJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hVTkspOworCQkJfQorCQkJaWYgKHRwMS0+
c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJdHAxLT5zZW50Kys7CisJCQl9CisJ
CQlpZiAoKGFzb2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCisJCQkgICAgU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2NtdF91c2VfZGFjKSkgeworCQkJCS8qCisJCQkJICogQ01UIERBQyBhbGdvcml0
aG06IElmIFNBQ0sgZmxhZyBpcyBzZXQgdG8KKwkJCQkgKiAwLCB0aGVuIGxvd2VzdF9uZXdhY2sg
dGVzdCB3aWxsIG5vdCBwYXNzCisJCQkJICogYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGJlZW4gc2V0
IHRvIHRoZQorCQkJCSAqIGN1bWFjayBlYXJsaWVyLiBJZiBub3QgYWxyZWFkeSB0byBiZQorCQkJ
CSAqIHJ0eCdkLCBJZiBub3QgYSBtaXhlZCBzYWNrIGFuZCBpZiB0cDEgaXMKKwkJCQkgKiBub3Qg
YmV0d2VlbiB0d28gc2Fja2VkIFRTTnMsIHRoZW4gbWFyayBieQorCQkJCSAqIG9uZSBtb3JlLgor
CQkJCSAqIE5PVEUgdGhhdCB3ZSBhcmUgbWFya2luZyBieSBvbmUgYWRkaXRpb25hbCB0aW1lIHNp
bmNlIHRoZSBTQUNLIERBQyBmbGFnIGluZGljYXRlcyB0aGF0CisJCQkJICogdHdvIHBhY2tldHMg
aGF2ZSBiZWVuIHJlY2VpdmVkIGFmdGVyIHRoaXMgbWlzc2luZyBUU04uCisJCQkJICovCisJCQkJ
aWYgKCh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgJiYgKG51bV9kZXN0c19zYWNr
ZWQgPT0gMSkgJiYKKwkJCQkgICAgU0NUUF9UU05fR1QodGhpc19zYWNrX2xvd2VzdF9uZXdhY2ss
IHRwMS0+cmVjLmRhdGEudHNuKSkgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2df
ZnIoNDggKyBudW1fZGVzdHNfc2Fja2VkLAorCQkJCQkJCSAgICB0cDEtPnJlYy5kYXRhLnRzbiwK
KwkJCQkJCQkgICAgdHAxLT5zZW50LAorCQkJCQkJCSAgICBTQ1RQX0ZSX0xPR19TVFJJS0VfQ0hV
TkspOworCQkJCQl9CisJCQkJCXRwMS0+c2VudCsrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAo
dHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICphbHQ7CisKKwkJCS8qIGZpeCBjb3VudHMgYW5kIHRoaW5ncyAqLworCQkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxF
KSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX0RPV05fUlNORCwKKwkJCQkJ
ICAgICAgICh0cDEtPndob1RvID8gKHRwMS0+d2hvVG8tPmZsaWdodF9zaXplKSA6IDApLAorCQkJ
CQkgICAgICAgdHAxLT5ib29rX3NpemUsCisJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJf
dCl0cDEtPndob1RvLAorCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJfQorCQkJ
aWYgKHRwMS0+d2hvVG8pIHsKKwkJCQl0cDEtPndob1RvLT5uZXRfYWNrKys7CisJCQkJc2N0cF9m
bGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOworCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpIHsKKwkJCQkJKCpzdGNiLT5hc29j
LmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHRwMS0+d2hv
VG8sCisJCQkJCQkJCQkJCQkgICAgIHRwMSk7CisJCQkJfQorCQkJfQorCisJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsK
KwkJCQlzY3RwX2xvZ19yd25kKFNDVFBfSU5DUkVBU0VfUEVFUl9SV05ELAorCQkJCQkgICAgICBh
c29jLT5wZWVyc19yd25kLCB0cDEtPnNlbmRfc2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Bl
ZXJfY2h1bmtfb2gpKTsKKwkJCX0KKwkJCS8qIGFkZCBiYWNrIHRvIHRoZSByd25kICovCisJCQlh
c29jLT5wZWVyc19yd25kICs9ICh0cDEtPnNlbmRfc2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9wZWVyX2NodW5rX29oKSk7CisKKwkJCS8qIHJlbW92ZSBmcm9tIHRoZSB0b3RhbCBmbGlnaHQg
Ki8KKwkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisKKwkJCWlmICgo
c3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkKSAmJgorCQkJICAgIChQUl9TQ1RQX1JUWF9FTkFC
TEVEKHRwMS0+ZmxhZ3MpKSkgeworCQkJCS8qIEhhcyBpdCBiZWVuIHJldHJhbnNtaXR0ZWQgdHZf
c2VjIHRpbWVzPyAtIHdlIHN0b3JlIHRoZSByZXRyYW4gY291bnQgdGhlcmUuICovCisJCQkJaWYg
KHRwMS0+c25kX2NvdW50ID4gdHAxLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYykgeworCQkJ
CQkvKiBZZXMsIHNvIGRyb3AgaXQgKi8KKwkJCQkJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7CisJ
CQkJCQkodm9pZClzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLCB0cDEsIDEsCisJCQkJ
CQkJCQkJIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQkJLyogTWFrZSBzdXJlIHRv
IGZsYWcgd2UgaGFkIGEgRlIgKi8KKwkJCQkJaWYgKHRwMS0+d2hvVG8gIT0gTlVMTCkgeworCQkJ
CQkJdHAxLT53aG9Uby0+bmV0X2FjaysrOworCQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0K
KwkJCX0KKwkJCS8qIFNDVFBfUFJJTlRGKCJPSywgd2UgYXJlIG5vdyByZWFkeSB0byBGUiB0aGlz
IGd1eVxuIik7ICovCisJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2ZyKHRwMS0+cmVjLmRh
dGEudHNuLCB0cDEtPnNuZF9jb3VudCwKKwkJCQkJICAgIDAsIFNDVFBfRlJfTUFSS0VEKTsKKwkJ
CX0KKwkJCWlmIChzdHJpa2VfZmxhZykgeworCQkJCS8qIFRoaXMgaXMgYSBzdWJzZXF1ZW50IEZS
ICovCisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZG11bHRmYXN0cmV0cmFucyk7CisJCQl9
CisJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsK
KwkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCQkJLyoKKwkJCQkgKiBDTVQ6
IFVzaW5nIFJUWF9TU1RIUkVTSCBwb2xpY3kgZm9yIENNVC4KKwkJCQkgKiBJZiBDTVQgaXMgYmVp
bmcgdXNlZCwgdGhlbiBwaWNrIGRlc3Qgd2l0aAorCQkJCSAqIGxhcmdlc3Qgc3N0aHJlc2ggZm9y
IGFueSByZXRyYW5zbWlzc2lvbi4KKwkJCQkgKi8KKwkJCQl0cDEtPm5vX2ZyX2FsbG93ZWQgPSAx
OworCQkJCWFsdCA9IHRwMS0+d2hvVG87CisJCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLwor
CQkJCWlmIChhc29jLT5zY3RwX2NtdF9wZiA+IDApIHsKKwkJCQkJLyogSlJTIDUvMTgvMDcgLSBJ
ZiBDTVQgUEYgaXMgb24sIHVzZSB0aGUgUEYgdmVyc2lvbiBvZiBmaW5kX2FsdF9uZXQoKSAqLwor
CQkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBhbHQsIDIpOworCQkJCX0g
ZWxzZSB7CisJCQkJCS8qIEpSUyA1LzE4LzA3IC0gSWYgb25seSBDTVQgaXMgb24sIHVzZSB0aGUg
Q01UIHZlcnNpb24gb2YgZmluZF9hbHRfbmV0KCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAvKnNhX2lnbm9yZSBOT19OVUxMX0NISyovCisJCQkJCWFsdCA9IHNj
dHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIGFsdCwgMSk7CisJCQkJfQorCQkJCWlmIChhbHQg
PT0gTlVMTCkgeworCQkJCQlhbHQgPSB0cDEtPndob1RvOworCQkJCX0KKwkJCQkvKgorCQkJCSAq
IENVQ3YyOiBJZiBhIGRpZmZlcmVudCBkZXN0IGlzIHBpY2tlZCBmb3IKKwkJCQkgKiB0aGUgcmV0
cmFuc21pc3Npb24sIHRoZW4gbmV3CisJCQkJICogKHJ0eC0pcHNldWRvX2N1bWFjayBuZWVkcyB0
byBiZSB0cmFja2VkCisJCQkJICogZm9yIG9yaWcgZGVzdC4gTGV0IENVQ3YyIHRyYWNrIG5ldyAo
cnR4LSkKKwkJCQkgKiBwc2V1ZG8tY3VtYWNrIGFsd2F5cy4KKwkJCQkgKi8KKwkJCQlpZiAodHAx
LT53aG9UbykgeworCQkJCQl0cDEtPndob1RvLT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOworCQkJ
CQl0cDEtPndob1RvLT5maW5kX3J0eF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQl9CisKKwkJCX0g
ZWxzZSB7LyogQ01UIGlzIE9GRiAqLworCisjaWZkZWYgU0NUUF9GUl9UT19BTFRFUk5BVEUKKwkJ
CQkvKiBDYW4gd2UgZmluZCBhbiBhbHRlcm5hdGU/ICovCisJCQkJYWx0ID0gc2N0cF9maW5kX2Fs
dGVybmF0ZV9uZXQoc3RjYiwgdHAxLT53aG9UbywgMCk7CisjZWxzZQorCQkJCS8qCisJCQkJICog
ZGVmYXVsdCBiZWhhdmlvciBpcyB0byBOT1QgcmV0cmFuc21pdAorCQkJCSAqIEZSJ3MgdG8gYW4g
YWx0ZXJuYXRlLiBBcm1hbmRvIENhcm8ncworCQkJCSAqIHBhcGVyIGRldGFpbHMgd2h5LgorCQkJ
CSAqLworCQkJCWFsdCA9IHRwMS0+d2hvVG87CisjZW5kaWYKKwkJCX0KKworCQkJdHAxLT5yZWMu
ZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPSAxOworCQkJdG90X3JldHJhbnMrKzsKKwkJCS8q
IG1hcmsgdGhlIHNlbmRpbmcgc2VxIGZvciBwb3NzaWJsZSBzdWJzZXF1ZW50IEZSJ3MgKi8KKwkJ
CS8qCisJCQkgKiBTQ1RQX1BSSU5URigiTWFya2luZyBUU04gZm9yIEZSIG5ldyB2YWx1ZSAleFxu
IiwKKwkJCSAqICh1aW50MzJfdCl0cGktPnJlYy5kYXRhLnRzbik7CisJCQkgKi8KKwkJCWlmIChU
QUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkpIHsKKwkJCQkvKgorCQkJCSAqIElmIHRoZSBx
dWV1ZSBvZiBzZW5kIGlzIGVtcHR5IHRoZW4gaXRzCisJCQkJICogdGhlIG5leHQgc2VxdWVuY2Ug
bnVtYmVyIHRoYXQgd2lsbCBiZQorCQkJCSAqIGFzc2lnbmVkIHNvIHdlIHN1YnRyYWN0IG9uZSBm
cm9tIHRoaXMgdG8KKwkJCQkgKiBnZXQgdGhlIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJ
CQkJdHAxLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90c24gPSBzZW5kaW5nX3NlcTsKKwkJCX0gZWxz
ZSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGVyZSBhcmUgY2h1bmtzIG9uIHRoZSBzZW5kIHF1ZXVl
CisJCQkJICogKHVuc2VudCBkYXRhIHRoYXQgaGFzIG1hZGUgaXQgZnJvbSB0aGUKKwkJCQkgKiBz
dHJlYW0gcXVldWVzIGJ1dCBub3Qgb3V0IHRoZSBkb29yLCB3ZQorCQkJCSAqIHRha2UgdGhlIGZp
cnN0IG9uZSAod2hpY2ggd2lsbCBoYXZlIHRoZQorCQkJCSAqIGxvd2VzdCBUU04pIGFuZCBzdWJ0
cmFjdCBvbmUgdG8gZ2V0IHRoZQorCQkJCSAqIG9uZSB3ZSBsYXN0IHNlbnQuCisJCQkJICovCisJ
CQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHR0OworCisJCQkJdHR0ID0gVEFJTFFfRklSU1Qo
JmFzb2MtPnNlbmRfcXVldWUpOworCQkJCXRwMS0+cmVjLmRhdGEuZmFzdF9yZXRyYW5fdHNuID0K
KwkJCQkJdHR0LT5yZWMuZGF0YS50c247CisJCQl9CisKKwkJCWlmICh0cDEtPmRvX3J0dCkgewor
CQkJCS8qCisJCQkJICogdGhpcyBndXkgaGFkIGEgUlRPIGNhbGN1bGF0aW9uIHBlbmRpbmcgb24K
KwkJCQkgKiBpdCwgY2FuY2VsIGl0CisJCQkJICovCisJCQkJaWYgKCh0cDEtPndob1RvICE9IE5V
TEwpICYmCisJCQkJICAgICh0cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApKSB7CisJCQkJCXRw
MS0+d2hvVG8tPnJ0b19uZWVkZWQgPSAxOworCQkJCX0KKwkJCQl0cDEtPmRvX3J0dCA9IDA7CisJ
CQl9CisJCQlpZiAoYWx0ICE9IHRwMS0+d2hvVG8pIHsKKwkJCQkvKiB5ZXMsIHRoZXJlIGlzIGFu
IGFsdGVybmF0ZS4gKi8KKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIodHAxLT53aG9Ubyk7CisJ
CQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJCQl0cDEtPndob1RvID0gYWx0OworCQkJ
CWF0b21pY19hZGRfaW50KCZhbHQtPnJlZl9jb3VudCwgMSk7CisJCQl9CisJCX0KKwl9Cit9CisK
K3N0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKgorc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2lu
dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxLCAqdHAyLCAqYV9hZHYgPSBOVUxM
OworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisKKwlpZiAoYXNv
Yy0+cHJzY3RwX3N1cHBvcnRlZCA9PSAwKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVRBSUxR
X0ZPUkVBQ0hfU0FGRSh0cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIHRwMikgewor
CQlpZiAodHAxLT5zZW50ICE9IFNDVFBfRk9SV0FSRF9UU05fU0tJUCAmJgorCQkgICAgdHAxLT5z
ZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EICYmCisJCSAgICB0cDEtPnNlbnQgIT0gU0NUUF9E
QVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJLyogbm8gY2hhbmNlIHRvIGFkdmFuY2UsIG91dCBvZiBo
ZXJlICovCisJCQlicmVhazsKKwkJfQorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsKKwkJCWlmICgodHAxLT5zZW50ID09
IFNDVFBfRk9SV0FSRF9UU05fU0tJUCkgfHwKKwkJCSAgICAodHAxLT5zZW50ID09IFNDVFBfREFU
QUdSQU1fTlJfQUNLRUQpKSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GV0RfVFNOX0NIRUNL
LAorCQkJCQkgICAgICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsCisJCQkJCSAgICAg
ICB0cDEtPnJlYy5kYXRhLnRzbiwgMCwgMCk7CisJCQl9CisJCX0KKwkJaWYgKCFQUl9TQ1RQX0VO
QUJMRUQodHAxLT5mbGFncykpIHsKKwkJCS8qCisJCQkgKiBXZSBjYW4ndCBmd2QtdHNuIHBhc3Qg
YW55IHRoYXQgYXJlIHJlbGlhYmxlIGFrYQorCQkJICogcmV0cmFuc21pdHRlZCB1bnRpbCB0aGUg
YXNvYyBmYWlscy4KKwkJCSAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFub3dfZmlsbGVkKSB7
CisJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKKwkJCW5vd19maWxsZWQgPSAx
OworCQl9CisJCS8qCisJCSAqIG5vdyB3ZSBnb3QgYSBjaHVuayB3aGljaCBpcyBtYXJrZWQgZm9y
IGFub3RoZXIKKwkJICogcmV0cmFuc21pc3Npb24gdG8gYSBQUi1zdHJlYW0gYnV0IGhhcyBydW4g
b3V0IGl0cyBjaGFuY2VzCisJCSAqIGFscmVhZHkgbWF5YmUgT1IgaGFzIGJlZW4gbWFya2VkIHRv
IHNraXAgbm93LiBDYW4gd2Ugc2tpcAorCQkgKiBpdCBpZiBpdHMgYSByZXNlbmQ/CisJCSAqLwor
CQlpZiAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EICYmCisJCSAgICAoUFJfU0NU
UF9UVExfRU5BQkxFRCh0cDEtPmZsYWdzKSkpIHsKKwkJCS8qCisJCQkgKiBOb3cgaXMgdGhpcyBv
bmUgbWFya2VkIGZvciByZXNlbmQgYW5kIGl0cyB0aW1lIGlzCisJCQkgKiBub3cgdXA/CisJCQkg
Ki8KKyNpZm5kZWYgX19GcmVlQlNEX18KKwkJCWlmICh0aW1lcmNtcCgmbm93LCAmdHAxLT5yZWMu
ZGF0YS50aW1ldG9kcm9wLCA+KSkgeworI2Vsc2UKKwkJCWlmICh0aW1ldmFsY21wKCZub3csICZ0
cDEtPnJlYy5kYXRhLnRpbWV0b2Ryb3AsID4pKSB7CisjZW5kaWYKKwkJCQkvKiBZZXMgc28gZHJv
cCBpdCAqLworCQkJCWlmICh0cDEtPmRhdGEpIHsKKwkJCQkJKHZvaWQpc2N0cF9yZWxlYXNlX3By
X3NjdHBfY2h1bmsoc3RjYiwgdHAxLAorCQkJCQkgICAgMSwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogTm8sIHdlIGFyZSBkb25lIHdoZW4g
aGl0IG9uZSBmb3IgcmVzZW5kCisJCQkJICogd2hvcyB0aW1lIGFzIG5vdCBleHBpcmVkLgorCQkJ
CSAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCS8qCisJCSAqIE9rIG5vdyBpZiB0aGlzIGNo
dW5rIGlzIG1hcmtlZCB0byBkcm9wIGl0IHdlIGNhbiBjbGVhbiB1cAorCQkgKiB0aGUgY2h1bmss
IGFkdmFuY2Ugb3VyIHBlZXIgYWNrIHBvaW50IGFuZCB3ZSBjYW4gY2hlY2sKKwkJICogdGhlIG5l
eHQgY2h1bmsuCisJCSAqLworCQlpZiAoKHRwMS0+c2VudCA9PSBTQ1RQX0ZPUldBUkRfVFNOX1NL
SVApIHx8CisJCSAgICAodHAxLT5zZW50ID09IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpKSB7CisJ
CQkvKiBhZHZhbmNlIFBlZXJBY2tQb2ludCBnb2VzIGZvcndhcmQgKi8KKwkJCWlmIChTQ1RQX1RT
Tl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpKSB7
CisJCQkJYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQgPSB0cDEtPnJlYy5kYXRhLnRzbjsK
KwkJCQlhX2FkdiA9IHRwMTsKKwkJCX0gZWxzZSBpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gYXNv
Yy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpIHsKKwkJCQkvKiBObyB1cGRhdGUgYnV0IHdlIGRv
IHNhdmUgdGhlIGNoayAqLworCQkJCWFfYWR2ID0gdHAxOworCQkJfQorCQl9IGVsc2UgeworCQkJ
LyoKKwkJCSAqIElmIGl0IGlzIHN0aWxsIGluIFJFU0VORCB3ZSBjYW4gYWR2YW5jZSBubworCQkJ
ICogZnVydGhlcgorCQkJICovCisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKGFfYWR2KTsK
K30KKworc3RhdGljIGludAorc2N0cF9mc19hdWRpdChzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJaW50IGluZmxpZ2h0ID0g
MCwgcmVzZW5kID0gMCwgaW5iZXR3ZWVuID0gMCwgYWNrZWQgPSAwLCBhYm92ZSA9IDA7CisJaW50
IHJldDsKKyNpZm5kZWYgSU5WQVJJQU5UUworCWludCBlbnRyeV9mbGlnaHQsIGVudHJ5X2NudDsK
KyNlbmRpZgorCisJcmV0ID0gMDsKKyNpZm5kZWYgSU5WQVJJQU5UUworCWVudHJ5X2ZsaWdodCA9
IGFzb2MtPnRvdGFsX2ZsaWdodDsKKwllbnRyeV9jbnQgPSBhc29jLT50b3RhbF9mbGlnaHRfY291
bnQ7CisjZW5kaWYKKwlpZiAoYXNvYy0+cHJfc2N0cF9jbnQgPj0gYXNvYy0+c2VudF9xdWV1ZV9j
bnQpCisJCXJldHVybiAoMCk7CisKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVl
dWUsIHNjdHBfbmV4dCkgeworCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQp
IHsKKwkJCVNDVFBfUFJJTlRGKCJDaGsgVFNOOiAldSBzaXplOiAlZCBpbmZsaWdodCBjbnQ6ICVk
XG4iLAorCQkJICAgICAgICAgICAgY2hrLT5yZWMuZGF0YS50c24sCisJCQkgICAgICAgICAgICBj
aGstPnNlbmRfc2l6ZSwKKwkJCSAgICAgICAgICAgIGNoay0+c25kX2NvdW50KTsKKwkJCWluZmxp
Z2h0Kys7CisJCX0gZWxzZSBpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQlyZXNlbmQrKzsKKwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FD
S0VEKSB7CisJCQlpbmJldHdlZW4rKzsKKwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPiBTQ1RQX0RB
VEFHUkFNX0FDS0VEKSB7CisJCQlhYm92ZSsrOworCQl9IGVsc2UgeworCQkJYWNrZWQrKzsKKwkJ
fQorCX0KKworCWlmICgoaW5mbGlnaHQgPiAwKSB8fCAoaW5iZXR3ZWVuID4gMCkpIHsKKyNpZmRl
ZiBJTlZBUklBTlRTCisJCXBhbmljKCJGbGlnaHQgc2l6ZS1leHByZXNzIGluY29ycmVjdD8gXG4i
KTsKKyNlbHNlCisJCVNDVFBfUFJJTlRGKCJhc29jLT50b3RhbF9mbGlnaHQ6ICVkIGNudDogJWRc
biIsCisJCSAgICAgICAgICAgIGVudHJ5X2ZsaWdodCwgZW50cnlfY250KTsKKworCQlTQ1RQX1BS
SU5URigiRmxpZ2h0IHNpemUtZXhwcmVzcyBpbmNvcnJlY3QgRjogJWQgSTogJWQgUjogJWQgQWI6
ICVkIEFDSzogJWRcbiIsCisJCQkgICAgaW5mbGlnaHQsIGluYmV0d2VlbiwgcmVzZW5kLCBhYm92
ZSwgYWNrZWQpOworCQlyZXQgPSAxOworI2VuZGlmCisJfQorCXJldHVybiAocmV0KTsKK30KKwor
CitzdGF0aWMgdm9pZAorc2N0cF93aW5kb3dfcHJvYmVfcmVjb3Zlcnkoc3RydWN0IHNjdHBfdGNi
ICpzdGNiLAorCSAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKwkJCSAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMSkKK3sKKwl0cDEtPndpbmRvd19w
cm9iZSA9IDA7CisJaWYgKCh0cDEtPnNlbnQgPj0gU0NUUF9EQVRBR1JBTV9BQ0tFRCkgfHwgKHRw
MS0+ZGF0YSA9PSBOVUxMKSkgeworCQkvKiBUU04ncyBza2lwcGVkIHdlIGRvIE5PVCBtb3ZlIGJh
Y2suICovCisJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xPR19EV05fV1BfRldELAorCQkJ
ICAgICAgIHRwMS0+d2hvVG8gPyB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA6IDAsCisJCQkgICAg
ICAgdHAxLT5ib29rX3NpemUsCisJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53
aG9UbywKKwkJCSAgICAgICB0cDEtPnJlYy5kYXRhLnRzbik7CisJCXJldHVybjsKKwl9CisJLyog
Rmlyc3Qgc2V0dXAgdGhpcyBieSBzaHJpbmtpbmcgZmxpZ2h0ICovCisJaWYgKHN0Y2ItPmFzb2Mu
Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgeworCQkoKnN0
Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCko
dHAxLT53aG9UbywKKwkJCQkJCQkJCSAgICAgdHAxKTsKKwl9CisJc2N0cF9mbGlnaHRfc2l6ZV9k
ZWNyZWFzZSh0cDEpOworCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJ
LyogTm93IG1hcmsgZm9yIHJlc2VuZCAqLworCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVT
RU5EOworCXNjdHBfdWNvdW50X2luY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwor
CWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9M
T0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9X
UCwKKwkJCSAgICAgICB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCSAgICAgICB0cDEtPmJv
b2tfc2l6ZSwKKwkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAorCQkJ
ICAgICAgIHRwMS0+cmVjLmRhdGEudHNuKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfZXhwcmVzc19o
YW5kbGVfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGN1bWFjaywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByd25kLCBpbnQgKmFib3J0X25vdywgaW50IGVj
bmVfc2VlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxLCAqdHAyOworCXVpbnQz
Ml90IG9sZF9yd25kOworCWludCB3aW5fcHJvYmVfcmVjb3ZlcnkgPSAwOworCWludCB3aW5fcHJv
YmVfcmVjb3ZlcmVkID0gMDsKKwlpbnQgaiwgZG9uZV9vbmNlID0gMDsKKwlpbnQgcnRvX29rID0g
MTsKKwl1aW50MzJfdCBzZW5kX3M7CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MT0dfU0FDS19BUlJJVkFMU19FTkFCTEUpIHsKKwkJc2N0cF9taXNj
X2ludHMoU0NUUF9TQUNLX0xPR19FWFBSRVNTLCBjdW1hY2ssCisJCSAgICAgICAgICAgICAgIHJ3
bmQsIHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEsIHN0Y2ItPmFzb2MucGVlcnNfcnduZCk7CisJ
fQorCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9U
U05TCisJc3RjYi0+YXNvYy5jdW1hY2tfbG9nW3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdF0gPSBj
dW1hY2s7CisJc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0Kys7CisJaWYgKHN0Y2ItPmFzb2MuY3Vt
YWNrX2xvZ19hdCA+IFNDVFBfVFNOX0xPR19TSVpFKSB7CisJCXN0Y2ItPmFzb2MuY3VtYWNrX2xv
Z19hdCA9IDA7CisJfQorI2VuZGlmCisJYXNvYyA9ICZzdGNiLT5hc29jOworCW9sZF9yd25kID0g
YXNvYy0+cGVlcnNfcnduZDsKKwlpZiAoU0NUUF9UU05fR1QoYXNvYy0+bGFzdF9hY2tlZF9zZXEs
IGN1bWFjaykpIHsKKwkJLyogb2xkIGFjayAqLworCQlyZXR1cm47CisJfSBlbHNlIGlmIChhc29j
LT5sYXN0X2Fja2VkX3NlcSA9PSBjdW1hY2spIHsKKwkJLyogV2luZG93IHVwZGF0ZSBzYWNrICov
CisJCWFzb2MtPnBlZXJzX3J3bmQgPSBzY3RwX3Nic3BhY2Vfc3ViKHJ3bmQsCisJCQkJCQkgICAg
KHVpbnQzMl90KSAoYXNvYy0+dG90YWxfZmxpZ2h0ICsgKGFzb2MtPnRvdGFsX2ZsaWdodF9jb3Vu
dCAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkpKTsKKwkJaWYgKGFzb2Mt
PnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewor
CQkJLyogU1dTIHNlbmRlciBzaWRlIGVuZ2FnZXMgKi8KKwkJCWFzb2MtPnBlZXJzX3J3bmQgPSAw
OworCQl9CisJCWlmIChhc29jLT5wZWVyc19yd25kID4gb2xkX3J3bmQpIHsKKwkJCWdvdG8gYWdh
aW47CisJCX0KKwkJcmV0dXJuOworCX0KKworCS8qIEZpcnN0IHNldHVwIGZvciBDQyBzdHVmZiAq
LworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCWlmIChT
Q1RQX1RTTl9HVChjdW1hY2ssIG5ldC0+Y3dyX3dpbmRvd190c24pKSB7CisJCQkvKiBEcmFnIGFs
b25nIHRoZSB3aW5kb3dfdHNuIGZvciBjd3IncyAqLworCQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9
IGN1bWFjazsKKwkJfQorCQluZXQtPnByZXZfY3duZCA9IG5ldC0+Y3duZDsKKwkJbmV0LT5uZXRf
YWNrID0gMDsKKwkJbmV0LT5uZXRfYWNrMiA9IDA7CisKKwkJLyoKKwkJICogQ01UOiBSZXNldCBD
VUMgYW5kIEZhc3QgcmVjb3ZlcnkgYWxnbyB2YXJpYWJsZXMgYmVmb3JlCisJCSAqIFNBQ0sgcHJv
Y2Vzc2luZworCQkgKi8KKwkJbmV0LT5uZXdfcHNldWRvX2N1bWFjayA9IDA7CisJCW5ldC0+d2ls
bF9leGl0X2Zhc3RfcmVjb3ZlcnkgPSAwOworCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMu
c2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNrKSB7CisJCQkoKnN0Y2ItPmFzb2MuY2NfZnVu
Y3Rpb25zLnNjdHBfY3duZF9wcmVwYXJlX25ldF9mb3Jfc2Fjaykoc3RjYiwgbmV0KTsKKwkJfQor
CX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgeworCQl0cDEgPSBUQUlM
UV9MQVNUKCZhc29jLT5zZW50X3F1ZXVlLAorCQkJCSBzY3RwY2h1bmtfbGlzdGhlYWQpOworCQlz
ZW5kX3MgPSB0cDEtPnJlYy5kYXRhLnRzbiArIDE7CisJfSBlbHNlIHsKKwkJc2VuZF9zID0gYXNv
Yy0+c2VuZGluZ19zZXE7CisJfQorCWlmIChTQ1RQX1RTTl9HRShjdW1hY2ssIHNlbmRfcykpIHsK
KwkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsK
KworCQkqYWJvcnRfbm93ID0gMTsKKwkJLyogWFhYICovCisJCXNucHJpbnRmKG1zZywgc2l6ZW9m
KG1zZyksICJDdW0gYWNrICU4Ljh4IGdyZWF0ZXIgb3IgZXF1YWwgdGhhbiBUU04gJTguOHgiLAor
CQkJIGN1bWFjaywgc2VuZF9zKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0NBVVNFX1BST1RPQ09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9h
Ym9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjE7CisJCXNjdHBf
YWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJfQorCWFzb2MtPnRoaXNfc2Fja19oaWdoZXN0X2dh
cCA9IGN1bWFjazsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9USFJFU0hPTERfTE9HR0lORykgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX1RIUkVTSE9M
RF9DTEVBUiwKKwkJCSAgICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkg
ICAgICAgMCwKKwkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEsCisJCQkgICAgICAgX19M
SU5FX18pOworCX0KKwlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCWlmIChT
Q1RQX1RTTl9HVChjdW1hY2ssIGFzb2MtPmxhc3RfYWNrZWRfc2VxKSkgeworCQkvKiBwcm9jZXNz
IHRoZSBuZXcgY29uc2VjdXRpdmUgVFNOIGZpcnN0ICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0
cDEsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIHRwMikgeworCQkJaWYgKFNDVFBfVFNO
X0dFKGN1bWFjaywgdHAxLT5yZWMuZGF0YS50c24pKSB7CisJCQkJaWYgKHRwMS0+c2VudCA9PSBT
Q1RQX0RBVEFHUkFNX1VOU0VOVCkgeworCQkJCQlTQ1RQX1BSSU5URigiV2FybmluZywgYW4gdW5z
ZW50IGlzIG5vdyBhY2tlZD9cbiIpOworCQkJCX0KKwkJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9E
QVRBR1JBTV9BQ0tFRCkgeworCQkJCQkvKgorCQkJCQkgKiBJZiBpdCBpcyBsZXNzIHRoYW4gQUNL
RUQsIGl0IGlzCisJCQkJCSAqIG5vdyBuby1sb25nZXIgaW4gZmxpZ2h0LiBIaWdoZXIKKwkJCQkJ
ICogdmFsdWVzIG1heSBvY2N1ciBkdXJpbmcgbWFya2luZworCQkJCQkgKi8KKwkJCQkJaWYgKHRw
MS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkJ
ICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkJCQkgICAgICAgdHAxLT5ib29r
X3NpemUsCisJCQkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdCl0cDEtPndob1RvLAor
CQkJCQkJCQkgICAgICAgdHAxLT5yZWMuZGF0YS50c24pOworCQkJCQkJfQorCQkJCQkJc2N0cF9m
bGlnaHRfc2l6ZV9kZWNyZWFzZSh0cDEpOworCQkJCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zLnNjdHBfY3duZF91cGRhdGVfdHNuX2Fja25vd2xlZGdlZCkgeworCQkJCQkJCSgqc3RjYi0+
YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSh0cDEt
Pndob1RvLAorCQkJCQkJCQkJCQkJCQkgICAgIHRwMSk7CisJCQkJCQl9CisJCQkJCQkvKiBzYV9p
Z25vcmUgTk9fTlVMTF9DSEsgKi8KKwkJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0
Y2IsIHRwMSk7CisJCQkJCX0KKwkJCQkJdHAxLT53aG9Uby0+bmV0X2FjayArPSB0cDEtPnNlbmRf
c2l6ZTsKKwkJCQkJaWYgKHRwMS0+c25kX2NvdW50IDwgMikgeworCQkJCQkJLyoKKwkJCQkJCSAq
IFRydWUgbm9uLXJldHJhbnNtaXRlZAorCQkJCQkJICogY2h1bmsKKwkJCQkJCSAqLworCQkJCQkJ
dHAxLT53aG9Uby0+bmV0X2FjazIgKz0KKwkJCQkJCQl0cDEtPnNlbmRfc2l6ZTsKKworCQkJCQkJ
LyogdXBkYXRlIFJUTyB0b28/ICovCisJCQkJCQlpZiAodHAxLT5kb19ydHQpIHsKKwkJCQkJCQlp
ZiAocnRvX29rKSB7CisJCQkJCQkJCXRwMS0+d2hvVG8tPlJUTyA9CisJCQkJCQkJCQkvKgorCQkJ
CQkJCQkJICogc2FfaWdub3JlCisJCQkJCQkJCQkgKiBOT19OVUxMX0NISworCQkJCQkJCQkJICov
CisJCQkJCQkJCQlzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwKKwkJCQkJCQkJCQkJICAgYXNvYywg
dHAxLT53aG9UbywKKwkJCQkJCQkJCQkJICAgJnRwMS0+c2VudF9yY3ZfdGltZSwKKwkJCQkJCQkJ
CQkJICAgU0NUUF9SVFRfRlJPTV9EQVRBKTsKKwkJCQkJCQkJcnRvX29rID0gMDsKKwkJCQkJCQl9
CisJCQkJCQkJaWYgKHRwMS0+d2hvVG8tPnJ0b19uZWVkZWQgPT0gMCkgeworCQkJCQkJCQl0cDEt
Pndob1RvLT5ydG9fbmVlZGVkID0gMTsKKwkJCQkJCQl9CisJCQkJCQkJdHAxLT5kb19ydHQgPSAw
OworCQkJCQkJfQorCQkJCQl9CisJCQkJCS8qCisJCQkJCSAqIENNVDogQ1VDdjIgYWxnb3JpdGht
LiBGcm9tIHRoZQorCQkJCQkgKiBjdW1hY2snZCBUU05zLCBmb3IgZWFjaCBUU04gYmVpbmcKKwkJ
CQkJICogYWNrZWQgZm9yIHRoZSBmaXJzdCB0aW1lLCBzZXQgdGhlCisJCQkJCSAqIGZvbGxvd2lu
ZyB2YXJpYWJsZXMgZm9yIHRoZQorCQkJCQkgKiBjb3JyZXNwIGRlc3RpbmF0aW9uLgorCQkJCQkg
KiBuZXdfcHNldWRvX2N1bWFjayB3aWxsIHRyaWdnZXIgYQorCQkJCQkgKiBjd25kIHVwZGF0ZS4K
KwkJCQkJICogZmluZF8ocnR4Xylwc2V1ZG9fY3VtYWNrIHdpbGwKKwkJCQkJICogdHJpZ2dlciBz
ZWFyY2ggZm9yIHRoZSBuZXh0CisJCQkJCSAqIGV4cGVjdGVkIChydHgtKXBzZXVkby1jdW1hY2su
CisJCQkJCSAqLworCQkJCQl0cDEtPndob1RvLT5uZXdfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJ
CXRwMS0+d2hvVG8tPmZpbmRfcHNldWRvX2N1bWFjayA9IDE7CisJCQkJCXRwMS0+d2hvVG8tPmZp
bmRfcnR4X3BzZXVkb19jdW1hY2sgPSAxOworCisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCS8q
IHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCB0cDEt
Pndob1RvLCB0cDEtPnJlYy5kYXRhLnRzbiwgU0NUUF9DV05EX0xPR19GUk9NX1NBQ0spOworCQkJ
CQl9CisJCQkJfQorCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsK
KwkJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJ
CX0KKwkJCQlpZiAodHAxLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgeworCQkJCQkvKiBk
ZWZsYXRlIHRoZSBjd25kICovCisJCQkJCXRwMS0+d2hvVG8tPmN3bmQgLT0gdHAxLT5ib29rX3Np
emU7CisJCQkJCXRwMS0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQkJCX0KKwkJ
CQlpZiAodHAxLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fTlJfQUNLRUQpIHsKKwkJCQkJaWYgKGFz
b2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJ
CQkJCQlhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07
CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQl9IGVsc2UgeworCQkJCQkJcGFuaWMoIk5vIGNodW5r
cyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0YS5zaWQpOworI2VuZGlm
CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lk
XS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCQkJICAgIChhc29jLT5zdHJtb3V0W3RwMS0+
cmVjLmRhdGEuc2lkXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgorCQkJ
CSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0ub3V0cXVl
dWUpKSB7CisJCQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOworCQkJCX0KKwkJCQlUQUlMUV9S
RU1PVkUoJmFzb2MtPnNlbnRfcXVldWUsIHRwMSwgc2N0cF9uZXh0KTsKKwkJCQlpZiAodHAxLT5k
YXRhKSB7CisJCQkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJCQlzY3RwX2ZyZWVf
YnVmc3BhY2Uoc3RjYiwgYXNvYywgdHAxLCAxKTsKKwkJCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0
YSk7CisJCQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJ
CQkJc2N0cF9sb2dfc2Fjayhhc29jLT5sYXN0X2Fja2VkX3NlcSwKKwkJCQkJCSAgICAgIGN1bWFj
aywKKwkJCQkJCSAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAorCQkJCQkJICAgICAgMCwKKwkJCQkJ
CSAgICAgIDAsCisJCQkJCQkgICAgICBTQ1RQX0xPR19GUkVFX1NFTlQpOworCQkJCX0KKwkJCQlh
c29jLT5zZW50X3F1ZXVlX2NudC0tOworCQkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
KworCX0KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYgKHN0Y2ItPnNjdHBfZXAtPnJl
Y3ZfY2FsbGJhY2spIHsKKwkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJCQl1aW50MzJfdCBp
bnF1ZXVlX2J5dGVzLCBzYl9mcmVlX25vdzsKKwkJCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisK
KwkJCWlucCA9IHN0Y2ItPnNjdHBfZXA7CisJCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50
b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUg
KiBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCQkJc2JfZnJlZV9ub3cgPSBTQ1RQ
X1NCX0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkgLSAoaW5xdWV1ZV9ieXRlcyArIHN0Y2It
PmFzb2Muc2Jfc2VuZF9yZXN2KTsKKworCQkJLyogY2hlY2sgaWYgdGhlIGFtb3VudCBmcmVlIGlu
IHRoZSBzZW5kIHNvY2tldCBidWZmZXIgY3Jvc3NlZCB0aGUgdGhyZXNob2xkICovCisJCQlpZiAo
aW5wLT5zZW5kX2NhbGxiYWNrICYmCisJCQkgICAgKCgoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA+
IDApICYmCisJCQkgICAgICAoc2JfZnJlZV9ub3cgPj0gaW5wLT5zZW5kX3NiX3RocmVzaG9sZCkg
JiYKKwkJCSAgICAgIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgPD0gU0NUUF9CQVNF
X1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgfHwKKwkJCSAgICAgKGlucC0+c2Vu
ZF9zYl90aHJlc2hvbGQgPT0gMCkpKSB7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJaW5wLT5zZW5kX2Nh
bGxiYWNrKHN0Y2ItPnNjdHBfc29ja2V0LCBzYl9mcmVlX25vdyk7CisJCQkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCQl9CisJCX0KKwl9IGVsc2UgaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisjZWxzZQorCS8q
IHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisjZW5kaWYKKwkJU09DS0JVRl9MT0NLKCZzdGNi
LT5zY3RwX3NvY2tldC0+c29fc25kKTsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJLyogc2FfaWdub3Jl
IE5PX05VTExfQ0hLICovCisJCQlzY3RwX3dha2V1cF9sb2coc3RjYiwgMSwgU0NUUF9XQUtFU05E
X0ZST01fU0FDSyk7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNz
b2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cF9s
b2NrZWQoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0
cF93YWtldXBfbG9nKHN0Y2IsIDEsIFNDVFBfTk9XQUtFX0ZST01fU0FDSyk7CisJCX0KKwl9CisK
KwkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9k
dWxlICovCisJaWYgKChhc29jLT5sYXN0X2Fja2VkX3NlcSAhPSBjdW1hY2spICYmIChlY25lX3Nl
ZW4gPT0gMCkpIHsKKwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQp
IHsKKwkJCWlmIChuZXQtPm5ldF9hY2syID4gMCkgeworCQkJCS8qCisJCQkJICogS2FybidzIHJ1
bGUgYXBwbGllcyB0byBjbGVhcmluZyBlcnJvciBjb3VudCwgdGhpcworCQkJCSAqIGlzIG9wdGlv
bmFsLgorCQkJCSAqLworCQkJCW5ldC0+ZXJyb3JfY291bnQgPSAwOworCQkJCWlmICghKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7CisJCQkJCS8qIGFkZHIgY2FtZSBn
b29kICovCisJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJ
CQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLAorCQkJCQkg
ICAgICAgICAgICAgICAgMCwgKHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJ
fQorCQkJCWlmIChuZXQgPT0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CisJCQkJ
CWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJCQkJLyogcmVsZWFzZSB0aGUgYWx0ZXJu
YXRlLCBwcmltYXJ5IGlzIGdvb2QgKi8KKwkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNi
LT5hc29jLmFsdGVybmF0ZSk7CisJCQkJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJ
CQkJCX0KKwkJCQl9CisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgewor
CQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQkJc2N0cF90aW1lcl9z
dG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsCisJCQkJCSAgICAgICAgICAgICAgICBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NU
UF9JTkRBVEEgKyBTQ1RQX0xPQ18yMik7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJYXNvYy0+
Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZihzdGNiLCBuZXQpOworCQkJCQkv
KiBEb25lIHdpdGggdGhpcyBuZXQgKi8KKwkJCQkJbmV0LT5uZXRfYWNrID0gMDsKKwkJCQl9CisJ
CQkJLyogcmVzdG9yZSBhbnkgZG91YmxlZCB0aW1lcnMgKi8KKwkJCQluZXQtPlJUTyA9IChuZXQt
Pmxhc3RzYSA+PiBTQ1RQX1JUVF9TSElGVCkgKyBuZXQtPmxhc3RzdjsKKwkJCQlpZiAobmV0LT5S
VE8gPCBzdGNiLT5hc29jLm1pbnJ0bykgeworCQkJCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MubWlu
cnRvOworCQkJCX0KKwkJCQlpZiAobmV0LT5SVE8gPiBzdGNiLT5hc29jLm1heHJ0bykgeworCQkJ
CQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MubWF4cnRvOworCQkJCX0KKwkJCX0KKwkJfQorCQlhc29j
LT5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9zYWNrKHN0Y2IsIGFzb2MsIDEs
IDAsIDApOworCX0KKwlhc29jLT5sYXN0X2Fja2VkX3NlcSA9IGN1bWFjazsKKworCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKKwkJLyogbm90aGluZyBsZWZ0IGluLWZsaWdo
dCAqLworCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJ
bmV0LT5mbGlnaHRfc2l6ZSA9IDA7CisJCQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOwor
CQl9CisJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJCWFzb2MtPnRvdGFsX2ZsaWdodF9jb3Vu
dCA9IDA7CisJfQorCisJLyogUldORCB1cGRhdGUgKi8KKwlhc29jLT5wZWVyc19yd25kID0gc2N0
cF9zYnNwYWNlX3N1Yihyd25kLAorCQkJCQkgICAgKHVpbnQzMl90KSAoYXNvYy0+dG90YWxfZmxp
Z2h0ICsgKGFzb2MtPnRvdGFsX2ZsaWdodF9jb3VudCAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9w
ZWVyX2NodW5rX29oKSkpKTsKKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJCS8qIFNXUyBzZW5kZXIgc2lkZSBlbmdhZ2Vz
ICovCisJCWFzb2MtPnBlZXJzX3J3bmQgPSAwOworCX0KKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA+
IG9sZF9yd25kKSB7CisJCXdpbl9wcm9iZV9yZWNvdmVyeSA9IDE7CisJfQorCS8qIE5vdyBhc3N1
cmUgYSB0aW1lciB3aGVyZSBkYXRhIGlzIHF1ZXVlZCBhdCAqLworYWdhaW46CisJaiA9IDA7CisJ
VEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKHdpbl9w
cm9iZV9yZWNvdmVyeSAmJiAobmV0LT53aW5kb3dfcHJvYmUpKSB7CisJCQl3aW5fcHJvYmVfcmVj
b3ZlcmVkID0gMTsKKwkJCS8qCisJCQkgKiBGaW5kIGZpcnN0IGNodW5rIHRoYXQgd2FzIHVzZWQg
d2l0aCB3aW5kb3cgcHJvYmUKKwkJCSAqIGFuZCBjbGVhciB0aGUgc2VudAorCQkJICovCisJCQkv
KiBzYV9pZ25vcmUgRlJFRURfTUVNT1JZICovCisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2Mt
PnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgewor
CQkJCQkvKiBtb3ZlIGJhY2sgdG8gZGF0YSBzZW5kIHF1ZXVlICovCisJCQkJCXNjdHBfd2luZG93
X3Byb2JlX3JlY292ZXJ5KHN0Y2IsIGFzb2MsIHRwMSk7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0KKwkJfQorCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSkgeworCQkJaisrOworCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsK
KwkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgeworCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsK
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgeworCQkJCS8qIElu
IHdpbmRvdyBwcm9iZXMgd2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRo
ZXJlICovCisJCQkJbmV0LT53aW5kb3dfcHJvYmUgPSAwOworCQkJCWlmICghU0NUUF9PU19USU1F
Ul9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQl9
CisJCQl9IGVsc2UgaWYgKFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGlt
ZXIpKSB7CisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5z
Y3RwX2VwLAorCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCisJCQkJICAgICAgICAgICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzIzKTsKKwkJCX0KKwkJfQorCX0K
KwlpZiAoKGogPT0gMCkgJiYKKwkgICAgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkp
ICYmCisJICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYKKwkgICAgKHdp
bl9wcm9iZV9yZWNvdmVyZWQgPT0gMCkgJiYKKwkgICAgKGRvbmVfb25jZSA9PSAwKSkgeworCQkv
KiBodWgsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gdW5sZXNzIGFsbCBwYWNrZXRzCisJCSAqIGFy
ZSBQUi1TQ1RQIGFuZCBtYXJrZWQgdG8gc2tpcCBvZiBjb3Vyc2UuCisJCSAqLworCQlpZiAoc2N0
cF9mc19hdWRpdChhc29jKSkgeworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBz
Y3RwX25leHQpIHsKKwkJCQluZXQtPmZsaWdodF9zaXplID0gMDsKKwkJCX0KKwkJCWFzb2MtPnRv
dGFsX2ZsaWdodCA9IDA7CisJCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOworCQkJYXNv
Yy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKKwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNv
Yy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFU
QUdSQU1fUkVTRU5EKSB7CisJCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKTsKKwkJ
CQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl9IGVsc2UgaWYg
KHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQlzY3RwX3Vjb3VudF9p
bmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWRv
bmVfb25jZSA9IDE7CisJCWdvdG8gYWdhaW47CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLworCS8qIE5vdyB3aGF0IGFib3V0IHNodXRkb3duIGlzc3VlcyAqLworCS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCWlmIChUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VuZF9xdWV1ZSkgJiYgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCS8q
IG5vdGhpbmcgbGVmdCBvbiBzZW5kcXVldWUuLiBjb25zaWRlciBkb25lICovCisJCS8qIGNsZWFu
IHVwICovCisJCWlmICgoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgorCQkgICAgKChh
c29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAoYXNv
Yy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKKwkJICAgICgoKmFz
b2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBh
c29jKSkpIHsKKwkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsK
KwkJfQorCQlpZiAoKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykg
fHwKKwkJICAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05f
UkVDRUlWRUQpKSAmJgorCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMSkgJiYKKwkJ
ICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCXN0
cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCSphYm9ydF9ub3cgPSAxOworCQkJLyogWFhYICovCisJ
CQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURf
QUJULCAiIik7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01f
U0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNDsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24o
c3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJcmV0
dXJuOworCQl9CisJCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJ
TkcpICYmCisJCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJc3RydWN0
IHNjdHBfbmV0cyAqbmV0cDsKKworCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX09QRU4pIHx8CisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RB
VEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rw
c19jdXJyZXN0YWIpOworCQkJfQorCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9T
SFVURE9XTl9TRU5UKTsKKwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9T
SFVURE9XTl9QRU5ESU5HKTsKKwkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2Ip
OworCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7
CisJCQl9IGVsc2UgeworCQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJ
fQorCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldHApOworCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04sCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBu
ZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQs
CisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJfSBlbHNlIGlmICgoU0NUUF9H
RVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJCSAg
IChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXRwOworCisJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQlT
Q1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKKwkJCVND
VFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJ
CXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2MtPmFsdGVy
bmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2UgeworCQkJCW5l
dHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5kX3NodXRk
b3duX2FjayhzdGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOQUNLLAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCX0KKwl9
CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBI
ZXJlIHdlIHBlcmZvcm0gUFItU0NUUCBwcm9jZWR1cmVzICAgICAgICAqLworCS8qIChzZWN0aW9u
IDQuMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBDMS4gdXBkYXRlIGFkdmFuY2VkUGVl
ckFja1BvaW50ICovCisJaWYgKFNDVFBfVFNOX0dUKGN1bWFjaywgYXNvYy0+YWR2YW5jZWRfcGVl
cl9hY2tfcG9pbnQpKSB7CisJCWFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gY3VtYWNr
OworCX0KKwkvKiBQUi1TY3RwIGlzc3VlcyBuZWVkIHRvIGJlIGFkZHJlc3NlZCB0b28gKi8KKwlp
ZiAoKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQpICYmIChhc29jLT5wcl9zY3RwX2NudCA+IDApKSB7
CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7CisJCXVpbnQzMl90IG9sZF9hZHZfcGVl
cl9hY2tfcG9pbnQ7CisKKwkJb2xkX2Fkdl9wZWVyX2Fja19wb2ludCA9IGFzb2MtPmFkdmFuY2Vk
X3BlZXJfYWNrX3BvaW50OworCQlsY2hrID0gc2N0cF90cnlfYWR2YW5jZV9wZWVyX2Fja19wb2lu
dChzdGNiLCBhc29jKTsKKwkJLyogQzMuIFNlZSBpZiB3ZSBuZWVkIHRvIHNlbmQgYSBGd2QtVFNO
ICovCisJCWlmIChTQ1RQX1RTTl9HVChhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCwgY3Vt
YWNrKSkgeworCQkJLyoKKwkJCSAqIElTU1VFIHdpdGggRUNOLCBzZWUgRldELVRTTiBwcm9jZXNz
aW5nLgorCQkJICovCisJCQlpZiAoU0NUUF9UU05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tf
cG9pbnQsIG9sZF9hZHZfcGVlcl9hY2tfcG9pbnQpKSB7CisJCQkJc2VuZF9mb3J3YXJkX3Rzbihz
dGNiLCBhc29jKTsKKwkJCX0gZWxzZSBpZiAobGNoaykgeworCQkJCS8qIHRyeSB0byBGUiBmd2Qt
dHNuJ3MgdGhhdCBnZXQgbG9zdCB0b28gKi8KKwkJCQlpZiAobGNoay0+cmVjLmRhdGEuZndkX3Rz
bl9jbnQgPj0gMykgeworCQkJCQlzZW5kX2ZvcndhcmRfdHNuKHN0Y2IsIGFzb2MpOworCQkJCX0K
KwkJCX0KKwkJfQorCQlpZiAobGNoaykgeworCQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8K
KwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQsCisJCQkJCSBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBsY2hrLT53aG9Ubyk7CisJCX0KKwl9CisJaWYgKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0FDS19SV05EX0xPR0dJTkdfRU5BQkxFKSB7
CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU0FDS19SV05EX1VQREFURSwKKwkJCSAgICAgICByd25k
LAorCQkJICAgICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJCSAgICAgICBzdGNiLT5hc29j
LnRvdGFsX2ZsaWdodCwKKwkJCSAgICAgICBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9z
aXplKTsKKwl9Cit9CisKK3ZvaWQKK3NjdHBfaGFuZGxlX3NhY2soc3RydWN0IG1idWYgKm0sIGlu
dCBvZmZzZXRfc2VnLCBpbnQgb2Zmc2V0X2R1cCwKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAgICB1aW50MTZfdCBudW1fc2VnLCB1aW50MTZf
dCBudW1fbnJfc2VnLCB1aW50MTZfdCBudW1fZHVwLAorICAgICAgICAgICAgICAgICBpbnQgKmFi
b3J0X25vdywgdWludDhfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgdWludDMyX3QgY3VtX2Fj
aywgdWludDMyX3QgcnduZCwgaW50IGVjbmVfc2VlbikKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsICp0cDI7CisJdWludDMy
X3QgbGFzdF90c24sIGJpZ2dlc3RfdHNuX2Fja2VkLCBiaWdnZXN0X3Rzbl9uZXdseV9hY2tlZCwg
dGhpc19zYWNrX2xvd2VzdF9uZXdhY2s7CisJdWludDE2X3Qgd2FrZV9oaW0gPSAwOworCXVpbnQz
Ml90IHNlbmRfcyA9IDA7CisJbG9uZyBqOworCWludCBhY2N1bV9tb3ZlZCA9IDA7CisJaW50IHdp
bGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0gMDsKKwl1aW50MzJfdCBhX3J3bmQsIG9sZF9yd25kOwor
CWludCB3aW5fcHJvYmVfcmVjb3ZlcnkgPSAwOworCWludCB3aW5fcHJvYmVfcmVjb3ZlcmVkID0g
MDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgPSBOVUxMOworCWludCBkb25lX29uY2U7CisJaW50
IHJ0b19vayA9IDE7CisJdWludDhfdCByZW5lZ2VkX2FsbCA9IDA7CisJdWludDhfdCBjbXRfZGFj
X2ZsYWc7CisJLyoKKwkgKiB3ZSB0YWtlIGFueSBjaGFuY2Ugd2UgY2FuIHRvIHNlcnZpY2Ugb3Vy
IHF1ZXVlcyBzaW5jZSB3ZSBjYW5ub3QKKwkgKiBnZXQgYXdva2VuIHdoZW4gdGhlIHNvY2tldCBp
cyByZWFkIGZyb20gOjwKKwkgKi8KKwkvKgorCSAqIE5vdyBwZXJmb3JtIHRoZSBhY3R1YWwgU0FD
SyBoYW5kbGluZzogMSkgVmVyaWZ5IHRoYXQgaXQgaXMgbm90IGFuCisJICogb2xkIHNhY2ssIGlm
IHNvIGRpc2NhcmQuIDIpIElmIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCBpbiB0aGUgc2VuZAorCSAq
IHF1ZXVlIChjdW0tYWNrIGlzIGVxdWFsIHRvIGxhc3QgYWNrZWQpIHRoZW4geW91IGhhdmUgYSBk
dXBsaWNhdGUKKwkgKiB0b28sIHVwZGF0ZSBhbnkgcnduZCBjaGFuZ2UgYW5kIHZlcmlmeSBubyB0
aW1lcnMgYXJlIHJ1bm5pbmcuCisJICogdGhlbiByZXR1cm4uIDMpIFByb2Nlc3MgYW55IG5ldyBj
b25zZXF1dGl2ZSBkYXRhIGkuZS4gY3VtLWFjaworCSAqIG1vdmVkIHByb2Nlc3MgdGhlc2UgZmly
c3QgYW5kIG5vdGUgdGhhdCBpdCBtb3ZlZC4gNCkgUHJvY2VzcyBhbnkKKwkgKiBzYWNrIGJsb2Nr
cy4gNSkgRHJvcCBhbnkgYWNrZWQgZnJvbSB0aGUgcXVldWUuIDYpIENoZWNrIGZvciBhbnkKKwkg
KiByZXZva2VkIGJsb2NrcyBhbmQgbWFyay4gNykgVXBkYXRlIHRoZSBjd25kLiA4KSBOb3RoaW5n
IGxlZnQsCisJICogc3luYyB1cCBmbGlnaHRzaXplcyBhbmQgdGhpbmdzLCBzdG9wIGFsbCB0aW1l
cnMgYW5kIGFsc28gY2hlY2sKKwkgKiBmb3Igc2h1dGRvd25fcGVuZGluZyBzdGF0ZS4gSWYgc28g
dGhlbiBnbyBhaGVhZCBhbmQgc2VuZCBvZmYgdGhlCisJICogc2h1dGRvd24uIElmIGluIHNodXRk
b3duIHJlY3YsIHNlbmQgb2ZmIHRoZSBzaHV0ZG93bi1hY2sgYW5kCisJICogc3RhcnQgdGhhdCB0
aW1lciwgUmV0LiA5KSBTdHJpa2UgYW55IG5vbi1hY2tlZCB0aGluZ3MgYW5kIGRvIEZSCisJICog
cHJvY2VkdXJlIGlmIG5lZWRlZCBiZWluZyBzdXJlIHRvIHNldCB0aGUgRlIgZmxhZy4gMTApIERv
IHByLXNjdHAKKwkgKiBwcm9jZWR1cmVzLiAxMSkgQXBwbHkgYW55IEZSIHBlbmFsdGllcy4gMTIp
IEFzc3VyZSB3ZSB3aWxsIFNBQ0sKKwkgKiBpZiBpbiBzaHV0ZG93bl9yZWN2IHN0YXRlLgorCSAq
LworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCS8qIENNVCBEQUMgYWxnbyAqLworCXRo
aXNfc2Fja19sb3dlc3RfbmV3YWNrID0gMDsKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zbG93cGF0
aF9zYWNrKTsKKwlsYXN0X3RzbiA9IGN1bV9hY2s7CisJY210X2RhY19mbGFnID0gZmxhZ3MgJiBT
Q1RQX1NBQ0tfQ01UX0RBQzsKKyNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNOUworCXN0Y2ItPmFz
b2MuY3VtYWNrX2xvZ1tzdGNiLT5hc29jLmN1bWFja19sb2dfYXRdID0gY3VtX2FjazsKKwlzdGNi
LT5hc29jLmN1bWFja19sb2dfYXQrKzsKKwlpZiAoc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0ID4g
U0NUUF9UU05fTE9HX1NJWkUpIHsKKwkJc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0ID0gMDsKKwl9
CisjZW5kaWYKKwlhX3J3bmQgPSByd25kOworCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1NBQ0tfQVJSSVZBTFNfRU5BQkxFKSB7CisJCXNjdHBf
bWlzY19pbnRzKFNDVFBfU0FDS19MT0dfTk9STUFMLCBjdW1fYWNrLAorCQkgICAgICAgICAgICAg
ICByd25kLCBzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2VxLCBzdGNiLT5hc29jLnBlZXJzX3J3bmQp
OworCX0KKworCW9sZF9yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOworCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7
CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkgICAgICAgICAgICAg
ICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCSAgICAgICAgICAgICAgIDAsCisJ
CSAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSwKKwkJICAgICAgICAgICAgICAg
X19MSU5FX18pOworCX0KKwlzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQgPSAwOworCWFz
b2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX3NhY2soYXNvYy0+
bGFzdF9hY2tlZF9zZXEsCisJCSAgICAgICAgICAgICAgY3VtX2FjaywKKwkJICAgICAgICAgICAg
ICAwLAorCQkgICAgICAgICAgICAgIG51bV9zZWcsCisJCSAgICAgICAgICAgICAgbnVtX2R1cCwK
KwkJICAgICAgICAgICAgICBTQ1RQX0xPR19ORVdfU0FDSyk7CisJfQorCWlmICgobnVtX2R1cCkg
JiYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lO
R19FTkFCTEUpKSB7CisJCXVpbnQxNl90IGk7CisJCXVpbnQzMl90ICpkdXBkYXRhLCBkYmxvY2s7
CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9kdXA7IGkrKykgeworCQkJZHVwZGF0YSA9ICh1aW50
MzJfdCAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0X2R1cCArIGkgKiBzaXplb2YodWludDMyX3Qp
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90
KSwgKHVpbnQ4X3QgKikmZGJsb2NrKTsKKwkJCWlmIChkdXBkYXRhID09IE5VTEwpIHsKKwkJCQli
cmVhazsKKwkJCX0KKwkJCXNjdHBfbG9nX2ZyKCpkdXBkYXRhLCAwLCAwLCBTQ1RQX0ZSX0RVUEVE
KTsKKwkJfQorCX0KKwkvKiByZWFsaXR5IGNoZWNrICovCisJaWYgKCFUQUlMUV9FTVBUWSgmYXNv
Yy0+c2VudF9xdWV1ZSkpIHsKKwkJdHAxID0gVEFJTFFfTEFTVCgmYXNvYy0+c2VudF9xdWV1ZSwK
KwkJCQkgc2N0cGNodW5rX2xpc3RoZWFkKTsKKwkJc2VuZF9zID0gdHAxLT5yZWMuZGF0YS50c24g
KyAxOworCX0gZWxzZSB7CisJCXRwMSA9IE5VTEw7CisJCXNlbmRfcyA9IGFzb2MtPnNlbmRpbmdf
c2VxOworCX0KKwlpZiAoU0NUUF9UU05fR0UoY3VtX2Fjaywgc2VuZF9zKSkgeworCQlzdHJ1Y3Qg
bWJ1ZiAqb3BfZXJyOworCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCS8qCisJ
CSAqIG5vIHdheSwgd2UgaGF2ZSBub3QgZXZlbiBzZW50IHRoaXMgVFNOIG91dCB5ZXQuCisJCSAq
IFBlZXIgaXMgaG9wZWxlc3NseSBtZXNzZWQgdXAgd2l0aCB1cy4KKwkJICovCisJCVNDVFBfUFJJ
TlRGKCJORVcgY3VtX2FjazoleCBzZW5kX3M6JXggaXMgc21hbGxlciBvciBlcXVhbFxuIiwKKwkJ
CSAgICBjdW1fYWNrLCBzZW5kX3MpOworCQlpZiAodHAxKSB7CisJCQlTQ1RQX1BSSU5URigiR290
IHNlbmRfcyBmcm9tIHRzbjoleCArIDEgb2YgdHAxOiAlcFxuIiwKKwkJCQkgICAgdHAxLT5yZWMu
ZGF0YS50c24sICh2b2lkICopdHAxKTsKKwkJfQorCWhvcGVsZXNzX3BlZXI6CisJCSphYm9ydF9u
b3cgPSAxOworCQkvKiBYWFggKi8KKwkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIkN1bSBh
Y2sgJTguOHggZ3JlYXRlciBvciBlcXVhbCB0aGFuIFRTTiAlOC44eCIsCisJCQkgY3VtX2Fjaywg
c2VuZF9zKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX1BST1RP
Q09MX1ZJT0xBVElPTiwgbXNnKTsKKwkJc3RjYi0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0g
U0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9MT0NfMjU7CisJCXNjdHBfYWJvcnRfYW5fYXNz
b2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQlyZXR1cm47CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqLworCS8qIDEpIGNoZWNr
IHRoZSByYW5nZSAqLworCS8qKioqKioqKioqKioqKioqKioqKioqLworCWlmIChTQ1RQX1RTTl9H
VChhc29jLT5sYXN0X2Fja2VkX3NlcSwgbGFzdF90c24pKSB7CisJCS8qIGFja2luZyBzb21ldGhp
bmcgYmVoaW5kICovCisJCXJldHVybjsKKwl9CisKKwkvKiB1cGRhdGUgdGhlIFJ3bmQgb2YgdGhl
IHBlZXIgKi8KKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJICAgIFRB
SUxRX0VNUFRZKCZhc29jLT5zZW5kX3F1ZXVlKSAmJgorCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVl
X2NudCA9PSAwKSkgeworCQkvKiBub3RoaW5nIGxlZnQgb24gc2VuZC9zZW50IGFuZCBzdHJtcSAq
LworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0df
UldORF9FTkFCTEUpIHsKKwkJCXNjdHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9W
SUFfU0FDSywKKwkJCSAgICAgICAgICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAsIDAsIGFf
cnduZCk7CisJCX0KKwkJYXNvYy0+cGVlcnNfcnduZCA9IGFfcnduZDsKKwkJaWYgKGFzb2MtPnNl
bnRfcXVldWVfcmV0cmFuX2NudCkgeworCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0g
MDsKKwkJfQorCQlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAu
c2N0cF9zd3Nfc2VuZGVyKSB7CisJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJ
YXNvYy0+cGVlcnNfcnduZCA9IDA7CisJCX0KKwkJLyogc3RvcCBhbnkgdGltZXJzICovCisJCVRB
SUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCQlzY3RwX3RpbWVy
X3N0b3AoU0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkgICAgICAgICAg
ICAgICAgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yNik7CisJ
CQluZXQtPnBhcnRpYWxfYnl0ZXNfYWNrZWQgPSAwOworCQkJbmV0LT5mbGlnaHRfc2l6ZSA9IDA7
CisJCX0KKwkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+dG90YWxfZmxpZ2h0X2Nv
dW50ID0gMDsKKwkJcmV0dXJuOworCX0KKwkvKgorCSAqIFdlIGluaXQgbmV0QWNrU3ogYW5kIG5l
dEFja1N6MiB0byAwLiBUaGVzZSBhcmUgdXNlZCB0byB0cmFjayAyCisJICogdGhpbmdzLiBUaGUg
dG90YWwgYnl0ZSBjb3VudCBhY2tlZCBpcyB0cmFja2VkIGluIG5ldEFja1N6IEFORAorCSAqIG5l
dEFjazIgaXMgdXNlZCB0byB0cmFjayB0aGUgdG90YWwgYnl0ZXMgYWNrZWQgdGhhdCBhcmUgdW4t
CisJICogYW1pYmd1aW91cyBhbmQgd2VyZSBuZXZlciByZXRyYW5zbWl0dGVkLiBXZSB0cmFjayB0
aGVzZSBvbiBhIHBlcgorCSAqIGRlc3RpbmF0aW9uIGFkZHJlc3MgYmFzaXMuCisJICovCisJVEFJ
TFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKFNDVFBfVFNO
X0dUKGN1bV9hY2ssIG5ldC0+Y3dyX3dpbmRvd190c24pKSB7CisJCQkvKiBEcmFnIGFsb25nIHRo
ZSB3aW5kb3dfdHNuIGZvciBjd3IncyAqLworCQkJbmV0LT5jd3Jfd2luZG93X3RzbiA9IGN1bV9h
Y2s7CisJCX0KKwkJbmV0LT5wcmV2X2N3bmQgPSBuZXQtPmN3bmQ7CisJCW5ldC0+bmV0X2FjayA9
IDA7CisJCW5ldC0+bmV0X2FjazIgPSAwOworCisJCS8qCisJCSAqIENNVDogUmVzZXQgQ1VDIGFu
ZCBGYXN0IHJlY292ZXJ5IGFsZ28gdmFyaWFibGVzIGJlZm9yZQorCQkgKiBTQUNLIHByb2Nlc3Np
bmcKKwkJICovCisJCW5ldC0+bmV3X3BzZXVkb19jdW1hY2sgPSAwOworCQluZXQtPndpbGxfZXhp
dF9mYXN0X3JlY292ZXJ5ID0gMDsKKwkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBf
Y3duZF9wcmVwYXJlX25ldF9mb3Jfc2FjaykgeworCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9u
cy5zY3RwX2N3bmRfcHJlcGFyZV9uZXRfZm9yX3NhY2spKHN0Y2IsIG5ldCk7CisJCX0KKworCQkv
KgorCQkgKiBDTVQ6IFNGUiBhbGdvIChhbmQgSFROQSkgLSB0aGlzX3NhY2tfaGlnaGVzdF9uZXdh
Y2sgaGFzCisJCSAqIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGUgY3VtYWNrLiBBbHNvIHJlc2V0IHNh
d19uZXdhY2sgdG8gMAorCQkgKiBmb3IgYWxsIGRlc3RzLgorCQkgKi8KKwkJbmV0LT5zYXdfbmV3
YWNrID0gMDsKKwkJbmV0LT50aGlzX3NhY2tfaGlnaGVzdF9uZXdhY2sgPSBsYXN0X3RzbjsKKwl9
CisJLyogcHJvY2VzcyB0aGUgbmV3IGNvbnNlY3V0aXZlIFRTTiBmaXJzdCAqLworCVRBSUxRX0ZP
UkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChTQ1RQX1RT
Tl9HRShsYXN0X3RzbiwgdHAxLT5yZWMuZGF0YS50c24pKSB7CisJCQlpZiAodHAxLT5zZW50ICE9
IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7CisJCQkJYWNjdW1fbW92ZWQgPSAxOworCQkJCWlmICh0
cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSB7CisJCQkJCS8qCisJCQkJCSAqIElmIGl0
IGlzIGxlc3MgdGhhbiBBQ0tFRCwgaXQgaXMKKwkJCQkJICogbm93IG5vLWxvbmdlciBpbiBmbGln
aHQuIEhpZ2hlcgorCQkJCQkgKiB2YWx1ZXMgbWF5IG9jY3VyIGR1cmluZyBtYXJraW5nCisJCQkJ
CSAqLworCQkJCQlpZiAoKHRwMS0+d2hvVG8tPmRlc3Rfc3RhdGUgJgorCQkJCQkgICAgIFNDVFBf
QUREUl9VTkNPTkZJUk1FRCkgJiYKKwkJCQkJICAgICh0cDEtPnNuZF9jb3VudCA8IDIpKSB7CisJ
CQkJCQkvKgorCQkJCQkJICogSWYgdGhlcmUgd2FzIG5vIHJldHJhbgorCQkJCQkJICogYW5kIHRo
ZSBhZGRyZXNzIGlzCisJCQkJCQkgKiB1bi1jb25maXJtZWQgYW5kIHdlIHNlbnQKKwkJCQkJCSAq
IHRoZXJlIGFuZCBhcmUgbm93CisJCQkJCQkgKiBzYWNrZWQuLiBpdHMgY29uZmlybWVkLAorCQkJ
CQkJICogbWFyayBpdCBzby4KKwkJCQkJCSAqLworCQkJCQkJdHAxLT53aG9Uby0+ZGVzdF9zdGF0
ZSAmPQorCQkJCQkJCX5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7CisJCQkJCX0KKwkJCQkJaWYgKHRw
MS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsK
KwkJCQkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9DQSwKKwkJCQkJCQkg
ICAgICAgICAgICAgICB0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCQkgICAgICAgICAg
ICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJCQkgICAgICAgICAgICAgICAodWludDMyX3QpKHVp
bnRwdHJfdCl0cDEtPndob1RvLAorCQkJCQkJCSAgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEu
dHNuKTsKKwkJCQkJCX0KKwkJCQkJCXNjdHBfZmxpZ2h0X3NpemVfZGVjcmVhc2UodHAxKTsKKwkJ
CQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIHRwMSk7CisJCQkJCQlpZiAoc3Rj
Yi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV90c25fYWNrbm93bGVkZ2VkKSB7
CisJCQkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX3Rzbl9h
Y2tub3dsZWRnZWQpKHRwMS0+d2hvVG8sCisJCQkJCQkJCQkJCQkJCSAgICAgdHAxKTsKKwkJCQkJ
CX0KKwkJCQkJfQorCQkJCQl0cDEtPndob1RvLT5uZXRfYWNrICs9IHRwMS0+c2VuZF9zaXplOwor
CisJCQkJCS8qIENNVCBTRlIgYW5kIERBQyBhbGdvcyAqLworCQkJCQl0aGlzX3NhY2tfbG93ZXN0
X25ld2FjayA9IHRwMS0+cmVjLmRhdGEudHNuOworCQkJCQl0cDEtPndob1RvLT5zYXdfbmV3YWNr
ID0gMTsKKworCQkJCQlpZiAodHAxLT5zbmRfY291bnQgPCAyKSB7CisJCQkJCQkvKgorCQkJCQkJ
ICogVHJ1ZSBub24tcmV0cmFuc21pdGVkCisJCQkJCQkgKiBjaHVuaworCQkJCQkJICovCisJCQkJ
CQl0cDEtPndob1RvLT5uZXRfYWNrMiArPQorCQkJCQkJCXRwMS0+c2VuZF9zaXplOworCisJCQkJ
CQkvKiB1cGRhdGUgUlRPIHRvbz8gKi8KKwkJCQkJCWlmICh0cDEtPmRvX3J0dCkgeworCQkJCQkJ
CWlmIChydG9fb2spIHsKKwkJCQkJCQkJdHAxLT53aG9Uby0+UlRPID0KKwkJCQkJCQkJCXNjdHBf
Y2FsY3VsYXRlX3J0byhzdGNiLAorCQkJCQkJCQkJCQkgICBhc29jLCB0cDEtPndob1RvLAorCQkJ
CQkJCQkJCQkgICAmdHAxLT5zZW50X3Jjdl90aW1lLAorCQkJCQkJCQkJCQkgICBTQ1RQX1JUVF9G
Uk9NX0RBVEEpOworCQkJCQkJCQlydG9fb2sgPSAwOworCQkJCQkJCX0KKwkJCQkJCQlpZiAodHAx
LT53aG9Uby0+cnRvX25lZWRlZCA9PSAwKSB7CisJCQkJCQkJCXRwMS0+d2hvVG8tPnJ0b19uZWVk
ZWQgPSAxOworCQkJCQkJCX0KKwkJCQkJCQl0cDEtPmRvX3J0dCA9IDA7CisJCQkJCQl9CisJCQkJ
CX0KKwkJCQkJLyoKKwkJCQkJICogQ01UOiBDVUN2MiBhbGdvcml0aG0uIEZyb20gdGhlCisJCQkJ
CSAqIGN1bWFjaydkIFRTTnMsIGZvciBlYWNoIFRTTiBiZWluZworCQkJCQkgKiBhY2tlZCBmb3Ig
dGhlIGZpcnN0IHRpbWUsIHNldCB0aGUKKwkJCQkJICogZm9sbG93aW5nIHZhcmlhYmxlcyBmb3Ig
dGhlCisJCQkJCSAqIGNvcnJlc3AgZGVzdGluYXRpb24uCisJCQkJCSAqIG5ld19wc2V1ZG9fY3Vt
YWNrIHdpbGwgdHJpZ2dlciBhCisJCQkJCSAqIGN3bmQgdXBkYXRlLgorCQkJCQkgKiBmaW5kXyhy
dHhfKXBzZXVkb19jdW1hY2sgd2lsbAorCQkJCQkgKiB0cmlnZ2VyIHNlYXJjaCBmb3IgdGhlIG5l
eHQKKwkJCQkJICogZXhwZWN0ZWQgKHJ0eC0pcHNldWRvLWN1bWFjay4KKwkJCQkJICovCisJCQkJ
CXRwMS0+d2hvVG8tPm5ld19wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+Zmlu
ZF9wc2V1ZG9fY3VtYWNrID0gMTsKKwkJCQkJdHAxLT53aG9Uby0+ZmluZF9ydHhfcHNldWRvX2N1
bWFjayA9IDE7CisKKworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2
ZWwpICYgU0NUUF9TQUNLX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19zYWNrKGFz
b2MtPmxhc3RfYWNrZWRfc2VxLAorCQkJCQkJICAgICAgICAgICAgICBjdW1fYWNrLAorCQkJCQkJ
ICAgICAgICAgICAgICB0cDEtPnJlYy5kYXRhLnRzbiwKKwkJCQkJCSAgICAgICAgICAgICAgMCwK
KwkJCQkJCSAgICAgICAgICAgICAgMCwKKwkJCQkJCSAgICAgICAgICAgICAgU0NUUF9MT0dfVFNO
X0FDS0VEKTsKKwkJCQkJfQorCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIHRwMS0+d2hvVG8sIHRwMS0+cmVjLmRhdGEudHNuLCBTQ1RQX0NXTkRfTE9HX0ZST01f
U0FDSyk7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKHRwMS0+c2VudCA9PSBTQ1RQX0RBVEFHUkFN
X1JFU0VORCkgeworCQkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFu
X2NudCk7CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCQkJCXNjdHBfYXVkaXRfbG9n
KDB4QjMsCisJCQkJCSAgICAgICAgICAgICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQg
JiAweDAwMDAwMGZmKSk7CisjZW5kaWYKKwkJCQl9CisJCQkJaWYgKHRwMS0+cmVjLmRhdGEuY2h1
bmtfd2FzX3Jldm9rZWQpIHsKKwkJCQkJLyogZGVmbGF0ZSB0aGUgY3duZCAqLworCQkJCQl0cDEt
Pndob1RvLT5jd25kIC09IHRwMS0+Ym9va19zaXplOworCQkJCQl0cDEtPnJlYy5kYXRhLmNodW5r
X3dhc19yZXZva2VkID0gMDsKKwkJCQl9CisJCQkJaWYgKHRwMS0+c2VudCAhPSBTQ1RQX0RBVEFH
UkFNX05SX0FDS0VEKSB7CisJCQkJCXRwMS0+c2VudCA9IFNDVFBfREFUQUdSQU1fQUNLRUQ7CisJ
CQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJYnJlYWs7CisJCX0KKwl9CisJYmlnZ2VzdF90c25f
bmV3bHlfYWNrZWQgPSBiaWdnZXN0X3Rzbl9hY2tlZCA9IGxhc3RfdHNuOworCS8qIGFsd2F5cyBz
ZXQgdGhpcyB1cCB0byBjdW0tYWNrICovCisJYXNvYy0+dGhpc19zYWNrX2hpZ2hlc3RfZ2FwID0g
bGFzdF90c247CisKKwlpZiAoKG51bV9zZWcgPiAwKSB8fCAobnVtX25yX3NlZyA+IDApKSB7CisK
KwkJLyoKKwkJICogdGhpc1NhY2tIaWdoZXN0R2FwIHdpbGwgaW5jcmVhc2Ugd2hpbGUgaGFuZGxp
bmcgTkVXCisJCSAqIHNlZ21lbnRzIHRoaXNfc2Fja19oaWdoZXN0X25ld2FjayB3aWxsIGluY3Jl
YXNlIHdoaWxlCisJCSAqIGhhbmRsaW5nIE5FV0xZIEFDS0VEIGNodW5rcy4gdGhpc19zYWNrX2xv
d2VzdF9uZXdhY2sgaXMKKwkJICogdXNlZCBmb3IgQ01UIERBQyBhbGdvLiBzYXdfbmV3YWNrIHdp
bGwgYWxzbyBjaGFuZ2UuCisJCSAqLworCQlpZiAoc2N0cF9oYW5kbGVfc2VnbWVudHMobSwgJm9m
ZnNldF9zZWcsIHN0Y2IsIGFzb2MsIGxhc3RfdHNuLCAmYmlnZ2VzdF90c25fYWNrZWQsCisJCQkm
YmlnZ2VzdF90c25fbmV3bHlfYWNrZWQsICZ0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywKKwkJCW51
bV9zZWcsIG51bV9ucl9zZWcsICZydG9fb2spKSB7CisJCQl3YWtlX2hpbSsrOworCQl9CisJCS8q
CisJCSAqIHZhbGlkYXRlIHRoZSBiaWdnZXN0X3Rzbl9hY2tlZCBpbiB0aGUgZ2FwIGFja3MgaWYK
KwkJICogc3RyaWN0IGFkaGVyZW5jZSBpcyB3YW50ZWQuCisJCSAqLworCQlpZiAoU0NUUF9UU05f
R0UoYmlnZ2VzdF90c25fYWNrZWQsIHNlbmRfcykpIHsKKwkJCS8qCisJCQkgKiBwZWVyIGlzIGVp
dGhlciBjb25mdXNlZCBvciB3ZSBhcmUgdW5kZXIKKwkJCSAqIGF0dGFjay4gV2UgbXVzdCBhYm9y
dC4KKwkJCSAqLworCQkJU0NUUF9QUklOVEYoIkhvcGVsZXNzIHBlZXIhIGJpZ2dlc3RfdHNuX2Fj
a2VkOiV4IGxhcmdlc3Qgc2VxOiV4XG4iLAorCQkJCSAgICBiaWdnZXN0X3Rzbl9hY2tlZCwgc2Vu
ZF9zKTsKKwkJCWdvdG8gaG9wZWxlc3NfcGVlcjsKKwkJfQorCX0KKwkvKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiBjYW5jZWwgQUxMIFQzLXNlbmQgdGlt
ZXIgaWYgYWNjdW0gbW92ZWQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KKwlpZiAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgeworCQlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJaWYgKG5ldC0+bmV3X3Bz
ZXVkb19jdW1hY2spCisJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBz
dGNiLT5zY3RwX2VwLAorCQkJCSAgICAgICAgICAgICAgICBzdGNiLCBuZXQsCisJCQkJICAgICAg
ICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOREFUQSArIFNDVFBfTE9DXzI3KTsKKworCQl9CisJ
fSBlbHNlIHsKKwkJaWYgKGFjY3VtX21vdmVkKSB7CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJmFz
b2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZ
UEVfU0VORCwgc3RjYi0+c2N0cF9lcCwKKwkJCQkgICAgICAgICAgICAgICAgc3RjYiwgbmV0LCBT
Q1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xPQ18yOCk7CisJCQl9CisJCX0KKwl9CisJLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCS8qIGRyb3AgdGhl
IGFja2VkIGNodW5rcyBmcm9tIHRoZSBzZW50cXVldWUgKi8KKwkvKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisJYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBjdW1f
YWNrOworCisJVEFJTFFfRk9SRUFDSF9TQUZFKHRwMSwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBf
bmV4dCwgdHAyKSB7CisJCWlmIChTQ1RQX1RTTl9HVCh0cDEtPnJlYy5kYXRhLnRzbiwgY3VtX2Fj
aykpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9O
Ul9BQ0tFRCkgeworCQkJaWYgKGFzb2MtPnN0cm1vdXRbdHAxLT5yZWMuZGF0YS5zaWRdLmNodW5r
c19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJYXNvYy0+c3RybW91dFt0cDEtPnJlYy5kYXRhLnNpZF0u
Y2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCX0gZWxzZSB7CisJCQkJ
cGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQgJXUuIiwgdHAxLT5yZWMuZGF0
YS5zaWQpOworI2VuZGlmCisJCQl9CisJCX0KKwkJaWYgKChhc29jLT5zdHJtb3V0W3RwMS0+cmVj
LmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCSAgICAoYXNvYy0+c3RybW91
dFt0cDEtPnJlYy5kYXRhLnNpZF0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORykg
JiYKKwkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zdHJtb3V0W3RwMS0+cmVjLmRhdGEuc2lkXS5v
dXRxdWV1ZSkpIHsKKwkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAxOworCQl9CisJCVRBSUxRX1JF
TU9WRSgmYXNvYy0+c2VudF9xdWV1ZSwgdHAxLCBzY3RwX25leHQpOworCQlpZiAoUFJfU0NUUF9F
TkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQlpZiAoYXNvYy0+cHJfc2N0cF9jbnQgIT0gMCkKKwkJ
CQlhc29jLT5wcl9zY3RwX2NudC0tOworCQl9CisJCWFzb2MtPnNlbnRfcXVldWVfY250LS07CisJ
CWlmICh0cDEtPmRhdGEpIHsKKwkJCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCQkJc2N0
cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFzb2MsIHRwMSwgMSk7CisJCQlzY3RwX21fZnJlZW0odHAx
LT5kYXRhKTsKKwkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQlpZiAoYXNvYy0+cHJzY3RwX3N1cHBv
cnRlZCAmJiBQUl9TQ1RQX0JVRl9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQkJYXNvYy0+c2Vu
dF9xdWV1ZV9jbnRfcmVtb3ZlYWJsZS0tOworCQkJfQorCQl9CisJCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NBQ0tfTE9HR0lOR19FTkFCTEUpIHsKKwkJ
CXNjdHBfbG9nX3NhY2soYXNvYy0+bGFzdF9hY2tlZF9zZXEsCisJCQkgICAgICAgICAgICAgIGN1
bV9hY2ssCisJCQkgICAgICAgICAgICAgIHRwMS0+cmVjLmRhdGEudHNuLAorCQkJICAgICAgICAg
ICAgICAwLAorCQkJICAgICAgICAgICAgICAwLAorCQkJICAgICAgICAgICAgICBTQ1RQX0xPR19G
UkVFX1NFTlQpOworCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIHRwMSwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwkJd2FrZV9oaW0rKzsKKwl9CisJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5z
ZW50X3F1ZXVlKSAmJiAoYXNvYy0+dG90YWxfZmxpZ2h0ID4gMCkpIHsKKyNpZmRlZiBJTlZBUklB
TlRTCisJCXBhbmljKCJXYXJuaW5nIGZsaWdodCBzaXplIGlzIHBvc2l0aXZlIGFuZCBzaG91bGQg
YmUgMCIpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoIldhcm5pbmcgZmxpZ2h0IHNpemUgaW5jb3Jy
ZWN0IHNob3VsZCBiZSAwIGlzICVkXG4iLAorCQkgICAgICAgICAgICBhc29jLT50b3RhbF9mbGln
aHQpOworI2VuZGlmCisJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJfQorCisjaWYgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorCWlmIChzdGNiLT5zY3RwX2VwLT5yZWN2X2NhbGxiYWNrKSB7CisJ
CWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQkJdWludDMyX3QgaW5xdWV1ZV9ieXRlcywgc2Jf
ZnJlZV9ub3c7CisJCQlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJCQlpbnAgPSBzdGNiLT5z
Y3RwX2VwOworCQkJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1ZXVl
X3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogc2l6ZW9mKHN0cnVjdCBz
Y3RwX2RhdGFfY2h1bmspKTsKKwkJCXNiX2ZyZWVfbm93ID0gU0NUUF9TQl9MSU1JVF9TTkQoc3Rj
Yi0+c2N0cF9zb2NrZXQpIC0gKGlucXVldWVfYnl0ZXMgKyBzdGNiLT5hc29jLnNiX3NlbmRfcmVz
dik7CisKKwkJCS8qIGNoZWNrIGlmIHRoZSBhbW91bnQgZnJlZSBpbiB0aGUgc2VuZCBzb2NrZXQg
YnVmZmVyIGNyb3NzZWQgdGhlIHRocmVzaG9sZCAqLworCQkJaWYgKGlucC0+c2VuZF9jYWxsYmFj
ayAmJgorCQkJICAgKCgoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA+IDApICYmIChzYl9mcmVlX25v
dyA+PSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkKSkgfHwKKwkJCSAgICAoaW5wLT5zZW5kX3NiX3Ro
cmVzaG9sZCA9PSAwKSkpIHsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQs
IDEpOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlpbnAtPnNlbmRfY2FsbGJhY2so
c3RjYi0+c2N0cF9zb2NrZXQsIHNiX2ZyZWVfbm93KTsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCX0K
KwkJfQorCX0gZWxzZSBpZiAoKHdha2VfaGltKSAmJiAoc3RjYi0+c2N0cF9zb2NrZXQpKSB7Cisj
ZWxzZQorCS8qIHNhX2lnbm9yZSBOT19OVUxMX0NISyAqLworCWlmICgod2FrZV9oaW0pICYmIChz
dGNiLT5zY3RwX3NvY2tldCkpIHsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworI2Vu
ZGlmCisJCVNPQ0tCVUZfTE9DSygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZCk7CisJCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1dBS0VfTE9HR0lOR19F
TkFCTEUpIHsKKwkJCXNjdHBfd2FrZXVwX2xvZyhzdGNiLCB3YWtlX2hpbSwgU0NUUF9XQUtFU05E
X0ZST01fU0FDSyk7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAo
c3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNz
b2Mgd2FzIGZyZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvd3dha2V1cF9s
b2NrZWQoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9V
TkxPQ0soc28sIDEpOworI2VuZGlmCisJfSBlbHNlIHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfV0FLRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0
cF93YWtldXBfbG9nKHN0Y2IsIHdha2VfaGltLCBTQ1RQX05PV0FLRV9GUk9NX1NBQ0spOworCQl9
CisJfQorCisJaWYgKGFzb2MtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgJiYgYWNjdW1fbW92
ZWQpIHsKKwkJaWYgKFNDVFBfVFNOX0dFKGFzb2MtPmxhc3RfYWNrZWRfc2VxLCBhc29jLT5mYXN0
X3JlY292ZXJ5X3RzbikpIHsKKwkJCS8qIFNldHVwIHNvIHdlIHdpbGwgZXhpdCBSRkMyNTgyIGZh
c3QgcmVjb3ZlcnkgKi8KKwkJCXdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5ID0gMTsKKwkJfQorCX0K
KwkvKgorCSAqIENoZWNrIGZvciByZXZva2VkIGZyYWdtZW50czoKKwkgKgorCSAqIGlmIFByZXZp
b3VzIHNhY2sgLSBIYWQgbm8gZnJhZ3MgdGhlbiB3ZSBjYW4ndCBoYXZlIGFueSByZXZva2VkIGlm
CisJICogUHJldmlvdXMgc2FjayAtIEhhZCBmcmFnJ3MgdGhlbiAtIElmIHdlIG5vdyBoYXZlIGZy
YWdzIGFrYQorCSAqIG51bV9zZWcgPiAwIGNhbGwgc2N0cF9jaGVja19mb3JfcmV2b2tlZCgpIHRv
IHRlbGwgaWYgcGVlciByZXZva2VkCisJICogc29tZSBvZiB0aGVtLiBlbHNlIC0gVGhlIHBlZXIg
cmV2b2tlZCBhbGwgQUNLRUQgZnJhZ21lbnRzLCBzaW5jZQorCSAqIHdlIGhhZCBzb21lIGJlZm9y
ZSBhbmQgbm93IHdlIGhhdmUgTk9ORS4KKwkgKi8KKworCWlmIChudW1fc2VnKSB7CisJCXNjdHBf
Y2hlY2tfZm9yX3Jldm9rZWQoc3RjYiwgYXNvYywgY3VtX2FjaywgYmlnZ2VzdF90c25fYWNrZWQp
OworCQlhc29jLT5zYXdfc2Fja193aXRoX2ZyYWdzID0gMTsKKwl9IGVsc2UgaWYgKGFzb2MtPnNh
d19zYWNrX3dpdGhfZnJhZ3MpIHsKKwkJaW50IGNudF9yZXZva2VkID0gMDsKKworCQkvKiBQZWVy
IHJldm9rZWQgYWxsIGRnJ3MgbWFya2VkIG9yIGFja2VkICovCisJCVRBSUxRX0ZPUkVBQ0godHAx
LCAmYXNvYy0+c2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAodHAxLT5zZW50ID09IFND
VFBfREFUQUdSQU1fQUNLRUQpIHsKKwkJCQl0cDEtPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7
CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJ
R0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRkxJR0hUX0xP
R19VUF9SRVZPS0UsCisJCQkJCSAgICAgICAgICAgICAgIHRwMS0+d2hvVG8tPmZsaWdodF9zaXpl
LAorCQkJCQkgICAgICAgICAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCQkJICAgICAgICAgICAg
ICAgKHVpbnQzMl90KSh1aW50cHRyX3QpdHAxLT53aG9UbywKKwkJCQkJICAgICAgICAgICAgICAg
dHAxLT5yZWMuZGF0YS50c24pOworCQkJCX0KKwkJCQlzY3RwX2ZsaWdodF9zaXplX2luY3JlYXNl
KHRwMSk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl0
cDEtPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMTsKKwkJCQkvKgorCQkJCSAqIFRvIGVu
c3VyZSB0aGF0IHRoaXMgaW5jcmVhc2UgaW4KKwkJCQkgKiBmbGlnaHRzaXplLCB3aGljaCBpcyBh
cnRpZmljaWFsLAorCQkJCSAqIGRvZXMgbm90IHRocm90dGxlIHRoZSBzZW5kZXIsIHdlCisJCQkJ
ICogYWxzbyBpbmNyZWFzZSB0aGUgY3duZAorCQkJCSAqIGFydGlmaWNpYWxseS4KKwkJCQkgKi8K
KwkJCQl0cDEtPndob1RvLT5jd25kICs9IHRwMS0+Ym9va19zaXplOworCQkJCWNudF9yZXZva2Vk
Kys7CisJCQl9CisJCX0KKwkJaWYgKGNudF9yZXZva2VkKSB7CisJCQlyZW5lZ2VkX2FsbCA9IDE7
CisJCX0KKwkJYXNvYy0+c2F3X3NhY2tfd2l0aF9mcmFncyA9IDA7CisJfQorCWlmIChudW1fbnJf
c2VnID4gMCkKKwkJYXNvYy0+c2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9IDE7CisJZWxzZQorCQlh
c29jLT5zYXdfc2Fja193aXRoX25yX2ZyYWdzID0gMDsKKworCS8qIEpSUyAtIFVzZSB0aGUgY29u
Z2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBDQyBtb2R1bGUgKi8KKwlpZiAoZWNuZV9zZWVu
ID09IDApIHsKKwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsK
KwkJCWlmIChuZXQtPm5ldF9hY2syID4gMCkgeworCQkJCS8qCisJCQkJICogS2FybidzIHJ1bGUg
YXBwbGllcyB0byBjbGVhcmluZyBlcnJvciBjb3VudCwgdGhpcworCQkJCSAqIGlzIG9wdGlvbmFs
LgorCQkJCSAqLworCQkJCW5ldC0+ZXJyb3JfY291bnQgPSAwOworCQkJCWlmICghKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7CisJCQkJCS8qIGFkZHIgY2FtZSBnb29k
ICovCisJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLAorCQkJCQkgICAg
ICAgICAgICAgICAgMCwgKHZvaWQgKiluZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQor
CisJCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkJ
aWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCQkvKiByZWxlYXNlIHRoZSBhbHRlcm5h
dGUsIHByaW1hcnkgaXMgZ29vZCAqLworCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2It
PmFzb2MuYWx0ZXJuYXRlKTsKKwkJCQkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJ
CQkJfQorCQkJCX0KKworCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsK
KwkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7CisJCQkJCXNjdHBfdGltZXJf
c3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULAorCQkJCQkgICAgICAgICAgICAgICAgc3Rj
Yi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfSU5EQVRBICsgU0NUUF9MT0NfMjkpOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCWFzb2Mt
PmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2V4aXRfcGYoc3RjYiwgbmV0KTsKKwkJCQkJ
LyogRG9uZSB3aXRoIHRoaXMgbmV0ICovCisJCQkJCW5ldC0+bmV0X2FjayA9IDA7CisJCQkJfQor
CQkJCS8qIHJlc3RvcmUgYW55IGRvdWJsZWQgdGltZXJzICovCisJCQkJbmV0LT5SVE8gPSAobmV0
LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5sYXN0c3Y7CisJCQkJaWYgKG5ldC0+
UlRPIDwgc3RjYi0+YXNvYy5taW5ydG8pIHsKKwkJCQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1p
bnJ0bzsKKwkJCQl9CisJCQkJaWYgKG5ldC0+UlRPID4gc3RjYi0+YXNvYy5tYXhydG8pIHsKKwkJ
CQkJbmV0LT5SVE8gPSBzdGNiLT5hc29jLm1heHJ0bzsKKwkJCQl9CisJCQl9CisJCX0KKwkJYXNv
Yy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfc2FjayhzdGNiLCBhc29jLCBh
Y2N1bV9tb3ZlZCwgcmVuZWdlZF9hbGwsIHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5KTsKKwl9CisK
KwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpKSB7CisJCS8qIG5vdGhpbmcgbGVm
dCBpbi1mbGlnaHQgKi8KKwkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25l
eHQpIHsKKwkJCS8qIHN0b3AgYWxsIHRpbWVycyAqLworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAorCQkJICAgICAgICAgICAgICAgIHN0Y2Is
IG5ldCwKKwkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTkRBVEEgKyBTQ1RQX0xP
Q18zMCk7CisJCQluZXQtPmZsaWdodF9zaXplID0gMDsKKwkJCW5ldC0+cGFydGlhbF9ieXRlc19h
Y2tlZCA9IDA7CisJCX0KKwkJYXNvYy0+dG90YWxfZmxpZ2h0ID0gMDsKKwkJYXNvYy0+dG90YWxf
ZmxpZ2h0X2NvdW50ID0gMDsKKwl9CisKKwkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KKwkvKiBOb3cgd2hhdCBhYm91dCBzaHV0ZG93biBpc3N1ZXMgKi8KKwkvKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRf
cXVldWUpICYmIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgeworCQkvKiBub3RoaW5n
IGxlZnQgb24gc2VuZHF1ZXVlLi4gY29uc2lkZXIgZG9uZSAqLworCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCXNj
dHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJCSAgICAgICAg
ICAgICAgICAgIGFzb2MtPnBlZXJzX3J3bmQsIDAsIDAsIGFfcnduZCk7CisJCX0KKwkJYXNvYy0+
cGVlcnNfcnduZCA9IGFfcnduZDsKKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNiLT5zY3Rw
X2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkJLyogU1dTIHNlbmRlciBzaWRlIGVu
Z2FnZXMgKi8KKwkJCWFzb2MtPnBlZXJzX3J3bmQgPSAwOworCQl9CisJCS8qIGNsZWFuIHVwICov
CisJCWlmICgoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAxKSAmJgorCQkgICAgKChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJICAgICAoYXNvYy0+c3Rh
dGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgJiYKKwkJICAgICgoKmFzb2MtPnNz
X2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkp
IHsKKwkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKKwkJfQor
CQlpZiAoKChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgfHwKKwkJ
ICAgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlW
RUQpKSAmJgorCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMSkgJiYKKwkJICAgIChh
c29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCXN0cnVjdCBt
YnVmICpvcF9lcnI7CisKKwkJCSphYm9ydF9ub3cgPSAxOworCQkJLyogWFhYICovCisJCQlvcF9l
cnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAi
Iik7CisJCQlzdGNiLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9J
TkRBVEEgKyBTQ1RQX0xPQ18yNDsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oc3RjYi0+
c2N0cF9lcCwgc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJcmV0dXJuOwor
CQl9CisJCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpICYm
CisJCSAgICAoYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJc3RydWN0IHNjdHBf
bmV0cyAqbmV0cDsKKworCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRF
X09QRU4pIHx8CisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fUkVDRUlWRUQpKSB7CisJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJy
ZXN0YWIpOworCQkJfQorCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9X
Tl9TRU5UKTsKKwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9X
Tl9QRU5ESU5HKTsKKwkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJ
aWYgKGFzb2MtPmFsdGVybmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9
IGVsc2UgeworCQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJ
c2N0cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldHApOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV04sCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsK
KwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJ
CSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmICgo
U0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYK
KwkJCSAgIChhc29jLT5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXRwOworCisJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7
CisJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsK
KwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5H
KTsKKwkJCXNjdHBfc3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJaWYgKGFzb2Mt
PmFsdGVybmF0ZSkgeworCQkJCW5ldHAgPSBhc29jLT5hbHRlcm5hdGU7CisJCQl9IGVsc2Ugewor
CQkJCW5ldHAgPSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJfQorCQkJc2N0cF9zZW5k
X3NodXRkb3duX2FjayhzdGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOQUNLLAorCQkJICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBz
dGNiLCBuZXRwKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKgorCSAqIE5vdyBoZXJlIHdlIGFy
ZSBnb2luZyB0byByZWN5Y2xlIG5ldF9hY2sgZm9yIGEgZGlmZmVyZW50IHVzZS4uLgorCSAqIEhF
QURTIFVQLgorCSAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0
KSB7CisJCW5ldC0+bmV0X2FjayA9IDA7CisJfQorCisJLyoKKwkgKiBDTVQgREFDIGFsZ29yaXRo
bTogSWYgU0FDSyBEQUMgZmxhZyB3YXMgMCwgdGhlbiBubyBleHRyYSBtYXJraW5nCisJICogdG8g
YmUgZG9uZS4gU2V0dGluZyB0aGlzX3NhY2tfbG93ZXN0X25ld2FjayB0byB0aGUgY3VtX2FjayB3
aWxsCisJICogYXV0b21hdGljYWxseSBlbnN1cmUgdGhhdC4KKwkgKi8KKwlpZiAoKGFzb2MtPnNj
dHBfY210X29uX29mZiA+IDApICYmCisJICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNl
X2RhYykgJiYKKwkgICAgKGNtdF9kYWNfZmxhZyA9PSAwKSkgeworCQl0aGlzX3NhY2tfbG93ZXN0
X25ld2FjayA9IGN1bV9hY2s7CisJfQorCWlmICgobnVtX3NlZyA+IDApIHx8IChudW1fbnJfc2Vn
ID4gMCkpIHsKKwkJc2N0cF9zdHJpa2VfZ2FwX2Fja19jaHVua3Moc3RjYiwgYXNvYywgYmlnZ2Vz
dF90c25fYWNrZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpZ2dlc3RfdHNuX25l
d2x5X2Fja2VkLCB0aGlzX3NhY2tfbG93ZXN0X25ld2FjaywgYWNjdW1fbW92ZWQpOworCX0KKwkv
KiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29udHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9kdWxl
ICovCisJYXNvYy0+Y2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfZnIoc3RjYiwg
YXNvYyk7CisKKwkvKiBOb3cgYXJlIHdlIGV4aXRpbmcgbG9zcyByZWNvdmVyeSA/ICovCisJaWYg
KHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5KSB7CisJCS8qIE9rLCB3ZSBtdXN0IGV4aXQgZmFzdCBy
ZWNvdmVyeSAqLworCQlhc29jLT5mYXN0X3JldHJhbl9sb3NzX3JlY292ZXJ5ID0gMDsKKwl9CisJ
aWYgKChhc29jLT5zYXRfdDNfbG9zc19yZWNvdmVyeSkgJiYKKwkgICAgU0NUUF9UU05fR0UoYXNv
Yy0+bGFzdF9hY2tlZF9zZXEsIGFzb2MtPnNhdF90M19yZWNvdmVyeV90c24pKSB7CisJCS8qIGVu
ZCBzYXRlbGxpdGUgdDMgbG9zcyByZWNvdmVyeSAqLworCQlhc29jLT5zYXRfdDNfbG9zc19yZWNv
dmVyeSA9IDA7CisJfQorCS8qCisJICogQ01UIEZhc3QgcmVjb3ZlcnkKKwkgKi8KKwlUQUlMUV9G
T1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAobmV0LT53aWxsX2V4
aXRfZmFzdF9yZWNvdmVyeSkgeworCQkJLyogT2ssIHdlIG11c3QgZXhpdCBmYXN0IHJlY292ZXJ5
ICovCisJCQluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCQl9CisJfQorCisJ
LyogQWRqdXN0IGFuZCBzZXQgdGhlIG5ldyByd25kIHZhbHVlICovCisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7CisJCXNj
dHBfbG9nX3J3bmRfc2V0KFNDVFBfU0VUX1BFRVJfUldORF9WSUFfU0FDSywKKwkJICAgICAgICAg
ICAgICAgICAgYXNvYy0+cGVlcnNfcnduZCwgYXNvYy0+dG90YWxfZmxpZ2h0LCAoYXNvYy0+dG90
YWxfZmxpZ2h0X2NvdW50ICogU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BlZXJfY2h1bmtfb2gpKSwg
YV9yd25kKTsKKwl9CisJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFjZV9zdWIoYV9yd25k
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50MzJfdCkgKGFzb2Mt
PnRvdGFsX2ZsaWdodCArIChhc29jLT50b3RhbF9mbGlnaHRfY291bnQgKiBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcGVlcl9jaHVua19vaCkpKSk7CisJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBzdGNi
LT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgeworCQkvKiBTV1Mgc2VuZGVyIHNp
ZGUgZW5nYWdlcyAqLworCQlhc29jLT5wZWVyc19yd25kID0gMDsKKwl9CisJaWYgKGFzb2MtPnBl
ZXJzX3J3bmQgPiBvbGRfcnduZCkgeworCQl3aW5fcHJvYmVfcmVjb3ZlcnkgPSAxOworCX0KKwor
CS8qCisJICogTm93IHdlIG11c3Qgc2V0dXAgc28gd2UgaGF2ZSBhIHRpbWVyIHVwIGZvciBhbnlv
bmUgd2l0aAorCSAqIG91dHN0YW5kaW5nIGRhdGEuCisJICovCisJZG9uZV9vbmNlID0gMDsKK2Fn
YWluOgorCWogPSAwOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0
KSB7CisJCWlmICh3aW5fcHJvYmVfcmVjb3ZlcnkgJiYgKG5ldC0+d2luZG93X3Byb2JlKSkgewor
CQkJd2luX3Byb2JlX3JlY292ZXJlZCA9IDE7CisJCQkvKi0KKwkJCSAqIEZpbmQgZmlyc3QgY2h1
bmsgdGhhdCB3YXMgdXNlZCB3aXRoCisJCQkgKiB3aW5kb3cgcHJvYmUgYW5kIGNsZWFyIHRoZSBl
dmVudC4gUHV0CisJCQkgKiBpdCBiYWNrIGludG8gdGhlIHNlbmQgcXVldWUgYXMgaWYgaGFzCisJ
CQkgKiBub3QgYmVlbiBzZW50LgorCQkJICovCisJCQlUQUlMUV9GT1JFQUNIKHRwMSwgJmFzb2Mt
PnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPndpbmRvd19wcm9iZSkgewor
CQkJCQlzY3RwX3dpbmRvd19wcm9iZV9yZWNvdmVyeShzdGNiLCBhc29jLCB0cDEpOworCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKG5ldC0+ZmxpZ2h0X3NpemUpIHsKKwkJCWor
KzsKKwkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikp
IHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCSAgICAg
ICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChuZXQt
PndpbmRvd19wcm9iZSkgeworCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJCX0KKwkJfSBl
bHNlIHsKKwkJCWlmIChuZXQtPndpbmRvd19wcm9iZSkgeworCQkJCS8qIEluIHdpbmRvdyBwcm9i
ZXMgd2UgbXVzdCBhc3N1cmUgYSB0aW1lciBpcyBzdGlsbCBydW5uaW5nIHRoZXJlICovCisJCQkJ
aWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5ldC0+cnh0X3RpbWVyLnRpbWVyKSkgeworCQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELAorCQkJCQkgICAgICAgICAg
ICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisKKwkJCQl9CisJCQl9IGVsc2UgaWYg
KFNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7CisJCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLAorCQkJCSAg
ICAgICAgICAgICAgICBzdGNiLCBuZXQsCisJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9T
Q1RQX0lOREFUQSArIFNDVFBfTE9DXzMyKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoKGogPT0gMCkg
JiYKKwkgICAgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpICYmCisJICAgIChhc29j
LT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYKKwkgICAgKHdpbl9wcm9iZV9yZWNvdmVy
ZWQgPT0gMCkgJiYKKwkgICAgKGRvbmVfb25jZSA9PSAwKSkgeworCQkvKiBodWgsIHRoaXMgc2hv
dWxkIG5vdCBoYXBwZW4gdW5sZXNzIGFsbCBwYWNrZXRzCisJCSAqIGFyZSBQUi1TQ1RQIGFuZCBt
YXJrZWQgdG8gc2tpcCBvZiBjb3Vyc2UuCisJCSAqLworCQlpZiAoc2N0cF9mc19hdWRpdChhc29j
KSkgeworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJ
CQluZXQtPmZsaWdodF9zaXplID0gMDsKKwkJCX0KKwkJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7
CisJCQlhc29jLT50b3RhbF9mbGlnaHRfY291bnQgPSAwOworCQkJYXNvYy0+c2VudF9xdWV1ZV9y
ZXRyYW5fY250ID0gMDsKKwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmYXNvYy0+c2VudF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCQkJaWYgKHRwMS0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7
CisJCQkJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UodHAxKTsKKwkJCQkJc2N0cF90b3RhbF9m
bGlnaHRfaW5jcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCQl9IGVsc2UgaWYgKHRwMS0+c2VudCA9PSBT
Q1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJCQlzY3RwX3Vjb3VudF9pbmNyKGFzb2MtPnNlbnRf
cXVldWVfcmV0cmFuX2NudCk7CisJCQkJfQorCQkJfQorCQl9CisJCWRvbmVfb25jZSA9IDE7CisJ
CWdvdG8gYWdhaW47CisJfQorCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKiovCisJLyogSGVyZSB3ZSBwZXJmb3JtIFBSLVNDVFAgcHJvY2VkdXJlcyAgICAgICAg
Ki8KKwkvKiAoc2VjdGlvbiA0LjIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCS8q
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJLyogQzEuIHVw
ZGF0ZSBhZHZhbmNlZFBlZXJBY2tQb2ludCAqLworCWlmIChTQ1RQX1RTTl9HVChjdW1fYWNrLCBh
c29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCkpIHsKKwkJYXNvYy0+YWR2YW5jZWRfcGVlcl9h
Y2tfcG9pbnQgPSBjdW1fYWNrOworCX0KKwkvKiBDMi4gdHJ5IHRvIGZ1cnRoZXIgbW92ZSBhZHZh
bmNlZFBlZXJBY2tQb2ludCBhaGVhZCAqLworCWlmICgoYXNvYy0+cHJzY3RwX3N1cHBvcnRlZCkg
JiYgKGFzb2MtPnByX3NjdHBfY250ID4gMCkpIHsKKwkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
bGNoazsKKwkJdWludDMyX3Qgb2xkX2Fkdl9wZWVyX2Fja19wb2ludDsKKworCQlvbGRfYWR2X3Bl
ZXJfYWNrX3BvaW50ID0gYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQ7CisJCWxjaGsgPSBz
Y3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsIGFzb2MpOworCQkvKiBDMy4gU2Vl
IGlmIHdlIG5lZWQgdG8gc2VuZCBhIEZ3ZC1UU04gKi8KKwkJaWYgKFNDVFBfVFNOX0dUKGFzb2Mt
PmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBjdW1fYWNrKSkgeworCQkJLyoKKwkJCSAqIElTU1VF
IHdpdGggRUNOLCBzZWUgRldELVRTTiBwcm9jZXNzaW5nLgorCQkJICovCisJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FEVkFOQ0UpIHsK
KwkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZXRF9UU05fQ0hFQ0ssCisJCQkJICAgICAgICAgICAg
ICAgMHhlZSwgY3VtX2FjaywgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsCisJCQkJICAg
ICAgICAgICAgICAgb2xkX2Fkdl9wZWVyX2Fja19wb2ludCk7CisJCQl9CisJCQlpZiAoU0NUUF9U
U05fR1QoYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQsIG9sZF9hZHZfcGVlcl9hY2tfcG9p
bnQpKSB7CisJCQkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCBhc29jKTsKKwkJCX0gZWxzZSBpZiAo
bGNoaykgeworCQkJCS8qIHRyeSB0byBGUiBmd2QtdHNuJ3MgdGhhdCBnZXQgbG9zdCB0b28gKi8K
KwkJCQlpZiAobGNoay0+cmVjLmRhdGEuZndkX3Rzbl9jbnQgPj0gMykgeworCQkJCQlzZW5kX2Zv
cndhcmRfdHNuKHN0Y2IsIGFzb2MpOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAobGNoaykgewor
CQkJLyogQXNzdXJlIGEgdGltZXIgaXMgdXAgKi8KKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9U
SU1FUl9UWVBFX1NFTkQsCisJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IGxjaGstPndob1RvKTsKKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQUNLX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9taXNj
X2ludHMoU0NUUF9TQUNLX1JXTkRfVVBEQVRFLAorCQkgICAgICAgICAgICAgICBhX3J3bmQsCisJ
CSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJICAgICAgICAgICAgICAg
c3RjYi0+YXNvYy50b3RhbF9mbGlnaHQsCisJCSAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MudG90
YWxfb3V0cHV0X3F1ZXVlX3NpemUpOworCX0KK30KKwordm9pZAorc2N0cF91cGRhdGVfYWNrZWQo
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuayAqY3AsIGlu
dCAqYWJvcnRfZmxhZykKK3sKKwkvKiBDb3B5IGN1bS1hY2sgKi8KKwl1aW50MzJfdCBjdW1fYWNr
LCBhX3J3bmQ7CisKKwljdW1fYWNrID0gbnRvaGwoY3AtPmN1bXVsYXRpdmVfdHNuX2Fjayk7CisJ
LyogQXJyYW5nZSBzbyBhX3J3bmQgZG9lcyBOT1QgY2hhbmdlICovCisJYV9yd25kID0gc3RjYi0+
YXNvYy5wZWVyc19yd25kICsgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisKKwkvKiBOb3cgY2Fs
bCB0aGUgZXhwcmVzcyBzYWNrIGhhbmRsaW5nICovCisJc2N0cF9leHByZXNzX2hhbmRsZV9zYWNr
KHN0Y2IsIGN1bV9hY2ssIGFfcnduZCwgYWJvcnRfZmxhZywgMCk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2tpY2tfcHJzY3RwX3Jlb3JkZXJfcXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAor
CQkJICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybWluKQoreworCXN0cnVjdCBzY3Rw
X3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7CisJc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2M7CisJdWludDMyX3QgbWlkOworCWludCBuZWVkX3JlYXNtX2NoZWNrID0gMDsK
KworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJl
ZDsKKwkvKgorCSAqIEZpcnN0IGRlbGl2ZXIgYW55dGhpbmcgcHJpb3IgdG8gYW5kIGluY2x1ZGlu
ZyB0aGUgc3RyZWFtIG5vIHRoYXQKKwkgKiBjYW1lIGluLgorCSAqLworCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjb250cm9sLCAmc3RybWluLT5pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsK
KwkJaWYgKFNDVFBfTUlEX0dFKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCwgbWlkLCBjb250cm9sLT5t
aWQpKSB7CisJCQkvKiB0aGlzIGlzIGRlbGl2ZXJhYmxlIG5vdyAqLworCQkJaWYgKCgoY29udHJv
bC0+c2luZm9fZmxhZ3MgPj4gOCkgJiBTQ1RQX0RBVEFfTk9UX0ZSQUcpICA9PSBTQ1RQX0RBVEFf
Tk9UX0ZSQUcpIHsKKwkJCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7CisJCQkJCWlmIChjb250
cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9PUkRFUkVEKSB7CisJCQkJCQlUQUlMUV9SRU1PVkUo
JnN0cm1pbi0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCQl9IGVsc2UgaWYg
KGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX1VOT1JERVJFRCkgeworCQkJCQkJVEFJTFFf
UkVNT1ZFKCZzdHJtaW4tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisjaWZk
ZWYgSU5WQVJJQU5UUworCQkJCQl9IGVsc2UgeworCQkJCQkJcGFuaWMoInN0cm1pbjogJXAgY3Rs
OiAlcCB1bmtub3duICVkIiwKKwkJCQkJCSAgICAgIHN0cm1pbiwgY29udHJvbCwgY29udHJvbC0+
b25fc3RybV9xKTsKKyNlbmRpZgorCQkJCQl9CisJCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7
CisJCQkJfQorCQkJCS8qIHN1YnRyYWN0IHBlbmRpbmcgb24gc3RyZWFtcyAqLworCQkJCWlmIChh
c29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29j
LT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2Ugewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBz
bWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
LCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFt
cyA9IDA7CisjZW5kaWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25f
YWxsX3N0cmVhbXMpOworCQkJCS8qIGRlbGl2ZXIgaXQgdG8gYXQgbGVhc3QgdGhlIGRlbGl2ZXJ5
LXEgKi8KKwkJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQpIHsKKwkJCQkJc2N0cF9tYXJrX25vbl9y
ZXZva2FibGUoYXNvYywgY29udHJvbC0+c2luZm9fdHNuKTsKKwkJCQkJc2N0cF9hZGRfdG9fcmVh
ZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJCQkgIGNvbnRyb2wsCisJCQkJCQkJICAmc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwKKwkJCQkJCQkgIDEsIFNDVFBfUkVBRF9MT0NLX0hFTEQs
CisJCQkJCQkJICBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ
LyogSXRzIGEgZnJhZ21lbnRlZCBtZXNzYWdlICovCisJCQkJaWYgKGNvbnRyb2wtPmZpcnN0X2Zy
YWdfc2VlbikgeworCQkJCQkvKiBNYWtlIGl0IHNvIHRoaXMgaXMgbmV4dCB0byBkZWxpdmVyLCB3
ZSByZXN0b3JlIGxhdGVyICovCisJCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29u
dHJvbC0+bWlkIC0gMTsKKwkJCQkJbmVlZF9yZWFzbV9jaGVjayA9IDE7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIG5vIG1vcmUgZGVsaXZlcnkgbm93LiAqLwor
CQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKG5lZWRfcmVhc21fY2hlY2spIHsKKwkJaW50IHJldDsK
KwkJcmV0ID0gc2N0cF9kZWxpdmVyX3JlYXNtX2NoZWNrKHN0Y2IsICZzdGNiLT5hc29jLCBzdHJt
aW4sIFNDVFBfUkVBRF9MT0NLX0hFTEQpOworCQlpZiAoU0NUUF9NSURfR1QoYXNvYy0+aWRhdGFf
c3VwcG9ydGVkLCBtaWQsIHN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkKSkgeworCQkJLyogUmVz
dG9yZSB0aGUgbmV4dCB0byBkZWxpdmVyIHVubGVzcyB3ZSBhcmUgYWhlYWQgKi8KKwkJCXN0cm1p
bi0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlkOworCQl9CisJCWlmIChyZXQgPT0gMCkgeworCQkJ
LyogTGVmdCB0aGUgZnJvbnQgUGFydGlhbCBvbmUgb24gKi8KKwkJCXJldHVybjsKKwkJfQorCQlu
ZWVkX3JlYXNtX2NoZWNrID0gMDsKKwl9CisJLyoKKwkgKiBub3cgd2UgbXVzdCBkZWxpdmVyIHRo
aW5ncyBpbiBxdWV1ZSB0aGUgbm9ybWFsIHdheSAgaWYgYW55IGFyZQorCSAqIG5vdyByZWFkeS4K
KwkgKi8KKwltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2RlbGl2ZXJlZCArIDE7CisJVEFJTFFfRk9S
RUFDSF9TQUZFKGNvbnRyb2wsICZzdHJtaW4tPmlucXVldWUsIG5leHRfaW5zdHJtLCBuY29udHJv
bCkgeworCQlpZiAoU0NUUF9NSURfRVEoYXNvYy0+aWRhdGFfc3VwcG9ydGVkLCBtaWQsIGNvbnRy
b2wtPm1pZCkpIHsKKwkJCWlmICgoKGNvbnRyb2wtPnNpbmZvX2ZsYWdzID4+IDgpICYgU0NUUF9E
QVRBX05PVF9GUkFHKSA9PSBTQ1RQX0RBVEFfTk9UX0ZSQUcpIHsKKwkJCQkvKiB0aGlzIGlzIGRl
bGl2ZXJhYmxlIG5vdyAqLworCQkJCWlmIChjb250cm9sLT5vbl9zdHJtX3EpIHsKKwkJCQkJaWYg
KGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQpIHsKKwkJCQkJCVRBSUxRX1JF
TU9WRSgmc3RybWluLT5pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisJCQkJCX0gZWxz
ZSBpZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJCQlU
QUlMUV9SRU1PVkUoJnN0cm1pbi0+dW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCX0gZWxzZSB7CisJCQkJCQlwYW5pYygic3RybWluOiAl
cCBjdGw6ICVwIHVua25vd24gJWQiLAorCQkJCQkJICAgICAgc3RybWluLCBjb250cm9sLCBjb250
cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJY29udHJvbC0+b25fc3RybV9x
ID0gMDsKKwkJCQl9CisJCQkJLyogc3VidHJhY3QgcGVuZGluZyBvbiBzdHJlYW1zICovCisJCQkJ
aWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQkJ
CWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgLT0gY29udHJvbC0+bGVuZ3RoOworCQkJCX0gZWxz
ZSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQlwYW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9
ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0
cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJCQlhc29jLT5zaXplX29uX2FsbF9z
dHJlYW1zID0gMDsKKyNlbmRpZgorCQkJCX0KKwkJCQlzY3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNu
dF9vbl9hbGxfc3RyZWFtcyk7CisJCQkJLyogZGVsaXZlciBpdCB0byBhdCBsZWFzdCB0aGUgZGVs
aXZlcnktcSAqLworCQkJCXN0cm1pbi0+bGFzdF9taWRfZGVsaXZlcmVkID0gY29udHJvbC0+bWlk
OworCQkJCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQkJCQlzY3RwX21hcmtfbm9uX3Jldm9r
YWJsZShhc29jLCBjb250cm9sLT5zaW5mb190c24pOworCQkJCQlzY3RwX2FkZF90b19yZWFkcShz
dGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCSAgY29udHJvbCwKKwkJCQkJCQkgICZzdGNiLT5z
Y3RwX3NvY2tldC0+c29fcmN2LCAxLAorCQkJCQkJCSAgU0NUUF9SRUFEX0xPQ0tfSEVMRCwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKworCQkJCX0KKwkJCQltaWQgPSBzdHJtaW4tPmxhc3RfbWlkX2Rl
bGl2ZXJlZCArIDE7CisJCQl9IGVsc2UgeworCQkJCS8qIEl0cyBhIGZyYWdtZW50ZWQgbWVzc2Fn
ZSAqLworCQkJCWlmIChjb250cm9sLT5maXJzdF9mcmFnX3NlZW4pIHsKKwkJCQkJLyogTWFrZSBp
dCBzbyB0aGlzIGlzIG5leHQgdG8gZGVsaXZlciAqLworCQkJCQlzdHJtaW4tPmxhc3RfbWlkX2Rl
bGl2ZXJlZCA9IGNvbnRyb2wtPm1pZCAtIDE7CisJCQkJCW5lZWRfcmVhc21fY2hlY2sgPSAxOwor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0K
KwlpZiAobmVlZF9yZWFzbV9jaGVjaykgeworCQkodm9pZClzY3RwX2RlbGl2ZXJfcmVhc21fY2hl
Y2soc3RjYiwgJnN0Y2ItPmFzb2MsIHN0cm1pbiwgU0NUUF9SRUFEX0xPQ0tfSEVMRCk7CisJfQor
fQorCisKKworc3RhdGljIHZvaWQKK3NjdHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwl1aW50
MTZfdCBzdHJlYW0sIHVpbnQzMl90IG1pZCwgaW50IG9yZGVyZWQsIHVpbnQzMl90IGN1bXRzbikK
K3sKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1faW4gKnN0cm07CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlp
bnQgY250X3JlbW92ZWQ9MDsKKworCS8qCisJICogRm9yIG5vdyBsYXJnZSBtZXNzYWdlcyBoZWxk
IG9uIHRoZSBzdHJlYW0gcmVhc20gdGhhdCBhcmUKKwkgKiBjb21wbGV0ZSB3aWxsIGJlIHRvc3Nl
ZCB0b28uIFdlIGNvdWxkIGluIHRoZW9yeSBkbyBtb3JlCisJICogd29yayB0byBzcGluIHRocm91
Z2ggYW5kIHN0b3AgYWZ0ZXIgZHVtcGluZyBvbmUgbXNnIGFrYQorCSAqIHNlZWluZyB0aGUgc3Rh
cnQgb2YgYSBuZXcgbXNnIGF0IHRoZSBoZWFkLCBhbmQgY2FsbCB0aGUKKwkgKiBkZWxpdmVyeSBm
dW5jdGlvbi4uLiB0byBzZWUgaWYgaXQgY2FuIGJlIGRlbGl2ZXJlZC4uLiBCdXQKKwkgKiBmb3Ig
bm93IHdlIGp1c3QgZHVtcCBldmVyeXRoaW5nIG9uIHRoZSBxdWV1ZS4KKwkgKi8KKwlzdHJtID0g
JmFzb2MtPnN0cm1pbltzdHJlYW1dOworCWNvbnRyb2wgPSBzY3RwX2ZpbmRfcmVhc21fZW50cnko
c3RybSwgbWlkLCBvcmRlcmVkLCBhc29jLT5pZGF0YV9zdXBwb3J0ZWQpOworCWlmIChjb250cm9s
ID09IE5VTEwpIHsKKwkJLyogTm90IGZvdW5kICovCisJCXJldHVybjsKKwl9CisJaWYgKCFhc29j
LT5pZGF0YV9zdXBwb3J0ZWQgJiYgIW9yZGVyZWQgJiYgU0NUUF9UU05fR1QoY29udHJvbC0+ZnNu
X2luY2x1ZGVkLCBjdW10c24pKSB7CisJCXJldHVybjsKKwl9CisJVEFJTFFfRk9SRUFDSF9TQUZF
KGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKKwkJLyogUHVyZ2UgaGFu
Z2luZyBjaHVua3MgKi8KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQgJiYgKG9yZGVyZWQg
PT0gMCkpIHsKKwkJCWlmIChTQ1RQX1RTTl9HVChjaGstPnJlYy5kYXRhLnRzbiwgY3VtdHNuKSkg
eworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWNudF9yZW1vdmVkKys7CisJCVRBSUxRX1JFTU9W
RSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKKwkJaWYgKGFzb2MtPnNpemVfb25f
cmVhc21fcXVldWUgPj0gY2hrLT5zZW5kX3NpemUpIHsKKwkJCWFzb2MtPnNpemVfb25fcmVhc21f
cXVldWUgLT0gY2hrLT5zZW5kX3NpemU7CisJCX0gZWxzZSB7CisjaWZkZWYgSU5WQVJJQU5UUwor
CQkJcGFuaWMoInNpemVfb25fcmVhc21fcXVldWUgPSAldSBzbWFsbGVyIHRoYW4gY2h1bmsgbGVu
Z3RoICV1IiwgYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSwgY2hrLT5zZW5kX3NpemUpOworI2Vs
c2UKKwkJCWFzb2MtPnNpemVfb25fcmVhc21fcXVldWUgPSAwOworI2VuZGlmCisJCX0KKwkJc2N0
cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fcmVhc21fcXVldWUpOworCQlpZiAoY2hrLT5kYXRh
KSB7CisJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJ
CX0KKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZjb250cm9sLT5yZWFzbSkpIHsKKwkJLyogVGhpcyBoYXMg
dG8gYmUgb2xkIGRhdGEsIHVub3JkZXJlZCAqLworCQlpZiAoY29udHJvbC0+ZGF0YSkgeworCQkJ
c2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJ
CX0KKwkJc2N0cF9yZXNldF9hX2NvbnRyb2woY29udHJvbCwgc3RjYi0+c2N0cF9lcCwgY3VtdHNu
KTsKKwkJY2hrID0gVEFJTFFfRklSU1QoJmNvbnRyb2wtPnJlYXNtKTsKKwkJaWYgKGNoay0+cmVj
LmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpIHsKKwkJCVRBSUxRX1JFTU9W
RSgmY29udHJvbC0+cmVhc20sIGNoaywgc2N0cF9uZXh0KTsKKwkJCXNjdHBfYWRkX2Noa190b19j
b250cm9sKGNvbnRyb2wsIHN0cm0sIHN0Y2IsIGFzb2MsCisJCQkJCQljaGssIFNDVFBfUkVBRF9M
T0NLX0hFTEQpOworCQl9CisJCXNjdHBfZGVsaXZlcl9yZWFzbV9jaGVjayhzdGNiLCBhc29jLCBz
dHJtLCBTQ1RQX1JFQURfTE9DS19IRUxEKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoY29udHJvbC0+
b25fc3RybV9xID09IFNDVFBfT05fT1JERVJFRCkgeworCQlUQUlMUV9SRU1PVkUoJnN0cm0tPmlu
cXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0
cmVhbXMgPj0gY29udHJvbC0+bGVuZ3RoKSB7CisJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
IC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJfSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlw
YW5pYygic2l6ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0
aCAldSIsIGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxz
ZQorCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYKKwkJfQorCQlzY3Rw
X3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJCWNvbnRyb2wtPm9uX3N0
cm1fcSA9IDA7CisJfSBlbHNlIGlmIChjb250cm9sLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9S
REVSRUQpIHsKKwkJVEFJTFFfUkVNT1ZFKCZzdHJtLT51bm9faW5xdWV1ZSwgY29udHJvbCwgbmV4
dF9pbnN0cm0pOworCQljb250cm9sLT5vbl9zdHJtX3EgPSAwOworI2lmZGVmIElOVkFSSUFOVFMK
Kwl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQlwYW5pYygic3RybTogJXAgY3Rs
OiAlcCB1bmtub3duICVkIiwKKwkJICAgIHN0cm0sIGNvbnRyb2wsIGNvbnRyb2wtPm9uX3N0cm1f
cSk7CisjZW5kaWYKKwl9CisJY29udHJvbC0+b25fc3RybV9xID0gMDsKKwlpZiAoY29udHJvbC0+
b25fcmVhZF9xID09IDApIHsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndob0Zy
b20pOworCQlpZiAoY29udHJvbC0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRh
dGEpOworCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2FfcmVhZHEo
c3RjYiwgY29udHJvbCk7CisJfQorfQorCit2b2lkCitzY3RwX2hhbmRsZV9mb3J3YXJkX3Rzbihz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9mb3J3YXJkX3Rzbl9jaHVuayAqZndkLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50ICph
Ym9ydF9mbGFnLCBzdHJ1Y3QgbWJ1ZiAqbSAsIGludCBvZmZzZXQpCit7CisJLyogVGhlIHByLXNj
dHAgZndkIHRzbiAqLworCS8qCisJICogaGVyZSB3ZSB3aWxsIHBlcmZvcm0gYWxsIHRoZSBkYXRh
IHJlY2VpdmVyIHNpZGUgc3RlcHMgZm9yCisJICogcHJvY2Vzc2luZyBGd2RUU04sIGFzIHJlcXVp
cmVkIGluIGJ5IHByLXNjdHAgZHJhZnQ6CisJICoKKwkgKiBBc3N1bWUgd2UgZ2V0IEZ3ZFRTTih4
KToKKwkgKgorCSAqIDEpIHVwZGF0ZSBsb2NhbCBjdW1UU04gdG8geCAKKwkgKiAyKSB0cnkgdG8g
ZnVydGhlciBhZHZhbmNlIGN1bVRTTiB0byB4ICsgb3RoZXJzIHdlIGhhdmUgCisJICogMykgZXhh
bWluZSBhbmQgdXBkYXRlIHJlLW9yZGVyaW5nIHF1ZXVlIG9uIHByLWluLXN0cmVhbXMgCisJICog
NCkgY2xlYW4gdXAgcmUtYXNzZW1ibHkgcXVldWUgCisJICogNSkgU2VuZCBhIHNhY2sgdG8gcmVw
b3J0IHdoZXJlIHdlIGFyZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsK
Kwl1aW50MzJfdCBuZXdfY3VtX3RzbiwgZ2FwOworCXVuc2lnbmVkIGludCBpLCBmd2Rfc3osIG1f
c2l6ZTsKKwl1aW50MzJfdCBzdHJfc2VxOworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsK
KwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKnN2OworCisJYXNvYyA9ICZz
dGNiLT5hc29jOworCWlmICgoZndkX3N6ID0gbnRvaHMoZndkLT5jaC5jaHVua19sZW5ndGgpKSA8
IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9jaHVuaykpIHsKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX0lOREFUQTEsCisJCQkiQmFkIHNpemUgdG9vIHNtYWxsL2JpZyBmd2QtdHNuXG4iKTsK
KwkJcmV0dXJuOworCX0KKwltX3NpemUgPSAoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5X3NpemUg
PDwgMyk7CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKiovCisJLyogMS4gSGVyZSB3ZSB1cGRhdGUgbG9jYWwgY3VtVFNOIGFuZCBz
aGlmdCB0aGUgYml0bWFwIGFycmF5ICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJbmV3X2N1bV90c24gPSBudG9obChm
d2QtPm5ld19jdW11bGF0aXZlX3Rzbik7CisKKwlpZiAoU0NUUF9UU05fR0UoYXNvYy0+Y3VtdWxh
dGl2ZV90c24sIG5ld19jdW1fdHNuKSkgeworCQkvKiBBbHJlYWR5IGdvdCB0aGVyZSAuLi4gKi8K
KwkJcmV0dXJuOworCX0KKwkvKgorCSAqIG5vdyB3ZSBrbm93IHRoZSBuZXcgVFNOIGlzIG1vcmUg
YWR2YW5jZWQsIGxldCdzIGZpbmQgdGhlIGFjdHVhbAorCSAqIGdhcAorCSAqLworCVNDVFBfQ0FM
Q19UU05fVE9fR0FQKGdhcCwgbmV3X2N1bV90c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90
c24pOworCWFzb2MtPmN1bXVsYXRpdmVfdHNuID0gbmV3X2N1bV90c247CisJaWYgKGdhcCA+PSBt
X3NpemUpIHsKKwkJaWYgKChsb25nKWdhcCA+IHNjdHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0
Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQkJ
Y2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJLyoKKwkJCSAqIG91dCBvZiByYW5n
ZSAob2Ygc2luZ2xlIGJ5dGUgY2h1bmtzIGluIHRoZSByd25kIEkKKwkJCSAqIGdpdmUgb3V0KS4g
VGhpcyBtdXN0IGJlIGFuIGF0dGFja2VyLgorCQkJICovCisJCQkqYWJvcnRfZmxhZyA9IDE7CisJ
CQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAorCQkJICAgICAgICAgIk5ldyBjdW0gYWNrICU4
Ljh4IHRvbyBoaWdoLCBoaWdoZXN0IFRTTiAlOC44eCIsCisJCQkgICAgICAgICBuZXdfY3VtX3Rz
biwgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQ0FVU0VfUFJPVE9DT0xfVklPTEFUSU9OLCBtc2cpOworCQkJc3RjYi0+
c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfSU5EQVRBICsgU0NUUF9M
T0NfMzM7CisJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IG9wX2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCXJldHVybjsKKwkJfQorCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19md2R0c25fbWFwX292ZXIpOworCisJCW1lbXNldChzdGNiLT5hc29jLm1h
cHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplKTsKKwkJYXNvYy0+
bWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IG5ld19jdW1fdHNuICsgMTsKKwkJYXNvYy0+aGlnaGVz
dF90c25faW5zaWRlX21hcCA9IG5ld19jdW1fdHNuOworCisJCW1lbXNldChzdGNiLT5hc29jLm5y
X21hcHBpbmdfYXJyYXksIDAsIHN0Y2ItPmFzb2MubWFwcGluZ19hcnJheV9zaXplKTsKKwkJYXNv
Yy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IG5ld19jdW1fdHNuOworCisJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJM
RSkgeworCQkJc2N0cF9sb2dfbWFwKDAsIDMsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAs
IFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX1RDQl9MT0NL
X0FTU0VSVChzdGNiKTsKKwkJZm9yIChpID0gMDsgaSA8PSBnYXA7IGkrKykgeworCQkJaWYgKCFT
Q1RQX0lTX1RTTl9QUkVTRU5UKGFzb2MtPm1hcHBpbmdfYXJyYXksIGkpICYmCisJCQkgICAgIVND
VFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwgaSkpIHsKKwkJCQlTQ1RQ
X1NFVF9UU05fUFJFU0VOVChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBpKTsKKwkJCQlpZiAoU0NU
UF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiArIGksIGFzb2MtPmhpZ2hlc3Rf
dHNuX2luc2lkZV9ucl9tYXApKSB7CisJCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9t
YXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuICsgaTsKKwkJCQl9CisJCQl9CisJCX0K
Kwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKiovCisJLyogMi4gQ2xlYXIgdXAgcmUtYXNzZW1ibHkgcXVldWUgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwkvKiBUaGlzIGlzIG5vdyBkb25lIGFz
IHBhcnQgb2YgY2xlYXJpbmcgdXAgdGhlIHN0cmVhbS9zZXEgKi8KKwlpZiAoYXNvYy0+aWRhdGFf
c3VwcG9ydGVkID09IDApIHsKKwkJdWludDE2X3Qgc2lkOworCQkvKiBGbHVzaCBhbGwgdGhlIHVu
LW9yZGVyZWQgZGF0YSBiYXNlZCBvbiBjdW0tdHNuICovCisJCVNDVFBfSU5QX1JFQURfTE9DSyhz
dGNiLT5zY3RwX2VwKTsKKwkJZm9yIChzaWQgPSAwIDsgc2lkIDwgYXNvYy0+c3RyZWFtaW5jbnQ7
IHNpZCsrKSB7CisJCQlzY3RwX2ZsdXNoX3JlYXNzbV9mb3Jfc3RyX3NlcShzdGNiLCBhc29jLCBz
aWQsIDAsIDAsIG5ld19jdW1fdHNuKTsKKwkJfQorCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhzdGNi
LT5zY3RwX2VwKTsKKwl9CisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCisJLyogMy4gVXBkYXRlIHRoZSBQUi1zdHJlYW0gcmUtb3JkZXJp
bmcgcXVldWVzIGFuZCBmaXggICovCisJLyogICAgZGVsaXZlcnkgaXNzdWVzIGFzIG5lZWRlZC4g
ICAgICAgICAgICAgICAgICAgICAgICovCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCisJZndkX3N6IC09IHNpemVvZigqZndkKTsKKwlp
ZiAobSAmJiBmd2Rfc3opIHsKKwkJLyogTmV3IG1ldGhvZC4gKi8KKwkJdW5zaWduZWQgaW50IG51
bV9zdHI7CisJCXVpbnQzMl90IG1pZCwgY3VyX21pZDsKKwkJdWludDE2X3Qgc2lkOworCQl1aW50
MTZfdCBvcmRlcmVkLCBmbGFnczsKKwkJc3RydWN0IHNjdHBfc3Ryc2VxICpzdHNlcSwgc3Ryc2Vx
YnVmOworCQlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHNlcV9tLCBzdHJzZXFidWZfbTsKKwkJ
b2Zmc2V0ICs9IHNpemVvZigqZndkKTsKKworCQlTQ1RQX0lOUF9SRUFEX0xPQ0soc3RjYi0+c2N0
cF9lcCk7CisJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsKKwkJCW51bV9zdHIgPSBmd2Rf
c3ogLyBzaXplb2Yoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCk7CisJCX0gZWxzZSB7CisJCQludW1f
c3RyID0gZndkX3N6IC8gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJCX0KKwkJZm9yIChp
ID0gMDsgaSA8IG51bV9zdHI7IGkrKykgeworCQkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkg
eworCQkJCXN0c2VxX20gPSAoc3RydWN0IHNjdHBfc3Ryc2VxX21pZCAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAorCQkJCQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKSwK
KwkJCQkJCQkJCSAgICAodWludDhfdCAqKSZzdHJzZXFidWZfbSk7CisJCQkJb2Zmc2V0ICs9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKKwkJCQlpZiAoc3RzZXFfbSA9PSBOVUxMKSB7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlzaWQgPSBudG9ocyhzdHNlcV9tLT5zaWQpOworCQkJ
CW1pZCA9IG50b2hsKHN0c2VxX20tPm1pZCk7CisJCQkJZmxhZ3MgPSBudG9ocyhzdHNlcV9tLT5m
bGFncyk7CisJCQkJaWYgKGZsYWdzICYgUFJfU0NUUF9VTk9SREVSRURfRkxBRykgeworCQkJCQlv
cmRlcmVkID0gMDsKKwkJCQl9IGVsc2UgeworCQkJCQlvcmRlcmVkID0gMTsKKwkJCQl9CisJCQl9
IGVsc2UgeworCQkJCXN0c2VxID0gKHN0cnVjdCBzY3RwX3N0cnNlcSAqKXNjdHBfbV9nZXRwdHIo
bSwgb2Zmc2V0LAorCQkJCQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpLAorCQkJ
CQkJCQkJICAgICh1aW50OF90ICopJnN0cnNlcWJ1Zik7CisJCQkJb2Zmc2V0ICs9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zdHJzZXEpOworCQkJCWlmIChzdHNlcSA9PSBOVUxMKSB7CisJCQkJCWJyZWFr
OworCQkJCX0KKwkJCQlzaWQgPSBudG9ocyhzdHNlcS0+c2lkKTsKKwkJCQltaWQgPSAodWludDMy
X3QpbnRvaHMoc3RzZXEtPnNzbik7CisJCQkJb3JkZXJlZCA9IDE7CisJCQl9CisJCQkvKiBDb252
ZXJ0ICovCisKKwkJCS8qIG5vdyBwcm9jZXNzICovCisKKwkJCS8qCisJCQkgKiBPayB3ZSBub3cg
bG9vayBmb3IgdGhlIHN0cmVhbS9zZXEgb24gdGhlIHJlYWQgcXVldWUKKwkJCSAqIHdoZXJlIGl0
cyBub3QgYWxsIGRlbGl2ZXJlZC4gSWYgd2UgZmluZCBpdCB3ZSB0cmFuc211dGUgdGhlCisJCQkg
KiByZWFkIGVudHJ5IGludG8gYSBQRElfQUJPUlRFRC4KKwkJCSAqLworCQkJaWYgKHNpZCA+PSBh
c29jLT5zdHJlYW1pbmNudCkgeworCQkJCS8qIHNjcmV3ZWQgdXAgc3RyZWFtcywgc3RvcCEgICov
CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoKGFzb2MtPnN0cl9vZl9wZGFwaSA9PSBzaWQpICYm
CisJCQkgICAgKGFzb2MtPnNzbl9vZl9wZGFwaSA9PSBtaWQpKSB7CisJCQkJLyogSWYgdGhpcyBp
cyB0aGUgb25lIHdlIHdlcmUgcGFydGlhbGx5IGRlbGl2ZXJpbmcKKwkJCQkgKiBub3cgdGhlbiB3
ZSBubyBsb25nZXIgYXJlLiBOb3RlIHRoaXMgd2lsbCBjaGFuZ2UKKwkJCQkgKiB3aXRoIHRoZSBy
ZWFzc2VtYmx5IHJlLXdyaXRlLgorCQkJCSAqLworCQkJCWFzb2MtPmZyYWdtZW50ZWRfZGVsaXZl
cnlfaW5wcm9ncmVzcyA9IDA7CisJCQl9CisJCQlzdHJtID0gJmFzb2MtPnN0cm1pbltzaWRdOwor
CQkJZm9yIChjdXJfbWlkID0gc3RybS0+bGFzdF9taWRfZGVsaXZlcmVkOyBTQ1RQX01JRF9HRShh
c29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgY3VyX21pZCk7IGN1cl9taWQrKykgeworCQkJCXNj
dHBfZmx1c2hfcmVhc3NtX2Zvcl9zdHJfc2VxKHN0Y2IsIGFzb2MsIHNpZCwgY3VyX21pZCwgb3Jk
ZXJlZCwgbmV3X2N1bV90c24pOworCQkJfQorCQkJVEFJTFFfRk9SRUFDSChjb250cm9sLCAmc3Rj
Yi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgbmV4dCkgeworCQkJCWlmICgoY29udHJvbC0+c2luZm9f
c3RyZWFtID09IHNpZCkgJiYKKwkJCQkgICAgKFNDVFBfTUlEX0VRKGFzb2MtPmlkYXRhX3N1cHBv
cnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSkgeworCQkJCQlzdHJfc2VxID0gKHNpZCA8PCAxNikg
fCAoMHgwMDAwZmZmZiAmIG1pZCk7CisJCQkJCWNvbnRyb2wtPnBkYXBpX2Fib3J0ZWQgPSAxOwor
CQkJCQlzdiA9IHN0Y2ItPmFzb2MuY29udHJvbF9wZGFwaTsKKwkJCQkJY29udHJvbC0+ZW5kX2Fk
ZGVkID0gMTsKKwkJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSA9PSBTQ1RQX09OX09SREVSRUQp
IHsKKwkJCQkJCVRBSUxRX1JFTU9WRSgmc3RybS0+aW5xdWV1ZSwgY29udHJvbCwgbmV4dF9pbnN0
cm0pOworCQkJCQkJaWYgKGFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPj0gY29udHJvbC0+bGVu
Z3RoKSB7CisJCQkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyAtPSBjb250cm9sLT5sZW5n
dGg7CisJCQkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJCQlwYW5pYygic2l6
ZV9vbl9hbGxfc3RyZWFtcyA9ICV1IHNtYWxsZXIgdGhhbiBjb250cm9sIGxlbmd0aCAldSIsIGFz
b2MtPnNpemVfb25fYWxsX3N0cmVhbXMsIGNvbnRyb2wtPmxlbmd0aCk7CisjZWxzZQorCQkJCQkJ
CWFzb2MtPnNpemVfb25fYWxsX3N0cmVhbXMgPSAwOworI2VuZGlmCisJCQkJCQl9CisJCQkJCQlz
Y3RwX3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9hbGxfc3RyZWFtcyk7CisJCQkJCX0gZWxzZSBp
ZiAoY29udHJvbC0+b25fc3RybV9xID09IFNDVFBfT05fVU5PUkRFUkVEKSB7CisJCQkJCQlUQUlM
UV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVlLCBjb250cm9sLCBuZXh0X2luc3RybSk7CisjaWZk
ZWYgSU5WQVJJQU5UUworCQkJCQl9IGVsc2UgaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQkJ
CQkJcGFuaWMoInN0cm06ICVwIGN0bDogJXAgdW5rbm93biAlZCIsCisJCQkJCQkgICAgICBzdHJt
LCBjb250cm9sLCBjb250cm9sLT5vbl9zdHJtX3EpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJY29u
dHJvbC0+b25fc3RybV9xID0gMDsKKwkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3BkYXBpID0gY29u
dHJvbDsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllf
SU5ESUNBVElPTiwKKwkJCQkJICAgICAgICAgICAgICAgIHN0Y2IsCisJCQkJCSAgICAgICAgICAg
ICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJPUlRFRCwKKwkJCQkJICAgICAgICAgICAgICAg
ICh2b2lkICopJnN0cl9zZXEsCisJCQkJCQkJU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJc3Rj
Yi0+YXNvYy5jb250cm9sX3BkYXBpID0gc3Y7CisJCQkJCWJyZWFrOworCQkJCX0gZWxzZSBpZiAo
KGNvbnRyb2wtPnNpbmZvX3N0cmVhbSA9PSBzaWQpICYmCisJCQkJCSAgIFNDVFBfTUlEX0dUKGFz
b2MtPmlkYXRhX3N1cHBvcnRlZCwgY29udHJvbC0+bWlkLCBtaWQpKSB7CisJCQkJCS8qIFdlIGFy
ZSBwYXN0IG91ciB2aWN0aW0gU1NOICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlm
IChTQ1RQX01JRF9HVChhc29jLT5pZGF0YV9zdXBwb3J0ZWQsIG1pZCwgc3RybS0+bGFzdF9taWRf
ZGVsaXZlcmVkKSkgeworCQkJCS8qIFVwZGF0ZSB0aGUgc2VxdWVuY2UgbnVtYmVyICovCisJCQkJ
c3RybS0+bGFzdF9taWRfZGVsaXZlcmVkID0gbWlkOworCQkJfQorCQkJLyogbm93IGtpY2sgdGhl
IHN0cmVhbSB0aGUgbmV3IHdheSAqLworCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJ
c2N0cF9raWNrX3Byc2N0cF9yZW9yZGVyX3F1ZXVlKHN0Y2IsIHN0cm0pOworCQl9CisJCVNDVFBf
SU5QX1JFQURfVU5MT0NLKHN0Y2ItPnNjdHBfZXApOworCX0KKwkvKgorCSAqIE5vdyBzbGlkZSB0
aGluZyBmb3J3YXJkLgorCSAqLworCXNjdHBfc2xpZGVfbWFwcGluZ19hcnJheXMoc3RjYik7Cit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbmRhdGEuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2luZGF0YS5oCmluZGV4IGU2OWRlMjli
YjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmJkYmExMTQ4YjY4NTUxNDdkNGQ0NGEw
MjdjZWZhNDM4NjE3ZDVkM2QgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5l
dC9zY3RwX2luZGF0YS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lu
ZGF0YS5oCkBAIC0wLDAgKzEsMTIyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy
OiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28g
U3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAg
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0
ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgor
X19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfaW5kYXRhLmggMzEwNTkw
IDIwMTYtMTItMjYgMTE6MDY6NDFaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVU
SU5FVF9TQ1RQX0lOREFUQV9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0lOREFUQV9IXworCisj
aWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKK3N0cnVjdCBz
Y3RwX3F1ZXVlZF90b19yZWFkICoKK3NjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICB1aW50MzJfdCB0c24s
IHVpbnQzMl90IHBwaWQsCisgICAgdWludDMyX3QgY29udGV4dCwgdWludDE2X3Qgc2lkLAorICAg
IHVpbnQzMl90IG1pZCwgdWludDhfdCBmbGFncywKKyAgICBzdHJ1Y3QgbWJ1ZiAqZG0pOworCisK
KyNkZWZpbmUgc2N0cF9idWlsZF9yZWFkcV9lbnRyeV9tYWMoX2N0bCwgaW5faXQsIGNvbnRleHQs
IG5ldCwgdHNuLCBwcGlkLCBzaWQsIGZsYWdzLCBkbSwgdGZzbiwgbWlkKSBkbyB7IFwKKwlpZiAo
X2N0bCkgeyBcCisJCWF0b21pY19hZGRfaW50KCYoKG5ldCktPnJlZl9jb3VudCksIDEpOyBcCisJ
CW1lbXNldChfY3RsLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpKTsgXAor
CQkoX2N0bCktPnNpbmZvX3N0cmVhbSA9IHNpZDsgXAorCQlUQUlMUV9JTklUKCZfY3RsLT5yZWFz
bSk7IFwKKwkJKF9jdGwpLT50b3BfZnNuID0gdGZzbjsgXAorCQkoX2N0bCktPm1pZCA9IG1pZDsg
XAorCQkoX2N0bCktPnNpbmZvX2ZsYWdzID0gKGZsYWdzIDw8IDgpOyBcCisJCShfY3RsKS0+c2lu
Zm9fcHBpZCA9IHBwaWQ7IFwKKwkJKF9jdGwpLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsgXAor
CQkoX2N0bCktPmZzbl9pbmNsdWRlZCA9IDB4ZmZmZmZmZmY7IFwKKwkJKF9jdGwpLT50b3BfZnNu
ID0gMHhmZmZmZmZmZjsgXAorCQkoX2N0bCktPnNpbmZvX3RzbiA9IHRzbjsgXAorCQkoX2N0bCkt
PnNpbmZvX2N1bXRzbiA9IHRzbjsgXAorCQkoX2N0bCktPnNpbmZvX2Fzc29jX2lkID0gc2N0cF9n
ZXRfYXNzb2NpZCgoaW5faXQpKTsgXAorCQkoX2N0bCktPndob0Zyb20gPSBuZXQ7IFwKKwkJKF9j
dGwpLT5kYXRhID0gZG07IFwKKwkJKF9jdGwpLT5zdGNiID0gKGluX2l0KTsgXAorCQkoX2N0bCkt
PnBvcnRfZnJvbSA9IChpbl9pdCktPnJwb3J0OyBcCisJfSBcCit9IHdoaWxlICgwKQorCisKKwor
c3RydWN0IG1idWYgKgorc2N0cF9idWlsZF9jdGxfbmNodW5rKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisJCSAgICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNpbmZvKTsKKwordm9pZCBzY3Rw
X3NldF9yd25kKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsK
KwordWludDMyX3QKK3NjdHBfY2FsY19yd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0
IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpOworCit2b2lkCitzY3RwX2V4cHJlc3NfaGFuZGxlX3Nh
Y2soc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBjdW1hY2ssCisJCQkgdWludDMyX3Qg
cnduZCwgaW50ICphYm9ydF9ub3csIGludCBlY25lX3NlZW4pOworCit2b2lkCitzY3RwX2hhbmRs
ZV9zYWNrKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0X3NlZywgaW50IG9mZnNldF9kdXAsCisg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAg
dWludDE2X3QgbnVtX3NlZywgdWludDE2X3QgbnVtX25yX3NlZywgdWludDE2X3QgbnVtX2R1cCwK
KyAgICAgICAgICAgICAgICAgaW50ICphYm9ydF9ub3csIHVpbnQ4X3QgZmxhZ3MsCisgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IGN1bV9hY2ssIHVpbnQzMl90IHJ3bmQsIGludCBlY25lX3NlZW4p
OworCisvKiBkcmFmdC1pZXRmLXRzdndnLXVzY3RwICovCit2b2lkCitzY3RwX2hhbmRsZV9mb3J3
YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKiwKKwkJCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2No
dW5rICosIGludCAqLCBzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOworCitzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICoKK3NjdHBfdHJ5X2FkdmFuY2VfcGVlcl9hY2tfcG9pbnQoc3RydWN0IHNjdHBfdGNiICos
IHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfc2VydmljZV9xdWV1ZXMo
c3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkCitz
Y3RwX3VwZGF0ZV9hY2tlZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfc2h1dGRvd25f
Y2h1bmsgKiwgaW50ICopOworCitpbnQKK3NjdHBfcHJvY2Vzc19kYXRhKHN0cnVjdCBtYnVmICoq
LCBpbnQsIGludCAqLCBpbnQsCisJCSAgc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBf
dGNiICosCisJCSAgc3RydWN0IHNjdHBfbmV0cyAqLCB1aW50MzJfdCAqKTsKKwordm9pZCBzY3Rw
X3NsaWRlX21hcHBpbmdfYXJyYXlzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYik7CisKK3ZvaWQgc2N0
cF9zYWNrX2NoZWNrKHN0cnVjdCBzY3RwX3RjYiAqLCBpbnQpOworCisjZW5kaWYKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMKaW5kZXggZTY5ZGUyOWJiMmQx
ZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYzYyYmI4NTA2ZGMwZmI4NjExMmYzNWUwYjY2
ZDA4YzE5OGU4ZjliZCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfaW5wdXQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5j
CkBAIC0wLDAgKzEsNjM3NSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE
LTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3Rl
bXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEy
LCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBu
b3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT
RElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX2lucHV0LmMgMzM0NzI1IDIwMTgt
MDYtMDYgMTk6Mjc6MDZaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRp
bmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9pbnB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2luZGF0YS5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
dGltZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZiBkZWZpbmVkKElO
RVQpIHx8IGRlZmluZWQoSU5FVDYpCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorI2luY2x1ZGUgPHN5cy9zbXAuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gMgorI2VuZGlmCisKKworc3RhdGlj
IHZvaWQKK3NjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ip
Cit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJLyogVGhpcyBub3cgbm90IG9ubHkgc3Rv
cHMgYWxsIGNvb2tpZSB0aW1lcnMKKwkgKiBpdCBhbHNvIHN0b3BzIGFueSBJTklUIHRpbWVycyBh
cyB3ZWxsLiBUaGlzCisJICogd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdGltZXJzIGFyZSBzdG9w
cGVkIGluCisJICogYWxsIGNvbGxpc2lvbiBjYXNlcy4KKwkgKi8KKwlTQ1RQX1RDQl9MT0NLX0FT
U0VSVChzdGNiKTsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9u
ZXh0KSB7CisJCWlmIChuZXQtPnJ4dF90aW1lci50eXBlID09IFNDVFBfVElNRVJfVFlQRV9DT09L
SUUpIHsKKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLAorCQkJCQlz
dGNiLT5zY3RwX2VwLAorCQkJCQlzdGNiLAorCQkJCQluZXQsIFNDVFBfRlJPTV9TQ1RQX0lOUFVU
ICsgU0NUUF9MT0NfMSk7CisJCX0gZWxzZSBpZiAobmV0LT5yeHRfdGltZXIudHlwZSA9PSBTQ1RQ
X1RJTUVSX1RZUEVfSU5JVCkgeworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9J
TklULAorCQkJCQlzdGNiLT5zY3RwX2VwLAorCQkJCQlzdGNiLAorCQkJCQluZXQsIFNDVFBfRlJP
TV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMik7CisJCX0KKwl9Cit9CisKKy8qIElOSVQgaGFuZGxl
ciAqLworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX2luaXQoc3RydWN0IG1idWYgKm0sIGludCBp
cGhsZW4sIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3Jj
LCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICpjcCwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwK
KyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsIGludCAqYWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisg
ICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2Vu
ZGlmCisgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKK3sK
KwlzdHJ1Y3Qgc2N0cF9pbml0ICppbml0OworCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQyLCAic2N0cF9oYW5kbGVfaW5pdDogaGFuZGxpbmcgSU5JVCB0
Y2I6JXBcbiIsCisJCSh2b2lkICopc3RjYik7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOworCX0KKwkvKiB2YWxpZGF0ZSBsZW5ndGggKi8KKwlpZiAobnRvaHMo
Y3AtPmNoLmNodW5rX2xlbmd0aCkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuaykpIHsK
KwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0s
ICIiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3Jj
LCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAg
ICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCQkgICAgICAgdnJm
X2lkLCBwb3J0KTsKKwkJaWYgKHN0Y2IpCisJCQkqYWJvcnRfbm9fdW5sb2NrID0gMTsKKwkJZ290
byBvdXRub3c7CisJfQorCS8qIHZhbGlkYXRlIHBhcmFtZXRlcnMgKi8KKwlpbml0ID0gJmNwLT5p
bml0OworCWlmIChpbml0LT5pbml0aWF0ZV90YWcgPT0gMCkgeworCQkvKiBwcm90b2NvbCBlcnJv
ci4uLiBzZW5kIGFib3J0ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9JTlZBTElEX1BBUkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBz
dGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2Vu
ZGlmCisJCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQorCQkJKmFib3J0X25v
X3VubG9jayA9IDE7CisJCWdvdG8gb3V0bm93OworCX0KKwlpZiAobnRvaGwoaW5pdC0+YV9yd25k
KSA8IFNDVFBfTUlOX1JXTkQpIHsKKwkJLyogaW52YWxpZCBwYXJhbWV0ZXIuLi4gc2VuZCBhYm9y
dCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9Q
QVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwgaXBobGVu
LCBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAg
ICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJCSAgICAg
ICB2cmZfaWQsIHBvcnQpOworCQlpZiAoc3RjYikKKwkJCSphYm9ydF9ub191bmxvY2sgPSAxOwor
CQlnb3RvIG91dG5vdzsKKwl9CisJaWYgKGluaXQtPm51bV9pbmJvdW5kX3N0cmVhbXMgPT0gMCkg
eworCQkvKiBwcm90b2NvbCBlcnJvci4uLiBzZW5kIGFib3J0ICovCisJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9JTlZBTElEX1BBUkFNLCAiIik7CisJCXNjdHBfYWJv
cnRfYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZs
b3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlm
IChzdGNiKQorCQkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCWdvdG8gb3V0bm93OworCX0KKwlp
ZiAoaW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMgPT0gMCkgeworCQkvKiBwcm90b2NvbCBlcnJv
ci4uLiBzZW5kIGFib3J0ICovCisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9D
QVVTRV9JTlZBTElEX1BBUkFNLCAiIik7CisJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oaW5wLCBz
dGNiLCBtLCBpcGhsZW4sIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJCSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2Vu
ZGlmCisJCQkJICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNiKQorCQkJKmFib3J0X25v
X3VubG9jayA9IDE7CisJCWdvdG8gb3V0bm93OworCX0KKwlpZiAoc2N0cF92YWxpZGF0ZV9pbml0
X2F1dGhfcGFyYW1zKG0sIG9mZnNldCArIHNpemVvZigqY3ApLAorCQkJCQkgICBvZmZzZXQgKyBu
dG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSkpIHsKKwkJLyogYXV0aCBwYXJhbWV0ZXIocykgZXJy
b3IuLi4gc2VuZCBhYm9ydCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIlByb2JsZW0gd2l0aCBBVVRIIHBhcmFtZXRlcnMiKTsKKwkJc2N0cF9hYm9ydF9h
c3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5
cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBv
cnQpOworCQlpZiAoc3RjYikKKwkJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlnb3RvIG91dG5v
dzsKKwl9CisJLyogV2UgYXJlIG9ubHkgYWNjZXB0aW5nIGlmIHdlIGhhdmUgYSBsaXN0ZW5pbmcg
c29ja2V0LiovCisJaWYgKChzdGNiID09IE5VTEwpICYmCisJICAgICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHx8CisJICAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgICAoIVNDVFBfSVNfTElT
VEVOSU5HKGlucCkpKSkgeworCQkvKgorCQkgKiBGSVggTUUgPz8gV2hhdCBhYm91dCBUQ1AgbW9k
ZWwgYW5kIHdlIGhhdmUgYQorCQkgKiBtYXRjaC9yZXN0YXJ0IGNhc2U/IEFjdHVhbGx5IG5vIGZp
eCBpcyBuZWVkZWQuCisJCSAqIHRoZSBsb29rdXAgd2lsbCBhbHdheXMgZmluZCB0aGUgZXhpc3Rp
bmcgYXNzb2Mgc28gc3RjYgorCQkgKiB3b3VsZCBub3QgYmUgTlVMTC4gSXQgbWF5IGJlIHF1ZXN0
aW9uYWJsZSB0byBkbyB0aGlzCisJCSAqIHNpbmNlIHdlIENPVUxEIGp1c3Qgc2VuZCBiYWNrIHRo
ZSBJTklULUFDSyBhbmQgaG9wZSB0aGF0CisJCSAqIHRoZSBhcHAgZGlkIGFjY2VwdCgpJ3MgYnkg
dGhlIHRpbWUgdGhlIENPT0tJRSB3YXMgc2VudC4gQnV0CisJCSAqIHRoZXJlIGlzIGEgcHJpY2Ug
dG8gcGF5IGZvciBDT09LSUUgZ2VuZXJhdGlvbiBhbmQgSSBkb24ndAorCQkgKiB3YW50IHRvIHBh
eSBpdCBvbiB0aGUgY2hhbmNlIHRoYXQgdGhlIGFwcCB3aWxsIGFjdHVhbGx5IGRvCisJCSAqIHNv
bWUgYWNjZXB0cygpLiBUaGUgQXBwIGp1c3QgbG9vc2VzIGFuZCBzaG91bGQgTk9UIGJlIGluCisJ
CSAqIHRoaXMgc3RhdGUgOi0pCisJCSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Js
YWNraG9sZSkgPT0gMCkgeworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiTm8gbGlzdGVuZXIiKTsKKwkJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNy
YywgZHN0LCBzaCwgMCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkJ
ICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCX0KKwkJZ290byBvdXRub3c7CisJfQor
CWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2Mp
ID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDMsICJzY3RwX2hhbmRsZV9pbml0OiBzZW5kaW5nIFNIVVRET1dOLUFDS1xuIik7CisJ
CXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgTlVMTCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0
KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0MsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJfSBlbHNlIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgInNjdHBfaGFu
ZGxlX2luaXQ6IHNlbmRpbmcgSU5JVC1BQ0tcbiIpOworCQlzY3RwX3NlbmRfaW5pdGlhdGVfYWNr
KGlucCwgc3RjYiwgbmV0LCBtLCBpcGhsZW4sIG9mZnNldCwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICBzcmMsIGRzdCwgc2gsIGNwLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwl9Cisgb3V0bm93OgorCWlmIChzdGNiID09
IE5VTEwpIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCX0KK30KKworLyoKKyAqIHByb2Nl
c3MgcGVlciAiSU5JVC9JTklULUFDSyIgY2h1bmsgcmV0dXJucyB2YWx1ZSA8IDAgb24gZXJyb3IK
KyAqLworCitpbnQKK3NjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1VOVVNFRAorI2VuZGlmCispCit7CisJaW50IHVu
c2VudF9kYXRhOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9w
ZW5kaW5nICpzcDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKworCS8qIFRoaXMg
ZnVuY3Rpb24gcmV0dXJucyBpZiBhbnkgc3RyZWFtIGhhcyB0cnVlIHVuc2VudCBkYXRhIG9uIGl0
LgorCSAqIE5vdGUgdGhhdCBhcyBpdCBsb29rcyB0aHJvdWdoIGl0IHdpbGwgY2xlYW4gdXAgYW55
IHBsYWNlcyB0aGF0CisJICogaGF2ZSBvbGQgZGF0YSB0aGF0IGhhcyBiZWVuIHNlbnQgYnV0IGxl
ZnQgYXQgdG9wIG9mIHN0cmVhbSBxdWV1ZS4KKwkgKi8KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJ
dW5zZW50X2RhdGEgPSAwOworCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwlpZiAoIXN0Y2It
PmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfZW1wdHkoc3RjYiwgYXNvYykpIHsKKwkJLyog
Q2hlY2sgdG8gc2VlIGlmIHNvbWUgZGF0YSBxdWV1ZWQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHN0
Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9S
WSovCisJCQlzcCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUp
OworCQkJaWYgKHNwID09IE5VTEwpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoc3At
Pm1zZ19pc19jb21wbGV0ZSkgJiYKKwkJCSAgICAoc3AtPmxlbmd0aCA9PSAwKSAgJiYKKwkJCSAg
ICAoc3AtPnNlbmRlcl9hbGxfZG9uZSkpIHsKKwkJCQkvKiBXZSBhcmUgZG9pbmcgZGlmZmVyZWQg
Y2xlYW51cC4gTGFzdAorCQkJCSAqIHRpbWUgdGhyb3VnaCB3aGVuIHdlIHRvb2sgYWxsIHRoZSBk
YXRhCisJCQkJICogdGhlIHNlbmRlcl9hbGxfZG9uZSB3YXMgbm90IHNldC4KKwkJCQkgKi8KKwkJ
CQlpZiAoc3AtPnB1dF9sYXN0X291dCA9PSAwKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJHYWssIHB1
dCBvdXQgZW50aXJlIG1zZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJCVNDVFBfUFJJTlRGKCJz
ZW5kZXJfZG9uZTolZCBsZW46JWQgbXNnX2NvbXA6JWQgcHV0X2xhc3Rfb3V0OiVkXG4iLAorCQkJ
CQkgICAgICAgICAgICBzcC0+c2VuZGVyX2FsbF9kb25lLAorCQkJCQkgICAgICAgICAgICBzcC0+
bGVuZ3RoLAorCQkJCQkgICAgICAgICAgICBzcC0+bXNnX2lzX2NvbXBsZXRlLAorCQkJCQkgICAg
ICAgICAgICBzcC0+cHV0X2xhc3Rfb3V0KTsKKwkJCQl9CisJCQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250LCAxKTsKKwkJCQlUQUlMUV9SRU1PVkUoJnN0
Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSwgc3AsIG5leHQpOworCQkJCXN0Y2ItPmFzb2Mu
c3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsICZhc29j
LT5zdHJtb3V0W2ldLCBzcCwgMSk7CisJCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCQlzcC0+bmV0ID0gTlVMTDsKKwkJCQl9CisJCQkJ
aWYgKHNwLT5kYXRhKSB7CisJCQkJCXNjdHBfbV9mcmVlbShzcC0+ZGF0YSk7CisJCQkJCXNwLT5k
YXRhID0gTlVMTDsKKwkJCQl9CisJCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19s
b2NrZWQpOworCQkJCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRx
dWV1ZSkpIHsKKwkJCQkJdW5zZW50X2RhdGErKzsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXVu
c2VudF9kYXRhKys7CisJCQl9CisJCQlpZiAodW5zZW50X2RhdGEgPiAwKSB7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwl9CisJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJcmV0dXJuICh1
bnNlbnRfZGF0YSk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfcHJvY2Vzc19pbml0KHN0cnVjdCBz
Y3RwX2luaXRfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNj
dHBfaW5pdCAqaW5pdDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qg
c2N0cF9uZXRzICpsbmV0OworCXVuc2lnbmVkIGludCBpOworCisJaW5pdCA9ICZjcC0+aW5pdDsK
Kwlhc29jID0gJnN0Y2ItPmFzb2M7CisJLyogc2F2ZSBvZmYgcGFyYW1ldGVycyAqLworCWFzb2Mt
PnBlZXJfdnRhZyA9IG50b2hsKGluaXQtPmluaXRpYXRlX3RhZyk7CisJYXNvYy0+cGVlcnNfcndu
ZCA9IG50b2hsKGluaXQtPmFfcnduZCk7CisJLyogaW5pdCB0c24ncyAqLworCWFzb2MtPmhpZ2hl
c3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5hc2NvbmZfc2VxX2luID0gbnRvaGwoaW5pdC0+aW5p
dGlhbF90c24pIC0gMTsKKworCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPm5ldHMpKSB7CisJCS8q
IHVwZGF0ZSBhbnkgc3N0aHJlc2gncyB0aGF0IG1heSBoYXZlIGEgZGVmYXVsdCAqLworCQlUQUlM
UV9GT1JFQUNIKGxuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJCWxuZXQtPnNzdGhy
ZXNoID0gYXNvYy0+cGVlcnNfcnduZDsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiAoU0NUUF9DV05EX01PTklUT1JfRU5BQkxFfFNDVFBfQ1dORF9MT0dHSU5H
X0VOQUJMRSkpIHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQsIDAsIFNDVFBfQ1dORF9J
TklUSUFMSVpBVElPTik7CisJCQl9CisKKwkJfQorCX0KKwlTQ1RQX1RDQl9TRU5EX0xPQ0soc3Rj
Yik7CisJaWYgKGFzb2MtPnByZV9vcGVuX3N0cmVhbXMgPiBudG9ocyhpbml0LT5udW1faW5ib3Vu
ZF9zdHJlYW1zKSkgeworCQl1bnNpZ25lZCBpbnQgbmV3Y250OworCQlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpvdXRzOworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsICpu
c3A7CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisKKwkJLyogYWJhbmRv
biB0aGUgdXBwZXIgc3RyZWFtcyAqLworCQluZXdjbnQgPSBudG9ocyhpbml0LT5udW1faW5ib3Vu
ZF9zdHJlYW1zKTsKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbmRfcXVldWUs
IHNjdHBfbmV4dCwgbmNoaykgeworCQkJaWYgKGNoay0+cmVjLmRhdGEuc2lkID49IG5ld2NudCkg
eworCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOwor
CQkJCWFzb2MtPnNlbmRfcXVldWVfY250LS07CisJCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5y
ZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJCWFzb2MtPnN0cm1vdXRb
Y2hrLT5yZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMtLTsKKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBz
aWQgJXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQkJfQorCQkJCWlmIChjaGst
PmRhdGEgIT0gTlVMTCkgeworCQkJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hr
LCAxKTsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMLCBz
dGNiLAorCQkJCQkgICAgICAgICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQkJCQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJ
CQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkJCX0KKwkJCQl9CisJCQkJc2N0cF9mcmVlX2FfY2h1
bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCS8qc2FfaWdub3JlIEZSRUVE
X01FTU9SWSovCisJCQl9CisJCX0KKwkJaWYgKGFzb2MtPnN0cm1vdXQpIHsKKwkJCWZvciAoaSA9
IG5ld2NudDsgaSA8IGFzb2MtPnByZV9vcGVuX3N0cmVhbXM7IGkrKykgeworCQkJCW91dHMgPSAm
YXNvYy0+c3RybW91dFtpXTsKKwkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRx
dWV1ZSwgbmV4dCwgbnNwKSB7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Mu
c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJCQkJCVRBSUxRX1JFTU9WRSgmb3V0cy0+b3V0cXVldWUs
IHNwLCBuZXh0KTsKKwkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVf
ZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgb3V0cywgc3AsIDEpOworCQkJCQlzY3RwX3VscF9ub3Rp
ZnkoU0NUUF9OT1RJRllfU1BFQ0lBTF9TUF9GQUlMLAorCQkJCQkgICAgc3RjYiwgMCwgc3AsIFND
VFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCWlmIChzcC0+ZGF0YSkgeworCQkJCQkJc2N0cF9tX2Zy
ZWVtKHNwLT5kYXRhKTsKKwkJCQkJCXNwLT5kYXRhID0gTlVMTDsKKwkJCQkJfQorCQkJCQlpZiAo
c3AtPm5ldCkgeworCQkJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5uZXQpOworCQkJCQkJ
c3AtPm5ldCA9IE5VTEw7CisJCQkJCX0KKwkJCQkJLyogRnJlZSB0aGUgY2h1bmsgKi8KKwkJCQkJ
c2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCQkv
KnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCQkJCX0KKwkJCQlvdXRzLT5zdGF0ZSA9IFNDVFBf
U1RSRUFNX0NMT1NFRDsKKwkJCX0KKwkJfQorCQkvKiBjdXQgYmFjayB0aGUgY291bnQgKi8KKwkJ
YXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9IG5ld2NudDsKKwl9CisJU0NUUF9UQ0JfU0VORF9VTkxP
Q0soc3RjYik7CisJYXNvYy0+c3RyZWFtb3V0Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtczsK
KwlpZiAoYXNvYy0+c3RybW91dCkgeworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0
Y250OyBpKyspIHsKKwkJCWFzb2MtPnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVO
OworCQl9CisJfQorCS8qIEVZIC0gbnJfc2FjazogaW5pdGlhbGl6ZSBoaWdoZXN0IHRzbiBpbiBu
cl9tYXBwaW5nX2FycmF5ICovCisJYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCA9IGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUFQX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21h
cCgwLCA1LCBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwLCBTQ1RQX01BUF9TTElERV9SRVNV
TFQpOworCX0KKwkvKiBUaGlzIGlzIHRoZSBuZXh0IG9uZSB3ZSBleHBlY3QgKi8KKwlhc29jLT5z
dHJfcmVzZXRfc2VxX2luID0gYXNvYy0+YXNjb25mX3NlcV9pbiArIDE7CisKKwlhc29jLT5tYXBw
aW5nX2FycmF5X2Jhc2VfdHNuID0gbnRvaGwoaW5pdC0+aW5pdGlhbF90c24pOworCWFzb2MtPnRz
bl9sYXN0X2RlbGl2ZXJlZCA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuID0gYXNvYy0+YXNjb25mX3Nl
cV9pbjsKKworCWFzb2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+bGFzdF9hY2tl
ZF9zZXE7CisJLyogb3BlbiB0aGUgcmVxdWVzdGVkIHN0cmVhbXMgKi8KKworCWlmIChhc29jLT5z
dHJtaW4gIT0gTlVMTCkgeworCQkvKiBGcmVlIHRoZSBvbGQgb25lcyAqLworCQlmb3IgKGkgPSAw
OyBpIDwgYXNvYy0+c3RyZWFtaW5jbnQ7IGkrKykgeworCQkJc2N0cF9jbGVhbl91cF9zdHJlYW0o
c3RjYiwgJmFzb2MtPnN0cm1pbltpXS5pbnF1ZXVlKTsKKwkJCXNjdHBfY2xlYW5fdXBfc3RyZWFt
KHN0Y2IsICZhc29jLT5zdHJtaW5baV0udW5vX2lucXVldWUpOworCQl9CisJCVNDVFBfRlJFRShh
c29jLT5zdHJtaW4sIFNDVFBfTV9TVFJNSSk7CisJfQorCWlmIChhc29jLT5tYXhfaW5ib3VuZF9z
dHJlYW1zID4gbnRvaHMoaW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMpKSB7CisJCWFzb2MtPnN0
cmVhbWluY250ID0gbnRvaHMoaW5pdC0+bnVtX291dGJvdW5kX3N0cmVhbXMpOworCX0gZWxzZSB7
CisJCWFzb2MtPnN0cmVhbWluY250ID0gYXNvYy0+bWF4X2luYm91bmRfc3RyZWFtczsKKwl9CisJ
U0NUUF9NQUxMT0MoYXNvYy0+c3RybWluLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4gKiwgYXNvYy0+
c3RyZWFtaW5jbnQgKgorCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9pbiksIFNDVFBf
TV9TVFJNSSk7CisJaWYgKGFzb2MtPnN0cm1pbiA9PSBOVUxMKSB7CisJCS8qIHdlIGRpZG4ndCBn
ZXQgbWVtb3J5IGZvciB0aGUgc3RyZWFtcyEgKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MiwgInByb2Nlc3NfaW5pdDogY291bGRuJ3QgZ2V0IG1lbW9yeSBmb3IgdGhlIHN0cmVhbXMhXG4i
KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJlYW1pbmNu
dDsgaSsrKSB7CisJCWFzb2MtPnN0cm1pbltpXS5zaWQgPSBpOworCQlhc29jLT5zdHJtaW5baV0u
bGFzdF9taWRfZGVsaXZlcmVkID0gMHhmZmZmZmZmZjsKKwkJVEFJTFFfSU5JVCgmYXNvYy0+c3Ry
bWluW2ldLmlucXVldWUpOworCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtaW5baV0udW5vX2lucXVl
dWUpOworCQlhc29jLT5zdHJtaW5baV0ucGRfYXBpX3N0YXJ0ZWQgPSAwOworCQlhc29jLT5zdHJt
aW5baV0uZGVsaXZlcnlfc3RhcnRlZCA9IDA7CisJfQorCS8qCisJICogbG9hZF9hZGRyZXNzX2Zy
b21faW5pdCB3aWxsIHB1dCB0aGUgYWRkcmVzc2VzIGludG8gdGhlCisJICogYXNzb2NpYXRpb24g
d2hlbiB0aGUgQ09PS0lFIGlzIHByb2Nlc3NlZCBvciB0aGUgSU5JVC1BQ0sgaXMKKwkgKiBwcm9j
ZXNzZWQuIEJvdGggdHlwZXMgb2YgQ09PS0lFJ3MgZXhpc3RpbmcgYW5kIG5ldyBjYWxsIHRoaXMK
KwkgKiByb3V0aW5lLiBJdCB3aWxsIHJlbW92ZSBhZGRyZXNzZXMgdGhhdCBhcmUgbm8gbG9uZ2Vy
IGluIHRoZQorCSAqIGFzc29jaWF0aW9uIChmb3IgdGhlIHJlc3RhcnRpbmcgY2FzZSB3aGVyZSBh
ZGRyZXNzZXMgYXJlCisJICogcmVtb3ZlZCkuIFVwIGZyb250IHdoZW4gdGhlIElOSVQgYXJyaXZl
cyB3ZSB3aWxsIGRpc2NhcmQgaXQgaWYgaXQKKwkgKiBpcyBhIHJlc3RhcnQgYW5kIG5ldyBhZGRy
ZXNzZXMgaGF2ZSBiZWVuIGFkZGVkLgorCSAqLworCS8qIHNhX2lnbm9yZSBNRU1MRUFLICovCisJ
cmV0dXJuICgwKTsKK30KKworLyoKKyAqIElOSVQtQUNLIG1lc3NhZ2UgcHJvY2Vzc2luZy9jb25z
dW1wdGlvbiByZXR1cm5zIHZhbHVlIDwgMCBvbiBlcnJvcgorICovCitzdGF0aWMgaW50CitzY3Rw
X3Byb2Nlc3NfaW5pdF9hY2soc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQs
CisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2Nr
YWRkciAqZHN0LCBzdHJ1Y3Qgc2N0cGhkciAqc2gsCisgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKmNwLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0X25vX3Vu
bG9jaywKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICB1aW50OF90IG1mbG93dHlw
ZSwgdWludDMyX3QgbWZsb3dpZCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgIHVpbnQz
Ml90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qg
bWJ1ZiAqb3BfZXJyOworCWludCByZXR2YWwsIGFib3J0X2ZsYWc7CisJdWludDMyX3QgaW5pdGFj
a19saW1pdDsKKwlpbnQgbmF0X2ZyaWVuZGx5ID0gMDsKKworCS8qIEZpcnN0IHZlcmlmeSB0aGF0
IHdlIGhhdmUgbm8gaWxsZWdhbCBwYXJhbSdzICovCisJYWJvcnRfZmxhZyA9IDA7CisKKwlvcF9l
cnIgPSBzY3RwX2FyZXRoZXJlX3VucmVjb2duaXplZF9wYXJhbWV0ZXJzKG0sCisJCQkJCQkgICAg
ICAgKG9mZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSksCisJCQkJCQkgICAg
ICAgJmFib3J0X2ZsYWcsIChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWNwLCAmbmF0X2ZyaWVuZGx5
KTsKKwlpZiAoYWJvcnRfZmxhZykgeworCQkvKiBTZW5kIGFuIGFib3J0IGFuZCBub3RpZnkgcGVl
ciAqLworCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG9w
X2VyciwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJl
dHVybiAoLTEpOworCX0KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJYXNvYy0+cGVlcl9zdXBwb3J0
c19uYXQgPSAodWludDhfdCluYXRfZnJpZW5kbHk7CisJLyogcHJvY2VzcyB0aGUgcGVlcidzIHBh
cmFtZXRlcnMgaW4gdGhlIElOSVQtQUNLICovCisJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQo
KHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKiljcCwgc3RjYik7CisJaWYgKHJldHZhbCA8IDApIHsK
KwkJcmV0dXJuIChyZXR2YWwpOworCX0KKwlpbml0YWNrX2xpbWl0ID0gb2Zmc2V0ICsgbnRvaHMo
Y3AtPmNoLmNodW5rX2xlbmd0aCk7CisJLyogbG9hZCBhbGwgYWRkcmVzc2VzICovCisJaWYgKChy
ZXR2YWwgPSBzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdGNiLCBtLAorCSAgICAob2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspKSwgaW5pdGFja19saW1pdCwKKwkg
ICAgc3JjLCBkc3QsIE5VTEwsIHN0Y2ItPmFzb2MucG9ydCkpKSB7CisJCW9wX2VyciA9IHNjdHBf
Z2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvYmxlbSB3aXRoIGFkZHJlc3MgcGFyYW1l
dGVycyIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLAorCQkJIkxvYWQgYWRkcmVzc2Vz
IGZyb20gSU5JVCBjYXVzZXMgYW4gYWJvcnQgJWRcbiIsCisJCQlyZXR2YWwpOworCQlzY3RwX2Fi
b3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAg
ICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNl
bmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFi
b3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBpZiB0aGUgcGVlciBk
b2Vzbid0IHN1cHBvcnQgYXNjb25mLCBmbHVzaCB0aGUgYXNjb25mIHF1ZXVlICovCisJaWYgKGFz
b2MtPmFzY29uZl9zdXBwb3J0ZWQgPT0gMCkgeworCQlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkciAq
cGFyYW0sICpucGFyYW07CisKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKHBhcmFtLCAmYXNvYy0+YXNj
b25mX3F1ZXVlLCBuZXh0LCBucGFyYW0pIHsKKwkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+YXNjb25m
X3F1ZXVlLCBwYXJhbSwgbmV4dCk7CisJCQlTQ1RQX0ZSRUUocGFyYW0sIFNDVFBfTV9BU0NfQURE
Uik7CisJCX0KKwl9CisKKwlzdGNiLT5hc29jLnBlZXJfaG1hY19pZCA9IHNjdHBfbmVnb3RpYXRl
X2htYWNpZChzdGNiLT5hc29jLnBlZXJfaG1hY3MsCisJICAgIHN0Y2ItPmFzb2MubG9jYWxfaG1h
Y3MpOworCWlmIChvcF9lcnIpIHsKKwkJc2N0cF9xdWV1ZV9vcF9lcnIoc3RjYiwgb3BfZXJyKTsK
KwkJLyogcXVldWluZyB3aWxsIHN0ZWFsIGF3YXkgdGhlIG1idWYgY2hhaW4gdG8gdGhlIG91dCBx
dWV1ZSAqLworCQlvcF9lcnIgPSBOVUxMOworCX0KKwkvKiBleHRyYWN0IHRoZSBjb29raWUgYW5k
IHF1ZXVlIGl0IHRvICJlY2hvIiBpdCBiYWNrLi4uICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJc2N0cF9t
aXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xFQVIsCisJCQkgICAgICAgc3RjYi0+YXNvYy5vdmVy
YWxsX2Vycm9yX2NvdW50LAorCQkJICAgICAgIDAsCisJCQkgICAgICAgU0NUUF9GUk9NX1NDVFBf
SU5QVVQsCisJCQkgICAgICAgX19MSU5FX18pOworCX0KKwlzdGNiLT5hc29jLm92ZXJhbGxfZXJy
b3JfY291bnQgPSAwOworCW5ldC0+ZXJyb3JfY291bnQgPSAwOworCisJLyoKKwkgKiBDYW5jZWwg
dGhlIElOSVQgdGltZXIsIFdlIGRvIHRoaXMgZmlyc3QgYmVmb3JlIHF1ZXVlaW5nIHRoZQorCSAq
IGNvb2tpZS4gV2UgYWx3YXlzIGNhbmNlbCBhdCB0aGUgcHJpbWFyeSB0byBhc3N1ZSB0aGF0IHdl
IGFyZQorCSAqIGNhbmNlbGluZyB0aGUgdGltZXIgc3RhcnRlZCBieSB0aGUgSU5JVCB3aGljaCBh
bHdheXMgZ29lcyB0byB0aGUKKwkgKiBwcmltYXJ5LgorCSAqLworCXNjdHBfdGltZXJfc3RvcChT
Q1RQX1RJTUVSX1RZUEVfSU5JVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgYXNvYy0+cHJp
bWFyeV9kZXN0aW5hdGlvbiwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18zKTsKKwor
CS8qIGNhbGN1bGF0ZSB0aGUgUlRPICovCisJbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9ydG8o
c3RjYiwgYXNvYywgbmV0LCAmYXNvYy0+dGltZV9lbnRlcmVkLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwlpZiAoc3RjYi0+c2N0cF9lcC0+cmVjdl9jYWxsYmFjaykgeworCQlpZiAoc3Rj
Yi0+c2N0cF9zb2NrZXQpIHsKKwkJCXVpbnQzMl90IGlucXVldWVfYnl0ZXMsIHNiX2ZyZWVfbm93
OworCQkJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCQkJaW5wID0gc3RjYi0+c2N0cF9lcDsK
KwkJCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0g
KHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRh
X2NodW5rKSk7CisJCQlzYl9mcmVlX25vdyA9IFNDVFBfU0JfTElNSVRfU05EKHN0Y2ItPnNjdHBf
c29ja2V0KSAtIChpbnF1ZXVlX2J5dGVzICsgc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YpOworCisJ
CQkvKiBjaGVjayBpZiB0aGUgYW1vdW50IGZyZWUgaW4gdGhlIHNlbmQgc29ja2V0IGJ1ZmZlciBj
cm9zc2VkIHRoZSB0aHJlc2hvbGQgKi8KKwkJCWlmIChpbnAtPnNlbmRfY2FsbGJhY2sgJiYKKwkJ
CSAgICAoKChpbnAtPnNlbmRfc2JfdGhyZXNob2xkID4gMCkgJiYKKwkJCSAgICAgIChzYl9mcmVl
X25vdyA+PSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkKSAmJgorCQkJICAgICAgKHN0Y2ItPmFzb2Mu
Y2h1bmtzX29uX291dF9xdWV1ZSA8PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19v
bl9xdWV1ZSkpKSB8fAorCQkJICAgICAoaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9PSAwKSkpIHsK
KwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJCQlpbnAtPnNlbmRfY2FsbGJhY2soc3RjYi0+c2N0cF9zb2NrZXQs
IHNiX2ZyZWVfbm93KTsKKwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCWF0b21pY19zdWJ0
cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgor
CXJldHZhbCA9IHNjdHBfc2VuZF9jb29raWVfZWNobyhtLCBvZmZzZXQsIHN0Y2IsIG5ldCk7CisJ
aWYgKHJldHZhbCA8IDApIHsKKwkJLyoKKwkJICogTm8gY29va2llLCB3ZSBwcm9iYWJseSBzaG91
bGQgc2VuZCBhIG9wIGVycm9yLiBCdXQgaW4gYW55CisJCSAqIGNhc2UgaWYgdGhlcmUgaXMgbm8g
Y29va2llIGluIHRoZSBJTklULUFDSywgd2UgY2FuCisJCSAqIGFiYW5kb24gdGhlIHBlZXIsIGl0
cyBicm9rZS4KKwkJICovCisJCWlmIChyZXR2YWwgPT0gLTMpIHsKKwkJCXVpbnQxNl90IGxlbjsK
KworCQkJbGVuID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfZXJyb3JfbWlzc2luZ19w
YXJhbSkgKyBzaXplb2YodWludDE2X3QpKTsKKwkJCS8qIFdlIGFib3J0IHdpdGggYW4gZXJyb3Ig
b2YgbWlzc2luZyBtYW5kYXRvcnkgcGFyYW0gKi8KKwkJCW9wX2VyciA9IHNjdHBfZ2V0X21idWZf
Zm9yX21zZyhsZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCWlmIChvcF9lcnIgIT0g
TlVMTCkgeworCQkJCXN0cnVjdCBzY3RwX2Vycm9yX21pc3NpbmdfcGFyYW0gKmNhdXNlOworCisJ
CQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSBsZW47CisJCQkJY2F1c2UgPSBtdG9kKG9wX2Vyciwg
c3RydWN0IHNjdHBfZXJyb3JfbWlzc2luZ19wYXJhbSAqKTsKKwkJCQkvKiBTdWJ0cmFjdCB0aGUg
cmVzZXJ2ZWQgcGFyYW0gKi8KKwkJCQljYXVzZS0+Y2F1c2UuY29kZSA9IGh0b25zKFNDVFBfQ0FV
U0VfTUlTU0lOR19QQVJBTSk7CisJCQkJY2F1c2UtPmNhdXNlLmxlbmd0aCA9IGh0b25zKGxlbik7
CisJCQkJY2F1c2UtPm51bV9taXNzaW5nX3BhcmFtcyA9IGh0b25sKDEpOworCQkJCWNhdXNlLT50
eXBlWzBdID0gaHRvbnMoU0NUUF9TVEFURV9DT09LSUUpOworCQkJfQorCQkJc2N0cF9hYm9ydF9h
c3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4sCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisJCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRp
ZgorCQkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCQkqYWJv
cnRfbm9fdW5sb2NrID0gMTsKKwkJfQorCQlyZXR1cm4gKHJldHZhbCk7CisJfQorCisJcmV0dXJu
ICgwKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX2hlYXJ0YmVhdF9hY2soc3RydWN0
IHNjdHBfaGVhcnRiZWF0X2NodW5rICpjcCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpyX25ldCwgKmZfbmV0OworCXN0cnVjdCB0aW1ldmFsIHR2OworCWlu
dCByZXFfcHJpbSA9IDA7CisJdWludDE2X3Qgb2xkX2Vycm9yX2NvdW50ZXI7CisKKwlpZiAobnRv
aHMoY3AtPmNoLmNodW5rX2xlbmd0aCkgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9j
aHVuaykpIHsKKwkJLyogSW52YWxpZCBsZW5ndGggKi8KKwkJcmV0dXJuOworCX0KKworCW1lbXNl
dCgmc3RvcmUsIDAsIHNpemVvZihzdG9yZSkpOworCXN3aXRjaCAoY3AtPmhlYXJ0YmVhdC5oYl9p
bmZvLmFkZHJfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGNw
LT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KSkgeworCQkJc3RvcmUuc2luLnNpbl9mYW1pbHkgPSBjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRk
cl9mYW1pbHk7CisjaWZkZWYgSEFWRV9TSU5fTEVOCisJCQlzdG9yZS5zaW4uc2luX2xlbiA9IGNw
LT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xlbjsKKyNlbmRpZgorCQkJc3RvcmUuc2luLnNpbl9w
b3J0ID0gc3RjYi0+cnBvcnQ7CisJCQltZW1jcHkoJnN0b3JlLnNpbi5zaW5fYWRkciwgY3AtPmhl
YXJ0YmVhdC5oYl9pbmZvLmFkZHJlc3MsCisJCQkgICAgICAgc2l6ZW9mKHN0b3JlLnNpbi5zaW5f
YWRkcikpOworCQl9IGVsc2UgeworCQkJcmV0dXJuOworCQl9CisJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoY3AtPmhlYXJ0YmVhdC5oYl9pbmZv
LmFkZHJfbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworCQkJc3RvcmUuc2lu
Ni5zaW42X2ZhbWlseSA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWlseTsKKyNpZmRl
ZiBIQVZFX1NJTjZfTEVOCisJCQlzdG9yZS5zaW42LnNpbjZfbGVuID0gY3AtPmhlYXJ0YmVhdC5o
Yl9pbmZvLmFkZHJfbGVuOworI2VuZGlmCisJCQlzdG9yZS5zaW42LnNpbjZfcG9ydCA9IHN0Y2It
PnJwb3J0OworCQkJbWVtY3B5KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgY3AtPmhlYXJ0YmVhdC5o
Yl9pbmZvLmFkZHJlc3MsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJfSBlbHNlIHsKKwkJ
CXJldHVybjsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwljYXNlIEFGX0NPTk46CisJCWlmIChjcC0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4g
PT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSkgeworCQkJc3RvcmUuc2Nvbm4uc2Nvbm5f
ZmFtaWx5ID0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLmFkZHJfZmFtaWx5OworI2lmZGVmIEhBVkVf
U0NPTk5fTEVOCisJCQlzdG9yZS5zY29ubi5zY29ubl9sZW4gPSBjcC0+aGVhcnRiZWF0LmhiX2lu
Zm8uYWRkcl9sZW47CisjZW5kaWYKKwkJCXN0b3JlLnNjb25uLnNjb25uX3BvcnQgPSBzdGNiLT5y
cG9ydDsKKwkJCW1lbWNweSgmc3RvcmUuc2Nvbm4uc2Nvbm5fYWRkciwgY3AtPmhlYXJ0YmVhdC5o
Yl9pbmZvLmFkZHJlc3MsIHNpemVvZih2b2lkICopKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybjsK
KwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJcl9uZXQg
PSBzY3RwX2ZpbmRuZXQoc3RjYiwgJnN0b3JlLnNhKTsKKwlpZiAocl9uZXQgPT0gTlVMTCkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiSHVoPyBJIGNhbid0IGZpbmQgdGhlIGFkZHJl
c3MgSSBzZW50IGl0IHRvLCBkaXNjYXJkXG4iKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHJfbmV0
ICYmIChyX25ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpICYmCisJICAg
IChyX25ldC0+aGVhcnRiZWF0X3JhbmRvbTEgPT0gY3AtPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRv
bV92YWx1ZTEpICYmCisJICAgIChyX25ldC0+aGVhcnRiZWF0X3JhbmRvbTIgPT0gY3AtPmhlYXJ0
YmVhdC5oYl9pbmZvLnJhbmRvbV92YWx1ZTIpKSB7CisJCS8qCisJCSAqIElmIHRoZSBpdHMgYSBI
QiBhbmQgaXQncyByYW5kb20gdmFsdWUgaXMgY29ycmVjdCB3aGVuIGNhbgorCQkgKiBjb25maXJt
IHRoZSBkZXN0aW5hdGlvbi4KKwkJICovCisJCXJfbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FE
RFJfVU5DT05GSVJNRUQ7CisJCWlmIChyX25ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRVFf
UFJJTUFSWSkgeworCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gcl9uZXQ7CisJ
CQlyX25ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFUV9QUklNQVJZOworCQkJZl9uZXQg
PSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJCWlmIChmX25ldCAhPSByX25ldCkg
eworCQkJCS8qIGZpcnN0IG9uZSBvbiB0aGUgbGlzdCBpcyBOT1QgdGhlIHByaW1hcnkKKwkJCQkg
KiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNpZW50IGlmCisJCQkJICogdGhlIHBy
aW1hcnkgaXMgdGhlIGZpcnN0IG9uIHRoZSBsaXN0LCBtYWtlIGl0CisJCQkJICogc28uCisJCQkJ
ICovCisJCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5hc29jLm5ldHMsIHJfbmV0LCBzY3RwX25leHQp
OworCQkJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsIHJfbmV0LCBzY3RwX25l
eHQpOworCQkJfQorCQkJcmVxX3ByaW0gPSAxOworCQl9CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVELAorCQkgICAgc3RjYiwgMCwgKHZvaWQgKilyX25l
dCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQ
RV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCSAgICAgICAgICAgICAgICByX25l
dCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ180KTsKKwkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCByX25ldCk7
CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1RI
UkVTSE9MRF9MT0dHSU5HKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFS
LAorCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCSAgICAgICAw
LAorCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJICAgICAgIF9fTElORV9fKTsK
Kwl9CisJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwlvbGRfZXJyb3JfY291
bnRlciA9IHJfbmV0LT5lcnJvcl9jb3VudDsKKwlyX25ldC0+ZXJyb3JfY291bnQgPSAwOworCXJf
bmV0LT5oYl9yZXNwb25kZWQgPSAxOworCXR2LnR2X3NlYyA9IGNwLT5oZWFydGJlYXQuaGJfaW5m
by50aW1lX3ZhbHVlXzE7CisJdHYudHZfdXNlYyA9IGNwLT5oZWFydGJlYXQuaGJfaW5mby50aW1l
X3ZhbHVlXzI7CisJLyogTm93IGxldHMgZG8gYSBSVE8gd2l0aCB0aGlzICovCisJcl9uZXQtPlJU
TyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCAmc3RjYi0+YXNvYywgcl9uZXQsICZ0diwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOwor
CWlmICghKHJfbmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKKwkJcl9u
ZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9VUCwgc3RjYiwKKwkJCQkwLCAodm9pZCAqKXJfbmV0LCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwlpZiAocl9uZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FE
RFJfUEYpIHsKKwkJcl9uZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJc3RjYi0+
YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9leGl0X3BmKHN0Y2IsIG5ldCk7CisJ
fQorCWlmIChvbGRfZXJyb3JfY291bnRlciA+IDApIHsKKwkJc2N0cF90aW1lcl9zdG9wKFNDVFBf
VElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICBz
dGNiLCByX25ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ181KTsKKwkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNi
LCByX25ldCk7CisJfQorCWlmIChyX25ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b24pIHsKKwkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkvKiByZWxlYXNlIHRoZSBh
bHRlcm5hdGUsIHByaW1hcnkgaXMgZ29vZCAqLworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0
Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCXN0Y2ItPmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwkJ
fQorCX0KKwkvKiBNb2JpbGl0eSBhZGFwdGF0aW9uICovCisJaWYgKHJlcV9wcmltKSB7CisJCWlm
ICgoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfQkFTRSkgfHwKKwkJICAgIHNj
dHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpKSAmJgorCQkgICAg
c2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpKSB7CisKKwkJ
CXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUFJJTV9ERUxFVEVELAorCQkJICAgICAg
ICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkgICAgICAgICAgICAgICAg
U0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ182KTsKKwkJCWlmIChzY3RwX2lzX21vYmls
aXR5X2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwKKwkJCQkJU0NUUF9NT0JJTElUWV9GQVNUSEFO
RE9GRikpIHsKKwkJCQlzY3RwX2Fzc29jX2ltbWVkaWF0ZV9yZXRyYW5zKHN0Y2IsCisJCQkJCXN0
Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQl9CisJCQlpZiAoc2N0cF9pc19tb2Jp
bGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCQkJCVNDVFBfTU9CSUxJVFlfQkFTRSkp
IHsKKwkJCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsCisJCQkJCXN0Y2ItPmFzb2Mu
ZGVsZXRlZF9wcmltYXJ5KTsKKwkJCX0KKwkJCXNjdHBfZGVsZXRlX3ByaW1fdGltZXIoc3RjYi0+
c2N0cF9lcCwgc3RjYiwKKwkJCQkJc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkpOworCQl9CisJ
fQorfQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9uYXRfY29sbGlkaW5nX3N0YXRlKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYikKK3sKKwkvKiByZXR1cm4gMCBtZWFucyB3ZSB3YW50IHlvdSB0byBw
cm9jZWVkIHdpdGggdGhlIGFib3J0CisJICogbm9uLXplcm8gbWVhbnMgbm8gYWJvcnQgcHJvY2Vz
c2luZworCSovCisJc3RydWN0IHNjdHBhc29jaGVhZCAqaGVhZDsKKworCWlmICgoU0NUUF9HRVRf
U1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgIChT
Q1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkg
eworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCX0K
KwlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpIHsKKwkJLyogZ2VuZXJhdGUgYSBuZXcgdnRhZyBhbmQgc2VuZCBpbml0ICovCisJCUxJU1Rf
UkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOworCQlzdGNiLT5hc29jLm15X3Z0YWcgPSBzY3RwX3Nl
bGVjdF9hX3RhZyhzdGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNi
LT5ycG9ydCwgMSk7CisJCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NU
UF9QQ0JIQVNIX0FTT0Moc3RjYi0+YXNvYy5teV92dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNv
Y21hcmspKV07CisJCS8qIHB1dCBpdCBpbiB0aGUgYnVja2V0IGluIHRoZSB2dGFnIGhhc2ggb2Yg
YXNzb2MncyBmb3IgdGhlIHN5c3RlbSAqLworCQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIHN0Y2Is
IHNjdHBfYXNvY3MpOworCQlzY3RwX3NlbmRfaW5pdGlhdGUoc3RjYi0+c2N0cF9lcCwgc3RjYiwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisJCXJldHVy
biAoMSk7CisJfQorCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFU
RV9DT09LSUVfRUNIT0VEKSB7CisJCS8qIHRyZWF0IGxpa2UgYSBjYXNlIHdoZXJlIHRoZSBjb29r
aWUgZXhwaXJlZCBpLmUuOgorCQkqIC0gZHVtcCBjdXJyZW50IGNvb2tpZS4KKwkJKiAtIGdlbmVy
YXRlIGEgbmV3IHZ0YWcuCisJCSogLSByZXNlbmQgaW5pdC4KKwkJKi8KKwkJLyogZ2VuZXJhdGUg
YSBuZXcgdnRhZyBhbmQgc2VuZCBpbml0ICovCisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNv
Y3MpOworCQlzdGNiLT5hc29jLnN0YXRlICY9IH5TQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQ7CisJ
CXN0Y2ItPmFzb2Muc3RhdGUgfD0gU0NUUF9TVEFURV9DT09LSUVfV0FJVDsKKwkJc2N0cF9zdG9w
X2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOworCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RjYiwg
JnN0Y2ItPmFzb2MpOworCQlzdGNiLT5hc29jLm15X3Z0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhz
dGNiLT5zY3RwX2VwLCBzdGNiLT5zY3RwX2VwLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgIDEp
OworCQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpW1NDVFBfUENCSEFTSF9B
U09DKHN0Y2ItPmFzb2MubXlfdnRhZywgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOwor
CQkvKiBwdXQgaXQgaW4gdGhlIGJ1Y2tldCBpbiB0aGUgdnRhZyBoYXNoIG9mIGFzc29jJ3MgZm9y
IHRoZSBzeXN0ZW0gKi8KKwkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fzb2Nz
KTsKKwkJc2N0cF9zZW5kX2luaXRpYXRlKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQlyZXR1cm4gKDEpOworCX0K
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19z
dGF0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQpCit7CisJLyogcmV0dXJuIDAgbWVhbnMgd2Ugd2FudCB5b3UgdG8gcHJvY2VlZCB3aXRoIHRo
ZSBhYm9ydAorCSAqIG5vbi16ZXJvIG1lYW5zIG5vIGFib3J0IHByb2Nlc3NpbmcKKwkgKi8KKwlp
ZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsICJzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZTogUGVlciBkb2VzIG5vdCBz
dXBwb3J0IEFVVEgsIGNhbm5vdCBzZW5kIGFuIGFzY29uZlxuIik7CisJCXJldHVybiAoMCk7CisJ
fQorCXNjdHBfYXNjb25mX3NlbmRfbmF0X3N0YXRlX3VwZGF0ZShzdGNiLCBuZXQpOworCXJldHVy
biAoMSk7Cit9CisKKworLyogUmV0dXJucyAxIGlmIHRoZSBzdGNiIHdhcyBhYm9ydGVkLCAwIG90
aGVyd2lzZSAqLworc3RhdGljIGludAorc2N0cF9oYW5kbGVfYWJvcnQoc3RydWN0IHNjdHBfYWJv
cnRfY2h1bmsgKmFib3J0LAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
bmV0cyAqbmV0KQoreworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisJdWludDE2X3QgbGVu
OworCXVpbnQxNl90IGVycm9yOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgInNjdHBf
aGFuZGxlX2Fib3J0OiBoYW5kbGluZyBBQk9SVFxuIik7CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJ
cmV0dXJuICgwKTsKKworCWxlbiA9IG50b2hzKGFib3J0LT5jaC5jaHVua19sZW5ndGgpOworCWlm
IChsZW4gPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0
cF9lcnJvcl9jYXVzZSkpIHsKKwkJLyogTmVlZCB0byBjaGVjayB0aGUgY2F1c2UgY29kZXMgZm9y
IG91cgorCQkgKiB0d28gbWFnaWMgbmF0IGFib3J0cyB3aGljaCBkb24ndCBraWxsIHRoZSBhc3Nv
YworCQkgKiBuZWNlc3NhcmlseS4KKwkJICovCisJCXN0cnVjdCBzY3RwX2Vycm9yX2NhdXNlICpj
YXVzZTsKKworCQljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKShhYm9ydCArIDEp
OworCQllcnJvciA9IG50b2hzKGNhdXNlLT5jb2RlKTsKKwkJaWYgKGVycm9yID09IFNDVFBfQ0FV
U0VfTkFUX0NPTExJRElOR19TVEFURSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwg
IlJlY2VpdmVkIENvbGxpZGluZyBzdGF0ZSBhYm9ydCBmbGFnczoleFxuIiwKKwkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFib3J0LT5jaC5jaHVua19mbGFncyk7CisJCQlpZiAoc2N0cF9o
YW5kbGVfbmF0X2NvbGxpZGluZ19zdGF0ZShzdGNiKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9
CisJCX0gZWxzZSBpZiAoZXJyb3IgPT0gU0NUUF9DQVVTRV9OQVRfTUlTU0lOR19TVEFURSkgewor
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3RhdGUgYWJv
cnQgZmxhZ3M6JXhcbiIsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBhYm9ydC0+Y2gu
Y2h1bmtfZmxhZ3MpOworCQkJaWYgKHNjdHBfaGFuZGxlX25hdF9taXNzaW5nX3N0YXRlKHN0Y2Is
IG5ldCkpIHsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJZXJyb3Ig
PSAwOworCX0KKwkvKiBzdG9wIGFueSByZWNlaXZlIHRpbWVycyAqLworCXNjdHBfdGltZXJfc3Rv
cChTQ1RQX1RJTUVSX1RZUEVfUkVDViwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAgICAg
ICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzcpOworCS8qIG5vdGlm
eSB1c2VyIG9mIHRoZSBhYm9ydCBhbmQgY2xlYW4gdXAuLi4gKi8KKwlzY3RwX2Fib3J0X25vdGlm
aWNhdGlvbihzdGNiLCAxLCBlcnJvciwgYWJvcnQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJLyog
ZnJlZSB0aGUgdGNiICovCisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQp
OworCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikg
fHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRE
T1dOX1JFQ0VJVkVEKSkgeworCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3Rh
Yik7CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJc2N0cF9wcmludF9vdXRfdHJh
Y2tfbG9nKHN0Y2IpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsK
KwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgor
CXN0Y2ItPmFzb2Muc3RhdGUgfD0gU0NUUF9TVEFURV9XQVNfQUJPUlRFRDsKKwkodm9pZClzY3Rw
X2ZyZWVfYXNzb2Moc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCSAg
ICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfOCk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKKyNlbmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJzY3RwX2hh
bmRsZV9hYm9ydDogZmluaXNoZWRcbiIpOworCXJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX3N0YXJ0X25ldF90aW1lcnMoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXVpbnQz
Ml90IGNudF9oYl9zZW50OworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCWNudF9oYl9zZW50
ID0gMDsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisJCS8qIEZvciBlYWNoIG5ldHdvcmsgc3RhcnQ6CisJCSAqIDEpIEEgcG10dSB0aW1lci4KKwkJ
ICogMikgQSBIQiB0aW1lcgorCQkgKiAzKSBJZiB0aGUgZGVzdCBpbiB1bmNvbmZpcm1lZCBzZW5k
CisJCSAqICAgIGEgaGIgYXMgd2VsbCBpZiB1bmRlciBtYXhfaGJfYnVyc3QgaGF2ZQorCQkgKiAg
ICBiZWVuIHNlbnQuCisJCSAqLworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9Q
QVRITVRVUkFJU0UsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsK
KwkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpICYmCisJCSAg
ICAoY250X2hiX3NlbnQgPCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGJfbWF4YnVyc3QpKSkgewor
CQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCWNudF9o
Yl9zZW50Kys7CisJCX0KKwl9CisJaWYgKGNudF9oYl9zZW50KSB7CisJCXNjdHBfY2h1bmtfb3V0
cHV0KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJICBTQ1RQX09VVFBVVF9GUk9NX0NPT0tJRV9B
Q0ssCisJCQkJICBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KK30KKworCitzdGF0aWMgdm9pZAor
c2N0cF9oYW5kbGVfc2h1dGRvd24oc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKmNwLAorICAg
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgKmFib3J0
X2ZsYWcpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJaW50IHNvbWVfb25f
c3RyZWFtd2hlZWw7CisJaW50IG9sZF9zdGF0ZTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRp
ZgorCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX3NodXRkb3du
OiBoYW5kbGluZyBTSFVURE9XTlxuIik7CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOwor
CWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBf
U1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCXJldHVybjsKKwl9CisJaWYgKG50b2hzKGNwLT5j
aC5jaHVua19sZW5ndGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVuaykpIHsK
KwkJLyogU2h1dGRvd24gTk9UIHRoZSBleHBlY3RlZCBzaXplICovCisJCXJldHVybjsKKwl9CisJ
b2xkX3N0YXRlID0gU0NUUF9HRVRfU1RBVEUoYXNvYyk7CisJc2N0cF91cGRhdGVfYWNrZWQoc3Rj
YiwgY3AsIGFib3J0X2ZsYWcpOworCWlmICgqYWJvcnRfZmxhZykgeworCQlyZXR1cm47CisJfQor
CWlmIChhc29jLT5jb250cm9sX3BkYXBpKSB7CisJCS8qIFdpdGggYSBub3JtYWwgc2h1dGRvd24K
KwkJICogd2UgYXNzdW1lIHRoZSBlbmQgb2YgbGFzdCByZWNvcmQuCisJCSAqLworCQlTQ1RQX0lO
UF9SRUFEX0xPQ0soc3RjYi0+c2N0cF9lcCk7CisJCWlmIChhc29jLT5jb250cm9sX3BkYXBpLT5v
bl9zdHJtX3EpIHsKKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybTsKKworCQkJc3RybSA9
ICZhc29jLT5zdHJtaW5bYXNvYy0+Y29udHJvbF9wZGFwaS0+c2luZm9fc3RyZWFtXTsKKwkJCWlm
IChhc29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EgPT0gU0NUUF9PTl9VTk9SREVSRUQpIHsK
KwkJCQkvKiBVbm9yZGVyZWQgKi8KKwkJCQlUQUlMUV9SRU1PVkUoJnN0cm0tPnVub19pbnF1ZXVl
LCBhc29jLT5jb250cm9sX3BkYXBpLCBuZXh0X2luc3RybSk7CisJCQkJYXNvYy0+Y29udHJvbF9w
ZGFwaS0+b25fc3RybV9xID0gMDsKKwkJCX0gZWxzZSBpZiAoYXNvYy0+Y29udHJvbF9wZGFwaS0+
b25fc3RybV9xID09IFNDVFBfT05fT1JERVJFRCkgeworCQkJCS8qIE9yZGVyZWQgKi8KKwkJCQlU
QUlMUV9SRU1PVkUoJnN0cm0tPmlucXVldWUsIGFzb2MtPmNvbnRyb2xfcGRhcGksIG5leHRfaW5z
dHJtKTsKKwkJCQlhc29jLT5jb250cm9sX3BkYXBpLT5vbl9zdHJtX3EgPSAwOworI2lmZGVmIElO
VkFSSUFOVFMKKwkJCX0gZWxzZSB7CisJCQkJcGFuaWMoIlVua25vd24gc3RhdGUgb24gY3RybDol
cCBvbl9zdHJtX3E6JWQiLAorCQkJCSAgICAgIGFzb2MtPmNvbnRyb2xfcGRhcGksCisJCQkJICAg
ICAgYXNvYy0+Y29udHJvbF9wZGFwaS0+b25fc3RybV9xKTsKKyNlbmRpZgorCQkJfQorCQl9CisJ
CWFzb2MtPmNvbnRyb2xfcGRhcGktPmVuZF9hZGRlZCA9IDE7CisJCWFzb2MtPmNvbnRyb2xfcGRh
cGktPnBkYXBpX2Fib3J0ZWQgPSAxOworCQlhc29jLT5jb250cm9sX3BkYXBpID0gTlVMTDsKKwkJ
U0NUUF9JTlBfUkVBRF9VTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisjaWYgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXNvID0gU0NUUF9JTlBfU08o
c3RjYi0+c2N0cF9lcCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJ
CVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9T
T0NLRVQpIHsKKwkJCS8qIGFzc29jIHdhcyBmcmVlZCB3aGlsZSB3ZSB3ZXJlIHVubG9ja2VkICov
CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYK
KwkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0KSB7CisJCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3Rw
X2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAx
KTsKKyNlbmRpZgorCX0KKwkvKiBnb3RvIFNIVVRET1dOX1JFQ0VJVkVEIHN0YXRlIHRvIGJsb2Nr
IG5ldyByZXF1ZXN0cyAqLworCWlmIChzdGNiLT5zY3RwX3NvY2tldCkgeworCQlpZiAoKFNDVFBf
R0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJCSAg
ICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkg
JiYKKwkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NF
TlQpKSB7CisJCQlTQ1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJ
VkVEKTsKKwkJCVNDVFBfQ0xFQVJfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9Q
RU5ESU5HKTsKKwkJCS8qIG5vdGlmeSB1cHBlciBsYXllciB0aGF0IHBlZXIgaGFzIGluaXRpYXRl
ZCBhIHNodXRkb3duICovCisJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfUEVFUl9TSFVU
RE9XTiwgc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKworCQkJLyogcmVzZXQg
dGltZSAqLworCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRpbWVfZW50ZXJl
ZCk7CisJCX0KKwl9CisJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hV
VERPV05fU0VOVCkgeworCQkvKgorCQkgKiBzdG9wIHRoZSBzaHV0ZG93biB0aW1lciwgc2luY2Ug
d2UgV0lMTCBtb3ZlIHRvCisJCSAqIFNIVVRET1dOLUFDSy1TRU5ULgorCQkgKi8KKwkJc2N0cF90
aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwK
KwkJICAgICAgICAgICAgICAgIG5ldCwgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ185
KTsKKwl9CisJLyogTm93IGlzIHRoZXJlIHVuc2VudCBkYXRhIG9uIGEgc3RyZWFtIHNvbWV3aGVy
ZT8gKi8KKwlzb21lX29uX3N0cmVhbXdoZWVsID0gc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShz
dGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCisJaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2Vu
ZF9xdWV1ZSkgfHwKKwkgICAgIVRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAorCSAg
ICBzb21lX29uX3N0cmVhbXdoZWVsKSB7CisJCS8qIEJ5IHJldHVybmluZyB3ZSB3aWxsIHB1c2gg
bW9yZSBkYXRhIG91dCAqLworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJLyogbm8gb3V0c3RhbmRp
bmcgZGF0YSB0byBzZW5kLCBzbyBtb3ZlIG9uLi4uICovCisJCS8qIHNlbmQgU0hVVERPV04tQUNL
ICovCisJCS8qIG1vdmUgdG8gU0hVVERPV04tQUNLLVNFTlQgc3RhdGUgKi8KKwkJaWYgKChTQ1RQ
X0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCVNDVFBf
U1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJfQorCQlTQ1RQX0NMRUFSX1NV
QlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCWlmIChTQ1RQX0dF
VF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSB7CisJCQlTQ1RQ
X1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKTsKKwkJCXNjdHBf
c3RvcF90aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJc2N0cF9zZW5kX3NodXRkb3duX2Fj
ayhzdGNiLCBuZXQpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERP
V05BQ0ssCisJCQkgICAgICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJ
CX0gZWxzZSBpZiAob2xkX3N0YXRlID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHsK
KwkJCXNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RjYiwgbmV0KTsKKwkJfQorCX0KK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfaGFuZGxlX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9h
Y2tfY2h1bmsgKmNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc3RydWN0IHNv
Y2tldCAqc287CisKKwlzbyA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworI2VuZGlmCisJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX3NodXRkb3duX2Fjazog
aGFuZGxpbmcgU0hVVERPV04gQUNLXG4iKTsKKwlpZiAoc3RjYiA9PSBOVUxMKQorCQlyZXR1cm47
CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJLyogcHJvY2VzcyBhY2NvcmRpbmcgdG8gYXNzb2Np
YXRpb24gc3RhdGUgKi8KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVf
Q09PS0lFX1dBSVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRF
X0NPT0tJRV9FQ0hPRUQpKSB7CisJCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQUNLLi4uIGRvIE9P
VEIgaGFuZGxpbmcuLi4gKi8KKwkJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0Y2IsIG5l
dCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoKFND
VFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkgICAg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7
CisJCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQUNLLi4uIHNvIGlnbm9yZS4uLiAqLworCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCXJldHVybjsKKwl9CisJaWYgKGFzb2MtPmNvbnRyb2xfcGRh
cGkpIHsKKwkJLyogV2l0aCBhIG5vcm1hbCBzaHV0ZG93bgorCQkgKiB3ZSBhc3N1bWUgdGhlIGVu
ZCBvZiBsYXN0IHJlY29yZC4KKwkJICovCisJCVNDVFBfSU5QX1JFQURfTE9DSyhzdGNiLT5zY3Rw
X2VwKTsKKwkJYXNvYy0+Y29udHJvbF9wZGFwaS0+ZW5kX2FkZGVkID0gMTsKKwkJYXNvYy0+Y29u
dHJvbF9wZGFwaS0+cGRhcGlfYWJvcnRlZCA9IDE7CisJCWFzb2MtPmNvbnRyb2xfcGRhcGkgPSBO
VUxMOworCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJYXRvbWljX2Fk
ZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRv
bWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkgeworCQkJLyogYXNzb2Mgd2FzIGZy
ZWVkIHdoaWxlIHdlIHdlcmUgdW5sb2NrZWQgKi8KKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywg
MSk7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlzY3RwX3Nvcndha2V1cChzdGNiLT5zY3Rw
X2VwLCBzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Cisj
ZW5kaWYKKwl9CisjaWZkZWYgSU5WQVJJQU5UUworCWlmICghVEFJTFFfRU1QVFkoJmFzb2MtPnNl
bmRfcXVldWUpIHx8CisJICAgICFUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkgfHwKKwkg
ICAgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpKSB7
CisJCXBhbmljKCJRdWV1ZXMgYXJlIG5vdCBlbXB0eSB3aGVuIGhhbmRsaW5nIFNIVVRET1dOLUFD
SyIpOworCX0KKyNlbmRpZgorCS8qIHN0b3AgdGhlIHRpbWVyICovCisJc2N0cF90aW1lcl9zdG9w
KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTiwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzEwKTsKKwkvKiBz
ZW5kIFNIVVRET1dOLUNPTVBMRVRFICovCisJc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0
Y2IsIG5ldCwgMCk7CisJLyogbm90aWZ5IHVwcGVyIGxheWVyIHByb3RvY29sICovCisJaWYgKHN0
Y2ItPnNjdHBfc29ja2V0KSB7CisJCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCQlzdGNiLT5zY3RwX3NvY2tldC0+
c29fc25kLnNiX2NjID0gMDsKKwkJfQorCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNT
T0NfRE9XTiwgc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX3NodXRkb3duKTsKKwkvKiBmcmVlIHRoZSBUQ0IgYnV0
IGZpcnN0IHNhdmUgb2ZmIHRoZSBlcCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCVNDVFBfU09DS0VUX0xPQ0soc28s
IDEpOworCVNDVFBfVENCX0xPQ0soc3RjYik7CisJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkgICAgICBTQ1RQX0ZST01fU0NUUF9J
TlBVVCArIFNDVFBfTE9DXzExKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlm
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3Byb2Nlc3NfdW5yZWNvZ19jaHVuayhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgY2h1bmtfdHlwZSwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQpCit7CisJc3dpdGNoIChjaHVua190eXBlKSB7CisJY2FzZSBTQ1RQX0FTQ09ORl9BQ0s6CisJ
Y2FzZSBTQ1RQX0FTQ09ORjoKKwkJc2N0cF9hc2NvbmZfY2xlYW51cChzdGNiLCBuZXQpOworCQli
cmVhazsKKwljYXNlIFNDVFBfSUZPUldBUkRfQ1VNX1RTTjoKKwljYXNlIFNDVFBfRk9SV0FSRF9D
VU1fVFNOOgorCQlzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAorCQkJIlBlZXIgZG9lcyBub3Qg
c3VwcG9ydCBjaHVuayB0eXBlICVkICgweCV4KS5cbiIsCisJCQljaHVua190eXBlLCBjaHVua190
eXBlKTsKKwkJYnJlYWs7CisJfQorfQorCisvKgorICogU2tpcCBwYXN0IHRoZSBwYXJhbSBoZWFk
ZXIgYW5kIHRoZW4gd2Ugd2lsbCBmaW5kIHRoZSBwYXJhbSB0aGF0IGNhdXNlZCB0aGUKKyAqIHBy
b2JsZW0uICBUaGVyZSBhcmUgYSBudW1iZXIgb2YgcGFyYW0ncyBpbiBhIEFTQ09ORiBPUiB0aGUg
cHJzY3RwIHBhcmFtCisgKiB0aGVzZSB3aWxsIHR1cm4gb2Ygc3BlY2lmaWMgZmVhdHVyZXMuCisg
KiBYWFg6IElzIHRoaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvPworICovCitzdGF0aWMgdm9pZAor
c2N0cF9wcm9jZXNzX3VucmVjb2dfcGFyYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MTZf
dCBwYXJhbWV0ZXJfdHlwZSkKK3sKKwlzd2l0Y2ggKHBhcmFtZXRlcl90eXBlKSB7CisJCS8qIHBy
LXNjdHAgZHJhZnQgKi8KKwljYXNlIFNDVFBfUFJTQ1RQX1NVUFBPUlRFRDoKKwkJc3RjYi0+YXNv
Yy5wcnNjdHBfc3VwcG9ydGVkID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NVUFBPUlRFRF9D
SFVOS19FWFQ6CisJCWJyZWFrOworCQkvKiBkcmFmdC1pZXRmLXRzdndnLWFkZGlwLXNjdHAgKi8K
KwljYXNlIFNDVFBfSEFTX05BVF9TVVBQT1JUOgorCSAgICAgICAgc3RjYi0+YXNvYy5wZWVyX3N1
cHBvcnRzX25hdCA9IDA7CisJICAgICAgICBicmVhazsKKwljYXNlIFNDVFBfQUREX0lQX0FERFJF
U1M6CisJY2FzZSBTQ1RQX0RFTF9JUF9BRERSRVNTOgorCWNhc2UgU0NUUF9TRVRfUFJJTV9BRERS
OgorCQlzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPSAwOworCQlicmVhazsKKwljYXNlIFND
VFBfU1VDQ0VTU19SRVBPUlQ6CisJY2FzZSBTQ1RQX0VSUk9SX0NBVVNFX0lORDoKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMiwgIkh1aCwgdGhlIHBlZXIgZG9lcyBub3Qgc3VwcG9ydCBzdWNj
ZXNzPyBvciBlcnJvciBjYXVzZT9cbiIpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLAor
CQkJIlR1cm5pbmcgb2ZmIEFTQ09ORiB0byB0aGlzIHN0cmFuZ2UgcGVlclxuIik7CisJCXN0Y2It
PmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCQkiUGVlciBkb2VzIG5vdCBzdXBwb3J0IHBhcmFtIHR5
cGUgJWQgKDB4JXgpPz9cbiIsCisJCQlwYXJhbWV0ZXJfdHlwZSwgcGFyYW1ldGVyX3R5cGUpOwor
CQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxlX2Vycm9yKHN0cnVjdCBz
Y3RwX2NodW5raGRyICpjaCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50MzJfdCBsaW1pdCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9lcnJvcl9jYXVzZSAqY2F1c2U7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJ
dWludDMyX3QgcmVtYWluaW5nX2xlbmd0aCwgYWRqdXN0OworCXVpbnQxNl90IGNvZGUsIGNhdXNl
X2NvZGUsIGNhdXNlX2xlbmd0aDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisJLyog
cGFyc2UgdGhyb3VnaCBhbGwgb2YgdGhlIGVycm9ycyBhbmQgcHJvY2VzcyAqLworCWFzb2MgPSAm
c3RjYi0+YXNvYzsKKwljYXVzZSA9IChzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSAqKSgoY2FkZHJf
dCljaCArCisJICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikpOworCXJlbWFpbmluZ19s
ZW5ndGggPSBudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKTsKKwlpZiAocmVtYWluaW5nX2xlbmd0aCA+
IGxpbWl0KSB7CisJCXJlbWFpbmluZ19sZW5ndGggPSBsaW1pdDsKKwl9CisJaWYgKHJlbWFpbmlu
Z19sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkgeworCQlyZW1haW5pbmdf
bGVuZ3RoIC09IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJfSBlbHNlIHsKKwkJcmVt
YWluaW5nX2xlbmd0aCA9IDA7CisJfQorCWNvZGUgPSAwOworCXdoaWxlIChyZW1haW5pbmdfbGVu
Z3RoID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9jYXVzZSkpIHsKKwkJLyogUHJvY2VzcyBh
biBFcnJvciBDYXVzZSAqLworCQljYXVzZV9jb2RlID0gbnRvaHMoY2F1c2UtPmNvZGUpOworCQlj
YXVzZV9sZW5ndGggPSBudG9ocyhjYXVzZS0+bGVuZ3RoKTsKKwkJaWYgKChjYXVzZV9sZW5ndGgg
PiByZW1haW5pbmdfbGVuZ3RoKSB8fCAoY2F1c2VfbGVuZ3RoID09IDApKSB7CisJCQkvKiBJbnZh
bGlkIGNhdXNlIGxlbmd0aCwgcG9zc2libHkgZHVlIHRvIHRydW5jYXRpb24uICovCisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAiQm9ndXMgbGVuZ3RoIGluIGNhdXNlIC0gYnl0ZXMgbGVm
dDogJXUgY2F1c2UgbGVuZ3RoOiAldVxuIiwKKwkJCQlyZW1haW5pbmdfbGVuZ3RoLCBjYXVzZV9s
ZW5ndGgpOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlpZiAoY29kZSA9PSAwKSB7CisJCQkvKiBy
ZXBvcnQgdGhlIGZpcnN0IGVycm9yIGNhdXNlICovCisJCQljb2RlID0gY2F1c2VfY29kZTsKKwkJ
fQorCQlzd2l0Y2ggKGNhdXNlX2NvZGUpIHsKKwkJY2FzZSBTQ1RQX0NBVVNFX0lOVkFMSURfU1RS
RUFNOgorCQljYXNlIFNDVFBfQ0FVU0VfTUlTU0lOR19QQVJBTToKKwkJY2FzZSBTQ1RQX0NBVVNF
X0lOVkFMSURfUEFSQU06CisJCWNhc2UgU0NUUF9DQVVTRV9OT19VU0VSX0RBVEE6CisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAiU29mdHdhcmUgZXJyb3Igd2UgZ290IGEgJXUgYmFjaz8g
V2UgaGF2ZSBhIGJ1ZyA6LyAob3IgZG8gdGhleT8pXG4iLAorCQkJCWNhdXNlX2NvZGUpOworCQkJ
YnJlYWs7CisJCWNhc2UgU0NUUF9DQVVTRV9OQVRfQ09MTElESU5HX1NUQVRFOgorCQkgICAgICAg
IFNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJSZWNlaXZlZCBDb2xsaWRpbmcgc3RhdGUgYWJv
cnQgZmxhZ3M6ICV4XG4iLAorCQkJCWNoLT5jaHVua19mbGFncyk7CisJCQlpZiAoc2N0cF9oYW5k
bGVfbmF0X2NvbGxpZGluZ19zdGF0ZShzdGNiKSkgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX05BVF9NSVNTSU5HX1NUQVRFOgorCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlJlY2VpdmVkIG1pc3Npbmcgc3RhdGUgYWJvcnQgZmxhZ3M6
ICV4XG4iLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgY2gtPmNodW5rX2ZsYWdzKTsK
KwkJCWlmIChzY3RwX2hhbmRsZV9uYXRfbWlzc2luZ19zdGF0ZShzdGNiLCBuZXQpKSB7CisJCQkJ
cmV0dXJuICgwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ0FVU0VfU1RBTEVfQ09P
S0lFOgorCQkJLyoKKwkJCSAqIFdlIG9ubHkgYWN0IGlmIHdlIGhhdmUgZWNob2VkIGEgY29va2ll
IGFuZCBhcmUKKwkJCSAqIHdhaXRpbmcuCisJCQkgKi8KKwkJCWlmICgoY2F1c2VfbGVuZ3RoID49
IHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpKSAmJgorCQkJICAgIChTQ1RQ
X0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCQkJc3Ry
dWN0IHNjdHBfZXJyb3Jfc3RhbGVfY29va2llICpzdGFsZV9jb29raWU7CisKKwkJCQlzdGFsZV9j
b29raWUgPSAoc3RydWN0IHNjdHBfZXJyb3Jfc3RhbGVfY29va2llICopY2F1c2U7CisJCQkJYXNv
Yy0+Y29va2llX3ByZXNlcnZlX3JlcSA9IG50b2hsKHN0YWxlX2Nvb2tpZS0+c3RhbGVfdGltZSk7
CisJCQkJLyogRG91YmxlIGl0IHRvIGJlIG1vcmUgcm9idXN0IG9uIFJUWCAqLworCQkJCWlmIChh
c29jLT5jb29raWVfcHJlc2VydmVfcmVxIDw9IFVJTlQzMl9NQVggLyAyKSB7CisJCQkJCWFzb2Mt
PmNvb2tpZV9wcmVzZXJ2ZV9yZXEgKj0gMjsKKwkJCQl9IGVsc2UgeworCQkJCQlhc29jLT5jb29r
aWVfcHJlc2VydmVfcmVxID0gVUlOVDMyX01BWDsKKwkJCQl9CisJCQkJYXNvYy0+c3RhbGVfY29v
a2llX2NvdW50Kys7CisJCQkJaWYgKGFzb2MtPnN0YWxlX2Nvb2tpZV9jb3VudCA+CisJCQkJICAg
IGFzb2MtPm1heF9pbml0X3RpbWVzKSB7CisJCQkJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0
Y2IsIDAsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCS8qIG5vdyBmcmVlIHRo
ZSBhc29jICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQkJCWF0
b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBfVENCX0xP
Q0soc3RjYik7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAx
KTsKKyNlbmRpZgorCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2Moc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJCQkJCQkgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCAr
IFNDVFBfTE9DXzEyKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgor
CQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJLyogYmxhc3QgYmFjayB0byBJTklUIHN0YXRl
ICovCisJCQkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsICZzdGNiLT5hc29jKTsKKwkJCQlh
c29jLT5zdGF0ZSAmPSB+U0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOworCQkJCWFzb2MtPnN0YXRl
IHw9IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQ7CisJCQkJc2N0cF9zdG9wX2FsbF9jb29raWVfdGlt
ZXJzKHN0Y2IpOworCQkJCXNjdHBfc2VuZF9pbml0aWF0ZShzdGNiLT5zY3RwX2VwLCBzdGNiLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DQVVTRV9V
TlJFU09MVkFCTEVfQUREUjoKKwkJCS8qCisJCQkgKiBOb3RoaW5nIHdlIGNhbiBkbyBoZXJlLCB3
ZSBkb24ndCBkbyBob3N0bmFtZQorCQkJICogYWRkcmVzc2VzIHNvIGlmIHRoZSBwZWVyIGRvZXMg
bm90IGxpa2UgbXkgSVB2NgorCQkJICogKG9yIElQdjQgZm9yIHRoYXQgbWF0dGVyKSBpdCBkb2Vz
IG5vdCBtYXR0ZXIuIElmCisJCQkgKiB0aGV5IGRvbid0IHN1cHBvcnQgdGhhdCB0eXBlIG9mIGFk
ZHJlc3MsIHRoZXkgY2FuCisJCQkgKiBOT1QgcG9zc2libHkgZ2V0IHRoYXQgcGFja2V0IHR5cGUu
Li4gaS5lLiB3aXRoIG5vCisJCQkgKiBJUHY2IHlvdSBjYW4ndCByZWNlaXZlIGEgSVB2NiBwYWNr
ZXQuIHNvIHdlIGNhbgorCQkJICogc2FmZWx5IGlnbm9yZSB0aGlzIG9uZS4gSWYgd2UgZXZlciBh
ZGRlZCBzdXBwb3J0CisJCQkgKiBmb3IgSE9TVE5BTUUgQWRkcmVzc2VzLCB0aGVuIHdlIHdvdWxk
IG5lZWQgdG8gZG8KKwkJCSAqIHNvbWV0aGluZyBoZXJlLgorCQkJICovCisJCQlicmVhazsKKwkJ
Y2FzZSBTQ1RQX0NBVVNFX1VOUkVDT0dfQ0hVTks6CisJCQlpZiAoY2F1c2VfbGVuZ3RoID49IHNp
emVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl91bnJlY29nbml6ZWRfY2h1bmspKSB7CisJCQkJc3RydWN0
IHNjdHBfZXJyb3JfdW5yZWNvZ25pemVkX2NodW5rICp1bnJlY19jaHVuazsKKworCQkJCXVucmVj
X2NodW5rID0gKHN0cnVjdCBzY3RwX2Vycm9yX3VucmVjb2duaXplZF9jaHVuayAqKWNhdXNlOwor
CQkJCXNjdHBfcHJvY2Vzc191bnJlY29nX2NodW5rKHN0Y2IsIHVucmVjX2NodW5rLT5jaC5jaHVu
a190eXBlLCBuZXQpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9DQVVTRV9VTlJFQ09H
X1BBUkFNOgorCQkJLyogWFhYOiBXZSBvbmx5IGNvbnNpZGVyIHRoZSBmaXJzdCBwYXJhbWV0ZXIg
Ki8KKwkJCWlmIChjYXVzZV9sZW5ndGggPj0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vycm9yX2NhdXNl
KSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciAqdW5yZWNfcGFyYW1ldGVyOworCisJCQkJdW5yZWNfcGFyYW1ldGVyID0gKHN0cnVjdCBz
Y3RwX3BhcmFtaGRyICopKGNhdXNlICsgMSk7CisJCQkJc2N0cF9wcm9jZXNzX3VucmVjb2dfcGFy
YW0oc3RjYiwgbnRvaHModW5yZWNfcGFyYW1ldGVyLT5wYXJhbV90eXBlKSk7CisJCQl9CisJCQli
cmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX0NPT0tJRV9JTl9TSFVURE9XTjoKKwkJCS8qCisJCQkg
KiBXZSBpZ25vcmUgdGhpcyBzaW5jZSB0aGUgdGltZXIgd2lsbCBkcml2ZSBvdXQgYQorCQkJICog
bmV3IGNvb2tpZSBhbnl3YXkgYW5kIHRoZXJlIHRpbWVyIHdpbGwgZHJpdmUgdXMKKwkJCSAqIHRv
IHNlbmQgYSBTSFVURE9XTl9DT01QTEVURS4gV2UgY2FuJ3Qgc2VuZCBvbmUKKwkJCSAqIGhlcmUg
c2luY2Ugd2UgZG9uJ3QgaGF2ZSB0aGVpciB0YWcuCisJCQkgKi8KKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfQ0FVU0VfREVMRVRJTkdfTEFTVF9BRERSOgorCQljYXNlIFNDVFBfQ0FVU0VfUkVTT1VS
Q0VfU0hPUlRBR0U6CisJCWNhc2UgU0NUUF9DQVVTRV9ERUxFVElOR19TUkNfQUREUjoKKwkJCS8q
CisJCQkgKiBXZSBzaG91bGQgTk9UIGdldCB0aGVzZSBoZXJlLCBidXQgaW4gYQorCQkJICogQVND
T05GLUFDSy4KKwkJCSAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIlBlZXIgc2Vu
ZHMgQVNDT05GIGVycm9ycyBpbiBhIGVycm9yIGNhdXNlIHdpdGggY29kZSAldS5cbiIsCisJCQkJ
Y2F1c2VfY29kZSk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NBVVNFX09VVF9PRl9SRVNDOgor
CQkJLyoKKwkJCSAqIEFuZCB3aGF0LCBwcmF5IHRlbGwgZG8gd2UgZG8gd2l0aCB0aGUgZmFjdCB0
aGF0CisJCQkgKiB0aGUgcGVlciBpcyBvdXQgb2YgcmVzb3VyY2VzPyBOb3QgcmVhbGx5IHN1cmUg
d2UKKwkJCSAqIGNvdWxkIGRvIGFueXRoaW5nIGJ1dCBhYm9ydC4gSSBzdXNwZWN0IHRoaXMKKwkJ
CSAqIHNob3VsZCBoYXZlIGNhbWUgV0lUSCBhbiBhYm9ydCBpbnN0ZWFkIG9mIGluIGEKKwkJCSAq
IE9QLUVSUk9SLgorCQkJICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDEsICJzY3RwX2hhbmRsZV9lcnJvcjogdW5rbm93biBjb2RlIDB4JXhcbiIs
CisJCQkJY2F1c2VfY29kZSk7CisJCQlicmVhazsKKwkJfQorCQlhZGp1c3QgPSBTQ1RQX1NJWkUz
MihjYXVzZV9sZW5ndGgpOworCQlpZiAocmVtYWluaW5nX2xlbmd0aCA+PSBhZGp1c3QpIHsKKwkJ
CXJlbWFpbmluZ19sZW5ndGggLT0gYWRqdXN0OworCQl9IGVsc2UgeworCQkJcmVtYWluaW5nX2xl
bmd0aCA9IDA7CisJCX0KKwkJY2F1c2UgPSAoc3RydWN0IHNjdHBfZXJyb3JfY2F1c2UgKikoKGNh
ZGRyX3QpY2F1c2UgKyBhZGp1c3QpOworCX0KKwlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
UkVNT1RFX0VSUk9SLCBzdGNiLCBjb2RlLCBjaCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwlyZXR1
cm4gKDApOworfQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9pbml0X2FjayhzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNo
LAorICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsgKmNwLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQsIGludCAqYWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3QgbWZsb3dp
ZCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKQoreworCXN0
cnVjdCBzY3RwX2luaXRfYWNrICppbml0X2FjazsKKwlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCisJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2luaXRfYWNrOiBoYW5k
bGluZyBJTklULUFDS1xuIik7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDIsCisJCQkic2N0cF9oYW5kbGVfaW5pdF9hY2s6IFRDQiBpcyBudWxsXG4i
KTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmIChudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKSA8
IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuaykpIHsKKwkJLyogSW52YWxpZCBsZW5n
dGggKi8KKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURf
UEFSQU0sICIiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBtLCBpcGhsZW4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9l
cnIsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBt
Zmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZf
aWQsIG5ldC0+cG9ydCk7CisJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlyZXR1cm4gKC0xKTsK
Kwl9CisJaW5pdF9hY2sgPSAmY3AtPmluaXQ7CisJLyogdmFsaWRhdGUgcGFyYW1ldGVycyAqLwor
CWlmIChpbml0X2Fjay0+aW5pdGlhdGVfdGFnID09IDApIHsKKwkJLyogcHJvdG9jb2wgZXJyb3Iu
Li4gc2VuZCBhbiBhYm9ydCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMs
IGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAg
ICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJ
CXJldHVybiAoLTEpOworCX0KKwlpZiAobnRvaGwoaW5pdF9hY2stPmFfcnduZCkgPCBTQ1RQX01J
Tl9SV05EKSB7CisJCS8qIHByb3RvY29sIGVycm9yLi4uIHNlbmQgYW4gYWJvcnQgKi8KKwkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX0lOVkFMSURfUEFSQU0sICIiKTsK
KwkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLCBtLCBpcGhsZW4s
CisJCSAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIsCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1m
bG93aWQsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIG5ldC0+cG9y
dCk7CisJCSphYm9ydF9ub191bmxvY2sgPSAxOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGlu
aXRfYWNrLT5udW1faW5ib3VuZF9zdHJlYW1zID09IDApIHsKKwkJLyogcHJvdG9jb2wgZXJyb3Iu
Li4gc2VuZCBhbiBhYm9ydCAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBf
Q0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMs
IGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAg
ICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsKKwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJ
CXJldHVybiAoLTEpOworCX0KKwlpZiAoaW5pdF9hY2stPm51bV9vdXRib3VuZF9zdHJlYW1zID09
IDApIHsKKwkJLyogcHJvdG9jb2wgZXJyb3IuLi4gc2VuZCBhbiBhYm9ydCAqLworCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfSU5WQUxJRF9QQVJBTSwgIiIpOworCQlz
Y3RwX2Fib3J0X2Fzc29jaWF0aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dp
ZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgbmV0LT5wb3J0KTsK
KwkJKmFib3J0X25vX3VubG9jayA9IDE7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBwcm9jZXNz
IGFjY29yZGluZyB0byBhc3NvY2lhdGlvbiBzdGF0ZS4uLiAqLworCXN3aXRjaCAoc3RjYi0+YXNv
Yy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgeworCWNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJ
VDoKKwkJLyogdGhpcyBpcyB0aGUgZXhwZWN0ZWQgc3RhdGUgZm9yIHRoaXMgY2h1bmsgKi8KKwkJ
LyogcHJvY2VzcyB0aGUgSU5JVC1BQ0sgcGFyYW1ldGVycyAqLworCQlpZiAoc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uLT5kZXN0X3N0YXRlICYKKwkJICAgIFNDVFBfQUREUl9VTkNPTkZJ
Uk1FRCkgeworCQkJLyoKKwkJCSAqIFRoZSBwcmltYXJ5IGlzIHdoZXJlIHdlIHNlbnQgdGhlIElO
SVQsIHdlIGNhbgorCQkJICogYWx3YXlzIGNvbnNpZGVyIGl0IGNvbmZpcm1lZCB3aGVuIHRoZSBJ
TklULUFDSyBpcworCQkJICogcmV0dXJuZWQuIERvIHRoaXMgYmVmb3JlIHdlIGxvYWQgYWRkcmVz
c2VzCisJCQkgKiB0aG91Z2guCisJCQkgKi8KKwkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbi0+ZGVzdF9zdGF0ZSAmPQorCQkJICAgIH5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7CisJCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0NPTkZJUk1FRCwKKwkJCSAgICBz
dGNiLCAwLCAodm9pZCAqKXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwgU0NUUF9TT19O
T1RfTE9DS0VEKTsKKwkJfQorCQlpZiAoc2N0cF9wcm9jZXNzX2luaXRfYWNrKG0sIGlwaGxlbiwg
b2Zmc2V0LCBzcmMsIGRzdCwgc2gsIGNwLCBzdGNiLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldCwgYWJvcnRfbm9fdW5sb2NrLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkKSA8IDApIHsKKwkJCS8qIGVycm9yIGluIHBh
cnNpbmcgcGFyYW1ldGVycyAqLworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogdXBkYXRlIG91
ciBzdGF0ZSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAibW92aW5nIHRvIENPT0tJ
RS1FQ0hPRUQgc3RhdGVcbiIpOworCQlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNvYywgU0NUUF9T
VEFURV9DT09LSUVfRUNIT0VEKTsKKworCQkvKiByZXNldCB0aGUgUlRPIGNhbGMgKi8KKwkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhSRVNIT0xEX0xP
R0dJTkcpIHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJCSAg
ICAgICBzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQsCisJCQkJICAgICAgIDAsCisJCQkJ
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJCSAgICAgICBfX0xJTkVfXyk7CisJCX0K
KwkJc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID0gMDsKKwkJKHZvaWQpU0NUUF9HRVRU
SU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKKwkJLyoKKwkJICogY29sbGFw
c2UgdGhlIGluaXQgdGltZXIgYmFjayBpbiBjYXNlIG9mIGEgZXhwb25lbnRpYWwKKwkJICogYmFj
a29mZgorCQkgKi8KKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFLCBz
dGNiLT5zY3RwX2VwLAorCQkgICAgc3RjYiwgbmV0KTsKKwkJLyoKKwkJICogdGhlIHNlbmQgYXQg
dGhlIGVuZCBvZiB0aGUgaW5ib3VuZCBkYXRhIHByb2Nlc3Npbmcgd2lsbAorCQkgKiBjYXVzZSB0
aGUgY29va2llIHRvIGJlIHNlbnQKKwkJICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9T
SFVURE9XTl9TRU5UOgorCQkvKiBpbmNvcnJlY3Qgc3RhdGUuLi4gZGlzY2FyZCAqLworCQlicmVh
azsKKwljYXNlIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRDoKKwkJLyogaW5jb3JyZWN0IHN0YXRl
Li4uIGRpc2NhcmQgKi8KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NUQVRFX09QRU46CisJCS8qIGlu
Y29ycmVjdCBzdGF0ZS4uLiBkaXNjYXJkICovCisJCWJyZWFrOworCWNhc2UgU0NUUF9TVEFURV9F
TVBUWToKKwljYXNlIFNDVFBfU1RBVEVfSU5VU0U6CisJZGVmYXVsdDoKKwkJLyogaW5jb3JyZWN0
IHN0YXRlLi4uIGRpc2NhcmQgKi8KKwkJcmV0dXJuICgtMSk7CisJCWJyZWFrOworCX0KKwlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAiTGVhdmluZyBoYW5kbGUtaW5pdC1hY2sgZW5kXG4iKTsK
KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfcHJvY2Vz
c19jb29raWVfbmV3KHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zmc2V0LAorICAg
IHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qg
c2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llLCBpbnQgY29va2ll
X2xlbiwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0
cCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmluaXRfc3JjLCBpbnQgKm5vdGlmaWNhdGlvbiwKKyAg
ICBpbnQgYXV0aF9za2lwcGVkLCB1aW50MzJfdCBhdXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9s
ZW4sCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyAgICB1aW50OF90IG1mbG93dHlwZSwgdWlu
dDMyX3QgbWZsb3dpZCwKKyNlbmRpZgorICAgIHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9y
dCk7CisKKworLyoKKyAqIGhhbmRsZSBhIHN0YXRlIGNvb2tpZSBmb3IgYW4gZXhpc3RpbmcgYXNz
b2NpYXRpb24gbTogaW5wdXQgcGFja2V0IG1idWYKKyAqIGNoYWluLS0gYXNzdW1lcyBhIHB1bGx1
cCBvbiBJUC9TQ1RQL0NPT0tJRS1FQ0hPIGNodW5rIG5vdGU6IHRoaXMgaXMgYQorICogInNwbGl0
IiBtYnVmIGFuZCB0aGUgY29va2llIHNpZ25hdHVyZSBkb2VzIG5vdCBleGlzdCBvZmZzZXQ6IG9m
ZnNldCBpbnRvCisgKiBtYnVmIHRvIHRoZSBjb29raWUtZWNobyBjaHVuaworICovCitzdGF0aWMg
c3RydWN0IHNjdHBfdGNiICoKK3NjdHBfcHJvY2Vzc19jb29raWVfZXhpc3Rpbmcoc3RydWN0IG1i
dWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCisgICAgc3RydWN0IHNvY2thZGRyICpzcmMs
IHN0cnVjdCBzb2NrYWRkciAqZHN0LAorICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNj
dHBfc3RhdGVfY29va2llICpjb29raWUsIGludCBjb29raWVfbGVuLAorICAgIHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqKm5l
dHAsCisgICAgc3RydWN0IHNvY2thZGRyICppbml0X3NyYywgaW50ICpub3RpZmljYXRpb24sCisg
ICAgaW50IGF1dGhfc2tpcHBlZCwgdWludDMyX3QgYXV0aF9vZmZzZXQsIHVpbnQzMl90IGF1dGhf
bGVuLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgdWludDhfdCBtZmxvd3R5cGUsIHVp
bnQzMl90IG1mbG93aWQsCisjZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBv
cnQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfaW5p
dF9jaHVuayAqaW5pdF9jcCwgaW5pdF9idWY7CisJc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsg
KmluaXRhY2tfY3AsIGluaXRhY2tfYnVmOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1
Y3QgbWJ1ZiAqb3BfZXJyOworCXN0cnVjdCB0aW1ldmFsIG9sZDsKKwlpbnQgaW5pdF9vZmZzZXQs
IGluaXRhY2tfb2Zmc2V0LCBpOworCWludCByZXR2YWw7CisJaW50IHNwZWNfZmxhZyA9IDA7CisJ
dWludDMyX3QgaG93X2luZHg7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykK
KwlpbnQgajsKKyNlbmRpZgorCisJbmV0ID0gKm5ldHA7CisJLyogSSBrbm93IHRoYXQgdGhlIFRD
QiBpcyBub24tTlVMTCBmcm9tIHRoZSBjYWxsZXIgKi8KKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJ
Zm9yIChob3dfaW5keCA9IDA7IGhvd19pbmR4ICA8IHNpemVvZihhc29jLT5jb29raWVfaG93KTsg
aG93X2luZHgrKykgeworCQlpZiAoYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPT0gMCkKKwkJ
CWJyZWFrOworCX0KKwlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2llX2hvdykpIHsK
KwkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxOworCX0KKwlpZiAoU0NUUF9HRVRfU1RB
VEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgeworCQkvKiBTSFVURE9X
TiBjYW1lIGluIGFmdGVyIHNlbmRpbmcgSU5JVC1BQ0sgKi8KKwkJc2N0cF9zZW5kX3NodXRkb3du
X2FjayhzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pOworCQlvcF9lcnIgPSBz
Y3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfQ09PS0lFX0lOX1NIVVRET1dOLCAiIik7CisJ
CXNjdHBfc2VuZF9vcGVycl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3Bf
ZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICBtZmxv
d3R5cGUsIG1mbG93aWQsIGlucC0+ZmlibnVtLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAg
ICB2cmZfaWQsIG5ldC0+cG9ydCk7CisJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29r
aWVfaG93KSkKKwkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMjsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJLyoKKwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVCBjaHVuayBpbiB0
aGUgY29va2llIChwZWVyJ3MgaW5mbykgdGhlCisJICogSU5JVCBzaG91bGQgc3RhcnQgYWZ0ZXIg
dGhlIGNvb2tpZS1lY2hvIGhlYWRlciBzdHJ1Y3QgKGNodW5rCisJICogaGVhZGVyLCBzdGF0ZSBj
b29raWUgaGVhZGVyIHN0cnVjdCkKKwkgKi8KKwlpbml0X29mZnNldCA9IG9mZnNldCArPSBzaXpl
b2Yoc3RydWN0IHNjdHBfY29va2llX2VjaG9fY2h1bmspOworCisJaW5pdF9jcCA9IChzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rICopCisJCXNjdHBfbV9nZXRwdHIobSwgaW5pdF9vZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKKwkJCSAgICAgICh1aW50OF90ICopICYgaW5pdF9i
dWYpOworCWlmIChpbml0X2NwID09IE5VTEwpIHsKKwkJLyogY291bGQgbm90IHB1bGwgYSBJTklU
IGNodW5rIGluIGNvb2tpZSAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoaW5pdF9jcC0+
Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9
CisJLyoKKwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVC1BQ0sgY2h1bmsgaW4gdGhlIGNv
b2tpZSAobXkgaW5mbykgdGhlCisJICogSU5JVC1BQ0sgZm9sbG93cyB0aGUgSU5JVCBjaHVuawor
CSAqLworCWluaXRhY2tfb2Zmc2V0ID0gaW5pdF9vZmZzZXQgKyBTQ1RQX1NJWkUzMihudG9ocyhp
bml0X2NwLT5jaC5jaHVua19sZW5ndGgpKTsKKwlpbml0YWNrX2NwID0gKHN0cnVjdCBzY3RwX2lu
aXRfYWNrX2NodW5rICopCisJCXNjdHBfbV9nZXRwdHIobSwgaW5pdGFja19vZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCisJCQkgICAgICAodWludDhfdCAqKSAmIGlu
aXRhY2tfYnVmKTsKKwlpZiAoaW5pdGFja19jcCA9PSBOVUxMKSB7CisJCS8qIGNvdWxkIG5vdCBw
dWxsIElOSVQtQUNLIGNodW5rIGluIGNvb2tpZSAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlp
ZiAoaW5pdGFja19jcC0+Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT05fQUNLKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0
ZV90YWcpID09IGFzb2MtPm15X3Z0YWcpICYmCisJICAgIChudG9obChpbml0X2NwLT5pbml0Lmlu
aXRpYXRlX3RhZykgPT0gYXNvYy0+cGVlcl92dGFnKSkgeworCQkvKgorCQkgKiBjYXNlIEQgaW4g
U2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBNTUFBIHByb2Nlc3MgYWNjb3JkaW5nbHkKKwkJICogdG8g
Z2V0IGludG8gdGhlIE9QRU4gc3RhdGUKKwkJICovCisJCWlmIChudG9obChpbml0YWNrX2NwLT5p
bml0LmluaXRpYWxfdHNuKSAhPSBhc29jLT5pbml0X3NlcV9udW1iZXIpIHsKKwkJCS8qLQorCQkJ
ICogT3BwcywgdGhpcyBtZWFucyB0aGF0IHdlIHNvbWVob3cgZ2VuZXJhdGVkIHR3byB2dGFnJ3MK
KwkJCSAqIHRoZSBzYW1lLiBJLmUuIHdlIGRpZDoKKwkJCSAqICBVcyAgICAgICAgICAgICAgIFBl
ZXIKKwkJCSAqICAgPC0tLUlOSVQodGFnPWEpLS0tLS0tCisJCQkgKiAgIC0tLS1JTklULUFDSyh0
YWc9dCktLT4KKwkJCSAqICAgLS0tLUlOSVQodGFnPXQpLS0tLS0tPiAqMQorCQkJICogICA8LS0t
SU5JVC1BQ0sodGFnPWEpLS0tCisgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIDwtLS0tQ0Uo
dGFnPXQpLS0tLS0tLS0tLS0tLSAqMgorCQkJICoKKwkJCSAqIEF0IHBvaW50ICoxIHdlIHNob3Vs
ZCBiZSBnZW5lcmF0aW5nIGEgZGlmZmVyZW50CisJCQkgKiB0YWcgdCcuIFdoaWNoIG1lYW5zIHdl
IHdvdWxkIHRocm93IGF3YXkgdGhlIENFIGFuZCBzZW5kCisJCQkgKiBvdXJzIGluc3RlYWQuIEJh
c2ljYWxseSB0aGlzIGlzIGNhc2UgQyAodGhyb3cgYXdheSBzaWRlKS4KKwkJCSAqLworCQkJaWYg
KGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9o
b3dbaG93X2luZHhdID0gMTc7CisJCQlyZXR1cm4gKE5VTEwpOworCisJCX0KKwkJc3dpdGNoIChT
Q1RQX0dFVF9TVEFURShhc29jKSkgeworCQkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgor
CQkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQ6CisJCQkJLyoKKwkJCQkgKiBJTklUIHdh
cyBzZW50IGJ1dCBnb3QgYSBDT09LSUVfRUNITyB3aXRoIHRoZQorCQkJCSAqIGNvcnJlY3QgdGFn
cy4uLiBqdXN0IGFjY2VwdCBpdC4uLmJ1dCB3ZSBtdXN0CisJCQkJICogcHJvY2VzcyB0aGUgaW5p
dCBzbyB0aGF0IHdlIGNhbiBtYWtlIHN1cmUgd2UKKwkJCQkgKiBoYXZlIHRoZSByaWdodCBzZXEg
bm8ncy4KKwkJCQkgKi8KKwkJCQkvKiBGaXJzdCB3ZSBtdXN0IHByb2Nlc3MgdGhlIElOSVQgISEg
Ki8KKwkJCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5pdChpbml0X2NwLCBzdGNiKTsKKwkJCQlp
ZiAocmV0dmFsIDwgMCkgeworCQkJCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2ll
X2hvdykpCisJCQkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDM7CisJCQkJCXJldHVy
biAoTlVMTCk7CisJCQkJfQorCQkJCS8qIHdlIGhhdmUgYWxyZWFkeSBwcm9jZXNzZWQgdGhlIElO
SVQgc28gbm8gcHJvYmxlbSAqLworCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVf
SEVBUlRCRUFULCBpbnAsCisJCQkJICAgICAgICAgICAgICAgIHN0Y2IsIG5ldCwKKwkJCQkgICAg
ICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xMyk7CisJCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9JTklULCBpbnAsCisJCQkJICAgICAgICAgICAg
ICAgIHN0Y2IsIG5ldCwKKwkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQg
KyBTQ1RQX0xPQ18xNCk7CisJCQkJLyogdXBkYXRlIGN1cnJlbnQgc3RhdGUgKi8KKwkJCQlpZiAo
U0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKQorCQkJCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWN0aXZlZXN0YWIpOworCQkJCWVsc2UKKwkJ
CQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKworCQkJ
CVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7CisJCQkJaWYgKGFzb2MtPnN0
YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCQkJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCQkJIHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOworCQkJCX0KKwkJCQlTQ1RQX1NUQVRf
SU5DUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJc2N0cF9zdG9wX2FsbF9jb29raWVf
dGltZXJzKHN0Y2IpOworCQkJCWlmICgoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkJCQkgICAgKCFTQ1RQX0lTX0xJ
U1RFTklORyhpbnApKSkgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQorCQkJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCQkJCQkv
KgorCQkJCQkgKiBIZXJlIGlzIHdoZXJlIGNvbGxpc2lvbiB3b3VsZCBnbyBpZiB3ZQorCQkJCQkg
KiBkaWQgYSBjb25uZWN0KCkgYW5kIGluc3RlYWQgZ290IGEKKwkJCQkJICogaW5pdC9pbml0LWFj
ay9jb29raWUgZG9uZSBiZWZvcmUgdGhlCisJCQkJCSAqIGluaXQtYWNrIGNhbWUgYmFjay4uCisJ
CQkJCSAqLworCQkJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9CisJCQkJCQlTQ1RQX1BD
Ql9GTEFHU19DT05ORUNURUQ7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisJCQkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7
CisJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7CisJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgLTEpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NP
Q0tFVCkgeworCQkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQkJCXJldHVybiAo
TlVMTCk7CisJCQkJCX0KKyNlbmRpZgorCQkJCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNjdHBfc29j
a2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQkJCX0KKwkJ
CQkvKiBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkJCQkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJ
RllfQVNTT0NfVVA7CisJCQkJLyoKKwkJCQkgKiBzaW5jZSB3ZSBkaWQgbm90IHNlbmQgYSBIQiBt
YWtlIHN1cmUgd2UKKwkJCQkgKiBkb24ndCBkb3VibGUgdGhpbmdzCisJCQkJICovCisJCQkJb2xk
LnR2X3NlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3NlYzsKKwkJCQlvbGQudHZfdXNlYyA9
IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisJCQkJbmV0LT5oYl9yZXNwb25kZWQgPSAx
OworCQkJCW5ldC0+UlRPID0gc2N0cF9jYWxjdWxhdGVfcnRvKHN0Y2IsIGFzb2MsIG5ldCwKKwkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xkLAorCQkJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCisJCQkJaWYgKHN0Y2It
PmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYKKwkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSkpKSB7CisJCQkJCXNjdHBfdGltZXJfc3Rh
cnQoU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwKKwkJCQkJCQkgaW5wLCBzdGNiLCBOVUxMKTsK
KwkJCQl9CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCS8qCisJCQkJICogd2UncmUgaW4g
dGhlIE9QRU4gc3RhdGUgKG9yIGJleW9uZCksIHNvCisJCQkJICogcGVlciBtdXN0IGhhdmUgc2lt
cGx5IGxvc3QgdGhlIENPT0tJRS1BQ0sKKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJfQkvKiBlbmQg
c3dpdGNoICovCisJCXNjdHBfc3RvcF9hbGxfY29va2llX3RpbWVycyhzdGNiKTsKKwkJLyoKKwkJ
ICogV2UgaWdub3JlIHRoZSByZXR1cm4gY29kZSBoZXJlLi4gbm90IHN1cmUgaWYgd2Ugc2hvdWxk
CisJCSAqIHNvbWVob3cgYWJvcnQuLiBidXQgd2UgZG8gaGF2ZSBhbiBleGlzdGluZyBhc29jLiBU
aGlzCisJCSAqIHJlYWxseSBzaG91bGQgbm90IGZhaWwuCisJCSAqLworCQlpZiAoc2N0cF9sb2Fk
X2FkZHJlc3Nlc19mcm9tX2luaXQoc3RjYiwgbSwKKwkJCQkJCSAgaW5pdF9vZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayksCisJCQkJCQkgIGluaXRhY2tfb2Zmc2V0LCBzcmMs
IGRzdCwgaW5pdF9zcmMsIHN0Y2ItPmFzb2MucG9ydCkpIHsKKwkJCWlmIChob3dfaW5keCA8IHNp
emVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9
IDQ7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1B
Q0sgKi8KKwkJc2N0cF90b3NzX29sZF9jb29raWVzKHN0Y2IsIGFzb2MpOworCQlzY3RwX3NlbmRf
Y29va2llX2FjayhzdGNiKTsKKwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9o
b3cpKQorCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSA1OworCQlyZXR1cm4gKHN0Y2Ip
OworCX0KKworCWlmIChudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNv
Yy0+bXlfdnRhZyAmJgorCSAgICBudG9obChpbml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgPT0g
YXNvYy0+cGVlcl92dGFnICYmCisJICAgIGNvb2tpZS0+dGllX3RhZ19teV92dGFnID09IDAgJiYK
KwkgICAgY29va2llLT50aWVfdGFnX3BlZXJfdnRhZyA9PSAwKSB7CisJCS8qCisJCSAqIGNhc2Ug
QyBpbiBTZWN0aW9uIDUuMi40IFRhYmxlIDI6IFhNT08gc2lsZW50bHkgZGlzY2FyZAorCQkgKi8K
KwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tpZV9ob3cpKQorCQkJYXNvYy0+Y29v
a2llX2hvd1tob3dfaW5keF0gPSA2OworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBJZiBuYXQg
c3VwcG9ydCwgYW5kIHRoZSBiZWxvdyBhbmQgc3RjYiBpcyBlc3RhYmxpc2hlZCwKKwkgKiBzZW5k
IGJhY2sgYSBBQk9SVChjb2xsaWRpbmcgc3RhdGUpIGlmIHdlIGFyZSBlc3RhYmxpc2hlZC4KKwkg
Ki8KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgICYmCisJ
ICAgIChhc29jLT5wZWVyX3N1cHBvcnRzX25hdCkgJiYKKwkgICAgKChudG9obChpbml0YWNrX2Nw
LT5pbml0LmluaXRpYXRlX3RhZykgPT0gYXNvYy0+bXlfdnRhZykgJiYKKwkgICAgKChudG9obChp
bml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNvYy0+cGVlcl92dGFnKSB8fAorCSAgICAg
KGFzb2MtPnBlZXJfdnRhZyA9PSAwKSkpKSB7CisJCS8qIFNwZWNpYWwgY2FzZSAtIFBlZXIncyBz
dXBwb3J0IG5hdC4gV2UgbWF5IGhhdmUKKwkJICogdHdvIGluaXQncyB0aGF0IHdlIGdhdmUgb3V0
IHRoZSBzYW1lIHRhZyBvbiBzaW5jZQorCQkgKiBvbmUgd2FzIG5vdCBlc3RhYmxpc2hlZC4uIGku
ZS4gd2UgZ2V0IElOSVQgZnJvbSBob3N0LTEKKwkJICogYmVoaW5kIHRoZSBuYXQgYW5kIHdlIHJl
c3BvbmQgdGFnLWEsIHdlIGdldCBhIElOSVQgZnJvbQorCQkgKiBob3N0LTIgYmVoaW5kIHRoZSBu
YXQgYW5kIHdlIGdldCB0YWctYSBhZ2Fpbi4gVGhlbiB3ZQorCQkgKiBicmluZyB1cCBob3N0LTEg
KG9yIDIncykgYXNzb2MsIFRoZW4gY29tZXMgdGhlIGNvb2tpZQorCQkgKiBmcm9tIGhzb3QtMiAo
b3IgMSkuIE5vdyB3ZSBoYXZlIGNvbGxpZGluZyBzdGF0ZS4gV2UgbXVzdAorCQkgKiBzZW5kIGFu
IGFib3J0IGhlcmUgd2l0aCBjb2xsaWRpbmcgc3RhdGUgaW5kaWNhdGlvbi4KKwkJICovCisJCW9w
X2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9OQVRfQ09MTElESU5HX1NUQVRF
LCAiIik7CisJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sICBzcmMsIGRzdCwgc2gsIDAsIG9w
X2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgbWZsb3d0
eXBlLCBtZmxvd2lkLCBpbnAtPmZpYm51bSwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgdnJm
X2lkLCBwb3J0KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChudG9obChpbml0YWNrX2Nw
LT5pbml0LmluaXRpYXRlX3RhZykgPT0gYXNvYy0+bXlfdnRhZykgJiYKKwkgICAgKChudG9obChp
bml0X2NwLT5pbml0LmluaXRpYXRlX3RhZykgIT0gYXNvYy0+cGVlcl92dGFnKSB8fAorCSAgICAg
KGFzb2MtPnBlZXJfdnRhZyA9PSAwKSkpIHsKKwkJLyoKKwkJICogY2FzZSBCIGluIFNlY3Rpb24g
NS4yLjQgVGFibGUgMjogTVhBQSBvciBNT0FBIG15IGluZm8KKwkJICogc2hvdWxkIGJlIG9rLCBy
ZS1hY2NlcHQgcGVlciBpbmZvCisJCSAqLworCQlpZiAobnRvaGwoaW5pdGFja19jcC0+aW5pdC5p
bml0aWFsX3RzbikgIT0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyKSB7CisJCQkvKiBFeHRlbnNpb24g
b2YgY2FzZSBDLgorCQkJICogSWYgd2UgaGl0IHRoaXMsIHRoZW4gdGhlIHJhbmRvbSBudW1iZXIK
KwkJCSAqIGdlbmVyYXRvciByZXR1cm5lZCB0aGUgc2FtZSB2dGFnIHdoZW4gd2UKKwkJCSAqIGZp
cnN0IHNlbnQgb3VyIElOSVQtQUNLIGFuZCB3aGVuIHdlIGxhdGVyIHNlbnQKKwkJCSAqIG91ciBJ
TklULiBUaGUgc2lkZSB3aXRoIHRoZSBzZXEgbnVtYmVycyB0aGF0IGFyZQorCQkJICogZGlmZmVy
ZW50IHdpbGwgYmUgdGhlIG9uZSB0aGF0IG5vcm1uYWxseSB3b3VsZAorCQkJICogaGF2ZSBoaXQg
Y2FzZSBDLiBUaGlzIGluIGVmZmVjdCAiZXh0ZW5kcyIgb3VyIHZ0YWdzCisJCQkgKiBpbiB0aGlz
IGNvbGxpc2lvbiBjYXNlIHRvIGJlIDY0IGJpdHMuIFRoZSBzYW1lIGNvbGxpc2lvbgorCQkJICog
Y291bGQgb2NjdXIgYWthIHlvdSBnZXQgYm90aCB2dGFnIGFuZCBzZXEgbnVtYmVyIHRoZQorCQkJ
ICogc2FtZSB0d2ljZSBpbiBhIHJvdy4uIGJ1dCBpcyBtdWNoIGxlc3MgbGlrZWx5LiBJZiBpdAor
CQkJICogZGlkIGhhcHBlbiB0aGVuIHdlIHdvdWxkIHByb2NlZWQgdGhyb3VnaCBhbmQgYnJpbmcK
KwkJCSAqIHVwIHRoZSBhc3NvYy4uIHdlIG1heSBlbmQgdXAgd2l0aCB0aGUgd3Jvbmcgc3RyZWFt
CisJCQkgKiBzZXR1cCBob3dldmVyLi4gd2hpY2ggd291bGQgYmUgYmFkLi4gYnV0IHRoZXJlIGlz
CisJCQkgKiBubyB3YXkgdG8gdGVsbC4uIHVudGlsIHdlIHNlbmQgb24gYSBzdHJlYW0gdGhhdCBk
b2VzCisJCQkgKiBub3QgZXhpc3QgOi0pCisJCQkgKi8KKwkJCWlmIChob3dfaW5keCA8IHNpemVv
Zihhc29jLT5jb29raWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDc7
CisKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2Mt
PmNvb2tpZV9ob3cpKQorCQkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSA4OworCQlzY3Rw
X3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJ
CSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzE1KTsKKwkJ
c2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJzKHN0Y2IpOworCQkvKgorCQkgKiBzaW5jZSB3ZSBk
aWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCisJCSAqIHRoaW5ncwor
CQkgKi8KKwkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOworCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1
dG9jbG9zZV90aWNrcyAmJgorCQkgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfQVVUT0NMT1NFKSkgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVf
QVVUT0NMT1NFLCBpbnAsIHN0Y2IsCisJCQkJCSBOVUxMKTsKKwkJfQorCQlhc29jLT5teV9yd25k
ID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5hX3J3bmQpOworCQlhc29jLT5wcmVfb3Blbl9zdHJl
YW1zID0gbnRvaHMoaW5pdGFja19jcC0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyk7CisKKwkJ
aWYgKG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBhc29jLT5wZWVyX3Z0YWcp
IHsKKwkJCS8qIE9rIHRoZSBwZWVyIHByb2JhYmx5IGRpc2NhcmRlZCBvdXIKKwkJCSAqIGRhdGEg
KGlmIHdlIGVjaG9lZCBhIGNvb2tpZStkYXRhKS4gU28gYW55dGhpbmcKKwkJCSAqIG9uIHRoZSBz
ZW50X3F1ZXVlIHNob3VsZCBiZSBtYXJrZWQgZm9yCisJCQkgKiByZXRyYW5zbWl0LCB3ZSBtYXkg
bm90IGdldCBzb21ldGhpbmcgdG8KKwkJCSAqIGtpY2sgdXMgc28gaXQgQ09VTEQgc3RpbGwgdGFr
ZSBhIHRpbWVvdXQKKwkJCSAqIHRvIG1vdmUgdGhlc2UuLiBidXQgaXQgY2FuJ3QgaHVydCB0byBt
YXJrIHRoZW0uCisJCQkgKi8KKwkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwkJICAg
ICAgICBUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0
KSB7CisJCQkJaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCWNo
ay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJCQlzY3RwX2ZsaWdodF9zaXplX2Rl
Y3JlYXNlKGNoayk7CisJCQkJCXNjdHBfdG90YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7
CisJCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQp
OworCQkJCQlzcGVjX2ZsYWcrKzsKKwkJCQl9CisJCQl9CisKKwkJfQorCQkvKiBwcm9jZXNzIHRo
ZSBJTklUIGluZm8gKHBlZXIncyBpbmZvKSAqLworCQlyZXR2YWwgPSBzY3RwX3Byb2Nlc3NfaW5p
dChpbml0X2NwLCBzdGNiKTsKKwkJaWYgKHJldHZhbCA8IDApIHsKKwkJCWlmIChob3dfaW5keCA8
IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4
XSA9IDk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWlmIChzY3RwX2xvYWRfYWRkcmVzc2Vz
X2Zyb21faW5pdChzdGNiLCBtLAorCQkJCQkJICBpbml0X29mZnNldCArIHNpemVvZihzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rKSwKKwkJCQkJCSAgaW5pdGFja19vZmZzZXQsIHNyYywgZHN0LCBpbml0
X3NyYywgc3RjYi0+YXNvYy5wb3J0KSkgeworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2Mt
PmNvb2tpZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTA7CisJCQly
ZXR1cm4gKE5VTEwpOworCQl9CisJCWlmICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRFX0NPT0tJ
RV9XQUlUKSB8fAorCQkgICAgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VE
KSkgeworCQkJKm5vdGlmaWNhdGlvbiA9IFNDVFBfTk9USUZZX0FTU09DX1VQOworCisJCQlpZiAo
KChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkJCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSkgJiYKKwkJCSAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpKSB7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJc3Ry
dWN0IHNvY2tldCAqc287CisjZW5kaWYKKwkJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9
CisJCQkJCVNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQlzbyA9IFNDVFBfSU5QX1NPKHN0
Y2ItPnNjdHBfZXApOworCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEp
OworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAtMSk7CisJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NM
T1NFRF9TT0NLRVQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJCQkJcmV0
dXJuIChOVUxMKTsKKwkJCQl9CisjZW5kaWYKKwkJCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNjdHBf
c29ja2V0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQl9CisJ
CQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKQor
CQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hY3RpdmVlc3RhYik7CisJCQllbHNl
CisJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKwkJ
CVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJfSBlbHNlIGlmIChT
Q1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHsKKwkJCVNDVFBfU1RBVF9J
TkNSX0NPVU5URVIzMihzY3Rwc19yZXN0YXJ0ZXN0YWIpOworCQl9IGVsc2UgeworCQkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2NvbGxpc2lvbmVzdGFiKTsKKwkJfQorCQlTQ1RQX1NF
VF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX09QRU4pOworCQlpZiAoYXNvYy0+c3RhdGUgJiBTQ1RQ
X1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOR1VBUkQsCisJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29jLT5w
cmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwkJfQorCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMo
c3RjYik7CisJCXNjdHBfdG9zc19vbGRfY29va2llcyhzdGNiLCBhc29jKTsKKwkJc2N0cF9zZW5k
X2Nvb2tpZV9hY2soc3RjYik7CisJCWlmIChzcGVjX2ZsYWcpIHsKKwkJCS8qIG9ubHkgaWYgd2Ug
aGF2ZSByZXRyYW5zIHNldCBkbyB3ZSBkbyB0aGlzLiBXaGF0CisJCQkgKiB0aGlzIGNhbGwgZG9l
cyBpcyBnZXQgb25seSB0aGUgQ09PS0lFLUFDSyBvdXQKKwkJCSAqIGFuZCB0aGVuIHdoZW4gd2Ug
cmV0dXJuIHRoZSBub3JtYWwgY2FsbCB0bworCQkJICogc2N0cF9jaHVua19vdXRwdXQgd2lsbCBn
ZXQgdGhlIHJldHJhbnMgb3V0CisJCQkgKiBiZWhpbmQgdGhpcy4KKwkJCSAqLworCQkJc2N0cF9j
aHVua19vdXRwdXQoaW5wLHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09PS0lFX0FDSywgU0NUUF9T
T19OT1RfTE9DS0VEKTsKKwkJfQorCQlpZiAoaG93X2luZHggPCBzaXplb2YoYXNvYy0+Y29va2ll
X2hvdykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDExOworCisJCXJldHVybiAo
c3RjYik7CisJfQorCWlmICgobnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWF0ZV90YWcpICE9
IGFzb2MtPm15X3Z0YWcgJiYKKwkgICAgIG50b2hsKGluaXRfY3AtPmluaXQuaW5pdGlhdGVfdGFn
KSAhPSBhc29jLT5wZWVyX3Z0YWcpICYmCisJICAgIGNvb2tpZS0+dGllX3RhZ19teV92dGFnID09
IGFzb2MtPm15X3Z0YWdfbm9uY2UgJiYKKwkgICAgY29va2llLT50aWVfdGFnX3BlZXJfdnRhZyA9
PSBhc29jLT5wZWVyX3Z0YWdfbm9uY2UgJiYKKwkgICAgY29va2llLT50aWVfdGFnX3BlZXJfdnRh
ZyAhPSAwKSB7CisJCXN0cnVjdCBzY3RwYXNvY2hlYWQgKmhlYWQ7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQg
KnNvOworI2VuZGlmCisKKwkJaWYgKGFzb2MtPnBlZXJfc3VwcG9ydHNfbmF0KSB7CisJCQkvKiBU
aGlzIGlzIGEgZ3Jvc3MgZ3Jvc3MgaGFjay4KKwkJCSAqIEp1c3QgY2FsbCB0aGUgY29va2llX25l
dyBjb2RlIHNpbmNlIHdlCisJCQkgKiBhcmUgYWxsb3dpbmcgYSBkdXBsaWNhdGUgYXNzb2NpYXRp
b24uCisJCQkgKiBJIGhvcGUgdGhpcyB3b3Jrcy4uLgorCQkJICovCisJCQlyZXR1cm4gKHNjdHBf
cHJvY2Vzc19jb29raWVfbmV3KG0sIGlwaGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNvb2tpZSwgY29va2llX2xlbiwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLCBuZXRwLCBpbml0X3NyYyxub3RpZmlj
YXRpb24sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfc2tpcHBlZCwg
YXV0aF9vZmZzZXQsIGF1dGhfbGVuLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgor
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpKTsKKwkJfQor
CQkvKgorCQkgKiBjYXNlIEEgaW4gU2VjdGlvbiA1LjIuNCBUYWJsZSAyOiBYWE1NIChwZWVyIHJl
c3RhcnRlZCkKKwkJICovCisJCS8qIHRlbXAgY29kZSAqLworCQlpZiAoaG93X2luZHggPCBzaXpl
b2YoYXNvYy0+Y29va2llX2hvdykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDEy
OworCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgbmV0
LAorCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xNik7
CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2Is
IG5ldCwKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NUUF9MT0Nf
MTcpOworCisJCS8qIG5vdGlmeSB1cHBlciBsYXllciAqLworCQkqbm90aWZpY2F0aW9uID0gU0NU
UF9OT1RJRllfQVNTT0NfUkVTVEFSVDsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVm
Y250LCAxKTsKKwkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX09QRU4p
ICYmCisJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9S
RUNFSVZFRCkgJiYKKwkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1NFTlQpKSB7CisJCQlTQ1RQX1NUQVRfSU5DUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3Rh
Yik7CisJCX0KKwkJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikg
eworCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19yZXN0YXJ0ZXN0YWIpOworCQl9IGVs
c2UgaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkg
eworCQkJU0NUUF9TVEFUX0lOQ1JfR0FVR0UzMihzY3Rwc19jb2xsaXNpb25lc3RhYik7CisJCX0K
KwkJaWYgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB7CisJCQlT
Q1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX09QRU4pOworCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0
Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOworCisJCX0gZWxzZSBpZiAoIShhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkpIHsKKwkJCS8qIG1vdmUgdG8gT1BFTiBz
dGF0ZSwgaWYgbm90IGluIFNIVVRET1dOX1NFTlQgKi8KKwkJCVNDVFBfU0VUX1NUQVRFKGFzb2Ms
IFNDVFBfU1RBVEVfT1BFTik7CisJCX0KKwkJYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9CisJCQlu
dG9ocyhpbml0YWNrX2NwLT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1zKTsKKwkJYXNvYy0+aW5p
dF9zZXFfbnVtYmVyID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0aWFsX3Rzbik7CisJCWFz
b2MtPnNlbmRpbmdfc2VxID0gYXNvYy0+YXNjb25mX3NlcV9vdXQgPSBhc29jLT5zdHJfcmVzZXRf
c2VxX291dCA9IGFzb2MtPmluaXRfc2VxX251bWJlcjsKKwkJYXNvYy0+YXNjb25mX3NlcV9vdXRf
YWNrZWQgPSBhc29jLT5hc2NvbmZfc2VxX291dCAtIDE7CisKKwkJYXNvYy0+YXNjb25mX3NlcV9p
biA9IGFzb2MtPmxhc3RfYWNrZWRfc2VxID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyIC0gMTsKKwor
CQlhc29jLT5zdHJfcmVzZXRfc2VxX2luID0gYXNvYy0+aW5pdF9zZXFfbnVtYmVyOworCisJCWFz
b2MtPmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50ID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7CisJCWlm
IChhc29jLT5tYXBwaW5nX2FycmF5KSB7CisJCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwg
MCwKKwkJCSAgICAgICBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCQl9CisJCWlmIChhc29j
LT5ucl9tYXBwaW5nX2FycmF5KSB7CisJCQltZW1zZXQoYXNvYy0+bnJfbWFwcGluZ19hcnJheSwg
MCwKKwkJCSAgICBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCQl9CisJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKKwkJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwkJU0NUUF9T
T0NLRVRfTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQlT
Q1RQX0lOUF9XTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJCS8qIHNlbmQgdXAgYWxs
IHRoZSBkYXRhICovCisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKworCQlzY3RwX3JlcG9y
dF9hbGxfb3V0Ym91bmQoc3RjYiwgMCwgMSwgU0NUUF9TT19MT0NLRUQpOworCQlmb3IgKGkgPSAw
OyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJt
b3V0W2ldLmNodW5rc19vbl9xdWV1ZXMgPSAwOworI2lmIGRlZmluZWQoU0NUUF9ERVRBSUxFRF9T
VFJfU1RBVFMpCisJCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGorKykg
eworCQkJCWFzb2MtPnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAwOworCQkJCWFzb2Mt
PnN0cm1vdXRbaV0uYWJhbmRvbmVkX3Vuc2VudFtqXSA9IDA7CisJCQl9CisjZWxzZQorCQkJYXNv
Yy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2VudFswXSA9IDA7CisJCQlhc29jLT5zdHJtb3V0W2ld
LmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQlzdGNiLT5hc29jLnN0cm1vdXRb
aV0uc2lkID0gaTsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0g
MDsKKwkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSAwOworCQkJ
c3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxldGUgPSAwOworCQl9CisJCS8q
IHByb2Nlc3MgdGhlIElOSVQtQUNLIGluZm8gKG15IGluZm8pICovCisJCWFzb2MtPm15X3Z0YWcg
PSBudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZyk7CisJCWFzb2MtPm15X3J3bmQg
PSBudG9obChpbml0YWNrX2NwLT5pbml0LmFfcnduZCk7CisKKwkJLyogcHVsbCBmcm9tIHZ0YWcg
aGFzaCAqLworCQlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX2Fzb2NzKTsKKwkJLyogcmUtaW5zZXJ0
IHRvIG5ldyB2dGFnIHBvc2l0aW9uICovCisJCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9h
c29jaGFzaClbU0NUUF9QQ0JIQVNIX0FTT0Moc3RjYi0+YXNvYy5teV92dGFnLAorCQkJCQkJCQkg
ICAgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2NtYXJrKSldOworCQkvKgorCQkgKiBwdXQgaXQgaW4g
dGhlIGJ1Y2tldCBpbiB0aGUgdnRhZyBoYXNoIG9mIGFzc29jJ3MgZm9yIHRoZQorCQkgKiBzeXN0
ZW0KKwkJICovCisJCUxJU1RfSU5TRVJUX0hFQUQoaGVhZCwgc3RjYiwgc2N0cF9hc29jcyk7CisK
KwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCVNDVFBfSU5QX1dVTkxPQ0soc3RjYi0+
c2N0cF9lcCk7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworI2lmIGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxP
Q0soc28sIDEpOworI2VuZGlmCisJCWFzb2MtPnRvdGFsX2ZsaWdodCA9IDA7CisJCWFzb2MtPnRv
dGFsX2ZsaWdodF9jb3VudCA9IDA7CisJCS8qIHByb2Nlc3MgdGhlIElOSVQgaW5mbyAocGVlcidz
IGluZm8pICovCisJCXJldHZhbCA9IHNjdHBfcHJvY2Vzc19pbml0KGluaXRfY3AsIHN0Y2IpOwor
CQlpZiAocmV0dmFsIDwgMCkgeworCQkJaWYgKGhvd19pbmR4IDwgc2l6ZW9mKGFzb2MtPmNvb2tp
ZV9ob3cpKQorCQkJCWFzb2MtPmNvb2tpZV9ob3dbaG93X2luZHhdID0gMTM7CisKKwkJCXJldHVy
biAoTlVMTCk7CisJCX0KKwkJLyoKKwkJICogc2luY2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFr
ZSBzdXJlIHdlIGRvbid0IGRvdWJsZQorCQkgKiB0aGluZ3MKKwkJICovCisJCW5ldC0+aGJfcmVz
cG9uZGVkID0gMTsKKworCQlpZiAoc2N0cF9sb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQoc3RjYiwg
bSwKKwkJCQkJCSAgaW5pdF9vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9jaHVuayks
CisJCQkJCQkgIGluaXRhY2tfb2Zmc2V0LCBzcmMsIGRzdCwgaW5pdF9zcmMsIHN0Y2ItPmFzb2Mu
cG9ydCkpIHsKKwkJCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29raWVfaG93KSkKKwkJ
CQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE0OworCisJCQlyZXR1cm4gKE5VTEwpOwor
CQl9CisJCS8qIHJlc3BvbmQgd2l0aCBhIENPT0tJRS1BQ0sgKi8KKwkJc2N0cF9zdG9wX2FsbF9j
b29raWVfdGltZXJzKHN0Y2IpOworCQlzY3RwX3Rvc3Nfb2xkX2Nvb2tpZXMoc3RjYiwgYXNvYyk7
CisJCXNjdHBfc2VuZF9jb29raWVfYWNrKHN0Y2IpOworCQlpZiAoaG93X2luZHggPCBzaXplb2Yo
YXNvYy0+Y29va2llX2hvdykpCisJCQlhc29jLT5jb29raWVfaG93W2hvd19pbmR4XSA9IDE1Owor
CisJCXJldHVybiAoc3RjYik7CisJfQorCWlmIChob3dfaW5keCA8IHNpemVvZihhc29jLT5jb29r
aWVfaG93KSkKKwkJYXNvYy0+Y29va2llX2hvd1tob3dfaW5keF0gPSAxNjsKKwkvKiBhbGwgb3Ro
ZXIgY2FzZXMuLi4gKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisKKy8qCisgKiBoYW5kbGUgYSBz
dGF0ZSBjb29raWUgZm9yIGEgbmV3IGFzc29jaWF0aW9uIG06IGlucHV0IHBhY2tldCBtYnVmIGNo
YWluLS0KKyAqIGFzc3VtZXMgYSBwdWxsdXAgb24gSVAvU0NUUC9DT09LSUUtRUNITyBjaHVuayBu
b3RlOiB0aGlzIGlzIGEgInNwbGl0IiBtYnVmCisgKiBhbmQgdGhlIGNvb2tpZSBzaWduYXR1cmUg
ZG9lcyBub3QgZXhpc3Qgb2Zmc2V0OiBvZmZzZXQgaW50byBtYnVmIHRvIHRoZQorICogY29va2ll
LWVjaG8gY2h1bmsgbGVuZ3RoOiBsZW5ndGggb2YgdGhlIGNvb2tpZSBjaHVuayB0bzogd2hlcmUg
dGhlIGluaXQKKyAqIHdhcyBmcm9tIHJldHVybnMgYSBuZXcgVENCCisgKi8KK3N0YXRpYyBzdHJ1
Y3Qgc2N0cF90Y2IgKgorc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcoc3RydWN0IG1idWYgKm0sIGlu
dCBpcGhsZW4sIGludCBvZmZzZXQsCisgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBz
b2NrYWRkciAqZHN0LAorICAgIHN0cnVjdCBzY3RwaGRyICpzaCwgc3RydWN0IHNjdHBfc3RhdGVf
Y29va2llICpjb29raWUsIGludCBjb29raWVfbGVuLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLAorICAgIHN0cnVjdCBzb2NrYWRkciAqaW5pdF9z
cmMsIGludCAqbm90aWZpY2F0aW9uLAorICAgIGludCBhdXRoX3NraXBwZWQsIHVpbnQzMl90IGF1
dGhfb2Zmc2V0LCB1aW50MzJfdCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
ICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisgICAgdWlu
dDMyX3QgdnJmX2lkLCB1aW50MTZfdCBwb3J0KQoreworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
KwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0X2NwLCBpbml0X2J1ZjsKKwlzdHJ1Y3Qgc2N0
cF9pbml0X2Fja19jaHVuayAqaW5pdGFja19jcCwgaW5pdGFja19idWY7CisJdW5pb24gc2N0cF9z
b2Nrc3RvcmUgc3RvcmU7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJaW50IGlu
aXRfb2Zmc2V0LCBpbml0YWNrX29mZnNldCwgaW5pdGFja19saW1pdDsKKwlpbnQgcmV0dmFsOwor
CWludCBlcnJvciA9IDA7CisJdWludDhfdCBhdXRoX2NodW5rX2J1ZltTQ1RQX1BBUkFNX0JVRkZF
Ul9TSVpFXTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCXNvID0gU0NUUF9JTlBfU08oaW5wKTsK
KyNlbmRpZgorCisJLyoKKwkgKiBmaW5kIGFuZCB2YWxpZGF0ZSB0aGUgSU5JVCBjaHVuayBpbiB0
aGUgY29va2llIChwZWVyJ3MgaW5mbykgdGhlCisJICogSU5JVCBzaG91bGQgc3RhcnQgYWZ0ZXIg
dGhlIGNvb2tpZS1lY2hvIGhlYWRlciBzdHJ1Y3QgKGNodW5rCisJICogaGVhZGVyLCBzdGF0ZSBj
b29raWUgaGVhZGVyIHN0cnVjdCkKKwkgKi8KKwlpbml0X29mZnNldCA9IG9mZnNldCArIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVuayk7CisJaW5pdF9jcCA9IChzdHJ1Y3Qgc2N0
cF9pbml0X2NodW5rICopCisJICAgIHNjdHBfbV9nZXRwdHIobSwgaW5pdF9vZmZzZXQsIHNpemVv
ZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSwKKwkgICAgKHVpbnQ4X3QgKikgJiBpbml0X2J1Zik7
CisJaWYgKGluaXRfY3AgPT0gTlVMTCkgeworCQkvKiBjb3VsZCBub3QgcHVsbCBhIElOSVQgY2h1
bmsgaW4gY29va2llICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJCQkicHJvY2Vz
c19jb29raWVfbmV3OiBjb3VsZCBub3QgcHVsbCBJTklUIGNodW5rIGhkclxuIik7CisJCXJldHVy
biAoTlVMTCk7CisJfQorCWlmIChpbml0X2NwLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElB
VElPTikgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAiSFVIPyBwcm9jZXNzX2Nvb2tp
ZV9uZXc6IGNvdWxkIG5vdCBmaW5kIElOSVQgY2h1bmshXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsK
Kwl9CisJaW5pdGFja19vZmZzZXQgPSBpbml0X29mZnNldCArIFNDVFBfU0laRTMyKG50b2hzKGlu
aXRfY3AtPmNoLmNodW5rX2xlbmd0aCkpOworCS8qCisJICogZmluZCBhbmQgdmFsaWRhdGUgdGhl
IElOSVQtQUNLIGNodW5rIGluIHRoZSBjb29raWUgKG15IGluZm8pIHRoZQorCSAqIElOSVQtQUNL
IGZvbGxvd3MgdGhlIElOSVQgY2h1bmsKKwkgKi8KKwlpbml0YWNrX2NwID0gKHN0cnVjdCBzY3Rw
X2luaXRfYWNrX2NodW5rICopCisJICAgIHNjdHBfbV9nZXRwdHIobSwgaW5pdGFja19vZmZzZXQs
IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCisJICAgICh1aW50OF90ICopICYg
aW5pdGFja19idWYpOworCWlmIChpbml0YWNrX2NwID09IE5VTEwpIHsKKwkJLyogY291bGQgbm90
IHB1bGwgSU5JVC1BQ0sgY2h1bmsgaW4gY29va2llICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDEsICJwcm9jZXNzX2Nvb2tpZV9uZXc6IGNvdWxkIG5vdCBwdWxsIElOSVQtQUNLIGNodW5r
IGhkclxuIik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChpbml0YWNrX2NwLT5jaC5jaHVu
a190eXBlICE9IFNDVFBfSU5JVElBVElPTl9BQ0spIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJ
LyoKKwkgKiBOT1RFOiBXZSBjYW4ndCB1c2UgdGhlIElOSVRfQUNLJ3MgY2hrX2xlbmd0aCB0byBk
ZXRlcm1pbmUgdGhlCisJICogImluaXRhY2tfbGltaXQiIHZhbHVlLiAgVGhpcyBpcyBiZWNhdXNl
IHRoZSBjaGtfbGVuZ3RoIGZpZWxkCisJICogaW5jbHVkZXMgdGhlIGxlbmd0aCBvZiB0aGUgY29v
a2llLCBidXQgdGhlIGNvb2tpZSBpcyBvbWl0dGVkIHdoZW4KKwkgKiB0aGUgSU5JVCBhbmQgSU5J
VF9BQ0sgYXJlIHRhY2tlZCBvbnRvIHRoZSBjb29raWUuLi4KKwkgKi8KKwlpbml0YWNrX2xpbWl0
ID0gb2Zmc2V0ICsgY29va2llX2xlbjsKKworCS8qCisJICogbm93IHRoYXQgd2Uga25vdyB0aGUg
SU5JVC9JTklULUFDSyBhcmUgaW4gcGxhY2UsIGNyZWF0ZSBhIG5ldyBUQ0IKKwkgKiBhbmQgcG9w
bHVhdGUKKwkgKi8KKworCS8qCisJICogSGVyZSB3ZSBkbyBhIHRyaWNrLCB3ZSBzZXQgaW4gTlVM
TCBmb3IgdGhlIHByb2MvdGhyZWFkIGFyZ3VtZW50LiBXZQorCSAqIGRvIHRoaXMgc2luY2UgaW4g
ZWZmZWN0IHdlIG9ubHkgdXNlIHRoZSBwIGFyZ3VtZW50IHdoZW4KKwkgKiB0aGUgc29ja2V0IGlz
IHVuYm91bmQgYW5kIHdlIG11c3QgZG8gYW4gaW1wbGljaXQgYmluZC4KKwkgKiBTaW5jZSB3ZSBh
cmUgZ2V0dGluZyBhIGNvb2tpZSwgd2UgY2Fubm90IGJlIHVuYm91bmQuCisJICovCisJc3RjYiA9
IHNjdHBfYWxvY19hc3NvYyhpbnAsIGluaXRfc3JjLCAmZXJyb3IsCisJICAgICAgICAgICAgICAg
ICAgICAgICBudG9obChpbml0YWNrX2NwLT5pbml0LmluaXRpYXRlX3RhZyksIHZyZl9pZCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgIG50b2hzKGluaXRhY2tfY3AtPmluaXQubnVtX291dGJvdW5k
X3N0cmVhbXMpLAorCSAgICAgICAgICAgICAgICAgICAgICAgcG9ydCwKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkgICAgICAgICAgICAg
ICAgICAgICAgIChzdHJ1Y3QgdGhyZWFkICopTlVMTAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkgICAgICAgICAgICAgICAgICAgICAgIChQS1RIUkVBRClOVUxMCisjZWxzZQorCSAgICAg
ICAgICAgICAgICAgICAgICAgKHN0cnVjdCBwcm9jICopTlVMTAorI2VuZGlmCisJICAgICAgICAg
ICAgICAgICAgICAgICApOworCWlmIChzdGNiID09IE5VTEwpIHsKKwkJc3RydWN0IG1idWYgKm9w
X2VycjsKKworCQkvKiBtZW1vcnkgcHJvYmxlbT8gKi8KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX0lO
UFVUMSwKKwkJCSJwcm9jZXNzX2Nvb2tpZV9uZXc6IG5vIHJvb20gZm9yIGFub3RoZXIgVENCIVxu
Iik7CisJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRfT0ZfUkVT
QywgIiIpOworCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgKHN0cnVjdCBzY3RwX3RjYiAq
KU5VTEwsIG0sIGlwaGxlbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICBzcmMsIGRzdCwgc2gs
IG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAg
ICAgIG1mbG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAg
IHZyZl9pZCwgcG9ydCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGdldCB0aGUgY29ycmVj
dCBzY3RwX25ldHMgKi8KKwlpZiAobmV0cCkKKwkJKm5ldHAgPSBzY3RwX2ZpbmRuZXQoc3RjYiwg
aW5pdF9zcmMpOworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCS8qIGdldCBzY29wZSB2YXJpYWJs
ZXMgb3V0IG9mIGNvb2tpZSAqLworCWFzb2MtPnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSBjb29r
aWUtPmlwdjRfc2NvcGU7CisJYXNvYy0+c2NvcGUuc2l0ZV9zY29wZSA9IGNvb2tpZS0+c2l0ZV9z
Y29wZTsKKwlhc29jLT5zY29wZS5sb2NhbF9zY29wZSA9IGNvb2tpZS0+bG9jYWxfc2NvcGU7CisJ
YXNvYy0+c2NvcGUubG9vcGJhY2tfc2NvcGUgPSBjb29raWUtPmxvb3BiYWNrX3Njb3BlOworCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICgoYXNvYy0+c2NvcGUuaXB2NF9hZGRyX2xl
Z2FsICE9IGNvb2tpZS0+aXB2NF9hZGRyX2xlZ2FsKSB8fAorCSAgICAoYXNvYy0+c2NvcGUuaXB2
Nl9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+aXB2Nl9hZGRyX2xlZ2FsKSB8fAorCSAgICAoYXNvYy0+
c2NvcGUuY29ubl9hZGRyX2xlZ2FsICE9IGNvb2tpZS0+Y29ubl9hZGRyX2xlZ2FsKSkgeworI2Vs
c2UKKwlpZiAoKGFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCAhPSBjb29raWUtPmlwdjRfYWRk
cl9sZWdhbCkgfHwKKwkgICAgKGFzb2MtPnNjb3BlLmlwdjZfYWRkcl9sZWdhbCAhPSBjb29raWUt
PmlwdjZfYWRkcl9sZWdhbCkpIHsKKyNlbmRpZgorCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCisJ
CS8qCisJCSAqIEhvdXN0b24gd2UgaGF2ZSBhIHByb2JsZW0uIFRoZSBFUCBjaGFuZ2VkIHdoaWxl
IHRoZQorCQkgKiBjb29raWUgd2FzIGluIGZsaWdodC4gT25seSByZWNvdXJzZSBpcyB0byBhYm9y
dCB0aGUKKwkJICogYXNzb2NpYXRpb24uCisJCSAqLworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRl
X2NhdXNlKFNDVFBfQ0FVU0VfT1VUX09GX1JFU0MsICIiKTsKKwkJc2N0cF9hYm9ydF9hc3NvY2lh
dGlvbihpbnAsIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLCBtLCBpcGhsZW4sCisJCQkJICAgICAg
IHNyYywgZHN0LCBzaCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJCSh2b2lkKXNjdHBfZnJlZV9hc3Nv
YyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJICAgICAgU0NUUF9GUk9NX1NDVFBf
SU5QVVQgKyBTQ1RQX0xPQ18xOCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5k
aWYKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogcHJvY2VzcyB0aGUgSU5JVC1BQ0sgaW5mbyAo
bXkgaW5mbykgKi8KKwlhc29jLT5teV92dGFnID0gbnRvaGwoaW5pdGFja19jcC0+aW5pdC5pbml0
aWF0ZV90YWcpOworCWFzb2MtPm15X3J3bmQgPSBudG9obChpbml0YWNrX2NwLT5pbml0LmFfcndu
ZCk7CisJYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9IG50b2hzKGluaXRhY2tfY3AtPmluaXQubnVt
X291dGJvdW5kX3N0cmVhbXMpOworCWFzb2MtPmluaXRfc2VxX251bWJlciA9IG50b2hsKGluaXRh
Y2tfY3AtPmluaXQuaW5pdGlhbF90c24pOworCWFzb2MtPnNlbmRpbmdfc2VxID0gYXNvYy0+YXNj
b25mX3NlcV9vdXQgPSBhc29jLT5zdHJfcmVzZXRfc2VxX291dCA9IGFzb2MtPmluaXRfc2VxX251
bWJlcjsKKwlhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCA9IGFzb2MtPmFzY29uZl9zZXFfb3V0
IC0gMTsKKwlhc29jLT5hc2NvbmZfc2VxX2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXEgPSBhc29j
LT5pbml0X3NlcV9udW1iZXIgLSAxOworCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4gPSBhc29jLT5p
bml0X3NlcV9udW1iZXI7CisKKwlhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCA9IGFzb2Mt
Pmxhc3RfYWNrZWRfc2VxOworCisJLyogcHJvY2VzcyB0aGUgSU5JVCBpbmZvIChwZWVyJ3MgaW5m
bykgKi8KKwlpZiAobmV0cCkKKwkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2luaXQoaW5pdF9jcCwg
c3RjYik7CisJZWxzZQorCQlyZXR2YWwgPSAwOworCWlmIChyZXR2YWwgPCAwKSB7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQko
dm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18xOSk7Cisj
aWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJ
CVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJcmV0dXJuIChOVUxMKTsKKwl9
CisJLyogbG9hZCBhbGwgYWRkcmVzc2VzICovCisJaWYgKHNjdHBfbG9hZF9hZGRyZXNzZXNfZnJv
bV9pbml0KHN0Y2IsIG0sCisJICAgIGluaXRfb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2lu
aXRfY2h1bmspLCBpbml0YWNrX29mZnNldCwKKwkgICAgc3JjLCBkc3QsIGluaXRfc3JjLCBwb3J0
KSkgeworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisjZW5kaWYKKwkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxf
UFJPQywKKwkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVUICsgU0NU
UF9MT0NfMjApOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCXJldHVy
biAoTlVMTCk7CisJfQorCS8qCisJICogdmVyaWZ5IGFueSBwcmVjZWRpbmcgQVVUSCBjaHVuayB0
aGF0IHdhcyBza2lwcGVkCisJICovCisJLyogcHVsbCB0aGUgbG9jYWwgYXV0aGVudGljYXRpb24g
cGFyYW1ldGVycyBmcm9tIHRoZSBjb29raWUvaW5pdC1hY2sgKi8KKwlzY3RwX2F1dGhfZ2V0X2Nv
b2tpZV9wYXJhbXMoc3RjYiwgbSwKKwkgICAgaW5pdGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9hY2tfY2h1bmspLAorCSAgICBpbml0YWNrX2xpbWl0IC0gKGluaXRhY2tfb2Zm
c2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSkpOworCWlmIChhdXRoX3Nr
aXBwZWQpIHsKKwkJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKKworCQlhdXRoID0gKHN0
cnVjdCBzY3RwX2F1dGhfY2h1bmsgKikKKwkJICAgIHNjdHBfbV9nZXRwdHIobSwgYXV0aF9vZmZz
ZXQsIGF1dGhfbGVuLCBhdXRoX2NodW5rX2J1Zik7CisJCWlmICgoYXV0aCA9PSBOVUxMKSB8fCBz
Y3RwX2hhbmRsZV9hdXRoKHN0Y2IsIGF1dGgsIG0sIGF1dGhfb2Zmc2V0KSkgeworCQkJLyogYXV0
aCBITUFDIGZhaWxlZCwgZHVtcCB0aGUgYXNzb2MgYW5kIHBhY2tldCAqLworCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX0FVVEgxLAorCQkJCSJDT09LSUUtRUNITzogQVVUSCBmYWlsZWRcbiIpOworI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNl
bmRpZgorCQkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJP
QywKKwkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBf
TE9DXzIxKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXJldHVy
biAoTlVMTCk7CisJCX0gZWxzZSB7CisJCQkvKiByZW1haW5pbmcgY2h1bmtzIGNoZWNrZWQuLi4g
Z29vZCB0byBnbyAqLworCQkJc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkID0gMTsKKwkJfQorCX0K
KworCS8qCisJICogaWYgd2UncmUgZG9pbmcgQVNDT05GcywgY2hlY2sgdG8gc2VlIGlmIHdlIGhh
dmUgYW55IG5ldyBsb2NhbAorCSAqIGFkZHJlc3NlcyB0aGF0IG5lZWQgdG8gZ2V0IGFkZGVkIHRv
IHRoZSBwZWVyIChlZy4gYWRkcmVzc2VzCisJICogY2hhbmdlZCB3aGlsZSBjb29raWUgZWNobyBp
biBmbGlnaHQpLiAgVGhpcyBuZWVkcyB0byBiZSBkb25lCisJICogYWZ0ZXIgd2UgZ28gdG8gdGhl
IE9QRU4gc3RhdGUgdG8gZG8gdGhlIGNvcnJlY3QgYXNjb25mCisJICogcHJvY2Vzc2luZy4gZWxz
ZSwgbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNvcnJlY3QgYWRkcmVzc2VzIGluIG91cgorCSAqIGxp
c3RzCisJICovCisKKwkvKiB3YXJuaW5nLCB3ZSByZS11c2Ugc2luLCBzaW42LCBzYV9zdG9yZSBo
ZXJlISAqLworCS8qIHB1bGwgaW4gbG9jYWxfYWRkcmVzcyAob3VyICJmcm9tIiBhZGRyZXNzKSAq
LworCXN3aXRjaCAoY29va2llLT5sYWRkcl90eXBlKSB7CisjaWZkZWYgSU5FVAorCWNhc2UgU0NU
UF9JUFY0X0FERFJFU1M6CisJCS8qIHNvdXJjZSBhZGRyIGlzIElQdjQgKi8KKwkJbWVtc2V0KCZz
dG9yZS5zaW4sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJc3RvcmUuc2luLnNp
bl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlzdG9yZS5zaW4uc2lu
X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCXN0b3JlLnNpbi5z
aW5fYWRkci5zX2FkZHIgPSBjb29raWUtPmxhZGRyZXNzWzBdOworCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJLyogc291cmNlIGFkZHIg
aXMgSVB2NiAqLworCQltZW1zZXQoJnN0b3JlLnNpbjYsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7CisJCXN0b3JlLnNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJCXN0b3JlLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisjZW5kaWYKKwkJc3RvcmUuc2luNi5zaW42X3Njb3BlX2lkID0gY29va2llLT5z
Y29wZV9pZDsKKwkJbWVtY3B5KCZzdG9yZS5zaW42LnNpbjZfYWRkciwgY29va2llLT5sYWRkcmVz
cywgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIFNDVFBfQ09OTl9BRERSRVNTOgorCQkvKiBzb3VyY2Ug
YWRkciBpcyBjb25uICovCisJCW1lbXNldCgmc3RvcmUuc2Nvbm4sIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubikpOworCQlzdG9yZS5zY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOwor
I2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJCXN0b3JlLnNjb25uLnNjb25uX2xlbiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwkJbWVtY3B5KCZzdG9yZS5zY29ubi5zY29u
bl9hZGRyLCBjb29raWUtPmxhZGRyZXNzLCBzaXplb2Yodm9pZCAqKSk7CisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworI2VuZGlmCisJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFND
VFBfTk9STUFMX1BST0MsCisJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9J
TlBVVCArIFNDVFBfTE9DXzIyKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRp
ZgorCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qIHVwZGF0ZSBjdXJyZW50IHN0YXRlICovCisJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwgIm1vdmluZyB0byBPUEVOIHN0YXRlXG4iKTsKKwlT
Q1RQX1NFVF9TVEFURShhc29jLCBTQ1RQX1NUQVRFX09QRU4pOworCWlmIChhc29jLT5zdGF0ZSAm
IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TSFVURE9XTkdVQVJELAorCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBhc29j
LT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwl9CisJc2N0cF9zdG9wX2FsbF9jb29raWVfdGltZXJz
KHN0Y2IpOworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19wYXNzaXZlZXN0YWIpOwor
CVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKworCS8qIHNldCB1cCB0
byBub3RpZnkgdXBwZXIgbGF5ZXIgKi8KKwkqbm90aWZpY2F0aW9uID0gU0NUUF9OT1RJRllfQVNT
T0NfVVA7CisJaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJICAgIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkpICYmCisJICAgICghU0NUUF9JU19MSVNURU5JTkcoaW5wKSkpIHsK
KwkJLyoKKwkJICogVGhpcyBpcyBhbiBlbmRwb2ludCB0aGF0IGNhbGxlZCBjb25uZWN0KCkgaG93
IGl0IGdvdCBhCisJCSAqIGNvb2tpZSB0aGF0IGlzIE5FVyBpcyBhIGJpdCBvZiBhIG15c3Rlcnku
IEl0IG11c3QgYmUgdGhhdAorCQkgKiB0aGUgSU5JVCB3YXMgc2VudCwgYnV0IGJlZm9yZSBpdCBn
b3QgdGhlcmUuLiBhIGNvbXBsZXRlCisJCSAqIElOSVQvSU5JVC1BQ0svQ09PS0lFIGFycml2ZWQu
IEJ1dCBvZiBjb3Vyc2UgdGhlbiBpdAorCQkgKiBzaG91bGQgaGF2ZSB3ZW50IHRvIHRoZSBvdGhl
ciBjb2RlLi4gbm90IGhlcmUuLiBvaCB3ZWxsLi4KKwkJICogYSBiaXQgb2YgcHJvdGVjdGlvbiBp
cyB3b3J0aCBoYXZpbmcuLgorCQkgKi8KKwkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBT
Q1RQX1BDQl9GTEFHU19DT05ORUNURUQ7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhz
bywgMSk7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0NMT1NFRF9TT0NLRVQpIHsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQlyZXR1
cm4gKE5VTEwpOworCQl9CisjZW5kaWYKKwkJc29pc2Nvbm5lY3RlZChzdGNiLT5zY3RwX3NvY2tl
dCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJ
TkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwl9IGVsc2UgaWYgKChz
dGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkg
ICAgICAgICAgIChTQ1RQX0lTX0xJU1RFTklORyhpbnApKSkgeworCQkvKgorCQkgKiBXZSBkb24n
dCB3YW50IHRvIGRvIGFueXRoaW5nIHdpdGggdGhpcyBvbmUuIFNpbmNlIGl0IGlzCisJCSAqIHRo
ZSBsaXN0ZW5pbmcgZ3V5LiBUaGUgdGltZXIgd2lsbCBnZXQgc3RhcnRlZCBmb3IKKwkJICogYWNj
ZXB0ZWQgY29ubmVjdGlvbnMgaW4gdGhlIGNhbGxlci4KKwkJICovCisJCTsKKwl9CisJLyogc2lu
Y2Ugd2UgZGlkIG5vdCBzZW5kIGEgSEIgbWFrZSBzdXJlIHdlIGRvbid0IGRvdWJsZSB0aGluZ3Mg
Ki8KKwlpZiAoKG5ldHApICYmICgqbmV0cCkpCisJCSgqbmV0cCktPmhiX3Jlc3BvbmRlZCA9IDE7
CisKKwlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorCSAgICBzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwgaW5wLCBzdGNiLCBOVUxMKTsKKwl9
CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsK
KwlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCXN0cnVjdCB0aW1l
dmFsIG9sZDsKKworCQkvKiBjYWxjdWxhdGUgdGhlIFJUVCBhbmQgc2V0IHRoZSBlbmNhcHMgcG9y
dCAqLworCQlvbGQudHZfc2VjID0gY29va2llLT50aW1lX2VudGVyZWQudHZfc2VjOworCQlvbGQu
dHZfdXNlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisJCSgqbmV0cCktPlJUTyA9
IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCAqbmV0cCwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZvbGQsIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCX0KKwkv
KiByZXNwb25kIHdpdGggYSBDT09LSUUtQUNLICovCisJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3Rj
Yik7CisKKwkvKgorCSAqIGNoZWNrIHRoZSBhZGRyZXNzIGxpc3RzIGZvciBhbnkgQVNDT05GcyB0
aGF0IG5lZWQgdG8gYmUgc2VudAorCSAqIEFGVEVSIHRoZSBjb29raWUtYWNrIGlzIHNlbnQKKwkg
Ki8KKwlzY3RwX2NoZWNrX2FkZHJlc3NfbGlzdChzdGNiLCBtLAorCSAgICBpbml0YWNrX29mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVuayksCisJICAgIGluaXRhY2tfbGlt
aXQgLSAoaW5pdGFja19vZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9hY2tfY2h1bmsp
KSwKKwkgICAgJnN0b3JlLnNhLCBjb29raWUtPmxvY2FsX3Njb3BlLCBjb29raWUtPnNpdGVfc2Nv
cGUsCisJICAgIGNvb2tpZS0+aXB2NF9zY29wZSwgY29va2llLT5sb29wYmFja19zY29wZSk7CisK
KworCXJldHVybiAoc3RjYik7Cit9CisKKy8qCisgKiBDT0RFIExJS0UgVEhJUyBORUVEUyBUTyBS
VU4gSUYgdGhlIHBlZXIgc3VwcG9ydHMgdGhlIE5BVCBleHRlbnNpb24sIGkuZQorICogd2UgTkVF
RCB0byBtYWtlIHN1cmUgd2UgYXJlIG5vdCBhbHJlYWR5IHVzaW5nIHRoZSB2dGFnLiBJZiBzbyB3
ZQorICogbmVlZCB0byBzZW5kIGJhY2sgYW4gQUJPUlQtVFJZLUFHQUlOLVdJVEgtTkVXLVRBRyBO
byBtaWRkbGUgYm94IGJpdCEKKwloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gp
W1NDVFBfUENCSEFTSF9BU09DKHRhZywKKwkJCQkJCQkgICAgU0NUUF9CQVNFX0lORk8oaGFzaGFz
b2NtYXJrKSldOworCUxJU1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJICAg
ICAgICBpZiAoKHN0Y2ItPmFzb2MubXlfdnRhZyA9PSB0YWcpICYmIChzdGNiLT5ycG9ydCA9PSBy
cG9ydCkgJiYgKGlucCA9PSBzdGNiLT5zY3RwX2VwKSkgIHsKKwkJICAgICAgIC0tIFNFTkQgQUJP
UlQgLSBUUlkgQUdBSU4gLS0KKwkJfQorCX0KKyovCisKKy8qCisgKiBoYW5kbGVzIGEgQ09PS0lF
LUVDSE8gbWVzc2FnZSBzdGNiOiBtb2RpZmllZCB0byBlaXRoZXIgYSBuZXcgb3IgbGVmdCBhcwor
ICogZXhpc3RpbmcgKG5vbi1OVUxMKSBUQ0IKKyAqLworc3RhdGljIHN0cnVjdCBtYnVmICoKK3Nj
dHBfaGFuZGxlX2Nvb2tpZV9lY2hvKHN0cnVjdCBtYnVmICptLCBpbnQgaXBobGVuLCBpbnQgb2Zm
c2V0LAorICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAg
ICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2Nvb2tpZV9lY2hvX2NodW5rICpjcCwK
KyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qgc2N0cF90Y2IgKipzdGNiLCBz
dHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwKKyAgICBpbnQgYXV0aF9za2lwcGVkLCB1aW50MzJfdCBh
dXRoX29mZnNldCwgdWludDMyX3QgYXV0aF9sZW4sCisgICAgc3RydWN0IHNjdHBfdGNiICoqbG9j
a2VkX3RjYiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBl
LCB1aW50MzJfdCBtZmxvd2lkLAorI2VuZGlmCisgICAgdWludDMyX3QgdnJmX2lkLCB1aW50MTZf
dCBwb3J0KQoreworCXN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqY29va2llOworCXN0cnVjdCBz
Y3RwX3RjYiAqbF9zdGNiID0gKnN0Y2I7CisJc3RydWN0IHNjdHBfaW5wY2IgKmxfaW5wOworCXN0
cnVjdCBzb2NrYWRkciAqdG87CisJc3RydWN0IHNjdHBfcGNiICplcDsKKwlzdHJ1Y3QgbWJ1ZiAq
bV9zaWc7CisJdWludDhfdCBjYWxjX3NpZ1tTQ1RQX1NJR05BVFVSRV9TSVpFXSwgdG1wX3NpZ1tT
Q1RQX1NJR05BVFVSRV9TSVpFXTsKKwl1aW50OF90ICpzaWc7CisJdWludDhfdCBjb29raWVfb2sg
PSAwOworCXVuc2lnbmVkIGludCBzaWdfb2Zmc2V0LCBjb29raWVfb2Zmc2V0OworCXVuc2lnbmVk
IGludCBjb29raWVfbGVuOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKwlzdHJ1Y3QgdGltZXZhbCB0
aW1lX2V4cGlyZXM7CisJaW50IG5vdGlmaWNhdGlvbiA9IDA7CisJc3RydWN0IHNjdHBfbmV0cyAq
bmV0bDsKKwlpbnQgaGFkX2FfZXhpc3RpbmdfdGNiID0gMDsKKwlpbnQgc2VuZF9pbnRfY29uZiA9
IDA7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzY29ubjsKKyNlbmRpZgorCisJ
U0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFuZGxlX2Nvb2tpZTogaGFuZGxp
bmcgQ09PS0lFLUVDSE9cbiIpOworCisJaWYgKGlucF9wID09IE5VTEwpIHsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJY29va2llID0gJmNwLT5jb29raWU7CisJY29va2llX29mZnNldCA9IG9mZnNl
dCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY29va2llX2xlbiA9IG50b2hzKGNw
LT5jaC5jaHVua19sZW5ndGgpOworCisJaWYgKGNvb2tpZV9sZW4gPCBzaXplb2Yoc3RydWN0IHNj
dHBfY29va2llX2VjaG9fY2h1bmspICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1
bmspICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfYWNrX2NodW5rKSArIFNDVFBfU0lH
TkFUVVJFX1NJWkUpIHsKKwkJLyogY29va2llIHRvbyBzbWFsbCAqLworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwlpZiAoKGNvb2tpZS0+cGVlcnBvcnQgIT0gc2gtPnNyY19wb3J0KSB8fAorCSAgICAo
Y29va2llLT5teXBvcnQgIT0gc2gtPmRlc3RfcG9ydCkgfHwKKwkgICAgKGNvb2tpZS0+bXlfdnRh
ZyAhPSBzaC0+dl90YWcpKSB7CisJCS8qCisJCSAqIGludmFsaWQgcG9ydHMgb3IgYmFkIHRhZy4g
IE5vdGUgdGhhdCB3ZSBhbHdheXMgbGVhdmUgdGhlCisJCSAqIHZfdGFnIGluIHRoZSBoZWFkZXIg
aW4gbmV0d29yayBvcmRlciBhbmQgd2hlbiB3ZSBzdG9yZWQKKwkJICogaXQgaW4gdGhlIG15X3Z0
YWcgc2xvdCB3ZSBhbHNvIGxlZnQgaXQgaW4gbmV0d29yayBvcmRlci4KKwkJICogVGhpcyBtYWlu
dGFpbnMgdGhlIG1hdGNoIGV2ZW4gdGhvdWdoIGl0IG1heSBiZSBpbiB0aGUKKwkJICogb3Bwb3Np
dGUgYnl0ZSBvcmRlciBvZiB0aGUgbWFjaGluZSA6LT4KKwkJICovCisJCXJldHVybiAoTlVMTCk7
CisJfQorCS8qCisJICogc3BsaXQgb2ZmIHRoZSBzaWduYXR1cmUgaW50byBpdHMgb3duIG1idWYg
KHNpbmNlIGl0IHNob3VsZCBub3QgYmUKKwkgKiBjYWxjdWxhdGVkIGluIHRoZSBzY3RwX2htYWNf
bSgpIGNhbGwpLgorCSAqLworCXNpZ19vZmZzZXQgPSBvZmZzZXQgKyBjb29raWVfbGVuIC0gU0NU
UF9TSUdOQVRVUkVfU0laRTsKKwltX3NpZyA9IG1fc3BsaXQobSwgc2lnX29mZnNldCwgTV9OT1dB
SVQpOworCWlmIChtX3NpZyA9PSBOVUxMKSB7CisJCS8qIG91dCBvZiBtZW1vcnkgb3IgPz8gKi8K
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5B
QkxFKSB7CisJCXNjdHBfbG9nX21iYyhtX3NpZywgU0NUUF9NQlVGX1NQTElUKTsKKwl9CisjZW5k
aWYKKworCS8qCisJICogY29tcHV0ZSB0aGUgc2lnbmF0dXJlL2RpZ2VzdCBmb3IgdGhlIGNvb2tp
ZQorCSAqLworCWVwID0gJigqaW5wX3ApLT5zY3RwX2VwOworCWxfaW5wID0gKmlucF9wOworCWlm
IChsX3N0Y2IpIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKGxfc3RjYik7CisJfQorCVNDVFBfSU5QX1JM
T0NLKGxfaW5wKTsKKwlpZiAobF9zdGNiKSB7CisJCVNDVFBfVENCX0xPQ0sobF9zdGNiKTsKKwl9
CisJLyogd2hpY2ggY29va2llIGlzIGl0PyAqLworCWlmICgoY29va2llLT50aW1lX2VudGVyZWQu
dHZfc2VjIDwgKGxvbmcpZXAtPnRpbWVfb2Zfc2VjcmV0X2NoYW5nZSkgJiYKKwkgICAgKGVwLT5j
dXJyZW50X3NlY3JldF9udW1iZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJLyog
aXQncyB0aGUgb2xkIGNvb2tpZSAqLworCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hNQUMsCisJ
CSAgICAodWludDhfdCAqKWVwLT5zZWNyZXRfa2V5WyhpbnQpZXAtPmxhc3Rfc2VjcmV0X251bWJl
cl0sCisJCSAgICBTQ1RQX1NFQ1JFVF9TSVpFLCBtLCBjb29raWVfb2Zmc2V0LCBjYWxjX3NpZywg
MCk7CisJfSBlbHNlIHsKKwkJLyogaXQncyB0aGUgY3VycmVudCBjb29raWUgKi8KKwkJKHZvaWQp
c2N0cF9obWFjX20oU0NUUF9ITUFDLAorCQkgICAgKHVpbnQ4X3QgKillcC0+c2VjcmV0X2tleVso
aW50KWVwLT5jdXJyZW50X3NlY3JldF9udW1iZXJdLAorCQkgICAgU0NUUF9TRUNSRVRfU0laRSwg
bSwgY29va2llX29mZnNldCwgY2FsY19zaWcsIDApOworCX0KKwkvKiBnZXQgdGhlIHNpZ25hdHVy
ZSAqLworCVNDVFBfSU5QX1JVTkxPQ0sobF9pbnApOworCXNpZyA9ICh1aW50OF90ICopIHNjdHBf
bV9nZXRwdHIobV9zaWcsIDAsIFNDVFBfU0lHTkFUVVJFX1NJWkUsICh1aW50OF90ICopICYgdG1w
X3NpZyk7CisJaWYgKHNpZyA9PSBOVUxMKSB7CisJCS8qIGNvdWxkbid0IGZpbmQgc2lnbmF0dXJl
ICovCisJCXNjdHBfbV9mcmVlbShtX3NpZyk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qIGNv
bXBhcmUgdGhlIHJlY2VpdmVkIGRpZ2VzdCB3aXRoIHRoZSBjb21wdXRlZCBkaWdlc3QgKi8KKwlp
ZiAobWVtY21wKGNhbGNfc2lnLCBzaWcsIFNDVFBfU0lHTkFUVVJFX1NJWkUpICE9IDApIHsKKwkJ
LyogdHJ5IHRoZSBvbGQgY29va2llPyAqLworCQlpZiAoKGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2
X3NlYyA9PSAobG9uZyllcC0+dGltZV9vZl9zZWNyZXRfY2hhbmdlKSAmJgorCQkgICAgKGVwLT5j
dXJyZW50X3NlY3JldF9udW1iZXIgIT0gZXAtPmxhc3Rfc2VjcmV0X251bWJlcikpIHsKKwkJCS8q
IGNvbXB1dGUgZGlnZXN0IHdpdGggb2xkICovCisJCQkodm9pZClzY3RwX2htYWNfbShTQ1RQX0hN
QUMsCisJCQkgICAgKHVpbnQ4X3QgKillcC0+c2VjcmV0X2tleVsoaW50KWVwLT5sYXN0X3NlY3Jl
dF9udW1iZXJdLAorCQkJICAgIFNDVFBfU0VDUkVUX1NJWkUsIG0sIGNvb2tpZV9vZmZzZXQsIGNh
bGNfc2lnLCAwKTsKKwkJCS8qIGNvbXBhcmUgKi8KKwkJCWlmIChtZW1jbXAoY2FsY19zaWcsIHNp
ZywgU0NUUF9TSUdOQVRVUkVfU0laRSkgPT0gMCkKKwkJCQljb29raWVfb2sgPSAxOworCQl9CisJ
fSBlbHNlIHsKKwkJY29va2llX29rID0gMTsKKwl9CisKKwkvKgorCSAqIE5vdyBiZWZvcmUgd2Ug
Y29udGludWUgd2UgbXVzdCByZWNvbnN0cnVjdCBvdXIgbWJ1ZiBzbyB0aGF0CisJICogbm9ybWFs
IHByb2Nlc3Npbmcgb2YgYW55IG90aGVyIGNodW5rcyB3aWxsIHdvcmsuCisJICovCisJeworCQlz
dHJ1Y3QgbWJ1ZiAqbV9hdDsKKworCQltX2F0ID0gbTsKKwkJd2hpbGUgKFNDVFBfQlVGX05FWFQo
bV9hdCkgIT0gTlVMTCkgeworCQkJbV9hdCA9IFNDVFBfQlVGX05FWFQobV9hdCk7CisJCX0KKwkJ
U0NUUF9CVUZfTkVYVChtX2F0KSA9IG1fc2lnOworCX0KKworCWlmIChjb29raWVfb2sgPT0gMCkg
eworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAiaGFuZGxlX2Nvb2tpZV9lY2hvOiBjb29r
aWUgc2lnbmF0dXJlIHZhbGlkYXRpb24gZmFpbGVkIVxuIik7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19JTlBVVDIsCisJCQkib2Zmc2V0ID0gJXUsIGNvb2tpZV9vZmZzZXQgPSAldSwgc2lnX29mZnNl
dCA9ICV1XG4iLAorCQkJKHVpbnQzMl90KSBvZmZzZXQsIGNvb2tpZV9vZmZzZXQsIHNpZ19vZmZz
ZXQpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qCisJICogY2hlY2sgdGhlIGNvb2tpZSB0
aW1lc3RhbXBzIHRvIGJlIHN1cmUgaXQncyBub3Qgc3RhbGUKKwkgKi8KKwkodm9pZClTQ1RQX0dF
VFRJTUVfVElNRVZBTCgmbm93KTsKKwkvKiBFeHBpcmUgdGltZSBpcyBpbiBUaWNrcywgc28gd2Ug
Y29udmVydCB0byBzZWNvbmRzICovCisJdGltZV9leHBpcmVzLnR2X3NlYyA9IGNvb2tpZS0+dGlt
ZV9lbnRlcmVkLnR2X3NlYyArIFRJQ0tTX1RPX1NFQyhjb29raWUtPmNvb2tpZV9saWZlKTsKKwl0
aW1lX2V4cGlyZXMudHZfdXNlYyA9IGNvb2tpZS0+dGltZV9lbnRlcmVkLnR2X3VzZWM7CisjaWZu
ZGVmIF9fRnJlZUJTRF9fCisJaWYgKHRpbWVyY21wKCZub3csICZ0aW1lX2V4cGlyZXMsID4pKQor
I2Vsc2UKKwlpZiAodGltZXZhbGNtcCgmbm93LCAmdGltZV9leHBpcmVzLCA+KSkKKyNlbmRpZgor
CXsKKwkJLyogY29va2llIGlzIHN0YWxlISAqLworCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworCQlz
dHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUgKmNhdXNlOworCQlzdHJ1Y3QgdGltZXZhbCBk
aWZmOworCQl1aW50MzJfdCBzdGFsZW5lc3M7CisKKwkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9m
b3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCQlpZiAo
b3BfZXJyID09IE5VTEwpIHsKKwkJCS8qIEZPT0JBUiAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJ
fQorCQkvKiBTZXQgdGhlIGxlbiAqLworCQlTQ1RQX0JVRl9MRU4ob3BfZXJyKSA9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUpOworCQljYXVzZSA9IG10b2Qob3BfZXJyLCBz
dHJ1Y3Qgc2N0cF9lcnJvcl9zdGFsZV9jb29raWUgKik7CisJCWNhdXNlLT5jYXVzZS5jb2RlID0g
aHRvbnMoU0NUUF9DQVVTRV9TVEFMRV9DT09LSUUpOworCQljYXVzZS0+Y2F1c2UubGVuZ3RoID0g
aHRvbnMoKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKworCQkgICAgKHNpemVvZih1aW50
MzJfdCkpKSk7CisjaWZuZGVmIF9fRnJlZUJTRF9fCisJCXRpbWVyc3ViKCZub3csICZ0aW1lX2V4
cGlyZXMsICZkaWZmKTsKKyNlbHNlCisJCWRpZmYgPSBub3c7CisJCXRpbWV2YWxzdWIoJmRpZmYs
ICZ0aW1lX2V4cGlyZXMpOworI2VuZGlmCisJCWlmICgodWludDMyX3QpZGlmZi50dl9zZWMgPiBV
SU5UMzJfTUFYIC8gMTAwMDAwMCkgeworCQkJc3RhbGVuZXNzID0gVUlOVDMyX01BWDsKKwkJfSBl
bHNlIHsKKwkJCXN0YWxlbmVzcyA9IGRpZmYudHZfc2VjICogMTAwMDAwMDsKKwkJfQorCQlpZiAo
VUlOVDMyX01BWCAtIHN0YWxlbmVzcyA+PSAodWludDMyX3QpZGlmZi50dl91c2VjKSB7CisJCQlz
dGFsZW5lc3MgKz0gZGlmZi50dl91c2VjOworCQl9IGVsc2UgeworCQkJc3RhbGVuZXNzID0gVUlO
VDMyX01BWDsKKwkJfQorCQljYXVzZS0+c3RhbGVfdGltZSA9IGh0b25sKHN0YWxlbmVzcyk7CisJ
CXNjdHBfc2VuZF9vcGVycl90byhzcmMsIGRzdCwgc2gsIGNvb2tpZS0+cGVlcnNfdnRhZywgb3Bf
ZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCSAgICAgICAgICAgICAgICAgICBtZmxv
d3R5cGUsIG1mbG93aWQsIGxfaW5wLT5maWJudW0sCisjZW5kaWYKKwkJICAgICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogTm93IHdl
IG11c3Qgc2VlIHdpdGggdGhlIGxvb2t1cCBhZGRyZXNzIGlmIHdlIGhhdmUgYW4gZXhpc3RpbmcK
KwkgKiBhc29jLiBUaGlzIHdpbGwgb25seSBoYXBwZW4gaWYgd2Ugd2VyZSBpbiB0aGUgQ09PS0lF
LVdBSVQgc3RhdGUKKwkgKiBhbmQgYSBJTklUIGNvbGxpZGVkIHdpdGggdXMgYW5kIHNvbWV3aGVy
ZSB0aGUgcGVlciBzZW50IHRoZQorCSAqIGNvb2tpZSBvbiBhbm90aGVyIGFkZHJlc3MgYmVzaWRl
cyB0aGUgc2luZ2xlIGFkZHJlc3Mgb3VyIGFzc29jCisJICogaGFkIGZvciBoaW0uIEluIHRoaXMg
Y2FzZSB3ZSB3aWxsIGhhdmUgb25lIG9mIHRoZSB0aWUtdGFncyBzZXQgYXQKKwkgKiBsZWFzdCBB
TkQgdGhlIGFkZHJlc3MgZmllbGQgaW4gdGhlIGNvb2tpZSBjYW4gYmUgdXNlZCB0byBsb29rIGl0
CisJICogdXAuCisJICovCisJdG8gPSBOVUxMOworCXN3aXRjaCAoY29va2llLT5hZGRyX3R5cGUp
IHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgU0NUUF9JUFY2X0FERFJFU1M6CisJCW1lbXNldCgmc2lu
NiwgMCwgc2l6ZW9mKHNpbjYpKTsKKwkJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lm
ZGVmIEhBVkVfU0lONl9MRU4KKwkJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42KTsKKyNlbmRp
ZgorCQlzaW42LnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJc2luNi5zaW42X3Njb3BlX2lk
ID0gY29va2llLT5zY29wZV9pZDsKKwkJbWVtY3B5KCZzaW42LnNpbjZfYWRkci5zNl9hZGRyLCBj
b29raWUtPmFkZHJlc3MsCisJCSAgICBzaXplb2Yoc2luNi5zaW42X2FkZHIuczZfYWRkcikpOwor
CQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRl
ZiBJTkVUCisJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJbWVtc2V0KCZzaW4sIDAsIHNpemVv
ZihzaW4pKTsKKwkJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xF
TgorCQlzaW4uc2luX2xlbiA9IHNpemVvZihzaW4pOworI2VuZGlmCisJCXNpbi5zaW5fcG9ydCA9
IHNoLT5zcmNfcG9ydDsKKwkJc2luLnNpbl9hZGRyLnNfYWRkciA9IGNvb2tpZS0+YWRkcmVzc1sw
XTsKKwkJdG8gPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJYnJlYWs7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBTQ1RQX0NPTk5fQUREUkVTUzoKKwkJbWVt
c2V0KCZzY29ubiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCXNjb25uLnNj
b25uX2ZhbWlseSA9IEFGX0NPTk47CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwkJc2Nvbm4uc2Nv
bm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlzY29ubi5z
Y29ubl9wb3J0ID0gc2gtPnNyY19wb3J0OworCQltZW1jcHkoJnNjb25uLnNjb25uX2FkZHIsIGNv
b2tpZS0+YWRkcmVzcywgc2l6ZW9mKHZvaWQgKikpOworCQl0byA9IChzdHJ1Y3Qgc29ja2FkZHIg
Kikmc2Nvbm47CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogVGhpcyBzaG91bGQg
bm90IGhhcHBlbiAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlpZiAoKnN0Y2IgPT0gTlVMTCkg
eworCQkvKiBZZXAsIGxldHMgY2hlY2sgKi8KKwkJKnN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlv
bl9lcF9hZGRyKGlucF9wLCB0bywgbmV0cCwgZHN0LCBOVUxMKTsKKwkJaWYgKCpzdGNiID09IE5V
TEwpIHsKKwkJCS8qCisJCQkgKiBXZSBzaG91bGQgaGF2ZSBvbmx5IGdvdCBiYWNrIHRoZSBzYW1l
IGlucC4gSWYgd2UKKwkJCSAqIGdvdCBiYWNrIGEgZGlmZmVyZW50IGVwIHdlIGhhdmUgYSBwcm9i
bGVtLiBUaGUKKwkJCSAqIG9yaWdpbmFsIGZpbmRlcCBnb3QgYmFjayBsX2lucCBhbmQgbm93CisJ
CQkgKi8KKwkJCWlmIChsX2lucCAhPSAqaW5wX3ApIHsKKwkJCQlTQ1RQX1BSSU5URigiQmFkIHBy
b2JsZW0gZmluZF9lcCBnb3QgYSBkaWZmIGlucCB0aGVuIHNwZWNpYWxfbG9jYXRlP1xuIik7CisJ
CQl9CisJCX0gZWxzZSB7CisJCQlpZiAoKmxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCS8qIElu
IHRoaXMgY2FzZSB3ZSBmb3VuZCB0aGUgYXNzb2Mgb25seQorCQkJCSAqIGFmdGVyIHdlIGxvY2tl
ZCB0aGUgY3JlYXRlIGxvY2suIFRoaXMgbWVhbnMKKwkJCQkgKiB3ZSBhcmUgaW4gYSBjb2xsaWRp
bmcgY2FzZSBhbmQgd2UgbXVzdCBtYWtlCisJCQkJICogc3VyZSB0aGF0IHdlIHVubG9jayB0aGUg
dGNiIGlmIGl0cyBvbmUgb2YgdGhlCisJCQkJICogY2FzZXMgd2hlcmUgd2UgdGhyb3cgYXdheSB0
aGUgaW5jb21pbmcgcGFja2V0cy4KKwkJCQkgKi8KKwkJCQkqbG9ja2VkX3RjYiA9ICpzdGNiOwor
CisJCQkJLyogV2UgbXVzdCBhbHNvIGluY3JlbWVudCB0aGUgaW5wIHJlZiBjb3VudAorCQkJCSAq
IHNpbmNlIHRoZSByZWZfY291bnQgZmxhZ3Mgd2FzIHNldCB3aGVuIHdlCisJCQkJICogZGlkIG5v
dCBmaW5kIHRoZSBUQ0IsIG5vdyB3ZSBmb3VuZCBpdCB3aGljaAorCQkJCSAqIHJlZHVjZXMgdGhl
IHJlZmNvdW50Li4gd2UgbXVzdCByYWlzZSBpdCBiYWNrCisJCQkJICogb3V0IHRvIGJhbGFuY2Ug
aXQgYWxsIDotKQorCQkJCSAqLworCQkJCVNDVFBfSU5QX0lOQ1JfUkVGKCgqc3RjYiktPnNjdHBf
ZXApOworCQkJCWlmICgoKnN0Y2IpLT5zY3RwX2VwICE9IGxfaW5wKSB7CisJCQkJCVNDVFBfUFJJ
TlRGKCJIdWg/IGVwOiVwIGRpZmYgdGhlbiBsX2lucDolcD9cbiIsCisJCQkJCQkgICAgKHZvaWQg
KikoKnN0Y2IpLT5zY3RwX2VwLCAodm9pZCAqKWxfaW5wKTsKKwkJCQl9CisJCQl9CisJCX0KKwl9
CisKKwljb29raWVfbGVuIC09IFNDVFBfU0lHTkFUVVJFX1NJWkU7CisJaWYgKCpzdGNiID09IE5V
TEwpIHsKKwkJLyogdGhpcyBpcyB0aGUgIm5vcm1hbCIgY2FzZS4uLiBnZXQgYSBuZXcgVENCICov
CisJCSpzdGNiID0gc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXcobSwgaXBobGVuLCBvZmZzZXQsIHNy
YywgZHN0LCBzaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb29raWUsIGNv
b2tpZV9sZW4sICppbnBfcCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRw
LCB0bywgJm5vdGlmaWNhdGlvbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
dXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dp
ZCwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9y
dCk7CisJfSBlbHNlIHsKKwkJLyogdGhpcyBpcyBhYm5vcm1hbC4uLiBjb29raWUtZWNobyBvbiBl
eGlzdGluZyBUQ0IgKi8KKwkJaGFkX2FfZXhpc3RpbmdfdGNiID0gMTsKKwkJKnN0Y2IgPSBzY3Rw
X3Byb2Nlc3NfY29va2llX2V4aXN0aW5nKG0sIGlwaGxlbiwgb2Zmc2V0LAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JjLCBkc3QsIHNoLAorCQkJCQkJICAgICBjb29r
aWUsIGNvb2tpZV9sZW4sICppbnBfcCwgKnN0Y2IsIG5ldHAsIHRvLAorCQkJCQkJICAgICAmbm90
aWZpY2F0aW9uLCBhdXRoX3NraXBwZWQsIGF1dGhfb2Zmc2V0LCBhdXRoX2xlbiwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCX0KKworCWlmICgqc3RjYiA9PSBOVUxMKSB7CisJ
CS8qIHN0aWxsIG5vIFRDQi4uLiBtdXN0IGJlIGJhZCBjb29raWUtZWNobyAqLworCQlyZXR1cm4g
KE5VTEwpOworCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCWlmICgqbmV0cCAhPSBOVUxM
KSB7CisJCSgqbmV0cCktPmZsb3d0eXBlID0gbWZsb3d0eXBlOworCQkoKm5ldHApLT5mbG93aWQg
PSBtZmxvd2lkOworCX0KKyNlbmRpZgorCS8qCisJICogT2ssIHdlIGJ1aWx0IGFuIGFzc29jaWF0
aW9uIHNvIGNvbmZpcm0gdGhlIGFkZHJlc3Mgd2Ugc2VudCB0aGUKKwkgKiBJTklULUFDSyB0by4K
KwkgKi8KKwluZXRsID0gc2N0cF9maW5kbmV0KCpzdGNiLCB0byk7CisJLyoKKwkgKiBUaGlzIGNv
ZGUgc2hvdWxkIGluIHRoZW9yeSBOT1QgcnVuIGJ1dAorCSAqLworCWlmIChuZXRsID09IE5VTEwp
IHsKKwkJLyogVFNOSCEgSHVoLCB3aHkgZG8gSSBuZWVkIHRvIGFkZCB0aGlzIGFkZHJlc3MgaGVy
ZT8gKi8KKwkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKCpzdGNiLCB0bywgTlVMTCwgcG9ydCwK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRE9OT1RfU0VUU0NPUEUsIFNDVFBfSU5f
Q09PS0lFX1BST0MpKSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCW5ldGwgPSBzY3RwX2Zp
bmRuZXQoKnN0Y2IsIHRvKTsKKwl9CisJaWYgKG5ldGwpIHsKKwkJaWYgKG5ldGwtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpIHsKKwkJCW5ldGwtPmRlc3Rfc3RhdGUgJj0gflND
VFBfQUREUl9VTkNPTkZJUk1FRDsKKwkJCSh2b2lkKXNjdHBfc2V0X3ByaW1hcnlfYWRkcigoKnN0
Y2IpLCAoc3RydWN0IHNvY2thZGRyICopTlVMTCwKKwkJCSAgICBuZXRsKTsKKwkJCXNlbmRfaW50
X2NvbmYgPSAxOworCQl9CisJfQorCXNjdHBfc3RhcnRfbmV0X3RpbWVycygqc3RjYik7CisJaWYg
KCgqaW5wX3ApLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlpZiAo
IWhhZF9hX2V4aXN0aW5nX3RjYiB8fAorCQkgICAgKCgoKmlucF9wKS0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBJZiB3ZSBoYXZl
IGEgTkVXIGNvb2tpZSBvciB0aGUgY29ubmVjdCBuZXZlcgorCQkJICogcmVhY2hlZCB0aGUgY29u
bmVjdGVkIHN0YXRlIGR1cmluZyBjb2xsaXNpb24gd2UKKwkJCSAqIG11c3QgZG8gdGhlIFRDUCBh
Y2NlcHQgdGhpbmcuCisJCQkgKi8KKwkJCXN0cnVjdCBzb2NrZXQgKnNvLCAqb3NvOworCQkJc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucDsKKworCQkJaWYgKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElG
WV9BU1NPQ19SRVNUQVJUKSB7CisJCQkJLyoKKwkJCQkgKiBGb3IgYSByZXN0YXJ0IHdlIHdpbGwg
a2VlcCB0aGUgc2FtZQorCQkJCSAqIHNvY2tldCwgbm8gbmVlZCB0byBkbyBhbnl0aGluZy4gSSBU
SElOSyEhCisJCQkJICovCisJCQkJc2N0cF91bHBfbm90aWZ5KG5vdGlmaWNhdGlvbiwgKnN0Y2Is
IDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJaWYgKHNlbmRfaW50X2NvbmYpIHsK
KwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCisJ
CQkJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9U
X0xPQ0tFRCk7CisJCQkJfQorCQkJCXJldHVybiAobSk7CisJCQl9CisJCQlvc28gPSAoKmlucF9w
KS0+c2N0cF9zb2NrZXQ7CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uIDwgNzAwMDAwKQorCQkJLyoKKwkJCSAqIFdlIGRvIHRoaXMgdG8ga2VlcCB0aGUgc29j
a2V0cyBzaWRlIGhhcHB5IGR1cmluZworCQkJICogdGhlIHNvbmV3Y29uIE9OTFkuCisJCQkgKi8K
KwkJCU5FVF9MT0NLX0dJQU5UKCk7CisjZW5kaWYKKwkJCWF0b21pY19hZGRfaW50KCYoKnN0Y2Ip
LT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soKCpzdGNiKSk7CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlDVVJW
TkVUX1NFVChvc28tPnNvX3ZuZXQpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
CQlTQ1RQX1NPQ0tFVF9MT0NLKG9zbywgMSk7CisjZW5kaWYKKwkJCXNvID0gc29uZXdjb25uKG9z
bywgMAorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJICAgICxOVUxMCisjZW5kaWYKKyNpZmRl
ZiBfX1BhbmRhX18KKwkJCSAgICAgLE5VTEwgLCAoKmlucF9wKS0+ZGVmX3ZyZl9pZAorI2VuZGlm
CisJCQkgICAgKTsKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPCA3MDAwMDApCisJCQlORVRfVU5MT0NLX0dJQU5UKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhvc28sIDEpOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlD
VVJWTkVUX1JFU1RPUkUoKTsKKyNlbmRpZgorCQkJU0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKKwkJ
CWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250LCAxKTsKKworCQkJaWYg
KHNvID09IE5VTEwpIHsKKwkJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJCXN0cnVjdCBzb2Nr
ZXQgKnBjYl9zbzsKKyNlbmRpZgorCQkJCS8qIFRvbyBtYW55IHNvY2tldHMgKi8KKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfSU5QVVQxLCAicHJvY2Vzc19jb29raWVfbmV3OiBubyByb29tIGZvciBh
bm90aGVyIHNvY2tldCFcbiIpOworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NU
UF9DQVVTRV9PVVRfT0ZfUkVTQywgIiIpOworCQkJCXNjdHBfYWJvcnRfYXNzb2NpYXRpb24oKmlu
cF9wLCBOVUxMLCBtLCBpcGhsZW4sCisJCQkJCQkgICAgICAgc3JjLCBkc3QsIHNoLCBvcF9lcnIs
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgIG1m
bG93dHlwZSwgbWZsb3dpZCwKKyNlbmRpZgorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgdnJm
X2lkLCBwb3J0KTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKKwkJCQlwY2Jfc28gPSBTQ1RQX0lOUF9TTygqaW5wX3ApOworCQkJCWF0b21p
Y19hZGRfaW50KCYoKnN0Y2IpLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NUUF9UQ0JfVU5MT0NL
KCgqc3RjYikpOworCQkJCVNDVFBfU09DS0VUX0xPQ0socGNiX3NvLCAxKTsKKwkJCQlTQ1RQX1RD
Ql9MT0NLKCgqc3RjYikpOworCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigqc3RjYiktPmFzb2Mu
cmVmY250LCAxKTsKKyNlbmRpZgorCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYygqaW5wX3AsICpz
dGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzIzKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0socGNi
X3NvLCAxKTsKKyNlbmRpZgorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlpbnAgPSAoc3Ry
dWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsK
KwkJCS8qCisJCQkgKiBXZSBhZGQgdGhlIHVuYm91bmQgZmxhZyBoZXJlIHNvIHRoYXQKKwkJCSAq
IGlmIHdlIGdldCBhbiBzb2Fib3J0KCkgYmVmb3JlIHdlIGdldCB0aGUKKwkJCSAqIG1vdmVfcGNi
IGRvbmUsIHdlIHdpbGwgcHJvcGVybHkgY2xlYW51cC4KKwkJCSAqLworCQkJaW5wLT5zY3RwX2Zs
YWdzID0gKFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUgfAorCQkJICAgIFNDVFBfUENCX0ZMQUdTX0NP
Tk5FQ1RFRCB8CisJCQkgICAgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCB8CisJCQkgICAgU0NU
UF9QQ0JfRkxBR1NfVU5CT1VORCB8CisJCQkgICAgKFNDVFBfUENCX0NPUFlfRkxBR1MgJiAoKmlu
cF9wKS0+c2N0cF9mbGFncykgfAorCQkJICAgIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSk7CisJ
CQlpbnAtPnNjdHBfZmVhdHVyZXMgPSAoKmlucF9wKS0+c2N0cF9mZWF0dXJlczsKKwkJCWlucC0+
c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyA9ICgqaW5wX3ApLT5zY3RwX21vYmlsaXR5X2ZlYXR1cmVz
OworCQkJaW5wLT5zY3RwX3NvY2tldCA9IHNvOworCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAo
KmlucF9wKS0+c2N0cF9mcmFnX3BvaW50OworCQkJaW5wLT5tYXhfY3duZCA9ICgqaW5wX3ApLT5t
YXhfY3duZDsKKwkJCWlucC0+c2N0cF9jbXRfb25fb2ZmID0gKCppbnBfcCktPnNjdHBfY210X29u
X29mZjsKKwkJCWlucC0+ZWNuX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5lY25fc3VwcG9ydGVkOwor
CQkJaW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gKCppbnBfcCktPnByc2N0cF9zdXBwb3J0ZWQ7CisJ
CQlpbnAtPmF1dGhfc3VwcG9ydGVkID0gKCppbnBfcCktPmF1dGhfc3VwcG9ydGVkOworCQkJaW5w
LT5hc2NvbmZfc3VwcG9ydGVkID0gKCppbnBfcCktPmFzY29uZl9zdXBwb3J0ZWQ7CisJCQlpbnAt
PnJlY29uZmlnX3N1cHBvcnRlZCA9ICgqaW5wX3ApLT5yZWNvbmZpZ19zdXBwb3J0ZWQ7CisJCQlp
bnAtPm5yc2Fja19zdXBwb3J0ZWQgPSAoKmlucF9wKS0+bnJzYWNrX3N1cHBvcnRlZDsKKwkJCWlu
cC0+cGt0ZHJvcF9zdXBwb3J0ZWQgPSAoKmlucF9wKS0+cGt0ZHJvcF9zdXBwb3J0ZWQ7CisJCQlp
bnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQgPSAoKmlucF9wKS0+cGFydGlhbF9kZWxpdmVyeV9w
b2ludDsKKwkJCWlucC0+c2N0cF9jb250ZXh0ID0gKCppbnBfcCktPnNjdHBfY29udGV4dDsKKwkJ
CWlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9ICgqaW5wX3ApLT5sb2NhbF9zdHJyZXNldF9z
dXBwb3J0OworCQkJaW5wLT5maWJudW0gPSAoKmlucF9wKS0+ZmlibnVtOworCQkJaW5wLT5pbnBf
c3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yID0gTlVMTDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJCQlpbnAtPnVscF9pbmZvID0gKCppbnBfcCktPnVscF9pbmZvOworCQkJaW5wLT5y
ZWN2X2NhbGxiYWNrID0gKCppbnBfcCktPnJlY3ZfY2FsbGJhY2s7CisJCQlpbnAtPnNlbmRfY2Fs
bGJhY2sgPSAoKmlucF9wKS0+c2VuZF9jYWxsYmFjazsKKwkJCWlucC0+c2VuZF9zYl90aHJlc2hv
bGQgPSAoKmlucF9wKS0+c2VuZF9zYl90aHJlc2hvbGQ7CisjZW5kaWYKKwkJCS8qCisJCQkgKiBj
b3B5IGluIHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlCisJCQkgKiBvcmln
aW5hbCBlbmRwb2ludAorCQkJICovCisJCQlpZiAoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQor
CQkJCXNjdHBfZnJlZV9obWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCQkJaW5w
LT5zY3RwX2VwLmxvY2FsX2htYWNzID0KKwkJCSAgICBzY3RwX2NvcHlfaG1hY2xpc3QoKCppbnBf
cCktPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCQkJaWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRo
X2NodW5rcykKKwkJCQlzY3RwX2ZyZWVfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRo
X2NodW5rcyk7CisJCQlpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQorCQkJICAgIHNj
dHBfY29weV9jaHVua2xpc3QoKCppbnBfcCktPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOwor
CisJCQkvKgorCQkJICogTm93IHdlIG11c3QgbW92ZSBpdCBmcm9tIG9uZSBoYXNoIHRhYmxlIHRv
CisJCQkgKiBhbm90aGVyIGFuZCBnZXQgdGhlIHRjYiBpbiB0aGUgcmlnaHQgcGxhY2UuCisJCQkg
Ki8KKworCQkJLyogVGhpcyBpcyB3aGVyZSB0aGUgb25lLTItb25lIHNvY2tldCBpcyBwdXQgaW50
bworCQkJICogdGhlIGFjY2VwdCBzdGF0ZSB3YWl0aW5nIGZvciB0aGUgYWNjZXB0IQorCQkJICov
CisJCQlpZiAoKnN0Y2IpIHsKKwkJCQkoKnN0Y2IpLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVf
SU5fQUNDRVBUX1FVRVVFOworCQkJfQorCQkJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoKmlucF9w
LCBpbnAsICpzdGNiKTsKKworCQkJYXRvbWljX2FkZF9pbnQoJigqc3RjYiktPmFzb2MucmVmY250
LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSygoKnN0Y2IpKTsKKworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucCgoKmlucF9wKSwgaW5w
LCAqc3RjYiwKKwkJCSAgICAwKTsKKyNlbHNlCisJCQlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9f
bmV3X2lucCgoKmlucF9wKSwgaW5wLCAqc3RjYiwgTV9OT1dBSVQpOworI2VuZGlmCisJCQlTQ1RQ
X1RDQl9MT0NLKCgqc3RjYikpOworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKCpzdGNiKS0+YXNv
Yy5yZWZjbnQsIDEpOworCisKKwkJCS8qIG5vdyB3ZSBtdXN0IGNoZWNrIHRvIHNlZSBpZiB3ZSB3
ZXJlIGFib3J0ZWQgd2hpbGUKKwkJCSAqIHRoZSBtb3ZlIHdhcyBnb2luZyBvbiBhbmQgdGhlIGxv
Y2svdW5sb2NrIGhhcHBlbmVkLgorCQkJICovCisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKKwkJCQkvKiB5ZXAgaXQgd2FzLCB3ZSBsZWF2ZSB0
aGUKKwkJCQkgKiBhc3NvYyBhdHRhY2hlZCB0byB0aGUgc29ja2V0IHNpbmNlCisJCQkJICogdGhl
IHNjdHBfaW5wY2JfZnJlZSgpIGNhbGwgd2lsbCBzZW5kCisJCQkJICogYW4gYWJvcnQgZm9yIHVz
LgorCQkJCSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCX0KKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkvKiBTd2l0Y2ggb3ZlciB0
byB0aGUgbmV3IGd1eSAqLworCQkJKmlucF9wID0gaW5wOworCQkJc2N0cF91bHBfbm90aWZ5KG5v
dGlmaWNhdGlvbiwgKnN0Y2IsIDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlpZiAo
c2VuZF9pbnRfY29uZikgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZB
Q0VfQ09ORklSTUVELAorCQkJCSAgICAgICAgICAgICAgICAoKnN0Y2IpLCAwLCAodm9pZCAqKW5l
dGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9CisKKwkJCS8qIFB1bGwgaXQgZnJvbSB0aGUg
aW5jb21wbGV0ZSBxdWV1ZSBhbmQgd2FrZSB0aGUgZ3V5ICovCisjaWYgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQlhdG9taWNfYWRkX2ludCgm
KCpzdGNiKS0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKCgqc3RjYikpOwor
CQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCXNvaXNjb25uZWN0ZWQoc28p
OworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQorCQkJU0NUUF9UQ0JfTE9DSygoKnN0Y2IpKTsKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigq
c3RjYiktPmFzb2MucmVmY250LCAxKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Cisj
ZW5kaWYKKwkJCXJldHVybiAobSk7CisJCX0KKwl9CisJaWYgKG5vdGlmaWNhdGlvbikgeworCQlz
Y3RwX3VscF9ub3RpZnkobm90aWZpY2F0aW9uLCAqc3RjYiwgMCwgTlVMTCwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKKwl9CisJaWYgKHNlbmRfaW50X2NvbmYpIHsKKwkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX0lOVEVSRkFDRV9DT05GSVJNRUQsCisJCSAgICAgICAgICAgICAgICAoKnN0Y2Ip
LCAwLCAodm9pZCAqKW5ldGwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJfQorCXJldHVybiAobSk7
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9jb29raWVfYWNrKHN0cnVjdCBzY3RwX2Nv
b2tpZV9hY2tfY2h1bmsgKmNwIFNDVFBfVU5VU0VELAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCS8qIGNwIG11c3Qgbm90IGJlIHVzZWQsIG90
aGVycyBjYWxsIHRoaXMgd2l0aG91dCBhIGMtYWNrIDotKSAqLworCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMiwKKwkJInNjdHBfaGFu
ZGxlX2Nvb2tpZV9hY2s6IGhhbmRsaW5nIENPT0tJRS1BQ0tcbiIpOworCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAobmV0ID09IE5VTEwpKSB7CisJCXJldHVybjsKKwl9CisKKwlhc29jID0gJnN0Y2It
PmFzb2M7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
VEhSRVNIT0xEX0xPR0dJTkcpIHsKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9USFJFU0hPTERfQ0xF
QVIsCisJCQkgICAgICAgYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCSAgICAgICAwLAor
CQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lOUFVULAorCQkJICAgICAgIF9fTElORV9fKTsKKwl9
CisJYXNvYy0+b3ZlcmFsbF9lcnJvcl9jb3VudCA9IDA7CisJc2N0cF9zdG9wX2FsbF9jb29raWVf
dGltZXJzKHN0Y2IpOworCS8qIHByb2Nlc3MgYWNjb3JkaW5nIHRvIGFzc29jaWF0aW9uIHN0YXRl
ICovCisJaWYgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9F
RCkgeworCQkvKiBzdGF0ZSBjaGFuZ2Ugb25seSBuZWVkZWQgd2hlbiBJIGFtIGluIHJpZ2h0IHN0
YXRlICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsICJtb3ZpbmcgdG8gT1BFTiBzdGF0
ZVxuIik7CisJCVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfT1BFTik7CisJCXNjdHBf
c3RhcnRfbmV0X3RpbWVycyhzdGNiKTsKKwkJaWYgKGFzb2MtPnN0YXRlICYgU0NUUF9TVEFURV9T
SFVURE9XTl9QRU5ESU5HKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
SFVURE9XTkdVQVJELAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgYXNvYy0+cHJpbWFyeV9k
ZXN0aW5hdGlvbik7CisKKwkJfQorCQkvKiB1cGRhdGUgUlRPICovCisJCVNDVFBfU1RBVF9JTkNS
X0NPVU5URVIzMihzY3Rwc19hY3RpdmVlc3RhYik7CisJCVNDVFBfU1RBVF9JTkNSX0dBVUdFMzIo
c2N0cHNfY3VycmVzdGFiKTsKKwkJaWYgKGFzb2MtPm92ZXJhbGxfZXJyb3JfY291bnQgPT0gMCkg
eworCQkJbmV0LT5SVE8gPSBzY3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0LAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmFzb2MtPnRpbWVfZW50ZXJlZCwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworCQl9
CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZhc29jLT50aW1lX2VudGVyZWQpOworCQlz
Y3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfQVNTT0NfVVAsIHN0Y2IsIDAsIE5VTEwsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwor
I2VuZGlmCisJCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NP
Tk5FQ1RFRDsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKwkJCXNvID0gU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2VuZGlmCisJ
CQlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpID09IDAp
IHsKKwkJCQlzb2lzY29ubmVjdGVkKHN0Y2ItPnNjdHBfc29ja2V0KTsKKwkJCX0KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCVNDVFBf
U09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJfQorCQkvKgorCQkgKiBzaW5jZSB3ZSBk
aWQgbm90IHNlbmQgYSBIQiBtYWtlIHN1cmUgd2UgZG9uJ3QgZG91YmxlCisJCSAqIHRoaW5ncwor
CQkgKi8KKwkJbmV0LT5oYl9yZXNwb25kZWQgPSAxOworCisJCWlmIChzdGNiLT5hc29jLnN0YXRl
ICYgU0NUUF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQkvKiBXZSBkb24ndCBuZWVkIHRvIGRv
IHRoZSBhc2NvbmYgdGhpbmcsCisJCQkgKiBub3IgaGIgb3IgYXV0b2Nsb3NlIGlmIHRoZSBzb2Nr
ZXQgaXMgY2xvc2VkLgorCQkJICovCisJCQlnb3RvIGNsb3NlZF9zb2NrZXQ7CisJCX0KKworCQlz
Y3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAs
CisJCSAgICBzdGNiLCBuZXQpOworCisKKwkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2Vf
dGlja3MgJiYKKwkJICAgIHNjdHBfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3RwX2VwLCBTQ1RQX1BD
Ql9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9BVVRPQ0xPU0UsCisJCQkgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJCX0KKwkJ
LyoKKwkJICogc2VuZCBBU0NPTkYgaWYgcGFyYW1ldGVycyBhcmUgcGVuZGluZyBhbmQgQVNDT05G
cyBhcmUKKwkJICogYWxsb3dlZCAoZWcuIGFkZHJlc3NlcyBjaGFuZ2VkIHdoZW4gaW5pdC9jb29r
aWUgZWNobyB3ZXJlCisJCSAqIGluIGZsaWdodCkKKwkJICovCisJCWlmICgoc2N0cF9pc19mZWF0
dXJlX29uKHN0Y2ItPnNjdHBfZXAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORikpICYmCisJCSAg
ICAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDEpICYmCisJCSAgICAoIVRBSUxRX0VN
UFRZKCZzdGNiLT5hc29jLmFzY29uZl9xdWV1ZSkpKSB7CisjaWZkZWYgU0NUUF9USU1FUl9CQVNF
RF9BU0NPTkYKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTQ09ORiwKKwkJ
CQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb24pOworI2Vsc2UKKwkJCXNjdHBfc2VuZF9hc2NvbmYoc3RjYiwgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uLAorCQkJCQkgU0NUUF9BRERSX05PVF9MT0NLRUQpOworI2VuZGlmCisJ
CX0KKwl9CitjbG9zZWRfc29ja2V0OgorCS8qIFRvc3MgdGhlIGNvb2tpZSBpZiBJIGNhbiAqLwor
CXNjdHBfdG9zc19vbGRfY29va2llcyhzdGNiLCBhc29jKTsKKwlpZiAoIVRBSUxRX0VNUFRZKCZh
c29jLT5zZW50X3F1ZXVlKSkgeworCQkvKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSBoYXZlIHBl
bmRpbmcgZGF0YSAqLworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwkJY2hrID0g
VEFJTFFfRklSU1QoJmFzb2MtPnNlbnRfcXVldWUpOworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9lY25fZWNobyhzdHJ1Y3Qgc2N0cF9lY25lX2No
dW5rICpjcCwKKwkJICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBf
bmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmxjaGs7CisJc3RydWN0IHNjdHBf
ZWNuZV9jaHVuayBia3VwOworCXVpbnQ4X3Qgb3ZlcnJpZGVfYml0OworCXVpbnQzMl90IHRzbiwg
d2luZG93X2RhdGFfdHNuOworCWludCBsZW47CisJdW5zaWduZWQgaW50IHBrdF9jbnQ7CisKKwls
ZW4gPSBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwlpZiAoKGxlbiAhPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfZWNuZV9jaHVuaykpICYmCisJICAgIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBvbGRf
c2N0cF9lY25lX2NodW5rKSkpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAobGVuID09IHNpemVvZihz
dHJ1Y3Qgb2xkX3NjdHBfZWNuZV9jaHVuaykpIHsKKwkJLyogSXRzIHRoZSBvbGQgZm9ybWF0ICov
CisJCW1lbWNweSgmYmt1cCwgY3AsIHNpemVvZihzdHJ1Y3Qgb2xkX3NjdHBfZWNuZV9jaHVuaykp
OworCQlia3VwLm51bV9wa3RzX3NpbmNlX2N3ciA9IGh0b25sKDEpOworCQljcCA9ICZia3VwOwor
CX0KKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2ZWNuZSk7CisJdHNuID0gbnRvaGwoY3AtPnRz
bik7CisJcGt0X2NudCA9IG50b2hsKGNwLT5udW1fcGt0c19zaW5jZV9jd3IpOworCWxjaGsgPSBU
QUlMUV9MQVNUKCZzdGNiLT5hc29jLnNlbmRfcXVldWUsIHNjdHBjaHVua19saXN0aGVhZCk7CisJ
aWYgKGxjaGsgPT0gTlVMTCkgeworCQl3aW5kb3dfZGF0YV90c24gPSBzdGNiLT5hc29jLnNlbmRp
bmdfc2VxIC0gMTsKKwl9IGVsc2UgeworCQl3aW5kb3dfZGF0YV90c24gPSBsY2hrLT5yZWMuZGF0
YS50c247CisJfQorCisJLyogRmluZCB3aGVyZSBpdCB3YXMgc2VudCB0byBpZiBwb3NzaWJsZS4g
Ki8KKwluZXQgPSBOVUxMOworCVRBSUxRX0ZPUkVBQ0gobGNoaywgJnN0Y2ItPmFzb2Muc2VudF9x
dWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChsY2hrLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJ
CQluZXQgPSBsY2hrLT53aG9UbzsKKwkJCW5ldC0+ZWNuX3ByZXZfY3duZCA9IGxjaGstPnJlYy5k
YXRhLmN3bmRfYXRfc2VuZDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX1RTTl9HVChsY2hr
LT5yZWMuZGF0YS50c24sIHRzbikpIHsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChuZXQgPT0g
TlVMTCkgeworCQkvKgorCQkgKiBXaGF0IHRvIGRvLiBBIHByZXZpb3VzIHNlbmQgb2YgYQorCQkg
KiBDV1Igd2FzIHBvc3NpYmx5IGxvc3QuIFNlZSBob3cgb2xkIGl0IGlzLCB3ZQorCQkgKiBtYXkg
aGF2ZSBpdCBtYXJrZWQgb24gdGhlIGFjdHVhbCBuZXQuCisJCSAqLworCQlUQUlMUV9GT1JFQUNI
KG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAodHNuID09IG5ldC0+
bGFzdF9jd3JfdHNuKSB7CisJCQkJLyogRm91bmQgaGltLCBzZW5kIGl0IG9mZiAqLworCQkJCWJy
ZWFrOworCQkJfQorCQl9CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIElmIHdl
IHJlYWNoIGhlcmUsIHdlIG5lZWQgdG8gc2VuZCBhIHNwZWNpYWwKKwkJCSAqIENXUiB0aGF0IHNh
eXMgaGV5LCB3ZSBkaWQgdGhpcyBhIGxvbmcgdGltZQorCQkJICogYWdvIGFuZCB5b3UgbG9zdCB0
aGUgcmVzcG9uc2UuCisJCQkgKi8KKwkJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5l
dHMpOworCQkJaWYgKG5ldCA9PSBOVUxMKSB7CisJCQkJLyogVFNOSCAqLworCQkJCXJldHVybjsK
KwkJCX0KKwkJCW92ZXJyaWRlX2JpdCA9IFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERTsKKwkJfSBl
bHNlIHsKKwkJCW92ZXJyaWRlX2JpdCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlvdmVycmlkZV9i
aXQgPSAwOworCX0KKwlpZiAoU0NUUF9UU05fR1QodHNuLCBuZXQtPmN3cl93aW5kb3dfdHNuKSAm
JgorCSAgICAoKG92ZXJyaWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09IDApKSB7
CisJCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9sIGdpdmVuIGluIHRoZSBwbHVn
Z2FibGUgQ0MgbW9kdWxlICovCisJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91
cGRhdGVfYWZ0ZXJfZWNuX2VjaG8oc3RjYiwgbmV0LCAwLCBwa3RfY250KTsKKwkJLyoKKwkJICog
V2UgcmVkdWNlIG9uY2UgZXZlcnkgUlRULiBTbyB3ZSB3aWxsIG9ubHkgbG93ZXIgY3duZCBhdAor
CQkgKiB0aGUgbmV4dCBzZW5kaW5nIHNlcSBpLmUuIHRoZSB3aW5kb3dfZGF0YV90c24KKwkJICov
CisJCW5ldC0+Y3dyX3dpbmRvd190c24gPSB3aW5kb3dfZGF0YV90c247CisJCW5ldC0+ZWNuX2Nl
X3BrdF9jbnQgKz0gcGt0X2NudDsKKwkJbmV0LT5sb3N0X2NudCA9IHBrdF9jbnQ7CisJCW5ldC0+
bGFzdF9jd3JfdHNuID0gdHNuOworCX0gZWxzZSB7CisJCW92ZXJyaWRlX2JpdCB8PSBTQ1RQX0NX
Ul9JTl9TQU1FX1dJTkRPVzsKKwkJaWYgKFNDVFBfVFNOX0dUKHRzbiwgbmV0LT5sYXN0X2N3cl90
c24pICYmCisJCSAgICAoKG92ZXJyaWRlX2JpdCZTQ1RQX0NXUl9SRURVQ0VfT1ZFUlJJREUpID09
IDApKSB7CisJCQkvKgorCQkJICogQW5vdGhlciBsb3NzIGluIHRoZSBzYW1lIHdpbmRvdyB1cGRh
dGUgaG93CisJCQkgKiBtYW55IG1hcmtzL3BhY2tldHMgbG9zdCB3ZSBoYXZlIGhhZC4KKwkJCSAq
LworCQkJaW50IGNudCA9IDE7CisJCQlpZiAocGt0X2NudCA+IG5ldC0+bG9zdF9jbnQpIHsKKwkJ
CQkvKiBTaG91bGQgYmUgdGhlIGNhc2UgKi8KKwkJCQljbnQgPSAocGt0X2NudCAtIG5ldC0+bG9z
dF9jbnQpOworCQkJCW5ldC0+ZWNuX2NlX3BrdF9jbnQgKz0gY250OworCQkJfQorCQkJbmV0LT5s
b3N0X2NudCA9IHBrdF9jbnQ7CisJCQluZXQtPmxhc3RfY3dyX3RzbiA9IHRzbjsKKwkJCS8qCisJ
CQkgKiBNb3N0IENDIGZ1bmN0aW9ucyB3aWxsIGlnbm9yZSB0aGlzIGNhbGwsIHNpbmNlIHdlIGFy
ZSBpbi13aW5kb3cKKwkJCSAqIHlldCBvZiB0aGUgaW5pdGlhbCBDRSB0aGUgcGVlciBzYXcuCisJ
CQkgKi8KKwkJCXN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
ZWNuX2VjaG8oc3RjYiwgbmV0LCAxLCBjbnQpOworCQl9CisJfQorCS8qCisJICogV2UgYWx3YXlz
IHNlbmQgYSBDV1IgdGhpcyB3YXkgaWYgb3VyIHByZXZpb3VzIG9uZSB3YXMgbG9zdCBvdXIKKwkg
KiBwZWVyIHdpbGwgZ2V0IGFuIHVwZGF0ZSwgb3IgaWYgaXQgaXMgbm90IHRpbWUgYWdhaW4gdG8g
cmVkdWNlIHdlCisJICogc3RpbGwgZ2V0IHRoZSBjd3IgdG8gdGhlIHBlZXIuIE5vdGUgd2Ugc2V0
IHRoZSBvdmVycmlkZSB3aGVuIHdlCisJICogY291bGQgbm90IGZpbmQgdGhlIFRTTiBvbiB0aGUg
Y2h1bmsgb3IgdGhlIGRlc3RpbmF0aW9uIG5ldHdvcmsuCisJICovCisJc2N0cF9zZW5kX2N3cihz
dGNiLCBuZXQsIG5ldC0+bGFzdF9jd3JfdHNuLCBvdmVycmlkZV9iaXQpOworfQorCitzdGF0aWMg
dm9pZAorc2N0cF9oYW5kbGVfZWNuX2N3cihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmsgKmNwLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAqIEhl
cmUgd2UgZ2V0IGEgQ1dSIGZyb20gdGhlIHBlZXIuIFdlIG11c3QgbG9vayBpbiB0aGUgb3V0cXVl
dWUgYW5kCisJICogbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBhIGNvdmVyZWQgRUNORSBpbiB0aGUg
Y29udHJvbCBjaHVuayBwYXJ0LgorCSAqIElmIHNvIHJlbW92ZSBpdC4KKwkgKi8KKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCXN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKmVj
bmU7CisJaW50IG92ZXJyaWRlOworCXVpbnQzMl90IGN3cl90c247CisKKwljd3JfdHNuID0gbnRv
aGwoY3AtPnRzbik7CisJb3ZlcnJpZGUgPSBjcC0+Y2guY2h1bmtfZmxhZ3MgJiBTQ1RQX0NXUl9S
RURVQ0VfT1ZFUlJJREU7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJnN0Y2ItPmFzb2MuY29u
dHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJaWYgKGNoay0+cmVjLmNodW5r
X2lkLmlkICE9IFNDVFBfRUNOX0VDSE8pIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgob3Zl
cnJpZGUgPT0gMCkgJiYgKGNoay0+d2hvVG8gIT0gbmV0KSkgeworCQkJLyogTXVzdCBiZSBmcm9t
IHRoZSByaWdodCBzcmMgdW5sZXNzIG92ZXJyaWRlIGlzIHNldCAqLworCQkJY29udGludWU7CisJ
CX0KKwkJZWNuZSA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rICopOwor
CQlpZiAoU0NUUF9UU05fR0UoY3dyX3RzbiwgbnRvaGwoZWNuZS0+dHNuKSkpIHsKKwkJCS8qIHRo
aXMgY292ZXJzIHRoaXMgRUNORSwgd2UgY2FuIHJlbW92ZSBpdCAqLworCQkJc3RjYi0+YXNvYy5l
Y25fZWNob19jbnRfb25xLS07CisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuY29udHJvbF9z
ZW5kX3F1ZXVlLCBjaGssCisJCQkgICAgc2N0cF9uZXh0KTsKKwkJCXN0Y2ItPmFzb2MuY3RybF9x
dWV1ZV9jbnQtLTsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0g
TlVMTDsKKwkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwkJCWlmIChvdmVycmlkZSA9PSAwKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZShzdHJ1Y3Qgc2N0
cF9zaHV0ZG93bl9jb21wbGV0ZV9jaHVuayAqY3AgU0NUUF9VTlVTRUQsCisgICAgc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0IHNjdHBfYXNz
b2NpYXRpb24gKmFzb2M7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKworCVNDVFBEQkco
U0NUUF9ERUJVR19JTlBVVDIsCisJCSJzY3RwX2hhbmRsZV9zaHV0ZG93bl9jb21wbGV0ZTogaGFu
ZGxpbmcgU0hVVERPV04tQ09NUExFVEVcbiIpOworCWlmIChzdGNiID09IE5VTEwpCisJCXJldHVy
bjsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwkvKiBwcm9jZXNzIGFjY29yZGluZyB0byBhc3Nv
Y2lhdGlvbiBzdGF0ZSAqLworCWlmIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRF
X1NIVVRET1dOX0FDS19TRU5UKSB7CisJCS8qIHVuZXhwZWN0ZWQgU0hVVERPV04tQ09NUExFVEUu
Li4gc28gaWdub3JlLi4uICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDIsCisJCQkic2N0
cF9oYW5kbGVfc2h1dGRvd25fY29tcGxldGU6IG5vdCBpbiBTQ1RQX1NUQVRFX1NIVVRET1dOX0FD
S19TRU5UIC0tLSBpZ25vcmVcbiIpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCXJldHVy
bjsKKwl9CisJLyogbm90aWZ5IHVwcGVyIGxheWVyIHByb3RvY29sICovCisJaWYgKHN0Y2ItPnNj
dHBfc29ja2V0KSB7CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19ET1dOLCBz
dGNiLCAwLCBOVUxMLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKyNpZmRlZiBJTlZBUklBTlRT
CisJaWYgKCFUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgfHwKKwkgICAgIVRBSUxRX0VN
UFRZKCZhc29jLT5zZW50X3F1ZXVlKSB8fAorCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRh
KHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCkpIHsKKwkJcGFuaWMoIlF1ZXVlcyBhcmUgbm90IGVt
cHR5IHdoZW4gaGFuZGxpbmcgU0hVVERPV04tQ09NUExFVEUiKTsKKwl9CisjZW5kaWYKKwkvKiBz
dG9wIHRoZSB0aW1lciAqLworCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0hVVERP
V05BQ0ssIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCwKKwkgICAgICAgICAgICAgICAgU0NUUF9G
Uk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18yNCk7CisJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMy
KHNjdHBzX3NodXRkb3duKTsKKwkvKiBmcmVlIHRoZSBUQ0IgKi8KKwlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQyLAorCQkic2N0cF9oYW5kbGVfc2h1dGRvd25fY29tcGxldGU6IGNhbGxzIGZyZWUt
YXNvY1xuIik7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKTsKKwlhdG9taWNfYWRk
X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlT
Q1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCWF0b21pY19z
dWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCSh2b2lkKXNjdHBf
ZnJlZV9hc3NvYyhzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCSAgICAg
ICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzI1KTsKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlT
Q1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJcmV0dXJuOworfQorCitzdGF0aWMg
aW50Citwcm9jZXNzX2NodW5rX2Ryb3Aoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9jaHVua19kZXNjICpkZXNjLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgdWludDhfdCBm
bGcpCit7CisJc3dpdGNoIChkZXNjLT5jaHVua190eXBlKSB7CisJY2FzZSBTQ1RQX0RBVEE6CisJ
CS8qIGZpbmQgdGhlIHRzbiB0byByZXNlbmQgKHBvc3NpYmx5ICovCisJeworCQl1aW50MzJfdCB0
c247CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnRwMTsKKworCQl0c24gPSBudG9obChkZXNj
LT50c25faWZhbnkpOworCQlUQUlMUV9GT1JFQUNIKHRwMSwgJnN0Y2ItPmFzb2Muc2VudF9xdWV1
ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJCQkJ
LyogZm91bmQgaXQgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChTQ1RQX1RTTl9HVCh0cDEt
PnJlYy5kYXRhLnRzbiwgdHNuKSkgeworCQkJCS8qIG5vdCBmb3VuZCAqLworCQkJCXRwMSA9IE5V
TEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHRwMSA9PSBOVUxMKSB7CisJCQkvKgor
CQkJICogRG8gaXQgdGhlIG90aGVyIHdheSAsIGFrYSB3aXRob3V0IHBheWluZworCQkJICogYXR0
ZW50aW9uIHRvIHF1ZXVlIHNlcSBvcmRlci4KKwkJCSAqLworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfcGRycGRuZm5kKTsKKwkJCVRBSUxRX0ZPUkVBQ0godHAxLCAmc3RjYi0+YXNvYy5zZW50X3F1
ZXVlLCBzY3RwX25leHQpIHsKKwkJCQlpZiAodHAxLT5yZWMuZGF0YS50c24gPT0gdHNuKSB7CisJ
CQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAo
dHAxID09IE5VTEwpIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnB0c25uZik7CisJCX0K
KwkJaWYgKCh0cDEpICYmICh0cDEtPnNlbnQgPCBTQ1RQX0RBVEFHUkFNX0FDS0VEKSkgeworCQkJ
dWludDhfdCAqZGRwOworCisJCQlpZiAoKChmbGcgJiBTQ1RQX0JBRENSQykgPT0gMCkgJiYKKwkJ
CSAgICAoKGZsZyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSkgeworCQkJCXJldHVybiAo
MCk7CisJCQl9CisJCQlpZiAoKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA9PSAwKSAmJgorCQkJICAg
ICgoZmxnICYgU0NUUF9GUk9NX01JRERMRV9CT1gpID09IDApKSB7CisJCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfcGRycGRpd25wKTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKHN0Y2It
PmFzb2MucGVlcnNfcnduZCA9PSAwICYmCisJCQkgICAgKGZsZyAmIFNDVFBfRlJPTV9NSURETEVf
Qk9YKSkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBkaXpydyk7CisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJCWRkcCA9ICh1aW50OF90ICopIChtdG9kKHRwMS0+ZGF0YSwgY2FkZHJf
dCkgKworCQkJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpOworCQkJeworCQkJ
CXVuc2lnbmVkIGludCBpaWk7CisKKwkJCQlmb3IgKGlpaSA9IDA7IGlpaSA8IHNpemVvZihkZXNj
LT5kYXRhX2J5dGVzKTsKKwkJCQkgICAgIGlpaSsrKSB7CisJCQkJCWlmIChkZHBbaWlpXSAhPSBk
ZXNjLT5kYXRhX2J5dGVzW2lpaV0pIHsKKwkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBi
YWRkKTsKKwkJCQkJCXJldHVybiAoLTEpOworCQkJCQl9CisJCQkJfQorCQkJfQorCisJCQlpZiAo
dHAxLT5kb19ydHQpIHsKKwkJCQkvKgorCQkJCSAqIHRoaXMgZ3V5IGhhZCBhIFJUTyBjYWxjdWxh
dGlvbgorCQkJCSAqIHBlbmRpbmcgb24gaXQsIGNhbmNlbCBpdAorCQkJCSAqLworCQkJCWlmICh0
cDEtPndob1RvLT5ydG9fbmVlZGVkID09IDApIHsKKwkJCQkJdHAxLT53aG9Uby0+cnRvX25lZWRl
ZCA9IDE7CisJCQkJfQorCQkJCXRwMS0+ZG9fcnR0ID0gMDsKKwkJCX0KKwkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX3BkcnBtYXJrKTsKKwkJCWlmICh0cDEtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQpCisJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFu
X2NudCk7CisJCQkvKgorCQkJICogbWFyayBpdCBhcyBpZiB3ZSB3ZXJlIGRvaW5nIGEgRlIsIHNp
bmNlCisJCQkgKiB3ZSB3aWxsIGJlIGdldHRpbmcgZ2FwIGFjayByZXBvcnRzIGJlaGluZAorCQkJ
ICogdGhlIGluZm8gZnJvbSB0aGUgcm91dGVyLgorCQkJICovCisJCQl0cDEtPnJlYy5kYXRhLmRv
aW5nX2Zhc3RfcmV0cmFuc21pdCA9IDE7CisJCQkvKgorCQkJICogbWFyayB0aGUgdHNuIHdpdGgg
d2hhdCBzZXF1ZW5jZXMgY2FuCisJCQkgKiBjYXVzZSBhIG5ldyBGUi4KKwkJCSAqLworCQkJaWYg
KFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpKSB7CisJCQkJdHAxLT5yZWMuZGF0
YS5mYXN0X3JldHJhbl90c24gPSBzdGNiLT5hc29jLnNlbmRpbmdfc2VxOworCQkJfSBlbHNlIHsK
KwkJCQl0cDEtPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IChUQUlMUV9GSVJTVCgmc3RjYi0+
YXNvYy5zZW5kX3F1ZXVlKSktPnJlYy5kYXRhLnRzbjsKKwkJCX0KKworCQkJLyogcmVzdGFydCB0
aGUgdGltZXIgKi8KKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3Rj
Yi0+c2N0cF9lcCwKKwkJCQkJc3RjYiwgdHAxLT53aG9UbywKKwkJCSAgICAgICAgICAgICAgICBT
Q1RQX0ZST01fU0NUUF9JTlBVVCArIFNDVFBfTE9DXzI2KTsKKwkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX1NFTkQsIHN0Y2ItPnNjdHBfZXAsCisJCQkJCSBzdGNiLCB0cDEtPndo
b1RvKTsKKworCQkJLyogZml4IGNvdW50cyBhbmQgdGhpbmdzICovCisJCQlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFCTEUp
IHsKKwkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfRE9XTl9QRFJQLAorCQkJCQkg
ICAgICAgdHAxLT53aG9Uby0+ZmxpZ2h0X3NpemUsCisJCQkJCSAgICAgICB0cDEtPmJvb2tfc2l6
ZSwKKwkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXN0Y2IsCisJCQkJCSAgICAgICB0
cDEtPnJlYy5kYXRhLnRzbik7CisJCQl9CisJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JB
TV9SRVNFTkQpIHsKKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRwMSk7CisJCQkJc2N0
cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJCXRwMS0+c2VudCA9
IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQl9IHsKKwkJCS8qIGF1ZGl0IGNvZGUgKi8KKwkJCXVu
c2lnbmVkIGludCBhdWRpdDsKKworCQkJYXVkaXQgPSAwOworCQkJVEFJTFFfRk9SRUFDSCh0cDEs
ICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJCWlmICh0cDEtPnNlbnQg
PT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJCQkJCWF1ZGl0Kys7CisJCQl9CisJCQlUQUlMUV9G
T1JFQUNIKHRwMSwgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLAorCQkJCSAgICAgIHNj
dHBfbmV4dCkgeworCQkJCWlmICh0cDEtPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJ
CQkJCWF1ZGl0Kys7CisJCQl9CisJCQlpZiAoYXVkaXQgIT0gc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQpIHsKKwkJCQlTQ1RQX1BSSU5URigiKipMb2NhbCBBdWRpdCBmaW5kcyBjbnQ6
JWQgYXNvYyBjbnQ6JWRcbiIsCisJCQkJCSAgICBhdWRpdCwgc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQpOworI2lmbmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCQlzdGNiLT5h
c29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IGF1ZGl0OworI2VuZGlmCisJCQl9CisJCX0KKwl9
CisJYnJlYWs7CisJY2FzZSBTQ1RQX0FTQ09ORjoKKwl7CisJCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmFzY29uZjsKKworCQlUQUlMUV9GT1JFQUNIKGFzY29uZiwgJnN0Y2ItPmFzb2MuY29udHJv
bF9zZW5kX3F1ZXVlLAorCQkJICAgICAgc2N0cF9uZXh0KSB7CisJCQlpZiAoYXNjb25mLT5yZWMu
Y2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlp
ZiAoYXNjb25mKSB7CisJCQlpZiAoYXNjb25mLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5E
KQorCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQp
OworCQkJYXNjb25mLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQlhc2NvbmYtPnNu
ZF9jb3VudC0tOworCQl9CisJfQorCWJyZWFrOworCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkv
KiByZXNlbmQgdGhlIElOSVQgKi8KKwkJc3RjYi0+YXNvYy5kcm9wcGVkX3NwZWNpYWxfY250Kys7
CisJCWlmIChzdGNiLT5hc29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPCBTQ1RQX1JFVFJZX0RST1BQ
RURfVEhSRVNIKSB7CisJCQkvKgorCQkJICogSWYgd2UgY2FuIGdldCBpdCBpbiwgaW4gYSBmZXcg
YXR0ZW1wdHMgd2UgZG8KKwkJCSAqIHRoaXMsIG90aGVyd2lzZSB3ZSBsZXQgdGhlIHRpbWVyIGZp
cmUuCisJCQkgKi8KKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSU5JVCwgc3Rj
Yi0+c2N0cF9lcCwKKwkJCQkJc3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJP
TV9TQ1RQX0lOUFVUICsgU0NUUF9MT0NfMjcpOworCQkJc2N0cF9zZW5kX2luaXRpYXRlKHN0Y2It
PnNjdHBfZXAsIHN0Y2IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1NFTEVDVElWRV9BQ0s6CisJY2FzZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0s6CisJCS8q
IHJlc2VuZCB0aGUgc2FjayAqLworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlicmVhazsKKwljYXNlIFNDVFBfSEVBUlRCRUFUX1JFUVVFU1Q6CisJCS8qIHJl
c2VuZCBhIGRlbWFuZCBIQiAqLworCQlpZiAoKHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3Vu
dCArIDMpIDwgc3RjYi0+YXNvYy5tYXhfc2VuZF90aW1lcykgeworCQkJLyogT25seSByZXRyYW5z
bWl0IGlmIHdlIEtOT1cgd2Ugd29udCBkZXN0cm95IHRoZSB0Y2IgKi8KKwkJCXNjdHBfc2VuZF9o
YihzdGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX1NIVVRET1dOOgorCQlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgbmV0KTsKKwkJYnJlYWs7
CisJY2FzZSBTQ1RQX1NIVVRET1dOX0FDSzoKKwkJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNi
LCBuZXQpOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09PS0lFX0VDSE86CisJeworCQlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjb29raWU7CisKKwkJY29va2llID0gTlVMTDsKKwkJVEFJTFFfRk9S
RUFDSChjb29raWUsICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwKKwkJCSAgICAgIHNj
dHBfbmV4dCkgeworCQkJaWYgKGNvb2tpZS0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lF
X0VDSE8pIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoY29va2llKSB7CisJCQlpZiAo
Y29va2llLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJCXNjdHBfdWNvdW50X2lu
Y3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQkJY29va2llLT5zZW50ID0g
U0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJCQlzY3RwX3N0b3BfYWxsX2Nvb2tpZV90aW1lcnMoc3Rj
Yik7CisJCX0KKwl9CisJYnJlYWs7CisJY2FzZSBTQ1RQX0NPT0tJRV9BQ0s6CisJCXNjdHBfc2Vu
ZF9jb29raWVfYWNrKHN0Y2IpOworCQlicmVhazsKKwljYXNlIFNDVFBfQVNDT05GX0FDSzoKKwkJ
LyogcmVzZW5kIGxhc3QgYXNjb25mIGFjayAqLworCQlzY3RwX3NlbmRfYXNjb25mX2FjayhzdGNi
KTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJY2FzZSBTQ1RQX0ZP
UldBUkRfQ1VNX1RTTjoKKwkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCAmc3RjYi0+YXNvYyk7CisJ
CWJyZWFrOworCQkvKiBjYW4ndCBkbyBhbnl0aGluZyB3aXRoIHRoZXNlICovCisJY2FzZSBTQ1RQ
X1BBQ0tFVF9EUk9QUEVEOgorCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoJLyogdGhpcyBzaG91
bGQgbm90IGhhcHBlbiAqLworCWNhc2UgU0NUUF9IRUFSVEJFQVRfQUNLOgorCWNhc2UgU0NUUF9B
Qk9SVF9BU1NPQ0lBVElPTjoKKwljYXNlIFNDVFBfT1BFUkFUSU9OX0VSUk9SOgorCWNhc2UgU0NU
UF9TSFVURE9XTl9DT01QTEVURToKKwljYXNlIFNDVFBfRUNOX0VDSE86CisJY2FzZSBTQ1RQX0VD
Tl9DV1I6CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQK
K3NjdHBfcmVzZXRfaW5fc3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgbnVt
YmVyX2VudHJpZXMsIHVpbnQxNl90ICpsaXN0KQoreworCXVpbnQzMl90IGk7CisJdWludDE2X3Qg
dGVtcDsKKworCS8qCisJICogV2Ugc2V0IHRoaW5ncyB0byAweGZmZmZmZmZmIHNpbmNlIHRoaXMg
aXMgdGhlIGxhc3QgZGVsaXZlcmVkIHNlcXVlbmNlCisJICogYW5kIHdlIHdpbGwgYmUgc2VuZGlu
ZyBpbiAwIGFmdGVyIHRoZSByZXNldC4KKwkgKi8KKworCWlmIChudW1iZXJfZW50cmllcykgewor
CQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hz
KGxpc3RbaV0pOworCQkJaWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1pbmNudCkgeworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJc3RjYi0+YXNvYy5zdHJtaW5bdGVtcF0ubGFzdF9taWRfZGVs
aXZlcmVkID0gMHhmZmZmZmZmZjsKKwkJfQorCX0gZWxzZSB7CisJCWxpc3QgPSBOVUxMOworCQlm
b3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1pbmNudDsgaSsrKSB7CisJCQlzdGNiLT5h
c29jLnN0cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSAweGZmZmZmZmZmOworCQl9CisJfQor
CXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TVFJfUkVTRVRfUkVDViwgc3RjYiwgbnVtYmVy
X2VudHJpZXMsICh2b2lkICopbGlzdCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfcmVzZXRfb3V0X3N0cmVhbXMoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
MzJfdCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxpc3QpCit7CisJdWludDMyX3QgaTsKKwl1
aW50MTZfdCB0ZW1wOworCisJaWYgKG51bWJlcl9lbnRyaWVzID4gMCkgeworCQlmb3IgKGkgPSAw
OyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJdGVtcCA9IG50b2hzKGxpc3RbaV0pOwor
CQkJaWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJCQkvKiBubyBzdWNo
IHN0cmVhbSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3Rl
bXBdLm5leHRfbWlkX29yZGVyZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W3RlbXBdLm5l
eHRfbWlkX3Vub3JkZXJlZCA9IDA7CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwg
c3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ld
Lm5leHRfbWlkX29yZGVyZWQgPSAwOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5leHRfbWlk
X3Vub3JkZXJlZCA9IDA7CisJCX0KKwl9CisJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NU
Ul9SRVNFVF9TRU5ELCBzdGNiLCBudW1iZXJfZW50cmllcywgKHZvaWQgKilsaXN0LCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9yZXNldF9jbGVhcl9wZW5kaW5n
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgbnVtYmVyX2VudHJpZXMsIHVpbnQxNl90
ICpsaXN0KQoreworCXVpbnQzMl90IGk7CisJdWludDE2X3QgdGVtcDsKKworCWlmIChudW1iZXJf
ZW50cmllcyA+IDApIHsKKwkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRyaWVzOyBpKyspIHsK
KwkJCXRlbXAgPSBudG9ocyhsaXN0W2ldKTsKKwkJCWlmICh0ZW1wID49IHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250KSB7CisJCQkJLyogbm8gc3VjaCBzdHJlYW0gKi8KKwkJCQljb250aW51ZTsKKwkJ
CX0KKwkJCXN0Y2ItPmFzb2Muc3RybW91dFt0ZW1wXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX09QRU47
CisJCX0KKwl9IGVsc2UgeworCQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQ7IGkrKykgeworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1f
T1BFTjsKKwkJfQorCX0KK30KKworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVxdWVzdCAq
CitzY3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qg
c2VxLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICoqYmNoaykKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisJc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3JlcXVlc3QgKnI7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOwor
CWludCBsZW4sIGNsZW47CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJaWYgKFRBSUxRX0VNUFRZ
KCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0
X291dHN0YW5kaW5nID0gMDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2Mu
c3RyX3Jlc2V0ID09IE5VTEwpIHsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID0g
MDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJY2hrID0gc3RjYi0+YXNvYy5zdHJfcmVzZXQ7CisJ
aWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChiY2hr
KSB7CisJCS8qIGhlIHdhbnRzIGEgY29weSBvZiB0aGUgY2hrIHBvaW50ZXIgKi8KKwkJKmJjaGsg
PSBjaGs7CisJfQorCWNsZW4gPSBjaGstPnNlbmRfc2l6ZTsKKwljaCA9IG10b2QoY2hrLT5kYXRh
LCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlyID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNl
dF9yZXF1ZXN0ICopKGNoICsgMSk7CisJaWYgKG50b2hsKHItPnJlcXVlc3Rfc2VxKSA9PSBzZXEp
IHsKKwkJLyogZm91bmQgaXQgKi8KKwkJcmV0dXJuIChyKTsKKwl9CisJbGVuID0gU0NUUF9TSVpF
MzIobnRvaHMoci0+cGgucGFyYW1fbGVuZ3RoKSk7CisJaWYgKGNsZW4gPiAobGVuICsgKGludClz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSkgeworCQkvKiBtb3ZlIHRvIHRoZSBuZXh0IG9u
ZSwgdGhlcmUgY2FuIG9ubHkgYmUgYSBtYXggb2YgdHdvICovCisJCXIgPSAoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3JlcXVlc3QgKikoKGNhZGRyX3QpciArIGxlbik7CisJCWlmIChudG9obChy
LT5yZXF1ZXN0X3NlcSkgPT0gc2VxKSB7CisJCQlyZXR1cm4gKHIpOworCQl9CisJfQorCS8qIHRo
YXQgc2VxIGlzIG5vdCBoZXJlICovCisJcmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHZvaWQK
K3NjdHBfY2xlYW5fdXBfc3RyZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGs7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrID0gYXNvYy0+c3RyX3Jlc2V0OworCWlm
IChjaGsgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWFzb2MtPnN0cl9yZXNldCA9IE5VTEw7
CisJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCwgc3RjYi0+c2N0cF9l
cCwgc3RjYiwKKwkgICAgICAgICAgICAgICAgY2hrLT53aG9UbywgU0NUUF9GUk9NX1NDVFBfSU5Q
VVQgKyBTQ1RQX0xPQ18yOCk7CisJVEFJTFFfUkVNT1ZFKCZhc29jLT5jb250cm9sX3NlbmRfcXVl
dWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudC0tOworCWlmIChjaGst
PmRhdGEpIHsKKwkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCWNoay0+ZGF0YSA9IE5VTEw7
CisJfQorCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsK
K30KKworCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVzcG9uc2Uoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCSAgdWludDMyX3Qgc2VxLCB1aW50MzJfdCBhY3Rpb24s
CisJCQkJICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKnJlc3BpbikKK3sKKwl1
aW50MTZfdCB0eXBlOworCWludCBscGFyYW1fbGVuOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jID0gJnN0Y2ItPmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXF1ZXN0ICpyZXFfcGFyYW07CisJc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICpyZXFfb3V0X3BhcmFtOworCXN0cnVjdCBzY3RwX3N0
cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICpyZXFfaW5fcGFyYW07CisJdWludDMyX3QgbnVtYmVyX2Vu
dHJpZXM7CisKKwlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJ
LyogZHVwbGljYXRlICovCisJCXJldHVybiAoMCk7CisJfQorCWlmIChzZXEgPT0gc3RjYi0+YXNv
Yy5zdHJfcmVzZXRfc2VxX291dCkgeworCQlyZXFfcGFyYW0gPSBzY3RwX2ZpbmRfc3RyZWFtX3Jl
c2V0KHN0Y2IsIHNlcSwgJmNoayk7CisJCWlmIChyZXFfcGFyYW0gIT0gTlVMTCkgeworCQkJc3Rj
Yi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dCsrOworCQkJdHlwZSA9IG50b2hzKHJlcV9wYXJhbS0+
cGgucGFyYW1fdHlwZSk7CisJCQlscGFyYW1fbGVuID0gbnRvaHMocmVxX3BhcmFtLT5waC5wYXJh
bV9sZW5ndGgpOworCQkJaWYgKHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfT1VUX1JFUVVFU1QpIHsK
KwkJCQlpbnQgbm9fY2xlYXIgPSAwOworCisJCQkJcmVxX291dF9wYXJhbSA9IChzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKilyZXFfcGFyYW07CisJCQkJbnVtYmVyX2VudHJp
ZXMgPSAobHBhcmFtX2xlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3Jl
cXVlc3QpKSAvIHNpemVvZih1aW50MTZfdCk7CisJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dF9p
c19vdXRzdGFuZGluZyA9IDA7CisJCQkJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGlu
ZykKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nLS07CisJCQkJaWYgKGFjdGlv
biA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVEKSB7CisJCQkJCS8qIGRvIGl0
ICovCisJCQkJCXNjdHBfcmVzZXRfb3V0X3N0cmVhbXMoc3RjYiwgbnVtYmVyX2VudHJpZXMsIHJl
cV9vdXRfcGFyYW0tPmxpc3Rfb2Zfc3RyZWFtcyk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24gPT0g
U0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkgeworCQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfU1RSX1JFU0VUX0RFTklFRF9PVVQsIHN0Y2IsIG51bWJlcl9lbnRyaWVzLCBy
ZXFfb3V0X3BhcmFtLT5saXN0X29mX3N0cmVhbXMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJ
fSBlbHNlIGlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0lOX1BST0dSRVNT
KSB7CisJCQkJCS8qIFNldCBpdCB1cCBzbyB3ZSBkb24ndCBzdG9wIHJldHJhbnNtaXR0aW5nICov
CisJCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOworCQkJCQlzdGNiLT5hc29j
LnN0cl9yZXNldF9zZXFfb3V0LS07CisJCQkJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRfaXNfb3V0
c3RhbmRpbmcgPSAxOworCQkJCQlub19jbGVhciA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0
cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VULCBzdGNiLCBudW1i
ZXJfZW50cmllcywgcmVxX291dF9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQkJCX0KKwkJCQlpZiAobm9fY2xlYXIgPT0gMCkgeworCQkJCQlzY3RwX3Jlc2V0
X2NsZWFyX3BlbmRpbmcoc3RjYiwgbnVtYmVyX2VudHJpZXMsIHJlcV9vdXRfcGFyYW0tPmxpc3Rf
b2Zfc3RyZWFtcyk7CisJCQkJfQorCQkJfSBlbHNlIGlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VU
X0lOX1JFUVVFU1QpIHsKKwkJCQlyZXFfaW5fcGFyYW0gPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2luX3JlcXVlc3QgKilyZXFfcGFyYW07CisJCQkJbnVtYmVyX2VudHJpZXMgPSAobHBhcmFt
X2xlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCkpIC8gc2l6
ZW9mKHVpbnQxNl90KTsKKwkJCQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKQor
CQkJCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmctLTsKKwkJCQlpZiAoYWN0aW9uID09
IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQpIHsKKwkJCQkJc2N0cF91bHBfbm90aWZ5
KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9ERU5JRURfSU4sIHN0Y2IsCisJCQkJCQkJbnVtYmVyX2Vu
dHJpZXMsIHJlcV9pbl9wYXJhbS0+bGlzdF9vZl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQp
OworCQkJCX0gZWxzZSBpZiAoYWN0aW9uICE9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJG
T1JNRUQpIHsKKwkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlM
RURfSU4sIHN0Y2IsCisJCQkJCQkJbnVtYmVyX2VudHJpZXMsIHJlcV9pbl9wYXJhbS0+bGlzdF9v
Zl9zdHJlYW1zLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSBpZiAodHlw
ZSA9PSBTQ1RQX1NUUl9SRVNFVF9BRERfT1VUX1NUUkVBTVMpIHsKKwkJCQkvKiBPayB3ZSBub3cg
bWF5IGhhdmUgbW9yZSBzdHJlYW1zICovCisJCQkJaW50IG51bV9zdHJlYW07CisKKwkJCQludW1f
c3RyZWFtID0gc3RjYi0+YXNvYy5zdHJtX3BlbmRpbmdfYWRkX3NpemU7CisJCQkJaWYgKG51bV9z
dHJlYW0gPiAoc3RjYi0+YXNvYy5zdHJtX3JlYWxvdXRzaXplIC0gc3RjYi0+YXNvYy5zdHJlYW1v
dXRjbnQpKSB7CisJCQkJCS8qIFRTTkggKi8KKwkJCQkJbnVtX3N0cmVhbSA9IHN0Y2ItPmFzb2Mu
c3RybV9yZWFsb3V0c2l6ZSAtIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OworCQkJCX0KKwkJCQlz
dGNiLT5hc29jLnN0cm1fcGVuZGluZ19hZGRfc2l6ZSA9IDA7CisJCQkJaWYgKGFzb2MtPnN0cmVh
bV9yZXNldF9vdXRzdGFuZGluZykKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5n
LS07CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVE
KSB7CisJCQkJCS8qIFB1dCB0aGUgbmV3IHN0cmVhbXMgaW50byBlZmZlY3QgKi8KKwkJCQkJaW50
IGk7CisJCQkJCWZvciAoIGkgPSBhc29jLT5zdHJlYW1vdXRjbnQ7IGk8IChhc29jLT5zdHJlYW1v
dXRjbnQgKyBudW1fc3RyZWFtKTsgaSsrKSB7CisJCQkJCQlhc29jLT5zdHJtb3V0W2ldLnN0YXRl
ID0gU0NUUF9TVFJFQU1fT1BFTjsKKwkJCQkJfQorCQkJCQlhc29jLT5zdHJlYW1vdXRjbnQgKz0g
bnVtX3N0cmVhbTsKKwkJCQkJc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X2FkZChzdGNiLCBzdGNi
LT5hc29jLnN0cmVhbWluY250LCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCwgMCk7CisJCQkJfSBl
bHNlIGlmIChhY3Rpb24gPT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRCkgeworCQkJ
CQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5j
bnQsIHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LAorCQkJCQkJCQkgICAgIFNDVFBfU1RSRUFNX0NI
QU5HRV9ERU5JRUQpOworCQkJCX0gZWxzZSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNl
dF9hZGQoc3RjYiwgc3RjYi0+YXNvYy5zdHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQsCisJCQkJCQkJCSAgICAgU0NUUF9TVFJFQU1fQ0hBTkdFX0ZBSUxFRCk7CisJCQkJfQorCQkJ
fSBlbHNlIGlmICh0eXBlID09IFNDVFBfU1RSX1JFU0VUX0FERF9JTl9TVFJFQU1TKSB7CisJCQkJ
aWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykKKwkJCQkJYXNvYy0+c3RyZWFtX3Jl
c2V0X291dHN0YW5kaW5nLS07CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfREVOSUVEKSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldF9hZGQoc3RjYiwg
c3RjYi0+YXNvYy5zdHJlYW1pbmNudCwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQsCisJCQkJCQkJ
CSAgICAgU0NUUF9TVFJFQU1fQ0hBTkdFX0RFTklFRCk7CisJCQkJfSBlbHNlIGlmIChhY3Rpb24g
IT0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRCkgeworCQkJCQlzY3RwX25vdGlm
eV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQsIHN0Y2ItPmFz
b2Muc3RyZWFtb3V0Y250LAorCQkJCQkJCQkgICAgIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQp
OworCQkJCX0KKwkJCX0gZWxzZSBpZiAodHlwZSA9PSBTQ1RQX1NUUl9SRVNFVF9UU05fUkVRVUVT
VCkgeworCQkJCS8qKgorCQkJCSAqIGEpIEFkb3B0IHRoZSBuZXcgaW4gdHNuLgorCQkJCSAqIGIp
IHJlc2V0IHRoZSBtYXAKKwkJCQkgKiBjKSBBZG9wdCB0aGUgbmV3IG91dC10c24KKwkJCQkgKi8K
KwkJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2VfdHNuICpyZXNwOworCQkJCXN0
cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIGZ3ZHRzbjsKKwkJCQlpbnQgYWJvcnRfZmxhZyA9
IDA7CisJCQkJaWYgKHJlc3BpbiA9PSBOVUxMKSB7CisJCQkJCS8qIGh1aCA/ICovCisJCQkJCXJl
dHVybiAoMCk7CisJCQkJfQorCQkJCWlmIChudG9ocyhyZXNwaW4tPnBoLnBhcmFtX2xlbmd0aCkg
PCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbikpIHsKKwkJCQkJ
cmV0dXJuICgwKTsKKwkJCQl9CisJCQkJaWYgKGFjdGlvbiA9PSBTQ1RQX1NUUkVBTV9SRVNFVF9S
RVNVTFRfUEVSRk9STUVEKSB7CisJCQkJCXJlc3AgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0
X3Jlc3BvbnNlX3RzbiAqKXJlc3BpbjsKKwkJCQkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5k
aW5nLS07CisJCQkJCWZ3ZHRzbi5jaC5jaHVua19sZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0
IHNjdHBfZm9yd2FyZF90c25fY2h1bmspKTsKKwkJCQkJZndkdHNuLmNoLmNodW5rX3R5cGUgPSBT
Q1RQX0ZPUldBUkRfQ1VNX1RTTjsKKwkJCQkJZndkdHNuLm5ld19jdW11bGF0aXZlX3RzbiA9IGh0
b25sKG50b2hsKHJlc3AtPnNlbmRlcnNfbmV4dF90c24pIC0gMSk7CisJCQkJCXNjdHBfaGFuZGxl
X2ZvcndhcmRfdHNuKHN0Y2IsICZmd2R0c24sICZhYm9ydF9mbGFnLCBOVUxMLCAwKTsKKwkJCQkJ
aWYgKGFib3J0X2ZsYWcpIHsKKwkJCQkJCXJldHVybiAoMSk7CisJCQkJCX0KKwkJCQkJc3RjYi0+
YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID0gKG50b2hsKHJlc3AtPnNlbmRlcnNfbmV4dF90
c24pIC0gMSk7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkg
JiBTQ1RQX01BUF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9sb2dfbWFwKDAsIDcsIGFz
b2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCQkJ
CX0KKworCQkJCQlzdGNiLT5hc29jLnRzbl9sYXN0X2RlbGl2ZXJlZCA9IHN0Y2ItPmFzb2MuY3Vt
dWxhdGl2ZV90c24gPSBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lkZV9tYXA7CisJCQkJCXN0
Y2ItPmFzb2MubWFwcGluZ19hcnJheV9iYXNlX3RzbiA9IG50b2hsKHJlc3AtPnNlbmRlcnNfbmV4
dF90c24pOworCQkJCQltZW1zZXQoc3RjYi0+YXNvYy5tYXBwaW5nX2FycmF5LCAwLCBzdGNiLT5h
c29jLm1hcHBpbmdfYXJyYXlfc2l6ZSk7CisKKwkJCQkJc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9p
bnNpZGVfbnJfbWFwID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOworCQkJCQlt
ZW1zZXQoc3RjYi0+YXNvYy5ucl9tYXBwaW5nX2FycmF5LCAwLCBzdGNiLT5hc29jLm1hcHBpbmdf
YXJyYXlfc2l6ZSk7CisKKwkJCQkJc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSA9IG50b2hsKHJlc3At
PnJlY2VpdmVyc19uZXh0X3Rzbik7CisJCQkJCXN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXEgPSBz
dGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuOworCisJCQkJCXNjdHBfcmVzZXRfb3V0X3N0cmVhbXMo
c3RjYiwgMCwgKHVpbnQxNl90ICopIE5VTEwpOworCQkJCQlzY3RwX3Jlc2V0X2luX3N0cmVhbShz
dGNiLCAwLCAodWludDE2X3QgKikgTlVMTCk7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNl
dF90c24oc3RjYiwgc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSwgKHN0Y2ItPmFzb2MubWFwcGluZ19h
cnJheV9iYXNlX3RzbiArIDEpLCAwKTsKKwkJCQl9IGVsc2UgaWYgKGFjdGlvbiA9PSBTQ1RQX1NU
UkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEKSB7CisJCQkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNl
dF90c24oc3RjYiwgc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSwgKHN0Y2ItPmFzb2MubWFwcGluZ19h
cnJheV9iYXNlX3RzbiArIDEpLAorCQkJCQkJCQkgICAgIFNDVFBfQVNTT0NfUkVTRVRfREVOSUVE
KTsKKwkJCQl9IGVsc2UgeworCQkJCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfdHNuKHN0Y2Is
IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXEsIChzdGNiLT5hc29jLm1hcHBpbmdfYXJyYXlfYmFzZV90
c24gKyAxKSwKKwkJCQkJCQkJICAgICBTQ1RQX0FTU09DX1JFU0VUX0ZBSUxFRCk7CisJCQkJfQor
CQkJfQorCQkJLyogZ2V0IHJpZCBvZiB0aGUgcmVxdWVzdCBhbmQgZ2V0IHRoZSByZXF1ZXN0IGZs
YWdzICovCisJCQlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJ
CQlzY3RwX2NsZWFuX3VwX3N0cmVhbV9yZXNldChzdGNiKTsKKwkJCX0KKwkJfQorCX0KKwlpZiAo
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nID09IDApIHsKKwkJc2N0cF9zZW5kX3N0cmVh
bV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9CisJ
cmV0dXJuICgwKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9yZXF1
ZXN0X2luKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGssCisgICAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QgKnJlcSwgaW50
IHRydW5jKQoreworCXVpbnQzMl90IHNlcTsKKwlpbnQgbGVuLCBpOworCWludCBudW1iZXJfZW50
cmllczsKKwl1aW50MTZfdCB0ZW1wOworCisJLyoKKwkgKiBwZWVyIHdhbnRzIG1lIHRvIHNlbmQg
YSBzdHItcmVzZXQgdG8gaGltIGZvciBteSBvdXRnb2luZyBzZXEncyBpZgorCSAqIHNlcV9pbiBp
cyByaWdodC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5h
c29jOworCisJc2VxID0gbnRvaGwocmVxLT5yZXF1ZXN0X3NlcSk7CisJaWYgKGFzb2MtPnN0cl9y
ZXNldF9zZXFfaW4gPT0gc2VxKSB7CisJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gYXNv
Yy0+bGFzdF9yZXNldF9hY3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0X3N1
cHBvcnQgJiBTQ1RQX0VOQUJMRV9SRVNFVF9TVFJFQU1fUkVRKSkgeworCQkJYXNvYy0+bGFzdF9y
ZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9IGVs
c2UgaWYgKHRydW5jKSB7CisJCQkvKiBDYW4ndCBkbyBpdCwgc2luY2UgdGhleSBleGNlZWRlZCBv
dXIgYnVmZmVyIHNpemUgICovCisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCX0gZWxzZSBpZiAoc3RjYi0+YXNvYy5zdHJl
YW1fcmVzZXRfb3V0X2lzX291dHN0YW5kaW5nID09IDApIHsKKwkJCWxlbiA9IG50b2hzKHJlcS0+
cGgucGFyYW1fbGVuZ3RoKTsKKwkJCW51bWJlcl9lbnRyaWVzID0gKChsZW4gLSBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2luX3JlcXVlc3QpKSAvIHNpemVvZih1aW50MTZfdCkpOwor
CQkJaWYgKG51bWJlcl9lbnRyaWVzKSB7CisJCQkJZm9yIChpID0gMDsgaSA8IG51bWJlcl9lbnRy
aWVzOyBpKyspIHsKKwkJCQkJdGVtcCA9IG50b2hzKHJlcS0+bGlzdF9vZl9zdHJlYW1zW2ldKTsK
KwkJCQkJaWYgKHRlbXAgPj0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQpIHsKKwkJCQkJCWFzb2Mt
Pmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsK
KwkJCQkJCWdvdG8gYmFkX2JveTsKKwkJCQkJfQorCQkJCQlyZXEtPmxpc3Rfb2Zfc3RyZWFtc1tp
XSA9IHRlbXA7CisJCQkJfQorCQkJCWZvciAoaSA9IDA7IGkgPCBudW1iZXJfZW50cmllczsgaSsr
KSB7CisJCQkJCWlmIChzdGNiLT5hc29jLnN0cm1vdXRbcmVxLT5saXN0X29mX3N0cmVhbXNbaV1d
LnN0YXRlID09IFNDVFBfU1RSRUFNX09QRU4pIHsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFty
ZXEtPmxpc3Rfb2Zfc3RyZWFtc1tpXV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5H
OworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBJdHMgYWxsICovCisJCQkJZm9y
IChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCQkJaWYgKHN0
Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVBTV9PUEVOKQorCQkJCQkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKKwkJ
CQl9CisJCQl9CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JF
U0VUX1JFU1VMVF9QRVJGT1JNRUQ7CisJCX0gZWxzZSB7CisJCQkvKiBDYW4ndCBkbyBpdCwgc2lu
Y2Ugd2UgaGF2ZSBzZW50IG9uZSBvdXQgKi8KKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBd
ID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9JTl9QUk9HUkVTUzsKKwkJfQorCWJhZF9i
b3k6CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3Rf
cmVzZXRfYWN0aW9uWzBdKTsKKwkJYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbisrOworCX0gZWxzZSBp
ZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDEgPT0gc2VxKSB7CisJCXNjdHBfYWRkX3N0cmVh
bV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdKTsKKwl9
IGVsc2UgaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4gLSAyID09IHNlcSkgeworCQlzY3RwX2Fk
ZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblsx
XSk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwg
U0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOworCX0KKwlzY3RwX3NlbmRf
c3RyZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJsZShzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
fQorCitzdGF0aWMgaW50CitzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF90c24oc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAgICBz
dHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfdHNuX3JlcXVlc3QgKnJlcSkKK3sKKwkvKiByZXNldCBh
bGwgaW4gYW5kIG91dCBhbmQgdXBkYXRlIHRoZSB0c24gKi8KKwkvKgorCSAqIEEpIHJlc2V0IG15
IHN0ci1zZXEncyBvbiBpbiBhbmQgb3V0LiBCKSBTZWxlY3QgYSByZWNlaXZlIG5leHQsCisJICog
YW5kIHNldCBjdW0tYWNrIHRvIGl0LiBBbHNvIHByb2Nlc3MgdGhpcyBzZWxlY3RlZCBudW1iZXIg
YXMgYQorCSAqIGZ3ZC10c24gYXMgd2VsbC4gQykgc2V0IGluIHRoZSByZXNwb25zZSBteSBuZXh0
IHNlbmRpbmcgc2VxLgorCSAqLworCXN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rIGZ3ZHRz
bjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOworCWludCBh
Ym9ydF9mbGFnID0gMDsKKwl1aW50MzJfdCBzZXE7CisKKwlzZXEgPSBudG9obChyZXEtPnJlcXVl
c3Rfc2VxKTsKKwlpZiAoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJYXNvYy0+
bGFzdF9yZXNldF9hY3Rpb25bMV0gPSBzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdOwor
CQlpZiAoIShhc29jLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ICYgU0NUUF9FTkFCTEVfQ0hBTkdF
X0FTU09DX1JFUSkpIHsKKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJF
QU1fUkVTRVRfUkVTVUxUX0RFTklFRDsKKwkJfSBlbHNlIHsKKwkJCWZ3ZHRzbi5jaC5jaHVua19s
ZW5ndGggPSBodG9ucyhzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspKTsKKwkJ
CWZ3ZHRzbi5jaC5jaHVua190eXBlID0gU0NUUF9GT1JXQVJEX0NVTV9UU047CisJCQlmd2R0c24u
Y2guY2h1bmtfZmxhZ3MgPSAwOworCQkJZndkdHNuLm5ld19jdW11bGF0aXZlX3RzbiA9IGh0b25s
KHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcCArIDEpOworCQkJc2N0cF9oYW5kbGVf
Zm9yd2FyZF90c24oc3RjYiwgJmZ3ZHRzbiwgJmFib3J0X2ZsYWcsIE5VTEwsIDApOworCQkJaWYg
KGFib3J0X2ZsYWcpIHsKKwkJCQlyZXR1cm4gKDEpOworCQkJfQorCQkJYXNvYy0+aGlnaGVzdF90
c25faW5zaWRlX21hcCArPSBTQ1RQX1NUUkVBTV9SRVNFVF9UU05fREVMVEE7CisJCQlpZiAoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQVBfTE9HR0lOR19FTkFC
TEUpIHsKKwkJCQlzY3RwX2xvZ19tYXAoMCwgMTAsIGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXAsIFNDVFBfTUFQX1NMSURFX1JFU1VMVCk7CisJCQl9CisJCQlhc29jLT50c25fbGFzdF9kZWxp
dmVyZWQgPSBhc29jLT5jdW11bGF0aXZlX3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9t
YXA7CisJCQlhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuID0gYXNvYy0+aGlnaGVzdF90c25f
aW5zaWRlX21hcCArIDE7CisJCQltZW1zZXQoYXNvYy0+bWFwcGluZ19hcnJheSwgMCwgYXNvYy0+
bWFwcGluZ19hcnJheV9zaXplKTsKKwkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAg
PSBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwOworCQkJbWVtc2V0KGFzb2MtPm5yX21hcHBp
bmdfYXJyYXksIDAsIGFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSk7CisJCQlhdG9taWNfYWRkX2lu
dCgmYXNvYy0+c2VuZGluZ19zZXEsIDEpOworCQkJLyogc2F2ZSBvZmYgaGlzdG9yaWNhbCBkYXRh
IGZvciByZXRyYW5zICovCisJCQlhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzFdID0gYXNvYy0+bGFz
dF9zZW5kaW5nX3NlcVswXTsKKwkJCWFzb2MtPmxhc3Rfc2VuZGluZ19zZXFbMF0gPSBhc29jLT5z
ZW5kaW5nX3NlcTsKKwkJCWFzb2MtPmxhc3RfYmFzZV90c25zZW50WzFdID0gYXNvYy0+bGFzdF9i
YXNlX3RzbnNlbnRbMF07CisJCQlhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFswXSA9IGFzb2MtPm1h
cHBpbmdfYXJyYXlfYmFzZV90c247CisJCQlzY3RwX3Jlc2V0X291dF9zdHJlYW1zKHN0Y2IsIDAs
ICh1aW50MTZfdCAqKSBOVUxMKTsKKwkJCXNjdHBfcmVzZXRfaW5fc3RyZWFtKHN0Y2IsIDAsICh1
aW50MTZfdCAqKSBOVUxMKTsKKwkJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9T
VFJFQU1fUkVTRVRfUkVTVUxUX1BFUkZPUk1FRDsKKwkJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNl
dF90c24oc3RjYiwgYXNvYy0+c2VuZGluZ19zZXEsIChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2Vf
dHNuICsgMSksIDApOworCQl9CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNuKGNo
aywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSwKKwkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYXNvYy0+bGFzdF9zZW5kaW5nX3NlcVswXSwgYXNvYy0+bGFzdF9iYXNl
X3RzbnNlbnRbMF0pOworCQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7CisJfSBlbHNlIGlmIChh
c29jLT5zdHJfcmVzZXRfc2VxX2luIC0gMSA9PSBzZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jl
c2V0X3Jlc3VsdF90c24oY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzBdLAorCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzBd
LCBhc29jLT5sYXN0X2Jhc2VfdHNuc2VudFswXSk7CisJfSBlbHNlIGlmIChhc29jLT5zdHJfcmVz
ZXRfc2VxX2luIC0gMiA9PSBzZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdF90
c24oY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBhc29jLT5sYXN0X3NlbmRpbmdfc2VxWzFdLCBhc29jLT5sYXN0
X2Jhc2VfdHNuc2VudFsxXSk7CisJfSBlbHNlIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jl
c3VsdChjaGssIHNlcSwgU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0VSUl9CQURfU0VRTk8pOwor
CX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfc3RyX3Jlc2V0
X3JlcXVlc3Rfb3V0KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF90bWl0
X2NodW5rICpjaGssCisgICAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0ICpy
ZXEsIGludCB0cnVuYykKK3sKKwl1aW50MzJfdCBzZXEsIHRzbjsKKwlpbnQgbnVtYmVyX2VudHJp
ZXMsIGxlbjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5hc29jOwor
CisJc2VxID0gbnRvaGwocmVxLT5yZXF1ZXN0X3NlcSk7CisKKwkvKiBub3cgaWYgaXRzIG5vdCBh
IGR1cGxpY2F0ZSB3ZSBwcm9jZXNzIGl0ICovCisJaWYgKGFzb2MtPnN0cl9yZXNldF9zZXFfaW4g
PT0gc2VxKSB7CisJCWxlbiA9IG50b2hzKHJlcS0+cGgucGFyYW1fbGVuZ3RoKTsKKwkJbnVtYmVy
X2VudHJpZXMgPSAoKGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3Jl
cXVlc3QpKSAvIHNpemVvZih1aW50MTZfdCkpOworCQkvKgorCQkgKiB0aGUgc2VuZGVyIGlzIHJl
c2V0dGluZywgaGFuZGxlIHRoZSBsaXN0IGlzc3VlLi4gd2UgbXVzdAorCQkgKiBhKSB2ZXJpZnkg
aWYgd2UgY2FuIGRvIHRoZSByZXNldCwgaWYgc28gbm8gcHJvYmxlbSBiKSBJZgorCQkgKiB3ZSBj
YW4ndCBkbyB0aGUgcmVzZXQgd2UgbXVzdCBjb3B5IHRoZSByZXF1ZXN0LiBjKSBxdWV1ZQorCQkg
KiBpdCwgYW5kIHNldHVwIHRoZSBkYXRhIGluIHByb2Nlc3NvciB0byB0cmlnZ2VyIGl0IG9mZgor
CQkgKiB3aGVuIG5lZWRlZCBhbmQgZGVxdWV1ZSBhbGwgdGhlIHF1ZXVlZCBkYXRhLgorCQkgKi8K
KwkJdHNuID0gbnRvaGwocmVxLT5zZW5kX3Jlc2V0X2F0X3Rzbik7CisKKwkJLyogbW92ZSB0aGUg
cmVzZXQgYWN0aW9uIGJhY2sgb25lICovCisJCWFzb2MtPmxhc3RfcmVzZXRfYWN0aW9uWzFdID0g
YXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxvY2FsX3N0cnJlc2V0
X3N1cHBvcnQgJiBTQ1RQX0VOQUJMRV9SRVNFVF9TVFJFQU1fUkVRKSkgeworCQkJYXNvYy0+bGFz
dF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQl9
IGVsc2UgaWYgKHRydW5jKSB7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCX0gZWxzZSBpZiAoU0NUUF9UU05fR0UoYXNv
Yy0+Y3VtdWxhdGl2ZV90c24sIHRzbikpIHsKKwkJCS8qIHdlIGNhbiBkbyBpdCBub3cgKi8KKwkJ
CXNjdHBfcmVzZXRfaW5fc3RyZWFtKHN0Y2IsIG51bWJlcl9lbnRyaWVzLCByZXEtPmxpc3Rfb2Zf
c3RyZWFtcyk7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JF
U0VUX1JFU1VMVF9QRVJGT1JNRUQ7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogd2UgbXVzdCBx
dWV1ZSBpdCB1cCBhbmQgdGh1cyB3YWl0IGZvciB0aGUgVFNOJ3MKKwkJCSAqIHRvIGFycml2ZSB0
aGF0IGFyZSBhdCBvciBiZWZvcmUgdHNuCisJCQkgKi8KKwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9y
ZXNldF9saXN0ICpsaXN0ZTsKKwkJCWludCBzaXo7CisKKwkJCXNpeiA9IHNpemVvZihzdHJ1Y3Qg
c2N0cF9zdHJlYW1fcmVzZXRfbGlzdCkgKyAobnVtYmVyX2VudHJpZXMgKiBzaXplb2YodWludDE2
X3QpKTsKKwkJCVNDVFBfTUFMTE9DKGxpc3RlLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfbGlz
dCAqLAorCQkJCSAgICBzaXosIFNDVFBfTV9TVFJFU0VUKTsKKwkJCWlmIChsaXN0ZSA9PSBOVUxM
KSB7CisJCQkJLyogZ2FrIG91dCBvZiBtZW1vcnkgKi8KKwkJCQlhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCQkJc2N0cF9hZGRf
c3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0p
OworCQkJCXJldHVybjsKKwkJCX0KKwkJCWxpc3RlLT5zZXEgPSBzZXE7CisJCQlsaXN0ZS0+dHNu
ID0gdHNuOworCQkJbGlzdGUtPm51bWJlcl9lbnRyaWVzID0gbnVtYmVyX2VudHJpZXM7CisJCQlt
ZW1jcHkoJmxpc3RlLT5saXN0X29mX3N0cmVhbXMsIHJlcS0+bGlzdF9vZl9zdHJlYW1zLCBudW1i
ZXJfZW50cmllcyAqIHNpemVvZih1aW50MTZfdCkpOworCQkJVEFJTFFfSU5TRVJUX1RBSUwoJmFz
b2MtPnJlc2V0SGVhZCwgbGlzdGUsIG5leHRfcmVzcCk7CisJCQlhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9JTl9QUk9HUkVTUzsKKwkJfQorCQlz
Y3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblswXSk7CisJCWFzb2MtPnN0cl9yZXNldF9zZXFfaW4rKzsKKwl9IGVsc2UgaWYgKChhc29j
LT5zdHJfcmVzZXRfc2VxX2luIC0gMSkgPT0gc2VxKSB7CisJCS8qCisJCSAqIG9uZSBzZXEgYmFj
aywganVzdCBlY2hvIGJhY2sgbGFzdCBhY3Rpb24gc2luY2UgbXkKKwkJICogcmVzcG9uc2Ugd2Fz
IGxvc3QuCisJCSAqLworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBh
c29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7CisJfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0
X3NlcV9pbiAtIDIpID09IHNlcSkgeworCQkvKgorCQkgKiB0d28gc2VxIGJhY2ssIGp1c3QgZWNo
byBiYWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15CisJCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgorCQkg
Ki8KKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9y
ZXNldF9hY3Rpb25bMV0pOworCX0gZWxzZSB7CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1
bHQoY2hrLCBzZXEsIFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9zdHJfcmVzZXRfYWRkX3N0cm0oc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisJCQkgICAgICAg
c3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAqc3RyX2FkZCkKK3sKKwkvKgorCSAq
IFBlZXIgaXMgcmVxdWVzdGluZyB0byBhZGQgbW9yZSBzdHJlYW1zLgorCSAqIElmIGl0cyB3aXRo
aW4gb3VyIG1heC1zdHJlYW1zIHdlIHdpbGwKKwkgKiBhbGxvdyBpdC4KKwkgKi8KKwl1aW50MzJf
dCBudW1fc3RyZWFtLCBpOworCXVpbnQzMl90IHNlcTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYyA9ICZzdGNiLT5hc29jOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjdGws
ICpuY3RsOworCisJLyogR2V0IHRoZSBudW1iZXIuICovCisJc2VxID0gbnRvaGwoc3RyX2FkZC0+
cmVxdWVzdF9zZXEpOworCW51bV9zdHJlYW0gPSBudG9ocyhzdHJfYWRkLT5udW1iZXJfb2Zfc3Ry
ZWFtcyk7CisJLyogTm93IHdoYXQgd291bGQgYmUgdGhlIG5ldyB0b3RhbD8gKi8KKwlpZiAoYXNv
Yy0+c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJbnVtX3N0cmVhbSArPSBzdGNiLT5hc29j
LnN0cmVhbWluY250OworCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzFdID0gc3RjYi0+
YXNvYy5sYXN0X3Jlc2V0X2FjdGlvblswXTsKKwkJaWYgKCEoYXNvYy0+bG9jYWxfc3RycmVzZXRf
c3VwcG9ydCAmIFNDVFBfRU5BQkxFX0NIQU5HRV9BU1NPQ19SRVEpKSB7CisJCQlhc29jLT5sYXN0
X3Jlc2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9ERU5JRUQ7CisJCX0g
ZWxzZSBpZiAoKG51bV9zdHJlYW0gPiBzdGNiLT5hc29jLm1heF9pbmJvdW5kX3N0cmVhbXMpIHx8
CisJCSAgICAgICAgICAgKG51bV9zdHJlYW0gPiAweGZmZmYpKSB7CisJCQkvKiBXZSBtdXN0IHJl
amVjdCBpdCB0aGV5IGFzayBmb3IgdG8gbWFueSAqLworICBkZW5pZWQ6CisJCQlzdGNiLT5hc29j
Lmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsK
KwkJfSBlbHNlIHsKKwkJCS8qIE9rLCB3ZSBjYW4gZG8gdGhhdCA6LSkgKi8KKwkJCXN0cnVjdCBz
Y3RwX3N0cmVhbV9pbiAqb2xkc3RybTsKKworCQkJLyogc2F2ZSBvZmYgdGhlIG9sZCAqLworCQkJ
b2xkc3RybSA9IHN0Y2ItPmFzb2Muc3RybWluOworCQkJU0NUUF9NQUxMT0Moc3RjYi0+YXNvYy5z
dHJtaW4sIHN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqLAorCQkJICAgICAgICAgICAgKG51bV9zdHJl
YW0gKiBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX2luKSksCisJCQkgICAgICAgICAgICBTQ1RQ
X01fU1RSTUkpOworCQkJaWYgKHN0Y2ItPmFzb2Muc3RybWluID09IE5VTEwpIHsKKwkJCQlzdGNi
LT5hc29jLnN0cm1pbiA9IG9sZHN0cm07CisJCQkJZ290byBkZW5pZWQ7CisJCQl9CisJCQkvKiBj
b3B5IG9mZiB0aGUgb2xkIGRhdGEgKi8KKwkJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0
cmVhbWluY250OyBpKyspIHsKKwkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltpXS5p
bnF1ZXVlKTsKKwkJCQlUQUlMUV9JTklUKCZzdGNiLT5hc29jLnN0cm1pbltpXS51bm9faW5xdWV1
ZSk7CisJCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0uc2lkID0gaTsKKwkJCQlzdGNiLT5hc29jLnN0
cm1pbltpXS5sYXN0X21pZF9kZWxpdmVyZWQgPSBvbGRzdHJtW2ldLmxhc3RfbWlkX2RlbGl2ZXJl
ZDsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5kZWxpdmVyeV9zdGFydGVkID0gb2xkc3RybVtp
XS5kZWxpdmVyeV9zdGFydGVkOworCQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLnBkX2FwaV9zdGFy
dGVkID0gb2xkc3RybVtpXS5wZF9hcGlfc3RhcnRlZDsKKwkJCQkvKiBub3cgYW55dGhpbmcgb24g
dGhvc2UgcXVldWVzPyAqLworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjdGwsICZvbGRzdHJtW2ld
LmlucXVldWUsIG5leHRfaW5zdHJtLCBuY3RsKSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmb2xkc3Ry
bVtpXS5pbnF1ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKKwkJCQkJVEFJTFFfSU5TRVJUX1RBSUwo
JnN0Y2ItPmFzb2Muc3RybWluW2ldLmlucXVldWUsIGN0bCwgbmV4dF9pbnN0cm0pOworCQkJCX0K
KwkJCQlUQUlMUV9GT1JFQUNIX1NBRkUoY3RsLCAmb2xkc3RybVtpXS51bm9faW5xdWV1ZSwgbmV4
dF9pbnN0cm0sIG5jdGwpIHsKKwkJCQkJVEFJTFFfUkVNT1ZFKCZvbGRzdHJtW2ldLnVub19pbnF1
ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKKwkJCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2ItPmFz
b2Muc3RybWluW2ldLnVub19pbnF1ZXVlLCBjdGwsIG5leHRfaW5zdHJtKTsKKwkJCQl9CisJCQl9
CisJCQkvKiBJbml0IHRoZSBuZXcgc3RyZWFtcyAqLworCQkJZm9yIChpID0gc3RjYi0+YXNvYy5z
dHJlYW1pbmNudDsgaSA8IG51bV9zdHJlYW07IGkrKykgeworCQkJCVRBSUxRX0lOSVQoJnN0Y2It
PmFzb2Muc3RybWluW2ldLmlucXVldWUpOworCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3Ry
bWluW2ldLnVub19pbnF1ZXVlKTsKKwkJCQlzdGNiLT5hc29jLnN0cm1pbltpXS5zaWQgPSBpOwor
CQkJCXN0Y2ItPmFzb2Muc3RybWluW2ldLmxhc3RfbWlkX2RlbGl2ZXJlZCA9IDB4ZmZmZmZmZmY7
CisJCQkJc3RjYi0+YXNvYy5zdHJtaW5baV0ucGRfYXBpX3N0YXJ0ZWQgPSAwOworCQkJCXN0Y2It
PmFzb2Muc3RybWluW2ldLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCQkJfQorCQkJU0NUUF9GUkVF
KG9sZHN0cm0sIFNDVFBfTV9TVFJNSSk7CisJCQkvKiB1cGRhdGUgdGhlIHNpemUgKi8KKwkJCXN0
Y2ItPmFzb2Muc3RyZWFtaW5jbnQgPSBudW1fc3RyZWFtOworCQkJc3RjYi0+YXNvYy5sYXN0X3Jl
c2V0X2FjdGlvblswXSA9IFNDVFBfU1RSRUFNX1JFU0VUX1JFU1VMVF9QRVJGT1JNRUQ7CisJCQlz
Y3RwX25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0Y2IsIHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQs
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250LCAwKTsKKwkJfQorCQlzY3RwX2FkZF9zdHJlYW1fcmVz
ZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2FjdGlvblswXSk7CisJCWFzb2Mt
PnN0cl9yZXNldF9zZXFfaW4rKzsKKwl9IGVsc2UgaWYgKChhc29jLT5zdHJfcmVzZXRfc2VxX2lu
IC0gMSkgPT0gc2VxKSB7CisJCS8qCisJCSAqIG9uZSBzZXEgYmFjaywganVzdCBlY2hvIGJhY2sg
bGFzdCBhY3Rpb24gc2luY2UgbXkKKwkJICogcmVzcG9uc2Ugd2FzIGxvc3QuCisJCSAqLworCQlz
Y3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KGNoaywgc2VxLCBhc29jLT5sYXN0X3Jlc2V0X2Fj
dGlvblswXSk7CisJfSBlbHNlIGlmICgoYXNvYy0+c3RyX3Jlc2V0X3NlcV9pbiAtIDIpID09IHNl
cSkgeworCQkvKgorCQkgKiB0d28gc2VxIGJhY2ssIGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9u
IHNpbmNlIG15CisJCSAqIHJlc3BvbnNlIHdhcyBsb3N0LgorCQkgKi8KKwkJc2N0cF9hZGRfc3Ry
ZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMV0pOwor
CX0gZWxzZSB7CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIFNDVFBf
U1RSRUFNX1JFU0VUX1JFU1VMVF9FUlJfQkFEX1NFUU5PKTsKKworCX0KK30KKworc3RhdGljIHZv
aWQKK3NjdHBfaGFuZGxlX3N0cl9yZXNldF9hZGRfb3V0X3N0cm0oc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisJCQkJICAgc3RydWN0IHNjdHBfc3Ry
ZWFtX3Jlc2V0X2FkZF9zdHJtICAqc3RyX2FkZCkKK3sKKwkvKgorCSAqIFBlZXIgaXMgcmVxdWVz
dGluZyB0byBhZGQgbW9yZSBzdHJlYW1zLgorCSAqIElmIGl0cyB3aXRoaW4gb3VyIG1heC1zdHJl
YW1zIHdlIHdpbGwKKwkgKiBhbGxvdyBpdC4KKwkgKi8KKwl1aW50MTZfdCBudW1fc3RyZWFtOwor
CXVpbnQzMl90IHNlcTsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyA9ICZzdGNiLT5h
c29jOworCisJLyogR2V0IHRoZSBudW1iZXIuICovCisJc2VxID0gbnRvaGwoc3RyX2FkZC0+cmVx
dWVzdF9zZXEpOworCW51bV9zdHJlYW0gPSBudG9ocyhzdHJfYWRkLT5udW1iZXJfb2Zfc3RyZWFt
cyk7CisJLyogTm93IHdoYXQgd291bGQgYmUgdGhlIG5ldyB0b3RhbD8gKi8KKwlpZiAoYXNvYy0+
c3RyX3Jlc2V0X3NlcV9pbiA9PSBzZXEpIHsKKwkJc3RjYi0+YXNvYy5sYXN0X3Jlc2V0X2FjdGlv
blsxXSA9IHN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF07CisJCWlmICghKGFzb2MtPmxv
Y2FsX3N0cnJlc2V0X3N1cHBvcnQgJiBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRKSkgewor
CQkJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRf
REVOSUVEOworCQl9IGVsc2UgaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5n
KSB7CisJCQkvKiBXZSBtdXN0IHJlamVjdCBpdCB3ZSBoYXZlIHNvbWV0aGluZyBwZW5kaW5nICov
CisJCQlzdGNiLT5hc29jLmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRf
UkVTVUxUX0VSUl9JTl9QUk9HUkVTUzsKKwkJfSBlbHNlIHsKKwkJCS8qIE9rLCB3ZSBjYW4gZG8g
dGhhdCA6LSkgKi8KKwkJCWludCBteWNoazsKKwkJCW15Y2hrID0gc3RjYi0+YXNvYy5zdHJlYW1v
dXRjbnQ7CisJCQlteWNoayArPSBudW1fc3RyZWFtOworCQkJaWYgKG15Y2hrIDwgMHgxMDAwMCkg
eworCQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0gPSBTQ1RQX1NUUkVBTV9SRVNF
VF9SRVNVTFRfUEVSRk9STUVEOworCQkJCWlmIChzY3RwX3NlbmRfc3RyX3Jlc2V0X3JlcShzdGNi
LCAwLCBOVUxMLCAwLCAwLCAxLCBudW1fc3RyZWFtLCAwLCAxKSkgeworCQkJCQlzdGNiLT5hc29j
Lmxhc3RfcmVzZXRfYWN0aW9uWzBdID0gU0NUUF9TVFJFQU1fUkVTRVRfUkVTVUxUX0RFTklFRDsK
KwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rpb25bMF0g
PSBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfREVOSUVEOworCQkJfQorCQl9CisJCXNjdHBfYWRk
X3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIHN0Y2ItPmFzb2MubGFzdF9yZXNldF9hY3Rp
b25bMF0pOworCQlhc29jLT5zdHJfcmVzZXRfc2VxX2luKys7CisJfSBlbHNlIGlmICgoYXNvYy0+
c3RyX3Jlc2V0X3NlcV9pbiAtIDEpID09IHNlcSkgeworCQkvKgorCQkgKiBvbmUgc2VxIGJhY2ss
IGp1c3QgZWNobyBiYWNrIGxhc3QgYWN0aW9uIHNpbmNlIG15CisJCSAqIHJlc3BvbnNlIHdhcyBs
b3N0LgorCQkgKi8KKwkJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGssIHNlcSwgYXNv
Yy0+bGFzdF9yZXNldF9hY3Rpb25bMF0pOworCX0gZWxzZSBpZiAoKGFzb2MtPnN0cl9yZXNldF9z
ZXFfaW4gLSAyKSA9PSBzZXEpIHsKKwkJLyoKKwkJICogdHdvIHNlcSBiYWNrLCBqdXN0IGVjaG8g
YmFjayBsYXN0IGFjdGlvbiBzaW5jZSBteQorCQkgKiByZXNwb25zZSB3YXMgbG9zdC4KKwkJICov
CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHQoY2hrLCBzZXEsIGFzb2MtPmxhc3RfcmVz
ZXRfYWN0aW9uWzFdKTsKKwl9IGVsc2UgeworCQlzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0
KGNoaywgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfRVJSX0JBRF9TRVFOTyk7CisJfQor
fQorCisjaWYgIWRlZmluZWQoX19QYW5kYV9fKQorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0
ZV9fICgobm9pbmxpbmUpKQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBpbnQKK3NjdHBfaGFuZGxl
X3N0cmVhbV9yZXNldChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBtYnVmICptLCBpbnQg
b2Zmc2V0LAorCQkJIHN0cnVjdCBzY3RwX2NodW5raGRyICpjaF9yZXEpCit7CisJdWludDE2X3Qg
cmVtYWluaW5nX2xlbmd0aCwgcGFyYW1fbGVuLCBwdHlwZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhk
ciBwc3RvcmU7CisJdWludDhfdCBjc3RvcmVbU0NUUF9DSFVOS19CVUZGRVJfU0laRV07CisJdWlu
dDMyX3Qgc2VxID0gMDsKKwlpbnQgbnVtX3JlcSA9IDA7CisJaW50IHRydW5jID0gMDsKKwlzdHJ1
Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0
cnVjdCBzY3RwX3BhcmFtaGRyICpwaDsKKwlpbnQgcmV0X2NvZGUgPSAwOworCWludCBudW1fcGFy
YW0gPSAwOworCisJLyogbm93IGl0IG1heSBiZSBhIHJlc2V0IG9yIGEgcmVzZXQtcmVzcG9uc2Ug
Ki8KKwlyZW1haW5pbmdfbGVuZ3RoID0gbnRvaHMoY2hfcmVxLT5jaHVua19sZW5ndGgpIC0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKworCS8qIHNldHVwIGZvciBhZGRpbmcgdGhlIHJl
c3BvbnNlICovCisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBO
VUxMKSB7CisJCXJldHVybiAocmV0X2NvZGUpOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsK
KwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU1RSRUFNX1JFU0VUOworCWNoay0+cmVjLmNo
dW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9
ICZzdGNiLT5hc29jOworCWNoay0+bm9fZnJfYWxsb3dlZCA9IDA7CisJY2hrLT5ib29rX3NpemUg
PSBjaGstPnNlbmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY2hrLT5i
b29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhN
Q0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChjaGstPmRhdGEgPT0gTlVM
TCkgeworCXN0cnJlc19ub2NodW5rOgorCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlzY3RwX21fZnJl
ZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm4gKHJldF9jb2Rl
KTsKKwl9CisJU0NUUF9CVUZfUkVTVl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsK
KworCS8qIHNldHVwIGNodW5rIHBhcmFtZXRlcnMgKi8KKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT53aG9UbyA9IE5VTEw7CisK
KwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwljaC0+Y2h1
bmtfdHlwZSA9IFNDVFBfU1RSRUFNX1JFU0VUOworCWNoLT5jaHVua19mbGFncyA9IDA7CisJY2gt
PmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hr
LT5kYXRhKSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9zaXplKTsKKwlvZmZzZXQgKz0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwl3aGlsZSAocmVtYWluaW5nX2xlbmd0aCA+PSBzaXpl
b2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRy
ICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHNpemVvZihwc3RvcmUpLCAodWludDhfdCAqKSZw
c3RvcmUpOworCQlpZiAocGggPT0gTlVMTCkgeworCQkJLyogVFNOSCAqLworCQkJYnJlYWs7CisJ
CX0KKwkJcGFyYW1fbGVuID0gbnRvaHMocGgtPnBhcmFtX2xlbmd0aCk7CisJCWlmICgocGFyYW1f
bGVuID4gcmVtYWluaW5nX2xlbmd0aCkgfHwKKwkJICAgIChwYXJhbV9sZW4gPCAoc2l6ZW9mKHN0
cnVjdCBzY3RwX3BhcmFtaGRyKSArIHNpemVvZih1aW50MzJfdCkpKSkgeworCQkJLyogYmFkIHBh
cmFtZXRlciBsZW5ndGggKi8KKwkJCWJyZWFrOworCQl9CisJCXBoID0gKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIG1pbihwYXJhbV9sZW4sIHNpemVvZihj
c3RvcmUpKSwKKwkJCQkJCQkgICAodWludDhfdCAqKSZjc3RvcmUpOworCQlpZiAocGggPT0gTlVM
TCkgeworCQkJLyogVFNOSCAqLworCQkJYnJlYWs7CisJCX0KKwkJcHR5cGUgPSBudG9ocyhwaC0+
cGFyYW1fdHlwZSk7CisJCW51bV9wYXJhbSsrOworCQlpZiAocGFyYW1fbGVuID4gc2l6ZW9mKGNz
dG9yZSkpIHsKKwkJCXRydW5jID0gMTsKKwkJfSBlbHNlIHsKKwkJCXRydW5jID0gMDsKKwkJfQor
CQlpZiAobnVtX3BhcmFtID4gU0NUUF9NQVhfUkVTRVRfUEFSQU1TKSB7CisJCQkvKiBoaXQgdGhl
IG1heCBvZiBwYXJhbWV0ZXJzIGFscmVhZHkgc29ycnkuLiAqLworCQkJYnJlYWs7CisJCX0KKwkJ
aWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX09VVF9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVlc3QgKnJlcV9vdXQ7CisKKwkJCWlmIChwYXJhbV9sZW4g
PCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X291dF9yZXF1ZXN0KSkgeworCQkJCWJy
ZWFrOworCQkJfQorCQkJcmVxX291dCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3Jl
cXVlc3QgKilwaDsKKwkJCW51bV9yZXErKzsKKwkJCWlmIChzdGNiLT5hc29jLnN0cmVhbV9yZXNl
dF9vdXRzdGFuZGluZykgeworCQkJCXNlcSA9IG50b2hsKHJlcV9vdXQtPnJlc3BvbnNlX3NlcSk7
CisJCQkJaWYgKHNlcSA9PSBzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfb3V0KSB7CisJCQkJCS8q
IGltcGxpY2l0IGFjayAqLworCQkJCQkodm9pZClzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXRfcmVz
cG9uc2Uoc3RjYiwgc2VxLCBTQ1RQX1NUUkVBTV9SRVNFVF9SRVNVTFRfUEVSRk9STUVELCBOVUxM
KTsKKwkJCQl9CisJCQl9CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVzZXRfcmVxdWVzdF9vdXQoc3Rj
YiwgY2hrLCByZXFfb3V0LCB0cnVuYyk7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJf
UkVTRVRfQUREX09VVF9TVFJFQU1TKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRk
X3N0cm0gICpzdHJfYWRkOworCisJCQlpZiAocGFyYW1fbGVuIDwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9hZGRfc3RybSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXN0cl9hZGQg
PSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICAqKXBoOworCQkJbnVtX3JlcSsr
OworCQkJc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X2FkZF9zdHJtKHN0Y2IsIGNoaywgc3RyX2FkZCk7
CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVBTVMpIHsK
KwkJCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9hZGRfc3RybSAgKnN0cl9hZGQ7CisKKwkJCWlm
IChwYXJhbV9sZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtKSkg
eworCQkJCWJyZWFrOworCQkJfQorCQkJc3RyX2FkZCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfYWRkX3N0cm0gICopcGg7CisJCQludW1fcmVxKys7CisJCQlzY3RwX2hhbmRsZV9zdHJfcmVz
ZXRfYWRkX291dF9zdHJtKHN0Y2IsIGNoaywgc3RyX2FkZCk7CisJCX0gZWxzZSBpZiAocHR5cGUg
PT0gU0NUUF9TVFJfUkVTRVRfSU5fUkVRVUVTVCkgeworCQkJc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X2luX3JlcXVlc3QgKnJlcV9pbjsKKworCQkJbnVtX3JlcSsrOworCQkJcmVxX2luID0gKHN0
cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9pbl9yZXF1ZXN0ICopcGg7CisJCQlzY3RwX2hhbmRsZV9z
dHJfcmVzZXRfcmVxdWVzdF9pbihzdGNiLCBjaGssIHJlcV9pbiwgdHJ1bmMpOworCQl9IGVsc2Ug
aWYgKHB0eXBlID09IFNDVFBfU1RSX1JFU0VUX1RTTl9SRVFVRVNUKSB7CisJCQlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfdHNuX3JlcXVlc3QgKnJlcV90c247CisKKwkJCW51bV9yZXErKzsKKwkJ
CXJlcV90c24gPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0ICopcGg7CisJ
CQlpZiAoc2N0cF9oYW5kbGVfc3RyX3Jlc2V0X3JlcXVlc3RfdHNuKHN0Y2IsIGNoaywgcmVxX3Rz
bikpIHsKKwkJCQlyZXRfY29kZSA9IDE7CisJCQkJZ290byBzdHJyZXNfbm9jaHVuazsKKwkJCX0K
KwkJCS8qIG5vIG1vcmUgKi8KKwkJCWJyZWFrOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBf
U1RSX1JFU0VUX1JFU1BPTlNFKSB7CisJCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9u
c2UgKnJlc3A7CisJCQl1aW50MzJfdCByZXN1bHQ7CisKKwkJCWlmIChwYXJhbV9sZW4gPCBzaXpl
b2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlKSkgeworCQkJCWJyZWFrOworCQkJ
fQorCQkJcmVzcCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfcmVzcG9uc2UgKilwaDsKKwkJ
CXNlcSA9IG50b2hsKHJlc3AtPnJlc3BvbnNlX3NlcSk7CisJCQlyZXN1bHQgPSBudG9obChyZXNw
LT5yZXN1bHQpOworCQkJaWYgKHNjdHBfaGFuZGxlX3N0cmVhbV9yZXNldF9yZXNwb25zZShzdGNi
LCBzZXEsIHJlc3VsdCwgcmVzcCkpIHsKKwkJCQlyZXRfY29kZSA9IDE7CisJCQkJZ290byBzdHJy
ZXNfbm9jaHVuazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisJCW9mZnNldCAr
PSBTQ1RQX1NJWkUzMihwYXJhbV9sZW4pOworCQlpZiAocmVtYWluaW5nX2xlbmd0aCA+PSBTQ1RQ
X1NJWkUzMihwYXJhbV9sZW4pKSB7CisJCQlyZW1haW5pbmdfbGVuZ3RoIC09IFNDVFBfU0laRTMy
KHBhcmFtX2xlbik7CisJCX0gZWxzZSB7CisJCQlyZW1haW5pbmdfbGVuZ3RoID0gMDsKKwkJfQor
CX0KKwlpZiAobnVtX3JlcSA9PSAwKSB7CisJCS8qIHdlIGhhdmUgbm8gcmVzcG9uc2UgZnJlZSB0
aGUgc3R1ZmYgKi8KKwkJZ290byBzdHJyZXNfbm9jaHVuazsKKwl9CisJLyogb2sgd2UgaGF2ZSBh
IGNodW5rIHRvIGxpbmsgaW4gKi8KKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250
cm9sX3NlbmRfcXVldWUsCisJCQkgIGNoaywKKwkJCSAgc2N0cF9uZXh0KTsKKwlzdGNiLT5hc29j
LmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuIChyZXRfY29kZSk7Cit9CisKKy8qCisgKiBIYW5k
bGUgYSByb3V0ZXIgb3IgZW5kcG9pbnRzIHJlcG9ydCBvZiBhIHBhY2tldCBsb3NzLCB0aGVyZSBh
cmUgdHdvIHdheXMKKyAqIHRvIGhhbmRsZSB0aGlzLCBlaXRoZXIgd2UgZ2V0IHRoZSB3aG9sZSBw
YWNrZXQgYW5kIG11c3QgZGlzZWN0IGl0CisgKiBvdXJzZWx2ZXMgKHBvc3NpYmx5IHdpdGggdHJ1
bmNhdGlvbiBhbmQgb3IgY29ycnVwdGlvbikgb3IgaXQgaXMgYSBzdW1tYXJ5CisgKiBmcm9tIGEg
bWlkZGxlIGJveCB0aGF0IGRpZCB0aGUgZGlzZWN0dGluZyBmb3IgdXMuCisgKi8KK3N0YXRpYyB2
b2lkCitzY3RwX2hhbmRsZV9wYWNrZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5r
ICpjcCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwg
dWludDMyX3QgbGltaXQpCit7CisJdWludDMyX3QgYm90dGxlX2J3LCBvbl9xdWV1ZTsKKwl1aW50
MTZfdCB0cnVuY19sZW47CisJdW5zaWduZWQgaW50IGNobGVuOworCXVuc2lnbmVkIGludCBhdDsK
KwlzdHJ1Y3Qgc2N0cF9jaHVua19kZXNjIGRlc2M7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNo
OworCisJY2hsZW4gPSBudG9ocyhjcC0+Y2guY2h1bmtfbGVuZ3RoKTsKKwljaGxlbiAtPSBzaXpl
b2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuayk7CisJLyogWFhYIHBvc3NpYmxlIGNobGVuIHVu
ZGVyZmxvdyAqLworCWlmIChjaGxlbiA9PSAwKSB7CisJCWNoID0gTlVMTDsKKwkJaWYgKGNwLT5j
aC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKQorCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcGRycGJ3cnB0KTsKKwl9IGVsc2UgeworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqKShjcC0+ZGF0YSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCQljaGxlbiAtPSBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpOworCQkvKiBYWFggcG9zc2libGUgY2hsZW4gdW5kZXJmbG93ICov
CisJCW1lbXNldCgmZGVzYywgMCwgc2l6ZW9mKGRlc2MpKTsKKwl9CisJdHJ1bmNfbGVuID0gKHVp
bnQxNl90KSBudG9ocyhjcC0+dHJ1bmNfbGVuKTsKKwlpZiAodHJ1bmNfbGVuID4gbGltaXQpIHsK
KwkJdHJ1bmNfbGVuID0gbGltaXQ7CisJfQorCisJLyogbm93IHRoZSBjaHVua3MgdGhlbXNlbHZl
cyAqLworCXdoaWxlICgoY2ggIT0gTlVMTCkgJiYgKGNobGVuID49IHNpemVvZihzdHJ1Y3Qgc2N0
cF9jaHVua2hkcikpKSB7CisJCWRlc2MuY2h1bmtfdHlwZSA9IGNoLT5jaHVua190eXBlOworCQkv
KiBnZXQgYW1vdW50IHdlIG5lZWQgdG8gbW92ZSAqLworCQlhdCA9IG50b2hzKGNoLT5jaHVua19s
ZW5ndGgpOworCQlpZiAoYXQgPCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSB7CisJCQkv
KiBjb3JydXB0IGNodW5rLCBtYXliZSBhdCB0aGUgZW5kPyAqLworCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcGRycGNydXB0KTsKKwkJCWJyZWFrOworCQl9CisJCWlmICh0cnVuY19sZW4gPT0gMCkg
eworCQkJLyogd2UgYXJlIHN1cHBvc2VkIHRvIGhhdmUgYWxsIG9mIGl0ICovCisJCQlpZiAoYXQg
PiBjaGxlbikgeworCQkJCS8qIGNvcnJ1cHQgc2tpcCBpdCAqLworCQkJCVNDVFBfU1RBVF9JTkNS
KHNjdHBzX3BkcnBjcnVwdCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBp
cyB0aGVyZSBlbm91Z2ggb2YgaXQgbGVmdCA/ICovCisJCQlpZiAoZGVzYy5jaHVua190eXBlID09
IFNDVFBfREFUQSkgeworCQkJCWlmIChjaGxlbiA8IChzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9j
aHVuaykgKworCQkJCSAgICBzaXplb2YoZGVzYy5kYXRhX2J5dGVzKSkpIHsKKwkJCQkJYnJlYWs7
CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoY2hsZW4gPCBzaXplb2Yoc3RydWN0IHNjdHBf
Y2h1bmtoZHIpKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJfQorCQlpZiAoZGVzYy5j
aHVua190eXBlID09IFNDVFBfREFUQSkgeworCQkJLyogY2FuIHdlIGdldCBvdXQgdGhlIHRzbj8g
Ki8KKwkJCWlmICgoY3AtPmNoLmNodW5rX2ZsYWdzICYgU0NUUF9GUk9NX01JRERMRV9CT1gpKQor
CQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBtYmRhKTsKKworCQkJaWYgKGNobGVuID49IChz
aXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykgKyBzaXplb2YodWludDMyX3QpKSkgeworCQkJ
CS8qIHllcCAqLworCQkJCXN0cnVjdCBzY3RwX2RhdGFfY2h1bmsgKmRjcDsKKwkJCQl1aW50OF90
ICpkZHA7CisJCQkJdW5zaWduZWQgaW50IGlpaTsKKworCQkJCWRjcCA9IChzdHJ1Y3Qgc2N0cF9k
YXRhX2NodW5rICopY2g7CisJCQkJZGRwID0gKHVpbnQ4X3QgKikgKGRjcCArIDEpOworCQkJCWZv
ciAoaWlpID0gMDsgaWlpIDwgc2l6ZW9mKGRlc2MuZGF0YV9ieXRlcyk7IGlpaSsrKSB7CisJCQkJ
CWRlc2MuZGF0YV9ieXRlc1tpaWldID0gZGRwW2lpaV07CisJCQkJfQorCQkJCWRlc2MudHNuX2lm
YW55ID0gZGNwLT5kcC50c247CisJCQl9IGVsc2UgeworCQkJCS8qIG5vcGUgd2UgYXJlIGRvbmUu
ICovCisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycG5lZGF0KTsKKwkJCQlicmVhazsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCWlmICgoY3AtPmNoLmNodW5rX2ZsYWdzICYgU0NUUF9GUk9NX01J
RERMRV9CT1gpKQorCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3BkcnBtYmN0KTsKKwkJfQorCisJ
CWlmIChwcm9jZXNzX2NodW5rX2Ryb3Aoc3RjYiwgJmRlc2MsIG5ldCwgY3AtPmNoLmNodW5rX2Zs
YWdzKSkgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycHBkYnJrKTsKKwkJCWJyZWFrOwor
CQl9CisJCWlmIChTQ1RQX1NJWkUzMihhdCkgPiBjaGxlbikgeworCQkJYnJlYWs7CisJCX0KKwkJ
Y2hsZW4gLT0gU0NUUF9TSVpFMzIoYXQpOworCQlpZiAoY2hsZW4gPCBzaXplb2Yoc3RydWN0IHNj
dHBfY2h1bmtoZHIpKSB7CisJCQkvKiBkb25lLCBub25lIGxlZnQgKi8KKwkJCWJyZWFrOworCQl9
CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KWNoICsgU0NUUF9TSVpF
MzIoYXQpKTsKKwl9CisJLyogTm93IHVwZGF0ZSBhbnkgcnduZCAtLS0gcG9zc2libHkgKi8KKwlp
ZiAoKGNwLT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSA9PSAwKSB7CisJ
CS8qIEZyb20gYSBwZWVyLCB3ZSBnZXQgYSByd25kIHJlcG9ydCAqLworCQl1aW50MzJfdCBhX3J3
bmQ7CisKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGZlaG9zKTsKKworCQlib3R0bGVfYncg
PSBudG9obChjcC0+Ym90dGxlX2J3KTsKKwkJb25fcXVldWUgPSBudG9obChjcC0+Y3VycmVudF9v
bnEpOworCQlpZiAoYm90dGxlX2J3ICYmIG9uX3F1ZXVlKSB7CisJCQkvKiBhIHJ3bmQgcmVwb3J0
IGlzIGluIGhlcmUgKi8KKwkJCWlmIChib3R0bGVfYncgPiBvbl9xdWV1ZSkKKwkJCQlhX3J3bmQg
PSBib3R0bGVfYncgLSBvbl9xdWV1ZTsKKwkJCWVsc2UKKwkJCQlhX3J3bmQgPSAwOworCisJCQlp
ZiAoYV9yd25kID09IDApCisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJCWVsc2Ug
eworCQkJCWlmIChhX3J3bmQgPiBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkgeworCQkJCQlzdGNi
LT5hc29jLnBlZXJzX3J3bmQgPQorCQkJCQkgICAgYV9yd25kIC0gc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kID0gMDsKKwkJ
CQl9CisJCQkJaWYgKHN0Y2ItPmFzb2MucGVlcnNfcnduZCA8CisJCQkJICAgIHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZXAuc2N0cF9zd3Nfc2VuZGVyKSB7CisJCQkJCS8qIFNXUyBzZW5kZXIgc2lkZSBl
bmdhZ2VzICovCisJCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCA9IDA7CisJCQkJfQorCQkJfQor
CQl9CisJfSBlbHNlIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcGRycGZtYm94KTsKKwl9CisK
KwkvKiBub3cgbWlkZGxlIGJveGVzIGluIHNhdCBuZXR3b3JrcyBnZXQgYSBjd25kIGJ1bXAgKi8K
KwlpZiAoKGNwLT5jaC5jaHVua19mbGFncyAmIFNDVFBfRlJPTV9NSURETEVfQk9YKSAmJgorCSAg
ICAoc3RjYi0+YXNvYy5zYXRfdDNfbG9zc19yZWNvdmVyeSA9PSAwKSAmJgorCSAgICAoc3RjYi0+
YXNvYy5zYXRfbmV0d29yaykpIHsKKwkJLyoKKwkJICogVGhpcyBpcyBkZWJhdGFibGUgYnV0IGZv
ciBzYXQgbmV0d29ya3MgaXQgbWFrZXMgc2Vuc2UKKwkJICogTm90ZSBpZiBhIFQzIHRpbWVyIGhh
cyB3ZW50IG9mZiwgd2Ugd2lsbCBwcm9oaWJpdCBhbnkKKwkJICogY2hhbmdlcyB0byBjd25kIHVu
dGlsIHdlIGV4aXQgdGhlIHQzIGxvc3MgcmVjb3ZlcnkuCisJCSAqLworCQlzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX2N3bmRfdXBkYXRlX2FmdGVyX3BhY2tldF9kcm9wcGVkKHN0Y2IsCisJ
CQluZXQsIGNwLCAmYm90dGxlX2J3LCAmb25fcXVldWUpOworCX0KK30KKworLyoKKyAqIGhhbmRs
ZXMgYWxsIGNvbnRyb2wgY2h1bmtzIGluIGEgcGFja2V0IGlucHV0czogLSBtOiBtYnVmIGNoYWlu
LCBhc3N1bWVkIHRvCisgKiBzdGlsbCBjb250YWluIElQL1NDVFAgaGVhZGVyIC0gc3RjYjogaXMg
dGhlIHRjYiBmb3VuZCBmb3IgdGhpcyBwYWNrZXQgLQorICogb2Zmc2V0OiBvZmZzZXQgaW50byB0
aGUgbWJ1ZiBjaGFpbiB0byBmaXJzdCBjaHVua2hkciAtIGxlbmd0aDogaXMgdGhlCisgKiBsZW5n
dGggb2YgdGhlIGNvbXBsZXRlIHBhY2tldCBvdXRwdXRzOiAtIGxlbmd0aDogbW9kaWZpZWQgdG8g
cmVtYWluaW5nCisgKiBsZW5ndGggYWZ0ZXIgY29udHJvbCBwcm9jZXNzaW5nIC0gbmV0cDogbW9k
aWZpZWQgdG8gbmV3IHNjdHBfbmV0cyBhZnRlcgorICogY29va2llLWVjaG8gcHJvY2Vzc2luZyAt
IHJldHVybiBOVUxMIHRvIGRpc2NhcmQgdGhlIHBhY2tldCAoaWUuIG5vIGFzb2MsCisgKiBiYWQg
cGFja2V0LC4uLikgb3RoZXJ3aXNlIHJldHVybiB0aGUgdGNiIGZvciB0aGlzIHBhY2tldAorICov
CisjaWYgIWRlZmluZWQoX19QYW5kYV9fKQorI2lmZGVmIF9fR05VQ19fCitfX2F0dHJpYnV0ZV9f
ICgobm9pbmxpbmUpKQorI2VuZGlmCisjZW5kaWYKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgor
c2N0cF9wcm9jZXNzX2NvbnRyb2woc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCAqb2Zm
c2V0LCBpbnQgbGVuZ3RoLAorICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2NodW5raGRyICpj
aCwgc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX25ldHMgKipuZXRwLCBpbnQgKmZ3ZF90c25fc2VlbiwKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50
MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQp
Cit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IG1idWYgKm9wX2Vy
cjsKKwljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCXVpbnQzMl90IHZ0YWdfaW47CisJ
aW50IG51bV9jaHVua3MgPSAwOwkvKiBudW1iZXIgb2YgY29udHJvbCBjaHVua3MgcHJvY2Vzc2Vk
ICovCisJdWludDMyX3QgY2hrX2xlbmd0aCwgY29udGlndW91czsKKwlpbnQgcmV0OworCWludCBh
Ym9ydF9ub191bmxvY2sgPSAwOworCWludCBlY25lX3NlZW4gPSAwOworCS8qCisJICogSG93IGJp
ZyBzaG91bGQgdGhpcyBiZSwgYW5kIHNob3VsZCBpdCBiZSBhbGxvYydkPyBMZXRzIHRyeSB0aGUK
KwkgKiBkLW10dS1jZWlsaW5nIGZvciBub3cgKDJrKSBhbmQgdGhhdCBzaG91bGQgaG9wZWZ1bGx5
IHdvcmsgLi4uCisJICogdW50aWwgd2UgZ2V0IGludG8ganVtYm8gZ3JhbXMgYW5kIHN1Y2guLgor
CSAqLworCXVpbnQ4X3QgY2h1bmtfYnVmW1NDVFBfQ0hVTktfQlVGRkVSX1NJWkVdOworCWludCBn
b3RfYXV0aCA9IDA7CisJdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwLCBhdXRoX2xlbiA9IDA7CisJ
aW50IGF1dGhfc2tpcHBlZCA9IDA7CisJaW50IGFzY29uZl9jbnQgPSAwOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCXN0cnVjdCBzb2Nr
ZXQgKnNvOworI2VuZGlmCisKKwlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic2N0cF9wcm9j
ZXNzX2NvbnRyb2w6IGlwaGxlbj0ldSwgb2Zmc2V0PSV1LCBsZW5ndGg9JXUgc3RjYjolcFxuIiwK
KwkJaXBobGVuLCAqb2Zmc2V0LCBsZW5ndGgsICh2b2lkICopc3RjYik7CisKKwlpZiAoc3RjYikg
eworCQlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl9CisJLyogdmFsaWRhdGUgY2h1bmsg
aGVhZGVyIGxlbmd0aC4uLiAqLworCWlmIChudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSA8IHNpemVv
ZigqY2gpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJJbnZhbGlkIGhlYWRlciBs
ZW5ndGggJWRcbiIsCisJCQludG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisJCSpvZmZzZXQgPSBs
ZW5ndGg7CisJCXJldHVybiAoc3RjYik7CisJfQorCS8qCisJICogdmFsaWRhdGUgdGhlIHZlcmlm
aWNhdGlvbiB0YWcKKwkgKi8KKwl2dGFnX2luID0gbnRvaGwoc2gtPnZfdGFnKTsKKworCWlmIChj
aC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X0lOUFVUMSwgIkl0cyBhbiBJTklUIG9mIGxlbjolZCB2dGFnOiV4XG4iLAorCQkJbnRvaHMoY2gt
PmNodW5rX2xlbmd0aCksIHZ0YWdfaW4pOworCQlpZiAodnRhZ19pbiAhPSAwKSB7CisJCQkvKiBw
cm90b2NvbCBlcnJvci0gc2lsZW50bHkgZGlzY2FyZC4uLiAqLworCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfYmFkdnRhZyk7CisJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0gZWxzZSBpZiAoY2gt
PmNodW5rX3R5cGUgIT0gU0NUUF9DT09LSUVfRUNITykgeworCQkvKgorCQkgKiBJZiB0aGVyZSBp
cyBubyBzdGNiLCBza2lwIHRoZSBBVVRIIGNodW5rIGFuZCBwcm9jZXNzCisJCSAqIGxhdGVyIGFm
dGVyIGEgc3RjYiBpcyBmb3VuZCAodG8gdmFsaWRhdGUgdGhlIGxvb2t1cCB3YXMKKwkJICogdmFs
aWQuCisJCSAqLworCQlpZiAoKGNoLT5jaHVua190eXBlID09IFNDVFBfQVVUSEVOVElDQVRJT04p
ICYmCisJCSAgICAoc3RjYiA9PSBOVUxMKSAmJgorCQkgICAgKGlucC0+YXV0aF9zdXBwb3J0ZWQg
PT0gMSkpIHsKKwkJCS8qIHNhdmUgdGhpcyBjaHVuayBmb3IgbGF0ZXIgcHJvY2Vzc2luZyAqLwor
CQkJYXV0aF9za2lwcGVkID0gMTsKKwkJCWF1dGhfb2Zmc2V0ID0gKm9mZnNldDsKKwkJCWF1dGhf
bGVuID0gbnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7CisKKwkJCS8qICh0ZW1wb3JhcmlseSkgbW92
ZSBwYXN0IHRoaXMgY2h1bmsgKi8KKwkJCSpvZmZzZXQgKz0gU0NUUF9TSVpFMzIoYXV0aF9sZW4p
OworCQkJaWYgKCpvZmZzZXQgPj0gbGVuZ3RoKSB7CisJCQkJLyogbm8gbW9yZSBkYXRhIGxlZnQg
aW4gdGhlIG1idWYgY2hhaW4gKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAo
TlVMTCk7CisJCQl9CisJCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRw
dHIobSwgKm9mZnNldCwKKwkJCQkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwg
Y2h1bmtfYnVmKTsKKwkJfQorCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJLyogSGVscCAqLworCQkJ
Km9mZnNldCA9IGxlbmd0aDsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKwkJaWYgKGNoLT5jaHVu
a190eXBlID09IFNDVFBfQ09PS0lFX0VDSE8pIHsKKwkJCWdvdG8gcHJvY2Vzc19jb250cm9sX2No
dW5rczsKKwkJfQorCQkvKgorCQkgKiBmaXJzdCBjaGVjayBpZiBpdCdzIGFuIEFTQ09ORiB3aXRo
IGFuIHVua25vd24gc3JjIGFkZHIgd2UKKwkJICogbmVlZCB0byBsb29rIGluc2lkZSB0byBmaW5k
IHRoZSBhc3NvY2lhdGlvbgorCQkgKi8KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFNDVFBfQVND
T05GICYmIHN0Y2IgPT0gTlVMTCkgeworCQkJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmFzY29uZl9j
aCA9IGNoOworCQkJdWludDMyX3QgYXNjb25mX29mZnNldCA9IDAsIGFzY29uZl9sZW4gPSAwOwor
CisJCQkvKiBpbnAncyByZWZjb3VudCBtYXkgYmUgcmVkdWNlZCAqLworCQkJU0NUUF9JTlBfSU5D
Ul9SRUYoaW5wKTsKKworCQkJYXNjb25mX29mZnNldCA9ICpvZmZzZXQ7CisJCQlkbyB7CisJCQkJ
YXNjb25mX2xlbiA9IG50b2hzKGFzY29uZl9jaC0+Y2h1bmtfbGVuZ3RoKTsKKwkJCQlpZiAoYXNj
b25mX2xlbiA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfcGFyYW1oZHIpKQorCQkJCQlicmVh
azsKKwkJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNjb25mKG0sCisJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0LAorCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZHN0LAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2gsICZpbnAsIG5ldHAsIHZyZl9pZCk7CisJCQkJaWYgKHN0
Y2IgIT0gTlVMTCkKKwkJCQkJYnJlYWs7CisJCQkJYXNjb25mX29mZnNldCArPSBTQ1RQX1NJWkUz
Mihhc2NvbmZfbGVuKTsKKwkJCQlhc2NvbmZfY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilz
Y3RwX21fZ2V0cHRyKG0sIGFzY29uZl9vZmZzZXQsCisJCQkJCQkJCQkJICBzaXplb2Yoc3RydWN0
IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOworCQkJfSB3aGlsZSAoYXNjb25mX2NoICE9IE5V
TEwgJiYgYXNjb25mX2NoLT5jaHVua190eXBlID09IFNDVFBfQVNDT05GKTsKKwkJCWlmIChzdGNi
ID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIHJlZHVjZSBpbnAncyByZWZjb3VudCBpZiBub3Qg
cmVkdWNlZCBpbgorCQkJCSAqIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FzY29uZigpLgorCQkJ
CSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisKKwkJCS8qIG5vdyBnbyBi
YWNrIGFuZCB2ZXJpZnkgYW55IGF1dGggY2h1bmsgdG8gYmUgc3VyZSAqLworCQkJaWYgKGF1dGhf
c2tpcHBlZCAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQkJCXN0cnVjdCBzY3RwX2F1dGhfY2h1bmsg
KmF1dGg7CisKKwkJCQlhdXRoID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKikKKwkJCQkJc2N0
cF9tX2dldHB0cihtLCBhdXRoX29mZnNldCwKKwkJCQkJCSAgICAgIGF1dGhfbGVuLCBjaHVua19i
dWYpOworCQkJCWdvdF9hdXRoID0gMTsKKwkJCQlhdXRoX3NraXBwZWQgPSAwOworCQkJCWlmICgo
YXV0aCA9PSBOVUxMKSB8fCBzY3RwX2hhbmRsZV9hdXRoKHN0Y2IsIGF1dGgsIG0sCisJCQkJCQkJ
CSAgICAgICBhdXRoX29mZnNldCkpIHsKKwkJCQkJLyogYXV0aCBITUFDIGZhaWxlZCBzbyBkdW1w
IGl0ICovCisJCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJCXJldHVybiAoc3RjYik7CisJCQkJ
fSBlbHNlIHsKKwkJCQkJLyogcmVtYWluaW5nIGNodW5rcyBhcmUgSE1BQyBjaGVja2VkICovCisJ
CQkJCXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAl
czolZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJb3BfZXJyID0g
c2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUp
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJLyogbm8gYXNzb2Np
YXRpb24sIHNvIGl0J3Mgb3V0IG9mIHRoZSBibHVlLi4uICovCisJCQlzY3RwX2hhbmRsZV9vb3Ri
KG0sIGlwaGxlbiwgKm9mZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAsIG9wX2VyciwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQs
IGlucC0+ZmlibnVtLAorI2VuZGlmCisJCQkJCSB2cmZfaWQsIHBvcnQpOworCQkJKm9mZnNldCA9
IGxlbmd0aDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYXNvYyA9ICZzdGNiLT5hc29jOwor
CQkvKiBBQk9SVCBhbmQgU0hVVERPV04gY2FuIHVzZSBlaXRoZXIgdl90YWcuLi4gKi8KKwkJaWYg
KChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OKSB8fAorCQkgICAgKGNo
LT5jaHVua190eXBlID09IFNDVFBfU0hVVERPV05fQ09NUExFVEUpIHx8CisJCSAgICAoY2gtPmNo
dW5rX3R5cGUgPT0gU0NUUF9QQUNLRVRfRFJPUFBFRCkpIHsKKwkJCS8qIFRha2UgdGhlIFQtYml0
IGFsd2F5cyBpbnRvIGFjY291bnQuICovCisJCQlpZiAoKCgoY2gtPmNodW5rX2ZsYWdzICYgU0NU
UF9IQURfTk9fVENCKSA9PSAwKSAmJgorCQkJICAgICAodnRhZ19pbiA9PSBhc29jLT5teV92dGFn
KSkgfHwKKwkJCSAgICAoKChjaC0+Y2h1bmtfZmxhZ3MgJiBTQ1RQX0hBRF9OT19UQ0IpID09IFND
VFBfSEFEX05PX1RDQikgJiYKKwkJCSAgICAgKGFzb2MtPnBlZXJfdnRhZyAhPSBodG9ubCgwKSkg
JiYKKwkJCSAgICAgKHZ0YWdfaW4gPT0gYXNvYy0+cGVlcl92dGFnKSkpIHsKKwkJCQkvKiB0aGlz
IGlzIHZhbGlkICovCisJCQl9IGVsc2UgeworCQkJCS8qIGRyb3AgdGhpcyBwYWNrZXQuLi4gKi8K
KwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKKwkJCQlpZiAoc3RjYiAhPSBOVUxM
KSB7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJcmV0dXJuIChOVUxM
KTsKKwkJCX0KKwkJfSBlbHNlIGlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NIVVRET1dOX0FD
SykgeworCQkJaWYgKHZ0YWdfaW4gIT0gYXNvYy0+bXlfdnRhZykgeworCQkJCS8qCisJCQkJICog
dGhpcyBjb3VsZCBiZSBhIHN0YWxlIFNIVVRET1dOLUFDSyBvciB0aGUKKwkJCQkgKiBwZWVyIG5l
dmVyIGdvdCB0aGUgU0hVVERPV04tQ09NUExFVEUgYW5kCisJCQkJICogaXMgc3RpbGwgaHVuZzsg
d2UgaGF2ZSBzdGFydGVkIGEgbmV3IGFzb2MKKwkJCQkgKiBidXQgaXQgd29uJ3QgY29tcGxldGUg
dW50aWwgdGhlIHNodXRkb3duCisJCQkJICogaXMgY29tcGxldGVkCisJCQkJICovCisJCQkJaWYg
KHN0Y2IgIT0gTlVMTCkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJ
CXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9fRklMRV9f
LCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2Uo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1zZyk7CisJCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4sICpv
ZmZzZXQsIHNyYywgZHN0LAorCQkJCSAgICAgICAgICAgICAgICAgc2gsIGlucCwgb3BfZXJyLAor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUs
IG1mbG93aWQsIGZpYm51bSwKKyNlbmRpZgorCQkJCSAgICAgICAgICAgICAgICAgdnJmX2lkLCBw
b3J0KTsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQl9IGVsc2UgeworCQkJLyogZm9yIGFs
bCBvdGhlciBjaHVua3MsIHZ0YWcgbXVzdCBtYXRjaCAqLworCQkJaWYgKHZ0YWdfaW4gIT0gYXNv
Yy0+bXlfdnRhZykgeworCQkJCS8qIGludmFsaWQgdnRhZy4uLiAqLworCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDMsCisJCQkJCSJpbnZhbGlkIHZ0YWc6ICV4aCwgZXhwZWN0ICV4aFxuIiwK
KwkJCQkJdnRhZ19pbiwgYXNvYy0+bXlfdnRhZyk7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
YmFkdnRhZyk7CisJCQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJfQorCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsK
KwkJCX0KKwkJfQorCX0JCQkvKiBlbmQgaWYgIVNDVFBfQ09PS0lFX0VDSE8gKi8KKwkvKgorCSAq
IHByb2Nlc3MgYWxsIGNvbnRyb2wgY2h1bmtzLi4uCisJICovCisJaWYgKCgoY2gtPmNodW5rX3R5
cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB8fAorCSAgICAgKGNoLT5jaHVua190eXBlID09IFND
VFBfTlJfU0VMRUNUSVZFX0FDSykgfHwKKwkgICAgIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0hF
QVJUQkVBVF9SRVFVRVNUKSkgJiYKKwkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9
PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCS8qIGltcGxpZWQgY29va2llLWFjay4u
IHdlIG11c3QgaGF2ZSBsb3N0IHRoZSBhY2sgKi8KKwkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygo
c3RydWN0IHNjdHBfY29va2llX2Fja19jaHVuayAqKWNoLCBzdGNiLAorCQkJCSAgICAgICAqbmV0
cCk7CisJfQorCisgcHJvY2Vzc19jb250cm9sX2NodW5rczoKKwl3aGlsZSAoSVNfU0NUUF9DT05U
Uk9MKGNoKSkgeworCQkvKiB2YWxpZGF0ZSBjaHVuayBsZW5ndGggKi8KKwkJY2hrX2xlbmd0aCA9
IG50b2hzKGNoLT5jaHVua19sZW5ndGgpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQyLCAi
c2N0cF9wcm9jZXNzX2NvbnRyb2w6IHByb2Nlc3NpbmcgYSBjaHVuayB0eXBlPSV1LCBsZW49JXVc
biIsCisJCQljaC0+Y2h1bmtfdHlwZSwgY2hrX2xlbmd0aCk7CisJCVNDVFBfTFRSQUNFX0NISyhp
bnAsIHN0Y2IsIGNoLT5jaHVua190eXBlLCBjaGtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW5ndGgg
PCBzaXplb2YoKmNoKSB8fAorCQkgICAgKCpvZmZzZXQgKyAoaW50KWNoa19sZW5ndGgpID4gbGVu
Z3RoKSB7CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJcmV0dXJuIChzdGNiKTsKKwkJfQorCQlT
Q1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfaW5jb250cm9sY2h1bmtzKTsKKwkJLyoKKwkJ
ICogSU5JVCBhbmQgSU5JVC1BQ0sgb25seSBnZXRzIHRoZSBpbml0IGFjayAiaGVhZGVyIiBwb3J0
aW9uCisJCSAqIG9ubHkgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIHRvIHByb2Nlc3MgdGhlIHBlZXIn
cyBDT09LSUUuCisJCSAqIEFsbCBvdGhlcnMgZ2V0IGEgY29tcGxldGUgY2h1bmsuCisJCSAqLwor
CQlzd2l0Y2ggKGNoLT5jaHVua190eXBlKSB7CisJCWNhc2UgU0NUUF9JTklUSUFUSU9OOgorCQkJ
Y29udGlndW91cyA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfSU5JVElBVElPTl9BQ0s6CisJCQljb250aWd1b3VzID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2luaXRfYWNrX2NodW5rKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY29udGln
dW91cyA9IG1pbihjaGtfbGVuZ3RoLCBzaXplb2YoY2h1bmtfYnVmKSk7CisJCQlicmVhazsKKwkJ
fQorCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNl
dCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpZ3Vv
dXMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua19i
dWYpOworCQlpZiAoY2ggPT0gTlVMTCkgeworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCWlmIChz
dGNiICE9IE5VTEwpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCQlyZXR1
cm4gKE5VTEwpOworCQl9CisKKwkJbnVtX2NodW5rcysrOworCQkvKiBTYXZlIG9mZiB0aGUgbGFz
dCBwbGFjZSB3ZSBnb3QgYSBjb250cm9sIGZyb20gKi8KKwkJaWYgKHN0Y2IgIT0gTlVMTCkgewor
CQkJaWYgKCgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHx8IChjaC0+Y2h1bmtf
dHlwZSA9PSBTQ1RQX0FTQ09ORikpIHsKKwkJCQkvKgorCQkJCSAqIGFsbG93IGxhc3RfY29udHJv
bCB0byBiZSBOVUxMIGlmCisJCQkJICogQVNDT05GLi4uIEFTQ09ORiBwcm9jZXNzaW5nIHdpbGwg
ZmluZCB0aGUKKwkJCQkgKiByaWdodCBuZXQgbGF0ZXIKKwkJCQkgKi8KKwkJCQlpZiAoKG5ldHAg
IT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKQorCQkJCQlzdGNiLT5hc29jLmxhc3RfY29udHJv
bF9jaHVua19mcm9tID0gKm5ldHA7CisJCQl9CisJCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VO
QUJMRUQKKwkJc2N0cF9hdWRpdF9sb2coMHhCMCwgY2gtPmNodW5rX3R5cGUpOworI2VuZGlmCisK
KwkJLyogY2hlY2sgdG8gc2VlIGlmIHRoaXMgY2h1bmsgcmVxdWlyZWQgYXV0aCwgYnV0IGlzbid0
ICovCisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgc2N0cF9hdXRoX2lzX3JlcXVpcmVk
X2NodW5rKGNoLT5jaHVua190eXBlLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSAmJgor
CQkgICAgIXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCkgeworCQkJLyogInNpbGVudGx5IiBpZ25v
cmUgKi8KKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7CisJCQlnb3Rv
IG5leHRfY2h1bms7CisJCX0KKwkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgeworCQljYXNlIFND
VFBfSU5JVElBVElPTjoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0lOSVRc
biIpOworCQkJLyogVGhlIElOSVQgY2h1bmsgbXVzdCBiZSB0aGUgb25seSBjaHVuay4gKi8KKwkJ
CWlmICgobnVtX2NodW5rcyA+IDEpIHx8CisJCQkgICAgKGxlbmd0aCAtICpvZmZzZXQgPiAoaW50
KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgeworCQkJCS8qIFJGQyA0OTYwIHJlcXVpcmVzIHRo
YXQgbm8gQUJPUlQgaXMgc2VudCAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJaWYgKHN0
Y2IgIT0gTlVMTCkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCXJl
dHVybiAoTlVMTCk7CisJCQl9CisJCQkvKiBIb25vciBvdXIgcmVzb3VyY2UgbGltaXQuICovCisJ
CQlpZiAoY2hrX2xlbmd0aCA+IFNDVFBfTEFSR0VTVF9JTklUX0FDQ0VQVEVEKSB7CisJCQkJb3Bf
ZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0NBVVNFX09VVF9PRl9SRVNDLCAiIik7CisJ
CQkJc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihpbnAsIHN0Y2IsIG0sIGlwaGxlbiwKKwkJCQkJCSAg
ICAgICBzcmMsIGRzdCwgc2gsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJ
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCQkJCSpvZmZzZXQgPSBsZW5n
dGg7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXNjdHBfaGFuZGxlX2luaXQobSwgaXBo
bGVuLCAqb2Zmc2V0LCBzcmMsIGRzdCwgc2gsCisJCQkgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rICopY2gsIGlucCwKKwkJCSAgICAgICAgICAgICAgICAgc3RjYiwgKm5l
dHAsICZhYm9ydF9ub191bmxvY2ssCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAgICAg
ICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkgICAgICAgICAgICAg
ICAgIHZyZl9pZCwgcG9ydCk7CisJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJaWYgKCghYWJvcnRf
bm9fdW5sb2NrKSAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCX0KKwkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BBRF9D
SFVOSzoKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfSU5JVElBVElPTl9BQ0s6CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9JTklUX0FDS1xuIik7CisJCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpIHsKKwkJCQkvKiBXZSBhcmUgbm90
IGludGVyZXN0ZWQgYW55bW9yZSAqLworCQkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAoc3RjYi0+
YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSkpIHsKKwkJCQkJOworCQkJCX0gZWxzZSB7CisJ
CQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJCWlmIChzdGNiICE9IE5VTEwpIHsKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJCQkJCXNv
ID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCQlTQ1RQX1NPQ0tF
VF9MT0NLKHNvLCAxKTsKKwkJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJCQkJCSh2b2lk
KXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18yOSk7Cisj
aWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJ
CQkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCQkJCX0KKwkJCQkJcmV0
dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQkvKiBUaGUgSU5JVC1BQ0sgY2h1bmsgbXVzdCBi
ZSB0aGUgb25seSBjaHVuay4gKi8KKwkJCWlmICgobnVtX2NodW5rcyA+IDEpIHx8CisJCQkgICAg
KGxlbmd0aCAtICpvZmZzZXQgPiAoaW50KVNDVFBfU0laRTMyKGNoa19sZW5ndGgpKSkgeworCQkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmICgobmV0
cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKKwkJCQlyZXQgPSBzY3RwX2hhbmRsZV9p
bml0X2FjayhtLCBpcGhsZW4sICpvZmZzZXQsCisJCQkJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjLCBkc3QsIHNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c2N0cF9pbml0X2Fja19jaHVuayAqKWNoLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0Y2IsICpuZXRwLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICZhYm9ydF9ub191
bmxvY2ssCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICB2cmZfaWQpOworCQkJfSBlbHNlIHsKKwkJCQlyZXQgPSAtMTsKKwkJCX0KKwkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQlpZiAoYWJvcnRfbm9fdW5sb2NrKSB7CisJCQkJcmV0dXJu
IChOVUxMKTsKKwkJCX0KKwkJCS8qCisJCQkgKiBTcGVjaWFsIGNhc2UsIEkgbXVzdCBjYWxsIHRo
ZSBvdXRwdXQgcm91dGluZSB0bworCQkJICogZ2V0IHRoZSBjb29raWUgZWNob2VkCisJCQkgKi8K
KwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAocmV0ID09IDApKSB7CisJCQkJc2N0cF9jaHVua19v
dXRwdXQoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9DT05UUk9MX1BST0Ms
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9CisJCQlyZXR1cm4gKHN0Y2IpOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9TRUxFQ1RJVkVfQUNLOgorCQljYXNlIFNDVFBfTlJfU0VMRUNUSVZFX0FD
SzoKKwkJeworCQkJaW50IGFib3J0X25vdyA9IDA7CisJCQl1aW50MzJfdCBhX3J3bmQsIGN1bV9h
Y2s7CisJCQl1aW50MTZfdCBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwOworCQkJdWludDhf
dCBmbGFnczsKKwkJCWludCBvZmZzZXRfc2VnLCBvZmZzZXRfZHVwOworCisJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQzLCAiJXNcbiIsCisJCQkJY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxF
Q1RJVkVfQUNLID8gIlNDVFBfU0FDSyIgOiAiU0NUUF9OUl9TQUNLIik7CisJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19yZWN2c2Fja3MpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBE
QkcoU0NUUF9ERUJVR19JTkRBVEExLCAiTm8gc3RjYiB3aGVuIHByb2Nlc3NpbmcgJXMgY2h1bmtc
biIsCisJCQkJICAgICAgICAoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSA/
ICJTQ1RQX1NBQ0siIDogIlNDVFBfTlJfU0FDSyIpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYg
KGNoLT5jaHVua190eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgeworCQkJCWlmIChjaGtfbGVu
Z3RoIDwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspKSB7CisJCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTkRBVEExLCAiQmFkIHNpemUgb24gU0FDSyBjaHVuaywgdG9vIHNtYWxsXG4iKTsK
KwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5ucnNh
Y2tfc3VwcG9ydGVkID09IDApIHsKKwkJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJCX0KKwkJ
CQlpZiAoY2hrX2xlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSkgewor
CQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9uIE5SX1NBQ0sgY2h1
bmssIHRvbyBzbWFsbFxuIik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChTQ1RQ
X0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkg
eworCQkJCS8qLQorCQkJCSAqIElmIHdlIGhhdmUgc2VudCBhIHNodXRkb3duLWFjaywgd2Ugd2ls
bCBwYXkgbm8KKwkJCQkgKiBhdHRlbnRpb24gdG8gYSBzYWNrIHNlbnQgaW4gdG8gdXMgc2luY2UK
KwkJCQkgKiB3ZSBkb24ndCBjYXJlIGFueW1vcmUuCisJCQkJICovCisJCQkJYnJlYWs7CisJCQl9
CisJCQlmbGFncyA9IGNoLT5jaHVua19mbGFnczsKKwkJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBT
Q1RQX1NFTEVDVElWRV9BQ0spIHsKKwkJCQlzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICpzYWNrOwor
CisJCQkJc2FjayA9IChzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9
IG50b2hsKHNhY2stPnNhY2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhzYWNr
LT5zYWNrLm51bV9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSAwOworCQkJCW51bV9k
dXAgPSBudG9ocyhzYWNrLT5zYWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwo
c2Fjay0+c2Fjay5hX3J3bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfc2Fja19jaHVu
aykgKworCQkJCSAgICBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sp
ICsKKwkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJfdCkgIT0gY2hrX2xlbmd0aCkgewor
CQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJhZCBzaXplIG9mIFNBQ0sgY2h1bmtc
biIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2Zmc2V0X3NlZyA9ICpvZmZzZXQgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfc2Fja19jaHVuayk7CisJCQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcg
KyBudW1fc2VnICogc2l6ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOworCQkJfSBlbHNl
IHsKKwkJCQlzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICpucl9zYWNrOworCisJCQkJbnJfc2Fj
ayA9IChzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rICopY2g7CisJCQkJY3VtX2FjayA9IG50b2hs
KG5yX3NhY2stPm5yX3NhY2suY3VtX3Rzbl9hY2spOworCQkJCW51bV9zZWcgPSBudG9ocyhucl9z
YWNrLT5ucl9zYWNrLm51bV9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9ucl9zZWcgPSBudG9ocyhu
cl9zYWNrLT5ucl9zYWNrLm51bV9ucl9nYXBfYWNrX2Jsa3MpOworCQkJCW51bV9kdXAgPSBudG9o
cyhucl9zYWNrLT5ucl9zYWNrLm51bV9kdXBfdHNucyk7CisJCQkJYV9yd25kID0gbnRvaGwobnJf
c2Fjay0+bnJfc2Fjay5hX3J3bmQpOworCQkJCWlmIChzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fj
a19jaHVuaykgKworCQkJCSAgICAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6ZW9mKHN0cnVj
dCBzY3RwX2dhcF9hY2tfYmxvY2spICsKKwkJCQkgICAgbnVtX2R1cCAqIHNpemVvZih1aW50MzJf
dCkgIT0gY2hrX2xlbmd0aCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5EQVRBMSwgIkJh
ZCBzaXplIG9mIE5SX1NBQ0sgY2h1bmtcbiIpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJb2Zm
c2V0X3NlZyA9ICpvZmZzZXQgKyBzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVuayk7CisJ
CQkJb2Zmc2V0X2R1cCA9IG9mZnNldF9zZWcgKyAobnVtX3NlZyArIG51bV9ucl9zZWcpICogc2l6
ZW9mKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2spOworCQkJfQorCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX0lOUFVUMywgIiVzIHByb2Nlc3MgY3VtX2FjazoleCBudW1fc2VnOiVkIGFfcnduZDolZFxu
IiwKKwkJCQkoY2gtPmNodW5rX3R5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSA/ICJTQ1RQX1NB
Q0siIDogIlNDVFBfTlJfU0FDSyIsCisJCQkgICAgICAgIGN1bV9hY2ssIG51bV9zZWcsIGFfcndu
ZCk7CisJCQlzdGNiLT5hc29jLnNlZW5fYV9zYWNrX3RoaXNfcGt0ID0gMTsKKwkJCWlmICgoc3Rj
Yi0+YXNvYy5wcl9zY3RwX2NudCA9PSAwKSAmJgorCQkJICAgIChudW1fc2VnID09IDApICYmIChu
dW1fbnJfc2VnID09IDApICYmCisJCQkgICAgU0NUUF9UU05fR0UoY3VtX2Fjaywgc3RjYi0+YXNv
Yy5sYXN0X2Fja2VkX3NlcSkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zYXdfc2Fja193aXRoX2Zy
YWdzID09IDApICYmCisJCQkgICAgKHN0Y2ItPmFzb2Muc2F3X3NhY2tfd2l0aF9ucl9mcmFncyA9
PSAwKSAmJgorCQkJICAgICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpKSB7
CisJCQkJLyoKKwkJCQkgKiBXZSBoYXZlIGEgU0lNUExFIHNhY2sgaGF2aW5nIG5vCisJCQkJICog
cHJpb3Igc2VnbWVudHMgYW5kIGRhdGEgb24gc2VudAorCQkJCSAqIHF1ZXVlIHRvIGJlIGFja2Vk
LiBVc2UgdGhlCisJCQkJICogZmFzdGVyIHBhdGggc2FjayBwcm9jZXNzaW5nLiBXZQorCQkJCSAq
IGFsc28gYWxsb3cgd2luZG93IHVwZGF0ZSBzYWNrcworCQkJCSAqIHdpdGggbm8gbWlzc2luZyBz
ZWdtZW50cyB0byBnbworCQkJCSAqIHRoaXMgd2F5IHRvby4KKwkJCQkgKi8KKwkJCQlzY3RwX2V4
cHJlc3NfaGFuZGxlX3NhY2soc3RjYiwgY3VtX2FjaywgYV9yd25kLAorCQkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAmYWJvcnRfbm93LCBlY25lX3NlZW4pOworCQkJfSBlbHNlIHsKKwkJCQlp
ZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQkJCXNjdHBfaGFuZGxl
X3NhY2sobSwgb2Zmc2V0X3NlZywgb2Zmc2V0X2R1cCwgc3RjYiwKKwkJCQkJICAgICAgICAgICAg
ICAgICBudW1fc2VnLCBudW1fbnJfc2VnLCBudW1fZHVwLCAmYWJvcnRfbm93LCBmbGFncywKKwkJ
CQkJICAgICAgICAgICAgICAgICBjdW1fYWNrLCBhX3J3bmQsIGVjbmVfc2Vlbik7CisJCQkJfQor
CQkJfQorCQkJaWYgKGFib3J0X25vdykgeworCQkJCS8qIEFCT1JUIHNpZ25hbCBmcm9tIHNhY2sg
cHJvY2Vzc2luZyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsK
KwkJCX0KKwkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSAmJgorCQkJ
ICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkgICAgKHN0Y2It
PmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA9PSAwKSkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9TRU5ERVJfRFJZLCBzdGNiLCAgMCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJCX0KKwkJCWJyZWFrOworCQl9CisJCWNhc2UgU0NUUF9IRUFSVEJFQVRfUkVRVUVTVDoKKwkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0hFQVJUQkVBVFxuIik7CisJCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYgKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJ
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmhlYXJ0YmVhdCk7CisJCQkJc2N0cF9zZW5kX2hl
YXJ0YmVhdF9hY2soc3RjYiwgbSwgKm9mZnNldCwKKwkJCQkJCQljaGtfbGVuZ3RoLCAqbmV0cCk7
CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0hFQVJUQkVBVF9BQ0s6CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9IRUFSVEJFQVRfQUNLXG4iKTsKKwkJCWlmICgoc3Rj
YiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0
X2NodW5rKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3Ro
OworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2
aGVhcnRiZWF0YWNrKTsKKwkJCWlmICgobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0gTlVMTCkp
IHsKKwkJCQlzY3RwX2hhbmRsZV9oZWFydGJlYXRfYWNrKChzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRf
Y2h1bmsgKiljaCwKKwkJCQkJCQkgIHN0Y2IsICpuZXRwKTsKKwkJCX0KKwkJCWJyZWFrOworCQlj
YXNlIFNDVFBfQUJPUlRfQVNTT0NJQVRJT046CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQz
LCAiU0NUUF9BQk9SVCwgc3RjYiAlcFxuIiwKKwkJCQkodm9pZCAqKXN0Y2IpOworCQkJKm9mZnNl
dCA9IGxlbmd0aDsKKwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAo
Km5ldHAgIT0gTlVMTCkpIHsKKwkJCQlpZiAoc2N0cF9oYW5kbGVfYWJvcnQoKHN0cnVjdCBzY3Rw
X2Fib3J0X2NodW5rICopY2gsIHN0Y2IsICpuZXRwKSkgeworCQkJCQlyZXR1cm4gKE5VTEwpOwor
CQkJCX0gZWxzZSB7CisJCQkJCXJldHVybiAoc3RjYik7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJ
CQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9XTjoK
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1NIVVRET1dOLCBzdGNiICVwXG4i
LAorCQkJCSh2b2lkICopc3RjYik7CisJCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGNoa19sZW5n
dGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rKSkpIHsKKwkJCQkqb2Zmc2V0
ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVM
TCkgJiYgKCpuZXRwICE9IE5VTEwpKSB7CisJCQkJaW50IGFib3J0X2ZsYWcgPSAwOworCisJCQkJ
c2N0cF9oYW5kbGVfc2h1dGRvd24oKHN0cnVjdCBzY3RwX3NodXRkb3duX2NodW5rICopY2gsCisJ
CQkJCQkgICAgIHN0Y2IsICpuZXRwLCAmYWJvcnRfZmxhZyk7CisJCQkJaWYgKGFib3J0X2ZsYWcp
IHsKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJ
CQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NIVVRET1dOX0FDSzoKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19JTlBVVDMsICJTQ1RQX1NIVVRET1dOX0FDSywgc3RjYiAlcFxuIiwgKHZvaWQgKilz
dGNiKTsKKwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAg
IT0gTlVMTCkpIHsKKwkJCQlzY3RwX2hhbmRsZV9zaHV0ZG93bl9hY2soKHN0cnVjdCBzY3RwX3No
dXRkb3duX2Fja19jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7CisJCQl9CisJCQkqb2Zmc2V0ID0g
bGVuZ3RoOworCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfT1BFUkFU
SU9OX0VSUk9SOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfT1BfRVJSXG4i
KTsKKwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAgIT0g
TlVMTCkgJiYKKwkJCSAgICBzY3RwX2hhbmRsZV9lcnJvcihjaCwgc3RjYiwgKm5ldHAsIGNvbnRp
Z3VvdXMpIDwgMCkgeworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChOVUxMKTsK
KwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQ09PS0lFX0VDSE86CisJCQlTQ1RQREJHKFND
VFBfREVCVUdfSU5QVVQzLAorCQkJCSJTQ1RQX0NPT0tJRV9FQ0hPLCBzdGNiICVwXG4iLCAodm9p
ZCAqKXN0Y2IpOworCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNiLT5hc29jLnRvdGFsX291
dHB1dF9xdWV1ZV9zaXplID4gMCkpIHsKKwkJCQk7CisJCQl9IGVsc2UgeworCQkJCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCQkvKiBXZSBh
cmUgbm90IGludGVyZXN0ZWQgYW55bW9yZSAqLworCQkJCWFiZW5kOgorCQkJCQlpZiAoc3RjYiAh
PSBOVUxMKSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0KKwkJCQkJKm9m
ZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQkvKi0K
KwkJCSAqIEZpcnN0IGFyZSB3ZSBhY2NlcHRpbmc/IFdlIGRvIHRoaXMgYWdhaW4gaGVyZQorCQkJ
ICogc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIHByZXZpb3VzIGVuZHBvaW50IFdBUworCQkJ
ICogbGlzdGVuaW5nIHJlc3BvbmRlZCB0byBhIElOSVQtQUNLIGFuZCB0aGVuCisJCQkgKiBjbG9z
ZWQuIFdlIG9wZW5lZCBhbmQgYm91bmQuLiBhbmQgYXJlIG5vdyBubworCQkJICogbG9uZ2VyIGxp
c3RlbmluZy4KKwkJCSAqCisJCQkgKiBYWFhHTDogbm90ZXMgb24gY2hlY2tpbmcgbGlzdGVuIHF1
ZXVlIGxlbmd0aC4KKwkJCSAqIDEpIFNDVFBfSVNfTElTVEVOSU5HKCkgZG9lc24ndCBuZWNlc3Nh
cmlseSBtZWFuCisJCQkgKiAgICBTT0xJU1RFTklORygpLCBiZWNhdXNlIGEgbGlzdGVuaW5nICJV
RFAgdHlwZSIKKwkJCSAqICAgIHNvY2tldCBpc24ndCBsaXN0ZW5pbmcgaW4gdGVybXMgb2YgdGhl
IHNvY2tldAorCQkJICogICAgbGF5ZXIuICBJdCBpcyBhIG5vcm1hbCBkYXRhIGZsb3cgc29ja2V0
LCB0aGF0CisJCQkgKiAgICBjYW4gZm9yayBvZmYgbmV3IGNvbm5lY3Rpb25zLiAgVGh1cywgd2Ug
c2hvdWxkCisJCQkgKiAgICBsb29rIGludG8gc29sX3FsZW4gb25seSBpbiBjYXNlIHdlIGFyZSAh
VURQLgorCQkJICogMikgQ2hlY2tpbmcgc29sX3FsZW4gaW4gZ2VuZXJhbCByZXF1aXJlcyBsb2Nr
aW5nCisJCQkgKiAgICB0aGUgc29ja2V0LCBhbmQgdGhpcyBjb2RlIGxhY2tzIHRoYXQuCisJCQkg
Ki8KKwkJCWlmICgoc3RjYiA9PSBOVUxMKSAmJgorCQkJICAgICghU0NUUF9JU19MSVNURU5JTkco
aW5wKSB8fAorCQkJICAgICAoIShpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBU
WVBFKSAmJgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDEyMDAwMzQKKwkJCSAgICAgIGlucC0+c2N0cF9zb2NrZXQtPnNvbF9xbGVuID49IGlucC0+c2N0
cF9zb2NrZXQtPnNvbF9xbGltaXQpKSkgeworI2Vsc2UKKwkJCSAgICAgIGlucC0+c2N0cF9zb2Nr
ZXQtPnNvX3FsZW4gPj0gaW5wLT5zY3RwX3NvY2tldC0+c29fcWxpbWl0KSkpIHsKKyNlbmRpZgor
CQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkJ
CQkgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1p
dCkpKSB7CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9DQVVTRV9PVVRf
T0ZfUkVTQywgIiIpOworCQkJCQlzY3RwX2Fib3J0X2Fzc29jaWF0aW9uKGlucCwgc3RjYiwgbSwg
aXBobGVuLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgIHNyYywgZHN0LCBzaCwgb3BfZXJy
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
bWZsb3d0eXBlLCBtZmxvd2lkLAorI2VuZGlmCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
dnJmX2lkLCBwb3J0KTsKKwkJCQl9CisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4g
KE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1Y3QgbWJ1ZiAqcmV0X2J1ZjsKKwkJCQlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqbGlucDsKKwkJCQlpZiAoc3RjYikgeworCQkJCQlsaW5wID0gTlVMTDsK
KwkJCQl9IGVsc2UgeworCQkJCQlsaW5wID0gaW5wOworCQkJCX0KKworCQkJCWlmIChsaW5wICE9
IE5VTEwpIHsKKwkJCQkJU0NUUF9BU09DX0NSRUFURV9MT0NLKGxpbnApOworCQkJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCQkJCQkgICAg
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgeworCQkJ
CQkJU0NUUF9BU09DX0NSRUFURV9VTkxPQ0sobGlucCk7CisJCQkJCQlnb3RvIGFiZW5kOworCQkJ
CQl9CisJCQkJfQorCisJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQlzdHJ1Y3Qgc2N0cF90
Y2IgKmxvY2tlZF9zdGNiOworCisJCQkJCWxvY2tlZF9zdGNiID0gc3RjYjsKKwkJCQkJcmV0X2J1
ZiA9CisJCQkJCQlzY3RwX2hhbmRsZV9jb29raWVfZWNobyhtLCBpcGhsZW4sCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAqb2Zmc2V0LAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAg
ICAgc3JjLCBkc3QsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBzaCwKKwkJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0cF9jb29raWVfZWNob19jaHVuayAqKWNo
LAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJmlucCwgJnN0Y2IsIG5ldHAsCisJCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICBhdXRoX3NraXBwZWQsCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICBhdXRoX29mZnNldCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAg
IGF1dGhfbGVuLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgJmxvY2tlZF9zdGNiLAor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBt
Zmxvd3R5cGUsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd2lkLAorI2VuZGlm
CisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsCisJCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgICBwb3J0KTsKKwkJCQkJaWYgKChsb2NrZWRfc3RjYiAhPSBOVUxMKSAmJiAo
bG9ja2VkX3N0Y2IgIT0gc3RjYikpIHsKKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhsb2NrZWRfc3Rj
Yik7CisJCQkJCX0KKwkJCQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCQkJU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlyZXRfYnVmID0gTlVM
TDsKKwkJCQl9CisJCQkJaWYgKGxpbnAgIT0gTlVMTCkgeworCQkJCQlTQ1RQX0FTT0NfQ1JFQVRF
X1VOTE9DSyhsaW5wKTsKKwkJCQl9CisJCQkJaWYgKHJldF9idWYgPT0gTlVMTCkgeworCQkJCQlp
ZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCX0K
KwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywKKwkJCQkJCSJHQUssIG51bGwgYnVmZmVy
XG4iKTsKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9
CisJCQkJLyogaWYgQVVUSCBza2lwcGVkLCBzZWUgaWYgaXQgdmVyaWZpZWQuLi4gKi8KKwkJCQlp
ZiAoYXV0aF9za2lwcGVkKSB7CisJCQkJCWdvdF9hdXRoID0gMTsKKwkJCQkJYXV0aF9za2lwcGVk
ID0gMDsKKwkJCQl9CisJCQkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW50X3F1ZXVl
KSkgeworCQkJCQkvKgorCQkJCQkgKiBSZXN0YXJ0IHRoZSB0aW1lciBpZiB3ZSBoYXZlCisJCQkJ
CSAqIHBlbmRpbmcgZGF0YQorCQkJCQkgKi8KKwkJCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAq
Y2hrOworCisJCQkJCWNoayA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLnNlbnRfcXVldWUpOwor
CQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TRU5ELCBzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBjaGstPndob1RvKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQ
X0NPT0tJRV9BQ0s6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9DT09LSUVf
QUNLLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOworCQkJaWYgKChzdGNiID09IE5VTEwpIHx8
IGNoa19sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Nvb2tpZV9hY2tfY2h1bmspKSB7CisJ
CQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCS8qIFdlIGFyZSBub3QgaW50ZXJlc3RlZCBhbnlt
b3JlICovCisJCQkJaWYgKChzdGNiKSAmJiAoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVf
c2l6ZSkpIHsKKwkJCQkJOworCQkJCX0gZWxzZSBpZiAoc3RjYikgeworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJCQlzbyA9IFNDVFBf
SU5QX1NPKGlucCk7CisJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywg
MSk7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQo
JnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKyNlbmRpZgorCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNz
b2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9GUk9NX1NDVFBfSU5QVVQgKyBTQ1RQX0xPQ18zMCk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJCVNDVFBfU09DS0VU
X1VOTE9DSyhzbywgMSk7CisjZW5kaWYKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0
dXJuIChOVUxMKTsKKwkJCQl9CisJCQl9CisJCQlpZiAoKG5ldHAgIT0gTlVMTCkgJiYgKCpuZXRw
ICE9IE5VTEwpKSB7CisJCQkJc2N0cF9oYW5kbGVfY29va2llX2Fjaygoc3RydWN0IHNjdHBfY29v
a2llX2Fja19jaHVuayAqKWNoLCBzdGNiLCAqbmV0cCk7CisJCQl9CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX0VDTl9FQ0hPOgorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfRUNO
X0VDSE9cbiIpOworCQkJaWYgKChzdGNiID09IE5VTEwpIHx8IChjaGtfbGVuZ3RoICE9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8KKwkJ
CQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoc3Rj
Yi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25fY2h1bms7CisJ
CQl9CisJCQlzY3RwX2hhbmRsZV9lY25fZWNobygoc3RydWN0IHNjdHBfZWNuZV9jaHVuayAqKWNo
LCBzdGNiKTsKKwkJCWVjbmVfc2VlbiA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0VDTl9D
V1I6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9FQ05fQ1dSXG4iKTsKKwkJ
CWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoY2hrX2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNjdHBf
Y3dyX2NodW5rKSkpIHsKKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3RjYik7
CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID09IDApIHsKKwkJCQlnb3Rv
IHVua25vd25fY2h1bms7CisJCQl9CisJCQlzY3RwX2hhbmRsZV9lY25fY3dyKChzdHJ1Y3Qgc2N0
cF9jd3JfY2h1bmsgKiljaCwgc3RjYiwgKm5ldHApOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9T
SFVURE9XTl9DT01QTEVURToKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1NI
VVRET1dOX0NPTVBMRVRFLCBzdGNiICVwXG4iLCAodm9pZCAqKXN0Y2IpOworCQkJLyogbXVzdCBi
ZSBmaXJzdCBhbmQgb25seSBjaHVuayAqLworCQkJaWYgKChudW1fY2h1bmtzID4gMSkgfHwKKwkJ
CSAgICAobGVuZ3RoIC0gKm9mZnNldCA+IChpbnQpU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCkpKSB7
CisJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQlyZXR1cm4gKHN0Y2IpOworCQkJfQorCQkJaWYg
KChzdGNiICE9IE5VTEwpICYmIChuZXRwICE9IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgewor
CQkJCXNjdHBfaGFuZGxlX3NodXRkb3duX2NvbXBsZXRlKChzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9j
b21wbGV0ZV9jaHVuayAqKWNoLAorCQkJCQkJCSAgICAgIHN0Y2IsICpuZXRwKTsKKwkJCX0KKwkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQlyZXR1cm4gKE5VTEwpOworCQkJYnJlYWs7CisJCWNhc2Ug
U0NUUF9BU0NPTkY6CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiU0NUUF9BU0NPTkZc
biIpOworCQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9z
dXBwb3J0ZWQgPT0gMCkgeworCQkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQkJfQorCQkJCXNj
dHBfaGFuZGxlX2FzY29uZihtLCAqb2Zmc2V0LCBzcmMsCisJCQkJCQkgICAoc3RydWN0IHNjdHBf
YXNjb25mX2NodW5rICopY2gsIHN0Y2IsIGFzY29uZl9jbnQgPT0gMCk7CisJCQkJYXNjb25mX2Nu
dCsrOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BU0NPTkZfQUNLOgorCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX0lOUFVUMywgIlNDVFBfQVNDT05GX0FDS1xuIik7CisJCQlpZiAoY2hrX2xl
bmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNrX2NodW5rKSkgeworCQkJCS8qIEl0
cyBub3Qgb3VycyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsK
KwkJCX0KKwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxMKSAmJiAoKm5ldHAg
IT0gTlVMTCkpIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDApIHsK
KwkJCQkJZ290byB1bmtub3duX2NodW5rOworCQkJCX0KKwkJCQkvKiBIZSdzIGFsaXZlIHNvIGdp
dmUgaGltIGNyZWRpdCAqLworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCQkJCXNjdHBfbWlzY19pbnRzKFND
VFBfVEhSRVNIT0xEX0NMRUFSLAorCQkJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJv
cl9jb3VudCwKKwkJCQkJCSAgICAgICAwLAorCQkJCQkJICAgICAgIFNDVFBfRlJPTV9TQ1RQX0lO
UFVULAorCQkJCQkJICAgICAgIF9fTElORV9fKTsKKwkJCQl9CisJCQkJc3RjYi0+YXNvYy5vdmVy
YWxsX2Vycm9yX2NvdW50ID0gMDsKKwkJCQlzY3RwX2hhbmRsZV9hc2NvbmZfYWNrKG0sICpvZmZz
ZXQsCisJCQkJCQkgICAgICAgKHN0cnVjdCBzY3RwX2FzY29uZl9hY2tfY2h1bmsgKiljaCwgc3Rj
YiwgKm5ldHAsICZhYm9ydF9ub191bmxvY2spOworCQkJCWlmIChhYm9ydF9ub191bmxvY2spCisJ
CQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0ZPUldBUkRf
Q1VNX1RTTjoKKwkJY2FzZSBTQ1RQX0lGT1JXQVJEX0NVTV9UU046CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQzLCAiU0NUUF9GV0RfVFNOXG4iKTsKKwkJCWlmIChjaGtfbGVuZ3RoIDwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSkgeworCQkJCS8qIEl0cyBub3Qgb3Vy
cyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwor
CQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCWludCBhYm9ydF9mbGFnID0gMDsKKworCQkJCWlm
IChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlnb3RvIHVua25vd25f
Y2h1bms7CisJCQkJfQorCQkJCSpmd2RfdHNuX3NlZW4gPSAxOworCQkJCWlmIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJCQkvKiBXZSBhcmUgbm90
IGludGVyZXN0ZWQgYW55bW9yZSAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJCQlzbyA9IFNDVFBfSU5QX1NPKGlucCk7CisJCQkJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKKyNlbmRpZgorCQkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQ
X05PUk1BTF9QUk9DLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
SU5QVVQgKyBTQ1RQX0xPQ18zMSk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7Cisj
ZW5kaWYKKwkJCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQl9
CisJCQkJLyoKKwkJCQkgKiBGb3Igc2VuZGluZyBhIFNBQ0sgdGhpcyBsb29rcyBsaWtlIERBVEEK
KwkJCQkgKiBjaHVua3MuCisJCQkJICovCisJCQkJc3RjYi0+YXNvYy5sYXN0X2RhdGFfY2h1bmtf
ZnJvbSA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207CisJCQkJc2N0cF9oYW5k
bGVfZm9yd2FyZF90c24oc3RjYiwKKwkJCQkJCQkoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1
bmsgKiljaCwgJmFib3J0X2ZsYWcsIG0sICpvZmZzZXQpOworCQkJCWlmIChhYm9ydF9mbGFnKSB7
CisJCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJ
fQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVFJFQU1fUkVTRVQ6CisJCQlTQ1RQREJHKFNDVFBf
REVCVUdfSU5QVVQzLCAiU0NUUF9TVFJFQU1fUkVTRVRcbiIpOworCQkJaWYgKCgoc3RjYiA9PSBO
VUxMKSB8fCAoY2ggPT0gTlVMTCkgfHwgKGNoa19sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNjdHBf
c3RyZWFtX3Jlc2V0X3Rzbl9yZXEpKSkpIHsKKwkJCQkvKiBJdHMgbm90IG91cnMgKi8KKwkJCQkq
b2Zmc2V0ID0gbGVuZ3RoOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQlpZiAoc3RjYi0+
YXNvYy5yZWNvbmZpZ19zdXBwb3J0ZWQgPT0gMCkgeworCQkJCWdvdG8gdW5rbm93bl9jaHVuazsK
KwkJCX0KKwkJCWlmIChzY3RwX2hhbmRsZV9zdHJlYW1fcmVzZXQoc3RjYiwgbSwgKm9mZnNldCwg
Y2gpKSB7CisJCQkJLyogc3RvcCBwcm9jZXNzaW5nICovCisJCQkJKm9mZnNldCA9IGxlbmd0aDsK
KwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQUNLRVRf
RFJPUFBFRDoKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX1BBQ0tFVF9EUk9Q
UEVEXG4iKTsKKwkJCS8qIHJlLWdldCBpdCBhbGwgcGxlYXNlICovCisJCQlpZiAoY2hrX2xlbmd0
aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rKSkgeworCQkJCS8qIEl0cyBub3Qg
b3VycyAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0K
KworCQkJaWYgKChjaCAhPSBOVUxMKSAmJiAoc3RjYiAhPSBOVUxMKSAmJiAobmV0cCAhPSBOVUxM
KSAmJiAoKm5ldHAgIT0gTlVMTCkpIHsKKwkJCQlpZiAoc3RjYi0+YXNvYy5wa3Rkcm9wX3N1cHBv
cnRlZCA9PSAwKSB7CisJCQkJCWdvdG8gdW5rbm93bl9jaHVuazsKKwkJCQl9CisJCQkJc2N0cF9o
YW5kbGVfcGFja2V0X2Ryb3BwZWQoKHN0cnVjdCBzY3RwX3BrdGRyb3BfY2h1bmsgKiljaCwKKwkJ
CQkJCQkgICBzdGNiLCAqbmV0cCwKKwkJCQkJCQkgICBtaW4oY2hrX2xlbmd0aCwgY29udGlndW91
cykpOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTjoKKwkJCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDMsICJTQ1RQX0FVVEhFTlRJQ0FUSU9OXG4iKTsKKwkJCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJCQkvKiBzYXZlIHRoZSBmaXJzdCBBVVRIIGZvciBsYXRlciBw
cm9jZXNzaW5nICovCisJCQkJaWYgKGF1dGhfc2tpcHBlZCA9PSAwKSB7CisJCQkJCWF1dGhfb2Zm
c2V0ID0gKm9mZnNldDsKKwkJCQkJYXV0aF9sZW4gPSBjaGtfbGVuZ3RoOworCQkJCQlhdXRoX3Nr
aXBwZWQgPSAxOworCQkJCX0KKwkJCQkvKiBza2lwIHRoaXMgY2h1bmsgKHRlbXBvcmFyaWx5KSAq
LworCQkJCWdvdG8gbmV4dF9jaHVuazsKKwkJCX0KKwkJCWlmIChzdGNiLT5hc29jLmF1dGhfc3Vw
cG9ydGVkID09IDApIHsKKwkJCQlnb3RvIHVua25vd25fY2h1bms7CisJCQl9CisJCQlpZiAoKGNo
a19sZW5ndGggPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmspKSkgfHwKKwkJCSAgICAo
Y2hrX2xlbmd0aCA+IChzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVuaykgKworCQkJCQkgICBT
Q1RQX0FVVEhfRElHRVNUX0xFTl9NQVgpKSkgeworCQkJCS8qIEl0cyBub3Qgb3VycyAqLworCQkJ
CSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChzdGNiKTsKKwkJCX0KKwkJCWlmIChnb3Rf
YXV0aCA9PSAxKSB7CisJCQkJLyogc2tpcCB0aGlzIGNodW5rLi4uIGl0J3MgYWxyZWFkeSBhdXRo
J2QgKi8KKwkJCQlnb3RvIG5leHRfY2h1bms7CisJCQl9CisJCQlnb3RfYXV0aCA9IDE7CisJCQlp
ZiAoKGNoID09IE5VTEwpIHx8IHNjdHBfaGFuZGxlX2F1dGgoc3RjYiwgKHN0cnVjdCBzY3RwX2F1
dGhfY2h1bmsgKiljaCwKKwkJCQkJCQkgICAgIG0sICpvZmZzZXQpKSB7CisJCQkJLyogYXV0aCBI
TUFDIGZhaWxlZCBzbyBkdW1wIHRoZSBwYWNrZXQgKi8KKwkJCQkqb2Zmc2V0ID0gbGVuZ3RoOwor
CQkJCXJldHVybiAoc3RjYik7CisJCQl9IGVsc2UgeworCQkJCS8qIHJlbWFpbmluZyBjaHVua3Mg
YXJlIEhNQUMgY2hlY2tlZCAqLworCQkJCXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCA9IDE7CisJ
CQl9CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQl1bmtub3duX2NodW5rOgorCQkJLyogaXQn
cyBhbiB1bmtub3duIGNodW5rISAqLworCQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAmIDB4NDApICYm
IChzdGNiICE9IE5VTEwpKSB7CisJCQkJc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICpjYXVz
ZTsKKwkJCQlpbnQgbGVuOworCisJCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNp
emVvZihzdHJ1Y3Qgc2N0cF9nZW5fZXJyb3JfY2F1c2UpLAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCQkJaWYgKG9wX2VyciAh
PSBOVUxMKSB7CisJCQkJCWxlbiA9IG1pbihTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKSwgKHVpbnQz
Ml90KShsZW5ndGggLSAqb2Zmc2V0KSk7CisJCQkJCWNhdXNlID0gbXRvZChvcF9lcnIsIHN0cnVj
dCBzY3RwX2dlbl9lcnJvcl9jYXVzZSAqKTsKKwkJCQkJY2F1c2UtPmNvZGUgPSAgaHRvbnMoU0NU
UF9DQVVTRV9VTlJFQ09HX0NIVU5LKTsKKwkJCQkJY2F1c2UtPmxlbmd0aCA9IGh0b25zKCh1aW50
MTZfdCkobGVuICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2dlbl9lcnJvcl9jYXVzZSkpKTsKKwkJCQkJ
U0NUUF9CVUZfTEVOKG9wX2VycikgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2VuX2Vycm9yX2NhdXNl
KTsKKwkJCQkJU0NUUF9CVUZfTkVYVChvcF9lcnIpID0gU0NUUF9NX0NPUFlNKG0sICpvZmZzZXQs
IGxlbiwgTV9OT1dBSVQpOworCQkJCQlpZiAoU0NUUF9CVUZfTkVYVChvcF9lcnIpICE9IE5VTEwp
IHsKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORworCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJ
CXNjdHBfbG9nX21iYyhTQ1RQX0JVRl9ORVhUKG9wX2VyciksIFNDVFBfTUJVRl9JQ09QWSk7CisJ
CQkJCQl9CisjZW5kaWYKKwkJCQkJCXNjdHBfcXVldWVfb3BfZXJyKHN0Y2IsIG9wX2Vycik7CisJ
CQkJCX0gZWxzZSB7CisJCQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsKKwkJCQkJfQorCQkJCX0K
KwkJCX0KKwkJCWlmICgoY2gtPmNodW5rX3R5cGUgJiAweDgwKSA9PSAwKSB7CisJCQkJLyogZGlz
Y2FyZCB0aGlzIHBhY2tldCAqLworCQkJCSpvZmZzZXQgPSBsZW5ndGg7CisJCQkJcmV0dXJuIChz
dGNiKTsKKwkJCX0JLyogZWxzZSBza2lwIHRoaXMgYmFkIGNodW5rIGFuZCBjb250aW51ZS4uLiAq
LworCQkJYnJlYWs7CisJCX0JCS8qIHN3aXRjaCAoY2gtPmNodW5rX3R5cGUpICovCisKKworCW5l
eHRfY2h1bms6CisJCS8qIGdldCB0aGUgbmV4dCBjaHVuayAqLworCQkqb2Zmc2V0ICs9IFNDVFBf
U0laRTMyKGNoa19sZW5ndGgpOworCQlpZiAoKm9mZnNldCA+PSBsZW5ndGgpIHsKKwkJCS8qIG5v
IG1vcmUgZGF0YSBsZWZ0IGluIHRoZSBtYnVmIGNoYWluICovCisJCQlicmVhazsKKwkJfQorCQlj
aCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgKm9mZnNldCwKKwkJ
CQkJCQkgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCBjaHVua19idWYpOworCQlpZiAo
Y2ggPT0gTlVMTCkgeworCQkJKm9mZnNldCA9IGxlbmd0aDsKKwkJCXJldHVybiAoc3RjYik7CisJ
CX0KKwl9CQkJLyogd2hpbGUgKi8KKworCWlmICgoYXNjb25mX2NudCA+IDApICYmIChzdGNiICE9
IE5VTEwpKSB7CisJCXNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0Y2IpOworCX0KKwlyZXR1cm4gKHN0
Y2IpOworfQorCisKKy8qCisgKiBjb21tb24gaW5wdXQgY2h1bmsgcHJvY2Vzc2luZyAodjQgYW5k
IHY2KQorICovCit2b2lkCitzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKHN0cnVjdCBtYnVm
ICoqbW0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsIGludCBsZW5ndGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRz
dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqY2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4
X3QgY29tcHV0ZV9jcmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgZWNu
X2JpdHMsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90IGZpYm51
bSwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQs
IHVpbnQxNl90IHBvcnQpCit7CisJdWludDMyX3QgaGlnaF90c247CisJaW50IGZ3ZF90c25fc2Vl
biA9IDAsIGRhdGFfcHJvY2Vzc2VkID0gMDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9ICptbSwgKm9wX2Vy
cjsKKwljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCWludCB1bl9zZW50OworCWludCBj
bnRfY3RybF9yZWFkeSA9IDA7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9IE5VTEwsICppbnBf
ZGVjciA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQgPSBOVUxMOworCisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmRhdGFncmFt
cyk7CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJc2N0cF9hdWRpdF9sb2coMHhFMCwg
MSk7CisJc2N0cF9hdWRpdGluZygwLCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwlpZiAoY29t
cHV0ZV9jcmMgIT0gMCkgeworCQl1aW50MzJfdCBjaGVjaywgY2FsY19jaGVjazsKKworCQljaGVj
ayA9IHNoLT5jaGVja3N1bTsKKwkJc2gtPmNoZWNrc3VtID0gMDsKKwkJY2FsY19jaGVjayA9IHNj
dHBfY2FsY3VsYXRlX2Nrc3VtKG0sIGlwaGxlbik7CisJCXNoLT5jaGVja3N1bSA9IGNoZWNrOwor
CQlpZiAoY2FsY19jaGVjayAhPSBjaGVjaykgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0lOUFVU
MSwgIkJhZCBDU1VNIG9uIFNDVFAgcGFja2V0IGNhbGNfY2hlY2s6JXggY2hlY2s6JXggIG06JXAg
bWxlbjolZCBpcGhsZW46JWRcbiIsCisJCQkgICAgICAgIGNhbGNfY2hlY2ssIGNoZWNrLCAodm9p
ZCAqKW0sIGxlbmd0aCwgaXBobGVuKTsKKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9h
ZGRyKG0sIG9mZnNldCwgc3JjLCBkc3QsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzaCwgY2gsICZpbnAsICZuZXQsIHZyZl9pZCk7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBk
ZWZpbmVkKElORVQ2KQorCQkJaWYgKChjaC0+Y2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04p
ICYmCisJCQkgICAgKG5ldCAhPSBOVUxMKSAmJiAobmV0LT5wb3J0ICE9IHBvcnQpKSB7CisJCQkJ
aWYgKG5ldC0+cG9ydCA9PSAwKSB7CisJCQkJCS8qIFVEUCBlbmNhcHN1bGF0aW9uIHR1cm5lZCBv
bi4gKi8KKwkJCQkJbmV0LT5tdHUgLT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCQlpZiAo
c3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBuZXQtPm10dSkgeworCQkJCQkJc2N0cF9wYXRobXR1
X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5tdHUpOworCQkJCQl9CisJCQkJfSBlbHNlIGlmIChwb3J0
ID09IDApIHsKKwkJCQkJLyogVURQIGVuY2Fwc3VsYXRpb24gdHVybmVkIG9mZi4gKi8KKwkJCQkJ
bmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQkJCQkvKiBYWFggVXBkYXRlIHNt
YWxsZXN0X210dSAqLworCQkJCX0KKwkJCQluZXQtPnBvcnQgPSBwb3J0OworCQkJfQorI2VuZGlm
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJCW5l
dC0+Zmxvd3R5cGUgPSBtZmxvd3R5cGU7CisJCQkJbmV0LT5mbG93aWQgPSBtZmxvd2lkOworCQkJ
fQorI2VuZGlmCisJCQlpZiAoKGlucCAhPSBOVUxMKSAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQkJ
CXNjdHBfc2VuZF9wYWNrZXRfZHJvcHBlZChzdGNiLCBuZXQsIG0sIGxlbmd0aCwgaXBobGVuLCAx
KTsKKwkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fSU5Q
VVRfRVJST1IsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQl9IGVsc2UgaWYgKChpbnAgIT0gTlVM
TCkgJiYgKHN0Y2IgPT0gTlVMTCkpIHsKKwkJCQlpbnBfZGVjciA9IGlucDsKKwkJCX0KKwkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX2JhZHN1bSk7CisJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIo
c2N0cHNfY2hlY2tzdW1lcnJvcnMpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisJLyogRGVzdGlu
YXRpb24gcG9ydCBvZiAwIGlzIGlsbGVnYWwsIGJhc2VkIG9uIFJGQzQ5NjAuICovCisJaWYgKHNo
LT5kZXN0X3BvcnQgPT0gMCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQln
b3RvIG91dDsKKwl9CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHIobSwgb2Zmc2V0
LCBzcmMsIGRzdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaCwgY2gsICZp
bnAsICZuZXQsIHZyZl9pZCk7CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQor
CWlmICgoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSAmJgorCSAgICAobmV0ICE9
IE5VTEwpICYmIChuZXQtPnBvcnQgIT0gcG9ydCkpIHsKKwkJaWYgKG5ldC0+cG9ydCA9PSAwKSB7
CisJCQkvKiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb24uICovCisJCQluZXQtPm10dSAtPSBz
aXplb2Yoc3RydWN0IHVkcGhkcik7CisJCQlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUgPiBu
ZXQtPm10dSkgeworCQkJCXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsK
KwkJCX0KKwkJfSBlbHNlIGlmIChwb3J0ID09IDApIHsKKwkJCS8qIFVEUCBlbmNhcHN1bGF0aW9u
IHR1cm5lZCBvZmYuICovCisJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJ
CQkvKiBYWFggVXBkYXRlIHNtYWxsZXN0X210dSAqLworCQl9CisJCW5ldC0+cG9ydCA9IHBvcnQ7
CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAobmV0ICE9IE5VTEwp
IHsKKwkJbmV0LT5mbG93dHlwZSA9IG1mbG93dHlwZTsKKwkJbmV0LT5mbG93aWQgPSBtZmxvd2lk
OworCX0KKyNlbmRpZgorCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19ub3BvcnQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoKF9fRnJlZUJTRF92ZXJz
aW9uIDwgOTAwMDAwKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gODA0MDAwKSkgfHwgKF9fRnJl
ZUJTRF92ZXJzaW9uID4gOTAwMDAwKSkKKwkJaWYgKGJhZHBvcnRfYmFuZGxpbShCQU5ETElNX1ND
VFBfT09UQikgPCAwKSB7CisJCQlnb3RvIG91dDsKKwkJfQorI2VuZGlmCisJCWlmIChjaC0+Y2h1
bmtfdHlwZSA9PSBTQ1RQX1NIVVRET1dOX0FDSykgeworCQkJc2N0cF9zZW5kX3NodXRkb3duX2Nv
bXBsZXRlMihzcmMsIGRzdCwgc2gsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5k
aWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCWdv
dG8gb3V0OworCQl9CisJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX1NIVVRET1dOX0NPTVBM
RVRFKSB7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoY2gtPmNodW5rX3R5cGUgIT0gU0NUUF9B
Qk9SVF9BU1NPQ0lBVElPTikgeworCQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2to
b2xlKSA9PSAwKSB8fAorCQkJICAgICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSkg
PT0gMSkgJiYKKwkJCSAgICAgKGNoLT5jaHVua190eXBlICE9IFNDVFBfSU5JVCkpKSB7CisJCQkJ
b3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19p
bmZvX2NvZGUpLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk91dCBvZiB0aGUg
Ymx1ZSIpOworCQkJCXNjdHBfc2VuZF9hYm9ydChtLCBpcGhsZW4sIHNyYywgZHN0LAorCQkJCSAg
ICAgICAgICAgICAgICBzaCwgMCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJ
CQkJICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJ
CQkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCQl9CisJCX0KKwkJZ290byBvdXQ7
CisJfSBlbHNlIGlmIChzdGNiID09IE5VTEwpIHsKKwkJaW5wX2RlY3IgPSBpbnA7CisJfQorCVND
VFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsICJPaywgQ29tbW9uIGlucHV0IHByb2Nlc3NpbmcgY2Fs
bGVkLCBtOiVwIGlwaGxlbjolZCBvZmZzZXQ6JWQgbGVuZ3RoOiVkIHN0Y2I6JXBcbiIsCisJCSh2
b2lkICopbSwgaXBobGVuLCBvZmZzZXQsIGxlbmd0aCwgKHZvaWQgKilzdGNiKTsKKwlpZiAoc3Rj
YikgeworCQkvKiBhbHdheXMgY2xlYXIgdGhpcyBiZWZvcmUgYmVnaW5uaW5nIGEgcGFja2V0ICov
CisJCXN0Y2ItPmFzb2MuYXV0aGVudGljYXRlZCA9IDA7CisJCXN0Y2ItPmFzb2Muc2Vlbl9hX3Nh
Y2tfdGhpc19wa3QgPSAwOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQxLCAic3RjYjolcCBz
dGF0ZToleFxuIiwKKwkJCSh2b2lkICopc3RjYiwgc3RjYi0+YXNvYy5zdGF0ZSk7CisKKwkJaWYg
KChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgfHwKKwkJICAgIChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkpIHsKKwkJCS8q
LQorCQkJICogSWYgd2UgaGl0IGhlcmUsIHdlIGhhZCBhIHJlZiBjb3VudAorCQkJICogdXAgd2hl
biB0aGUgYXNzb2Mgd2FzIGFib3J0ZWQgYW5kIHRoZQorCQkJICogdGltZXIgaXMgY2xlYXJpbmcg
b3V0IHRoZSBhc3NvYywgd2Ugc2hvdWxkCisJCQkgKiBOT1QgcmVzcG9uZCB0byBhbnkgcGFja2V0
Li4gaXRzIE9PVEIuCisJCQkgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXN0Y2Ig
PSBOVUxMOworCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVz
IiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7CisJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlw
aGxlbiwgb2Zmc2V0LCBzcmMsIGRzdCwgc2gsIGlucCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5m
aWJudW0sCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCWdv
dG8gb3V0OworCQl9CisKKwl9CisJaWYgKElTX1NDVFBfQ09OVFJPTChjaCkpIHsKKwkJLyogcHJv
Y2VzcyB0aGUgY29udHJvbCBwb3J0aW9uIG9mIHRoZSBTQ1RQIHBhY2tldCAqLworCQkvKiBzYV9p
Z25vcmUgTk9fTlVMTF9DSEsgKi8KKwkJc3RjYiA9IHNjdHBfcHJvY2Vzc19jb250cm9sKG0sIGlw
aGxlbiwgJm9mZnNldCwgbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Jj
LCBkc3QsIHNoLCBjaCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucCwgc3RjYiwg
Jm5ldCwgJmZ3ZF90c25fc2VlbiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJCWlmIChzdGNi
KSB7CisJCQkvKiBUaGlzIGNvdmVycyB1cyBpZiB0aGUgY29va2llLWVjaG8gd2FzIHRoZXJlCisJ
CQkgKiBhbmQgaXQgY2hhbmdlcyBvdXIgSU5QLgorCQkJICovCisJCQlpbnAgPSBzdGNiLT5zY3Rw
X2VwOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwkJCWlmICgoY2gtPmNo
dW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9OKSAmJgorCQkJICAgIChuZXQgIT0gTlVMTCkgJiYg
KG5ldC0+cG9ydCAhPSBwb3J0KSkgeworCQkJCWlmIChuZXQtPnBvcnQgPT0gMCkgeworCQkJCQkv
KiBVRFAgZW5jYXBzdWxhdGlvbiB0dXJuZWQgb24uICovCisJCQkJCW5ldC0+bXR1IC09IHNpemVv
ZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV0
LT5tdHUpIHsKKwkJCQkJCXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5ldC0+bXR1KTsK
KwkJCQkJfQorCQkJCX0gZWxzZSBpZiAocG9ydCA9PSAwKSB7CisJCQkJCS8qIFVEUCBlbmNhcHN1
bGF0aW9uIHR1cm5lZCBvZmYuICovCisJCQkJCW5ldC0+bXR1ICs9IHNpemVvZihzdHJ1Y3QgdWRw
aGRyKTsKKwkJCQkJLyogWFhYIFVwZGF0ZSBzbWFsbGVzdF9tdHUgKi8KKwkJCQl9CisJCQkJbmV0
LT5wb3J0ID0gcG9ydDsKKwkJCX0KKyNlbmRpZgorCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICog
bm8gY29udHJvbCBjaHVua3MsIHNvIHByZS1wcm9jZXNzIERBVEEgY2h1bmtzICh0aGVzZQorCQkg
KiBjaGVja3MgYXJlIHRha2VuIGNhcmUgb2YgYnkgY29udHJvbCBwcm9jZXNzaW5nKQorCQkgKi8K
KworCQkvKgorCQkgKiBpZiBEQVRBIG9ubHkgcGFja2V0LCBhbmQgYXV0aCBpcyByZXF1aXJlZCwg
dGhlbiBwdW50Li4uCisJCSAqIGNhbid0IGhhdmUgYXV0aGVudGljYXRlZCB3aXRob3V0IGFueSBB
VVRIIChjb250cm9sKQorCQkgKiBjaHVua3MKKwkJICovCisJCWlmICgoc3RjYiAhPSBOVUxMKSAm
JgorCQkgICAgc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNv
Yy5sb2NhbF9hdXRoX2NodW5rcykpIHsKKwkJCS8qICJzaWxlbnRseSIgaWdub3JlICovCisJCQlT
Q1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2YXV0aG1pc3NpbmcpOworCQkJZ290byBvdXQ7CisJCX0K
KwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJLyogb3V0IG9mIHRoZSBibHVlIERBVEEgY2h1bmsg
Ki8KKwkJCXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksICJPT1RCLCAlczolZCBhdCAlcyIsIF9f
RklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9j
YXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJc2N0cF9oYW5kbGVfb290YihtLCBpcGhsZW4s
IG9mZnNldCwgc3JjLCBkc3QsIHNoLCBpbnAsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCQkJICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwKKyNl
bmRpZgorCQkJCQkgdnJmX2lkLCBwb3J0KTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWlmIChzdGNi
LT5hc29jLm15X3Z0YWcgIT0gbnRvaGwoc2gtPnZfdGFnKSkgeworCQkJLyogdl90YWcgbWlzbWF0
Y2ghICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19iYWR2dGFnKTsKKwkJCWdvdG8gb3V0Owor
CQl9CisJfQorCisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkvKgorCQkgKiBubyB2YWxpZCBUQ0Ig
Zm9yIHRoaXMgcGFja2V0LCBvciB3ZSBmb3VuZCBpdCdzIGEgYmFkCisJCSAqIHBhY2tldCB3aGls
ZSBwcm9jZXNzaW5nIGNvbnRyb2wsIG9yIHdlJ3JlIGRvbmUgd2l0aCB0aGlzCisJCSAqIHBhY2tl
dCAoZG9uZSBvciBza2lwIHJlc3Qgb2YgZGF0YSksIHNvIHdlIGRyb3AgaXQuLi4KKwkJICovCisJ
CWdvdG8gb3V0OworCX0KKworCS8qCisJICogREFUQSBjaHVuayBwcm9jZXNzaW5nCisJICovCisJ
LyogcGxvdyB0aHJvdWdoIHRoZSBkYXRhIGNodW5rcyB3aGlsZSBsZW5ndGggPiBvZmZzZXQgKi8K
KworCS8qCisJICogUmVzdCBzaG91bGQgYmUgREFUQSBvbmx5LiAgQ2hlY2sgYXV0aGVudGljYXRp
b24gc3RhdGUgaWYgQVVUSCBmb3IKKwkgKiBEQVRBIGlzIHJlcXVpcmVkLgorCSAqLworCWlmICgo
bGVuZ3RoID4gb2Zmc2V0KSAmJgorCSAgICAoc3RjYiAhPSBOVUxMKSAmJgorCSAgICBzY3RwX2F1
dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLCBzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1
bmtzKSAmJgorCSAgICAhc3RjYi0+YXNvYy5hdXRoZW50aWNhdGVkKSB7CisJCS8qICJzaWxlbnRs
eSIgaWdub3JlICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZhdXRobWlzc2luZyk7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwKKwkJCSJEYXRhIGNodW5rIHJlcXVpcmVzIEFVVEgs
IHNraXBwZWRcbiIpOworCQlnb3RvIHRyaWdnZXJfc2VuZDsKKwl9CisJaWYgKGxlbmd0aCA+IG9m
ZnNldCkgeworCQlpbnQgcmV0dmFsOworCisJCS8qCisJCSAqIEZpcnN0IGNoZWNrIHRvIG1ha2Ug
c3VyZSBvdXIgc3RhdGUgaXMgY29ycmVjdC4gV2Ugd291bGQKKwkJICogbm90IGdldCBoZXJlIHVu
bGVzcyB3ZSByZWFsbHkgZGlkIGhhdmUgYSB0YWcsIHNvIHdlIGRvbid0CisJCSAqIGFib3J0IGlm
IHRoaXMgaGFwcGVucywganVzdCBkdW1wIHRoZSBjaHVuayBzaWxlbnRseS4KKwkJICovCisJCXN3
aXRjaCAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpKSB7CisJCWNhc2UgU0NUUF9TVEFURV9D
T09LSUVfRUNIT0VEOgorCQkJLyoKKwkJCSAqIHdlIGNvbnNpZGVyIGRhdGEgd2l0aCB2YWxpZCB0
YWdzIGluIHRoaXMgc3RhdGUKKwkJCSAqIHNob3dzIHVzIHRoZSBjb29raWUtYWNrIHdhcyBsb3N0
LiBJbXBseSBpdCB3YXMKKwkJCSAqIHRoZXJlLgorCQkJICovCisJCQlzY3RwX2hhbmRsZV9jb29r
aWVfYWNrKChzdHJ1Y3Qgc2N0cF9jb29raWVfYWNrX2NodW5rICopY2gsIHN0Y2IsIG5ldCk7CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUOgorCQkJLyoKKwkJCSAqIFdl
IGNvbnNpZGVyIE9PVEIgYW55IGRhdGEgc2VudCBkdXJpbmcgYXNvYyBzZXR1cC4KKwkJCSAqLwor
CQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwgIk9PVEIsICVzOiVkIGF0ICVzIiwgX19GSUxF
X18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNl
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1zZyk7CisJCQlzY3RwX2hhbmRsZV9vb3RiKG0sIGlwaGxlbiwgb2Zm
c2V0LCBzcmMsIGRzdCwgc2gsIGlucCwgb3BfZXJyLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJCQkgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgaW5wLT5maWJudW0sCisj
ZW5kaWYKKwkJCQkJIHZyZl9pZCwgcG9ydCk7CisJCQlnb3RvIG91dDsKKwkJCS8qc2FfaWdub3Jl
IE5PVFJFQUNIRUQqLworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9FTVBUWToJLyogc2hv
dWxkIG5vdCBoYXBwZW4gKi8KKwkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgkvKiBzaG91bGQgbm90
IGhhcHBlbiAqLworCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6CS8qIFRoaXMg
aXMgYSBwZWVyIGVycm9yICovCisJCWNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVDoK
KwkJZGVmYXVsdDoKKwkJCWdvdG8gb3V0OworCQkJLypzYV9pZ25vcmUgTk9UUkVBQ0hFRCovCisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX09QRU46CisJCWNhc2UgU0NUUF9TVEFURV9TSFVU
RE9XTl9TRU5UOgorCQkJYnJlYWs7CisJCX0KKwkJLyogcGxvdyB0aHJvdWdoIHRoZSBkYXRhIGNo
dW5rcyB3aGlsZSBsZW5ndGggPiBvZmZzZXQgKi8KKwkJcmV0dmFsID0gc2N0cF9wcm9jZXNzX2Rh
dGEobW0sIGlwaGxlbiwgJm9mZnNldCwgbGVuZ3RoLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnAsIHN0Y2IsIG5ldCwgJmhpZ2hfdHNuKTsKKwkJaWYgKHJldHZhbCA9PSAyKSB7CisJ
CQkvKgorCQkJICogVGhlIGFzc29jaWF0aW9uIGFib3J0ZWQsIE5PIFVOTE9DSyBuZWVkZWQgc2lu
Y2UKKwkJCSAqIHRoZSBhc3NvY2lhdGlvbiBpcyBkZXN0cm95ZWQuCisJCQkgKi8KKwkJCXN0Y2Ig
PSBOVUxMOworCQkJZ290byBvdXQ7CisJCX0KKwkJZGF0YV9wcm9jZXNzZWQgPSAxOworCQkvKgor
CQkgKiBBbnl0aGluZyBpbXBvcnRhbnQgbmVlZHMgdG8gaGF2ZSBiZWVuIG1fY29weSdlZCBpbgor
CQkgKiBwcm9jZXNzX2RhdGEKKwkJICovCisJfQorCisJLyogdGFrZSBjYXJlIG9mIGVjbiAqLwor
CWlmICgoZGF0YV9wcm9jZXNzZWQgPT0gMSkgJiYKKwkgICAgKHN0Y2ItPmFzb2MuZWNuX3N1cHBv
cnRlZCA9PSAxKSAmJgorCSAgICAoKGVjbl9iaXRzICYgU0NUUF9DRV9CSVRTKSA9PSBTQ1RQX0NF
X0JJVFMpKSB7CisJCS8qIFllcCwgd2UgbmVlZCB0byBhZGQgYSBFQ05FICovCisJCXNjdHBfc2Vu
ZF9lY25fZWNobyhzdGNiLCBuZXQsIGhpZ2hfdHNuKTsKKwl9CisKKwlpZiAoKGRhdGFfcHJvY2Vz
c2VkID09IDApICYmIChmd2RfdHNuX3NlZW4pKSB7CisJCWludCB3YXNfYV9nYXA7CisJCXVpbnQz
Ml90IGhpZ2hlc3RfdHNuOworCisJCWlmIChTQ1RQX1RTTl9HVChzdGNiLT5hc29jLmhpZ2hlc3Rf
dHNuX2luc2lkZV9ucl9tYXAsIHN0Y2ItPmFzb2MuaGlnaGVzdF90c25faW5zaWRlX21hcCkpIHsK
KwkJCWhpZ2hlc3RfdHNuID0gc3RjYi0+YXNvYy5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOwor
CQl9IGVsc2UgeworCQkJaGlnaGVzdF90c24gPSBzdGNiLT5hc29jLmhpZ2hlc3RfdHNuX2luc2lk
ZV9tYXA7CisJCX0KKwkJd2FzX2FfZ2FwID0gU0NUUF9UU05fR1QoaGlnaGVzdF90c24sIHN0Y2It
PmFzb2MuY3VtdWxhdGl2ZV90c24pOworCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7CisJCXNj
dHBfc2Fja19jaGVjayhzdGNiLCB3YXNfYV9nYXApOworCX0gZWxzZSBpZiAoZndkX3Rzbl9zZWVu
KSB7CisJCXN0Y2ItPmFzb2Muc2VuZF9zYWNrID0gMTsKKwl9CisJLyogdHJpZ2dlciBzZW5kIG9m
IGFueSBjaHVua3MgaW4gcXVldWUuLi4gKi8KK3RyaWdnZXJfc2VuZDoKKyNpZmRlZiBTQ1RQX0FV
RElUSU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEUwLCAyKTsKKwlzY3RwX2F1ZGl0aW5n
KDEsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEs
CisJCSJDaGVjayBmb3IgY2h1bmsgb3V0cHV0IHBydzolZCB0cWU6JWQgdGY9JWRcbiIsCisJCXN0
Y2ItPmFzb2MucGVlcnNfcnduZCwKKwkJVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2MuY29udHJvbF9z
ZW5kX3F1ZXVlKSwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQpOworCXVuX3NlbnQgPSAoc3Rj
Yi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
KTsKKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSkpIHsK
KwkJY250X2N0cmxfcmVhZHkgPSBzdGNiLT5hc29jLmN0cmxfcXVldWVfY250IC0gc3RjYi0+YXNv
Yy5lY25fZWNob19jbnRfb25xOworCX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFz
Y29uZl9zZW5kX3F1ZXVlKSB8fAorCSAgICBjbnRfY3RybF9yZWFkeSB8fAorCSAgICBzdGNiLT5h
c29jLnRyaWdnZXJfcmVzZXQgfHwKKwkgICAgKCh1bl9zZW50KSAmJgorCSAgICAgKHN0Y2ItPmFz
b2MucGVlcnNfcnduZCA+IDAgfHwKKwkgICAgICAoc3RjYi0+YXNvYy5wZWVyc19yd25kIDw9IDAg
JiYgc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPT0gMCkpKSkgeworCQlTQ1RQREJHKFNDVFBfREVC
VUdfSU5QVVQzLCAiQ2FsbGluZyBjaHVuayBPVVRQVVRcbiIpOworCQlzY3RwX2NodW5rX291dHB1
dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fQ09OVFJPTF9QUk9DLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiY2h1bmsgT1VUUFVUIHJldHVy
bnNcbiIpOworCX0KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xv
ZygweEUwLCAzKTsKKwlzY3RwX2F1ZGl0aW5nKDIsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgor
IG91dDoKKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9
CisJaWYgKGlucF9kZWNyICE9IE5VTEwpIHsKKwkJLyogcmVkdWNlIHJlZi1jb3VudCAqLworCQlT
Q1RQX0lOUF9XTE9DSyhpbnBfZGVjcik7CisJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF9kZWNyKTsK
KwkJU0NUUF9JTlBfV1VOTE9DSyhpbnBfZGVjcik7CisJfQorCXJldHVybjsKK30KKworI2lmZGVm
IElORVQKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQordm9pZAor
c2N0cF9pbnB1dF93aXRoX3BvcnQoc3RydWN0IG1idWYgKmlfcGFrLCBpbnQgb2ZmLCB1aW50MTZf
dCBwb3J0KQorI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCit2b2lkCitzY3RwX2lucHV0KHBha2hh
bmRsZV90eXBlIGlfcGFrKQorI2Vsc2UKK3ZvaWQKKyNpZiBfX1NURENfXworc2N0cF9pbnB1dChz
dHJ1Y3QgbWJ1ZiAqaV9wYWssLi4uKQorI2Vsc2UKK3NjdHBfaW5wdXQoaV9wYWssIHZhX2FsaXN0
KQorCXN0cnVjdCBtYnVmICppX3BhazsKKyNlbmRpZgorI2VuZGlmCit7CisJc3RydWN0IG1idWYg
Km07CisJaW50IGlwaGxlbjsKKwl1aW50MzJfdCB2cmZfaWQgPSAwOworCXVpbnQ4X3QgZWNuX2Jp
dHM7CisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZHN0OworCXN0cnVjdCBpcCAqaXA7CisJc3Ry
dWN0IHNjdHBoZHIgKnNoOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgbGVuZ3Ro
LCBvZmZzZXQ7CisJdWludDhfdCBjb21wdXRlX2NyYzsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCXVpbnQzMl90IG1mbG93aWQ7CisJdWludDhfdCBtZmxvd3R5cGU7CisJdWludDE2X3QgZmli
bnVtOworI2VuZGlmCisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykpCisJdWludDE2X3QgcG9ydCA9IDA7CisjZW5k
aWYKKworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCS8qIFRoaXMgaXMgRXZpbCwgYnV0IGl0cyB0
aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAqLworCWlwaGxlbiA9IHNpemVv
ZihzdHJ1Y3QgaXApOworI2Vsc2UKKwlpcGhsZW4gPSBvZmY7CisjZW5kaWYKKwlpZiAoU0NUUF9H
RVRfUEtUX1ZSRklEKGlfcGFrLCB2cmZfaWQpKSB7CisJCVNDVFBfUkVMRUFTRV9QS1QoaV9wYWsp
OworCQlyZXR1cm47CisJfQorCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpX3Bhayk7CisjaWZk
ZWYgX19QYW5kYV9fCisJU0NUUF9ERVRBQ0hfSEVBREVSX0ZST01fQ0hBSU4oaV9wYWspOworCSh2
b2lkKVNDVFBfUkVMRUFTRV9IRUFERVIoaV9wYWspOworI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVG
X0xPR0dJTkcKKwkvKiBMb2cgaW4gYW55IGlucHV0IG1idWZzICovCisJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgewor
CQlzY3RwX2xvZ19tYmMobSwgU0NUUF9NQlVGX0lOUFVUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBT
Q1RQX1BBQ0tFVF9MT0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykgeworCQlzY3RwX3BhY2tldF9sb2cobSk7
CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVy
c2lvbiA+IDEwMDAwNDkKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAg
ICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBj
c3VtX2ZsYWdzIDB4JWIuXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAg
aWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCisJICAgICAgICAoaW50KW0tPm1fcGt0aGRyLmNz
dW1fZmxhZ3MsIENTVU1fQklUUyk7CisjZWxpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAK
KwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwX2lucHV0KCk6
IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JXgu
XG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgaWZfbmFtZShtLT5tX3Br
dGhkci5yY3ZpZiksCisJICAgICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbHNlCisJ
U0NUUERCRyhTQ1RQX0RFQlVHX0NSQ09GRkxPQUQsCisJICAgICAgICAic2N0cF9pbnB1dCgpOiBQ
YWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4Llxu
IiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlm
LT5pZl94bmFtZSwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisj
ZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZG
TE9BRCwKKwkgICAgICAgICJzY3RwX2lucHV0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2
ZWQgb24gJXMlZCB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5tX3BrdGhk
ci5sZW4sCisJICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfbmFtZSwKKwkgICAgICAgIG0t
Pm1fcGt0aGRyLnJjdmlmLT5pZl91bml0LAorCSAgICAgICAgbS0+bV9wa3RoZHIuY3N1bV9mbGFn
cyk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQorCVNDVFBEQkcoU0NUUF9ERUJV
R19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBfaW5wdXQoKTogUGFja2V0IG9mIGxlbmd0aCAl
ZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAgICAgICBtLT5t
X3BrdGhkci5sZW4sCisJICAgICAgICBtLT5tX3BrdGhkci5yY3ZpZi0+aWZfeG5hbWUsCisJICAg
ICAgICBtLT5tX3BrdGhkci5jc3VtX2ZsYWdzKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJbWZsb3dpZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKKwltZmxvd3R5cGUgPSBNX0hB
U0hUWVBFX0dFVChtKTsKKwlmaWJudW0gPSBNX0dFVEZJQihtKTsKKyNlbmRpZgorCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0
cHNfaW5wYWNrZXRzKTsKKwkvKiBHZXQgSVAsIFNDVFAsIGFuZCBmaXJzdCBjaHVuayBoZWFkZXIg
dG9nZXRoZXIgaW4gdGhlIGZpcnN0IG1idWYuICovCisJb2Zmc2V0ID0gaXBobGVuICsgc2l6ZW9m
KHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJaWYgKFND
VFBfQlVGX0xFTihtKSA8IG9mZnNldCkgeworCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQp
KSA9PSBOVUxMKSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQkJcmV0dXJu
OworCQl9CisJfQorCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJc2ggPSAoc3RydWN0IHNj
dHBoZHIgKikoKGNhZGRyX3QpaXAgKyBpcGhsZW4pOworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5r
aGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJb2Zmc2V0IC09
IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYg
SEFWRV9TSU5fTEVOCisJc3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBp
cC0+aXBfc3JjOworCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7
CisJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5z
aW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3Bv
cnQgPSBzaC0+ZGVzdF9wb3J0OworCWRzdC5zaW5fYWRkciA9IGlwLT5pcF9kc3Q7CisjaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKKwlOVE9IUyhpcC0+aXBfbGVuKTsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKKwlpcC0+aXBfbGVuID0gbnRvaHMoaXAtPmlwX2xlbik7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKQorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwlsZW5ndGgg
PSBudG9ocyhpcC0+aXBfbGVuKTsKKyNlbHNlCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxl
bjsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisJbGVuZ3RoID0gaXAtPmlwX2xl
biArIGlwaGxlbjsKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0xpbnV4KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJ
bGVuZ3RoID0gaXAtPmlwX2xlbjsKKyNlbHNlCisJbGVuZ3RoID0gaXAtPmlwX2xlbiArIGlwaGxl
bjsKKyNlbmRpZgorI2Vsc2UKKwlsZW5ndGggPSBpcC0+aXBfbGVuOworI2VuZGlmCisJLyogVmFs
aWRhdGUgbWJ1ZiBjaGFpbiBsZW5ndGggd2l0aCBJUCBwYXlsb2FkIGxlbmd0aC4gKi8KKwlpZiAo
U0NUUF9IRUFERVJfTEVOKG0pICE9IGxlbmd0aCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5Q
VVQxLAorCQkgICAgICAgICJzY3RwX2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDol
ZFxuIiwgbGVuZ3RoLCBTQ1RQX0hFQURFUl9MRU4obSkpOworCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19oZHJvcHMpOworCQlnb3RvIG91dDsKKwl9CisJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9h
ZGNhc3RzIG9yIG11bHRpY2FzdHMgKi8KKwlpZiAoSU5fTVVMVElDQVNUKG50b2hsKGRzdC5zaW5f
YWRkci5zX2FkZHIpKSkgeworCQlnb3RvIG91dDsKKwl9CisJaWYgKFNDVFBfSVNfSVRfQlJPQURD
QVNUKGRzdC5zaW5fYWRkciwgbSkpIHsKKwkJZ290byBvdXQ7CisJfQorCWVjbl9iaXRzID0gaXAt
PmlwX3RvczsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA4MDAwMDAKKwlpZiAobS0+bV9wa3RoZHIuY3N1bV9mbGFncyAmIENTVU1fU0NUUF9WQUxJRCkg
eworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQljb21wdXRlX2NyYyA9IDA7
CisJfSBlbHNlIHsKKyNlbHNlCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29u
X2xvb3BiYWNrKSAmJgorCSAgICAoKHNyYy5zaW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRy
LnNfYWRkcikgfHwKKwkgICAgIChTQ1RQX0lTX0lUX0xPT1BCQUNLKG0pKSkpIHsKKwkJU0NUUF9T
VEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAwOworCX0gZWxzZSB7
CisjZW5kaWYKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJY29tcHV0ZV9j
cmMgPSAxOworCX0KKwlzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKCZtLCBpcGhsZW4sIG9m
ZnNldCwgbGVuZ3RoLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2Nr
YWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2th
ZGRyICopJmRzdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWNuX2JpdHMsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlm
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworIG91dDoKKwlp
ZiAobSkgeworCQlzY3RwX21fZnJlZW0obSk7CisJfQorCXJldHVybjsKK30KKworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU0NUUF9NQ09SRV9JTlBVVCkgJiYgZGVmaW5lZChT
TVApCitleHRlcm4gaW50ICpzY3RwX2NwdWFycnk7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMjAKK2ludAorc2N0cF9pbnB1
dChzdHJ1Y3QgbWJ1ZiAqKm1wLCBpbnQgKm9mZnAsIGludCBwcm90byBTQ1RQX1VOVVNFRCkKK3sK
KwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgb2ZmOworCisJbSA9ICptcDsKKwlvZmYgPSAqb2ZmcDsK
KyNlbHNlCit2b2lkCitzY3RwX2lucHV0KHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmKQoreworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lOUFVU
KSAmJiBkZWZpbmVkKFNNUCkKKwlpZiAobXBfbmNwdXMgPiAxKSB7CisJCXN0cnVjdCBpcCAqaXA7
CisJCXN0cnVjdCBzY3RwaGRyICpzaDsKKwkJaW50IG9mZnNldDsKKwkJaW50IGNwdV90b191c2U7
CisJCXVpbnQzMl90IGZsb3dpZCwgdGFnOworCisJCWlmIChNX0hBU0hUWVBFX0dFVChtKSAhPSBN
X0hBU0hUWVBFX05PTkUpIHsKKwkJCWZsb3dpZCA9IG0tPm1fcGt0aGRyLmZsb3dpZDsKKwkJfSBl
bHNlIHsKKwkJCS8qIE5vIGZsb3cgaWQgYnVpbHQgYnkgbG93ZXIgbGF5ZXJzCisJCQkgKiBmaXgg
aXQgc28gd2UgY3JlYXRlIG9uZS4KKwkJCSAqLworCQkJb2Zmc2V0ID0gb2ZmICsgc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKTsKKwkJCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBvZmZzZXQpIHsKKwkJCQlp
ZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxMKSB7CisJCQkJCVNDVFBfU1RBVF9J
TkNSKHNjdHBzX2hkcm9wcyk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gMTEwMDAyMAorCQkJCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisjZWxzZQor
CQkJCQlyZXR1cm47CisjZW5kaWYKKwkJCQl9CisJCQl9CisJCQlpcCA9IG10b2QobSwgc3RydWN0
IGlwICopOworCQkJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXAgKyBvZmYpOwor
CQkJdGFnID0gaHRvbmwoc2gtPnZfdGFnKTsKKwkJCWZsb3dpZCA9IHRhZyBeIG50b2hzKHNoLT5k
ZXN0X3BvcnQpIF4gbnRvaHMoc2gtPnNyY19wb3J0KTsKKwkJCW0tPm1fcGt0aGRyLmZsb3dpZCA9
IGZsb3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIE1fSEFTSFRZUEVfT1BBUVVFX0hBU0gpOwor
CQl9CisJCWNwdV90b191c2UgPSBzY3RwX2NwdWFycnlbZmxvd2lkICUgbXBfbmNwdXNdOworCQlz
Y3RwX3F1ZXVlX3RvX21jb3JlKG0sIG9mZiwgY3B1X3RvX3VzZSk7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyMAorCQlyZXR1cm4gKElQUFJP
VE9fRE9ORSk7CisjZWxzZQorCQlyZXR1cm47CisjZW5kaWYKKwl9CisjZW5kaWYKKwlzY3RwX2lu
cHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDExMDAwMjAKKwlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisjZW5k
aWYKK30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9pbnB1dC5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5w
dXQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4yZDAx
YmViMDhkZWQ5MDhlZTgwYzAyZjRhZjU5ZmQyOGMwNTUwYThlIDEwMDc1NQotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9pbnB1dC5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2lucHV0LmgKQEAgLTAsMCArMSw2NiBAQAorLyotCisgKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAx
LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X2lucHV0LmggMzI2NjcyIDIwMTctMTItMDcgMjI6MTk6MDhaIHR1ZXhlbiAkIik7CisjZW5kaWYK
KworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX0lOUFVUX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBf
SU5QVVRfSF8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQordm9pZAorc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZyhzdHJ1Y3QgbWJ1ZiAqKiwgaW50
LCBpbnQsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy
ICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cGhkciAqLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50OF90LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB1aW50MzJfdCwgdWludDE2X3QpOworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfcmVxdWVzdCAqCitzY3RwX2ZpbmRfc3RyZWFtX3Jlc2V0KHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgdWludDMyX3Qgc2VxLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipiY2hrKTsKKwor
dm9pZCBzY3RwX3Jlc2V0X2luX3N0cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90
IG51bWJlcl9lbnRyaWVzLAorICAgIHVpbnQxNl90ICpsaXN0KTsKKworCitpbnQgc2N0cF9pc190
aGVyZV91bnNlbnRfZGF0YShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpOwor
CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfbG9ja191c2Vyc3BhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2xvY2tfdXNlcnNwYWNlLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJl
NDhjNTM5MS4uN2I4YjBjYmRkZDIyZmViNmY1MzU2MTI1OWE4ZDJhOTJjMDBiZDUwZCAxMDA3NTUK
LS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfbG9ja191c2Vyc3BhY2UuaAor
KysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9sb2NrX3VzZXJzcGFjZS5oCkBA
IC0wLDAgKzEsMjUzIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBCcmFkIFBlbm9mZi4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVt
cywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f
RkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRpZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBfTE9D
S19FTVBUWV9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX0xPQ0tfRU1QVFlfSF8KKworLyoKKyAq
IEVtcHR5IExvY2sgZGVjbGFyYXRpb25zIGZvciBhbGwgb3RoZXIgcGxhdGZvcm1zLiBQcmUtcHJv
Y2VzcyBhd2F5IHRvCisgKiBub3RoaW5nLgorICovCisKKy8qIF9fVXNlcnNwYWNlX18gcHV0dGlu
ZyBsb2NrIG1hY3JvcyBpbiBzYW1lIG9yZGVyIGFzIHNjdHBfbG9ja19ic2QuaCAuLi4qLworCisj
ZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0lOSVQoKQorCisjZGVmaW5lIFNDVFBfU1RBVExPR19JTklU
X0xPQ0soKQorI2RlZmluZSBTQ1RQX1NUQVRMT0dfTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExP
R19VTkxPQ0soKQorI2RlZmluZSBTQ1RQX1NUQVRMT0dfREVTVFJPWSgpCisKKyNkZWZpbmUgU0NU
UF9JTlBfSU5GT19MT0NLX0RFU1RST1koKQorCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19J
TklUKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lO
Rk9fV0xPQ0soKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1RSWUxPQ0soKSAxCisjZGVmaW5lIFND
VFBfSU5QX0lORk9fUlVOTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisK
KyNkZWZpbmUgU0NUUF9XUV9BRERSX0lOSVQoKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfREVTVFJP
WSgpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9MT0NLKCkKKyNkZWZpbmUgU0NUUF9XUV9BRERSX1VO
TE9DSygpCisKKworI2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lQ
SV9BRERSX0RFU1RST1koKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkKKyNkZWZpbmUg
U0NUUF9JUElfQUREUl9XTE9DSygpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJfUlVOTE9DSygpCisj
ZGVmaW5lIFNDVFBfSVBJX0FERFJfV1VOTE9DSygpCisKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFU
T1JfV1FfSU5JVCgpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RST1koKQorI2Rl
ZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFU
T1JfV1FfVU5MT0NLKCkKKworCisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0lOSVQoKQorI2RlZmlu
ZSBTQ1RQX0lQX1BLVExPR19MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkK
KyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfREVTVFJPWSgpCisKKworCisjZGVmaW5lIFNDVFBfSU5Q
X1JFQURfSU5JVChfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKKyNk
ZWZpbmUgU0NUUF9JTlBfUkVBRF9MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5M
T0NLKF9pbnApCisKKyNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApCisjZGVmaW5lIFND
VFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVT
VFJPWShfaW5wKQorI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfREVTVFJPWShfaW5wKQor
CisKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0so
X2lucCkKKworI2RlZmluZSBTQ1RQX0lOUF9MT0NLX0NPTlRFTkRFRChfaW5wKSAoMCkgLyogRG9u
J3Qga25vdyBpZiB0aGlzIGlzIHBvc3NpYmxlICovCisKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9D
T05URU5ERUQoX2lucCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLwor
CisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19DT05URU5ERUQoX2lucCkgKDApIC8qIERv
bid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLworCisKKyNkZWZpbmUgU0NUUF9UQ0JfU0VO
RF9MT0NLX0lOSVQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koX3Rj
YikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX1NF
TkRfVU5MT0NLKF90Y2IpCisKKyNkZWZpbmUgU0NUUF9JTlBfSU5DUl9SRUYoX2lucCkKKyNkZWZp
bmUgU0NUUF9JTlBfREVDUl9SRUYoX2lucCkKKworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xP
Q0soX2lucCkKKworI2RlZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBf
SU5QX1dVTkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9VTkxPQ0soX2lucCkK
KworCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5JVChfdGNiKQorI2RlZmluZSBTQ1RQX1RDQl9M
T0NLX0RFU1RST1koX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhfdGNiKQorI2RlZmluZSBT
Q1RQX1RDQl9UUllMT0NLKF90Y2IpIDEKKyNkZWZpbmUgU0NUUF9UQ0JfVU5MT0NLKF90Y2IpCisj
ZGVmaW5lIFNDVFBfVENCX1VOTE9DS19JRk9XTkVEKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xP
Q0tfQVNTRVJUKF90Y2IpCisKKworCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19JTklUKCkK
KyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxP
Q0soKQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX0xPQ0tfREVTVFJPWSgpCisKKworCisjZGVmaW5l
IFNDVFBfSU5DUl9FUF9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAg
IHNjdHBwY2JpbmZvLmlwaV9jb3VudF9lcCsrOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisj
ZGVmaW5lIFNDVFBfREVDUl9FUF9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJ
ICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9lcC0tOyBcCisJICAgICAgICB9IHdoaWxlICgw
KQorCisjZGVmaW5lIFNDVFBfSU5DUl9BU09DX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRv
IHsgXAorCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9hc29jKys7IFwKKwkg
ICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX0FTT0NfQ09VTlQoKSBcCisg
ICAgICAgICAgICAgICAgZG8geyBcCisJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2Nv
dW50X2Fzb2MtLTsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0lOQ1Jf
TEFERFJfQ09VTlQoKSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJICAgICAgICAgICAgICAg
c2N0cHBjYmluZm8uaXBpX2NvdW50X2xhZGRyKys7IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisK
KyNkZWZpbmUgU0NUUF9ERUNSX0xBRERSX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsg
XAorCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9sYWRkci0tOyBcCisJICAg
ICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfSU5DUl9SQUREUl9DT1VOVCgpIFwKKyAg
ICAgICAgICAgICAgICBkbyB7IFwKKyAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2Nv
dW50X3JhZGRyKys7IFwKKwkgICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNS
X1JBRERSX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsgXAorIAkgICAgICAgICAgICAg
ICBzY3RwcGNiaW5mby5pcGlfY291bnRfcmFkZHItLTsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkK
KworI2RlZmluZSBTQ1RQX0lOQ1JfQ0hLX0NPVU5UKCkgXAorICAgICAgICAgICAgICAgIGRvIHsg
XAorICAJICAgICAgICAgICAgICAgc2N0cHBjYmluZm8uaXBpX2NvdW50X2NodW5rKys7IFwKKwkg
ICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX0NIS19DT1VOVCgpIFwKKyAg
ICAgICAgICAgICAgICBkbyB7IFwKKyAgCSAgICAgICAgICAgICAgIHNjdHBwY2JpbmZvLmlwaV9j
b3VudF9jaHVuay0tOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfSU5D
Ul9SRUFEUV9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBw
Y2JpbmZvLmlwaV9jb3VudF9yZWFkcSsrOyBcCisJICAgICAgICB9IHdoaWxlICgwKQorCisjZGVm
aW5lIFNDVFBfREVDUl9SRUFEUV9DT1VOVCgpIFwKKyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJ
ICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9yZWFkcS0tOyBcCisJICAgICAgICB9IHdoaWxl
ICgwKQorCisjZGVmaW5lIFNDVFBfSU5DUl9TVFJNT1FfQ09VTlQoKSBcCisgICAgICAgICAgICAg
ICAgZG8geyBcCisJCSAgICAgICBzY3RwcGNiaW5mby5pcGlfY291bnRfc3RybW9xKys7IFwKKwkg
ICAgICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9ERUNSX1NUUk1PUV9DT1VOVCgpIFwK
KyAgICAgICAgICAgICAgICBkbyB7IFwKKwkJICAgICAgIHNjdHBwY2JpbmZvLmlwaV9jb3VudF9z
dHJtb3EtLTsgXAorCSAgICAgICAgfSB3aGlsZSAoMCkKKworCisvKiBub3Qgc3VyZSBpZiBfX1Vz
ZXJzcGFjZV9fIG5lZWRzIHRoZXNlIChidXQgY29waWVkIG5vbmV0aGVsZXNzLi4uKSAqLworI2lm
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisjZGVmaW5lIFNDVFBfSU5QX1NPKHNjdHBp
bnApCShzY3RwaW5wKS0+aXBfaW5wLmlucC5pbnBfc29ja2V0CisjZGVmaW5lIFNDVFBfU09DS0VU
X0xPQ0soc28sIHJlZmNudCkKKyNkZWZpbmUgU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCByZWZjbnQp
CisjZW5kaWYKKworCisvKiB0aGVzZSB3ZXJlIGluIHNjdHBfbG9ja19lbXB0eS5oIGJ1dCBhcmVu
J3QgaW4gc2N0cF9sb2NrX2JzZC5oIC4uLiAqLworI2lmIDAKKyNkZWZpbmUgU0NUUF9JUElfQURE
Ul9MT0NLKCkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9VTkxPQ0soKQorI2VuZGlmCisKKworLyog
VGhlc2Ugd2VyZSBpbiBzY3RwX2xvY2tfZW1wdHkuaCBiZWNhdXNlIHRoZXkgd2VyZSBjb21tZW50
ZWQgb3V0IHdpdGhpbgorICogIHdpdGhpbiB1c2VyX2luY2x1ZGUvdXNlcl9zb2NrZXR2YXIuaCAu
ICBJZiB0aGV5IGFyZSBOT1QgY29tbWVudGVkIG91dAorICogIGluIHVzZXJfc29ja2V0dmFyLmgg
KGJlY2F1c2UgdGhhdCBzZWVtcyB0aGUgbW9yZSBuYXR1cmFsIHBsYWNlIGZvciB0aGVtCisgKiAg
dG8gbGl2ZSksIHRoZW4gY2hhbmdlIHRoaXMgImlmIiB0byAwLiAgS2VlcCB0aGUgImlmIiBhcyAx
IGlmIHRoZXNlIEFSRQorICogIGluZGVlZCBjb21tZW50ZWQgb3V0IGluIHVzZXJfc29ja2V0dmFy
LmggLgorICoKKyAqIFRoaXMgbW9kdWxhcml0eSBpcyBrZXB0IHNvIHRoaXMgZmlsZSBjYW4gZWFz
aWx5IGJlIGNob3NlbiBhcyBhbiBhbHRlcm5hdGl2ZQorICogIHRvIFNDVFBfUFJPQ0VTU19MRVZF
TF9MT0NLUy4gIElmIG9uZSBkZWZpbmVzIFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUyBpbgorICog
IHVzZXJfaW5jbHVkZS9vcHRfc2N0cC5oLCB0aGVuIHRoZSBmaWxlIHNjdHBfcHJvY2Vzc19sb2Nr
LmggKHdoaWNoIHdlIGRpZG4ndAorICogIGltcGxlbWVudCkgaXMgdXNlZCwgYW5kIHRoYXQgZGVj
bGFyZXMgdGhlc2UgbG9ja3MgYWxyZWFkeSAoc28gdXNpbmcKKyAqICBTQ1RQX1BST0NFU1NfTEVW
RUxfTE9DS1MgKnJlcXVpcmVzKiB0aGF0IHRoZXNlIGRlZmludGlvbnMgYmUgY29tbWVudGVkIG91
dAorICogIGluIHVzZXJfc29ja2V0dmFyLmgpLgorICovCisjaWYgMQorI2RlZmluZSBTT0NLX0xP
Q0soX3NvKQorI2RlZmluZSBTT0NLX1VOTE9DSyhfc28pCisjZGVmaW5lIFNPQ0tCVUZfTE9DSyhf
c29fYnVmKQorI2RlZmluZSBTT0NLQlVGX1VOTE9DSyhfc29fYnVmKQorI2RlZmluZSBTT0NLQlVG
X0xPQ0tfQVNTRVJUKF9zb19idWYpCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfb3MuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0
OGM1MzkxLi5iMzc0NmRkOTQ2ZjA2MDUzNjdmNDZhOTMxNTkxNGNiMTQ2MWJkNzdiIDEwMDc1NQot
LS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vcy5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zLmgKQEAgLTAsMCArMSw5NiBAQAorLyotCisgKiBT
UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChj
KSAyMDA2LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4
ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIg
dGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICog
ICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisg
KiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNp
bmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5l
dC9zY3RwX29zLmggMjM1ODI4IDIwMTItMDUtMjMgMTE6MjY6MjhaIHR1ZXhlbiAkIik7CisjZW5k
aWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX09TX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBf
T1NfSF8KKworLyoKKyAqIEdlbmVyYWwga2VybmVsIG1lbW9yeSBhbGxvY2F0aW9uOgorICogIFND
VFBfTUFMTE9DKGVsZW1lbnQsIHR5cGUsIHNpemUsIG5hbWUpCisgKiAgU0NUUF9GUkVFKGVsZW1l
bnQpCisgKiBLZXJuZWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yICJzb25hbWUiLSBtZW1vcnkgbXVz
dCBiZSB6ZXJvZWQuCisgKiAgU0NUUF9NQUxMT0NfU09OQU1FKG5hbWUsIHR5cGUsIHNpemUpCisg
KiAgU0NUUF9GUkVFX1NPTkFNRShuYW1lKQorICovCisKKy8qCisgKiBab25lKHBvb2wpIGFsbG9j
YXRpb24gcm91dGluZXM6IE1VU1QgYmUgZGVmaW5lZCBmb3IgZWFjaCBPUy4KKyAqICB6b25lID0g
em9uZS9wb29sIHBvaW50ZXIuCisgKiAgbmFtZSA9IHN0cmluZyBuYW1lIG9mIHRoZSB6b25lL3Bv
b2wuCisgKiAgc2l6ZSA9IHNpemUgb2YgZWFjaCB6b25lL3Bvb2wgZWxlbWVudC4KKyAqICBudW1i
ZXIgPSBudW1iZXIgb2YgZWxlbWVudHMgaW4gem9uZS9wb29sLgorICogIHR5cGUgPSBzdHJ1Y3R1
cmUgdHlwZSB0byBhbGxvY2F0ZQorICoKKyAqIHNjdHBfem9uZV90CisgKiBTQ1RQX1pPTkVfSU5J
VCh6b25lLCBuYW1lLCBzaXplLCBudW1iZXIpCisgKiBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUp
CisgKiBTQ1RQX1pPTkVfRlJFRSh6b25lLCBlbGVtZW50KQorICogU0NUUF9aT05FX0RFU1RST1ko
em9uZSkKKyAqLworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfb3NfYnNkLmg+CisjZWxzZQorI2RlZmluZSBNT0RVTEVfR0xPQkFMKF9CKSAoX0IpCisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfb3NfdXNlcnNwYWNlLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lu
Y2x1ZGUgPG5ldGluZXQvc2N0cF9vc19tYWNvc3guaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChf
X1BhbmRhX18pCisjaW5jbHVkZSA8aXAvc2N0cC9zY3RwX29zX2lveC5oPgorI2VuZGlmCisKKyNp
ZiBkZWZpbmVkKF9fV2luZG93c19fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vc193aW5kb3dz
Lmg+CisjZW5kaWYKKworLyogQWxsIG9zJ3MgbXVzdCBpbXBsZW1lbnQgdGhpcyBhZGRyZXNzIGdh
dGhlcmVyLiBJZgorICogbm8gVlJGJ3MgZXhpc3QsIHRoZW4gdnJmIDAgaXMgdGhlIG9ubHkgb25l
IGFuZCBhbGwKKyAqIGFkZHJlc3NlcyBhbmQgaWZuJ3MgbGl2ZSBoZXJlLgorICovCisjZGVmaW5l
IFNDVFBfREVGQVVMVF9WUkYgMAordm9pZCBzY3RwX2luaXRfdnJmX2xpc3QoaW50IHZyZmlkKTsK
KworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9v
c191c2Vyc3BhY2UuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJz
cGFjZS5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjg2
MTMzMDFhYjA4ZWFmNmUxOWUzODI4MzE1ZWMwZDgyYTI0Y2Y3ZDggMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCisrKyBiL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oCkBAIC0wLDAgKzEsMTE2MiBA
QAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICog
Q29weXJpZ2h0IChjKSAyMDA2LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxsIFN0ZXdh
cnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMSwgYnkg
TWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDgtMjAxMSwgYnkgQnJhZCBQZW5vZmYuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAq
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBfX3NjdHBfb3NfdXNlcnNwYWNlX2hfXworI2RlZmluZSBfX3NjdHBfb3NfdXNlcnNwYWNl
X2hfXworLyoKKyAqIFVzZXJzcGFjZSBpbmNsdWRlcworICogQWxsIHRoZSBvcHRfeHh4LmggZmls
ZXMgYXJlIHBsYWNlZCBpbiB0aGUga2VybmVsIGJ1aWxkIGRpcmVjdG9yeS4KKyAqIFdlIHdpbGwg
cGxhY2UgdGhlbSBpbiB1c2Vyc3BhY2Ugc3RhY2sgYnVpbGQgZGlyZWN0b3J5LgorICovCisKKyNp
bmNsdWRlIDxlcnJuby5oPgorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQor
I2luY2x1ZGUgPHdpbnNvY2syLmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNpbmNsdWRlIDxp
cGhscGFwaS5oPgorI2luY2x1ZGUgPE1zd3NvY2suaD4KKyNpbmNsdWRlIDxXaW5kb3dzLmg+Cisj
aW5jbHVkZSAidXNlcl9lbnZpcm9ubWVudC5oIgordHlwZWRlZiBDUklUSUNBTF9TRUNUSU9OIHVz
ZXJsYW5kX211dGV4X3Q7CisjaWYgV0lOVkVSIDwgMHgwNjAwCitlbnVtIHsKKwlDX1NJR05BTCA9
IDAsCisJQ19CUk9BRENBU1QgPSAxLAorCUNfTUFYX0VWRU5UUyA9IDIKK307Cit0eXBlZGVmIHN0
cnVjdAoreworCXVfaW50IHdhaXRlcnNfY291bnQ7CisJQ1JJVElDQUxfU0VDVElPTiB3YWl0ZXJz
X2NvdW50X2xvY2s7CisJSEFORExFIGV2ZW50c19bQ19NQVhfRVZFTlRTXTsKK30gdXNlcmxhbmRf
Y29uZF90Owordm9pZCBJbml0aWFsaXplWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25k
X3QgKik7Cit2b2lkIERlbGV0ZVhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICop
OworaW50IFNsZWVwWFBDb25kaXRpb25WYXJpYWJsZSh1c2VybGFuZF9jb25kX3QgKiwgdXNlcmxh
bmRfbXV0ZXhfdCAqKTsKK3ZvaWQgV2FrZUFsbFhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRf
Y29uZF90ICopOworI2RlZmluZSBJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFibGUoY29uZCkgSW5p
dGlhbGl6ZVhQQ29uZGl0aW9uVmFyaWFibGUoY29uZCkKKyNkZWZpbmUgRGVsZXRlQ29uZGl0aW9u
VmFyaWFibGUoY29uZCkgRGVsZXRlWFBDb25kaXRpb25WYXJpYWJsZShjb25kKQorI2RlZmluZSBT
bGVlcENvbmRpdGlvblZhcmlhYmxlQ1MoY29uZCwgbXR4LCB0aW1lKSBTbGVlcFhQQ29uZGl0aW9u
VmFyaWFibGUoY29uZCwgbXR4KQorI2RlZmluZSBXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoY29u
ZCkgV2FrZUFsbFhQQ29uZGl0aW9uVmFyaWFibGUoY29uZCkKKyNlbHNlCisjZGVmaW5lIERlbGV0
ZUNvbmRpdGlvblZhcmlhYmxlKGNvbmQpCit0eXBlZGVmIENPTkRJVElPTl9WQVJJQUJMRSB1c2Vy
bGFuZF9jb25kX3Q7CisjZW5kaWYKK3R5cGVkZWYgSEFORExFIHVzZXJsYW5kX3RocmVhZF90Owor
I2RlZmluZSBBRERSRVNTX0ZBTUlMWQl1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgSVBWRVJTSU9O
ICA0CisjZGVmaW5lIE1BWFRUTCAgICAgMjU1CisvKiBWUzIwMTAgY29tZXMgd2l0aCBzdGRpbnQu
aCAqLworI2lmIF9NU0NfVkVSID49IDE2MDAKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisj
ZGVmaW5lIHVpbnQ2NF90ICAgdW5zaWduZWQgX19pbnQ2NAorI2RlZmluZSB1aW50MzJfdCAgIHVu
c2lnbmVkIF9faW50MzIKKyNkZWZpbmUgaW50MzJfdCAgICBfX2ludDMyCisjZGVmaW5lIHVpbnQx
Nl90ICAgdW5zaWduZWQgX19pbnQxNgorI2RlZmluZSBpbnQxNl90ICAgIF9faW50MTYKKyNkZWZp
bmUgdWludDhfdCAgICB1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgaW50OF90ICAgICBfX2ludDgK
KyNlbmRpZgorI2lmbmRlZiBfU0laRV9UX0RFRklORUQKKyNkZWZpbmUgc2l6ZV90ICAgICBfX2lu
dDMyCisjZW5kaWYKKyNkZWZpbmUgdV9sb25nICAgICB1bnNpZ25lZCBfX2ludDY0CisjZGVmaW5l
IHVfaW50ICAgICAgdW5zaWduZWQgX19pbnQzMgorI2RlZmluZSB1X2ludDMyX3QgIHVuc2lnbmVk
IF9faW50MzIKKyNkZWZpbmUgdV9pbnQxNl90ICB1bnNpZ25lZCBfX2ludDE2CisjZGVmaW5lIHVf
aW50OF90ICAgdW5zaWduZWQgX19pbnQ4CisjZGVmaW5lIHVfY2hhciAgICAgdW5zaWduZWQgY2hh
cgorI2RlZmluZSBuX3Nob3J0ICAgIHVuc2lnbmVkIF9faW50MTYKKyNkZWZpbmUgdV9zaG9ydCAg
ICB1bnNpZ25lZCBfX2ludDE2CisjZGVmaW5lIG5fdGltZSAgICAgdW5zaWduZWQgX19pbnQzMgor
I2RlZmluZSBzYV9mYW1pbHlfdCB1bnNpZ25lZCBfX2ludDgKKyNkZWZpbmUgc3NpemVfdCAgICBf
X2ludDY0CisjZGVmaW5lIF9fZnVuY19fCV9fRlVOQ1RJT05fXworCisjaWZuZGVmIEVXT1VMREJM
T0NLCisjZGVmaW5lIEVXT1VMREJMT0NLICAgICAgICAgICAgIFdTQUVXT1VMREJMT0NLCisjZW5k
aWYKKyNpZm5kZWYgRUlOUFJPR1JFU1MKKyNkZWZpbmUgRUlOUFJPR1JFU1MgICAgICAgICAgICAg
V1NBRUlOUFJPR1JFU1MKKyNlbmRpZgorI2lmbmRlZiBFQUxSRUFEWQorI2RlZmluZSBFQUxSRUFE
WSAgICAgICAgICAgICAgICBXU0FFQUxSRUFEWQorI2VuZGlmCisjaWZuZGVmIEVOT1RTT0NLCisj
ZGVmaW5lIEVOT1RTT0NLICAgICAgICAgICAgICAgIFdTQUVOT1RTT0NLCisjZW5kaWYKKyNpZm5k
ZWYgRURFU1RBRERSUkVRCisjZGVmaW5lIEVERVNUQUREUlJFUSAgICAgICAgICAgIFdTQUVERVNU
QUREUlJFUQorI2VuZGlmCisjaWZuZGVmIEVNU0dTSVpFCisjZGVmaW5lIEVNU0dTSVpFICAgICAg
ICAgICAgICAgIFdTQUVNU0dTSVpFCisjZW5kaWYKKyNpZm5kZWYgRVBST1RPVFlQRQorI2RlZmlu
ZSBFUFJPVE9UWVBFICAgICAgICAgICAgICBXU0FFUFJPVE9UWVBFCisjZW5kaWYKKyNpZm5kZWYg
RU5PUFJPVE9PUFQKKyNkZWZpbmUgRU5PUFJPVE9PUFQgICAgICAgICAgICAgV1NBRU5PUFJPVE9P
UFQKKyNlbmRpZgorI2lmbmRlZiBFUFJPVE9OT1NVUFBPUlQKKyNkZWZpbmUgRVBST1RPTk9TVVBQ
T1JUICAgICAgICAgV1NBRVBST1RPTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRVNPQ0tUTk9T
VVBQT1JUCisjZGVmaW5lIEVTT0NLVE5PU1VQUE9SVCAgICAgICAgIFdTQUVTT0NLVE5PU1VQUE9S
VAorI2VuZGlmCisjaWZuZGVmIEVPUE5PVFNVUFAKKyNkZWZpbmUgRU9QTk9UU1VQUCAgICAgICAg
ICAgICAgV1NBRU9QTk9UU1VQUAorI2VuZGlmCisjaWZuZGVmIEVOT1RTVVAKKyNkZWZpbmUgRU5P
VFNVUCAgICAgICAgICAgICAgICAgV1NBRU9QTk9UU1VQUAorI2VuZGlmCisjaWZuZGVmIEVQRk5P
U1VQUE9SVAorI2RlZmluZSBFUEZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFUEZOT1NVUFBPUlQK
KyNlbmRpZgorI2lmbmRlZiBFQUZOT1NVUFBPUlQKKyNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAg
ICAgICAgV1NBRUFGTk9TVVBQT1JUCisjZW5kaWYKKyNpZm5kZWYgRUFERFJJTlVTRQorI2RlZmlu
ZSBFQUREUklOVVNFICAgICAgICAgICAgICBXU0FFQUREUklOVVNFCisjZW5kaWYKKyNpZm5kZWYg
RUFERFJOT1RBVkFJTAorI2RlZmluZSBFQUREUk5PVEFWQUlMICAgICAgICAgICBXU0FFQUREUk5P
VEFWQUlMCisjZW5kaWYKKyNpZm5kZWYgRU5FVERPV04KKyNkZWZpbmUgRU5FVERPV04gICAgICAg
ICAgICAgICAgV1NBRU5FVERPV04KKyNlbmRpZgorI2lmbmRlZiBFTkVUVU5SRUFDSAorI2RlZmlu
ZSBFTkVUVU5SRUFDSCAgICAgICAgICAgICBXU0FFTkVUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVm
IEVORVRSRVNFVAorI2RlZmluZSBFTkVUUkVTRVQgICAgICAgICAgICAgICBXU0FFTkVUUkVTRVQK
KyNlbmRpZgorI2lmbmRlZiBFQ09OTkFCT1JURUQKKyNkZWZpbmUgRUNPTk5BQk9SVEVEICAgICAg
ICAgICAgV1NBRUNPTk5BQk9SVEVECisjZW5kaWYKKyNpZm5kZWYgRUNPTk5SRVNFVAorI2RlZmlu
ZSBFQ09OTlJFU0VUICAgICAgICAgICAgICBXU0FFQ09OTlJFU0VUCisjZW5kaWYKKyNpZm5kZWYg
RU5PQlVGUworI2RlZmluZSBFTk9CVUZTICAgICAgICAgICAgICAgICBXU0FFTk9CVUZTCisjZW5k
aWYKKyNpZm5kZWYgRUlTQ09OTgorI2RlZmluZSBFSVNDT05OICAgICAgICAgICAgICAgICBXU0FF
SVNDT05OCisjZW5kaWYKKyNpZm5kZWYgRU5PVENPTk4KKyNkZWZpbmUgRU5PVENPTk4gICAgICAg
ICAgICAgICAgV1NBRU5PVENPTk4KKyNlbmRpZgorI2lmbmRlZiBFU0hVVERPV04KKyNkZWZpbmUg
RVNIVVRET1dOICAgICAgICAgICAgICAgV1NBRVNIVVRET1dOCisjZW5kaWYKKyNpZm5kZWYgRVRP
T01BTllSRUZTCisjZGVmaW5lIEVUT09NQU5ZUkVGUyAgICAgICAgICAgIFdTQUVUT09NQU5ZUkVG
UworI2VuZGlmCisjaWZuZGVmIEVUSU1FRE9VVAorI2RlZmluZSBFVElNRURPVVQgICAgICAgICAg
ICAgICBXU0FFVElNRURPVVQKKyNlbmRpZgorI2lmbmRlZiBFQ09OTlJFRlVTRUQKKyNkZWZpbmUg
RUNPTk5SRUZVU0VEICAgICAgICAgICAgV1NBRUNPTk5SRUZVU0VECisjZW5kaWYKKyNpZm5kZWYg
RUxPT1AKKyNkZWZpbmUgRUxPT1AgICAgICAgICAgICAgICAgICAgV1NBRUxPT1AKKyNlbmRpZgor
I2lmbmRlZiBFSE9TVERPV04KKyNkZWZpbmUgRUhPU1RET1dOICAgICAgICAgICAgICAgV1NBRUhP
U1RET1dOCisjZW5kaWYKKyNpZm5kZWYgRUhPU1RVTlJFQUNICisjZGVmaW5lIEVIT1NUVU5SRUFD
SCAgICAgICAgICAgIFdTQUVIT1NUVU5SRUFDSAorI2VuZGlmCisjaWZuZGVmIEVQUk9DTElNCisj
ZGVmaW5lIEVQUk9DTElNICAgICAgICAgICAgICAgIFdTQUVQUk9DTElNCisjZW5kaWYKKyNpZm5k
ZWYgRVVTRVJTCisjZGVmaW5lIEVVU0VSUyAgICAgICAgICAgICAgICAgIFdTQUVVU0VSUworI2Vu
ZGlmCisjaWZuZGVmIEVEUVVPVAorI2RlZmluZSBFRFFVT1QgICAgICAgICAgICAgICAgICBXU0FF
RFFVT1QKKyNlbmRpZgorI2lmbmRlZiBFU1RBTEUKKyNkZWZpbmUgRVNUQUxFICAgICAgICAgICAg
ICAgICAgV1NBRVNUQUxFCisjZW5kaWYKKyNpZm5kZWYgRVJFTU9URQorI2RlZmluZSBFUkVNT1RF
ICAgICAgICAgICAgICAgICBXU0FFUkVNT1RFCisjZW5kaWYKKwordHlwZWRlZiBjaGFyKiBjYWRk
cl90OworCisjZGVmaW5lIGJ6ZXJvKGJ1ZiwgbGVuKSBtZW1zZXQoYnVmLCAwLCBsZW4pCisjZGVm
aW5lIGJjb3B5KHNyY0tleSwgZHN0S2V5LCBsZW4pIG1lbWNweShkc3RLZXksIHNyY0tleSwgbGVu
KQorI2lmIF9NU0NfVkVSIDwgMTkwMAorI2RlZmluZSBzbnByaW50ZihkYXRhLCBzaXplLCBmb3Jt
YXQsIC4uLikgX3NucHJpbnRmX3MoZGF0YSwgc2l6ZSwgX1RSVU5DQVRFLCBmb3JtYXQsIF9fVkFf
QVJHU19fKQorI2VuZGlmCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2RlZmluZSBfX2lubGlu
ZV9fIF9faW5saW5lCisjZGVmaW5lCU1TR19FT1IJCTB4OAkJLyogZGF0YSBjb21wbGV0ZXMgcmVj
b3JkICovCisjZGVmaW5lCU1TR19ET05UV0FJVAkweDgwCQkvKiB0aGlzIG1lc3NhZ2Ugc2hvdWxk
IGJlIG5vbmJsb2NraW5nICovCisKKyNpZmRlZiBDTVNHX0RBVEEKKyN1bmRlZiBDTVNHX0RBVEEK
KyNlbmRpZgorLyoKKyAqIFRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgc2hvdWxkIGFwcGx5IGlm
ZiBXSU5WRVIgPCAweDA2MDAKKyAqIGJ1dCB0aGF0IGNoZWNrIGRvZXNuJ3Qgd29yayBpbiBhbGwg
Y2FzZXMuIFNvIGJlIG1vcmUgcGVkYW50aWMuLi4KKyAqLworI2RlZmluZSBDTVNHX0RBVEEoeCkg
V1NBX0NNU0dfREFUQSh4KQorI2RlZmluZSBDTVNHX0FMSUdOKHgpIFdTQV9DTVNHREFUQV9BTElH
Tih4KQorI2lmbmRlZiBDTVNHX0ZJUlNUSERSCisjZGVmaW5lIENNU0dfRklSU1RIRFIoeCkgV1NB
X0NNU0dfRklSU1RIRFIoeCkKKyNlbmRpZgorI2lmbmRlZiBDTVNHX05YVEhEUgorI2RlZmluZSBD
TVNHX05YVEhEUih4LCB5KSBXU0FfQ01TR19OWFRIRFIoeCwgeSkKKyNlbmRpZgorI2lmbmRlZiBD
TVNHX1NQQUNFCisjZGVmaW5lIENNU0dfU1BBQ0UoeCkgV1NBX0NNU0dfU1BBQ0UoeCkKKyNlbmRp
ZgorI2lmbmRlZiBDTVNHX0xFTgorI2RlZmluZSBDTVNHX0xFTih4KSBXU0FfQ01TR19MRU4oeCkK
KyNlbmRpZgorCisvKioqKiAgZnJvbSBzY3RwX29zX3dpbmRvd3MuaCAqKioqKioqKioqKioqKiov
CisjZGVmaW5lIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmbikJKChpZm4pLT5pZm5fdHlwZSA9PSBJ
RlRfTE9PUCkKKyNkZWZpbmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8pICgocm8pLT5yb19y
dCAmJiAocm8pLT5yb19ydC0+cnRfaWZhICYmIChybyktPnJvX3J0LT5ydF9pZmEtPmlmYV9pZnAg
JiYgKHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9PSBJRlRfTE9PUCkKKwor
LyoKKyAqIEFjY2VzcyB0byBJRk4ncyB0byBoZWxwIHdpdGggc3JjLWFkZHItc2VsZWN0aW9uCisg
Ki8KKy8qIFRoaXMgY291bGQgcmV0dXJuIFZPSUQgaWYgdGhlIGluZGV4IHdvcmtzIGJ1dCBmb3Ig
QlNEIHdlIHByb3ZpZGUgYm90aC4gKi8KKyNkZWZpbmUgU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9S
T1VURShybykgXAorCSgocm8pLT5yb19ydCAhPSBOVUxMID8gKHJvKS0+cm9fcnQtPnJ0X2lmcCA6
IE5VTEwpCisjZGVmaW5lIFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTihybykgXAorCSgocm8pLT5y
b19ydCAmJiAocm8pLT5yb19ydC0+cnRfaWZwKQorLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRF
KHJvKSAxIC8qIGNvbXBpbGVzLi4uICBUT0RPIHVzZSByb3V0aW5nIHNvY2tldCB0byBkZXRlcm1p
bmUgKi8KKworI2RlZmluZSBCSUdfRU5ESUFOIDEKKyNkZWZpbmUgTElUVExFX0VORElBTiAwCisj
aWZkZWYgV09SRFNfQklHRU5ESUFOCisjZGVmaW5lIEJZVEVfT1JERVIgQklHX0VORElBTgorI2Vs
c2UKKyNkZWZpbmUgQllURV9PUkRFUiBMSVRUTEVfRU5ESUFOCisjZW5kaWYKKworI2Vsc2UgLyog
IWRlZmluZWQoVXNlcnNwYWNlX29zX1dpbmRvd3MpICovCisjaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0ZyZWVCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgpIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX09w
ZW5CU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19GdWNoc2lhKQorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNlbmRpZgordHlwZWRlZiBw
dGhyZWFkX211dGV4X3QgdXNlcmxhbmRfbXV0ZXhfdDsKK3R5cGVkZWYgcHRocmVhZF9jb25kX3Qg
dXNlcmxhbmRfY29uZF90OwordHlwZWRlZiBwdGhyZWFkX3QgdXNlcmxhbmRfdGhyZWFkX3Q7Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OYUNsKQorCisjZGVmaW5lIElGTkFNU0laIDY0CisKKyNkZWZpbmUgcmFu
ZG9tKCkgcmFuZCgpCisjZGVmaW5lIHNyYW5kb20ocykgc3JhbmQocykKKworI2RlZmluZSB0aW1l
cmFkZCh0dnAsIHV2cCwgdnZwKSAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisJICAgICh2dnApLT50dl9zZWMgPSAodHZwKS0+dHZfc2VjICsgKHV2cCktPnR2X3NlYzsgIFwK
KwkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyArICh1dnApLT50dl91c2VjOyAgXAor
CQlpZiAoKHZ2cCktPnR2X3VzZWMgPj0gMTAwMDAwMCkgeyAgICAgICAgICAgICAgICAgICBcCisJ
CSAgICAodnZwKS0+dHZfc2VjKys7ICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJKHZ2cCkt
PnR2X3VzZWMgLT0gMTAwMDAwMDsgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHRpbWVyc3ViKHR2cCwgdXZwLCB2dnAp
ICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkgICAgKHZ2cCktPnR2X3Nl
YyA9ICh0dnApLT50dl9zZWMgLSAodXZwKS0+dHZfc2VjOyAgXAorCQkodnZwKS0+dHZfdXNlYyA9
ICh0dnApLT50dl91c2VjIC0gKHV2cCktPnR2X3VzZWM7ICBcCisJCWlmICgodnZwKS0+dHZfdXNl
YyA8IDApIHsgICAgICAgICAgICAgICAgICAgXAorCQkgICAgKHZ2cCktPnR2X3NlYy0tOyAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKwkJCSh2dnApLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAg
ICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisKKy8q
I2luY2x1ZGUgPHBhY2tvbi5oPgorI3ByYWdtYSBwYWNrKHB1c2gsIDEpKi8KK3N0cnVjdCBpcCB7
CisJdV9jaGFyICAgIGlwX2hsOjQsIGlwX3Y6NDsKKwl1X2NoYXIgICAgaXBfdG9zOworCXVfc2hv
cnQgICBpcF9sZW47CisJdV9zaG9ydCAgIGlwX2lkOworCXVfc2hvcnQgICBpcF9vZmY7CisjZGVm
aW5lIElQX1JQIDB4ODAwMAorI2RlZmluZSBJUF9ERiAweDQwMDAKKyNkZWZpbmUgSVBfTUYgMHgy
MDAwCisjZGVmaW5lIElQX09GRk1BU0sgMHgxZmZmCisJdV9jaGFyICAgIGlwX3R0bDsKKwl1X2No
YXIgICAgaXBfcDsKKwl1X3Nob3J0ICAgaXBfc3VtOworCXN0cnVjdCBpbl9hZGRyIGlwX3NyYywg
aXBfZHN0OworfTsKKworc3RydWN0IGlmYWRkcnMgeworCXN0cnVjdCBpZmFkZHJzICAqaWZhX25l
eHQ7CisJY2hhcgkJKmlmYV9uYW1lOworCXVuc2lnbmVkIGludAkJIGlmYV9mbGFnczsKKwlzdHJ1
Y3Qgc29ja2FkZHIJKmlmYV9hZGRyOworCXN0cnVjdCBzb2NrYWRkcgkqaWZhX25ldG1hc2s7CisJ
c3RydWN0IHNvY2thZGRyCSppZmFfZHN0YWRkcjsKKwl2b2lkCQkqaWZhX2RhdGE7Cit9OworCitz
dHJ1Y3QgdWRwaGRyIHsKKwl1aW50MTZfdCB1aF9zcG9ydDsKKwl1aW50MTZfdCB1aF9kcG9ydDsK
Kwl1aW50MTZfdCB1aF91bGVuOworCXVpbnQxNl90IHVoX3N1bTsKK307CisKK3N0cnVjdCBpb3Zl
YyB7CisJc2l6ZV90IGxlbjsKKwljaGFyICpidWY7Cit9OworCisjZGVmaW5lIGlvdl9iYXNlIGJ1
ZgorI2RlZmluZSBpb3ZfbGVuCWxlbgorCitzdHJ1Y3QgaWZhX21zZ2hkciB7CisJdWludDE2X3Qg
ICAgICAgICBpZmFtX21zZ2xlbjsKKwl1bnNpZ25lZCBjaGFyICAgIGlmYW1fdmVyc2lvbjsKKwl1
bnNpZ25lZCBjaGFyICAgIGlmYW1fdHlwZTsKKwl1aW50MzJfdCAgICAgICAgIGlmYW1fYWRkcnM7
CisJdWludDMyX3QgICAgICAgICBpZmFtX2ZsYWdzOworCXVpbnQxNl90ICAgICAgICAgaWZhbV9p
bmRleDsKKwl1aW50MzJfdCAgICAgICAgIGlmYW1fbWV0cmljOworfTsKKworc3RydWN0IGlmZGV2
bXR1IHsKKwlpbnQgaWZkbV9jdXJyZW50OworCWludCBpZmRtX21pbjsKKwlpbnQgaWZkbV9tYXg7
Cit9OworCitzdHJ1Y3QgaWZrcGkgeworCXVuc2lnbmVkIGludCAgaWZrX21vZHVsZV9pZDsKKwl1
bnNpZ25lZCBpbnQgIGlma190eXBlOworCXVuaW9uIHsKKwkJdm9pZCAqaWZrX3B0cjsKKwkJaW50
IGlma192YWx1ZTsKKwl9IGlma19kYXRhOworfTsKKworc3RydWN0IGlmcmVxIHsKKwljaGFyICAg
IGlmcl9uYW1lWzE2XTsKKwl1bmlvbiB7CisJCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7CisJ
CXN0cnVjdCBzb2NrYWRkciBpZnJ1X2RzdGFkZHI7CisJCXN0cnVjdCBzb2NrYWRkciBpZnJ1X2Jy
b2FkYWRkcjsKKwkJc2hvcnQgIGlmcnVfZmxhZ3M7CisJCWludCBpZnJ1X21ldHJpYzsKKwkJaW50
IGlmcnVfbXR1OworCQlpbnQgaWZydV9waHlzOworCQlpbnQgaWZydV9tZWRpYTsKKwkJaW50ICAg
IGlmcnVfaW50dmFsOworCQljaGFyKiAgaWZydV9kYXRhOworCQlzdHJ1Y3QgaWZkZXZtdHUgaWZy
dV9kZXZtdHU7CisJCXN0cnVjdCBpZmtwaSAgaWZydV9rcGk7CisJCXVpbnQzMl90IGlmcnVfd2Fr
ZV9mbGFnczsKKwl9IGlmcl9pZnJ1OworI2RlZmluZSBpZnJfYWRkciAgICAgICAgaWZyX2lmcnUu
aWZydV9hZGRyCisjZGVmaW5lIGlmcl9kc3RhZGRyICAgICBpZnJfaWZydS5pZnJ1X2RzdGFkZHIK
KyNkZWZpbmUgaWZyX2Jyb2FkYWRkciAgIGlmcl9pZnJ1LmlmcnVfYnJvYWRhZGRyCisjZGVmaW5l
IGlmcl9mbGFncyAgICAgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzBdCisjZGVmaW5lIGlmcl9wcmV2
ZmxhZ3MgICBpZnJfaWZydS5pZnJ1X2ZsYWdzWzFdCisjZGVmaW5lIGlmcl9tZXRyaWMgICAgICBp
ZnJfaWZydS5pZnJ1X21ldHJpYworI2RlZmluZSBpZnJfbXR1ICAgICAgICAgaWZyX2lmcnUuaWZy
dV9tdHUKKyNkZWZpbmUgaWZyX3BoeXMgICAgICAgIGlmcl9pZnJ1LmlmcnVfcGh5cworI2RlZmlu
ZSBpZnJfbWVkaWEgICAgICAgaWZyX2lmcnUuaWZydV9tZWRpYQorI2RlZmluZSBpZnJfZGF0YSAg
ICAgICAgaWZyX2lmcnUuaWZydV9kYXRhCisjZGVmaW5lIGlmcl9kZXZtdHUgICAgICBpZnJfaWZy
dS5pZnJ1X2Rldm10dQorI2RlZmluZSBpZnJfaW50dmFsICAgICAgaWZyX2lmcnUuaWZydV9pbnR2
YWwKKyNkZWZpbmUgaWZyX2twaSAgICAgICAgIGlmcl9pZnJ1LmlmcnVfa3BpCisjZGVmaW5lIGlm
cl93YWtlX2ZsYWdzICBpZnJfaWZydS5pZnJ1X3dha2VfZmxhZ3MKK307CisKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQoraW50IFdpbl9nZXRpZmFkZHJzKHN0
cnVjdCBpZmFkZHJzKiopOworI2RlZmluZSBnZXRpZmFkZHJzKGludGVyZmFjZXMpICAoaW50KVdp
bl9nZXRpZmFkZHJzKGludGVyZmFjZXMpCitpbnQgd2luX2lmX25hbWV0b2luZGV4KGNvbnN0IGNo
YXIgKik7CisjZGVmaW5lIGlmX25hbWV0b2luZGV4KHgpIHdpbl9pZl9uYW1ldG9pbmRleCh4KQor
I2VuZGlmCisKKyNkZWZpbmUgbXR4X2xvY2soYXJnMSkKKyNkZWZpbmUgbXR4X3VubG9jayhhcmcx
KQorI2RlZmluZSBtdHhfYXNzZXJ0KGFyZzEsYXJnMikKKyNkZWZpbmUgTUFfT1dORUQgNyAvKiBz
eXMvbXV0ZXguaCB0eXBpY2FsbHkgb24gRnJlZUJTRCAqLworI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX0ZyZWVCU0QpCitzdHJ1Y3QgbXR4IHtpbnQgZHVtbXk7fTsKKyNpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OZXRCU0QpCitzdHJ1Y3Qgc2VsaW5mbyB7aW50IGR1bW15O307CisjZW5k
aWYKK3N0cnVjdCBzeCB7aW50IGR1bW15O307CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+
CisjaW5jbHVkZSA8c3RyaW5nLmg+CisvKiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ICBpbiBGcmVl
QlNEIGRlZmluZXMgTVNJWkUgKi8KKy8qICNpbmNsdWRlIDxzeXMva3RyLmg+ICovCisvKiAjaW5j
bHVkZSA8c3lzL3N5c3RtLmg+ICovCisjaWYgZGVmaW5lZChIQVZFX1NZU19RVUVVRV9IKQorI2lu
Y2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX3F1ZXVlLmg+CisjZW5k
aWYKKyNpbmNsdWRlIDx1c2VyX21hbGxvYy5oPgorLyogI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4g
Ki8KKy8qICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+ICovCisvKiAjaW5jbHVkZSA8c3lzL3Byb3Rv
c3cuaD4gKi8KKy8qIG9uIEZyZWVCU0QsIHRoaXMgcmVzdWx0cyBpbiBhIHJlZGVmaW50aW9uIG9m
IFNPQ0soQlVGKV8oVU4pTE9DSyBhbmQKKyAqICB1a25vd24gdHlwZSBvZiBzdHJ1Y3QgbXR4IGZv
ciBzYl9tdHggaW4gc3RydWN0IHNvY2tidWYgKi8KKyNpbmNsdWRlICJ1c2VyX3NvY2tldHZhci5o
IiAvKiBNQUxMT0NfREVDTEFSRSdzIE1fUENCLiBSZXBsYWNlbWVudCBmb3Igc3lzL3NvY2tldHZh
ci5oICovCisvKiAjaW5jbHVkZSA8c3lzL2phaWwuaD4gKi8KKy8qICNpbmNsdWRlIDxzeXMvc3lz
Y3RsLmg+ICovCisjaW5jbHVkZSA8dXNlcl9lbnZpcm9ubWVudC5oPgorI2luY2x1ZGUgPHVzZXJf
YXRvbWljLmg+CisjaW5jbHVkZSA8dXNlcl9tYnVmLmg+CisvKiAjaW5jbHVkZSA8c3lzL3Vpby5o
PiAqLworLyogI2luY2x1ZGUgPHN5cy9sb2NrLmg+ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAKKyNpbmNsdWRlIDxzeXMvcndsb2NrLmg+
CisjZW5kaWYKKy8qICNpbmNsdWRlIDxzeXMva3RocmVhZC5oPiAqLworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCisjaW5jbHVkZSA8c3lzL3By
aXYuaD4KKyNlbmRpZgorLyogI2luY2x1ZGUgPHN5cy9yYW5kb20uaD4gKi8KKyNpbmNsdWRlIDxs
aW1pdHMuaD4KKy8qICNpbmNsdWRlIDxtYWNoaW5lL2NwdS5oPiAqLworCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19EYXJ3aW4pCisvKiB3YXMgYSAwIGJ5dGUgZmlsZS4gIG5lZWRlZCBmb3Ig
c3RydWN0cyBpZl9kYXRhKDY0KSBhbmQgbmV0X2V2ZW50X2RhdGEgKi8KKyNpbmNsdWRlIDxuZXQv
aWZfdmFyLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisj
aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisvKiAjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPiB3YXMg
YSAwIGJ5dGUgZmlsZS4gIGNhdXNlcyBzdHJ1Y3QgbXR4IHJlZGVmaW5pdGlvbiAqLworI2VuZGlm
CisvKiBPT1RCIG9ubHkgLSBkdW1teSByb3V0ZSB1c2VkIGF0IHRoZSBtb21lbnQuIHNob3VsZCB3
ZSBwb3J0IHJvdXRlIHRvCisgKiAgdXNlcnNwYWNlIGFzIHdlbGw/ICovCisvKiBvbiBGcmVlQlNE
LCB0aGlzIHJlc3VsdHMgaW4gYSByZWRlZmludGlvbiBvZiBzdHJ1Y3Qgcm91dGUgKi8KKy8qICNp
bmNsdWRlIDxuZXQvcm91dGUuaD4gKi8KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQorI2luY2x1ZGUgPG5ldC9pZi5o
PgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX05FVElO
RVRfSVBfSUNNUF9IKQorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2Vsc2UKKyNpbmNs
dWRlIDx1c2VyX2lwX2ljbXAuaD4KKyNlbmRpZgorLyogI2luY2x1ZGUgPG5ldGluZXQvaW5fcGNi
Lmg+IHBvcnRlZCB0byB1c2Vyc3BhY2UgKi8KKyNpbmNsdWRlIDx1c2VyX2lucGNiLmg+CisKKy8q
IGZvciBnZXRpZmFkZHJzICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgIWRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5F
VDYpCisjaW5jbHVkZSA8aWZhZGRycy5oPgorI2VuZGlmCisKKy8qIGZvciBpb2N0bCAqLworI2lu
Y2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKiBmb3IgY2xvc2UsIGV0Yy4gKi8KKyNpbmNsdWRlIDx1
bmlzdGQuaD4KKyNlbmRpZgorCisvKiBsb3RzIG9mIGVycm5vJ3MgdXNlZCBhbmQgbmVlZGVkIGlu
IHVzZXJzcGFjZSAqLworCisvKiBmb3Igb2Zmc2V0b2YgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4K
KworI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKSAmJiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQorLyogZm9yIHB0aHJlYWRfbXV0ZXhfbG9jaywgcHRocmVhZF9t
dXRleF91bmxvY2ssIGV0Yy4gKi8KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjZW5kaWYKKworI2lm
ZGVmIElQU0VDCisjaW5jbHVkZSA8bmV0aXBzZWMvaXBzZWMuaD4KKyNpbmNsdWRlIDxuZXRpcHNl
Yy9rZXkuaD4KKyNlbmRpZgkJCQkvKiBJUFNFQyAqLworCisjaWZkZWYgSU5FVDYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisjaW5jbHVkZSA8c3lzL2RvbWFpbi5oPgorI2Vu
ZGlmCisjaWZkZWYgSVBTRUMKKyNpbmNsdWRlIDxuZXRpcHNlYy9pcHNlYzYuaD4KKyNlbmRpZgor
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC9p
cDYuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGlu
dXgpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX09wZW5CU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpbmNs
dWRlICJ1c2VyX2lwNl92YXIuaCIKKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldDYvaXA2X3Zhci5o
PgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQorI2luY2x1ZGUg
PG5ldGluZXQ2L2luNl9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZwcm90b3N3Lmg+Cisv
KiAjaW5jbHVkZSA8bmV0aW5ldDYvbmQ2Lmg+IHdhcyBhIDAgYnl0ZSBmaWxlICovCisjaW5jbHVk
ZSA8bmV0aW5ldDYvc2NvcGU2X3Zhci5oPgorI2VuZGlmCisjZW5kaWYgLyogSU5FVDYgKi8KKwor
I2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCkKKyNpbmNsdWRlIDxzeXMvZmls
ZS5oPgorI2luY2x1ZGUgPHN5cy9maWxlZGVzYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJuZXRp
bmV0L3NjdHBfc2hhMS5oIgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisjaW5j
bHVkZSA8bmV0aW5ldC9pcF9vcHRpb25zLmg+CisjZW5kaWYKKworI2RlZmluZSBTQ1RQX1BSSU5U
RiguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoU0NUUF9CQVNF
X1ZBUihkZWJ1Z19wcmludGYpKSB7ICAgICAgICAgICAgICAgIFwKKwkJU0NUUF9CQVNFX1ZBUihk
ZWJ1Z19wcmludGYpKF9fVkFfQVJHU19fKTsgXAorCX0KKworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisjaWZuZGVmIGluNnBjYgorI2RlZmluZSBpbjZwY2IJCWlucGNiCisjZW5kaWYKKyNlbmRp
ZgorLyogRGVjbGFyZSBhbGwgdGhlIG1hbGxvYyBuYW1lcyBmb3IgYWxsIHRoZSB2YXJpb3VzIG1h
bGxvY3MgKi8KK01BTExPQ19ERUNMQVJFKFNDVFBfTV9NQVApOworTUFMTE9DX0RFQ0xBUkUoU0NU
UF9NX1NUUk1JKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9TVFJNTyk7CitNQUxMT0NfREVDTEFS
RShTQ1RQX01fQVNDX0FERFIpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0FTQ19JVCk7CitNQUxM
T0NfREVDTEFSRShTQ1RQX01fQVVUSF9DTCk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQVVUSF9L
WSk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQVVUSF9ITCk7CitNQUxMT0NfREVDTEFSRShTQ1RQ
X01fQVVUSF9JRik7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fU1RSRVNFVCk7CitNQUxMT0NfREVD
TEFSRShTQ1RQX01fQ01TRyk7CitNQUxMT0NfREVDTEFSRShTQ1RQX01fQ09QWUFMKTsKK01BTExP
Q19ERUNMQVJFKFNDVFBfTV9WUkYpOworTUFMTE9DX0RFQ0xBUkUoU0NUUF9NX0lGQSk7CitNQUxM
T0NfREVDTEFSRShTQ1RQX01fSUZOKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9USU1XKTsKK01B
TExPQ19ERUNMQVJFKFNDVFBfTV9NVlJGKTsKK01BTExPQ19ERUNMQVJFKFNDVFBfTV9JVEVSKTsK
K01BTExPQ19ERUNMQVJFKFNDVFBfTV9TT0NLT1BUKTsKKworI2lmIGRlZmluZWQoU0NUUF9MT0NB
TF9UUkFDRV9CVUYpCisKKyNkZWZpbmUgU0NUUF9HRVRfQ1lDTEVDT1VOVCBnZXRfY3ljbGVjb3Vu
dCgpCisjZGVmaW5lIFNDVFBfQ1RSNiBzY3RwX2xvZ190cmFjZQorCisjZWxzZQorI2RlZmluZSBT
Q1RQX0NUUjYgQ1RSNgorI2VuZGlmCisKKy8qIEVtcHR5IGt0ciBzdGF0ZW1lbnQgZm9yIF9Vc2Vy
c3BhY2VfXyAoc2ltaWxhciB0byB3aGF0IGlzIGRvbmUgZm9yIG1hYykgKi8KKyNkZWZpbmUJQ1RS
NihtLCBkLCBwMSwgcDIsIHAzLCBwNCwgcDUsIHA2KQorCisKKworI2RlZmluZSBTQ1RQX0JBU0Vf
SU5GTyhfX20pIHN5c3RlbV9iYXNlX2luZm8uc2N0cHBjYmluZm8uX19tCisjZGVmaW5lIFNDVFBf
QkFTRV9TVEFUUyBzeXN0ZW1fYmFzZV9pbmZvLnNjdHBzdGF0CisjZGVmaW5lIFNDVFBfQkFTRV9T
VEFUKF9fbSkgICAgIHN5c3RlbV9iYXNlX2luZm8uc2N0cHN0YXQuX19tCisjZGVmaW5lIFNDVFBf
QkFTRV9TWVNDVEwoX19tKSBzeXN0ZW1fYmFzZV9pbmZvLnNjdHBzeXNjdGwuX19tCisjZGVmaW5l
IFNDVFBfQkFTRV9WQVIoX19tKSBzeXN0ZW1fYmFzZV9pbmZvLl9fbQorCisvKgorICoKKyAqLwor
I2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKKyNkZWZpbmUgVVNFUl9BRERSX05V
TEwJKE5VTEwpCQkvKiBGSVggTUU6IHRlbXAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChTQ1RQ
X0RFQlVHKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNkZWZpbmUgU0NU
UERCRyhsZXZlbCwgLi4uKQkJCQkJXAorewkJCQkJCQkJXAorCWRvIHsJCQkJCQkJXAorCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlYnVnX29uKSAmIGxldmVsKSB7CVwKKwkJCVNDVFBfUFJJ
TlRGKF9fVkFfQVJHU19fKTsJCVwKKwkJfQkJCQkJCVwKKwl9IHdoaWxlICgwKTsJCQkJCQlcCit9
CisjZGVmaW5lIFNDVFBEQkdfQUREUihsZXZlbCwgYWRkcikJCQkJXAorewkJCQkJCQkJXAorCWRv
IHsJCQkJCQkJXAorCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlYnVnX29uKSAmIGxldmVs
ICkgewlcCisJCSAgICBzY3RwX3ByaW50X2FkZHJlc3MoYWRkcik7CQkJXAorCQl9CQkJCQkJXAor
CX0gd2hpbGUgKDApOwkJCQkJCVwKK30KKyNlbHNlCisjZGVmaW5lIFNDVFBEQkcobGV2ZWwsIC4u
LikKKyNkZWZpbmUgU0NUUERCR19BRERSKGxldmVsLCBhZGRyKQorI2VuZGlmCisKKyNpZmRlZiBT
Q1RQX0xUUkFDRV9DSFVOS1MKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hLKGEsIGIsIGMsIGQpIGlm
KHNjdHBfbG9nZ2luZ19sZXZlbCAmIFNDVFBfTFRSQUNFX0NIVU5LX0VOQUJMRSkgQ1RSNihLVFJf
U1VCU1lTLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLCBTQ1RQX0xPR19DSFVOS19QUk9DLCAw
LCBhLCBiLCBjLCBkKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9MVFJBQ0VfQ0hLKGEsIGIsIGMsIGQp
CisjZW5kaWYKKworI2lmZGVmIFNDVFBfTFRSQUNFX0VSUk9SUworI2RlZmluZSBTQ1RQX0xUUkFD
RV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIG5ldCwgZmlsZSwgZXJyKSBcCisJaWYgKHNjdHBf
bG9nZ2luZ19sZXZlbCAmIFNDVFBfTFRSQUNFX0VSUk9SX0VOQUJMRSkgXAorCQlTQ1RQX1BSSU5U
RigibWJ1ZjolcCBpbnA6JXAgc3RjYjolcCBuZXQ6JXAgZmlsZToleCBsaW5lOiVkIGVycm9yOiVk
XG4iLCBcCisJCSAgICAgICAgICAgICh2b2lkICopbSwgKHZvaWQgKilpbnAsICh2b2lkICopc3Rj
YiwgKHZvaWQgKiluZXQsIGZpbGUsIF9fTElORV9fLCBlcnIpOworI2RlZmluZSBTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBmaWxlLCBlcnIpIFwKKwlpZiAoc2N0cF9sb2dnaW5n
X2xldmVsICYgU0NUUF9MVFJBQ0VfRVJST1JfRU5BQkxFKSBcCisJCVNDVFBfUFJJTlRGKCJpbnA6
JXAgc3RjYjolcCBuZXQ6JXAgZmlsZToleCBsaW5lOiVkIGVycm9yOiVkXG4iLCBcCisJCSAgICAg
ICAgICAgICh2b2lkICopaW5wLCAodm9pZCAqKXN0Y2IsICh2b2lkICopbmV0LCBmaWxlLCBfX0xJ
TkVfXywgZXJyKTsKKyNlbHNlCisjZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlu
cCwgc3RjYiwgbmV0LCBmaWxlLCBlcnIpCisjZGVmaW5lIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBzdGNiLCBuZXQsIGZpbGUsIGVycikKKyNlbmRpZgorCisKKy8qCisgKiBMb2NhbCBhZGRyZXNz
IGFuZCBpbnRlcmZhY2UgbGlzdCBoYW5kbGluZworICovCisjZGVmaW5lIFNDVFBfTUFYX1ZSRl9J
RAkJMAorI2RlZmluZSBTQ1RQX1NJWkVfT0ZfVlJGX0hBU0gJMworI2RlZmluZSBTQ1RQX0lGTkFN
U0laCQlJRk5BTVNJWgorI2RlZmluZSBTQ1RQX0RFRkFVTFRfVlJGSUQJMAorI2RlZmluZSBTQ1RQ
X1ZSRl9BRERSX0hBU0hfU0laRQkxNgorI2RlZmluZSBTQ1RQX1ZSRl9JRk5fSEFTSF9TSVpFCTMK
KyNkZWZpbmUJU0NUUF9JTklUX1ZSRl9UQUJMRUlEKHZyZikKKworI2lmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIFNDVFBfSUZOX0lTX0lGVF9MT09QKGlmbikgKHN0
cm5jbXAoKGlmbiktPmlmbl9uYW1lLCAibG8iLCAyKSA9PSAwKQorLyogQlNEIGRlZmluaXRpb24g
Ki8KKy8qICNkZWZpbmUgU0NUUF9ST1VURV9JU19SRUFMX0xPT1Aocm8pICgocm8pLT5yb19ydCAm
JiAocm8pLT5yb19ydC0+cnRfaWZhICYmIChybyktPnJvX3J0LT5ydF9pZmEtPmlmYV9pZnAgJiYg
KHJvKS0+cm9fcnQtPnJ0X2lmYS0+aWZhX2lmcC0+aWZfdHlwZSA9PSBJRlRfTE9PUCkgKi8KKy8q
IG9ubHkgdXNlZCBpbiBJUHY2IHNjZW5hcmlvLCB3aGljaCBpc24ndCBzdXBwb3J0ZWQgeWV0ICov
CisjZGVmaW5lIFNDVFBfUk9VVEVfSVNfUkVBTF9MT09QKHJvKSAwCisKKy8qCisgKiBBY2Nlc3Mg
dG8gSUZOJ3MgdG8gaGVscCB3aXRoIHNyYy1hZGRyLXNlbGVjdGlvbgorICovCisvKiBUaGlzIGNv
dWxkIHJldHVybiBWT0lEIGlmIHRoZSBpbmRleCB3b3JrcyBidXQgZm9yIEJTRCB3ZSBwcm92aWRl
IGJvdGguICovCisjZGVmaW5lIFNDVFBfR0VUX0lGTl9WT0lEX0ZST01fUk9VVEUocm8pICh2b2lk
ICopcm8tPnJvX3J0LT5ydF9pZnAKKyNkZWZpbmUgU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VU
RShybykgMSAvKiBjb21waWxlcy4uLiAgVE9ETyB1c2Ugcm91dGluZyBzb2NrZXQgdG8gZGV0ZXJt
aW5lICovCisjZGVmaW5lIFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTihybykgKChybyktPnJvX3J0
ICYmIChybyktPnJvX3J0LT5ydF9pZnApCisjZW5kaWYKKworLyoKKyAqIGdlbmVyYWwgbWVtb3J5
IGFsbG9jYXRpb24KKyAqLworI2RlZmluZSBTQ1RQX01BTExPQyh2YXIsIHR5cGUsIHNpemUsIG5h
bWUpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCU1BTExPQyh2YXIsIHR5cGUsIHNpemUsIG5hbWUs
IE1fTk9XQUlUKTsJCVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfRlJFRSh2YXIsIHR5
cGUpCUZSRUUodmFyLCB0eXBlKQorCisjZGVmaW5lIFNDVFBfTUFMTE9DX1NPTkFNRSh2YXIsIHR5
cGUsIHNpemUpCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCU1BTExPQyh2YXIsIHR5cGUsIHNpemUs
IE1fU09OQU1FLCAoTV9XQUlUT0sgfCBNX1pFUk8pKTsJXAorCX0gd2hpbGUgKDApCisKKyNkZWZp
bmUgU0NUUF9GUkVFX1NPTkFNRSh2YXIpCUZSRUUodmFyLCBNX1NPTkFNRSkKKworI2RlZmluZSBT
Q1RQX1BST0NFU1NfU1RSVUNUIHN0cnVjdCBwcm9jICoKKworLyoKKyAqIHpvbmUgYWxsb2NhdGlv
biBmdW5jdGlvbnMKKyAqLworCisKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikK
Ky8qdHlwZWRlZiBzaXplX3Qgc2N0cF96b25lX3Q7Ki8KKyNkZWZpbmUgU0NUUF9aT05FX0lOSVQo
em9uZSwgbmFtZSwgc2l6ZSwgbnVtYmVyKSB7IFwKKwl6b25lID0gc2l6ZTsgXAorfQorCisvKiBf
X1VzZXJzcGFjZV9fIFNDVFBfWk9ORV9HRVQ6IGFsbG9jYXRlIGVsZW1lbnQgZnJvbSB0aGUgem9u
ZSAqLworI2RlZmluZSBTQ1RQX1pPTkVfR0VUKHpvbmUsIHR5cGUpICBcCisgICAgICAgICh0eXBl
ICopbWFsbG9jKHpvbmUpOworCisKKy8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05FX0ZSRUU6IGZy
ZWUgZWxlbWVudCBmcm9tIHRoZSB6b25lICovCisjZGVmaW5lIFNDVFBfWk9ORV9GUkVFKHpvbmUs
IGVsZW1lbnQpIHsgXAorCWZyZWUoZWxlbWVudCk7ICBcCit9CisKKyNkZWZpbmUgU0NUUF9aT05F
X0RFU1RST1koem9uZSkKKyNlbHNlCisvKl9fVXNlcnNwYWNlX18KKyAgQ29tcGlsaW5nICYgbGlu
a2luZyBub3RlczogTmVlZHMgbGlidW1lbSwgd2hpY2ggaGFzIGJlZW4gcGxhY2VkIGluIC4vdXNl
cl9saWIKKyAgQWxsIHVzZXJzcGFjZSBoZWFkZXIgZmlsZXMgYXJlIGluIC4vdXNlcl9pbmNsdWRl
LiBNYWtlZmlsZSB3aWxsIG5lZWQgdGhlCisgIGZvbGxvd2luZy4KKyAgQ0ZMQUdTID0gLUkuLyAt
V2FsbAorICBMREZMQUdTID0gLUwuL3VzZXJfbGliIC1SLi91c2VyX2xpYiAtbHVtZW0KKyovCisj
aW5jbHVkZSAidXNlcl9pbmNsdWRlL3VtZW0uaCIKKworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pP
TkVfSU5JVDogaW5pdGlhbGl6ZSB0aGUgem9uZSAqLworLyoKKyAgX19Vc2Vyc3BhY2VfXworICBO
byBlcXVpdmFsZW50IGZ1bmN0aW9uIHRvIHVtYV96b25lX3NldF9tYXggYWRkZWQgeWV0LiAoU2Vl
IFNDVFBfWk9ORV9JTklUIGluIHNjdHBfb3NfYnNkLmgKKyAgZm9yIHJlZmVyZW5jZSkuIEl0IG1h
eSBub3QgYmUgcmVxdWlyZWQgYXMgbWVudGlvbmVkIGluCisgIGh0dHA6Ly9uaXhkb2MubmV0L21h
bi1wYWdlcy9GcmVlQlNEL3VtYV96YWxsb2MuOS5odG1sIHRoYXQKKyAgbWF4IGxpbWl0cyBtYXkg
bm90IGVuZm9yY2VkIG9uIHN5c3RlbXMgd2l0aCBtb3JlIHRoYW4gb25lIENQVS4KKyovCisjZGVm
aW5lIFNDVFBfWk9ORV9JTklUKHpvbmUsIG5hbWUsIHNpemUsIG51bWJlcikgeyBcCisJem9uZSA9
IHVtZW1fY2FjaGVfY3JlYXRlKG5hbWUsIHNpemUsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws
IE5VTEwsIDApOyBcCisgIH0KKworLyogX19Vc2Vyc3BhY2VfXyBTQ1RQX1pPTkVfR0VUOiBhbGxv
Y2F0ZSBlbGVtZW50IGZyb20gdGhlIHpvbmUgKi8KKyNkZWZpbmUgU0NUUF9aT05FX0dFVCh6b25l
LCB0eXBlKSBcCisgICAgICAgICh0eXBlICopdW1lbV9jYWNoZV9hbGxvYyh6b25lLCBVTUVNX0RF
RkFVTFQpOworCisKKy8qIF9fVXNlcnNwYWNlX18gU0NUUF9aT05FX0ZSRUU6IGZyZWUgZWxlbWVu
dCBmcm9tIHRoZSB6b25lICovCisjZGVmaW5lIFNDVFBfWk9ORV9GUkVFKHpvbmUsIGVsZW1lbnQp
IFwKKwl1bWVtX2NhY2hlX2ZyZWUoem9uZSwgZWxlbWVudCk7CisKKworLyogX19Vc2Vyc3BhY2Vf
XyBTQ1RQX1pPTkVfREVTVFJPWTogZGVzdHJveSB0aGUgem9uZSAqLworI2RlZmluZSBTQ1RQX1pP
TkVfREVTVFJPWSh6b25lKSBcCisJdW1lbV9jYWNoZV9kZXN0cm95KHpvbmUpOworI2VuZGlmCisK
Ky8qCisgKiBfX1VzZXJzcGFjZV9fIERlZmluaW5nIHNjdHBfaGFzaGluaXRfZmxhZ3MoKSBhbmQg
c2N0cF9oYXNoZGVzdHJveSgpIGZvciB1c2VybGFuZC4KKyAqLwordm9pZCAqc2N0cF9oYXNoaW5p
dF9mbGFncyhpbnQgZWxlbWVudHMsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAg
ICAgICAgICAgICAgdV9sb25nICpoYXNobWFzaywgaW50IGZsYWdzKTsKK3ZvaWQKK3NjdHBfaGFz
aGRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25n
IGhhc2htYXNrKTsKKwordm9pZAorc2N0cF9oYXNoZnJlZWRlc3Ryb3kodm9pZCAqdmhhc2h0Ymws
IHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKTsKKworCisjZGVmaW5l
IEhBU0hfTk9XQUlUIDB4MDAwMDAwMDEKKyNkZWZpbmUgSEFTSF9XQUlUT0sgMHgwMDAwMDAwMgor
CisvKiBNX1BDQiBpcyBNQUxMT0NfREVDTEFSRSdkIGluIHN5cy9zb2NrZXR2YXIuaCAqLworI2Rl
ZmluZSBTQ1RQX0hBU0hfSU5JVChzaXplLCBoYXNobWFyaykgc2N0cF9oYXNoaW5pdF9mbGFncyhz
aXplLCBNX1BDQiwgaGFzaG1hcmssIEhBU0hfTk9XQUlUKQorCisjZGVmaW5lIFNDVFBfSEFTSF9G
UkVFKHRhYmxlLCBoYXNobWFyaykgc2N0cF9oYXNoZGVzdHJveSh0YWJsZSwgTV9QQ0IsIGhhc2ht
YXJrKQorCisjZGVmaW5lIFNDVFBfSEFTSF9GUkVFX0RFU1RST1kodGFibGUsIGhhc2htYXJrKSAg
c2N0cF9oYXNoZnJlZWRlc3Ryb3kodGFibGUsIE1fUENCLCBoYXNobWFyaykKKyNkZWZpbmUgU0NU
UF9NX0NPUFlNCW1fY29weW0KKworLyoKKyAqIHRpbWVycworICovCisvKiBfX1VzZXJzcGFjZV9f
CisgKiB1c2VyX3NjdHBfY2FsbG91dC5oIGhhcyB0eXBlZGVmIHN0cnVjdCBzY3RwX2NhbGxvdXQg
c2N0cF9vc190aW1lcl90OworICogd2hpY2ggaXMgdXNlZCBpbiB0aGUgdGltZXIgcmVsYXRlZCBm
dW5jdGlvbnMgc3VjaCBhcworICogU0NUUF9PU19USU1FUl9JTklUIGV0Yy4KKyovCisjaW5jbHVk
ZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KKworLyogX19Vc2Vyc3BhY2VfXyBDcmVhdGluZyBh
IHJlY2VpdmUgdGhyZWFkICovCisjaW5jbHVkZSA8dXNlcl9yZWN2X3RocmVhZC5oPgorCisvKl9f
VXNlcnNwYWNlX18gZGVmaW5pbmcgS1RSX1NVQlNZUyAxIGFzIGRvbmUgaW4gc2N0cF9vc19tYWNv
c3guaCAqLworI2RlZmluZSBLVFJfU1VCU1lTIDEKKworLyogVGhlIHBhY2tlZCBkZWZpbmUgZm9y
IDY0IGJpdCBwbGF0Zm9ybXMgKi8KKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorI2RlZmluZSBTQ1RQX1BBQ0tFRCBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKQorI2RlZmluZSBT
Q1RQX1VOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9Q
QUNLRUQKKyNkZWZpbmUgU0NUUF9VTlVTRUQKKyNlbmRpZgorCisvKgorICogRnVuY3Rpb25zCisg
Ki8KKy8qIE1idWYgbWFuaXB1bGF0aW9uIGFuZCBhY2Nlc3MgbWFjcm9zICAqLworI2RlZmluZSBT
Q1RQX0JVRl9MRU4obSkgKG0tPm1fbGVuKQorI2RlZmluZSBTQ1RQX0JVRl9ORVhUKG0pIChtLT5t
X25leHQpCisjZGVmaW5lIFNDVFBfQlVGX05FWFRfUEtUKG0pIChtLT5tX25leHRwa3QpCisjZGVm
aW5lIFNDVFBfQlVGX1JFU1ZfVUYobSwgc2l6ZSkgbS0+bV9kYXRhICs9IHNpemUKKyNkZWZpbmUg
U0NUUF9CVUZfQVQobSwgc2l6ZSkgbS0+bV9kYXRhICsgc2l6ZQorI2RlZmluZSBTQ1RQX0JVRl9J
U19FWFRFTkRFRChtKSAobS0+bV9mbGFncyAmIE1fRVhUKQorI2RlZmluZSBTQ1RQX0JVRl9FWFRF
TkRfU0laRShtKSAobS0+bV9leHQuZXh0X3NpemUpCisjZGVmaW5lIFNDVFBfQlVGX1RZUEUobSkg
KG0tPm1fdHlwZSkKKyNkZWZpbmUgU0NUUF9CVUZfUkVDVklGKG0pIChtLT5tX3BrdGhkci5yY3Zp
ZikKKyNkZWZpbmUgU0NUUF9CVUZfUFJFUEVORAlNX1BSRVBFTkQKKworI2RlZmluZSBTQ1RQX0FM
SUdOX1RPX0VORChtLCBsZW4pIGlmKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikgeyBcCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUhfQUxJR04obSwgbGVuKTsgXAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKG0tPm1fZmxhZ3MgJiBNX0VY
VCkgPT0gMCkgeyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTV9BTElH
TihtLCBsZW4pOyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisvKiBX
ZSBtYWtlIGl0IHNvIGlmIHlvdSBoYXZlIHVwIHRvIDQgdGhyZWFkcworICogd3JpdHRpbmcgYmFz
ZWQgb24gdGhlIGRlZmF1bHQgc2l6ZSBvZgorICogdGhlIHBhY2tldCBsb2cgNjUgaywgdGhhdCB3
b3VsZCBiZQorICogNCAxNmsgcGFja2V0cyBiZWZvcmUgd2Ugd291bGQgaGl0CisgKiBhIHByb2Js
ZW0uCisgKi8KKyNkZWZpbmUgU0NUUF9QS1RMT0dfV1JJVEVSU19ORUVEX0xPQ0sgMworCisKKy8q
CisgKiByb3V0ZXMsIG91dHB1dCwgZXRjLgorICovCisKK3R5cGVkZWYgc3RydWN0IHNjdHBfcm91
dGUJc2N0cF9yb3V0ZV90OwordHlwZWRlZiBzdHJ1Y3Qgc2N0cF9ydGVudHJ5CXNjdHBfcnRlbnRy
eV90OworCitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRhbGxvYyhzY3RwX3Jv
dXRlX3QgKnJvKQoreworCWlmIChyby0+cm9fcnQgIT0gTlVMTCkgeworCQlyby0+cm9fcnQtPnJ0
X3JlZmNudCsrOworCQlyZXR1cm47CisJfQorCisJcm8tPnJvX3J0ID0gKHNjdHBfcnRlbnRyeV90
ICopIG1hbGxvYyhzaXplb2Yoc2N0cF9ydGVudHJ5X3QpKTsKKwlpZiAocm8tPnJvX3J0ID09IE5V
TEwpCisJCXJldHVybjsKKworCS8qIGluaXRpYWxpemUgKi8KKwltZW1zZXQocm8tPnJvX3J0LCAw
LCBzaXplb2Yoc2N0cF9ydGVudHJ5X3QpKTsKKwlyby0+cm9fcnQtPnJ0X3JlZmNudCA9IDE7CisK
KwkvKiBzZXQgTVRVICovCisJLyogVE9ETyBzZXQgdGhpcyBiYXNlZCBvbiB0aGUgcm8tPnJvX2Rz
dCwgbG9va2luZyB1cCBNVFUgd2l0aCByb3V0aW5nIHNvY2tldCAqLworI2lmIDAKKwlpZiAodXNl
cnNwYWNlX3Jhd3JvdXRlID09IC0xKSB7CisJCXVzZXJzcGFjZV9yYXdyb3V0ZSA9IHNvY2tldChB
Rl9ST1VURSwgU09DS19SQVcsIDApOworCQlpZiAodXNlcnNwYWNlX3Jhd3JvdXRlID09IC0xKQor
CQkJcmV0dXJuOworCX0KKyNlbmRpZgorCXJvLT5yb19ydC0+cnRfcm14LnJteF9tdHUgPSAxNTAw
OyAvKiBGSVhNRSB0ZW1wb3Jhcnkgc29sdXRpb24gKi8KKworCS8qIFRPRE8gZW5hYmxlIHRoZSBh
YmlsaXR5IHRvIG9idGFpbiBpbnRlcmZhY2UgaW5kZXggb2Ygcm91dGUgZm9yCisJICogIFNDVFBf
R0VUX0lGX0lOREVYX0ZST01fUk9VVEUgbWFjcm8uCisJICovCit9CisjZGVmaW5lIFNDVFBfUlRB
TExPQyhybywgdnJmX2lkLCBmaWJudW0pIHNjdHBfdXNlcnNwYWNlX3J0YWxsb2MoKHNjdHBfcm91
dGVfdCAqKXJvKQorCisvKiBkdW1teSBydGZyZWUgbmVlZGVkIG9uY2UgdXNlcl9yb3V0ZS5oIGlz
IGluY2x1ZGVkICovCitzdGF0aWMgaW5saW5lIHZvaWQgc2N0cF91c2Vyc3BhY2VfcnRmcmVlKHNj
dHBfcnRlbnRyeV90ICpydCkKK3sKKwlpZihydCA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJ
aWYoLS1ydC0+cnRfcmVmY250ID4gMCkgeworCQlyZXR1cm47CisJfQorCWZyZWUocnQpOworCXJ0
ID0gTlVMTDsKK30KKyNkZWZpbmUgcnRmcmVlKGFyZzEpIHNjdHBfdXNlcnNwYWNlX3J0ZnJlZShh
cmcxKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICBNVFUgICAgICAg
ICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBzY3RwX3VzZXJzcGFj
ZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpOworCisjZGVmaW5l
IFNDVFBfR0FUSEVSX01UVV9GUk9NX0lGTl9JTkZPKGlmbiwgaWZuX2luZGV4LCBhZikgc2N0cF91
c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbihpZm5faW5kZXgsIGFmKQorCisjZGVmaW5lIFNDVFBf
R0FUSEVSX01UVV9GUk9NX1JPVVRFKHNjdHBfaWZhLCBzYSwgcnQpICgocnQgIT0gTlVMTCkgPyBy
dC0+cnRfcm14LnJteF9tdHUgOiAwKQorCisjZGVmaW5lIFNDVFBfR0FUSEVSX01UVV9GUk9NX0lO
VEZDKHNjdHBfaWZuKSAgc2N0cF91c2Vyc3BhY2VfZ2V0X210dV9mcm9tX2lmbihpZl9uYW1ldG9p
bmRleCgoKHN0cnVjdCBpZmFkZHJzICopIChzY3RwX2lmbikpLT5pZmFfbmFtZSksIEFGX0lORVQp
CisKKyNkZWZpbmUgU0NUUF9TRVRfTVRVX09GX1JPVVRFKHNhLCBydCwgbXR1KSBkbyB7IFwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocnQgIT0gTlVM
TCkgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0
LT5ydF9ybXgucm14X210dSA9IG10dTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gd2hpbGUoMCkKKworLyogKGRlLSlyZWdpc3RlciBpbnRlcmZhY2UgZXZl
bnQgbm90aWZpY2F0aW9ucyAqLworI2RlZmluZSBTQ1RQX1JFR0lTVEVSX0lOVEVSRkFDRShpZmhh
bmRsZSwgYWYpCisjZGVmaW5lIFNDVFBfREVSRUdJU1RFUl9JTlRFUkZBQ0UoaWZoYW5kbGUsIGFm
KQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqLworLyogVGhlc2UgYXJlIGZvciBsb2dn
aW5nICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIHJldHVybiB0aGUgYmFzZSBl
eHQgZGF0YSBwb2ludGVyICovCisjZGVmaW5lIFNDVFBfQlVGX0VYVEVORF9CQVNFKG0pIChtLT5t
X2V4dC5leHRfYnVmKQorIC8qIHJldHVybiB0aGUgcmVmY250IG9mIHRoZSBkYXRhIHBvaW50ZXIg
Ki8KKyNkZWZpbmUgU0NUUF9CVUZfRVhURU5EX1JFRkNOVChtKSAoKm0tPm1fZXh0LnJlZl9jbnQp
CisvKiByZXR1cm4gYW55IGJ1ZmZlciByZWxhdGVkIGZsYWdzLCB0aGlzIGlzCisgKiB1c2VkIGJl
eW9uZCBsb2dnaW5nIGZvciBhcHBsZSBvbmx5LgorICovCisjZGVmaW5lIFNDVFBfQlVGX0dFVF9G
TEFHUyhtKSAobS0+bV9mbGFncykKKworLyogRm9yIEJTRCB0aGlzIGp1c3QgYWNjZXNzZXMgdGhl
IE1fUEtUSERSIGxlbmd0aAorICogc28gaXQgb3BlcmF0ZXMgb24gYW4gbWJ1ZiB3aXRoIGhkciBm
bGFnLiBPdGhlcgorICogTy9TJ3MgbWF5IGhhdmUgc2VwZXJhdGUgcGFja2V0IGhlYWRlciBhbmQg
bWJ1ZgorICogY2hhaW4gcG9pbnRlcnMuLiB0aHVzIHRoZSBtYWNyby4KKyAqLworI2RlZmluZSBT
Q1RQX0hFQURFUl9UT19DSEFJTihtKSAobSkKKyNkZWZpbmUgU0NUUF9ERVRBQ0hfSEVBREVSX0ZS
T01fQ0hBSU4obSkKKyNkZWZpbmUgU0NUUF9IRUFERVJfTEVOKG0pICgobSktPm1fcGt0aGRyLmxl
bikKKyNkZWZpbmUgU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspIDAKKyNkZWZpbmUg
U0NUUF9SRUxFQVNFX0hFQURFUihtKQorI2RlZmluZSBTQ1RQX1JFTEVBU0VfUEtUKG0pCXNjdHBf
bV9mcmVlbShtKQorCisjZGVmaW5lIFNDVFBfR0VUX1BLVF9WUkZJRChtLCB2cmZfaWQpICAoKHZy
Zl9pZCA9IFNDVFBfREVGQVVMVF9WUkZJRCkgIT0gU0NUUF9ERUZBVUxUX1ZSRklEKQorCisKKwor
LyogQXR0YWNoIHRoZSBjaGFpbiBvZiBkYXRhIGludG8gdGhlIHNlbmRhYmxlIHBhY2tldC4gKi8K
KyNkZWZpbmUgU0NUUF9BVFRBQ0hfQ0hBSU4ocGFrLCBtLCBwYWNrZXRfbGVuZ3RoKSBkbyB7IFwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFrID0g
bTsgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YWstPm1fcGt0aGRyLmxlbiA9IHBhY2tldF9sZW5ndGg7IFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgfSB3aGlsZSgwKQorCisvKiBPdGhlciBtX3BrdGhkciB0eXBlIHRoaW5ncyAqLworLyog
RklYTUUgbmVlZCByZWFsIGRlZmluaXRpb25zICovCisjZGVmaW5lIFNDVFBfSVNfSVRfQlJPQURD
QVNUKGRzdCwgbSkgMAorLyogT09UQiBvbmx5ICNkZWZpbmUgU0NUUF9JU19JVF9CUk9BRENBU1Qo
ZHN0LCBtKSAoKG0tPm1fZmxhZ3MgJiBNX1BLVEhEUikgPyBpbl9icm9hZGNhc3QoZHN0LCBtLT5t
X3BrdGhkci5yY3ZpZikgOiAwKSAgQlNEIGRlZiAqLworI2RlZmluZSBTQ1RQX0lTX0lUX0xPT1BC
QUNLKG0pIDAKKy8qIE9PVEIgT05MWSAjZGVmaW5lIFNDVFBfSVNfSVRfTE9PUEJBQ0sobSkgKCht
LT5tX2ZsYWdzICYgTV9QS1RIRFIpICYmICgobS0+bV9wa3RoZHIucmN2aWYgPT0gTlVMTCkgfHwg
KG0tPm1fcGt0aGRyLnJjdmlmLT5pZl90eXBlID09IElGVF9MT09QKSkpICBCU0QgZGVmICovCisK
KworLyogVGhpcyBjb252ZXJ0cyBhbnkgaW5wdXQgcGFja2V0IGhlYWRlcgorICogaW50byB0aGUg
Y2hhaW4gb2YgZGF0YSBob2xkZXJzLCBmb3IgQlNECisgKiBpdHMgYSBOT1AuCisgKi8KKworLyog
Z2V0IHRoZSB2NiBob3AgbGltaXQgKi8KKyNkZWZpbmUgU0NUUF9HRVRfSExJTShpbnAsIHJvKSAx
MjggLyogQXMgZG9uZSBmb3IgX19XaW5kb3dzX18gKi8KKyNkZWZpbmUgSVB2Nl9IT1BfTElNSVQg
MTI4CisKKy8qIGlzIHRoZSBlbmRwb2ludCB2Nm9ubHk/ICovCisjZGVmaW5lIFNDVFBfSVBWNl9W
Nk9OTFkoaW5wKQkoKChzdHJ1Y3QgaW5wY2IgKilpbnApLT5pbnBfZmxhZ3MgJiBJTjZQX0lQVjZf
VjZPTkxZKQorLyogaXMgdGhlIHNvY2tldCBub24tYmxvY2tpbmc/ICovCisjZGVmaW5lIFNDVFBf
U09fSVNfTkJJTyhzbykJKChzbyktPnNvX3N0YXRlICYgU1NfTkJJTykKKyNkZWZpbmUgU0NUUF9T
RVRfU09fTkJJTyhzbykJKChzbyktPnNvX3N0YXRlIHw9IFNTX05CSU8pCisjZGVmaW5lIFNDVFBf
Q0xFQVJfU09fTkJJTyhzbykJKChzbyktPnNvX3N0YXRlICY9IH5TU19OQklPKQorLyogZ2V0IHRo
ZSBzb2NrZXQgdHlwZSAqLworI2RlZmluZSBTQ1RQX1NPX1RZUEUoc28pCSgoc28pLT5zb190eXBl
KQorCisvKiByZXNlcnZlIHNiIHNwYWNlIGZvciBhIHNvY2tldCAqLworI2RlZmluZSBTQ1RQX1NP
UkVTRVJWRShzbywgc2VuZCwgcmVjdikJc29yZXNlcnZlKHNvLCBzZW5kLCByZWN2KQorCisvKiB3
YWtldXAgYSBzb2NrZXQgKi8KKyNkZWZpbmUgU0NUUF9TT1dBS0VVUChzbykJd2FrZXVwKCYoc28p
LT5zb190aW1lbywgc28pCisvKiBjbGVhciB0aGUgc29ja2V0IGJ1ZmZlciBzdGF0ZSAqLworI2Rl
ZmluZSBTQ1RQX1NCX0NMRUFSKHNiKQlcCisJKHNiKS5zYl9jYyA9IDA7CQlcCisJKHNiKS5zYl9t
YiA9IE5VTEw7CVwKKwkoc2IpLnNiX21iY250ID0gMDsKKworI2RlZmluZSBTQ1RQX1NCX0xJTUlU
X1JDVihzbykgc28tPnNvX3Jjdi5zYl9oaXdhdAorI2RlZmluZSBTQ1RQX1NCX0xJTUlUX1NORChz
bykgc28tPnNvX3NuZC5zYl9oaXdhdAorCisjZGVmaW5lIFNDVFBfUkVBRF9SQU5ET00oYnVmLCBs
ZW4pCXJlYWRfcmFuZG9tKGJ1ZiwgbGVuKQorCisjZGVmaW5lIFNDVFBfU0hBMV9DVFgJCXN0cnVj
dCBzY3RwX3NoYTFfY29udGV4dAorI2RlZmluZSBTQ1RQX1NIQTFfSU5JVAkJc2N0cF9zaGExX2lu
aXQKKyNkZWZpbmUgU0NUUF9TSEExX1VQREFURQlzY3RwX3NoYTFfdXBkYXRlCisjZGVmaW5lIFND
VFBfU0hBMV9GSU5BTCh4LHkpCXNjdHBfc2hhMV9maW5hbCgodW5zaWduZWQgY2hhciAqKXgsIHkp
CisKKy8qIHN0YXJ0IE9PVEIgb25seSBzdHVmZiAqLworLyogVE9ETyBJRlRfTE9PUCBpcyBpbiBu
ZXQvaWZfdHlwZXMuaCBvbiBMaW51eCAqLworI2RlZmluZSBJRlRfTE9PUCAweDE4CisKKy8qIHNj
dHBfcGNiLmggKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNkZWZp
bmUgU0hVVF9SRCAxCisjZGVmaW5lIFNIVVRfV1IgMgorI2RlZmluZSBTSFVUX1JEV1IgMworI2Vu
ZGlmCisjZGVmaW5lIFBSVV9GTFVTSF9SRCBTSFVUX1JECisjZGVmaW5lIFBSVV9GTFVTSF9XUiBT
SFVUX1dSCisjZGVmaW5lIFBSVV9GTFVTSF9SRFdSIFNIVVRfUkRXUgorCisvKiBuZXRpbmV0L2lw
X3Zhci5oIGRlZmludGlvbnMgYXJlIGJlaGluZCBhbiBpZiBkZWZpbmVkIGZvciBfS0VSTkVMIG9u
IEZyZWVCU0QgKi8KKyNkZWZpbmUJSVBfUkFXT1VUUFVUCQkweDIKKworCisvKiBlbmQgT09UQiBv
bmx5IHN0dWZmICovCisKKyNkZWZpbmUgQUZfQ09OTiAxMjMKK3N0cnVjdCBzb2NrYWRkcl9jb25u
IHsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXVpbnQ4X3Qgc2Nvbm5fbGVuOworCXVpbnQ4X3Qg
c2Nvbm5fZmFtaWx5OworI2Vsc2UKKwl1aW50MTZfdCBzY29ubl9mYW1pbHk7CisjZW5kaWYKKwl1
aW50MTZfdCBzY29ubl9wb3J0OworCXZvaWQgKnNjb25uX2FkZHI7Cit9OworCit0eXBlZGVmIHZv
aWQgKigqc3RhcnRfcm91dGluZV90KSh2b2lkICopOworCitleHRlcm4gaW50CitzY3RwX3VzZXJz
cGFjZV90aHJlYWRfY3JlYXRlKHVzZXJsYW5kX3RocmVhZF90ICp0aHJlYWQsIHN0YXJ0X3JvdXRp
bmVfdCBzdGFydF9yb3V0aW5lKTsKKwordm9pZAorc2N0cF91c2Vyc3BhY2Vfc2V0X3RocmVhZG5h
bWUoY29uc3QgY2hhciAqbmFtZSk7CisKKy8qCisgKiBTQ1RQIHByb3RvY29sIHNwZWNpZmljIG1i
dWYgZmxhZ3MuCisgKi8KKyNkZWZpbmUJTV9OT1RJRklDQVRJT04JCU1fUFJPVE81CS8qIFNDVFAg
bm90aWZpY2F0aW9uICovCisKKy8qCisgKiBJUCBvdXRwdXQgcm91dGluZXMKKyAqLworCisvKiBE
ZWZpbmluZyBTQ1RQX0lQX0lEIG1hY3JvLgorICAgSW4gbmV0aW5ldC9pcF9vdXRwdXQuYywgd2Ug
aGF2ZSB1X3Nob3J0IGlwX2lkOworICAgSW4gbmV0aW5ldC9pcF92YXIuaCwgd2UgaGF2ZSBleHRl
cm4gdV9zaG9ydAlpcF9pZDsgKGVuY2xvc2VkIHdpdGhpbiBfS0VSTkVMXykKKyAgIFNlZSBzdGF0
aWMgX19pbmxpbmUgdWludDE2X3QgaXBfbmV3aWQodm9pZCkgaW4gbmV0aW5ldC9pcF92YXIuaAor
ICovCisjZGVmaW5lIFNDVFBfSVBfSUQoaW5wKSAoaXBfaWQpCisKKy8qIG5lZWQgc2N0cGhkciB0
byBnZXQgcG9ydCBpbiBTQ1RQX0lQX09VVFBVVC4gc2N0cGhkciBkZWZpbmVkIGluIHNjdHAuaCAg
Ki8KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KK2V4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNl
X2lwX291dHB1dChpbnQgKnJlc3VsdCwgc3RydWN0IG1idWYgKm9fcGFrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcm91dGVfdCAqcm8sIHZvaWQgKnN0Y2IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkKTsKKwor
I2RlZmluZSBTQ1RQX0lQX09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgc3RjYiwgdnJmX2lkKSBz
Y3RwX3VzZXJzcGFjZV9pcF9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2cmZfaWQp
OworCisjaWYgZGVmaW5lZChJTkVUNikKK2V4dGVybiB2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9v
dXRwdXQoaW50ICpyZXN1bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0Y2IsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZyZl9pZCk7Cisj
ZGVmaW5lIFNDVFBfSVA2X09VVFBVVChyZXN1bHQsIG9fcGFrLCBybywgaWZwLCBzdGNiLCB2cmZf
aWQpIHNjdHBfdXNlcnNwYWNlX2lwNl9vdXRwdXQoJnJlc3VsdCwgb19wYWssIHJvLCBzdGNiLCB2
cmZfaWQpOworI2VuZGlmCisKKworCisjaWYgMAorI2RlZmluZSBTQ1RQX0lQNl9PVVRQVVQocmVz
dWx0LCBvX3Bhaywgcm8sIGlmcCwgc3RjYiwgdnJmX2lkKSBcCit7IFwKKwlpZiAoc3RjYiAmJiBz
dGNiLT5zY3RwX2VwKSBcCisJCXJlc3VsdCA9IGlwNl9vdXRwdXQob19wYWssIFwKKwkJCQkgICAg
KChzdHJ1Y3QgaW42cGNiICopKHN0Y2ItPnNjdHBfZXApKS0+aW42cF9vdXRwdXRvcHRzLCBcCisJ
CQkJICAgIChybyksIDAsIDAsIGlmcCwgTlVMTCk7IFwKKwllbHNlIFwKKwkJcmVzdWx0ID0gaXA2
X291dHB1dChvX3BhaywgTlVMTCwgKHJvKSwgMCwgMCwgaWZwLCBOVUxMKTsgXAorfQorI2VuZGlm
CisKK3N0cnVjdCBtYnVmICoKK3NjdHBfZ2V0X21idWZfZm9yX21zZyh1bnNpZ25lZCBpbnQgc3Bh
Y2VfbmVlZGVkLCBpbnQgd2FudF9oZWFkZXIsIGludCBob3csIGludCBhbGxvbmVidWYsIGludCB0
eXBlKTsKKworCisvKiB3aXRoIHRoZSBjdXJyZW50IGluY2x1ZGVkIGZpbGVzLCB0aGlzIGlzIGRl
ZmluZWQgaW4gTGludXggYnV0CisgKiAgaW4gRnJlZUJTRCwgaXQgaXMgYmVoaW5kIGEgX0tFUk5F
TCBpbiBzeXMvc29ja2V0LmggLi4uCisgKi8KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Ry
YWdvbkZseSkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKSB8fCBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX09wZW5CU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTmFDbCkKKy8q
IHN0b2xlbiBmcm9tIC91c3IvaW5jbHVkZS9zeXMvc29ja2V0LmggKi8KKyNkZWZpbmUgQ01TR19B
TElHTihuKSAgIF9BTElHTihuKQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0Qp
CisjZGVmaW5lIENNU0dfQUxJR04obikgICAoKChuKSArIF9fQUxJR05CWVRFUykgJiB+X19BTElH
TkJZVEVTKQorI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisjaWYgIWRlZmlu
ZWQoX19EQVJXSU5fQUxJR05CWVRFUykKKyNkZWZpbmUJX19EQVJXSU5fQUxJR05CWVRFUwkoc2l6
ZW9mKF9fZGFyd2luX3NpemVfdCkgLSAxKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJ
Tl9BTElHTikKKyNkZWZpbmUJX19EQVJXSU5fQUxJR04ocCkJKChfX2Rhcndpbl9zaXplX3QpKChj
aGFyICopKHVpbnRwdHJfdCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVTKSAmfiBfX0RBUldJTl9B
TElHTkJZVEVTKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0RBUldJTl9BTElHTkJZVEVTMzIp
CisjZGVmaW5lIF9fREFSV0lOX0FMSUdOQllURVMzMiAgICAgKHNpemVvZihfX3VpbnQzMl90KSAt
IDEpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fREFSV0lOX0FMSUdOMzIpCisjZGVmaW5lIF9f
REFSV0lOX0FMSUdOMzIocCkgICAgICAgKChfX2Rhcndpbl9zaXplX3QpKChjaGFyICopKHVpbnRw
dHJfdCkocCkgKyBfX0RBUldJTl9BTElHTkJZVEVTMzIpICZ+IF9fREFSV0lOX0FMSUdOQllURVMz
MikKKyNlbmRpZgorI2RlZmluZSBDTVNHX0FMSUdOKG4pICAgX19EQVJXSU5fQUxJR04zMihuKQor
I2VuZGlmCisjZGVmaW5lIElfQU1fSEVSRSBcCisgICAgICAgICAgICAgICAgZG8geyBcCisJCQlT
Q1RQX1BSSU5URigiJXM6JWQgYXQgJXNcbiIsIF9fRklMRV9fLCBfX0xJTkVfXyAsIF9fZnVuY19f
KTsgXAorCQl9IHdoaWxlICgwKQorCisjaWZuZGVmIHRpbWV2YWxzdWIKKyNkZWZpbmUgdGltZXZh
bHN1Yih0cDEsIHRwMikgICAgICAgICAgICAgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkodHAxKS0+dHZfc2VjIC09ICh0cDIpLT50
dl9zZWM7ICAgIFwKKwkJKHRwMSktPnR2X3VzZWMgLT0gKHRwMiktPnR2X3VzZWM7ICBcCisJCWlm
ICgodHAxKS0+dHZfdXNlYyA8IDApIHsgICAgICAgICAgXAorCQkJKHRwMSktPnR2X3NlYy0tOyAg
ICAgICAgICAgXAorCQkJKHRwMSktPnR2X3VzZWMgKz0gMTAwMDAwMDsgXAorCQl9ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQorI2lmICFkZWZpbmVkKFRBSUxRX0ZPUkVBQ0hf
U0FGRSkKKyNkZWZpbmUgVEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIp
ICAgICAgICAgICAgIFwKKyAgICAgICAgIGZvciAoKHZhcikgPSAoKGhlYWQpLT50cWhfZmlyc3Qp
OyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9
IFRBSUxRX05FWFQoKHZhciksIGZpZWxkKSwgMSk7IFwKKyAgICAgICAgICAgICAgKHZhcikgPSAo
dHZhcikpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMSVNUX0ZPUkVBQ0hfU0FGRSkKKyNkZWZpbmUg
TElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBmaWVsZCwgdHZhcikgICAgICAgICAgICAgIFwK
KyAgICAgICAgIGZvciAoKHZhcikgPSAoKGhlYWQpLT5saF9maXJzdCk7ICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgICAgICAgKHZhcikgJiYgKCh0dmFyKSA9IExJU1RfTkVYVCgodmFy
KSwgZmllbGQpLCAxKTsgIFwKKyAgICAgICAgICAgICAgKHZhcikgPSAodHZhcikpCisjZW5kaWYK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQorI2RlZmluZSBU
QUlMUV9GT1JFQUNIX1NBRkUgVEFJTFFfRk9SRUFDSF9NVVRBQkxFCisjZGVmaW5lIExJU1RfRk9S
RUFDSF9TQUZFIExJU1RfRk9SRUFDSF9NVVRBQkxFCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfTmFDbCkKKyNkZWZpbmUJdGltZXJjbXAodHZwLCB1dnAsIGNtcCkJCQkJCQlc
CisJKCgodHZwKS0+dHZfc2VjID09ICh1dnApLT50dl9zZWMpID8JCQkJXAorCSAgICAoKHR2cCkt
PnR2X3VzZWMgY21wICh1dnApLT50dl91c2VjKSA6CQkJXAorCSAgICAoKHR2cCktPnR2X3NlYyBj
bXAgKHV2cCktPnR2X3NlYykpCisjZW5kaWYKKworI2RlZmluZSBTQ1RQX0lTX0xJU1RFTklORyhp
bnApICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQUNDRVBUSU5HKSAhPSAwKQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291
dHB1dC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKaW5kZXgg
ZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZTI5YTcyN2ZhZGQ5YTRl
YjJmMWU5ZjQ2YzYxNTU3NjQwMDBhYmU1NSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfb3V0cHV0LmMKQEAgLTAsMCArMSwxNDk5OSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2Ut
SWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgs
IGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq
CisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2Yg
Q2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisg
KiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMv
Y2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX291dHB1
dC5jIDMzNTE3OSAyMDE4LTA2LTE0IDIxOjMwOjUyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUg
PHN5cy9wcm9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFk
ZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1
ZGUgPG5ldGluZXQvc2N0cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+
CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9pbmRhdGEuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfaW5wdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4K
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQorI2RlZmluZSBfX0ZBVk9SX0JTRCAg
ICAvKiAob24gVWJ1bnR1IGF0IGxlYXN0KSBlbmFibGVzIFVEUCBoZWFkZXIgZmllbGQgbmFtZXMg
bGlrZSBCU0QgaW4gUkZDIDc2OCAqLworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZp
bmVkKElORVQ2KQorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVk
ZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAw
MDAKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hY2hp
bmUvaW5fY2tzdW0uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgJiYgZGVm
aW5lZChJTkVUNikKKyNpbmNsdWRlIDxuZXRpbmV0Ni9zY3RwNl92YXIuaD4KKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gMworI2VuZGlmCisK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiAhKGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwg
ZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkpCisjZGVmaW5lIFNDVFBfTUFYX0xJTktIRFIgMTYK
KyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgU0NUUF9NQVhfR0FQU19JTkFSUkFZIDQKK3N0cnVj
dCBzYWNrX3RyYWNrIHsKKwl1aW50OF90IHJpZ2h0X2VkZ2U7CS8qIG1lcmdhYmxlIG9uIHRoZSBy
aWdodCBlZGdlICovCisJdWludDhfdCBsZWZ0X2VkZ2U7CS8qIG1lcmdhYmxlIG9uIHRoZSBsZWZ0
IGVkZ2UgKi8KKwl1aW50OF90IG51bV9lbnRyaWVzOworCXVpbnQ4X3Qgc3BhcmU7CisJc3RydWN0
IHNjdHBfZ2FwX2Fja19ibG9jayBnYXBzW1NDVFBfTUFYX0dBUFNfSU5BUlJBWV07Cit9OworCitj
b25zdCBzdHJ1Y3Qgc2Fja190cmFjayBzYWNrX2FycmF5WzI1Nl0gPSB7CisJezAsIDAsIDAsIDAs
CQkvKiAweDAwICovCisJCXt7MCwgMH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDAxICovCisJCXt7MCwgMH0sCisJCXswLCAw
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDAy
ICovCisJCXt7MSwgMX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDEsIDAsCQkvKiAweDAzICovCisJCXt7MCwgMX0sCisJCXswLCAwfSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDA0ICovCisJCXt7
MiwgMn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDIsIDAsCQkvKiAweDA1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDA2ICovCisJCXt7MSwgMn0sCisJ
CXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkv
KiAweDA3ICovCisJCXt7MCwgMn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDA4ICovCisJCXt7MywgM30sCisJCXswLCAwfSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDA5ICov
CisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDIsIDAsCQkvKiAweDBhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDBiICovCisJCXt7MCwg
MX0sCisJCXszLCAzfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEs
IDAsCQkvKiAweDBjICovCisJCXt7MiwgM30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDBkICovCisJCXt7MCwgMH0sCisJCXsy
LCAzfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAw
eDBlICovCisJCXt7MSwgM30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDBmICovCisJCXt7MCwgM30sCisJCXswLCAwfSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDEwICovCisJ
CXt7NCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDIsIDAsCQkvKiAweDExICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDEyICovCisJCXt7MSwgMX0s
CisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAs
CQkvKiAweDEzICovCisJCXt7MCwgMX0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDE0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDE1
ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDR9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDIsIDAsCQkvKiAweDE2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDE3ICovCisJCXt7
MCwgMn0sCisJCXs0LCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDEsIDAsCQkvKiAweDE4ICovCisJCXt7MywgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDE5ICovCisJCXt7MCwgMH0sCisJ
CXszLCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkv
KiAweDFhICovCisJCXt7MSwgMX0sCisJCXszLCA0fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDFiICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDFjICov
CisJCXt7MiwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDIsIDAsCQkvKiAweDFkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDFlICovCisJCXt7MSwg
NH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEs
IDAsCQkvKiAweDFmICovCisJCXt7MCwgNH0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDIwICovCisJCXt7NSwgNX0sCisJCXsw
LCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAw
eDIxICovCisJCXt7MCwgMH0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDIyICovCisJCXt7MSwgMX0sCisJCXs1LCA1fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDIzICovCisJ
CXt7MCwgMX0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDIsIDAsCQkvKiAweDI0ICovCisJCXt7MiwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDI1ICovCisJCXt7MCwgMH0s
CisJCXsyLCAyfSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAs
CQkvKiAweDI2ICovCisJCXt7MSwgMn0sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDI3ICovCisJCXt7MCwgMn0sCisJCXs1LCA1
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDI4
ICovCisJCXt7MywgM30sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDMsIDAsCQkvKiAweDI5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUs
IDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDJhICovCisJCXt7
MSwgMX0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDMsIDAsCQkvKiAweDJiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDJjICovCisJCXt7MiwgM30sCisJ
CXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkv
KiAweDJkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezUsIDV9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDJlICovCisJCXt7MSwgM30sCisJCXs1LCA1fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDJmICov
CisJCXt7MCwgM30sCisJCXs1LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDEsIDAsCQkvKiAweDMwICovCisJCXt7NCwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDMxICovCisJCXt7MCwg
MH0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIs
IDAsCQkvKiAweDMyICovCisJCXt7MSwgMX0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDMzICovCisJCXt7MCwgMX0sCisJCXs0
LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAw
eDM0ICovCisJCXt7MiwgMn0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDM1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJ
ezQsIDV9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDM2ICovCisJ
CXt7MSwgMn0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDIsIDAsCQkvKiAweDM3ICovCisJCXt7MCwgMn0sCisJCXs0LCA1fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDM4ICovCisJCXt7MywgNX0s
CisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAs
CQkvKiAweDM5ICovCisJCXt7MCwgMH0sCisJCXszLCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDNhICovCisJCXt7MSwgMX0sCisJCXszLCA1
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDNi
ICovCisJCXt7MCwgMX0sCisJCXszLCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDEsIDAsCQkvKiAweDNjICovCisJCXt7MiwgNX0sCisJCXswLCAwfSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDNkICovCisJCXt7
MCwgMH0sCisJCXsyLCA1fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDEsIDAsCQkvKiAweDNlICovCisJCXt7MSwgNX0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDNmICovCisJCXt7MCwgNX0sCisJ
CXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkv
KiAweDQwICovCisJCXt7NiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDQxICovCisJCXt7MCwgMH0sCisJCXs2LCA2fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQyICov
CisJCXt7MSwgMX0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDIsIDAsCQkvKiAweDQzICovCisJCXt7MCwgMX0sCisJCXs2LCA2fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQ0ICovCisJCXt7Miwg
Mn0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMs
IDAsCQkvKiAweDQ1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezYsIDZ9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQ2ICovCisJCXt7MSwgMn0sCisJCXs2
LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAw
eDQ3ICovCisJCXt7MCwgMn0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDQ4ICovCisJCXt7MywgM30sCisJCXs2LCA2fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDQ5ICovCisJ
CXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDMsIDAsCQkvKiAweDRhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezYsIDZ9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDRiICovCisJCXt7MCwgMX0s
CisJCXszLCAzfSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAs
CQkvKiAweDRjICovCisJCXt7MiwgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDRkICovCisJCXt7MCwgMH0sCisJCXsyLCAz
fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDRl
ICovCisJCXt7MSwgM30sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDIsIDAsCQkvKiAweDRmICovCisJCXt7MCwgM30sCisJCXs2LCA2fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDUwICovCisJCXt7
NCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDMsIDAsCQkvKiAweDUxICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDUyICovCisJCXt7MSwgMX0sCisJ
CXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkv
KiAweDUzICovCisJCXt7MCwgMX0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDU0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwK
KwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDQsIDAsCQkvKiAweDU1ICov
CisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDR9LAorCQl7NiwgNn0KKwkJfQorCX0sCisJ
ezAsIDAsIDMsIDAsCQkvKiAweDU2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDZ9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDU3ICovCisJCXt7MCwg
Mn0sCisJCXs0LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIs
IDAsCQkvKiAweDU4ICovCisJCXt7MywgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDU5ICovCisJCXt7MCwgMH0sCisJCXsz
LCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAw
eDVhICovCisJCXt7MSwgMX0sCisJCXszLCA0fSwKKwkJezYsIDZ9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDViICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJ
ezYsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDVjICovCisJ
CXt7MiwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDAsIDMsIDAsCQkvKiAweDVkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezYsIDZ9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDVlICovCisJCXt7MSwgNH0s
CisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAs
CQkvKiAweDVmICovCisJCXt7MCwgNH0sCisJCXs2LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDYwICovCisJCXt7NSwgNn0sCisJCXswLCAw
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDYx
ICovCisJCXt7MCwgMH0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDAsIDIsIDAsCQkvKiAweDYyICovCisJCXt7MSwgMX0sCisJCXs1LCA2fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDYzICovCisJCXt7
MCwgMX0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAs
IDIsIDAsCQkvKiAweDY0ICovCisJCXt7MiwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAweDY1ICovCisJCXt7MCwgMH0sCisJ
CXsyLCAyfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkv
KiAweDY2ICovCisJCXt7MSwgMn0sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDY3ICovCisJCXt7MCwgMn0sCisJCXs1LCA2fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDY4ICov
CisJCXt7MywgM30sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDAsIDMsIDAsCQkvKiAweDY5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDZ9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDMsIDAsCQkvKiAweDZhICovCisJCXt7MSwg
MX0sCisJCXszLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMs
IDAsCQkvKiAweDZiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDZjICovCisJCXt7MiwgM30sCisJCXs1
LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDMsIDAsCQkvKiAw
eDZkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezUsIDZ9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDZlICovCisJCXt7MSwgM30sCisJCXs1LCA2fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDZmICovCisJ
CXt7MCwgM30sCisJCXs1LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDAsIDEsIDAsCQkvKiAweDcwICovCisJCXt7NCwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDcxICovCisJCXt7MCwgMH0s
CisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAs
CQkvKiAweDcyICovCisJCXt7MSwgMX0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDczICovCisJCXt7MCwgMX0sCisJCXs0LCA2
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDc0
ICovCisJCXt7MiwgMn0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDAsIDMsIDAsCQkvKiAweDc1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQs
IDZ9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDc2ICovCisJCXt7
MSwgMn0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAs
IDIsIDAsCQkvKiAweDc3ICovCisJCXt7MCwgMn0sCisJCXs0LCA2fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEsIDAsCQkvKiAweDc4ICovCisJCXt7MywgNn0sCisJ
CXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkv
KiAweDc5ICovCisJCXt7MCwgMH0sCisJCXszLCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDAsIDIsIDAsCQkvKiAweDdhICovCisJCXt7MSwgMX0sCisJCXszLCA2fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDdiICov
CisJCXt7MCwgMX0sCisJCXszLCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDAsIDEsIDAsCQkvKiAweDdjICovCisJCXt7MiwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDAsIDIsIDAsCQkvKiAweDdkICovCisJCXt7MCwg
MH0sCisJCXsyLCA2fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDAsIDEs
IDAsCQkvKiAweDdlICovCisJCXt7MSwgNn0sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDAsIDEsIDAsCQkvKiAweDdmICovCisJCXt7MCwgNn0sCisJCXsw
LCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAw
eDgwICovCisJCXt7NywgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDIsIDAsCQkvKiAweDgxICovCisJCXt7MCwgMH0sCisJCXs3LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDgyICovCisJ
CXt7MSwgMX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDIsIDAsCQkvKiAweDgzICovCisJCXt7MCwgMX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDg0ICovCisJCXt7MiwgMn0s
CisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAs
CQkvKiAweDg1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezcsIDd9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDg2ICovCisJCXt7MSwgMn0sCisJCXs3LCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweDg3
ICovCisJCXt7MCwgMn0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDIsIDAsCQkvKiAweDg4ICovCisJCXt7MywgM30sCisJCXs3LCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDg5ICovCisJCXt7
MCwgMH0sCisJCXszLCAzfSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDMsIDAsCQkvKiAweDhhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezcsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDhiICovCisJCXt7MCwgMX0sCisJ
CXszLCAzfSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkv
KiAweDhjICovCisJCXt7MiwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDhkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwK
KwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDhlICov
CisJCXt7MSwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDIsIDAsCQkvKiAweDhmICovCisJCXt7MCwgM30sCisJCXs3LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDkwICovCisJCXt7NCwg
NH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMs
IDAsCQkvKiAweDkxICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweDkyICovCisJCXt7MSwgMX0sCisJCXs0
LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAw
eDkzICovCisJCXt7MCwgMX0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDMsIDAsCQkvKiAweDk0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJ
ezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweDk1ICovCisJ
CXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDR9LAorCQl7NywgN30KKwkJfQorCX0sCisJezAs
IDEsIDMsIDAsCQkvKiAweDk2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezcsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDk3ICovCisJCXt7MCwgMn0s
CisJCXs0LCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAs
CQkvKiAweDk4ICovCisJCXt7MywgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweDk5ICovCisJCXt7MCwgMH0sCisJCXszLCA0
fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweDlh
ICovCisJCXt7MSwgMX0sCisJCXszLCA0fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDMsIDAsCQkvKiAweDliICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezcs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDljICovCisJCXt7
MiwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDMsIDAsCQkvKiAweDlkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezcsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweDllICovCisJCXt7MSwgNH0sCisJ
CXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkv
KiAweDlmICovCisJCXt7MCwgNH0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGEwICovCisJCXt7NSwgNX0sCisJCXs3LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGExICov
CisJCXt7MCwgMH0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDMsIDAsCQkvKiAweGEyICovCisJCXt7MSwgMX0sCisJCXs1LCA1fSwKKwkJezcsIDd9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGEzICovCisJCXt7MCwg
MX0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMs
IDAsCQkvKiAweGE0ICovCisJCXt7MiwgMn0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGE1ICovCisJCXt7MCwgMH0sCisJCXsy
LCAyfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAw
eGE2ICovCisJCXt7MSwgMn0sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGE3ICovCisJCXt7MCwgMn0sCisJCXs1LCA1fSwKKwkJ
ezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGE4ICovCisJ
CXt7MywgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDQsIDAsCQkvKiAweGE5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDV9LAor
CQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDQsIDAsCQkvKiAweGFhICovCisJCXt7MSwgMX0s
CisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0sCisJezEsIDEsIDQsIDAs
CQkvKiAweGFiICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30K
KwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGFjICovCisJCXt7MiwgM30sCisJCXs1LCA1
fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGFk
ICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezUsIDV9LAorCQl7NywgN30KKwkJfQorCX0s
CisJezAsIDEsIDMsIDAsCQkvKiAweGFlICovCisJCXt7MSwgM30sCisJCXs1LCA1fSwKKwkJezcs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGFmICovCisJCXt7
MCwgM30sCisJCXs1LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDIsIDAsCQkvKiAweGIwICovCisJCXt7NCwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGIxICovCisJCXt7MCwgMH0sCisJ
CXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkv
KiAweGIyICovCisJCXt7MSwgMX0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGIzICovCisJCXt7MCwgMX0sCisJCXs0LCA1fSwK
KwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGI0ICov
CisJCXt7MiwgMn0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDQsIDAsCQkvKiAweGI1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDV9
LAorCQl7NywgN30KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGI2ICovCisJCXt7MSwg
Mn0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMs
IDAsCQkvKiAweGI3ICovCisJCXt7MCwgMn0sCisJCXs0LCA1fSwKKwkJezcsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGI4ICovCisJCXt7MywgNX0sCisJCXs3
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAw
eGI5ICovCisJCXt7MCwgMH0sCisJCXszLCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGJhICovCisJCXt7MSwgMX0sCisJCXszLCA1fSwKKwkJ
ezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGJiICovCisJ
CXt7MCwgMX0sCisJCXszLCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDEsIDIsIDAsCQkvKiAweGJjICovCisJCXt7MiwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGJkICovCisJCXt7MCwgMH0s
CisJCXsyLCA1fSwKKwkJezcsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAs
CQkvKiAweGJlICovCisJCXt7MSwgNX0sCisJCXs3LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGJmICovCisJCXt7MCwgNX0sCisJCXs3LCA3
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGMw
ICovCisJCXt7NiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDIsIDAsCQkvKiAweGMxICovCisJCXt7MCwgMH0sCisJCXs2LCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGMyICovCisJCXt7
MSwgMX0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDIsIDAsCQkvKiAweGMzICovCisJCXt7MCwgMX0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGM0ICovCisJCXt7MiwgMn0sCisJ
CXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkv
KiAweGM1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGM2ICovCisJCXt7MSwgMn0sCisJCXs2LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGM3ICov
CisJCXt7MCwgMn0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDIsIDAsCQkvKiAweGM4ICovCisJCXt7MywgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGM5ICovCisJCXt7MCwg
MH0sCisJCXszLCAzfSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMs
IDAsCQkvKiAweGNhICovCisJCXt7MSwgMX0sCisJCXszLCAzfSwKKwkJezYsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGNiICovCisJCXt7MCwgMX0sCisJCXsz
LCAzfSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAw
eGNjICovCisJCXt7MiwgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGNkICovCisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJ
ezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGNlICovCisJ
CXt7MSwgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDIsIDAsCQkvKiAweGNmICovCisJCXt7MCwgM30sCisJCXs2LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGQwICovCisJCXt7NCwgNH0s
CisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAs
CQkvKiAweGQxICovCisJCXt7MCwgMH0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGQyICovCisJCXt7MSwgMX0sCisJCXs0LCA0
fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGQz
ICovCisJCXt7MCwgMX0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDMsIDAsCQkvKiAweGQ0ICovCisJCXt7MiwgMn0sCisJCXs0LCA0fSwKKwkJezYs
IDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDQsIDAsCQkvKiAweGQ1ICovCisJCXt7
MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDR9LAorCQl7NiwgN30KKwkJfQorCX0sCisJezAsIDEs
IDMsIDAsCQkvKiAweGQ2ICovCisJCXt7MSwgMn0sCisJCXs0LCA0fSwKKwkJezYsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGQ3ICovCisJCXt7MCwgMn0sCisJ
CXs0LCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkv
KiAweGQ4ICovCisJCXt7MywgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGQ5ICovCisJCXt7MCwgMH0sCisJCXszLCA0fSwK
KwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGRhICov
CisJCXt7MSwgMX0sCisJCXszLCA0fSwKKwkJezYsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezEsIDEsIDMsIDAsCQkvKiAweGRiICovCisJCXt7MCwgMX0sCisJCXszLCA0fSwKKwkJezYsIDd9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGRjICovCisJCXt7Miwg
NH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMs
IDAsCQkvKiAweGRkICovCisJCXt7MCwgMH0sCisJCXsyLCA0fSwKKwkJezYsIDd9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGRlICovCisJCXt7MSwgNH0sCisJCXs2
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAw
eGRmICovCisJCXt7MCwgNH0sCisJCXs2LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGUwICovCisJCXt7NSwgN30sCisJCXswLCAwfSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGUxICovCisJ
CXt7MCwgMH0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAs
IDEsIDIsIDAsCQkvKiAweGUyICovCisJCXt7MSwgMX0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGUzICovCisJCXt7MCwgMX0s
CisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAs
CQkvKiAweGU0ICovCisJCXt7MiwgMn0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGU1ICovCisJCXt7MCwgMH0sCisJCXsyLCAy
fSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGU2
ICovCisJCXt7MSwgMn0sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezEsIDEsIDIsIDAsCQkvKiAweGU3ICovCisJCXt7MCwgMn0sCisJCXs1LCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGU4ICovCisJCXt7
MywgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEs
IDMsIDAsCQkvKiAweGU5ICovCisJCXt7MCwgMH0sCisJCXszLCAzfSwKKwkJezUsIDd9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDMsIDAsCQkvKiAweGVhICovCisJCXt7MSwgMX0sCisJ
CXszLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkv
KiAweGViICovCisJCXt7MCwgMX0sCisJCXszLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGVjICovCisJCXt7MiwgM30sCisJCXs1LCA3fSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDMsIDAsCQkvKiAweGVkICov
CisJCXt7MCwgMH0sCisJCXsyLCAzfSwKKwkJezUsIDd9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJ
ezAsIDEsIDIsIDAsCQkvKiAweGVlICovCisJCXt7MSwgM30sCisJCXs1LCA3fSwKKwkJezAsIDB9
LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGVmICovCisJCXt7MCwg
M30sCisJCXs1LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEs
IDAsCQkvKiAweGYwICovCisJCXt7NCwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwg
MH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGYxICovCisJCXt7MCwgMH0sCisJCXs0
LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAw
eGYyICovCisJCXt7MSwgMX0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQor
CX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGYzICovCisJCXt7MCwgMX0sCisJCXs0LCA3fSwKKwkJ
ezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGY0ICovCisJ
CXt7MiwgMn0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEs
IDEsIDMsIDAsCQkvKiAweGY1ICovCisJCXt7MCwgMH0sCisJCXsyLCAyfSwKKwkJezQsIDd9LAor
CQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDIsIDAsCQkvKiAweGY2ICovCisJCXt7MSwgMn0s
CisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAs
CQkvKiAweGY3ICovCisJCXt7MCwgMn0sCisJCXs0LCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0K
KwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkvKiAweGY4ICovCisJCXt7MywgN30sCisJCXswLCAw
fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGY5
ICovCisJCXt7MCwgMH0sCisJCXszLCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0s
CisJezAsIDEsIDIsIDAsCQkvKiAweGZhICovCisJCXt7MSwgMX0sCisJCXszLCA3fSwKKwkJezAs
IDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGZiICovCisJCXt7
MCwgMX0sCisJCXszLCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEs
IDEsIDAsCQkvKiAweGZjICovCisJCXt7MiwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7
MCwgMH0KKwkJfQorCX0sCisJezEsIDEsIDIsIDAsCQkvKiAweGZkICovCisJCXt7MCwgMH0sCisJ
CXsyLCA3fSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0sCisJezAsIDEsIDEsIDAsCQkv
KiAweGZlICovCisJCXt7MSwgN30sCisJCXswLCAwfSwKKwkJezAsIDB9LAorCQl7MCwgMH0KKwkJ
fQorCX0sCisJezEsIDEsIDEsIDAsCQkvKiAweGZmICovCisJCXt7MCwgN30sCisJCXswLCAwfSwK
KwkJezAsIDB9LAorCQl7MCwgMH0KKwkJfQorCX0KK307CisKKworaW50CitzY3RwX2lzX2FkZHJl
c3NfaW5fc2NvcGUoc3RydWN0IHNjdHBfaWZhICppZmEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgc3RydWN0IHNjdHBfc2NvcGluZyAqc2NvcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGRvX3VwZGF0ZSkKK3sKKwlpZiAoKHNjb3BlLT5sb29wYmFja19zY29wZSA9PSAwKSAmJgor
CSAgICAoaWZhLT5pZm5fcCkgJiYgU0NUUF9JRk5fSVNfSUZUX0xPT1AoaWZhLT5pZm5fcCkpIHsK
KwkJLyoKKwkJICogc2tpcCBsb29wYmFjayBpZiBub3QgaW4gc2NvcGUgKgorCQkgKi8KKwkJcmV0
dXJuICgwKTsKKwl9CisJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKHNjb3BlLT5pcHY0X2FkZHJfbGVnYWwpIHsK
KwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCQlzaW4gPSAmaWZhLT5hZGRyZXNzLnNp
bjsKKwkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJLyogbm90IGluIHNj
b3BlICwgdW5zcGVjaWZpZWQgKi8KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJaWYgKChzY29w
ZS0+aXB2NF9sb2NhbF9zY29wZSA9PSAwKSAmJgorCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJF
U1MoJnNpbi0+c2luX2FkZHIpKSkgeworCQkJCS8qIHByaXZhdGUgYWRkcmVzcyBub3QgaW4gc2Nv
cGUgKi8KKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuICgwKTsK
KwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJ
aWYgKHNjb3BlLT5pcHY2X2FkZHJfbGVnYWwpIHsKKwkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7CisKKyNpZiAhZGVmaW5lZChfX1BhbmRhX18pCisJCQkvKiBNdXN0IHVwZGF0ZSB0aGUgZmxh
Z3MsICBidW1tZXIsIHdoaWNoCisJCQkgKiBtZWFucyBhbnkgSUZBIGxvY2tzIG11c3Qgbm93IGJl
IGFwcGxpZWQgSEVSRSA8LT4KKwkJCSAqLworCQkJaWYgKGRvX3VwZGF0ZSkgeworCQkJCXNjdHBf
Z2F0aGVyX2ludGVybmFsX2lmYV9mbGFncyhpZmEpOworCQkJfQorI2VuZGlmCisJCQlpZiAoaWZh
LT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7CisJCQkJcmV0dXJu
ICgwKTsKKwkJCX0KKwkJCS8qIG9rIHRvIHVzZSBkZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KKwkJ
CXNpbjYgPSAmaWZhLT5hZGRyZXNzLnNpbjY7CisJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJ
RUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkvKiBza2lwIHVuc3BlY2lmZWQgYWRkcmVzc2Vz
ICovCisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWlmICgJCS8qIChsb2NhbF9zY29wZSA9PSAw
KSAmJiAqLworCQkJICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikp
KSB7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWlmICgoc2NvcGUtPnNpdGVfc2NvcGUgPT0g
MCkgJiYKKwkJCSAgICAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSkg
eworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKDApOworCQl9
CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZf
Q09OTjoKKwkJaWYgKCFzY29wZS0+Y29ubl9hZGRyX2xlZ2FsKSB7CisJCQlyZXR1cm4gKDApOwor
CQl9CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0
dXJuICgxKTsKK30KKworc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2FkZHJfdG9fbWJ1
ZihzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNjdHBfaWZhICppZmEsIHVpbnQxNl90ICpsZW4pCit7
CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzY3RwX3BhcmFt
aGRyICpwYXJhbWg7CisJc3RydWN0IG1idWYgKm1yZXQ7CisJdWludDE2X3QgcGxlbjsKKyNlbmRp
ZgorCisJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAor
CWNhc2UgQUZfSU5FVDoKKwkJcGxlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfaXB2
NGFkZHJfcGFyYW0pOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9J
TkVUNjoKKwkJcGxlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFy
YW0pOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAobSk7CisJfQorI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlpZiAoTV9UUkFJTElOR1NQQUNFKG0p
ID49IHBsZW4pIHsKKwkJLyogZWFzeSBzaWRlIHdlIGp1c3QgZHJvcCBpdCBvbiB0aGUgZW5kICov
CisJCXBhcmFtaCA9IChzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKShTQ1RQX0JVRl9BVChtLCBTQ1RQ
X0JVRl9MRU4obSkpKTsKKwkJbXJldCA9IG07CisJfSBlbHNlIHsKKwkJLyogTmVlZCBtb3JlIHNw
YWNlICovCisJCW1yZXQgPSBtOworCQl3aGlsZSAoU0NUUF9CVUZfTkVYVChtcmV0KSAhPSBOVUxM
KSB7CisJCQltcmV0ID0gU0NUUF9CVUZfTkVYVChtcmV0KTsKKwkJfQorCQlTQ1RQX0JVRl9ORVhU
KG1yZXQpID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHBsZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9E
QVRBKTsKKwkJaWYgKFNDVFBfQlVGX05FWFQobXJldCkgPT0gTlVMTCkgeworCQkJLyogV2UgYXJl
IGhvc2VkLCBjYW4ndCBhZGQgbW9yZSBhZGRyZXNzZXMgKi8KKwkJCXJldHVybiAobSk7CisJCX0K
KwkJbXJldCA9IFNDVFBfQlVGX05FWFQobXJldCk7CisJCXBhcmFtaCA9IG10b2QobXJldCwgc3Ry
dWN0IHNjdHBfcGFyYW1oZHIgKik7CisJfQorCS8qIG5vdyBhZGQgdGhlIHBhcmFtZXRlciAqLwor
CXN3aXRjaCAoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNl
IEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqaXB2NHA7CisJCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCXNpbiA9ICZpZmEtPmFkZHJlc3Muc2luOworCQlp
cHY0cCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBhcmFtaDsKKwkJcGFyYW1oLT5w
YXJhbV90eXBlID0gaHRvbnMoU0NUUF9JUFY0X0FERFJFU1MpOworCQlwYXJhbWgtPnBhcmFtX2xl
bmd0aCA9IGh0b25zKHBsZW4pOworCQlpcHY0cC0+YWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRy
OworCQlTQ1RQX0JVRl9MRU4obXJldCkgKz0gcGxlbjsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJc3RydWN0IHNjdHBfaXB2NmFkZHJf
cGFyYW0gKmlwdjZwOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAm
aWZhLT5hZGRyZXNzLnNpbjY7CisJCWlwdjZwID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFt
ICopcGFyYW1oOworCQlwYXJhbWgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0lQVjZfQUREUkVT
Uyk7CisJCXBhcmFtaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGxlbik7CisJCW1lbWNweShpcHY2
cC0+YWRkciwgJnNpbjYtPnNpbjZfYWRkciwKKwkJICAgIHNpemVvZihpcHY2cC0+YWRkcikpOwor
I2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKwkJLyogY2xlYXIgZW1iZWRkZWQg
c2NvcGUgaW4gdGhlIGFkZHJlc3MgKi8KKwkJaW42X2NsZWFyc2NvcGUoKHN0cnVjdCBpbjZfYWRk
ciAqKWlwdjZwLT5hZGRyKTsKKyNlbmRpZgorCQlTQ1RQX0JVRl9MRU4obXJldCkgKz0gcGxlbjsK
KwkJYnJlYWs7CisJfQorI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIChtKTsKKwl9CisJaWYg
KGxlbiAhPSBOVUxMKSB7CisJCSpsZW4gKz0gcGxlbjsKKwl9CisJcmV0dXJuIChtcmV0KTsKKyNl
bmRpZgorfQorCisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2FkZHJlc3Nlc190b19pX2lhKHN0
cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3Njb3BpbmcgKnNjb3BlLAorCQkJICAgc3RydWN0
IG1idWYgKm1fYXQsIGludCBjbnRfaW5pdHNfdG8sCisJCQkgICB1aW50MTZfdCAqcGFkZGluZ19s
ZW4sIHVpbnQxNl90ICpjaHVua19sZW4pCit7CisJc3RydWN0IHNjdHBfdnJmICp2cmYgPSBOVUxM
OworCWludCBjbnQsIGxpbWl0X291dCA9IDAsIHRvdGFsX2NvdW50OworCXVpbnQzMl90IHZyZl9p
ZDsKKworCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7
CisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0gTlVMTCkgeworCQlT
Q1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJcmV0dXJuIChtX2F0KTsKKwl9CisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCXN0cnVjdCBzY3RwX2lm
YSAqc2N0cF9pZmFwOworCQlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucDsKKworCQljbnQgPSBj
bnRfaW5pdHNfdG87CisJCWlmICh2cmYtPnRvdGFsX2lmYV9jb3VudCA+IFNDVFBfQ09VTlRfTElN
SVQpIHsKKwkJCWxpbWl0X291dCA9IDE7CisJCQljbnQgPSBTQ1RQX0FERFJFU1NfTElNSVQ7CisJ
CQlnb3RvIHNraXBfY291bnQ7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZucCwgJnZyZi0+
aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCWlmICgoc2NvcGUtPmxvb3BiYWNrX3Njb3BlID09IDAp
ICYmCisJCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm5wKSkgeworCQkJCS8qCisJ
CQkJICogU2tpcCBsb29wYmFjayBkZXZpY2VzIGlmIGxvb3BiYWNrX3Njb3BlCisJCQkJICogbm90
IHNldAorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9GT1JFQUNIKHNjdHBf
aWZhcCwgJnNjdHBfaWZucC0+aWZhbGlzdCwgbmV4dF9pZmEpIHsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorI2lmZGVmIElORVQKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCQkgICAgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9p
bnAuaW5wLmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmFwLT5h
ZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1p
bHkgPT0gQUZfSU5FVDYpICYmCisJCQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5w
LmlucC5pbnBfY3JlZCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRk
cmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2Vu
ZGlmCisjZW5kaWYKKwkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9p
ZmFwKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJCWlmIChzY3RwX2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsK
KwkJCQkJY29udGludWU7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19p
bl9zY29wZShzY3RwX2lmYXAsIHNjb3BlLCAxKSA9PSAwKSB7CisJCQkJCWNvbnRpbnVlOworCQkJ
CX0KKwkJCQljbnQrKzsKKwkJCQlpZiAoY250ID4gU0NUUF9BRERSRVNTX0xJTUlUKSB7CisJCQkJ
CWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjbnQgPiBTQ1RQX0FERFJFU1NfTElNSVQpIHsK
KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCXNraXBfY291bnQ6CisJCWlmIChjbnQgPiAxKSB7CisJ
CQl0b3RhbF9jb3VudCA9IDA7CisJCQlMSVNUX0ZPUkVBQ0goc2N0cF9pZm5wLCAmdnJmLT5pZm5s
aXN0LCBuZXh0X2lmbikgeworCQkJCWNudCA9IDA7CisJCQkJaWYgKChzY29wZS0+bG9vcGJhY2tf
c2NvcGUgPT0gMCkgJiYKKwkJCQkgICAgU0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm5wKSkg
eworCQkJCQkvKgorCQkJCQkgKiBTa2lwIGxvb3BiYWNrIGRldmljZXMgaWYKKwkJCQkJICogbG9v
cGJhY2tfc2NvcGUgbm90IHNldAorCQkJCQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJ
CUxJU1RfRk9SRUFDSChzY3RwX2lmYXAsICZzY3RwX2lmbnAtPmlmYWxpc3QsIG5leHRfaWZhKSB7
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQkJCWlmICgoc2N0cF9p
ZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgorCQkJCQkgICAgKHByaXNv
bl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAg
ICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW4uc2luX2FkZHIpICE9IDApKSB7CisJCQkJ
CQljb250aW51ZTsKKwkJCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJaWYgKChzY3Rw
X2lmYXAtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJCQkgICAgKHBy
aXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAg
ICAgICAgICAgICAgJnNjdHBfaWZhcC0+YWRkcmVzcy5zaW42LnNpbjZfYWRkcikgIT0gMCkpIHsK
KwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJCQlpZiAoc2N0cF9p
c19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0cF9pZmFwKSkgeworCQkJCQkJY29udGludWU7CisJ
CQkJCX0KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJCWlmIChzY3RwX2lmYXAtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9
CisjZW5kaWYKKwkJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShzY3RwX2lmYXAsCisJ
CQkJCQkJCSAgICAgc2NvcGUsIDApID09IDApIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJ
CQkJCWlmICgoY2h1bmtfbGVuICE9IE5VTEwpICYmCisJCQkJCSAgICAocGFkZGluZ19sZW4gIT0g
TlVMTCkgJiYKKwkJCQkJICAgICgqcGFkZGluZ19sZW4gPiAwKSkgeworCQkJCQkJbWVtc2V0KG10
b2QobV9hdCwgY2FkZHJfdCkgKyAqY2h1bmtfbGVuLCAwLCAqcGFkZGluZ19sZW4pOworCQkJCQkJ
U0NUUF9CVUZfTEVOKG1fYXQpICs9ICpwYWRkaW5nX2xlbjsKKwkJCQkJCSpjaHVua19sZW4gKz0g
KnBhZGRpbmdfbGVuOworCQkJCQkJKnBhZGRpbmdfbGVuID0gMDsKKwkJCQkJfQorCQkJCQltX2F0
ID0gc2N0cF9hZGRfYWRkcl90b19tYnVmKG1fYXQsIHNjdHBfaWZhcCwgY2h1bmtfbGVuKTsKKwkJ
CQkJaWYgKGxpbWl0X291dCkgeworCQkJCQkJY250Kys7CisJCQkJCQl0b3RhbF9jb3VudCsrOwor
CQkJCQkJaWYgKGNudCA+PSAyKSB7CisJCQkJCQkJLyogdHdvIGZyb20gZWFjaCBhZGRyZXNzICov
CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAodG90YWxfY291bnQgPiBTQ1RQX0FE
RFJFU1NfTElNSVQpIHsKKwkJCQkJCQkvKiBObyBtb3JlIGFkZHJlc3NlcyAqLworCQkJCQkJCWJy
ZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJc3Ry
dWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCisJCWNudCA9IGNudF9pbml0c190bzsKKwkJLyogRmly
c3QsIGhvdyBtYW55ID8gKi8KKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJf
bGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NU
UF9CRUlOR19ERUxFVEVEKQorCQkJCS8qIEFkZHJlc3MgYmVpbmcgZGVsZXRlZCBieSB0aGUgc3lz
dGVtLCBkb250CisJCQkJICogbGlzdC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCWlmIChs
YWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCQkvKiBBZGRyZXNzIGJl
aW5nIGRlbGV0ZWQgb24gdGhpcyBlcAorCQkJCSAqIGRvbid0IGxpc3QuCisJCQkJICovCisJCQkJ
Y29udGludWU7CisJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGxhZGRy
LT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQljb250aW51ZTsK
KwkJCX0KKyNlbmRpZgorCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZShsYWRkci0+aWZh
LAorCQkJCQkJICAgICBzY29wZSwgMSkgPT0gMCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJ
Y250Kys7CisJCX0KKwkJLyoKKwkJICogVG8gZ2V0IHRocm91Z2ggYSBOQVQgd2Ugb25seSBsaXN0
IGFkZHJlc3NlcyBpZiB3ZSBoYXZlCisJCSAqIG1vcmUgdGhhbiBvbmUuIFRoYXQgd2F5IGlmIHlv
dSBqdXN0IGJpbmQgYSBzaW5nbGUgYWRkcmVzcworCQkgKiB3ZSBsZXQgdGhlIHNvdXJjZSBvZiB0
aGUgaW5pdCBkaWN0YXRlIG91ciBhZGRyZXNzLgorCQkgKi8KKwkJaWYgKGNudCA+IDEpIHsKKwkJ
CWNudCA9IGNudF9pbml0c190bzsKKwkJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlucC0+c2N0cF9h
ZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7
CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAobGFkZHItPmlmYS0+bG9jYWxpZmFfZmxh
Z3MgJiBTQ1RQX0JFSU5HX0RFTEVURUQpIHsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkgPT0gQUZfQ09OTikgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisjZW5kaWYKKwkJCQlp
ZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGxhZGRyLT5pZmEsCisJCQkJCQkJICAgICBzY29w
ZSwgMCkgPT0gMCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKChjaHVua19sZW4g
IT0gTlVMTCkgJiYKKwkJCQkgICAgKHBhZGRpbmdfbGVuICE9IE5VTEwpICYmCisJCQkJICAgICgq
cGFkZGluZ19sZW4gPiAwKSkgeworCQkJCQltZW1zZXQobXRvZChtX2F0LCBjYWRkcl90KSArICpj
aHVua19sZW4sIDAsICpwYWRkaW5nX2xlbik7CisJCQkJCVNDVFBfQlVGX0xFTihtX2F0KSArPSAq
cGFkZGluZ19sZW47CisJCQkJCSpjaHVua19sZW4gKz0gKnBhZGRpbmdfbGVuOworCQkJCQkqcGFk
ZGluZ19sZW4gPSAwOworCQkJCX0KKwkJCQltX2F0ID0gc2N0cF9hZGRfYWRkcl90b19tYnVmKG1f
YXQsIGxhZGRyLT5pZmEsIGNodW5rX2xlbik7CisJCQkJY250Kys7CisJCQkJaWYgKGNudCA+PSBT
Q1RQX0FERFJFU1NfTElNSVQpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJfQor
CVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJldHVybiAobV9hdCk7Cit9CisKK3N0YXRpYyBz
dHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9pc19pZmFfYWRkcl9wcmVmZXJyZWQoc3RydWN0IHNjdHBf
aWZhICppZmEsCisJCQkgICB1aW50OF90IGRlc3RfaXNfbG9vcCwKKwkJCSAgIHVpbnQ4X3QgZGVz
dF9pc19wcml2LAorCQkJICAgc2FfZmFtaWx5X3QgZmFtKQoreworCXVpbnQ4X3QgZGVzdF9pc19n
bG9iYWwgPSAwOworCS8qIGRlc3RfaXNfcHJpdiBpcyB0cnVlIGlmIGRlc3RpbmF0aW9uIGlzIGEg
cHJpdmF0ZSBhZGRyZXNzICovCisJLyogZGVzdF9pc19sb29wIGlzIHRydWUgaWYgZGVzdGluYXRp
b24gaXMgYSBsb29wYmFjayBhZGRyZXNzZXMgKi8KKworCS8qKgorCSAqIEhlcmUgd2UgZGV0ZXJt
aW5lIGlmIGl0cyBhIHByZWZlcnJlZCBhZGRyZXNzLiBBIHByZWZlcnJlZCBhZGRyZXNzCisJICog
bWVhbnMgaXQgaXMgdGhlIHNhbWUgc2NvcGUgb3IgaGlnaGVyIHNjb3BlIHRoZW4gdGhlIGRlc3Rp
bmF0aW9uLgorCSAqIEwgPSBsb29wYmFjaywgUCA9IHByaXZhdGUsIEcgPSBnbG9iYWwKKwkgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgIHNyYyAgICB8
ICBkZXN0IHwgcmVzdWx0CisJICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKiAgICAgTCAgICAgfCAgICBMICB8ICAgIHllcworCSAqICAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICBQICAgICB8ICAgIEwgIHwgICAg
eWVzLXY0IG5vLXY2CisJICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisJICogICAgIEcgICAgIHwgICAgTCAgfCAgICB5ZXMtdjQgbm8tdjYKKwkgKiAgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgTCAgICAgfCAgICBQ
ICB8ICAgIG5vCisJICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisJICogICAgIFAgICAgIHwgICAgUCAgfCAgICB5ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgICAgRyAgICAgfCAgICBQICB8ICAgIG5vCisJ
ICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICBM
ICAgICB8ICAgIEcgIHwgICAgbm8KKwkgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisJICogICAgIFAgICAgIHwgICAgRyAgfCAgICBubworCSAqICAgIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICAgIEcgICAgIHwgICAg
RyAgfCAgICB5ZXMKKwkgKiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorCSAqLworCisJaWYgKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgIT0gZmFtKSB7CisJ
CS8qIGZvcmdldCBtaXMtbWF0Y2hlZCBmYW1pbHkgKi8KKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJ
aWYgKChkZXN0X2lzX3ByaXYgPT0gMCkgJiYgKGRlc3RfaXNfbG9vcCA9PSAwKSkgeworCQlkZXN0
X2lzX2dsb2JhbCA9IDE7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSXMgZGVz
dGluYXRpb24gcHJlZmVycmVkOiIpOworCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIs
ICZpZmEtPmFkZHJlc3Muc2EpOworCS8qIE9rIHRoZSBhZGRyZXNzIG1heSBiZSBvayAqLworI2lm
ZGVmIElORVQ2CisJaWYgKGZhbSA9PSBBRl9JTkVUNikgeworCQkvKiBvayB0byB1c2UgZGVwcmVj
YXRlZCBhZGRyZXNzZXM/IG5vIGxldHMgbm90ISAqLworCQlpZiAoaWZhLT5sb2NhbGlmYV9mbGFn
cyAmIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMywgIk5POjFcbiIpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAoaWZhLT5zcmNf
aXNfcHJpdiAmJiAhaWZhLT5zcmNfaXNfbG9vcCkgeworCQkJaWYgKGRlc3RfaXNfbG9vcCkgewor
CQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86MlxuIik7CisJCQkJcmV0dXJuIChO
VUxMKTsKKwkJCX0KKwkJfQorCQlpZiAoaWZhLT5zcmNfaXNfZ2xvYikgeworCQkJaWYgKGRlc3Rf
aXNfbG9vcCkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86M1xuIik7CisJ
CQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCX0KKyNlbmRpZgorCS8qIE5vdyB0aGF0IHdl
IGtub3cgd2hhdCBpcyB3aGF0LCBpbXBsZW1lbnQgb3IgdGFibGUKKwkgKiB0aGlzIGNvdWxkIGlu
IHRoZW9yeSBiZSBkb25lIHNsaWNrZXIgKGl0IHVzZWQgdG8gYmUpLCBidXQgdGhpcworCSAqIGlz
IHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWVyIHRvIHZhbGlkYXRlIDotKQorCSAqLworCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQzLCAic3JjX2xvb3A6JWQgc3JjX3ByaXY6JWQgc3JjX2dsb2I6
JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3AsIGlmYS0+c3JjX2lzX3ByaXYsIGlmYS0+c3JjX2lz
X2dsb2IpOworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiZGVzdF9sb29wOiVkIGRlc3Rf
cHJpdjolZCBkZXN0X2dsb2I6JWRcbiIsCisJCWRlc3RfaXNfbG9vcCwgZGVzdF9pc19wcml2LCBk
ZXN0X2lzX2dsb2JhbCk7CisKKwlpZiAoKGlmYS0+c3JjX2lzX2xvb3ApICYmIChkZXN0X2lzX3By
aXYpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86NFxuIik7CisJCXJldHVy
biAoTlVMTCk7CisJfQorCWlmICgoaWZhLT5zcmNfaXNfZ2xvYikgJiYgKGRlc3RfaXNfcHJpdikp
IHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJOTzo1XG4iKTsKKwkJcmV0dXJuIChO
VUxMKTsKKwl9CisJaWYgKChpZmEtPnNyY19pc19sb29wKSAmJiAoZGVzdF9pc19nbG9iYWwpKSB7
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiTk86NlxuIik7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCWlmICgoaWZhLT5zcmNfaXNfcHJpdikgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgewor
CQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIk5POjdcbiIpOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIllFU1xuIik7CisJLyogaXRzIGEg
cHJlZmVycmVkIGFkZHJlc3MgKi8KKwlyZXR1cm4gKGlmYSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
c2N0cF9pZmEgKgorc2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHN0cnVjdCBzY3RwX2lmYSAq
aWZhLAorCQkJICAgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJICAgIHVpbnQ4X3QgZGVzdF9p
c19wcml2LAorCQkJICAgIHNhX2ZhbWlseV90IGZhbSkKK3sKKwl1aW50OF90IGRlc3RfaXNfZ2xv
YmFsID0gMDsKKworCS8qKgorCSAqIEhlcmUgd2UgZGV0ZXJtaW5lIGlmIGl0cyBhIGFjY2VwdGFi
bGUgYWRkcmVzcy4gQSBhY2NlcHRhYmxlCisJICogYWRkcmVzcyBtZWFucyBpdCBpcyB0aGUgc2Ft
ZSBzY29wZSBvciBoaWdoZXIgc2NvcGUgYnV0IHdlIGNhbgorCSAqIGFsbG93IGZvciBOQVQgd2hp
Y2ggbWVhbnMgaXRzIG9rIHRvIGhhdmUgYSBnbG9iYWwgZGVzdCBhbmQgYQorCSAqIHByaXZhdGUg
c3JjLgorCSAqCisJICogTCA9IGxvb3BiYWNrLCBQID0gcHJpdmF0ZSwgRyA9IGdsb2JhbAorCSAq
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogIHNyYyAgICB8
ICBkZXN0IHwgcmVzdWx0CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKiAgIEwgICAgIHwgICBMICAgfCAgICB5ZXMKKwkgKiAgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIFAgICAgIHwgICBMICAgfCAgICB5ZXMt
djQgbm8tdjYKKwkgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KwkgKiAgIEcgICAgIHwgICBMICAgfCAgICB5ZXMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgTCAgICAgfCAgIFAgICB8ICAgIG5vCisJICogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiAgIFAgICAgIHwgICBQ
ICAgfCAgICB5ZXMKKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCSAqICAgRyAgICAgfCAgIFAgICB8ICAgIHllcyAtIE1heSBub3Qgd29yaworCSAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICBMICAgICB8ICAgRyAg
IHwgICAgbm8KKwkgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
CSAqICAgUCAgICAgfCAgIEcgICB8ICAgIHllcyAtIE1heSBub3Qgd29yaworCSAqIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogICBHICAgICB8ICAgRyAgIHwg
ICAgeWVzCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkg
Ki8KKworCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ICE9IGZhbSkgeworCQkvKiBmb3Jn
ZXQgbm9uIG1hdGNoaW5nIGZhbWlseSAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywg
ImlmYV9mYW06JWQgZmFtOiVkXG4iLAorCQkJaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSwgZmFt
KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogT2sgdGhlIGFkZHJlc3MgbWF5IGJlIG9rICov
CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMywgJmlmYS0+YWRkcmVzcy5zYSk7CisJ
U0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJkc3RfaXNfbG9vcDolZCBkZXN0X2lzX3ByaXY6
JWRcbiIsCisJCWRlc3RfaXNfbG9vcCwgZGVzdF9pc19wcml2KTsKKwlpZiAoKGRlc3RfaXNfbG9v
cCA9PSAwKSAmJiAoZGVzdF9pc19wcml2ID09IDApKSB7CisJCWRlc3RfaXNfZ2xvYmFsID0gMTsK
Kwl9CisjaWZkZWYgSU5FVDYKKwlpZiAoZmFtID09IEFGX0lORVQ2KSB7CisJCS8qIG9rIHRvIHVz
ZSBkZXByZWNhdGVkIGFkZHJlc3Nlcz8gKi8KKwkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBT
Q1RQX0FERFJfSUZBX1VOVVNFQUJMRSkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlpZiAo
aWZhLT5zcmNfaXNfcHJpdikgeworCQkJLyogU3BlY2lhbCBjYXNlLCBsaW5rbG9jYWwgdG8gbG9v
cCAqLworCQkJaWYgKGRlc3RfaXNfbG9vcCkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQor
I2VuZGlmCisJLyoKKwkgKiBOb3cgdGhhdCB3ZSBrbm93IHdoYXQgaXMgd2hhdCwgaW1wbGVtZW50
IG91ciB0YWJsZS4KKwkgKiBUaGlzIGNvdWxkIGluIHRoZW9yeSBiZSBkb25lIHNsaWNrZXIgKGl0
IHVzZWQgdG8gYmUpLCBidXQgdGhpcworCSAqIGlzIHN0cmFpZ2h0Zm9yd2FyZCBhbmQgZWFzaWVy
IHRvIHZhbGlkYXRlIDotKQorCSAqLworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiaWZh
LT5zcmNfaXNfbG9vcDolZCBkZXN0X2lzX3ByaXY6JWRcbiIsCisJCWlmYS0+c3JjX2lzX2xvb3As
CisJCWRlc3RfaXNfcHJpdik7CisJaWYgKChpZmEtPnNyY19pc19sb29wID09IDEpICYmIChkZXN0
X2lzX3ByaXYpKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19P
VVRQVVQzLCAiaWZhLT5zcmNfaXNfbG9vcDolZCBkZXN0X2lzX2dsb2I6JWRcbiIsCisJCWlmYS0+
c3JjX2lzX2xvb3AsCisJCWRlc3RfaXNfZ2xvYmFsKTsKKwlpZiAoKGlmYS0+c3JjX2lzX2xvb3Ag
PT0gMSkgJiYgKGRlc3RfaXNfZ2xvYmFsKSkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMywgImFkZHJlc3MgaXMgYWNjZXB0YWJsZVxuIik7CisJLyog
aXRzIGFuIGFjY2VwdGFibGUgYWRkcmVzcyAqLworCXJldHVybiAoaWZhKTsKK30KKworaW50Citz
Y3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3Rw
X2lmYSAqaWZhKQoreworCXN0cnVjdCBzY3RwX2xhZGRyICpsYWRkcjsKKworCWlmIChzdGNiID09
IE5VTEwpIHsKKwkJLyogVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucywgbm8gVENCIDotKSAqLwor
CQlyZXR1cm4gKDApOworCX0KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZzdGNiLT5hc29jLnNjdHBf
cmVzdHJpY3RlZF9hZGRycywgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBO
VUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIiVzOiBOVUxMIGlmYVxuIiwK
KwkJCQlfX2Z1bmNfXyk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAobGFkZHItPmlmYSA9PSBp
ZmEpIHsKKwkJCS8qIFllcyBpdCBpcyBvbiB0aGUgbGlzdCAqLworCQkJcmV0dXJuICgxKTsKKwkJ
fQorCX0KKwlyZXR1cm4gKDApOworfQorCisKK2ludAorc2N0cF9pc19hZGRyX2luX2VwKHN0cnVj
dCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQoreworCXN0cnVjdCBzY3Rw
X2xhZGRyICpsYWRkcjsKKworCWlmIChpZmEgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKwlMSVNU
X0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJ
CWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAiJXM6IE5VTEwgaWZhXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJ
CWlmICgobGFkZHItPmlmYSA9PSBpZmEpICYmIGxhZGRyLT5hY3Rpb24gPT0gMCkKKwkJCS8qIHNh
bWUgcG9pbnRlciAqLworCQkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworCisK
K3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19pbnAo
c3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJCSAgICAgIHNjdHBfcm91dGVfdCAqcm8sCisJCQkg
ICAgICB1aW50MzJfdCB2cmZfaWQsCisJCQkgICAgICBpbnQgbm9uX2Fzb2NfYWRkcl9vaywKKwkJ
CSAgICAgIHVpbnQ4X3QgZGVzdF9pc19wcml2LAorCQkJICAgICAgdWludDhfdCBkZXN0X2lzX2xv
b3AsCisJCQkgICAgICBzYV9mYW1pbHlfdCBmYW0pCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxh
ZGRyLCAqc3RhcnRpbmdfcG9pbnQ7CisJdm9pZCAqaWZuOworCWludCByZXNldHRvdG9wID0gMDsK
KwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmEs
ICpzaWZhOworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCXVpbnQzMl90IGlmbl9pbmRleDsKKwor
CXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwlpZiAodnJmID09IE5VTEwpCisJCXJldHVy
biAoTlVMTCk7CisKKwlpZm4gPSBTQ1RQX0dFVF9JRk5fVk9JRF9GUk9NX1JPVVRFKHJvKTsKKwlp
Zm5faW5kZXggPSBTQ1RQX0dFVF9JRl9JTkRFWF9GUk9NX1JPVVRFKHJvKTsKKwlzY3RwX2lmbiA9
IHNjdHBfZmluZF9pZm4oaWZuLCBpZm5faW5kZXgpOworCS8qCisJICogZmlyc3QgcXVlc3Rpb24s
IGlzIHRoZSBpZm4gd2Ugd2lsbCBlbWl0IG9uIGluIG91ciBsaXN0LCBpZiBzbywgd2UKKwkgKiB3
YW50IHN1Y2ggYW4gYWRkcmVzcy4gTm90ZSB0aGF0IHdlIGZpcnN0IGxvb2tlZCBmb3IgYQorCSAq
IHByZWZlcnJlZCBhZGRyZXNzLgorCSAqLworCWlmIChzY3RwX2lmbikgeworCQkvKiBpcyBhIHBy
ZWZlcnJlZCBvbmUgb24gdGhlIGludGVyZmFjZSB3ZSByb3V0ZSBvdXQ/ICovCisJCUxJU1RfRk9S
RUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisjaWZkZWYgSU5FVAorCQkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5z
YS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNChpbnAt
PmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZh
LT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKyNl
bmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWls
eSA9PSBBRl9JTkVUNikgJiYKKwkJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5p
bnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNz
LnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisj
ZW5kaWYKKwkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVS
X1VTRSkgJiYKKwkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJCQljb250aW51ZTsK
KwkJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX3ByZWZlcnJlZChzY3RwX2lmYSwKKwkJCQkJCQkg
IGRlc3RfaXNfbG9vcCwKKwkJCQkJCQkgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCWlmIChzaWZh
ID09IE5VTEwpCisJCQkJY29udGludWU7CisJCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwg
c2lmYSkpIHsKKwkJCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCQkJCXJl
dHVybiAoc2lmYSk7CisJCQl9CisJCX0KKwl9CisJLyoKKwkgKiBvaywgbm93IHdlIG5vdyBuZWVk
IHRvIGZpbmQgb25lIG9uIHRoZSBsaXN0IG9mIHRoZSBhZGRyZXNzZXMuCisJICogV2UgY2FuJ3Qg
Z2V0IG9uZSBvbiB0aGUgZW1pdHRpbmcgaW50ZXJmYWNlIHNvIGxldCdzIGZpbmQgZmlyc3QKKwkg
KiBhIHByZWZlcnJlZCBvbmUuIElmIG5vdCB0aGF0IGFuIGFjY2VwdGFibGUgb25lIG90aGVyd2lz
ZS4uLgorCSAqIHdlIHJldHVybiBOVUxMLgorCSAqLworCXN0YXJ0aW5nX3BvaW50ID0gaW5wLT5u
ZXh0X2FkZHJfdG91c2U7Cisgb25jZV9hZ2FpbjoKKwlpZiAoaW5wLT5uZXh0X2FkZHJfdG91c2Ug
PT0gTlVMTCkgeworCQlpbnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlucC0+c2N0
cF9hZGRyX2xpc3QpOworCQlyZXNldHRvdG9wID0gMTsKKwl9CisJZm9yIChsYWRkciA9IGlucC0+
bmV4dF9hZGRyX3RvdXNlOyBsYWRkcjsKKwkgICAgIGxhZGRyID0gTElTVF9ORVhUKGxhZGRyLCBz
Y3RwX254dF9hZGRyKSkgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkvKiBhZGRy
ZXNzIGhhcyBiZWVuIHJlbW92ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsYWRkci0+
YWN0aW9uID09IFNDVFBfREVMX0lQX0FERFJFU1MpIHsKKwkJCS8qIGFkZHJlc3MgaXMgYmVpbmcg
ZGVsZXRlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJf
cHJlZmVycmVkKGxhZGRyLT5pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgZGVzdF9pc19wcml2
LCBmYW0pOworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0b21pY19hZGRf
aW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChyZXNl
dHRvdG9wID09IDApIHsKKwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOworCQlnb3RvIG9u
Y2VfYWdhaW47CisJfQorCisJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBzdGFydGluZ19wb2ludDsK
KwlyZXNldHRvdG9wID0gMDsKKyBvbmNlX2FnYWluX3RvbzoKKwlpZiAoaW5wLT5uZXh0X2FkZHJf
dG91c2UgPT0gTlVMTCkgeworCQlpbnAtPm5leHRfYWRkcl90b3VzZSA9IExJU1RfRklSU1QoJmlu
cC0+c2N0cF9hZGRyX2xpc3QpOworCQlyZXNldHRvdG9wID0gMTsKKwl9CisKKwkvKiBvaywgd2hh
dCBhYm91dCBhbiBhY2NlcHRhYmxlIGFkZHJlc3MgaW4gdGhlIGlucCAqLworCWZvciAobGFkZHIg
PSBpbnAtPm5leHRfYWRkcl90b3VzZTsgbGFkZHI7CisJICAgICBsYWRkciA9IExJU1RfTkVYVChs
YWRkciwgc2N0cF9ueHRfYWRkcikpIHsKKwkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJ
LyogYWRkcmVzcyBoYXMgYmVlbiByZW1vdmVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAo
bGFkZHItPmFjdGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQkvKiBhZGRyZXNzIGlz
IGJlaW5nIGRlbGV0ZWQgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lm
YV9hZGRyX2FjY2VwdGFibGUobGFkZHItPmlmYSwgZGVzdF9pc19sb29wLAorCQkJCQkJICAgZGVz
dF9pc19wcml2LCBmYW0pOworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWF0
b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQor
CWlmIChyZXNldHRvdG9wID09IDApIHsKKwkJaW5wLT5uZXh0X2FkZHJfdG91c2UgPSBOVUxMOwor
CQlnb3RvIG9uY2VfYWdhaW5fdG9vOworCX0KKworCS8qCisJICogbm8gYWRkcmVzcyBib3VuZCBj
YW4gYmUgYSBzb3VyY2UgZm9yIHRoZSBkZXN0aW5hdGlvbiB3ZSBhcmUgaW4KKwkgKiB0cm91Ymxl
CisJICovCisJcmV0dXJuIChOVUxMKTsKK30KKworCisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pZmEg
Kgorc2N0cF9jaG9vc2VfYm91bmRzcGVjaWZpY19zdGNiKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
CisJCQkgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgIHNjdHBfcm91dGVf
dCAqcm8sCisJCQkgICAgICAgdWludDMyX3QgdnJmX2lkLAorCQkJICAgICAgIHVpbnQ4X3QgZGVz
dF9pc19wcml2LAorCQkJICAgICAgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJICAgICAgIGlu
dCBub25fYXNvY19hZGRyX29rLAorCQkJICAgICAgIHNhX2ZhbWlseV90IGZhbSkKK3sKKwlzdHJ1
Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpzdGFydGluZ19wb2ludDsKKwl2b2lkICppZm47CisJc3Ry
dWN0IHNjdHBfaWZuICpzY3RwX2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lm
YTsKKwl1aW50OF90IHN0YXJ0X2F0X2JlZ2lubmluZyA9IDA7CisJc3RydWN0IHNjdHBfdnJmICp2
cmY7CisJdWludDMyX3QgaWZuX2luZGV4OworCisJLyoKKwkgKiBmaXJzdCBxdWVzdGlvbiwgaXMg
dGhlIGlmbiB3ZSB3aWxsIGVtaXQgb24gaW4gb3VyIGxpc3QsIGlmIHNvLCB3ZQorCSAqIHdhbnQg
dGhhdCBvbmUuCisJICovCisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYg
PT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWlmbiA9IFNDVFBfR0VUX0lGTl9WT0lEX0ZS
T01fUk9VVEUocm8pOworCWlmbl9pbmRleCA9IFNDVFBfR0VUX0lGX0lOREVYX0ZST01fUk9VVEUo
cm8pOworCXNjdHBfaWZuID0gc2N0cF9maW5kX2lmbiggaWZuLCBpZm5faW5kZXgpOworCisJLyoK
KwkgKiBmaXJzdCBxdWVzdGlvbiwgaXMgdGhlIGlmbiB3ZSB3aWxsIGVtaXQgb24gaW4gb3VyIGxp
c3Q/ICBJZiBzbywKKwkgKiB3ZSB3YW50IHRoYXQgb25lLiBGaXJzdCB3ZSBsb29rIGZvciBhIHBy
ZWZlcnJlZC4gU2Vjb25kLCB3ZSBnbworCSAqIGZvciBhbiBhY2NlcHRhYmxlLgorCSAqLworCWlm
IChzY3RwX2lmbikgeworCQkvKiBmaXJzdCB0cnkgZm9yIGEgcHJlZmVycmVkIGFkZHJlc3Mgb24g
dGhlIGVwICovCisJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5pZmFsaXN0LCBu
ZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZkZWYgSU5FVAorCQkJaWYg
KChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKwkJCSAgICAo
cHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAg
ICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJ
CQljb250aW51ZTsKKwkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoKHNjdHBfaWZh
LT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJCSAgICAocHJpc29uX2No
ZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRp
bnVlOworCQkJfQorI2VuZGlmCisjZW5kaWYKKwkJCWlmICgoc2N0cF9pZmEtPmxvY2FsaWZhX2Zs
YWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYgKG5vbl9hc29jX2FkZHJfb2sgPT0gMCkpCisJ
CQkJY29udGludWU7CisJCQlpZiAoc2N0cF9pc19hZGRyX2luX2VwKGlucCwgc2N0cF9pZmEpKSB7
CisJCQkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfcHJlZmVycmVkKHNjdHBfaWZhLCBkZXN0X2lz
X2xvb3AsIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJCQlj
b250aW51ZTsKKwkJCQlpZiAoKChub25fYXNvY19hZGRyX29rID09IDApICYmCisJCQkJICAgICAo
c2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAorCQkJCSAgICAobm9uX2Fz
b2NfYWRkcl9vayAmJgorCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNp
ZmEpKSAmJgorCQkJCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7
CisJCQkJCS8qIG9uIHRoZSBuby1ubyBsaXN0ICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJ
CQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCQkJCXJldHVybiAoc2lmYSk7
CisJCQl9CisJCX0KKwkJLyogbmV4dCB0cnkgZm9yIGFuIGFjY2VwdGFibGUgYWRkcmVzcyBvbiB0
aGUgZXAgKi8KKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5l
eHRfaWZhKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQlpZiAo
KHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSAmJgorCQkJICAgIChw
cmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJ
CWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmICgoc2N0cF9pZmEt
PmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJICAgIChwcmlzb25fY2hl
Y2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHIpICE9IDApKSB7CisJCQkJY29udGlu
dWU7CisJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJaWYgKChzY3RwX2lmYS0+bG9jYWxpZmFfZmxh
Z3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAmJiAobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJ
CQljb250aW51ZTsKKwkJCWlmIChzY3RwX2lzX2FkZHJfaW5fZXAoaW5wLCBzY3RwX2lmYSkpIHsK
KwkJCQlzaWZhPSBzY3RwX2lzX2lmYV9hZGRyX2FjY2VwdGFibGUoc2N0cF9pZmEsIGRlc3RfaXNf
bG9vcCwgZGVzdF9pc19wcml2LGZhbSk7CisJCQkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCQkJY29u
dGludWU7CisJCQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkJCSAgICAgKHNj
dHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSkgfHwKKwkJCQkgICAgKG5vbl9hc29j
X2FkZHJfb2sgJiYKKwkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZh
KSkgJiYKKwkJCQkgICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgewor
CQkJCQkvKiBvbiB0aGUgbm8tbm8gbGlzdCAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJ
YXRvbWljX2FkZF9pbnQoJnNpZmEtPnJlZmNvdW50LCAxKTsKKwkJCQlyZXR1cm4gKHNpZmEpOwor
CQkJfQorCQl9CisKKwl9CisJLyoKKwkgKiBpZiB3ZSBjYW4ndCBmaW5kIG9uZSBsaWtlIHRoYXQg
dGhlbiB3ZSBtdXN0IGxvb2sgYXQgYWxsCisJICogYWRkcmVzc2VzIGJvdW5kIHRvIHBpY2sgb25l
IGF0IGZpcnN0IHByZWZlcmFibGUgdGhlbgorCSAqIHNlY29uZGx5IGFjY2VwdGFibGUuCisJICov
CisJc3RhcnRpbmdfcG9pbnQgPSBzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzOworIHNjdHBf
ZnJvbV90aGVfdG9wOgorCWlmIChzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID09IE5VTEwp
IHsKKwkJc3RhcnRfYXRfYmVnaW5uaW5nID0gMTsKKwkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRk
cmVzcyA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hZGRyX2xpc3QpOworCX0KKwkvKiBzZWFyY2gg
YmVnaW5uaW5nIHdpdGggdGhlIGxhc3QgdXNlZCBhZGRyZXNzICovCisJZm9yIChsYWRkciA9IHN0
Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3M7IGxhZGRyOworCSAgICAgbGFkZHIgPSBMSVNUX05F
WFQobGFkZHIsIHNjdHBfbnh0X2FkZHIpKSB7CisJCWlmIChsYWRkci0+aWZhID09IE5VTEwpIHsK
KwkJCS8qIGFkZHJlc3MgaGFzIGJlZW4gcmVtb3ZlZCAqLworCQkJY29udGludWU7CisJCX0KKwkJ
aWYgKGxhZGRyLT5hY3Rpb24gPT0gU0NUUF9ERUxfSVBfQUREUkVTUykgeworCQkJLyogYWRkcmVz
cyBpcyBiZWluZyBkZWxldGVkICovCisJCQljb250aW51ZTsKKwkJfQorCQlzaWZhID0gc2N0cF9p
c19pZmFfYWRkcl9wcmVmZXJyZWQobGFkZHItPmlmYSwgZGVzdF9pc19sb29wLCBkZXN0X2lzX3By
aXYsIGZhbSk7CisJCWlmIChzaWZhID09IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCgobm9u
X2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChz
dGNiLCBzaWZhKSkpIHx8CisJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgorCQkgICAgIChzY3Rw
X2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYKKwkJICAgICAoIXNjdHBfaXNfYWRk
cl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCS8qIG9uIHRoZSBuby1ubyBsaXN0ICovCisJ
CQljb250aW51ZTsKKwkJfQorCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7
CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7
CisJfQorCWlmIChzdGFydF9hdF9iZWdpbm5pbmcgPT0gMCkgeworCQlzdGNiLT5hc29jLmxhc3Rf
dXNlZF9hZGRyZXNzID0gTlVMTDsKKwkJZ290byBzY3RwX2Zyb21fdGhlX3RvcDsKKwl9CisJLyog
bm93IHRyeSBmb3IgYW55IGhpZ2hlciBzY29wZSB0aGFuIHRoZSBkZXN0aW5hdGlvbiAqLworCXN0
Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBzdGFydGluZ19wb2ludDsKKwlzdGFydF9hdF9i
ZWdpbm5pbmcgPSAwOworIHNjdHBfZnJvbV90aGVfdG9wMjoKKwlpZiAoc3RjYi0+YXNvYy5sYXN0
X3VzZWRfYWRkcmVzcyA9PSBOVUxMKSB7CisJCXN0YXJ0X2F0X2JlZ2lubmluZyA9IDE7CisJCXN0
Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYWRkcl9s
aXN0KTsKKwl9CisJLyogc2VhcmNoIGJlZ2lubmluZyB3aXRoIHRoZSBsYXN0IHVzZWQgYWRkcmVz
cyAqLworCWZvciAobGFkZHIgPSBzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzOyBsYWRkcjsK
KwkgICAgIGxhZGRyID0gTElTVF9ORVhUKGxhZGRyLCBzY3RwX254dF9hZGRyKSkgeworCQlpZiAo
bGFkZHItPmlmYSA9PSBOVUxMKSB7CisJCQkvKiBhZGRyZXNzIGhhcyBiZWVuIHJlbW92ZWQgKi8K
KwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChsYWRkci0+YWN0aW9uID09IFNDVFBfREVMX0lQX0FE
RFJFU1MpIHsKKwkJCS8qIGFkZHJlc3MgaXMgYmVpbmcgZGVsZXRlZCAqLworCQkJY29udGludWU7
CisJCX0KKwkJc2lmYSA9IHNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShsYWRkci0+aWZhLCBk
ZXN0X2lzX2xvb3AsCisJCQkJCQkgICBkZXN0X2lzX3ByaXYsIGZhbSk7CisJCWlmIChzaWZhID09
IE5VTEwpCisJCQljb250aW51ZTsKKwkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgor
CQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCSAgICAo
bm9uX2Fzb2NfYWRkcl9vayAmJgorCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNi
LCBzaWZhKSkgJiYKKwkJICAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkp
IHsKKwkJCS8qIG9uIHRoZSBuby1ubyBsaXN0ICovCisJCQljb250aW51ZTsKKwkJfQorCQlzdGNi
LT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7CisJCWF0b21pY19hZGRfaW50KCZzaWZh
LT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lmYSk7CisJfQorCWlmIChzdGFydF9hdF9iZWdp
bm5pbmcgPT0gMCkgeworCQlzdGNiLT5hc29jLmxhc3RfdXNlZF9hZGRyZXNzID0gTlVMTDsKKwkJ
Z290byBzY3RwX2Zyb21fdGhlX3RvcDI7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKK3N0YXRp
YyBzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9zZWxlY3RfbnRoX3ByZWZlcnJlZF9hZGRyX2Zyb21f
aWZuX2JvdW5kYWxsKHN0cnVjdCBzY3RwX2lmbiAqaWZuLAorI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfaW5wY2IgKmlucCwKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKmlucCBTQ1RQX1VOVVNFRCwK
KyNlbmRpZgorCQkJCQkJIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJCQkJCSBpbnQgbm9uX2Fz
b2NfYWRkcl9vaywKKwkJCQkJCSB1aW50OF90IGRlc3RfaXNfbG9vcCwKKwkJCQkJCSB1aW50OF90
IGRlc3RfaXNfcHJpdiwKKwkJCQkJCSBpbnQgYWRkcl93YW50ZWQsCisJCQkJCQkgc2FfZmFtaWx5
X3QgZmFtLAorCQkJCQkJIHNjdHBfcm91dGVfdCAqcm8KKwkJCQkJCSApCit7CisJc3RydWN0IHNj
dHBfaWZhICppZmEsICpzaWZhOworCWludCBudW1fZWxpZ2libGVfYWRkciA9IDA7CisjaWZkZWYg
SU5FVDYKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJc3RydWN0IHNvY2thZGRyX2lu
NiBzaW42LCBsc2E2OworCisJaWYgKGZhbSA9PSBBRl9JTkVUNikgeworCQltZW1jcHkoJnNpbjYs
ICZyby0+cm9fZHN0LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworI2lmZGVmIFNDVFBf
S0FNRQorCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKCZzaW42KTsKKyNlbHNlCisJCSh2b2lkKWlu
Nl9yZWNvdmVyc2NvcGUoJnNpbjYsICZzaW42LnNpbjZfYWRkciwgTlVMTCk7CisjZW5kaWYgIC8q
IFNDVFBfS0FNRSAqLworCX0KKyNlbmRpZiAgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLwor
I2VuZGlmCS8qIElORVQ2ICovCisJTElTVF9GT1JFQUNIKGlmYSwgJmlmbi0+aWZhbGlzdCwgbmV4
dF9pZmEpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmZGVmIElORVQKKwkJaWYgKChp
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCSAgICAocHJpc29uX2No
ZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAg
ICAmaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikgIT0gMCkpIHsKKwkJCWNvbnRpbnVlOworCQl9
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkg
PT0gQUZfSU5FVDYpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbjYuc2lu
Nl9hZGRyKSAhPSAwKSkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlm
ICgoaWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAo
bm9uX2Fzb2NfYWRkcl9vayA9PSAwKSkKKwkJCWNvbnRpbnVlOworCQlzaWZhID0gc2N0cF9pc19p
ZmFfYWRkcl9wcmVmZXJyZWQoaWZhLCBkZXN0X2lzX2xvb3AsCisJCQkJCQkgIGRlc3RfaXNfcHJp
diwgZmFtKTsKKwkJaWYgKHNpZmEgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworI2lmZGVmIElORVQ2
CisJCWlmIChmYW0gPT0gQUZfSU5FVDYgJiYKKwkJICAgIGRlc3RfaXNfbG9vcCAmJgorCQkgICAg
c2lmYS0+c3JjX2lzX2xvb3AgJiYgc2lmYS0+c3JjX2lzX3ByaXYpIHsKKwkJCS8qIGRvbid0IGFs
bG93IGZlODA6OjEgdG8gYmUgYSBzcmMgb24gbG9vcCA6OjEsIHdlIGRvbid0IGxpc3QgaXQKKwkJ
CSAqIHRvIHRoZSBwZWVyIHNvIHdlIHdpbGwgZ2V0IGFuIGFib3J0LgorCQkJICovCisJCQljb250
aW51ZTsKKwkJfQorI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJaWYgKGZhbSA9PSBB
Rl9JTkVUNiAmJgorCQkgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaWZhLT5hZGRyZXNzLnNp
bjYuc2luNl9hZGRyKSAmJgorCQkgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LnNpbjZf
YWRkcikpIHsKKwkJCS8qIGxpbmstbG9jYWwgPC0+IGxpbmstbG9jYWwgbXVzdCBiZWxvbmcgdG8g
dGhlIHNhbWUgc2NvcGUuICovCisJCQltZW1jcHkoJmxzYTYsICZzaWZhLT5hZGRyZXNzLnNpbjYs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjaWZkZWYgU0NUUF9LQU1FCisJCQkodm9p
ZClzYTZfcmVjb3ZlcnNjb3BlKCZsc2E2KTsKKyNlbHNlCisJCQkodm9pZClpbjZfcmVjb3ZlcnNj
b3BlKCZsc2E2LCAmbHNhNi5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmICAvKiBTQ1RQX0tBTUUg
Ki8KKwkJCWlmIChzaW42LnNpbjZfc2NvcGVfaWQgIT0gbHNhNi5zaW42X3Njb3BlX2lkKSB7CisJ
CQkJY29udGludWU7CisJCQl9CisJCX0KKyNlbmRpZiAgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09Q
RSAqLworI2VuZGlmCS8qIElORVQ2ICovCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkvKiBDaGVjayBp
ZiB0aGUgSVB2NiBhZGRyZXNzIG1hdGNoZXMgdG8gbmV4dC1ob3AuCisJCSAgIEluIHRoZSBtb2Jp
bGUgY2FzZSwgb2xkIElQdjYgYWRkcmVzcyBtYXkgYmUgbm90IGRlbGV0ZWQKKwkJICAgZnJvbSB0
aGUgaW50ZXJmYWNlLiBUaGVuLCB0aGUgaW50ZXJmYWNlIGhhcyBwcmV2aW91cyBhbmQKKwkJICAg
bmV3IGFkZHJlc3Nlcy4gIFdlIHNob3VsZCB1c2Ugb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlCisJ
CSAgIG5leHQtaG9wLiAgKGJ5IG1pY2NoaWUpCisJCSAqLworI2lmZGVmIElORVQ2CisJCWlmIChz
dGNiICYmIGZhbSA9PSBBRl9JTkVUNiAmJgorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJl
X29uKHN0Y2ItPnNjdHBfZXAsIFNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKKwkJCWlmIChzY3RwX3Y2
c3JjX21hdGNoX25leHRob3AoJnNpZmEtPmFkZHJlc3Muc2luNiwgcm8pCisJCQkgICAgPT0gMCkg
eworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCS8qIEF2
b2lkIHRvcG9sb2dpY2FsbHkgaW5jb3JyZWN0IElQdjQgYWRkcmVzcyAqLworCQlpZiAoc3RjYiAm
JiBmYW0gPT0gQUZfSU5FVCAmJgorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0
Y2ItPnNjdHBfZXAsIFNDVFBfTU9CSUxJVFlfQkFTRSkpIHsKKwkJCWlmIChzY3RwX3Y0c3JjX21h
dGNoX25leHRob3Aoc2lmYSwgcm8pID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQor
I2VuZGlmCisjZW5kaWYKKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5f
c2NvcGUoaWZhLCAmc3RjYi0+YXNvYy5zY29wZSwgMCkgPT0gMCkgeworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQkJaWYgKCgobm9uX2Fzb2NfYWRkcl9vayA9PSAwKSAmJgorCQkJICAgICAoc2N0cF9p
c19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpKSB8fAorCQkJICAgIChub25fYXNvY19hZGRy
X29rICYmCisJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBzaWZhKSkgJiYK
KwkJCSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBzaWZhKSkpKSB7CisJCQkJLyoK
KwkJCQkgKiBJdCBpcyByZXN0cmljdGVkIGZvciBzb21lIHJlYXNvbi4uCisJCQkJICogcHJvYmFi
bHkgbm90IHlldCBhZGRlZC4KKwkJCQkgKi8KKwkJCQljb250aW51ZTsKKwkJCX0KKwkJfQorCQlp
ZiAobnVtX2VsaWdpYmxlX2FkZHIgPj0gYWRkcl93YW50ZWQpIHsKKwkJCXJldHVybiAoc2lmYSk7
CisJCX0KKwkJbnVtX2VsaWdpYmxlX2FkZHIrKzsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKwor
CitzdGF0aWMgaW50CitzY3RwX2NvdW50X251bV9wcmVmZXJyZWRfYm91bmRhbGwoc3RydWN0IHNj
dHBfaWZuICppZm4sCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2Vsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wIFNDVFBfVU5V
U0VELAorI2VuZGlmCisJCQkJICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkJICBpbnQgbm9u
X2Fzb2NfYWRkcl9vaywKKwkJCQkgIHVpbnQ4X3QgZGVzdF9pc19sb29wLAorCQkJCSAgdWludDhf
dCBkZXN0X2lzX3ByaXYsCisJCQkJICBzYV9mYW1pbHlfdCBmYW0pCit7CisJc3RydWN0IHNjdHBf
aWZhICppZmEsICpzaWZhOworCWludCBudW1fZWxpZ2libGVfYWRkciA9IDA7CisKKwlMSVNUX0ZP
UkVBQ0goaWZhLCAmaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisjaWZkZWYgSU5FVAorCQlpZiAoKGlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgJiYKKwkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICZpZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRy
KSAhPSAwKSkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlm
ICgoaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKwkJICAgIChzdGNi
ICE9IE5VTEwpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAuaW5w
X2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9h
ZGRyKSAhPSAwKSkgeworCQkJY29udGludWU7CisJCX0KKyNlbmRpZgorI2VuZGlmCisJCWlmICgo
aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9u
X2Fzb2NfYWRkcl9vayA9PSAwKSkgeworCQkJY29udGludWU7CisJCX0KKwkJc2lmYSA9IHNjdHBf
aXNfaWZhX2FkZHJfcHJlZmVycmVkKGlmYSwgZGVzdF9pc19sb29wLAorCQkJCQkJICBkZXN0X2lz
X3ByaXYsIGZhbSk7CisJCWlmIChzaWZhID09IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJ
CWlmIChzdGNiKSB7CisJCQlpZiAoc2N0cF9pc19hZGRyZXNzX2luX3Njb3BlKGlmYSwgJnN0Y2It
PmFzb2Muc2NvcGUsIDApID09IDApIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICgoKG5v
bl9hc29jX2FkZHJfb2sgPT0gMCkgJiYKKwkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVk
KHN0Y2IsIHNpZmEpKSkgfHwKKwkJCSAgICAobm9uX2Fzb2NfYWRkcl9vayAmJgorCQkJICAgICAo
c2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCisJCQkgICAgICghc2N0cF9p
c19hZGRyX3BlbmRpbmcoc3RjYiwgc2lmYSkpKSkgeworCQkJCS8qCisJCQkJICogSXQgaXMgcmVz
dHJpY3RlZCBmb3Igc29tZSByZWFzb24uLgorCQkJCSAqIHByb2JhYmx5IG5vdCB5ZXQgYWRkZWQu
CisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0KKwkJbnVtX2VsaWdpYmxlX2FkZHIr
KzsKKwl9CisJcmV0dXJuIChudW1fZWxpZ2libGVfYWRkcik7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg
c2N0cF9pZmEgKgorc2N0cF9jaG9vc2VfYm91bmRhbGwoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwK
KyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAgICBzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQsCisJCSAgICAgc2N0cF9yb3V0ZV90ICpybywKKwkJICAgICB1aW50
MzJfdCB2cmZfaWQsCisJCSAgICAgdWludDhfdCBkZXN0X2lzX3ByaXYsCisJCSAgICAgdWludDhf
dCBkZXN0X2lzX2xvb3AsCisJCSAgICAgaW50IG5vbl9hc29jX2FkZHJfb2ssCisJCSAgICAgc2Ff
ZmFtaWx5X3QgZmFtKQoreworCWludCBjdXJfYWRkcl9udW0gPSAwLCBudW1fcHJlZmVycmVkID0g
MDsKKwl2b2lkICppZm47CisJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbiwgKmxvb2tlZF9hdCA9
IE5VTEwsICplbWl0X2lmbjsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhLCAqc2lmYTsKKwl1
aW50MzJfdCBpZm5faW5kZXg7CisJc3RydWN0IHNjdHBfdnJmICp2cmY7CisjaWZkZWYgSU5FVAor
CWludCByZXRyaWVkID0gMDsKKyNlbmRpZgorCisJLyotCisJICogRm9yIGJvdW5kYWxsIHdlIGNh
biB1c2UgYW55IGFkZHJlc3MgaW4gdGhlIGFzc29jaWF0aW9uLgorCSAqIElmIG5vbl9hc29jX2Fk
ZHJfb2sgaXMgc2V0IHdlIGNhbiB1c2UgYW55IGFkZHJlc3MgKGF0IGxlYXN0IGluCisJICogdGhl
b3J5KS4gU28gd2UgbG9vayBmb3IgcHJlZmVycmVkIGFkZHJlc3NlcyBmaXJzdC4gSWYgd2UgZmlu
ZCBvbmUsCisJICogd2UgdXNlIGl0LiBPdGhlcndpc2Ugd2UgbmV4dCB0cnkgdG8gZ2V0IGFuIGFk
ZHJlc3Mgb24gdGhlCisJICogaW50ZXJmYWNlLCB3aGljaCB3ZSBzaG91bGQgYmUgYWJsZSB0byBk
byAodW5sZXNzIG5vbl9hc29jX2FkZHJfb2sKKwkgKiBpcyBmYWxzZSBhbmQgd2UgYXJlIHJvdXRl
ZCBvdXQgdGhhdCB3YXkpLiBJbiB0aGVzZSBjYXNlcyB3aGVyZSB3ZQorCSAqIGNhbid0IHVzZSB0
aGUgYWRkcmVzcyBvZiB0aGUgaW50ZXJmYWNlIHdlIGdvIHRocm91Z2ggYWxsIHRoZQorCSAqIGlm
bidzIGxvb2tpbmcgZm9yIGFuIGFkZHJlc3Mgd2UgY2FuIHVzZSBhbmQgZmlsbCB0aGF0IGluLiBQ
dW50aW5nCisJICogbWVhbnMgd2Ugc2VuZCBiYWNrIGFkZHJlc3MgMCwgd2hpY2ggd2lsbCBwcm9i
YWJseSBjYXVzZSBwcm9ibGVtcworCSAqIGFjdHVhbGx5IHNpbmNlIHRoZW4gSVAgd2lsbCBmaWxs
IGluIHRoZSBhZGRyZXNzIG9mIHRoZSByb3V0ZSBpZm4sCisJICogd2hpY2ggbWVhbnMgd2UgcHJv
YmFibHkgYWxyZWFkeSByZWplY3RlZCBpdC4uIGkuZS4gaGVyZSBjb21lcyBhbgorCSAqIGFib3J0
IDotPC4KKwkgKi8KKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBO
VUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWZuID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9S
T1VURShybyk7CisJaWZuX2luZGV4ID0gU0NUUF9HRVRfSUZfSU5ERVhfRlJPTV9ST1VURShybyk7
CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsImlmbiBmcm9tIHJvdXRlOiVwIGlmbl9pbmRl
eDolZFxuIiwgaWZuLCBpZm5faW5kZXgpOworCWVtaXRfaWZuID0gbG9va2VkX2F0ID0gc2N0cF9p
Zm4gPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZuX2luZGV4KTsKKwlpZiAoc2N0cF9pZm4gPT0gTlVM
TCkgeworCQkvKiA/PyBXZSBkb24ndCBoYXZlIHRoaXMgZ3V5ID8/ICovCisJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQyLCJObyBpZm4gZW1pdCBpbnRlcmZhY2U/XG4iKTsKKwkJZ290byBib3Vu
ZF9hbGxfcGxhbl9iOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiaWZuX2luZGV4
OiVkIG5hbWU6JXMgaXMgZW1pdCBpbnRlcmZhY2VcbiIsCisJCWlmbl9pbmRleCwgc2N0cF9pZm4t
Pmlmbl9uYW1lKTsKKworCWlmIChuZXQpIHsKKwkJY3VyX2FkZHJfbnVtID0gbmV0LT5pbmR4X29m
X2VsaWdpYmxlX25leHRfdG9fdXNlOworCX0KKwludW1fcHJlZmVycmVkID0gc2N0cF9jb3VudF9u
dW1fcHJlZmVycmVkX2JvdW5kYWxsKHNjdHBfaWZuLAorCQkJCQkJCSAgaW5wLCBzdGNiLAorCQkJ
CQkJCSAgbm9uX2Fzb2NfYWRkcl9vaywKKwkJCQkJCQkgIGRlc3RfaXNfbG9vcCwKKwkJCQkJCQkg
IGRlc3RfaXNfcHJpdiwgZmFtKTsKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIkZvdW5k
ICVkIHByZWZlcnJlZCBzb3VyY2UgYWRkcmVzc2VzIGZvciBpbnRmOiVzXG4iLAorCQludW1fcHJl
ZmVycmVkLCBzY3RwX2lmbi0+aWZuX25hbWUpOworCWlmIChudW1fcHJlZmVycmVkID09IDApIHsK
KwkJLyoKKwkJICogbm8gZWxpZ2libGUgYWRkcmVzc2VzLCB3ZSBtdXN0IHVzZSBzb21lIG90aGVy
IGludGVyZmFjZQorCQkgKiBhZGRyZXNzIGlmIHdlIGNhbiBmaW5kIG9uZS4KKwkJICovCisJCWdv
dG8gYm91bmRfYWxsX3BsYW5fYjsKKwl9CisJLyoKKwkgKiBPayB3ZSBoYXZlIG51bV9lbGlnaWJs
ZV9hZGRyIHNldCB3aXRoIGhvdyBtYW55IHdlIGNhbiB1c2UsIHRoaXMKKwkgKiBtYXkgdmFyeSBm
cm9tIGNhbGwgdG8gY2FsbCBkdWUgdG8gYWRkcmVzc2VzIGJlaW5nIGRlcHJlY2F0ZWQKKwkgKiBl
dGMuLgorCSAqLworCWlmIChjdXJfYWRkcl9udW0gPj0gbnVtX3ByZWZlcnJlZCkgeworCQljdXJf
YWRkcl9udW0gPSAwOworCX0KKwkvKgorCSAqIHNlbGVjdCB0aGUgbnRoIGFkZHJlc3MgZnJvbSB0
aGUgbGlzdCAod2hlcmUgY3VyX2FkZHJfbnVtIGlzIHRoZQorCSAqIG50aCkgYW5kIDAgaXMgdGhl
IGZpcnN0IG9uZSwgMSBpcyB0aGUgc2Vjb25kIG9uZSBldGMuLi4KKwkgKi8KKwlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMiwgImN1cl9hZGRyX251bTolZFxuIiwgY3VyX2FkZHJfbnVtKTsKKwor
CXNjdHBfaWZhID0gc2N0cF9zZWxlY3RfbnRoX3ByZWZlcnJlZF9hZGRyX2Zyb21faWZuX2JvdW5k
YWxsKHNjdHBfaWZuLCBpbnAsIHN0Y2IsIG5vbl9hc29jX2FkZHJfb2ssIGRlc3RfaXNfbG9vcCwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZGVzdF9pc19wcml2LCBjdXJfYWRkcl9udW0sIGZhbSwgcm8pOworCisJLyog
aWYgc2N0cF9pZmEgaXMgTlVMTCBzb21ldGhpbmcgY2hhbmdlZD8/LCBmYWxsIHRvIHBsYW4gYi4g
Ki8KKwlpZiAoc2N0cF9pZmEpIHsKKwkJYXRvbWljX2FkZF9pbnQoJnNjdHBfaWZhLT5yZWZjb3Vu
dCwgMSk7CisJCWlmIChuZXQpIHsKKwkJCS8qIHNhdmUgb2ZmIHdoZXJlIHRoZSBuZXh0IG9uZSB3
ZSB3aWxsIHdhbnQgKi8KKwkJCW5ldC0+aW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1
cl9hZGRyX251bSArIDE7CisJCX0KKwkJcmV0dXJuIChzY3RwX2lmYSk7CisJfQorCS8qCisJICog
cGxhbl9iOiBMb29rIGF0IGFsbCBpbnRlcmZhY2VzIGFuZCBmaW5kIGEgcHJlZmVycmVkIGFkZHJl
c3MuIElmCisJICogbm8gcHJlZmVycmVkIGZhbGwgdGhyb3VnaCB0byBwbGFuX2MuCisJICovCisg
Ym91bmRfYWxsX3BsYW5fYjoKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlRyeWluZyBQ
bGFuIEJcbiIpOworCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9p
Zm4pIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJFeGFtaW5lIGludGVyZmFjZSAl
c1xuIiwKKwkJCXNjdHBfaWZuLT5pZm5fbmFtZSk7CisJCWlmIChkZXN0X2lzX2xvb3AgPT0gMCAm
JiBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJCS8qIHdyb25nIGJhc2Ugc2Nv
cGUgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAic2tpcFxuIik7CisJCQljb250
aW51ZTsKKwkJfQorCQlpZiAoKHNjdHBfaWZuID09IGxvb2tlZF9hdCkgJiYgbG9va2VkX2F0KSB7
CisJCQkvKiBhbHJlYWR5IGxvb2tlZCBhdCB0aGlzIGd1eSAqLworCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDIsICJhbHJlYWR5IHNlZW5cbiIpOworCQkJY29udGludWU7CisJCX0KKwkJbnVt
X3ByZWZlcnJlZCA9IHNjdHBfY291bnRfbnVtX3ByZWZlcnJlZF9ib3VuZGFsbChzY3RwX2lmbiwg
aW5wLCBzdGNiLCBub25fYXNvY19hZGRyX29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19sb29wLCBkZXN0
X2lzX3ByaXYsIGZhbSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLAorCQkJIkZvdW5k
IGlmbjolcCAlZCBwcmVmZXJyZWQgc291cmNlIGFkZHJlc3Nlc1xuIiwKKwkJCWlmbiwgbnVtX3By
ZWZlcnJlZCk7CisJCWlmIChudW1fcHJlZmVycmVkID09IDApIHsKKwkJCS8qIE5vbmUgb24gdGhp
cyBpbnRlcmZhY2UuICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIk5vIHByZWZl
cnJlZCAtLSBza2lwcGluZyB0byBuZXh0XG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCVNDVFBE
QkcoU0NUUF9ERUJVR19PVVRQVVQyLAorCQkJIm51bSBwcmVmZXJyZWQ6JWQgb24gaW50ZXJmYWNl
OiVwIGN1cl9hZGRyX251bTolZFxuIiwKKwkJCW51bV9wcmVmZXJyZWQsICh2b2lkICopc2N0cF9p
Zm4sIGN1cl9hZGRyX251bSk7CisKKwkJLyoKKwkJICogT2sgd2UgaGF2ZSBudW1fZWxpZ2libGVf
YWRkciBzZXQgd2l0aCBob3cgbWFueSB3ZSBjYW4KKwkJICogdXNlLCB0aGlzIG1heSB2YXJ5IGZy
b20gY2FsbCB0byBjYWxsIGR1ZSB0byBhZGRyZXNzZXMKKwkJICogYmVpbmcgZGVwcmVjYXRlZCBl
dGMuLgorCQkgKi8KKwkJaWYgKGN1cl9hZGRyX251bSA+PSBudW1fcHJlZmVycmVkKSB7CisJCQlj
dXJfYWRkcl9udW0gPSAwOworCQl9CisJCXNpZmEgPSBzY3RwX3NlbGVjdF9udGhfcHJlZmVycmVk
X2FkZHJfZnJvbV9pZm5fYm91bmRhbGwoc2N0cF9pZm4sIGlucCwgc3RjYiwgbm9uX2Fzb2NfYWRk
cl9vaywgZGVzdF9pc19sb29wLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF9pc19wcml2LCBjdXJfYWRk
cl9udW0sIGZhbSwgcm8pOworCQlpZiAoc2lmYSA9PSBOVUxMKQorCQkJY29udGludWU7CisJCWlm
IChuZXQpIHsKKwkJCW5ldC0+aW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZSA9IGN1cl9hZGRy
X251bSArIDE7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIndlIHNlbGVjdGVkICVk
XG4iLAorCQkJCWN1cl9hZGRyX251bSk7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwg
IlNvdXJjZToiKTsKKwkJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZzaWZhLT5h
ZGRyZXNzLnNhKTsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiRGVzdDoiKTsKKwkJ
CVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX09VVFBVVDIsICZuZXQtPnJvLl9sX2FkZHIuc2EpOwor
CQl9CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCXJldHVybiAoc2lm
YSk7CisJfQorI2lmZGVmIElORVQKK2FnYWluX3dpdGhfcHJpdmF0ZV9hZGRyZXNzZXNfYWxsb3dl
ZDoKKyNlbmRpZgorCS8qIHBsYW5fYzogZG8gd2UgaGF2ZSBhbiBhY2NlcHRhYmxlIGFkZHJlc3Mg
b24gdGhlIGVtaXQgaW50ZXJmYWNlICovCisJc2lmYSA9IE5VTEw7CisJU0NUUERCRyhTQ1RQX0RF
QlVHX09VVFBVVDIsIlRyeWluZyBQbGFuIEM6IGZpbmQgYWNjZXB0YWJsZSBvbiBpbnRlcmZhY2Vc
biIpOworCWlmIChlbWl0X2lmbiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQyLCJKdW1wIHRvIFBsYW4gRCAtIG5vIGVtaXRfaWZuXG4iKTsKKwkJZ290byBwbGFuX2Q7CisJ
fQorCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJmVtaXRfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkg
eworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgImlmYTolcFxuIiwgKHZvaWQgKilzY3Rw
X2lmYSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCWlmICgoc2N0
cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCSAgICAocHJpc29u
X2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAg
ICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDIsIkphaWxlZFxuIik7CisJCQljb250aW51ZTsKKwkJfQorI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYgKChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkg
PT0gQUZfSU5FVDYpICYmCisJCSAgICAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCisJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2lu
Ni5zaW42X2FkZHIpICE9IDApKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwiSmFp
bGVkXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKyNlbmRpZgorCQlpZiAoKHNjdHBf
aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQUREUl9ERUZFUl9VU0UpICYmCisJCSAgICAobm9u
X2Fzb2NfYWRkcl9vayA9PSAwKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsIkRl
ZmVyXG4iKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCXNpZmEgPSBzY3RwX2lzX2lmYV9hZGRyX2Fj
Y2VwdGFibGUoc2N0cF9pZmEsIGRlc3RfaXNfbG9vcCwKKwkJCQkJCSAgIGRlc3RfaXNfcHJpdiwg
ZmFtKTsKKwkJaWYgKHNpZmEgPT0gTlVMTCkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDIsICJJRkEgbm90IGFjY2VwdGFibGVcbiIpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0
Y2IpIHsKKwkJCWlmIChzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc2lmYSwgJnN0Y2ItPmFzb2Mu
c2NvcGUsIDApID09IDApIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIk5PVCBp
biBzY29wZVxuIik7CisJCQkJc2lmYSA9IE5VTEw7CisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAoKChub25fYXNvY19hZGRyX29rID09IDApICYmCisJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVz
dHJpY3RlZChzdGNiLCBzaWZhKSkpIHx8CisJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJ
CSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNpZmEpKSAmJgorCQkJICAgICAo
IXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkvKgorCQkJCSAqIEl0
IGlzIHJlc3RyaWN0ZWQgZm9yIHNvbWUKKwkJCQkgKiByZWFzb24uLiBwcm9iYWJseSBub3QgeWV0
IGFkZGVkLgorCQkJCSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQyLCAiSXRzIHJl
c3RyaWN0ZWRcbiIpOworCQkJCXNpZmEgPSBOVUxMOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9
CisJCWF0b21pY19hZGRfaW50KCZzaWZhLT5yZWZjb3VudCwgMSk7CisJCWdvdG8gb3V0OworCX0K
KyBwbGFuX2Q6CisJLyoKKwkgKiBwbGFuX2Q6IFdlIGFyZSBpbiB0cm91YmxlLiBObyBwcmVmZXJy
ZWQgYWRkcmVzcyBvbiB0aGUgZW1pdAorCSAqIGludGVyZmFjZS4gQW5kIG5vdCBldmVuIGEgcHJl
ZmVycmVkIGFkZHJlc3Mgb24gYWxsIGludGVyZmFjZXMuCisJICogR28gb3V0IGFuZCBzZWUgaWYg
d2UgY2FuIGZpbmQgYW4gYWNjZXB0YWJsZSBhZGRyZXNzIHNvbWV3aGVyZQorCSAqIGFtb25nc3Qg
YWxsIGludGVyZmFjZXMuCisJICovCisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJUcnlp
bmcgUGxhbiBEIGxvb2tlZF9hdCBpcyAlcFxuIiwgKHZvaWQgKilsb29rZWRfYXQpOworCUxJU1Rf
Rk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJaWYgKGRlc3Rf
aXNfbG9vcCA9PSAwICYmIFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJLyog
d3JvbmcgYmFzZSBzY29wZSAqLworCQkJY29udGludWU7CisJCX0KKwkJTElTVF9GT1JFQUNIKHNj
dHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQlpZiAoKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSA9PSBBRl9JTkVUKSAmJgorCQkJICAgIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5w
LmlucC5pbnBfY3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJl
c3Muc2luLnNpbl9hZGRyKSAhPSAwKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwkJCWlmICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFG
X0lORVQ2KSAmJgorCQkJICAgIChwcmlzb25fY2hlY2tfaXA2KGlucC0+aXBfaW5wLmlucC5pbnBf
Y3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luNi5z
aW42X2FkZHIpICE9IDApKSB7CisJCQkJY29udGludWU7CisJCQl9CisjZW5kaWYKKyNlbmRpZgor
CQkJaWYgKChzY3RwX2lmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FERFJfREVGRVJfVVNFKSAm
JgorCQkJICAgIChub25fYXNvY19hZGRyX29rID09IDApKQorCQkJCWNvbnRpbnVlOworCQkJc2lm
YSA9IHNjdHBfaXNfaWZhX2FkZHJfYWNjZXB0YWJsZShzY3RwX2lmYSwKKwkJCQkJCQkgICBkZXN0
X2lzX2xvb3AsCisJCQkJCQkJICAgZGVzdF9pc19wcml2LCBmYW0pOworCQkJaWYgKHNpZmEgPT0g
TlVMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChzdGNiKSB7CisJCQkJaWYgKHNjdHBfaXNfYWRk
cmVzc19pbl9zY29wZShzaWZhLCAmc3RjYi0+YXNvYy5zY29wZSwgMCkgPT0gMCkgeworCQkJCQlz
aWZhID0gTlVMTDsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCWlmICgoKG5vbl9hc29jX2Fk
ZHJfb2sgPT0gMCkgJiYKKwkJCQkgICAgIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBz
aWZhKSkpIHx8CisJCQkJICAgIChub25fYXNvY19hZGRyX29rICYmCisJCQkJICAgICAoc2N0cF9p
c19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2lmYSkpICYmCisJCQkJICAgICAoIXNjdHBfaXNfYWRk
cl9wZW5kaW5nKHN0Y2IsIHNpZmEpKSkpIHsKKwkJCQkJLyoKKwkJCQkJICogSXQgaXMgcmVzdHJp
Y3RlZCBmb3Igc29tZQorCQkJCQkgKiByZWFzb24uLiBwcm9iYWJseSBub3QgeWV0IGFkZGVkLgor
CQkJCQkgKi8KKwkJCQkJc2lmYSA9IE5VTEw7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0K
KwkJCWdvdG8gb3V0OworCQl9CisJfQorI2lmZGVmIElORVQKKwlpZiAoc3RjYikgeworCQlpZiAo
KHJldHJpZWQgPT0gMCkgJiYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9zY29wZSA9PSAw
KSkgeworCQkJc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID0gMTsKKwkJCXJldHJp
ZWQgPSAxOworCQkJZ290byBhZ2Fpbl93aXRoX3ByaXZhdGVfYWRkcmVzc2VzX2FsbG93ZWQ7CisJ
CX0gZWxzZSBpZiAocmV0cmllZCA9PSAxKSB7CisJCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9j
YWxfc2NvcGUgPSAwOworCQl9CisJfQorI2VuZGlmCitvdXQ6CisjaWZkZWYgSU5FVAorCWlmIChz
aWZhKSB7CisJCWlmIChyZXRyaWVkID09IDEpIHsKKwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwg
JnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCQlpZiAoZGVzdF9pc19sb29wID09IDAgJiYg
U0NUUF9JRk5fSVNfSUZUX0xPT1Aoc2N0cF9pZm4pKSB7CisJCQkJCS8qIHdyb25nIGJhc2Ugc2Nv
cGUgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwg
JnNjdHBfaWZuLT5pZmFsaXN0LCBuZXh0X2lmYSkgeworCQkJCQlzdHJ1Y3Qgc2N0cF9pZmEgKnRt
cF9zaWZhOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZmRlZiBJTkVUCisJCQkJCWlm
ICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpICYmCisJCQkJCSAg
ICAocHJpc29uX2NoZWNrX2lwNChpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAmc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyKSAhPSAwKSkg
eworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWlm
ICgoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSAmJgorCQkJCQkg
ICAgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyKSAhPSAw
KSkgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKyNlbmRpZgorI2VuZGlmCisJCQkJCWlmICgo
c2N0cF9pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0RFRkVSX1VTRSkgJiYKKwkJCQkJ
ICAgIChub25fYXNvY19hZGRyX29rID09IDApKQorCQkJCQkJY29udGludWU7CisJCQkJCXRtcF9z
aWZhID0gc2N0cF9pc19pZmFfYWRkcl9hY2NlcHRhYmxlKHNjdHBfaWZhLAorCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXN0X2lzX2xvb3AsCisJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RfaXNfcHJpdiwgZmFtKTsKKwkJ
CQkJaWYgKHRtcF9zaWZhID09IE5VTEwpIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJ
CWlmICh0bXBfc2lmYSA9PSBzaWZhKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlp
ZiAoc3RjYikgeworCQkJCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19pbl9zY29wZSh0bXBfc2lmYSwK
KwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnN0Y2ItPmFzb2Muc2NvcGUsIDAp
ID09IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKwkJCQkJCWlmICgoKG5vbl9hc29j
X2FkZHJfb2sgPT0gMCkgJiYKKwkJCQkJCSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0
Y2IsIHRtcF9zaWZhKSkpIHx8CisJCQkJCQkgICAgKG5vbl9hc29jX2FkZHJfb2sgJiYKKwkJCQkJ
CSAgICAgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKSkgJiYKKwkJCQkJ
CSAgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCB0bXBfc2lmYSkpKSkgeworCQkJCQkJ
CS8qCisJCQkJCQkJICogSXQgaXMgcmVzdHJpY3RlZCBmb3Igc29tZQorCQkJCQkJCSAqIHJlYXNv
bi4uIHByb2JhYmx5IG5vdCB5ZXQgYWRkZWQuCisJCQkJCQkJICovCisJCQkJCQkJY29udGludWU7
CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJaWYgKCh0bXBfc2lmYS0+YWRkcmVzcy5zaW4uc2luX2Zh
bWlseSA9PSBBRl9JTkVUKSAmJgorCQkJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVTUygmKHRt
cF9zaWZhLT5hZGRyZXNzLnNpbi5zaW5fYWRkcikpKSkgeworCQkJCQkJc2N0cF9hZGRfbG9jYWxf
YWRkcl9yZXN0cmljdGVkKHN0Y2IsIHRtcF9zaWZhKTsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJ
fQorCQlhdG9taWNfYWRkX2ludCgmc2lmYS0+cmVmY291bnQsIDEpOworCX0KKyNlbmRpZgorCXJl
dHVybiAoc2lmYSk7Cit9CisKKworCisvKiB0Y2IgbWF5IGJlIE5VTEwgKi8KK3N0cnVjdCBzY3Rw
X2lmYSAqCitzY3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wLAorCQkJICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJICAgICAgc2N0cF9yb3V0
ZV90ICpybywKKwkJCSAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJCSAgICAgIGludCBu
b25fYXNvY19hZGRyX29rLCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfaWZhICph
bnN3ZXI7CisJdWludDhfdCBkZXN0X2lzX3ByaXYsIGRlc3RfaXNfbG9vcDsKKwlzYV9mYW1pbHlf
dCBmYW07CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSAoc3RydWN0IHNv
Y2thZGRyX2luICopJnJvLT5yb19kc3Q7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnRvNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvLT5yb19kc3Q7Cisj
ZW5kaWYKKworCS8qKgorCSAqIFJ1bGVzOgorCSAqIC0gRmluZCB0aGUgcm91dGUgaWYgbmVlZGVk
LCBjYWNoZSBpZiBJIGNhbi4KKwkgKiAtIExvb2sgYXQgaW50ZXJmYWNlIGFkZHJlc3MgaW4gcm91
dGUsIElzIGl0IGluIHRoZSBib3VuZCBsaXN0LiBJZiBzbyB3ZQorCSAqICAgaGF2ZSB0aGUgYmVz
dCBzb3VyY2UuCisJICogLSBJZiBub3Qgd2UgbXVzdCByb3RhdGUgYW1vbmdzdCB0aGUgYWRkcmVz
c2VzLgorCSAqCisJICogQ2F2ZXRzIGFuZCBpc3N1ZXMKKwkgKgorCSAqIERvIHdlIG5lZWQgdG8g
cGF5IGF0dGVudGlvbiB0byBzY29wZS4gV2UgY2FuIGhhdmUgYSBwcml2YXRlIGFkZHJlc3MKKwkg
KiBvciBhIGdsb2JhbCBhZGRyZXNzIHdlIGFyZSBzb3VyY2luZyBvciBzZW5kaW5nIHRvLiBTbyBp
ZiB3ZSBkcmF3CisJICogaXQgb3V0CisJICogenp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enp6enp6egorCSAqIEZvciBWNAorCSAqIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqICAgICAgc291cmNlICAgICAqICAgICAg
ZGVzdCAgKiAgcmVzdWx0CisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKwkgKiA8YT4gIFByaXZhdGUgICAgKiAgICBHbG9iYWwgICogIE5BVAorCSAqIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogPGI+ICBQcml2YXRlICAg
ICogICAgUHJpdmF0ZSAqICBObyBwcm9ibGVtCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8Yz4gIEdsb2JhbCAgICAgKiAgICBQcml2YXRlICogIEh1
aCwgSG93IHdpbGwgdGhpcyB3b3JrPworCSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisJICogPGQ+ICBHbG9iYWwgICAgICogICAgR2xvYmFsICAqICBObyBQcm9i
bGVtCisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiB6
enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6CisJ
ICogRm9yIFY2CisJICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KwkgKiAgICAgIHNvdXJjZSAgICAgKiAgICAgIGRlc3QgICogIHJlc3VsdAorCSAqIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJICogPGE+ICBMaW5rbG9jYWwgICog
ICAgR2xvYmFsICAqCisJICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKwkgKiA8Yj4gIExpbmtsb2NhbCAgKiBMaW5rbG9jYWwgICogIE5vIHByb2JsZW0KKwkgKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCSAqIDxjPiAgR2xvYmFs
ICAgICAqIExpbmtsb2NhbCAgKiAgSHVoLCBIb3cgd2lsbCB0aGlzIHdvcms/CisJICogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgKiA8ZD4gIEdsb2JhbCAgICAg
KiAgICBHbG9iYWwgICogIE5vIFByb2JsZW0KKwkgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCSAqIHp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6enp6
enp6enp6enp6enp6enp6enp6enoKKwkgKgorCSAqIEFuZCB0aGVuIHdlIGFkZCB0byB0aGF0IHdo
YXQgaGFwcGVucyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgYWRkcmVzc2VzCisJICogYXNzaWduZWQg
dG8gYW4gaW50ZXJmYWNlLiBSZW1lbWJlciB0aGUgaWZhIG9uIGEgaWZuIGlzIGEgbGlua2VkCisJ
ICogbGlzdCBvZiBhZGRyZXNzZXMuIFNvIG9uZSBpbnRlcmZhY2UgY2FuIGhhdmUgbW9yZSB0aGFu
IG9uZSBJUAorCSAqIGFkZHJlc3MuIFdoYXQgaGFwcGVucyBpZiB3ZSBoYXZlIGJvdGggYSBwcml2
YXRlIGFuZCBhIGdsb2JhbAorCSAqIGFkZHJlc3M/IERvIHdlIHRoZW4gdXNlIGNvbnRleHQgb2Yg
ZGVzdGluYXRpb24gdG8gc29ydCBvdXQgd2hpY2gKKwkgKiBvbmUgaXMgYmVzdD8gQW5kIHdoYXQg
YWJvdXQgTkFUJ3Mgc2VuZGluZyBQLT5HIG1heSBnZXQgeW91IGEgTkFUCisJICogdHJhbnNsYXRp
b24sIG9yIHNob3VsZCB5b3Ugc2VsZWN0IHRoZSBHIHRoYXRzIG9uIHRoZSBpbnRlcmZhY2UgaW4K
KwkgKiBwcmVmZXJlbmNlLgorCSAqCisJICogRGVjaXNpb25zOgorCSAqCisJICogLSBjb3VudCB0
aGUgbnVtYmVyIG9mIGFkZHJlc3NlcyBvbiB0aGUgaW50ZXJmYWNlLgorCSAqIC0gaWYgaXQgaXMg
b25lLCBubyBwcm9ibGVtIGV4Y2VwdCBjYXNlIDxjPi4KKwkgKiAgIEZvciA8YT4gd2Ugd2lsbCBh
c3N1bWUgYSBOQVQgb3V0IHRoZXJlLgorCSAqIC0gaWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUs
IHRoZW4gd2UgbmVlZCB0byB3b3JyeSBhYm91dCBzY29wZSBQCisJICogICBvciBHLiBXZSBzaG91
bGQgcHJlZmVyIEcgLT4gRyBhbmQgUCAtPiBQIGlmIHBvc3NpYmxlLgorCSAqICAgVGhlbiBhcyBh
IHNlY29uZGFyeSBmYWxsIGJhY2sgdG8gbWl4ZWQgdHlwZXMgRy0+UCBiZWluZyBhIGxhc3QKKwkg
KiAgIGRpdGNoIG9uZS4KKwkgKiAtIFRoZSBhYm92ZSBhbGwgd29ya3MgZm9yIGJvdW5kIGFsbCwg
YnV0IGJvdW5kIHNwZWNpZmljIHdlIG5lZWQgdG8KKwkgKiAgIHVzZSB0aGUgc2FtZSBjb25jZXB0
IGJ1dCBpbnN0ZWFkIG9ubHkgY29uc2lkZXIgdGhlIGJvdW5kCisJICogICBhZGRyZXNzZXMuIElm
IHRoZSBib3VuZCBzZXQgaXMgTk9UIGFzc2lnbmVkIHRvIHRoZSBpbnRlcmZhY2UgdGhlbgorCSAq
ICAgd2UgbXVzdCB1c2Ugcm90YXRpb24gYW1vbmdzdCB0aGUgYm91bmQgYWRkcmVzc2VzLi4KKwkg
Ki8KKwlpZiAocm8tPnJvX3J0ID09IE5VTEwpIHsKKwkJLyoKKwkJICogTmVlZCBhIHJvdXRlIHRv
IGNhY2hlLgorCQkgKi8KKwkJU0NUUF9SVEFMTE9DKHJvLCB2cmZfaWQsIGlucC0+ZmlibnVtKTsK
Kwl9CisJaWYgKHJvLT5yb19ydCA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkvKiBPbiBXaW5kb3dzIHRoZSBzYV9m
YW1pbHkgaXMgVV9TSE9SVCBvciBBRERSRVNTX0ZBTUlMWSAqLworCWZhbSA9IChzYV9mYW1pbHlf
dClyby0+cm9fZHN0LnNhX2ZhbWlseTsKKyNlbHNlCisJZmFtID0gcm8tPnJvX2RzdC5zYV9mYW1p
bHk7CisjZW5kaWYKKwlkZXN0X2lzX3ByaXYgPSBkZXN0X2lzX2xvb3AgPSAwOworCS8qIFNldHVw
IG91ciBzY29wZXMgZm9yIHRoZSBkZXN0aW5hdGlvbiAqLworCXN3aXRjaCAoZmFtKSB7CisjaWZk
ZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJLyogU2NvcGUgYmFzZWQgb24gb3V0Ym91bmQgYWRk
cmVzcyAqLworCQlpZiAoSU40X0lTTE9PUEJBQ0tfQUREUkVTUygmdG8tPnNpbl9hZGRyKSkgewor
CQkJZGVzdF9pc19sb29wID0gMTsKKwkJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJCS8qIG1hcmsg
aXQgYXMgbG9jYWwgKi8KKwkJCQluZXQtPmFkZHJfaXNfbG9jYWwgPSAxOworCQkJfQorCQl9IGVs
c2UgaWYgKChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnRvLT5zaW5fYWRkcikpKSB7CisJCQlkZXN0
X2lzX3ByaXYgPSAxOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNl
IEFGX0lORVQ2OgorCQkvKiBTY29wZSBiYXNlZCBvbiBvdXRib3VuZCBhZGRyZXNzICovCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlpZiAoSU42X0lTX0FERFJfTE9PUEJB
Q0soJnRvNi0+c2luNl9hZGRyKSkgeworI2Vsc2UKKwkJaWYgKElONl9JU19BRERSX0xPT1BCQUNL
KCZ0bzYtPnNpbjZfYWRkcikgfHwKKwkJICAgIFNDVFBfUk9VVEVfSVNfUkVBTF9MT09QKHJvKSkg
eworI2VuZGlmCisJCQkvKgorCQkJICogSWYgdGhlIGFkZHJlc3MgaXMgYSBsb29wYmFjayBhZGRy
ZXNzLCB3aGljaAorCQkJICogY29uc2lzdHMgb2YgIjo6MSIgT1IgImZlODA6OjElbG8wIiwgd2Ug
YXJlIGxvb3BiYWNrCisJCQkgKiBzY29wZS4gQnV0IHdlIGRvbid0IHVzZSBkZXN0X2lzX3ByaXYg
KGxpbmsgbG9jYWwKKwkJCSAqIGFkZHJlc3NlcykuCisJCQkgKi8KKwkJCWRlc3RfaXNfbG9vcCA9
IDE7CisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQkvKiBtYXJrIGl0IGFzIGxvY2FsICovCisJ
CQkJbmV0LT5hZGRyX2lzX2xvY2FsID0gMTsKKwkJCX0KKwkJfSBlbHNlIGlmIChJTjZfSVNfQURE
Ul9MSU5LTE9DQUwoJnRvNi0+c2luNl9hZGRyKSkgeworCQkJZGVzdF9pc19wcml2ID0gMTsKKwkJ
fQorCQlicmVhazsKKyNlbmRpZgorCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgIlNl
bGVjdCBzb3VyY2UgYWRkciBmb3I6Iik7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVU
MiwgKHN0cnVjdCBzb2NrYWRkciAqKSZyby0+cm9fZHN0KTsKKwlTQ1RQX0lQSV9BRERSX1JMT0NL
KCk7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJ
CS8qCisJCSAqIEJvdW5kIGFsbCBjYXNlCisJCSAqLworCQlhbnN3ZXIgPSBzY3RwX2Nob29zZV9i
b3VuZGFsbChpbnAsIHN0Y2IsIG5ldCwgcm8sIHZyZl9pZCwKKwkJCQkJICAgICAgZGVzdF9pc19w
cml2LCBkZXN0X2lzX2xvb3AsCisJCQkJCSAgICAgIG5vbl9hc29jX2FkZHJfb2ssIGZhbSk7CisJ
CVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQlyZXR1cm4gKGFuc3dlcik7CisJfQorCS8qCisJ
ICogU3Vic2V0IGJvdW5kIGNhc2UKKwkgKi8KKwlpZiAoc3RjYikgeworCQlhbnN3ZXIgPSBzY3Rw
X2Nob29zZV9ib3VuZHNwZWNpZmljX3N0Y2IoaW5wLCBzdGNiLCBybywKKwkJCQkJCQl2cmZfaWQs
CWRlc3RfaXNfcHJpdiwKKwkJCQkJCQlkZXN0X2lzX2xvb3AsCisJCQkJCQkJbm9uX2Fzb2NfYWRk
cl9vaywgZmFtKTsKKwl9IGVsc2UgeworCQlhbnN3ZXIgPSBzY3RwX2Nob29zZV9ib3VuZHNwZWNp
ZmljX2lucChpbnAsIHJvLCB2cmZfaWQsCisJCQkJCQkgICAgICAgbm9uX2Fzb2NfYWRkcl9vaywK
KwkJCQkJCSAgICAgICBkZXN0X2lzX3ByaXYsCisJCQkJCQkgICAgICAgZGVzdF9pc19sb29wLCBm
YW0pOworCX0KKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKGFuc3dlcik7Cit9
CisKK3N0YXRpYyBpbnQKK3NjdHBfZmluZF9jbXNnKGludCBjX3R5cGUsIHZvaWQgKmRhdGEsIHN0
cnVjdCBtYnVmICpjb250cm9sLCBzaXplX3QgY3BzaXplKQoreworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwlXU0FDTVNHSERSIGNtaDsKKyNlbHNlCisJc3RydWN0IGNtc2do
ZHIgY21oOworI2VuZGlmCisJc3RydWN0IHNjdHBfc25kaW5mbyBzbmRpbmZvOworCXN0cnVjdCBz
Y3RwX3ByaW5mbyBwcmluZm87CisJc3RydWN0IHNjdHBfYXV0aGluZm8gYXV0aGluZm87CisJaW50
IHRvdF9sZW4sIHJlbV9sZW4sIGNtc2dfZGF0YV9sZW4sIGNtc2dfZGF0YV9vZmYsIG9mZjsKKwlp
bnQgZm91bmQ7CisKKwkvKgorCSAqIEluZGVwZW5kZW50IG9mIGhvdyBtYW55IG1idWZzLCBmaW5k
IHRoZSBjX3R5cGUgaW5zaWRlIHRoZSBjb250cm9sCisJICogc3RydWN0dXJlIGFuZCBjb3B5IG91
dCB0aGUgZGF0YS4KKwkgKi8KKwlmb3VuZCA9IDA7CisJdG90X2xlbiA9IFNDVFBfQlVGX0xFTihj
b250cm9sKTsKKwlmb3IgKG9mZiA9IDA7IG9mZiA8IHRvdF9sZW47IG9mZiArPSBDTVNHX0FMSUdO
KGNtaC5jbXNnX2xlbikpIHsKKwkJcmVtX2xlbiA9IHRvdF9sZW4gLSBvZmY7CisJCWlmIChyZW1f
bGVuIDwgKGludClDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogVGhlcmUgaXMgbm90
IGVub3VnaCByb29tIGZvciBvbmUgbW9yZS4gKi8KKwkJCXJldHVybiAoZm91bmQpOworCQl9CisJ
CW1fY29weWRhdGEoY29udHJvbCwgb2ZmLCBzaXplb2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7CisJ
CWlmIChjbWguY21zZ19sZW4gPCBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgeworCQkJLyogV2Ug
ZG9udCd0IGhhdmUgYSBjb21wbGV0ZSBDTVNHIGhlYWRlci4gKi8KKwkJCXJldHVybiAoZm91bmQp
OworCQl9CisJCWlmICgoY21oLmNtc2dfbGVuID4gSU5UX01BWCkgfHwgKChpbnQpY21oLmNtc2df
bGVuID4gcmVtX2xlbikpIHsKKwkJCS8qIFdlIGRvbid0IGhhdmUgdGhlIGNvbXBsZXRlIENNU0cu
ICovCisJCQlyZXR1cm4gKGZvdW5kKTsKKwkJfQorCQljbXNnX2RhdGFfbGVuID0gKGludCljbWgu
Y21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKTsKKwkJY21zZ19kYXRhX29mZiA9IG9m
ZiArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpOworCQlpZiAoKGNtaC5jbXNnX2xldmVsID09IElQ
UFJPVE9fU0NUUCkgJiYKKwkJICAgICgoY190eXBlID09IGNtaC5jbXNnX3R5cGUpIHx8CisJCSAg
ICAgKChjX3R5cGUgPT0gU0NUUF9TTkRSQ1YpICYmCisJCSAgICAgICgoY21oLmNtc2dfdHlwZSA9
PSBTQ1RQX1NORElORk8pIHx8CisJCSAgICAgICAoY21oLmNtc2dfdHlwZSA9PSBTQ1RQX1BSSU5G
TykgfHwKKwkJICAgICAgIChjbWguY21zZ190eXBlID09IFNDVFBfQVVUSElORk8pKSkpKSB7CisJ
CQlpZiAoY190eXBlID09IGNtaC5jbXNnX3R5cGUpIHsKKwkJCQlpZiAoY3BzaXplID4gSU5UX01B
WCkgeworCQkJCQlyZXR1cm4gKGZvdW5kKTsKKwkJCQl9CisJCQkJaWYgKGNtc2dfZGF0YV9sZW4g
PCAoaW50KWNwc2l6ZSkgeworCQkJCQlyZXR1cm4gKGZvdW5kKTsKKwkJCQl9CisJCQkJLyogSXQg
aXMgZXhhY3RseSB3aGF0IHdlIHdhbnQuIENvcHkgaXQgb3V0LiAqLworCQkJCW1fY29weWRhdGEo
Y29udHJvbCwgY21zZ19kYXRhX29mZiwgKGludCljcHNpemUsIChjYWRkcl90KWRhdGEpOworCQkJ
CXJldHVybiAoMSk7CisJCQl9IGVsc2UgeworCQkJCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKnNu
ZHJjdmluZm87CisKKwkJCQlzbmRyY3ZpbmZvID0gKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKilk
YXRhOworCQkJCWlmIChmb3VuZCA9PSAwKSB7CisJCQkJCWlmIChjcHNpemUgPCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc25kcmN2aW5mbykpIHsKKwkJCQkJCXJldHVybiAoZm91bmQpOworCQkJCQl9CisJ
CQkJCW1lbXNldChzbmRyY3ZpbmZvLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbykp
OworCQkJCX0KKwkJCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKKwkJCQljYXNlIFNDVFBfU05E
SU5GTzoKKwkJCQkJaWYgKGNtc2dfZGF0YV9sZW4gPCAoaW50KXNpemVvZihzdHJ1Y3Qgc2N0cF9z
bmRpbmZvKSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0
YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5mbyksIChj
YWRkcl90KSZzbmRpbmZvKTsKKwkJCQkJc25kcmN2aW5mby0+c2luZm9fc3RyZWFtID0gc25kaW5m
by5zbmRfc2lkOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19mbGFncyA9IHNuZGluZm8uc25kX2Zs
YWdzOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19wcGlkID0gc25kaW5mby5zbmRfcHBpZDsKKwkJ
CQkJc25kcmN2aW5mby0+c2luZm9fY29udGV4dCA9IHNuZGluZm8uc25kX2NvbnRleHQ7CisJCQkJ
CXNuZHJjdmluZm8tPnNpbmZvX2Fzc29jX2lkID0gc25kaW5mby5zbmRfYXNzb2NfaWQ7CisJCQkJ
CWJyZWFrOworCQkJCWNhc2UgU0NUUF9QUklORk86CisJCQkJCWlmIChjbXNnX2RhdGFfbGVuIDwg
KGludClzaXplb2Yoc3RydWN0IHNjdHBfcHJpbmZvKSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7
CisJCQkJCX0KKwkJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yo
c3RydWN0IHNjdHBfcHJpbmZvKSwgKGNhZGRyX3QpJnByaW5mbyk7CisJCQkJCWlmIChwcmluZm8u
cHJfcG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSB7CisJCQkJCQlzbmRyY3ZpbmZvLT5zaW5m
b190aW1ldG9saXZlID0gcHJpbmZvLnByX3ZhbHVlOworCQkJCQl9IGVsc2UgeworCQkJCQkJc25k
cmN2aW5mby0+c2luZm9fdGltZXRvbGl2ZSA9IDA7CisJCQkJCX0KKwkJCQkJc25kcmN2aW5mby0+
c2luZm9fZmxhZ3MgfD0gcHJpbmZvLnByX3BvbGljeTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBT
Q1RQX0FVVEhJTkZPOgorCQkJCQlpZiAoY21zZ19kYXRhX2xlbiA8IChpbnQpc2l6ZW9mKHN0cnVj
dCBzY3RwX2F1dGhpbmZvKSkgeworCQkJCQkJcmV0dXJuIChmb3VuZCk7CisJCQkJCX0KKwkJCQkJ
bV9jb3B5ZGF0YShjb250cm9sLCBjbXNnX2RhdGFfb2ZmLCBzaXplb2Yoc3RydWN0IHNjdHBfYXV0
aGluZm8pLCAoY2FkZHJfdCkmYXV0aGluZm8pOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19rZXlu
dW1iZXJfdmFsaWQgPSAxOworCQkJCQlzbmRyY3ZpbmZvLT5zaW5mb19rZXludW1iZXIgPSBhdXRo
aW5mby5hdXRoX2tleW51bWJlcjsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJcmV0
dXJuIChmb3VuZCk7CisJCQkJfQorCQkJCWZvdW5kID0gMTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1
cm4gKGZvdW5kKTsKK30KKworc3RhdGljIGludAorc2N0cF9wcm9jZXNzX2Ntc2dzX2Zvcl9pbml0
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKmNvbnRyb2wsIGludCAqZXJyb3Ip
Cit7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCVdTQUNNU0dIRFIgY21o
OworI2Vsc2UKKwlzdHJ1Y3QgY21zZ2hkciBjbWg7CisjZW5kaWYKKwlpbnQgdGxlbiwgYXQ7CisJ
c3RydWN0IHNjdHBfaW5pdG1zZyBpbml0bXNnOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW4gc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNp
bjY7CisjZW5kaWYKKworCXRsZW4gPSBTQ1RQX0JVRl9MRU4oY29udHJvbCk7CisJYXQgPSAwOwor
CXdoaWxlIChhdCA8IHRsZW4pIHsKKwkJaWYgKCh0bGVuIC0gYXQpIDwgKGludClDTVNHX0FMSUdO
KHNpemVvZihjbWgpKSkgeworCQkJLyogVGhlcmUgaXMgbm90IGVub3VnaCByb29tIGZvciBvbmUg
bW9yZS4gKi8KKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJbV9j
b3B5ZGF0YShjb250cm9sLCBhdCwgc2l6ZW9mKGNtaCksIChjYWRkcl90KSZjbWgpOworCQlpZiAo
Y21oLmNtc2dfbGVuIDwgQ01TR19BTElHTihzaXplb2YoY21oKSkpIHsKKwkJCS8qIFdlIGRvbnQn
dCBoYXZlIGEgY29tcGxldGUgQ01TRyBoZWFkZXIuICovCisJCQkqZXJyb3IgPSBFSU5WQUw7CisJ
CQlyZXR1cm4gKDEpOworCQl9CisJCWlmICgoKGludCljbWguY21zZ19sZW4gKyBhdCkgPiB0bGVu
KSB7CisJCQkvKiBXZSBkb24ndCBoYXZlIHRoZSBjb21wbGV0ZSBDTVNHLiAqLworCQkJKmVycm9y
ID0gRUlOVkFMOworCQkJcmV0dXJuICgxKTsKKwkJfQorCQlpZiAoY21oLmNtc2dfbGV2ZWwgPT0g
SVBQUk9UT19TQ1RQKSB7CisJCQlzd2l0Y2ggKGNtaC5jbXNnX3R5cGUpIHsKKwkJCWNhc2UgU0NU
UF9JTklUOgorCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVv
ZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IHNjdHBfaW5pdG1zZykpIHsKKwkJCQkJKmVycm9yID0g
RUlOVkFMOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQltX2NvcHlkYXRhKGNvbnRyb2ws
IGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0bXNn
KSwgKGNhZGRyX3QpJmluaXRtc2cpOworCQkJCWlmIChpbml0bXNnLnNpbml0X21heF9hdHRlbXB0
cykKKwkJCQkJc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1lcyA9IGluaXRtc2cuc2luaXRfbWF4X2F0
dGVtcHRzOworCQkJCWlmIChpbml0bXNnLnNpbml0X251bV9vc3RyZWFtcykKKwkJCQkJc3RjYi0+
YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gaW5pdG1zZy5zaW5pdF9udW1fb3N0cmVhbXM7CisJCQkJ
aWYgKGluaXRtc2cuc2luaXRfbWF4X2luc3RyZWFtcykKKwkJCQkJc3RjYi0+YXNvYy5tYXhfaW5i
b3VuZF9zdHJlYW1zID0gaW5pdG1zZy5zaW5pdF9tYXhfaW5zdHJlYW1zOworCQkJCWlmIChpbml0
bXNnLnNpbml0X21heF9pbml0X3RpbWVvKQorCQkJCQlzdGNiLT5hc29jLmluaXRpYWxfaW5pdF9y
dG9fbWF4ID0gaW5pdG1zZy5zaW5pdF9tYXhfaW5pdF90aW1lbzsKKwkJCQlpZiAoc3RjYi0+YXNv
Yy5zdHJlYW1vdXRjbnQgPCBzdGNiLT5hc29jLnByZV9vcGVuX3N0cmVhbXMpIHsKKwkJCQkJc3Ry
dWN0IHNjdHBfc3RyZWFtX291dCAqdG1wX3N0cjsKKwkJCQkJdW5zaWduZWQgaW50IGk7CisjaWYg
ZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJCQkJaW50IGo7CisjZW5kaWYKKwor
CQkJCQkvKiBEZWZhdWx0IGlzIE5PVCBjb3JyZWN0ICovCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19PVVRQVVQxLCAiT2ssIGRlZmF1bHQ6JWQgcHJlX29wZW46JWRcbiIsCisJCQkJCQlzdGNiLT5h
c29jLnN0cmVhbW91dGNudCwgc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zKTsKKwkJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX01BTExPQyh0bXBfc3RyLAorCQkJCQkgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICosCisJCQkJCSAgICAgICAgICAgIChzdGNi
LT5hc29jLnByZV9vcGVuX3N0cmVhbXMgKiBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX291dCkp
LAorCQkJCQkgICAgICAgICAgICBTQ1RQX01fU1RSTU8pOworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQkJCQlpZiAodG1wX3N0ciAhPSBOVUxMKSB7CisJCQkJCQlTQ1RQX0ZSRUUoc3RjYi0+
YXNvYy5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0ID0g
dG1wX3N0cjsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybV9yZWFsb3V0c2l6ZSA9IHN0Y2ItPmFzb2Mu
c3RyZWFtb3V0Y250ID0gc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zOworCQkJCQl9IGVsc2Ug
eworCQkJCQkJc3RjYi0+YXNvYy5wcmVfb3Blbl9zdHJlYW1zID0gc3RjYi0+YXNvYy5zdHJlYW1v
dXRjbnQ7CisJCQkJCX0KKwkJCQkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0
Y250OyBpKyspIHsKKwkJCQkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRx
dWV1ZSk7CisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IDA7
CisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQkJ
CQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKyNpZiBkZWZp
bmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQkJCQkJZm9yIChqID0gMDsgaiA8IFNDVFBf
UFJfU0NUUF9NQVggKyAxOyBqKyspIHsKKwkJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJh
bmRvbmVkX3NlbnRbal0gPSAwOworCQkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9u
ZWRfdW5zZW50W2pdID0gMDsKKwkJCQkJCX0KKyNlbHNlCisJCQkJCQlzdGNiLT5hc29jLnN0cm1v
dXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAwOworCQkJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ld
LmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2VuZGlmCisJCQkJCQlzdGNiLT5hc29jLnN0cm1v
dXRbaV0uc2lkID0gaTsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5sYXN0X21zZ19pbmNv
bXBsZXRlID0gMDsKKwkJCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RS
RUFNX09QRU5JTkc7CisJCQkJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXRf
c3RyZWFtKHN0Y2IsICZzdGNiLT5hc29jLnN0cm1vdXRbaV0sIE5VTEwpOworCQkJCQl9CisJCQkJ
fQorCQkJCWJyZWFrOworI2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9EU1RBRERSVjQ6CisJCQkJ
aWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSA8IHNp
emVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1
cm4gKDEpOworCQkJCX0KKwkJCQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbikpOworCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9M
RU4KKwkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlm
CisJCQkJc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCQkJbV9jb3B5ZGF0YShjb250cm9s
LCBhdCArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkpLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCAo
Y2FkZHJfdCkmc2luLnNpbl9hZGRyKTsKKwkJCQlpZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0g
SU5BRERSX0FOWSkgfHwKKwkJCQkgICAgKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0JS
T0FEQ0FTVCkgfHwKKwkJCQkgICAgSU5fTVVMVElDQVNUKG50b2hsKHNpbi5zaW5fYWRkci5zX2Fk
ZHIpKSkgeworCQkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJCXJldHVybiAoMSk7CisJCQkJfQor
CQkJCWlmIChzY3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNp
biwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0RPTk9UX1NFVFNDT1BFLCBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkgeworCQkJCQkqZXJy
b3IgPSBFTk9CVUZTOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJCQljYXNlIFNDVFBfRFNUQUREUlY2OgorCQkJCWlmICgoc2l6ZV90
KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0
IGluNl9hZGRyKSkgeworCQkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJCXJldHVybiAoMSk7CisJ
CQkJfQorCQkJCW1lbXNldCgmc2luNiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsK
KwkJCQlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgor
CQkJCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYK
KwkJCQlzaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJCW1fY29weWRhdGEoY29udHJv
bCwgYXQgKyBDTVNHX0FMSUdOKHNpemVvZihjbWgpKSwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciks
IChjYWRkcl90KSZzaW42LnNpbjZfYWRkcik7CisJCQkJaWYgKElONl9JU19BRERSX1VOU1BFQ0lG
SUVEKCZzaW42LnNpbjZfYWRkcikgfHwKKwkJCQkgICAgSU42X0lTX0FERFJfTVVMVElDQVNUKCZz
aW42LnNpbjZfYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKDEp
OworCQkJCX0KKyNpZmRlZiBJTkVUCisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42
LnNpbjZfYWRkcikpIHsKKwkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNpbjYpOworCQkJCQlp
ZiAoKHNpbi5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKKwkJCQkJICAgIChzaW4u
c2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8CisJCQkJCSAgICBJTl9NVUxU
SUNBU1QobnRvaGwoc2luLnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQkJCQkqZXJyb3IgPSBFSU5W
QUw7CisJCQkJCQlyZXR1cm4gKDEpOworCQkJCQl9CisJCQkJCWlmIChzY3RwX2FkZF9yZW1vdGVf
YWRkcihzdGNiLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgTlVMTCwgc3RjYi0+YXNvYy5wb3J0
LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09QRSwgU0NU
UF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKKwkJCQkJCSplcnJvciA9IEVOT0JVRlM7CisJCQkJCQly
ZXR1cm4gKDEpOworCQkJCQl9CisJCQkJfSBlbHNlCisjZW5kaWYKKwkJCQkJaWYgKHNjdHBfYWRk
X3JlbW90ZV9hZGRyKHN0Y2IsIChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNiwgTlVMTCwgc3RjYi0+
YXNvYy5wb3J0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRT
Q09QRSwgU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpIHsKKwkJCQkJCSplcnJvciA9IEVOT0JVRlM7
CisJCQkJCQlyZXR1cm4gKDEpOworCQkJCQl9CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1
bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYXQgKz0gQ01TR19BTElHTihjbWguY21zZ19s
ZW4pOworCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgc3RydWN0IHNjdHBfdGNiICoKK3Nj
dHBfZmluZGFzc29jaWF0aW9uX2Ntc2dzKHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBwb3J0LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0X3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgKmVycm9yKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlXU0FD
TVNHSERSIGNtaDsKKyNlbHNlCisJc3RydWN0IGNtc2doZHIgY21oOworI2VuZGlmCisJaW50IHRs
ZW4sIGF0OworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7
CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorCisJdGxlbiA9IFNDVFBf
QlVGX0xFTihjb250cm9sKTsKKwlhdCA9IDA7CisJd2hpbGUgKGF0IDwgdGxlbikgeworCQlpZiAo
KHRsZW4gLSBhdCkgPCAoaW50KUNNU0dfQUxJR04oc2l6ZW9mKGNtaCkpKSB7CisJCQkvKiBUaGVy
ZSBpcyBub3QgZW5vdWdoIHJvb20gZm9yIG9uZSBtb3JlLiAqLworCQkJKmVycm9yID0gRUlOVkFM
OworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQltX2NvcHlkYXRhKGNvbnRyb2wsIGF0LCBzaXpl
b2YoY21oKSwgKGNhZGRyX3QpJmNtaCk7CisJCWlmIChjbWguY21zZ19sZW4gPCBDTVNHX0FMSUdO
KHNpemVvZihjbWgpKSkgeworCQkJLyogV2UgZG9udCd0IGhhdmUgYSBjb21wbGV0ZSBDTVNHIGhl
YWRlci4gKi8KKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJ
aWYgKCgoaW50KWNtaC5jbXNnX2xlbiArIGF0KSA+IHRsZW4pIHsKKwkJCS8qIFdlIGRvbid0IGhh
dmUgdGhlIGNvbXBsZXRlIENNU0cuICovCisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4g
KE5VTEwpOworCQl9CisJCWlmIChjbWguY21zZ19sZXZlbCA9PSBJUFBST1RPX1NDVFApIHsKKwkJ
CXN3aXRjaCAoY21oLmNtc2dfdHlwZSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9EU1RB
RERSVjQ6CisJCQkJaWYgKChzaXplX3QpKGNtaC5jbXNnX2xlbiAtIENNU0dfQUxJR04oc2l6ZW9m
KGNtaCkpKSA8IHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCQkJKmVycm9yID0gRUlOVkFM
OworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCX0KKwkJCQltZW1zZXQoJnNpbiwgMCwgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQkJCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNp
ZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlzaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOworI2VuZGlmCisJCQkJc2luLnNpbl9wb3J0ID0gcG9ydDsKKwkJCQltX2NvcHlkYXRh
KGNvbnRyb2wsIGF0ICsgQ01TR19BTElHTihzaXplb2YoY21oKSksIHNpemVvZihzdHJ1Y3QgaW5f
YWRkciksIChjYWRkcl90KSZzaW4uc2luX2FkZHIpOworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopJnNpbjsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIFND
VFBfRFNUQUREUlY2OgorCQkJCWlmICgoc2l6ZV90KShjbWguY21zZ19sZW4gLSBDTVNHX0FMSUdO
KHNpemVvZihjbWgpKSkgPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkgeworCQkJCQkqZXJyb3Ig
PSBFSU5WQUw7CisJCQkJCXJldHVybiAoTlVMTCk7CisJCQkJfQorCQkJCW1lbXNldCgmc2luNiwg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJCQlzaW42LnNpbjZfZmFtaWx5ID0g
QUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQkJCXNpbjYuc2luNl9sZW4gPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCQlzaW42LnNpbjZfcG9ydCA9IHBv
cnQ7CisJCQkJbV9jb3B5ZGF0YShjb250cm9sLCBhdCArIENNU0dfQUxJR04oc2l6ZW9mKGNtaCkp
LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgKGNhZGRyX3QpJnNpbjYuc2luNl9hZGRyKTsKKyNp
ZmRlZiBJTkVUCisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LnNpbjZfYWRkcikp
IHsKKwkJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgJnNpbjYpOworCQkJCQlhZGRyID0gKHN0cnVj
dCBzb2NrYWRkciAqKSZzaW47CisJCQkJfSBlbHNlCisjZW5kaWYKKwkJCQkJYWRkciA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJ
CQlhZGRyID0gTlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChhZGRyKSB7CisJCQkJc3Rj
YiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGFkZHIsIG5ldF9wLCBOVUxM
LCBOVUxMKTsKKwkJCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQkJCXJldHVybiAoc3RjYik7CisJ
CQkJfQorCQkJfQorCQl9CisJCWF0ICs9IENNU0dfQUxJR04oY21oLmNtc2dfbGVuKTsKKwl9CisJ
cmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfYWRkX2Nvb2tp
ZShzdHJ1Y3QgbWJ1ZiAqaW5pdCwgaW50IGluaXRfb2Zmc2V0LAorICAgIHN0cnVjdCBtYnVmICpp
bml0YWNrLCBpbnQgaW5pdGFja19vZmZzZXQsIHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSAqc3Rj
X2luLCB1aW50OF90ICoqc2lnbmF0dXJlKQoreworCXN0cnVjdCBtYnVmICpjb3B5X2luaXQsICpj
b3B5X2luaXRhY2ssICptX2F0LCAqc2lnLCAqbXJldDsKKwlzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29r
aWUgKnN0YzsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdWludDhfdCAqZm9vOworCWlu
dCBzaWdfb2Zmc2V0OworCXVpbnQxNl90IGNvb2tpZV9zejsKKworCW1yZXQgPSBzY3RwX2dldF9t
YnVmX2Zvcl9tc2coKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsKKwkJCQkgICAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSwgMCwKKwkJCQkgICAgIE1fTk9XQUlULCAx
LCBNVF9EQVRBKTsKKwlpZiAobXJldCA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQor
CWNvcHlfaW5pdCA9IFNDVFBfTV9DT1BZTShpbml0LCBpbml0X29mZnNldCwgTV9DT1BZQUxMLCBN
X05PV0FJVCk7CisJaWYgKGNvcHlfaW5pdCA9PSBOVUxMKSB7CisJCXNjdHBfbV9mcmVlbShtcmV0
KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdf
RU5BQkxFKSB7CisJCXNjdHBfbG9nX21iYyhjb3B5X2luaXQsIFNDVFBfTUJVRl9JQ09QWSk7CisJ
fQorI2VuZGlmCisJY29weV9pbml0YWNrID0gU0NUUF9NX0NPUFlNKGluaXRhY2ssIGluaXRhY2tf
b2Zmc2V0LCBNX0NPUFlBTEwsCisJICAgIE1fTk9XQUlUKTsKKwlpZiAoY29weV9pbml0YWNrID09
IE5VTEwpIHsKKwkJc2N0cF9tX2ZyZWVtKG1yZXQpOworCQlzY3RwX21fZnJlZW0oY29weV9pbml0
KTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdf
RU5BQkxFKSB7CisJCXNjdHBfbG9nX21iYyhjb3B5X2luaXRhY2ssIFNDVFBfTUJVRl9JQ09QWSk7
CisJfQorI2VuZGlmCisJLyogZWFzeSBzaWRlIHdlIGp1c3QgZHJvcCBpdCBvbiB0aGUgZW5kICov
CisJcGggPSBtdG9kKG1yZXQsIHN0cnVjdCBzY3RwX3BhcmFtaGRyICopOworCVNDVFBfQlVGX0xF
TihtcmV0KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0ZV9jb29raWUpICsKKwkgICAgc2l6ZW9m
KHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwlzdGMgPSAoc3RydWN0IHNjdHBfc3RhdGVfY29va2ll
ICopKChjYWRkcl90KXBoICsKKwkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJ
cGgtPnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUQVRFX0NPT0tJRSk7CisJcGgtPnBhcmFtX2xl
bmd0aCA9IDA7CS8qIGZpbGwgaW4gYXQgdGhlIGVuZCAqLworCS8qIEZpbGwgaW4gdGhlIHN0YyBj
b29raWUgZGF0YSAqLworCW1lbWNweShzdGMsIHN0Y19pbiwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0
YXRlX2Nvb2tpZSkpOworCisJLyogdGFjayB0aGUgSU5JVCBhbmQgdGhlbiB0aGUgSU5JVC1BQ0sg
b250byB0aGUgY2hhaW4gKi8KKwljb29raWVfc3ogPSAwOworCWZvciAobV9hdCA9IG1yZXQ7IG1f
YXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JV
Rl9MRU4obV9hdCk7CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCVND
VFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXQ7CisJCQlicmVhazsKKwkJfQorCX0KKwlmb3Ig
KG1fYXQgPSBjb3B5X2luaXQ7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJ
CWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9hdCk7CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1f
YXQpID09IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05FWFQobV9hdCkgPSBjb3B5X2luaXRhY2s7CisJ
CQlicmVhazsKKwkJfQorCX0KKwlmb3IgKG1fYXQgPSBjb3B5X2luaXRhY2s7IG1fYXQ7IG1fYXQg
PSBTQ1RQX0JVRl9ORVhUKG1fYXQpKSB7CisJCWNvb2tpZV9zeiArPSBTQ1RQX0JVRl9MRU4obV9h
dCk7CisJCWlmIChTQ1RQX0JVRl9ORVhUKG1fYXQpID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9
CisJfQorCXNpZyA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhTQ1RQX1NFQ1JFVF9TSVpFLCAwLCBN
X05PV0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKHNpZyA9PSBOVUxMKSB7CisJCS8qIG5vIHNwYWNl
LCBzbyBmcmVlIHRoZSBlbnRpcmUgY2hhaW4gKi8KKwkJc2N0cF9tX2ZyZWVtKG1yZXQpOworCQly
ZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0JVRl9MRU4oc2lnKSA9IDA7CisJU0NUUF9CVUZfTkVY
VChtX2F0KSA9IHNpZzsKKwlzaWdfb2Zmc2V0ID0gMDsKKwlmb28gPSAodWludDhfdCAqKSAobXRv
ZChzaWcsIGNhZGRyX3QpICsgc2lnX29mZnNldCk7CisJbWVtc2V0KGZvbywgMCwgU0NUUF9TSUdO
QVRVUkVfU0laRSk7CisJKnNpZ25hdHVyZSA9IGZvbzsKKwlTQ1RQX0JVRl9MRU4oc2lnKSArPSBT
Q1RQX1NJR05BVFVSRV9TSVpFOworCWNvb2tpZV9zeiArPSBTQ1RQX1NJR05BVFVSRV9TSVpFOwor
CXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhjb29raWVfc3opOworCXJldHVybiAobXJldCk7Cit9
CisKKworc3RhdGljIHVpbnQ4X3QKK3NjdHBfZ2V0X2VjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ip
Cit7CisJaWYgKChzdGNiICE9IE5VTEwpICYmIChzdGNiLT5hc29jLmVjbl9zdXBwb3J0ZWQgPT0g
MSkpIHsKKwkJcmV0dXJuIChTQ1RQX0VDVDBfQklUKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDAp
OworCX0KK30KKworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKK3N0YXRpYyB2
b2lkCitzY3RwX2hhbmRsZV9ub19yb3V0ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAg
ICBpbnQgc29fbG9ja2VkKQoreworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiZHJvcHBl
ZCBwYWNrZXQgLSBubyB2YWxpZCBzb3VyY2UgYWRkclxuIik7CisKKwlpZiAobmV0KSB7CisJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiRGVzdGluYXRpb24gd2FzICIpOworCQlTQ1RQREJH
X0FERFIoU0NUUF9ERUJVR19PVVRQVVQxLCAmbmV0LT5yby5fbF9hZGRyLnNhKTsKKwkJaWYgKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9DT05GSVJNRUQpIHsKKwkJCWlmICgobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgJiYgc3RjYikgeworCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAibm8gcm91dGUgdGFrZXMgaW50ZXJmYWNlICVwIGRvd25cbiIsICh2
b2lkICopbmV0KTsKKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RP
V04sCisJCQkgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLCAwLAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgKHZvaWQgKiluZXQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICBzb19s
b2NrZWQpOworCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJ
CQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCX0KKwkJfQorCQlpZiAoc3Rj
YikgeworCQkJaWYgKG5ldCA9PSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJ
CQkvKiBuZWVkIGEgbmV3IHByaW1hcnkgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisK
KwkJCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDApOworCQkJCWlm
IChhbHQgIT0gbmV0KSB7CisJCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQkJCQkJ
c2N0cF9mcmVlX3JlbW90ZV9hZGRyKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKTsKKwkJCQkJfQorCQkJ
CQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IGFsdDsKKwkJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MuYWx0ZXJuYXRlLT5yZWZfY291bnQsIDEpOworCQkJCQlpZiAobmV0LT5yby5fc19hZGRy
KSB7CisJCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJCQluZXQtPnJv
Ll9zX2FkZHIgPSBOVUxMOworCQkJCQl9CisJCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAw
OworCQkJCX0KKwkJCX0KKwkJfQorCX0KK30KKyNlbmRpZgorCitzdGF0aWMgaW50CitzY3RwX2xv
d2xldmVsX2NodW5rX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwJLyogbWF5IGJlIE5VTEwgKi8KKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQsCisgICAgc3RydWN0IHNvY2thZGRyICp0bywKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICB1
aW50MzJfdCBhdXRoX29mZnNldCwKKyAgICBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICphdXRoLAor
ICAgIHVpbnQxNl90IGF1dGhfa2V5aWQsCisgICAgaW50IG5vZnJhZ21lbnRfZmxhZywKKyAgICBp
bnQgZWNuX29rLAorICAgIGludCBvdXRfb2ZfYXNvY19vaywKKyAgICB1aW50MTZfdCBzcmNfcG9y
dCwKKyAgICB1aW50MTZfdCBkZXN0X3BvcnQsCisgICAgdWludDMyX3Qgdl90YWcsCisgICAgdWlu
dDE2X3QgcG9ydCwKKyAgICB1bmlvbiBzY3RwX3NvY2tzdG9yZSAqb3Zlcl9hZGRyLAorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCisgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93
aWQsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09f
TE9DS19URVNUSU5HKQorICAgIGludCBzb19sb2NrZWQgU0NUUF9VTlVTRUQKKyNlbHNlCisgICAg
aW50IHNvX2xvY2tlZAorI2VuZGlmCisgICAgKQorLyogbm9mcmFnbWVudF9mbGFnIHRvIHRlbGwg
aWYgSVBfREYgc2hvdWxkIGJlIHNldCAoSVB2NCBvbmx5KSAqLworeworCS8qKgorCSAqIEdpdmVu
IGEgbWJ1ZiBjaGFpbiAodmlhIFNDVFBfQlVGX05FWFQoKSkgdGhhdCBob2xkcyBhIHBhY2tldCBo
ZWFkZXIKKwkgKiBXSVRIIGFuIFNDVFBIRFIgYnV0IG5vIElQIGhlYWRlciwgZW5kcG9pbnQgaW5w
IGFuZCBzYSBzdHJ1Y3R1cmU6CisJICogLSBmaWxsIGluIHRoZSBITUFDIGRpZ2VzdCBvZiBhbnkg
QVVUSCBjaHVuayBpbiB0aGUgcGFja2V0LgorCSAqIC0gY2FsY3VsYXRlIGFuZCBmaWxsIGluIHRo
ZSBTQ1RQIGNoZWNrc3VtLgorCSAqIC0gcHJlcGVuZCBhbiBJUCBhZGRyZXNzIGhlYWRlci4KKwkg
KiAtIGlmIGJvdW5kYWxsIHVzZSBJTkFERFJfQU5ZLgorCSAqIC0gaWYgYm91bmRzcGVjaWZpYyBk
byBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24uCisJICogLSBzZXQgZnJhZ21lbnRhdGlvbiBvcHRp
b24gZm9yIGlwVjQuCisJICogLSBPbiByZXR1cm4gZnJvbSBJUCBvdXRwdXQsIGNoZWNrL2FkanVz
dCBtdHUgc2l6ZSBvZiBvdXRwdXQKKwkgKiAgIGludGVyZmFjZSBhbmQgc21hbGxlc3RfbXR1IHNp
emUgYXMgd2VsbC4KKwkgKi8KKwkvKiBXaWxsIG5lZWQgaWZkZWZzIGFyb3VuZCB0aGlzICovCisj
aWZkZWYgX19QYW5kYV9fCisJcGFraGFuZGxlX3R5cGUgb19wYWs7CisjZW5kaWYKKwlzdHJ1Y3Qg
bWJ1ZiAqbmV3bTsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2N0cGhkcjsKKwlpbnQgcGFja2V0X2xlbmd0
aDsKKwlpbnQgcmV0OworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwl1aW50
MzJfdCB2cmZfaWQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYp
CisjaWYgIWRlZmluZWQoX19QYW5kYV9fKQorCXN0cnVjdCBtYnVmICpvX3BhazsKKyNlbmRpZgor
CXNjdHBfcm91dGVfdCAqcm8gPSBOVUxMOworCXN0cnVjdCB1ZHBoZHIgKnVkcCA9IE5VTEw7Cisj
ZW5kaWYKKwl1aW50OF90IHRvc192YWx1ZTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7Cisj
ZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0
cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwkJU0NUUF9UQ0JfTE9DS19BU1NFUlQo
c3RjYik7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkp
OworCX0KKyNlbmRpZgorCWlmICgobmV0KSAmJiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERS
X09VVF9PRl9TQ09QRSkpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNi
LCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJc2N0cF9tX2ZyZWVtKG0p
OworCQlyZXR1cm4gKEVGQVVMVCk7CisJfQorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlpZiAoc3RjYikgeworCQl2cmZfaWQgPSBzdGNiLT5hc29jLnZyZl9pZDsKKwl9IGVs
c2UgeworCQl2cmZfaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJfQorI2VuZGlmCisJLyogZmlsbCBp
biB0aGUgSE1BQyBkaWdlc3QgZm9yIGFueSBBVVRIIGNodW5rIGluIHRoZSBwYWNrZXQgKi8KKwlp
ZiAoKGF1dGggIT0gTlVMTCkgJiYgKHN0Y2IgIT0gTlVMTCkpIHsKKwkJc2N0cF9maWxsX2htYWNf
ZGlnZXN0X20obSwgYXV0aF9vZmZzZXQsIGF1dGgsIHN0Y2IsIGF1dGhfa2V5aWQpOworCX0KKwor
CWlmIChuZXQpIHsKKwkJdG9zX3ZhbHVlID0gbmV0LT5kc2NwOworCX0gZWxzZSBpZiAoc3RjYikg
eworCQl0b3NfdmFsdWUgPSBzdGNiLT5hc29jLmRlZmF1bHRfZHNjcDsKKwl9IGVsc2UgeworCQl0
b3NfdmFsdWUgPSBpbnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwOworCX0KKworCXN3aXRjaCAodG8t
PnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qg
aXAgKmlwID0gTlVMTDsKKwkJc2N0cF9yb3V0ZV90IGlwcm91dGU7CisJCWludCBsZW47CisKKwkJ
bGVuID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCWlmIChwb3J0KSB7CisJCQlsZW4gKz0gc2l6
ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCW5ld20gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2co
bGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdtID09IE5VTEwpIHsKKwkJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVOT01FTSk7CisJ
CX0KKwkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NUUF9CVUZfTEVOKG5ld20p
ID0gbGVuOworCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9IG5ld207CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQltLT5tX3BrdGhkci5m
bG93aWQgPSBuZXQtPmZsb3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIG5ldC0+Zmxvd3R5cGUp
OworCQl9IGVsc2UgeworCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbWZsb3dpZDsKKwkJCU1fSEFT
SFRZUEVfU0VUKG0sIG1mbG93dHlwZSk7CisgCQl9CisjZW5kaWYKKwkJcGFja2V0X2xlbmd0aCA9
IHNjdHBfY2FsY3VsYXRlX2xlbihtKTsKKwkJaXAgPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwkJ
aXAtPmlwX3YgPSBJUFZFUlNJT047CisJCWlwLT5pcF9obCA9IChzaXplb2Yoc3RydWN0IGlwKSA+
PiAyKTsKKwkJaWYgKHRvc192YWx1ZSA9PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBl
c3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQgdGhlCisJCQkgKiBTQ1RQIGxheWVyLiBT
byB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVyLgorCQkJICovCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQl0b3Nf
dmFsdWUgPSBpbnAtPmlwX2lucC5pbnAuaW5wX2lwX3RvczsKKyNlbHNlCisJCQl0b3NfdmFsdWUg
PSBpbnAtPmlucF9pcF90b3M7CisjZW5kaWYKKwkJfQorCQl0b3NfdmFsdWUgJj0gMHhmYzsKKwkJ
aWYgKGVjbl9vaykgeworCQkJdG9zX3ZhbHVlIHw9IHNjdHBfZ2V0X2VjdChzdGNiKTsKKwkJfQor
CQlpZiAoKG5vZnJhZ21lbnRfZmxhZykgJiYgKHBvcnQgPT0gMCkpIHsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJCWlwLT5pcF9v
ZmYgPSBodG9ucyhJUF9ERik7CisjZWxzZQorCQkJaXAtPmlwX29mZiA9IElQX0RGOworI2VuZGlm
CisjZWxpZiBkZWZpbmVkKFdJVEhfQ09OVkVSVF9JUF9PRkYpIHx8IGRlZmluZWQoX19BUFBMRV9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKKwkJCWlwLT5pcF9vZmYgPSBJUF9E
RjsKKyNlbHNlCisJCQlpcC0+aXBfb2ZmID0gaHRvbnMoSVBfREYpOworI2VuZGlmCisJCX0gZWxz
ZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTAw
MDAwMAorCQkJaXAtPmlwX29mZiA9IGh0b25zKDApOworI2Vsc2UKKwkJCWlwLT5pcF9vZmYgPSAw
OworI2VuZGlmCisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkvKiBGcmVlQlNEIGhh
cyBhIGZ1bmN0aW9uIGZvciBpcF9pZCdzICovCisJCWlwX2ZpbGxpZChpcCk7CisjZWxpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKyNpZiBSQU5ET01fSVBfSUQKKwkJaXAtPmlwX2lkID0gaXBfcmFuZG9t
aWQoKTsKKyNlbHNlCisJCWlwLT5pcF9pZCA9IGh0b25zKGlwX2lkKyspOworI2VuZGlmCisjZWxp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlwLT5pcF9pZCA9IGh0b25zKFNDVFBfSVBfSUQo
aW5wKSsrKTsKKyNlbHNlCisJCWlwLT5pcF9pZCA9IFNDVFBfSVBfSUQoaW5wKSsrOworI2VuZGlm
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwkJaXAtPmlwX3R0bCA9IGlucC0+aXBfaW5wLmlucC5pbnBfaXBfdHRsOworI2Vs
c2UKKwkJaXAtPmlwX3R0bCA9IGlucC0+aW5wX2lwX3R0bDsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJaXAtPmlwX2xl
biA9IGh0b25zKHBhY2tldF9sZW5ndGgpOworI2Vsc2UKKwkJaXAtPmlwX2xlbiA9IHBhY2tldF9s
ZW5ndGg7CisjZW5kaWYKKwkJaXAtPmlwX3RvcyA9IHRvc192YWx1ZTsKKwkJaWYgKHBvcnQpIHsK
KwkJCWlwLT5pcF9wID0gSVBQUk9UT19VRFA7CisJCX0gZWxzZSB7CisJCQlpcC0+aXBfcCA9IElQ
UFJPVE9fU0NUUDsKKwkJfQorCQlpcC0+aXBfc3VtID0gMDsKKwkJaWYgKG5ldCA9PSBOVUxMKSB7
CisJCQlybyA9ICZpcHJvdXRlOworCQkJbWVtc2V0KCZpcHJvdXRlLCAwLCBzaXplb2YoaXByb3V0
ZSkpOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQltZW1jcHkoJnJvLT5yb19kc3QsIHRvLCB0by0+
c2FfbGVuKTsKKyNlbHNlCisJCQltZW1jcHkoJnJvLT5yb19kc3QsIHRvLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXJvID0gKHNjdHBfcm91dGVf
dCAqKSZuZXQtPnJvOworCQl9CisJCS8qIE5vdyB0aGUgYWRkcmVzcyBzZWxlY3Rpb24gcGFydCAq
LworCQlpcC0+aXBfZHN0LnNfYWRkciA9ICgoc3RydWN0IHNvY2thZGRyX2luICopdG8pLT5zaW5f
YWRkci5zX2FkZHI7CisKKwkJLyogY2FsbCB0aGUgcm91dGluZSB0byBzZWxlY3QgdGhlIHNyYyBh
ZGRyZXNzICovCisJCWlmIChuZXQgJiYgb3V0X29mX2Fzb2Nfb2sgPT0gMCkgeworCQkJaWYgKG5l
dC0+cm8uX3NfYWRkciAmJiAobmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAmIChTQ1RQ
X0JFSU5HX0RFTEVURUR8U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpKSkgeworCQkJCXNjdHBfZnJl
ZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJ
CW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQkJ
UlRGUkVFKHJvLT5yb19ydCk7CisJCQkJCXJvLT5yb19ydCA9IE5VTEw7CisJCQkJfQorCQkJfQor
CQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgeworCQkJCS8qIENhY2hlIHRoZSBz
b3VyY2UgYWRkcmVzcyAqLworCQkJCW5ldC0+cm8uX3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJl
c3Nfc2VsZWN0aW9uKGlucCxzdGNiLAorCQkJCQkJCQkJCXJvLCBuZXQsIDAsCisJCQkJCQkJCQkJ
dnJmX2lkKTsKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMTsKKwkJCX0KKwkJCWlmIChu
ZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkgeworCQkJCS8qIE5vIHJvdXRlIHRvIGhvc3QgKi8KKwkJ
CQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShz
dGNiLCBuZXQsIHNvX2xvY2tlZCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5w
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQkJ
c2N0cF9tX2ZyZWVtKG0pOworCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCX0KKwkJCWlw
LT5pcF9zcmMgPSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQl9IGVs
c2UgeworCQkJaWYgKG92ZXJfYWRkciA9PSBOVUxMKSB7CisJCQkJc3RydWN0IHNjdHBfaWZhICpf
bHNyYzsKKworCQkJCV9sc3JjID0gc2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLCBz
dGNiLCBybywKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCwK
KwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dF9vZl9hc29jX29r
LAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJmX2lkKTsKKwkJ
CQlpZiAoX2xzcmMgPT0gTlVMTCkgeworCQkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBu
ZXQsIHNvX2xvY2tlZCk7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gpOworCQkJCQlzY3Rw
X21fZnJlZW0obSk7CisJCQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCQl9CisJCQkJaXAt
PmlwX3NyYyA9IF9sc3JjLT5hZGRyZXNzLnNpbi5zaW5fYWRkcjsKKwkJCQlzY3RwX2ZyZWVfaWZh
KF9sc3JjKTsKKwkJCX0gZWxzZSB7CisJCQkJaXAtPmlwX3NyYyA9IG92ZXJfYWRkci0+c2luLnNp
bl9hZGRyOworCQkJCVNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7CisJCQl9
CisJCX0KKwkJaWYgKHBvcnQpIHsKKwkJCWlmIChodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSkgPT0gMCkgeworCQkJCXNjdHBfaGFuZGxlX25vX3JvdXRlKHN0
Y2IsIG5ldCwgc29fbG9ja2VkKTsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAs
IHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQlz
Y3RwX21fZnJlZW0obSk7CisJCQkJcmV0dXJuIChFSE9TVFVOUkVBQ0gpOworCQkJfQorCQkJdWRw
ID0gKHN0cnVjdCB1ZHBoZHIgKikoKGNhZGRyX3QpaXAgKyBzaXplb2Yoc3RydWN0IGlwKSk7CisJ
CQl1ZHAtPnVoX3Nwb3J0ID0gaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxp
bmdfcG9ydCkpOworCQkJdWRwLT51aF9kcG9ydCA9IHBvcnQ7CisJCQl1ZHAtPnVoX3VsZW4gPSBo
dG9ucygodWludDE2X3QpKHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwKSkpOworI2lm
ICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPCA5MDAwMDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQor
CQkJaWYgKFZfdWRwX2Nrc3VtKSB7CisJCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlw
X3NyYy5zX2FkZHIsIGlwLT5pcF9kc3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBS
T1RPX1VEUCkpOworCQkJfSBlbHNlIHsKKwkJCQl1ZHAtPnVoX3N1bSA9IDA7CisJCQl9CisjZWxz
ZQorCQkJdWRwLT51aF9zdW0gPSBpbl9wc2V1ZG8oaXAtPmlwX3NyYy5zX2FkZHIsIGlwLT5pcF9k
c3Quc19hZGRyLCB1ZHAtPnVoX3VsZW4gKyBodG9ucyhJUFBST1RPX1VEUCkpOworI2VuZGlmCisj
ZWxzZQorCQkJdWRwLT51aF9zdW0gPSAwOworI2VuZGlmCisJCQlzY3RwaGRyID0gKHN0cnVjdCBz
Y3RwaGRyICopKChjYWRkcl90KXVkcCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCX0gZWxz
ZSB7CisJCQlzY3RwaGRyID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsgc2l6ZW9m
KHN0cnVjdCBpcCkpOworCQl9CisKKwkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9ydDsKKwkJ
c2N0cGhkci0+ZGVzdF9wb3J0ID0gZGVzdF9wb3J0OworCQlzY3RwaGRyLT52X3RhZyA9IHZfdGFn
OworCQlzY3RwaGRyLT5jaGVja3N1bSA9IDA7CisKKwkJLyoKKwkJICogSWYgc291cmNlIGFkZHJl
c3Mgc2VsZWN0aW9uIGZhaWxzIGFuZCB3ZSBmaW5kIG5vIHJvdXRlCisJCSAqIHRoZW4gdGhlIGlw
X291dHB1dCBzaG91bGQgZmFpbCBhcyB3ZWxsIHdpdGggYQorCQkgKiBOT19ST1VURV9UT19IT1NU
IHR5cGUgZXJyb3IuIFdlIHByb2JhYmx5IHNob3VsZCBjYXRjaAorCQkgKiB0aGF0IHNvbWV3aGVy
ZSBhbmQgYWJvcnQgdGhlIGFzc29jaWF0aW9uIHJpZ2h0IGF3YXkKKwkJICogKGFzc3VtaW5nIHRo
aXMgaXMgYW4gSU5JVCBiZWluZyBzZW50KS4KKwkJICovCisJCWlmIChyby0+cm9fcnQgPT0gTlVM
TCkgeworCQkJLyoKKwkJCSAqIHNyYyBhZGRyIHNlbGVjdGlvbiBmYWlsZWQgdG8gZmluZCBhIHJv
dXRlIChvcgorCQkJICogdmFsaWQgc291cmNlIGFkZHIpLCBzbyB3ZSBjYW4ndCBnZXQgdGhlcmUg
ZnJvbQorCQkJICogaGVyZSAoeWV0KSEKKwkJCSAqLworCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUo
c3RjYiwgbmV0LCBzb19sb2NrZWQpOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5w
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQlz
Y3RwX21fZnJlZW0obSk7CisJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCX0KKwkJaWYgKHJv
ICE9ICZpcHJvdXRlKSB7CisJCQltZW1jcHkoJmlwcm91dGUsIHJvLCBzaXplb2YoKnJvKSk7CisJ
CX0KKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJDYWxsaW5nIGlwdjQgb3V0cHV0IHJv
dXRpbmUgZnJvbSBsb3cgbGV2ZWwgc3JjIGFkZHI6JXhcbiIsCisJCQkodWludDMyX3QpIChudG9o
bChpcC0+aXBfc3JjLnNfYWRkcikpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJE
ZXN0aW5hdGlvbiBpcyAleFxuIiwKKwkJCSh1aW50MzJfdCkobnRvaGwoaXAtPmlwX2RzdC5zX2Fk
ZHIpKSk7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiUlRQIHJvdXRlIGlzICVwIHRo
cm91Z2hcbiIsCisJCQkodm9pZCAqKXJvLT5yb19ydCk7CisKKwkJaWYgKFNDVFBfR0VUX0hFQURF
Ul9GT1JfT1VUUFVUKG9fcGFrKSkgeworCQkJLyogZmFpbGVkIHRvIHByZXBlbmQgZGF0YSwgZ2l2
ZSB1cCAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlzY3RwX21fZnJlZW0obSk7CisJCQly
ZXR1cm4gKEVOT01FTSk7CisJCX0KKwkJU0NUUF9BVFRBQ0hfQ0hBSU4ob19wYWssIG0sIHBhY2tl
dF9sZW5ndGgpOworCQlpZiAocG9ydCkgeworCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2Nh
bGN1bGF0ZV9ja3N1bShtLCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRy
KSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2lmICFkZWZpbmVkKF9f
V2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPCA5MDAwMDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKQorCQkJaWYgKFZfdWRw
X2Nrc3VtKSB7CisJCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0ob19wYWspOworCQkJfQorI2Vsc2UK
KwkJCVNDVFBfRU5BQkxFX1VEUF9DU1VNKG9fcGFrKTsKKyNlbmRpZgorI2VuZGlmCisJCX0gZWxz
ZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAw
MDAwCisJCQltLT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9TQ1RQOworCQkJbS0+bV9wa3Ro
ZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKTsKKwkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7CisjZWxzZQorCQkJaWYgKCEoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYmCisJCQkgICAgICAoc3RjYikgJiYg
KHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUpKSkgeworCQkJCXNjdHBoZHItPmNoZWNr
c3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcCkpOworCQkJCVND
VFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7CisJCQl9CisjZW5kaWYKKwkJfQorI2lmZGVmIFNDVFBf
UEFDS0VUX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVs
KSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykKKwkJCXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7
CisjZW5kaWYKKwkJLyogc2VuZCBpdCBvdXQuICB0YWJsZSBpZCBpcyB0YWtlbiBmcm9tIHN0Y2Ig
Ki8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSkgJiYgKHNv
X2xvY2tlZCkpIHsKKwkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMCk7CisJCX0KKyNlbmRpZgorCQlTQ1RQX0lQX09VVFBVVChyZXQsIG9fcGFrLCBy
bywgc3RjYiwgdnJmX2lkKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKKwkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3Vu
bG9ja2VkKSkgJiYgKHNvX2xvY2tlZCkpIHsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX1NPQ0tFVF9M
T0NLKHNvLCAwKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCX0KKyNlbmRpZgorCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19zZW5kcGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19v
dXRwYWNrZXRzKTsKKwkJaWYgKHJldCkKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlcnJv
cnMpOworCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiSVAgb3V0cHV0IHJldHVybnMg
JWRcbiIsIHJldCk7CisJCWlmIChuZXQgPT0gTlVMTCkgeworCQkJLyogZnJlZSB0ZW1weSByb3V0
ZXMgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkw
MTAwMAorCQkJUk9fUlRGUkVFKHJvKTsKKyNlbHNlCisJCQlpZiAocm8tPnJvX3J0KSB7CisJCQkJ
UlRGUkVFKHJvLT5yb19ydCk7CisJCQkJcm8tPnJvX3J0ID0gTlVMTDsKKwkJCX0KKyNlbmRpZgor
CQl9IGVsc2UgeworCQkJaWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRk
cikgJiYKKwkJCSAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgPT0g
MCkpIHsKKwkJCQl1aW50MzJfdCBtdHU7CisKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJP
TV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19ydCk7
CisJCQkJaWYgKG10dSA+IDApIHsKKwkJCQkJaWYgKG5ldC0+cG9ydCkgeworCQkJCQkJbXR1IC09
IHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJfQorCQkJCQlpZiAoKHN0Y2IgIT0gTlVMTCkg
JiYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbXR1KSkgeworCQkJCQkJc2N0cF9tdHVfc2l6
ZV9yZXNldChpbnAsICZzdGNiLT5hc29jLCBtdHUpOworCQkJCQl9CisJCQkJCW5ldC0+bXR1ID0g
bXR1OworCQkJCX0KKwkJCX0gZWxzZSBpZiAocm8tPnJvX3J0ID09IE5VTEwpIHsKKwkJCQkvKiBy
b3V0ZSB3YXMgZnJlZWQgKi8KKwkJCQlpZiAobmV0LT5yby5fc19hZGRyICYmCisJCQkJICAgIG5l
dC0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsKKwkJCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2Fk
ZHIpOworCQkJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCX0KKwkJCQluZXQtPnNyY19h
ZGRyX3NlbGVjdGVkID0gMDsKKwkJCX0KKwkJfQorCQlyZXR1cm4gKHJldCk7CisJfQorI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJdWludDMyX3QgZmxvd2xhYmVs
LCBmbG93aW5mbzsKKwkJc3RydWN0IGlwNl9oZHIgKmlwNmg7CisJCXN0cnVjdCByb3V0ZV9pbjYg
aXA2cm91dGU7CisjaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKSkKKwkJc3RydWN0IGlmbmV0ICppZnA7CisjZW5kaWYKKwkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNiwgdG1wLCAqbHNhNiwgbHNhNl90bXA7CisJCWludCBwcmV2X3Njb3BlID0gMDsKKyNp
ZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgbHNhNl9z
dG9yYWdlOworCQlpbnQgZXJyb3I7CisjZW5kaWYKKwkJdV9zaG9ydCBwcmV2X3BvcnQgPSAwOwor
CQlpbnQgbGVuOworCisJCWlmIChuZXQpIHsKKwkJCWZsb3dsYWJlbCA9IG5ldC0+Zmxvd2xhYmVs
OworCQl9IGVsc2UgaWYgKHN0Y2IpIHsKKwkJCWZsb3dsYWJlbCA9IHN0Y2ItPmFzb2MuZGVmYXVs
dF9mbG93bGFiZWw7CisJCX0gZWxzZSB7CisJCQlmbG93bGFiZWwgPSBpbnAtPnNjdHBfZXAuZGVm
YXVsdF9mbG93bGFiZWw7CisJCX0KKwkJaWYgKGZsb3dsYWJlbCA9PSAwKSB7CisJCQkvKgorCQkJ
ICogVGhpcyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5vdCBzZXQgYXQgdGhlCisJCQkg
KiBTQ1RQIGxheWVyLiBTbyB1c2UgdGhlIHZhbHVlIGZyb20gdGhlIElQIGxheWVyLgorCQkJICov
CisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAh
ZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRl
ZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSkKKwkJCWZsb3dsYWJlbCA9IG50b2hsKGlucC0+aXBf
aW5wLmlucC5pbnBfZmxvdyk7CisjZWxzZQorCQkJZmxvd2xhYmVsID0gbnRvaGwoKChzdHJ1Y3Qg
aW42cGNiICopaW5wKS0+aW42cF9mbG93aW5mbyk7CisjZW5kaWYKKwkJfQorCQlmbG93bGFiZWwg
Jj0gMHgwMDBmZmZmZjsKKwkJbGVuID0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCWlmIChwb3J0KSB7
CisJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCW5ld20gPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdt
ID09IE5VTEwpIHsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1
cm4gKEVOT01FTSk7CisJCX0KKwkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NU
UF9CVUZfTEVOKG5ld20pID0gbGVuOworCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9
IG5ld207CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaWYgKG5ldCAhPSBOVUxMKSB7CisJ
CQltLT5tX3BrdGhkci5mbG93aWQgPSBuZXQtPmZsb3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0s
IG5ldC0+Zmxvd3R5cGUpOworCQl9IGVsc2UgeworCQkJbS0+bV9wa3RoZHIuZmxvd2lkID0gbWZs
b3dpZDsKKwkJCU1fSEFTSFRZUEVfU0VUKG0sIG1mbG93dHlwZSk7CisgCQl9CisjZW5kaWYKKwkJ
cGFja2V0X2xlbmd0aCA9IHNjdHBfY2FsY3VsYXRlX2xlbihtKTsKKworCQlpcDZoID0gbXRvZCht
LCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJLyogcHJvdGVjdCAqc2luNiBmcm9tIG92ZXJ3cml0ZSAq
LworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKil0bzsKKwkJdG1wID0gKnNpbjY7CisJ
CXNpbjYgPSAmdG1wOworCisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkvKiBLQU1F
IGhhY2s6IGVtYmVkIHNjb3BlaWQgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJCWlmIChp
bjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxMLCBOVUxMKSAhPSAwKQor
I2Vsc2UKKwkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEws
IE5VTEwsIE5VTEwpICE9IDApCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQlp
ZiAoc2E2X2VtYmVkc2NvcGUoc2luNiwgTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAh
PSAwKQorI2Vsc2UKKwkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYp
ICE9IDApCisjZW5kaWYKKwkJeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBz
dGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlO
VkFMKTsKKwkJfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJaWYgKG5l
dCA9PSBOVUxMKSB7CisJCQltZW1zZXQoJmlwNnJvdXRlLCAwLCBzaXplb2YoaXA2cm91dGUpKTsK
KwkJCXJvID0gKHNjdHBfcm91dGVfdCAqKSZpcDZyb3V0ZTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJCQltZW1jcHkoJnJvLT5yb19kc3QsIHNpbjYsIHNpbjYtPnNpbjZfbGVuKTsKKyNlbHNlCisJ
CQltZW1jcHkoJnJvLT5yb19kc3QsIHNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCXJvID0gKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvOwor
CQl9CisJCS8qCisJCSAqIFdlIGFzc3VtZSBoZXJlIHRoYXQgaW5wX2Zsb3cgaXMgaW4gaG9zdCBi
eXRlIG9yZGVyIHdpdGhpbgorCQkgKiB0aGUgVENCIQorCQkgKi8KKwkJaWYgKHRvc192YWx1ZSA9
PSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtZWFucyBlc3BlY2lhbGx5LCB0aGF0IGl0IGlzIG5v
dCBzZXQgYXQgdGhlCisJCQkgKiBTQ1RQIGxheWVyLiBTbyB1c2UgdGhlIHZhbHVlIGZyb20gdGhl
IElQIGxheWVyLgorCQkJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVm
aW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSkKKwkJCXRv
c192YWx1ZSA9IChudG9obChpbnAtPmlwX2lucC5pbnAuaW5wX2Zsb3cpID4+IDIwKSAmIDB4ZmY7
CisjZWxzZQorCQkJdG9zX3ZhbHVlID0gKG50b2hsKCgoc3RydWN0IGluNnBjYiAqKWlucCktPmlu
NnBfZmxvd2luZm8pID4+IDIwKSAmIDB4ZmY7CisjZW5kaWYKKyNlbmRpZgorCQl9CisJCXRvc192
YWx1ZSAmPSAweGZjOworCQlpZiAoZWNuX29rKSB7CisJCQl0b3NfdmFsdWUgfD0gc2N0cF9nZXRf
ZWN0KHN0Y2IpOworCQl9CisJCWZsb3dpbmZvID0gMHgwNjsKKwkJZmxvd2luZm8gPDw9IDg7CisJ
CWZsb3dpbmZvIHw9IHRvc192YWx1ZTsKKwkJZmxvd2luZm8gPDw9IDIwOworCQlmbG93aW5mbyB8
PSBmbG93bGFiZWw7CisJCWlwNmgtPmlwNl9mbG93ID0gaHRvbmwoZmxvd2luZm8pOworCQlpZiAo
cG9ydCkgeworCQkJaXA2aC0+aXA2X254dCA9IElQUFJPVE9fVURQOworCQl9IGVsc2UgeworCQkJ
aXA2aC0+aXA2X254dCA9IElQUFJPVE9fU0NUUDsKKwkJfQorCQlpcDZoLT5pcDZfcGxlbiA9IGh0
b25zKHBhY2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKwkJaXA2aC0+aXA2
X2RzdCA9IHNpbjYtPnNpbjZfYWRkcjsKKworCQkvKgorCQkgKiBBZGQgU1JDIGFkZHJlc3Mgc2Vs
ZWN0aW9uIGhlcmU6IHdlIGNhbiBvbmx5IHJldXNlIHRvIGEKKwkJICogbGltaXRlZCBkZWdyZWUg
dGhlIGthbWUgc3JjLWFkZHItc2VsLCBzaW5jZSB3ZSBjYW4gdHJ5CisJCSAqIHRoZWlyIHNlbGVj
dGlvbiBidXQgaXQgbWF5IG5vdCBiZSBib3VuZC4KKwkJICovCisJCW1lbXNldCgmbHNhNl90bXAs
IDAsIHNpemVvZihsc2E2X3RtcCkpOworCQlsc2E2X3RtcC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2
OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJbHNhNl90bXAuc2luNl9sZW4gPSBzaXplb2YobHNh
Nl90bXApOworI2VuZGlmCisJCWxzYTYgPSAmbHNhNl90bXA7CisJCWlmIChuZXQgJiYgb3V0X29m
X2Fzb2Nfb2sgPT0gMCkgeworCQkJaWYgKG5ldC0+cm8uX3NfYWRkciAmJiAobmV0LT5yby5fc19h
ZGRyLT5sb2NhbGlmYV9mbGFncyAmIChTQ1RQX0JFSU5HX0RFTEVURUR8U0NUUF9BRERSX0lGQV9V
TlVTRUFCTEUpKSkgeworCQkJCXNjdHBfZnJlZV9pZmEobmV0LT5yby5fc19hZGRyKTsKKwkJCQlu
ZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOwor
CQkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQkJUlRGUkVFKHJvLT5yb19ydCk7CisJCQkJCXJvLT5y
b19ydCA9IE5VTEw7CisJCQkJfQorCQkJfQorCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQg
PT0gMCkgeworI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9hZGRyOworCQkJCS8qIEtBTUUgaGFjazogZW1i
ZWQgc2NvcGVpZCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVf
TEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwkJCQlpZiAoaW42X2VtYmVk
c2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKKyNlbHNlCisJ
CQkJaWYgKGluNl9lbWJlZHNjb3BlKCZzaW42LT5zaW42X2FkZHIsIHNpbjYsIE5VTEwsIE5VTEws
IE5VTEwpICE9IDApCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkJCWlmIChz
YTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDAp
CisjZWxzZQorCQkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAh
PSAwKQorI2VuZGlmCisJCQkJeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAs
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCQlyZXR1cm4g
KEVJTlZBTCk7CisJCQkJfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJ
CQkvKiBDYWNoZSB0aGUgc291cmNlIGFkZHJlc3MgKi8KKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBz
Y3RwX3NvdXJjZV9hZGRyZXNzX3NlbGVjdGlvbihpbnAsCisJCQkJCQkJCQkJc3RjYiwKKwkJCQkJ
CQkJCQlybywKKwkJCQkJCQkJCQluZXQsCisJCQkJCQkJCQkJMCwKKwkJCQkJCQkJCQl2cmZfaWQp
OworI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJCQko
dm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOworI2Vsc2UKKwkJCQkodm9pZClpbjZfcmVjb3Zl
cnNjb3BlKHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmCS8qIFNDVFBfS0FN
RSAqLworI2VuZGlmCS8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQluZXQtPnNyY19h
ZGRyX3NlbGVjdGVkID0gMTsKKwkJCX0KKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gTlVMTCkg
eworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiVjY6Tm8gcm91dGUgdG8gaG9zdFxu
Iik7CisJCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDA7CisJCQkJc2N0cF9oYW5kbGVfbm9f
cm91dGUoc3RjYiwgbmV0LCBzb19sb2NrZWQpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtU
KG0sIGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSE9TVFVOUkVBQ0gp
OworCQkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCQl9
CisJCQlsc2E2LT5zaW42X2FkZHIgPSBuZXQtPnJvLl9zX2FkZHItPmFkZHJlc3Muc2luNi5zaW42
X2FkZHI7CisJCX0gZWxzZSB7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJc2lu
NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvLT5yb19kc3Q7CisJCQkvKiBLQU1FIGhhY2s6
IGVtYmVkIHNjb3BlaWQgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQ
UExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJCQlpZiAoaW42X2Vt
YmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCkgIT0gMCkKKyNlbHNl
CisJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVM
TCwgTlVMTCkgIT0gMCkKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQlpZiAo
c2E2X2VtYmVkc2NvcGUoc2luNiwgTU9EVUxFX0dMT0JBTChpcDZfdXNlX2RlZnpvbmUpKSAhPSAw
KQorI2Vsc2UKKwkJCWlmIChpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42KSAh
PSAwKQorI2VuZGlmCisJCQkgIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAs
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJCXJldHVybiAo
RUlOVkFMKTsKKwkJCSAgfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJ
CWlmIChvdmVyX2FkZHIgPT0gTlVMTCkgeworCQkJCXN0cnVjdCBzY3RwX2lmYSAqX2xzcmM7CisK
KwkJCQlfbHNyYyA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwgc3RjYiwgcm8s
CisJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQsCisJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRfb2ZfYXNvY19vaywKKwkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZyZl9pZCk7CisJCQkJaWYgKF9s
c3JjID09IE5VTEwpIHsKKwkJCQkJc2N0cF9oYW5kbGVfbm9fcm91dGUoc3RjYiwgbmV0LCBzb19s
b2NrZWQpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2IsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCQkJc2N0cF9tX2ZyZWVt
KG0pOworCQkJCQlyZXR1cm4gKEVIT1NUVU5SRUFDSCk7CisJCQkJfQorCQkJCWxzYTYtPnNpbjZf
YWRkciA9IF9sc3JjLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyOworCQkJCXNjdHBfZnJlZV9pZmEo
X2xzcmMpOworCQkJfSBlbHNlIHsKKwkJCQlsc2E2LT5zaW42X2FkZHIgPSBvdmVyX2FkZHItPnNp
bjYuc2luNl9hZGRyOworCQkJCVNDVFBfUlRBTExPQyhybywgdnJmX2lkLCBpbnAtPmZpYm51bSk7
CisJCQl9CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorI2lmZGVmIFNDVFBfS0FNRQor
CQkJKHZvaWQpc2E2X3JlY292ZXJzY29wZShzaW42KTsKKyNlbHNlCisJCQkodm9pZClpbjZfcmVj
b3ZlcnNjb3BlKHNpbjYsICZzaW42LT5zaW42X2FkZHIsIE5VTEwpOworI2VuZGlmCS8qIFNDVFBf
S0FNRSAqLworI2VuZGlmCS8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJfQorCQlsc2E2
LT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisKKwkJaWYgKHJvLT5yb19ydCA9PSBOVUxM
KSB7CisJCQkvKgorCQkJICogc3JjIGFkZHIgc2VsZWN0aW9uIGZhaWxlZCB0byBmaW5kIGEgcm91
dGUgKG9yCisJCQkgKiB2YWxpZCBzb3VyY2UgYWRkciksIHNvIHdlIGNhbid0IGdldCB0aGVyZSBm
cm9tCisJCQkgKiBoZXJlIQorCQkJICovCisJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBu
ZXQsIHNvX2xvY2tlZCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIHN0Y2Is
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUhPU1RVTlJFQUNIKTsKKwkJCXNjdHBfbV9m
cmVlbShtKTsKKwkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJfQorI2lmbmRlZiBTQ09QRURS
T1VUSU5HCisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkvKgorCQkgKiBYWFg6IHNh
NiBtYXkgbm90IGhhdmUgYSB2YWxpZCBzaW42X3Njb3BlX2lkIGluIHRoZQorCQkgKiBub24tU0NP
UEVEUk9VVElORyBjYXNlLgorCQkgKi8KKwkJbWVtc2V0KCZsc2E2X3N0b3JhZ2UsIDAsIHNpemVv
Zihsc2E2X3N0b3JhZ2UpKTsKKwkJbHNhNl9zdG9yYWdlLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7
CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlsc2E2X3N0b3JhZ2Uuc2luNl9sZW4gPSBzaXplb2Yo
bHNhNl9zdG9yYWdlKTsKKyNlbmRpZgorI2lmZGVmIFNDVFBfS0FNRQorCQlsc2E2X3N0b3JhZ2Uu
c2luNl9hZGRyID0gbHNhNi0+c2luNl9hZGRyOworCQlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJz
Y29wZSgmbHNhNl9zdG9yYWdlKSkgIT0gMCkgeworI2Vsc2UKKwkJaWYgKChlcnJvciA9IGluNl9y
ZWNvdmVyc2NvcGUoJmxzYTZfc3RvcmFnZSwgJmxzYTYtPnNpbjZfYWRkciwKKwkJICAgIE5VTEwp
KSAhPSAwKSB7CisjZW5kaWYJCQkJLyogU0NUUF9LQU1FICovCisJCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMywgInJlY292ZXIgc2NvcGUgZmFpbHMgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJCS8qIFhYWCAqLwor
CQlsc2E2X3N0b3JhZ2Uuc2luNl9hZGRyID0gbHNhNi0+c2luNl9hZGRyOworCQlsc2E2X3N0b3Jh
Z2Uuc2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQlsc2E2ID0gJmxzYTZfc3RvcmFnZTsK
KyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYgLyogU0NPUEVEUk9V
VElORyAqLworCQlpcDZoLT5pcDZfc3JjID0gbHNhNi0+c2luNl9hZGRyOworCisJCWlmIChwb3J0
KSB7CisJCQlpZiAoaHRvbnMoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9y
dCkpID09IDApIHsKKwkJCQlzY3RwX2hhbmRsZV9ub19yb3V0ZShzdGNiLCBuZXQsIHNvX2xvY2tl
ZCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNiLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVIT1NUVU5SRUFDSCk7CisJCQkJc2N0cF9tX2ZyZWVtKG0pOwor
CQkJCXJldHVybiAoRUhPU1RVTlJFQUNIKTsKKwkJCX0KKwkJCXVkcCA9IChzdHJ1Y3QgdWRwaGRy
ICopKChjYWRkcl90KWlwNmggKyBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsKKwkJCXVkcC0+dWhf
c3BvcnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7
CisJCQl1ZHAtPnVoX2Rwb3J0ID0gcG9ydDsKKwkJCXVkcC0+dWhfdWxlbiA9IGh0b25zKCh1aW50
MTZfdCkocGFja2V0X2xlbmd0aCAtIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpKTsKKwkJCXVkcC0+
dWhfc3VtID0gMDsKKwkJCXNjdHBoZHIgPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpdWRw
ICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBoZHIgPSAoc3Ry
dWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaXA2aCArIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOwor
CQl9CisKKwkJc2N0cGhkci0+c3JjX3BvcnQgPSBzcmNfcG9ydDsKKwkJc2N0cGhkci0+ZGVzdF9w
b3J0ID0gZGVzdF9wb3J0OworCQlzY3RwaGRyLT52X3RhZyA9IHZfdGFnOworCQlzY3RwaGRyLT5j
aGVja3N1bSA9IDA7CisKKwkJLyoKKwkJICogV2Ugc2V0IHRoZSBob3AgbGltaXQgbm93IHNpbmNl
IHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UKKwkJICogdGhhdCBvdXIgcm8gcG9pbnRlciBpcyBub3cg
ZmlsbGVkCisJCSAqLworCQlpcDZoLT5pcDZfaGxpbSA9IFNDVFBfR0VUX0hMSU0oaW5wLCBybyk7
CisjaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJ
aWZwID0gU0NUUF9HRVRfSUZOX1ZPSURfRlJPTV9ST1VURShybyk7CisjZW5kaWYKKworI2lmZGVm
IFNDVFBfREVCVUcKKwkJLyogQ29weSB0byBiZSBzdXJlIHNvbWV0aGluZyBiYWQgaXMgbm90IGhh
cHBlbmluZyAqLworCQlzaW42LT5zaW42X2FkZHIgPSBpcDZoLT5pcDZfZHN0OworCQlsc2E2LT5z
aW42X2FkZHIgPSBpcDZoLT5pcDZfc3JjOworI2VuZGlmCisKKwkJU0NUUERCRyhTQ1RQX0RFQlVH
X09VVFBVVDMsICJDYWxsaW5nIGlwdjYgb3V0cHV0IHJvdXRpbmUgZnJvbSBsb3cgbGV2ZWxcbiIp
OworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInNyYzogIik7CisJCVNDVFBEQkdfQURE
UihTQ1RQX0RFQlVHX09VVFBVVDMsIChzdHJ1Y3Qgc29ja2FkZHIgKilsc2E2KTsKKwkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDMsICJkc3Q6ICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJV
R19PVVRQVVQzLCAoc3RydWN0IHNvY2thZGRyICopc2luNik7CisJCWlmIChuZXQpIHsKKwkJCXNp
bjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkvKiBwcmVz
ZXJ2ZSB0aGUgcG9ydCBhbmQgc2NvcGUgZm9yIGxpbmsgbG9jYWwgc2VuZCAqLworCQkJcHJldl9z
Y29wZSA9IHNpbjYtPnNpbjZfc2NvcGVfaWQ7CisJCQlwcmV2X3BvcnQgPSBzaW42LT5zaW42X3Bv
cnQ7CisJCX0KKworCQlpZiAoU0NUUF9HRVRfSEVBREVSX0ZPUl9PVVRQVVQob19wYWspKSB7CisJ
CQkvKiBmYWlsZWQgdG8gcHJlcGVuZCBkYXRhLCBnaXZlIHVwICovCisJCQlzY3RwX21fZnJlZW0o
bSk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFTk9NRU0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCVNDVFBfQVRU
QUNIX0NIQUlOKG9fcGFrLCBtLCBwYWNrZXRfbGVuZ3RoKTsKKwkJaWYgKHBvcnQpIHsKKwkJCXNj
dHBoZHItPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBp
cDZfaGRyKSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kc3djcmMpOworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisJCQl1ZHAtPnVoX3N1bSA9
IDA7CisjZWxpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKCh1ZHAtPnVoX3N1bSA9
IGluNl9ja3N1bShvX3BhaywgSVBQUk9UT19VRFAsIHNpemVvZihzdHJ1Y3QgaXA2X2hkciksIHBh
Y2tldF9sZW5ndGggLSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKSkgPT0gMCkgeworCQkJCXVkcC0+
dWhfc3VtID0gMHhmZmZmOworCQkJfQorI2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisjaWYgX19GcmVlQlNE
X3ZlcnNpb24gPCA5MDAwMDAKKwkJCXNjdHBoZHItPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVf
Y2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kc3djcmMpOworI2Vsc2UKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMTAwMAorCQkJ
bS0+bV9wa3RoZHIuY3N1bV9mbGFncyA9IENTVU1fU0NUUF9JUFY2OworI2Vsc2UKKwkJCW0tPm1f
cGt0aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1NDVFA7CisjZW5kaWYKKwkJCW0tPm1fcGt0aGRyLmNz
dW1fZGF0YSA9IG9mZnNldG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSk7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kaHdjcmMpOworI2VuZGlmCisjZWxzZQorCQkJaWYgKCEoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYmCisJCQkgICAgICAoc3RjYikg
JiYgKHN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUpKSkgeworCQkJCXNjdHBoZHItPmNo
ZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7
CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKwkJCX0gZWxzZSB7CisJCQkJ
U0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZGh3Y3JjKTsKKwkJCX0KKyNlbmRpZgorCQl9CisJCS8q
IHNlbmQgaXQgb3V0LiB0YWJsZSBpZCBpcyB0YWtlbiBmcm9tIHN0Y2IgKi8KKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJaWYgKChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfb3V0cHV0X3VubG9ja2VkKSkgJiYgKHNvX2xvY2tlZCkpIHsKKwkJ
CXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMCk7CisJ
CX0KKyNlbmRpZgorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTEFTVF9QQUNLRVRfVFJBQ0lORykKKwkJ
CXNjdHBfcGFja2V0X2xvZyhvX3Bhayk7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19QYW5kYV9f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQlTQ1RQX0lQNl9PVVRQVVQocmV0LCBvX3Bh
aywgKHN0cnVjdCByb3V0ZV9pbjYgKilybywgJmlmcCwgc3RjYiwgdnJmX2lkKTsKKyNlbHNlCisJ
CVNDVFBfSVA2X09VVFBVVChyZXQsIG9fcGFrLCAoc3RydWN0IHJvdXRlX2luNiAqKXJvLCBOVUxM
LCBzdGNiLCB2cmZfaWQpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCWlmICgoU0NUUF9CQVNFX1NZU0NUTChzY3RwX291
dHB1dF91bmxvY2tlZCkpICYmIChzb19sb2NrZWQpKSB7CisJCQlhdG9taWNfYWRkX2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJU0NUUF9T
T0NLRVRfTE9DSyhzbywgMCk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJYXRvbWljX3N1
YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQl9CisjZW5kaWYKKwkJaWYgKG5l
dCkgeworCQkJLyogZm9yIGxpbmsgbG9jYWwgdGhpcyBtdXN0IGJlIGRvbmUgKi8KKwkJCXNpbjYt
PnNpbjZfc2NvcGVfaWQgPSBwcmV2X3Njb3BlOworCQkJc2luNi0+c2luNl9wb3J0ID0gcHJldl9w
b3J0OworCQl9CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAicmV0dXJuIGZyb20gc2Vu
ZCBpcyAlZFxuIiwgcmV0KTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOwor
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0cGFja2V0cyk7CisJCWlmIChyZXQp
IHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRlcnJvcnMpOworCQl9CisJCWlmIChuZXQg
PT0gTlVMTCkgeworCQkJLyogTm93IGlmIHdlIGhhZCBhIHRlbXAgcm91dGUgZnJlZSBpdCAqLwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gOTAxMDAwCisJ
CQlST19SVEZSRUUocm8pOworI2Vsc2UKKwkJCWlmIChyby0+cm9fcnQpIHsKKwkJCQlSVEZSRUUo
cm8tPnJvX3J0KTsKKwkJCQlyby0+cm9fcnQgPSBOVUxMOworCQkJfQorI2VuZGlmCisJCX0gZWxz
ZSB7CisJCQkvKiBQTVRVIGNoZWNrIHZlcnN1cyBzbWFsbGVzdCBhc29jIE1UVSBnb2VzIGhlcmUg
Ki8KKwkJCWlmIChyby0+cm9fcnQgPT0gTlVMTCkgeworCQkJCS8qIFJvdXRlIHdhcyBmcmVlZCAq
LworCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgJiYKKwkJCQkgICAgbmV0LT5zcmNfYWRkcl9zZWxl
Y3RlZCkgeworCQkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJCW5ldC0+
cm8uX3NfYWRkciA9IE5VTEw7CisJCQkJfQorCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAw
OworCQkJfQorCQkJaWYgKChyby0+cm9fcnQgIT0gTlVMTCkgJiYgKG5ldC0+cm8uX3NfYWRkcikg
JiYKKwkJCSAgICAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgPT0gMCkp
IHsKKwkJCQl1aW50MzJfdCBtdHU7CisKKwkJCQltdHUgPSBTQ1RQX0dBVEhFUl9NVFVfRlJPTV9S
T1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2FkZHIuc2EsIHJvLT5yb19ydCk7CisJ
CQkJaWYgKG10dSA+IDApIHsKKwkJCQkJaWYgKG5ldC0+cG9ydCkgeworCQkJCQkJbXR1IC09IHNp
emVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCQkJfQorCQkJCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYg
KHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbXR1KSkgeworCQkJCQkJc2N0cF9tdHVfc2l6ZV9y
ZXNldChpbnAsICZzdGNiLT5hc29jLCBtdHUpOworCQkJCQl9CisJCQkJCW5ldC0+bXR1ID0gbXR1
OworCQkJCX0KKwkJCX0KKyNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQllbHNlIGlmIChpZnApIHsKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQor
I2RlZmluZSBORF9JRklORk8oaWZwKQkoaWZwKQorI2RlZmluZSBsaW5rbXR1CQlpZl9tdHUKKyNl
bmRpZgorCQkJCWlmIChORF9JRklORk8oaWZwKS0+bGlua210dSAmJgorCQkJCSAgICAoc3RjYi0+
YXNvYy5zbWFsbGVzdF9tdHUgPiBORF9JRklORk8oaWZwKS0+bGlua210dSkpIHsKKwkJCQkJc2N0
cF9tdHVfc2l6ZV9yZXNldChpbnAsCisJCQkJCSAgICAmc3RjYi0+YXNvYywKKwkJCQkJICAgIE5E
X0lGSU5GTyhpZnApLT5saW5rbXR1KTsKKwkJCQl9CisJCQl9CisjZW5kaWYKKwkJfQorCQlyZXR1
cm4gKHJldCk7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2Ug
QUZfQ09OTjoKKwl7CisJCWNoYXIgKmJ1ZmZlcjsKKwkJc3RydWN0IHNvY2thZGRyX2Nvbm4gKnNj
b25uOworCQlpbnQgbGVuOworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG87
CisJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCW5ld20gPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2cobGVuLCAxLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlmIChuZXdtID09IE5V
TEwpIHsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBz
dGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT01FTSk7CisJCQlyZXR1cm4gKEVO
T01FTSk7CisJCX0KKwkJU0NUUF9BTElHTl9UT19FTkQobmV3bSwgbGVuKTsKKwkJU0NUUF9CVUZf
TEVOKG5ld20pID0gbGVuOworCQlTQ1RQX0JVRl9ORVhUKG5ld20pID0gbTsKKwkJbSA9IG5ld207
CisJCXBhY2tldF9sZW5ndGggPSBzY3RwX2NhbGN1bGF0ZV9sZW4obSk7CisJCXNjdHBoZHIgPSBt
dG9kKG0sIHN0cnVjdCBzY3RwaGRyICopOworCQlzY3RwaGRyLT5zcmNfcG9ydCA9IHNyY19wb3J0
OworCQlzY3RwaGRyLT5kZXN0X3BvcnQgPSBkZXN0X3BvcnQ7CisJCXNjdHBoZHItPnZfdGFnID0g
dl90YWc7CisJCXNjdHBoZHItPmNoZWNrc3VtID0gMDsKKwkJaWYgKFNDVFBfQkFTRV9WQVIoY3Jj
MzJjX29mZmxvYWRlZCkgPT0gMCkgeworCQkJc2N0cGhkci0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1
bGF0ZV9ja3N1bShtLCAwKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7CisJ
CX0gZWxzZSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kaHdjcmMpOworCQl9CisJCWlm
ICh0b3NfdmFsdWUgPT0gMCkgeworCQkJdG9zX3ZhbHVlID0gaW5wLT5pcF9pbnAuaW5wLmlucF9p
cF90b3M7CisJCX0KKwkJdG9zX3ZhbHVlICY9IDB4ZmM7CisJCWlmIChlY25fb2spIHsKKwkJCXRv
c192YWx1ZSB8PSBzY3RwX2dldF9lY3Qoc3RjYik7CisJCX0KKwkJLyogRG9uJ3QgYWxsb2MvZnJl
ZSBmb3IgZWFjaCBwYWNrZXQgKi8KKwkJaWYgKChidWZmZXIgPSBtYWxsb2MocGFja2V0X2xlbmd0
aCkpICE9IE5VTEwpIHsKKwkJCW1fY29weWRhdGEobSwgMCwgcGFja2V0X2xlbmd0aCwgYnVmZmVy
KTsKKwkJCXJldCA9IFNDVFBfQkFTRV9WQVIoY29ubl9vdXRwdXQpKHNjb25uLT5zY29ubl9hZGRy
LCBidWZmZXIsIHBhY2tldF9sZW5ndGgsIHRvc192YWx1ZSwgbm9mcmFnbWVudF9mbGFnKTsKKwkJ
CWZyZWUoYnVmZmVyKTsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IEVOT01FTTsKKwkJfQorCQlzY3Rw
X21fZnJlZW0obSk7CisJCXJldHVybiAocmV0KTsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlT
Q1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVua25vd24gcHJvdG9jb2wgKFRTTkgpIHR5cGUg
JWRcbiIsCisJCSAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHIgKil0byktPnNhX2ZhbWlseSk7CisJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVF9QS1QobSwgaW5wLCBzdGNi
LCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJcmV0dXJuIChFRkFVTFQp
OworCX0KK30KKworCit2b2lkCitzY3RwX3NlbmRfaW5pdGlhdGUoc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VO
VVNFRAorI2VuZGlmCisgICAgKQoreworCXN0cnVjdCBtYnVmICptLCAqbV9sYXN0OworCXN0cnVj
dCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0OworCXN0cnVj
dCBzY3RwX3N1cHBvcnRlZF9hZGRyX3BhcmFtICpzdXBfYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9hZGFw
dGF0aW9uX2xheWVyX2luZGljYXRpb24gKmFsaTsKKwlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1
bmtfdHlwZXNfcGFyYW0gKnByX3N1cHBvcnRlZDsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7
CisJaW50IGNudF9pbml0c190byA9IDA7CisJaW50IGVycm9yOworCXVpbnQxNl90IG51bV9leHQs
IGNodW5rX2xlbiwgcGFkZGluZ19sZW4sIHBhcmFtZXRlcl9sZW47CisKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBf
U08oaW5wKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlu
cCkpOworCX0KKyNlbmRpZgorCS8qIElOSVQncyBhbHdheXMgZ28gdG8gdGhlIHByaW1hcnkgKGFu
ZCB1c3VhbGx5IE9OTFkgYWRkcmVzcykgKi8KKwluZXQgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVz
dGluYXRpb247CisJaWYgKG5ldCA9PSBOVUxMKSB7CisJCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNi
LT5hc29jLm5ldHMpOworCQlpZiAobmV0ID09IE5VTEwpIHsKKwkJCS8qIFRTTkggKi8KKwkJCXJl
dHVybjsKKwkJfQorCQkvKiB3ZSBjb25maXJtIGFueSBhZGRyZXNzIHdlIHNlbmQgYW4gSU5JVCB0
byAqLworCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9VTkNPTkZJUk1FRDsKKwkJKHZv
aWQpc2N0cF9zZXRfcHJpbWFyeV9hZGRyKHN0Y2IsIE5VTEwsIG5ldCk7CisJfSBlbHNlIHsKKwkJ
Lyogd2UgY29uZmlybSBhbnkgYWRkcmVzcyB3ZSBzZW5kIGFuIElOSVQgdG8gKi8KKwkJbmV0LT5k
ZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfVU5DT05GSVJNRUQ7CisJfQorCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUXG4iKTsKKyNpZmRlZiBJTkVUNgorCWlmIChuZXQt
PnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCS8qCisJCSAqIHNwZWNp
YWwgaG9vaywgaWYgd2UgYXJlIHNlbmRpbmcgdG8gbGluayBsb2NhbCBpdCB3aWxsIG5vdAorCQkg
KiBzaG93IHVwIGluIG91ciBwcml2YXRlIGFkZHJlc3MgY291bnQuCisJCSAqLworCQlpZiAoSU42
X0lTX0FERFJfTElOS0xPQ0FMKCZuZXQtPnJvLl9sX2FkZHIuc2luNi5zaW42X2FkZHIpKQorCQkJ
Y250X2luaXRzX3RvID0gMTsKKwl9CisjZW5kaWYKKwlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5H
KCZuZXQtPnJ4dF90aW1lci50aW1lcikpIHsKKwkJLyogVGhpcyBjYXNlIHNob3VsZCBub3QgaGFw
cGVuICovCisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQ0LCAiU2VuZGluZyBJTklUIC0gZmFp
bGVkIHRpbWVyP1xuIik7CisJCXJldHVybjsKKwl9CisJLyogc3RhcnQgdGhlIElOSVQgdGltZXIg
Ki8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9JTklULCBpbnAsIHN0Y2IsIG5l
dCk7CisKKwltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAxLCBNX05PV0FJVCwg
MSwgTVRfREFUQSk7CisJaWYgKG0gPT0gTlVMTCkgeworCQkvKiBObyBtZW1vcnksIElOSVQgdGlt
ZXIgd2lsbCByZS1hdHRlbXB0LiAqLworCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUNCwgIlNl
bmRpbmcgSU5JVCAtIG1idWY/XG4iKTsKKwkJcmV0dXJuOworCX0KKwljaHVua19sZW4gPSAodWlu
dDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOworCXBhZGRpbmdfbGVuID0gMDsK
KwkvKiBOb3cgbGV0cyBwdXQgdGhlIGNodW5rIGhlYWRlciBpbiBwbGFjZSAqLworCWluaXQgPSBt
dG9kKG0sIHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKik7CisJLyogbm93IHRoZSBjaHVuayBoZWFk
ZXIgKi8KKwlpbml0LT5jaC5jaHVua190eXBlID0gU0NUUF9JTklUSUFUSU9OOworCWluaXQtPmNo
LmNodW5rX2ZsYWdzID0gMDsKKwkvKiBmaWxsIGluIGxhdGVyIGZyb20gbWJ1ZiB3ZSBidWlsZCAq
LworCWluaXQtPmNoLmNodW5rX2xlbmd0aCA9IDA7CisJLyogcGxhY2UgaW4gbXkgdGFnICovCisJ
aW5pdC0+aW5pdC5pbml0aWF0ZV90YWcgPSBodG9ubChzdGNiLT5hc29jLm15X3Z0YWcpOworCS8q
IHNldCB1cCBzb21lIG9mIHRoZSBjcmVkaXRzLiAqLworCWluaXQtPmluaXQuYV9yd25kID0gaHRv
bmwobWF4KGlucC0+c2N0cF9zb2NrZXQ/U0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tl
dCk6MCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01JTklNQUxfUldORCkp
OworCWluaXQtPmluaXQubnVtX291dGJvdW5kX3N0cmVhbXMgPSBodG9ucyhzdGNiLT5hc29jLnBy
ZV9vcGVuX3N0cmVhbXMpOworCWluaXQtPmluaXQubnVtX2luYm91bmRfc3RyZWFtcyA9IGh0b25z
KHN0Y2ItPmFzb2MubWF4X2luYm91bmRfc3RyZWFtcyk7CisJaW5pdC0+aW5pdC5pbml0aWFsX3Rz
biA9IGh0b25sKHN0Y2ItPmFzb2MuaW5pdF9zZXFfbnVtYmVyKTsKKworCS8qIEFkYXB0YXRpb24g
bGF5ZXIgaW5kaWNhdGlvbiBwYXJhbWV0ZXIgKi8KKwlpZiAoaW5wLT5zY3RwX2VwLmFkYXB0YXRp
b25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkKSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2
X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbik7CisJCWFs
aSA9IChzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRpb24gKikobXRvZChtLCBj
YWRkcl90KSArIGNodW5rX2xlbik7CisJCWFsaS0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBf
VUxQX0FEQVBUQVRJT04pOworCQlhbGktPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRl
cl9sZW4pOworCQlhbGktPmluZGljYXRpb24gPSBodG9ubChpbnAtPnNjdHBfZXAuYWRhcHRhdGlv
bl9sYXllcl9pbmRpY2F0b3IpOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisK
KwkvKiBFQ04gcGFyYW1ldGVyICovCisJaWYgKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAx
KSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFt
aGRyKTsKKwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSAr
IGNodW5rX2xlbik7CisJCXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9FQ05fQ0FQQUJMRSk7
CisJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVu
ICs9IHBhcmFtZXRlcl9sZW47CisJfQorCisJLyogUFItU0NUUCBzdXBwb3J0ZWQgcGFyYW1ldGVy
ICovCisJaWYgKHN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRlZCA9PSAxKSB7CisJCXBhcmFtZXRl
cl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJcGggPSAo
c3RydWN0IHNjdHBfcGFyYW1oZHIgKikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJ
CXBoLT5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9QUlNDVFBfU1VQUE9SVEVEKTsKKwkJcGgtPnBh
cmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4gKz0gcGFyYW1l
dGVyX2xlbjsKKwl9CisKKwkvKiBBZGQgTkFUIGZyaWVuZGx5IHBhcmFtZXRlci4gKi8KKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5KSkgeworCQlw
YXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJ
CXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19s
ZW4pOworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSEFTX05BVF9TVVBQT1JUKTsKKwkJ
cGgtPnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOworCQljaHVua19sZW4gKz0g
cGFyYW1ldGVyX2xlbjsKKwl9CisKKwkvKiBBbmQgbm93IHRlbGwgdGhlIHBlZXIgd2hpY2ggZXh0
ZW5zaW9ucyB3ZSBzdXBwb3J0ICovCisJbnVtX2V4dCA9IDA7CisJcHJfc3VwcG9ydGVkID0gKHN0
cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqKShtdG9kKG0sIGNhZGRyX3Qp
ICsgY2h1bmtfbGVuKTsKKwlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkID09IDEpIHsK
KwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9GT1JXQVJEX0NV
TV9UU047CisJCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgeworCQkJcHJfc3VwcG9y
dGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9JRk9SV0FSRF9DVU1fVFNOOworCQl9
CisJfQorCWlmIChzdGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDEpIHsKKwkJcHJfc3VwcG9y
dGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9BVVRIRU5USUNBVElPTjsKKwl9CisJ
aWYgKHN0Y2ItPmFzb2MuYXNjb25mX3N1cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1cHBvcnRlZC0+
Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfQVNDT05GOworCQlwcl9zdXBwb3J0ZWQtPmNo
dW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0FTQ09ORl9BQ0s7CisJfQorCWlmIChzdGNiLT5h
c29jLnJlY29uZmlnX3N1cHBvcnRlZCA9PSAxKSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlw
ZXNbbnVtX2V4dCsrXSA9IFNDVFBfU1RSRUFNX1JFU0VUOworCX0KKwlpZiAoc3RjYi0+YXNvYy5p
ZGF0YV9zdXBwb3J0ZWQpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0Kytd
ID0gU0NUUF9JREFUQTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MubnJzYWNrX3N1cHBvcnRlZCA9PSAx
KSB7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfTlJfU0VM
RUNUSVZFX0FDSzsKKwl9CisJaWYgKHN0Y2ItPmFzb2MucGt0ZHJvcF9zdXBwb3J0ZWQgPT0gMSkg
eworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX1BBQ0tFVF9E
Uk9QUEVEOworCX0KKwlpZiAobnVtX2V4dCA+IDApIHsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50
MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVzX3BhcmFtKSArIG51
bV9leHQ7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfU1VQUE9S
VEVEX0NIVU5LX0VYVCk7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMo
cGFyYW1ldGVyX2xlbik7CisJCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFyYW1ldGVyX2xl
bikgLSBwYXJhbWV0ZXJfbGVuOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwl9CisJ
LyogYWRkIGF1dGhlbnRpY2F0aW9uIHBhcmFtZXRlcnMgKi8KKwlpZiAoc3RjYi0+YXNvYy5hdXRo
X3N1cHBvcnRlZCkgeworCQkvKiBhdHRhY2ggUkFORE9NIHBhcmFtZXRlciwgaWYgYXZhaWxhYmxl
ICovCisJCWlmIChzdGNiLT5hc29jLmF1dGhpbmZvLnJhbmRvbSAhPSBOVUxMKSB7CisJCQlzdHJ1
Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqcmFuZHA7CisKKwkJCWlmIChwYWRkaW5nX2xlbiA+IDApIHsK
KwkJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4p
OworCQkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCQlwYWRkaW5nX2xlbiA9IDA7CisJ
CQl9CisJCQlyYW5kcCA9IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKShtdG9kKG0sIGNhZGRy
X3QpICsgY2h1bmtfbGVuKTsKKwkJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6ZW9mKHN0
cnVjdCBzY3RwX2F1dGhfcmFuZG9tKSArIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tX2xlbjsK
KwkJCS8qIHJhbmRvbSBrZXkgYWxyZWFkeSBjb250YWlucyB0aGUgaGVhZGVyICovCisJCQltZW1j
cHkocmFuZHAsIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmFuZG9tLT5rZXksIHBhcmFtZXRlcl9sZW4p
OworCQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRl
cl9sZW47CisJCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwkJfQorCQkvKiBhZGQgSE1B
Q19BTEdPIHBhcmFtZXRlciAqLworCQlpZiAoc3RjYi0+YXNvYy5sb2NhbF9obWFjcyAhPSBOVUxM
KSB7CisJCQlzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqaG1hY3M7CisKKwkJCWlmIChwYWRk
aW5nX2xlbiA+IDApIHsKKwkJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbiwg
MCwgcGFkZGluZ19sZW4pOworCQkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCQlwYWRk
aW5nX2xlbiA9IDA7CisJCQl9CisJCQlobWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxn
byAqKShtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJCXBhcmFtZXRlcl9sZW4gPSAo
dWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbykgKworCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5sb2NhbF9obWFjcy0+bnVtX2FsZ28gKiBz
aXplb2YodWludDE2X3QpKTsKKwkJCWhtYWNzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9I
TUFDX0xJU1QpOworCQkJaG1hY3MtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9s
ZW4pOworCQkJc2N0cF9zZXJpYWxpemVfaG1hY2xpc3Qoc3RjYi0+YXNvYy5sb2NhbF9obWFjcywg
KHVpbnQ4X3QgKilobWFjcy0+aG1hY19pZHMpOworCQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUz
MihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCQljaHVua19sZW4gKz0gcGFyYW1l
dGVyX2xlbjsKKwkJfQorCQkvKiBhZGQgQ0hVTktTIHBhcmFtZXRlciAqLworCQlpZiAoc3RjYi0+
YXNvYy5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qgc2N0cF9hdXRoX2No
dW5rX2xpc3QgKmNodW5rczsKKworCQkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJCW1lbXNl
dChtdG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCQkJY2h1
bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJCXBhZGRpbmdfbGVuID0gMDsKKwkJCX0KKwkJCWNo
dW5rcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKikobXRvZChtLCBjYWRkcl90KSAr
IGNodW5rX2xlbik7CisJCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0
IHNjdHBfYXV0aF9jaHVua19saXN0KSArCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBz
Y3RwX2F1dGhfZ2V0X2Noa2xpc3Rfc2l6ZShzdGNiLT5hc29jLmxvY2FsX2F1dGhfY2h1bmtzKSk7
CisJCQljaHVua3MtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NIVU5LX0xJU1QpOworCQkJ
Y2h1bmtzLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJCXNjdHBf
c2VyaWFsaXplX2F1dGhfY2h1bmtzKHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3MsIGNodW5r
cy0+Y2h1bmtfdHlwZXMpOworCQkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJf
bGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCQljaHVua19sZW4gKz0gcGFyYW1ldGVyX2xlbjsKKwkJ
fQorCX0KKworCS8qIG5vdyBhbnkgY29va2llIHRpbWUgZXh0ZW5zaW9ucyAqLworCWlmIChzdGNi
LT5hc29jLmNvb2tpZV9wcmVzZXJ2ZV9yZXEpIHsKKwkJc3RydWN0IHNjdHBfY29va2llX3BlcnNl
cnZlX3BhcmFtICpjb29raWVfcHJlc2VydmU7CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgewor
CQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsK
KwkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQor
CQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9jb29raWVfcGVy
c2VydmVfcGFyYW0pOworCQljb29raWVfcHJlc2VydmUgPSAoc3RydWN0IHNjdHBfY29va2llX3Bl
cnNlcnZlX3BhcmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCQljb29raWVf
cHJlc2VydmUtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NPT0tJRV9QUkVTRVJWRSk7CisJ
CWNvb2tpZV9wcmVzZXJ2ZS0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7
CisJCWNvb2tpZV9wcmVzZXJ2ZS0+dGltZSA9IGh0b25sKHN0Y2ItPmFzb2MuY29va2llX3ByZXNl
cnZlX3JlcSk7CisJCXN0Y2ItPmFzb2MuY29va2llX3ByZXNlcnZlX3JlcSA9IDA7CisJCWNodW5r
X2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKworCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRf
YWRkcl9sZWdhbCB8fCBzdGNiLT5hc29jLnNjb3BlLmlwdjZfYWRkcl9sZWdhbCkgeworCQl1aW50
OF90IGk7CisKKwkJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2QobSwgY2Fk
ZHJfdCkgKyBjaHVua19sZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiArPSBwYWRk
aW5nX2xlbjsKKwkJCXBhZGRpbmdfbGVuID0gMDsKKwkJfQorCQlwYXJhbWV0ZXJfbGVuID0gKHVp
bnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCWlmIChzdGNiLT5hc29jLnNj
b3BlLmlwdjRfYWRkcl9sZWdhbCkgeworCQkJcGFyYW1ldGVyX2xlbiArPSAodWludDE2X3Qpc2l6
ZW9mKHVpbnQxNl90KTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVn
YWwpIHsKKwkJCXBhcmFtZXRlcl9sZW4gKz0gKHVpbnQxNl90KXNpemVvZih1aW50MTZfdCk7CisJ
CX0KKwkJc3VwX2FkZHIgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2FkZHJfcGFyYW0gKikobXRv
ZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJCXN1cF9hZGRyLT5waC5wYXJhbV90eXBlID0g
aHRvbnMoU0NUUF9TVVBQT1JURURfQUREUlRZUEUpOworCQlzdXBfYWRkci0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWkgPSAwOworCQlpZiAoc3RjYi0+YXNvYy5z
Y29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0
b25zKFNDVFBfSVBWNF9BRERSRVNTKTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY29wZS5pcHY2
X2FkZHJfbGVnYWwpIHsKKwkJCXN1cF9hZGRyLT5hZGRyX3R5cGVbaSsrXSA9IGh0b25zKFNDVFBf
SVBWNl9BRERSRVNTKTsKKwkJfQorCQlwYWRkaW5nX2xlbiA9IDQgLSAyICogaTsKKwkJY2h1bmtf
bGVuICs9IHBhcmFtZXRlcl9sZW47CisJfQorCisJU0NUUF9CVUZfTEVOKG0pID0gY2h1bmtfbGVu
OworCS8qIG5vdyB0aGUgYWRkcmVzc2VzICovCisJLyogVG8gb3B0aW1pemUgdGhpcyB3ZSBjb3Vs
ZCBwdXQgdGhlIHNjb3Bpbmcgc3R1ZmYKKwkgKiBpbnRvIGEgc3RydWN0dXJlIGFuZCByZW1vdmUg
dGhlIGluZGl2aWR1YWwgdWludDgncyBmcm9tCisJICogdGhlIGFzc29jIHN0cnVjdHVyZS4gVGhl
biB3ZSBjb3VsZCBqdXN0IHNpZmEgaW4gdGhlCisJICogYWRkcmVzcyB3aXRoaW4gdGhlIHN0Y2Iu
IEJ1dCBmb3Igbm93IHRoaXMgaXMgYSBxdWljaworCSAqIGhhY2sgdG8gZ2V0IHRoZSBhZGRyZXNz
IHN0dWZmIHRlYXNlZCBhcGFydC4KKwkgKi8KKwltX2xhc3QgPSBzY3RwX2FkZF9hZGRyZXNzZXNf
dG9faV9pYShpbnAsIHN0Y2IsICZzdGNiLT5hc29jLnNjb3BlLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG0sIGNudF9pbml0c190bywKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmcGFkZGluZ19sZW4sICZjaHVua19sZW4pOworCisJaW5pdC0+Y2gu
Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsKKwlpZiAocGFkZGluZ19sZW4gPiAwKSB7
CisJCWlmIChzY3RwX2FkZF9wYWRfdG9tYnVmKG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwp
IHsKKwkJCXNjdHBfbV9mcmVlbShtKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUNCwgIlNlbmRpbmcgSU5JVCAtIGNhbGxzIGxvd2xldmVsX291dHB1dFxu
Iik7CisJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwg
bmV0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNv
Y2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbSwgMCwgTlVMTCwgMCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwo
MCksCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwg
TlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvX2xvY2tlZCkpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQ0LCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJaWYgKGVycm9yID09IEVOT0JV
RlMpIHsKKwkJCXN0Y2ItPmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOworCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RjYi0+YXNvYy5pZnBf
aGFkX2Vub2J1ZiA9IDA7CisJfQorCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRj
b250cm9sY2h1bmtzKTsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbmV0LT5sYXN0X3Nl
bnRfdGltZSk7Cit9CisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVk
X3BhcmFtZXRlcnMoc3RydWN0IG1idWYgKmluX2luaXRwa3QsCisJaW50IHBhcmFtX29mZnNldCwg
aW50ICphYm9ydF9wcm9jZXNzaW5nLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY3AsIGludCAqbmF0
X2ZyaWVuZGx5KQoreworCS8qCisJICogR2l2ZW4gYSBtYnVmIGNvbnRhaW5pbmcgYW4gSU5JVCBv
ciBJTklULUFDSyB3aXRoIHRoZSBwYXJhbV9vZmZzZXQKKwkgKiBiZWluZyBlcXVhbCB0byB0aGUg
YmVnaW5uaW5nIG9mIHRoZSBwYXJhbXMgaS5lLiAoaXBobGVuICsKKwkgKiBzaXplb2Yoc3RydWN0
IHNjdHBfaW5pdF9tc2cpIHBhcnNlIHRocm91Z2ggdGhlIHBhcmFtZXRlcnMgdG8gdGhlCisJICog
ZW5kIG9mIHRoZSBtYnVmIHZlcmlmeWluZyB0aGF0IGFsbCBwYXJhbWV0ZXJzIGFyZSBrbm93bi4K
KwkgKgorCSAqIEZvciB1bmtub3duIHBhcmFtZXRlcnMgYnVpbGQgYW5kIHJldHVybiBhIG1idWYg
d2l0aAorCSAqIFVOUkVDT0dOSVpFRF9QQVJBTUVURVIgZXJyb3JzLiBJZiB0aGUgZmxhZ3MgaW5k
aWNhdGUgdG8gc3RvcAorCSAqIHByb2Nlc3NpbmcgdGhpcyBjaHVuayBzdG9wLCBhbmQgc2V0ICph
Ym9ydF9wcm9jZXNzaW5nIHRvIDEuCisJICoKKwkgKiBCeSBoYXZpbmcgcGFyYW1fb2Zmc2V0IGJl
IHByZS1zZXQgdG8gd2hlcmUgcGFyYW1ldGVycyBiZWdpbiBpdCBpcworCSAqIGhvcGVkIHRoYXQg
dGhpcyByb3V0aW5lIG1heSBiZSByZXVzZWQgaW4gdGhlIGZ1dHVyZSBieSBuZXcKKwkgKiBmZWF0
dXJlcy4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1zOworCisJc3Ry
dWN0IG1idWYgKm1hdCwgKm9wX2VycjsKKwljaGFyIHRlbXBidWZbU0NUUF9QQVJBTV9CVUZGRVJf
U0laRV07CisJaW50IGF0LCBsaW1pdCwgcGFkX25lZWRlZDsKKwl1aW50MTZfdCBwdHlwZSwgcGxl
biwgcGFkZGVkX3NpemU7CisJaW50IGVycl9hdDsKKworCSphYm9ydF9wcm9jZXNzaW5nID0gMDsK
KwltYXQgPSBpbl9pbml0cGt0OworCWVycl9hdCA9IDA7CisJbGltaXQgPSBudG9ocyhjcC0+Y2h1
bmtfbGVuZ3RoKSAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKTsKKwlhdCA9IHBhcmFt
X29mZnNldDsKKwlvcF9lcnIgPSBOVUxMOworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAi
Q2hlY2sgZm9yIHVucmVjb2duaXplZCBwYXJhbSdzXG4iKTsKKwlwaGRyID0gc2N0cF9nZXRfbmV4
dF9wYXJhbShtYXQsIGF0LCAmcGFyYW1zLCBzaXplb2YocGFyYW1zKSk7CisJd2hpbGUgKChwaGRy
ICE9IE5VTEwpICYmICgoc2l6ZV90KWxpbWl0ID49IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhk
cikpKSB7CisJCXB0eXBlID0gbnRvaHMocGhkci0+cGFyYW1fdHlwZSk7CisJCXBsZW4gPSBudG9o
cyhwaGRyLT5wYXJhbV9sZW5ndGgpOworCQlpZiAoKHBsZW4gPiBsaW1pdCkgfHwgKHBsZW4gPCBz
aXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSkgeworCQkJLyogd2Fja2VkIHBhcmFtZXRlciAq
LworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciAl
ZFxuIiwgcGxlbik7CisJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJfQorCQlsaW1pdCAtPSBTQ1RQ
X1NJWkUzMihwbGVuKTsKKwkJLyotCisJCSAqIEFsbCBwYXJhbWV0ZXJzIGZvciBhbGwgY2h1bmtz
IHRoYXQgd2Uga25vdy91bmRlcnN0YW5kIGFyZQorCQkgKiBsaXN0ZWQgaGVyZS4gV2UgcHJvY2Vz
cyB0aGVtIG90aGVyIHBsYWNlcyBhbmQgbWFrZQorCQkgKiBhcHByb3ByaWF0ZSBzdG9wIGFjdGlv
bnMgcGVyIHRoZSB1cHBlciBiaXRzLiBIb3dldmVyIHRoaXMKKwkJICogaXMgdGhlIGdlbmVyaWMg
cm91dGluZSBwcm9jZXNzb3IncyBjYW4gY2FsbCB0byBnZXQgYmFjaworCQkgKiBhbiBvcGVyci4u
IHRvIGVpdGhlciBpbmNvcnBvcmF0ZSAoaW5pdC1hY2spIG9yIHNlbmQuCisJCSAqLworCQlwYWRk
ZWRfc2l6ZSA9IFNDVFBfU0laRTMyKHBsZW4pOworCQlzd2l0Y2ggKHB0eXBlKSB7CisJCQkvKiBQ
YXJhbSdzIHdpdGggdmFyaWFibGUgc2l6ZSAqLworCQljYXNlIFNDVFBfSEVBUlRCRUFUX0lORk86
CisJCWNhc2UgU0NUUF9TVEFURV9DT09LSUU6CisJCWNhc2UgU0NUUF9VTlJFQ09HX1BBUkFNOgor
CQljYXNlIFNDVFBfRVJST1JfQ0FVU0VfSU5EOgorCQkJLyogb2sgc2tpcCBmd2QgKi8KKwkJCWF0
ICs9IHBhZGRlZF9zaXplOworCQkJYnJlYWs7CisJCQkvKiBQYXJhbSdzIHdpdGggdmFyaWFibGUg
c2l6ZSB3aXRoaW4gYSByYW5nZSAqLworCQljYXNlIFNDVFBfQ0hVTktfTElTVDoKKwkJY2FzZSBT
Q1RQX1NVUFBPUlRFRF9DSFVOS19FWFQ6CisJCQlpZiAocGFkZGVkX3NpemUgPiAoc2l6ZW9mKHN0
cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSkgKyAoc2l6ZW9mKHVpbnQ4X3Qp
ICogU0NUUF9NQVhfU1VQUE9SVEVEX0VYVCkpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBjaGtsaXN0ICVkXG4iLCBwbGVuKTsKKwkJCQln
b3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9zaXplOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9TVVBQT1JURURfQUREUlRZUEU6CisJCQlpZiAocGFkZGVkX3NpemUgPiBT
Q1RQX01BWF9BRERSX1BBUkFNU19TSVpFKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBzdXBhZGRydHlwZSAlZFxuIiwgcGxlbik7CisJCQkJ
Z290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfUkFORE9NOgorCQkJaWYgKHBhZGRlZF9zaXplID4gKHNpemVvZihzdHJ1
Y3Qgc2N0cF9hdXRoX3JhbmRvbSkgKyBTQ1RQX1JBTkRPTV9NQVhfU0laRSkpIHsKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIHJhbmRvbSAlZFxu
IiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRf
c2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU0VUX1BSSU1fQUREUjoKKwkJY2FzZSBTQ1RQ
X0RFTF9JUF9BRERSRVNTOgorCQljYXNlIFNDVFBfQUREX0lQX0FERFJFU1M6CisJCQlpZiAoKHBh
ZGRlZF9zaXplICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRkcnY0X3BhcmFtKSkgJiYK
KwkJCSAgICAocGFkZGVkX3NpemUgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRyX3Bh
cmFtKSkpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAt
IGVycm9yIHNldHByaW0gJWRcbiIsIHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJ
fQorCQkJYXQgKz0gcGFkZGVkX3NpemU7CisJCQlicmVhazsKKwkJCS8qIFBhcmFtJ3Mgd2l0aCBh
IGZpeGVkIHNpemUgKi8KKwkJY2FzZSBTQ1RQX0lQVjRfQUREUkVTUzoKKwkJCWlmIChwYWRkZWRf
c2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0pKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBpcHY0IGFkZHIgJWRc
biIsIHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVk
X3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJCWlmIChwYWRk
ZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0pKSB7CisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBpcHY2IGFkZHIg
JWRcbiIsIHBsZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFk
ZGVkX3NpemU7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0NPT0tJRV9QUkVTRVJWRToKKwkJCWlm
IChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfY29va2llX3BlcnNlcnZlX3BhcmFt
KSkgeworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJy
b3IgY29va2llLXByZXNlcnZlICVkXG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsK
KwkJCX0KKwkJCWF0ICs9IHBhZGRlZF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9IQVNf
TkFUX1NVUFBPUlQ6CisJCQkqbmF0X2ZyaWVuZGx5ID0gMTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAq
LworCQljYXNlIFNDVFBfUFJTQ1RQX1NVUFBPUlRFRDoKKwkJCWlmIChwYWRkZWRfc2l6ZSAhPSBz
aXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDEsICJJbnZhbGlkIHNpemUgLSBlcnJvciBwcnNjdHAvbmF0IHN1cHBvcnQgJWRcbiIsIHBs
ZW4pOworCQkJCWdvdG8gaW52YWxpZF9zaXplOworCQkJfQorCQkJYXQgKz0gcGFkZGVkX3NpemU7
CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0VDTl9DQVBBQkxFOgorCQkJaWYgKHBhZGRlZF9zaXpl
ICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpIHsKKwkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGVjbiAlZFxuIiwgcGxlbik7CisJCQkJ
Z290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCArPSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfVUxQX0FEQVBUQVRJT046CisJCQlpZiAocGFkZGVkX3NpemUgIT0gc2l6
ZW9mKHN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbikpIHsKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIkludmFsaWQgc2l6ZSAtIGVycm9yIGFkYXBhdGF0aW9u
ICVkXG4iLCBwbGVuKTsKKwkJCQlnb3RvIGludmFsaWRfc2l6ZTsKKwkJCX0KKwkJCWF0ICs9IHBh
ZGRlZF9zaXplOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVUNDRVNTX1JFUE9SVDoKKwkJCWlm
IChwYWRkZWRfc2l6ZSAhPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX3BhcmFtaGRyKSkgewor
CQkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiSW52YWxpZCBzaXplIC0gZXJyb3Igc3Vj
Y2VzcyAlZFxuIiwgcGxlbik7CisJCQkJZ290byBpbnZhbGlkX3NpemU7CisJCQl9CisJCQlhdCAr
PSBwYWRkZWRfc2l6ZTsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfSE9TVE5BTUVfQUREUkVTUzoK
KwkJeworCQkJLyogV2UgY2FuIE5PVCBoYW5kbGUgSE9TVCBOQU1FIGFkZHJlc3NlcyEhICovCisJ
CQlpbnQgbF9sZW47CisKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiQ2FuJ3QgaGFu
ZGxlIGhvc3RuYW1lIGFkZHJlc3Nlcy4uIGFib3J0IHByb2Nlc3NpbmdcbiIpOworCQkJKmFib3J0
X3Byb2Nlc3NpbmcgPSAxOworCQkJaWYgKG9wX2VyciA9PSBOVUxMKSB7CisJCQkJLyogT2sgbmVl
ZCB0byB0cnkgdG8gZ2V0IGEgbWJ1ZiAqLworI2lmZGVmIElORVQ2CisJCQkJbF9sZW4gPSBTQ1RQ
X01JTl9PVkVSSEVBRDsKKyNlbHNlCisJCQkJbF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsK
KyNlbmRpZgorCQkJCWxfbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJCQkJ
bF9sZW4gKz0gcGxlbjsKKwkJCQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIp
OworCQkJCW9wX2VyciA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsX2xlbiwgMCwgTV9OT1dBSVQs
IDEsIE1UX0RBVEEpOworCQkJCWlmIChvcF9lcnIpIHsKKwkJCQkJU0NUUF9CVUZfTEVOKG9wX2Vy
cikgPSAwOworCQkJCQkvKgorCQkJCQkgKiBwcmUtcmVzZXJ2ZSBzcGFjZSBmb3IgaXAgYW5kIHNj
dHAKKwkJCQkJICogaGVhZGVyICBhbmQgY2h1bmsgaGRyCisJCQkJCSAqLworI2lmZGVmIElORVQ2
CisJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwNl9oZHIpKTsK
KyNlbHNlCisJCQkJCVNDVFBfQlVGX1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwKSk7
CisjZW5kaWYKKwkJCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0
cGhkcikpOworCQkJCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2NodW5raGRyKSk7CisJCQkJfQorCQkJfQorCQkJaWYgKG9wX2VycikgeworCQkJCS8qIElmIHdl
IGhhdmUgc3BhY2UgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBzOworCisJCQkJaWYgKGVy
cl9hdCAlIDQpIHsKKwkJCQkJdWludDMyX3QgY3B0aGlzID0gMDsKKworCQkJCQlwYWRfbmVlZGVk
ID0gNCAtIChlcnJfYXQgJSA0KTsKKwkJCQkJbV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgcGFk
X25lZWRlZCwgKGNhZGRyX3QpJmNwdGhpcyk7CisJCQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOwor
CQkJCX0KKwkJCQlzLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1VOUkVTT0xWQUJMRV9B
RERSKTsKKwkJCQlzLnBhcmFtX2xlbmd0aCA9IGh0b25zKHNpemVvZihzKSArIHBsZW4pOworCQkJ
CW1fY29weWJhY2sob3BfZXJyLCBlcnJfYXQsIHNpemVvZihzKSwgKGNhZGRyX3QpJnMpOworCQkJ
CWVycl9hdCArPSBzaXplb2Yocyk7CisJCQkJaWYgKHBsZW4gPiBzaXplb2YodGVtcGJ1ZikpIHsK
KwkJCQkJcGxlbiA9IHNpemVvZih0ZW1wYnVmKTsKKwkJCQl9CisJCQkJcGhkciA9IHNjdHBfZ2V0
X25leHRfcGFyYW0obWF0LCBhdCwgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopdGVtcGJ1ZiwgcGxl
bik7CisJCQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJCQlzY3RwX21fZnJlZW0ob3BfZXJyKTsK
KwkJCQkJLyoKKwkJCQkJICogd2UgYXJlIG91dCBvZiBtZW1vcnkgYnV0IHdlIHN0aWxsCisJCQkJ
CSAqIG5lZWQgdG8gaGF2ZSBhIGxvb2sgYXQgd2hhdCB0byBkbworCQkJCQkgKiAodGhlIHN5c3Rl
bSBpcyBpbiB0cm91YmxlCisJCQkJCSAqIHRob3VnaCkuCisJCQkJCSAqLworCQkJCQlyZXR1cm4g
KE5VTEwpOworCQkJCX0KKwkJCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwbGVuLCAoY2Fk
ZHJfdClwaGRyKTsKKwkJCX0KKwkJCXJldHVybiAob3BfZXJyKTsKKwkJCWJyZWFrOworCQl9CisJ
CWRlZmF1bHQ6CisJCQkvKgorCQkJICogd2UgZG8gbm90IHJlY29nbml6ZSB0aGUgcGFyYW1ldGVy
IGZpZ3VyZSBvdXQgd2hhdAorCQkJICogd2UgZG8uCisJCQkgKi8KKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19PVVRQVVQxLCAiSGl0IGRlZmF1bHQgcGFyYW0gJXhcbiIsIHB0eXBlKTsKKwkJCWlmICgo
cHR5cGUgJiAweDQwMDApID09IDB4NDAwMCkgeworCQkJCS8qIFJlcG9ydCBiaXQgaXMgc2V0Pz8g
Ki8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgInJlcG9ydCBvcCBlcnJcbiIpOwor
CQkJCWlmIChvcF9lcnIgPT0gTlVMTCkgeworCQkJCQlpbnQgbF9sZW47CisJCQkJCS8qIE9rIG5l
ZWQgdG8gdHJ5IHRvIGdldCBhbiBtYnVmICovCisjaWZkZWYgSU5FVDYKKwkJCQkJbF9sZW4gPSBT
Q1RQX01JTl9PVkVSSEVBRDsKKyNlbHNlCisJCQkJCWxfbGVuID0gU0NUUF9NSU5fVjRfT1ZFUkhF
QUQ7CisjZW5kaWYKKwkJCQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsK
KwkJCQkJbF9sZW4gKz0gcGxlbjsKKwkJCQkJbF9sZW4gKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3Bh
cmFtaGRyKTsKKwkJCQkJb3BfZXJyID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxfbGVuLCAwLCBN
X05PV0FJVCwgMSwgTVRfREFUQSk7CisJCQkJCWlmIChvcF9lcnIpIHsKKwkJCQkJCVNDVFBfQlVG
X0xFTihvcF9lcnIpID0gMDsKKyNpZmRlZiBJTkVUNgorCQkJCQkJU0NUUF9CVUZfUkVTVl9VRihv
cF9lcnIsIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOworI2Vsc2UKKwkJCQkJCVNDVFBfQlVGX1JF
U1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IGlwKSk7CisjZW5kaWYKKwkJCQkJCVNDVFBfQlVG
X1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwkJCQkJCVNDVFBfQlVG
X1JFU1ZfVUYob3BfZXJyLCBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKTsKKwkJCQkJfQor
CQkJCX0KKwkJCQlpZiAob3BfZXJyKSB7CisJCQkJCS8qIElmIHdlIGhhdmUgc3BhY2UgKi8KKwkJ
CQkJc3RydWN0IHNjdHBfcGFyYW1oZHIgczsKKworCQkJCQlpZiAoZXJyX2F0ICUgNCkgeworCQkJ
CQkJdWludDMyX3QgY3B0aGlzID0gMDsKKworCQkJCQkJcGFkX25lZWRlZCA9IDQgLSAoZXJyX2F0
ICUgNCk7CisJCQkJCQltX2NvcHliYWNrKG9wX2VyciwgZXJyX2F0LCBwYWRfbmVlZGVkLCAoY2Fk
ZHJfdCkmY3B0aGlzKTsKKwkJCQkJCWVycl9hdCArPSBwYWRfbmVlZGVkOworCQkJCQl9CisJCQkJ
CXMucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfVU5SRUNPR19QQVJBTSk7CisJCQkJCXMucGFyYW1f
bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHMpICsgcGxlbik7CisJCQkJCW1fY29weWJhY2sob3BfZXJy
LCBlcnJfYXQsIHNpemVvZihzKSwgKGNhZGRyX3QpJnMpOworCQkJCQllcnJfYXQgKz0gc2l6ZW9m
KHMpOworCQkJCQlpZiAocGxlbiA+IHNpemVvZih0ZW1wYnVmKSkgeworCQkJCQkJcGxlbiA9IHNp
emVvZih0ZW1wYnVmKTsKKwkJCQkJfQorCQkJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbSht
YXQsIGF0LCAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKil0ZW1wYnVmLCBwbGVuKTsKKwkJCQkJaWYg
KHBoZHIgPT0gTlVMTCkgeworCQkJCQkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCQkJCQkvKgor
CQkJCQkJICogd2UgYXJlIG91dCBvZiBtZW1vcnkgYnV0CisJCQkJCQkgKiB3ZSBzdGlsbCBuZWVk
IHRvIGhhdmUgYQorCQkJCQkJICogbG9vayBhdCB3aGF0IHRvIGRvICh0aGUKKwkJCQkJCSAqIHN5
c3RlbSBpcyBpbiB0cm91YmxlCisJCQkJCQkgKiB0aG91Z2gpLgorCQkJCQkJICovCisJCQkJCQlv
cF9lcnIgPSBOVUxMOworCQkJCQkJZ290byBtb3JlX3Byb2Nlc3Npbmc7CisJCQkJCX0KKwkJCQkJ
bV9jb3B5YmFjayhvcF9lcnIsIGVycl9hdCwgcGxlbiwgKGNhZGRyX3QpcGhkcik7CisJCQkJCWVy
cl9hdCArPSBwbGVuOworCQkJCX0KKwkJCX0KKwkJbW9yZV9wcm9jZXNzaW5nOgorCQkJaWYgKChw
dHlwZSAmIDB4ODAwMCkgPT0gMHgwMDAwKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDEsICJzdG9wIHByb2NcbiIpOworCQkJCXJldHVybiAob3BfZXJyKTsKKwkJCX0gZWxzZSB7CisJ
CQkJLyogc2tpcCB0aGlzIGNodW5rIGFuZCBjb250aW51ZSBwcm9jZXNzaW5nICovCisJCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJtb3ZlIG9uXG4iKTsKKwkJCQlhdCArPSBTQ1RQX1NJ
WkUzMihwbGVuKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCX0KKwkJcGhkciA9IHNjdHBfZ2V0X25l
eHRfcGFyYW0obWF0LCBhdCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOworCX0KKwlyZXR1cm4g
KG9wX2Vycik7CisgaW52YWxpZF9zaXplOgorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAi
YWJvcnQgZmxhZyBzZXRcbiIpOworCSphYm9ydF9wcm9jZXNzaW5nID0gMTsKKwlpZiAoKG9wX2Vy
ciA9PSBOVUxMKSAmJiBwaGRyKSB7CisJCWludCBsX2xlbjsKKyNpZmRlZiBJTkVUNgorCQlsX2xl
biA9IFNDVFBfTUlOX09WRVJIRUFEOworI2Vsc2UKKwkJbF9sZW4gPSBTQ1RQX01JTl9WNF9PVkVS
SEVBRDsKKyNlbmRpZgorCQlsX2xlbiArPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOwor
CQlsX2xlbiArPSAoMiAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpOworCQlvcF9lcnIg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobF9sZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsK
KwkJaWYgKG9wX2VycikgeworCQkJU0NUUF9CVUZfTEVOKG9wX2VycikgPSAwOworI2lmZGVmIElO
RVQ2CisJCQlTQ1RQX0JVRl9SRVNWX1VGKG9wX2Vyciwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSk7
CisjZWxzZQorCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3QgaXApKTsK
KyNlbmRpZgorCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
cikpOworCQkJU0NUUF9CVUZfUkVTVl9VRihvcF9lcnIsIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVu
a2hkcikpOworCQl9CisJfQorCWlmICgob3BfZXJyKSAmJiBwaGRyKSB7CisJCXN0cnVjdCBzY3Rw
X3BhcmFtaGRyIHM7CisKKwkJaWYgKGVycl9hdCAlIDQpIHsKKwkJCXVpbnQzMl90IGNwdGhpcyA9
IDA7CisKKwkJCXBhZF9uZWVkZWQgPSA0IC0gKGVycl9hdCAlIDQpOworCQkJbV9jb3B5YmFjayhv
cF9lcnIsIGVycl9hdCwgcGFkX25lZWRlZCwgKGNhZGRyX3QpJmNwdGhpcyk7CisJCQllcnJfYXQg
Kz0gcGFkX25lZWRlZDsKKwkJfQorCQlzLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0NBVVNFX1BS
T1RPQ09MX1ZJT0xBVElPTik7CisJCXMucGFyYW1fbGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHMpICsg
c2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJCW1fY29weWJhY2sob3BfZXJyLCBlcnJf
YXQsIHNpemVvZihzKSwgKGNhZGRyX3QpJnMpOworCQllcnJfYXQgKz0gc2l6ZW9mKHMpOworCQkv
KiBPbmx5IGNvcHkgYmFjayB0aGUgcC1oZHIgdGhhdCBjYXVzZWQgdGhlIGlzc3VlICovCisJCW1f
Y29weWJhY2sob3BfZXJyLCBlcnJfYXQsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksIChj
YWRkcl90KXBoZHIpOworCX0KKwlyZXR1cm4gKG9wX2Vycik7Cit9CisKK3N0YXRpYyBpbnQKK3Nj
dHBfYXJlX3RoZXJlX25ld19hZGRyZXNzZXMoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2Ms
CisgICAgc3RydWN0IG1idWYgKmluX2luaXRwa3QsIGludCBvZmZzZXQsIHN0cnVjdCBzb2NrYWRk
ciAqc3JjKQoreworCS8qCisJICogR2l2ZW4gYSBJTklUIHBhY2tldCwgbG9vayB0aHJvdWdoIHRo
ZSBwYWNrZXQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUKKwkgKiBhcmUgTk8gbmV3IGFkZHJlc3Nlcy4g
QXMgd2UgZ28gdGhyb3VnaCB0aGUgcGFyYW1ldGVycyBhZGQgcmVwb3J0cworCSAqIG9mIGFueSB1
bi11bmRlcnN0b29kIHBhcmFtZXRlcnMgdGhhdCByZXF1aXJlIGFuIGVycm9yLiAgQWxzbyB3ZQor
CSAqIG11c3QgcmV0dXJuICgxKSB0byBkcm9wIHRoZSBwYWNrZXQgaWYgd2Ugc2VlIGEgdW4tdW5k
ZXJzdG9vZAorCSAqIHBhcmFtZXRlciB0aGF0IHRlbGxzIHVzIHRvIGRyb3AgdGhlIGNodW5rLgor
CSAqLworCXN0cnVjdCBzb2NrYWRkciAqc2FfdG91c2U7CisJc3RydWN0IHNvY2thZGRyICpzYTsK
KwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1zOworCXVpbnQxNl90IHB0eXBlLCBw
bGVuOworCXVpbnQ4X3QgZm5kOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlpbnQgY2hlY2tf
c3JjOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luNCwgKnNhNDsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42LCAqc2E2OworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzYWM7
CisjZW5kaWYKKworI2lmZGVmIElORVQKKwltZW1zZXQoJnNpbjQsIDAsIHNpemVvZihzaW40KSk7
CisJc2luNC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW40
LnNpbl9sZW4gPSBzaXplb2Yoc2luNCk7CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
bWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2luNikpOworCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9J
TkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJc2luNi5zaW42X2xlbiA9IHNpemVvZihzaW42
KTsKKyNlbmRpZgorI2VuZGlmCisJLyogRmlyc3Qgd2hhdCBhYm91dCB0aGUgc3JjIGFkZHJlc3Mg
b2YgdGhlIHBrdCA/ICovCisJY2hlY2tfc3JjID0gMDsKKwlzd2l0Y2ggKHNyYy0+c2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGFzb2MtPnNjb3BlLmlwdjRf
YWRkcl9sZWdhbCkgeworCQkJY2hlY2tfc3JjID0gMTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKGFzb2MtPnNjb3BlLmlwdjZfYWRk
cl9sZWdhbCkgeworCQkJY2hlY2tfc3JjID0gMTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCWlmIChhc29jLT5zY29w
ZS5jb25uX2FkZHJfbGVnYWwpIHsKKwkJCWNoZWNrX3NyYyA9IDE7CisJCX0KKwkJYnJlYWs7Cisj
ZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBUU05IICovCisJCWJyZWFrOworCX0KKwlpZiAoY2hlY2tf
c3JjKSB7CisJCWZuZCA9IDA7CisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywgc2N0
cF9uZXh0KSB7CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyOwor
CQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gc3JjLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJ
CQkJaWYgKHNhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW4gKnNyYzQ7CisKKwkJCQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhOworCQkJCQlz
cmM0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNyYzsKKwkJCQkJaWYgKHNhNC0+c2luX2FkZHIu
c19hZGRyID09IHNyYzQtPnNpbl9hZGRyLnNfYWRkcikgeworCQkJCQkJZm5kID0gMTsKKwkJCQkJ
CWJyZWFrOworCQkJCQl9CisJCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc2Et
PnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmM2
OworCisJCQkJCXNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCQkJCXNyYzYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNyYzsKKwkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFM
KHNhNiwgc3JjNikpIHsKKwkJCQkJCWZuZCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJ
CX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQlpZiAoc2EtPnNhX2Zh
bWlseSA9PSBBRl9DT05OKSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzcmNjOworCisJ
CQkJCXNhYyA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXNhOworCQkJCQlzcmNjID0gKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopc3JjOworCQkJCQlpZiAoc2FjLT5zY29ubl9hZGRyID09IHNyY2Mt
PnNjb25uX2FkZHIpIHsKKwkJCQkJCWZuZCA9IDE7CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJ
CX0KKyNlbmRpZgorCQkJfQorCQl9CisJCWlmIChmbmQgPT0gMCkgeworCQkJLyogTmV3IGFkZHJl
c3MgYWRkZWQhIG5vIG5lZWQgdG8gbG9vayBmdXJ0aGVyLiAqLworCQkJcmV0dXJuICgxKTsKKwkJ
fQorCX0KKwkvKiBPayBzbyBmYXIgbGV0cyBtdW5nZSB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBw
YWNrZXQgKi8KKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwX2luaXRfY2h1bmspOworCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNldCwgJnBhcmFtcywgc2l6
ZW9mKHBhcmFtcykpOworCXdoaWxlIChwaGRyKSB7CisJCXNhX3RvdXNlID0gTlVMTDsKKwkJcHR5
cGUgPSBudG9ocyhwaGRyLT5wYXJhbV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFt
X2xlbmd0aCk7CisJCXN3aXRjaCAocHR5cGUpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgU0NUUF9J
UFY0X0FERFJFU1M6CisJCXsKKwkJCXN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtICpwNCwgcDRf
YnVmOworCisJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0p
KSB7CisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFt
KGluX2luaXRwa3QsIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDRf
YnVmLCBzaXplb2YocDRfYnVmKSk7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7CisJCQkJcmV0dXJu
ICgxKTsKKwkJCX0KKwkJCWlmIChhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQlw
NCA9IChzdHJ1Y3Qgc2N0cF9pcHY0YWRkcl9wYXJhbSAqKXBoZHI7CisJCQkJc2luNC5zaW5fYWRk
ci5zX2FkZHIgPSBwNC0+YWRkcjsKKwkJCQlzYV90b3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikm
c2luNDsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNl
IFNDVFBfSVBWNl9BRERSRVNTOgorCQl7CisJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAq
cDYsIHA2X2J1ZjsKKworCQkJaWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjZhZGRy
X3BhcmFtKSkgeworCQkJCXJldHVybiAoMSk7CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4
dF9wYXJhbShpbl9pbml0cGt0LCBvZmZzZXQsCisJCQkgICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRy
ICopJnA2X2J1Ziwgc2l6ZW9mKHA2X2J1ZikpOworCQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJ
CXJldHVybiAoMSk7CisJCQl9CisJCQlpZiAoYXNvYy0+c2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7
CisJCQkJcDYgPSAoc3RydWN0IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaGRyOworCQkJCW1lbWNw
eSgoY2FkZHJfdCkmc2luNi5zaW42X2FkZHIsIHA2LT5hZGRyLAorCQkJCSAgICAgICBzaXplb2Yo
cDYtPmFkZHIpKTsKKwkJCQlzYV90b3VzZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luNjsKKwkJ
CX0KKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXNhX3RvdXNlID0gTlVM
TDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzYV90b3VzZSkgeworCQkJLyogb2ssIHNhX3RvdXNl
IHBvaW50cyB0byBvbmUgdG8gY2hlY2sgKi8KKwkJCWZuZCA9IDA7CisJCQlUQUlMUV9GT1JFQUNI
KG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCXNhID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJaWYgKHNhLT5zYV9mYW1pbHkgIT0gc2FfdG91c2Ut
PnNhX2ZhbWlseSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisjaWZkZWYgSU5FVAorCQkJCWlm
IChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQkJc2E0ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbiAqKXNhOworCQkJCQlpZiAoc2E0LT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIHNp
bjQuc2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQlmbmQgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJ
CX0KKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWlmIChzYS0+c2FfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCQkJCXNhNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2E7CisJCQkJ
CWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTCgKKwkJCQkJICAgIHNhNiwgJnNpbjYpKSB7CisJCQkJ
CQlmbmQgPSAxOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJ
CWlmICghZm5kKSB7CisJCQkJLyogTmV3IGFkZHIgYWRkZWQhIG5vIG5lZWQgdG8gbG9vayBmdXJ0
aGVyICovCisJCQkJcmV0dXJuICgxKTsKKwkJCX0KKwkJfQorCQlvZmZzZXQgKz0gU0NUUF9TSVpF
MzIocGxlbik7CisJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKGluX2luaXRwa3QsIG9mZnNl
dCwgJnBhcmFtcywgc2l6ZW9mKHBhcmFtcykpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKgor
ICogR2l2ZW4gYSBNQlVGIGNoYWluIHRoYXQgd2FzIHNlbnQgaW50byB1cyBjb250YWluaW5nIGFu
IElOSVQuIEJ1aWxkIGEKKyAqIElOSVQtQUNLIHdpdGggQ09PS0lFIGFuZCBzZW5kIGJhY2suIFdl
IGFzc3VtZSB0aGF0IHRoZSBpbl9pbml0cGt0IGhhcyBkb25lCisgKiBhIHB1bGx1cCB0byBpbmNs
dWRlIElQdjYvNGhlYWRlciwgU0NUUCBoZWFkZXIgYW5kIGluaXRpYWwgcGFydCBvZiBJTklUCisg
KiBtZXNzYWdlIChpLmUuIHRoZSBzdHJ1Y3Qgc2N0cF9pbml0X21zZykuCisgKi8KK3ZvaWQKK3Nj
dHBfc2VuZF9pbml0aWF0ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpzcmNf
bmV0LCBzdHJ1Y3QgbWJ1ZiAqaW5pdF9wa3QsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBp
cGhsZW4sIGludCBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk
ciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rICppbml0X2NoaywKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90
IG1mbG93aWQsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lk
LCB1aW50MTZfdCBwb3J0KQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0
cnVjdCBtYnVmICptLCAqbV90bXAsICptX2xhc3QsICptX2Nvb2tpZSwgKm9wX2VycjsKKwlzdHJ1
Y3Qgc2N0cF9pbml0X2Fja19jaHVuayAqaW5pdGFjazsKKwlzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9u
X2xheWVyX2luZGljYXRpb24gKmFsaTsKKwlzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlw
ZXNfcGFyYW0gKnByX3N1cHBvcnRlZDsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGg7CisJdW5p
b24gc2N0cF9zb2Nrc3RvcmUgKm92ZXJfYWRkcjsKKwlzdHJ1Y3Qgc2N0cF9zY29waW5nIHNjcDsK
KwlzdHJ1Y3QgdGltZXZhbCBub3c7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrYWRkcl9pbiAq
ZHN0NCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilkc3Q7CisJc3RydWN0IHNvY2thZGRyX2luICpz
cmM0ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNyYzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
bjsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqZHN0NiA9IChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopZHN0OworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyYzYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKXNyYzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2NrYWRkcl9jb25u
ICpkc3Rjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZHN0OworCXN0cnVjdCBzb2NrYWRk
cl9jb25uICpzcmNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc3JjOworCXN0cnVjdCBz
b2NrYWRkcl9jb25uICpzY29ubjsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkciAqdG87CisJc3Ry
dWN0IHNjdHBfc3RhdGVfY29va2llIHN0YzsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgPSBOVUxM
OworCXVpbnQ4X3QgKnNpZ25hdHVyZSA9IE5VTEw7CisJaW50IGNudF9pbml0c190byA9IDA7CisJ
dWludDE2X3QgaGlzX2xpbWl0LCBpX3dhbnQ7CisJaW50IGFib3J0X2ZsYWc7CisJaW50IG5hdF9m
cmllbmRseSA9IDA7CisJaW50IGVycm9yOworCXN0cnVjdCBzb2NrZXQgKnNvOworCXVpbnQxNl90
IG51bV9leHQsIGNodW5rX2xlbiwgcGFkZGluZ19sZW4sIHBhcmFtZXRlcl9sZW47CisKKwlpZiAo
c3RjYikgeworCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJfSBlbHNlIHsKKwkJYXNvYyA9IE5VTEw7
CisJfQorCWlmICgoYXNvYyAhPSBOVUxMKSAmJgorCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
IT0gU0NUUF9TVEFURV9DT09LSUVfV0FJVCkpIHsKKwkJaWYgKHNjdHBfYXJlX3RoZXJlX25ld19h
ZGRyZXNzZXMoYXNvYywgaW5pdF9wa3QsIG9mZnNldCwgc3JjKSkgeworCQkJLyoKKwkJCSAqIG5l
dyBhZGRyZXNzZXMsIG91dCBvZiBoZXJlIGluIG5vbi1jb29raWUtd2FpdCBzdGF0ZXMKKwkJCSAq
CisJCQkgKiBTZW5kIGFuIEFCT1JULCB3aXRob3V0IHRoZSBuZXcgYWRkcmVzcyBlcnJvciBjYXVz
ZS4KKwkJCSAqIFRoaXMgbG9va3Mgbm8gZGlmZmVyZW50IHRoYW4gaWYgbm8gbGlzdGVuZXIKKwkJ
CSAqIHdhcyBwcmVzZW50LgorCQkJICovCisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNl
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJBZGRyZXNzIGFkZGVkIik7CisJCQlzY3RwX3NlbmRfYWJvcnQoaW5p
dF9wa3QsIGlwaGxlbiwgc3JjLCBkc3QsIHNoLCAwLCBvcF9lcnIsCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwkJCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGlucC0+Zmli
bnVtLAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJCXJldHVy
bjsKKwkJfQorCQlpZiAoc3JjX25ldCAhPSBOVUxMICYmIChzcmNfbmV0LT5wb3J0ICE9IHBvcnQp
KSB7CisJCQkvKgorCQkJICogY2hhbmdlIG9mIHJlbW90ZSBlbmNhcHN1bGF0aW9uIHBvcnQsIG91
dCBvZiBoZXJlIGluCisJCQkgKiBub24tY29va2llLXdhaXQgc3RhdGVzCisJCQkgKgorCQkJICog
U2VuZCBhbiBBQk9SVCwgd2l0aG91dCBhbiBzcGVjaWZpYyBlcnJvciBjYXVzZS4KKwkJCSAqIFRo
aXMgbG9va3Mgbm8gZGlmZmVyZW50IHRoYW4gaWYgbm8gbGlzdGVuZXIKKwkJCSAqIHdhcyBwcmVz
ZW50LgorCQkJICovCisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJSZW1vdGUgZW5jYXBzdWxhdGlvbiBwb3J0IGNoYW5nZWQiKTsKKwkJCXNjdHBfc2VuZF9h
Ym9ydChpbml0X3BrdCwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIDAsIG9wX2VyciwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCQkJICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwg
aW5wLT5maWJudW0sCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwor
CQkJcmV0dXJuOworCQl9CisJfQorCWFib3J0X2ZsYWcgPSAwOworCW9wX2VyciA9IHNjdHBfYXJl
dGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoaW5pdF9wa3QsCisJCQkJCQkgICAgICAgKG9m
ZnNldCArIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbml0X2NodW5rKSksCisJCQkJCQkgICAgICAgJmFi
b3J0X2ZsYWcsIChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKWluaXRfY2hrLCAmbmF0X2ZyaWVuZGx5
KTsKKwlpZiAoYWJvcnRfZmxhZykgeworCWRvX2FfYWJvcnQ6CisJCWlmIChvcF9lcnIgPT0gTlVM
TCkgeworCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJc25wcmludGYobXNn
LCBzaXplb2YobXNnKSwgIiVzOiVkIGF0ICVzIiwgX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNf
Xyk7CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kaWFnX2luZm9fY29kZSksCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyk7
CisJCX0KKwkJc2N0cF9zZW5kX2Fib3J0KGluaXRfcGt0LCBpcGhsZW4sIHNyYywgZHN0LCBzaCwK
KwkJCQlpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcsIG9wX2VyciwKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBpbnAtPmZp
Ym51bSwKKyNlbmRpZgorCQkgICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKKwkJcmV0dXJu
OworCX0KKwltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwg
MSwgTVRfREFUQSk7CisJaWYgKG0gPT0gTlVMTCkgeworCQkvKiBObyBtZW1vcnksIElOSVQgdGlt
ZXIgd2lsbCByZS1hdHRlbXB0LiAqLworCQlpZiAob3BfZXJyKQorCQkJc2N0cF9tX2ZyZWVtKG9w
X2Vycik7CisJCXJldHVybjsKKwl9CisJY2h1bmtfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1
Y3Qgc2N0cF9pbml0X2Fja19jaHVuayk7CisJcGFkZGluZ19sZW4gPSAwOworCisJLyoKKwkgKiBX
ZSBtaWdodCBub3Qgb3ZlcndyaXRlIHRoZSBpZGVudGlmaWNhdGlvbltdIGNvbXBsZXRlbHkgYW5k
IG9uCisJICogc29tZSBwbGF0Zm9ybXMgdGltZV9lbnRlcmVkIHdpbGwgY29udGFpbiBzb21lIHBh
ZGRpbmcuCisJICogVGhlcmVmb3JlIHplcm8gb3V0IHRoZSBjb29raWUgdG8gYXZvaWQgcHV0dGlu
ZworCSAqIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9uIHRoZSB3aXJlLgorCSAqLworCW1lbXNldCgm
c3RjLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKSk7CisKKwkvKiB0aGUgdGlt
ZSBJIGJ1aWx0IGNvb2tpZSAqLworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOwor
CXN0Yy50aW1lX2VudGVyZWQudHZfc2VjID0gbm93LnR2X3NlYzsKKwlzdGMudGltZV9lbnRlcmVk
LnR2X3VzZWMgPSBub3cudHZfdXNlYzsKKworCS8qIHBvcHVsYXRlIGFueSB0aWUgdGFncyAqLwor
CWlmIChhc29jICE9IE5VTEwpIHsKKwkJLyogdW5sb2NrIGJlZm9yZSB0YWcgc2VsZWN0aW9ucyAq
LworCQlzdGMudGllX3RhZ19teV92dGFnID0gYXNvYy0+bXlfdnRhZ19ub25jZTsKKwkJc3RjLnRp
ZV90YWdfcGVlcl92dGFnID0gYXNvYy0+cGVlcl92dGFnX25vbmNlOworCQlzdGMuY29va2llX2xp
ZmUgPSBhc29jLT5jb29raWVfbGlmZTsKKwkJbmV0ID0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlv
bjsKKwl9IGVsc2UgeworCQlzdGMudGllX3RhZ19teV92dGFnID0gMDsKKwkJc3RjLnRpZV90YWdf
cGVlcl92dGFnID0gMDsKKwkJLyogbGlmZSBJIHdpbGwgYXdhcmQgdGhpcyBjb29raWUgKi8KKwkJ
c3RjLmNvb2tpZV9saWZlID0gaW5wLT5zY3RwX2VwLmRlZl9jb29raWVfbGlmZTsKKwl9CisKKwkv
KiBjb3B5IGluIHRoZSBwb3J0cyBmb3IgbGF0ZXIgY2hlY2sgKi8KKwlzdGMubXlwb3J0ID0gc2gt
PmRlc3RfcG9ydDsKKwlzdGMucGVlcnBvcnQgPSBzaC0+c3JjX3BvcnQ7CisKKwkvKgorCSAqIElm
IHdlIHdhbnRlZCB0byBob25vciBjb29raWUgbGlmZSBleHRlbnNpb25zLCB3ZSB3b3VsZCBhZGQg
dG8KKwkgKiBzdGMuY29va2llX2xpZmUuIEZvciBub3cgd2Ugc2hvdWxkIE5PVCBob25vciBhbnkg
ZXh0ZW5zaW9uCisJICovCisJc3RjLnNpdGVfc2NvcGUgPSBzdGMubG9jYWxfc2NvcGUgPSBzdGMu
bG9vcGJhY2tfc2NvcGUgPSAwOworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19CT1VORF9WNikgeworCQlzdGMuaXB2Nl9hZGRyX2xlZ2FsID0gMTsKKwkJaWYgKFNDVFBfSVBW
Nl9WNk9OTFkoaW5wKSkgeworCQkJc3RjLmlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCX0gZWxzZSB7
CisJCQlzdGMuaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJc3RjLmNvbm5fYWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKwl9IGVsc2UgeworCQlz
dGMuaXB2Nl9hZGRyX2xlZ2FsID0gMDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWlm
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OKSB7CisJCQlzdGMu
Y29ubl9hZGRyX2xlZ2FsID0gMTsKKwkJCXN0Yy5pcHY0X2FkZHJfbGVnYWwgPSAwOworCQl9IGVs
c2UgeworCQkJc3RjLmNvbm5fYWRkcl9sZWdhbCA9IDA7CisJCQlzdGMuaXB2NF9hZGRyX2xlZ2Fs
ID0gMTsKKwkJfQorI2Vsc2UKKwkJc3RjLmlwdjRfYWRkcl9sZWdhbCA9IDE7CisjZW5kaWYKKwl9
CisJc3RjLmlwdjRfc2NvcGUgPSAwOworCWlmIChuZXQgPT0gTlVMTCkgeworCQl0byA9IHNyYzsK
KwkJc3dpdGNoIChkc3QtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVU
OgorCQl7CisJCQkvKiBsb29rdXAgYWRkcmVzcyAqLworCQkJc3RjLmFkZHJlc3NbMF0gPSBzcmM0
LT5zaW5fYWRkci5zX2FkZHI7CisJCQlzdGMuYWRkcmVzc1sxXSA9IDA7CisJCQlzdGMuYWRkcmVz
c1syXSA9IDA7CisJCQlzdGMuYWRkcmVzc1szXSA9IDA7CisJCQlzdGMuYWRkcl90eXBlID0gU0NU
UF9JUFY0X0FERFJFU1M7CisJCQkvKiBsb2NhbCBmcm9tIGFkZHJlc3MgKi8KKwkJCXN0Yy5sYWRk
cmVzc1swXSA9IGRzdDQtPnNpbl9hZGRyLnNfYWRkcjsKKwkJCXN0Yy5sYWRkcmVzc1sxXSA9IDA7
CisJCQlzdGMubGFkZHJlc3NbMl0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzNdID0gMDsKKwkJCXN0
Yy5sYWRkcl90eXBlID0gU0NUUF9JUFY0X0FERFJFU1M7CisJCQkvKiBzY29wZV9pZCBpcyBvbmx5
IGZvciB2NiAqLworCQkJc3RjLnNjb3BlX2lkID0gMDsKKwkJCWlmICgoSU40X0lTUFJJVkFURV9B
RERSRVNTKCZzcmM0LT5zaW5fYWRkcikpIHx8CisJCQkgICAgKElONF9JU1BSSVZBVEVfQUREUkVT
UygmZHN0NC0+c2luX2FkZHIpKSl7CisJCQkJc3RjLmlwdjRfc2NvcGUgPSAxOworCQkJfQorCQkJ
LyogTXVzdCB1c2UgdGhlIGFkZHJlc3MgaW4gdGhpcyBjYXNlICovCisJCQlpZiAoc2N0cF9pc19h
ZGRyZXNzX29uX2xvY2FsX2hvc3Qoc3JjLCB2cmZfaWQpKSB7CisJCQkJc3RjLmxvb3BiYWNrX3Nj
b3BlID0gMTsKKwkJCQlzdGMuaXB2NF9zY29wZSA9IDE7CisJCQkJc3RjLnNpdGVfc2NvcGUgPSAx
OworCQkJCXN0Yy5sb2NhbF9zY29wZSA9IDA7CisJCQl9CisJCQlicmVhazsKKwkJfQorI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJeworCQkJc3RjLmFkZHJfdHlwZSA9
IFNDVFBfSVBWNl9BRERSRVNTOworCQkJbWVtY3B5KCZzdGMuYWRkcmVzcywgJnNyYzYtPnNpbjZf
YWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmICgoKF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSAmJiAoX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODA0MDAwKSkgfHwgKF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAwKSkKKwkJCXN0Yy5zY29w
ZV9pZCA9IG50b2hzKGluNl9nZXRzY29wZSgmc3JjNi0+c2luNl9hZGRyKSk7CisjZWxzZQorCQkJ
c3RjLnNjb3BlX2lkID0gMDsKKyNlbmRpZgorCQkJaWYgKHNjdHBfaXNfYWRkcmVzc19vbl9sb2Nh
bF9ob3N0KHNyYywgdnJmX2lkKSkgeworCQkJCXN0Yy5sb29wYmFja19zY29wZSA9IDE7CisJCQkJ
c3RjLmxvY2FsX3Njb3BlID0gMDsKKwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJCQkJc3RjLmlw
djRfc2NvcGUgPSAxOworCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNyYzYt
PnNpbjZfYWRkcikgfHwKKwkJCSAgICAgICAgICAgSU42X0lTX0FERFJfTElOS0xPQ0FMKCZkc3Q2
LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9y
IHNvdXJjZSBpcyBhCisJCQkJICogTElOS19MT0NBTCB3ZSBtdXN0IGhhdmUgY29tbW9uIGJvdGgg
c2l0ZSBhbmQKKwkJCQkgKiBsb2NhbCBzY29wZS4gRG9uJ3Qgc2V0IGxvY2FsIHNjb3BlIHRob3Vn
aAorCQkJCSAqIHNpbmNlIHdlIG11c3QgZGVwZW5kIG9uIHRoZSBzb3VyY2UgdG8gYmUKKwkJCQkg
KiBhZGRlZCBpbXBsaWNpdGx5LiBXZSBjYW5ub3QgYXNzdXJlIGp1c3QKKwkJCQkgKiBiZWNhdXNl
IHdlIHNoYXJlIG9uZSBsaW5rIHRoYXQgYWxsIGxpbmtzIGFyZQorCQkJCSAqIGNvbW1vbi4KKwkJ
CQkgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJCQkvKiBNYWMgT1MgWCBjdXJyZW50bHkg
ZG9lc24ndCBoYXZlIGluNl9nZXRzY29wZSgpICovCisJCQkJc3RjLnNjb3BlX2lkID0gc3JjNi0+
c2luNl9hZGRyLnM2X2FkZHIxNlsxXTsKKyNlbmRpZgorCQkJCXN0Yy5sb2NhbF9zY29wZSA9IDA7
CisJCQkJc3RjLnNpdGVfc2NvcGUgPSAxOworCQkJCXN0Yy5pcHY0X3Njb3BlID0gMTsKKwkJCQkv
KgorCQkJCSAqIHdlIHN0YXJ0IGNvdW50aW5nIGZvciB0aGUgcHJpdmF0ZSBhZGRyZXNzCisJCQkJ
ICogc3R1ZmYgYXQgMS4gc2luY2UgdGhlIGxpbmsgbG9jYWwgd2UKKwkJCQkgKiBzb3VyY2UgZnJv
bSB3b24ndCBzaG93IHVwIGluIG91ciBzY29wZWQKKwkJCQkgKiBjb3VudC4KKwkJCQkgKi8KKwkJ
CQljbnRfaW5pdHNfdG8gPSAxOworCQkJCS8qIHB1bGwgb3V0IHRoZSBzY29wZV9pZCBmcm9tIGlu
Y29taW5nIHBrdCAqLworCQkJfSBlbHNlIGlmIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNyYzYt
PnNpbjZfYWRkcikgfHwKKwkJCSAgICAgICAgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKCZkc3Q2
LT5zaW42X2FkZHIpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIG9y
IHNvdXJjZSBpcworCQkJCSAqIFNJVEVfTE9DQUwgdGhlbiB3ZSBtdXN0IGhhdmUgc2l0ZSBzY29w
ZSBpbgorCQkJCSAqIGNvbW1vbi4KKwkJCQkgKi8KKwkJCQlzdGMuc2l0ZV9zY29wZSA9IDE7CisJ
CQl9CisJCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJmRzdDYtPnNpbjZfYWRkciwgc2l6ZW9mKHN0
cnVjdCBpbjZfYWRkcikpOworCQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsK
KwkJCWJyZWFrOworCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNh
c2UgQUZfQ09OTjoKKwkJeworCQkJLyogbG9va3VwIGFkZHJlc3MgKi8KKwkJCXN0Yy5hZGRyZXNz
WzBdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5hZGRyZXNzWzJdID0gMDsK
KwkJCXN0Yy5hZGRyZXNzWzNdID0gMDsKKwkJCW1lbWNweSgmc3RjLmFkZHJlc3MsICZzcmNjb25u
LT5zY29ubl9hZGRyLCBzaXplb2Yodm9pZCAqKSk7CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9D
T05OX0FERFJFU1M7CisJCQkvKiBsb2NhbCBmcm9tIGFkZHJlc3MgKi8KKwkJCXN0Yy5sYWRkcmVz
c1swXSA9IDA7CisJCQlzdGMubGFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzJdID0g
MDsKKwkJCXN0Yy5sYWRkcmVzc1szXSA9IDA7CisJCQltZW1jcHkoJnN0Yy5sYWRkcmVzcywgJmRz
dGNvbm4tPnNjb25uX2FkZHIsIHNpemVvZih2b2lkICopKTsKKwkJCXN0Yy5sYWRkcl90eXBlID0g
U0NUUF9DT05OX0FERFJFU1M7CisJCQkvKiBzY29wZV9pZCBpcyBvbmx5IGZvciB2NiAqLworCQkJ
c3RjLnNjb3BlX2lkID0gMDsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJ
CS8qIFRTTkggKi8KKwkJCWdvdG8gZG9fYV9hYm9ydDsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNl
IHsKKwkJLyogc2V0IHRoZSBzY29wZSBwZXIgdGhlIGV4aXN0aW5nIHRjYiAqLworCisjaWZkZWYg
SU5FVDYKKwkJc3RydWN0IHNjdHBfbmV0cyAqbG5ldDsKKyNlbmRpZgorCisJCXN0Yy5sb29wYmFj
a19zY29wZSA9IGFzb2MtPnNjb3BlLmxvb3BiYWNrX3Njb3BlOworCQlzdGMuaXB2NF9zY29wZSA9
IGFzb2MtPnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJCXN0Yy5zaXRlX3Njb3BlID0gYXNvYy0+
c2NvcGUuc2l0ZV9zY29wZTsKKwkJc3RjLmxvY2FsX3Njb3BlID0gYXNvYy0+c2NvcGUubG9jYWxf
c2NvcGU7CisjaWZkZWYgSU5FVDYKKwkJLyogV2h5IGRvIHdlIG5vdCBjb25zaWRlciBJUHY0IExM
IGFkZHJlc3Nlcz8gKi8KKwkJVEFJTFFfRk9SRUFDSChsbmV0LCAmYXNvYy0+bmV0cywgc2N0cF9u
ZXh0KSB7CisJCQlpZiAobG5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmbG5ldC0+cm8uX2xfYWRkci5z
aW42LnNpbjZfYWRkcikpIHsKKwkJCQkJLyoKKwkJCQkJICogaWYgd2UgaGF2ZSBhIExMIGFkZHJl
c3MsIHN0YXJ0CisJCQkJCSAqIGNvdW50aW5nIGF0IDEuCisJCQkJCSAqLworCQkJCQljbnRfaW5p
dHNfdG8gPSAxOworCQkJCX0KKwkJCX0KKwkJfQorI2VuZGlmCisJCS8qIHVzZSB0aGUgbmV0IHBv
aW50ZXIgKi8KKwkJdG8gPSAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJ
c3dpdGNoICh0by0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJ
CQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdG87CisJCQlzdGMuYWRkcmVzc1swXSA9IHNp
bi0+c2luX2FkZHIuc19hZGRyOworCQkJc3RjLmFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmFkZHJl
c3NbMl0gPSAwOworCQkJc3RjLmFkZHJlc3NbM10gPSAwOworCQkJc3RjLmFkZHJfdHlwZSA9IFND
VFBfSVBWNF9BRERSRVNTOworCQkJaWYgKG5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPT0gMCkgewor
CQkJCS8qCisJCQkJICogc3RyYW5nZSBjYXNlIGhlcmUsIHRoZSBJTklUIHNob3VsZCBoYXZlCisJ
CQkJICogZGlkIHRoZSBzZWxlY3Rpb24uCisJCQkJICovCisJCQkJbmV0LT5yby5fc19hZGRyID0g
c2N0cF9zb3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLAorCQkJCQkJCQkJCXN0Y2IsIChzY3Rw
X3JvdXRlX3QgKikmbmV0LT5ybywKKwkJCQkJCQkJCQluZXQsIDAsIHZyZl9pZCk7CisJCQkJaWYg
KG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKQorCQkJCQlyZXR1cm47CisKKwkJCQluZXQtPnNyY19h
ZGRyX3NlbGVjdGVkID0gMTsKKworCQkJfQorCQkJc3RjLmxhZGRyZXNzWzBdID0gbmV0LT5yby5f
c19hZGRyLT5hZGRyZXNzLnNpbi5zaW5fYWRkci5zX2FkZHI7CisJCQlzdGMubGFkZHJlc3NbMV0g
PSAwOworCQkJc3RjLmxhZGRyZXNzWzJdID0gMDsKKwkJCXN0Yy5sYWRkcmVzc1szXSA9IDA7CisJ
CQlzdGMubGFkZHJfdHlwZSA9IFNDVFBfSVBWNF9BRERSRVNTOworCQkJLyogc2NvcGVfaWQgaXMg
b25seSBmb3IgdjYgKi8KKwkJCXN0Yy5zY29wZV9pZCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKil0bzsKKwkJCW1lbWNweSgmc3RjLmFkZHJlc3MsICZzaW42LT5zaW42X2FkZHIsCisJ
CQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQkJc3RjLmFkZHJfdHlwZSA9IFND
VFBfSVBWNl9BRERSRVNTOworCQkJc3RjLnNjb3BlX2lkID0gc2luNi0+c2luNl9zY29wZV9pZDsK
KwkJCWlmIChuZXQtPnNyY19hZGRyX3NlbGVjdGVkID09IDApIHsKKwkJCQkvKgorCQkJCSAqIHN0
cmFuZ2UgY2FzZSBoZXJlLCB0aGUgSU5JVCBzaG91bGQgaGF2ZQorCQkJCSAqIGRvbmUgdGhlIHNl
bGVjdGlvbi4KKwkJCQkgKi8KKwkJCQluZXQtPnJvLl9zX2FkZHIgPSBzY3RwX3NvdXJjZV9hZGRy
ZXNzX3NlbGVjdGlvbihpbnAsCisJCQkJCQkJCQkJc3RjYiwgKHNjdHBfcm91dGVfdCAqKSZuZXQt
PnJvLAorCQkJCQkJCQkJCW5ldCwgMCwgdnJmX2lkKTsKKwkJCQlpZiAobmV0LT5yby5fc19hZGRy
ID09IE5VTEwpCisJCQkJCXJldHVybjsKKworCQkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAx
OworCQkJfQorCQkJbWVtY3B5KCZzdGMubGFkZHJlc3MsICZuZXQtPnJvLl9zX2FkZHItPmFkZHJl
c3Muc2luNi5zaW42X2FkZHIsCisJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwor
CQkJc3RjLmxhZGRyX3R5cGUgPSBTQ1RQX0lQVjZfQUREUkVTUzsKKwkJCWJyZWFrOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlzY29ubiA9
IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXRvOworCQkJc3RjLmFkZHJlc3NbMF0gPSAwOworCQkJ
c3RjLmFkZHJlc3NbMV0gPSAwOworCQkJc3RjLmFkZHJlc3NbMl0gPSAwOworCQkJc3RjLmFkZHJl
c3NbM10gPSAwOworCQkJbWVtY3B5KCZzdGMuYWRkcmVzcywgJnNjb25uLT5zY29ubl9hZGRyLCBz
aXplb2Yodm9pZCAqKSk7CisJCQlzdGMuYWRkcl90eXBlID0gU0NUUF9DT05OX0FERFJFU1M7CisJ
CQlzdGMubGFkZHJlc3NbMF0gPSAwOworCQkJc3RjLmxhZGRyZXNzWzFdID0gMDsKKwkJCXN0Yy5s
YWRkcmVzc1syXSA9IDA7CisJCQlzdGMubGFkZHJlc3NbM10gPSAwOworCQkJbWVtY3B5KCZzdGMu
bGFkZHJlc3MsICZzY29ubi0+c2Nvbm5fYWRkciwgc2l6ZW9mKHZvaWQgKikpOworCQkJc3RjLmxh
ZGRyX3R5cGUgPSBTQ1RQX0NPTk5fQUREUkVTUzsKKwkJCXN0Yy5zY29wZV9pZCA9IDA7CisJCQli
cmVhazsKKyNlbmRpZgorCQl9CisJfQorCS8qIE5vdyBsZXRzIHB1dCB0aGUgU0NUUCBoZWFkZXIg
aW4gcGxhY2UgKi8KKwlpbml0YWNrID0gbXRvZChtLCBzdHJ1Y3Qgc2N0cF9pbml0X2Fja19jaHVu
ayAqKTsKKwkvKiBTYXZlIGl0IG9mZiBmb3IgcXVpY2sgcmVmICovCisJc3RjLnBlZXJzX3Z0YWcg
PSBudG9obChpbml0X2Noay0+aW5pdC5pbml0aWF0ZV90YWcpOworCS8qIHdobyBhcmUgd2UgKi8K
KwltZW1jcHkoc3RjLmlkZW50aWZpY2F0aW9uLCBTQ1RQX1ZFUlNJT05fU1RSSU5HLAorCSAgICAg
ICBtaW4oc3RybGVuKFNDVFBfVkVSU0lPTl9TVFJJTkcpLCBzaXplb2Yoc3RjLmlkZW50aWZpY2F0
aW9uKSkpOworCW1lbXNldChzdGMucmVzZXJ2ZWQsIDAsIFNDVFBfUkVTRVJWRV9TUEFDRSk7CisJ
Lyogbm93IHRoZSBjaHVuayBoZWFkZXIgKi8KKwlpbml0YWNrLT5jaC5jaHVua190eXBlID0gU0NU
UF9JTklUSUFUSU9OX0FDSzsKKwlpbml0YWNrLT5jaC5jaHVua19mbGFncyA9IDA7CisJLyogZmls
bCBpbiBsYXRlciBmcm9tIG1idWYgd2UgYnVpbGQgKi8KKwlpbml0YWNrLT5jaC5jaHVua19sZW5n
dGggPSAwOworCS8qIHBsYWNlIGluIG15IHRhZyAqLworCWlmICgoYXNvYyAhPSBOVUxMKSAmJgor
CSAgICAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX1dBSVQpIHx8
CisJICAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9JTlVTRSkgfHwKKwkg
ICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSkg
eworCQkvKiByZS11c2UgdGhlIHYtdGFncyBhbmQgaW5pdC1zZXEgaGVyZSAqLworCQlpbml0YWNr
LT5pbml0LmluaXRpYXRlX3RhZyA9IGh0b25sKGFzb2MtPm15X3Z0YWcpOworCQlpbml0YWNrLT5p
bml0LmluaXRpYWxfdHNuID0gaHRvbmwoYXNvYy0+aW5pdF9zZXFfbnVtYmVyKTsKKwl9IGVsc2Ug
eworCQl1aW50MzJfdCB2dGFnLCBpdHNuOworCisJCWlmIChhc29jKSB7CisJCQlhdG9taWNfYWRk
X2ludCgmYXNvYy0+cmVmY250LCAxKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJbmV3
X3RhZzoKKwkJCXZ0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwg
c2gtPnNyY19wb3J0LCAxKTsKKwkJCWlmICgoYXNvYy0+cGVlcl9zdXBwb3J0c19uYXQpICAmJiAo
dnRhZyA9PSBhc29jLT5teV92dGFnKSkgeworCQkJCS8qIEdvdCBhIGR1cGxpY2F0ZSB2dGFnIG9u
IHNvbWUgZ3V5IGJlaGluZCBhIG5hdAorCQkJCSAqIG1ha2Ugc3VyZSB3ZSBkb24ndCB1c2UgaXQu
CisJCQkJICovCisJCQkJZ290byBuZXdfdGFnOworCQkJfQorCQkJaW5pdGFjay0+aW5pdC5pbml0
aWF0ZV90YWcgPSBodG9ubCh2dGFnKTsKKwkJCS8qIGdldCBhIFRTTiB0byB1c2UgdG9vICovCisJ
CQlpdHNuID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCk7CisJCQlpbml0
YWNrLT5pbml0LmluaXRpYWxfdHNuID0gaHRvbmwoaXRzbik7CisJCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnJlZmNudCwgLTEpOworCQl9IGVsc2Ugewor
CQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CXZ0YWcgPSBzY3RwX3NlbGVjdF9hX3RhZyhpbnAsIGlucC0+c2N0cF9scG9ydCwgc2gtPnNyY19w
b3J0LCAxKTsKKwkJCWluaXRhY2stPmluaXQuaW5pdGlhdGVfdGFnID0gaHRvbmwodnRhZyk7CisJ
CQkvKiBnZXQgYSBUU04gdG8gdXNlIHRvbyAqLworCQkJaW5pdGFjay0+aW5pdC5pbml0aWFsX3Rz
biA9IGh0b25sKHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApKTsKKwkJCVND
VFBfSU5QX1JMT0NLKGlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQl9CisJfQor
CS8qIHNhdmUgYXdheSBteSB0YWcgdG8gKi8KKwlzdGMubXlfdnRhZyA9IGluaXRhY2stPmluaXQu
aW5pdGlhdGVfdGFnOworCisJLyogc2V0IHVwIHNvbWUgb2YgdGhlIGNyZWRpdHMuICovCisJc28g
PSBpbnAtPnNjdHBfc29ja2V0OworCWlmIChzbyA9PSBOVUxMKSB7CisJCS8qIG1lbW9yeSBwcm9i
bGVtICovCisJCXNjdHBfbV9mcmVlbShtKTsKKwkJcmV0dXJuOworCX0gZWxzZSB7CisJCWluaXRh
Y2stPmluaXQuYV9yd25kID0gaHRvbmwobWF4KFNDVFBfU0JfTElNSVRfUkNWKHNvKSwgU0NUUF9N
SU5JTUFMX1JXTkQpKTsKKwl9CisJLyogc2V0IHdoYXQgSSB3YW50ICovCisJaGlzX2xpbWl0ID0g
bnRvaHMoaW5pdF9jaGstPmluaXQubnVtX2luYm91bmRfc3RyZWFtcyk7CisJLyogY2hvb3NlIHdo
YXQgSSB3YW50ICovCisJaWYgKGFzb2MgIT0gTlVMTCkgeworCQlpZiAoYXNvYy0+c3RyZWFtb3V0
Y250ID4gYXNvYy0+cHJlX29wZW5fc3RyZWFtcykgeworCQkJaV93YW50ID0gYXNvYy0+c3RyZWFt
b3V0Y250OworCQl9IGVsc2UgeworCQkJaV93YW50ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtczsK
KwkJfQorCX0gZWxzZSB7CisJCWlfd2FudCA9IGlucC0+c2N0cF9lcC5wcmVfb3Blbl9zdHJlYW1f
Y291bnQ7CisJfQorCWlmIChoaXNfbGltaXQgPCBpX3dhbnQpIHsKKwkJLyogSSBXYW50IG1vcmUg
OjwgKi8KKwkJaW5pdGFjay0+aW5pdC5udW1fb3V0Ym91bmRfc3RyZWFtcyA9IGluaXRfY2hrLT5p
bml0Lm51bV9pbmJvdW5kX3N0cmVhbXM7CisJfSBlbHNlIHsKKwkJLyogSSBjYW4gaGF2ZSB3aGF0
IEkgd2FudCA6PiAqLworCQlpbml0YWNrLT5pbml0Lm51bV9vdXRib3VuZF9zdHJlYW1zID0gaHRv
bnMoaV93YW50KTsKKwl9CisJLyogdGVsbCBoaW0gaGlzIGxpbWl0LiAqLworCWluaXRhY2stPmlu
aXQubnVtX2luYm91bmRfc3RyZWFtcyA9CisJCWh0b25zKGlucC0+c2N0cF9lcC5tYXhfb3Blbl9z
dHJlYW1zX2ludG9tZSk7CisKKwkvKiBhZGFwdGF0aW9uIGxheWVyIGluZGljYXRpb24gcGFyYW1l
dGVyICovCisJaWYgKGlucC0+c2N0cF9lcC5hZGFwdGF0aW9uX2xheWVyX2luZGljYXRvcl9wcm92
aWRlZCkgeworCQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9h
ZGFwdGF0aW9uX2xheWVyX2luZGljYXRpb24pOworCQlhbGkgPSAoc3RydWN0IHNjdHBfYWRhcHRh
dGlvbl9sYXllcl9pbmRpY2F0aW9uICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOwor
CQlhbGktPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1VMUF9BREFQVEFUSU9OKTsKKwkJYWxp
LT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJYWxpLT5pbmRpY2F0
aW9uID0gaHRvbmwoaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yKTsKKwkJ
Y2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisJfQorCisJLyogRUNOIHBhcmFtZXRlciAqLwor
CWlmICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmVjbl9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJ
ICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5lY25fc3VwcG9ydGVkID09IDEpKSkgeworCQlw
YXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJ
CXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19s
ZW4pOworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfRUNOX0NBUEFCTEUpOworCQlwaC0+
cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCWNodW5rX2xlbiArPSBwYXJh
bWV0ZXJfbGVuOworCX0KKworCS8qIFBSLVNDVFAgc3VwcG9ydGVkIHBhcmFtZXRlciAqLworCWlm
ICgoKGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJ
ICAgICgoYXNvYyA9PSBOVUxMKSAmJiAoaW5wLT5wcnNjdHBfc3VwcG9ydGVkID09IDEpKSkgewor
CQlwYXJhbWV0ZXJfbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7
CisJCXBoID0gKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVu
a19sZW4pOworCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfUFJTQ1RQX1NVUFBPUlRFRCk7
CisJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJY2h1bmtfbGVu
ICs9IHBhcmFtZXRlcl9sZW47CisJfQorCisJLyogQWRkIE5BVCBmcmllbmRseSBwYXJhbWV0ZXIg
Ki8KKwlpZiAobmF0X2ZyaWVuZGx5KSB7CisJCXBhcmFtZXRlcl9sZW4gPSAodWludDE2X3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKTsKKwkJcGggPSAoc3RydWN0IHNjdHBfcGFyYW1oZHIg
KikobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xlbik7CisJCXBoLT5wYXJhbV90eXBlID0gaHRv
bnMoU0NUUF9IQVNfTkFUX1NVUFBPUlQpOworCQlwaC0+cGFyYW1fbGVuZ3RoID0gaHRvbnMocGFy
YW1ldGVyX2xlbik7CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKworCS8qIEFu
ZCBub3cgdGVsbCB0aGUgcGVlciB3aGljaCBleHRlbnNpb25zIHdlIHN1cHBvcnQgKi8KKwludW1f
ZXh0ID0gMDsKKwlwcl9zdXBwb3J0ZWQgPSAoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5
cGVzX3BhcmFtICopKG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19sZW4pOworCWlmICgoKGFzb2Mg
IT0gTlVMTCkgJiYgKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkpIHx8CisJICAgICgoYXNv
YyA9PSBOVUxMKSAmJiAoaW5wLT5wcnNjdHBfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBw
b3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTjsKKwkJ
aWYgKCgoYXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSB8fAor
CQkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCA9PSAxKSkpIHsK
KwkJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNbbnVtX2V4dCsrXSA9IFNDVFBfSUZPUldBUkRf
Q1VNX1RTTjsKKwkJfQorCX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5hdXRoX3N1
cHBvcnRlZCA9PSAxKSkgfHwKKwkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPmF1dGhfc3Vw
cG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10g
PSBTQ1RQX0FVVEhFTlRJQ0FUSU9OOworCX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29j
LT5hc2NvbmZfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlu
cC0+YXNjb25mX3N1cHBvcnRlZCA9PSAxKSkpIHsKKwkJcHJfc3VwcG9ydGVkLT5jaHVua190eXBl
c1tudW1fZXh0KytdID0gU0NUUF9BU0NPTkY7CisJCXByX3N1cHBvcnRlZC0+Y2h1bmtfdHlwZXNb
bnVtX2V4dCsrXSA9IFNDVFBfQVNDT05GX0FDSzsKKwl9CisJaWYgKCgoYXNvYyAhPSBOVUxMKSAm
JiAoYXNvYy0+cmVjb25maWdfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAoKGFzb2MgPT0gTlVM
TCkgJiYgKGlucC0+cmVjb25maWdfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQt
PmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX1NUUkVBTV9SRVNFVDsKKwl9CisJaWYgKCgo
YXNvYyAhPSBOVUxMKSAmJiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAo
KGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+aWRhdGFfc3VwcG9ydGVkID09IDEpKSkgeworCQlwcl9z
dXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBTQ1RQX0lEQVRBOworCX0KKwlpZiAo
KChhc29jICE9IE5VTEwpICYmIChhc29jLT5ucnNhY2tfc3VwcG9ydGVkID09IDEpKSB8fAorCSAg
ICAoKGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+bnJzYWNrX3N1cHBvcnRlZCA9PSAxKSkpIHsKKwkJ
cHJfc3VwcG9ydGVkLT5jaHVua190eXBlc1tudW1fZXh0KytdID0gU0NUUF9OUl9TRUxFQ1RJVkVf
QUNLOworCX0KKwlpZiAoKChhc29jICE9IE5VTEwpICYmIChhc29jLT5wa3Rkcm9wX3N1cHBvcnRl
ZCA9PSAxKSkgfHwKKwkgICAgKChhc29jID09IE5VTEwpICYmIChpbnAtPnBrdGRyb3Bfc3VwcG9y
dGVkID09IDEpKSkgeworCQlwcl9zdXBwb3J0ZWQtPmNodW5rX3R5cGVzW251bV9leHQrK10gPSBT
Q1RQX1BBQ0tFVF9EUk9QUEVEOworCX0KKwlpZiAobnVtX2V4dCA+IDApIHsKKwkJcGFyYW1ldGVy
X2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNjdHBfc3VwcG9ydGVkX2NodW5rX3R5cGVz
X3BhcmFtKSArIG51bV9leHQ7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fdHlwZSA9IGh0b25z
KFNDVFBfU1VQUE9SVEVEX0NIVU5LX0VYVCk7CisJCXByX3N1cHBvcnRlZC0+cGgucGFyYW1fbGVu
Z3RoID0gaHRvbnMocGFyYW1ldGVyX2xlbik7CisJCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIo
cGFyYW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJfbGVuOworCQljaHVua19sZW4gKz0gcGFyYW1ldGVy
X2xlbjsKKwl9CisKKwkvKiBhZGQgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycyAqLworCWlmICgo
KGFzb2MgIT0gTlVMTCkgJiYgKGFzb2MtPmF1dGhfc3VwcG9ydGVkID09IDEpKSB8fAorCSAgICAo
KGFzb2MgPT0gTlVMTCkgJiYgKGlucC0+YXV0aF9zdXBwb3J0ZWQgPT0gMSkpKSB7CisJCXN0cnVj
dCBzY3RwX2F1dGhfcmFuZG9tICpyYW5kcDsKKwkJc3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28g
KmhtYWNzOworCQlzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKmNodW5rczsKKworCQlpZiAo
cGFkZGluZ19sZW4gPiAwKSB7CisJCQltZW1zZXQobXRvZChtLCBjYWRkcl90KSArIGNodW5rX2xl
biwgMCwgcGFkZGluZ19sZW4pOworCQkJY2h1bmtfbGVuICs9IHBhZGRpbmdfbGVuOworCQkJcGFk
ZGluZ19sZW4gPSAwOworCQl9CisJCS8qIGdlbmVyYXRlIGFuZCBhZGQgUkFORE9NIHBhcmFtZXRl
ciAqLworCQlyYW5kcCA9IChzdHJ1Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqKShtdG9kKG0sIGNhZGRy
X3QpICsgY2h1bmtfbGVuKTsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3Ry
dWN0IHNjdHBfYXV0aF9yYW5kb20pICsKKwkJICAgICAgICAgICAgICAgIFNDVFBfQVVUSF9SQU5E
T01fU0laRV9ERUZBVUxUOworCQlyYW5kcC0+cGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfUkFO
RE9NKTsKKwkJcmFuZHAtPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKHBhcmFtZXRlcl9sZW4pOwor
CQlTQ1RQX1JFQURfUkFORE9NKHJhbmRwLT5yYW5kb21fZGF0YSwgU0NUUF9BVVRIX1JBTkRPTV9T
SVpFX0RFRkFVTFQpOworCQlwYWRkaW5nX2xlbiA9IFNDVFBfU0laRTMyKHBhcmFtZXRlcl9sZW4p
IC0gcGFyYW1ldGVyX2xlbjsKKwkJY2h1bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisKKwkJaWYg
KHBhZGRpbmdfbGVuID4gMCkgeworCQkJbWVtc2V0KG10b2QobSwgY2FkZHJfdCkgKyBjaHVua19s
ZW4sIDAsIHBhZGRpbmdfbGVuKTsKKwkJCWNodW5rX2xlbiArPSBwYWRkaW5nX2xlbjsKKwkJCXBh
ZGRpbmdfbGVuID0gMDsKKwkJfQorCQkvKiBhZGQgSE1BQ19BTEdPIHBhcmFtZXRlciAqLworCQlo
bWFjcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2htYWNfYWxnbyAqKShtdG9kKG0sIGNhZGRyX3QpICsg
Y2h1bmtfbGVuKTsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZfdClzaXplb2Yoc3RydWN0IHNj
dHBfYXV0aF9obWFjX2FsZ28pICsKKwkJICAgICAgICAgICAgICAgIHNjdHBfc2VyaWFsaXplX2ht
YWNsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9obWFjcywKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICh1aW50OF90ICopaG1hY3MtPmhtYWNfaWRzKTsKKwkJaG1hY3Mt
PnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX0hNQUNfTElTVCk7CisJCWhtYWNzLT5waC5wYXJh
bV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVuKTsKKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJ
WkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCWNodW5rX2xlbiArPSBwYXJh
bWV0ZXJfbGVuOworCisJCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJCW1lbXNldChtdG9kKG0s
IGNhZGRyX3QpICsgY2h1bmtfbGVuLCAwLCBwYWRkaW5nX2xlbik7CisJCQljaHVua19sZW4gKz0g
cGFkZGluZ19sZW47CisJCQlwYWRkaW5nX2xlbiA9IDA7CisJCX0KKwkJLyogYWRkIENIVU5LUyBw
YXJhbWV0ZXIgKi8KKwkJY2h1bmtzID0gKHN0cnVjdCBzY3RwX2F1dGhfY2h1bmtfbGlzdCAqKSht
dG9kKG0sIGNhZGRyX3QpICsgY2h1bmtfbGVuKTsKKwkJcGFyYW1ldGVyX2xlbiA9ICh1aW50MTZf
dClzaXplb2Yoc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0KSArCisJCSAgICAgICAgICAgICAg
ICBzY3RwX3NlcmlhbGl6ZV9hdXRoX2NodW5rcyhpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVu
a3MsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3Mt
PmNodW5rX3R5cGVzKTsKKwkJY2h1bmtzLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9DSFVO
S19MSVNUKTsKKwkJY2h1bmtzLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhwYXJhbWV0ZXJfbGVu
KTsKKwkJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRl
cl9sZW47CisJCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVuOworCX0KKwlTQ1RQX0JVRl9MRU4o
bSkgPSBjaHVua19sZW47CisJbV9sYXN0ID0gbTsKKwkvKiBub3cgdGhlIGFkZHJlc3NlcyAqLwor
CS8qIFRvIG9wdGltaXplIHRoaXMgd2UgY291bGQgcHV0IHRoZSBzY29waW5nIHN0dWZmCisJICog
aW50byBhIHN0cnVjdHVyZSBhbmQgcmVtb3ZlIHRoZSBpbmRpdmlkdWFsIHVpbnQ4J3MgZnJvbQor
CSAqIHRoZSBzdGMgc3RydWN0dXJlLiBUaGVuIHdlIGNvdWxkIGp1c3Qgc2lmYSBpbiB0aGUKKwkg
KiBhZGRyZXNzIHdpdGhpbiB0aGUgc3RjLi4gYnV0IGZvciBub3cgdGhpcyBpcyBhIHF1aWNrCisJ
ICogaGFjayB0byBnZXQgdGhlIGFkZHJlc3Mgc3R1ZmYgdGVhc2VkIGFwYXJ0LgorCSAqLworCXNj
cC5pcHY0X2FkZHJfbGVnYWwgPSBzdGMuaXB2NF9hZGRyX2xlZ2FsOworCXNjcC5pcHY2X2FkZHJf
bGVnYWwgPSBzdGMuaXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwlzY3AuY29ubl9hZGRyX2xlZ2FsID0gc3RjLmNvbm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXNj
cC5sb29wYmFja19zY29wZSA9IHN0Yy5sb29wYmFja19zY29wZTsKKwlzY3AuaXB2NF9sb2NhbF9z
Y29wZSA9IHN0Yy5pcHY0X3Njb3BlOworCXNjcC5sb2NhbF9zY29wZSA9IHN0Yy5sb2NhbF9zY29w
ZTsKKwlzY3Auc2l0ZV9zY29wZSA9IHN0Yy5zaXRlX3Njb3BlOworCW1fbGFzdCA9IHNjdHBfYWRk
X2FkZHJlc3Nlc190b19pX2lhKGlucCwgc3RjYiwgJnNjcCwgbV9sYXN0LAorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNudF9pbml0c190bywKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAmcGFkZGluZ19sZW4sICZjaHVua19sZW4pOworCS8qIHBhZGRp
bmdfbGVuIGNhbiBvbmx5IGJlIHBvc2l0aXZlLCBpZiBubyBhZGRyZXNzZXMgaGF2ZSBiZWVuIGFk
ZGVkICovCisJaWYgKHBhZGRpbmdfbGVuID4gMCkgeworCQltZW1zZXQobXRvZChtLCBjYWRkcl90
KSArIGNodW5rX2xlbiwgMCwgcGFkZGluZ19sZW4pOworCQljaHVua19sZW4gKz0gcGFkZGluZ19s
ZW47CisJCVNDVFBfQlVGX0xFTihtKSArPSBwYWRkaW5nX2xlbjsKKwkJcGFkZGluZ19sZW4gPSAw
OworCX0KKworCS8qIHRhY2sgb24gdGhlIG9wZXJhdGlvbmFsIGVycm9yIGlmIHByZXNlbnQgKi8K
KwlpZiAob3BfZXJyKSB7CisJCXBhcmFtZXRlcl9sZW4gPSAwOworCQlmb3IgKG1fdG1wID0gb3Bf
ZXJyOyBtX3RtcCAhPSBOVUxMOyBtX3RtcCA9IFNDVFBfQlVGX05FWFQobV90bXApKSB7CisJCQlw
YXJhbWV0ZXJfbGVuICs9IFNDVFBfQlVGX0xFTihtX3RtcCk7CisJCX0KKwkJcGFkZGluZ19sZW4g
PSBTQ1RQX1NJWkUzMihwYXJhbWV0ZXJfbGVuKSAtIHBhcmFtZXRlcl9sZW47CisJCVNDVFBfQlVG
X05FWFQobV9sYXN0KSA9IG9wX2VycjsKKwkJd2hpbGUgKFNDVFBfQlVGX05FWFQobV9sYXN0KSAh
PSBOVUxMKSB7CisJCQltX2xhc3QgPSBTQ1RQX0JVRl9ORVhUKG1fbGFzdCk7CisJCX0KKwkJY2h1
bmtfbGVuICs9IHBhcmFtZXRlcl9sZW47CisJfQorCWlmIChwYWRkaW5nX2xlbiA+IDApIHsKKwkJ
bV9sYXN0ID0gc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKTsKKwkJaWYg
KG1fbGFzdCA9PSBOVUxMKSB7CisJCQkvKiBIb3VzdG9uIHdlIGhhdmUgYSBwcm9ibGVtLCBubyBz
cGFjZSAqLworCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuOworCQl9CisJCWNodW5rX2xl
biArPSBwYWRkaW5nX2xlbjsKKwkJcGFkZGluZ19sZW4gPSAwOworCX0KKwkvKiBOb3cgd2UgbXVz
dCBidWlsZCBhIGNvb2tpZSAqLworCW1fY29va2llID0gc2N0cF9hZGRfY29va2llKGluaXRfcGt0
LCBvZmZzZXQsIG0sIDAsICZzdGMsICZzaWduYXR1cmUpOworCWlmIChtX2Nvb2tpZSA9PSBOVUxM
KSB7CisJCS8qIG1lbW9yeSBwcm9ibGVtICovCisJCXNjdHBfbV9mcmVlbShtKTsKKwkJcmV0dXJu
OworCX0KKwkvKiBOb3cgYXBwZW5kIHRoZSBjb29raWUgdG8gdGhlIGVuZCBhbmQgdXBkYXRlIHRo
ZSBzcGFjZS9zaXplICovCisJU0NUUF9CVUZfTkVYVChtX2xhc3QpID0gbV9jb29raWU7CisJcGFy
YW1ldGVyX2xlbiA9IDA7CisJZm9yIChtX3RtcCA9IG1fY29va2llOyBtX3RtcCAhPSBOVUxMOyBt
X3RtcCA9IFNDVFBfQlVGX05FWFQobV90bXApKSB7CisJCXBhcmFtZXRlcl9sZW4gKz0gU0NUUF9C
VUZfTEVOKG1fdG1wKTsKKwkJaWYgKFNDVFBfQlVGX05FWFQobV90bXApID09IE5VTEwpIHsKKwkJ
CW1fbGFzdCA9IG1fdG1wOworCQl9CisJfQorCXBhZGRpbmdfbGVuID0gU0NUUF9TSVpFMzIocGFy
YW1ldGVyX2xlbikgLSBwYXJhbWV0ZXJfbGVuOworCWNodW5rX2xlbiArPSBwYXJhbWV0ZXJfbGVu
OworCisJLyogUGxhY2UgaW4gdGhlIHNpemUsIGJ1dCB3ZSBkb24ndCBpbmNsdWRlCisJICogdGhl
IGxhc3QgcGFkIChpZiBhbnkpIGluIHRoZSBJTklULUFDSy4KKwkgKi8KKwlpbml0YWNrLT5jaC5j
aHVua19sZW5ndGggPSBodG9ucyhjaHVua19sZW4pOworCisJLyogVGltZSB0byBzaWduIHRoZSBj
b29raWUsIHdlIGRvbid0IHNpZ24gb3ZlciB0aGUgY29va2llCisJICogc2lnbmF0dXJlIHRob3Vn
aCB0aHVzIHdlIHNldCB0cmFpbGVyLgorCSAqLworCSh2b2lkKXNjdHBfaG1hY19tKFNDVFBfSE1B
QywKKwkJCSAgKHVpbnQ4X3QgKilpbnAtPnNjdHBfZXAuc2VjcmV0X2tleVsoaW50KShpbnAtPnNj
dHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyKV0sCisJCQkgIFNDVFBfU0VDUkVUX1NJWkUsIG1f
Y29va2llLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpLAorCQkJICAodWludDhfdCAqKXNp
Z25hdHVyZSwgU0NUUF9TSUdOQVRVUkVfU0laRSk7CisJLyoKKwkgKiBXZSBzaWZhIDAgaGVyZSB0
byBOT1Qgc2V0IElQX0RGIGlmIGl0cyBJUHY0LCB3ZSBpZ25vcmUgdGhlIHJldHVybgorCSAqIGhl
cmUgc2luY2UgdGhlIHRpbWVyIHdpbGwgZHJpdmUgYSByZXRyYW5taXNzaW9uLgorCSAqLworCWlm
IChwYWRkaW5nX2xlbiA+IDApIHsKKwkJaWYgKHNjdHBfYWRkX3BhZF90b21idWYobV9sYXN0LCBw
YWRkaW5nX2xlbikgPT0gTlVMTCkgeworCQkJc2N0cF9tX2ZyZWVtKG0pOworCQkJcmV0dXJuOwor
CQl9CisJfQorCWlmIChzdGMubG9vcGJhY2tfc2NvcGUpIHsKKwkJb3Zlcl9hZGRyID0gKHVuaW9u
IHNjdHBfc29ja3N0b3JlICopZHN0OworCX0gZWxzZSB7CisJCW92ZXJfYWRkciA9IE5VTEw7CisJ
fQorCisJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0cHV0KGlucCwgTlVMTCwg
TlVMTCwgdG8sIG0sIDAsIE5VTEwsIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlucC0+c2N0cF9scG9ydCwgc2gtPnNyY19wb3J0LCBpbml0X2Noay0+aW5pdC5pbml0aWF0
ZV90YWcsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnQsIG92
ZXJfYWRkciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsCisjZW5kaWYKKwkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKSkpIHsK
KwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDQsICJHYWsgc2VuZCBlcnJvciAlZFxuIiwgZXJy
b3IpOworCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJaWYgKGFzb2MgIT0gTlVMTCkgewor
CQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCX0KKwkJCVNDVFBfU1RBVF9JTkNSKHNj
dHBzX2xvd2xldmVsZXJyKTsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChhc29jICE9IE5VTEwpIHsK
KwkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKKwkJfQorCX0KKwlTQ1RQX1NUQVRfSU5DUl9D
T1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7Cit9CisKKworc3RhdGljIHZvaWQKK3Nj
dHBfcHJ1bmVfcHJzY3RwKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2LAorICAg
IGludCBkYXRhb3V0KQoreworCWludCBmcmVlZF9zcGMgPSAwOworCXN0cnVjdCBzY3RwX3RtaXRf
Y2h1bmsgKmNoaywgKm5jaGs7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAo
KGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQpICYmCisJICAgIChhc29jLT5zZW50X3F1ZXVlX2NudF9y
ZW1vdmVhYmxlID4gMCkpIHsKKwkJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVl
LCBzY3RwX25leHQpIHsKKwkJCS8qCisJCQkgKiBMb29rIGZvciBjaHVua3MgbWFya2VkIHdpdGgg
dGhlIFBSX1NDVFAgZmxhZyBBTkQKKwkJCSAqIHRoZSBidWZmZXIgc3BhY2UgZmxhZy4gSWYgdGhl
IG9uZSBiZWluZyBzZW50IGlzCisJCQkgKiBlcXVhbCBvciBncmVhdGVyIHByaW9yaXR5IHRoZW4g
cHVyZ2UgdGhlIG9sZCBvbmUKKwkJCSAqIGFuZCBmcmVlIHNvbWUgc3BhY2UuCisJCQkgKi8KKwkJ
CWlmIChQUl9TQ1RQX0JVRl9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJLyoKKwkJCQkgKiBU
aGlzIG9uZSBpcyBQUi1TQ1RQIEFORCBidWZmZXIgc3BhY2UKKwkJCQkgKiBsaW1pdGVkIHR5cGUK
KwkJCQkgKi8KKwkJCQlpZiAoY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYyA+PSAobG9u
ZylzcmN2LT5zaW5mb190aW1ldG9saXZlKSB7CisJCQkJCS8qCisJCQkJCSAqIExvd2VyIG51bWJl
cnMgZXF1YXRlcyB0byBoaWdoZXIKKwkJCQkJICogcHJpb3JpdHkgc28gaWYgdGhlIG9uZSB3ZSBh
cmUKKwkJCQkJICogbG9va2luZyBhdCBoYXMgYSBsYXJnZXIgb3IgZXF1YWwKKwkJCQkJICogcHJp
b3JpdHkgd2Ugd2FudCB0byBkcm9wIHRoZSBkYXRhCisJCQkJCSAqIGFuZCBOT1QgcmV0cmFuc21p
dCBpdC4KKwkJCQkJICovCisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCS8qCisJCQkJCQkg
KiBXZSByZWxlYXNlIHRoZSBib29rX3NpemUKKwkJCQkJCSAqIGlmIHRoZSBtYnVmIGlzIGhlcmUK
KwkJCQkJCSAqLworCQkJCQkJaW50IHJldF9zcGM7CisJCQkJCQl1aW50OF90IHNlbnQ7CisKKwkJ
CQkJCWlmIChjaGstPnNlbnQgPiBTQ1RQX0RBVEFHUkFNX1VOU0VOVCkKKwkJCQkJCQlzZW50ID0g
MTsKKwkJCQkJCWVsc2UKKwkJCQkJCQlzZW50ID0gMDsKKwkJCQkJCXJldF9zcGMgPSBzY3RwX3Jl
bGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLCBjaGssCisJCQkJCQkgICAgc2VudCwKKwkJCQkJCSAg
ICBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQlmcmVlZF9zcGMgKz0gcmV0X3NwYzsKKwkJCQkJCWlm
IChmcmVlZF9zcGMgPj0gZGF0YW91dCkgeworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJ
fQkvKiBpZiBjaHVuayB3YXMgcHJlc2VudCAqLworCQkJCX0JLyogaWYgb2Ygc3VmZmljaWVudCBw
cmlvcml0eSAqLworCQkJfQkvKiBpZiBjaHVuayBoYXMgZW5hYmxlZCAqLworCQl9CQkvKiB0YWls
cWZvcmVhY2ggKi8KKworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+c2VuZF9xdWV1
ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCQkvKiBIZXJlIHdlIG11c3QgbW92ZSB0byB0aGUgc2Vu
dCBxdWV1ZSBhbmQgbWFyayAqLworCQkJaWYgKFBSX1NDVFBfQlVGX0VOQUJMRUQoY2hrLT5mbGFn
cykpIHsKKwkJCQlpZiAoY2hrLT5yZWMuZGF0YS50aW1ldG9kcm9wLnR2X3NlYyA+PSAobG9uZylz
cmN2LT5zaW5mb190aW1ldG9saXZlKSB7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCS8q
CisJCQkJCQkgKiBXZSByZWxlYXNlIHRoZSBib29rX3NpemUKKwkJCQkJCSAqIGlmIHRoZSBtYnVm
IGlzIGhlcmUKKwkJCQkJCSAqLworCQkJCQkJaW50IHJldF9zcGM7CisKKwkJCQkJCXJldF9zcGMg
PSBzY3RwX3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdGNiLCBjaGssCisJCQkJCQkgICAgMCwgU0NU
UF9TT19MT0NLRUQpOworCisJCQkJCQlmcmVlZF9zcGMgKz0gcmV0X3NwYzsKKwkJCQkJCWlmIChm
cmVlZF9zcGMgPj0gZGF0YW91dCkgeworCQkJCQkJCXJldHVybjsKKwkJCQkJCX0KKwkJCQkJfQkv
KiBlbmQgaWYgY2hrLT5kYXRhICovCisJCQkJfQkvKiBlbmQgaWYgcmlnaHQgY2xhc3MgKi8KKwkJ
CX0JLyogZW5kIGlmIGNoayBwci1zY3RwICovCisJCX0JCS8qIHRhaWxxZm9yZWFjaHNhZmUgKGNo
aykgKi8KKwl9CQkJLyogaWYgZW5hYmxlZCBpbiBhc29jICovCit9CisKK2ludAorc2N0cF9nZXRf
ZnJhZ19wb2ludChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfYXNzb2Np
YXRpb24gKmFzb2MpCit7CisJaW50IHNpeiwgb3ZoOworCisJLyoKKwkgKiBGb3IgZW5kcG9pbnRz
IHRoYXQgaGF2ZSBib3RoIHY2IGFuZCB2NCBhZGRyZXNzZXMgd2UgbXVzdCByZXNlcnZlCisJICog
cm9vbSBmb3IgdGhlIGlwdjYgaGVhZGVyLCBmb3IgdGhvc2UgdGhhdCBhcmUgb25seSBkZWFsaW5n
IHdpdGggVjQKKwkgKiB3ZSB1c2UgYSBsYXJnZXIgZnJhZyBwb2ludC4KKwkgKi8KKwlpZiAoc3Rj
Yi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCW92
aCA9IFNDVFBfTUlOX09WRVJIRUFEOworCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JP
VU5EX0NPTk4pIHsKKwkJCW92aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCX0gZWxzZSB7
CisJCQlvdmggPSBTQ1RQX01JTl9WNF9PVkVSSEVBRDsKKwkJfQorI2Vsc2UKKwkJb3ZoID0gU0NU
UF9NSU5fVjRfT1ZFUkhFQUQ7CisjZW5kaWYKKwl9CisJb3ZoICs9IFNDVFBfREFUQV9DSFVOS19P
VkVSSEVBRChzdGNiKTsKKwlpZiAoc3RjYi0+YXNvYy5zY3RwX2ZyYWdfcG9pbnQgPiBhc29jLT5z
bWFsbGVzdF9tdHUpCisJCXNpeiA9IGFzb2MtPnNtYWxsZXN0X210dSAtIG92aDsKKwllbHNlCisJ
CXNpeiA9IChzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCAtIG92aCk7CisJLyoKKwkgKiBpZiAo
c2l6ID4gKE1DTEJZVEVTLXNpemVvZihzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rKSkpIHsKKwkgKi8K
KwkvKiBBIGRhdGEgY2h1bmsgTVVTVCBmaXQgaW4gYSBjbHVzdGVyICovCisJLyogc2l6ID0gKE1D
TEJZVEVTIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspKTsgKi8KKwkvKiB9ICovCisK
KwkvKiBhZGp1c3QgZm9yIGFuIEFVVEggY2h1bmsgaWYgREFUQSByZXF1aXJlcyBhdXRoICovCisJ
aWYgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVl
cl9hdXRoX2NodW5rcykpCisJCXNpeiAtPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5h
c29jLnBlZXJfaG1hY19pZCk7CisKKwlpZiAoc2l6ICUgNCkgeworCQkvKiBtYWtlIGl0IGFuIGV2
ZW4gd29yZCBib3VuZGFyeSBwbGVhc2UgKi8KKwkJc2l6IC09IChzaXogJSA0KTsKKwl9CisJcmV0
dXJuIChzaXopOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzdHJ1
Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3ApCit7CisJLyoKKwkgKiBXZSBhc3N1bWUg
dGhhdCB0aGUgdXNlciB3YW50cyBQUl9TQ1RQX1RUTCBpZiB0aGUgdXNlcgorCSAqIHByb3ZpZGVz
IGEgcG9zaXRpdmUgbGlmZXRpbWUgYnV0IGRvZXMgbm90IHNwZWNpZnkgYW55CisJICogUFJfU0NU
UCBwb2xpY3kuCisJICovCisJaWYgKFBSX1NDVFBfRU5BQkxFRChzcC0+c2luZm9fZmxhZ3MpKSB7
CisJCXNwLT5hY3RfZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koc3AtPnNpbmZvX2ZsYWdzKTsKKwl9
IGVsc2UgaWYgKHNwLT50aW1ldG9saXZlID4gMCkgeworCQlzcC0+c2luZm9fZmxhZ3MgfD0gU0NU
UF9QUl9TQ1RQX1RUTDsKKwkJc3AtPmFjdF9mbGFncyB8PSBQUl9TQ1RQX1BPTElDWShzcC0+c2lu
Zm9fZmxhZ3MpOworCX0gZWxzZSB7CisJCXJldHVybjsKKwl9CisJc3dpdGNoIChQUl9TQ1RQX1BP
TElDWShzcC0+c2luZm9fZmxhZ3MpKSB7CisJY2FzZSBDSFVOS19GTEFHU19QUl9TQ1RQX0JVRjoK
KwkJLyoKKwkJICogVGltZSB0byBsaXZlIGlzIGEgcHJpb3JpdHkgc3RvcmVkIGluIHR2X3NlYyB3
aGVuCisJCSAqIGRvaW5nIHRoZSBidWZmZXIgZHJvcCB0aGluZy4KKwkJICovCisJCXNwLT50cy50
dl9zZWMgPSBzcC0+dGltZXRvbGl2ZTsKKwkJc3AtPnRzLnR2X3VzZWMgPSAwOworCQlicmVhazsK
KwljYXNlIENIVU5LX0ZMQUdTX1BSX1NDVFBfVFRMOgorCXsKKwkJc3RydWN0IHRpbWV2YWwgdHY7
CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOworCQl0di50dl9zZWMgPSBz
cC0+dGltZXRvbGl2ZSAvIDEwMDA7CisJCXR2LnR2X3VzZWMgPSAoc3AtPnRpbWV0b2xpdmUgKiAx
MDAwKSAlIDEwMDAwMDA7CisJCS8qIFRPRE8gc2N0cF9jb25zdGFudHMuaCBuZWVkcyBhbHRlcm5h
dGl2ZSB0aW1lIG1hY3JvcyB3aGVuCisJCSAqICBfS0VSTkVMIGlzIHVuZGVmaW5lZC4KKwkJICov
CisjaWZuZGVmIF9fRnJlZUJTRF9fCisJCXRpbWVyYWRkKCZzcC0+dHMsICZ0diwgJnNwLT50cyk7
CisjZWxzZQorCQl0aW1ldmFsYWRkKCZzcC0+dHMsICZ0dik7CisjZW5kaWYKKwl9CisJCWJyZWFr
OworCWNhc2UgQ0hVTktfRkxBR1NfUFJfU0NUUF9SVFg6CisJCS8qCisJCSAqIFRpbWUgdG8gbGl2
ZSBpcyBhIHRoZSBudW1iZXIgb3IgcmV0cmFuc21pc3Npb25zCisJCSAqIHN0b3JlZCBpbiB0dl9z
ZWMuCisJCSAqLworCQlzcC0+dHMudHZfc2VjID0gc3AtPnRpbWV0b2xpdmU7CisJCXNwLT50cy50
dl91c2VjID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UlJFUTEsCisJCQkiVW5rbm93biBQUl9TQ1RQIHBvbGljeSAldS5cbiIsCisJCQlQUl9TQ1RQX1BP
TElDWShzcC0+c2luZm9fZmxhZ3MpKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50Citz
Y3RwX21zZ19hcHBlbmQoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQsCisJCXN0cnVjdCBtYnVmICptLAorCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2
LCBpbnQgaG9sZF9zdGNiX2xvY2spCit7CisJaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgbWJ1ZiAq
YXQ7CisJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwID0gTlVMTDsKKwlzdHJ1
Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtOworCisJLyogR2l2ZW4gYW4gbWJ1ZiBjaGFpbiwgcHV0
IGl0CisJICogaW50byB0aGUgYXNzb2NpYXRpb24gc2VuZCBxdWV1ZSBhbmQKKwkgKiBwbGFjZSBp
dCBvbiB0aGUgd2hlZWwKKwkgKi8KKwlpZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IHN0Y2ItPmFz
b2Muc3RyZWFtb3V0Y250KSB7CisJCS8qIEludmFsaWQgc3RyZWFtIG51bWJlciAqLworCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUX1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJ
aWYgKChzdGNiLT5hc29jLnN0cmVhbV9sb2NrZWQpICYmCisJICAgIChzdGNiLT5hc29jLnN0cmVh
bV9sb2NrZWRfb24gIT0gc3Jjdi0+c2luZm9fc3RyZWFtKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUX1BLVChtLCBOVUxMLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFM
KTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJc3RybSA9ICZzdGNi
LT5hc29jLnN0cm1vdXRbc3Jjdi0+c2luZm9fc3RyZWFtXTsKKwkvKiBOb3cgY2FuIHdlIHNlbmQg
dGhpcz8gKi8KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRF
X1NIVVRET1dOX1NFTlQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKCZz
dGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAoc3Rj
Yi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJLyogZ290
IGRhdGEgd2hpbGUgc2h1dHRpbmcgZG93biAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7CisJCWVycm9y
ID0gRUNPTk5SRVNFVDsKKwkJZ290byBvdXRfbm93OworCX0KKwlzY3RwX2FsbG9jX2Ffc3RybW9x
KHN0Y2IsIHNwKTsKKwlpZiAoc3AgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5V
TEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJZXJyb3Ig
PSBFTk9NRU07CisJCWdvdG8gb3V0X25vdzsKKwl9CisJc3AtPnNpbmZvX2ZsYWdzID0gc3Jjdi0+
c2luZm9fZmxhZ3M7CisJc3AtPnRpbWV0b2xpdmUgPSBzcmN2LT5zaW5mb190aW1ldG9saXZlOwor
CXNwLT5wcGlkID0gc3Jjdi0+c2luZm9fcHBpZDsKKwlzcC0+Y29udGV4dCA9IHNyY3YtPnNpbmZv
X2NvbnRleHQ7CisJc3AtPmZzbiA9IDA7CisJaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfQURE
Ul9PVkVSKSB7CisJCXNwLT5uZXQgPSBuZXQ7CisJCWF0b21pY19hZGRfaW50KCZzcC0+bmV0LT5y
ZWZfY291bnQsIDEpOworCX0gZWxzZSB7CisJCXNwLT5uZXQgPSBOVUxMOworCX0KKwkodm9pZClT
Q1RQX0dFVFRJTUVfVElNRVZBTCgmc3AtPnRzKTsKKwlzcC0+c2lkID0gc3Jjdi0+c2luZm9fc3Ry
ZWFtOworCXNwLT5tc2dfaXNfY29tcGxldGUgPSAxOworCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAx
OworCXNwLT5zb21lX3Rha2VuID0gMDsKKwlzcC0+ZGF0YSA9IG07CisJc3AtPnRhaWxfbWJ1ZiA9
IE5VTEw7CisJc2N0cF9zZXRfcHJzY3RwX3BvbGljeShzcCk7CisJLyogV2UgY291bGQgaW4gdGhl
b3J5IChmb3Igc2VuZGFsbCkgc2lmYSB0aGUgbGVuZ3RoCisJICogaW4sIGJ1dCB3ZSB3b3VsZCBz
dGlsbCBoYXZlIHRvIGh1bnQgdGhyb3VnaCB0aGUKKwkgKiBjaGFpbiBzaW5jZSB3ZSBuZWVkIHRv
IHNldHVwIHRoZSB0YWlsX21idWYKKwkgKi8KKwlzcC0+bGVuZ3RoID0gMDsKKwlmb3IgKGF0ID0g
bTsgYXQ7IGF0ID0gU0NUUF9CVUZfTkVYVChhdCkpIHsKKwkJaWYgKFNDVFBfQlVGX05FWFQoYXQp
ID09IE5VTEwpCisJCQlzcC0+dGFpbF9tYnVmID0gYXQ7CisJCXNwLT5sZW5ndGggKz0gU0NUUF9C
VUZfTEVOKGF0KTsKKwl9CisJaWYgKHNyY3YtPnNpbmZvX2tleW51bWJlcl92YWxpZCkgeworCQlz
cC0+YXV0aF9rZXlpZCA9IHNyY3YtPnNpbmZvX2tleW51bWJlcjsKKwl9IGVsc2UgeworCQlzcC0+
YXV0aF9rZXlpZCA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworCX0KKwlpZiAo
c2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfREFUQSwgc3RjYi0+YXNvYy5wZWVyX2F1
dGhfY2h1bmtzKSkgeworCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwgc3AtPmF1dGhfa2V5
aWQpOworCQlzcC0+aG9sZHNfa2V5X3JlZiA9IDE7CisJfQorCWlmIChob2xkX3N0Y2JfbG9jayA9
PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJc2N0cF9zbmRfc2JfYWxs
b2Moc3RjYiwgc3AtPmxlbmd0aCk7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Muc3RyZWFt
X3F1ZXVlX2NudCwgMSk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVlLCBzcCwg
bmV4dCk7CisJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19hZGRfdG9fc3RyZWFtKHN0
Y2IsICZzdGNiLT5hc29jLCBzdHJtLCBzcCwgMSk7CisJbSA9IE5VTEw7CisJaWYgKGhvbGRfc3Rj
Yl9sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorb3V0X25v
dzoKKwlpZiAobSkgeworCQlzY3RwX21fZnJlZW0obSk7CisJfQorCXJldHVybiAoZXJyb3IpOwor
fQorCisKK3N0YXRpYyBzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2NvcHlfbWJ1ZmNoYWluKHN0cnVjdCBt
YnVmICpjbG9uZWNoYWluLAorCQkgICAgc3RydWN0IG1idWYgKm91dGNoYWluLAorCQkgICAgc3Ry
dWN0IG1idWYgKiplbmRvZmNoYWluLAorCQkgICAgaW50IGNhbl90YWtlX21idWYsCisJCSAgICBp
bnQgc2l6ZW9mY3B5LAorCQkgICAgdWludDhfdCBjb3B5X2J5X3JlZikKK3sKKwlzdHJ1Y3QgbWJ1
ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqYXBwZW5kY2hhaW47CisJY2FkZHJfdCBjcDsKKwlpbnQgbGVu
OworCisJaWYgKGVuZG9mY2hhaW4gPT0gTlVMTCkgeworCQkvKiBlcnJvciAqLworCWVycm9yX291
dDoKKwkJaWYgKG91dGNoYWluKQorCQkJc2N0cF9tX2ZyZWVtKG91dGNoYWluKTsKKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisJaWYgKGNhbl90YWtlX21idWYpIHsKKwkJYXBwZW5kY2hhaW4gPSBjbG9u
ZWNoYWluOworCX0gZWxzZSB7CisJCWlmICghY29weV9ieV9yZWYgJiYKKyNpZiBkZWZpbmVkKF9f
UGFuZGFfXykKKwkJICAgIDAKKyNlbHNlCisJCSAgICAoc2l6ZW9mY3B5IDw9IChpbnQpKCgoKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkgLSAxKSAqIE1MRU4pICsg
TUhMRU4pKSkKKyNlbmRpZgorCQkgICAgKSB7CisJCQkvKiBJdHMgbm90IGluIGEgY2x1c3RlciAq
LworCQkJaWYgKCplbmRvZmNoYWluID09IE5VTEwpIHsKKwkJCQkvKiBsZXRzIGdldCBhIG1idWYg
Y2x1c3RlciAqLworCQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7CisJCQkJCS8qIFRoaXMgaXMg
dGhlIGdlbmVyYWwgY2FzZSAqLworCQkJCW5ld19tYnVmOgorCQkJCQlvdXRjaGFpbiA9IHNjdHBf
Z2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJ
CQkJCWlmIChvdXRjaGFpbiA9PSBOVUxMKSB7CisJCQkJCQlnb3RvIGVycm9yX291dDsKKwkJCQkJ
fQorCQkJCQlTQ1RQX0JVRl9MRU4ob3V0Y2hhaW4pID0gMDsKKwkJCQkJKmVuZG9mY2hhaW4gPSBv
dXRjaGFpbjsKKwkJCQkJLyogZ2V0IHRoZSBwcmVwZW5kIHNwYWNlICovCisJCQkJCVNDVFBfQlVG
X1JFU1ZfVUYob3V0Y2hhaW4sIChTQ1RQX0ZJUlNUX01CVUZfUkVTVis0KSk7CisJCQkJfSBlbHNl
IHsKKwkJCQkJLyogV2UgcmVhbGx5IHNob3VsZCBub3QgZ2V0IGEgTlVMTCBpbiBlbmRvZmNoYWlu
ICovCisJCQkJCS8qIGZpbmQgZW5kICovCisJCQkJCW0gPSBvdXRjaGFpbjsKKwkJCQkJd2hpbGUg
KG0pIHsKKwkJCQkJCWlmIChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKKwkJCQkJCQkqZW5k
b2ZjaGFpbiA9IG07CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQltID0gU0NUUF9CVUZf
TkVYVChtKTsKKwkJCQkJfQorCQkJCQkvKiBzYW5pdHkgKi8KKwkJCQkJaWYgKCplbmRvZmNoYWlu
ID09IE5VTEwpIHsKKwkJCQkJCS8qIGh1aCwgVFNOSCBYWFggbWF5YmUgd2Ugc2hvdWxkIHBhbmlj
ICovCisJCQkJCQlzY3RwX21fZnJlZW0ob3V0Y2hhaW4pOworCQkJCQkJZ290byBuZXdfbWJ1ZjsK
KwkJCQkJfQorCQkJCX0KKwkJCQkvKiBnZXQgdGhlIG5ldyBlbmQgb2YgbGVuZ3RoICovCisJCQkJ
bGVuID0gKGludClNX1RSQUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOworCQkJfSBlbHNlIHsKKwkJ
CQkvKiBob3cgbXVjaCBpcyBsZWZ0IGF0IHRoZSBlbmQ/ICovCisJCQkJbGVuID0gKGludClNX1RS
QUlMSU5HU1BBQ0UoKmVuZG9mY2hhaW4pOworCQkJfQorCQkJLyogRmluZCB0aGUgZW5kIG9mIHRo
ZSBkYXRhLCBmb3IgYXBwZW5kaW5nICovCisJCQljcCA9IChtdG9kKCgqZW5kb2ZjaGFpbiksIGNh
ZGRyX3QpICsgU0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpKTsKKworCQkJLyogTm93IGxldHMg
Y29weSBpdCBvdXQgKi8KKwkJCWlmIChsZW4gPj0gc2l6ZW9mY3B5KSB7CisJCQkJLyogSXQgYWxs
IGZpdHMsIGNvcHkgaXQgaW4gKi8KKwkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIHNpemVv
ZmNweSwgY3ApOworCQkJCVNDVFBfQlVGX0xFTigoKmVuZG9mY2hhaW4pKSArPSBzaXplb2ZjcHk7
CisJCQl9IGVsc2UgeworCQkJCS8qIGZpbGwgdXAgdGhlIGVuZCBvZiB0aGUgY2hhaW4gKi8KKwkJ
CQlpZiAobGVuID4gMCkgeworCQkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIDAsIGxlbiwgY3Ap
OworCQkJCQlTQ1RQX0JVRl9MRU4oKCplbmRvZmNoYWluKSkgKz0gbGVuOworCQkJCQkvKiBub3cg
d2UgbmVlZCBhbm90aGVyIG9uZSAqLworCQkJCQlzaXplb2ZjcHkgLT0gbGVuOworCQkJCX0KKwkJ
CQltID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKE1DTEJZVEVTLCAwLCBNX05PV0FJVCwgMSwgTVRf
SEVBREVSKTsKKwkJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJCS8qIFdlIGZhaWxlZCAqLworCQkJ
CQlnb3RvIGVycm9yX291dDsKKwkJCQl9CisJCQkJU0NUUF9CVUZfTkVYVCgoKmVuZG9mY2hhaW4p
KSA9IG07CisJCQkJKmVuZG9mY2hhaW4gPSBtOworCQkJCWNwID0gbXRvZCgoKmVuZG9mY2hhaW4p
LCBjYWRkcl90KTsKKwkJCQltX2NvcHlkYXRhKGNsb25lY2hhaW4sIGxlbiwgc2l6ZW9mY3B5LCBj
cCk7CisJCQkJU0NUUF9CVUZfTEVOKCgqZW5kb2ZjaGFpbikpICs9IHNpemVvZmNweTsKKwkJCX0K
KwkJCXJldHVybiAob3V0Y2hhaW4pOworCQl9IGVsc2UgeworCQkJLyogY29weSB0aGUgb2xkIGZh
c2hpb24gd2F5ICovCisJCQlhcHBlbmRjaGFpbiA9IFNDVFBfTV9DT1BZTShjbG9uZWNoYWluLCAw
LCBNX0NPUFlBTEwsIE1fTk9XQUlUKTsKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lORworCQkJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5H
X0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX21iYyhhcHBlbmRjaGFpbiwgU0NUUF9NQlVGX0lDT1BZ
KTsKKwkJCX0KKyNlbmRpZgorCQl9CisJfQorCWlmIChhcHBlbmRjaGFpbiA9PSBOVUxMKSB7CisJ
CS8qIGVycm9yICovCisJCWlmIChvdXRjaGFpbikKKwkJCXNjdHBfbV9mcmVlbShvdXRjaGFpbik7
CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChvdXRjaGFpbikgeworCQkvKiB0YWNrIG9uIHRv
IHRoZSBlbmQgKi8KKwkJaWYgKCplbmRvZmNoYWluICE9IE5VTEwpIHsKKwkJCVNDVFBfQlVGX05F
WFQoKCgqZW5kb2ZjaGFpbikpKSA9IGFwcGVuZGNoYWluOworCQl9IGVsc2UgeworCQkJbSA9IG91
dGNoYWluOworCQkJd2hpbGUgKG0pIHsKKwkJCQlpZiAoU0NUUF9CVUZfTkVYVChtKSA9PSBOVUxM
KSB7CisJCQkJCVNDVFBfQlVGX05FWFQobSkgPSBhcHBlbmRjaGFpbjsKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQkJfQorCQl9CisJCS8qCisJCSAqIHNh
dmUgb2ZmIHRoZSBlbmQgYW5kIHVwZGF0ZSB0aGUgZW5kLWNoYWluCisJCSAqIHBvc2l0aW9uCisJ
CSAqLworCQltID0gYXBwZW5kY2hhaW47CisJCXdoaWxlIChtKSB7CisJCQlpZiAoU0NUUF9CVUZf
TkVYVChtKSA9PSBOVUxMKSB7CisJCQkJKmVuZG9mY2hhaW4gPSBtOworCQkJCWJyZWFrOworCQkJ
fQorCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJCX0KKwkJcmV0dXJuIChvdXRjaGFpbik7CisJ
fSBlbHNlIHsKKwkJLyogc2F2ZSBvZmYgdGhlIGVuZCBhbmQgdXBkYXRlIHRoZSBlbmQtY2hhaW4g
cG9zaXRpb24gKi8KKwkJbSA9IGFwcGVuZGNoYWluOworCQl3aGlsZSAobSkgeworCQkJaWYgKFND
VFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkJCSplbmRvZmNoYWluID0gbTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCXJldHVybiAoYXBwZW5k
Y2hhaW4pOworCX0KK30KKworc3RhdGljIGludAorc2N0cF9tZWRfY2h1bmtfb3V0cHV0KHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCisJCSAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkJICAg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSAgICAgIGludCAqbnVtX291dCwK
KwkJICAgICAgaW50ICpyZWFzb25fY29kZSwKKwkJICAgICAgaW50IGNvbnRyb2xfb25seSwgaW50
IGZyb21fd2hlcmUsCisJCSAgICAgIHN0cnVjdCB0aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxl
ZCwgaW50IGZyYWdfcG9pbnQsIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkgICAgICBTQ1RQX1VOVVNFRAor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgKTsKKworc3RhdGljIHZvaWQKK3NjdHBfc2Vu
ZGFsbF9pdGVyYXRvcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHZvaWQgKnB0ciwKKyAgICB1aW50MzJfdCB2YWwgU0NUUF9VTlVTRUQpCit7CisJc3RydWN0
IHNjdHBfY29weV9hbGwgKmNhOworCXN0cnVjdCBtYnVmICptOworCWludCByZXQgPSAwOworCWlu
dCBhZGRlZF9jb250cm9sID0gMDsKKwlpbnQgdW5fc2VudCwgZG9fY2h1bmtfb3V0cHV0ID0gMTsK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisKKwljYSA9IChzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqKXB0cjsKKwlpZiAoY2EtPm0gPT0gTlVM
TCkgeworCQlyZXR1cm47CisJfQorCWlmIChjYS0+aW5wICE9IGlucCkgeworCQkvKiBUU05IICov
CisJCXJldHVybjsKKwl9CisJaWYgKGNhLT5zbmRsZW4gPiAwKSB7CisJCW0gPSBTQ1RQX01fQ09Q
WU0oY2EtPm0sIDAsIE1fQ09QWUFMTCwgTV9OT1dBSVQpOworCQlpZiAobSA9PSBOVUxMKSB7CisJ
CQkvKiBjYW4ndCBjb3B5IHNvIHdlIGFyZSBkb25lICovCisJCQljYS0+Y250X2ZhaWxlZCsrOwor
CQkJcmV0dXJuOworCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkg
eworCQkJc2N0cF9sb2dfbWJjKG0sIFNDVFBfTUJVRl9JQ09QWSk7CisJCX0KKyNlbmRpZgorCX0g
ZWxzZSB7CisJCW0gPSBOVUxMOworCX0KKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlp
ZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7
CisJfSBlbHNlIHsKKwkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOworCX0K
KwlpZiAoY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmIFNDVFBfQUJPUlQpIHsKKwkJLyogQWJvcnQg
dGhpcyBhc3NvYyB3aXRoIG0gYXMgdGhlIHVzZXIgZGVmaW5lZCByZWFzb24gKi8KKwkJaWYgKG0g
IT0gTlVMTCkgeworCQkJU0NUUF9CVUZfUFJFUEVORChtLCBzaXplb2Yoc3RydWN0IHNjdHBfcGFy
YW1oZHIpLCBNX05PV0FJVCk7CisJCX0gZWxzZSB7CisJCQltID0gc2N0cF9nZXRfbWJ1Zl9mb3Jf
bXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkciksCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJCVNDVFBfQlVGX0xFTihtKSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCX0KKwkJaWYgKG0gIT0gTlVMTCkgeworCQkJ
c3RydWN0IHNjdHBfcGFyYW1oZHIgKnBoOworCisJCQlwaCA9IG10b2QobSwgc3RydWN0IHNjdHBf
cGFyYW1oZHIgKik7CisJCQlwaC0+cGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfQ0FVU0VfVVNFUl9J
TklUSUFURURfQUJUKTsKKwkJCXBoLT5wYXJhbV9sZW5ndGggPSBodG9ucygodWludDE2X3QpKHNp
emVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikgKyBjYS0+c25kbGVuKSk7CisJCX0KKwkJLyogV2Ug
YWRkIG9uZSBoZXJlIHRvIGtlZXAgdGhlIGFzc29jIGZyb20KKwkJICogZGlzLWFwcGVhcmluZyBv
biB1cy4KKwkJICovCisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJ
CXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBtLCBTQ1RQX1NPX05PVF9MT0NL
RUQpOworCQkvKiBzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uIGNhbGxzIHNjdHBfZnJlZV9hc29j
KCkKKwkJICogZnJlZSBhc3NvY2lhdGlvbiB3aWxsIE5PVCBmcmVlIGl0IHNpbmNlIHdlCisJCSAq
IGluY3JlbWVudGVkIHRoZSByZWZjbnQgLi4gd2UgZG8gdGhpcyB0byBwcmV2ZW50CisJCSAqIGl0
IGJlaW5nIGZyZWVkIGFuZCB0aGluZ3MgZ2V0dGluZyB0cmlja3kgc2luY2UKKwkJICogd2UgY291
bGQgZW5kIHVwIChmcm9tIGZyZWVfYXNvYykgY2FsbGluZyBpbnBjYl9mcmVlCisJCSAqIHdoaWNo
IHdvdWxkIGdldCBhIHJlY3Vyc2l2ZSBsb2NrIGNhbGwgdG8gdGhlCisJCSAqIGl0ZXJhdG9yIGxv
Y2suLiBCdXQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGF0IHRoZQorCQkgKiBzdGNiIHdpbGwgcmV0
dXJuIHRvIHVzIHVuLWxvY2tlZC4uIHNpbmNlIGZyZWVfYXNvYworCQkgKiByZXR1cm5zIHdpdGgg
ZWl0aGVyIG5vIFRDQiBvciB0aGUgVENCIHVubG9ja2VkLCB3ZQorCQkgKiBtdXN0IHJlbG9jay4u
IHRvIHVubG9jayBpbiB0aGUgaXRlcmF0b3IgdGltZXIgOi0wCisJCSAqLworCQlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJ
Z290byBub19jaHVua19vdXRwdXQ7CisJfSBlbHNlIHsKKwkJaWYgKG0pIHsKKwkJCXJldCA9IHNj
dHBfbXNnX2FwcGVuZChzdGNiLCBuZXQsIG0sCisJCQkJCSAgICAgICZjYS0+c25kcmN2LCAxKTsK
KwkJfQorCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJCWlmIChjYS0+c25kcmN2LnNpbmZvX2ZsYWdz
ICYgU0NUUF9FT0YpIHsKKwkJCS8qIHNodXRkb3duIHRoaXMgYXNzb2MgKi8KKwkJCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+
c2VudF9xdWV1ZSkgJiYKKwkJCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIFND
VFBfU09fTk9UX0xPQ0tFRCkgPT0gMCkgeworCQkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5z
Y3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJCQlnb3Rv
IGFib3J0X2FueXdheTsKKwkJCQl9CisJCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8g
c2VuZCwgc28gSSdtIGRvbmUuLi4gKi8KKwkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9
IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFz
b2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpICYmCisJCQkJICAgIChTQ1RQX0dF
VF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgeworCQkJCQkv
KiBvbmx5IHNlbmQgU0hVVERPV04gdGhlIGZpcnN0IHRpbWUgdGhyb3VnaCAqLworCQkJCQlpZiAo
U0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB7CisJCQkJCQlTQ1RQX1NU
QVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJCX0KKwkJCQkJU0NUUF9TRVRf
U1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKTsKKwkJCQkJU0NUUF9DTEVBUl9T
VUJTVEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOworCQkJCQlzY3RwX3N0
b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCQkJc2N0cF9zZW5kX3NodXRkb3duKHN0
Y2IsIG5ldCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJCSBuZXQpOworCQkJCQlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJELCBzdGNiLT5zY3RwX2VwLCBzdGNiLAor
CQkJCQkJCSBhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwkJCQkJYWRkZWRfY29udHJvbCA9
IDE7CisJCQkJCWRvX2NodW5rX291dHB1dCA9IDA7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkv
KgorCQkJCSAqIHdlIHN0aWxsIGdvdCAob3IganVzdCBnb3QpIGRhdGEgdG8gc2VuZCwgc28gc2V0
CisJCQkJICogU0hVVERPV05fUEVORElORworCQkJCSAqLworCQkJCS8qCisJCQkJICogWFhYIHNv
Y2tldHMgZHJhZnQgc2F5cyB0aGF0IFNDVFBfRU9GIHNob3VsZCBiZQorCQkJCSAqIHNlbnQgd2l0
aCBubyBkYXRhLiAgY3VycmVudGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKKwkJCQkgKiBkYXRhIHRv
IGJlIHNlbnQgZmlyc3QgYW5kIG1vdmUgdG8KKwkJCQkgKiBTSFVURE9XTi1QRU5ESU5HCisJCQkJ
ICovCisJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dO
X1NFTlQpICYmCisJCQkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NI
VVRET1dOX1JFQ0VJVkVEKSAmJgorCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NU
UF9TVEFURV9TSFVURE9XTl9BQ0tfU0VOVCkpIHsKKwkJCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rp
b25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJCQkJ
CQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQ7CisJCQkJCX0KKwkJ
CQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOworCQkJCQlpZiAo
VEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCQkJCSAgICBUQUlMUV9FTVBUWSgm
YXNvYy0+c2VudF9xdWV1ZSkgJiYKKwkJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVf
UEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCQlj
aGFyIG1zZ1tTQ1RQX0RJQUdfSU5GT19MRU5dOworCisJCQkJCWFib3J0X2FueXdheToKKwkJCQkJ
CXNucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCisJCQkJCQkgICAgICAgICAiJXM6JWQgYXQgJXMi
LCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsKKwkJCQkJCW9wX2VyciA9IHNjdHBfZ2Vu
ZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnKTsKKwkJCQkJCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9u
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCQkJCQkgIG9wX2VyciwgU0NUUF9TT19OT1RfTE9D
S0VEKTsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJ
CQkJZ290byBub19jaHVua19vdXRwdXQ7CisJCQkJCX0KKwkJCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJ
CQkgYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQkJfQorCQkJfQorCisJCX0KKwl9CisJ
dW5fc2VudCA9ICgoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFz
b2MudG90YWxfZmxpZ2h0KSArCisJCSAgIChzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgKiBT
Q1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpKTsKKworCWlmICgoc2N0cF9pc19mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSAmJgorCSAgICAoc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPiAwKSAmJgorCSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21h
bGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgeworCQlkb19jaHVua19vdXRwdXQgPSAw
OworCX0KKwlpZiAoZG9fY2h1bmtfb3V0cHV0KQorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJZWxz
ZSBpZiAoYWRkZWRfY29udHJvbCkgeworCQlpbnQgbnVtX291dCwgcmVhc29uLCBub3dfZmlsbGVk
ID0gMDsKKwkJc3RydWN0IHRpbWV2YWwgbm93OworCQlpbnQgZnJhZ19wb2ludDsKKworCQlmcmFn
X3BvaW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNvYyk7CisJCSh2b2lk
KXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29jLCAmbnVtX291dCwK
KwkJCQkgICAgICAmcmVhc29uLCAxLCAxLCAmbm93LCAmbm93X2ZpbGxlZCwgZnJhZ19wb2ludCwg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwl9Cisgbm9fY2h1bmtfb3V0cHV0OgorCWlmIChyZXQpIHsK
KwkJY2EtPmNudF9mYWlsZWQrKzsKKwl9IGVsc2UgeworCQljYS0+Y250X3NlbnQrKzsKKwl9Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX3NlbmRhbGxfY29tcGxldGVzKHZvaWQgKnB0ciwgdWludDMy
X3QgdmFsIFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKKworCWNh
ID0gKHN0cnVjdCBzY3RwX2NvcHlfYWxsICopcHRyOworCS8qCisJICogRG8gYSBub3RpZnkgaGVy
ZT8gS2FjaGVvbmcgc3VnZ2VzdHMgdGhhdCB0aGUgbm90aWZ5IGJlIGRvbmUgYXQKKwkgKiB0aGUg
c2VuZCB0aW1lLi4gc28geW91IHdvdWxkIHB1c2ggdXAgYSBub3RpZmljYXRpb24gaWYgYW55IHNl
bmQKKwkgKiBmYWlsZWQuIERvbid0IGtub3cgaWYgdGhpcyBpcyBmZWFzaWJsZSBzaW5jZSB0aGUg
b25seSBmYWlsdXJlcyB3ZQorCSAqIGhhdmUgaXMgIm1lbW9yeSIgcmVsYXRlZCBhbmQgaWYgeW91
IGNhbm5vdCBnZXQgYW4gbWJ1ZiB0byBzZW5kCisJICogdGhlIGRhdGEgeW91IHN1cmVseSBjYW4n
dCBnZXQgYW4gbWJ1ZiB0byBzZW5kIHVwIHRvIG5vdGlmeSB0aGUKKwkgKiB1c2VyIHlvdSBjYW4n
dCBzZW5kIHRoZSBkYXRhIDotPgorCSAqLworCisJLyogbm93IGZyZWUgZXZlcnl0aGluZyAqLwor
CXNjdHBfbV9mcmVlbShjYS0+bSk7CisJU0NUUF9GUkVFKGNhLCBTQ1RQX01fQ09QWUFMKTsKK30K
Kworc3RhdGljIHN0cnVjdCBtYnVmICoKK3NjdHBfY29weV9vdXRfYWxsKHN0cnVjdCB1aW8gKnVp
bywgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqcmV0LCAqYXQ7CisJaW50IGxlZnQsIHdpbGxj
cHksIGNhbmNweSwgZXJyb3I7CisKKwlyZXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllU
RVMsIDAsIE1fV0FJVE9LLCAxLCBNVF9EQVRBKTsKKwlpZiAocmV0ID09IE5VTEwpIHsKKwkJLyog
VFNOSCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlsZWZ0ID0gbGVuOworCVNDVFBfQlVGX0xF
TihyZXQpID0gMDsKKwkvKiBzYXZlIHNwYWNlIGZvciB0aGUgZGF0YSBjaHVuayBoZWFkZXIgKi8K
KwljYW5jcHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShyZXQpOworCXdpbGxjcHkgPSBtaW4oY2Fu
Y3B5LCBsZWZ0KTsKKwlhdCA9IHJldDsKKwl3aGlsZSAobGVmdCA+IDApIHsKKwkJLyogQWxpZ24g
ZGF0YSB0byB0aGUgZW5kICovCisJCWVycm9yID0gdWlvbW92ZShtdG9kKGF0LCBjYWRkcl90KSwg
d2lsbGNweSwgdWlvKTsKKwkJaWYgKGVycm9yKSB7CisJZXJyX291dF9ub3c6CisJCQlzY3RwX21f
ZnJlZW0oYXQpOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlTQ1RQX0JVRl9MRU4oYXQpID0g
d2lsbGNweTsKKwkJU0NUUF9CVUZfTkVYVF9QS1QoYXQpID0gU0NUUF9CVUZfTkVYVChhdCkgPSAw
OworCQlsZWZ0IC09IHdpbGxjcHk7CisJCWlmIChsZWZ0ID4gMCkgeworCQkJU0NUUF9CVUZfTkVY
VChhdCkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVmdCwgMCwgTV9XQUlUT0ssIDEsIE1UX0RB
VEEpOworCQkJaWYgKFNDVFBfQlVGX05FWFQoYXQpID09IE5VTEwpIHsKKwkJCQlnb3RvIGVycl9v
dXRfbm93OworCQkJfQorCQkJYXQgPSBTQ1RQX0JVRl9ORVhUKGF0KTsKKwkJCVNDVFBfQlVGX0xF
TihhdCkgPSAwOworCQkJY2FuY3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UoYXQpOworCQkJd2ls
bGNweSA9IG1pbihjYW5jcHksIGxlZnQpOworCQl9CisJfQorCXJldHVybiAocmV0KTsKK30KKwor
c3RhdGljIGludAorc2N0cF9zZW5kYWxsKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCB1
aW8gKnVpbywgc3RydWN0IG1idWYgKm0sCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc3Jj
dikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzY3RwX2NvcHlfYWxsICpjYTsKKworCVNDVFBfTUFM
TE9DKGNhLCBzdHJ1Y3Qgc2N0cF9jb3B5X2FsbCAqLCBzaXplb2Yoc3RydWN0IHNjdHBfY29weV9h
bGwpLAorCQkgICAgU0NUUF9NX0NPUFlBTCk7CisJaWYgKGNhID09IE5VTEwpIHsKKwkJc2N0cF9t
X2ZyZWVtKG0pOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNl
dChjYSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2NvcHlfYWxsKSk7CisKKwljYS0+aW5wID0gaW5w
OworCWlmIChzcmN2KSB7CisJCW1lbWNweSgmY2EtPnNuZHJjdiwgc3Jjdiwgc2l6ZW9mKHN0cnVj
dCBzY3RwX25vbnBhZF9zbmRyY3ZpbmZvKSk7CisJfQorCS8qCisJICogdGFrZSBvZmYgdGhlIHNl
bmRhbGwgZmxhZywgaXQgd291bGQgYmUgYmFkIGlmIHdlIGZhaWxlZCB0byBkbworCSAqIHRoaXMg
Oi0wCisJICovCisJY2EtPnNuZHJjdi5zaW5mb19mbGFncyAmPSB+U0NUUF9TRU5EQUxMOworCS8q
IGdldCBsZW5ndGggYW5kIG1idWYgY2hhaW4gKi8KKwlpZiAodWlvKSB7CisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQljYS0+c25kbGVuID0gdWlv
LT51aW9fcmVzaWQ7CisjZWxzZQorCQljYS0+c25kbGVuID0gdWlvX3Jlc2lkKHVpbyk7CisjZW5k
aWYKKyNlbHNlCisJCWNhLT5zbmRsZW4gPSAoaW50KXVpby0+dWlvX3Jlc2lkOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisJCVNDVFBfU09DS0VUX1VOTE9DSyhTQ1RQX0lOUF9TTyhp
bnApLCAwKTsKKyNlbmRpZgorCQljYS0+bSA9IHNjdHBfY29weV9vdXRfYWxsKHVpbywgY2EtPnNu
ZGxlbik7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9J
TlBfU08oaW5wKSwgMCk7CisjZW5kaWYKKwkJaWYgKGNhLT5tID09IE5VTEwpIHsKKwkJCVNDVFBf
RlJFRShjYSwgU0NUUF9NX0NPUFlBTCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQkJcmV0dXJuIChFTk9N
RU0pOworCQl9CisJfSBlbHNlIHsKKwkJLyogR2F0aGVyIHRoZSBsZW5ndGggb2YgdGhlIHNlbmQg
Ki8KKwkJc3RydWN0IG1idWYgKm1hdDsKKworCQljYS0+c25kbGVuID0gMDsKKwkJZm9yIChtYXQg
PSBtOyBtYXQ7IG1hdCA9IFNDVFBfQlVGX05FWFQobWF0KSkgeworCQkJY2EtPnNuZGxlbiArPSBT
Q1RQX0JVRl9MRU4obWF0KTsKKwkJfQorCX0KKwlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9y
KE5VTEwsIHNjdHBfc2VuZGFsbF9pdGVyYXRvciwgTlVMTCwKKwkJCQkgICAgIFNDVFBfUENCX0FO
WV9GTEFHUywgU0NUUF9QQ0JfQU5ZX0ZFQVRVUkVTLAorCQkJCSAgICAgU0NUUF9BU09DX0FOWV9T
VEFURSwKKwkJCQkgICAgICh2b2lkICopY2EsIDAsCisJCQkJICAgICBzY3RwX3NlbmRhbGxfY29t
cGxldGVzLCBpbnAsIDEpOworCWlmIChyZXQpIHsKKwkJU0NUUF9QUklOVEYoIkZhaWxlZCB0byBp
bml0aWF0ZSBpdGVyYXRvciBmb3Igc2VuZGFsbFxuIik7CisJCVNDVFBfRlJFRShjYSwgU0NUUF9N
X0NPUFlBTCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFRkFVTFQpOworCQlyZXR1cm4gKEVGQVVMVCk7CisJfQor
CXJldHVybiAoMCk7Cit9CisKKwordm9pZAorc2N0cF90b3NzX29sZF9jb29raWVzKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0
IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGss
ICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQlpZiAoY2hr
LT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgeworCQkJVEFJTFFfUkVNT1ZF
KCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJCWFzb2MtPmN0
cmxfcXVldWVfY250LS07CisJCQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNo
ay0+ZGF0YSk7CisJCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJCXNjdHBfZnJlZV9hX2No
dW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJfQorCX0KK30KKwordm9pZAor
c2N0cF90b3NzX29sZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5j
aGs7CisJc3RydWN0IHNjdHBfYXNjb25mX2NodW5rICphY3A7CisKKwlhc29jID0gJnN0Y2ItPmFz
b2M7CisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPmFzY29uZl9zZW5kX3F1ZXVlLCBz
Y3RwX25leHQsIG5jaGspIHsKKwkJLyogZmluZCBTQ1RQX0FTQ09ORiBjaHVuayBpbiBxdWV1ZSAq
LworCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkYpIHsKKwkJCWlmIChj
aGstPmRhdGEpIHsKKwkJCQlhY3AgPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0IHNjdHBfYXNjb25m
X2NodW5rICopOworCQkJCWlmIChTQ1RQX1RTTl9HVChudG9obChhY3AtPnNlcmlhbF9udW1iZXIp
LCBhc29jLT5hc2NvbmZfc2VxX291dF9hY2tlZCkpIHsKKwkJCQkJLyogTm90IEFja2VkIHlldCAq
LworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29u
Zl9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCQlhc29jLT5jdHJsX3F1ZXVlX2NudC0t
OworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJ
CWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGss
IFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0KKwl9Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBf
Y2xlYW5fdXBfZGF0YWxpc3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKipkYXRhX2xp
c3QsCisgICAgaW50IGJ1bmRsZV9hdCwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJ
aW50IGk7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHAxOworCisJZm9yIChpID0gMDsgaSA8
IGJ1bmRsZV9hdDsgaSsrKSB7CisJCS8qIG9mZiBvZiB0aGUgc2VuZCBxdWV1ZSAqLworCQlUQUlM
UV9SRU1PVkUoJmFzb2MtPnNlbmRfcXVldWUsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKKwkJ
YXNvYy0+c2VuZF9xdWV1ZV9jbnQtLTsKKwkJaWYgKGkgPiAwKSB7CisJCQkvKgorCQkJICogQW55
IGNodW5rIE5PVCAwIHlvdSB6YXAgdGhlIHRpbWUgY2h1bmsgMCBnZXRzCisJCQkgKiB6YXBwZWQg
b3Igc2V0IGJhc2VkIG9uIGlmIGEgUlRPIG1lYXN1cm1lbnQgaXMKKwkJCSAqIG5lZWRlZC4KKwkJ
CSAqLworCQkJZGF0YV9saXN0W2ldLT5kb19ydHQgPSAwOworCQl9CisJCS8qIHJlY29yZCB0aW1l
ICovCisJCWRhdGFfbGlzdFtpXS0+c2VudF9yY3ZfdGltZSA9IG5ldC0+bGFzdF9zZW50X3RpbWU7
CisJCWRhdGFfbGlzdFtpXS0+cmVjLmRhdGEuY3duZF9hdF9zZW5kID0gbmV0LT5jd25kOworCQlk
YXRhX2xpc3RbaV0tPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IGRhdGFfbGlzdFtpXS0+cmVj
LmRhdGEudHNuOworCQlpZiAoZGF0YV9saXN0W2ldLT53aG9UbyA9PSBOVUxMKSB7CisJCQlkYXRh
X2xpc3RbaV0tPndob1RvID0gbmV0OworCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50
LCAxKTsKKwkJfQorCQkvKiBvbiB0byB0aGUgc2VudCBxdWV1ZSAqLworCQl0cDEgPSBUQUlMUV9M
QVNUKCZhc29jLT5zZW50X3F1ZXVlLCBzY3RwY2h1bmtfbGlzdGhlYWQpOworCQlpZiAoKHRwMSkg
JiYgU0NUUF9UU05fR1QodHAxLT5yZWMuZGF0YS50c24sIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEu
dHNuKSkgeworCQkJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqdHBwOworCisJCQkvKiBuZWVkIHRv
IG1vdmUgYmFjayAqLworCQliYWNrX3VwX21vcmU6CisJCQl0cHAgPSBUQUlMUV9QUkVWKHRwMSwg
c2N0cGNodW5rX2xpc3RoZWFkLCBzY3RwX25leHQpOworCQkJaWYgKHRwcCA9PSBOVUxMKSB7CisJ
CQkJVEFJTFFfSU5TRVJUX0JFRk9SRSh0cDEsIGRhdGFfbGlzdFtpXSwgc2N0cF9uZXh0KTsKKwkJ
CQlnb3RvIGFsbF9kb25lOworCQkJfQorCQkJdHAxID0gdHBwOworCQkJaWYgKFNDVFBfVFNOX0dU
KHRwMS0+cmVjLmRhdGEudHNuLCBkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLnRzbikpIHsKKwkJCQln
b3RvIGJhY2tfdXBfbW9yZTsKKwkJCX0KKwkJCVRBSUxRX0lOU0VSVF9BRlRFUigmYXNvYy0+c2Vu
dF9xdWV1ZSwgdHAxLCBkYXRhX2xpc3RbaV0sIHNjdHBfbmV4dCk7CisJCX0gZWxzZSB7CisJCQlU
QUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c2VudF9xdWV1ZSwKKwkJCQkJICBkYXRhX2xpc3RbaV0s
CisJCQkJCSAgc2N0cF9uZXh0KTsKKwkJfQorCWFsbF9kb25lOgorCQkvKiBUaGlzIGRvZXMgbm90
IGxvd2VyIHVudGlsIHRoZSBjdW0tYWNrIHBhc3NlcyBpdCAqLworCQlhc29jLT5zZW50X3F1ZXVl
X2NudCsrOworCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPD0gMCkgJiYKKwkJICAgIChhc29jLT50
b3RhbF9mbGlnaHQgPT0gMCkgJiYKKwkJICAgIChidW5kbGVfYXQgPT0gMSkpIHsKKwkJCS8qIE1h
cmsgdGhlIGNodW5rIGFzIGJlaW5nIGEgd2luZG93IHByb2JlICovCisJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc193aW5kb3dwcm9iZWQpOworCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVE
CisJCXNjdHBfYXVkaXRfbG9nKDB4QzIsIDMpOworI2VuZGlmCisJCWRhdGFfbGlzdFtpXS0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKKwkJZGF0YV9saXN0W2ldLT5zbmRfY291bnQgPSAxOwor
CQlkYXRhX2xpc3RbaV0tPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVAsCisJCQkJICAg
ICAgIGRhdGFfbGlzdFtpXS0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCSAgICAgICBkYXRhX2xp
c3RbaV0tPmJvb2tfc2l6ZSwKKwkJCQkgICAgICAgKHVpbnQzMl90KSh1aW50cHRyX3QpZGF0YV9s
aXN0W2ldLT53aG9UbywKKwkJCQkgICAgICAgZGF0YV9saXN0W2ldLT5yZWMuZGF0YS50c24pOwor
CQl9CisJCXNjdHBfZmxpZ2h0X3NpemVfaW5jcmVhc2UoZGF0YV9saXN0W2ldKTsKKwkJc2N0cF90
b3RhbF9mbGlnaHRfaW5jcmVhc2Uoc3RjYiwgZGF0YV9saXN0W2ldKTsKKwkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX1JXTkRfRU5BQkxFKSB7CisJ
CQlzY3RwX2xvZ19yd25kKFNDVFBfREVDUkVBU0VfUEVFUl9SV05ELAorCQkJICAgICAgYXNvYy0+
cGVlcnNfcnduZCwgZGF0YV9saXN0W2ldLT5zZW5kX3NpemUsIFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9wZWVyX2NodW5rX29oKSk7CisJCX0KKwkJYXNvYy0+cGVlcnNfcnduZCA9IHNjdHBfc2JzcGFj
ZV9zdWIoYXNvYy0+cGVlcnNfcnduZCwKKwkJCQkJCSAgICAodWludDMyX3QpIChkYXRhX2xpc3Rb
aV0tPnNlbmRfc2l6ZSArIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSkpOwor
CQlpZiAoYXNvYy0+cGVlcnNfcnduZCA8IHN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAuc2N0cF9zd3Nf
c2VuZGVyKSB7CisJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJYXNvYy0+cGVl
cnNfcnduZCA9IDA7CisJCX0KKwl9CisJaWYgKGFzb2MtPmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRf
dXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkgeworCQkoKmFzb2MtPmNjX2Z1bmN0aW9ucy5zY3Rw
X2N3bmRfdXBkYXRlX3BhY2tldF90cmFuc21pdHRlZCkoc3RjYiwgbmV0KTsKKwl9Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX2NsZWFuX3VwX2N0bChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlTQ1RQX1VOVVNFRAor
I2VuZGlmCispCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKworCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4
dCwgbmNoaykgeworCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZF
X0FDSykgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX05SX1NFTEVDVElW
RV9BQ0spIHx8CS8qIEVZICovCisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9I
RUFSVEJFQVRfUkVRVUVTVCkgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQ
X0hFQVJUQkVBVF9BQ0spIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9G
T1JXQVJEX0NVTV9UU04pIHx8CisJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9T
SFVURE9XTikgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dO
X0FDSykgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElPTl9F
UlJPUikgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1BBQ0tFVF9EUk9Q
UEVEKSB8fAorCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lFX0FDSykg
fHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9DV1IpIHx8CisJCSAg
ICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9BU0NPTkZfQUNLKSkgeworCQkJLyogU3Ry
YXkgY2h1bmtzIG11c3QgYmUgY2xlYW5lZCB1cCAqLworCWNsZWFuX3VwX2FueXdheToKKwkJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJ
CQlhc29jLT5jdHJsX3F1ZXVlX2NudC0tOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBf
bV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAo
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9GT1JXQVJEX0NVTV9UU04pIHsKKwkJCQlhc29j
LT5md2RfdHNuX2NudC0tOworCQkJfQorCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBz
b19sb2NrZWQpOworCQl9IGVsc2UgaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU1RS
RUFNX1JFU0VUKSB7CisJCQkvKiBzcGVjaWFsIGhhbmRsaW5nLCB3ZSBtdXN0IGxvb2sgaW50byB0
aGUgcGFyYW0gKi8KKwkJCWlmIChjaGsgIT0gYXNvYy0+c3RyX3Jlc2V0KSB7CisJCQkJZ290byBj
bGVhbl91cF9hbnl3YXk7CisJCQl9CisJCX0KKwl9Cit9CisKK3N0YXRpYyB1aW50MzJfdAorc2N0
cF9jYW5fd2Vfc3BsaXRfdGhpcyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGxlbmd0
aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc3BhY2VfbGVmdCwgdWludDMyX3Qg
ZnJhZ19wb2ludCwgaW50IGVlb3Jfb24pCit7CisJLyogTWFrZSBhIGRlY2lzaW9uIG9uIGlmIEkg
c2hvdWxkIHNwbGl0IGEKKwkgKiBtc2cgaW50byBtdWx0aXBsZSBwYXJ0cy4gVGhpcyBpcyBvbmx5
IGFza2VkIG9mCisJICogaW5jb21wbGV0ZSBtZXNzYWdlcy4KKwkgKi8KKwlpZiAoZWVvcl9vbikg
eworCQkvKiBJZiB3ZSBhcmUgZG9pbmcgRUVPUiB3ZSBuZWVkIHRvIGFsd2F5cyBzZW5kCisJCSAq
IGl0IGlmIGl0cyB0aGUgZW50aXJlIHRoaW5nLCBzaW5jZSBpdCBtaWdodAorCQkgKiBiZSBhbGwg
dGhlIGd1eSBpcyBwdXR0aW5nIGluIHRoZSBob3BwZXIuCisJCSAqLworCQlpZiAoc3BhY2VfbGVm
dCA+PSBsZW5ndGgpIHsKKwkJCS8qLQorCQkJICogSWYgd2UgaGF2ZSBkYXRhIG91dHN0YW5kaW5n
LAorCQkJICogd2UgZ2V0IGFub3RoZXIgY2hhbmNlIHdoZW4gdGhlIHNhY2sKKwkJCSAqIGFycml2
ZXMgdG8gdHJhbnNtaXQgLSB3YWl0IGZvciBtb3JlIGRhdGEKKwkJCSAqLworCQkJaWYgKHN0Y2It
PmFzb2MudG90YWxfZmxpZ2h0ID09IDApIHsKKwkJCQkvKiBJZiBub3RoaW5nIGlzIGluIGZsaWdo
dCwgd2UgemVybworCQkJCSAqIHRoZSBwYWNrZXQgY291bnRlci4KKwkJCQkgKi8KKwkJCQlyZXR1
cm4gKGxlbmd0aCk7CisJCQl9CisJCQlyZXR1cm4gKDApOworCisJCX0gZWxzZSB7CisJCQkvKiBZ
b3UgY2FuIGZpbGwgdGhlIHJlc3QgKi8KKwkJCXJldHVybiAoc3BhY2VfbGVmdCk7CisJCX0KKwl9
CisJLyotCisJICogRm9yIHRob3NlIHN0cmFuZ2UgZm9sayB0aGF0IG1ha2UgdGhlIHNlbmQgYnVm
ZmVyCisJICogc21hbGxlciB0aGFuIG91ciBmcmFnbWVudGF0aW9uIHBvaW50LCB3ZSBjYW4ndAor
CSAqIGdldCBhIGZ1bGwgbXNnIGluIHNvIHdlIGhhdmUgdG8gYWxsb3cgc3BsaXR0aW5nLgorCSAq
LworCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkgPCBmcmFnX3BvaW50
KSB7CisJCXJldHVybiAobGVuZ3RoKTsKKwl9CisJaWYgKChsZW5ndGggPD0gc3BhY2VfbGVmdCkg
fHwKKwkgICAgKChsZW5ndGggLSBzcGFjZV9sZWZ0KSA8IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9t
aW5fcmVzaWR1YWwpKSkgeworCQkvKiBTdWItb3B0aW1pYWwgcmVzaWR1YWwgZG9uJ3Qgc3BsaXQg
aW4gbm9uLWVlb3IgbW9kZS4gKi8KKwkJcmV0dXJuICgwKTsKKwl9CisJLyogSWYgd2UgcmVhY2gg
aGVyZSBsZW5ndGggaXMgbGFyZ2VyCisJICogdGhhbiB0aGUgc3BhY2VfbGVmdC4gRG8gd2Ugd2lz
aCB0byBzcGxpdAorCSAqIGl0IGZvciB0aGUgc2FrZSBvZiBwYWNrZXQgcHV0dGluZyB0b2dldGhl
cj8KKwkgKi8KKwlpZiAoc3BhY2VfbGVmdCA+PSBtaW4oU0NUUF9CQVNFX1NZU0NUTChzY3RwX21p
bl9zcGxpdF9wb2ludCksIGZyYWdfcG9pbnQpKSB7CisJCS8qIEl0cyBvayB0byBzcGxpdCBpdCAq
LworCQlyZXR1cm4gKG1pbihzcGFjZV9sZWZ0LCBmcmFnX3BvaW50KSk7CisJfQorCS8qIE5vcGUs
IGNhbid0IHNwbGl0ICovCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHVpbnQzMl90CitzY3Rw
X21vdmVfdG9fb3V0cXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAg
ICAgdWludDMyX3Qgc3BhY2VfbGVmdCwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBm
cmFnX3BvaW50LAorICAgICAgICAgICAgICAgICAgICAgIGludCAqZ2l2ZXVwLAorICAgICAgICAg
ICAgICAgICAgICAgIGludCBlZW9yX21vZGUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICpi
YWlsLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChf
X0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgICAgICAgICAg
ICAgICAgICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKwkpCit7CisJLyogTW92ZSBmcm9tIHRoZSBz
dHJlYW0gdG8gdGhlIHNlbmRfcXVldWUga2VlcGluZyB0cmFjayBvZiB0aGUgdG90YWwgKi8KKwlz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVf
cGVuZGluZyAqc3A7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3Rw
X2RhdGFfY2h1bmsgKmRjaGtoPU5VTEw7CisJc3RydWN0IHNjdHBfaWRhdGFfY2h1bmsgKm5kY2hr
aD1OVUxMOworCXVpbnQzMl90IHRvX21vdmUsIGxlbmd0aDsKKwlpbnQgbGVhZGluZzsKKwl1aW50
OF90IHJjdl9mbGFncyA9IDA7CisJdWludDhfdCBzb21lX3Rha2VuOworCXVpbnQ4X3Qgc2VuZF9s
b2NrX3VwID0gMDsKKworCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKK29uZV9tb3JlX3RpbWU6CisJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwlz
cCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7CisJaWYgKHNwID09IE5VTEwpIHsKKwkJ
aWYgKHNlbmRfbG9ja191cCA9PSAwKSB7CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJ
CQlzZW5kX2xvY2tfdXAgPSAxOworCQl9CisJCXNwID0gVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1
ZXVlKTsKKwkJaWYgKHNwKSB7CisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0KKwkJaWYgKChz
Y3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRf
RU9SKSA9PSAwKSAmJgorCQkgICAgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApICYm
CisJCSAgICAoc3RycS0+bGFzdF9tc2dfaW5jb21wbGV0ZSkpIHsKKwkJCVNDVFBfUFJJTlRGKCJI
dWg/IFN0cmVhbTolZCBsbV9pbl9jPSVkIGJ1dCBxdWV1ZSBpcyBOVUxMXG4iLAorCQkJICAgICAg
ICAgICAgc3RycS0+c2lkLAorCQkJICAgICAgICAgICAgc3RycS0+bGFzdF9tc2dfaW5jb21wbGV0
ZSk7CisJCQlzdHJxLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKKwkJfQorCQl0b19tb3ZlID0g
MDsKKwkJaWYgKHNlbmRfbG9ja191cCkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
CisJCQlzZW5kX2xvY2tfdXAgPSAwOworCQl9CisJCWdvdG8gb3V0X29mOworCX0KKwlpZiAoKHNw
LT5tc2dfaXNfY29tcGxldGUpICYmIChzcC0+bGVuZ3RoID09IDApKSB7CisJCWlmIChzcC0+c2Vu
ZGVyX2FsbF9kb25lKSB7CisJCQkvKiBXZSBhcmUgZG9pbmcgZGlmZmVyZWQgY2xlYW51cC4gTGFz
dAorCQkJICogdGltZSB0aHJvdWdoIHdoZW4gd2UgdG9vayBhbGwgdGhlIGRhdGEKKwkJCSAqIHRo
ZSBzZW5kZXJfYWxsX2RvbmUgd2FzIG5vdCBzZXQuCisJCQkgKi8KKwkJCWlmICgoc3AtPnB1dF9s
YXN0X291dCA9PSAwKSAmJiAoc3AtPmRpc2NhcmRfcmVzdCA9PSAwKSkgeworCQkJCVNDVFBfUFJJ
TlRGKCJHYWssIHB1dCBvdXQgZW50aXJlIG1zZyB3aXRoIE5PIGVuZCEtMVxuIik7CisJCQkJU0NU
UF9QUklOVEYoInNlbmRlcl9kb25lOiVkIGxlbjolZCBtc2dfY29tcDolZCBwdXRfbGFzdF9vdXQ6
JWQgc2VuZF9sb2NrOiVkXG4iLAorCQkJCSAgICAgICAgICAgIHNwLT5zZW5kZXJfYWxsX2RvbmUs
CisJCQkJICAgICAgICAgICAgc3AtPmxlbmd0aCwKKwkJCQkgICAgICAgICAgICBzcC0+bXNnX2lz
X2NvbXBsZXRlLAorCQkJCSAgICAgICAgICAgIHNwLT5wdXRfbGFzdF9vdXQsCisJCQkJICAgICAg
ICAgICAgc2VuZF9sb2NrX3VwKTsKKwkJCX0KKwkJCWlmICgoVEFJTFFfTkVYVChzcCwgbmV4dCkg
PT0gTlVMTCkgJiYgKHNlbmRfbG9ja191cCAgPT0gMCkpIHsKKwkJCQlTQ1RQX1RDQl9TRU5EX0xP
Q0soc3RjYik7CisJCQkJc2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCWF0b21pY19zdWJ0cmFj
dF9pbnQoJmFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQsIDEpOworCQkJVEFJTFFfUkVNT1ZFKCZzdHJx
LT5vdXRxdWV1ZSwgc3AsIG5leHQpOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9z
c19yZW1vdmVfZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgc3RycSwgc3AsIHNlbmRfbG9ja191cCk7
CisJCQlpZiAoKHN0cnEtPnN0YXRlID09IFNDVFBfU1RSRUFNX1JFU0VUX1BFTkRJTkcpICYmCisJ
CQkgICAgKHN0cnEtPmNodW5rc19vbl9xdWV1ZXMgPT0gMCkgJiYKKwkJCSAgICBUQUlMUV9FTVBU
WSgmc3RycS0+b3V0cXVldWUpKSB7CisJCQkJc3RjYi0+YXNvYy50cmlnZ2VyX3Jlc2V0ID0gMTsK
KwkJCX0KKwkJCWlmIChzcC0+bmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKHNwLT5u
ZXQpOworCQkJCXNwLT5uZXQgPSBOVUxMOworCQkJfQorCQkJaWYgKHNwLT5kYXRhKSB7CisJCQkJ
c2N0cF9tX2ZyZWVtKHNwLT5kYXRhKTsKKwkJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlz
Y3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIHNvX2xvY2tlZCk7CisJCQkvKiB3ZSBjYW4ndCBi
ZSBsb2NrZWQgdG8gaXQgKi8KKwkJCWlmIChzZW5kX2xvY2tfdXApIHsKKwkJCQlTQ1RQX1RDQl9T
RU5EX1VOTE9DSyhzdGNiKTsKKwkJCQlzZW5kX2xvY2tfdXAgPSAwOworCQkJfQorCQkJLyogYmFj
ayB0byBnZXQgdGhlIG5leHQgbXNnICovCisJCQlnb3RvIG9uZV9tb3JlX3RpbWU7CisJCX0gZWxz
ZSB7CisJCQkvKiBzZW5kZXIganVzdCBmaW5pc2hlZCB0aGlzIGJ1dAorCQkJICogc3RpbGwgaG9s
ZHMgYSByZWZlcmVuY2UKKwkJCSAqLworCQkJKmdpdmV1cCA9IDE7CisJCQl0b19tb3ZlID0gMDsK
KwkJCWdvdG8gb3V0X29mOworCQl9CisJfSBlbHNlIHsKKwkJLyogaXMgdGhlcmUgc29tZSB0byBn
ZXQgKi8KKwkJaWYgKHNwLT5sZW5ndGggPT0gMCkgeworCQkJLyogbm8gKi8KKwkJCSpnaXZldXAg
PSAxOworCQkJdG9fbW92ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsKKwkJfSBlbHNlIGlmIChzcC0+
ZGlzY2FyZF9yZXN0KSB7CisJCQlpZiAoc2VuZF9sb2NrX3VwID09IDApIHsKKwkJCQlTQ1RQX1RD
Ql9TRU5EX0xPQ0soc3RjYik7CisJCQkJc2VuZF9sb2NrX3VwID0gMTsKKwkJCX0KKwkJCS8qIFdo
YWNrIGRvd24gdGhlIHNpemUgKi8KKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2Mu
dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUsIHNwLT5sZW5ndGgpOworCQkJaWYgKChzdGNiLT5zY3Rw
X3NvY2tldCAhPSBOVUxMKSAmJgorCQkJICAgICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgIChzdGNiLT5zY3RwX2VwLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpKSB7CisJCQkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYywgc3AtPmxlbmd0aCk7CisJ
CQl9CisJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOworCQkJ
CXNwLT5kYXRhID0gTlVMTDsKKwkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCX0KKwkJCXNw
LT5sZW5ndGggPSAwOworCQkJc3AtPnNvbWVfdGFrZW4gPSAxOworCQkJKmdpdmV1cCA9IDE7CisJ
CQl0b19tb3ZlID0gMDsKKwkJCWdvdG8gb3V0X29mOworCQl9CisJfQorCXNvbWVfdGFrZW4gPSBz
cC0+c29tZV90YWtlbjsKK3JlX2xvb2s6CisJbGVuZ3RoID0gc3AtPmxlbmd0aDsKKwlpZiAoc3At
Pm1zZ19pc19jb21wbGV0ZSkgeworCQkvKiBUaGUgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLworCQl0
b19tb3ZlID0gbWluKGxlbmd0aCwgZnJhZ19wb2ludCk7CisJCWlmICh0b19tb3ZlID09IGxlbmd0
aCkgeworCQkJLyogQWxsIG9mIGl0IGZpdHMgaW4gdGhlIE1UVSAqLworCQkJaWYgKHNwLT5zb21l
X3Rha2VuKSB7CisJCQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9MQVNUX0ZSQUc7CisJCQl9IGVs
c2UgeworCQkJCXJjdl9mbGFncyB8PSBTQ1RQX0RBVEFfTk9UX0ZSQUc7CisJCQl9CisJCQlzcC0+
cHV0X2xhc3Rfb3V0ID0gMTsKKwkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1NBQ0tfSU1N
RURJQVRFTFkpIHsKKwkJCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7
CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBOb3QgYWxsIG9mIGl0IGZpdHMsIHdlIGZyYWdtZW50
ICovCisJCQlpZiAoc3AtPnNvbWVfdGFrZW4gPT0gMCkgeworCQkJCXJjdl9mbGFncyB8PSBTQ1RQ
X0RBVEFfRklSU1RfRlJBRzsKKwkJCX0KKwkJCXNwLT5zb21lX3Rha2VuID0gMTsKKwkJfQorCX0g
ZWxzZSB7CisJCXRvX21vdmUgPSBzY3RwX2Nhbl93ZV9zcGxpdF90aGlzKHN0Y2IsIGxlbmd0aCwg
c3BhY2VfbGVmdCwgZnJhZ19wb2ludCwgZWVvcl9tb2RlKTsKKwkJaWYgKHRvX21vdmUpIHsKKwkJ
CS8qLQorCQkJICogV2UgdXNlIGEgc25hcHNob3Qgb2YgbGVuZ3RoIGluIGNhc2UgaXQKKwkJCSAq
IGlzIGV4cGFuZGluZyBkdXJpbmcgdGhlIGNvbXBhcmUuCisJCQkgKi8KKwkJCXVpbnQzMl90IGxs
ZW47CisKKwkJCWxsZW4gPSBsZW5ndGg7CisJCQlpZiAodG9fbW92ZSA+PSBsbGVuKSB7CisJCQkJ
dG9fbW92ZSA9IGxsZW47CisJCQkJaWYgKHNlbmRfbG9ja191cCA9PSAwKSB7CisJCQkJCS8qLQor
CQkJCQkgKiBXZSBhcmUgdGFraW5nIGFsbCBvZiBhbiBpbmNvbXBsZXRlIG1zZworCQkJCQkgKiB0
aHVzIHdlIG5lZWQgYSBzZW5kIGxvY2suCisJCQkJCSAqLworCQkJCQlTQ1RQX1RDQl9TRU5EX0xP
Q0soc3RjYik7CisJCQkJCXNlbmRfbG9ja191cCA9IDE7CisJCQkJCWlmIChzcC0+bXNnX2lzX2Nv
bXBsZXRlKSB7CisJCQkJCQkvKiB0aGUgc2VuZGVyIGZpbmlzaGVkIHRoZSBtc2cgKi8KKwkJCQkJ
CWdvdG8gcmVfbG9vazsKKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCWlmIChzcC0+c29tZV90YWtl
biA9PSAwKSB7CisJCQkJcmN2X2ZsYWdzIHw9IFNDVFBfREFUQV9GSVJTVF9GUkFHOworCQkJCXNw
LT5zb21lX3Rha2VuID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIE5vdGhpbmcgdG8gdGFr
ZS4gKi8KKwkJCSpnaXZldXAgPSAxOworCQkJdG9fbW92ZSA9IDA7CisJCQlnb3RvIG91dF9vZjsK
KwkJfQorCX0KKworCS8qIElmIHdlIHJlYWNoIGhlcmUsIHdlIGNhbiBjb3B5IG91dCBhIGNodW5r
ICovCisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7
CisJCS8qIE5vIGNodW5rIG1lbW9yeSAqLworCQkqZ2l2ZXVwID0gMTsKKwkJdG9fbW92ZSA9IDA7
CisJCWdvdG8gb3V0X29mOworCX0KKwkvKiBTZXR1cCBmb3IgdW5vcmRlcmVkIGlmIG5lZWRlZCBi
eSBsb29raW5nCisJICogYXQgdGhlIHVzZXIgc2VudCBpbmZvIGZsYWdzLgorCSAqLworCWlmIChz
cC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJFRCkgeworCQlyY3ZfZmxhZ3MgfD0gU0NUUF9E
QVRBX1VOT1JERVJFRDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lbmFibGVfc2Fj
a19pbW1lZGlhdGVseSkgJiYKKwkgICAgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSA9PSBT
Q1RQX0VPRikgeworCQlyY3ZfZmxhZ3MgfD0gU0NUUF9EQVRBX1NBQ0tfSU1NRURJQVRFTFk7CisJ
fQorCS8qIGNsZWFyIG91dCB0aGUgY2h1bmsgYmVmb3JlIHNldHRpbmcgdXAgKi8KKwltZW1zZXQo
Y2hrLCAwLCBzaXplb2YoKmNoaykpOworCWNoay0+cmVjLmRhdGEucmN2X2ZsYWdzID0gcmN2X2Zs
YWdzOworCisJaWYgKHRvX21vdmUgPj0gbGVuZ3RoKSB7CisJCS8qIHdlIHRoaW5rIHdlIGNhbiBz
dGVhbCB0aGUgd2hvbGUgdGhpbmcgKi8KKwkJaWYgKChzcC0+c2VuZGVyX2FsbF9kb25lID09IDAp
ICYmIChzZW5kX2xvY2tfdXAgPT0gMCkpIHsKKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsK
KwkJCXNlbmRfbG9ja191cCA9IDE7CisJCX0KKwkJaWYgKHRvX21vdmUgPCBzcC0+bGVuZ3RoKSB7
CisJCQkvKiBiYWlsLCBpdCBjaGFuZ2VkICovCisJCQlnb3RvIGRvbnRfZG9faXQ7CisJCX0KKwkJ
Y2hrLT5kYXRhID0gc3AtPmRhdGE7CisJCWNoay0+bGFzdF9tYnVmID0gc3AtPnRhaWxfbWJ1ZjsK
KwkJLyogcmVnaXN0ZXIgdGhlIHN0ZWFsaW5nICovCisJCXNwLT5kYXRhID0gc3AtPnRhaWxfbWJ1
ZiA9IE5VTEw7CisJfSBlbHNlIHsKKwkJc3RydWN0IG1idWYgKm07CisJZG9udF9kb19pdDoKKwkJ
Y2hrLT5kYXRhID0gU0NUUF9NX0NPUFlNKHNwLT5kYXRhLCAwLCB0b19tb3ZlLCBNX05PV0FJVCk7
CisJCWNoay0+bGFzdF9tYnVmID0gTlVMTDsKKwkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJ
CQlzcC0+c29tZV90YWtlbiA9IHNvbWVfdGFrZW47CisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIHNvX2xvY2tlZCk7CisJCQkqYmFpbCA9IDE7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdv
dG8gb3V0X29mOworCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkg
eworCQkJc2N0cF9sb2dfbWJjKGNoay0+ZGF0YSwgU0NUUF9NQlVGX0lDT1BZKTsKKwkJfQorI2Vu
ZGlmCisJCS8qIFB1bGwgb2ZmIHRoZSBkYXRhICovCisJCW1fYWRqKHNwLT5kYXRhLCB0b19tb3Zl
KTsKKwkJLyogTm93IGxldHMgd29yayBvdXIgd2F5IGRvd24gYW5kIGNvbXBhY3QgaXQgKi8KKwkJ
bSA9IHNwLT5kYXRhOworCQl3aGlsZSAobSAmJiAoU0NUUF9CVUZfTEVOKG0pID09IDApKSB7CisJ
CQlzcC0+ZGF0YSAgPSBTQ1RQX0JVRl9ORVhUKG0pOworCQkJU0NUUF9CVUZfTkVYVChtKSA9IE5V
TEw7CisJCQlpZiAoc3AtPnRhaWxfbWJ1ZiA9PSBtKSB7CisJCQkJLyotCisJCQkJICogRnJlZWlu
ZyB0YWlsPyBUU05IIHNpbmNlCisJCQkJICogd2Ugc3VwcG9zZWRseSB3ZXJlIHRha2luZyBsZXNz
CisJCQkJICogdGhhbiB0aGUgc3AtPmxlbmd0aC4KKwkJCQkgKi8KKyNpZmRlZiBJTlZBUklBTlRT
CisJCQkJcGFuaWMoIkh1aCwgZnJlaW5nIHRhaWw/IC0gVFNOSCIpOworI2Vsc2UKKwkJCQlTQ1RQ
X1BSSU5URigiSHVoLCBmcmVlaW5nIHRhaWw/IC0gVFNOSFxuIik7CisJCQkJc3AtPnRhaWxfbWJ1
ZiA9IHNwLT5kYXRhID0gTlVMTDsKKwkJCQlzcC0+bGVuZ3RoID0gMDsKKyNlbmRpZgorCisJCQl9
CisJCQlzY3RwX21fZnJlZShtKTsKKwkJCW0gPSBzcC0+ZGF0YTsKKwkJfQorCX0KKwlpZiAoU0NU
UF9CVUZfSVNfRVhURU5ERUQoY2hrLT5kYXRhKSkgeworCQljaGstPmNvcHlfYnlfcmVmID0gMTsK
Kwl9IGVsc2UgeworCQljaGstPmNvcHlfYnlfcmVmID0gMDsKKwl9CisJLyogZ2V0IGxhc3RfbWJ1
ZiBhbmQgY291bnRzIG9mIG1iIHVzYWdlCisJICogVGhpcyBpcyB1Z2x5IGJ1dCBob3BlZnVsbHkg
aXRzIG9ubHkgb25lIG1idWYuCisJICovCisJaWYgKGNoay0+bGFzdF9tYnVmID09IE5VTEwpIHsK
KwkJY2hrLT5sYXN0X21idWYgPSBjaGstPmRhdGE7CisJCXdoaWxlIChTQ1RQX0JVRl9ORVhUKGNo
ay0+bGFzdF9tYnVmKSAhPSBOVUxMKSB7CisJCQljaGstPmxhc3RfbWJ1ZiA9IFNDVFBfQlVGX05F
WFQoY2hrLT5sYXN0X21idWYpOworCQl9CisJfQorCisJaWYgKHRvX21vdmUgPiBsZW5ndGgpIHsK
KwkJLyotIFRoaXMgc2hvdWxkIG5vdCBoYXBwZW4gZWl0aGVyCisJCSAqIHNpbmNlIHdlIGFsd2F5
cyBsb3dlciB0b19tb3ZlIHRvIHRoZSBzaXplCisJCSAqIG9mIHNwLT5sZW5ndGggaWYgaXRzIGxh
cmdlci4KKwkJICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygiSHVoLCBob3cgY2FuIHRv
X21vdmUgYmUgbGFyZ2VyPyIpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoIkh1aCwgaG93IGNhbiB0
b19tb3ZlIGJlIGxhcmdlcj9cbiIpOworCQlzcC0+bGVuZ3RoID0gMDsKKyNlbmRpZgorCX0gZWxz
ZSB7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnNwLT5sZW5ndGgsIHRvX21vdmUpOworCX0KKwls
ZWFkaW5nID0gU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpOworCWlmIChNX0xFQURJTkdT
UEFDRShjaGstPmRhdGEpIDwgbGVhZGluZykgeworCQkvKiBOb3QgZW5vdWdoIHJvb20gZm9yIGEg
Y2h1bmsgaGVhZGVyLCBnZXQgc29tZSAqLworCQlzdHJ1Y3QgbWJ1ZiAqbTsKKworCQltID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKDEsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJaWYgKG0g
PT0gTlVMTCkgeworCQkJLyoKKwkJCSAqIHdlJ3JlIGluIHRyb3VibGUgaGVyZS4gX1BSRVBFTkQg
YmVsb3cgd2lsbCBmcmVlCisJCQkgKiBhbGwgdGhlIGRhdGEgaWYgdGhlcmUgaXMgbm8gbGVhZGlu
ZyBzcGFjZSwgc28gd2UKKwkJCSAqIG11c3QgcHV0IHRoZSBkYXRhIGJhY2sgYW5kIHJlc3RvcmUu
CisJCQkgKi8KKwkJCWlmIChzZW5kX2xvY2tfdXAgPT0gMCkgeworCQkJCVNDVFBfVENCX1NFTkRf
TE9DSyhzdGNiKTsKKwkJCQlzZW5kX2xvY2tfdXAgPSAxOworCQkJfQorCQkJaWYgKHNwLT5kYXRh
ID09IE5VTEwpIHsKKwkJCQkvKiB1bnN0ZWFsIHRoZSBkYXRhICovCisJCQkJc3AtPmRhdGEgPSBj
aGstPmRhdGE7CisJCQkJc3AtPnRhaWxfbWJ1ZiA9IGNoay0+bGFzdF9tYnVmOworCQkJfSBlbHNl
IHsKKwkJCQlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJCQkJLyogcmVhc3NlbWJsZSB0aGUgZGF0YSAq
LworCQkJCW1fdG1wID0gc3AtPmRhdGE7CisJCQkJc3AtPmRhdGEgPSBjaGstPmRhdGE7CisJCQkJ
U0NUUF9CVUZfTkVYVChjaGstPmxhc3RfbWJ1ZikgPSBtX3RtcDsKKwkJCX0KKwkJCXNwLT5zb21l
X3Rha2VuID0gc29tZV90YWtlbjsKKwkJCWF0b21pY19hZGRfaW50KCZzcC0+bGVuZ3RoLCB0b19t
b3ZlKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkqYmFpbCA9IDE7CisJCQlzY3RwX2ZyZWVf
YV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisJCQl0b19tb3ZlID0gMDsKKwkJCWdvdG8g
b3V0X29mOworCQl9IGVsc2UgeworCQkJU0NUUF9CVUZfTEVOKG0pID0gMDsKKwkJCVNDVFBfQlVG
X05FWFQobSkgPSBjaGstPmRhdGE7CisJCQljaGstPmRhdGEgPSBtOworCQkJTV9BTElHTihjaGst
PmRhdGEsIDQpOworCQl9CisJfQorCVNDVFBfQlVGX1BSRVBFTkQoY2hrLT5kYXRhLCBTQ1RQX0RB
VEFfQ0hVTktfT1ZFUkhFQUQoc3RjYiksIE1fTk9XQUlUKTsKKwlpZiAoY2hrLT5kYXRhID09IE5V
TEwpIHsKKwkJLyogSEVMUCwgVFNOSCBzaW5jZSB3ZSBhc3N1cmVkIGl0IHdvdWxkIG5vdCBhYm92
ZT8gKi8KKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJwcmVwZW5kIGZhaWxlcyBIRUxQPyIp
OworI2Vsc2UKKwkJU0NUUF9QUklOVEYoInByZXBlbmQgZmFpbHMgSEVMUD9cbiIpOworCQlzY3Rw
X2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisjZW5kaWYKKwkJKmJhaWwgPSAx
OworCQl0b19tb3ZlID0gMDsKKwkJZ290byBvdXRfb2Y7CisJfQorCXNjdHBfc25kX3NiX2FsbG9j
KHN0Y2IsIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJY2hrLT5ib29rX3NpemUg
PSBjaGstPnNlbmRfc2l6ZSA9ICh1aW50MTZfdCkodG9fbW92ZSArIFNDVFBfREFUQV9DSFVOS19P
VkVSSEVBRChzdGNiKSk7CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+c2VudCA9
IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0g
JnN0Y2ItPmFzb2M7CisJY2hrLT5wYWRfaW5wbGFjZSA9IDA7CisJY2hrLT5ub19mcl9hbGxvd2Vk
ID0gMDsKKwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlpZiAocmN2
X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJLyogSnVzdCB1c2UgMC4gVGhlIHJl
Y2VpdmVyIGlnbm9yZXMgdGhlIHZhbHVlcy4gKi8KKwkJCWNoay0+cmVjLmRhdGEubWlkID0gMDsK
KwkJfSBlbHNlIHsKKwkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJl
ZDsKKwkJCWlmIChyY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJc3RycS0+
bmV4dF9taWRfb3JkZXJlZCsrOworCQkJfQorCQl9CisJfSBlbHNlIHsKKwkJaWYgKHJjdl9mbGFn
cyAmIFNDVFBfREFUQV9VTk9SREVSRUQpIHsKKwkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+
bmV4dF9taWRfdW5vcmRlcmVkOworCQkJaWYgKHJjdl9mbGFncyAmIFNDVFBfREFUQV9MQVNUX0ZS
QUcpIHsKKwkJCQlzdHJxLT5uZXh0X21pZF91bm9yZGVyZWQrKzsKKwkJCX0KKwkJfSBlbHNlIHsK
KwkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKKwkJCWlmIChy
Y3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfTEFTVF9GUkFHKSB7CisJCQkJc3RycS0+bmV4dF9taWRfb3Jk
ZXJlZCsrOworCQkJfQorCQl9CisJfQorCWNoay0+cmVjLmRhdGEuc2lkID0gc3AtPnNpZDsKKwlj
aGstPnJlYy5kYXRhLnBwaWQgPSBzcC0+cHBpZDsKKwljaGstPnJlYy5kYXRhLmNvbnRleHQgPSBz
cC0+Y29udGV4dDsKKwljaGstPnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9IDA7CisK
KwljaGstPnJlYy5kYXRhLnRpbWV0b2Ryb3AgPSBzcC0+dHM7CisJY2hrLT5mbGFncyA9IHNwLT5h
Y3RfZmxhZ3M7CisKKwlpZiAoc3AtPm5ldCkgeworCQljaGstPndob1RvID0gc3AtPm5ldDsKKwkJ
YXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJfSBlbHNlCisJCWNo
ay0+d2hvVG8gPSBOVUxMOworCisJaWYgKHNwLT5ob2xkc19rZXlfcmVmKSB7CisJCWNoay0+YXV0
aF9rZXlpZCA9IHNwLT5hdXRoX2tleWlkOworCQlzY3RwX2F1dGhfa2V5X2FjcXVpcmUoc3RjYiwg
Y2hrLT5hdXRoX2tleWlkKTsKKwkJY2hrLT5ob2xkc19rZXlfcmVmID0gMTsKKwl9CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1BhbmRhX18pCisJY2hrLT5yZWMuZGF0YS50
c24gPSBhdG9taWNfZmV0Y2hhZGRfaW50KCZhc29jLT5zZW5kaW5nX3NlcSwgMSk7CisjZWxzZQor
CWNoay0+cmVjLmRhdGEudHNuID0gYXNvYy0+c2VuZGluZ19zZXErKzsKKyNlbmRpZgorCWlmIChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPR19BVF9TRU5EXzJf
T1VUUSkgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NUUk1PVVRfTE9HX1NFTkQsCisJCSAgICAg
ICAgICAgICAgICh1aW50MzJfdCkodWludHB0cl90KXN0Y2IsIHNwLT5sZW5ndGgsCisJCSAgICAg
ICAgICAgICAgICh1aW50MzJfdCkoKGNoay0+cmVjLmRhdGEuc2lkIDw8IDE2KSB8ICgweDAwMDBm
ZmZmICYgY2hrLT5yZWMuZGF0YS5taWQpKSwKKwkJICAgICAgICAgICAgICAgY2hrLT5yZWMuZGF0
YS50c24pOworCX0KKwlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlk
Y2hraCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9kYXRhX2NodW5rICopOworCX0gZWxz
ZSB7CisJCW5kY2hraCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9pZGF0YV9jaHVuayAq
KTsKKwl9CisJLyoKKwkgKiBQdXQgdGhlIHJlc3Qgb2YgdGhlIHRoaW5ncyBpbiBwbGFjZSBub3cu
IFNpemUgd2FzIGRvbmUKKwkgKiBlYXJsaWVyIGluIHByZXZpb3VzIGxvb3AgcHJpb3IgdG8gcGFk
ZGluZy4KKwkgKi8KKworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJU0NUUF9UQ0JfTE9D
S19BU1NFUlQoc3RjYik7CisJaWYgKGFzb2MtPnRzbl9vdXRfYXQgPj0gU0NUUF9UU05fTE9HX1NJ
WkUpIHsKKwkJYXNvYy0+dHNuX291dF9hdCA9IDA7CisJCWFzb2MtPnRzbl9vdXRfd3JhcHBlZCA9
IDE7CisJfQorCWFzb2MtPm91dF90c25sb2dbYXNvYy0+dHNuX291dF9hdF0udHNuID0gY2hrLT5y
ZWMuZGF0YS50c247CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5zdHJtID0g
Y2hrLT5yZWMuZGF0YS5zaWQ7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0X2F0XS5z
ZXEgPSBjaGstPnJlYy5kYXRhLm1pZDsKKwlhc29jLT5vdXRfdHNubG9nW2Fzb2MtPnRzbl9vdXRf
YXRdLnN6ID0gY2hrLT5zZW5kX3NpemU7CisJYXNvYy0+b3V0X3RzbmxvZ1thc29jLT50c25fb3V0
X2F0XS5mbGdzID0gY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJYXNvYy0+b3V0X3RzbmxvZ1th
c29jLT50c25fb3V0X2F0XS5zdGNiID0gKHZvaWQgKilzdGNiOworCWFzb2MtPm91dF90c25sb2db
YXNvYy0+dHNuX291dF9hdF0uaW5fcG9zID0gYXNvYy0+dHNuX291dF9hdDsKKwlhc29jLT5vdXRf
dHNubG9nW2Fzb2MtPnRzbl9vdXRfYXRdLmluX291dCA9IDI7CisJYXNvYy0+dHNuX291dF9hdCsr
OworI2VuZGlmCisJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJZGNo
a2gtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0RBVEE7CisJCWRjaGtoLT5jaC5jaHVua19mbGFncyA9
IGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzOworCQlkY2hraC0+ZHAudHNuID0gaHRvbmwoY2hrLT5y
ZWMuZGF0YS50c24pOworCQlkY2hraC0+ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJZGNo
a2gtPmRwLnNzbiA9IGh0b25zKCh1aW50MTZfdCljaGstPnJlYy5kYXRhLm1pZCk7CisJCWRjaGto
LT5kcC5wcGlkID0gY2hrLT5yZWMuZGF0YS5wcGlkOworCQlkY2hraC0+Y2guY2h1bmtfbGVuZ3Ro
ID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOworCX0gZWxzZSB7CisJCW5kY2hraC0+Y2guY2h1bmtf
dHlwZSA9IFNDVFBfSURBVEE7CisJCW5kY2hraC0+Y2guY2h1bmtfZmxhZ3MgPSBjaGstPnJlYy5k
YXRhLnJjdl9mbGFnczsKKwkJbmRjaGtoLT5kcC50c24gPSBodG9ubChjaGstPnJlYy5kYXRhLnRz
bik7CisJCW5kY2hraC0+ZHAuc2lkID0gaHRvbnMoc3RycS0+c2lkKTsKKwkJbmRjaGtoLT5kcC5y
ZXNlcnZlZCA9IGh0b25zKDApOworCQluZGNoa2gtPmRwLm1pZCA9IGh0b25sKGNoay0+cmVjLmRh
dGEubWlkKTsKKwkJaWYgKHNwLT5mc24gPT0gMCkKKwkJCW5kY2hraC0+ZHAucHBpZF9mc24ucHBp
ZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJZWxzZQorCQkJbmRjaGtoLT5kcC5wcGlkX2Zzbi5m
c24gPSBodG9ubChzcC0+ZnNuKTsKKwkJc3AtPmZzbisrOworCQluZGNoa2gtPmNoLmNodW5rX2xl
bmd0aCA9IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwl9CisJLyogTm93IGFkdmFuY2UgdGhlIGNo
ay0+c2VuZF9zaXplIGJ5IHRoZSBhY3R1YWwgcGFkIG5lZWRlZC4gKi8KKwlpZiAoY2hrLT5zZW5k
X3NpemUgPCBTQ1RQX1NJWkUzMihjaGstPmJvb2tfc2l6ZSkpIHsKKwkJLyogbmVlZCBhIHBhZCAq
LworCQlzdHJ1Y3QgbWJ1ZiAqbG07CisJCWludCBwYWRzOworCisJCXBhZHMgPSBTQ1RQX1NJWkUz
MihjaGstPmJvb2tfc2l6ZSkgLSBjaGstPnNlbmRfc2l6ZTsKKwkJbG0gPSBzY3RwX3BhZF9sYXN0
bWJ1ZihjaGstPmRhdGEsIHBhZHMsIGNoay0+bGFzdF9tYnVmKTsKKwkJaWYgKGxtICE9IE5VTEwp
IHsKKwkJCWNoay0+bGFzdF9tYnVmID0gbG07CisJCQljaGstPnBhZF9pbnBsYWNlID0gMTsKKwkJ
fQorCQljaGstPnNlbmRfc2l6ZSArPSBwYWRzOworCX0KKwlpZiAoUFJfU0NUUF9FTkFCTEVEKGNo
ay0+ZmxhZ3MpKSB7CisJCWFzb2MtPnByX3NjdHBfY250Kys7CisJfQorCWlmIChzcC0+bXNnX2lz
X2NvbXBsZXRlICYmIChzcC0+bGVuZ3RoID09IDApICYmIChzcC0+c2VuZGVyX2FsbF9kb25lKSkg
eworCQkvKiBBbGwgZG9uZSBwdWxsIGFuZCBraWxsIHRoZSBtZXNzYWdlICovCisJCWlmIChzcC0+
cHV0X2xhc3Rfb3V0ID09IDApIHsKKwkJCVNDVFBfUFJJTlRGKCJHYWssIHB1dCBvdXQgZW50aXJl
IG1zZyB3aXRoIE5PIGVuZCEtMlxuIik7CisJCQlTQ1RQX1BSSU5URigic2VuZGVyX2RvbmU6JWQg
bGVuOiVkIG1zZ19jb21wOiVkIHB1dF9sYXN0X291dDolZCBzZW5kX2xvY2s6JWRcbiIsCisJCQkg
ICAgICAgICAgICBzcC0+c2VuZGVyX2FsbF9kb25lLAorCQkJICAgICAgICAgICAgc3AtPmxlbmd0
aCwKKwkJCSAgICAgICAgICAgIHNwLT5tc2dfaXNfY29tcGxldGUsCisJCQkgICAgICAgICAgICBz
cC0+cHV0X2xhc3Rfb3V0LAorCQkJICAgICAgICAgICAgc2VuZF9sb2NrX3VwKTsKKwkJfQorCQlp
ZiAoKHNlbmRfbG9ja191cCA9PSAwKSAmJiAoVEFJTFFfTkVYVChzcCwgbmV4dCkgPT0gTlVMTCkp
IHsKKwkJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJCXNlbmRfbG9ja191cCA9IDE7CisJ
CX0KKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJ
CVRBSUxRX1JFTU9WRSgmc3RycS0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJc3RjYi0+YXNvYy5z
c19mdW5jdGlvbnMuc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0oc3RjYiwgYXNvYywgc3RycSwg
c3AsIHNlbmRfbG9ja191cCk7CisJCWlmICgoc3RycS0+c3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVT
RVRfUEVORElORykgJiYKKwkJICAgIChzdHJxLT5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJ
CSAgICBUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVldWUpKSB7CisJCQlzdGNiLT5hc29jLnRyaWdn
ZXJfcmVzZXQgPSAxOworCQl9CisJCWlmIChzcC0+bmV0KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoc3AtPm5ldCk7CisJCQlzcC0+bmV0ID0gTlVMTDsKKwkJfQorCQlpZiAoc3AtPmRhdGEp
IHsKKwkJCXNjdHBfbV9mcmVlbShzcC0+ZGF0YSk7CisJCQlzcC0+ZGF0YSA9IE5VTEw7CisJCX0K
KwkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNwLCBzb19sb2NrZWQpOworCX0KKwlhc29jLT5j
aHVua3Nfb25fb3V0X3F1ZXVlKys7CisJc3RycS0+Y2h1bmtzX29uX3F1ZXVlcysrOworCVRBSUxR
X0lOU0VSVF9UQUlMKCZhc29jLT5zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJYXNvYy0+
c2VuZF9xdWV1ZV9jbnQrKzsKK291dF9vZjoKKwlpZiAoc2VuZF9sb2NrX3VwKSB7CisJCVNDVFBf
VENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm4gKHRvX21vdmUpOworfQorCisKK3N0
YXRpYyB2b2lkCitzY3RwX2ZpbGxfb3V0cXVldWUoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAg
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGZyYWdfcG9pbnQsIGludCBlZW9yX21vZGUsIGlu
dCAqcXVpdF9ub3csIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCVNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0
ICpzdHJxOworCXVpbnQzMl90IHNwYWNlX2xlZnQsIG1vdmVkLCB0b3RhbF9tb3ZlZDsKKwlpbnQg
YmFpbCwgZ2l2ZXVwOworCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJYXNvYyA9ICZz
dGNiLT5hc29jOworCXRvdGFsX21vdmVkID0gMDsKKwlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5z
YS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNwYWNlX2xl
ZnQgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1
IC0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19V
c2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJc3BhY2VfbGVmdCA9IG5ldC0+bXR1IC0g
c2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJ
CQkvKiBUU05IICovCisJCQlzcGFjZV9sZWZ0ID0gbmV0LT5tdHU7CisJCQlicmVhazsKKwl9CisJ
LyogTmVlZCBhbiBhbGxvd2FuY2UgZm9yIHRoZSBkYXRhIGNodW5rIGhlYWRlciB0b28gKi8KKwlz
cGFjZV9sZWZ0IC09IFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKTsKKworCS8qIG11c3Qg
bWFrZSBldmVuIHdvcmQgYm91bmRhcnkgKi8KKwlzcGFjZV9sZWZ0ICY9IDB4ZmZmZmZmZmM7CisJ
c3RycSA9IHN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3Nfc2VsZWN0X3N0cmVhbShzdGNi
LCBuZXQsIGFzb2MpOworCWdpdmV1cCA9IDA7CisJYmFpbCA9IDA7CisJd2hpbGUgKChzcGFjZV9s
ZWZ0ID4gMCkgJiYgKHN0cnEgIT0gTlVMTCkpIHsKKwkJbW92ZWQgPSBzY3RwX21vdmVfdG9fb3V0
cXVldWUoc3RjYiwgc3RycSwgc3BhY2VfbGVmdCwgZnJhZ19wb2ludCwKKwkJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmdpdmV1cCwgZWVvcl9tb2RlLCAmYmFpbCwgc29fbG9ja2VkKTsK
KwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19zY2hlZHVsZWQoc3RjYiwgbmV0LCBh
c29jLCBzdHJxLCBtb3ZlZCk7CisJCWlmICgoZ2l2ZXVwICE9IDApIHx8IChiYWlsICE9IDApKSB7
CisJCQlicmVhazsKKwkJfQorCQlzdHJxID0gc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9z
c19zZWxlY3Rfc3RyZWFtKHN0Y2IsIG5ldCwgYXNvYyk7CisJCXRvdGFsX21vdmVkICs9IG1vdmVk
OworCQlzcGFjZV9sZWZ0IC09IG1vdmVkOworCQlpZiAoc3BhY2VfbGVmdCA+PSBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpIHsKKwkJCXNwYWNlX2xlZnQgLT0gU0NUUF9EQVRBX0NIVU5L
X09WRVJIRUFEKHN0Y2IpOworCQl9IGVsc2UgeworCQkJc3BhY2VfbGVmdCA9IDA7CisJCX0KKwkJ
c3BhY2VfbGVmdCAmPSAweGZmZmZmZmZjOworCX0KKwlpZiAoYmFpbCAhPSAwKQorCQkqcXVpdF9u
b3cgPSAxOworCisJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19wYWNrZXRfZG9uZShz
dGNiLCBuZXQsIGFzb2MpOworCisJaWYgKHRvdGFsX21vdmVkID09IDApIHsKKwkJaWYgKChzdGNi
LT5hc29jLnNjdHBfY210X29uX29mZiA9PSAwKSAmJgorCQkgICAgKG5ldCA9PSBzdGNiLT5hc29j
LnByaW1hcnlfZGVzdGluYXRpb24pKSB7CisJCQkvKiByYW4gZHJ5IGZvciBwcmltYXJ5IG5ldHdv
cmsgbmV0ICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wcmltYXJ5X3JhbmRyeSk7CisJCX0g
ZWxzZSBpZiAoc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCQkvKiByYW4gZHJ5
IHdpdGggQ01UIG9uICovCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19jbXRfcmFuZHJ5KTsKKwkJ
fQorCX0KK30KKwordm9pZAorc2N0cF9maXhfZWNuX2VjaG8oc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCisJVEFJTFFfRk9S
RUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAo
Y2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9FQ05fRUNITykgeworCQkJY2hrLT5zZW50ID0g
U0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3NjdHBfbW92ZV9jaHVu
a3NfZnJvbV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQp
Cit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9j
aHVuayAqY2hrOworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKwl1bnNp
Z25lZCBpbnQgaTsKKworCWlmIChuZXQgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWFzb2Mg
PSAmc3RjYi0+YXNvYzsKKwlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7
IGkrKykgeworCQlUQUlMUV9GT1JFQUNIKHNwLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1
ZXVlLCBuZXh0KSB7CisJCQlpZiAoc3AtPm5ldCA9PSBuZXQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoc3AtPm5ldCk7CisJCQkJc3AtPm5ldCA9IE5VTEw7CisJCQl9CisJCX0KKwl9CisJ
VEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYg
KGNoay0+d2hvVG8gPT0gbmV0KSB7CisJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9U
byk7CisJCQljaGstPndob1RvID0gTlVMTDsKKwkJfQorCX0KK30KKworaW50CitzY3RwX21lZF9j
aHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKwkJICAgICAgc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorCQkgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJICAg
ICAgaW50ICpudW1fb3V0LAorCQkgICAgICBpbnQgKnJlYXNvbl9jb2RlLAorCQkgICAgICBpbnQg
Y29udHJvbF9vbmx5LCBpbnQgZnJvbV93aGVyZSwKKwkJICAgICAgc3RydWN0IHRpbWV2YWwgKm5v
dywgaW50ICpub3dfZmlsbGVkLCBpbnQgZnJhZ19wb2ludCwgaW50IHNvX2xvY2tlZAorI2lmICFk
ZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCSAg
ICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKwkpCit7CisJLyoqCisJICogT2sgdGhpcyBpcyB0aGUg
Z2VuZXJpYyBjaHVuayBzZXJ2aWNlIHF1ZXVlLiB3ZSBtdXN0IGRvIHRoZQorCSAqIGZvbGxvd2lu
ZzoKKwkgKiAtIFNlcnZpY2UgdGhlIHN0cmVhbSBxdWV1ZSB0aGF0IGlzIG5leHQsIG1vdmluZyBh
bnkKKwkgKiAgIG1lc3NhZ2UgKG5vdGUgSSBtdXN0IGdldCBhIGNvbXBsZXRlIG1lc3NhZ2UgaS5l
LiBGSVJTVC9NSURETEUgYW5kCisJICogICBMQVNUIHRvIHRoZSBvdXQgcXVldWUgaW4gb25lIHBh
c3MpIGFuZCBhc3NpZ25pbmcgVFNOJ3MuIFRoaXMKKwkgKiAgIG9ubHkgYXBwbHlzIHRob3VnaCBp
ZiB0aGUgcGVlciBkb2VzIG5vdCBzdXBwb3J0IE5EQVRBLiBGb3IgTkRBVEEKKwkgKiAgIGNodW5r
cyBpdHMgb2sgdG8gbm90IHNlbmQgdGhlIGVudGlyZSBtZXNzYWdlIDstKQorCSAqIC0gQ2hlY2sg
dG8gc2VlIGlmIHRoZSBjd25kL3J3bmQgYWxsb3dzIGFueSBvdXRwdXQsIGlmIHNvIHdlIGdvIGFo
ZWFkIGFuZAorCSAqICAgZm9tdWxhdGUgYW5kIHNlbmQgdGhlIGxvdyBsZXZlbCBjaHVua3MuIE1h
a2luZyBzdXJlIHRvIGNvbWJpbmUKKwkgKiAgIGFueSBjb250cm9sIGluIHRoZSBjb250cm9sIGNo
dW5rIHF1ZXVlIGFsc28uCisJICovCisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqc3RhcnRfYXQs
ICpzYWNrX2dvZXNfdG8gPSBOVUxMLCAqb2xkX3N0YXJ0X2F0ID0gTlVMTDsKKwlzdHJ1Y3QgbWJ1
ZiAqb3V0Y2hhaW4sICplbmRvdXRjaGFpbjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGss
ICpuY2hrOworCisJLyogdGVtcCBhcnJheXMgZm9yIHVubGlua2luZyAqLworCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKmRhdGFfbGlzdFtTQ1RQX01BWF9EQVRBX0JVTkRMSU5HXTsKKwlpbnQgbm9f
ZnJhZ21lbnRmbGcsIGVycm9yOworCXVuc2lnbmVkIGludCBtYXhfcnduZF9wZXJfZGVzdCwgbWF4
X3NlbmRfcGVyX2Rlc3Q7CisJaW50IG9uZV9jaHVuaywgaGJmbGFnLCBza2lwX2RhdGFfZm9yX3Ro
aXNfbmV0OworCWludCBhc2NvbmYsIGNvb2tpZSwgbm9fb3V0X2NudDsKKwlpbnQgYnVuZGxlX2F0
LCBjdGxfY250LCBub19kYXRhX2NodW5rcywgZWVvcl9tb2RlOworCXVuc2lnbmVkIGludCBtdHUs
IHJfbXR1LCBvbXR1LCBteF9tdHUsIHRvX291dDsKKwlpbnQgdHNuc19zZW50ID0gMDsKKwl1aW50
MzJfdCBhdXRoX29mZnNldCA9IDA7CisJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aCA9IE5V
TEw7CisJdWludDE2X3QgYXV0aF9rZXlpZDsKKwlpbnQgb3ZlcnJpZGVfb2sgPSAxOworCWludCBz
a2lwX2ZpbGxfdXAgPSAwOworCWludCBkYXRhX2F1dGhfcmVxZCA9IDA7CisJLyogSlJTIDUvMTQv
MDcgLSBBZGQgZmxhZyBmb3Igd2hldGhlciBhIGhlYXJ0YmVhdCBpcyBzZW50IHRvCisJICAgdGhl
IGRlc3RpbmF0aW9uLiAqLworCWludCBxdWl0X25vdyA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08o
aW5wKSk7CisJfSBlbHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkp
OworCX0KKyNlbmRpZgorCSpudW1fb3V0ID0gMDsKKwkqcmVhc29uX2NvZGUgPSAwOworCWF1dGhf
a2V5aWQgPSBzdGNiLT5hc29jLmF1dGhpbmZvLmFjdGl2ZV9rZXlpZDsKKwlpZiAoKGFzb2MtPnN0
YXRlICYgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKSB8fAorCSAgICAoYXNvYy0+c3RhdGUg
JiBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSB8fAorCSAgICAoc2N0cF9pc19mZWF0dXJl
X29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRfRU9SKSkpIHsKKwkJZWVvcl9tb2RlID0g
MTsKKwl9IGVsc2UgeworCQllZW9yX21vZGUgPSAwOworCX0KKwljdGxfY250ID0gbm9fb3V0X2Nu
dCA9IGFzY29uZiA9IGNvb2tpZSA9IDA7CisJLyoKKwkgKiBGaXJzdCBsZXRzIHByaW1lIHRoZSBw
dW1wLiBGb3IgZWFjaCBkZXN0aW5hdGlvbiwgaWYgdGhlcmUgaXMgcm9vbQorCSAqIGluIHRoZSBm
bGlnaHQgc2l6ZSwgYXR0ZW1wdCB0byBwdWxsIGFuIE1UVSdzIHdvcnRoIG91dCBvZiB0aGUKKwkg
KiBzdHJlYW0gcXVldWVzIGludG8gdGhlIGdlbmVyYWwgc2VuZF9xdWV1ZQorCSAqLworI2lmZGVm
IFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRfbG9nKDB4QzIsIDIpOworI2VuZGlm
CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJaGJmbGFnID0gMDsKKwlpZiAoY29udHJv
bF9vbmx5KQorCQlub19kYXRhX2NodW5rcyA9IDE7CisJZWxzZQorCQlub19kYXRhX2NodW5rcyA9
IDA7CisKKwkvKiBOb3RoaW5nIHRvIHBvc3NpYmxlIHRvIHNlbmQ/ICovCisJaWYgKChUQUlMUV9F
TVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSB8fAorCSAgICAgKGFzb2MtPmN0cmxfcXVl
dWVfY250ID09IHN0Y2ItPmFzb2MuZWNuX2VjaG9fY250X29ucSkpICYmCisJICAgIFRBSUxRX0VN
UFRZKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSkgJiYKKwkgICAgVEFJTFFfRU1QVFkoJmFzb2Mt
PnNlbmRfcXVldWUpICYmCisJICAgIHNjdHBfaXNfdGhlcmVfdW5zZW50X2RhdGEoc3RjYiwgc29f
bG9ja2VkKSA9PSAwKSB7CisJbm90aGluZ190b19zZW5kOgorCQkqcmVhc29uX2NvZGUgPSA5Owor
CQlyZXR1cm4gKDApOworCX0KKwlpZiAoYXNvYy0+cGVlcnNfcnduZCA9PSAwKSB7CisJCS8qIE5v
IHJvb20gaW4gcGVlcnMgcnduZCAqLworCQkqcmVhc29uX2NvZGUgPSAxOworCQlpZiAoYXNvYy0+
dG90YWxfZmxpZ2h0ID4gMCkgeworCQkJLyogd2UgYXJlIGFsbG93ZWQgb25lIGNodW5rIGluIGZs
aWdodCAqLworCQkJbm9fZGF0YV9jaHVua3MgPSAxOworCQl9CisJfQorCWlmIChzdGNiLT5hc29j
LmVjbl9lY2hvX2NudF9vbnEpIHsKKwkJLyogUmVjb3JkIHdoZXJlIGEgc2FjayBnb2VzLCBpZiBh
bnkgKi8KKwkJaWYgKG5vX2RhdGFfY2h1bmtzICYmCisJCSAgICAoYXNvYy0+Y3RybF9xdWV1ZV9j
bnQgPT0gc3RjYi0+YXNvYy5lY25fZWNob19jbnRfb25xKSkgeworCQkJLyogTm90aGluZyBidXQg
RUNOZSB0byBzZW5kIC0gd2UgZG9uJ3QgZG8gdGhhdCAqLworCQkJZ290byBub3RoaW5nX3RvX3Nl
bmQ7CisJCX0KKwkJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRfcXVldWUs
IHNjdHBfbmV4dCkgeworCQkJaWYgKChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NFTEVD
VElWRV9BQ0spIHx8CisJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VM
RUNUSVZFX0FDSykpIHsKKwkJCQlzYWNrX2dvZXNfdG8gPSBjaGstPndob1RvOworCQkJCWJyZWFr
OworCQkJfQorCQl9CisJfQorCW1heF9yd25kX3Blcl9kZXN0ID0gKChhc29jLT5wZWVyc19yd25k
ICsgYXNvYy0+dG90YWxfZmxpZ2h0KSAvIGFzb2MtPm51bW5ldHMpOworCWlmIChzdGNiLT5zY3Rw
X3NvY2tldCkKKwkJbWF4X3NlbmRfcGVyX2Rlc3QgPSBTQ1RQX1NCX0xJTUlUX1NORChzdGNiLT5z
Y3RwX3NvY2tldCkgLyBhc29jLT5udW1uZXRzOworCWVsc2UKKwkJbWF4X3NlbmRfcGVyX2Rlc3Qg
PSAwOworCWlmIChub19kYXRhX2NodW5rcyA9PSAwKSB7CisJCS8qIEhvdyBtYW55IG5vbi1kaXJl
Y3RlZCBjaHVua3MgYXJlIHRoZXJlPyAqLworCQlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNl
bmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQkJaWYgKGNoay0+d2hvVG8gPT0gTlVMTCkgeworCQkJ
CS8qIFdlIGFscmVhZHkgaGF2ZSBub24tZGlyZWN0ZWQKKwkJCQkgKiBjaHVua3Mgb24gdGhlIHF1
ZXVlLCBubyBuZWVkCisJCQkJICogdG8gZG8gYSBmaWxsLXVwLgorCQkJCSAqLworCQkJCXNraXBf
ZmlsbF91cCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCX0KKwlpZiAoKG5vX2RhdGFf
Y2h1bmtzID09IDApICYmCisJICAgIChza2lwX2ZpbGxfdXAgPT0gMCkgJiYKKwkgICAgKCFzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2IsIGFzb2MpKSkgeworCQlU
QUlMUV9GT1JFQUNIKG5ldCwgJmFzb2MtPm5ldHMsIHNjdHBfbmV4dCkgeworCQkJLyoKKwkJCSAq
IFRoaXMgZm9yIGxvb3Agd2UgYXJlIGluIHRha2VzIGluCisJCQkgKiBlYWNoIG5ldCwgaWYgaXRz
J3MgZ290IHNwYWNlIGluIGN3bmQgYW5kCisJCQkgKiBoYXMgZGF0YSBzZW50IHRvIGl0ICh3aGVu
IENNVCBpcyBvZmYpIHRoZW4gaXQKKwkJCSAqIGNhbGxzIHNjdHBfZmlsbF9vdXRxdWV1ZSBmb3Ig
dGhlIG5ldC4gVGhpcyBnZXRzCisJCQkgKiBkYXRhIG9uIHRoZSBzZW5kIHF1ZXVlIGZvciB0aGF0
IG5ldHdvcmsuCisJCQkgKgorCQkJICogSW4gc2N0cF9maWxsX291dHF1ZXVlIFRTTidzIGFyZSBh
c3NpZ25lZCBhbmQKKwkJCSAqIGRhdGEgaXMgY29waWVkIG91dCBvZiB0aGUgc3RyZWFtIGJ1ZmZl
cnMuIE5vdGUKKwkJCSAqIG1vc3RseSBjb3B5IGJ5IHJlZmVyZW5jZSAod2UgaG9wZSkuCisJCQkg
Ki8KKwkJCW5ldC0+d2luZG93X3Byb2JlID0gMDsKKwkJCWlmICgobmV0ICE9IHN0Y2ItPmFzb2Mu
YWx0ZXJuYXRlKSAmJgorCQkJICAgICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB8
fAorCQkJICAgICAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgfHwK
KwkJCSAgICAgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpKSB7CisJ
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgMSwKKwkJCQkJ
CSAgICAgIFNDVFBfQ1dORF9MT0dfRklMTF9PVVRRX0NBTExFRCk7CisJCQkJfQorCQkJCWNvbnRp
bnVlOworCQkJfQorCQkJaWYgKChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfbmV3
X3RyYW5zbWlzc2lvbl9iZWdpbnMpICYmCisJCQkgICAgKG5ldC0+ZmxpZ2h0X3NpemUgPT0gMCkp
IHsKKwkJCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9uZXdfdHJhbnNtaXNz
aW9uX2JlZ2lucykoc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChuZXQtPmZsaWdodF9zaXplID49
IG5ldC0+Y3duZCkgeworCQkJCS8qIHNraXAgdGhpcyBuZXR3b3JrLCBubyByb29tIC0gY2FuJ3Qg
ZmlsbCAqLworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQs
IDMsCisJCQkJCQkgICAgICBTQ1RQX0NXTkRfTE9HX0ZJTExfT1VUUV9DQUxMRUQpOworCQkJCX0K
KwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0NXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19jd25k
KHN0Y2IsIG5ldCwgNCwgU0NUUF9DV05EX0xPR19GSUxMX09VVFFfQ0FMTEVEKTsKKwkJCX0KKwkJ
CXNjdHBfZmlsbF9vdXRxdWV1ZShzdGNiLCBuZXQsIGZyYWdfcG9pbnQsIGVlb3JfbW9kZSwgJnF1
aXRfbm93LCBzb19sb2NrZWQpOworCQkJaWYgKHF1aXRfbm93KSB7CisJCQkJLyogbWVtb3J5IGFs
bG9jIGZhaWx1cmUgKi8KKwkJCQlub19kYXRhX2NodW5rcyA9IDE7CisJCQkJYnJlYWs7CisJCQl9
CisJCX0KKwl9CisJLyogbm93IHNlcnZpY2UgZWFjaCBkZXN0aW5hdGlvbiBhbmQgc2VuZCBvdXQg
d2hhdCB3ZSBjYW4gZm9yIGl0ICovCisJLyogTm90aGluZyB0byBzZW5kPyAqLworCWlmIChUQUlM
UV9FTVBUWSgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgorCSAgICBUQUlMUV9FTVBUWSgm
YXNvYy0+YXNjb25mX3NlbmRfcXVldWUpICYmCisJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW5k
X3F1ZXVlKSkgeworCQkqcmVhc29uX2NvZGUgPSA4OworCQlyZXR1cm4gKDApOworCX0KKworCWlm
IChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSB7CisJCS8qIGdldCB0aGUgbGFzdCBzdGFydCBw
b2ludCAqLworCQlzdGFydF9hdCA9IGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQ7CisJ
CWlmIChzdGFydF9hdCA9PSBOVUxMKSB7CisJCQkvKiBudWxsIHNvIHRvIGJlZ2lubmluZyAqLwor
CQkJc3RhcnRfYXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCX0gZWxzZSB7CisJCQlz
dGFydF9hdCA9IFRBSUxRX05FWFQoYXNvYy0+bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZCwgc2N0
cF9uZXh0KTsKKwkJCWlmIChzdGFydF9hdCA9PSBOVUxMKSB7CisJCQkJc3RhcnRfYXQgPSBUQUlM
UV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCQl9CisJCX0KKwkJYXNvYy0+bGFzdF9uZXRfY210X3Nl
bmRfc3RhcnRlZCA9IHN0YXJ0X2F0OworCX0gZWxzZSB7CisJCXN0YXJ0X2F0ID0gVEFJTFFfRklS
U1QoJmFzb2MtPm5ldHMpOworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xf
c2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjaGstPndob1RvID09IE5VTEwpIHsKKwkJ
CWlmIChhc29jLT5hbHRlcm5hdGUpIHsKKwkJCQljaGstPndob1RvID0gYXNvYy0+YWx0ZXJuYXRl
OworCQkJfSBlbHNlIHsKKwkJCQljaGstPndob1RvID0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlv
bjsKKwkJCX0KKwkJCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOwor
CQl9CisJfQorCW9sZF9zdGFydF9hdCA9IE5VTEw7CithZ2Fpbl9vbmVfbW9yZV90aW1lOgorCWZv
ciAobmV0ID0gc3RhcnRfYXQgOyBuZXQgIT0gTlVMTDsgbmV0ID0gVEFJTFFfTkVYVChuZXQsIHNj
dHBfbmV4dCkpIHsKKwkJLyogaG93IG11Y2ggY2FuIHdlIHNlbmQ/ICovCisJCS8qIFNDVFBEQkco
IkV4YW1pbmUgZm9yIHNlbmRpbmcgbmV0OiV4XG4iLCAodWludDMyX3QpbmV0KTsgKi8KKwkJaWYg
KG9sZF9zdGFydF9hdCAmJiAob2xkX3N0YXJ0X2F0ID09IG5ldCkpIHsKKwkJCS8qIHRocm91Z2gg
bGlzdCBvY21wbGV0ZWx5LiAqLworCQkJYnJlYWs7CisJCX0KKwkJdHNuc19zZW50ID0gMHhhOwor
CQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRB
SUxRX0VNUFRZKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSkgJiYKKwkJICAgIChuZXQtPmZsaWdo
dF9zaXplID49IG5ldC0+Y3duZCkpIHsKKwkJCS8qIE5vdGhpbmcgb24gY29udHJvbCBvciBhc2Nv
bmYgYW5kIGZsaWdodCBpcyBmdWxsLCB3ZSBjYW4gc2tpcAorCQkJICogZXZlbiBpbiB0aGUgQ01U
IGNhc2UuCisJCQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisJCWJ1bmRsZV9hdCA9IDA7CisJCWVu
ZG91dGNoYWluID0gb3V0Y2hhaW4gPSBOVUxMOworCQlub19mcmFnbWVudGZsZyA9IDE7CisJCW9u
ZV9jaHVuayA9IDA7CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJN
RUQpIHsKKwkJCXNraXBfZGF0YV9mb3JfdGhpc19uZXQgPSAxOworCQl9IGVsc2UgeworCQkJc2tp
cF9kYXRhX2Zvcl90aGlzX25ldCA9IDA7CisJCX0KKwkJc3dpdGNoICgoKHN0cnVjdCBzb2NrYWRk
ciAqKSZuZXQtPnJvLl9sX2FkZHIpLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2Ug
QUZfSU5FVDoKKwkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQli
cmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQltdHUgPSBu
ZXQtPm10dSAtIFNDVFBfTUlOX09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCW10dSA9IG5ldC0+bXR1IC0g
c2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6CisJ
CQkvKiBUU05IICovCisJCQltdHUgPSBuZXQtPm10dTsKKwkJCWJyZWFrOworCQl9CisJCW14X210
dSA9IG10dTsKKwkJdG9fb3V0ID0gMDsKKwkJaWYgKG10dSA+IGFzb2MtPnBlZXJzX3J3bmQpIHsK
KwkJCWlmIChhc29jLT50b3RhbF9mbGlnaHQgPiAwKSB7CisJCQkJLyogV2UgaGF2ZSBhIHBhY2tl
dCBpbiBmbGlnaHQgc29tZXdoZXJlICovCisJCQkJcl9tdHUgPSBhc29jLT5wZWVyc19yd25kOwor
CQkJfSBlbHNlIHsKKwkJCQkvKiBXZSBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gc2VuZCBvbmUgTVRV
IG91dCAqLworCQkJCW9uZV9jaHVuayA9IDE7CisJCQkJcl9tdHUgPSBtdHU7CisJCQl9CisJCX0g
ZWxzZSB7CisJCQlyX210dSA9IG10dTsKKwkJfQorCQllcnJvciA9IDA7CisJCS8qKioqKioqKioq
KioqKioqKioqKioqKiovCisJCS8qIEFTQ09ORiB0cmFuc21pc3Npb24gKi8KKwkJLyoqKioqKioq
KioqKioqKioqKioqKioqKi8KKwkJLyogTm93IGZpcnN0IGxldHMgZ28gdGhyb3VnaCB0aGUgYXNj
b25mIHF1ZXVlICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5hc2NvbmZfc2Vu
ZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQg
IT0gU0NUUF9BU0NPTkYpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGstPndob1Rv
ID09IE5VTEwpIHsKKwkJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlID09IE5VTEwpIHsKKwkJCQkJaWYg
KGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24gIT0gbmV0KSB7CisJCQkJCQlicmVhazsKKwkJCQkJ
fQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChhc29jLT5hbHRlcm5hdGUgIT0gbmV0KSB7CisJCQkJ
CQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKGNoay0+d2hvVG8g
IT0gbmV0KSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChjaGstPmRhdGEgPT0g
TlVMTCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVCAmJgorCQkJICAgIGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkg
eworCQkJCWJyZWFrOworCQkJfQorCQkJLyoKKwkJCSAqIGlmIG5vIEFVVEggaXMgeWV0IGluY2x1
ZGVkIGFuZCB0aGlzIGNodW5rCisJCQkgKiByZXF1aXJlcyBpdCwgbWFrZSBzdXJlIHRvIGFjY291
bnQgZm9yIGl0LiAgV2UKKwkJCSAqIGRvbid0IGFwcGx5IHRoZSBzaXplIHVudGlsIHRoZSBBVVRI
IGNodW5rIGlzCisJCQkgKiBhY3R1YWxseSBhZGRlZCBiZWxvdyBpbiBjYXNlIHRoZXJlIGlzIG5v
IHJvb20gZm9yCisJCQkgKiB0aGlzIGNodW5rLiBOT1RFOiB3ZSBvdmVybG9hZCB0aGUgdXNlIG9m
ICJvbXR1IgorCQkJICogaGVyZQorCQkJICovCisJCQlpZiAoKGF1dGggPT0gTlVMTCkgJiYKKwkJ
CSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtfaWQuaWQsCisJ
CQkJCQkJc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkgeworCQkJCW9tdHUgPSBzY3RwX2dl
dF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJCQl9IGVsc2UKKwkJ
CQlvbXR1ID0gMDsKKwkJCS8qIEhlcmUgd2UgZG8gTk9UIGZhY3RvciB0aGUgcl9tdHUgKi8KKwkJ
CWlmICgoY2hrLT5zZW5kX3NpemUgPCAoaW50KShtdHUgLSBvbXR1KSkgfHwKKwkJCSAgICAoY2hr
LT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSkgeworCQkJCS8qCisJCQkJICogV2Ug
cHJvYmFibHkgc2hvdWxkIGdsb20gdGhlIG1idWYgY2hhaW4KKwkJCQkgKiBmcm9tIHRoZSBjaGst
PmRhdGEgZm9yIGNvbnRyb2wgYnV0IHRoZQorCQkJCSAqIHByb2JsZW0gaXMgaXQgYmVjb21lcyB5
ZXQgb25lIG1vcmUgbGV2ZWwKKwkJCQkgKiBvZiB0cmFja2luZyB0byBkbyBpZiBmb3Igc29tZSBy
ZWFzb24KKwkJCQkgKiBvdXRwdXQgZmFpbHMuIFRoZW4gSSBoYXZlIGdvdCB0bworCQkJCSAqIHJl
Y29uc3RydWN0IHRoZSBtZXJnZWQgY29udHJvbCBjaGFpbi4uIGVsCisJCQkJICogeXVja28uLiBm
b3Igbm93IHdlIHRha2UgdGhlIGVhc3kgd2F5IGFuZAorCQkJCSAqIGRvIHRoZSBjb3B5CisJCQkJ
ICovCisJCQkJLyoKKwkJCQkgKiBBZGQgYW4gQVVUSCBjaHVuaywgaWYgY2h1bmsgcmVxdWlyZXMg
aXQKKwkJCQkgKiBzYXZlIHRoZSBvZmZzZXQgaW50byB0aGUgY2hhaW4gZm9yIEFVVEgKKwkJCQkg
Ki8KKwkJCQlpZiAoKGF1dGggPT0gTlVMTCkgJiYKKwkJCQkgICAgKHNjdHBfYXV0aF9pc19yZXF1
aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwKKwkJCQkJCQkJIHN0Y2ItPmFzb2MucGVl
cl9hdXRoX2NodW5rcykpKSB7CisJCQkJCW91dGNoYWluID0gc2N0cF9hZGRfYXV0aF9jaHVuayhv
dXRjaGFpbiwKKwkJCQkJCQkJICAgICAgICZlbmRvdXRjaGFpbiwKKwkJCQkJCQkJICAgICAgICZh
dXRoLAorCQkJCQkJCQkgICAgICAgJmF1dGhfb2Zmc2V0LAorCQkJCQkJCQkgICAgICAgc3RjYiwK
KwkJCQkJCQkJICAgICAgIGNoay0+cmVjLmNodW5rX2lkLmlkKTsKKwkJCQkJU0NUUF9TVEFUX0lO
Q1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCQkJCX0KKwkJCQlvdXRjaGFp
biA9IHNjdHBfY29weV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWlu
LAorCQkJCQkJCSAgICAgICAoaW50KWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEsCisJ
CQkJCQkJICAgICAgIGNoay0+c2VuZF9zaXplLCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCQlpZiAo
b3V0Y2hhaW4gPT0gTlVMTCkgeworCQkJCQkqcmVhc29uX2NvZGUgPSA4OworCQkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9N
RU0pOworCQkJCQlyZXR1cm4gKEVOT01FTSk7CisJCQkJfQorCQkJCVNDVFBfU1RBVF9JTkNSX0NP
VU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCQkvKiB1cGRhdGUgb3VyIE1UVSBz
aXplICovCisJCQkJaWYgKG10dSA+IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpKQorCQkJCQltdHUg
LT0gKGNoay0+c2VuZF9zaXplICsgb210dSk7CisJCQkJZWxzZQorCQkJCQltdHUgPSAwOworCQkJ
CXRvX291dCArPSAoY2hrLT5zZW5kX3NpemUgKyBvbXR1KTsKKwkJCQkvKiBEbyBjbGVhciBJUF9E
RiA/ICovCisJCQkJaWYgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9PSykgewor
CQkJCQlub19mcmFnbWVudGZsZyA9IDA7CisJCQkJfQorCQkJCWlmIChjaGstPnJlYy5jaHVua19p
ZC5jYW5fdGFrZV9kYXRhKQorCQkJCQljaGstPmRhdGEgPSBOVUxMOworCQkJCS8qCisJCQkJICog
c2V0IGhiIGZsYWcgc2luY2Ugd2UgY2FuCisJCQkJICogdXNlIHRoZXNlIGZvciBSVE8KKwkJCQkg
Ki8KKwkJCQloYmZsYWcgPSAxOworCQkJCWFzY29uZiA9IDE7CisJCQkJLyoKKwkJCQkgKiBzaG91
bGQgc3lzY3RsIHRoaXM6IGRvbid0CisJCQkJICogYnVuZGxlIGRhdGEgd2l0aCBBU0NPTkYKKwkJ
CQkgKiBzaW5jZSBpdCByZXF1aXJlcyBBVVRICisJCQkJICovCisJCQkJbm9fZGF0YV9jaHVua3Mg
PSAxOworCQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fU0VOVDsKKwkJCQlpZiAoY2hrLT53
aG9UbyA9PSBOVUxMKSB7CisJCQkJCWNoay0+d2hvVG8gPSBuZXQ7CisJCQkJCWF0b21pY19hZGRf
aW50KCZuZXQtPnJlZl9jb3VudCwgMSk7CisJCQkJfQorCQkJCWNoay0+c25kX2NvdW50Kys7CisJ
CQkJaWYgKG10dSA9PSAwKSB7CisJCQkJCS8qCisJCQkJCSAqIE9rIHdlIGFyZSBvdXQgb2Ygcm9v
bSBidXQgd2UgY2FuCisJCQkJCSAqIG91dHB1dCB3aXRob3V0IGVmZmVjdGluZyB0aGUKKwkJCQkJ
ICogZmxpZ2h0IHNpemUgc2luY2UgdGhpcyBsaXR0bGUgZ3V5CisJCQkJCSAqIGlzIGEgY29udHJv
bCBvbmx5IHBhY2tldC4KKwkJCQkJICovCisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX0FTQ09ORiwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQkvKgorCQkJCQkgKiBkbyBOT1Qg
Y2xlYXIgdGhlIGFzY29uZgorCQkJCQkgKiBmbGFnIGFzIGl0IGlzIHVzZWQgdG8gZG8KKwkJCQkJ
ICogYXBwcm9wcmlhdGUgc291cmNlIGFkZHJlc3MKKwkJCQkJICogc2VsZWN0aW9uLgorCQkJCQkg
Ki8KKwkJCQkJaWYgKCpub3dfZmlsbGVkID09IDApIHsKKwkJCQkJCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKG5vdyk7CisJCQkJCQkqbm93X2ZpbGxlZCA9IDE7CisJCQkJCX0KKwkJCQkJbmV0
LT5sYXN0X3NlbnRfdGltZSA9ICpub3c7CisJCQkJCWhiZmxhZyA9IDA7CisJCQkJCWlmICgoZXJy
b3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIG5ldCwKKwkJCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikm
bmV0LT5yby5fbF9hZGRyLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0Y2hhaW4sIGF1dGhfb2Zmc2V0LCBhdXRoLAorCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQs
CisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVu
dGZsZywgMCwgYXNjb25mLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKKwkJCQkJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJ
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVM
TCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbmRpZgorCQkJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKKwkJCQkJCS8qIGVycm9yLCB3ZSBj
b3VsZCBub3Qgb3V0cHV0ICovCisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgIkdh
ayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCQkJCQlpZiAoZnJvbV93aGVyZSA9PSAwKSB7
CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnJ1c3IpOworCQkJCQkJfQor
CQkJCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1
ZiA9IDE7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQkJCQkJ
fQorCQkJCQkJLyogZXJyb3IsIGNvdWxkIG5vdCBvdXRwdXQgKi8KKwkJCQkJCWlmIChlcnJvciA9
PSBFSE9TVFVOUkVBQ0gpIHsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIERlc3RpbmF0aW9uIHdlbnQK
KwkJCQkJCQkgKiB1bnJlYWNoYWJsZQorCQkJCQkJCSAqIGR1cmluZyB0aGlzIHNlbmQKKwkJCQkJ
CQkgKi8KKwkJCQkJCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2IsIG5ldCk7CisJCQkJ
CQl9CisJCQkJCQkqcmVhc29uX2NvZGUgPSA3OworCQkJCQkJYnJlYWs7CisJCQkJCX0gZWxzZSB7
CisJCQkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJ
ICogaW5jcmVhc2UgdGhlIG51bWJlciB3ZSBzZW50LCBpZiBhCisJCQkJCSAqIGNvb2tpZSBpcyBz
ZW50IHdlIGRvbid0IHRlbGwgdGhlbQorCQkJCQkgKiBhbnkgd2FzIHNlbnQgb3V0LgorCQkJCQkg
Ki8KKwkJCQkJb3V0Y2hhaW4gPSBlbmRvdXRjaGFpbiA9IE5VTEw7CisJCQkJCWF1dGggPSBOVUxM
OworCQkJCQlhdXRoX29mZnNldCA9IDA7CisJCQkJCWlmICghbm9fb3V0X2NudCkKKwkJCQkJCSpu
dW1fb3V0ICs9IGN0bF9jbnQ7CisJCQkJCS8qIHJlY2FsYyBhIGNsZWFuIHNsYXRlIGFuZCBzZXR1
cCAqLworCQkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCQkJCQljYXNlIEFGX0lORVQ6CisJCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQ
X01JTl9WNF9PVkVSSEVBRDsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
CQkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQkJCW10dSA9IG5ldC0+bXR1IC0gU0NUUF9NSU5fT1ZF
UkhFQUQ7CisJCQkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkJCQljYXNlIEFGX0NPTk46CisJCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpOworCQkJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJCQlkZWZhdWx0OgorCQkJ
CQkJCS8qIFRTTkggKi8KKwkJCQkJCQltdHUgPSBuZXQtPm10dTsKKwkJCQkJCQlicmVhazsKKwkJ
CQkJfQorCQkJCQl0b19vdXQgPSAwOworCQkJCQlub19mcmFnbWVudGZsZyA9IDE7CisJCQkJfQor
CQkJfQorCQl9CisJCWlmIChlcnJvciAhPSAwKSB7CisJCQkvKiB0cnkgbmV4dCBuZXQgKi8KKwkJ
CWNvbnRpbnVlOworCQl9CisJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIENvbnRy
b2wgdHJhbnNtaXNzaW9uICovCisJCS8qKioqKioqKioqKioqKioqKioqKioqKiovCisJCS8qIE5v
dyBmaXJzdCBsZXRzIGdvIHRocm91Z2ggdGhlIGNvbnRyb2wgcXVldWUgKi8KKwkJVEFJTFFfRk9S
RUFDSF9TQUZFKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hr
KSB7CisJCQlpZiAoKHNhY2tfZ29lc190bykgJiYKKwkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQu
aWQgPT0gU0NUUF9FQ05fRUNITykgJiYKKwkJCSAgICAoY2hrLT53aG9UbyAhPSBzYWNrX2dvZXNf
dG8pKSB7CisJCQkJLyoKKwkJCQkgKiBpZiB3ZSBoYXZlIGEgc2FjayBpbiBxdWV1ZSwgYW5kIHdl
IGFyZSBsb29raW5nIGF0IGFuCisJCQkJICogZWNuIGVjaG8gdGhhdCBpcyBOT1QgcXVldWVkIHRv
IHdoZXJlIHRoZSBzYWNrIGlzIGdvaW5nLi4KKwkJCQkgKi8KKwkJCQlpZiAoY2hrLT53aG9UbyA9
PSBuZXQpIHsKKwkJCQkJLyogRG9uJ3QgdHJhbnNtaXQgaXQgdG8gd2hlcmUgaXRzIGdvaW5nIChj
dXJyZW50IG5ldCkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIGlmIChzYWNrX2dvZXNf
dG8gPT0gbmV0KSB7CisJCQkJCS8qIEJ1dCBkbyB0cmFuc21pdCBpdCB0byB0aGlzIGFkZHJlc3Mg
Ki8KKwkJCQkJZ290byBza2lwX25ldF9jaGVjazsKKwkJCQl9CisJCQl9CisJCQlpZiAoY2hrLT53
aG9UbyA9PSBOVUxMKSB7CisJCQkJaWYgKGFzb2MtPmFsdGVybmF0ZSA9PSBOVUxMKSB7CisJCQkJ
CWlmIChhc29jLT5wcmltYXJ5X2Rlc3RpbmF0aW9uICE9IG5ldCkgeworCQkJCQkJY29udGludWU7
CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoYXNvYy0+YWx0ZXJuYXRlICE9IG5ldCkg
eworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCWlmIChj
aGstPndob1RvICE9IG5ldCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCXNraXBf
bmV0X2NoZWNrOgorCQkJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCQkJY29udGludWU7CisJ
CQl9CisJCQlpZiAoY2hrLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fVU5TRU5UKSB7CisJCQkJLyoK
KwkJCQkgKiBJdCBtdXN0IGJlIHVuc2VudC4gQ29va2llcyBhbmQgQVNDT05GJ3MKKwkJCQkgKiBo
YW5nIGFyb3VuZCBidXQgdGhlcmUgdGltZXJzIHdpbGwgZm9yY2UKKwkJCQkgKiB3aGVuIG1hcmtl
ZCBmb3IgcmVzZW5kLgorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJLyoKKwkJCSAq
IGlmIG5vIEFVVEggaXMgeWV0IGluY2x1ZGVkIGFuZCB0aGlzIGNodW5rCisJCQkgKiByZXF1aXJl
cyBpdCwgbWFrZSBzdXJlIHRvIGFjY291bnQgZm9yIGl0LiAgV2UKKwkJCSAqIGRvbid0IGFwcGx5
IHRoZSBzaXplIHVudGlsIHRoZSBBVVRIIGNodW5rIGlzCisJCQkgKiBhY3R1YWxseSBhZGRlZCBi
ZWxvdyBpbiBjYXNlIHRoZXJlIGlzIG5vIHJvb20gZm9yCisJCQkgKiB0aGlzIGNodW5rLiBOT1RF
OiB3ZSBvdmVybG9hZCB0aGUgdXNlIG9mICJvbXR1IgorCQkJICogaGVyZQorCQkJICovCisJCQlp
ZiAoKGF1dGggPT0gTlVMTCkgJiYKKwkJCSAgICBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmso
Y2hrLT5yZWMuY2h1bmtfaWQuaWQsCisJCQkJCQkJc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtz
KSkgeworCQkJCW9tdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihzdGNiLT5hc29jLnBlZXJf
aG1hY19pZCk7CisJCQl9IGVsc2UKKwkJCQlvbXR1ID0gMDsKKwkJCS8qIEhlcmUgd2UgZG8gTk9U
IGZhY3RvciB0aGUgcl9tdHUgKi8KKwkJCWlmICgoY2hrLT5zZW5kX3NpemUgPD0gKGludCkobXR1
IC0gb210dSkpIHx8CisJCQkgICAgKGNoay0+ZmxhZ3MgJiBDSFVOS19GTEFHU19GUkFHTUVOVF9P
SykpIHsKKwkJCQkvKgorCQkJCSAqIFdlIHByb2JhYmx5IHNob3VsZCBnbG9tIHRoZSBtYnVmIGNo
YWluCisJCQkJICogZnJvbSB0aGUgY2hrLT5kYXRhIGZvciBjb250cm9sIGJ1dCB0aGUKKwkJCQkg
KiBwcm9ibGVtIGlzIGl0IGJlY29tZXMgeWV0IG9uZSBtb3JlIGxldmVsCisJCQkJICogb2YgdHJh
Y2tpbmcgdG8gZG8gaWYgZm9yIHNvbWUgcmVhc29uCisJCQkJICogb3V0cHV0IGZhaWxzLiBUaGVu
IEkgaGF2ZSBnb3QgdG8KKwkJCQkgKiByZWNvbnN0cnVjdCB0aGUgbWVyZ2VkIGNvbnRyb2wgY2hh
aW4uLiBlbAorCQkJCSAqIHl1Y2tvLi4gZm9yIG5vdyB3ZSB0YWtlIHRoZSBlYXN5IHdheSBhbmQK
KwkJCQkgKiBkbyB0aGUgY29weQorCQkJCSAqLworCQkJCS8qCisJCQkJICogQWRkIGFuIEFVVEgg
Y2h1bmssIGlmIGNodW5rIHJlcXVpcmVzIGl0CisJCQkJICogc2F2ZSB0aGUgb2Zmc2V0IGludG8g
dGhlIGNoYWluIGZvciBBVVRICisJCQkJICovCisJCQkJaWYgKChhdXRoID09IE5VTEwpICYmCisJ
CQkJICAgIChzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2hrLT5yZWMuY2h1bmtfaWQuaWQs
CisJCQkJCQkJCSBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3MpKSkgeworCQkJCQlvdXRjaGFp
biA9IHNjdHBfYWRkX2F1dGhfY2h1bmsob3V0Y2hhaW4sCisJCQkJCQkJCSAgICAgICAmZW5kb3V0
Y2hhaW4sCisJCQkJCQkJCSAgICAgICAmYXV0aCwKKwkJCQkJCQkJICAgICAgICZhdXRoX29mZnNl
dCwKKwkJCQkJCQkJICAgICAgIHN0Y2IsCisJCQkJCQkJCSAgICAgICBjaGstPnJlYy5jaHVua19p
ZC5pZCk7CisJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1
bmtzKTsKKwkJCQl9CisJCQkJb3V0Y2hhaW4gPSBzY3RwX2NvcHlfbWJ1ZmNoYWluKGNoay0+ZGF0
YSwgb3V0Y2hhaW4sICZlbmRvdXRjaGFpbiwKKwkJCQkJCQkgICAgICAgKGludCljaGstPnJlYy5j
aHVua19pZC5jYW5fdGFrZV9kYXRhLAorCQkJCQkJCSAgICAgICBjaGstPnNlbmRfc2l6ZSwgY2hr
LT5jb3B5X2J5X3JlZik7CisJCQkJaWYgKG91dGNoYWluID09IE5VTEwpIHsKKwkJCQkJKnJlYXNv
bl9jb2RlID0gODsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJ
CX0KKwkJCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7
CisJCQkJLyogdXBkYXRlIG91ciBNVFUgc2l6ZSAqLworCQkJCWlmIChtdHUgPiAoY2hrLT5zZW5k
X3NpemUgKyBvbXR1KSkKKwkJCQkJbXR1IC09IChjaGstPnNlbmRfc2l6ZSArIG9tdHUpOworCQkJ
CWVsc2UKKwkJCQkJbXR1ID0gMDsKKwkJCQl0b19vdXQgKz0gKGNoay0+c2VuZF9zaXplICsgb210
dSk7CisJCQkJLyogRG8gY2xlYXIgSVBfREYgPyAqLworCQkJCWlmIChjaGstPmZsYWdzICYgQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0spIHsKKwkJCQkJbm9fZnJhZ21lbnRmbGcgPSAwOworCQkJCX0K
KwkJCQlpZiAoY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSkKKwkJCQkJY2hrLT5kYXRh
ID0gTlVMTDsKKwkJCQkvKiBNYXJrIHRoaW5ncyB0byBiZSByZW1vdmVkLCBpZiBuZWVkZWQgKi8K
KwkJCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfU0VMRUNUSVZFX0FDSykgfHwK
KwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfTlJfU0VMRUNUSVZFX0FDSykg
fHwgLyogRVkgKi8KKwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfSEVBUlRC
RUFUX1JFUVVFU1QpIHx8CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hF
QVJUQkVBVF9BQ0spIHx8CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NI
VVRET1dOKSB8fAorCQkJCSAgICAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9TSFVURE9X
Tl9BQ0spIHx8CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX09QRVJBVElP
Tl9FUlJPUikgfHwKKwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQ09PS0lF
X0FDSykgfHwKKwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRUNOX0NXUikg
fHwKKwkJCQkgICAgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfUEFDS0VUX0RST1BQRUQp
IHx8CisJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0FTQ09ORl9BQ0spKSB7
CisJCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNU
KSB7CisJCQkJCQloYmZsYWcgPSAxOworCQkJCQl9CisJCQkJCS8qIHJlbW92ZSB0aGVzZSBjaHVu
a3MgYXQgdGhlIGVuZCAqLworCQkJCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBf
U0VMRUNUSVZFX0FDSykgfHwKKwkJCQkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQ
X05SX1NFTEVDVElWRV9BQ0spKSB7CisJCQkJCQkvKiB0dXJuIG9mZiB0aGUgdGltZXIgKi8KKwkJ
CQkJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJnN0Y2ItPmFzb2MuZGFja190aW1lci50aW1l
cikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJ
CQkJCQlpbnAsIHN0Y2IsIG5ldCwKKwkJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1ND
VFBfT1VUUFVUICsgU0NUUF9MT0NfMSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJY3RsX2NudCsr
OworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSAqIE90aGVyIGNodW5rcywgc2luY2UgdGhl
eSBoYXZlCisJCQkJCSAqIHRpbWVycyBydW5uaW5nIChpLmUuIENPT0tJRSkKKwkJCQkJICogd2Ug
anVzdCAidHJ1c3QiIHRoYXQgaXQKKwkJCQkJICogZ2V0cyBzZW50IG9yIHJldHJhbnNtaXR0ZWQu
CisJCQkJCSAqLworCQkJCQljdGxfY250Kys7CisJCQkJCWlmIChjaGstPnJlYy5jaHVua19pZC5p
ZCA9PSBTQ1RQX0NPT0tJRV9FQ0hPKSB7CisJCQkJCQljb29raWUgPSAxOworCQkJCQkJbm9fb3V0
X2NudCA9IDE7CisJCQkJCX0gZWxzZSBpZiAoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9F
Q05fRUNITykgeworCQkJCQkJLyoKKwkJCQkJCSAqIEluY3JlbWVudCBlY25lIHNlbmQgY291bnQg
aGVyZQorCQkJCQkJICogdGhpcyBtZWFucyB3ZSBtYXkgYmUgb3Zlci16ZWFsb3VzIGluCisJCQkJ
CQkgKiBvdXIgY291bnRpbmcgaWYgdGhlIHNlbmQgZmFpbHMsIGJ1dCBpdHMKKwkJCQkJCSAqIHRo
ZSBiZXN0IHBsYWNlIHRvIGRvIGl0ICh3ZSB1c2VkIHRvIGRvCisJCQkJCQkgKiBpdCBpbiB0aGUg
cXVldWUgb2YgdGhlIGNodW5rLCBidXQgdGhhdCBkaWQKKwkJCQkJCSAqIG5vdCB0ZWxsIGhvdyBt
YW55IHRpbWVzIGl0IHdhcyBzZW50LgorCQkJCQkJICovCisJCQkJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kZWNuZSk7CisJCQkJCX0KKwkJCQkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9T
RU5UOworCQkJCQlpZiAoY2hrLT53aG9UbyA9PSBOVUxMKSB7CisJCQkJCQljaGstPndob1RvID0g
bmV0OworCQkJCQkJYXRvbWljX2FkZF9pbnQoJm5ldC0+cmVmX2NvdW50LCAxKTsKKwkJCQkJfQor
CQkJCQljaGstPnNuZF9jb3VudCsrOworCQkJCX0KKwkJCQlpZiAobXR1ID09IDApIHsKKwkJCQkJ
LyoKKwkJCQkJICogT2sgd2UgYXJlIG91dCBvZiByb29tIGJ1dCB3ZSBjYW4KKwkJCQkJICogb3V0
cHV0IHdpdGhvdXQgZWZmZWN0aW5nIHRoZQorCQkJCQkgKiBmbGlnaHQgc2l6ZSBzaW5jZSB0aGlz
IGxpdHRsZSBndXkKKwkJCQkJICogaXMgYSBjb250cm9sIG9ubHkgcGFja2V0LgorCQkJCQkgKi8K
KwkJCQkJaWYgKGFzY29uZikgeworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfQVNDT05GLCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCQkvKgorCQkJCQkJICogZG8gTk9UIGNs
ZWFyIHRoZSBhc2NvbmYKKwkJCQkJCSAqIGZsYWcgYXMgaXQgaXMgdXNlZCB0byBkbworCQkJCQkJ
ICogYXBwcm9wcmlhdGUgc291cmNlIGFkZHJlc3MKKwkJCQkJCSAqIHNlbGVjdGlvbi4KKwkJCQkJ
CSAqLworCQkJCQl9CisJCQkJCWlmIChjb29raWUpIHsKKwkJCQkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX0NPT0tJRSwgaW5wLCBzdGNiLCBuZXQpOworCQkJCQkJY29va2llID0g
MDsKKwkJCQkJfQorCQkJCQkvKiBPbmx5IEhCIG9yIEFTQ09ORiBhZHZhbmNlcyB0aW1lICovCisJ
CQkJCWlmIChoYmZsYWcpIHsKKwkJCQkJCWlmICgqbm93X2ZpbGxlZCA9PSAwKSB7CisJCQkJCQkJ
KHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwobm93KTsKKwkJCQkJCQkqbm93X2ZpbGxlZCA9IDE7
CisJCQkJCQl9CisJCQkJCQluZXQtPmxhc3Rfc2VudF90aW1lID0gKm5vdzsKKwkJCQkJCWhiZmxh
ZyA9IDA7CisJCQkJCX0KKwkJCQkJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0
cHV0KGlucCwgc3RjYiwgbmV0LAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsCisJCQkJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRjaGFpbiwKKwkJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhfb2Zmc2V0LCBhdXRoLAorCQkJ
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RjYi0+YXNvYy5hdXRo
aW5mby5hY3RpdmVfa2V5aWQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub19mcmFnbWVudGZsZywgMCwgYXNjb25mLAorCQkJCQkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2xwb3J0LCBzdGNiLT5ycG9ydCwKKwkJ
CQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0b25sKHN0Y2ItPmFz
b2MucGVlcl92dGFnKSwKKwkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCwKKyNlbmRpZgorCQkJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKSkpIHsKKwkJ
CQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0cHV0ICovCisJCQkJCQlTQ1RQREJHKFNDVFBf
REVCVUdfT1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCQkJCQlpZiAo
ZnJvbV93aGVyZSA9PSAwKSB7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxl
cnJ1c3IpOworCQkJCQkJfQorCQkJCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQkJCQlh
c29jLT5pZnBfaGFkX2Vub2J1ZiA9IDE7CisJCQkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93
bGV2ZWxlcnIpOworCQkJCQkJfQorCQkJCQkJaWYgKGVycm9yID09IEVIT1NUVU5SRUFDSCkgewor
CQkJCQkJCS8qCisJCQkJCQkJICogRGVzdGluYXRpb24gd2VudAorCQkJCQkJCSAqIHVucmVhY2hh
YmxlCisJCQkJCQkJICogZHVyaW5nIHRoaXMgc2VuZAorCQkJCQkJCSAqLworCQkJCQkJCXNjdHBf
bW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJCSpyZWFzb25f
Y29kZSA9IDc7CisJCQkJCQlicmVhazsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWFzb2MtPmlmcF9o
YWRfZW5vYnVmID0gMDsKKwkJCQkJfQorCQkJCQkvKgorCQkJCQkgKiBpbmNyZWFzZSB0aGUgbnVt
YmVyIHdlIHNlbnQsIGlmIGEKKwkJCQkJICogY29va2llIGlzIHNlbnQgd2UgZG9uJ3QgdGVsbCB0
aGVtCisJCQkJCSAqIGFueSB3YXMgc2VudCBvdXQuCisJCQkJCSAqLworCQkJCQlvdXRjaGFpbiA9
IGVuZG91dGNoYWluID0gTlVMTDsKKwkJCQkJYXV0aCA9IE5VTEw7CisJCQkJCWF1dGhfb2Zmc2V0
ID0gMDsKKwkJCQkJaWYgKCFub19vdXRfY250KQorCQkJCQkJKm51bV9vdXQgKz0gY3RsX2NudDsK
KwkJCQkJLyogcmVjYWxjIGEgY2xlYW4gc2xhdGUgYW5kIHNldHVwICovCisJCQkJCXN3aXRjaCAo
bmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQkJCWNhc2Ug
QUZfSU5FVDoKKwkJCQkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlOX1Y0X09WRVJIRUFEOwor
CQkJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQkJCWNhc2UgQUZfSU5FVDY6
CisJCQkJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJCQlicmVh
azsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJCWNhc2UgQUZfQ09O
TjoKKwkJCQkJCQltdHUgPSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJ
CQkJYnJlYWs7CisjZW5kaWYKKwkJCQkJCWRlZmF1bHQ6CisJCQkJCQkJLyogVFNOSCAqLworCQkJ
CQkJCW10dSA9IG5ldC0+bXR1OworCQkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJCXRvX291dCA9
IDA7CisJCQkJCW5vX2ZyYWdtZW50ZmxnID0gMTsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKGVy
cm9yICE9IDApIHsKKwkJCS8qIHRyeSBuZXh0IG5ldCAqLworCQkJY29udGludWU7CisJCX0KKwkJ
LyogSlJJOiBpZiBkZXN0IGlzIGluIFBGIHN0YXRlLCBkbyBub3Qgc2VuZCBkYXRhIHRvIGl0ICov
CisJCWlmICgoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID4gMCkgJiYKKwkJICAgIChuZXQgIT0gc3Rj
Yi0+YXNvYy5hbHRlcm5hdGUpICYmCisJCSAgICAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERS
X1BGKSkgeworCQkJZ290byBub19kYXRhX2ZpbGw7CisJCX0KKwkJaWYgKG5ldC0+ZmxpZ2h0X3Np
emUgPj0gbmV0LT5jd25kKSB7CisJCQlnb3RvIG5vX2RhdGFfZmlsbDsKKwkJfQorCQlpZiAoKGFz
b2MtPnNjdHBfY210X29uX29mZiA+IDApICYmCisJCSAgICAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2J1ZmZlcl9zcGxpdHRpbmcpICYgU0NUUF9SRUNWX0JVRkZFUl9TUExJVFRJTkcpICYmCisJCSAg
ICAobmV0LT5mbGlnaHRfc2l6ZSA+IG1heF9yd25kX3Blcl9kZXN0KSkgeworCQkJZ290byBub19k
YXRhX2ZpbGw7CisJCX0KKwkJLyoKKwkJICogV2UgbmVlZCBhIHNwZWNpZmljIGFjY291bnRpbmcg
Zm9yIHRoZSB1c2FnZSBvZiB0aGUKKwkJICogc2VuZCBidWZmZXIuIFdlIGFsc28gbmVlZCB0byBj
aGVjayB0aGUgbnVtYmVyIG9mIG1lc3NhZ2VzCisJCSAqIHBlciBuZXQuIEZvciBub3csIHRoaXMg
aXMgYmV0dGVyIHRoYW4gbm90aGluZyBhbmQgaXQKKwkJICogZGlzYWJsZWQgYnkgZGVmYXVsdC4u
LgorCQkgKi8KKwkJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCQkgICAgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0aW5nKSAmIFNDVFBfU0VORF9CVUZGRVJf
U1BMSVRUSU5HKSAmJgorCQkgICAgKG1heF9zZW5kX3Blcl9kZXN0ID4gMCkgJiYKKwkJICAgIChu
ZXQtPmZsaWdodF9zaXplID4gbWF4X3NlbmRfcGVyX2Rlc3QpKSB7CisJCQlnb3RvIG5vX2RhdGFf
ZmlsbDsKKwkJfQorCQkvKioqKioqKioqKioqKioqKioqKioqLworCQkvKiBEYXRhIHRyYW5zbWlz
c2lvbiAqLworCQkvKioqKioqKioqKioqKioqKioqKioqLworCQkvKgorCQkgKiBpZiBBVVRIIGZv
ciBEQVRBIGlzIHJlcXVpcmVkIGFuZCBubyBBVVRIIGhhcyBiZWVuIGFkZGVkCisJCSAqIHlldCwg
YWNjb3VudCBmb3IgdGhpcyBpbiB0aGUgbXR1IG5vdy4uLiBpZiBubyBkYXRhIGNhbiBiZQorCQkg
KiBidW5kbGVkLCB0aGlzIGFkanVzdG1lbnQgd29uJ3QgbWF0dGVyIGFueXdheXMgc2luY2UgdGhl
CisJCSAqIHBhY2tldCB3aWxsIGJlIGdvaW5nIG91dC4uLgorCQkgKi8KKwkJZGF0YV9hdXRoX3Jl
cWQgPSBzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLAorCQkJCQkJCSAgICAg
c3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKTsKKwkJaWYgKGRhdGFfYXV0aF9yZXFkICYmIChh
dXRoID09IE5VTEwpKSB7CisJCQltdHUgLT0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+
YXNvYy5wZWVyX2htYWNfaWQpOworCQl9CisJCS8qIG5vdyBsZXRzIGFkZCBhbnkgZGF0YSB3aXRo
aW4gdGhlIE1UVSBjb25zdHJhaW50cyAqLworCQlzd2l0Y2ggKCgoc3RydWN0IHNvY2thZGRyICop
Jm5ldC0+cm8uX2xfYWRkciktPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2FzZSBBRl9J
TkVUOgorCQkJaWYgKG5ldC0+bXR1ID4gU0NUUF9NSU5fVjRfT1ZFUkhFQUQpCisJCQkJb210dSA9
IG5ldC0+bXR1IC0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQllbHNlCisJCQkJb210dSA9IDA7
CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlp
ZiAobmV0LT5tdHUgPiBTQ1RQX01JTl9PVkVSSEVBRCkKKwkJCQlvbXR1ID0gbmV0LT5tdHUgLSBT
Q1RQX01JTl9PVkVSSEVBRDsKKwkJCWVsc2UKKwkJCQlvbXR1ID0gMDsKKwkJCWJyZWFrOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlpZiAo
bmV0LT5tdHUgPiBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKSB7CisJCQkJb210dSA9IG5ldC0+bXR1
IC0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCX0gZWxzZSB7CisJCQkJb210dSA9IDA7CisJ
CQl9CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJLyogVFNOSCAqLworCQkJb210
dSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKCgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9PUEVOKSB8fAorCQkgICAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NU
UF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpICYmCisJCSAgICAgKHNraXBfZGF0YV9mb3JfdGhp
c19uZXQgPT0gMCkpIHx8CisJCSAgICAoY29va2llKSkgeworCQkJVEFJTFFfRk9SRUFDSF9TQUZF
KGNoaywgJmFzb2MtPnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykgeworCQkJCWlmIChub19k
YXRhX2NodW5rcykgeworCQkJCQkvKiBsZXQgb25seSBjb250cm9sIGdvIG91dCAqLworCQkJCQkq
cmVhc29uX2NvZGUgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKG5ldC0+ZmxpZ2h0
X3NpemUgPj0gbmV0LT5jd25kKSB7CisJCQkJCS8qIHNraXAgdGhpcyBuZXQsIG5vIHJvb20gZm9y
IGRhdGEgKi8KKwkJCQkJKnJlYXNvbl9jb2RlID0gMjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
CWlmICgoY2hrLT53aG9UbyAhPSBOVUxMKSAmJgorCQkJCSAgICAoY2hrLT53aG9UbyAhPSBuZXQp
KSB7CisJCQkJCS8qIERvbid0IHNlbmQgdGhlIGNodW5rIG9uIHRoaXMgbmV0ICovCisJCQkJCWNv
bnRpbnVlOworCQkJCX0KKworCQkJCWlmIChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPT0gMCkgewor
CQkJCQlpZiAoKGFzb2MtPmFsdGVybmF0ZSkgJiYKKwkJCQkJICAgIChhc29jLT5hbHRlcm5hdGUg
IT0gbmV0KSAmJgorCQkJCQkgICAgKGNoay0+d2hvVG8gPT0gTlVMTCkpIHsKKwkJCQkJCWNvbnRp
bnVlOworCQkJCQl9IGVsc2UgaWYgKChuZXQgIT0gYXNvYy0+cHJpbWFyeV9kZXN0aW5hdGlvbikg
JiYKKwkJCQkJCSAgIChhc29jLT5hbHRlcm5hdGUgPT0gTlVMTCkgJiYKKwkJCQkJCSAgIChjaGst
Pndob1RvID09IE5VTEwpKSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCX0KKwkJCQlp
ZiAoKGNoay0+c2VuZF9zaXplID4gb210dSkgJiYgKChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1Nf
RlJBR01FTlRfT0spID09IDApKSB7CisJCQkJCS8qLQorCQkJCQkgKiBzdHJhbmdlLCB3ZSBoYXZl
IGEgY2h1bmsgdGhhdCBpcworCQkJCQkgKiB0byBiaWcgZm9yIGl0cyBkZXN0aW5hdGlvbiBhbmQK
KwkJCQkJICogeWV0IG5vIGZyYWdtZW50IG9rIGZsYWcuCisJCQkJCSAqIFNvbWV0aGluZyB3ZW50
IHdyb25nIHdoZW4gdGhlCisJCQkJCSAqIFBNVFUgY2hhbmdlZC4uLndlIGRpZCBub3QgbWFyawor
CQkJCQkgKiB0aGlzIGNodW5rIGZvciBzb21lIHJlYXNvbj8/IEkKKwkJCQkJICogd2lsbCBmaXgg
aXQgaGVyZSBieSBsZXR0aW5nIElQCisJCQkJCSAqIGZyYWdtZW50IGl0IGZvciBub3cgYW5kIHBy
aW50aW5nCisJCQkJCSAqIGEgd2FybmluZy4gVGhpcyByZWFsbHkgc2hvdWxkIG5vdAorCQkJCQkg
KiBoYXBwZW4gLi4uCisJCQkJCSAqLworCQkJCQlTQ1RQX1BSSU5URigiV2FybmluZyBjaHVuayBv
ZiAlZCBieXRlcyA+IG10dTolZCBhbmQgeWV0IFBNVFUgZGlzYyBtaXNzZWRcbiIsCisJCQkJCQkg
ICAgY2hrLT5zZW5kX3NpemUsIG10dSk7CisJCQkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1Nf
RlJBR01FTlRfT0s7CisJCQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxl
X3NhY2tfaW1tZWRpYXRlbHkpICYmCisJCQkJICAgICgoYXNvYy0+c3RhdGUgJiBTQ1RQX1NUQVRF
X1NIVVRET1dOX1BFTkRJTkcpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJ
CQkJc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqZGNoa2g7CisKKwkJCQkJZGNoa2ggPSBtdG9kKGNo
ay0+ZGF0YSwgc3RydWN0IHNjdHBfZGF0YV9jaHVuayAqKTsKKwkJCQkJZGNoa2gtPmNoLmNodW5r
X2ZsYWdzIHw9IFNDVFBfREFUQV9TQUNLX0lNTUVESUFURUxZOworCQkJCX0KKwkJCQlpZiAoKChj
aGstPnNlbmRfc2l6ZSA8PSBtdHUpICYmIChjaGstPnNlbmRfc2l6ZSA8PSByX210dSkpIHx8CisJ
CQkJICAgICgoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSAmJiAoY2hrLT5z
ZW5kX3NpemUgPD0gYXNvYy0+cGVlcnNfcnduZCkpKSB7CisJCQkJCS8qIG9rIHdlIHdpbGwgYWRk
IHRoaXMgb25lICovCisKKwkJCQkJLyoKKwkJCQkJICogQWRkIGFuIEFVVEggY2h1bmssIGlmIGNo
dW5rCisJCQkJCSAqIHJlcXVpcmVzIGl0LCBzYXZlIHRoZSBvZmZzZXQgaW50bworCQkJCQkgKiB0
aGUgY2hhaW4gZm9yIEFVVEgKKwkJCQkJICovCisJCQkJCWlmIChkYXRhX2F1dGhfcmVxZCkgewor
CQkJCQkJaWYgKGF1dGggPT0gTlVMTCkgeworCQkJCQkJCW91dGNoYWluID0gc2N0cF9hZGRfYXV0
aF9jaHVuayhvdXRjaGFpbiwKKwkJCQkJCQkJCQkgICAgICAgJmVuZG91dGNoYWluLAorCQkJCQkJ
CQkJCSAgICAgICAmYXV0aCwKKwkJCQkJCQkJCQkgICAgICAgJmF1dGhfb2Zmc2V0LAorCQkJCQkJ
CQkJCSAgICAgICBzdGNiLAorCQkJCQkJCQkJCSAgICAgICBTQ1RQX0RBVEEpOworCQkJCQkJCWF1
dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7CisJCQkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJ
CQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJ
CQkJCX0gZWxzZSBpZiAob3ZlcnJpZGVfb2spIHsKKwkJCQkJCQkvKiB1c2UgdGhpcyBkYXRhJ3Mg
a2V5aWQgKi8KKwkJCQkJCQlhdXRoX2tleWlkID0gY2hrLT5hdXRoX2tleWlkOworCQkJCQkJCW92
ZXJyaWRlX29rID0gMDsKKwkJCQkJCX0gZWxzZSBpZiAoYXV0aF9rZXlpZCAhPSBjaGstPmF1dGhf
a2V5aWQpIHsKKwkJCQkJCQkvKiBkaWZmZXJlbnQga2V5aWQsIHNvIGRvbmUgYnVuZGxpbmcgKi8K
KwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlvdXRjaGFpbiA9IHNjdHBfY29w
eV9tYnVmY2hhaW4oY2hrLT5kYXRhLCBvdXRjaGFpbiwgJmVuZG91dGNoYWluLCAwLAorCQkJCQkJ
CQkgICAgICAgY2hrLT5zZW5kX3NpemUsIGNoay0+Y29weV9ieV9yZWYpOworCQkJCQlpZiAob3V0
Y2hhaW4gPT0gTlVMTCkgeworCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJObyBt
ZW1vcnk/XG4iKTsKKwkJCQkJCWlmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90
aW1lci50aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
RU5ELCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCQl9CisJCQkJCQkqcmVhc29uX2NvZGUgPSAzOwor
CQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRU5PTUVNKTsKKwkJCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCQkJfQorCQkJCQkv
KiB1cGF0ZSBvdXIgTVRVIHNpemUgKi8KKwkJCQkJLyogRG8gY2xlYXIgSVBfREYgPyAqLworCQkJ
CQlpZiAoY2hrLT5mbGFncyAmIENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSB7CisJCQkJCQlub19m
cmFnbWVudGZsZyA9IDA7CisJCQkJCX0KKwkJCQkJLyogdW5zaWduZWQgc3VidHJhY3Rpb24gb2Yg
bXR1ICovCisJCQkJCWlmIChtdHUgPiBjaGstPnNlbmRfc2l6ZSkKKwkJCQkJCW10dSAtPSBjaGst
PnNlbmRfc2l6ZTsKKwkJCQkJZWxzZQorCQkJCQkJbXR1ID0gMDsKKwkJCQkJLyogdW5zaWduZWQg
c3VidHJhY3Rpb24gb2Ygcl9tdHUgKi8KKwkJCQkJaWYgKHJfbXR1ID4gY2hrLT5zZW5kX3NpemUp
CisJCQkJCQlyX210dSAtPSBjaGstPnNlbmRfc2l6ZTsKKwkJCQkJZWxzZQorCQkJCQkJcl9tdHUg
PSAwOworCisJCQkJCXRvX291dCArPSBjaGstPnNlbmRfc2l6ZTsKKwkJCQkJaWYgKCh0b19vdXQg
PiBteF9tdHUpICYmIG5vX2ZyYWdtZW50ZmxnKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCQkJ
cGFuaWMoIkV4Y2VlZGluZyBtdHUgb2YgJWQgb3V0IHNpemUgaXMgJWQiLCBteF9tdHUsIHRvX291
dCk7CisjZWxzZQorCQkJCQkJU0NUUF9QUklOVEYoIkV4Y2VlZGluZyBtdHUgb2YgJWQgb3V0IHNp
emUgaXMgJWRcbiIsCisJCQkJCQkJICAgIG14X210dSwgdG9fb3V0KTsKKyNlbmRpZgorCQkJCQl9
CisJCQkJCWNoay0+d2luZG93X3Byb2JlID0gMDsKKwkJCQkJZGF0YV9saXN0W2J1bmRsZV9hdCsr
XSA9IGNoazsKKwkJCQkJaWYgKGJ1bmRsZV9hdCA+PSBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSB7
CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdS
QU1fVU5TRU5UKSB7CisJCQkJCQlpZiAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9E
QVRBX1VOT1JERVJFRCkgPT0gMCkgeworCQkJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChz
Y3Rwc19vdXRvcmRlcmNodW5rcyk7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCVNDVFBfU1RBVF9J
TkNSX0NPVU5URVI2NChzY3Rwc19vdXR1bm9yZGVyY2h1bmtzKTsKKwkJCQkJCX0KKwkJCQkJCWlm
ICgoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgPT0gU0NU
UF9EQVRBX0xBU1RfRlJBRykgJiYKKwkJCQkJCSAgICAoKGNoay0+cmVjLmRhdGEucmN2X2ZsYWdz
ICYgU0NUUF9EQVRBX0ZJUlNUX0ZSQUcpID09IDApKQorCQkJCQkJCS8qIENvdW50IG51bWJlciBv
ZiB1c2VyIG1zZydzIHRoYXQgd2VyZSBmcmFnbWVudGVkCisJCQkJCQkJICogd2UgZG8gdGhpcyBi
eSBjb3VudGluZyB3aGVuIHdlIHNlZSBhIExBU1QgZnJhZ21lbnQKKwkJCQkJCQkgKiBvbmx5Lgor
CQkJCQkJCSAqLworCQkJCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19mcmFndXNy
bXNncyk7CisJCQkJCX0KKwkJCQkJaWYgKChtdHUgPT0gMCkgfHwgKHJfbXR1ID09IDApIHx8IChv
bmVfY2h1bmspKSB7CisJCQkJCQlpZiAoKG9uZV9jaHVuaykgJiYgKHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0ID09IDApKSB7CisJCQkJCQkJZGF0YV9saXN0WzBdLT53aW5kb3dfcHJvYmUgPSAxOwor
CQkJCQkJCW5ldC0+d2luZG93X3Byb2JlID0gMTsKKwkJCQkJCX0KKwkJCQkJCWJyZWFrOworCQkJ
CQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTXVzdCBiZSBzZW50IGluIG9yZGVy
IG9mIHRoZQorCQkJCQkgKiBUU04ncyAob24gYSBuZXR3b3JrKQorCQkJCQkgKi8KKwkJCQkJYnJl
YWs7CisJCQkJfQorCQkJfQkvKiBmb3IgKGNodW5rIGdhdGhlciBsb29wIGZvciB0aGlzIG5ldCkg
Ki8KKwkJfQkJLyogaWYgYXNvYy5zdGF0ZSBPUEVOICovCisJbm9fZGF0YV9maWxsOgorCQkvKiBJ
cyB0aGVyZSBzb21ldGhpbmcgdG8gc2VuZCBmb3IgdGhpcyBkZXN0aW5hdGlvbj8gKi8KKwkJaWYg
KG91dGNoYWluKSB7CisJCQkvKiBXZSBtYXkgbmVlZCB0byBzdGFydCBhIGNvbnRyb2wgdGltZXIg
b3IgdHdvICovCisJCQlpZiAoYXNjb25mKSB7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfQVNDT05GLCBpbnAsCisJCQkJCQkgc3RjYiwgbmV0KTsKKwkJCQkvKgorCQkJCSAq
IGRvIE5PVCBjbGVhciB0aGUgYXNjb25mIGZsYWcgYXMgaXQgaXMgdXNlZAorCQkJCSAqIHRvIGRv
IGFwcHJvcHJpYXRlIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbi4KKwkJCQkgKi8KKwkJCX0KKwkJ
CWlmIChjb29raWUpIHsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9DT09L
SUUsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQljb29raWUgPSAwOworCQkJfQorCQkJLyogbXVzdCBz
dGFydCBhIHNlbmQgdGltZXIgaWYgZGF0YSBpcyBiZWluZyBzZW50ICovCisJCQlpZiAoYnVuZGxl
X2F0ICYmICghU0NUUF9PU19USU1FUl9QRU5ESU5HKCZuZXQtPnJ4dF90aW1lci50aW1lcikpKSB7
CisJCQkJLyoKKwkJCQkgKiBubyB0aW1lciBydW5uaW5nIG9uIHRoaXMgZGVzdGluYXRpb24KKwkJ
CQkgKiByZXN0YXJ0IGl0LgorCQkJCSAqLworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0KTsKKwkJCX0KKwkJCWlmIChidW5kbGVfYXQgfHwg
aGJmbGFnKSB7CisJCQkJLyogRm9yIGRhdGEvYXNjb25mIGFuZCBoYiBzZXQgdGltZSAqLworCQkJ
CWlmICgqbm93X2ZpbGxlZCA9PSAwKSB7CisJCQkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFM
KG5vdyk7CisJCQkJCSpub3dfZmlsbGVkID0gMTsKKwkJCQl9CisJCQkJbmV0LT5sYXN0X3NlbnRf
dGltZSA9ICpub3c7CisJCQl9CisJCQkvKiBOb3cgc2VuZCBpdCwgaWYgdGhlcmUgaXMgYW55dGhp
bmcgdG8gc2VuZCA6PiAqLworCQkJaWYgKChlcnJvciA9IHNjdHBfbG93bGV2ZWxfY2h1bmtfb3V0
cHV0KGlucCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNi
LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldCwKKwkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICop
Jm5ldC0+cm8uX2xfYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRjaGFpbiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRoX29mZnNldCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBhdXRoLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF1dGhf
a2V5aWQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZnJh
Z21lbnRmbGcsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVu
ZGxlX2F0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzY29u
ZiwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBf
bHBvcnQsIHN0Y2ItPnJwb3J0LAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBuZXQtPnBvcnQsIE5VTEwsCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw
LAorI2VuZGlmCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29f
bG9ja2VkKSkpIHsKKwkJCQkvKiBlcnJvciwgd2UgY291bGQgbm90IG91dHB1dCAqLworCQkJCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsK
KwkJCQlpZiAoZnJvbV93aGVyZSA9PSAwKSB7CisJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2xv
d2xldmVsZXJydXNyKTsKKwkJCQl9CisJCQkJaWYgKGVycm9yID09IEVOT0JVRlMpIHsKKwkJCQkJ
YXNvYy0+aWZwX2hhZF9lbm9idWYgPSAxOworCQkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3ds
ZXZlbGVycik7CisJCQkJfQorCQkJCWlmIChlcnJvciA9PSBFSE9TVFVOUkVBQ0gpIHsKKwkJCQkJ
LyoKKwkJCQkJICogRGVzdGluYXRpb24gd2VudCB1bnJlYWNoYWJsZQorCQkJCQkgKiBkdXJpbmcg
dGhpcyBzZW5kCisJCQkJCSAqLworCQkJCQlzY3RwX21vdmVfY2h1bmtzX2Zyb21fbmV0KHN0Y2Is
IG5ldCk7CisJCQkJfQorCQkJCSpyZWFzb25fY29kZSA9IDY7CisJCQkJLyotCisJCQkJICogSSBh
ZGQgdGhpcyBsaW5lIHRvIGJlIHBhcmFub2lkLiBBcyBmYXIgYXMKKwkJCQkgKiBJIGNhbiB0ZWxs
IHRoZSBjb250aW51ZSwgdGFrZXMgdXMgYmFjayB0bworCQkJCSAqIHRoZSB0b3Agb2YgdGhlIGZv
ciwgYnV0IGp1c3QgdG8gbWFrZSBzdXJlCisJCQkJICogSSB3aWxsIHJlc2V0IHRoZXNlIGFnYWlu
IGhlcmUuCisJCQkJICovCisJCQkJY3RsX2NudCA9IGJ1bmRsZV9hdCA9IDA7CisJCQkJY29udGlu
dWU7IC8qIFRoaXMgdGFrZXMgdXMgYmFjayB0byB0aGUgZm9yKCkgZm9yIHRoZSBuZXRzLiAqLwor
CQkJfSBlbHNlIHsKKwkJCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJCQl9CisJCQllbmRv
dXRjaGFpbiA9IE5VTEw7CisJCQlhdXRoID0gTlVMTDsKKwkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJ
CWlmICghbm9fb3V0X2NudCkgeworCQkJCSpudW1fb3V0ICs9IChjdGxfY250ICsgYnVuZGxlX2F0
KTsKKwkJCX0KKwkJCWlmIChidW5kbGVfYXQpIHsKKwkJCQkvKiBzZXR1cCBmb3IgYSBSVE8gbWVh
c3VyZW1lbnQgKi8KKwkJCQl0c25zX3NlbnQgPSBkYXRhX2xpc3RbMF0tPnJlYy5kYXRhLnRzbjsK
KwkJCQkvKiBmaWxsIHRpbWUgaWYgbm90IGFscmVhZHkgZmlsbGVkICovCisJCQkJaWYgKCpub3df
ZmlsbGVkID09IDApIHsKKwkJCQkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmFzb2MtPnRp
bWVfbGFzdF9zZW50KTsKKwkJCQkJKm5vd19maWxsZWQgPSAxOworCQkJCQkqbm93ID0gYXNvYy0+
dGltZV9sYXN0X3NlbnQ7CisJCQkJfSBlbHNlIHsKKwkJCQkJYXNvYy0+dGltZV9sYXN0X3NlbnQg
PSAqbm93OworCQkJCX0KKwkJCQlpZiAobmV0LT5ydG9fbmVlZGVkKSB7CisJCQkJCWRhdGFfbGlz
dFswXS0+ZG9fcnR0ID0gMTsKKwkJCQkJbmV0LT5ydG9fbmVlZGVkID0gMDsKKwkJCQl9CisJCQkJ
U0NUUF9TVEFUX0lOQ1JfQlkoc2N0cHNfc2VuZGRhdGEsIGJ1bmRsZV9hdCk7CisJCQkJc2N0cF9j
bGVhbl91cF9kYXRhbGlzdChzdGNiLCBhc29jLCBkYXRhX2xpc3QsIGJ1bmRsZV9hdCwgbmV0KTsK
KwkJCX0KKwkJCWlmIChvbmVfY2h1bmspIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgdHNuc19zZW50LCBTQ1RQX0NX
TkRfTE9HX0ZST01fU0VORCk7CisJCX0KKwl9CisJaWYgKG9sZF9zdGFydF9hdCA9PSBOVUxMKSB7
CisJCW9sZF9zdGFydF9hdCA9IHN0YXJ0X2F0OworCQlzdGFydF9hdCA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5uZXRzKTsKKwkJaWYgKG9sZF9zdGFydF9hdCkKKwkJCWdvdG8gYWdhaW5fb25lX21vcmVf
dGltZTsKKwl9CisKKwkvKgorCSAqIEF0IHRoZSBlbmQgdGhlcmUgc2hvdWxkIGJlIG5vIE5PTiB0
aW1lZCBjaHVua3MgaGFuZ2luZyBvbiB0aGlzCisJICogcXVldWUuCisJICovCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5HX0VOQUJM
RSkgeworCQlzY3RwX2xvZ19jd25kKHN0Y2IsIG5ldCwgKm51bV9vdXQsIFNDVFBfQ1dORF9MT0df
RlJPTV9TRU5EKTsKKwl9CisJaWYgKCgqbnVtX291dCA9PSAwKSAmJiAoKnJlYXNvbl9jb2RlID09
IDApKSB7CisJCSpyZWFzb25fY29kZSA9IDQ7CisJfSBlbHNlIHsKKwkJKnJlYXNvbl9jb2RlID0g
NTsKKwl9CisJc2N0cF9jbGVhbl91cF9jdGwoc3RjYiwgYXNvYywgc29fbG9ja2VkKTsKKwlyZXR1
cm4gKDApOworfQorCit2b2lkCitzY3RwX3F1ZXVlX29wX2VycihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBtYnVmICpvcF9lcnIpCit7CisJLyotCisJICogUHJlcGVuZCBhIE9QRVJBVElP
TkFMX0VSUk9SIGNodW5rIGhlYWRlciBhbmQgcHV0IG9uIHRoZSBlbmQgb2YKKwkgKiB0aGUgY29u
dHJvbCBjaHVuayBxdWV1ZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlzdHJ1Y3QgbWJ1ZiAqbWF0LCAqbGFzdF9tYnVm
OworCXVpbnQzMl90IGNodW5rX2xlbmd0aDsKKwl1aW50MTZfdCBwYWRkaW5nX2xlbmd0aDsKKwor
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCVNDVFBfQlVGX1BSRVBFTkQob3BfZXJyLCBz
aXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpLCBNX05PV0FJVCk7CisJaWYgKG9wX2VyciA9PSBO
VUxMKSB7CisJCXJldHVybjsKKwl9CisJbGFzdF9tYnVmID0gTlVMTDsKKwljaHVua19sZW5ndGgg
PSAwOworCWZvciAobWF0ID0gb3BfZXJyOyBtYXQgIT0gTlVMTDsgbWF0ID0gU0NUUF9CVUZfTkVY
VChtYXQpKSB7CisJCWNodW5rX2xlbmd0aCArPSBTQ1RQX0JVRl9MRU4obWF0KTsKKwkJaWYgKFND
VFBfQlVGX05FWFQobWF0KSA9PSBOVUxMKSB7CisJCQlsYXN0X21idWYgPSBtYXQ7CisJCX0KKwl9
CisJaWYgKGNodW5rX2xlbmd0aCA+IFNDVFBfTUFYX0NIVU5LX0xFTkdUSCkgeworCQlzY3RwX21f
ZnJlZW0ob3BfZXJyKTsKKwkJcmV0dXJuOworCX0KKwlwYWRkaW5nX2xlbmd0aCA9IGNodW5rX2xl
bmd0aCAlIDQ7CisJaWYgKHBhZGRpbmdfbGVuZ3RoICE9IDApIHsKKwkJcGFkZGluZ19sZW5ndGgg
PSA0IC0gcGFkZGluZ19sZW5ndGg7CisJfQorCWlmIChwYWRkaW5nX2xlbmd0aCAhPSAwKSB7CisJ
CWlmIChzY3RwX2FkZF9wYWRfdG9tYnVmKGxhc3RfbWJ1ZiwgcGFkZGluZ19sZW5ndGgpID09IE5V
TEwpIHsKKwkJCXNjdHBfbV9mcmVlbShvcF9lcnIpOworCQkJcmV0dXJuOworCQl9CisJfQorCXNj
dHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBu
byBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKG9wX2Vycik7CisJCXJldHVybjsKKwl9CisJY2hr
LT5jb3B5X2J5X3JlZiA9IDA7CisJY2hrLT5zZW5kX3NpemUgPSAodWludDE2X3QpY2h1bmtfbGVu
Z3RoOworCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50
ID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPmRhdGEgPSBvcF9lcnI7CisJ
Y2hrLT53aG9UbyA9IE5VTEw7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX09QRVJBVElP
Tl9FUlJPUjsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMDsKKwloZHIgPSBt
dG9kKG9wX2Vyciwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVua190eXBlID0g
U0NUUF9PUEVSQVRJT05fRVJST1I7CisJaGRyLT5jaHVua19mbGFncyA9IDA7CisJaGRyLT5jaHVu
a19sZW5ndGggPSBodG9ucyhjaGstPnNlbmRfc2l6ZSk7CisJVEFJTFFfSU5TRVJUX1RBSUwoJmNo
ay0+YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJY2hrLT5hc29j
LT5jdHJsX3F1ZXVlX2NudCsrOworfQorCitpbnQKK3NjdHBfc2VuZF9jb29raWVfZWNobyhzdHJ1
Y3QgbWJ1ZiAqbSwKKyAgICBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJLyotCisJICogcHVsbCBvdXQgdGhlIGNv
b2tpZSBhbmQgcHV0IGl0IGF0IHRoZSBmcm9udCBvZiB0aGUgY29udHJvbCBjaHVuaworCSAqIHF1
ZXVlLgorCSAqLworCWludCBhdDsKKwlzdHJ1Y3QgbWJ1ZiAqY29va2llOworCXN0cnVjdCBzY3Rw
X3BhcmFtaGRyIHBhcmFtLCAqcGhkcjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqaGRyOworCXN0
cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwl1aW50MTZfdCBwdHlwZSwgcGxlbjsKKworCVND
VFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCS8qIEZpcnN0IGZpbmQgdGhlIGNvb2tpZSBpbiB0
aGUgcGFyYW0gYXJlYSAqLworCWNvb2tpZSA9IE5VTEw7CisJYXQgPSBvZmZzZXQgKyBzaXplb2Yo
c3RydWN0IHNjdHBfaW5pdF9jaHVuayk7CisJZm9yICg7OykgeworCQlwaGRyID0gc2N0cF9nZXRf
bmV4dF9wYXJhbShtLCBhdCwgJnBhcmFtLCBzaXplb2YocGFyYW0pKTsKKwkJaWYgKHBoZHIgPT0g
TlVMTCkgeworCQkJcmV0dXJuICgtMyk7CisJCX0KKwkJcHR5cGUgPSBudG9ocyhwaGRyLT5wYXJh
bV90eXBlKTsKKwkJcGxlbiA9IG50b2hzKHBoZHItPnBhcmFtX2xlbmd0aCk7CisJCWlmIChwdHlw
ZSA9PSBTQ1RQX1NUQVRFX0NPT0tJRSkgeworCQkJaW50IHBhZDsKKworCQkJLyogZm91bmQgdGhl
IGNvb2tpZSAqLworCQkJaWYgKChwYWQgPSAocGxlbiAlIDQpKSkgeworCQkJCXBsZW4gKz0gNCAt
IHBhZDsKKwkJCX0KKwkJCWNvb2tpZSA9IFNDVFBfTV9DT1BZTShtLCBhdCwgcGxlbiwgTV9OT1dB
SVQpOworCQkJaWYgKGNvb2tpZSA9PSBOVUxMKSB7CisJCQkJLyogTm8gbWVtb3J5ICovCisJCQkJ
cmV0dXJuICgtMik7CisJCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX01CVUZfTE9HR0lOR19FTkFC
TEUpIHsKKwkJCQlzY3RwX2xvZ19tYmMoY29va2llLCBTQ1RQX01CVUZfSUNPUFkpOworCQkJfQor
I2VuZGlmCisJCQlicmVhazsKKwkJfQorCQlhdCArPSBTQ1RQX1NJWkUzMihwbGVuKTsKKwl9CisJ
Lyogb2ssIHdlIGdvdCB0aGUgY29va2llIGxldHMgY2hhbmdlIGl0IGludG8gYSBjb29raWUgZWNo
byBjaHVuayAqLworCS8qIGZpcnN0IHRoZSBjaGFuZ2UgZnJvbSBwYXJhbSB0byBjb29raWUgKi8K
KwloZHIgPSBtdG9kKGNvb2tpZSwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVu
a190eXBlID0gU0NUUF9DT09LSUVfRUNITzsKKwloZHItPmNodW5rX2ZsYWdzID0gMDsKKwkvKiBn
ZXQgdGhlIGNodW5rIHN0dWZmIG5vdyBhbmQgcGxhY2UgaXQgaW4gdGhlIEZST05UIG9mIHRoZSBx
dWV1ZSAqLworCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVM
TCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9tX2ZyZWVtKGNvb2tpZSk7CisJCXJldHVy
biAoLTUpOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5p
ZCA9IFNDVFBfQ09PS0lFX0VDSE87CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9
IDA7CisJY2hrLT5mbGFncyA9IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LOworCWNoay0+c2VuZF9z
aXplID0gcGxlbjsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNu
ZF9jb3VudCA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gY29v
a2llOworCWNoay0+d2hvVG8gPSBuZXQ7CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJl
Zl9jb3VudCwgMSk7CisJVEFJTFFfSU5TRVJUX0hFQUQoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOwor
CXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBfc2VuZF9oZWFydGJlYXRfYWNrKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICBpbnQgb2Zmc2V0LAorICAg
IGludCBjaGtfbGVuZ3RoLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKgorCSAq
IHRha2UgYSBIQiByZXF1ZXN0IGFuZCBtYWtlIGl0IGludG8gYSBIQiBhY2sgYW5kIHNlbmQgaXQu
CisJICovCisJc3RydWN0IG1idWYgKm91dGNoYWluOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpj
aGRyOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCisJaWYgKG5ldCA9PSBOVUxM
KQorCQkvKiBtdXN0IGhhdmUgYSBuZXQgcG9pbnRlciAqLworCQlyZXR1cm47CisKKwlvdXRjaGFp
biA9IFNDVFBfTV9DT1BZTShtLCBvZmZzZXQsIGNoa19sZW5ndGgsIE1fTk9XQUlUKTsKKwlpZiAo
b3V0Y2hhaW4gPT0gTlVMTCkgeworCQkvKiBnYWsgb3V0IG9mIG1lbW9yeSAqLworCQlyZXR1cm47
CisJfQorI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xv
Z19tYmMob3V0Y2hhaW4sIFNDVFBfTUJVRl9JQ09QWSk7CisJfQorI2VuZGlmCisJY2hkciA9IG10
b2Qob3V0Y2hhaW4sIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoZHItPmNodW5rX3R5cGUg
PSBTQ1RQX0hFQVJUQkVBVF9BQ0s7CisJY2hkci0+Y2h1bmtfZmxhZ3MgPSAwOworCWlmIChjaGtf
bGVuZ3RoICUgNCkgeworCQkvKiBuZWVkIHBhZCAqLworCQl1aW50MzJfdCBjcHRoaXMgPSAwOwor
CQlpbnQgcGFkbGVuOworCisJCXBhZGxlbiA9IDQgLSAoY2hrX2xlbmd0aCAlIDQpOworCQltX2Nv
cHliYWNrKG91dGNoYWluLCBjaGtfbGVuZ3RoLCBwYWRsZW4sIChjYWRkcl90KSZjcHRoaXMpOwor
CX0KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsK
KwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShvdXRjaGFpbik7CisJCXJldHVybjsK
Kwl9CisJY2hrLT5jb3B5X2J5X3JlZiA9IDA7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQ
X0hFQVJUQkVBVF9BQ0s7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDE7CisJ
Y2hrLT5mbGFncyA9IDA7CisJY2hrLT5zZW5kX3NpemUgPSBjaGtfbGVuZ3RoOworCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPmFz
b2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPmRhdGEgPSBvdXRjaGFpbjsKKwljaGstPndob1RvID0g
bmV0OworCWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVRBSUxR
X0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25l
eHQpOworCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKK30KKwordm9pZAorc2N0cF9zZW5k
X2Nvb2tpZV9hY2soc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCS8qIGZvcm11bGF0ZSBhbmQg
cXVldWUgYSBjb29raWUtYWNrIGJhY2sgdG8gc2VuZGVyICovCisJc3RydWN0IG1idWYgKmNvb2tp
ZV9hY2s7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmhkcjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2No
dW5rICpjaGs7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKworCWNvb2tpZV9hY2sg
PSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgMCwg
TV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKGNvb2tpZV9hY2sgPT0gTlVMTCkgeworCQkv
KiBubyBtYnVmJ3MgKi8KKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNvb2tpZV9h
Y2ssIFNDVFBfTUlOX09WRVJIRUFEKTsKKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsK
KwlpZiAoY2hrID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShj
b29raWVfYWNrKTsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGst
PnJlYy5jaHVua19pZC5pZCA9IFNDVFBfQ09PS0lFX0FDSzsKKwljaGstPnJlYy5jaHVua19pZC5j
YW5fdGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdzID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IHNp
emVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9V
TlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOwor
CWNoay0+ZGF0YSA9IGNvb2tpZV9hY2s7CisJaWYgKGNoay0+YXNvYy0+bGFzdF9jb250cm9sX2No
dW5rX2Zyb20gIT0gTlVMTCkgeworCQljaGstPndob1RvID0gY2hrLT5hc29jLT5sYXN0X2NvbnRy
b2xfY2h1bmtfZnJvbTsKKwkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwg
MSk7CisJfSBlbHNlIHsKKwkJY2hrLT53aG9UbyA9IE5VTEw7CisJfQorCWhkciA9IG10b2QoY29v
a2llX2Fjaywgc3RydWN0IHNjdHBfY2h1bmtoZHIgKik7CisJaGRyLT5jaHVua190eXBlID0gU0NU
UF9DT09LSUVfQUNLOworCWhkci0+Y2h1bmtfZmxhZ3MgPSAwOworCWhkci0+Y2h1bmtfbGVuZ3Ro
ID0gaHRvbnMoY2hrLT5zZW5kX3NpemUpOworCVNDVFBfQlVGX0xFTihjb29raWVfYWNrKSA9IGNo
ay0+c2VuZF9zaXplOworCVRBSUxRX0lOU0VSVF9UQUlMKCZjaGstPmFzb2MtPmNvbnRyb2xfc2Vu
ZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsK
KwlyZXR1cm47Cit9CisKKwordm9pZAorc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwkvKiBmb3JtdWxhdGUgYW5k
IHF1ZXVlIGEgU0hVVERPV04tQUNLIGJhY2sgdG8gdGhlIHNlbmRlciAqLworCXN0cnVjdCBtYnVm
ICptX3NodXRkb3duX2FjazsKKwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9hY2tfY2h1bmsgKmFja19j
cDsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwltX3NodXRkb3duX2FjayA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5r
KSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKG1fc2h1dGRvd25fYWNrID09IE5V
TEwpIHsKKwkJLyogbm8gbWJ1ZidzICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfUkVTVl9V
RihtX3NodXRkb3duX2FjaywgU0NUUF9NSU5fT1ZFUkhFQUQpOworCXNjdHBfYWxsb2NfYV9jaHVu
ayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJ
c2N0cF9tX2ZyZWVtKG1fc2h1dGRvd25fYWNrKTsKKwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlf
YnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU0hVVERPV05fQUNLOwor
CWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAxOworCWNoay0+ZmxhZ3MgPSAwOwor
CWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwljaGstPnNl
bnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3VudCA9IDA7CisJY2hrLT5m
bGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5kYXRhID0gbV9zaHV0
ZG93bl9hY2s7CisJY2hrLT53aG9UbyA9IG5ldDsKKwlpZiAoY2hrLT53aG9UbykgeworCQlhdG9t
aWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwl9CisJYWNrX2NwID0gbXRv
ZChtX3NodXRkb3duX2Fjaywgc3RydWN0IHNjdHBfc2h1dGRvd25fYWNrX2NodW5rICopOworCWFj
a19jcC0+Y2guY2h1bmtfdHlwZSA9IFNDVFBfU0hVVERPV05fQUNLOworCWFja19jcC0+Y2guY2h1
bmtfZmxhZ3MgPSAwOworCWFja19jcC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5zZW5k
X3NpemUpOworCVNDVFBfQlVGX0xFTihtX3NodXRkb3duX2FjaykgPSBjaGstPnNlbmRfc2l6ZTsK
KwlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywg
c2N0cF9uZXh0KTsKKwljaGstPmFzb2MtPmN0cmxfcXVldWVfY250Kys7CisJcmV0dXJuOworfQor
Cit2b2lkCitzY3RwX3NlbmRfc2h1dGRvd24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQpCit7CisJLyogZm9ybXVsYXRlIGFuZCBxdWV1ZSBhIFNIVVRET1dOIHRv
IHRoZSBzZW5kZXIgKi8KKwlzdHJ1Y3QgbWJ1ZiAqbV9zaHV0ZG93bjsKKwlzdHJ1Y3Qgc2N0cF9z
aHV0ZG93bl9jaHVuayAqc2h1dGRvd25fY3A7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hr
OworCisJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX1NIVVRET1dO
KSB7CisJCQkvKiBXZSBhbHJlYWR5IGhhdmUgYSBTSFVURE9XTiBxdWV1ZWQuIFJldXNlIGl0LiAq
LworCQkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53
aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0K
KwlpZiAoY2hrID09IE5VTEwpIHsKKwkJbV9zaHV0ZG93biA9IHNjdHBfZ2V0X21idWZfZm9yX21z
ZyhzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspLCAwLCBNX05PV0FJVCwgMSwgTVRf
SEVBREVSKTsKKwkJaWYgKG1fc2h1dGRvd24gPT0gTlVMTCkgeworCQkJLyogbm8gbWJ1ZidzICov
CisJCQlyZXR1cm47CisJCX0KKwkJU0NUUF9CVUZfUkVTVl9VRihtX3NodXRkb3duLCBTQ1RQX01J
Tl9PVkVSSEVBRCk7CisJCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCQlpZiAoY2hr
ID09IE5VTEwpIHsKKwkJCS8qIG5vIG1lbW9yeSAqLworCQkJc2N0cF9tX2ZyZWVtKG1fc2h1dGRv
d24pOworCQkJcmV0dXJuOworCQl9CisJCWNoay0+Y29weV9ieV9yZWYgPSAwOworCQljaGstPnJl
Yy5jaHVua19pZC5pZCA9IFNDVFBfU0hVVERPV047CisJCWNoay0+cmVjLmNodW5rX2lkLmNhbl90
YWtlX2RhdGEgPSAxOworCQljaGstPmZsYWdzID0gMDsKKwkJY2hrLT5zZW5kX3NpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmspOworCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVDsKKwkJY2hrLT5zbmRfY291bnQgPSAwOworCQljaGstPmZsYWdzID0gMDsKKwkJ
Y2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJCWNoay0+ZGF0YSA9IG1fc2h1dGRvd247CisJCWNo
ay0+d2hvVG8gPSBuZXQ7CisJCWlmIChjaGstPndob1RvKSB7CisJCQlhdG9taWNfYWRkX2ludCgm
Y2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwkJfQorCQlzaHV0ZG93bl9jcCA9IG10b2QobV9z
aHV0ZG93biwgc3RydWN0IHNjdHBfc2h1dGRvd25fY2h1bmsgKik7CisJCXNodXRkb3duX2NwLT5j
aC5jaHVua190eXBlID0gU0NUUF9TSFVURE9XTjsKKwkJc2h1dGRvd25fY3AtPmNoLmNodW5rX2Zs
YWdzID0gMDsKKwkJc2h1dGRvd25fY3AtPmNoLmNodW5rX2xlbmd0aCA9IGh0b25zKGNoay0+c2Vu
ZF9zaXplKTsKKwkJc2h1dGRvd25fY3AtPmN1bXVsYXRpdmVfdHNuX2FjayA9IGh0b25sKHN0Y2It
PmFzb2MuY3VtdWxhdGl2ZV90c24pOworCQlTQ1RQX0JVRl9MRU4obV9zaHV0ZG93bikgPSBjaGst
PnNlbmRfc2l6ZTsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+Y29udHJvbF9zZW5k
X3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWNoay0+YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsK
Kwl9IGVsc2UgeworCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5kX3F1ZXVl
LCBjaGssIHNjdHBfbmV4dCk7CisJCWNoay0+d2hvVG8gPSBuZXQ7CisJCWlmIChjaGstPndob1Rv
KSB7CisJCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwkJfQor
CQlzaHV0ZG93bl9jcCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9jaHVu
ayAqKTsKKwkJc2h1dGRvd25fY3AtPmN1bXVsYXRpdmVfdHNuX2FjayA9IGh0b25sKHN0Y2ItPmFz
b2MuY3VtdWxhdGl2ZV90c24pOworCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5jb250
cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwl9CisJcmV0dXJuOworfQorCit2b2lk
CitzY3RwX3NlbmRfYXNjb25mKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0
cyAqbmV0LCBpbnQgYWRkcl9sb2NrZWQpCit7CisJLyoKKwkgKiBmb3JtdWxhdGUgYW5kIHF1ZXVl
IGFuIEFTQ09ORiB0byB0aGUgcGVlci4KKwkgKiBBU0NPTkYgcGFyYW1ldGVycyBzaG91bGQgYmUg
cXVldWVkIG9uIHRoZSBhc3NvYyBxdWV1ZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGs7CisJc3RydWN0IG1idWYgKm1fYXNjb25mOworCWludCBsZW47CisKKwlTQ1RQX1RDQl9M
T0NLX0FTU0VSVChzdGNiKTsKKworCWlmICgoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29u
Zl9zZW5kX3F1ZXVlKSkgJiYKKwkgICAgKCFzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9l
cCwgU0NUUF9QQ0JfRkxBR1NfTVVMVElQTEVfQVNDT05GUykpKSB7CisJCS8qIGNhbid0IHNlbmQg
YSBuZXcgb25lIGlmIHRoZXJlIGlzIG9uZSBpbiBmbGlnaHQgYWxyZWFkeSAqLworCQlyZXR1cm47
CisJfQorCisJLyogY29tcG9zZSBhbiBBU0NPTkYgY2h1bmssIG1heGltdW0gbGVuZ3RoIGlzIFBN
VFUgKi8KKwltX2FzY29uZiA9IHNjdHBfY29tcG9zZV9hc2NvbmYoc3RjYiwgJmxlbiwgYWRkcl9s
b2NrZWQpOworCWlmIChtX2FzY29uZiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisKKwlzY3Rw
X2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJLyogbm8g
bWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX2FzY29uZik7CisJCXJldHVybjsKKwl9CisKKwlj
aGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfQVNDT05G
OworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSBD
SFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwljaGstPmRhdGEgPSBtX2FzY29uZjsKKwljaGstPnNl
bmRfc2l6ZSA9IGxlbjsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGst
PnNuZF9jb3VudCA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT53aG9UbyA9
IG5ldDsKKwlpZiAoY2hrLT53aG9UbykgeworCQlhdG9taWNfYWRkX2ludCgmY2hrLT53aG9Uby0+
cmVmX2NvdW50LCAxKTsKKwl9CisJVEFJTFFfSU5TRVJUX1RBSUwoJmNoay0+YXNvYy0+YXNjb25m
X3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwljaGstPmFzb2MtPmN0cmxfcXVldWVfY250
Kys7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfYXNjb25mX2FjayhzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IpCit7CisJLyoKKwkgKiBmb3JtdWxhdGUgYW5kIHF1ZXVlIGEgYXNjb25mLWFj
ayBiYWNrIHRvIHNlbmRlci4KKwkgKiB0aGUgYXNjb25mLWFjayBtdXN0IGJlIHN0b3JlZCBpbiB0
aGUgdGNiLgorCSAqLworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKwlzdHJ1Y3Qgc2N0
cF9hc2NvbmZfYWNrICphY2ssICpsYXRlc3RfYWNrOworCXN0cnVjdCBtYnVmICptX2FjazsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQgPSBOVUxMOworCisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3Rj
Yik7CisJLyogR2V0IHRoZSBsYXRlc3QgQVNDT05GLUFDSyAqLworCWxhdGVzdF9hY2sgPSBUQUlM
UV9MQVNUKCZzdGNiLT5hc29jLmFzY29uZl9hY2tfc2VudCwgc2N0cF9hc2NvbmZfYWNraGVhZCk7
CisJaWYgKGxhdGVzdF9hY2sgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWlmIChsYXRlc3Rf
YWNrLT5sYXN0X3NlbnRfdG8gIT0gTlVMTCAmJgorCSAgICBsYXRlc3RfYWNrLT5sYXN0X3NlbnRf
dG8gPT0gc3RjYi0+YXNvYy5sYXN0X2NvbnRyb2xfY2h1bmtfZnJvbSkgeworCQkvKiB3ZSdyZSBk
b2luZyBhIHJldHJhbnNtaXNzaW9uICovCisJCW5ldCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0
KHN0Y2IsIHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb20sIDApOworCQlpZiAobmV0
ID09IE5VTEwpIHsKKwkJCS8qIG5vIGFsdGVybmF0ZSAqLworCQkJaWYgKHN0Y2ItPmFzb2MubGFz
dF9jb250cm9sX2NodW5rX2Zyb20gPT0gTlVMTCkgeworCQkJCWlmIChzdGNiLT5hc29jLmFsdGVy
bmF0ZSkgeworCQkJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQl9IGVsc2Ugewor
CQkJCQluZXQgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJfQorCQkJfSBl
bHNlIHsKKwkJCQluZXQgPSBzdGNiLT5hc29jLmxhc3RfY29udHJvbF9jaHVua19mcm9tOworCQkJ
fQorCQl9CisJfSBlbHNlIHsKKwkJLyogbm9ybWFsIGNhc2UgKi8KKwkJaWYgKHN0Y2ItPmFzb2Mu
bGFzdF9jb250cm9sX2NodW5rX2Zyb20gPT0gTlVMTCkgeworCQkJaWYgKHN0Y2ItPmFzb2MuYWx0
ZXJuYXRlKSB7CisJCQkJbmV0ID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJCQl9IGVsc2Ugewor
CQkJCW5ldCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCX0KKwkJfSBlbHNl
IHsKKwkJCW5ldCA9IHN0Y2ItPmFzb2MubGFzdF9jb250cm9sX2NodW5rX2Zyb207CisJCX0KKwl9
CisJbGF0ZXN0X2Fjay0+bGFzdF9zZW50X3RvID0gbmV0OworCisJVEFJTFFfRk9SRUFDSChhY2ss
ICZzdGNiLT5hc29jLmFzY29uZl9hY2tfc2VudCwgbmV4dCkgeworCQlpZiAoYWNrLT5kYXRhID09
IE5VTEwpIHsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogY29weSB0aGUgYXNjb25mX2FjayAq
LworCQltX2FjayA9IFNDVFBfTV9DT1BZTShhY2stPmRhdGEsIDAsIE1fQ09QWUFMTCwgTV9OT1dB
SVQpOworCQlpZiAobV9hY2sgPT0gTlVMTCkgeworCQkJLyogY291bGRuJ3QgY29weSBpdCAqLwor
CQkJcmV0dXJuOworCQl9CisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkJaWYgKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkg
eworCQkJc2N0cF9sb2dfbWJjKG1fYWNrLCBTQ1RQX01CVUZfSUNPUFkpOworCQl9CisjZW5kaWYK
KworCQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwkJaWYgKGNoayA9PSBOVUxMKSB7
CisJCQkvKiBubyBtZW1vcnkgKi8KKwkJCWlmIChtX2FjaykKKwkJCQlzY3RwX21fZnJlZW0obV9h
Y2spOworCQkJcmV0dXJuOworCQl9CisJCWNoay0+Y29weV9ieV9yZWYgPSAwOworCQljaGstPnJl
Yy5jaHVua19pZC5pZCA9IFNDVFBfQVNDT05GX0FDSzsKKwkJY2hrLT5yZWMuY2h1bmtfaWQuY2Fu
X3Rha2VfZGF0YSA9IDE7CisJCWNoay0+ZmxhZ3MgPSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsK
KwkJY2hrLT53aG9UbyA9IG5ldDsKKwkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCWF0b21pY19hZGRf
aW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCQl9CisJCWNoay0+ZGF0YSA9IG1fYWNr
OworCQljaGstPnNlbmRfc2l6ZSA9IGFjay0+bGVuOworCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFH
UkFNX1VOU0VOVDsKKwkJY2hrLT5zbmRfY291bnQgPSAwOworCQljaGstPmFzb2MgPSAmc3RjYi0+
YXNvYzsKKworCQlUQUlMUV9JTlNFUlRfVEFJTCgmY2hrLT5hc29jLT5jb250cm9sX3NlbmRfcXVl
dWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJY2hrLT5hc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCX0K
KwlyZXR1cm47Cit9CisKKworc3RhdGljIGludAorc2N0cF9jaHVua19yZXRyYW5zbWlzc2lvbihz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICBpbnQgKmNudF9vdXQsIHN0cnVjdCB0
aW1ldmFsICpub3csIGludCAqbm93X2ZpbGxlZCwgaW50ICpmcl9kb25lLCBpbnQgc29fbG9ja2Vk
CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCS8qLQorCSAqIHNlbmQgb3V0
IG9uZSBNVFUgb2YgcmV0cmFuc21pc3Npb24uIElmIGZhc3RfcmV0cmFuc21pdCBpcworCSAqIGhh
cHBlbmluZyB3ZSBpZ25vcmUgdGhlIGN3bmQuIE90aGVyd2lzZSB3ZSBvYmV5IHRoZSBjd25kIGFu
ZAorCSAqIHJ3bmQuIEZvciBhIENvb2tpZSBvciBBc2NvbmYgaW4gdGhlIGNvbnRyb2wgY2h1bmsg
cXVldWUgd2UKKwkgKiByZXRyYW5zbWl0IHRoZW0gYnkgdGhlbXNlbHZlcy4KKwkgKgorCSAqIEZv
ciBkYXRhIGNodW5rcyB3ZSB3aWxsIHBpY2sgb3V0IHRoZSBsb3dlc3QgVFNOJ3MgaW4gdGhlIHNl
bnRfcXVldWUKKwkgKiBtYXJrZWQgZm9yIHJlc2VuZCBhbmQgYnVuZGxlIHRoZW0gYWxsIHRvZ2V0
aGVyICh1cCB0byBhIE1UVSBvZgorCSAqIGRlc3RpbmF0aW9uKS4gVGhlIGFkZHJlc3MgdG8gc2Vu
ZCB0byBzaG91bGQgaGF2ZSBiZWVuCisJICogc2VsZWN0ZWQvY2hhbmdlZCB3aGVyZSB0aGUgcmV0
cmFuc21pc3Npb24gd2FzIG1hcmtlZCAoaS5lLiBpbiBGUgorCSAqIG9yIHQzLXRpbWVvdXQgcm91
dGluZXMpLgorCSAqLworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmRhdGFfbGlzdFtTQ1RQX01B
WF9EQVRBX0JVTkRMSU5HXTsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICpmd2Q7CisJ
c3RydWN0IG1idWYgKm0sICplbmRvZmNoYWluOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldCA9IE5V
TEw7CisJdWludDMyX3QgdHNuc19zZW50ID0gMDsKKwlpbnQgbm9fZnJhZ21lbnRmbGcsIGJ1bmRs
ZV9hdCwgY250X3RocnU7CisJdW5zaWduZWQgaW50IG10dTsKKwlpbnQgZXJyb3IsIGksIG9uZV9j
aHVuaywgZndkX3RzbiwgY3RsX2NudCwgdG1yX3N0YXJ0ZWQ7CisJc3RydWN0IHNjdHBfYXV0aF9j
aHVuayAqYXV0aCA9IE5VTEw7CisJdWludDMyX3QgYXV0aF9vZmZzZXQgPSAwOworCXVpbnQxNl90
IGF1dGhfa2V5aWQ7CisJaW50IG92ZXJyaWRlX29rID0gMTsKKwlpbnQgZGF0YV9hdXRoX3JlcWQg
PSAwOworCXVpbnQzMl90IGRtdHUgPSAwOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYg
KHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0g
ZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5k
aWYKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl0bXJfc3RhcnRlZCA9IGN0bF9jbnQg
PSBidW5kbGVfYXQgPSBlcnJvciA9IDA7CisJbm9fZnJhZ21lbnRmbGcgPSAxOworCWZ3ZF90c24g
PSAwOworCSpjbnRfb3V0ID0gMDsKKwlmd2QgPSBOVUxMOworCWVuZG9mY2hhaW4gPSBtID0gTlVM
TDsKKwlhdXRoX2tleWlkID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7CisjaWZk
ZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJc2N0cF9hdWRpdF9sb2coMHhDMywgMSk7CisjZW5k
aWYKKwlpZiAoKFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSkgJiYKKwkgICAgKFRBSUxR
X0VNUFRZKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUpKSkgeworCQlTQ1RQREJHKFNDVFBfREVC
VUdfT1VUUFVUMSwiU0NUUCBoaXRzIGVtcHR5IHF1ZXVlIHdpdGggY250IHNldCB0byAlZD9cbiIs
CisJCQlhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQlhc29jLT5zZW50X3F1ZXVlX2Nu
dCA9IDA7CisJCWFzb2MtPnNlbnRfcXVldWVfY250X3JlbW92ZWFibGUgPSAwOworCQkvKiBzZW5k
IGJhY2sgMC8wIHNvIHdlIGVudGVyIG5vcm1hbCB0cmFuc21pc3Npb24gKi8KKwkJKmNudF9vdXQg
PSAwOworCQlyZXR1cm4gKDApOworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRy
b2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQg
PT0gU0NUUF9DT09LSUVfRUNITykgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBT
Q1RQX1NUUkVBTV9SRVNFVCkgfHwKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQ
X0ZPUldBUkRfQ1VNX1RTTikpIHsKKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9S
RVNFTkQpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChjaGstPnJlYy5jaHVua19pZC5p
ZCA9PSBTQ1RQX1NUUkVBTV9SRVNFVCkgeworCQkJCWlmIChjaGsgIT0gYXNvYy0+c3RyX3Jlc2V0
KSB7CisJCQkJCS8qCisJCQkJCSAqIG5vdCBlbGlnaWJsZSBmb3IgcmV0cmFuIGlmIGl0cworCQkJ
CQkgKiBub3Qgb3VycworCQkJCQkgKi8KKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJ
Y3RsX2NudCsrOworCQkJaWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfRk9SV0FSRF9D
VU1fVFNOKSB7CisJCQkJZndkX3RzbiA9IDE7CisJCQl9CisJCQkvKgorCQkJICogQWRkIGFuIEFV
VEggY2h1bmssIGlmIGNodW5rIHJlcXVpcmVzIGl0IHNhdmUgdGhlCisJCQkgKiBvZmZzZXQgaW50
byB0aGUgY2hhaW4gZm9yIEFVVEgKKwkJCSAqLworCQkJaWYgKChhdXRoID09IE5VTEwpICYmCisJ
CQkgICAgKHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhjaGstPnJlYy5jaHVua19pZC5pZCwK
KwkJCQkJCQkgc3RjYi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKSkpIHsKKwkJCQltID0gc2N0cF9h
ZGRfYXV0aF9jaHVuayhtLCAmZW5kb2ZjaGFpbiwKKwkJCQkJCQkmYXV0aCwgJmF1dGhfb2Zmc2V0
LAorCQkJCQkJCXN0Y2IsCisJCQkJCQkJY2hrLT5yZWMuY2h1bmtfaWQuaWQpOworCQkJCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRjb250cm9sY2h1bmtzKTsKKwkJCX0KKwkJCW0g
PSBzY3RwX2NvcHlfbWJ1ZmNoYWluKGNoay0+ZGF0YSwgbSwgJmVuZG9mY2hhaW4sIDAsIGNoay0+
c2VuZF9zaXplLCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCW9uZV9j
aHVuayA9IDA7CisJY250X3RocnUgPSAwOworCS8qIGRvIHdlIGhhdmUgY29udHJvbCBjaHVua3Mg
dG8gcmV0cmFuc21pdD8gKi8KKwlpZiAobSAhPSBOVUxMKSB7CisJCS8qIFN0YXJ0IGEgdGltZXIg
bm8gbWF0dGVyIGlmIHdlIHN1Y2NlZWQgb3IgZmFpbCAqLworCQlpZiAoY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPT0gU0NUUF9DT09LSUVfRUNITykgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJ
TUVSX1RZUEVfQ09PS0lFLCBpbnAsIHN0Y2IsIGNoay0+d2hvVG8pOworCQl9IGVsc2UgaWYgKGNo
ay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBfQVNDT05GKQorCQkJc2N0cF90aW1lcl9zdGFydChT
Q1RQX1RJTUVSX1RZUEVfQVNDT05GLCBpbnAsIHN0Y2IsIGNoay0+d2hvVG8pOworCQljaGstPnNu
ZF9jb3VudCsrOwkvKiB1cGRhdGUgb3VyIGNvdW50ICovCisJCWlmICgoZXJyb3IgPSBzY3RwX2xv
d2xldmVsX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGNoay0+d2hvVG8sCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmNoay0+d2hv
VG8tPnJvLl9sX2FkZHIsIG0sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBhdXRoX29mZnNldCwgYXV0aCwgc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub19mcmFnbWVudGZs
ZywgMCwgMCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucC0+
c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIGh0b25sKHN0Y2ItPmFzb2MucGVlcl92dGFnKSwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoay0+d2hvVG8tPnBvcnQs
IE5VTEwsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYKKwkJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCkpKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
T1VUUFVUMywgIkdhayBzZW5kIGVycm9yICVkXG4iLCBlcnJvcik7CisJCQlpZiAoZXJyb3IgPT0g
RU5PQlVGUykgeworCQkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMTsKKwkJCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19sb3dsZXZlbGVycik7CisJCQl9CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfSBl
bHNlIHsKKwkJCWFzb2MtPmlmcF9oYWRfZW5vYnVmID0gMDsKKwkJfQorCQllbmRvZmNoYWluID0g
TlVMTDsKKwkJYXV0aCA9IE5VTEw7CisJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJLyoKKwkJICogV2Ug
ZG9uJ3Qgd2FudCB0byBtYXJrIHRoZSBuZXQtPnNlbnQgdGltZSBoZXJlIHNpbmNlIHRoaXMKKwkJ
ICogd2UgdXNlIHRoaXMgZm9yIEhCIGFuZCByZXRyYW5zIGNhbm5vdCBtZWFzdXJlIFJUVAorCQkg
Ki8KKwkJLyogKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmNoay0+d2hvVG8tPmxhc3Rfc2Vu
dF90aW1lKTsgKi8KKwkJKmNudF9vdXQgKz0gMTsKKwkJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JB
TV9TRU5UOworCQlzY3RwX3Vjb3VudF9kZWNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5f
Y250KTsKKwkJaWYgKGZ3ZF90c24gPT0gMCkgeworCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIHsK
KwkJCS8qIENsZWFuIHVwIHRoZSBmd2QtdHNuIGxpc3QgKi8KKwkJCXNjdHBfY2xlYW5fdXBfY3Rs
KHN0Y2IsIGFzb2MsIHNvX2xvY2tlZCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qCisJ
ICogT2ssIGl0IGlzIGp1c3QgZGF0YSByZXRyYW5zbWlzc2lvbiB3ZSBuZWVkIHRvIGRvIG9yIHRo
YXQgYW5kIGEKKwkgKiBmd2QtdHNuIHdpdGggaXQgYWxsLgorCSAqLworCWlmIChUQUlMUV9FTVBU
WSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKKwkJcmV0dXJuIChTQ1RQX1JFVFJBTl9ET05FKTsKKwl9
CisJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQp
IHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlU
KSkgeworCQkvKiBub3QgeWV0IG9wZW4sIHJlc2VuZCB0aGUgY29va2llIGFuZCB0aGF0IGlzIGl0
ICovCisJCXJldHVybiAoMSk7CisJfQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNj
dHBfYXVkaXRpbmcoMjAsIGlucCwgc3RjYiwgTlVMTCk7CisjZW5kaWYKKwlkYXRhX2F1dGhfcmVx
ZCA9IHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVl
cl9hdXRoX2NodW5rcyk7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBz
Y3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgewor
CQkJLyogTm8sIG5vdCBzZW50IHRvIHRoaXMgbmV0IG9yIG5vdCByZWFkeSBmb3IgcnR4ICovCisJ
CQljb250aW51ZTsKKwkJfQorCQlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJCVNDVFBfUFJJ
TlRGKCJUU046JXggY2hrLT5zbmRfY291bnQ6JWQgY2hrLT5zZW50OiVkIGNhbid0IHJldHJhbiAt
IG5vIGRhdGFcbiIsCisJCQkgICAgICAgICAgICBjaGstPnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRf
Y291bnQsIGNoay0+c2VudCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSkgJiYKKwkJICAgIChjaGstPnNuZF9jb3VudCA+
PSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykpKSB7CisJCQlzdHJ1Y3Qg
bWJ1ZiAqb3BfZXJyOworCQkJY2hhciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwgIlRTTiAlOC44eCByZXRyYW5zbWl0dGVkICVkIHRpbWVz
LCBnaXZpbmcgdXAiLAorCQkJCSBjaGstPnJlYy5kYXRhLnRzbiwgY2hrLT5zbmRfY291bnQpOwor
CQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGlh
Z19pbmZvX2NvZGUpLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJ
YXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCXNjdHBfYWJvcnRfYW5f
YXNzb2NpYXRpb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgb3BfZXJyLAorCQkJICAgICAgICAgICAg
ICAgICAgICAgICAgICBzb19sb2NrZWQpOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWF0
b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCXJldHVybiAoU0NU
UF9SRVRSQU5fRVhJVCk7CisJCX0KKwkJLyogcGljayB1cCB0aGUgbmV0ICovCisJCW5ldCA9IGNo
ay0+d2hvVG87CisJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKwkJCQltdHUgPSBuZXQtPm10dSAtIFNDVFBfTUlO
X1Y0X09WRVJIRUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJbXR1ID0gbmV0LT5tdHUgLSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQli
cmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09O
TjoKKwkJCQltdHUgPSBuZXQtPm10dSAtIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJYnJl
YWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJLyogVFNOSCAqLworCQkJCW10dSA9IG5ldC0+
bXR1OworCQkJCWJyZWFrOworCQl9CisKKwkJaWYgKChhc29jLT5wZWVyc19yd25kIDwgbXR1KSAm
JiAoYXNvYy0+dG90YWxfZmxpZ2h0ID4gMCkpIHsKKwkJCS8qIE5vIHJvb20gaW4gcGVlcnMgcndu
ZCAqLworCQkJdWludDMyX3QgdHNuOworCisJCQl0c24gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSAr
IDE7CisJCQlpZiAodHNuID09IGNoay0+cmVjLmRhdGEudHNuKSB7CisJCQkJLyoKKwkJCQkgKiB3
ZSBtYWtlIGEgc3BlY2lhbCBleGNlcHRpb24gZm9yIHRoaXMKKwkJCQkgKiBjYXNlLiBUaGUgcGVl
ciBoYXMgbm8gcnduZCBidXQgaXMgbWlzc2luZworCQkJCSAqIHRoZSBsb3dlc3QgY2h1bmsuLiB3
aGljaCBpcyBwcm9iYWJseSB3aGF0CisJCQkJICogaXMgaG9sZGluZyB1cCB0aGUgcnduZC4KKwkJ
CQkgKi8KKwkJCQlnb3RvIG9uZV9jaHVua19hcm91bmQ7CisJCQl9CisJCQlyZXR1cm4gKDEpOwor
CQl9CisJb25lX2NodW5rX2Fyb3VuZDoKKwkJaWYgKGFzb2MtPnBlZXJzX3J3bmQgPCBtdHUpIHsK
KwkJCW9uZV9jaHVuayA9IDE7CisJCQlpZiAoKGFzb2MtPnBlZXJzX3J3bmQgPT0gMCkgJiYKKwkJ
CSAgICAoYXNvYy0+dG90YWxfZmxpZ2h0ID09IDApKSB7CisJCQkJY2hrLT53aW5kb3dfcHJvYmUg
PSAxOworCQkJCWNoay0+d2hvVG8tPndpbmRvd19wcm9iZSA9IDE7CisJCQl9CisJCX0KKyNpZmRl
ZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdF9sb2coMHhDMywgMik7CisjZW5k
aWYKKwkJYnVuZGxlX2F0ID0gMDsKKwkJbSA9IE5VTEw7CisJCW5ldC0+ZmFzdF9yZXRyYW5faXAg
PSAwOworCQlpZiAoY2hrLT5yZWMuZGF0YS5kb2luZ19mYXN0X3JldHJhbnNtaXQgPT0gMCkgewor
CQkJLyoKKwkJCSAqIGlmIG5vIEZSIGluIHByb2dyZXNzIHNraXAgZGVzdGluYXRpb24gdGhhdCBo
YXZlCisJCQkgKiBmbGlnaHRfc2l6ZSA+IGN3bmQuCisJCQkgKi8KKwkJCWlmIChuZXQtPmZsaWdo
dF9zaXplID49IG5ldC0+Y3duZCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2Ugewor
CQkJLyoKKwkJCSAqIE1hcmsgdGhlIGRlc3RpbmF0aW9uIG5ldCB0byBoYXZlIEZSIHJlY292ZXJ5
CisJCQkgKiBsaW1pdHMgcHV0IG9uIGl0LgorCQkJICovCisJCQkqZnJfZG9uZSA9IDE7CisJCQlu
ZXQtPmZhc3RfcmV0cmFuX2lwID0gMTsKKwkJfQorCisJCS8qCisJCSAqIGlmIG5vIEFVVEggaXMg
eWV0IGluY2x1ZGVkIGFuZCB0aGlzIGNodW5rIHJlcXVpcmVzIGl0LAorCQkgKiBtYWtlIHN1cmUg
dG8gYWNjb3VudCBmb3IgaXQuICBXZSBkb24ndCBhcHBseSB0aGUgc2l6ZQorCQkgKiB1bnRpbCB0
aGUgQVVUSCBjaHVuayBpcyBhY3R1YWxseSBhZGRlZCBiZWxvdyBpbiBjYXNlCisJCSAqIHRoZXJl
IGlzIG5vIHJvb20gZm9yIHRoaXMgY2h1bmsuCisJCSAqLworCQlpZiAoZGF0YV9hdXRoX3JlcWQg
JiYgKGF1dGggPT0gTlVMTCkpIHsKKwkJCWRtdHUgPSBzY3RwX2dldF9hdXRoX2NodW5rX2xlbihz
dGNiLT5hc29jLnBlZXJfaG1hY19pZCk7CisJCX0gZWxzZQorCQkJZG10dSA9IDA7CisKKwkJaWYg
KChjaGstPnNlbmRfc2l6ZSA8PSAobXR1IC0gZG10dSkpIHx8CisJCSAgICAoY2hrLT5mbGFncyAm
IENIVU5LX0ZMQUdTX0ZSQUdNRU5UX09LKSkgeworCQkJLyogb2sgd2Ugd2lsbCBhZGQgdGhpcyBv
bmUgKi8KKwkJCWlmIChkYXRhX2F1dGhfcmVxZCkgeworCQkJCWlmIChhdXRoID09IE5VTEwpIHsK
KwkJCQkJbSA9IHNjdHBfYWRkX2F1dGhfY2h1bmsobSwKKwkJCQkJCQkJJmVuZG9mY2hhaW4sCisJ
CQkJCQkJCSZhdXRoLAorCQkJCQkJCQkmYXV0aF9vZmZzZXQsCisJCQkJCQkJCXN0Y2IsCisJCQkJ
CQkJCVNDVFBfREFUQSk7CisJCQkJCWF1dGhfa2V5aWQgPSBjaGstPmF1dGhfa2V5aWQ7CisJCQkJ
CW92ZXJyaWRlX29rID0gMDsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291
dGNvbnRyb2xjaHVua3MpOworCQkJCX0gZWxzZSBpZiAob3ZlcnJpZGVfb2spIHsKKwkJCQkJYXV0
aF9rZXlpZCA9IGNoay0+YXV0aF9rZXlpZDsKKwkJCQkJb3ZlcnJpZGVfb2sgPSAwOworCQkJCX0g
ZWxzZSBpZiAoY2hrLT5hdXRoX2tleWlkICE9IGF1dGhfa2V5aWQpIHsKKwkJCQkJLyogZGlmZmVy
ZW50IGtleWlkLCBzbyBkb25lIGJ1bmRsaW5nICovCisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0K
KwkJCW0gPSBzY3RwX2NvcHlfbWJ1ZmNoYWluKGNoay0+ZGF0YSwgbSwgJmVuZG9mY2hhaW4sIDAs
IGNoay0+c2VuZF9zaXplLCBjaGstPmNvcHlfYnlfcmVmKTsKKwkJCWlmIChtID09IE5VTEwpIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFTk9NRU0pOworCQkJCXJldHVybiAoRU5PTUVNKTsKKwkJCX0KKwkJCS8qIERvIGNs
ZWFyIElQX0RGID8gKi8KKwkJCWlmIChjaGstPmZsYWdzICYgQ0hVTktfRkxBR1NfRlJBR01FTlRf
T0spIHsKKwkJCQlub19mcmFnbWVudGZsZyA9IDA7CisJCQl9CisJCQkvKiB1cGF0ZSBvdXIgTVRV
IHNpemUgKi8KKwkJCWlmIChtdHUgPiAoY2hrLT5zZW5kX3NpemUgKyBkbXR1KSkKKwkJCQltdHUg
LT0gKGNoay0+c2VuZF9zaXplICsgZG10dSk7CisJCQllbHNlCisJCQkJbXR1ID0gMDsKKwkJCWRh
dGFfbGlzdFtidW5kbGVfYXQrK10gPSBjaGs7CisJCQlpZiAob25lX2NodW5rICYmIChhc29jLT50
b3RhbF9mbGlnaHQgPD0gMCkpIHsKKwkJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc193aW5kb3dwcm9i
ZWQpOworCQkJfQorCQl9CisJCWlmIChvbmVfY2h1bmsgPT0gMCkgeworCQkJLyoKKwkJCSAqIG5v
dyBhcmUgdGhlcmUgYW55bW9yZSBmb3J3YXJkIGZyb20gY2hrIHRvIHBpY2sKKwkJCSAqIHVwPwor
CQkJICovCisJCQlmb3IgKGZ3ZCA9IFRBSUxRX05FWFQoY2hrLCBzY3RwX25leHQpOyBmd2QgIT0g
TlVMTDsgZndkID0gVEFJTFFfTkVYVChmd2QsIHNjdHBfbmV4dCkpIHsKKwkJCQlpZiAoZndkLT5z
ZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQkJCS8qIE5vcGUsIG5vdCBmb3IgcmV0
cmFuICovCisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlpZiAoZndkLT53aG9UbyAhPSBuZXQp
IHsKKwkJCQkJLyogTm9wZSwgbm90IHRoZSBuZXQgaW4gcXVlc3Rpb24gKi8KKwkJCQkJY29udGlu
dWU7CisJCQkJfQorCQkJCWlmIChkYXRhX2F1dGhfcmVxZCAmJiAoYXV0aCA9PSBOVUxMKSkgewor
CQkJCQlkbXR1ID0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3RjYi0+YXNvYy5wZWVyX2htYWNf
aWQpOworCQkJCX0gZWxzZQorCQkJCQlkbXR1ID0gMDsKKwkJCQlpZiAoZndkLT5zZW5kX3NpemUg
PD0gKG10dSAtIGRtdHUpKSB7CisJCQkJCWlmIChkYXRhX2F1dGhfcmVxZCkgeworCQkJCQkJaWYg
KGF1dGggPT0gTlVMTCkgeworCQkJCQkJCW0gPSBzY3RwX2FkZF9hdXRoX2NodW5rKG0sCisJCQkJ
CQkJCQkJJmVuZG9mY2hhaW4sCisJCQkJCQkJCQkJJmF1dGgsCisJCQkJCQkJCQkJJmF1dGhfb2Zm
c2V0LAorCQkJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCQkJU0NUUF9EQVRBKTsKKwkJCQkJCQlhdXRo
X2tleWlkID0gZndkLT5hdXRoX2tleWlkOworCQkJCQkJCW92ZXJyaWRlX29rID0gMDsKKwkJCQkJ
CQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJCQkJ
CQl9IGVsc2UgaWYgKG92ZXJyaWRlX29rKSB7CisJCQkJCQkJYXV0aF9rZXlpZCA9IGZ3ZC0+YXV0
aF9rZXlpZDsKKwkJCQkJCQlvdmVycmlkZV9vayA9IDA7CisJCQkJCQl9IGVsc2UgaWYgKGZ3ZC0+
YXV0aF9rZXlpZCAhPSBhdXRoX2tleWlkKSB7CisJCQkJCQkJLyogZGlmZmVyZW50IGtleWlkLCBz
byBkb25lIGJ1bmRsaW5nICovCisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJ
bSA9IHNjdHBfY29weV9tYnVmY2hhaW4oZndkLT5kYXRhLCBtLCAmZW5kb2ZjaGFpbiwgMCwgZndk
LT5zZW5kX3NpemUsIGZ3ZC0+Y29weV9ieV9yZWYpOworCQkJCQlpZiAobSA9PSBOVUxMKSB7CisJ
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFTk9NRU0pOworCQkJCQkJcmV0dXJuIChFTk9NRU0pOworCQkJCQl9CisJCQkJCS8q
IERvIGNsZWFyIElQX0RGID8gKi8KKwkJCQkJaWYgKGZ3ZC0+ZmxhZ3MgJiBDSFVOS19GTEFHU19G
UkFHTUVOVF9PSykgeworCQkJCQkJbm9fZnJhZ21lbnRmbGcgPSAwOworCQkJCQl9CisJCQkJCS8q
IHVwYXRlIG91ciBNVFUgc2l6ZSAqLworCQkJCQlpZiAobXR1ID4gKGZ3ZC0+c2VuZF9zaXplICsg
ZG10dSkpCisJCQkJCQltdHUgLT0gKGZ3ZC0+c2VuZF9zaXplICsgZG10dSk7CisJCQkJCWVsc2UK
KwkJCQkJCW10dSA9IDA7CisJCQkJCWRhdGFfbGlzdFtidW5kbGVfYXQrK10gPSBmd2Q7CisJCQkJ
CWlmIChidW5kbGVfYXQgPj0gU0NUUF9NQVhfREFUQV9CVU5ETElORykgeworCQkJCQkJYnJlYWs7
CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQkvKiBjYW4ndCBmaXQgc28gd2UgYXJlIGRvbmUg
Ki8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCS8qIElzIHRoZXJlIHNvbWV0aGlu
ZyB0byBzZW5kIGZvciB0aGlzIGRlc3RpbmF0aW9uPyAqLworCQlpZiAobSkgeworCQkJLyoKKwkJ
CSAqIE5vIG1hdHRlciBpZiB3ZSBmYWlsL29yIHN1Y2NlZWQgd2Ugc2hvdWxkIHN0YXJ0IGEKKwkJ
CSAqIHRpbWVyLiBBIGZhaWx1cmUgaXMgbGlrZSBhIGxvc3QgSVAgcGFja2V0IDotKQorCQkJICov
CisJCQlpZiAoIVNDVFBfT1NfVElNRVJfUEVORElORygmbmV0LT5yeHRfdGltZXIudGltZXIpKSB7
CisJCQkJLyoKKwkJCQkgKiBubyB0aW1lciBydW5uaW5nIG9uIHRoaXMgZGVzdGluYXRpb24KKwkJ
CQkgKiByZXN0YXJ0IGl0LgorCQkJCSAqLworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NFTkQsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQl0bXJfc3RhcnRlZCA9IDE7CisJCQl9
CisJCQkvKiBOb3cgbGV0cyBzZW5kIGl0LCBpZiB0aGVyZSBpcyBhbnl0aGluZyB0byBzZW5kIDo+
ICovCisJCQlpZiAoKGVycm9yID0gc2N0cF9sb3dsZXZlbF9jaHVua19vdXRwdXQoaW5wLCBzdGNi
LCBuZXQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVj
dCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIsIG0sCisJCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0aF9vZmZzZXQsIGF1dGgsIGF1dGhfa2V5aWQsCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9fZnJhZ21lbnRmbGcsIDAs
IDAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3Rw
X2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwoc3RjYi0+YXNvYy5wZWVyX3Z0YWcpLAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC0+cG9ydCwgTlVMTCwKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDAsIDAsCisjZW5kaWYKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzb19sb2NrZWQpKSkgeworCQkJCS8qIGVycm9yLCB3ZSBjb3VsZCBub3Qgb3V0
cHV0ICovCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAl
ZFxuIiwgZXJyb3IpOworCQkJCWlmIChlcnJvciA9PSBFTk9CVUZTKSB7CisJCQkJCWFzb2MtPmlm
cF9oYWRfZW5vYnVmID0gMTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbG93bGV2ZWxlcnIp
OworCQkJCX0KKwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0gZWxzZSB7CisJCQkJYXNvYy0+aWZw
X2hhZF9lbm9idWYgPSAwOworCQkJfQorCQkJZW5kb2ZjaGFpbiA9IE5VTEw7CisJCQlhdXRoID0g
TlVMTDsKKwkJCWF1dGhfb2Zmc2V0ID0gMDsKKwkJCS8qIEZvciBIQidzICovCisJCQkvKgorCQkJ
ICogV2UgZG9uJ3Qgd2FudCB0byBtYXJrIHRoZSBuZXQtPnNlbnQgdGltZSBoZXJlCisJCQkgKiBz
aW5jZSB0aGlzIHdlIHVzZSB0aGlzIGZvciBIQiBhbmQgcmV0cmFucyBjYW5ub3QKKwkJCSAqIG1l
YXN1cmUgUlRUCisJCQkgKi8KKwkJCS8qICh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZuZXQt
Pmxhc3Rfc2VudF90aW1lKTsgKi8KKworCQkJLyogRm9yIGF1dG8tY2xvc2UgKi8KKwkJCWNudF90
aHJ1Kys7CisJCQlpZiAoKm5vd19maWxsZWQgPT0gMCkgeworCQkJCSh2b2lkKVNDVFBfR0VUVElN
RV9USU1FVkFMKCZhc29jLT50aW1lX2xhc3Rfc2VudCk7CisJCQkJKm5vdyA9IGFzb2MtPnRpbWVf
bGFzdF9zZW50OworCQkJCSpub3dfZmlsbGVkID0gMTsKKwkJCX0gZWxzZSB7CisJCQkJYXNvYy0+
dGltZV9sYXN0X3NlbnQgPSAqbm93OworCQkJfQorCQkJKmNudF9vdXQgKz0gYnVuZGxlX2F0Owor
I2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdF9sb2coMHhDNCwgYnVu
ZGxlX2F0KTsKKyNlbmRpZgorCQkJaWYgKGJ1bmRsZV9hdCkgeworCQkJCXRzbnNfc2VudCA9IGRh
dGFfbGlzdFswXS0+cmVjLmRhdGEudHNuOworCQkJfQorCQkJZm9yIChpID0gMDsgaSA8IGJ1bmRs
ZV9hdDsgaSsrKSB7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHJldHJhbnNkYXRhKTsK
KwkJCQlkYXRhX2xpc3RbaV0tPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1NFTlQ7CisJCQkJLyoKKwkJ
CQkgKiBXaGVuIHdlIGhhdmUgYSByZXZva2VkIGRhdGEsIGFuZCB3ZQorCQkJCSAqIHJldHJhbnNt
aXQgaXQsIHRoZW4gd2UgY2xlYXIgdGhlIHJldm9rZWQKKwkJCQkgKiBmbGFnIHNpbmNlIHRoaXMg
ZmxhZyBkaWN0YXRlcyBpZiB3ZQorCQkJCSAqIHN1YnRyYWN0ZWQgZnJvbSB0aGUgZnMKKwkJCQkg
Ki8KKwkJCQlpZiAoZGF0YV9saXN0W2ldLT5yZWMuZGF0YS5jaHVua193YXNfcmV2b2tlZCkgewor
CQkJCQkvKiBEZWZsYXRlIHRoZSBjd25kICovCisJCQkJCWRhdGFfbGlzdFtpXS0+d2hvVG8tPmN3
bmQgLT0gZGF0YV9saXN0W2ldLT5ib29rX3NpemU7CisJCQkJCWRhdGFfbGlzdFtpXS0+cmVjLmRh
dGEuY2h1bmtfd2FzX3Jldm9rZWQgPSAwOworCQkJCX0KKwkJCQlkYXRhX2xpc3RbaV0tPnNuZF9j
b3VudCsrOworCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250
KTsKKwkJCQkvKiByZWNvcmQgdGhlIHRpbWUgKi8KKwkJCQlkYXRhX2xpc3RbaV0tPnNlbnRfcmN2
X3RpbWUgPSBhc29jLT50aW1lX2xhc3Rfc2VudDsKKwkJCQlpZiAoZGF0YV9saXN0W2ldLT5ib29r
X3NpemVfc2NhbGUpIHsKKwkJCQkJLyoKKwkJCQkJICogbmVlZCB0byBkb3VibGUgdGhlIGJvb2sg
c2l6ZSBvbgorCQkJCQkgKiB0aGlzIG9uZQorCQkJCQkgKi8KKwkJCQkJZGF0YV9saXN0W2ldLT5i
b29rX3NpemVfc2NhbGUgPSAwOworCQkJCQkvKiBTaW5jZSB3ZSBkb3VibGUgdGhlIGJvb2tzaXpl
LCB3ZSBtdXN0CisJCQkJCSAqIGFsc28gZG91YmxlIHRoZSBvdXRwdXQgcXVldWUgc2l6ZSwgc2lu
Y2UgdGhpcworCQkJCQkgKiBnZXQgc2hydW5rIHdoZW4gd2UgZnJlZSBieSB0aGlzIGFtb3VudC4K
KwkJCQkJICovCisJCQkJCWF0b21pY19hZGRfaW50KCYoKGFzb2MpLT50b3RhbF9vdXRwdXRfcXVl
dWVfc2l6ZSksZGF0YV9saXN0W2ldLT5ib29rX3NpemUpOworCQkJCQlkYXRhX2xpc3RbaV0tPmJv
b2tfc2l6ZSAqPSAyOworCisKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfUldORF9FTkFCTEUpIHsKKwkJCQkJCXNj
dHBfbG9nX3J3bmQoU0NUUF9ERUNSRUFTRV9QRUVSX1JXTkQsCisJCQkJCQkgICAgICBhc29jLT5w
ZWVyc19yd25kLCBkYXRhX2xpc3RbaV0tPnNlbmRfc2l6ZSwgU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3BlZXJfY2h1bmtfb2gpKTsKKwkJCQkJfQorCQkJCQlhc29jLT5wZWVyc19yd25kID0gc2N0cF9z
YnNwYWNlX3N1Yihhc29jLT5wZWVyc19yd25kLAorCQkJCQkJCQkJICAgICh1aW50MzJfdCkgKGRh
dGFfbGlzdFtpXS0+c2VuZF9zaXplICsKKwkJCQkJCQkJCQkJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3BlZXJfY2h1bmtfb2gpKSk7CisJCQkJfQorCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0ZMSUdIVF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3Rw
X21pc2NfaW50cyhTQ1RQX0ZMSUdIVF9MT0dfVVBfUlNORCwKKwkJCQkJCSAgICAgICBkYXRhX2xp
c3RbaV0tPndob1RvLT5mbGlnaHRfc2l6ZSwKKwkJCQkJCSAgICAgICBkYXRhX2xpc3RbaV0tPmJv
b2tfc2l6ZSwKKwkJCQkJCSAgICAgICAodWludDMyX3QpKHVpbnRwdHJfdClkYXRhX2xpc3RbaV0t
Pndob1RvLAorCQkJCQkJICAgICAgIGRhdGFfbGlzdFtpXS0+cmVjLmRhdGEudHNuKTsKKwkJCQl9
CisJCQkJc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZShkYXRhX2xpc3RbaV0pOworCQkJCXNjdHBf
dG90YWxfZmxpZ2h0X2luY3JlYXNlKHN0Y2IsIGRhdGFfbGlzdFtpXSk7CisJCQkJaWYgKGFzb2Mt
PnBlZXJzX3J3bmQgPCBzdGNiLT5zY3RwX2VwLT5zY3RwX2VwLnNjdHBfc3dzX3NlbmRlcikgewor
CQkJCQkvKiBTV1Mgc2VuZGVyIHNpZGUgZW5nYWdlcyAqLworCQkJCQlhc29jLT5wZWVyc19yd25k
ID0gMDsKKwkJCQl9CisJCQkJaWYgKChpID09IDApICYmCisJCQkJICAgIChkYXRhX2xpc3RbaV0t
PnJlYy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCkpIHsKKwkJCQkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfc2VuZGZhc3RyZXRyYW5zKTsKKwkJCQkJaWYgKChkYXRhX2xpc3RbaV0gPT0gVEFJTFFf
RklSU1QoJmFzb2MtPnNlbnRfcXVldWUpKSAmJgorCQkJCQkgICAgKHRtcl9zdGFydGVkID09IDAp
KSB7CisJCQkJCQkvKi0KKwkJCQkJCSAqIG9rIHdlIGp1c3QgZmFzdC1yZXRyYW5zJ2QKKwkJCQkJ
CSAqIHRoZSBsb3dlc3QgVFNOLCBpLmUgdGhlCisJCQkJCQkgKiBmaXJzdCBvbiB0aGUgbGlzdC4g
SW4KKwkJCQkJCSAqIHRoaXMgY2FzZSB3ZSB3YW50IHRvIGdpdmUKKwkJCQkJCSAqIHNvbWUgbW9y
ZSB0aW1lIHRvIGdldCBhCisJCQkJCQkgKiBTQUNLIGJhY2sgd2l0aG91dCBhCisJCQkJCQkgKiB0
My1leHBpcmluZy4KKwkJCQkJCSAqLworCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJf
VFlQRV9TRU5ELCBpbnAsIHN0Y2IsIG5ldCwKKwkJCQkJCQkJU0NUUF9GUk9NX1NDVFBfT1VUUFVU
ICsgU0NUUF9MT0NfMik7CisJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
RU5ELCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxF
KSB7CisJCQkJc2N0cF9sb2dfY3duZChzdGNiLCBuZXQsIHRzbnNfc2VudCwgU0NUUF9DV05EX0xP
R19GUk9NX1JFU0VORCk7CisJCQl9CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCQlz
Y3RwX2F1ZGl0aW5nKDIxLCBpbnAsIHN0Y2IsIE5VTEwpOworI2VuZGlmCisJCX0gZWxzZSB7CisJ
CQkvKiBOb25lIHdpbGwgZml0ICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJCWlmIChhc29jLT5z
ZW50X3F1ZXVlX3JldHJhbl9jbnQgPD0gMCkgeworCQkJLyogYWxsIGRvbmUgd2UgaGF2ZSBubyBt
b3JlIHRvIHJldHJhbiAqLworCQkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250ID0gMDsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChvbmVfY2h1bmspIHsKKwkJCS8qIE5vIG1vcmUgcm9vbSBpbiBy
d25kICovCisJCQlyZXR1cm4gKDEpOworCQl9CisJCS8qIHN0b3AgdGhlIGZvciBsb29wIGhlcmUu
IHdlIHNlbnQgb3V0IGEgcGFja2V0ICovCisJCWJyZWFrOworCX0KKwlyZXR1cm4gKDApOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF90aW1lcl92YWxpZGF0aW9uKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKworCS8qIFZhbGlkYXRlIHRo
YXQgYSB0aW1lciBpcyBydW5uaW5nIHNvbWV3aGVyZSAqLworCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
YXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5l
dC0+cnh0X3RpbWVyLnRpbWVyKSkgeworCQkJLyogSGVyZSBpcyBhIHRpbWVyICovCisJCQlyZXR1
cm47CisJCX0KKwl9CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7CisJLyogR2FrLCB3ZSBk
aWQgbm90IGhhdmUgYSB0aW1lciBzb21ld2hlcmUgKi8KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VU
UFVUMywgIkRlYWRsb2NrIGF2b2lkZWQgc3RhcnRpbmcgdGltZXIgb24gYSBkZXN0IGF0IHJldHJh
blxuIik7CisJaWYgKGFzb2MtPmFsdGVybmF0ZSkgeworCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TRU5ELCBpbnAsIHN0Y2IsIGFzb2MtPmFsdGVybmF0ZSk7CisJfSBlbHNlIHsK
KwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgaW5wLCBzdGNiLCBhc29j
LT5wcmltYXJ5X2Rlc3RpbmF0aW9uKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX2No
dW5rX291dHB1dChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwKKyAgICBpbnQgZnJvbV93aGVyZSwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQ
X1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCS8qLQorCSAqIE9rIHRoaXMgaXMgdGhlIGdlbmVy
aWMgY2h1bmsgc2VydmljZSBxdWV1ZS4gd2UgbXVzdCBkbyB0aGUKKwkgKiBmb2xsb3dpbmc6CisJ
ICogLSBTZWUgaWYgdGhlcmUgYXJlIHJldHJhbnNtaXRzIHBlbmRpbmcsIGlmIHNvIHdlIG11c3QK
KwkgKiAgIGRvIHRoZXNlIGZpcnN0LgorCSAqIC0gU2VydmljZSB0aGUgc3RyZWFtIHF1ZXVlIHRo
YXQgaXMgbmV4dCwgbW92aW5nIGFueQorCSAqICAgbWVzc2FnZSAobm90ZSBJIG11c3QgZ2V0IGEg
Y29tcGxldGUgbWVzc2FnZSBpLmUuCisJICogICBGSVJTVC9NSURETEUgYW5kIExBU1QgdG8gdGhl
IG91dCBxdWV1ZSBpbiBvbmUgcGFzcykgYW5kIGFzc2lnbmluZworCSAqICAgVFNOJ3MKKwkgKiAt
IENoZWNrIHRvIHNlZSBpZiB0aGUgY3duZC9yd25kIGFsbG93cyBhbnkgb3V0cHV0LCBpZiBzbyB3
ZQorCSAqICAgZ28gYWhlYWQgYW5kIGZvbXVsYXRlIGFuZCBzZW5kIHRoZSBsb3cgbGV2ZWwgY2h1
bmtzLiBNYWtpbmcgc3VyZQorCSAqICAgdG8gY29tYmluZSBhbnkgY29udHJvbCBpbiB0aGUgY29u
dHJvbCBjaHVuayBxdWV1ZSBhbHNvLgorCSAqLworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlpbnQgZXJyb3IgPSAwLCBudW1fb3V0LCB0
b3Rfb3V0ID0gMCwgcmV0ID0gMCwgcmVhc29uX2NvZGU7CisJdW5zaWduZWQgaW50IGJ1cnN0X2Nu
dCA9IDA7CisJc3RydWN0IHRpbWV2YWwgbm93OworCWludCBub3dfZmlsbGVkID0gMDsKKwlpbnQg
bmFnbGVfb247CisJaW50IGZyYWdfcG9pbnQgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0Y2IsICZz
dGNiLT5hc29jKTsKKwlpbnQgdW5fc2VudCA9IDA7CisJaW50IGZyX2RvbmU7CisJdW5zaWduZWQg
aW50IHRvdF9mcnMgPSAwOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tl
ZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJ
CXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlhc29j
ID0gJnN0Y2ItPmFzb2M7Citkb19pdF9hZ2FpbjoKKwkvKiBUaGUgTmFnbGUgYWxnb3JpdGhtIGlz
IG9ubHkgYXBwbGllZCB3aGVuIGhhbmRsaW5nIGEgc2VuZCBjYWxsLiAqLworCWlmIChmcm9tX3do
ZXJlID09IFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQpIHsKKwkJaWYgKHNjdHBfaXNfZmVhdHVy
ZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKSB7CisJCQluYWdsZV9vbiA9IDA7CisJ
CX0gZWxzZSB7CisJCQluYWdsZV9vbiA9IDE7CisJCX0KKwl9IGVsc2UgeworCQluYWdsZV9vbiA9
IDA7CisJfQorCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCisJdW5fc2VudCA9IChzdGNi
LT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQp
OworCisJaWYgKCh1bl9zZW50IDw9IDApICYmCisJICAgIChUQUlMUV9FTVBUWSgmYXNvYy0+Y29u
dHJvbF9zZW5kX3F1ZXVlKSkgJiYKKwkgICAgKFRBSUxRX0VNUFRZKCZhc29jLT5hc2NvbmZfc2Vu
ZF9xdWV1ZSkpICYmCisJICAgIChhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYK
KwkgICAgKGFzb2MtPnRyaWdnZXJfcmVzZXQgPT0gMCkpIHsKKwkJLyogTm90aGluZyB0byBkbyB1
bmxlc3MgdGhlcmUgaXMgc29tZXRoaW5nIHRvIGJlIHNlbnQgbGVmdCAqLworCQlyZXR1cm47CisJ
fQorCS8qIERvIHdlIGhhdmUgc29tZXRoaW5nIHRvIHNlbmQsIGRhdGEgb3IgY29udHJvbCBBTkQK
KwkgKiBhIHNhY2sgdGltZXIgcnVubmluZywgaWYgc28gcGlnZ3ktYmFjayB0aGUgc2Fjay4KKwkg
Ki8KKwlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5HKCZzdGNiLT5hc29jLmRhY2tfdGltZXIudGlt
ZXIpKSB7CisJCXNjdHBfc2VuZF9zYWNrKHN0Y2IsIHNvX2xvY2tlZCk7CisJCSh2b2lkKVNDVFBf
T1NfVElNRVJfU1RPUCgmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKTsKKwl9CisJd2hpbGUg
KGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCkgeworCQkvKi0KKwkJICogT2ssIGl0IGlzIHJl
dHJhbnNtaXNzaW9uIHRpbWUgb25seSwgd2Ugc2VuZCBvdXQgb25seSBPTkUKKwkJICogcGFja2V0
IHdpdGggYSBzaW5nbGUgY2FsbCBvZmYgdG8gdGhlIHJldHJhbiBjb2RlLgorCQkgKi8KKwkJaWYg
KGZyb21fd2hlcmUgPT0gU0NUUF9PVVRQVVRfRlJPTV9DT09LSUVfQUNLKSB7CisJCQkvKi0KKwkJ
CSAqIFNwZWNpYWwgaG9vayBmb3IgaGFuZGxpbmcgY29va2llc3MgZGlzY2FyZGVkCisJCQkgKiBi
eSBwZWVyIHRoYXQgY2FycmllZCBkYXRhLiBTZW5kIGNvb2tpZS1hY2sgb25seQorCQkJICogYW5k
IHRoZW4gdGhlIG5leHQgY2FsbCB3aXRoIGdldCB0aGUgcmV0cmFuJ3MuCisJCQkgKi8KKwkJCSh2
b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVh
c29uX2NvZGUsIDEsCisJCQkJCQkgICAgZnJvbV93aGVyZSwKKwkJCQkJCSAgICAmbm93LCAmbm93
X2ZpbGxlZCwgZnJhZ19wb2ludCwgc29fbG9ja2VkKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIGlm
IChmcm9tX3doZXJlICE9IFNDVFBfT1VUUFVUX0ZST01fSEJfVE1SKSB7CisJCQkvKiBpZiBpdHMg
bm90IGZyb20gYSBIQiB0aGVuIGRvIGl0ICovCisJCQlmcl9kb25lID0gMDsKKwkJCXJldCA9IHNj
dHBfY2h1bmtfcmV0cmFuc21pc3Npb24oaW5wLCBzdGNiLCBhc29jLCAmbnVtX291dCwgJm5vdywg
Jm5vd19maWxsZWQsICZmcl9kb25lLCBzb19sb2NrZWQpOworCQkJaWYgKGZyX2RvbmUpIHsKKwkJ
CQl0b3RfZnJzKys7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogaXRzIGZyb20gYW55
IG90aGVyIHBsYWNlLCB3ZSBkb24ndCBhbGxvdyByZXRyYW4KKwkJCSAqIG91dHB1dCAob25seSBj
b250cm9sKQorCQkJICovCisJCQlyZXQgPSAxOworCQl9CisJCWlmIChyZXQgPiAwKSB7CisJCQkv
KiBDYW4ndCBzZW5kIGFueW1vcmUgKi8KKwkJCS8qLQorCQkJICogbm93IGxldHMgcHVzaCBvdXQg
Y29udHJvbCBieSBjYWxsaW5nIG1lZC1sZXZlbAorCQkJICogb3V0cHV0IG9uY2UuIHRoaXMgYXNz
dXJlcyB0aGF0IHdlIFdJTEwgc2VuZCBIQidzCisJCQkgKiBpZiBxdWV1ZWQgdG9vLgorCQkJICov
CisJCQkodm9pZClzY3RwX21lZF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBhc29jLCAmbnVtX291
dCwgJnJlYXNvbl9jb2RlLCAxLAorCQkJCQkJICAgIGZyb21fd2hlcmUsCisJCQkJCQkgICAgJm5v
dywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQsIHNvX2xvY2tlZCk7CisjaWZkZWYgU0NUUF9BVURJ
VElOR19FTkFCTEVECisJCQlzY3RwX2F1ZGl0aW5nKDgsIGlucCwgc3RjYiwgTlVMTCk7CisjZW5k
aWYKKwkJCXNjdHBfdGltZXJfdmFsaWRhdGlvbihpbnAsIHN0Y2IsIGFzb2MpOworCQkJcmV0dXJu
OworCQl9CisJCWlmIChyZXQgPCAwKSB7CisJCQkvKi0KKwkJCSAqIFRoZSBjb3VudCB3YXMgb2Zm
Li4gcmV0cmFuIGlzIG5vdCBoYXBwZW5pbmcgc28gZG8KKwkJCSAqIHRoZSBub3JtYWwgcmV0cmFu
c21pc3Npb24uCisJCQkgKi8KKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJCXNjdHBf
YXVkaXRpbmcoOSwgaW5wLCBzdGNiLCBOVUxMKTsKKyNlbmRpZgorCQkJaWYgKHJldCA9PSBTQ1RQ
X1JFVFJBTl9FWElUKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJaWYg
KGZyb21fd2hlcmUgPT0gU0NUUF9PVVRQVVRfRlJPTV9UMykgeworCQkJLyogT25seSBvbmUgdHJh
bnNtaXNzaW9uIGFsbG93ZWQgb3V0IG9mIGEgdGltZW91dCAqLworI2lmZGVmIFNDVFBfQVVESVRJ
TkdfRU5BQkxFRAorCQkJc2N0cF9hdWRpdGluZygxMCwgaW5wLCBzdGNiLCBOVUxMKTsKKyNlbmRp
ZgorCQkJLyogUHVzaCBvdXQgYW55IGNvbnRyb2wgKi8KKwkJCSh2b2lkKXNjdHBfbWVkX2NodW5r
X291dHB1dChpbnAsIHN0Y2IsIGFzb2MsICZudW1fb3V0LCAmcmVhc29uX2NvZGUsIDEsIGZyb21f
d2hlcmUsCisJCQkJCQkgICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQsIHNvX2xvY2tl
ZCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKChhc29jLT5mcl9tYXhfYnVyc3QgPiAwKSAmJiAo
dG90X2ZycyA+PSBhc29jLT5mcl9tYXhfYnVyc3QpKSB7CisJCQkvKiBIaXQgRlIgYnVyc3QgbGlt
aXQgKi8KKwkJCXJldHVybjsKKwkJfQorCQlpZiAoKG51bV9vdXQgPT0gMCkgJiYgKHJldCA9PSAw
KSkgeworCQkJLyogTm8gbW9yZSByZXRyYW5zIHRvIHNlbmQgKi8KKwkJCWJyZWFrOworCQl9CisJ
fQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVkaXRpbmcoMTIsIGlucCwg
c3RjYiwgTlVMTCk7CisjZW5kaWYKKwkvKiBDaGVjayBmb3IgYmFkIGRlc3RpbmF0aW9ucywgaWYg
dGhleSBleGlzdCBtb3ZlIGNodW5rcyBhcm91bmQuICovCisJVEFJTFFfRk9SRUFDSChuZXQsICZh
c29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9B
RERSX1JFQUNIQUJMRSkpIHsKKwkJCS8qLQorCQkJICogaWYgcG9zc2libGUgbW92ZSB0aGluZ3Mg
b2ZmIG9mIHRoaXMgYWRkcmVzcyB3ZQorCQkJICogc3RpbGwgbWF5IHNlbmQgYmVsb3cgZHVlIHRv
IHRoZSBkb3JtYW50IHN0YXRlIGJ1dAorCQkJICogd2UgdHJ5IHRvIGZpbmQgYW4gYWx0ZXJuYXRl
IGFkZHJlc3MgdG8gc2VuZCB0bworCQkJICogYW5kIGlmIHdlIGhhdmUgb25lIHdlIG1vdmUgYWxs
IHF1ZXVlZCBkYXRhIG9uIHRoZQorCQkJICogb3V0IHdoZWVsIHRvIHRoaXMgYWx0ZXJuYXRlIGFk
ZHJlc3MuCisJCQkgKi8KKwkJCWlmIChuZXQtPnJlZl9jb3VudCA+IDEpCisJCQkJc2N0cF9tb3Zl
X2NodW5rc19mcm9tX25ldChzdGNiLCBuZXQpOworCQl9IGVsc2UgeworCQkJLyotCisJCQkgKiBp
ZiAoKGFzb2MtPnNhdF9uZXR3b3JrKSB8fCAobmV0LT5hZGRyX2lzX2xvY2FsKSkKKwkJCSAqIHsg
YnVyc3RfbGltaXQgPSBhc29jLT5tYXhfYnVyc3QgKgorCQkJICogU0NUUF9TQVRfTkVUV09SS19C
VVJTVF9JTkNSOyB9CisJCQkgKi8KKwkJCWlmIChhc29jLT5tYXhfYnVyc3QgPiAwKSB7CisJCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCkpIHsKKwkJ
CQkJaWYgKChuZXQtPmZsaWdodF9zaXplICsgKGFzb2MtPm1heF9idXJzdCAqIG5ldC0+bXR1KSkg
PCBuZXQtPmN3bmQpIHsKKwkJCQkJCS8qIEpSUyAtIFVzZSB0aGUgY29uZ2VzdGlvbiBjb250cm9s
IGdpdmVuIGluIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgbW9kdWxlICovCisJCQkJCQlhc29jLT5j
Y19mdW5jdGlvbnMuc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9vdXRwdXQoc3RjYiwgbmV0LCBhc29j
LT5tYXhfYnVyc3QpOworCQkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgeworCQkJCQkJCXNjdHBfbG9nX21heGJ1
cnN0KHN0Y2IsIG5ldCwgMCwgYXNvYy0+bWF4X2J1cnN0LCBTQ1RQX01BWF9CVVJTVF9BUFBMSUVE
KTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsK
KwkJCQkJfQorCQkJCQluZXQtPmZhc3RfcmV0cmFuX2lwID0gMDsKKwkJCQl9IGVsc2UgeworCQkJ
CQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA9PSAwKSB7CisJCQkJCQkvKiBTaG91bGQgYmUgZGVjYXlp
bmcgdGhlIGN3bmQgaGVyZSAqLworCQkJCQkJOworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisK
Kwl9CisJYnVyc3RfY250ID0gMDsKKwlkbyB7CisJCWVycm9yID0gc2N0cF9tZWRfY2h1bmtfb3V0
cHV0KGlucCwgc3RjYiwgYXNvYywgJm51bV9vdXQsCisJCQkJCSAgICAgICZyZWFzb25fY29kZSwg
MCwgZnJvbV93aGVyZSwKKwkJCQkJICAgICAgJm5vdywgJm5vd19maWxsZWQsIGZyYWdfcG9pbnQs
IHNvX2xvY2tlZCk7CisJCWlmIChlcnJvcikgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDEsICJFcnJvciAlZCB3YXMgcmV0dXJuZWQgZnJvbSBtZWQtYy1vcFxuIiwgZXJyb3IpOworCQkJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX01BWEJV
UlNUX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX21heGJ1cnN0KHN0Y2IsIGFzb2MtPnByaW1hcnlf
ZGVzdGluYXRpb24sIGVycm9yLCBidXJzdF9jbnQsIFNDVFBfTUFYX0JVUlNUX0VSUk9SX1NUT1Ap
OworCQkJfQorCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQ1dORF9MT0dHSU5HX0VOQUJMRSkgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgTlVMTCwg
ZXJyb3IsIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTKTsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2Is
IE5VTEwsIDB4ZGVhZGJlZWYsIFNDVFBfU0VORF9OT1dfQ09NUExFVEVTKTsKKwkJCX0KKwkJCWJy
ZWFrOworCQl9CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQzLCAibS1jLW8gcHV0IG91dCAl
ZFxuIiwgbnVtX291dCk7CisKKwkJdG90X291dCArPSBudW1fb3V0OworCQlidXJzdF9jbnQrKzsK
KwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9M
T0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfY3duZChzdGNiLCBOVUxMLCBudW1fb3V0LCBT
Q1RQX1NFTkRfTk9XX0NPTVBMRVRFUyk7CisJCQlpZiAobnVtX291dCA9PSAwKSB7CisJCQkJc2N0
cF9sb2dfY3duZChzdGNiLCBOVUxMLCByZWFzb25fY29kZSwgU0NUUF9TRU5EX05PV19DT01QTEVU
RVMpOworCQkJfQorCQl9CisJCWlmIChuYWdsZV9vbikgeworCQkJLyoKKwkJCSAqIFdoZW4gdGhl
IE5hZ2xlIGFsZ29yaXRobSBpcyB1c2VkLCBsb29rIGF0IGhvdyBtdWNoCisJCQkgKiBpcyB1bnNl
bnQsIHRoZW4gaWYgaXRzIHNtYWxsZXIgdGhhbiBhbiBNVFUgYW5kIHdlCisJCQkgKiBoYXZlIGRh
dGEgaW4gZmxpZ2h0IHdlIHN0b3AsIGV4Y2VwdCBpZiB3ZSBhcmUKKwkJCSAqIGhhbmRsaW5nIGEg
ZnJhZ21lbnRlZCB1c2VyIG1lc3NhZ2UuCisJCQkgKi8KKwkJCXVuX3NlbnQgPSBzdGNiLT5hc29j
LnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQ7CisJCQlp
ZiAoKHVuX3NlbnQgPCAoaW50KShzdGNiLT5hc29jLnNtYWxsZXN0X210dSAtIFNDVFBfTUlOX09W
RVJIRUFEKSkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPiAwKSkgeworLyoJ
JiYJCSAgICAgc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhQTElDSVRf
RU9SKSkpIHsqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChUQUlMUV9FTVBUWSgmYXNv
Yy0+Y29udHJvbF9zZW5kX3F1ZXVlKSAmJgorCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRf
cXVldWUpICYmCisJCSAgICBzY3RwX2lzX3RoZXJlX3Vuc2VudF9kYXRhKHN0Y2IsIHNvX2xvY2tl
ZCkgPT0gMCkgeworCQkJLyogTm90aGluZyBsZWZ0IHRvIHNlbmQgKi8KKwkJCWJyZWFrOworCQl9
CisJCWlmICgoc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2Mu
dG90YWxfZmxpZ2h0KSA8PSAwKSB7CisJCQkvKiBOb3RoaW5nIGxlZnQgdG8gc2VuZCAqLworCQkJ
YnJlYWs7CisJCX0KKwl9IHdoaWxlIChudW1fb3V0ICYmCisJICAgICAgICAgKChhc29jLT5tYXhf
YnVyc3QgPT0gMCkgfHwKKwkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRf
bWF4YnVyc3QpIHx8CisJCSAgKGJ1cnN0X2NudCA8IGFzb2MtPm1heF9idXJzdCkpKTsKKworCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3QpID09IDApIHsK
KwkJaWYgKChhc29jLT5tYXhfYnVyc3QgPiAwKSAmJiAoYnVyc3RfY250ID49IGFzb2MtPm1heF9i
dXJzdCkpIHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX21heGJ1cnN0cXVldWVkKTsKKwkJCWFz
b2MtPmJ1cnN0X2xpbWl0X2FwcGxpZWQgPSAxOworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9HX01BWEJVUlNUX0VOQUJMRSkgeworCQkJCXNjdHBf
bG9nX21heGJ1cnN0KHN0Y2IsIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24sIDAsIGJ1cnN0X2Nu
dCwgU0NUUF9NQVhfQlVSU1RfQVBQTElFRCk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhc29jLT5i
dXJzdF9saW1pdF9hcHBsaWVkID0gMDsKKwkJfQorCX0KKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9DV05EX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBf
bG9nX2N3bmQoc3RjYiwgTlVMTCwgdG90X291dCwgU0NUUF9TRU5EX05PV19DT01QTEVURVMpOwor
CX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIk9rLCB3ZSBoYXZlIHB1dCBvdXQgJWQg
Y2h1bmtzXG4iLAorCQl0b3Rfb3V0KTsKKworCS8qLQorCSAqIE5vdyB3ZSBuZWVkIHRvIGNsZWFu
IHVwIHRoZSBjb250cm9sIGNodW5rIGNoYWluIGlmIGEgRUNORSBpcyBvbgorCSAqIGl0LiBJdCBt
dXN0IGJlIG1hcmtlZCBhcyBVTlNFTlQgYWdhaW4gc28gbmV4dCBjYWxsIHdpbGwgY29udGludWUK
KwkgKiB0byBzZW5kIGl0IHVudGlsIHN1Y2ggdGltZSB0aGF0IHdlIGdldCBhIENXUiwgdG8gcmVt
b3ZlIGl0LgorCSAqLworCWlmIChzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnEpCisJCXNjdHBf
Zml4X2Vjbl9lY2hvKGFzb2MpOworCisJaWYgKHN0Y2ItPmFzb2MudHJpZ2dlcl9yZXNldCkgewor
CQlpZiAoc2N0cF9zZW5kX3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RjYiwgc29fbG9j
a2VkKSA9PSAwKSAgeworCQkJZ290byBkb19pdF9hZ2FpbjsKKwkJfQorCX0KKwlyZXR1cm47Cit9
CisKKworaW50CitzY3RwX291dHB1dCgKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorI2lmIGRl
ZmluZWQoX19QYW5kYV9fKQorCXBha2hhbmRsZV90eXBlIG0sCisjZWxzZQorCXN0cnVjdCBtYnVm
ICptLAorI2VuZGlmCisJc3RydWN0IHNvY2thZGRyICphZGRyLAorI2lmIGRlZmluZWQoX19QYW5k
YV9fKQorCXBha2hhbmRsZV90eXBlIGNvbnRyb2wsCisjZWxzZQorCXN0cnVjdCBtYnVmICpjb250
cm9sLAorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gNTAwMDAwCisJc3RydWN0IHRocmVhZCAqcCwKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dz
X18pCisJUEtUSFJFQUQgcCwKKyNlbHNlCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0
IHByb2MgKnAgU0NUUF9VTlVTRUQsCisjZWxzZQorCXN0cnVjdCBwcm9jICpwLAorI2VuZGlmCisj
ZW5kaWYKKwlpbnQgZmxhZ3MpCit7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNF
X0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
SU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKGlucC0+c2N0cF9zb2NrZXQg
PT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0K
KwlyZXR1cm4gKHNjdHBfc29zZW5kKGlucC0+c2N0cF9zb2NrZXQsCisJCQkgICAgYWRkciwKKwkJ
CSAgICAoc3RydWN0IHVpbyAqKU5VTEwsCisJCQkgICAgbSwKKwkJCSAgICBjb250cm9sLAorI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fUGFuZGFfXykKKwkJCSAgICBmbGFncwor
I2Vsc2UKKwkJCSAgICBmbGFncywgcAorI2VuZGlmCisJCQkpKTsKK30KKwordm9pZAorc2VuZF9m
b3J3YXJkX3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCSBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphdCwgKnRwMSwg
Kmxhc3Q7CisJc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKmZ3ZHRzbjsKKwlzdHJ1Y3Qg
c2N0cF9zdHJzZXEgKnN0cnNlcTsKKwlzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkICpzdHJzZXFfbTsK
Kwl1aW50MzJfdCBhZHZhbmNlX3BlZXJfYWNrX3BvaW50OworCXVuc2lnbmVkIGludCBjbnRfb2Zf
c3BhY2UsIGksIG92aDsKKwl1bnNpZ25lZCBpbnQgc3BhY2VfbmVlZGVkOworCXVuc2lnbmVkIGlu
dCBjbnRfb2Zfc2tpcHBlZCA9IDA7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlU
QUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7
CisJCWlmIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0ZPUldBUkRfQ1VNX1RTTikgewor
CQkJLyogbWFyayBpdCB0byB1bnNlbnQgKi8KKwkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1f
VU5TRU5UOworCQkJY2hrLT5zbmRfY291bnQgPSAwOworCQkJLyogRG8gd2UgY29ycmVjdCBpdHMg
b3V0cHV0IGxvY2F0aW9uPyAqLworCQkJaWYgKGNoay0+d2hvVG8pIHsKKwkJCQlzY3RwX2ZyZWVf
cmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJ
CQlnb3RvIHNjdHBfZmlsbF9pbl9yZXN0OworCQl9CisJfQorCS8qIE9rIGlmIHdlIHJlYWNoIGhl
cmUgd2UgbXVzdCBidWlsZCBvbmUgKi8KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsK
KwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29jLT5md2RfdHNuX2NudCsr
OworCWNoay0+Y29weV9ieV9yZWYgPSAwOworCS8qCisJICogV2UgZG9uJ3QgZG8gdGhlIG9sZCB0
aGluZyBoZXJlIHNpbmNlCisJICogdGhpcyBpcyB1c2VkIG5vdCBmb3Igb24td2lyZSBidXQgdG8K
KwkgKiB0ZWxsIGlmIHdlIGFyZSBzZW5kaW5nIGEgZndkLXRzbiBieQorCSAqIHRoZSBzdGFjayBk
dXJpbmcgb3V0cHV0LiBBbmQgaWYgaXRzCisJICogYSBJRk9SV0FSRCBvciBhIEZPUldBUkQgaXQg
aXMgYSBmd2QtdHNuLgorCSAqLworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9GT1JXQVJE
X0NVTV9UU047CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7CisJY2hrLT5m
bGFncyA9IDA7CisJY2hrLT5hc29jID0gYXNvYzsKKwljaGstPndob1RvID0gTlVMTDsKKwljaGst
PmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBN
VF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmso
c3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlyZXR1cm47CisJfQorCVNDVFBfQlVG
X1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJY2hrLT5zZW50ID0gU0NU
UF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCVRBSUxRX0lOU0VSVF9U
QUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5j
dHJsX3F1ZXVlX2NudCsrOworc2N0cF9maWxsX2luX3Jlc3Q6CisJLyotCisJICogSGVyZSB3ZSBn
byB0aHJvdWdoIGFuZCBmaWxsIG91dCB0aGUgcGFydCB0aGF0IGRlYWxzIHdpdGgKKwkgKiBzdHJl
YW0vc2VxIG9mIHRoZSBvbmVzIHdlIHNraXAuCisJICovCisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0
YSkgPSAwOworCVRBSUxRX0ZPUkVBQ0goYXQsICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQp
IHsKKwkJaWYgKChhdC0+c2VudCAhPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVApICYmCisJCSAgICAo
YXQtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkpIHsKKwkJCS8qIG5vIG1vcmUgdG8g
bG9vayBhdCAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQg
JiYgKGF0LT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJ
LyogV2UgZG9uJ3QgcmVwb3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQljbnRfb2Zf
c2tpcHBlZCsrOworCX0KKwlpZiAoYXNvYy0+aWRhdGFfc3VwcG9ydGVkKSB7CisJCXNwYWNlX25l
ZWRlZCA9IChzaXplb2Yoc3RydWN0IHNjdHBfZm9yd2FyZF90c25fY2h1bmspICsKKwkJICAgICAg
ICAgICAgICAgIChjbnRfb2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlk
KSkpOworCX0gZWxzZSB7CisJCXNwYWNlX25lZWRlZCA9IChzaXplb2Yoc3RydWN0IHNjdHBfZm9y
d2FyZF90c25fY2h1bmspICsKKwkJICAgICAgICAgICAgICAgIChjbnRfb2Zfc2tpcHBlZCAqIHNp
emVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXEpKSk7CisJfQorCWNudF9vZl9zcGFjZSA9ICh1bnNpZ25l
ZCBpbnQpTV9UUkFJTElOR1NQQUNFKGNoay0+ZGF0YSk7CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCW92aCA9IFNDVFBfTUlO
X09WRVJIRUFEOworCX0gZWxzZSB7CisJCW92aCA9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCX0K
KwlpZiAoY250X29mX3NwYWNlID4gKGFzb2MtPnNtYWxsZXN0X210dSAtIG92aCkpIHsKKwkJLyog
dHJpbSB0byBhIG10dSBzaXplICovCisJCWNudF9vZl9zcGFjZSA9IGFzb2MtPnNtYWxsZXN0X210
dSAtIG92aDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTE9HX1RSWV9BRFZBTkNFKSB7CisJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9D
SEVDSywKKwkJCSAgICAgICAweGZmLCAwLCBjbnRfb2Zfc2tpcHBlZCwKKwkJCSAgICAgICBhc29j
LT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludCk7CisJfQorCWFkdmFuY2VfcGVlcl9hY2tfcG9pbnQg
PSBhc29jLT5hZHZhbmNlZF9wZWVyX2Fja19wb2ludDsKKwlpZiAoY250X29mX3NwYWNlIDwgc3Bh
Y2VfbmVlZGVkKSB7CisJCS8qLQorCQkgKiBvayB3ZSBtdXN0IHRyaW0gZG93biB0aGUgY2h1bmsg
YnkgbG93ZXJpbmcgdGhlCisJCSAqIGFkdmFuY2UgcGVlciBhY2sgcG9pbnQuCisJCSAqLworCQlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0dfVFJZX0FE
VkFOQ0UpIHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfRldEX1RTTl9DSEVDSywKKwkJCQkgICAg
ICAgMHhmZiwgMHhmZiwgY250X29mX3NwYWNlLAorCQkJCSAgICAgICBzcGFjZV9uZWVkZWQpOwor
CQl9CisJCWNudF9vZl9za2lwcGVkID0gY250X29mX3NwYWNlIC0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2ZvcndhcmRfdHNuX2NodW5rKTsKKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJ
Y250X29mX3NraXBwZWQgLz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcV9taWQpOworCQl9IGVs
c2UgeworCQkJY250X29mX3NraXBwZWQgLz0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cnNlcSk7CisJ
CX0KKwkJLyotCisJCSAqIEdvIHRocm91Z2ggYW5kIGZpbmQgdGhlIFRTTiB0aGF0IHdpbGwgYmUg
dGhlIG9uZQorCQkgKiB3ZSByZXBvcnQuCisJCSAqLworCQlhdCA9IFRBSUxRX0ZJUlNUKCZhc29j
LT5zZW50X3F1ZXVlKTsKKwkJaWYgKGF0ICE9IE5VTEwpIHsKKwkJCWZvciAoaSA9IDA7IGkgPCBj
bnRfb2Zfc2tpcHBlZDsgaSsrKSB7CisJCQkJdHAxID0gVEFJTFFfTkVYVChhdCwgc2N0cF9uZXh0
KTsKKwkJCQlpZiAodHAxID09IE5VTEwpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWF0ID0g
dHAxOworCQkJfQorCQl9CisJCWlmIChhdCAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2lu
Z19sZXZlbCkgJiBTQ1RQX0xPR19UUllfQURWQU5DRSkgeworCQkJc2N0cF9taXNjX2ludHMoU0NU
UF9GV0RfVFNOX0NIRUNLLAorCQkJCSAgICAgICAweGZmLCBjbnRfb2Zfc2tpcHBlZCwgYXQtPnJl
Yy5kYXRhLnRzbiwKKwkJCQkgICAgICAgYXNvYy0+YWR2YW5jZWRfcGVlcl9hY2tfcG9pbnQpOwor
CQl9CisJCWxhc3QgPSBhdDsKKwkJLyotCisJCSAqIGxhc3Qgbm93IHBvaW50cyB0byBsYXN0IG9u
ZSBJIGNhbiByZXBvcnQsIHVwZGF0ZQorCQkgKiBwZWVyIGFjayBwb2ludAorCQkgKi8KKwkJaWYg
KGxhc3QpIHsKKwkJCWFkdmFuY2VfcGVlcl9hY2tfcG9pbnQgPSBsYXN0LT5yZWMuZGF0YS50c247
CisJCX0KKwkJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJc3BhY2VfbmVlZGVkID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2ZvcndhcmRfdHNuX2NodW5rKSArCisJCQkgICAgICAgICAgICAg
ICBjbnRfb2Zfc2tpcHBlZCAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJzZXFfbWlkKTsKKwkJfSBl
bHNlIHsKKwkJCXNwYWNlX25lZWRlZCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9mb3J3YXJkX3Rzbl9j
aHVuaykgKworCQkJICAgICAgICAgICAgICAgY250X29mX3NraXBwZWQgKiBzaXplb2Yoc3RydWN0
IHNjdHBfc3Ryc2VxKTsKKwkJfQorCX0KKwljaGstPnNlbmRfc2l6ZSA9IHNwYWNlX25lZWRlZDsK
KwkvKiBTZXR1cCB0aGUgY2h1bmsgKi8KKwlmd2R0c24gPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0
IHNjdHBfZm9yd2FyZF90c25fY2h1bmsgKik7CisJZndkdHNuLT5jaC5jaHVua19sZW5ndGggPSBo
dG9ucyhjaGstPnNlbmRfc2l6ZSk7CisJZndkdHNuLT5jaC5jaHVua19mbGFncyA9IDA7CisJaWYg
KGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQlmd2R0c24tPmNoLmNodW5rX3R5cGUgPSBTQ1RQ
X0lGT1JXQVJEX0NVTV9UU047CisJfSBlbHNlIHsKKwkJZndkdHNuLT5jaC5jaHVua190eXBlID0g
U0NUUF9GT1JXQVJEX0NVTV9UU047CisJfQorCWZ3ZHRzbi0+bmV3X2N1bXVsYXRpdmVfdHNuID0g
aHRvbmwoYWR2YW5jZV9wZWVyX2Fja19wb2ludCk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkg
PSBjaGstPnNlbmRfc2l6ZTsKKwlmd2R0c24rKzsKKwkvKi0KKwkgKiBNb3ZlIHBvaW50ZXIgdG8g
YWZ0ZXIgdGhlIGZ3ZHRzbiBhbmQgdHJhbnNmZXIgdG8gdGhlCisJICogc3Ryc2VxIHBvaW50ZXIu
CisJICovCisJaWYgKGFzb2MtPmlkYXRhX3N1cHBvcnRlZCkgeworCQlzdHJzZXFfbSA9IChzdHJ1
Y3Qgc2N0cF9zdHJzZXFfbWlkICopZndkdHNuOworCQlzdHJzZXEgPSBOVUxMOworCX0gZWxzZSB7
CisJCXN0cnNlcSA9IChzdHJ1Y3Qgc2N0cF9zdHJzZXEgKilmd2R0c247CisJCXN0cnNlcV9tID0g
TlVMTDsKKwl9CisJLyotCisJICogTm93IHBvcHVsYXRlIHRoZSBzdHJzZXEgbGlzdC4gVGhpcyBp
cyBkb25lIGJsaW5kbHkKKwkgKiB3aXRob3V0IHB1bGxpbmcgb3V0IGR1cGxpY2F0ZSBzdHJlYW0g
aW5mby4gVGhpcyBpcworCSAqIGluZWZmaWNlbnQgYnV0IHdvbid0IGhhcm0gdGhlIHByb2Nlc3Mg
c2luY2UgdGhlIHBlZXIgd2lsbAorCSAqIGxvb2sgYXQgdGhlc2UgaW4gc2VxdWVuY2UgYW5kIHdp
bGwgdGh1cyByZWxlYXNlIGFueXRoaW5nLgorCSAqIEl0IGNvdWxkIG1lYW4gd2UgZXhjZWVkIHRo
ZSBQTVRVIGFuZCBjaG9wIG9mZiBzb21lIHRoYXQKKwkgKiB3ZSBjb3VsZCBoYXZlIGluY2x1ZGVk
Li4gYnV0IHRoaXMgaXMgdW5saWtlbHkgKGFrYSAxNDMyLzQKKwkgKiB3b3VsZCBtZWFuIDMwMCsg
c3RyZWFtIHNlcSdzIHdvdWxkIGhhdmUgdG8gYmUgcmVwb3J0ZWQgaW4KKwkgKiBvbmUgRldELVRT
Ti4gV2l0aCBhIGJpdCBvZiB3b3JrIHdlIGNhbiBsYXRlciBGSVggdGhpcyB0bworCSAqIG9wdGlt
aXplIGFuZCBwdWxsIG91dCBkdXBsaWNhdGVzLi4gYnV0IGl0IGRvZXMgYWRkIG1vcmUKKwkgKiBv
dmVyaGVhZC4gU28gZm9yIG5vdy4uLiBub3QhCisJICovCisJaSA9IDA7CisJVEFJTFFfRk9SRUFD
SChhdCwgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoaSA+PSBjbnRfb2Zf
c2tpcHBlZCkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCFhc29jLT5pZGF0YV9zdXBwb3J0ZWQg
JiYgKGF0LT5yZWMuZGF0YS5yY3ZfZmxhZ3MgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKSkgeworCQkJ
LyogV2UgZG9uJ3QgcmVwb3J0IHRoZXNlICovCisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoYXQt
PnJlYy5kYXRhLnRzbiA9PSBhZHZhbmNlX3BlZXJfYWNrX3BvaW50KSB7CisJCQlhdC0+cmVjLmRh
dGEuZndkX3Rzbl9jbnQgPSAwOworCQl9CisJCWlmIChhc29jLT5pZGF0YV9zdXBwb3J0ZWQpIHsK
KwkJCXN0cnNlcV9tLT5zaWQgPSBodG9ucyhhdC0+cmVjLmRhdGEuc2lkKTsKKwkJCWlmIChhdC0+
cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJCXN0cnNlcV9t
LT5mbGFncyA9IGh0b25zKFBSX1NDVFBfVU5PUkRFUkVEX0ZMQUcpOworCQkJfSBlbHNlIHsKKwkJ
CQlzdHJzZXFfbS0+ZmxhZ3MgPSAwOworCQkJfQorCQkJc3Ryc2VxX20tPm1pZCA9IGh0b25sKGF0
LT5yZWMuZGF0YS5taWQpOworCQkJc3Ryc2VxX20rKzsKKwkJfSBlbHNlIHsKKwkJCXN0cnNlcS0+
c2lkID0gaHRvbnMoYXQtPnJlYy5kYXRhLnNpZCk7CisJCQlzdHJzZXEtPnNzbiA9IGh0b25zKCh1
aW50MTZfdClhdC0+cmVjLmRhdGEubWlkKTsKKwkJCXN0cnNlcSsrOworCQl9CisJCWkrKzsKKwl9
CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFND
VFBfU09fTE9DS19URVNUSU5HKQorCVNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKwkvKi0KKwkg
KiBRdWV1ZSB1cCBhIFNBQ0sgb3IgTlItU0FDSyBpbiB0aGUgY29udHJvbCBxdWV1ZS4KKwkgKiBX
ZSBtdXN0IGZpcnN0IGNoZWNrIHRvIHNlZSBpZiBhIFNBQ0sgb3IgTlItU0FDSyBpcworCSAqIHNv
bWVob3cgb24gdGhlIGNvbnRyb2wgcXVldWUuCisJICogSWYgc28sIHdlIHdpbGwgdGFrZSBhbmQg
YW5kIHJlbW92ZSB0aGUgb2xkIG9uZS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssICphX2NoazsKKwlzdHJ1Y3Qgc2N0
cF9zYWNrX2NodW5rICpzYWNrOworCXN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmsgKm5yX3NhY2s7
CisJc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jayAqZ2FwX2Rlc2NyaXB0b3I7CisJY29uc3Qgc3Ry
dWN0IHNhY2tfdHJhY2sgKnNlbGVjdG9yOworCWludCBtZXJnZWFibGUgPSAwOworCWludCBvZmZz
ZXQ7CisJY2FkZHJfdCBsaW1pdDsKKwl1aW50MzJfdCAqZHVwOworCWludCBsaW1pdF9yZWFjaGVk
ID0gMDsKKwl1bnNpZ25lZCBpbnQgaSwgc2l6LCBqOworCXVuc2lnbmVkIGludCBudW1fZ2FwX2Js
b2NrcyA9IDAsIG51bV9ucl9nYXBfYmxvY2tzID0gMCwgc3BhY2U7CisJaW50IG51bV9kdXBzID0g
MDsKKwlpbnQgc3BhY2VfcmVxOworCXVpbnQzMl90IGhpZ2hlc3RfdHNuOworCXVpbnQ4X3QgZmxh
Z3M7CisJdWludDhfdCB0eXBlOworCXVpbnQ4X3QgdHNuX21hcDsKKworCWlmIChzdGNiLT5hc29j
Lm5yc2Fja19zdXBwb3J0ZWQgPT0gMSkgeworCQl0eXBlID0gU0NUUF9OUl9TRUxFQ1RJVkVfQUNL
OworCX0gZWxzZSB7CisJCXR5cGUgPSBTQ1RQX1NFTEVDVElWRV9BQ0s7CisJfQorCWFfY2hrID0g
TlVMTDsKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJU0NUUF9UQ0JfTE9DS19BU1NFUlQoc3RjYik7
CisJaWYgKGFzb2MtPmxhc3RfZGF0YV9jaHVua19mcm9tID09IE5VTEwpIHsKKwkJLyogSG1tIHdl
IG5ldmVyIHJlY2VpdmVkIGFueXRoaW5nICovCisJCXJldHVybjsKKwl9CisJc2N0cF9zbGlkZV9t
YXBwaW5nX2FycmF5cyhzdGNiKTsKKwlzY3RwX3NldF9yd25kKHN0Y2IsIGFzb2MpOworCVRBSUxR
X0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJ
aWYgKGNoay0+cmVjLmNodW5rX2lkLmlkID09IHR5cGUpIHsKKwkJCS8qIEhtbSwgZm91bmQgYSBz
YWNrIGFscmVhZHkgb24gcXVldWUsIHJlbW92ZSBpdCAqLworCQkJVEFJTFFfUkVNT1ZFKCZhc29j
LT5jb250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJCWFzb2MtPmN0cmxfcXVl
dWVfY250LS07CisJCQlhX2NoayA9IGNoazsKKwkJCWlmIChhX2Noay0+ZGF0YSkgeworCQkJCXNj
dHBfbV9mcmVlbShhX2Noay0+ZGF0YSk7CisJCQkJYV9jaGstPmRhdGEgPSBOVUxMOworCQkJfQor
CQkJaWYgKGFfY2hrLT53aG9UbykgeworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihhX2Noay0+
d2hvVG8pOworCQkJCWFfY2hrLT53aG9UbyA9IE5VTEw7CisJCQl9CisJCQlicmVhazsKKwkJfQor
CX0KKwlpZiAoYV9jaGsgPT0gTlVMTCkgeworCQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgYV9j
aGspOworCQlpZiAoYV9jaGsgPT0gTlVMTCkgeworCQkJLyogTm8gbWVtb3J5IHNvIHdlIGRyb3Ag
dGhlIGlkZWEsIGFuZCBzZXQgYSB0aW1lciAqLworCQkJaWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9h
Y2spIHsKKwkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJICAg
ICAgICAgICAgICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIE5VTEwsCisJCQkJICAgICAgICAgICAg
ICAgIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCArIFNDVFBfTE9DXzMpOworCQkJCXNjdHBfdGltZXJf
c3RhcnQoU0NUUF9USU1FUl9UWVBFX1JFQ1YsCisJCQkJICAgIHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlzdGNiLT5hc29jLnNlbmRfc2FjayA9IDE7CisJCQl9
CisJCQlyZXR1cm47CisJCX0KKwkJYV9jaGstPmNvcHlfYnlfcmVmID0gMDsKKwkJYV9jaGstPnJl
Yy5jaHVua19pZC5pZCA9IHR5cGU7CisJCWFfY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0
YSA9IDE7CisJfQorCS8qIENsZWFyIG91ciBwa3QgY291bnRzICovCisJYXNvYy0+ZGF0YV9wa3Rz
X3NlZW4gPSAwOworCisJYV9jaGstPmZsYWdzID0gMDsKKwlhX2Noay0+YXNvYyA9IGFzb2M7CisJ
YV9jaGstPnNuZF9jb3VudCA9IDA7CisJYV9jaGstPnNlbmRfc2l6ZSA9IDA7CS8qIGZpbGwgaW4g
bGF0ZXIgKi8KKwlhX2Noay0+c2VudCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWFfY2hrLT53
aG9UbyA9IE5VTEw7CisKKwlpZiAoIShhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbS0+ZGVzdF9z
dGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB7CisJCS8qLQorCQkgKiBPaywgdGhlIGRlc3Rp
bmF0aW9uIGZvciB0aGUgU0FDSyBpcyB1bnJlYWNoYWJsZSwgbGV0cyBzZWUgaWYKKwkJICogd2Ug
Y2FuIHNlbGVjdCBhbiBhbHRlcm5hdGUgdG8gYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20KKwkJ
ICovCisJCWFfY2hrLT53aG9UbyA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIGFzb2Mt
Pmxhc3RfZGF0YV9jaHVua19mcm9tLCAwKTsKKwkJaWYgKGFfY2hrLT53aG9UbyA9PSBOVUxMKSB7
CisJCQkvKiBOb3BlLCBubyBhbHRlcm5hdGUgKi8KKwkJCWFfY2hrLT53aG9UbyA9IGFzb2MtPmxh
c3RfZGF0YV9jaHVua19mcm9tOworCQl9CisJfSBlbHNlIHsKKwkJYV9jaGstPndob1RvID0gYXNv
Yy0+bGFzdF9kYXRhX2NodW5rX2Zyb207CisJfQorCWlmIChhX2Noay0+d2hvVG8pIHsKKwkJYXRv
bWljX2FkZF9pbnQoJmFfY2hrLT53aG9Uby0+cmVmX2NvdW50LCAxKTsKKwl9CisJaWYgKFNDVFBf
VFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAsIGFzb2MtPmhpZ2hlc3RfdHNuX2lu
c2lkZV9ucl9tYXApKSB7CisJCWhpZ2hlc3RfdHNuID0gYXNvYy0+aGlnaGVzdF90c25faW5zaWRl
X21hcDsKKwl9IGVsc2UgeworCQloaWdoZXN0X3RzbiA9IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lk
ZV9ucl9tYXA7CisJfQorCWlmIChoaWdoZXN0X3RzbiA9PSBhc29jLT5jdW11bGF0aXZlX3Rzbikg
eworCQkvKiBubyBnYXBzICovCisJCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgewor
CQkJc3BhY2VfcmVxID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspOworCQl9IGVsc2Ug
eworCQkJc3BhY2VfcmVxID0gc2l6ZW9mKHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1bmspOworCQl9
CisJfSBlbHNlIHsKKwkJLyogZ2FwcyBnZXQgYSBjbHVzdGVyICovCisJCXNwYWNlX3JlcSA9IE1D
TEJZVEVTOworCX0KKwkvKiBPayBub3cgbGV0cyBmb3JtdWxhdGUgYSBNQlVGIHdpdGggb3VyIHNh
Y2sgKi8KKwlhX2Noay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzcGFjZV9yZXEsIDAs
IE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAoKGFfY2hrLT5kYXRhID09IE5VTEwpIHx8CisJ
ICAgIChhX2Noay0+d2hvVG8gPT0gTlVMTCkpIHsKKwkJLyogcmF0cywgbm8gbWJ1ZiBtZW1vcnkg
Ki8KKwkJaWYgKGFfY2hrLT5kYXRhKSB7CisJCQkvKiB3YXMgYSBwcm9ibGVtIHdpdGggdGhlIGRl
c3RpbmF0aW9uICovCisJCQlzY3RwX21fZnJlZW0oYV9jaGstPmRhdGEpOworCQkJYV9jaGstPmRh
dGEgPSBOVUxMOworCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGFfY2hrLCBzb19sb2Nr
ZWQpOworCQkvKiBzYV9pZ25vcmUgTk9fTlVMTF9DSEsgKi8KKwkJaWYgKHN0Y2ItPmFzb2MuZGVs
YXllZF9hY2spIHsKKwkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfUkVDViwKKwkJ
CSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBOVUxMLAorCQkJICAgICAgICAg
ICAgICAgIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCArIFNDVFBfTE9DXzQpOworCQkJc2N0cF90aW1l
cl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUkVDViwKKwkJCSAgICBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBOVUxMKTsKKwkJfSBlbHNlIHsKKwkJCXN0Y2ItPmFzb2Muc2VuZF9zYWNrID0gMTsKKwkJfQor
CQlyZXR1cm47CisJfQorCS8qIG9rLCBsZXRzIGdvIHRocm91Z2ggYW5kIGZpbGwgaXQgaW4gKi8K
KwlTQ1RQX0JVRl9SRVNWX1VGKGFfY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisJc3Bh
Y2UgPSAodW5zaWduZWQgaW50KU1fVFJBSUxJTkdTUEFDRShhX2Noay0+ZGF0YSk7CisJaWYgKHNw
YWNlID4gKGFfY2hrLT53aG9Uby0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSB7CisJCXNwYWNl
ID0gKGFfY2hrLT53aG9Uby0+bXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpOworCX0KKwlsaW1pdCA9
IG10b2QoYV9jaGstPmRhdGEsIGNhZGRyX3QpOworCWxpbWl0ICs9IHNwYWNlOworCisJZmxhZ3Mg
PSAwOworCisJaWYgKChhc29jLT5zY3RwX2NtdF9vbl9vZmYgPiAwKSAmJgorCSAgICBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfY210X3VzZV9kYWMpKSB7CisJCS8qLQorCQkgKiBDTVQgREFDIGFsZ29y
aXRobTogSWYgMiAoaS5lLiwgMHgxMCkgcGFja2V0cyBoYXZlIGJlZW4KKwkJICogcmVjZWl2ZWQs
IHRoZW4gc2V0IGhpZ2ggYml0IHRvIDEsIGVsc2UgMC4gUmVzZXQKKwkJICogcGt0c19yY3ZkLgor
CQkgKi8KKwkJZmxhZ3MgfD0gKGFzb2MtPmNtdF9kYWNfcGt0c19yY3ZkIDw8IDYpOworCQlhc29j
LT5jbXRfZGFjX3BrdHNfcmN2ZCA9IDA7CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05T
CisJc3RjYi0+YXNvYy5jdW1hY2tfbG9nc250W3N0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNudF0g
PSBhc29jLT5jdW11bGF0aXZlX3RzbjsKKwlzdGNiLT5hc29jLmN1bWFja19sb2dfYXRzbnQrKzsK
KwlpZiAoc3RjYi0+YXNvYy5jdW1hY2tfbG9nX2F0c250ID49IFNDVFBfVFNOX0xPR19TSVpFKSB7
CisJCXN0Y2ItPmFzb2MuY3VtYWNrX2xvZ19hdHNudCA9IDA7CisJfQorI2VuZGlmCisJLyogcmVz
ZXQgdGhlIHJlYWRlcnMgaW50ZXJwcmV0YXRpb24gKi8KKwlzdGNiLT5mcmVlZF9ieV9zb3Jjdl9z
aW5jZWxhc3QgPSAwOworCisJaWYgKHR5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNLKSB7CisJCXNh
Y2sgPSBtdG9kKGFfY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9zYWNrX2NodW5rICopOworCQlucl9z
YWNrID0gTlVMTDsKKwkJZ2FwX2Rlc2NyaXB0b3IgPSAoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9j
ayAqKSgoY2FkZHJfdClzYWNrICsgc2l6ZW9mKHN0cnVjdCBzY3RwX3NhY2tfY2h1bmspKTsKKwkJ
aWYgKGhpZ2hlc3RfdHNuID4gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgeworCQkJc2l6
ID0gKCgoaGlnaGVzdF90c24gLSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSArIDEpICsg
NykgLyA4OworCQl9IGVsc2UgeworCQkJc2l6ID0gKCgoTUFYX1RTTiAtIGhpZ2hlc3RfdHNuKSAr
IDEpICsgaGlnaGVzdF90c24gKyA3KSAvIDg7CisJCX0KKwl9IGVsc2UgeworCQlzYWNrID0gTlVM
TDsKKwkJbnJfc2FjayA9IG10b2QoYV9jaGstPmRhdGEsIHN0cnVjdCBzY3RwX25yX3NhY2tfY2h1
bmsgKik7CisJCWdhcF9kZXNjcmlwdG9yID0gKHN0cnVjdCBzY3RwX2dhcF9hY2tfYmxvY2sgKiko
KGNhZGRyX3QpbnJfc2FjayArIHNpemVvZihzdHJ1Y3Qgc2N0cF9ucl9zYWNrX2NodW5rKSk7CisJ
CWlmIChhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbWFwID4gYXNvYy0+bWFwcGluZ19hcnJheV9i
YXNlX3RzbikgeworCQkJc2l6ID0gKCgoYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCAtIGFz
b2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pICsgMSkgKyA3KSAvIDg7CisJCX0gZWxzZSB7CisJ
CQlzaXogPSAoKChNQVhfVFNOIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSAr
IGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgKyA3KSAvIDg7CisJCX0KKwl9CisKKwlpZiAo
U0NUUF9UU05fR1QoYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbiwgYXNvYy0+Y3VtdWxhdGl2
ZV90c24pKSB7CisJCW9mZnNldCA9IDE7CisJfSBlbHNlIHsKKwkJb2Zmc2V0ID0gYXNvYy0+bWFw
cGluZ19hcnJheV9iYXNlX3RzbiAtIGFzb2MtPmN1bXVsYXRpdmVfdHNuOworCX0KKwlpZiAoKCh0
eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykgJiYKKwkgICAgIFNDVFBfVFNOX0dUKGhpZ2hlc3Rf
dHNuLCBhc29jLT5jdW11bGF0aXZlX3RzbikpIHx8CisJICAgICgodHlwZSA9PSBTQ1RQX05SX1NF
TEVDVElWRV9BQ0spICYmCisJICAgICBTQ1RQX1RTTl9HVChhc29jLT5oaWdoZXN0X3Rzbl9pbnNp
ZGVfbWFwLCBhc29jLT5jdW11bGF0aXZlX3RzbikpKSB7CisJCS8qIHdlIGhhdmUgYSBnYXAgLi4g
bWF5YmUgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNpejsgaSsrKSB7CisJCQl0c25fbWFwID0gYXNv
Yy0+bWFwcGluZ19hcnJheVtpXTsKKwkJCWlmICh0eXBlID09IFNDVFBfU0VMRUNUSVZFX0FDSykg
eworCQkJCXRzbl9tYXAgfD0gYXNvYy0+bnJfbWFwcGluZ19hcnJheVtpXTsKKwkJCX0KKwkJCWlm
IChpID09IDApIHsKKwkJCQkvKgorCQkJCSAqIENsZWFyIGFsbCBiaXRzIGNvcnJlc3BvbmRpbmcg
dG8gVFNOcworCQkJCSAqIHNtYWxsZXIgb3IgZXF1YWwgdG8gdGhlIGN1bXVsYXRpdmUgVFNOLgor
CQkJCSAqLworCQkJCXRzbl9tYXAgJj0gKH4wVSA8PCAoMSAtIG9mZnNldCkpOworCQkJfQorCQkJ
c2VsZWN0b3IgPSAmc2Fja19hcnJheVt0c25fbWFwXTsKKwkJCWlmIChtZXJnZWFibGUgJiYgc2Vs
ZWN0b3ItPnJpZ2h0X2VkZ2UpIHsKKwkJCQkvKgorCQkJCSAqIEJhY2t1cCwgbGVmdCBhbmQgcmln
aHQgZWRnZXMgd2VyZSBvayB0bworCQkJCSAqIG1lcmdlLgorCQkJCSAqLworCQkJCW51bV9nYXBf
YmxvY2tzLS07CisJCQkJZ2FwX2Rlc2NyaXB0b3ItLTsKKwkJCX0KKwkJCWlmIChzZWxlY3Rvci0+
bnVtX2VudHJpZXMgPT0gMCkKKwkJCQltZXJnZWFibGUgPSAwOworCQkJZWxzZSB7CisJCQkJZm9y
IChqID0gMDsgaiA8IHNlbGVjdG9yLT5udW1fZW50cmllczsgaisrKSB7CisJCQkJCWlmIChtZXJn
ZWFibGUgJiYgc2VsZWN0b3ItPnJpZ2h0X2VkZ2UpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBkbyBh
IG1lcmdlIGJ5IE5PVCBzZXR0aW5nCisJCQkJCQkgKiB0aGUgbGVmdCBzaWRlCisJCQkJCQkgKi8K
KwkJCQkJCW1lcmdlYWJsZSA9IDA7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKgorCQkJCQkJICog
bm8gbWVyZ2UsIHNldCB0aGUgbGVmdAorCQkJCQkJICogc2lkZQorCQkJCQkJICovCisJCQkJCQlt
ZXJnZWFibGUgPSAwOworCQkJCQkJZ2FwX2Rlc2NyaXB0b3ItPnN0YXJ0ID0gaHRvbnMoKHNlbGVj
dG9yLT5nYXBzW2pdLnN0YXJ0ICsgb2Zmc2V0KSk7CisJCQkJCX0KKwkJCQkJZ2FwX2Rlc2NyaXB0
b3ItPmVuZCA9IGh0b25zKChzZWxlY3Rvci0+Z2Fwc1tqXS5lbmQgKyBvZmZzZXQpKTsKKwkJCQkJ
bnVtX2dhcF9ibG9ja3MrKzsKKwkJCQkJZ2FwX2Rlc2NyaXB0b3IrKzsKKwkJCQkJaWYgKCgoY2Fk
ZHJfdClnYXBfZGVzY3JpcHRvciArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Jsb2NrKSkg
PiBsaW1pdCkgeworCQkJCQkJLyogbm8gbW9yZSByb29tICovCisJCQkJCQlsaW1pdF9yZWFjaGVk
ID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmIChzZWxlY3Rvci0+bGVm
dF9lZGdlKSB7CisJCQkJCW1lcmdlYWJsZSA9IDE7CisJCQkJfQorCQkJfQorCQkJaWYgKGxpbWl0
X3JlYWNoZWQpIHsKKwkJCQkvKiBSZWFjaGVkIHRoZSBsaW1pdCBzdG9wICovCisJCQkJYnJlYWs7
CisJCQl9CisJCQlvZmZzZXQgKz0gODsKKwkJfQorCX0KKwlpZiAoKHR5cGUgPT0gU0NUUF9OUl9T
RUxFQ1RJVkVfQUNLKSAmJgorCSAgICAobGltaXRfcmVhY2hlZCA9PSAwKSkgeworCisJCW1lcmdl
YWJsZSA9IDA7CisKKwkJaWYgKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9ucl9tYXAgPiBhc29j
LT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKSB7CisJCQlzaXogPSAoKChhc29jLT5oaWdoZXN0X3Rz
bl9pbnNpZGVfbnJfbWFwIC0gYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3RzbikgKyAxKSArIDcp
IC8gODsKKwkJfSBlbHNlIHsKKwkJCXNpeiA9ICgoKE1BWF9UU04gLSBhc29jLT5tYXBwaW5nX2Fy
cmF5X2Jhc2VfdHNuKSArIDEpICsgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX25yX21hcCArIDcp
IC8gODsKKwkJfQorCisJCWlmIChTQ1RQX1RTTl9HVChhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2Vf
dHNuLCBhc29jLT5jdW11bGF0aXZlX3RzbikpIHsKKwkJCW9mZnNldCA9IDE7CisJCX0gZWxzZSB7
CisJCQlvZmZzZXQgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuIC0gYXNvYy0+Y3VtdWxh
dGl2ZV90c247CisJCX0KKwkJaWYgKFNDVFBfVFNOX0dUKGFzb2MtPmhpZ2hlc3RfdHNuX2luc2lk
ZV9ucl9tYXAsIGFzb2MtPmN1bXVsYXRpdmVfdHNuKSkgeworCQkJLyogd2UgaGF2ZSBhIGdhcCAu
LiBtYXliZSAqLworCQkJZm9yIChpID0gMDsgaSA8IHNpejsgaSsrKSB7CisJCQkJdHNuX21hcCA9
IGFzb2MtPm5yX21hcHBpbmdfYXJyYXlbaV07CisJCQkJaWYgKGkgPT0gMCkgeworCQkJCQkvKgor
CQkJCQkgKiBDbGVhciBhbGwgYml0cyBjb3JyZXNwb25kaW5nIHRvIFRTTnMKKwkJCQkJICogc21h
bGxlciBvciBlcXVhbCB0byB0aGUgY3VtdWxhdGl2ZSBUU04uCisJCQkJCSAqLworCQkJCQl0c25f
bWFwICY9ICh+MFUgPDwgKDEgLSBvZmZzZXQpKTsKKwkJCQl9CisJCQkJc2VsZWN0b3IgPSAmc2Fj
a19hcnJheVt0c25fbWFwXTsKKwkJCQlpZiAobWVyZ2VhYmxlICYmIHNlbGVjdG9yLT5yaWdodF9l
ZGdlKSB7CisJCQkJCS8qCisJCQkJCSogQmFja3VwLCBsZWZ0IGFuZCByaWdodCBlZGdlcyB3ZXJl
IG9rIHRvCisJCQkJCSogbWVyZ2UuCisJCQkJCSovCisJCQkJCW51bV9ucl9nYXBfYmxvY2tzLS07
CisJCQkJCWdhcF9kZXNjcmlwdG9yLS07CisJCQkJfQorCQkJCWlmIChzZWxlY3Rvci0+bnVtX2Vu
dHJpZXMgPT0gMCkKKwkJCQkJbWVyZ2VhYmxlID0gMDsKKwkJCQllbHNlIHsKKwkJCQkJZm9yIChq
ID0gMDsgaiA8IHNlbGVjdG9yLT5udW1fZW50cmllczsgaisrKSB7CisJCQkJCQlpZiAobWVyZ2Vh
YmxlICYmIHNlbGVjdG9yLT5yaWdodF9lZGdlKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkqIGRvIGEg
bWVyZ2UgYnkgTk9UIHNldHRpbmcKKwkJCQkJCQkqIHRoZSBsZWZ0IHNpZGUKKwkJCQkJCQkqLwor
CQkJCQkJCW1lcmdlYWJsZSA9IDA7CisJCQkJCQl9IGVsc2UgeworCQkJCQkJCS8qCisJCQkJCQkJ
KiBubyBtZXJnZSwgc2V0IHRoZSBsZWZ0CisJCQkJCQkJKiBzaWRlCisJCQkJCQkJKi8KKwkJCQkJ
CQltZXJnZWFibGUgPSAwOworCQkJCQkJCWdhcF9kZXNjcmlwdG9yLT5zdGFydCA9IGh0b25zKChz
ZWxlY3Rvci0+Z2Fwc1tqXS5zdGFydCArIG9mZnNldCkpOworCQkJCQkJfQorCQkJCQkJZ2FwX2Rl
c2NyaXB0b3ItPmVuZCA9IGh0b25zKChzZWxlY3Rvci0+Z2Fwc1tqXS5lbmQgKyBvZmZzZXQpKTsK
KwkJCQkJCW51bV9ucl9nYXBfYmxvY2tzKys7CisJCQkJCQlnYXBfZGVzY3JpcHRvcisrOworCQkJ
CQkJaWYgKCgoY2FkZHJfdClnYXBfZGVzY3JpcHRvciArIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBf
YWNrX2Jsb2NrKSkgPiBsaW1pdCkgeworCQkJCQkJCS8qIG5vIG1vcmUgcm9vbSAqLworCQkJCQkJ
CWxpbWl0X3JlYWNoZWQgPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisJCQkJ
CWlmIChzZWxlY3Rvci0+bGVmdF9lZGdlKSB7CisJCQkJCQltZXJnZWFibGUgPSAxOworCQkJCQl9
CisJCQkJfQorCQkJCWlmIChsaW1pdF9yZWFjaGVkKSB7CisJCQkJCS8qIFJlYWNoZWQgdGhlIGxp
bWl0IHN0b3AgKi8KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW9mZnNldCArPSA4OworCQkJfQor
CQl9CisJfQorCS8qIG5vdyB3ZSBtdXN0IGFkZCBhbnkgZHVwcyB3ZSBhcmUgZ29pbmcgdG8gcmVw
b3J0LiAqLworCWlmICgobGltaXRfcmVhY2hlZCA9PSAwKSAmJiAoYXNvYy0+bnVtZHVwdHNucykp
IHsKKwkJZHVwID0gKHVpbnQzMl90ICopIGdhcF9kZXNjcmlwdG9yOworCQlmb3IgKGkgPSAwOyBp
IDwgYXNvYy0+bnVtZHVwdHNuczsgaSsrKSB7CisJCQkqZHVwID0gaHRvbmwoYXNvYy0+ZHVwX3Rz
bnNbaV0pOworCQkJZHVwKys7CisJCQludW1fZHVwcysrOworCQkJaWYgKCgoY2FkZHJfdClkdXAg
KyBzaXplb2YodWludDMyX3QpKSA+IGxpbWl0KSB7CisJCQkJLyogbm8gbW9yZSByb29tICovCisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKwkJYXNvYy0+bnVtZHVwdHNucyA9IDA7CisJfQorCS8qCisJ
ICogbm93IHRoYXQgdGhlIGNodW5rIGlzIHByZXBhcmVkIHF1ZXVlIGl0IHRvIHRoZSBjb250cm9s
IGNodW5rCisJICogcXVldWUuCisJICovCisJaWYgKHR5cGUgPT0gU0NUUF9TRUxFQ1RJVkVfQUNL
KSB7CisJCWFfY2hrLT5zZW5kX3NpemUgPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9z
YWNrX2NodW5rKSArCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChudW1fZ2FwX2Js
b2NrcyArIG51bV9ucl9nYXBfYmxvY2tzKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9nYXBfYWNrX2Js
b2NrKSArCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bV9kdXBzICogc2l6ZW9m
KGludDMyX3QpKTsKKwkJU0NUUF9CVUZfTEVOKGFfY2hrLT5kYXRhKSA9IGFfY2hrLT5zZW5kX3Np
emU7CisJCXNhY2stPnNhY2suY3VtX3Rzbl9hY2sgPSBodG9ubChhc29jLT5jdW11bGF0aXZlX3Rz
bik7CisJCXNhY2stPnNhY2suYV9yd25kID0gaHRvbmwoYXNvYy0+bXlfcnduZCk7CisJCXNhY2st
PnNhY2subnVtX2dhcF9hY2tfYmxrcyA9IGh0b25zKG51bV9nYXBfYmxvY2tzKTsKKwkJc2Fjay0+
c2Fjay5udW1fZHVwX3RzbnMgPSBodG9ucyhudW1fZHVwcyk7CisJCXNhY2stPmNoLmNodW5rX3R5
cGUgPSB0eXBlOworCQlzYWNrLT5jaC5jaHVua19mbGFncyA9IGZsYWdzOworCQlzYWNrLT5jaC5j
aHVua19sZW5ndGggPSBodG9ucyhhX2Noay0+c2VuZF9zaXplKTsKKwl9IGVsc2UgeworCQlhX2No
ay0+c2VuZF9zaXplID0gKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfbnJfc2Fja19jaHVu
aykgKworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobnVtX2dhcF9ibG9ja3MgKyBu
dW1fbnJfZ2FwX2Jsb2NrcykgKiBzaXplb2Yoc3RydWN0IHNjdHBfZ2FwX2Fja19ibG9jaykgKwor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1fZHVwcyAqIHNpemVvZihpbnQzMl90
KSk7CisJCVNDVFBfQlVGX0xFTihhX2Noay0+ZGF0YSkgPSBhX2Noay0+c2VuZF9zaXplOworCQlu
cl9zYWNrLT5ucl9zYWNrLmN1bV90c25fYWNrID0gaHRvbmwoYXNvYy0+Y3VtdWxhdGl2ZV90c24p
OworCQlucl9zYWNrLT5ucl9zYWNrLmFfcnduZCA9IGh0b25sKGFzb2MtPm15X3J3bmQpOworCQlu
cl9zYWNrLT5ucl9zYWNrLm51bV9nYXBfYWNrX2Jsa3MgPSBodG9ucyhudW1fZ2FwX2Jsb2Nrcyk7
CisJCW5yX3NhY2stPm5yX3NhY2subnVtX25yX2dhcF9hY2tfYmxrcyA9IGh0b25zKG51bV9ucl9n
YXBfYmxvY2tzKTsKKwkJbnJfc2Fjay0+bnJfc2Fjay5udW1fZHVwX3RzbnMgPSBodG9ucyhudW1f
ZHVwcyk7CisJCW5yX3NhY2stPm5yX3NhY2sucmVzZXJ2ZWQgPSAwOworCQlucl9zYWNrLT5jaC5j
aHVua190eXBlID0gdHlwZTsKKwkJbnJfc2Fjay0+Y2guY2h1bmtfZmxhZ3MgPSBmbGFnczsKKwkJ
bnJfc2Fjay0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoYV9jaGstPnNlbmRfc2l6ZSk7CisJfQor
CVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsIGFfY2hrLCBzY3Rw
X25leHQpOworCWFzb2MtPm15X2xhc3RfcmVwb3J0ZWRfcnduZCA9IGFzb2MtPm15X3J3bmQ7CisJ
YXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKKwlhc29jLT5zZW5kX3NhY2sgPSAwOworCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3NlbmRzYWNrcyk7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRf
YWJvcnRfdGNiKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IG1idWYgKm9wZXJyLCBpbnQg
c29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCXN0cnVjdCBt
YnVmICptX2Fib3J0LCAqbSwgKm1fbGFzdDsKKwlzdHJ1Y3QgbWJ1ZiAqbV9vdXQsICptX2VuZCA9
IE5VTEw7CisJc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKmFib3J0OworCXN0cnVjdCBzY3RwX2F1
dGhfY2h1bmsgKmF1dGggPSBOVUxMOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwl1aW50MzJf
dCB2dGFnOworCXVpbnQzMl90IGF1dGhfb2Zmc2V0ID0gMDsKKwlpbnQgZXJyb3I7CisJdWludDE2
X3QgY2F1c2VfbGVuLCBjaHVua19sZW4sIHBhZGRpbmdfbGVuOworCisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NP
KHN0Y2ItPnNjdHBfZXApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3NlcnQoU0NUUF9J
TlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0KKyNlbmRpZgorCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOworCS8qLQorCSAqIEFkZCBhbiBBVVRIIGNodW5rLCBpZiBjaHVuayByZXF1aXJlcyBp
dCBhbmQgc2F2ZSB0aGUgb2Zmc2V0IGludG8KKwkgKiB0aGUgY2hhaW4gZm9yIEFVVEgKKwkgKi8K
KwlpZiAoc2N0cF9hdXRoX2lzX3JlcXVpcmVkX2NodW5rKFNDVFBfQUJPUlRfQVNTT0NJQVRJT04s
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnBlZXJfYXV0aF9j
aHVua3MpKSB7CisJCW1fb3V0ID0gc2N0cF9hZGRfYXV0aF9jaHVuayhOVUxMLCAmbV9lbmQsICZh
dXRoLCAmYXV0aF9vZmZzZXQsCisJCQkJCSAgICBzdGNiLCBTQ1RQX0FCT1JUX0FTU09DSUFUSU9O
KTsKKwkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOwor
CX0gZWxzZSB7CisJCW1fb3V0ID0gTlVMTDsKKwl9CisJbV9hYm9ydCA9IHNjdHBfZ2V0X21idWZf
Zm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfYWJvcnRfY2h1bmspLCAwLCBNX05PV0FJVCwgMSwg
TVRfSEVBREVSKTsKKwlpZiAobV9hYm9ydCA9PSBOVUxMKSB7CisJCWlmIChtX291dCkgeworCQkJ
c2N0cF9tX2ZyZWVtKG1fb3V0KTsKKwkJfQorCQlpZiAob3BlcnIpIHsKKwkJCXNjdHBfbV9mcmVl
bShvcGVycik7CisJCX0KKwkJcmV0dXJuOworCX0KKwkvKiBsaW5rIGluIGFueSBlcnJvciAqLwor
CVNDVFBfQlVGX05FWFQobV9hYm9ydCkgPSBvcGVycjsKKwljYXVzZV9sZW4gPSAwOworCW1fbGFz
dCA9IE5VTEw7CisJZm9yIChtID0gb3BlcnI7IG07IG0gPSBTQ1RQX0JVRl9ORVhUKG0pKSB7CisJ
CWNhdXNlX2xlbiArPSAodWludDE2X3QpU0NUUF9CVUZfTEVOKG0pOworCQlpZiAoU0NUUF9CVUZf
TkVYVChtKSA9PSBOVUxMKSB7CisJCQltX2xhc3QgPSBtOworCQl9CisJfQorCVNDVFBfQlVGX0xF
TihtX2Fib3J0KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hYm9ydF9jaHVuayk7CisJY2h1bmtfbGVu
ID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9hYm9ydF9jaHVuaykgKyBjYXVzZV9sZW47
CisJcGFkZGluZ19sZW4gPSBTQ1RQX1NJWkUzMihjaHVua19sZW4pIC0gY2h1bmtfbGVuOworCWlm
IChtX291dCA9PSBOVUxMKSB7CisJCS8qIE5PIEF1dGggY2h1bmsgcHJlcGVuZGVkLCBzbyByZXNl
cnZlIHNwYWNlIGluIGZyb250ICovCisJCVNDVFBfQlVGX1JFU1ZfVUYobV9hYm9ydCwgU0NUUF9N
SU5fT1ZFUkhFQUQpOworCQltX291dCA9IG1fYWJvcnQ7CisJfSBlbHNlIHsKKwkJLyogUHV0IEFV
VEggY2h1bmsgYXQgdGhlIGZyb250IG9mIHRoZSBjaGFpbiAqLworCQlTQ1RQX0JVRl9ORVhUKG1f
ZW5kKSA9IG1fYWJvcnQ7CisJfQorCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQluZXQg
PSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwl9IGVsc2UgeworCQluZXQgPSBzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb247CisJfQorCS8qIEZpbGwgaW4gdGhlIEFCT1JUIGNodW5rIGhlYWRl
ci4gKi8KKwlhYm9ydCA9IG10b2QobV9hYm9ydCwgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKik7
CisJYWJvcnQtPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OOworCWlmIChz
dGNiLT5hc29jLnBlZXJfdnRhZyA9PSAwKSB7CisJCS8qIFRoaXMgaGFwcGVucyBpZmYgdGhlIGFz
c29jIGlzIGluIENPT0tJRS1XQUlUIHN0YXRlLiAqLworCQl2dGFnID0gc3RjYi0+YXNvYy5teV92
dGFnOworCQlhYm9ydC0+Y2guY2h1bmtfZmxhZ3MgPSBTQ1RQX0hBRF9OT19UQ0I7CisJfSBlbHNl
IHsKKwkJdnRhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOworCQlhYm9ydC0+Y2guY2h1bmtfZmxh
Z3MgPSAwOworCX0KKwlhYm9ydC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVuKTsK
KwkvKiBBZGQgcGFkZGluZywgaWYgbmVjZXNzYXJ5LiAqLworCWlmIChwYWRkaW5nX2xlbiA+IDAp
IHsKKwkJaWYgKChtX2xhc3QgPT0gTlVMTCkgfHwKKwkJICAgIChzY3RwX2FkZF9wYWRfdG9tYnVm
KG1fbGFzdCwgcGFkZGluZ19sZW4pID09IE5VTEwpKSB7CisJCQlzY3RwX21fZnJlZW0obV9vdXQp
OworCQkJcmV0dXJuOworCQl9CisJfQorCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5r
X291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQsCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX291dCwgYXV0aF9vZmZz
ZXQsIGF1dGgsIHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkLCAxLCAwLCAwLAorCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLT5zY3Rw
X2xwb3J0LCBzdGNiLT5ycG9ydCwgaHRvbmwodnRhZyksCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cG9ydCwg
TlVMTCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLCAwLAorI2VuZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNvX2xvY2tlZCkpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQzLCAiR2FrIHNlbmQgZXJyb3IgJWRcbiIsIGVycm9yKTsKKwkJaWYgKGVycm9yID09IEVOT0JV
RlMpIHsKKwkJCXN0Y2ItPmFzb2MuaWZwX2hhZF9lbm9idWYgPSAxOworCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfbG93bGV2ZWxlcnIpOworCQl9CisJfSBlbHNlIHsKKwkJc3RjYi0+YXNvYy5pZnBf
aGFkX2Vub2J1ZiA9IDA7CisJfQorCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRj
b250cm9sY2h1bmtzKTsKK30KKwordm9pZAorc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlZmxlY3Rf
dnRhZykKK3sKKwkvKiBmb3JtdWxhdGUgYW5kIFNFTkQgYSBTSFVURE9XTi1DT01QTEVURSAqLwor
CXN0cnVjdCBtYnVmICptX3NodXRkb3duX2NvbXA7CisJc3RydWN0IHNjdHBfc2h1dGRvd25fY29t
cGxldGVfY2h1bmsgKnNodXRkb3duX2NvbXBsZXRlOworCXVpbnQzMl90IHZ0YWc7CisJaW50IGVy
cm9yOworCXVpbnQ4X3QgZmxhZ3M7CisKKwltX3NodXRkb3duX2NvbXAgPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwgMCwgTV9OT1dBSVQsIDEsIE1U
X0hFQURFUik7CisJaWYgKG1fc2h1dGRvd25fY29tcCA9PSBOVUxMKSB7CisJCS8qIG5vIG1idWYn
cyAqLworCQlyZXR1cm47CisJfQorCWlmIChyZWZsZWN0X3Z0YWcpIHsKKwkJZmxhZ3MgPSBTQ1RQ
X0hBRF9OT19UQ0I7CisJCXZ0YWcgPSBzdGNiLT5hc29jLm15X3Z0YWc7CisJfSBlbHNlIHsKKwkJ
ZmxhZ3MgPSAwOworCQl2dGFnID0gc3RjYi0+YXNvYy5wZWVyX3Z0YWc7CisJfQorCXNodXRkb3du
X2NvbXBsZXRlID0gbXRvZChtX3NodXRkb3duX2NvbXAsIHN0cnVjdCBzY3RwX3NodXRkb3duX2Nv
bXBsZXRlX2NodW5rICopOworCXNodXRkb3duX2NvbXBsZXRlLT5jaC5jaHVua190eXBlID0gU0NU
UF9TSFVURE9XTl9DT01QTEVURTsKKwlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfZmxhZ3Mg
PSBmbGFnczsKKwlzaHV0ZG93bl9jb21wbGV0ZS0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoc2l6
ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2NvbXBsZXRlX2NodW5rKSk7CisJU0NUUF9CVUZfTEVO
KG1fc2h1dGRvd25fY29tcCkgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2h1dGRvd25fY29tcGxldGVf
Y2h1bmspOworCWlmICgoZXJyb3IgPSBzY3RwX2xvd2xldmVsX2NodW5rX291dHB1dChzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXQsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NodXRkb3duX2NvbXAsIDAsIE5VTEwsIDAsIDEs
IDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0Y2ItPnNj
dHBfZXAtPnNjdHBfbHBvcnQsIHN0Y2ItPnJwb3J0LAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBodG9ubCh2dGFnKSwKKwkgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbmV0LT5wb3J0LCBOVUxMLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsCisjZW5kaWYK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9D
S0VEKSkpIHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDMsICJHYWsgc2VuZCBlcnJvciAl
ZFxuIiwgZXJyb3IpOworCQlpZiAoZXJyb3IgPT0gRU5PQlVGUykgeworCQkJc3RjYi0+YXNvYy5p
ZnBfaGFkX2Vub2J1ZiA9IDE7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sb3dsZXZlbGVycik7
CisJCX0KKwl9IGVsc2UgeworCQlzdGNiLT5hc29jLmlmcF9oYWRfZW5vYnVmID0gMDsKKwl9CisJ
U0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX291dGNvbnRyb2xjaHVua3MpOworCXJldHVy
bjsKK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCitzdGF0aWMgdm9pZAorc2N0cF9zZW5k
X3Jlc3BfbXNnKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVpbnQzMl90IHZ0YWcsCisgICAg
ICAgICAgICAgICAgICAgdWludDhfdCB0eXBlLCBzdHJ1Y3QgbWJ1ZiAqY2F1c2UsCisgICAgICAg
ICAgICAgICAgICAgdWludDhfdCBtZmxvd3R5cGUsIHVpbnQzMl90IG1mbG93aWQsIHVpbnQxNl90
IGZpYm51bSwKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBv
cnQpCisjZWxzZQorc3RhdGljIHZvaWQKK3NjdHBfc2VuZF9yZXNwX21zZyhzdHJ1Y3Qgc29ja2Fk
ZHIgKnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgc3RydWN0
IHNjdHBoZHIgKnNoLCB1aW50MzJfdCB2dGFnLAorICAgICAgICAgICAgICAgICAgIHVpbnQ4X3Qg
dHlwZSwgc3RydWN0IG1idWYgKmNhdXNlLAorICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHZy
Zl9pZCBTQ1RQX1VOVVNFRCwgdWludDE2X3QgcG9ydCkKKyNlbmRpZgoreworI2lmZGVmIF9fUGFu
ZGFfXworCXBha2hhbmRsZV90eXBlIG9fcGFrOworI2Vsc2UKKwlzdHJ1Y3QgbWJ1ZiAqb19wYWs7
CisjZW5kaWYKKwlzdHJ1Y3QgbWJ1ZiAqbW91dDsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2hvdXQ7CisJ
c3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJ
TkVUNikKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisjZW5kaWYKKwlpbnQgcmV0LCBsZW4sIGNhdXNl
X2xlbiwgcGFkZGluZ19sZW47CisjaWZkZWYgSU5FVAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKF9fUGFuZGFfXykKKwlzY3RwX3JvdXRlX3Qgcm87CisjZW5kaWYKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNyY19zaW4sICpkc3Rfc2luOworCXN0cnVjdCBpcCAqaXA7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNyY19zaW42LCAqZHN0X3NpbjY7
CisJc3RydWN0IGlwNl9oZHIgKmlwNjsKKyNlbmRpZgorCisJLyogQ29tcHV0ZSB0aGUgbGVuZ3Ro
IG9mIHRoZSBjYXVzZSBhbmQgYWRkIGZpbmFsIHBhZGRpbmcuICovCisJY2F1c2VfbGVuID0gMDsK
KwlpZiAoY2F1c2UgIT0gTlVMTCkgeworCQlzdHJ1Y3QgbWJ1ZiAqbV9hdCwgKm1fbGFzdCA9IE5V
TEw7CisKKwkJZm9yIChtX2F0ID0gY2F1c2U7IG1fYXQ7IG1fYXQgPSBTQ1RQX0JVRl9ORVhUKG1f
YXQpKSB7CisJCQlpZiAoU0NUUF9CVUZfTkVYVChtX2F0KSA9PSBOVUxMKQorCQkJCW1fbGFzdCA9
IG1fYXQ7CisJCQljYXVzZV9sZW4gKz0gU0NUUF9CVUZfTEVOKG1fYXQpOworCQl9CisJCXBhZGRp
bmdfbGVuID0gY2F1c2VfbGVuICUgNDsKKwkJaWYgKHBhZGRpbmdfbGVuICE9IDApIHsKKwkJCXBh
ZGRpbmdfbGVuID0gNCAtIHBhZGRpbmdfbGVuOworCQl9CisJCWlmIChwYWRkaW5nX2xlbiAhPSAw
KSB7CisJCQlpZiAoc2N0cF9hZGRfcGFkX3RvbWJ1ZihtX2xhc3QsIHBhZGRpbmdfbGVuKSA9PSBO
VUxMKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNhdXNlKTsKKwkJCQlyZXR1cm47CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQlwYWRkaW5nX2xlbiA9IDA7CisJfQorCS8qIEdldCBhbiBtYnVmIGZvciB0
aGUgaGVhZGVyLiAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpOworCXN3aXRjaCAoZHN0LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJY2FzZSBBRl9JTkVUOgorCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlsZW4gKz0gc2l6ZW9m
KHN0cnVjdCBpcDZfaGRyKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlicmVhazsK
Kwl9CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCWlmIChwb3J0KSB7CisJ
CWxlbiArPSBzaXplb2Yoc3RydWN0IHVkcGhkcik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NO
T1dMRU9QQVJEKQorCW1vdXQgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuICsgbWF4X2xpbmto
ZHIsIDEsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKyNlbHNlCisJbW91dCA9IHNjdHBfZ2V0X21i
dWZfZm9yX21zZyhsZW4gKyBTQ1RQX01BWF9MSU5LSERSLCAxLCBNX05PV0FJVCwgMSwgTVRfREFU
QSk7CisjZW5kaWYKKyNlbHNlCisJbW91dCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZW4gKyBt
YXhfbGlua2hkciwgMSwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworI2VuZGlmCisJaWYgKG1vdXQg
PT0gTlVMTCkgeworCQlpZiAoY2F1c2UpIHsKKwkJCXNjdHBfbV9mcmVlbShjYXVzZSk7CisJCX0K
KwkJcmV0dXJuOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExF
X0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJU0NUUF9CVUZfUkVTVl9V
Rihtb3V0LCBtYXhfbGlua2hkcik7CisjZWxzZQorCVNDVFBfQlVGX1JFU1ZfVUYobW91dCwgU0NU
UF9NQVhfTElOS0hEUik7CisjZW5kaWYKKyNlbHNlCisJU0NUUF9CVUZfUkVTVl9VRihtb3V0LCBt
YXhfbGlua2hkcik7CisjZW5kaWYKKwlTQ1RQX0JVRl9MRU4obW91dCkgPSBsZW47CisJU0NUUF9C
VUZfTkVYVChtb3V0KSA9IGNhdXNlOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJTV9TRVRG
SUIobW91dCwgZmlibnVtKTsKKwltb3V0LT5tX3BrdGhkci5mbG93aWQgPSBtZmxvd2lkOworCU1f
SEFTSFRZUEVfU0VUKG1vdXQsIG1mbG93dHlwZSk7CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJaXAg
PSBOVUxMOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlpcDYgPSBOVUxMOworI2VuZGlmCisJc3dp
dGNoIChkc3QtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCXNy
Y19zaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopc3JjOworCQlkc3Rfc2luID0gKHN0cnVjdCBz
b2NrYWRkcl9pbiAqKWRzdDsKKwkJaXAgPSBtdG9kKG1vdXQsIHN0cnVjdCBpcCAqKTsKKwkJaXAt
PmlwX3YgPSBJUFZFUlNJT047CisJCWlwLT5pcF9obCA9IChzaXplb2Yoc3RydWN0IGlwKSA+PiAy
KTsKKwkJaXAtPmlwX3RvcyA9IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSAxMDAwMDAwCisJCWlwLT5pcF9vZmYgPSBodG9ucyhJUF9ERik7Cisj
ZWxzZQorCQlpcC0+aXBfb2ZmID0gSVBfREY7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoV0lUSF9D
T05WRVJUX0lQX09GRikgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfRGFyd2luKQorCQlpcC0+aXBfb2ZmID0gSVBfREY7CisjZWxzZQorCQlpcC0+aXBfb2Zm
ID0gaHRvbnMoSVBfREYpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJaXBf
ZmlsbGlkKGlwKTsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIFJBTkRPTV9JUF9JRAor
CQlpcC0+aXBfaWQgPSBpcF9yYW5kb21pZCgpOworI2Vsc2UKKwkJaXAtPmlwX2lkID0gaHRvbnMo
aXBfaWQrKyk7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAtPmlw
X2lkID0gaHRvbnMoaXBfaWQrKyk7CisjZWxzZQorCQlpcC0+aXBfaWQgPSBpcF9pZCsrOworI2Vu
ZGlmCisJCWlwLT5pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJCWlmIChwb3J0
KSB7CisJCQlpcC0+aXBfcCA9IElQUFJPVE9fVURQOworCQl9IGVsc2UgeworCQkJaXAtPmlwX3Ag
PSBJUFBST1RPX1NDVFA7CisJCX0KKwkJaXAtPmlwX3NyYy5zX2FkZHIgPSBkc3Rfc2luLT5zaW5f
YWRkci5zX2FkZHI7CisJCWlwLT5pcF9kc3Quc19hZGRyID0gc3JjX3Npbi0+c2luX2FkZHIuc19h
ZGRyOworCQlpcC0+aXBfc3VtID0gMDsKKwkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJCXNo
b3V0ID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwICsgbGVuKTsKKwkJYnJlYWs7Cisj
ZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCXNyY19zaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilzcmM7CisJCWRzdF9zaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
Kilkc3Q7CisJCWlwNiA9IG10b2QobW91dCwgc3RydWN0IGlwNl9oZHIgKik7CisJCWlwNi0+aXA2
X2Zsb3cgPSBodG9ubCgweDYwMDAwMDAwKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlp
ZiAoVl9pcDZfYXV0b19mbG93bGFiZWwpIHsKKwkJCWlwNi0+aXA2X2Zsb3cgfD0gKGh0b25sKGlw
Nl9yYW5kb21mbG93bGFiZWwoKSkgJiBJUFY2X0ZMT1dMQUJFTF9NQVNLKTsKKwkJfQorI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpcDYtPmlwNl9obGltID0gSVB2Nl9IT1Bf
TElNSVQ7CisjZWxzZQorCQlpcDYtPmlwNl9obGltID0gTU9EVUxFX0dMT0JBTChpcDZfZGVmaGxp
bSk7CisjZW5kaWYKKwkJaWYgKHBvcnQpIHsKKwkJCWlwNi0+aXA2X254dCA9IElQUFJPVE9fVURQ
OworCQl9IGVsc2UgeworCQkJaXA2LT5pcDZfbnh0ID0gSVBQUk9UT19TQ1RQOworCQl9CisJCWlw
Ni0+aXA2X3NyYyA9IGRzdF9zaW42LT5zaW42X2FkZHI7CisJCWlwNi0+aXA2X2RzdCA9IHNyY19z
aW42LT5zaW42X2FkZHI7CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7CisJCXNob3V0
ID0gKHN0cnVjdCBzY3RwaGRyICopKChjYWRkcl90KWlwNiArIGxlbik7CisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJbGVuID0gMDsKKwkJc2hvdXQgPSBtdG9kKG1vdXQsIHN0cnVjdCBz
Y3RwaGRyICopOworCQlicmVhazsKKwl9CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElO
RVQ2KQorCWlmIChwb3J0KSB7CisJCWlmIChodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRw
X3R1bm5lbGluZ19wb3J0KSkgPT0gMCkgeworCQkJc2N0cF9tX2ZyZWVtKG1vdXQpOworCQkJcmV0
dXJuOworCQl9CisJCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopc2hvdXQ7CisJCXVkcC0+dWhfc3Bv
cnQgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7CisJ
CXVkcC0+dWhfZHBvcnQgPSBwb3J0OworCQl1ZHAtPnVoX3N1bSA9IDA7CisJCXVkcC0+dWhfdWxl
biA9IGh0b25zKCh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpICsKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXVzZV9sZW4gKyBwYWRkaW5nX2xl
bikpOworCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQlzaG91dCA9IChzdHJ1Y3Qg
c2N0cGhkciAqKSgoY2FkZHJfdClzaG91dCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJfSBl
bHNlIHsKKwkJdWRwID0gTlVMTDsKKwl9CisjZW5kaWYKKwlzaG91dC0+c3JjX3BvcnQgPSBzaC0+
ZGVzdF9wb3J0OworCXNob3V0LT5kZXN0X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJc2hvdXQtPmNo
ZWNrc3VtID0gMDsKKwlpZiAodnRhZykgeworCQlzaG91dC0+dl90YWcgPSBodG9ubCh2dGFnKTsK
Kwl9IGVsc2UgeworCQlzaG91dC0+dl90YWcgPSBzaC0+dl90YWc7CisJfQorCWxlbiArPSBzaXpl
b2Yoc3RydWN0IHNjdHBoZHIpOworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRk
cl90KXNob3V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJY2gtPmNodW5rX3R5cGUgPSB0
eXBlOworCWlmICh2dGFnKSB7CisJCWNoLT5jaHVua19mbGFncyA9IDA7CisJfSBlbHNlIHsKKwkJ
Y2gtPmNodW5rX2ZsYWdzID0gU0NUUF9IQURfTk9fVENCOworCX0KKwljaC0+Y2h1bmtfbGVuZ3Ro
ID0gaHRvbnMoKHVpbnQxNl90KShzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsgY2F1c2Vf
bGVuKSk7CisJbGVuICs9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcik7CisJbGVuICs9IGNh
dXNlX2xlbiArIHBhZGRpbmdfbGVuOworCisJaWYgKFNDVFBfR0VUX0hFQURFUl9GT1JfT1VUUFVU
KG9fcGFrKSkgeworCQlzY3RwX21fZnJlZW0obW91dCk7CisJCXJldHVybjsKKwl9CisJU0NUUF9B
VFRBQ0hfQ0hBSU4ob19wYWssIG1vdXQsIGxlbik7CisJc3dpdGNoIChkc3QtPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19QYW5kYV9fKQorCQkvKiB6YXAgdGhlIHN0YWNrIHBvaW50ZXIgdG8gdGhlIHJv
dXRlICovCisJCW1lbXNldCgmcm8sIDAsIHNpemVvZihzY3RwX3JvdXRlX3QpKTsKKyNpZiBkZWZp
bmVkKF9fUGFuZGFfXykKKwkJcm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPSBBRl9JTkVUOworI2Vu
ZGlmCisjZW5kaWYKKwkJaWYgKHBvcnQpIHsKKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYg
IWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoKF9f
RnJlZUJTRF92ZXJzaW9uID4gODAzMDAwICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgOTAwMDAwKSB8
fCBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMDAwMCkKKwkJCWlmIChWX3VkcF9ja3N1bSkgeworCQkJ
CXVkcC0+dWhfc3VtID0gaW5fcHNldWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNf
YWRkciwgdWRwLT51aF91bGVuICsgaHRvbnMoSVBQUk9UT19VRFApKTsKKwkJCX0gZWxzZSB7CisJ
CQkJdWRwLT51aF9zdW0gPSAwOworCQkJfQorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gaW5fcHNl
dWRvKGlwLT5pcF9zcmMuc19hZGRyLCBpcC0+aXBfZHN0LnNfYWRkciwgdWRwLT51aF91bGVuICsg
aHRvbnMoSVBQUk9UT19VRFApKTsKKyNlbmRpZgorI2Vsc2UKKwkJCXVkcC0+dWhfc3VtID0gMDsK
KyNlbmRpZgorCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSAxMDAwMDAwCisJCWlwLT5pcF9sZW4gPSBodG9ucyhsZW4pOworI2Vsc2UKKwkJaXAt
PmlwX2xlbiA9IGxlbjsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJaXAtPmlwX2xlbiA9IGxlbjsKKyNlbHNlCisJCWlwLT5pcF9s
ZW4gPSBodG9ucyhsZW4pOworI2VuZGlmCisJCWlmIChwb3J0KSB7CisJCQlzaG91dC0+Y2hlY2tz
dW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCBzaXplb2Yoc3RydWN0IGlwKSArIHNpemVv
ZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOwor
I2lmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmICgoX19GcmVlQlNEX3ZlcnNpb24gPiA4MDMwMDAgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPCA5MDAwMDApIHx8IF9fRnJlZUJTRF92ZXJzaW9uID4gOTAwMDAw
KQorCQkJaWYgKFZfdWRwX2Nrc3VtKSB7CisJCQkJU0NUUF9FTkFCTEVfVURQX0NTVU0ob19wYWsp
OworCQkJfQorI2Vsc2UKKwkJCVNDVFBfRU5BQkxFX1VEUF9DU1VNKG9fcGFrKTsKKyNlbmRpZgor
I2VuZGlmCisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAwMDAwCisJCQltb3V0LT5tX3BrdGhkci5jc3VtX2ZsYWdzID0gQ1NVTV9T
Q1RQOworCQkJbW91dC0+bV9wa3RoZHIuY3N1bV9kYXRhID0gb2Zmc2V0b2Yoc3RydWN0IHNjdHBo
ZHIsIGNoZWNrc3VtKTsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRod2NyYyk7CisjZWxz
ZQorCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9jYWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9m
KHN0cnVjdCBpcCkpOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKyNlbmRp
ZgorCQl9CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCQlpZiAoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7CisJCQlz
Y3RwX3BhY2tldF9sb2cob19wYWspOworCQl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1BhbmRhX18pCisJCVNDVFBfSVBfT1VUUFVUKHJldCwgb19wYWssICZy
bywgTlVMTCwgdnJmX2lkKTsKKwkJLyogRnJlZSB0aGUgcm91dGUgaWYgd2UgZ290IG9uZSBiYWNr
ICovCisJCWlmIChyby5yb19ydCkgeworCQkJUlRGUkVFKHJvLnJvX3J0KTsKKwkJCXJvLnJvX3J0
ID0gTlVMTDsKKwkJfQorI2Vsc2UKKwkJU0NUUF9JUF9PVVRQVVQocmV0LCBvX3BhaywgTlVMTCwg
TlVMTCwgdnJmX2lkKTsKKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJ
Y2FzZSBBRl9JTkVUNjoKKwkJaXA2LT5pcDZfcGxlbiA9IGh0b25zKGxlbiAtIHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikpOworCQlpZiAocG9ydCkgeworCQkJc2hvdXQtPmNoZWNrc3VtID0gc2N0cF9j
YWxjdWxhdGVfY2tzdW0obW91dCwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIHNpemVvZihzdHJ1
Y3QgdWRwaGRyKSk7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc3djcmMpOworI2lmIGRl
ZmluZWQoX19XaW5kb3dzX18pCisJCQl1ZHAtPnVoX3N1bSA9IDA7CisjZWxpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJaWYgKCh1ZHAtPnVoX3N1bSA9IGluNl9ja3N1bShvX3BhaywgSVBQ
Uk9UT19VRFAsIHNpemVvZihzdHJ1Y3QgaXA2X2hkciksIGxlbiAtIHNpemVvZihzdHJ1Y3QgaXA2
X2hkcikpKSA9PSAwKSB7CisJCQkJdWRwLT51aF9zdW0gPSAweGZmZmY7CisJCQl9CisjZW5kaWYK
KwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA5MDAwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDkwMTAwMAorCQkJbW91dC0+bV9w
a3RoZHIuY3N1bV9mbGFncyA9IENTVU1fU0NUUF9JUFY2OworI2Vsc2UKKwkJCW1vdXQtPm1fcGt0
aGRyLmNzdW1fZmxhZ3MgPSBDU1VNX1NDVFA7CisjZW5kaWYKKwkJCW1vdXQtPm1fcGt0aGRyLmNz
dW1fZGF0YSA9IG9mZnNldG9mKHN0cnVjdCBzY3RwaGRyLCBjaGVja3N1bSk7CisJCQlTQ1RQX1NU
QVRfSU5DUihzY3Rwc19zZW5kaHdjcmMpOworI2Vsc2UKKwkJCXNob3V0LT5jaGVja3N1bSA9IHNj
dHBfY2FsY3VsYXRlX2Nrc3VtKG1vdXQsIHNpemVvZihzdHJ1Y3QgaXA2X2hkcikpOworCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHN3Y3JjKTsKKyNlbmRpZgorCQl9CisjaWZkZWYgU0NUUF9Q
QUNLRVRfTE9HR0lORworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwp
ICYgU0NUUF9MQVNUX1BBQ0tFVF9UUkFDSU5HKSB7CisJCQlzY3RwX3BhY2tldF9sb2cob19wYWsp
OworCQl9CisjZW5kaWYKKwkJU0NUUF9JUDZfT1VUUFVUKHJldCwgb19wYWssIE5VTEwsIE5VTEws
IE5VTEwsIHZyZl9pZCk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJCWNoYXIgKmJ1ZmZlcjsKKwkJc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKnNjb25uOworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc3Jj
OworCQlpZiAoU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVkKSA9PSAwKSB7CisJCQlzaG91
dC0+Y2hlY2tzdW0gPSBzY3RwX2NhbGN1bGF0ZV9ja3N1bShtb3V0LCAwKTsKKwkJCVNDVFBfU1RB
VF9JTkNSKHNjdHBzX3NlbmRzd2NyYyk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19zZW5kaHdjcmMpOworCQl9CisjaWZkZWYgU0NUUF9QQUNLRVRfTE9HR0lORworCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MQVNUX1BBQ0tFVF9U
UkFDSU5HKSB7CisJCQlzY3RwX3BhY2tldF9sb2cobW91dCk7CisJCX0KKyNlbmRpZgorCQkvKiBE
b24ndCBhbGxvYy9mcmVlIGZvciBlYWNoIHBhY2tldCAqLworCQlpZiAoKGJ1ZmZlciA9IG1hbGxv
YyhsZW4pKSAhPSBOVUxMKSB7CisJCQltX2NvcHlkYXRhKG1vdXQsIDAsIGxlbiwgYnVmZmVyKTsK
KwkJCXJldCA9IFNDVFBfQkFTRV9WQVIoY29ubl9vdXRwdXQpKHNjb25uLT5zY29ubl9hZGRyLCBi
dWZmZXIsIGxlbiwgMCwgMCk7CisJCQlmcmVlKGJ1ZmZlcik7CisJCX0gZWxzZSB7CisJCQlyZXQg
PSBFTk9NRU07CisJCX0KKwkJc2N0cF9tX2ZyZWVtKG1vdXQpOworCQlicmVhazsKKwl9CisjZW5k
aWYKKwlkZWZhdWx0OgorCQlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIlVua25vd24gcHJv
dG9jb2wgKFRTTkgpIHR5cGUgJWRcbiIsCisJCSAgICAgICAgZHN0LT5zYV9mYW1pbHkpOworCQlz
Y3RwX21fZnJlZW0obW91dCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG1vdXQsIE5VTEws
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJcmV0dXJuOwor
CX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMywgInJldHVybiBmcm9tIHNlbmQgaXMgJWRc
biIsIHJldCk7CisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZHBhY2tldHMpOworCVNDVFBfU1RB
VF9JTkNSX0NPVU5URVI2NChzY3Rwc19vdXRwYWNrZXRzKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VO
VEVSNjQoc2N0cHNfb3V0Y29udHJvbGNodW5rcyk7CisJaWYgKHJldCkgeworCQlTQ1RQX1NUQVRf
SU5DUihzY3Rwc19zZW5kZXJyb3JzKTsKKwl9CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3Nl
bmRfc2h1dGRvd25fY29tcGxldGUyKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKnNo
LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisj
ZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdnJmX2lkLCB1aW50
MTZfdCBwb3J0KQoreworCXNjdHBfc2VuZF9yZXNwX21zZyhzcmMsIGRzdCwgc2gsIDAsIFNDVFBf
U0hVVERPV05fQ09NUExFVEUsIE5VTEwsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAg
ICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYKKwkgICAg
ICAgICAgICAgICAgICAgdnJmX2lkLCBwb3J0KTsKK30KKwordm9pZAorc2N0cF9zZW5kX2hiKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LGludCBzb19sb2NrZWQK
KyNpZiAhZGVmaW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5H
KQorCVNDVFBfVU5VU0VECisjZW5kaWYKKykKK3sKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGs7CisJc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rICpoYjsKKwlzdHJ1Y3QgdGltZXZhbCBu
b3c7CisKKwlTQ1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwlpZiAobmV0ID09IE5VTEwpIHsK
KwkJcmV0dXJuOworCX0KKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmbm93KTsKKwlzd2l0
Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBB
Rl9JTkVUOgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoK
KwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9D
T05OOgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybjsKKwl9CisJc2N0cF9h
bGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19PVVRQVVQ0LCAiR2FrLCBjYW4ndCBnZXQgYSBjaHVuayBmb3IgaGJcbiIpOwor
CQlyZXR1cm47CisJfQorCisJY2hrLT5jb3B5X2J5X3JlZiA9IDA7CisJY2hrLT5yZWMuY2h1bmtf
aWQuaWQgPSBTQ1RQX0hFQVJUQkVBVF9SRVFVRVNUOworCWNoay0+cmVjLmNodW5rX2lkLmNhbl90
YWtlX2RhdGEgPSAxOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNvYyA9ICZzdGNiLT5hc29j
OworCWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2hlYXJ0YmVhdF9jaHVuayk7
CisKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coY2hrLT5zZW5kX3NpemUsIDAs
IE1fTk9XQUlULCAxLCBNVF9IRUFERVIpOworCWlmIChjaGstPmRhdGEgPT0gTlVMTCkgeworCQlz
Y3RwX2ZyZWVfYV9jaHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisJCXJldHVybjsKKwl9CisJ
U0NUUF9CVUZfUkVTVl9VRihjaGstPmRhdGEsIFNDVFBfTUlOX09WRVJIRUFEKTsKKwlTQ1RQX0JV
Rl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCWNoay0+c2VudCA9IFNDVFBfREFU
QUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwljaGstPndob1RvID0gbmV0Owor
CWF0b21pY19hZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCS8qIE5vdyB3ZSBo
YXZlIGEgbWJ1ZiB0aGF0IHdlIGNhbiBmaWxsIGluIHdpdGggdGhlIGRldGFpbHMgKi8KKwloYiA9
IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9oZWFydGJlYXRfY2h1bmsgKik7CisJbWVtc2V0
KGhiLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2NodW5rKSk7CisJLyogZmlsbCBv
dXQgY2h1bmsgaGVhZGVyICovCisJaGItPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0hFQVJUQkVBVF9S
RVFVRVNUOworCWhiLT5jaC5jaHVua19mbGFncyA9IDA7CisJaGItPmNoLmNodW5rX2xlbmd0aCA9
IGh0b25zKGNoay0+c2VuZF9zaXplKTsKKwkvKiBGaWxsIG91dCBoYiBwYXJhbWV0ZXIgKi8KKwlo
Yi0+aGVhcnRiZWF0LmhiX2luZm8ucGgucGFyYW1fdHlwZSA9IGh0b25zKFNDVFBfSEVBUlRCRUFU
X0lORk8pOworCWhiLT5oZWFydGJlYXQuaGJfaW5mby5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhz
aXplb2Yoc3RydWN0IHNjdHBfaGVhcnRiZWF0X2luZm9fcGFyYW0pKTsKKwloYi0+aGVhcnRiZWF0
LmhiX2luZm8udGltZV92YWx1ZV8xID0gbm93LnR2X3NlYzsKKwloYi0+aGVhcnRiZWF0LmhiX2lu
Zm8udGltZV92YWx1ZV8yID0gbm93LnR2X3VzZWM7CisJLyogRGlkIG91ciB1c2VyIHJlcXVlc3Qg
dGhpcyBvbmUsIHB1dCBpdCBpbiAqLworCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2ZhbWls
eSA9ICh1aW50OF90KW5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHk7CisjaWZkZWYgSEFWRV9T
QV9MRU4KKwloYi0+aGVhcnRiZWF0LmhiX2luZm8uYWRkcl9sZW4gPSBuZXQtPnJvLl9sX2FkZHIu
c2Euc2FfbGVuOworI2Vsc2UKKwlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkp
IHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQloYi0+aGVhcnRiZWF0LmhiX2luZm8u
YWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJCWhiLT5oZWFydGJlYXQuaGJfaW5mby5h
ZGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQloYi0+aGVhcnRi
ZWF0LmhiX2luZm8uYWRkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworCQli
cmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyX2xl
biA9IDA7CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfVU5DT05GSVJNRUQpIHsKKwkJLyoKKwkJICogd2Ugb25seSB0YWtlIGZyb20gdGhlIGVu
dHJvcHkgcG9vbCBpZiB0aGUgYWRkcmVzcyBpcyBub3QKKwkJICogY29uZmlybWVkLgorCQkgKi8K
KwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMSA9IGhiLT5oZWFydGJlYXQuaGJfaW5mby5yYW5kb21f
dmFsdWUxID0gc2N0cF9zZWxlY3RfaW5pdGlhbF9UU04oJnN0Y2ItPnNjdHBfZXAtPnNjdHBfZXAp
OworCQluZXQtPmhlYXJ0YmVhdF9yYW5kb20yID0gaGItPmhlYXJ0YmVhdC5oYl9pbmZvLnJhbmRv
bV92YWx1ZTIgPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9l
cCk7CisJfSBlbHNlIHsKKwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMSA9IGhiLT5oZWFydGJlYXQu
aGJfaW5mby5yYW5kb21fdmFsdWUxID0gMDsKKwkJbmV0LT5oZWFydGJlYXRfcmFuZG9tMiA9IGhi
LT5oZWFydGJlYXQuaGJfaW5mby5yYW5kb21fdmFsdWUyID0gMDsKKwl9CisJc3dpdGNoIChuZXQt
PnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoK
KwkJbWVtY3B5KGhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyZXNzLAorCQkgICAgICAgJm5ldC0+
cm8uX2xfYWRkci5zaW4uc2luX2FkZHIsCisJCSAgICAgICBzaXplb2YobmV0LT5yby5fbF9hZGRy
LnNpbi5zaW5fYWRkcikpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBB
Rl9JTkVUNjoKKwkJbWVtY3B5KGhiLT5oZWFydGJlYXQuaGJfaW5mby5hZGRyZXNzLAorCQkgICAg
ICAgJm5ldC0+cm8uX2xfYWRkci5zaW42LnNpbjZfYWRkciwKKwkJICAgICAgIHNpemVvZihuZXQt
PnJvLl9sX2FkZHIuc2luNi5zaW42X2FkZHIpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoaGItPmhlYXJ0YmVh
dC5oYl9pbmZvLmFkZHJlc3MsCisJCSAgICAgICAmbmV0LT5yby5fbF9hZGRyLnNjb25uLnNjb25u
X2FkZHIsCisJCSAgICAgICBzaXplb2YobmV0LT5yby5fbF9hZGRyLnNjb25uLnNjb25uX2FkZHIp
KTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlpZiAoY2hrLT5kYXRhKSB7CisJCQlz
Y3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCX0KKwkJc2N0
cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQlyZXR1cm47CisJCWJyZWFr
OworCX0KKwluZXQtPmhiX3Jlc3BvbmRlZCA9IDA7CisJVEFJTFFfSU5TRVJUX1RBSUwoJnN0Y2It
PmFzb2MuY29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJc3RjYi0+YXNvYy5j
dHJsX3F1ZXVlX2NudCsrOworCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRoZWFydGJlYXQpOwor
CXJldHVybjsKK30KKwordm9pZAorc2N0cF9zZW5kX2Vjbl9lY2hvKHN0cnVjdCBzY3RwX3RjYiAq
c3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorCQkgICB1aW50MzJfdCBoaWdoX3RzbikKK3sK
KwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9lY25lX2NodW5r
ICplY25lOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCWlmIChuZXQgPT0gTlVM
TCkgeworCQlyZXR1cm47CisJfQorCWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlTQ1RQX1RDQl9MT0NL
X0FTU0VSVChzdGNiKTsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPmNvbnRyb2xfc2VuZF9x
dWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5yZWMuY2h1bmtfaWQuaWQgPT0gU0NUUF9F
Q05fRUNITykgJiYgKG5ldCA9PSBjaGstPndob1RvKSkgeworCQkJLyogZm91bmQgYSBwcmV2aW91
cyBFQ05fRUNITyB1cGRhdGUgaXQgaWYgbmVlZGVkICovCisJCQl1aW50MzJfdCBjbnQsIGN0c247
CisJCQllY25lID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKik7CisJ
CQljdHNuID0gbnRvaGwoZWNuZS0+dHNuKTsKKwkJCWlmIChTQ1RQX1RTTl9HVChoaWdoX3Rzbiwg
Y3RzbikpIHsKKwkJCQllY25lLT50c24gPSBodG9ubChoaWdoX3Rzbik7CisJCQkJU0NUUF9TVEFU
X0lOQ1Ioc2N0cHNfcXVldWVfdXBkX2VjbmUpOworCQkJfQorCQkJY250ID0gbnRvaGwoZWNuZS0+
bnVtX3BrdHNfc2luY2VfY3dyKTsKKwkJCWNudCsrOworCQkJZWNuZS0+bnVtX3BrdHNfc2luY2Vf
Y3dyID0gaHRvbmwoY250KTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwkvKiBub3BlIGNvdWxkIG5v
dCBmaW5kIG9uZSB0byB1cGRhdGUgc28gd2UgbXVzdCBidWlsZCBvbmUgKi8KKwlzY3RwX2FsbG9j
X2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0K
KwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19xdWV1ZV91cGRfZWNuZSk7CisJY2hrLT5jb3B5X2J5X3Jl
ZiA9IDA7CisJY2hrLT5yZWMuY2h1bmtfaWQuaWQgPSBTQ1RQX0VDTl9FQ0hPOworCWNoay0+cmVj
LmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNoay0+YXNv
YyA9ICZzdGNiLT5hc29jOworCWNoay0+c2VuZF9zaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Vj
bmVfY2h1bmspOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhjaGstPnNlbmRf
c2l6ZSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hFQURFUik7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxM
KSB7CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsK
KwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZF
UkhFQUQpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJY2hr
LT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNo
ay0+d2hvVG8gPSBuZXQ7CisJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwg
MSk7CisKKwlzdGNiLT5hc29jLmVjbl9lY2hvX2NudF9vbnErKzsKKwllY25lID0gbXRvZChjaGst
PmRhdGEsIHN0cnVjdCBzY3RwX2VjbmVfY2h1bmsgKik7CisJZWNuZS0+Y2guY2h1bmtfdHlwZSA9
IFNDVFBfRUNOX0VDSE87CisJZWNuZS0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCWVjbmUtPmNoLmNo
dW5rX2xlbmd0aCA9IGh0b25zKHNpemVvZihzdHJ1Y3Qgc2N0cF9lY25lX2NodW5rKSk7CisJZWNu
ZS0+dHNuID0gaHRvbmwoaGlnaF90c24pOworCWVjbmUtPm51bV9wa3RzX3NpbmNlX2N3ciA9IGh0
b25sKDEpOworCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1
ZSwgY2hrLCBzY3RwX25leHQpOworCWFzb2MtPmN0cmxfcXVldWVfY250Kys7Cit9CisKK3ZvaWQK
K3NjdHBfc2VuZF9wYWNrZXRfZHJvcHBlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKKyAgICBzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGxlbiwgaW50IGlwaGxlbiwg
aW50IGJhZF9jcmMpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0
IHNjdHBfcGt0ZHJvcF9jaHVuayAqZHJwOworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoazsK
Kwl1aW50OF90ICpkYXRhcDsKKwlpbnQgd2FzX3RydW5jID0gMDsKKwlpbnQgZnVsbHN6ID0gMDsK
Kwlsb25nIHNwYzsKKwlpbnQgb2Zmc2V0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaCwgY2h1
bmtfYnVmOworCXVuc2lnbmVkIGludCBjaGtfbGVuZ3RoOworCisgICAgICAgIGlmICghc3RjYikg
eworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisJYXNvYyA9ICZzdGNiLT5hc29jOwor
CVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworCWlmIChhc29jLT5wa3Rkcm9wX3N1cHBvcnRl
ZCA9PSAwKSB7CisJCS8qLQorCQkgKiBwZWVyIG11c3QgZGVjbGFyZSBzdXBwb3J0IGJlZm9yZSBJ
IHNlbmQgb25lLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoc3RjYi0+c2N0cF9zb2NrZXQg
PT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGsp
OworCWlmIChjaGsgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYg
PSAwOworCWNoay0+cmVjLmNodW5rX2lkLmlkID0gU0NUUF9QQUNLRVRfRFJPUFBFRDsKKwljaGst
PnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0gMTsKKwljaGstPmZsYWdzID0gMDsKKwlsZW4g
LT0gaXBobGVuOworCWNoay0+c2VuZF9zaXplID0gbGVuOworICAgICAgICAvKiBWYWxpZGF0ZSB0
aGF0IHdlIGRvIG5vdCBoYXZlIGFuIEFCT1JUIGluIGhlcmUuICovCisJb2Zmc2V0ID0gaXBobGVu
ICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAq
KXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCQkJCQkJICAgc2l6ZW9mKCpjaCksICh1aW50OF90
ICopICYgY2h1bmtfYnVmKTsKKwl3aGlsZSAoY2ggIT0gTlVMTCkgeworCQljaGtfbGVuZ3RoID0g
bnRvaHMoY2gtPmNodW5rX2xlbmd0aCk7CisJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKCpjaCkp
IHsKKwkJCS8qIGJyZWFrIHRvIGFib3J0IGxhbmQgKi8KKwkJCWJyZWFrOworCQl9CisJCXN3aXRj
aCAoY2gtPmNodW5rX3R5cGUpIHsKKwkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgorCQljYXNl
IFNDVFBfQUJPUlRfQVNTT0NJQVRJT046CisJCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSzoKKwkJ
CS8qKgorCQkJICogV2UgZG9uJ3QgcmVzcG9uZCB3aXRoIGFuIFBLVC1EUk9QIHRvIGFuIEFCT1JU
CisJCQkgKiBvciBQS1QtRFJPUC4gV2UgYWxzbyBkbyBub3QgcmVzcG9uZCB0byBhbgorCQkJICog
SU5JVC1BQ0ssIGJlY2F1c2Ugd2UgY2FuJ3Qga25vdyBpZiB0aGUgaW5pdGlhdGlvbgorCQkJICog
dGFnIGlzIGNvcnJlY3Qgb3Igbm90LgorCQkJICovCisJCQlzY3RwX2ZyZWVfYV9jaHVuayhzdGNi
LCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQlyZXR1cm47CisJCWRlZmF1bHQ6CisJCQli
cmVhazsKKwkJfQorCQlvZmZzZXQgKz0gU0NUUF9TSVpFMzIoY2hrX2xlbmd0aCk7CisJCWNoID0g
KHN0cnVjdCBzY3RwX2NodW5raGRyICopc2N0cF9tX2dldHB0cihtLCBvZmZzZXQsCisJCSAgICBz
aXplb2YoKmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYpOworCX0KKworCWlmICgobGVuICsg
U0NUUF9NQVhfT1ZFUkhFQUQgKyBzaXplb2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuaykpID4K
KwkgICAgbWluKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1LCBNQ0xCWVRFUykpIHsKKwkJLyogb25s
eSBzZW5kIDEgbXR1IHdvcnRoLCB0cmltIG9mZiB0aGUKKwkJICogZXhjZXNzIG9uIHRoZSBlbmQu
CisJCSAqLworCQlmdWxsc3ogPSBsZW47CisJCWxlbiA9IG1pbihzdGNiLT5hc29jLnNtYWxsZXN0
X210dSwgTUNMQllURVMpIC0gU0NUUF9NQVhfT1ZFUkhFQUQ7CisJCXdhc190cnVuYyA9IDE7CisJ
fQorCWNoay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+ZGF0YSA9IHNjdHBfZ2V0X21idWZf
Zm9yX21zZyhNQ0xCWVRFUywgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChjaGstPmRh
dGEgPT0gTlVMTCkgeworanVtcF9vdXQ6CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNo
ay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCWRycCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1
Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICopOworCWlmIChkcnAgPT0gTlVMTCkgeworCQlzY3RwX21f
ZnJlZW0oY2hrLT5kYXRhKTsKKwkJY2hrLT5kYXRhID0gTlVMTDsKKwkJZ290byBqdW1wX291dDsK
Kwl9CisJY2hrLT5ib29rX3NpemUgPSBTQ1RQX1NJWkUzMigoY2hrLT5zZW5kX3NpemUgKyBzaXpl
b2Yoc3RydWN0IHNjdHBfcGt0ZHJvcF9jaHVuaykgKworCSAgICBzaXplb2Yoc3RydWN0IHNjdHBo
ZHIpICsgU0NUUF9NRURfT1ZFUkhFQUQpKTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisJ
aWYgKHdhc190cnVuYykgeworCQlkcnAtPmNoLmNodW5rX2ZsYWdzID0gU0NUUF9QQUNLRVRfVFJV
TkNBVEVEOworCQlkcnAtPnRydW5jX2xlbiA9IGh0b25zKGZ1bGxzeik7CisJCS8qIExlbiBpcyBh
bHJlYWR5IGFkanVzdGVkIHRvIHNpemUgbWludXMgb3ZlcmhlYWQgYWJvdmUKKwkJICogdGFrZSBv
dXQgdGhlIHBrdF9kcm9wIGNodW5rIGl0c2VsZiBmcm9tIGl0LgorCQkgKi8KKwkJY2hrLT5zZW5k
X3NpemUgPSAodWludDE2X3QpKGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5r
KSk7CisJCWxlbiA9IGNoay0+c2VuZF9zaXplOworCX0gZWxzZSB7CisJCS8qIG5vIHRydW5jYXRp
b24gbmVlZGVkICovCisJCWRycC0+Y2guY2h1bmtfZmxhZ3MgPSAwOworCQlkcnAtPnRydW5jX2xl
biA9IGh0b25zKDApOworCX0KKwlpZiAoYmFkX2NyYykgeworCQlkcnAtPmNoLmNodW5rX2ZsYWdz
IHw9IFNDVFBfQkFEQ1JDOworCX0KKwljaGstPnNlbmRfc2l6ZSArPSBzaXplb2Yoc3RydWN0IHNj
dHBfcGt0ZHJvcF9jaHVuayk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRf
c2l6ZTsKKwljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1VOU0VOVDsKKwljaGstPnNuZF9jb3Vu
dCA9IDA7CisJaWYgKG5ldCkgeworCQkvKiB3ZSBzaG91bGQgaGl0IGhlcmUgKi8KKwkJY2hrLT53
aG9UbyA9IG5ldDsKKwkJYXRvbWljX2FkZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7
CisJfSBlbHNlIHsKKwkJY2hrLT53aG9UbyA9IE5VTEw7CisJfQorCWRycC0+Y2guY2h1bmtfdHlw
ZSA9IFNDVFBfUEFDS0VUX0RST1BQRUQ7CisJZHJwLT5jaC5jaHVua19sZW5ndGggPSBodG9ucyhj
aGstPnNlbmRfc2l6ZSk7CisJc3BjID0gU0NUUF9TQl9MSU1JVF9SQ1Yoc3RjYi0+c2N0cF9zb2Nr
ZXQpOworCWlmIChzcGMgPCAwKSB7CisJCXNwYyA9IDA7CisJfQorCWRycC0+Ym90dGxlX2J3ID0g
aHRvbmwoc3BjKTsKKwlpZiAoYXNvYy0+bXlfcnduZCkgeworCQlkcnAtPmN1cnJlbnRfb25xID0g
aHRvbmwoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSArCisJCSAgICBhc29jLT5zaXplX29uX2Fs
bF9zdHJlYW1zICsKKwkJICAgIGFzb2MtPm15X3J3bmRfY29udHJvbF9sZW4gKworCQkgICAgc3Rj
Yi0+c2N0cF9zb2NrZXQtPnNvX3Jjdi5zYl9jYyk7CisJfSBlbHNlIHsKKwkJLyotCisJCSAqIElm
IG15IHJ3bmQgaXMgMCwgcG9zc2libHkgZnJvbSBtYnVmIGRlcGxldGlvbiBhcyB3ZWxsIGFzCisJ
CSAqIHNwYWNlIHVzZWQsIHRlbGwgdGhlIHBlZXIgdGhlcmUgaXMgTk8gc3BhY2UgYWthIG9ucSA9
PSBidworCQkgKi8KKwkJZHJwLT5jdXJyZW50X29ucSA9IGh0b25sKHNwYyk7CisJfQorCWRycC0+
cmVzZXJ2ZWQgPSAwOworCWRhdGFwID0gZHJwLT5kYXRhOworCW1fY29weWRhdGEobSwgaXBobGVu
LCBsZW4sIChjYWRkcl90KWRhdGFwKTsKKwlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5j
b250cm9sX3NlbmRfcXVldWUsIGNoaywgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2Nu
dCsrOworfQorCit2b2lkCitzY3RwX3NlbmRfY3dyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LCB1aW50MzJfdCBoaWdoX3RzbiwgdWludDhfdCBvdmVycmlkZSkK
K3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9jd3JfY2h1
bmsgKmN3cjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisKKwlTQ1RQX1RDQl9MT0NL
X0FTU0VSVChzdGNiKTsKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlhc29j
ID0gJnN0Y2ItPmFzb2M7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5jb250cm9sX3NlbmRf
cXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAoKGNoay0+cmVjLmNodW5rX2lkLmlkID09IFNDVFBf
RUNOX0NXUikgJiYgKG5ldCA9PSBjaGstPndob1RvKSkgeworCQkJLyogZm91bmQgYSBwcmV2aW91
cyBDV1IgcXVldWVkIHRvIHNhbWUgZGVzdGluYXRpb24gdXBkYXRlIGl0IGlmIG5lZWRlZCAqLwor
CQkJdWludDMyX3QgY3RzbjsKKwkJCWN3ciA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9j
d3JfY2h1bmsgKik7CisJCQljdHNuID0gbnRvaGwoY3dyLT50c24pOworCQkJaWYgKFNDVFBfVFNO
X0dUKGhpZ2hfdHNuLCBjdHNuKSkgeworCQkJCWN3ci0+dHNuID0gaHRvbmwoaGlnaF90c24pOwor
CQkJfQorCQkJaWYgKG92ZXJyaWRlICYgU0NUUF9DV1JfUkVEVUNFX09WRVJSSURFKSB7CisJCQkJ
LyogTWFrZSBzdXJlIG92ZXJyaWRlIGlzIGNhcnJpZWQgKi8KKwkJCQljd3ItPmNoLmNodW5rX2Zs
YWdzIHw9IFNDVFBfQ1dSX1JFRFVDRV9PVkVSUklERTsKKwkJCX0KKwkJCXJldHVybjsKKwkJfQor
CX0KKwlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwlpZiAoY2hrID09IE5VTEwpIHsK
KwkJcmV0dXJuOworCX0KKwljaGstPmNvcHlfYnlfcmVmID0gMDsKKwljaGstPnJlYy5jaHVua19p
ZC5pZCA9IFNDVFBfRUNOX0NXUjsKKwljaGstPnJlYy5jaHVua19pZC5jYW5fdGFrZV9kYXRhID0g
MTsKKwljaGstPmZsYWdzID0gMDsKKwljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwljaGstPnNl
bmRfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9jd3JfY2h1bmspOworCWNoay0+ZGF0YSA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhjaGstPnNlbmRfc2l6ZSwgMCwgTV9OT1dBSVQsIDEsIE1UX0hF
QURFUik7CisJaWYgKGNoay0+ZGF0YSA9PSBOVUxMKSB7CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0
Y2IsIGNoaywgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9S
RVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhFQUQpOworCVNDVFBfQlVGX0xFTihjaGst
PmRhdGEpID0gY2hrLT5zZW5kX3NpemU7CisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNF
TlQ7CisJY2hrLT5zbmRfY291bnQgPSAwOworCWNoay0+d2hvVG8gPSBuZXQ7CisJYXRvbWljX2Fk
ZF9pbnQoJmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJY3dyID0gbXRvZChjaGstPmRhdGEs
IHN0cnVjdCBzY3RwX2N3cl9jaHVuayAqKTsKKwljd3ItPmNoLmNodW5rX3R5cGUgPSBTQ1RQX0VD
Tl9DV1I7CisJY3dyLT5jaC5jaHVua19mbGFncyA9IG92ZXJyaWRlOworCWN3ci0+Y2guY2h1bmtf
bGVuZ3RoID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBzY3RwX2N3cl9jaHVuaykpOworCWN3ci0+dHNu
ID0gaHRvbmwoaGlnaF90c24pOworCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLmNvbnRy
b2xfc2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCWFzb2MtPmN0cmxfcXVldWVfY250Kys7
Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF9vdXQoc3RydWN0IHNjdHBf
dGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGssCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVpbnQzMl90IHNlcSwgdWludDMyX3QgcmVzcF9zZXEsIHVpbnQzMl90IGxhc3Rf
c2VudCkKK3sKKwl1aW50MTZfdCBsZW4sIG9sZF9sZW4sIGk7CisJc3RydWN0IHNjdHBfc3RyZWFt
X3Jlc2V0X291dF9yZXF1ZXN0ICpyZXFfb3V0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsK
KwlpbnQgYXQ7CisJaW50IG51bWJlcl9lbnRyaWVzPTA7CisKKwljaCA9IG10b2QoY2hrLT5kYXRh
LCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIo
bnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCS8qIGdldCB0byBuZXcgb2Zmc2V0IGZvciB0aGUg
cGFyYW0uICovCisJcmVxX291dCA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVl
c3QgKikoKGNhZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFy
YW0gYmU/ICovCisJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKysp
IHsKKwkJaWYgKChzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fUkVT
RVRfUEVORElORykgJiYKKwkJICAgIChzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1
ZXVlcyA9PSAwKSAmJgorCQkgICAgVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5v
dXRxdWV1ZSkpIHsKKwkJCW51bWJlcl9lbnRyaWVzKys7CisJCX0KKwl9CisJaWYgKG51bWJlcl9l
bnRyaWVzID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG51bWJlcl9lbnRyaWVzID09
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB7CisJCW51bWJlcl9lbnRyaWVzID0gMDsKKwl9CisJ
aWYgKG51bWJlcl9lbnRyaWVzID4gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUKSB7CisJ
CW51bWJlcl9lbnRyaWVzID0gU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUOworCX0KKwls
ZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfb3V0X3JlcXVl
c3QpICsgKHNpemVvZih1aW50MTZfdCkgKiBudW1iZXJfZW50cmllcykpOworCXJlcV9vdXQtPnBo
LnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9PVVRfUkVRVUVTVCk7CisJcmVxX291
dC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXFfb3V0LT5yZXF1ZXN0X3NlcSA9
IGh0b25sKHNlcSk7CisJcmVxX291dC0+cmVzcG9uc2Vfc2VxID0gaHRvbmwocmVzcF9zZXEpOwor
CXJlcV9vdXQtPnNlbmRfcmVzZXRfYXRfdHNuID0gaHRvbmwobGFzdF9zZW50KTsKKwlhdCA9IDA7
CisJaWYgKG51bWJlcl9lbnRyaWVzKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnN0
cmVhbW91dGNudDsgaSsrKSB7CisJCQlpZiAoKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9
PSBTQ1RQX1NUUkVBTV9SRVNFVF9QRU5ESU5HKSAmJgorCQkJICAgIChzdGNiLT5hc29jLnN0cm1v
dXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9PSAwKSAmJgorCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNi
LT5hc29jLnN0cm1vdXRbaV0ub3V0cXVldWUpKSB7CisJCQkJcmVxX291dC0+bGlzdF9vZl9zdHJl
YW1zW2F0XSA9IGh0b25zKGkpOworCQkJCWF0Kys7CisJCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ld
LnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUOworCQkJCWlmIChhdCA+PSBudW1i
ZXJfZW50cmllcykgeworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2Ugewor
CQlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUOwor
CQl9CisJfQorCWlmIChTQ1RQX1NJWkUzMihsZW4pID4gbGVuKSB7CisJCS8qLQorCQkgKiBOZWVk
IHRvIHdvcnJ5IGFib3V0IHRoZSBwYWQgd2UgbWF5IGVuZCB1cCBhZGRpbmcgdG8gdGhlCisJCSAq
IGVuZC4gVGhpcyBpcyBlYXN5IHNpbmNlIHRoZSBzdHJ1Y3QgaXMgZWl0aGVyIGFsaWduZWQgdG8g
NAorCQkgKiBieXRlcyBvciAyIGJ5dGVzIG9mZi4KKwkJICovCisJCXJlcV9vdXQtPmxpc3Rfb2Zf
c3RyZWFtc1tudW1iZXJfZW50cmllc10gPSAwOworCX0KKwkvKiBub3cgZml4IHRoZSBjaHVuayBs
ZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hr
LT5ib29rX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsK
KwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19zaXplKTsKKwlTQ1RQX0JV
Rl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybiAoMSk7Cit9CisKK3N0
YXRpYyB2b2lkCitzY3RwX2FkZF9zdHJlYW1fcmVzZXRfaW4oc3RydWN0IHNjdHBfdG1pdF9jaHVu
ayAqY2hrLAorICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1iZXJfZW50cmllcywgdWlu
dDE2X3QgKmxpc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3Qgc2VxKQorewor
CXVpbnQxNl90IGxlbiwgb2xkX2xlbiwgaTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfaW5f
cmVxdWVzdCAqcmVxX2luOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKworCWNoID0gbXRv
ZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9sZW4gPSBsZW4gPSBT
Q1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBnZXQgdG8gbmV3IG9m
ZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCXJlcV9pbiA9IChzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfaW5fcmVxdWVzdCAqKSgoY2FkZHJfdCljaCArIGxlbik7CisJLyogbm93IGhvdyBsb25nIHdp
bGwgdGhpcyBwYXJhbSBiZT8gKi8KKwlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfaW5fcmVxdWVzdCkgKyAoc2l6ZW9mKHVpbnQxNl90KSAqIG51bWJlcl9l
bnRyaWVzKSk7CisJcmVxX2luLT5waC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRf
SU5fUkVRVUVTVCk7CisJcmVxX2luLT5waC5wYXJhbV9sZW5ndGggPSBodG9ucyhsZW4pOworCXJl
cV9pbi0+cmVxdWVzdF9zZXEgPSBodG9ubChzZXEpOworCWlmIChudW1iZXJfZW50cmllcykgewor
CQlmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX2VudHJpZXM7IGkrKykgeworCQkJcmVxX2luLT5saXN0
X29mX3N0cmVhbXNbaV0gPSBodG9ucyhsaXN0W2ldKTsKKwkJfQorCX0KKwlpZiAoU0NUUF9TSVpF
MzIobGVuKSA+IGxlbikgeworCQkvKi0KKwkJICogTmVlZCB0byB3b3JyeSBhYm91dCB0aGUgcGFk
IHdlIG1heSBlbmQgdXAgYWRkaW5nIHRvIHRoZQorCQkgKiBlbmQuIFRoaXMgaXMgZWFzeSBzaW5j
ZSB0aGUgc3RydWN0IGlzIGVpdGhlciBhbGlnbmVkIHRvIDQKKwkJICogYnl0ZXMgb3IgMiBieXRl
cyBvZmYuCisJCSAqLworCQlyZXFfaW4tPmxpc3Rfb2Zfc3RyZWFtc1tudW1iZXJfZW50cmllc10g
PSAwOworCX0KKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtfbGVu
Z3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5ib29rX3NpemUgPSBsZW4gKyBvbGRf
bGVuOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBf
U0laRTMyKGNoay0+Ym9va19zaXplKTsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IGNoay0+
c2VuZF9zaXplOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfYWRkX3N0cmVhbV9y
ZXNldF90c24oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MzJfdCBzZXEpCit7CisJdWludDE2X3QgbGVuLCBvbGRfbGVuOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqcmVxX3RzbjsKKwlzdHJ1Y3Qgc2N0cF9j
aHVua2hkciAqY2g7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gtPmNodW5rX2xlbmd0
aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4gKi8KKwlyZXFfdHNu
ID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF90c25fcmVxdWVzdCAqKSgoY2FkZHJfdCljaCAr
IGxlbik7CisJLyogbm93IGhvdyBsb25nIHdpbGwgdGhpcyBwYXJhbSBiZT8gKi8KKwlsZW4gPSBz
aXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Rzbl9yZXF1ZXN0KTsKKwlyZXFfdHNuLT5w
aC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfVFNOX1JFUVVFU1QpOworCXJlcV90
c24tPnBoLnBhcmFtX2xlbmd0aCA9IGh0b25zKGxlbik7CisJcmVxX3Rzbi0+cmVxdWVzdF9zZXEg
PSBodG9ubChzZXEpOworCisJLyogbm93IGZpeCB0aGUgY2h1bmsgbGVuZ3RoICovCisJY2gtPmNo
dW5rX2xlbmd0aCA9IGh0b25zKGxlbiArIG9sZF9sZW4pOworCWNoay0+c2VuZF9zaXplID0gbGVu
ICsgb2xkX2xlbjsKKwljaGstPmJvb2tfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+c2VuZF9zaXpl
KTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkg
PSBTQ1RQX1NJWkUzMihjaGstPnNlbmRfc2l6ZSk7CisJcmV0dXJuOworfQorCit2b2lkCitzY3Rw
X2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcmVzcF9zZXEsIHVpbnQzMl90IHJl
c3VsdCkKK3sKKwl1aW50MTZfdCBsZW4sIG9sZF9sZW47CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X3Jlc3BvbnNlICpyZXNwOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKworCWNoID0g
bXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9sZW4gPSBsZW4g
PSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBnZXQgdG8gbmV3
IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCXJlc3AgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jl
c2V0X3Jlc3BvbnNlICopKChjYWRkcl90KWNoICsgbGVuKTsKKwkvKiBub3cgaG93IGxvbmcgd2ls
bCB0aGlzIHBhcmFtIGJlPyAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVz
ZXRfcmVzcG9uc2UpOworCXJlc3AtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNF
VF9SRVNQT05TRSk7CisJcmVzcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXNw
LT5yZXNwb25zZV9zZXEgPSBodG9ubChyZXNwX3NlcSk7CisJcmVzcC0+cmVzdWx0ID0gbnRvaGwo
cmVzdWx0KTsKKworCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0aCAqLworCWNoLT5jaHVua19s
ZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKKwljaGstPmJvb2tfc2l6ZSA9IGxlbiArIG9s
ZF9sZW47CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCWNoay0+c2VuZF9zaXplID0gU0NU
UF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hr
LT5zZW5kX3NpemU7CisJcmV0dXJuOworfQorCit2b2lkCitzY3RwX3NlbmRfZGVmZXJyZWRfcmVz
ZXRfcmVzcG9uc2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCSBzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfbGlzdCAqZW50LAorCQkJCSBpbnQgcmVzcG9uc2UpCit7CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVj
dCBzY3RwX2NodW5raGRyICpjaDsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKworCS8qCisJICog
UmVzZXQgb3VyIGxhc3QgcmVzZXQgYWN0aW9uIHRvIHRoZSBuZXcgb25lIElQIC0+IHJlc3BvbnNl
CisJICogKFBFUkZPUk1FRCBwcm9iYWJseSkuIFRoaXMgYXNzdXJlcyB0aGF0IGlmIHdlIGZhaWwg
dG8gc2VuZCwgYQorCSAqIHJldHJhbiBmcm9tIHRoZSBwZWVyIHdpbGwgZ2V0IHRoZSBuZXcgcmVz
cG9uc2UuCisJICovCisJYXNvYy0+bGFzdF9yZXNldF9hY3Rpb25bMF0gPSByZXNwb25zZTsKKwlp
ZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCXJldHVybjsKKwl9CisJc2N0
cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNoayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOworCQlyZXR1cm47CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVj
LmNodW5rX2lkLmlkID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2Fu
X3Rha2VfZGF0YSA9IDA7CisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFz
b2M7CisJY2hrLT5ib29rX3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWNo
ay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19z
aXplX3NjYWxlID0gMDsKKwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllU
RVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsK
KwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBF
Tk9NRU0pOworCQlyZXR1cm47CisJfQorCVNDVFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQ
X01JTl9PVkVSSEVBRCk7CisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+c2Vu
dCA9IFNDVFBfREFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAoc3Rj
Yi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
OworCX0gZWxzZSB7CisJCWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRp
b247CisJfQorCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOwor
CWNoLT5jaHVua190eXBlID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdzID0g
MDsKKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5ib29rX3NpemUpOworCWF0b21pY19h
ZGRfaW50KCZjaGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVNDVFBfQlVGX0xFTihjaGstPmRh
dGEpID0gY2hrLT5zZW5kX3NpemU7CisJc2N0cF9hZGRfc3RyZWFtX3Jlc2V0X3Jlc3VsdChjaGss
IGVudC0+c2VxLCByZXNwb25zZSk7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2VuZGluZyAq
LworCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCisJCQkgIGNo
aywKKwkJCSAgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworfQorCit2b2lk
CitzY3RwX2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0X3RzbihzdHJ1Y3Qgc2N0cF90bWl0X2NodW5r
ICpjaGssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCByZXNwX3Nl
cSwgdWludDMyX3QgcmVzdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu
dDMyX3Qgc2VuZF91bmEsIHVpbnQzMl90IHJlY3ZfbmV4dCkKK3sKKwl1aW50MTZfdCBsZW4sIG9s
ZF9sZW47CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X3Jlc3BvbnNlX3RzbiAqcmVzcDsKKwlz
dHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisKKwljaCA9IG10b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qg
c2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpFMzIobnRvaHMoY2gt
PmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9yIHRoZSBwYXJhbS4g
Ki8KKwlyZXNwID0gKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24gKikoKGNh
ZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBob3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICov
CisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9yZXNwb25zZV90c24pOwor
CXJlc3AtPnBoLnBhcmFtX3R5cGUgPSBodG9ucyhTQ1RQX1NUUl9SRVNFVF9SRVNQT05TRSk7CisJ
cmVzcC0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlyZXNwLT5yZXNwb25zZV9zZXEg
PSBodG9ubChyZXNwX3NlcSk7CisJcmVzcC0+cmVzdWx0ID0gaHRvbmwocmVzdWx0KTsKKwlyZXNw
LT5zZW5kZXJzX25leHRfdHNuID0gaHRvbmwoc2VuZF91bmEpOworCXJlc3AtPnJlY2VpdmVyc19u
ZXh0X3RzbiA9IGh0b25sKHJlY3ZfbmV4dCk7CisKKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5n
dGggKi8KKwljaC0+Y2h1bmtfbGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5i
b29rX3NpemUgPSBsZW4gKyBvbGRfbGVuOworCWNoay0+c2VuZF9zaXplID0gU0NUUF9TSVpFMzIo
Y2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwlTQ1RQX0JVRl9M
RU4oY2hrLT5kYXRhKSA9IGNoay0+c2VuZF9zaXplOworCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK3NjdHBfYWRkX2FuX291dF9zdHJlYW0oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAor
CQkgICAgICAgdWludDMyX3Qgc2VxLAorCQkgICAgICAgdWludDE2X3QgYWRkaW5nKQoreworCXVp
bnQxNl90IGxlbiwgb2xkX2xlbjsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2g7CisJc3RydWN0
IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9zdHJtICphZGRzdHI7CisKKwljaCA9IG10b2QoY2hrLT5k
YXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwlvbGRfbGVuID0gbGVuID0gU0NUUF9TSVpF
MzIobnRvaHMoY2gtPmNodW5rX2xlbmd0aCkpOworCisJLyogZ2V0IHRvIG5ldyBvZmZzZXQgZm9y
IHRoZSBwYXJhbS4gKi8KKwlhZGRzdHIgPSAoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2FkZF9z
dHJtICopKChjYWRkcl90KWNoICsgbGVuKTsKKwkvKiBub3cgaG93IGxvbmcgd2lsbCB0aGlzIHBh
cmFtIGJlPyAqLworCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0
cm0pOworCisJLyogRmlsbCBpdCBvdXQuICovCisJYWRkc3RyLT5waC5wYXJhbV90eXBlID0gaHRv
bnMoU0NUUF9TVFJfUkVTRVRfQUREX09VVF9TVFJFQU1TKTsKKwlhZGRzdHItPnBoLnBhcmFtX2xl
bmd0aCA9IGh0b25zKGxlbik7CisJYWRkc3RyLT5yZXF1ZXN0X3NlcSA9IGh0b25sKHNlcSk7CisJ
YWRkc3RyLT5udW1iZXJfb2Zfc3RyZWFtcyA9IGh0b25zKGFkZGluZyk7CisJYWRkc3RyLT5yZXNl
cnZlZCA9IDA7CisKKwkvKiBub3cgZml4IHRoZSBjaHVuayBsZW5ndGggKi8KKwljaC0+Y2h1bmtf
bGVuZ3RoID0gaHRvbnMobGVuICsgb2xkX2xlbik7CisJY2hrLT5zZW5kX3NpemUgPSBsZW4gKyBv
bGRfbGVuOworCWNoay0+Ym9va19zaXplID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOwor
CWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsKKwlTQ1RQX0JVRl9MRU4oY2hrLT5kYXRhKSA9IFND
VFBfU0laRTMyKGNoay0+c2VuZF9zaXplKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitz
Y3RwX2FkZF9hbl9pbl9zdHJlYW0oc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLAorICAgICAg
ICAgICAgICAgICAgICAgIHVpbnQzMl90IHNlcSwKKyAgICAgICAgICAgICAgICAgICAgICB1aW50
MTZfdCBhZGRpbmcpCit7CisJdWludDE2X3QgbGVuLCBvbGRfbGVuOworCXN0cnVjdCBzY3RwX2No
dW5raGRyICpjaDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKmFkZHN0cjsK
KworCWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCW9sZF9s
ZW4gPSBsZW4gPSBTQ1RQX1NJWkUzMihudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKSk7CisKKwkvKiBn
ZXQgdG8gbmV3IG9mZnNldCBmb3IgdGhlIHBhcmFtLiAqLworCWFkZHN0ciA9IChzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcmVzZXRfYWRkX3N0cm0gKikoKGNhZGRyX3QpY2ggKyBsZW4pOworCS8qIG5vdyBo
b3cgbG9uZyB3aWxsIHRoaXMgcGFyYW0gYmU/ICovCisJbGVuID0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3N0cmVhbV9yZXNldF9hZGRfc3RybSk7CisJLyogRmlsbCBpdCBvdXQuICovCisJYWRkc3RyLT5w
aC5wYXJhbV90eXBlID0gaHRvbnMoU0NUUF9TVFJfUkVTRVRfQUREX0lOX1NUUkVBTVMpOworCWFk
ZHN0ci0+cGgucGFyYW1fbGVuZ3RoID0gaHRvbnMobGVuKTsKKwlhZGRzdHItPnJlcXVlc3Rfc2Vx
ID0gaHRvbmwoc2VxKTsKKwlhZGRzdHItPm51bWJlcl9vZl9zdHJlYW1zID0gaHRvbnMoYWRkaW5n
KTsKKwlhZGRzdHItPnJlc2VydmVkID0gMDsKKworCS8qIG5vdyBmaXggdGhlIGNodW5rIGxlbmd0
aCAqLworCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhsZW4gKyBvbGRfbGVuKTsKKwljaGstPnNl
bmRfc2l6ZSA9IGxlbiArIG9sZF9sZW47CisJY2hrLT5ib29rX3NpemUgPSBTQ1RQX1NJWkUzMihj
aGstPnNlbmRfc2l6ZSk7CisJY2hrLT5ib29rX3NpemVfc2NhbGUgPSAwOworCVNDVFBfQlVGX0xF
TihjaGstPmRhdGEpID0gU0NUUF9TSVpFMzIoY2hrLT5zZW5kX3NpemUpOworCXJldHVybjsKK30K
KworaW50CitzY3RwX3NlbmRfc3RyZWFtX3Jlc2V0X291dF9pZl9wb3NzaWJsZShzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IsIGludCBzb19sb2NrZWQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2M7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2NodW5r
aGRyICpjaDsKKwl1aW50MzJfdCBzZXE7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJYXNvYy0+
dHJpZ2dlcl9yZXNldCA9IDA7CisJaWYgKGFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZykg
eworCQlyZXR1cm4gKEVBTFJFQURZKTsKKwl9CisJc2N0cF9hbGxvY19hX2NodW5rKHN0Y2IsIGNo
ayk7CisJaWYgKGNoayA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3Rj
YiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01F
TSk7CisJfQorCWNoay0+Y29weV9ieV9yZWYgPSAwOworCWNoay0+cmVjLmNodW5rX2lkLmlkID0g
U0NUUF9TVFJFQU1fUkVTRVQ7CisJY2hrLT5yZWMuY2h1bmtfaWQuY2FuX3Rha2VfZGF0YSA9IDA7
CisJY2hrLT5mbGFncyA9IDA7CisJY2hrLT5hc29jID0gJnN0Y2ItPmFzb2M7CisJY2hrLT5ib29r
X3NpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOworCWNoay0+c2VuZF9zaXplID0g
U0NUUF9TSVpFMzIoY2hrLT5ib29rX3NpemUpOworCWNoay0+Ym9va19zaXplX3NjYWxlID0gMDsK
KwljaGstPmRhdGEgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlU
LCAxLCBNVF9EQVRBKTsKKwlpZiAoY2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2Ff
Y2h1bmsoc3RjYiwgY2hrLCBzb19sb2NrZWQpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJcmV0dXJuIChF
Tk9NRU0pOworCX0KKwlTQ1RQX0JVRl9SRVNWX1VGKGNoay0+ZGF0YSwgU0NUUF9NSU5fT1ZFUkhF
QUQpOworCisJLyogc2V0dXAgY2h1bmsgcGFyYW1ldGVycyAqLworCWNoay0+c2VudCA9IFNDVFBf
REFUQUdSQU1fVU5TRU5UOworCWNoay0+c25kX2NvdW50ID0gMDsKKwlpZiAoc3RjYi0+YXNvYy5h
bHRlcm5hdGUpIHsKKwkJY2hrLT53aG9UbyA9IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlOworCX0gZWxz
ZSB7CisJCWNoay0+d2hvVG8gPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJfQor
CWNoID0gbXRvZChjaGstPmRhdGEsIHN0cnVjdCBzY3RwX2NodW5raGRyICopOworCWNoLT5jaHVu
a190eXBlID0gU0NUUF9TVFJFQU1fUkVTRVQ7CisJY2gtPmNodW5rX2ZsYWdzID0gMDsKKwljaC0+
Y2h1bmtfbGVuZ3RoID0gaHRvbnMoY2hrLT5ib29rX3NpemUpOworCWF0b21pY19hZGRfaW50KCZj
aGstPndob1RvLT5yZWZfY291bnQsIDEpOworCVNDVFBfQlVGX0xFTihjaGstPmRhdGEpID0gY2hr
LT5zZW5kX3NpemU7CisJc2VxID0gc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dDsKKwlpZiAo
c2N0cF9hZGRfc3RyZWFtX3Jlc2V0X291dChzdGNiLCBjaGssIHNlcSwgKHN0Y2ItPmFzb2Muc3Ry
X3Jlc2V0X3NlcV9pbiAtIDEpLCAoc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDEpKSkgeworCQlz
ZXErKzsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJfSBlbHNlIHsKKwkJ
bV9mcmVlbShjaGstPmRhdGEpOworCQljaGstPmRhdGEgPSBOVUxMOworCQlzY3RwX2ZyZWVfYV9j
aHVuayhzdGNiLCBjaGssIHNvX2xvY2tlZCk7CisJCXJldHVybiAoRU5PRU5UKTsKKwl9CisJYXNv
Yy0+c3RyX3Jlc2V0ID0gY2hrOworCS8qIGluc2VydCB0aGUgY2h1bmsgZm9yIHNlbmRpbmcgKi8K
KwlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLAorCQkJICBjaGss
CisJCQkgIHNjdHBfbmV4dCk7CisJYXNvYy0+Y3RybF9xdWV1ZV9jbnQrKzsKKworCWlmIChzdGNi
LT5hc29jLnNlbmRfc2FjaykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBzb19sb2NrZWQpOwor
CX0KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCwgc3RjYi0+c2N0
cF9lcCwgc3RjYiwgY2hrLT53aG9Ubyk7CisJcmV0dXJuICgwKTsKK30KKworaW50CitzY3RwX3Nl
bmRfc3RyX3Jlc2V0X3JlcShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAg
ICAgICAgICB1aW50MTZfdCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKmxpc3QsCisgICAgICAg
ICAgICAgICAgICAgICAgICB1aW50OF90IHNlbmRfaW5fcmVxLAorICAgICAgICAgICAgICAgICAg
ICAgICAgdWludDhfdCBzZW5kX3Rzbl9yZXEsCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50
OF90IGFkZF9zdHJlYW0sCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBhZGRpbmdf
bywKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGFkZGluZ19pLCB1aW50OF90IHBl
ZXJfYXNrZWQpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNj
dHBfdG1pdF9jaHVuayAqY2hrOworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlpbnQgY2Fu
X3NlbmRfb3V0X3JlcT0wOworCXVpbnQzMl90IHNlcTsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsK
KwlpZiAoYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCS8qLQorCQkgKiBBbHJl
YWR5IG9uZSBwZW5kaW5nLCBtdXN0IGdldCBBQ0sgYmFjayB0byBjbGVhciB0aGUgZmxhZy4KKwkJ
ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFQlVTWSk7CisJCXJldHVybiAoRUJVU1kpOworCX0KKwlpZiAoKHNlbmRfaW5f
cmVxID09IDApICYmIChzZW5kX3Rzbl9yZXEgPT0gMCkgJiYKKwkgICAgKGFkZF9zdHJlYW0gPT0g
MCkpIHsKKwkJLyogbm90aGluZyB0byBkbyAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEws
IHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKwlpZiAoc2VuZF90c25fcmVxICYmIHNlbmRfaW5fcmVxKSB7CisJCS8qIGVy
cm9yLCBjYW4ndCBkbyB0aGF0ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7
CisJfSBlbHNlIGlmIChzZW5kX2luX3JlcSkgeworCQljYW5fc2VuZF9vdXRfcmVxID0gMTsKKwl9
CisJaWYgKG51bWJlcl9lbnRyaWVzID4gKE1DTEJZVEVTIC0KKwkgICAgICAgICAgICAgICAgICAg
ICAgU0NUUF9NSU5fT1ZFUkhFQUQgLQorCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3Ry
dWN0IHNjdHBfY2h1bmtoZHIpIC0KKwkgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9yZXNldF9vdXRfcmVxdWVzdCkpIC8KKwkgICAgICAgICAgICAgICAgICAg
ICBzaXplb2YodWludDE2X3QpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7
CisJfQorCXNjdHBfYWxsb2NfYV9jaHVuayhzdGNiLCBjaGspOworCWlmIChjaGsgPT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X09VVFBVVCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwljaGstPmNvcHlfYnlf
cmVmID0gMDsKKwljaGstPnJlYy5jaHVua19pZC5pZCA9IFNDVFBfU1RSRUFNX1JFU0VUOworCWNo
ay0+cmVjLmNodW5rX2lkLmNhbl90YWtlX2RhdGEgPSAwOworCWNoay0+ZmxhZ3MgPSAwOworCWNo
ay0+YXNvYyA9ICZzdGNiLT5hc29jOworCWNoay0+Ym9va19zaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2NodW5raGRyKTsKKwljaGstPnNlbmRfc2l6ZSA9IFNDVFBfU0laRTMyKGNoay0+Ym9va19z
aXplKTsKKwljaGstPmJvb2tfc2l6ZV9zY2FsZSA9IDA7CisKKwljaGstPmRhdGEgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2coTUNMQllURVMsIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAo
Y2hrLT5kYXRhID09IE5VTEwpIHsKKwkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQ
X1NPX0xPQ0tFRCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCVND
VFBfQlVGX1JFU1ZfVUYoY2hrLT5kYXRhLCBTQ1RQX01JTl9PVkVSSEVBRCk7CisKKwkvKiBzZXR1
cCBjaHVuayBwYXJhbWV0ZXJzICovCisJY2hrLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9VTlNFTlQ7
CisJY2hrLT5zbmRfY291bnQgPSAwOworCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkgeworCQlj
aGstPndob1RvID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJfSBlbHNlIHsKKwkJY2hrLT53aG9U
byA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwl9CisJYXRvbWljX2FkZF9pbnQo
JmNoay0+d2hvVG8tPnJlZl9jb3VudCwgMSk7CisJY2ggPSBtdG9kKGNoay0+ZGF0YSwgc3RydWN0
IHNjdHBfY2h1bmtoZHIgKik7CisJY2gtPmNodW5rX3R5cGUgPSBTQ1RQX1NUUkVBTV9SRVNFVDsK
KwljaC0+Y2h1bmtfZmxhZ3MgPSAwOworCWNoLT5jaHVua19sZW5ndGggPSBodG9ucyhjaGstPmJv
b2tfc2l6ZSk7CisJU0NUUF9CVUZfTEVOKGNoay0+ZGF0YSkgPSBjaGstPnNlbmRfc2l6ZTsKKwor
CXNlcSA9IHN0Y2ItPmFzb2Muc3RyX3Jlc2V0X3NlcV9vdXQ7CisJaWYgKGNhbl9zZW5kX291dF9y
ZXEpIHsKKwkJaW50IHJldDsKKwkgICAgICAgIHJldCA9IHNjdHBfYWRkX3N0cmVhbV9yZXNldF9v
dXQoc3RjYiwgY2hrLCBzZXEsIChzdGNiLT5hc29jLnN0cl9yZXNldF9zZXFfaW4gLSAxKSwgKHN0
Y2ItPmFzb2Muc2VuZGluZ19zZXEgLSAxKSk7CisJCWlmIChyZXQpIHsKKwkJCXNlcSsrOworCQkJ
YXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKys7CisJCX0KKwl9CisJaWYgKChhZGRfc3Ry
ZWFtICYgMSkgJiYKKwkgICAgKChzdGNiLT5hc29jLnN0cm1fcmVhbG91dHNpemUgLSBzdGNiLT5h
c29jLnN0cmVhbW91dGNudCkgPCBhZGRpbmdfbykpIHsKKwkJLyogTmVlZCB0byBhbGxvY2F0ZSBt
b3JlICovCisJCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm9sZHN0cmVhbTsKKwkJc3RydWN0IHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCAqbnNwOworCQlpbnQgaTsKKyNpZiBkZWZpbmVk
KFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQlpbnQgajsKKyNlbmRpZgorCisJCW9sZHN0cmVh
bSA9IHN0Y2ItPmFzb2Muc3RybW91dDsKKwkJLyogZ2V0IHNvbWUgbW9yZSAqLworCQlTQ1RQX01B
TExPQyhzdGNiLT5hc29jLnN0cm1vdXQsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKiwKKwkJCSAg
ICAoc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQgKyBhZGRpbmdfbykgKiBzaXplb2Yoc3RydWN0IHNj
dHBfc3RyZWFtX291dCksCisJCQkgICAgU0NUUF9NX1NUUk1PKTsKKwkJaWYgKHN0Y2ItPmFzb2Mu
c3RybW91dCA9PSBOVUxMKSB7CisJCQl1aW50OF90IHg7CisJCQlzdGNiLT5hc29jLnN0cm1vdXQg
PSBvbGRzdHJlYW07CisJCQkvKiBUdXJuIG9mZiB0aGUgYml0ICovCisJCQl4ID0gYWRkX3N0cmVh
bSAmIDB4ZmU7CisJCQlhZGRfc3RyZWFtID0geDsKKwkJCWdvdG8gc2tpcF9zdHVmZjsKKwkJfQor
CQkvKiBPayBub3cgd2UgcHJvY2VlZCB3aXRoIGNvcHlpbmcgdGhlIG9sZCBvdXQgc3R1ZmYgYW5k
CisJCSAqIGluaXRpYWxpemluZyB0aGUgbmV3IHN0dWZmLgorCQkgKi8KKwkJU0NUUF9UQ0JfU0VO
RF9MT0NLKHN0Y2IpOworCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2NsZWFyKHN0
Y2IsICZzdGNiLT5hc29jLCAwLCAxKTsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250OyBpKyspIHsKKwkJCVRBSUxRX0lOSVQoJnN0Y2ItPmFzb2Muc3RybW91dFtpXS5v
dXRxdWV1ZSk7CisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uY2h1bmtzX29uX3F1ZXVlcyA9IG9s
ZHN0cmVhbVtpXS5jaHVua3Nfb25fcXVldWVzOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm5l
eHRfbWlkX29yZGVyZWQgPSBvbGRzdHJlYW1baV0ubmV4dF9taWRfb3JkZXJlZDsKKwkJCXN0Y2It
PmFzb2Muc3RybW91dFtpXS5uZXh0X21pZF91bm9yZGVyZWQgPSBvbGRzdHJlYW1baV0ubmV4dF9t
aWRfdW5vcmRlcmVkOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNnX2luY29tcGxl
dGUgPSBvbGRzdHJlYW1baV0ubGFzdF9tc2dfaW5jb21wbGV0ZTsKKwkJCXN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5zaWQgPSBpOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLnN0YXRlID0gb2xkc3Ry
ZWFtW2ldLnN0YXRlOworCQkJLyogRklYIE1FIEZJWCBNRSAqLworCQkJLyogVGhpcyBzaG91bGQg
YmUgYSBTU19DT1BZIG9wZXJhdGlvbiBGSVggTUUgU1RSRUFNIFNDSEVEVUxFUiBFWFBFUlQgKi8K
KwkJCXN0Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdF9zdHJlYW0oc3RjYiwgJnN0
Y2ItPmFzb2Muc3RybW91dFtpXSwgJm9sZHN0cmVhbVtpXSk7CisJCQkvKiBub3cgYW55dGhpbmcg
b24gdGhvc2UgcXVldWVzPyAqLworCQkJVEFJTFFfRk9SRUFDSF9TQUZFKHNwLCAmb2xkc3RyZWFt
W2ldLm91dHF1ZXVlLCBuZXh0LCBuc3ApIHsKKwkJCQlUQUlMUV9SRU1PVkUoJm9sZHN0cmVhbVtp
XS5vdXRxdWV1ZSwgc3AsIG5leHQpOworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29j
LnN0cm1vdXRbaV0ub3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCX0KKworCQl9CisJCS8qIG5vdyB0
aGUgbmV3IHN0cmVhbXMgKi8KKwkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0
KHN0Y2IsICZzdGNiLT5hc29jLCAxKTsKKwkJZm9yIChpID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQ7IGkgPCAoc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQgKyBhZGRpbmdfbyk7IGkrKykgeworCQkJ
VEFJTFFfSU5JVCgmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLm91dHF1ZXVlKTsKKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gMDsKKyNpZiBkZWZpbmVkKFNDVFBfREVU
QUlMRURfU1RSX1NUQVRTKQorCQkJZm9yIChqID0gMDsgaiA8IFNDVFBfUFJfU0NUUF9NQVggKyAx
OyBqKyspIHsKKwkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbal0gPSAw
OworCQkJCXN0Y2ItPmFzb2Muc3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50W2pdID0gMDsKKwkJ
CX0KKyNlbHNlCisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uYWJhbmRvbmVkX3NlbnRbMF0gPSAw
OworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbMF0gPSAwOworI2Vu
ZGlmCisJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfb3JkZXJlZCA9IDA7CisJCQlz
dGNiLT5hc29jLnN0cm1vdXRbaV0ubmV4dF9taWRfdW5vcmRlcmVkID0gMDsKKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5zaWQgPSBpOworCQkJc3RjYi0+YXNvYy5zdHJtb3V0W2ldLmxhc3RfbXNn
X2luY29tcGxldGUgPSAwOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0
X3N0cmVhbShzdGNiLCAmc3RjYi0+YXNvYy5zdHJtb3V0W2ldLCBOVUxMKTsKKwkJCXN0Y2ItPmFz
b2Muc3RybW91dFtpXS5zdGF0ZSA9IFNDVFBfU1RSRUFNX0NMT1NFRDsKKwkJfQorCQlzdGNiLT5h
c29jLnN0cm1fcmVhbG91dHNpemUgPSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCArIGFkZGluZ19v
OworCQlTQ1RQX0ZSRUUob2xkc3RyZWFtLCBTQ1RQX01fU1RSTU8pOworCQlTQ1RQX1RDQl9TRU5E
X1VOTE9DSyhzdGNiKTsKKwl9Citza2lwX3N0dWZmOgorCWlmICgoYWRkX3N0cmVhbSAmIDEpICYm
IChhZGRpbmdfbyA+IDApKSB7CisJCWFzb2MtPnN0cm1fcGVuZGluZ19hZGRfc2l6ZSA9IGFkZGlu
Z19vOworCQlhc29jLT5wZWVyX3JlcV9vdXQgPSBwZWVyX2Fza2VkOworCQlzY3RwX2FkZF9hbl9v
dXRfc3RyZWFtKGNoaywgc2VxLCBhZGRpbmdfbyk7CisJCXNlcSsrOworCQlhc29jLT5zdHJlYW1f
cmVzZXRfb3V0c3RhbmRpbmcrKzsKKwl9CisJaWYgKChhZGRfc3RyZWFtICYgMikgJiYgKGFkZGlu
Z19pID4gMCkpIHsKKwkJc2N0cF9hZGRfYW5faW5fc3RyZWFtKGNoaywgc2VxLCBhZGRpbmdfaSk7
CisJCXNlcSsrOworCQlhc29jLT5zdHJlYW1fcmVzZXRfb3V0c3RhbmRpbmcrKzsKKwl9CisJaWYg
KHNlbmRfaW5fcmVxKSB7CisJCXNjdHBfYWRkX3N0cmVhbV9yZXNldF9pbihjaGssIG51bWJlcl9l
bnRyaWVzLCBsaXN0LCBzZXEpOworCQlzZXErKzsKKwkJYXNvYy0+c3RyZWFtX3Jlc2V0X291dHN0
YW5kaW5nKys7CisJfQorCWlmIChzZW5kX3Rzbl9yZXEpIHsKKwkJc2N0cF9hZGRfc3RyZWFtX3Jl
c2V0X3RzbihjaGssIHNlcSk7CisJCWFzb2MtPnN0cmVhbV9yZXNldF9vdXRzdGFuZGluZysrOwor
CX0KKwlhc29jLT5zdHJfcmVzZXQgPSBjaGs7CisJLyogaW5zZXJ0IHRoZSBjaHVuayBmb3Igc2Vu
ZGluZyAqLworCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5jb250cm9sX3NlbmRfcXVldWUsCisJ
CQkgIGNoaywKKwkJCSAgc2N0cF9uZXh0KTsKKwlhc29jLT5jdHJsX3F1ZXVlX2NudCsrOworCWlm
IChzdGNiLT5hc29jLnNlbmRfc2FjaykgeworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NP
X0xPQ0tFRCk7CisJfQorCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VU
LCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBjaGstPndob1RvKTsKKwlyZXR1cm4gKDApOworfQorCit2
b2lkCitzY3RwX3NlbmRfYWJvcnQoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIHN0cnVjdCBz
b2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICBzdHJ1
Y3Qgc2N0cGhkciAqc2gsIHVpbnQzMl90IHZ0YWcsIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1
aW50MzJfdCBtZmxvd2lkLCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAgICAg
ICB1aW50MzJfdCB2cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJLyogRG9uJ3QgcmVzcG9uZCB0
byBhbiBBQk9SVCB3aXRoIGFuIEFCT1JULiAqLworCWlmIChzY3RwX2lzX3RoZXJlX2FuX2Fib3J0
X2hlcmUobSwgaXBobGVuLCAmdnRhZykpIHsKKwkJaWYgKGNhdXNlKQorCQkJc2N0cF9tX2ZyZWVt
KGNhdXNlKTsKKwkJcmV0dXJuOworCX0KKwlzY3RwX3NlbmRfcmVzcF9tc2coc3JjLCBkc3QsIHNo
LCB2dGFnLCBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OLCBjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCSAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwK
KyNlbmRpZgorCSAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworCXJldHVybjsKK30K
Kwordm9pZAorc2N0cF9zZW5kX29wZXJyX3RvKHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qg
c29ja2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHVp
bnQzMl90IHZ0YWcsIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgbWZsb3d0eXBlLCB1aW50MzJfdCBtZmxvd2lk
LCB1aW50MTZfdCBmaWJudW0sCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2
cmZfaWQsIHVpbnQxNl90IHBvcnQpCit7CisJc2N0cF9zZW5kX3Jlc3BfbXNnKHNyYywgZHN0LCBz
aCwgdnRhZywgU0NUUF9PUEVSQVRJT05fRVJST1IsIGNhdXNlLAorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJICAgICAgICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAor
I2VuZGlmCisJICAgICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJcmV0dXJuOworfQor
CitzdGF0aWMgc3RydWN0IG1idWYgKgorc2N0cF9jb3B5X3Jlc3VtZShzdHJ1Y3QgdWlvICp1aW8s
CisJCSBpbnQgbWF4X3NlbmRfbGVuLAorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+IDYwMjAwMCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkgaW50
IHVzZXJfbWFya3NfZW9yLAorI2VuZGlmCisJCSBpbnQgKmVycm9yLAorCQkgdWludDMyX3QgKnNu
ZG91dCwKKwkJIHN0cnVjdCBtYnVmICoqbmV3X3RhaWwpCit7CisjaWYgZGVmaW5lZChfX1BhbmRh
X18pCisJc3RydWN0IG1idWYgKm07CisKKwltID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywg
bWF4X3NlbmRfbGVuLCAwLAorCQkJKHVzZXJfbWFya3NfZW9yID8gTV9FT1IgOiAwKSk7CisJaWYg
KG0gPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJfSBl
bHNlIHsKKwkJKnNuZG91dCA9IG1fbGVuZ3RoKG0sIE5VTEwpOworCQkqbmV3X3RhaWwgPSBtX2xh
c3QobSk7CisJfQorCXJldHVybiAobSk7CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMCB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc3Ry
dWN0IG1idWYgKm07CisKKwltID0gbV91aW90b21idWYodWlvLCBNX1dBSVRPSywgbWF4X3NlbmRf
bGVuLCAwLAorCQkoTV9QS1RIRFIgfCAodXNlcl9tYXJrc19lb3IgPyBNX0VPUiA6IDApKSk7CisJ
aWYgKG0gPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJ
fSBlbHNlIHsKKwkJKnNuZG91dCA9IG1fbGVuZ3RoKG0sIE5VTEwpOworCQkqbmV3X3RhaWwgPSBt
X2xhc3QobSk7CisJfQorCXJldHVybiAobSk7CisjZWxzZQorCWludCBsZWZ0LCBjYW5jcHksIHdp
bGxjcHk7CisJc3RydWN0IG1idWYgKm0sICpoZWFkOworCisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCWxlZnQgPSAoaW50KW1pbih1aW8tPnVpb19y
ZXNpZCwgbWF4X3NlbmRfbGVuKTsKKyNlbHNlCisJbGVmdCA9IChpbnQpbWluKHVpb19yZXNpZCh1
aW8pLCBtYXhfc2VuZF9sZW4pOworI2VuZGlmCisjZWxzZQorCWxlZnQgPSAoaW50KW1pbih1aW8t
PnVpb19yZXNpZCwgbWF4X3NlbmRfbGVuKTsKKyNlbmRpZgorCS8qIEFsd2F5cyBnZXQgYSBoZWFk
ZXIganVzdCBpbiBjYXNlICovCisJaGVhZCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhsZWZ0LCAw
LCBNX1dBSVRPSywgMCwgTVRfREFUQSk7CisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5P
QlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWNhbmNw
eSA9IChpbnQpTV9UUkFJTElOR1NQQUNFKGhlYWQpOworCXdpbGxjcHkgPSBtaW4oY2FuY3B5LCBs
ZWZ0KTsKKwkqZXJyb3IgPSB1aW9tb3ZlKG10b2QoaGVhZCwgY2FkZHJfdCksIHdpbGxjcHksIHVp
byk7CisJaWYgKCplcnJvcikgeworCQlzY3RwX21fZnJlZW0oaGVhZCk7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCSpzbmRvdXQgKz0gd2lsbGNweTsKKwlsZWZ0IC09IHdpbGxjcHk7CisJU0NUUF9C
VUZfTEVOKGhlYWQpID0gd2lsbGNweTsKKwltID0gaGVhZDsKKwkqbmV3X3RhaWwgPSBoZWFkOwor
CXdoaWxlIChsZWZ0ID4gMCkgeworCQkvKiBtb3ZlIGluIHVzZXIgZGF0YSAqLworCQlTQ1RQX0JV
Rl9ORVhUKG0pID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBN
VF9EQVRBKTsKKwkJaWYgKFNDVFBfQlVGX05FWFQobSkgPT0gTlVMTCkgeworCQkJc2N0cF9tX2Zy
ZWVtKGhlYWQpOworCQkJKm5ld190YWlsID0gTlVMTDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJCSpl
cnJvciA9IEVOT0JVRlM7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCW0gPSBTQ1RQX0JVRl9O
RVhUKG0pOworCQljYW5jcHkgPSAoaW50KU1fVFJBSUxJTkdTUEFDRShtKTsKKwkJd2lsbGNweSA9
IG1pbihjYW5jcHksIGxlZnQpOworCQkqZXJyb3IgPSB1aW9tb3ZlKG10b2QobSwgY2FkZHJfdCks
IHdpbGxjcHksIHVpbyk7CisJCWlmICgqZXJyb3IpIHsKKwkJCXNjdHBfbV9mcmVlbShoZWFkKTsK
KwkJCSpuZXdfdGFpbCA9IE5VTEw7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUZBVUxUKTsKKwkJCSplcnJvciA9IEVGQVVM
VDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJU0NUUF9CVUZfTEVOKG0pID0gd2lsbGNweTsK
KwkJbGVmdCAtPSB3aWxsY3B5OworCQkqc25kb3V0ICs9IHdpbGxjcHk7CisJCSpuZXdfdGFpbCA9
IG07CisJCWlmIChsZWZ0ID09IDApIHsKKwkJCVNDVFBfQlVGX05FWFQobSkgPSBOVUxMOworCQl9
CisJfQorCXJldHVybiAoaGVhZCk7CisjZW5kaWYKK30KKworc3RhdGljIGludAorc2N0cF9jb3B5
X29uZShzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AsCisgICAgICAgICAgICAg
IHN0cnVjdCB1aW8gKnVpbywKKyAgICAgICAgICAgICAgaW50IHJlc3ZfdXBmcm9udCkKK3sKKyNp
ZiBkZWZpbmVkKF9fUGFuZGFfXykKKwlzcC0+ZGF0YSA9IG1fdWlvdG9tYnVmKHVpbywgTV9XQUlU
T0ssIHNwLT5sZW5ndGgsCisJICAgICAgICAgICAgICAgICAgICAgICByZXN2X3VwZnJvbnQsIDAp
OworCWlmIChzcC0+ZGF0YSA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTk9CVUZTKTsKKwkJcmV0dXJuIChF
Tk9CVUZTKTsKKwl9CisKKwlzcC0+dGFpbF9tYnVmID0gbV9sYXN0KHNwLT5kYXRhKTsKKwlyZXR1
cm4gKDApOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
PiA2MDIwMDAgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNwLT5kYXRhID0gbV91aW90b21i
dWYodWlvLCBNX1dBSVRPSywgc3AtPmxlbmd0aCwKKwkgICAgICAgICAgICAgICAgICAgICAgIHJl
c3ZfdXBmcm9udCwgMCk7CisJaWYgKHNwLT5kYXRhID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMp
OworCQlyZXR1cm4gKEVOT0JVRlMpOworCX0KKworCXNwLT50YWlsX21idWYgPSBtX2xhc3Qoc3At
PmRhdGEpOworCXJldHVybiAoMCk7CisjZWxzZQorCWludCBsZWZ0OworCWludCBjYW5jcHksIHdp
bGxjcHksIGVycm9yOworCXN0cnVjdCBtYnVmICptLCAqaGVhZDsKKwlpbnQgY3BzeiA9IDA7CisK
KwkvKiBGaXJzdCBvbmUgZ2V0cyBhIGhlYWRlciAqLworCWxlZnQgPSBzcC0+bGVuZ3RoOworCWhl
YWQgPSBtID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKChsZWZ0ICsgcmVzdl91cGZyb250KSwgMCwg
TV9XQUlUT0ssIDAsIE1UX0RBVEEpOworCWlmIChtID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMp
OworCQlyZXR1cm4gKEVOT0JVRlMpOworCX0KKwkvKi0KKwkgKiBBZGQgdGhpcyBvbmUgZm9yIG0g
aW4gbm93LCB0aGF0IHdheSBpZiB0aGUgYWxsb2MgZmFpbHMgd2Ugd29uJ3QKKwkgKiBoYXZlIGEg
YmFkIGNudC4KKwkgKi8KKwlTQ1RQX0JVRl9SRVNWX1VGKG0sIHJlc3ZfdXBmcm9udCk7CisJY2Fu
Y3B5ID0gKGludClNX1RSQUlMSU5HU1BBQ0UobSk7CisJd2lsbGNweSA9IG1pbihjYW5jcHksIGxl
ZnQpOworCXdoaWxlIChsZWZ0ID4gMCkgeworCQkvKiBtb3ZlIGluIHVzZXIgZGF0YSAqLworCQll
cnJvciA9IHVpb21vdmUobXRvZChtLCBjYWRkcl90KSwgd2lsbGNweSwgdWlvKTsKKwkJaWYgKGVy
cm9yKSB7CisJCQlzY3RwX21fZnJlZW0oaGVhZCk7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQor
CQlTQ1RQX0JVRl9MRU4obSkgPSB3aWxsY3B5OworCQlsZWZ0IC09IHdpbGxjcHk7CisJCWNwc3og
Kz0gd2lsbGNweTsKKwkJaWYgKGxlZnQgPiAwKSB7CisJCQlTQ1RQX0JVRl9ORVhUKG0pID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKGxlZnQsIDAsIE1fV0FJVE9LLCAwLCBNVF9EQVRBKTsKKwkJCWlm
IChTQ1RQX0JVRl9ORVhUKG0pID09IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIHRoZSBoZWFkIGdv
ZXMgYmFjayB0byBjYWxsZXIsIGhlIGNhbiBmcmVlCisJCQkJICogdGhlIHJlc3QKKwkJCQkgKi8K
KwkJCQlzY3RwX21fZnJlZW0oaGVhZCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVOT0JVRlMpOworCQkJCXJldHVybiAo
RU5PQlVGUyk7CisJCQl9CisJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJCWNhbmNweSA9IChp
bnQpTV9UUkFJTElOR1NQQUNFKG0pOworCQkJd2lsbGNweSA9IG1pbihjYW5jcHksIGxlZnQpOwor
CQl9IGVsc2UgeworCQkJc3AtPnRhaWxfbWJ1ZiA9IG07CisJCQlTQ1RQX0JVRl9ORVhUKG0pID0g
TlVMTDsKKwkJfQorCX0KKwlzcC0+ZGF0YSA9IGhlYWQ7CisJc3AtPmxlbmd0aCA9IGNwc3o7CisJ
cmV0dXJuICgwKTsKKyNlbmRpZgorfQorCisKKworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9x
dWV1ZV9wZW5kaW5nICoKK3NjdHBfY29weV9pdF9pbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisg
ICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgc3RydWN0IHNjdHBfc25kcmN2
aW5mbyAqc3JjdiwKKyAgICBzdHJ1Y3QgdWlvICp1aW8sCisgICAgc3RydWN0IHNjdHBfbmV0cyAq
bmV0LAorICAgIGludCBtYXhfc2VuZF9sZW4sCisgICAgaW50IHVzZXJfbWFya3NfZW9yLAorICAg
IGludCAqZXJyb3IpCisKK3sKKwkvKi0KKwkgKiBUaGlzIHJvdXRpbmUgbXVzdCBiZSB2ZXJ5IGNh
cmVmdWwgaW4gaXRzIHdvcmsuIFByb3RvY29sCisJICogcHJvY2Vzc2luZyBpcyB1cCBhbmQgcnVu
bmluZyBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdG8gc3BsLi4uKCkKKwkgKiB3aGVuIHlvdSBuZWVk
IHRvIGRvIHNvbWV0aGluZyB0aGF0IG1heSBlZmZlY3QgdGhlIHN0Y2IvYXNvYy4gVGhlCisJICog
c2IgaXMgbG9ja2VkIGhvd2V2ZXIuIFdoZW4gZGF0YSBpcyBjb3BpZWQgdGhlIHByb3RvY29sIHBy
b2Nlc3NpbmcKKwkgKiBzaG91bGQgYmUgZW5hYmxlZCBzaW5jZSB0aGlzIGlzIGEgc2xvd2VyIG9w
ZXJhdGlvbi4uLgorCSAqLworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCA9
IE5VTEw7CisJaW50IHJlc3ZfaW5fZmlyc3Q7CisKKwkqZXJyb3IgPSAwOworCS8qIE5vdyBjYW4g
d2Ugc2VuZCB0aGlzPyAqLworCWlmICgoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9TRU5UKSB8fAorCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0gU0NUUF9T
VEFURV9TSFVURE9XTl9BQ0tfU0VOVCkgfHwKKwkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09
IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpIHx8CisJICAgIChhc29jLT5zdGF0ZSAmIFND
VFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJLyogZ290IGRhdGEgd2hpbGUgc2h1dHRp
bmcgZG93biAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5SRVNFVCk7CisJCSplcnJvciA9IEVDT05OUkVTRVQ7CisJ
CWdvdG8gb3V0X25vdzsKKwl9CisJc2N0cF9hbGxvY19hX3N0cm1vcShzdGNiLCBzcCk7CisJaWYg
KHNwID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBuZXQsIFND
VFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJKmVycm9yID0gRU5PTUVNOworCQlnb3Rv
IG91dF9ub3c7CisJfQorCXNwLT5hY3RfZmxhZ3MgPSAwOworCXNwLT5zZW5kZXJfYWxsX2RvbmUg
PSAwOworCXNwLT5zaW5mb19mbGFncyA9IHNyY3YtPnNpbmZvX2ZsYWdzOworCXNwLT50aW1ldG9s
aXZlID0gc3Jjdi0+c2luZm9fdGltZXRvbGl2ZTsKKwlzcC0+cHBpZCA9IHNyY3YtPnNpbmZvX3Bw
aWQ7CisJc3AtPmNvbnRleHQgPSBzcmN2LT5zaW5mb19jb250ZXh0OworCXNwLT5mc24gPSAwOwor
CSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzcC0+dHMpOworCisJc3AtPnNpZCA9IHNyY3Yt
PnNpbmZvX3N0cmVhbTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExF
X0xFT1BBUkQpCisJc3AtPmxlbmd0aCA9ICh1aW50MzJfdCltaW4odWlvLT51aW9fcmVzaWQsIG1h
eF9zZW5kX2xlbik7CisjZWxzZQorCXNwLT5sZW5ndGggPSAodWludDMyX3QpbWluKHVpb19yZXNp
ZCh1aW8pLCBtYXhfc2VuZF9sZW4pOworI2VuZGlmCisjZWxzZQorCXNwLT5sZW5ndGggPSAodWlu
dDMyX3QpbWluKHVpby0+dWlvX3Jlc2lkLCBtYXhfc2VuZF9sZW4pOworI2VuZGlmCisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCWlmICgoc3AtPmxl
bmd0aCA9PSAodWludDMyX3QpdWlvLT51aW9fcmVzaWQpICYmCisjZWxzZQorCWlmICgoc3AtPmxl
bmd0aCA9PSAodWludDMyX3QpdWlvX3Jlc2lkKHVpbykpICYmCisjZW5kaWYKKyNlbHNlCisJaWYg
KChzcC0+bGVuZ3RoID09ICh1aW50MzJfdCl1aW8tPnVpb19yZXNpZCkgJiYKKyNlbmRpZgorCSAg
ICAoKHVzZXJfbWFya3NfZW9yID09IDApIHx8CisJICAgICAoc3Jjdi0+c2luZm9fZmxhZ3MgJiBT
Q1RQX0VPRikgfHwKKwkgICAgICh1c2VyX21hcmtzX2VvciAmJiAoc3Jjdi0+c2luZm9fZmxhZ3Mg
JiBTQ1RQX0VPUikpKSkgeworCQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMTsKKwl9IGVsc2Ugewor
CQlzcC0+bXNnX2lzX2NvbXBsZXRlID0gMDsKKwl9CisJc3AtPnNlbmRlcl9hbGxfZG9uZSA9IDA7
CisJc3AtPnNvbWVfdGFrZW4gPSAwOworCXNwLT5wdXRfbGFzdF9vdXQgPSAwOworCXJlc3ZfaW5f
Zmlyc3QgPSBTQ1RQX0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYik7CisJc3AtPmRhdGEgPSBzcC0+
dGFpbF9tYnVmID0gTlVMTDsKKwlpZiAoc3AtPmxlbmd0aCA9PSAwKSB7CisJCWdvdG8gc2tpcF9j
b3B5OworCX0KKwlpZiAoc3Jjdi0+c2luZm9fa2V5bnVtYmVyX3ZhbGlkKSB7CisJCXNwLT5hdXRo
X2tleWlkID0gc3Jjdi0+c2luZm9fa2V5bnVtYmVyOworCX0gZWxzZSB7CisJCXNwLT5hdXRoX2tl
eWlkID0gc3RjYi0+YXNvYy5hdXRoaW5mby5hY3RpdmVfa2V5aWQ7CisJfQorCWlmIChzY3RwX2F1
dGhfaXNfcmVxdWlyZWRfY2h1bmsoU0NUUF9EQVRBLCBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVu
a3MpKSB7CisJCXNjdHBfYXV0aF9rZXlfYWNxdWlyZShzdGNiLCBzcC0+YXV0aF9rZXlpZCk7CisJ
CXNwLT5ob2xkc19rZXlfcmVmID0gMTsKKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NU
UF9TT0NLRVRfVU5MT0NLKFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApLCAwKTsKKyNlbmRpZgor
CSplcnJvciA9IHNjdHBfY29weV9vbmUoc3AsIHVpbywgcmVzdl9pbl9maXJzdCk7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJU0NUUF9TT0NLRVRfTE9DSyhTQ1RQX0lOUF9TTyhzdGNiLT5zY3Rw
X2VwKSwgMCk7CisjZW5kaWYKKyBza2lwX2NvcHk6CisJaWYgKCplcnJvcikgeworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKyNlbmRpZgorCQlzY3Rw
X2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIFNDVFBfU09fTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyNlbmRpZgorCQlzcCA9IE5V
TEw7CisJfSBlbHNlIHsKKwkJaWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfQUREUl9PVkVSKSB7
CisJCQlzcC0+bmV0ID0gbmV0OworCQkJYXRvbWljX2FkZF9pbnQoJnNwLT5uZXQtPnJlZl9jb3Vu
dCwgMSk7CisJCX0gZWxzZSB7CisJCQlzcC0+bmV0ID0gTlVMTDsKKwkJfQorCQlzY3RwX3NldF9w
cnNjdHBfcG9saWN5KHNwKTsKKwl9CitvdXRfbm93OgorCXJldHVybiAoc3ApOworfQorCisKK2lu
dAorc2N0cF9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICBzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsCisgICAgICAgICAgICBzdHJ1Y3QgdWlvICp1aW8sCisjaWZkZWYgX19QYW5k
YV9fCisgICAgICAgICAgICBwYWtoYW5kbGVfdHlwZSB0b3AsCisgICAgICAgICAgICBwYWtoYW5k
bGVfdHlwZSBpY29udHJvbCwKKyNlbHNlCisgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLAor
ICAgICAgICAgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykgfHwgZGVmaW5lZChfX1BhbmRhX18pCisgICAgICAgICAgICBpbnQgZmxhZ3MKKyNl
bHNlCisgICAgICAgICAgICBpbnQgZmxhZ3MsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisgICAgICAgICAgICBzdHJ1Y3QgdGhyZWFkICpw
CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorICAgICAgICAgICAgUEtUSFJFQUQgcAorI2Vs
c2UKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgICAgICAvKgorCSAgICAgKiBw
cm9jIGlzIGEgZHVtbXkgaW4gX19Vc2Vyc3BhY2VfXyBhbmQgd2lsbCBub3QgYmUgcGFzc2VkCisJ
ICAgICAqIHRvIHNjdHBfbG93ZXJfc29zZW5kCisJICAgICAqLworI2VuZGlmCisgICAgICAgICAg
ICBzdHJ1Y3QgcHJvYyAqcAorI2VuZGlmCisjZW5kaWYKKykKK3sKKyNpZmRlZiBfX1BhbmRhX18K
KwlzdHJ1Y3QgbWJ1ZiAqY29udHJvbCA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKKwlzdHJ1Y3QgcHJvYyAqcCA9IGN1cnJlbnRfcHJvYygpOworI2VuZGlmCisJaW50IGVy
cm9yLCB1c2Vfc25kaW5mbyA9IDA7CisJc3RydWN0IHNjdHBfc25kcmN2aW5mbyBzbmRyY3ZuaW5m
bzsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJfdG9fdXNlOworI2lmIGRlZmluZWQoSU5FVCkgJiYg
ZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2VuZGlmCisKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKyNlbmRpZgorI2lm
ZGVmIF9fUGFuZGFfXworCWNvbnRyb2wgPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpY29udHJvbCk7
CisjZW5kaWYKKwlpZiAoY29udHJvbCkgeworCQkvKiBwcm9jZXNzIGNtc2cgc25kL3JjdiBpbmZv
IChtYXliZSBhIGFzc29jLWlkKSAqLworCQlpZiAoc2N0cF9maW5kX2Ntc2coU0NUUF9TTkRSQ1Ys
ICh2b2lkICopJnNuZHJjdm5pbmZvLCBjb250cm9sLAorCQkgICAgc2l6ZW9mKHNuZHJjdm5pbmZv
KSkpIHsKKwkJCS8qIGdvdCBvbmUgKi8KKwkJCXVzZV9zbmRpbmZvID0gMTsKKwkJfQorCX0KKwlh
ZGRyX3RvX3VzZSA9IGFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQor
CWlmICgoYWRkcikgJiYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikpIHsKKwkJc3RydWN0
IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilh
ZGRyOworCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJ
CWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjYpOworCQkJYWRkcl90b191c2UgPSAoc3RydWN0IHNv
Y2thZGRyICopJnNpbjsKKwkJfQorCX0KKyNlbmRpZgorCWVycm9yID0gc2N0cF9sb3dlcl9zb3Nl
bmQoc28sIGFkZHJfdG9fdXNlLCB1aW8sIHRvcCwKKyNpZmRlZiBfX1BhbmRhX18KKwkJCQkgIGlj
b250cm9sLAorI2Vsc2UKKwkJCQkgIGNvbnRyb2wsCisjZW5kaWYKKwkJCQkgIGZsYWdzLAorCQkJ
CSAgdXNlX3NuZGluZm8gPyAmc25kcmN2bmluZm86IE5VTEwKKyNpZiAhKGRlZmluZWQoX19QYW5k
YV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQkJCSAgLCBwCisjZW5kaWYKKwkJKTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2Vu
ZGlmCisJcmV0dXJuIChlcnJvcik7Cit9CisKKworaW50CitzY3RwX2xvd2VyX3Nvc2VuZChzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwK
KyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1aW8gKnVpbywKKyNpZmRlZiBfX1BhbmRhX18KKyAg
ICAgICAgICAgICAgICAgIHBha2hhbmRsZV90eXBlIGlfcGFrLAorICAgICAgICAgICAgICAgICAg
cGFraGFuZGxlX3R5cGUgaV9jb250cm9sLAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHN0cnVj
dCBtYnVmICppX3BhaywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjb250cm9sLAor
I2VuZGlmCisgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzcmN2CisjaWYgIShkZWZpbmVkKCBfX1BhbmRhX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisgICAgICAgICAgICAgICAgICAsCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisgICAgICAgICAg
ICAgICAgICBzdHJ1Y3QgdGhyZWFkICpwCisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorICAg
ICAgICAgICAgICAgICAgUEtUSFJFQUQgcAorI2Vsc2UKKyAgICAgICAgICAgICAgICAgIHN0cnVj
dCBwcm9jICpwCisjZW5kaWYKKyNlbmRpZgorCSkKK3sKKwl1bnNpZ25lZCBpbnQgc25kbGVuID0g
MCwgbWF4X2xlbjsKKwlpbnQgZXJyb3IsIGxlbjsKKwlzdHJ1Y3QgbWJ1ZiAqdG9wID0gTlVMTDsK
KyNpZmRlZiBfX1BhbmRhX18KKwlzdHJ1Y3QgbWJ1ZiAqY29udHJvbCA9IE5VTEw7CisjZW5kaWYK
KwlpbnQgcXVldWVfb25seSA9IDAsIHF1ZXVlX29ubHlfZm9yX2luaXQgPSAwOworCWludCBmcmVl
X2NudF9hcHBsaWVkID0gMDsKKwlpbnQgdW5fc2VudDsKKwlpbnQgbm93X2ZpbGxlZCA9IDA7CisJ
dW5zaWduZWQgaW50IGlucXVldWVfYnl0ZXMgPSAwOworCXN0cnVjdCBzY3RwX2Jsb2NrX2VudHJ5
IGJlOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0g
TlVMTDsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX2lucGNiICp0X2lucDsK
KwlpbnQgdXNlcl9tYXJrc19lb3I7CisJaW50IGNyZWF0ZV9sb2NrX2FwcGxpZWQgPSAwOworCWlu
dCBuYWdsZV9hcHBsaWVzID0gMDsKKwlpbnQgc29tZV9vbl9jb250cm9sID0gMDsKKwlpbnQgZ290
X2FsbF9vZl90aGVfc2VuZCA9IDA7CisJaW50IGhvbGRfdGNibG9jayA9IDA7CisJaW50IG5vbl9i
bG9ja2luZyA9IDA7CisJdWludDMyX3QgbG9jYWxfYWRkX21vcmUsIGxvY2FsX3NvcmVzdiA9IDA7
CisJdWludDE2X3QgcG9ydDsKKwl1aW50MTZfdCBzaW5mb19mbGFnczsKKwlzY3RwX2Fzc29jX3Qg
c2luZm9fYXNzb2NfaWQ7CisKKwllcnJvciA9IDA7CisJbmV0ID0gTlVMTDsKKwlzdGNiID0gTlVM
TDsKKwlhc29jID0gTlVMTDsKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBfbG9ja19h
c3NlcnQoc28pOworI2VuZGlmCisJdF9pbnAgPSBpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5V
TEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlOVkFMKTsKKwkJZXJyb3Ig
PSBFSU5WQUw7CisJCWlmIChpX3BhaykgeworCQkJU0NUUF9SRUxFQVNFX1BLVChpX3Bhayk7CisJ
CX0KKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlmICgodWlvID09IE5VTEwpICYmIChpX3BhayA9
PSBOVUxMKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJdXNlcl9t
YXJrc19lb3IgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJ
VF9FT1IpOworCWF0b21pY19hZGRfaW50KCZpbnAtPnRvdGFsX3NlbmRzLCAxKTsKKwlpZiAodWlv
KSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQor
CQlpZiAodWlvLT51aW9fcmVzaWQgPCAwKSB7CisjZWxzZQorCQlpZiAodWlvX3Jlc2lkKHVpbykg
PCAwKSB7CisjZW5kaWYKKyNlbHNlCisJCWlmICh1aW8tPnVpb19yZXNpZCA8IDApIHsKKyNlbmRp
ZgorCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlzbmRsZW4gPSAodW5zaWdu
ZWQgaW50KXVpby0+dWlvX3Jlc2lkOworI2Vsc2UKKwkJc25kbGVuID0gKHVuc2lnbmVkIGludCl1
aW9fcmVzaWQodWlvKTsKKyNlbmRpZgorI2Vsc2UKKwkJc25kbGVuID0gKHVuc2lnbmVkIGludCl1
aW8tPnVpb19yZXNpZDsKKyNlbmRpZgorCX0gZWxzZSB7CisJCXRvcCA9IFNDVFBfSEVBREVSX1RP
X0NIQUlOKGlfcGFrKTsKKyNpZmRlZiBfX1BhbmRhX18KKwkJLyotCisJCSAqIGFwcCBsZW4gaW5k
aWNhdGVzIHRoZSBkYXRhbGVuLCBkZ3NpemUgZm9yIGNhc2VzCisJCSAqIG9mIFNDVFBfRU9GL0FC
T1JUIHdpbGwgbm90IGhhdmUgdGhlIHJpZ2h0IGxlbgorCQkgKi8KKwkJc25kbGVuID0gU0NUUF9B
UFBfREFUQV9MRU4oaV9wYWspOworCQkvKi0KKwkJICogU2V0IHRoZSBwYXJ0aWNsZSBsZW4gYWxz
byB0byB6ZXJvIHRvIG1hdGNoCisJCSAqIHVwIHdpdGggYXBwIGxlbi4gV2Ugb25seSBoYXZlIG9u
ZSBwYXJ0aWNsZQorCQkgKiBpZiBhcHAgbGVuIGlzIHplcm8gZm9yIFBhbmRhLiBUaGlzIGlzIGVu
c3VyZWQKKwkJICogaW4gdGhlIHNvY2tldCBsaWIKKwkJICovCisJCWlmIChzbmRsZW4gPT0gMCkg
eworCQkJU0NUUF9CVUZfTEVOKHRvcCkgID0gMDsKKwkJfQorCQkvKi0KKwkJICogV2UgZGVsaW5r
IHRoZSBjaGFpbiBmcm9tIGhlYWRlciwgYnV0IGtlZXAKKwkJICogdGhlIGhlYWRlciBhcm91bmQg
YXMgd2Ugd2lsbCBuZWVkIGl0IGluCisJCSAqIEVBR0FJTiBjYXNlCisJCSAqLworCQlTQ1RQX0RF
VEFDSF9IRUFERVJfRlJPTV9DSEFJTihpX3Bhayk7CisjZWxzZQorCQlzbmRsZW4gPSBTQ1RQX0hF
QURFUl9MRU4oaV9wYWspOworI2VuZGlmCisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQx
LCAiU2VuZCBjYWxsZWQgYWRkcjolcCBzZW5kIGxlbmd0aCAlZFxuIiwKKwkJKHZvaWQgKilhZGRy
LAorCSAgICAgICAgc25kbGVuKTsKKyNpZmRlZiBfX1BhbmRhX18KKwlpZiAoaV9jb250cm9sKSB7
CisJCWNvbnRyb2wgPSBTQ1RQX0hFQURFUl9UT19DSEFJTihpX2NvbnRyb2wpOworCX0KKyNlbmRp
ZgorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkg
ICAgU0NUUF9JU19MSVNURU5JTkcoaW5wKSkgeworCQkvKiBUaGUgbGlzdGVuZXIgY2FuIE5PVCBz
ZW5kICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFTk9UQ09OTik7CisJCWVycm9yID0gRU5PVENPTk47CisJCWdvdG8gb3V0
X3VubG9ja2VkOworCX0KKwkvKioKKwkgKiBQcmUtc2NyZWVuIGFkZHJlc3MsIGlmIG9uZSBpcyBn
aXZlbiB0aGUgc2luLWxlbgorCSAqIG11c3QgYmUgc2V0IGNvcnJlY3RseSEKKwkgKi8KKwlpZiAo
YWRkcikgeworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSAqcmFkZHIgPSAodW5pb24gc2N0cF9zb2Nr
c3RvcmUgKilhZGRyOworCQlzd2l0Y2ggKHJhZGRyLT5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCWlmIChyYWRkci0+
c2luLnNpbl9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZB
TCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQl9Cisj
ZW5kaWYKKwkJCXBvcnQgPSByYWRkci0+c2luLnNpbl9wb3J0OworCQkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJ
CWlmIChyYWRkci0+c2luNi5zaW42X2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
IHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NU
UF9PVVRQVVQsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfdW5s
b2NrZWQ7CisJCQl9CisjZW5kaWYKKwkJCXBvcnQgPSByYWRkci0+c2luNi5zaW42X3BvcnQ7CisJ
CQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9D
T05OOgorI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJCQlpZiAocmFkZHItPnNjb25uLnNjb25uX2xl
biAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJfQorI2VuZGlmCisJ
CQlwb3J0ID0gcmFkZHItPnNjb25uLnNjb25uX3BvcnQ7CisJCQlicmVhazsKKyNlbmRpZgorCQlk
ZWZhdWx0OgorCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9N
X1NDVFBfT1VUUFVULCBFQUZOT1NVUFBPUlQpOworCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJ
CQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfQorCX0gZWxzZQorCQlwb3J0ID0gMDsKKworCWlmIChz
cmN2KSB7CisJCXNpbmZvX2ZsYWdzID0gc3Jjdi0+c2luZm9fZmxhZ3M7CisJCXNpbmZvX2Fzc29j
X2lkID0gc3Jjdi0+c2luZm9fYXNzb2NfaWQ7CisJCWlmIChJTlZBTElEX1NJTkZPX0ZMQUcoc2lu
Zm9fZmxhZ3MpIHx8CisJCSAgICBQUl9TQ1RQX0lOVkFMSURfUE9MSUNZKHNpbmZvX2ZsYWdzKSkg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBf
T1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF91bmxvY2tl
ZDsKKwkJfQorCQlpZiAoc3Jjdi0+c2luZm9fZmxhZ3MpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kc193aXRoX2ZsYWdzKTsKKwl9IGVsc2UgeworCQlzaW5mb19mbGFncyA9IGlucC0+ZGVm
X3NlbmQuc2luZm9fZmxhZ3M7CisJCXNpbmZvX2Fzc29jX2lkID0gaW5wLT5kZWZfc2VuZC5zaW5m
b19hc3NvY19pZDsKKwl9CisJaWYgKHNpbmZvX2ZsYWdzICYgU0NUUF9TRU5EQUxMKSB7CisJCS8q
IGl0cyBhIHNlbmRhbGwgKi8KKwkJZXJyb3IgPSBzY3RwX3NlbmRhbGwoaW5wLCB1aW8sIHRvcCwg
c3Jjdik7CisJCXRvcCA9IE5VTEw7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwlpZiAoKHNp
bmZvX2ZsYWdzICYgU0NUUF9BRERSX09WRVIpICYmIChhZGRyID09IE5VTEwpKSB7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUlO
VkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X3VubG9ja2VkOworCX0KKwkvKiBu
b3cgd2UgbXVzdCBmaW5kIHRoZSBhc3NvYyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJc3RjYiA9
IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOworCQlpZiAoc3RjYikgeworCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWhvbGRfdGNibG9jayA9IDE7CisJCX0KKwkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCX0gZWxzZSBpZiAoc2luZm9fYXNzb2NfaWQpIHsKKwkJc3RjYiA9IHNj
dHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIHNpbmZvX2Fzc29jX2lkLCAxKTsKKwkJ
aWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCX0gZWxzZSBp
ZiAoYWRkcikgeworCQkvKi0KKwkJICogU2luY2Ugd2UgZGlkIG5vdCB1c2UgZmluZGVwIHdlIG11
c3QKKwkJICogaW5jcmVtZW50IGl0LCBhbmQgaWYgd2UgZG9uJ3QgZmluZCBhIHRjYgorCQkgKiBk
ZWNyZW1lbnQgaXQuCisJCSAqLworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZ0X2lucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJ
CWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQlTQ1RQX0lO
UF9ERUNSX1JFRihpbnApOworCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQl9IGVsc2Ugewor
CQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCX0KKwlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGFk
ZHIpKSB7CisJCS8qIFBvc3NpYmxlIGltcGxpY2l0IHNlbmQ/ICovCisJCVNDVFBfQVNPQ19DUkVB
VEVfTE9DSyhpbnApOworCQljcmVhdGVfbG9ja19hcHBsaWVkID0gMTsKKwkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKKwkJCS8qIFNob3Vs
ZCBJIHJlYWxseSB1bmxvY2sgPyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZB
TDsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOworCisJCX0KKwkJaWYgKCgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApICYmCisJCSAgICAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQ2KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5l
dCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQlnb3RvIG91dF91bmxvY2tlZDsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQ
X0lOUF9JTkNSX1JFRihpbnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCS8qIFdpdGgg
dGhlIGxvY2sgYXBwbGllZCBsb29rIGFnYWluICovCisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hZGRyKCZ0X2lucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCWlmICgoc3Rj
YiA9PSBOVUxMKSAmJiAoY29udHJvbCAhPSBOVUxMKSAmJiAocG9ydCA+IDApKSB7CisJCQlzdGNi
ID0gc2N0cF9maW5kYXNzb2NpYXRpb25fY21zZ3MoJnRfaW5wLCBwb3J0LCBjb250cm9sLCAmbmV0
LCAmZXJyb3IpOworCQl9CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NL
KGlucCk7CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCQl9IGVsc2UgeworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCQlpZiAoZXJyb3Ip
IHsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOworCQl9CisJCWlmICh0X2lucCAhPSBpbnApIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBV
VCwgRU5PVENPTk4pOworCQkJZXJyb3IgPSBFTk9UQ09OTjsKKwkJCWdvdG8gb3V0X3VubG9ja2Vk
OworCQl9CisJfQorCWlmIChzdGNiID09IE5VTEwpIHsKKwkJaWYgKGFkZHIgPT0gTlVMTCkgewor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VU
UFVULCBFTk9FTlQpOworCQkJZXJyb3IgPSBFTk9FTlQ7CisJCQlnb3RvIG91dF91bmxvY2tlZDsK
KwkJfSBlbHNlIHsKKwkJCS8qIFdlIG11c3QgZ28gYWhlYWQgYW5kIHN0YXJ0IHRoZSBJTklUIHBy
b2Nlc3MgKi8KKwkJCXVpbnQzMl90IHZyZl9pZDsKKworCQkJaWYgKChzaW5mb19mbGFncyAmIFND
VFBfQUJPUlQpIHx8CisJCQkgICAgKChzaW5mb19mbGFncyAmIFNDVFBfRU9GKSAmJiAoc25kbGVu
ID09IDApKSkgeworCQkJCS8qLQorCQkJCSAqIFVzZXIgYXNrcyB0byBhYm9ydCBhIG5vbi1leGlz
dGFudCBhc3NvYywKKwkJCQkgKiBvciBFT0YgYSBub24tZXhpc3RhbnQgYXNzb2Mgd2l0aCBubyBk
YXRhCisJCQkJICovCisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFTk9FTlQpOworCQkJCWVycm9yID0gRU5PRU5UOworCQkJCWdv
dG8gb3V0X3VubG9ja2VkOworCQkJfQorCQkJLyogZ2V0IGFuIGFzb2Mvc3RjYiBzdHJ1Y3QgKi8K
KwkJCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlpZiAo
Y3JlYXRlX2xvY2tfYXBwbGllZCA9PSAwKSB7CisJCQkJcGFuaWMoIkVycm9yLCBzaG91bGQgaG9s
ZCBjcmVhdGUgbG9jayBhbmQgSSBkb24ndD8iKTsKKwkJCX0KKyNlbmRpZgorCQkJc3RjYiA9IHNj
dHBfYWxvY19hc3NvYyhpbnAsIGFkZHIsICZlcnJvciwgMCwgdnJmX2lkLAorCQkJICAgICAgICAg
ICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50LAorCQkJICAg
ICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucG9ydCwKKyNpZiAhKGRlZmluZWQoIF9f
UGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJCSAgICAgICAgICAgICAgICAg
ICAgICAgcCk7CisjZWxzZQorCQkJICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHByb2Mg
KilOVUxMKTsKKyNlbmRpZgorCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCS8qIEVycm9yIGlz
IHNldHVwIGZvciB1cyBpbiB0aGUgY2FsbCAqLworCQkJCWdvdG8gb3V0X3VubG9ja2VkOworCQkJ
fQorCQkJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BU
WVBFKSB7CisJCQkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19D
T05ORUNURUQ7CisJCQkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUg
ZGF0YSAqLworCQkJCXNvaXNjb25uZWN0aW5nKHNvKTsKKwkJCX0KKwkJCWhvbGRfdGNibG9jayA9
IDE7CisJCQlpZiAoY3JlYXRlX2xvY2tfYXBwbGllZCkgeworCQkJCVNDVFBfQVNPQ19DUkVBVEVf
VU5MT0NLKGlucCk7CisJCQkJY3JlYXRlX2xvY2tfYXBwbGllZCA9IDA7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfUFJJTlRGKCJIdWgtMz8gY3JlYXRlIGxvY2sgc2hvdWxkIGhhdmUgYmVlbiBvbj8/
XG4iKTsKKwkJCX0KKwkJCS8qIFR1cm4gb24gcXVldWUgb25seSBmbGFnIHRvIHByZXZlbnQgZGF0
YSBmcm9tIGJlaW5nIHNlbnQgKi8KKwkJCXF1ZXVlX29ubHkgPSAxOworCQkJYXNvYyA9ICZzdGNi
LT5hc29jOworCQkJU0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7
CisJCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+dGltZV9lbnRlcmVkKTsKKwor
CQkJLyogaW5pdGlhbGl6ZSBhdXRoZW50aWNhdGlvbiBwYXJhbXMgZm9yIHRoZSBhc3NvYyAqLwor
CQkJc2N0cF9pbml0aWFsaXplX2F1dGhfcGFyYW1zKGlucCwgc3RjYik7CisKKwkJCWlmIChjb250
cm9sKSB7CisJCQkJaWYgKHNjdHBfcHJvY2Vzc19jbXNnc19mb3JfaW5pdChzdGNiLCBjb250cm9s
LCAmZXJyb3IpKSB7CisJCQkJCXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfUENCRlJF
RV9GT1JDRSwKKwkJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCArIFND
VFBfTE9DXzUpOworCQkJCQlob2xkX3RjYmxvY2sgPSAwOworCQkJCQlzdGNiID0gTlVMTDsKKwkJ
CQkJZ290byBvdXRfdW5sb2NrZWQ7CisJCQkJfQorCQkJfQorCQkJLyogb3V0IHdpdGggdGhlIElO
SVQgKi8KKwkJCXF1ZXVlX29ubHlfZm9yX2luaXQgPSAxOworCQkJLyotCisJCQkgKiB3ZSBtYXkg
d2FudCB0byBkaWcgaW4gYWZ0ZXIgdGhpcyBjYWxsIGFuZCBhZGp1c3QgdGhlIE1UVQorCQkJICog
dmFsdWUuIEl0IGRlZmF1bHRlZCB0byAxNTAwIChjb25zdGFudCkgYnV0IHRoZSBybworCQkJICog
c3RydWN0dXJlIG1heSBub3cgaGF2ZSBhbiB1cGRhdGUgYW5kIHRodXMgd2UgbWF5IG5lZWQgdG8K
KwkJCSAqIGNoYW5nZSBpdCBCRUZPUkUgd2UgYXBwZW5kIHRoZSBtZXNzYWdlLgorCQkJICovCisJ
CX0KKwl9IGVsc2UKKwkJYXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChzcmN2ID09IE5VTEwpCisJ
CXNyY3YgPSAoc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqKSZhc29jLT5kZWZfc2VuZDsKKwlpZiAo
c3Jjdi0+c2luZm9fZmxhZ3MgJiBTQ1RQX0FERFJfT1ZFUikgeworCQlpZiAoYWRkcikKKwkJCW5l
dCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJZWxzZQorCQkJbmV0ID0gTlVMTDsKKwkJ
aWYgKChuZXQgPT0gTlVMTCkgfHwKKwkJICAgICgocG9ydCAhPSAwKSAmJiAocG9ydCAhPSBzdGNi
LT5ycG9ydCkpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8g
b3V0X3VubG9ja2VkOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRl
KSB7CisJCQluZXQgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJfSBlbHNlIHsKKwkJCW5ldCA9
IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJfQorCX0KKwlhdG9taWNfYWRkX2lu
dCgmc3RjYi0+dG90YWxfc2VuZHMsIDEpOworCS8qIEtlZXAgdGhlIHN0Y2IgZnJvbSBiZWluZyBm
cmVlZCB1bmRlciBvdXIgZmVldCAqLworCWF0b21pY19hZGRfaW50KCZhc29jLT5yZWZjbnQsIDEp
OworCWZyZWVfY250X2FwcGxpZWQgPSAxOworCisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX05PX0ZSQUdNRU5UKSkgeworCQlpZiAoc25kbGVuID4gYXNvYy0+c21h
bGxlc3RfbXR1KSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQ
X0ZST01fU0NUUF9PVVRQVVQsIEVNU0dTSVpFKTsKKwkJCWVycm9yID0gRU1TR1NJWkU7CisJCQln
b3RvIG91dF91bmxvY2tlZDsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
aWYgKGlucC0+cmVjdl9jYWxsYmFjaykgeworCQlub25fYmxvY2tpbmcgPSAxOworCX0KKyNlbmRp
ZgorCWlmIChTQ1RQX1NPX0lTX05CSU8oc28pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisJICAgICB8fCAoZmxhZ3MgJiBNU0dfTkJJTykK
KyNlbmRpZgorCSAgICApIHsKKwkJbm9uX2Jsb2NraW5nID0gMTsKKwl9CisJLyogd291bGQgd2Ug
YmxvY2s/ICovCisJaWYgKG5vbl9ibG9ja2luZykgeworCQl1aW50MzJfdCBhbW91bnQ7CisKKwkJ
aWYgKGhvbGRfdGNibG9jayA9PSAwKSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJaG9s
ZF90Y2Jsb2NrID0gMTsKKwkJfQorCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQ
X0RBVEFfQ0hVTktfT1ZFUkhFQUQoc3RjYikpOworCQlpZiAodXNlcl9tYXJrc19lb3IgPT0gMCkg
eworCQkJYW1vdW50ID0gc25kbGVuOworCQl9IGVsc2UgeworCQkJYW1vdW50ID0gMTsKKwkJfQor
CQlpZiAoKFNDVFBfU0JfTElNSVRfU05EKHNvKSA8ICAoYW1vdW50ICsgaW5xdWV1ZV9ieXRlcyAr
IHN0Y2ItPmFzb2Muc2Jfc2VuZF9yZXN2KSkgfHwKKwkJICAgIChzdGNiLT5hc29jLmNodW5rc19v
bl9vdXRfcXVldWUgPj0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUp
KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1ND
VFBfT1VUUFVULCBFV09VTERCTE9DSyk7CisJCQlpZiAoc25kbGVuID4gU0NUUF9TQl9MSU1JVF9T
TkQoc28pKQorCQkJCWVycm9yID0gRU1TR1NJWkU7CisJCQllbHNlCisJCQkJZXJyb3IgPSBFV09V
TERCTE9DSzsKKwkJCWdvdG8gb3V0X3VubG9ja2VkOworCQl9CisJCXN0Y2ItPmFzb2Muc2Jfc2Vu
ZF9yZXN2ICs9IHNuZGxlbjsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlob2xkX3RjYmxv
Y2sgPSAwOworCX0gZWxzZSB7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnNiX3NlbmRf
cmVzdiwgc25kbGVuKTsKKwl9CisJbG9jYWxfc29yZXN2ID0gc25kbGVuOworCWlmIChzdGNiLT5h
c29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRUNPTk5S
RVNFVCk7CisJCWVycm9yID0gRUNPTk5SRVNFVDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQor
CWlmIChjcmVhdGVfbG9ja19hcHBsaWVkKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlu
cCk7CisJCWNyZWF0ZV9sb2NrX2FwcGxpZWQgPSAwOworCX0KKwkvKiBJcyB0aGUgc3RyZWFtIG5v
LiB2YWxpZD8gKi8KKwlpZiAoc3Jjdi0+c2luZm9fc3RyZWFtID49IGFzb2MtPnN0cmVhbW91dGNu
dCkgeworCQkvKiBJbnZhbGlkIHN0cmVhbSBudW1iZXIgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQllcnJv
ciA9IEVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQorCWlmICgoYXNvYy0+c3RybW91
dFtzcmN2LT5zaW5mb19zdHJlYW1dLnN0YXRlICE9IFNDVFBfU1RSRUFNX09QRU4pICYmCisJICAg
IChhc29jLT5zdHJtb3V0W3NyY3YtPnNpbmZvX3N0cmVhbV0uc3RhdGUgIT0gU0NUUF9TVFJFQU1f
T1BFTklORykpIHsKKwkJLyoKKwkJICogQ2FuJ3QgcXVldWUgYW55IGRhdGEgd2hpbGUgc3RyZWFt
IHJlc2V0IGlzIHVuZGVyd2F5LgorCQkgKi8KKwkJaWYgKGFzb2MtPnN0cm1vdXRbc3Jjdi0+c2lu
Zm9fc3RyZWFtXS5zdGF0ZSA+IFNDVFBfU1RSRUFNX09QRU4pIHsKKwkJCWVycm9yID0gRUFHQUlO
OworCQl9IGVsc2UgeworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBlcnJvcik7CisJCWdv
dG8gb3V0X3VubG9ja2VkOworCX0KKwlpZiAoKFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBf
U1RBVEVfQ09PS0lFX1dBSVQpIHx8CisJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQ
X1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCXF1ZXVlX29ubHkgPSAxOworCX0KKwkvKiB3ZSBh
cmUgbm93IGRvbmUgd2l0aCBhbGwgY29udHJvbCAqLworCWlmIChjb250cm9sKSB7CisJCXNjdHBf
bV9mcmVlbShjb250cm9sKTsKKwkJY29udHJvbCA9IE5VTEw7CisJfQorCWlmICgoU0NUUF9HRVRf
U1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9TRU5UKSB8fAorCSAgICAoU0NUUF9H
RVRfU1RBVEUoYXNvYykgPT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgfHwKKwkgICAg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpIHx8
CisJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORykpIHsKKwkJ
aWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgeworCQkJOworCQl9IGVsc2Ugewor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9P
VVRQVVQsIEVDT05OUkVTRVQpOworCQkJZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJZ290byBvdXRf
dW5sb2NrZWQ7CisJCX0KKwl9CisJLyogT2ssIHdlIHdpbGwgYXR0ZW1wdCBhIG1zZ3NuZCA6PiAq
LworI2lmICEoZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykpCisJaWYgKHApIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA2MDMwMDAKKwkJcC0+dGRfcnUucnVfbXNnc25kKys7
CisjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAw
MDAKKwkJcC0+dGRfcHJvYy0+cF9zdGF0cy0+cF9ydS5ydV9tc2dzbmQrKzsKKyNlbHNlCisJCXAt
PnBfc3RhdHMtPnBfcnUucnVfbXNnc25kKys7CisjZW5kaWYKKwl9CisjZW5kaWYKKwkvKiBBcmUg
d2UgYWJvcnRpbmc/ICovCisJaWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9BQk9SVCkgewor
CQlzdHJ1Y3QgbWJ1ZiAqbW07CisJCWludCB0b3RfZGVtYW5kLCB0b3Rfb3V0ID0gMCwgbWF4X291
dDsKKworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19zZW5kc193aXRoX2Fib3J0KTsKKwkJaWYgKChT
Q1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB8fAorCQkgICAg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJ
CS8qIEl0IGhhcyB0byBiZSB1cCBiZWZvcmUgd2UgYWJvcnQgKi8KKwkJCS8qIGhvdyBiaWcgaXMg
dGhlIHVzZXIgaW5pdGlhdGVkIGFib3J0PyAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQlnb3RvIG91dDsKKwkJfQorCQlpZiAoaG9sZF90Y2Jsb2NrKSB7CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQlob2xkX3RjYmxvY2sgPSAwOworCQl9CisJCWlmICh0b3Ap
IHsKKwkJCXN0cnVjdCBtYnVmICpjbnRtID0gTlVMTDsKKworCQkJbW0gPSBzY3RwX2dldF9tYnVm
X2Zvcl9tc2coc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSwgMCwgTV9XQUlUT0ssIDEsIE1U
X0RBVEEpOworCQkJaWYgKHNuZGxlbiAhPSAwKSB7CisJCQkJZm9yIChjbnRtID0gdG9wOyBjbnRt
OyBjbnRtID0gU0NUUF9CVUZfTkVYVChjbnRtKSkgeworCQkJCQl0b3Rfb3V0ICs9IFNDVFBfQlVG
X0xFTihjbnRtKTsKKwkJCQl9CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBNdXN0IGZpdCBpbiBh
IE1UVSAqLworCQkJdG90X291dCA9IHNuZGxlbjsKKwkJCXRvdF9kZW1hbmQgPSAodG90X291dCAr
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcikpOworCQkJaWYgKHRvdF9kZW1hbmQgPiBTQ1RQ
X0RFRkFVTFRfQUREX01PUkUpIHsKKwkJCQkvKiBUbyBiaWcgKi8KKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVULCBFTVNHU0laRSk7
CisJCQkJZXJyb3IgPSBFTVNHU0laRTsKKwkJCQlnb3RvIG91dDsKKwkJCX0KKwkJCW1tID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKHRvdF9kZW1hbmQsIDAsIE1fV0FJVE9LLCAxLCBNVF9EQVRBKTsK
KwkJfQorCQlpZiAobW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBz
dGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09VVFBVVCwgRU5PTUVNKTsKKwkJCWVycm9yID0gRU5P
TUVNOworCQkJZ290byBvdXQ7CisJCX0KKwkJbWF4X291dCA9IGFzb2MtPnNtYWxsZXN0X210dSAt
IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCW1heF9vdXQgLT0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2Fib3J0X21zZyk7CisJCWlmICh0b3Rfb3V0ID4gbWF4X291dCkgeworCQkJdG90X291
dCA9IG1heF9vdXQ7CisJCX0KKwkJaWYgKG1tKSB7CisJCQlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAq
cGg7CisKKwkJCS8qIG5vdyBtb3ZlIGZvcndhcmQgdGhlIGRhdGEgcG9pbnRlciAqLworCQkJcGgg
PSBtdG9kKG1tLCBzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqKTsKKwkJCXBoLT5wYXJhbV90eXBlID0g
aHRvbnMoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQpOworCQkJcGgtPnBhcmFtX2xlbmd0
aCA9IGh0b25zKCh1aW50MTZfdCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSArIHRvdF9v
dXQpKTsKKwkJCXBoKys7CisJCQlTQ1RQX0JVRl9MRU4obW0pID0gdG90X291dCArIHNpemVvZihz
dHJ1Y3Qgc2N0cF9wYXJhbWhkcik7CisJCQlpZiAodG9wID09IE5VTEwpIHsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDApOworI2VuZGlmCisJCQkJ
ZXJyb3IgPSB1aW9tb3ZlKChjYWRkcl90KXBoLCAoaW50KXRvdF9vdXQsIHVpbyk7CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMCk7CisjZW5kaWYKKwkJ
CQlpZiAoZXJyb3IpIHsKKwkJCQkJLyotCisJCQkJCSAqIEhlcmUgaWYgd2UgY2FuJ3QgZ2V0IGhp
cyBkYXRhIHdlCisJCQkJCSAqIHN0aWxsIGFib3J0IHdlIGp1c3QgZG9uJ3QgZ2V0IHRvCisJCQkJ
CSAqIHNlbmQgdGhlIHVzZXJzIG5vdGUgOi0wCisJCQkJCSAqLworCQkJCQlzY3RwX21fZnJlZW0o
bW0pOworCQkJCQltbSA9IE5VTEw7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlpZiAoc25kbGVu
ICE9IDApIHsKKwkJCQkJU0NUUF9CVUZfTkVYVChtbSkgPSB0b3A7CisJCQkJfQorCQkJfQorCQl9
CisJCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJ
fQorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJZnJlZV9jbnRf
YXBwbGllZCA9IDA7CisJCS8qIHJlbGVhc2UgdGhpcyBsb2NrLCBvdGhlcndpc2Ugd2UgaGFuZyBv
biBvdXJzZWx2ZXMgKi8KKwkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBtbSwgU0NUUF9TT19MT0NLRUQpOworCQkvKiBub3cgcmVsb2NrIHRoZSBzdGNiIHNv
IGV2ZXJ5dGhpbmcgaXMgc2FuZSAqLworCQlob2xkX3RjYmxvY2sgPSAwOworCQlzdGNiID0gTlVM
TDsKKwkJLyogSW4gdGhpcyBjYXNlIHRvcCBpcyBhbHJlYWR5IGNoYWluZWQgdG8gbW0KKwkJICog
YXZvaWQgZG91YmxlIGZyZWUsIHNpbmNlIHdlIGZyZWUgaXQgYmVsb3cgaWYKKwkJICogdG9wICE9
IE5VTEwgYW5kIGRyaXZlciB3b3VsZCBmcmVlIGl0IGFmdGVyIHNlbmRpbmcKKwkJICogdGhlIHBh
Y2tldCBvdXQKKwkJICovCisJCWlmIChzbmRsZW4gIT0gMCkgeworCQkJdG9wID0gTlVMTDsKKwkJ
fQorCQlnb3RvIG91dF91bmxvY2tlZDsKKwl9CisJLyogQ2FsY3VsYXRlIHRoZSBtYXhpbXVtIHdl
IGNhbiBzZW5kICovCisJaW5xdWV1ZV9ieXRlcyA9IHN0Y2ItPmFzb2MudG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUgLSAoc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlICogU0NUUF9EQVRBX0NI
VU5LX09WRVJIRUFEKHN0Y2IpKTsKKwlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4gaW5xdWV1
ZV9ieXRlcykgeworCQlpZiAobm9uX2Jsb2NraW5nKSB7CisJCQkvKiB3ZSBhbHJlYWR5IGNoZWNr
ZWQgZm9yIG5vbi1ibG9ja2luZyBhYm92ZS4gKi8KKwkJCW1heF9sZW4gPSBzbmRsZW47CisJCX0g
ZWxzZSB7CisJCQltYXhfbGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5xdWV1ZV9ieXRl
czsKKwkJfQorCX0gZWxzZSB7CisJCW1heF9sZW4gPSAwOworCX0KKwlpZiAoaG9sZF90Y2Jsb2Nr
KSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJaG9sZF90Y2Jsb2NrID0gMDsKKwl9CisJ
aWYgKGFzb2MtPnN0cm1vdXQgPT0gTlVMTCkgeworCQkvKiBodWg/IHNvZnR3YXJlIGVycm9yICov
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBuZXQsIFNDVFBfRlJPTV9TQ1RQX09V
VFBVVCwgRUZBVUxUKTsKKwkJZXJyb3IgPSBFRkFVTFQ7CisJCWdvdG8gb3V0X3VubG9ja2VkOwor
CX0KKworCS8qIFVubGVzcyBFX0VPUiBtb2RlIGlzIG9uLCB3ZSBtdXN0IG1ha2UgYSBzZW5kIEZJ
VCBpbiBvbmUgY2FsbC4gKi8KKwlpZiAoKHVzZXJfbWFya3NfZW9yID09IDApICYmCisJICAgIChz
bmRsZW4gPiBTQ1RQX1NCX0xJTUlUX1NORChzdGNiLT5zY3RwX3NvY2tldCkpKSB7CisJCS8qIEl0
IHdpbGwgTkVWRVIgZml0ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgbmV0
LCBTQ1RQX0ZST01fU0NUUF9PVVRQVVQsIEVNU0dTSVpFKTsKKwkJZXJyb3IgPSBFTVNHU0laRTsK
KwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQorCWlmICgodWlvID09IE5VTEwpICYmIHVzZXJfbWFy
a3NfZW9yKSB7CisJCS8qLQorCQkgKiBXZSBkbyBub3Qgc3VwcG9ydCBlZW9yIG1vZGUgZm9yCisJ
CSAqIHNlbmRpbmcgd2l0aCBtYnVmIGNoYWlucyAobGlrZSBzZW5kZmlsZSkuCisJCSAqLworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIG5ldCwgU0NUUF9GUk9NX1NDVFBfT1VUUFVU
LCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRfdW5sb2NrZWQ7CisJfQor
CisJaWYgKHVzZXJfbWFya3NfZW9yKSB7CisJCWxvY2FsX2FkZF9tb3JlID0gbWluKFNDVFBfU0Jf
TElNSVRfU05EKHNvKSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkp
OworCX0gZWxzZSB7CisJCS8qLQorCQkgKiBGb3Igbm9uLWVlb3IgdGhlIHdob2xlIG1lc3NhZ2Ug
bXVzdCBmaXQgaW4KKwkJICogdGhlIHNvY2tldCBzZW5kIGJ1ZmZlci4KKwkJICovCisJCWxvY2Fs
X2FkZF9tb3JlID0gc25kbGVuOworCX0KKwlsZW4gPSAwOworCWlmIChub25fYmxvY2tpbmcpIHsK
KwkJZ290byBza2lwX3ByZWJsb2NrOworCX0KKwlpZiAoKChtYXhfbGVuIDw9IGxvY2FsX2FkZF9t
b3JlKSAmJgorCSAgICAgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA+PSBsb2NhbF9hZGRfbW9yZSkp
IHx8CisJICAgIChtYXhfbGVuID09IDApIHx8CisJICAgICgoc3RjYi0+YXNvYy5jaHVua3Nfb25f
b3V0X3F1ZXVlK3N0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCkgPj0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpKSkgeworCQkvKiBObyByb29tIHJpZ2h0IG5vdyAh
ICovCisJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3NuZCk7CisJCWlucXVldWVfYnl0ZXMgPSBzdGNi
LT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291
dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJCXdoaWxlICgoU0NU
UF9TQl9MSU1JVF9TTkQoc28pIDwgKGlucXVldWVfYnl0ZXMgKyBsb2NhbF9hZGRfbW9yZSkpIHx8
CisJCSAgICAgICAoKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCtzdGNiLT5hc29jLmNodW5r
c19vbl9vdXRfcXVldWUpID49IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1
ZXVlKSkpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCJwcmVfYmxvY2sgbGltaXQ6
JXUgPChpbnE6JWQgKyAlZCkgfHwgKCVkKyVkID4gJWQpXG4iLAorCQkJICAgICAgICAodW5zaWdu
ZWQgaW50KVNDVFBfU0JfTElNSVRfU05EKHNvKSwKKwkJCSAgICAgICAgaW5xdWV1ZV9ieXRlcywK
KwkJCSAgICAgICAgbG9jYWxfYWRkX21vcmUsCisJCQkgICAgICAgIHN0Y2ItPmFzb2Muc3RyZWFt
X3F1ZXVlX2NudCwKKwkJCSAgICAgICAgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLAor
CQkJICAgICAgICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSkpOwor
CQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQkxLX0xP
R0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9sb2dfYmxvY2soU0NUUF9CTE9DS19MT0dfSU5UT19C
TEtBLCBhc29jLCBzbmRsZW4pOworCQkJfQorCQkJYmUuZXJyb3IgPSAwOworI2lmICFkZWZpbmVk
KF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19XaW5kb3dzX18pCisJCQlzdGNiLT5ibG9ja19lbnRy
eSA9ICZiZTsKKyNlbmRpZgorCQkJZXJyb3IgPSBzYndhaXQoJnNvLT5zb19zbmQpOworCQkJc3Rj
Yi0+YmxvY2tfZW50cnkgPSBOVUxMOworCQkJaWYgKGVycm9yIHx8IHNvLT5zb19lcnJvciB8fCBi
ZS5lcnJvcikgeworCQkJCWlmIChlcnJvciA9PSAwKSB7CisJCQkJCWlmIChzby0+c29fZXJyb3Ip
CisJCQkJCQllcnJvciA9IHNvLT5zb19lcnJvcjsKKwkJCQkJaWYgKGJlLmVycm9yKSB7CisJCQkJ
CQllcnJvciA9IGJlLmVycm9yOworCQkJCQl9CisJCQkJfQorCQkJCVNPQ0tCVUZfVU5MT0NLKCZz
by0+c29fc25kKTsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkg
eworCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX09VVE9GX0JMSywKKwkJCQkgICAg
ICAgICAgICAgICBhc29jLCBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplKTsKKwkJ
CX0KKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVF
RCkgeworCQkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwkJCQlnb3RvIG91dF91bmxv
Y2tlZDsKKwkJCX0KKwkJCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9x
dWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9D
SFVOS19PVkVSSEVBRChzdGNiKSk7CisJCX0KKwkJaWYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA+
IGlucXVldWVfYnl0ZXMpIHsKKwkJCW1heF9sZW4gPSBTQ1RQX1NCX0xJTUlUX1NORChzbykgLSAg
aW5xdWV1ZV9ieXRlczsKKwkJfSBlbHNlIHsKKwkJCW1heF9sZW4gPSAwOworCQl9CisJCVNPQ0tC
VUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwl9CisKK3NraXBfcHJlYmxvY2s6CisJaWYgKHN0Y2It
PmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCWdvdG8gb3V0
X3VubG9ja2VkOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwllcnJvciA9IHNibG9jaygm
c28tPnNvX3NuZCwgU0JMT0NLV0FJVChmbGFncykpOworI2VuZGlmCisJLyogc25kbGVuIGNvdmVy
cyBmb3IgbWJ1ZiBjYXNlCisJICogdWlvX3Jlc2lkIGNvdmVycyBmb3IgdGhlIG5vbi1tYnVmIGNh
c2UKKwkgKiBOT1RFOiB1aW8gd2lsbCBiZSBudWxsIHdoZW4gdG9wL21idWYgaXMgcGFzc2VkCisJ
ICovCisJaWYgKHNuZGxlbiA9PSAwKSB7CisJCWlmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBf
RU9GKSB7CisJCQlnb3RfYWxsX29mX3RoZV9zZW5kID0gMTsKKwkJCWdvdG8gZGF0YWxlc3NfZW9m
OworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0Y2IsIG5ldCwgU0NU
UF9GUk9NX1NDVFBfT1VUUFVULCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3Rv
IG91dDsKKwkJfQorCX0KKwlpZiAodG9wID09IE5VTEwpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFt
X3F1ZXVlX3BlbmRpbmcgKnNwOworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJtOworCQl1
aW50MzJfdCBzbmRvdXQ7CisKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQlpZiAoKGFz
b2MtPnN0cmVhbV9sb2NrZWQpICYmCisJCSAgICAoYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgIT0g
c3Jjdi0+c2luZm9fc3RyZWFtKSkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgbmV0LCBTQ1RQX0ZST01fU0NUUF9PVVRQ
VVQsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWdvdG8gb3V0OworCQl9CisJCVND
VFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCisJCXN0cm0gPSAmc3RjYi0+YXNvYy5zdHJtb3V0
W3NyY3YtPnNpbmZvX3N0cmVhbV07CisJCWlmIChzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID09
IDApIHsKKwkJZG9fYV9jb3B5X2luOgorCQkJc3AgPSBzY3RwX2NvcHlfaXRfaW4oc3RjYiwgYXNv
Yywgc3JjdiwgdWlvLCBuZXQsIG1heF9sZW4sIHVzZXJfbWFya3NfZW9yLCAmZXJyb3IpOworCQkJ
aWYgKGVycm9yKSB7CisJCQkJZ290byBvdXQ7CisJCQl9CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0so
c3RjYik7CisJCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSkgeworCQkJCXN0cm0tPmxhc3RfbXNn
X2luY29tcGxldGUgPSAwOworCQkJCWFzb2MtPnN0cmVhbV9sb2NrZWQgPSAwOworCQkJfSBlbHNl
IHsKKwkJCQkvKiBKdXN0IGdvdCBsb2NrZWQgdG8gdGhpcyBndXkgaW4KKwkJCQkgKiBjYXNlIG9m
IGFuIGludGVycnVwdC4KKwkJCQkgKi8KKwkJCQlzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0g
MTsKKwkJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlhc29j
LT5zdHJlYW1fbG9ja2VkID0gMTsKKwkJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgPSBzcmN2
LT5zaW5mb19zdHJlYW07CisJCQkJfQorCQkJCXNwLT5zZW5kZXJfYWxsX2RvbmUgPSAwOworCQkJ
fQorCQkJc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwgc3AtPmxlbmd0aCk7CisJCQlhdG9taWNfYWRk
X2ludCgmYXNvYy0+c3RyZWFtX3F1ZXVlX2NudCwgMSk7CisJCQlpZiAoc3Jjdi0+c2luZm9fZmxh
Z3MgJiBTQ1RQX1VOT1JERVJFRCkgeworCQkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dp
dGhfdW5vcmQpOworCQkJfQorCQkJVEFJTFFfSU5TRVJUX1RBSUwoJnN0cm0tPm91dHF1ZXVlLCBz
cCwgbmV4dCk7CisJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2FkZF90b19zdHJl
YW0oc3RjYiwgYXNvYywgc3RybSwgc3AsIDEpOworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3Rj
Yik7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJCQlzcCA9IFRB
SUxRX0xBU1QoJnN0cm0tPm91dHF1ZXVlLCBzY3RwX3N0cmVhbWhlYWQpOworCQkJU0NUUF9UQ0Jf
U0VORF9VTkxPQ0soc3RjYik7CisJCQlpZiAoc3AgPT0gTlVMTCkgeworCQkJCS8qID8/Pz8gSHVo
ID8/PyBsYXN0IG1zZyBpcyBnb25lICovCisjaWZkZWYgSU5WQVJJQU5UUworCQkJCXBhbmljKCJX
YXJuaW5nOiBMYXN0IG1zZyBtYXJrZWQgaW5jb21wbGV0ZSwgeWV0IG5vdGhpbmcgbGVmdD8iKTsK
KyNlbHNlCisJCQkJU0NUUF9QUklOVEYoIldhcm5pbmc6IExhc3QgbXNnIG1hcmtlZCBpbmNvbXBs
ZXRlLCB5ZXQgbm90aGluZyBsZWZ0P1xuIik7CisJCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0
ZSA9IDA7CisjZW5kaWYKKwkJCQlnb3RvIGRvX2FfY29weV9pbjsKKworCQkJfQorCQl9CisjaWYg
ZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQl3aGlsZSAo
dWlvLT51aW9fcmVzaWQgPiAwKSB7CisjZWxzZQorCQl3aGlsZSAodWlvX3Jlc2lkKHVpbykgPiAw
KSB7CisjZW5kaWYKKyNlbHNlCisJCXdoaWxlICh1aW8tPnVpb19yZXNpZCA+IDApIHsKKyNlbmRp
ZgorCQkJLyogSG93IG11Y2ggcm9vbSBkbyB3ZSBoYXZlPyAqLworCQkJc3RydWN0IG1idWYgKm5l
d190YWlsLCAqbW07CisKKwkJCWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplIC0gKHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFU
QV9DSFVOS19PVkVSSEVBRChzdGNiKSk7CisJCQlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pID4g
aW5xdWV1ZV9ieXRlcykKKwkJCQltYXhfbGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5x
dWV1ZV9ieXRlczsKKwkJCWVsc2UKKwkJCQltYXhfbGVuID0gMDsKKworCQkJaWYgKChtYXhfbGVu
ID4gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkpIHx8CisJCQkgICAg
KG1heF9sZW4gJiYgKFNDVFBfU0JfTElNSVRfU05EKHNvKSA8IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9hZGRfbW9yZV90aHJlc2hvbGQpKSkgfHwKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBk
ZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCQkgICAgKHVpby0+dWlvX3Jlc2lkICYmICh1aW8tPnVp
b19yZXNpZCA8PSAoaW50KW1heF9sZW4pKSkgeworI2Vsc2UKKwkJCSAgICAodWlvX3Jlc2lkKHVp
bykgJiYgKHVpb19yZXNpZCh1aW8pIDw9IChpbnQpbWF4X2xlbikpKSB7CisjZW5kaWYKKyNlbHNl
CisJCQkgICAgKHVpby0+dWlvX3Jlc2lkICYmICh1aW8tPnVpb19yZXNpZCA8PSAoaW50KW1heF9s
ZW4pKSkgeworI2VuZGlmCisJCQkJc25kb3V0ID0gMDsKKwkJCQluZXdfdGFpbCA9IE5VTEw7CisJ
CQkJaWYgKGhvbGRfdGNibG9jaykgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJ
CWhvbGRfdGNibG9jayA9IDA7CisJCQkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJCVND
VFBfU09DS0VUX1VOTE9DSyhzbywgMCk7CisjZW5kaWYKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDApIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCQkgICAgbW0gPSBzY3RwX2NvcHlfcmVzdW1lKHVpbywgbWF4X2xlbiwgdXNlcl9tYXJr
c19lb3IsICZlcnJvciwgJnNuZG91dCwgJm5ld190YWlsKTsKKyNlbHNlCisJCQkJICAgIG1tID0g
c2N0cF9jb3B5X3Jlc3VtZSh1aW8sIG1heF9sZW4sICZlcnJvciwgJnNuZG91dCwgJm5ld190YWls
KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJCVNDVFBfU09DS0VUX0xPQ0so
c28sIDApOworI2VuZGlmCisJCQkJaWYgKChtbSA9PSBOVUxMKSB8fCBlcnJvcikgeworCQkJCQlp
ZiAobW0pIHsKKwkJCQkJCXNjdHBfbV9mcmVlbShtbSk7CisJCQkJCX0KKwkJCQkJZ290byBvdXQ7
CisJCQkJfQorCQkJCS8qIFVwZGF0ZSB0aGUgbWJ1ZiBhbmQgY291bnQgKi8KKwkJCQlTQ1RQX1RD
Ql9TRU5EX0xPQ0soc3RjYik7CisJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRF
X0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQkJCS8qIHdlIG5lZWQgdG8gZ2V0IG91dC4KKwkJCQkJ
ICogUGVlciBwcm9iYWJseSBhYm9ydGVkLgorCQkJCQkgKi8KKwkJCQkJc2N0cF9tX2ZyZWVtKG1t
KTsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1BDQl9GTEFHU19XQVNfQUJPUlRF
RCkgeworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBzdGNiLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9PVVRQVVQsIEVDT05OUkVTRVQpOworCQkJCQkJZXJyb3IgPSBFQ09OTlJFU0VUOwor
CQkJCQl9CisJCQkJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCQkJCQlnb3RvIG91dDsK
KwkJCQl9CisJCQkJaWYgKHNwLT50YWlsX21idWYpIHsKKwkJCQkJLyogdGFjayBpdCB0byB0aGUg
ZW5kICovCisJCQkJCVNDVFBfQlVGX05FWFQoc3AtPnRhaWxfbWJ1ZikgPSBtbTsKKwkJCQkJc3At
PnRhaWxfbWJ1ZiA9IG5ld190YWlsOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIEEgc3RvbGVuIG1i
dWYgKi8KKwkJCQkJc3AtPmRhdGEgPSBtbTsKKwkJCQkJc3AtPnRhaWxfbWJ1ZiA9IG5ld190YWls
OworCQkJCX0KKwkJCQlzY3RwX3NuZF9zYl9hbGxvYyhzdGNiLCBzbmRvdXQpOworCQkJCWF0b21p
Y19hZGRfaW50KCZzcC0+bGVuZ3RoLCBzbmRvdXQpOworCQkJCWxlbiArPSBzbmRvdXQ7CisJCQkJ
aWYgKHNyY3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9TQUNLX0lNTUVESUFURUxZKSB7CisJCQkJCXNw
LT5zaW5mb19mbGFncyB8PSBTQ1RQX1NBQ0tfSU1NRURJQVRFTFk7CisJCQkJfQorCisJCQkJLyog
RGlkIHdlIHJlYWNoIEVPUj8gKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVk
KEFQUExFX0xFT1BBUkQpCisJCQkJaWYgKCh1aW8tPnVpb19yZXNpZCA9PSAwKSAmJgorI2Vsc2UK
KwkJCQlpZiAoKHVpb19yZXNpZCh1aW8pID09IDApICYmCisjZW5kaWYKKyNlbHNlCisJCQkJaWYg
KCh1aW8tPnVpb19yZXNpZCA9PSAwKSAmJgorI2VuZGlmCisJCQkJICAgICgodXNlcl9tYXJrc19l
b3IgPT0gMCkgfHwKKwkJCQkgICAgIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9GKSB8fAor
CQkJCSAgICAgKHVzZXJfbWFya3NfZW9yICYmIChzcmN2LT5zaW5mb19mbGFncyAmIFNDVFBfRU9S
KSkpKSB7CisJCQkJCXNwLT5tc2dfaXNfY29tcGxldGUgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJ
CXNwLT5tc2dfaXNfY29tcGxldGUgPSAwOworCQkJCX0KKwkJCQlTQ1RQX1RDQl9TRU5EX1VOTE9D
SyhzdGNiKTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExF
X0xFT1BBUkQpCisJCQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2Vsc2UKKwkJCWlmICh1
aW9fcmVzaWQodWlvKSA9PSAwKSB7CisjZW5kaWYKKyNlbHNlCisJCQlpZiAodWlvLT51aW9fcmVz
aWQgPT0gMCkgeworI2VuZGlmCisJCQkJLyogZ290IGl0IGFsbD8gKi8KKwkJCQljb250aW51ZTsK
KwkJCX0KKwkJCS8qIFBSLVNDVFA/ICovCisJCQlpZiAoKGFzb2MtPnByc2N0cF9zdXBwb3J0ZWQp
ICYmIChhc29jLT5zZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlID4gMCkpIHsKKwkJCQkvKiBUaGlz
IGlzIHVnbHkgYnV0IHdlIG11c3QgYXNzdXJlIGxvY2tpbmcgb3JkZXIgKi8KKwkJCQlpZiAoaG9s
ZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaG9sZF90
Y2Jsb2NrID0gMTsKKwkJCQl9CisJCQkJc2N0cF9wcnVuZV9wcnNjdHAoc3RjYiwgYXNvYywgc3Jj
diwgc25kbGVuKTsKKwkJCQlpbnF1ZXVlX2J5dGVzID0gc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSAtIChzdGNiLT5hc29jLmNodW5rc19vbl9vdXRfcXVldWUgKiBTQ1RQX0RBVEFf
Q0hVTktfT1ZFUkhFQUQoc3RjYikpOworCQkJCWlmIChTQ1RQX1NCX0xJTUlUX1NORChzbykgPiBp
bnF1ZXVlX2J5dGVzKQorCQkJCQltYXhfbGVuID0gU0NUUF9TQl9MSU1JVF9TTkQoc28pIC0gaW5x
dWV1ZV9ieXRlczsKKwkJCQllbHNlCisJCQkJCW1heF9sZW4gPSAwOworCQkJCWlmIChtYXhfbGVu
ID4gMCkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJCWhvbGRfdGNibG9jayA9IDA7CisJCQl9CisJCQkvKiB3YWl0IGZvciBzcGFjZSBub3cg
Ki8KKwkJCWlmIChub25fYmxvY2tpbmcpIHsKKwkJCQkvKiBOb24tYmxvY2tpbmcgaW8gaW4gcGxh
Y2Ugb3V0ICovCisJCQkJZ290byBza2lwX291dF9lb2Y7CisJCQl9CisJCQkvKiBXaGF0IGFib3V0
IHRoZSBJTklULCBzZW5kIGl0IG1heWJlICovCisJCQlpZiAocXVldWVfb25seV9mb3JfaW5pdCkg
eworCQkJCWlmIChob2xkX3RjYmxvY2sgPT0gMCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJCQlob2xkX3RjYmxvY2sgPSAxOworCQkJCX0KKwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUo
JnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCQkvKiBhIGNvbGxpc2lvbiB0
b29rIHVzIGZvcndhcmQ/ICovCisJCQkJCXF1ZXVlX29ubHkgPSAwOworCQkJCX0gZWxzZSB7CisJ
CQkJCXNjdHBfc2VuZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJ
U0NUUF9TRVRfU1RBVEUoYXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7CisJCQkJCXF1ZXVl
X29ubHkgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmICgobmV0LT5mbGlnaHRfc2l6ZSA+IG5ldC0+
Y3duZCkgJiYKKwkJCSAgICAoYXNvYy0+c2N0cF9jbXRfb25fb2ZmID09IDApKSB7CisJCQkJU0NU
UF9TVEFUX0lOQ1Ioc2N0cHNfc2VuZF9jd25kX2F2b2lkKTsKKwkJCQlxdWV1ZV9vbmx5ID0gMTsK
KwkJCX0gZWxzZSBpZiAoYXNvYy0+aWZwX2hhZF9lbm9idWYpIHsKKwkJCQlTQ1RQX1NUQVRfSU5D
UihzY3Rwc19pZm5vbWVtcXVldWVkKTsKKwkJCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA+ICgyICog
bmV0LT5tdHUpKSB7CisJCQkJCXF1ZXVlX29ubHkgPSAxOworCQkJCX0KKwkJCQlhc29jLT5pZnBf
aGFkX2Vub2J1ZiA9IDA7CisJCQl9CisJCQl1bl9zZW50ID0gc3RjYi0+YXNvYy50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSAtIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OworCQkJaWYgKChzY3RwX2lz
X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxBWSkpICYmCisJCQkgICAgKHN0
Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID4gMCkgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1f
cXVldWVfY250IDwgU0NUUF9NQVhfREFUQV9CVU5ETElORykgJiYKKwkJCSAgICAodW5fc2VudCA8
IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5fT1ZFUkhFQUQpKSkgewor
CisJCQkJLyotCisJCQkJICogT2ssIE5hZ2xlIGlzIHNldCBvbiBhbmQgd2UgaGF2ZSBkYXRhIG91
dHN0YW5kaW5nLgorCQkJCSAqIERvbid0IHNlbmQgYW55dGhpbmcgYW5kIGxldCBTQUNLcyBkcml2
ZSBvdXQgdGhlCisJCQkJICogZGF0YSB1bmxlc3Mgd2UgaGF2ZSBhICJmdWxsIiBzZWdtZW50IHRv
IHNlbmQuCisJCQkJICovCisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmIFNDVFBfTkFHTEVfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9sb2dfbmFnbGVf
ZXZlbnQoc3RjYiwgU0NUUF9OQUdMRV9BUFBMSUVEKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lO
Q1Ioc2N0cHNfbmFnbGVxdWV1ZWQpOworCQkJCW5hZ2xlX2FwcGxpZXMgPSAxOworCQkJfSBlbHNl
IHsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9O
QUdMRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX05PREVMQVkpKQorCQkJCQkJc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3Rj
YiwgU0NUUF9OQUdMRV9TS0lQUEVEKTsKKwkJCQl9CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNf
bmFnbGVzZW50KTsKKwkJCQluYWdsZV9hcHBsaWVzID0gMDsKKwkJCX0KKwkJCWlmIChTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkg
eworCisJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9DV05ETE9HX1BSRVNFTkQsIHF1ZXVlX29ubHlf
Zm9yX2luaXQsIHF1ZXVlX29ubHksCisJCQkJCSAgICAgICBuYWdsZV9hcHBsaWVzLCB1bl9zZW50
KTsKKwkJCQlzY3RwX21pc2NfaW50cyhTQ1RQX0NXTkRMT0dfUFJFU0VORCwgc3RjYi0+YXNvYy50
b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwKKwkJCQkJICAgICAgIHN0Y2ItPmFzb2MudG90YWxfZmxp
Z2h0LAorCQkJCQkgICAgICAgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLCBzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodF9jb3VudCk7CisJCQl9CisJCQlpZiAocXVldWVfb25seV9mb3JfaW5p
dCkKKwkJCQlxdWV1ZV9vbmx5X2Zvcl9pbml0ID0gMDsKKwkJCWlmICgocXVldWVfb25seSA9PSAw
KSAmJiAobmFnbGVfYXBwbGllcyA9PSAwKSkgeworCQkJCS8qLQorCQkJCSAqIG5lZWQgdG8gc3Rh
cnQgY2h1bmsgb3V0cHV0CisJCQkJICogYmVmb3JlIGJsb2NraW5nLi4gbm90ZSB0aGF0IGlmCisJ
CQkJICogYSBsb2NrIGlzIGFscmVhZHkgYXBwbGllZCwgdGhlbgorCQkJCSAqIHRoZSBpbnB1dCB2
aWEgdGhlIG5ldCBpcyBoYXBwZW5pbmcKKwkJCQkgKiBhbmQgSSBkb24ndCBuZWVkIHRvIHN0YXJ0
IG91dHB1dCA6LUQKKwkJCQkgKi8KKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJ
aWYgKFNDVFBfVENCX1RSWUxPQ0soc3RjYikpIHsKKwkJCQkJCWhvbGRfdGNibG9jayA9IDE7CisJ
CQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsCisJCQkJCQkJCSAgc3RjYiwKKwkJCQkJCQkJICBT
Q1RQX09VVFBVVF9GUk9NX1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9
IGVsc2UgeworCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsCisJCQkJCQkJICBzdGNiLAorCQkJ
CQkJCSAgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOworCQkJCX0K
KwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDEpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJCQlob2xkX3RjYmxvY2sgPSAwOworCQkJCX0KKwkJCX0KKwkJCVNPQ0tCVUZfTE9DSygm
c28tPnNvX3NuZCk7CisJCQkvKi0KKwkJCSAqIFRoaXMgaXMgYSBiaXQgc3RyYW5nZSwgYnV0IEkg
dGhpbmsgaXQgd2lsbAorCQkJICogd29yay4gVGhlIHRvdGFsX291dHB1dF9xdWV1ZV9zaXplIGlz
IGxvY2tlZCBhbmQKKwkJCSAqIHByb3RlY3RlZCBieSB0aGUgVENCX0xPQ0ssIHdoaWNoIHdlIGp1
c3QgcmVsZWFzZWQuCisJCQkgKiBUaGVyZSBpcyBhIHJhY2UgdGhhdCBjYW4gb2NjdXIgYmV0d2Vl
biByZWxlYXNpbmcgaXQKKwkJCSAqIGFib3ZlLCBhbmQgbWUgZ2V0dGluZyB0aGUgc29ja2V0IGxv
Y2ssIHdoZXJlIHNhY2tzCisJCQkgKiBjb21lIGluIGJ1dCB3ZSBoYXZlIG5vdCBwdXQgdGhlIFNC
X1dBSVQgb24gdGhlCisJCQkgKiBzb19zbmQgYnVmZmVyIHRvIGdldCB0aGUgd2FrZXVwLiBBZnRl
ciB0aGUgTE9DSworCQkJICogaXMgYXBwbGllZCB0aGUgc2Fja19wcm9jZXNzaW5nIHdpbGwgYWxz
byBuZWVkIHRvCisJCQkgKiBMT0NLIHRoZSBzby0+c29fc25kIHRvIGRvIHRoZSBhY3R1YWwgc293
d2FrZXVwKCkuIFNvCisJCQkgKiBvbmNlIHdlIGhhdmUgdGhlIHNvY2tldCBidWZmZXIgbG9jayBp
ZiB3ZSByZWNoZWNrIHRoZQorCQkJICogc2l6ZSB3ZSBLTk9XIHdlIHdpbGwgZ2V0IHRvIHNsZWVw
IHNhZmVseSB3aXRoIHRoZQorCQkJICogd2FrZXVwIGZsYWcgaW4gcGxhY2UuCisJCQkgKi8KKwkJ
CWlucXVldWVfYnl0ZXMgPSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gKHN0
Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZSAqIFNDVFBfREFUQV9DSFVOS19PVkVSSEVBRChz
dGNiKSk7CisJCQlpZiAoU0NUUF9TQl9MSU1JVF9TTkQoc28pIDw9IChpbnF1ZXVlX2J5dGVzICsK
KwkJCQkJCSAgICAgIG1pbihTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWRkX21vcmVfdGhyZXNob2xk
KSwgU0NUUF9TQl9MSU1JVF9TTkQoc28pKSkpIHsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9CTEtfTE9HR0lOR19FTkFCTEUpIHsKKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCQkJCXNjdHBfbG9n
X2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX0lOVE9fQkxLLAorCQkJCQkJICAgICAgIGFzb2MsIHVpby0+
dWlvX3Jlc2lkKTsKKyNlbHNlCisJCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tfTE9HX0lO
VE9fQkxLLAorCQkJCQkJICAgICAgIGFzb2MsIHVpb19yZXNpZCh1aW8pKTsKKyNlbmRpZgorI2Vs
c2UKKwkJCQkJc2N0cF9sb2dfYmxvY2soU0NUUF9CTE9DS19MT0dfSU5UT19CTEssCisJCQkJCQkg
ICAgICAgYXNvYywgKHNpemVfdCl1aW8tPnVpb19yZXNpZCk7CisjZW5kaWYKKwkJCQl9CisJCQkJ
YmUuZXJyb3IgPSAwOworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmluZWQoX19XaW5k
b3dzX18pCisJCQkJc3RjYi0+YmxvY2tfZW50cnkgPSAmYmU7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKwkJCQlzYnVubG9jaygmc28tPnNvX3NuZCwgMSk7CisjZW5kaWYKKwkJCQll
cnJvciA9IHNid2FpdCgmc28tPnNvX3NuZCk7CisJCQkJc3RjYi0+YmxvY2tfZW50cnkgPSBOVUxM
OworCisJCQkJaWYgKGVycm9yIHx8IHNvLT5zb19lcnJvciB8fCBiZS5lcnJvcikgeworCQkJCQlp
ZiAoZXJyb3IgPT0gMCkgeworCQkJCQkJaWYgKHNvLT5zb19lcnJvcikKKwkJCQkJCQllcnJvciA9
IHNvLT5zb19lcnJvcjsKKwkJCQkJCWlmIChiZS5lcnJvcikgeworCQkJCQkJCWVycm9yID0gYmUu
ZXJyb3I7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJU09DS0JVRl9VTkxPQ0soJnNvLT5zb19zbmQp
OworCQkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCQl9CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwkJCQllcnJvciA9IHNibG9jaygmc28tPnNvX3NuZCwgU0JMT0NLV0FJVChmbGFncykpOwor
I2VuZGlmCisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfQkxLX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2Jsb2NrKFNDVFBfQkxPQ0tf
TE9HX09VVE9GX0JMSywKKwkJCQkJCSAgICAgICBhc29jLCBzdGNiLT5hc29jLnRvdGFsX291dHB1
dF9xdWV1ZV9zaXplKTsKKwkJCQl9CisJCQl9CisJCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Nu
ZCk7CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJF
RUQpIHsKKwkJCQlnb3RvIG91dF91bmxvY2tlZDsKKwkJCX0KKwkJfQorCQlTQ1RQX1RDQl9TRU5E
X0xPQ0soc3RjYik7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9U
T19CRV9GUkVFRCkgeworCQkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCQlnb3RvIG91
dF91bmxvY2tlZDsKKwkJfQorCQlpZiAoc3ApIHsKKwkJCWlmIChzcC0+bXNnX2lzX2NvbXBsZXRl
ID09IDApIHsKKwkJCQlzdHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMTsKKwkJCQlpZiAoc3Rj
Yi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlhc29jLT5zdHJlYW1fbG9ja2Vk
ID0gMTsKKwkJCQkJYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiAgPSBzcmN2LT5zaW5mb19zdHJlYW07
CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlzcC0+c2VuZGVyX2FsbF9kb25lID0gMTsKKwkJCQlz
dHJtLT5sYXN0X21zZ19pbmNvbXBsZXRlID0gMDsKKwkJCQlhc29jLT5zdHJlYW1fbG9ja2VkID0g
MDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCVNDVFBfUFJJTlRGKCJIdWggbm8gc3AgVFNOSD9cbiIp
OworCQkJc3RybS0+bGFzdF9tc2dfaW5jb21wbGV0ZSA9IDA7CisJCQlhc29jLT5zdHJlYW1fbG9j
a2VkID0gMDsKKwkJfQorCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJCWlmICh1aW8tPnVpb19y
ZXNpZCA9PSAwKSB7CisjZWxzZQorCQlpZiAodWlvX3Jlc2lkKHVpbykgPT0gMCkgeworI2VuZGlm
CisjZWxzZQorCQlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworI2VuZGlmCisJCQlnb3RfYWxs
X29mX3RoZV9zZW5kID0gMTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIFdlIHNlbmQgaW4gYSAwLCBz
aW5jZSB3ZSBkbyBOT1QgaGF2ZSBhbnkgbG9ja3MgKi8KKwkJZXJyb3IgPSBzY3RwX21zZ19hcHBl
bmQoc3RjYiwgbmV0LCB0b3AsIHNyY3YsIDApOworCQl0b3AgPSBOVUxMOworCQlpZiAoc3Jjdi0+
c2luZm9fZmxhZ3MgJiBTQ1RQX0VPRikgeworCQkJLyoKKwkJCSAqIFRoaXMgc2hvdWxkIG9ubHkg
aGFwcGVuIGZvciBQYW5kYSBmb3IgdGhlIG1idWYKKwkJCSAqIHNlbmQgY2FzZSwgd2hpY2ggZG9l
cyBOT1QgeWV0IHN1cHBvcnQgRUVPUiBtb2RlLgorCQkJICogVGh1cywgd2UgY2FuIGp1c3Qgc2V0
IHRoaXMgZmxhZyB0byBkbyB0aGUgcHJvcGVyCisJCQkgKiBFT0YgaGFuZGxpbmcuCisJCQkgKi8K
KwkJCWdvdF9hbGxfb2ZfdGhlX3NlbmQgPSAxOworCQl9CisJfQorCWlmIChlcnJvcikgeworCQln
b3RvIG91dDsKKwl9CitkYXRhbGVzc19lb2Y6CisJLyogRU9GIHRoaW5nID8gKi8KKwlpZiAoKHNy
Y3YtPnNpbmZvX2ZsYWdzICYgU0NUUF9FT0YpICYmCisJICAgIChnb3RfYWxsX29mX3RoZV9zZW5k
ID09IDEpKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3NlbmRzX3dpdGhfZW9mKTsKKwkJZXJy
b3IgPSAwOworCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCQlob2xkX3RjYmxvY2sgPSAxOworCQl9CisJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+
c2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgor
CQkgICAgc2N0cF9pc190aGVyZV91bnNlbnRfZGF0YShzdGNiLCBTQ1RQX1NPX0xPQ0tFRCkgPT0g
MCkgeworCQkJaWYgKCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2lu
Y29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7CisJCQkJZ290byBhYm9ydF9hbnl3YXk7CisJCQl9CisJ
CQkvKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBJJ20gZG9uZS4uLiAqLwor
CQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQp
ICYmCisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05f
UkVDRUlWRUQpICYmCisJCQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVf
U0hVVERPV05fQUNLX1NFTlQpKSB7CisJCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKworCQkJ
CS8qIG9ubHkgc2VuZCBTSFVURE9XTiB0aGUgZmlyc3QgdGltZSB0aHJvdWdoICovCisJCQkJaWYg
KFNDVFBfR0VUX1NUQVRFKGFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJCQlTQ1RQX1NU
QVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJfQorCQkJCVNDVFBfU0VUX1NU
QVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7CisJCQkJU0NUUF9DTEVBUl9TVUJT
VEFURShhc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpOworCQkJCXNjdHBfc3RvcF90
aW1lcnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJCWlmIChzdGNiLT5hc29jLmFsdGVybmF0ZSkg
eworCQkJCQluZXRwID0gc3RjYi0+YXNvYy5hbHRlcm5hdGU7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
bmV0cCA9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbjsKKwkJCQl9CisJCQkJc2N0cF9z
ZW5kX3NodXRkb3duKHN0Y2IsIG5ldHApOworCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOLCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCSAgICAgICAgICAgICAg
ICAgbmV0cCk7CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05H
VUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkgICAgICAgICAgICAgICAgIGFzb2MtPnBy
aW1hcnlfZGVzdGluYXRpb24pOworCQkJfQorCQl9IGVsc2UgeworCQkJLyotCisJCQkgKiB3ZSBz
dGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRhIHRvIHNlbmQsIHNvIHNldAorCQkJICogU0hVVERP
V05fUEVORElORworCQkJICovCisJCQkvKi0KKwkJCSAqIFhYWCBzb2NrZXRzIGRyYWZ0IHNheXMg
dGhhdCBTQ1RQX0VPRiBzaG91bGQgYmUKKwkJCSAqIHNlbnQgd2l0aCBubyBkYXRhLiAgY3VycmVu
dGx5LCB3ZSB3aWxsIGFsbG93IHVzZXIKKwkJCSAqIGRhdGEgdG8gYmUgc2VudCBmaXJzdCBhbmQg
bW92ZSB0bworCQkJICogU0hVVERPV04tUEVORElORworCQkJICovCisJCQlpZiAoKFNDVFBfR0VU
X1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCSAgICAoU0NU
UF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkgJiYKKwkJ
CSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9BQ0tfU0VO
VCkpIHsKKwkJCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJCQl9CisJCQkJaWYgKCgqYXNvYy0+c3Nf
ZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0Y2IsIGFzb2MpKSB7
CisJCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVDsKKwkJCQl9
CisJCQkJYXNvYy0+c3RhdGUgfD0gU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HOworCQkJCWlm
IChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCQkgICAgVEFJTFFfRU1QVFko
JmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkJICAgIChhc29jLT5zdGF0ZSAmIFNDVFBfU1RBVEVf
UEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJY2hh
ciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJCWFib3J0X2FueXdheToKKwkJCQkJaWYg
KGZyZWVfY250X2FwcGxpZWQpIHsKKwkJCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgLTEpOworCQkJCQkJZnJlZV9jbnRfYXBwbGllZCA9IDA7CisJCQkJCX0KKwkJCQkJc25w
cmludGYobXNnLCBzaXplb2YobXNnKSwKKwkJCQkJICAgICAgICAgIiVzOiVkIGF0ICVzIiwgX19G
SUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXyk7CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSwKKwkJCQkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtc2cpOworCQkJCQlzY3RwX2Fib3J0X2FuX2Fzc29jaWF0
aW9uKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
b3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCS8qIG5vdyByZWxvY2sgdGhlIHN0Y2Igc28g
ZXZlcnl0aGluZyBpcyBzYW5lICovCisJCQkJCWhvbGRfdGNibG9jayA9IDA7CisJCQkJCXN0Y2Ig
PSBOVUxMOworCQkJCQlnb3RvIG91dDsKKwkJCQl9CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkgICAg
ICAgICAgICAgICAgIGFzb2MtPnByaW1hcnlfZGVzdGluYXRpb24pOworCQkJCXNjdHBfZmVhdHVy
ZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZKTsKKwkJCX0KKwkJfQorCX0KK3NraXBf
b3V0X2VvZjoKKwlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1
ZSkpIHsKKwkJc29tZV9vbl9jb250cm9sID0gMTsKKwl9CisJaWYgKHF1ZXVlX29ubHlfZm9yX2lu
aXQpIHsKKwkJaWYgKGhvbGRfdGNibG9jayA9PSAwKSB7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJaG9sZF90Y2Jsb2NrID0gMTsKKwkJfQorCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2It
PmFzb2MpID09IFNDVFBfU1RBVEVfT1BFTikgeworCQkJLyogYSBjb2xsaXNpb24gdG9vayB1cyBm
b3J3YXJkPyAqLworCQkJcXVldWVfb25seSA9IDA7CisJCX0gZWxzZSB7CisJCQlzY3RwX3NlbmRf
aW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQlTQ1RQX1NFVF9TVEFURSgm
c3RjYi0+YXNvYywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7CisJCQlxdWV1ZV9vbmx5ID0gMTsK
KwkJfQorCX0KKwlpZiAoKG5ldC0+ZmxpZ2h0X3NpemUgPiBuZXQtPmN3bmQpICYmCisJICAgIChz
dGNiLT5hc29jLnNjdHBfY210X29uX29mZiA9PSAwKSkgeworCQlTQ1RQX1NUQVRfSU5DUihzY3Rw
c19zZW5kX2N3bmRfYXZvaWQpOworCQlxdWV1ZV9vbmx5ID0gMTsKKwl9IGVsc2UgaWYgKGFzb2Mt
PmlmcF9oYWRfZW5vYnVmKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX2lmbm9tZW1xdWV1ZWQp
OworCQlpZiAobmV0LT5mbGlnaHRfc2l6ZSA+ICgyICogbmV0LT5tdHUpKSB7CisJCQlxdWV1ZV9v
bmx5ID0gMTsKKwkJfQorCQlhc29jLT5pZnBfaGFkX2Vub2J1ZiA9IDA7CisJfQorCXVuX3NlbnQg
PSBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplIC0gc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQ7CisJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9E
RUxBWSkpICYmCisJICAgIChzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA+IDApICYmCisJICAgIChz
dGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPCBTQ1RQX01BWF9EQVRBX0JVTkRMSU5HKSAmJgor
CSAgICAodW5fc2VudCA8IChpbnQpKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1IC0gU0NUUF9NSU5f
T1ZFUkhFQUQpKSkgeworCQkvKi0KKwkJICogT2ssIE5hZ2xlIGlzIHNldCBvbiBhbmQgd2UgaGF2
ZSBkYXRhIG91dHN0YW5kaW5nLgorCQkgKiBEb24ndCBzZW5kIGFueXRoaW5nIGFuZCBsZXQgU0FD
S3MgZHJpdmUgb3V0IHRoZQorCQkgKiBkYXRhIHVubGVzcyB3ZW4gaGF2ZSBhICJmdWxsIiBzZWdt
ZW50IHRvIHNlbmQuCisJCSAqLworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9OQUdMRV9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9sb2dfbmFnbGVf
ZXZlbnQoc3RjYiwgU0NUUF9OQUdMRV9BUFBMSUVEKTsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc19uYWdsZXF1ZXVlZCk7CisJCW5hZ2xlX2FwcGxpZXMgPSAxOworCX0gZWxzZSB7CisJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX05BR0xFX0xPR0dJ
TkdfRU5BQkxFKSB7CisJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZM
QUdTX05PREVMQVkpKQorCQkJCXNjdHBfbG9nX25hZ2xlX2V2ZW50KHN0Y2IsIFNDVFBfTkFHTEVf
U0tJUFBFRCk7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfbmFnbGVzZW50KTsKKwkJbmFn
bGVfYXBwbGllcyA9IDA7CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0JMS19MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX21pc2NfaW50cyhTQ1RQ
X0NXTkRMT0dfUFJFU0VORCwgcXVldWVfb25seV9mb3JfaW5pdCwgcXVldWVfb25seSwKKwkJICAg
ICAgICAgICAgICAgbmFnbGVfYXBwbGllcywgdW5fc2VudCk7CisJCXNjdHBfbWlzY19pbnRzKFND
VFBfQ1dORExPR19QUkVTRU5ELCBzdGNiLT5hc29jLnRvdGFsX291dHB1dF9xdWV1ZV9zaXplLAor
CQkgICAgICAgICAgICAgICBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCwKKwkJICAgICAgICAgICAg
ICAgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLCBzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dF9jb3VudCk7CisJfQorCWlmICgocXVldWVfb25seSA9PSAwKSAmJiAobmFnbGVfYXBwbGllcyA9
PSAwKSAmJiAoc3RjYi0+YXNvYy5wZWVyc19yd25kICYmIHVuX3NlbnQpKSB7CisJCS8qIHdlIGNh
biBhdHRlbXB0IHRvIHNlbmQgdG9vLiAqLworCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJ
CS8qIElmIHRoZXJlIGlzIGFjdGl2aXR5IHJlY3YnaW5nIHNhY2tzIG5vIG5lZWQgdG8gc2VuZCAq
LworCQkJaWYgKFNDVFBfVENCX1RSWUxPQ0soc3RjYikpIHsKKwkJCQlzY3RwX2NodW5rX291dHB1
dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVVNSX1NFTkQsIFNDVFBfU09fTE9DS0VEKTsK
KwkJCQlob2xkX3RjYmxvY2sgPSAxOworCQkJfQorCQl9IGVsc2UgeworCQkJc2N0cF9jaHVua19v
dXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1VTUl9TRU5ELCBTQ1RQX1NPX0xPQ0tF
RCk7CisJCX0KKwl9IGVsc2UgaWYgKChxdWV1ZV9vbmx5ID09IDApICYmCisJICAgICAgICAgICAo
c3RjYi0+YXNvYy5wZWVyc19yd25kID09IDApICYmCisJICAgICAgICAgICAoc3RjYi0+YXNvYy50
b3RhbF9mbGlnaHQgPT0gMCkpIHsKKwkJLyogV2UgZ2V0IHRvIGhhdmUgYSBwcm9iZSBvdXRzdGFu
ZGluZyAqLworCQlpZiAoaG9sZF90Y2Jsb2NrID09IDApIHsKKwkJCWhvbGRfdGNibG9jayA9IDE7
CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQl9CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwg
c3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9VU1JfU0VORCwgU0NUUF9TT19MT0NLRUQpOworCX0gZWxz
ZSBpZiAoc29tZV9vbl9jb250cm9sKSB7CisJCWludCBudW1fb3V0LCByZWFzb24sIGZyYWdfcG9p
bnQ7CisKKwkJLyogSGVyZSB3ZSBkbyBjb250cm9sIG9ubHkgKi8KKwkJaWYgKGhvbGRfdGNibG9j
ayA9PSAwKSB7CisJCQlob2xkX3RjYmxvY2sgPSAxOworCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsK
KwkJfQorCQlmcmFnX3BvaW50ID0gc2N0cF9nZXRfZnJhZ19wb2ludChzdGNiLCAmc3RjYi0+YXNv
Yyk7CisJCSh2b2lkKXNjdHBfbWVkX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICZzdGNiLT5hc29j
LCAmbnVtX291dCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWFzb24sIDEsIDEs
ICZub3csICZub3dfZmlsbGVkLCBmcmFnX3BvaW50LCBTQ1RQX1NPX0xPQ0tFRCk7CisJfQorCVND
VFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAiVVNSIFNlbmQgY29tcGxldGUgcW86JWQgcHJ3OiVk
IHVuc2VudDolZCB0ZjolZCBjb29xOiVkIHRvcXM6JWQgZXJyOiVkXG4iLAorCSAgICAgICAgcXVl
dWVfb25seSwgc3RjYi0+YXNvYy5wZWVyc19yd25kLCB1bl9zZW50LAorCQlzdGNiLT5hc29jLnRv
dGFsX2ZsaWdodCwgc3RjYi0+YXNvYy5jaHVua3Nfb25fb3V0X3F1ZXVlLAorCSAgICAgICAgc3Rj
Yi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSwgZXJyb3IpOworCitvdXQ6CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJc2J1bmxvY2soJnNvLT5zb19zbmQsIDEpOworI2VuZGlmCitvdXRf
dW5sb2NrZWQ6CisKKwlpZiAobG9jYWxfc29yZXN2ICYmIHN0Y2IpIHsKKwkJYXRvbWljX3N1YnRy
YWN0X2ludCgmc3RjYi0+YXNvYy5zYl9zZW5kX3Jlc3YsIHNuZGxlbik7CisJfQorCWlmIChjcmVh
dGVfbG9ja19hcHBsaWVkKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQor
CWlmICgoc3RjYikgJiYgaG9sZF90Y2Jsb2NrKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
Kwl9CisJaWYgKHN0Y2IgJiYgZnJlZV9jbnRfYXBwbGllZCkgeworCQlhdG9taWNfYWRkX2ludCgm
c3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwl9CisjaWZkZWYgSU5WQVJJQU5UUworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJaWYgKHN0Y2IpIHsKKwkJaWYgKG10eF9vd25lZCgmc3RjYi0+dGNi
X210eCkpIHsKKwkJCXBhbmljKCJMZWF2aW5nIHdpdGggdGNiIG10eCBvd25lZD8iKTsKKwkJfQor
CQlpZiAobXR4X293bmVkKCZzdGNiLT50Y2Jfc2VuZF9tdHgpKSB7CisJCQlwYW5pYygiTGVhdmlu
ZyB3aXRoIHRjYiBzZW5kIG10eCBvd25lZD8iKTsKKwkJfQorCX0KKyNlbmRpZgorI2VuZGlmCisj
aWZkZWYgX19QYW5kYV9fCisJLyoKKwkgKiBIYW5kbGUgdGhlIEVBR0FJTi9FTk9NRU0gY2FzZXMg
dG8gcmVhdHRhY2ggdGhlIHBhayBoZWFkZXIKKwkgKiB0byBwYXJ0aWNsZSB3aGVuIHBhayBpcyBw
YXNzZWQgaW4sIHNvIHRoYXQgY2FsbGVyCisJICogY2FuIHRyeSBhZ2FpbiB3aXRoIHRoaXMgcGFr
CisJICoKKwkgKiBOT1RFOiBGb3Igb3RoZXIgY2FzZXMsIGluY2x1ZGluZyBzdWNjZXNzIGNhc2Us
CisJICogd2Ugc2ltcGx5IHdhbnQgdG8gcmV0dXJuIHRoZSBoZWFkZXIgYmFjayB0byBmcmVlCisJ
ICogcG9vbAorCSAqLworCWlmICh0b3ApIHsKKwkJaWYgKChlcnJvciA9PSBFQUdBSU4pIHx8IChl
cnJvciA9PSBFTk9NRU0pKSB7CisJCQlTQ1RQX0FUVEFDSF9DSEFJTihpX3BhaywgdG9wLCBzbmRs
ZW4pOworCQkJdG9wID0gTlVMTDsKKwkJfSBlbHNlIHsKKwkJCSh2b2lkKVNDVFBfUkVMRUFTRV9I
RUFERVIoaV9wYWspOworCQl9CisJfSBlbHNlIHsKKwkJLyogVGhpcyBpcyB0byBoYW5kbGUgY2Fz
ZXMgd2hlbiB0b3AgaGFzCisJCSAqIGJlZW4gcmVzZXQgdG8gTlVMTCBidXQgcGFrIG1pZ2h0IG5v
dAorCQkgKiBiZSBmcmVlZAorCQkgKi8KKwkJaWYgKGlfcGFrKSB7CisJCQkodm9pZClTQ1RQX1JF
TEVBU0VfSEVBREVSKGlfcGFrKTsKKwkJfQorCX0KKyNlbmRpZgorCWlmICh0b3ApIHsKKwkJc2N0
cF9tX2ZyZWVtKHRvcCk7CisJfQorCWlmIChjb250cm9sKSB7CisJCXNjdHBfbV9mcmVlbShjb250
cm9sKTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKworLyoKKyAqIGdlbmVyYXRlIGFuIEFV
VEhlbnRpY2F0aW9uIGNodW5rLCBpZiByZXF1aXJlZAorICovCitzdHJ1Y3QgbWJ1ZiAqCitzY3Rw
X2FkZF9hdXRoX2NodW5rKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbWJ1ZiAqKm1fZW5kLAorICAg
IHN0cnVjdCBzY3RwX2F1dGhfY2h1bmsgKiphdXRoX3JldCwgdWludDMyX3QgKiBvZmZzZXQsCisg
ICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IGNodW5rKQoreworCXN0cnVjdCBtYnVm
ICptX2F1dGg7CisJc3RydWN0IHNjdHBfYXV0aF9jaHVuayAqYXV0aDsKKwlpbnQgY2h1bmtfbGVu
OworCXN0cnVjdCBtYnVmICpjbjsKKworCWlmICgobV9lbmQgPT0gTlVMTCkgfHwgKGF1dGhfcmV0
ID09IE5VTEwpIHx8IChvZmZzZXQgPT0gTlVMTCkgfHwKKwkgICAgKHN0Y2IgPT0gTlVMTCkpCisJ
CXJldHVybiAobSk7CisKKwlpZiAoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAwKSB7CisJ
CXJldHVybiAobSk7CisJfQorCS8qIGRvZXMgdGhlIHJlcXVlc3RlZCBjaHVuayByZXF1aXJlIGF1
dGg/ICovCisJaWYgKCFzY3RwX2F1dGhfaXNfcmVxdWlyZWRfY2h1bmsoY2h1bmssIHN0Y2ItPmFz
b2MucGVlcl9hdXRoX2NodW5rcykpIHsKKwkJcmV0dXJuIChtKTsKKwl9CisJbV9hdXRoID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZigqYXV0aCksIDAsIE1fTk9XQUlULCAxLCBNVF9IRUFE
RVIpOworCWlmIChtX2F1dGggPT0gTlVMTCkgeworCQkvKiBubyBtYnVmJ3MgKi8KKwkJcmV0dXJu
IChtKTsKKwl9CisJLyogcmVzZXJ2ZSBzb21lIHNwYWNlIGlmIHRoaXMgd2lsbCBiZSB0aGUgZmly
c3QgbWJ1ZiAqLworCWlmIChtID09IE5VTEwpCisJCVNDVFBfQlVGX1JFU1ZfVUYobV9hdXRoLCBT
Q1RQX01JTl9PVkVSSEVBRCk7CisJLyogZmlsbCBpbiB0aGUgQVVUSCBjaHVuayBkZXRhaWxzICov
CisJYXV0aCA9IG10b2QobV9hdXRoLCBzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rICopOworCW1lbXNl
dChhdXRoLCAwLCBzaXplb2YoKmF1dGgpKTsKKwlhdXRoLT5jaC5jaHVua190eXBlID0gU0NUUF9B
VVRIRU5USUNBVElPTjsKKwlhdXRoLT5jaC5jaHVua19mbGFncyA9IDA7CisJY2h1bmtfbGVuID0g
c2l6ZW9mKCphdXRoKSArCisJICAgIHNjdHBfZ2V0X2htYWNfZGlnZXN0X2xlbihzdGNiLT5hc29j
LnBlZXJfaG1hY19pZCk7CisJYXV0aC0+Y2guY2h1bmtfbGVuZ3RoID0gaHRvbnMoY2h1bmtfbGVu
KTsKKwlhdXRoLT5obWFjX2lkID0gaHRvbnMoc3RjYi0+YXNvYy5wZWVyX2htYWNfaWQpOworCS8q
IGtleSBpZCBhbmQgaG1hYyBkaWdlc3Qgd2lsbCBiZSBjb21wdXRlZCBhbmQgZmlsbGVkIGluIHVw
b24gc2VuZCAqLworCisJLyogc2F2ZSB0aGUgb2Zmc2V0IHdoZXJlIHRoZSBhdXRoIHdhcyBpbnNl
cnRlZCBpbnRvIHRoZSBjaGFpbiAqLworCSpvZmZzZXQgPSAwOworCWZvciAoY24gPSBtOyBjbjsg
Y24gPSBTQ1RQX0JVRl9ORVhUKGNuKSkgeworCQkqb2Zmc2V0ICs9IFNDVFBfQlVGX0xFTihjbik7
CisJfQorCisJLyogdXBkYXRlIGxlbmd0aCBhbmQgcmV0dXJuIHBvaW50ZXIgdG8gdGhlIGF1dGgg
Y2h1bmsgKi8KKwlTQ1RQX0JVRl9MRU4obV9hdXRoKSA9IGNodW5rX2xlbjsKKwltID0gc2N0cF9j
b3B5X21idWZjaGFpbihtX2F1dGgsIG0sIG1fZW5kLCAxLCBjaHVua19sZW4sIDApOworCWlmIChh
dXRoX3JldCAhPSBOVUxMKQorCQkqYXV0aF9yZXQgPSBhdXRoOworCisJcmV0dXJuIChtKTsKK30K
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZmRl
ZiBJTkVUNgoraW50CitzY3RwX3Y2c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNvY2thZGRyX2lu
NiAqc3JjNiwgc2N0cF9yb3V0ZV90ICpybykKK3sKKwlzdHJ1Y3QgbmRfcHJlZml4ICpwZnggPSBO
VUxMOworCXN0cnVjdCBuZF9wZnhyb3V0ZXIgKnBmeHJ0ciA9IE5VTEw7CisJc3RydWN0IHNvY2th
ZGRyX2luNiBndzY7CisKKwlpZiAocm8gPT0gTlVMTCB8fCByby0+cm9fcnQgPT0gTlVMTCB8fCBz
cmM2LT5zaW42X2ZhbWlseSAhPSBBRl9JTkVUNikKKwkJcmV0dXJuICgwKTsKKworCS8qIGdldCBw
cmVmaXggZW50cnkgb2YgYWRkcmVzcyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJTkQ2
X1JMT0NLKCk7CisjZW5kaWYKKwlMSVNUX0ZPUkVBQ0gocGZ4LCAmTU9EVUxFX0dMT0JBTChuZF9w
cmVmaXgpLCBuZHByX2VudHJ5KSB7CisJCWlmIChwZngtPm5kcHJfc3RhdGVmbGFncyAmIE5EUFJG
X0RFVEFDSEVEKQorCQkJY29udGludWU7CisJCWlmIChJTjZfQVJFX01BU0tFRF9BRERSX0VRVUFM
KCZwZngtPm5kcHJfcHJlZml4LnNpbjZfYWRkciwKKwkJICAgICZzcmM2LT5zaW42X2FkZHIsICZw
ZngtPm5kcHJfbWFzaykpCisJCQlicmVhazsKKwl9CisJLyogbm8gcHJlZml4IGVudHJ5IGluIHRo
ZSBwcmVmaXggbGlzdCAqLworCWlmIChwZnggPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisJCU5ENl9SVU5MT0NLKCk7CisjZW5kaWYKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09V
VFBVVDIsICJObyBwcmVmaXggZW50cnkgZm9yICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJV
R19PVVRQVVQyLCAoc3RydWN0IHNvY2thZGRyICopc3JjNik7CisJCXJldHVybiAoMCk7CisJfQor
CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDIsICJ2NnNyY19tYXRjaF9uZXh0aG9wKCksIFBy
ZWZpeCBlbnRyeSBpcyAiKTsKKwlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQVVQyLCAoc3Ry
dWN0IHNvY2thZGRyICopc3JjNik7CisKKwkvKiBzZWFyY2ggaW5zdGFsbGVkIGdhdGV3YXkgZnJv
bSBwcmVmaXggZW50cnkgKi8KKwlMSVNUX0ZPUkVBQ0gocGZ4cnRyLCAmcGZ4LT5uZHByX2FkdnJ0
cnMsIHBmcl9lbnRyeSkgeworCQltZW1zZXQoJmd3NiwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKTsKKwkJZ3c2LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42
X0xFTgorCQlndzYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5k
aWYKKwkJbWVtY3B5KCZndzYuc2luNl9hZGRyLCAmcGZ4cnRyLT5yb3V0ZXItPnJ0YWRkciwKKwkJ
ICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBV
VDIsICJwcmVmaXggcm91dGVyIGlzICIpOworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19PVVRQ
VVQyLCAoc3RydWN0IHNvY2thZGRyICopJmd3Nik7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQ
VVQyLCAiaW5zdGFsbGVkIHJvdXRlciBpcyAiKTsKKwkJU0NUUERCR19BRERSKFNDVFBfREVCVUdf
T1VUUFVUMiwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KTsKKwkJaWYgKHNjdHBfY21wYWRkcigoc3Ry
dWN0IHNvY2thZGRyICopJmd3Niwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KSkgeworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pCisJCQlORDZfUlVOTE9DSygpOworI2VuZGlmCisJCQlTQ1RQREJHKFND
VFBfREVCVUdfT1VUUFVUMiwgInBmeHJvdXRlciBpcyBpbnN0YWxsZWRcbiIpOworCQkJcmV0dXJu
ICgxKTsKKwkJfQorCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCU5ENl9SVU5MT0NLKCk7
CisjZW5kaWYKKwlTQ1RQREJHKFNDVFBfREVCVUdfT1VUUFVUMiwgInBmeHJvdXRlciBpcyBub3Qg
aW5zdGFsbGVkXG4iKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK2ludAorc2N0cF92NHNy
Y19tYXRjaF9uZXh0aG9wKHN0cnVjdCBzY3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybykK
K3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICpzaW4sICptYXNrOworCXN0cnVj
dCBpZmFkZHIgKmlmYTsKKwlzdHJ1Y3QgaW5fYWRkciBzcmNuZXRhZGRyLCBnd25ldGFkZHI7CisK
KwlpZiAocm8gPT0gTlVMTCB8fCByby0+cm9fcnQgPT0gTlVMTCB8fAorCSAgICBzaWZhLT5hZGRy
ZXNzLnNhLnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCXJldHVybiAoMCk7CisJfQorCWlmYSA9
IChzdHJ1Y3QgaWZhZGRyICopc2lmYS0+aWZhOworCW1hc2sgPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopKGlmYS0+aWZhX25ldG1hc2spOworCXNpbiA9ICZzaWZhLT5hZGRyZXNzLnNpbjsKKwlzcmNu
ZXRhZGRyLnNfYWRkciA9IChzaW4tPnNpbl9hZGRyLnNfYWRkciAmIG1hc2stPnNpbl9hZGRyLnNf
YWRkcik7CisJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICJtYXRjaF9uZXh0aG9wNDogc3Jj
IGFkZHJlc3MgaXMgIik7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgJnNpZmEt
PmFkZHJlc3Muc2EpOworCVNDVFBEQkcoU0NUUF9ERUJVR19PVVRQVVQxLCAibmV0d29yayBhZGRy
ZXNzIGlzICV4XG4iLCBzcmNuZXRhZGRyLnNfYWRkcik7CisKKwlzaW4gPSAoc3RydWN0IHNvY2th
ZGRyX2luICopcm8tPnJvX3J0LT5ydF9nYXRld2F5OworCWd3bmV0YWRkci5zX2FkZHIgPSAoc2lu
LT5zaW5fYWRkci5zX2FkZHIgJiBtYXNrLT5zaW5fYWRkci5zX2FkZHIpOworCVNDVFBEQkcoU0NU
UF9ERUJVR19PVVRQVVQxLCAibWF0Y2hfbmV4dGhvcDQ6IG5leHRob3AgaXMgIik7CisJU0NUUERC
R19BRERSKFNDVFBfREVCVUdfT1VUUFVUMiwgcm8tPnJvX3J0LT5ydF9nYXRld2F5KTsKKwlTQ1RQ
REJHKFNDVFBfREVCVUdfT1VUUFVUMSwgIm5ldHdvcmsgYWRkcmVzcyBpcyAleFxuIiwgZ3duZXRh
ZGRyLnNfYWRkcik7CisJaWYgKHNyY25ldGFkZHIuc19hZGRyID09IGd3bmV0YWRkci5zX2FkZHIp
IHsKKwkJcmV0dXJuICgxKTsKKwl9CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorI2VsaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorLyogVE9ETyBfX1VzZXJzcGFjZV9fIHZlcnNpb25zIG9mIHNj
dHBfdlhzcmNfbWF0Y2hfbmV4dGhvcCgpLiAqLworaW50CitzY3RwX3Y2c3JjX21hdGNoX25leHRo
b3Aoc3RydWN0IHNvY2thZGRyX2luNiAqc3JjNiwgc2N0cF9yb3V0ZV90ICpybykKK3sKKyAgICBy
ZXR1cm4gKDApOworfQoraW50CitzY3RwX3Y0c3JjX21hdGNoX25leHRob3Aoc3RydWN0IHNjdHBf
aWZhICpzaWZhLCBzY3RwX3JvdXRlX3QgKnJvKQoreworICAgIHJldHVybiAoMCk7Cit9CisKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0
LmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuaAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi41OTdkZGMzYmYzYTVjYjRlNGI4
OTAwOTYzZThkYWE4OGRkZTg1OTAzIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9vdXRwdXQuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9vdXRwdXQuaApAQCAtMCwwICsxLDI3MyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENp
c2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBh
KSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAq
ICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28g
U3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMu
aD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX291dHB1dC5oIDMy
Mzg2MSAyMDE3LTA5LTIxIDExOjU2OjMxWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYg
X05FVElORVRfU0NUUF9PVVRQVVRfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9PVVRQVVRfSF8K
KworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9oZWFkZXIuaD4KKworI2lmIGRlZmluZWQoX0tFUk5F
TCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCisKK3N0cnVjdCBtYnVmICoKK3NjdHBfYWRk
X2FkZHJlc3Nlc190b19pX2lhKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICBzdHJ1Y3Qgc2N0cF9z
Y29waW5nICpzY29wZSwKKwkJCSAgIHN0cnVjdCBtYnVmICptX2F0LAorCQkJICAgaW50IGNudF9p
bml0c190bywKKwkJCSAgIHVpbnQxNl90ICpwYWRkaW5nX2xlbiwgdWludDE2X3QgKmNodW5rX2xl
bik7CisKKworaW50IHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc2N0cF9pZmEgKik7CisKKworaW50CitzY3RwX2lzX2FkZHJlc3NfaW5fc2NvcGUoc3Ry
dWN0IHNjdHBfaWZhICppZmEsCisgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c2NvcGluZyAqc2NvcGUsCisJCQkgaW50IGRvX3VwZGF0ZSk7CisKK2ludAorc2N0cF9pc19hZGRy
X2luX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKTsKKwor
c3RydWN0IHNjdHBfaWZhICoKK3NjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsCisJCQkgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQkgICAg
ICBzY3RwX3JvdXRlX3QgKnJvLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCQkgICAgICBpbnQg
bm9uX2Fzb2NfYWRkcl9vaywgdWludDMyX3QgdnJmX2lkKTsKKworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitp
bnQKK3NjdHBfdjZzcmNfbWF0Y2hfbmV4dGhvcChzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzcmM2LCBz
Y3RwX3JvdXRlX3QgKnJvKTsKK2ludAorc2N0cF92NHNyY19tYXRjaF9uZXh0aG9wKHN0cnVjdCBz
Y3RwX2lmYSAqc2lmYSwgc2N0cF9yb3V0ZV90ICpybyk7CisjZW5kaWYKKwordm9pZCBzY3RwX3Nl
bmRfaW5pdGlhdGUoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosIGludAor
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
CisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICk7CisKK3ZvaWQKK3NjdHBfc2VuZF9pbml0
aWF0ZV9hY2soc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IG1idWYgKiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAg
c3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBfaW5pdF9jaHVuayAqLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LAor
I2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisKK3N0
cnVjdCBtYnVmICoKK3NjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoc3RydWN0
IG1idWYgKiwgaW50LCBpbnQgKiwKKwkJCQkgICAgICBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqLCBp
bnQgKik7Cit2b2lkIHNjdHBfcXVldWVfb3BfZXJyKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qg
bWJ1ZiAqKTsKKworaW50CitzY3RwX3NlbmRfY29va2llX2VjaG8oc3RydWN0IG1idWYgKiwgaW50
LCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lkIHNj
dHBfc2VuZF9jb29raWVfYWNrKHN0cnVjdCBzY3RwX3RjYiAqKTsKKwordm9pZAorc2N0cF9zZW5k
X2hlYXJ0YmVhdF9hY2soc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBtYnVmICosIGludCwgaW50
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfcmVtb3ZlX2Zyb21fd2hl
ZWwoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJCQkgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYywKKwkJCQkJICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgaW50IGhvbGRz
X2xvY2spOworCisKK3ZvaWQgc2N0cF9zZW5kX3NodXRkb3duKHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lkIHNjdHBfc2VuZF9zaHV0ZG93bl9hY2soc3RydWN0
IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQgc2N0cF9zZW5kX3NodXRk
b3duX2NvbXBsZXRlKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCk7
CisKK3ZvaWQgc2N0cF9zZW5kX3NodXRkb3duX2NvbXBsZXRlMihzdHJ1Y3Qgc29ja2FkZHIgKiwg
c3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBoZHIgKiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKKyNlbmRpZgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7CisK
K3ZvaWQgc2N0cF9zZW5kX2FzY29uZihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0
cyAqLCBpbnQgYWRkcl9sb2NrZWQpOworCit2b2lkIHNjdHBfc2VuZF9hc2NvbmZfYWNrKHN0cnVj
dCBzY3RwX3RjYiAqKTsKKworaW50IHNjdHBfZ2V0X2ZyYWdfcG9pbnQoc3RydWN0IHNjdHBfdGNi
ICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfdG9zc19vbGRfY29v
a2llcyhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKik7CisKK3Zv
aWQgc2N0cF90b3NzX29sZF9hc2NvbmYoc3RydWN0IHNjdHBfdGNiICopOworCit2b2lkIHNjdHBf
Zml4X2Vjbl9lY2hvKHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfbW92
ZV9jaHVua3NfZnJvbV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQpOworCisKKyNkZWZpbmUgU0NUUF9EQVRBX0NIVU5LX09WRVJIRUFEKHN0Y2IpICgoc3Rj
YiktPmFzb2MuaWRhdGFfc3VwcG9ydGVkID8gXAorCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfaWRh
dGFfY2h1bmspIDogXAorCQkJCQlzaXplb2Yoc3RydWN0IHNjdHBfZGF0YV9jaHVuaykpCisKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK2lu
dAorc2N0cF9vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0
IHNvY2thZGRyICosCisgICAgc3RydWN0IG1idWYgKiwgc3RydWN0IHRocmVhZCAqLCBpbnQpOwor
I2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNi
ICosIHN0cnVjdCBtYnVmICosIHN0cnVjdCBzb2NrYWRkciAqLAorICAgIHN0cnVjdCBtYnVmICos
IFBLVEhSRUFELCBpbnQpOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisvKiBz
Y3RwX291dHB1dCBpcyBjYWxsZWQgYnUgc2N0cF9zZW5kbS4gTm90IHVzaW5nIHNjdHBfc2VuZG0g
Zm9yIF9fVXNlcnNwYWNlX18gKi8KKyNlbmRpZgoraW50CitzY3RwX291dHB1dChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqLAorI2lmIGRlZmluZWQoX19QYW5kYV9fKQorICAgIHBha2hhbmRsZV90eXBlLAor
I2Vsc2UKKyAgICBzdHJ1Y3QgbWJ1ZiAqLAorI2VuZGlmCisgICAgc3RydWN0IHNvY2thZGRyICos
CisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisgICAgcGFraGFuZGxlX3R5cGUsCisjZWxzZQorICAg
IHN0cnVjdCBtYnVmICosCisjZW5kaWYKKyAgICBzdHJ1Y3QgcHJvYyAqLCBpbnQpOworI2VuZGlm
CisKK3ZvaWQgc2N0cF9jaHVua19vdXRwdXQoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNj
dHBfdGNiICosIGludCwgaW50CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChT
Q1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKTsKK3Zv
aWQgc2N0cF9zZW5kX2Fib3J0X3RjYihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IG1idWYgKiwg
aW50CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKTsKKwordm9pZCBzZW5kX2Zvcndh
cmRfdHNuKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqKTsKKwor
dm9pZCBzY3RwX3NlbmRfc2FjayhzdHJ1Y3Qgc2N0cF90Y2IgKiwgaW50KTsKKwordm9pZCBzY3Rw
X3NlbmRfaGIoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50KTsKKwor
dm9pZCBzY3RwX3NlbmRfZWNuX2VjaG8oc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25l
dHMgKiwgdWludDMyX3QpOworCisKK3ZvaWQKK3NjdHBfc2VuZF9wYWNrZXRfZHJvcHBlZChzdHJ1
Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfbmV0cyAqLCBzdHJ1Y3QgbWJ1ZiAqLAorICAgIGlu
dCwgaW50LCBpbnQpOworCisKKwordm9pZCBzY3RwX3NlbmRfY3dyKHN0cnVjdCBzY3RwX3RjYiAq
LCBzdHJ1Y3Qgc2N0cF9uZXRzICosIHVpbnQzMl90LCB1aW50OF90KTsKKworCit2b2lkCitzY3Rw
X2FkZF9zdHJlYW1fcmVzZXRfcmVzdWx0KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwgdWludDMy
X3QsIHVpbnQzMl90KTsKKwordm9pZAorc2N0cF9zZW5kX2RlZmVycmVkX3Jlc2V0X3Jlc3BvbnNl
KHN0cnVjdCBzY3RwX3RjYiAqLAorCQkJCSAgc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2xpc3Qg
KiwKKwkJCQkgIGludCk7CisKK3ZvaWQKK3NjdHBfYWRkX3N0cmVhbV9yZXNldF9yZXN1bHRfdHNu
KHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKK2ludAorc2N0cF9z
ZW5kX3N0cmVhbV9yZXNldF9vdXRfaWZfcG9zc2libGUoc3RydWN0IHNjdHBfdGNiICosIGludCk7
CisKK2ludAorc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3RydWN0IHNjdHBfdGNiICosIHVpbnQx
Nl90ICwgdWludDE2X3QgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QsIHVpbnQ4
X3QsIHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MTZfdCwgdWludDhfdCk7CisKK3ZvaWQKK3NjdHBf
c2VuZF9hYm9ydChzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qg
c29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqLCB1aW50MzJfdCwg
c3RydWN0IG1idWYgKiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAg
IHVpbnQ4X3QsIHVpbnQzMl90LCB1aW50MTZfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgIHVp
bnQzMl90LCB1aW50MTZfdCk7CisKK3ZvaWQgc2N0cF9zZW5kX29wZXJyX3RvKHN0cnVjdCBzb2Nr
YWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwaGRyICosIHVpbnQzMl90LCBzdHJ1Y3QgbWJ1ZiAqLAorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50MzJfdCwgdWludDE2
X3QsCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90LCB1aW50MTZfdCk7
CisKKyNlbmRpZiAvKiBfS0VSTkVMIHx8IF9fVXNlcnNwYWNlX18gKi8KKworI2lmIGRlZmluZWQo
X0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwX3Nvc2VuZChzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IHVp
byAqdWlvLAorI2lmZGVmIF9fUGFuZGFfXworICAgIHBha2hhbmRsZV90eXBlIHRvcCwKKyAgICBw
YWtoYW5kbGVfdHlwZSBjb250cm9sLAorI2Vsc2UKKyAgICBzdHJ1Y3QgbWJ1ZiAqdG9wLAorICAg
IHN0cnVjdCBtYnVmICpjb250cm9sLAorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19QYW5kYV9fKQorICAgIGludCBmbGFncworI2Vsc2UKKyAgICBpbnQgZmxhZ3Ms
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAw
CisgICAgc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKyAgICBQ
S1RIUkVBRCBwCisjZWxzZQorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKiBwcm9j
IGlzIGEgZHVtbXkgaW4gX19Vc2Vyc3BhY2VfXyBhbmQgd2lsbCBub3QgYmUgcGFzc2VkIHRvIHNj
dHBfbG93ZXJfc29zZW5kICovCisjZW5kaWYKKyAgICBzdHJ1Y3QgcHJvYyAqcAorI2VuZGlmCisj
ZW5kaWYKKyk7CisKKyNlbmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGNiLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4u
ZjhkZDAyNDBhZjM1NWY1NTBlZDFhZWY4YWEzOGY3ZTg3MTNmNmM4MiAxMDA3NTUKLS0tIGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKQEAgLTAsMCArMSw4MjI4IEBACisvKi0KKyAqIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDEtMjAwOCwgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUg
bmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3Nj
dHBfcGNiLmMgMzM0NTMyIDIwMTgtMDYtMDIgMTY6Mjg6MTBaIHR1ZXhlbiAkIik7CisjZW5kaWYK
KworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vcy5oPgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5j
bHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4K
KyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0
aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfdGltZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYnNk
X2FkZHIuaD4KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSAxMDAwMDAwCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2R0cmFjZV9kZWZpbmUuaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKyNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19XaW5kb3dzKQorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNl
bmRpZgorI2lmZGVmIElORVQ2CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2luY2x1ZGUg
InVzZXJfaXA2X3Zhci5oIgorI2Vsc2UKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+Cisj
ZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaW5jbHVkZSA8c3lzL3Nj
aGVkLmg+CisjaW5jbHVkZSA8c3lzL3NtcC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDx1c2VyX3NvY2tldHZh
ci5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0
ZGIuaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUg
QVBQTEVfRklMRV9OTyA0CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorVk5FVF9ERUZJTkUoc3RydWN0IHNjdHBfYmFzZV9p
bmZvLCBzeXN0ZW1fYmFzZV9pbmZvKTsKKyNlbHNlCitzdHJ1Y3Qgc2N0cF9iYXNlX2luZm8gc3lz
dGVtX2Jhc2VfaW5mbzsKKyNlbmRpZgorCisvKiBGSVg6IHdlIGRvbid0IGhhbmRsZSBtdWx0aXBs
ZSBsaW5rIGxvY2FsIHNjb3BlcyAqLworLyogInNjb3BlbGVzcyIgcmVwbGFjZW1lbnQgSU42X0FS
RV9BRERSX0VRVUFMICovCisjaWZkZWYgSU5FVDYKK2ludAorU0NUUDZfQVJFX0FERFJfRVFVQUwo
c3RydWN0IHNvY2thZGRyX2luNiAqYSwgc3RydWN0IHNvY2thZGRyX2luNiAqYikKK3sKKyNpZmRl
ZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0
IGluNl9hZGRyIHRtcF9hLCB0bXBfYjsKKworCXRtcF9hID0gYS0+c2luNl9hZGRyOworI2lmIGRl
ZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwlpZiAo
aW42X2VtYmVkc2NvcGUoJnRtcF9hLCBhLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisjZWxzZQorCWlm
IChpbjZfZW1iZWRzY29wZSgmdG1wX2EsIGEsIE5VTEwsIE5VTEwsIE5VTEwpICE9IDApIHsKKyNl
bmRpZgorCQlyZXR1cm4gKDApOworCX0KKwl0bXBfYiA9IGItPnNpbjZfYWRkcjsKKyNpZiBkZWZp
bmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJaWYgKGlu
Nl9lbWJlZHNjb3BlKCZ0bXBfYiwgYiwgTlVMTCwgTlVMTCkgIT0gMCkgeworI2Vsc2UKKwlpZiAo
aW42X2VtYmVkc2NvcGUoJnRtcF9iLCBiLCBOVUxMLCBOVUxMLCBOVUxMKSAhPSAwKSB7CisjZW5k
aWYKKwkJcmV0dXJuICgwKTsKKwl9CisJcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9h
LCAmdG1wX2IpKTsKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCXN0cnVjdCBzb2NrYWRkcl9p
bjYgdG1wX2EsIHRtcF9iOworCisJbWVtY3B5KCZ0bXBfYSwgYSwgc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpKTsKKwlpZiAoc2E2X2VtYmVkc2NvcGUoJnRtcF9hLCBNT0RVTEVfR0xPQkFMKGlw
Nl91c2VfZGVmem9uZSkpICE9IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJbWVtY3B5KCZ0bXBf
YiwgYiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlpZiAoc2E2X2VtYmVkc2NvcGUo
JnRtcF9iLCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDApIHsKKwkJcmV0dXJu
ICgwKTsKKwl9CisJcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJnRtcF9hLnNpbjZfYWRkciwg
JnRtcF9iLnNpbjZfYWRkcikpOworI2Vsc2UKKwlzdHJ1Y3QgaW42X2FkZHIgdG1wX2EsIHRtcF9i
OworCisJdG1wX2EgPSBhLT5zaW42X2FkZHI7CisJaWYgKGluNl9lbWJlZHNjb3BlKCZ0bXBfYSwg
YSkgIT0gMCkgeworCQlyZXR1cm4gKDApOworCX0KKwl0bXBfYiA9IGItPnNpbjZfYWRkcjsKKwlp
ZiAoaW42X2VtYmVkc2NvcGUoJnRtcF9iLCBiKSAhPSAwKSB7CisJCXJldHVybiAoMCk7CisJfQor
CXJldHVybiAoSU42X0FSRV9BRERSX0VRVUFMKCZ0bXBfYSwgJnRtcF9iKSk7CisjZW5kaWYKKyNl
bHNlCisJcmV0dXJuIChJTjZfQVJFX0FERFJfRVFVQUwoJihhLT5zaW42X2FkZHIpLCAmKGItPnNp
bjZfYWRkcikpKTsKKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCit9CisjZW5k
aWYKKwordm9pZAorc2N0cF9maWxsX3BjYmluZm8oc3RydWN0IHNjdHBfcGNiaW5mbyAqc3BjYikK
K3sKKwkvKgorCSAqIFdlIHJlYWxseSBkb24ndCBuZWVkIHRvIGxvY2sgdGhpcywgYnV0IEkgd2ls
bCBqdXN0IGJlY2F1c2UgaXQKKwkgKiBkb2VzIG5vdCBodXJ0LgorCSAqLworCVNDVFBfSU5QX0lO
Rk9fUkxPQ0soKTsKKwlzcGNiLT5lcF9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9l
cCk7CisJc3BjYi0+YXNvY19jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9hc29jKTsK
KwlzcGNiLT5sYWRkcl9jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkcik7CisJ
c3BjYi0+cmFkZHJfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpOworCXNw
Y2ItPmNoa19jb3VudCA9IFNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9jaHVuayk7CisJc3BjYi0+
cmVhZHFfY291bnQgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmVhZHEpOworCXNwY2ItPnN0
cmVhbV9vcXVlID0gU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3N0cm1vcSk7CisJc3BjYi0+ZnJl
ZV9jaHVua3MgPSBTQ1RQX0JBU0VfSU5GTyhpcGlfZnJlZV9jaHVua3MpOworCVNDVFBfSU5QX0lO
Rk9fUlVOTE9DSygpOworfQorCisvKi0KKyAqIEFkZHJlc3NlcyBhcmUgYWRkZWQgdG8gVlJGJ3Mg
KFZpcnR1YWwgUm91dGVyJ3MpLiBGb3IgQlNEIHdlCisgKiBoYXZlIG9ubHkgdGhlIGRlZmF1bHQg
VlJGIDAuIFdlIG1haW50YWluIGEgaGFzaCBsaXN0IG9mCisgKiBWUkYncy4gRWFjaCBWUkYgaGFz
IGl0cyBvd24gbGlzdCBvZiBzY3RwX2lmbidzLiBFYWNoIG9mCisgKiB0aGVzZSBoYXMgYSBsaXN0
IG9mIGFkZHJlc3Nlcy4gV2hlbiB3ZSBhZGQgYSBuZXcgYWRkcmVzcworICogdG8gYSBWUkYgd2Ug
bG9va3VwIHRoZSBpZm4vaWZuX2luZGV4LCBpZiB0aGUgaWZuIGRvZXMKKyAqIG5vdCBleGlzdCB3
ZSBjcmVhdGUgaXQgYW5kIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBJRk4ncworICogd2l0aGluIHRo
ZSBWUkYuIE9uY2Ugd2UgaGF2ZSB0aGUgc2N0cF9pZm4sIHdlIGFkZCB0aGUKKyAqIGFkZHJlc3Mg
dG8gdGhlIGxpc3QuIFNvIHdlIGxvb2sgc29tZXRoaW5nIGxpa2U6CisgKgorICogaGFzaC12cmYt
dGFibGUKKyAqICAgdnJmLT4gaWZuLT4gaWZuIC0+IGlmbgorICogICB2cmYgICAgfAorICogICAg
Li4uICAgKy0taWZhLT4gaWZhIC0+IGlmYQorICogICB2cmYKKyAqCisgKiBXZSBrZWVwIHRoZXNl
IHNlcGFyYXRlIGxpc3RzIHNpbmNlIHRoZSBTQ1RQIHN1YnN5c3RlbSB3aWxsCisgKiBwb2ludCB0
byB0aGVzZSBmcm9tIGl0cyBzb3VyY2UgYWRkcmVzcyBzZWxlY3Rpb24gbmV0cyBzdHJ1Y3R1cmUu
CisgKiBXaGVuIGFuIGFkZHJlc3MgaXMgZGVsZXRlZCBpdCBkb2VzIG5vdCBoYXBwZW4gcmlnaHQg
YXdheSBvbgorICogdGhlIFNDVFAgc2lkZSwgaXQgZ2V0cyBzY2hlZHVsZWQuIFdoYXQgd2UgZG8g
d2hlbiBhCisgKiBkZWxldGUgaGFwcGVucyBpcyBpbW1lZGlhdGVseSByZW1vdmUgdGhlIGFkZHJl
c3MgZnJvbQorICogdGhlIG1hc3RlciBsaXN0IGFuZCBkZWNyZW1lbnQgdGhlIHJlZmNvdW50LiBB
cyBvdXIKKyAqIGFkZGlwIGl0ZXJhdG9yIHdvcmtzIHRocm91Z2ggYW5kIGZyZWVzIHRoZSBzcmMg
YWRkcmVzcworICogc2VsZWN0aW9uIHBvaW50aW5nIHRvIHRoZSBzY3RwX2lmYSwgZXZlbnR1YWxs
eSB0aGUgcmVmY291bnQKKyAqIHdpbGwgcmVhY2ggMCBhbmQgd2Ugd2lsbCBkZWxldGUgaXQuIE5v
dGUgdGhhdCBpdCBpcyBhc3N1bWVkCisgKiB0aGF0IGFueSBsb2NraW5nIG9uIHN5c3RlbSBsZXZl
bCBpZm4vaWZhIGlzIGRvbmUgYXQgdGhlCisgKiBjYWxsZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGFu
ZCB0aGVzZSByb3V0aW5lcyB3aWxsIG9ubHkKKyAqIGxvY2sgdGhlIFNDVFAgc3RydWN0dXJlcyBh
cyB0aGV5IGFkZCBvciBkZWxldGUgdGhpbmdzLgorICoKKyAqIE90aGVyIG5vdGVzIG9uIFZSRiBj
b25jZXB0cy4KKyAqICAtIEFuIGVuZHBvaW50IGNhbiBiZSBpbiBtdWx0aXBsZSBWUkYncworICog
IC0gQW4gYXNzb2NpYXRpb24gbGl2ZXMgd2l0aGluIGEgVlJGIGFuZCBvbmx5IG9uZSBWUkYuCisg
KiAgLSBBbnkgaW5jb21pbmcgcGFja2V0IHdlIGNhbiBkZWR1Y2UgdGhlIFZSRiBmb3IgYnkKKyAq
ICAgIGxvb2tpbmcgYXQgdGhlIG1idWYvcGFrIGluYm91bmQgKGZvciBCU0QgaXRzIFZSRj0wIDpE
KQorICogIC0gQW55IGRvd253YXJkIHNlbmQgY2FsbCBvciBjb25uZWN0IGNhbGwgbXVzdCBzdXBw
bHkgdGhlCisgKiAgICBWUkYgdmlhIGFuY2lsbGFyeSBkYXRhIG9yIHZpYSBzb21lIHNvcnQgb2Yg
c2V0IGRlZmF1bHQKKyAqICAgIFZSRiBzb2NrZXQgb3B0aW9uIGNhbGwgKGFnYWluIGZvciBCU0Qg
bm8gYnJhaW5lciBzaW5jZQorICogICAgdGhlIFZSRiBpcyBhbHdheXMgMCkuCisgKiAgLSBBbiBl
bmRwb2ludCBtYXkgYWRkIG11bHRpcGxlIFZSRidzIHRvIGl0LgorICogIC0gTGlzdGVuaW5nIHNv
Y2tldHMgY2FuIGFjY2VwdCBhc3NvY2lhdGlvbnMgaW4gYW55CisgKiAgICBvZiB0aGUgVlJGJ3Mg
dGhleSBhcmUgaW4gYnV0IHRoZSBhc3NvYyB3aWxsIGVuZCB1cAorICogICAgaW4gb25seSBvbmUg
VlJGIChnb3R0ZW4gZnJvbSB0aGUgcGFja2V0IG9yIGNvbm5lY3Qvc2VuZCkuCisgKgorICovCisK
K3N0cnVjdCBzY3RwX3ZyZiAqCitzY3RwX2FsbG9jYXRlX3ZyZihpbnQgdnJmX2lkKQoreworCXN0
cnVjdCBzY3RwX3ZyZiAqdnJmID0gTlVMTDsKKwlzdHJ1Y3Qgc2N0cF92cmZsaXN0ICpidWNrZXQ7
CisKKwkvKiBGaXJzdCBhbGxvY2F0ZSB0aGUgVlJGIHN0cnVjdHVyZSAqLworCXZyZiA9IHNjdHBf
ZmluZF92cmYodnJmX2lkKTsKKwlpZiAodnJmKSB7CisJCS8qIEFscmVhZHkgYWxsb2NhdGVkICov
CisJCXJldHVybiAodnJmKTsKKwl9CisJU0NUUF9NQUxMT0ModnJmLCBzdHJ1Y3Qgc2N0cF92cmYg
Kiwgc2l6ZW9mKHN0cnVjdCBzY3RwX3ZyZiksCisJCSAgICBTQ1RQX01fVlJGKTsKKwlpZiAodnJm
ID09IE5VTEwpIHsKKwkJLyogTm8gbWVtb3J5ICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5p
YygiTm8gbWVtb3J5IGZvciBWUkY6JWQiLCB2cmZfaWQpOworI2VuZGlmCisJCXJldHVybiAoTlVM
TCk7CisJfQorCS8qIHNldHVwIHRoZSBWUkYgKi8KKwltZW1zZXQodnJmLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfdnJmKSk7CisJdnJmLT52cmZfaWQgPSB2cmZfaWQ7CisJTElTVF9JTklUKCZ2cmYt
Pmlmbmxpc3QpOworCXZyZi0+dG90YWxfaWZhX2NvdW50ID0gMDsKKwl2cmYtPnJlZmNvdW50ID0g
MDsKKwkvKiBub3cgYWxzbyBzZXR1cCB0YWJsZSBpZHMgKi8KKwlTQ1RQX0lOSVRfVlJGX1RBQkxF
SUQodnJmKTsKKwkvKiBJbml0IHRoZSBIQVNIIG9mIGFkZHJlc3NlcyAqLworCXZyZi0+dnJmX2Fk
ZHJfaGFzaCA9IFNDVFBfSEFTSF9JTklUKFNDVFBfVlJGX0FERFJfSEFTSF9TSVpFLAorCQkJCQkg
ICAgJnZyZi0+dnJmX2FkZHJfaGFzaG1hcmspOworCWlmICh2cmYtPnZyZl9hZGRyX2hhc2ggPT0g
TlVMTCkgeworCQkvKiBObyBtZW1vcnkgKi8KKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJO
byBtZW1vcnkgZm9yIFZSRjolZCIsIHZyZl9pZCk7CisjZW5kaWYKKwkJU0NUUF9GUkVFKHZyZiwg
U0NUUF9NX1ZSRik7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJLyogQWRkIGl0IHRvIHRoZSBo
YXNoIHRhYmxlICovCisJYnVja2V0ID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdnJmaGFzaClbKHZy
Zl9pZCAmIFNDVFBfQkFTRV9JTkZPKGhhc2h2cmZtYXJrKSldOworCUxJU1RfSU5TRVJUX0hFQUQo
YnVja2V0LCB2cmYsIG5leHRfdnJmKTsKKwlhdG9taWNfYWRkX2ludCgmU0NUUF9CQVNFX0lORk8o
aXBpX2NvdW50X3ZyZnMpLCAxKTsKKwlyZXR1cm4gKHZyZik7Cit9CisKKworc3RydWN0IHNjdHBf
aWZuICoKK3NjdHBfZmluZF9pZm4odm9pZCAqaWZuLCB1aW50MzJfdCBpZm5faW5kZXgpCit7CisJ
c3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7CisJc3RydWN0IHNjdHBfaWZubGlzdCAqaGFzaF9p
Zm5faGVhZDsKKworCS8qIFdlIGFzc3VtZSB0aGUgbG9jayBpcyBoZWxkIGZvciB0aGUgYWRkcmVz
c2VzCisJICogaWYgdGhhdCdzIHdyb25nIHByb2JsZW1zIGNvdWxkIG9jY3VyIDotKQorCSAqLwor
CWhhc2hfaWZuX2hlYWQgPSAmU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNoKVsoaWZuX2luZGV4
ICYgU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNobWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0goc2N0
cF9pZm5wLCBoYXNoX2lmbl9oZWFkLCBuZXh0X2J1Y2tldCkgeworCQlpZiAoc2N0cF9pZm5wLT5p
Zm5faW5kZXggPT0gaWZuX2luZGV4KSB7CisJCQlyZXR1cm4gKHNjdHBfaWZucCk7CisJCX0KKwkJ
aWYgKHNjdHBfaWZucC0+aWZuX3AgJiYgaWZuICYmIChzY3RwX2lmbnAtPmlmbl9wID09IGlmbikp
IHsKKwkJCXJldHVybiAoc2N0cF9pZm5wKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQor
CisKK3N0cnVjdCBzY3RwX3ZyZiAqCitzY3RwX2ZpbmRfdnJmKHVpbnQzMl90IHZyZl9pZCkKK3sK
KwlzdHJ1Y3Qgc2N0cF92cmZsaXN0ICpidWNrZXQ7CisJc3RydWN0IHNjdHBfdnJmICpsaXN0ZTsK
KworCWJ1Y2tldCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3ZyZmhhc2gpWyh2cmZfaWQgJiBTQ1RQ
X0JBU0VfSU5GTyhoYXNodnJmbWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0gobGlzdGUsIGJ1Y2tldCwg
bmV4dF92cmYpIHsKKwkJaWYgKHZyZl9pZCA9PSBsaXN0ZS0+dnJmX2lkKSB7CisJCQlyZXR1cm4g
KGxpc3RlKTsKKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK3ZvaWQKK3NjdHBfZnJl
ZV92cmYoc3RydWN0IHNjdHBfdnJmICp2cmYpCit7CisJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9D
SEVDS19SRUZDT1VOVCgmdnJmLT5yZWZjb3VudCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodnJm
LT52cmZfYWRkcl9oYXNoKSB7CisgICAgICAgICAgICAgICAgICAgIFNDVFBfSEFTSF9GUkVFKHZy
Zi0+dnJmX2FkZHJfaGFzaCwgdnJmLT52cmZfYWRkcl9oYXNobWFyayk7CisgICAgICAgICAgICAg
ICAgICAgIHZyZi0+dnJmX2FkZHJfaGFzaCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfQorCQkv
KiBXZSB6ZXJvJ2QgdGhlIGNvdW50ICovCisJCUxJU1RfUkVNT1ZFKHZyZiwgbmV4dF92cmYpOwor
CQlTQ1RQX0ZSRUUodnJmLCBTQ1RQX01fVlJGKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NU
UF9CQVNFX0lORk8oaXBpX2NvdW50X3ZyZnMpLCAxKTsKKwl9Cit9CisKKwordm9pZAorc2N0cF9m
cmVlX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCkKK3sKKwlpZiAoU0NUUF9ERUNSRU1F
TlRfQU5EX0NIRUNLX1JFRkNPVU5UKCZzY3RwX2lmbnAtPnJlZmNvdW50KSkgeworCQkvKiBXZSB6
ZXJvJ2QgdGhlIGNvdW50ICovCisJCWlmIChzY3RwX2lmbnAtPnZyZikgeworCQkJc2N0cF9mcmVl
X3ZyZihzY3RwX2lmbnAtPnZyZik7CisJCX0KKwkJU0NUUF9GUkVFKHNjdHBfaWZucCwgU0NUUF9N
X0lGTik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9p
Zm5zKSwgMSk7CisJfQorfQorCisKK3ZvaWQKK3NjdHBfdXBkYXRlX2lmbl9tdHUodWludDMyX3Qg
aWZuX2luZGV4LCB1aW50MzJfdCBtdHUpCit7CisJc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnA7
CisKKwlzY3RwX2lmbnAgPSBzY3RwX2ZpbmRfaWZuKCh2b2lkICopTlVMTCwgaWZuX2luZGV4KTsK
KwlpZiAoc2N0cF9pZm5wICE9IE5VTEwpIHsKKwkJc2N0cF9pZm5wLT5pZm5fbXR1ID0gbXR1Owor
CX0KK30KKworCit2b2lkCitzY3RwX2ZyZWVfaWZhKHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFw
KQoreworCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoJnNjdHBfaWZhcC0+
cmVmY291bnQpKSB7CisJCS8qIFdlIHplcm8nZCB0aGUgY291bnQgKi8KKwkJaWYgKHNjdHBfaWZh
cC0+aWZuX3ApIHsKKwkJCXNjdHBfZnJlZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCk7CisJCX0KKwkJ
U0NUUF9GUkVFKHNjdHBfaWZhcCwgU0NUUF9NX0lGQSk7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQo
JlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9pZmFzKSwgMSk7CisJfQorfQorCisKK3N0YXRpYyB2
b2lkCitzY3RwX2RlbGV0ZV9pZm4oc3RydWN0IHNjdHBfaWZuICpzY3RwX2lmbnAsIGludCBob2xk
X2FkZHJfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9pZm4gKmZvdW5kOworCisJZm91bmQgPSBzY3Rw
X2ZpbmRfaWZuKHNjdHBfaWZucC0+aWZuX3AsIHNjdHBfaWZucC0+aWZuX2luZGV4KTsKKwlpZiAo
Zm91bmQgPT0gTlVMTCkgeworCQkvKiBOb3QgaW4gdGhlIGxpc3QuLiBzb3JyeSAqLworCQlyZXR1
cm47CisJfQorCWlmIChob2xkX2FkZHJfbG9jayA9PSAwKQorCQlTQ1RQX0lQSV9BRERSX1dMT0NL
KCk7CisJTElTVF9SRU1PVkUoc2N0cF9pZm5wLCBuZXh0X2J1Y2tldCk7CisJTElTVF9SRU1PVkUo
c2N0cF9pZm5wLCBuZXh0X2lmbik7CisJU0NUUF9ERVJFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lm
bnAtPmlmbl9pbmRleCwKKwkJCQkgIHNjdHBfaWZucC0+cmVnaXN0ZXJlZF9hZik7CisJaWYgKGhv
bGRfYWRkcl9sb2NrID09IDApCisJCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCS8qIFRha2Ug
YXdheSB0aGUgcmVmZXJlbmNlLCBhbmQgcG9zc2libHkgZnJlZSBpdCAqLworCXNjdHBfZnJlZV9p
Zm4oc2N0cF9pZm5wKTsKK30KKworCit2b2lkCitzY3RwX21hcmtfaWZhX2FkZHJfZG93bih1aW50
MzJfdCB2cmZfaWQsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCWNvbnN0IGNoYXIgKmlmX25h
bWUsIHVpbnQzMl90IGlmbl9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1
Y3Qgc2N0cF9pZmEgKnNjdHBfaWZhcDsKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYg
PSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0I0LCAiQ2FuJ3QgZmluZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJ
Z290byBvdXQ7CisKKwl9CisJc2N0cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIs
IHZyZi0+dnJmX2lkLCBTQ1RQX0FERFJfTE9DS0VEKTsKKwlpZiAoc2N0cF9pZmFwID09IE5VTEwp
IHsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHNjdHBfaWZhcCBmb3Ig
YWRkcmVzc1xuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoc2N0cF9pZmFwLT5pZm5fcCA9PSBO
VUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIGhhcyBubyBJRk4gLSBjYW4n
dCBtYXJrIHVudXNhYmxlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpZl9uYW1lKSB7CisJ
CWlmIChzdHJuY21wKGlmX25hbWUsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lG
TkFNU0laKSAhPSAwKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIklGTiAlcyBvZiBJ
RkEgbm90IHRoZSBzYW1lIGFzICVzXG4iLAorCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1l
LCBpZl9uYW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfaWZh
cC0+aWZuX3AtPmlmbl9pbmRleCAhPSBpZm5faW5kZXgpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJV
R19QQ0I0LCAiSUZBIG93bmVkIGJ5IGlmbl9pbmRleDolZCBkb3duIGNvbW1hbmQgZm9yIGlmbl9p
bmRleDolZCAtIGlnbm9yZWRcbiIsCisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBp
Zm5faW5kZXgpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlzY3RwX2lmYXAtPmxvY2FsaWZh
X2ZsYWdzICY9ICh+U0NUUF9BRERSX1ZBTElEKTsKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdz
IHw9IFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFOworIG91dDoKKwlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKK30KKworCit2b2lkCitzY3RwX21hcmtfaWZhX2FkZHJfdXAodWludDMyX3QgdnJmX2lk
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmlmX25hbWUsIHVp
bnQzMl90IGlmbl9pbmRleCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0
cF9pZmEgKnNjdHBfaWZhcDsKKworCVNDVFBfSVBJX0FERFJfUkxPQ0soKTsKKwl2cmYgPSBzY3Rw
X2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9E
RUJVR19QQ0I0LCAiQ2FuJ3QgZmluZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBv
dXQ7CisKKwl9CisJc2N0cF9pZmFwID0gc2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHZyZi0+
dnJmX2lkLCBTQ1RQX0FERFJfTE9DS0VEKTsKKwlpZiAoc2N0cF9pZmFwID09IE5VTEwpIHsKKwkJ
U0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJDYW4ndCBmaW5kIHNjdHBfaWZhcCBmb3IgYWRkcmVz
c1xuIik7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoc2N0cF9pZmFwLT5pZm5fcCA9PSBOVUxMKSB7
CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiSUZBIGhhcyBubyBJRk4gLSBjYW4ndCBtYXJr
IHVudXNhYmxlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChpZl9uYW1lKSB7CisJCWlmIChz
dHJuY21wKGlmX25hbWUsIHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBTQ1RQX0lGTkFNU0la
KSAhPSAwKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIklGTiAlcyBvZiBJRkEgbm90
IHRoZSBzYW1lIGFzICVzXG4iLAorCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9uYW1lLCBpZl9u
YW1lKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKHNjdHBfaWZhcC0+aWZu
X3AtPmlmbl9pbmRleCAhPSBpZm5faW5kZXgpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiSUZBIG93bmVkIGJ5IGlmbl9pbmRleDolZCBkb3duIGNvbW1hbmQgZm9yIGlmbl9pbmRleDol
ZCAtIGlnbm9yZWRcbiIsCisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+aWZuX2luZGV4LCBpZm5faW5k
ZXgpOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdz
ICY9ICh+U0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpOworCXNjdHBfaWZhcC0+bG9jYWxpZmFfZmxh
Z3MgfD0gU0NUUF9BRERSX1ZBTElEOworIG91dDoKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsK
K30KKworCisvKi0KKyAqIEFkZCBhbiBpZmEgdG8gYW4gaWZuLgorICogUmVnaXN0ZXIgdGhlIGlu
dGVyZmFjZSBhcyBuZWNlc3NhcnkuCisgKiBOT1RFOiBBRERSIHdyaXRlIGxvY2sgTVVTVCBiZSBo
ZWxkLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9hZGRfaWZhX3RvX2lmbihzdHJ1Y3Qgc2N0cF9p
Zm4gKnNjdHBfaWZucCwgc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCit7CisJaW50IGlmYV9h
ZjsKKworCUxJU1RfSU5TRVJUX0hFQUQoJnNjdHBfaWZucC0+aWZhbGlzdCwgc2N0cF9pZmFwLCBu
ZXh0X2lmYSk7CisJc2N0cF9pZmFwLT5pZm5fcCA9IHNjdHBfaWZucDsKKwlhdG9taWNfYWRkX2lu
dCgmc2N0cF9pZmFwLT5pZm5fcC0+cmVmY291bnQsIDEpOworCS8qIHVwZGF0ZSBhZGRyZXNzIGNv
dW50cyAqLworCXNjdHBfaWZucC0+aWZhX2NvdW50Kys7CisJaWZhX2FmID0gc2N0cF9pZmFwLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseTsKKwlzd2l0Y2ggKGlmYV9hZikgeworI2lmZGVmIElORVQKKwlj
YXNlIEFGX0lORVQ6CisJCXNjdHBfaWZucC0+bnVtX3Y0Kys7CisJCWJyZWFrOworI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlzY3RwX2lmbnAtPm51bV92NisrOworCQli
cmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlpZiAoc2N0cF9pZm5wLT5p
ZmFfY291bnQgPT0gMSkgeworCQkvKiByZWdpc3RlciB0aGUgbmV3IGludGVyZmFjZSAqLworCQlT
Q1RQX1JFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmbnAtPmlmbl9pbmRleCwgaWZhX2FmKTsKKwkJ
c2N0cF9pZm5wLT5yZWdpc3RlcmVkX2FmID0gaWZhX2FmOworCX0KK30KKworCisvKi0KKyAqIFJl
bW92ZSBhbiBpZmEgZnJvbSBpdHMgaWZuLgorICogSWYgbm8gbW9yZSBhZGRyZXNzZXMgZXhpc3Qs
IHJlbW92ZSB0aGUgaWZuIHRvby4gT3RoZXJ3aXNlLCByZS1yZWdpc3RlcgorICogdGhlIGludGVy
ZmFjZSBiYXNlZCBvbiB0aGUgcmVtYWluaW5nIGFkZHJlc3MgZmFtaWxpZXMgbGVmdC4KKyAqIE5P
VEU6IEFERFIgd3JpdGUgbG9jayBNVVNUIGJlIGhlbGQuCisgKi8KK3N0YXRpYyB2b2lkCitzY3Rw
X3JlbW92ZV9pZmFfZnJvbV9pZm4oc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApCit7CisJTElT
VF9SRU1PVkUoc2N0cF9pZmFwLCBuZXh0X2lmYSk7CisJaWYgKHNjdHBfaWZhcC0+aWZuX3ApIHsK
KwkJLyogdXBkYXRlIGFkZHJlc3MgY291bnRzICovCisJCXNjdHBfaWZhcC0+aWZuX3AtPmlmYV9j
b3VudC0tOworCQlzd2l0Y2ggKHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNjdHBfaWZhcC0+aWZuX3AtPm51bV92NC0t
OworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJ
c2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y2LS07CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoTElTVF9FTVBUWSgmc2N0cF9pZmFwLT5pZm5fcC0+
aWZhbGlzdCkpIHsKKwkJCS8qIHJlbW92ZSB0aGUgaWZuLCBwb3NzaWJseSBmcmVlaW5nIGl0ICov
CisJCQlzY3RwX2RlbGV0ZV9pZm4oc2N0cF9pZmFwLT5pZm5fcCwgU0NUUF9BRERSX0xPQ0tFRCk7
CisJCX0gZWxzZSB7CisJCQkvKiByZS1yZWdpc3RlciBhZGRyZXNzIGZhbWlseSB0eXBlLCBpZiBu
ZWVkZWQgKi8KKwkJCWlmICgoc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y2ID09IDApICYmCisJCQkg
ICAgKHNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPT0gQUZfSU5FVDYpKSB7CisJCQkJ
U0NUUF9ERVJFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgsIEFG
X0lORVQ2KTsKKwkJCQlTQ1RQX1JFR0lTVEVSX0lOVEVSRkFDRShzY3RwX2lmYXAtPmlmbl9wLT5p
Zm5faW5kZXgsIEFGX0lORVQpOworCQkJCXNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYg
PSBBRl9JTkVUOworCQkJfSBlbHNlIGlmICgoc2N0cF9pZmFwLT5pZm5fcC0+bnVtX3Y0ID09IDAp
ICYmCisJCQkJICAgKHNjdHBfaWZhcC0+aWZuX3AtPnJlZ2lzdGVyZWRfYWYgPT0gQUZfSU5FVCkp
IHsKKwkJCQlTQ1RQX0RFUkVHSVNURVJfSU5URVJGQUNFKHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9p
bmRleCwgQUZfSU5FVCk7CisJCQkJU0NUUF9SRUdJU1RFUl9JTlRFUkZBQ0Uoc2N0cF9pZmFwLT5p
Zm5fcC0+aWZuX2luZGV4LCBBRl9JTkVUNik7CisJCQkJc2N0cF9pZmFwLT5pZm5fcC0+cmVnaXN0
ZXJlZF9hZiA9IEFGX0lORVQ2OworCQkJfQorCQkJLyogZnJlZSB0aGUgaWZuIHJlZmNvdW50ICov
CisJCQlzY3RwX2ZyZWVfaWZuKHNjdHBfaWZhcC0+aWZuX3ApOworCQl9CisJCXNjdHBfaWZhcC0+
aWZuX3AgPSBOVUxMOworCX0KK30KKworCitzdHJ1Y3Qgc2N0cF9pZmEgKgorc2N0cF9hZGRfYWRk
cl90b192cmYodWludDMyX3QgdnJmX2lkLCB2b2lkICppZm4sIHVpbnQzMl90IGlmbl9pbmRleCwK
KwkJICAgICB1aW50MzJfdCBpZm5fdHlwZSwgY29uc3QgY2hhciAqaWZfbmFtZSwgdm9pZCAqaWZh
LAorCQkgICAgIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgaWZhX2ZsYWdzLAorCQkg
ICAgIGludCBkeW5hbWljX2FkZCkKK3sKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qg
c2N0cF9pZm4gKnNjdHBfaWZucCA9IE5VTEw7CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXAg
PSBOVUxMOworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKmhhc2hfYWRkcl9oZWFkOworCXN0cnVjdCBz
Y3RwX2lmbmxpc3QgKmhhc2hfaWZuX2hlYWQ7CisJdWludDMyX3QgaGFzaF9vZl9hZGRyOworCWlu
dCBuZXdfaWZuX2FmID0gMDsKKworI2lmZGVmIFNDVFBfREVCVUcKKwlTQ1RQREJHKFNDVFBfREVC
VUdfUENCNCwgInZyZl9pZCAweCV4OiBhZGRpbmcgYWRkcmVzczogIiwgdnJmX2lkKTsKKwlTQ1RQ
REJHX0FERFIoU0NUUF9ERUJVR19QQ0I0LCBhZGRyKTsKKyNlbmRpZgorCVNDVFBfSVBJX0FERFJf
V0xPQ0soKTsKKwlzY3RwX2lmbnAgPSBzY3RwX2ZpbmRfaWZuKGlmbiwgaWZuX2luZGV4KTsKKwlp
ZiAoc2N0cF9pZm5wKSB7CisJCXZyZiA9IHNjdHBfaWZucC0+dnJmOworCX0gZWxzZSB7CisJCXZy
ZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwkJaWYgKHZyZiA9PSBOVUxMKSB7CisJCQl2cmYg
PSBzY3RwX2FsbG9jYXRlX3ZyZih2cmZfaWQpOworCQkJaWYgKHZyZiA9PSBOVUxMKSB7CisJCQkJ
U0NUUF9JUElfQUREUl9XVU5MT0NLKCk7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQor
CX0KKwlpZiAoc2N0cF9pZm5wID09IE5VTEwpIHsKKwkJLyogYnVpbGQgb25lIGFuZCBhZGQgaXQs
IGNhbid0IGhvbGQgbG9jaworCQkgKiB1bnRpbCBhZnRlciBtYWxsb2MgZG9uZSB0aG91Z2guCisJ
CSAqLworCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwkJU0NUUF9NQUxMT0Moc2N0cF9pZm5w
LCBzdHJ1Y3Qgc2N0cF9pZm4gKiwKKwkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfaWZuKSwgU0NU
UF9NX0lGTik7CisJCWlmIChzY3RwX2lmbnAgPT0gTlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCXBhbmljKCJObyBtZW1vcnkgZm9yIElGTiIpOworI2VuZGlmCisJCQlyZXR1cm4gKE5VTEwp
OworCQl9CisJCW1lbXNldChzY3RwX2lmbnAsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZm4pKTsK
KwkJc2N0cF9pZm5wLT5pZm5faW5kZXggPSBpZm5faW5kZXg7CisJCXNjdHBfaWZucC0+aWZuX3Ag
PSBpZm47CisJCXNjdHBfaWZucC0+aWZuX3R5cGUgPSBpZm5fdHlwZTsKKwkJc2N0cF9pZm5wLT5y
ZWZjb3VudCA9IDA7CisJCXNjdHBfaWZucC0+dnJmID0gdnJmOworCQlhdG9taWNfYWRkX2ludCgm
dnJmLT5yZWZjb3VudCwgMSk7CisJCXNjdHBfaWZucC0+aWZuX210dSA9IFNDVFBfR0FUSEVSX01U
VV9GUk9NX0lGTl9JTkZPKGlmbiwgaWZuX2luZGV4LCBhZGRyLT5zYV9mYW1pbHkpOworCQlpZiAo
aWZfbmFtZSAhPSBOVUxMKSB7CisJCQlzbnByaW50ZihzY3RwX2lmbnAtPmlmbl9uYW1lLCBTQ1RQ
X0lGTkFNU0laLCAiJXMiLCBpZl9uYW1lKTsKKwkJfSBlbHNlIHsKKwkJCXNucHJpbnRmKHNjdHBf
aWZucC0+aWZuX25hbWUsIFNDVFBfSUZOQU1TSVosICIlcyIsICJ1bmtub3duIik7CisJCX0KKwkJ
aGFzaF9pZm5faGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2gpWyhpZm5faW5kZXgg
JiBTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSldOworCQlMSVNUX0lOSVQoJnNjdHBf
aWZucC0+aWZhbGlzdCk7CisJCVNDVFBfSVBJX0FERFJfV0xPQ0soKTsKKwkJTElTVF9JTlNFUlRf
SEVBRChoYXNoX2lmbl9oZWFkLCBzY3RwX2lmbnAsIG5leHRfYnVja2V0KTsKKwkJTElTVF9JTlNF
UlRfSEVBRCgmdnJmLT5pZm5saXN0LCBzY3RwX2lmbnAsIG5leHRfaWZuKTsKKwkJYXRvbWljX2Fk
ZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9pZm5zKSwgMSk7CisJCW5ld19pZm5fYWYg
PSAxOworCX0KKwlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJmLT52
cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOworCWlmIChzY3RwX2lmYXApIHsKKwkJLyogSG1tLCBp
dCBhbHJlYWR5IGV4aXN0cz8gKi8KKwkJaWYgKChzY3RwX2lmYXAtPmlmbl9wKSAmJgorCQkgICAg
KHNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCA9PSBpZm5faW5kZXgpKSB7CisJCQlTQ1RQREJH
KFNDVFBfREVCVUdfUENCNCwgIlVzaW5nIGV4aXN0aW5nIGlmbiAlcyAoMHgleCkgZm9yIGlmYSAl
cFxuIiwKKwkJCQlzY3RwX2lmYXAtPmlmbl9wLT5pZm5fbmFtZSwgaWZuX2luZGV4LAorCQkJCSh2
b2lkICopc2N0cF9pZmFwKTsKKwkJCWlmIChuZXdfaWZuX2FmKSB7CisJCQkJLyogUmVtb3ZlIHRo
ZSBjcmVhdGVkIG9uZSB0aGF0IHdlIGRvbid0IHdhbnQgKi8KKwkJCQlzY3RwX2RlbGV0ZV9pZm4o
c2N0cF9pZm5wLCBTQ1RQX0FERFJfTE9DS0VEKTsKKwkJCX0KKwkJCWlmIChzY3RwX2lmYXAtPmxv
Y2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxFVEVEKSB7CisJCQkJLyogZWFzeSB0byBzb2x2
ZSwganVzdCBzd2l0Y2ggYmFjayB0byBhY3RpdmUgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
UENCNCwgIkNsZWFyaW5nIGRlbGV0ZWQgaWZhIGZsYWdcbiIpOworCQkJCXNjdHBfaWZhcC0+bG9j
YWxpZmFfZmxhZ3MgPSBTQ1RQX0FERFJfVkFMSUQ7CisJCQkJc2N0cF9pZmFwLT5pZm5fcCA9IHNj
dHBfaWZucDsKKwkJCQlhdG9taWNfYWRkX2ludCgmc2N0cF9pZmFwLT5pZm5fcC0+cmVmY291bnQs
IDEpOworCQkJfQorCQlleGl0X3N0YWdlX2xlZnQ6CisJCQlTQ1RQX0lQSV9BRERSX1dVTkxPQ0so
KTsKKwkJCXJldHVybiAoc2N0cF9pZmFwKTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzY3RwX2lmYXAt
Pmlmbl9wKSB7CisJCQkJLyoKKwkJCQkgKiBUaGUgbGFzdCBJRk4gZ2V0cyB0aGUgYWRkcmVzcywg
cmVtb3ZlIHRoZQorCQkJCSAqIG9sZCBvbmUKKwkJCQkgKi8KKwkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfUENCNCwgIk1vdmluZyBpZmEgJXAgZnJvbSAlcyAoMHgleCkgdG8gJXMgKDB4JXgpXG4iLAor
CQkJCQkodm9pZCAqKXNjdHBfaWZhcCwgc2N0cF9pZmFwLT5pZm5fcC0+aWZuX25hbWUsCisJCQkJ
CXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgaWZfbmFtZSwKKwkJCQkJaWZuX2luZGV4KTsK
KwkJCQkvKiByZW1vdmUgdGhlIGFkZHJlc3MgZnJvbSB0aGUgb2xkIGlmbiAqLworCQkJCXNjdHBf
cmVtb3ZlX2lmYV9mcm9tX2lmbihzY3RwX2lmYXApOworCQkJCS8qIG1vdmUgdGhlIGFkZHJlc3Mg
b3ZlciB0byB0aGUgbmV3IGlmbiAqLworCQkJCXNjdHBfYWRkX2lmYV90b19pZm4oc2N0cF9pZm5w
LCBzY3RwX2lmYXApOworCQkJCWdvdG8gZXhpdF9zdGFnZV9sZWZ0OworCQkJfSBlbHNlIHsKKwkJ
CQkvKiByZXBhaXIgaWZucCB3aGljaCB3YXMgTlVMTCA/ICovCisJCQkJc2N0cF9pZmFwLT5sb2Nh
bGlmYV9mbGFncyA9IFNDVFBfQUREUl9WQUxJRDsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENC
NCwgIlJlcGFpcmluZyBpZm4gJXAgZm9yIGlmYSAlcFxuIiwKKwkJCQkJKHZvaWQgKilzY3RwX2lm
bnAsICh2b2lkICopc2N0cF9pZmFwKTsKKwkJCQlzY3RwX2FkZF9pZmFfdG9faWZuKHNjdHBfaWZu
cCwgc2N0cF9pZmFwKTsKKwkJCX0KKwkJCWdvdG8gZXhpdF9zdGFnZV9sZWZ0OworCQl9CisJfQor
CVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCVNDVFBfTUFMTE9DKHNjdHBfaWZhcCwgc3RydWN0
IHNjdHBfaWZhICosIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZmEpLCBTQ1RQX01fSUZBKTsKKwlpZiAo
c2N0cF9pZmFwID09IE5VTEwpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXBhbmljKCJObyBtZW1v
cnkgZm9yIElGQSIpOworI2VuZGlmCisJCXJldHVybiAoTlVMTCk7CisJfQorCW1lbXNldChzY3Rw
X2lmYXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9pZmEpKTsKKwlzY3RwX2lmYXAtPmlmbl9wID0g
c2N0cF9pZm5wOworCWF0b21pY19hZGRfaW50KCZzY3RwX2lmbnAtPnJlZmNvdW50LCAxKTsKKwlz
Y3RwX2lmYXAtPnZyZl9pZCA9IHZyZl9pZDsKKwlzY3RwX2lmYXAtPmlmYSA9IGlmYTsKKyNpZmRl
ZiBIQVZFX1NBX0xFTgorCW1lbWNweSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBhZGRyLT5z
YV9sZW4pOworI2Vsc2UKKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisJCW1lbWNweSgmc2N0cF9pZmFwLT5hZGRyZXNzLCBhZGRyLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYK
KwljYXNlIEFGX0lORVQ2OgorCQltZW1jcHkoJnNjdHBfaWZhcC0+YWRkcmVzcywgYWRkciwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoJnNjdHBfaWZhcC0+YWRk
cmVzcywgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCWJyZWFrOworI2Vu
ZGlmCisJZGVmYXVsdDoKKwkJLyogVFNOSCAqLworCQlicmVhazsKKwl9CisjZW5kaWYKKwlzY3Rw
X2lmYXAtPmxvY2FsaWZhX2ZsYWdzID0gU0NUUF9BRERSX1ZBTElEIHwgU0NUUF9BRERSX0RFRkVS
X1VTRTsKKwlzY3RwX2lmYXAtPmZsYWdzID0gaWZhX2ZsYWdzOworCS8qIFNldCBzY29wZSAqLwor
CXN3aXRjaCAoc2N0cF9pZmFwLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwljYXNlIEFGX0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQlzaW4g
PSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjsKKwkJaWYgKFNDVFBfSUZOX0lTX0lGVF9MT09QKHNj
dHBfaWZhcC0+aWZuX3ApIHx8CisJCSAgICAoSU40X0lTTE9PUEJBQ0tfQUREUkVTUygmc2luLT5z
aW5fYWRkcikpKSB7CisJCQlzY3RwX2lmYXAtPnNyY19pc19sb29wID0gMTsKKwkJfQorCQlpZiAo
KElONF9JU1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQlzY3RwX2lmYXAt
PnNyY19pc19wcml2ID0gMTsKKwkJfQorCQlzY3RwX2lmbnAtPm51bV92NCsrOworCQlpZiAobmV3
X2lmbl9hZikKKwkJICAgIG5ld19pZm5fYWYgPSBBRl9JTkVUOworCQlicmVhazsKKwl9CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQkvKiBvayB0byB1c2UgZGVw
cmVjYXRlZCBhZGRyZXNzZXM/ICovCisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJ
c2luNiA9ICZzY3RwX2lmYXAtPmFkZHJlc3Muc2luNjsKKwkJaWYgKFNDVFBfSUZOX0lTX0lGVF9M
T09QKHNjdHBfaWZhcC0+aWZuX3ApIHx8CisJCSAgICAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnNp
bjYtPnNpbjZfYWRkcikpKSB7CisJCQlzY3RwX2lmYXAtPnNyY19pc19sb29wID0gMTsKKwkJfQor
CQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlzY3Rw
X2lmYXAtPnNyY19pc19wcml2ID0gMTsKKwkJfQorCQlzY3RwX2lmbnAtPm51bV92NisrOworCQlp
ZiAobmV3X2lmbl9hZikKKwkJCW5ld19pZm5fYWYgPSBBRl9JTkVUNjsKKwkJYnJlYWs7CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJaWYg
KG5ld19pZm5fYWYpCisJCQluZXdfaWZuX2FmID0gQUZfQ09OTjsKKwkJYnJlYWs7CisjZW5kaWYK
KwlkZWZhdWx0OgorCQluZXdfaWZuX2FmID0gMDsKKwkJYnJlYWs7CisJfQorCWhhc2hfb2ZfYWRk
ciA9IHNjdHBfZ2V0X2lmYV9oYXNoX3ZhbCgmc2N0cF9pZmFwLT5hZGRyZXNzLnNhKTsKKworCWlm
ICgoc2N0cF9pZmFwLT5zcmNfaXNfcHJpdiA9PSAwKSAmJgorCSAgICAoc2N0cF9pZmFwLT5zcmNf
aXNfbG9vcCA9PSAwKSkgeworCQlzY3RwX2lmYXAtPnNyY19pc19nbG9iID0gMTsKKwl9CisJU0NU
UF9JUElfQUREUl9XTE9DSygpOworCWhhc2hfYWRkcl9oZWFkID0gJnZyZi0+dnJmX2FkZHJfaGFz
aFsoaGFzaF9vZl9hZGRyICYgdnJmLT52cmZfYWRkcl9oYXNobWFyayldOworCUxJU1RfSU5TRVJU
X0hFQUQoaGFzaF9hZGRyX2hlYWQsIHNjdHBfaWZhcCwgbmV4dF9idWNrZXQpOworCXNjdHBfaWZh
cC0+cmVmY291bnQgPSAxOworCUxJU1RfSU5TRVJUX0hFQUQoJnNjdHBfaWZucC0+aWZhbGlzdCwg
c2N0cF9pZmFwLCBuZXh0X2lmYSk7CisJc2N0cF9pZm5wLT5pZmFfY291bnQrKzsKKwl2cmYtPnRv
dGFsX2lmYV9jb3VudCsrOworCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291
bnRfaWZhcyksIDEpOworCWlmIChuZXdfaWZuX2FmKSB7CisJCVNDVFBfUkVHSVNURVJfSU5URVJG
QUNFKGlmbl9pbmRleCwgbmV3X2lmbl9hZik7CisJCXNjdHBfaWZucC0+cmVnaXN0ZXJlZF9hZiA9
IG5ld19pZm5fYWY7CisJfQorCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCWlmIChkeW5hbWlj
X2FkZCkgeworCQkvKiBCdW1wIHVwIHRoZSByZWZjb3VudCBzbyB0aGF0IHdoZW4gdGhlIHRpbWVy
CisJCSAqIGNvbXBsZXRlcyBpdCB3aWxsIGRyb3AgYmFjayBkb3duLgorCQkgKi8KKwkJc3RydWN0
IHNjdHBfbGFkZHIgKndpOworCisJCWF0b21pY19hZGRfaW50KCZzY3RwX2lmYXAtPnJlZmNvdW50
LCAxKTsKKwkJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2xhZGRy
KSwgc3RydWN0IHNjdHBfbGFkZHIpOworCQlpZiAod2kgPT0gTlVMTCkgeworCQkJLyoKKwkJCSAq
IEdhaywgd2hhdCBjYW4gd2UgZG8/IFdlIGhhdmUgbG9zdCBhbiBhZGRyZXNzCisJCQkgKiBjaGFu
Z2UgY2FuIHlvdSBzYXkgSE9TRUQ/CisJCQkgKi8KKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0
LCAiTG9zdCBhbiBhZGRyZXNzIGNoYW5nZT9cbiIpOworCQkJLyogT3BwcywgbXVzdCBkZWNyZW1l
bnQgdGhlIGNvdW50ICovCisJCQlzY3RwX2RlbF9hZGRyX2Zyb21fdnJmKHZyZl9pZCwgYWRkciwg
aWZuX2luZGV4LAorCQkJCQkgICAgICAgaWZfbmFtZSk7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9
CisJCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOworCQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kp
KTsKKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJndpLT5zdGFydF90aW1lKTsKKwkJd2kt
PmlmYSA9IHNjdHBfaWZhcDsKKwkJd2ktPmFjdGlvbiA9IFNDVFBfQUREX0lQX0FERFJFU1M7CisK
KwkJU0NUUF9XUV9BRERSX0xPQ0soKTsKKwkJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lO
Rk8oYWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfQUREUl9XUSwKKwkJCQkgKHN0cnVjdCBzY3RwX2lucGNiICopTlVMTCwKKwkJ
CQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF9uZXRzICopTlVM
TCk7CisJCVNDVFBfV1FfQUREUl9VTkxPQ0soKTsKKwl9IGVsc2UgeworCQkvKiBpdCdzIHJlYWR5
IGZvciB1c2UgKi8KKwkJc2N0cF9pZmFwLT5sb2NhbGlmYV9mbGFncyAmPSB+U0NUUF9BRERSX0RF
RkVSX1VTRTsKKwl9CisJcmV0dXJuIChzY3RwX2lmYXApOworfQorCit2b2lkCitzY3RwX2RlbF9h
ZGRyX2Zyb21fdnJmKHVpbnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkg
ICAgICAgdWludDMyX3QgaWZuX2luZGV4LCBjb25zdCBjaGFyICppZl9uYW1lKQoreworCXN0cnVj
dCBzY3RwX3ZyZiAqdnJmOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwID0gTlVMTDsKKwor
CVNDVFBfSVBJX0FERFJfV0xPQ0soKTsKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJ
aWYgKHZyZiA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0I0LCAiQ2FuJ3QgZmlu
ZCB2cmZfaWQgMHgleFxuIiwgdnJmX2lkKTsKKwkJZ290byBvdXRfbm93OworCX0KKworI2lmZGVm
IFNDVFBfREVCVUcKKwlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgInZyZl9pZCAweCV4OiBkZWxl
dGluZyBhZGRyZXNzOiIsIHZyZl9pZCk7CisJU0NUUERCR19BRERSKFNDVFBfREVCVUdfUENCNCwg
YWRkcik7CisjZW5kaWYKKwlzY3RwX2lmYXAgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwg
dnJmLT52cmZfaWQsIFNDVFBfQUREUl9MT0NLRUQpOworCWlmIChzY3RwX2lmYXApIHsKKwkJLyog
VmFsaWRhdGUgdGhlIGRlbGV0ZSAqLworCQlpZiAoc2N0cF9pZmFwLT5pZm5fcCkgeworCQkJaW50
IHZhbGlkID0gMDsKKwkJCS8qLQorCQkJICogVGhlIG5hbWUgaGFzIHByaW9yaXR5IG92ZXIgdGhl
IGlmbl9pbmRleAorCQkJICogaWYgaXRzIGdpdmVuLiBXZSBkbyB0aGlzIGVzcGVjaWFsbHkgZm9y
CisJCQkgKiBwYW5kYSB3aG8gbWlnaHQgcmVjeWNsZSBpbmRleGVzIGZhc3QuCisJCQkgKi8KKwkJ
CWlmIChpZl9uYW1lKSB7CisJCQkJaWYgKHN0cm5jbXAoaWZfbmFtZSwgc2N0cF9pZmFwLT5pZm5f
cC0+aWZuX25hbWUsIFNDVFBfSUZOQU1TSVopID09IDApIHsKKwkJCQkJLyogVGhleSBtYXRjaCBp
dHMgYSBjb3JyZWN0IGRlbGV0ZSAqLworCQkJCQl2YWxpZCA9IDE7CisJCQkJfQorCQkJfQorCQkJ
aWYgKCF2YWxpZCkgeworCQkJCS8qIGxhc3QgZGl0Y2ggY2hlY2sgaWZuX2luZGV4ICovCisJCQkJ
aWYgKGlmbl9pbmRleCA9PSBzY3RwX2lmYXAtPmlmbl9wLT5pZm5faW5kZXgpIHsKKwkJCQkJdmFs
aWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWlmICghdmFsaWQpIHsKKwkJCQlTQ1RQREJHKFNDVFBf
REVCVUdfUENCNCwgImlmbjolZCBpZm5hbWU6JXMgZG9lcyBub3QgbWF0Y2ggYWRkcmVzc2VzXG4i
LAorCQkJCQlpZm5faW5kZXgsICgoaWZfbmFtZSA9PSBOVUxMKSA/ICJOVUxMIiA6IGlmX25hbWUp
KTsKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgImlmbjolZCBpZm5hbWU6JXMgLSBpZ25v
cmluZyBkZWxldGVcbiIsCisJCQkJCXNjdHBfaWZhcC0+aWZuX3AtPmlmbl9pbmRleCwgc2N0cF9p
ZmFwLT5pZm5fcC0+aWZuX25hbWUpOworCQkJCVNDVFBfSVBJX0FERFJfV1VOTE9DSygpOworCQkJ
CXJldHVybjsKKwkJCX0KKwkJfQorCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCNCwgIkRlbGV0aW5n
IGlmYSAlcFxuIiwgKHZvaWQgKilzY3RwX2lmYXApOworCQlzY3RwX2lmYXAtPmxvY2FsaWZhX2Zs
YWdzICY9IFNDVFBfQUREUl9WQUxJRDsKKyAgICAgICAgICAgICAgICAvKgorCQkgKiBXZSBkb24n
dCBzZXQgdGhlIGZsYWcuIFRoaXMgbWVhbnMgdGhhdCB0aGUgc3RydWN0dXJlIHdpbGwKKwkJICog
aGFuZyBhcm91bmQgaW4gRVAncyB0aGF0IGhhdmUgYm91bmQgc3BlY2lmaWMgdG8gaXQgdW50aWwK
KwkJICogdGhleSBjbG9zZS4gVGhpcyBnaXZlcyB1cyBUQ1AgbGlrZSBiZWhhdmlvciBpZiBzb21l
b25lCisJCSAqIHJlbW92ZXMgYW4gYWRkcmVzcyAob3IgZm9yIHRoYXQgbWF0dGVyIGFkZHMgaXQg
cmlnaHQgYmFjaykuCisJCSAqLworCQkvKiBzY3RwX2lmYXAtPmxvY2FsaWZhX2ZsYWdzIHw9IFND
VFBfQkVJTkdfREVMRVRFRDsgKi8KKwkJdnJmLT50b3RhbF9pZmFfY291bnQtLTsKKwkJTElTVF9S
RU1PVkUoc2N0cF9pZmFwLCBuZXh0X2J1Y2tldCk7CisJCXNjdHBfcmVtb3ZlX2lmYV9mcm9tX2lm
bihzY3RwX2lmYXApOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJZWxzZSB7CisJCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0I0LCAiRGVsIEFkZHItaWZuOiVkIENvdWxkIG5vdCBmaW5kIGFkZHJlc3M6
IiwKKwkJCWlmbl9pbmRleCk7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjEsIGFkZHIp
OworCX0KKyNlbmRpZgorCisgb3V0X25vdzoKKwlTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKTsKKwlp
ZiAoc2N0cF9pZmFwKSB7CisJCXN0cnVjdCBzY3RwX2xhZGRyICp3aTsKKworCQl3aSA9IFNDVFBf
Wk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRk
cik7CisJCWlmICh3aSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBk
bz8gV2UgaGF2ZSBsb3N0IGFuIGFkZHJlc3MKKwkJCSAqIGNoYW5nZSBjYW4geW91IHNheSBIT1NF
RD8KKwkJCSAqLworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjQsICJMb3N0IGFuIGFkZHJlc3Mg
Y2hhbmdlP1xuIik7CisKKwkJCS8qIE9vcHMsIG11c3QgZGVjcmVtZW50IHRoZSBjb3VudCAqLwor
CQkJc2N0cF9mcmVlX2lmYShzY3RwX2lmYXApOworCQkJcmV0dXJuOworCQl9CisJCVNDVFBfSU5D
Ul9MQUREUl9DT1VOVCgpOworCQltZW1zZXQod2ksIDAsIHNpemVvZigqd2kpKTsKKwkJKHZvaWQp
U0NUUF9HRVRUSU1FX1RJTUVWQUwoJndpLT5zdGFydF90aW1lKTsKKwkJd2ktPmlmYSA9IHNjdHBf
aWZhcDsKKwkJd2ktPmFjdGlvbiA9IFNDVFBfREVMX0lQX0FERFJFU1M7CisJCVNDVFBfV1FfQURE
Ul9MT0NLKCk7CisJCS8qCisJCSAqIFNob3VsZCB0aGlzIHJlYWxseSBiZSBhIHRhaWxxPyBBcyBp
dCBpcyB3ZSB3aWxsIHByb2Nlc3MgdGhlCisJCSAqIG5ld2VzdCBmaXJzdCA6LTAKKwkJICovCisJ
CUxJU1RfSU5TRVJUX0hFQUQoJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3EpLCB3aSwgc2N0cF9ueHRf
YWRkcik7CisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCisJCQkJ
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxM
LAorCQkJCSAoc3RydWN0IHNjdHBfbmV0cyAqKU5VTEwpOworCQlTQ1RQX1dRX0FERFJfVU5MT0NL
KCk7CisJfQorCXJldHVybjsKK30KKworCitzdGF0aWMgaW50CitzY3RwX2RvZXNfc3RjYl9vd25f
dGhpc19hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNvY2thZGRyICp0bykKK3sK
KwlpbnQgbG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWludCBpcHY0X2xvY2Fs
X3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCWlu
dCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7CisjZW5kaWYKKwlz
dHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZuOworCXN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmE7CisKKwlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Muc2Nv
cGUubG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWlwdjRfbG9jYWxfc2NvcGUg
PSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJaXB2NF9hZGRyX2xlZ2FsID0g
c3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElO
RVQ2KQorCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsKKwlzaXRl
X3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCWlwdjZfYWRkcl9sZWdhbCA9
IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9h
ZGRyX2xlZ2FsOworI2VuZGlmCisKKwlTQ1RQX0lQSV9BRERSX1JMT0NLKCk7CisJdnJmID0gc2N0
cF9maW5kX3ZyZihzdGNiLT5hc29jLnZyZl9pZCk7CisJaWYgKHZyZiA9PSBOVUxMKSB7CisJCS8q
IG5vIHZyZiwgbm8gYWRkcmVzc2VzICovCisJCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCQly
ZXR1cm4gKDApOworCX0KKworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5s
aXN0LCBuZXh0X2lmbikgeworCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgorCQkJICAg
IFNDVFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJCWNvbnRpbnVlOworCQkJfQor
CQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7
CisJCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIHNjdHBfaWZhKSAmJgorCQkJ
CSAgICAoIXNjdHBfaXNfYWRkcl9wZW5kaW5nKHN0Y2IsIHNjdHBfaWZhKSkpIHsKKwkJCQkJLyog
V2UgYWxsb3cgcGVuZGluZyBhZGRyZXNzZXMsIHdoZXJlIHdlCisJCQkJCSAqIGhhdmUgc2VudCBh
biBhc2NvbmYtYWRkIHRvIGJlIGNvbnNpZGVyZWQKKwkJCQkJICogdmFsaWQuCisJCQkJCSAqLwor
CQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSAhPSB0by0+c2FfZmFtaWx5KSB7CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlzd2l0
Y2ggKHNjdHBfaWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQlj
YXNlIEFGX0lORVQ6CisJCQkJCWlmIChpcHY0X2FkZHJfbGVnYWwpIHsKKwkJCQkJCXN0cnVjdCBz
b2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKKworCQkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNz
LnNpbjsKKwkJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdG87CisJCQkJCQlpZiAo
KGlwdjRfbG9jYWxfc2NvcGUgPT0gMCkgJiYKKwkJCQkJCSAgICBJTjRfSVNQUklWQVRFX0FERFJF
U1MoJnNpbi0+c2luX2FkZHIpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA0KHN0Y2ItPnNjdHBf
ZXAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2lu
LT5zaW5fYWRkcikgIT0gMCkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorI2VuZGlmCisJ
CQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7
CisJCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCQkJcmV0dXJuICgxKTsKKwkJ
CQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2Fz
ZSBBRl9JTkVUNjoKKwkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNv
Y2thZGRyX2luNiAqc2luNiwgKnJzaW42OworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9T
Q09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBs
c2E2OworI2VuZGlmCisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJ
CQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopdG87CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2KHN0Y2ItPnNjdHBfZXAtPmlwX2lucC5p
bnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAmc2luNi0+c2luNl9hZGRy
KSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmIChJ
TjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQlpZiAobG9j
YWxfc2NvcGUgPT0gMCkKKwkJCQkJCQkJY29udGludWU7CisjaWYgZGVmaW5lZChTQ1RQX0VNQkVE
REVEX1Y2X1NDT1BFKQorCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3BlX2lkID09IDApIHsKKyNp
ZmRlZiBTQ1RQX0tBTUUKKwkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2NvcGUoc2luNikgIT0gMCkK
KwkJCQkJCQkJCWNvbnRpbnVlOworI2Vsc2UKKwkJCQkJCQkJbHNhNiA9ICpzaW42OworCQkJCQkJ
CQlpZiAoaW42X3JlY292ZXJzY29wZSgmbHNhNiwKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAg
ICAgJmxzYTYuc2luNl9hZGRyLAorCQkJCQkJCQkgICAgICAgICAgICAgICAgICAgICBOVUxMKSkK
KwkJCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJCQlzaW42ID0gJmxzYTY7CisjZW5kaWYgLyogU0NU
UF9LQU1FICovCisJCQkJCQkJfQorI2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8K
KwkJCQkJCX0KKwkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjZf
SVNfQUREUl9TSVRFTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7
CisJCQkJCQl9CisJCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2luNiwgcnNpbjYpKSB7
CisJCQkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCQkJcmV0dXJuICgxKTsKKwkJ
CQkJCX0KKwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJCWlmIChjb25uX2FkZHJfbGVnYWwpIHsKKwkJ
CQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCQkJc2Nvbm4g
PSAmc2N0cF9pZmEtPmFkZHJlc3Muc2Nvbm47CisJCQkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKil0bzsKKwkJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9PSByc2Nvbm4tPnNj
b25uX2FkZHIpIHsKKwkJCQkJCQlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwkJCQkJCQlyZXR1
cm4gKDEpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVs
dDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVs
c2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRy
LCAmc3RjYi0+c2N0cF9lcC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlm
IChsYWRkci0+aWZhLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkgeworCQkJ
CVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRcbiIpOworCQkJCWNv
bnRpbnVlOworCQkJfQorCQkJaWYgKHNjdHBfaXNfYWRkcl9yZXN0cmljdGVkKHN0Y2IsIGxhZGRy
LT5pZmEpICYmCisJCQkgICAgKCFzY3RwX2lzX2FkZHJfcGVuZGluZyhzdGNiLCBsYWRkci0+aWZh
KSkpIHsKKwkJCQkvKiBXZSBhbGxvdyBwZW5kaW5nIGFkZHJlc3Nlcywgd2hlcmUgd2UKKwkJCQkg
KiBoYXZlIHNlbnQgYW4gYXNjb25mLWFkZCB0byBiZSBjb25zaWRlcmVkCisJCQkJICogdmFsaWQu
CisJCQkJICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAobGFkZHItPmlmYS0+YWRkcmVz
cy5zYS5zYV9mYW1pbHkgIT0gdG8tPnNhX2ZhbWlseSkgeworCQkJCWNvbnRpbnVlOworCQkJfQor
CQkJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVU
OgorCQkJeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCAqcnNpbjsKKworCQkJCXNpbiA9
ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKKwkJCQlyc2luID0gKHN0cnVjdCBzb2NrYWRkcl9p
biAqKXRvOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSByc2luLT5zaW5fYWRkci5z
X2FkZHIpIHsKKwkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAoMSk7
CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2Ug
QUZfSU5FVDY6CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiwgKnJzaW42Owor
CisJCQkJc2luNiA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJcnNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXRvOworCQkJCWlmIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42
LCByc2luNikpIHsKKwkJCQkJU0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisJCQkJCXJldHVybiAo
MSk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQl7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nv
bm4gKnNjb25uLCAqcnNjb25uOworCisJCQkJc2Nvbm4gPSAmbGFkZHItPmlmYS0+YWRkcmVzcy5z
Y29ubjsKKwkJCQlyc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQlpZiAo
c2Nvbm4tPnNjb25uX2FkZHIgPT0gcnNjb25uLT5zY29ubl9hZGRyKSB7CisJCQkJCVNDVFBfSVBJ
X0FERFJfUlVOTE9DSygpOworCQkJCQlyZXR1cm4gKDEpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CX0KKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9
CisKKwkJfQorCX0KKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKDApOworfQor
CisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoc3Ry
dWN0IHNjdHBfaW5wY2IgKippbnBfcCwgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgIHN0cnVj
dCBzb2NrYWRkciAqdG8sIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MzJfdCB2cmZfaWQp
Cit7CisJLyoqKiogQVNTVU1FUyBUSEUgQ0FMTEVSIGhvbGRzIHRoZSBJTlBfSU5GT19STE9DSyAq
LworCS8qCisJICogSWYgd2Ugc3VwcG9ydCB0aGUgVENQIG1vZGVsLCB0aGVuIHdlIG11c3Qgbm93
IGRpZyB0aHJvdWdoIHRvIHNlZQorCSAqIGlmIHdlIGNhbiBmaW5kIG91ciBlbmRwb2ludCBpbiB0
aGUgbGlzdCBvZiB0Y3AgZXAncy4KKwkgKi8KKwl1aW50MTZfdCBscG9ydCwgcnBvcnQ7CisJc3Ry
dWN0IHNjdHBwY2JoZWFkICplcGhlYWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1
Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKKyNpZmRlZiBTQ1RQX01WUkYKKwlpbnQgZm5kLCBpOworI2VuZGlmCisK
KwlpZiAoKHRvID09IE5VTEwpIHx8IChmcm9tID09IE5VTEwpKSB7CisJCXJldHVybiAoTlVMTCk7
CisJfQorCisJc3dpdGNoICh0by0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZf
SU5FVDoKKwkJaWYgKGZyb20tPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlscG9ydCA9ICgo
c3RydWN0IHNvY2thZGRyX2luICopdG8pLT5zaW5fcG9ydDsKKwkJCXJwb3J0ID0gKChzdHJ1Y3Qg
c29ja2FkZHJfaW4gKilmcm9tKS0+c2luX3BvcnQ7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKE5V
TEwpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2
OgorCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlscG9ydCA9ICgoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKXRvKS0+c2luNl9wb3J0OworCQkJcnBvcnQgPSAoKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilmcm9tKS0+c2luNl9wb3J0OworCQl9IGVsc2UgeworCQkJcmV0dXJuIChO
VUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwljYXNlIEFGX0NPTk46CisJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikgeworCQkJ
bHBvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopdG8pLT5zY29ubl9wb3J0OworCQkJcnBv
cnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZnJvbSktPnNjb25uX3BvcnQ7CisJCX0gZWxz
ZSB7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJZXBoZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdGNw
ZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUigobHBvcnQgfCBycG9ydCksIFNDVFBfQkFTRV9J
TkZPKGhhc2h0Y3BtYXJrKSldOworCS8qCisJICogT2sgbm93IGZvciBlYWNoIG9mIHRoZSBndXlz
IGluIHRoaXMgYnVja2V0IHdlIG11c3QgbG9vayBhbmQgc2VlOgorCSAqIC0gRG9lcyB0aGUgcmVt
b3RlIHBvcnQgbWF0Y2guIC0gRG9lcyB0aGVyZSBzaW5nbGUgYXNzb2NpYXRpb24ncworCSAqIGFk
ZHJlc3NlcyBtYXRjaCB0aGlzIGFkZHJlc3MgKHRvKS4gSWYgc28gd2UgdXBkYXRlIHBfZXAgdG8g
cG9pbnQKKwkgKiB0byB0aGlzIGVwIGFuZCByZXR1cm4gdGhlIHRjYiBmcm9tIGl0LgorCSAqLwor
CUxJU1RfRk9SRUFDSChpbnAsIGVwaGVhZCwgc2N0cF9oYXNoKSB7CisJCVNDVFBfSU5QX1JMT0NL
KGlucCk7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxM
R09ORSkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJY29udGludWU7CisJCX0KKwkJ
aWYgKGxwb3J0ICE9IGlucC0+c2N0cF9scG9ydCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJY29udGludWU7CisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQlzd2l0Y2gg
KHRvLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJeworCQkJ
c3RydWN0IHNvY2thZGRyX2luICpzaW47CisKKwkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g
Kil0bzsKKwkJCWlmIChwcmlzb25fY2hlY2tfaXA0KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwK
KwkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJYnJlYWs7CisJCX0K
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCXN0cnVjdCBz
b2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXRv
OworCQkJaWYgKHByaXNvbl9jaGVja19pcDYoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJ
ICAgICAgICAgICAgICAgICAgICAgJnNpbjYtPnNpbjZfYWRkcikgIT0gMCkgeworCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJyZWFrOworCQl9Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVl
OworCQl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX01WUkYKKwkJZm5kID0gMDsKKwkJZm9yIChpID0g
MDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJaWYgKGlucC0+bV92cmZfaWRzW2ldID09
IHZyZl9pZCkgeworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKGZu
ZCA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQor
I2Vsc2UKKwkJaWYgKGlucC0+ZGVmX3ZyZl9pZCAhPSB2cmZfaWQpIHsKKwkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJLyogY2hlY2sgdG8gc2Vl
IGlmIHRoZSBlcCBoYXMgb25lIG9mIHRoZSBhZGRyZXNzZXMgKi8KKwkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkJLyogV2UgYXJlIE5P
VCBib3VuZCBhbGwsIHNvIGxvb2sgZnVydGhlciAqLworCQkJaW50IG1hdGNoID0gMDsKKworCQkJ
TElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikg
eworCisJCQkJaWYgKGxhZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwgX19mdW5jX18pOworCQkJCQljb250aW51ZTsKKwkJ
CQl9CisJCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9CRUlOR19ERUxF
VEVEKSB7CisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAiaWZhIGJlaW5nIGRlbGV0ZWRc
biIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJaWYgKGxhZGRyLT5pZmEtPmFkZHJlc3Mu
c2Euc2FfZmFtaWx5ID09CisJCQkJICAgIHRvLT5zYV9mYW1pbHkpIHsKKwkJCQkJLyogc2VlIGlm
IGl0IG1hdGNoZXMgKi8KKyNpZmRlZiBJTkVUCisJCQkJCWlmIChmcm9tLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICppbnRmX2FkZHIsICpzaW47CisK
KwkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCXNpbiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil0bzsKKwkJCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRk
ciA9PQorCQkJCQkJICAgIGludGZfYWRkci0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJCQkJbWF0
Y2ggPSAxOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQkJCQlpZiAoZnJvbS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW42ICppbnRmX2FkZHI2OworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNjsKKworCQkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJCQkgICAg
dG87CisJCQkJCQlpbnRmX2FkZHI2ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luNjsKKworCQkJ
CQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCisJCQkJCQkgICAgaW50Zl9hZGRyNikp
IHsKKwkJCQkJCQltYXRjaCA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCX0KKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQkJaWYgKGZyb20tPnNhX2ZhbWls
eSA9PSBBRl9DT05OKSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqaW50Zl9hZGRyLCAq
c2Nvbm47CisKKwkJCQkJCWludGZfYWRkciA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNjb25uOwor
CQkJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKil0bzsKKwkJCQkJCWlmIChzY29u
bi0+c2Nvbm5fYWRkciA9PQorCQkJCQkJICAgIGludGZfYWRkci0+c2Nvbm5fYWRkcikgeworCQkJ
CQkJCW1hdGNoID0gMTsKKwkJCQkJCQlicmVhazsKKwkJCQkJCX0KKwkJCQkJfQorI2VuZGlmCisJ
CQkJfQorCQkJfQorCQkJaWYgKG1hdGNoID09IDApIHsKKwkJCQkvKiBUaGlzIGVuZHBvaW50IGRv
ZXMgbm90IGhhdmUgdGhpcyBhZGRyZXNzICovCisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisJCS8qCisJCSAqIE9rIGlmIHdlIGhpdCBoZXJlIHRo
ZSBlcCBoYXMgdGhlIGFkZHJlc3MsIGRvZXMgaXQgaG9sZAorCQkgKiB0aGUgdGNiPworCQkgKi8K
KwkJLyogWFhYOiBXaHkgZG9uJ3Qgd2UgVEFJTFFfRk9SRUFDSCB0aHJvdWdoIHNjdHBfYXNvY19s
aXN0PyAqLworCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVl
OworCQl9CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3du
X3RoaXNfYWRkcihzdGNiLCB0bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNiLT5ycG9y
dCAhPSBycG9ydCkgeworCQkJLyogcmVtb3RlIHBvcnQgZG9lcyBub3QgbWF0Y2guICovCisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQljb250
aW51ZTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9f
QkVfRlJFRUQpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICghc2N0cF9kb2VzX3N0Y2Jfb3duX3Ro
aXNfYWRkcihzdGNiLCB0bykpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIERvZXMgdGhpcyBUQ0Ig
aGF2ZSBhIG1hdGNoaW5nIGFkZHJlc3M/ICovCisJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+
YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKworCQkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9m
YW1pbHkgIT0gZnJvbS0+c2FfZmFtaWx5KSB7CisJCQkJLyogbm90IHRoZSBzYW1lIGZhbWlseSwg
Y2FuJ3QgYmUgYSBtYXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3dpdGNoIChmcm9t
LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQl7CisJCQkJ
c3RydWN0IHNvY2thZGRyX2luICpzaW4sICpyc2luOworCisJCQkJc2luID0gKHN0cnVjdCBzb2Nr
YWRkcl9pbiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJcnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKilmcm9tOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJCSAgICByc2lu
LT5zaW5fYWRkci5zX2FkZHIpIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJaWYgKG5ldHAg
IT0gTlVMTCkgeworCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCX0KKwkJCQkJLyogVXBkYXRlIHRo
ZSBlbmRwb2ludCBwb2ludGVyICovCisJCQkJCSppbnBfcCA9IGlucDsKKwkJCQkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsKKwkJ
CX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJeworCQkJCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsICpyc2luNjsKKworCQkJCXNpbjYgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2th
ZGRyX2luNiAqKWZyb207CisJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCisJCQkJ
ICAgIHJzaW42KSkgeworCQkJCQkvKiBmb3VuZCBpdCAqLworCQkJCQlpZiAobmV0cCAhPSBOVUxM
KSB7CisJCQkJCQkqbmV0cCA9IG5ldDsKKwkJCQkJfQorCQkJCQkvKiBVcGRhdGUgdGhlIGVuZHBv
aW50IHBvaW50ZXIgKi8KKwkJCQkJKmlucF9wID0gaW5wOworCQkJCQlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJCQkJCXJldHVybiAoc3RjYik7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJewor
CQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCXNjb25uID0g
KHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlyc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilmcm9tOworCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciA9
PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKKwkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJaWYgKG5l
dHAgIT0gTlVMTCkgeworCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCX0KKwkJCQkJLyogVXBkYXRl
IHRoZSBlbmRwb2ludCBwb2ludGVyICovCisJCQkJCSppbnBfcCA9IGlucDsKKwkJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCX0KKwkJCQlicmVhazsK
KwkJCX0KKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKKworLyoKKyAqIHJ1bGVzIGZvciB1c2UKKyAq
CisgKiAxKSBJZiBJIHJldHVybiBhIE5VTEwgeW91IG11c3QgZGVjcmVtZW50IGFueSBJTlAgcmVm
IGNudC4gMikgSWYgSSBmaW5kIGFuCisgKiBzdGNiLCBib3RoIHdpbGwgYmUgbG9ja2VkIChsb2Nr
ZWRfdGNiIGFuZCBzdGNiKSBidXQgZGVjcmVtZW50IHdpbGwgYmUgZG9uZQorICogKGlmIGxvY2tl
ZCA9PSBOVUxMKS4gMykgRGVjcmVtZW50IGhhcHBlbnMgb24gcmV0dXJuIE9OTFkgaWYgbG9ja2Vk
ID09CisgKiBOVUxMLgorICovCisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lh
dGlvbl9lcF9hZGRyKHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzb2NrYWRkciAq
cmVtb3RlLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCBzdHJ1Y3Qgc29ja2FkZHIgKmxv
Y2FsLCBzdHJ1Y3Qgc2N0cF90Y2IgKmxvY2tlZF90Y2IpCit7CisJc3RydWN0IHNjdHBhc29jaGVh
ZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiA9IE5VTEw7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXVpbnQxNl90IHJwb3J0OworCisJ
aW5wID0gKmlucF9wOworCXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVU
CisJY2FzZSBBRl9JTkVUOgorCQlycG9ydCA9ICgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXJlbW90
ZSktPnNpbl9wb3J0KTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZf
SU5FVDY6CisJCXJwb3J0ID0gKCgoc3RydWN0IHNvY2thZGRyX2luNiAqKXJlbW90ZSktPnNpbjZf
cG9ydCk7CisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNh
c2UgQUZfQ09OTjoKKwkJcnBvcnQgPSAoKChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKXJlbW90ZSkt
PnNjb25uX3BvcnQpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXJldHVybiAoTlVM
TCk7CisJfQorCWlmIChsb2NrZWRfdGNiKSB7CisJCS8qCisJCSAqIFVOLWxvY2sgc28gd2UgY2Fu
IGRvIHByb3BlciBsb2NraW5nIGhlcmUgdGhpcyBvY2N1cnMgd2hlbgorCQkgKiBjYWxsZWQgZnJv
bSBsb2FkX2FkZHJlc3Nlc19mcm9tX2luaXQuCisJCSAqLworCQlhdG9taWNfYWRkX2ludCgmbG9j
a2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0sobG9ja2VkX3RjYik7
CisJfQorCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSkgeworCQkvKi0KKwkJICogTm93IGVpdGhlciB0aGlzIGd1eSBp
cyBvdXIgbGlzdGVuZXIgb3IgaXQncyB0aGUKKwkJICogY29ubmVjdG9yLiBJZiBpdCBpcyB0aGUg
b25lIHRoYXQgaXNzdWVkIHRoZSBjb25uZWN0LCB0aGVuCisJCSAqIGl0J3Mgb25seSBjaGFuY2Ug
aXMgdG8gYmUgdGhlIGZpcnN0IFRDQiBpbiB0aGUgbGlzdC4gSWYKKwkJICogaXQgaXMgdGhlIGFj
Y2VwdG9yLCB0aGVuIGRvIHRoZSBzcGVjaWFsX2xvb2t1cCB0byBoYXNoCisJCSAqIGFuZCBmaW5k
IHRoZSByZWFsIGlucC4KKwkJICovCisJCWlmICgoaW5wLT5zY3RwX3NvY2tldCkgJiYgU0NUUF9J
U19MSVNURU5JTkcoaW5wKSkgeworCQkJLyogdG8gaXMgcGVlciBhZGRyLCBmcm9tIGlzIG15IGFk
ZHIgKi8KKyNpZm5kZWYgU0NUUF9NVlJGCisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2Nh
dGUoaW5wX3AsIHJlbW90ZSwgbG9jYWwsCisJCQkgICAgbmV0cCwgaW5wLT5kZWZfdnJmX2lkKTsK
KwkJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobG9ja2VkX3RjYiA9PSBOVUxMKSkgeworCQkJCS8q
IHdlIGhhdmUgYSBsb2NrZWQgdGNiLCBsb3dlciByZWZjb3VudCAqLworCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCQl9CisJCQlpZiAoKGxvY2tlZF90Y2IgIT0gTlVMTCkgJiYgKGxvY2tl
ZF90Y2IgIT0gc3RjYikpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhsb2NrZWRfdGNiLT5zY3RwX2Vw
KTsKKwkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCWF0b21pY19zdWJ0cmFjdF9p
bnQoJmxvY2tlZF90Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGxv
Y2tlZF90Y2ItPnNjdHBfZXApOworCQkJfQorI2Vsc2UKKwkJCS8qLQorCQkJICogTVZSRiBpcyB0
cmlja3ksIHdlIG11c3QgbG9vayBpbiBldmVyeSBWUkYKKwkJCSAqIHRoZSBlbmRwb2ludCBoYXMu
CisJCQkgKi8KKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsg
aSsrKSB7CisJCQkJc3RjYiA9IHNjdHBfdGNiX3NwZWNpYWxfbG9jYXRlKGlucF9wLCByZW1vdGUs
IGxvY2FsLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRwLCBpbnAtPm1f
dnJmX2lkc1tpXSk7CisJCQkJaWYgKChzdGNiICE9IE5VTEwpICYmIChsb2NrZWRfdGNiID09IE5V
TEwpKSB7CisJCQkJCS8qIHdlIGhhdmUgYSBsb2NrZWQgdGNiLCBsb3dlciByZWZjb3VudCAqLwor
CQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYg
KChsb2NrZWRfdGNiICE9IE5VTEwpICYmIChsb2NrZWRfdGNiICE9IHN0Y2IpKSB7CisJCQkJCVND
VFBfSU5QX1JMT0NLKGxvY2tlZF90Y2ItPnNjdHBfZXApOworCQkJCQlTQ1RQX1RDQl9MT0NLKGxv
Y2tlZF90Y2IpOworCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0sobG9ja2VkX3RjYi0+c2N0cF9lcCk7CisJ
CQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKyNlbmRpZgorCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NL
KCk7CisJCQlyZXR1cm4gKHN0Y2IpOworCQl9IGVsc2UgeworCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09O
RSkgeworCQkJCWdvdG8gbnVsbF9yZXR1cm47CisJCQl9CisJCQlzdGNiID0gTElTVF9GSVJTVCgm
aW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJZ290byBu
dWxsX3JldHVybjsKKwkJCX0KKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisKKwkJCWlmIChzdGNi
LT5ycG9ydCAhPSBycG9ydCkgeworCQkJCS8qIHJlbW90ZSBwb3J0IGRvZXMgbm90IG1hdGNoLiAq
LworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlnb3RvIG51bGxfcmV0dXJuOworCQkJ
fQorCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVE
KSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWdvdG8gbnVsbF9yZXR1cm47CisJ
CQl9CisJCQlpZiAobG9jYWwgJiYgIXNjdHBfZG9lc19zdGNiX293bl90aGlzX2FkZHIoc3RjYiwg
bG9jYWwpKSB7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWdvdG8gbnVsbF9yZXR1
cm47CisJCQl9CisJCQkvKiBub3cgbG9vayBhdCB0aGUgbGlzdCBvZiByZW1vdGUgYWRkcmVzc2Vz
ICovCisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7
CisjaWZkZWYgSU5WQVJJQU5UUworCQkJCWlmIChuZXQgPT0gKFRBSUxRX05FWFQobmV0LCBzY3Rw
X25leHQpKSkgeworCQkJCQlwYW5pYygiQ29ycnVwdCBuZXQgbGlzdCIpOworCQkJCX0KKyNlbmRp
ZgorCQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ICE9CisJCQkJICAgIHJlbW90
ZS0+c2FfZmFtaWx5KSB7CisJCQkJCS8qIG5vdCB0aGUgc2FtZSBmYW1pbHkgKi8KKwkJCQkJY29u
dGludWU7CisJCQkJfQorCQkJCXN3aXRjaCAocmVtb3RlLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJ
TkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCXsKKwkJCQkJc3RydWN0IHNvY2thZGRyX2luICpz
aW4sICpyc2luOworCisJCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikKKwkJCQkJICAg
ICZuZXQtPnJvLl9sX2FkZHI7CisJCQkJCXJzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopcmVt
b3RlOworCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJICAgIHJzaW4tPnNp
bl9hZGRyLnNfYWRkcikgeworCQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9
IE5VTEwpIHsKKwkJCQkJCQkqbmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRf
dGNiID09IE5VTEwpIHsKKwkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBl
bHNlIGlmIChsb2NrZWRfdGNiICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tl
ZF90Y2IpOworCQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisKKwkJ
CQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OworCQkJCQkJcmV0dXJuIChzdGNiKTsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJeworCQkJCQlzdHJ1Y3Qg
c29ja2FkZHJfaW42ICpzaW42LCAqcnNpbjY7CisKKwkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQkJcnNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKXJlbW90ZTsKKwkJCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKHNpbjYsCisJCQkJ
CSAgICByc2luNikpIHsKKwkJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCQlpZiAobmV0cCAhPSBO
VUxMKSB7CisJCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCQl9CisJCQkJCQlpZiAobG9ja2VkX3Rj
YiA9PSBOVUxMKSB7CisJCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJCX0gZWxz
ZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7CisJCQkJCQkJU0NUUF9UQ0JfTE9DSyhsb2NrZWRf
dGNiKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiKSB7CisJCQkJCQkJYXRvbWljX3N1
YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQkJfQorCQkJCQkJ
U0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJ
CQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJeworCQkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm4sICpyc2Nvbm47CisKKwkJCQkJc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKikmbmV0LT5yby5fbF9hZGRyOworCQkJCQlyc2Nvbm4gPSAo
c3RydWN0IHNvY2thZGRyX2Nvbm4gKilyZW1vdGU7CisJCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRk
ciA9PSByc2Nvbm4tPnNjb25uX2FkZHIpIHsKKwkJCQkJCS8qIGZvdW5kIGl0ICovCisJCQkJCQlp
ZiAobmV0cCAhPSBOVUxMKSB7CisJCQkJCQkJKm5ldHAgPSBuZXQ7CisJCQkJCQl9CisJCQkJCQlp
ZiAobG9ja2VkX3RjYiA9PSBOVUxMKSB7CisJCQkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
KwkJCQkJCX0gZWxzZSBpZiAobG9ja2VkX3RjYiAhPSBzdGNiKSB7CisJCQkJCQkJU0NUUF9UQ0Jf
TE9DSyhsb2NrZWRfdGNiKTsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiKSB7CisJCQkJ
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmbG9ja2VkX3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJ
CQkJfQorCQkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQkJU0NUUF9JTlBfSU5GT19S
VU5MT0NLKCk7CisJCQkJCQlyZXR1cm4gKHN0Y2IpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJ
CX0KKyNlbmRpZgorCQkJCWRlZmF1bHQ6CisJCQkJCS8qIFRTTkggKi8KKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJfSBlbHNlIHsKKwkJ
U0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQlnb3RvIG51bGxfcmV0dXJuOworCQl9CisJCWhlYWQg
PSAmaW5wLT5zY3RwX3RjYmhhc2hbU0NUUF9QQ0JIQVNIX0FMTEFERFIocnBvcnQsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2hhc2ht
YXJrKV07CisJCUxJU1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX3RjYmhhc2gpIHsKKwkJCWlm
IChzdGNiLT5ycG9ydCAhPSBycG9ydCkgeworCQkJCS8qIHJlbW90ZSBwb3J0IGRvZXMgbm90IG1h
dGNoICovCisJCQkJY29udGludWU7CisJCQl9CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJ
aWYgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJ
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxv
Y2FsICYmICFzY3RwX2RvZXNfc3RjYl9vd25fdGhpc19hZGRyKHN0Y2IsIGxvY2FsKSkgeworCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIG5vdyBs
b29rIGF0IHRoZSBsaXN0IG9mIHJlbW90ZSBhZGRyZXNzZXMgKi8KKwkJCVRBSUxRX0ZPUkVBQ0go
bmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJ
CQkJaWYgKG5ldCA9PSAoVEFJTFFfTkVYVChuZXQsIHNjdHBfbmV4dCkpKSB7CisJCQkJCXBhbmlj
KCJDb3JydXB0IG5ldCBsaXN0Iik7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKG5ldC0+cm8uX2xf
YWRkci5zYS5zYV9mYW1pbHkgIT0KKwkJCQkgICAgcmVtb3RlLT5zYV9mYW1pbHkpIHsKKwkJCQkJ
Lyogbm90IHRoZSBzYW1lIGZhbWlseSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQkJc3dp
dGNoIChyZW1vdGUtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6
CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgKnJzaW47CisKKwkJCQkJc2lu
ID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKQorCQkJCQkgICAgJm5ldC0+cm8uX2xfYWRkcjsKKwkJ
CQkJcnNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilyZW1vdGU7CisJCQkJCWlmIChzaW4tPnNp
bl9hZGRyLnNfYWRkciA9PQorCQkJCQkgICAgcnNpbi0+c2luX2FkZHIuc19hZGRyKSB7CisJCQkJ
CQkvKiBmb3VuZCBpdCAqLworCQkJCQkJaWYgKG5ldHAgIT0gTlVMTCkgeworCQkJCQkJCSpuZXRw
ID0gbmV0OworCQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IgPT0gTlVMTCkgeworCQkJCQkJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCQl9IGVsc2UgaWYgKGxvY2tlZF90Y2IgIT0g
c3RjYikgeworCQkJCQkJCVNDVFBfVENCX0xPQ0sobG9ja2VkX3RjYik7CisJCQkJCQl9CisJCQkJ
CQlpZiAobG9ja2VkX3RjYikgeworCQkJCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJmxvY2tlZF90
Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCQkJcmV0dXJuIChzdGNiKTsK
KwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJCWNh
c2UgQUZfSU5FVDY6CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42LCAqcnNp
bjY7CisKKwkJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisJCQkJCSAgICAmbmV0
LT5yby5fbF9hZGRyOworCQkJCQlyc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopcmVtb3Rl
OworCQkJCQlpZiAoU0NUUDZfQVJFX0FERFJfRVFVQUwoc2luNiwKKwkJCQkJICAgIHJzaW42KSkg
eworCQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5VTEwpIHsKKwkJCQkJ
CQkqbmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNiID09IE5VTEwpIHsK
KwkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNlIGlmIChsb2NrZWRf
dGNiICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90Y2IpOworCQkJCQkJ
fQorCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZs
b2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlTQ1RQX0lOUF9XVU5M
T0NLKGlucCk7CisJCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQkJCXJldHVybiAo
c3RjYik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQl7CisJCQkJCXN0cnVjdCBzb2Nr
YWRkcl9jb25uICpzY29ubiwgKnJzY29ubjsKKworCQkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJCXJzY29ubiA9IChzdHJ1Y3Qgc29ja2Fk
ZHJfY29ubiAqKXJlbW90ZTsKKwkJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IHJzY29ubi0+
c2Nvbm5fYWRkcikgeworCQkJCQkJLyogZm91bmQgaXQgKi8KKwkJCQkJCWlmIChuZXRwICE9IE5V
TEwpIHsKKwkJCQkJCQkqbmV0cCA9IG5ldDsKKwkJCQkJCX0KKwkJCQkJCWlmIChsb2NrZWRfdGNi
ID09IE5VTEwpIHsKKwkJCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQkJfSBlbHNl
IGlmIChsb2NrZWRfdGNiICE9IHN0Y2IpIHsKKwkJCQkJCQlTQ1RQX1RDQl9MT0NLKGxvY2tlZF90
Y2IpOworCQkJCQkJfQorCQkJCQkJaWYgKGxvY2tlZF90Y2IpIHsKKwkJCQkJCQlhdG9taWNfc3Vi
dHJhY3RfaW50KCZsb2NrZWRfdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJCQl9CisJCQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJ
CQkJCXJldHVybiAoc3RjYik7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorI2VuZGlmCisJ
CQkJZGVmYXVsdDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0KKwl9CitudWxsX3JldHVybjoKKwkvKiBjbGVh
biB1cCBmb3IgcmV0dXJuaW5nIG51bGwgKi8KKwlpZiAobG9ja2VkX3RjYikgeworCQlTQ1RQX1RD
Ql9MT0NLKGxvY2tlZF90Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZsb2NrZWRfdGNiLT5h
c29jLnJlZmNudCwgMSk7CisJfQorCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwlTQ1RQX0lOUF9J
TkZPX1JVTkxPQ0soKTsKKwkvKiBub3QgZm91bmQgKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisK
Ky8qCisgKiBGaW5kIGFuIGFzc29jaWF0aW9uIGZvciBhIHNwZWNpZmljIGVuZHBvaW50IHVzaW5n
IHRoZSBhc3NvY2lhdGlvbiBpZCBnaXZlbgorICogb3V0IGluIHRoZSBDT01NX1VQIG5vdGlmaWNh
dGlvbgorICovCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9j
a2VkKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHNjdHBfYXNzb2NfdCBhc29jX2lkLCBpbnQgd2Fu
dF9sb2NrKQoreworCS8qCisJICogVXNlIG15IHRoZSBhc3NvY19pZCB0byBmaW5kIGEgZW5kcG9p
bnQKKwkgKi8KKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpoZWFkOworCXN0cnVjdCBzY3RwX3RjYiAq
c3RjYjsKKwl1aW50MzJfdCBpZDsKKworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX1BSSU5U
RigiVFNOSCBlcF9hc3NvY2lkXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCVNDVFBfUFJJ
TlRGKCJUU05IIGVwX2Fzc29jaWQwXG4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWQgPSAo
dWludDMyX3QpYXNvY19pZDsKKwloZWFkID0gJmlucC0+c2N0cF9hc29jaWRoYXNoW1NDVFBfUENC
SEFTSF9BU09DKGlkLCBpbnAtPmhhc2hhc29jaWRtYXJrKV07CisJaWYgKGhlYWQgPT0gTlVMTCkg
eworCQkvKiBpbnZhbGlkIGlkIFRTTkggKi8KKwkJU0NUUF9QUklOVEYoIlRTTkggZXBfYXNzb2Np
ZDFcbiIpOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlMSVNUX0ZPUkVBQ0goc3RjYiwgaGVhZCwg
c2N0cF90Y2Jhc29jaWRoYXNoKSB7CisJCWlmIChzdGNiLT5hc29jLmFzc29jX2lkID09IGlkKSB7
CisJCQlpZiAoaW5wICE9IHN0Y2ItPnNjdHBfZXApIHsKKwkJCQkvKgorCQkJCSAqIHNvbWUgb3Ro
ZXIgZ3V5IGhhcyB0aGUgc2FtZSBpZCBhY3RpdmUgKGlkCisJCQkJICogY29sbGlzaW9uID8/KS4K
KwkJCQkgKi8KKwkJCQlTQ1RQX1BSSU5URigiVFNOSCBlcF9hc3NvY2lkMlxuIik7CisJCQkJY29u
dGludWU7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRf
VE9fQkVfRlJFRUQpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh3YW50X2xvY2spIHsK
KwkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJfQorCQkJcmV0dXJuIChzdGNiKTsKKwkJfQor
CX0KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRh
c3NvY2lhdGlvbl9lcF9hc29jaWQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc2N0cF9hc3NvY190
IGFzb2NfaWQsIGludCB3YW50X2xvY2spCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlzdGNiID0gc2N0cF9maW5kYXNvY19lcF9hc29jaWRfbG9j
a2VkKGlucCwgYXNvY19pZCwgd2FudF9sb2NrKTsKKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
cmV0dXJuIChzdGNiKTsKK30KKworCisvKgorICogRW5kcG9pbnQgcHJvYmUgZXhwZWN0cyB0aGF0
IHRoZSBJTlBfSU5GTyBpcyBsb2NrZWQuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9pbnBjYiAq
CitzY3RwX2VuZHBvaW50X3Byb2JlKHN0cnVjdCBzb2NrYWRkciAqbmFtLCBzdHJ1Y3Qgc2N0cHBj
YmhlYWQgKmhlYWQsCisJCSAgICB1aW50MTZfdCBscG9ydCwgdWludDMyX3QgdnJmX2lkKQorewor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworI2lm
ZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKyNlbmRpZgorI2lmZGVmIElORVQ2
CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICppbnRm
X2FkZHI2OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXN0cnVjdCBzb2Nr
YWRkcl9jb25uICpzY29ubjsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCWludCBpOworI2Vu
ZGlmCisJaW50ICBmbmQ7CisKKyNpZmRlZiBJTkVUCisJc2luID0gTlVMTDsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJc2luNiA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJc2Nvbm4gPSBOVUxMOworI2VuZGlmCisJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KiluYW07CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2Ogor
CQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiluYW07CisJCWJyZWFrOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJc2Nvbm4gPSAoc3Ry
dWN0IHNvY2thZGRyX2Nvbm4gKiluYW07CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJ
LyogdW5zdXBwb3J0ZWQgZmFtaWx5ICovCisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKGhl
YWQgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCUxJU1RfRk9SRUFDSChpbnAsIGhlYWQs
IHNjdHBfaGFzaCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRBTEwpICYmCisJCSAgICAoaW5wLT5zY3RwX2xwb3J0ID09IGxwb3J0
KSkgeworCQkJLyogZ290IGl0ICovCisJCQlzd2l0Y2ggKG5hbS0+c2FfZmFtaWx5KSB7CisjaWZk
ZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkJICAgIFNDVFBfSVBWNl9WNk9OTFkoaW5wKSkg
eworCQkJCQkvKiBJUHY0IG9uIGEgSVB2NiBzb2NrZXQgd2l0aCBPTkxZIElQdjYgc2V0ICovCisJ
CQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJCQkJfQorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pCisJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAu
aW5wLmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAh
PSAwKSB7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJCQkJ
fQorI2VuZGlmCisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQkvKiBBIFY2IGFkZHJlc3MgYW5kIHRoZSBlbmRwb2ludCBpcyBOT1QgYm91bmQg
VjYgKi8KKwkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2
KSA9PSAwKSB7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQkJY29udGludWU7CisJ
CQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJaWYgKHByaXNvbl9jaGVja19pcDYo
aW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42
LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQlj
b250aW51ZTsKKwkJCQl9CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoK
KwkJCQlicmVhazsKKwkJCX0KKwkJCS8qIGRvZXMgYSBWUkYgaWQgbWF0Y2g/ICovCisJCQlmbmQg
PSAwOworI2lmZGVmIFNDVFBfTVZSRgorCQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7
IGkrKykgeworCQkJCWlmIChpbnAtPm1fdnJmX2lkc1tpXSA9PSB2cmZfaWQpIHsKKwkJCQkJZm5k
ID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorI2Vsc2UKKwkJCWlmIChpbnAtPmRlZl92
cmZfaWQgPT0gdnJmX2lkKQorCQkJCWZuZCA9IDE7CisjZW5kaWYKKworCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJaWYgKCFmbmQpCisJCQkJY29udGludWU7CisJCQlyZXR1cm4gKGlucCk7
CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCX0KKwlzd2l0Y2ggKG5hbS0+c2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaWYgKHNpbi0+c2luX2FkZHIu
c19hZGRyID09IElOQUREUl9BTlkpIHsKKwkJCS8qIENhbid0IGh1bnQgZm9yIG9uZSB0aGF0IGhh
cyBubyBhZGRyZXNzIHNwZWNpZmllZCAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJaWYgKElONl9JU19B
RERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkvKiBDYW4ndCBodW50IGZv
ciBvbmUgdGhhdCBoYXMgbm8gYWRkcmVzcyBzcGVjaWZpZWQgKi8KKwkJCXJldHVybiAoTlVMTCk7
CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2Fz
ZSBBRl9DT05OOgorCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgPT0gTlVMTCkgeworCQkJcmV0dXJu
IChOVUxMKTsKKwkJfQorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0K
KwkvKgorCSAqIG9rLCBub3QgYm91bmQgdG8gYWxsIHNvIHNlZSBpZiB3ZSBjYW4gZmluZCBhIEVQ
IGJvdW5kIHRvIHRoaXMKKwkgKiBhZGRyZXNzLgorCSAqLworCUxJU1RfRk9SRUFDSChpbnAsIGhl
YWQsIHNjdHBfaGFzaCkgeworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CQljb250aW51ZTsKKwkJfQorCQkvKgorCQkgKiBPayB0aGlzIGNvdWxkIGJlIGEgbGlrZWx5IGNh
bmRpZGF0ZSwgbG9vayBhdCBhbGwgb2YgaXRzCisJCSAqIGFkZHJlc3NlcworCQkgKi8KKwkJaWYg
KGlucC0+c2N0cF9scG9ydCAhPSBscG9ydCkgeworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJY29udGludWU7CisJCX0KKwkJLyogZG9lcyBhIFZSRiBpZCBtYXRjaD8gKi8KKwkJZm5kID0g
MDsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkr
KykgeworCQkJaWYgKGlucC0+bV92cmZfaWRzW2ldID09IHZyZl9pZCkgeworCQkJCWZuZCA9IDE7
CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbHNlCisJCWlmIChpbnAtPmRlZl92cmZfaWQgPT0g
dnJmX2lkKQorCQkJZm5kID0gMTsKKworI2VuZGlmCisJCWlmICghZm5kKSB7CisJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCQljb250aW51ZTsKKwkJfQorCQlMSVNUX0ZPUkVBQ0gobGFkZHIs
ICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlpZiAobGFkZHItPmlm
YSA9PSBOVUxMKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICIlczogTlVMTCBpZmFc
biIsCisJCQkJCV9fZnVuY19fKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19QQ0IxLCAiT2sgbGFkZHItPmlmYTolcCBpcyBwb3NzaWJsZSwgIiwKKwkJCQkodm9p
ZCAqKWxhZGRyLT5pZmEpOworCQkJaWYgKGxhZGRyLT5pZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NU
UF9CRUlOR19ERUxFVEVEKSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJIdWggSUZB
IGJlaW5nIGRlbGV0ZWRcbiIpOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGxhZGRyLT5p
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IG5hbS0+c2FfZmFtaWx5KSB7CisJCQkJLyogcG9z
c2libGUsIHNlZSBpZiBpdCBtYXRjaGVzICovCisJCQkJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkg
eworI2lmZGVmIElORVQKKwkJCQljYXNlIEFGX0lORVQ6CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJCQkJCWlmIChzaW4gPT0gTlVMTCkgeworCQkJCQkJLyogVFNOSCAqLworCQkJCQkJYnJlYWs7
CisJCQkJCX0KKyNlbmRpZgorCQkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0KKwkJCQkJ
ICAgIGxhZGRyLT5pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyLnNfYWRkcikgeworCQkJCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQkJcmV0dXJuIChpbnApOworCQkJCQl9CisJCQkJCWJy
ZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCQlpbnRm
X2FkZHI2ID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luNjsKKwkJCQkJaWYgKFNDVFA2X0FSRV9B
RERSX0VRVUFMKHNpbjYsCisJCQkJCSAgICBpbnRmX2FkZHI2KSkgeworCQkJCQkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCQkJCQkJcmV0dXJuIChpbnApOworCQkJCQl9CisJCQkJCWJyZWFrOwor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJ
CQkJaWYgKHNjb25uLT5zY29ubl9hZGRyID09IGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Nvbm4uc2Nv
bm5fYWRkcikgeworCQkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQkJcmV0dXJuIChp
bnApOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJfQorCQkJfQorCQl9CisJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitzdGF0aWMg
c3RydWN0IHNjdHBfaW5wY2IgKgorc2N0cF9pc3BvcnRfaW51c2Uoc3RydWN0IHNjdHBfaW5wY2Ig
KmlucCwgdWludDE2X3QgbHBvcnQsIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0cHBj
YmhlYWQgKmhlYWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKnRfaW5wOworI2lmZGVmIFNDVFBfTVZS
RgorCWludCBpOworI2VuZGlmCisJaW50IGZuZDsKKworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8o
c2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKGxwb3J0LAorCSAgICBTQ1RQX0JBU0Vf
SU5GTyhoYXNobWFyaykpXTsKKwlMSVNUX0ZPUkVBQ0godF9pbnAsIGhlYWQsIHNjdHBfaGFzaCkg
eworCQlpZiAodF9pbnAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKKwkJCWNvbnRpbnVlOworCQl9
CisJCS8qIGlzIGl0IGluIHRoZSBWUkYgaW4gcXVlc3Rpb24gKi8KKwkJZm5kID0gMDsKKyNpZmRl
ZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJ
aWYgKHRfaW5wLT5tX3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJCQkJZm5kID0gMTsKKwkJCQli
cmVhazsKKwkJCX0KKwkJfQorI2Vsc2UKKwkJaWYgKHRfaW5wLT5kZWZfdnJmX2lkID09IHZyZl9p
ZCkKKwkJCWZuZCA9IDE7CisjZW5kaWYKKwkJaWYgKCFmbmQpCisJCQljb250aW51ZTsKKworCQkv
KiBUaGlzIG9uZSBpcyBpbiB1c2UuICovCisJCS8qIGNoZWNrIHRoZSB2Ni92NCBiaW5kaW5nIGlz
c3VlICovCisJCWlmICgodF9pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgJiYKKwkJICAgIFNDVFBfSVBWNl9WNk9OTFkodF9pbnApKSB7CisJCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQkvKiBjb2xsaXNpb24gaW4g
VjYgc3BhY2UgKi8KKwkJCQlyZXR1cm4gKHRfaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJLyogaW5w
IGlzIEJPVU5EX1Y0IG5vIGNvbmZsaWN0ICovCisJCQkJY29udGludWU7CisJCQl9CisJCX0gZWxz
ZSBpZiAodF9pbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgeworCQkJ
LyogdF9pbnAgaXMgYm91bmQgdjQgYW5kIHY2LCBjb25mbGljdCBhbHdheXMgKi8KKwkJCXJldHVy
biAodF9pbnApOworCQl9IGVsc2UgeworCQkJLyogdF9pbnAgaXMgYm91bmQgb25seSBWNCAqLwor
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgJiYKKwkJ
CSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQkvKiBubyBjb25mbGljdCAqLworCQkJ
CWNvbnRpbnVlOworCQkJfQorCQkJLyogZWxzZSBmYWxsIHRocm91Z2ggdG8gY29uZmxpY3QgKi8K
KwkJfQorCQlyZXR1cm4gKHRfaW5wKTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitpbnQK
K3NjdHBfc3dhcF9pbnBjYl9mb3JfbGlzdGVuKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7CisJ
LyogRm9yIDEtMi0xIHdpdGggcG9ydCByZXVzZSAqLworCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVh
ZDsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqdGlucCwgKm5pbnA7CisKKwlpZiAoc2N0cF9pc19mZWF0
dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpIHsKKwkJLyogb25seSB3b3Jr
cyB3aXRoIHBvcnQgcmV1c2Ugb24gKi8KKwkJcmV0dXJuICgtMSk7CisJfQorCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgPT0gMCkgeworCQlyZXR1cm4g
KDApOworCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfSU5GT19XTE9DSygp
OworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFTSF9BTExB
RERSKGlucC0+c2N0cF9scG9ydCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykpXTsKKwkvKiBLaWNrIG91dCBhbGwgbm9uLWxpc3Rl
bmVycyB0byB0aGUgVENQIGhhc2ggKi8KKwlMSVNUX0ZPUkVBQ0hfU0FGRSh0aW5wLCBoZWFkLCBz
Y3RwX2hhc2gsIG5pbnApIHsKKwkJaWYgKHRpbnAtPnNjdHBfbHBvcnQgIT0gaW5wLT5zY3RwX2xw
b3J0KSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAodGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQljb250aW51
ZTsKKwkJfQorCQlpZiAoU0NUUF9JU19MSVNURU5JTkcodGlucCkpIHsKKwkJCWNvbnRpbnVlOwor
CQl9CisJCVNDVFBfSU5QX1dMT0NLKHRpbnApOworCQlMSVNUX1JFTU9WRSh0aW5wLCBzY3RwX2hh
c2gpOworCQloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtTQ1RQX1BDQkhB
U0hfQUxMQUREUih0aW5wLT5zY3RwX2xwb3J0LCBTQ1RQX0JBU0VfSU5GTyhoYXNodGNwbWFyaykp
XTsKKwkJdGlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MOworCQlM
SVNUX0lOU0VSVF9IRUFEKGhlYWQsIHRpbnAsIHNjdHBfaGFzaCk7CisJCVNDVFBfSU5QX1dVTkxP
Q0sodGlucCk7CisJfQorCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJLyogUHVsbCBmcm9tIHdoZXJl
IGhlIHdhcyAqLworCUxJU1RfUkVNT1ZFKGlucCwgc2N0cF9oYXNoKTsKKwlpbnAtPnNjdHBfZmxh
Z3MgJj0gflNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0w7CisJaGVhZCA9ICZTQ1RQX0JBU0VfSU5G
TyhzY3RwX2VwaGFzaClbU0NUUF9QQ0JIQVNIX0FMTEFERFIoaW5wLT5zY3RwX2xwb3J0LCBTQ1RQ
X0JBU0VfSU5GTyhoYXNobWFyaykpXTsKKwlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGlucCwgc2N0
cF9oYXNoKTsKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsK
KwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0cnVjdCBz
Y3RwX2lucGNiICoKK3NjdHBfcGNiX2ZpbmRlcChzdHJ1Y3Qgc29ja2FkZHIgKm5hbSwgaW50IGZp
bmRfdGNwX3Bvb2wsIGludCBoYXZlX2xvY2ssCisJCXVpbnQzMl90IHZyZl9pZCkKK3sKKwkvKgor
CSAqIEZpcnN0IHdlIGNoZWNrIHRoZSBoYXNoIHRhYmxlIHRvIHNlZSBpZiBzb21lb25lIGhhcyB0
aGlzIHBvcnQKKwkgKiBib3VuZCB3aXRoIGp1c3QgdGhlIHBvcnQuCisJICovCisJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQgKmhlYWQ7CisJaW50IGxwb3J0Owor
CXVuc2lnbmVkIGludCBpOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nv
bm47CisjZW5kaWYKKworCXN3aXRjaCAobmFtLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJ
Y2FzZSBBRl9JTkVUOgorCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopbmFtOworCQlscG9y
dCA9IHNpbi0+c2luX3BvcnQ7CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNl
IEFGX0lORVQ2OgorCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiluYW07CisJCWxwb3J0
ID0gc2luNi0+c2luNl9wb3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25u
ICopbmFtOworCQlscG9ydCA9IHNjb25uLT5zY29ubl9wb3J0OworCQlicmVhazsKKyNlbmRpZgor
CWRlZmF1bHQ6CisJCXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogSSBjb3VsZCBjaGVhdCBo
ZXJlIGFuZCBqdXN0IGNhc3QgdG8gb25lIG9mIHRoZSB0eXBlcyBidXQgd2Ugd2lsbAorCSAqIGRv
IGl0IHJpZ2h0LiBJdCBhbHNvIHByb3ZpZGVzIHRoZSBjaGVjayBhZ2FpbnN0IGFuIFVuc3VwcG9y
dGVkCisJICogdHlwZSB0b28uCisJICovCisJLyogRmluZCB0aGUgaGVhZCBvZiB0aGUgQUxMQURE
UiBjaGFpbiAqLworCWlmIChoYXZlX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9JTkZPX1JMT0NL
KCk7CisJfQorCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9lcGhhc2gpW1NDVFBfUENCSEFT
SF9BTExBRERSKGxwb3J0LAorCSAgICBTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykpXTsKKwlpbnAg
PSBzY3RwX2VuZHBvaW50X3Byb2JlKG5hbSwgaGVhZCwgbHBvcnQsIHZyZl9pZCk7CisKKwkvKgor
CSAqIElmIHRoZSBUQ1AgbW9kZWwgZXhpc3RzIGl0IGNvdWxkIGJlIHRoYXQgdGhlIG1haW4gbGlz
dGVuaW5nCisJICogZW5kcG9pbnQgaXMgZ29uZSBidXQgdGhlcmUgc3RpbGwgZXhpc3RzIGEgY29u
bmVjdGVkIHNvY2tldCBmb3IgdGhpcworCSAqIGd1eS4gSWYgc28gd2UgY2FuIHJldHVybiB0aGUg
Zmlyc3Qgb25lIHRoYXQgd2UgZmluZC4gVGhpcyBtYXkgTk9UCisJICogYmUgdGhlIGNvcnJlY3Qg
b25lIHNvIHRoZSBjYWxsZXIgc2hvdWxkIGJlIHdhcnkgb24gdGhlIHJldHVybmVkIElOUC4KKwkg
KiBDdXJyZW50bHkgdGhlIG9ubHkgY2FsbGVyIHRoYXQgc2V0cyBmaW5kX3RjcF9wb29sIGlzIGlu
IGJpbmR4IHdoZXJlCisJICogd2UgYXJlIHZlcmlmeWluZyB0aGF0IGEgdXNlciBDQU4gYmluZCB0
aGUgYWRkcmVzcy4gSGUgZWl0aGVyCisJICogaGFzIGJvdW5kIGl0IGFscmVhZHksIG9yIHNvbWVv
bmUgZWxzZSBoYXMsIG9yIGl0cyBvcGVuIHRvIGJpbmQsCisJICogc28gdGhpcyBpcyBnb29kIGVu
b3VnaC4KKwkgKi8KKwlpZiAoaW5wID09IE5VTEwgJiYgZmluZF90Y3BfcG9vbCkgeworCQlmb3Ig
KGkgPSAwOyBpIDwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspICsgMTsgaSsrKSB7CisJCQlo
ZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKVtpXTsKKwkJCWlucCA9IHNjdHBf
ZW5kcG9pbnRfcHJvYmUobmFtLCBoZWFkLCBscG9ydCwgdnJmX2lkKTsKKwkJCWlmIChpbnApIHsK
KwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAoaW5wKSB7CisJCVNDVFBfSU5QX0lOQ1Jf
UkVGKGlucCk7CisJfQorCWlmIChoYXZlX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9JTkZPX1JV
TkxPQ0soKTsKKwl9CisJcmV0dXJuIChpbnApOworfQorCisKKy8qCisgKiBGaW5kIGFuIGFzc29j
aWF0aW9uIGZvciBhbiBlbmRwb2ludCB3aXRoIHRoZSBwb2ludGVyIHRvIHdob20geW91IHdhbnQg
dG8KKyAqIHNlbmQgdG8gYW5kIHRoZSBlbmRwb2ludCBwb2ludGVyLiBUaGUgYWRkcmVzcyBjYW4g
YmUgSVB2NCBvciBJUHY2LiBXZSBtYXkKKyAqIG5lZWQgdG8gY2hhbmdlIHRoZSAqdG8gdG8gc29t
ZSBvdGhlciBzdHJ1Y3QgbGlrZSBhIG1idWYuLi4KKyAqLworc3RydWN0IHNjdHBfdGNiICoKK3Nj
dHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc3RydWN0IHNvY2thZGRyICpmcm9tLCBzdHJ1Y3Qg
c29ja2FkZHIgKnRvLAorICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3Rw
X25ldHMgKipuZXRwLCBpbnQgZmluZF90Y3BfcG9vbCwKKyAgICB1aW50MzJfdCB2cmZfaWQpCit7
CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9IE5VTEw7CisJc3RydWN0IHNjdHBfdGNiICpzdGNi
OworCisJU0NUUF9JTlBfSU5GT19STE9DSygpOworCWlmIChmaW5kX3RjcF9wb29sKSB7CisJCWlm
IChpbnBfcCAhPSBOVUxMKSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoaW5w
X3AsIGZyb20sIHRvLCBuZXRwLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZy
Zl9pZCk7CisJCX0gZWxzZSB7CisJCQlzdGNiID0gc2N0cF90Y2Jfc3BlY2lhbF9sb2NhdGUoJmlu
cCwgZnJvbSwgdG8sIG5ldHAsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnJm
X2lkKTsKKwkJfQorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxP
Q0soKTsKKwkJCXJldHVybiAoc3RjYik7CisJCX0KKwl9CisJaW5wID0gc2N0cF9wY2JfZmluZGVw
KHRvLCAwLCAxLCB2cmZfaWQpOworCWlmIChpbnBfcCAhPSBOVUxMKSB7CisJCSppbnBfcCA9IGlu
cDsKKwl9CisJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogb2ssIHdlIGhhdmUgYW4gZW5kcG9pbnQsIG5v
dyBsZXRzIGZpbmQgdGhlIGFzc29jIGZvciBpdCAoaWYgYW55KQorCSAqIHdlIG5vdyBwbGFjZSB0
aGUgc291cmNlIGFkZHJlc3Mgb3IgZnJvbSBpbiB0aGUgdG8gb2YgdGhlIGZpbmQKKwkgKiBlbmRw
b2ludCBjYWxsLiBTaW5jZSBpbiByZWFsaXR5IHRoaXMgY2hhaW4gaXMgdXNlZCBmcm9tIHRoZQor
CSAqIGluYm91bmQgcGFja2V0IHNpZGUuCisJICovCisJaWYgKGlucF9wICE9IE5VTEwpIHsKKwkJ
c3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoaW5wX3AsIGZyb20sIG5ldHAsIHRv
LAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKwl9IGVsc2Ug
eworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBmcm9tLCBuZXRw
LCB0bywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisJfQor
CXJldHVybiAoc3RjYik7Cit9CisKKworLyoKKyAqIFRoaXMgcm91dGluZSB3aWxsIGdydWIgdGhy
b3VnaCB0aGUgbWJ1ZiB0aGF0IGlzIGEgSU5JVCBvciBJTklULUFDSyBhbmQKKyAqIGZpbmQgYWxs
IGFkZHJlc3NlcyB0aGF0IHRoZSBzZW5kZXIgaGFzIHNwZWNpZmllZCBpbiBhbnkgYWRkcmVzcyBs
aXN0LiBFYWNoCisgKiBhZGRyZXNzIHdpbGwgYmUgdXNlZCB0byBsb29rdXAgdGhlIFRDQiBhbmQg
c2VlIGlmIG9uZSBleGl0cy4KKyAqLworc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9zcGVjaWFsX2FkZHIoc3RydWN0IG1idWYgKm0sIGludCBvZmZzZXQsCisg
ICAgc3RydWN0IHNjdHBoZHIgKnNoLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9wLCBzdHJ1Y3Qg
c2N0cF9uZXRzICoqbmV0cCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCkKK3sKKwlzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1fYnVmOworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVm
aW5lZChJTkVUNikKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJdWludDE2X3QgcHR5cGU7Cisj
ZW5kaWYKKwl1aW50MTZfdCBwbGVuOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c2luNDsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42Owor
I2VuZGlmCisKKyNpZmRlZiBJTkVUCisJbWVtc2V0KCZzaW40LCAwLCBzaXplb2Yoc2luNCkpOwor
I2lmZGVmIEhBVkVfU0lOX0xFTgorCXNpbjQuc2luX2xlbiA9IHNpemVvZihzaW40KTsKKyNlbmRp
ZgorCXNpbjQuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisJc2luNC5zaW5fcG9ydCA9IHNoLT5zcmNf
cG9ydDsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJbWVtc2V0KCZzaW42LCAwLCBzaXplb2Yoc2lu
NikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHNpbjYp
OworI2VuZGlmCisJc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXNpbjYuc2luNl9wb3J0
ID0gc2gtPnNyY19wb3J0OworI2VuZGlmCisKKwlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X2luaXRfY2h1bmspOworCisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAm
cGFyYW1fYnVmLCBzaXplb2YocGFyYW1fYnVmKSk7CisJd2hpbGUgKHBoZHIgIT0gTlVMTCkgewor
CQkvKiBub3cgd2UgbXVzdCBzZWUgaWYgd2Ugd2FudCB0aGUgcGFyYW1ldGVyICovCisjaWYgZGVm
aW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFt
X3R5cGUpOworI2VuZGlmCisJCXBsZW4gPSBudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpOworCQlp
ZiAocGxlbiA9PSAwKSB7CisJCQlicmVhazsKKwkJfQorI2lmZGVmIElORVQKKwkJaWYgKHB0eXBl
ID09IFNDVFBfSVBWNF9BRERSRVNTICYmCisJCSAgICBwbGVuID09IHNpemVvZihzdHJ1Y3Qgc2N0
cF9pcHY0YWRkcl9wYXJhbSkpIHsKKwkJCS8qIEdldCB0aGUgcmVzdCBvZiB0aGUgYWRkcmVzcyAq
LworCQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gaXA0X3BhcmFtLCAqcDQ7CisKKwkJCXBo
ZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCSAgICAoc3RydWN0IHNjdHBf
cGFyYW1oZHIgKikmaXA0X3BhcmFtLCBzaXplb2YoaXA0X3BhcmFtKSk7CisJCQlpZiAocGhkciA9
PSBOVUxMKSB7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJCXA0ID0gKHN0cnVjdCBzY3Rw
X2lwdjRhZGRyX3BhcmFtICopcGhkcjsKKwkJCW1lbWNweSgmc2luNC5zaW5fYWRkciwgJnA0LT5h
ZGRyLCBzaXplb2YocDQtPmFkZHIpKTsKKwkJCS8qIGxvb2sgaXQgdXAgKi8KKwkJCXN0Y2IgPSBz
Y3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLAorCQkJICAgIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc2luNCwgbmV0cCwgZHN0LCBOVUxMKTsKKwkJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJ
CQlyZXR1cm4gKHN0Y2IpOworCQkJfQorCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAo
cHR5cGUgPT0gU0NUUF9JUFY2X0FERFJFU1MgJiYKKwkJICAgIHBsZW4gPT0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2lwdjZhZGRyX3BhcmFtKSkgeworCQkJLyogR2V0IHRoZSByZXN0IG9mIHRoZSBhZGRy
ZXNzICovCisJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSBpcDZfcGFyYW0sICpwNjsKKwor
CQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LAorCQkJICAgIChzdHJ1Y3Qg
c2N0cF9wYXJhbWhkciAqKSZpcDZfcGFyYW0sIHNpemVvZihpcDZfcGFyYW0pKTsKKwkJCWlmIChw
aGRyID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfQorCQkJcDYgPSAoc3RydWN0
IHNjdHBfaXB2NmFkZHJfcGFyYW0gKilwaGRyOworCQkJbWVtY3B5KCZzaW42LnNpbjZfYWRkciwg
JnA2LT5hZGRyLCBzaXplb2YocDYtPmFkZHIpKTsKKwkJCS8qIGxvb2sgaXQgdXAgKi8KKwkJCXN0
Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKGlucF9wLAorCQkJICAgIChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luNiwgbmV0cCwgZHN0LCBOVUxMKTsKKwkJCWlmIChzdGNiICE9IE5VTEwp
IHsKKwkJCQlyZXR1cm4gKHN0Y2IpOworCQkJfQorCQl9CisjZW5kaWYKKwkJb2Zmc2V0ICs9IFND
VFBfU0laRTMyKHBsZW4pOworCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQs
ICZwYXJhbV9idWYsCisJCQkJCSAgIHNpemVvZihwYXJhbV9idWYpKTsKKwl9CisJcmV0dXJuIChO
VUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY19ieV92
dGFnKHN0cnVjdCBzb2NrYWRkciAqZnJvbSwgc3RydWN0IHNvY2thZGRyICp0bywgdWludDMyX3Qg
dnRhZywKKwkJICAgICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25l
dHMgKipuZXRwLCB1aW50MTZfdCBycG9ydCwKKwkJICAgICAgIHVpbnQxNl90IGxwb3J0LCBpbnQg
c2tpcF9zcmNfY2hlY2ssIHVpbnQzMl90IHZyZl9pZCwgdWludDMyX3QgcmVtb3RlX3RhZykKK3sK
KwkvKgorCSAqIFVzZSBteSB2dGFnIHRvIGhhc2guIElmIHdlIGZpbmQgaXQgd2UgdGhlbiB2ZXJp
ZnkgdGhlIHNvdXJjZSBhZGRyCisJICogaXMgaW4gdGhlIGFzc29jLiBJZiBhbGwgZ29lcyB3ZWxs
IHdlIHNhdmUgYSBiaXQgb24gcmVjIG9mIGEKKwkgKiBwYWNrZXQuCisJICovCisJc3RydWN0IHNj
dHBhc29jaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJc3RydWN0IHNjdHBf
dGNiICpzdGNiOworI2lmZGVmIFNDVFBfTVZSRgorCXVuc2lnbmVkIGludCBpOworI2VuZGlmCisK
KwlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fz
b2NoYXNoKVtTQ1RQX1BDQkhBU0hfQVNPQyh2dGFnLAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2Nt
YXJrKSldOworCUxJU1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJCVNDVFBf
SU5QX1JMT0NLKHN0Y2ItPnNjdHBfZXApOworCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NL
KHN0Y2ItPnNjdHBfZXApOworCQkJY29udGludWU7CisJCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkJ
Zm9yIChpID0gMDsgaSA8IHN0Y2ItPnNjdHBfZXAtPm51bV92cmZzOyBpKyspIHsKKwkJCWlmIChz
dGNiLT5zY3RwX2VwLT5tX3ZyZl9pZHNbaV0gPT0gdnJmX2lkKSB7CisJCQkJYnJlYWs7CisJCQl9
CisJCX0KKwkJaWYgKGkgPT0gc3RjYi0+c2N0cF9lcC0+bnVtX3ZyZnMpIHsKKwkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCWNvbnRpbnVlOworCQl9CisjZWxzZQorCQlpZiAoc3RjYi0+c2N0
cF9lcC0+ZGVmX3ZyZl9pZCAhPSB2cmZfaWQpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soc3RjYi0+
c2N0cF9lcCk7CisJCQljb250aW51ZTsKKwkJfQorI2VuZGlmCisJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCVNDVFBfSU5QX1JVTkxPQ0soc3RjYi0+c2N0cF9lcCk7CisJCWlmIChzdGNiLT5hc29j
Lm15X3Z0YWcgPT0gdnRhZykgeworCQkJLyogY2FuZGlkYXRlICovCisJCQlpZiAoc3RjYi0+cnBv
cnQgIT0gcnBvcnQpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJY29udGludWU7
CisJCQl9CisJCQlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCAhPSBscG9ydCkgeworCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmIChzdGNi
LT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgeworCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIFJSUzpOZWVkIHRv
YWRkciBjaGVjayBoZXJlICovCisJCQlpZiAoc2N0cF9kb2VzX3N0Y2Jfb3duX3RoaXNfYWRkcihz
dGNiLCB0bykgPT0gMCkgeworCQkJICAgICAgICAvKiBFbmRwb2ludCBkb2VzIG5vdCBvd24gdGhp
cyBhZGRyZXNzICovCisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWNvbnRpbnVlOwor
CQkJfQorCQkJaWYgKHJlbW90ZV90YWcpIHsKKwkJCQkvKiBJZiB3ZSBoYXZlIGJvdGggdnRhZ3Mg
dGhhdCdzIGFsbCB3ZSBtYXRjaCBvbiAqLworCQkJCWlmIChzdGNiLT5hc29jLnBlZXJfdnRhZyA9
PSByZW1vdGVfdGFnKSB7CisJCQkJCS8qIElmIGJvdGggdGFncyBtYXRjaCB3ZSBjb25zaWRlciBp
dCBjb25jbHVzaXZlCisJCQkJCSAqIGFuZCBjaGVjayBOTyBzb3VyY2UvZGVzdGluYXRpb24gYWRk
cmVzc2VzCisJCQkJCSAqLworCQkJCQlnb3RvIGNvbmNsdXNpdmU7CisJCQkJfQorCQkJfQorCQkJ
aWYgKHNraXBfc3JjX2NoZWNrKSB7CisJCQljb25jbHVzaXZlOgorCQkJICAgICAgICBpZiAoZnJv
bSkgeworCQkJCQkqbmV0cCA9IHNjdHBfZmluZG5ldChzdGNiLCBmcm9tKTsKKwkJCQl9IGVsc2Ug
eworCQkJCQkqbmV0cCA9IE5VTEw7CS8qIHVua25vd24gKi8KKwkJCQl9CisJCQkJaWYgKGlucF9w
KQorCQkJCQkqaW5wX3AgPSBzdGNiLT5zY3RwX2VwOworCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9D
SygpOworCQkJCXJldHVybiAoc3RjYik7CisJCQl9CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3Rj
YiwgZnJvbSk7CisJCQlpZiAobmV0KSB7CisJCQkJLyogeWVwIGl0cyBoaW0uICovCisJCQkJKm5l
dHAgPSBuZXQ7CisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdnRhZ2V4cHJlc3MpOworCQkJCSpp
bnBfcCA9IHN0Y2ItPnNjdHBfZXA7CisJCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJ
cmV0dXJuIChzdGNiKTsKKwkJCX0gZWxzZSB7CisJCQkJLyoKKwkJCQkgKiBub3QgaGltLCB0aGlz
IHNob3VsZCBvbmx5IGhhcHBlbiBpbiByYXJlCisJCQkJICogY2FzZXMgc28gSSBwZWcgaXQuCisJ
CQkJICovCisJCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdnRhZ2JvZ3VzKTsKKwkJCX0KKwkJfQor
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJfQorCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwor
CXJldHVybiAoTlVMTCk7Cit9CisKKworLyoKKyAqIEZpbmQgYW4gYXNzb2NpYXRpb24gd2l0aCB0
aGUgcG9pbnRlciB0byB0aGUgaW5ib3VuZCBJUCBwYWNrZXQuIFRoaXMgY2FuIGJlCisgKiBhIElQ
djQgb3IgSVB2NiBwYWNrZXQuCisgKi8KK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3Nv
Y2lhdGlvbl9hZGRyKHN0cnVjdCBtYnVmICptLCBpbnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzb2Nr
YWRkciAqc3JjLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdCwKKyAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gs
IHN0cnVjdCBzY3RwX2NodW5raGRyICpjaCwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqKmlucF9w
LCBzdHJ1Y3Qgc2N0cF9uZXRzICoqbmV0cCwgdWludDMyX3QgdnJmX2lkKQoreworCXN0cnVjdCBz
Y3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJaWYgKHNoLT52X3Rh
ZykgeworCQkvKiB3ZSBvbmx5IGdvIGRvd24gdGhpcyBwYXRoIGlmIHZ0YWcgaXMgbm9uLXplcm8g
Ki8KKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jX2J5X3Z0YWcoc3JjLCBkc3QsIG50b2hsKHNoLT52
X3RhZyksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucF9wLCBuZXRwLCBzaC0+
c3JjX3BvcnQsIHNoLT5kZXN0X3BvcnQsIDAsIHZyZl9pZCwgMCk7CisJCWlmIChzdGNiKSB7CisJ
CQlyZXR1cm4gKHN0Y2IpOworCQl9CisJfQorCisJaWYgKGlucF9wKSB7CisJCXN0Y2IgPSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHNyYywgZHN0LCBpbnBfcCwgbmV0cCwKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgdnJmX2lkKTsKKwkJaW5wID0gKmlucF9w
OworCX0gZWxzZSB7CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKHNyYywg
ZHN0LCAmaW5wLCBuZXRwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAx
LCB2cmZfaWQpOworCX0KKwlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgInN0Y2I6JXAgaW5wOiVw
XG4iLCAodm9pZCAqKXN0Y2IsICh2b2lkICopaW5wKTsKKwlpZiAoc3RjYiA9PSBOVUxMICYmIGlu
cCkgeworCQkvKiBGb3VuZCBhIEVQIGJ1dCBub3QgdGhpcyBhZGRyZXNzICovCisJCWlmICgoY2gt
PmNodW5rX3R5cGUgPT0gU0NUUF9JTklUSUFUSU9OKSB8fAorCQkgICAgKGNoLT5jaHVua190eXBl
ID09IFNDVFBfSU5JVElBVElPTl9BQ0spKSB7CisJCQkvKi0KKwkJCSAqIHNwZWNpYWwgaG9vaywg
d2UgZG8gTk9UIHJldHVybiBsaW5wIG9yIGFuCisJCQkgKiBhc3NvY2lhdGlvbiB0aGF0IGlzIGxp
bmtlZCB0byBhbiBleGlzdGluZworCQkJICogYXNzb2NpYXRpb24gdGhhdCBpcyB1bmRlciB0aGUg
VENQIHBvb2wgKGkuZS4gbm8KKwkJCSAqIGxpc3RlbmVyIGV4aXN0cykuIFRoZSBlbmRwb2ludCBm
aW5kaW5nIHJvdXRpbmUKKwkJCSAqIHdpbGwgYWx3YXlzIGZpbmQgYSBsaXN0ZW5lciBiZWZvcmUg
ZXhhbWluaW5nIHRoZQorCQkJICogVENQIHBvb2wuCisJCQkgKi8KKwkJCWlmIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB7CisJCQkJaWYgKGlucF9wKSB7CisJ
CQkJCSppbnBfcCA9IE5VTEw7CisJCQkJfQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisJCQlz
dGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fc3BlY2lhbF9hZGRyKG0sCisJCQkgICAgb2Zmc2V0
LCBzaCwgJmlucCwgbmV0cCwgZHN0KTsKKwkJCWlmIChpbnBfcCAhPSBOVUxMKSB7CisJCQkJKmlu
cF9wID0gaW5wOworCQkJfQorCQl9CisJfQorCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAic3Rj
YiBpcyAlcFxuIiwgKHZvaWQgKilzdGNiKTsKKwlyZXR1cm4gKHN0Y2IpOworfQorCisvKgorICog
bG9va3VwIGFuIGFzc29jaWF0aW9uIGJ5IGFuIEFTQ09ORiBsb29rdXAgYWRkcmVzcy4KKyAqIGlm
IHRoZSBsb29rdXAgYWRkcmVzcyBpcyAwLjAuMC4wIG9yIDo6MCwgdXNlIHRoZSB2dGFnIHRvIGRv
IHRoZSBsb29rdXAKKyAqLworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9u
X2VwX2FzY29uZihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZnNldCwKKwkJCSAgICAgICBzdHJ1Y3Qg
c29ja2FkZHIgKmRzdCwgc3RydWN0IHNjdHBoZHIgKnNoLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHN0cnVjdCBzY3RwX2lucGNiICoqaW5wX3AsIHN0cnVjdCBzY3RwX25ldHMgKipu
ZXRwLCB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXVuaW9u
IHNjdHBfc29ja3N0b3JlIHJlbW90ZV9zdG9yZTsKKwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciBwYXJh
bV9idWYsICpwaGRyOworCWludCBwdHlwZTsKKwlpbnQgemVyb19hZGRyZXNzID0gMDsKKyNpZmRl
ZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisjZW5kaWYKKworCW1lbXNldCgmcmVtb3RlX3N0
b3JlLCAwLCBzaXplb2YocmVtb3RlX3N0b3JlKSk7CisJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFy
YW0obSwgb2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCisJCQkJICAg
JnBhcmFtX2J1Ziwgc2l6ZW9mKHN0cnVjdCBzY3RwX3BhcmFtaGRyKSk7CisJaWYgKHBoZHIgPT0g
TlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQg
YXNjb25mIGxvb2t1cCBhZGRyXG4iLAorCQkJX19mdW5jX18pOworCQlyZXR1cm4gTlVMTDsKKwl9
CisJcHR5cGUgPSAoaW50KSgodWludDMyX3QpIG50b2hzKHBoZHItPnBhcmFtX3R5cGUpKTsKKwkv
KiBnZXQgdGhlIGNvcnJlbGF0aW9uIGFkZHJlc3MgKi8KKwlzd2l0Y2ggKHB0eXBlKSB7CisjaWZk
ZWYgSU5FVDYKKwljYXNlIFNDVFBfSVBWNl9BRERSRVNTOgorCXsKKwkJLyogaXB2NiBhZGRyZXNz
IHBhcmFtICovCisJCXN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICpwNiwgcDZfYnVmOworCisJ
CWlmIChudG9ocyhwaGRyLT5wYXJhbV9sZW5ndGgpICE9IHNpemVvZihzdHJ1Y3Qgc2N0cF9pcHY2
YWRkcl9wYXJhbSkpIHsKKwkJCXJldHVybiBOVUxMOworCQl9CisJCXA2ID0gKHN0cnVjdCBzY3Rw
X2lwdjZhZGRyX3BhcmFtICopc2N0cF9nZXRfbmV4dF9wYXJhbShtLAorCQkJCQkJCQkgICAgICAg
b2Zmc2V0ICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9jaHVuayksCisJCQkJCQkJCSAgICAg
ICAmcDZfYnVmLnBoLCBzaXplb2YocDZfYnVmKSk7CisJCWlmIChwNiA9PSBOVUxMKSB7CisJCQlT
Q1RQREJHKFNDVFBfREVCVUdfSU5QVVQzLCAiJXM6IGZhaWxlZCB0byBnZXQgYXNjb25mIHY2IGxv
b2t1cCBhZGRyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJ
c2luNiA9ICZyZW1vdGVfc3RvcmUuc2luNjsKKwkJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVU
NjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCXNpbjYtPnNpbjZfbGVuID0gc2l6ZW9mKCpzaW42
KTsKKyNlbmRpZgorCQlzaW42LT5zaW42X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJCW1lbWNweSgm
c2luNi0+c2luNl9hZGRyLCAmcDYtPmFkZHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJ
aWYgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKQorCQkJemVyb19h
ZGRyZXNzID0gMTsKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgU0NU
UF9JUFY0X0FERFJFU1M6CisJeworCQkvKiBpcHY0IGFkZHJlc3MgcGFyYW0gKi8KKwkJc3RydWN0
IHNjdHBfaXB2NGFkZHJfcGFyYW0gKnA0LCBwNF9idWY7CisKKwkJaWYgKG50b2hzKHBoZHItPnBh
cmFtX2xlbmd0aCkgIT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2lwdjRhZGRyX3BhcmFtKSkgeworCQkJ
cmV0dXJuIE5VTEw7CisJCX0KKwkJcDQgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilz
Y3RwX2dldF9uZXh0X3BhcmFtKG0sCisJCQkJCQkJCSAgICAgICBvZmZzZXQgKyBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNjb25mX2NodW5rKSwKKwkJCQkJCQkJICAgICAgICZwNF9idWYucGgsIHNpemVv
ZihwNF9idWYpKTsKKwkJaWYgKHA0ID09IE5VTEwpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19J
TlBVVDMsICIlczogZmFpbGVkIHRvIGdldCBhc2NvbmYgdjQgbG9va3VwIGFkZHJcbiIsCisJCQkJ
X19mdW5jX18pOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCQlzaW4gPSAmcmVtb3RlX3N0b3Jl
LnNpbjsKKwkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4K
KwkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisJCXNpbi0+c2luX3BvcnQg
PSBzaC0+c3JjX3BvcnQ7CisJCW1lbWNweSgmc2luLT5zaW5fYWRkciwgJnA0LT5hZGRyLCBzaXpl
b2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQURE
Ul9BTlkpCisJCQl6ZXJvX2FkZHJlc3MgPSAxOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZh
dWx0OgorCQkvKiBpbnZhbGlkIGFkZHJlc3MgcGFyYW0gdHlwZSAqLworCQlyZXR1cm4gTlVMTDsK
Kwl9CisKKwlpZiAoemVyb19hZGRyZXNzKSB7CisJICAgICAgICBzdGNiID0gc2N0cF9maW5kYXNz
b2NfYnlfdnRhZyhOVUxMLCBkc3QsIG50b2hsKHNoLT52X3RhZyksIGlucF9wLAorCQkJCQkgICAg
ICBuZXRwLCBzaC0+c3JjX3BvcnQsIHNoLT5kZXN0X3BvcnQsIDEsIHZyZl9pZCwgMCk7CisJCWlm
IChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKCppbnBfcCk7CisJCX0KKwl9
IGVsc2UgeworCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcihpbnBfcCwKKwkJ
ICAgICZyZW1vdGVfc3RvcmUuc2EsIG5ldHAsCisJCSAgICBkc3QsIE5VTEwpOworCX0KKwlyZXR1
cm4gKHN0Y2IpOworfQorCisKKy8qCisgKiBhbGxvY2F0ZSBhIHNjdHBfaW5wY2IgYW5kIHNldHVw
IGEgdGVtcG9yYXJ5IGJpbmRpbmcgdG8gYSBwb3J0L2FsbAorICogYWRkcmVzc2VzLiBUaGlzIHdh
eSBpZiB3ZSBkb24ndCBnZXQgYSBiaW5kIHdlIGJ5IGRlZmF1bHQgcGljayBhIGVwaGVtZXJhbAor
ICogcG9ydCB3aXRoIGFsbCBhZGRyZXNzZXMgYm91bmQuCisgKi8KK2ludAorc2N0cF9pbnBjYl9h
bGxvYyhzdHJ1Y3Qgc29ja2V0ICpzbywgdWludDMyX3QgdnJmX2lkKQoreworCS8qCisJICogd2Ug
Z2V0IGNhbGxlZCB3aGVuIGEgbmV3IGVuZHBvaW50IHN0YXJ0cyB1cC4gV2UgbmVlZCB0byBhbGxv
Y2F0ZQorCSAqIHRoZSBzY3RwX2lucGNiIHN0cnVjdHVyZSBmcm9tIHRoZSB6b25lIGFuZCBpbml0
IGl0LiBNYXJrIGl0IGFzCisJICogdW5ib3VuZCBhbmQgZmluZCBhIHBvcnQgdGhhdCB3ZSBjYW4g
dXNlIGFzIGFuIGVwaGVtZXJhbCB3aXRoCisJICogSU5BRERSX0FOWS4gSWYgdGhlIHVzZXIgYmlu
ZHMgbGF0ZXIgbm8gcHJvYmxlbSB3ZSBjYW4gdGhlbiBhZGQgaW4KKwkgKiB0aGUgc3BlY2lmaWMg
YWRkcmVzc2VzLiBBbmQgc2V0dXAgdGhlIGRlZmF1bHQgcGFyYW1ldGVycyBmb3IgdGhlCisJICog
RVAuCisJICovCisJaW50IGksIGVycm9yOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3Ry
dWN0IHNjdHBfcGNiICptOworCXN0cnVjdCB0aW1ldmFsIHRpbWU7CisJc2N0cF9zaGFyZWRrZXlf
dCAqbnVsbF9rZXk7CisKKwllcnJvciA9IDA7CisKKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJ
aW5wID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIHN0cnVjdCBz
Y3RwX2lucGNiKTsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIk91dCBvZiBT
Q1RQLUlOUENCIHN0cnVjdHVyZXMgLSBubyByZXNvdXJjZXNcbiIpOworCQlTQ1RQX0lOUF9JTkZP
X1dVTkxPQ0soKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7CisJCXJldHVybiAoRU5PQlVGUyk7CisJfQorCS8qIHph
cCBpdCAqLworCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisKKwkvKiBidW1wIGdlbmVy
YXRpb25zICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaW5wLT5pcF9pbnAuaW5wLmlucF9z
dGF0ZSA9IElOUENCX1NUQVRFX0lOVVNFOworI2VuZGlmCisJLyogc2V0dXAgc29ja2V0IHBvaW50
ZXJzICovCisJaW5wLT5zY3RwX3NvY2tldCA9IHNvOworCWlucC0+aXBfaW5wLmlucC5pbnBfc29j
a2V0ID0gc287CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpbnAtPmlwX2lucC5pbnAuaW5w
X2NyZWQgPSBjcmhvbGQoc28tPnNvX2NyZWQpOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKSAmJiAhZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpZiAoSU5Q
X1NPQ0tBRihzbykgPT0gQUZfSU5FVDYpIHsKKwkJaWYgKE1PRFVMRV9HTE9CQUwoaXA2X2F1dG9f
Zmxvd2xhYmVsKSkgeworCQkJaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFncyB8PSBJTjZQX0FVVE9G
TE9XTEFCRUw7CisJCX0KKwkJaWYgKE1PRFVMRV9HTE9CQUwoaXA2X3Y2b25seSkpIHsKKwkJCWlu
cC0+aXBfaW5wLmlucC5pbnBfZmxhZ3MgfD0gSU42UF9JUFY2X1Y2T05MWTsKKwkJfQorCX0KKyNl
bmRpZgorI2VuZGlmCisJaW5wLT5zY3RwX2Fzc29jaWRfY291bnRlciA9IDE7CisJaW5wLT5wYXJ0
aWFsX2RlbGl2ZXJ5X3BvaW50ID0gU0NUUF9TQl9MSU1JVF9SQ1Yoc28pID4+IFNDVFBfUEFSVElB
TF9ERUxJVkVSWV9TSElGVDsKKwlpbnAtPnNjdHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVMVF9N
QVhTRUdNRU5UOworCWlucC0+bWF4X2N3bmQgPSAwOworCWlucC0+c2N0cF9jbXRfb25fb2ZmID0g
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpOworCWlucC0+ZWNuX3N1cHBvcnRlZCA9
ICh1aW50OF90KVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKTsKKwlpbnAtPnByc2N0
cF9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKTsK
KwlpbnAtPmF1dGhfc3VwcG9ydGVkID0gKHVpbnQ4X3QpU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1
dGhfZW5hYmxlKTsKKwlpbnAtPmFzY29uZl9zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYXNjb25mX2VuYWJsZSk7CisJaW5wLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPSAo
dWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjb25maWdfZW5hYmxlKTsKKwlpbnAtPm5y
c2Fja19zdXBwb3J0ZWQgPSAodWludDhfdClTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJzYWNrX2Vu
YWJsZSk7CisJaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9ICh1aW50OF90KVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9wa3Rkcm9wX2VuYWJsZSk7CisJaW5wLT5pZGF0YV9zdXBwb3J0ZWQgPSAwOworCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpbnAtPmZpYm51bSA9IHNvLT5zb19maWJudW07Cisj
ZWxzZQorCWlucC0+ZmlibnVtID0gMDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlpbnAtPnVscF9pbmZvID0gTlVMTDsKKwlpbnAtPnJlY3ZfY2FsbGJhY2sgPSBOVUxMOwor
CWlucC0+c2VuZF9jYWxsYmFjayA9IE5VTEw7CisJaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IDA7
CisjZW5kaWYKKwkvKiBpbml0IHRoZSBzbWFsbCBoYXNoIHRhYmxlIHdlIHVzZSB0byB0cmFjayBh
c29jaWQgPC0+IHRjYiAqLworCWlucC0+c2N0cF9hc29jaWRoYXNoID0gU0NUUF9IQVNIX0lOSVQo
U0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRSwgJmlucC0+aGFzaGFzb2NpZG1hcmspOworCWlmIChp
bnAtPnNjdHBfYXNvY2lkaGFzaCA9PSBOVUxMKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KwkJY3JmcmVlKGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCk7CisjZW5kaWYKKwkJU0NUUF9aT05F
X0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApLCBpbnApOworCQlTQ1RQX0lOUF9JTkZP
X1dVTkxPQ0soKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJU0NUUF9JTkNSX0VQX0NPVU5U
KCk7CisJaW5wLT5pcF9pbnAuaW5wLmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0
bCk7CisJU0NUUF9JTlBfSU5GT19XVU5MT0NLKCk7CisKKwlzby0+c29fcGNiID0gKGNhZGRyX3Qp
aW5wOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA4
MDMwMDAKKwlpZiAoKFNDVFBfU09fVFlQRShzbykgPT0gU09DS19ER1JBTSkgfHwKKwkgICAgKFND
VFBfU09fVFlQRShzbykgPT0gU09DS19TRVFQQUNLRVQpKSB7CisjZWxzZQorCWlmIChTQ1RQX1NP
X1RZUEUoc28pID09IFNPQ0tfU0VRUEFDS0VUKSB7CisjZW5kaWYKKwkJLyogVURQIHN0eWxlIHNv
Y2tldCAqLworCQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8CisJ
CSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKTsKKwkJLyogQmUgc3VyZSBpdCBpcyBOT04tQkxP
Q0tJTkcgSU8gZm9yIFVEUCAqLworCQkvKiBTQ1RQX1NFVF9TT19OQklPKHNvKTsgKi8KKwl9IGVs
c2UgaWYgKFNDVFBfU09fVFlQRShzbykgPT0gU09DS19TVFJFQU0pIHsKKwkJLyogVENQIHN0eWxl
IHNvY2tldCAqLworCQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSB8
CisJCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKTsKKwkJLyogQmUgc3VyZSB3ZSBoYXZlIGJs
b2NraW5nIElPIGJ5IGRlZmF1bHQgKi8KKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9DTEVBUl9T
T19OQklPKHNvKTsKKwkJU09DS19VTkxPQ0soc28pOworI2lmIGRlZmluZWQoX19QYW5kYV9fKQor
CX0gZWxzZSBpZiAoU0NUUF9TT19UWVBFKHNvKSA9PSBTT0NLX0ZBU1RTRVFQQUNLRVQpIHsKKwkJ
aW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAorCQkgICAgU0NUUF9Q
Q0JfRkxBR1NfVU5CT1VORCk7CisJfSBlbHNlIGlmIChTQ1RQX1NPX1RZUEUoc28pID09IFNPQ0tf
RkFTVFNUUkVBTSkgeworCQlpbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSB8CisJCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKTsKKyNlbmRpZgorCX0gZWxzZSB7CisJ
CS8qCisJCSAqIHVuc3VwcG9ydGVkIHNvY2tldCB0eXBlIChSQVcsIGV0YyktIGluIGNhc2Ugd2Ug
bWlzc2VkIGl0CisJCSAqIGluIHByb3Rvc3cKKwkJICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVPUE5PVFNVUFApOworCQlzby0+
c29fcGNiID0gTlVMTDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQljcmZyZWUoaW5wLT5p
cF9pbnAuaW5wLmlucF9jcmVkKTsKKyNlbmRpZgorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0Vf
SU5GTyhpcGlfem9uZV9lcCksIGlucCk7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBf
RlJBR19MRVZFTF8xKSB7CisJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZS
QUdfSU5URVJMRUFWRSk7CisJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19J
TlRFUkxFQVZFX1NUUk1TKTsKKwl9IGVsc2UgaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZh
dWx0X2ZyYWdfaW50ZXJsZWF2ZSkgPT0gU0NUUF9GUkFHX0xFVkVMXzIpIHsKKwkJc2N0cF9mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKTsKKwkJc2N0cF9mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisJfSBlbHNlIGlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID09IFNDVFBf
RlJBR19MRVZFTF8wKSB7CisJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19G
UkFHX0lOVEVSTEVBVkUpOworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
SU5URVJMRUFWRV9TVFJNUyk7CisJfQorCWlucC0+c2N0cF90Y2JoYXNoID0gU0NUUF9IQVNIX0lO
SVQoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpLAorCQkJCQkgICAmaW5wLT5zY3Rw
X2hhc2htYXJrKTsKKwlpZiAoaW5wLT5zY3RwX3RjYmhhc2ggPT0gTlVMTCkgeworCQlTQ1RQX1BS
SU5URigiT3V0IG9mIFNDVFAtSU5QQ0ItPmhhc2hpbml0IC0gbm8gcmVzb3VyY2VzXG4iKTsKKwkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwg
RU5PQlVGUyk7CisJCXNvLT5zb19wY2IgPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisJCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOworI2VuZGlmCisJCVNDVFBfWk9O
RV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2VwKSwgaW5wKTsKKwkJcmV0dXJuIChFTk9C
VUZTKTsKKwl9CisjaWZkZWYgU0NUUF9NVlJGCisJaW5wLT52cmZfc2l6ZSA9IFNDVFBfREVGQVVM
VF9WUkZfU0laRTsKKwlTQ1RQX01BTExPQyhpbnAtPm1fdnJmX2lkcywgdWludDMyX3QgKiwKKwkJ
ICAgIChzaXplb2YodWludDMyX3QpICogaW5wLT52cmZfc2l6ZSksIFNDVFBfTV9NVlJGKTsKKwlp
ZiAoaW5wLT5tX3ZyZl9pZHMgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9CVUZTKTsKKwkJc28tPnNvX3BjYiA9
IE5VTEw7CisJCVNDVFBfSEFTSF9GUkVFKGlucC0+c2N0cF90Y2JoYXNoLCBpbnAtPnNjdHBfaGFz
aG1hcmspOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCWNyZnJlZShpbnAtPmlwX2lucC5p
bnAuaW5wX2NyZWQpOworI2VuZGlmCisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlw
aV96b25lX2VwKSwgaW5wKTsKKwkJcmV0dXJuIChFTk9CVUZTKTsKKwl9CisJaW5wLT5tX3ZyZl9p
ZHNbMF0gPSB2cmZfaWQ7CisJaW5wLT5udW1fdnJmcyA9IDE7CisjZW5kaWYKKwlpbnAtPmRlZl92
cmZfaWQgPSB2cmZfaWQ7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQ
UExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpCisJaW5wLT5pcF9pbnAu
aW5wLmlucGNiX210eCA9IGxja19tdHhfYWxsb2NfaW5pdChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5m
bykubXR4X2dycCwgU0NUUF9CQVNFX0lORk8oc2N0YmluZm8pLm10eF9hdHRyKTsKKwlpZiAoaW5w
LT5pcF9pbnAuaW5wLmlucGNiX210eCA9PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJpbl9wY2Jh
bGxvYzogY2FuJ3QgYWxsb2MgbXV0ZXghIHNvPSVwXG4iLCAodm9pZCAqKXNvKTsKKyNpZmRlZiBT
Q1RQX01WUkYKKwkJU0NUUF9GUkVFKGlucC0+bV92cmZfaWRzLCBTQ1RQX01fTVZSRik7CisjZW5k
aWYKKwkJU0NUUF9IQVNIX0ZSRUUoaW5wLT5zY3RwX3RjYmhhc2gsIGlucC0+c2N0cF9oYXNobWFy
ayk7CisJCXNvLT5zb19wY2IgPSBOVUxMOworCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9lcCksIGlucCk7CisJCVNDVFBfVU5MT0NLX0VYQyhTQ1RQX0JBU0VfSU5GTyhz
Y3RiaW5mbykuaXBpX2xvY2spOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQor
I2VsaWYgZGVmaW5lZChBUFBMRV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikK
KwlsY2tfbXR4X2luaXQoJmlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHgsIFNDVFBfQkFTRV9JTkZP
KHNjdGJpbmZvKS5tdHhfZ3JwLCBTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2F0dHIpOwor
I2Vsc2UKKwlsY2tfbXR4X2luaXQoJmlucC0+aXBfaW5wLmlucC5pbnBjYl9tdHgsIFNDVFBfQkFT
RV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19ncnAsIFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5p
cGlfbG9ja19hdHRyKTsKKyNlbmRpZgorI2VuZGlmCisJU0NUUF9JTlBfSU5GT19XTE9DSygpOwor
CVNDVFBfSU5QX0xPQ0tfSU5JVChpbnApOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJSU5Q
X0xPQ0tfSU5JVCgmaW5wLT5pcF9pbnAuaW5wLCAiaW5wIiwgInNjdHBpbnAiKTsKKyNlbmRpZgor
CVNDVFBfSU5QX1JFQURfSU5JVChpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKGlu
cCk7CisJLyogbG9jayB0aGUgbmV3IGVwICovCisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKworCS8q
IGFkZCBpdCB0byB0aGUgaW5mbyBhcmVhICovCisJTElTVF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNF
X0lORk8obGlzdGhlYWQpLCBpbnAsIHNjdHBfbGlzdCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJaW5wLT5pcF9pbnAuaW5wLmlucF9wY2JpbmZvID0gJlNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KTsKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BB
UkQpIHx8IGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04p
CisJTElTVF9JTlNFUlRfSEVBRChTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubGlzdGhlYWQsICZp
bnAtPmlwX2lucC5pbnAsIGlucF9saXN0KTsKKyNlbHNlCisJTElTVF9JTlNFUlRfSEVBRChTQ1RQ
X0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xpc3RoZWFkLCAmaW5wLT5pcF9pbnAuaW5wLCBpbnBf
bGlzdCk7CisjZW5kaWYKKyNlbmRpZgorCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCisJVEFJ
TFFfSU5JVCgmaW5wLT5yZWFkX3F1ZXVlKTsKKwlMSVNUX0lOSVQoJmlucC0+c2N0cF9hZGRyX2xp
c3QpOworCisJTElTVF9JTklUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKworI2lmZGVmIFNDVFBf
VFJBQ0tfRlJFRURfQVNPQ1MKKwkvKiBURU1QIENPREUgKi8KKwlMSVNUX0lOSVQoJmlucC0+c2N0
cF9hc29jX2ZyZWVfbGlzdCk7CisjZW5kaWYKKwkvKiBJbml0IHRoZSB0aW1lciBzdHJ1Y3R1cmUg
Zm9yIHNpZ25hdHVyZSBjaGFuZ2UgKi8KKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmlucC0+c2N0cF9l
cC5zaWduYXR1cmVfY2hhbmdlLnRpbWVyKTsKKwlpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5n
ZS50eXBlID0gU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRTsKKworCS8qIG5vdyBpbml0IHRoZSBh
Y3R1YWwgZW5kcG9pbnQgZGVmYXVsdCBkYXRhICovCisJbSA9ICZpbnAtPnNjdHBfZXA7CisKKwkv
KiBzZXR1cCB0aGUgYmFzZSB0aW1lb3V0IGluZm9ybWF0aW9uICovCisJbS0+c2N0cF90aW1lb3V0
dGlja3NbU0NUUF9USU1FUl9TRU5EXSA9IFNFQ19UT19USUNLUyhTQ1RQX1NFTkRfU0VDKTsJLyog
bmVlZGVkID8gKi8KKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX0lOSVRdID0gU0VD
X1RPX1RJQ0tTKFNDVFBfSU5JVF9TRUMpOwkvKiBuZWVkZWQgPyAqLworCW0tPnNjdHBfdGltZW91
dHRpY2tzW1NDVFBfVElNRVJfUkVDVl0gPSBNU0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9kZWxheWVkX3NhY2tfdGltZV9kZWZhdWx0KSk7CisJbS0+c2N0cF90aW1lb3V0dGlja3Nb
U0NUUF9USU1FUl9IRUFSVEJFQVRdID0gTVNFQ19UT19USUNLUyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpKTsKKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tT
Q1RQX1RJTUVSX1BNVFVdID0gU0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wbXR1
X3JhaXNlX3RpbWVfZGVmYXVsdCkpOworCW0tPnNjdHBfdGltZW91dHRpY2tzW1NDVFBfVElNRVJf
TUFYU0hVVERPV05dID0gU0VDX1RPX1RJQ0tTKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zaHV0ZG93
bl9ndWFyZF90aW1lX2RlZmF1bHQpKTsKKwltLT5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVS
X1NJR05BVFVSRV0gPSBTRUNfVE9fVElDS1MoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlY3JldF9s
aWZldGltZV9kZWZhdWx0KSk7CisJLyogYWxsIG1heC9taW4gbWF4IGFyZSBpbiBtcyAqLworCW0t
PnNjdHBfbWF4cnRvID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19tYXhfZGVmYXVsdCk7CisJ
bS0+c2N0cF9taW5ydG8gPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21pbl9kZWZhdWx0KTsK
KwltLT5pbml0aWFsX3J0byA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9faW5pdGlhbF9kZWZh
dWx0KTsKKwltLT5pbml0aWFsX2luaXRfcnRvX21heCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9p
bml0X3J0b19tYXhfZGVmYXVsdCk7CisJbS0+c2N0cF9zYWNrX2ZyZXEgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfc2Fja19mcmVxX2RlZmF1bHQpOworCW0tPm1heF9pbml0X3RpbWVzID0gU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2luaXRfcnR4X21heF9kZWZhdWx0KTsKKwltLT5tYXhfc2VuZF90aW1l
cyA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpOworCW0tPmRl
Zl9uZXRfZmFpbHVyZSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVs
dCk7CisJbS0+ZGVmX25ldF9wZl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGF0
aF9wZl90aHJlc2hvbGQpOworCW0tPnNjdHBfc3dzX3NlbmRlciA9IFNDVFBfU1dTX1NFTkRFUl9E
RUY7CisJbS0+c2N0cF9zd3NfcmVjZWl2ZXIgPSBTQ1RQX1NXU19SRUNFSVZFUl9ERUY7CisJbS0+
bWF4X2J1cnN0ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9idXJzdF9kZWZhdWx0KTsKKwlt
LT5mcl9tYXhfYnVyc3QgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZnJfbWF4X2J1cnN0X2RlZmF1
bHQpOworCisJbS0+c2N0cF9kZWZhdWx0X2NjX21vZHVsZSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9kZWZhdWx0X2NjX21vZHVsZSk7CisJbS0+c2N0cF9kZWZhdWx0X3NzX21vZHVsZSA9IFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X3NzX21vZHVsZSk7CisJbS0+bWF4X29wZW5fc3RyZWFt
c19pbnRvbWUgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19kZWZh
dWx0KTsKKwkvKiBudW1iZXIgb2Ygc3RyZWFtcyB0byBwcmUtb3BlbiBvbiBhIGFzc29jaWF0aW9u
ICovCisJbS0+cHJlX29wZW5fc3RyZWFtX2NvdW50ID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX25y
X291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCk7CisKKwltLT5kZWZhdWx0X210dSA9IDA7CisJLyog
QWRkIGFkYXB0YXRpb24gY29va2llICovCisJbS0+YWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3Ig
PSAwOworCW0tPmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMDsKKworCS8q
IHNlZWQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKwltLT5yYW5kb21fY291bnRlciA9IDE7
CisJbS0+c3RvcmVfYXQgPSBTQ1RQX1NJR05BVFVSRV9TSVpFOworCVNDVFBfUkVBRF9SQU5ET00o
bS0+cmFuZG9tX251bWJlcnMsIHNpemVvZihtLT5yYW5kb21fbnVtYmVycykpOworCXNjdHBfZmls
bF9yYW5kb21fc3RvcmUobSk7CisKKwkvKiBNaW5pbXVtIGNvb2tpZSBzaXplICovCisJbS0+c2l6
ZV9vZl9hX2Nvb2tpZSA9IChzaXplb2Yoc3RydWN0IHNjdHBfaW5pdF9tc2cpICogMikgKworCSAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfc3RhdGVfY29va2llKTsKKwltLT5zaXplX29mX2FfY29va2ll
ICs9IFNDVFBfU0lHTkFUVVJFX1NJWkU7CisKKwkvKiBTZXR1cCB0aGUgaW5pdGlhbCBzZWNyZXQg
Ki8KKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdGltZSk7CisJbS0+dGltZV9vZl9zZWNy
ZXRfY2hhbmdlID0gdGltZS50dl9zZWM7CisKKwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJf
T0ZfU0VDUkVUUzsgaSsrKSB7CisJCW0tPnNlY3JldF9rZXlbMF1baV0gPSBzY3RwX3NlbGVjdF9p
bml0aWFsX1RTTihtKTsKKwl9CisJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfTkVX
Q09PS0lFLCBpbnAsIE5VTEwsIE5VTEwpOworCisJLyogSG93IGxvbmcgaXMgYSBjb29raWUgZ29v
ZCBmb3IgPyAqLworCW0tPmRlZl9jb29raWVfbGlmZSA9IE1TRUNfVE9fVElDS1MoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpKTsKKwkvKgorCSAqIEluaXRp
YWxpemUgYXV0aGVudGljYXRpb24gcGFyYW1ldGVycworCSAqLworCW0tPmxvY2FsX2htYWNzID0g
c2N0cF9kZWZhdWx0X3N1cHBvcnRlZF9obWFjbGlzdCgpOworCW0tPmxvY2FsX2F1dGhfY2h1bmtz
ID0gc2N0cF9hbGxvY19jaHVua2xpc3QoKTsKKwlpZiAoaW5wLT5hc2NvbmZfc3VwcG9ydGVkKSB7
CisJCXNjdHBfYXV0aF9hZGRfY2h1bmsoU0NUUF9BU0NPTkYsIG0tPmxvY2FsX2F1dGhfY2h1bmtz
KTsKKwkJc2N0cF9hdXRoX2FkZF9jaHVuayhTQ1RQX0FTQ09ORl9BQ0ssIG0tPmxvY2FsX2F1dGhf
Y2h1bmtzKTsKKwl9CisJbS0+ZGVmYXVsdF9kc2NwID0gMDsKKyNpZmRlZiBJTkVUNgorCW0tPmRl
ZmF1bHRfZmxvd2xhYmVsID0gMDsKKyNlbmRpZgorCW0tPnBvcnQgPSAwOyAvKiBlbmNhcHN1bGF0
aW9uIGRpc2FibGVkIGJ5IGRlZmF1bHQgKi8KKwlMSVNUX0lOSVQoJm0tPnNoYXJlZF9rZXlzKTsK
KwkvKiBhZGQgZGVmYXVsdCBOVUxMIGtleSBhcyBrZXkgaWQgMCAqLworCW51bGxfa2V5ID0gc2N0
cF9hbGxvY19zaGFyZWRrZXkoKTsKKwlzY3RwX2luc2VydF9zaGFyZWRrZXkoJm0tPnNoYXJlZF9r
ZXlzLCBudWxsX2tleSk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworI2lmZGVmIFNDVFBfTE9H
X0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTIpOworI2VuZGlmCisJcmV0
dXJuIChlcnJvcik7Cit9CisKKwordm9pZAorc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2Moc3RydWN0
IHNjdHBfaW5wY2IgKm9sZF9pbnAsIHN0cnVjdCBzY3RwX2lucGNiICpuZXdfaW5wLAorICAgIHN0
cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJdWludDE2
X3QgbHBvcnQsIHJwb3J0OworCXN0cnVjdCBzY3RwcGNiaGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0
cF9sYWRkciAqbGFkZHIsICpvbGFkZHI7CisKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlTQ1RQX0lOUF9JTkZPX1dMT0NL
KCk7CisJU0NUUF9JTlBfV0xPQ0sob2xkX2lucCk7CisJU0NUUF9JTlBfV0xPQ0sobmV3X2lucCk7
CisJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29j
LnJlZmNudCwgMSk7CisKKwluZXdfaW5wLT5zY3RwX2VwLnRpbWVfb2Zfc2VjcmV0X2NoYW5nZSA9
CisJICAgIG9sZF9pbnAtPnNjdHBfZXAudGltZV9vZl9zZWNyZXRfY2hhbmdlOworCW1lbWNweShu
ZXdfaW5wLT5zY3RwX2VwLnNlY3JldF9rZXksIG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSwK
KwkgICAgc2l6ZW9mKG9sZF9pbnAtPnNjdHBfZXAuc2VjcmV0X2tleSkpOworCW5ld19pbnAtPnNj
dHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID0KKwkgICAgb2xkX2lucC0+c2N0cF9lcC5jdXJy
ZW50X3NlY3JldF9udW1iZXI7CisJbmV3X2lucC0+c2N0cF9lcC5sYXN0X3NlY3JldF9udW1iZXIg
PQorCSAgICBvbGRfaW5wLT5zY3RwX2VwLmxhc3Rfc2VjcmV0X251bWJlcjsKKwluZXdfaW5wLT5z
Y3RwX2VwLnNpemVfb2ZfYV9jb29raWUgPSBvbGRfaW5wLT5zY3RwX2VwLnNpemVfb2ZfYV9jb29r
aWU7CisKKwkvKiBtYWtlIGl0IHNvIG5ldyBkYXRhIHBvdXJzIGludG8gdGhlIG5ldyBzb2NrZXQg
Ki8KKwlzdGNiLT5zY3RwX3NvY2tldCA9IG5ld19pbnAtPnNjdHBfc29ja2V0OworCXN0Y2ItPnNj
dHBfZXAgPSBuZXdfaW5wOworCisJLyogQ29weSB0aGUgcG9ydCBhY3Jvc3MgKi8KKwlscG9ydCA9
IG5ld19pbnAtPnNjdHBfbHBvcnQgPSBvbGRfaW5wLT5zY3RwX2xwb3J0OworCXJwb3J0ID0gc3Rj
Yi0+cnBvcnQ7CisJLyogUHVsbCB0aGUgdGNiIGZyb20gdGhlIG9sZCBhc3NvY2lhdGlvbiAqLwor
CUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiaGFzaCk7CisJTElTVF9SRU1PVkUoc3RjYiwgc2N0
cF90Y2JsaXN0KTsKKwlpZiAoc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFzaCkgeworCQlMSVNUX1JF
TU9WRShzdGNiLCBzY3RwX3RjYmFzb2NpZGhhc2gpOworCX0KKwkvKiBOb3cgaW5zZXJ0IHRoZSBu
ZXdfaW5wIGludG8gdGhlIFRDUCBjb25uZWN0ZWQgaGFzaCAqLworCWhlYWQgPSAmU0NUUF9CQVNF
X0lORk8oc2N0cF90Y3BlcGhhc2gpW1NDVFBfUENCSEFTSF9BTExBRERSKChscG9ydCB8IHJwb3J0
KSwgU0NUUF9CQVNFX0lORk8oaGFzaHRjcG1hcmspKV07CisKKwlMSVNUX0lOU0VSVF9IRUFEKGhl
YWQsIG5ld19pbnAsIHNjdHBfaGFzaCk7CisJLyogSXRzIHNhZmUgdG8gYWNjZXNzICovCisJbmV3
X2lucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfVU5CT1VORDsKKworCS8qIE5vdyBt
b3ZlIHRoZSB0Y2IgaW50byB0aGUgZW5kcG9pbnQgbGlzdCAqLworCUxJU1RfSU5TRVJUX0hFQUQo
Jm5ld19pbnAtPnNjdHBfYXNvY19saXN0LCBzdGNiLCBzY3RwX3RjYmxpc3QpOworCS8qCisJICog
UXVlc3Rpb24sIGRvIHdlIGV2ZW4gbmVlZCB0byB3b3JyeSBhYm91dCB0aGUgZXAtaGFzaCBzaW5j
ZSB3ZQorCSAqIG9ubHkgaGF2ZSBvbmUgY29ubmVjdGlvbj8gUHJvYmFibHkgbm90IDo+IHNvIGxl
dHMgZ2V0IHJpZCBvZiBpdAorCSAqIGFuZCBub3Qgc3VjayB1cCBhbnkga2VybmVsIG1lbW9yeSBp
biB0aGF0LgorCSAqLworCWlmIChzdGNiLT5hc29jLmluX2Fzb2NpZF9oYXNoKSB7CisJCXN0cnVj
dCBzY3RwYXNvY2hlYWQgKmxoZDsKKwkJbGhkID0gJm5ld19pbnAtPnNjdHBfYXNvY2lkaGFzaFtT
Q1RQX1BDQkhBU0hfQVNPQyhzdGNiLT5hc29jLmFzc29jX2lkLAorCQkJbmV3X2lucC0+aGFzaGFz
b2NpZG1hcmspXTsKKwkJTElTVF9JTlNFUlRfSEVBRChsaGQsIHN0Y2IsIHNjdHBfdGNiYXNvY2lk
aGFzaCk7CisJfQorCS8qIE9rLiBMZXQncyByZXN0YXJ0IHRpbWVyLiAqLworCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBuZXdfaW5wLAorCQkgICAgc3RjYiwgbmV0
KTsKKwl9CisKKwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwlpZiAobmV3X2lucC0+c2N0cF90
Y2JoYXNoICE9IE5VTEwpIHsKKwkJU0NUUF9IQVNIX0ZSRUUobmV3X2lucC0+c2N0cF90Y2JoYXNo
LCBuZXdfaW5wLT5zY3RwX2hhc2htYXJrKTsKKwkJbmV3X2lucC0+c2N0cF90Y2JoYXNoID0gTlVM
TDsKKwl9CisJaWYgKChuZXdfaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRB
TEwpID09IDApIHsKKwkJLyogU3Vic2V0IGJvdW5kLCBzbyBjb3B5IGluIHRoZSBsYWRkciBsaXN0
IGZyb20gdGhlIG9sZF9pbnAgKi8KKwkJTElTVF9GT1JFQUNIKG9sYWRkciwgJm9sZF9pbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlsYWRkciA9IFNDVFBfWk9ORV9HRVQo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7CisJCQlp
ZiAobGFkZHIgPT0gTlVMTCkgeworCQkJCS8qCisJCQkJICogR2FrLCB3aGF0IGNhbiB3ZSBkbz8g
VGhpcyBhc3NvYyBpcyByZWFsbHkKKwkJCQkgKiBIT1NFRC4gV2UgcHJvYmFibHkgc2hvdWxkIHNl
bmQgYW4gYWJvcnQKKwkJCQkgKiBoZXJlLgorCQkJCSAqLworCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19QQ0IxLCAiQXNzb2NpYXRpb24gaG9zZWQgaW4gVENQIG1vZGVsLCBvdXQgb2YgbGFkZHIgbWVt
b3J5XG4iKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgp
OworCQkJbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxhZGRyKSk7CisJCQkodm9pZClTQ1RQX0dF
VFRJTUVfVElNRVZBTCgmbGFkZHItPnN0YXJ0X3RpbWUpOworCQkJbGFkZHItPmlmYSA9IG9sYWRk
ci0+aWZhOworCQkJYXRvbWljX2FkZF9pbnQoJmxhZGRyLT5pZmEtPnJlZmNvdW50LCAxKTsKKwkJ
CUxJU1RfSU5TRVJUX0hFQUQoJm5ld19pbnAtPnNjdHBfYWRkcl9saXN0LCBsYWRkciwKKwkJCSAg
ICBzY3RwX254dF9hZGRyKTsKKwkJCW5ld19pbnAtPmxhZGRyX2NvdW50Kys7CisJCQlpZiAob2xh
ZGRyID09IHN0Y2ItPmFzb2MubGFzdF91c2VkX2FkZHJlc3MpIHsKKwkJCQlzdGNiLT5hc29jLmxh
c3RfdXNlZF9hZGRyZXNzID0gbGFkZHI7CisJCQl9CisJCX0KKwl9CisJLyogTm93IGFueSBydW5u
aW5nIHRpbWVycyBuZWVkIHRvIGJlIGFkanVzdGVkCisJICogc2luY2Ugd2UgcmVhbGx5IGRvbid0
IGNhcmUgaWYgdGhleSBhcmUgcnVubmluZworCSAqIG9yIG5vdCBqdXN0IGJsYXN0IGluIHRoZSBu
ZXdfaW5wIGludG8gYWxsIG9mCisJICogdGhlbS4KKwkgKi8KKworCXN0Y2ItPmFzb2MuZGFja190
aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwlzdGNiLT5hc29jLmFzY29uZl90aW1lci5lcCA9
ICh2b2lkICopbmV3X2lucDsKKwlzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyLmVwID0gKHZvaWQg
KiluZXdfaW5wOworCXN0Y2ItPmFzb2Muc2h1dF9ndWFyZF90aW1lci5lcCA9ICh2b2lkICopbmV3
X2lucDsKKwlzdGNiLT5hc29jLmF1dG9jbG9zZV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsK
KwlzdGNiLT5hc29jLmRlbGF5ZWRfZXZlbnRfdGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7CisJ
c3RjYi0+YXNvYy5kZWxldGVfcHJpbV90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwkvKiBu
b3cgd2hhdCBhYm91dCB0aGUgbmV0cz8gKi8KKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFz
b2MubmV0cywgc2N0cF9uZXh0KSB7CisJCW5ldC0+cG10dV90aW1lci5lcCA9ICh2b2lkICopbmV3
X2lucDsKKwkJbmV0LT5oYl90aW1lci5lcCA9ICh2b2lkICopbmV3X2lucDsKKwkJbmV0LT5yeHRf
dGltZXIuZXAgPSAodm9pZCAqKW5ld19pbnA7CisJfQorCVNDVFBfSU5QX1dVTkxPQ0sobmV3X2lu
cCk7CisJU0NUUF9JTlBfV1VOTE9DSyhvbGRfaW5wKTsKK30KKworLyoKKyAqIGluc2VydCBhbiBs
YWRkciBlbnRyeSB3aXRoIHRoZSBnaXZlbiBpZmEgZm9yIHRoZSBkZXNpcmVkIGxpc3QKKyAqLwor
c3RhdGljIGludAorc2N0cF9pbnNlcnRfbGFkZHIoc3RydWN0IHNjdHBsYWRkciAqbGlzdCwgc3Ry
dWN0IHNjdHBfaWZhICppZmEsIHVpbnQzMl90IGFjdCkKK3sKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAq
bGFkZHI7CisKKwlsYWRkciA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
bGFkZHIpLCBzdHJ1Y3Qgc2N0cF9sYWRkcik7CisJaWYgKGxhZGRyID09IE5VTEwpIHsKKwkJLyog
b3V0IG9mIG1lbW9yeT8gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJ
U0NUUF9JTkNSX0xBRERSX0NPVU5UKCk7CisJbWVtc2V0KGxhZGRyLCAwLCBzaXplb2YoKmxhZGRy
KSk7CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJmxhZGRyLT5zdGFydF90aW1lKTsKKwls
YWRkci0+aWZhID0gaWZhOworCWxhZGRyLT5hY3Rpb24gPSBhY3Q7CisJYXRvbWljX2FkZF9pbnQo
JmlmYS0+cmVmY291bnQsIDEpOworCS8qIGluc2VydCBpdCAqLworCUxJU1RfSU5TRVJUX0hFQUQo
bGlzdCwgbGFkZHIsIHNjdHBfbnh0X2FkZHIpOworCisJcmV0dXJuICgwKTsKK30KKworLyoKKyAq
IFJlbW92ZSBhbiBsYWRkciBlbnRyeSBmcm9tIHRoZSBsb2NhbCBhZGRyZXNzIGxpc3QgKG9uIGFu
IGFzc29jKQorICovCitzdGF0aWMgdm9pZAorc2N0cF9yZW1vdmVfbGFkZHIoc3RydWN0IHNjdHBf
bGFkZHIgKmxhZGRyKQoreworCisJLyogcmVtb3ZlIGZyb20gdGhlIGxpc3QgKi8KKwlMSVNUX1JF
TU9WRShsYWRkciwgc2N0cF9ueHRfYWRkcik7CisJc2N0cF9mcmVlX2lmYShsYWRkci0+aWZhKTsK
KwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksIGxhZGRyKTsK
KwlTQ1RQX0RFQ1JfTEFERFJfQ09VTlQoKTsKK30KKworI2lmICEoZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisvKgor
ICogRG9uJ3Qga25vdyB3aHksIGJ1dCB3aXRob3V0IHRoaXMgdGhlcmUgaXMgYW4gdW5rbm93biBy
ZWZlcmVuY2Ugd2hlbgorICogY29tcGlsaW5nIE5ldEJTRC4uLiBobW0KKyAqLworZXh0ZXJuIHZv
aWQgaW42X3NpbjZfMl9zaW4oc3RydWN0IHNvY2thZGRyX2luICosIHN0cnVjdCBzb2NrYWRkcl9p
bjYgKnNpbjYpOworI2VuZGlmCisKKworLyogc2N0cF9pZmFwIGlzIHVzZWQgdG8gYnlwYXNzIG5v
cm1hbCBsb2NhbCBhZGRyZXNzIHZhbGlkYXRpb24gY2hlY2tzICovCitpbnQKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3NjdHBfaW5wY2Jf
YmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgdGhyZWFkICpwKQorI2Vs
aWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICpz
bywgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2lm
YSAqc2N0cF9pZmFwLCBQS1RIUkVBRCBwKQorI2Vsc2UKK3NjdHBfaW5wY2JfYmluZChzdHJ1Y3Qg
c29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwX2lmYSAqc2N0cF9pZmFwLCBzdHJ1Y3QgcHJvYyAqcCkKKyNlbmRpZgoreworCS8qIGJp
bmQgYSBlcCB0byBhIHNvY2tldCBhZGRyZXNzICovCisJc3RydWN0IHNjdHBwY2JoZWFkICpoZWFk
OworCXN0cnVjdCBzY3RwX2lucGNiICppbnAsICppbnBfdG1wOworI2lmIGRlZmluZWQoSU5FVCkg
fHwgKGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJc3RydWN0IGlucGNiICppcF9pbnA7Cisj
ZW5kaWYKKwlpbnQgcG9ydF9yZXVzZV9hY3RpdmUgPSAwOworCWludCBiaW5kYWxsOworI2lmZGVm
IFNDVFBfTVZSRgorCWludCBpOworI2VuZGlmCisJdWludDE2X3QgbHBvcnQ7CisJaW50IGVycm9y
OworCXVpbnQzMl90IHZyZl9pZDsKKworCWxwb3J0ID0gMDsKKwliaW5kYWxsID0gMTsKKwlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworI2lmIGRlZmluZWQoSU5FVCkgfHwg
KGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoX19BUFBMRV9fKSkgfHwgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJaXBfaW5wID0gKHN0cnVjdCBpbnBjYiAqKXNv
LT5zb19wY2I7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKGFkZHIpIHsKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX1BDQjEsICJCaW5kIGNhbGxlZCBwb3J0OiAlZFxuIiwKKwkJCW50b2hz
KCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9wb3J0KSk7CisJCVNDVFBEQkcoU0NU
UF9ERUJVR19QQ0IxLCAiQWRkcjogIik7CisJCVNDVFBEQkdfQUREUihTQ1RQX0RFQlVHX1BDQjEs
IGFkZHIpOworCX0KKyNlbmRpZgorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVU5CT1VORCkgPT0gMCkgeworCQkvKiBhbHJlYWR5IGRpZCBhIGJpbmQsIHN1YnNlcXVlbnQg
YmluZHMgTk9UIGFsbG93ZWQgISAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJ
fQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAw
MAorI2lmZGVmIElOVkFSSUFOVFMKKwlpZiAocCA9PSBOVUxMKQorCQlwYW5pYygibnVsbCBwcm9j
L3RocmVhZCIpOworI2VuZGlmCisjZW5kaWYKKwlpZiAoYWRkciAhPSBOVUxMKSB7CisJCXN3aXRj
aCAoYWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCXsK
KwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCisJCQkvKiBJUFY2X1Y2T05MWSBzb2NrZXQ/
ICovCisJCQlpZiAoU0NUUF9JUFY2X1Y2T05MWShpcF9pbnApKSB7CisJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJ
CQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChhZGRy
LT5zYV9sZW4gIT0gc2l6ZW9mKCpzaW4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJ
TlZBTCk7CisJCQl9CisjZW5kaWYKKworCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFk
ZHI7CisJCQlscG9ydCA9IHNpbi0+c2luX3BvcnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCQkvKgorCQkJICogRm9yIExPT1BCQUNL
IHRoZSBwcmlzb25fbG9jYWxfaXA0KCkgY2FsbCB3aWxsIHRyYW5zbXV0ZSB0aGUgaXAgYWRkcmVz
cworCQkJICogdG8gdGhlIHByb3BlciB2YWx1ZS4KKwkJCSAqLworCQkJaWYgKHAgJiYgKGVycm9y
ID0gcHJpc29uX2xvY2FsX2lwNChwLT50ZF91Y3JlZCwgJnNpbi0+c2luX2FkZHIpKSAhPSAwKSB7
CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BDQiwgZXJyb3IpOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJCQlpZiAo
c2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCWJpbmRhbGwgPSAwOwor
CQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5F
VDY6CisJCXsKKwkJCS8qIE9ubHkgZm9yIHB1cmUgSVB2NiBBZGRyZXNzLiAoTm8gSVB2NCBNYXBw
ZWQhKSAqLworCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoYWRk
ci0+c2FfbGVuICE9IHNpemVvZigqc2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkJCXJldHVybiAo
RUlOVkFMKTsKKwkJCX0KKyNlbmRpZgorCQkJbHBvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCQkv
KgorCQkJICogRm9yIExPT1BCQUNLIHRoZSBwcmlzb25fbG9jYWxfaXA2KCkgY2FsbCB3aWxsIHRy
YW5zbXV0ZSB0aGUgaXB2NiBhZGRyZXNzCisJCQkgKiB0byB0aGUgcHJvcGVyIHZhbHVlLgorCQkJ
ICovCisJCQlpZiAocCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA2KHAtPnRkX3VjcmVkLCAm
c2luNi0+c2luNl9hZGRyLAorCQkJICAgIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkgIT0gMCkpKSAh
PSAwKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgZXJyb3IpOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2VuZGlmCisJ
CQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJ
YmluZGFsbCA9IDA7CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQkJCS8qIEtBTUUg
aGFjazogZW1iZWQgc2NvcGVpZCAqLworI2lmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkJCWlmIChz
YTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpICE9IDAp
IHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1BDQiwgRUlOVkFMKTsKKwkJCQkJcmV0dXJuIChFSU5WQUwpOworCQkJCX0KKyNlbGlmIGRl
ZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChB
UFBMRV9TTk9XTEVPUEFSRCkKKwkJCQlpZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRk
ciwgc2luNiwgaXBfaW5wLCBOVUxMKSAhPSAwKSB7CisjZWxzZQorCQkJCWlmIChpbjZfZW1iZWRz
Y29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBpcF9pbnAsIE5VTEwsIE5VTEwpICE9IDApIHsK
KyNlbmRpZgorCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQkJfQorI2Vs
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQllcnJvciA9IHNjb3BlNl9jaGVja19pZChzaW42
LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOworCQkJCWlmIChlcnJvciAhPSAwKSB7
CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9QQ0IsIGVycm9yKTsKKwkJCQkJcmV0dXJuIChlcnJvcik7CisJCQkJfQorI2Vsc2UKKwkJCQlp
ZiAoaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNikgIT0gMCkgeworCQkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBF
SU5WQUwpOworCQkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQkJfQorI2VuZGlmCisjZW5kaWYgLyog
U0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQkJfQorI2lmbmRlZiBTQ09QRURST1VUSU5HCisJ
CQkvKiB0aGlzIG11c3QgYmUgY2xlYXJlZCBmb3IgaWZhX2lmd2l0aGFkZHIoKSAqLworCQkJc2lu
Ni0+c2luNl9zY29wZV9pZCA9IDA7CisjZW5kaWYgLyogU0NPUEVEUk9VVElORyAqLworCQkJYnJl
YWs7CisJCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9D
T05OOgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKyNpZmRlZiBIQVZF
X1NBX0xFTgorCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYK
KwkJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJCWxwb3J0ID0gc2Nv
bm4tPnNjb25uX3BvcnQ7CisJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVMTCkgeworCQkJ
CWJpbmRhbGwgPSAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0Ogor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BD
QiwgRUFGTk9TVVBQT1JUKTsKKwkJCXJldHVybiAoRUFGTk9TVVBQT1JUKTsKKwkJfQorCX0KKwlT
Q1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkvKiBTZXR1cCBh
IHZyZl9pZCB0byBiZSB0aGUgZGVmYXVsdCBmb3IgdGhlIG5vbi1iaW5kLWFsbCBjYXNlLiAqLwor
CXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKworCS8qIGluY3JlYXNlIG91ciBjb3VudCBkdWUg
dG8gdGhlIHVubG9jayB3ZSBkbyAqLworCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJaWYgKGxw
b3J0KSB7CisJCS8qCisJCSAqIERpZCB0aGUgY2FsbGVyIHNwZWNpZnkgYSBwb3J0PyBpZiBzbyB3
ZSBtdXN0IHNlZSBpZiBhbiBlcAorCQkgKiBhbHJlYWR5IGhhcyB0aGlzIG9uZSBib3VuZC4KKwkJ
ICovCisJCS8qIGdvdCB0byBiZSByb290IHRvIGdldCBhdCBsb3cgcG9ydHMgKi8KKyNpZiAhZGVm
aW5lZChfX1dpbmRvd3NfXykKKwkJaWYgKG50b2hzKGxwb3J0KSA8IElQUE9SVF9SRVNFUlZFRCkg
eworCQkJaWYgKChwICE9IE5VTEwpICYmICgoZXJyb3IgPQorI2lmZGVmIF9fRnJlZUJTRF9fCisj
aWYgX19GcmVlQlNEX3ZlcnNpb24gPiA2MDIwMDAKKwkJCQkgIHByaXZfY2hlY2socCwgUFJJVl9O
RVRJTkVUX1JFU0VSVkVEUE9SVCkKKyNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAor
CQkJCSAgc3VzZXJfY3JlZChwLT50ZF91Y3JlZCwgMCkKKyNlbHNlCisJCQkJICBzdXNlcihwKQor
I2VuZGlmCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJCQkgIHN1c2VyKHAtPnBfdWNyZWQs
ICZwLT5wX2FjZmxhZykKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgLyogbXVzdCBiZSB0
cnVlIHRvIHVzZSByYXcgc29ja2V0ICovCisJCQkJICAxCisjZWxzZQorCQkJCSAgc3VzZXIocCwg
MCkKKyNlbmRpZgorCQkJCSAgICApICE9IDApKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5w
KTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJ
CQlpZiAoIVNDVFBfSVNfUFJJVklMRURHRUQoc28pKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5M
T0NLKCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgRUFDQ0VTKTsKKwkJCQlyZXR1cm4gKEVBQ0NFUyk7CisJCQl9CisjZW5kaWYK
KwkJfQorI2VuZGlmIC8qIF9fV2luZG93c19fICovCisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJaWYgKGJpbmRhbGwpIHsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJCWZvciAoaSA9IDA7IGkgPCBp
bnAtPm51bV92cmZzOyBpKyspIHsKKwkJCQl2cmZfaWQgPSBpbnAtPm1fdnJmX2lkc1tpXTsKKyNl
bHNlCisJCQkJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworI2VuZGlmCisJCQkJaW5wX3RtcCA9
IHNjdHBfcGNiX2ZpbmRlcChhZGRyLCAwLCAxLCB2cmZfaWQpOworCQkJCWlmIChpbnBfdG1wICE9
IE5VTEwpIHsKKwkJCQkJLyoKKwkJCQkJICogbG9jayBndXkgcmV0dXJuZWQgYW5kIGxvd2VyIGNv
dW50CisJCQkJCSAqIG5vdGUgdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvCisJCQkJCSAqIGlucF90
bXAgc2hvdWxkIE5FVkVSIGJlIGlucC4gQW5kCisJCQkJCSAqIGl0IGlzIHRoaXMgaW5wIChpbnBf
dG1wKSB0aGF0IGdldHMKKwkJCQkJICogdGhlIHJlZmVyZW5jZSBidW1wLCBzbyB3ZSBtdXN0CisJ
CQkJCSAqIGxvd2VyIGl0LgorCQkJCQkgKi8KKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wX3Rt
cCk7CisJCQkJCS8qIHVubG9jayBpbmZvICovCisJCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29u
KGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgJiYKKwkJCQkJICAgIChzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wX3RtcCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKKwkJCQkJCS8q
IE9rLCBtdXN0IGJlIG9uZS0yLW9uZSBhbmQgYWxsb3dpbmcgcG9ydCByZS11c2UgKi8KKwkJCQkJ
CXBvcnRfcmV1c2VfYWN0aXZlID0gMTsKKwkJCQkJCWdvdG8gY29udGludWVfYW55d2F5OworCQkJ
CQl9CisJCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJCVNDVFBfSU5QX0lORk9fV1VO
TE9DSygpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfUENCLCBFQUREUklOVVNFKTsKKwkJCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJ
CQl9CisjaWZkZWYgU0NUUF9NVlJGCisJCQl9CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWlucF90
bXAgPSBzY3RwX3BjYl9maW5kZXAoYWRkciwgMCwgMSwgdnJmX2lkKTsKKwkJCWlmIChpbnBfdG1w
ICE9IE5VTEwpIHsKKwkJCQkvKgorCQkJCSAqIGxvY2sgZ3V5IHJldHVybmVkIGFuZCBsb3dlciBj
b3VudCBub3RlCisJCQkJICogdGhhdCB3ZSBhcmUgbm90IGJvdW5kIHNvIGlucF90bXAgc2hvdWxk
CisJCQkJICogTkVWRVIgYmUgaW5wLiBBbmQgaXQgaXMgdGhpcyBpbnAgKGlucF90bXApCisJCQkJ
ICogdGhhdCBnZXRzIHRoZSByZWZlcmVuY2UgYnVtcCwgc28gd2UgbXVzdAorCQkJCSAqIGxvd2Vy
IGl0LgorCQkJCSAqLworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucF90bXApOworCQkJCS8qIHVu
bG9jayBpbmZvICovCisJCQkJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19QT1JUUkVVU0UpKSAmJgorCQkJCSAgICAoc2N0cF9pc19mZWF0dXJlX29uKGlucF90bXAs
IFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSkpKSB7CisJCQkJCS8qIE9rLCBtdXN0IGJlIG9uZS0y
LW9uZSBhbmQgYWxsb3dpbmcgcG9ydCByZS11c2UgKi8KKwkJCQkJcG9ydF9yZXVzZV9hY3RpdmUg
PSAxOworCQkJCQlnb3RvIGNvbnRpbnVlX2FueXdheTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfREVD
Ul9SRUYoaW5wKTsKKwkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFQUREUklOVVNF
KTsKKwkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJfQorCQl9CisJY29udGludWVfYW55d2F5
OgorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoYmluZGFsbCkgeworCQkJLyogdmVyaWZ5
IHRoYXQgbm8gbHBvcnQgaXMgbm90IHVzZWQgYnkgYSBzaW5nbGV0b24gKi8KKwkJCWlmICgocG9y
dF9yZXVzZV9hY3RpdmUgPT0gMCkgJiYKKwkJCSAgICAoaW5wX3RtcCA9IHNjdHBfaXNwb3J0X2lu
dXNlKGlucCwgbHBvcnQsIHZyZl9pZCkpKSB7CisJCQkJLyogU29ycnkgc29tZW9uZSBhbHJlYWR5
IGhhcyB0aGlzIG9uZSBib3VuZCAqLworCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkgJiYKKwkJCQkgICAgKHNjdHBfaXNfZmVhdHVyZV9v
bihpbnBfdG1wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0UpKSkgeworCQkJCQlwb3J0X3JldXNl
X2FjdGl2ZSA9IDE7CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsK
KwkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0so
KTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1BDQiwgRUFERFJJTlVTRSk7CisJCQkJCXJldHVybiAoRUFERFJJTlVTRSk7CisJCQkJfQor
CQkJfQorCQl9CisJfSBlbHNlIHsKKwkJdWludDE2X3QgZmlyc3QsIGxhc3QsIGNhbmRpZGF0ZTsK
KwkJdWludDE2X3QgY291bnQ7CisJCWludCBkb25lOworCisjaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkJZmlyc3QgPSAxOworCQlsYXN0ID0gMHhmZmZmOworI2Vsc2UKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCS8qIFRPRE8gZW5zdXJlIHVpZCBpcyAwLCBldGMuLi4gKi8KKyNlbGlm
IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorCQlpZiAoaXBfaW5w
LT5pbnBfZmxhZ3MgJiBJTlBfSElHSFBPUlQpIHsKKwkJCWZpcnN0ID0gTU9EVUxFX0dMT0JBTChp
cHBvcnRfaGlmaXJzdGF1dG8pOworCQkJbGFzdCA9IE1PRFVMRV9HTE9CQUwoaXBwb3J0X2hpbGFz
dGF1dG8pOworCQl9IGVsc2UgaWYgKGlwX2lucC0+aW5wX2ZsYWdzICYgSU5QX0xPV1BPUlQpIHsK
KwkJCWlmIChwICYmIChlcnJvciA9CisjaWZkZWYgX19GcmVlQlNEX18KKyNpZiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+IDYwMjAwMAorCQkJCSAgcHJpdl9jaGVjayhwLCBQUklWX05FVElORVRfUkVTRVJW
RURQT1JUKQorI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCisJCQkJICBzdXNlcl9j
cmVkKHAtPnRkX3VjcmVkLCAwKQorI2Vsc2UKKwkJCQkgIHN1c2VyKHApCisjZW5kaWYKKyNlbGlm
IGRlZmluZWQoX19BUFBMRV9fKQorCQkJCSAgc3VzZXIocC0+cF91Y3JlZCwgJnAtPnBfYWNmbGFn
KQorI2Vsc2UKKwkJCQkgIHN1c2VyKHAsIDApCisjZW5kaWYKKwkJCQkgICAgKSkgeworCQkJCVND
VFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCVND
VFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIGVycm9yKTsKKwkJCQlyZXR1cm4gKGVycm9yKTsK
KwkJCX0KKwkJCWZpcnN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfbG93Zmlyc3RhdXRvKTsKKwkJ
CWxhc3QgPSBNT0RVTEVfR0xPQkFMKGlwcG9ydF9sb3dsYXN0YXV0byk7CisJCX0gZWxzZSB7Cisj
ZW5kaWYKKwkJCWZpcnN0ID0gTU9EVUxFX0dMT0JBTChpcHBvcnRfZmlyc3RhdXRvKTsKKwkJCWxh
c3QgPSBNT0RVTEVfR0xPQkFMKGlwcG9ydF9sYXN0YXV0byk7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJCX0KKyNlbmRpZgorI2VuZGlmIC8qIF9fV2lu
ZG93c19fICovCisJCWlmIChmaXJzdCA+IGxhc3QpIHsKKwkJCXVpbnQxNl90IHRlbXA7CisKKwkJ
CXRlbXAgPSBmaXJzdDsKKwkJCWZpcnN0ID0gbGFzdDsKKwkJCWxhc3QgPSB0ZW1wOworCQl9CisJ
CWNvdW50ID0gbGFzdCAtIGZpcnN0ICsgMTsgLyogbnVtYmVyIG9mIGNhbmRpZGF0ZXMgKi8KKwkJ
Y2FuZGlkYXRlID0gZmlyc3QgKyBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2Vw
KSAlIChjb3VudCk7CisKKwkJZG9uZSA9IDA7CisJCXdoaWxlICghZG9uZSkgeworI2lmZGVmIFND
VFBfTVZSRgorCQkJZm9yIChpID0gMDsgaSA8IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJCWlm
IChzY3RwX2lzcG9ydF9pbnVzZShpbnAsIGh0b25zKGNhbmRpZGF0ZSksIGlucC0+bV92cmZfaWRz
W2ldKSAhPSBOVUxMKSB7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKwkJCWlmIChpID09IGlu
cC0+bnVtX3ZyZnMpIHsKKwkJCQlkb25lID0gMTsKKwkJCX0KKyNlbHNlCisJCQlpZiAoc2N0cF9p
c3BvcnRfaW51c2UoaW5wLCBodG9ucyhjYW5kaWRhdGUpLCBpbnAtPmRlZl92cmZfaWQpID09IE5V
TEwpIHsKKwkJCQlkb25lID0gMTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKCFkb25lKSB7CisJCQkJ
aWYgKC0tY291bnQgPT0gMCkgeworCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJCQlT
Q1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENC
LCBFQUREUklOVVNFKTsKKwkJCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJCQl9CisJCQkJaWYg
KGNhbmRpZGF0ZSA9PSBsYXN0KQorCQkJCQljYW5kaWRhdGUgPSBmaXJzdDsKKwkJCQllbHNlCisJ
CQkJCWNhbmRpZGF0ZSA9IGNhbmRpZGF0ZSArIDE7CisJCQl9CisJCX0KKwkJbHBvcnQgPSBodG9u
cyhjYW5kaWRhdGUpOworCX0KKwlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiAoU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfAorCQkJICAgICAgIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgeworCQkvKgorCQkgKiB0aGlzIHJlYWxseSBzaG91
bGQgbm90IGhhcHBlbi4gVGhlIGd1eSBkaWQgYSBub24tYmxvY2tpbmcKKwkJICogYmluZCBhbmQg
dGhlbiBkaWQgYSBjbG9zZSBhdCB0aGUgc2FtZSB0aW1lLgorCQkgKi8KKwkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJcmV0
dXJuIChFSU5WQUwpOworCX0KKwkvKiBvayB3ZSBsb29rIGNsZWFyIHRvIGdpdmUgb3V0IHRoaXMg
cG9ydCwgc28gbGV0cyBzZXR1cCB0aGUgYmluZGluZyAqLworCWlmIChiaW5kYWxsKSB7CisJCS8q
IGJpbmRpbmcgdG8gYWxsIGFkZHJlc3Nlcywgc28ganVzdCBzZXQgaW4gdGhlIHByb3BlciBmbGFn
cyAqLworCQlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEw7CisJCS8q
IHNldCB0aGUgYXV0b21hdGljIGFkZHIgY2hhbmdlcyBmcm9tIGtlcm5lbCBmbGFnICovCisJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0b19hc2NvbmYpID09IDApIHsKKwkJCXNjdHBfZmVh
dHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19ET19BU0NPTkYpOworCQkJc2N0cF9mZWF0dXJl
X29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05GKTsKKwkJfSBlbHNlIHsKKwkJCXNj
dHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0RPX0FTQ09ORik7CisJCQlzY3RwX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPX0FTQ09ORik7CisJCX0KKwkJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9tdWx0aXBsZV9hc2NvbmZzKSA9PSAwKSB7CisJCQlzY3RwX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfTVVMVElQTEVfQVNDT05GUyk7CisJCX0gZWxz
ZSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19NVUxUSVBMRV9BU0NP
TkZTKTsKKwkJfQorCQkvKiBzZXQgdGhlIGF1dG9tYXRpYyBtb2JpbGl0eV9iYXNlIGZyb20ga2Vy
bmVsCisJCSAgIGZsYWcgKGJ5IG1pY2NoaWUpCisJCSovCisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbW9iaWxpdHlfYmFzZSkgPT0gMCkgeworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29m
ZihpbnAsIFNDVFBfTU9CSUxJVFlfQkFTRSk7CisJCQlzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2Zm
KGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCQl9IGVsc2UgeworCQkJc2N0cF9t
b2JpbGl0eV9mZWF0dXJlX29uKGlucCwgU0NUUF9NT0JJTElUWV9CQVNFKTsKKwkJCXNjdHBfbW9i
aWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJCX0K
KwkJLyogc2V0IHRoZSBhdXRvbWF0aWMgbW9iaWxpdHlfZmFzdGhhbmRvZmYgZnJvbSBrZXJuZWwK
KwkJICAgZmxhZyAoYnkgbWljY2hpZSkKKwkJKi8KKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9tb2JpbGl0eV9mYXN0aGFuZG9mZikgPT0gMCkgeworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJl
X29mZihpbnAsIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRPRkYpOworCQkJc2N0cF9tb2JpbGl0eV9m
ZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJTV9ERUxFVEVEKTsKKwkJfSBlbHNlIHsK
KwkJCXNjdHBfbW9iaWxpdHlfZmVhdHVyZV9vbihpbnAsIFNDVFBfTU9CSUxJVFlfRkFTVEhBTkRP
RkYpOworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29mZihpbnAsIFNDVFBfTU9CSUxJVFlfUFJJ
TV9ERUxFVEVEKTsKKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIGJpbmQgc3BlY2lmaWMsIG1h
a2Ugc3VyZSBmbGFncyBpcyBvZmYgYW5kIGFkZCBhIG5ldworCQkgKiBhZGRyZXNzIHN0cnVjdHVy
ZSB0byB0aGUgc2N0cF9hZGRyX2xpc3QgaW5zaWRlIHRoZSBlcAorCQkgKiBzdHJ1Y3R1cmUuCisJ
CSAqCisJCSAqIFdlIHdpbGwgbmVlZCB0byBhbGxvY2F0ZSBvbmUgYW5kIGluc2VydCBpdCBhdCB0
aGUgaGVhZC4gVGhlCisJCSAqIHNvY2tldG9wdCBjYWxsIGNhbiBqdXN0IGluc2VydCBuZXcgYWRk
cmVzc2VzIGluIHRoZXJlIGFzCisJCSAqIHdlbGwuIEl0IHdpbGwgYWxzbyBoYXZlIHRvIGRvIHRo
ZSBlbWJlZCBzY29wZSBrYW1lIGhhY2sKKwkJICogdG9vIChiZWZvcmUgYWRkaW5nKS4KKwkJICov
CisJCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9yZTsK
KworCQltZW1zZXQoJnN0b3JlLCAwLCBzaXplb2Yoc3RvcmUpKTsKKwkJc3dpdGNoIChhZGRyLT5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCW1lbWNweSgmc3Rv
cmUuc2luLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQlzdG9yZS5zaW4u
c2luX3BvcnQgPSAwOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFG
X0lORVQ2OgorCQkJbWVtY3B5KCZzdG9yZS5zaW42LCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNikpOworCQkJc3RvcmUuc2luNi5zaW42X3BvcnQgPSAwOworCQkJYnJlYWs7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCW1lbWNw
eSgmc3RvcmUuc2Nvbm4sIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJ
c3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IDA7CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0
OgorCQkJYnJlYWs7CisJCX0KKwkJLyoKKwkJICogZmlyc3QgZmluZCB0aGUgaW50ZXJmYWNlIHdp
dGggdGhlIGJvdW5kIGFkZHJlc3MgbmVlZCB0bworCQkgKiB6ZXJvIG91dCB0aGUgcG9ydCB0byBm
aW5kIHRoZSBhZGRyZXNzISB5dWNrISBjYW4ndCBkbworCQkgKiB0aGlzIGVhcmxpZXIgc2luY2Ug
bmVlZCBwb3J0IGZvciBzY3RwX3BjYl9maW5kZXAoKQorCQkgKi8KKwkJaWYgKHNjdHBfaWZhcCAh
PSBOVUxMKSB7CisJCQlpZmEgPSBzY3RwX2lmYXA7CisJCX0gZWxzZSB7CisJCQkvKiBOb3RlIGZv
ciBCU0Qgd2UgaGl0IGhlcmUgYWx3YXlzIG90aGVyCisJCQkgKiBPL1MncyB3aWxsIHBhc3MgdGhp
bmdzIGluIHZpYSB0aGUKKwkJCSAqIHNjdHBfaWZhcCBhcmd1bWVudCAoUGFuZGEpLgorCQkJICov
CisJCQlpZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoJnN0b3JlLnNhLAorCQkJCQkJICAgIHZy
Zl9pZCwgU0NUUF9BRERSX05PVF9MT0NLRUQpOworCQl9CisJCWlmIChpZmEgPT0gTlVMTCkgewor
CQkJLyogQ2FuJ3QgZmluZCBhbiBpbnRlcmZhY2Ugd2l0aCB0aGF0IGFkZHJlc3MgKi8KKwkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUFE
RFJOT1RBVkFJTCk7CisJCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCQl9CisjaWZkZWYgSU5F
VDYKKwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJLyogR0FLLCBtb3Jl
IEZJWE1FIElGQSBsb2NrPyAqLworCQkJaWYgKGlmYS0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQX0FE
RFJfSUZBX1VOVVNFQUJMRSkgeworCQkJCS8qIENhbid0IGJpbmQgYSBub24tZXhpc3RlbnQgYWRk
ci4gKi8KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJU0NUUF9JTlBfSU5GT19XVU5M
T0NLKCk7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJCQl9CisJCX0KKyNl
bmRpZgorCQkvKiB3ZSdyZSBub3QgYm91bmQgYWxsICovCisJCWlucC0+c2N0cF9mbGFncyAmPSB+
U0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEw7CisJCS8qIGFsbG93IGJpbmR4KCkgdG8gc2VuZCBBU0NP
TkYncyBmb3IgYmluZGluZyBjaGFuZ2VzICovCisJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBf
UENCX0ZMQUdTX0RPX0FTQ09ORik7CisJCS8qIGNsZWFyIGF1dG9tYXRpYyBhZGRyIGNoYW5nZXMg
ZnJvbSBrZXJuZWwgZmxhZyAqLworCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxB
R1NfQVVUT19BU0NPTkYpOworCisJCS8qIGFkZCB0aGlzIGFkZHJlc3MgdG8gdGhlIGVuZHBvaW50
IGxpc3QgKi8KKwkJZXJyb3IgPSBzY3RwX2luc2VydF9sYWRkcigmaW5wLT5zY3RwX2FkZHJfbGlz
dCwgaWZhLCAwKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwkJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0K
KwkJaW5wLT5sYWRkcl9jb3VudCsrOworCX0KKwkvKiBmaW5kIHRoZSBidWNrZXQgKi8KKwlpZiAo
cG9ydF9yZXVzZV9hY3RpdmUpIHsKKwkJLyogUHV0IGl0IGludG8gdGNwIDEtMi0xIGhhc2ggKi8K
KwkJaGVhZCA9ICZTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaClbU0NUUF9QQ0JIQVNIX0FM
TEFERFIobHBvcnQsIFNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSldOworCQlpbnAtPnNjdHBf
ZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTDsKKwl9IGVsc2UgeworCQloZWFkID0g
JlNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKVtTQ1RQX1BDQkhBU0hfQUxMQUREUihscG9ydCwg
U0NUUF9CQVNFX0lORk8oaGFzaG1hcmspKV07CisJfQorCS8qIHB1dCBpdCBpbiB0aGUgYnVja2V0
ICovCisJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBpbnAsIHNjdHBfaGFzaCk7CisJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjEsICJNYWluIGhhc2ggdG8gYmluZCBhdCBoZWFkOiVwLCBib3VuZCBwb3J0
OiVkIC0gaW4gdGNwX3Bvb2w9JWRcbiIsCisJCSh2b2lkICopaGVhZCwgbnRvaHMobHBvcnQpLCBw
b3J0X3JldXNlX2FjdGl2ZSk7CisJLyogc2V0IGluIHRoZSBwb3J0ICovCisJaW5wLT5zY3RwX2xw
b3J0ID0gbHBvcnQ7CisKKwkvKiB0dXJuIG9mZiBqdXN0IHRoZSB1bmJvdW5kIGZsYWcgKi8KKwlp
bnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1VOQk9VTkQ7CisJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCVNDVFBfSU5QX0lORk9fV1VOTE9DSygpOworCXJldHVybiAoMCk7Cit9CisK
Kworc3RhdGljIHZvaWQKK3NjdHBfaXRlcmF0b3JfaW5wX2JlaW5nX2ZyZWVkKHN0cnVjdCBzY3Rw
X2lucGNiICppbnApCit7CisJc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0LCAqbml0OworCisJLyoK
KwkgKiBXZSBlbnRlciB3aXRoIHRoZSBvbmx5IHRoZSBJVEVSQVRPUl9MT0NLIGluIHBsYWNlIGFu
ZCBhIHdyaXRlCisJICogbG9jayBvbiB0aGUgaW5wX2luZm8gc3R1ZmYuCisJICovCisJaXQgPSBz
Y3RwX2l0X2N0bC5jdXJfaXQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNE
X3ZlcnNpb24gPj0gODAxMDAwCisJaWYgKGl0ICYmIChpdC0+dm4gIT0gY3Vydm5ldCkpIHsKKwkJ
LyogSXRzIG5vdCBsb29raW5nIGF0IG91ciBWTkVUICovCisJCXJldHVybjsKKwl9CisjZW5kaWYK
KwlpZiAoaXQgJiYgKGl0LT5pbnAgPT0gaW5wKSkgeworCQkvKgorCQkgKiBUaGlzIGlzIHRyaWNr
eSBhbmQgd2UgaG9sZCB0aGUgaXRlcmF0b3IgbG9jaywKKwkJICogYnV0IHdoZW4gaXQgcmV0dXJu
cyBhbmQgZ2V0cyB0aGUgbG9jayAod2hlbiB3ZQorCQkgKiByZWxlYXNlIGl0KSB0aGUgaXRlcmF0
b3Igd2lsbCB0cnkgdG8gb3BlcmF0ZSBvbgorCQkgKiBpbnAuIFdlIG5lZWQgdG8gc3RvcCB0aGF0
IGZyb20gaGFwcGVuaW5nLiBCdXQKKwkJICogb2YgY291cnNlIHRoZSBpdGVyYXRvciBoYXMgYSBy
ZWZlcmVuY2Ugb24gdGhlCisJCSAqIHN0Y2IgYW5kIGlucC4gV2UgY2FuIG1hcmsgaXQgYW5kIGl0
IHdpbGwgc3RvcC4KKwkJICoKKwkJICogSWYgaXRzIGEgc2luZ2xlIGl0ZXJhdG9yIHNpdHVhdGlv
biwgd2UKKwkJICogc2V0IHRoZSBlbmQgaXRlcmF0b3IgZmxhZy4gT3RoZXJ3aXNlCisJCSAqIHdl
IHNldCB0aGUgaXRlcmF0b3IgdG8gZ28gdG8gdGhlIG5leHQgaW5wLgorCQkgKgorCQkgKi8KKwkJ
aWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgewor
CQkJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgfD0gU0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9J
VDsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzIHw9IFNDVFBfSVRF
UkFUT1JfU1RPUF9DVVJfSU5QOworCQl9CisJfQorCS8qIE5vdyBnbyB0aHJvdWdoIGFuZCByZW1v
dmUgYW55IHNpbmdsZSByZWZlcmVuY2UgdG8KKwkgKiBvdXIgaW5wIHRoYXQgbWF5IGJlIHN0aWxs
IHBlbmRpbmcgb24gdGhlIGxpc3QKKwkgKi8KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCk7
CisJVEFJTFFfRk9SRUFDSF9TQUZFKGl0LCAmc2N0cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBzY3Rw
X254dF9pdHIsIG5pdCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMTAwMAorCQlpZiAoaXQtPnZuICE9IGN1cnZuZXQpIHsKKwkJCWNvbnRpbnVl
OworCQl9CisjZW5kaWYKKwkJaWYgKGl0LT5pbnAgPT0gaW5wKSB7CisJCQkvKiBUaGlzIG9uZSBw
b2ludHMgdG8gbWUgaXMgaXQgaW5wIHNwZWNpZmljPyAqLworCQkJaWYgKGl0LT5pdGVyYXRvcl9m
bGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJCS8qIFJlbW92ZSBhbmQg
ZnJlZSB0aGlzIG9uZSAqLworCQkJCVRBSUxRX1JFTU9WRSgmc2N0cF9pdF9jdGwuaXRlcmF0b3Jo
ZWFkLAorCQkJCSAgICBpdCwgc2N0cF9ueHRfaXRyKTsKKwkJCQlpZiAoaXQtPmZ1bmN0aW9uX2F0
ZW5kICE9IE5VTEwpIHsKKwkJCQkJKCppdC0+ZnVuY3Rpb25fYXRlbmQpIChpdC0+cG9pbnRlciwg
aXQtPnZhbCk7CisJCQkJfQorCQkJCVNDVFBfRlJFRShpdCwgU0NUUF9NX0lURVIpOworCQkJfSBl
bHNlIHsKKwkJCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlzdCk7CisJCQkJ
aWYgKGl0LT5pbnApIHsKKwkJCQkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCQkJfQor
CQkJfQorCQkJLyogV2hlbiBpdHMgcHV0IGluIHRoZSByZWZjbnQgaXMgaW5jcmVtZW50ZWQgc28g
ZGVjciBpdCAqLworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCX0KKwlTQ1RQX0lQ
SV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKK30KKworLyogcmVsZWFzZSBzY3RwX2lucGNiIHVuYmlu
ZCB0aGUgcG9ydCAqLwordm9pZAorc2N0cF9pbnBjYl9mcmVlKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsIGludCBpbW1lZGlhdGUsIGludCBmcm9tKQoreworCS8qCisJICogSGVyZSB3ZSBmcmVlIGEg
ZW5kcG9pbnQuIFdlIG11c3QgZmluZCBpdCAoaWYgaXQgaXMgaW4gdGhlIEhhc2gKKwkgKiB0YWJs
ZSkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZXJlLiBUaGVuIHdlIG11c3QgYWxzbyBmaW5kIGl0IGlu
IHRoZQorCSAqIG92ZXJhbGwgbGlzdCBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlcmUuIEFmdGVyIGFs
bCByZW1vdmFscyBhcmUKKwkgKiBjb21wbGV0ZSB0aGVuIGFueSB0aW1lciBoYXMgdG8gYmUgc3Rv
cHBlZC4gVGhlbiBzdGFydCB0aGUgYWN0dWFsCisJICogZnJlZWluZy4gYSkgQW55IGxvY2FsIGxp
c3RzLiBiKSBBbnkgYXNzb2NpYXRpb25zLiBjKSBUaGUgaGFzaCBvZgorCSAqIGFsbCBhc3NvY2lh
dGlvbnMuIGQpIGZpbmFsbHkgdGhlIGVwIGl0c2VsZi4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90Y2Ig
KmFzb2MsICpuYXNvYzsKKwlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpubGFkZHI7CisJc3Ry
dWN0IGlucGNiICppcF9wY2I7CisJc3RydWN0IHNvY2tldCAqc287CisJaW50IGJlaW5nX3JlZmVk
ID0gMDsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqc3EsICpuc3E7CisjaWYgIWRlZmlu
ZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmICFkZWZpbmVkKF9f
RnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAorCXNjdHBfcnRlbnRyeV90
ICpydDsKKyNlbmRpZgorI2VuZGlmCisJaW50IGNudDsKKwlzY3RwX3NoYXJlZGtleV90ICpzaGFy
ZWRfa2V5LCAqbnNoYXJlZF9rZXk7CisKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBf
bG9ja19hc3NlcnQoU0NUUF9JTlBfU08oaW5wKSk7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0xPR19D
TE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDApOworI2VuZGlmCisJU0NUUF9J
VEVSQVRPUl9MT0NLKCk7CisJLyogbWFyayBhbnkgaXRlcmF0b3JzIG9uIHRoZSBsaXN0IG9yIGJl
aW5nIHByb2Nlc3NlZCAqLworCXNjdHBfaXRlcmF0b3JfaW5wX2JlaW5nX2ZyZWVkKGlucCk7CisJ
U0NUUF9JVEVSQVRPUl9VTkxPQ0soKTsKKwlzbyA9IGlucC0+c2N0cF9zb2NrZXQ7CisJaWYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB7CisJCS8qIGJl
ZW4gaGVyZSBiZWZvcmUuLiBlZWtzLi4gZ2V0IG91dCBvZiBoZXJlICovCisJCVNDVFBfUFJJTlRG
KCJUaGlzIGNvbmZsaWN0IGluIGZyZWUgU0hPVUxEIG5vdCBiZSBoYXBwZW5pbmchIGZyb20gJWQs
IGltbSAlZFxuIiwgZnJvbSwgaW1tZWRpYXRlKTsKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJ
CXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxKTsKKyNlbmRpZgorCQlyZXR1cm47CisJfQor
CVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOworCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwor
CVNDVFBfSU5QX1dMT0NLKGlucCk7CisJaWYgKGZyb20gPT0gU0NUUF9DQUxMRURfQUZURVJfQ01Q
U0VUX09GQ0xPU0UpIHsKKwkJaW5wLT5zY3RwX2ZsYWdzICY9IH5TQ1RQX1BDQl9GTEFHU19DTE9T
RV9JUDsKKwkJLyogc29ja2V0IGlzIGdvbmUsIHNvIG5vIG1vcmUgd2FrZXVwcyBhbGxvd2VkICov
CisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19ET05UX1dBS0U7CisJCWlucC0+
c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUOworCQlpbnAtPnNjdHBfZmxh
Z3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQVVQ7CisKKwl9CisJLyogRmlyc3QgdGltZSB0
aHJvdWdoIHdlIGhhdmUgdGhlIHNvY2tldCBsb2NrLCBhZnRlciB0aGF0IG5vIG1vcmUuICovCisJ
c2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUUsIGlucCwgTlVMTCwgTlVM
TCwKKwkJCVNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzEpOworCisJaWYgKGlucC0+Y29u
dHJvbCkgeworCQlzY3RwX21fZnJlZW0oaW5wLT5jb250cm9sKTsKKwkJaW5wLT5jb250cm9sID0g
TlVMTDsKKwl9CisJaWYgKGlucC0+cGt0KSB7CisJCXNjdHBfbV9mcmVlbShpbnAtPnBrdCk7CisJ
CWlucC0+cGt0ID0gTlVMTDsKKwl9CisJaXBfcGNiID0gJmlucC0+aXBfaW5wLmlucDsJLyogd2Ug
Y291bGQganVzdCBjYXN0IHRoZSBtYWluIHBvaW50ZXIKKwkJCQkJICogaGVyZSBidXQgSSB3aWxs
IGJlIG5pY2UgOj4gKGkuZS4KKwkJCQkJICogaXBfcGNiID0gZXA7KSAqLworCWlmIChpbW1lZGlh
dGUgPT0gU0NUUF9GUkVFX1NIT1VMRF9VU0VfR1JBQ0VGVUxfQ0xPU0UpIHsKKwkJaW50IGNudF9p
bl9zZDsKKworCQljbnRfaW5fc2QgPSAwOworCQlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5w
LT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0LCBuYXNvYykgeworCQkJU0NUUF9UQ0JfTE9D
Syhhc29jKTsKKwkJCWlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19C
RV9GUkVFRCkgeworCQkJCS8qIFNraXAgZ3V5cyBiZWluZyBmcmVlZCAqLworCQkJCWNudF9pbl9z
ZCsrOworCQkJCWlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVF
VUUpIHsKKwkJCQkJLyoKKwkJCQkJICogU3BlY2lhbCBjYXNlIC0gd2UgZGlkIG5vdCBzdGFydCBh
IGtpbGwKKwkJCQkJICogdGltZXIgb24gdGhlIGFzb2MgZHVlIHRvIGl0IHdhcyBub3QKKwkJCQkJ
ICogY2xvc2VkLiBTbyBnbyBhaGVhZCBhbmQgc3RhcnQgaXQgbm93LgorCQkJCQkgKi8KKwkJCQkJ
YXNvYy0+YXNvYy5zdGF0ZSAmPSB+U0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUU7CisJCQkJCXNj
dHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIGFzb2MsIE5VTEwp
OworCQkJCX0KKwkJCQlTQ1RQX1RDQl9VTkxPQ0soYXNvYyk7CisJCQkJY29udGludWU7CisJCQl9
CisJCQlpZiAoKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9DT09L
SUVfV0FJVCkgfHwKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpID09IFNDVFBf
U1RBVEVfQ09PS0lFX0VDSE9FRCkpICYmCisJCQkgICAgKGFzb2MtPmFzb2MudG90YWxfb3V0cHV0
X3F1ZXVlX3NpemUgPT0gMCkpIHsKKwkJCQkvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gcXVldWUsIHdl
IGRvbid0IHdhbnQgdG8ganVzdAorCQkJCSAqIGZyZWUgc2luY2UgdGhlIGFwcCBtYXkgaGF2ZSBk
b25lLCBzZW5kKCkvY2xvc2UKKwkJCQkgKiBvciBjb25uZWN0L3NlbmQvY2xvc2UuIEFuZCBpdCB3
YW50cyB0aGUgZGF0YQorCQkJCSAqIHRvIGdldCBhY3Jvc3MgZmlyc3QuCisJCQkJICovCisJCQkJ
LyogSnVzdCBhYmFuZG9uIHRoaW5ncyBpbiB0aGUgZnJvbnQgc3RhdGVzICovCisJCQkJaWYgKHNj
dHBfZnJlZV9hc3NvYyhpbnAsIGFzb2MsIFNDVFBfUENCRlJFRV9OT0ZPUkNFLAorCQkJCQkJICAg
U0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9MT0NfMikgPT0gMCkgeworCQkJCQljbnRfaW5fc2Qr
KzsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQkvKiBEaXNjb25uZWN0IHRoZSBzb2Nr
ZXQgcGxlYXNlICovCisJCQlhc29jLT5zY3RwX3NvY2tldCA9IE5VTEw7CisJCQlhc29jLT5hc29j
LnN0YXRlIHw9IFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVDsKKwkJCWlmICgoYXNvYy0+YXNvYy5z
aXplX29uX3JlYXNtX3F1ZXVlID4gMCkgfHwKKwkJCSAgICAoYXNvYy0+YXNvYy5jb250cm9sX3Bk
YXBpKSB8fAorCQkJICAgIChhc29jLT5hc29jLnNpemVfb25fYWxsX3N0cmVhbXMgPiAwKSB8fAor
CQkJICAgIChzbyAmJiAoc28tPnNvX3Jjdi5zYl9jYyA+IDApKSkgeworCQkJCS8qIExlZnQgd2l0
aCBEYXRhIHVucmVhZCAqLworCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJCQlvcF9lcnIg
PSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7
CisJCQkJYXNvYy0+c2N0cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfUENC
ICsgU0NUUF9MT0NfMzsKKwkJCQlzY3RwX3NlbmRfYWJvcnRfdGNiKGFzb2MsIG9wX2VyciwgU0NU
UF9TT19MT0NLRUQpOworCQkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVk
KTsKKwkJCQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09Q
RU4pIHx8CisJCQkJICAgIChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFU
RV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rw
c19jdXJyZXN0YWIpOworCQkJCX0KKwkJCQlpZiAoc2N0cF9mcmVlX2Fzc29jKGlucCwgYXNvYywK
KwkJCQkJCSAgICBTQ1RQX1BDQkZSRUVfTk9GT1JDRSwgU0NUUF9GUk9NX1NDVFBfUENCICsgU0NU
UF9MT0NfNCkgPT0gMCkgeworCQkJCQljbnRfaW5fc2QrKzsKKwkJCQl9CisJCQkJY29udGludWU7
CisJCQl9IGVsc2UgaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbmRfcXVldWUpICYmCisJ
CQkgICAgICAgICAgIFRBSUxRX0VNUFRZKCZhc29jLT5hc29jLnNlbnRfcXVldWUpICYmCisJCQkg
ICAgICAgICAgIChhc29jLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKKwkJCQlpZiAo
KCphc29jLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRl
KShhc29jLCAmYXNvYy0+YXNvYykpIHsKKwkJCQkJZ290byBhYm9ydF9hbnl3YXk7CisJCQkJfQor
CQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERP
V05fU0VOVCkgJiYKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSAhPSBTQ1RQ
X1NUQVRFX1NIVVRET1dOX0FDS19TRU5UKSkgeworCQkJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXRw
OworCisJCQkJCS8qCisJCQkJCSAqIHRoZXJlIGlzIG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsCisJ
CQkJCSAqIHNvIEkgc2VuZCBzaHV0ZG93bgorCQkJCQkgKi8KKwkJCQkJaWYgKChTQ1RQX0dFVF9T
VEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFNDVFBf
R0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkg
eworCQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJCQl9
CisJCQkJCVNDVFBfU0VUX1NUQVRFKCZhc29jLT5hc29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NF
TlQpOworCQkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKCZhc29jLT5hc29jLCBTQ1RQX1NUQVRFX1NI
VVRET1dOX1BFTkRJTkcpOworCQkJCQlzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihhc29j
KTsKKwkJCQkJaWYgKGFzb2MtPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCQluZXRwID0gYXNvYy0+
YXNvYy5hbHRlcm5hdGU7CisJCQkJCX0gZWxzZSB7CisJCQkJCQluZXRwID0gYXNvYy0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uOworCQkJCQl9CisJCQkJCXNjdHBfc2VuZF9zaHV0ZG93bihhc29j
LCBuZXRwKTsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04s
IGFzb2MtPnNjdHBfZXAsIGFzb2MsCisJCQkJCSAgICBuZXRwKTsKKwkJCQkJc2N0cF90aW1lcl9z
dGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgYXNvYy0+c2N0cF9lcCwgYXNvYywK
KwkJCQkJICAgIGFzb2MtPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbik7CisJCQkJCXNjdHBfY2h1
bmtfb3V0cHV0KGlucCwgYXNvYywgU0NUUF9PVVRQVVRfRlJPTV9TSFVUX1RNUiwgU0NUUF9TT19M
T0NLRUQpOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogbWFyayBpbnRvIHNodXRkb3duIHBl
bmRpbmcgKi8KKwkJCQlhc29jLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfU0hVVERPV05fUEVO
RElORzsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkdVQVJE
LCBhc29jLT5zY3RwX2VwLCBhc29jLAorCQkJCQkJIGFzb2MtPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbik7CisJCQkJaWYgKCgqYXNvYy0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19pc191c2Vy
X21zZ3NfaW5jb21wbGV0ZSkoYXNvYywgJmFzb2MtPmFzb2MpKSB7CisJCQkJCWFzb2MtPmFzb2Mu
c3RhdGUgfD0gU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUOworCQkJCX0KKwkJCQlpZiAoVEFJ
TFFfRU1QVFkoJmFzb2MtPmFzb2Muc2VuZF9xdWV1ZSkgJiYKKwkJCQkgICAgVEFJTFFfRU1QVFko
JmFzb2MtPmFzb2Muc2VudF9xdWV1ZSkgJiYKKwkJCQkgICAgKGFzb2MtPmFzb2Muc3RhdGUgJiBT
Q1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xFRlQpKSB7CisJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7
CisJCQkJYWJvcnRfYW55d2F5OgorCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFND
VFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQkJCWFzb2MtPnNjdHBfZXAtPmxh
c3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1BDQiArIFNDVFBfTE9DXzU7CisJCQkJCXNj
dHBfc2VuZF9hYm9ydF90Y2IoYXNvYywgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCVND
VFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJCQkJaWYgKChTQ1RQX0dF
VF9TVEFURSgmYXNvYy0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCQkJCQkgICAgKFND
VFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVE
KSkgeworCQkJCQkJU0NUUF9TVEFUX0RFQ1JfR0FVR0UzMihzY3Rwc19jdXJyZXN0YWIpOworCQkJ
CQl9CisJCQkJCWlmIChzY3RwX2ZyZWVfYXNzb2MoaW5wLCBhc29jLAorCQkJCQkJCSAgICBTQ1RQ
X1BDQkZSRUVfTk9GT1JDRSwKKwkJCQkJCQkgICAgU0NUUF9GUk9NX1NDVFBfUENCICsgU0NUUF9M
T0NfNikgPT0gMCkgeworCQkJCQkJY250X2luX3NkKys7CisJCQkJCX0KKwkJCQkJY29udGludWU7
CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBhc29jLCBTQ1RQX09V
VFBVVF9GUk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJCQl9CisJCQljbnRf
aW5fc2QrKzsKKwkJCVNDVFBfVENCX1VOTE9DSyhhc29jKTsKKwkJfQorCQkvKiBub3cgaXMgdGhl
cmUgc29tZSBsZWZ0IGluIG91ciBTSFVURE9XTiBzdGF0ZT8gKi8KKwkJaWYgKGNudF9pbl9zZCkg
eworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxM
LCAyKTsKKyNlbmRpZgorCQkJaW5wLT5zY3RwX3NvY2tldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9X
VU5MT0NLKGlucCk7CisJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQkJU0NUUF9J
TlBfSU5GT19XVU5MT0NLKCk7CisJCQlyZXR1cm47CisJCX0KKwl9CisJaW5wLT5zY3RwX3NvY2tl
dCA9IE5VTEw7CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5E
KSAhPQorCSAgICBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisJCS8qCisJCSAqIG9rLCB0aGlz
IGd1eSBoYXMgYmVlbiBib3VuZC4gSXQncyBwb3J0IGlzCisJCSAqIHNvbWV3aGVyZSBpbiB0aGUg
U0NUUF9CQVNFX0lORk8oaGFzaCB0YWJsZSkuIFJlbW92ZQorCQkgKiBpdCEKKwkJICovCisJCUxJ
U1RfUkVNT1ZFKGlucCwgc2N0cF9oYXNoKTsKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENC
X0ZMQUdTX1VOQk9VTkQ7CisJfQorCisJLyogSWYgdGhlcmUgaXMgYSB0aW1lciBydW5uaW5nIHRv
IGtpbGwgdXMsCisJICogZm9yZ2V0IGl0LCBzaW5jZSBpdCBtYXkgaGF2ZSBhIGNvbnRlc3QKKwkg
KiBvbiB0aGUgSU5QIGxvY2suLiB3aGljaCB3b3VsZCBjYXVzZSB1cworCSAqIHRvIGRpZSAuLi4K
KwkgKi8KKwljbnQgPSAwOworCUxJU1RfRk9SRUFDSF9TQUZFKGFzb2MsICZpbnAtPnNjdHBfYXNv
Y19saXN0LCBzY3RwX3RjYmxpc3QsIG5hc29jKSB7CisJCVNDVFBfVENCX0xPQ0soYXNvYyk7CisJ
CWlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgewor
CQkJaWYgKGFzb2MtPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRSkgewor
CQkJCWFzb2MtPmFzb2Muc3RhdGUgJj0gflNDVFBfU1RBVEVfSU5fQUNDRVBUX1FVRVVFOworCQkJ
CXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIGFzb2MsIE5V
TEwpOworCQkJfQorCQkgICAgICAgIGNudCsrOworCQkJU0NUUF9UQ0JfVU5MT0NLKGFzb2MpOwor
CQkJY29udGludWU7CisJCX0KKwkJLyogRnJlZSBhc3NvY2lhdGlvbnMgdGhhdCBhcmUgTk9UIGtp
bGxpbmcgdXMgKi8KKwkJaWYgKChTQ1RQX0dFVF9TVEFURSgmYXNvYy0+YXNvYykgIT0gU0NUUF9T
VEFURV9DT09LSUVfV0FJVCkgJiYKKwkJICAgICgoYXNvYy0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RB
VEVfQUJPVVRfVE9fQkVfRlJFRUQpID09IDApKSB7CisJCQlzdHJ1Y3QgbWJ1ZiAqb3BfZXJyOwor
CisJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFU
RURfQUJULCAiIik7CisJCQlhc29jLT5zY3RwX2VwLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZS
T01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ183OworCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihhc29jLCBv
cF9lcnIsIFNDVFBfU09fTE9DS0VEKTsKKwkJCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rw
c19hYm9ydGVkKTsKKwkJfSBlbHNlIGlmIChhc29jLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9B
Qk9VVF9UT19CRV9GUkVFRCkgeworCQkJY250Kys7CisJCQlTQ1RQX1RDQl9VTkxPQ0soYXNvYyk7
CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoKFNDVFBfR0VUX1NUQVRFKCZhc29jLT5hc29jKSA9
PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCSAgICAoU0NUUF9HRVRfU1RBVEUoJmFzb2MtPmFzb2Mp
ID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQpKSB7CisJCQlTQ1RQX1NUQVRfREVDUl9H
QVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCX0KKwkJaWYgKHNjdHBfZnJlZV9hc3NvYyhpbnAs
IGFzb2MsIFNDVFBfUENCRlJFRV9GT1JDRSwKKwkJICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUF9QQ0IgKyBTQ1RQX0xPQ184KSA9PSAwKSB7CisJCQljbnQrKzsKKwkJfQorCX0KKwlp
ZiAoY250KSB7CisJCS8qIE9rIHdlIGhhdmUgc29tZW9uZSBvdXQgdGhlcmUgdGhhdCB3aWxsIGtp
bGwgdXMgKi8KKwkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuc2lnbmF0
dXJlX2NoYW5nZS50aW1lcik7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19j
bG9zaW5nKGlucCwgTlVMTCwgMyk7CisjZW5kaWYKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOwor
CQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0so
KTsKKwkJcmV0dXJuOworCX0KKwlpZiAoU0NUUF9JTlBfTE9DS19DT05URU5ERUQoaW5wKSkKKwkJ
YmVpbmdfcmVmZWQrKzsKKwlpZiAoU0NUUF9JTlBfUkVBRF9DT05URU5ERUQoaW5wKSkKKwkJYmVp
bmdfcmVmZWQrKzsKKwlpZiAoU0NUUF9BU09DX0NSRUFURV9MT0NLX0NPTlRFTkRFRChpbnApKQor
CQliZWluZ19yZWZlZCsrOworCisJaWYgKChpbnAtPnJlZmNvdW50KSB8fAorCSAgICAoYmVpbmdf
cmVmZWQpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DTE9TRV9J
UCkpIHsKKwkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJl
X2NoYW5nZS50aW1lcik7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9z
aW5nKGlucCwgTlVMTCwgNCk7CisjZW5kaWYKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfSU5QS0lMTCwgaW5wLCBOVUxMLCBOVUxMKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9JTkZPX1dVTkxP
Q0soKTsKKwkJcmV0dXJuOworCX0KKwlpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50eXBl
ID0gMDsKKwlpbnAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkU7
CisJLyogUmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgLi4gbGFzdCB0aGluZyB3ZSBuZWVkIGEKKwkg
KiBsb2NrIGZvci4KKwkgKi8KKwlMSVNUX1JFTU9WRShpbnAsIHNjdHBfbGlzdCk7CisJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJU0NUUF9J
TlBfSU5GT19XVU5MT0NLKCk7CisJLyogTm93IHdlIHJlbGVhc2UgYWxsIGxvY2tzLiBTaW5jZSB0
aGlzIElOUAorCSAqIGNhbm5vdCBiZSBmb3VuZCBhbnltb3JlIGV4Y2VwdCBwb3NzaWJseSBieSB0
aGUKKwkgKiBraWxsIHRpbWVyIHRoYXQgbWlnaHQgYmUgcnVubmluZy4gV2UgY2FsbAorCSAqIHRo
ZSBkcmFpbiBmdW5jdGlvbiBoZXJlLiBJdCBzaG91bGQgaGl0IHRoZSBjYXNlCisJICogd2VyZSBp
dCBzZWVzIHRoZSBBQ1RJVkUgZmxhZyBjbGVhcmVkIGFuZCBleGl0CisJICogb3V0IGZyZWVpbmcg
dXMgdG8gcHJvY2VlZCBhbmQgZGVzdHJveSBldmVyeXRoaW5nLgorCSAqLworCWlmIChmcm9tICE9
IFNDVFBfQ0FMTEVEX0ZST01fSU5QS0lMTF9USU1FUikgeworCQkodm9pZClTQ1RQX09TX1RJTUVS
X1NUT1BfRFJBSU4oJmlucC0+c2N0cF9lcC5zaWduYXR1cmVfY2hhbmdlLnRpbWVyKTsKKwl9IGVs
c2UgeworCQkvKiBQcm9iYWJseSB1bi1uZWVkZWQgKi8KKwkJKHZvaWQpU0NUUF9PU19USU1FUl9T
VE9QKCZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZS50aW1lcik7CisJfQorCisjaWZkZWYg
U0NUUF9MT0dfQ0xPU0lORworCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCA1KTsKKyNlbmRp
ZgorCisjaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgX19G
cmVlQlNEX3ZlcnNpb24gPCA1MDAwMDAKKwlydCA9IGlwX3BjYi0+aW5wX3JvdXRlLnJvX3J0Owor
I2VuZGlmCisjZW5kaWYKKworCWlmICgoaW5wLT5zY3RwX2Fzb2NpZGhhc2gpICE9IE5VTEwpIHsK
KwkJU0NUUF9IQVNIX0ZSRUUoaW5wLT5zY3RwX2Fzb2NpZGhhc2gsIGlucC0+aGFzaGFzb2NpZG1h
cmspOworCQlpbnAtPnNjdHBfYXNvY2lkaGFzaCA9IE5VTEw7CisJfQorCS8qc2FfaWdub3JlIEZS
RUVEX01FTU9SWSovCisJVEFJTFFfRk9SRUFDSF9TQUZFKHNxLCAmaW5wLT5yZWFkX3F1ZXVlLCBu
ZXh0LCBuc3EpIHsKKwkJLyogSXRzIG9ubHkgYWJhbmRvbmVkIGlmIGl0IGhhZCBkYXRhIGxlZnQg
Ki8KKwkJaWYgKHNxLT5sZW5ndGgpCisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19sZWZ0X2FiYW5k
b24pOworCisJCVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBzcSwgbmV4dCk7CisJCXNj
dHBfZnJlZV9yZW1vdGVfYWRkcihzcS0+d2hvRnJvbSk7CisJCWlmIChzbykKKwkJCXNvLT5zb19y
Y3Yuc2JfY2MgLT0gc3EtPmxlbmd0aDsKKwkJaWYgKHNxLT5kYXRhKSB7CisJCQlzY3RwX21fZnJl
ZW0oc3EtPmRhdGEpOworCQkJc3EtPmRhdGEgPSBOVUxMOworCQl9CisJCS8qCisJCSAqIG5vIG5l
ZWQgdG8gZnJlZSB0aGUgbmV0IGNvdW50LCBzaW5jZSBhdCB0aGlzIHBvaW50IGFsbAorCQkgKiBh
c3NvYydzIGFyZSBnb25lLgorCQkgKi8KKwkJc2N0cF9mcmVlX2FfcmVhZHEoTlVMTCwgc3EpOwor
CX0KKwkvKiBOb3cgdGhlIHNjdHBfcGNiIHRoaW5ncyAqLworCS8qCisJICogZnJlZSBlYWNoIGFz
b2MgaWYgaXQgaXMgbm90IGFscmVhZHkgY2xvc2VkL2ZyZWUuIHdlIGNhbid0IHVzZSB0aGUKKwkg
KiBtYWNybyBoZXJlIHNpbmNlIGxlX25leHQgd2lsbCBnZXQgZnJlZWQgYXMgcGFydCBvZiB0aGUK
KwkgKiBzY3RwX2ZyZWVfYXNzb2MoKSBjYWxsLgorCSAqLworI2lmbmRlZiBfX1BhbmRhX18KKwlp
ZiAoaXBfcGNiLT5pbnBfb3B0aW9ucykgeworCQkodm9pZClzY3RwX21fZnJlZShpcF9wY2ItPmlu
cF9vcHRpb25zKTsKKwkJaXBfcGNiLT5pbnBfb3B0aW9ucyA9IDA7CisJfQorI2VuZGlmCisKKyNp
ZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pKQorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDUwMDAwMAorCWlmIChydCkgeworCQlSVEZSRUUocnQpOworCQlpcF9wY2ItPmlu
cF9yb3V0ZS5yb19ydCA9IDA7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPCA4MDMwMDAKKyNpZmRlZiBJTkVUCisJaWYgKGlwX3BjYi0+
aW5wX21vcHRpb25zKSB7CisJCWlucF9mcmVlbW9wdGlvbnMoaXBfcGNiLT5pbnBfbW9wdGlvbnMp
OworCQlpcF9wY2ItPmlucF9tb3B0aW9ucyA9IDA7CisJfQorI2VuZGlmCisjZW5kaWYKKyNlbmRp
ZgorCisjaWZkZWYgSU5FVDYKKyNpZiAhKGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9f
V2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorCWlmIChpcF9wY2ItPmlucF92ZmxhZyAmIElO
UF9JUFY2KSB7CisjZWxzZQorCWlmIChpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisjZW5k
aWYKKwkJc3RydWN0IGluNnBjYiAqaW42cDsKKworCQlpbjZwID0gKHN0cnVjdCBpbjZwY2IgKilp
bnA7CisJCWlwNl9mcmVlcGNib3B0cyhpbjZwLT5pbjZwX291dHB1dG9wdHMpOworCX0KKyNlbmRp
ZgorI2VuZGlmCQkJCS8qIElORVQ2ICovCisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKSkKKwlpbnAtPmlucF92ZmxhZyA9IDA7CisjZWxzZQorCWlwX3BjYi0+aW5wX3Zm
bGFnID0gMDsKKyNlbmRpZgorCS8qIGZyZWUgdXAgYXV0aGVudGljYXRpb24gZmllbGRzICovCisJ
aWYgKGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyAhPSBOVUxMKQorCQlzY3RwX2ZyZWVf
Y2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJaWYgKGlucC0+c2N0
cF9lcC5sb2NhbF9obWFjcyAhPSBOVUxMKQorCQlzY3RwX2ZyZWVfaG1hY2xpc3QoaW5wLT5zY3Rw
X2VwLmxvY2FsX2htYWNzKTsKKworCUxJU1RfRk9SRUFDSF9TQUZFKHNoYXJlZF9rZXksICZpbnAt
PnNjdHBfZXAuc2hhcmVkX2tleXMsIG5leHQsIG5zaGFyZWRfa2V5KSB7CisJCUxJU1RfUkVNT1ZF
KHNoYXJlZF9rZXksIG5leHQpOworCQlzY3RwX2ZyZWVfc2hhcmVka2V5KHNoYXJlZF9rZXkpOwor
CQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorCWlucC0+aXBfaW5wLmlucC5pbnBfc3RhdGUgPSBJTlBDQl9TVEFURV9ERUFEOworCWlmIChp
bl9wY2JfY2hlY2tzdGF0ZSgmaW5wLT5pcF9pbnAuaW5wLCBXTlRfU1RPUFVTSU5HLCAxKSAhPSBX
TlRfU1RPUFVTSU5HKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5pYygic2N0cF9pbnBjYl9m
cmVlIGlucCA9ICVwIGNvdWxkbid0IHNldCB0byBTVE9QVVNJTkdcbiIsICh2b2lkICopaW5wKTsK
KyNlbHNlCisJCVNDVFBfUFJJTlRGKCJzY3RwX2lucGNiX2ZyZWUgaW5wID0gJXAgY291bGRuJ3Qg
c2V0IHRvIFNUT1BVU0lOR1xuIiwgKHZvaWQgKilpbnApOworI2VuZGlmCisJfQorCWlucC0+aXBf
aW5wLmlucC5pbnBfc29ja2V0LT5zb19mbGFncyB8PSBTT0ZfUENCQ0xFQVJJTkc7CisjZW5kaWYK
KwkvKgorCSAqIGlmIHdlIGhhdmUgYW4gYWRkcmVzcyBsaXN0IHRoZSBmb2xsb3dpbmcgd2lsbCBm
cmVlIHRoZSBsaXN0IG9mCisJICogaWZhZGRyJ3MgdGhhdCBhcmUgc2V0IGludG8gdGhpcyBlcC4g
QWdhaW4gbWFjcm8gbGltaXRhdGlvbnMgaGVyZSwKKwkgKiBzaW5jZSB0aGUgTElTVF9GT1JFQUNI
IGNvdWxkIGJlIGEgYmFkIGlkZWEuCisJICovCisJTElTVF9GT1JFQUNIX1NBRkUobGFkZHIsICZp
bnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyLCBubGFkZHIpIHsKKwkJc2N0cF9yZW1v
dmVfbGFkZHIobGFkZHIpOworCX0KKworI2lmZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNPQ1MKKwkv
KiBURU1QIENPREUgKi8KKwlMSVNUX0ZPUkVBQ0hfU0FGRShhc29jLCAmaW5wLT5zY3RwX2Fzb2Nf
ZnJlZV9saXN0LCBzY3RwX3RjYmxpc3QsIG5hc29jKSB7CisJCUxJU1RfUkVNT1ZFKGFzb2MsIHNj
dHBfdGNibGlzdCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fz
b2MpLCBhc29jKTsKKwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwl9CisJLyogKioqIEVORCBU
RU1QIENPREUgKioqKi8KKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCVNDVFBfRlJFRShpbnAt
Pm1fdnJmX2lkcywgU0NUUF9NX01WUkYpOworI2VuZGlmCisJLyogTm93IGxldHMgc2VlIGFib3V0
IGZyZWVpbmcgdGhlIEVQIGhhc2ggdGFibGUuICovCisJaWYgKGlucC0+c2N0cF90Y2JoYXNoICE9
IE5VTEwpIHsKKwkJU0NUUF9IQVNIX0ZSRUUoaW5wLT5zY3RwX3RjYmhhc2gsIGlucC0+c2N0cF9o
YXNobWFyayk7CisJCWlucC0+c2N0cF90Y2JoYXNoID0gTlVMTDsKKwl9CisJLyogTm93IHdlIG11
c3QgcHV0IHRoZSBlcCBtZW1vcnkgYmFjayBpbnRvIHRoZSB6b25lIHBvb2wgKi8KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorCWNyZnJlZShpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQpOworCUlO
UF9MT0NLX0RFU1RST1koJmlucC0+aXBfaW5wLmlucCk7CisjZW5kaWYKKwlTQ1RQX0lOUF9MT0NL
X0RFU1RST1koaW5wKTsKKwlTQ1RQX0lOUF9SRUFEX0RFU1RST1koaW5wKTsKKwlTQ1RQX0FTT0Nf
Q1JFQVRFX0xPQ0tfREVTVFJPWShpbnApOworI2lmICFkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQ
X1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksIGlucCk7CisJU0NUUF9ERUNS
X0VQX0NPVU5UKCk7CisjZWxzZQorCS8qIEZvciBUaWdlciwgd2Ugd2lsbCBkbyB0aGlzIGxhdGVy
Li4uICovCisjZW5kaWYKK30KKworCitzdHJ1Y3Qgc2N0cF9uZXRzICoKK3NjdHBfZmluZG5ldChz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQ7CisJLyogbG9jYXRlIHRoZSBhZGRyZXNzICovCisJVEFJTFFfRk9SRUFD
SChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQlpZiAoc2N0cF9jbXBhZGRy
KGFkZHIsIChzdHJ1Y3Qgc29ja2FkZHIgKikmbmV0LT5yby5fbF9hZGRyKSkKKwkJCXJldHVybiAo
bmV0KTsKKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKworCitpbnQKK3NjdHBfaXNfYWRkcmVzc19v
bl9sb2NhbF9ob3N0KHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3QgdnJmX2lkKQorewor
I2lmZGVmIF9fUGFuZGFfXworCXJldHVybiAoMCk7CisjZWxzZQorCXN0cnVjdCBzY3RwX2lmYSAq
c2N0cF9pZmE7CisJc2N0cF9pZmEgPSBzY3RwX2ZpbmRfaWZhX2J5X2FkZHIoYWRkciwgdnJmX2lk
LCBTQ1RQX0FERFJfTk9UX0xPQ0tFRCk7CisJaWYgKHNjdHBfaWZhKSB7CisJCXJldHVybiAoMSk7
CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9CisjZW5kaWYKK30KKworLyoKKyAqIGFkZCdz
IGEgcmVtb3RlIGVuZHBvaW50IGFkZHJlc3MsIGRvbmUgd2l0aCB0aGUgSU5JVC9JTklULUFDSyBh
cyB3ZWxsIGFzCisgKiB3aGVuIGEgQVNDT05GIGFycml2ZXMgdGhhdCBhZGRzIGl0LiBJdCB3aWxs
IGFsc28gaW5pdGlhbGl6ZSBhbGwgdGhlIGN3bmQKKyAqIHN0YXRzIG9mIHN0dWZmLgorICovCitp
bnQKK3NjdHBfYWRkX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNv
Y2thZGRyICpuZXdhZGRyLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKipuZXRwLCB1aW50MTZfdCBw
b3J0LCBpbnQgc2V0X3Njb3BlLCBpbnQgZnJvbSkKK3sKKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcg
aXMgcmVkdW5kYW50IHRvIHRoZSBzYW1lIGxpbmVzIGluIHRoZQorCSAqIHNjdHBfYWxvY19hc3Nv
YygpIGJ1dCBpcyBuZWVkZWQgc2luY2Ugb3RoZXJzIGNhbGwgdGhlIGFkZAorCSAqIGFkZHJlc3Mg
ZnVuY3Rpb24KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpuZXRmaXJzdDsKKwlpbnQg
YWRkcl9pbnNjb3BlOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJBZGRpbmcgYW4gYWRk
cmVzcyAoZnJvbTolZCkgdG8gdGhlIHBlZXI6ICIsCisJCWZyb20pOworCVNDVFBEQkdfQUREUihT
Q1RQX0RFQlVHX1BDQjEsIG5ld2FkZHIpOworCisJbmV0Zmlyc3QgPSBzY3RwX2ZpbmRuZXQoc3Rj
YiwgbmV3YWRkcik7CisJaWYgKG5ldGZpcnN0KSB7CisJCS8qCisJCSAqIExpZSBhbmQgcmV0dXJu
IG9rLCB3ZSBkb24ndCB3YW50IHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uCisJCSAqIGdvIGF3YXkg
Zm9yIHRoaXMgYmVoYXZpb3IuIEl0IHdpbGwgaGFwcGVuIGluIHRoZSBUQ1AKKwkJICogbW9kZWwg
aW4gYSBjb25uZWN0ZWQgc29ja2V0LiBJdCBkb2VzIG5vdCByZWFjaCB0aGUgaGFzaAorCQkgKiB0
YWJsZSB1bnRpbCBhZnRlciB0aGUgYXNzb2NpYXRpb24gaXMgYnVpbHQgc28gaXQgY2FuJ3QgYmUK
KwkJICogZm91bmQuIE1hcmsgYXMgcmVhY2hhYmxlLCBzaW5jZSB0aGUgaW5pdGlhbCBjcmVhdGlv
biB3aWxsCisJCSAqIGhhdmUgYmVlbiBjbGVhcmVkIGFuZCB0aGUgTk9UX0lOX0FTU09DIGZsYWcg
d2lsbCBoYXZlCisJCSAqIGJlZW4gYWRkZWQuLi4gYW5kIHdlIGRvbid0IHdhbnQgdG8gZW5kIHVw
IHJlbW92aW5nIGl0CisJCSAqIGJhY2sgb3V0LgorCQkgKi8KKwkJaWYgKG5ldGZpcnN0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSB7CisJCQluZXRmaXJzdC0+ZGVzdF9zdGF0
ZSA9IChTQ1RQX0FERFJfUkVBQ0hBQkxFIHwKKwkJCSAgICBTQ1RQX0FERFJfVU5DT05GSVJNRUQp
OworCQl9IGVsc2UgeworCQkJbmV0Zmlyc3QtPmRlc3Rfc3RhdGUgPSBTQ1RQX0FERFJfUkVBQ0hB
QkxFOworCQl9CisKKwkJcmV0dXJuICgwKTsKKwl9CisJYWRkcl9pbnNjb3BlID0gMTsKKwlzd2l0
Y2ggKG5ld2FkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisJ
eworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQlzaW4gPSAoc3RydWN0IHNvY2thZGRy
X2luICopbmV3YWRkcjsKKwkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IDApIHsKKwkJCS8q
IEludmFsaWQgYWRkcmVzcyAqLworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJLyogemVybyBvdXQg
dGhlIHplcm8gYXJlYSAqLworCQltZW1zZXQoJnNpbi0+c2luX3plcm8sIDAsIHNpemVvZihzaW4t
PnNpbl96ZXJvKSk7CisKKwkJLyogYXNzdXJlIGxlbiBpcyBzZXQgKi8KKyNpZmRlZiBIQVZFX1NJ
Tl9MRU4KKwkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5k
aWYKKwkJaWYgKHNldF9zY29wZSkgeworCQkJaWYgKElONF9JU1BSSVZBVEVfQUREUkVTUygmc2lu
LT5zaW5fYWRkcikpIHsKKwkJCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAx
OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogVmFsaWRhdGUgdGhlIGFkZHJlc3MgaXMgaW4gc2Nv
cGUgKi8KKwkJCWlmICgoSU40X0lTUFJJVkFURV9BRERSRVNTKCZzaW4tPnNpbl9hZGRyKSkgJiYK
KwkJCSAgICAoc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlID09IDApKSB7CisJCQkJ
YWRkcl9pbnNjb3BlID0gMDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRl
ZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42
OworCisJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKW5ld2FkZHI7CisJCWlmIChJTjZf
SVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJLyogSW52YWxpZCBh
ZGRyZXNzICovCisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkvKiBhc3N1cmUgbGVuIGlzIHNldCAq
LworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJaWYgKHNldF9zY29wZSkgeworCQkJaWYgKHNjdHBf
aXNfYWRkcmVzc19vbl9sb2NhbF9ob3N0KG5ld2FkZHIsIHN0Y2ItPmFzb2MudnJmX2lkKSkgewor
CQkJCXN0Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGUgPSAxOworCQkJCXN0Y2ItPmFzb2Mu
c2NvcGUubG9jYWxfc2NvcGUgPSAwOworCQkJCXN0Y2ItPmFzb2Muc2NvcGUuaXB2NF9sb2NhbF9z
Y29wZSA9IDE7CisJCQkJc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlID0gMTsKKwkJCX0gZWxz
ZSBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJLyoK
KwkJCQkgKiBJZiB0aGUgbmV3IGRlc3RpbmF0aW9uIGlzIGEgTElOS19MT0NBTCB3ZQorCQkJCSAq
IG11c3QgaGF2ZSBjb21tb24gc2l0ZSBzY29wZS4gRG9uJ3Qgc2V0CisJCQkJICogdGhlIGxvY2Fs
IHNjb3BlIHNpbmNlIHdlIG1heSBub3Qgc2hhcmUKKwkJCQkgKiBhbGwgbGlua3MsIG9ubHkgbG9v
cGJhY2sgY2FuIGRvIHRoaXMuCisJCQkJICogTGlua3Mgb24gdGhlIGxvY2FsIG5ldHdvcmsgd291
bGQgYWxzbyBiZQorCQkJCSAqIG9uIG91ciBwcml2YXRlIG5ldHdvcmsgZm9yIHY0IHRvby4KKwkJ
CQkgKi8KKwkJCQlzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGUgPSAxOworCQkJCXN0
Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZSA9IDE7CisJCQl9IGVsc2UgaWYgKElONl9JU19BRERS
X1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCS8qCisJCQkJICogSWYgdGhlIG5l
dyBkZXN0aW5hdGlvbiBpcyBTSVRFX0xPQ0FMIHRoZW4KKwkJCQkgKiB3ZSBtdXN0IGhhdmUgc2l0
ZSBzY29wZSBpbiBjb21tb24uCisJCQkJICovCisJCQkJc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Nj
b3BlID0gMTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qIFZhbGlkYXRlIHRoZSBhZGRyZXNzIGlz
IGluIHNjb3BlICovCisJCQlpZiAoSU42X0lTX0FERFJfTE9PUEJBQ0soJnNpbjYtPnNpbjZfYWRk
cikgJiYKKwkJCSAgICAoc3RjYi0+YXNvYy5zY29wZS5sb29wYmFja19zY29wZSA9PSAwKSkgewor
CQkJCWFkZHJfaW5zY29wZSA9IDA7CisJCQl9IGVsc2UgaWYgKElONl9JU19BRERSX0xJTktMT0NB
TCgmc2luNi0+c2luNl9hZGRyKSAmJgorCQkJICAgIChzdGNiLT5hc29jLnNjb3BlLmxvY2FsX3Nj
b3BlID09IDApKSB7CisJCQkJYWRkcl9pbnNjb3BlID0gMDsKKwkJCX0gZWxzZSBpZiAoSU42X0lT
X0FERFJfU0lURUxPQ0FMKCZzaW42LT5zaW42X2FkZHIpICYmCisJCQkgICAgKHN0Y2ItPmFzb2Mu
c2NvcGUuc2l0ZV9zY29wZSA9PSAwKSkgeworCQkJCWFkZHJfaW5zY29wZSA9IDA7CisJCQl9CisJ
CX0KKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNh
c2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQlzY29u
biA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKW5ld2FkZHI7CisJCWlmIChzY29ubi0+c2Nvbm5f
YWRkciA9PSBOVUxMKSB7CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCXJldHVybiAoLTEp
OworCQl9CisjaWZkZWYgSEFWRV9TQ09OTl9MRU4KKwkJc2Nvbm4tPnNjb25uX2xlbiA9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisJ
ZGVmYXVsdDoKKwkJLyogbm90IHN1cHBvcnRlZCBmYW1pbHkgdHlwZSAqLworCQlyZXR1cm4gKC0x
KTsKKwl9CisJbmV0ID0gU0NUUF9aT05FX0dFVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9uZXQp
LCBzdHJ1Y3Qgc2N0cF9uZXRzKTsKKwlpZiAobmV0ID09IE5VTEwpIHsKKwkJcmV0dXJuICgtMSk7
CisJfQorCVNDVFBfSU5DUl9SQUREUl9DT1VOVCgpOworCW1lbXNldChuZXQsIDAsIHNpemVvZihz
dHJ1Y3Qgc2N0cF9uZXRzKSk7CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5ldC0+c3Rh
cnRfdGltZSk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwltZW1jcHkoJm5ldC0+cm8uX2xfYWRkciwg
bmV3YWRkciwgbmV3YWRkci0+c2FfbGVuKTsKKyNlbmRpZgorCXN3aXRjaCAobmV3YWRkci0+c2Ff
ZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZm5kZWYgSEFWRV9TQV9M
RU4KKwkJbWVtY3B5KCZuZXQtPnJvLl9sX2FkZHIsIG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKyNlbmRpZgorCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJvLl9s
X2FkZHIpLT5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZm5kZWYgSEFWRV9TQV9MRU4KKwkJbWVtY3B5KCZu
ZXQtPnJvLl9sX2FkZHIsIG5ld2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Cisj
ZW5kaWYKKwkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkciktPnNpbjZf
cG9ydCA9IHN0Y2ItPnJwb3J0OworCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCW1lbWNweSgm
bmV0LT5yby5fbF9hZGRyLCBuZXdhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KyNlbmRpZgorCQkoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopJm5ldC0+cm8uX2xfYWRkciktPnNj
b25uX3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQli
cmVhazsKKwl9CisJbmV0LT5hZGRyX2lzX2xvY2FsID0gc2N0cF9pc19hZGRyZXNzX29uX2xvY2Fs
X2hvc3QobmV3YWRkciwgc3RjYi0+YXNvYy52cmZfaWQpOworCWlmIChuZXQtPmFkZHJfaXNfbG9j
YWwgJiYgKChzZXRfc2NvcGUgfHwgKGZyb20gPT0gU0NUUF9BRERSX0lTX0NPTkZJUk1FRCkpKSkg
eworCQlzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlID0gMTsKKwkJc3RjYi0+YXNvYy5z
Y29wZS5pcHY0X2xvY2FsX3Njb3BlID0gMTsKKwkJc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29w
ZSA9IDA7CisJCXN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZSA9IDE7CisJCWFkZHJfaW5zY29w
ZSA9IDE7CisJfQorCW5ldC0+ZmFpbHVyZV90aHJlc2hvbGQgPSBzdGNiLT5hc29jLmRlZl9uZXRf
ZmFpbHVyZTsKKwluZXQtPnBmX3RocmVzaG9sZCA9IHN0Y2ItPmFzb2MuZGVmX25ldF9wZl90aHJl
c2hvbGQ7CisJaWYgKGFkZHJfaW5zY29wZSA9PSAwKSB7CisJCW5ldC0+ZGVzdF9zdGF0ZSA9IChT
Q1RQX0FERFJfUkVBQ0hBQkxFIHwKKwkJICAgIFNDVFBfQUREUl9PVVRfT0ZfU0NPUEUpOworCX0g
ZWxzZSB7CisJCWlmIChmcm9tID09IFNDVFBfQUREUl9JU19DT05GSVJNRUQpCisJCQkvKiBTQ1RQ
X0FERFJfSVNfQ09ORklSTUVEIGlzIHBhc3NlZCBieSBjb25uZWN0X3ggKi8KKwkJCW5ldC0+ZGVz
dF9zdGF0ZSA9IFNDVFBfQUREUl9SRUFDSEFCTEU7CisJCWVsc2UKKwkJCW5ldC0+ZGVzdF9zdGF0
ZSA9IFNDVFBfQUREUl9SRUFDSEFCTEUgfAorCQkJICAgIFNDVFBfQUREUl9VTkNPTkZJUk1FRDsK
Kwl9CisJLyogV2Ugc2V0IHRoaXMgdG8gMCwgdGhlIHRpbWVyIGNvZGUga25vd3MgdGhhdAorCSAq
IHRoaXMgbWVhbnMgaXRzIGFuIGluaXRpYWwgdmFsdWUKKwkgKi8KKwluZXQtPnJ0b19uZWVkZWQg
PSAxOworCW5ldC0+UlRPID0gMDsKKwluZXQtPlJUT19tZWFzdXJlZCA9IDA7CisJc3RjYi0+YXNv
Yy5udW1uZXRzKys7CisJbmV0LT5yZWZfY291bnQgPSAxOworCW5ldC0+Y3dyX3dpbmRvd190c24g
PSBuZXQtPmxhc3RfY3dyX3RzbiA9IHN0Y2ItPmFzb2Muc2VuZGluZ19zZXEgLSAxOworCW5ldC0+
cG9ydCA9IHBvcnQ7CisJbmV0LT5kc2NwID0gc3RjYi0+YXNvYy5kZWZhdWx0X2RzY3A7CisjaWZk
ZWYgSU5FVDYKKwluZXQtPmZsb3dsYWJlbCA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9mbG93bGFiZWw7
CisjZW5kaWYKKwlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3Rj
YiwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKSkgeworCQluZXQtPmRlc3Rfc3RhdGUg
fD0gU0NUUF9BRERSX05PSEI7CisJfSBlbHNlIHsKKwkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQ
X0FERFJfTk9IQjsKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCkpIHsKKwkJbmV0LT5kZXN0X3N0
YXRlIHw9IFNDVFBfQUREUl9OT19QTVRVRDsKKwl9IGVsc2UgeworCQluZXQtPmRlc3Rfc3RhdGUg
Jj0gflNDVFBfQUREUl9OT19QTVRVRDsKKwl9CisJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0gc3Rj
Yi0+YXNvYy5oZWFydF9iZWF0X2RlbGF5OworCS8qIEluaXQgdGhlIHRpbWVyIHN0cnVjdHVyZSAq
LworCVNDVFBfT1NfVElNRVJfSU5JVCgmbmV0LT5yeHRfdGltZXIudGltZXIpOworCVNDVFBfT1Nf
VElNRVJfSU5JVCgmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQo
Jm5ldC0+aGJfdGltZXIudGltZXIpOworCisJLyogTm93IGdlbmVyYXRlIGEgcm91dGUgZm9yIHRo
aXMgZ3V5ICovCisjaWZkZWYgSU5FVDYKKyNpZmRlZiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFCisJ
LyogS0FNRSBoYWNrOiBlbWJlZCBzY29wZWlkICovCisJaWYgKG5ld2FkZHItPnNhX2ZhbWlseSA9
PSBBRl9JTkVUNikgeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pCisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dM
RU9QQVJEKQorCQkodm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCAm
c3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucCwgTlVMTCk7CisjZWxzZQorCQkodm9pZClpbjZfZW1i
ZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCAmc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlu
cCwgTlVMTCwgTlVMTCk7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9LQU1FKQorCQkodm9p
ZClzYTZfZW1iZWRzY29wZShzaW42LCBNT0RVTEVfR0xPQkFMKGlwNl91c2VfZGVmem9uZSkpOwor
I2Vsc2UKKwkJKHZvaWQpaW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNik7Cisj
ZW5kaWYKKyNpZm5kZWYgU0NPUEVEUk9VVElORworCQlzaW42LT5zaW42X3Njb3BlX2lkID0gMDsK
KyNlbmRpZgorCX0KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjZW5kaWYK
KwlTQ1RQX1JUQUxMT0MoKHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAorCSAgICAgICAgICAgICBz
dGNiLT5hc29jLnZyZl9pZCwKKwkgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcC0+ZmlibnVtKTsK
KworCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJaWYgKFNDVFBfUk9VVEVfSEFTX1ZBTElEX0lGTigmbmV0LT5ybykpIHsKKwkJLyogR2V0
IHNvdXJjZSBhZGRyZXNzICovCisJCW5ldC0+cm8uX3NfYWRkciA9IHNjdHBfc291cmNlX2FkZHJl
c3Nfc2VsZWN0aW9uKHN0Y2ItPnNjdHBfZXAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0Y2IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGNiLT5hc29jLnZyZl9pZCk7
CisJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfbXR1ID4gMCkgeworCQkJbmV0LT5tdHUgPSBzdGNi
LT5hc29jLmRlZmF1bHRfbXR1OworCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorCQkJCW5ldC0+bXR1ICs9IFND
VFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJ
CWNhc2UgQUZfSU5FVDY6CisJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NP
Tk46CisJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwkJCQlicmVhazsK
KyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJbmV0LT5tdHUgKz0g
KHVpbnQzMl90KXNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2Ug
aWYgKG5ldC0+cm8uX3NfYWRkciAhPSBOVUxMKSB7CisJCQl1aW50MzJfdCBpbXR1LCBybXR1LCBo
Y210dTsKKworCQkJbmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7CisJCQkvKiBOb3cgZ2V0IHRo
ZSBpbnRlcmZhY2UgTVRVICovCisJCQlpZiAobmV0LT5yby5fc19hZGRyLT5pZm5fcCAhPSBOVUxM
KSB7CisJCQkJaW10dSA9IFNDVFBfR0FUSEVSX01UVV9GUk9NX0lOVEZDKG5ldC0+cm8uX3NfYWRk
ci0+aWZuX3ApOworCQkJfSBlbHNlIHsKKwkJCQlpbXR1ID0gMDsKKwkJCX0KKwkJCXJtdHUgPSBT
Q1RQX0dBVEhFUl9NVFVfRlJPTV9ST1VURShuZXQtPnJvLl9zX2FkZHIsICZuZXQtPnJvLl9sX2Fk
ZHIuc2EsIG5ldC0+cm8ucm9fcnQpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQloY210
dSA9IHNjdHBfaGNfZ2V0X210dSgmbmV0LT5yby5fbF9hZGRyLCBzdGNiLT5zY3RwX2VwLT5maWJu
dW0pOworI2Vsc2UKKwkJCWhjbXR1ID0gMDsKKyNlbmRpZgorCQkJbmV0LT5tdHUgPSBzY3RwX21p
bl9tdHUoaGNtdHUsIHJtdHUsIGltdHUpOworCQkJaWYgKHJtdHUgPT0gMCkgeworCQkJCS8qIFN0
YXJ0IHRoaW5ncyBvZmYgdG8gbWF0Y2ggbXR1IG9mIGludGVyZmFjZSBwbGVhc2UuICovCisJCQkJ
U0NUUF9TRVRfTVRVX09GX1JPVVRFKCZuZXQtPnJvLl9sX2FkZHIuc2EsCisJCQkJICAgICAgICAg
ICAgICAgICAgICAgIG5ldC0+cm8ucm9fcnQsIG5ldC0+bXR1KTsKKwkJCX0KKwkJfQorCX0KKyNl
bmRpZgorCWlmIChuZXQtPm10dSA9PSAwKSB7CisJCWlmIChzdGNiLT5hc29jLmRlZmF1bHRfbXR1
ID4gMCkgeworCQkJbmV0LT5tdHUgPSBzdGNiLT5hc29jLmRlZmF1bHRfbXR1OworCQkJc3dpdGNo
IChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBB
Rl9JTkVUOgorCQkJCW5ldC0+bXR1ICs9IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQkJbmV0LT5tdHUg
Kz0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVh
azsKKwkJCX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJCQlpZiAobmV0
LT5wb3J0KSB7CisJCQkJbmV0LT5tdHUgKz0gKHVpbnQzMl90KXNpemVvZihzdHJ1Y3QgdWRwaGRy
KTsKKwkJCX0KKyNlbmRpZgorCQl9IGVsc2UgeworCQkJc3dpdGNoIChuZXdhZGRyLT5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJbmV0LT5tdHUgPSBTQ1RQ
X0RFRkFVTFRfTVRVOworCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJbmV0LT5tdHUgPSAxMjgwOworCQkJCWJyZWFrOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJCW5ldC0+bXR1ID0g
MTI4MDsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0K
KwkJfQorCX0KKyNpZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKG5ldC0+
cG9ydCkgeworCQluZXQtPm10dSAtPSAodWludDMyX3Qpc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwor
CX0KKyNlbmRpZgorCWlmIChmcm9tID09IFNDVFBfQUxMT0NfQVNPQykgeworCQlzdGNiLT5hc29j
LnNtYWxsZXN0X210dSA9IG5ldC0+bXR1OworCX0KKwlpZiAoc3RjYi0+YXNvYy5zbWFsbGVzdF9t
dHUgPiBuZXQtPm10dSkgeworCQlzY3RwX3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10
dSk7CisJfQorI2lmZGVmIElORVQ2CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCWlm
IChuZXdhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJc3RydWN0IHNvY2thZGRyX2lu
NiAqc2luNjsKKworCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmbmV0LT5yby5fbF9h
ZGRyOworI2lmZGVmIFNDVFBfS0FNRQorCQkodm9pZClzYTZfcmVjb3ZlcnNjb3BlKHNpbjYpOwor
I2Vsc2UKKwkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBO
VUxMKTsKKyNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KKwl9CisjZW5kaWYgLyogU0NUUF9FTUJFRERF
RF9WNl9TQ09QRSAqLworI2VuZGlmCisKKwkvKiBKUlMgLSBVc2UgdGhlIGNvbmdlc3Rpb24gY29u
dHJvbCBnaXZlbiBpbiB0aGUgQ0MgbW9kdWxlICovCisJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rp
b25zLnNjdHBfc2V0X2luaXRpYWxfY2NfcGFyYW0gIT0gTlVMTCkKKwkJKCpzdGNiLT5hc29jLmNj
X2Z1bmN0aW9ucy5zY3RwX3NldF9pbml0aWFsX2NjX3BhcmFtKShzdGNiLCBuZXQpOworCisJLyoK
KwkgKiBDTVQ6IENVQyBhbGdvIC0gc2V0IGZpbmRfcHNldWRvX2N1bWFjayB0byBUUlVFICgxKSBh
dCBiZWdpbm5pbmcKKwkgKiBvZiBhc3NvYyAoMjAwNS8wNi8yNywgaXllbmdhckBjaXMudWRlbC5l
ZHUpCisJICovCisJbmV0LT5maW5kX3BzZXVkb19jdW1hY2sgPSAxOworCW5ldC0+ZmluZF9ydHhf
cHNldWRvX2N1bWFjayA9IDE7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkvKiBDaG9vc2Ug
YW4gaW5pdGlhbCBmbG93aWQuICovCisJbmV0LT5mbG93aWQgPSBzdGNiLT5hc29jLm15X3Z0YWcg
XgorCSAgICAgICAgICAgICAgbnRvaHMoc3RjYi0+cnBvcnQpIF4KKwkgICAgICAgICAgICAgIG50
b2hzKHN0Y2ItPnNjdHBfZXAtPnNjdHBfbHBvcnQpOworCW5ldC0+Zmxvd3R5cGUgPSBNX0hBU0hU
WVBFX09QQVFVRV9IQVNIOworI2VuZGlmCisJaWYgKG5ldHApIHsKKwkJKm5ldHAgPSBuZXQ7CisJ
fQorCW5ldGZpcnN0ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJaWYgKG5ldC0+
cm8ucm9fcnQgPT0gTlVMTCkgeworCQkvKiBTaW5jZSB3ZSBoYXZlIG5vIHJvdXRlIHB1dCBpdCBh
dCB0aGUgYmFjayAqLworCQlUQUlMUV9JTlNFUlRfVEFJTCgmc3RjYi0+YXNvYy5uZXRzLCBuZXQs
IHNjdHBfbmV4dCk7CisJfSBlbHNlIGlmIChuZXRmaXJzdCA9PSBOVUxMKSB7CisJCS8qIFdlIGFy
ZSB0aGUgZmlyc3Qgb25lIGluIHRoZSBwb29sLiAqLworCQlUQUlMUV9JTlNFUlRfSEVBRCgmc3Rj
Yi0+YXNvYy5uZXRzLCBuZXQsIHNjdHBfbmV4dCk7CisJfSBlbHNlIGlmIChuZXRmaXJzdC0+cm8u
cm9fcnQgPT0gTlVMTCkgeworCQkvKgorCQkgKiBGaXJzdCBvbmUgaGFzIE5PIHJvdXRlLiBQbGFj
ZSB0aGlzIG9uZSBhaGVhZCBvZiB0aGUgZmlyc3QKKwkJICogb25lLgorCQkgKi8KKwkJVEFJTFFf
SU5TRVJUX0hFQUQoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworI2lmbmRlZiBf
X1BhbmRhX18KKwl9IGVsc2UgaWYgKG5ldC0+cm8ucm9fcnQtPnJ0X2lmcCAhPSBuZXRmaXJzdC0+
cm8ucm9fcnQtPnJ0X2lmcCkgeworCQkvKgorCQkgKiBUaGlzIG9uZSBoYXMgYSBkaWZmZXJlbnQg
aW50ZXJmYWNlIHRoYW4gdGhlIG9uZSBhdCB0aGUKKwkJICogdG9wIG9mIHRoZSBsaXN0LiBQbGFj
ZSBpdCBhaGVhZC4KKwkJICovCisJCVRBSUxRX0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMs
IG5ldCwgc2N0cF9uZXh0KTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCS8qCisJCSAqIE9rIHdlIGhh
dmUgdGhlIHNhbWUgaW50ZXJmYWNlIGFzIHRoZSBmaXJzdCBvbmUuIE1vdmUKKwkJICogZm9yd2Fy
ZCB1bnRpbCB3ZSBmaW5kIGVpdGhlciBhKSBvbmUgd2l0aCBhIE5VTEwgcm91dGUuLi4KKwkJICog
aW5zZXJ0IGFoZWFkIG9mIHRoYXQgYikgb25lIHdpdGggYSBkaWZmZXJlbnQgaWZwLi4gaW5zZXJ0
CisJCSAqIGFmdGVyIHRoYXQuIGMpIGVuZCBvZiB0aGUgbGlzdC4uIGluc2VydCBhdCB0aGUgdGFp
bC4KKwkJICovCisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldGxvb2s7CisKKwkJZG8geworCQkJbmV0
bG9vayA9IFRBSUxRX05FWFQobmV0Zmlyc3QsIHNjdHBfbmV4dCk7CisJCQlpZiAobmV0bG9vayA9
PSBOVUxMKSB7CisJCQkJLyogRW5kIG9mIHRoZSBsaXN0ICovCisJCQkJVEFJTFFfSU5TRVJUX1RB
SUwoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworCQkJCWJyZWFrOworCQkJfSBl
bHNlIGlmIChuZXRsb29rLT5yby5yb19ydCA9PSBOVUxMKSB7CisJCQkJLyogbmV4dCBvbmUgaGFz
IE5PIHJvdXRlICovCisJCQkJVEFJTFFfSU5TRVJUX0JFRk9SRShuZXRmaXJzdCwgbmV0LCBzY3Rw
X25leHQpOworCQkJCWJyZWFrOworCQkJfQorI2lmbmRlZiBfX1BhbmRhX18KKwkJCWVsc2UgaWYg
KG5ldGxvb2stPnJvLnJvX3J0LT5ydF9pZnAgIT0gbmV0LT5yby5yb19ydC0+cnRfaWZwKQorI2Vs
c2UKKwkJCWVsc2UKKyNlbmRpZgorCQkJeworCQkJCVRBSUxRX0lOU0VSVF9BRlRFUigmc3RjYi0+
YXNvYy5uZXRzLCBuZXRsb29rLAorCQkJCQkJICAgbmV0LCBzY3RwX25leHQpOworCQkJCWJyZWFr
OworCQkJfQorI2lmbmRlZiBfX1BhbmRhX18KKwkJCS8qIFNoaWZ0IGZvcndhcmQgKi8KKwkJCW5l
dGZpcnN0ID0gbmV0bG9vazsKKyNlbmRpZgorCQl9IHdoaWxlIChuZXRsb29rICE9IE5VTEwpOwor
CX0KKworCS8qIGdvdCB0byBoYXZlIGEgcHJpbWFyeSBzZXQgKi8KKwlpZiAoc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uID09IDApIHsKKwkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uID0gbmV0OworCX0gZWxzZSBpZiAoKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+
cm8ucm9fcnQgPT0gTlVMTCkgJiYKKwkJICAgIChuZXQtPnJvLnJvX3J0KSAmJgorCSAgICAoKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgPT0gMCkpIHsKKwkJLyogTm8g
cm91dGUgdG8gY3VycmVudCBwcmltYXJ5IGFkb3B0IG5ldyBwcmltYXJ5ICovCisJCXN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IG5ldDsKKwl9CisJLyogVmFsaWRhdGUgcHJpbWFyeSBp
cyBmaXJzdCAqLworCW5ldCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCWlmICgo
bmV0ICE9IHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbikgJiYKKwkgICAgKHN0Y2ItPmFz
b2MucHJpbWFyeV9kZXN0aW5hdGlvbikpIHsKKwkJLyogZmlyc3Qgb25lIG9uIHRoZSBsaXN0IGlz
IE5PVCB0aGUgcHJpbWFyeQorCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNp
ZW50IGlmCisJCSAqIHRoZSBwcmltYXJ5IGlzIHRoZSBmaXJzdCBvbiB0aGUgbGlzdCwgbWFrZSBp
dAorCQkgKiBzby4KKwkJICovCisJCVRBSUxRX1JFTU9WRSgmc3RjYi0+YXNvYy5uZXRzLAorCQkJ
ICAgICBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sIHNjdHBfbmV4dCk7CisJCVRBSUxR
X0lOU0VSVF9IRUFEKCZzdGNiLT5hc29jLm5ldHMsCisJCQkJICBzdGNiLT5hc29jLnByaW1hcnlf
ZGVzdGluYXRpb24sIHNjdHBfbmV4dCk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKworc3RhdGlj
IHVpbnQzMl90CitzY3RwX2Fsb2NfYV9hc3NvY19pZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJdWludDMyX3QgaWQ7CisJc3RydWN0IHNjdHBhc29j
aGVhZCAqaGVhZDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKmxzdGNiOworCisJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKyB0cnlfYWdhaW46CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1NPQ0tFVF9BTExHT05FKSB7CisJCS8qIFRTTkggKi8KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQlyZXR1cm4gKDApOworCX0KKwkvKgorCSAqIFdlIGRvbid0IGFsbG93IGFzc29jIGlkIHRv
IGJlIG9uZSBvZiBTQ1RQX0ZVVFVSRV9BU1NPQywKKwkgKiBTQ1RQX0NVUlJFTlRfQVNTT0MgYW5k
IFNDVFBfQUxMX0FTU09DLgorCSAqLworCWlmIChpbnAtPnNjdHBfYXNzb2NpZF9jb3VudGVyIDw9
IFNDVFBfQUxMX0FTU09DKSB7CisJCWlucC0+c2N0cF9hc3NvY2lkX2NvdW50ZXIgPSBTQ1RQX0FM
TF9BU1NPQyArIDE7CisJfQorCWlkID0gaW5wLT5zY3RwX2Fzc29jaWRfY291bnRlcjsKKwlpbnAt
PnNjdHBfYXNzb2NpZF9jb3VudGVyKys7CisJbHN0Y2IgPSBzY3RwX2ZpbmRhc29jX2VwX2Fzb2Np
ZF9sb2NrZWQoaW5wLCAoc2N0cF9hc3NvY190KWlkLCAwKTsKKwlpZiAobHN0Y2IpIHsKKwkJZ290
byB0cnlfYWdhaW47CisJfQorCWhlYWQgPSAmaW5wLT5zY3RwX2Fzb2NpZGhhc2hbU0NUUF9QQ0JI
QVNIX0FTT0MoaWQsIGlucC0+aGFzaGFzb2NpZG1hcmspXTsKKwlMSVNUX0lOU0VSVF9IRUFEKGhl
YWQsIHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJc3RjYi0+YXNvYy5pbl9hc29jaWRfaGFz
aCA9IDE7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCXJldHVybiBpZDsKK30KKworLyoKKyAq
IGFsbG9jYXRlIGFuIGFzc29jaWF0aW9uIGFuZCBhZGQgaXQgdG8gdGhlIGVuZHBvaW50LiBUaGUg
Y2FsbGVyIG11c3QgYmUKKyAqIGNhcmVmdWwgdG8gYWRkIGFsbCBhZGRpdGlvbmFsIGFkZHJlc3Nl
cyBvbmNlIHRoZXkgYXJlIGtub3cgcmlnaHQgYXdheSBvcgorICogZWxzZSB0aGUgYXNzb2Mgd2ls
bCBiZSBtYXkgZXhwZXJpZW5jZSBhIGJsYWNrb3V0IHNjZW5hcmlvLgorICovCitzdHJ1Y3Qgc2N0
cF90Y2IgKgorc2N0cF9hbG9jX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBz
b2NrYWRkciAqZmlyc3RhZGRyLAorICAgICAgICAgICAgICAgIGludCAqZXJyb3IsIHVpbnQzMl90
IG92ZXJyaWRlX3RhZywgdWludDMyX3QgdnJmX2lkLAorICAgICAgICAgICAgICAgIHVpbnQxNl90
IG9fc3RyZWFtcywgdWludDE2X3QgcG9ydCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkJc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKKwkJUEtUSFJFQUQgcAorI2Vsc2UKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisgICAgICAgICAgICAgICAgLyogIF9fVXNlcnNwYWNlX18gTlVMTCBwcm9jIGlz
IGdvaW5nIHRvIGJlIHBhc3NlZCBoZXJlLiBTZWUgc2N0cF9sb3dlcl9zb3NlbmQgKi8KKyNlbmRp
ZgorCQlzdHJ1Y3QgcHJvYyAqcAorI2VuZGlmCispCit7CisJLyogbm90ZSB0aGUgcCBhcmd1bWVu
dCBpcyBvbmx5IHZhbGlkIGluIHVuYm91bmQgc29ja2V0cyAqLworCisJc3RydWN0IHNjdHBfdGNi
ICpzdGNiOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwYXNv
Y2hlYWQgKmhlYWQ7CisJdWludDE2X3QgcnBvcnQ7CisJaW50IGVycjsKKworCS8qCisJICogQXNz
dW1wdGlvbiBtYWRlIGhlcmU6IENhbGxlciBoYXMgZG9uZSBhCisJICogc2N0cF9maW5kYXNzb2Np
YXRpb25fZXBfYWRkcihlcCwgYWRkcidzKTsgdG8gbWFrZSBzdXJlIHRoZQorCSAqIGFkZHJlc3Mg
ZG9lcyBub3QgZXhpc3QgYWxyZWFkeS4KKwkgKi8KKwlpZiAoU0NUUF9CQVNFX0lORk8oaXBpX2Nv
dW50X2Fzb2MpID49IFNDVFBfTUFYX05VTV9PRl9BU09DKSB7CisJCS8qIEhpdCBtYXggYXNzb2Ms
IHNvcnJ5IG5vIG1vcmUgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PQlVGUyk7CisJCSplcnJvciA9IEVOT0JVRlM7CisJCXJl
dHVybiAoTlVMTCk7CisJfQorCWlmIChmaXJzdGFkZHIgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOwor
CQkqZXJyb3IgPSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfSU5QX1JMT0NL
KGlucCk7CisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSAmJgorCSAgICAoKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JU
UkVVU0UpKSB8fAorCSAgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5F
Q1RFRCkpKSB7CisJCS8qCisJCSAqIElmIGl0cyBpbiB0aGUgVENQIHBvb2wsIGl0cyBOT1QgYWxs
b3dlZCB0byBjcmVhdGUgYW4KKwkJICogYXNzb2NpYXRpb24uIFRoZSBwYXJlbnQgbGlzdGVuZXIg
bmVlZHMgdG8gY2FsbAorCQkgKiBzY3RwX2Fsb2NfYXNzb2MuLiBvciB0aGUgb25lLTItbWFueSBz
b2NrZXQuIElmIGEgcGVlbGVkCisJCSAqIG9mZiwgb3IgY29ubmVjdGVkIG9uZSBkb2VzIHRoaXMu
LiBpdHMgYW4gZXJyb3IuCisJCSAqLworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZB
TCk7CisJCSplcnJvciA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkpIHsKKwkJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19XQVNfQ09OTkVDVEVEKSB8fAorCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19BQk9SVEVEKSkgeworCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAo
TlVMTCk7CisJCX0KKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjMsICJBbGxvY2F0ZSBhbiBh
c3NvY2lhdGlvbiBmb3IgcGVlcjoiKTsKKyNpZmRlZiBTQ1RQX0RFQlVHCisJaWYgKGZpcnN0YWRk
cikgeworCQlTQ1RQREJHX0FERFIoU0NUUF9ERUJVR19QQ0IzLCBmaXJzdGFkZHIpOworCQlzd2l0
Y2ggKGZpcnN0YWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6
CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMywgIlBvcnQ6JWRcbiIsCisJCQkgICAgICAgIG50
b2hzKCgoc3RydWN0IHNvY2thZGRyX2luICopZmlyc3RhZGRyKS0+c2luX3BvcnQpKTsKKwkJCWJy
ZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCVNDVFBEQkco
U0NUUF9ERUJVR19QQ0IzLCAiUG9ydDolZFxuIiwKKwkJCSAgICAgICAgbnRvaHMoKChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopZmlyc3RhZGRyKS0+c2luNl9wb3J0KSk7CisJCQlicmVhazsKKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05OOgorCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1BDQjMsICJQb3J0OiVkXG4iLAorCQkJICAgICAgICBudG9ocygoKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopZmlyc3RhZGRyKS0+c2Nvbm5fcG9ydCkpOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX1BDQjMsIk5vbmVcbiIpOworCX0KKyNlbmRpZgkJCQkvKiBTQ1RQX0RFQlVHICov
CisJc3dpdGNoIChmaXJzdGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFG
X0lORVQ6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQlzaW4gPSAoc3RydWN0
IHNvY2thZGRyX2luICopZmlyc3RhZGRyOworCQlpZiAoKG50b2hzKHNpbi0+c2luX3BvcnQpID09
IDApIHx8CisJCSAgICAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgfHwKKwkJ
ICAgIChzaW4tPnNpbl9hZGRyLnNfYWRkciA9PSBJTkFERFJfQlJPQURDQVNUKSB8fAorCQkgICAg
SU5fTVVMVElDQVNUKG50b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSkpIHsKKwkJCS8qIEludmFs
aWQgYWRkcmVzcyAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJ
CSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJcnBvcnQgPSBzaW4t
PnNpbl9wb3J0OworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZf
SU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKWZpcnN0YWRkcjsKKwkJaWYgKChudG9ocyhzaW42LT5zaW42X3Bv
cnQpID09IDApIHx8CisJCSAgICBJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9h
ZGRyKSB8fAorCQkgICAgSU42X0lTX0FERFJfTVVMVElDQVNUKCZzaW42LT5zaW42X2FkZHIpKSB7
CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0Is
IEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJ
CXJwb3J0ID0gc2luNi0+c2luNl9wb3J0OworCQlicmVhazsKKwl9CisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCXsKKwkJc3RydWN0IHNvY2thZGRy
X2Nvbm4gKnNjb25uOworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopZmlyc3Rh
ZGRyOworCQlpZiAoKG50b2hzKHNjb25uLT5zY29ubl9wb3J0KSA9PSAwKSB8fAorCQkgICAgKHNj
b25uLT5zY29ubl9hZGRyID09IE5VTEwpKSB7CisJCQkvKiBJbnZhbGlkIGFkZHJlc3MgKi8KKwkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7
CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJCXJwb3J0ID0gc2Nvbm4tPnNjb25uX3BvcnQ7CisJ
CWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIG5vdCBzdXBwb3J0ZWQgZmFtaWx5
IHR5cGUgKi8KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUENCLCBFSU5WQUwpOworCQkqZXJyb3Ig
PSBFSU5WQUw7CisJCXJldHVybiAoTlVMTCk7CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgeworCQkvKgor
CQkgKiBJZiB5b3UgaGF2ZSBub3QgcGVyZm9ybWVkIGEgYmluZCwgdGhlbiB3ZSBuZWVkIHRvIGRv
IHRoZQorCQkgKiBlcGhlbWVyYWwgYmluZCBmb3IgeW91LgorCQkgKi8KKwkJaWYgKChlcnIgPSBz
Y3RwX2lucGNiX2JpbmQoaW5wLT5zY3RwX3NvY2tldCwKKwkJICAgIChzdHJ1Y3Qgc29ja2FkZHIg
KilOVUxMLAorCQkgICAgKHN0cnVjdCBzY3RwX2lmYSAqKU5VTEwsCisjaWZuZGVmIF9fUGFuZGFf
XworCQkJCQkgICBwCisjZWxzZQorCQkJCQkgICAoc3RydWN0IHByb2MgKilOVUxMCisjZW5kaWYK
KwkJICAgICkpKSB7CisJCQkvKiBiaW5kIGVycm9yLCBwcm9iYWJseSBwZXJtICovCisJCQkqZXJy
b3IgPSBlcnI7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9CisJfQorCXN0Y2IgPSBTQ1RQX1pPTkVf
R0VUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdHJ1Y3Qgc2N0cF90Y2IpOworCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJLyogb3V0IG9mIG1lbW9yeT8gKi8KKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRU5PTUVNKTsKKwkJ
KmVycm9yID0gRU5PTUVNOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX0lOQ1JfQVNPQ19D
T1VOVCgpOworCisJbWVtc2V0KHN0Y2IsIDAsIHNpemVvZigqc3RjYikpOworCWFzb2MgPSAmc3Rj
Yi0+YXNvYzsKKworCWFzb2MtPmFzc29jX2lkID0gc2N0cF9hbG9jX2FfYXNzb2NfaWQoaW5wLCBz
dGNiKTsKKwlTQ1RQX1RDQl9MT0NLX0lOSVQoc3RjYik7CisJU0NUUF9UQ0JfU0VORF9MT0NLX0lO
SVQoc3RjYik7CisJc3RjYi0+cnBvcnQgPSBycG9ydDsKKwkvKiBzZXR1cCBiYWNrIHBvaW50ZXIn
cyAqLworCXN0Y2ItPnNjdHBfZXAgPSBpbnA7CisJc3RjYi0+c2N0cF9zb2NrZXQgPSBpbnAtPnNj
dHBfc29ja2V0OworCWlmICgoZXJyID0gc2N0cF9pbml0X2Fzb2MoaW5wLCBzdGNiLCBvdmVycmlk
ZV90YWcsIHZyZl9pZCwgb19zdHJlYW1zKSkpIHsKKwkJLyogZmFpbGVkICovCisJCVNDVFBfVENC
X0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koc3RjYik7
CisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfdGNiYXNvY2lkaGFzaCk7CisJCVNDVFBfWk9ORV9G
UkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2Fzb2MpLCBzdGNiKTsKKwkJU0NUUF9ERUNSX0FT
T0NfQ09VTlQoKTsKKwkJKmVycm9yID0gZXJyOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwkvKiBh
bmQgdGhlIHBvcnQgKi8KKwlTQ1RQX0lOUF9JTkZPX1dMT0NLKCk7CisJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgKFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05F
IHwgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpKSB7CisJCS8qIGlucGNiIGZyZWVkIHdo
aWxlIGFsbG9jIGdvaW5nIG9uICovCisJCVNDVFBfVENCX0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJ
U0NUUF9UQ0JfU0VORF9MT0NLX0RFU1RST1koc3RjYik7CisJCUxJU1RfUkVNT1ZFKHN0Y2IsIHNj
dHBfdGNiYXNvY2lkaGFzaCk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX2Fzb2MpLCBzdGNiKTsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9J
TkZPX1dVTkxPQ0soKTsKKwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUlOVkFMKTsKKwkJ
KmVycm9yID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCisJLyogbm93IHRoYXQgbXlfdnRhZyBpcyBzZXQsIGFkZCBpdCB0byB0aGUgaGFzaCAq
LworCWhlYWQgPSAmU0NUUF9CQVNFX0lORk8oc2N0cF9hc29jaGFzaClbU0NUUF9QQ0JIQVNIX0FT
T0Moc3RjYi0+YXNvYy5teV92dGFnLCBTQ1RQX0JBU0VfSU5GTyhoYXNoYXNvY21hcmspKV07CisJ
LyogcHV0IGl0IGluIHRoZSBidWNrZXQgaW4gdGhlIHZ0YWcgaGFzaCBvZiBhc3NvYydzIGZvciB0
aGUgc3lzdGVtICovCisJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX2Fzb2NzKTsK
KwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKworCWlmICgoZXJyID0gc2N0cF9hZGRfcmVtb3Rl
X2FkZHIoc3RjYiwgZmlyc3RhZGRyLCBOVUxMLCBwb3J0LCBTQ1RQX0RPX1NFVFNDT1BFLCBTQ1RQ
X0FMTE9DX0FTT0MpKSkgeworCQkvKiBmYWlsdXJlLi4gbWVtb3J5IGVycm9yPyAqLworCQlpZiAo
YXNvYy0+c3RybW91dCkgeworCQkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJN
Tyk7CisJCQlhc29jLT5zdHJtb3V0ID0gTlVMTDsKKwkJfQorCQlpZiAoYXNvYy0+bWFwcGluZ19h
cnJheSkgeworCQkJU0NUUF9GUkVFKGFzb2MtPm1hcHBpbmdfYXJyYXksIFNDVFBfTV9NQVApOwor
CQkJYXNvYy0+bWFwcGluZ19hcnJheSA9IE5VTEw7CisJCX0KKwkJaWYgKGFzb2MtPm5yX21hcHBp
bmdfYXJyYXkpIHsKKwkJCVNDVFBfRlJFRShhc29jLT5ucl9tYXBwaW5nX2FycmF5LCBTQ1RQX01f
TUFQKTsKKwkJCWFzb2MtPm5yX21hcHBpbmdfYXJyYXkgPSBOVUxMOworCQl9CisJCVNDVFBfREVD
Ul9BU09DX0NPVU5UKCk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9UQ0JfTE9D
S19ERVNUUk9ZKHN0Y2IpOworCQlTQ1RQX1RDQl9TRU5EX0xPQ0tfREVTVFJPWShzdGNiKTsKKwkJ
TElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNoKTsKKwkJU0NUUF9aT05FX0ZSRUUo
U0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksIHN0Y2IpOworCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9QQ0IsIEVOT0JVRlMpOworCQkqZXJyb3IgPSBFTk9CVUZTOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwkvKiBJbml0IGFsbCB0aGUgdGltZXJzICovCisJU0NUUF9PU19USU1FUl9JTklUKCZh
c29jLT5kYWNrX3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPnN0cnJl
c2V0X3RpbWVyLnRpbWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmFzY29uZl90aW1l
ci50aW1lcik7CisJU0NUUF9PU19USU1FUl9JTklUKCZhc29jLT5zaHV0X2d1YXJkX3RpbWVyLnRp
bWVyKTsKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmF1dG9jbG9zZV90aW1lci50aW1lcik7
CisJU0NUUF9PU19USU1FUl9JTklUKCZhc29jLT5kZWxheWVkX2V2ZW50X3RpbWVyLnRpbWVyKTsK
KwlTQ1RQX09TX1RJTUVSX0lOSVQoJmFzb2MtPmRlbGV0ZV9wcmltX3RpbWVyLnRpbWVyKTsKKwor
CUxJU1RfSU5TRVJUX0hFQUQoJmlucC0+c2N0cF9hc29jX2xpc3QsIHN0Y2IsIHNjdHBfdGNibGlz
dCk7CisJLyogbm93IGZpbGUgdGhlIHBvcnQgdW5kZXIgdGhlIGhhc2ggYXMgd2VsbCAqLworCWlm
IChpbnAtPnNjdHBfdGNiaGFzaCAhPSBOVUxMKSB7CisJCWhlYWQgPSAmaW5wLT5zY3RwX3RjYmhh
c2hbU0NUUF9QQ0JIQVNIX0FMTEFERFIoc3RjYi0+cnBvcnQsCisJCSAgICBpbnAtPnNjdHBfaGFz
aG1hcmspXTsKKwkJTElTVF9JTlNFUlRfSEVBRChoZWFkLCBzdGNiLCBzY3RwX3RjYmhhc2gpOwor
CX0KKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJU0NUUERCRyhTQ1RQX0RFQlVHX1BDQjEsICJB
c3NvY2lhdGlvbiAlcCBub3cgYWxsb2NhdGVkXG4iLCAodm9pZCAqKXN0Y2IpOworCXJldHVybiAo
c3RjYik7Cit9CisKKwordm9pZAorc2N0cF9yZW1vdmVfbmV0KHN0cnVjdCBzY3RwX3RjYiAqc3Rj
Yiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCWFzb2MtPm51bW5ldHMtLTsKKwlUQUlMUV9S
RU1PVkUoJmFzb2MtPm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKKwlpZiAobmV0ID09IGFzb2MtPnBy
aW1hcnlfZGVzdGluYXRpb24pIHsKKwkJLyogUmVzZXQgcHJpbWFyeSAqLworCQlzdHJ1Y3Qgc2N0
cF9uZXRzICpsbmV0OworCisJCWxuZXQgPSBUQUlMUV9GSVJTVCgmYXNvYy0+bmV0cyk7CisJCS8q
IE1vYmlsaXR5IGFkYXB0YXRpb24KKwkJICAgSWRlYWxseSwgaWYgZGVsZXRlZCBkZXN0aW5hdGlv
biBpcyB0aGUgcHJpbWFyeSwgaXQgYmVjb21lcworCQkgICBhIGZhc3QgcmV0cmFuc21pc3Npb24g
dHJpZ2dlciBieSB0aGUgc3Vic2VxdWVudCBTRVQgUFJJTUFSWS4KKwkJICAgKGJ5IG1pY2NoaWUp
CisJCSAqLworCQlpZiAoc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAs
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9CQVNFKSB8
fAorCQkgICAgc2N0cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9NT0JJTElUWV9GQVNUSEFORE9GRikp
IHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19BU0NPTkYxLCAicmVtb3ZlX25ldDogcHJpbWFyeSBk
c3QgaXMgZGVsZXRpbmdcbiIpOworCQkJaWYgKGFzb2MtPmRlbGV0ZWRfcHJpbWFyeSAhPSBOVUxM
KSB7CisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJyZW1vdmVfbmV0OiBkZWxldGVk
IHByaW1hcnkgbWF5IGJlIGFscmVhZHkgc3RvcmVkXG4iKTsKKwkJCQlnb3RvIG91dDsKKwkJCX0K
KwkJCWFzb2MtPmRlbGV0ZWRfcHJpbWFyeSA9IG5ldDsKKwkJCWF0b21pY19hZGRfaW50KCZuZXQt
PnJlZl9jb3VudCwgMSk7CisJCQltZW1zZXQoJm5ldC0+bGFzdHNhLCAwLCBzaXplb2YobmV0LT5s
YXN0c2EpKTsKKwkJCW1lbXNldCgmbmV0LT5sYXN0c3YsIDAsIHNpemVvZihuZXQtPmxhc3Rzdikp
OworCQkJc2N0cF9tb2JpbGl0eV9mZWF0dXJlX29uKHN0Y2ItPnNjdHBfZXAsCisJCQkJCQkgU0NU
UF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfUFJJTV9ERUxFVEVELAorCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgTlVMTCk7CisJ
CX0KK291dDoKKwkJLyogVHJ5IHRvIGZpbmQgYSBjb25maXJtZWQgcHJpbWFyeSAqLworCQlhc29j
LT5wcmltYXJ5X2Rlc3RpbmF0aW9uID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbG5l
dCwgMCk7CisJfQorCWlmIChuZXQgPT0gYXNvYy0+bGFzdF9kYXRhX2NodW5rX2Zyb20pIHsKKwkJ
LyogUmVzZXQgcHJpbWFyeSAqLworCQlhc29jLT5sYXN0X2RhdGFfY2h1bmtfZnJvbSA9IFRBSUxR
X0ZJUlNUKCZhc29jLT5uZXRzKTsKKwl9CisJaWYgKG5ldCA9PSBhc29jLT5sYXN0X2NvbnRyb2xf
Y2h1bmtfZnJvbSkgeworCQkvKiBDbGVhciBuZXQgKi8KKwkJYXNvYy0+bGFzdF9jb250cm9sX2No
dW5rX2Zyb20gPSBOVUxMOworCX0KKwlpZiAobmV0ID09IHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7
CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVybmF0ZSk7CisJCXN0Y2It
PmFzb2MuYWx0ZXJuYXRlID0gTlVMTDsKKwl9CisJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7
Cit9CisKKy8qCisgKiByZW1vdmUgYSByZW1vdGUgZW5kcG9pbnQgYWRkcmVzcyBmcm9tIGFuIGFz
c29jaWF0aW9uLCBpdCB3aWxsIGZhaWwgaWYgdGhlCisgKiBhZGRyZXNzIGRvZXMgbm90IGV4aXN0
LgorICovCitpbnQKK3NjdHBfZGVsX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwg
c3RydWN0IHNvY2thZGRyICpyZW1hZGRyKQoreworCS8qCisJICogSGVyZSB3ZSBuZWVkIHRvIHJl
bW92ZSBhIHJlbW90ZSBhZGRyZXNzLiBUaGlzIGlzIHF1aXRlIHNpbXBsZSwgd2UKKwkgKiBmaXJz
dCBmaW5kIGl0IGluIHRoZSBsaXN0IG9mIGFkZHJlc3MgZm9yIHRoZSBhc3NvY2lhdGlvbgorCSAq
ICh0YXNvYy0+YXNvYy5uZXRzKSBhbmQgdGhlbiBpZiBpdCBpcyB0aGVyZSwgd2UgZG8gYSBMSVNU
X1JFTU9WRQorCSAqIG9uIHRoYXQgaXRlbS4gTm90ZSB3ZSBkbyBub3QgYWxsb3cgaXQgdG8gYmUg
cmVtb3ZlZCBpZiB0aGVyZSBhcmUKKwkgKiBubyBvdGhlciBhZGRyZXNzZXMuCisJICovCisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqbm5l
dDsKKworCWFzb2MgPSAmc3RjYi0+YXNvYzsKKworCS8qIGxvY2F0ZSB0aGUgYWRkcmVzcyAqLwor
CVRBSUxRX0ZPUkVBQ0hfU0FGRShuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQsIG5uZXQpIHsK
KwkJaWYgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgIT0gcmVtYWRkci0+c2FfZmFtaWx5
KSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc2N0cF9jbXBhZGRyKChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmbmV0LT5yby5fbF9hZGRyLAorCQkgICAgcmVtYWRkcikpIHsKKwkJCS8qIHdlIGZvdW5k
IHRoZSBndXkgKi8KKwkJCWlmIChhc29jLT5udW1uZXRzIDwgMikgeworCQkJCS8qIE11c3QgaGF2
ZSBhdCBMRUFTVCB0d28gcmVtb3RlIGFkZHJlc3NlcyAqLworCQkJCXJldHVybiAoLTEpOworCQkJ
fSBlbHNlIHsKKwkJCQlzY3RwX3JlbW92ZV9uZXQoc3RjYiwgbmV0KTsKKwkJCQlyZXR1cm4gKDAp
OworCQkJfQorCQl9CisJfQorCS8qIG5vdCBmb3VuZC4gKi8KKwlyZXR1cm4gKC0yKTsKK30KKwor
dm9pZAorc2N0cF9kZWxldGVfZnJvbV90aW1ld2FpdCh1aW50MzJfdCB0YWcsIHVpbnQxNl90IGxw
b3J0LCB1aW50MTZfdCBycG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cHZ0YWdoZWFkICpjaGFpbjsKKwlz
dHJ1Y3Qgc2N0cF90YWdibG9jayAqdHdhaXRfYmxvY2s7CisJaW50IGZvdW5kID0gMDsKKwlpbnQg
aTsKKworCWNoYWluID0gJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdhaXQpWyh0YWcgJSBTQ1RQ
X1NUQUNLX1ZUQUdfSEFTSF9TSVpFKV07CisJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFp
biwgc2N0cF9ueHRfdGFnYmxvY2spIHsKKwkJZm9yIChpID0gMDsgaSA8IFNDVFBfTlVNQkVSX0lO
X1ZUQUdfQkxPQ0s7IGkrKykgeworCQkgIGlmICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0u
dl90YWcgPT0gdGFnKSAmJgorCQkgICAgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBv
cnQgPT0gbHBvcnQpICYmCisJCSAgICAgICh0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5ycG9y
dCA9PSBycG9ydCkpIHsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS50dl9zZWNfYXRf
ZXhwaXJlID0gMDsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9IDA7CisJ
CQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ubHBvcnQgPSAwOworCQkJCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnJwb3J0ID0gMDsKKwkJCQlmb3VuZCA9IDE7CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKwkJaWYgKGZvdW5kKQorCQkJYnJlYWs7CisJfQorfQorCitpbnQKK3NjdHBfaXNf
aW5fdGltZXdhaXQodWludDMyX3QgdGFnLCB1aW50MTZfdCBscG9ydCwgdWludDE2X3QgcnBvcnQp
Cit7CisJc3RydWN0IHNjdHB2dGFnaGVhZCAqY2hhaW47CisJc3RydWN0IHNjdHBfdGFnYmxvY2sg
KnR3YWl0X2Jsb2NrOworCWludCBmb3VuZCA9IDA7CisJaW50IGk7CisKKwlTQ1RQX0lOUF9JTkZP
X1dMT0NLKCk7CisJY2hhaW4gPSAmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2FpdClbKHRhZyAl
IFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKKwlMSVNUX0ZPUkVBQ0godHdhaXRfYmxvY2ss
IGNoYWluLCBzY3RwX254dF90YWdibG9jaykgeworCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1C
RVJfSU5fVlRBR19CTE9DSzsgaSsrKSB7CisJCQlpZiAoKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2Nr
W2ldLnZfdGFnID09IHRhZykgICYmCisJCQkgICAgKHR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
Lmxwb3J0ID09IGxwb3J0KSAgJiYKKwkJCSAgICAodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0u
cnBvcnQgPT0gcnBvcnQpKSB7CisJCQkJZm91bmQgPSAxOworCQkJCWJyZWFrOworCQkJfQorCQl9
CisJCWlmIChmb3VuZCkKKwkJCWJyZWFrOworCX0KKwlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsK
KwlyZXR1cm4gKGZvdW5kKTsKK30KKworCit2b2lkCitzY3RwX2FkZF92dGFnX3RvX3RpbWV3YWl0
KHVpbnQzMl90IHRhZywgdWludDMyX3QgdGltZSwgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJw
b3J0KQoreworCXN0cnVjdCBzY3RwdnRhZ2hlYWQgKmNoYWluOworCXN0cnVjdCBzY3RwX3RhZ2Js
b2NrICp0d2FpdF9ibG9jazsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CisJaW50IHNldCwgaTsKKwor
CWlmICh0aW1lID09IDApIHsKKwkJLyogSXRzIGRpc2FibGVkICovCisJCXJldHVybjsKKwl9CisJ
KHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7CisJY2hhaW4gPSAmU0NUUF9CQVNFX0lO
Rk8odnRhZ190aW1ld2FpdClbKHRhZyAlIFNDVFBfU1RBQ0tfVlRBR19IQVNIX1NJWkUpXTsKKwlz
ZXQgPSAwOworCUxJU1RfRk9SRUFDSCh0d2FpdF9ibG9jaywgY2hhaW4sIHNjdHBfbnh0X3RhZ2Js
b2NrKSB7CisJCS8qIEJsb2NrKHMpIHByZXNlbnQsIGxldHMgZmluZCBzcGFjZSwgYW5kIGV4cGly
ZSBvbiB0aGUgZmx5ICovCisJCWZvciAoaSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9JTl9WVEFHX0JM
T0NLOyBpKyspIHsKKwkJCWlmICgodHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0g
MCkgJiYKKwkJCSAgICAhc2V0KSB7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZf
c2VjX2F0X2V4cGlyZSA9CisJCQkJCW5vdy50dl9zZWMgKyB0aW1lOworCQkJCXR3YWl0X2Jsb2Nr
LT52dGFnX2Jsb2NrW2ldLnZfdGFnID0gdGFnOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2Nr
W2ldLmxwb3J0ID0gbHBvcnQ7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQg
PSBycG9ydDsKKwkJCQlzZXQgPSAxOworCQkJfSBlbHNlIGlmICgodHdhaXRfYmxvY2stPnZ0YWdf
YmxvY2tbaV0udl90YWcpICYmCisJCQkJICAgICgobG9uZyl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1tpXS50dl9zZWNfYXRfZXhwaXJlIDwgbm93LnR2X3NlYykpIHsKKwkJCQkvKiBBdWRpdCBleHBp
cmVzIHRoaXMgZ3V5ICovCisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udHZfc2VjX2F0
X2V4cGlyZSA9IDA7CisJCQkJdHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPSAwOwor
CQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLmxwb3J0ID0gMDsKKwkJCQl0d2FpdF9ibG9j
ay0+dnRhZ19ibG9ja1tpXS5ycG9ydCA9IDA7CisJCQkJaWYgKHNldCA9PSAwKSB7CisJCQkJCS8q
IFJldXNlIGl0IGZvciBteSBuZXcgdGFnICovCisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2Nr
W2ldLnR2X3NlY19hdF9leHBpcmUgPSBub3cudHZfc2VjICsgdGltZTsKKwkJCQkJdHdhaXRfYmxv
Y2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPSB0YWc7CisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Js
b2NrW2ldLmxwb3J0ID0gbHBvcnQ7CisJCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnJw
b3J0ID0gcnBvcnQ7CisJCQkJCXNldCA9IDE7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChzZXQp
IHsKKwkJCS8qCisJCQkgKiBXZSBvbmx5IGRvIHVwIHRvIHRoZSBibG9jayB3aGVyZSB3ZSBjYW4K
KwkJCSAqIHBsYWNlIG91ciB0YWcgZm9yIGF1ZGl0cworCQkJICovCisJCQlicmVhazsKKwkJfQor
CX0KKwkvKiBOZWVkIHRvIGFkZCBhIG5ldyBibG9jayB0byBjaGFpbiAqLworCWlmICghc2V0KSB7
CisJCVNDVFBfTUFMTE9DKHR3YWl0X2Jsb2NrLCBzdHJ1Y3Qgc2N0cF90YWdibG9jayAqLAorCQkg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3RhZ2Jsb2NrKSwgU0NUUF9NX1RJTVcpOworCQlpZiAodHdh
aXRfYmxvY2sgPT0gTlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJDYW4gbm90
IGFsbG9jIHRhZ2Jsb2NrIik7CisjZW5kaWYKKwkJCXJldHVybjsKKwkJfQorCQltZW1zZXQodHdh
aXRfYmxvY2ssIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF90YWdibG9jaykpOworCQlMSVNUX0lOU0VS
VF9IRUFEKGNoYWluLCB0d2FpdF9ibG9jaywgc2N0cF9ueHRfdGFnYmxvY2spOworCQl0d2FpdF9i
bG9jay0+dnRhZ19ibG9ja1swXS50dl9zZWNfYXRfZXhwaXJlID0gbm93LnR2X3NlYyArIHRpbWU7
CisJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrWzBdLnZfdGFnID0gdGFnOworCQl0d2FpdF9ibG9j
ay0+dnRhZ19ibG9ja1swXS5scG9ydCA9IGxwb3J0OworCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9j
a1swXS5ycG9ydCA9IHJwb3J0OworCX0KK30KKwordm9pZAorc2N0cF9jbGVhbl91cF9zdHJlYW0o
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCAqcmgpCit7CisJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqY29udHJvbCwgKm5jb250cm9sOworCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2ws
IHJoLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKwkJVEFJTFFfUkVNT1ZFKHJoLCBjb250cm9s
LCBuZXh0X2luc3RybSk7CisJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCWlmIChjb250cm9s
LT5vbl9yZWFkX3EgPT0gMCkgeworCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNvbnRyb2wtPndo
b0Zyb20pOworCQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY29udHJv
bC0+ZGF0YSk7CisJCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCX0KKwkJLyogUmVh
c3NlbWJseSBmcmVlPyAqLworCQlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmY29udHJvbC0+cmVh
c20sIHNjdHBfbmV4dCwgbmNoaykgeworCQkJVEFJTFFfUkVNT1ZFKCZjb250cm9sLT5yZWFzbSwg
Y2hrLCBzY3RwX25leHQpOworCQkJaWYgKGNoay0+ZGF0YSkgeworCQkJCXNjdHBfbV9mcmVlbShj
aGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9CisJCQlpZiAoY2hrLT5ob2xk
c19rZXlfcmVmKQorCQkJCXNjdHBfYXV0aF9rZXlfcmVsZWFzZShzdGNiLCBjaGstPmF1dGhfa2V5
aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1Rv
KTsKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hr
KTsKKwkJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9S
WSovCisJCX0KKwkJLyoKKwkJICogV2UgZG9uJ3QgZnJlZSB0aGUgYWRkcmVzcyBoZXJlCisJCSAq
IHNpbmNlIGFsbCB0aGUgbmV0J3Mgd2VyZSBmcmVlZAorCQkgKiBhYm92ZS4KKwkJICovCisJCWlm
IChjb250cm9sLT5vbl9yZWFkX3EgPT0gMCkgeworCQkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwg
Y29udHJvbCk7CisJCX0KKwl9Cit9CisKKyNpZmRlZiBfX1BhbmRhX18KK3ZvaWQgcGFuZGFfd2Fr
ZXVwX3NvY2tldChzdHJ1Y3Qgc29ja2V0ICpzbyk7CisjZW5kaWYKKworLyotCisgKiBGcmVlIHRo
ZSBhc3NvY2lhdGlvbiBhZnRlciB1bi1oYXNoaW5nIHRoZSByZW1vdGUgcG9ydC4gVGhpcworICog
ZnVuY3Rpb24gQUxXQVlTIHJldHVybnMgaG9sZGluZyBOTyBMT0NLIG9uIHRoZSBzdGNiLiBJdCBE
T0VTCisgKiBleHBlY3QgdGhhdCB0aGUgaW5wdXQgdG8gdGhpcyBmdW5jdGlvbiBJUyBhIGxvY2tl
ZCBUQ0IuCisgKiBJdCB3aWxsIHJldHVybiAwLCBpZiBpdCBkaWQgTk9UIGRlc3Ryb3kgdGhlIGFz
c29jaWF0aW9uIChpbnN0ZWFkCisgKiBpdCB1bmxvY2tzIGl0LiBJdCB3aWxsIHJldHVybiBOT04t
emVybyBpZiBpdCBlaXRoZXIgZGVzdHJveWVkIHRoZQorICogYXNzb2NpYXRpb24gT1IgdGhlIGFz
c29jaWF0aW9uIGlzIGFscmVhZHkgZGVzdHJveWVkLgorICovCitpbnQKK3NjdHBfZnJlZV9hc3Nv
YyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBmcm9t
X2lucGNiZnJlZSwgaW50IGZyb21fbG9jYXRpb24pCit7CisJaW50IGk7CisJc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2M7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCAqbm5ldDsKKwlzdHJ1
Y3Qgc2N0cF9sYWRkciAqbGFkZHIsICpuYWRkcjsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpj
aGssICpuY2hrOworCXN0cnVjdCBzY3RwX2FzY29uZl9hZGRyICphcGFyYW0sICpuYXBhcmFtOwor
CXN0cnVjdCBzY3RwX2FzY29uZl9hY2sgKmFhY2ssICpuYWFjazsKKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fcmVzZXRfbGlzdCAqc3RycnN0LCAqbnN0cnJzdDsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9f
cmVhZCAqc3EsICpuc3E7CisJc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLCAq
bnNwOworCXNjdHBfc2hhcmVka2V5X3QgKnNoYXJlZF9rZXksICpuc2hhcmVkX2tleTsKKwlzdHJ1
Y3Qgc29ja2V0ICpzbzsKKworCS8qIGZpcnN0LCBsZXRzIHB1cmdlIHRoZSBlbnRyeSBmcm9tIHRo
ZSBoYXNoIHRhYmxlLiAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNjdHBfbG9ja19hc3Nl
cnQoU0NUUF9JTlBfU08oaW5wKSk7CisjZW5kaWYKKworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcK
KwlzY3RwX2xvZ19jbG9zaW5nKGlucCwgc3RjYiwgNik7CisjZW5kaWYKKwlpZiAoc3RjYi0+YXNv
Yy5zdGF0ZSA9PSAwKSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQlzY3RwX2xvZ19jbG9z
aW5nKGlucCwgTlVMTCwgNyk7CisjZW5kaWYKKwkJLyogdGhlcmUgaXMgbm8gYXNvYywgcmVhbGx5
IFRTTkggOi0wICovCisJCXJldHVybiAoMSk7CisJfQorCWlmIChzdGNiLT5hc29jLmFsdGVybmF0
ZSkgeworCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5hbHRlcm5hdGUpOworCQlz
dGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJfQorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
LyogVEVNUDogbW92ZWQgdG8gYmVsb3cgKi8KKyAgICAgICAgLyogVEVNUCBDT0RFICovCisJaWYg
KHN0Y2ItPmZyZWVkX2Zyb21fd2hlcmUgPT0gMCkgeworCQkvKiBPbmx5IHJlY29yZCB0aGUgZmly
c3QgcGxhY2UgZnJlZSBoYXBwZW5lZCBmcm9tICovCisJCXN0Y2ItPmZyZWVkX2Zyb21fd2hlcmUg
PSBmcm9tX2xvY2F0aW9uOworCX0KKyAgICAgICAgLyogVEVNUCBDT0RFICovCisjZW5kaWYKKwor
CWFzb2MgPSAmc3RjYi0+YXNvYzsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfU09DS0VUX0dPTkUpKQorCQkvKiBub3RoaW5nIGFyb3VuZCAqLworCQlzbyA9IE5VTEw7
CisJZWxzZQorCQlzbyA9IGlucC0+c2N0cF9zb2NrZXQ7CisKKwkvKgorCSAqIFdlIHVzZWQgdGlt
ZXIgYmFzZWQgZnJlZWluZyBpZiBhIHJlYWRlciBvciB3cml0ZXIgaXMgaW4gdGhlIHdheS4KKwkg
KiBTbyB3ZSBmaXJzdCBjaGVjayBpZiB3ZSBhcmUgYWN0dWFsbHkgYmVpbmcgY2FsbGVkIGZyb20g
YSB0aW1lciwKKwkgKiBpZiBzbyB3ZSBhYm9ydCBlYXJseSBpZiBhIHJlYWRlciBvciB3cml0ZXIg
aXMgc3RpbGwgaW4gdGhlIHdheS4KKwkgKi8KKwlpZiAoKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQ
X1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSAmJgorCSAgICAoZnJvbV9pbnBjYmZyZWUgPT0gU0NU
UF9OT1JNQUxfUFJPQykpIHsKKwkJLyoKKwkJICogaXMgaXQgdGhlIHRpbWVyIGRyaXZpbmcgdXM/
IGlmIHNvIGFyZSB0aGUgcmVhZGVyL3dyaXRlcnMKKwkJICogZ29uZT8KKwkJICovCisJCWlmIChz
dGNiLT5hc29jLnJlZmNudCkgeworCQkJLyogbm9wZSwgcmVhZGVyIG9yIHdyaXRlciBpbiB0aGUg
d2F5ICovCisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTCwgaW5w
LCBzdGNiLCBOVUxMKTsKKwkJCS8qIG5vIGFzb2MgZGVzdHJveWVkICovCisJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2dfY2xvc2lu
ZyhpbnAsIHN0Y2IsIDgpOworI2VuZGlmCisJCQlyZXR1cm4gKDApOworCQl9CisJfQorCS8qIG5v
dyBjbGVhbiB1cCBhbnkgb3RoZXIgdGltZXJzICovCisJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9Q
KCZhc29jLT5kYWNrX3RpbWVyLnRpbWVyKTsKKwlhc29jLT5kYWNrX3RpbWVyLnNlbGYgPSBOVUxM
OworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVzZXRfdGltZXIudGltZXIp
OworCS8qLQorCSAqIEZvciBzdHJlYW0gcmVzZXQgd2UgZG9uJ3QgYmxhc3QgdGhpcyB1bmxlc3MK
KwkgKiBpdCBpcyBhIHN0ci1yZXNldCB0aW1lciwgaXQgbWlnaHQgYmUgdGhlCisJICogZnJlZS1h
c29jIHRpbWVyIHdoaWNoIHdlIERPTidUIHdhbnQgdG8KKwkgKiBkaXN0dXJiLgorCSAqLworCWlm
IChhc29jLT5zdHJyZXNldF90aW1lci50eXBlID09IFNDVFBfVElNRVJfVFlQRV9TVFJSRVNFVCkK
KwkJYXNvYy0+c3RycmVzZXRfdGltZXIuc2VsZiA9IE5VTEw7CisJKHZvaWQpU0NUUF9PU19USU1F
Ul9TVE9QKCZhc29jLT5hc2NvbmZfdGltZXIudGltZXIpOworCWFzb2MtPmFzY29uZl90aW1lci5z
ZWxmID0gTlVMTDsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmF1dG9jbG9zZV90
aW1lci50aW1lcik7CisJYXNvYy0+YXV0b2Nsb3NlX3RpbWVyLnNlbGYgPSBOVUxMOworCSh2b2lk
KVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c2h1dF9ndWFyZF90aW1lci50aW1lcik7CisJYXNv
Yy0+c2h1dF9ndWFyZF90aW1lci5zZWxmID0gTlVMTDsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NU
T1AoJmFzb2MtPmRlbGF5ZWRfZXZlbnRfdGltZXIudGltZXIpOworCWFzb2MtPmRlbGF5ZWRfZXZl
bnRfdGltZXIuc2VsZiA9IE5VTEw7CisJLyogTW9iaWxpdHkgYWRhcHRhdGlvbiAqLworCSh2b2lk
KVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+ZGVsZXRlX3ByaW1fdGltZXIudGltZXIpOworCWFz
b2MtPmRlbGV0ZV9wcmltX3RpbWVyLnNlbGYgPSBOVUxMOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
YXNvYy0+bmV0cywgc2N0cF9uZXh0KSB7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0
LT5yeHRfdGltZXIudGltZXIpOworCQluZXQtPnJ4dF90aW1lci5zZWxmID0gTlVMTDsKKwkJKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZuZXQtPnBtdHVfdGltZXIudGltZXIpOworCQluZXQtPnBt
dHVfdGltZXIuc2VsZiA9IE5VTEw7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5o
Yl90aW1lci50aW1lcik7CisJCW5ldC0+aGJfdGltZXIuc2VsZiA9IE5VTEw7CisJfQorCS8qIE5v
dyB0aGUgcmVhZCBxdWV1ZSBuZWVkcyB0byBiZSBjbGVhbmVkIHVwIChvbmx5IG9uY2UpICovCisJ
aWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkgPT0g
MCkgeworCQlzdGNiLT5hc29jLnN0YXRlIHw9IFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQ7
CisJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCQlUQUlMUV9GT1JFQUNIKHNxLCAmaW5wLT5y
ZWFkX3F1ZXVlLCBuZXh0KSB7CisJCQlpZiAoc3EtPnN0Y2IgPT0gc3RjYikgeworCQkJCXNxLT5k
b19ub3RfcmVmX3N0Y2IgPSAxOworCQkJCXNxLT5zaW5mb19jdW10c24gPSBzdGNiLT5hc29jLmN1
bXVsYXRpdmVfdHNuOworCQkJCS8qIElmIHRoZXJlIGlzIG5vIGVuZCwgdGhlcmUgbmV2ZXIKKwkJ
CQkgKiB3aWxsIGJlIG5vdy4KKwkJCQkgKi8KKwkJCQlpZiAoc3EtPmVuZF9hZGRlZCA9PSAwKSB7
CisJCQkJCS8qIEhlbGQgZm9yIFBELUFQSSBjbGVhciB0aGF0LiAqLworCQkJCQlzcS0+cGRhcGlf
YWJvcnRlZCA9IDE7CisJCQkJCXNxLT5oZWxkX2xlbmd0aCA9IDA7CisJCQkJCWlmIChzY3RwX3N0
Y2JfaXNfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCkgJiYg
KHNvICE9IE5VTEwpKSB7CisJCQkJCQkvKgorCQkJCQkJICogTmVlZCB0byBhZGQgYSBQRC1BUEkg
YWJvcnRlZCBpbmRpY2F0aW9uLgorCQkJCQkJICogU2V0dGluZyB0aGUgY29udHJvbF9wZGFwaSBh
c3N1cmVzIHRoYXQgaXQgd2lsbAorCQkJCQkJICogYmUgYWRkZWQgcmlnaHQgYWZ0ZXIgdGhpcyBt
c2cuCisJCQkJCQkgKi8KKwkJCQkJCXVpbnQzMl90IHN0cnNlcTsKKwkJCQkJCXN0Y2ItPmFzb2Mu
Y29udHJvbF9wZGFwaSA9IHNxOworCQkJCQkJc3Ryc2VxID0gKHNxLT5zaW5mb19zdHJlYW0gPDwg
MTYpIHwgKHNxLT5taWQgJiAweDAwMDBmZmZmKTsKKwkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9QQVJUSUFMX0RFTFZJRVJZX0lORElDQVRJT04sCisJCQkJCQkgICAgICAgICAgICAg
ICAgc3RjYiwKKwkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX1BBUlRJQUxfREVMSVZFUllfQUJP
UlRFRCwKKwkJCQkJCSAgICAgICAgICAgICAgICAodm9pZCAqKSZzdHJzZXEsCisJCQkJCQkgICAg
ICAgICAgICAgICAgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJc3RjYi0+YXNvYy5jb250cm9sX3Bk
YXBpID0gTlVMTDsKKwkJCQkJfQorCQkJCX0KKwkJCQkvKiBBZGQgYW4gZW5kIHRvIHdha2UgdGhl
bSAqLworCQkJCXNxLT5lbmRfYWRkZWQgPSAxOworCQkJfQorCQl9CisJCVNDVFBfSU5QX1JFQURf
VU5MT0NLKGlucCk7CisJCWlmIChzdGNiLT5ibG9ja19lbnRyeSkgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BDQiwgRUNPTk5SRVNFVCk7
CisJCQlzdGNiLT5ibG9ja19lbnRyeS0+ZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJc3RjYi0+Ymxv
Y2tfZW50cnkgPSBOVUxMOworCQl9CisJfQorCWlmICgoc3RjYi0+YXNvYy5yZWZjbnQpIHx8IChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUUpKSB7CisJCS8qIFNv
bWVvbmUgaG9sZHMgYSByZWZlcmVuY2UgT1IgdGhlIHNvY2tldCBpcyB1bmFjY2VwdGVkIHlldC4K
KwkJKi8KKwkJaWYgKChzdGNiLT5hc29jLnJlZmNudCkgIHx8CisJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCQlzdGNiLT5hc29jLnN0
YXRlICY9IH5TQ1RQX1NUQVRFX0lOX0FDQ0VQVF9RVUVVRTsKKwkJCXNjdHBfdGltZXJfc3RhcnQo
U0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwpOworCQl9CisJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19TT0NLRVRfQUxMR09ORSkgfHwKKwkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkpCisJCQkvKiBub3RoaW5nIGFyb3VuZCAqLworCQkJc28gPSBOVUxM
OworCQlpZiAoc28pIHsKKwkJCS8qIFdha2UgYW55IHJlYWRlci93cml0ZXJzICovCisJCQlzY3Rw
X3Nvcndha2V1cChpbnAsIHNvKTsKKwkJCXNjdHBfc293d2FrZXVwKGlucCwgc28pOworCQl9CisK
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCXNjdHBfbG9nX2Nsb3NpbmcoaW5wLCBzdGNiLCA5
KTsKKyNlbmRpZgorCQkvKiBubyBhc29jIGRlc3Ryb3llZCAqLworCQlyZXR1cm4gKDApOworCX0K
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIHN0Y2IsIDEw
KTsKKyNlbmRpZgorCS8qIFdoZW4gSSByZWFjaCBoZXJlLCBubyBvdGhlcnMgd2FudAorCSAqIHRv
IGtpbGwgdGhlIGFzc29jIHlldC4uIGFuZCBJIG93bgorCSAqIHRoZSBsb2NrLiBOb3cgaXRzIHBv
c3NpYmxlIGFuIGFib3J0CisJICogY29tZXMgaW4gd2hlbiBJIGRvIHRoZSBsb2NrIGV4Y2hhbmdl
CisJICogYmVsb3cgdG8gZ3JhYiBhbGwgdGhlIGxvY2tzIHRvIGRvCisJICogdGhlIGZpbmFsIHRh
a2Ugb3V0LiB0byBwcmV2ZW50IHRoaXMKKwkgKiB3ZSBpbmNyZW1lbnQgdGhlIGNvdW50LCB3aGlj
aCB3aWxsCisJICogc3RhcnQgYSB0aW1lciBhbmQgYmxvdyBvdXQgYWJvdmUgdGh1cworCSAqIGFz
c3VyaW5nIHVzIHRoYXQgd2UgaG9sZCBleGNsdXNpdmUKKwkgKiBraWxsaW5nIG9mIHRoZSBhc29j
LiBOb3RlIHRoYXQKKwkgKiBhZnRlciBnZXR0aW5nIGJhY2sgdGhlIFRDQiBsb2NrCisJICogd2Ug
d2lsbCBnbyBhaGVhZCBhbmQgaW5jcmVtZW50IHRoZQorCSAqIGNvdW50ZXIgYmFjayB1cCBhbmQg
c3RvcCBhbnkgdGltZXIKKwkgKiBhIHBhc3Npbmcgc3RyYW5nZXIgbWF5IGhhdmUgc3RhcnRlZCA6
LVMKKwkgKi8KKwlpZiAoZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgeworCQlh
dG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCisJCVNDVFBfVENCX1VOTE9D
SyhzdGNiKTsKKwkJU0NUUF9JTlBfSU5GT19XTE9DSygpOworCQlTQ1RQX0lOUF9XTE9DSyhpbnAp
OworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCX0KKwkvKiBEb3VibGUgY2hlY2sgdGhlIEdPTkUg
ZmxhZyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FM
TEdPTkUpIHx8CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRf
R09ORSkpCisJCS8qIG5vdGhpbmcgYXJvdW5kICovCisJCXNvID0gTlVMTDsKKworCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCS8qCisJCSAqIEZvciBU
Q1AgdHlwZSB3ZSBuZWVkIHNwZWNpYWwgaGFuZGxpbmcgd2hlbiB3ZSBhcmUKKwkJICogY29ubmVj
dGVkLiBXZSBhbHNvIGluY2x1ZGUgdGhlIHBlZWwnZWQgb2ZmIG9uZXMgdG8uCisJCSAqLworCQlp
ZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB7CisJCQlpbnAt
PnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJCWlucC0+c2N0cF9m
bGFncyB8PSBTQ1RQX1BDQl9GTEFHU19XQVNfQ09OTkVDVEVEOworCQkJaWYgKHNvKSB7CisJCQkJ
U09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJCQlpZiAoc28tPnNvX3Jjdi5zYl9jYyA9PSAw
KSB7CisJCQkJCXNvLT5zb19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElORyB8CisJCQkJCQkJICBT
U19JU0RJU0NPTk5FQ1RJTkcgfAorCQkJCQkJCSAgU1NfSVNDT05GSVJNSU5HIHwKKwkJCQkJCQkg
IFNTX0lTQ09OTkVDVEVEKTsKKwkJCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJc29j
YW50cmN2bW9yZShzbyk7CisjZWxzZQorCQkJCXNvY2FudHJjdm1vcmVfbG9ja2VkKHNvKTsKKyNl
bmRpZgorCQkJCXNvY2FudHNlbmRtb3JlKHNvKTsKKwkJCQlzY3RwX3Nvd3dha2V1cChpbnAsIHNv
KTsKKwkJCQlzY3RwX3Nvcndha2V1cChpbnAsIHNvKTsKKwkJCQlTQ1RQX1NPV0FLRVVQKHNvKTsK
KwkJCX0KKwkJfQorCX0KKworCS8qIE1ha2UgaXQgaW52YWxpZCB0b28sIHRoYXQgd2F5IGlmIGl0
cworCSAqIGFib3V0IHRvIHJ1biBpdCB3aWxsIGFib3J0IGFuZCByZXR1cm4uCisJICovCisJLyog
cmUtaW5jcmVtZW50IHRoZSBsb2NrICovCisJaWYgKGZyb21faW5wY2JmcmVlID09IFNDVFBfTk9S
TUFMX1BST0MpIHsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJ
fQorCWlmIChzdGNiLT5hc29jLnJlZmNudCkgeworCQlzdGNiLT5hc29jLnN0YXRlICY9IH5TQ1RQ
X1NUQVRFX0lOX0FDQ0VQVF9RVUVVRTsKKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZ
UEVfQVNPQ0tJTEwsIGlucCwgc3RjYiwgTlVMTCk7CisJCWlmIChmcm9tX2lucGNiZnJlZSA9PSBT
Q1RQX05PUk1BTF9QUk9DKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKTsKKwkJCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCXJldHVy
biAoMCk7CisJfQorCWFzb2MtPnN0YXRlID0gMDsKKwlpZiAoaW5wLT5zY3RwX3RjYmhhc2gpIHsK
KwkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2JoYXNoKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2Mu
aW5fYXNvY2lkX2hhc2gpIHsKKwkJTElTVF9SRU1PVkUoc3RjYiwgc2N0cF90Y2Jhc29jaWRoYXNo
KTsKKwl9CisJLyogTm93IGxldHMgcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3Qgb2YgQUxMIGFzc29j
aWF0aW9ucyBpbiB0aGUgRVAgKi8KKwlMSVNUX1JFTU9WRShzdGNiLCBzY3RwX3RjYmxpc3QpOwor
CWlmIChmcm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCVNDVFBfSU5QX0lO
Q1JfUkVGKGlucCk7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwl9CisJLyogcHVsbCBmcm9t
IHZ0YWcgaGFzaCAqLworCUxJU1RfUkVNT1ZFKHN0Y2IsIHNjdHBfYXNvY3MpOworCXNjdHBfYWRk
X3Z0YWdfdG9fdGltZXdhaXQoYXNvYy0+bXlfdnRhZywgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0
YWdfdGltZV93YWl0KSwKKwkJCQkgIGlucC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQpOworCisJ
LyogTm93IHJlc3RvcCB0aGUgdGltZXJzIHRvIGJlIHN1cmUKKwkgKiB0aGlzIGlzIHBhcmFub2lh
IGF0IGlzIGZpbmVzdCEKKwkgKi8KKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPnN0
cnJlc2V0X3RpbWVyLnRpbWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRh
Y2tfdGltZXIudGltZXIpOworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+c3RycmVz
ZXRfdGltZXIudGltZXIpOworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXNjb25m
X3RpbWVyLnRpbWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPnNodXRfZ3Vh
cmRfdGltZXIudGltZXIpOworCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+YXV0b2Ns
b3NlX3RpbWVyLnRpbWVyKTsKKwkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmRlbGF5
ZWRfZXZlbnRfdGltZXIudGltZXIpOworCVRBSUxRX0ZPUkVBQ0gobmV0LCAmYXNvYy0+bmV0cywg
c2N0cF9uZXh0KSB7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5yeHRfdGltZXIu
dGltZXIpOworCQkodm9pZClTQ1RQX09TX1RJTUVSX1NUT1AoJm5ldC0+cG10dV90aW1lci50aW1l
cik7CisJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmbmV0LT5oYl90aW1lci50aW1lcik7CisJ
fQorCisJYXNvYy0+c3RycmVzZXRfdGltZXIudHlwZSA9IFNDVFBfVElNRVJfVFlQRV9OT05FOwor
CS8qCisJICogVGhlIGNodW5rIGxpc3RzIGFuZCBzdWNoIFNIT1VMRCBiZSBlbXB0eSBidXQgd2Ug
Y2hlY2sgdGhlbSBqdXN0CisJICogaW4gY2FzZS4KKwkgKi8KKwkvKiBhbnl0aGluZyBvbiB0aGUg
d2hlZWwgbmVlZHMgdG8gYmUgcmVtb3ZlZCAqLworCWZvciAoaSA9IDA7IGkgPCBhc29jLT5zdHJl
YW1vdXRjbnQ7IGkrKykgeworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpvdXRzOworCisJCW91
dHMgPSAmYXNvYy0+c3RybW91dFtpXTsKKwkJLyogbm93IGNsZWFuIHVwIGFueSBjaHVua3MgaGVy
ZSAqLworCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwgbnNw
KSB7CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAxKTsK
KwkJCVRBSUxRX1JFTU9WRSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCXN0Y2ItPmFz
b2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2MsIG91
dHMsIHNwLCAwKTsKKwkJCXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFzb2MsIHNwKTsKKwkJ
CWlmIChzcC0+ZGF0YSkgeworCQkJCWlmIChzbykgeworCQkJCQkvKiBTdGlsbCBhbiBvcGVuIHNv
Y2tldCAtIHJlcG9ydCAqLworCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU1BFQ0lB
TF9TUF9GQUlMLCBzdGNiLAorCQkJCQkgICAgICAgICAgICAgICAgMCwgKHZvaWQgKilzcCwgU0NU
UF9TT19MT0NLRUQpOworCQkJCX0KKwkJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2Zy
ZWVtKHNwLT5kYXRhKTsKKwkJCQkJc3AtPmRhdGEgPSBOVUxMOworCQkJCQlzcC0+dGFpbF9tYnVm
ID0gTlVMTDsKKwkJCQkJc3AtPmxlbmd0aCA9IDA7CisJCQkJfQorCQkJfQorCQkJaWYgKHNwLT5u
ZXQpIHsKKwkJCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7CisJCQkJc3AtPm5ldCA9
IE5VTEw7CisJCQl9CisJCQlzY3RwX2ZyZWVfYV9zdHJtb3Eoc3RjYiwgc3AsIFNDVFBfU09fTE9D
S0VEKTsKKwkJfQorCX0KKwkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCVRBSUxRX0ZPUkVB
Q0hfU0FGRShzdHJyc3QsICZhc29jLT5yZXNldEhlYWQsIG5leHRfcmVzcCwgbnN0cnJzdCkgewor
CQlUQUlMUV9SRU1PVkUoJmFzb2MtPnJlc2V0SGVhZCwgc3RycnN0LCBuZXh0X3Jlc3ApOworCQlT
Q1RQX0ZSRUUoc3RycnN0LCBTQ1RQX01fU1RSRVNFVCk7CisJfQorCVRBSUxRX0ZPUkVBQ0hfU0FG
RShzcSwgJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIG5leHQsIG5zcSkgeworCQlUQUlMUV9S
RU1PVkUoJmFzb2MtPnBlbmRpbmdfcmVwbHlfcXVldWUsIHNxLCBuZXh0KTsKKwkJaWYgKHNxLT5k
YXRhKSB7CisJCQlzY3RwX21fZnJlZW0oc3EtPmRhdGEpOworCQkJc3EtPmRhdGEgPSBOVUxMOwor
CQl9CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzcS0+d2hvRnJvbSk7CisJCXNxLT53aG9Gcm9t
ID0gTlVMTDsKKwkJc3EtPnN0Y2IgPSBOVUxMOworCQkvKiBGcmVlIHRoZSBjdGwgZW50cnkgKi8K
KwkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgc3EpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1P
UlkqLworCX0KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAmYXNvYy0+ZnJlZV9jaHVua3MsIHNj
dHBfbmV4dCwgbmNoaykgeworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmZyZWVfY2h1bmtzLCBjaGss
IHNjdHBfbmV4dCk7CisJCWlmIChjaGstPmRhdGEpIHsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRh
dGEpOworCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVm
KQorCQkJc2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9T
T19MT0NLRUQpOworCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9jaHVu
ayksIGNoayk7CisJCVNDVFBfREVDUl9DSEtfQ09VTlQoKTsKKwkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmU0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKSwgMSk7CisJCWFzb2MtPmZyZWVfY2h1
bmtfY250LS07CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJfQorCS8qIHBlbmRpbmcg
c2VuZCBxdWV1ZSBTSE9VTEQgYmUgZW1wdHkgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoY2hrLCAm
YXNvYy0+c2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCWlmIChhc29jLT5zdHJtb3V0
W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJYXNvYy0+c3Ry
bW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFS
SUFOVFMKKwkJfSBlbHNlIHsKKwkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhlIHF1ZXVlcyBmb3Ig
c2lkICV1LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsKKyNlbmRpZgorCQl9CisJCVRBSUxRX1JFTU9W
RSgmYXNvYy0+c2VuZF9xdWV1ZSwgY2hrLCBzY3RwX25leHQpOworCQlpZiAoY2hrLT5kYXRhKSB7
CisJCQlpZiAoc28pIHsKKwkJCQkvKiBTdGlsbCBhIHNvY2tldD8gKi8KKwkJCQlzY3RwX3VscF9u
b3RpZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJCQkJICAgICAgICAgICAg
ICAgIDAsIGNoaywgU0NUUF9TT19MT0NLRUQpOworCQkJfQorCQkJaWYgKGNoay0+ZGF0YSkgewor
CQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQl9
CisJCX0KKwkJaWYgKGNoay0+aG9sZHNfa2V5X3JlZikKKwkJCXNjdHBfYXV0aF9rZXlfcmVsZWFz
ZShzdGNiLCBjaGstPmF1dGhfa2V5aWQsIFNDVFBfU09fTE9DS0VEKTsKKwkJaWYgKGNoay0+d2hv
VG8pIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsKKwkJCWNoay0+d2hv
VG8gPSBOVUxMOworCQl9CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25l
X2NodW5rKSwgY2hrKTsKKwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkvKnNhX2lnbm9yZSBG
UkVFRF9NRU1PUlkqLworCX0KKwkvKiBzZW50IHF1ZXVlIFNIT1VMRCBiZSBlbXB0eSAqLworCVRB
SUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQsIG5jaGsp
IHsKKwkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX05SX0FDS0VEKSB7CisJCQlpZiAo
YXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcyA+IDApIHsK
KwkJCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07
CisjaWZkZWYgSU5WQVJJQU5UUworCQkJfSBlbHNlIHsKKwkJCQlwYW5pYygiTm8gY2h1bmtzIG9u
IHRoZSBxdWV1ZXMgZm9yIHNpZCAldS4iLCBjaGstPnJlYy5kYXRhLnNpZCk7CisjZW5kaWYKKwkJ
CX0KKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNlbnRfcXVldWUsIGNoaywgc2N0cF9uZXh0
KTsKKwkJaWYgKGNoay0+ZGF0YSkgeworCQkJaWYgKHNvKSB7CisJCQkJLyogU3RpbGwgYSBzb2Nr
ZXQ/ICovCisJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1NFTlRfREdfRkFJTCwgc3Rj
YiwKKwkJCQkgICAgICAgICAgICAgICAgMCwgY2hrLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQl9CisJ
CQlpZiAoY2hrLT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKGNoay0+ZGF0YSk7CisJCQkJY2hr
LT5kYXRhID0gTlVMTDsKKwkJCX0KKwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJ
c2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NL
RUQpOworCQlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCVNDVFBfWk9ORV9G
UkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgY2hrKTsKKwkJU0NUUF9ERUNSX0NI
S19DT1VOVCgpOworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKyNpZmRlZiBJTlZB
UklBTlRTCisJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsK
KwkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJ
cGFuaWMoIiV1IGNodW5rcyBsZWZ0IGZvciBzdHJlYW0gJXUuIiwgc3RjYi0+YXNvYy5zdHJtb3V0
W2ldLmNodW5rc19vbl9xdWV1ZXMsIGkpOworCQl9CisJfQorI2VuZGlmCisJLyogY29udHJvbCBx
dWV1ZSBNQVkgbm90IGJlIGVtcHR5ICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2Mt
PmNvbnRyb2xfc2VuZF9xdWV1ZSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCVRBSUxRX1JFTU9WRSgm
YXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWlmIChjaGstPmRh
dGEpIHsKKwkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEpOworCQkJY2hrLT5kYXRhID0gTlVMTDsK
KwkJfQorCQlpZiAoY2hrLT5ob2xkc19rZXlfcmVmKQorCQkJc2N0cF9hdXRoX2tleV9yZWxlYXNl
KHN0Y2IsIGNoay0+YXV0aF9rZXlpZCwgU0NUUF9TT19MT0NLRUQpOworCQlzY3RwX2ZyZWVfcmVt
b3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlw
aV96b25lX2NodW5rKSwgY2hrKTsKKwkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOworCQkvKnNhX2ln
bm9yZSBGUkVFRF9NRU1PUlkqLworCX0KKwkvKiBBU0NPTkYgcXVldWUgTUFZIG5vdCBiZSBlbXB0
eSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5hc2NvbmZfc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0LCBuY2hrKSB7CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+YXNjb25mX3NlbmRfcXVl
dWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJaWYgKGNoay0+ZGF0YSkgeworCQkJc2N0cF9tX2ZyZWVt
KGNoay0+ZGF0YSk7CisJCQljaGstPmRhdGEgPSBOVUxMOworCQl9CisJCWlmIChjaGstPmhvbGRz
X2tleV9yZWYpCisJCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2Uoc3RjYiwgY2hrLT5hdXRoX2tleWlk
LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjaGstPndob1RvKTsK
KwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBjaGspOwor
CQlTQ1RQX0RFQ1JfQ0hLX0NPVU5UKCk7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSovCisJ
fQorCWlmIChhc29jLT5tYXBwaW5nX2FycmF5KSB7CisJCVNDVFBfRlJFRShhc29jLT5tYXBwaW5n
X2FycmF5LCBTQ1RQX01fTUFQKTsKKwkJYXNvYy0+bWFwcGluZ19hcnJheSA9IE5VTEw7CisJfQor
CWlmIChhc29jLT5ucl9tYXBwaW5nX2FycmF5KSB7CisJCVNDVFBfRlJFRShhc29jLT5ucl9tYXBw
aW5nX2FycmF5LCBTQ1RQX01fTUFQKTsKKwkJYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9IE5VTEw7
CisJfQorCS8qIHRoZSBzdHJlYW0gb3V0cyAqLworCWlmIChhc29jLT5zdHJtb3V0KSB7CisJCVND
VFBfRlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQlhc29jLT5zdHJtb3V0ID0g
TlVMTDsKKwl9CisJYXNvYy0+c3RybV9yZWFsb3V0c2l6ZSA9IGFzb2MtPnN0cmVhbW91dGNudCA9
IDA7CisJaWYgKGFzb2MtPnN0cm1pbikgeworCQlmb3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFt
aW5jbnQ7IGkrKykgeworCQkJc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RjYiwgJmFzb2MtPnN0cm1p
bltpXS5pbnF1ZXVlKTsKKwkJCXNjdHBfY2xlYW5fdXBfc3RyZWFtKHN0Y2IsICZhc29jLT5zdHJt
aW5baV0udW5vX2lucXVldWUpOworCQl9CisJCVNDVFBfRlJFRShhc29jLT5zdHJtaW4sIFNDVFBf
TV9TVFJNSSk7CisJCWFzb2MtPnN0cm1pbiA9IE5VTEw7CisJfQorCWFzb2MtPnN0cmVhbWluY250
ID0gMDsKKwlUQUlMUV9GT1JFQUNIX1NBRkUobmV0LCAmYXNvYy0+bmV0cywgc2N0cF9uZXh0LCBu
bmV0KSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlpZiAoU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50
X3JhZGRyKSA9PSAwKSB7CisJCQlwYW5pYygibm8gbmV0J3MgbGVmdCBhbGxvYydlZCwgb3IgbGlz
dCBwb2ludHMgdG8gaXRzZWxmIik7CisJCX0KKyNlbmRpZgorCQlUQUlMUV9SRU1PVkUoJmFzb2Mt
Pm5ldHMsIG5ldCwgc2N0cF9uZXh0KTsKKwkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CisJ
fQorCUxJU1RfRk9SRUFDSF9TQUZFKGxhZGRyLCAmYXNvYy0+c2N0cF9yZXN0cmljdGVkX2FkZHJz
LCBzY3RwX254dF9hZGRyLCBuYWRkcikgeworCQkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLwor
CQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7CisJfQorCisJLyogcGVuZGluZyBhc2NvbmYgKGFk
ZHJlc3MpIHBhcmFtZXRlcnMgKi8KKwlUQUlMUV9GT1JFQUNIX1NBRkUoYXBhcmFtLCAmYXNvYy0+
YXNjb25mX3F1ZXVlLCBuZXh0LCBuYXBhcmFtKSB7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9S
WSovCisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+YXNjb25mX3F1ZXVlLCBhcGFyYW0sIG5leHQpOwor
CQlTQ1RQX0ZSRUUoYXBhcmFtLFNDVFBfTV9BU0NfQUREUik7CisJfQorCVRBSUxRX0ZPUkVBQ0hf
U0FGRShhYWNrLCAmYXNvYy0+YXNjb25mX2Fja19zZW50LCBuZXh0LCBuYWFjaykgeworCQkvKnNh
X2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCQlUQUlMUV9SRU1PVkUoJmFzb2MtPmFzY29uZl9hY2tf
c2VudCwgYWFjaywgbmV4dCk7CisJCWlmIChhYWNrLT5kYXRhICE9IE5VTEwpIHsKKwkJCXNjdHBf
bV9mcmVlbShhYWNrLT5kYXRhKTsKKwkJfQorCQlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5G
TyhpcGlfem9uZV9hc2NvbmZfYWNrKSwgYWFjayk7CisJfQorCS8qIGNsZWFuIHVwIGF1dGggc3R1
ZmYgKi8KKwlpZiAoYXNvYy0+bG9jYWxfaG1hY3MpCisJCXNjdHBfZnJlZV9obWFjbGlzdChhc29j
LT5sb2NhbF9obWFjcyk7CisJaWYgKGFzb2MtPnBlZXJfaG1hY3MpCisJCXNjdHBfZnJlZV9obWFj
bGlzdChhc29jLT5wZWVyX2htYWNzKTsKKworCWlmIChhc29jLT5sb2NhbF9hdXRoX2NodW5rcykK
KwkJc2N0cF9mcmVlX2NodW5rbGlzdChhc29jLT5sb2NhbF9hdXRoX2NodW5rcyk7CisJaWYgKGFz
b2MtPnBlZXJfYXV0aF9jaHVua3MpCisJCXNjdHBfZnJlZV9jaHVua2xpc3QoYXNvYy0+cGVlcl9h
dXRoX2NodW5rcyk7CisKKwlzY3RwX2ZyZWVfYXV0aGluZm8oJmFzb2MtPmF1dGhpbmZvKTsKKwor
CUxJU1RfRk9SRUFDSF9TQUZFKHNoYXJlZF9rZXksICZhc29jLT5zaGFyZWRfa2V5cywgbmV4dCwg
bnNoYXJlZF9rZXkpIHsKKwkJTElTVF9SRU1PVkUoc2hhcmVkX2tleSwgbmV4dCk7CisJCXNjdHBf
ZnJlZV9zaGFyZWRrZXkoc2hhcmVkX2tleSk7CisJCS8qc2FfaWdub3JlIEZSRUVEX01FTU9SWSov
CisJfQorCisJLyogSW5zZXJ0IG5ldyBpdGVtcyBoZXJlIDo+ICovCisKKwkvKiBHZXQgcmlkIG9m
IExPQ0sgKi8KKwlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJU0NUUF9UQ0JfTE9DS19ERVNUUk9Z
KHN0Y2IpOworCVNDVFBfVENCX1NFTkRfTE9DS19ERVNUUk9ZKHN0Y2IpOworCWlmIChmcm9tX2lu
cGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCVNDVFBfSU5QX0lORk9fV1VOTE9DSygp
OworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgLyog
VEVNUCBDT0RFICovCisJc3RjYi0+ZnJlZWRfZnJvbV93aGVyZSA9IGZyb21fbG9jYXRpb247Cisj
ZW5kaWYKKyNpZmRlZiBTQ1RQX1RSQUNLX0ZSRUVEX0FTT0NTCisJaWYgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCS8qIG5vdyBjbGVhbiB1cCB0aGUg
dGFzb2MgaXRzZWxmICovCisJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25l
X2Fzb2MpLCBzdGNiKTsKKwkJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKwl9IGVsc2UgeworCQlM
SVNUX0lOU0VSVF9IRUFEKCZpbnAtPnNjdHBfYXNvY19mcmVlX2xpc3QsIHN0Y2IsIHNjdHBfdGNi
bGlzdCk7CisJfQorI2Vsc2UKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9u
ZV9hc29jKSwgc3RjYik7CisJU0NUUF9ERUNSX0FTT0NfQ09VTlQoKTsKKyNlbmRpZgorCWlmIChm
cm9tX2lucGNiZnJlZSA9PSBTQ1RQX05PUk1BTF9QUk9DKSB7CisJCWlmIChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJLyogSWYgaXRzIE5PVCB0aGUg
aW5wX2ZyZWUgY2FsbGluZyB1cyBBTkQKKwkJCSAqIHNjdHBfY2xvc2UgYXMgYmVlbiBjYWxsZWQs
IHdlCisJCQkgKiBjYWxsIGJhY2suLi4KKwkJCSAqLworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJLyogVGhpcyB3aWxsIHN0YXJ0IHRoZSBraWxsIHRpbWVyIChpZiB3ZSBhcmUKKwkJCSAq
IHRoZSBsYXN0IG9uZSkgc2luY2Ugd2UgaG9sZCBhbiBpbmNyZW1lbnQgeWV0LiBCdXQKKwkJCSAq
IHRoaXMgaXMgdGhlIG9ubHkgc2FmZSB3YXkgdG8gZG8gdGhpcworCQkJICogc2luY2Ugb3RoZXJ3
aXNlIGlmIHRoZSBzb2NrZXQgY2xvc2VzCisJCQkgKiBhdCB0aGUgc2FtZSB0aW1lIHdlIGFyZSBo
ZXJlIHdlIG1pZ2h0CisJCQkgKiBjb2xsaWRlIGluIHRoZSBjbGVhbnVwLgorCQkJICovCisJCQlz
Y3RwX2lucGNiX2ZyZWUoaW5wLAorCQkJCQlTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9HUkFDRUZVTF9D
TE9TRSwKKwkJCQkJU0NUUF9DQUxMRURfRElSRUNUTFlfTk9DTVBTRVQpOworCQkJU0NUUF9JTlBf
REVDUl9SRUYoaW5wKTsKKwkJCWdvdG8gb3V0X29mOworCQl9IGVsc2UgeworCQkJLyogVGhlIHNv
Y2tldCBpcyBzdGlsbCBvcGVuLiAqLworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQor
CX0KKwlpZiAoZnJvbV9pbnBjYmZyZWUgPT0gU0NUUF9OT1JNQUxfUFJPQykgeworCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJfQorIG91dF9vZjoKKwkvKiBkZXN0cm95ZWQgdGhlIGFzb2MgKi8K
KyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDEx
KTsKKyNlbmRpZgorCXJldHVybiAoMSk7Cit9CisKKworCisvKgorICogZGV0ZXJtaW5lIGlmIGEg
ZGVzdGluYXRpb24gaXMgInJlYWNoYWJsZSIgYmFzZWQgdXBvbiB0aGUgYWRkcmVzc2VzIGJvdW5k
CisgKiB0byB0aGUgY3VycmVudCBlbmRwb2ludCAoZS5nLiBvbmx5IHY0IG9yIHY2IGN1cnJlbnRs
eSBib3VuZCkKKyAqLworLyoKKyAqIEZJWDogaWYgd2UgYWxsb3cgYXNzb2MtbGV2ZWwgYmluZHgo
KSwgdGhlbiB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkIHRvIHVzZQorICogYXNzb2MgbGV2ZWwgdjQv
djYgZmxhZ3MsIGFzIHRoZSBhc3NvYyAqbWF5KiBub3QgaGF2ZSB0aGUgc2FtZSBhZGRyZXNzCisg
KiB0eXBlcyBib3VuZCBhcyBpdHMgZW5kcG9pbnQKKyAqLworaW50CitzY3RwX2Rlc3RpbmF0aW9u
X2lzX3JlYWNoYWJsZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqZGVz
dGFkZHIpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlpbnQgYW5zd2VyOworCisJLyoK
KwkgKiBObyBsb2NrcyBoZXJlLCB0aGUgVENCLCBpbiBhbGwgY2FzZXMgaXMgYWxyZWFkeSBsb2Nr
ZWQgYW5kIGFuCisJICogYXNzb2MgaXMgdXAuIFRoZXJlIGlzIGVpdGhlciBhIElOUCBsb2NrIGJ5
IHRoZSBjYWxsZXIgYXBwbGllZCAoaW4KKwkgKiBhc2NvbmYgY2FzZSB3aGVuIGRlbGV0aW5nIGFu
IGFkZHJlc3MpIG9yIE5PVCBpbiB0aGUgSEIgY2FzZSwKKwkgKiBob3dldmVyIGlmIEhCIHRoZW4g
dGhlIElOUCBpbmNyZW1lbnQgaXMgdXAgYW5kIHRoZSBJTlAgd2lsbCBub3QKKwkgKiBiZSByZW1v
dmVkIChvbiB0b3Agb2YgdGhlIGZhY3QgdGhhdCB3ZSBoYXZlIGEgVENCIGxvY2spLiBTbyB3ZQor
CSAqIG9ubHkgd2FudCB0byByZWFkIHRoZSBzY3RwX2ZsYWdzLCB3aGljaCBpcyBlaXRoZXIgYm91
bmQtYWxsIG9yCisJICogbm90Li4gbm8gcHJvdGVjdGlvbiBuZWVkZWQgc2luY2Ugb25jZSBhbiBh
c3NvYyBpcyB1cCB5b3UgY2FuJ3QgYmUKKwkgKiBjaGFuZ2luZyB5b3VyIGJpbmRpbmcuCisJICov
CisJaW5wID0gc3RjYi0+c2N0cF9lcDsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRBTEwpIHsKKwkJLyogaWYgYm91bmQgYWxsLCBkZXN0aW5hdGlvbiBpcyBub3Qg
cmVzdHJpY3RlZCAqLworCQkvKgorCQkgKiBSUlM6IFF1ZXN0aW9uIGR1cmluZyBsb2NrIHdvcms6
IElzIHRoaXMgY29ycmVjdD8gSWYgeW91CisJCSAqIGFyZSBib3VuZC1hbGwgeW91IHN0aWxsIG1p
Z2h0IG5lZWQgdG8gb2JleSB0aGUgVjQtLVY2CisJCSAqIGZsYWdzPz8/IElNTyB0aGlzIGJvdW5k
LWFsbCBzdHVmZiBuZWVkcyB0byBiZSByZW1vdmVkIQorCQkgKi8KKwkJcmV0dXJuICgxKTsKKwl9
CisJLyogTk9URTogYWxsICJzY29wZSIgY2hlY2tzIGFyZSBkb25lIHdoZW4gbG9jYWwgYWRkcmVz
c2VzIGFyZSBhZGRlZCAqLworCXN3aXRjaCAoZGVzdGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVm
IElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pKQorCQlhbnN3ZXIgPSBpbnAtPmlucF92ZmxhZyAmIElOUF9JUFY2OworI2Vsc2UK
KwkJYW5zd2VyID0gaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2OworI2VuZGlm
CisJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKyNpZiAhKGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2lu
ZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCQlhbnN3ZXIgPSBpbnAtPmlucF92
ZmxhZyAmIElOUF9JUFY0OworI2Vsc2UKKwkJYW5zd2VyID0gaW5wLT5pcF9pbnAuaW5wLmlucF92
ZmxhZyAmIElOUF9JUFY0OworI2VuZGlmCisJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwkJYW5zd2VyID0gaW5wLT5pcF9pbnAuaW5w
LmlucF92ZmxhZyAmIElOUF9DT05OOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8q
IGludmFsaWQgZmFtaWx5LCBzbyBpdCdzIHVucmVhY2hhYmxlICovCisJCWFuc3dlciA9IDA7CisJ
CWJyZWFrOworCX0KKwlyZXR1cm4gKGFuc3dlcik7Cit9CisKKy8qCisgKiB1cGRhdGUgdGhlIGlu
cF92ZmxhZ3Mgb24gYW4gZW5kcG9pbnQKKyAqLworc3RhdGljIHZvaWQKK3NjdHBfdXBkYXRlX2Vw
X3ZmbGFnKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxh
ZGRyOworCisJLyogZmlyc3QgY2xlYXIgdGhlIGZsYWcgKi8KKyNpZiAhKGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pKQorCWlucC0+aW5wX3ZmbGFnID0gMDsKKyNlbHNlCisJaW5w
LT5pcF9pbnAuaW5wLmlucF92ZmxhZyA9IDA7CisjZW5kaWYKKwkvKiBzZXQgdGhlIGZsYWcgYmFz
ZWQgb24gYWRkcmVzc2VzIG9uIHRoZSBlcCBsaXN0ICovCisJTElTVF9GT1JFQUNIKGxhZGRyLCAm
aW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9
PSBOVUxMKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIiVzOiBOVUxMIGlmYVxuIiwK
KwkJCQlfX2Z1bmNfXyk7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChsYWRkci0+aWZhLT5s
b2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkgeworCQkJY29udGludWU7CisJCX0K
KwkJc3dpdGNoIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElO
RVQ2CisJCWNhc2UgQUZfSU5FVDY6CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKSkKKwkJCWlucC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY2OworI2Vsc2UKKwkJCWlucC0+
aXBfaW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisjZW5kaWYKKwkJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisjaWYgIShkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKSkKKwkJCWlucC0+aW5wX3ZmbGFnIHw9IElOUF9JUFY0OworI2Vs
c2UKKwkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZW5kaWYKKwkJ
CWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NP
Tk46CisJCQlpbnAtPmlwX2lucC5pbnAuaW5wX3ZmbGFnIHw9IElOUF9DT05OOworCQkJYnJlYWs7
CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKgorICogQWRk
IHRoZSBhZGRyZXNzIHRvIHRoZSBlbmRwb2ludCBsb2NhbCBhZGRyZXNzIGxpc3QgVGhlcmUgaXMg
bm90aGluZyB0byBiZQorICogZG9uZSBpZiB3ZSBhcmUgYm91bmQgdG8gYWxsIGFkZHJlc3Nlcwor
ICovCit2b2lkCitzY3RwX2FkZF9sb2NhbF9hZGRyX2VwKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX2lmYSAqaWZhLCB1aW50MzJfdCBhY3Rpb24pCit7CisJc3RydWN0IHNjdHBf
bGFkZHIgKmxhZGRyOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgZm5kLCBlcnJvciA9
IDA7CisKKwlmbmQgPSAwOworCisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0JPVU5EQUxMKSB7CisJCS8qIFlvdSBhcmUgYWxyZWFkeSBib3VuZCB0byBhbGwuIFlvdSBoYXZl
IGl0IGFscmVhZHkgKi8KKwkJcmV0dXJuOworCX0KKyNpZmRlZiBJTkVUNgorCWlmIChpZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWlmIChpZmEtPmxvY2FsaWZhX2Zs
YWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFCTEUpIHsKKwkJCS8qIENhbid0IGJpbmQgYSBub24t
dXNlYWJsZSBhZGRyLiAqLworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyogZmlyc3Qs
IGlzIGl0IGFscmVhZHkgcHJlc2VudD8gKi8KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNj
dHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCWlmIChsYWRkci0+aWZhID09IGlmYSkg
eworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZuZCA9PSAwKSB7CisJ
CS8qIE5vdCBpbiB0aGUgZXAgbGlzdCAqLworCQllcnJvciA9IHNjdHBfaW5zZXJ0X2xhZGRyKCZp
bnAtPnNjdHBfYWRkcl9saXN0LCBpZmEsIGFjdGlvbik7CisJCWlmIChlcnJvciAhPSAwKQorCQkJ
cmV0dXJuOworCQlpbnAtPmxhZGRyX2NvdW50Kys7CisJCS8qIHVwZGF0ZSBpbnBfdmZsYWcgZmxh
Z3MgKi8KKwkJc3dpdGNoIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5F
VDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pKQorCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisjZWxzZQorCQkJaW5wLT5p
cF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNjsKKyNlbmRpZgorCQkJYnJlYWs7CisjZW5k
aWYKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pKQorCQkJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZWxz
ZQorCQkJaW5wLT5pcF9pbnAuaW5wLmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKyNlbmRpZgorCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNhc2UgQUZfQ09O
TjoKKwkJCWlucC0+aXBfaW5wLmlucC5pbnBfdmZsYWcgfD0gSU5QX0NPTk47CisJCQlicmVhazsK
KyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJTElTVF9GT1JFQUNIKHN0Y2Is
ICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCXNjdHBfYWRkX2xvY2Fs
X2FkZHJfcmVzdHJpY3RlZChzdGNiLCBpZmEpOworCQl9CisJfQorCXJldHVybjsKK30KKworCisv
KgorICogc2VsZWN0IGEgbmV3IChob3BlZnVsbHkgcmVhY2hhYmxlKSBkZXN0aW5hdGlvbiBuZXQg
KHNob3VsZCBvbmx5IGJlIHVzZWQKKyAqIHdoZW4gd2UgZGVsZXRlZCBhbiBlcCBhZGRyIHRoYXQg
aXMgdGhlIG9ubHkgdXNhYmxlIHNvdXJjZSBhZGRyZXNzIHRvIHJlYWNoCisgKiB0aGUgZGVzdGlu
YXRpb24gbmV0KQorICovCitzdGF0aWMgdm9pZAorc2N0cF9zZWxlY3RfcHJpbWFyeV9kZXN0aW5h
dGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0Owor
CisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkv
KiBmb3Igbm93LCB3ZSdsbCBqdXN0IHBpY2sgdGhlIGZpcnN0IHJlYWNoYWJsZSBvbmUgd2UgZmlu
ZCAqLworCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKQorCQkJ
Y29udGludWU7CisJCWlmIChzY3RwX2Rlc3RpbmF0aW9uX2lzX3JlYWNoYWJsZShzdGNiLAorCQkg
ICAgKHN0cnVjdCBzb2NrYWRkciAqKSZuZXQtPnJvLl9sX2FkZHIpKSB7CisJCQkvKiBmb3VuZCBh
IHJlYWNoYWJsZSBkZXN0aW5hdGlvbiAqLworCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uID0gbmV0OworCQl9CisJfQorCS8qIEkgY2FuJ3QgdGhlcmUgZnJvbSBoZXJlISAuLi53ZSdy
ZSBnb25uYSBkaWUgc2hvcnRseS4uLiAqLworfQorCisKKy8qCisgKiBEZWxldGUgdGhlIGFkZHJl
c3MgZnJvbSB0aGUgZW5kcG9pbnQgbG9jYWwgYWRkcmVzcyBsaXN0LiBUaGVyZSBpcyBub3RoaW5n
CisgKiB0byBiZSBkb25lIGlmIHdlIGFyZSBib3VuZCB0byBhbGwgYWRkcmVzc2VzCisgKi8KK3Zv
aWQKK3NjdHBfZGVsX2xvY2FsX2FkZHJfZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0
IHNjdHBfaWZhICppZmEpCit7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCWludCBmbmQ7
CisKKwlmbmQgPSAwOworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VO
REFMTCkgeworCQkvKiBZb3UgYXJlIGFscmVhZHkgYm91bmQgdG8gYWxsLiBZb3UgaGF2ZSBpdCBh
bHJlYWR5ICovCisJCXJldHVybjsKKwl9CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3Rw
X2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsK
KwkJCWZuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZm5kICYmIChpbnAtPmxhZGRy
X2NvdW50IDwgMikpIHsKKwkJLyogY2FuJ3QgZGVsZXRlIHVubGVzcyB0aGVyZSBhcmUgYXQgTEVB
U1QgMiBhZGRyZXNzZXMgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoZm5kKSB7CisJCS8qCisJCSAq
IGNsZWFuIHVwIGFueSB1c2Ugb2YgdGhpcyBhZGRyZXNzIGdvIHRocm91Z2ggb3VyCisJCSAqIGFz
c29jaWF0aW9ucyBhbmQgY2xlYXIgYW55IGxhc3RfdXNlZF9hZGRyZXNzIHRoYXQgbWF0Y2gKKwkJ
ICogdGhpcyBvbmUgZm9yIGVhY2ggYXNzb2MsIHNlZSBpZiBhIG5ldyBwcmltYXJ5X2Rlc3RpbmF0
aW9uCisJCSAqIGlzIG5lZWRlZAorCQkgKi8KKwkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJ
CS8qIGNsZWFuIHVwICJuZXh0X2FkZHJfdG91c2UiICovCisJCWlmIChpbnAtPm5leHRfYWRkcl90
b3VzZSA9PSBsYWRkcikKKwkJCS8qIGRlbGV0ZSB0aGlzIGFkZHJlc3MgKi8KKwkJCWlucC0+bmV4
dF9hZGRyX3RvdXNlID0gTlVMTDsKKworCQkvKiBjbGVhbiB1cCAibGFzdF91c2VkX2FkZHJlc3Mi
ICovCisJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2Js
aXN0KSB7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCVNDVFBfVENCX0xPQ0soc3Rj
Yik7CisJCQlpZiAoc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVzcyA9PSBsYWRkcikKKwkJCQkv
KiBkZWxldGUgdGhpcyBhZGRyZXNzICovCisJCQkJc3RjYi0+YXNvYy5sYXN0X3VzZWRfYWRkcmVz
cyA9IE5VTEw7CisJCQkvKiBOb3cgc3BpbiB0aHJvdWdoIGFsbCB0aGUgbmV0cyBhbmQgcHVyZ2Ug
YW55IHJlZiB0byBsYWRkciAqLworCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5l
dHMsIHNjdHBfbmV4dCkgeworCQkJCWlmIChuZXQtPnJvLl9zX2FkZHIgPT0gbGFkZHItPmlmYSkg
eworCQkJCQkvKiBZZXAsIHB1cmdlIHNyYyBhZGRyZXNzIHNlbGVjdGVkICovCisJCQkJCXNjdHBf
cnRlbnRyeV90ICpydDsKKworCQkJCQkvKiBkZWxldGUgdGhpcyBhZGRyZXNzIGlmIGNhY2hlZCAq
LworCQkJCQlydCA9IG5ldC0+cm8ucm9fcnQ7CisJCQkJCWlmIChydCAhPSBOVUxMKSB7CisJCQkJ
CQlSVEZSRUUocnQpOworCQkJCQkJbmV0LT5yby5yb19ydCA9IE5VTEw7CisJCQkJCX0KKwkJCQkJ
c2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJCQluZXQtPnJvLl9zX2FkZHIgPSBO
VUxMOworCQkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJCQl9CisJCQl9CisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0JCS8qIGZvciBlYWNoIHRjYiAqLworCQkvKiByZW1v
dmUgaXQgZnJvbSB0aGUgZXAgbGlzdCAqLworCQlzY3RwX3JlbW92ZV9sYWRkcihsYWRkcik7CisJ
CWlucC0+bGFkZHJfY291bnQtLTsKKwkJLyogdXBkYXRlIGlucF92ZmxhZyBmbGFncyAqLworCQlz
Y3RwX3VwZGF0ZV9lcF92ZmxhZyhpbnApOworCX0KKwlyZXR1cm47Cit9CisKKy8qCisgKiBBZGQg
dGhlIGFkZHJlc3MgdG8gdGhlIFRDQiBsb2NhbCBhZGRyZXNzIHJlc3RyaWN0ZWQgbGlzdC4KKyAq
IFRoaXMgaXMgYSAicGVuZGluZyIgYWRkcmVzcyBsaXN0IChlZy4gYWRkcmVzc2VzIHdhaXRpbmcg
Zm9yIGFuCisgKiBBU0NPTkYtQUNLIHJlc3BvbnNlKSBhbmQgY2Fubm90IGJlIHVzZWQgYXMgYSB2
YWxpZCBzb3VyY2UgYWRkcmVzcy4KKyAqLwordm9pZAorc2N0cF9hZGRfbG9jYWxfYWRkcl9yZXN0
cmljdGVkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfaWZhICppZmEpCit7CisJ
c3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCXN0cnVjdCBzY3RwbGFkZHIgKmxpc3Q7CisKKwkv
KgorCSAqIEFzc3VtZXMgVENCIGlzIGxvY2tlZC4uIGFuZCBwb3NzaWJseSB0aGUgSU5QLiBNYXkg
bmVlZCB0bworCSAqIGNvbmZpcm0vZml4IHRoYXQgaWYgd2UgbmVlZCBpdCBhbmQgaXMgbm90IHRo
ZSBjYXNlLgorCSAqLworCWxpc3QgPSAmc3RjYi0+YXNvYy5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnM7
CisKKyNpZmRlZiBJTkVUNgorCWlmIChpZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lO
RVQ2KSB7CisJCWlmIChpZmEtPmxvY2FsaWZhX2ZsYWdzICYgU0NUUF9BRERSX0lGQV9VTlVTRUFC
TEUpIHsKKwkJCS8qIENhbid0IGJpbmQgYSBub24tZXhpc3RlbnQgYWRkci4gKi8KKwkJCXJldHVy
bjsKKwkJfQorCX0KKyNlbmRpZgorCS8qIGRvZXMgdGhlIGFkZHJlc3MgYWxyZWFkeSBleGlzdD8g
Ki8KKwlMSVNUX0ZPUkVBQ0gobGFkZHIsIGxpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJaWYgKGxh
ZGRyLT5pZmEgPT0gaWZhKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBhZGQgdG8gdGhl
IGxpc3QgKi8KKwkodm9pZClzY3RwX2luc2VydF9sYWRkcihsaXN0LCBpZmEsIDApOworCXJldHVy
bjsKK30KKworLyoKKyAqIFJlbW92ZSBhIGxvY2FsIGFkZHJlc3MgZnJvbSB0aGUgVENCIGxvY2Fs
IGFkZHJlc3MgcmVzdHJpY3RlZCBsaXN0CisgKi8KK3ZvaWQKK3NjdHBfZGVsX2xvY2FsX2FkZHJf
cmVzdHJpY3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2lmYSAqaWZhKQor
eworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwor
CisJLyoKKwkgKiBUaGlzIGlzIGNhbGxlZCBieSBhc2NvbmYgd29yay4gSXQgaXMgYXNzdW1lZCB0
aGF0IGEpIFRoZSBUQ0IgaXMKKwkgKiBsb2NrZWQgYW5kIGIpIFRoZSBJTlAgaXMgbG9ja2VkLiBU
aGlzIGlzIHRydWUgaW4gYXMgbXVjaCBhcyBJIGNhbgorCSAqIHRyYWNlIHRocm91Z2ggdGhlIGVu
dHJ5IGFzY29uZiBjb2RlIHdoZXJlIEkgZGlkIHRoZXNlIGxvY2tzLgorCSAqIEFnYWluLCB0aGUg
QVNDT05GIGNvZGUgaXMgYSBiaXQgZGlmZmVyZW50IGluIHRoYXQgaXQgZG9lcyBsb2NrCisJICog
dGhlIElOUCBkdXJpbmcgaXRzIHdvcmsgb2Z0ZW4gdGltZXMuIFRoaXMgbXVzdCBiZSBzaW5jZSB3
ZSBkb24ndAorCSAqIHdhbnQgb3RoZXIgcHJvYydzIGxvb2tpbmcgdXAgdGhpbmdzIHdoaWxlIHdo
YXQgdGhleSBhcmUgbG9va2luZworCSAqIHVwIGlzIGNoYW5naW5nIDotRAorCSAqLworCisJaW5w
ID0gc3RjYi0+c2N0cF9lcDsKKwkvKiBpZiBzdWJzZXQgYm91bmQgYW5kIGRvbid0IGFsbG93IEFT
Q09ORidzLCBjYW4ndCBkZWxldGUgbGFzdCAqLworCWlmICgoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EQUxMKSA9PSAwKSAmJgorCSAgICBzY3RwX2lzX2ZlYXR1cmVfb2Zm
KGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9fQVNDT05GKSkgeworCQlpZiAoc3RjYi0+c2N0cF9lcC0+
bGFkZHJfY291bnQgPCAyKSB7CisJCQkvKiBjYW4ndCBkZWxldGUgbGFzdCBhZGRyZXNzICovCisJ
CQlyZXR1cm47CisJCX0KKwl9CisJTElTVF9GT1JFQUNIKGxhZGRyLCAmc3RjYi0+YXNvYy5zY3Rw
X3Jlc3RyaWN0ZWRfYWRkcnMsIHNjdHBfbnh0X2FkZHIpIHsKKwkJLyogcmVtb3ZlIHRoZSBhZGRy
ZXNzIGlmIGl0IGV4aXN0cyAqLworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKQorCQkJY29udGlu
dWU7CisJCWlmIChsYWRkci0+aWZhID09IGlmYSkgeworCQkJc2N0cF9yZW1vdmVfbGFkZHIobGFk
ZHIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogYWRkcmVzcyBub3QgZm91bmQhICovCisJ
cmV0dXJuOworfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKy8qCisgKiBUZW1wb3Jhcmls
eSByZW1vdmUgZm9yIF9fQVBQTEVfXyB1bnRpbCB3ZSB1c2UgdGhlIFRpZ2VyIGVxdWl2YWxlbnRz
CisgKi8KKy8qIHN5c2N0bCAqLworc3RhdGljIGludCBzY3RwX21heF9udW1iZXJfb2ZfYXNzb2Mg
PSBTQ1RQX01BWF9OVU1fT0ZfQVNPQzsKK3N0YXRpYyBpbnQgc2N0cF9zY2FsZV91cF9mb3JfYWRk
cmVzcyA9IFNDVFBfU0NBTEVfRk9SX0FERFI7CisjZW5kaWYJCQkJLyogRnJlZUJTRCB8fCBBUFBM
RSAqLworCisKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU0NUUF9NQ09S
RV9JTlBVVCkgJiYgZGVmaW5lZChTTVApCitzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsICpzY3RwX21j
b3JlX3dvcmtlcnMgPSBOVUxMOworaW50ICpzY3RwX2NwdWFycnkgPSBOVUxMOwordm9pZAorc2N0
cF9xdWV1ZV90b19tY29yZShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZiwgaW50IGNwdV90b191c2Up
Cit7CisJLyogUXVldWUgYSBwYWNrZXQgdG8gYSBwcm9jZXNzb3IgZm9yIHRoZSBzcGVjaWZpZWQg
Y29yZSAqLworCXN0cnVjdCBzY3RwX21jb3JlX3F1ZXVlICpxZW50OworCXN0cnVjdCBzY3RwX21j
b3JlX2N0cmwgKndrcTsKKwlpbnQgbmVlZF93YWtlID0gMDsKKwlpZiAoc2N0cF9tY29yZV93b3Jr
ZXJzID09IE5VTEwpIHsKKwkJLyogU29tZXRoaW5nIHdlbnQgd2F5IGJhZCBkdXJpbmcgc2V0dXAg
Ki8KKwkJc2N0cF9pbnB1dF93aXRoX3BvcnQobSwgb2ZmLCAwKTsKKwkJcmV0dXJuOworCX0KKwlT
Q1RQX01BTExPQyhxZW50LCBzdHJ1Y3Qgc2N0cF9tY29yZV9xdWV1ZSAqLAorCQkgICAgKHNpemVv
ZihzdHJ1Y3Qgc2N0cF9tY29yZV9xdWV1ZSkpLAorCQkgICAgU0NUUF9NX01DT1JFKTsKKwlpZiAo
cWVudCA9PSBOVUxMKSB7CisJCS8qIFRoaXMgaXMgdHJvdWJsZSAgKi8KKwkJc2N0cF9pbnB1dF93
aXRoX3BvcnQobSwgb2ZmLCAwKTsKKwkJcmV0dXJuOworCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlxZW50LT52biA9IGN1cnZuZXQ7
CisjZW5kaWYKKwlxZW50LT5tID0gbTsKKwlxZW50LT5vZmYgPSBvZmY7CisJcWVudC0+djYgPSAw
OworCXdrcSA9ICZzY3RwX21jb3JlX3dvcmtlcnNbY3B1X3RvX3VzZV07CisJU0NUUF9NQ09SRV9R
TE9DSyh3a3EpOworCisJVEFJTFFfSU5TRVJUX1RBSUwoJndrcS0+cXVlLCBxZW50LCBuZXh0KTsK
KwlpZiAod2txLT5ydW5uaW5nID09IDApIHsKKwkJbmVlZF93YWtlID0gMTsKKwl9CisJU0NUUF9N
Q09SRV9RVU5MT0NLKHdrcSk7CisJaWYgKG5lZWRfd2FrZSkgeworCQl3YWtldXAoJndrcS0+cnVu
bmluZyk7CisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9tY29yZV90aHJlYWQodm9pZCAqYXJn
KQoreworCisJc3RydWN0IHNjdHBfbWNvcmVfY3RybCAqd2txOworCXN0cnVjdCBzY3RwX21jb3Jl
X3F1ZXVlICpxZW50OworCisJd2txID0gKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwgKilhcmc7CisJ
c3RydWN0IG1idWYgKm07CisJaW50IG9mZiwgdjY7CisKKwkvKiBXYWl0IGZvciBmaXJzdCB0aWNr
bGUgKi8KKwlTQ1RQX01DT1JFX0xPQ0sod2txKTsKKwl3a3EtPnJ1bm5pbmcgPSAwOworCW1zbGVl
cCgmd2txLT5ydW5uaW5nLAorCSAgICAgICAmd2txLT5jb3JlX210eCwKKwkgICAgICAgMCwgIndh
aXQgZm9yIHBrdCIsIDApOworCVNDVFBfTUNPUkVfVU5MT0NLKHdrcSk7CisKKwkvKiBCaW5kIHRv
IG91ciBjcHUgKi8KKwl0aHJlYWRfbG9jayhjdXJ0aHJlYWQpOworCXNjaGVkX2JpbmQoY3VydGhy
ZWFkLCB3a3EtPmNwdWlkKTsKKwl0aHJlYWRfdW5sb2NrKGN1cnRocmVhZCk7CisKKwkvKiBOb3cg
bGV0cyBzdGFydCB3b3JraW5nICovCisJU0NUUF9NQ09SRV9MT0NLKHdrcSk7CisJLyogTm93IGdy
YWIgbG9jayBhbmQgZ28gKi8KKwlmb3IgKDs7KSB7CisJCVNDVFBfTUNPUkVfUUxPQ0sod2txKTsK
Kwlza2lwX3NsZWVwOgorCQl3a3EtPnJ1bm5pbmcgPSAxOworCQlxZW50ID0gVEFJTFFfRklSU1Qo
JndrcS0+cXVlKTsKKwkJaWYgKHFlbnQpIHsKKwkJCVRBSUxRX1JFTU9WRSgmd2txLT5xdWUsIHFl
bnQsIG5leHQpOworCQkJU0NUUF9NQ09SRV9RVU5MT0NLKHdrcSk7CisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCQlDVVJWTkVUX1NFVChx
ZW50LT52bik7CisjZW5kaWYKKwkJCW0gPSBxZW50LT5tOworCQkJb2ZmID0gcWVudC0+b2ZmOwor
CQkJdjYgPSBxZW50LT52NjsKKwkJCVNDVFBfRlJFRShxZW50LCBTQ1RQX01fTUNPUkUpOworCQkJ
aWYgKHY2ID09IDApIHsKKwkJCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIDApOworCQkJ
fSBlbHNlIHsKKwkJCQlTQ1RQX1BSSU5URigiVjYgbm90IHlldCBzdXBwb3J0ZWRcbiIpOworCQkJ
CXNjdHBfbV9mcmVlbShtKTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJ
CQlTQ1RQX01DT1JFX1FMT0NLKHdrcSk7CisJCX0KKwkJd2txLT5ydW5uaW5nID0gMDsKKwkJaWYg
KCFUQUlMUV9FTVBUWSgmd2txLT5xdWUpKSB7CisJCQlnb3RvIHNraXBfc2xlZXA7CisJCX0KKwkJ
U0NUUF9NQ09SRV9RVU5MT0NLKHdrcSk7CisJCW1zbGVlcCgmd2txLT5ydW5uaW5nLAorCQkgICAg
ICAgJndrcS0+Y29yZV9tdHgsCisJCSAgICAgICAwLCAid2FpdCBmb3IgcGt0IiwgMCk7CisJfQor
fQorCitzdGF0aWMgdm9pZAorc2N0cF9zdGFydHVwX21jb3JlX3RocmVhZHModm9pZCkKK3sKKwlp
bnQgaSwgY3B1OworCisJaWYgKG1wX25jcHVzID09IDEpCisJCXJldHVybjsKKworCWlmIChzY3Rw
X21jb3JlX3dvcmtlcnMgIT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IGJlZW4gaGVyZSBpbiBzb21l
IHByZXZpb3VzCisJCSAqIHZuZXQ/CisJCSAqLworCQlyZXR1cm47CisJfQorCVNDVFBfTUFMTE9D
KHNjdHBfbWNvcmVfd29ya2Vycywgc3RydWN0IHNjdHBfbWNvcmVfY3RybCAqLAorCQkgICAgKCht
cF9tYXhpZCsxKSAqIHNpemVvZihzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsKSksCisJCSAgICBTQ1RQ
X01fTUNPUkUpOworCWlmIChzY3RwX21jb3JlX3dvcmtlcnMgPT0gTlVMTCkgeworCQkvKiBUU05I
IEkgaG9wZSAqLworCQlyZXR1cm47CisJfQorCW1lbXNldChzY3RwX21jb3JlX3dvcmtlcnMsIDAg
LCAoKG1wX21heGlkKzEpICoKKwkJCQkJc2l6ZW9mKHN0cnVjdCBzY3RwX21jb3JlX2N0cmwpKSk7
CisJLyogSW5pdCB0aGUgc3RydWN0dXJlcyAqLworCWZvciAoaSA9IDA7IGk8PW1wX21heGlkOyBp
KyspIHsKKwkJVEFJTFFfSU5JVCgmc2N0cF9tY29yZV93b3JrZXJzW2ldLnF1ZSk7CisJCVNDVFBf
TUNPUkVfTE9DS19JTklUKCZzY3RwX21jb3JlX3dvcmtlcnNbaV0pOworCQlTQ1RQX01DT1JFX1FM
T0NLX0lOSVQoJnNjdHBfbWNvcmVfd29ya2Vyc1tpXSk7CisJCXNjdHBfbWNvcmVfd29ya2Vyc1tp
XS5jcHVpZCA9IGk7CisJfQorCWlmIChzY3RwX2NwdWFycnkgPT0gTlVMTCkgeworCQlTQ1RQX01B
TExPQyhzY3RwX2NwdWFycnksIGludCAqLAorCQkJICAgIChtcF9uY3B1cyAqIHNpemVvZihpbnQp
KSwKKwkJCSAgICBTQ1RQX01fTUNPUkUpOworCQlpID0gMDsKKwkJQ1BVX0ZPUkVBQ0goY3B1KSB7
CisJCQlzY3RwX2NwdWFycnlbaV0gPSBjcHU7CisJCQlpKys7CisJCX0KKwl9CisKKwkvKiBOb3cg
c3RhcnQgdGhlbSBhbGwgKi8KKwlDUFVfRk9SRUFDSChjcHUpIHsKKyNpZiBfX0ZyZWVCU0RfdmVy
c2lvbiA8PSA3MDEwMDAKKwkJKHZvaWQpa3RocmVhZF9jcmVhdGUoc2N0cF9tY29yZV90aHJlYWQs
CisJCQkJICAgICAodm9pZCAqKSZzY3RwX21jb3JlX3dvcmtlcnNbY3B1XSwKKwkJCQkgICAgICZz
Y3RwX21jb3JlX3dvcmtlcnNbY3B1XS50aHJlYWRfcHJvYywKKwkJCQkgICAgIFJGUFJPQywKKwkJ
CQkgICAgIFNDVFBfS1RIUkVBRF9QQUdFUywKKwkJCQkgICAgIFNDVFBfTUNPUkVfTkFNRSk7CisK
KyNlbHNlCisJCSh2b2lkKWtwcm9jX2NyZWF0ZShzY3RwX21jb3JlX3RocmVhZCwKKwkJCQkgICAo
dm9pZCAqKSZzY3RwX21jb3JlX3dvcmtlcnNbY3B1XSwKKwkJCQkgICAmc2N0cF9tY29yZV93b3Jr
ZXJzW2NwdV0udGhyZWFkX3Byb2MsCisJCQkJICAgUkZQUk9DLAorCQkJCSAgIFNDVFBfS1RIUkVB
RF9QQUdFUywKKwkJCQkgICBTQ1RQX01DT1JFX05BTUUpOworI2VuZGlmCisKKwl9Cit9CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfY2NfdmVyc2lvbiA+PSAx
MzAwMDAwCitzdGF0aWMgc3RydWN0IG1idWYgKgorc2N0cF9uZXRpc3JfaGRscihzdHJ1Y3QgbWJ1
ZiAqbSwgdWludHB0cl90IHNvdXJjZSkKK3sKKwlzdHJ1Y3QgaXAgKmlwOworCXN0cnVjdCBzY3Rw
aGRyICpzaDsKKwlpbnQgb2Zmc2V0OworCXVpbnQzMl90IGZsb3dpZCwgdGFnOworCisJLyoKKwkg
KiBObyBmbG93IGlkIGJ1aWx0IGJ5IGxvd2VyIGxheWVycyBmaXggaXQgc28gd2UKKwkgKiBjcmVh
dGUgb25lLgorCSAqLworCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJb2Zmc2V0ID0gKGlw
LT5pcF9obCA8PCAyKSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJaWYgKFNDVFBfQlVGX0xF
TihtKSA8IG9mZnNldCkgeworCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBvZmZzZXQpKSA9PSBOVUxM
KSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJvcHMpOworCQkJcmV0dXJuIChOVUxMKTsK
KwkJfQorCQlpcCA9IG10b2QobSwgc3RydWN0IGlwICopOworCX0KKwlzaCA9IChzdHJ1Y3Qgc2N0
cGhkciAqKSgoY2FkZHJfdClpcCArIChpcC0+aXBfaGwgPDwgMikpOworCXRhZyA9IGh0b25sKHNo
LT52X3RhZyk7CisJZmxvd2lkID0gdGFnIF4gbnRvaHMoc2gtPmRlc3RfcG9ydCkgXiBudG9ocyhz
aC0+c3JjX3BvcnQpOworCW0tPm1fcGt0aGRyLmZsb3dpZCA9IGZsb3dpZDsKKy8qIEZJWCBNRSAq
LworCW0tPm1fZmxhZ3MgfD0gTV9GTE9XSUQ7CisJcmV0dXJuIChtKTsKK30KKyNlbmRpZgorCit2
b2lkCitzY3RwX3BjYl9pbml0KCkKK3sKKwkvKgorCSAqIFNDVFAgaW5pdGlhbGl6YXRpb24gZm9y
IHRoZSBQQ0Igc3RydWN0dXJlcyBzaG91bGQgYmUgY2FsbGVkIGJ5CisJICogdGhlIHNjdHBfaW5p
dCgpIGZ1bmN0aW9uLgorCSAqLworCWludCBpOworCXN0cnVjdCB0aW1ldmFsIHR2OworCisJaWYg
KFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpICE9IDApIHsKKwkJLyogZXJyb3Ig
SSB3YXMgY2FsbGVkIHR3aWNlICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CQVNFX1ZBUihzY3Rw
X3BjYl9pbml0aWFsaXplZCkgPSAxOworCisjaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxf
TE9DS1MpCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlwdGhyZWFkX211
dGV4YXR0cl9pbml0KCZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSk7CisjaWZkZWYgSU5WQVJJQU5U
UworCXB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUoJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIpLCBQ
VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0spOworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRl
ZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlp
ZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykgIT0gTlVMTCkgeworCQltZW1zZXQoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9sb2cpKTsKKwl9Cisj
ZWxzZQorCW1lbXNldCgmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIDAsIHNpemVvZihzdHJ1
Y3Qgc2N0cF9sb2cpKTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisJU0NUUF9N
QUxMT0MoU0NUUF9CQVNFX1NUQVRTLCBzdHJ1Y3Qgc2N0cHN0YXQgKiwKKwkJICAgICgobXBfbWF4
aWQrMSkgKiBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSksCisJCSAgICBTQ1RQX01fTUNPUkUpOwor
I2VuZGlmCisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnR2KTsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNNUCkgJiYgZGVmaW5lZChTQ1RQX1VTRV9QRVJDUFVfU1RB
VCkKKwltZW1zZXQoU0NUUF9CQVNFX1NUQVRTLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSAq
IChtcF9tYXhpZCsxKSk7CisJU0NUUF9CQVNFX1NUQVRTW1BDUFVfR0VUKGNwdWlkKV0uc2N0cHNf
ZGlzY29udGludWl0eXRpbWUudHZfc2VjID0gKHVpbnQzMl90KXR2LnR2X3NlYzsKKwlTQ1RQX0JB
U0VfU1RBVFNbUENQVV9HRVQoY3B1aWQpXS5zY3Rwc19kaXNjb250aW51aXR5dGltZS50dl91c2Vj
ID0gKHVpbnQzMl90KXR2LnR2X3VzZWM7CisjZWxzZQorCW1lbXNldCgmU0NUUF9CQVNFX1NUQVRT
LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisJU0NUUF9CQVNFX1NUQVQoc2N0cHNfZGlz
Y29udGludWl0eXRpbWUpLnR2X3NlYyA9ICh1aW50MzJfdCl0di50dl9zZWM7CisJU0NUUF9CQVNF
X1NUQVQoc2N0cHNfZGlzY29udGludWl0eXRpbWUpLnR2X3VzZWMgPSAodWludDMyX3QpdHYudHZf
dXNlYzsKKyNlbmRpZgorCS8qIGluaXQgdGhlIGVtcHR5IGxpc3Qgb2YgKEFsbCkgRW5kcG9pbnRz
ICovCisJTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCkpOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKQorCUxJU1RfSU5JVCgmU0NUUF9CQVNFX0lORk8oaW5wbGlzdGhlYWQpKTsKKyNp
ZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpIHx8IGRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpIHx8
IGRlZmluZWQoQVBQTEVfTElPTikgfHwgZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJU0NU
UF9CQVNFX0lORk8oc2N0YmluZm8pLmxpc3RoZWFkID0gJlNDVFBfQkFTRV9JTkZPKGlucGxpc3Ro
ZWFkKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycF9hdHRyID0gbGNrX2dycF9h
dHRyX2FsbG9jX2luaXQoKTsKKwlsY2tfZ3JwX2F0dHJfc2V0ZGVmYXVsdChTQ1RQX0JBU0VfSU5G
TyhzY3RiaW5mbykubXR4X2dycF9hdHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4
X2dycCA9IGxja19ncnBfYWxsb2NfaW5pdCgic2N0cHBjYiIsIFNDVFBfQkFTRV9JTkZPKHNjdGJp
bmZvKS5tdHhfZ3JwX2F0dHIpOworCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfYXR0ciA9
IGxja19hdHRyX2FsbG9jX2luaXQoKTsKKwlsY2tfYXR0cl9zZXRkZWZhdWx0KFNDVFBfQkFTRV9J
TkZPKHNjdGJpbmZvKS5tdHhfYXR0cik7CisjZWxzZQorCVNDVFBfQkFTRV9JTkZPKHNjdGJpbmZv
KS5pcGlfbGlzdGhlYWQgPSAmU0NUUF9CQVNFX0lORk8oaW5wbGlzdGhlYWQpOworCVNDVFBfQkFT
RV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19ncnBfYXR0ciA9IGxja19ncnBfYXR0cl9hbGxvY19p
bml0KCk7CisJbGNrX2dycF9hdHRyX3NldGRlZmF1bHQoU0NUUF9CQVNFX0lORk8oc2N0YmluZm8p
LmlwaV9sb2NrX2dycF9hdHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tf
Z3JwID0gbGNrX2dycF9hbGxvY19pbml0KCJzY3RwcGNiIiwgU0NUUF9CQVNFX0lORk8oc2N0Ymlu
Zm8pLmlwaV9sb2NrX2dycF9hdHRyKTsKKwlTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xv
Y2tfYXR0ciA9IGxja19hdHRyX2FsbG9jX2luaXQoKTsKKwlsY2tfYXR0cl9zZXRkZWZhdWx0KFND
VFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19hdHRyKTsKKyNlbmRpZgorI2lmICFkZWZp
bmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJEKSAmJiAhZGVm
aW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pCisJU0NUUF9C
QVNFX0lORk8oc2N0YmluZm8pLmlwaV9nYyA9IHNjdHBfZ2M7CisJaW5fcGNiaW5mb19hdHRhY2go
JlNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKSk7CisjZW5kaWYKKyNlbmRpZgorCisKKwkvKiBpbml0
IHRoZSBoYXNoIHRhYmxlIG9mIGVuZHBvaW50cyAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfY2NfdmVyc2lvbikgJiYgX19GcmVlQlNEX2NjX3ZlcnNp
b24gPj0gNDQwMDAwCisJVFVOQUJMRV9JTlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAudGNiaGFzaHNp
emUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSk7CisJVFVOQUJMRV9JTlRf
RkVUQ0goIm5ldC5pbmV0LnNjdHAucGNiaGFzaHNpemUiLCAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3BjYnRibHNpemUpKTsKKwlUVU5BQkxFX0lOVF9GRVRDSCgibmV0LmluZXQuc2N0cC5jaHVua3Nj
YWxlIiwgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSk7CisjZWxzZQorCVRVTkFC
TEVfSU5UX0ZFVENIKCJuZXQuaW5ldC5zY3RwLnRjYmhhc2hzaXplIiwgU0NUUF9UQ0JIQVNIU0la
RSwKKwkJCSAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKSk7CisJVFVOQUJMRV9J
TlRfRkVUQ0goIm5ldC5pbmV0LnNjdHAucGNiaGFzaHNpemUiLCBTQ1RQX1BDQkhBU0hTSVpFLAor
CQkJICBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGNidGJsc2l6ZSkpOworCVRVTkFCTEVfSU5UX0ZF
VENIKCJuZXQuaW5ldC5zY3RwLmNodW5rc2NhbGUiLCBTQ1RQX0NIVU5LUVVFVUVfU0NBTEUsCisJ
CQkgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSk7CisjZW5kaWYKKyNlbmRpZgor
CVNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gpID0gU0NUUF9IQVNIX0lOSVQoKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSkgKiAzMSksCisJCQkJCQkgICAgICAgJlNDVFBfQkFT
RV9JTkZPKGhhc2hhc29jbWFyaykpOworCVNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKSA9IFND
VFBfSEFTSF9JTklUKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksCisJCQkJCQkg
ICAgICZTQ1RQX0JBU0VfSU5GTyhoYXNobWFyaykpOworCVNDVFBfQkFTRV9JTkZPKHNjdHBfdGNw
ZXBoYXNoKSA9IFNDVFBfSEFTSF9JTklUKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6
ZSksCisJCQkJCQkJJlNDVFBfQkFTRV9JTkZPKGhhc2h0Y3BtYXJrKSk7CisJU0NUUF9CQVNFX0lO
Rk8oaGFzaHRibHNpemUpID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hhc2h0YmxzaXplKTsKKwor
CisJU0NUUF9CQVNFX0lORk8oc2N0cF92cmZoYXNoKSA9IFNDVFBfSEFTSF9JTklUKFNDVFBfU0la
RV9PRl9WUkZfSEFTSCwKKwkJCQkJCSAgICAgICZTQ1RQX0JBU0VfSU5GTyhoYXNodnJmbWFyaykp
OworCisJU0NUUF9CQVNFX0lORk8odnJmX2lmbl9oYXNoKSA9IFNDVFBfSEFTSF9JTklUKFNDVFBf
VlJGX0lGTl9IQVNIX1NJWkUsCisJCQkJCQkgICAgICAmU0NUUF9CQVNFX0lORk8odnJmX2lmbl9o
YXNobWFyaykpOworCS8qIGluaXQgdGhlIHpvbmVzICovCisJLyoKKwkgKiBGSVggTUU6IFNob3Vs
ZCBjaGVjayBmb3IgTlVMTCByZXR1cm5zLCBidXQgaWYgaXQgZG9lcyBmYWlsIHdlIGFyZQorCSAq
IGRvb21lZCB0byBwYW5pYyBhbnl3YXlzLi4uIGFkZCBsYXRlciBtYXliZS4KKwkgKi8KKwlTQ1RQ
X1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9lcCksICJzY3RwX2VwIiwKKwkJICAg
ICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9pbnBjYiksIG1heHNvY2tldHMpOworCisJU0NUUF9aT05F
X0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNvYyksICJzY3RwX2Fzb2MiLAorCQkgICAg
ICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3RjYiksIHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyk7CisK
KwlTQ1RQX1pPTkVfSU5JVChTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9sYWRkciksICJzY3RwX2xh
ZGRyIiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9sYWRkciksCisJCSAgICAgICAoc2N0
cF9tYXhfbnVtYmVyX29mX2Fzc29jICogc2N0cF9zY2FsZV91cF9mb3JfYWRkcmVzcykpOworCisJ
U0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfbmV0KSwgInNjdHBfcmFkZHIi
LAorCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX25ldHMpLAorCQkgICAgICAgKHNjdHBfbWF4
X251bWJlcl9vZl9hc3NvYyAqIHNjdHBfc2NhbGVfdXBfZm9yX2FkZHJlc3MpKTsKKworCVNDVFBf
Wk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2NodW5rKSwgInNjdHBfY2h1bmsiLAor
CQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmspLAorCQkgICAgICAgKHNjdHBf
bWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSkp
OworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfcmVhZHEpLCAic2N0
cF9yZWFkcSIsCisJCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQpLAor
CQkgICAgICAgKHNjdHBfbWF4X251bWJlcl9vZl9hc3NvYyAqIFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9jaHVua3NjYWxlKSkpOworCisJU0NUUF9aT05FX0lOSVQoU0NUUF9CQVNFX0lORk8oaXBpX3pv
bmVfc3RybW9xKSwgInNjdHBfc3RyZWFtX21zZ19vdXQiLAorCQkgICAgICAgc2l6ZW9mKHN0cnVj
dCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKSwKKwkJICAgICAgIChzY3RwX21heF9udW1iZXJf
b2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsKKworCVNDVFBf
Wk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZiksICJzY3RwX2FzY29uZiIs
CisJCSAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mKSwKKwkJICAgICAgIChzY3RwX21h
eF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY2h1bmtzY2FsZSkpKTsK
KworCVNDVFBfWk9ORV9JTklUKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX2FzY29uZl9hY2spLCAi
c2N0cF9hc2NvbmZfYWNrIiwKKwkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNr
KSwKKwkJICAgICAgIChzY3RwX21heF9udW1iZXJfb2ZfYXNzb2MgKiBTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfY2h1bmtzY2FsZSkpKTsKKworCisJLyogTWFzdGVyIExvY2sgSU5JVCBmb3IgaW5mbyBz
dHJ1Y3R1cmUgKi8KKwlTQ1RQX0lOUF9JTkZPX0xPQ0tfSU5JVCgpOworCVNDVFBfU1RBVExPR19J
TklUX0xPQ0soKTsKKworCVNDVFBfSVBJX0NPVU5UX0lOSVQoKTsKKwlTQ1RQX0lQSV9BRERSX0lO
SVQoKTsKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9MT0dHSU5HCisJU0NUUF9JUF9QS1RMT0dfSU5JVCgp
OworI2VuZGlmCisJTElTVF9JTklUKCZTQ1RQX0JBU0VfSU5GTyhhZGRyX3dxKSk7CisKKwlTQ1RQ
X1dRX0FERFJfSU5JVCgpOworCS8qIG5vdCBzdXJlIGlmIHdlIG5lZWQgYWxsIHRoZSBjb3VudHMg
Ki8KKwlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfZXApID0gMDsKKwkvKiBhc3NvYy90Y2Igem9u
ZSBpbmZvICovCisJU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpID0gMDsKKwkvKiBsb2Nh
bCBhZGRybGlzdCB6b25lIGluZm8gKi8KKwlTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfbGFkZHIp
ID0gMDsKKwkvKiByZW1vdGUgYWRkcmxpc3Qgem9uZSBpbmZvICovCisJU0NUUF9CQVNFX0lORk8o
aXBpX2NvdW50X3JhZGRyKSA9IDA7CisJLyogY2h1bmsgaW5mbyAqLworCVNDVFBfQkFTRV9JTkZP
KGlwaV9jb3VudF9jaHVuaykgPSAwOworCisJLyogc29ja2V0IHF1ZXVlIHpvbmUgaW5mbyAqLwor
CVNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9yZWFkcSkgPSAwOworCisJLyogc3RyZWFtIG91dCBx
dWV1ZSBjb250ICovCisJU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3N0cm1vcSkgPSAwOworCisJ
U0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfc3RybW9xKSA9IDA7CisJU0NUUF9CQVNFX0lORk8oaXBp
X2ZyZWVfY2h1bmtzKSA9IDA7CisKKwlTQ1RQX09TX1RJTUVSX0lOSVQoJlNDVFBfQkFTRV9JTkZP
KGFkZHJfd3FfdGltZXIudGltZXIpKTsKKworCS8qIEluaXQgdGhlIFRJTUVXQUlUIGxpc3QgKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9TVEFDS19WVEFHX0hBU0hfU0laRTsgaSsrKSB7CisJCUxJ
U1RfSU5JVCgmU0NUUF9CQVNFX0lORk8odnRhZ190aW1ld2FpdClbaV0pOworCX0KKyNpZiBkZWZp
bmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NLUykKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisJSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCZzY3RwX2l0X2N0bC5pdGVy
YXRvcl93YWtldXApOworI2Vsc2UKKwkodm9pZClwdGhyZWFkX2NvbmRfaW5pdCgmc2N0cF9pdF9j
dGwuaXRlcmF0b3Jfd2FrZXVwLCBOVUxMKTsKKyNlbmRpZgorI2VuZGlmCisJc2N0cF9zdGFydHVw
X2l0ZXJhdG9yKCk7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVkKFNDVFBf
TUNPUkVfSU5QVVQpICYmIGRlZmluZWQoU01QKQorCXNjdHBfc3RhcnR1cF9tY29yZV90aHJlYWRz
KCk7CisjZW5kaWYKKworI2lmbmRlZiBfX1BhbmRhX18KKwkvKgorCSAqIElOSVQgdGhlIGRlZmF1
bHQgVlJGIHdoaWNoIGZvciBCU0QgaXMgdGhlIG9ubHkgb25lLCBvdGhlciBPL1MncworCSAqIG1h
eSBoYXZlIG1vcmUuIEJ1dCBpbml0aWFsbHkgdGhleSBtdXN0IHN0YXJ0IHdpdGggb25lIGFuZCB0
aGVuCisJICogYWRkIHRoZSBWUkYncyBhcyBhZGRyZXNzZXMgYXJlIGFkZGVkLgorCSAqLworCXNj
dHBfaW5pdF92cmZfbGlzdChTQ1RQX0RFRkFVTFRfVlJGKTsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF9jY192ZXJzaW9uID49IDEzMDAwMDAKKwlpZiAoaXBf
cmVnaXN0ZXJfZmxvd19oYW5kbGVyKHNjdHBfbmV0aXNyX2hkbHIsIElQUFJPVE9fU0NUUCkpIHsK
KwkJU0NUUF9QUklOVEYoIioqKlNDVFAtIEVycm9yIGNhbid0IHJlZ2lzdGVyIG5ldGlzciBoYW5k
bGVyKioqXG4iKTsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9TQ1RQX05FRURTX0NBTExPVVRf
KSB8fCBkZWZpbmVkKF9VU0VSX1NDVFBfTkVFRFNfQ0FMTE9VVF8pCisJLyogYWxsb2NhdGUgdGhl
IGxvY2sgZm9yIHRoZSBjYWxsb3V0L3RpbWVyIHF1ZXVlICovCisJU0NUUF9USU1FUlFfTE9DS19J
TklUKCk7CisJVEFJTFFfSU5JVCgmU0NUUF9CQVNFX0lORk8oY2FsbHF1ZXVlKSk7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbWJ1Zl9pbml0aWFsaXplKE5VTEwpOworI2lm
IGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlyZWN2X3RocmVhZF9pbml0KCk7Cisj
ZW5kaWYKKyNlbmRpZgorfQorCisvKgorICogQXNzdW1lcyB0aGF0IHRoZSBTQ1RQX0JBU0VfSU5G
TygpIGxvY2sgaXMgTk9UIGhlbGQuCisgKi8KK3ZvaWQKK3NjdHBfcGNiX2ZpbmlzaCh2b2lkKQor
eworCXN0cnVjdCBzY3RwX3ZyZmxpc3QgKnZyZl9idWNrZXQ7CisJc3RydWN0IHNjdHBfdnJmICp2
cmYsICpudnJmOworCXN0cnVjdCBzY3RwX2lmbiAqaWZuLCAqbmlmbjsKKwlzdHJ1Y3Qgc2N0cF9p
ZmEgKmlmYSwgKm5pZmE7CisJc3RydWN0IHNjdHB2dGFnaGVhZCAqY2hhaW47CisJc3RydWN0IHNj
dHBfdGFnYmxvY2sgKnR3YWl0X2Jsb2NrLCAqcHJldl90d2FpdF9ibG9jazsKKwlzdHJ1Y3Qgc2N0
cF9sYWRkciAqd2ksICpud2k7CisJaW50IGk7CisJc3RydWN0IHNjdHBfaXRlcmF0b3IgKml0LCAq
bml0OworCisJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsK
KwkJU0NUUF9QUklOVEYoIiVzOiByYWNlIGNvbmRpdGlvbiBvbiB0ZWFyZG93bi5cbiIsIF9fZnVu
Y19fKTsKKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JBU0VfVkFSKHNjdHBfcGNiX2luaXRpYWxpemVk
KSA9IDA7CisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCisJLyogTm90aWZ5IHRoZSBpdGVyYXRv
ciB0byBleGl0LiAqLworCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwlzY3RwX2l0X2N0
bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQX0lURVJBVE9SX01VU1RfRVhJVDsKKwlzY3RwX3dha2V1
cF9pdGVyYXRvcigpOworCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRl
ZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYmICFkZWZp
bmVkKEFQUExFX01PVU5UQUlOTElPTikKKwlpbl9wY2JpbmZvX2RldGFjaCgmU0NUUF9CQVNFX0lO
Rk8oc2N0YmluZm8pKTsKKyNlbmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKwlk
byB7CisJCW1zbGVlcCgmc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MsCisJCSAgICAgICBzY3Rw
X2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LAorCQkgICAgICAgMCwgIndhaXRpbmdfZm9yX3dv
cmsiLCAwKTsKKwl9IHdoaWxlICgoc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3MgJiBTQ1RQX0lU
RVJBVE9SX0VYSVRFRCkgPT0gMCk7CisJdGhyZWFkX2RlYWxsb2NhdGUoc2N0cF9pdF9jdGwudGhy
ZWFkX3Byb2MpOworCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpZiAoc2N0cF9pdF9jdGwuaXRlcmF0b3JfdGhyZWFkX29i
aiAhPSBOVUxMKSB7CisJCU5UU1RBVFVTIHN0YXR1cyA9IFNUQVRVU19TVUNDRVNTOworCisJCUtl
U2V0RXZlbnQoJnNjdHBfaXRfY3RsLml0ZXJhdG9yX3dha2V1cFsxXSwgSU9fTk9fSU5DUkVNRU5U
LCBGQUxTRSk7CisJCXN0YXR1cyA9IEtlV2FpdEZvclNpbmdsZU9iamVjdChzY3RwX2l0X2N0bC5p
dGVyYXRvcl90aHJlYWRfb2JqLAorCQkJCQkgICAgICAgRXhlY3V0aXZlLAorCQkJCQkgICAgICAg
S2VybmVsTW9kZSwKKwkJCQkJICAgICAgIEZBTFNFLAorCQkJCQkgICAgICAgTlVMTCk7CisJCU9i
RGVyZWZlcmVuY2VPYmplY3Qoc2N0cF9pdF9jdGwuaXRlcmF0b3JfdGhyZWFkX29iaik7CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChzY3RwX2l0X2N0bC50aHJl
YWRfcHJvYykgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJV2FpdEZv
clNpbmdsZU9iamVjdChzY3RwX2l0X2N0bC50aHJlYWRfcHJvYywgSU5GSU5JVEUpOworCQlDbG9z
ZUhhbmRsZShzY3RwX2l0X2N0bC50aHJlYWRfcHJvYyk7CisJCXNjdHBfaXRfY3RsLnRocmVhZF9w
cm9jID0gTlVMTDsKKyNlbHNlCisJCXB0aHJlYWRfam9pbihzY3RwX2l0X2N0bC50aHJlYWRfcHJv
YywgTlVMTCk7CisJCXNjdHBfaXRfY3RsLnRocmVhZF9wcm9jID0gMDsKKyNlbmRpZgorCX0KKyNl
bmRpZgorI2lmIGRlZmluZWQoU0NUUF9QUk9DRVNTX0xFVkVMX0xPQ0tTKQorI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlEZWxldGVDb25kaXRpb25WYXJpYWJsZSgmc2N0cF9p
dF9jdGwuaXRlcmF0b3Jfd2FrZXVwKTsKKyNlbHNlCisJcHRocmVhZF9jb25kX2Rlc3Ryb3koJnNj
dHBfaXRfY3RsLml0ZXJhdG9yX3dha2V1cCk7CisJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpOworI2VuZGlmCisjZW5kaWYKKwkvKiBJbiBGcmVlQlNE
IHRoZSBpdGVyYXRvciB0aHJlYWQgbmV2ZXIgZXhpdHMKKwkgKiBidXQgd2UgZG8gY2xlYW4gdXAu
CisJICogVGhlIG9ubHkgd2F5IEZyZWVCU0QgcmVhY2hlcyBoZXJlIGlzIGlmIHdlIGhhdmUgVlJG
J3MKKwkgKiBidXQgd2Ugc3RpbGwgYWRkIHRoZSBpZmRlZiB0byBtYWtlIGl0IGNvbXBpbGUgb24g
b2xkIHZlcnNpb25zLgorCSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCityZXRyeToKKyNl
bmRpZgorCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorCS8qCisJICogc2N0cF9pdGVyYXRvcl93b3JrZXIoKSBtaWdodCBiZSB3b3JraW5nIG9u
IGFuIGl0IGVudHJ5IHdpdGhvdXQKKwkgKiBob2xkaW5nIHRoZSBsb2NrLiAgV2Ugd29uJ3QgZmlu
ZCBpdCBvbiB0aGUgbGlzdCBlaXRoZXIgYW5kCisJICogY29udGludWUgYW5kIGZyZWUvZGVzdHJv
eSBpdC4gIFdoaWxlIGhvbGRpbmcgdGhlIGxvY2ssIHNwaW4sIHRvCisJICogYXZvaWQgdGhlIHJh
Y2UgY29uZGl0aW9uIGFzIHNjdHBfaXRlcmF0b3Jfd29ya2VyKCkgd2lsbCBoYXZlIHRvCisJICog
d2FpdCB0byByZS1hcXVpcmUgdGhlIGxvY2suCisJICovCisJaWYgKHNjdHBfaXRfY3RsLml0ZXJh
dG9yX3J1bm5pbmcgIT0gMCB8fCBzY3RwX2l0X2N0bC5jdXJfaXQgIT0gTlVMTCkgeworCQlTQ1RQ
X0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKKwkJU0NUUF9QUklOVEYoIiVzOiBJdGVyYXRvciBy
dW5uaW5nIHdoaWxlIHdlIGhlbGQgdGhlIGxvY2suIFJldHJ5LiAiCisJCSAgICAgICAgICAgICJj
dXJfaXQ9JXBcbiIsIF9fZnVuY19fLCBzY3RwX2l0X2N0bC5jdXJfaXQpOworCQlERUxBWSgxMCk7
CisJCWdvdG8gcmV0cnk7CisJfQorI2VuZGlmCisJVEFJTFFfRk9SRUFDSF9TQUZFKGl0LCAmc2N0
cF9pdF9jdGwuaXRlcmF0b3JoZWFkLCBzY3RwX254dF9pdHIsIG5pdCkgeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorCQlpZiAoaXQtPnZu
ICE9IGN1cnZuZXQpIHsKKwkJCWNvbnRpbnVlOworCQl9CisjZW5kaWYKKwkJVEFJTFFfUkVNT1ZF
KCZzY3RwX2l0X2N0bC5pdGVyYXRvcmhlYWQsIGl0LCBzY3RwX254dF9pdHIpOworCQlpZiAoaXQt
PmZ1bmN0aW9uX2F0ZW5kICE9IE5VTEwpIHsKKwkJCSgqaXQtPmZ1bmN0aW9uX2F0ZW5kKSAoaXQt
PnBvaW50ZXIsIGl0LT52YWwpOworCQl9CisJCVNDVFBfRlJFRShpdCxTQ1RQX01fSVRFUik7CisJ
fQorCVNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorCVNDVFBfSVRFUkFUT1JfTE9DSygp
OworCWlmICgoc2N0cF9pdF9jdGwuY3VyX2l0KSAmJgorCSAgICAoc2N0cF9pdF9jdGwuY3VyX2l0
LT52biA9PSBjdXJ2bmV0KSkgeworCQlzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyB8PSBTQ1RQ
X0lURVJBVE9SX1NUT1BfQ1VSX0lUOworCX0KKwlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOworI2Vu
ZGlmCisjaWYgIWRlZmluZWQoX19GcmVlQlNEX18pCisJU0NUUF9JUElfSVRFUkFUT1JfV1FfREVT
VFJPWSgpOworCVNDVFBfSVRFUkFUT1JfTE9DS19ERVNUUk9ZKCk7CisjZW5kaWYKKwlTQ1RQX09T
X1RJTUVSX1NUT1BfRFJBSU4oJlNDVFBfQkFTRV9JTkZPKGFkZHJfd3FfdGltZXIudGltZXIpKTsK
KwlTQ1RQX1dRX0FERFJfTE9DSygpOworCUxJU1RfRk9SRUFDSF9TQUZFKHdpLCAmU0NUUF9CQVNF
X0lORk8oYWRkcl93cSksIHNjdHBfbnh0X2FkZHIsIG53aSkgeworCQlMSVNUX1JFTU9WRSh3aSwg
c2N0cF9ueHRfYWRkcik7CisJCVNDVFBfREVDUl9MQUREUl9DT1VOVCgpOworCQlpZiAod2ktPmFj
dGlvbiA9PSBTQ1RQX0RFTF9JUF9BRERSRVNTKSB7CisJCQlTQ1RQX0ZSRUUod2ktPmlmYSwgU0NU
UF9NX0lGQSk7CisJCX0KKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
bGFkZHIpLCB3aSk7CisJfQorCVNDVFBfV1FfQUREUl9VTkxPQ0soKTsKKworCS8qCisJICogZnJl
ZSB0aGUgdnJmL2lmbi9pZmEgbGlzdHMgYW5kIGhhc2hlcyAoYmUgc3VyZSBhZGRyZXNzIG1vbml0
b3IKKwkgKiBpcyBkZXN0cm95ZWQgZmlyc3QpLgorCSAqLworCXZyZl9idWNrZXQgPSAmU0NUUF9C
QVNFX0lORk8oc2N0cF92cmZoYXNoKVsoU0NUUF9ERUZBVUxUX1ZSRklEICYgU0NUUF9CQVNFX0lO
Rk8oaGFzaHZyZm1hcmspKV07CisJTElTVF9GT1JFQUNIX1NBRkUodnJmLCB2cmZfYnVja2V0LCBu
ZXh0X3ZyZiwgbnZyZikgeworCQlMSVNUX0ZPUkVBQ0hfU0FGRShpZm4sICZ2cmYtPmlmbmxpc3Qs
IG5leHRfaWZuLCBuaWZuKSB7CisJCQlMSVNUX0ZPUkVBQ0hfU0FGRShpZmEsICZpZm4tPmlmYWxp
c3QsIG5leHRfaWZhLCBuaWZhKSB7CisJCQkJLyogZnJlZSB0aGUgaWZhICovCisJCQkJTElTVF9S
RU1PVkUoaWZhLCBuZXh0X2J1Y2tldCk7CisJCQkJTElTVF9SRU1PVkUoaWZhLCBuZXh0X2lmYSk7
CisJCQkJU0NUUF9GUkVFKGlmYSwgU0NUUF9NX0lGQSk7CisJCQl9CisJCQkvKiBmcmVlIHRoZSBp
Zm4gKi8KKwkJCUxJU1RfUkVNT1ZFKGlmbiwgbmV4dF9idWNrZXQpOworCQkJTElTVF9SRU1PVkUo
aWZuLCBuZXh0X2lmbik7CisJCQlTQ1RQX0ZSRUUoaWZuLCBTQ1RQX01fSUZOKTsKKwkJfQorCQlT
Q1RQX0hBU0hfRlJFRSh2cmYtPnZyZl9hZGRyX2hhc2gsIHZyZi0+dnJmX2FkZHJfaGFzaG1hcmsp
OworCQkvKiBmcmVlIHRoZSB2cmYgKi8KKwkJTElTVF9SRU1PVkUodnJmLCBuZXh0X3ZyZik7CisJ
CVNDVFBfRlJFRSh2cmYsIFNDVFBfTV9WUkYpOworCX0KKwkvKiBmcmVlIHRoZSB2cmYgaGFzaGVz
ICovCisJU0NUUF9IQVNIX0ZSRUUoU0NUUF9CQVNFX0lORk8oc2N0cF92cmZoYXNoKSwgU0NUUF9C
QVNFX0lORk8oaGFzaHZyZm1hcmspKTsKKwlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5GTyh2
cmZfaWZuX2hhc2gpLCBTQ1RQX0JBU0VfSU5GTyh2cmZfaWZuX2hhc2htYXJrKSk7CisKKwkvKiBm
cmVlIHRoZSBUSU1FV0FJVCBsaXN0IGVsZW1lbnRzIG1hbGxvYydkIGluIHRoZSBmdW5jdGlvbgor
CSAqIHNjdHBfYWRkX3Z0YWdfdG9fdGltZXdhaXQoKS4uLgorCSAqLworCWZvciAoaSA9IDA7IGkg
PCBTQ1RQX1NUQUNLX1ZUQUdfSEFTSF9TSVpFOyBpKyspIHsKKwkJY2hhaW4gPSAmU0NUUF9CQVNF
X0lORk8odnRhZ190aW1ld2FpdClbaV07CisJCWlmICghTElTVF9FTVBUWShjaGFpbikpIHsKKwkJ
CXByZXZfdHdhaXRfYmxvY2sgPSBOVUxMOworCQkJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBj
aGFpbiwgc2N0cF9ueHRfdGFnYmxvY2spIHsKKwkJCQlpZiAocHJldl90d2FpdF9ibG9jaykgewor
CQkJCQlTQ1RQX0ZSRUUocHJldl90d2FpdF9ibG9jaywgU0NUUF9NX1RJTVcpOworCQkJCX0KKwkJ
CQlwcmV2X3R3YWl0X2Jsb2NrID0gdHdhaXRfYmxvY2s7CisJCQl9CisJCQlTQ1RQX0ZSRUUocHJl
dl90d2FpdF9ibG9jaywgU0NUUF9NX1RJTVcpOworCQl9CisJfQorCisJLyogZnJlZSB0aGUgbG9j
a3MgYW5kIG11dGV4ZXMgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX1RJTUVSUV9M
T0NLX0RFU1RST1koKTsKKyNlbmRpZgorI2lmZGVmIFNDVFBfUEFDS0VUX0xPR0dJTkcKKwlTQ1RQ
X0lQX1BLVExPR19ERVNUUk9ZKCk7CisjZW5kaWYKKwlTQ1RQX0lQSV9BRERSX0RFU1RST1koKTsK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQX0lQSV9DT1VOVF9ERVNUUk9ZKCk7CisjZW5k
aWYKKwlTQ1RQX1NUQVRMT0dfREVTVFJPWSgpOworCVNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9Z
KCk7CisKKwlTQ1RQX1dRX0FERFJfREVTVFJPWSgpOworCisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisjaWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKSB8fCBkZWZpbmVkKEFQUExFX1NOT1dMRU9QQVJE
KSB8fCBkZWZpbmVkKEFQUExFX0xJT04pIHx8IGRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQor
CWxja19ncnBfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5tdHhfZ3JwX2F0dHIp
OworCWxja19ncnBfZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2dycCk7CisJbGNr
X2F0dHJfZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykubXR4X2F0dHIpOworI2Vsc2UKKwls
Y2tfZ3JwX2F0dHJfZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3JwX2F0
dHIpOworCWxja19ncnBfZnJlZShTQ1RQX0JBU0VfSU5GTyhzY3RiaW5mbykuaXBpX2xvY2tfZ3Jw
KTsKKwlsY2tfYXR0cl9mcmVlKFNDVFBfQkFTRV9JTkZPKHNjdGJpbmZvKS5pcGlfbG9ja19hdHRy
KTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNDVFBfVElN
RVJRX0xPQ0tfREVTVFJPWSgpOworCVNDVFBfWk9ORV9ERVNUUk9ZKHpvbmVfbWJ1Zik7CisJU0NU
UF9aT05FX0RFU1RST1koem9uZV9jbHVzdCk7CisJU0NUUF9aT05FX0RFU1RST1koem9uZV9leHRf
cmVmY250KTsKKyNlbmRpZgorCS8qIEdldCByaWQgb2Ygb3RoZXIgc3R1ZmYgdG9vLiAqLworCWlm
IChTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKSAhPSBOVUxMKQorCQlTQ1RQX0hBU0hfRlJF
RShTQ1RQX0JBU0VfSU5GTyhzY3RwX2Fzb2NoYXNoKSwgU0NUUF9CQVNFX0lORk8oaGFzaGFzb2Nt
YXJrKSk7CisJaWYgKFNDVFBfQkFTRV9JTkZPKHNjdHBfZXBoYXNoKSAhPSBOVUxMKQorCQlTQ1RQ
X0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5GTyhzY3RwX2VwaGFzaCksIFNDVFBfQkFTRV9JTkZPKGhh
c2htYXJrKSk7CisJaWYgKFNDVFBfQkFTRV9JTkZPKHNjdHBfdGNwZXBoYXNoKSAhPSBOVUxMKQor
CQlTQ1RQX0hBU0hfRlJFRShTQ1RQX0JBU0VfSU5GTyhzY3RwX3RjcGVwaGFzaCksIFNDVFBfQkFT
RV9JTkZPKGhhc2h0Y3BtYXJrKSk7CisKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZp
bmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9aT05FX0RF
U1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfZXApKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShT
Q1RQX0JBU0VfSU5GTyhpcGlfem9uZV9hc29jKSk7CisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9C
QVNFX0lORk8oaXBpX3pvbmVfbGFkZHIpKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0Vf
SU5GTyhpcGlfem9uZV9uZXQpKTsKKwlTQ1RQX1pPTkVfREVTVFJPWShTQ1RQX0JBU0VfSU5GTyhp
cGlfem9uZV9jaHVuaykpOworCVNDVFBfWk9ORV9ERVNUUk9ZKFNDVFBfQkFTRV9JTkZPKGlwaV96
b25lX3JlYWRxKSk7CisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVf
c3RybW9xKSk7CisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNj
b25mKSk7CisJU0NUUF9aT05FX0RFU1RST1koU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfYXNjb25m
X2FjaykpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTTVAp
ICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQpCisJU0NUUF9GUkVFKFNDVFBfQkFTRV9T
VEFUUywgU0NUUF9NX01DT1JFKTsKKyNlbmRpZgorfQorCisKK2ludAorc2N0cF9sb2FkX2FkZHJl
c3Nlc19mcm9tX2luaXQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3QgbWJ1ZiAqbSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvZmZzZXQsIGludCBsaW1pdCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqc3JjLCBzdHJ1Y3Qgc29j
a2FkZHIgKmRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRk
ciAqYWx0c2EsIHVpbnQxNl90IHBvcnQpCit7CisJLyoKKwkgKiBncnViIHRocm91Z2ggdGhlIElO
SVQgcHVsbGluZyBhZGRyZXNzZXMgYW5kIGxvYWRpbmcgdGhlbSB0byB0aGUKKwkgKiBuZXRzIHN0
cnVjdHVyZSBpbiB0aGUgYXNvYy4gVGhlIGZyb20gYWRkcmVzcyBpbiB0aGUgbWJ1ZiBzaG91bGQK
KwkgKiBhbHNvIGJlIGxvYWRlZCAoaWYgaXQgaXMgbm90IGFscmVhZHkpLiBUaGlzIHJvdXRpbmUg
Y2FuIGJlIGNhbGxlZAorCSAqIHdpdGggZWl0aGVyIElOSVQgb3IgSU5JVC1BQ0sncyBhcyBsb25n
IGFzIHRoZSBtIHBvaW50cyB0byB0aGUgSVAKKwkgKiBwYWNrZXQgYW5kIHRoZSBvZmZzZXQgcG9p
bnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHBhcmFtZXRlcnMuCisJICovCisJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsICpubmV0LCAqbmV0X3RtcDsK
KwlzdHJ1Y3Qgc2N0cF9wYXJhbWhkciAqcGhkciwgcGFyYW1fYnVmOworCXN0cnVjdCBzY3RwX3Rj
YiAqc3RjYl90bXA7CisJdWludDE2X3QgcHR5cGUsIHBsZW47CisJc3RydWN0IHNvY2thZGRyICpz
YTsKKwl1aW50OF90IHJhbmRvbV9zdG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKwlzdHJ1
Y3Qgc2N0cF9hdXRoX3JhbmRvbSAqcF9yYW5kb20gPSBOVUxMOworCXVpbnQxNl90IHJhbmRvbV9s
ZW4gPSAwOworCXVpbnQ4X3QgaG1hY3Nfc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07CisJ
c3RydWN0IHNjdHBfYXV0aF9obWFjX2FsZ28gKmhtYWNzID0gTlVMTDsKKwl1aW50MTZfdCBobWFj
c19sZW4gPSAwOworCXVpbnQ4X3Qgc2F3X2FzY29uZiA9IDA7CisJdWludDhfdCBzYXdfYXNjb25m
X2FjayA9IDA7CisJdWludDhfdCBjaHVua3Nfc3RvcmVbU0NUUF9QQVJBTV9CVUZGRVJfU0laRV07
CisJc3RydWN0IHNjdHBfYXV0aF9jaHVua19saXN0ICpjaHVua3MgPSBOVUxMOworCXVpbnQxNl90
IG51bV9jaHVua3MgPSAwOworCXNjdHBfa2V5X3QgKm5ld19rZXk7CisJdWludDMyX3Qga2V5bGVu
OworCWludCBnb3RfcmFuZG9tID0gMCwgZ290X2htYWNzID0gMCwgZ290X2Noa2xpc3QgPSAwOwor
CXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19lY247CisJdWludDhfdCBwZWVyX3N1cHBvcnRzX3Byc2N0
cDsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfYXV0aDsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNf
YXNjb25mOworCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19hc2NvbmZfYWNrOworCXVpbnQ4X3QgcGVl
cl9zdXBwb3J0c19yZWNvbmZpZzsKKwl1aW50OF90IHBlZXJfc3VwcG9ydHNfbnJzYWNrOworCXVp
bnQ4X3QgcGVlcl9zdXBwb3J0c19wa3Rkcm9wOworCXVpbnQ4X3QgcGVlcl9zdXBwb3J0c19pZGF0
YTsKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKwkvKiBGaXJzdCBn
ZXQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3Mgc2V0dXAgdG9vLiAqLworI2lmZGVmIElORVQKKwlt
ZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHNpbikpOworCXNpbi5zaW5fZmFtaWx5ID0gQUZfSU5FVDsK
KyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4uc2luX2xlbiA9IHNpemVvZihzaW4pOworI2VuZGlm
CisJc2luLnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCW1l
bXNldCgmc2luNiwgMCwgc2l6ZW9mKHNpbjYpKTsKKwlzaW42LnNpbjZfZmFtaWx5ID0gQUZfSU5F
VDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlzaW42LnNpbjZfcG9ydCA9IHN0Y2ItPnJwb3J0Owor
I2VuZGlmCisJaWYgKGFsdHNhKSB7CisJCXNhID0gYWx0c2E7CisJfSBlbHNlIHsKKwkJc2EgPSBz
cmM7CisJfQorCXBlZXJfc3VwcG9ydHNfaWRhdGEgPSAwOworCXBlZXJfc3VwcG9ydHNfZWNuID0g
MDsKKwlwZWVyX3N1cHBvcnRzX3Byc2N0cCA9IDA7CisJcGVlcl9zdXBwb3J0c19hdXRoID0gMDsK
KwlwZWVyX3N1cHBvcnRzX2FzY29uZiA9IDA7CisJcGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9IDA7
CisJcGVlcl9zdXBwb3J0c19ucnNhY2sgPSAwOworCXBlZXJfc3VwcG9ydHNfcGt0ZHJvcCA9IDA7
CisJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkv
KiBtYXJrIGFsbCBhZGRyZXNzZXMgdGhhdCB3ZSBoYXZlIGN1cnJlbnRseSBvbiB0aGUgbGlzdCAq
LworCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PVF9JTl9BU1NPQzsKKwl9CisJLyog
ZG9lcyB0aGUgc291cmNlIGFkZHJlc3MgYWxyZWFkeSBleGlzdD8gaWYgc28gc2tpcCBpdCAqLwor
CWlucCA9IHN0Y2ItPnNjdHBfZXA7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250
LCAxKTsKKwlzdGNiX3RtcCA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgc2Es
ICZuZXRfdG1wLCBkc3QsIHN0Y2IpOworCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgLTEpOworCisJaWYgKChzdGNiX3RtcCA9PSBOVUxMICYmIGlucCA9PSBzdGNiLT5zY3RwX2Vw
KSB8fCBpbnAgPT0gTlVMTCkgeworCQkvKiB3ZSBtdXN0IGFkZCB0aGUgc291cmNlIGFkZHJlc3Mg
Ki8KKwkJLyogbm8gc2NvcGUgc2V0IGhlcmUgc2luY2Ugd2UgaGF2ZSBhIHRjYiBhbHJlYWR5LiAq
LworCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5F
VDoKKwkJCWlmIChzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbCkgeworCQkJCWlmIChz
Y3RwX2FkZF9yZW1vdGVfYWRkcihzdGNiLCBzYSwgTlVMTCwgcG9ydCwgU0NUUF9ET05PVF9TRVRT
Q09QRSwgU0NUUF9MT0FEX0FERFJfMikpIHsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJ
fQorCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJ
aWYgKHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNjdHBfYWRk
X3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFNDT1BFLCBT
Q1RQX0xPQURfQUREUl8zKSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9CisJCQli
cmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJY2FzZSBBRl9DT05O
OgorCQkJaWYgKHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsKSB7CisJCQkJaWYgKHNj
dHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NFVFND
T1BFLCBTQ1RQX0xPQURfQUREUl8zKSkgeworCQkJCQlyZXR1cm4gKC0yKTsKKwkJCQl9CisJCQl9
CisJCQlicmVhazsKKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2Ug
eworCQlpZiAobmV0X3RtcCAhPSBOVUxMICYmIHN0Y2JfdG1wID09IHN0Y2IpIHsKKwkJCW5ldF90
bXAtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9OT1RfSU5fQVNTT0M7CisJCX0gZWxzZSBpZiAo
c3RjYl90bXAgIT0gc3RjYikgeworCQkJLyogSXQgYmVsb25ncyB0byBhbm90aGVyIGFzc29jaWF0
aW9uPyAqLworCQkJaWYgKHN0Y2JfdG1wKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiX3RtcCk7
CisJCQlyZXR1cm4gKC0zKTsKKwkJfQorCX0KKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7
CisJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICovCisJCXJldHVybiAoLTQpOworCX0KKwkvKiBu
b3cgd2UgbXVzdCBnbyB0aHJvdWdoIGVhY2ggb2YgdGhlIHBhcmFtcy4gKi8KKwlwaGRyID0gc2N0
cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsICZwYXJhbV9idWYsIHNpemVvZihwYXJhbV9idWYp
KTsKKwl3aGlsZSAocGhkcikgeworCQlwdHlwZSA9IG50b2hzKHBoZHItPnBhcmFtX3R5cGUpOwor
CQlwbGVuID0gbnRvaHMocGhkci0+cGFyYW1fbGVuZ3RoKTsKKwkJLyoKKwkJICogU0NUUF9QUklO
VEYoInB0eXBlID0+ICUweCwgcGxlbiA9PiAlZFxuIiwgKHVpbnQzMl90KXB0eXBlLAorCQkgKiAo
aW50KXBsZW4pOworCQkgKi8KKwkJaWYgKG9mZnNldCArIHBsZW4gPiBsaW1pdCkgeworCQkJYnJl
YWs7CisJCX0KKwkJaWYgKHBsZW4gPT0gMCkgeworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBJTkVU
CisJCWlmIChwdHlwZSA9PSBTQ1RQX0lQVjRfQUREUkVTUykgeworCQkJaWYgKHN0Y2ItPmFzb2Mu
c2NvcGUuaXB2NF9hZGRyX2xlZ2FsKSB7CisJCQkJc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0g
KnA0LCBwNF9idWY7CisKKwkJCQkvKiBvayBnZXQgdGhlIHY0IGFkZHJlc3MgYW5kIGNoZWNrL2Fk
ZCAqLworCQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkg
ICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDRfYnVmLAorCQkJCQkJCSAgIHNpemVvZihwNF9i
dWYpKTsKKwkJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0p
IHx8CisJCQkJICAgIHBoZHIgPT0gTlVMTCkgeworCQkJCQlyZXR1cm4gKC01KTsKKwkJCQl9CisJ
CQkJcDQgPSAoc3RydWN0IHNjdHBfaXB2NGFkZHJfcGFyYW0gKilwaGRyOworCQkJCXNpbi5zaW5f
YWRkci5zX2FkZHIgPSBwNC0+YWRkcjsKKwkJCQlpZiAoSU5fTVVMVElDQVNUKG50b2hsKHNpbi5z
aW5fYWRkci5zX2FkZHIpKSkgeworCQkJCQkvKiBTa2lwIG11bHRpLWNhc3QgYWRkcmVzc2VzICov
CisJCQkJCWdvdG8gbmV4dF9wYXJhbTsKKwkJCQl9CisJCQkJaWYgKChzaW4uc2luX2FkZHIuc19h
ZGRyID09IElOQUREUl9CUk9BRENBU1QpIHx8CisJCQkJICAgIChzaW4uc2luX2FkZHIuc19hZGRy
ID09IElOQUREUl9BTlkpKSB7CisJCQkJCWdvdG8gbmV4dF9wYXJhbTsKKwkJCQl9CisJCQkJc2Eg
PSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJ
CWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJc3RjYl90bXAgPSBz
Y3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCAmbmV0LAorCQkJCQkJCQkJZHN0
LCBzdGNiKTsKKwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwor
CQkJCWlmICgoc3RjYl90bXAgPT0gTlVMTCAmJiBpbnAgPT0gc3RjYi0+c2N0cF9lcCkgfHwKKwkJ
CQkgICAgaW5wID09IE5VTEwpIHsKKwkJCQkJLyogd2UgbXVzdCBhZGQgdGhlIHNvdXJjZSBhZGRy
ZXNzICovCisJCQkJCS8qCisJCQkJCSAqIG5vIHNjb3BlIHNldCBzaW5jZSB3ZSBoYXZlIGEgdGNi
CisJCQkJCSAqIGFscmVhZHkKKwkJCQkJICovCisKKwkJCQkJLyoKKwkJCQkJICogd2UgbXVzdCB2
YWxpZGF0ZSB0aGUgc3RhdGUgYWdhaW4KKwkJCQkJICogaGVyZQorCQkJCQkgKi8KKwkJCQlhZGRf
aXRfbm93OgorCQkJCQlpZiAoc3RjYi0+YXNvYy5zdGF0ZSA9PSAwKSB7CisJCQkJCQkvKiB0aGUg
YXNzb2Mgd2FzIGZyZWVkPyAqLworCQkJCQkJcmV0dXJuICgtNyk7CisJCQkJCX0KKwkJCQkJaWYg
KHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NF
VFNDT1BFLCBTQ1RQX0xPQURfQUREUl80KSkgeworCQkJCQkJcmV0dXJuICgtOCk7CisJCQkJCX0K
KwkJCQl9IGVsc2UgaWYgKHN0Y2JfdG1wID09IHN0Y2IpIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Mu
c3RhdGUgPT0gMCkgeworCQkJCQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJl
dHVybiAoLTEwKTsKKwkJCQkJfQorCQkJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQkJCS8qIGNs
ZWFyIGZsYWcgKi8KKwkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPQorCQkJCQkJCX5TQ1RQX0FERFJf
Tk9UX0lOX0FTU09DOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogc3Ry
YW5nZSwgYWRkcmVzcyBpcyBpbiBhbm90aGVyCisJCQkJCSAqIGFzc29jPyBzdHJhaWdodGVuIG91
dCBsb2Nrcy4KKwkJCQkJICovCisJCQkJCWlmIChzdGNiX3RtcCkgeworCQkJCQkJaWYgKFNDVFBf
R0VUX1NUQVRFKCZzdGNiX3RtcC0+YXNvYykgJiBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSB7CisJ
CQkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKwkJCQkJCQljaGFyIG1zZ1tTQ1RQX0RJQUdfSU5G
T19MRU5dOworCisJCQkJCQkJLyogaW4gc2V0dXAgc3RhdGUgd2UgYWJvcnQgdGhpcyBndXkgKi8K
KwkJCQkJCQlzbnByaW50Zihtc2csIHNpemVvZihtc2cpLAorCQkJCQkJCSAgICAgICAgICIlczol
ZCBhdCAlcyIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pOworCQkJCQkJCW9wX2VyciA9
IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2Rl
KSwKKwkJCQkJCQkgICAgICAgICBtc2cpOworCQkJCQkJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRp
b24oc3RjYl90bXAtPnNjdHBfZXAsCisJCQkJCQkJCQkJICBzdGNiX3RtcCwgb3BfZXJyLAorCQkJ
CQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJ
CQlnb3RvIGFkZF9pdF9ub3c7CisJCQkJCQl9CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYl90
bXApOworCQkJCQl9CisKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgeworCQkJCQkJ
LyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJldHVybiAoLTEyKTsKKwkJCQkJfQor
CQkJCQlyZXR1cm4gKC0xMyk7CisJCQkJfQorCQkJfQorCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJCWlmIChwdHlwZSA9PSBTQ1RQX0lQVjZfQUREUkVTUykgeworCQkJaWYgKHN0Y2It
PmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJLyogb2sgZ2V0IHRoZSB2NiBhZGRy
ZXNzIGFuZCBjaGVjay9hZGQgKi8KKwkJCQlzdHJ1Y3Qgc2N0cF9pcHY2YWRkcl9wYXJhbSAqcDYs
IHA2X2J1ZjsKKworCQkJCXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJ
CQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmcDZfYnVmLAorCQkJCQkJCSAgIHNpemVv
ZihwNl9idWYpKTsKKwkJCQlpZiAocGxlbiAhPSBzaXplb2Yoc3RydWN0IHNjdHBfaXB2NmFkZHJf
cGFyYW0pIHx8CisJCQkJICAgIHBoZHIgPT0gTlVMTCkgeworCQkJCQlyZXR1cm4gKC0xNCk7CisJ
CQkJfQorCQkJCXA2ID0gKHN0cnVjdCBzY3RwX2lwdjZhZGRyX3BhcmFtICopcGhkcjsKKwkJCQlt
ZW1jcHkoKGNhZGRyX3QpJnNpbjYuc2luNl9hZGRyLCBwNi0+YWRkciwKKwkJCQkgICAgICAgc2l6
ZW9mKHA2LT5hZGRyKSk7CisJCQkJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi5zaW42
X2FkZHIpKSB7CisJCQkJCS8qIFNraXAgbXVsdGktY2FzdCBhZGRyZXNzZXMgKi8KKwkJCQkJZ290
byBuZXh0X3BhcmFtOworCQkJCX0KKwkJCQlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKCZzaW42
LnNpbjZfYWRkcikpIHsKKwkJCQkJLyogTGluayBsb2NhbCBtYWtlIG5vIHNlbnNlIHdpdGhvdXQg
c2NvcGUgKi8KKwkJCQkJZ290byBuZXh0X3BhcmFtOworCQkJCX0KKwkJCQlzYSA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikmc2luNjsKKwkJCQlpbnAgPSBzdGNiLT5zY3RwX2VwOworCQkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJc3RjYl90bXAgPSBzY3RwX2ZpbmRh
c3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCAmbmV0LAorCQkJCQkJCQkJZHN0LCBzdGNiKTsK
KwkJCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIC0xKTsKKwkJCQlpZiAoc3Rj
Yl90bXAgPT0gTlVMTCAmJgorCQkJCSAgICAoaW5wID09IHN0Y2ItPnNjdHBfZXAgfHwgaW5wID09
IE5VTEwpKSB7CisJCQkJCS8qCisJCQkJCSAqIHdlIG11c3QgdmFsaWRhdGUgdGhlIHN0YXRlIGFn
YWluCisJCQkJCSAqIGhlcmUKKwkJCQkJICovCisJCQkJYWRkX2l0X25vdzY6CisJCQkJCWlmIChz
dGNiLT5hc29jLnN0YXRlID09IDApIHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3YXMgZnJlZWQ/ICov
CisJCQkJCQlyZXR1cm4gKC0xNik7CisJCQkJCX0KKwkJCQkJLyoKKwkJCQkJICogd2UgbXVzdCBh
ZGQgdGhlIGFkZHJlc3MsIG5vIHNjb3BlCisJCQkJCSAqIHNldAorCQkJCQkgKi8KKwkJCQkJaWYg
KHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBwb3J0LCBTQ1RQX0RPTk9UX1NF
VFNDT1BFLCBTQ1RQX0xPQURfQUREUl81KSkgeworCQkJCQkJcmV0dXJuICgtMTcpOworCQkJCQl9
CisJCQkJfSBlbHNlIGlmIChzdGNiX3RtcCA9PSBzdGNiKSB7CisJCQkJCS8qCisJCQkJCSAqIHdl
IG11c3QgdmFsaWRhdGUgdGhlIHN0YXRlIGFnYWluCisJCQkJCSAqIGhlcmUKKwkJCQkJICovCisJ
CQkJCWlmIChzdGNiLT5hc29jLnN0YXRlID09IDApIHsKKwkJCQkJCS8qIHRoZSBhc3NvYyB3YXMg
ZnJlZWQ/ICovCisJCQkJCQlyZXR1cm4gKC0xOSk7CisJCQkJCX0KKwkJCQkJaWYgKG5ldCAhPSBO
VUxMKSB7CisJCQkJCQkvKiBjbGVhciBmbGFnICovCisJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0K
KwkJCQkJCQl+U0NUUF9BRERSX05PVF9JTl9BU1NPQzsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJ
CQkJCS8qCisJCQkJCSAqIHN0cmFuZ2UsIGFkZHJlc3MgaXMgaW4gYW5vdGhlcgorCQkJCQkgKiBh
c3NvYz8gc3RyYWlnaHRlbiBvdXQgbG9ja3MuCisJCQkJCSAqLworCQkJCQlpZiAoc3RjYl90bXAp
IHsKKwkJCQkJCWlmIChTQ1RQX0dFVF9TVEFURSgmc3RjYl90bXAtPmFzb2MpICYgU0NUUF9TVEFU
RV9DT09LSUVfV0FJVCkgeworCQkJCQkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisJCQkJCQkJY2hh
ciBtc2dbU0NUUF9ESUFHX0lORk9fTEVOXTsKKworCQkJCQkJCS8qIGluIHNldHVwIHN0YXRlIHdl
IGFib3J0IHRoaXMgZ3V5ICovCisJCQkJCQkJc25wcmludGYobXNnLCBzaXplb2YobXNnKSwKKwkJ
CQkJCQkgICAgICAgICAiJXM6JWQgYXQgJXMiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19f
KTsKKwkJCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2NhdXNlKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9kaWFnX2luZm9fY29kZSksCisJCQkJCQkJICAgICAgICAgbXNnKTsKKwkJCQkJCQlzY3Rw
X2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0Y2JfdG1wLT5zY3RwX2VwLAorCQkJCQkJCQkJCSAgc3Rj
Yl90bXAsIG9wX2VyciwKKwkJCQkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfU09f
Tk9UX0xPQ0tFRCk7CisJCQkJCQkJZ290byBhZGRfaXRfbm93NjsKKwkJCQkJCX0KKwkJCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiX3RtcCk7CisJCQkJCX0KKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3Rh
dGUgPT0gMCkgeworCQkJCQkJLyogdGhlIGFzc29jIHdhcyBmcmVlZD8gKi8KKwkJCQkJCXJldHVy
biAoLTIxKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKC0yMik7CisJCQkJfQorCQkJfQorCQl9IGVs
c2UKKyNlbmRpZgorCQlpZiAocHR5cGUgPT0gU0NUUF9FQ05fQ0FQQUJMRSkgeworCQkJcGVlcl9z
dXBwb3J0c19lY24gPSAxOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfVUxQX0FEQVBUQVRJ
T04pIHsKKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICE9IFNDVFBfU1RBVEVfT1BFTikgeworCQkJ
CXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdGlvbiBhaSwgKmFpcDsKKworCQkJ
CXBoZHIgPSBzY3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCQkgICAoc3RydWN0
IHNjdHBfcGFyYW1oZHIgKikmYWksIHNpemVvZihhaSkpOworCQkJCWFpcCA9IChzdHJ1Y3Qgc2N0
cF9hZGFwdGF0aW9uX2xheWVyX2luZGljYXRpb24gKilwaGRyOworCQkJCWlmIChhaXApIHsKKwkJ
CQkJc3RjYi0+YXNvYy5wZWVyc19hZGFwdGF0aW9uID0gbnRvaGwoYWlwLT5pbmRpY2F0aW9uKTsK
KwkJCQkJc3RjYi0+YXNvYy5hZGFwdGF0aW9uX25lZWRlZCA9IDE7CisJCQkJfQorCQkJfQorCQl9
IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfU0VUX1BSSU1fQUREUikgeworCQkJc3RydWN0IHNjdHBf
YXNjb25mX2FkZHJfcGFyYW0gbHN0b3JlLCAqZmVlOworCQkJaW50IGxwdHlwZTsKKwkJCXN0cnVj
dCBzb2NrYWRkciAqbHNhID0gTlVMTDsKKyNpZmRlZiBJTkVUCisJCQlzdHJ1Y3Qgc2N0cF9hc2Nv
bmZfYWRkcnY0X3BhcmFtICpmaWk7CisjZW5kaWYKKworCQkJaWYgKHN0Y2ItPmFzb2MuYXNjb25m
X3N1cHBvcnRlZCA9PSAwKSB7CisJCQkJcmV0dXJuICgtMTAwKTsKKwkJCX0KKwkJCWlmIChwbGVu
ID4gc2l6ZW9mKGxzdG9yZSkpIHsKKwkJCQlyZXR1cm4gKC0yMyk7CisJCQl9CisJCQlwaGRyID0g
c2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFy
YW1oZHIgKikmbHN0b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKSB7
CisJCQkJcmV0dXJuICgtMjQpOworCQkJfQorCQkJZmVlID0gKHN0cnVjdCBzY3RwX2FzY29uZl9h
ZGRyX3BhcmFtICopcGhkcjsKKwkJCWxwdHlwZSA9IG50b2hzKGZlZS0+YWRkcnAucGgucGFyYW1f
dHlwZSk7CisJCQlzd2l0Y2ggKGxwdHlwZSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgU0NUUF9J
UFY0X0FERFJFU1M6CisJCQkJaWYgKHBsZW4gIT0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
X2FzY29uZl9hZGRydjRfcGFyYW0pKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJTaXplb2Ygc2V0cHJp
bSBpbiBpbml0L2luaXQgYWNrIG5vdCAlZCBidXQgJWQgLSBpZ25vcmVkXG4iLAorCQkJCQkJICAg
IChpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2FzY29uZl9hZGRydjRfcGFyYW0pLAorCQkJCQkJICAg
IHBsZW4pOworCQkJCX0gZWxzZSB7CisJCQkJCWZpaSA9IChzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWRk
cnY0X3BhcmFtICopZmVlOworCQkJCQlzaW4uc2luX2FkZHIuc19hZGRyID0gZmlpLT5hZGRycC5h
ZGRyOworCQkJCQlsc2EgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJCQl9CisJCQkJYnJl
YWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBTQ1RQX0lQVjZfQUREUkVTUzoKKwkJ
CQlpZiAocGxlbiAhPQorCQkJCSAgICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFy
YW0pKSB7CisJCQkJCVNDVFBfUFJJTlRGKCJTaXplb2Ygc2V0cHJpbSAodjYpIGluIGluaXQvaW5p
dCBhY2sgbm90ICVkIGJ1dCAlZCAtIGlnbm9yZWRcbiIsCisJCQkJCQkgICAgKGludClzaXplb2Yo
c3RydWN0IHNjdHBfYXNjb25mX2FkZHJfcGFyYW0pLAorCQkJCQkJICAgIHBsZW4pOworCQkJCX0g
ZWxzZSB7CisJCQkJCW1lbWNweShzaW42LnNpbjZfYWRkci5zNl9hZGRyLAorCQkJCQkgICAgICAg
ZmVlLT5hZGRycC5hZGRyLAorCQkJCQkgICAgICAgc2l6ZW9mKGZlZS0+YWRkcnAuYWRkcikpOwor
CQkJCQlsc2EgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjY7CisJCQkJfQorCQkJCWJyZWFrOwor
I2VuZGlmCisJCQlkZWZhdWx0OgorCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGxzYSkgeworCQkJ
CSh2b2lkKXNjdHBfc2V0X3ByaW1hcnlfYWRkcihzdGNiLCBzYSwgTlVMTCk7CisJCQl9CisJCX0g
ZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9IQVNfTkFUX1NVUFBPUlQpIHsKKwkJCXN0Y2ItPmFzb2Mu
cGVlcl9zdXBwb3J0c19uYXQgPSAxOworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfUFJTQ1RQ
X1NVUFBPUlRFRCkgeworCQkJLyogUGVlciBzdXBwb3J0cyBwci1zY3RwICovCisJCQlwZWVyX3N1
cHBvcnRzX3Byc2N0cCA9IDE7CisJCX0gZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9TVVBQT1JURURf
Q0hVTktfRVhUKSB7CisJCQkvKiBBIHN1cHBvcnRlZCBleHRlbnNpb24gY2h1bmsgKi8KKwkJCXN0
cnVjdCBzY3RwX3N1cHBvcnRlZF9jaHVua190eXBlc19wYXJhbSAqcHJfc3VwcG9ydGVkOworCQkJ
dWludDhfdCBsb2NhbF9zdG9yZVtTQ1RQX1BBUkFNX0JVRkZFUl9TSVpFXTsKKwkJCWludCBudW1f
ZW50LCBpOworCisJCQlpZiAocGxlbiA+IHNpemVvZihsb2NhbF9zdG9yZSkpIHsKKwkJCQlyZXR1
cm4gKC0zNSk7CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQs
CisJCQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKikmbG9jYWxfc3RvcmUsIHBsZW4pOwor
CQkJaWYgKHBoZHIgPT0gTlVMTCkgeworCQkJCXJldHVybiAoLTI1KTsKKwkJCX0KKwkJCXByX3N1
cHBvcnRlZCA9IChzdHJ1Y3Qgc2N0cF9zdXBwb3J0ZWRfY2h1bmtfdHlwZXNfcGFyYW0gKilwaGRy
OworCQkJbnVtX2VudCA9IHBsZW4gLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpOworCQkJ
Zm9yIChpID0gMDsgaSA8IG51bV9lbnQ7IGkrKykgeworCQkJCXN3aXRjaCAocHJfc3VwcG9ydGVk
LT5jaHVua190eXBlc1tpXSkgeworCQkJCWNhc2UgU0NUUF9BU0NPTkY6CisJCQkJCXBlZXJfc3Vw
cG9ydHNfYXNjb25mID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0FTQ09ORl9BQ0s6
CisJCQkJCXBlZXJfc3VwcG9ydHNfYXNjb25mX2FjayA9IDE7CisJCQkJCWJyZWFrOworCQkJCWNh
c2UgU0NUUF9GT1JXQVJEX0NVTV9UU046CisJCQkJCXBlZXJfc3VwcG9ydHNfcHJzY3RwID0gMTsK
KwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX1BBQ0tFVF9EUk9QUEVEOgorCQkJCQlwZWVyX3N1
cHBvcnRzX3BrdGRyb3AgPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNDVFBfTlJfU0VMRUNU
SVZFX0FDSzoKKwkJCQkJcGVlcl9zdXBwb3J0c19ucnNhY2sgPSAxOworCQkJCQlicmVhazsKKwkJ
CQljYXNlIFNDVFBfU1RSRUFNX1JFU0VUOgorCQkJCQlwZWVyX3N1cHBvcnRzX3JlY29uZmlnID0g
MTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OOgorCQkJCQlwZWVy
X3N1cHBvcnRzX2F1dGggPSAxOworCQkJCQlicmVhazsKKwkJCQljYXNlIFNDVFBfSURBVEE6CisJ
CQkJCXBlZXJfc3VwcG9ydHNfaWRhdGEgPSAxOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0Ogor
CQkJCQkvKiBvbmUgSSBoYXZlIG5vdCBsZWFybmVkIHlldCAqLworCQkJCQlicmVhazsKKworCQkJ
CX0KKwkJCX0KKwkJfSBlbHNlIGlmIChwdHlwZSA9PSBTQ1RQX1JBTkRPTSkgeworCQkJaWYgKHBs
ZW4gPiBzaXplb2YocmFuZG9tX3N0b3JlKSkKKwkJCQlicmVhazsKKwkJCWlmIChnb3RfcmFuZG9t
KSB7CisJCQkJLyogYWxyZWFkeSBwcm9jZXNzZWQgYSBSQU5ET00gKi8KKwkJCQlnb3RvIG5leHRf
cGFyYW07CisJCQl9CisJCQlwaGRyID0gc2N0cF9nZXRfbmV4dF9wYXJhbShtLCBvZmZzZXQsCisJ
CQkJCQkgICAoc3RydWN0IHNjdHBfcGFyYW1oZHIgKilyYW5kb21fc3RvcmUsCisJCQkJCQkgICBw
bGVuKTsKKwkJCWlmIChwaGRyID09IE5VTEwpCisJCQkJcmV0dXJuICgtMjYpOworCQkJcF9yYW5k
b20gPSAoc3RydWN0IHNjdHBfYXV0aF9yYW5kb20gKilwaGRyOworCQkJcmFuZG9tX2xlbiA9IHBs
ZW4gLSBzaXplb2YoKnBfcmFuZG9tKTsKKwkJCS8qIGVuZm9yY2UgdGhlIHJhbmRvbSBsZW5ndGgg
Ki8KKwkJCWlmIChyYW5kb21fbGVuICE9IFNDVFBfQVVUSF9SQU5ET01fU0laRV9SRVFVSVJFRCkg
eworCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19BVVRIMSwgIlNDVFA6IGludmFsaWQgUkFORE9NIGxl
blxuIik7CisJCQkJcmV0dXJuICgtMjcpOworCQkJfQorCQkJZ290X3JhbmRvbSA9IDE7CisJCX0g
ZWxzZSBpZiAocHR5cGUgPT0gU0NUUF9ITUFDX0xJU1QpIHsKKwkJCXVpbnQxNl90IG51bV9obWFj
czsKKwkJCXVpbnQxNl90IGk7CisKKwkJCWlmIChwbGVuID4gc2l6ZW9mKGhtYWNzX3N0b3JlKSkK
KwkJCQlicmVhazsKKwkJCWlmIChnb3RfaG1hY3MpIHsKKwkJCQkvKiBhbHJlYWR5IHByb2Nlc3Nl
ZCBhIEhNQUMgbGlzdCAqLworCQkJCWdvdG8gbmV4dF9wYXJhbTsKKwkJCX0KKwkJCXBoZHIgPSBz
Y3RwX2dldF9uZXh0X3BhcmFtKG0sIG9mZnNldCwKKwkJCQkJCSAgIChzdHJ1Y3Qgc2N0cF9wYXJh
bWhkciAqKWhtYWNzX3N0b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxM
KQorCQkJCXJldHVybiAoLTI4KTsKKwkJCWhtYWNzID0gKHN0cnVjdCBzY3RwX2F1dGhfaG1hY19h
bGdvICopcGhkcjsKKwkJCWhtYWNzX2xlbiA9IHBsZW4gLSBzaXplb2YoKmhtYWNzKTsKKwkJCW51
bV9obWFjcyA9IGhtYWNzX2xlbiAvIHNpemVvZihobWFjcy0+aG1hY19pZHNbMF0pOworCQkJLyog
dmFsaWRhdGUgdGhlIGhtYWMgbGlzdCAqLworCQkJaWYgKHNjdHBfdmVyaWZ5X2htYWNfcGFyYW0o
aG1hY3MsIG51bV9obWFjcykpIHsKKwkJCQlyZXR1cm4gKC0yOSk7CisJCQl9CisJCQlpZiAoc3Rj
Yi0+YXNvYy5wZWVyX2htYWNzICE9IE5VTEwpCisJCQkJc2N0cF9mcmVlX2htYWNsaXN0KHN0Y2It
PmFzb2MucGVlcl9obWFjcyk7CisJCQlzdGNiLT5hc29jLnBlZXJfaG1hY3MgPSBzY3RwX2FsbG9j
X2htYWNsaXN0KG51bV9obWFjcyk7CisJCQlpZiAoc3RjYi0+YXNvYy5wZWVyX2htYWNzICE9IE5V
TEwpIHsKKwkJCQlmb3IgKGkgPSAwOyBpIDwgbnVtX2htYWNzOyBpKyspIHsKKwkJCQkJKHZvaWQp
c2N0cF9hdXRoX2FkZF9obWFjaWQoc3RjYi0+YXNvYy5wZWVyX2htYWNzLAorCQkJCQkJCQkgICBu
dG9ocyhobWFjcy0+aG1hY19pZHNbaV0pKTsKKwkJCQl9CisJCQl9CisJCQlnb3RfaG1hY3MgPSAx
OworCQl9IGVsc2UgaWYgKHB0eXBlID09IFNDVFBfQ0hVTktfTElTVCkgeworCQkJaW50IGk7CisK
KwkJCWlmIChwbGVuID4gc2l6ZW9mKGNodW5rc19zdG9yZSkpCisJCQkJYnJlYWs7CisJCQlpZiAo
Z290X2Noa2xpc3QpIHsKKwkJCQkvKiBhbHJlYWR5IHByb2Nlc3NlZCBhIENodW5rcyBsaXN0ICov
CisJCQkJZ290byBuZXh0X3BhcmFtOworCQkJfQorCQkJcGhkciA9IHNjdHBfZ2V0X25leHRfcGFy
YW0obSwgb2Zmc2V0LAorCQkJCQkJICAgKHN0cnVjdCBzY3RwX3BhcmFtaGRyICopY2h1bmtzX3N0
b3JlLAorCQkJCQkJICAgcGxlbik7CisJCQlpZiAocGhkciA9PSBOVUxMKQorCQkJCXJldHVybiAo
LTMwKTsKKwkJCWNodW5rcyA9IChzdHJ1Y3Qgc2N0cF9hdXRoX2NodW5rX2xpc3QgKilwaGRyOwor
CQkJbnVtX2NodW5rcyA9IHBsZW4gLSBzaXplb2YoKmNodW5rcyk7CisJCQlpZiAoc3RjYi0+YXNv
Yy5wZWVyX2F1dGhfY2h1bmtzICE9IE5VTEwpCisJCQkJc2N0cF9jbGVhcl9jaHVua2xpc3Qoc3Rj
Yi0+YXNvYy5wZWVyX2F1dGhfY2h1bmtzKTsKKwkJCWVsc2UKKwkJCQlzdGNiLT5hc29jLnBlZXJf
YXV0aF9jaHVua3MgPSBzY3RwX2FsbG9jX2NodW5rbGlzdCgpOworCQkJZm9yIChpID0gMDsgaSA8
IG51bV9jaHVua3M7IGkrKykgeworCQkJCSh2b2lkKXNjdHBfYXV0aF9hZGRfY2h1bmsoY2h1bmtz
LT5jaHVua190eXBlc1tpXSwKKwkJCQkJCQkgIHN0Y2ItPmFzb2MucGVlcl9hdXRoX2NodW5rcyk7
CisJCQkJLyogcmVjb3JkIGFzY29uZi9hc2NvbmYtYWNrIGlmIGxpc3RlZCAqLworCQkJCWlmIChj
aHVua3MtPmNodW5rX3R5cGVzW2ldID09IFNDVFBfQVNDT05GKQorCQkJCQlzYXdfYXNjb25mID0g
MTsKKwkJCQlpZiAoY2h1bmtzLT5jaHVua190eXBlc1tpXSA9PSBTQ1RQX0FTQ09ORl9BQ0spCisJ
CQkJCXNhd19hc2NvbmZfYWNrID0gMTsKKworCQkJfQorCQkJZ290X2Noa2xpc3QgPSAxOworCQl9
IGVsc2UgaWYgKChwdHlwZSA9PSBTQ1RQX0hFQVJUQkVBVF9JTkZPKSB8fAorCQkJICAgKHB0eXBl
ID09IFNDVFBfU1RBVEVfQ09PS0lFKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfVU5SRUNPR19Q
QVJBTSkgfHwKKwkJCSAgIChwdHlwZSA9PSBTQ1RQX0NPT0tJRV9QUkVTRVJWRSkgfHwKKwkJCSAg
IChwdHlwZSA9PSBTQ1RQX1NVUFBPUlRFRF9BRERSVFlQRSkgfHwKKwkJCSAgIChwdHlwZSA9PSBT
Q1RQX0FERF9JUF9BRERSRVNTKSB8fAorCQkJICAgKHB0eXBlID09IFNDVFBfREVMX0lQX0FERFJF
U1MpIHx8CisJCQkgICAocHR5cGUgPT0gU0NUUF9FUlJPUl9DQVVTRV9JTkQpIHx8CisJCQkgICAo
cHR5cGUgPT0gU0NUUF9TVUNDRVNTX1JFUE9SVCkpIHsKKwkJCS8qIGRvbid0IGNhcmUgKi8gOwor
CQl9IGVsc2UgeworCQkJaWYgKChwdHlwZSAmIDB4ODAwMCkgPT0gMHgwMDAwKSB7CisJCQkJLyoK
KwkJCQkgKiBtdXN0IHN0b3AgcHJvY2Vzc2luZyB0aGUgcmVzdCBvZiB0aGUKKwkJCQkgKiBwYXJh
bSdzLiBBbnkgcmVwb3J0IGJpdHMgd2VyZSBoYW5kbGVkCisJCQkJICogd2l0aCB0aGUgY2FsbCB0
bworCQkJCSAqIHNjdHBfYXJldGhlcmVfdW5yZWNvZ25pemVkX3BhcmFtZXRlcnMoKQorCQkJCSAq
IHdoZW4gdGhlIElOSVQgb3IgSU5JVC1BQ0sgd2FzIGZpcnN0IHNlZW4uCisJCQkJICovCisJCQkJ
YnJlYWs7CisJCQl9CisJCX0KKworCW5leHRfcGFyYW06CisJCW9mZnNldCArPSBTQ1RQX1NJWkUz
MihwbGVuKTsKKwkJaWYgKG9mZnNldCA+PSBsaW1pdCkgeworCQkJYnJlYWs7CisJCX0KKwkJcGhk
ciA9IHNjdHBfZ2V0X25leHRfcGFyYW0obSwgb2Zmc2V0LCAmcGFyYW1fYnVmLAorCQkJCQkgICBz
aXplb2YocGFyYW1fYnVmKSk7CisJfQorCS8qIE5vdyBjaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0
byBwdXJnZSBhbnkgYWRkcmVzc2VzICovCisJVEFJTFFfRk9SRUFDSF9TQUZFKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0LCBubmV0KSB7CisJCWlmICgobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX05PVF9JTl9BU1NPQykgPT0KKwkJICAgIFNDVFBfQUREUl9OT1RfSU5fQVNTT0Mp
IHsKKwkJCS8qIFRoaXMgYWRkcmVzcyBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGFzb2MgKi8K
KwkJCS8qIHJlbW92ZSBhbmQgZnJlZSBpdCAqLworCQkJc3RjYi0+YXNvYy5udW1uZXRzLS07CisJ
CQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MubmV0cywgbmV0LCBzY3RwX25leHQpOworCQkJc2N0
cF9mcmVlX3JlbW90ZV9hZGRyKG5ldCk7CisJCQlpZiAobmV0ID09IHN0Y2ItPmFzb2MucHJpbWFy
eV9kZXN0aW5hdGlvbikgeworCQkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IE5V
TEw7CisJCQkJc2N0cF9zZWxlY3RfcHJpbWFyeV9kZXN0aW5hdGlvbihzdGNiKTsKKwkJCX0KKwkJ
fQorCX0KKwlpZiAoKHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAocGVl
cl9zdXBwb3J0c19lY24gPT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5lY25fc3VwcG9ydGVkID0gMDsK
Kwl9CisJaWYgKChzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBl
ZXJfc3VwcG9ydHNfcHJzY3RwID09IDApKSB7CisJCXN0Y2ItPmFzb2MucHJzY3RwX3N1cHBvcnRl
ZCA9IDA7CisJfQorCWlmICgoc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9PSAxKSAmJgorCSAg
ICAoKHBlZXJfc3VwcG9ydHNfYXV0aCA9PSAwKSB8fAorCSAgICAgKGdvdF9yYW5kb20gPT0gMCkg
fHwgKGdvdF9obWFjcyA9PSAwKSkpIHsKKwkJc3RjYi0+YXNvYy5hdXRoX3N1cHBvcnRlZCA9IDA7
CisJfQorCWlmICgoc3RjYi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkID09IDEpICYmCisJICAgICgo
cGVlcl9zdXBwb3J0c19hc2NvbmYgPT0gMCkgfHwgKHBlZXJfc3VwcG9ydHNfYXNjb25mX2FjayA9
PSAwKSB8fAorCSAgICAgKHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQgPT0gMCkgfHwKKwkgICAg
IChzYXdfYXNjb25mID09IDApIHx8IChzYXdfYXNjb25mX2FjayA9PSAwKSkpIHsKKwkJc3RjYi0+
YXNvYy5hc2NvbmZfc3VwcG9ydGVkID0gMDsKKwl9CisJaWYgKChzdGNiLT5hc29jLnJlY29uZmln
X3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19yZWNvbmZpZyA9PSAwKSkg
eworCQlzdGNiLT5hc29jLnJlY29uZmlnX3N1cHBvcnRlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+
YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMSkgJiYKKwkgICAgKHBlZXJfc3VwcG9ydHNfaWRhdGEg
PT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPSAwOworCX0KKwlpZiAoKHN0
Y2ItPmFzb2MubnJzYWNrX3N1cHBvcnRlZCA9PSAxKSAmJgorCSAgICAocGVlcl9zdXBwb3J0c19u
cnNhY2sgPT0gMCkpIHsKKwkJc3RjYi0+YXNvYy5ucnNhY2tfc3VwcG9ydGVkID0gMDsKKwl9CisJ
aWYgKChzdGNiLT5hc29jLnBrdGRyb3Bfc3VwcG9ydGVkID09IDEpICYmCisJICAgIChwZWVyX3N1
cHBvcnRzX3BrdGRyb3AgPT0gMCkpeworCQlzdGNiLT5hc29jLnBrdGRyb3Bfc3VwcG9ydGVkID0g
MDsKKwl9CisJLyogdmFsaWRhdGUgYXV0aGVudGljYXRpb24gcmVxdWlyZWQgcGFyYW1ldGVycyAq
LworCWlmICgocGVlcl9zdXBwb3J0c19hdXRoID09IDApICYmIChnb3RfY2hrbGlzdCA9PSAxKSkg
eworCQkvKiBwZWVyIGRvZXMgbm90IHN1cHBvcnQgYXV0aCBidXQgc2VudCBhIGNodW5rcyBsaXN0
PyAqLworCQlyZXR1cm4gKC0zMSk7CisJfQorCWlmICgocGVlcl9zdXBwb3J0c19hc2NvbmYgPT0g
MSkgJiYgKHBlZXJfc3VwcG9ydHNfYXV0aCA9PSAwKSkgeworCQkvKiBwZWVyIHN1cHBvcnRzIGFz
Y29uZiBidXQgbm90IGF1dGg/ICovCisJCXJldHVybiAoLTMyKTsKKwl9IGVsc2UgaWYgKChwZWVy
X3N1cHBvcnRzX2FzY29uZiA9PSAxKSAmJgorCSAgICAgICAgICAgKHBlZXJfc3VwcG9ydHNfYXV0
aCA9PSAxKSAmJgorCQkgICAoKHNhd19hc2NvbmYgPT0gMCkgfHwgKHNhd19hc2NvbmZfYWNrID09
IDApKSkgeworCQlyZXR1cm4gKC0zMyk7CisJfQorCS8qIGNvbmNhdGVuYXRlIHRoZSBmdWxsIHJh
bmRvbSBrZXkgKi8KKwlrZXlsZW4gPSBzaXplb2YoKnBfcmFuZG9tKSArIHJhbmRvbV9sZW4gKyBz
aXplb2YoKmhtYWNzKSArIGhtYWNzX2xlbjsKKwlpZiAoY2h1bmtzICE9IE5VTEwpIHsKKwkJa2V5
bGVuICs9IHNpemVvZigqY2h1bmtzKSArIG51bV9jaHVua3M7CisJfQorCW5ld19rZXkgPSBzY3Rw
X2FsbG9jX2tleShrZXlsZW4pOworCWlmIChuZXdfa2V5ICE9IE5VTEwpIHsKKwkJLyogY29weSBp
biB0aGUgUkFORE9NICovCisJCWlmIChwX3JhbmRvbSAhPSBOVUxMKSB7CisJCQlrZXlsZW4gPSBz
aXplb2YoKnBfcmFuZG9tKSArIHJhbmRvbV9sZW47CisJCQltZW1jcHkobmV3X2tleS0+a2V5LCBw
X3JhbmRvbSwga2V5bGVuKTsKKwkJfSBlbHNlIHsKKwkJCWtleWxlbiA9IDA7CisJCX0KKwkJLyog
YXBwZW5kIGluIHRoZSBBVVRIIGNodW5rcyAqLworCQlpZiAoY2h1bmtzICE9IE5VTEwpIHsKKwkJ
CW1lbWNweShuZXdfa2V5LT5rZXkgKyBrZXlsZW4sIGNodW5rcywKKwkJCSAgICAgICBzaXplb2Yo
KmNodW5rcykgKyBudW1fY2h1bmtzKTsKKwkJCWtleWxlbiArPSBzaXplb2YoKmNodW5rcykgKyBu
dW1fY2h1bmtzOworCQl9CisJCS8qIGFwcGVuZCBpbiB0aGUgSE1BQ3MgKi8KKwkJaWYgKGhtYWNz
ICE9IE5VTEwpIHsKKwkJCW1lbWNweShuZXdfa2V5LT5rZXkgKyBrZXlsZW4sIGhtYWNzLAorCQkJ
ICAgICAgIHNpemVvZigqaG1hY3MpICsgaG1hY3NfbGVuKTsKKwkJfQorCX0gZWxzZSB7CisJCS8q
IGZhaWxlZCB0byBnZXQgbWVtb3J5IGZvciB0aGUga2V5ICovCisJCXJldHVybiAoLTM0KTsKKwl9
CisJaWYgKHN0Y2ItPmFzb2MuYXV0aGluZm8ucGVlcl9yYW5kb20gIT0gTlVMTCkKKwkJc2N0cF9m
cmVlX2tleShzdGNiLT5hc29jLmF1dGhpbmZvLnBlZXJfcmFuZG9tKTsKKwlzdGNiLT5hc29jLmF1
dGhpbmZvLnBlZXJfcmFuZG9tID0gbmV3X2tleTsKKwlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3Rj
Yiwgc3RjYi0+YXNvYy5hdXRoaW5mby5hc3NvY19rZXlpZCk7CisJc2N0cF9jbGVhcl9jYWNoZWRr
ZXlzKHN0Y2IsIHN0Y2ItPmFzb2MuYXV0aGluZm8ucmVjdl9rZXlpZCk7CisKKwlyZXR1cm4gKDAp
OworfQorCitpbnQKK3NjdHBfc2V0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHN0cnVjdCBzb2NrYWRkciAqc2EsCisJCSAgICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sK
KwkvKiBtYWtlIHN1cmUgdGhlIHJlcXVlc3RlZCBwcmltYXJ5IGFkZHJlc3MgZXhpc3RzIGluIHRo
ZSBhc3NvYyAqLworCWlmIChuZXQgPT0gTlVMTCAmJiBzYSkKKwkJbmV0ID0gc2N0cF9maW5kbmV0
KHN0Y2IsIHNhKTsKKworCWlmIChuZXQgPT0gTlVMTCkgeworCQkvKiBkaWRuJ3QgZmluZCB0aGUg
cmVxdWVzdGVkIHByaW1hcnkgYWRkcmVzcyEgKi8KKwkJcmV0dXJuICgtMSk7CisJfSBlbHNlIHsK
KwkJLyogc2V0IHRoZSBwcmltYXJ5IGFkZHJlc3MgKi8KKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJLyogTXVzdCBiZSBjb25maXJtZWQsIHNvIHF1
ZXVlIHRvIHNldCAqLworCQkJbmV0LT5kZXN0X3N0YXRlIHw9IFNDVFBfQUREUl9SRVFfUFJJTUFS
WTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
ID0gbmV0OworCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpICYmIChzdGNi
LT5hc29jLmFsdGVybmF0ZSkpIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29j
LmFsdGVybmF0ZSk7CisJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IE5VTEw7CisJCX0KKwkJbmV0
ID0gVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2MubmV0cyk7CisJCWlmIChuZXQgIT0gc3RjYi0+YXNv
Yy5wcmltYXJ5X2Rlc3RpbmF0aW9uKSB7CisJCQkvKiBmaXJzdCBvbmUgb24gdGhlIGxpc3QgaXMg
Tk9UIHRoZSBwcmltYXJ5CisJCQkgKiBzY3RwX2NtcGFkZHIoKSBpcyBtdWNoIG1vcmUgZWZmaWNp
ZW50IGlmCisJCQkgKiB0aGUgcHJpbWFyeSBpcyB0aGUgZmlyc3Qgb24gdGhlIGxpc3QsIG1ha2Ug
aXQKKwkJCSAqIHNvLgorCQkJICovCisJCQlUQUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2MubmV0cywg
c3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLCBzY3RwX25leHQpOworCQkJVEFJTFFfSU5T
RVJUX0hFQUQoJnN0Y2ItPmFzb2MubmV0cywgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
LCBzY3RwX25leHQpOworCQl9CisJCXJldHVybiAoMCk7CisJfQorfQorCitpbnQKK3NjdHBfaXNf
dnRhZ19nb29kKHVpbnQzMl90IHRhZywgdWludDE2X3QgbHBvcnQsIHVpbnQxNl90IHJwb3J0LCBz
dHJ1Y3QgdGltZXZhbCAqbm93KQoreworCS8qCisJICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgdHdv
IHB1cnBvc2VzLiBJdCB3aWxsIHNlZSBpZiBhIFRBRyBjYW4gYmUKKwkgKiByZS11c2VkIGFuZCBy
ZXR1cm4gMSBmb3IgeWVzIGl0IGlzIG9rIGFuZCAwIGZvciBkb24ndCB1c2UgdGhhdAorCSAqIHRh
Zy4gQSBzZWNvbmRhcnkgZnVuY3Rpb24gaXQgd2lsbCBkbyBpcyBwdXJnZSBvdXQgb2xkIHRhZ3Mg
dGhhdAorCSAqIGNhbiBiZSByZW1vdmVkLgorCSAqLworCXN0cnVjdCBzY3RwdnRhZ2hlYWQgKmNo
YWluOworCXN0cnVjdCBzY3RwX3RhZ2Jsb2NrICp0d2FpdF9ibG9jazsKKwlzdHJ1Y3Qgc2N0cGFz
b2NoZWFkICpoZWFkOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgaTsKKworCVNDVFBf
SU5QX0lORk9fUkxPQ0soKTsKKwloZWFkID0gJlNDVFBfQkFTRV9JTkZPKHNjdHBfYXNvY2hhc2gp
W1NDVFBfUENCSEFTSF9BU09DKHRhZywKKwkJCQkJCQkJU0NUUF9CQVNFX0lORk8oaGFzaGFzb2Nt
YXJrKSldOworCUxJU1RfRk9SRUFDSChzdGNiLCBoZWFkLCBzY3RwX2Fzb2NzKSB7CisJCS8qIFdl
IGNob29zZSBub3QgdG8gbG9jayBhbnl0aGluZyBoZXJlLiBUQ0IncyBjYW4ndCBiZQorCQkgKiBy
ZW1vdmVkIHNpbmNlIHdlIGhhdmUgdGhlIHJlYWQgbG9jaywgc28gdGhleSBjYW4ndAorCQkgKiBi
ZSBmcmVlZCBvbiB1cywgc2FtZSB0aGluZyBmb3IgdGhlIElOUC4gSSBtYXkKKwkJICogYmUgd3Jv
bmcgd2l0aCB0aGlzIGFzc3VtcHRpb24sIGJ1dCB3ZSB3aWxsIGdvCisJCSAqIHdpdGggaXQgZm9y
IG5vdyA6LSkKKwkJICovCisJCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGNi
LT5hc29jLm15X3Z0YWcgPT0gdGFnKSB7CisJCQkvKiBjYW5kaWRhdGUgKi8KKwkJCWlmIChzdGNi
LT5ycG9ydCAhPSBycG9ydCkgeworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfbHBvcnQgIT0gbHBvcnQpIHsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8q
IEl0cyBhIHVzZWQgdGFnIHNldCAqLworCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQly
ZXR1cm4gKDApOworCQl9CisJfQorCWNoYWluID0gJlNDVFBfQkFTRV9JTkZPKHZ0YWdfdGltZXdh
aXQpWyh0YWcgJSBTQ1RQX1NUQUNLX1ZUQUdfSEFTSF9TSVpFKV07CisJLyogTm93IHdoYXQgYWJv
dXQgdGltZWQgd2FpdCA/ICovCisJTElTVF9GT1JFQUNIKHR3YWl0X2Jsb2NrLCBjaGFpbiwgc2N0
cF9ueHRfdGFnYmxvY2spIHsKKwkJLyoKKwkJICogQmxvY2socykgYXJlIHByZXNlbnQsIGxldHMg
c2VlIGlmIHdlIGhhdmUgdGhpcyB0YWcgaW4gdGhlCisJCSAqIGxpc3QKKwkJICovCisJCWZvciAo
aSA9IDA7IGkgPCBTQ1RQX05VTUJFUl9JTl9WVEFHX0JMT0NLOyBpKyspIHsKKwkJCWlmICh0d2Fp
dF9ibG9jay0+dnRhZ19ibG9ja1tpXS52X3RhZyA9PSAwKSB7CisJCQkJLyogbm90IHVzZWQgKi8K
KwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoKGxvbmcpdHdhaXRfYmxvY2stPnZ0YWdfYmxv
Y2tbaV0udHZfc2VjX2F0X2V4cGlyZSAgPAorCQkJCSAgIG5vdy0+dHZfc2VjKSB7CisJCQkJLyog
QXVkaXQgZXhwaXJlcyB0aGlzIGd1eSAqLworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ld
LnR2X3NlY19hdF9leHBpcmUgPSAwOworCQkJCXR3YWl0X2Jsb2NrLT52dGFnX2Jsb2NrW2ldLnZf
dGFnID0gMDsKKwkJCQl0d2FpdF9ibG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9IDA7CisJCQkJ
dHdhaXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPSAwOworCQkJfSBlbHNlIGlmICgodHdh
aXRfYmxvY2stPnZ0YWdfYmxvY2tbaV0udl90YWcgPT0gdGFnKSAmJgorCQkJCSAgICh0d2FpdF9i
bG9jay0+dnRhZ19ibG9ja1tpXS5scG9ydCA9PSBscG9ydCkgJiYKKwkJCQkgICAodHdhaXRfYmxv
Y2stPnZ0YWdfYmxvY2tbaV0ucnBvcnQgPT0gcnBvcnQpKSB7CisJCQkJLyogQmFkIHRhZywgc29y
cnkgOjwgKi8KKwkJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCQlyZXR1cm4gKDApOwor
CQkJfQorCQl9CisJfQorCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCXJldHVybiAoMSk7Cit9
CisKK3N0YXRpYyB2b2lkCitzY3RwX2RyYWluX21idWZzKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikK
K3sKKwkvKgorCSAqIFdlIG11c3QgaHVudCB0aGlzIGFzc29jaWF0aW9uIGZvciBNQlVGJ3MgcGFz
dCB0aGUgY3VtYWNrIChpLmUuCisJICogb3V0IG9mIG9yZGVyIGRhdGEgdGhhdCB3ZSBjYW4gcmVu
ZWdlIG9uKS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwlzdHJ1Y3Qg
c2N0cF90bWl0X2NodW5rICpjaGssICpuY2hrOworCXVpbnQzMl90IGN1bXVsYXRpdmVfdHNuX3Ax
OworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sLCAqbmNvbnRyb2w7CisJaW50
IGNudCwgc3RybWF0OworCXVpbnQzMl90IGdhcCwgaTsKKwlpbnQgZm5kID0gMDsKKworCS8qIFdl
IGxvb2sgZm9yIGFueXRoaW5nIGxhcmdlciB0aGFuIHRoZSBjdW0tYWNrICsgMSAqLworCisJYXNv
YyA9ICZzdGNiLT5hc29jOworCWlmIChhc29jLT5jdW11bGF0aXZlX3RzbiA9PSBhc29jLT5oaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwKSB7CisJCS8qIG5vbmUgd2UgY2FuIHJlbmVnIG9uLiAqLworCQly
ZXR1cm47CisJfQorCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lKTsK
KwljdW11bGF0aXZlX3Rzbl9wMSA9IGFzb2MtPmN1bXVsYXRpdmVfdHNuICsgMTsKKwljbnQgPSAw
OworCS8qIE9rIHRoYXQgd2FzIGZ1biwgbm93IHdlIHdpbGwgZHJhaW4gYWxsIHRoZSBpbmJvdW5k
IHN0cmVhbXM/ICovCisJZm9yIChzdHJtYXQgPSAwOyBzdHJtYXQgPCBhc29jLT5zdHJlYW1pbmNu
dDsgc3RybWF0KyspIHsKKwkJVEFJTFFfRk9SRUFDSF9TQUZFKGNvbnRyb2wsICZhc29jLT5zdHJt
aW5bc3RybWF0XS5pbnF1ZXVlLCBuZXh0X2luc3RybSwgbmNvbnRyb2wpIHsKKyNpZmRlZiBJTlZB
UklBTlRTCisJCQlpZiAoY29udHJvbC0+b25fc3RybV9xICE9IFNDVFBfT05fT1JERVJFRCApIHsK
KwkJCQlwYW5pYygiSHVoIGNvbnRyb2w6ICVwIG9uX3E6ICVkIC0tIG5vdCBvcmRlcmVkPyIsCisJ
CQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25fc3RybV9xKTsKKwkJCX0KKyNlbmRpZgorCQkJ
aWYgKFNDVFBfVFNOX0dUKGNvbnRyb2wtPnNpbmZvX3RzbiwgY3VtdWxhdGl2ZV90c25fcDEpKSB7
CisJCQkJLyogWWVwIGl0IGlzIGFib3ZlIGN1bS1hY2sgKi8KKwkJCQljbnQrKzsKKwkJCQlTQ1RQ
X0NBTENfVFNOX1RPX0dBUChnYXAsIGNvbnRyb2wtPnNpbmZvX3RzbiwgYXNvYy0+bWFwcGluZ19h
cnJheV9iYXNlX3Rzbik7CisJCQkJS0FTU0VSVChjb250cm9sLT5sZW5ndGggPiAwLCAoImNvbnRy
b2wgaGFzIHplcm8gbGVuZ3RoIikpOworCQkJCWlmIChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1z
ID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09
IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJ
cGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAldSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5n
dGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zLCBjb250cm9sLT5sZW5ndGgpOworI2Vs
c2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3RyZWFtcyA9IDA7CisjZW5kaWYKKwkJCQl9CisJ
CQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRfb25fYWxsX3N0cmVhbXMpOworCQkJCVNDVFBf
VU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJCQlpZiAoY29u
dHJvbC0+b25fcmVhZF9xKSB7CisJCQkJCVRBSUxRX1JFTU9WRSgmc3RjYi0+c2N0cF9lcC0+cmVh
ZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQkJCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJ
CQkJfQorCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+c3RybWluW3N0cm1hdF0uaW5xdWV1ZSwgY29u
dHJvbCwgbmV4dF9pbnN0cm0pOworCQkJCWNvbnRyb2wtPm9uX3N0cm1fcSA9IDA7CisJCQkJaWYg
KGNvbnRyb2wtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQkJ
CQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJCQl9CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRy
KGNvbnRyb2wtPndob0Zyb20pOworCQkJCS8qIE5vdyBpdHMgcmVhc20/ICovCisJCQkJVEFJTFFf
Rk9SRUFDSF9TQUZFKGNoaywgJmNvbnRyb2wtPnJlYXNtLCBzY3RwX25leHQsIG5jaGspIHsKKwkJ
CQkJY250Kys7CisJCQkJCVNDVFBfQ0FMQ19UU05fVE9fR0FQKGdhcCwgY2hrLT5yZWMuZGF0YS50
c24sIGFzb2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24pOworCQkJCQlLQVNTRVJUKGNoay0+c2Vu
ZF9zaXplID4gMCwgKCJjaHVuayBoYXMgemVybyBsZW5ndGgiKSk7CisJCQkJCWlmIChhc29jLT5z
aXplX29uX3JlYXNtX3F1ZXVlID49IGNoay0+c2VuZF9zaXplKSB7CisJCQkJCQlhc29jLT5zaXpl
X29uX3JlYXNtX3F1ZXVlIC09IGNoay0+c2VuZF9zaXplOworCQkJCQl9IGVsc2UgeworI2lmZGVm
IElOVkFSSUFOVFMKKwkJCQkJCXBhbmljKCJzaXplX29uX3JlYXNtX3F1ZXVlID0gJXUgc21hbGxl
ciB0aGFuIGNodW5rIGxlbmd0aCAldSIsIGFzb2MtPnNpemVfb25fcmVhc21fcXVldWUsIGNoay0+
c2VuZF9zaXplKTsKKyNlbHNlCisJCQkJCQlhc29jLT5zaXplX29uX3JlYXNtX3F1ZXVlID0gMDsK
KyNlbmRpZgorCQkJCQl9CisJCQkJCXNjdHBfdWNvdW50X2RlY3IoYXNvYy0+Y250X29uX3JlYXNt
X3F1ZXVlKTsKKwkJCQkJU0NUUF9VTlNFVF9UU05fUFJFU0VOVChhc29jLT5tYXBwaW5nX2FycmF5
LCBnYXApOworCQkJCQlUQUlMUV9SRU1PVkUoJmNvbnRyb2wtPnJlYXNtLCBjaGssIHNjdHBfbmV4
dCk7CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCXNjdHBfbV9mcmVlbShjaGstPmRhdGEp
OworCQkJCQkJY2hrLT5kYXRhID0gTlVMTDsKKwkJCQkJfQorCQkJCQlzY3RwX2ZyZWVfYV9jaHVu
ayhzdGNiLCBjaGssIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJfQorCQkJCXNjdHBfZnJlZV9h
X3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCQkJfQorCQl9CisJCVRBSUxRX0ZPUkVBQ0hfU0FGRShj
b250cm9sLCAmYXNvYy0+c3RybWluW3N0cm1hdF0udW5vX2lucXVldWUsIG5leHRfaW5zdHJtLCBu
Y29udHJvbCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCWlmIChjb250cm9sLT5vbl9zdHJtX3Eg
IT0gU0NUUF9PTl9VTk9SREVSRUQgKSB7CisJCQkJcGFuaWMoIkh1aCBjb250cm9sOiAlcCBvbl9x
OiAlZCAtLSBub3QgdW5vcmRlcmVkPyIsCisJCQkJICAgICAgY29udHJvbCwgY29udHJvbC0+b25f
c3RybV9xKTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKFNDVFBfVFNOX0dUKGNvbnRyb2wtPnNpbmZv
X3RzbiwgY3VtdWxhdGl2ZV90c25fcDEpKSB7CisJCQkJLyogWWVwIGl0IGlzIGFib3ZlIGN1bS1h
Y2sgKi8KKwkJCQljbnQrKzsKKwkJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGNvbnRyb2wt
PnNpbmZvX3RzbiwgYXNvYy0+bWFwcGluZ19hcnJheV9iYXNlX3Rzbik7CisJCQkJS0FTU0VSVChj
b250cm9sLT5sZW5ndGggPiAwLCAoImNvbnRyb2wgaGFzIHplcm8gbGVuZ3RoIikpOworCQkJCWlm
IChhc29jLT5zaXplX29uX2FsbF9zdHJlYW1zID49IGNvbnRyb2wtPmxlbmd0aCkgeworCQkJCQlh
c29jLT5zaXplX29uX2FsbF9zdHJlYW1zIC09IGNvbnRyb2wtPmxlbmd0aDsKKwkJCQl9IGVsc2Ug
eworI2lmZGVmIElOVkFSSUFOVFMKKwkJCQkJcGFuaWMoInNpemVfb25fYWxsX3N0cmVhbXMgPSAl
dSBzbWFsbGVyIHRoYW4gY29udHJvbCBsZW5ndGggJXUiLCBhc29jLT5zaXplX29uX2FsbF9zdHJl
YW1zLCBjb250cm9sLT5sZW5ndGgpOworI2Vsc2UKKwkJCQkJYXNvYy0+c2l6ZV9vbl9hbGxfc3Ry
ZWFtcyA9IDA7CisjZW5kaWYKKwkJCQl9CisJCQkJc2N0cF91Y291bnRfZGVjcihhc29jLT5jbnRf
b25fYWxsX3N0cmVhbXMpOworCQkJCVNDVFBfVU5TRVRfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGlu
Z19hcnJheSwgZ2FwKTsKKwkJCQlpZiAoY29udHJvbC0+b25fcmVhZF9xKSB7CisJCQkJCVRBSUxR
X1JFTU9WRSgmc3RjYi0+c2N0cF9lcC0+cmVhZF9xdWV1ZSwgY29udHJvbCwgbmV4dCk7CisJCQkJ
CWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJCQkJfQorCQkJCVRBSUxRX1JFTU9WRSgmYXNvYy0+
c3RybWluW3N0cm1hdF0udW5vX2lucXVldWUsIGNvbnRyb2wsIG5leHRfaW5zdHJtKTsKKwkJCQlj
b250cm9sLT5vbl9zdHJtX3EgPSAwOworCQkJCWlmIChjb250cm9sLT5kYXRhKSB7CisJCQkJCXNj
dHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKKwkJCQkJY29udHJvbC0+ZGF0YSA9IE5VTEw7CisJ
CQkJfQorCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJCQkv
KiBOb3cgaXRzIHJlYXNtPyAqLworCQkJCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZjb250cm9s
LT5yZWFzbSwgc2N0cF9uZXh0LCBuY2hrKSB7CisJCQkJCWNudCsrOworCQkJCQlTQ1RQX0NBTENf
VFNOX1RPX0dBUChnYXAsIGNoay0+cmVjLmRhdGEudHNuLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jh
c2VfdHNuKTsKKwkJCQkJS0FTU0VSVChjaGstPnNlbmRfc2l6ZSA+IDAsICgiY2h1bmsgaGFzIHpl
cm8gbGVuZ3RoIikpOworCQkJCQlpZiAoYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA+PSBjaGst
PnNlbmRfc2l6ZSkgeworCQkJCQkJYXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSAtPSBjaGstPnNl
bmRfc2l6ZTsKKwkJCQkJfSBlbHNlIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCQlwYW5pYygi
c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9ICV1IHNtYWxsZXIgdGhhbiBjaHVuayBsZW5ndGggJXUiLCBh
c29jLT5zaXplX29uX3JlYXNtX3F1ZXVlLCBjaGstPnNlbmRfc2l6ZSk7CisjZWxzZQorCQkJCQkJ
YXNvYy0+c2l6ZV9vbl9yZWFzbV9xdWV1ZSA9IDA7CisjZW5kaWYKKwkJCQkJfQorCQkJCQlzY3Rw
X3Vjb3VudF9kZWNyKGFzb2MtPmNudF9vbl9yZWFzbV9xdWV1ZSk7CisJCQkJCVNDVFBfVU5TRVRf
VFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19hcnJheSwgZ2FwKTsKKwkJCQkJVEFJTFFfUkVNT1ZF
KCZjb250cm9sLT5yZWFzbSwgY2hrLCBzY3RwX25leHQpOworCQkJCQlpZiAoY2hrLT5kYXRhKSB7
CisJCQkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQkJCWNoay0+ZGF0YSA9IE5VTEw7
CisJCQkJCX0KKwkJCQkJc2N0cF9mcmVlX2FfY2h1bmsoc3RjYiwgY2hrLCBTQ1RQX1NPX05PVF9M
T0NLRUQpOworCQkJCX0KKwkJCQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKKwkJ
CX0KKwkJfQorCX0KKwlpZiAoY250KSB7CisJCS8qIFdlIG11c3QgYmFjayBkb3duIHRvIHNlZSB3
aGF0IHRoZSBuZXcgaGlnaGVzdCBpcyAqLworCQlmb3IgKGkgPSBhc29jLT5oaWdoZXN0X3Rzbl9p
bnNpZGVfbWFwOyBTQ1RQX1RTTl9HRShpLCBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuKTsg
aS0tKSB7CisJCQlTQ1RQX0NBTENfVFNOX1RPX0dBUChnYXAsIGksIGFzb2MtPm1hcHBpbmdfYXJy
YXlfYmFzZV90c24pOworCQkJaWYgKFNDVFBfSVNfVFNOX1BSRVNFTlQoYXNvYy0+bWFwcGluZ19h
cnJheSwgZ2FwKSkgeworCQkJCWFzb2MtPmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBpOworCQkJ
CWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKCFmbmQpIHsKKwkJCWFzb2Mt
PmhpZ2hlc3RfdHNuX2luc2lkZV9tYXAgPSBhc29jLT5tYXBwaW5nX2FycmF5X2Jhc2VfdHNuIC0g
MTsKKwkJfQorCisJCS8qCisJCSAqIFF1ZXN0aW9uLCBzaG91bGQgd2UgZ28gdGhyb3VnaCB0aGUg
ZGVsaXZlcnkgcXVldWU/IFRoZSBvbmx5CisJCSAqIHJlYXNvbiB0aGluZ3MgYXJlIG9uIGhlcmUg
aXMgdGhlIGFwcCBub3QgcmVhZGluZyBPUiBhIHAtZC1hcGkgdXAuCisJCSAqIEFuIGF0dGFja2Vy
IENPVUxEIHNlbmQgZW5vdWdoIGluIHRvIGluaXRpYXRlIHRoZSBQRC1BUEkgYW5kIHRoZW4KKwkJ
ICogc2VuZCBhIGJ1bmNoIG9mIHN0dWZmIHRvIG90aGVyIHN0cmVhbXMuLi4gdGhlc2Ugd291bGQg
d2luZCB1cCBvbgorCQkgKiB0aGUgZGVsaXZlcnkgcXVldWUuLiBhbmQgdGhlbiB3ZSB3b3VsZCBu
b3QgZ2V0IHRvIHRoZW0uIEJ1dCBpbgorCQkgKiBvcmRlciB0byBkbyB0aGlzIEkgdGhlbiBoYXZl
IHRvIGJhY2stdHJhY2sgYW5kIHVuLWRlbGl2ZXIKKwkJICogc2VxdWVuY2UgbnVtYmVycyBpbiBz
dHJlYW1zLi4gZWwteXVja28uIEkgdGhpbmsgZm9yIG5vdyB3ZSB3aWxsCisJCSAqIE5PVCBsb29r
IGF0IHRoZSBkZWxpdmVyeSBxdWV1ZSBhbmQgbGVhdmUgaXQgdG8gYmUgc29tZXRoaW5nIHRvCisJ
CSAqIGNvbnNpZGVyIGxhdGVyLiBBbiBhbHRlcm5hdGl2ZSB3b3VsZCBiZSB0byBhYm9ydCB0aGUg
UC1ELUFQSSB3aXRoCisJCSAqIGEgbm90aWZpY2F0aW9uIGFuZCB0aGVuIGRlbGl2ZXIgdGhlIGRh
dGEuLi4uIE9yIGFub3RoZXIgbWV0aG9kCisJCSAqIG1pZ2h0IGJlIHRvIGtlZXAgdHJhY2sgb2Yg
aG93IG1hbnkgdGltZXMgdGhlIHNpdHVhdGlvbiBvY2N1cnMgYW5kCisJCSAqIGlmIHdlIHNlZSBh
IHBvc3NpYmxlIGF0dGFjayB1bmRlcndheSBqdXN0IGFib3J0IHRoZSBhc3NvY2lhdGlvbi4KKwkJ
ICovCisjaWZkZWYgU0NUUF9ERUJVRworCQlTQ1RQREJHKFNDVFBfREVCVUdfUENCMSwgIkZyZWVk
ICVkIGNodW5rcyBmcm9tIHJlbmVnIGhhcnZlc3RcbiIsIGNudCk7CisjZW5kaWYKKwkJLyoKKwkJ
ICogTm93IGRvIHdlIG5lZWQgdG8gZmluZCBhIG5ldworCQkgKiBhc29jLT5oaWdoZXN0X3Rzbl9p
bnNpZGVfbWFwPworCQkgKi8KKwkJYXNvYy0+bGFzdF9yZXZva2VfY291bnQgPSBjbnQ7CisJCSh2
b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmc3RjYi0+YXNvYy5kYWNrX3RpbWVyLnRpbWVyKTsKKwkJ
LypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NP
X05PVF9MT0NLRUQpOworCQlzY3RwX2NodW5rX291dHB1dChzdGNiLT5zY3RwX2VwLCBzdGNiLCBT
Q1RQX09VVFBVVF9GUk9NX0RSQUlOLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0KKwkvKgorCSAq
IEFub3RoZXIgaXNzdWUsIGluIHVuLXNldHRpbmcgdGhlIFRTTidzIGluIHRoZSBtYXBwaW5nIGFy
cmF5IHdlCisJICogRElEIE5PVCBhZGp1c3QgdGhlIGhpZ2hlc3RfdHNuIG1hcmtlci4gIFRoaXMg
d2lsbCBjYXVzZSBvbmUgb2YgdHdvCisJICogdGhpbmdzIHRvIG9jY3VyLiBJdCBtYXkgY2F1c2Ug
dXMgdG8gZG8gZXh0cmEgd29yayBpbiBjaGVja2luZyBmb3IKKwkgKiBvdXIgbWFwcGluZyBhcnJh
eSBtb3ZlbWVudC4gTW9yZSBpbXBvcnRhbnRseSBpdCBtYXkgY2F1c2UgdXMgdG8KKwkgKiBTQUNL
IGV2ZXJ5IGRhdGFncmFtLiBUaGlzIG1heSBub3QgYmUgYSBiYWQgdGhpbmcgdGhvdWdoIHNpbmNl
IHdlCisJICogd2lsbCByZWNvdmVyIG9uY2Ugd2UgZ2V0IG91ciBjdW0tYWNrIGFib3ZlIGFuZCBh
bGwgdGhpcyBzdHVmZiB3ZQorCSAqIGR1bXBlZCByZWNvdmVyZWQuCisJICovCit9CisKK3ZvaWQK
K3NjdHBfZHJhaW4oKQoreworCS8qCisJICogV2UgbXVzdCB3YWxrIHRoZSBQQ0IgbGlzdHMgZm9y
IEFMTCBhc3NvY2lhdGlvbnMgaGVyZS4gVGhlIHN5c3RlbQorCSAqIGlzIExPVyBvbiBNQlVGJ3Mg
YW5kIG5lZWRzIGhlbHAuIFRoaXMgaXMgd2hlcmUgcmVuZWdpbmcgd2lsbAorCSAqIG9jY3VyLiBX
ZSByZWFsbHkgaG9wZSB0aGlzIGRvZXMgTk9UIGhhcHBlbiEKKwkgKi8KKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlWTkVUX0lURVJBVE9S
X0RFQ0wodm5ldF9pdGVyKTsKKyNlbHNlCisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2I7CisKKwlTQ1RQX1NUQVRfSU5DUihzY3Rwc19wcm90b2NvbF9kcmFp
bl9jYWxscyk7CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgewor
CQlyZXR1cm47CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPj0gODAxMDAwCisJVk5FVF9MSVNUX1JMT0NLX05PU0xFRVAoKTsKKwlWTkVU
X0ZPUkVBQ0godm5ldF9pdGVyKSB7CisJCUNVUlZORVRfU0VUKHZuZXRfaXRlcik7CisJCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7CisJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxzKTsKKwkJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9kb19kcmFpbikgPT0gMCkgeworI2lmZGVmIFZJTUFHRQorCQkJY29u
dGludWU7CisjZWxzZQorCQkJcmV0dXJuOworI2VuZGlmCisJCX0KKyNlbmRpZgorCQlTQ1RQX0lO
UF9JTkZPX1JMT0NLKCk7CisJCUxJU1RfRk9SRUFDSChpbnAsICZTQ1RQX0JBU0VfSU5GTyhsaXN0
aGVhZCksIHNjdHBfbGlzdCkgeworCQkJLyogRm9yIGVhY2ggZW5kcG9pbnQgKi8KKwkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xp
c3QsIHNjdHBfdGNibGlzdCkgeworCQkJCS8qIEZvciBlYWNoIGFzc29jaWF0aW9uICovCisJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlzY3RwX2RyYWluX21idWZzKHN0Y2IpOworCQkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
fQorCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJQ1VSVk5FVF9SRVNUT1JFKCk7CisJfQor
CVZORVRfTElTVF9SVU5MT0NLX05PU0xFRVAoKTsKKyNlbmRpZgorfQorCisvKgorICogc3RhcnQg
YSBuZXcgaXRlcmF0b3IKKyAqIGl0ZXJhdGVzIHRocm91Z2ggYWxsIGVuZHBvaW50cyBhbmQgYXNz
b2NpYXRpb25zIGJhc2VkIG9uIHRoZSBwY2Jfc3RhdGUKKyAqIGZsYWdzIGFuZCBhc29jX3N0YXRl
LiAgImFmIiAobWFuZGF0b3J5KSBpcyBleGVjdXRlZCBmb3IgYWxsIG1hdGNoaW5nCisgKiBhc3Nv
Y3MgYW5kICJlZiIgKG9wdGlvbmFsKSBpcyBleGVjdXRlZCB3aGVuIHRoZSBpdGVyYXRvciBjb21w
bGV0ZXMuCisgKiAiaW5wZiIgKG9wdGlvbmFsKSBpcyBleGVjdXRlZCBmb3IgZWFjaCBuZXcgZW5k
cG9pbnQgYXMgaXQgaXMgYmVpbmcKKyAqIGl0ZXJhdGVkIHRocm91Z2guIGlucGUgKG9wdGlvbmFs
KSBpcyBjYWxsZWQgd2hlbiB0aGUgaW5wIGNvbXBsZXRlcworICogaXRzIHdheSB0aHJvdWdoIGFs
bCB0aGUgc3RjYnMuCisgKi8KK2ludAorc2N0cF9pbml0aWF0ZV9pdGVyYXRvcihpbnBfZnVuYyBp
bnBmLAorCQkgICAgICAgYXNvY19mdW5jIGFmLAorCQkgICAgICAgaW5wX2Z1bmMgaW5wZSwKKwkJ
ICAgICAgIHVpbnQzMl90IHBjYl9zdGF0ZSwKKwkJICAgICAgIHVpbnQzMl90IHBjYl9mZWF0dXJl
cywKKwkJICAgICAgIHVpbnQzMl90IGFzb2Nfc3RhdGUsCisJCSAgICAgICB2b2lkICphcmdwLAor
CQkgICAgICAgdWludDMyX3QgYXJnaSwKKwkJICAgICAgIGVuZF9mdW5jIGVmLAorCQkgICAgICAg
c3RydWN0IHNjdHBfaW5wY2IgKnNfaW5wLAorCQkgICAgICAgdWludDhfdCBjaHVua19vdXRwdXRf
b2ZmKQoreworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICppdCA9IE5VTEw7CisKKwlpZiAoYWYgPT0g
TlVMTCkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2Jf
aW5pdGlhbGl6ZWQpID09IDApIHsKKwkJU0NUUF9QUklOVEYoIiVzOiBhYm9ydCBvbiBpbml0aWFs
aXplIGJlaW5nICVkXG4iLCBfX2Z1bmNfXywKKwkJICAgICAgICAgICAgU0NUUF9CQVNFX1ZBUihz
Y3RwX3BjYl9pbml0aWFsaXplZCkpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJU0NUUF9NQUxMT0Mo
aXQsIHN0cnVjdCBzY3RwX2l0ZXJhdG9yICosIHNpemVvZihzdHJ1Y3Qgc2N0cF9pdGVyYXRvciks
CisJCSAgICBTQ1RQX01fSVRFUik7CisJaWYgKGl0ID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QQ0IsIEVOT01FTSk7CisJ
CXJldHVybiAoRU5PTUVNKTsKKwl9CisJbWVtc2V0KGl0LCAwLCBzaXplb2YoKml0KSk7CisJaXQt
PmZ1bmN0aW9uX2Fzc29jID0gYWY7CisJaXQtPmZ1bmN0aW9uX2lucCA9IGlucGY7CisJaWYgKGlu
cGYpCisJCWl0LT5kb25lX2N1cnJlbnRfZXAgPSAwOworCWVsc2UKKwkJaXQtPmRvbmVfY3VycmVu
dF9lcCA9IDE7CisJaXQtPmZ1bmN0aW9uX2F0ZW5kID0gZWY7CisJaXQtPnBvaW50ZXIgPSBhcmdw
OworCWl0LT52YWwgPSBhcmdpOworCWl0LT5wY2JfZmxhZ3MgPSBwY2Jfc3RhdGU7CisJaXQtPnBj
Yl9mZWF0dXJlcyA9IHBjYl9mZWF0dXJlczsKKwlpdC0+YXNvY19zdGF0ZSA9IGFzb2Nfc3RhdGU7
CisJaXQtPmZ1bmN0aW9uX2lucF9lbmQgPSBpbnBlOworCWl0LT5ub19jaHVua19vdXRwdXQgPSBj
aHVua19vdXRwdXRfb2ZmOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMTAwMAorCWl0LT52biA9IGN1cnZuZXQ7CisjZW5kaWYKKwlpZiAoc19pbnAp
IHsKKwkJLyogQXNzdW1lIGxvY2sgaXMgaGVsZCBoZXJlICovCisJCWl0LT5pbnAgPSBzX2lucDsK
KwkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCWl0LT5pdGVyYXRvcl9mbGFncyA9IFND
VFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUDsKKwl9IGVsc2UgeworCQlTQ1RQX0lOUF9JTkZPX1JM
T0NLKCk7CisJCWl0LT5pbnAgPSBMSVNUX0ZJUlNUKCZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCkp
OworCQlpZiAoaXQtPmlucCkgeworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaXQtPmlucCk7CisJCX0K
KwkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCWl0LT5pdGVyYXRvcl9mbGFncyA9IFNDVFBf
SVRFUkFUT1JfRE9fQUxMX0lOUDsKKworCX0KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9MT0NLKCk7
CisJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKKwkJU0NU
UF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCk7CisJCVNDVFBfUFJJTlRGKCIlczogcm9sbGJhY2sg
b24gaW5pdGlhbGl6ZSBiZWluZyAlZCBpdD0lcFxuIiwgX19mdW5jX18sCisJCSAgICAgICAgICAg
IFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpLCBpdCk7CisJCVNDVFBfRlJFRShp
dCwgU0NUUF9NX0lURVIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJVEFJTFFfSU5TRVJUX1RBSUwo
JnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7CisJaWYgKHNjdHBf
aXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcgPT0gMCkgeworCQlzY3RwX3dha2V1cF9pdGVyYXRvcigp
OworCX0KKwlTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKTsKKwkvKiBzYV9pZ25vcmUgTUVN
TEVBSyB7bWVtb3J5IGlzIHB1dCBvbiB0aGUgdGFpbHEgZm9yIHRoZSBpdGVyYXRvcn0gKi8KKwly
ZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGNiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuaAppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zNDg4MTg2M2ZmYWExN2Iy
MWE1MGU1Nzk0MzQxNDJhYzMyZjU4YmQ3IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9wY2IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9wY2IuaApAQCAtMCwwICsxLDg4NyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3BjYi5oIDMyNTM3MCAy
MDE3LTExLTAzIDIwOjQ2OjEyWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElO
RVRfU0NUUF9QQ0JfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9QQ0JfSF8KKworI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9vcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3Rs
Lmg+CisKK0xJU1RfSEVBRChzY3RwcGNiaGVhZCwgc2N0cF9pbnBjYik7CitMSVNUX0hFQUQoc2N0
cGFzb2NoZWFkLCBzY3RwX3RjYik7CitMSVNUX0hFQUQoc2N0cGxhZGRyLCBzY3RwX2xhZGRyKTsK
K0xJU1RfSEVBRChzY3RwdnRhZ2hlYWQsIHNjdHBfdGFnYmxvY2spOworTElTVF9IRUFEKHNjdHBf
dnJmbGlzdCwgc2N0cF92cmYpOworTElTVF9IRUFEKHNjdHBfaWZubGlzdCwgc2N0cF9pZm4pOwor
TElTVF9IRUFEKHNjdHBfaWZhbGlzdCwgc2N0cF9pZmEpOworVEFJTFFfSEVBRChzY3RwX3JlYWRo
ZWFkLCBzY3RwX3F1ZXVlZF90b19yZWFkKTsKK1RBSUxRX0hFQUQoc2N0cF9zdHJlYW1oZWFkLCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nKTsKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9zdHJ1
Y3RzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKworI2RlZmluZSBTQ1RQX1BD
QkhBU0hfQUxMQUREUihwb3J0LCBtYXNrKSAocG9ydCAmIG1hc2spCisjZGVmaW5lIFNDVFBfUENC
SEFTSF9BU09DKHRhZywgbWFzaykgKHRhZyAmIG1hc2spCisKK3N0cnVjdCBzY3RwX3ZyZiB7CisJ
TElTVF9FTlRSWSAoc2N0cF92cmYpIG5leHRfdnJmOworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKnZy
Zl9hZGRyX2hhc2g7CisJc3RydWN0IHNjdHBfaWZubGlzdCBpZm5saXN0OworCXVpbnQzMl90IHZy
Zl9pZDsKKwl1aW50MzJfdCB0YmxfaWRfdjQ7CQkvKiBkZWZhdWx0IHY0IHRhYmxlIGlkICovCisJ
dWludDMyX3QgdGJsX2lkX3Y2OwkJLyogZGVmYXVsdCB2NiB0YWJsZSBpZCAqLworCXVpbnQzMl90
IHRvdGFsX2lmYV9jb3VudDsKKwl1X2xvbmcgICB2cmZfYWRkcl9oYXNobWFyazsKKwl1aW50MzJf
dCByZWZjb3VudDsKK307CisKK3N0cnVjdCBzY3RwX2lmbiB7CisJc3RydWN0IHNjdHBfaWZhbGlz
dCBpZmFsaXN0OworCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCUxJU1RfRU5UUlkoc2N0cF9pZm4p
IG5leHRfaWZuOworCUxJU1RfRU5UUlkoc2N0cF9pZm4pIG5leHRfYnVja2V0OworCXZvaWQgICAg
ICppZm5fcDsJLyogbmV2ZXIgYWNjZXNzIHdpdGhvdXQgYXBwcm9wcmlhdGUgbG9jayAqLworCXVp
bnQzMl90IGlmbl9tdHU7CisJdWludDMyX3QgaWZuX3R5cGU7CisJdWludDMyX3QgaWZuX2luZGV4
OwkvKiBzaG9ydGhhbmQgd2F5IHRvIGxvb2sgYXQgaWZuIGZvciByZWZlcmVuY2UgKi8KKwl1aW50
MzJfdCByZWZjb3VudDsJLyogbnVtYmVyIG9mIHJlZmVyZW5jZSBoZWxkIHNob3VsZCBiZSA+PSBp
ZmFfY291bnQgKi8KKwl1aW50MzJfdCBpZmFfY291bnQ7CS8qIElGQSdzIHdlIGhvbGQgKGluIG91
ciBsaXN0IC0gaWZhbGlzdCkqLworCXVpbnQzMl90IG51bV92NjsJLyogbnVtYmVyIG9mIHY2IGFk
ZHJlc3NlcyAqLworCXVpbnQzMl90IG51bV92NDsJLyogbnVtYmVyIG9mIHY0IGFkZHJlc3NlcyAq
LworCXVpbnQzMl90IHJlZ2lzdGVyZWRfYWY7CS8qIHJlZ2lzdGVyZWQgYWRkcmVzcyBmYW1pbHkg
Zm9yIGkvZiBldmVudHMgKi8KKwljaGFyICAgICBpZm5fbmFtZVtTQ1RQX0lGTkFNU0laXTsKK307
CisKKy8qIFNDVFAgbG9jYWwgSUZBIGZsYWdzICovCisjZGVmaW5lIFNDVFBfQUREUl9WQUxJRCAg
ICAgICAgIDB4MDAwMDAwMDEJLyogaXRzIHVwIGFuZCBhY3RpdmUgKi8KKyNkZWZpbmUgU0NUUF9C
RUlOR19ERUxFVEVEICAgICAgMHgwMDAwMDAwMgkvKiBiZWluZyBkZWxldGVkLAorCQkJCQkJICog
d2hlbiByZWZjb3VudCA9IDAuIE5vdGUKKwkJCQkJCSAqIHRoYXQgaXQgaXMgcHVsbGVkIGZyb20g
dGhlIGlmbiBsaXN0CisJCQkJCQkgKiBhbmQgaWZhX3AgaXMgbnVsbGVkIHJpZ2h0IGF3YXkgYnV0
CisJCQkJCQkgKiBpdCBjYW5ub3QgYmUgZnJlZWQgdW50aWwgdGhlIGxhc3QgKm5ldAorCQkJCQkJ
ICogcG9pbnRpbmcgdG8gaXQgaXMgZGVsZXRlZC4KKwkJCQkJCSAqLworI2RlZmluZSBTQ1RQX0FE
RFJfREVGRVJfVVNFICAgICAweDAwMDAwMDA0CS8qIEhvbGQgb2ZmIHVzaW5nIHRoaXMgb25lICov
CisjZGVmaW5lIFNDVFBfQUREUl9JRkFfVU5VU0VBQkxFIDB4MDAwMDAwMDgKKworc3RydWN0IHNj
dHBfaWZhIHsKKwlMSVNUX0VOVFJZKHNjdHBfaWZhKSBuZXh0X2lmYTsKKwlMSVNUX0VOVFJZKHNj
dHBfaWZhKSBuZXh0X2J1Y2tldDsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKmlmbl9wOwkvKiBiYWNrIHBv
aW50ZXIgdG8gcGFyZW50IGlmbiAqLworCXZvaWQgICAgKmlmYTsJCS8qIHBvaW50ZXIgdG8gaWZh
LCBuZWVkZWQgZm9yIGZsYWcKKwkJCQkgKiB1cGRhdGUgZm9yIHRoYXQgd2UgTVVTVCBsb2NrCisJ
CQkJICogYXBwcm9wcmlhdGUgbG9ja3MuIFRoaXMgaXMgZm9yIFY2LgorCQkJCSAqLworCXVuaW9u
IHNjdHBfc29ja3N0b3JlIGFkZHJlc3M7CisJdWludDMyX3QgcmVmY291bnQ7CS8qIG51bWJlciBv
ZiBmb2xrcyByZWZlcnJpbmcgdG8gdGhpcyAqLworCXVpbnQzMl90IGZsYWdzOworCXVpbnQzMl90
IGxvY2FsaWZhX2ZsYWdzOworCXVpbnQzMl90IHZyZl9pZDsJLyogdnJmX2lkIG9mIHRoaXMgYWRk
ciAoZm9yIGRlbGV0aW5nKSAqLworCXVpbnQ4X3Qgc3JjX2lzX2xvb3A7CisJdWludDhfdCBzcmNf
aXNfcHJpdjsKKwl1aW50OF90IHNyY19pc19nbG9iOworCXVpbnQ4X3QgcmVzdjsKK307CisKK3N0
cnVjdCBzY3RwX2xhZGRyIHsKKwlMSVNUX0VOVFJZKHNjdHBfbGFkZHIpIHNjdHBfbnh0X2FkZHI7
CS8qIG5leHQgaW4gbGlzdCAqLworCXN0cnVjdCBzY3RwX2lmYSAqaWZhOworCXVpbnQzMl90IGFj
dGlvbjsJCS8qIFVzZWQgZHVyaW5nIGFzY29uZiBhbmQgYWRkaW5nCisJCQkJCSAqIGlmIG5vLXpl
cm8gc3JjLWFkZHIgc2VsZWN0aW9uIHdpbGwKKwkJCQkJICogbm90IGNvbnNpZGVyIHRoaXMgYWRk
cmVzcy4KKwkJCQkJICovCisJc3RydWN0IHRpbWV2YWwgc3RhcnRfdGltZTsgICAgICAvKiB0aW1l
IHdoZW4gdGhpcyBhZGRyZXNzIHdhcyBjcmVhdGVkICovCit9OworCitzdHJ1Y3Qgc2N0cF9ibG9j
a19lbnRyeSB7CisJaW50IGVycm9yOworfTsKKworc3RydWN0IHNjdHBfdGltZXdhaXQgeworCXVp
bnQzMl90IHR2X3NlY19hdF9leHBpcmU7CS8qIHRoZSBzZWNvbmRzIGZyb20gYm9vdCB0byBleHBp
cmUgKi8KKyAgICAgICAgdWludDMyX3Qgdl90YWc7CQkgICAgICAgIC8qIHRoZSB2dGFnIHRoYXQg
Y2FuIG5vdCBiZSByZXVzZWQgKi8KKyAgICAgICAgdWludDE2X3QgbHBvcnQ7ICAgICAgICAgICAg
ICAgICAvKiB0aGUgbG9jYWwgcG9ydCB1c2VkIGluIHZ0YWcgKi8KKyAgICAgICAgdWludDE2X3Qg
cnBvcnQ7ICAgICAgICAgICAgICAgICAvKiB0aGUgcmVtb3RlIHBvcnQgdXNlZCBpbiB2dGFnICov
Cit9OworCitzdHJ1Y3Qgc2N0cF90YWdibG9jayB7CisJTElTVF9FTlRSWShzY3RwX3RhZ2Jsb2Nr
KSBzY3RwX254dF90YWdibG9jazsKKwlzdHJ1Y3Qgc2N0cF90aW1ld2FpdCB2dGFnX2Jsb2NrW1ND
VFBfTlVNQkVSX0lOX1ZUQUdfQkxPQ0tdOworfTsKKworCitzdHJ1Y3Qgc2N0cF9lcGluZm8gewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWZkZWYgSU5FVAorCXN0cnVjdCBzb2NrZXQgKnVk
cDRfdHVuX3NvY2tldDsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJc3RydWN0IHNvY2tldCAqdWRw
Nl90dW5fc29ja2V0OworI2VuZGlmCisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkICpzY3Rw
X2Fzb2NoYXNoOworCXVfbG9uZyBoYXNoYXNvY21hcms7CisKKwlzdHJ1Y3Qgc2N0cHBjYmhlYWQg
KnNjdHBfZXBoYXNoOworCXVfbG9uZyBoYXNobWFyazsKKworCS8qLQorCSAqIFRoZSBUQ1AgbW9k
ZWwgcmVwcmVzZW50cyBhIHN1YnN0YW50aWFsIG92ZXJoZWFkIGluIHRoYXQgd2UgZ2V0IGFuCisJ
ICogYWRkaXRpb25hbCBoYXNoIHRhYmxlIHRvIGtlZXAgZXhwbGljaXQgY29ubmVjdGlvbnMgaW4u
IFRoZQorCSAqIGxpc3RlbmluZyBUQ1AgZW5kcG9pbnQgd2lsbCBleGlzdCBpbiB0aGUgdXN1YWwg
ZXBoYXNoIGFib3ZlIGFuZAorCSAqIGFjY2VwdCBvbmx5IElOSVQncy4gSXQgd2lsbCBiZSBpbmNh
cGFibGUgb2Ygc2VuZGluZyBvZmYgYW4gSU5JVC4KKwkgKiBXaGVuIGEgZGcgYXJyaXZlcyB3ZSBt
dXN0IGxvb2sgaW4gdGhlIG5vcm1hbCBlcGhhc2guIElmIHdlIGZpbmQgYQorCSAqIFRDUCBlbmRw
b2ludCB0aGF0IHdpbGwgdGVsbCB1cyB0byBnbyB0byB0aGUgc3BlY2lmaWMgZW5kcG9pbnQKKwkg
KiBoYXNoIGFuZCByZS1oYXNoIHRvIGZpbmQgdGhlIHJpZ2h0IGFzc29jL3NvY2tldC4gSWYgd2Ug
ZmluZCBhIFVEUAorCSAqIG1vZGVsIHNvY2tldCB3ZSB0aGVuIG11c3QgY29tcGxldGUgdGhlIGxv
b2t1cC4gSWYgdGhpcyBmYWlscywKKwkgKiBpLmUuIG5vIGFzc29jaWF0aW9uIGNhbiBiZSBmb3Vu
ZCB0aGVuIHdlIG11c3QgY29udGludWUgdG8gc2VlIGlmCisJICogYSBzY3RwX3BlZWxvZmYoKSdk
IHNvY2tldCBpcyBpbiB0aGUgdGNwZXBoYXNoIChhIHNwdW4gb2ZmIHNvY2tldAorCSAqIGFjdHMg
bGlrZSBhIFRDUCBtb2RlbCBjb25uZWN0ZWQgc29ja2V0KS4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cHBj
YmhlYWQgKnNjdHBfdGNwZXBoYXNoOworCXVfbG9uZyBoYXNodGNwbWFyazsKKwl1aW50MzJfdCBo
YXNodGJsc2l6ZTsKKworCXN0cnVjdCBzY3RwX3ZyZmxpc3QgKnNjdHBfdnJmaGFzaDsKKwl1X2xv
bmcgaGFzaHZyZm1hcms7CisKKwlzdHJ1Y3Qgc2N0cF9pZm5saXN0ICp2cmZfaWZuX2hhc2g7CisJ
dV9sb25nICAgdnJmX2lmbl9oYXNobWFyazsKKworCXN0cnVjdCBzY3RwcGNiaGVhZCBsaXN0aGVh
ZDsKKwlzdHJ1Y3Qgc2N0cGxhZGRyIGFkZHJfd3E7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
KwlzdHJ1Y3QgaW5wY2JoZWFkIGlucGxpc3RoZWFkOworCXN0cnVjdCBpbnBjYmluZm8gc2N0Ymlu
Zm87CisjZW5kaWYKKwkvKiBlcCB6b25lIGluZm8gKi8KKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9l
cDsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9hc29jOworCXNjdHBfem9uZV90IGlwaV96b25lX2xh
ZGRyOworCXNjdHBfem9uZV90IGlwaV96b25lX25ldDsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9j
aHVuazsKKwlzY3RwX3pvbmVfdCBpcGlfem9uZV9yZWFkcTsKKwlzY3RwX3pvbmVfdCBpcGlfem9u
ZV9zdHJtb3E7CisJc2N0cF96b25lX3QgaXBpX3pvbmVfYXNjb25mOworCXNjdHBfem9uZV90IGlw
aV96b25lX2FzY29uZl9hY2s7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA+PSA1MDMwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA8PSA2MDIwMDAKKwlz
dHJ1Y3QgbXR4IGlwaV9lcF9tdHg7CisjZWxzZQorCXN0cnVjdCByd2xvY2sgaXBpX2VwX210eDsK
KyNlbmRpZgorCXN0cnVjdCBtdHggaXBpX2l0ZXJhdG9yX3dxX210eDsKKyNpZiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8PSA2MDIwMDAKKwlzdHJ1Y3QgbXR4IGlwaV9hZGRyX210eDsKKyNlbHNlCisJc3Ry
dWN0IHJ3bG9jayBpcGlfYWRkcl9tdHg7CisjZW5kaWYKKwlzdHJ1Y3QgbXR4IGlwaV9wa3Rsb2df
bXR4OworCXN0cnVjdCBtdHggd3FfYWRkcl9tdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VT
U19MRVZFTF9MT0NLUykKKwl1c2VybGFuZF9tdXRleF90IGlwaV9lcF9tdHg7CisJdXNlcmxhbmRf
bXV0ZXhfdCBpcGlfYWRkcl9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpcGlfY291bnRfbXR4Owor
CXVzZXJsYW5kX211dGV4X3QgaXBpX3BrdGxvZ19tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCB3cV9h
ZGRyX210eDsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmZGVmIF9LRVJOX0xPQ0tTX0hf
CisJbGNrX210eF90ICppcGlfYWRkcl9tdHg7CisJbGNrX210eF90ICppcGlfY291bnRfbXR4Owor
CWxja19tdHhfdCAqaXBpX3BrdGxvZ19tdHg7CisJbGNrX210eF90ICpsb2dnaW5nX210eDsKKwls
Y2tfbXR4X3QgKndxX2FkZHJfbXR4OworI2Vsc2UKKwl2b2lkICppcGlfY291bnRfbXR4OworCXZv
aWQgKmxvZ2dpbmdfbXR4OworI2VuZGlmIC8qIF9LRVJOX0xPQ0tTX0hfICovCisjZWxpZiBkZWZp
bmVkKF9fV2luZG93c19fKQorCXN0cnVjdCByd2xvY2sgaXBpX2VwX2xvY2s7CisJc3RydWN0IHJ3
bG9jayBpcGlfYWRkcl9sb2NrOworCXN0cnVjdCBzcGlubG9jayBpcGlfcGt0bG9nX210eDsKKwlz
dHJ1Y3Qgcndsb2NrIHdxX2FkZHJfbXR4OworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
ICAgIC8qIFRPRE8gZGVjaWRlIG9uIF9fVXNlcnNwYWNlX18gbG9ja3MgKi8KKyNlbmRpZgorCXVp
bnQzMl90IGlwaV9jb3VudF9lcDsKKworCS8qIGFzc29jL3RjYiB6b25lIGluZm8gKi8KKwl1aW50
MzJfdCBpcGlfY291bnRfYXNvYzsKKworCS8qIGxvY2FsIGFkZHJsaXN0IHpvbmUgaW5mbyAqLwor
CXVpbnQzMl90IGlwaV9jb3VudF9sYWRkcjsKKworCS8qIHJlbW90ZSBhZGRybGlzdCB6b25lIGlu
Zm8gKi8KKwl1aW50MzJfdCBpcGlfY291bnRfcmFkZHI7CisKKwkvKiBjaHVuayBzdHJ1Y3R1cmUg
bGlzdCBmb3Igb3V0cHV0ICovCisJdWludDMyX3QgaXBpX2NvdW50X2NodW5rOworCisJLyogc29j
a2V0IHF1ZXVlIHpvbmUgaW5mbyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9yZWFkcTsKKworCS8q
IHNvY2tldCBxdWV1ZSB6b25lIGluZm8gKi8KKwl1aW50MzJfdCBpcGlfY291bnRfc3RybW9xOwor
CisJLyogTnVtYmVyIG9mIHZyZnMgKi8KKwl1aW50MzJfdCBpcGlfY291bnRfdnJmczsKKworICAg
ICAgICAvKiBOdW1iZXIgb2YgaWZucyAqLworCXVpbnQzMl90IGlwaV9jb3VudF9pZm5zOworCisg
ICAgICAgIC8qIE51bWJlciBvZiBpZmFzICovCisJdWludDMyX3QgaXBpX2NvdW50X2lmYXM7CisK
KwkvKiBzeXN0ZW0gd2lkZSBudW1iZXIgb2YgZnJlZSBjaHVua3MgaGFuZ2luZyBhcm91bmQgKi8K
Kwl1aW50MzJfdCBpcGlfZnJlZV9jaHVua3M7CisJdWludDMyX3QgaXBpX2ZyZWVfc3RybW9xOwor
CisJc3RydWN0IHNjdHB2dGFnaGVhZCB2dGFnX3RpbWV3YWl0W1NDVFBfU1RBQ0tfVlRBR19IQVNI
X1NJWkVdOworCisJLyogYWRkcmVzcyB3b3JrIHF1ZXVlIGhhbmRsaW5nICovCisJc3RydWN0IHNj
dHBfdGltZXIgYWRkcl93cV90aW1lcjsKKworI2lmIGRlZmluZWQoX1NDVFBfTkVFRFNfQ0FMTE9V
VF8pIHx8IGRlZmluZWQoX1VTRVJfU0NUUF9ORUVEU19DQUxMT1VUXykKKwlzdHJ1Y3QgY2FsbG91
dGxpc3QgY2FsbHF1ZXVlOworI2VuZGlmCit9OworCisKK3N0cnVjdCBzY3RwX2Jhc2VfaW5mbyB7
CisJLyogQWxsIHN0YXRpYyBzdHJ1Y3R1cmVzIHRoYXQKKwkgKiBhbmNob3IgdGhlIHN5c3RlbSBt
dXN0IGJlIGhlcmUuCisJICovCisJc3RydWN0IHNjdHBfZXBpbmZvIHNjdHBwY2JpbmZvOworI2lm
IGRlZmluZWQoX19GcmVlQlNEX18pICYmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNF
X1BFUkNQVV9TVEFUKQorCXN0cnVjdCBzY3Rwc3RhdCAgICAqc2N0cHN0YXQ7CisjZWxzZQorCXN0
cnVjdCBzY3Rwc3RhdCAgICBzY3Rwc3RhdDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3N5c2N0bCBz
Y3Rwc3lzY3RsOworCXVpbnQ4X3QgZmlyc3RfdGltZTsKKwljaGFyIHNjdHBfcGNiX2luaXRpYWxp
emVkOworI2lmIGRlZmluZWQoU0NUUF9QQUNLRVRfTE9HR0lORykKKwlpbnQgcGFja2V0X2xvZ193
cml0ZXJzOworCWludCBwYWNrZXRfbG9nX2VuZDsKKwl1aW50OF90IHBhY2tldF9sb2dfYnVmZmVy
W1NDVFBfUEFDS0VUX0xPR19TSVpFXTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQor
CWludCBzY3RwX21haW5fdGltZXJfdGlja3M7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJdXNlcmxhbmRfbXV0ZXhfdCB0aW1lcl9tdHg7CisJdXNlcmxhbmRfdGhyZWFkX3Qg
dGltZXJfdGhyZWFkOworCWludCB0aW1lcl90aHJlYWRfc2hvdWxkX2V4aXQ7CisjaWYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlwdGhyZWFkX211dGV4YXR0cl90IG10eF9hdHRy
OworI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlpbnQgdXNlcnNwYWNlX3Jv
dXRlOworCXVzZXJsYW5kX3RocmVhZF90IHJlY3Z0aHJlYWRyb3V0ZTsKKyNlbmRpZgorI2VuZGlm
CisjaWZkZWYgSU5FVAorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwlTT0NL
RVQgdXNlcnNwYWNlX3Jhd3NjdHA7CisJU09DS0VUIHVzZXJzcGFjZV91ZHBzY3RwOworI2Vsc2UK
KwlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA7CisJaW50IHVzZXJzcGFjZV91ZHBzY3RwOworI2VuZGlm
CisJdXNlcmxhbmRfdGhyZWFkX3QgcmVjdnRocmVhZHJhdzsKKwl1c2VybGFuZF90aHJlYWRfdCBy
ZWN2dGhyZWFkdWRwOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisJU09DS0VUIHVzZXJzcGFjZV9yYXdzY3RwNjsKKwlTT0NLRVQgdXNl
cnNwYWNlX3VkcHNjdHA2OworI2Vsc2UKKwlpbnQgdXNlcnNwYWNlX3Jhd3NjdHA2OworCWludCB1
c2Vyc3BhY2VfdWRwc2N0cDY7CisjZW5kaWYKKwl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFk
cmF3NjsKKwl1c2VybGFuZF90aHJlYWRfdCByZWN2dGhyZWFkdWRwNjsKKyNlbmRpZgorCWludCAo
KmNvbm5fb3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVp
bnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZik7CisJdm9pZCAoKmRlYnVnX3ByaW50ZikoY29uc3Qg
Y2hhciAqZm9ybWF0LCAuLi4pOworCWludCBjcmMzMmNfb2ZmbG9hZGVkOworI2VuZGlmCit9Owor
CisvKi0KKyAqIEhlcmUgd2UgaGF2ZSBhbGwgdGhlIHJlbGV2YW50IGluZm9ybWF0aW9uIGZvciBl
YWNoIFNDVFAgZW50aXR5IGNyZWF0ZWQuIFdlCisgKiB3aWxsIG5lZWQgdG8gbW9kaWZ5IHRoaXMg
YXMgYXBwcm9wcmF0ZS4gV2UgYWxzbyBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvCisgKiBhY2Nl
c3MgL2Rldi9yYW5kb20uCisgKi8KK3N0cnVjdCBzY3RwX3BjYiB7CisJdW5zaWduZWQgaW50IHRp
bWVfb2Zfc2VjcmV0X2NoYW5nZTsJLyogbnVtYmVyIG9mIHNlY29uZHMgZnJvbQorCQkJCQkJICog
dGltZXZhbC50dl9zZWMgKi8KKwl1aW50MzJfdCBzZWNyZXRfa2V5W1NDVFBfSE9XX01BTllfU0VD
UkVUU11bU0NUUF9OVU1CRVJfT0ZfU0VDUkVUU107CisJdW5zaWduZWQgaW50IHNpemVfb2ZfYV9j
b29raWU7CisKKwl1bnNpZ25lZCBpbnQgc2N0cF90aW1lb3V0dGlja3NbU0NUUF9OVU1fVE1SU107
CisJdW5zaWduZWQgaW50IHNjdHBfbWlucnRvOworCXVuc2lnbmVkIGludCBzY3RwX21heHJ0bzsK
Kwl1bnNpZ25lZCBpbnQgaW5pdGlhbF9ydG87CisJaW50IGluaXRpYWxfaW5pdF9ydG9fbWF4Owor
CisJdW5zaWduZWQgaW50IHNjdHBfc2Fja19mcmVxOworCXVpbnQzMl90IHNjdHBfc3dzX3NlbmRl
cjsKKwl1aW50MzJfdCBzY3RwX3N3c19yZWNlaXZlcjsKKworCXVpbnQzMl90IHNjdHBfZGVmYXVs
dF9jY19tb2R1bGU7CisJdWludDMyX3Qgc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwkvKiBhdXRo
ZW50aWNhdGlvbiByZWxhdGVkIGZpZWxkcyAqLworCXN0cnVjdCBzY3RwX2tleWhlYWQgc2hhcmVk
X2tleXM7CisJc2N0cF9hdXRoX2Noa2xpc3RfdCAqbG9jYWxfYXV0aF9jaHVua3M7CisJc2N0cF9o
bWFjbGlzdF90ICpsb2NhbF9obWFjczsKKwl1aW50MTZfdCBkZWZhdWx0X2tleWlkOworCXVpbnQz
Ml90IGRlZmF1bHRfbXR1OworCisJLyogdmFyaW91cyB0aHJlc2hvbGRzICovCisJLyogTWF4IHRp
bWVzIEkgd2lsbCBpbml0IGF0IGEgZ3V5ICovCisJdWludDE2X3QgbWF4X2luaXRfdGltZXM7CisK
KwkvKiBNYXggdGltZXMgSSB3aWxsIHNlbmQgYmVmb3JlIHdlIGNvbnNpZGVyIHNvbWVvbmUgZGVh
ZCAqLworCXVpbnQxNl90IG1heF9zZW5kX3RpbWVzOworCisJdWludDE2X3QgZGVmX25ldF9mYWls
dXJlOworCisJdWludDE2X3QgZGVmX25ldF9wZl90aHJlc2hvbGQ7CisKKwkvKiBudW1iZXIgb2Yg
c3RyZWFtcyB0byBwcmUtb3BlbiBvbiBhIGFzc29jaWF0aW9uICovCisJdWludDE2X3QgcHJlX29w
ZW5fc3RyZWFtX2NvdW50OworCXVpbnQxNl90IG1heF9vcGVuX3N0cmVhbXNfaW50b21lOworCisJ
LyogcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgKi8KKwl1aW50MzJfdCByYW5kb21fY291bnRlcjsK
Kwl1aW50OF90IHJhbmRvbV9udW1iZXJzW1NDVFBfU0lHTkFUVVJFX0FMT0NfU0laRV07CisJdWlu
dDhfdCByYW5kb21fc3RvcmVbU0NUUF9TSUdOQVRVUkVfQUxPQ19TSVpFXTsKKworCS8qCisJICog
VGhpcyB0aW1lciBpcyBrZXB0IHJ1bm5pbmcgcGVyIGVuZHBvaW50LiAgV2hlbiBpdCBmaXJlcyBp
dCB3aWxsCisJICogY2hhbmdlIHRoZSBzZWNyZXQga2V5LiAgVGhlIGRlZmF1bHQgaXMgb25jZSBh
IGhvdXIKKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBzaWduYXR1cmVfY2hhbmdlOworCisJdWlu
dDMyX3QgZGVmX2Nvb2tpZV9saWZlOworCS8qIGRlZmF1bHRzIHRvIDAgKi8KKwlpbnQgYXV0b19j
bG9zZV90aW1lOworCXVpbnQzMl90IGluaXRpYWxfc2VxdWVuY2VfZGVidWc7CisJdWludDMyX3Qg
YWRhcHRhdGlvbl9sYXllcl9pbmRpY2F0b3I7CisJdWludDhfdCBhZGFwdGF0aW9uX2xheWVyX2lu
ZGljYXRvcl9wcm92aWRlZDsKKwl1aW50MzJfdCBzdG9yZV9hdDsKKwl1aW50MzJfdCBtYXhfYnVy
c3Q7CisJdWludDMyX3QgZnJfbWF4X2J1cnN0OworI2lmZGVmIElORVQ2CisJdWludDMyX3QgZGVm
YXVsdF9mbG93bGFiZWw7CisjZW5kaWYKKwl1aW50OF90IGRlZmF1bHRfZHNjcDsKKwljaGFyIGN1
cnJlbnRfc2VjcmV0X251bWJlcjsKKwljaGFyIGxhc3Rfc2VjcmV0X251bWJlcjsKKwl1aW50MTZf
dCBwb3J0OyAvKiByZW1vdGUgVURQIGVuY2Fwc3VsYXRpb24gcG9ydCAqLworfTsKKworI2lmbmRl
ZiBTQ1RQX0FMSUdOTUVOVAorI2RlZmluZSBTQ1RQX0FMSUdOTUVOVCAzMgorI2VuZGlmCisKKyNp
Zm5kZWYgU0NUUF9BTElHTk0xCisjZGVmaW5lIFNDVFBfQUxJR05NMSAoU0NUUF9BTElHTk1FTlQt
MSkKKyNlbmRpZgorCisjZGVmaW5lIHNjdHBfbHBvcnQgaXBfaW5wLmlucC5pbnBfbHBvcnQKKwor
c3RydWN0IHNjdHBfcGNidHNuX3Jsb2cgeworCXVpbnQzMl90IHZ0YWc7CisJdWludDE2X3Qgc3Ry
bTsKKwl1aW50MTZfdCBzZXE7CisJdWludDE2X3Qgc3o7CisJdWludDE2X3QgZmxnczsKK307Cisj
ZGVmaW5lIFNDVFBfUkVBRF9MT0dfU0laRSAxMzUJLyogd2UgY2hvb3NlIHRoZSBudW1iZXIgdG8g
bWFrZSBhIHBjYiBhIHBhZ2UgKi8KKworCitzdHJ1Y3Qgc2N0cF9pbnBjYiB7CisJLyotCisJICog
cHV0IGFuIGlucGNiIGluIGZyb250IG9mIGl0IGFsbCwga2luZCBvZiBhIHdhc3RlIGJ1dCB3ZSBu
ZWVkIHRvCisJICogZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBhbGwgdGhlIG90aGVyIHN0dWZmLgor
CSAqLworCXVuaW9uIHsKKwkJc3RydWN0IGlucGNiIGlucDsKKwkJY2hhciBhbGlnblsoc2l6ZW9m
KHN0cnVjdCBpbjZwY2IpICsgU0NUUF9BTElHTk0xKSAmCisJCSAgICAgICAgflNDVFBfQUxJR05N
MV07CisJfSAgICAgaXBfaW5wOworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJLyogbGVhdmUg
c29tZSBzcGFjZSBpbiBjYXNlIGkzODYgaW5wY2IgaXMgYmlnZ2VyIHRoYW4gcHBjICovCisJdWlu
dDhfdAkJcGFkZGluZ1sxMjhdOworI2VuZGlmCisKKwkvKiBTb2NrZXQgYnVmZmVyIGxvY2sgcHJv
dGVjdHMgcmVhZF9xdWV1ZSBhbmQgb2YgY291cnNlIHNiX2NjICovCisJc3RydWN0IHNjdHBfcmVh
ZGhlYWQgcmVhZF9xdWV1ZTsKKworCUxJU1RfRU5UUlkoc2N0cF9pbnBjYikgc2N0cF9saXN0Owkv
KiBsaXN0cyBhbGwgZW5kcG9pbnRzICovCisgICAgICAgIC8qIGhhc2ggb2YgYWxsIGVuZHBvaW50
cyBmb3IgbW9kZWwgKi8KKwlMSVNUX0VOVFJZKHNjdHBfaW5wY2IpIHNjdHBfaGFzaDsKKwkvKiBj
b3VudCBvZiBsb2NhbCBhZGRyZXNzZXMgYm91bmQsIDAgaWYgYm91bmQgYWxsICovCisJaW50IGxh
ZGRyX2NvdW50OworCisJLyogbGlzdCBvZiBhZGRycyBpbiB1c2UgYnkgdGhlIEVQLCBOVUxMIGlm
IGJvdW5kLWFsbCAqLworCXN0cnVjdCBzY3RwbGFkZHIgc2N0cF9hZGRyX2xpc3Q7CisJLyogdXNl
ZCBmb3Igc291cmNlIGFkZHJlc3Mgc2VsZWN0aW9uIHJvdGF0aW9uIHdoZW4gd2UgYXJlIHN1YnNl
dCBib3VuZCAqLworCXN0cnVjdCBzY3RwX2xhZGRyICpuZXh0X2FkZHJfdG91c2U7CisKKwkvKiBi
YWNrIHBvaW50ZXIgdG8gb3VyIHNvY2tldCAqLworCXN0cnVjdCBzb2NrZXQgKnNjdHBfc29ja2V0
OworCXVpbnQ2NF90IHNjdHBfZmVhdHVyZXM7CS8qIEZlYXR1cmUgZmxhZ3MgKi8KKwl1aW50MzJf
dCBzY3RwX2ZsYWdzOwkvKiBJTlAgc3RhdGUgZmxhZyBzZXQgKi8KKwl1aW50MzJfdCBzY3RwX21v
YmlsaXR5X2ZlYXR1cmVzOyAvKiBNb2JpbGl0eSAgRmVhdHVyZSBmbGFncyAqLworCXN0cnVjdCBz
Y3RwX3BjYiBzY3RwX2VwOy8qIFNDVFAgZXAgZGF0YSAqLworCS8qIGhlYWQgb2YgdGhlIGhhc2gg
b2YgYWxsIGFzc29jaWF0aW9ucyAqLworCXN0cnVjdCBzY3RwYXNvY2hlYWQgKnNjdHBfdGNiaGFz
aDsKKwl1X2xvbmcgc2N0cF9oYXNobWFyazsKKwkvKiBoZWFkIG9mIHRoZSBsaXN0IG9mIGFsbCBh
c3NvY2lhdGlvbnMgKi8KKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkIHNjdHBfYXNvY19saXN0OworI2lm
ZGVmIFNDVFBfVFJBQ0tfRlJFRURfQVNPQ1MKKwlzdHJ1Y3Qgc2N0cGFzb2NoZWFkIHNjdHBfYXNv
Y19mcmVlX2xpc3Q7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaW5wX3N0YXJ0aW5n
X3BvaW50X2Zvcl9pdGVyYXRvcjsKKwl1aW50MzJfdCBzY3RwX2ZyYWdfcG9pbnQ7CisJdWludDMy
X3QgcGFydGlhbF9kZWxpdmVyeV9wb2ludDsKKwl1aW50MzJfdCBzY3RwX2NvbnRleHQ7CisJdWlu
dDMyX3QgbWF4X2N3bmQ7CisJdWludDhfdCBsb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCXVpbnQz
Ml90IHNjdHBfY210X29uX29mZjsKKwl1aW50OF90IGVjbl9zdXBwb3J0ZWQ7CisJdWludDhfdCBw
cnNjdHBfc3VwcG9ydGVkOworCXVpbnQ4X3QgYXV0aF9zdXBwb3J0ZWQ7CisJdWludDhfdCBpZGF0
YV9zdXBwb3J0ZWQ7CisJdWludDhfdCBhc2NvbmZfc3VwcG9ydGVkOworCXVpbnQ4X3QgcmVjb25m
aWdfc3VwcG9ydGVkOworCXVpbnQ4X3QgbnJzYWNrX3N1cHBvcnRlZDsKKwl1aW50OF90IHBrdGRy
b3Bfc3VwcG9ydGVkOworCXN0cnVjdCBzY3RwX25vbnBhZF9zbmRyY3ZpbmZvIGRlZl9zZW5kOwor
CS8qLQorCSAqIFRoZXNlIHRocmVlIGFyZSBoZXJlIGZvciB0aGUgc29zZW5kX2RncmFtCisJICog
KHBrdCwgcGt0X2xhc3QgYW5kIGNvbnRyb2wpLgorCSAqIHJvdXRpbmUuIEhvd2V2ZXIsIEkgZG9u
J3QgdGhpbmsgYW55b25lIGluCisJICogdGhlIGN1cnJlbnQgRnJlZUJTRCBrZXJuZWwgY2FsbHMg
dGhpcy4gU28KKwkgKiB0aGV5IGFyZSBjYW5kaWRhdGVzIHdpdGggc2N0cF9zZW5kbSBmb3IKKwkg
KiBkZS1zdXBwb3J0aW5nLgorCSAqLworI2lmZGVmIF9fUGFuZGFfXworCXBha2hhbmRsZV90eXBl
IHBha190b19yZWFkOworCXBha2hhbmRsZV90eXBlIHBha190b19yZWFkX3NlbmRxOworI2VuZGlm
CisJc3RydWN0IG1idWYgKnBrdCwgKnBrdF9sYXN0OworCXN0cnVjdCBtYnVmICpjb250cm9sOwor
I2lmICEoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykpCisjaWZuZGVmIElOUF9J
UFY2CisjZGVmaW5lIElOUF9JUFY2CTB4MQorI2VuZGlmCisjaWZuZGVmIElOUF9JUFY0CisjZGVm
aW5lIElOUF9JUFY0CTB4MgorI2VuZGlmCisJdWludDhfdCBpbnBfdmZsYWc7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyogVE9ETyBfX1VzZXJzcGFjZV9fIHdoZXJlIGlzIG91ciBp
bnBfdmxhZyBnb2luZyB0byBiZT8gKi8KKwl1aW50OF90IGlucF9pcF90dGw7CisgICAgICAgIHVp
bnQ4X3QgaW5wX2lwX3RvczsgICAgLyogZGVmaW5lZCBhcyBtYWNybyBpbiB1c2VyX2lucGNiLmgg
Ki8KKwl1aW50OF90IGlucF9pcF9yZXN2OworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAzMDAwCisJc3RydWN0IG10eCBpbnBfbXR4Owor
CXN0cnVjdCBtdHggaW5wX2NyZWF0ZV9tdHg7CisJc3RydWN0IG10eCBpbnBfcmRhdGFfbXR4Owor
CWludDMyX3QgcmVmY291bnQ7CisjZWxpZiBkZWZpbmVkKFNDVFBfUFJPQ0VTU19MRVZFTF9MT0NL
UykKKwl1c2VybGFuZF9tdXRleF90IGlucF9tdHg7CisJdXNlcmxhbmRfbXV0ZXhfdCBpbnBfY3Jl
YXRlX210eDsKKwl1c2VybGFuZF9tdXRleF90IGlucF9yZGF0YV9tdHg7CisJaW50MzJfdCByZWZj
b3VudDsKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoU0NUUF9BUFBMRV9S
V0xPQ0spCisJbGNrX3J3X3QgKmlucF9tdHg7CisjZWxzZQorCWxja19tdHhfdCAqaW5wX210eDsK
KyNlbmRpZgorCWxja19tdHhfdCAqaW5wX2NyZWF0ZV9tdHg7CisJbGNrX210eF90ICppbnBfcmRh
dGFfbXR4OworI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzdHJ1Y3Qgcndsb2NrIGlucF9s
b2NrOworCXN0cnVjdCBzcGlubG9jayBpbnBfY3JlYXRlX2xvY2s7CisJc3RydWN0IHNwaW5sb2Nr
IGlucF9yZGF0YV9sb2NrOworCWludDMyX3QgcmVmY291bnQ7CisjZWxpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisgICAgLyogVE9ETyBkZWNpZGUgb24gX19Vc2Vyc3BhY2VfXyBsb2NrcyAqLwor
CWludDMyX3QgcmVmY291bnQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpbnQz
Ml90IHJlZmNvdW50OworCisJdWludDMyX3QgbG9ja19jYWxsZXIxOworCXVpbnQzMl90IGxvY2tf
Y2FsbGVyMjsKKwl1aW50MzJfdCBsb2NrX2NhbGxlcjM7CisJdWludDMyX3QgdW5sb2NrX2NhbGxl
cjE7CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjI7CisJdWludDMyX3QgdW5sb2NrX2NhbGxlcjM7
CisJdWludDMyX3QgZ2V0bG9ja19jYWxsZXIxOworCXVpbnQzMl90IGdldGxvY2tfY2FsbGVyMjsK
Kwl1aW50MzJfdCBnZXRsb2NrX2NhbGxlcjM7CisJdWludDMyX3QgZ2VuX2NvdW50OworCXVpbnQz
Ml90IGxvY2tfZ2VuX2NvdW50OworCXVpbnQzMl90IHVubG9ja19nZW5fY291bnQ7CisJdWludDMy
X3QgZ2V0bG9ja19nZW5fY291bnQ7CisKKwl1aW50MzJfdCBpX2FtX2hlcmVfZmlsZTsKKwl1aW50
MzJfdCBpX2FtX2hlcmVfbGluZTsKKyNlbmRpZgorCXVpbnQzMl90IGRlZl92cmZfaWQ7CisJdWlu
dDE2X3QgZmlibnVtOworI2lmZGVmIFNDVFBfTVZSRgorCXVpbnQzMl90ICptX3ZyZl9pZHM7CisJ
dWludDMyX3QgbnVtX3ZyZnM7CisJdWludDMyX3QgdnJmX3NpemU7CisjZW5kaWYKKwl1aW50MzJf
dCB0b3RhbF9zZW5kczsKKwl1aW50MzJfdCB0b3RhbF9yZWN2czsKKwl1aW50MzJfdCBsYXN0X2Fi
b3J0X2NvZGU7CisJdWludDMyX3QgdG90YWxfbm9zcGFjZXM7CisJc3RydWN0IHNjdHBhc29jaGVh
ZCAqc2N0cF9hc29jaWRoYXNoOworCXVfbG9uZyBoYXNoYXNvY2lkbWFyazsKKyAgICAgICAgdWlu
dDMyX3Qgc2N0cF9hc3NvY2lkX2NvdW50ZXI7CisKKyNpZmRlZiBTQ1RQX0FTT0NMT0dfT0ZfVFNO
UworCXN0cnVjdCBzY3RwX3BjYnRzbl9ybG9nIHJlYWRsb2dbU0NUUF9SRUFEX0xPR19TSVpFXTsK
Kwl1aW50MzJfdCByZWFkbG9nX2luZGV4OworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCXZvaWQgKnVscF9pbmZvOworCWludCAoKnJlY3ZfY2FsbGJhY2spKHN0cnVjdCBzb2Nr
ZXQgKiwgdW5pb24gc2N0cF9zb2Nrc3RvcmUsIHZvaWQgKiwgc2l6ZV90LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9yY3ZpbmZvLCBpbnQsIHZvaWQgKik7CisJdWlu
dDMyX3Qgc2VuZF9zYl90aHJlc2hvbGQ7CisJaW50ICgqc2VuZF9jYWxsYmFjaykoc3RydWN0IHNv
Y2tldCAqLCB1aW50MzJfdCk7CisjZW5kaWYKK307CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCitpbnQgcmVnaXN0ZXJfcmVjdl9jYiAoc3RydWN0IHNvY2tldCAqLAorICAgICAgICAgICAg
ICAgICAgICAgIGludCAoKikoc3RydWN0IHNvY2tldCAqLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSwg
dm9pZCAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9yY3ZpbmZvLCBpbnQsIHZvaWQgKikpOworaW50IHJlZ2lzdGVyX3NlbmRfY2IgKHN0cnVjdCBz
b2NrZXQgKiwgdWludDMyX3QsIGludCAoKikoc3RydWN0IHNvY2tldCAqLCB1aW50MzJfdCkpOwor
aW50IHJlZ2lzdGVyX3VscF9pbmZvIChzdHJ1Y3Qgc29ja2V0ICosIHZvaWQgKik7CisKKyNlbmRp
Zgorc3RydWN0IHNjdHBfdGNiIHsKKwlzdHJ1Y3Qgc29ja2V0ICpzY3RwX3NvY2tldDsJLyogYmFj
ayBwb2ludGVyIHRvIHNvY2tldCAqLworCXN0cnVjdCBzY3RwX2lucGNiICpzY3RwX2VwOwkvKiBi
YWNrIHBvaW50ZXIgdG8gZXAgKi8KKwlMSVNUX0VOVFJZKHNjdHBfdGNiKSBzY3RwX3RjYmhhc2g7
CS8qIG5leHQgbGluayBpbiBoYXNoCisJCQkJCQkgKiB0YWJsZSAqLworICAgICAgICBMSVNUX0VO
VFJZKHNjdHBfdGNiKSBzY3RwX3RjYmxpc3Q7CS8qIGxpc3Qgb2YgYWxsIG9mIHRoZQorCQkJCQkJ
ICogVENCJ3MgKi8KKyAgICAgICAgTElTVF9FTlRSWShzY3RwX3RjYikgc2N0cF90Y2Jhc29jaWRo
YXNoOwkvKiBuZXh0IGxpbmsgaW4gYXNvY2lkCisJCQkJCQkJICogaGFzaCB0YWJsZQorCQkJCQkJ
CSAqLworICAgICAgICBMSVNUX0VOVFJZKHNjdHBfdGNiKSBzY3RwX2Fzb2NzOwkvKiB2dGFnIGhh
c2ggbGlzdCAqLworCXN0cnVjdCBzY3RwX2Jsb2NrX2VudHJ5ICpibG9ja19lbnRyeTsJLyogcG9p
bnRlciBsb2NrZWQgYnkgIHNvY2tldAorCQkJCQkJICogc2VuZCBidWZmZXIgKi8KKwlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiBhc29jOworCS8qLQorCSAqIGZyZWVkX2J5X3NvcmN2X3NpbmNlbGFz
dCBpcyBwcm90ZWN0ZWQgYnkgdGhlIHNvY2tidWZfbG9jayBOT1QgdGhlCisJICogdGNiX2xvY2su
IEl0cyBzcGVjaWFsIGluIHRoaXMgd2F5IHRvIGhlbHAgYXZvaWQgZXh0cmEgbXV0ZXggY2FsbHMK
KwkgKiBpbiB0aGUgcmVhZGluZyBvZiBkYXRhLgorCSAqLworCXVpbnQzMl90IGZyZWVkX2J5X3Nv
cmN2X3NpbmNlbGFzdDsKKwl1aW50MzJfdCB0b3RhbF9zZW5kczsKKwl1aW50MzJfdCB0b3RhbF9y
ZWN2czsKKwlpbnQgZnJlZWRfZnJvbV93aGVyZTsKKwl1aW50MTZfdCBycG9ydDsJCS8qIHJlbW90
ZSBwb3J0IGluIG5ldHdvcmsgZm9ybWF0ICovCisJdWludDE2X3QgcmVzdjsKKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDMwMDAKKwlzdHJ1Y3QgbXR4
IHRjYl9tdHg7CisJc3RydWN0IG10eCB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBf
UFJPQ0VTU19MRVZFTF9MT0NLUykKKwl1c2VybGFuZF9tdXRleF90IHRjYl9tdHg7CisJdXNlcmxh
bmRfbXV0ZXhfdCB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlsY2tf
bXR4X3QqIHRjYl9tdHg7CisJbGNrX210eF90KiB0Y2Jfc2VuZF9tdHg7CisjZWxpZiBkZWZpbmVk
KF9fV2luZG93c19fKQorCXN0cnVjdCBzcGlubG9jayB0Y2JfbG9jazsKKwlzdHJ1Y3Qgc3Bpbmxv
Y2sgdGNiX3NlbmRfbG9jazsKKyNlbGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAvKiBU
T0RPIGRlY2lkZSBvbiBfX1VzZXJzcGFjZV9fIGxvY2tzICovCisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fQVBQTEVfXykKKwl1aW50MzJfdCBjYWxsZXIxOworCXVpbnQzMl90IGNhbGxlcjI7CisJdWlu
dDMyX3QgY2FsbGVyMzsKKyNlbmRpZgorfTsKKworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAzMDAwCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBf
bG9ja19ic2QuaD4KKworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisvKgorICogQXBwbGUgTWFj
T1MgWCAxMC40ICJUaWdlciIKKyAqLworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2xvY2tfYXBw
bGVfZmcuaD4KKworI2VsaWYgZGVmaW5lZChTQ1RQX1BST0NFU1NfTEVWRUxfTE9DS1MpCisKKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmg+CisKKyNlbGlmIGRlZmluZWQoX19X
aW5kb3dzX18pCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfbG9ja193aW5kb3dzLmg+CisKKyNl
bGlmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2Nr
X3VzZXJzcGFjZS5oPgorCisjZWxzZQorLyoKKyAqIFByZS01LnggRnJlZUJTRCwgYW5kIG90aGVy
cy4KKyAqLworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9sb2NrX2VtcHR5Lmg+CisjZW5kaWYKKwor
LyogVE9ETyB3aGVyZSB0byBwdXQgbm9uLV9LRVJORUwgdGhpbmdzIGZvciBfX1VzZXJzcGFjZV9f
PyAqLworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCisv
KiBBdHRlbnRpb24gSnVsaWFuLCB0aGlzIGlzIHRoZSBleHRlcm4gdGhhdAorICogZ29lcyB3aXRo
IHRoZSBiYXNlIGluZm8uIHNjdHBfcGNiLmMgaGFzCisgKiB0aGUgcmVhbCBkZWZpbml0aW9uLgor
ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAx
MDAwCitWTkVUX0RFQ0xBUkUoc3RydWN0IHNjdHBfYmFzZV9pbmZvLCBzeXN0ZW1fYmFzZV9pbmZv
KSA7CisjZWxzZQorZXh0ZXJuIHN0cnVjdCBzY3RwX2Jhc2VfaW5mbyBzeXN0ZW1fYmFzZV9pbmZv
OworI2VuZGlmCisKKyNpZmRlZiBJTkVUNgoraW50IFNDVFA2X0FSRV9BRERSX0VRVUFMKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKmEsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmIpOworI2VuZGlmCisKK3Zv
aWQgc2N0cF9maWxsX3BjYmluZm8oc3RydWN0IHNjdHBfcGNiaW5mbyAqKTsKKworc3RydWN0IHNj
dHBfaWZuICoKK3NjdHBfZmluZF9pZm4odm9pZCAqaWZuLCB1aW50MzJfdCBpZm5faW5kZXgpOwor
CitzdHJ1Y3Qgc2N0cF92cmYgKnNjdHBfYWxsb2NhdGVfdnJmKGludCB2cmZpZCk7CitzdHJ1Y3Qg
c2N0cF92cmYgKnNjdHBfZmluZF92cmYodWludDMyX3QgdnJmaWQpOwordm9pZCBzY3RwX2ZyZWVf
dnJmKHN0cnVjdCBzY3RwX3ZyZiAqdnJmKTsKKworLyotCisgKiBDaGFuZ2UgYWRkcmVzcyBzdGF0
ZSwgY2FuIGJlIHVzZWQgaWYKKyAqIE8vUyBzdXBwb3J0cyB0ZWxsaW5nIHRyYW5zcG9ydHMgYWJv
dXQKKyAqIGNoYW5nZXMgdG8gSUZBL0lGTidzIChsaW5rIGxheWVyIHRyaWdnZXJzKS4KKyAqIElm
IGEgaWZuIGdvZXMgZG93biwgd2Ugd2lsbCBkbyBzcmMtYWRkci1zZWxlY3Rpb24KKyAqIGFuZCBO
T1QgdXNlIHRoYXQsIGFzIGEgc291cmNlIGFkZHJlc3MuIFRoaXMgZG9lcworICogbm90IHN0b3Ag
dGhlIHJvdXRpbmcgc3lzdGVtIGZyb20gcm91dGluZyBvdXQKKyAqIHRoYXQgaW50ZXJmYWNlLCBi
dXQgd2Ugd29uJ3QgcHV0IGl0IGFzIGEgc291cmNlLgorICovCit2b2lkIHNjdHBfbWFya19pZmFf
YWRkcl9kb3duKHVpbnQzMl90IHZyZl9pZCwgc3RydWN0IHNvY2thZGRyICphZGRyLCBjb25zdCBj
aGFyICppZl9uYW1lLCB1aW50MzJfdCBpZm5faW5kZXgpOwordm9pZCBzY3RwX21hcmtfaWZhX2Fk
ZHJfdXAodWludDMyX3QgdnJmX2lkLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIGNvbnN0IGNoYXIg
KmlmX25hbWUsIHVpbnQzMl90IGlmbl9pbmRleCk7CisKK3N0cnVjdCBzY3RwX2lmYSAqCitzY3Rw
X2FkZF9hZGRyX3RvX3ZyZih1aW50MzJfdCB2cmZpZCwKKwkJICAgICB2b2lkICppZm4sIHVpbnQz
Ml90IGlmbl9pbmRleCwgdWludDMyX3QgaWZuX3R5cGUsCisJCSAgICAgY29uc3QgY2hhciAqaWZf
bmFtZSwKKwkJICAgICB2b2lkICppZmEsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgdWludDMyX3Qg
aWZhX2ZsYWdzLAorCQkgICAgIGludCBkeW5hbWljX2FkZCk7CisKK3ZvaWQgc2N0cF91cGRhdGVf
aWZuX210dSh1aW50MzJfdCBpZm5faW5kZXgsIHVpbnQzMl90IG10dSk7CisKK3ZvaWQgc2N0cF9m
cmVlX2lmbihzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZucCk7Cit2b2lkIHNjdHBfZnJlZV9pZmEo
c3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYXApOworCisKK3ZvaWQgc2N0cF9kZWxfYWRkcl9mcm9t
X3ZyZih1aW50MzJfdCB2cmZpZCwgc3RydWN0IHNvY2thZGRyICphZGRyLAorCQkJICAgIHVpbnQz
Ml90IGlmbl9pbmRleCwgY29uc3QgY2hhciAqaWZfbmFtZSk7CisKKworCitzdHJ1Y3Qgc2N0cF9u
ZXRzICpzY3RwX2ZpbmRuZXQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzb2NrYWRkciAqKTsK
Kworc3RydWN0IHNjdHBfaW5wY2IgKnNjdHBfcGNiX2ZpbmRlcChzdHJ1Y3Qgc29ja2FkZHIgKiwg
aW50LCBpbnQsIHVpbnQzMl90KTsKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDUwMDAwMAoraW50IHNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0
ICosIHN0cnVjdCBzb2NrYWRkciAqLAorCQkgICAgc3RydWN0IHNjdHBfaWZhICosc3RydWN0IHRo
cmVhZCAqKTsKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCitpbnQgc2N0cF9pbnBjYl9iaW5k
KHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICosCisJCSAgICBzdHJ1Y3Qgc2N0cF9p
ZmEgKixQS1RIUkVBRCk7CisjZWxzZQorLyogc3RydWN0IHByb2MgaXMgYSBkdW1teSBmb3IgX19V
c2Vyc3BhY2VfXyAqLworaW50IHNjdHBfaW5wY2JfYmluZChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVj
dCBzb2NrYWRkciAqLAorCQkgICAgc3RydWN0IHNjdHBfaWZhICosIHN0cnVjdCBwcm9jICopOwor
I2VuZGlmCisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyKHN0
cnVjdCBtYnVmICosIGludCwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNvY2thZGRy
ICosCisgICAgc3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBfY2h1bmtoZHIgKiwgc3RydWN0
IHNjdHBfaW5wY2IgKiosCisgICAgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDMyX3QgdnJmX2lk
KTsKKworc3RydWN0IHNjdHBfdGNiICoKK3NjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc3Ry
dWN0IHNvY2thZGRyICosCisgICAgc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzY3RwX2lucGNi
ICoqLCBzdHJ1Y3Qgc2N0cF9uZXRzICoqLCBpbnQsIHVpbnQzMl90KTsKKwordm9pZAorc2N0cF9t
b3ZlX3BjYl9hbmRfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfaW5wY2Ig
KiwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKik7CisKKy8qLQorICogRm9yIHRoaXMgY2FsbCBlcF9h
ZGRyLCB0aGUgdG8gaXMgdGhlIGRlc3RpbmF0aW9uIGVuZHBvaW50IGFkZHJlc3Mgb2YgdGhlCisg
KiBwZWVyIChyZWxhdGl2ZSB0byBvdXRib3VuZCkuIFRoZSBmcm9tIGZpZWxkIGlzIG9ubHkgdXNl
ZCBpZiB0aGUgVENQIG1vZGVsCisgKiBpcyBlbmFibGVkIGFuZCBoZWxwcyBkaXN0aW5ndXNoIGFt
b25nc3QgdGhlIHN1YnNldCBib3VuZCAobm9uLWJvdW5kYWxsKS4KKyAqIFRoZSBUQ1AgbW9kZWwg
TUFZIGNoYW5nZSB0aGUgYWN0dWFsIGVwIGZpZWxkLCB0aGlzIGlzIHdoeSBpdCBpcyBwYXNzZWQu
CisgKi8KK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKHN0
cnVjdCBzY3RwX2lucGNiICoqLAorICAgIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc2N0cF9u
ZXRzICoqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKik7CisKK3N0
cnVjdCBzY3RwX3RjYiAqCitzY3RwX2ZpbmRhc29jX2VwX2Fzb2NpZF9sb2NrZWQoc3RydWN0IHNj
dHBfaW5wY2IgKmlucCwgc2N0cF9hc3NvY190IGFzb2NfaWQsIGludCB3YW50X2xvY2spOworCitz
dHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNvY2lkKHN0cnVjdCBz
Y3RwX2lucGNiICosCisgICAgc2N0cF9hc3NvY190LCBpbnQpOworCitzdHJ1Y3Qgc2N0cF90Y2Ig
Kgorc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYXNjb25mKHN0cnVjdCBtYnVmICosIGludCwgc3Ry
dWN0IHNvY2thZGRyICosCisJCQkgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgc3RydWN0IHNjdHBf
aW5wY2IgKiosIHN0cnVjdCBzY3RwX25ldHMgKiosIHVpbnQzMl90IHZyZl9pZCk7CisKK2ludCBz
Y3RwX2lucGNiX2FsbG9jKHN0cnVjdCBzb2NrZXQgKnNvLCB1aW50MzJfdCB2cmZfaWQpOworCitp
bnQgc2N0cF9pc19hZGRyZXNzX29uX2xvY2FsX2hvc3Qoc3RydWN0IHNvY2thZGRyICphZGRyLCB1
aW50MzJfdCB2cmZfaWQpOworCit2b2lkIHNjdHBfaW5wY2JfZnJlZShzdHJ1Y3Qgc2N0cF9pbnBj
YiAqLCBpbnQsIGludCk7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA1MDAwMDAKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3Ry
dWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgaW50
ICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBzdHJ1Y3QgdGhyZWFk
ICopOworI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3Rw
X2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAg
ICAgICAgICAgICAgaW50ICosIHVpbnQzMl90LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90
LCBQS1RIUkVBRCk7CisjZWxzZQorLyogcHJvYyB3aWxsIGJlIE5VTEwgZm9yIF9fVXNlcnNwYWNl
X18gKi8KK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Fsb2NfYXNzb2Moc3RydWN0IHNjdHBfaW5w
Y2IgKiwgc3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgaW50ICosIHVpbnQzMl90
LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBzdHJ1Y3QgcHJvYyAqKTsKKyNlbmRpZgor
CitpbnQgc2N0cF9mcmVlX2Fzc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3Rj
YiAqLCBpbnQsIGludCk7CisKKwordm9pZCBzY3RwX2RlbGV0ZV9mcm9tX3RpbWV3YWl0KHVpbnQz
Ml90LCB1aW50MTZfdCwgdWludDE2X3QpOworCitpbnQgc2N0cF9pc19pbl90aW1ld2FpdCh1aW50
MzJfdCB0YWcsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCk7CisKK3ZvaWQKK3NjdHBf
YWRkX3Z0YWdfdG9fdGltZXdhaXQodWludDMyX3QgdGFnLCB1aW50MzJfdCB0aW1lLCB1aW50MTZf
dCBscG9ydCwgdWludDE2X3QgcnBvcnQpOworCit2b2lkIHNjdHBfYWRkX2xvY2FsX2FkZHJfZXAo
c3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfaWZhICosIHVpbnQzMl90KTsKKwordm9p
ZCBzY3RwX2RlbF9sb2NhbF9hZGRyX2VwKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3Rw
X2lmYSAqKTsKKworaW50IHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0cnVjdCBzY3RwX3RjYiAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHNjdHBfbmV0cyAqKiwgdWludDE2X3QsIGludCwgaW50
KTsKKwordm9pZCBzY3RwX3JlbW92ZV9uZXQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3Rw
X25ldHMgKik7CisKK2ludCBzY3RwX2RlbF9yZW1vdGVfYWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKiwg
c3RydWN0IHNvY2thZGRyICopOworCit2b2lkIHNjdHBfcGNiX2luaXQodm9pZCk7CisKK3ZvaWQg
c2N0cF9wY2JfZmluaXNoKHZvaWQpOworCit2b2lkIHNjdHBfYWRkX2xvY2FsX2FkZHJfcmVzdHJp
Y3RlZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfaWZhICopOwordm9pZCBzY3RwX2Rl
bF9sb2NhbF9hZGRyX3Jlc3RyaWN0ZWQoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX2lm
YSAqKTsKKworaW50CitzY3RwX2xvYWRfYWRkcmVzc2VzX2Zyb21faW5pdChzdHJ1Y3Qgc2N0cF90
Y2IgKiwgc3RydWN0IG1idWYgKiwgaW50LCBpbnQsCisgICAgc3RydWN0IHNvY2thZGRyICosIHN0
cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdWludDE2X3QpOworCitpbnQKK3Nj
dHBfc2V0X3ByaW1hcnlfYWRkcihzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRyICos
CisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKKworaW50IHNjdHBfaXNfdnRhZ19nb29kKHVpbnQz
Ml90LCB1aW50MTZfdCBscG9ydCwgdWludDE2X3QgcnBvcnQsIHN0cnVjdCB0aW1ldmFsICopOwor
CisvKiB2b2lkIHNjdHBfZHJhaW4odm9pZCk7ICovCisKK2ludCBzY3RwX2Rlc3RpbmF0aW9uX2lz
X3JlYWNoYWJsZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNvY2thZGRyICopOworCitpbnQg
c2N0cF9zd2FwX2lucGNiX2Zvcl9saXN0ZW4oc3RydWN0IHNjdHBfaW5wY2IgKmlucCk7CisKK3Zv
aWQgc2N0cF9jbGVhbl91cF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9yZWFkaGVhZCAqcmgpOworCisvKi0KKyAqIE51bGwgaW4gbGFzdCBhcmcgaW5wY2IgaW5kaWNh
dGUgcnVuIG9uIEFMTCBlcCdzLiBTcGVjaWZpYyBpbnAgaW4gbGFzdCBhcmcKKyAqIGluZGljYXRl
cyBydW4gb24gT05MWSBhc3NvYydzIG9mIHRoZSBzcGVjaWZpZWQgZW5kcG9pbnQuCisgKi8KK2lu
dAorc2N0cF9pbml0aWF0ZV9pdGVyYXRvcihpbnBfZnVuYyBpbnBmLAorCQkgICAgICAgYXNvY19m
dW5jIGFmLAorCQkgICAgICAgaW5wX2Z1bmMgaW5wZSwKKwkJICAgICAgIHVpbnQzMl90LCB1aW50
MzJfdCwKKwkJICAgICAgIHVpbnQzMl90LCB2b2lkICosCisJCSAgICAgICB1aW50MzJfdCwKKwkJ
ICAgICAgIGVuZF9mdW5jIGVmLAorCQkgICAgICAgc3RydWN0IHNjdHBfaW5wY2IgKiwKKwkJICAg
ICAgIHVpbnQ4X3QgY29fb2ZmKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBkZWZpbmVk
KFNDVFBfTUNPUkVfSU5QVVQpICYmIGRlZmluZWQoU01QKQordm9pZAorc2N0cF9xdWV1ZV90b19t
Y29yZShzdHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZiwgaW50IGNwdV90b191c2UpOworCisjZW5kaWYK
KworI2VuZGlmCQkJCS8qIF9LRVJORUwgKi8KKyNlbmRpZgkJCQkvKiAhX19zY3RwX3BjYl9oX18g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYu
YyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BlZWxvZmYuYwppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zOTFiNGY1NDQ2YjY0OWVkMzU0
MjQ3ZDJmZDk0YzUzN2MxMmEyZTBmIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQvc2N0cF9wZWVsb2ZmLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfcGVlbG9mZi5jCkBAIC0wLDAgKzEsMzMwIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGVlbG9mZi5j
IDI3OTg1OSAyMDE1LTAzLTEwIDE5OjQ5OjI1WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3Rw
X3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF91aW8uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGVlbG9mZi5oPgorI2luY2x1ZGUg
PG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXV0aC5oPgorCisj
aWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEFQUExFX0ZJTEVfTk8gNQorI2VuZGlmCisK
K2ludAorc2N0cF9jYW5fcGVlbF9vZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190
IGFzc29jX2lkKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNi
ICpzdGNiOworCXVpbnQzMl90IHN0YXRlOworCisJaWYgKGhlYWQgPT0gTlVMTCkgeworCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYs
IEVCQURGKTsKKwkJcmV0dXJuIChFQkFERik7CisJfQorCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBj
YiAqKWhlYWQtPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFRkFVTFQpOwor
CQlyZXR1cm4gKEVGQVVMVCk7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFT1BOT1RTVVBQKTsKKwkJcmV0dXJuIChFT1BOT1RTVVBQ
KTsKKwl9CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29j
X2lkLCAxKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9FTlQpOworCQlyZXR1cm4g
KEVOT0VOVCk7CisJfQorCXN0YXRlID0gU0NUUF9HRVRfU1RBVEUoKCZzdGNiLT5hc29jKSk7CisJ
aWYgKChzdGF0ZSA9PSBTQ1RQX1NUQVRFX0VNUFRZKSB8fAorCSAgICAoc3RhdGUgPT0gU0NUUF9T
VEFURV9JTlVTRSkpIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRU5PVENPTk4p
OworCQlyZXR1cm4gKEVOT1RDT05OKTsKKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCS8q
IFdlIGFyZSBjbGVhciB0byBwZWVsIHRoaXMgb25lIG9mZiAqLworCXJldHVybiAoMCk7Cit9CisK
K2ludAorc2N0cF9kb19wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKmhlYWQsIHN0cnVjdCBzb2NrZXQg
KnNvLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
Km5faW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwl1aW50MzJfdCBzdGF0ZTsKKworCWlu
cCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKWhlYWQtPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwp
IHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1BFRUxPRkYsIEVGQVVMVCk7CisJCXJldHVybiAoRUZBVUxUKTsKKwl9CisJc3RjYiA9IHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsKKwlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9QRUVMT0ZGLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwor
CXN0YXRlID0gU0NUUF9HRVRfU1RBVEUoKCZzdGNiLT5hc29jKSk7CisJaWYgKChzdGF0ZSA9PSBT
Q1RQX1NUQVRFX0VNUFRZKSB8fAorCSAgICAoc3RhdGUgPT0gU0NUUF9TVEFURV9JTlVTRSkpIHsK
KwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiwgRU5PVENPTk4pOworCQlyZXR1cm4gKEVO
T1RDT05OKTsKKwl9CisKKwluX2lucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7
CisJbl9pbnAtPnNjdHBfZmxhZ3MgPSAoU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSB8CisJICAgIFND
VFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCB8CisJICAgIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wg
fAkvKiBUdXJuIG9uIEJsb2NraW5nIElPICovCisJICAgIChTQ1RQX1BDQl9DT1BZX0ZMQUdTICYg
aW5wLT5zY3RwX2ZsYWdzKSk7CisJbl9pbnAtPnNjdHBfc29ja2V0ID0gc287CisJbl9pbnAtPnNj
dHBfZmVhdHVyZXMgPSBpbnAtPnNjdHBfZmVhdHVyZXM7CisJbl9pbnAtPnNjdHBfbW9iaWxpdHlf
ZmVhdHVyZXMgPSBpbnAtPnNjdHBfbW9iaWxpdHlfZmVhdHVyZXM7CisJbl9pbnAtPnNjdHBfZnJh
Z19wb2ludCA9IGlucC0+c2N0cF9mcmFnX3BvaW50OworCW5faW5wLT5zY3RwX2NtdF9vbl9vZmYg
PSBpbnAtPnNjdHBfY210X29uX29mZjsKKwluX2lucC0+ZWNuX3N1cHBvcnRlZCA9IGlucC0+ZWNu
X3N1cHBvcnRlZDsKKwluX2lucC0+cHJzY3RwX3N1cHBvcnRlZCA9IGlucC0+cHJzY3RwX3N1cHBv
cnRlZDsKKwluX2lucC0+YXV0aF9zdXBwb3J0ZWQgPSBpbnAtPmF1dGhfc3VwcG9ydGVkOworCW5f
aW5wLT5hc2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOworCW5faW5wLT5y
ZWNvbmZpZ19zdXBwb3J0ZWQgPSBpbnAtPnJlY29uZmlnX3N1cHBvcnRlZDsKKwluX2lucC0+bnJz
YWNrX3N1cHBvcnRlZCA9IGlucC0+bnJzYWNrX3N1cHBvcnRlZDsKKwluX2lucC0+cGt0ZHJvcF9z
dXBwb3J0ZWQgPSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOworCW5faW5wLT5wYXJ0aWFsX2RlbGl2
ZXJ5X3BvaW50ID0gaW5wLT5wYXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCW5faW5wLT5zY3RwX2Nv
bnRleHQgPSBpbnAtPnNjdHBfY29udGV4dDsKKwluX2lucC0+bWF4X2N3bmQgPSBpbnAtPm1heF9j
d25kOworCW5faW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gaW5wLT5sb2NhbF9zdHJyZXNl
dF9zdXBwb3J0OworCW5faW5wLT5pbnBfc3RhcnRpbmdfcG9pbnRfZm9yX2l0ZXJhdG9yID0gTlVM
TDsKKwkvKiBjb3B5IGluIHRoZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIG9y
aWdpbmFsIGVuZHBvaW50ICovCisJaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKQorCQlz
Y3RwX2ZyZWVfaG1hY2xpc3Qobl9pbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCW5faW5wLT5z
Y3RwX2VwLmxvY2FsX2htYWNzID0KKwkgICAgc2N0cF9jb3B5X2htYWNsaXN0KGlucC0+c2N0cF9l
cC5sb2NhbF9obWFjcyk7CisJaWYgKG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKQor
CQlzY3RwX2ZyZWVfY2h1bmtsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsK
KwluX2lucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyA9CisJICAgIHNjdHBfY29weV9jaHVu
a2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkodm9pZClzY3RwX2NvcHlf
c2tleWxpc3QoJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5cywKKwkgICAgJm5faW5wLT5zY3RwX2Vw
LnNoYXJlZF9rZXlzKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJbl9pbnAtPnVscF9p
bmZvID0gaW5wLT51bHBfaW5mbzsKKwluX2lucC0+cmVjdl9jYWxsYmFjayA9IGlucC0+cmVjdl9j
YWxsYmFjazsKKwluX2lucC0+c2VuZF9jYWxsYmFjayA9IGlucC0+c2VuZF9jYWxsYmFjazsKKwlu
X2lucC0+c2VuZF9zYl90aHJlc2hvbGQgPSBpbnAtPnNlbmRfc2JfdGhyZXNob2xkOworI2VuZGlm
CisJLyoKKwkgKiBOb3cgd2UgbXVzdCBtb3ZlIGl0IGZyb20gb25lIGhhc2ggdGFibGUgdG8gYW5v
dGhlciBhbmQgZ2V0IHRoZQorCSAqIHN0Y2IgaW4gdGhlIHJpZ2h0IHBsYWNlLgorCSAqLworCXNj
dHBfbW92ZV9wY2JfYW5kX2Fzc29jKGlucCwgbl9pbnAsIHN0Y2IpOworCWF0b21pY19hZGRfaW50
KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChp
bnAsIG5faW5wLCBzdGNiLCBTQkxfV0FJVCk7CisjZWxzZQorCXNjdHBfcHVsbF9vZmZfY29udHJv
bF90b19uZXdfaW5wKGlucCwgbl9pbnAsIHN0Y2IsIE1fV0FJVE9LKTsKKyNlbmRpZgorCWF0b21p
Y19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKworCXJldHVybiAoMCk7Cit9
CisKKyNpZiBkZWZpbmVkKEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCitzdHJ1Y3Qgc29ja2V0
ICoKK3NjdHBfZ2V0X3BlZWxvZmYoc3RydWN0IHNvY2tldCAqaGVhZCwgc2N0cF9hc3NvY190IGFz
c29jX2lkLCBpbnQgKmVycm9yKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAv
KiBpZiBfX1VzZXJzcGFjZV9fIGNob29zZXMgdG8gb3JpZ2luYWxseSBub3Qgc3VwcG9ydCBwZWVs
b2ZmLCBwdXQgaXQgaGVyZS4uLiAqLworI2VuZGlmCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVM
T0ZGLCBFSU5WQUwpOworCSplcnJvciA9IEVJTlZBTDsKKwlyZXR1cm4gKE5VTEwpOworI2Vsc2UK
KwlzdHJ1Y3Qgc29ja2V0ICpuZXdzbzsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCAqbl9pbnA7
CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJU0NUUERCRyhTQ1RQX0RFQlVHX1BFRUwxLCAi
U0NUUCBwZWVsLW9mZiBjYWxsZWRcbiIpOworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKWhl
YWQtPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1BFRUxPRkYsIEVGQVVMVCk7CisJCSplcnJv
ciA9IEVGQVVMVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RjYiA9IHNjdHBfZmluZGFzc29j
aWF0aW9uX2VwX2Fzb2NpZChpbnAsIGFzc29jX2lkLCAxKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9Q
RUVMT0ZGLCBFTk9UQ09OTik7CisJCSplcnJvciA9IEVOT1RDT05OOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA4MDEwMDAKKwlDVVJWTkVUX1NFVChoZWFkLT5zb192bmV0KTsKKyNlbmRpZgorCW5l
d3NvID0gc29uZXdjb25uKGhlYWQsIFNTX0lTQ09OTkVDVEVECisjaWYgZGVmaW5lZChfX0FQUExF
X18pCisJICAgICwgTlVMTAorI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCisJICAgIC8qIHBsYWNl
IHRoaXMgc29ja2V0IGluIHRoZSBhc3NvYydzIHZyZiBpZCAqLworCSAgICAsIE5VTEwsIHN0Y2It
PmFzb2MudnJmX2lkCisjZW5kaWYKKwkJKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlDVVJWTkVUX1JFU1RPUkUoKTsKKyNlbmRpZgor
CWlmIChuZXdzbyA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19QRUVMMSwgInNjdHBf
cGVlbG9mZjpzb25ld2Nvbm4gZmFpbGVkXG4iKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxM
LCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9QRUVMT0ZGLCBFTk9NRU0pOworCQkqZXJyb3Ig
PSBFTk9NRU07CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwkJcmV0dXJuIChOVUxMKTsKKworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkgIGVsc2Ug
eworCQlTQ1RQX1NPQ0tFVF9MT0NLKG5ld3NvLCAxKTsKKwl9CisjZW5kaWYKKwlTQ1RQX1RDQl9M
T0NLKHN0Y2IpOworCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwluX2lucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKW5ld3NvLT5zb19wY2I7CisJU09DS19MT0NL
KGhlYWQpOworCW5faW5wLT5zY3RwX2ZsYWdzID0gKFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUgfAor
CSAgICBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQgfAorCSAgICBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MIHwJLyogVHVybiBvbiBCbG9ja2luZyBJTyAqLworCSAgICAoU0NUUF9QQ0JfQ09QWV9G
TEFHUyAmIGlucC0+c2N0cF9mbGFncykpOworCW5faW5wLT5zY3RwX2ZlYXR1cmVzID0gaW5wLT5z
Y3RwX2ZlYXR1cmVzOworCW5faW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19w
b2ludDsKKwluX2lucC0+c2N0cF9jbXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7CisJ
bl9pbnAtPmVjbl9zdXBwb3J0ZWQgPSBpbnAtPmVjbl9zdXBwb3J0ZWQ7CisJbl9pbnAtPnByc2N0
cF9zdXBwb3J0ZWQgPSBpbnAtPnByc2N0cF9zdXBwb3J0ZWQ7CisJbl9pbnAtPmF1dGhfc3VwcG9y
dGVkID0gaW5wLT5hdXRoX3N1cHBvcnRlZDsKKwluX2lucC0+YXNjb25mX3N1cHBvcnRlZCA9IGlu
cC0+YXNjb25mX3N1cHBvcnRlZDsKKwluX2lucC0+cmVjb25maWdfc3VwcG9ydGVkID0gaW5wLT5y
ZWNvbmZpZ19zdXBwb3J0ZWQ7CisJbl9pbnAtPm5yc2Fja19zdXBwb3J0ZWQgPSBpbnAtPm5yc2Fj
a19zdXBwb3J0ZWQ7CisJbl9pbnAtPnBrdGRyb3Bfc3VwcG9ydGVkID0gaW5wLT5wa3Rkcm9wX3N1
cHBvcnRlZDsKKwluX2lucC0+cGFydGlhbF9kZWxpdmVyeV9wb2ludCA9IGlucC0+cGFydGlhbF9k
ZWxpdmVyeV9wb2ludDsKKwluX2lucC0+c2N0cF9jb250ZXh0ID0gaW5wLT5zY3RwX2NvbnRleHQ7
CisJbl9pbnAtPm1heF9jd25kID0gaW5wLT5tYXhfY3duZDsKKwluX2lucC0+bG9jYWxfc3RycmVz
ZXRfc3VwcG9ydCA9IGlucC0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydDsKKwluX2lucC0+aW5wX3N0
YXJ0aW5nX3BvaW50X2Zvcl9pdGVyYXRvciA9IE5VTEw7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCW5faW5wLT51bHBfaW5mbyA9IGlucC0+dWxwX2luZm87CisJbl9pbnAtPnJlY3ZfY2Fs
bGJhY2sgPSBpbnAtPnJlY3ZfY2FsbGJhY2s7CisJbl9pbnAtPnNlbmRfY2FsbGJhY2sgPSBpbnAt
PnNlbmRfY2FsbGJhY2s7CisJbl9pbnAtPnNlbmRfc2JfdGhyZXNob2xkID0gaW5wLT5zZW5kX3Ni
X3RocmVzaG9sZDsKKyNlbmRpZgorCisJLyogY29weSBpbiB0aGUgYXV0aGVudGljYXRpb24gcGFy
YW1ldGVycyBmcm9tIHRoZSBvcmlnaW5hbCBlbmRwb2ludCAqLworCWlmIChuX2lucC0+c2N0cF9l
cC5sb2NhbF9obWFjcykKKwkJc2N0cF9mcmVlX2htYWNsaXN0KG5faW5wLT5zY3RwX2VwLmxvY2Fs
X2htYWNzKTsKKwluX2lucC0+c2N0cF9lcC5sb2NhbF9obWFjcyA9CisJICAgIHNjdHBfY29weV9o
bWFjbGlzdChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpOworCWlmIChuX2lucC0+c2N0cF9lcC5s
b2NhbF9hdXRoX2NodW5rcykKKwkJc2N0cF9mcmVlX2NodW5rbGlzdChuX2lucC0+c2N0cF9lcC5s
b2NhbF9hdXRoX2NodW5rcyk7CisJbl9pbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3MgPQor
CSAgICBzY3RwX2NvcHlfY2h1bmtsaXN0KGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7
CisJKHZvaWQpc2N0cF9jb3B5X3NrZXlsaXN0KCZpbnAtPnNjdHBfZXAuc2hhcmVkX2tleXMsCisJ
ICAgICZuX2lucC0+c2N0cF9lcC5zaGFyZWRfa2V5cyk7CisKKwluX2lucC0+c2N0cF9zb2NrZXQg
PSBuZXdzbzsKKwlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVU
T0NMT1NFKSkgeworCQlzY3RwX2ZlYXR1cmVfb2ZmKG5faW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRP
Q0xPU0UpOworCQluX2lucC0+c2N0cF9lcC5hdXRvX2Nsb3NlX3RpbWUgPSAwOworCQlzY3RwX3Rp
bWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRSwgbl9pbnAsIHN0Y2IsIE5VTEwsCisJ
CQkJU0NUUF9GUk9NX1NDVFBfUEVFTE9GRiArIFNDVFBfTE9DXzEpOworCX0KKwkvKiBUdXJuIG9m
ZiBhbnkgbm9uLWJsb2NraW5nIHNlbWFudGljLiAqLworCVNPQ0tfTE9DSyhuZXdzbyk7CisJU0NU
UF9DTEVBUl9TT19OQklPKG5ld3NvKTsKKwluZXdzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNU
RUQ7CisJU09DS19VTkxPQ0sobmV3c28pOworCS8qIFdlIHJlbW92ZSBpdCByaWdodCBhd2F5ICov
CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmZGVmIFNDVFBf
TE9DS19MT0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAm
IFNDVFBfTE9DS19MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19sb2NrKGlucCwgKHN0cnVj
dCBzY3RwX3RjYiAqKU5VTEwsIFNDVFBfTE9HX0xPQ0tfU09DSyk7CisJfQorI2VuZGlmCisJVEFJ
TFFfUkVNT1ZFKCZoZWFkLT5zb19jb21wLCBuZXdzbywgc29fbGlzdCk7CisJaGVhZC0+c29fcWxl
bi0tOworCVNPQ0tfVU5MT0NLKGhlYWQpOworI2Vsc2UKKwluZXdzbyA9IFRBSUxRX0ZJUlNUKCZo
ZWFkLT5zb19xKTsKKwlpZiAoc29xcmVtcXVlKG5ld3NvLCAxKSA9PSAwKSB7CisJCVNDVFBfUFJJ
TlRGKCJzb3JlbXF1ZSBmYWlsZWQsIHBlZWxvZmYtZmFpbHMgKGludmFyaWVudHMgd291bGQgcGFu
aWMpXG4iKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1BFRUxPRkYsIEVOT1RDT05OKTsKKwkJKmVycm9yID0gRU5PVENPTk47CisJCXJldHVy
biAoTlVMTCk7CisKKwl9CisjZW5kaWYKKwkvKgorCSAqIE5vdyB3ZSBtdXN0IG1vdmUgaXQgZnJv
bSBvbmUgaGFzaCB0YWJsZSB0byBhbm90aGVyIGFuZCBnZXQgdGhlCisJICogc3RjYiBpbiB0aGUg
cmlnaHQgcGxhY2UuCisJICovCisJc2N0cF9tb3ZlX3BjYl9hbmRfYXNzb2MoaW5wLCBuX2lucCwg
c3RjYik7CisJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJLyoKKwkgKiBBbmQgbm93IHRoZSBmaW5hbCBoYWNrLiBXZSBtb3Zl
IGRhdGEgaW4gdGhlIHBlbmRpbmcgc2lkZSBpLmUuCisJICogaGVhZCB0byB0aGUgbmV3IHNvY2tl
dCBidWZmZXIuIExldCB0aGUgR1JVQkJJTkcgYmVnaW4gOi0wCisJICovCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykKKwlzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChpbnAsIG5faW5w
LCBzdGNiLCBTQkxfV0FJVCk7CisjZWxzZQorCXNjdHBfcHVsbF9vZmZfY29udHJvbF90b19uZXdf
aW5wKGlucCwgbl9pbnAsIHN0Y2IsIE1fV0FJVE9LKTsKKyNlbmRpZgorCWF0b21pY19zdWJ0cmFj
dF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwlyZXR1cm4gKG5ld3NvKTsKKyNlbmRpZgor
fQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9w
ZWVsb2ZmLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wZWVsb2ZmLmgKaW5k
ZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uYWRlZmNkZWQxMzEx
ZDMxMGVkOGYxOTEzNzZjYTJmZmZiNjk4NGJkYyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfcGVlbG9mZi5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BlZWxvZmYuaApAQCAtMCwwICsxLDcwIEBACisvKi0KKyAqIFNQRFgtTGljZW5z
ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAw
NywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Ogor
ICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBv
ZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
KyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5
cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfcGVl
bG9mZi5oIDMwOTYwNyAyMDE2LTEyLTA2IDEwOjIxOjI1WiB0dWV4ZW4gJCIpOworI2VuZGlmCisK
KyNpZm5kZWYgX05FVElORVRfU0NUUF9QRUVMT0ZGX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBf
UEVFTE9GRl9IXworI2lmIGRlZmluZWQoSEFWRV9TQ1RQX1BFRUxPRkZfU09DS09QVCkKKy8qIHNv
Y2tldCBvcHRpb24gcGVlbG9mZiAqLworc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQgeworI2lmICFk
ZWZpbmVkKF9fV2luZG93c19fKQorCWludCBzOworI2Vsc2UKKwlIQU5ETEUgczsKKyNlbmRpZgor
CXNjdHBfYXNzb2NfdCBhc3NvY19pZDsKKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykKKwlpbnQg
bmV3X3NkOworI2Vsc2UKKwlIQU5ETEUgbmV3X3NkOworI2VuZGlmCit9OworI2VuZGlmIC8qIEhB
VkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQgKi8KKyNpZiBkZWZpbmVkKF9LRVJORUwpCitpbnQgc2N0
cF9jYW5fcGVlbF9vZmYoc3RydWN0IHNvY2tldCAqLCBzY3RwX2Fzc29jX3QpOworaW50IHNjdHBf
ZG9fcGVlbG9mZihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190
KTsKKyNpZiBkZWZpbmVkKEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCitzdHJ1Y3Qgc29ja2V0
ICpzY3RwX2dldF9wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190LCBpbnQgKik7
CitpbnQgc2N0cF9wZWVsb2ZmX29wdGlvbihzdHJ1Y3QgcHJvYyAqcCwgc3RydWN0IHNjdHBfcGVl
bG9mZl9vcHQgKnBlZWxvZmYpOworI2VuZGlmIC8qIEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQg
Ki8KKyNlbmRpZiAvKiBfS0VSTkVMICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50
IHNjdHBfY2FuX3BlZWxfb2ZmKHN0cnVjdCBzb2NrZXQgKiwgc2N0cF9hc3NvY190KTsKK2ludCBz
Y3RwX2RvX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29ja2V0ICosIHNjdHBfYXNz
b2NfdCk7CisjZW5kaWYgLyogX19Vc2Vyc3BhY2VfXyAqLworI2VuZGlmIC8qIF9ORVRJTkVUX1ND
VFBfUEVFTE9GRl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcHJvY2Vzc19sb2NrLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9w
cm9jZXNzX2xvY2suaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1
MzkxLi5jYTY2OTIxMjAyMTA4ODM5MTJlZmViOTljZmZhMjYxY2RmNTMyZTRhIDEwMDc1NQotLS0g
YS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaAorKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wcm9jZXNzX2xvY2suaApAQCAtMCwwICsx
LDY1OSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisg
KgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDExLCBieSBSYW5kYWxs
IFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAx
MSwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAg
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYg
X19zY3RwX3Byb2Nlc3NfbG9ja19oX18KKyNkZWZpbmUgX19zY3RwX3Byb2Nlc3NfbG9ja19oX18K
KworLyoKKyAqIE5lZWQgdG8geWV0IGRlZmluZSBmaXZlIGF0b21pYyBmdWN0aW9ucyBvcgorICog
dGhlaXIgZXF1aXZhbGFudC4KKyAqIC0gYXRvbWljX2FkZF9pbnQoJmZvbywgdmFsKSAtIGFkZCBh
dG9taWNhbGx5IHRoZSB2YWx1ZQorICogLSBhdG9taWNfZmV0Y2hhZGRfaW50KCZmb28sIHZhbCkg
LSBkb2VzIHNhbWUgYXMgYXRvbWljX2FkZF9pbnQKKyAqCQkJCSAgICAgIGJ1dCB2YWx1ZSBpdCB3
YXMgaXMgcmV0dXJuZWQuCisgKiAtIGF0b21pY19zdWJ0cmFjdF9pbnQoJmZvbywgdmFsKSAtIGNh
biBiZSBtYWRlIGZyb20gYXRvbWljX2FkZF9pbnQoKQorICoKKyAqIC0gYXRvbWljX2NtcHNldF9p
bnQoJmZvbywgdmFsdWUsIG5ld3ZhbHVlKSAtIERvZXMgYSBzZXQgb2YgbmV3dmFsdWUKKyAqCQkJ
CQkgICAgICAgIGluIGZvbyBpZiBhbmQgb25seSBpZgorICoJCQkJCSAgICAgICAgZm9vIGlzIHZh
bHVlLiBSZXR1cm5zIDAKKyAqCQkJCQkgICAgICAgIG9uIHN1Y2Nlc3MuCisgKi8KKworI2lmZGVm
IFNDVFBfUEVSX1NPQ0tFVF9MT0NLSU5HCisvKgorICogcGVyIHNvY2tldCBsZXZlbCBsb2NraW5n
CisgKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKy8qIExvY2sgZm9y
IElORk8gc3R1ZmYgKi8KKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmlu
ZSBTQ1RQX0lOUF9JTkZPX1JMT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkK
KyNkZWZpbmUgU0NUUF9JTlBfSU5GT19XTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VO
TE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NU
UF9JUElfQ09VTlRfSU5JVCgpCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2Vs
c2UKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0lOSVQoKQorI2RlZmluZSBTQ1RQX0lOUF9J
TkZPX1JMT0NLKCkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19SVU5MT0NLKCkKKyNkZWZpbmUgU0NU
UF9JTlBfSU5GT19XTE9DSygpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpCisjZGVm
aW5lIFNDVFBfSU5QX0lORk9fTE9DS19ERVNUUk9ZKCkKKyNkZWZpbmUgU0NUUF9JUElfQ09VTlRf
SU5JVCgpCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0RFU1RST1koKQorI2VuZGlmCisKKyNkZWZp
bmUgU0NUUF9UQ0JfU0VORF9MT0NLX0lOSVQoX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9M
T0NLX0RFU1RST1koX3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpCisjZGVm
aW5lIFNDVFBfVENCX1NFTkRfVU5MT0NLKF90Y2IpCisKKy8qIExvY2sgZm9yIElOUCAqLworI2Rl
ZmluZSBTQ1RQX0lOUF9MT0NLX0lOSVQoX2lucCkKKyNkZWZpbmUgU0NUUF9JTlBfTE9DS19ERVNU
Uk9ZKF9pbnApCisKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkKKyNkZWZpbmUgU0NUUF9J
TlBfUlVOTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKQorI2RlZmluZSBT
Q1RQX0lOUF9XVU5MT0NLKF9pbmVwKQorI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKQor
I2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JFRihfaW5wKQorCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVB
VEVfTE9DS19JTklUKF9pbnApCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19ERVNUUk9Z
KF9pbnApCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DSyhfaW5wKQorI2RlZmluZSBTQ1RQ
X0FTT0NfQ1JFQVRFX1VOTE9DSyhfaW5wKQorCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfSU5JVChf
aW5wKQorI2RlZmluZSBTQ1RQX0lOUF9SRUFEX0RFU1RST1koX2lucCkKKyNkZWZpbmUgU0NUUF9J
TlBfUkVBRF9MT0NLKF9pbnApCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApCisK
Ky8qIExvY2sgZm9yIFRDQiAqLworI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0lOSVQoX3RjYikKKyNk
ZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90Y2IpCisjZGVmaW5lIFNDVFBfVENCX0xPQ0so
X3RjYikKKyNkZWZpbmUgU0NUUF9UQ0JfVFJZTE9DSyhfdGNiKSAxCisjZGVmaW5lIFNDVFBfVENC
X1VOTE9DSyhfdGNiKQorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0tfSUZPV05FRChfdGNiKQorI2Rl
ZmluZSBTQ1RQX1RDQl9MT0NLX0FTU0VSVChfdGNiKQorCisjZWxzZQorLyoKKyAqIHBlciB0Y2Ig
bGV2ZWwgbG9ja2luZworICovCisjZGVmaW5lIFNDVFBfSVBJX0NPVU5UX0lOSVQoKQorCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfSU5J
VCgpIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRy
X210eCkpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2Fs
U2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX1dRX0FE
RFJfTE9DSygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8od3FfYWRk
cl9tdHgpKQorI2RlZmluZSBTQ1RQX1dRX0FERFJfVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxT
ZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisKKworI2RlZmluZSBTQ1RQX0lO
UF9JTkZPX0xPQ0tfSU5JVCgpIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JB
U0VfSU5GTyhpcGlfZXBfbXR4KSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19MT0NLX0RFU1RST1ko
KSBcCisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkK
KyNkZWZpbmUgU0NUUF9JTlBfSU5GT19STE9DSygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigm
U0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fVFJZTE9D
SygpCVwKKwlUcnlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210
eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV0xPQ0soKSBcCisJRW50ZXJDcml0aWNhbFNlY3Rp
b24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1JV
TkxPQ0soKSBcCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9t
dHgpKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dVTkxPQ0soKQlcCisJTGVhdmVDcml0aWNhbFNl
Y3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9lcF9tdHgpKQorCisjZGVmaW5lIFNDVFBfSVBfUEtU
TE9HX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8o
aXBpX3BrdGxvZ19tdHgpKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19ERVNUUk9ZICgpIFwKKwlE
ZWxldGVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2dfbXR4KSkKKyNk
ZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NU
UF9CQVNFX0lORk8oaXBpX3BrdGxvZ19tdHgpKQorI2RlZmluZSBTQ1RQX0lQX1BLVExPR19VTkxP
Q0soKSBcCisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2df
bXR4KSkKKworLyoKKyAqIFRoZSBJTlAgbG9ja3Mgd2Ugd2lsbCB1c2UgZm9yIGxvY2tpbmcgYW4g
U0NUUCBlbmRwb2ludCwgc28gZm9yIGV4YW1wbGUgaWYKKyAqIHdlIHdhbnQgdG8gY2hhbmdlIHNv
bWV0aGluZyBhdCB0aGUgZW5kcG9pbnQgbGV2ZWwgZm9yIGV4YW1wbGUgcmFuZG9tX3N0b3JlCisg
KiBvciBjb29raWUgc2VjcmV0cyB3ZSBsb2NrIHRoZSBJTlAgbGV2ZWwuCisgKi8KKyNkZWZpbmUg
U0NUUF9JTlBfUkVBRF9JTklUKF9pbnApIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9uKCYo
X2lucCktPmlucF9yZGF0YV9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfREVTVFJPWShfaW5w
KSBcCisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCisjZGVm
aW5lIFNDVFBfSU5QX1JFQURfTE9DSyhfaW5wKSBcCisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJihf
aW5wKS0+aW5wX3JkYXRhX210eCkKKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9VTkxPQ0soX2lucCkg
XAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9yZGF0YV9tdHgpCisKKyNkZWZp
bmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApIFwKKwlJbml0aWFsaXplQ3JpdGljYWxTZWN0aW9u
KCYoX2lucCktPmlucF9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX0xPQ0tfREVTVFJPWShfaW5wKSBc
CisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjaWZkZWYgU0NUUF9M
T0NLX0xPR0dJTkcKKyNkZWZpbmUgU0NUUF9JTlBfUkxPQ0soX2lucCkgZG8geyAJCQkJCQlcCisJ
aWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19MT0dH
SU5HX0VOQUJMRSkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tf
SU5QKTsJCQlcCisJCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpOwkJCQlc
Cit9IHdoaWxlICgwKQorI2RlZmluZSBTQ1RQX0lOUF9XTE9DSyhfaW5wKSBkbyB7IAkJCQkJCVwK
KwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xP
R0dJTkdfRU5BQkxFKQlcCisJCXNjdHBfbG9nX2xvY2soX2lucCwgTlVMTCwgU0NUUF9MT0dfTE9D
S19JTlApOwkJCVwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfbXR4KTsJCQkJ
CVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBcCisJ
RW50ZXJDcml0aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX210eCkKKyNkZWZpbmUgU0NUUF9JTlBf
V0xPQ0soX2lucCkgXAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisj
ZW5kaWYKKworI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0tfSU5JVChfdGNiKSBcCisJSW5pdGlh
bGl6ZUNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2Jfc2VuZF9tdHgpCisjZGVmaW5lIFNDVFBf
VENCX1NFTkRfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJihf
dGNiKS0+dGNiX3NlbmRfbXR4KQorI2RlZmluZSBTQ1RQX1RDQl9TRU5EX0xPQ0soX3RjYikgXAor
CUVudGVyQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNkZWZpbmUgU0NU
UF9UQ0JfU0VORF9VTkxPQ0soX3RjYikgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYikt
PnRjYl9zZW5kX210eCkKKworI2RlZmluZSBTQ1RQX0lOUF9JTkNSX1JFRihfaW5wKSBhdG9taWNf
YWRkX2ludCgmKChfaW5wKS0+cmVmY291bnQpLCAxKQorI2RlZmluZSBTQ1RQX0lOUF9ERUNSX1JF
RihfaW5wKSBhdG9taWNfYWRkX2ludCgmKChfaW5wKS0+cmVmY291bnQpLCAtMSkKKworI2RlZmlu
ZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0tfSU5JVChfaW5wKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2Fs
U2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFU
RV9MT0NLX0RFU1RST1koX2lucCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5p
bnBfY3JlYXRlX210eCkKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FT
T0NfQ1JFQVRFX0xPQ0soX2lucCkgZG8gewkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9s
b2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0NSRUFURSk7CQlcCisJRW50ZXJDcml0
aWNhbFNlY3Rpb24oJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpOwkJCQlcCit9IHdoaWxlICgwKQor
I2Vsc2UKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIFwKKwlFbnRlckNyaXRp
Y2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkKKyNlbmRpZgorCisjZGVmaW5lIFND
VFBfSU5QX1JVTkxPQ0soX2lucCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCYoX2lucCktPmlu
cF9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCUxlYXZlQ3JpdGljYWxT
ZWN0aW9uKCYoX2lucCktPmlucF9tdHgpCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfVU5MT0NL
KF9pbnApIFwKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9pbnApLT5pbnBfY3JlYXRlX210eCkK
KworLyoKKyAqIEZvciB0aGUgbWFqb3JpdHkgb2YgdGhpbmdzIChvbmNlIHdlIGhhdmUgZm91bmQg
dGhlIGFzc29jaWF0aW9uKSB3ZSB3aWxsCisgKiBsb2NrIHRoZSBhY3R1YWwgYXNzb2NpYXRpb24g
bXV0ZXguIFRoaXMgd2lsbCBwcm90ZWN0IGFsbCB0aGUgYXNzb2ljaWF0aW9uCisgKiBsZXZlbCBx
dWV1ZXMgYW5kIHN0cmVhbXMgYW5kIHN1Y2guIFdlIHdpbGwgbmVlZCB0byBsb2NrIHRoZSBzb2Nr
ZXQgbGF5ZXIKKyAqIHdoZW4gd2Ugc3R1ZmYgZGF0YSB1cCBpbnRvIHRoZSByZWNlaXZpbmcgc2Jf
bWIuIEkuZS4gd2Ugd2lsbCBuZWVkIHRvIGRvIGFuCisgKiBleHRyYSBTT0NLQlVGX0xPQ0soJnNv
LT5zb19yY3YpIGV2ZW4gdGhvdWdoIHRoZSBhc3NvY2lhdGlvbiBpcyBsb2NrZWQuCisgKi8KKwor
I2RlZmluZSBTQ1RQX1RDQl9MT0NLX0lOSVQoX3RjYikgXAorCUluaXRpYWxpemVDcml0aWNhbFNl
Y3Rpb24oJihfdGNiKS0+dGNiX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90
Y2IpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJihfdGNiKS0+dGNiX210eCkKKyNpZmRlZiBT
Q1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIGRvIHsJCQkJCQlc
CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfTE9DS19M
T0dHSU5HX0VOQUJMRSkJXAorCQlzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFND
VFBfTE9HX0xPQ0tfVENCKTsJCVwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2Jf
bXR4KTsJCQkJCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90
Y2IpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmKF90Y2IpLT50Y2JfbXR4KQorI2VuZGlmCisj
ZGVmaW5lIFNDVFBfVENCX1RSWUxPQ0soX3RjYikgCSgoVHJ5RW50ZXJDcml0aWNhbFNlY3Rpb24o
JihfdGNiKS0+dGNiX210eCkpKQorI2RlZmluZSBTQ1RQX1RDQl9VTkxPQ0soX3RjYikgXAorCUxl
YXZlQ3JpdGljYWxTZWN0aW9uKCYoX3RjYiktPnRjYl9tdHgpCisjZGVmaW5lIFNDVFBfVENCX0xP
Q0tfQVNTRVJUKF90Y2IpCisKKyNlbHNlIC8qIGFsbCBVc2Vyc3BhY2VzIGV4Y2VwdCBXaW5kb3dz
ICovCisjZGVmaW5lIFNDVFBfV1FfQUREUl9JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
aW5pdCgmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0
cikpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9ERVNUUk9ZKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0
ZXhfZGVzdHJveSgmU0NUUF9CQVNFX0lORk8od3FfYWRkcl9tdHgpKQorI2lmZGVmIElOVkFSSUFO
VFMKKyNkZWZpbmUgU0NUUF9XUV9BRERSX0xPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4
X2xvY2soJlNDVFBfQkFTRV9JTkZPKHdxX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogd3FfYWRkcl9t
dHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfV1FfQUREUl9VTkxP
Q0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8od3Ff
YWRkcl9tdHgpKSA9PSAwLCAoIiVzOiB3cV9hZGRyX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18p
KQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9XUV9BRERSX0xPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9t
dXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyh3cV9hZGRyX210eCkpCisjZGVmaW5lIFNDVFBfV1Ff
QUREUl9VTkxPQ0soKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9J
TkZPKHdxX2FkZHJfbXR4KSkKKyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fTE9DS19J
TklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmU0NUUF9CQVNFX0lORk8oaXBpX2Vw
X210eCksICZTQ1RQX0JBU0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19M
T0NLX0RFU1RST1koKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZTQ1RQX0JBU0Vf
SU5GTyhpcGlfZXBfbXR4KSkKKyNpZmRlZiBJTlZBUklBTlRTCisjZGVmaW5lIFNDVFBfSU5QX0lO
Rk9fUkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZP
KGlwaV9lcF9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfZXBfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19m
dW5jX18pKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAorCUtBU1NFUlQocHRocmVh
ZF9tdXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkgPT0gMCwgKCIlczogaXBp
X2VwX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBfSU5G
T19SVU5MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJlNDVFBfQkFTRV9J
TkZPKGlwaV9lcF9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfZXBfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1
bmNfXykpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJl
YWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSkgPT0gMCwgKCIlczog
aXBpX2VwX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9J
TlBfSU5GT19STE9DSygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9J
TkZPKGlwaV9lcF9tdHgpKQorI2RlZmluZSBTQ1RQX0lOUF9JTkZPX1dMT0NLKCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5l
IFNDVFBfSU5QX0lORk9fUlVOTE9DSygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygm
U0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpCisjZGVmaW5lIFNDVFBfSU5QX0lORk9fV1VOTE9D
SygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2Vw
X210eCkpCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9JTlBfSU5GT19UUllMT0NLKCkgXAorCSghKHB0
aHJlYWRfbXV0ZXhfdHJ5bG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2VwX210eCkpKSkKKworI2Rl
ZmluZSBTQ1RQX0lQX1BLVExPR19JTklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgm
U0NUUF9CQVNFX0lORk8oaXBpX3BrdGxvZ19tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikp
CisjZGVmaW5lIFNDVFBfSVBfUEtUTE9HX0RFU1RST1koKSBcCisJKHZvaWQpcHRocmVhZF9tdXRl
eF9kZXN0cm95KCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisjaWZkZWYgSU5WQVJJ
QU5UUworI2RlZmluZSBTQ1RQX0lQX1BLVExPR19MT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9t
dXRleF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpID09IDAsICgiJXM6IGlw
aV9wa3Rsb2dfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX0lQ
X1BLVExPR19VTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9C
QVNFX0lORk8oaXBpX3BrdGxvZ19tdHgpKSA9PSAwLCAoIiVzOiBpcGlfcGt0bG9nX210eCBub3Qg
bG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfTE9DSygp
IFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJlNDVFBfQkFTRV9JTkZPKGlwaV9wa3Rsb2df
bXR4KSkKKyNkZWZpbmUgU0NUUF9JUF9QS1RMT0dfVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRf
bXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfcGt0bG9nX210eCkpCisjZW5kaWYKKwor
CisvKgorICogVGhlIElOUCBsb2NrcyB3ZSB3aWxsIHVzZSBmb3IgbG9ja2luZyBhbiBTQ1RQIGVu
ZHBvaW50LCBzbyBmb3IgZXhhbXBsZSBpZgorICogd2Ugd2FudCB0byBjaGFuZ2Ugc29tZXRoaW5n
IGF0IHRoZSBlbmRwb2ludCBsZXZlbCBmb3IgZXhhbXBsZSByYW5kb21fc3RvcmUKKyAqIG9yIGNv
b2tpZSBzZWNyZXRzIHdlIGxvY2sgdGhlIElOUCBsZXZlbC4KKyAqLworI2RlZmluZSBTQ1RQX0lO
UF9SRUFEX0lOSVQoX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmKF9pbnApLT5p
bnBfcmRhdGFfbXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSU5Q
X1JFQURfREVTVFJPWShfaW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCYoX2lu
cCktPmlucF9yZGF0YV9tdHgpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTQ1RQX0lOUF9S
RUFEX0xPQ0soX2lucCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlu
cF9yZGF0YV9tdHgpID09IDAsICgiJXM6IGlucF9yZGF0YV9tdHggYWxyZWFkeSBsb2NrZWQiLCBf
X2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwKKwlLQVNTRVJU
KHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9yZGF0YV9tdHgpID09IDAsICgiJXM6
IGlucF9yZGF0YV9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFND
VFBfSU5QX1JFQURfTE9DSyhfaW5wKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lu
cCktPmlucF9yZGF0YV9tdHgpCisjZGVmaW5lIFNDVFBfSU5QX1JFQURfVU5MT0NLKF9pbnApIFwK
Kwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfcmRhdGFfbXR4KQorI2Vu
ZGlmCisKKyNkZWZpbmUgU0NUUF9JTlBfTE9DS19JTklUKF9pbnApIFwKKwkodm9pZClwdGhyZWFk
X211dGV4X2luaXQoJihfaW5wKS0+aW5wX210eCwgJlNDVFBfQkFTRV9WQVIobXR4X2F0dHIpKQor
I2RlZmluZSBTQ1RQX0lOUF9MT0NLX0RFU1RST1koX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0
ZXhfZGVzdHJveSgmKF9pbnApLT5pbnBfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNpZmRlZiBT
Q1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBkbyB7CQkJCQkJ
CQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xP
Q0tfTE9HR0lOR19FTkFCTEUpCQkJCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQ
X0xPR19MT0NLX0lOUCk7CQkJCQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lu
cCktPmlucF9tdHgpID09IDAsICgiJXM6IGlucF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNf
XykpCVwKK30gd2hpbGUgKDApCisjZGVmaW5lIFNDVFBfSU5QX1dMT0NLKF9pbnApIGRvIHsJCQkJ
CQkJCQlcCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TE9DS19MT0dHSU5HX0VOQUJMRSkJCQkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFND
VFBfTE9HX0xPQ0tfSU5QKTsJCQkJCQlcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJihf
aW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5wX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVu
Y19fKSkKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBc
CisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIl
czogaW5wX210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JTlBf
V0xPQ0soX2lucCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9t
dHgpID09IDAsICgiJXM6IGlucF9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZW5k
aWYKKyNkZWZpbmUgU0NUUF9JTlBfUlVOTE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFkX211
dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4KSA9PSAwLCAoIiVzOiBpbnBfbXR4IG5vdCBsb2Nr
ZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSU5QX1dVTkxPQ0soX2lucCkgXAorCUtBU1NF
UlQocHRocmVhZF9tdXRleF91bmxvY2soJihfaW5wKS0+aW5wX210eCkgPT0gMCwgKCIlczogaW5w
X210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UKKyNpZmRlZiBTQ1RQX0xPQ0tfTE9H
R0lORworI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBkbyB7CQkJCQkJXAorCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFC
TEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBOVUxMLCBTQ1RQX0xPR19MT0NLX0lOUCk7CQkJ
XAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmKF9pbnApLT5pbnBfbXR4KTsJCQkJXAorfSB3
aGlsZSAoMCkKKyNkZWZpbmUgU0NUUF9JTlBfV0xPQ0soX2lucCkgZG8gewkJCQkJCVwKKwlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdf
RU5BQkxFKQlcCisJCXNjdHBfbG9nX2xvY2soX2lucCwgTlVMTCwgU0NUUF9MT0dfTE9DS19JTlAp
OwkJCVwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210eCk7CQkJCVwK
K30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX0lOUF9STE9DSyhfaW5wKSBcCisJKHZv
aWQpcHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9tdHgpCisjZGVmaW5lIFNDVFBfSU5Q
X1dMT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX210
eCkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX0lOUF9SVU5MT0NLKF9pbnApIFwKKwkodm9pZClwdGhy
ZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4KQorI2RlZmluZSBTQ1RQX0lOUF9XVU5M
T0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmKF9pbnApLT5pbnBfbXR4
KQorI2VuZGlmCisjZGVmaW5lIFNDVFBfSU5QX0lOQ1JfUkVGKF9pbnApIGF0b21pY19hZGRfaW50
KCYoKF9pbnApLT5yZWZjb3VudCksIDEpCisjZGVmaW5lIFNDVFBfSU5QX0RFQ1JfUkVGKF9pbnAp
IGF0b21pY19hZGRfaW50KCYoKF9pbnApLT5yZWZjb3VudCksIC0xKQorCisjZGVmaW5lIFNDVFBf
VENCX1NFTkRfTE9DS19JTklUKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2luaXQoJihf
dGNiKS0+dGNiX3NlbmRfbXR4LCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFND
VFBfVENCX1NFTkRfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2Rl
c3Ryb3koJihfdGNiKS0+dGNiX3NlbmRfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUg
U0NUUF9UQ0JfU0VORF9MT0NLKF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygm
KF90Y2IpLT50Y2Jfc2VuZF9tdHgpID09IDAsICgiJXM6IHRjYl9zZW5kX210eCBhbHJlYWR5IGxv
Y2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxPQ0soX3RjYikgXAor
CUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+dGNiX3NlbmRfbXR4KSA9PSAw
LCAoIiVzOiB0Y2Jfc2VuZF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVm
aW5lIFNDVFBfVENCX1NFTkRfTE9DSyhfdGNiKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2Nr
KCYoX3RjYiktPnRjYl9zZW5kX210eCkKKyNkZWZpbmUgU0NUUF9UQ0JfU0VORF9VTkxPQ0soX3Rj
YikgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX3RjYiktPnRjYl9zZW5kX210eCkK
KyNlbmRpZgorCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfTE9DS19JTklUKF9pbnApIFwKKwko
dm9pZClwdGhyZWFkX211dGV4X2luaXQoJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgsICZTQ1RQX0JB
U0VfVkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9BU09DX0NSRUFURV9MT0NLX0RFU1RST1ko
X2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmKF9pbnApLT5pbnBfY3JlYXRl
X210eCkKKyNpZmRlZiBJTlZBUklBTlRTCisjaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKyNkZWZp
bmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIGRvIHsJCQkJCQkJCQkJXAorCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFC
TEUpCQkJCQkJXAorCQlzY3RwX2xvZ19sb2NrKF9pbnAsIE5VTEwsIFNDVFBfTE9HX0xPQ0tfQ1JF
QVRFKTsJCQkJCQkJXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCYoX2lucCktPmlucF9j
cmVhdGVfbXR4KSA9PSAwLCAoIiVzOiBpbnBfY3JlYXRlX210eCBhbHJlYWR5IGxvY2tlZCIsIF9f
ZnVuY19fKSkJXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVf
TE9DSyhfaW5wKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xvY2soJihfaW5wKS0+aW5wX2Ny
ZWF0ZV9tdHgpID09IDAsICgiJXM6IGlucF9jcmVhdGVfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19m
dW5jX18pKQorI2VuZGlmCisjZGVmaW5lIFNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKF9pbnApIFwK
KwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCktPmlucF9jcmVhdGVfbXR4KSA9
PSAwLCAoIiVzOiBpbnBfY3JlYXRlX210eCBub3QgbG9ja2VkIiwgX19mdW5jX18pKQorI2Vsc2UK
KyNpZmRlZiBTQ1RQX0xPQ0tfTE9HR0lORworI2RlZmluZSBTQ1RQX0FTT0NfQ1JFQVRFX0xPQ0so
X2lucCkgZG8gewkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpCVwKKwkJc2N0cF9sb2dfbG9jayhfaW5wLCBO
VUxMLCBTQ1RQX0xPR19MT0NLX0NSRUFURSk7CQlcCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2Nr
KCYoX2lucCktPmlucF9jcmVhdGVfbXR4KTsJCQlcCit9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZp
bmUgU0NUUF9BU09DX0NSRUFURV9MT0NLKF9pbnApIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xv
Y2soJihfaW5wKS0+aW5wX2NyZWF0ZV9tdHgpCisjZW5kaWYKKyNkZWZpbmUgU0NUUF9BU09DX0NS
RUFURV9VTkxPQ0soX2lucCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCYoX2lucCkt
PmlucF9jcmVhdGVfbXR4KQorI2VuZGlmCisvKgorICogRm9yIHRoZSBtYWpvcml0eSBvZiB0aGlu
Z3MgKG9uY2Ugd2UgaGF2ZSBmb3VuZCB0aGUgYXNzb2NpYXRpb24pIHdlIHdpbGwKKyAqIGxvY2sg
dGhlIGFjdHVhbCBhc3NvY2lhdGlvbiBtdXRleC4gVGhpcyB3aWxsIHByb3RlY3QgYWxsIHRoZSBh
c3NvaWNpYXRpb24KKyAqIGxldmVsIHF1ZXVlcyBhbmQgc3RyZWFtcyBhbmQgc3VjaC4gV2Ugd2ls
bCBuZWVkIHRvIGxvY2sgdGhlIHNvY2tldCBsYXllcgorICogd2hlbiB3ZSBzdHVmZiBkYXRhIHVw
IGludG8gdGhlIHJlY2VpdmluZyBzYl9tYi4gSS5lLiB3ZSB3aWxsIG5lZWQgdG8gZG8gYW4KKyAq
IGV4dHJhIFNPQ0tCVUZfTE9DSygmc28tPnNvX3JjdikgZXZlbiB0aG91Z2ggdGhlIGFzc29jaWF0
aW9uIGlzIGxvY2tlZC4KKyAqLworCisjZGVmaW5lIFNDVFBfVENCX0xPQ0tfSU5JVChfdGNiKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF9pbml0KCYoX3RjYiktPnRjYl9tdHgsICZTQ1RQX0JBU0Vf
VkFSKG10eF9hdHRyKSkKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DS19ERVNUUk9ZKF90Y2IpIFwKKwko
dm9pZClwdGhyZWFkX211dGV4X2Rlc3Ryb3koJihfdGNiKS0+dGNiX210eCkKKyNpZmRlZiBJTlZB
UklBTlRTCisjaWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKyNkZWZpbmUgU0NUUF9UQ0JfTE9DSyhf
dGNiKSBkbyB7CQkJCQkJCQkJXAorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX0xPQ0tfTE9HR0lOR19FTkFCTEUpIAkJCQlcCisJCXNjdHBfbG9nX2xvY2so
X3RjYi0+c2N0cF9lcCwgX3RjYiwgU0NUUF9MT0dfTE9DS19UQ0IpOwkJCQkJXAorCUtBU1NFUlQo
cHRocmVhZF9tdXRleF9sb2NrKCYoX3RjYiktPnRjYl9tdHgpID09IDAsICgiJXM6IHRjYl9tdHgg
YWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCVwKK30gd2hpbGUgKDApCisjZWxzZQorI2RlZmlu
ZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmKF90
Y2IpLT50Y2JfbXR4KSA9PSAwLCAoIiVzOiB0Y2JfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5j
X18pKQorI2VuZGlmCisjZGVmaW5lIFNDVFBfVENCX1VOTE9DSyhfdGNiKSBcCisJS0FTU0VSVChw
dGhyZWFkX211dGV4X3VubG9jaygmKF90Y2IpLT50Y2JfbXR4KSA9PSAwLCAoIiVzOiB0Y2JfbXR4
IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2lmZGVmIFNDVFBfTE9DS19MT0dHSU5H
CisjZGVmaW5lIFNDVFBfVENCX0xPQ0soX3RjYikgZG8gewkJCQkJCVwKKwlpZiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSAJ
XAorCQlzY3RwX2xvZ19sb2NrKF90Y2ItPnNjdHBfZXAsIF90Y2IsIFNDVFBfTE9HX0xPQ0tfVENC
KTsJCVwKKwkodm9pZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX210eCk7CQkJCVwK
K30gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBTQ1RQX1RDQl9MT0NLKF90Y2IpIFwKKwkodm9p
ZClwdGhyZWFkX211dGV4X2xvY2soJihfdGNiKS0+dGNiX210eCkKKyNlbmRpZgorI2RlZmluZSBT
Q1RQX1RDQl9VTkxPQ0soX3RjYikgKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJihfdGNiKS0+
dGNiX210eCkKKyNlbmRpZgorI2RlZmluZSBTQ1RQX1RDQl9MT0NLX0FTU0VSVChfdGNiKSBcCisJ
S0FTU0VSVChwdGhyZWFkX211dGV4X3RyeWxvY2soJihfdGNiKS0+dGNiX210eCkgPT0gRUJVU1ks
ICgiJXM6IHRjYl9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9UQ0Jf
VFJZTE9DSyhfdGNiKSAoIShwdGhyZWFkX211dGV4X3RyeWxvY2soJihfdGNiKS0+dGNiX210eCkp
KQorI2VuZGlmCisKKyNlbmRpZiAvKiBTQ1RQX1BFUl9TT0NLRVRfTE9DS0lORyAqLworCisKKy8q
CisgKiBjb21tb24gbG9ja3MKKyAqLworCisvKiBjb3BpZWQgb3ZlciB0byBjb21waWxlICovCisj
ZGVmaW5lIFNDVFBfSU5QX0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlm
IHRoaXMgaXMgcG9zc2libGUgKi8KKyNkZWZpbmUgU0NUUF9JTlBfUkVBRF9DT05URU5ERUQoX2lu
cCkgKDApIC8qIERvbid0IGtub3cgaWYgdGhpcyBpcyBwb3NzaWJsZSAqLworI2RlZmluZSBTQ1RQ
X0FTT0NfQ1JFQVRFX0xPQ0tfQ09OVEVOREVEKF9pbnApICgwKSAvKiBEb24ndCBrbm93IGlmIHRo
aXMgaXMgcG9zc2libGUgKi8KKworLyogc29ja2V0IGxvY2tzICovCisKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19BU1NFUlQoX3NvX2J1
ZikKKyNkZWZpbmUgU09DS0JVRl9MT0NLKF9zb19idWYpIFwKKwlFbnRlckNyaXRpY2FsU2VjdGlv
bigmKF9zb19idWYpLT5zYl9tdHgpCisjZGVmaW5lIFNPQ0tCVUZfVU5MT0NLKF9zb19idWYpIFwK
KwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmKF9zb19idWYpLT5zYl9tdHgpCisjZGVmaW5lIFNPQ0tf
TE9DSyhfc28pIFwKKwlTT0NLQlVGX0xPQ0soJihfc28pLT5zb19yY3YpCisjZGVmaW5lIFNPQ0tf
VU5MT0NLKF9zbykgXAorCVNPQ0tCVUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQorI2Vsc2UKKyNk
ZWZpbmUgU09DS0JVRl9MT0NLX0FTU0VSVChfc29fYnVmKSBcCisJS0FTU0VSVChwdGhyZWFkX211
dGV4X3RyeWxvY2soU09DS0JVRl9NVFgoX3NvX2J1ZikpID09IEVCVVNZLCAoIiVzOiBzb2NrZXQg
YnVmZmVyIG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmlu
ZSBTT0NLQlVGX0xPQ0soX3NvX2J1ZikgXAorCUtBU1NFUlQocHRocmVhZF9tdXRleF9sb2NrKFNP
Q0tCVUZfTVRYKF9zb19idWYpKSA9PSAwLCAoIiVzOiBzb2NrYnVmX210eCBhbHJlYWR5IGxvY2tl
ZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU09DS0JVRl9VTkxPQ0soX3NvX2J1ZikgXAorCUtBU1NF
UlQocHRocmVhZF9tdXRleF91bmxvY2soU09DS0JVRl9NVFgoX3NvX2J1ZikpID09IDAsICgiJXM6
IHNvY2tidWZfbXR4IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2RlZmluZSBTT0NL
QlVGX0xPQ0soX3NvX2J1ZikgXAorCXB0aHJlYWRfbXV0ZXhfbG9jayhTT0NLQlVGX01UWChfc29f
YnVmKSkKKyNkZWZpbmUgU09DS0JVRl9VTkxPQ0soX3NvX2J1ZikgXAorCXB0aHJlYWRfbXV0ZXhf
dW5sb2NrKFNPQ0tCVUZfTVRYKF9zb19idWYpKQorI2VuZGlmCisjZGVmaW5lIFNPQ0tfTE9DSyhf
c28pIFwKKwlTT0NLQlVGX0xPQ0soJihfc28pLT5zb19yY3YpCisjZGVmaW5lIFNPQ0tfVU5MT0NL
KF9zbykgXAorCVNPQ0tCVUZfVU5MT0NLKCYoX3NvKS0+c29fcmN2KQorI2VuZGlmCisKKyNkZWZp
bmUgU0NUUF9TVEFUTE9HX0lOSVRfTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExPR19MT0NLKCkK
KyNkZWZpbmUgU0NUUF9TVEFUTE9HX1VOTE9DSygpCisjZGVmaW5lIFNDVFBfU1RBVExPR19ERVNU
Uk9ZKCkKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKy8qIGFkZHJlc3Mg
bGlzdCBsb2NrcyAqLworI2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKSBcCisJSW5pdGlhbGl6
ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUg
U0NUUF9JUElfQUREUl9ERVNUUk9ZKCkgXAorCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmU0NUUF9C
QVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9STE9DSygpIFwK
KwlFbnRlckNyaXRpY2FsU2VjdGlvbigmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkKKyNk
ZWZpbmUgU0NUUF9JUElfQUREUl9SVU5MT0NLKCkgXAorCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZT
Q1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dMT0NL
KCkgXAorCUVudGVyQ3JpdGljYWxTZWN0aW9uKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgp
KQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1dVTkxPQ0soKSBcCisJTGVhdmVDcml0aWNhbFNlY3Rp
b24oJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpCisKKworLyogaXRlcmF0b3IgbG9ja3Mg
Ki8KKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRp
Y2FsU2VjdGlvbigmc2N0cF9pdF9jdGwuaXRfbXR4KQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX0xP
Q0tfREVTVFJPWSgpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLml0X210
eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkgXAorCQlFbnRlckNyaXRpY2FsU2VjdGlv
bigmc2N0cF9pdF9jdGwuaXRfbXR4KQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX1VOTE9DSygpIFwK
KwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmc2N0cF9pdF9jdGwuaXRfbXR4KQorCisjZGVmaW5lIFND
VFBfSVBJX0lURVJBVE9SX1dRX0lOSVQoKSBcCisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigm
c2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFU
T1JfV1FfREVTVFJPWSgpIFwKKwlEZWxldGVDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlw
aV9pdGVyYXRvcl93cV9tdHgpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKSBc
CisJRW50ZXJDcml0aWNhbFNlY3Rpb24oJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgp
CisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpIFwKKwlMZWF2ZUNyaXRpY2Fs
U2VjdGlvbigmc2N0cF9pdF9jdGwuaXBpX2l0ZXJhdG9yX3dxX210eCkKKworI2Vsc2UgLyogZW5k
IG9mIF9fVXNlcnNwYWNlX29zX1dpbmRvd3MgKi8KKy8qIGFkZHJlc3MgbGlzdCBsb2NrcyAqLwor
I2RlZmluZSBTQ1RQX0lQSV9BRERSX0lOSVQoKSBcCisJKHZvaWQpcHRocmVhZF9tdXRleF9pbml0
KCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpLCAmU0NUUF9CQVNFX1ZBUihtdHhfYXR0cikp
CisjZGVmaW5lIFNDVFBfSVBJX0FERFJfREVTVFJPWSgpIFwKKwkodm9pZClwdGhyZWFkX211dGV4
X2Rlc3Ryb3koJlNDVFBfQkFTRV9JTkZPKGlwaV9hZGRyX210eCkpCisjaWZkZWYgSU5WQVJJQU5U
UworI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgXAorCUtBU1NFUlQocHRocmVhZF9tdXRl
eF9sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfYWRk
cl9tdHggYWxyZWFkeSBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lIFNDVFBfSVBJX0FERFJf
UlVOTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5G
TyhpcGlfYWRkcl9tdHgpKSA9PSAwLCAoIiVzOiBpcGlfYWRkcl9tdHggbm90IGxvY2tlZCIsIF9f
ZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XTE9DSygpIFwKKwlLQVNTRVJUKHB0aHJl
YWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkgPT0gMCwgKCIlczog
aXBpX2FkZHJfbXR4IGFscmVhZHkgbG9ja2VkIiwgX19mdW5jX18pKQorI2RlZmluZSBTQ1RQX0lQ
SV9BRERSX1dVTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmU0NUUF9C
QVNFX0lORk8oaXBpX2FkZHJfbXR4KSkgPT0gMCwgKCIlczogaXBpX2FkZHJfbXR4IG5vdCBsb2Nr
ZWQiLCBfX2Z1bmNfXykpCisjZWxzZQorI2RlZmluZSBTQ1RQX0lQSV9BRERSX1JMT0NLKCkgXAor
CSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8oaXBpX2FkZHJfbXR4KSkK
KyNkZWZpbmUgU0NUUF9JUElfQUREUl9SVU5MT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhf
dW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2RlZmluZSBTQ1RQX0lQSV9B
RERSX1dMT0NLKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfbG9jaygmU0NUUF9CQVNFX0lORk8o
aXBpX2FkZHJfbXR4KSkKKyNkZWZpbmUgU0NUUF9JUElfQUREUl9XVU5MT0NLKCkgXAorCSh2b2lk
KXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZTQ1RQX0JBU0VfSU5GTyhpcGlfYWRkcl9tdHgpKQorI2Vu
ZGlmCisKKy8qIGl0ZXJhdG9yIGxvY2tzICovCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19J
TklUKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfaW5pdCgmc2N0cF9pdF9jdGwuaXRfbXR4LCAm
U0NUUF9CQVNFX1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DS19ERVNU
Uk9ZKCkgXAorCSh2b2lkKXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgmc2N0cF9pdF9jdGwuaXRfbXR4
KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9MT0NLKCkgXAorCUtB
U1NFUlQocHRocmVhZF9tdXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pdF9tdHgpID09IDAsICgiJXM6
IGl0X210eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JVEVSQVRP
Ul9VTkxPQ0soKSBcCisJS0FTU0VSVChwdGhyZWFkX211dGV4X3VubG9jaygmc2N0cF9pdF9jdGwu
aXRfbXR4KSA9PSAwLCAoIiVzOiBpdF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNl
CisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTE9DSygpIFwKKwkodm9pZClwdGhyZWFkX211dGV4X2xv
Y2soJnNjdHBfaXRfY3RsLml0X210eCkKKyNkZWZpbmUgU0NUUF9JVEVSQVRPUl9VTkxPQ0soKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLml0X210eCkKKyNlbmRp
ZgorCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0lOSVQoKSBcCisJKHZvaWQpcHRocmVh
ZF9tdXRleF9pbml0KCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4LCAmU0NUUF9CQVNF
X1ZBUihtdHhfYXR0cikpCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0RFU1RST1koKSBc
CisJKHZvaWQpcHRocmVhZF9tdXRleF9kZXN0cm95KCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jf
d3FfbXR4KQorI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1Ff
TE9DSygpIFwKKwlLQVNTRVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmc2N0cF9pdF9jdGwuaXBpX2l0
ZXJhdG9yX3dxX210eCkgPT0gMCwgKCIlczogaXBpX2l0ZXJhdG9yX3dxX210eCBhbHJlYWR5IGxv
Y2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUgU0NUUF9JUElfSVRFUkFUT1JfV1FfVU5MT0NLKCkg
XAorCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRv
cl93cV9tdHgpID09IDAsICgiJXM6IGlwaV9pdGVyYXRvcl93cV9tdHggbm90IGxvY2tlZCIsIF9f
ZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lIFNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKSBcCisJ
KHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZzY3RwX2l0X2N0bC5pcGlfaXRlcmF0b3Jfd3FfbXR4
KQorI2RlZmluZSBTQ1RQX0lQSV9JVEVSQVRPUl9XUV9VTkxPQ0soKSBcCisJKHZvaWQpcHRocmVh
ZF9tdXRleF91bmxvY2soJnNjdHBfaXRfY3RsLmlwaV9pdGVyYXRvcl93cV9tdHgpCisjZW5kaWYK
KyNlbmRpZgorCisjZGVmaW5lIFNDVFBfSU5DUl9FUF9DT1VOVCgpIFwKKwlhdG9taWNfYWRkX2lu
dCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2VwKSwgMSkKKworI2RlZmluZSBTQ1RQX0RFQ1Jf
RVBfQ09VTlQoKSBcCisJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2Nv
dW50X2VwKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfQVNPQ19DT1VOVCgpIFwKKwlhdG9taWNf
YWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X2Fzb2MpLCAxKQorCisjZGVmaW5lIFND
VFBfREVDUl9BU09DX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9pbnQoJlNDVFBfQkFTRV9J
TkZPKGlwaV9jb3VudF9hc29jKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfTEFERFJfQ09VTlQo
KSBcCisJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkciksIDEp
CisKKyNkZWZpbmUgU0NUUF9ERUNSX0xBRERSX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0cmFjdF9p
bnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9sYWRkciksIDEpCisKKyNkZWZpbmUgU0NUUF9J
TkNSX1JBRERSX0NPVU5UKCkgXAorCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlf
Y291bnRfcmFkZHIpLCAxKQorCisjZGVmaW5lIFNDVFBfREVDUl9SQUREUl9DT1VOVCgpIFwKKwlh
dG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfcmFkZHIpLCAxKQor
CisjZGVmaW5lIFNDVFBfSU5DUl9DSEtfQ09VTlQoKSBcCisJYXRvbWljX2FkZF9pbnQoJlNDVFBf
QkFTRV9JTkZPKGlwaV9jb3VudF9jaHVuayksIDEpCisKKyNkZWZpbmUgU0NUUF9ERUNSX0NIS19D
T1VOVCgpIFwKKwlhdG9taWNfc3VidHJhY3RfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRf
Y2h1bmspLCAxKQorCisjZGVmaW5lIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgpIFwKKwlhdG9taWNf
YWRkX2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2NvdW50X3JlYWRxKSwgMSkKKworI2RlZmluZSBT
Q1RQX0RFQ1JfUkVBRFFfQ09VTlQoKSBcCisJYXRvbWljX3N1YnRyYWN0X2ludCgmU0NUUF9CQVNF
X0lORk8oaXBpX2NvdW50X3JlYWRxKSwgMSkKKworI2RlZmluZSBTQ1RQX0lOQ1JfU1RSTU9RX0NP
VU5UKCkgXAorCWF0b21pY19hZGRfaW50KCZTQ1RQX0JBU0VfSU5GTyhpcGlfY291bnRfc3RybW9x
KSwgMSkKKworI2RlZmluZSBTQ1RQX0RFQ1JfU1RSTU9RX0NPVU5UKCkgXAorCWF0b21pY19zdWJ0
cmFjdF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9jb3VudF9zdHJtb3EpLCAxKQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuYwppbmRleCBlNjlkZTI5YmIyZDFk
NjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5hYmE2MTYwNjliNzIyYzkwMjMzN2UxNDE4MGNm
M2M2YmMzOTgyZDczIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9zaGExLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5jCkBA
IC0wLDAgKzEsMzI5IEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D
bGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5
IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykg
MjAwOC0yMDEzLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAxMywgICAgICBieSBMYWxseSBTaW5naC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVt
cywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3NoYTEuaD4KKworI2lmIGRlZmluZWQo
U0NUUF9VU0VfTlNTX1NIQTEpCisvKiBBIFNIQS0xIERpZ2VzdCBpcyAxNjAgYml0cywgb3IgMjAg
Ynl0ZXMgKi8KKyNkZWZpbmUgU0hBX0RJR0VTVF9MRU5HVEggKDIwKQorCit2b2lkCitzY3RwX3No
YTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwljdHgtPnBrMTFfY3R4
ID0gUEsxMV9DcmVhdGVEaWdlc3RDb250ZXh0KFNFQ19PSURfU0hBMSk7CisJUEsxMV9EaWdlc3RC
ZWdpbihjdHgtPnBrMTFfY3R4KTsKK30KKwordm9pZAorc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qg
c2N0cF9zaGExX2NvbnRleHQgKmN0eCwgY29uc3QgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25l
ZCBpbnQgc2l6KQoreworCVBLMTFfRGlnZXN0T3AoY3R4LT5wazExX2N0eCwgcHRyLCBzaXopOwor
fQorCit2b2lkCitzY3RwX3NoYTFfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qg
c2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwl1bnNpZ25lZCBpbnQgb3V0cHV0X2xlbiA9IDA7
CisKKwlQSzExX0RpZ2VzdEZpbmFsKGN0eC0+cGsxMV9jdHgsIGRpZ2VzdCwgJm91dHB1dF9sZW4s
IFNIQV9ESUdFU1RfTEVOR1RIKTsKKwlQSzExX0Rlc3Ryb3lDb250ZXh0KGN0eC0+cGsxMV9jdHgs
IFBSX1RSVUUpOworfQorCisjZWxpZiBkZWZpbmVkKFNDVFBfVVNFX09QRU5TU0xfU0hBMSkKKwor
dm9pZAorc2N0cF9zaGExX2luaXQoc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0ICpjdHgpCit7CisJ
U0hBMV9Jbml0KCZjdHgtPnNoYV9jdHgpOworfQorCit2b2lkCitzY3RwX3NoYTFfdXBkYXRlKHN0
cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqY3R4LCBjb25zdCB1bnNpZ25lZCBjaGFyICpwdHIsIHVu
c2lnbmVkIGludCBzaXopCit7CisJU0hBMV9VcGRhdGUoJmN0eC0+c2hhX2N0eCwgcHRyLCAodW5z
aWduZWQgbG9uZylzaXopOworfQorCit2b2lkCitzY3RwX3NoYTFfZmluYWwodW5zaWduZWQgY2hh
ciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCkKK3sKKwlTSEExX0ZpbmFs
KGRpZ2VzdCwgJmN0eC0+c2hhX2N0eCk7Cit9CisKKyNlbHNlCisKKyNpbmNsdWRlIDxzdHJpbmcu
aD4KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8d2luc29j
azIuaD4KKyNlbGlmICFkZWZpbmVkKF9fV2luZG93c19fKQorI2luY2x1ZGUgPGFycGEvaW5ldC5o
PgorI2VuZGlmCisKKyNkZWZpbmUgRjEoQixDLEQpICgoKEIgJiBDKSB8ICgofkIpICYgRCkpKQkv
KiAwICA8PSB0IDw9IDE5ICovCisjZGVmaW5lIEYyKEIsQyxEKSAoQiBeIEMgXiBEKQkvKiAyMCA8
PSB0IDw9IDM5ICovCisjZGVmaW5lIEYzKEIsQyxEKSAoKEIgJiBDKSB8IChCICYgRCkgfCAoQyAm
IEQpKQkvKiA0MCA8PSB0IDw9IDU5ICovCisjZGVmaW5lIEY0KEIsQyxEKSAoQiBeIEMgXiBEKQkv
KiA2MDAgPD0gdCA8PSA3OSAqLworCisvKiBjaXJjdWxhciBzaGlmdCAqLworI2RlZmluZSBDU0hJ
RlQoQSxCKSAoKEIgPDwgQSkgfCAoQiA+PiAoMzItQSkpKQorCisjZGVmaW5lIEsxIDB4NWE4Mjc5
OTkJCS8qIDAgIDw9IHQgPD0gMTkgKi8KKyNkZWZpbmUgSzIgMHg2ZWQ5ZWJhMQkJLyogMjAgPD0g
dCA8PSAzOSAqLworI2RlZmluZSBLMyAweDhmMWJiY2RjCQkvKiA0MCA8PSB0IDw9IDU5ICovCisj
ZGVmaW5lIEs0IDB4Y2E2MmMxZDYJCS8qIDYwIDw9IHQgPD0gNzkgKi8KKworI2RlZmluZSBIMElO
SVQgMHg2NzQ1MjMwMQorI2RlZmluZSBIMUlOSVQgMHhlZmNkYWI4OQorI2RlZmluZSBIMklOSVQg
MHg5OGJhZGNmZQorI2RlZmluZSBIM0lOSVQgMHgxMDMyNTQ3NgorI2RlZmluZSBINElOSVQgMHhj
M2QyZTFmMAorCit2b2lkCitzY3RwX3NoYTFfaW5pdChzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQg
KmN0eCkKK3sKKwkvKiBJbml0IHRoZSBTSEEtMSBjb250ZXh0IHN0cnVjdHVyZSAqLworCWN0eC0+
QSA9IDA7CisJY3R4LT5CID0gMDsKKwljdHgtPkMgPSAwOworCWN0eC0+RCA9IDA7CisJY3R4LT5F
ID0gMDsKKwljdHgtPkgwID0gSDBJTklUOworCWN0eC0+SDEgPSBIMUlOSVQ7CisJY3R4LT5IMiA9
IEgySU5JVDsKKwljdHgtPkgzID0gSDNJTklUOworCWN0eC0+SDQgPSBINElOSVQ7CisJY3R4LT5U
RU1QID0gMDsKKwltZW1zZXQoY3R4LT53b3JkcywgMCwgc2l6ZW9mKGN0eC0+d29yZHMpKTsKKwlj
dHgtPmhvd19tYW55X2luX2Jsb2NrID0gMDsKKwljdHgtPnJ1bm5pbmdfdG90YWwgPSAwOworfQor
CitzdGF0aWMgdm9pZAorc2N0cF9zaGExX3Byb2Nlc3NfYV9ibG9jayhzdHJ1Y3Qgc2N0cF9zaGEx
X2NvbnRleHQgKmN0eCwgdW5zaWduZWQgaW50ICpibG9jaykKK3sKKwlpbnQgaTsKKworCS8qIGlu
aXQgdGhlIFcwLVcxNSB0byB0aGUgYmxvY2sgb2Ygd29yZHMgYmVpbmcgaGFzaGVkLiAqLworCS8q
IHN0ZXAgYSkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQljdHgtPndvcmRzW2ld
ID0gbnRvaGwoYmxvY2tbaV0pOworCX0KKwkvKiBub3cgaW5pdCB0aGUgcmVzdCBiYXNlZCBvbiB0
aGUgU0hBLTEgZm9ybXVsYSwgc3RlcCBiKSAqLworCWZvciAoaSA9IDE2OyBpIDwgODA7IGkrKykg
eworCQljdHgtPndvcmRzW2ldID0gQ1NISUZUKDEsICgoY3R4LT53b3Jkc1soaSAtIDMpXSkgXgor
CQkgICAgKGN0eC0+d29yZHNbKGkgLSA4KV0pIF4KKwkJICAgIChjdHgtPndvcmRzWyhpIC0gMTQp
XSkgXgorCQkgICAgKGN0eC0+d29yZHNbKGkgLSAxNildKSkpOworCX0KKwkvKiBzdGVwIGMpICov
CisJY3R4LT5BID0gY3R4LT5IMDsKKwljdHgtPkIgPSBjdHgtPkgxOworCWN0eC0+QyA9IGN0eC0+
SDI7CisJY3R4LT5EID0gY3R4LT5IMzsKKwljdHgtPkUgPSBjdHgtPkg0OworCisJLyogc3RlcCBk
KSAqLworCWZvciAoaSA9IDA7IGkgPCA4MDsgaSsrKSB7CisJCWlmIChpIDwgMjApIHsKKwkJCWN0
eC0+VEVNUCA9ICgoQ1NISUZUKDUsIGN0eC0+QSkpICsKKwkJCSAgICAoRjEoY3R4LT5CLCBjdHgt
PkMsIGN0eC0+RCkpICsKKwkJCSAgICAoY3R4LT5FKSArCisJCQkgICAgY3R4LT53b3Jkc1tpXSAr
CisJCQkgICAgSzEpOworCQl9IGVsc2UgaWYgKGkgPCA0MCkgeworCQkJY3R4LT5URU1QID0gKChD
U0hJRlQoNSwgY3R4LT5BKSkgKworCQkJICAgIChGMihjdHgtPkIsIGN0eC0+QywgY3R4LT5EKSkg
KworCQkJICAgIChjdHgtPkUpICsKKwkJCSAgICAoY3R4LT53b3Jkc1tpXSkgKworCQkJICAgIEsy
KTsKKwkJfSBlbHNlIGlmIChpIDwgNjApIHsKKwkJCWN0eC0+VEVNUCA9ICgoQ1NISUZUKDUsIGN0
eC0+QSkpICsKKwkJCSAgICAoRjMoY3R4LT5CLCBjdHgtPkMsIGN0eC0+RCkpICsKKwkJCSAgICAo
Y3R4LT5FKSArCisJCQkgICAgKGN0eC0+d29yZHNbaV0pICsKKwkJCSAgICBLMyk7CisJCX0gZWxz
ZSB7CisJCQljdHgtPlRFTVAgPSAoKENTSElGVCg1LCBjdHgtPkEpKSArCisJCQkgICAgKEY0KGN0
eC0+QiwgY3R4LT5DLCBjdHgtPkQpKSArCisJCQkgICAgKGN0eC0+RSkgKworCQkJICAgIChjdHgt
PndvcmRzW2ldKSArCisJCQkgICAgSzQpOworCQl9CisJCWN0eC0+RSA9IGN0eC0+RDsKKwkJY3R4
LT5EID0gY3R4LT5DOworCQljdHgtPkMgPSBDU0hJRlQoMzAsIGN0eC0+Qik7CisJCWN0eC0+QiA9
IGN0eC0+QTsKKwkJY3R4LT5BID0gY3R4LT5URU1QOworCX0KKwkvKiBzdGVwIGUpICovCisJY3R4
LT5IMCA9IChjdHgtPkgwKSArIChjdHgtPkEpOworCWN0eC0+SDEgPSAoY3R4LT5IMSkgKyAoY3R4
LT5CKTsKKwljdHgtPkgyID0gKGN0eC0+SDIpICsgKGN0eC0+Qyk7CisJY3R4LT5IMyA9IChjdHgt
PkgzKSArIChjdHgtPkQpOworCWN0eC0+SDQgPSAoY3R4LT5INCkgKyAoY3R4LT5FKTsKK30KKwor
dm9pZAorc2N0cF9zaGExX3VwZGF0ZShzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKmN0eCwgY29u
c3QgdW5zaWduZWQgY2hhciAqcHRyLCB1bnNpZ25lZCBpbnQgc2l6KQoreworCXVuc2lnbmVkIGlu
dCBudW1iZXJfbGVmdCwgbGVmdF90b19maWxsOworCisJbnVtYmVyX2xlZnQgPSBzaXo7CisJd2hp
bGUgKG51bWJlcl9sZWZ0ID4gMCkgeworCQlsZWZ0X3RvX2ZpbGwgPSBzaXplb2YoY3R4LT5zaGFf
YmxvY2spIC0gY3R4LT5ob3dfbWFueV9pbl9ibG9jazsKKwkJaWYgKGxlZnRfdG9fZmlsbCA+IG51
bWJlcl9sZWZ0KSB7CisJCQkvKiBjYW4gb25seSBwYXJ0aWFsbHkgZmlsbCB1cCB0aGlzIG9uZSAq
LworCQkJbWVtY3B5KCZjdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Jsb2NrXSwKKwkJ
CSAgICBwdHIsIG51bWJlcl9sZWZ0KTsKKwkJCWN0eC0+aG93X21hbnlfaW5fYmxvY2sgKz0gbnVt
YmVyX2xlZnQ7CisJCQljdHgtPnJ1bm5pbmdfdG90YWwgKz0gbnVtYmVyX2xlZnQ7CisJCQlicmVh
azsKKwkJfSBlbHNlIHsKKwkJCS8qIGJsb2NrIGlzIG5vdyBmdWxsLCBwcm9jZXNzIGl0ICovCisJ
CQltZW1jcHkoJmN0eC0+c2hhX2Jsb2NrW2N0eC0+aG93X21hbnlfaW5fYmxvY2tdLAorCQkJICAg
IHB0ciwgbGVmdF90b19maWxsKTsKKwkJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soY3R4LAor
CQkJICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7CisJCQludW1iZXJfbGVmdCAt
PSBsZWZ0X3RvX2ZpbGw7CisJCQljdHgtPnJ1bm5pbmdfdG90YWwgKz0gbGVmdF90b19maWxsOwor
CQkJY3R4LT5ob3dfbWFueV9pbl9ibG9jayA9IDA7CisJCQlwdHIgPSAoY29uc3QgdW5zaWduZWQg
Y2hhciAqKShwdHIgKyBsZWZ0X3RvX2ZpbGwpOworCQl9CisJfQorfQorCit2b2lkCitzY3RwX3No
YTFfZmluYWwodW5zaWduZWQgY2hhciAqZGlnZXN0LCBzdHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQg
KmN0eCkKK3sKKwkvKgorCSAqIGlmIGFueSBsZWZ0IGluIGJsb2NrIGZpbGwgd2l0aCBwYWRkaW5n
IGFuZCBwcm9jZXNzLiBUaGVuIHRyYW5zZmVyCisJICogdGhlIGRpZ2VzdCB0byB0aGUgcG9pbnRl
ci4gQXQgdGhlIGxhc3QgYmxvY2sgc29tZSBzcGVjaWFsIHJ1bGVzCisJICogbmVlZCB0byBhcHBs
eS4gV2UgbXVzdCBhZGQgYSAxIGJpdCBmb2xsb3dpbmcgdGhlIG1lc3NhZ2UsIHRoZW4gd2UKKwkg
KiBwYWQgd2l0aCAwJ3MuIFRoZSB0b3RhbCBzaXplIGlzIGVuY29kZWQgYXMgYSA2NCBiaXQgbnVt
YmVyIGF0IHRoZQorCSAqIGVuZC4gTm93IGlmIHRoZSBsYXN0IGJ1ZmZlciBoYXMgbW9yZSB0aGFu
IDU1IG9jdGV0cyBpbiBpdCB3ZQorCSAqIGNhbm5vdCBmaXQgdGhlIDY0IGJpdCBudW1iZXIgKyAx
MDAwMDAwMCBwYWQgb24gdGhlIGVuZCBhbmQgbXVzdAorCSAqIGFkZCB0aGUgMTAwMDAwMDAgcGFk
LCBwYWQgdGhlIHJlc3Qgb2YgdGhlIG1lc3NhZ2Ugd2l0aCAwJ3MgYW5kCisJICogdGhlbiBjcmVh
dGUgYW4gYWxsIDAgbWVzc2FnZSB3aXRoIGp1c3QgdGhlIDY0IGJpdCBzaXplIGF0IHRoZSBlbmQK
KwkgKiBhbmQgcnVuIHRoaXMgYmxvY2sgdGhyb3VnaCBieSBpdHNlbGYuICBBbHNvIHRoZSA2NCBi
aXQgaW50IG11c3QKKwkgKiBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCisJICovCisJaW50IGxl
ZnRfdG9fZmlsbDsKKwl1bnNpZ25lZCBpbnQgaSwgKnB0cjsKKworCWlmIChjdHgtPmhvd19tYW55
X2luX2Jsb2NrID4gNTUpIHsKKwkJLyoKKwkJICogc3BlY2lhbCBjYXNlLCB3ZSBuZWVkIHRvIHBy
b2Nlc3MgdHdvIGJsb2NrcyBoZXJlLiBPbmUgZm9yCisJCSAqIHRoZSBjdXJyZW50IHN0dWZmIHBs
dXMgcG9zc2libHkgdGhlIHBhZC4gVGhlIG90aGVyIGZvcgorCQkgKiB0aGUgc2l6ZS4KKwkJICov
CisJCWxlZnRfdG9fZmlsbCA9IHNpemVvZihjdHgtPnNoYV9ibG9jaykgLSBjdHgtPmhvd19tYW55
X2luX2Jsb2NrOworCQlpZiAobGVmdF90b19maWxsID09IDApIHsKKwkJCS8qIFNob3VsZCBub3Qg
cmVhbGx5IGhhcHBlbiBidXQgSSBhbSBwYXJhbm9pZCAqLworCQkJc2N0cF9zaGExX3Byb2Nlc3Nf
YV9ibG9jayhjdHgsCisJCQkgICAgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2NrKTsKKwkJ
CS8qIGluaXQgbGFzdCBibG9jaywgYSBiaXQgZGlmZmVyZW50IHRoYW4gdGhlIHJlc3QgKi8KKwkJ
CWN0eC0+c2hhX2Jsb2NrWzBdID0gJ1x4ODAnOworCQkJZm9yIChpID0gMTsgaSA8IHNpemVvZihj
dHgtPnNoYV9ibG9jayk7IGkrKykgeworCQkJCWN0eC0+c2hhX2Jsb2NrW2ldID0gMHgwOworCQkJ
fQorCQl9IGVsc2UgaWYgKGxlZnRfdG9fZmlsbCA9PSAxKSB7CisJCQljdHgtPnNoYV9ibG9ja1tj
dHgtPmhvd19tYW55X2luX2Jsb2NrXSA9ICdceDgwJzsKKwkJCXNjdHBfc2hhMV9wcm9jZXNzX2Ff
YmxvY2soY3R4LAorCQkJICAgICh1bnNpZ25lZCBpbnQgKiljdHgtPnNoYV9ibG9jayk7CisJCQkv
KiBpbml0IGxhc3QgYmxvY2sgKi8KKwkJCW1lbXNldChjdHgtPnNoYV9ibG9jaywgMCwgc2l6ZW9m
KGN0eC0+c2hhX2Jsb2NrKSk7CisJCX0gZWxzZSB7CisJCQljdHgtPnNoYV9ibG9ja1tjdHgtPmhv
d19tYW55X2luX2Jsb2NrXSA9ICdceDgwJzsKKwkJCWZvciAoaSA9IChjdHgtPmhvd19tYW55X2lu
X2Jsb2NrICsgMSk7CisJCQkgICAgaSA8IHNpemVvZihjdHgtPnNoYV9ibG9jayk7CisJCQkgICAg
aSsrKSB7CisJCQkJY3R4LT5zaGFfYmxvY2tbaV0gPSAweDA7CisJCQl9CisJCQlzY3RwX3NoYTFf
cHJvY2Vzc19hX2Jsb2NrKGN0eCwKKwkJCSAgICAodW5zaWduZWQgaW50ICopY3R4LT5zaGFfYmxv
Y2spOworCQkJLyogaW5pdCBsYXN0IGJsb2NrICovCisJCQltZW1zZXQoY3R4LT5zaGFfYmxvY2ss
IDAsIHNpemVvZihjdHgtPnNoYV9ibG9jaykpOworCQl9CisJCS8qIFRoaXMgaXMgaW4gYml0cyBz
byBtdWx0aXBseSBieSA4ICovCisJCWN0eC0+cnVubmluZ190b3RhbCAqPSA4OworCQlwdHIgPSAo
dW5zaWduZWQgaW50ICopJmN0eC0+c2hhX2Jsb2NrWzYwXTsKKwkJKnB0ciA9IGh0b25sKGN0eC0+
cnVubmluZ190b3RhbCk7CisJCXNjdHBfc2hhMV9wcm9jZXNzX2FfYmxvY2soY3R4LCAodW5zaWdu
ZWQgaW50ICopY3R4LT5zaGFfYmxvY2spOworCX0gZWxzZSB7CisJCS8qCisJCSAqIGVhc3kgY2Fz
ZSwgd2UganVzdCBwYWQgdGhpcyBtZXNzYWdlIHRvIHNpemUgLSBlbmQgd2l0aCAwCisJCSAqIGFk
ZCB0aGUgbWFnaWMgMHg4MCB0byB0aGUgbmV4dCB3b3JkIGFuZCB0aGVuIHB1dCB0aGUKKwkJICog
bmV0d29yayBieXRlIG9yZGVyIHNpemUgaW4gdGhlIGxhc3Qgc3BvdCBhbmQgcHJvY2VzcyB0aGUK
KwkJICogYmxvY2suCisJCSAqLworCQljdHgtPnNoYV9ibG9ja1tjdHgtPmhvd19tYW55X2luX2Js
b2NrXSA9ICdceDgwJzsKKwkJZm9yIChpID0gKGN0eC0+aG93X21hbnlfaW5fYmxvY2sgKyAxKTsK
KwkJICAgIGkgPCBzaXplb2YoY3R4LT5zaGFfYmxvY2spOworCQkgICAgaSsrKSB7CisJCQljdHgt
PnNoYV9ibG9ja1tpXSA9IDB4MDsKKwkJfQorCQkvKiBnZXQgbGFzdCBpbnQgc3BvdCAqLworCQlj
dHgtPnJ1bm5pbmdfdG90YWwgKj0gODsKKwkJcHRyID0gKHVuc2lnbmVkIGludCAqKSZjdHgtPnNo
YV9ibG9ja1s2MF07CisJCSpwdHIgPSBodG9ubChjdHgtPnJ1bm5pbmdfdG90YWwpOworCQlzY3Rw
X3NoYTFfcHJvY2Vzc19hX2Jsb2NrKGN0eCwgKHVuc2lnbmVkIGludCAqKWN0eC0+c2hhX2Jsb2Nr
KTsKKwl9CisJLyogdHJhbnNmZXIgdGhlIGRpZ2VzdCBiYWNrIHRvIHRoZSB1c2VyICovCisJZGln
ZXN0WzNdID0gKGN0eC0+SDAgJiAweGZmKTsKKwlkaWdlc3RbMl0gPSAoKGN0eC0+SDAgPj4gOCkg
JiAweGZmKTsKKwlkaWdlc3RbMV0gPSAoKGN0eC0+SDAgPj4gMTYpICYgMHhmZik7CisJZGlnZXN0
WzBdID0gKChjdHgtPkgwID4+IDI0KSAmIDB4ZmYpOworCisJZGlnZXN0WzddID0gKGN0eC0+SDEg
JiAweGZmKTsKKwlkaWdlc3RbNl0gPSAoKGN0eC0+SDEgPj4gOCkgJiAweGZmKTsKKwlkaWdlc3Rb
NV0gPSAoKGN0eC0+SDEgPj4gMTYpICYgMHhmZik7CisJZGlnZXN0WzRdID0gKChjdHgtPkgxID4+
IDI0KSAmIDB4ZmYpOworCisJZGlnZXN0WzExXSA9IChjdHgtPkgyICYgMHhmZik7CisJZGlnZXN0
WzEwXSA9ICgoY3R4LT5IMiA+PiA4KSAmIDB4ZmYpOworCWRpZ2VzdFs5XSA9ICgoY3R4LT5IMiA+
PiAxNikgJiAweGZmKTsKKwlkaWdlc3RbOF0gPSAoKGN0eC0+SDIgPj4gMjQpICYgMHhmZik7CisK
KwlkaWdlc3RbMTVdID0gKGN0eC0+SDMgJiAweGZmKTsKKwlkaWdlc3RbMTRdID0gKChjdHgtPkgz
ID4+IDgpICYgMHhmZik7CisJZGlnZXN0WzEzXSA9ICgoY3R4LT5IMyA+PiAxNikgJiAweGZmKTsK
KwlkaWdlc3RbMTJdID0gKChjdHgtPkgzID4+IDI0KSAmIDB4ZmYpOworCisJZGlnZXN0WzE5XSA9
IChjdHgtPkg0ICYgMHhmZik7CisJZGlnZXN0WzE4XSA9ICgoY3R4LT5INCA+PiA4KSAmIDB4ZmYp
OworCWRpZ2VzdFsxN10gPSAoKGN0eC0+SDQgPj4gMTYpICYgMHhmZik7CisJZGlnZXN0WzE2XSA9
ICgoY3R4LT5INCA+PiAyNCkgJiAweGZmKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zaGExLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF9zaGExLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4
YzJlNDhjNTM5MS4uNmQ2YTA1YzEwY2RkMmI1MGEyNDM4NDY0ZjRiODgwNTkyMDVmMWFlNiAxMDA3
NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc2hhMS5oCisrKyBiL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NoYTEuaApAQCAtMCwwICsxLDk5IEBACisv
Ki0KKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNo
YWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBiKSBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JT
IEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNE
X18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKyNlbmRp
ZgorCisKKyNpZm5kZWYgX19ORVRJTkVUX1NDVFBfU0hBMV9IX18KKyNkZWZpbmUgX19ORVRJTkVU
X1NDVFBfU0hBMV9IX18KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIGRlZmluZWQoU0NU
UF9VU0VfTlNTX1NIQTEpCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisvKiBU
aGUgTlNTIHNvdXJjZXMgcmVxdWlyZSBfX0FQUExFX18gdG8gYmUgZGVmaW5lZC4KKyAqIFhYWDog
UmVtb3ZlIHRoaXMgdWdseSBoYWNrIG9uY2UgdGhlIHBsYXRmb3JtIGRlZmluZXMgaGF2ZSBiZWVu
IGNsZWFuZWQgdXAuCisgKi8KKyNkZWZpbmUgX19BUFBMRV9fCisjZW5kaWYKKyNpbmNsdWRlIDxw
azExcHViLmg+CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pCisjdW5kZWYgX19B
UFBMRV9fCisjZW5kaWYKKyNlbGlmIGRlZmluZWQoU0NUUF9VU0VfT1BFTlNTTF9TSEExKQorI2lu
Y2x1ZGUgPG9wZW5zc2wvc2hhLmg+CisjZW5kaWYKKworc3RydWN0IHNjdHBfc2hhMV9jb250ZXh0
IHsKKyNpZiBkZWZpbmVkKFNDVFBfVVNFX05TU19TSEExKQorCXN0cnVjdCBQSzExQ29udGV4dCAq
cGsxMV9jdHg7CisjZWxpZiBkZWZpbmVkKFNDVFBfVVNFX09QRU5TU0xfU0hBMSkKKwlTSEFfQ1RY
IHNoYV9jdHg7CisjZWxzZQorCXVuc2lnbmVkIGludCBBOworCXVuc2lnbmVkIGludCBCOworCXVu
c2lnbmVkIGludCBDOworCXVuc2lnbmVkIGludCBEOworCXVuc2lnbmVkIGludCBFOworCXVuc2ln
bmVkIGludCBIMDsKKwl1bnNpZ25lZCBpbnQgSDE7CisJdW5zaWduZWQgaW50IEgyOworCXVuc2ln
bmVkIGludCBIMzsKKwl1bnNpZ25lZCBpbnQgSDQ7CisJdW5zaWduZWQgaW50IHdvcmRzWzgwXTsK
Kwl1bnNpZ25lZCBpbnQgVEVNUDsKKwkvKiBibG9jayBJIGFtIGNvbGxlY3RpbmcgdG8gcHJvY2Vz
cyAqLworCWNoYXIgc2hhX2Jsb2NrWzY0XTsKKwkvKiBjb2xsZWN0ZWQgc28gZmFyICovCisJaW50
IGhvd19tYW55X2luX2Jsb2NrOworCXVuc2lnbmVkIGludCBydW5uaW5nX3RvdGFsOworI2VuZGlm
Cit9OworCisjaWYgKGRlZmluZWQoX19BUFBMRV9fKSAmJiBkZWZpbmVkKEtFUk5FTCkpCisjaWZu
ZGVmIF9LRVJORUwKKyNkZWZpbmUgX0tFUk5FTAorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmlu
ZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCit2b2lkIHNjdHBfc2hhMV9p
bml0KHN0cnVjdCBzY3RwX3NoYTFfY29udGV4dCAqKTsKK3ZvaWQgc2N0cF9zaGExX3VwZGF0ZShz
dHJ1Y3Qgc2N0cF9zaGExX2NvbnRleHQgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25l
ZCBpbnQpOwordm9pZCBzY3RwX3NoYTFfZmluYWwodW5zaWduZWQgY2hhciAqLCBzdHJ1Y3Qgc2N0
cF9zaGExX2NvbnRleHQgKik7CisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyBiL1NvdXJjZS9UaGlyZFBh
cnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1bmN0aW9ucy5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0
YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmYxOTgyNTcyNDY4M2YxYjM0NjdmZTJiODdhOGVkMTMy
MmZlNTdhZjggMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Nz
X2Z1bmN0aW9ucy5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3NzX2Z1
bmN0aW9ucy5jCkBAIC0wLDAgKzEsMTA5NCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRp
ZmllcjogQlNELTItQ2xhdXNlLUZyZWVCU0QKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAtMjAx
MiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KGMpIDIwMTAtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChjKSAyMDEwLTIwMTIsIGJ5IFJvYmluIFNlZ2dlbG1hbm4uIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAq
CisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJlZUJTRF9f
CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25l
dGluZXQvc2N0cF9zc19mdW5jdGlvbnMuYyAzMjYxODAgMjAxNy0xMS0yNCAxOTozODo1OVogdHVl
eGVuICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BjYi5oPgorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
Lmg+CisjZW5kaWYKKworLyoKKyAqIERlZmF1bHQgc2ltcGxlIHJvdW5kLXJvYmluIGFsZ29yaXRo
bS4KKyAqIEp1c3QgaW50ZXJhdGVzIHRoZSBzdHJlYW1zIGluIHRoZSBvcmRlciB0aGV5IGFwcGVh
ci4KKyAqLworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X2FkZChzdHJ1Y3Qgc2N0cF90
Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwKKyAgICAgICAgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfc3RyZWFtX291dCAqLAorICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQpOworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZh
dWx0X3JlbW92ZShzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwK
KyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAorICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqLCBpbnQp
OworCitzdGF0aWMgdm9pZAorc2N0cF9zc19kZWZhdWx0X2luaXQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgICAg
IGludCBob2xkc19sb2NrKQoreworCXVpbnQxNl90IGk7CisKKwlhc29jLT5zc19kYXRhLmxvY2tl
ZF9vbl9zZW5kaW5nID0gTlVMTDsKKwlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5V
TEw7CisJVEFJTFFfSU5JVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCS8qCisJICogSWYg
dGhlcmUgaXMgZGF0YSBpbiB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJlYWR5LAorCSAqIHRoZSBzY2hl
ZHVsZXIgb2YgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gaGFzCisJICogYmVlbiBjaGFuZ2VkLiBX
ZSBuZWVkIHRvIGFkZCBhbGwgc3RyZWFtIHF1ZXVlcworCSAqIHRvIHRoZSB3aGVlbC4KKwkgKi8K
Kwlmb3IgKGkgPSAwOyBpIDwgc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7IGkrKykgeworCQlzdGNi
LT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2FkZF90b19zdHJlYW0oc3RjYiwgJnN0Y2ItPmFz
b2MsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Rj
Yi0+YXNvYy5zdHJtb3V0W2ldLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgTlVMTCwgaG9sZHNfbG9jayk7CisJfQorCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfc3NfZGVmYXVsdF9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgICAgIGludCBjbGVh
cl92YWx1ZXMgU0NUUF9VTlVTRUQsIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2Nr
ID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxR
X0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCksIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3Nf
cGFyYW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19wYXJhbXMu
cnIubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtID0gTlVMTDsKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NF
TkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3Nz
X2RlZmF1bHRfaW5pdF9zdHJlYW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCit7CisJ
aWYgKHdpdGhfc3RycSAhPSBOVUxMKSB7CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9ja2Vk
X29uX3NlbmRpbmcgPT0gd2l0aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2Vk
X29uX3NlbmRpbmcgPSBzdHJxOworCQl9CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtID09IHdpdGhfc3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0
X3N0cmVhbSA9IHN0cnE7CisJCX0KKwl9CisJc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2Uu
dHFlX25leHQgPSBOVUxMOworCXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2
ID0gTlVMTDsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfYWRk
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VO
VVNFRCwgaW50IGhvbGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQ
X1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQorCS8qIEFkZCB0byB3aGVlbCBpZiBub3QgYWxyZWFk
eSBvbiBpdCBhbmQgc3RyZWFtIHF1ZXVlIG5vdCBlbXB0eSAqLworCWlmICghVEFJTFFfRU1QVFko
JnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2Uu
dHFlX25leHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tl
LnRxZV9wcmV2ID09IE5VTEwpKSB7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRh
Lm91dC53aGVlbCwKKwkJICAgICAgICAgICAgICAgICAgc3RycSwgc3NfcGFyYW1zLnJyLm5leHRf
c3Bva2UpOworCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5M
T0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfc3NfZGVmYXVs
dF9pc19lbXB0eShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jKQoreworCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c3NfZGF0YS5v
dXQud2hlZWwpKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9
Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwgaW50
IGhvbGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5E
X0xPQ0soc3RjYik7CisJfQorCS8qIFJlbW92ZSBmcm9tIHdoZWVsIGlmIHN0cmVhbSBxdWV1ZSBp
cyBlbXB0eSBhbmQgYWN0dWFsbHkgaXMgb24gdGhlIHdoZWVsICovCisJaWYgKFRBSUxRX0VNUFRZ
KCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tl
LnRxZV9uZXh0ICE9IE5VTEwgfHwKKwkgICAgc3RycS0+c3NfcGFyYW1zLnJyLm5leHRfc3Bva2Uu
dHFlX3ByZXYgIT0gTlVMTCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFt
ID09IHN0cnEpIHsKKwkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gVEFJTFFfUFJF
Vihhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwKKwkJCSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFkLAorCQkJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCQlpZiAoYXNvYy0+
c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCkgeworCQkJCWFzb2MtPnNzX2RhdGEubGFz
dF9vdXRfc3RyZWFtID0gVEFJTFFfTEFTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsCisJCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3Rwd2hlZWxfbGlzdGhlYWQpOwor
CQkJfQorCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHN0cnEpIHsKKwkJ
CQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IE5VTEw7CisJCQl9CisJCX0KKwkJVEFJ
TFFfUkVNT1ZFKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFyYW1zLnJyLm5l
eHRfc3Bva2UpOworCQlzdHJxLT5zc19wYXJhbXMucnIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5V
TEw7CisJCXN0cnEtPnNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID0gTlVMTDsKKwl9
CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsK
Kwl9CisJcmV0dXJuOworfQorCisKK3N0YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICoKK3Nj
dHBfc3NfZGVmYXVsdF9zZWxlY3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsICpz
dHJxdDsKKworCWlmIChhc29jLT5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nKSB7CisJCXJldHVy
biAoYXNvYy0+c3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyk7CisJfQorCXN0cnF0ID0gYXNvYy0+
c3NfZGF0YS5sYXN0X291dF9zdHJlYW07CitkZWZhdWx0X2FnYWluOgorCS8qIEZpbmQgdGhlIG5l
eHQgc3RyZWFtIHRvIHVzZSAqLworCWlmIChzdHJxdCA9PSBOVUxMKSB7CisJCXN0cnEgPSBUQUlM
UV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpOworCX0gZWxzZSB7CisJCXN0cnEgPSBU
QUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCWlmIChzdHJxID09
IE5VTEwpIHsKKwkJCXN0cnEgPSBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwp
OworCQl9CisJfQorCisJLyogSWYgQ01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0CisJ
ICogdGhlIHN0cmVhbSBpbiBxdWVzdGlvbiBoYXMgdGhlIGZpcnN0CisJICogaXRlbSBwb2ludGVk
IHRvd2FyZHMgYXJlIG5ldHdvcmsgZGVzdGluYXRpb24KKwkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNh
bGxlci4gTm90ZSB0aGF0IGlmIHdlCisJICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3Ry
ZWFtIChhc3NpZ25pbmcKKwkgKiBUU04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fu
bm90CisJICogbG9vayBmb3IgYW5vdGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKKwkgKiB0
byB0aGF0IGRlc3RpbmF0aW9uKS4gSW4gQ01UJ3MgY2FzZSwgYnkKKwkgKiBza2lwcGluZyB0aGlz
IGNoZWNrLCB3ZSB3aWxsIHNlbmQgb25lCisJICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVx
dWVzdGVkIG5ldC4KKwkgKi8KKwlpZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCisJ
ICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7CisJCWlmIChUQUlM
UV9GSVJTVCgmc3RycS0+b3V0cXVldWUpICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0
cXVldWUpLT5uZXQgIT0gTlVMTCAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVl
KS0+bmV0ICE9IG5ldCkgeworCQkJaWYgKHN0cnEgPT0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9z
dHJlYW0pIHsKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJxdCA9IHN0
cnE7CisJCQkJZ290byBkZWZhdWx0X2FnYWluOworCQkJfQorCQl9CisJfQorCXJldHVybiAoc3Ry
cSk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0
cyAqbmV0IFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqc3RycSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vdmVk
X2hvd19tdWNoIFNDVFBfVU5VU0VEKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5k
aW5nICpzcDsKKworCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwlpZiAo
c3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQlzcCA9IFRBSUxRX0ZJUlNUKCZz
dHJxLT5vdXRxdWV1ZSk7CisJCWlmICgoc3AgIT0gTlVMTCkgJiYgKHNwLT5zb21lX3Rha2VuID09
IDEpKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJxOwor
CQl9IGVsc2UgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gTlVM
TDsKKwkJfQorCX0gZWxzZSB7CisJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGlu
ZyA9IE5VTEw7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfZGVmYXVs
dF9wYWNrZXRfZG9uZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYyBTQ1RQX1VOVVNFRCkKK3sKKwkvKiBOb3RoaW5n
IHRvIGJlIGRvbmUgaGVyZSAqLworCXJldHVybjsKK30KKworc3RhdGljIGludAorc2N0cF9zc19k
ZWZhdWx0X2dldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELCB1aW50MTZf
dCAqdmFsdWUgU0NUUF9VTlVTRUQpCit7CisJLyogTm90aGluZyB0byBiZSBkb25lIGhlcmUgKi8K
KwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorc2N0cF9zc19kZWZhdWx0X3NldF92YWx1
ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICphc29jIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICpzdHJxIFNDVFBfVU5VU0VELCB1aW50MTZfdCB2YWx1ZSBTQ1RQX1VO
VVNFRCkKK3sKKwkvKiBOb3RoaW5nIHRvIGJlIGRvbmUgaGVyZSAqLworCXJldHVybiAoLTEpOwor
fQorCitzdGF0aWMgaW50CitzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUo
c3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlv
biAqYXNvYykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxOworCXN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKworCWlmIChhc29jLT5zdHJlYW1fcXVldWVfY250
ICE9IDEpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJc3RycSA9IGFzb2MtPnNzX2RhdGEubG9ja2Vk
X29uX3NlbmRpbmc7CisJaWYgKHN0cnEgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlz
cCA9IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSk7CisJaWYgKHNwID09IE5VTEwpIHsKKwkJ
cmV0dXJuICgwKTsKKwl9CisJcmV0dXJuICghc3AtPm1zZ19pc19jb21wbGV0ZSk7Cit9CisKKy8q
CisgKiBSZWFsIHJvdW5kLXJvYmluIGFsZ29yaXRobS4KKyAqIEFsd2F5cyBpbnRlcmF0ZXMgdGhl
IHN0cmVhbXMgaW4gYXNjZW5kaW5nIG9yZGVyLgorICovCitzdGF0aWMgdm9pZAorc2N0cF9zc19y
cl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKyAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsCisgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3AgU0NUUF9VTlVTRUQs
IGludCBob2xkc19sb2NrKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnF0OworCisJ
aWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xPQ0soc3RjYik7CisJfQor
CWlmICghVEFJTFFfRU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFy
YW1zLnJyLm5leHRfc3Bva2UudHFlX25leHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3Bh
cmFtcy5yci5uZXh0X3Nwb2tlLnRxZV9wcmV2ID09IE5VTEwpKSB7CisJCWlmIChUQUlMUV9FTVBU
WSgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpKSB7CisJCQlUQUlMUV9JTlNFUlRfSEVBRCgmYXNv
Yy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5yci5uZXh0X3Nwb2tlKTsKKwkJ
fSBlbHNlIHsKKwkJCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVs
KTsKKwkJCXdoaWxlIChzdHJxdCAhPSBOVUxMICYmIChzdHJxdC0+c2lkIDwgc3RycS0+c2lkKSkg
eworCQkJCXN0cnF0ID0gVEFJTFFfTkVYVChzdHJxdCwgc3NfcGFyYW1zLnJyLm5leHRfc3Bva2Up
OworCQkJfQorCQkJaWYgKHN0cnF0ICE9IE5VTEwpIHsKKwkJCQlUQUlMUV9JTlNFUlRfQkVGT1JF
KHN0cnF0LCBzdHJxLCBzc19wYXJhbXMucnIubmV4dF9zcG9rZSk7CisJCQl9IGVsc2UgeworCQkJ
CVRBSUxRX0lOU0VSVF9UQUlMKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwgc3RycSwgc3NfcGFy
YW1zLnJyLm5leHRfc3Bva2UpOworCQkJfQorCQl9CisJfQorCWlmIChob2xkc19sb2NrID09IDAp
IHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsKK30KKworLyoK
KyAqIFJlYWwgcm91bmQtcm9iaW4gcGVyIHBhY2tldCBhbGdvcml0aG0uCisgKiBBbHdheXMgaW50
ZXJhdGVzIHRoZSBzdHJlYW1zIGluIGFzY2VuZGluZyBvcmRlciBhbmQKKyAqIG9ubHkgZmlsbHMg
bWVzc2FnZXMgb2YgdGhlIHNhbWUgc3RyZWFtIGluIGEgcGFja2V0LgorICovCitzdGF0aWMgc3Ry
dWN0IHNjdHBfc3RyZWFtX291dCAqCitzY3RwX3NzX3JycF9zZWxlY3Qoc3RydWN0IHNjdHBfdGNi
ICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCisg
ICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJcmV0
dXJuIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSk7Cit9CisKK3N0YXRpYyB2b2lkCitz
Y3RwX3NzX3JycF9wYWNrZXRfZG9uZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQs
IHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEs
ICpzdHJxdDsKKworCXN0cnF0ID0gYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW07CitycnBf
YWdhaW46CisJLyogRmluZCB0aGUgbmV4dCBzdHJlYW0gdG8gdXNlICovCisJaWYgKHN0cnF0ID09
IE5VTEwpIHsKKwkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7
CisJfSBlbHNlIHsKKwkJc3RycSA9IFRBSUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5yci5uZXh0
X3Nwb2tlKTsKKwkJaWYgKHN0cnEgPT0gTlVMTCkgeworCQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZh
c29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCX0KKwl9CisKKwkvKiBJZiBDTVQgaXMgb2ZmLCB3
ZSBtdXN0IHZhbGlkYXRlIHRoYXQKKwkgKiB0aGUgc3RyZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUg
Zmlyc3QKKwkgKiBpdGVtIHBvaW50ZWQgdG93YXJkcyBhcmUgbmV0d29yayBkZXN0aW5hdGlvbgor
CSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBOb3RlIHRoYXQgaWYgd2UKKwkgKiB0dXJuIG91
dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFzc2lnbmluZworCSAqIFRTTidzIHRoZW4gd2Ug
bXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKKwkgKiBsb29rIGZvciBhbm90aGVyIHN0cmVhbSB3
aXRoIGRhdGEgdG8gc2VuZAorCSAqIHRvIHRoYXQgZGVzdGluYXRpb24pLiBJbiBDTVQncyBjYXNl
LCBieQorCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ssIHdlIHdpbGwgc2VuZCBvbmUKKwkgKiBkYXRh
IHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQgbmV0LgorCSAqLworCWlmIChuZXQgIT0gTlVM
TCAmJiBzdHJxICE9IE5VTEwgJiYKKwkgICAgU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9v
ZmYpID09IDApIHsKKwkJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkJICAg
IFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSktPm5ldCAhPSBOVUxMICYmCisJCSAgICBUQUlM
UV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQgIT0gbmV0KSB7CisJCQlpZiAoc3RycSA9PSBh
c29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSkgeworCQkJCXN0cnEgPSBOVUxMOworCQkJfSBl
bHNlIHsKKwkJCQlzdHJxdCA9IHN0cnE7CisJCQkJZ290byBycnBfYWdhaW47CisJCQl9CisJCX0K
Kwl9CisJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBzdHJxOworCXJldHVybjsKK30K
KworCisvKgorICogUHJpb3JpdHkgYWxnb3JpdGhtLgorICogQWx3YXlzIHByZWZlcnMgc3RyZWFt
cyBiYXNlZCBvbiB0aGVpciBwcmlvcml0eSBpZC4KKyAqLworc3RhdGljIHZvaWQKK3NjdHBfc3Nf
cHJpb19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1ZXMsIGludCBob2xkc19s
b2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0
Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCkp
IHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCk7CisJCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJCXN0cnEtPnNzX3Bh
cmFtcy5wcmlvLnByaW9yaXR5ID0gMDsKKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2Rh
dGEub3V0LndoZWVsLCBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwpLCBzc19w
YXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9r
ZS50cWVfbmV4dCA9IE5VTEw7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFl
X3ByZXYgPSBOVUxMOworCisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gTlVM
TDsKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2Ip
OworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX3ByaW9faW5pdF9zdHJl
YW0oc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICp3aXRoX3N0cnEpCit7CisJaWYgKHdpdGhfc3RycSAhPSBO
VUxMKSB7CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPT0gd2l0
aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3NlbmRpbmcgPSBzdHJx
OworCQl9CisJCWlmIChzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID09IHdpdGhf
c3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IHN0cnE7CisJ
CX0KKwl9CisJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7
CisJc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJaWYg
KHdpdGhfc3RycSAhPSBOVUxMKSB7CisJCXN0cnEtPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID0g
d2l0aF9zdHJxLT5zc19wYXJhbXMucHJpby5wcmlvcml0eTsKKwl9IGVsc2UgeworCQlzdHJxLT5z
c19wYXJhbXMucHJpby5wcmlvcml0eSA9IDA7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZv
aWQKK3NjdHBfc3NfcHJpb19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9h
c3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291
dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VE
LAorICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJl
YW1fb3V0ICpzdHJxdDsKKworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VO
RF9MT0NLKHN0Y2IpOworCX0KKwkvKiBBZGQgdG8gd2hlZWwgaWYgbm90IGFscmVhZHkgb24gaXQg
YW5kIHN0cmVhbSBxdWV1ZSBub3QgZW1wdHkgKi8KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5v
dXRxdWV1ZSkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFlX25l
eHQgPT0gTlVMTCkgJiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UudHFl
X3ByZXYgPT0gTlVMTCkpIHsKKwkJaWYgKFRBSUxRX0VNUFRZKCZhc29jLT5zc19kYXRhLm91dC53
aGVlbCkpIHsKKwkJCVRBSUxRX0lOU0VSVF9IRUFEKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCwg
c3RycSwgc3NfcGFyYW1zLnByaW8ubmV4dF9zcG9rZSk7CisJCX0gZWxzZSB7CisJCQlzdHJxdCA9
IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCQl3aGlsZSAoc3RycXQg
IT0gTlVMTCAmJiBzdHJxdC0+c3NfcGFyYW1zLnByaW8ucHJpb3JpdHkgPCBzdHJxLT5zc19wYXJh
bXMucHJpby5wcmlvcml0eSkgeworCQkJCXN0cnF0ID0gVEFJTFFfTkVYVChzdHJxdCwgc3NfcGFy
YW1zLnByaW8ubmV4dF9zcG9rZSk7CisJCQl9CisJCQlpZiAoc3RycXQgIT0gTlVMTCkgeworCQkJ
CVRBSUxRX0lOU0VSVF9CRUZPUkUoc3RycXQsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bv
a2UpOworCQkJfSBlbHNlIHsKKwkJCQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5v
dXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQkJfQorCQl9CisJ
fQorCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7
CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfc3NfcHJpb19yZW1vdmUoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBf
c3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwIFNDVFBfVU5VU0VELAorICAgICAgICAgICAgICAgICAg
ICBpbnQgaG9sZHNfbG9jaykKK3sKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENC
X1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJLyogUmVtb3ZlIGZyb20gd2hlZWwgaWYgc3RyZWFtIHF1
ZXVlIGlzIGVtcHR5IGFuZCBhY3R1YWxseSBpcyBvbiB0aGUgd2hlZWwgKi8KKwlpZiAoVEFJTFFf
RU1QVFkoJnN0cnEtPm91dHF1ZXVlKSAmJgorCSAgICAoc3RycS0+c3NfcGFyYW1zLnByaW8ubmV4
dF9zcG9rZS50cWVfbmV4dCAhPSBOVUxMIHx8CisJICAgIHN0cnEtPnNzX3BhcmFtcy5wcmlvLm5l
eHRfc3Bva2UudHFlX3ByZXYgIT0gTlVMTCkpIHsKKwkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9v
dXRfc3RyZWFtID09IHN0cnEpIHsKKwkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0g
VEFJTFFfUFJFVihhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSwgc2N0cHdoZWVsX2xpc3Ro
ZWFkLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc19wYXJhbXMucHJp
by5uZXh0X3Nwb2tlKTsKKwkJCWlmIChhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBO
VUxMKSB7CisJCQkJYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPSBUQUlMUV9MQVNUKCZh
c29jLT5zc19kYXRhLm91dC53aGVlbCwKKwkJCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjdHB3aGVlbF9saXN0aGVhZCk7CisJCQl9CisJCQlpZiAoYXNvYy0+c3NfZGF0YS5s
YXN0X291dF9zdHJlYW0gPT0gc3RycSkgeworCQkJCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3Ry
ZWFtID0gTlVMTDsKKwkJCX0KKwkJfQorCQlUQUlMUV9SRU1PVkUoJmFzb2MtPnNzX2RhdGEub3V0
LndoZWVsLCBzdHJxLCBzc19wYXJhbXMucHJpby5uZXh0X3Nwb2tlKTsKKwkJc3RycS0+c3NfcGFy
YW1zLnByaW8ubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7CisJCXN0cnEtPnNzX3BhcmFtcy5w
cmlvLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOworCX0KKwlpZiAoaG9sZHNfbG9jayA9PSAw
KSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0KKwlyZXR1cm47Cit9CisKK3N0
YXRpYyBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0Kgorc2N0cF9zc19wcmlvX3NlbGVjdChzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJc3RydWN0
IHNjdHBfc3RyZWFtX291dCAqc3RycSwgKnN0cnF0LCAqc3RycW47CisKKwlzdHJxdCA9IGFzb2Mt
PnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtOworcHJpb19hZ2FpbjoKKwkvKiBGaW5kIHRoZSBuZXh0
IHN0cmVhbSB0byB1c2UgKi8KKwlpZiAoc3RycXQgPT0gTlVMTCkgeworCQlzdHJxID0gVEFJTFFf
RklSU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsKTsKKwl9IGVsc2UgeworCQlzdHJxbiA9IFRB
SUxRX05FWFQoc3RycXQsIHNzX3BhcmFtcy5wcmlvLm5leHRfc3Bva2UpOworCQlpZiAoc3RycW4g
IT0gTlVMTCAmJgorCQkgICAgc3RycW4tPnNzX3BhcmFtcy5wcmlvLnByaW9yaXR5ID09IHN0cnF0
LT5zc19wYXJhbXMucHJpby5wcmlvcml0eSkgeworCQkJc3RycSA9IHN0cnFuOworCQl9IGVsc2Ug
eworCQkJc3RycSA9IFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCX0K
Kwl9CisKKwkvKiBJZiBDTVQgaXMgb2ZmLCB3ZSBtdXN0IHZhbGlkYXRlIHRoYXQKKwkgKiB0aGUg
c3RyZWFtIGluIHF1ZXN0aW9uIGhhcyB0aGUgZmlyc3QKKwkgKiBpdGVtIHBvaW50ZWQgdG93YXJk
cyBhcmUgbmV0d29yayBkZXN0aW5hdGlvbgorCSAqIHJlcXVlc3RlZCBieSB0aGUgY2FsbGVyLiBO
b3RlIHRoYXQgaWYgd2UKKwkgKiB0dXJuIG91dCB0byBiZSBsb2NrZWQgdG8gYSBzdHJlYW0gKGFz
c2lnbmluZworCSAqIFRTTidzIHRoZW4gd2UgbXVzdCBzdG9wLCBzaW5jZSB3ZSBjYW5ub3QKKwkg
KiBsb29rIGZvciBhbm90aGVyIHN0cmVhbSB3aXRoIGRhdGEgdG8gc2VuZAorCSAqIHRvIHRoYXQg
ZGVzdGluYXRpb24pLiBJbiBDTVQncyBjYXNlLCBieQorCSAqIHNraXBwaW5nIHRoaXMgY2hlY2ss
IHdlIHdpbGwgc2VuZCBvbmUKKwkgKiBkYXRhIHBhY2tldCB0b3dhcmRzIHRoZSByZXF1ZXN0ZWQg
bmV0LgorCSAqLworCWlmIChuZXQgIT0gTlVMTCAmJiBzdHJxICE9IE5VTEwgJiYKKwkgICAgU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2NtdF9vbl9vZmYpID09IDApIHsKKwkJaWYgKFRBSUxRX0ZJUlNU
KCZzdHJxLT5vdXRxdWV1ZSkgJiYKKwkJICAgIFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRxdWV1ZSkt
Pm5ldCAhPSBOVUxMICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpLT5uZXQg
IT0gbmV0KSB7CisJCQlpZiAoc3RycSA9PSBhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSkg
eworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9IGVsc2UgeworCQkJCXN0cnF0ID0gc3RycTsKKwkJ
CQlnb3RvIHByaW9fYWdhaW47CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChzdHJxKTsKK30KKwor
c3RhdGljIGludAorc2N0cF9zc19wcmlvX2dldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Ig
U0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jIFNDVFBfVU5VU0VELAor
ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50
MTZfdCAqdmFsdWUpCit7CisJaWYgKHN0cnEgPT0gTlVMTCkgeworCQlyZXR1cm4gKC0xKTsKKwl9
CisJKnZhbHVlID0gc3RycS0+c3NfcGFyYW1zLnByaW8ucHJpb3JpdHk7CisJcmV0dXJuICgxKTsK
K30KKworc3RhdGljIGludAorc2N0cF9zc19wcmlvX3NldF92YWx1ZShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCB2YWx1ZSkKK3sKKwlp
ZiAoc3RycSA9PSBOVUxMKSB7CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJxLT5zc19wYXJhbXMu
cHJpby5wcmlvcml0eSA9IHZhbHVlOworCXNjdHBfc3NfcHJpb19yZW1vdmUoc3RjYiwgYXNvYywg
c3RycSwgTlVMTCwgMSk7CisJc2N0cF9zc19wcmlvX2FkZChzdGNiLCBhc29jLCBzdHJxLCBOVUxM
LCAxKTsKKwlyZXR1cm4gKDEpOworfQorCisvKgorICogRmFpciBiYW5kd2lkdGggYWxnb3JpdGht
LgorICogTWFpbnRhaW5zIGFuIGVxdWFsIHRyb3VnaHB1dCBwZXIgc3RyZWFtLgorICovCitzdGF0
aWMgdm9pZAorc2N0cF9zc19mYl9jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1
ZXMsIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9U
Q0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwl3aGlsZSAoIVRBSUxRX0VNUFRZKCZhc29jLT5zc19k
YXRhLm91dC53aGVlbCkpIHsKKwkJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSA9IFRBSUxR
X0ZJUlNUKCZhc29jLT5zc19kYXRhLm91dC53aGVlbCk7CisJCWlmIChjbGVhcl92YWx1ZXMpIHsK
KwkJCXN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPSAtMTsKKwkJfQorCQlUQUlMUV9SRU1PVkUo
JmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBUQUlMUV9GSVJTVCgmYXNvYy0+c3NfZGF0YS5vdXQu
d2hlZWwpLCBzc19wYXJhbXMuZmIubmV4dF9zcG9rZSk7CisJCXN0cnEtPnNzX3BhcmFtcy5mYi5u
ZXh0X3Nwb2tlLnRxZV9uZXh0ID0gTlVMTDsKKwkJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bv
a2UudHFlX3ByZXYgPSBOVUxMOworCX0KKwlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9
IE5VTEw7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhz
dGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9pbml0X3N0
cmVhbShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEs
IHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKndpdGhfc3RycSkKK3sKKwlpZiAod2l0aF9zdHJxICE9
IE5VTEwpIHsKKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9PSB3
aXRoX3N0cnEpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9IHN0
cnE7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Muc3NfZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gd2l0
aF9zdHJxKSB7CisJCQlzdGNiLT5hc29jLnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsK
KwkJfQorCX0KKwlzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCA9IE5VTEw7
CisJc3RycS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX3ByZXYgPSBOVUxMOworCWlmICh3
aXRoX3N0cnEgIT0gTlVMTCkgeworCQlzdHJxLT5zc19wYXJhbXMuZmIucm91bmRzID0gd2l0aF9z
dHJxLT5zc19wYXJhbXMuZmIucm91bmRzOworCX0gZWxzZSB7CisJCXN0cnEtPnNzX3BhcmFtcy5m
Yi5yb3VuZHMgPSAtMTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19m
Yl9hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNv
YywKKyAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEsIHN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwKKyAgICAgICAgICAgICAg
IGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0Jf
U0VORF9MT0NLKHN0Y2IpOworCX0KKwlpZiAoIVRBSUxRX0VNUFRZKCZzdHJxLT5vdXRxdWV1ZSkg
JiYKKwkgICAgKHN0cnEtPnNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9uZXh0ID09IE5VTEwp
ICYmCisJICAgIChzdHJxLT5zc19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9PSBOVUxM
KSkgeworCQlpZiAoc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA8IDApCisJCQlzdHJxLT5zc19w
YXJhbXMuZmIucm91bmRzID0gVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVlKS0+bGVuZ3RoOwor
CQlUQUlMUV9JTlNFUlRfVEFJTCgmYXNvYy0+c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3Bh
cmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQ
X1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF9zc19mYl9yZW1vdmUoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQg
KnN0cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCBTQ1RQX1VOVVNFRCwK
KyAgICAgICAgICAgICAgICAgIGludCBob2xkc19sb2NrKQoreworCWlmIChob2xkc19sb2NrID09
IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwkvKiBSZW1vdmUgZnJvbSB3
aGVlbCBpZiBzdHJlYW0gcXVldWUgaXMgZW1wdHkgYW5kIGFjdHVhbGx5IGlzIG9uIHRoZSB3aGVl
bCAqLworCWlmIChUQUlMUV9FTVBUWSgmc3RycS0+b3V0cXVldWUpICYmCisJICAgIChzdHJxLT5z
c19wYXJhbXMuZmIubmV4dF9zcG9rZS50cWVfbmV4dCAhPSBOVUxMIHx8CisJICAgIHN0cnEtPnNz
X3BhcmFtcy5mYi5uZXh0X3Nwb2tlLnRxZV9wcmV2ICE9IE5VTEwpKSB7CisJCWlmIChhc29jLT5z
c19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBzdHJxKSB7CisJCQlhc29jLT5zc19kYXRhLmxhc3Rf
b3V0X3N0cmVhbSA9IFRBSUxRX1BSRVYoYXNvYy0+c3NfZGF0YS5sYXN0X291dF9zdHJlYW0sIHNj
dHB3aGVlbF9saXN0aGVhZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UpOworCQkJaWYgKGFzb2MtPnNzX2RhdGEubGFzdF9vdXRf
c3RyZWFtID09IE5VTEwpIHsKKwkJCQlhc29jLT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9IFRB
SUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLAorCQkJCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2N0cHdoZWVsX2xpc3RoZWFkKTsKKwkJCX0KKwkJCWlmIChhc29j
LT5zc19kYXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSBzdHJxKSB7CisJCQkJYXNvYy0+c3NfZGF0YS5s
YXN0X291dF9zdHJlYW0gPSBOVUxMOworCQkJfQorCQl9CisJCVRBSUxRX1JFTU9WRSgmYXNvYy0+
c3NfZGF0YS5vdXQud2hlZWwsIHN0cnEsIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwkJc3Ry
cS0+c3NfcGFyYW1zLmZiLm5leHRfc3Bva2UudHFlX25leHQgPSBOVUxMOworCQlzdHJxLT5zc19w
YXJhbXMuZmIubmV4dF9zcG9rZS50cWVfcHJldiA9IE5VTEw7CisJfQorCWlmIChob2xkc19sb2Nr
ID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJfQorCXJldHVybjsKK30K
Kworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQqCitzY3RwX3NzX2ZiX3NlbGVjdChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEgPSBOVUxMLCAqc3RycXQ7CisKKwlpZiAoYXNvYy0+c3Nf
ZGF0YS5sYXN0X291dF9zdHJlYW0gPT0gTlVMTCB8fAorCSAgICBUQUlMUV9GSVJTVCgmYXNvYy0+
c3NfZGF0YS5vdXQud2hlZWwpID09IFRBSUxRX0xBU1QoJmFzb2MtPnNzX2RhdGEub3V0LndoZWVs
LCBzY3Rwd2hlZWxfbGlzdGhlYWQpKSB7CisJCXN0cnF0ID0gVEFJTFFfRklSU1QoJmFzb2MtPnNz
X2RhdGEub3V0LndoZWVsKTsKKwl9IGVsc2UgeworCQlzdHJxdCA9IFRBSUxRX05FWFQoYXNvYy0+
c3NfZGF0YS5sYXN0X291dF9zdHJlYW0sIHNzX3BhcmFtcy5mYi5uZXh0X3Nwb2tlKTsKKwl9CisJ
ZG8geworCQlpZiAoKHN0cnF0ICE9IE5VTEwpICYmCisJCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9jbXRfb25fb2ZmKSA+IDApIHx8CisJCSAgICAgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9j
bXRfb25fb2ZmKSA9PSAwICYmCisJCSAgICAgIChuZXQgPT0gTlVMTCB8fCAoVEFJTFFfRklSU1Qo
JnN0cnF0LT5vdXRxdWV1ZSkgJiYgVEFJTFFfRklSU1QoJnN0cnF0LT5vdXRxdWV1ZSktPm5ldCA9
PSBOVUxMKSB8fAorCQkgICAgICAgKG5ldCAhPSBOVUxMICYmIFRBSUxRX0ZJUlNUKCZzdHJxdC0+
b3V0cXVldWUpICYmIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgIT0gTlVMTCAm
JgorCQkgICAgICAgIFRBSUxRX0ZJUlNUKCZzdHJxdC0+b3V0cXVldWUpLT5uZXQgPT0gbmV0KSkp
KSkgeworCQkJaWYgKChzdHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyA+PSAwKSAmJiAoc3RycSA9
PSBOVUxMIHx8CisJCQkJc3RycXQtPnNzX3BhcmFtcy5mYi5yb3VuZHMgPCBzdHJxLT5zc19wYXJh
bXMuZmIucm91bmRzKSkgeworCQkJCXN0cnEgPSBzdHJxdDsKKwkJCX0KKwkJfQorCQlpZiAoc3Ry
cXQgIT0gTlVMTCkgeworCQkJc3RycXQgPSBUQUlMUV9ORVhUKHN0cnF0LCBzc19wYXJhbXMuZmIu
bmV4dF9zcG9rZSk7CisJCX0gZWxzZSB7CisJCQlzdHJxdCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC53aGVlbCk7CisJCX0KKwl9IHdoaWxlIChzdHJxdCAhPSBzdHJxKTsKKwlyZXR1
cm4gKHN0cnEpOworfQorCitzdGF0aWMgdm9pZAorc2N0cF9zc19mYl9zY2hlZHVsZWQoc3RydWN0
IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQgU0NUUF9VTlVTRUQsCisgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgc3RydWN0IHNj
dHBfc3RyZWFtX291dCAqc3RycSwKKyAgICAgICAgICAgICAgICAgICAgIGludCBtb3ZlZF9ob3df
bXVjaCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGluZyAq
c3A7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycXQ7CisJaW50IHN1YnRyYWN0OworCisJ
aWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDApIHsKKwkJc3AgPSBUQUlMUV9GSVJT
VCgmc3RycS0+b3V0cXVldWUpOworCQlpZiAoKHNwICE9IE5VTEwpICYmIChzcC0+c29tZV90YWtl
biA9PSAxKSkgeworCQkJc3RjYi0+YXNvYy5zc19kYXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3Ry
cTsKKwkJfSBlbHNlIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0YS5sb2NrZWRfb25fc2VuZGluZyA9
IE5VTEw7CisJCX0KKwl9IGVsc2UgeworCQlzdGNiLT5hc29jLnNzX2RhdGEubG9ja2VkX29uX3Nl
bmRpbmcgPSBOVUxMOworCX0KKwlzdWJ0cmFjdCA9IHN0cnEtPnNzX3BhcmFtcy5mYi5yb3VuZHM7
CisJVEFJTFFfRk9SRUFDSChzdHJxdCwgJmFzb2MtPnNzX2RhdGEub3V0LndoZWVsLCBzc19wYXJh
bXMuZmIubmV4dF9zcG9rZSkgeworCQlzdHJxdC0+c3NfcGFyYW1zLmZiLnJvdW5kcyAtPSBzdWJ0
cmFjdDsKKwkJaWYgKHN0cnF0LT5zc19wYXJhbXMuZmIucm91bmRzIDwgMCkKKwkJCXN0cnF0LT5z
c19wYXJhbXMuZmIucm91bmRzID0gMDsKKwl9CisJaWYgKFRBSUxRX0ZJUlNUKCZzdHJxLT5vdXRx
dWV1ZSkpIHsKKwkJc3RycS0+c3NfcGFyYW1zLmZiLnJvdW5kcyA9IFRBSUxRX0ZJUlNUKCZzdHJx
LT5vdXRxdWV1ZSktPmxlbmd0aDsKKwl9IGVsc2UgeworCQlzdHJxLT5zc19wYXJhbXMuZmIucm91
bmRzID0gLTE7CisJfQorCWFzb2MtPnNzX2RhdGEubGFzdF9vdXRfc3RyZWFtID0gc3RycTsKKwly
ZXR1cm47Cit9CisKKy8qCisgKiBGaXJzdC1jb21lLCBmaXJzdC1zZXJ2ZSBhbGdvcml0aG0uCisg
KiBNYWludGFpbnMgdGhlIG9yZGVyIHByb3ZpZGVkIGJ5IHRoZSBhcHBsaWNhdGlvbi4KKyAqLwor
c3RhdGljIHZvaWQKK3NjdHBfc3NfZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcgKnNwLAor
ICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jayk7CisKK3N0YXRpYyB2b2lkCitzY3RwX3Nz
X2ZjZnNfaW5pdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9u
ICphc29jLAorICAgICAgICAgICAgICAgICAgaW50IGhvbGRzX2xvY2spCit7CisJdWludDMyX3Qg
eCwgbiA9IDAsIGFkZF9tb3JlID0gMTsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGlu
ZyAqc3A7CisJdWludDE2X3QgaTsKKworCVRBSUxRX0lOSVQoJmFzb2MtPnNzX2RhdGEub3V0Lmxp
c3QpOworCS8qCisJICogSWYgdGhlcmUgaXMgZGF0YSBpbiB0aGUgc3RyZWFtIHF1ZXVlcyBhbHJl
YWR5LAorCSAqIHRoZSBzY2hlZHVsZXIgb2YgYW4gZXhpc3RpbmcgYXNzb2NpYXRpb24gaGFzCisJ
ICogYmVlbiBjaGFuZ2VkLiBXZSBjYW4gb25seSBjeWNsZSB0aHJvdWdoIHRoZQorCSAqIHN0cmVh
bSBxdWV1ZXMgYW5kIGFkZCBldmVyeXRoaW5nIHRvIHRoZSBGQ0ZTCisJICogcXVldWUuCisJICov
CisJd2hpbGUgKGFkZF9tb3JlKSB7CisJCWFkZF9tb3JlID0gMDsKKwkJZm9yIChpID0gMDsgaSA8
IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBpKyspIHsKKwkJCXNwID0gVEFJTFFfRklSU1QoJnN0
Y2ItPmFzb2Muc3RybW91dFtpXS5vdXRxdWV1ZSk7CisJCQl4ID0gMDsKKwkJCS8qIEZpbmQgbi4g
bWVzc2FnZSBpbiBjdXJyZW50IHN0cmVhbSBxdWV1ZSAqLworCQkJd2hpbGUgKHNwICE9IE5VTEwg
JiYgeCA8IG4pIHsKKwkJCQlzcCA9IFRBSUxRX05FWFQoc3AsIG5leHQpOworCQkJCXgrKzsKKwkJ
CX0KKwkJCWlmIChzcCAhPSBOVUxMKSB7CisJCQkJc2N0cF9zc19mY2ZzX2FkZChzdGNiLCAmc3Rj
Yi0+YXNvYywgJnN0Y2ItPmFzb2Muc3RybW91dFtpXSwgc3AsIGhvbGRzX2xvY2spOworCQkJCWFk
ZF9tb3JlID0gMTsKKwkJCX0KKwkJfQorCQluKys7CisJfQorCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfc3NfZmNmc19jbGVhcihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uICphc29jLAorICAgICAgICAgICAgICAgICAgIGludCBjbGVhcl92YWx1
ZXMsIGludCBob2xkc19sb2NrKQoreworCWlmIChjbGVhcl92YWx1ZXMpIHsKKwkJaWYgKGhvbGRz
X2xvY2sgPT0gMCkgeworCQkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCQl9CisJCXdoaWxl
ICghVEFJTFFfRU1QVFkoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QpKSB7CisJCQlUQUlMUV9SRU1P
VkUoJmFzb2MtPnNzX2RhdGEub3V0Lmxpc3QsIFRBSUxRX0ZJUlNUKCZhc29jLT5zc19kYXRhLm91
dC5saXN0KSwgc3NfbmV4dCk7CisJCX0KKwkJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQkJU0NU
UF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJCX0KKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMg
dm9pZAorc2N0cF9zc19mY2ZzX2luaXRfc3RyZWFtKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqd2l0aF9z
dHJxKQoreworCWlmICh3aXRoX3N0cnEgIT0gTlVMTCkgeworCQlpZiAoc3RjYi0+YXNvYy5zc19k
YXRhLmxvY2tlZF9vbl9zZW5kaW5nID09IHdpdGhfc3RycSkgeworCQkJc3RjYi0+YXNvYy5zc19k
YXRhLmxvY2tlZF9vbl9zZW5kaW5nID0gc3RycTsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zc19k
YXRhLmxhc3Rfb3V0X3N0cmVhbSA9PSB3aXRoX3N0cnEpIHsKKwkJCXN0Y2ItPmFzb2Muc3NfZGF0
YS5sYXN0X291dF9zdHJlYW0gPSBzdHJxOworCQl9CisJfQorCXJldHVybjsKK30KKworc3RhdGlj
IHZvaWQKK3NjdHBfc3NfZmNmc19hZGQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYywKKyAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfc3RyZWFt
X291dCAqc3RycSBTQ1RQX1VOVVNFRCwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcg
KnNwLAorICAgICAgICAgICAgICAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlpZiAoaG9sZHNfbG9j
ayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwl9CisJaWYgKHNwICYmIChz
cC0+c3NfbmV4dC50cWVfbmV4dCA9PSBOVUxMKSAmJgorCSAgICAoc3AtPnNzX25leHQudHFlX3By
ZXYgPT0gTlVMTCkpIHsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJmFzb2MtPnNzX2RhdGEub3V0Lmxp
c3QsIHNwLCBzc19uZXh0KTsKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RD
Ql9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50CitzY3Rw
X3NzX2ZjZnNfaXNfZW1wdHkoc3RydWN0IHNjdHBfdGNiICpzdGNiIFNDVFBfVU5VU0VELCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYykKK3sKKwlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNz
X2RhdGEub3V0Lmxpc3QpKSB7CisJCXJldHVybiAoMSk7CisJfSBlbHNlIHsKKwkJcmV0dXJuICgw
KTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX3NzX2ZjZnNfcmVtb3ZlKHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisgICAgICAgICAgICAg
ICAgICAgIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0cnEgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGhv
bGRzX2xvY2spCit7CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX1RDQl9TRU5EX0xP
Q0soc3RjYik7CisJfQorCWlmIChzcCAmJgorCSAgICAoKHNwLT5zc19uZXh0LnRxZV9uZXh0ICE9
IE5VTEwpIHx8CisJICAgICAoc3AtPnNzX25leHQudHFlX3ByZXYgIT0gTlVMTCkpKSB7CisJCVRB
SUxRX1JFTU9WRSgmYXNvYy0+c3NfZGF0YS5vdXQubGlzdCwgc3AsIHNzX25leHQpOworCX0KKwlp
ZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfVENCX1NFTkRfVU5MT0NLKHN0Y2IpOworCX0K
KwlyZXR1cm47Cit9CisKKworc3RhdGljIHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKgorc2N0cF9z
c19mY2ZzX3NlbGVjdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgU0NUUF9VTlVTRUQsIHN0cnVjdCBz
Y3RwX25ldHMgKm5ldCwKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfYXNzb2NpYXRp
b24gKmFzb2MpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycTsKKwlzdHJ1Y3Qgc2N0
cF9zdHJlYW1fcXVldWVfcGVuZGluZyAqc3A7CisKKwlzcCA9IFRBSUxRX0ZJUlNUKCZhc29jLT5z
c19kYXRhLm91dC5saXN0KTsKK2RlZmF1bHRfYWdhaW46CisJaWYgKHNwICE9IE5VTEwpIHsKKwkJ
c3RycSA9ICZhc29jLT5zdHJtb3V0W3NwLT5zaWRdOworCX0gZWxzZSB7CisJCXN0cnEgPSBOVUxM
OworCX0KKworCS8qCisJICogSWYgQ01UIGlzIG9mZiwgd2UgbXVzdCB2YWxpZGF0ZSB0aGF0CisJ
ICogdGhlIHN0cmVhbSBpbiBxdWVzdGlvbiBoYXMgdGhlIGZpcnN0CisJICogaXRlbSBwb2ludGVk
IHRvd2FyZHMgYXJlIG5ldHdvcmsgZGVzdGluYXRpb24KKwkgKiByZXF1ZXN0ZWQgYnkgdGhlIGNh
bGxlci4gTm90ZSB0aGF0IGlmIHdlCisJICogdHVybiBvdXQgdG8gYmUgbG9ja2VkIHRvIGEgc3Ry
ZWFtIChhc3NpZ25pbmcKKwkgKiBUU04ncyB0aGVuIHdlIG11c3Qgc3RvcCwgc2luY2Ugd2UgY2Fu
bm90CisJICogbG9vayBmb3IgYW5vdGhlciBzdHJlYW0gd2l0aCBkYXRhIHRvIHNlbmQKKwkgKiB0
byB0aGF0IGRlc3RpbmF0aW9uKS4gSW4gQ01UJ3MgY2FzZSwgYnkKKwkgKiBza2lwcGluZyB0aGlz
IGNoZWNrLCB3ZSB3aWxsIHNlbmQgb25lCisJICogZGF0YSBwYWNrZXQgdG93YXJkcyB0aGUgcmVx
dWVzdGVkIG5ldC4KKwkgKi8KKwlpZiAobmV0ICE9IE5VTEwgJiYgc3RycSAhPSBOVUxMICYmCisJ
ICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfb25fb2ZmKSA9PSAwKSB7CisJCWlmIChUQUlM
UV9GSVJTVCgmc3RycS0+b3V0cXVldWUpICYmCisJCSAgICBUQUlMUV9GSVJTVCgmc3RycS0+b3V0
cXVldWUpLT5uZXQgIT0gTlVMTCAmJgorCQkgICAgVEFJTFFfRklSU1QoJnN0cnEtPm91dHF1ZXVl
KS0+bmV0ICE9IG5ldCkgeworCQkJc3AgPSBUQUlMUV9ORVhUKHNwLCBzc19uZXh0KTsKKwkJCWdv
dG8gZGVmYXVsdF9hZ2FpbjsKKwkJfQorCX0KKwlyZXR1cm4gKHN0cnEpOworfQorCitjb25zdCBz
dHJ1Y3Qgc2N0cF9zc19mdW5jdGlvbnMgc2N0cF9zc19mdW5jdGlvbnNbXSA9IHsKKy8qIFNDVFBf
U1NfREVGQVVMVCAqLworeworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKKwlzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwlzY3RwX3NzX2Rl
ZmF1bHRfY2xlYXIsCisJc2N0cF9zc19kZWZhdWx0X2luaXRfc3RyZWFtLAorCXNjdHBfc3NfZGVm
YXVsdF9hZGQsCisJc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCXNjdHBfc3NfZGVmYXVsdF9y
ZW1vdmUsCisJc2N0cF9zc19kZWZhdWx0X3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1
bGVkLAorCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2RlZmF1bHRfZ2V0
X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2Rl
ZmF1bHRfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwku
c2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKKwkuc2N0
cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X2FkZCwKKwkuc2N0cF9zc19pc19l
bXB0eSA9IHNjdHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKKwkuc2N0cF9zc19yZW1vdmVfZnJvbV9z
dHJlYW0gPSBzY3RwX3NzX2RlZmF1bHRfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9zdHJlYW0g
PSBzY3RwX3NzX2RlZmF1bHRfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBfc3Nf
ZGVmYXVsdF9zY2hlZHVsZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2RlZmF1
bHRfcGFja2V0X2RvbmUsCisJLnNjdHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X2dl
dF92YWx1ZSwKKwkuc2N0cF9zc19zZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3ZhbHVl
LAorCS5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0X2lz
X3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZW5kaWYKK30sCisvKiBTQ1RQX1NTX1JPVU5EX1JPQklO
ICovCit7CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQorCXNjdHBfc3NfZGVmYXVsdF9pbml0LAorCXNjdHBfc3NfZGVmYXVsdF9jbGVh
ciwKKwlzY3RwX3NzX2RlZmF1bHRfaW5pdF9zdHJlYW0sCisJc2N0cF9zc19ycl9hZGQsCisJc2N0
cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCXNjdHBfc3NfZGVmYXVsdF9yZW1vdmUsCisJc2N0cF9z
c19kZWZhdWx0X3NlbGVjdCwKKwlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCXNjdHBfc3Nf
ZGVmYXVsdF9wYWNrZXRfZG9uZSwKKwlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBf
c3NfZGVmYXVsdF9zZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNv
bXBsZXRlCisjZWxzZQorCS5zY3RwX3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwku
c2N0cF9zc19jbGVhciA9IHNjdHBfc3NfZGVmYXVsdF9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0
cmVhbSA9IHNjdHBfc3NfZGVmYXVsdF9pbml0X3N0cmVhbSwKKwkuc2N0cF9zc19hZGRfdG9fc3Ry
ZWFtID0gc2N0cF9zc19ycl9hZGQsCisJLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1
bHRfaXNfZW1wdHksCisJLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZh
dWx0X3JlbW92ZSwKKwkuc2N0cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3Nl
bGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAor
CS5zY3RwX3NzX3BhY2tldF9kb25lID0gc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCS5z
Y3RwX3NzX2dldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUsCisJLnNjdHBfc3Nf
c2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0X3NldF92YWx1ZSwKKwkuc2N0cF9zc19pc191c2Vy
X21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0
ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19ST1VORF9ST0JJTl9QQUNLRVQgKi8KK3sKKyNpZiBk
ZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJ
c2N0cF9zc19kZWZhdWx0X2luaXQsCisJc2N0cF9zc19kZWZhdWx0X2NsZWFyLAorCXNjdHBfc3Nf
ZGVmYXVsdF9pbml0X3N0cmVhbSwKKwlzY3RwX3NzX3JyX2FkZCwKKwlzY3RwX3NzX2RlZmF1bHRf
aXNfZW1wdHksCisJc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwlzY3RwX3NzX3JycF9zZWxlY3Qs
CisJc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwKKwlzY3RwX3NzX3JycF9wYWNrZXRfZG9uZSwK
KwlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUs
CisJc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5zY3Rw
X3NzX2luaXQgPSBzY3RwX3NzX2RlZmF1bHRfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBf
c3NfZGVmYXVsdF9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZGVmYXVs
dF9pbml0X3N0cmVhbSwKKwkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19ycl9hZGQs
CisJLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJLnNjdHBf
c3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19kZWZhdWx0X3JlbW92ZSwKKwkuc2N0cF9z
c19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19ycnBfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxl
ZCA9IHNjdHBfc3NfZGVmYXVsdF9zY2hlZHVsZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBz
Y3RwX3NzX3JycF9wYWNrZXRfZG9uZSwKKwkuc2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2Rl
ZmF1bHRfZ2V0X3ZhbHVlLAorCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9z
ZXRfdmFsdWUsCisJLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2Rl
ZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbmRpZgorfSwKKy8qIFNDVFBfU1NfUFJJ
T1JJVFkgKi8KK3sKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisJc2N0cF9zc19kZWZhdWx0X2luaXQsCisJc2N0cF9zc19wcmlvX2Ns
ZWFyLAorCXNjdHBfc3NfcHJpb19pbml0X3N0cmVhbSwKKwlzY3RwX3NzX3ByaW9fYWRkLAorCXNj
dHBfc3NfZGVmYXVsdF9pc19lbXB0eSwKKwlzY3RwX3NzX3ByaW9fcmVtb3ZlLAorCXNjdHBfc3Nf
cHJpb19zZWxlY3QsCisJc2N0cF9zc19kZWZhdWx0X3NjaGVkdWxlZCwKKwlzY3RwX3NzX2RlZmF1
bHRfcGFja2V0X2RvbmUsCisJc2N0cF9zc19wcmlvX2dldF92YWx1ZSwKKwlzY3RwX3NzX3ByaW9f
c2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2Vs
c2UKKwkuc2N0cF9zc19pbml0ID0gc2N0cF9zc19kZWZhdWx0X2luaXQsCisJLnNjdHBfc3NfY2xl
YXIgPSBzY3RwX3NzX3ByaW9fY2xlYXIsCisJLnNjdHBfc3NfaW5pdF9zdHJlYW0gPSBzY3RwX3Nz
X3ByaW9faW5pdF9zdHJlYW0sCisJLnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfcHJp
b19hZGQsCisJLnNjdHBfc3NfaXNfZW1wdHkgPSBzY3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJ
LnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtID0gc2N0cF9zc19wcmlvX3JlbW92ZSwKKwkuc2N0
cF9zc19zZWxlY3Rfc3RyZWFtID0gc2N0cF9zc19wcmlvX3NlbGVjdCwKKwkuc2N0cF9zc19zY2hl
ZHVsZWQgPSBzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCS5zY3RwX3NzX3BhY2tldF9kb25l
ID0gc2N0cF9zc19kZWZhdWx0X3BhY2tldF9kb25lLAorCS5zY3RwX3NzX2dldF92YWx1ZSA9IHNj
dHBfc3NfcHJpb19nZXRfdmFsdWUsCisJLnNjdHBfc3Nfc2V0X3ZhbHVlID0gc2N0cF9zc19wcmlv
X3NldF92YWx1ZSwKKwkuc2N0cF9zc19pc191c2VyX21zZ3NfaW5jb21wbGV0ZSA9IHNjdHBfc3Nf
ZGVmYXVsdF9pc191c2VyX21zZ3NfaW5jb21wbGV0ZQorI2VuZGlmCit9LAorLyogU0NUUF9TU19G
QUlSX0JBTkRXSVRIICovCit7CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXNjdHBfc3NfZGVmYXVsdF9pbml0LAorCXNjdHBfc3Nf
ZmJfY2xlYXIsCisJc2N0cF9zc19mYl9pbml0X3N0cmVhbSwKKwlzY3RwX3NzX2ZiX2FkZCwKKwlz
Y3RwX3NzX2RlZmF1bHRfaXNfZW1wdHksCisJc2N0cF9zc19mYl9yZW1vdmUsCisJc2N0cF9zc19m
Yl9zZWxlY3QsCisJc2N0cF9zc19mYl9zY2hlZHVsZWQsCisJc2N0cF9zc19kZWZhdWx0X3BhY2tl
dF9kb25lLAorCXNjdHBfc3NfZGVmYXVsdF9nZXRfdmFsdWUsCisJc2N0cF9zc19kZWZhdWx0X3Nl
dF92YWx1ZSwKKwlzY3RwX3NzX2RlZmF1bHRfaXNfdXNlcl9tc2dzX2luY29tcGxldGUKKyNlbHNl
CisJLnNjdHBfc3NfaW5pdCA9IHNjdHBfc3NfZGVmYXVsdF9pbml0LAorCS5zY3RwX3NzX2NsZWFy
ID0gc2N0cF9zc19mYl9jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmJf
aW5pdF9zdHJlYW0sCisJLnNjdHBfc3NfYWRkX3RvX3N0cmVhbSA9IHNjdHBfc3NfZmJfYWRkLAor
CS5zY3RwX3NzX2lzX2VtcHR5ID0gc2N0cF9zc19kZWZhdWx0X2lzX2VtcHR5LAorCS5zY3RwX3Nz
X3JlbW92ZV9mcm9tX3N0cmVhbSA9IHNjdHBfc3NfZmJfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVj
dF9zdHJlYW0gPSBzY3RwX3NzX2ZiX3NlbGVjdCwKKwkuc2N0cF9zc19zY2hlZHVsZWQgPSBzY3Rw
X3NzX2ZiX3NjaGVkdWxlZCwKKwkuc2N0cF9zc19wYWNrZXRfZG9uZSA9IHNjdHBfc3NfZGVmYXVs
dF9wYWNrZXRfZG9uZSwKKwkuc2N0cF9zc19nZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfZ2V0
X3ZhbHVlLAorCS5zY3RwX3NzX3NldF92YWx1ZSA9IHNjdHBfc3NfZGVmYXVsdF9zZXRfdmFsdWUs
CisJLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUgPSBzY3RwX3NzX2RlZmF1bHRfaXNf
dXNlcl9tc2dzX2luY29tcGxldGUKKyNlbmRpZgorfSwKKy8qIFNDVFBfU1NfRklSU1RfQ09NRSAq
LworeworI2lmIGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKwlzY3RwX3NzX2ZjZnNfaW5pdCwKKwlzY3RwX3NzX2ZjZnNfY2xlYXIsCisJc2N0
cF9zc19mY2ZzX2luaXRfc3RyZWFtLAorCXNjdHBfc3NfZmNmc19hZGQsCisJc2N0cF9zc19mY2Zz
X2lzX2VtcHR5LAorCXNjdHBfc3NfZmNmc19yZW1vdmUsCisJc2N0cF9zc19mY2ZzX3NlbGVjdCwK
KwlzY3RwX3NzX2RlZmF1bHRfc2NoZWR1bGVkLAorCXNjdHBfc3NfZGVmYXVsdF9wYWNrZXRfZG9u
ZSwKKwlzY3RwX3NzX2RlZmF1bHRfZ2V0X3ZhbHVlLAorCXNjdHBfc3NfZGVmYXVsdF9zZXRfdmFs
dWUsCisJc2N0cF9zc19kZWZhdWx0X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZWxzZQorCS5z
Y3RwX3NzX2luaXQgPSBzY3RwX3NzX2ZjZnNfaW5pdCwKKwkuc2N0cF9zc19jbGVhciA9IHNjdHBf
c3NfZmNmc19jbGVhciwKKwkuc2N0cF9zc19pbml0X3N0cmVhbSA9IHNjdHBfc3NfZmNmc19pbml0
X3N0cmVhbSwKKwkuc2N0cF9zc19hZGRfdG9fc3RyZWFtID0gc2N0cF9zc19mY2ZzX2FkZCwKKwku
c2N0cF9zc19pc19lbXB0eSA9IHNjdHBfc3NfZmNmc19pc19lbXB0eSwKKwkuc2N0cF9zc19yZW1v
dmVfZnJvbV9zdHJlYW0gPSBzY3RwX3NzX2ZjZnNfcmVtb3ZlLAorCS5zY3RwX3NzX3NlbGVjdF9z
dHJlYW0gPSBzY3RwX3NzX2ZjZnNfc2VsZWN0LAorCS5zY3RwX3NzX3NjaGVkdWxlZCA9IHNjdHBf
c3NfZGVmYXVsdF9zY2hlZHVsZWQsCisJLnNjdHBfc3NfcGFja2V0X2RvbmUgPSBzY3RwX3NzX2Rl
ZmF1bHRfcGFja2V0X2RvbmUsCisJLnNjdHBfc3NfZ2V0X3ZhbHVlID0gc2N0cF9zc19kZWZhdWx0
X2dldF92YWx1ZSwKKwkuc2N0cF9zc19zZXRfdmFsdWUgPSBzY3RwX3NzX2RlZmF1bHRfc2V0X3Zh
bHVlLAorCS5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlID0gc2N0cF9zc19kZWZhdWx0
X2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlCisjZW5kaWYKK30KK307CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFl
Nzc1YWQ4YzJlNDhjNTM5MS4uZjQ5ZjJjODdhNzcwMjc5N2Y3NzBkMWM4M2VlNTIyMjVmZGZhNzVl
YyAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9w
YXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3RydWN0cy5o
CisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N0cnVjdHMuaApAQCAtMCww
ICsxLDEzMTAgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz
ZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFu
ZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4
LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAor
ICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UK
KyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZy
ZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQvc2N0cF9zdHJ1Y3RzLmggMzI1MzcwIDIwMTctMTEtMDMg
MjA6NDY6MTJaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NU
UlVDVFNfSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9TVFJVQ1RTX0hfCisKKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKworc3RydWN0IHNjdHBfdGltZXIgeworCXNjdHBf
b3NfdGltZXJfdCB0aW1lcjsKKworCWludCB0eXBlOworCS8qCisJICogRGVwZW5kaW5nIG9uIHRo
ZSB0aW1lciB0eXBlIHRoZXNlIHdpbGwgYmUgc2V0dXAgYW5kIGNhc3Qgd2l0aCB0aGUKKwkgKiBh
cHByb3ByaWF0ZSBlbnRpdHkuCisJICovCisJdm9pZCAqZXA7CisJdm9pZCAqdGNiOworCXZvaWQg
Km5ldDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4
MDAwMDAKKwl2b2lkICp2bmV0OworI2VuZGlmCisKKwkvKiBmb3Igc2FuaXR5IGNoZWNraW5nICov
CisJdm9pZCAqc2VsZjsKKwl1aW50MzJfdCB0aWNrczsKKwl1aW50MzJfdCBzdG9wcGVkX2Zyb207
Cit9OworCisKK3N0cnVjdCBzY3RwX2Zvb19zdHVmZiB7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKKwl1aW50MzJfdCAgICAgICAgbGluZW5vOworCXVpbnQzMl90ICAgICAgICB0aWNrczsKKwlp
bnQgICAgICAgICAgICAgdXBkb3duOworfTsKKworCisvKgorICogVGhpcyBpcyB0aGUgaW5mb3Jt
YXRpb24gd2UgdHJhY2sgb24gZWFjaCBpbnRlcmZhY2UgdGhhdCB3ZSBrbm93IGFib3V0IGZyb20K
KyAqIHRoZSBkaXN0YW50IGVuZC4KKyAqLworVEFJTFFfSEVBRChzY3RwbmV0bGlzdGhlYWQsIHNj
dHBfbmV0cyk7CisKK3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9saXN0IHsKKwlUQUlMUV9FTlRS
WShzY3RwX3N0cmVhbV9yZXNldF9saXN0KSBuZXh0X3Jlc3A7CisJdWludDMyX3Qgc2VxOworCXVp
bnQzMl90IHRzbjsKKwl1aW50MzJfdCBudW1iZXJfZW50cmllczsKKwl1aW50MTZfdCBsaXN0X29m
X3N0cmVhbXNbXTsKK307CisKK1RBSUxRX0hFQUQoc2N0cF9yZXNldGhlYWQsIHNjdHBfc3RyZWFt
X3Jlc2V0X2xpc3QpOworCisvKgorICogVXNlcnMgb2YgdGhlIGl0ZXJhdG9yIG5lZWQgdG8gbWFs
bG9jIGEgaXRlcmF0b3Igd2l0aCBhIGNhbGwgdG8KKyAqIHNjdHBfaW5pdGlhdGVfaXRlcmF0b3Io
aW5wX2Z1bmMsIGFzc29jX2Z1bmMsIGlucF9mdW5jLCAgcGNiX2ZsYWdzLCBwY2JfZmVhdHVyZXMs
CisgKiAgICAgYXNvY19zdGF0ZSwgdm9pZC1wdHItYXJnLCB1aW50MzItYXJnLCBlbmRfZnVuYywg
aW5wKTsKKyAqCisgKiBVc2UgdGhlIGZvbGxvd2luZyB0d28gZGVmaW5lcyBpZiB5b3UgZG9uJ3Qg
Y2FyZSB3aGF0IHBjYiBmbGFncyBhcmUgb24gdGhlIEVQCisgKiBhbmQvb3IgeW91IGRvbid0IGNh
cmUgd2hhdCBzdGF0ZSB0aGUgYXNzb2NpYXRpb24gaXMgaW4uCisgKgorICogTm90ZSB0aGF0IGlm
IHlvdSBzcGVjaWZ5IGFuIElOUCBhcyB0aGUgbGFzdCBhcmd1bWVudCB0aGVuIE9OTFkgZWFjaAor
ICogYXNzb2NpYXRpb24gb2YgdGhhdCBzaW5nbGUgSU5QIHdpbGwgYmUgZXhlY3V0ZWQgdXBvbi4g
Tm90ZSB0aGF0IHRoZSBwY2IKKyAqIGZsYWdzIFNUSUxMIGFwcGx5IHNvIGlmIHRoZSBpbnAgeW91
IHNwZWNpZnkgaGFzIGRpZmZlcmVudCBwY2JfZmxhZ3MgdGhlbgorICogd2hhdCB5b3UgcHV0IGlu
IHBjYl9mbGFncyBub3RoaW5nIHdpbGwgaGFwcGVuLiB1c2UgU0NUUF9QQ0JfQU5ZX0ZMQUdTIHRv
CisgKiBhc3N1cmUgdGhlIGlucCB5b3Ugc3BlY2lmeSBnZXRzIHRyZWF0ZWQuCisgKi8KKyNkZWZp
bmUgU0NUUF9QQ0JfQU5ZX0ZMQUdTCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9QQ0JfQU5ZX0ZF
QVRVUkVTCTB4MDAwMDAwMDAKKyNkZWZpbmUgU0NUUF9BU09DX0FOWV9TVEFURQkweDAwMDAwMDAw
CisKK3R5cGVkZWYgdm9pZCAoKmFzb2NfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVj
dCBzY3RwX3RjYiAqLCB2b2lkICpwdHIsCisgICAgICAgICB1aW50MzJfdCB2YWwpOwordHlwZWRl
ZiBpbnQgKCppbnBfZnVuYykgKHN0cnVjdCBzY3RwX2lucGNiICosIHZvaWQgKnB0ciwgdWludDMy
X3QgdmFsKTsKK3R5cGVkZWYgdm9pZCAoKmVuZF9mdW5jKSAodm9pZCAqcHRyLCB1aW50MzJfdCB2
YWwpOworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgZGVmaW5lZChTQ1RQX01DT1JFX0lO
UFVUKSAmJiBkZWZpbmVkKFNNUCkKKy8qIHdoYXRzIG9uIHRoZSBtY29yZSBjb250cm9sIHN0cnVj
dCAqLworc3RydWN0IHNjdHBfbWNvcmVfcXVldWUgeworCVRBSUxRX0VOVFJZKHNjdHBfbWNvcmVf
cXVldWUpIG5leHQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAxMDAwCisJc3RydWN0IHZuZXQgKnZuOworI2VuZGlmCisJc3RydWN0IG1idWYgKm07
CisJaW50IG9mZjsKKwlpbnQgdjY7Cit9OworCitUQUlMUV9IRUFEKHNjdHBfbWNvcmVfcWhlYWQs
IHNjdHBfbWNvcmVfcXVldWUpOworCitzdHJ1Y3Qgc2N0cF9tY29yZV9jdHJsIHsKKwlTQ1RQX1BS
T0NFU1NfU1RSVUNUIHRocmVhZF9wcm9jOworCXN0cnVjdCBzY3RwX21jb3JlX3FoZWFkIHF1ZTsK
KwlzdHJ1Y3QgbXR4IGNvcmVfbXR4OworCXN0cnVjdCBtdHggcXVlX210eDsKKwlpbnQgcnVubmlu
ZzsKKwlpbnQgY3B1aWQ7Cit9OworCisKKyNlbmRpZgorCisKK3N0cnVjdCBzY3RwX2l0ZXJhdG9y
IHsKKwlUQUlMUV9FTlRSWShzY3RwX2l0ZXJhdG9yKSBzY3RwX254dF9pdHI7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJc3RydWN0IHZu
ZXQgKnZuOworI2VuZGlmCisJc3RydWN0IHNjdHBfdGltZXIgdG1yOworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CQkvKiBjdXJyZW50IGVuZHBvaW50ICovCisJc3RydWN0IHNjdHBfdGNiICpzdGNi
OwkJLyogY3VycmVudCogYXNzb2MgKi8KKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV4dF9pbnA7ICAg
IC8qIHNwZWNpYWwgaG9vayB0byBza2lwIHRvICovCisJYXNvY19mdW5jIGZ1bmN0aW9uX2Fzc29j
OwkvKiBwZXIgYXNzb2MgZnVuY3Rpb24gKi8KKwlpbnBfZnVuYyBmdW5jdGlvbl9pbnA7CQkvKiBw
ZXIgZW5kcG9pbnQgZnVuY3Rpb24gKi8KKwlpbnBfZnVuYyBmdW5jdGlvbl9pbnBfZW5kOwkvKiBl
bmQgSU5QIGZ1bmN0aW9uICovCisJZW5kX2Z1bmMgZnVuY3Rpb25fYXRlbmQ7CS8qIGl0ZXJhdG9y
IGNvbXBsZXRpb24gZnVuY3Rpb24gKi8KKwl2b2lkICpwb2ludGVyOwkJCS8qIHBvaW50ZXIgZm9y
IGFwcGx5IGZ1bmMgdG8gdXNlICovCisJdWludDMyX3QgdmFsOwkJCS8qIHZhbHVlIGZvciBhcHBs
eSBmdW5jIHRvIHVzZSAqLworCXVpbnQzMl90IHBjYl9mbGFnczsJCS8qIGVuZHBvaW50IGZsYWdz
IGJlaW5nIGNoZWNrZWQgKi8KKwl1aW50MzJfdCBwY2JfZmVhdHVyZXM7CQkvKiBlbmRwb2ludCBm
ZWF0dXJlcyBiZWluZyBjaGVja2VkICovCisJdWludDMyX3QgYXNvY19zdGF0ZTsJCS8qIGFzc29j
IHN0YXRlIGJlaW5nIGNoZWNrZWQgKi8KKwl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKKwl1aW50
OF90ICBub19jaHVua19vdXRwdXQ7CisJdWludDhfdCAgZG9uZV9jdXJyZW50X2VwOworfTsKKy8q
IGl0ZXJhdG9yX2ZsYWdzIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX0FMTF9J
TlAJMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0lURVJBVE9SX0RPX1NJTkdMRV9JTlAJMHgwMDAw
MDAwMgorCisKK1RBSUxRX0hFQUQoc2N0cGl0ZXJhdG9ycywgc2N0cF9pdGVyYXRvcik7CisKK3N0
cnVjdCBzY3RwX2NvcHlfYWxsIHsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwkvKiBlcCAqLwor
CXN0cnVjdCBtYnVmICptOworCXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2OworCWludCBz
bmRsZW47CisJaW50IGNudF9zZW50OworCWludCBjbnRfZmFpbGVkOworfTsKKworc3RydWN0IHNj
dHBfYXNjb25mX2l0ZXJhdG9yIHsKKwlzdHJ1Y3Qgc2N0cGxhZGRyIGxpc3Rfb2Zfd29yazsKKwlp
bnQgY250OworfTsKKworc3RydWN0IGl0ZXJhdG9yX2NvbnRyb2wgeworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pCisJc3RydWN0IG10eCBpcGlfaXRlcmF0b3Jfd3FfbXR4OworCXN0cnVjdCBtdHgg
aXRfbXR4OworI2VsaWYgZGVmaW5lZChfX0FQUExFX18pCisJbGNrX210eF90ICppcGlfaXRlcmF0
b3Jfd3FfbXR4OworCWxja19tdHhfdCAqaXRfbXR4OworI2VsaWYgZGVmaW5lZChTQ1RQX1BST0NF
U1NfTEVWRUxfTE9DS1MpCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXVzZXJsYW5kX211
dGV4X3QgaXBpX2l0ZXJhdG9yX3dxX210eDsKKwl1c2VybGFuZF9tdXRleF90IGl0X210eDsKKwl1
c2VybGFuZF9jb25kX3QgaXRlcmF0b3Jfd2FrZXVwOworI2Vsc2UKKwlwdGhyZWFkX211dGV4X3Qg
aXBpX2l0ZXJhdG9yX3dxX210eDsKKwlwdGhyZWFkX211dGV4X3QgaXRfbXR4OworCXB0aHJlYWRf
Y29uZF90IGl0ZXJhdG9yX3dha2V1cDsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwlzdHJ1Y3Qgc3BpbmxvY2sgaXRfbG9jazsKKwlzdHJ1Y3Qgc3BpbmxvY2sgaXBpX2l0ZXJh
dG9yX3dxX2xvY2s7CisJS0VWRU5UIGl0ZXJhdG9yX3dha2V1cFsyXTsKKwlQRklMRV9PQkpFQ1Qg
aXRlcmF0b3JfdGhyZWFkX29iajsKKyNlbHNlCisJdm9pZCAqaXRfbXR4OworI2VuZGlmCisjaWYg
IWRlZmluZWQoX19XaW5kb3dzX18pCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTQ1RQ
X1BST0NFU1NfU1RSVUNUIHRocmVhZF9wcm9jOworI2Vsc2UKKwl1c2VybGFuZF90aHJlYWRfdCB0
aHJlYWRfcHJvYzsKKyNlbmRpZgorI2VuZGlmCisJc3RydWN0IHNjdHBpdGVyYXRvcnMgaXRlcmF0
b3JoZWFkOworCXN0cnVjdCBzY3RwX2l0ZXJhdG9yICpjdXJfaXQ7CisJdWludDMyX3QgaXRlcmF0
b3JfcnVubmluZzsKKwl1aW50MzJfdCBpdGVyYXRvcl9mbGFnczsKK307CisjaWYgIWRlZmluZWQo
X19GcmVlQlNEX18pCisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfTVVTVF9FWElUCQkweDAwMDAwMDAx
CisjZGVmaW5lIFNDVFBfSVRFUkFUT1JfRVhJVEVECQkweDAwMDAwMDAyCisjZW5kaWYKKyNkZWZp
bmUgU0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JVAkweDAwMDAwMDA0CisjZGVmaW5lIFNDVFBfSVRF
UkFUT1JfU1RPUF9DVVJfSU5QCTB4MDAwMDAwMDgKKworc3RydWN0IHNjdHBfbmV0X3JvdXRlIHsK
KwlzY3RwX3J0ZW50cnlfdCAqcm9fcnQ7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA8IDExMDAwOTMKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAw
MDAKKwl2b2lkICpyb19sbGU7CisjZW5kaWYKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA5MDAw
MDAKKwl2b2lkICpyb19pYTsKKwlpbnQgcm9fZmxhZ3M7CisjZW5kaWYKKyNlbHNlCisjaWYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gMTEwMDExNgorCXN0cnVjdCBsbGVudHJ5ICpyb19sbGU7CisjZW5k
aWYKKwljaGFyCQkqcm9fcHJlcGVuZDsKKwl1aW50MTZfdAlyb19wbGVuOworCXVpbnQxNl90CXJv
X2ZsYWdzOworCXVpbnQxNl90CXJvX210dTsKKwl1aW50MTZfdAlzcGFyZTsKKyNlbmRpZgorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkg
JiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04pICYm
ICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikgJiYgIWRlZmluZWQoQVBQTEVfRUxDQVBJVEFO
KQorCXN0cnVjdCBsbGVudHJ5CSpyb19sbGU7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChBUFBMRV9M
RU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVf
TElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKQorCXN0cnVjdCBpZmFkZHIgKnJv
X3NyY2lhOworI2VuZGlmCisjaWYgIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwl1aW50MzJfdCBy
b19mbGFnczsKKyNlbmRpZgorI2VuZGlmCisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgX2xfYWRkcjsJ
LyogcmVtb3RlIHBlZXIgYWRkciAqLworCXN0cnVjdCBzY3RwX2lmYSAqX3NfYWRkcjsJLyogb3Vy
IHNlbGVjdGVkIHNyYyBhZGRyICovCit9OworCitzdHJ1Y3QgaHRjcCB7CisJdWludDE2X3QJYWxw
aGE7CQkvKiBGaXhlZCBwb2ludCBhcml0aCwgPDwgNyAqLworCXVpbnQ4X3QJCWJldGE7ICAgICAg
ICAgICAvKiBGaXhlZCBwb2ludCBhcml0aCwgPDwgNyAqLworCXVpbnQ4X3QJCW1vZGVzd2l0Y2g7
ICAgICAvKiBEZWxheSBtb2Rlc3dpdGNoIHVudGlsIHdlIGhhZCBhdCBsZWFzdCBvbmUgY29uZ2Vz
dGlvbiBldmVudCAqLworCXVpbnQzMl90CWxhc3RfY29uZzsJLyogVGltZSBzaW5jZSBsYXN0IGNv
bmdlc3Rpb24gZXZlbnQgZW5kICovCisJdWludDMyX3QJdW5kb19sYXN0X2Nvbmc7CisJdWludDE2
X3QJYnl0ZXNfYWNrZWQ7CisJdWludDMyX3QJYnl0ZWNvdW50OworCXVpbnQzMl90CW1pblJUVDsK
Kwl1aW50MzJfdAltYXhSVFQ7CisKKwl1aW50MzJfdAl1bmRvX21heFJUVDsKKwl1aW50MzJfdAl1
bmRvX29sZF9tYXhCOworCisJLyogQmFuZHdpZHRoIGVzdGltYXRpb24gKi8KKwl1aW50MzJfdAlt
aW5COworCXVpbnQzMl90CW1heEI7CisJdWludDMyX3QJb2xkX21heEI7CisJdWludDMyX3QJQmk7
CisJdWludDMyX3QJbGFzdHRpbWU7Cit9OworCitzdHJ1Y3QgcnRjY19jYyB7CisJc3RydWN0IHRp
bWV2YWwgdGxzOyAgIC8qIFRoZSB0aW1lIHdlIHN0YXJ0ZWQgdGhlIHNlbmRpbmcgICovCisJdWlu
dDY0X3QgbGJ3OyAgICAgICAgIC8qIE91ciBsYXN0IGVzdGltYXRlZCBidyAqLworCXVpbnQ2NF90
IGxid19ydHQ7ICAgICAvKiBSVFQgYXQgYncgZXN0aW1hdGUgKi8KKwl1aW50NjRfdCBid19ieXRl
czsgICAgLyogVGhlIHRvdGFsIGJ5dGVzIHNpbmNlIHRoaXMgc2VuZGluZyBiZWdhbiAqLworCXVp
bnQ2NF90IGJ3X3RvdF90aW1lOyAvKiBUaGUgdG90YWwgdGltZSBzaW5jZSBzZW5kaW5nIGJlZ2Fu
ICovCisJdWludDY0X3QgbmV3X3RvdF90aW1lOyAgLyogdGVtcCBob2xkaW5nIHRoZSBuZXcgdmFs
dWUgKi8KKwl1aW50NjRfdCBid19ieXRlc19hdF9sYXN0X3J0dGM7IC8qIFdoYXQgYndfYnl0ZXMg
d2FzIGF0IGxhc3QgcnR0IGNhbGMgKi8KKwl1aW50MzJfdCBjd25kX2F0X2J3X3NldDsgLyogQ3du
ZCBhdCBsYXN0IGJ3IHNhdmVkIC0gbGJ3ICovCisJdWludDMyX3Qgdm9sX3JlZHVjZTsgIC8qIGNu
dCBvZiB2b2x1bnRhcnkgcmVkdWN0aW9ucyAqLworCXVpbnQxNl90IHN0ZWFkeV9zdGVwOyAvKiBU
aGUgbnVtYmVyIHJlcXVpcmVkIHRvIGJlIGluIHN0ZWFkeSBzdGF0ZSovCisJdWludDE2X3Qgc3Rl
cF9jbnQ7ICAgIC8qIFRoZSBjdXJyZW50IG51bWJlciAqLworCXVpbnQ4X3QgIHJldF9mcm9tX2Vx
OyAgLyogV2hlbiBhbGwgdGhpbmdzIGFyZSBlcXVhbCB3aGF0IGRvIEkgcmV0dXJuIDAvMSAtIDEg
bm8gY2MgYWR2YW5jZSAqLworCXVpbnQ4X3QgIHVzZV9kY2NjX2VjbjsgIC8qIEZsYWcgdG8gZW5h
YmxlIERDQ0MgRUNOICovCisJdWludDhfdCAgdGxzX25lZWRzX3NldDsgLyogRmxhZyB0byBpbmRp
Y2F0ZSB3ZSBuZWVkIHRvIHNldCB0bHMgMCBvciAxIG1lYW5zIHNldCBhdCBzZW5kIDIgbm90ICov
CisJdWludDhfdCAgbGFzdF9zdGVwX3N0YXRlOyAvKiBMYXN0IHN0YXRlIGlmIHN0ZWFkeSBzdGF0
ZSBzdGVwZG93biBpcyBvbiAqLworCXVpbnQ4X3QgIHJ0dF9zZXRfdGhpc19zYWNrOyAvKiBGbGFn
IHNheWluZyB0aGlzIHNhY2sgaGFkIFJUVCBjYWxjIG9uIGl0ICovCisJdWludDhfdCAgbGFzdF9p
bnN0X2luZDsgLyogTGFzdCBzYXZlZCBpbnN0IGluZGljYXRpb24gKi8KK307CisKKworc3RydWN0
IHNjdHBfbmV0cyB7CisJVEFJTFFfRU5UUlkoc2N0cF9uZXRzKSBzY3RwX25leHQ7CS8qIG5leHQg
bGluayAqLworCisJLyoKKwkgKiBUaGluZ3Mgb24gdGhlIHRvcCBoYWxmIG1heSBiZSBhYmxlIHRv
IGJlIHNwbGl0IGludG8gYSBjb21tb24KKwkgKiBzdHJ1Y3R1cmUgc2hhcmVkIGJ5IGFsbC4KKwkg
Ki8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBwbXR1X3RpbWVyOworCXN0cnVjdCBzY3RwX3RpbWVyIGhi
X3RpbWVyOworCisJLyoKKwkgKiBUaGUgZm9sbG93aW5nIHR3byBpbiBjb21iaW5hdGlvbiBlcXVh
dGUgdG8gYSByb3V0ZSBlbnRyeSBmb3IgdjYKKwkgKiBvciB2NC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0
cF9uZXRfcm91dGUgcm87CisKKwkvKiBtdHUgZGlzY292ZXJlZCBzbyBmYXIgKi8KKwl1aW50MzJf
dCBtdHU7CisJdWludDMyX3Qgc3N0aHJlc2g7CS8qIG5vdCBzdXJlIGFib3V0IHRoaXMgb25lIGZv
ciBzcGxpdCAqLworCXVpbnQzMl90IGxhc3RfY3dyX3RzbjsKKwl1aW50MzJfdCBjd3Jfd2luZG93
X3RzbjsKKwl1aW50MzJfdCBlY25fY2VfcGt0X2NudDsKKwl1aW50MzJfdCBsb3N0X2NudDsKKwkv
KiBzbW9vdGhlZCBhdmVyYWdlIHRoaW5ncyBmb3IgUlRUIGFuZCBSVE8gaXRzZWxmICovCisJaW50
IGxhc3RzYTsKKwlpbnQgbGFzdHN2OworCXVpbnQ2NF90IHJ0dDsgLyogbGFzdCBtZWFzdXJlZCBy
dHQgdmFsdWUgaW4gdXMgKi8KKwl1bnNpZ25lZCBpbnQgUlRPOworCisJLyogVGhpcyBpcyB1c2Vk
IGZvciBTSFVURE9XTi9TSFVURE9XTi1BQ0svU0VORCBvciBJTklUIHRpbWVycyAqLworCXN0cnVj
dCBzY3RwX3RpbWVyIHJ4dF90aW1lcjsKKworCS8qIGxhc3QgdGltZSBpbiBzZWNvbmRzIEkgc2Vu
dCB0byBpdCAqLworCXN0cnVjdCB0aW1ldmFsIGxhc3Rfc2VudF90aW1lOworCXVuaW9uIGNjX2Nv
bnRyb2xfZGF0YSB7CisJCXN0cnVjdCBodGNwIGh0Y3BfY2E7IAkvKiBKUlMgLSBzdHJ1Y3QgdXNl
ZCBpbiBIVENQIGFsZ29yaXRobSAqLworCQlzdHJ1Y3QgcnRjY19jYyBydGNjOyAgICAvKiBydGNj
IG1vZHVsZSBjYyBzdHVmZiAgKi8KKwl9IGNjX21vZDsKKwlpbnQgcmVmX2NvdW50OworCisJLyog
Q29uZ2VzdGlvbiBzdGF0cyBwZXIgZGVzdGluYXRpb24gKi8KKwkvKgorCSAqIGZsaWdodCBzaXpl
IHZhcmlhYmxlcyBhbmQgc3VjaCwgc29ycnkgVmVybiwgSSBjb3VsZCBub3QgYXZvaWQKKwkgKiB0
aGlzIGlmIEkgd2FudGVkIHBlcmZvcm1hbmNlIDo+CisJICovCisJdWludDMyX3QgZmxpZ2h0X3Np
emU7CisJdWludDMyX3QgY3duZDsJCS8qIGFjdHVhbCBjd25kICovCisJdWludDMyX3QgcHJldl9j
d25kOwkvKiBjd25kIGJlZm9yZSBhbnkgcHJvY2Vzc2luZyAqLworCXVpbnQzMl90IGVjbl9wcmV2
X2N3bmQ7CS8qIEVDTiBwcmV2IGN3bmQgYXQgZmlyc3QgZWNuX2VjaG8gc2VlbiBpbiBuZXcgd2lu
ZG93ICovCisJdWludDMyX3QgcGFydGlhbF9ieXRlc19hY2tlZDsJLyogaW4gQ0EgdHJhY2tzIHdo
ZW4gdG8gaW5jciBhIE1UVSAqLworCS8qIHRyYWNraW5nIHZhcmlhYmxlcyB0byBhdm9pZCB0aGUg
YWxvYy9mcmVlIGluIHNhY2sgcHJvY2Vzc2luZyAqLworCXVuc2lnbmVkIGludCBuZXRfYWNrOwor
CXVuc2lnbmVkIGludCBuZXRfYWNrMjsKKworCS8qCisJICogSlJTIC0gNS84LzA3IC0gVmFyaWFi
bGUgdG8gdHJhY2sgbGFzdCB0aW1lCisJICogIGEgZGVzdGluYXRpb24gd2FzIGFjdGl2ZSBmb3Ig
Q01UIFBGCisJICovCisJdWludDMyX3QgbGFzdF9hY3RpdmU7CisKKwkvKgorCSAqIENNVCB2YXJp
YWJsZXMgKGl5ZW5nYXJAY2lzLnVkZWwuZWR1KQorCSAqLworCXVpbnQzMl90IHRoaXNfc2Fja19o
aWdoZXN0X25ld2FjazsJLyogdHJhY2tzIGhpZ2hlc3QgVFNOIG5ld2x5CisJCQkJCQkgKiBhY2tl
ZCBmb3IgYSBnaXZlbiBkZXN0IGluCisJCQkJCQkgKiB0aGUgY3VycmVudCBTQUNLLiBVc2VkIGlu
CisJCQkJCQkgKiBTRlIgYW5kIEhUTkEgYWxnb3MgKi8KKwl1aW50MzJfdCBwc2V1ZG9fY3VtYWNr
OwkvKiBDTVQgQ1VDIGFsZ29yaXRobS4gTWFpbnRhaW5zIG5leHQgZXhwZWN0ZWQKKwkJCQkgKiBw
c2V1ZG8tY3VtYWNrIGZvciB0aGlzIGRlc3RpbmF0aW9uICovCisJdWludDMyX3QgcnR4X3BzZXVk
b19jdW1hY2s7CS8qIENNVCBDVUMgYWxnb3JpdGhtLiBNYWludGFpbnMgbmV4dAorCQkJCQkgKiBl
eHBlY3RlZCBwc2V1ZG8tY3VtYWNrIGZvciB0aGlzCisJCQkJCSAqIGRlc3RpbmF0aW9uICovCisK
KwkvKiBDTVQgZmFzdCByZWNvdmVyeSB2YXJpYWJsZXMgKi8KKwl1aW50MzJfdCBmYXN0X3JlY292
ZXJ5X3RzbjsKKwl1aW50MzJfdCBoZWFydGJlYXRfcmFuZG9tMTsKKwl1aW50MzJfdCBoZWFydGJl
YXRfcmFuZG9tMjsKKyNpZmRlZiBJTkVUNgorCXVpbnQzMl90IGZsb3dsYWJlbDsKKyNlbmRpZgor
CXVpbnQ4X3QgZHNjcDsKKworCXN0cnVjdCB0aW1ldmFsIHN0YXJ0X3RpbWU7ICAgICAgLyogdGlt
ZSB3aGVuIHRoaXMgbmV0IHdhcyBjcmVhdGVkICovCisJdWludDMyX3QgbWFya2VkX3JldHJhbnM7
ICAgICAgICAvKiBudW1iZXIgb3IgREFUQSBjaHVua3MgbWFya2VkIGZvcgorCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdGltZXIgYmFzZWQgcmV0cmFuc21pc3Npb25zICovCisJ
dWludDMyX3QgbWFya2VkX2Zhc3RyZXRyYW5zOworCXVpbnQzMl90IGhlYXJ0X2JlYXRfZGVsYXk7
ICAgICAgLyogSGVhcnQgQmVhdCBkZWxheSBpbiBtcyAqLworCisJLyogaWYgdGhpcyBndXkgaXMg
b2sgb3Igbm90IC4uLiBzdGF0dXMgKi8KKwl1aW50MTZfdCBkZXN0X3N0YXRlOworCS8qIG51bWJl
ciBvZiB0aW1lb3V0cyB0byBjb25zaWRlciB0aGUgZGVzdGluYXRpb24gdW5yZWFjaGFibGUgKi8K
Kwl1aW50MTZfdCBmYWlsdXJlX3RocmVzaG9sZDsKKwkvKiBudW1iZXIgb2YgdGltZW91dHMgdG8g
Y29uc2lkZXIgdGhlIGRlc3RpbmF0aW9uIHBvdGVudGlhbGx5IGZhaWxlZCAqLworCXVpbnQxNl90
IHBmX3RocmVzaG9sZDsKKwkvKiBlcnJvciBzdGF0cyBvbiB0aGUgZGVzdGluYXRpb24gKi8KKwl1
aW50MTZfdCBlcnJvcl9jb3VudDsKKwkvKiBVRFAgcG9ydCBudW1iZXIgaW4gY2FzZSBvZiBVRFAg
dHVubmVsaW5nICovCisJdWludDE2X3QgcG9ydDsKKworCXVpbnQ4X3QgZmFzdF9yZXRyYW5fbG9z
c19yZWNvdmVyeTsKKwl1aW50OF90IHdpbGxfZXhpdF9mYXN0X3JlY292ZXJ5OworCS8qIEZsYWdz
IHRoYXQgcHJvYmFibHkgY2FuIGJlIGNvbWJpbmVkIGludG8gZGVzdF9zdGF0ZSAqLworCXVpbnQ4
X3QgZmFzdF9yZXRyYW5faXA7CS8qIGZhc3QgcmV0cmFuc21pdCBpbiBwcm9ncmVzcyAqLworCXVp
bnQ4X3QgaGJfcmVzcG9uZGVkOworCXVpbnQ4X3Qgc2F3X25ld2FjazsJLyogQ01UJ3MgU0ZSIGFs
Z29yaXRobSBmbGFnICovCisJdWludDhfdCBzcmNfYWRkcl9zZWxlY3RlZDsJLyogaWYgd2Ugc3Bs
aXQgd2UgbW92ZSAqLworCXVpbnQ4X3QgaW5keF9vZl9lbGlnaWJsZV9uZXh0X3RvX3VzZTsKKwl1
aW50OF90IGFkZHJfaXNfbG9jYWw7CS8qIGl0cyBhIGxvY2FsIGFkZHJlc3MgKGlmIGtub3duKSBj
b3VsZCBtb3ZlCisJCQkJICogaW4gc3BsaXQgKi8KKworCS8qCisJICogQ01UIHZhcmlhYmxlcyAo
aXllbmdhckBjaXMudWRlbC5lZHUpCisJICovCisJdWludDhfdCBmaW5kX3BzZXVkb19jdW1hY2s7
CS8qIENNVCBDVUMgYWxnb3JpdGhtLiBGbGFnIHVzZWQgdG8KKwkJCQkJICogZmluZCBhIG5ldyBw
c2V1ZG9jdW1hY2suIFRoaXMgZmxhZworCQkJCQkgKiBpcyBzZXQgYWZ0ZXIgYSBuZXcgcHNldWRv
LWN1bWFjaworCQkJCQkgKiBoYXMgYmVlbiByZWNlaXZlZCBhbmQgaW5kaWNhdGVzCisJCQkJCSAq
IHRoYXQgdGhlIHNlbmRlciBzaG91bGQgZmluZCB0aGUKKwkJCQkJICogbmV4dCBwc2V1ZG8tY3Vt
YWNrIGV4cGVjdGVkIGZvcgorCQkJCQkgKiB0aGlzIGRlc3RpbmF0aW9uICovCisJdWludDhfdCBm
aW5kX3J0eF9wc2V1ZG9fY3VtYWNrOwkvKiBDTVQgQ1VDdjIgYWxnb3JpdGhtLiBGbGFnIHVzZWQg
dG8KKwkJCQkJICogZmluZCBhIG5ldyBydHgtcHNldWRvY3VtYWNrLiBUaGlzCisJCQkJCSAqIGZs
YWcgaXMgc2V0IGFmdGVyIGEgbmV3CisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGhhcyBiZWVu
IHJlY2VpdmVkCisJCQkJCSAqIGFuZCBpbmRpY2F0ZXMgdGhhdCB0aGUgc2VuZGVyCisJCQkJCSAq
IHNob3VsZCBmaW5kIHRoZSBuZXh0CisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGV4cGVjdGVk
IGZvciB0aGlzCisJCQkJCSAqIGRlc3RpbmF0aW9uICovCisJdWludDhfdCBuZXdfcHNldWRvX2N1
bWFjazsJLyogQ01UIENVQyBhbGdvcml0aG0uIEZsYWcgdXNlZCB0bworCQkJCQkgKiBpbmRpY2F0
ZSBpZiBhIG5ldyBwc2V1ZG8tY3VtYWNrIG9yCisJCQkJCSAqIHJ0eC1wc2V1ZG8tY3VtYWNrIGhh
cyBiZWVuIHJlY2VpdmVkICovCisJdWludDhfdCB3aW5kb3dfcHJvYmU7CQkvKiBEb2luZyBhIHdp
bmRvdyBwcm9iZT8gKi8KKwl1aW50OF90IFJUT19tZWFzdXJlZDsJCS8qIEhhdmUgd2UgZG9uZSB0
aGUgZmlyc3QgbWVhc3VyZSAqLworCXVpbnQ4X3QgbGFzdF9oc191c2VkOwkvKiBpbmRleCBpbnRv
IHRoZSBsYXN0IEhTIHRhYmxlIGVudHJ5IHdlIHVzZWQgKi8KKwl1aW50OF90IGxhbl90eXBlOwor
CXVpbnQ4X3QgcnRvX25lZWRlZDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXVpbnQzMl90
IGZsb3dpZDsKKwl1aW50OF90IGZsb3d0eXBlOworI2VuZGlmCit9OworCisKK3N0cnVjdCBzY3Rw
X2RhdGFfY2h1bmtyZWMgeworCXVpbnQzMl90IHRzbjsJCS8qIHRoZSBUU04gb2YgdGhpcyB0cmFu
c21pdCAqLworCXVpbnQzMl90IG1pZDsJCS8qIHRoZSBtZXNzYWdlIGlkZW50aWZpZXIgb2YgdGhp
cyB0cmFuc21pdCAqLworCXVpbnQxNl90IHNpZDsJCS8qIHRoZSBzdHJlYW0gbnVtYmVyIG9mIHRo
aXMgZ3V5ICovCisJdWludDMyX3QgcHBpZDsKKwl1aW50MzJfdCBjb250ZXh0OwkvKiBmcm9tIHNl
bmQgKi8KKwl1aW50MzJfdCBjd25kX2F0X3NlbmQ7CisJLyoKKwkgKiBwYXJ0IG9mIHRoZSBIaWdo
ZXN0IHNhY2tlZCBhbGdvcml0aG0gdG8gYmUgYWJsZSB0byBzdHJva2UgY291bnRzCisJICogb24g
b25lcyB0aGF0IGFyZSBGUidkLgorCSAqLworCXVpbnQzMl90IGZhc3RfcmV0cmFuX3RzbjsJLyog
c2VuZGluZ19zZXEgYXQgdGhlIHRpbWUgb2YgRlIgKi8KKwlzdHJ1Y3QgdGltZXZhbCB0aW1ldG9k
cm9wOwkvKiB0aW1lIHdlIGRyb3AgaXQgZnJvbSBxdWV1ZSAqLworCXVpbnQzMl90IGZzbjsJCQkv
KiBGcmFnbWVudCBTZXF1ZW5jZSBOdW1iZXIgKi8KKwl1aW50OF90IGRvaW5nX2Zhc3RfcmV0cmFu
c21pdDsKKwl1aW50OF90IHJjdl9mbGFnczsJLyogZmxhZ3MgcHVsbGVkIGZyb20gZGF0YSBjaHVu
ayBvbiBpbmJvdW5kIGZvcgorCQkJCSAqIG91dGJvdW5kIGhvbGRzIHNlbmRpbmcgZmxhZ3MgZm9y
IFBSLVNDVFAuCisJCQkJICovCisJdWludDhfdCBzdGF0ZV9mbGFnczsKKwl1aW50OF90IGNodW5r
X3dhc19yZXZva2VkOworCXVpbnQ4X3QgZndkX3Rzbl9jbnQ7Cit9OworCitUQUlMUV9IRUFEKHNj
dHBjaHVua19saXN0aGVhZCwgc2N0cF90bWl0X2NodW5rKTsKKworLyogVGhlIGxvd2VyIGJ5dGUg
aXMgdXNlZCB0byBlbnVtZXJhdGUgUFJfU0NUUCBwb2xpY2llcyAqLworI2RlZmluZSBDSFVOS19G
TEFHU19QUl9TQ1RQX1RUTAkgICAgICAgIFNDVFBfUFJfU0NUUF9UVEwKKyNkZWZpbmUgQ0hVTktf
RkxBR1NfUFJfU0NUUF9CVUYJICAgICAgICBTQ1RQX1BSX1NDVFBfQlVGCisjZGVmaW5lIENIVU5L
X0ZMQUdTX1BSX1NDVFBfUlRYICAgICAgICAgU0NUUF9QUl9TQ1RQX1JUWAorCisvKiBUaGUgdXBw
ZXIgYnl0ZSBpcyB1c2VkIGFzIGEgYml0IG1hc2sgKi8KKyNkZWZpbmUgQ0hVTktfRkxBR1NfRlJB
R01FTlRfT0sJICAgICAgICAweDAxMDAKKworc3RydWN0IGNoa19pZCB7CisJdWludDhfdCBpZDsK
Kwl1aW50OF90IGNhbl90YWtlX2RhdGE7Cit9OworCisKK3N0cnVjdCBzY3RwX3RtaXRfY2h1bmsg
eworCXVuaW9uIHsKKwkJc3RydWN0IHNjdHBfZGF0YV9jaHVua3JlYyBkYXRhOworCQlzdHJ1Y3Qg
Y2hrX2lkIGNodW5rX2lkOworCX0gICAgIHJlYzsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAq
YXNvYzsJLyogYnAgdG8gYXNvYyB0aGlzIGJlbG9uZ3MgdG8gKi8KKwlzdHJ1Y3QgdGltZXZhbCBz
ZW50X3Jjdl90aW1lOwkvKiBmaWxsZWQgaW4gaWYgUlRUIGJlaW5nIGNhbGN1bGF0ZWQgKi8KKwlz
dHJ1Y3QgbWJ1ZiAqZGF0YTsJLyogcG9pbnRlciB0byBtYnVmIGNoYWluIG9mIGRhdGEgKi8KKwlz
dHJ1Y3QgbWJ1ZiAqbGFzdF9tYnVmOwkvKiBwb2ludGVyIHRvIGxhc3QgbWJ1ZiBpbiBjaGFpbiAq
LworCXN0cnVjdCBzY3RwX25ldHMgKndob1RvOworCVRBSUxRX0VOVFJZKHNjdHBfdG1pdF9jaHVu
aykgc2N0cF9uZXh0OwkvKiBuZXh0IGxpbmsgKi8KKwlpbnQzMl90IHNlbnQ7CQkvKiB0aGUgc2Vu
ZCBzdGF0dXMgKi8KKwl1aW50MTZfdCBzbmRfY291bnQ7CS8qIG51bWJlciBvZiB0aW1lcyBJIHNl
bnQgKi8KKwl1aW50MTZfdCBmbGFnczsJCS8qIGZsYWdzLCBzdWNoIGFzIEZSQUdNRU5UX09LICov
CisJdWludDE2X3Qgc2VuZF9zaXplOworCXVpbnQxNl90IGJvb2tfc2l6ZTsKKwl1aW50MTZfdCBt
YmNudDsKKwl1aW50MTZfdCBhdXRoX2tleWlkOworCXVpbnQ4X3QgaG9sZHNfa2V5X3JlZjsJLyog
ZmxhZyBpZiBhdXRoIGtleWlkIHJlZmNvdW50IGlzIGhlbGQgKi8KKwl1aW50OF90IHBhZF9pbnBs
YWNlOworCXVpbnQ4X3QgZG9fcnR0OworCXVpbnQ4X3QgYm9va19zaXplX3NjYWxlOworCXVpbnQ4
X3Qgbm9fZnJfYWxsb3dlZDsKKwl1aW50OF90IGNvcHlfYnlfcmVmOworCXVpbnQ4X3Qgd2luZG93
X3Byb2JlOworfTsKKworc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgewkvKiBzaW5mbyBzdHJ1
Y3R1cmUgUGx1c2UgbW9yZSAqLworCXVpbnQxNl90IHNpbmZvX3N0cmVhbTsJLyogb2ZmIHRoZSB3
aXJlICovCisJdWludDE2X3Qgc2luZm9fZmxhZ3M7CS8qIFNDVFBfVU5PUkRFUkVEIGZyb20gd2ly
ZSB1c2UgU0NUUF9FT0YgZm9yCisJCQkJICogRU9SICovCisJdWludDMyX3Qgc2luZm9fcHBpZDsJ
Lyogb2ZmIHRoZSB3aXJlICovCisJdWludDMyX3Qgc2luZm9fY29udGV4dDsJLyogcGljayB0aGlz
IHVwIGZyb20gYXNzb2MgZGVmIGNvbnRleHQ/ICovCisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2
ZTsJLyogbm90IHVzZWQgYnkga2VybmVsICovCisJdWludDMyX3Qgc2luZm9fdHNuOwkvKiBVc2Ug
dGhpcyBpbiByZWFzc2VtYmx5IGFzIGZpcnN0IFRTTiAqLworCXVpbnQzMl90IHNpbmZvX2N1bXRz
bjsJLyogVXNlIHRoaXMgaW4gcmVhc3NlbWJseSBhcyBsYXN0IFRTTiAqLworCXNjdHBfYXNzb2Nf
dCBzaW5mb19hc3NvY19pZDsJLyogb3VyIGFzc29jIGlkICovCisJLyogTm9uIHNpbmZvIHN0dWZm
ICovCisJdWludDMyX3QgbWlkOwkJLyogRnJhZ21lbnQgSW5kZXggKi8KKwl1aW50MzJfdCBsZW5n
dGg7CS8qIGxlbmd0aCBvZiBkYXRhICovCisJdWludDMyX3QgaGVsZF9sZW5ndGg7CS8qIGxlbmd0
aCBoZWxkIGluIHNiICovCisJdWludDMyX3QgdG9wX2ZzbjsJLyogSGlnaGVzdCBGU04gaW4gcXVl
dWUgKi8KKwl1aW50MzJfdCBmc25faW5jbHVkZWQ7ICAvKiBIaWdoZXN0IEZTTiBpbiAqZGF0YSBw
b3J0aW9uICovCisJc3RydWN0IHNjdHBfbmV0cyAqd2hvRnJvbTsJLyogd2hlcmUgaXQgY2FtZSBm
cm9tICovCisJc3RydWN0IG1idWYgKmRhdGE7CS8qIGZyb250IG9mIHRoZSBtYnVmIGNoYWluIG9m
IGRhdGEgd2l0aAorCQkJCSAqIFBLVF9IRFIgKi8KKwlzdHJ1Y3QgbWJ1ZiAqdGFpbF9tYnVmOwkv
KiB1c2VkIGZvciBtdWx0aS1wYXJ0IGRhdGEgKi8KKwlzdHJ1Y3QgbWJ1ZiAqYXV4X2RhdGE7ICAv
KiB1c2VkIHRvIGhvbGQvY2FjaGUgIGNvbnRyb2wgaWYgby9zIGRvZXMgbm90IHRha2UgaXQgZnJv
bSB1cyAqLworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsJLyogYXNzb2MsIHVzZWQgZm9yIHdpbmRv
dyB1cGRhdGUgKi8KKwlUQUlMUV9FTlRSWShzY3RwX3F1ZXVlZF90b19yZWFkKSBuZXh0OworCVRB
SUxRX0VOVFJZKHNjdHBfcXVldWVkX3RvX3JlYWQpIG5leHRfaW5zdHJtOworCXN0cnVjdCBzY3Rw
Y2h1bmtfbGlzdGhlYWQgcmVhc207CisJdWludDE2X3QgcG9ydF9mcm9tOworCXVpbnQxNl90IHNw
ZWNfZmxhZ3M7CS8qIEZsYWdzIHRvIGhvbGQgdGhlIG5vdGlmaWNhdGlvbiBmaWVsZCAqLworCXVp
bnQ4X3QgIGRvX25vdF9yZWZfc3RjYjsKKwl1aW50OF90ICBlbmRfYWRkZWQ7CisJdWludDhfdCAg
cGRhcGlfYWJvcnRlZDsKKwl1aW50OF90ICBwZGFwaV9zdGFydGVkOworCXVpbnQ4X3QgIHNvbWVf
dGFrZW47CisJdWludDhfdCAgbGFzdF9mcmFnX3NlZW47CisJdWludDhfdCAgZmlyc3RfZnJhZ19z
ZWVuOworCXVpbnQ4X3QgIG9uX3JlYWRfcTsKKwl1aW50OF90ICBvbl9zdHJtX3E7Cit9OworCisj
ZGVmaW5lIFNDVFBfT05fT1JERVJFRCAxCisjZGVmaW5lIFNDVFBfT05fVU5PUkRFUkVEIDIKKwor
LyogVGhpcyBkYXRhIHN0cnVjdHVyZSB3aWxsIGJlIG9uIHRoZSBvdXRib3VuZAorICogc3RyZWFt
IHF1ZXVlcy4gRGF0YSB3aWxsIGJlIHB1bGxlZCBvZmYgZnJvbQorICogdGhlIGZyb250IG9mIHRo
ZSBtYnVmIGRhdGEgYW5kIGNodW5rLWlmaWVkCisgKiBieSB0aGUgb3V0cHV0IHJvdXRpbmVzLiBX
ZSB3aWxsIGN1c3RvbQorICogZml0IGV2ZXJ5IGNodW5rIHdlIHB1bGwgdG8gdGhlIHNlbmQvc2Vu
dAorICogcXVldWUgdG8gbWFrZSB1cCB0aGUgbmV4dCBmdWxsIHBhY2tldAorICogaWYgd2UgY2Fu
LiBBbiBlbnRyeSBjYW5ub3QgYmUgcmVtb3ZlZAorICogZnJvbSB0aGUgc3RyZWFtX291dCBxdWV1
ZSB1bnRpbAorICogdGhlIG1zZ19pc19jb21wbGV0ZSBmbGFnIGlzIHNldC4gVGhpcworICogbWVh
bnMgYXQgdGltZXMgZGF0YS90YWlsX21idWYgTUlHSFQKKyAqIGJlIE5VTEwuLiBJZiB0aGF0IG9j
Y3VycyBpdCBoYXBwZW5zCisgKiBmb3Igb25lIG9mIHR3byByZWFzb25zLiBFaXRoZXIgdGhlIHVz
ZXIKKyAqIGlzIGJsb2NrZWQgb24gYSBzZW5kKCkgY2FsbCBhbmQgaGFzIG5vdAorICogYXdva2Vu
IHRvIGNvcHkgbW9yZSBkYXRhIGRvd24uLi4gT1IKKyAqIHRoZSB1c2VyIGlzIGluIHRoZSBleHBs
aWN0IE1TR19FT1IgbW9kZQorICogYW5kIHdyb3RlIHNvbWUgZGF0YSwgYnV0IGhhcyBub3QgY29t
cGxldGVkCisgKiBzZW5kaW5nLgorICovCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVuZGlu
ZyB7CisJc3RydWN0IG1idWYgKmRhdGE7CisJc3RydWN0IG1idWYgKnRhaWxfbWJ1ZjsKKwlzdHJ1
Y3QgdGltZXZhbCB0czsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJVEFJTFFfRU5UUlkgKHNj
dHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpIG5leHQ7CisJVEFJTFFfRU5UUlkgKHNjdHBfc3RyZWFt
X3F1ZXVlX3BlbmRpbmcpIHNzX25leHQ7CisJdWludDMyX3QgZnNuOworCXVpbnQzMl90IGxlbmd0
aDsKKwl1aW50MzJfdCB0aW1ldG9saXZlOworCXVpbnQzMl90IHBwaWQ7CisJdWludDMyX3QgY29u
dGV4dDsKKwl1aW50MTZfdCBzaW5mb19mbGFnczsKKwl1aW50MTZfdCBzaWQ7CisJdWludDE2X3Qg
YWN0X2ZsYWdzOworCXVpbnQxNl90IGF1dGhfa2V5aWQ7CisJdWludDhfdCAgaG9sZHNfa2V5X3Jl
ZjsKKwl1aW50OF90ICBtc2dfaXNfY29tcGxldGU7CisJdWludDhfdCAgc29tZV90YWtlbjsKKwl1
aW50OF90ICBzZW5kZXJfYWxsX2RvbmU7CisJdWludDhfdCAgcHV0X2xhc3Rfb3V0OworCXVpbnQ4
X3QgIGRpc2NhcmRfcmVzdDsKK307CisKKy8qCisgKiB0aGlzIHN0cnVjdCBjb250YWlucyBpbmZv
IHRoYXQgaXMgdXNlZCB0byB0cmFjayBpbmJvdW5kIHN0cmVhbSBkYXRhIGFuZAorICogaGVscCB3
aXRoIG9yZGVyaW5nLgorICovCitUQUlMUV9IRUFEKHNjdHB3aGVlbHVucmVsX2xpc3RoZWFkLCBz
Y3RwX3N0cmVhbV9pbik7CitzdHJ1Y3Qgc2N0cF9zdHJlYW1faW4geworCXN0cnVjdCBzY3RwX3Jl
YWRoZWFkIGlucXVldWU7CisJc3RydWN0IHNjdHBfcmVhZGhlYWQgdW5vX2lucXVldWU7CisJdWlu
dDMyX3QgbGFzdF9taWRfZGVsaXZlcmVkOwkvKiB1c2VkIGZvciByZS1vcmRlciAqLworCXVpbnQx
Nl90IHNpZDsKKwl1aW50OF90ICBkZWxpdmVyeV9zdGFydGVkOworCXVpbnQ4X3QgIHBkX2FwaV9z
dGFydGVkOworfTsKKworVEFJTFFfSEVBRChzY3Rwd2hlZWxfbGlzdGhlYWQsIHNjdHBfc3RyZWFt
X291dCk7CitUQUlMUV9IRUFEKHNjdHBsaXN0X2xpc3RoZWFkLCBzY3RwX3N0cmVhbV9xdWV1ZV9w
ZW5kaW5nKTsKKworCisvKiBSb3VuZC1yb2JpbiBzY2hlZHVsZXJzICovCitzdHJ1Y3Qgc3NfcnIg
eworCS8qIG5leHQgbGluayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3RyZWFtX291
dCkgbmV4dF9zcG9rZTsKK307CisKKy8qIFByaW9yaXR5IHNjaGVkdWxlciAqLworc3RydWN0IHNz
X3ByaW8geworCS8qIG5leHQgbGluayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3Ry
ZWFtX291dCkgbmV4dF9zcG9rZTsKKwkvKiBwcmlvcml0eSBpZCAqLworCXVpbnQxNl90IHByaW9y
aXR5OworfTsKKworLyogRmFpciBCYW5kd2lkdGggc2NoZWR1bGVyICovCitzdHJ1Y3Qgc3NfZmIg
eworCS8qIG5leHQgbGluayBpbiB3aGVlbCAqLworCVRBSUxRX0VOVFJZKHNjdHBfc3RyZWFtX291
dCkgbmV4dF9zcG9rZTsKKwkvKiBzdG9yZXMgbWVzc2FnZSBzaXplICovCisJaW50MzJfdCByb3Vu
ZHM7Cit9OworCisvKgorICogVGhpcyB1bmlvbiBob2xkcyBhbGwgZGF0YSBuZWNlc3NhcnkgZm9y
CisgKiBkaWZmZXJlbnQgc3RyZWFtIHNjaGVkdWxlcnMuCisgKi8KK3N0cnVjdCBzY2hlZHVsaW5n
X2RhdGEgeworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKmxvY2tlZF9vbl9zZW5kaW5nOworCS8q
IGNpcmN1bGFyIGxvb2tpbmcgZm9yIG91dHB1dCBzZWxlY3Rpb24gKi8KKwlzdHJ1Y3Qgc2N0cF9z
dHJlYW1fb3V0ICpsYXN0X291dF9zdHJlYW07CisJdW5pb24geworCQlzdHJ1Y3Qgc2N0cHdoZWVs
X2xpc3RoZWFkIHdoZWVsOworCQlzdHJ1Y3Qgc2N0cGxpc3RfbGlzdGhlYWQgbGlzdDsKKwl9IG91
dDsKK307CisKKy8qCisgKiBUaGlzIHVuaW9uIGhvbGRzIGFsbCBwYXJhbWV0ZXJzIHBlciBzdHJl
YW0KKyAqIG5lY2Vzc2FyeSBmb3IgZGlmZmVyZW50IHN0cmVhbSBzY2hlZHVsZXJzLgorICovCit1
bmlvbiBzY2hlZHVsaW5nX3BhcmFtZXRlcnMgeworCXN0cnVjdCBzc19yciBycjsKKwlzdHJ1Y3Qg
c3NfcHJpbyBwcmlvOworCXN0cnVjdCBzc19mYiBmYjsKK307CisKKy8qIFN0YXRlcyBmb3Igb3V0
Z29pbmcgc3RyZWFtcyAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9DTE9TRUQgICAgICAgICAgIDB4
MDAKKyNkZWZpbmUgU0NUUF9TVFJFQU1fT1BFTklORyAgICAgICAgICAweDAxCisjZGVmaW5lIFND
VFBfU1RSRUFNX09QRU4gICAgICAgICAgICAgMHgwMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNF
VF9QRU5ESU5HICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfSU5fRkxJR0hUICAw
eDA0CisKKyNkZWZpbmUgU0NUUF9NQVhfU1RSRUFNU19BVF9PTkNFX1JFU0VUIDIwMAorCisvKiBU
aGlzIHN0cnVjdCBpcyB1c2VkIHRvIHRyYWNrIHRoZSB0cmFmZmljIG9uIG91dGJvdW5kIHN0cmVh
bXMgKi8KK3N0cnVjdCBzY3RwX3N0cmVhbV9vdXQgeworCXN0cnVjdCBzY3RwX3N0cmVhbWhlYWQg
b3V0cXVldWU7CisJdW5pb24gc2NoZWR1bGluZ19wYXJhbWV0ZXJzIHNzX3BhcmFtczsKKwl1aW50
MzJfdCBjaHVua3Nfb25fcXVldWVzOyAgICAgIC8qIHNlbmQgcXVldWUgYW5kIHNlbnQgcXVldWUg
Ki8KKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCXVpbnQzMl90IGFiYW5k
b25lZF91bnNlbnRbU0NUUF9QUl9TQ1RQX01BWCArIDFdOworCXVpbnQzMl90IGFiYW5kb25lZF9z
ZW50W1NDVFBfUFJfU0NUUF9NQVggKyAxXTsKKyNlbHNlCisJLyogT25seSB0aGUgYWdncmVnYXRp
b24gKi8KKwl1aW50MzJfdCBhYmFuZG9uZWRfdW5zZW50WzFdOworCXVpbnQzMl90IGFiYW5kb25l
ZF9zZW50WzFdOworI2VuZGlmCisJLyogRm9yIGFzc29jaWF0aW9ucyB1c2luZyBEQVRBIGNodW5r
cywgdGhlIGxvd2VyIDE2LWJpdCBvZgorCSAqIG5leHRfbWlkX29yZGVyZWQgYXJlIHVzZWQgYXMg
dGhlIG5leHQgU1NOLgorCSAqLworCXVpbnQzMl90IG5leHRfbWlkX29yZGVyZWQ7CisJdWludDMy
X3QgbmV4dF9taWRfdW5vcmRlcmVkOworCXVpbnQxNl90IHNpZDsKKwl1aW50OF90IGxhc3RfbXNn
X2luY29tcGxldGU7CisJdWludDhfdCBzdGF0ZTsKK307CisKKy8qIHVzZWQgdG8ga2VlcCB0cmFj
ayBvZiB0aGUgYWRkcmVzc2VzIHlldCB0byB0cnkgdG8gYWRkL2RlbGV0ZSAqLworVEFJTFFfSEVB
RChzY3RwX2FzY29uZl9hZGRyaGVhZCwgc2N0cF9hc2NvbmZfYWRkcik7CitzdHJ1Y3Qgc2N0cF9h
c2NvbmZfYWRkciB7CisJVEFJTFFfRU5UUlkoc2N0cF9hc2NvbmZfYWRkcikgbmV4dDsKKwlzdHJ1
Y3Qgc2N0cF9hc2NvbmZfYWRkcl9wYXJhbSBhcDsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsJLyog
c2F2ZSB0aGUgaWZhIGZvciBhZGQvZGVsIGlwICovCisJdWludDhfdCBzZW50OwkJLyogaGFzIHRo
aXMgYmVlbiBzZW50IHlldD8gKi8KKwl1aW50OF90IHNwZWNpYWxfZGVsOwkvKiBub3QgdG8gYmUg
dXNlZCBpbiBsb29rdXAgKi8KK307CisKK3N0cnVjdCBzY3RwX3Njb3BpbmcgeworCXVpbnQ4X3Qg
aXB2NF9hZGRyX2xlZ2FsOworCXVpbnQ4X3QgaXB2Nl9hZGRyX2xlZ2FsOworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKwl1aW50OF90IGNvbm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXVpbnQ4
X3QgbG9vcGJhY2tfc2NvcGU7CisJdWludDhfdCBpcHY0X2xvY2FsX3Njb3BlOworCXVpbnQ4X3Qg
bG9jYWxfc2NvcGU7CisJdWludDhfdCBzaXRlX3Njb3BlOworfTsKKworI2RlZmluZSBTQ1RQX1RT
Tl9MT0dfU0laRSA0MAorCitzdHJ1Y3Qgc2N0cF90c25fbG9nIHsKKwl2b2lkICAgICAqc3RjYjsK
Kwl1aW50MzJfdCB0c247CisJdWludDMyX3Qgc2VxOworCXVpbnQxNl90IHN0cm07CisJdWludDE2
X3Qgc3o7CisJdWludDE2X3QgZmxnczsKKwl1aW50MTZfdCBpbl9wb3M7CisJdWludDE2X3QgaW5f
b3V0OworCXVpbnQxNl90IHJlc3Y7Cit9OworCisjZGVmaW5lIFNDVFBfRlNfU1BFQ19MT0dfU0la
RSAyMDAKK3N0cnVjdCBzY3RwX2ZzX3NwZWNfbG9nIHsKKwl1aW50MzJfdCBzZW50OworCXVpbnQz
Ml90IHRvdGFsX2ZsaWdodDsKKwl1aW50MzJfdCB0c247CisJdWludDE2X3QgYm9vazsKKwl1aW50
OF90IGluY3I7CisJdWludDhfdCBkZWNyOworfTsKKworLyogVGhpcyBzdHJ1Y3QgaXMgaGVyZSB0
byBjdXQgb3V0IHRoZSBjb21wYXRpYWJpbHR5CisgKiBwYWQgdGhhdCBidWxrcyB1cCBib3RoIHRo
ZSBpbnAgYW5kIHN0Y2IuIFRoZSBub24KKyAqIHBhZCBwb3J0aW9uIE1VU1Qgc3RheSBpbiBjb21w
bGV0ZSBzeW5jIHdpdGgKKyAqIHNjdHBfc25kcmN2aW5mby4uLiBpLmUuIGlmIHNpbmZvX3h4eHgg
aXMgYWRkZWQKKyAqIHRoaXMgbXVzdCBiZSBkb25lIGhlcmUgdG9vLgorICovCitzdHJ1Y3Qgc2N0
cF9ub25wYWRfc25kcmN2aW5mbyB7CisJdWludDE2X3Qgc2luZm9fc3RyZWFtOworCXVpbnQxNl90
IHNpbmZvX3NzbjsKKwl1aW50MTZfdCBzaW5mb19mbGFnczsKKwl1aW50MzJfdCBzaW5mb19wcGlk
OworCXVpbnQzMl90IHNpbmZvX2NvbnRleHQ7CisJdWludDMyX3Qgc2luZm9fdGltZXRvbGl2ZTsK
Kwl1aW50MzJfdCBzaW5mb190c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNz
b2NfdCBzaW5mb19hc3NvY19pZDsKKwl1aW50MTZfdCBzaW5mb19rZXludW1iZXI7CisJdWludDE2
X3Qgc2luZm9fa2V5bnVtYmVyX3ZhbGlkOworfTsKKworLyoKKyAqIEpSUyAtIFN0cnVjdHVyZSB0
byBob2xkIGZ1bmN0aW9uIHBvaW50ZXJzIHRvIHRoZSBmdW5jdGlvbnMgcmVzcG9uc2libGUKKyAq
IGZvciBjb25nZXN0aW9uIGNvbnRyb2wuCisgKi8KKworc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25z
IHsKKwl2b2lkICgqc2N0cF9zZXRfaW5pdGlhbF9jY19wYXJhbSkoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3RwX2N3bmRfdXBkYXRlX2Fm
dGVyX3NhY2spKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWNjdW1fbW92ZWQgLGludCByZW5lZ2VkX2Fs
bCwgaW50IHdpbGxfZXhpdCk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfZXhpdF9wZikoc3Ry
dWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZvaWQgKCpzY3Rw
X2N3bmRfdXBkYXRlX2FmdGVyX2ZyKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qg
c2N0cF9hc3NvY2lhdGlvbiAqYXNvYyk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJf
dGltZW91dCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0
KTsKKwl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9lY25fZWNobykoc3RydWN0IHNjdHBf
dGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBpbnQgaW5fd2luZG93LCBpbnQg
bnVtX3BrdF9sb3N0KTsKKwl2b2lkICgqc2N0cF9jd25kX3VwZGF0ZV9hZnRlcl9wYWNrZXRfZHJv
cHBlZCkoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBz
dHJ1Y3Qgc2N0cF9wa3Rkcm9wX2NodW5rICpjcCwKKwkJCXVpbnQzMl90ICpib3R0bGVfYncsIHVp
bnQzMl90ICpvbl9xdWV1ZSk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfYWZ0ZXJfb3V0cHV0
KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBi
dXJzdF9saW1pdCk7CisJdm9pZCAoKnNjdHBfY3duZF91cGRhdGVfcGFja2V0X3RyYW5zbWl0dGVk
KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCXZv
aWQgKCpzY3RwX2N3bmRfdXBkYXRlX3Rzbl9hY2tub3dsZWRnZWQpKHN0cnVjdCBzY3RwX25ldHMg
Km5ldCwKKwkJCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKik7CisJdm9pZCAoKnNjdHBfY3duZF9u
ZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkJc3RydWN0
IHNjdHBfbmV0cyAqbmV0KTsKKwl2b2lkICgqc2N0cF9jd25kX3ByZXBhcmVfbmV0X2Zvcl9zYWNr
KShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpOworCWlu
dCAoKnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBz
ZXQsIHN0cnVjdCBzY3RwX2NjX29wdGlvbiAqKTsKKwl2b2lkICgqc2N0cF9ydHRfY2FsY3VsYXRl
ZCkoc3RydWN0IHNjdHBfdGNiICosIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IHRpbWV2YWwg
Kik7Cit9OworCisvKgorICogUlMgLSBTdHJ1Y3R1cmUgdG8gaG9sZCBmdW5jdGlvbiBwb2ludGVy
cyB0byB0aGUgZnVuY3Rpb25zIHJlc3BvbnNpYmxlCisgKiBmb3Igc3RyZWFtIHNjaGVkdWxpbmcu
CisgKi8KK3N0cnVjdCBzY3RwX3NzX2Z1bmN0aW9ucyB7CisJdm9pZCAoKnNjdHBfc3NfaW5pdCko
c3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywKKwkJ
aW50IGhvbGRzX2xvY2spOworCXZvaWQgKCpzY3RwX3NzX2NsZWFyKShzdHJ1Y3Qgc2N0cF90Y2Ig
KnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlpbnQgY2xlYXJfdmFsdWVz
LCBpbnQgaG9sZHNfbG9jayk7CisJdm9pZCAoKnNjdHBfc3NfaW5pdF9zdHJlYW0pKHN0cnVjdCBz
Y3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqc3RycSwgc3RydWN0IHNjdHBf
c3RyZWFtX291dCAqd2l0aF9zdHJxKTsKKwl2b2lkICgqc2N0cF9zc19hZGRfdG9fc3RyZWFtKShz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlz
dHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVldWVfcGVu
ZGluZyAqc3AsIGludCBob2xkc19sb2NrKTsKKwlpbnQgKCpzY3RwX3NzX2lzX2VtcHR5KShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKKwl2b2lk
ICgqc2N0cF9zc19yZW1vdmVfZnJvbV9zdHJlYW0pKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKnN0
cnEsIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgaW50IGhvbGRzX2xvY2sp
OworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQqICgqc2N0cF9zc19zZWxlY3Rfc3RyZWFtKShzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldCwgc3RydWN0IHNjdHBf
YXNzb2NpYXRpb24gKmFzb2MpOworCXZvaWQgKCpzY3RwX3NzX3NjaGVkdWxlZCkoc3RydWN0IHNj
dHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsCisJCXN0cnVjdCBzY3RwX2Fzc29j
aWF0aW9uICphc29jLCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpzdHJxLCBpbnQgbW92ZWRfaG93
X211Y2gpOworCXZvaWQgKCpzY3RwX3NzX3BhY2tldF9kb25lKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKwkJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFz
b2MpOworCWludCAoKnNjdHBfc3NfZ2V0X3ZhbHVlKShzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fb3V0ICpz
dHJxLCB1aW50MTZfdCAqdmFsdWUpOworCWludCAoKnNjdHBfc3Nfc2V0X3ZhbHVlKShzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLAorCQlzdHJ1Y3Qg
c2N0cF9zdHJlYW1fb3V0ICpzdHJxLCB1aW50MTZfdCB2YWx1ZSk7CisJaW50ICgqc2N0cF9zc19p
c191c2VyX21zZ3NfaW5jb21wbGV0ZSkoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0
cF9hc3NvY2lhdGlvbiAqYXNvYyk7Cit9OworCisvKiB1c2VkIHRvIHNhdmUgQVNDT05GIGNodW5r
cyBmb3IgcmV0cmFuc21pc3Npb24gKi8KK1RBSUxRX0hFQUQoc2N0cF9hc2NvbmZfaGVhZCwgc2N0
cF9hc2NvbmYpOworc3RydWN0IHNjdHBfYXNjb25mIHsKKwlUQUlMUV9FTlRSWShzY3RwX2FzY29u
ZikgbmV4dDsKKwl1aW50MzJfdCBzZXJpYWxfbnVtYmVyOworCXVpbnQxNl90IHNuZF9jb3VudDsK
KwlzdHJ1Y3QgbWJ1ZiAqZGF0YTsKKwl1aW50MTZfdCBsZW47Cit9OworCisvKiB1c2VkIHRvIHNh
dmUgQVNDT05GLUFDSyBjaHVua3MgZm9yIHJldHJhbnNtaXNzaW9uICovCitUQUlMUV9IRUFEKHNj
dHBfYXNjb25mX2Fja2hlYWQsIHNjdHBfYXNjb25mX2Fjayk7CitzdHJ1Y3Qgc2N0cF9hc2NvbmZf
YWNrIHsKKwlUQUlMUV9FTlRSWShzY3RwX2FzY29uZl9hY2spIG5leHQ7CisJdWludDMyX3Qgc2Vy
aWFsX251bWJlcjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpsYXN0X3NlbnRfdG87CisJc3RydWN0IG1i
dWYgKmRhdGE7CisJdWludDE2X3QgbGVuOworfTsKKworLyoKKyAqIEhlcmUgd2UgaGF2ZSBpbmZv
cm1hdGlvbiBhYm91dCBlYWNoIGluZGl2aWR1YWwgYXNzb2NpYXRpb24gdGhhdCB3ZSB0cmFjay4K
KyAqIFdlIHByb2JhYmx5IGluIHByb2R1Y3Rpb24gd291bGQgYmUgbW9yZSBkeW5hbWljLiBCdXQg
Zm9yIGVhc2Ugb2YKKyAqIGltcGxlbWVudGF0aW9uIHdlIHdpbGwgaGF2ZSBhIGZpeGVkIGFycmF5
IHRoYXQgd2UgaHVudCBmb3IgaW4gYSBsaW5lYXIKKyAqIGZhc2hpb24uCisgKi8KK3N0cnVjdCBz
Y3RwX2Fzc29jaWF0aW9uIHsKKwkvKiBhc3NvY2lhdGlvbiBzdGF0ZSAqLworCWludCBzdGF0ZTsK
KworCS8qIHF1ZXVlIG9mIHBlbmRpbmcgYWRkcnMgdG8gYWRkL2RlbGV0ZSAqLworCXN0cnVjdCBz
Y3RwX2FzY29uZl9hZGRyaGVhZCBhc2NvbmZfcXVldWU7CisKKwlzdHJ1Y3QgdGltZXZhbCB0aW1l
X2VudGVyZWQ7CS8qIHRpbWUgd2UgZW50ZXJlZCBzdGF0ZSAqLworCXN0cnVjdCB0aW1ldmFsIHRp
bWVfbGFzdF9yY3ZkOworCXN0cnVjdCB0aW1ldmFsIHRpbWVfbGFzdF9zZW50OworCXN0cnVjdCB0
aW1ldmFsIHRpbWVfbGFzdF9zYXRfYWR2YW5jZTsKKwlzdHJ1Y3Qgc2N0cF9ub25wYWRfc25kcmN2
aW5mbyBkZWZfc2VuZDsKKworCS8qIHRpbWVycyBhbmQgc3VjaCAqLworCXN0cnVjdCBzY3RwX3Rp
bWVyIGRhY2tfdGltZXI7CQkvKiBEZWxheWVkIGFjayB0aW1lciAqLworCXN0cnVjdCBzY3RwX3Rp
bWVyIGFzY29uZl90aW1lcjsJCS8qIGFzY29uZiAqLworCXN0cnVjdCBzY3RwX3RpbWVyIHN0cnJl
c2V0X3RpbWVyOwkvKiBzdHJlYW0gcmVzZXQgKi8KKwlzdHJ1Y3Qgc2N0cF90aW1lciBzaHV0X2d1
YXJkX3RpbWVyOwkvKiBzaHV0ZG93biBndWFyZCAqLworCXN0cnVjdCBzY3RwX3RpbWVyIGF1dG9j
bG9zZV90aW1lcjsJLyogYXV0b21hdGljIGNsb3NlIHRpbWVyICovCisJc3RydWN0IHNjdHBfdGlt
ZXIgZGVsYXllZF9ldmVudF90aW1lcjsJLyogdGltZXIgZm9yIGRlbGF5ZWQgZXZlbnRzICovCisJ
c3RydWN0IHNjdHBfdGltZXIgZGVsZXRlX3ByaW1fdGltZXI7CS8qIGRlbGV0aW5nIHByaW1hcnkg
ZHN0ICovCisKKwkvKiBsaXN0IG9mIHJlc3RyaWN0ZWQgbG9jYWwgYWRkcmVzc2VzICovCisJc3Ry
dWN0IHNjdHBsYWRkciBzY3RwX3Jlc3RyaWN0ZWRfYWRkcnM7CisKKwkvKiBsYXN0IGxvY2FsIGFk
ZHJlc3MgcGVuZGluZyBkZWxldGlvbiAod2FpdGluZyBmb3IgYW4gYWRkcmVzcyBhZGQpICovCisJ
c3RydWN0IHNjdHBfaWZhICphc2NvbmZfYWRkcl9kZWxfcGVuZGluZzsKKwkvKiBEZWxldGVkIHBy
aW1hcnkgZGVzdGluYXRpb24gKHVzZWQgdG8gc3RvcCB0aW1lcikgKi8KKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICpkZWxldGVkX3ByaW1hcnk7CisKKwlzdHJ1Y3Qgc2N0cG5ldGxpc3RoZWFkIG5ldHM7CQkv
KiByZW1vdGUgYWRkcmVzcyBsaXN0ICovCisKKwkvKiBGcmVlIGNodW5rIGxpc3QgKi8KKwlzdHJ1
Y3Qgc2N0cGNodW5rX2xpc3RoZWFkIGZyZWVfY2h1bmtzOworCisJLyogQ29udHJvbCBjaHVuayBx
dWV1ZSAqLworCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgY29udHJvbF9zZW5kX3F1ZXVlOwor
CisJLyogQVNDT05GIGNodW5rIHF1ZXVlICovCisJc3RydWN0IHNjdHBjaHVua19saXN0aGVhZCBh
c2NvbmZfc2VuZF9xdWV1ZTsKKworCS8qCisJICogT25jZSBhIFRTTiBoaXRzIHRoZSB3aXJlIGl0
IGlzIG1vdmVkIHRvIHRoZSBzZW50X3F1ZXVlLiBXZQorCSAqIG1haW50YWluIHR3byBjb3VudHMg
aGVyZSAoZG9uJ3Qga25vdyBpZiBhbnkgYnV0IHJldHJhbl9jbnQgaXMKKwkgKiBuZWVkZWQpLiBU
aGUgaWRlYSBpcyB0aGF0IHRoZSBzZW50X3F1ZXVlX3JldHJhbl9jbnQgcmVmbGVjdHMgaG93CisJ
ICogbWFueSBjaHVua3MgaGF2ZSBiZWVuIG1hcmtlZCBmb3IgcmV0cmFubWlzc2lvbiBieSBlaXRo
ZXIgVDMtcnh0CisJICogb3IgRlIuCisJICovCisJc3RydWN0IHNjdHBjaHVua19saXN0aGVhZCBz
ZW50X3F1ZXVlOworCXN0cnVjdCBzY3RwY2h1bmtfbGlzdGhlYWQgc2VuZF9xdWV1ZTsKKworCS8q
IFNjaGVkdWxpbmcgcXVldWVzICovCisJc3RydWN0IHNjaGVkdWxpbmdfZGF0YSBzc19kYXRhOwor
CisJLyogSWYgYW4gaXRlcmF0b3IgaXMgbG9va2luZyBhdCBtZSwgdGhpcyBpcyBpdCAqLworCXN0
cnVjdCBzY3RwX2l0ZXJhdG9yICpzdGNiX3N0YXJ0aW5nX3BvaW50X2Zvcl9pdGVyYXRvcjsKKwor
CS8qIEFTQ09ORiBzYXZlIHRoZSBsYXN0IEFTQ09ORi1BQ0sgc28gd2UgY2FuIHJlc2VuZCBpdCBp
ZiBuZWNlc3NhcnkgKi8KKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfYWNraGVhZCBhc2NvbmZfYWNrX3Nl
bnQ7CisKKwkvKgorCSAqIHBvaW50ZXIgdG8gbGFzdCBzdHJlYW0gcmVzZXQgcXVldWVkIHRvIGNv
bnRyb2wgcXVldWUgYnkgdXMgd2l0aAorCSAqIHJlcXVlc3RzLgorCSAqLworCXN0cnVjdCBzY3Rw
X3RtaXRfY2h1bmsgKnN0cl9yZXNldDsKKwkvKgorCSAqIGlmIFNvdXJjZSBBZGRyZXNzIFNlbGVj
dGlvbiBoYXBwZW5pbmcsIHRoaXMgd2lsbCByb3RhdGUgdGhyb3VnaAorCSAqIHRoZSBsaW5rIGxp
c3QuCisJICovCisJc3RydWN0IHNjdHBfbGFkZHIgKmxhc3RfdXNlZF9hZGRyZXNzOworCisJLyog
c3RyZWFtIGFycmF5cyAqLworCXN0cnVjdCBzY3RwX3N0cmVhbV9pbiAqc3RybWluOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9vdXQgKnN0cm1vdXQ7CisJdWludDhfdCAqbWFwcGluZ19hcnJheTsKKwkv
KiBwcmltYXJ5IGRlc3RpbmF0aW9uIHRvIHVzZSAqLworCXN0cnVjdCBzY3RwX25ldHMgKnByaW1h
cnlfZGVzdGluYXRpb247CisJc3RydWN0IHNjdHBfbmV0cyAqYWx0ZXJuYXRlOyAvKiBJZiBwcmlt
YXJ5IGlzIGRvd24gb3IgUEYgKi8KKwkvKiBGb3IgQ01UICovCisJc3RydWN0IHNjdHBfbmV0cyAq
bGFzdF9uZXRfY210X3NlbmRfc3RhcnRlZDsKKwkvKiBsYXN0IHBsYWNlIEkgZ290IGEgZGF0YSBj
aHVuayBmcm9tICovCisJc3RydWN0IHNjdHBfbmV0cyAqbGFzdF9kYXRhX2NodW5rX2Zyb207CisJ
LyogbGFzdCBwbGFjZSBJIGdvdCBhIGNvbnRyb2wgZnJvbSAqLworCXN0cnVjdCBzY3RwX25ldHMg
Kmxhc3RfY29udHJvbF9jaHVua19mcm9tOworCisKKwkvKgorCSAqIHdhaXQgdG8gdGhlIHBvaW50
IHRoZSBjdW0tYWNrIHBhc3NlcyByZXEtPnNlbmRfcmVzZXRfYXRfdHNuIGZvcgorCSAqIGFueSBy
ZXEgb24gdGhlIGxpc3QuCisJICovCisJc3RydWN0IHNjdHBfcmVzZXRoZWFkIHJlc2V0SGVhZDsK
KworCS8qIHF1ZXVlIG9mIGNodW5rcyB3YWl0aW5nIHRvIGJlIHNlbnQgaW50byB0aGUgbG9jYWwg
c3RhY2sgKi8KKwlzdHJ1Y3Qgc2N0cF9yZWFkaGVhZCBwZW5kaW5nX3JlcGx5X3F1ZXVlOworCisJ
LyogSlJTIC0gdGhlIGNvbmdlc3Rpb24gY29udHJvbCBmdW5jdGlvbnMgYXJlIGluIHRoaXMgc3Ry
dWN0ICovCisJc3RydWN0IHNjdHBfY2NfZnVuY3Rpb25zIGNjX2Z1bmN0aW9uczsKKwkvKiBKUlMg
LSB2YWx1ZSB0byBzdG9yZSB0aGUgY3VycmVudGx5IGxvYWRlZCBjb25nZXN0aW9uIGNvbnRyb2wg
bW9kdWxlICovCisJdWludDMyX3QgY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZTsKKwkvKiBSUyAt
IHRoZSBzdHJlYW0gc2NoZWR1bGluZyBmdW5jdGlvbnMgYXJlIGluIHRoaXMgc3RydWN0ICovCisJ
c3RydWN0IHNjdHBfc3NfZnVuY3Rpb25zIHNzX2Z1bmN0aW9uczsKKwkvKiBSUyAtIHZhbHVlIHRv
IHN0b3JlIHRoZSBjdXJyZW50bHkgbG9hZGVkIHN0cmVhbSBzY2hlZHVsaW5nIG1vZHVsZSAqLwor
CXVpbnQzMl90IHN0cmVhbV9zY2hlZHVsaW5nX21vZHVsZTsKKworCXVpbnQzMl90IHZyZl9pZDsK
Kwl1aW50MzJfdCBjb29raWVfcHJlc2VydmVfcmVxOworCS8qIEFTQ09ORiBuZXh0IHNlcSBJIGFt
IHNlbmRpbmcgb3V0LCBpbml0cyBhdCBpbml0LXRzbiAqLworCXVpbnQzMl90IGFzY29uZl9zZXFf
b3V0OworCXVpbnQzMl90IGFzY29uZl9zZXFfb3V0X2Fja2VkOworCS8qIEFTQ09ORiBsYXN0IHJl
Y2VpdmVkIEFTQ09ORiBmcm9tIHBlZXIsIHN0YXJ0cyBhdCBwZWVyJ3MgVFNOLTEgKi8KKwl1aW50
MzJfdCBhc2NvbmZfc2VxX2luOworCisJLyogbmV4dCBzZXEgSSBhbSBzZW5kaW5nIGluIHN0ciBy
ZXNldCBtZXNzYWdlcyAqLworCXVpbnQzMl90IHN0cl9yZXNldF9zZXFfb3V0OworCS8qIG5leHQg
c2VxIEkgYW0gZXhwZWN0aW5nIGluIHN0ciByZXNldCBtZXNzYWdlcyAqLworCXVpbnQzMl90IHN0
cl9yZXNldF9zZXFfaW47CisKKwkvKiB2YXJpb3VzIHZlcmlmaWNhdGlvbiB0YWcgaW5mb3JtYXRp
b24gKi8KKwl1aW50MzJfdCBteV92dGFnOwkvKiBUaGUgdGFnIHRvIGJlIHVzZWQuIGlmIGFzc29j
IGlzIHJlLWluaXRpdGVkCisJCQkJICogYnkgcmVtb3RlIGVuZCwgYW5kIEkgaGF2ZSB1bmxvY2tl
ZCB0aGlzCisJCQkJICogd2lsbCBiZSByZWdlbmVyYXRlZCB0byBhIG5ldyByYW5kb20gdmFsdWUu
ICovCisJdWludDMyX3QgcGVlcl92dGFnOwkvKiBUaGUgcGVlcnMgbGFzdCB0YWcgKi8KKworCXVp
bnQzMl90IG15X3Z0YWdfbm9uY2U7CisJdWludDMyX3QgcGVlcl92dGFnX25vbmNlOworCisJdWlu
dDMyX3QgYXNzb2NfaWQ7CisKKwkvKiBUaGlzIGlzIHRoZSBTQ1RQIGZyYWdtZW50YXRpb24gdGhy
ZXNob2xkICovCisJdWludDMyX3Qgc21hbGxlc3RfbXR1OworCisJLyoKKwkgKiBTcGVjaWFsIGhv
b2sgZm9yIEZhc3QgcmV0cmFuc21pdCwgYWxsb3dzIHVzIHRvIHRyYWNrIHRoZSBoaWdoZXN0CisJ
ICogVFNOIHRoYXQgaXMgTkVXIGluIHRoaXMgU0FDSyBpZiBnYXAgYWNrIGJsb2NrcyBhcmUgcHJl
c2VudC4KKwkgKi8KKwl1aW50MzJfdCB0aGlzX3NhY2tfaGlnaGVzdF9nYXA7CisKKwkvKgorCSAq
IFRoZSBoaWdoZXN0IGNvbnNlY3V0aXZlIFRTTiB0aGF0IGhhcyBiZWVuIGFja2VkIGJ5IHBlZXIg
b24gbXkKKwkgKiBzZW5kcworCSAqLworCXVpbnQzMl90IGxhc3RfYWNrZWRfc2VxOworCisJLyog
VGhlIG5leHQgVFNOIHRoYXQgSSB3aWxsIHVzZSBpbiBzZW5kaW5nLiAqLworCXVpbnQzMl90IHNl
bmRpbmdfc2VxOworCisJLyogT3JpZ2luYWwgc2VxIG51bWJlciBJIHVzZWQgPz9xdWVzdGlvbmFi
bGUgdG8ga2VlcD8/ICovCisJdWludDMyX3QgaW5pdF9zZXFfbnVtYmVyOworCisKKwkvKiBUaGUg
QWR2YW5jZWQgUGVlciBBY2sgUG9pbnQsIGFzIHJlcXVpcmVkIGJ5IHRoZSBQUi1TQ1RQICovCisJ
LyogKEExIGluIFNlY3Rpb24gNC4yKSAqLworCXVpbnQzMl90IGFkdmFuY2VkX3BlZXJfYWNrX3Bv
aW50OworCisJLyoKKwkgKiBUaGUgaGlnaGVzdCBjb25zZXF1ZXRpdmUgVFNOIGF0IHRoZSBib3R0
b20gb2YgdGhlIG1hcHBpbmcgYXJyYXkKKwkgKiAoZm9yIGhpcyBzZW5kcykuCisJICovCisJdWlu
dDMyX3QgY3VtdWxhdGl2ZV90c247CisJLyoKKwkgKiBVc2VkIHRvIHRyYWNrIHRoZSBtYXBwaW5n
IGFycmF5IGFuZCBpdHMgb2Zmc2V0IGJpdHMuIFRoaXMgTUFZIGJlCisJICogbG93ZXIgdGhlbiBj
dW11bGF0aXZlX3Rzbi4KKwkgKi8KKwl1aW50MzJfdCBtYXBwaW5nX2FycmF5X2Jhc2VfdHNuOwor
CS8qCisJICogdXNlZCB0byB0cmFjayBoaWdoZXN0IFRTTiB3ZSBoYXZlIHJlY2VpdmVkIGFuZCBp
cyBsaXN0ZWQgaW4gdGhlCisJICogbWFwcGluZyBhcnJheS4KKwkgKi8KKwl1aW50MzJfdCBoaWdo
ZXN0X3Rzbl9pbnNpZGVfbWFwOworCisJLyogRVkgLSBuZXcgTlIgdmFyaWFibGVzIHVzZWQgZm9y
IG5yX3NhY2sgYmFzZWQgb24gbWFwcGluZ19hcnJheSovCisJdWludDhfdCAqbnJfbWFwcGluZ19h
cnJheTsKKwl1aW50MzJfdCBoaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwOworCisJdWludDMyX3Qg
ZmFzdF9yZWNvdmVyeV90c247CisJdWludDMyX3Qgc2F0X3QzX3JlY292ZXJ5X3RzbjsKKwl1aW50
MzJfdCB0c25fbGFzdF9kZWxpdmVyZWQ7CisJLyoKKwkgKiBGb3IgdGhlIHBkLWFwaSB3ZSBzaG91
bGQgcmUtd3JpdGUgdGhpcyBhIGJpdCBtb3JlIGVmZmljaWVudC4gV2UKKwkgKiBjb3VsZCBoYXZl
IG11bHRpcGxlIHNjdHBfcXVldWVkX3RvX3JlYWQncyB0aGF0IHdlIGFyZSBidWlsZGluZyBhdAor
CSAqIG9uY2UuIE5vdyB3ZSBvbmx5IGRvIHRoaXMgd2hlbiB3ZSBnZXQgcmVhZHkgdG8gZGVsaXZl
ciB0byB0aGUKKwkgKiBzb2NrZXQgYnVmZmVyLiBOb3RlIHRoYXQgd2UgZGVwZW5kIG9uIHRoZSBm
YWN0IHRoYXQgdGhlIHN0cnVjdCBpcworCSAqICJzdHVjayIgb24gdGhlIHJlYWQgcXVldWUgdW50
aWwgd2UgZmluaXNoIGFsbCB0aGUgcGQtYXBpLgorCSAqLworCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sX3BkYXBpOworCisJdWludDMyX3QgdHNuX29mX3BkYXBpX2xhc3RfZGVs
aXZlcmVkOworCXVpbnQzMl90IHBkYXBpX3BwaWQ7CisJdWludDMyX3QgY29udGV4dDsKKwl1aW50
MzJfdCBsYXN0X3Jlc2V0X2FjdGlvbltTQ1RQX01BWF9SRVNFVF9QQVJBTVNdOworCXVpbnQzMl90
IGxhc3Rfc2VuZGluZ19zZXFbU0NUUF9NQVhfUkVTRVRfUEFSQU1TXTsKKwl1aW50MzJfdCBsYXN0
X2Jhc2VfdHNuc2VudFtTQ1RQX01BWF9SRVNFVF9QQVJBTVNdOworI2lmZGVmIFNDVFBfQVNPQ0xP
R19PRl9UU05TCisJLyoKKwkgKiBzcGVjaWFsIGxvZyAgLSBUaGlzIGFkZHMgY29uc2lkZXJhYmxl
IHNpemUKKwkgKiB0byB0aGUgYXNvYywgYnV0IHByb3ZpZGVzIGEgbG9nIHRoYXQgeW91CisJICog
Y2FuIHVzZSB0byBkZXRlY3QgcHJvYmxlbXMgdmlhIGtnZGIuCisJICovCisJc3RydWN0IHNjdHBf
dHNuX2xvZyAgaW5fdHNubG9nW1NDVFBfVFNOX0xPR19TSVpFXTsKKwlzdHJ1Y3Qgc2N0cF90c25f
bG9nICBvdXRfdHNubG9nW1NDVFBfVFNOX0xPR19TSVpFXTsKKwl1aW50MzJfdCBjdW1hY2tfbG9n
W1NDVFBfVFNOX0xPR19TSVpFXTsKKwl1aW50MzJfdCBjdW1hY2tfbG9nc250W1NDVFBfVFNOX0xP
R19TSVpFXTsKKwl1aW50MTZfdCB0c25faW5fYXQ7CisJdWludDE2X3QgdHNuX291dF9hdDsKKwl1
aW50MTZfdCB0c25faW5fd3JhcHBlZDsKKwl1aW50MTZfdCB0c25fb3V0X3dyYXBwZWQ7CisJdWlu
dDE2X3QgY3VtYWNrX2xvZ19hdDsKKwl1aW50MTZfdCBjdW1hY2tfbG9nX2F0c250OworI2VuZGlm
IC8qIFNDVFBfQVNPQ0xPR19PRl9UU05TICovCisjaWZkZWYgU0NUUF9GU19TUEVDX0xPRworCXN0
cnVjdCBzY3RwX2ZzX3NwZWNfbG9nIGZzbG9nW1NDVFBfRlNfU1BFQ19MT0dfU0laRV07CisJdWlu
dDE2X3QgZnNfaW5kZXg7CisjZW5kaWYKKworCS8qCisJICogd2luZG93IHN0YXRlIGluZm9ybWF0
aW9uIGFuZCBzbWFsbGVzdCBNVFUgdGhhdCBJIHVzZSB0byBib3VuZAorCSAqIHNlZ21lbnRhdGlv
bgorCSAqLworCXVpbnQzMl90IHBlZXJzX3J3bmQ7CisJdWludDMyX3QgbXlfcnduZDsKKwl1aW50
MzJfdCBteV9sYXN0X3JlcG9ydGVkX3J3bmQ7CisJdWludDMyX3Qgc2N0cF9mcmFnX3BvaW50Owor
CisJdWludDMyX3QgdG90YWxfb3V0cHV0X3F1ZXVlX3NpemU7CisKKwl1aW50MzJfdCBzYl9jYzsJ
CSAgICAgICAvKiBzaGFkb3cgb2Ygc2JfY2MgKi8KKwl1aW50MzJfdCBzYl9zZW5kX3Jlc3Y7ICAg
ICAvKiBhbW91bnQgcmVzZXJ2ZWQgb24gYSBzZW5kICovCisJdWludDMyX3QgbXlfcnduZF9jb250
cm9sX2xlbjsgLyogc2hhZG93IG9mIHNiX21iY250IHVzZWQgZm9yIHJ3bmQgY29udHJvbCAqLwor
I2lmZGVmIElORVQ2CisJdWludDMyX3QgZGVmYXVsdF9mbG93bGFiZWw7CisjZW5kaWYKKwl1aW50
MzJfdCBwcl9zY3RwX2NudDsKKwlpbnQgY3RybF9xdWV1ZV9jbnQ7CS8qIGNvdWxkIGJlIHJlbW92
ZWQgIFJFTSAtIE5PIElUIENBTidUISEgUlJTICovCisJLyoKKwkgKiBBbGwgb3V0Ym91bmQgZGF0
YWdyYW1zIHF1ZXVlIGludG8gdGhpcyBsaXN0IGZyb20gdGhlIGluZGl2aWR1YWwKKwkgKiBzdHJl
YW0gcXVldWUuIEhlcmUgdGhleSBnZXQgYXNzaWduZWQgYSBUU04gYW5kIHRoZW4gYXdhaXQKKwkg
KiBzZW5kaW5nLiBUaGUgc3RyZWFtIHNlcSBjb21lcyB3aGVuIGl0IGlzIGZpcnN0IHB1dCBpbiB0
aGUKKwkgKiBpbmRpdmlkdWFsIHN0ciBxdWV1ZQorCSAqLworCXVuc2lnbmVkIGludCBzdHJlYW1f
cXVldWVfY250OworCXVuc2lnbmVkIGludCBzZW5kX3F1ZXVlX2NudDsKKwl1bnNpZ25lZCBpbnQg
c2VudF9xdWV1ZV9jbnQ7CisJdW5zaWduZWQgaW50IHNlbnRfcXVldWVfY250X3JlbW92ZWFibGU7
CisJLyoKKwkgKiBOdW1iZXIgb24gc2VudCBxdWV1ZSB0aGF0IGFyZSBtYXJrZWQgZm9yIHJldHJh
biB1bnRpbCB0aGlzIHZhbHVlCisJICogaXMgMCB3ZSBvbmx5IHNlbmQgb25lIHBhY2tldCBvZiBy
ZXRyYW4nZWQgZGF0YS4KKwkgKi8KKwl1bnNpZ25lZCBpbnQgc2VudF9xdWV1ZV9yZXRyYW5fY250
OworCisJdW5zaWduZWQgaW50IHNpemVfb25fcmVhc21fcXVldWU7CisJdW5zaWduZWQgaW50IGNu
dF9vbl9yZWFzbV9xdWV1ZTsKKwl1bnNpZ25lZCBpbnQgZndkX3Rzbl9jbnQ7CisJLyogYW1vdW50
IG9mIGRhdGEgKGJ5dGVzKSBjdXJyZW50bHkgaW4gZmxpZ2h0IChvbiBhbGwgZGVzdGluYXRpb25z
KSAqLworCXVuc2lnbmVkIGludCB0b3RhbF9mbGlnaHQ7CisJLyogVG90YWwgYm9vayBzaXplIGlu
IGZsaWdodCAqLworCXVuc2lnbmVkIGludCB0b3RhbF9mbGlnaHRfY291bnQ7CS8qIGNvdW50IG9m
IGNodW5rcyB1c2VkIHdpdGgKKwkJCQkJCSAqIGJvb2sgdG90YWwgKi8KKwkvKiBjb3VudCBvZiBk
ZXN0aW5hdG9uIG5ldHMgYW5kIGxpc3Qgb2YgZGVzdGluYXRpb24gbmV0cyAqLworCXVuc2lnbmVk
IGludCBudW1uZXRzOworCisJLyogVG90YWwgZXJyb3IgY291bnQgb24gdGhpcyBhc3NvY2lhdGlv
biAqLworCXVuc2lnbmVkIGludCBvdmVyYWxsX2Vycm9yX2NvdW50OworCisJdW5zaWduZWQgaW50
IGNudF9tc2dfb25fc2I7CisKKwkvKiBBbGwgc3RyZWFtIGNvdW50IG9mIGNodW5rcyBmb3IgZGVs
aXZlcnkgKi8KKwl1bnNpZ25lZCBpbnQgc2l6ZV9vbl9hbGxfc3RyZWFtczsKKwl1bnNpZ25lZCBp
bnQgY250X29uX2FsbF9zdHJlYW1zOworCisJLyogSGVhcnQgQmVhdCBkZWxheSBpbiBtcyAqLwor
CXVpbnQzMl90IGhlYXJ0X2JlYXRfZGVsYXk7CisKKwkvKiBhdXRvY2xvc2UgKi8KKwl1bnNpZ25l
ZCBpbnQgc2N0cF9hdXRvY2xvc2VfdGlja3M7CisKKwkvKiBob3cgbWFueSBwcmVvcGVuIHN0cmVh
bXMgd2UgaGF2ZSAqLworCXVuc2lnbmVkIGludCBwcmVfb3Blbl9zdHJlYW1zOworCisJLyogSG93
IG1hbnkgc3RyZWFtcyBJIHN1cHBvcnQgY29taW5nIGludG8gbWUgKi8KKwl1bnNpZ25lZCBpbnQg
bWF4X2luYm91bmRfc3RyZWFtczsKKworCS8qIHRoZSBjb29raWUgbGlmZSBJIGF3YXJkIGZvciBh
bnkgY29va2llLCBpbiBzZWNvbmRzICovCisJdW5zaWduZWQgaW50IGNvb2tpZV9saWZlOworCS8q
IHRpbWUgdG8gZGVsYXkgYWNrcyBmb3IgKi8KKwl1bnNpZ25lZCBpbnQgZGVsYXllZF9hY2s7CisJ
dW5zaWduZWQgaW50IG9sZF9kZWxheWVkX2FjazsKKwl1bnNpZ25lZCBpbnQgc2Fja19mcmVxOwor
CXVuc2lnbmVkIGludCBkYXRhX3BrdHNfc2VlbjsKKworCXVuc2lnbmVkIGludCBudW1kdXB0c25z
OworCWludCBkdXBfdHNuc1tTQ1RQX01BWF9EVVBfVFNOU107CisJdW5zaWduZWQgaW50IGluaXRp
YWxfaW5pdF9ydG9fbWF4OwkvKiBpbml0aWFsIFJUTyBmb3IgSU5JVCdzICovCisJdW5zaWduZWQg
aW50IGluaXRpYWxfcnRvOwkvKiBpbml0aWFsIHNlbmQgUlRPICovCisJdW5zaWduZWQgaW50IG1p
bnJ0bzsJLyogcGVyIGFzc29jIFJUTy1NSU4gKi8KKwl1bnNpZ25lZCBpbnQgbWF4cnRvOwkvKiBw
ZXIgYXNzb2MgUlRPLU1BWCAqLworCisJLyogYXV0aGVudGljYXRpb24gZmllbGRzICovCisJc2N0
cF9hdXRoX2Noa2xpc3RfdCAqbG9jYWxfYXV0aF9jaHVua3M7CisJc2N0cF9hdXRoX2Noa2xpc3Rf
dCAqcGVlcl9hdXRoX2NodW5rczsKKwlzY3RwX2htYWNsaXN0X3QgKmxvY2FsX2htYWNzOwkvKiBs
b2NhbCBITUFDcyBzdXBwb3J0ZWQgKi8KKwlzY3RwX2htYWNsaXN0X3QgKnBlZXJfaG1hY3M7CS8q
IHBlZXIgSE1BQ3Mgc3VwcG9ydGVkICovCisJc3RydWN0IHNjdHBfa2V5aGVhZCBzaGFyZWRfa2V5
czsJLyogYXNzb2MncyBzaGFyZWQga2V5cyAqLworCXNjdHBfYXV0aGluZm9fdCBhdXRoaW5mbzsJ
LyogcmFuZG9tcywgY2FjaGVkIGtleXMgKi8KKwkvKgorCSAqIHJlZmNudCB0byBibG9jayBmcmVl
aW5nIHdoZW4gYSBzZW5kZXIgb3IgcmVjZWl2ZXIgaXMgb2ZmIGNvcGluZworCSAqIHVzZXIgZGF0
YSBpbi4KKwkgKi8KKwl1aW50MzJfdCByZWZjbnQ7CisJdWludDMyX3QgY2h1bmtzX29uX291dF9x
dWV1ZTsJLyogdG90YWwgY2h1bmtzIGZsb2F0aW5nIGFyb3VuZCwKKwkJCQkJICogbG9ja2VkIGJ5
IHNlbmQgc29ja2V0IGJ1ZmZlciAqLworCXVpbnQzMl90IHBlZXJzX2FkYXB0YXRpb247CisJdWlu
dDMyX3QgZGVmYXVsdF9tdHU7CisJdWludDE2X3QgcGVlcl9obWFjX2lkOwkvKiBwZWVyIEhNQUMg
aWQgdG8gc2VuZCAqLworCisJLyoKKwkgKiBCZWluZyB0aGF0IHdlIGhhdmUgbm8gYmFnIHRvIGNv
bGxlY3Qgc3RhbGUgY29va2llcywgYW5kIHRoYXQgd2UKKwkgKiByZWFsbHkgd291bGQgbm90IHdh
bnQgdG8gYW55d2F5Li4gd2Ugd2lsbCBjb3VudCB0aGVtIGluIHRoaXMKKwkgKiBjb3VudGVyLiBX
ZSBvZiBjb3Vyc2UgZmVlZCB0aGVtIHRvIHRoZSBwaWdlb25zIHJpZ2h0IGF3YXkgKEkgaGF2ZQor
CSAqIGFsd2F5cyB0aG91Z2h0IG9mIHBpZ2VvbnMgYXMgZmx5aW5nIHJhdHMpLgorCSAqLworCXVp
bnQxNl90IHN0YWxlX2Nvb2tpZV9jb3VudDsKKworCS8qCisJICogRm9yIHRoZSBwYXJ0aWFsIGRl
bGl2ZXJ5IEFQSSwgaWYgdXAsIGludm9rZWQgdGhpcyBpcyB3aGF0IGxhc3QKKwkgKiBUU04gSSBk
ZWxpdmVyZWQKKwkgKi8KKwl1aW50MTZfdCBzdHJfb2ZfcGRhcGk7CisJdWludDE2X3Qgc3NuX29m
X3BkYXBpOworCisJLyogY291bnRzIG9mIGFjdHVhbCBidWlsdCBzdHJlYW1zLiBBbGxvY2F0aW9u
IG1heSBiZSBtb3JlIGhvd2V2ZXIgKi8KKwkvKiBjb3VsZCByZS1hcnJhbmdlIHRvIG9wdGltaXpl
IHNwYWNlIGhlcmUuICovCisJdWludDE2X3Qgc3RyZWFtaW5jbnQ7CisJdWludDE2X3Qgc3RyZWFt
b3V0Y250OworCXVpbnQxNl90IHN0cm1fcmVhbG91dHNpemU7CisJdWludDE2X3Qgc3RybV9wZW5k
aW5nX2FkZF9zaXplOworCS8qIG15IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnMgb2YgSU5JVCBh
bmQgU0VORCAqLworCS8qIGNvcGllZCBmcm9tIFNDVFAgYnV0IHNob3VsZCBiZSBpbmRpdmlkdWFs
bHkgc2V0YWJsZSAqLworCXVpbnQxNl90IG1heF9pbml0X3RpbWVzOworCXVpbnQxNl90IG1heF9z
ZW5kX3RpbWVzOworCisJdWludDE2X3QgZGVmX25ldF9mYWlsdXJlOworCisJdWludDE2X3QgZGVm
X25ldF9wZl90aHJlc2hvbGQ7CisKKwkvKgorCSAqIGxvY2sgZmxhZzogMCBpcyBvayB0byBzZW5k
LCAxKyAoZHVhbHMgYXMgYSByZXRyYW4gY291bnQpIGlzCisJICogYXdhaXRpbmcgQUNLCisJICov
CisJdWludDE2X3QgbWFwcGluZ19hcnJheV9zaXplOworCisJdWludDE2X3QgbGFzdF9zdHJtX3Nl
cV9kZWxpdmVyZWQ7CisJdWludDE2X3QgbGFzdF9zdHJtX25vX2RlbGl2ZXJlZDsKKworCXVpbnQx
Nl90IGxhc3RfcmV2b2tlX2NvdW50OworCWludDE2X3QgbnVtX3NlbmRfdGltZXJzX3VwOworCisJ
dWludDE2X3Qgc3RyZWFtX2xvY2tlZF9vbjsKKwl1aW50MTZfdCBlY25fZWNob19jbnRfb25xOwor
CisJdWludDE2X3QgZnJlZV9jaHVua19jbnQ7CisJdWludDhfdCBzdHJlYW1fbG9ja2VkOworCXVp
bnQ4X3QgYXV0aGVudGljYXRlZDsJLyogcGFja2V0IGF1dGhlbnRpY2F0ZWQgb2sgKi8KKwkvKgor
CSAqIFRoaXMgZmxhZyBpbmRpY2F0ZXMgdGhhdCBhIFNBQ0sgbmVlZCB0byBiZSBzZW50LgorCSAq
IEluaXRpYWxseSB0aGlzIGlzIDEgdG8gc2VuZCB0aGUgZmlyc3Qgc0FDSyBpbW1lZGlhdGVseS4K
KwkgKi8KKwl1aW50OF90IHNlbmRfc2FjazsKKworCS8qIG1heCBidXJzdCBvZiBuZXcgcGFja2V0
cyBpbnRvIHRoZSBuZXR3b3JrICovCisJdWludDMyX3QgbWF4X2J1cnN0OworCS8qIG1heCBidXJz
dCBvZiBmYXN0IHJldHJhbnNtaXQgcGFja2V0cyAqLworCXVpbnQzMl90IGZyX21heF9idXJzdDsK
KworCXVpbnQ4X3Qgc2F0X25ldHdvcms7CS8qIFJUVCBpcyBpbiByYW5nZSBvZiBzYXQgbmV0IG9y
IGdyZWF0ZXIgKi8KKwl1aW50OF90IHNhdF9uZXR3b3JrX2xvY2tvdXQ7CS8qIGxvY2tvdXQgY29k
ZSAqLworCXVpbnQ4X3QgYnVyc3RfbGltaXRfYXBwbGllZDsJLyogQnVyc3QgbGltaXQgaW4gZWZm
ZWN0IGF0IGxhc3Qgc2VuZD8gKi8KKwkvKiBmbGFnIGdvZXMgb24gd2hlbiB3ZSBhcmUgZG9pbmcg
YSBwYXJ0aWFsIGRlbGl2ZXJ5IGFwaSAqLworCXVpbnQ4X3QgaGJfcmFuZG9tX3ZhbHVlc1s0XTsK
Kwl1aW50OF90IGZyYWdtZW50ZWRfZGVsaXZlcnlfaW5wcm9ncmVzczsKKwl1aW50OF90IGZyYWdt
ZW50X2ZsYWdzOworCXVpbnQ4X3QgbGFzdF9mbGFnc19kZWxpdmVyZWQ7CisJdWludDhfdCBoYl9l
Y3RfcmFuZG9tYml0OworCXVpbnQ4X3QgaGJfcmFuZG9tX2lkeDsKKwl1aW50OF90IGRlZmF1bHRf
ZHNjcDsKKwl1aW50OF90IGFzY29uZl9kZWxfcGVuZGluZzsJLyogYXNjb25mIGRlbGV0ZSBsYXN0
IGFkZHIgcGVuZGluZyAqLworCXVpbnQ4X3QgdHJpZ2dlcl9yZXNldDsKKwkvKgorCSAqIFRoaXMg
dmFsdWUsIHBsdXMgYWxsIG90aGVyIGFjaydkIGJ1dCBhYm92ZSBjdW0tYWNrIGlzIGFkZGVkCisJ
ICogdG9nZXRoZXIgdG8gY3Jvc3MgY2hlY2sgYWdhaW5zdCB0aGUgYml0IHRoYXQgd2UgaGF2ZSB5
ZXQgdG8KKwkgKiBkZWZpbmUgKHByb2JhYmx5IGluIHRoZSBTQUNLKS4gV2hlbiB0aGUgY3VtLWFj
ayBpcyB1cGRhdGVkLCB0aGlzCisJICogc3VtIGlzIHVwZGF0ZWQgYXMgd2VsbC4KKwkgKi8KKwor
CS8qIEZsYWdzIHdoZXRoZXIgYW4gZXh0ZW5zaW9uIGlzIHN1cHBvcnRlZCBvciBub3QgKi8KKwl1
aW50OF90IGVjbl9zdXBwb3J0ZWQ7CisJdWludDhfdCBwcnNjdHBfc3VwcG9ydGVkOworCXVpbnQ4
X3QgYXV0aF9zdXBwb3J0ZWQ7CisJdWludDhfdCBhc2NvbmZfc3VwcG9ydGVkOworCXVpbnQ4X3Qg
cmVjb25maWdfc3VwcG9ydGVkOworCXVpbnQ4X3QgbnJzYWNrX3N1cHBvcnRlZDsKKwl1aW50OF90
IHBrdGRyb3Bfc3VwcG9ydGVkOworCXVpbnQ4X3QgaWRhdGFfc3VwcG9ydGVkOworCisJLyogRGlk
IHRoZSBwZWVyIG1ha2UgdGhlIHN0cmVhbSBjb25maWcgKGFkZCBvdXQpIHJlcXVlc3QgKi8KKwl1
aW50OF90IHBlZXJfcmVxX291dDsKKworCXVpbnQ4X3QgbG9jYWxfc3RycmVzZXRfc3VwcG9ydDsK
Kwl1aW50OF90IHBlZXJfc3VwcG9ydHNfbmF0OworCisJc3RydWN0IHNjdHBfc2NvcGluZyBzY29w
ZTsKKwkvKiBmbGFncyB0byBoYW5kbGUgc2VuZCBhbHRlcm5hdGUgbmV0IHRyYWNraW5nICovCisJ
dWludDhfdCB1c2VkX2FsdF9hc2NvbmZhY2s7CisJdWludDhfdCBmYXN0X3JldHJhbl9sb3NzX3Jl
Y292ZXJ5OworCXVpbnQ4X3Qgc2F0X3QzX2xvc3NfcmVjb3Zlcnk7CisJdWludDhfdCBkcm9wcGVk
X3NwZWNpYWxfY250OworCXVpbnQ4X3Qgc2Vlbl9hX3NhY2tfdGhpc19wa3Q7CisJdWludDhfdCBz
dHJlYW1fcmVzZXRfb3V0c3RhbmRpbmc7CisJdWludDhfdCBzdHJlYW1fcmVzZXRfb3V0X2lzX291
dHN0YW5kaW5nOworCXVpbnQ4X3QgZGVsYXllZF9jb25uZWN0aW9uOworCXVpbnQ4X3QgaWZwX2hh
ZF9lbm9idWY7CisJdWludDhfdCBzYXdfc2Fja193aXRoX2ZyYWdzOworCXVpbnQ4X3Qgc2F3X3Nh
Y2tfd2l0aF9ucl9mcmFnczsKKwl1aW50OF90IGluX2Fzb2NpZF9oYXNoOworCXVpbnQ4X3QgYXNz
b2NfdXBfc2VudDsKKwl1aW50OF90IGFkYXB0YXRpb25fbmVlZGVkOworCXVpbnQ4X3QgYWRhcHRh
dGlvbl9zZW50OworCS8qIENNVCB2YXJpYWJsZXMgKi8KKwl1aW50OF90IGNtdF9kYWNfcGt0c19y
Y3ZkOworCXVpbnQ4X3Qgc2N0cF9jbXRfb25fb2ZmOworCXVpbnQ4X3QgaWFtX2Jsb2NraW5nOwor
CXVpbnQ4X3QgY29va2llX2hvd1s4XTsKKwkvKiBKUlMgNS8yMS8wNyAtIENNVCBQRiB2YXJpYWJs
ZSAqLworCXVpbnQ4X3Qgc2N0cF9jbXRfcGY7CisJdWludDhfdCB1c2VfcHJlY2lzZV90aW1lOwor
CXVpbnQ2NF90IHNjdHBfZmVhdHVyZXM7CisJdWludDMyX3QgbWF4X2N3bmQ7CisJdWludDE2X3Qg
cG9ydDsgLyogcmVtb3RlIFVEUCBlbmNhcHN1bGF0aW9uIHBvcnQgKi8KKwkvKgorCSAqIFRoZSBt
YXBwaW5nIGFycmF5IGlzIHVzZWQgdG8gdHJhY2sgb3V0IG9mIG9yZGVyIHNlcXVlbmNlcyBhYm92
ZQorCSAqIGxhc3RfYWNrZWRfc2VxLiAwIGluZGljYXRlcyBwYWNrZXQgbWlzc2luZyAxIGluZGlj
YXRlcyBwYWNrZXQKKwkgKiByZWMnZC4gV2Ugc2xpZGUgaXQgdXAgZXZlcnkgdGltZSB3ZSByYWlz
ZSBsYXN0X2Fja2VkX3NlcSBhbmQgMAorCSAqIHRyYWlsaW5nIGxvY2FjdGlvbnMgb3V0LiAgSWYg
SSBnZXQgYSBUU04gYWJvdmUgdGhlIGFycmF5CisJICogbWFwcGluZ0FycmF5U3osIEkgZGlzY2Fy
ZCB0aGUgZGF0YWdyYW0gYW5kIGxldCByZXRyYW5zbWl0IGhhcHBlbi4KKwkgKi8KKwl1aW50MzJf
dCBtYXJrZWRfcmV0cmFuczsKKwl1aW50MzJfdCB0aW1vaW5pdDsKKwl1aW50MzJfdCB0aW1vZGF0
YTsKKwl1aW50MzJfdCB0aW1vc2FjazsKKwl1aW50MzJfdCB0aW1vc2h1dGRvd247CisJdWludDMy
X3QgdGltb2hlYXJ0YmVhdDsKKwl1aW50MzJfdCB0aW1vY29va2llOworCXVpbnQzMl90IHRpbW9z
aHV0ZG93bmFjazsKKwlzdHJ1Y3QgdGltZXZhbCBzdGFydF90aW1lOworCXN0cnVjdCB0aW1ldmFs
IGRpc2NvbnRpbnVpdHlfdGltZTsKKwl1aW50NjRfdCBhYmFuZG9uZWRfdW5zZW50W1NDVFBfUFJf
U0NUUF9NQVggKyAxXTsKKwl1aW50NjRfdCBhYmFuZG9uZWRfc2VudFtTQ1RQX1BSX1NDVFBfTUFY
ICsgMV07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3N5c2N0bC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lz
Y3RsLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uODNk
MmM5YTJiODNhMzQ0OTExMjc0ZWQ2MTYwMWY4MjcwMTI0MWFhZSAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMKKysrIGIvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmMKQEAgLTAsMCArMSwxNzMyIEBACisvKi0KKyAqIFNQ
RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMp
IDIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X3N5c2N0bC5jIDMyNjY3MiAyMDE3LTEyLTA3IDIyOjE5OjA4WiB0dWV4ZW4gJCIpOworI2VuZGlm
CisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY29uc3RhbnRzLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX291dHB1dC5oPgor
I2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL3NtcC5oPgorI2luY2x1ZGUgPHN5cy9z
eXNjdGwuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2luY2x1ZGUgPG5ldGlu
ZXQvc2N0cF9ic2RfYWRkci5oPgorI2VuZGlmCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworRkVBVFVS
RShzY3RwLCAiU3RyZWFtIENvbnRyb2wgVHJhbnNtaXNzaW9uIFByb3RvY29sIik7CisjZW5kaWYK
KworLyoKKyAqIHN5c2N0bCB0dW5hYmxlIHZhcmlhYmxlcworICovCisKK3ZvaWQKK3NjdHBfaW5p
dF9zeXNjdGxzKCkKK3sKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNwYWNlKSA9IFNDVFBD
VExfTUFYREdSQU1fREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSA9
IFNDVFBDVExfUkVDVlNQQUNFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9f
YXNjb25mKSA9IFNDVFBDVExfQVVUT0FTQ09ORl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9tdWx0aXBsZV9hc2NvbmZzKSA9IFNDVFBDVExfTVVMVElQTEVBU0NPTkZTX0RFRkFVTFQ7
CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Vjbl9lbmFibGUpID0gU0NUUENUTF9FQ05fRU5BQkxF
X0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3ByX2VuYWJsZSkgPSBTQ1RQQ1RMX1BS
X0VOQUJMRV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSkgPSBT
Q1RQQ1RMX0FVVEhfRU5BQkxFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FzY29u
Zl9lbmFibGUpID0gU0NUUENUTF9BU0NPTkZfRU5BQkxFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3JlY29uZmlnX2VuYWJsZSkgPSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9ERUZB
VUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucnNhY2tfZW5hYmxlKSA9IFNDVFBDVExfTlJT
QUNLX0VOQUJMRV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wa3Rkcm9wX2VuYWJs
ZSkgPSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX0RFRkFVTFQ7CisjaWYgIShkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDApCisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spID0gU0NUUENUTF9MT09QQkFDS19OT0NTVU1fREVG
QVVMVDsKKyNlbmRpZgorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wZWVyX2NodW5rX29oKSA9IFND
VFBDVExfUEVFUl9DSEtPSF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfYnVy
c3RfZGVmYXVsdCkgPSBTQ1RQQ1RMX01BWEJVUlNUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KSA9IFNDVFBDVExfRlJNQVhCVVJTVF9ERUZBVUxU
OworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSA9IFNDVFBDVExf
TUFYQ0hVTktTX0RFRkFVTFQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfaGFzaHRibHNpemUpID09IDApIHsKKwkJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2hhc2h0YmxzaXplKSA9IFNDVFBDVExfVENCSEFTSFNJWkVfREVGQVVMVDsKKwl9Cisj
ZWxzZQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSkgPSBTQ1RQQ1RMX1RDQkhB
U0hTSVpFX0RFRkFVTFQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSA9PSAwKSB7CisJCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9wY2J0YmxzaXplKSA9IFNDVFBDVExfUENCSEFTSFNJWkVfREVGQVVMVDsKKwl9
CisjZWxzZQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSA9IFNDVFBDVExfUENC
SEFTSFNJWkVfREVGQVVMVDsKKyNlbmRpZgorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9taW5fc3Bs
aXRfcG9pbnQpID0gU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVGQVVMVDsKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSA9
PSAwKSB7CisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jaHVua3NjYWxlKSA9IFNDVFBDVExfQ0hV
TktTQ0FMRV9ERUZBVUxUOworCX0KKyNlbHNlCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2NodW5r
c2NhbGUpID0gU0NUUENUTF9DSFVOS1NDQUxFX0RFRkFVTFQ7CisjZW5kaWYKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX0RFTEFZRURf
U0FDS19USU1FX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NhY2tfZnJlcV9kZWZh
dWx0KSA9IFNDVFBDVExfU0FDS19GUkVRX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3N5c3RlbV9mcmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVGQVVMVDsK
KwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2NfbGltaXQpID0gU0NUUENUTF9B
U09DX1JFU09VUkNFX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9p
bnRlcnZhbF9kZWZhdWx0KSA9IFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFRkFVTFQ7CisJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KSA9IFNDVFBDVExf
UE1UVV9SQUlTRV9USU1FX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NodXRkb3du
X2d1YXJkX3RpbWVfZGVmYXVsdCkgPSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVM
VDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpID0gU0NU
UENUTF9TRUNSRVRfTElGRVRJTUVfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRv
X21heF9kZWZhdWx0KSA9IFNDVFBDVExfUlRPX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydG9fbWluX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fTUlOX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQpID0gU0NUUENUTF9SVE9fSU5J
VElBTF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0X3J0b19tYXhfZGVmYXVs
dCkgPSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0KSA9IFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVf
REVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpID0g
U0NUUENUTF9JTklUX1JUWF9NQVhfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNz
b2NfcnR4X21heF9kZWZhdWx0KSA9IFNDVFBDVExfQVNTT0NfUlRYX01BWF9ERUZBVUxUOworCVND
VFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVsdCkgPSBTQ1RQQ1RMX1BBVEhf
UlRYX01BWF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3BmX3RocmVzaG9s
ZCkgPSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCkgPSBTQ1RQQ1RMX0FERF9NT1JFX09OX09VVFBVVF9E
RUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1zX2RlZmF1
bHQpID0gU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NU
TChzY3RwX25yX291dGdvaW5nX3N0cmVhbXNfZGVmYXVsdCkgPSBTQ1RQQ1RMX09VVEdPSU5HX1NU
UkVBTVNfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikgPSBTQ1RQ
Q1RMX0NNVF9PTl9PRkZfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X3VzZV9k
YWMpID0gU0NUUENUTF9DTVRfVVNFX0RBQ19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0
cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCkgPSBTQ1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVGQVVM
VDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSA9IFNDVFBDVExfTkFUX0ZS
SUVORExZX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX0wyX2FiY192YXJpYWJsZSkg
PSBTQ1RQQ1RMX0FCQ19MX1ZBUl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYnVm
X3RocmVzaG9sZF9jb3VudCkgPSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFRkFVTFQ7CisJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2RvX2RyYWluKSA9IFNDVFBDVExfRE9fU0NUUF9EUkFJTl9E
RUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYl9tYXhidXJzdCkgPSBTQ1RQQ1RMX0hC
X01BWF9CVVJTVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hYm9ydF9pZl9vbmVf
Ml9vbmVfaGl0c19saW1pdCkgPSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX21pbl9yZXNpZHVhbCkgPSBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9E
RUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfcmV0cmFuX2NodW5rKSA9IFNDVFBD
VExfTUFYX1JFVFJBTl9DSFVOS19ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dn
aW5nX2xldmVsKSA9IFNDVFBDVExfTE9HR0lOR19MRVZFTF9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9kZWZhdWx0X2NjX21vZHVsZSkgPSBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxF
X0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfc3NfbW9kdWxlKSA9IFND
VFBDVExfREVGQVVMVF9TU19NT0RVTEVfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGVmYXVsdF9mcmFnX2ludGVybGVhdmUpID0gU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFW
RV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0eV9iYXNlKSA9IFNDVFBD
VExfTU9CSUxJVFlfQkFTRV9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tb2JpbGl0
eV9mYXN0aGFuZG9mZikgPSBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFRkFVTFQ7CisJ
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3Z0YWdfdGltZV93YWl0KSA9IFNDVFBDVExfVElNRV9XQUlU
X0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpID0gU0NU
UENUTF9CVUZGRVJfU1BMSVRUSU5HX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2lu
aXRpYWxfY3duZCkgPSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9ERUZBVUxUOworCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9ydHR2YXJfYncpID0gU0NUUENUTF9SVFRWQVJfQldfREVGQVVMVDsKKwlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX3J0dCkgPSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVGQVVM
VDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnR0dmFyX2VxcmV0KSA9IFNDVFBDVExfUlRUVkFS
X0VRUkVUX0RFRkFVTFQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX3N0ZWFkeV9zdGVwKSA9IFND
VFBDVExfUlRUVkFSX1NURUFEWVNfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNl
X2RjY2NfZWNuKSA9IFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fREVGQVVMVDsKKwlTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9IFNDVFBDVExfQkxBQ0tIT0xFX0RFRkFVTFQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2RpYWdfaW5mb19jb2RlKSA9IFNDVFBDVExfRElBR19JTkZPX0NP
REVfREVGQVVMVDsKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lmIGRlZmlu
ZWQoX19XaW5kb3dzX18pCisJLyogT24gV2luZG93cywgdGhlIHJlc291cmNlIGZvciBnbG9iYWwg
dmFyaWFibGVzIGlzIGxpbWl0ZWQuICovCisJTUFMTE9DKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLCBzdHJ1Y3Qgc2N0cF9sb2cgKiwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZyksIE1fU1lTQ1RM
LCBNX1pFUk8pOworI2Vsc2UKKwltZW1zZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAw
LCBzaXplb2Yoc3RydWN0IHNjdHBfbG9nKSk7CisjZW5kaWYKKyNlbmRpZgorCVNDVFBfQkFTRV9T
WVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpID0gU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BP
UlRfREVGQVVMVDsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRl
bHkpID0gU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERUZBVUxUOworCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSkgPSBTQ1RQQ1RMX05BVF9G
UklFTkRMWV9JTklUU19ERUZBVUxUOworI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKKwlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pID0gU0NUUENUTF9ERUJVR19ERUZBVUxUOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2lnbm9yZV92
bXdhcmVfaW50ZXJmYWNlcykgPSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERUZB
VUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYWluX3RpbWVyKSA9IFNDVFBDVExfTUFJTl9U
SU1FUl9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hZGRyX3dhdGNoZG9nX2xpbWl0
KSA9IFNDVFBDVExfQUREUl9XQVRDSERPR19MSU1JVF9ERUZBVUxUOworCVNDVFBfQkFTRV9TWVND
VEwoc2N0cF92dGFnX3dhdGNoZG9nX2xpbWl0KSA9IFNDVFBDVExfVlRBR19XQVRDSERPR19MSU1J
VF9ERUZBVUxUOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX291dHB1dF91bmxvY2tl
ZCkgPSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9ERUZBVUxUOworI2VuZGlmCit9CisKKyNpZiBk
ZWZpbmVkKF9fV2luZG93c19fKQordm9pZAorc2N0cF9maW5pc2hfc3lzY3RscygpCit7CisjaWYg
ZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZykgIT0gTlVMTCkgeworCQlGUkVFKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBNX1NZ
U0NUTCk7CisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpID0gTlVMTDsKKwl9CisjZW5kaWYK
K30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisvKiBJdCByZXR1cm5zIGFuIHVwcGVyIGxpbWl0
LiBObyBmaWx0ZXJpbmcgaXMgZG9uZSBoZXJlICovCitzdGF0aWMgdW5zaWduZWQgaW50CitzY3Rw
X3N5c2N0bF9udW1iZXJfb2ZfYWRkcmVzc2VzKHN0cnVjdCBzY3RwX2lucGNiICppbnApCit7CisJ
dW5zaWduZWQgaW50IGNudDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9p
Zm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJc3RydWN0IHNjdHBf
bGFkZHIgKmxhZGRyOworCisJY250ID0gMDsKKwkvKiBuZWl0aGVyIE1hYyBPUyBYIG5vciBGcmVl
QlNEIHN1cHBvcnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlvbnMgKi8KKwlpZiAoKHZyZiA9IHNj
dHBfZmluZF92cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVMTCkgeworCQlyZXR1cm4gKDApOwor
CX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJ
TElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0LCBuZXh0X2lmbikgeworCQkJTElT
VF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJ
c3dpdGNoIChzY3RwX2lmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJ
CQkJY2FzZSBBRl9JTkVUOgorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2
OgorI2VuZGlmCisJCQkJCWNudCsrOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQli
cmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlMSVNUX0ZPUkVBQ0gobGFkZHIs
ICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7CisJCQlzd2l0Y2ggKGxhZGRy
LT5pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJY2FzZSBBRl9J
TkVUOgorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisjZW5kaWYKKwkJ
CQljbnQrKzsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCX0K
Kwl9CisJcmV0dXJuIChjbnQpOworfQorCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9jb3B5X291
dF9sb2NhbF9hZGRyZXNzZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBzdHJ1Y3Qgc3lzY3RsX3JlcSAqcmVxKQoreworCXN0cnVjdCBzY3RwX2lmbiAqc2N0
cF9pZm47CisJc3RydWN0IHNjdHBfaWZhICpzY3RwX2lmYTsKKwlpbnQgbG9vcGJhY2tfc2NvcGUs
IGlwdjRfbG9jYWxfc2NvcGUsIGxvY2FsX3Njb3BlLCBzaXRlX3Njb3BlOworCWludCBpcHY0X2Fk
ZHJfbGVnYWwsIGlwdjZfYWRkcl9sZWdhbDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
aW50IGNvbm5fYWRkcl9sZWdhbDsKKyNlbmRpZgorCXN0cnVjdCBzY3RwX3ZyZiAqdnJmOworCXN0
cnVjdCB4c2N0cF9sYWRkciB4bGFkZHI7CisJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOworCWlu
dCBlcnJvcjsKKworCS8qIFR1cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLworCWlm
IChzdGNiKSB7CisJCS8qIHVzZSBhc3NvY2lhdGlvbiBzcGVjaWZpYyB2YWx1ZXMgKi8KKwkJbG9v
cGJhY2tfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmxvb3BiYWNrX3Njb3BlOworCQlpcHY0X2xv
Y2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOworCQlsb2NhbF9z
Y29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUubG9jYWxfc2NvcGU7CisJCXNpdGVfc2NvcGUgPSBzdGNi
LT5hc29jLnNjb3BlLnNpdGVfc2NvcGU7CisJCWlwdjRfYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Mu
c2NvcGUuaXB2NF9hZGRyX2xlZ2FsOworCQlpcHY2X2FkZHJfbGVnYWwgPSBzdGNiLT5hc29jLnNj
b3BlLmlwdjZfYWRkcl9sZWdhbDsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNvbm5f
YWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJ
fSBlbHNlIHsKKwkJLyogVXNlIGdlbmVyaWMgdmFsdWVzIGZvciBlbmRwb2ludHMuICovCisJCWxv
b3BiYWNrX3Njb3BlID0gMTsKKwkJaXB2NF9sb2NhbF9zY29wZSA9IDE7CisJCWxvY2FsX3Njb3Bl
ID0gMTsKKwkJc2l0ZV9zY29wZSA9IDE7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgeworCQkJaXB2Nl9hZGRyX2xlZ2FsID0gMTsKKwkJCWlmIChTQ1RQ
X0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOworCQkJfSBlbHNl
IHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAxOworCQkJfQorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwkJCWNvbm5fYWRkcl9sZWdhbCA9IDA7CisjZW5kaWYKKwkJfSBlbHNlIHsKKwkJCWlw
djZfYWRkcl9sZWdhbCA9IDA7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJCQljb25uX2Fk
ZHJfbGVnYWwgPSAxOworCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCQl9IGVsc2UgeworCQkJ
CWNvbm5fYWRkcl9sZWdhbCA9IDA7CisJCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJCX0KKyNl
bHNlCisJCQlpcHY0X2FkZHJfbGVnYWwgPSAxOworI2VuZGlmCisJCX0KKwl9CisKKwkvKiBuZWl0
aGVyIE1hYyBPUyBYIG5vciBGcmVlQlNEIHN1cHBvcnQgbXVsaXRwbGUgcm91dGluZyBmdW5jdGlv
bnMgKi8KKwlpZiAoKHZyZiA9IHNjdHBfZmluZF92cmYoaW5wLT5kZWZfdnJmX2lkKSkgPT0gTlVM
TCkgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EQUxMKSB7CisJCUxJU1RfRk9SRUFDSChzY3RwX2lmbiwgJnZyZi0+aWZubGlzdCwg
bmV4dF9pZm4pIHsKKwkJCWlmICgobG9vcGJhY2tfc2NvcGUgPT0gMCkgJiYgU0NUUF9JRk5fSVNf
SUZUX0xPT1Aoc2N0cF9pZm4pKQorCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYgbG9vcGJhY2tfc2Nv
cGUgbm90IHNldCAqLworCQkJCWNvbnRpbnVlOworCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAm
c2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJaWYgKHN0Y2IpIHsKKwkJCQkJLyoK
KwkJCQkJICogaWdub3JlIGlmIGJsYWNrbGlzdGVkIGF0CisJCQkJCSAqIGFzc29jaWF0aW9uIGxl
dmVsCisJCQkJCSAqLworCQkJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgc2N0
cF9pZmEpKQorCQkJCQkJY29udGludWU7CisJCQkJfQorCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFk
ZHJlc3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJ
CQkJaWYgKGlwdjRfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47
CisKKwkJCQkJCXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47CisJCQkJCQlpZiAoc2luLT5z
aW5fYWRkci5zX2FkZHIgPT0gMCkKKwkJCQkJCQljb250aW51ZTsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9j
cmVkLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsK
KwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNlbmRpZgorCQkJCQkJaWYgKChpcHY0X2xvY2Fs
X3Njb3BlID09IDApICYmIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2luX2FkZHIpKSkK
KwkJCQkJCQljb250aW51ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9
CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2Ogor
CQkJCQlpZiAoaXB2Nl9hZGRyX2xlZ2FsKSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42OworCisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlpZiAo
SU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpCisJCQkJCQkJY29udGlu
dWU7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQkJCWlmIChwcmlzb25fY2hlY2tfaXA2
KGlucC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZz
aW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNlbmRp
ZgorCQkJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkgewor
CQkJCQkJCWlmIChsb2NhbF9zY29wZSA9PSAwKQorCQkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0K
KwkJCQkJCWlmICgoc2l0ZV9zY29wZSA9PSAwKSAmJiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKCZz
aW42LT5zaW42X2FkZHIpKSkKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJ
CWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJaWYgKCFjb25uX2FkZHJfbGVnYWwp
IHsKKwkJCQkJCWNvbnRpbnVlOworCQkJCQl9CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVm
YXVsdDoKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIs
IDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpKTsKKwkJCQltZW1jcHkoKHZvaWQgKikmeGxh
ZGRyLmFkZHJlc3MsIChjb25zdCB2b2lkICopJnNjdHBfaWZhLT5hZGRyZXNzLCBzaXplb2YodW5p
b24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJU0NU
UF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQkJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRk
ciwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCQkJCWlmIChlcnJvcikgeworCQkJCQly
ZXR1cm4gKGVycm9yKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7
CisJCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJfQorCQkJfQorCQl9CisJfSBlbHNlIHsK
KwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRk
cikgeworCQkJLyogaWdub3JlIGlmIGJsYWNrbGlzdGVkIGF0IGFzc29jaWF0aW9uIGxldmVsICov
CisJCQlpZiAoc3RjYiAmJiBzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZh
KSkKKwkJCQljb250aW51ZTsKKwkJCW1lbXNldCgodm9pZCAqKSZ4bGFkZHIsIDAsIHNpemVvZihz
dHJ1Y3QgeHNjdHBfbGFkZHIpKTsKKwkJCW1lbWNweSgodm9pZCAqKSZ4bGFkZHIuYWRkcmVzcywg
KGNvbnN0IHZvaWQgKikmbGFkZHItPmlmYS0+YWRkcmVzcywgc2l6ZW9mKHVuaW9uIHNjdHBfc29j
a3N0b3JlKSk7CisJCQl4bGFkZHIuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3QpbGFkZHIt
PnN0YXJ0X3RpbWUudHZfc2VjOworCQkJeGxhZGRyLnN0YXJ0X3RpbWUudHZfdXNlYyA9ICh1aW50
MzJfdClsYWRkci0+c3RhcnRfdGltZS50dl91c2VjOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCQllcnJvciA9IFNZU0NUTF9PVVQocmVx
LCAmeGxhZGRyLCBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKSk7CisJCQlpZiAoZXJyb3IpIHsK
KwkJCQlyZXR1cm4gKGVycm9yKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9JTlBfSU5GT19STE9D
SygpOworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQl9CisJCX0KKwl9CisJbWVtc2V0KCh2
b2lkICopJnhsYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcikpOworCXhsYWRkci5s
YXN0ID0gMTsKKwlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJU0NUUF9JTlBfSU5GT19SVU5MT0NL
KCk7CisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhsYWRkciwgc2l6ZW9mKHN0cnVjdCB4c2N0
cF9sYWRkcikpOworCisJaWYgKGVycm9yKSB7CisJCXJldHVybiAoZXJyb3IpOworCX0gZWxzZSB7
CisJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJcmV0
dXJuICgwKTsKKwl9Cit9CisKKy8qCisgKiBzeXNjdGwgZnVuY3Rpb25zCisgKi8KKyNpZiBkZWZp
bmVkKF9fQVBQTEVfXykKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3Qg
U1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQob2lkcCwgYXJnMSwgYXJnMikK
KyNlbHNlCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfYXNzb2NsaXN0KFNZU0NUTF9I
QU5ETEVSX0FSR1MpCit7CisjZW5kaWYKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2VuZHBvaW50
czsKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX2xvY2FsX2FkZHJlc3NlczsKKwl1bnNpZ25lZCBp
bnQgbnVtYmVyX29mX2Fzc29jaWF0aW9uczsKKwl1bnNpZ25lZCBpbnQgbnVtYmVyX29mX3JlbW90
ZV9hZGRyZXNzZXM7CisJdW5zaWduZWQgaW50IG47CisJaW50IGVycm9yOworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMg
Km5ldDsKKwlzdHJ1Y3QgeHNjdHBfaW5wY2IgeGlucGNiOworCXN0cnVjdCB4c2N0cF90Y2IgeHN0
Y2I7CisJc3RydWN0IHhzY3RwX3JhZGRyIHhyYWRkcjsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwor
CW51bWJlcl9vZl9lbmRwb2ludHMgPSAwOworCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgPSAw
OworCW51bWJlcl9vZl9hc3NvY2lhdGlvbnMgPSAwOworCW51bWJlcl9vZl9yZW1vdGVfYWRkcmVz
c2VzID0gMDsKKworCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwlpZiAocmVxLT5vbGRwdHIgPT0gVVNFUl9BRERSX05VTEwpIHsKKyNlbHNlCisJaWYgKHJl
cS0+b2xkcHRyID09IE5VTEwpIHsKKyNlbmRpZgorCQlMSVNUX0ZPUkVBQ0goaW5wLCAmU0NUUF9C
QVNFX0lORk8obGlzdGhlYWQpLCBzY3RwX2xpc3QpIHsKKwkJCVNDVFBfSU5QX1JMT0NLKGlucCk7
CisJCQludW1iZXJfb2ZfZW5kcG9pbnRzKys7CisJCQludW1iZXJfb2ZfbG9jYWxfYWRkcmVzc2Vz
ICs9IHNjdHBfc3lzY3RsX251bWJlcl9vZl9hZGRyZXNzZXMoaW5wKTsKKwkJCUxJU1RfRk9SRUFD
SChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJbnVtYmVy
X29mX2Fzc29jaWF0aW9ucysrOworCQkJCW51bWJlcl9vZl9sb2NhbF9hZGRyZXNzZXMgKz0gc2N0
cF9zeXNjdGxfbnVtYmVyX29mX2FkZHJlc3NlcyhpbnApOworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0
LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJbnVtYmVyX29mX3JlbW90ZV9h
ZGRyZXNzZXMrKzsKKwkJCQl9CisJCQl9CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCX0K
KwkJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCW4gPSAobnVtYmVyX29mX2VuZHBvaW50cyAr
IDEpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF9pbnBjYikgKworCQkgICAgKG51bWJlcl9vZl9sb2Nh
bF9hZGRyZXNzZXMgKyBudW1iZXJfb2ZfZW5kcG9pbnRzICsgbnVtYmVyX29mX2Fzc29jaWF0aW9u
cykgKiBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKSArCisJCSAgICAobnVtYmVyX29mX2Fzc29j
aWF0aW9ucyArIG51bWJlcl9vZl9lbmRwb2ludHMpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2Ip
ICsKKwkJICAgIChudW1iZXJfb2ZfcmVtb3RlX2FkZHJlc3NlcyArIG51bWJlcl9vZl9hc3NvY2lh
dGlvbnMpICogc2l6ZW9mKHN0cnVjdCB4c2N0cF9yYWRkcik7CisKKwkJLyogcmVxdWVzdCBzb21l
IG1vcmUgbWVtb3J5IHRoYW4gbmVlZGVkICovCisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pCisJ
CXJlcS0+b2xkaWR4ID0gKG4gKyBuIC8gOCk7CisjZWxzZQorCQlyZXEtPmRhdGFpZHggPSAobiAr
IG4gLyA4KTsKKyNlbmRpZgorCQlyZXR1cm4gKDApOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwlpZiAocmVxLT5uZXdwdHIgIT0gVVNFUl9BRERSX05VTEwpIHsKKyNlbHNlCisJaWYgKHJl
cS0+bmV3cHRyICE9IE5VTEwpIHsKKyNlbmRpZgorCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9T
WVNDVEwsIEVQRVJNKTsKKwkJcmV0dXJuIChFUEVSTSk7CisJfQorCUxJU1RfRk9SRUFDSChpbnAs
ICZTQ1RQX0JBU0VfSU5GTyhsaXN0aGVhZCksIHNjdHBfbGlzdCkgeworCQlTQ1RQX0lOUF9STE9D
SyhpbnApOworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FM
TEdPTkUpIHsKKwkJCS8qIGlmIGl0cyBhbGxnb25lIGl0IGlzIGJlaW5nIGZyZWVkIC0gc2tpcCBp
dCAgKi8KKwkJCWdvdG8gc2tpcDsKKwkJfQorCQl4aW5wY2IubGFzdCA9IDA7CisJCXhpbnBjYi5s
b2NhbF9wb3J0ID0gbnRvaHMoaW5wLT5zY3RwX2xwb3J0KTsKKwkJeGlucGNiLmZsYWdzID0gaW5w
LT5zY3RwX2ZsYWdzOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uIDwgMTAwMDA0OAorCQl4aW5wY2IuZmVhdHVyZXMgPSAodWludDMyX3QpaW5wLT5zY3RwX2Zl
YXR1cmVzOworI2Vsc2UKKwkJeGlucGNiLmZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOwor
I2VuZGlmCisJCXhpbnBjYi50b3RhbF9zZW5kcyA9IGlucC0+dG90YWxfc2VuZHM7CisJCXhpbnBj
Yi50b3RhbF9yZWN2cyA9IGlucC0+dG90YWxfcmVjdnM7CisJCXhpbnBjYi50b3RhbF9ub3NwYWNl
cyA9IGlucC0+dG90YWxfbm9zcGFjZXM7CisJCXhpbnBjYi5mcmFnbWVudGF0aW9uX3BvaW50ID0g
aW5wLT5zY3RwX2ZyYWdfcG9pbnQ7CisjaWYgIShkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAoX19G
cmVlQlNEX3ZlcnNpb24gPCAxMDAxNTE3KSkKKwkJeGlucGNiLnNvY2tldCA9IGlucC0+c2N0cF9z
b2NrZXQ7CisjZW5kaWYKKwkJc28gPSBpbnAtPnNjdHBfc29ja2V0OworCQlpZiAoKHNvID09IE5V
TEwpIHx8CisJCSAgICAoIVNDVFBfSVNfTElTVEVOSU5HKGlucCkpIHx8CisJCSAgICAoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCQl4aW5wY2IucWxl
biA9IDA7CisJCQl4aW5wY2IubWF4cWxlbiA9IDA7CisJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTIwMDAzNAorCQkJeGlucGNiLnFs
ZW4gPSBzby0+c29sX3FsZW47CisjZWxzZQorCQkJeGlucGNiLnFsZW4gPSBzby0+c29fcWxlbjsK
KyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4g
MTEwMDA5NgorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKKwkJCXhpbnBjYi5xbGVu
X29sZCA9IHNvLT5zb2xfcWxlbiA+IFVTSFJUX01BWCA/CisJCQkgICAgVVNIUlRfTUFYIDogKHVp
bnQxNl90KSBzby0+c29sX3FsZW47CisjZWxzZQorCQkJeGlucGNiLnFsZW5fb2xkID0gc28tPnNv
X3FsZW4gPiBVU0hSVF9NQVggPworCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZfdCkgc28tPnNv
X3FsZW47CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJl
ZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKKwkJCXhpbnBjYi5tYXhxbGVuID0gc28tPnNvbF9xbGlt
aXQ7CisjZWxzZQorCQkJeGlucGNiLm1heHFsZW4gPSBzby0+c29fcWxpbWl0OworI2VuZGlmCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiAxMTAwMDk2Cisj
aWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTIwMDAzNAorCQkJeGlucGNiLm1heHFsZW5fb2xkID0g
c28tPnNvbF9xbGltaXQgPiBVU0hSVF9NQVggPworCQkJICAgIFVTSFJUX01BWCA6ICh1aW50MTZf
dCkgc28tPnNvbF9xbGltaXQ7CisjZWxzZQorCQkJeGlucGNiLm1heHFsZW5fb2xkID0gc28tPnNv
X3FsaW1pdCA+IFVTSFJUX01BWCA/CisJCQkgICAgVVNIUlRfTUFYIDogKHVpbnQxNl90KSBzby0+
c29fcWxpbWl0OworI2VuZGlmCisjZW5kaWYKKwkJfQorCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnAp
OworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOwor
CQllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeGlucGNiLCBzaXplb2Yoc3RydWN0IHhzY3RwX2lu
cGNiKSk7CisJCWlmIChlcnJvcikgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCXJl
dHVybiAoZXJyb3IpOworCQl9CisJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKKwkJZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNz
ZXMoaW5wLCBOVUxMLCByZXEpOworCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVG
KGlucCk7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlu
cC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJU0NUUF9UQ0JfTE9DSyhzdGNi
KTsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQl4c3RjYi5sYXN0ID0gMDsKKwkJCXhzdGNiLmxvY2FsX3BvcnQg
PSBudG9ocyhpbnAtPnNjdHBfbHBvcnQpOworCQkJeHN0Y2IucmVtb3RlX3BvcnQgPSBudG9ocyhz
dGNiLT5ycG9ydCk7CisJCQlpZiAoc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uICE9IE5V
TEwpCisJCQkJeHN0Y2IucHJpbWFyeV9hZGRyID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uLT5yby5fbF9hZGRyOworCQkJeHN0Y2IuaGVhcnRiZWF0X2ludGVydmFsID0gc3RjYi0+YXNv
Yy5oZWFydF9iZWF0X2RlbGF5OworCQkJeHN0Y2Iuc3RhdGUgPSAodWludDMyX3Qpc2N0cF9tYXBf
YXNzb2Nfc3RhdGUoc3RjYi0+YXNvYy5zdGF0ZSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwkJCS8qIDcuMCBkb2VzIG5vdCBzdXBw
b3J0IHRoZXNlICovCisJCQl4c3RjYi5hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7
CisJCQl4c3RjYi5wZWVyc19yd25kID0gc3RjYi0+YXNvYy5wZWVyc19yd25kOworI2VuZGlmCisj
ZWxzZQorCQkJeHN0Y2IuYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQkJeHN0
Y2IucGVlcnNfcnduZCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKKyNlbmRpZgorCQkJeHN0Y2Iu
aW5fc3RyZWFtcyA9IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7CisJCQl4c3RjYi5vdXRfc3RyZWFt
cyA9IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OworCQkJeHN0Y2IubWF4X25yX3JldHJhbnMgPSBz
dGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQ7CisJCQl4c3RjYi5wcmltYXJ5X3Byb2Nlc3Mg
PSAwOyAvKiBub3QgcmVhbGx5IHN1cHBvcnRlZCB5ZXQgKi8KKwkJCXhzdGNiLlQxX2V4cGlyZXJp
ZXMgPSBzdGNiLT5hc29jLnRpbW9pbml0ICsgc3RjYi0+YXNvYy50aW1vY29va2llOworCQkJeHN0
Y2IuVDJfZXhwaXJlcmllcyA9IHN0Y2ItPmFzb2MudGltb3NodXRkb3duICsgc3RjYi0+YXNvYy50
aW1vc2h1dGRvd25hY2s7CisJCQl4c3RjYi5yZXRyYW5zbWl0dGVkX3RzbnMgPSBzdGNiLT5hc29j
Lm1hcmtlZF9yZXRyYW5zOworCQkJeHN0Y2Iuc3RhcnRfdGltZS50dl9zZWMgPSAodWludDMyX3Qp
c3RjYi0+YXNvYy5zdGFydF90aW1lLnR2X3NlYzsKKwkJCXhzdGNiLnN0YXJ0X3RpbWUudHZfdXNl
YyA9ICh1aW50MzJfdClzdGNiLT5hc29jLnN0YXJ0X3RpbWUudHZfdXNlYzsKKwkJCXhzdGNiLmRp
c2NvbnRpbnVpdHlfdGltZS50dl9zZWMgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5kaXNjb250aW51
aXR5X3RpbWUudHZfc2VjOworCQkJeHN0Y2IuZGlzY29udGludWl0eV90aW1lLnR2X3VzZWMgPSAo
dWludDMyX3Qpc3RjYi0+YXNvYy5kaXNjb250aW51aXR5X3RpbWUudHZfdXNlYzsKKwkJCXhzdGNi
LnRvdGFsX3NlbmRzID0gc3RjYi0+dG90YWxfc2VuZHM7CisJCQl4c3RjYi50b3RhbF9yZWN2cyA9
IHN0Y2ItPnRvdGFsX3JlY3ZzOworCQkJeHN0Y2IubG9jYWxfdGFnID0gc3RjYi0+YXNvYy5teV92
dGFnOworCQkJeHN0Y2IucmVtb3RlX3RhZyA9IHN0Y2ItPmFzb2MucGVlcl92dGFnOworCQkJeHN0
Y2IuaW5pdGlhbF90c24gPSBzdGNiLT5hc29jLmluaXRfc2VxX251bWJlcjsKKwkJCXhzdGNiLmhp
Z2hlc3RfdHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSAtIDE7CisJCQl4c3RjYi5jdW11bGF0
aXZlX3RzbiA9IHN0Y2ItPmFzb2MubGFzdF9hY2tlZF9zZXE7CisJCQl4c3RjYi5jdW11bGF0aXZl
X3Rzbl9hY2sgPSBzdGNiLT5hc29jLmN1bXVsYXRpdmVfdHNuOworCQkJeHN0Y2IubXR1ID0gc3Rj
Yi0+YXNvYy5zbWFsbGVzdF9tdHU7CisJCQl4c3RjYi5yZWZjbnQgPSBzdGNiLT5hc29jLnJlZmNu
dDsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygp
OworCQkJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhzdGNiLCBzaXplb2Yoc3RydWN0IHhzY3Rw
X3RjYikpOworCQkJaWYgKGVycm9yKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJ
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJcmV0dXJu
IChlcnJvcik7CisJCQl9CisJCQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQkJZXJyb3IgPSBzY3RwX3N5c2N0bF9jb3B5X291dF9sb2NhbF9hZGRyZXNz
ZXMoaW5wLCBzdGNiLCByZXEpOworCQkJaWYgKGVycm9yKSB7CisJCQkJU0NUUF9JTlBfREVDUl9S
RUYoaW5wKTsKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7
CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJeHJhZGRyLmxhc3QgPSAwOworCQkJCXhyYWRk
ci5hZGRyZXNzID0gbmV0LT5yby5fbF9hZGRyOworCQkJCXhyYWRkci5hY3RpdmUgPSAoKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpID09IFNDVFBfQUREUl9SRUFDSEFCTEUp
OworCQkJCXhyYWRkci5jb25maXJtZWQgPSAoKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9V
TkNPTkZJUk1FRCkgPT0gMCk7CisJCQkJeHJhZGRyLmhlYXJ0YmVhdF9lbmFibGVkID0gKChuZXQt
PmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9IQikgPT0gMCk7CisJCQkJeHJhZGRyLnBvdGVudGlh
bGx5X2ZhaWxlZCA9ICgobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSA9PSBTQ1RQX0FE
RFJfUEYpOworCQkJCXhyYWRkci5ydG8gPSBuZXQtPlJUTzsKKwkJCQl4cmFkZHIubWF4X3BhdGhf
cnR4ID0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZDsKKwkJCQl4cmFkZHIucnR4ID0gbmV0LT5tYXJr
ZWRfcmV0cmFuczsKKwkJCQl4cmFkZHIuZXJyb3JfY291bnRlciA9IG5ldC0+ZXJyb3JfY291bnQ7
CisJCQkJeHJhZGRyLmN3bmQgPSBuZXQtPmN3bmQ7CisJCQkJeHJhZGRyLmZsaWdodF9zaXplID0g
bmV0LT5mbGlnaHRfc2l6ZTsKKwkJCQl4cmFkZHIubXR1ID0gbmV0LT5tdHU7CisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwkJCQl4cmFk
ZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOworCQkJCXhyYWRkci5oZWFydGJlYXRfaW50ZXJ2YWwg
PSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7CisJCQkJeHJhZGRyLnNzdGhyZXNoID0gbmV0LT5zc3Ro
cmVzaDsKKwkJCQl4cmFkZHIuZW5jYXBzX3BvcnQgPSBuZXQtPnBvcnQ7CisJCQkJaWYgKG5ldC0+
ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJCQl4cmFkZHIuc3RhdGUg
PSBTQ1RQX1VOQ09ORklSTUVEOworCQkJCX0gZWxzZSBpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0FDVElWRTsKKwkJ
CQl9IGVsc2UgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQkJCX0KKyNl
bmRpZgorI2Vsc2UKKwkJCQl4cmFkZHIucnR0ID0gbmV0LT5ydHQgLyAxMDAwOworCQkJCXhyYWRk
ci5oZWFydGJlYXRfaW50ZXJ2YWwgPSBuZXQtPmhlYXJ0X2JlYXRfZGVsYXk7CisJCQkJeHJhZGRy
LnNzdGhyZXNoID0gbmV0LT5zc3RocmVzaDsKKwkJCQl4cmFkZHIuZW5jYXBzX3BvcnQgPSBuZXQt
PnBvcnQ7CisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkg
eworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQX1VOQ09ORklSTUVEOworCQkJCX0gZWxzZSBpZiAo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQl4cmFkZHIuc3Rh
dGUgPSBTQ1RQX0FDVElWRTsKKwkJCQl9IGVsc2UgeworCQkJCQl4cmFkZHIuc3RhdGUgPSBTQ1RQ
X0lOQUNUSVZFOworCQkJCX0KKyNlbmRpZgorCQkJCXhyYWRkci5zdGFydF90aW1lLnR2X3NlYyA9
ICh1aW50MzJfdCluZXQtPnN0YXJ0X3RpbWUudHZfc2VjOworCQkJCXhyYWRkci5zdGFydF90aW1l
LnR2X3VzZWMgPSAodWludDMyX3QpbmV0LT5zdGFydF90aW1lLnR2X3VzZWM7CisJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCQkJCWVycm9y
ID0gU1lTQ1RMX09VVChyZXEsICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsK
KwkJCQlpZiAoZXJyb3IpIHsKKwkJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCQkJYXRv
bWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJCQlyZXR1cm4gKGVy
cm9yKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfSU5GT19STE9DSygpOworCQkJCVNDVFBfSU5QX1JM
T0NLKGlucCk7CisJCQl9CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNu
dCwgMSk7CisJCQltZW1zZXQoKHZvaWQgKikmeHJhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHhzY3Rw
X3JhZGRyKSk7CisJCQl4cmFkZHIubGFzdCA9IDE7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJCWVycm9yID0gU1lTQ1RMX09VVChyZXEs
ICZ4cmFkZHIsIHNpemVvZihzdHJ1Y3QgeHNjdHBfcmFkZHIpKTsKKwkJCWlmIChlcnJvcikgewor
CQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJcmV0dXJuIChlcnJvcik7CisJCQl9CisJ
CQlTQ1RQX0lOUF9JTkZPX1JMT0NLKCk7CisJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQl9CisJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NU
UF9JTlBfSU5GT19SVU5MT0NLKCk7CisJCW1lbXNldCgodm9pZCAqKSZ4c3RjYiwgMCwgc2l6ZW9m
KHN0cnVjdCB4c2N0cF90Y2IpKTsKKwkJeHN0Y2IubGFzdCA9IDE7CisJCWVycm9yID0gU1lTQ1RM
X09VVChyZXEsICZ4c3RjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF90Y2IpKTsKKwkJaWYgKGVycm9y
KSB7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorc2tpcDoKKwkJU0NUUF9JTlBfSU5GT19STE9D
SygpOworCX0KKwlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKworCW1lbXNldCgodm9pZCAqKSZ4
aW5wY2IsIDAsIHNpemVvZihzdHJ1Y3QgeHNjdHBfaW5wY2IpKTsKKwl4aW5wY2IubGFzdCA9IDE7
CisJZXJyb3IgPSBTWVNDVExfT1VUKHJlcSwgJnhpbnBjYiwgc2l6ZW9mKHN0cnVjdCB4c2N0cF9p
bnBjYikpOworCXJldHVybiAoZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitz
dGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdWRwX3R1bm5lbGluZyBTWVNDVExfSEFORExF
Ul9BUkdTCit7CisjcHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBpbnQK
K3NjdHBfc3lzY3RsX2hhbmRsZV91ZHBfdHVubmVsaW5nKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7
CisjZW5kaWYKKwlpbnQgZXJyb3I7CisJdWludDMyX3Qgb2xkLCBuZXc7CisKKwlTQ1RQX0lOUF9J
TkZPX1JMT0NLKCk7CisJb2xkID0gU0NUUF9CQVNFX1NZU0NUTChzY3RwX3VkcF90dW5uZWxpbmdf
cG9ydCk7CisJU0NUUF9JTlBfSU5GT19SVU5MT0NLKCk7CisJbmV3ID0gb2xkOworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDEwMDAxMDAKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZuZXRfc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKKyNlbHNlCisJZXJyb3IgPSBzeXNjdGxf
aGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworI2VuZGlmCisjZWxzZQorCWVycm9yID0g
c3lzY3RsX2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKKyNlbmRpZgorCWlmICgoZXJy
b3IgPT0gMCkgJiYKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisJICAgIChyZXEtPm5ld3B0ciAh
PSBVU0VSX0FERFJfTlVMTCkpIHsKKyNlbHNlCisJICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkg
eworI2VuZGlmCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU0NUUF9JTlBfSU5GT19XTE9D
SygpOworCQlzY3RwX292ZXJfdWRwX3Jlc3RhcnQoKTsKKwkJU0NUUF9JTlBfSU5GT19XVU5MT0NL
KCk7CisjZWxzZQorI2lmIChTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4gPT0gMCkKKwkJ
aWYgKG5ldyA+IFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUX01BWCkgeworI2Vsc2UKKwkJaWYg
KChuZXcgPCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9NSU4pIHx8CisJCSAgICAobmV3ID4g
U0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfTUFYKSkgeworI2VuZGlmCisJCQllcnJvciA9IEVJ
TlZBTDsKKwkJfSBlbHNlIHsKKwkJCVNDVFBfSU5QX0lORk9fV0xPQ0soKTsKKwkJCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpID0gbmV3OworCQkJaWYgKG9sZCAhPSAw
KSB7CisJCQkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7CisJCQl9CisJCQlpZiAobmV3ICE9IDApIHsK
KwkJCQllcnJvciA9IHNjdHBfb3Zlcl91ZHBfc3RhcnQoKTsKKwkJCX0KKwkJCVNDVFBfSU5QX0lO
Rk9fV1VOTE9DSygpOworCQl9CisjZW5kaWYKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKK2ludCBzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2Uoc3RydWN0
IGlmbmV0ICopOworCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdm13YXJlX2ludGVy
ZmFjZXMgU1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQoYXJnMSwgYXJnMikK
KwlpbnQgZXJyb3I7CisJdWludDMyX3Qgb2xkLCBuZXc7CisKKwlvbGQgPSBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzKTsKKwluZXcgPSBvbGQ7CisJZXJyb3Ig
PSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworCWlmICgoZXJyb3IgPT0g
MCkgJiYgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgeworCQlpZiAoKG5ldyA8IFND
VFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQ
Q1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19NQVgpKSB7CisJCQllcnJvciA9IEVJTlZBTDsK
KwkJfSBlbHNlIHsKKwkJCWlmICgob2xkID09IDEpICYmIChuZXcgPT0gMCkpIHsKKwkJCQlzY3Rw
X2FkZF9vcl9kZWxfaW50ZXJmYWNlcyhzY3RwX2lzX3Ztd2FyZV9pbnRlcmZhY2UsIDEpOworCQkJ
fQorCQkJaWYgKChvbGQgPT0gMCkgJiYgKG5ldyA9PSAxKSkgeworCQkJCXNjdHBfYWRkX29yX2Rl
bF9pbnRlcmZhY2VzKHNjdHBfaXNfdm13YXJlX2ludGVyZmFjZSwgMCk7CisJCQl9CisJCQlpZiAo
b2xkICE9IG5ldykgeworCQkJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pZ25vcmVfdm13YXJlX2lu
dGVyZmFjZXMpID0gbmV3OworCQkJfQorCQl9CisJfQorCXJldHVybiAoZXJyb3IpOworfQorI2Vu
ZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKK3N0YXRpYyBpbnQKK3NjdHBfc3lzY3RsX2hh
bmRsZV9hdXRoIFNZU0NUTF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFy
ZzIpCisjZWxzZQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2F1dGgoU1lTQ1RMX0hB
TkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBlcnJvcjsKKwl1aW50MzJfdCBuZXc7CisKKwlu
ZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXV0aF9lbmFibGUpOworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDA1NiAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA8IDEwMDAxMDAKKyNpZmRlZiBWSU1BR0UKKwllcnJvciA9IHZuZXRfc3lzY3RsX2hhbmRs
ZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKKyNlbHNlCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxl
X2ludChvaWRwLCAmbmV3LCAwLCByZXEpOworI2VuZGlmCisjZWxzZQorCWVycm9yID0gc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgJm5ldywgMCwgcmVxKTsKKyNlbmRpZgorCWlmICgoZXJyb3IgPT0g
MCkgJiYKKyNpZiBkZWZpbmVkIChfX0FQUExFX18pCisJICAgIChyZXEtPm5ld3B0ciAhPSBVU0VS
X0FERFJfTlVMTCkpIHsKKyNlbHNlCisJICAgIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgeworI2Vu
ZGlmCisjaWYgKFNDVFBDVExfQVVUSF9FTkFCTEVfTUlOID09IDApCisJCWlmICgobmV3ID4gU0NU
UENUTF9BVVRIX0VOQUJMRV9NQVgpIHx8CisJCSAgICAoKG5ldyA9PSAwKSAmJiAoU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpID09IDEpKSkgeworI2Vsc2UKKwkJaWYgKChuZXcg
PCBTQ1RQQ1RMX0FVVEhfRU5BQkxFX01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQQ1RMX0FVVEhf
RU5BQkxFX01BWCkgfHwKKwkJICAgICgobmV3ID09IDApICYmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYXNjb25mX2VuYWJsZSkgPT0gMSkpKSB7CisjZW5kaWYKKwkJCWVycm9yID0gRUlOVkFMOwor
CQl9IGVsc2UgeworCQkJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSA9IG5ldzsK
KwkJfQorCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQor
c3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2FzY29uZiBTWVNDVExfSEFORExFUl9BUkdT
Cit7CisjcHJhZ21hIHVudXNlZChhcmcxLCBhcmcyKQorI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHBf
c3lzY3RsX2hhbmRsZV9hc2NvbmYoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWlu
dCBlcnJvcjsKKwl1aW50MzJfdCBuZXc7CisKKwluZXcgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
YXNjb25mX2VuYWJsZSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3Zl
cnNpb24gPj0gODAwMDU2ICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDEwMAorI2lmZGVmIFZJ
TUFHRQorCWVycm9yID0gdm5ldF9zeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEp
OworI2Vsc2UKKwllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7
CisjZW5kaWYKKyNlbHNlCisJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAw
LCByZXEpOworI2VuZGlmCisJaWYgKChlcnJvciA9PSAwKSAmJgorI2lmIGRlZmluZWQgKF9fQVBQ
TEVfXykKKwkgICAgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9OVUxMKSkgeworI2Vsc2UKKwkg
ICAgKHJlcS0+bmV3cHRyICE9IE5VTEwpKSB7CisjZW5kaWYKKyNpZiAoU0NUUENUTF9BU0NPTkZf
RU5BQkxFX01JTiA9PSAwKQorCQlpZiAoKG5ldyA+IFNDVFBDVExfQVNDT05GX0VOQUJMRV9NQVgp
IHx8CisJCSAgICAoKG5ldyA9PSAxKSAmJiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5h
YmxlKSA9PSAwKSkpIHsKKyNlbHNlCisJCWlmICgobmV3IDwgU0NUUENUTF9BU0NPTkZfRU5BQkxF
X01JTikgfHwKKwkJICAgIChuZXcgPiBTQ1RQQ1RMX0FTQ09ORl9FTkFCTEVfTUFYKSB8fAorCQkg
ICAgKChuZXcgPT0gMSkgJiYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hdXRoX2VuYWJsZSkgPT0g
MCkpKSB7CisjZW5kaWYKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2FzY29uZl9lbmFibGUpID0gbmV3OworCQl9CisJfQorCXJldHVybiAo
ZXJyb3IpOworfQorCisjaWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwX3N5
c2N0bF9oYW5kbGVfc3RhdHMgU1lTQ1RMX0hBTkRMRVJfQVJHUworeworI3ByYWdtYSB1bnVzZWQo
b2lkcCwgYXJnMSwgYXJnMikKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVf
c3RhdHMoU1lTQ1RMX0hBTkRMRVJfQVJHUykKK3sKKyNlbmRpZgorCWludCBlcnJvcjsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNF
X1BFUkNQVV9TVEFUKQorCXN0cnVjdCBzY3Rwc3RhdCAqc2Fycnk7CisJc3RydWN0IHNjdHBzdGF0
IHNiOworCWludCBjcHU7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cHN0YXQgc2JfdGVtcDsKKyNlbmRp
ZgorCisjaWYgZGVmaW5lZCAoX19BUFBMRV9fKQorCWlmICgocmVxLT5uZXdwdHIgIT0gVVNFUl9B
RERSX05VTEwpICYmCisjZWxzZQorCWlmICgocmVxLT5uZXdwdHIgIT0gTlVMTCkgJiYKKyNlbmRp
ZgorCSAgICAocmVxLT5uZXdsZW4gIT0gc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpKSB7CisJCXJl
dHVybiAoRUlOVkFMKTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwltZW1zZXQoJnNi
X3RlbXAsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpKTsKKworCWlmIChyZXEtPm5ld3B0ciAh
PSBOVUxMKSB7CisJCWVycm9yID0gU1lTQ1RMX0lOKHJlcSwgJnNiX3RlbXAsIHNpemVvZihzdHJ1
Y3Qgc2N0cHN0YXQpKTsKKwkJaWYgKGVycm9yICE9IDApIHsKKwkJCXJldHVybiAoZXJyb3IpOwor
CQl9CisJfQorI2lmIGRlZmluZWQoU01QKSAmJiBkZWZpbmVkKFNDVFBfVVNFX1BFUkNQVV9TVEFU
KQorCW1lbXNldCgmc2IsIDAsIHNpemVvZihzYikpOworCWZvciAoY3B1ID0gMDsgY3B1IDwgbXBf
bWF4aWQ7IGNwdSsrKSB7CisJCXNhcnJ5ID0gJlNDVFBfQkFTRV9TVEFUU1tjcHVdOworCQlpZiAo
c2FycnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYyA+IHNiLnNjdHBzX2Rpc2NvbnRp
bnVpdHl0aW1lLnR2X3NlYykgeworCQkJc2Iuc2N0cHNfZGlzY29udGludWl0eXRpbWUudHZfc2Vj
ID0gc2FycnktPnNjdHBzX2Rpc2NvbnRpbnVpdHl0aW1lLnR2X3NlYzsKKwkJCXNiLnNjdHBzX2Rp
c2NvbnRpbnVpdHl0aW1lLnR2X3VzZWMgPSBzYXJyeS0+c2N0cHNfZGlzY29udGludWl0eXRpbWUu
dHZfdXNlYzsKKwkJfQorCQlzYi5zY3Rwc19jdXJyZXN0YWIgKz0gc2FycnktPnNjdHBzX2N1cnJl
c3RhYjsKKwkJc2Iuc2N0cHNfYWN0aXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX2FjdGl2ZWVzdGFi
OworCQlzYi5zY3Rwc19yZXN0YXJ0ZXN0YWIgKz0gc2FycnktPnNjdHBzX3Jlc3RhcnRlc3RhYjsK
KwkJc2Iuc2N0cHNfY29sbGlzaW9uZXN0YWIgKz0gc2FycnktPnNjdHBzX2NvbGxpc2lvbmVzdGFi
OworCQlzYi5zY3Rwc19wYXNzaXZlZXN0YWIgKz0gc2FycnktPnNjdHBzX3Bhc3NpdmVlc3RhYjsK
KwkJc2Iuc2N0cHNfYWJvcnRlZCArPSBzYXJyeS0+c2N0cHNfYWJvcnRlZDsKKwkJc2Iuc2N0cHNf
c2h1dGRvd24gKz0gc2FycnktPnNjdHBzX3NodXRkb3duOworCQlzYi5zY3Rwc19vdXRvZnRoZWJs
dWUgKz0gc2FycnktPnNjdHBzX291dG9mdGhlYmx1ZTsKKwkJc2Iuc2N0cHNfY2hlY2tzdW1lcnJv
cnMgKz0gc2FycnktPnNjdHBzX2NoZWNrc3VtZXJyb3JzOworCQlzYi5zY3Rwc19vdXRjb250cm9s
Y2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19vdXRjb250cm9sY2h1bmtzOworCQlzYi5zY3Rwc19vdXRv
cmRlcmNodW5rcyArPSBzYXJyeS0+c2N0cHNfb3V0b3JkZXJjaHVua3M7CisJCXNiLnNjdHBzX291
dHVub3JkZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX291dHVub3JkZXJjaHVua3M7CisJCXNiLnNj
dHBzX2luY29udHJvbGNodW5rcyArPSBzYXJyeS0+c2N0cHNfaW5jb250cm9sY2h1bmtzOworCQlz
Yi5zY3Rwc19pbm9yZGVyY2h1bmtzICs9IHNhcnJ5LT5zY3Rwc19pbm9yZGVyY2h1bmtzOworCQlz
Yi5zY3Rwc19pbnVub3JkZXJjaHVua3MgKz0gc2FycnktPnNjdHBzX2ludW5vcmRlcmNodW5rczsK
KwkJc2Iuc2N0cHNfZnJhZ3Vzcm1zZ3MgKz0gc2FycnktPnNjdHBzX2ZyYWd1c3Jtc2dzOworCQlz
Yi5zY3Rwc19yZWFzbXVzcm1zZ3MgKz0gc2FycnktPnNjdHBzX3JlYXNtdXNybXNnczsKKwkJc2Iu
c2N0cHNfb3V0cGFja2V0cyArPSBzYXJyeS0+c2N0cHNfb3V0cGFja2V0czsKKwkJc2Iuc2N0cHNf
aW5wYWNrZXRzICs9IHNhcnJ5LT5zY3Rwc19pbnBhY2tldHM7CisJCXNiLnNjdHBzX3JlY3ZwYWNr
ZXRzICs9IHNhcnJ5LT5zY3Rwc19yZWN2cGFja2V0czsKKwkJc2Iuc2N0cHNfcmVjdmRhdGFncmFt
cyArPSBzYXJyeS0+c2N0cHNfcmVjdmRhdGFncmFtczsKKwkJc2Iuc2N0cHNfcmVjdnBrdHdpdGhk
YXRhICs9IHNhcnJ5LT5zY3Rwc19yZWN2cGt0d2l0aGRhdGE7CisJCXNiLnNjdHBzX3JlY3ZzYWNr
cyArPSBzYXJyeS0+c2N0cHNfcmVjdnNhY2tzOworCQlzYi5zY3Rwc19yZWN2ZGF0YSArPSBzYXJy
eS0+c2N0cHNfcmVjdmRhdGE7CisJCXNiLnNjdHBzX3JlY3ZkdXBkYXRhICs9IHNhcnJ5LT5zY3Rw
c19yZWN2ZHVwZGF0YTsKKwkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdCArPSBzYXJyeS0+c2N0cHNf
cmVjdmhlYXJ0YmVhdDsKKwkJc2Iuc2N0cHNfcmVjdmhlYXJ0YmVhdGFjayArPSBzYXJyeS0+c2N0
cHNfcmVjdmhlYXJ0YmVhdGFjazsKKwkJc2Iuc2N0cHNfcmVjdmVjbmUgKz0gc2FycnktPnNjdHBz
X3JlY3ZlY25lOworCQlzYi5zY3Rwc19yZWN2YXV0aCArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGg7
CisJCXNiLnNjdHBzX3JlY3ZhdXRobWlzc2luZyArPSBzYXJyeS0+c2N0cHNfcmVjdmF1dGhtaXNz
aW5nOworCQlzYi5zY3Rwc19yZWN2aXZhbGhtYWNpZCArPSBzYXJyeS0+c2N0cHNfcmVjdml2YWxo
bWFjaWQ7CisJCXNiLnNjdHBzX3JlY3ZpdmFsa2V5aWQgKz0gc2FycnktPnNjdHBzX3JlY3ZpdmFs
a2V5aWQ7CisJCXNiLnNjdHBzX3JlY3ZhdXRoZmFpbGVkICs9IHNhcnJ5LT5zY3Rwc19yZWN2YXV0
aGZhaWxlZDsKKwkJc2Iuc2N0cHNfcmVjdmV4cHJlc3MgKz0gc2FycnktPnNjdHBzX3JlY3ZleHBy
ZXNzOworCQlzYi5zY3Rwc19yZWN2ZXhwcmVzc20gKz0gc2FycnktPnNjdHBzX3JlY3ZleHByZXNz
bTsKKwkJc2Iuc2N0cHNfcmVjdnN3Y3JjICs9IHNhcnJ5LT5zY3Rwc19yZWN2c3djcmM7CisJCXNi
LnNjdHBzX3JlY3Zod2NyYyArPSBzYXJyeS0+c2N0cHNfcmVjdmh3Y3JjOworCQlzYi5zY3Rwc19z
ZW5kcGFja2V0cyArPSBzYXJyeS0+c2N0cHNfc2VuZHBhY2tldHM7CisJCXNiLnNjdHBzX3NlbmRz
YWNrcyArPSBzYXJyeS0+c2N0cHNfc2VuZHNhY2tzOworCQlzYi5zY3Rwc19zZW5kZGF0YSArPSBz
YXJyeS0+c2N0cHNfc2VuZGRhdGE7CisJCXNiLnNjdHBzX3NlbmRyZXRyYW5zZGF0YSArPSBzYXJy
eS0+c2N0cHNfc2VuZHJldHJhbnNkYXRhOworCQlzYi5zY3Rwc19zZW5kZmFzdHJldHJhbnMgKz0g
c2FycnktPnNjdHBzX3NlbmRmYXN0cmV0cmFuczsKKwkJc2Iuc2N0cHNfc2VuZG11bHRmYXN0cmV0
cmFucyArPSBzYXJyeS0+c2N0cHNfc2VuZG11bHRmYXN0cmV0cmFuczsKKwkJc2Iuc2N0cHNfc2Vu
ZGhlYXJ0YmVhdCArPSBzYXJyeS0+c2N0cHNfc2VuZGhlYXJ0YmVhdDsKKwkJc2Iuc2N0cHNfc2Vu
ZGVjbmUgKz0gc2FycnktPnNjdHBzX3NlbmRlY25lOworCQlzYi5zY3Rwc19zZW5kYXV0aCArPSBz
YXJyeS0+c2N0cHNfc2VuZGF1dGg7CisJCXNiLnNjdHBzX3NlbmRlcnJvcnMgKz0gc2FycnktPnNj
dHBzX3NlbmRlcnJvcnM7CisJCXNiLnNjdHBzX3NlbmRzd2NyYyArPSBzYXJyeS0+c2N0cHNfc2Vu
ZHN3Y3JjOworCQlzYi5zY3Rwc19zZW5kaHdjcmMgKz0gc2FycnktPnNjdHBzX3NlbmRod2NyYzsK
KwkJc2Iuc2N0cHNfcGRycGZtYm94ICs9IHNhcnJ5LT5zY3Rwc19wZHJwZm1ib3g7CisJCXNiLnNj
dHBzX3BkcnBmZWhvcyArPSBzYXJyeS0+c2N0cHNfcGRycGZlaG9zOworCQlzYi5zY3Rwc19wZHJw
bWJkYSArPSBzYXJyeS0+c2N0cHNfcGRycG1iZGE7CisJCXNiLnNjdHBzX3BkcnBtYmN0ICs9IHNh
cnJ5LT5zY3Rwc19wZHJwbWJjdDsKKwkJc2Iuc2N0cHNfcGRycGJ3cnB0ICs9IHNhcnJ5LT5zY3Rw
c19wZHJwYndycHQ7CisJCXNiLnNjdHBzX3BkcnBjcnVwdCArPSBzYXJyeS0+c2N0cHNfcGRycGNy
dXB0OworCQlzYi5zY3Rwc19wZHJwbmVkYXQgKz0gc2FycnktPnNjdHBzX3BkcnBuZWRhdDsKKwkJ
c2Iuc2N0cHNfcGRycHBkYnJrICs9IHNhcnJ5LT5zY3Rwc19wZHJwcGRicms7CisJCXNiLnNjdHBz
X3BkcnB0c25uZiArPSBzYXJyeS0+c2N0cHNfcGRycHRzbm5mOworCQlzYi5zY3Rwc19wZHJwZG5m
bmQgKz0gc2FycnktPnNjdHBzX3BkcnBkbmZuZDsKKwkJc2Iuc2N0cHNfcGRycGRpd25wICs9IHNh
cnJ5LT5zY3Rwc19wZHJwZGl3bnA7CisJCXNiLnNjdHBzX3BkcnBkaXpydyArPSBzYXJyeS0+c2N0
cHNfcGRycGRpenJ3OworCQlzYi5zY3Rwc19wZHJwYmFkZCArPSBzYXJyeS0+c2N0cHNfcGRycGJh
ZGQ7CisJCXNiLnNjdHBzX3BkcnBtYXJrICs9IHNhcnJ5LT5zY3Rwc19wZHJwbWFyazsKKwkJc2Iu
c2N0cHNfdGltb2l0ZXJhdG9yICs9IHNhcnJ5LT5zY3Rwc190aW1vaXRlcmF0b3I7CisJCXNiLnNj
dHBzX3RpbW9kYXRhICs9IHNhcnJ5LT5zY3Rwc190aW1vZGF0YTsKKwkJc2Iuc2N0cHNfdGltb3dp
bmRvd3Byb2JlICs9IHNhcnJ5LT5zY3Rwc190aW1vd2luZG93cHJvYmU7CisJCXNiLnNjdHBzX3Rp
bW9pbml0ICs9IHNhcnJ5LT5zY3Rwc190aW1vaW5pdDsKKwkJc2Iuc2N0cHNfdGltb3NhY2sgKz0g
c2FycnktPnNjdHBzX3RpbW9zYWNrOworCQlzYi5zY3Rwc190aW1vc2h1dGRvd24gKz0gc2Fycnkt
PnNjdHBzX3RpbW9zaHV0ZG93bjsKKwkJc2Iuc2N0cHNfdGltb2hlYXJ0YmVhdCArPSBzYXJyeS0+
c2N0cHNfdGltb2hlYXJ0YmVhdDsKKwkJc2Iuc2N0cHNfdGltb2Nvb2tpZSArPSBzYXJyeS0+c2N0
cHNfdGltb2Nvb2tpZTsKKwkJc2Iuc2N0cHNfdGltb3NlY3JldCArPSBzYXJyeS0+c2N0cHNfdGlt
b3NlY3JldDsKKwkJc2Iuc2N0cHNfdGltb3BhdGhtdHUgKz0gc2FycnktPnNjdHBzX3RpbW9wYXRo
bXR1OworCQlzYi5zY3Rwc190aW1vc2h1dGRvd25hY2sgKz0gc2FycnktPnNjdHBzX3RpbW9zaHV0
ZG93bmFjazsKKwkJc2Iuc2N0cHNfdGltb3NodXRkb3duZ3VhcmQgKz0gc2FycnktPnNjdHBzX3Rp
bW9zaHV0ZG93bmd1YXJkOworCQlzYi5zY3Rwc190aW1vc3RybXJzdCArPSBzYXJyeS0+c2N0cHNf
dGltb3N0cm1yc3Q7CisJCXNiLnNjdHBzX3RpbW9lYXJseWZyICs9IHNhcnJ5LT5zY3Rwc190aW1v
ZWFybHlmcjsKKwkJc2Iuc2N0cHNfdGltb2FzY29uZiArPSBzYXJyeS0+c2N0cHNfdGltb2FzY29u
ZjsKKwkJc2Iuc2N0cHNfdGltb2RlbHByaW0gKz0gc2FycnktPnNjdHBzX3RpbW9kZWxwcmltOwor
CQlzYi5zY3Rwc190aW1vYXV0b2Nsb3NlICs9IHNhcnJ5LT5zY3Rwc190aW1vYXV0b2Nsb3NlOwor
CQlzYi5zY3Rwc190aW1vYXNzb2NraWxsICs9IHNhcnJ5LT5zY3Rwc190aW1vYXNzb2NraWxsOwor
CQlzYi5zY3Rwc190aW1vaW5wa2lsbCArPSBzYXJyeS0+c2N0cHNfdGltb2lucGtpbGw7CisJCXNi
LnNjdHBzX2hkcm9wcyArPSBzYXJyeS0+c2N0cHNfaGRyb3BzOworCQlzYi5zY3Rwc19iYWRzdW0g
Kz0gc2FycnktPnNjdHBzX2JhZHN1bTsKKwkJc2Iuc2N0cHNfbm9wb3J0ICs9IHNhcnJ5LT5zY3Rw
c19ub3BvcnQ7CisJCXNiLnNjdHBzX2JhZHZ0YWcgKz0gc2FycnktPnNjdHBzX2JhZHZ0YWc7CisJ
CXNiLnNjdHBzX2JhZHNpZCArPSBzYXJyeS0+c2N0cHNfYmFkc2lkOworCQlzYi5zY3Rwc19ub21l
bSArPSBzYXJyeS0+c2N0cHNfbm9tZW07CisJCXNiLnNjdHBzX2Zhc3RyZXRyYW5zaW5ydHQgKz0g
c2FycnktPnNjdHBzX2Zhc3RyZXRyYW5zaW5ydHQ7CisJCXNiLnNjdHBzX21hcmtlZHJldHJhbnMg
Kz0gc2FycnktPnNjdHBzX21hcmtlZHJldHJhbnM7CisJCXNiLnNjdHBzX25hZ2xlc2VudCArPSBz
YXJyeS0+c2N0cHNfbmFnbGVzZW50OworCQlzYi5zY3Rwc19uYWdsZXF1ZXVlZCArPSBzYXJyeS0+
c2N0cHNfbmFnbGVxdWV1ZWQ7CisJCXNiLnNjdHBzX21heGJ1cnN0cXVldWVkICs9IHNhcnJ5LT5z
Y3Rwc19tYXhidXJzdHF1ZXVlZDsKKwkJc2Iuc2N0cHNfaWZub21lbXF1ZXVlZCArPSBzYXJyeS0+
c2N0cHNfaWZub21lbXF1ZXVlZDsKKwkJc2Iuc2N0cHNfd2luZG93cHJvYmVkICs9IHNhcnJ5LT5z
Y3Rwc193aW5kb3dwcm9iZWQ7CisJCXNiLnNjdHBzX2xvd2xldmVsZXJyICs9IHNhcnJ5LT5zY3Rw
c19sb3dsZXZlbGVycjsKKwkJc2Iuc2N0cHNfbG93bGV2ZWxlcnJ1c3IgKz0gc2FycnktPnNjdHBz
X2xvd2xldmVsZXJydXNyOworCQlzYi5zY3Rwc19kYXRhZHJvcGNoa2xtdCArPSBzYXJyeS0+c2N0
cHNfZGF0YWRyb3BjaGtsbXQ7CisJCXNiLnNjdHBzX2RhdGFkcm9wcnduZCArPSBzYXJyeS0+c2N0
cHNfZGF0YWRyb3Byd25kOworCQlzYi5zY3Rwc19lY25lcmVkdWNlZGN3bmQgKz0gc2FycnktPnNj
dHBzX2VjbmVyZWR1Y2VkY3duZDsKKwkJc2Iuc2N0cHNfdnRhZ2V4cHJlc3MgKz0gc2FycnktPnNj
dHBzX3Z0YWdleHByZXNzOworCQlzYi5zY3Rwc192dGFnYm9ndXMgKz0gc2FycnktPnNjdHBzX3Z0
YWdib2d1czsKKwkJc2Iuc2N0cHNfcHJpbWFyeV9yYW5kcnkgKz0gc2FycnktPnNjdHBzX3ByaW1h
cnlfcmFuZHJ5OworCQlzYi5zY3Rwc19jbXRfcmFuZHJ5ICs9IHNhcnJ5LT5zY3Rwc19jbXRfcmFu
ZHJ5OworCQlzYi5zY3Rwc19zbG93cGF0aF9zYWNrICs9IHNhcnJ5LT5zY3Rwc19zbG93cGF0aF9z
YWNrOworCQlzYi5zY3Rwc193dV9zYWNrc19zZW50ICs9IHNhcnJ5LT5zY3Rwc193dV9zYWNrc19z
ZW50OworCQlzYi5zY3Rwc19zZW5kc193aXRoX2ZsYWdzICs9IHNhcnJ5LT5zY3Rwc19zZW5kc193
aXRoX2ZsYWdzOworCQlzYi5zY3Rwc19zZW5kc193aXRoX3Vub3JkICs9IHNhcnJ5LT5zY3Rwc19z
ZW5kc193aXRoX3Vub3JkOworCQlzYi5zY3Rwc19zZW5kc193aXRoX2VvZiArPSBzYXJyeS0+c2N0
cHNfc2VuZHNfd2l0aF9lb2Y7CisJCXNiLnNjdHBzX3NlbmRzX3dpdGhfYWJvcnQgKz0gc2Fycnkt
PnNjdHBzX3NlbmRzX3dpdGhfYWJvcnQ7CisJCXNiLnNjdHBzX3Byb3RvY29sX2RyYWluX2NhbGxz
ICs9IHNhcnJ5LT5zY3Rwc19wcm90b2NvbF9kcmFpbl9jYWxsczsKKwkJc2Iuc2N0cHNfcHJvdG9j
b2xfZHJhaW5zX2RvbmUgKz0gc2FycnktPnNjdHBzX3Byb3RvY29sX2RyYWluc19kb25lOworCQlz
Yi5zY3Rwc19yZWFkX3BlZWtzICs9IHNhcnJ5LT5zY3Rwc19yZWFkX3BlZWtzOworCQlzYi5zY3Rw
c19jYWNoZWRfY2hrICs9IHNhcnJ5LT5zY3Rwc19jYWNoZWRfY2hrOworCQlzYi5zY3Rwc19jYWNo
ZWRfc3RybW9xICs9IHNhcnJ5LT5zY3Rwc19jYWNoZWRfc3RybW9xOworCQlzYi5zY3Rwc19sZWZ0
X2FiYW5kb24gKz0gc2FycnktPnNjdHBzX2xlZnRfYWJhbmRvbjsKKwkJc2Iuc2N0cHNfc2VuZF9i
dXJzdF9hdm9pZCArPSBzYXJyeS0+c2N0cHNfc2VuZF9idXJzdF9hdm9pZDsKKwkJc2Iuc2N0cHNf
c2VuZF9jd25kX2F2b2lkICs9IHNhcnJ5LT5zY3Rwc19zZW5kX2N3bmRfYXZvaWQ7CisJCXNiLnNj
dHBzX2Z3ZHRzbl9tYXBfb3ZlciArPSBzYXJyeS0+c2N0cHNfZndkdHNuX21hcF9vdmVyOworCQlp
ZiAocmVxLT5uZXdwdHIgIT0gTlVMTCkgeworCQkJbWVtY3B5KHNhcnJ5LCAmc2JfdGVtcCwgc2l6
ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpOworCQl9CisJfQorCWVycm9yID0gU1lTQ1RMX09VVChyZXEs
ICZzYiwgc2l6ZW9mKHN0cnVjdCBzY3Rwc3RhdCkpOworI2Vsc2UKKwllcnJvciA9IFNZU0NUTF9P
VVQocmVxLCAmU0NUUF9CQVNFX1NUQVRTLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisJaWYg
KGVycm9yICE9IDApIHsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlmIChyZXEtPm5ld3B0ciAh
PSBOVUxMKSB7CisJCW1lbWNweSgmU0NUUF9CQVNFX1NUQVRTLCAmc2JfdGVtcCwgc2l6ZW9mKHN0
cnVjdCBzY3Rwc3RhdCkpOworCX0KKyNlbmRpZgorI2Vsc2UKKwllcnJvciA9IFNZU0NUTF9PVVQo
cmVxLCAmU0NUUF9CQVNFX1NUQVRTLCBzaXplb2Yoc3RydWN0IHNjdHBzdGF0KSk7CisjZW5kaWYK
KwlyZXR1cm4gKGVycm9yKTsKK30KKworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYp
CisjaWYgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVf
dHJhY2VfbG9nIFNZU0NUTF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFy
ZzIsIG9pZHApCisjZWxzZQorc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xv
ZyhTWVNDVExfSEFORExFUl9BUkdTKQoreworI2VuZGlmCisJaW50IGVycm9yOworCisjaWYgZGVm
aW5lZChfX1dpbmRvd3NfXykKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCBTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKSwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOworI2Vsc2UKKwllcnJvciA9
IFNZU0NUTF9PVVQocmVxLCAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyksIHNpemVvZihzdHJ1
Y3Qgc2N0cF9sb2cpKTsKKyNlbmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9nX2Ns
ZWFyIFNZU0NUTF9IQU5ETEVSX0FSR1MKK3sKKyNwcmFnbWEgdW51c2VkKGFyZzEsIGFyZzIsIHJl
cSwgb2lkcCkKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwX3N5c2N0bF9oYW5kbGVfdHJhY2VfbG9n
X2NsZWFyKFNZU0NUTF9IQU5ETEVSX0FSR1MpCit7CisjZW5kaWYKKwlpbnQgZXJyb3IgPSAwOwor
I2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisJaW50IHZhbHVlID0gMDsKKworCWlmIChyZXEtPm5l
d19kYXRhID09IE5VTEwpIHsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWVycm9yID0gU1lTQ1RM
X0lOKHJlcSwgJnZhbHVlLCBzaXplb2YoaW50KSk7CisJaWYgKGVycm9yID09IDAgJiYgdmFsdWUg
IT0gMCAmJiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSAhPSBOVUxMKSB7CisJCW1lbXNldChT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2xvZykpOwor
CX0KKyNlbHNlCisKKwltZW1zZXQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCAwLCBzaXpl
b2Yoc3RydWN0IHNjdHBfbG9nKSk7CisjZW5kaWYKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRp
ZgorCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwNTYgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPCAxMDAwMTAwCisjaWZkZWYgVklNQUdFCisjZGVmaW5lIFNDVFBf
VUlOVF9TWVNDVEwobmFtZSwgdmFyX25hbWUsIHByZWZpeCkJCQlcCisJc3RhdGljIGludAkJCQkJ
CQlcCisJc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUoU1lTQ1RMX0hBTkRMRVJfQVJHUykJ
CVwKKwl7CQkJCQkJCQlcCisJCWludCBlcnJvcjsJCQkJCQlcCisJCXVpbnQzMl90IG5ldzsJCQkJ
CQlcCisJCQkJCQkJCQlcCisJCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpOwkJCVwK
KwkJZXJyb3IgPSB2bmV0X3N5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJlcSk7CVwK
KwkJaWYgKChlcnJvciA9PSAwKSAmJiAocmVxLT5uZXdwdHIgIT0gTlVMTCkpIHsJCVwKKwkJCWlm
ICgobmV3IDwgcHJlZml4IyNfTUlOKSB8fAkJCVwKKwkJCSAgICAobmV3ID4gcHJlZml4IyNfTUFY
KSkgewkJCVwKKwkJCQllcnJvciA9IEVJTlZBTDsJCQkJXAorCQkJfSBlbHNlIHsJCQkJCVwKKwkJ
CQlTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKSA9IG5ldzsJXAorCQkJfQkJCQkJCVwKKwkJfQkJ
CQkJCQlcCisJCXJldHVybiAoZXJyb3IpOwkJCQkJCVwKKwl9CQkJCQkJCQlcCisJU1lTQ1RMX1BS
T0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBtaWJfbmFtZSwJCQlcCisJICAgICAgICAgICAg
ICAgICBDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywgTlVMTCwgMCwJCVwKKwkgICAgICAgICAgICAg
ICAgIHNjdHBfc3lzY3RsX2hhbmRsZV8jI21pYl9uYW1lLCAiVUkiLCBwcmVmaXgjI19ERVNDKTsK
KyNlbHNlCisjZGVmaW5lIFNDVFBfVUlOVF9TWVNDVEwobWliX25hbWUsIHZhcl9uYW1lLCBwcmVm
aXgpCQkJXAorCXN0YXRpYyBpbnQJCQkJCQkJXAorCXNjdHBfc3lzY3RsX2hhbmRsZV8jI21pYl9u
YW1lKFNZU0NUTF9IQU5ETEVSX0FSR1MpCQlcCisJewkJCQkJCQkJXAorCQlpbnQgZXJyb3I7CQkJ
CQkJXAorCQl1aW50MzJfdCBuZXc7CQkJCQkJXAorCQkJCQkJCQkJXAorCQluZXcgPSBTQ1RQX0JB
U0VfU1lTQ1RMKHZhcl9uYW1lKTsJCQlcCisJCWVycm9yID0gc3lzY3RsX2hhbmRsZV9pbnQob2lk
cCwgJm5ldywgMCwgcmVxKTsJCVwKKwkJaWYgKChlcnJvciA9PSAwKSAmJiAocmVxLT5uZXdwdHIg
IT0gTlVMTCkpIHsJCVwKKwkJCWlmICgobmV3IDwgcHJlZml4IyNfTUlOKSB8fAkJCVwKKwkJCSAg
ICAobmV3ID4gcHJlZml4IyNfTUFYKSkgewkJCVwKKwkJCQllcnJvciA9IEVJTlZBTDsJCQkJXAor
CQkJfSBlbHNlIHsJCQkJCVwKKwkJCQlTQ1RQX0JBU0VfU1lTQ1RMKHZhcl9uYW1lKSA9IG5ldzsJ
XAorCQkJfQkJCQkJCVwKKwkJfQkJCQkJCQlcCisJCXJldHVybiAoZXJyb3IpOwkJCQkJCVwKKwl9
CQkJCQkJCQlcCisJU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBtaWJfbmFt
ZSwJCQlcCisJICAgICAgICAgICAgICAgICBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5UfENUTEZM
QUdfUlcsIE5VTEwsIDAsCVwKKwkgICAgICAgICAgICAgICAgIHNjdHBfc3lzY3RsX2hhbmRsZV8j
I21pYl9uYW1lLCAiVUkiLCBwcmVmaXgjI19ERVNDKTsKKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUg
U0NUUF9VSU5UX1NZU0NUTChtaWJfbmFtZSwgdmFyX25hbWUsIHByZWZpeCkJCQlcCisJc3RhdGlj
IGludAkJCQkJCQlcCisJc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUoU1lTQ1RMX0hBTkRM
RVJfQVJHUykJCVwKKwl7CQkJCQkJCQlcCisJCWludCBlcnJvcjsJCQkJCQlcCisJCXVpbnQzMl90
IG5ldzsJCQkJCQlcCisJCQkJCQkJCQlcCisJCW5ldyA9IFNDVFBfQkFTRV9TWVNDVEwodmFyX25h
bWUpOwkJCVwKKwkJZXJyb3IgPSBzeXNjdGxfaGFuZGxlX2ludChvaWRwLCAmbmV3LCAwLCByZXEp
OwkJXAorCQlpZiAoKGVycm9yID09IDApICYmIChyZXEtPm5ld3B0ciAhPSBOVUxMKSkgewkJXAor
CQkJaWYgKChuZXcgPCBwcmVmaXgjI19NSU4pIHx8CQkJXAorCQkJICAgIChuZXcgPiBwcmVmaXgj
I19NQVgpKSB7CQkJXAorCQkJCWVycm9yID0gRUlOVkFMOwkJCQlcCisJCQl9IGVsc2UgewkJCQkJ
XAorCQkJCVNDVFBfQkFTRV9TWVNDVEwodmFyX25hbWUpID0gbmV3OwlcCisJCQl9CQkJCQkJXAor
CQl9CQkJCQkJCVwKKwkJcmV0dXJuIChlcnJvcik7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwlTWVND
VExfUFJPQyhfbmV0X2luZXRfc2N0cCwgT0lEX0FVVE8sIG1pYl9uYW1lLAkJCVwKKwkgICAgICAg
ICAgICAgICAgIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlR8Q1RMRkxBR19SVywgTlVMTCwgMCwJ
XAorCSAgICAgICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJVSSIs
IHByZWZpeCMjX0RFU0MpOworI2VuZGlmCisjZWxzZQorI2RlZmluZSBTQ1RQX1VJTlRfU1lTQ1RM
KG1pYl9uYW1lLCB2YXJfbmFtZSwgcHJlZml4KQkJCVwKKwlzdGF0aWMgaW50CQkJCQkJCVwKKwlz
Y3RwX3N5c2N0bF9oYW5kbGVfIyNtaWJfbmFtZShzdHJ1Y3Qgc3lzY3RsX29pZCAqb2lkcCwJCVwK
KwkgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZzEgX19hdHRyaWJ1dGVfXygodW51
c2VkKSksCVwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhcmcyIF9fYXR0cmlidXRl
X18oKHVudXNlZCkpLAlcCisJICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzY3Rs
X3JlcSAqcmVxKQkJXAorCXsJCQkJCQkJCVwKKwkJaW50IGVycm9yOwkJCQkJCVwKKwkJdWludDMy
X3QgbmV3OwkJCQkJCVwKKwkJCQkJCQkJCVwKKwkJbmV3ID0gU0NUUF9CQVNFX1NZU0NUTCh2YXJf
bmFtZSk7CQkJXAorCQllcnJvciA9IHN5c2N0bF9oYW5kbGVfaW50KG9pZHAsICZuZXcsIDAsIHJl
cSk7CQlcCisJCWlmICgoZXJyb3IgPT0gMCkgJiYgKHJlcS0+bmV3cHRyICE9IFVTRVJfQUREUl9O
VUxMKSkgewlcCisJCQlpZiAoKG5ldyA8IHByZWZpeCMjX01JTikgfHwJCQlcCisJCQkgICAgKG5l
dyA+IHByZWZpeCMjX01BWCkpIHsJCQlcCisJCQkJZXJyb3IgPSBFSU5WQUw7CQkJCVwKKwkJCX0g
ZWxzZSB7CQkJCQlcCisJCQkJU0NUUF9CQVNFX1NZU0NUTCh2YXJfbmFtZSkgPSBuZXc7CVwKKwkJ
CX0JCQkJCQlcCisJCX0JCQkJCQkJXAorCQlyZXR1cm4gKGVycm9yKTsJCQkJCQlcCisJfQkJCQkJ
CQkJXAorCVNZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgbWliX25hbWUsCQkJ
XAorCSAgICAgICAgICAgIENUTFRZUEVfSU5UIHwgQ1RMRkxBR19SVywgTlVMTCwgMCwJCQlcCisJ
ICAgICAgICAgICAgc2N0cF9zeXNjdGxfaGFuZGxlXyMjbWliX25hbWUsICJJIiwgcHJlZml4IyNf
REVTQyk7CisjZGVmaW5lIENUTFRZUEVfVUlOVCBDVExUWVBFX0lOVAorI2RlZmluZSBDVExGTEFH
X1ZORVQgMAorI2VuZGlmCisKKy8qCisgKiBzeXNjdGwgZGVmaW5pdGlvbnMKKyAqLworCitTQ1RQ
X1VJTlRfU1lTQ1RMKHNlbmRzcGFjZSwgc2N0cF9zZW5kc3BhY2UsIFNDVFBDVExfTUFYREdSQU0p
CitTQ1RQX1VJTlRfU1lTQ1RMKHJlY3ZzcGFjZSwgc2N0cF9yZWN2c3BhY2UsIFNDVFBDVExfUkVD
VlNQQUNFKQorU0NUUF9VSU5UX1NZU0NUTChhdXRvX2FzY29uZiwgc2N0cF9hdXRvX2FzY29uZiwg
U0NUUENUTF9BVVRPQVNDT05GKQorU0NUUF9VSU5UX1NZU0NUTChlY25fZW5hYmxlLCBzY3RwX2Vj
bl9lbmFibGUsIFNDVFBDVExfRUNOX0VOQUJMRSkKK1NDVFBfVUlOVF9TWVNDVEwocHJfZW5hYmxl
LCBzY3RwX3ByX2VuYWJsZSwgU0NUUENUTF9QUl9FTkFCTEUpCitTWVNDVExfUFJPQyhfbmV0X2lu
ZXRfc2N0cCwgT0lEX0FVVE8sIGF1dGhfZW5hYmxlLCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9VSU5U
fENUTEZMQUdfUlcsCisgICAgICAgICAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfYXV0
aCwgIklVIiwgU0NUUENUTF9BVVRIX0VOQUJMRV9ERVNDKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5l
dF9zY3RwLCBPSURfQVVUTywgYXNjb25mX2VuYWJsZSwgQ1RMRkxBR19WTkVUfENUTFRZUEVfVUlO
VHxDVExGTEFHX1JXLAorICAgICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2Fz
Y29uZiwgIklVIiwgU0NUUENUTF9BU0NPTkZfRU5BQkxFX0RFU0MpOworU0NUUF9VSU5UX1NZU0NU
TChyZWNvbmZpZ19lbmFibGUsIHNjdHBfcmVjb25maWdfZW5hYmxlLCBTQ1RQQ1RMX1JFQ09ORklH
X0VOQUJMRSkKK1NDVFBfVUlOVF9TWVNDVEwobnJzYWNrX2VuYWJsZSwgc2N0cF9ucnNhY2tfZW5h
YmxlLCBTQ1RQQ1RMX05SU0FDS19FTkFCTEUpCitTQ1RQX1VJTlRfU1lTQ1RMKHBrdGRyb3BfZW5h
YmxlLCBzY3RwX3BrdGRyb3BfZW5hYmxlLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFKQorI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQorU0NUUF9VSU5UX1NZU0NUTChsb29wYmFja19ub2NzdW0sIHNjdHBf
bm9fY3N1bV9vbl9sb29wYmFjaywgU0NUUENUTF9MT09QQkFDS19OT0NTVU0pCisjZW5kaWYKK1ND
VFBfVUlOVF9TWVNDVEwocGVlcl9jaGtvaCwgc2N0cF9wZWVyX2NodW5rX29oLCBTQ1RQQ1RMX1BF
RVJfQ0hLT0gpCitTQ1RQX1VJTlRfU1lTQ1RMKG1heGJ1cnN0LCBzY3RwX21heF9idXJzdF9kZWZh
dWx0LCBTQ1RQQ1RMX01BWEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTChmcl9tYXhidXJzdCwgc2N0
cF9mcl9tYXhfYnVyc3RfZGVmYXVsdCwgU0NUUENUTF9GUk1BWEJVUlNUKQorU0NUUF9VSU5UX1NZ
U0NUTChtYXhjaHVua3MsIHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSwgU0NUUENUTF9NQVhDSFVO
S1MpCitTQ1RQX1VJTlRfU1lTQ1RMKHRjYmhhc2hzaXplLCBzY3RwX2hhc2h0YmxzaXplLCBTQ1RQ
Q1RMX1RDQkhBU0hTSVpFKQorU0NUUF9VSU5UX1NZU0NUTChwY2JoYXNoc2l6ZSwgc2N0cF9wY2J0
YmxzaXplLCBTQ1RQQ1RMX1BDQkhBU0hTSVpFKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fc3BsaXRf
cG9pbnQsIHNjdHBfbWluX3NwbGl0X3BvaW50LCBTQ1RQQ1RMX01JTl9TUExJVF9QT0lOVCkKK1ND
VFBfVUlOVF9TWVNDVEwoY2h1bmtzY2FsZSwgc2N0cF9jaHVua3NjYWxlLCBTQ1RQQ1RMX0NIVU5L
U0NBTEUpCitTQ1RQX1VJTlRfU1lTQ1RMKGRlbGF5ZWRfc2Fja190aW1lLCBzY3RwX2RlbGF5ZWRf
c2Fja190aW1lX2RlZmF1bHQsIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUUpCitTQ1RQX1VJTlRf
U1lTQ1RMKHNhY2tfZnJlcSwgc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCwgU0NUUENUTF9TQUNLX0ZS
RVEpCitTQ1RQX1VJTlRfU1lTQ1RMKHN5c19yZXNvdXJjZSwgc2N0cF9zeXN0ZW1fZnJlZV9yZXNj
X2xpbWl0LCBTQ1RQQ1RMX1NZU19SRVNPVVJDRSkKK1NDVFBfVUlOVF9TWVNDVEwoYXNvY19yZXNv
dXJjZSwgc2N0cF9hc29jX2ZyZWVfcmVzY19saW1pdCwgU0NUUENUTF9BU09DX1JFU09VUkNFKQor
U0NUUF9VSU5UX1NZU0NUTChoZWFydGJlYXRfaW50ZXJ2YWwsIHNjdHBfaGVhcnRiZWF0X2ludGVy
dmFsX2RlZmF1bHQsIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMKQorU0NUUF9VSU5UX1NZU0NU
TChwbXR1X3JhaXNlX3RpbWUsIHNjdHBfcG10dV9yYWlzZV90aW1lX2RlZmF1bHQsIFNDVFBDVExf
UE1UVV9SQUlTRV9USU1FKQorU0NUUF9VSU5UX1NZU0NUTChzaHV0ZG93bl9ndWFyZF90aW1lLCBz
Y3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCwgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9U
SU1FKQorU0NUUF9VSU5UX1NZU0NUTChzZWNyZXRfbGlmZXRpbWUsIHNjdHBfc2VjcmV0X2xpZmV0
aW1lX2RlZmF1bHQsIFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FKQorU0NUUF9VSU5UX1NZU0NUTChy
dG9fbWF4LCBzY3RwX3J0b19tYXhfZGVmYXVsdCwgU0NUUENUTF9SVE9fTUFYKQorU0NUUF9VSU5U
X1NZU0NUTChydG9fbWluLCBzY3RwX3J0b19taW5fZGVmYXVsdCwgU0NUUENUTF9SVE9fTUlOKQor
U0NUUF9VSU5UX1NZU0NUTChydG9faW5pdGlhbCwgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0LCBT
Q1RQQ1RMX1JUT19JTklUSUFMKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0b19tYXgsIHNjdHBf
aW5pdF9ydG9fbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVE9fTUFYKQorU0NUUF9VSU5UX1NZ
U0NUTCh2YWxpZF9jb29raWVfbGlmZSwgc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0LCBT
Q1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFKQorU0NUUF9VSU5UX1NZU0NUTChpbml0X3J0eF9tYXgs
IHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVFhfTUFYKQorU0NUUF9V
SU5UX1NZU0NUTChhc3NvY19ydHhfbWF4LCBzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCwgU0NU
UENUTF9BU1NPQ19SVFhfTUFYKQorU0NUUF9VSU5UX1NZU0NUTChwYXRoX3J0eF9tYXgsIHNjdHBf
cGF0aF9ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfUEFUSF9SVFhfTUFYKQorU0NUUF9VSU5UX1NZ
U0NUTChwYXRoX3BmX3RocmVzaG9sZCwgc2N0cF9wYXRoX3BmX3RocmVzaG9sZCwgU0NUUENUTF9Q
QVRIX1BGX1RIUkVTSE9MRCkKK1NDVFBfVUlOVF9TWVNDVEwoYWRkX21vcmVfb25fb3V0cHV0LCBz
Y3RwX2FkZF9tb3JlX3RocmVzaG9sZCwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVQpCitTQ1RQ
X1VJTlRfU1lTQ1RMKGluY29taW5nX3N0cmVhbXMsIHNjdHBfbnJfaW5jb21pbmdfc3RyZWFtc19k
ZWZhdWx0LCBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVMpCitTQ1RQX1VJTlRfU1lTQ1RMKG91dGdv
aW5nX3N0cmVhbXMsIHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0LCBTQ1RQQ1RMX09V
VEdPSU5HX1NUUkVBTVMpCitTQ1RQX1VJTlRfU1lTQ1RMKGNtdF9vbl9vZmYsIHNjdHBfY210X29u
X29mZiwgU0NUUENUTF9DTVRfT05fT0ZGKQorU0NUUF9VSU5UX1NZU0NUTChjbXRfdXNlX2RhYywg
c2N0cF9jbXRfdXNlX2RhYywgU0NUUENUTF9DTVRfVVNFX0RBQykKK1NDVFBfVUlOVF9TWVNDVEwo
Y3duZF9tYXhidXJzdCwgc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCwgU0NUUENUTF9DV05E
X01BWEJVUlNUKQorU0NUUF9VSU5UX1NZU0NUTChuYXRfZnJpZW5kbHksIHNjdHBfbmF0X2ZyaWVu
ZGx5LCBTQ1RQQ1RMX05BVF9GUklFTkRMWSkKK1NDVFBfVUlOVF9TWVNDVEwoYWJjX2xfdmFyLCBz
Y3RwX0wyX2FiY192YXJpYWJsZSwgU0NUUENUTF9BQkNfTF9WQVIpCitTQ1RQX1VJTlRfU1lTQ1RM
KG1heF9jaGFpbmVkX21idWZzLCBzY3RwX21idWZfdGhyZXNob2xkX2NvdW50LCBTQ1RQQ1RMX01B
WF9DSEFJTkVEX01CVUZTKQorU0NUUF9VSU5UX1NZU0NUTChkb19zY3RwX2RyYWluLCBzY3RwX2Rv
X2RyYWluLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU4pCitTQ1RQX1VJTlRfU1lTQ1RMKGhiX21heF9i
dXJzdCwgc2N0cF9oYl9tYXhidXJzdCwgU0NUUENUTF9IQl9NQVhfQlVSU1QpCitTQ1RQX1VJTlRf
U1lTQ1RMKGFib3J0X2F0X2xpbWl0LCBzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0
LCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUKQorU0NUUF9VSU5UX1NZU0NUTChtaW5fcmVzaWR1YWws
IHNjdHBfbWluX3Jlc2lkdWFsLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTCkKK1NDVFBfVUlOVF9TWVND
VEwobWF4X3JldHJhbl9jaHVuaywgc2N0cF9tYXhfcmV0cmFuX2NodW5rLCBTQ1RQQ1RMX01BWF9S
RVRSQU5fQ0hVTkspCitTQ1RQX1VJTlRfU1lTQ1RMKGxvZ19sZXZlbCwgc2N0cF9sb2dnaW5nX2xl
dmVsLCBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUwpCitTQ1RQX1VJTlRfU1lTQ1RMKGRlZmF1bHRfY2Nf
bW9kdWxlLCBzY3RwX2RlZmF1bHRfY2NfbW9kdWxlLCBTQ1RQQ1RMX0RFRkFVTFRfQ0NfTU9EVUxF
KQorU0NUUF9VSU5UX1NZU0NUTChkZWZhdWx0X3NzX21vZHVsZSwgc2N0cF9kZWZhdWx0X3NzX21v
ZHVsZSwgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRSkKK1NDVFBfVUlOVF9TWVNDVEwoZGVmYXVs
dF9mcmFnX2ludGVybGVhdmUsIHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUsIFNDVFBDVExf
REVGQVVMVF9GUkFHX0lOVEVSTEVBVkUpCitTQ1RQX1VJTlRfU1lTQ1RMKG1vYmlsaXR5X2Jhc2Us
IHNjdHBfbW9iaWxpdHlfYmFzZSwgU0NUUENUTF9NT0JJTElUWV9CQVNFKQorU0NUUF9VSU5UX1NZ
U0NUTChtb2JpbGl0eV9mYXN0aGFuZG9mZiwgc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZiwgU0NU
UENUTF9NT0JJTElUWV9GQVNUSEFORE9GRikKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0Vf
QlVGKQorU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBsb2csIENUTEZMQUdf
Vk5FVHxDVExUWVBFX1NUUlVDVHxDVExGTEFHX1JELAorICAgICAgICAgICAgTlVMTCwgMCwgc2N0
cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZywgIlMsc2N0cGxvZyIsICJTQ1RQIGxvZ2dpbmcgKHN0
cnVjdCBzY3RwX2xvZykiKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywg
Y2xlYXJfdHJhY2UsIENUTEZMQUdfVk5FVHxDVExUWVBFX1VJTlQgfCBDVExGTEFHX1JXLAorICAg
ICAgICAgICAgTlVMTCwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX3RyYWNlX2xvZ19jbGVhciwgIklV
IiwgIkNsZWFyIFNDVFAgTG9nZ2luZyBidWZmZXIiKTsKKyNlbmRpZgorU1lTQ1RMX1BST0MoX25l
dF9pbmV0X3NjdHAsIE9JRF9BVVRPLCB1ZHBfdHVubmVsaW5nX3BvcnQsIENUTEZMQUdfVk5FVHxD
VExUWVBFX1VJTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3Rs
X2hhbmRsZV91ZHBfdHVubmVsaW5nLCAiSVUiLCBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9E
RVNDKTsKK1NDVFBfVUlOVF9TWVNDVEwoZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHksIHNjdHBfZW5h
YmxlX3NhY2tfaW1tZWRpYXRlbHksIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEUpCitT
Q1RQX1VJTlRfU1lTQ1RMKG5hdF9mcmllbmRseV9pbml0LCBzY3RwX2luaXRzX2luY2x1ZGVfbmF0
X2ZyaWVuZGx5LCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUUykKK1NDVFBfVUlOVF9TWVNDVEwo
dnRhZ190aW1lX3dhaXQsIHNjdHBfdnRhZ190aW1lX3dhaXQsIFNDVFBDVExfVElNRV9XQUlUKQor
U0NUUF9VSU5UX1NZU0NUTChidWZmZXJfc3BsaXR0aW5nLCBzY3RwX2J1ZmZlcl9zcGxpdHRpbmcs
IFNDVFBDVExfQlVGRkVSX1NQTElUVElORykKK1NDVFBfVUlOVF9TWVNDVEwoaW5pdGlhbF9jd25k
LCBzY3RwX2luaXRpYWxfY3duZCwgU0NUUENUTF9JTklUSUFMX0NXTkQpCitTQ1RQX1VJTlRfU1lT
Q1RMKHJ0dHZhcl9idywgc2N0cF9ydHR2YXJfYncsIFNDVFBDVExfUlRUVkFSX0JXKQorU0NUUF9V
SU5UX1NZU0NUTChydHR2YXJfcnR0LCBzY3RwX3J0dHZhcl9ydHQsIFNDVFBDVExfUlRUVkFSX1JU
VCkKK1NDVFBfVUlOVF9TWVNDVEwocnR0dmFyX2VxcmV0LCBzY3RwX3J0dHZhcl9lcXJldCwgU0NU
UENUTF9SVFRWQVJfRVFSRVQpCitTQ1RQX1VJTlRfU1lTQ1RMKHJ0dHZhcl9zdGVhZHlfc3RlcCwg
c2N0cF9zdGVhZHlfc3RlcCwgU0NUUENUTF9SVFRWQVJfU1RFQURZUykKK1NDVFBfVUlOVF9TWVND
VEwodXNlX2RjY2NlY24sIHNjdHBfdXNlX2RjY2NfZWNuLCBTQ1RQQ1RMX1JUVFZBUl9EQ0NDRUNO
KQorU0NUUF9VSU5UX1NZU0NUTChibGFja2hvbGUsIHNjdHBfYmxhY2tob2xlLCBTQ1RQQ1RMX0JM
QUNLSE9MRSkKK1NDVFBfVUlOVF9TWVNDVEwoZGlhZ19pbmZvX2NvZGUsIHNjdHBfZGlhZ19pbmZv
X2NvZGUsIFNDVFBDVExfRElBR19JTkZPX0NPREUpCisjaWZkZWYgU0NUUF9ERUJVRworU0NUUF9V
SU5UX1NZU0NUTChkZWJ1Zywgc2N0cF9kZWJ1Z19vbiwgU0NUUENUTF9ERUJVRykKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorU0NUUF9VSU5UX1NZU0NUTChtYWluX3RpbWVyLCBzY3Rw
X21haW5fdGltZXIsIFNDVFBDVExfTUFJTl9USU1FUikKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9z
Y3RwLCBPSURfQVVUTywgaWdub3JlX3Ztd2FyZV9pbnRlcmZhY2VzLCBDVExUWVBFX1VJTlR8Q1RM
RkxBR19SVywKKyAgICAgICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV92bXdhcmVf
aW50ZXJmYWNlcywgIklVIiwgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfREVTQyk7
CitTQ1RQX1VJTlRfU1lTQ1RMKGFkZHJfd2F0Y2hkb2dfbGltaXQsIHNjdHBfYWRkcl93YXRjaGRv
Z19saW1pdCwgU0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlUKQorU0NUUF9VSU5UX1NZU0NUTCh2
dGFnX3dhdGNoZG9nX2xpbWl0LCBzY3RwX3Z0YWdfd2F0Y2hkb2dfbGltaXQsIFNDVFBDVExfVlRB
R19XQVRDSERPR19MSU1JVCkKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorU0NUUF9VSU5UX1NZU0NUTChvdXRwdXRfdW5sb2Nr
ZWQsIHNjdHBfb3V0cHV0X3VubG9ja2VkLCBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRCkKKyNlbmRp
ZgorU1lTQ1RMX1BST0MoX25ldF9pbmV0X3NjdHAsIE9JRF9BVVRPLCBzdGF0cywgQ1RMRkxBR19W
TkVUfENUTFRZUEVfU1RSVUNUfENUTEZMQUdfUlcsCisgICAgICAgICAgICBOVUxMLCAwLCBzY3Rw
X3N5c2N0bF9oYW5kbGVfc3RhdHMsICJTLHNjdHBzdGF0IiwgIlNDVFAgc3RhdGlzdGljcyAoc3Ry
dWN0IHNjdHBfc3RhdCkiKTsKK1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywg
YXNzb2NsaXN0LCBDVExGTEFHX1ZORVR8Q1RMVFlQRV9PUEFRVUV8Q1RMRkxBR19SRCwKKyAgICAg
ICAgICAgIE5VTEwsIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hc3NvY2xpc3QsICJTLHhhc3NvYyIs
ICJMaXN0IG9mIGFjdGl2ZSBTQ1RQIGFzc29jaWF0aW9ucyIpOworCisjZWxpZiBkZWZpbmVkKF9f
V2luZG93c19fKQorCisjZGVmaW5lIFJBTkdFQ0hLKHZhciwgbWluLCBtYXgpIFwKKwlpZiAoKHZh
cikgPCAobWluKSkgeyAodmFyKSA9IChtaW4pOyB9IFwKKwllbHNlIGlmICgodmFyKSA+IChtYXgp
KSB7ICh2YXIpID0gKG1heCk7IH0KKworc3RhdGljIGludAorc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dChTWVNDVExfSEFORExFUl9BUkdTKQoreworCWludCBlcnJvcjsKKworCWVycm9yID0gc3lzY3Rs
X2hhbmRsZV9pbnQob2lkcCwgb2lkcC0+b2lkX2FyZzEsIG9pZHAtPm9pZF9hcmcyLCByZXEpOwor
CWlmIChlcnJvciA9PSAwKSB7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5k
c3BhY2UpLCBTQ1RQQ1RMX01BWERHUkFNX01JTiwgU0NUUENUTF9NQVhER1JBTV9NQVgpOworCQlS
QU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSwgU0NUUENUTF9SRUNWU1BB
Q0VfTUlOLCBTQ1RQQ1RMX1JFQ1ZTUEFDRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfYXV0b19hc2NvbmYpLCBTQ1RQQ1RMX0FVVE9BU0NPTkZfTUlOLCBTQ1RQQ1RMX0FV
VE9BU0NPTkZfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dG9fYXNj
b25mKSwgU0NUUENUTF9BVVRPQVNDT05GX01JTiwgU0NUUENUTF9BVVRPQVNDT05GX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKSwgU0NUUENUTF9FQ05f
RU5BQkxFX01JTiwgU0NUUENUTF9FQ05fRU5BQkxFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9wcl9lbmFibGUpLCBTQ1RQQ1RMX1BSX0VOQUJMRV9NSU4sIFNDVFBDVExf
UFJfRU5BQkxFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWNvbmZp
Z19lbmFibGUpLCBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NSU4sIFNDVFBDVExfUkVDT05GSUdf
RU5BQkxFX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ucnNhY2tfZW5h
YmxlKSwgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01JTiwgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX01B
WCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wa3Rkcm9wX2VuYWJsZSksIFND
VFBDVExfUEtURFJPUF9FTkFCTEVfTUlOLCBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSwgU0NU
UENUTF9MT09QQkFDS19OT0NTVU1fTUlOLCBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9NQVgpOwor
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCksIFNDVFBDVExf
UEVFUl9DSEtPSF9NSU4sIFNDVFBDVExfUEVFUl9DSEtPSF9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX01BWEJVUlNUX01J
TiwgU0NUUENUTF9NQVhCVVJTVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfZnJfbWF4X2J1cnN0X2RlZmF1bHQpLCBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUlOLCBTQ1RQQ1RM
X0ZSTUFYQlVSU1RfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX21heF9j
aHVua3Nfb25fcXVldWUpLCBTQ1RQQ1RMX01BWENIVU5LU19NSU4sIFNDVFBDVExfTUFYQ0hVTktT
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksIFND
VFBDVExfVENCSEFTSFNJWkVfTUlOLCBTQ1RQQ1RMX1RDQkhBU0hTSVpFX01BWCk7CisJCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wY2J0YmxzaXplKSwgU0NUUENUTF9QQ0JIQVNIU0la
RV9NSU4sIFNDVFBDVExfUENCSEFTSFNJWkVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX21pbl9zcGxpdF9wb2ludCksIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01JTiwg
U0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NU
TChzY3RwX2NodW5rc2NhbGUpLCBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUlOLCBTQ1RQQ1RMX0NIVU5L
U0NBTEVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RlbGF5ZWRfc2Fj
a190aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FX01JTiwgU0NUUENUTF9E
RUxBWUVEX1NBQ0tfVElNRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
c2Fja19mcmVxX2RlZmF1bHQpLCBTQ1RQQ1RMX1NBQ0tfRlJFUV9NSU4sIFNDVFBDVExfU0FDS19G
UkVRX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zeXN0ZW1fZnJlZV9y
ZXNjX2xpbWl0KSwgU0NUUENUTF9TWVNfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX1NZU19SRVNPVVJD
RV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNvY19mcmVlX3Jlc2Nf
bGltaXQpLCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0VfTUlOLCBTQ1RQQ1RMX0FTT0NfUkVTT1VSQ0Vf
TUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hlYXJ0YmVhdF9pbnRlcnZh
bF9kZWZhdWx0KSwgU0NUUENUTF9IRUFSVEJFQVRfSU5URVJWQUxfTUlOLCBTQ1RQQ1RMX0hFQVJU
QkVBVF9JTlRFUlZBTF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcG10
dV9yYWlzZV90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1BNVFVfUkFJU0VfVElNRV9NSU4sIFNDVFBD
VExfUE1UVV9SQUlTRV9USU1FX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJ
TUVfTUlOLCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfTUFYKTsKKwkJUkFOR0VDSEsoU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3NlY3JldF9saWZldGltZV9kZWZhdWx0KSwgU0NUUENUTF9TRUNS
RVRfTElGRVRJTUVfTUlOLCBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NQVgpOworCQlSQU5HRUNI
SyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcnRvX21heF9kZWZhdWx0KSwgU0NUUENUTF9SVE9fTUFY
X01JTiwgU0NUUENUTF9SVE9fTUFYX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9ydG9fbWluX2RlZmF1bHQpLCBTQ1RQQ1RMX1JUT19NSU5fTUlOLCBTQ1RQQ1RMX1JUT19N
SU5fTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0b19pbml0aWFsX2Rl
ZmF1bHQpLCBTQ1RQQ1RMX1JUT19JTklUSUFMX01JTiwgU0NUUENUTF9SVE9fSU5JVElBTF9NQVgp
OworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQp
LCBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9NSU4sIFNDVFBDVExfSU5JVF9SVE9fTUFYX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF92YWxpZF9jb29raWVfbGlmZV9kZWZhdWx0
KSwgU0NUUENUTF9WQUxJRF9DT09LSUVfTElGRV9NSU4sIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJ
RkVfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRfcnR4X21heF9k
ZWZhdWx0KSwgU0NUUENUTF9JTklUX1JUWF9NQVhfTUlOLCBTQ1RQQ1RMX0lOSVRfUlRYX01BWF9N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZh
dWx0KSwgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01JTiwgU0NUUENUTF9BU1NPQ19SVFhfTUFYX01B
WCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0eF9tYXhfZGVmYXVs
dCksIFNDVFBDVExfUEFUSF9SVFhfTUFYX01JTiwgU0NUUENUTF9QQVRIX1JUWF9NQVhfTUFYKTsK
KwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKSwgU0NU
UENUTF9QQVRIX1BGX1RIUkVTSE9MRF9NSU4sIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfTUFY
KTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3JlX3RocmVzaG9sZCks
IFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX01JTiwgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQ
VVRfTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX2luY29taW5nX3N0
cmVhbXNfZGVmYXVsdCksIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NSU4sIFNDVFBDVExfSU5D
T01JTkdfU1RSRUFNU19NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbnJf
b3V0Z29pbmdfc3RyZWFtc19kZWZhdWx0KSwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01JTiwg
U0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9jbXRfb25fb2ZmKSwgU0NUUENUTF9DTVRfT05fT0ZGX01JTiwgU0NUUENUTF9DTVRf
T05fT0ZGX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9jbXRfdXNlX2Rh
YyksIFNDVFBDVExfQ01UX1VTRV9EQUNfTUlOLCBTQ1RQQ1RMX0NNVF9VU0VfREFDX01BWCk7CisJ
CVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCks
IFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NSU4sIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NQVgpOwor
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwgU0NUUENUTF9O
QVRfRlJJRU5ETFlfTUlOLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9NQVgpOworCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKSwgU0NUUENUTF9BQkNfTF9WQVJf
TUlOLCBTQ1RQQ1RMX0FCQ19MX1ZBUl9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpLCBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX01J
TiwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGU19NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfZG9fZHJhaW4pLCBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fTUlOLCBTQ1RQQ1RM
X0RPX1NDVFBfRFJBSU5fTUFYKTsKKwkJUkFOR0VDSEsoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2hi
X21heGJ1cnN0KSwgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUlOLCBTQ1RQQ1RMX0hCX01BWF9CVVJT
VF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25lXzJf
b25lX2hpdHNfbGltaXQpLCBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01JTiwgU0NUUENUTF9BQk9S
VF9BVF9MSU1JVF9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3Jl
c2lkdWFsKSwgU0NUUENUTF9NSU5fUkVTSURVQUxfTUlOLCBTQ1RQQ1RMX01JTl9SRVNJRFVBTF9N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuayks
IFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19NSU4sIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19N
QVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCksIFND
VFBDVExfTE9HR0lOR19MRVZFTF9NSU4sIFNDVFBDVExfTE9HR0lOR19MRVZFTF9NQVgpOworCQlS
QU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9jY19tb2R1bGUpLCBTQ1RQQ1RM
X0RFRkFVTFRfQ0NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NQVgpOwor
CQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUpLCBTQ1RQ
Q1RMX0RFRkFVTFRfU1NfTU9EVUxFX01JTiwgU0NUUENUTF9ERUZBVUxUX1NTX01PRFVMRV9NQVgp
OworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVh
dmUpLCBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01JTiwgU0NUUENUTF9ERUZBVUxU
X0ZSQUdfSU5URVJMRUFWRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dnRhZ190aW1lX3dhaXQpLCBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4sIFNDVFBDVExfVElNRV9XQUlU
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9idWZmZXJfc3BsaXR0aW5n
KSwgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01JTiwgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5H
X01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0aWFsX2N3bmQpLCBT
Q1RQQ1RMX0lOSVRJQUxfQ1dORF9NSU4sIFNDVFBDVExfSU5JVElBTF9DV05EX01BWCk7CisJCVJB
TkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfYncpLCBTQ1RQQ1RMX1JUVFZBUl9C
V19NSU4sIFNDVFBDVExfUlRUVkFSX0JXX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ydHR2YXJfcnR0KSwgU0NUUENUTF9SVFRWQVJfUlRUX01JTiwgU0NUUENUTF9SVFRW
QVJfUlRUX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFy
ZXQpLCBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9NSU4sIFNDVFBDVExfUlRUVkFSX0VRUkVUX01BWCk7
CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zdGVhZHlfc3RlcCksIFNDVFBDVExf
UlRUVkFSX1NURUFEWVNfTUlOLCBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01BWCk7CisJCVJBTkdF
Q0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91c2VfZGNjY19lY24pLCBTQ1RQQ1RMX1JUVFZBUl9E
Q0NDRUNOX01JTiwgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9NQVgpOworCQlSQU5HRUNISyhTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSksIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9N
SU4sIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpLCBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5E
T0ZGX01JTiwgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9NQVgpOworCQlSQU5HRUNISyhT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpLCBTQ1RQQ1RMX1NB
Q0tfSU1NRURJQVRFTFlfRU5BQkxFX01JTiwgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJM
RV9NQVgpOworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5pdHNfaW5jbHVkZV9u
YXRfZnJpZW5kbHkpLCBTQ1RQQ1RMX05BVF9GUklFTkRMWV9JTklUU19NSU4sIFNDVFBDVExfTkFU
X0ZSSUVORExZX0lOSVRTX01BWCk7CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9i
bGFja2hvbGUpLCBTQ1RQQ1RMX0JMQUNLSE9MRV9NSU4sIFNDVFBDVExfQkxBQ0tIT0xFX01BWCk7
CisJCVJBTkdFQ0hLKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksIFNDVFBD
VExfRElBR19JTkZPX0NPREVfTUlOLCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01BWCk7CisjaWZk
ZWYgU0NUUF9ERUJVRworCQlSQU5HRUNISyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24p
LCBTQ1RQQ1RMX0RFQlVHX01JTiwgU0NUUENUTF9ERUJVR19NQVgpOworI2VuZGlmCisJfQorCXJl
dHVybiAoZXJyb3IpOworfQorCit2b2lkCitzeXNjdGxfc2V0dXBfc2N0cCh2b2lkKQoreworCXN5
c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInNlbmRzcGFjZSIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3NlbmRzcGFjZSks
IDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTUFYREdSQU1fREVTQyk7
CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJyZWN2c3BhY2UiLCBDVExUWVBF
X0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY3Zz
cGFjZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfUkVDVlNQQUNF
X0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXV0b19hc2NvbmYi
LCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9hdXRvX2FzY29uZiksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBD
VExfQVVUT0FTQ09ORl9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
ImVjbl9lbmFibGUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9lY25fZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwK
KwkgICAgU0NUUENUTF9FQ05fRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAicHJfZW5hYmxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfcHJfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFu
ZGxlX2ludCwKKwkgICAgU0NUUENUTF9QUl9FTkFCTEVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29p
ZCgmc3lzY3RsX29pZF90b3AsICJhdXRoX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcs
CisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2F1dGhfZW5hYmxlKSwgMCwgc2N0
cF9zeXNjdGxfaGFuZGxlX2F1dGgsCisJICAgIFNDVFBDVExfQVVUSF9FTkFCTEVfREVTQyk7CisK
KwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhc2NvbmZfZW5hYmxlIiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYXNj
b25mX2VuYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9hc2NvbmYsCisJICAgIFNDVFBDVExf
QVNDT05GX0VOQUJMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
InJlY29uZmlnX2VuYWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAm
U0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY29uZmlnX2VuYWJsZSksIDAsIHNjdHBfc3lzY3RsX2hh
bmRsZV9pbnQsCisJICAgIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFX0RFU0MpOworCisJc3lzY3Rs
X2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibnJzYWNrX2VuYWJsZSIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yc2Fja19lbmFi
bGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX05SU0FDS19FTkFC
TEVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwa3Rkcm9wX2Vu
YWJsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3BrdGRyb3BfZW5hYmxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkg
ICAgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgImxvb3BiYWNrX25vY3N1bSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spLCAw
LCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTV9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBlZXJfY2hrb2giLCBD
VExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9wZWVyX2NodW5rX29oKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9QRUVSX0NIS09IX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
bWF4YnVyc3QiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9tYXhfYnVyc3RfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9p
bnQsCisJICAgIFNDVFBDVExfTUFYQlVSU1RfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lz
Y3RsX29pZF90b3AsICJmcl9tYXhidXJzdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAg
ICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KSwgMCwg
c2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9GUk1BWEJVUlNUX0RFU0MpOwor
CisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWF4Y2h1bmtzIiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X2No
dW5rc19vbl9xdWV1ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExf
TUFYQ0hVTktTX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidGNi
aGFzaHNpemUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9oYXNodGJsc2l6ZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfVENCSEFTSFNJWkVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3Rs
X29pZF90b3AsICJwY2JoYXNoc2l6ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAg
ICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3BjYnRibHNpemUpLCAwLCBzY3RwX3N5c2N0bF9o
YW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1BDQkhBU0hTSVpFX0RFU0MpOworCisJc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWluX3NwbGl0X3BvaW50IiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWluX3NwbGl0X3Bv
aW50KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9NSU5fU1BMSVRf
UE9JTlRfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjaHVua3Nj
YWxlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfY2h1bmtzY2FsZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFND
VFBDVExfQ0hVTktTQ0FMRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgImRlbGF5ZWRfc2Fja190aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVmYXVsdCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfREVMQVlFRF9TQUNLX1RJTUVf
REVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzYWNrX2ZyZXEiLCBD
VExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9zYWNrX2ZyZXFfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFND
VFBDVExfU0FDS19GUkVRX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9w
LCAic3lzX3Jlc291cmNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfc3lzdGVtX2ZyZWVfcmVzY19saW1pdCksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfU1lTX1JFU09VUkNFX0RFU0MpOworCisJc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXNvY19yZXNvdXJjZSIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2Fzb2NfZnJl
ZV9yZXNjX2xpbWl0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9B
U09DX1JFU09VUkNFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
aGVhcnRiZWF0X2ludGVydmFsIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAg
ICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaGVhcnRiZWF0X2ludGVydmFsX2RlZmF1bHQpLCAwLCBz
Y3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInBtdHVfcmFpc2VfdGlt
ZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2lu
dCwKKwkgICAgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29p
ZCgmc3lzY3RsX29pZF90b3AsICJzaHV0ZG93bl9ndWFyZF90aW1lIiwgQ1RMVFlQRV9JTlR8Q1RM
RkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2h1dGRvd25fZ3Vh
cmRfdGltZV9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9TSFVURE9XTl9HVUFSRF9USU1FX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAic2VjcmV0X2xpZmV0aW1lIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAg
ICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpLCAw
LCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0b19tYXgiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9y
dG9fbWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RM
X1JUT19NQVhfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJydG9f
bWluIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfcnRvX21pbl9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkg
ICAgU0NUUENUTF9SVE9fTUlOX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRf
dG9wLCAicnRvX2luaXRpYWwiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNj
dGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9SVE9fSU5JVElBTF9ERVNDKTsKKworCXN5c2N0
bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImluaXRfcnRvX21heCIsIENUTFRZUEVfSU5UfENU
TEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2luaXRfcnRvX21h
eF9kZWZhdWx0KSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9JTklU
X1JUT19NQVhfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ2YWxp
ZF9jb29raWVfbGlmZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NU
UF9CQVNFX1NZU0NUTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9MSUZFX0RFU0MpOwor
CisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaW5pdF9ydHhfbWF4IiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfaW5p
dF9ydHhfbWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQ
Q1RMX0lOSVRfUlRYX01BWF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgImFzc29jX3J0eF9tYXgiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAg
JlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpLCAwLCBzY3RwX3N5
c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfREVTQyk7CisKKwlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJwYXRoX3J0eF9tYXgiLCBDVExUWVBFX0lO
VHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9wYXRoX3J0
eF9tYXhfZGVmYXVsdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExf
UEFUSF9SVFhfTUFYX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
cGF0aF9wZl90aHJlc2hvbGQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3BhdGhfcGZfdGhyZXNob2xkKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKKwkgICAgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9ERVNDKTsKKworCXN5c2N0bF9h
ZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImFkZF9tb3JlX29uX291dHB1dCIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2FkZF9tb3Jl
X3RocmVzaG9sZCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQURE
X01PUkVfT05fT1VUUFVUX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9w
LCAiaW5jb21pbmdfc3RyZWFtcyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19E
RVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm91dGdvaW5nX3N0cmVh
bXMiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVND
VEwoc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAorCSAgICBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVTQyk7CisKKwlzeXNjdGxf
YWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJjbXRfb25fb2ZmIiwgQ1RMVFlQRV9JTlR8Q1RMRkxB
R19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZiksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfQ01UX09OX09GRl9ERVNDKTsK
KworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImNtdF91c2VfZGFjIiwgQ1RMVFlQ
RV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210
X3VzZV9kYWMpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0NNVF9V
U0VfREFDX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY3duZF9t
YXhidXJzdCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNF
X1NZU0NUTChzY3RwX3VzZV9jd25kX2Jhc2VkX21heGJ1cnN0KSwgMCwgc2N0cF9zeXNjdGxfaGFu
ZGxlX2ludCwKKwkgICAgU0NUUENUTF9DV05EX01BWEJVUlNUX0RFU0MpOworCisJc3lzY3RsX2Fk
ZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibmF0X2ZyaWVuZGx5IiwgQ1RMVFlQRV9JTlR8Q1RMRkxB
R19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbmF0X2ZyaWVuZGx5KSwg
MCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9OQVRfRlJJRU5ETFlfREVT
Qyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJhYmNfbF92YXIiLCBDVExU
WVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9M
Ml9hYmNfdmFyaWFibGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RM
X0FCQ19MX1ZBUl9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgIm1h
eF9jaGFpbmVkX21idWZzIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90aHJlc2hvbGRfY291bnQpLCAwLCBzY3RwX3N5c2N0
bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX0RFU0MpOworCisJ
c3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiZG9fc2N0cF9kcmFpbiIsIENUTFRZUEVf
SU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RvX2Ry
YWluKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENUTF9ET19TQ1RQX0RS
QUlOX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiaGJfbWF4X2J1
cnN0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfaGJfbWF4YnVyc3QpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBT
Q1RQQ1RMX0hCX01BWF9CVVJTVF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lk
X3RvcCwgImFib3J0X2F0X2xpbWl0IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYWJvcnRfaWZfb25lXzJfb25lX2hpdHNfbGltaXQp
LCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlU
X0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAibWluX3Jlc2lkdWFs
IiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RM
KHNjdHBfbWluX3Jlc2lkdWFsKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NU
UENUTF9NSU5fUkVTSURVQUxfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90
b3AsICJtYXhfcmV0cmFuX2NodW5rIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAg
ICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWF4X3JldHJhbl9jaHVuayksIDAsIHNjdHBfc3lz
Y3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTUFYX1JFVFJBTl9DSFVOS19ERVNDKTsKKwor
CXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImxvZ19sZXZlbCIsIENUTFRZUEVfSU5U
fENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0xPR0dJTkdf
TEVWRUxfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkZWZhdWx0
X2NjX21vZHVsZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2RlZmF1bHRfY2NfbW9kdWxlKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKKwkgICAgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9ERVNDKTsKKworCXN5c2N0bF9h
ZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRlZmF1bHRfc3NfbW9kdWxlIiwgQ1RMVFlQRV9JTlR8
Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVmYXVsdF9z
c19tb2R1bGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0RFRkFV
TFRfU1NfTU9EVUxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAi
ZGVmYXVsdF9mcmFnX2ludGVybGVhdmUiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAg
ICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kZWZhdWx0X2ZyYWdfaW50ZXJsZWF2ZSksIDAs
IHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVS
TEVBVkVfREVTQyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJtb2JpbGl0
eV9iYXNlIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0Vf
U1lTQ1RMKHNjdHBfbW9iaWxpdHlfYmFzZSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfTU9CSUxJVFlfQkFTRV9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNj
dGxfb2lkX3RvcCwgIm1vYmlsaXR5X2Zhc3RoYW5kb2ZmIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19S
VywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbW9iaWxpdHlfZmFzdGhhbmRv
ZmYpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX01PQklMSVRZX0ZB
U1RIQU5ET0ZGX0RFU0MpOworCisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlz
eXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzY3RwX2xvZyIsIENUTFRZUEVfU1RSVUNU
fENUTEZMQUdfUkQsCisJICAgIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfbG9nKSwgTlVMTCwKKwkgICAgIlNDVFAgbG9nZ2luZyAoc3RydWN0IHNjdHBfbG9n
KSIpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiY2xlYXJfdHJhY2UiLCBD
VExUWVBFX0lOVHxDVExGTEFHX1dSLAorCSAgICBOVUxMLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVf
dHJhY2VfbG9nX2NsZWFyLAorCSAgICAiQ2xlYXIgU0NUUCBMb2dnaW5nIGJ1ZmZlciIpOworI2Vu
ZGlmCisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJ1ZHBfdHVubmVsaW5nX3Bv
cnQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorCSAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3VkcF90dW5uZWxpbmdfcG9ydCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV91ZHBfdHVubmVsaW5n
LAorCSAgICBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9SVF9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgImVuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5IiwgQ1RMVFlQRV9J
TlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZW5hYmxl
X3NhY2tfaW1tZWRpYXRlbHkpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQ
Q1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5BQkxFX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5
c2N0bF9vaWRfdG9wLCAibmF0X2ZyaWVuZGx5X2luaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9pbml0c19pbmNsdWRlX25hdF9m
cmllbmRseSksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJICAgIFNDVFBDVExfTkFUX0ZS
SUVORExZX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAidnRhZ190
aW1lX3dhaXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFT
RV9TWVNDVEwoc2N0cF92dGFnX3RpbWVfd2FpdCksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQs
CisJICAgIFNDVFBDVExfVElNRV9XQUlUX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0
bF9vaWRfdG9wLCAiYnVmZmVyX3NwbGl0dGluZyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisg
ICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpLCAwLCBz
Y3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfREVT
Qyk7CisKKwlzeXNjdGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJpbml0aWFsX2N3bmQiLCBD
VExUWVBFX0lOVHxDVExGTEFHX1JXLAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9pbml0aWFsX2N3bmQpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RM
X0lOSVRJQUxfQ1dORF9ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwg
InJ0dHZhcl9idyIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9C
QVNFX1NZU0NUTChzY3RwX3J0dHZhcl9idyksIDAsIHNjdHBfc3lzY3RsX2hhbmRsZV9pbnQsCisJ
ICAgIFNDVFBDVExfUlRUVkFSX0JXX0RFU0MpOworCisJc3lzY3RsX2FkZF9vaWQoJnN5c2N0bF9v
aWRfdG9wLCAicnR0dmFyX3J0dCIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAg
ICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX3J0dHZhcl9ydHQpLCAwLCBzY3RwX3N5c2N0bF9oYW5k
bGVfaW50LAorCSAgICBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVTQyk7CisKKwlzeXNjdGxfYWRkX29p
ZCgmc3lzY3RsX29pZF90b3AsICJydHR2YXJfZXFyZXQiLCBDVExUWVBFX0lOVHxDVExGTEFHX1JX
LAorICAgICAgICAgICAgJlNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ydHR2YXJfZXFyZXQpLCAwLCBz
Y3RwX3N5c2N0bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX1JUVFZBUl9FUVJFVF9ERVNDKTsK
KworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgInJ0dHZhcl9zdGVhZHlfc3RlcCIs
IENUTFRZUEVfSU5UfENUTEZMQUdfUlcsCisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3N0ZWFkeV9zdGVwKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxlX2ludCwKKwkgICAgU0NUUENU
TF9SVFRWQVJfU1RFQURZU19ERVNDKTsKKworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3Rv
cCwgInVzZV9kY2NjZWNuIiwgQ1RMVFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZT
Q1RQX0JBU0VfU1lTQ1RMKHNjdHBfdXNlX2RjY2NfZWNuKSwgMCwgc2N0cF9zeXNjdGxfaGFuZGxl
X2ludCwKKwkgICAgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9ERVNDKTsKKworCXN5c2N0bF9hZGRf
b2lkKCZzeXNjdGxfb2lkX3RvcCwgImJsYWNraG9sZSIsIENUTFRZUEVfSU5UfENUTEZMQUdfUlcs
CisgICAgICAgICAgICAmU0NUUF9CQVNFX1NZU0NUTChzY3RwX2JsYWNraG9sZSksIDAsIHNjdHBf
c3lzY3RsX2hhbmRsZV9pbnQsCisgICAgICAgICAgICBTQ1RQQ1RMX0JMQUNLSE9MRV9ERVNDKTsK
KworCXN5c2N0bF9hZGRfb2lkKCZzeXNjdGxfb2lkX3RvcCwgImRpYWdfaW5mb19jb2RlIiwgQ1RM
VFlQRV9JTlR8Q1RMRkxBR19SVywKKyAgICAgICAgICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
ZGlhZ19pbmZvX2NvZGUpLCAwLCBzY3RwX3N5c2N0bF9oYW5kbGVfaW50LAorICAgICAgICAgICAg
U0NUUENUTF9ESUFHX0lORk9fQ09ERV9ERVNDKTsKKworI2lmZGVmIFNDVFBfREVCVUcKKwlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJkZWJ1ZyIsIENUTFRZUEVfSU5UfENUTEZMQUdf
UlcsCisJICAgICZTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfZGVidWdfb24pLCAwLCBzY3RwX3N5c2N0
bF9oYW5kbGVfaW50LAorCSAgICBTQ1RQQ1RMX0RFQlVHX0RFU0MpOworI2VuZGlmCisKKwlzeXNj
dGxfYWRkX29pZCgmc3lzY3RsX29pZF90b3AsICJzdGF0cyIsIENUTFRZUEVfU1RSVUNUfENUTEZM
QUdfUlcsCisJICAgICZTQ1RQX0JBU0VfU1RBVFMsIHNpemVvZihTQ1RQX0JBU0VfU1RBVFMpLCBO
VUxMLAorCSAgICAiU0NUUCBzdGF0aXN0aWNzIChzdHJ1Y3Qgc2N0cF9zdGF0KSIpOworCisJc3lz
Y3RsX2FkZF9vaWQoJnN5c2N0bF9vaWRfdG9wLCAiYXNzb2NsaXN0IiwgQ1RMVFlQRV9TVFJVQ1R8
Q1RMRkxBR19SRCwKKwkgICAgTlVMTCwgMCwgc2N0cF9hc3NvY2xpc3QsCisJICAgICJMaXN0IG9m
IGFjdGl2ZSBTQ1RQIGFzc29jaWF0aW9ucyIpOworfQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3N5c2N0bC5oIGIvU291cmNlL1Ro
aXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
dXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uNGYxMGZmNjc2OTE1NWNlNTRlNWY4N2M0YWYxMjdiZjJl
Njg0NDU3ZSAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lz
Y3RsLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfc3lzY3RsLmgKQEAg
LTAsMCArMSw2MjUgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs
YXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRh
bGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0y
MDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAq
ICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3
aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVU
T1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg
KiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
ZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVl
QlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfc3lzY3RsLmggMjk5NTQzIDIwMTYtMDUtMTIgMTY6
MzQ6NTlaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVUSU5FVF9TQ1RQX1NZU0NU
TF9IXworI2RlZmluZSBfTkVUSU5FVF9TQ1RQX1NZU0NUTF9IXworCisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2NvbnN0YW50cy5oPgorCitzdHJ1
Y3Qgc2N0cF9zeXNjdGwgeworCXVpbnQzMl90IHNjdHBfc2VuZHNwYWNlOworCXVpbnQzMl90IHNj
dHBfcmVjdnNwYWNlOworCXVpbnQzMl90IHNjdHBfYXV0b19hc2NvbmY7CisJdWludDMyX3Qgc2N0
cF9tdWx0aXBsZV9hc2NvbmZzOworCXVpbnQzMl90IHNjdHBfZWNuX2VuYWJsZTsKKwl1aW50MzJf
dCBzY3RwX3ByX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX2F1dGhfZW5hYmxlOworCXVpbnQzMl90
IHNjdHBfYXNjb25mX2VuYWJsZTsKKwl1aW50MzJfdCBzY3RwX3JlY29uZmlnX2VuYWJsZTsKKwl1
aW50MzJfdCBzY3RwX25yc2Fja19lbmFibGU7CisJdWludDMyX3Qgc2N0cF9wa3Rkcm9wX2VuYWJs
ZTsKKwl1aW50MzJfdCBzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0OworI2lmICEoZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwKQorCXVpbnQzMl90IHNj
dHBfbm9fY3N1bV9vbl9sb29wYmFjazsKKyNlbmRpZgorCXVpbnQzMl90IHNjdHBfcGVlcl9jaHVu
a19vaDsKKwl1aW50MzJfdCBzY3RwX21heF9idXJzdF9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBf
bWF4X2NodW5rc19vbl9xdWV1ZTsKKwl1aW50MzJfdCBzY3RwX2hhc2h0YmxzaXplOworCXVpbnQz
Ml90IHNjdHBfcGNidGJsc2l6ZTsKKwl1aW50MzJfdCBzY3RwX21pbl9zcGxpdF9wb2ludDsKKwl1
aW50MzJfdCBzY3RwX2NodW5rc2NhbGU7CisJdWludDMyX3Qgc2N0cF9kZWxheWVkX3NhY2tfdGlt
ZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2Fja19mcmVxX2RlZmF1bHQ7CisJdWludDMyX3Qg
c2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0OworCXVpbnQzMl90IHNjdHBfYXNvY19mcmVlX3Jl
c2NfbGltaXQ7CisJdWludDMyX3Qgc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdDsKKwl1
aW50MzJfdCBzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2h1
dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfc2VjcmV0X2xpZmV0aW1l
X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0
cF9ydG9fbWluX2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF9ydG9faW5pdGlhbF9kZWZhdWx0Owor
CXVpbnQzMl90IHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0cF92YWxp
ZF9jb29raWVfbGlmZV9kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1
bHQ7CisJdWludDMyX3Qgc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQ7CisJdWludDMyX3Qgc2N0
cF9wYXRoX3J0eF9tYXhfZGVmYXVsdDsKKwl1aW50MzJfdCBzY3RwX3BhdGhfcGZfdGhyZXNob2xk
OworCXVpbnQzMl90IHNjdHBfYWRkX21vcmVfdGhyZXNob2xkOworCXVpbnQzMl90IHNjdHBfbnJf
aW5jb21pbmdfc3RyZWFtc19kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfbnJfb3V0Z29pbmdfc3Ry
ZWFtc19kZWZhdWx0OworCXVpbnQzMl90IHNjdHBfY210X29uX29mZjsKKwl1aW50MzJfdCBzY3Rw
X2NtdF91c2VfZGFjOworCXVpbnQzMl90IHNjdHBfdXNlX2N3bmRfYmFzZWRfbWF4YnVyc3Q7CisJ
dWludDMyX3Qgc2N0cF9uYXRfZnJpZW5kbHk7CisJdWludDMyX3Qgc2N0cF9MMl9hYmNfdmFyaWFi
bGU7CisJdWludDMyX3Qgc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudDsKKwl1aW50MzJfdCBzY3Rw
X2RvX2RyYWluOworCXVpbnQzMl90IHNjdHBfaGJfbWF4YnVyc3Q7CisJdWludDMyX3Qgc2N0cF9h
Ym9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdDsKKwl1aW50MzJfdCBzY3RwX21pbl9yZXNpZHVh
bDsKKwl1aW50MzJfdCBzY3RwX21heF9yZXRyYW5fY2h1bms7CisJdWludDMyX3Qgc2N0cF9sb2dn
aW5nX2xldmVsOworCS8qIEpSUyAtIFZhcmlhYmxlIGZvciBkZWZhdWx0IGNvbmdlc3Rpb24gY29u
dHJvbCBtb2R1bGUgKi8KKwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCS8qIFJT
IC0gVmFyaWFibGUgZm9yIGRlZmF1bHQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlICovCisJdWlu
dDMyX3Qgc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwl1aW50MzJfdCBzY3RwX2RlZmF1bHRfZnJh
Z19pbnRlcmxlYXZlOworCXVpbnQzMl90IHNjdHBfbW9iaWxpdHlfYmFzZTsKKwl1aW50MzJfdCBz
Y3RwX21vYmlsaXR5X2Zhc3RoYW5kb2ZmOworCXVpbnQzMl90IHNjdHBfaW5pdHNfaW5jbHVkZV9u
YXRfZnJpZW5kbHk7CisJdWludDMyX3Qgc2N0cF9ydHR2YXJfYnc7CisJdWludDMyX3Qgc2N0cF9y
dHR2YXJfcnR0OworCXVpbnQzMl90IHNjdHBfcnR0dmFyX2VxcmV0OworCXVpbnQzMl90IHNjdHBf
c3RlYWR5X3N0ZXA7CisJdWludDMyX3Qgc2N0cF91c2VfZGNjY19lY247CisJdWludDMyX3Qgc2N0
cF9kaWFnX2luZm9fY29kZTsKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorI2lm
IGRlZmluZWQoX19XaW5kb3dzX18pCisJc3RydWN0IHNjdHBfbG9nICpzY3RwX2xvZzsKKyNlbHNl
CisJc3RydWN0IHNjdHBfbG9nIHNjdHBfbG9nOworI2VuZGlmCisjZW5kaWYKKwl1aW50MzJfdCBz
Y3RwX3VkcF90dW5uZWxpbmdfcG9ydDsKKwl1aW50MzJfdCBzY3RwX2VuYWJsZV9zYWNrX2ltbWVk
aWF0ZWx5OworCXVpbnQzMl90IHNjdHBfdnRhZ190aW1lX3dhaXQ7CisJdWludDMyX3Qgc2N0cF9i
dWZmZXJfc3BsaXR0aW5nOworCXVpbnQzMl90IHNjdHBfaW5pdGlhbF9jd25kOworCXVpbnQzMl90
IHNjdHBfYmxhY2tob2xlOworI2lmIGRlZmluZWQoU0NUUF9ERUJVRykKKwl1aW50MzJfdCBzY3Rw
X2RlYnVnX29uOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJdWludDMyX3Qgc2N0
cF9pZ25vcmVfdm13YXJlX2ludGVyZmFjZXM7CisJdWludDMyX3Qgc2N0cF9tYWluX3RpbWVyOwor
CXVpbnQzMl90IHNjdHBfYWRkcl93YXRjaGRvZ19saW1pdDsKKwl1aW50MzJfdCBzY3RwX3Z0YWdf
d2F0Y2hkb2dfbGltaXQ7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5l
ZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwl1aW50MzJfdCBzY3RwX291dHB1dF91bmxvY2tlZDsK
KyNlbmRpZgorfTsKKworLyoKKyAqIGxpbWl0cyBmb3IgdGhlIHN5c2N0bCB2YXJpYWJsZXMKKyAq
LworLyogbWF4ZGdyYW06IE1heGltdW0gb3V0Z29pbmcgU0NUUCBidWZmZXIgc2l6ZSAqLworI2Rl
ZmluZSBTQ1RQQ1RMX01BWERHUkFNX0RFU0MJCSJNYXhpbXVtIG91dGdvaW5nIFNDVFAgYnVmZmVy
IHNpemUiCisjZGVmaW5lIFNDVFBDVExfTUFYREdSQU1fTUlOCQkwCisjZGVmaW5lIFNDVFBDVExf
TUFYREdSQU1fTUFYCQkweEZGRkZGRkZGCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2Rl
ZmluZSBTQ1RQQ1RMX01BWERHUkFNX0RFRkFVTFQJU0JfTUFYCisjZWxzZQorI2RlZmluZSBTQ1RQ
Q1RMX01BWERHUkFNX0RFRkFVTFQJMjYyMTQ0CS8qIDI1NmsgKi8KKyNlbmRpZgorCisvKiByZWN2
c3BhY2U6IE1heGltdW0gaW5jb21pbmcgU0NUUCBidWZmZXIgc2l6ZSAqLworI2RlZmluZSBTQ1RQ
Q1RMX1JFQ1ZTUEFDRV9ERVNDCQkiTWF4aW11bSBpbmNvbWluZyBTQ1RQIGJ1ZmZlciBzaXplIgor
I2RlZmluZSBTQ1RQQ1RMX1JFQ1ZTUEFDRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9SRUNWU1BB
Q0VfTUFYCQkweEZGRkZGRkZGCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2RlZmluZSBT
Q1RQQ1RMX1JFQ1ZTUEFDRV9ERUZBVUxUCVNCX1JBVworI2Vsc2UKKyNkZWZpbmUgU0NUUENUTF9S
RUNWU1BBQ0VfREVGQVVMVAkyNjIxNDQJLyogMjU2ayAqLworI2VuZGlmCisKKy8qIGF1dG9hc2Nv
bmY6IEVuYWJsZSBTQ1RQIEF1dG8tQVNDT05GICovCisjZGVmaW5lIFNDVFBDVExfQVVUT0FTQ09O
Rl9ERVNDCQkiRW5hYmxlIFNDVFAgQXV0by1BU0NPTkYiCisjZGVmaW5lIFNDVFBDVExfQVVUT0FT
Q09ORl9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9BVVRPQVNDT05GX01BWAkJMQorI2RlZmluZSBT
Q1RQQ1RMX0FVVE9BU0NPTkZfREVGQVVMVAkxCisKKy8qIGF1dG9hc2NvbmY6IEVuYWJsZSBTQ1RQ
IEF1dG8tQVNDT05GICovCisjZGVmaW5lIFNDVFBDVExfTVVMVElQTEVBU0NPTkZTX0RFU0MJIkVu
YWJsZSBTQ1RQIE11bGlwbGUtQVNDT05GcyIKKyNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09O
RlNfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfTUFYCTEKKyNkZWZpbmUg
U0NUUENUTF9NVUxUSVBMRUFTQ09ORlNfREVGQVVMVAlTQ1RQX0RFRkFVTFRfTVVMVElQTEVfQVND
T05GUworCisvKiBlY25fZW5hYmxlOiBFbmFibGUgU0NUUCBFQ04gKi8KKyNkZWZpbmUgU0NUUENU
TF9FQ05fRU5BQkxFX0RFU0MJCSJFbmFibGUgU0NUUCBFQ04iCisjZGVmaW5lIFNDVFBDVExfRUNO
X0VOQUJMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9FQ05fRU5BQkxFX01BWAkJMQorI2RlZmlu
ZSBTQ1RQQ1RMX0VDTl9FTkFCTEVfREVGQVVMVAkxCisKKy8qIHByX2VuYWJsZTogRW5hYmxlIFBS
LVNDVFAgKi8KKyNkZWZpbmUgU0NUUENUTF9QUl9FTkFCTEVfREVTQwkJIkVuYWJsZSBQUi1TQ1RQ
IgorI2RlZmluZSBTQ1RQQ1RMX1BSX0VOQUJMRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9QUl9F
TkFCTEVfTUFYCQkxCisjZGVmaW5lIFNDVFBDVExfUFJfRU5BQkxFX0RFRkFVTFQJMQorCisvKiBh
dXRoX2VuYWJsZTogRW5hYmxlIFNDVFAgQVVUSCBmdW5jdGlvbiAqLworI2RlZmluZSBTQ1RQQ1RM
X0FVVEhfRU5BQkxFX0RFU0MJIkVuYWJsZSBTQ1RQIEFVVEggZnVuY3Rpb24iCisjZGVmaW5lIFND
VFBDVExfQVVUSF9FTkFCTEVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQVVUSF9FTkFCTEVfTUFY
CQkxCisjZGVmaW5lIFNDVFBDVExfQVVUSF9FTkFCTEVfREVGQVVMVAkxCisKKy8qIGFzY29uZl9l
bmFibGU6IEVuYWJsZSBTQ1RQIEFTQ09ORiAqLworI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFC
TEVfREVTQwkiRW5hYmxlIFNDVFAgQVNDT05GIgorI2RlZmluZSBTQ1RQQ1RMX0FTQ09ORl9FTkFC
TEVfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9BU0NPTkZfRU5BQkxFX01BWAkxCisjZGVmaW5lIFND
VFBDVExfQVNDT05GX0VOQUJMRV9ERUZBVUxUCTEKKworLyogcmVjb25maWdfZW5hYmxlOiBFbmFi
bGUgU0NUUCBSRS1DT05GSUcgKi8KKyNkZWZpbmUgU0NUUENUTF9SRUNPTkZJR19FTkFCTEVfREVT
QwkiRW5hYmxlIFNDVFAgUkUtQ09ORklHIgorI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJM
RV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9NQVgJMQorI2RlZmluZSBT
Q1RQQ1RMX1JFQ09ORklHX0VOQUJMRV9ERUZBVUxUCTEKKworLyogbnJzYWNrX2VuYWJsZTogRW5h
YmxlIE5SX1NBQ0sgKi8KKyNkZWZpbmUgU0NUUENUTF9OUlNBQ0tfRU5BQkxFX0RFU0MJIkVuYWJs
ZSBTQ1RQIE5SLVNBQ0siCisjZGVmaW5lIFNDVFBDVExfTlJTQUNLX0VOQUJMRV9NSU4JMAorI2Rl
ZmluZSBTQ1RQQ1RMX05SU0FDS19FTkFCTEVfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9OUlNBQ0tf
RU5BQkxFX0RFRkFVTFQJMAorCisvKiBwa3Rkcm9wX2VuYWJsZTogRW5hYmxlIFNDVFAgUGFja2V0
IERyb3AgUmVwb3J0cyAqLworI2RlZmluZSBTQ1RQQ1RMX1BLVERST1BfRU5BQkxFX0RFU0MJIkVu
YWJsZSBTQ1RQIFBLVERST1AiCisjZGVmaW5lIFNDVFBDVExfUEtURFJPUF9FTkFCTEVfTUlOCTAK
KyNkZWZpbmUgU0NUUENUTF9QS1REUk9QX0VOQUJMRV9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX1BL
VERST1BfRU5BQkxFX0RFRkFVTFQJMAorCisvKiBsb29wYmFja19ub2NzdW06IEVuYWJsZSBOTyBD
c3VtIG9uIHBhY2tldHMgc2VudCBvbiBsb29wYmFjayAqLworI2RlZmluZSBTQ1RQQ1RMX0xPT1BC
QUNLX05PQ1NVTV9ERVNDCSJFbmFibGUgTk8gQ3N1bSBvbiBwYWNrZXRzIHNlbnQgb24gbG9vcGJh
Y2siCisjZGVmaW5lIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VNX01JTgkwCisjZGVmaW5lIFNDVFBD
VExfTE9PUEJBQ0tfTk9DU1VNX01BWAkxCisjZGVmaW5lIFNDVFBDVExfTE9PUEJBQ0tfTk9DU1VN
X0RFRkFVTFQJMQorCisvKiBwZWVyX2Noa29oOiBBbW91bnQgdG8gZGViaXQgcGVlcnMgcnduZCBw
ZXIgY2h1bmsgc2VudCAqLworI2RlZmluZSBTQ1RQQ1RMX1BFRVJfQ0hLT0hfREVTQwkJIkFtb3Vu
dCB0byBkZWJpdCBwZWVycyByd25kIHBlciBjaHVuayBzZW50IgorI2RlZmluZSBTQ1RQQ1RMX1BF
RVJfQ0hLT0hfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfUEVFUl9DSEtPSF9NQVgJCTB4RkZGRkZG
RkYKKyNkZWZpbmUgU0NUUENUTF9QRUVSX0NIS09IX0RFRkFVTFQJMjU2CisKKy8qIG1heGJ1cnN0
OiBEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0cCBlbmRwb2ludHMgKi8KKyNkZWZpbmUgU0NUUENU
TF9NQVhCVVJTVF9ERVNDCQkiRGVmYXVsdCBtYXggYnVyc3QgZm9yIHNjdHAgZW5kcG9pbnRzIgor
I2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNUX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNU
X01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX01BWEJVUlNUX0RFRkFVTFQJU0NUUF9E
RUZfTUFYX0JVUlNUCisKKy8qIGZyX21heGJ1cnN0OiBEZWZhdWx0IG1heCBidXJzdCBmb3Igc2N0
cCBlbmRwb2ludHMgd2hlbiBmYXN0IHJldHJhbnNtaXR0aW5nICovCisjZGVmaW5lIFNDVFBDVExf
RlJNQVhCVVJTVF9ERVNDCQkiRGVmYXVsdCBmciBtYXggYnVyc3QgZm9yIHNjdHAgZW5kcG9pbnRz
IgorI2RlZmluZSBTQ1RQQ1RMX0ZSTUFYQlVSU1RfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfRlJN
QVhCVVJTVF9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9GUk1BWEJVUlNUX0RFRkFV
TFQJU0NUUF9ERUZfRlJNQVhfQlVSU1QKKworCisvKiBtYXhjaHVua3M6IERlZmF1bHQgbWF4IGNo
dW5rcyBvbiBxdWV1ZSBwZXIgYXNvYyAqLworI2RlZmluZSBTQ1RQQ1RMX01BWENIVU5LU19ERVND
CQkiRGVmYXVsdCBtYXggY2h1bmtzIG9uIHF1ZXVlIHBlciBhc29jIgorI2RlZmluZSBTQ1RQQ1RM
X01BWENIVU5LU19NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9NQVhDSFVOS1NfTUFYCQkweEZGRkZG
RkZGCisjZGVmaW5lIFNDVFBDVExfTUFYQ0hVTktTX0RFRkFVTFQJU0NUUF9BU09DX01BWF9DSFVO
S1NfT05fUVVFVUUKKworLyogdGNiaGFzaHNpemU6IFR1bmFibGUgZm9yIEhhc2ggdGFibGUgc2l6
ZXMgKi8KKyNkZWZpbmUgU0NUUENUTF9UQ0JIQVNIU0laRV9ERVNDCSJUdW5hYmxlIGZvciBUQ0Ig
aGFzaCB0YWJsZSBzaXplcyIKKyNkZWZpbmUgU0NUUENUTF9UQ0JIQVNIU0laRV9NSU4JCTEKKyNk
ZWZpbmUgU0NUUENUTF9UQ0JIQVNIU0laRV9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENU
TF9UQ0JIQVNIU0laRV9ERUZBVUxUCVNDVFBfVENCSEFTSFNJWkUKKworLyogcGNiaGFzaHNpemU6
IFR1bmFibGUgZm9yIFBDQiBIYXNoIHRhYmxlIHNpemVzICovCisjZGVmaW5lIFNDVFBDVExfUENC
SEFTSFNJWkVfREVTQwkiVHVuYWJsZSBmb3IgUENCIGhhc2ggdGFibGUgc2l6ZXMiCisjZGVmaW5l
IFNDVFBDVExfUENCSEFTSFNJWkVfTUlOCQkxCisjZGVmaW5lIFNDVFBDVExfUENCSEFTSFNJWkVf
TUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfUENCSEFTSFNJWkVfREVGQVVMVAlTQ1RQ
X1BDQkhBU0hTSVpFCisKKy8qIG1pbl9zcGxpdF9wb2ludDogTWluaW11bSBzaXplIHdoZW4gc3Bs
aXR0aW5nIGEgY2h1bmsgKi8KKyNkZWZpbmUgU0NUUENUTF9NSU5fU1BMSVRfUE9JTlRfREVTQwki
TWluaW11bSBzaXplIHdoZW4gc3BsaXR0aW5nIGEgY2h1bmsiCisjZGVmaW5lIFNDVFBDVExfTUlO
X1NQTElUX1BPSU5UX01JTgkwCisjZGVmaW5lIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX01BWAkw
eEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfTUlOX1NQTElUX1BPSU5UX0RFRkFVTFQJU0NUUF9E
RUZBVUxUX1NQTElUX1BPSU5UX01JTgorCisvKiBjaHVua3NjYWxlOiBUdW5hYmxlIGZvciBTY2Fs
aW5nIG9mIG51bWJlciBvZiBjaHVua3MgYW5kIG1lc3NhZ2VzICovCisjZGVmaW5lIFNDVFBDVExf
Q0hVTktTQ0FMRV9ERVNDCQkiVHVuYWJsZSBmb3IgU2NhbGluZyBvZiBudW1iZXIgb2YgY2h1bmtz
IGFuZCBtZXNzYWdlcyIKKyNkZWZpbmUgU0NUUENUTF9DSFVOS1NDQUxFX01JTgkJMQorI2RlZmlu
ZSBTQ1RQQ1RMX0NIVU5LU0NBTEVfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfQ0hV
TktTQ0FMRV9ERUZBVUxUCVNDVFBfQ0hVTktRVUVVRV9TQ0FMRQorCisvKiBkZWxheWVkX3NhY2tf
dGltZTogRGVmYXVsdCBkZWxheWVkIFNBQ0sgdGltZXIgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUENU
TF9ERUxBWUVEX1NBQ0tfVElNRV9ERVNDCSJEZWZhdWx0IGRlbGF5ZWQgU0FDSyB0aW1lciBpbiBt
cyIKKyNkZWZpbmUgU0NUUENUTF9ERUxBWUVEX1NBQ0tfVElNRV9NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX0RFTEFZRURfU0FDS19USU1FX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfREVM
QVlFRF9TQUNLX1RJTUVfREVGQVVMVAlTQ1RQX1JFQ1ZfTVNFQworCisvKiBzYWNrX2ZyZXE6IERl
ZmF1bHQgU0FDSyBmcmVxdWVuY3kgKi8KKyNkZWZpbmUgU0NUUENUTF9TQUNLX0ZSRVFfREVTQwkJ
IkRlZmF1bHQgU0FDSyBmcmVxdWVuY3kiCisjZGVmaW5lIFNDVFBDVExfU0FDS19GUkVRX01JTgkJ
MAorI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfRlJFUV9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NU
UENUTF9TQUNLX0ZSRVFfREVGQVVMVAlTQ1RQX0RFRkFVTFRfU0FDS19GUkVRCisKKy8qIHN5c19y
ZXNvdXJjZTogTWF4IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0gKi8K
KyNkZWZpbmUgU0NUUENUTF9TWVNfUkVTT1VSQ0VfREVTQwkiTWF4IG51bWJlciBvZiBjYWNoZWQg
cmVzb3VyY2VzIGluIHRoZSBzeXN0ZW0iCisjZGVmaW5lIFNDVFBDVExfU1lTX1JFU09VUkNFX01J
TgkwCisjZGVmaW5lIFNDVFBDVExfU1lTX1JFU09VUkNFX01BWAkweEZGRkZGRkZGCisjZGVmaW5l
IFNDVFBDVExfU1lTX1JFU09VUkNFX0RFRkFVTFQJU0NUUF9ERUZfU1lTVEVNX1JFU0NfTElNSVQK
KworLyogYXNvY19yZXNvdXJjZTogTWF4IG51bWJlciBvZiBjYWNoZWQgcmVzb3VyY2VzIGluIGFu
IGFzb2MgKi8KKyNkZWZpbmUgU0NUUENUTF9BU09DX1JFU09VUkNFX0RFU0MJIk1heCBudW1iZXIg
b2YgY2FjaGVkIHJlc291cmNlcyBpbiBhbiBhc29jIgorI2RlZmluZSBTQ1RQQ1RMX0FTT0NfUkVT
T1VSQ0VfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9BU09DX1JFU09VUkNFX01BWAkweEZGRkZGRkZG
CisjZGVmaW5lIFNDVFBDVExfQVNPQ19SRVNPVVJDRV9ERUZBVUxUCVNDVFBfREVGX0FTT0NfUkVT
Q19MSU1JVAorCisvKiBoZWFydGJlYXRfaW50ZXJ2YWw6IERlZmF1bHQgaGVhcnRiZWF0IGludGVy
dmFsIGluIG1zICovCisjZGVmaW5lIFNDVFBDVExfSEVBUlRCRUFUX0lOVEVSVkFMX0RFU0MJIkRl
ZmF1bHQgaGVhcnRiZWF0IGludGVydmFsIGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX0hFQVJUQkVB
VF9JTlRFUlZBTF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9NQVgJ
MHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX0hFQVJUQkVBVF9JTlRFUlZBTF9ERUZBVUxUCVND
VFBfSEJfREVGQVVMVF9NU0VDCisKKy8qIHBtdHVfcmFpc2VfdGltZTogRGVmYXVsdCBQTVRVIHJh
aXNlIHRpbWVyIGluIHNlY29uZHMgKi8KKyNkZWZpbmUgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUVf
REVTQwkiRGVmYXVsdCBQTVRVIHJhaXNlIHRpbWVyIGluIHNlY29uZHMiCisjZGVmaW5lIFNDVFBD
VExfUE1UVV9SQUlTRV9USU1FX01JTgkwCisjZGVmaW5lIFNDVFBDVExfUE1UVV9SQUlTRV9USU1F
X01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfUE1UVV9SQUlTRV9USU1FX0RFRkFVTFQJ
U0NUUF9ERUZfUE1UVV9SQUlTRV9TRUMKKworLyogc2h1dGRvd25fZ3VhcmRfdGltZTogRGVmYXVs
dCBzaHV0ZG93biBndWFyZCB0aW1lciBpbiBzZWNvbmRzICovCisjZGVmaW5lIFNDVFBDVExfU0hV
VERPV05fR1VBUkRfVElNRV9ERVNDCSJTaHV0ZG93biBndWFyZCB0aW1lciBpbiBzZWNvbmRzICgw
IG1lYW5zIDUgdGltZXMgUlRPLk1heCkiCisjZGVmaW5lIFNDVFBDVExfU0hVVERPV05fR1VBUkRf
VElNRV9NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9TSFVURE9XTl9HVUFSRF9USU1FX01BWAkJMHhG
RkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJTUVfREVGQVVMVAkwCisK
Ky8qIHNlY3JldF9saWZldGltZTogRGVmYXVsdCBzZWNyZXQgbGlmZXRpbWUgaW4gc2Vjb25kcyAq
LworI2RlZmluZSBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9ERVNDCSJEZWZhdWx0IHNlY3JldCBs
aWZldGltZSBpbiBzZWNvbmRzIgorI2RlZmluZSBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NSU4J
MAorI2RlZmluZSBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9NQVgJMHhGRkZGRkZGRgorI2RlZmlu
ZSBTQ1RQQ1RMX1NFQ1JFVF9MSUZFVElNRV9ERUZBVUxUCVNDVFBfREVGQVVMVF9TRUNSRVRfTElG
RV9TRUMKKworLyogcnRvX21heDogRGVmYXVsdCBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVv
dXQgaW4gbXMgKi8KKyNkZWZpbmUgU0NUUENUTF9SVE9fTUFYX0RFU0MJCSJEZWZhdWx0IG1heGlt
dW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyIKKyNkZWZpbmUgU0NUUENUTF9SVE9fTUFY
X01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1JUT19NQVhfTUFYCQkweEZGRkZGRkZGCisjZGVmaW5l
IFNDVFBDVExfUlRPX01BWF9ERUZBVUxUCQlTQ1RQX1JUT19VUFBFUl9CT1VORAorCisvKiBydG9f
bWluOiBEZWZhdWx0IG1pbmltdW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyAqLworI2Rl
ZmluZSBTQ1RQQ1RMX1JUT19NSU5fREVTQwkJIkRlZmF1bHQgbWluaW11bSByZXRyYW5zbWlzc2lv
biB0aW1lb3V0IGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX1JUT19NSU5fTUlOCQkwCisjZGVmaW5l
IFNDVFBDVExfUlRPX01JTl9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9SVE9fTUlO
X0RFRkFVTFQJCVNDVFBfUlRPX0xPV0VSX0JPVU5ECisKKy8qIHJ0b19pbml0aWFsOiBEZWZhdWx0
IGluaXRpYWwgcmV0cmFuc21pc3Npb24gdGltZW91dCBpbiBtcyAqLworI2RlZmluZSBTQ1RQQ1RM
X1JUT19JTklUSUFMX0RFU0MJIkRlZmF1bHQgaW5pdGlhbCByZXRyYW5zbWlzc2lvbiB0aW1lb3V0
IGluIG1zIgorI2RlZmluZSBTQ1RQQ1RMX1JUT19JTklUSUFMX01JTgkJMAorI2RlZmluZSBTQ1RQ
Q1RMX1JUT19JTklUSUFMX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1JUT19JTklU
SUFMX0RFRkFVTFQJU0NUUF9SVE9fSU5JVElBTAorCisvKiBpbml0X3J0b19tYXg6IERlZmF1bHQg
bWF4aW11bSByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGR1cmluZyBhc3NvY2lhdGlvbiBzZXR1cCBp
biBtcyAqLworI2RlZmluZSBTQ1RQQ1RMX0lOSVRfUlRPX01BWF9ERVNDCSJEZWZhdWx0IG1heGlt
dW0gcmV0cmFuc21pc3Npb24gdGltZW91dCBkdXJpbmcgYXNzb2NpYXRpb24gc2V0dXAgaW4gbXMi
CisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX01JTgkwCisjZGVmaW5lIFNDVFBDVExfSU5J
VF9SVE9fTUFYX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVE9fTUFYX0RF
RkFVTFQJU0NUUF9SVE9fVVBQRVJfQk9VTkQKKworLyogdmFsaWRfY29va2llX2xpZmU6IERlZmF1
bHQgY29va2llIGxpZmV0aW1lIGluIHNlYyAqLworI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJ
RV9MSUZFX0RFU0MJIkRlZmF1bHQgY29va2llIGxpZmV0aW1lIGluIHNlY29uZHMiCisjZGVmaW5l
IFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkVfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9WQUxJRF9D
T09LSUVfTElGRV9NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX1ZBTElEX0NPT0tJRV9M
SUZFX0RFRkFVTFQJU0NUUF9ERUZBVUxUX0NPT0tJRV9MSUZFCisKKy8qIGluaXRfcnR4X21heDog
RGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRyYW5zbWlzc2lvbiBmb3IgSU5JVCBjaHVua3Mg
Ki8KKyNkZWZpbmUgU0NUUENUTF9JTklUX1JUWF9NQVhfREVTQwkiRGVmYXVsdCBtYXhpbXVtIG51
bWJlciBvZiByZXRyYW5zbWlzc2lvbiBmb3IgSU5JVCBjaHVua3MiCisjZGVmaW5lIFNDVFBDVExf
SU5JVF9SVFhfTUFYX01JTgkwCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVFhfTUFYX01BWAkweEZG
RkZGRkZGCisjZGVmaW5lIFNDVFBDVExfSU5JVF9SVFhfTUFYX0RFRkFVTFQJU0NUUF9ERUZfTUFY
X0lOSVQKKworLyogYXNzb2NfcnR4X21heDogRGVmYXVsdCBtYXhpbXVtIG51bWJlciBvZiByZXRy
YW5zbWlzc2lvbnMgcGVyIGFzc29jaWF0aW9uICovCisjZGVmaW5lIFNDVFBDVExfQVNTT0NfUlRY
X01BWF9ERVNDCSJEZWZhdWx0IG1heGltdW0gbnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBwZXIg
YXNzb2NpYXRpb24iCisjZGVmaW5lIFNDVFBDVExfQVNTT0NfUlRYX01BWF9NSU4JMAorI2RlZmlu
ZSBTQ1RQQ1RMX0FTU09DX1JUWF9NQVhfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9B
U1NPQ19SVFhfTUFYX0RFRkFVTFQJU0NUUF9ERUZfTUFYX1NFTkQKKworLyogcGF0aF9ydHhfbWF4
OiBEZWZhdWx0IG1heGltdW0gb2YgcmV0cmFuc21pc3Npb25zIHBlciBwYXRoICovCisjZGVmaW5l
IFNDVFBDVExfUEFUSF9SVFhfTUFYX0RFU0MJIkRlZmF1bHQgbWF4aW11bSBvZiByZXRyYW5zbWlz
c2lvbnMgcGVyIHBhdGgiCisjZGVmaW5lIFNDVFBDVExfUEFUSF9SVFhfTUFYX01JTgkwCisjZGVm
aW5lIFNDVFBDVExfUEFUSF9SVFhfTUFYX01BWAkweEZGRkZGRkZGCisjZGVmaW5lIFNDVFBDVExf
UEFUSF9SVFhfTUFYX0RFRkFVTFQJU0NUUF9ERUZfTUFYX1BBVEhfUlRYCisKKy8qIHBhdGhfcGZf
dGhyZXNob2xkOiB0aHJlc2hvbGQgZm9yIGNvbnNpZGVyaW5nIHRoZSBwYXRoIHBvdGVudGlhbGx5
IGZhaWxlZCAqLworI2RlZmluZSBTQ1RQQ1RMX1BBVEhfUEZfVEhSRVNIT0xEX0RFU0MJCSJEZWZh
dWx0IHBvdGVudGlhbGx5IGZhaWxlZCB0aHJlc2hvbGQiCisjZGVmaW5lIFNDVFBDVExfUEFUSF9Q
Rl9USFJFU0hPTERfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTERfTUFY
CQkweEZGRkYKKyNkZWZpbmUgU0NUUENUTF9QQVRIX1BGX1RIUkVTSE9MRF9ERUZBVUxUCVNDVFBD
VExfUEFUSF9QRl9USFJFU0hPTERfTUFYCisKKy8qIGFkZF9tb3JlX29uX291dHB1dDogV2hlbiBz
cGFjZS13aXNlIGlzIGl0IHdvcnRod2hpbGUgdG8gdHJ5IHRvIGFkZCBtb3JlIHRvIGEgc29ja2V0
IHNlbmQgYnVmZmVyICovCisjZGVmaW5lIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUX0RFU0MJ
IldoZW4gc3BhY2Utd2lzZSBpcyBpdCB3b3J0aHdoaWxlIHRvIHRyeSB0byBhZGQgbW9yZSB0byBh
IHNvY2tldCBzZW5kIGJ1ZmZlciIKKyNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRf
TUlOCTAKKyNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfTUFYCTB4RkZGRkZGRkYK
KyNkZWZpbmUgU0NUUENUTF9BRERfTU9SRV9PTl9PVVRQVVRfREVGQVVMVCBTQ1RQX0RFRkFVTFRf
QUREX01PUkUKKworLyogaW5jb21pbmdfc3RyZWFtczogRGVmYXVsdCBudW1iZXIgb2YgaW5jb21p
bmcgc3RyZWFtcyAqLworI2RlZmluZSBTQ1RQQ1RMX0lOQ09NSU5HX1NUUkVBTVNfREVTQwkiRGVm
YXVsdCBudW1iZXIgb2YgaW5jb21pbmcgc3RyZWFtcyIKKyNkZWZpbmUgU0NUUENUTF9JTkNPTUlO
R19TVFJFQU1TX01JTgkxCisjZGVmaW5lIFNDVFBDVExfSU5DT01JTkdfU1RSRUFNU19NQVgJNjU1
MzUKKyNkZWZpbmUgU0NUUENUTF9JTkNPTUlOR19TVFJFQU1TX0RFRkFVTFQgU0NUUF9JU1RSRUFN
X0lOSVRJQUwKKworLyogb3V0Z29pbmdfc3RyZWFtczogRGVmYXVsdCBudW1iZXIgb2Ygb3V0Z29p
bmcgc3RyZWFtcyAqLworI2RlZmluZSBTQ1RQQ1RMX09VVEdPSU5HX1NUUkVBTVNfREVTQwkiRGVm
YXVsdCBudW1iZXIgb2Ygb3V0Z29pbmcgc3RyZWFtcyIKKyNkZWZpbmUgU0NUUENUTF9PVVRHT0lO
R19TVFJFQU1TX01JTgkxCisjZGVmaW5lIFNDVFBDVExfT1VUR09JTkdfU1RSRUFNU19NQVgJNjU1
MzUKKyNkZWZpbmUgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TX0RFRkFVTFQgU0NUUF9PU1RSRUFN
X0lOSVRJQUwKKworLyogY210X29uX29mZjogQ01UIG9uL29mZiBmbGFnICovCisjZGVmaW5lIFND
VFBDVExfQ01UX09OX09GRl9ERVNDCQkiQ01UIHNldHRpbmdzIgorI2RlZmluZSBTQ1RQQ1RMX0NN
VF9PTl9PRkZfTUlOCQlTQ1RQX0NNVF9PRkYKKyNkZWZpbmUgU0NUUENUTF9DTVRfT05fT0ZGX01B
WAkJU0NUUF9DTVRfTUFYCisjZGVmaW5lIFNDVFBDVExfQ01UX09OX09GRl9ERUZBVUxUCVNDVFBf
Q01UX09GRgorCisvKiBjbXRfdXNlX2RhYzogQ01UIERBQyBvbi9vZmYgZmxhZyAqLworI2RlZmlu
ZSBTQ1RQQ1RMX0NNVF9VU0VfREFDX0RFU0MJIkNNVCBEQUMgb24vb2ZmIGZsYWciCisjZGVmaW5l
IFNDVFBDVExfQ01UX1VTRV9EQUNfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQ01UX1VTRV9EQUNf
TUFYCQkxCisjZGVmaW5lIFNDVFBDVExfQ01UX1VTRV9EQUNfREVGQVVMVCAgICAJMAorCisvKiBj
d25kX21heGJ1cnN0OiBVc2UgYSBDV05EIGFkanVzdGluZyBtYXhidXJzdCAqLworI2RlZmluZSBT
Q1RQQ1RMX0NXTkRfTUFYQlVSU1RfREVTQwkiVXNlIGEgQ1dORCBhZGp1c3RpbmcgbWF4YnVyc3Qi
CisjZGVmaW5lIFNDVFBDVExfQ1dORF9NQVhCVVJTVF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0NX
TkRfTUFYQlVSU1RfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9DV05EX01BWEJVUlNUX0RFRkFVTFQJ
MQorCisvKiBuYXRfZnJpZW5kbHk6IFNDVFAgTkFUIGZyaWVuZGx5IG9wZXJhdGlvbiAqLworI2Rl
ZmluZSBTQ1RQQ1RMX05BVF9GUklFTkRMWV9ERVNDCSJTQ1RQIE5BVCBmcmllbmRseSBvcGVyYXRp
b24iCisjZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX01JTgkwCisjZGVmaW5lIFNDVFBDVExf
TkFUX0ZSSUVORExZX01BWAkxCisjZGVmaW5lIFNDVFBDVExfTkFUX0ZSSUVORExZX0RFRkFVTFQJ
MQorCisvKiBhYmNfbF92YXI6IFNDVFAgQUJDIG1heCBpbmNyZWFzZSBwZXIgU0FDSyAoTCkgKi8K
KyNkZWZpbmUgU0NUUENUTF9BQkNfTF9WQVJfREVTQwkJIlNDVFAgQUJDIG1heCBpbmNyZWFzZSBw
ZXIgU0FDSyAoTCkiCisjZGVmaW5lIFNDVFBDVExfQUJDX0xfVkFSX01JTgkJMAorI2RlZmluZSBT
Q1RQQ1RMX0FCQ19MX1ZBUl9NQVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9BQkNfTF9W
QVJfREVGQVVMVAkyCisKKy8qIG1heF9jaGFpbmVkX21idWZzOiBEZWZhdWx0IG1heCBudW1iZXIg
b2Ygc21hbGwgbWJ1ZnMgb24gYSBjaGFpbiAqLworI2RlZmluZSBTQ1RQQ1RMX01BWF9DSEFJTkVE
X01CVUZTX0RFU0MJIkRlZmF1bHQgbWF4IG51bWJlciBvZiBzbWFsbCBtYnVmcyBvbiBhIGNoYWlu
IgorI2RlZmluZSBTQ1RQQ1RMX01BWF9DSEFJTkVEX01CVUZTX01JTgkwCisjZGVmaW5lIFNDVFBD
VExfTUFYX0NIQUlORURfTUJVRlNfTUFYCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9NQVhf
Q0hBSU5FRF9NQlVGU19ERUZBVUxUCVNDVFBfREVGQVVMVF9NQlVGU19JTl9DSEFJTgorCisvKiBk
b19zY3RwX2RyYWluOiBTaG91bGQgU0NUUCByZXNwb25kIHRvIHRoZSBkcmFpbiBjYWxscyAqLwor
I2RlZmluZSBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fREVTQwkiU2hvdWxkIFNDVFAgcmVzcG9uZCB0
byB0aGUgZHJhaW4gY2FsbHMiCisjZGVmaW5lIFNDVFBDVExfRE9fU0NUUF9EUkFJTl9NSU4JMAor
I2RlZmluZSBTQ1RQQ1RMX0RPX1NDVFBfRFJBSU5fTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9ET19T
Q1RQX0RSQUlOX0RFRkFVTFQJMQorCisvKiBoYl9tYXhfYnVyc3Q6IENvbmZpcm1hdGlvbiBIZWFy
dGJlYXQgbWF4IGJ1cnN0PyAqLworI2RlZmluZSBTQ1RQQ1RMX0hCX01BWF9CVVJTVF9ERVNDCSJD
b25maXJtYXRpb24gSGVhcnRiZWF0IG1heCBidXJzdCIKKyNkZWZpbmUgU0NUUENUTF9IQl9NQVhf
QlVSU1RfTUlOCTEKKyNkZWZpbmUgU0NUUENUTF9IQl9NQVhfQlVSU1RfTUFYCTB4RkZGRkZGRkYK
KyNkZWZpbmUgU0NUUENUTF9IQl9NQVhfQlVSU1RfREVGQVVMVAlTQ1RQX0RFRl9IQk1BWF9CVVJT
VAorCisvKiBhYm9ydF9hdF9saW1pdDogV2hlbiBvbmUtMi1vbmUgaGl0cyBxbGltaXQgYWJvcnQg
Ki8KKyNkZWZpbmUgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9ERVNDCSJXaGVuIG9uZS0yLW9uZSBo
aXRzIHFsaW1pdCBhYm9ydCIKKyNkZWZpbmUgU0NUUENUTF9BQk9SVF9BVF9MSU1JVF9NSU4JMAor
I2RlZmluZSBTQ1RQQ1RMX0FCT1JUX0FUX0xJTUlUX01BWAkxCisjZGVmaW5lIFNDVFBDVExfQUJP
UlRfQVRfTElNSVRfREVGQVVMVAkwCisKKy8qIG1pbl9yZXNpZHVhbDogbWluIHJlc2lkdWFsIGlu
IGEgZGF0YSBmcmFnbWVudCBsZWZ0b3ZlciAqLworI2RlZmluZSBTQ1RQQ1RMX01JTl9SRVNJRFVB
TF9ERVNDCSJNaW5pbXVtIHJlc2lkdWFsIGRhdGEgY2h1bmsgaW4gc2Vjb25kIHBhcnQgb2Ygc3Bs
aXQiCisjZGVmaW5lIFNDVFBDVExfTUlOX1JFU0lEVUFMX01JTgkyMAorI2RlZmluZSBTQ1RQQ1RM
X01JTl9SRVNJRFVBTF9NQVgJNjU1MzUKKyNkZWZpbmUgU0NUUENUTF9NSU5fUkVTSURVQUxfREVG
QVVMVAkxNDUyCisKKy8qIG1heF9yZXRyYW5fY2h1bms6IG1heCBjaHVuayByZXRyYW5zbWlzc2lv
bnMgKi8KKyNkZWZpbmUgU0NUUENUTF9NQVhfUkVUUkFOX0NIVU5LX0RFU0MJIk1heGltdW0gdGlt
ZXMgYW4gdW5sdWNreSBjaHVuayBjYW4gYmUgcmV0cmFuJ2QgYmVmb3JlIGFzc29jIGFib3J0Igor
I2RlZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hVTktfTUlOCTAKKyNkZWZpbmUgU0NUUENUTF9N
QVhfUkVUUkFOX0NIVU5LX01BWAk2NTUzNQorI2RlZmluZSBTQ1RQQ1RMX01BWF9SRVRSQU5fQ0hV
TktfREVGQVVMVAkzMAorCisvKiBzY3RwX2xvZ2dpbmc6IFRoaXMgZ2l2ZXMgdXMgbG9nZ2luZyB3
aGVuIHRoZSBvcHRpb25zIGFyZSBlbmFibGVkICovCisjZGVmaW5lIFNDVFBDVExfTE9HR0lOR19M
RVZFTF9ERVNDCSJMdHJhY2UvS1RSIHRyYWNlIGxvZ2dpbmcgbGV2ZWwiCisjZGVmaW5lIFNDVFBD
VExfTE9HR0lOR19MRVZFTF9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX0xPR0dJTkdfTEVWRUxfTUFY
CTB4ZmZmZmZmZmYKKyNkZWZpbmUgU0NUUENUTF9MT0dHSU5HX0xFVkVMX0RFRkFVTFQJMAorCisv
KiBKUlMgLSBkZWZhdWx0IGNvbmdlc3Rpb24gY29udHJvbCBtb2R1bGUgc3lzY3RsICovCisjZGVm
aW5lIFNDVFBDVExfREVGQVVMVF9DQ19NT0RVTEVfREVTQwkJIkRlZmF1bHQgY29uZ2VzdGlvbiBj
b250cm9sIG1vZHVsZSIKKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NSU4JCTAK
KyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0NDX01PRFVMRV9NQVgJCTIKKyNkZWZpbmUgU0NUUENU
TF9ERUZBVUxUX0NDX01PRFVMRV9ERUZBVUxUCTAKKworLyogUlMgLSBkZWZhdWx0IHN0cmVhbSBz
Y2hlZHVsaW5nIG1vZHVsZSBzeXNjdGwgKi8KKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX1NTX01P
RFVMRV9ERVNDCQkiRGVmYXVsdCBzdHJlYW0gc2NoZWR1bGluZyBtb2R1bGUiCisjZGVmaW5lIFND
VFBDVExfREVGQVVMVF9TU19NT0RVTEVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9T
U19NT0RVTEVfTUFYCQk1CisjZGVmaW5lIFNDVFBDVExfREVGQVVMVF9TU19NT0RVTEVfREVGQVVM
VAkwCisKKy8qIFJSUyAtIGRlZmF1bHQgZnJhZ21lbnQgaW50ZXJsZWF2ZSAqLworI2RlZmluZSBT
Q1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX0RFU0MJIkRlZmF1bHQgZnJhZ21lbnQgaW50
ZXJsZWF2ZSBsZXZlbCIKKyNkZWZpbmUgU0NUUENUTF9ERUZBVUxUX0ZSQUdfSU5URVJMRUFWRV9N
SU4JMAorI2RlZmluZSBTQ1RQQ1RMX0RFRkFVTFRfRlJBR19JTlRFUkxFQVZFX01BWAkyCisjZGVm
aW5lIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVSTEVBVkVfREVGQVVMVAkxCisKKy8qIG1vYmls
aXR5X2Jhc2U6IEVuYWJsZSBTQ1RQIG1vYmlsaXR5IHN1cHBvcnQgKi8KKyNkZWZpbmUgU0NUUENU
TF9NT0JJTElUWV9CQVNFX0RFU0MJIkVuYWJsZSBTQ1RQIGJhc2UgbW9iaWxpdHkiCisjZGVmaW5l
IFNDVFBDVExfTU9CSUxJVFlfQkFTRV9NSU4JMAorI2RlZmluZSBTQ1RQQ1RMX01PQklMSVRZX0JB
U0VfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9CQVNFX0RFRkFVTFQJMAorCisvKiBt
b2JpbGl0eV9mYXN0aGFuZG9mZjogRW5hYmxlIFNDVFAgZmFzdCBoYW5kb2ZmIHN1cHBvcnQgKi8K
KyNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9ERVNDCSJFbmFibGUgU0NUUCBm
YXN0IGhhbmRvZmYiCisjZGVmaW5lIFNDVFBDVExfTU9CSUxJVFlfRkFTVEhBTkRPRkZfTUlOCTAK
KyNkZWZpbmUgU0NUUENUTF9NT0JJTElUWV9GQVNUSEFORE9GRl9NQVgJMQorI2RlZmluZSBTQ1RQ
Q1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGX0RFRkFVTFQJMAorCisvKiBFbmFibGUgU0NUUC9VRFAg
dHVubmVsaW5nIHBvcnQgKi8KKyNkZWZpbmUgU0NUUENUTF9VRFBfVFVOTkVMSU5HX1BPUlRfREVT
QwkJIlNldCB0aGUgU0NUUC9VRFAgdHVubmVsaW5nIHBvcnQiCisjZGVmaW5lIFNDVFBDVExfVURQ
X1RVTk5FTElOR19QT1JUX01JTgkJMAorI2RlZmluZSBTQ1RQQ1RMX1VEUF9UVU5ORUxJTkdfUE9S
VF9NQVgJCTY1NTM1CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNkZWZpbmUgU0NUUENUTF9V
RFBfVFVOTkVMSU5HX1BPUlRfREVGQVVMVAkwCisjZWxzZQorI2RlZmluZSBTQ1RQQ1RMX1VEUF9U
VU5ORUxJTkdfUE9SVF9ERUZBVUxUCVNDVFBfT1ZFUl9VRFBfVFVOTkVMSU5HX1BPUlQKKyNlbmRp
ZgorCisvKiBFbmFibGUgc2VuZGluZyBvZiB0aGUgU0FDSy1JTU1FRElBVEVMWSBiaXQgKi8KKyNk
ZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERVNDCSJFbmFibGUgc2VuZGlu
ZyBvZiB0aGUgU0FDSy1JTU1FRElBVEVMWS1iaXQuIgorI2RlZmluZSBTQ1RQQ1RMX1NBQ0tfSU1N
RURJQVRFTFlfRU5BQkxFX01JTgkwCisjZGVmaW5lIFNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9F
TkFCTEVfTUFYCTEKKyNkZWZpbmUgU0NUUENUTF9TQUNLX0lNTUVESUFURUxZX0VOQUJMRV9ERUZB
VUxUCVNDVFBDVExfU0FDS19JTU1FRElBVEVMWV9FTkFCTEVfTUFYCisKKy8qIEVuYWJsZSBzZW5k
aW5nIG9mIHRoZSBOQVQtRlJJRU5ETFkgbWVzc2FnZSAqLworI2RlZmluZSBTQ1RQQ1RMX05BVF9G
UklFTkRMWV9JTklUU19ERVNDCSJFbmFibGUgc2VuZGluZyBvZiB0aGUgbmF0LWZyaWVuZGx5IFND
VFAgb3B0aW9uIG9uIElOSVRzLiIKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNf
TUlOCTAKKyNkZWZpbmUgU0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfTUFYCTEKKyNkZWZpbmUg
U0NUUENUTF9OQVRfRlJJRU5ETFlfSU5JVFNfREVGQVVMVAlTQ1RQQ1RMX05BVF9GUklFTkRMWV9J
TklUU19NSU4KKworLyogVnRhZyB0aW1lIHdhaXQgaW4gc2Vjb25kcyAqLworI2RlZmluZSBTQ1RQ
Q1RMX1RJTUVfV0FJVF9ERVNDCSJWdGFnIHRpbWUgd2FpdCB0aW1lIGluIHNlY29uZHMsIDAgZGlz
YWJsZXMgaXQuIgorI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9NSU4JMAorI2RlZmluZSBTQ1RQ
Q1RMX1RJTUVfV0FJVF9NQVgJMHhmZmZmZmZmZgorI2RlZmluZSBTQ1RQQ1RMX1RJTUVfV0FJVF9E
RUZBVUxUCVNDVFBfVElNRV9XQUlUCisKKy8qIEVuYWJsZSBTZW5kL1JlY2VpdmUgYnVmZmVyIHNw
bGl0dGluZyAqLworI2RlZmluZSBTQ1RQQ1RMX0JVRkZFUl9TUExJVFRJTkdfREVTQwkJIkVuYWJs
ZSBzZW5kL3JlY2VpdmUgYnVmZmVyIHNwbGl0dGluZy4iCisjZGVmaW5lIFNDVFBDVExfQlVGRkVS
X1NQTElUVElOR19NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9CVUZGRVJfU1BMSVRUSU5HX01BWAkJ
MHgzCisjZGVmaW5lIFNDVFBDVExfQlVGRkVSX1NQTElUVElOR19ERUZBVUxUCVNDVFBDVExfQlVG
RkVSX1NQTElUVElOR19NSU4KKworLyogSW5pdGlhbCBjb25nZXN0aW9uIHdpbmRvdyBpbiBNVFUg
Ki8KKyNkZWZpbmUgU0NUUENUTF9JTklUSUFMX0NXTkRfREVTQwkiSW5pdGlhbCBjb25nZXN0aW9u
IHdpbmRvdyBpbiBNVFVzIgorI2RlZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9NSU4JMAorI2Rl
ZmluZSBTQ1RQQ1RMX0lOSVRJQUxfQ1dORF9NQVgJMHhmZmZmZmZmZgorI2RlZmluZSBTQ1RQQ1RM
X0lOSVRJQUxfQ1dORF9ERUZBVUxUCTMKKworLyogcnR0dmFyIHNtb290aCBhdmcgZm9yIGJ3IGNh
bGMgICovCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0JXX0RFU0MJIlNoaWZ0IGFtb3VudCBmb3Ig
Yncgc21vb3RoaW5nIG9uIHJ0dCBjYWxjIgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9CV19NSU4J
MAorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9CV19NQVgJMzIKKyNkZWZpbmUgU0NUUENUTF9SVFRW
QVJfQldfREVGQVVMVAk0CisKKy8qIHJ0dHZhciBzbW9vdGggYXZnIGZvciBidyBjYWxjICAqLwor
I2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfREVTQwkiU2hpZnQgYW1vdW50IGZvciBydHQgc21v
b3RoaW5nIG9uIHJ0dCBjYWxjIgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9SVFRfTUlOCTAKKyNk
ZWZpbmUgU0NUUENUTF9SVFRWQVJfUlRUX01BWAkzMgorI2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9S
VFRfREVGQVVMVAk1CisKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRVFSRVRfREVTQwkiV2hhdCB0
byByZXR1cm4gd2hlbiBydHQgYW5kIGJ3IGFyZSB1bmNoYW5nZWQiCisjZGVmaW5lIFNDVFBDVExf
UlRUVkFSX0VRUkVUX01JTgkwCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0VRUkVUX01BWAkxCisj
ZGVmaW5lIFNDVFBDVExfUlRUVkFSX0VRUkVUX0RFRkFVTFQJMAorCisjZGVmaW5lIFNDVFBDVExf
UlRUVkFSX1NURUFEWVNfREVTQwkiSG93IG1hbnkgdGhlIHNhbWVzIGl0IHRha2VzIHRvIHRyeSBz
dGVwIGRvd24gb2YgY3duZCIKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfU1RFQURZU19NSU4JMAor
I2RlZmluZSBTQ1RQQ1RMX1JUVFZBUl9TVEVBRFlTX01BWAkweEZGRkYKKyNkZWZpbmUgU0NUUENU
TF9SVFRWQVJfU1RFQURZU19ERUZBVUxUCTIwIC8qIDAgbWVhbnMgZGlzYWJsZSBmZWF0dXJlICov
CisKKyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9ERVNDCSJFbmFibGUgZm9yIFJUQ0Mg
Q0MgZGF0YWNlbnRlciBFQ04iCisjZGVmaW5lIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ05fTUlOCTAK
KyNkZWZpbmUgU0NUUENUTF9SVFRWQVJfRENDQ0VDTl9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX1JU
VFZBUl9EQ0NDRUNOX0RFRkFVTFQJMSAvKiAwIG1lYW5zIGRpc2FibGUgZmVhdHVyZSAqLworCisj
ZGVmaW5lIFNDVFBDVExfQkxBQ0tIT0xFX0RFU0MJCSJFbmFibGUgU0NUUCBibGFja2hvbGluZy4g
U2VlIGJsYWNraG9sZSg0KSBmb3IgbW9yZSBkZXRhaWxzLiIKKyNkZWZpbmUgU0NUUENUTF9CTEFD
S0hPTEVfTUlOCQkwCisjZGVmaW5lIFNDVFBDVExfQkxBQ0tIT0xFX01BWAkJMgorI2RlZmluZSBT
Q1RQQ1RMX0JMQUNLSE9MRV9ERUZBVUxUCVNDVFBDVExfQkxBQ0tIT0xFX01JTgorCisjZGVmaW5l
IFNDVFBDVExfRElBR19JTkZPX0NPREVfREVTQwkiRGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBlcnJv
ciBjYXVzZSBjb2RlIgorI2RlZmluZSBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFX01JTgkwCisjZGVm
aW5lIFNDVFBDVExfRElBR19JTkZPX0NPREVfTUFYCTY1NTM1CisjZGVmaW5lIFNDVFBDVExfRElB
R19JTkZPX0NPREVfREVGQVVMVAkwCisKKyNpZiBkZWZpbmVkKFNDVFBfREVCVUcpCisvKiBkZWJ1
ZzogQ29uZmlndXJlIGRlYnVnIG91dHB1dCAqLworI2RlZmluZSBTQ1RQQ1RMX0RFQlVHX0RFU0MJ
IkNvbmZpZ3VyZSBkZWJ1ZyBvdXRwdXQiCisjZGVmaW5lIFNDVFBDVExfREVCVUdfTUlOCTAKKyNk
ZWZpbmUgU0NUUENUTF9ERUJVR19NQVgJMHhGRkZGRkZGRgorI2RlZmluZSBTQ1RQQ1RMX0RFQlVH
X0RFRkFVTFQJMAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgU0NU
UENUTF9NQUlOX1RJTUVSX0RFU0MJCSJNYWluIHRpbWVyIGludGVydmFsIGluIG1zIgorI2RlZmlu
ZSBTQ1RQQ1RMX01BSU5fVElNRVJfTUlOCQkxCisjZGVmaW5lIFNDVFBDVExfTUFJTl9USU1FUl9N
QVgJCTB4RkZGRkZGRkYKKyNkZWZpbmUgU0NUUENUTF9NQUlOX1RJTUVSX0RFRkFVTFQJMTAKKwor
I2RlZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNFU19ERVNDCQkiSWdub3JlIFZN
d2FyZSBJbnRlcmZhY2VzIgorI2RlZmluZSBTQ1RQQ1RMX0lHTk9SRV9WTVdBUkVfSU5URVJGQUNF
U19NSU4JCTAKKyNkZWZpbmUgU0NUUENUTF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfTUFYCQkx
CisjZGVmaW5lIFNDVFBDVExfSUdOT1JFX1ZNV0FSRV9JTlRFUkZBQ0VTX0RFRkFVTFQJU0NUUENU
TF9JR05PUkVfVk1XQVJFX0lOVEVSRkFDRVNfTUFYCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19B
UFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorI2RlZmluZSBTQ1RQQ1RM
X09VVFBVVF9VTkxPQ0tFRF9ERVNDCSJVbmxvY2sgc29ja2V0IHdoZW4gc2VuZGluZyBwYWNrZXRz
IGRvd24gdG8gSVAuIgorI2RlZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9NSU4JMAorI2Rl
ZmluZSBTQ1RQQ1RMX09VVFBVVF9VTkxPQ0tFRF9NQVgJMQorI2RlZmluZSBTQ1RQQ1RMX09VVFBV
VF9VTkxPQ0tFRF9ERUZBVUxUCVNDVFBDVExfT1VUUFVUX1VOTE9DS0VEX01JTgorI2VuZGlmCisK
KyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJ
TUlUX0RFU0MJIkFkZHJlc3Mgd2F0Y2hkb2cgbGltaXQiCisjZGVmaW5lCVNDVFBDVExfQUREUl9X
QVRDSERPR19MSU1JVF9NSU4JCTAKKyNkZWZpbmUJU0NUUENUTF9BRERSX1dBVENIRE9HX0xJTUlU
X01BWAkJMHhGRkZGRkZGRgorI2RlZmluZQlTQ1RQQ1RMX0FERFJfV0FUQ0hET0dfTElNSVRfREVG
QVVMVAlTQ1RQQ1RMX0FERFJfV0FUQ0hET0dfTElNSVRfTUlOCisKKyNkZWZpbmUJU0NUUENUTF9W
VEFHX1dBVENIRE9HX0xJTUlUX0RFU0MJIlZUYWcgd2F0Y2hkb2cgbGltaXQiCisjZGVmaW5lCVND
VFBDVExfVlRBR19XQVRDSERPR19MSU1JVF9NSU4JCTAKKyNkZWZpbmUJU0NUUENUTF9WVEFHX1dB
VENIRE9HX0xJTUlUX01BWAkJMHhGRkZGRkZGRgorI2RlZmluZQlTQ1RQQ1RMX1ZUQUdfV0FUQ0hE
T0dfTElNSVRfREVGQVVMVAlTQ1RQQ1RMX1ZUQUdfV0FUQ0hET0dfTElNSVRfTUlOCisjZW5kaWYK
KworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisjaWYgZGVmaW5lZChTWVNDVExfREVDTCkKK1NZU0NUTF9ERUNMKF9uZXRfaW5l
dF9zY3RwKTsKKyNlbmRpZgorI2VuZGlmCisKK3ZvaWQgc2N0cF9pbml0X3N5c2N0bHModm9pZCk7
CisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3ZvaWQgc2N0cF9maW5pc2hfc3lzY3Rscyh2b2lk
KTsKKyNlbmRpZgorCisjZW5kaWYgLyogX0tFUk5FTCAqLworI2VuZGlmIC8qIF9fc2N0cF9zeXNj
dGxfaF9fICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF90
aW1lci5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuYwppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi40MjZiYTQ0YWVlZTIxNWFi
ZmM2ZDk5N2EzZjBhMzVlMjRkNjMwOGQ4IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF90aW1lci5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9z
Y3RwX3RpbWVyLmMKQEAgLTAsMCArMSwxNjIyIEBACisvKi0KKyAqIFNQRFgtTGljZW5zZS1JZGVu
dGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNywgYnkg
Q2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICoKKyAq
IGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgor
ICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUgbmFtZSBvZiBDaXNj
byBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1ZGUgPHN5cy9jZGVm
cy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3NjdHBfdGltZXIuYyAz
MTc1OTIgMjAxNy0wNC0yOSAwOTo1NzoyN1ogdHVleGVuICQiKTsKKyNlbmRpZgorCisjZGVmaW5l
IF9JUF9WSEwKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfcGNiLmg+CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0Zy
ZWVCU0QpCisjaW5jbHVkZSA8bmV0aW5ldDYvc2N0cDZfdmFyLmg+CisjZW5kaWYKKyNlbmRpZgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lz
Y3RsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5l
dC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRl
IDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0YS5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3Nj
dHBfaW5wdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfdWlvLmg+CisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQorI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4K
KyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNkZWZpbmUgQVBQTEVf
RklMRV9OTyA2CisjZW5kaWYKKwordm9pZAorc2N0cF9hdWRpdF9yZXRyYW5taXNzaW9uX3F1ZXVl
KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1
bmsgKmNoazsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjQsICJBdWRpdCBpbnZva2VkIG9u
IHNlbmQgcXVldWUgY250OiVkIG9ucXVldWU6JWRcbiIsCisJCQlhc29jLT5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQsCisJCQlhc29jLT5zZW50X3F1ZXVlX2NudCk7CisJYXNvYy0+c2VudF9xdWV1ZV9y
ZXRyYW5fY250ID0gMDsKKwlhc29jLT5zZW50X3F1ZXVlX2NudCA9IDA7CisJVEFJTFFfRk9SRUFD
SChjaGssICZhc29jLT5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VudCA9
PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJc2N0cF91Y291bnRfaW5jcihhc29jLT5zZW50
X3F1ZXVlX3JldHJhbl9jbnQpOworCQl9CisJCWFzb2MtPnNlbnRfcXVldWVfY250Kys7CisJfQor
CVRBSUxRX0ZPUkVBQ0goY2hrLCAmYXNvYy0+Y29udHJvbF9zZW5kX3F1ZXVlLCBzY3RwX25leHQp
IHsKKwkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJc2N0cF91
Y291bnRfaW5jcihhc29jLT5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCQl9CisJfQorCVRBSUxR
X0ZPUkVBQ0goY2hrLCAmYXNvYy0+YXNjb25mX3NlbmRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlp
ZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQlzY3RwX3Vjb3VudF9p
bmNyKGFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCX0KKwl9CisJU0NUUERCRyhTQ1RQ
X0RFQlVHX1RJTUVSNCwgIkF1ZGl0IGNvbXBsZXRlcyByZXRyYW46JWQgb25xdWV1ZTolZFxuIiwK
KwkJYXNvYy0+c2VudF9xdWV1ZV9yZXRyYW5fY250LAorCQlhc29jLT5zZW50X3F1ZXVlX2NudCk7
Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQoc3RydWN0IHNjdHBf
aW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCwgdWludDE2X3QgdGhyZXNob2xkKQoreworCWlmIChuZXQpIHsKKwkJbmV0LT5lcnJvcl9j
b3VudCsrOworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LCAiRXJyb3IgY291bnQgZm9yICVw
IG5vdyAlZCB0aHJlc2g6JWRcbiIsCisJCQkodm9pZCAqKW5ldCwgbmV0LT5lcnJvcl9jb3VudCwK
KwkJCW5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpOworCQlpZiAobmV0LT5lcnJvcl9jb3VudCA+IG5l
dC0+ZmFpbHVyZV90aHJlc2hvbGQpIHsKKwkJCS8qIFdlIGhhZCBhIHRocmVzaG9sZCBmYWlsdXJl
ICovCisJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQluZXQtPmRlc3Rf
c3RhdGUgJj0gflNDVFBfQUREUl9SRVFfUFJJTUFSWTsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgJj0g
flNDVFBfQUREUl9QRjsKKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNF
X0RPV04sCisJCQkJICAgIHN0Y2IsIDAsCisJCQkJICAgICh2b2lkICopbmV0LCBTQ1RQX1NPX05P
VF9MT0NLRUQpOworCQkJfQorCQl9IGVsc2UgaWYgKChuZXQtPnBmX3RocmVzaG9sZCA8IG5ldC0+
ZmFpbHVyZV90aHJlc2hvbGQpICYmCisJCSAgICAgICAgICAgKG5ldC0+ZXJyb3JfY291bnQgPiBu
ZXQtPnBmX3RocmVzaG9sZCkpIHsKKwkJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQURE
Ul9QRikpIHsKKwkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1BGOworCQkJCW5ldC0+
bGFzdF9hY3RpdmUgPSBzY3RwX2dldF90aWNrX2NvdW50KCk7CisJCQkJc2N0cF9zZW5kX2hiKHN0
Y2IsIG5ldCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX0hFQVJUQkVBVCwKKwkJCQkgICAgICAgICAgICAgICAgaW5wLCBzdGNiLCBuZXQs
CisJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1RJTUVSICsgU0NUUF9MT0NfMSk7
CisJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0
Y2IsIG5ldCk7CisJCQl9CisJCX0KKwl9CisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuICgw
KTsKKworCWlmIChuZXQpIHsKKwkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5D
T05GSVJNRUQpID09IDApIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19s
ZXZlbCkgJiBTQ1RQX1RIUkVTSE9MRF9MT0dHSU5HKSB7CisJCQkJc2N0cF9taXNjX2ludHMoU0NU
UF9USFJFU0hPTERfSU5DUiwKKwkJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9j
b3VudCwKKwkJCQkJICAgICAgIChzdGNiLT5hc29jLm92ZXJhbGxfZXJyb3JfY291bnQrMSksCisJ
CQkJCSAgICAgICBTQ1RQX0ZST01fU0NUUF9USU1FUiwKKwkJCQkJICAgICAgIF9fTElORV9fKTsK
KwkJCX0KKwkJCXN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCsrOworCQl9CisJfSBlbHNl
IHsKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfVEhS
RVNIT0xEX0xPR0dJTkcpIHsKKwkJCXNjdHBfbWlzY19pbnRzKFNDVFBfVEhSRVNIT0xEX0lOQ1Is
CisJCQkJICAgICAgIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJCQkgICAgICAg
KHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCsxKSwKKwkJCQkgICAgICAgU0NUUF9GUk9N
X1NDVFBfVElNRVIsCisJCQkJICAgICAgIF9fTElORV9fKTsKKwkJfQorCQlzdGNiLT5hc29jLm92
ZXJhbGxfZXJyb3JfY291bnQrKzsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX1RJTUVSNCwgIk92
ZXJhbGwgZXJyb3IgY291bnQgZm9yICVwIG5vdyAlZCB0aHJlc2g6JXUgc3RhdGU6JXhcbiIsCisJ
CSh2b2lkICopJnN0Y2ItPmFzb2MsIHN0Y2ItPmFzb2Mub3ZlcmFsbF9lcnJvcl9jb3VudCwKKwkJ
KHVpbnQzMl90KXRocmVzaG9sZCwKKwkJKChuZXQgPT0gTlVMTCkgPyAodWludDMyX3QpIDAgOiAo
dWludDMyX3QpIG5ldC0+ZGVzdF9zdGF0ZSkpOworCS8qCisJICogV2Ugc3BlY2lmaWNhbGx5IGRv
IG5vdCBkbyA+PSB0byBnaXZlIHRoZSBhc3NvYyBvbmUgbW9yZSBjaGFuZ2UKKwkgKiBiZWZvcmUg
d2UgZmFpbCBpdC4KKwkgKi8KKwlpZiAoc3RjYi0+YXNvYy5vdmVyYWxsX2Vycm9yX2NvdW50ID4g
dGhyZXNob2xkKSB7CisJCS8qIEFib3J0IG5vdGlmaWNhdGlvbiBzZW5kcyBhIFVMUCBub3RpZnkg
Ki8KKwkJc3RydWN0IG1idWYgKm9wX2VycjsKKworCQlvcF9lcnIgPSBzY3RwX2dlbmVyYXRlX2Nh
dXNlKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9kaWFnX2luZm9fY29kZSksCisJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIkFzc29jaWF0aW9uIGVycm9yIGNvdW50ZXIgZXhjZWVkZWQiKTsK
KwkJaW5wLT5sYXN0X2Fib3J0X2NvZGUgPSBTQ1RQX0ZST01fU0NUUF9USU1FUiArIFNDVFBfTE9D
XzI7CisJCXNjdHBfYWJvcnRfYW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8q
CisgKiBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldCgpIHJldHVybnMgYSBub24tTlVMTCBwb2ludGVy
IGFzIGxvbmcKKyAqIHRoZSBhcmd1bWVudCBuZXQgaXMgbm9uLU5VTEwuCisgKi8KK3N0cnVjdCBz
Y3RwX25ldHMgKgorc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCwKKyAgICBpbnQgbW9kZSkKK3sKKwkvKiBGaW5k
IGFuZCByZXR1cm4gYW4gYWx0ZXJuYXRlIG5ldHdvcmsgaWYgcG9zc2libGUgKi8KKwlzdHJ1Y3Qg
c2N0cF9uZXRzICphbHQsICptbmV0LCAqbWluX2Vycm9yc19uZXQgPSBOVUxMICwgKm1heF9jd25k
X25ldCA9IE5VTEw7CisJaW50IG9uY2U7CisJLyogSlJTIDUvMTQvMDcgLSBJbml0aWFsaXplIG1p
bl9lcnJvcnMgdG8gYW4gaW1wb3NzaWJsZSB2YWx1ZS4gKi8KKwlpbnQgbWluX2Vycm9ycyA9IC0x
OworCXVpbnQzMl90IG1heF9jd25kID0gMDsKKworCWlmIChzdGNiLT5hc29jLm51bW5ldHMgPT0g
MSkgeworCQkvKiBObyBvdGhlcnMgYnV0IG5ldCAqLworCQlyZXR1cm4gKFRBSUxRX0ZJUlNUKCZz
dGNiLT5hc29jLm5ldHMpKTsKKwl9CisJLyoKKwkgKiBKUlMgNS8xNC8wNyAtIElmIG1vZGUgaXMg
c2V0IHRvIDIsIHVzZSB0aGUgQ01UIFBGIGZpbmQgYWx0ZXJuYXRlIG5ldCBhbGdvcml0aG0uCisJ
ICogVGhpcyBhbGdvcml0aG0gY2hvb3NlcyB0aGUgYWN0aXZlIGRlc3RpbmF0aW9uIChub3QgaW4g
UEYgc3RhdGUpIHdpdGggdGhlIGxhcmdlc3QKKwkgKiBjd25kIHZhbHVlLiBJZiBhbGwgZGVzdGlu
YXRpb25zIGFyZSBpbiBQRiBzdGF0ZSwgdW5yZWFjaGFibGUsIG9yIHVuY29uZmlybWVkLCBjaG9v
c2UKKwkgKiB0aGUgZGVzaW5hdGlvbiB0aGF0IGlzIGluIFBGIHN0YXRlIHdpdGggdGhlIGxvd2Vz
dCBlcnJvciBjb3VudC4gSW4gY2FzZSBvZiBhIHRpZSwKKwkgKiBjaG9vc2UgdGhlIGRlc3RpbmF0
aW9uIHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgYWN0aXZlLgorCSAqLworCWlmIChtb2RlID09IDIp
IHsKKwkJVEFJTFFfRk9SRUFDSChtbmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsK
KwkJCS8qIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0aW9uIGlzIHVucmVhY2hhYmxlIG9y
IHVuY29uZmlybWVkLCBza2lwIGl0LiAqLworCQkJaWYgKCgobW5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9SRUFDSEFCTEUpICE9IFNDVFBfQUREUl9SRUFDSEFCTEUpIHx8CisJCQkgICAgKG1u
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7CisJCQkJY29udGludWU7
CisJCQl9CisJCQkvKgorCQkJICogSlJTIDUvMTQvMDcgLSAgSWYgdGhlIGRlc3RpbmF0aW9uIGlz
IHJlYWNoYWJsZSBidXQgaW4gUEYgc3RhdGUsIGNvbXBhcmUKKwkJCSAqICB0aGUgZXJyb3IgY291
bnQgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBtaW5pbXVtIGVycm9yIGNvdW50IHNlZW4gdGh1
cyBmYXIuCisJCQkgKiAgU3RvcmUgdGhlIGRlc3RpbmF0aW9uIHdpdGggdGhlIGxvd2VyIGVycm9y
IGNvdW50LiAgSWYgdGhlIGVycm9yIGNvdW50cyBhcmUKKwkJCSAqICBlcXVhbCwgc3RvcmUgdGhl
IGRlc3RpbmF0aW9uIHRoYXQgd2FzIG1vc3QgcmVjZW50bHkgYWN0aXZlLgorCQkJICovCisJCQlp
ZiAobW5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9QRikgeworCQkJCS8qCisJCQkJICogSlJT
IDUvMTQvMDcgLSBJZiB0aGUgZGVzdGluYXRpb24gdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUg
Y3VycmVudAorCQkJCSAqICBkZXN0aW5hdGlvbiwgd29yayBhcyBpZiB0aGUgZXJyb3IgY291bnQg
aXMgb25lIGhpZ2hlci4gIFRoZQorCQkJCSAqICBhY3R1YWwgZXJyb3IgY291bnQgd2lsbCBub3Qg
YmUgaW5jcmVtZW50ZWQgdW50aWwgbGF0ZXIgaW4gdGhlCisJCQkJICogIHQzIGhhbmRsZXIuCisJ
CQkJICovCisJCQkJaWYgKG1uZXQgPT0gbmV0KSB7CisJCQkJCWlmIChtaW5fZXJyb3JzID09IC0x
KSB7CisJCQkJCQltaW5fZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291bnQgKyAxOworCQkJCQkJbWlu
X2Vycm9yc19uZXQgPSBtbmV0OworCQkJCQl9IGVsc2UgaWYgKG1uZXQtPmVycm9yX2NvdW50ICsg
MSA8IG1pbl9lcnJvcnMpIHsKKwkJCQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudCAr
IDE7CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJCX0gZWxzZSBpZiAobW5ldC0+
ZXJyb3JfY291bnQgKyAxID09IG1pbl9lcnJvcnMKKwkJCQkJCQkJJiYgbW5ldC0+bGFzdF9hY3Rp
dmUgPiBtaW5fZXJyb3JzX25ldC0+bGFzdF9hY3RpdmUpIHsKKwkJCQkJCW1pbl9lcnJvcnNfbmV0
ID0gbW5ldDsKKwkJCQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudCArIDE7CisJCQkJ
CX0KKwkJCQkJY29udGludWU7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYgKG1pbl9lcnJvcnMgPT0g
LTEpIHsKKwkJCQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudDsKKwkJCQkJCW1pbl9l
cnJvcnNfbmV0ID0gbW5ldDsKKwkJCQkJfSBlbHNlIGlmIChtbmV0LT5lcnJvcl9jb3VudCA8IG1p
bl9lcnJvcnMpIHsKKwkJCQkJCW1pbl9lcnJvcnMgPSBtbmV0LT5lcnJvcl9jb3VudDsKKwkJCQkJ
CW1pbl9lcnJvcnNfbmV0ID0gbW5ldDsKKwkJCQkJfSBlbHNlIGlmIChtbmV0LT5lcnJvcl9jb3Vu
dCA9PSBtaW5fZXJyb3JzCisJCQkJCQkJCSYmIG1uZXQtPmxhc3RfYWN0aXZlID4gbWluX2Vycm9y
c19uZXQtPmxhc3RfYWN0aXZlKSB7CisJCQkJCQltaW5fZXJyb3JzX25ldCA9IG1uZXQ7CisJCQkJ
CQltaW5fZXJyb3JzID0gbW5ldC0+ZXJyb3JfY291bnQ7CisJCQkJCX0KKwkJCQkJY29udGludWU7
CisJCQkJfQorCQkJfQorCQkJLyoKKwkJCSAqIEpSUyA1LzE0LzA3IC0gSWYgdGhlIGRlc3RpbmF0
aW9uIGlzIHJlYWNoYWJsZSBhbmQgbm90IGluIFBGIHN0YXRlLCBjb21wYXJlIHRoZQorCQkJICog
IGN3bmQgb2YgdGhlIGRlc3RpbmF0aW9uIHRvIHRoZSBoaWdoZXN0IGN3bmQgc2VlbiB0aHVzIGZh
ci4gIFN0b3JlIHRoZQorCQkJICogIGRlc3RpbmF0aW9uIHdpdGggdGhlIGhpZ2hlciBjd25kIHZh
bHVlLiAgSWYgdGhlIGN3bmQgdmFsdWVzIGFyZSBlcXVhbCwKKwkJCSAqICByYW5kb21seSBjaG9v
c2Ugb25lIG9mIHRoZSB0d28gZGVzdGluYXRpb25zLgorCQkJICovCisJCQlpZiAobWF4X2N3bmQg
PCBtbmV0LT5jd25kKSB7CisJCQkJbWF4X2N3bmRfbmV0ID0gbW5ldDsKKwkJCQltYXhfY3duZCA9
IG1uZXQtPmN3bmQ7CisJCQl9IGVsc2UgaWYgKG1heF9jd25kID09IG1uZXQtPmN3bmQpIHsKKwkJ
CQl1aW50MzJfdCBybmR2YWw7CisJCQkJdWludDhfdCB0aGlzX3JhbmRvbTsKKworCQkJCWlmIChz
dGNiLT5hc29jLmhiX3JhbmRvbV9pZHggPiAzKSB7CisJCQkJCXJuZHZhbCA9IHNjdHBfc2VsZWN0
X2luaXRpYWxfVFNOKCZzdGNiLT5zY3RwX2VwLT5zY3RwX2VwKTsKKwkJCQkJbWVtY3B5KHN0Y2It
PmFzb2MuaGJfcmFuZG9tX3ZhbHVlcywgJnJuZHZhbCwgc2l6ZW9mKHN0Y2ItPmFzb2MuaGJfcmFu
ZG9tX3ZhbHVlcykpOworCQkJCQl0aGlzX3JhbmRvbSA9IHN0Y2ItPmFzb2MuaGJfcmFuZG9tX3Zh
bHVlc1swXTsKKwkJCQkJc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4Kys7CisJCQkJCXN0Y2ItPmFz
b2MuaGJfZWN0X3JhbmRvbWJpdCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJdGhpc19yYW5kb20g
PSBzdGNiLT5hc29jLmhiX3JhbmRvbV92YWx1ZXNbc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4XTsK
KwkJCQkJc3RjYi0+YXNvYy5oYl9yYW5kb21faWR4Kys7CisJCQkJCXN0Y2ItPmFzb2MuaGJfZWN0
X3JhbmRvbWJpdCA9IDA7CisJCQkJfQorCQkJCWlmICh0aGlzX3JhbmRvbSAlIDIgPT0gMSkgewor
CQkJCQltYXhfY3duZF9uZXQgPSBtbmV0OworCQkJCQltYXhfY3duZCA9IG1uZXQtPmN3bmQ7IC8q
IFVzZWxlc3M/ICovCisJCQkJfQorCQkJfQorCQl9CisJCWlmIChtYXhfY3duZF9uZXQgPT0gTlVM
TCkgeworCQkJaWYgKG1pbl9lcnJvcnNfbmV0ID09IE5VTEwpIHsKKwkJCQlyZXR1cm4gKG5ldCk7
CisJCQl9CisJCQlyZXR1cm4gKG1pbl9lcnJvcnNfbmV0KTsKKwkJfSBlbHNlIHsKKwkJCXJldHVy
biAobWF4X2N3bmRfbmV0KTsKKwkJfQorCX0gLyogSlJTIDUvMTQvMDcgLSBJZiBtb2RlIGlzIHNl
dCB0byAxLCB1c2UgdGhlIENNVCBwb2xpY3kgZm9yIGNob29zaW5nIGFuIGFsdGVybmF0ZSBuZXQu
ICovCisJZWxzZSBpZiAobW9kZSA9PSAxKSB7CisJCVRBSUxRX0ZPUkVBQ0gobW5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAoKChtbmV0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1JFQUNIQUJMRSkgIT0gU0NUUF9BRERSX1JFQUNIQUJMRSkgfHwKKwkJCSAgICAobW5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpIHsKKwkJCQkvKgorCQkJCSAq
IHdpbGwgc2tpcCBvbmVzIHRoYXQgYXJlIG5vdC1yZWFjaGFibGUgb3IKKwkJCQkgKiB1bmNvbmZp
cm1lZAorCQkJCSAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKG1heF9jd25kIDwgbW5l
dC0+Y3duZCkgeworCQkJCW1heF9jd25kX25ldCA9IG1uZXQ7CisJCQkJbWF4X2N3bmQgPSBtbmV0
LT5jd25kOworCQkJfSBlbHNlIGlmIChtYXhfY3duZCA9PSBtbmV0LT5jd25kKSB7CisJCQkJdWlu
dDMyX3Qgcm5kdmFsOworCQkJCXVpbnQ4X3QgdGhpc19yYW5kb207CisKKwkJCQlpZiAoc3RjYi0+
YXNvYy5oYl9yYW5kb21faWR4ID4gMykgeworCQkJCQlybmR2YWwgPSBzY3RwX3NlbGVjdF9pbml0
aWFsX1RTTigmc3RjYi0+c2N0cF9lcC0+c2N0cF9lcCk7CisJCQkJCW1lbWNweShzdGNiLT5hc29j
LmhiX3JhbmRvbV92YWx1ZXMsICZybmR2YWwsCisJCQkJCSAgICBzaXplb2Yoc3RjYi0+YXNvYy5o
Yl9yYW5kb21fdmFsdWVzKSk7CisJCQkJCXRoaXNfcmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5k
b21fdmFsdWVzWzBdOworCQkJCQlzdGNiLT5hc29jLmhiX3JhbmRvbV9pZHggPSAwOworCQkJCQlz
dGNiLT5hc29jLmhiX2VjdF9yYW5kb21iaXQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCXRoaXNf
cmFuZG9tID0gc3RjYi0+YXNvYy5oYl9yYW5kb21fdmFsdWVzW3N0Y2ItPmFzb2MuaGJfcmFuZG9t
X2lkeF07CisJCQkJCXN0Y2ItPmFzb2MuaGJfcmFuZG9tX2lkeCsrOworCQkJCQlzdGNiLT5hc29j
LmhiX2VjdF9yYW5kb21iaXQgPSAwOworCQkJCX0KKwkJCQlpZiAodGhpc19yYW5kb20gJSAyKSB7
CisJCQkJCW1heF9jd25kX25ldCA9IG1uZXQ7CisJCQkJCW1heF9jd25kID0gbW5ldC0+Y3duZDsK
KwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKG1heF9jd25kX25ldCkgeworCQkJcmV0dXJuIChtYXhf
Y3duZF9uZXQpOworCQl9CisJfQorCW1uZXQgPSBuZXQ7CisJb25jZSA9IDA7CisKKwlpZiAobW5l
dCA9PSBOVUxMKSB7CisJCW1uZXQgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5uZXRzKTsKKwkJ
aWYgKG1uZXQgPT0gTlVMTCkgeworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCX0KKwlmb3IgKDs7
KSB7CisJCWFsdCA9IFRBSUxRX05FWFQobW5ldCwgc2N0cF9uZXh0KTsKKwkJaWYgKGFsdCA9PSBO
VUxMKSB7CisJCQlvbmNlKys7CisJCQlpZiAob25jZSA+IDEpIHsKKwkJCQlicmVhazsKKwkJCX0K
KwkJCWFsdCA9IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJaWYgKGFsdCA9PSBO
VUxMKSB7CisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0KKwkJfQorCQlpZiAoYWx0LT5yby5yb19y
dCA9PSBOVUxMKSB7CisJCQlpZiAoYWx0LT5yby5fc19hZGRyKSB7CisJCQkJc2N0cF9mcmVlX2lm
YShhbHQtPnJvLl9zX2FkZHIpOworCQkJCWFsdC0+cm8uX3NfYWRkciA9IE5VTEw7CisJCQl9CisJ
CQlhbHQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJfQorCQlpZiAoKChhbHQtPmRlc3Rfc3Rh
dGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSA9PSBTQ1RQX0FERFJfUkVBQ0hBQkxFKSAmJgorCQkg
ICAgKGFsdC0+cm8ucm9fcnQgIT0gTlVMTCkgJiYKKwkJICAgICghKGFsdC0+ZGVzdF9zdGF0ZSAm
IFNDVFBfQUREUl9VTkNPTkZJUk1FRCkpKSB7CisJCQkvKiBGb3VuZCBhIHJlYWNoYWJsZSBhZGRy
ZXNzICovCisJCQlicmVhazsKKwkJfQorCQltbmV0ID0gYWx0OworCX0KKworCWlmIChhbHQgPT0g
TlVMTCkgeworCQkvKiBDYXNlIHdoZXJlIE5PIGluc3YgbmV0d29yayBleGlzdHMgKGRvcm1hbnQg
c3RhdGUpICovCisJCS8qIHdlIHJvdGF0ZSBkZXN0aW5hdGlvbnMgKi8KKwkJb25jZSA9IDA7CisJ
CW1uZXQgPSBuZXQ7CisJCWZvciAoOzspIHsKKwkJCWlmIChtbmV0ID09IE5VTEwpIHsKKwkJCQly
ZXR1cm4gKFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpKTsKKwkJCX0KKwkJCWFsdCA9IFRB
SUxRX05FWFQobW5ldCwgc2N0cF9uZXh0KTsKKwkJCWlmIChhbHQgPT0gTlVMTCkgeworCQkJCW9u
Y2UrKzsKKwkJCQlpZiAob25jZSA+IDEpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWFsdCA9
IFRBSUxRX0ZJUlNUKCZzdGNiLT5hc29jLm5ldHMpOworCQkJCWlmIChhbHQgPT0gTlVMTCkgewor
CQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoKCEoYWx0LT5kZXN0X3N0YXRlICYgU0NU
UF9BRERSX1VOQ09ORklSTUVEKSkgJiYKKwkJCSAgICAoYWx0ICE9IG5ldCkpIHsKKwkJCQkvKiBG
b3VuZCBhbiBhbHRlcm5hdGUgYWRkcmVzcyAqLworCQkJCWJyZWFrOworCQkJfQorCQkJbW5ldCA9
IGFsdDsKKwkJfQorCX0KKwlpZiAoYWx0ID09IE5VTEwpIHsKKwkJcmV0dXJuIChuZXQpOworCX0K
KwlyZXR1cm4gKGFsdCk7Cit9CisKK3N0YXRpYyB2b2lkCitzY3RwX2JhY2tvZmZfb25fdGltZW91
dChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAg
IGludCB3aW5fcHJvYmUsCisgICAgaW50IG51bV9tYXJrZWQsIGludCBudW1fYWJhbmRvbmVkKQor
eworCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCWlmIChuZXQtPlJUT19tZWFzdXJlZCkgeworCQkJ
bmV0LT5SVE8gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJfSBlbHNlIHsKKwkJCW5ldC0+UlRPID0g
c3RjYi0+YXNvYy5pbml0aWFsX3J0bzsKKwkJfQorCX0KKwluZXQtPlJUTyA8PD0gMTsKKwlpZiAo
bmV0LT5SVE8gPiBzdGNiLT5hc29jLm1heHJ0bykgeworCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2Mu
bWF4cnRvOworCX0KKwlpZiAoKHdpbl9wcm9iZSA9PSAwKSAmJiAobnVtX21hcmtlZCB8fCBudW1f
YWJhbmRvbmVkKSkgeworCQkvKiBXZSBkb24ndCBhcHBseSBwZW5hbHR5IHRvIHdpbmRvdyBwcm9i
ZSBzY2VuYXJpb3MgKi8KKwkJLyogSlJTIC0gVXNlIHRoZSBjb25nZXN0aW9uIGNvbnRyb2wgZ2l2
ZW4gaW4gdGhlIENDIG1vZHVsZSAqLworCQlzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3
bmRfdXBkYXRlX2FmdGVyX3RpbWVvdXQoc3RjYiwgbmV0KTsKKwl9Cit9CisKKyNpZm5kZWYgSU5W
QVJJQU5UUworc3RhdGljIHZvaWQKK3NjdHBfcmVjb3Zlcl9zZW50X2xpc3Qoc3RydWN0IHNjdHBf
dGNiICpzdGNiKQoreworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgKm5jaGs7CisJc3Ry
dWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7CisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJVEFJ
TFFfRk9SRUFDSF9TQUZFKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCwgbmNoaykg
eworCQlpZiAoU0NUUF9UU05fR0UoYXNvYy0+bGFzdF9hY2tlZF9zZXEsIGNoay0+cmVjLmRhdGEu
dHNuKSkgeworCQkJU0NUUF9QUklOVEYoIkZvdW5kIGNoazolcCB0c246JXggPD0gbGFzdF9hY2tl
ZF9zZXE6JXhcbiIsCisJCQkgICAgICAgICAgICAodm9pZCAqKWNoaywgY2hrLT5yZWMuZGF0YS50
c24sIGFzb2MtPmxhc3RfYWNrZWRfc2VxKTsKKwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRB
R1JBTV9OUl9BQ0tFRCkgeworCQkJCWlmIChhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lk
XS5jaHVua3Nfb25fcXVldWVzID4gMCkgeworCQkJCQlhc29jLT5zdHJtb3V0W2Noay0+cmVjLmRh
dGEuc2lkXS5jaHVua3Nfb25fcXVldWVzLS07CisJCQkJfQorCQkJfQorCQkJaWYgKChhc29jLT5z
dHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID09IDApICYmCisJCQkg
ICAgKGFzb2MtPnN0cm1vdXRbY2hrLT5yZWMuZGF0YS5zaWRdLnN0YXRlID09IFNDVFBfU1RSRUFN
X1JFU0VUX1BFTkRJTkcpICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnN0cm1vdXRbY2hr
LT5yZWMuZGF0YS5zaWRdLm91dHF1ZXVlKSkgeworCQkJCWFzb2MtPnRyaWdnZXJfcmVzZXQgPSAx
OworCQkJfQorCQkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGssIHNjdHBfbmV4
dCk7CisJCQlpZiAoUFJfU0NUUF9FTkFCTEVEKGNoay0+ZmxhZ3MpKSB7CisJCQkJaWYgKGFzb2Mt
PnByX3NjdHBfY250ICE9IDApCisJCQkJCWFzb2MtPnByX3NjdHBfY250LS07CisJCQl9CisJCQlp
ZiAoY2hrLT5kYXRhKSB7CisJCQkJLypzYV9pZ25vcmUgTk9fTlVMTF9DSEsqLworCQkJCXNjdHBf
ZnJlZV9idWZzcGFjZShzdGNiLCBhc29jLCBjaGssIDEpOworCQkJCXNjdHBfbV9mcmVlbShjaGst
PmRhdGEpOworCQkJCWNoay0+ZGF0YSA9IE5VTEw7CisJCQkJaWYgKGFzb2MtPnByc2N0cF9zdXBw
b3J0ZWQgJiYgUFJfU0NUUF9CVUZfRU5BQkxFRChjaGstPmZsYWdzKSkgeworCQkJCQlhc29jLT5z
ZW50X3F1ZXVlX2NudF9yZW1vdmVhYmxlLS07CisJCQkJfQorCQkJfQorCQkJYXNvYy0+c2VudF9x
dWV1ZV9jbnQtLTsKKwkJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKKwkJfQorCX0KKwlTQ1RQX1BSSU5URigiYWZ0ZXIgcmVjb3ZlciBvcmRlciBpcyBh
cyBmb2xsb3dzXG4iKTsKKwlUQUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNj
dHBfbmV4dCkgeworCQlTQ1RQX1BSSU5URigiY2hrOiVwIFRTTjoleFxuIiwgKHZvaWQgKiljaGss
IGNoay0+cmVjLmRhdGEudHNuKTsKKwl9Cit9CisjZW5kaWYKKworc3RhdGljIGludAorc2N0cF9t
YXJrX2FsbF9mb3JfcmVzZW5kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0
cF9uZXRzICpuZXQsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqYWx0LAorICAgIGludCB3aW5kb3df
cHJvYmUsCisgICAgaW50ICpudW1fbWFya2VkLAorICAgIGludCAqbnVtX2FiYW5kb25lZCkKK3sK
KworCS8qCisJICogTWFyayBhbGwgY2h1bmtzICh3ZWxsIG5vdCBhbGwpIHRoYXQgd2VyZSBzZW50
IHRvICpuZXQgZm9yCisJICogcmV0cmFuc21pc3Npb24uIE1vdmUgdGhlbSB0byBhbHQgZm9yIHRo
ZXJlIGRlc3RpbmF0aW9uIGFzIHdlbGwuLi4KKwkgKiBXZSBvbmx5IG1hcmsgY2h1bmtzIHRoYXQg
aGF2ZSBiZWVuIG91dHN0YW5kaW5nIGxvbmcgZW5vdWdoIHRvCisJICogaGF2ZSByZWNlaXZlZCBm
ZWVkLWJhY2suCisJICovCisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlz
dHJ1Y3Qgc2N0cF9uZXRzICpsbmV0czsKKwlzdHJ1Y3QgdGltZXZhbCBub3csIG1pbl93YWl0LCB0
djsKKwlpbnQgY3VyX3J0bzsKKwlpbnQgY250X2FiYW5kb25lZDsKKwlpbnQgYXVkaXRfdGYsIG51
bV9taywgZmlyOworCXVuc2lnbmVkIGludCBjbnRfbWs7CisJdWludDMyX3Qgb3JpZ19mbGlnaHQs
IG9yaWdfdGY7CisJdWludDMyX3QgdHNubGFzdCwgdHNuZmlyc3Q7CisJaW50IHJlY292ZXJ5X2Nu
dCA9IDA7CisKKworCS8qIG5vbmUgaW4gZmxpZ2h0IG5vdyAqLworCWF1ZGl0X3RmID0gMDsKKwlm
aXIgPSAwOworCS8qCisJICogZmlndXJlIG91dCBob3cgbG9uZyBhIGRhdGEgY2h1bmsgbXVzdCBi
ZSBwZW5kaW5nIGJlZm9yZSB3ZSBjYW4KKwkgKiBtYXJrIGl0IC4uCisJICovCisJKHZvaWQpU0NU
UF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7CisJLyogZ2V0IGN1ciBydG8gaW4gbWljcm8tc2Vjb25k
cyAqLworCWN1cl9ydG8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsgbmV0LT5s
YXN0c3Y7CisJY3VyX3J0byAqPSAxMDAwOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2ZyKGN1
cl9ydG8sCisJCQkgICAgc3RjYi0+YXNvYy5wZWVyc19yd25kLAorCQkJICAgIHdpbmRvd19wcm9i
ZSwKKwkJCSAgICBTQ1RQX0ZSX1QzX01BUktfVElNRSk7CisJCXNjdHBfbG9nX2ZyKG5ldC0+Zmxp
Z2h0X3NpemUsIDAsIDAsIFNDVFBfRlJfQ1dORF9SRVBPUlQpOworCQlzY3RwX2xvZ19mcihuZXQt
PmZsaWdodF9zaXplLCBuZXQtPmN3bmQsIHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0LCBTQ1RQX0ZS
X0NXTkRfUkVQT1JUKTsKKwl9CisJdHYudHZfc2VjID0gY3VyX3J0byAvIDEwMDAwMDA7CisJdHYu
dHZfdXNlYyA9IGN1cl9ydG8gJSAxMDAwMDAwOworI2lmbmRlZiBfX0ZyZWVCU0RfXworCXRpbWVy
c3ViKCZub3csICZ0diwgJm1pbl93YWl0KTsKKyNlbHNlCisJbWluX3dhaXQgPSBub3c7CisJdGlt
ZXZhbHN1YigmbWluX3dhaXQsICZ0dik7CisjZW5kaWYKKwlpZiAobWluX3dhaXQudHZfc2VjIDwg
MCB8fCBtaW5fd2FpdC50dl91c2VjIDwgMCkgeworCQkvKgorCQkgKiBpZiB3ZSBoaXQgaGVyZSwg
d2UgZG9uJ3QgaGF2ZSBlbm91Z2ggc2Vjb25kcyBvbiB0aGUgY2xvY2sKKwkJICogdG8gYWNjb3Vu
dCBmb3IgdGhlIFJUTy4gV2UganVzdCBsZXQgdGhlIGxvd2VyIHNlY29uZHMgYmUKKwkJICogdGhl
IGJvdW5kcyBhbmQgZG9uJ3Qgd29ycnkgYWJvdXQgaXQuIFRoaXMgbWF5IG1lYW4gd2UKKwkJICog
d2lsbCBtYXJrIGEgbG90IG1vcmUgdGhhbiB3ZSBzaG91bGQuCisJCSAqLworCQltaW5fd2FpdC50
dl9zZWMgPSBtaW5fd2FpdC50dl91c2VjID0gMDsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJc2N0cF9s
b2dfZnIoY3VyX3J0bywgbm93LnR2X3NlYywgbm93LnR2X3VzZWMsIFNDVFBfRlJfVDNfTUFSS19U
SU1FKTsKKwkJc2N0cF9sb2dfZnIoMCwgbWluX3dhaXQudHZfc2VjLCBtaW5fd2FpdC50dl91c2Vj
LCBTQ1RQX0ZSX1QzX01BUktfVElNRSk7CisJfQorCS8qCisJICogT3VyIHJ3bmQgd2lsbCBiZSBp
bmNvcnJlY3QgaGVyZSBzaW5jZSB3ZSBhcmUgbm90IGFkZGluZyBiYWNrIHRoZQorCSAqIGNudCAq
IG1idWYgYnV0IHdlIHdpbGwgZml4IHRoYXQgZG93biBiZWxvdy4KKwkgKi8KKwlvcmlnX2ZsaWdo
dCA9IG5ldC0+ZmxpZ2h0X3NpemU7CisJb3JpZ190ZiA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
OworCisJbmV0LT5mYXN0X3JldHJhbl9pcCA9IDA7CisJLyogTm93IG9uIHRvIGVhY2ggY2h1bmsg
Ki8KKwljbnRfYWJhbmRvbmVkID0gMDsKKwludW1fbWsgPSBjbnRfbWsgPSAwOworCXRzbmZpcnN0
ID0gdHNubGFzdCA9IDA7CisjaWZuZGVmIElOVkFSSUFOVFMKKyBzdGFydF9hZ2FpbjoKKyNlbmRp
ZgorCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHNjdHBf
bmV4dCwgbmNoaykgeworCQlpZiAoU0NUUF9UU05fR0Uoc3RjYi0+YXNvYy5sYXN0X2Fja2VkX3Nl
cSwgY2hrLT5yZWMuZGF0YS50c24pKSB7CisJCQkvKiBTdHJhbmdlIGNhc2Ugb3VyIGxpc3QgZ290
IG91dCBvZiBvcmRlcj8gKi8KKwkJCVNDVFBfUFJJTlRGKCJPdXIgbGlzdCBpcyBvdXQgb2Ygb3Jk
ZXI/IGxhc3RfYWNrZWQ6JXggY2hrOiV4XG4iLAorCQkJICAgICAgICAgICAgKHVuc2lnbmVkIGlu
dClzdGNiLT5hc29jLmxhc3RfYWNrZWRfc2VxLCAodW5zaWduZWQgaW50KWNoay0+cmVjLmRhdGEu
dHNuKTsKKwkJCXJlY292ZXJ5X2NudCsrOworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJs
YXN0IGFja2VkID49IGNoayBvbiBzZW50LVEiKTsKKyNlbHNlCisJCQlTQ1RQX1BSSU5URigiUmVj
b3ZlciBhdHRlbXB0cyBhIHJlc3RhcnQgY250OiVkXG4iLCByZWNvdmVyeV9jbnQpOworCQkJc2N0
cF9yZWNvdmVyX3NlbnRfbGlzdChzdGNiKTsKKwkJCWlmIChyZWNvdmVyeV9jbnQgPCAxMCkgewor
CQkJCWdvdG8gc3RhcnRfYWdhaW47CisJCQl9IGVsc2UgeworCQkJCVNDVFBfUFJJTlRGKCJSZWNv
dmVyeSBmYWlscyAlZCB0aW1lcz8/XG4iLCByZWNvdmVyeV9jbnQpOworCQkJfQorI2VuZGlmCisJ
CX0KKwkJaWYgKChjaGstPndob1RvID09IG5ldCkgJiYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdS
QU1fQUNLRUQpKSB7CisJCQkvKgorCQkJICogZm91bmQgb25lIHRvIG1hcms6IElmIGl0IGlzIGxl
c3MgdGhhbgorCQkJICogREFUQUdSQU1fQUNLRUQgaXQgTVVTVCBub3QgYmUgYSBza2lwcGVkIG9y
IG1hcmtlZAorCQkJICogVFNOIGJ1dCBpbnN0ZWFkIG9uZSB0aGF0IGlzIGVpdGhlciBhbHJlYWR5
IHNldAorCQkJICogZm9yIHJldHJhbnNtaXNzaW9uIE9SIG9uZSB0aGF0IG5lZWRzCisJCQkgKiBy
ZXRyYW5zbWlzc2lvbi4KKwkJCSAqLworCisJCQkvKiB2YWxpZGF0ZSBpdHMgYmVlbiBvdXRzdGFu
ZGluZyBsb25nIGVub3VnaCAqLworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX2xvZ19mcihjaGst
PnJlYy5kYXRhLnRzbiwKKwkJCQkJICAgIGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMsCisJCQkJ
CSAgICBjaGstPnNlbnRfcmN2X3RpbWUudHZfdXNlYywKKwkJCQkJICAgIFNDVFBfRlJfVDNfTUFS
S19USU1FKTsKKwkJCX0KKwkJCWlmICgoY2hrLT5zZW50X3Jjdl90aW1lLnR2X3NlYyA+IG1pbl93
YWl0LnR2X3NlYykgJiYgKHdpbmRvd19wcm9iZSA9PSAwKSkgeworCQkJCS8qCisJCQkJICogd2Ug
aGF2ZSByZWFjaGVkIGEgY2h1bmsgdGhhdCB3YXMgc2VudAorCQkJCSAqIHNvbWUgc2Vjb25kcyBw
YXN0IG91ciBtaW4uLiBmb3JnZXQgaXQgd2UKKwkJCQkgKiB3aWxsIGZpbmQgbm8gbW9yZSB0byBz
ZW5kLgorCQkJCSAqLworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2ZyKDAsCisJCQkJ
CQkgICAgY2hrLT5zZW50X3Jjdl90aW1lLnR2X3NlYywKKwkJCQkJCSAgICBjaGstPnNlbnRfcmN2
X3RpbWUudHZfdXNlYywKKwkJCQkJCSAgICBTQ1RQX0ZSX1QzX1NUT1BQRUQpOworCQkJCX0KKwkJ
CQljb250aW51ZTsKKwkJCX0gZWxzZSBpZiAoKGNoay0+c2VudF9yY3ZfdGltZS50dl9zZWMgPT0g
bWluX3dhaXQudHZfc2VjKSAmJgorCQkJCSAgICh3aW5kb3dfcHJvYmUgPT0gMCkpIHsKKwkJCQkv
KgorCQkJCSAqIHdlIG11c3QgbG9vayBhdCB0aGUgbWljcm8gc2Vjb25kcyB0bworCQkJCSAqIGtu
b3cuCisJCQkJICovCisJCQkJaWYgKGNoay0+c2VudF9yY3ZfdGltZS50dl91c2VjID49IG1pbl93
YWl0LnR2X3VzZWMpIHsKKwkJCQkJLyoKKwkJCQkJICogb2sgaXQgd2FzIHNlbnQgYWZ0ZXIgb3Vy
IGJvdW5kYXJ5CisJCQkJCSAqIHRpbWUuCisJCQkJCSAqLworCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9ydGVkICYmIFBSX1NDVFBfVFRM
X0VOQUJMRUQoY2hrLT5mbGFncykpIHsKKwkJCQkvKiBJcyBpdCBleHBpcmVkPyAqLworI2lmbmRl
ZiBfX0ZyZWVCU0RfXworCQkJCWlmICh0aW1lcmNtcCgmbm93LCAmY2hrLT5yZWMuZGF0YS50aW1l
dG9kcm9wLCA+KSkgeworI2Vsc2UKKwkJCQlpZiAodGltZXZhbGNtcCgmbm93LCAmY2hrLT5yZWMu
ZGF0YS50aW1ldG9kcm9wLCA+KSkgeworI2VuZGlmCisJCQkJCS8qIFllcyBzbyBkcm9wIGl0ICov
CisJCQkJCWlmIChjaGstPmRhdGEpIHsKKwkJCQkJCSh2b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3Rw
X2NodW5rKHN0Y2IsCisJCQkJCQkJCQkJIGNoaywKKwkJCQkJCQkJCQkgMSwKKwkJCQkJCQkJCQkg
U0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCQkJCWNudF9hYmFuZG9uZWQrKzsKKwkJCQkJfQorCQkJ
CQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBfc3VwcG9y
dGVkICYmIFBSX1NDVFBfUlRYX0VOQUJMRUQoY2hrLT5mbGFncykpIHsKKwkJCQkvKiBIYXMgaXQg
YmVlbiByZXRyYW5zbWl0dGVkIHR2X3NlYyB0aW1lcz8gKi8KKwkJCQlpZiAoY2hrLT5zbmRfY291
bnQgPiBjaGstPnJlYy5kYXRhLnRpbWV0b2Ryb3AudHZfc2VjKSB7CisJCQkJCWlmIChjaGstPmRh
dGEpIHsKKwkJCQkJCSh2b2lkKXNjdHBfcmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0Y2IsCisJCQkJ
CQkJCQkJIGNoaywKKwkJCQkJCQkJCQkgMSwKKwkJCQkJCQkJCQkgU0NUUF9TT19OT1RfTE9DS0VE
KTsKKwkJCQkJCWNudF9hYmFuZG9uZWQrKzsKKwkJCQkJfQorCQkJCQljb250aW51ZTsKKwkJCQl9
CisJCQl9CisJCQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlz
Y3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCQlu
dW1fbWsrKzsKKwkJCQlpZiAoZmlyID09IDApIHsKKwkJCQkJZmlyID0gMTsKKwkJCQkJdHNuZmly
c3QgPSBjaGstPnJlYy5kYXRhLnRzbjsKKwkJCQl9CisJCQkJdHNubGFzdCA9IGNoay0+cmVjLmRh
dGEudHNuOworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBT
Q1RQX0ZSX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbG9nX2ZyKGNoay0+cmVjLmRhdGEu
dHNuLCBjaGstPnNuZF9jb3VudCwKKwkJCQkJCSAgICAwLCBTQ1RQX0ZSX1QzX01BUktFRCk7CisJ
CQkJfQorCisJCQkJaWYgKGNoay0+cmVjLmRhdGEuY2h1bmtfd2FzX3Jldm9rZWQpIHsKKwkJCQkJ
LyogZGVmbGF0ZSB0aGUgY3duZCAqLworCQkJCQljaGstPndob1RvLT5jd25kIC09IGNoay0+Ym9v
a19zaXplOworCQkJCQljaGstPnJlYy5kYXRhLmNodW5rX3dhc19yZXZva2VkID0gMDsKKwkJCQl9
CisJCQkJbmV0LT5tYXJrZWRfcmV0cmFucysrOworCQkJCXN0Y2ItPmFzb2MubWFya2VkX3JldHJh
bnMrKzsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NU
UF9GTElHSFRfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElH
SFRfTE9HX0RPV05fUlNORF9UTywKKwkJCQkJCSAgICAgICBjaGstPndob1RvLT5mbGlnaHRfc2l6
ZSwKKwkJCQkJCSAgICAgICBjaGstPmJvb2tfc2l6ZSwKKwkJCQkJCSAgICAgICAodWludDMyX3Qp
KHVpbnRwdHJfdCljaGstPndob1RvLAorCQkJCQkJICAgICAgIGNoay0+cmVjLmRhdGEudHNuKTsK
KwkJCQl9CisJCQkJc2N0cF9mbGlnaHRfc2l6ZV9kZWNyZWFzZShjaGspOworCQkJCXNjdHBfdG90
YWxfZmxpZ2h0X2RlY3JlYXNlKHN0Y2IsIGNoayk7CisJCQkJc3RjYi0+YXNvYy5wZWVyc19yd25k
ICs9IGNoay0+c2VuZF9zaXplOworCQkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSBTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCk7CisJCQl9CisJCQljaGstPnNlbnQgPSBTQ1RQ
X0RBVEFHUkFNX1JFU0VORDsKKwkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRf
T0s7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19tYXJrZWRyZXRyYW5zKTsKKworCQkJLyogcmVz
ZXQgdGhlIFRTTiBmb3Igc3RyaWtpbmcgYW5kIG90aGVyIEZSIHN0dWZmICovCisJCQljaGstPnJl
Yy5kYXRhLmRvaW5nX2Zhc3RfcmV0cmFuc21pdCA9IDA7CisJCQkvKiBDbGVhciBhbnkgdGltZSBz
byBOTyBSVFQgaXMgYmVpbmcgZG9uZSAqLworCisJCQlpZiAoY2hrLT5kb19ydHQpIHsKKwkJCQlp
ZiAoY2hrLT53aG9Uby0+cnRvX25lZWRlZCA9PSAwKSB7CisJCQkJCWNoay0+d2hvVG8tPnJ0b19u
ZWVkZWQgPSAxOworCQkJCX0KKwkJCX0KKwkJCWNoay0+ZG9fcnR0ID0gMDsKKwkJCWlmIChhbHQg
IT0gbmV0KSB7CisJCQkJc2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJCWNo
ay0+bm9fZnJfYWxsb3dlZCA9IDE7CisJCQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCQlhdG9taWNf
YWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQkJfSBlbHNlIHsKKwkJCQljaGstPm5vX2Zy
X2FsbG93ZWQgPSAwOworCQkJCWlmIChUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5zZW5kX3F1ZXVl
KSkgeworCQkJCQljaGstPnJlYy5kYXRhLmZhc3RfcmV0cmFuX3RzbiA9IHN0Y2ItPmFzb2Muc2Vu
ZGluZ19zZXE7CisJCQkJfSBlbHNlIHsKKwkJCQkJY2hrLT5yZWMuZGF0YS5mYXN0X3JldHJhbl90
c24gPSAoVEFJTFFfRklSU1QoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpLT5yZWMuZGF0YS50c247
CisJCQkJfQorCQkJfQorCQkJLyogQ01UOiBEbyBub3QgYWxsb3cgRlJzIG9uIHJldHJhbnNtaXR0
ZWQgVFNOcy4KKwkJCSAqLworCQkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID4gMCkg
eworCQkJCWNoay0+bm9fZnJfYWxsb3dlZCA9IDE7CisJCQl9CisjaWZkZWYgVEhJU19TSE9VTERf
Tk9UX0JFX0RPTkUKKwkJfSBlbHNlIGlmIChjaGstPnNlbnQgPT0gU0NUUF9EQVRBR1JBTV9BQ0tF
RCkgeworCQkJLyogcmVtZW1iZXIgaGlnaGVzdCBhY2tlZCBvbmUgKi8KKwkJCWNvdWxkX2JlX3Nl
bnQgPSBjaGs7CisjZW5kaWYKKwkJfQorCQlpZiAoY2hrLT5zZW50ID09IFNDVFBfREFUQUdSQU1f
UkVTRU5EKSB7CisJCQljbnRfbWsrKzsKKwkJfQorCX0KKwlpZiAoKG9yaWdfZmxpZ2h0IC0gbmV0
LT5mbGlnaHRfc2l6ZSkgIT0gKG9yaWdfdGYgLSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCkpIHsK
KwkJLyogd2UgZGlkIG5vdCBzdWJ0cmFjdCB0aGUgc2FtZSB0aGluZ3M/ICovCisJCWF1ZGl0X3Rm
ID0gMTsKKwl9CisKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYg
U0NUUF9GUl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19mcih0c25maXJzdCwgdHNubGFz
dCwgbnVtX21rLCBTQ1RQX0ZSX1QzX1RJTUVPVVQpOworCX0KKyNpZmRlZiBTQ1RQX0RFQlVHCisJ
aWYgKG51bV9taykgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiTEFTVCBUU04gbWFy
a2VkIHdhcyAleFxuIiwKKwkJCXRzbmxhc3QpOworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIx
LCAiTnVtIG1hcmtlZCBmb3IgcmV0cmFuc21pc3Npb24gd2FzICVkIHBlZXItcndkOiV1XG4iLAor
CQkJbnVtX21rLAorCQkJc3RjYi0+YXNvYy5wZWVyc19yd25kKTsKKwl9CisjZW5kaWYKKwkqbnVt
X21hcmtlZCA9IG51bV9tazsKKwkqbnVtX2FiYW5kb25lZCA9IGNudF9hYmFuZG9uZWQ7CisJLyog
Tm93IGNoZWNrIGZvciBhIEVDTiBFY2hvIHRoYXQgbWF5IGJlIHN0cmFuZGVkIEFuZAorCSAqIGlu
Y2x1ZGUgdGhlIGNudF9taydkIHRvIGhhdmUgYWxsIHJlc2VuZHMgaW4gdGhlCisJICogY29udHJv
bCBxdWV1ZS4KKwkgKi8KKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9z
ZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFN
X1JFU0VORCkgeworCQkJY250X21rKys7CisJCX0KKwkJaWYgKChjaGstPndob1RvID09IG5ldCkg
JiYKKwkJICAgIChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJ
c2N0cF9mcmVlX3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJY2hrLT53aG9UbyA9IGFsdDsK
KwkJCWlmIChjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQljaGstPnNl
bnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKKwkJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdT
X0ZSQUdNRU5UX09LOworCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVl
X3JldHJhbl9jbnQpOworCQkJCWNudF9taysrOworCQkJfQorCQkJYXRvbWljX2FkZF9pbnQoJmFs
dC0+cmVmX2NvdW50LCAxKTsKKwkJfQorCX0KKyNpZmRlZiBUSElTX1NIT1VMRF9OT1RfQkVfRE9O
RQorCWlmICgoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQgPT0gMCkgJiYgKGNvdWxk
X2JlX3NlbnQpKSB7CisJCS8qIGZpeCBpdCBzbyB3ZSByZXRyYW5zbWl0IHRoZSBoaWdoZXN0IGFj
a2VkIGFueXdheSAqLworCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9y
ZXRyYW5fY250KTsKKwkJY250X21rKys7CisJCWNvdWxkX2JlX3NlbnQtPnNlbnQgPSBTQ1RQX0RB
VEFHUkFNX1JFU0VORDsKKwl9CisjZW5kaWYKKwlpZiAoc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3Jl
dHJhbl9jbnQgIT0gY250X21rKSB7CisjaWZkZWYgSU5WQVJJQU5UUworCQlTQ1RQX1BSSU5URigi
TG9jYWwgQXVkaXQgc2F5cyB0aGVyZSBhcmUgJWQgZm9yIHJldHJhbiBhc29jIGNudDolZCB3ZSBt
YXJrZWQ6JWQgdGhpcyB0aW1lXG4iLAorCQkJICAgIGNudF9taywgc3RjYi0+YXNvYy5zZW50X3F1
ZXVlX3JldHJhbl9jbnQsIG51bV9tayk7CisjZW5kaWYKKyNpZm5kZWYgU0NUUF9BVURJVElOR19F
TkFCTEVECisJCXN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ID0gY250X21rOworI2Vu
ZGlmCisJfQorCWlmIChhdWRpdF90ZikgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVI0LAor
CQkJIkF1ZGl0IHRvdGFsIGZsaWdodCBkdWUgdG8gbmVnYXRpdmUgdmFsdWUgbmV0OiVwXG4iLAor
CQkJKHZvaWQgKiluZXQpOworCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA9IDA7CisJCXN0Y2It
PmFzb2MudG90YWxfZmxpZ2h0X2NvdW50ID0gMDsKKwkJLyogQ2xlYXIgYWxsIG5ldHdvcmtzIGZs
aWdodCBzaXplICovCisJCVRBSUxRX0ZPUkVBQ0gobG5ldHMsICZzdGNiLT5hc29jLm5ldHMsIHNj
dHBfbmV4dCkgeworCQkJbG5ldHMtPmZsaWdodF9zaXplID0gMDsKKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19USU1FUjQsCisJCQkJIk5ldDolcCBjLWYgY3duZDolZCBzc3RocmVzaDolZFxuIiwKKwkJ
CQkodm9pZCAqKWxuZXRzLCBsbmV0cy0+Y3duZCwgbG5ldHMtPnNzdGhyZXNoKTsKKwkJfQorCQlU
QUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJ
CQlpZiAoY2hrLT5zZW50IDwgU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlpZiAoU0NUUF9C
QVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9GTElHSFRfTE9HR0lOR19FTkFC
TEUpIHsKKwkJCQkJc2N0cF9taXNjX2ludHMoU0NUUF9GTElHSFRfTE9HX1VQLAorCQkJCQkJICAg
ICAgIGNoay0+d2hvVG8tPmZsaWdodF9zaXplLAorCQkJCQkJICAgICAgIGNoay0+Ym9va19zaXpl
LAorCQkJCQkJICAgICAgICh1aW50MzJfdCkodWludHB0cl90KWNoay0+d2hvVG8sCisJCQkJCQkg
ICAgICAgY2hrLT5yZWMuZGF0YS50c24pOworCQkJCX0KKworCQkJCXNjdHBfZmxpZ2h0X3NpemVf
aW5jcmVhc2UoY2hrKTsKKwkJCQlzY3RwX3RvdGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCBjaGsp
OworCQkJfQorCQl9CisJfQorCS8qIFdlIHJldHVybiAxIGlmIHdlIG9ubHkgaGF2ZSBhIHdpbmRv
dyBwcm9iZSBvdXRzdGFuZGluZyAqLworCXJldHVybiAoMCk7Cit9CisKKworaW50CitzY3RwX3Qz
cnh0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpz
dGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICph
bHQ7CisJaW50IHdpbl9wcm9iZSwgbnVtX21rLCBudW1fYWJhbmRvbmVkOworCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfRlJfTE9HR0lOR19FTkFCTEUp
IHsKKwkJc2N0cF9sb2dfZnIoMCwgMCwgMCwgU0NUUF9GUl9UM19USU1FT1VUKTsKKwl9CisJaWYg
KFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfQ1dORF9MT0dHSU5H
X0VOQUJMRSkgeworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpsbmV0OworCisJCVRBSUxRX0ZPUkVBQ0go
bG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQlpZiAobmV0ID09IGxuZXQp
IHsKKwkJCQlzY3RwX2xvZ19jd25kKHN0Y2IsIGxuZXQsIDEsIFNDVFBfQ1dORF9MT0dfRlJPTV9U
Myk7CisJCQl9IGVsc2UgeworCQkJCXNjdHBfbG9nX2N3bmQoc3RjYiwgbG5ldCwgMCwgU0NUUF9D
V05EX0xPR19GUk9NX1QzKTsKKwkJCX0KKwkJfQorCX0KKwkvKiBGaW5kIGFuIGFsdGVybmF0ZSBh
bmQgbWFyayB0aG9zZSBmb3IgcmV0cmFuc21pc3Npb24gKi8KKwlpZiAoKHN0Y2ItPmFzb2MucGVl
cnNfcnduZCA9PSAwKSAmJgorCSAgICAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPCBuZXQtPm10
dSkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3dpbmRvd3Byb2JlKTsKKwkJd2luX3By
b2JlID0gMTsKKwl9IGVsc2UgeworCQl3aW5fcHJvYmUgPSAwOworCX0KKworCWlmICh3aW5fcHJv
YmUgPT0gMCkgeworCQkvKiBXZSBkb24ndCBkbyBub3JtYWwgdGhyZXNob2xkIG1hbmFnZW1lbnQg
b24gd2luZG93IHByb2JlcyAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChpbnAs
IHN0Y2IsIG5ldCwKKwkJICAgIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJCQkvKiBB
c3NvY2lhdGlvbiB3YXMgZGVzdHJveWVkICovCisJCQlyZXR1cm4gKDEpOworCQl9IGVsc2Ugewor
CQkJaWYgKG5ldCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQkvKiBz
ZW5kIGEgaW1tZWRpYXRlIEhCIGlmIG91ciBSVE8gaXMgc3RhbGUgKi8KKwkJCQlzdHJ1Y3QgdGlt
ZXZhbCBub3c7CisJCQkJdW5zaWduZWQgaW50IG1zX2dvbmVieTsKKworCQkJCSh2b2lkKVNDVFBf
R0VUVElNRV9USU1FVkFMKCZub3cpOworCQkJCWlmIChuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3Nl
YykgeworCQkJCQltc19nb25lYnkgPSAobm93LnR2X3NlYyAtIG5ldC0+bGFzdF9zZW50X3RpbWUu
dHZfc2VjKSAqIDEwMDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJbXNfZ29uZWJ5ID0gMDsKKwkJCQl9
CisJCQkJaWYgKChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpID09IDApIHsKKwkJCQkJ
aWYgKChtc19nb25lYnkgPiBuZXQtPlJUTykgfHwgKG5ldC0+UlRPID09IDApKSB7CisJCQkJCQkv
KgorCQkJCQkJICogbm8gcmVjZW50IGZlZWQgYmFjayBpbiBhbiBSVE8gb3IKKwkJCQkJCSAqIG1v
cmUsIHJlcXVlc3QgYSBSVFQgdXBkYXRlCisJCQkJCQkgKi8KKwkJCQkJCXNjdHBfc2VuZF9oYihz
dGNiLCBuZXQsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0K
Kwl9IGVsc2UgeworCQkvKgorCQkgKiBGb3IgYSB3aW5kb3cgcHJvYmUgd2UgZG9uJ3QgcGVuYWxp
emUgdGhlIG5ldCdzIGJ1dCBvbmx5CisJCSAqIHRoZSBhc3NvY2lhdGlvbi4gVGhpcyBtYXkgZmFp
bCBpdCBpZiBTQUNLcyBhcmUgbm90IGNvbWluZworCQkgKiBiYWNrLiBJZiBzYWNrJ3MgYXJlIGNv
bWluZyB3aXRoIHJ3bmQgbG9ja2VkIGF0IDAsIHdlIHdpbGwKKwkJICogY29udGludWUgdG8gaG9s
ZCB0aGluZ3Mgd2FpdGluZyBmb3IgcnduZCB0byByYWlzZQorCQkgKi8KKwkJaWYgKHNjdHBfdGhy
ZXNob2xkX21hbmFnZW1lbnQoaW5wLCBzdGNiLCBOVUxMLAorCQkgICAgc3RjYi0+YXNvYy5tYXhf
c2VuZF90aW1lcykpIHsKKwkJCS8qIEFzc29jaWF0aW9uIHdhcyBkZXN0cm95ZWQgKi8KKwkJCXJl
dHVybiAoMSk7CisJCX0KKwl9CisJaWYgKHN0Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmID4gMCkg
eworCQlpZiAobmV0LT5wZl90aHJlc2hvbGQgPCBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSB7CisJ
CQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQsIDIpOworCQl9IGVsc2Ug
eworCQkgICAgICAgIC8qCisJCQkgKiBDTVQ6IFVzaW5nIFJUWF9TU1RIUkVTSCBwb2xpY3kgZm9y
IENNVC4KKwkJCSAqIElmIENNVCBpcyBiZWluZyB1c2VkLCB0aGVuIHBpY2sgZGVzdCB3aXRoCisJ
CQkgKiBsYXJnZXN0IHNzdGhyZXNoIGZvciBhbnkgcmV0cmFuc21pc3Npb24uCisJCQkgKi8KKwkJ
CWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMSk7CisJCQkvKgorCQkJ
ICogQ1VDdjI6IElmIGEgZGlmZmVyZW50IGRlc3QgaXMgcGlja2VkIGZvcgorCQkJICogdGhlIHJl
dHJhbnNtaXNzaW9uLCB0aGVuIG5ldworCQkJICogKHJ0eC0pcHNldWRvX2N1bWFjayBuZWVkcyB0
byBiZSB0cmFja2VkCisJCQkgKiBmb3Igb3JpZyBkZXN0LiBMZXQgQ1VDdjIgdHJhY2sgbmV3IChy
dHgtKQorCQkJICogcHNldWRvLWN1bWFjayBhbHdheXMuCisJCQkgKi8KKwkJCW5ldC0+ZmluZF9w
c2V1ZG9fY3VtYWNrID0gMTsKKwkJCW5ldC0+ZmluZF9ydHhfcHNldWRvX2N1bWFjayA9IDE7CisJ
CX0KKwl9IGVsc2UgeworCQlhbHQgPSBzY3RwX2ZpbmRfYWx0ZXJuYXRlX25ldChzdGNiLCBuZXQs
IDApOworCX0KKworCW51bV9tayA9IDA7CisJbnVtX2FiYW5kb25lZCA9IDA7CisJKHZvaWQpc2N0
cF9tYXJrX2FsbF9mb3JfcmVzZW5kKHN0Y2IsIG5ldCwgYWx0LCB3aW5fcHJvYmUsCisJCQkJICAg
ICAgJm51bV9taywgJm51bV9hYmFuZG9uZWQpOworCS8qIEZSIExvc3MgcmVjb3ZlcnkganVzdCBl
bmRlZCB3aXRoIHRoZSBUMy4gKi8KKwlzdGNiLT5hc29jLmZhc3RfcmV0cmFuX2xvc3NfcmVjb3Zl
cnkgPSAwOworCisJLyogQ01UIEZSIGxvc3MgcmVjb3ZlcnkgZW5kZWQgd2l0aCB0aGUgVDMgKi8K
KwluZXQtPmZhc3RfcmV0cmFuX2xvc3NfcmVjb3ZlcnkgPSAwOworCWlmICgoc3RjYi0+YXNvYy5j
Y19mdW5jdGlvbnMuc2N0cF9jd25kX25ld190cmFuc21pc3Npb25fYmVnaW5zKSAmJgorCSAgICAo
bmV0LT5mbGlnaHRfc2l6ZSA9PSAwKSkgeworCQkoKnN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNj
dHBfY3duZF9uZXdfdHJhbnNtaXNzaW9uX2JlZ2lucykoc3RjYiwgbmV0KTsKKwl9CisKKwkvKgor
CSAqIHNldHVwIHRoZSBzYXQgbG9zcyByZWNvdmVyeSB0aGF0IHByZXZlbnRzIHNhdGVsbGl0ZSBj
d25kIGFkdmFuY2UuCisJICovCisJc3RjYi0+YXNvYy5zYXRfdDNfbG9zc19yZWNvdmVyeSA9IDE7
CisJc3RjYi0+YXNvYy5zYXRfdDNfcmVjb3ZlcnlfdHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3Nl
cTsKKworCS8qIEJhY2tvZmYgdGhlIHRpbWVyIGFuZCBjd25kICovCisJc2N0cF9iYWNrb2ZmX29u
X3RpbWVvdXQoc3RjYiwgbmV0LCB3aW5fcHJvYmUsIG51bV9taywgbnVtX2FiYW5kb25lZCk7CisJ
aWYgKCghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpKSB8fAorCSAgICAo
bmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgeworCQkvKiBNb3ZlIGFsbCBwZW5kaW5n
IG92ZXIgdG9vICovCisJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKKwor
CQkvKiBHZXQgdGhlIGFkZHJlc3MgdGhhdCBmYWlsZWQsIHRvCisJCSAqIGZvcmNlIGEgbmV3IHNy
YyBhZGRyZXNzIHNlbGVjdG9uIGFuZAorCQkgKiBhIHJvdXRlIGFsbG9jYXRpb24uCisJCSAqLwor
CQlpZiAobmV0LT5yby5fc19hZGRyKSB7CisJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRk
cik7CisJCQluZXQtPnJvLl9zX2FkZHIgPSBOVUxMOworCQl9CisJCW5ldC0+c3JjX2FkZHJfc2Vs
ZWN0ZWQgPSAwOworCisJCS8qIEZvcmNlIGEgcm91dGUgYWxsb2NhdGlvbiB0b28gKi8KKwkJaWYg
KG5ldC0+cm8ucm9fcnQpIHsKKwkJCVJURlJFRShuZXQtPnJvLnJvX3J0KTsKKwkJCW5ldC0+cm8u
cm9fcnQgPSBOVUxMOworCQl9CisKKwkJLyogV2FzIGl0IG91ciBwcmltYXJ5PyAqLworCQlpZiAo
KHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9PSBuZXQpICYmIChhbHQgIT0gbmV0KSkg
eworCQkJLyoKKwkJCSAqIFllcywgbm90ZSBpdCBhcyBzdWNoIGFuZCBmaW5kIGFuIGFsdGVybmF0
ZSBub3RlOgorCQkJICogdGhpcyBtZWFucyBIQiBjb2RlIG11c3QgdXNlIHRoaXMgdG8gcmVzZW50
IHRoZQorCQkJICogcHJpbWFyeSBpZiBpdCBnb2VzIGFjdGl2ZSBBTkQgaWYgc29tZW9uZSBkb2Vz
IGEKKwkJCSAqIGNoYW5nZS1wcmltYXJ5IHRoZW4gdGhpcyBmbGFnIG11c3QgYmUgY2xlYXJlZAor
CQkJICogZnJvbSBhbnkgbmV0IHN0cnVjdHVyZXMuCisJCQkgKi8KKwkJCWlmIChzdGNiLT5hc29j
LmFsdGVybmF0ZSkgeworCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFsdGVy
bmF0ZSk7CisJCQl9CisJCQlzdGNiLT5hc29jLmFsdGVybmF0ZSA9IGFsdDsKKwkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLmFsdGVybmF0ZS0+cmVmX2NvdW50LCAxKTsKKwkJfQorCX0KKwkv
KgorCSAqIFNwZWNpYWwgY2FzZSBmb3IgY29va2llLWVjaG8nZWQgY2FzZSwgd2UgZG9uJ3QgZG8g
b3V0cHV0IGJ1dCBtdXN0CisJICogYXdhaXQgdGhlIENPT0tJRS1BQ0sgYmVmb3JlIHJldHJhbnNt
aXNzaW9uCisJICovCisJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NU
QVRFX0NPT0tJRV9FQ0hPRUQpIHsKKwkJLyoKKwkJICogSGVyZSB3ZSBqdXN0IHJlc2V0IHRoZSB0
aW1lciBhbmQgc3RhcnQgYWdhaW4gc2luY2Ugd2UKKwkJICogaGF2ZSBub3QgZXN0YWJsaXNoZWQg
dGhlIGFzb2MKKwkJICovCisJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NFTkQs
IGlucCwgc3RjYiwgbmV0KTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKHN0Y2ItPmFzb2MucHJz
Y3RwX3N1cHBvcnRlZCkgeworCQlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpsY2hrOworCisJCWxj
aGsgPSBzY3RwX3RyeV9hZHZhbmNlX3BlZXJfYWNrX3BvaW50KHN0Y2IsICZzdGNiLT5hc29jKTsK
KwkJLyogQzMuIFNlZSBpZiB3ZSBuZWVkIHRvIHNlbmQgYSBGd2QtVFNOICovCisJCWlmIChTQ1RQ
X1RTTl9HVChzdGNiLT5hc29jLmFkdmFuY2VkX3BlZXJfYWNrX3BvaW50LCBzdGNiLT5hc29jLmxh
c3RfYWNrZWRfc2VxKSkgeworCQkJc2VuZF9mb3J3YXJkX3RzbihzdGNiLCAmc3RjYi0+YXNvYyk7
CisJCQlpZiAobGNoaykgeworCQkJCS8qIEFzc3VyZSBhIHRpbWVyIGlzIHVwICovCisJCQkJc2N0
cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0VORCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwg
bGNoay0+d2hvVG8pOworCQkJfQorCQl9CisJfQorCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX0NXTkRfTU9OSVRPUl9FTkFCTEUpIHsKKwkJc2N0cF9sb2df
Y3duZChzdGNiLCBuZXQsIG5ldC0+Y3duZCwgU0NUUF9DV05EX0xPR19GUk9NX1JUWCk7CisJfQor
CXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0cF90MWluaXRfdGltZXIoc3RydWN0IHNjdHBfaW5w
Y2IgKmlucCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0
cyAqbmV0KQoreworCS8qIGJ1bXAgdGhlIHRocmVzaG9sZHMgKi8KKwlpZiAoc3RjYi0+YXNvYy5k
ZWxheWVkX2Nvbm5lY3Rpb24pIHsKKwkJLyoKKwkJICogc3BlY2lhbCBob29rIGZvciBkZWxheWVk
IGNvbm5lY3Rpb24uIFRoZSBsaWJyYXJ5IGRpZCBOT1QKKwkJICogY29tcGxldGUgdGhlIHJlc3Qg
b2YgaXRzIHNlbmRzLgorCQkgKi8KKwkJc3RjYi0+YXNvYy5kZWxheWVkX2Nvbm5lY3Rpb24gPSAw
OworCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
CQlyZXR1cm4gKDApOworCX0KKwlpZiAoU0NUUF9HRVRfU1RBVEUoKCZzdGNiLT5hc29jKSkgIT0g
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc2N0cF90
aHJlc2hvbGRfbWFuYWdlbWVudChpbnAsIHN0Y2IsIG5ldCwKKwkgICAgc3RjYi0+YXNvYy5tYXhf
aW5pdF90aW1lcykpIHsKKwkJLyogQXNzb2NpYXRpb24gd2FzIGRlc3Ryb3llZCAqLworCQlyZXR1
cm4gKDEpOworCX0KKwlzdGNiLT5hc29jLmRyb3BwZWRfc3BlY2lhbF9jbnQgPSAwOworCXNjdHBf
YmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwg
MSwgMCwgMCk7CisJaWYgKHN0Y2ItPmFzb2MuaW5pdGlhbF9pbml0X3J0b19tYXggPCBuZXQtPlJU
TykgeworCQluZXQtPlJUTyA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9pbml0X3J0b19tYXg7CisJfQor
CWlmIChzdGNiLT5hc29jLm51bW5ldHMgPiAxKSB7CisJCS8qIElmIHdlIGhhdmUgbW9yZSB0aGFu
IG9uZSBhZGRyIHVzZSBpdCAqLworCQlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisKKwkJYWx0ID0g
c2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0
aW9uLCAwKTsKKwkJaWYgKGFsdCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsK
KwkJCXNjdHBfbW92ZV9jaHVua3NfZnJvbV9uZXQoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rl
c3RpbmF0aW9uKTsKKwkJCXN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiA9IGFsdDsKKwkJ
fQorCX0KKwkvKiBTZW5kIG91dCBhIG5ldyBpbml0ICovCisJc2N0cF9zZW5kX2luaXRpYXRlKGlu
cCwgc3RjYiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwlyZXR1cm4gKDApOworfQorCisvKgorICog
Rm9yIGNvb2tpZSBhbmQgYXNjb25mIHdlIGFjdHVhbGx5IG5lZWQgdG8gZmluZCBhbmQgbWFyayBm
b3IgcmVzZW5kLCB0aGVuCisgKiBpbmNyZW1lbnQgdGhlIHJlc2VuZCBjb3VudGVyIChhZnRlciBh
bGwgdGhlIHRocmVzaG9sZCBtYW5hZ2VtZW50IHN0dWZmIG9mCisgKiBjb3Vyc2UpLgorICovCitp
bnQKK3NjdHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAgc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCBTQ1RQX1VOVVNFRCkK
K3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY29v
a2llOworCisJLyogZmlyc3QgYmVmb3JlIGFsbCBlbHNlIHdlIG11c3QgZmluZCB0aGUgY29va2ll
ICovCisJVEFJTFFfRk9SRUFDSChjb29raWUsICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1
ZSwgc2N0cF9uZXh0KSB7CisJCWlmIChjb29raWUtPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0NP
T0tJRV9FQ0hPKSB7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoY29va2llID09IE5VTEwpIHsK
KwkJaWYgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9F
Q0hPRUQpIHsKKwkJCS8qIEZPT0JBUiEgKi8KKwkJCXN0cnVjdCBtYnVmICpvcF9lcnI7CisKKwkJ
CW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVfY2F1c2UoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2RpYWdf
aW5mb19jb2RlKSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkNvb2tpZSB0aW1l
ciBleHBpcmVkLCBidXQgbm8gY29va2llIik7CisJCQlpbnAtPmxhc3RfYWJvcnRfY29kZSA9IFND
VFBfRlJPTV9TQ1RQX1RJTUVSICsgU0NUUF9MT0NfMzsKKwkJCXNjdHBfYWJvcnRfYW5fYXNzb2Np
YXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCX0gZWxzZSB7
CisjaWZkZWYgSU5WQVJJQU5UUworCQkJcGFuaWMoIkNvb2tpZSB0aW1lciBleHBpcmVzIGluIHdy
b25nIHN0YXRlPyIpOworI2Vsc2UKKwkJCVNDVFBfUFJJTlRGKCJTdHJhbmdlIGluIHN0YXRlICVk
IG5vdCBjb29raWUtZWNob2VkIHlldCBjLWUgdGltZXIgZXhwaXJlcz9cbiIsIFNDVFBfR0VUX1NU
QVRFKCZzdGNiLT5hc29jKSk7CisJCQlyZXR1cm4gKDApOworI2VuZGlmCisJCX0KKwkJcmV0dXJu
ICgwKTsKKwl9CisJLyogT2sgd2UgZm91bmQgdGhlIGNvb2tpZSwgdGhyZXNob2xkIG1hbmFnZW1l
bnQgbmV4dCAqLworCWlmIChzY3RwX3RocmVzaG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgY29v
a2llLT53aG9UbywKKwkgICAgc3RjYi0+YXNvYy5tYXhfaW5pdF90aW1lcykpIHsKKwkJLyogQXNz
b2MgaXMgb3ZlciAqLworCQlyZXR1cm4gKDEpOworCX0KKwkvKgorCSAqIENsZWFyZWQgdGhyZXNo
b2xkIG1hbmFnZW1lbnQsIG5vdyBsZXRzIGJhY2tvZmYgdGhlIGFkZHJlc3MKKwkgKiBhbmQgc2Vs
ZWN0IGFuIGFsdGVybmF0ZQorCSAqLworCXN0Y2ItPmFzb2MuZHJvcHBlZF9zcGVjaWFsX2NudCA9
IDA7CisJc2N0cF9iYWNrb2ZmX29uX3RpbWVvdXQoc3RjYiwgY29va2llLT53aG9UbywgMSwgMCwg
MCk7CisJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgY29va2llLT53aG9Ubywg
MCk7CisJaWYgKGFsdCAhPSBjb29raWUtPndob1RvKSB7CisJCXNjdHBfZnJlZV9yZW1vdGVfYWRk
cihjb29raWUtPndob1RvKTsKKwkJY29va2llLT53aG9UbyA9IGFsdDsKKwkJYXRvbWljX2FkZF9p
bnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKwl9CisJLyogTm93IG1hcmsgdGhlIHJldHJhbiBpbmZv
ICovCisJaWYgKGNvb2tpZS0+c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQlzY3Rw
X3Vjb3VudF9pbmNyKHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwl9CisJY29v
a2llLT5zZW50ID0gU0NUUF9EQVRBR1JBTV9SRVNFTkQ7CisJY29va2llLT5mbGFncyB8PSBDSFVO
S19GTEFHU19GUkFHTUVOVF9PSzsKKwkvKgorCSAqIE5vdyBjYWxsIHRoZSBvdXRwdXQgcm91dGlu
ZSB0byBraWNrIG91dCB0aGUgY29va2llIGFnYWluLCBOb3RlIHdlCisJICogZG9uJ3QgbWFyayBh
bnkgY2h1bmtzIGZvciByZXRyYW4gc28gdGhhdCBGUiB3aWxsIG5lZWQgdG8ga2ljayBpbgorCSAq
IHRvIG1vdmUgdGhlc2UgKG9yIGEgc2VuZCB0aW1lcikuCisJICovCisJcmV0dXJuICgwKTsKK30K
KworaW50CitzY3RwX3N0cnJlc2V0X3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJc3RydWN0
IHNjdHBfbmV0cyAqYWx0OworCXN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKnN0cnJzdCA9IE5VTEws
ICpjaGsgPSBOVUxMOworCisJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5n
ID09IDApIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyogZmluZCB0aGUgZXhpc3RpbmcgU1RSUkVT
RVQsIHdlIHVzZSB0aGUgc2VxIG51bWJlciB3ZSBzZW50IG91dCBvbiAqLworCSh2b2lkKXNjdHBf
ZmluZF9zdHJlYW1fcmVzZXQoc3RjYiwgc3RjYi0+YXNvYy5zdHJfcmVzZXRfc2VxX291dCwgJnN0
cnJzdCk7CisJaWYgKHN0cnJzdCA9PSBOVUxMKSB7CisJCXJldHVybiAoMCk7CisJfQorCS8qIGRv
IHRocmVzaG9sZCBtYW5hZ2VtZW50ICovCisJaWYgKHNjdHBfdGhyZXNob2xkX21hbmFnZW1lbnQo
aW5wLCBzdGNiLCBzdHJyc3QtPndob1RvLAorCSAgICBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVz
KSkgeworCQkvKiBBc3NvYyBpcyBvdmVyICovCisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICog
Q2xlYXJlZCB0aHJlc2hvbGQgbWFuYWdlbWVudCwgbm93IGxldHMgYmFja29mZiB0aGUgYWRkcmVz
cworCSAqIGFuZCBzZWxlY3QgYW4gYWx0ZXJuYXRlCisJICovCisJc2N0cF9iYWNrb2ZmX29uX3Rp
bWVvdXQoc3RjYiwgc3RycnN0LT53aG9UbywgMSwgMCwgMCk7CisJYWx0ID0gc2N0cF9maW5kX2Fs
dGVybmF0ZV9uZXQoc3RjYiwgc3RycnN0LT53aG9UbywgMCk7CisJc2N0cF9mcmVlX3JlbW90ZV9h
ZGRyKHN0cnJzdC0+d2hvVG8pOworCXN0cnJzdC0+d2hvVG8gPSBhbHQ7CisJYXRvbWljX2FkZF9p
bnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKworCS8qIFNlZSBpZiBhIEVDTiBFY2hvIGlzIGFsc28g
c3RyYW5kZWQgKi8KKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2MuY29udHJvbF9zZW5k
X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKChjaGstPndob1RvID09IG5ldCkgJiYKKwkJICAg
IChjaGstPnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKGNoay0+d2hvVG8pOworCQkJaWYgKGNoay0+c2VudCAhPSBTQ1RQX0RBVEFH
UkFNX1JFU0VORCkgeworCQkJCWNoay0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQkJ
CWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQkJc2N0cF91Y291bnRf
aW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCQl9CisJCQljaGstPndo
b1RvID0gYWx0OworCQkJYXRvbWljX2FkZF9pbnQoJmFsdC0+cmVmX2NvdW50LCAxKTsKKwkJfQor
CX0KKwlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSkgeworCQkv
KgorCQkgKiBJZiB0aGUgYWRkcmVzcyB3ZW50IHVuLXJlYWNoYWJsZSwgd2UgbmVlZCB0byBtb3Zl
IHRvCisJCSAqIGFsdGVybmF0ZXMgZm9yIEFMTCBjaGsncyBpbiBxdWV1ZQorCQkgKi8KKwkJc2N0
cF9tb3ZlX2NodW5rc19mcm9tX25ldChzdGNiLCBuZXQpOworCX0KKwkvKiBtYXJrIHRoZSByZXRy
YW4gaW5mbyAqLworCWlmIChzdHJyc3QtPnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpCisJ
CXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpOworCXN0
cnJzdC0+c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCXN0cnJzdC0+ZmxhZ3MgfD0gQ0hV
TktfRkxBR1NfRlJBR01FTlRfT0s7CisKKwkvKiByZXN0YXJ0IHRoZSB0aW1lciAqLworCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NUUlJFU0VULCBpbnAsIHN0Y2IsIHN0cnJzdC0+
d2hvVG8pOworCXJldHVybiAoMCk7Cit9CisKK2ludAorc2N0cF9hc2NvbmZfdGltZXIoc3RydWN0
IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorCQkgIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqYXNjb25mLCAqY2hrOworCisJLyogaXMgdGhpcyBhIGZpcnN0IHNlbmQsIG9yIGEg
cmV0cmFuc21pc3Npb24/ICovCisJaWYgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLmFzY29uZl9z
ZW5kX3F1ZXVlKSkgeworCQkvKiBjb21wb3NlIGEgbmV3IEFTQ09ORiBjaHVuayBhbmQgc2VuZCBp
dCAqLworCQlzY3RwX3NlbmRfYXNjb25mKHN0Y2IsIG5ldCwgU0NUUF9BRERSX05PVF9MT0NLRUQp
OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFJldHJhbnNtaXNzaW9uIG9mIHRoZSBleGlzdGluZyBB
U0NPTkYgaXMgbmVlZGVkCisJCSAqLworCisJCS8qIGZpbmQgdGhlIGV4aXN0aW5nIEFTQ09ORiAq
LworCQlhc2NvbmYgPSBUQUlMUV9GSVJTVCgmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1ZSk7
CisJCWlmIChhc2NvbmYgPT0gTlVMTCkgeworCQkJcmV0dXJuICgwKTsKKwkJfQorCQkvKiBkbyB0
aHJlc2hvbGQgbWFuYWdlbWVudCAqLworCQlpZiAoc2N0cF90aHJlc2hvbGRfbWFuYWdlbWVudChp
bnAsIHN0Y2IsIGFzY29uZi0+d2hvVG8sCisJCSAgICBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVz
KSkgeworCQkJLyogQXNzb2MgaXMgb3ZlciAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCQlpZiAo
YXNjb25mLT5zbmRfY291bnQgPiBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSB7CisJCQkvKgor
CQkJICogU29tZXRoaW5nIGlzIHJvdHRlbjogb3VyIHBlZXIgaXMgbm90IHJlc3BvbmRpbmcgdG8K
KwkJCSAqIEFTQ09ORnMgYnV0IGFwcGFyZW50bHkgaXMgdG8gb3RoZXIgY2h1bmtzLiAgaS5lLiBp
dAorCQkJICogaXMgbm90IHByb3Blcmx5IGhhbmRsaW5nIHRoZSBjaHVuayB0eXBlIHVwcGVyIGJp
dHMuCisJCQkgKiBNYXJrIHRoaXMgcGVlciBhcyBBU0NPTkYgaW5jYXBhYmxlIGFuZCBjbGVhbnVw
LgorCQkJICovCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiYXNjb25mX3RpbWVyOiBQ
ZWVyIGhhcyBub3QgcmVzcG9uZGVkIHRvIG91ciByZXBlYXRlZCBBU0NPTkZzXG4iKTsKKwkJCXNj
dHBfYXNjb25mX2NsZWFudXAoc3RjYiwgbmV0KTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJLyoK
KwkJICogY2xlYXJlZCB0aHJlc2hvbGQgbWFuYWdlbWVudCwgc28gbm93IGJhY2tvZmYgdGhlIG5l
dCBhbmQKKwkJICogc2VsZWN0IGFuIGFsdGVybmF0ZQorCQkgKi8KKwkJc2N0cF9iYWNrb2ZmX29u
X3RpbWVvdXQoc3RjYiwgYXNjb25mLT53aG9UbywgMSwgMCwgMCk7CisJCWFsdCA9IHNjdHBfZmlu
ZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIGFzY29uZi0+d2hvVG8sIDApOworCQlpZiAoYXNjb25mLT53
aG9UbyAhPSBhbHQpIHsKKwkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihhc2NvbmYtPndob1RvKTsK
KwkJCWFzY29uZi0+d2hvVG8gPSBhbHQ7CisJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291
bnQsIDEpOworCQl9CisKKwkJLyogU2VlIGlmIGFuIEVDTiBFY2hvIGlzIGFsc28gc3RyYW5kZWQg
Ki8KKwkJVEFJTFFfRk9SRUFDSChjaGssICZzdGNiLT5hc29jLmNvbnRyb2xfc2VuZF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCQlpZiAoKGNoay0+d2hvVG8gPT0gbmV0KSAmJgorCQkJICAgIChjaGst
PnJlYy5jaHVua19pZC5pZCA9PSBTQ1RQX0VDTl9FQ0hPKSkgeworCQkJCXNjdHBfZnJlZV9yZW1v
dGVfYWRkcihjaGstPndob1RvKTsKKwkJCQljaGstPndob1RvID0gYWx0OworCQkJCWlmIChjaGst
PnNlbnQgIT0gU0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQkJY2hrLT5zZW50ID0gU0NUUF9E
QVRBR1JBTV9SRVNFTkQ7CisJCQkJCWNoay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRf
T0s7CisJCQkJCXNjdHBfdWNvdW50X2luY3Ioc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9j
bnQpOworCQkJCX0KKwkJCQlhdG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQkJ
fQorCQl9CisJCVRBSUxRX0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5hc2NvbmZfc2VuZF9xdWV1
ZSwgc2N0cF9uZXh0KSB7CisJCQlpZiAoY2hrLT53aG9UbyAhPSBhbHQpIHsKKwkJCQlzY3RwX2Zy
ZWVfcmVtb3RlX2FkZHIoY2hrLT53aG9Ubyk7CisJCQkJY2hrLT53aG9UbyA9IGFsdDsKKwkJCQlh
dG9taWNfYWRkX2ludCgmYWx0LT5yZWZfY291bnQsIDEpOworCQkJfQorCQkJaWYgKGFzY29uZi0+
c2VudCAhPSBTQ1RQX0RBVEFHUkFNX1JFU0VORCAmJiBjaGstPnNlbnQgIT0gU0NUUF9EQVRBR1JB
TV9VTlNFTlQpCisJCQkJc2N0cF91Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0
cmFuX2NudCk7CisJCQljaGstPnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKKwkJCWNoay0+
ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCX0KKwkJaWYgKCEobmV0LT5kZXN0
X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkpIHsKKwkJCS8qCisJCQkgKiBJZiB0aGUgYWRk
cmVzcyB3ZW50IHVuLXJlYWNoYWJsZSwgd2UgbmVlZCB0byBtb3ZlCisJCQkgKiB0byB0aGUgYWx0
ZXJuYXRlIGZvciBBTEwgY2h1bmtzIGluIHF1ZXVlCisJCQkgKi8KKwkJCXNjdHBfbW92ZV9jaHVu
a3NfZnJvbV9uZXQoc3RjYiwgbmV0KTsKKwkJfQorCQkvKiBtYXJrIHRoZSByZXRyYW4gaW5mbyAq
LworCQlpZiAoYXNjb25mLT5zZW50ICE9IFNDVFBfREFUQUdSQU1fUkVTRU5EKQorCQkJc2N0cF91
Y291bnRfaW5jcihzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7CisJCWFzY29uZi0+
c2VudCA9IFNDVFBfREFUQUdSQU1fUkVTRU5EOworCQlhc2NvbmYtPmZsYWdzIHw9IENIVU5LX0ZM
QUdTX0ZSQUdNRU5UX09LOworCisJCS8qIHNlbmQgYW5vdGhlciBBU0NPTkYgaWYgYW55IGFuZCB3
ZSBjYW4gZG8gKi8KKwkJc2N0cF9zZW5kX2FzY29uZihzdGNiLCBhbHQsIFNDVFBfQUREUl9OT1Rf
TE9DS0VEKTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyogTW9iaWxpdHkgYWRhcHRhdGlvbiAq
Lwordm9pZAorc2N0cF9kZWxldGVfcHJpbV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3Rw
X25ldHMgKm5ldCBTQ1RQX1VOVVNFRCkKK3sKKwlpZiAoc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1h
cnkgPT0gTlVMTCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfQVNDT05GMSwgImRlbGV0ZV9wcmlt
X3RpbWVyOiBkZWxldGVkX3ByaW1hcnkgaXMgbm90IHN0b3JlZC4uLlxuIik7CisJCXNjdHBfbW9i
aWxpdHlfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX01PQklMSVRZX1BSSU1fREVMRVRFRCk7CisJCXJl
dHVybjsKKwl9CisJU0NUUERCRyhTQ1RQX0RFQlVHX0FTQ09ORjEsICJkZWxldGVfcHJpbV90aW1l
cjogZmluaXNoZWQgdG8ga2VlcCBkZWxldGVkIHByaW1hcnkgIik7CisJU0NUUERCR19BRERSKFND
VFBfREVCVUdfQVNDT05GMSwgJnN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5LT5yby5fbF9hZGRy
LnNhKTsKKwlzY3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3RjYi0+YXNvYy5kZWxldGVkX3ByaW1hcnkp
OworCXN0Y2ItPmFzb2MuZGVsZXRlZF9wcmltYXJ5ID0gTlVMTDsKKwlzY3RwX21vYmlsaXR5X2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9NT0JJTElUWV9QUklNX0RFTEVURUQpOworCXJldHVybjsKK30K
KworLyoKKyAqIEZvciB0aGUgc2h1dGRvd24gYW5kIHNodXRkb3duLWFjaywgd2UgZG8gbm90IGtl
ZXAgb25lIGFyb3VuZCBvbiB0aGUKKyAqIGNvbnRyb2wgcXVldWUuIFRoaXMgbWVhbnMgd2UgbXVz
dCBnZW5lcmF0ZSBhIG5ldyBvbmUgYW5kIGNhbGwgdGhlIGdlbmVyYWwKKyAqIGNodW5rIG91dHB1
dCByb3V0aW5lLCBBRlRFUiBoYXZpbmcgZG9uZSB0aHJlc2hvbGQgbWFuYWdlbWVudC4KKyAqIEl0
IGlzIGFzc3VtZWQgdGhhdCBuZXQgaXMgbm9uLU5VTEwuCisgKi8KK2ludAorc2N0cF9zaHV0ZG93
bl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisg
ICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0cnVjdCBzY3RwX25ldHMgKmFsdDsKKwor
CS8qIGZpcnN0IHRocmVzaG9sZCBtYW5hZ2VtZW50ICovCisJaWYgKHNjdHBfdGhyZXNob2xkX21h
bmFnZW1lbnQoaW5wLCBzdGNiLCBuZXQsIHN0Y2ItPmFzb2MubWF4X3NlbmRfdGltZXMpKSB7CisJ
CS8qIEFzc29jIGlzIG92ZXIgKi8KKwkJcmV0dXJuICgxKTsKKwl9CisJc2N0cF9iYWNrb2ZmX29u
X3RpbWVvdXQoc3RjYiwgbmV0LCAxLCAwLCAwKTsKKwkvKiBzZWNvbmQgc2VsZWN0IGFuIGFsdGVy
bmF0aXZlICovCisJYWx0ID0gc2N0cF9maW5kX2FsdGVybmF0ZV9uZXQoc3RjYiwgbmV0LCAwKTsK
KworCS8qIHRoaXJkIGdlbmVyYXRlIGEgc2h1dGRvd24gaW50byB0aGUgcXVldWUgZm9yIG91dCBu
ZXQgKi8KKwlzY3RwX3NlbmRfc2h1dGRvd24oc3RjYiwgYWx0KTsKKworCS8qIGZvdXJ0aCByZXN0
YXJ0IHRpbWVyICovCisJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV04s
IGlucCwgc3RjYiwgYWx0KTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3NjdHBfc2h1dGRvd25h
Y2tfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLAor
ICAgIHN0cnVjdCBzY3RwX25ldHMgKm5ldCkKK3sKKwlzdHJ1Y3Qgc2N0cF9uZXRzICphbHQ7CisK
KwkvKiBmaXJzdCB0aHJlc2hvbGQgbWFuYWdlbWVudCAqLworCWlmIChzY3RwX3RocmVzaG9sZF9t
YW5hZ2VtZW50KGlucCwgc3RjYiwgbmV0LCBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVzKSkgewor
CQkvKiBBc3NvYyBpcyBvdmVyICovCisJCXJldHVybiAoMSk7CisJfQorCXNjdHBfYmFja29mZl9v
bl90aW1lb3V0KHN0Y2IsIG5ldCwgMSwgMCwgMCk7CisJLyogc2Vjb25kIHNlbGVjdCBhbiBhbHRl
cm5hdGl2ZSAqLworCWFsdCA9IHNjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0Y2IsIG5ldCwgMCk7
CisKKwkvKiB0aGlyZCBnZW5lcmF0ZSBhIHNodXRkb3duIGludG8gdGhlIHF1ZXVlIGZvciBvdXQg
bmV0ICovCisJc2N0cF9zZW5kX3NodXRkb3duX2FjayhzdGNiLCBhbHQpOworCisJLyogZm91cnRo
IHJlc3RhcnQgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTkFDSywgaW5wLCBzdGNiLCBhbHQpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lk
CitzY3RwX2F1ZGl0X3N0cmVhbV9xdWV1ZXNfZm9yX3NpemUoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKKyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX3F1
ZXVlX3BlbmRpbmcgKnNwOworCXVuc2lnbmVkIGludCBpLCBjaGtzX2luX3F1ZXVlID0gMDsKKwlp
bnQgYmVpbmdfZmlsbGVkID0gMDsKKwkvKgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgT05MWSBjYWxs
ZWQgd2hlbiB0aGUgc2VuZC9zZW50IHF1ZXVlcyBhcmUgZW1wdHkuCisJICovCisJaWYgKChzdGNi
ID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpCisJCXJldHVybjsKKworCWlmIChzdGNiLT5hc29j
LnNlbnRfcXVldWVfcmV0cmFuX2NudCkgeworCQlTQ1RQX1BSSU5URigiSG1tLCBzZW50X3F1ZXVl
X3JldHJhbl9jbnQgaXMgbm9uLXplcm8gJWRcbiIsCisJCQkgICAgc3RjYi0+YXNvYy5zZW50X3F1
ZXVlX3JldHJhbl9jbnQpOworCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7
CisJfQorCWlmIChzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX2VtcHR5KHN0Y2Is
ICZzdGNiLT5hc29jKSkgeworCQkvKiBObyBzdHJlYW0gc2NoZWR1bGVyIGluZm9ybWF0aW9uLCBp
bml0aWFsaXplIHNjaGVkdWxlciAqLworCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3Nz
X2luaXQoc3RjYiwgJnN0Y2ItPmFzb2MsIDApOworCQlpZiAoIXN0Y2ItPmFzb2Muc3NfZnVuY3Rp
b25zLnNjdHBfc3NfaXNfZW1wdHkoc3RjYiwgJnN0Y2ItPmFzb2MpKSB7CisJCQkvKiB5ZXAsIHdl
IGxvc3QgYSBzdHJlYW0gb3IgdHdvICovCisJCQlTQ1RQX1BSSU5URigiRm91bmQgYWRkaXRpb25h
bCBzdHJlYW1zIE5PVCBtYW5hZ2VkIGJ5IHNjaGVkdWxlciwgY29ycmVjdGVkXG4iKTsKKwkJfSBl
bHNlIHsKKwkJCS8qIG5vIHN0cmVhbXMgbG9zdCAqLworCQkJc3RjYi0+YXNvYy50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZSA9IDA7CisJCX0KKwl9CisJLyogQ2hlY2sgdG8gc2VlIGlmIHNvbWUgZGF0
YSBxdWV1ZWQsIGlmIHNvIHJlcG9ydCBpdCAqLworCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29j
LnN0cmVhbW91dGNudDsgaSsrKSB7CisJCWlmICghVEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc3Ry
bW91dFtpXS5vdXRxdWV1ZSkpIHsKKwkJCVRBSUxRX0ZPUkVBQ0goc3AsICZzdGNiLT5hc29jLnN0
cm1vdXRbaV0ub3V0cXVldWUsIG5leHQpIHsKKwkJCQlpZiAoc3AtPm1zZ19pc19jb21wbGV0ZSkK
KwkJCQkJYmVpbmdfZmlsbGVkKys7CisJCQkJY2hrc19pbl9xdWV1ZSsrOworCQkJfQorCQl9CisJ
fQorCWlmIChjaGtzX2luX3F1ZXVlICE9IHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCkgewor
CQlTQ1RQX1BSSU5URigiSG1tLCBzdHJlYW0gcXVldWUgY250IGF0ICVkIEkgY291bnRlZCAlZCBp
biBzdHJlYW0gb3V0IHdoZWVsXG4iLAorCQkJICAgIHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2Nu
dCwgY2hrc19pbl9xdWV1ZSk7CisJfQorCWlmIChjaGtzX2luX3F1ZXVlKSB7CisJCS8qIGNhbGwg
dGhlIG91dHB1dCBxdWV1ZSBmdW5jdGlvbiAqLworCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0
Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWlmICgoVEFJ
TFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkpICYmCisJCSAgICAoVEFJTFFfRU1QVFko
JnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkpKSB7CisJCQkvKgorCQkJICogUHJvYmFibHkgc2hvdWxk
IGdvIGluIGFuZCBtYWtlIGl0IGdvIGJhY2sgdGhyb3VnaAorCQkJICogYW5kIGFkZCBmcmFnbWVu
dHMgYWxsb3dlZAorCQkJICovCisJCQlpZiAoYmVpbmdfZmlsbGVkID09IDApIHsKKwkJCQlTQ1RQ
X1BSSU5URigiU3RpbGwgbm90aGluZyBtb3ZlZCAlZCBjaHVua3MgYXJlIHN0dWNrXG4iLAorCQkJ
CQkgICAgY2hrc19pbl9xdWV1ZSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlTQ1RQX1BSSU5U
RigiRm91bmQgbm8gY2h1bmtzIG9uIGFueSBxdWV1ZSB0b3Q6JWx1XG4iLAorCQkJICAgICh1X2xv
bmcpc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSk7CisJCXN0Y2ItPmFzb2MudG90
YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOworCX0KK30KKworaW50CitzY3RwX2hlYXJ0YmVhdF90
aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAg
c3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXVpbnQ4X3QgbmV0X3dhc19wZjsKKworCWlmIChu
ZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJbmV0X3dhc19wZiA9IDE7CisJfSBl
bHNlIHsKKwkJbmV0X3dhc19wZiA9IDA7CisJfQorCWlmIChuZXQtPmhiX3Jlc3BvbmRlZCA9PSAw
KSB7CisJCWlmIChuZXQtPnJvLl9zX2FkZHIpIHsKKwkJCS8qIEludmFsaWRhdGUgdGhlIHNyYyBh
ZGRyZXNzIGlmIHdlIGRpZCBub3QgZ2V0CisJCQkgKiBhIHJlc3BvbnNlIGxhc3QgdGltZS4KKwkJ
CSAqLworCQkJc2N0cF9mcmVlX2lmYShuZXQtPnJvLl9zX2FkZHIpOworCQkJbmV0LT5yby5fc19h
ZGRyID0gTlVMTDsKKwkJCW5ldC0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOworCQl9CisJCXNjdHBf
YmFja29mZl9vbl90aW1lb3V0KHN0Y2IsIG5ldCwgMSwgMCwgMCk7CisJCWlmIChzY3RwX3RocmVz
aG9sZF9tYW5hZ2VtZW50KGlucCwgc3RjYiwgbmV0LCBzdGNiLT5hc29jLm1heF9zZW5kX3RpbWVz
KSkgeworCQkJLyogQXNzb2MgaXMgb3ZlciAqLworCQkJcmV0dXJuICgxKTsKKwkJfQorCX0KKwkv
KiBaZXJvIFBCQSwgaWYgaXQgbmVlZHMgaXQgKi8KKwlpZiAobmV0LT5wYXJ0aWFsX2J5dGVzX2Fj
a2VkKSB7CisJCW5ldC0+cGFydGlhbF9ieXRlc19hY2tlZCA9IDA7CisJfQorCWlmICgoc3RjYi0+
YXNvYy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA+IDApICYmCisJICAgIChUQUlMUV9FTVBUWSgm
c3RjYi0+YXNvYy5zZW5kX3F1ZXVlKSkgJiYKKwkgICAgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29j
LnNlbnRfcXVldWUpKSkgeworCQlzY3RwX2F1ZGl0X3N0cmVhbV9xdWV1ZXNfZm9yX3NpemUoaW5w
LCBzdGNiKTsKKwl9CisJaWYgKCEobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpICYm
CisJICAgICEoKG5ldF93YXNfcGYgPT0gMCkgJiYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQURE
Ul9QRikpKSB7CisJCS8qIHdoZW4gbW92ZSB0byBQRiBkdXJpbmcgdGhyZXNob2xkIG1hbmdlbWVu
dCwgYSBIQiBoYXMgYmVlbgorCQkgICBxdWV1ZWQgaW4gdGhhdCByb3V0aW5lICovCisJCXVpbnQz
Ml90IG1zX2dvbmVfYnk7CisKKwkJaWYgKChuZXQtPmxhc3Rfc2VudF90aW1lLnR2X3NlYyA+IDAp
IHx8CisJCSAgICAobmV0LT5sYXN0X3NlbnRfdGltZS50dl91c2VjID4gMCkpIHsKKyNpZmRlZiBf
X0ZyZWVCU0RfXworCQkJc3RydWN0IHRpbWV2YWwgZGlmZjsKKworCQkJU0NUUF9HRVRUSU1FX1RJ
TUVWQUwoJmRpZmYpOworCQkJdGltZXZhbHN1YigmZGlmZiwgJm5ldC0+bGFzdF9zZW50X3RpbWUp
OworI2Vsc2UKKwkJCXN0cnVjdCB0aW1ldmFsIGRpZmYsIG5vdzsKKworCQkJU0NUUF9HRVRUSU1F
X1RJTUVWQUwoJm5vdyk7CisJCQl0aW1lcnN1Yigmbm93LCAmbmV0LT5sYXN0X3NlbnRfdGltZSwg
JmRpZmYpOworI2VuZGlmCisJCQltc19nb25lX2J5ID0gKHVpbnQzMl90KShkaWZmLnR2X3NlYyAq
IDEwMDApICsKKwkJCSAgICAgICAgICAgICAodWludDMyX3QpKGRpZmYudHZfdXNlYyAvIDEwMDAp
OworCQl9IGVsc2UgeworCQkJbXNfZ29uZV9ieSA9IDB4ZmZmZmZmZmY7CisJCX0KKwkJaWYgKCht
c19nb25lX2J5ID49IG5ldC0+aGVhcnRfYmVhdF9kZWxheSkgfHwKKwkJICAgIChuZXQtPmRlc3Rf
c3RhdGUgJiBTQ1RQX0FERFJfUEYpKSB7CisJCQlzY3RwX3NlbmRfaGIoc3RjYiwgbmV0LCBTQ1RQ
X1NPX05PVF9MT0NLRUQpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK3ZvaWQKK3NjdHBf
cGF0aG10dV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgIHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDMyX3QgbmV4dF9t
dHUsIG10dTsKKworCW5leHRfbXR1ID0gc2N0cF9nZXRfbmV4dF9tdHUobmV0LT5tdHUpOworCisJ
aWYgKChuZXh0X210dSA+IG5ldC0+bXR1KSAmJiAobmV0LT5wb3J0ID09IDApKSB7CisJCWlmICgo
bmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9PSAwKSB8fAorCQkgICAgKG5ldC0+cm8uX3NfYWRkciA9
PSBOVUxMKSB8fAorCQkgICAgKG5ldC0+cm8uX3NfYWRkci0+bG9jYWxpZmFfZmxhZ3MgJiBTQ1RQ
X0JFSU5HX0RFTEVURUQpKSB7CisJCQlpZiAoKG5ldC0+cm8uX3NfYWRkciAhPSBOVUxMKSAmJiAo
bmV0LT5yby5fc19hZGRyLT5sb2NhbGlmYV9mbGFncyAmIFNDVFBfQkVJTkdfREVMRVRFRCkpIHsK
KwkJCQlzY3RwX2ZyZWVfaWZhKG5ldC0+cm8uX3NfYWRkcik7CisJCQkJbmV0LT5yby5fc19hZGRy
ID0gTlVMTDsKKwkJCQluZXQtPnNyY19hZGRyX3NlbGVjdGVkID0gMDsKKwkJCX0gZWxzZSAgaWYg
KG5ldC0+cm8uX3NfYWRkciA9PSBOVUxMKSB7CisjaWYgZGVmaW5lZChJTkVUNikgJiYgZGVmaW5l
ZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQorCQkJCWlmIChuZXQtPnJvLl9sX2FkZHIuc2Euc2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAo
c3RydWN0IHNvY2thZGRyX2luNiAqKSZuZXQtPnJvLl9sX2FkZHI7CisJCQkJCS8qIEtBTUUgaGFj
azogZW1iZWQgc2NvcGVpZCAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQo
QVBQTEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkKKwkJCQkJKHZvaWQp
aW42X2VtYmVkc2NvcGUoJnNpbjYtPnNpbjZfYWRkciwgc2luNiwgTlVMTCwgTlVMTCk7CisjZWxz
ZQorCQkJCQkodm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42LCBOVUxM
LCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChTQ1RQX0tBTUUpCisJCQkJCSh2
b2lkKXNhNl9lbWJlZHNjb3BlKHNpbjYsIE1PRFVMRV9HTE9CQUwoaXA2X3VzZV9kZWZ6b25lKSk7
CisjZWxzZQorCQkJCQkodm9pZClpbjZfZW1iZWRzY29wZSgmc2luNi0+c2luNl9hZGRyLCBzaW42
KTsKKyNlbmRpZgorCQkJCX0KKyNlbmRpZgorCisJCQkJbmV0LT5yby5fc19hZGRyID0gc2N0cF9z
b3VyY2VfYWRkcmVzc19zZWxlY3Rpb24oaW5wLAorCQkJCQkJCQkJCXN0Y2IsCisJCQkJCQkJCQkJ
KHNjdHBfcm91dGVfdCAqKSZuZXQtPnJvLAorCQkJCQkJCQkJCW5ldCwgMCwgc3RjYi0+YXNvYy52
cmZfaWQpOworI2lmIGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9T
Q09QRSkKKwkJCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikg
eworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KikmbmV0LT5yby5fbF9hZGRyOworI2lmZGVmIFNDVFBfS0FNRQorCQkJCQkodm9pZClzYTZfcmVj
b3ZlcnNjb3BlKHNpbjYpOworI2Vsc2UKKwkJCQkJKHZvaWQpaW42X3JlY292ZXJzY29wZShzaW42
LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZgkvKiBTQ1RQX0tBTUUgKi8KKwkJCQl9
CisjZW5kaWYJLyogSU5FVDYgKi8KKwkJCX0KKwkJCWlmIChuZXQtPnJvLl9zX2FkZHIpCisJCQkJ
bmV0LT5zcmNfYWRkcl9zZWxlY3RlZCA9IDE7CisJCX0KKwkJaWYgKG5ldC0+cm8uX3NfYWRkcikg
eworCQkJbXR1ID0gU0NUUF9HQVRIRVJfTVRVX0ZST01fUk9VVEUobmV0LT5yby5fc19hZGRyLCAm
bmV0LT5yby5fc19hZGRyLnNhLCBuZXQtPnJvLnJvX3J0KTsKKyNpZiBkZWZpbmVkKElORVQpIHx8
IGRlZmluZWQoSU5FVDYpCisJCQlpZiAobmV0LT5wb3J0KSB7CisJCQkJbXR1IC09IHNpemVvZihz
dHJ1Y3QgdWRwaGRyKTsKKwkJCX0KKyNlbmRpZgorCQkJaWYgKG10dSA+IG5leHRfbXR1KSB7CisJ
CQkJbmV0LT5tdHUgPSBuZXh0X210dTsKKwkJCX0gZWxzZSB7CisJCQkJbmV0LT5tdHUgPSBtdHU7
CisJCQl9CisJCX0KKwl9CisJLyogcmVzdGFydCB0aGUgdGltZXIgKi8KKwlzY3RwX3RpbWVyX3N0
YXJ0KFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKK30KKwor
dm9pZAorc2N0cF9hdXRvY2xvc2VfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0KQoreworCXN0
cnVjdCB0aW1ldmFsIHRuLCAqdGltX3RvdXNlOworCXN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICph
c29jOworCWludCB0aWNrc19nb25lX2J5OworCisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
JnRuKTsKKwlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgorCSAgICBzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSB7CisJCS8qIEF1
dG8gY2xvc2UgaXMgb24gKi8KKwkJYXNvYyA9ICZzdGNiLT5hc29jOworCQkvKiBwaWNrIHRoZSB0
aW1lIHRvIHVzZSAqLworCQlpZiAoYXNvYy0+dGltZV9sYXN0X3JjdmQudHZfc2VjID4KKwkJICAg
IGFzb2MtPnRpbWVfbGFzdF9zZW50LnR2X3NlYykgeworCQkJdGltX3RvdXNlID0gJmFzb2MtPnRp
bWVfbGFzdF9yY3ZkOworCQl9IGVsc2UgeworCQkJdGltX3RvdXNlID0gJmFzb2MtPnRpbWVfbGFz
dF9zZW50OworCQl9CisJCS8qIE5vdyBoYXMgbG9uZyBlbm91Z2ggdHJhbnNwaXJlZCB0byBhdXRv
Y2xvc2U/ICovCisJCXRpY2tzX2dvbmVfYnkgPSBTRUNfVE9fVElDS1ModG4udHZfc2VjIC0gdGlt
X3RvdXNlLT50dl9zZWMpOworCQlpZiAoKHRpY2tzX2dvbmVfYnkgPiAwKSAmJgorCQkgICAgKHRp
Y2tzX2dvbmVfYnkgPj0gKGludClhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNrcykpIHsKKwkJCS8q
CisJCQkgKiBhdXRvY2xvc2UgdGltZSBoYXMgaGl0LCBjYWxsIHRoZSBvdXRwdXQgcm91dGluZSwK
KwkJCSAqIHdoaWNoIHNob3VsZCBkbyBub3RoaW5nIGp1c3QgdG8gYmUgU1VSRSB3ZSBkb24ndAor
CQkJICogaGF2ZSBoYW5naW5nIGRhdGEuIFdlIGNhbiB0aGVuIHNhZmVseSBjaGVjayB0aGUKKwkJ
CSAqIHF1ZXVlcyBhbmQga25vdyB0aGF0IHdlIGFyZSBjbGVhciB0byBzZW5kCisJCQkgKiBzaHV0
ZG93bgorCQkJICovCisJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVU
X0ZST01fQVVUT0NMT1NFX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJCS8qIEFyZSB3ZSBj
bGVhbj8gKi8KKwkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJCSAg
ICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VudF9xdWV1ZSkpIHsKKwkJCQkvKgorCQkJCSAqIHRoZXJl
IGlzIG5vdGhpbmcgcXVldWVkIHRvIHNlbmQsIHNvIEknbQorCQkJCSAqIGRvbmUuLi4KKwkJCQkg
Ki8KKwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0gU0NUUF9TVEFURV9TSFVURE9XTl9T
RU5UKSB7CisJCQkJCS8qIG9ubHkgc2VuZCBTSFVURE9XTiAxc3QgdGltZSB0aHJ1ICovCisJCQkJ
CXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7CisKKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29j
KSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykg
PT0gU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJCVNDVFBfU1RBVF9ERUNS
X0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1NFVF9TVEFURShh
c29jLCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRF
KGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCQkJCXNjdHBfc3RvcF90aW1l
cnNfZm9yX3NodXRkb3duKHN0Y2IpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsK
KwkJCQkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJ
CW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJCX0KKwkJCQkJc2N0
cF9zZW5kX3NodXRkb3duKHN0Y2IsIG5ldHApOworCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9TSFVURE9XTiwKKwkJCQkJCQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkJ
CQkgbmV0cCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
R1VBUkQsCisJCQkJCQkJIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJCQkJCQkJIG5ldHApOworCQkJ
CX0KKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBObyBhdXRvIGNsb3NlIGF0IHRoaXMg
dGltZSwgcmVzZXQgdC1vIHRvIGNoZWNrCisJCQkgKiBsYXRlcgorCQkJICovCisJCQlpbnQgdG1w
OworCisJCQkvKiBmb29sIHRoZSB0aW1lciBzdGFydHVwIHRvIHVzZSB0aGUgdGltZSBsZWZ0ICov
CisJCQl0bXAgPSBhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNrczsKKwkJCWFzb2MtPnNjdHBfYXV0
b2Nsb3NlX3RpY2tzIC09IHRpY2tzX2dvbmVfYnk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBf
VElNRVJfVFlQRV9BVVRPQ0xPU0UsIGlucCwgc3RjYiwKKwkJCSAgICBuZXQpOworCQkJLyogcmVz
dG9yZSB0aGUgcmVhbCB0aWNrIHZhbHVlICovCisJCQlhc29jLT5zY3RwX2F1dG9jbG9zZV90aWNr
cyA9IHRtcDsKKwkJfQorCX0KK30KKwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9u
ZXRpbmV0L3NjdHBfdGltZXIuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Rp
bWVyLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uODIy
ZDViNDAwN2JhNmNiYzY2ZmQ3NTg1NjZlM2Q5YzY5N2E3NmM1NiAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdGltZXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF90aW1lci5oCkBAIC0wLDAgKzEsMTA1IEBACisvKi0KKyAqIFNQRFgt
TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIw
MDEtMjAwNywgYnkgQ2lzY28gU3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IFJhbmRhbGwgU3Rld2FydC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBNaWNoYWVsIFR1ZXhlbi4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUg
bWV0OgorICoKKyAqIGEpIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogYikgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogYykgTmVpdGhlciB0aGUg
bmFtZSBvZiBDaXNjbyBTeXN0ZW1zLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRI
RSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiBfX0ZyZWVCU0RfXworI2luY2x1
ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBoZWFkL3N5cy9uZXRpbmV0L3Nj
dHBfdGltZXIuaCAyOTU3MDkgMjAxNi0wMi0xNyAxODowNDoyMlogdHVleGVuICQiKTsKKyNlbmRp
ZgorCisjaWZuZGVmIF9ORVRJTkVUX1NDVFBfVElNRVJfSF8KKyNkZWZpbmUgX05FVElORVRfU0NU
UF9USU1FUl9IXworCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisKKyNkZWZpbmUgU0NUUF9SVFRfU0hJRlQgMworI2RlZmluZSBTQ1RQX1JUVF9WQVJfU0hJ
RlQgMgorCitzdHJ1Y3Qgc2N0cF9uZXRzICoKK3NjdHBfZmluZF9hbHRlcm5hdGVfbmV0KHN0cnVj
dCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgaW50IG1vZGUpOworCitpbnQK
K3NjdHBfdDNyeHRfdGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICos
CisgICAgc3RydWN0IHNjdHBfbmV0cyAqKTsKK2ludAorc2N0cF90MWluaXRfdGltZXIoc3RydWN0
IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfbmV0cyAq
KTsKK2ludAorc2N0cF9zaHV0ZG93bl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qg
c2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworaW50CitzY3RwX2hlYXJ0YmVh
dF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1
Y3Qgc2N0cF9uZXRzICopOworCitpbnQKK3NjdHBfY29va2llX3RpbWVyKHN0cnVjdCBzY3RwX2lu
cGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3Zv
aWQKK3NjdHBfcGF0aG10dV90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90
Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCitpbnQKK3NjdHBfc2h1dGRvd25hY2tf
dGltZXIoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IHNjdHBfdGNiICosCisgICAgc3RydWN0
IHNjdHBfbmV0cyAqKTsKK2ludAorc2N0cF9zdHJyZXNldF90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0
KTsKKworaW50CitzY3RwX2FzY29uZl90aW1lcihzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qg
c2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICopOworCit2b2lkCitzY3RwX2RlbGV0
ZV9wcmltX3RpbWVyKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAg
IHN0cnVjdCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfYXV0b2Nsb3NlX3RpbWVyKHN0cnVj
dCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMg
Km5ldCk7CisKK3ZvaWQgc2N0cF9hdWRpdF9yZXRyYW5taXNzaW9uX3F1ZXVlKHN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICopOworCit2b2lkIHNjdHBfaXRlcmF0b3JfdGltZXIoc3RydWN0IHNjdHBf
aXRlcmF0b3IgKml0KTsKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQ
TEVfTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgfHwgZGVmaW5lZChBUFBM
RV9MSU9OKSB8fCBkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikKK3ZvaWQgc2N0cF9zbG93dGlt
byh2b2lkKTsKKyNlbHNlCit2b2lkIHNjdHBfZ2Moc3RydWN0IGlucGNiaW5mbyAqKTsKKyNlbmRp
ZgorI2VuZGlmCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cF91aW8uaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X3Vpby5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjlk
MzFhYTE1OTBhMDMwYzgxZDAyY2FiYmYwZmNiYjViNmViMDFhMzYgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3Rw
bGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3Vpby5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3Vpby5oCkBAIC0wLDAgKzEsMTQ3MCBAQAorLyotCisgKiBTUERYLUxp
Y2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAx
LTIwMDcsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1l
dDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5h
bWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
Q09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRl
IDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3Rw
X3Vpby5oIDMyNjY3MiAyMDE3LTEyLTA3IDIyOjE5OjA4WiB0dWV4ZW4gJCIpOworI2VuZGlmCisK
KyNpZm5kZWYgX05FVElORVRfU0NUUF9VSU9fSF8KKyNkZWZpbmUgX05FVElORVRfU0NUUF9VSU9f
SF8KKworI2lmIChkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChLRVJORUwpKQorI2lmbmRl
ZiBfS0VSTkVMCisjZGVmaW5lIF9LRVJORUwKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAhKGRlZmlu
ZWQoX19XaW5kb3dzX18pKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lm
ICEgZGVmaW5lZChfS0VSTkVMKQorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGlu
ZXQvaW4uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19XaW5kb3dzX18pCisjcHJhZ21hIHdhcm5p
bmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MjAwKQorI2lmIGRlZmluZWQoX0tF
Uk5FTCkKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjZW5kaWYKKwordHlwZWRlZiB1aW50MzJf
dCBzY3RwX2Fzc29jX3Q7CisKKyNkZWZpbmUgU0NUUF9GVVRVUkVfQVNTT0MgIDAKKyNkZWZpbmUg
U0NUUF9DVVJSRU5UX0FTU09DIDEKKyNkZWZpbmUgU0NUUF9BTExfQVNTT0MgICAgIDIKKworc3Ry
dWN0IHNjdHBfZXZlbnQgeworCXNjdHBfYXNzb2NfdCBzZV9hc3NvY19pZDsKKwl1aW50MTZfdCAg
ICAgc2VfdHlwZTsKKwl1aW50OF90ICAgICAgc2Vfb247Cit9OworCisvKiBDb21wYXRpYmlsaXR5
IHRvIHByZXZpb3VzIGRlZmluZSdzICovCisjZGVmaW5lIHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50
cyBzY3RwX3N0cmVhbV9yZXNldF9ldmVudAorCisvKiBPbi9PZmYgc2V0dXAgZm9yIHN1YnNjcmlw
dGlvbiB0byBldmVudHMgKi8KK3N0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSB7CisJdWludDhf
dCBzY3RwX2RhdGFfaW9fZXZlbnQ7CisJdWludDhfdCBzY3RwX2Fzc29jaWF0aW9uX2V2ZW50Owor
CXVpbnQ4X3Qgc2N0cF9hZGRyZXNzX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9zZW5kX2ZhaWx1cmVf
ZXZlbnQ7CisJdWludDhfdCBzY3RwX3BlZXJfZXJyb3JfZXZlbnQ7CisJdWludDhfdCBzY3RwX3No
dXRkb3duX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OworCXVp
bnQ4X3Qgc2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hdXRoZW50
aWNhdGlvbl9ldmVudDsKKwl1aW50OF90IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKKwl1aW50OF90
IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50OworfTsKKworLyogYW5jaWxsYXJ5IGRhdGEgdHlwZXMg
Ki8KKyNkZWZpbmUgU0NUUF9JTklUCTB4MDAwMQorI2RlZmluZSBTQ1RQX1NORFJDVgkweDAwMDIK
KyNkZWZpbmUgU0NUUF9FWFRSQ1YJMHgwMDAzCisjZGVmaW5lIFNDVFBfU05ESU5GTyAgICAweDAw
MDQKKyNkZWZpbmUgU0NUUF9SQ1ZJTkZPICAgIDB4MDAwNQorI2RlZmluZSBTQ1RQX05YVElORk8g
ICAgMHgwMDA2CisjZGVmaW5lIFNDVFBfUFJJTkZPICAgICAweDAwMDcKKyNkZWZpbmUgU0NUUF9B
VVRISU5GTyAgIDB4MDAwOAorI2RlZmluZSBTQ1RQX0RTVEFERFJWNCAgMHgwMDA5CisjZGVmaW5l
IFNDVFBfRFNUQUREUlY2ICAweDAwMGEKKworLyoKKyAqIGFuY2lsbGFyeSBkYXRhIHN0cnVjdHVy
ZXMKKyAqLworc3RydWN0IHNjdHBfaW5pdG1zZyB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPCA4MDAwMDAKKwkvKiBUaGlzIGlzIGEgYnVnLiBOb3QgZml4
ZWQgZm9yIEFCSSBjb21wYXRpYmlsaXR5ICovCisJdWludDMyX3Qgc2luaXRfbnVtX29zdHJlYW1z
OworCXVpbnQzMl90IHNpbml0X21heF9pbnN0cmVhbXM7CisjZWxzZQorCXVpbnQxNl90IHNpbml0
X251bV9vc3RyZWFtczsKKwl1aW50MTZfdCBzaW5pdF9tYXhfaW5zdHJlYW1zOworI2VuZGlmCisJ
dWludDE2X3Qgc2luaXRfbWF4X2F0dGVtcHRzOworCXVpbnQxNl90IHNpbml0X21heF9pbml0X3Rp
bWVvOworfTsKKworLyogV2UgYWRkIDk2IGJ5dGVzIHRvIHRoZSBzaXplIG9mIHNjdHBfc25kcmN2
aW5mby4KKyAqIFRoaXMgbWFrZXMgdGhlIGN1cnJlbnQgc3RydWN0dXJlIDEyOCBieXRlcyBsb25n
CisgKiB3aGljaCBpcyBuaWNlbHkgNjQgYml0IGFsaWduZWQgYnV0IGFsc28gaGFzIHJvb20KKyAq
IGZvciB1cyB0byBhZGQgbW9yZSBhbmQga2VlcCBBQkkgY29tcGF0aWJpbGl0eS4KKyAqIEZvciBl
eGFtcGxlLCBhbHJlYWR5IHdlIGhhdmUgdGhlIHNjdHBfZXh0cmN2aW5mbworICogd2hlbiBlbmFi
bGVkIHdoaWNoIGlzIDQ4IGJ5dGVzLgorICovCisKKy8qCisgKiBUaGUgYXNzb2MgdXAgbmVlZHMg
YSB2ZXJmaWQKKyAqIGFsbCBzZW5kcmN2aW5mbydzIG5lZWQgYSB2ZXJmaWQgZm9yIFNFTkRJTkcg
b25seS4KKyAqLworCisKKyNkZWZpbmUgU0NUUF9BTElHTl9SRVNWX1BBRCA5MgorI2RlZmluZSBT
Q1RQX0FMSUdOX1JFU1ZfUEFEX1NIT1JUIDc2CisKK3N0cnVjdCBzY3RwX3NuZHJjdmluZm8gewor
CXVpbnQxNl90IHNpbmZvX3N0cmVhbTsKKwl1aW50MTZfdCBzaW5mb19zc247CisJdWludDE2X3Qg
c2luZm9fZmxhZ3M7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPCA4MDAwMDAKKwl1aW50MTZfdCBzaW5mb19wcl9wb2xpY3k7CisjZW5kaWYKKwl1aW50MzJf
dCBzaW5mb19wcGlkOworCXVpbnQzMl90IHNpbmZvX2NvbnRleHQ7CisJdWludDMyX3Qgc2luZm9f
dGltZXRvbGl2ZTsKKwl1aW50MzJfdCBzaW5mb190c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNu
OworCXNjdHBfYXNzb2NfdCBzaW5mb19hc3NvY19pZDsKKwl1aW50MTZfdCBzaW5mb19rZXludW1i
ZXI7CisJdWludDE2X3Qgc2luZm9fa2V5bnVtYmVyX3ZhbGlkOworCXVpbnQ4X3QgIF9fcmVzZXJ2
ZV9wYWRbU0NUUF9BTElHTl9SRVNWX1BBRF07Cit9OworCitzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZv
IHsKKwl1aW50MTZfdCBzaW5mb19zdHJlYW07CisJdWludDE2X3Qgc2luZm9fc3NuOworCXVpbnQx
Nl90IHNpbmZvX2ZsYWdzOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uIDwgODAwMDAwCisJdWludDE2X3Qgc2luZm9fcHJfcG9saWN5OworI2VuZGlmCisJdWlu
dDMyX3Qgc2luZm9fcHBpZDsKKwl1aW50MzJfdCBzaW5mb19jb250ZXh0OworCXVpbnQzMl90IHNp
bmZvX3RpbWV0b2xpdmU7IC8qIHNob3VsZCBoYXZlIGJlZW4gc2luZm9fcHJfdmFsdWUgKi8KKwl1
aW50MzJfdCBzaW5mb190c247CisJdWludDMyX3Qgc2luZm9fY3VtdHNuOworCXNjdHBfYXNzb2Nf
dCBzaW5mb19hc3NvY19pZDsKKwl1aW50MTZfdCBzZXJpbmZvX25leHRfZmxhZ3M7CisJdWludDE2
X3Qgc2VyaW5mb19uZXh0X3N0cmVhbTsKKwl1aW50MzJfdCBzZXJpbmZvX25leHRfYWlkOworCXVp
bnQzMl90IHNlcmluZm9fbmV4dF9sZW5ndGg7CisJdWludDMyX3Qgc2VyaW5mb19uZXh0X3BwaWQ7
CisJdWludDE2X3Qgc2luZm9fa2V5bnVtYmVyOworCXVpbnQxNl90IHNpbmZvX2tleW51bWJlcl92
YWxpZDsKKwl1aW50OF90ICBfX3Jlc2VydmVfcGFkW1NDVFBfQUxJR05fUkVTVl9QQURfU0hPUlRd
OworfTsKKyNkZWZpbmUgc2luZm9fcHJfdmFsdWUgc2luZm9fdGltZXRvbGl2ZQorI2RlZmluZSBz
cmVpbmZvX25leHRfZmxhZ3Mgc2VyaW5mb19uZXh0X2ZsYWdzCisjZGVmaW5lIHNyZWluZm9fbmV4
dF9zdHJlYW0gc2VyaW5mb19uZXh0X3N0cmVhbQorI2RlZmluZSBzcmVpbmZvX25leHRfYWlkIHNl
cmluZm9fbmV4dF9haWQKKyNkZWZpbmUgc3JlaW5mb19uZXh0X2xlbmd0aCBzZXJpbmZvX25leHRf
bGVuZ3RoCisjZGVmaW5lIHNyZWluZm9fbmV4dF9wcGlkIHNlcmluZm9fbmV4dF9wcGlkCisKK3N0
cnVjdCBzY3RwX3NuZGluZm8geworCXVpbnQxNl90IHNuZF9zaWQ7CisJdWludDE2X3Qgc25kX2Zs
YWdzOworCXVpbnQzMl90IHNuZF9wcGlkOworCXVpbnQzMl90IHNuZF9jb250ZXh0OworCXNjdHBf
YXNzb2NfdCBzbmRfYXNzb2NfaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wcmluZm8geworCXVpbnQx
Nl90IHByX3BvbGljeTsKKwl1aW50MzJfdCBwcl92YWx1ZTsKK307CisKK3N0cnVjdCBzY3RwX2Rl
ZmF1bHRfcHJpbmZvIHsKKwl1aW50MTZfdCBwcl9wb2xpY3k7CisJdWludDMyX3QgcHJfdmFsdWU7
CisJc2N0cF9hc3NvY190IHByX2Fzc29jX2lkOworfTsKKworc3RydWN0IHNjdHBfYXV0aGluZm8g
eworCXVpbnQxNl90IGF1dGhfa2V5bnVtYmVyOworfTsKKworc3RydWN0IHNjdHBfcmN2aW5mbyB7
CisJdWludDE2X3QgcmN2X3NpZDsKKwl1aW50MTZfdCByY3Zfc3NuOworCXVpbnQxNl90IHJjdl9m
bGFnczsKKwl1aW50MzJfdCByY3ZfcHBpZDsKKwl1aW50MzJfdCByY3ZfdHNuOworCXVpbnQzMl90
IHJjdl9jdW10c247CisJdWludDMyX3QgcmN2X2NvbnRleHQ7CisJc2N0cF9hc3NvY190IHJjdl9h
c3NvY19pZDsKK307CisKK3N0cnVjdCBzY3RwX254dGluZm8geworCXVpbnQxNl90IG54dF9zaWQ7
CisJdWludDE2X3Qgbnh0X2ZsYWdzOworCXVpbnQzMl90IG54dF9wcGlkOworCXVpbnQzMl90IG54
dF9sZW5ndGg7CisJc2N0cF9hc3NvY190IG54dF9hc3NvY19pZDsKK307CisKKyNkZWZpbmUgU0NU
UF9OT19ORVhUX01TRyAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfQVZB
SUwgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUgICAweDAw
MDIKKyNkZWZpbmUgU0NUUF9ORVhUX01TR19JU19VTk9SREVSRUQgMHgwMDA0CisjZGVmaW5lIFND
VFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OIDB4MDAwOAorCitzdHJ1Y3Qgc2N0cF9yZWN2dl9y
biB7CisJc3RydWN0IHNjdHBfcmN2aW5mbyByZWN2dl9yY3ZpbmZvOworCXN0cnVjdCBzY3RwX254
dGluZm8gcmVjdnZfbnh0aW5mbzsKK307CisKKyNkZWZpbmUgU0NUUF9SRUNWVl9OT0lORk8gIDAK
KyNkZWZpbmUgU0NUUF9SRUNWVl9SQ1ZJTkZPIDEKKyNkZWZpbmUgU0NUUF9SRUNWVl9OWFRJTkZP
IDIKKyNkZWZpbmUgU0NUUF9SRUNWVl9STiAgICAgIDMKKworI2RlZmluZSBTQ1RQX1NFTkRWX05P
SU5GTyAgIDAKKyNkZWZpbmUgU0NUUF9TRU5EVl9TTkRJTkZPICAxCisjZGVmaW5lIFNDVFBfU0VO
RFZfUFJJTkZPICAgMgorI2RlZmluZSBTQ1RQX1NFTkRWX0FVVEhJTkZPIDMKKyNkZWZpbmUgU0NU
UF9TRU5EVl9TUEEgICAgICA0CisKK3N0cnVjdCBzY3RwX3NlbmR2X3NwYSB7CisJdWludDMyX3Qg
c2VuZHZfZmxhZ3M7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzZW5kdl9zbmRpbmZvOworCXN0cnVj
dCBzY3RwX3ByaW5mbyBzZW5kdl9wcmluZm87CisJc3RydWN0IHNjdHBfYXV0aGluZm8gc2VuZHZf
YXV0aGluZm87Cit9OworCisjZGVmaW5lIFNDVFBfU0VORF9TTkRJTkZPX1ZBTElEICAweDAwMDAw
MDAxCisjZGVmaW5lIFNDVFBfU0VORF9QUklORk9fVkFMSUQgICAweDAwMDAwMDAyCisjZGVmaW5l
IFNDVFBfU0VORF9BVVRISU5GT19WQUxJRCAweDAwMDAwMDA0CisKK3N0cnVjdCBzY3RwX3NuZF9h
bGxfY29tcGxldGVzIHsKKwl1aW50MTZfdCBzYWxsX3N0cmVhbTsKKwl1aW50MTZfdCBzYWxsX2Zs
YWdzOworCXVpbnQzMl90IHNhbGxfcHBpZDsKKwl1aW50MzJfdCBzYWxsX2NvbnRleHQ7CisJdWlu
dDMyX3Qgc2FsbF9udW1fc2VudDsKKwl1aW50MzJfdCBzYWxsX251bV9mYWlsZWQ7Cit9OworCisv
KiBGbGFncyB0aGF0IGdvIGludG8gdGhlIHNpbmZvLT5zaW5mb19mbGFncyBmaWVsZCAqLworI2Rl
ZmluZSBTQ1RQX05PVElGSUNBVElPTiAgICAgMHgwMDEwIC8qIG5leHQgbWVzc2FnZSBpcyBhIG5v
dGlmaWNhdGlvbiAqLworI2RlZmluZSBTQ1RQX0NPTVBMRVRFICAgICAgICAgMHgwMDIwIC8qIG5l
eHQgbWVzc2FnZSBpcyBjb21wbGV0ZSAqLworI2RlZmluZSBTQ1RQX0VPRiAgICAgICAgICAgICAg
MHgwMTAwIC8qIFN0YXJ0IHNodXRkb3duIHByb2NlZHVyZXMgKi8KKyNkZWZpbmUgU0NUUF9BQk9S
VCAgICAgICAgICAgIDB4MDIwMCAvKiBTZW5kIGFuIEFCT1JUIHRvIHBlZXIgKi8KKyNkZWZpbmUg
U0NUUF9VTk9SREVSRUQgICAgICAgIDB4MDQwMCAvKiBNZXNzYWdlIGlzIHVuLW9yZGVyZWQgKi8K
KyNkZWZpbmUgU0NUUF9BRERSX09WRVIgICAgICAgIDB4MDgwMCAvKiBPdmVycmlkZSB0aGUgcHJp
bWFyeS1hZGRyZXNzICovCisjZGVmaW5lIFNDVFBfU0VOREFMTCAgICAgICAgICAweDEwMDAgLyog
U2VuZCB0aGlzIG9uIGFsbCBhc3NvY2lhdGlvbnMgKi8KKyNkZWZpbmUgU0NUUF9FT1IgICAgICAg
ICAgICAgIDB4MjAwMCAvKiBlbmQgb2YgbWVzc2FnZSBzaWduYWwgKi8KKyNkZWZpbmUgU0NUUF9T
QUNLX0lNTUVESUFURUxZIDB4NDAwMCAvKiBTZXQgSS1CaXQgKi8KKworI2RlZmluZSBJTlZBTElE
X1NJTkZPX0ZMQUcoeCkgKCgoeCkgJiAweGZmZmZmZmYwIFwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYgfihTQ1RQX0VPRiB8IFNDVFBfQUJPUlQgfCBTQ1RQX1VOT1JERVJF
RCB8XAorCQkJCSAgICAgICAgU0NUUF9BRERSX09WRVIgfCBTQ1RQX1NFTkRBTEwgfCBTQ1RQX0VP
UiB8XAorCQkJCQlTQ1RQX1NBQ0tfSU1NRURJQVRFTFkpKSAhPSAwKQorLyogZm9yIHRoZSBlbmRw
b2ludCAqLworCisvKiBUaGUgbG93ZXIgZm91ciBiaXRzIGlzIGFuIGVudW1lcmF0aW9uIG9mIFBS
LVNDVFAgcG9saWNpZXMgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX05PTkUgMHgwMDAwIC8qIFJl
bGlhYmxlIHRyYW5zZmVyICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9UVEwgIDB4MDAwMSAvKiBU
aW1lIGJhc2VkIFBSLVNDVFAgKi8KKyNkZWZpbmUgU0NUUF9QUl9TQ1RQX1BSSU8gMHgwMDAyIC8q
IEJ1ZmZlciBiYXNlZCBQUi1TQ1RQICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9CVUYgIFNDVFBf
UFJfU0NUUF9QUklPIC8qIEZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZSBT
Q1RQX1BSX1NDVFBfUlRYICAweDAwMDMgLyogTnVtYmVyIG9mIHJldHJhbnNtaXNzaW9ucyBiYXNl
ZCBQUi1TQ1RQICovCisjZGVmaW5lIFNDVFBfUFJfU0NUUF9NQVggIFNDVFBfUFJfU0NUUF9SVFgK
KyNkZWZpbmUgU0NUUF9QUl9TQ1RQX0FMTCAgMHgwMDBmIC8qIFVzZWQgZm9yIGFnZ3JlZ2F0ZWQg
c3RhdHMgKi8KKworI2RlZmluZSBQUl9TQ1RQX1BPTElDWSh4KSAgICAgICAgICgoeCkgJiAweDBm
KQorI2RlZmluZSBQUl9TQ1RQX0VOQUJMRUQoeCkgICAgICAgICgoUFJfU0NUUF9QT0xJQ1koeCkg
IT0gU0NUUF9QUl9TQ1RQX05PTkUpICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKFBSX1NDVFBfUE9MSUNZKHgpICE9IFNDVFBfUFJfU0NUUF9BTEwpKQorI2RlZmluZSBQ
Ul9TQ1RQX1RUTF9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1ND
VFBfVFRMKQorI2RlZmluZSBQUl9TQ1RQX0JVRl9FTkFCTEVEKHgpICAgIChQUl9TQ1RQX1BPTElD
WSh4KSA9PSBTQ1RQX1BSX1NDVFBfQlVGKQorI2RlZmluZSBQUl9TQ1RQX1JUWF9FTkFCTEVEKHgp
ICAgIChQUl9TQ1RQX1BPTElDWSh4KSA9PSBTQ1RQX1BSX1NDVFBfUlRYKQorI2RlZmluZSBQUl9T
Q1RQX0lOVkFMSURfUE9MSUNZKHgpIChQUl9TQ1RQX1BPTElDWSh4KSA+IFNDVFBfUFJfU0NUUF9N
QVgpCisjZGVmaW5lIFBSX1NDVFBfVkFMSURfUE9MSUNZKHgpICAgKFBSX1NDVFBfUE9MSUNZKHgp
IDw9IFNDVFBfUFJfU0NUUF9NQVgpCisKKy8qIFN0YXQncyAqLworc3RydWN0IHNjdHBfcGNiaW5m
byB7CisJdWludDMyX3QgZXBfY291bnQ7CisJdWludDMyX3QgYXNvY19jb3VudDsKKwl1aW50MzJf
dCBsYWRkcl9jb3VudDsKKwl1aW50MzJfdCByYWRkcl9jb3VudDsKKwl1aW50MzJfdCBjaGtfY291
bnQ7CisJdWludDMyX3QgcmVhZHFfY291bnQ7CisJdWludDMyX3QgZnJlZV9jaHVua3M7CisJdWlu
dDMyX3Qgc3RyZWFtX29xdWU7Cit9OworCitzdHJ1Y3Qgc2N0cF9zb2Nrc3RhdCB7CisJc2N0cF9h
c3NvY190IHNzX2Fzc29jX2lkOworCXVpbnQzMl90IHNzX3RvdGFsX3NuZGJ1ZjsKKwl1aW50MzJf
dCBzc190b3RhbF9yZWN2X2J1ZjsKK307CisKKy8qCisgKiBub3RpZmljYXRpb24gZXZlbnQgc3Ry
dWN0dXJlcworICovCisKKy8qCisgKiBhc3NvY2lhdGlvbiBjaGFuZ2UgZXZlbnQKKyAqLworc3Ry
dWN0IHNjdHBfYXNzb2NfY2hhbmdlIHsKKwl1aW50MTZfdCBzYWNfdHlwZTsKKwl1aW50MTZfdCBz
YWNfZmxhZ3M7CisJdWludDMyX3Qgc2FjX2xlbmd0aDsKKwl1aW50MTZfdCBzYWNfc3RhdGU7CisJ
dWludDE2X3Qgc2FjX2Vycm9yOworCXVpbnQxNl90IHNhY19vdXRib3VuZF9zdHJlYW1zOworCXVp
bnQxNl90IHNhY19pbmJvdW5kX3N0cmVhbXM7CisJc2N0cF9hc3NvY190IHNhY19hc3NvY19pZDsK
Kwl1aW50OF90IHNhY19pbmZvW107Cit9OworCisvKiBzYWNfc3RhdGUgdmFsdWVzICovCisjZGVm
aW5lIFNDVFBfQ09NTV9VUCAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0NPTU1fTE9T
VCAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9SRVNUQVJUICAgICAgICAgICAgMHgwMDAz
CisjZGVmaW5lIFNDVFBfU0hVVERPV05fQ09NUCAgICAgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0NB
TlRfU1RSX0FTU09DICAgICAweDAwMDUKKworLyogc2FjX2luZm8gdmFsdWVzICovCisjZGVmaW5l
IFNDVFBfQVNTT0NfU1VQUE9SVFNfUFIJCQkweDAxCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9S
VFNfQVVUSAkJMHgwMgorI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORgkJMHgwMwor
I2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX01VTFRJQlVGCQkweDA0CisjZGVmaW5lIFNDVFBf
QVNTT0NfU1VQUE9SVFNfUkVfQ09ORklHCQkweDA1CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9S
VFNfSU5URVJMRUFWSU5HCTB4MDYKKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NQVgJCQkw
eDA2CisvKgorICogQWRkcmVzcyBldmVudAorICovCitzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2Ug
eworCXVpbnQxNl90IHNwY190eXBlOworCXVpbnQxNl90IHNwY19mbGFnczsKKwl1aW50MzJfdCBz
cGNfbGVuZ3RoOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwY19hYWRkcjsKKwl1aW50MzJf
dCBzcGNfc3RhdGU7CisJdWludDMyX3Qgc3BjX2Vycm9yOworCXNjdHBfYXNzb2NfdCBzcGNfYXNz
b2NfaWQ7Cit9OworCisvKiBwYWRkciBzdGF0ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BRERS
X0FWQUlMQUJMRQkweDAwMDEKKyNkZWZpbmUgU0NUUF9BRERSX1VOUkVBQ0hBQkxFCTB4MDAwMgor
I2RlZmluZSBTQ1RQX0FERFJfUkVNT1ZFRAkweDAwMDMKKyNkZWZpbmUgU0NUUF9BRERSX0FEREVE
CQkweDAwMDQKKyNkZWZpbmUgU0NUUF9BRERSX01BREVfUFJJTQkweDAwMDUKKyNkZWZpbmUgU0NU
UF9BRERSX0NPTkZJUk1FRAkweDAwMDYKKworI2RlZmluZSBTQ1RQX0FDVElWRQkJMHgwMDAxCS8q
IFNDVFBfQUREUl9SRUFDSEFCTEUgKi8KKyNkZWZpbmUgU0NUUF9JTkFDVElWRQkJMHgwMDAyCS8q
IG5laXRoZXIgU0NUUF9BRERSX1JFQUNIQUJMRQorCQkJCQkgICBub3IgU0NUUF9BRERSX1VOQ09O
RklSTUVEICovCisjZGVmaW5lIFNDVFBfVU5DT05GSVJNRUQJMHgwMjAwCS8qIFNDVFBfQUREUl9V
TkNPTkZJUk1FRCAqLworCisvKiByZW1vdGUgZXJyb3IgZXZlbnRzICovCitzdHJ1Y3Qgc2N0cF9y
ZW1vdGVfZXJyb3IgeworCXVpbnQxNl90IHNyZV90eXBlOworCXVpbnQxNl90IHNyZV9mbGFnczsK
Kwl1aW50MzJfdCBzcmVfbGVuZ3RoOworCXVpbnQxNl90IHNyZV9lcnJvcjsKKwlzY3RwX2Fzc29j
X3Qgc3JlX2Fzc29jX2lkOworCXVpbnQ4X3Qgc3JlX2RhdGFbXTsKK307CisKKy8qIGRhdGEgc2Vu
ZCBmYWlsdXJlIGV2ZW50IChkZXByZWNhdGVkKSAqLworc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQg
eworCXVpbnQxNl90IHNzZl90eXBlOworCXVpbnQxNl90IHNzZl9mbGFnczsKKwl1aW50MzJfdCBz
c2ZfbGVuZ3RoOworCXVpbnQzMl90IHNzZl9lcnJvcjsKKwlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZv
IHNzZl9pbmZvOworCXNjdHBfYXNzb2NfdCBzc2ZfYXNzb2NfaWQ7CisJdWludDhfdCBzc2ZfZGF0
YVtdOworfTsKKworLyogZGF0YSBzZW5kIGZhaWx1cmUgZXZlbnQgKG5vdCBkZXByZWNhdGVkKSAq
Lworc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgeworCXVpbnQxNl90IHNzZmVfdHlwZTsK
Kwl1aW50MTZfdCBzc2ZlX2ZsYWdzOworCXVpbnQzMl90IHNzZmVfbGVuZ3RoOworCXVpbnQzMl90
IHNzZmVfZXJyb3I7CisJc3RydWN0IHNjdHBfc25kaW5mbyBzc2ZlX2luZm87CisJc2N0cF9hc3Nv
Y190IHNzZmVfYXNzb2NfaWQ7CisJdWludDhfdCAgc3NmZV9kYXRhW107Cit9OworCisvKiBmbGFn
IHRoYXQgaW5kaWNhdGVzIHN0YXRlIG9mIGRhdGEgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX1VOU0VO
VAkweDAwMDEJLyogaW5xdWV1ZSBuZXZlciBvbiB3aXJlICovCisjZGVmaW5lIFNDVFBfREFUQV9T
RU5UCQkweDAwMDIJLyogb24gd2lyZSBhdCBmYWlsdXJlICovCisKKy8qIHNodXRkb3duIGV2ZW50
ICovCitzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCB7CisJdWludDE2X3Qgc3NlX3R5cGU7CisJ
dWludDE2X3Qgc3NlX2ZsYWdzOworCXVpbnQzMl90IHNzZV9sZW5ndGg7CisJc2N0cF9hc3NvY190
IHNzZV9hc3NvY19pZDsKK307CisKKy8qIEFkYXB0YXRpb24gbGF5ZXIgaW5kaWNhdGlvbiBzdHVm
ZiAqLworc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCB7CisJdWludDE2X3Qgc2FpX3R5cGU7
CisJdWludDE2X3Qgc2FpX2ZsYWdzOworCXVpbnQzMl90IHNhaV9sZW5ndGg7CisJdWludDMyX3Qg
c2FpX2FkYXB0YXRpb25faW5kOworCXNjdHBfYXNzb2NfdCBzYWlfYXNzb2NfaWQ7Cit9OworCitz
dHJ1Y3Qgc2N0cF9zZXRhZGFwdGF0aW9uIHsKKwl1aW50MzJfdCBzc2JfYWRhcHRhdGlvbl9pbmQ7
Cit9OworCisvKiBjb21wYXRpYmxlIG9sZCBzcGVsbGluZyAqLworc3RydWN0IHNjdHBfYWRhcHRp
b25fZXZlbnQgeworCXVpbnQxNl90IHNhaV90eXBlOworCXVpbnQxNl90IHNhaV9mbGFnczsKKwl1
aW50MzJfdCBzYWlfbGVuZ3RoOworCXVpbnQzMl90IHNhaV9hZGFwdGlvbl9pbmQ7CisJc2N0cF9h
c3NvY190IHNhaV9hc3NvY19pZDsKK307CisKK3N0cnVjdCBzY3RwX3NldGFkYXB0aW9uIHsKKwl1
aW50MzJfdCBzc2JfYWRhcHRpb25faW5kOworfTsKKworCisvKgorICogUGFydGlhbCBEZWxpdmVy
eSBBUEkgZXZlbnQKKyAqLworc3RydWN0IHNjdHBfcGRhcGlfZXZlbnQgeworCXVpbnQxNl90IHBk
YXBpX3R5cGU7CisJdWludDE2X3QgcGRhcGlfZmxhZ3M7CisJdWludDMyX3QgcGRhcGlfbGVuZ3Ro
OworCXVpbnQzMl90IHBkYXBpX2luZGljYXRpb247CisJdWludDE2X3QgcGRhcGlfc3RyZWFtOwor
CXVpbnQxNl90IHBkYXBpX3NlcTsKKwlzY3RwX2Fzc29jX3QgcGRhcGlfYXNzb2NfaWQ7Cit9Owor
CisvKiBpbmRpY2F0aW9uIHZhbHVlcyAqLworI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllf
QUJPUlRFRAkweDAwMDEKKworCisvKgorICogYXV0aGVudGljYXRpb24ga2V5IGV2ZW50CisgKi8K
K3N0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgeworCXVpbnQxNl90IGF1dGhfdHlwZTsKKwl1aW50
MTZfdCBhdXRoX2ZsYWdzOworCXVpbnQzMl90IGF1dGhfbGVuZ3RoOworCXVpbnQxNl90IGF1dGhf
a2V5bnVtYmVyOworCXVpbnQxNl90IGF1dGhfYWx0a2V5bnVtYmVyOworCXVpbnQzMl90IGF1dGhf
aW5kaWNhdGlvbjsKKwlzY3RwX2Fzc29jX3QgYXV0aF9hc3NvY19pZDsKK307CisKKy8qIGluZGlj
YXRpb24gdmFsdWVzICovCisjZGVmaW5lIFNDVFBfQVVUSF9ORVdfS0VZCTB4MDAwMQorI2RlZmlu
ZSBTQ1RQX0FVVEhfTkVXS0VZCVNDVFBfQVVUSF9ORVdfS0VZCisjZGVmaW5lIFNDVFBfQVVUSF9O
T19BVVRICTB4MDAwMgorI2RlZmluZSBTQ1RQX0FVVEhfRlJFRV9LRVkJMHgwMDAzCisKKworc3Ry
dWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCB7CisJdWludDE2X3Qgc2VuZGVyX2RyeV90eXBlOwor
CXVpbnQxNl90IHNlbmRlcl9kcnlfZmxhZ3M7CisJdWludDMyX3Qgc2VuZGVyX2RyeV9sZW5ndGg7
CisJc2N0cF9hc3NvY190IHNlbmRlcl9kcnlfYXNzb2NfaWQ7Cit9OworCisKKy8qCisgKiBTdHJl
YW0gcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQKKyAq
Lworc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50IHsKKwl1aW50MTZfdCBzdHJyZXNldF90
eXBlOworCXVpbnQxNl90IHN0cnJlc2V0X2ZsYWdzOworCXVpbnQzMl90IHN0cnJlc2V0X2xlbmd0
aDsKKwlzY3RwX2Fzc29jX3Qgc3RycmVzZXRfYXNzb2NfaWQ7CisJdWludDE2X3Qgc3RycmVzZXRf
c3RyZWFtX2xpc3RbXTsKK307CisKKy8qIGZsYWdzIGluIHN0cmVhbV9yZXNldF9ldmVudCAoc3Ry
cmVzZXRfZmxhZ3MpICovCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0lOQ09NSU5HX1NTTiAg
MHgwMDAxCisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTiAgMHgwMDAyCisj
ZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0RFTklFRCAgICAgICAgMHgwMDA0CisjZGVmaW5lIFND
VFBfU1RSRUFNX1JFU0VUX0ZBSUxFRCAgICAgICAgMHgwMDA4CisKKy8qCisgKiBBc3NvYyByZXNl
dCBldmVudCAtIHN1YnNjcmliZSB0byBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UCisgKi8KK3N0cnVj
dCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50IHsKKwl1aW50MTZfdCAJYXNzb2NyZXNldF90eXBlOwor
CXVpbnQxNl90CWFzc29jcmVzZXRfZmxhZ3M7CisJdWludDMyX3QJYXNzb2NyZXNldF9sZW5ndGg7
CisJc2N0cF9hc3NvY190CWFzc29jcmVzZXRfYXNzb2NfaWQ7CisJdWludDMyX3QJYXNzb2NyZXNl
dF9sb2NhbF90c247CisJdWludDMyX3QJYXNzb2NyZXNldF9yZW1vdGVfdHNuOworfTsKKworI2Rl
ZmluZSBTQ1RQX0FTU09DX1JFU0VUX0RFTklFRAkJMHgwMDA0CisjZGVmaW5lIFNDVFBfQVNTT0Nf
UkVTRVRfRkFJTEVECQkweDAwMDgKKworLyoKKyAqIFN0cmVhbSBjaGFuZ2UgZXZlbnQgLSBzdWJz
Y3JpYmUgdG8gU0NUUF9TVFJFQU1fQ0hBTkdFX0VWRU5UCisgKi8KK3N0cnVjdCBzY3RwX3N0cmVh
bV9jaGFuZ2VfZXZlbnQgeworCXVpbnQxNl90CXN0cmNoYW5nZV90eXBlOworCXVpbnQxNl90CXN0
cmNoYW5nZV9mbGFnczsKKwl1aW50MzJfdAlzdHJjaGFuZ2VfbGVuZ3RoOworCXNjdHBfYXNzb2Nf
dAlzdHJjaGFuZ2VfYXNzb2NfaWQ7CisJdWludDE2X3QJc3RyY2hhbmdlX2luc3RybXM7CisJdWlu
dDE2X3QJc3RyY2hhbmdlX291dHN0cm1zOworfTsKKworI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFO
R0VfREVOSUVECTB4MDAwNAorI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0VfRkFJTEVECTB4MDAw
OAorCisKKy8qIFNDVFAgbm90aWZpY2F0aW9uIGV2ZW50ICovCitzdHJ1Y3Qgc2N0cF90bHYgewor
CXVpbnQxNl90IHNuX3R5cGU7CisJdWludDE2X3Qgc25fZmxhZ3M7CisJdWludDMyX3Qgc25fbGVu
Z3RoOworfTsKKwordW5pb24gc2N0cF9ub3RpZmljYXRpb24geworCXN0cnVjdCBzY3RwX3RsdiBz
bl9oZWFkZXI7CisJc3RydWN0IHNjdHBfYXNzb2NfY2hhbmdlIHNuX2Fzc29jX2NoYW5nZTsKKwlz
dHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2Ugc25fcGFkZHJfY2hhbmdlOworCXN0cnVjdCBzY3RwX3Jl
bW90ZV9lcnJvciBzbl9yZW1vdGVfZXJyb3I7CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgc25f
c2VuZF9mYWlsZWQ7CisJc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgc25fc2h1dGRvd25fZXZl
bnQ7CisJc3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCBzbl9hZGFwdGF0aW9uX2V2ZW50Owor
CS8qIGNvbXBhdGliaWxpdHkgc2FtZSBhcyBhYm92ZSAqLworCXN0cnVjdCBzY3RwX2FkYXB0aW9u
X2V2ZW50IHNuX2FkYXB0aW9uX2V2ZW50OworCXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHNuX3Bk
YXBpX2V2ZW50OworCXN0cnVjdCBzY3RwX2F1dGhrZXlfZXZlbnQgc25fYXV0aF9ldmVudDsKKwlz
dHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50IHNuX3NlbmRlcl9kcnlfZXZlbnQ7CisJc3RydWN0
IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQgc25fc2VuZF9mYWlsZWRfZXZlbnQ7CisJc3RydWN0IHNj
dHBfc3RyZWFtX3Jlc2V0X2V2ZW50IHNuX3N0cnJlc2V0X2V2ZW50OworCXN0cnVjdCBzY3RwX2Fz
c29jX3Jlc2V0X2V2ZW50ICBzbl9hc3NvY3Jlc2V0X2V2ZW50OworCXN0cnVjdCBzY3RwX3N0cmVh
bV9jaGFuZ2VfZXZlbnQgc25fc3RyY2hhbmdlX2V2ZW50OworfTsKKworLyogbm90aWZpY2F0aW9u
IHR5cGVzICovCisjZGVmaW5lIFNDVFBfQVNTT0NfQ0hBTkdFICAgICAgICAgICAgICAgICAgICAg
ICAweDAwMDEKKyNkZWZpbmUgU0NUUF9QRUVSX0FERFJfQ0hBTkdFICAgICAgICAgICAgICAgICAg
IDB4MDAwMgorI2RlZmluZSBTQ1RQX1JFTU9URV9FUlJPUiAgICAgICAgICAgICAgICAgICAgICAg
MHgwMDAzCisjZGVmaW5lIFNDVFBfU0VORF9GQUlMRUQgICAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDQKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9FVkVOVCAgICAgICAgICAgICAgICAgICAgIDB4
MDAwNQorI2RlZmluZSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElPTiAgICAgICAgICAgICAgMHgw
MDA2CisvKiBzYW1lIGFzIGFib3ZlICovCisjZGVmaW5lIFNDVFBfQURBUFRJT05fSU5ESUNBVElP
TiAgICAgICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VW
RU5UICAgICAgICAgICAgIDB4MDAwNworI2RlZmluZSBTQ1RQX0FVVEhFTlRJQ0FUSU9OX0VWRU5U
ICAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5lIFNDVFBfU1RSRUFNX1JFU0VUX0VWRU5UICAg
ICAgICAgICAgICAgICAweDAwMDkKKyNkZWZpbmUgU0NUUF9TRU5ERVJfRFJZX0VWRU5UICAgICAg
ICAgICAgICAgICAgIDB4MDAwYQorI2RlZmluZSBTQ1RQX05PVElGSUNBVElPTlNfU1RPUFBFRF9F
VkVOVCAgICAgICAgMHgwMDBiIC8qIHdlIGRvbid0IHNlbmQgdGhpcyovCisjZGVmaW5lIFNDVFBf
QVNTT0NfUkVTRVRfRVZFTlQgICAgICAgICAgICAgICAgICAweDAwMGMKKyNkZWZpbmUgU0NUUF9T
VFJFQU1fQ0hBTkdFX0VWRU5UICAgICAgICAgICAgICAgIDB4MDAwZAorI2RlZmluZSBTQ1RQX1NF
TkRfRkFJTEVEX0VWRU5UICAgICAgICAgICAgICAgICAgMHgwMDBlCisvKgorICogc29ja2V0IG9w
dGlvbiBzdHJ1Y3RzCisgKi8KKworc3RydWN0IHNjdHBfcGFkZHJwYXJhbXMgeworCXN0cnVjdCBz
b2NrYWRkcl9zdG9yYWdlIHNwcF9hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBzcHBfYXNzb2NfaWQ7
CisJdWludDMyX3Qgc3BwX2hiaW50ZXJ2YWw7CisJdWludDMyX3Qgc3BwX3BhdGhtdHU7CisJdWlu
dDMyX3Qgc3BwX2ZsYWdzOworCXVpbnQzMl90IHNwcF9pcHY2X2Zsb3dsYWJlbDsKKwl1aW50MTZf
dCBzcHBfcGF0aG1heHJ4dDsKKwl1aW50OF90IHNwcF9kc2NwOworfTsKKyNkZWZpbmUgc3BwX2lw
djRfdG9zIHNwcF9kc2NwCisKKyNkZWZpbmUgU1BQX0hCX0VOQUJMRQkJMHgwMDAwMDAwMQorI2Rl
ZmluZSBTUFBfSEJfRElTQUJMRQkJMHgwMDAwMDAwMgorI2RlZmluZSBTUFBfSEJfREVNQU5ECQkw
eDAwMDAwMDA0CisjZGVmaW5lIFNQUF9QTVRVRF9FTkFCTEUJMHgwMDAwMDAwOAorI2RlZmluZSBT
UFBfUE1UVURfRElTQUJMRQkweDAwMDAwMDEwCisjZGVmaW5lIFNQUF9IQl9USU1FX0lTX1pFUk8g
ICAgIDB4MDAwMDAwODAKKyNkZWZpbmUgU1BQX0lQVjZfRkxPV0xBQkVMICAgICAgMHgwMDAwMDEw
MAorI2RlZmluZSBTUFBfRFNDUCAgICAgICAgICAgICAgICAweDAwMDAwMjAwCisjZGVmaW5lIFNQ
UF9JUFY0X1RPUyAgICAgICAgICAgIFNQUF9EU0NQCisKK3N0cnVjdCBzY3RwX3BhZGRydGhsZHMg
eworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwdF9hZGRyZXNzOworCXNjdHBfYXNzb2NfdCBz
cHRfYXNzb2NfaWQ7CisJdWludDE2X3Qgc3B0X3BhdGhtYXhyeHQ7CisJdWludDE2X3Qgc3B0X3Bh
dGhwZnRobGQ7CisJdWludDE2X3Qgc3B0X3BhdGhjcHRobGQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9w
YWRkcmluZm8geworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNwaW5mb19hZGRyZXNzOworCXNj
dHBfYXNzb2NfdCBzcGluZm9fYXNzb2NfaWQ7CisJaW50MzJfdCBzcGluZm9fc3RhdGU7CisJdWlu
dDMyX3Qgc3BpbmZvX2N3bmQ7CisJdWludDMyX3Qgc3BpbmZvX3NydHQ7CisJdWludDMyX3Qgc3Bp
bmZvX3J0bzsKKwl1aW50MzJfdCBzcGluZm9fbXR1OworfTsKKworc3RydWN0IHNjdHBfcnRvaW5m
byB7CisJc2N0cF9hc3NvY190IHNydG9fYXNzb2NfaWQ7CisJdWludDMyX3Qgc3J0b19pbml0aWFs
OworCXVpbnQzMl90IHNydG9fbWF4OworCXVpbnQzMl90IHNydG9fbWluOworfTsKKworc3RydWN0
IHNjdHBfYXNzb2NwYXJhbXMgeworCXNjdHBfYXNzb2NfdCBzYXNvY19hc3NvY19pZDsKKwl1aW50
MzJfdCBzYXNvY19wZWVyX3J3bmQ7CisJdWludDMyX3Qgc2Fzb2NfbG9jYWxfcnduZDsKKwl1aW50
MzJfdCBzYXNvY19jb29raWVfbGlmZTsKKwl1aW50MTZfdCBzYXNvY19hc29jbWF4cnh0OworCXVp
bnQxNl90IHNhc29jX251bWJlcl9wZWVyX2Rlc3RpbmF0aW9uczsKK307CisKK3N0cnVjdCBzY3Rw
X3NldHByaW0geworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNzcF9hZGRyOworCXNjdHBfYXNz
b2NfdCBzc3BfYXNzb2NfaWQ7CisJdWludDhfdCBzc3BfcGFkZGluZ1s0XTsKK307CisKK3N0cnVj
dCBzY3RwX3NldHBlZXJwcmltIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzc3BwX2FkZHI7
CisJc2N0cF9hc3NvY190IHNzcHBfYXNzb2NfaWQ7CisJdWludDhfdCBzc3BwX3BhZGRpbmdbNF07
Cit9OworCitzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgeworCXNjdHBfYXNzb2NfdCBzZ2V0X2Fz
c29jX2lkOworCS8qIGFkZHIgaXMgZmlsbGVkIGluIGZvciBOICogc29ja2FkZHJfc3RvcmFnZSAq
LworCXN0cnVjdCBzb2NrYWRkciBhZGRyWzFdOworfTsKKworc3RydWN0IHNjdHBfc3RhdHVzIHsK
KwlzY3RwX2Fzc29jX3Qgc3N0YXRfYXNzb2NfaWQ7CisJaW50MzJfdCBzc3RhdF9zdGF0ZTsKKwl1
aW50MzJfdCBzc3RhdF9yd25kOworCXVpbnQxNl90IHNzdGF0X3VuYWNrZGF0YTsKKwl1aW50MTZf
dCBzc3RhdF9wZW5kZGF0YTsKKwl1aW50MTZfdCBzc3RhdF9pbnN0cm1zOworCXVpbnQxNl90IHNz
dGF0X291dHN0cm1zOworCXVpbnQzMl90IHNzdGF0X2ZyYWdtZW50YXRpb25fcG9pbnQ7CisJc3Ry
dWN0IHNjdHBfcGFkZHJpbmZvIHNzdGF0X3ByaW1hcnk7Cit9OworCisvKgorICogQVVUSEVOVElD
QVRJT04gc3VwcG9ydAorICovCisvKiBTQ1RQX0FVVEhfQ0hVTksgKi8KK3N0cnVjdCBzY3RwX2F1
dGhjaHVuayB7CisJdWludDhfdCBzYXV0aF9jaHVuazsKK307CisKKy8qIFNDVFBfQVVUSF9LRVkg
Ki8KK3N0cnVjdCBzY3RwX2F1dGhrZXkgeworCXNjdHBfYXNzb2NfdCBzY2FfYXNzb2NfaWQ7CisJ
dWludDE2X3Qgc2NhX2tleW51bWJlcjsKKwl1aW50MTZfdCBzY2Ffa2V5bGVuZ3RoOworCXVpbnQ4
X3Qgc2NhX2tleVtdOworfTsKKworLyogU0NUUF9ITUFDX0lERU5UICovCitzdHJ1Y3Qgc2N0cF9o
bWFjYWxnbyB7CisJdWludDMyX3Qgc2htYWNfbnVtYmVyX29mX2lkZW50czsKKwl1aW50MTZfdCBz
aG1hY19pZGVudHNbXTsKK307CisKKy8qIEFVVEggaG1hY19pZCAqLworI2RlZmluZSBTQ1RQX0FV
VEhfSE1BQ19JRF9SU1ZECQkweDAwMDAKKyNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMQkJ
MHgwMDAxCS8qIGRlZmF1bHQsIG1hbmRhdG9yeSAqLworI2RlZmluZSBTQ1RQX0FVVEhfSE1BQ19J
RF9TSEEyNTYJMHgwMDAzCisKKy8qIFNDVFBfQVVUSF9BQ1RJVkVfS0VZIC8gU0NUUF9BVVRIX0RF
TEVURV9LRVkgKi8KK3N0cnVjdCBzY3RwX2F1dGhrZXlpZCB7CisJc2N0cF9hc3NvY190IHNjYWN0
X2Fzc29jX2lkOworCXVpbnQxNl90IHNjYWN0X2tleW51bWJlcjsKK307CisKKy8qIFNDVFBfUEVF
Ul9BVVRIX0NIVU5LUyAvIFNDVFBfTE9DQUxfQVVUSF9DSFVOS1MgKi8KK3N0cnVjdCBzY3RwX2F1
dGhjaHVua3MgeworCXNjdHBfYXNzb2NfdCBnYXV0aF9hc3NvY19pZDsKKwl1aW50MzJfdCBnYXV0
aF9udW1iZXJfb2ZfY2h1bmtzOworCXVpbnQ4X3QgZ2F1dGhfY2h1bmtzW107Cit9OworCitzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSB7CisJc2N0cF9hc3NvY190IGFzc29jX2lkOworCXVpbnQzMl90
IGFzc29jX3ZhbHVlOworfTsKKworc3RydWN0IHNjdHBfY2Nfb3B0aW9uIHsKKwlpbnQgb3B0aW9u
OworCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIGFpZF92YWx1ZTsKK307CisKK3N0cnVjdCBzY3Rw
X3N0cmVhbV92YWx1ZSB7CisJc2N0cF9hc3NvY190IGFzc29jX2lkOworCXVpbnQxNl90IHN0cmVh
bV9pZDsKKwl1aW50MTZfdCBzdHJlYW1fdmFsdWU7Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY19p
ZHMgeworCXVpbnQzMl90IGdhaWRzX251bWJlcl9vZl9pZHM7CisJc2N0cF9hc3NvY190IGdhaWRz
X2Fzc29jX2lkW107Cit9OworCitzdHJ1Y3Qgc2N0cF9zYWNrX2luZm8geworCXNjdHBfYXNzb2Nf
dCBzYWNrX2Fzc29jX2lkOworCXVpbnQzMl90IHNhY2tfZGVsYXk7CisJdWludDMyX3Qgc2Fja19m
cmVxOworfTsKKworc3RydWN0IHNjdHBfdGltZW91dHMgeworCXNjdHBfYXNzb2NfdCBzdGltb19h
c3NvY19pZDsKKwl1aW50MzJfdCBzdGltb19pbml0OworCXVpbnQzMl90IHN0aW1vX2RhdGE7CisJ
dWludDMyX3Qgc3RpbW9fc2FjazsKKwl1aW50MzJfdCBzdGltb19zaHV0ZG93bjsKKwl1aW50MzJf
dCBzdGltb19oZWFydGJlYXQ7CisJdWludDMyX3Qgc3RpbW9fY29va2llOworCXVpbnQzMl90IHN0
aW1vX3NodXRkb3duYWNrOworfTsKKworc3RydWN0IHNjdHBfdWRwZW5jYXBzIHsKKwlzdHJ1Y3Qg
c29ja2FkZHJfc3RvcmFnZSBzdWVfYWRkcmVzczsKKwlzY3RwX2Fzc29jX3Qgc3VlX2Fzc29jX2lk
OworCXVpbnQxNl90IHN1ZV9wb3J0OworfTsKKworc3RydWN0IHNjdHBfcHJzdGF0dXMgeworCXNj
dHBfYXNzb2NfdCBzcHJzdGF0X2Fzc29jX2lkOworCXVpbnQxNl90IHNwcnN0YXRfc2lkOworCXVp
bnQxNl90IHNwcnN0YXRfcG9saWN5OworCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3Vuc2Vu
dDsKKwl1aW50NjRfdCBzcHJzdGF0X2FiYW5kb25lZF9zZW50OworfTsKKworc3RydWN0IHNjdHBf
Y3duZF9hcmdzIHsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CS8qIG5ldHdvcmsgdG8gKi8gLyog
RklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBjd25kX25ld192YWx1ZTsvKiBjd25kIGlu
IGsgKi8KKwl1aW50MzJfdCBwc2V1ZG9fY3VtYWNrOworCXVpbnQxNl90IGluZmxpZ2h0OwkvKiBm
bGlnaHRzaXplIGluIGsgKi8KKwl1aW50MTZfdCBjd25kX2F1Z21lbnQ7CS8qIGluY3JlbWVudCB0
byBpdCAqLworCXVpbnQ4X3QgbWVldHNfcHNldWRvX2N1bWFjazsKKwl1aW50OF90IG5lZWRfbmV3
X3BzZXVkb19jdW1hY2s7CisJdWludDhfdCBjbnRfaW5fc2VuZDsKKwl1aW50OF90IGNudF9pbl9z
dHI7Cit9OworCitzdHJ1Y3Qgc2N0cF9ibGtfYXJncyB7CisJdWludDMyX3Qgb25zYjsJCS8qIGlu
IDFrIGJ5dGVzICovCisJdWludDMyX3Qgc25kbGVuOwkvKiBsZW4gb2Ygc2VuZCBiZWluZyBhdHRl
bXB0ZWQgKi8KKwl1aW50MzJfdCBwZWVyX3J3bmQ7CS8qIHJ3bmQgb2YgcGVlciAqLworCXVpbnQx
Nl90IHNlbmRfc2VudF9xY250Oy8qIGNobmsgY250ICovCisJdWludDE2X3Qgc3RyZWFtX3FjbnQ7
CS8qIGNobmsgY250ICovCisJdWludDE2X3QgY2h1bmtzX29uX29xdWU7LyogY2h1bmtzIG91dCAq
LworCXVpbnQxNl90IGZsaWdodF9zaXplOyAgIC8qIGZsaWdodCBzaXplIGluIGsgKi8KK307CisK
Ky8qCisgKiBNYXggd2UgY2FuIHJlc2V0IGluIG9uZSBzZXR0aW5nLCBub3RlIHRoaXMgaXMgZGlj
dGF0ZWQgbm90IGJ5IHRoZSBkZWZpbmUKKyAqIGJ1dCB0aGUgc2l6ZSBvZiBhIG1idWYgY2x1c3Rl
ciBzbyBkb24ndCBjaGFuZ2UgdGhpcyBkZWZpbmUgYW5kIHRoaW5rIHlvdQorICogY2FuIHNwZWNp
ZnkgbW9yZS4gWW91IG11c3QgZG8gbXVsdGlwbGUgcmVzZXRzIGlmIHlvdSB3YW50IHRvIHJlc2V0
IG1vcmUKKyAqIHRoYW4gU0NUUF9NQVhfRVhQTElDSVRfU1RSX1JFU0VULgorICovCisjZGVmaW5l
IFNDVFBfTUFYX0VYUExJQ1RfU1RSX1JFU0VUICAgMTAwMAorCitzdHJ1Y3Qgc2N0cF9yZXNldF9z
dHJlYW1zIHsKKwlzY3RwX2Fzc29jX3Qgc3JzX2Fzc29jX2lkOworCXVpbnQxNl90IHNyc19mbGFn
czsKKwl1aW50MTZfdCBzcnNfbnVtYmVyX3N0cmVhbXM7CS8qIDAgPT0gQUxMICovCisJdWludDE2
X3Qgc3JzX3N0cmVhbV9saXN0W107LyogbGlzdCBpZiBzdHJyc3RfbnVtX3N0cmVhbXMgaXMgbm90
IDAgKi8KK307CisKK3N0cnVjdCBzY3RwX2FkZF9zdHJlYW1zIHsKKwlzY3RwX2Fzc29jX3QJc2Fz
X2Fzc29jX2lkOworCXVpbnQxNl90CXNhc19pbnN0cm1zOworCXVpbnQxNl90CXNhc19vdXRzdHJt
czsKK307CisKK3N0cnVjdCBzY3RwX2dldF9ub25jZV92YWx1ZXMgeworCXNjdHBfYXNzb2NfdCBn
bl9hc3NvY19pZDsKKwl1aW50MzJfdCBnbl9wZWVyc190YWc7CisJdWludDMyX3QgZ25fbG9jYWxf
dGFnOworfTsKKworLyogRGVidWdnaW5nIGxvZ3MgKi8KK3N0cnVjdCBzY3RwX3N0cl9sb2cgewor
CXZvaWQgKnN0Y2I7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICovCisJdWludDMyX3Qgbl90c247CisJ
dWludDMyX3QgZV90c247CisJdWludDE2X3Qgbl9zc2VxOworCXVpbnQxNl90IGVfc3NlcTsKKwl1
aW50MTZfdCBzdHJtOworfTsKKworc3RydWN0IHNjdHBfc2JfbG9nIHsKKwl2b2lkICAqc3RjYjsg
LyogRklYTUU6IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBzb19zYmNjOworCXVpbnQzMl90IHN0
Y2Jfc2JjYzsKKwl1aW50MzJfdCBpbmNyOworfTsKKworc3RydWN0IHNjdHBfZnJfbG9nIHsKKwl1
aW50MzJfdCBsYXJnZXN0X3RzbjsKKwl1aW50MzJfdCBsYXJnZXN0X25ld190c247CisJdWludDMy
X3QgdHNuOworfTsKKworc3RydWN0IHNjdHBfZnJfbWFwIHsKKwl1aW50MzJfdCBiYXNlOworCXVp
bnQzMl90IGN1bTsKKwl1aW50MzJfdCBoaWdoOworfTsKKworc3RydWN0IHNjdHBfcnduZF9sb2cg
eworCXVpbnQzMl90IHJ3bmQ7CisJdWludDMyX3Qgc2VuZF9zaXplOworCXVpbnQzMl90IG92ZXJo
ZWFkOworCXVpbnQzMl90IG5ld19yd25kOworfTsKKworc3RydWN0IHNjdHBfbWJjbnRfbG9nIHsK
Kwl1aW50MzJfdCB0b3RhbF9xdWV1ZV9zaXplOworCXVpbnQzMl90IHNpemVfY2hhbmdlOworCXVp
bnQzMl90IHRvdGFsX3F1ZXVlX21iX3NpemU7CisJdWludDMyX3QgbWJjbnRfY2hhbmdlOworfTsK
Kworc3RydWN0IHNjdHBfc2Fja19sb2cgeworCXVpbnQzMl90IGN1bWFjazsKKwl1aW50MzJfdCBv
bGRjdW1hY2s7CisJdWludDMyX3QgdHNuOworCXVpbnQxNl90IG51bUdhcHM7CisJdWludDE2X3Qg
bnVtRHVwczsKK307CisKK3N0cnVjdCBzY3RwX2xvY2tfbG9nIHsKKwl2b2lkICpzb2NrOyAgLyog
RklYTUU6IExQNjQgaXNzdWUgKi8KKwl2b2lkICppbnA7IC8qIEZJWE1FOiBMUDY0IGlzc3VlICov
CisJdWludDhfdCB0Y2JfbG9jazsKKwl1aW50OF90IGlucF9sb2NrOworCXVpbnQ4X3QgaW5mb19s
b2NrOworCXVpbnQ4X3Qgc29ja19sb2NrOworCXVpbnQ4X3Qgc29ja3JjdmJ1Zl9sb2NrOworCXVp
bnQ4X3Qgc29ja3NuZGJ1Zl9sb2NrOworCXVpbnQ4X3QgY3JlYXRlX2xvY2s7CisJdWludDhfdCBy
ZXN2OworfTsKKworc3RydWN0IHNjdHBfcnRvX2xvZyB7CisJdm9pZCAqIG5ldDsgLyogRklYTUU6
IExQNjQgaXNzdWUgKi8KKwl1aW50MzJfdCBydHQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9uYWdsZV9s
b2cgeworCXZvaWQgICpzdGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLworCXVpbnQzMl90IHRv
dGFsX2ZsaWdodDsKKwl1aW50MzJfdCB0b3RhbF9pbl9xdWV1ZTsKKwl1aW50MTZfdCBjb3VudF9p
bl9xdWV1ZTsKKwl1aW50MTZfdCBjb3VudF9pbl9mbGlnaHQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9z
Yndha2VfbG9nIHsKKwl2b2lkICpzdGNiOyAvKiBGSVhNRTogTFA2NCBpc3N1ZSAqLworCXVpbnQx
Nl90IHNlbmRfcTsKKwl1aW50MTZfdCBzZW50X3E7CisJdWludDE2X3QgZmxpZ2h0OworCXVpbnQx
Nl90IHdha2VfY250OworCXVpbnQ4X3Qgc3RyZWFtX3FjbnQ7CS8qIGNobmsgY250ICovCisJdWlu
dDhfdCBjaHVua3Nfb25fb3F1ZTsvKiBjaHVua3Mgb3V0ICovCisJdWludDhfdCBzYmZsYWdzOwor
CXVpbnQ4X3Qgc2N0cGZsYWdzOworfTsKKworc3RydWN0IHNjdHBfbWlzY19pbmZvIHsKKwl1aW50
MzJfdCBsb2cxOworCXVpbnQzMl90IGxvZzI7CisJdWludDMyX3QgbG9nMzsKKwl1aW50MzJfdCBs
b2c0OworfTsKKworc3RydWN0IHNjdHBfbG9nX2Nsb3NpbmcgeworCXZvaWQgKmlucDsgLyogRklY
TUU6IExQNjQgaXNzdWUgKi8KKwl2b2lkICpzdGNiOyAgLyogRklYTUU6IExQNjQgaXNzdWUgKi8K
Kwl1aW50MzJfdCBzY3RwX2ZsYWdzOworCXVpbnQxNl90ICBzdGF0ZTsKKwlpbnQxNl90ICBsb2M7
Cit9OworCitzdHJ1Y3Qgc2N0cF9tYnVmX2xvZyB7CisJc3RydWN0IG1idWYgKm1wOyAvKiBGSVhN
RTogTFA2NCBpc3N1ZSAqLworCWNhZGRyX3QgIGV4dDsKKwljYWRkcl90ICBkYXRhOworCXVpbnQx
Nl90IHNpemU7CisJdWludDhfdCAgcmVmY250OworCXVpbnQ4X3QgIG1idWZfZmxhZ3M7Cit9Owor
CitzdHJ1Y3Qgc2N0cF9jd25kX2xvZyB7CisJdWludDY0X3QgdGltZV9ldmVudDsKKwl1aW50OF90
ICBmcm9tOworCXVpbnQ4X3QgIGV2ZW50X3R5cGU7CisJdWludDhfdCAgcmVzdlsyXTsKKwl1bmlv
biB7CisJCXN0cnVjdCBzY3RwX2xvZ19jbG9zaW5nIGNsb3NlOworCQlzdHJ1Y3Qgc2N0cF9ibGtf
YXJncyBibGs7CisJCXN0cnVjdCBzY3RwX2N3bmRfYXJncyBjd25kOworCQlzdHJ1Y3Qgc2N0cF9z
dHJfbG9nIHN0cmxvZzsKKwkJc3RydWN0IHNjdHBfZnJfbG9nIGZyOworCQlzdHJ1Y3Qgc2N0cF9m
cl9tYXAgbWFwOworCQlzdHJ1Y3Qgc2N0cF9yd25kX2xvZyByd25kOworCQlzdHJ1Y3Qgc2N0cF9t
YmNudF9sb2cgbWJjbnQ7CisJCXN0cnVjdCBzY3RwX3NhY2tfbG9nIHNhY2s7CisJCXN0cnVjdCBz
Y3RwX2xvY2tfbG9nIGxvY2s7CisJCXN0cnVjdCBzY3RwX3J0b19sb2cgcnRvOworCQlzdHJ1Y3Qg
c2N0cF9zYl9sb2cgc2I7CisJCXN0cnVjdCBzY3RwX25hZ2xlX2xvZyBuYWdsZTsKKwkJc3RydWN0
IHNjdHBfc2J3YWtlX2xvZyB3YWtlOworCQlzdHJ1Y3Qgc2N0cF9tYnVmX2xvZyBtYjsKKwkJc3Ry
dWN0IHNjdHBfbWlzY19pbmZvIG1pc2M7CisJfSAgICAgeDsKK307CisKK3N0cnVjdCBzY3RwX2N3
bmRfbG9nX3JlcSB7CisJaW50MzJfdCBudW1faW5fbG9nOwkJLyogTnVtYmVyIGluIGxvZyAqLwor
CWludDMyX3QgbnVtX3JldDsJCS8qIE51bWJlciByZXR1cm5lZCAqLworCWludDMyX3Qgc3RhcnRf
YXQ7CQkvKiBzdGFydCBhdCB0aGlzIG9uZSAqLworCWludDMyX3QgZW5kX2F0OwkJICAgICAgICAv
KiBlbmQgYXQgdGhpcyBvbmUgKi8KKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBsb2dbXTsKK307CisK
K3N0cnVjdCBzY3RwX3RpbWV2YWwgeworCXVpbnQzMl90IHR2X3NlYzsKKwl1aW50MzJfdCB0dl91
c2VjOworfTsKKworc3RydWN0IHNjdHBzdGF0IHsKKwlzdHJ1Y3Qgc2N0cF90aW1ldmFsIHNjdHBz
X2Rpc2NvbnRpbnVpdHl0aW1lOyAvKiBzY3RwU3RhdHMgMTggKFRpbWVTdGFtcCkgKi8KKwkvKiBN
SUIgYWNjb3JkaW5nIHRvIFJGQyAzODczICovCisJdWludDMyX3QgIHNjdHBzX2N1cnJlc3RhYjsg
ICAgICAgICAgIC8qIHNjdHBTdGF0cyAgMSAgIChHYXVnZTMyKSAqLworCXVpbnQzMl90ICBzY3Rw
c19hY3RpdmVlc3RhYjsgICAgICAgICAvKiBzY3RwU3RhdHMgIDIgKENvdW50ZXIzMikgKi8KKwl1
aW50MzJfdCAgc2N0cHNfcmVzdGFydGVzdGFiOworCXVpbnQzMl90ICBzY3Rwc19jb2xsaXNpb25l
c3RhYjsKKwl1aW50MzJfdCAgc2N0cHNfcGFzc2l2ZWVzdGFiOyAgICAgICAgLyogc2N0cFN0YXRz
ICAzIChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNjdHBzX2Fib3J0ZWQ7ICAgICAgICAgICAg
IC8qIHNjdHBTdGF0cyAgNCAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19zaHV0ZG93
bjsgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDUgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAg
c2N0cHNfb3V0b2Z0aGVibHVlOyAgICAgICAgLyogc2N0cFN0YXRzICA2IChDb3VudGVyMzIpICov
CisJdWludDMyX3QgIHNjdHBzX2NoZWNrc3VtZXJyb3JzOyAgICAgIC8qIHNjdHBTdGF0cyAgNyAo
Q291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19vdXRjb250cm9sY2h1bmtzOyAgICAvKiBz
Y3RwU3RhdHMgIDggKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0b3JkZXJjaHVu
a3M7ICAgICAgLyogc2N0cFN0YXRzICA5IChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBz
X291dHVub3JkZXJjaHVua3M7ICAgIC8qIHNjdHBTdGF0cyAxMCAoQ291bnRlcjY0KSAqLworCXVp
bnQzMl90ICBzY3Rwc19pbmNvbnRyb2xjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTEgKENvdW50
ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5vcmRlcmNodW5rczsgICAgICAgLyogc2N0cFN0
YXRzIDEyIChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX2ludW5vcmRlcmNodW5rczsg
ICAgIC8qIHNjdHBTdGF0cyAxMyAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19mcmFn
dXNybXNnczsgICAgICAgICAvKiBzY3RwU3RhdHMgMTQgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJf
dCAgc2N0cHNfcmVhc211c3Jtc2dzOyAgICAgICAgLyogc2N0cFN0YXRzIDE1IChDb3VudGVyNjQp
ICovCisJdWludDMyX3QgIHNjdHBzX291dHBhY2tldHM7ICAgICAgICAgIC8qIHNjdHBTdGF0cyAx
NiAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19pbnBhY2tldHM7ICAgICAgICAgICAv
KiBzY3RwU3RhdHMgMTcgKENvdW50ZXI2NCkgKi8KKworCS8qIGlucHV0IHN0YXRpc3RpY3M6ICov
CisJdWludDMyX3QgIHNjdHBzX3JlY3ZwYWNrZXRzOyAgICAgICAgIC8qIHRvdGFsIGlucHV0IHBh
Y2tldHMgICAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZkYXRhZ3JhbXM7ICAgICAgIC8q
IHRvdGFsIGlucHV0IGRhdGFncmFtcyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zwa3R3
aXRoZGF0YTsgICAgIC8qIHRvdGFsIHBhY2tldHMgdGhhdCBoYWQgZGF0YSAqLworCXVpbnQzMl90
ICBzY3Rwc19yZWN2c2Fja3M7ICAgICAgICAgICAvKiB0b3RhbCBpbnB1dCBTQUNLIGNodW5rcyAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZGF0YTsgICAgICAgICAgICAvKiB0b3RhbCBpbnB1
dCBEQVRBIGNodW5rcyAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZHVwZGF0YTsgICAgICAg
ICAvKiB0b3RhbCBpbnB1dCBkdXBsaWNhdGUgREFUQSBjaHVua3MgKi8KKwl1aW50MzJfdCAgc2N0
cHNfcmVjdmhlYXJ0YmVhdDsgICAgICAgLyogdG90YWwgaW5wdXQgSEIgY2h1bmtzICAgICAgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcmVjdmhlYXJ0YmVhdGFjazsgICAgLyogdG90YWwgaW5wdXQgSEIt
QUNLIGNodW5rcyAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmVjbmU7ICAgICAgICAgICAgLyog
dG90YWwgaW5wdXQgRUNORSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmF1dGg7
ICAgICAgICAgICAgLyogdG90YWwgaW5wdXQgQVVUSCBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAg
c2N0cHNfcmVjdmF1dGhtaXNzaW5nOyAgICAgLyogdG90YWwgaW5wdXQgY2h1bmtzIG1pc3Npbmcg
QVVUSCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2aXZhbGhtYWNpZDsgICAgICAvKiB0b3RhbCBu
dW1iZXIgb2YgaW52YWxpZCBITUFDIGlkcyByZWNlaXZlZCAqLworCXVpbnQzMl90ICBzY3Rwc19y
ZWN2aXZhbGtleWlkOyAgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgaW52YWxpZCBzZWNyZXQgaWRz
IHJlY2VpdmVkICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRoZmFpbGVkOyAgICAgIC8qIHRv
dGFsIG51bWJlciBvZiBhdXRoIGZhaWxlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2ZXhwcmVz
czsgICAgICAgICAvKiB0b3RhbCBmYXN0IHBhdGggcmVjZWl2ZXMgYWxsIG9uZSBjaHVuayAqLwor
CXVpbnQzMl90ICBzY3Rwc19yZWN2ZXhwcmVzc207ICAgICAgICAvKiB0b3RhbCBmYXN0IHBhdGgg
bXVsdGktcGFydCBkYXRhICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zfc3BhcmU7ICAgICAgICAg
IC8qIGZvcm1lcmx5IHNjdHBzX3JlY3Zub2NyYyAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2c3dj
cmM7CisJdWludDMyX3QgIHNjdHBzX3JlY3Zod2NyYzsKKworCS8qIG91dHB1dCBzdGF0aXN0aWNz
OiAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kcGFja2V0czsgICAgICAgICAvKiB0b3RhbCBvdXRw
dXQgcGFja2V0cyAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc2Fja3M7ICAgICAgICAg
ICAvKiB0b3RhbCBvdXRwdXQgU0FDS3MgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5k
ZGF0YTsgICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQgREFUQSBjaHVua3MgICAqLworCXVpbnQz
Ml90ICBzY3Rwc19zZW5kcmV0cmFuc2RhdGE7ICAgICAvKiB0b3RhbCBvdXRwdXQgcmV0cmFuc21p
dHRlZCBEQVRBIGNodW5rcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZmFzdHJldHJhbnM7ICAg
ICAvKiB0b3RhbCBvdXRwdXQgZmFzdCByZXRyYW5zbWl0dGVkIERBVEEgY2h1bmtzICovCisJdWlu
dDMyX3QgIHNjdHBzX3NlbmRtdWx0ZmFzdHJldHJhbnM7IC8qIHRvdGFsIEZSJ3MgdGhhdCBoYXBw
ZW5lZCBtb3JlIHRoYW4gb25jZQorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKiB0byBzYW1lIGNodW5rICh1LWRlbCBtdWx0aS1mciBhbGdvKS4KKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRoZWFydGJl
YXQ7ICAgICAgIC8qIHRvdGFsIG91dHB1dCBIQiBjaHVua3MgICAgICovCisJdWludDMyX3QgIHNj
dHBzX3NlbmRlY25lOyAgICAgICAgICAgIC8qIHRvdGFsIG91dHB1dCBFQ05FIGNodW5rcyAgICAq
LworCXVpbnQzMl90ICBzY3Rwc19zZW5kYXV0aDsgICAgICAgICAgICAvKiB0b3RhbCBvdXRwdXQg
QVVUSCBjaHVua3MgRklYTUUgICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZXJyb3JzOyAgICAg
ICAgICAvKiBpcF9vdXRwdXQgZXJyb3IgY291bnRlciAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5k
X3NwYXJlOyAgICAgICAgICAvKiBmb3JtZXJseSBzY3Rwc19zZW5kbm9jcmMgKi8KKwl1aW50MzJf
dCAgc2N0cHNfc2VuZHN3Y3JjOworCXVpbnQzMl90ICBzY3Rwc19zZW5kaHdjcmM7CisJLyogUENL
RFJPUFJFUCBzdGF0aXN0aWNzOiAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwZm1ib3g7ICAgICAg
ICAgICAvKiBQYWNrZXQgZHJvcCBmcm9tIG1pZGRsZSBib3ggKi8KKwl1aW50MzJfdCAgc2N0cHNf
cGRycGZlaG9zOyAgICAgICAgICAgLyogUC1kcm9wIGZyb20gZW5kIGhvc3QgKi8KKwl1aW50MzJf
dCAgc2N0cHNfcGRycG1iZGE7ICAgICAgICAgICAgLyogUC1kcm9wcyB3aXRoIGRhdGEgKi8KKwl1
aW50MzJfdCAgc2N0cHNfcGRycG1iY3Q7ICAgICAgICAgICAgLyogUC1kcm9wcywgbm9uLWRhdGEs
IG5vbi1lbmRob3N0ICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBid3JwdDsgICAgICAgICAgIC8q
IFAtZHJvcCwgbm9uLWVuZGhvc3QsIGJhbmR3aWR0aCByZXAgb25seSAqLworCXVpbnQzMl90ICBz
Y3Rwc19wZHJwY3J1cHQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vdCBlbm91Z2ggZm9yIGNodW5r
IGhlYWRlciAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwbmVkYXQ7ICAgICAgICAgICAvKiBQLWRy
b3AsIG5vdCBlbm91Z2ggZGF0YSB0byBjb25maXJtICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBw
ZGJyazsgICAgICAgICAgIC8qIFAtZHJvcCwgd2hlcmUgcHJvY2Vzc19jaHVua19kcm9wIHNhaWQg
YnJlYWsgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycHRzbm5mOyAgICAgICAgICAgLyogUC1kcm9w
LCBjb3VsZCBub3QgZmluZCBUU04gKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGRuZm5kOyAgICAg
ICAgICAgLyogUC1kcm9wLCBhdHRlbXB0IHJldmVyc2UgVFNOIGxvb2t1cCAqLworCXVpbnQzMl90
ICBzY3Rwc19wZHJwZGl3bnA7ICAgICAgICAgICAvKiBQLWRyb3AsIGUtaG9zdCBjb25maXJtcyB6
ZXJvLXJ3bmQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGRpenJ3OyAgICAgICAgICAgLyogUC1k
cm9wLCBtaWRib3ggY29uZmlybXMgbm8gc3BhY2UgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGJh
ZGQ7ICAgICAgICAgICAgLyogUC1kcm9wLCBkYXRhIGRpZCBub3QgbWF0Y2ggVFNOICovCisJdWlu
dDMyX3QgIHNjdHBzX3BkcnBtYXJrOyAgICAgICAgICAgIC8qIFAtZHJvcCwgVFNOJ3MgbWFya2Vk
IGZvciBGYXN0IFJldHJhbiAqLworCS8qIHRpbWVvdXRzICovCisJdWludDMyX3QgIHNjdHBzX3Rp
bW9pdGVyYXRvcjsgICAgICAgIC8qIE51bWJlciBvZiBpdGVyYXRvciB0aW1lcnMgdGhhdCBmaXJl
ZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vZGF0YTsgICAgICAgICAgICAvKiBOdW1iZXIgb2Yg
VDMgZGF0YSB0aW1lIG91dHMgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3dpbmRvd3Byb2JlOyAg
ICAgLyogTnVtYmVyIG9mIHdpbmRvdyBwcm9iZSAoVDMpIHRpbWVycyB0aGF0IGZpcmVkICovCisJ
dWludDMyX3QgIHNjdHBzX3RpbW9pbml0OyAgICAgICAgICAgIC8qIE51bWJlciBvZiBJTklUIHRp
bWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zYWNrOyAgICAgICAgICAg
IC8qIE51bWJlciBvZiBzYWNrIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBz
X3RpbW9zaHV0ZG93bjsgICAgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biB0aW1lcnMgdGhhdCBm
aXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vaGVhcnRiZWF0OyAgICAgICAvKiBOdW1iZXIg
b2YgaGVhcnRiZWF0IHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9j
b29raWU7ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhIGNvb2tpZSB0aW1lb3V0IGZpcmVk
ICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zZWNyZXQ7ICAgICAgICAgIC8qIE51bWJlciBvZiB0
aW1lcyBhbiBlbmRwb2ludCBjaGFuZ2VkIGl0cyBjb29raWUgc2VjcmV0Ki8KKwl1aW50MzJfdCAg
c2N0cHNfdGltb3BhdGhtdHU7ICAgICAgICAgLyogTnVtYmVyIG9mIFBNVFUgdGltZXJzIHRoYXQg
ZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duYWNrOyAgICAgLyogTnVtYmVy
IG9mIHNodXRkb3duIGFjayB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190
aW1vc2h1dGRvd25ndWFyZDsgICAvKiBOdW1iZXIgb2Ygc2h1dGRvd24gZ3VhcmQgdGltZXJzIHRo
YXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb3N0cm1yc3Q7ICAgICAgICAgLyogTnVt
YmVyIG9mIHN0cmVhbSByZXNldCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rw
c190aW1vZWFybHlmcjsgICAgICAgICAvKiBOdW1iZXIgb2YgZWFybHkgRlIgdGltZXJzIHRoYXQg
ZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2FzY29uZjsgICAgICAgICAgLyogTnVtYmVy
IG9mIHRpbWVzIGFuIGFzY29uZiB0aW1lciBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1v
ZGVscHJpbTsJICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYSBwcmltX2RlbGV0ZWQgdGltZXIgZmly
ZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2F1dG9jbG9zZTsgICAgICAgLyogTnVtYmVyIG9m
IHRpbWVzIGF1dG8gY2xvc2UgdGltZXIgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2Fz
c29ja2lsbDsgICAgICAgLyogTnVtYmVyIG9mIGFzb2MgZnJlZSB0aW1lcnMgZXhwaXJlZCAqLwor
CXVpbnQzMl90ICBzY3Rwc190aW1vaW5wa2lsbDsgICAgICAgICAvKiBOdW1iZXIgb2YgaW5wIGZy
ZWUgdGltZXJzIGV4cGlyZWQgKi8KKwkvKiBmb3JtZXIgZWFybHkgRlIgY291bnRlcnMgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc3BhcmVbMTFdOworCS8qIG90aGVycyAqLworCXVpbnQzMl90ICBzY3Rw
c19oZHJvcHM7CSAgICAgICAgICAvKiBwYWNrZXQgc2hvcnRlciB0aGFuIGhlYWRlciAqLworCXVp
bnQzMl90ICBzY3Rwc19iYWRzdW07CSAgICAgICAgICAvKiBjaGVja3N1bSBlcnJvciAgICAgICAg
ICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19ub3BvcnQ7ICAgICAgICAgICAvKiBubyBlbmRwb2lu
dCBmb3IgcG9ydCAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19iYWR2dGFnOyAgICAgICAgICAv
KiBiYWQgdi10YWcgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19iYWRzaWQ7
ICAgICAgICAgICAvKiBiYWQgU0lEICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBz
Y3Rwc19ub21lbTsgICAgICAgICAgICAvKiBubyBtZW1vcnkgICAgICAgICAgICAgICAgICAqLwor
CXVpbnQzMl90ICBzY3Rwc19mYXN0cmV0cmFuc2lucnR0OyAvKiBudW1iZXIgb2YgbXVsdGlwbGUg
RlIgaW4gYSBSVFQgd2luZG93ICovCisJdWludDMyX3QgIHNjdHBzX21hcmtlZHJldHJhbnM7CisJ
dWludDMyX3QgIHNjdHBzX25hZ2xlc2VudDsgICAgICAgIC8qIG5hZ2xlIGFsbG93ZWQgc2VuZGlu
ZyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX25hZ2xlcXVldWVkOyAgICAgIC8qIG5hZ2xlIGRv
ZXNuJ3QgYWxsb3cgc2VuZGluZyAqLworCXVpbnQzMl90ICBzY3Rwc19tYXhidXJzdHF1ZXVlZDsg
ICAvKiBtYXggYnVyc3QgZG9lc24ndCBhbGxvdyBzZW5kaW5nICovCisJdWludDMyX3QgIHNjdHBz
X2lmbm9tZW1xdWV1ZWQ7ICAgIC8qIGxvb2sgYWhlYWQgdGVsbHMgdXMgbm8gbWVtb3J5IGluCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaW50ZXJmYWNlIHJpbmcg
YnVmZmVyIE9SIHdlIGhhZCBhCisJCQkJCSAqIHNlbmQgZXJyb3IgYW5kIGFyZSBxdWV1aW5nIG9u
ZSBzZW5kLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVp
bnQzMl90ICBzY3Rwc193aW5kb3dwcm9iZWQ7ICAgICAvKiB0b3RhbCBudW1iZXIgb2Ygd2luZG93
IHByb2JlcyBzZW50ICovCisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJyOwkvKiB0b3RhbCB0
aW1lcyBhbiBvdXRwdXQgZXJyb3IgY2F1c2VzIHVzCisJCQkJCSAqIHRvIGNsYW1wIGRvd24gb24g
bmV4dCB1c2VyIHNlbmQuCisJCQkJCSAqLworCXVpbnQzMl90ICBzY3Rwc19sb3dsZXZlbGVycnVz
cjsJLyogdG90YWwgdGltZXMgc2N0cF9zZW5kZXJyb3JzIHdlcmUgY2F1c2VkIGZyb20KKwkJCQkJ
ICogYSB1c2VyIHNlbmQgZnJvbSBhIHVzZXIgaW52b2tlZCBzZW5kIG5vdAorCQkJCQkgKiBhIHNh
Y2sgcmVzcG9uc2UKKwkJCQkJICovCisJdWludDMyX3QgIHNjdHBzX2RhdGFkcm9wY2hrbG10Owkv
KiBOdW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUgdG8gY2h1bmsgbGltaXQgcmVhY2hlZCAqLwor
CXVpbnQzMl90ICBzY3Rwc19kYXRhZHJvcHJ3bmQ7CS8qIE51bWJlciBvZiBpbiBkYXRhIGRyb3Bz
IGR1ZSB0byByd25kIGxpbWl0IHJlYWNoZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfZWNuZXJlZHVj
ZWRjd25kOyAgLyogTnVtYmVyIG9mIHRpbWVzIGEgRUNOIHJlZHVjZWQgdGhlIGN3bmQgKi8KKwl1
aW50MzJfdCAgc2N0cHNfdnRhZ2V4cHJlc3M7CS8qIFVzZWQgZXhwcmVzcyBsb29rdXAgdmlhIHZ0
YWcgKi8KKwl1aW50MzJfdCAgc2N0cHNfdnRhZ2JvZ3VzOwkvKiBDb2xsaXNpb24gaW4gZXhwcmVz
cyBsb29rdXAuICovCisJdWludDMyX3QgIHNjdHBzX3ByaW1hcnlfcmFuZHJ5OwkvKiBOdW1iZXIg
b2YgdGltZXMgdGhlIHNlbmRlciByYW4gZHJ5IG9mIHVzZXIgZGF0YSBvbiBwcmltYXJ5ICovCisJ
dWludDMyX3QgIHNjdHBzX2NtdF9yYW5kcnk7ICAgICAgIC8qIFNhbWUgZm9yIGFib3ZlICovCisJ
dWludDMyX3QgIHNjdHBzX3Nsb3dwYXRoX3NhY2s7ICAgIC8qIFNhY2tzIHRoZSBzbG93IHdheSAq
LworCXVpbnQzMl90ICBzY3Rwc193dV9zYWNrc19zZW50OwkvKiBXaW5kb3cgVXBkYXRlIG9ubHkg
c2Fja3Mgc2VudCAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2ZsYWdzOyAvKiBudW1i
ZXIgb2Ygc2VuZHMgd2l0aCBzaW5mb19mbGFncyAhPTAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2Vu
ZHNfd2l0aF91bm9yZDsgLyogbnVtYmVyIG9mIHVub3JkZXJlZCBzZW5kcyAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kc193aXRoX2VvZjsgCS8qIG51bWJlciBvZiBzZW5kcyB3aXRoIEVPRiBmbGFn
IHNldCAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2Fib3J0OyAvKiBudW1iZXIgb2Yg
c2VuZHMgd2l0aCBBQk9SVCBmbGFnIHNldCAqLworCXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9k
cmFpbl9jYWxsczsJLyogbnVtYmVyIG9mIHRpbWVzIHByb3RvY29sIGRyYWluIGNhbGxlZCAqLwor
CXVpbnQzMl90ICBzY3Rwc19wcm90b2NvbF9kcmFpbnNfZG9uZTsgCS8qIG51bWJlciBvZiB0aW1l
cyB3ZSBkaWQgYSBwcm90b2NvbCBkcmFpbiAqLworCXVpbnQzMl90ICBzY3Rwc19yZWFkX3BlZWtz
OwkvKiBOdW1iZXIgb2YgdGltZXMgcmVjdiB3YXMgY2FsbGVkIHdpdGggcGVlayAqLworCXVpbnQz
Ml90ICBzY3Rwc19jYWNoZWRfY2hrOyAgICAgICAvKiBOdW1iZXIgb2YgY2FjaGVkIGNodW5rcyB1
c2VkICovCisJdWludDMyX3QgIHNjdHBzX2NhY2hlZF9zdHJtb3E7ICAgIC8qIE51bWJlciBvZiBj
YWNoZWQgc3RyZWFtIG9xJ3MgdXNlZCAqLworCXVpbnQzMl90ICBzY3Rwc19sZWZ0X2FiYW5kb247
ICAgICAvKiBOdW1iZXIgb2YgdW5yZWFkIG1lc3NhZ2VzIGFiYW5kb25lZCBieSBjbG9zZSAqLwor
CXVpbnQzMl90ICBzY3Rwc19zZW5kX2J1cnN0X2F2b2lkOyAvKiBVbnVzZWQgKi8KKwl1aW50MzJf
dCAgc2N0cHNfc2VuZF9jd25kX2F2b2lkOyAgLyogU2VuZCBjd25kIGZ1bGwgIGF2b2lkYW5jZSwg
YWxyZWFkeSBtYXggYnVyc3QgaW5mbGlnaHQgdG8gbmV0ICovCisJdWludDMyX3QgIHNjdHBzX2Z3
ZHRzbl9tYXBfb3ZlcjsgIC8qIG51bWJlciBvZiBtYXAgYXJyYXkgb3Zlci1ydW5zIHZpYSBmd2Qt
dHNuJ3MgKi8KKwl1aW50MzJfdCAgc2N0cHNfcXVldWVfdXBkX2VjbmU7ICAvKiBOdW1iZXIgb2Yg
dGltZXMgd2UgcXVldWVkIG9yIHVwZGF0ZWQgYW4gRUNOIGNodW5rIG9uIHNlbmQgcXVldWUgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcmVzZXJ2ZWRbMzFdOyAgICAgLyogRnV0dXJlIEFCSSBjb21wYXQg
LSByZW1vdmUgaW50J3MgZnJvbSBoZXJlIHdoZW4gYWRkaW5nIG5ldyAqLworfTsKKworI2RlZmlu
ZSBTQ1RQX1NUQVRfSU5DUihfeCkgU0NUUF9TVEFUX0lOQ1JfQlkoX3gsMSkKKyNkZWZpbmUgU0NU
UF9TVEFUX0RFQ1IoX3gpIFNDVFBfU1RBVF9ERUNSX0JZKF94LDEpCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgZGVmaW5lZChTTVApICYmIGRlZmluZWQoU0NUUF9VU0VfUEVSQ1BVX1NUQVQp
CisjZGVmaW5lIFNDVFBfU1RBVF9JTkNSX0JZKF94LF9kKSAoU0NUUF9CQVNFX1NUQVRTW1BDUFVf
R0VUKGNwdWlkKV0uX3ggKz0gX2QpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0JZKF94LF9kKSAo
U0NUUF9CQVNFX1NUQVRTW1BDUFVfR0VUKGNwdWlkKV0uX3ggLT0gX2QpCisjZWxzZQorI2RlZmlu
ZSBTQ1RQX1NUQVRfSU5DUl9CWShfeCxfZCkgYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9TVEFU
KF94KSwgX2QpCisjZGVmaW5lIFNDVFBfU1RBVF9ERUNSX0JZKF94LF9kKSBhdG9taWNfc3VidHJh
Y3RfaW50KCZTQ1RQX0JBU0VfU1RBVChfeCksIF9kKQorI2VuZGlmCisvKiBUaGUgZm9sbG93aW5n
IG1hY3JvcyBhcmUgZm9yIGhhbmRsaW5nIE1JQiB2YWx1ZXMsICovCisjZGVmaW5lIFNDVFBfU1RB
VF9JTkNSX0NPVU5URVIzMihfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RB
VF9JTkNSX0NPVU5URVI2NChfeCkgU0NUUF9TVEFUX0lOQ1IoX3gpCisjZGVmaW5lIFNDVFBfU1RB
VF9JTkNSX0dBVUdFMzIoX3gpIFNDVFBfU1RBVF9JTkNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRf
REVDUl9DT1VOVEVSMzIoX3gpIFNDVFBfU1RBVF9ERUNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRf
REVDUl9DT1VOVEVSNjQoX3gpIFNDVFBfU1RBVF9ERUNSKF94KQorI2RlZmluZSBTQ1RQX1NUQVRf
REVDUl9HQVVHRTMyKF94KSBTQ1RQX1NUQVRfREVDUihfeCkKKworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKK3VuaW9uIHNjdHBfc29ja3N0b3JlIHsKKyNpZiBkZWZpbmVkKElORVQpCisJc3Ry
dWN0IHNvY2thZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJc3RydWN0
IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47
CisJc3RydWN0IHNvY2thZGRyIHNhOworfTsKKyNlbHNlCit1bmlvbiBzY3RwX3NvY2tzdG9yZSB7
CisJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisJ
c3RydWN0IHNvY2thZGRyIHNhOworfTsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKi8KKy8qIEFuZCBzb21ldGhpbmcgZm9yIHVzIG9sZCB0aW1lcnMgKi8K
Ky8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBfX0FQUExF
X18KKyNpZm5kZWYgX19Vc2Vyc3BhY2VfXworI2lmbmRlZiBudG9obGwKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0xpbnV4KQorI2lmbmRlZiBfQlNEX1NPVVJDRQorI2RlZmluZSBfQlNEX1NP
VVJDRQorI2VuZGlmCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjZWxzZQorI2luY2x1ZGUgPHN5cy9l
bmRpYW4uaD4KKyNlbmRpZgorI2RlZmluZSBudG9obGwoeCkgYmU2NHRvaCh4KQorI2VuZGlmCisK
KyNpZm5kZWYgaHRvbmxsCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNpZm5k
ZWYgX0JTRF9TT1VSQ0UKKyNkZWZpbmUgX0JTRF9TT1VSQ0UKKyNlbmRpZgorI2luY2x1ZGUgPGVu
ZGlhbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CisjZW5kaWYKKyNkZWZpbmUg
aHRvbmxsKHgpIGh0b2JlNjQoeCkKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKy8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitzdHJ1Y3QgeHNjdHBfaW5wY2IgeworCXVp
bnQzMl90IGxhc3Q7CisJdWludDMyX3QgZmxhZ3M7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPCAxMDAwMDQ4CisJdWludDMyX3QgZmVhdHVyZXM7CisjZWxz
ZQorCXVpbnQ2NF90IGZlYXR1cmVzOworI2VuZGlmCisJdWludDMyX3QgdG90YWxfc2VuZHM7CisJ
dWludDMyX3QgdG90YWxfcmVjdnM7CisJdWludDMyX3QgdG90YWxfbm9zcGFjZXM7CisJdWludDMy
X3QgZnJhZ21lbnRhdGlvbl9wb2ludDsKKwl1aW50MTZfdCBsb2NhbF9wb3J0OworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQxNl90
IHFsZW5fb2xkOworCXVpbnQxNl90IG1heHFsZW5fb2xkOworI2Vsc2UKKwl1aW50MTZfdCBxbGVu
OworCXVpbnQxNl90IG1heHFsZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV2luZG93c19fKQor
CXVpbnQxNl90IHBhZGRpbmc7CisjZW5kaWYKKyNpZiAhKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IChfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDE1MTcpKQorCXZvaWQgKnNvY2tldDsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5Ngor
CXVpbnQzMl90IHFsZW47CisJdWludDMyX3QgbWF4cWxlbjsKKyNlbmRpZgorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgMTAwMDA0OAorCXVpbnQzMl90IGV4
dHJhX3BhZGRpbmdbMzJdOyAvKiBmdXR1cmUgKi8KKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18p
ICYmIChfX0ZyZWVCU0RfdmVyc2lvbiA8IDEwMDE1MTcpCisJdWludDMyX3QgZXh0cmFfcGFkZGlu
Z1szMV07IC8qIGZ1dHVyZSAqLworI2Vsc2UKKyNpZiBkZWZpbmVkKF9fTFA2NF9fKQorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQz
Ml90IGV4dHJhX3BhZGRpbmdbMjddOyAvKiBmdXR1cmUgKi8KKyNlbHNlCisJdWludDMyX3QgZXh0
cmFfcGFkZGluZ1syOV07IC8qIGZ1dHVyZSAqLworI2VuZGlmCisjZWxzZQorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gMTEwMDA5NgorCXVpbnQzMl90IGV4
dHJhX3BhZGRpbmdbMjhdOyAvKiBmdXR1cmUgKi8KKyNlbHNlCisJdWludDMyX3QgZXh0cmFfcGFk
ZGluZ1szMF07IC8qIGZ1dHVyZSAqLworI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorfTsKKworc3Ry
dWN0IHhzY3RwX3RjYiB7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgcHJpbWFyeV9hZGRyOyAgICAg
IC8qIHNjdHBBc3NvY0VudHJ5IDUvNiAqLworCXVpbnQzMl90IGxhc3Q7CisJdWludDMyX3QgaGVh
cnRiZWF0X2ludGVydmFsOyAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDcgICAqLworCXVp
bnQzMl90IHN0YXRlOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSA4
ICAgKi8KKwl1aW50MzJfdCBpbl9zdHJlYW1zOyAgICAgICAgICAgICAgICAgICAgLyogc2N0cEFz
c29jRW50cnkgOSAgICovCisJdWludDMyX3Qgb3V0X3N0cmVhbXM7ICAgICAgICAgICAgICAgICAg
IC8qIHNjdHBBc3NvY0VudHJ5IDEwICAqLworCXVpbnQzMl90IG1heF9ucl9yZXRyYW5zOyAgICAg
ICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSAxMSAgKi8KKwl1aW50MzJfdCBwcmltYXJ5X3By
b2Nlc3M7ICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTIgICovCisJdWludDMyX3Qg
VDFfZXhwaXJlcmllczsgICAgICAgICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDEzICAqLwor
CXVpbnQzMl90IFQyX2V4cGlyZXJpZXM7ICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRy
eSAxNCAgKi8KKwl1aW50MzJfdCByZXRyYW5zbWl0dGVkX3RzbnM7ICAgICAgICAgICAgLyogc2N0
cEFzc29jRW50cnkgMTUgICovCisJdWludDMyX3QgdG90YWxfc2VuZHM7CisJdWludDMyX3QgdG90
YWxfcmVjdnM7CisJdWludDMyX3QgbG9jYWxfdGFnOworCXVpbnQzMl90IHJlbW90ZV90YWc7CisJ
dWludDMyX3QgaW5pdGlhbF90c247CisJdWludDMyX3QgaGlnaGVzdF90c247CisJdWludDMyX3Qg
Y3VtdWxhdGl2ZV90c247CisJdWludDMyX3QgY3VtdWxhdGl2ZV90c25fYWNrOworCXVpbnQzMl90
IG10dTsKKwl1aW50MzJfdCByZWZjbnQ7CisJdWludDE2X3QgbG9jYWxfcG9ydDsgICAgICAgICAg
ICAgICAgICAgIC8qIHNjdHBBc3NvY0VudHJ5IDMgICAqLworCXVpbnQxNl90IHJlbW90ZV9wb3J0
OyAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NFbnRyeSA0ICAgKi8KKwlzdHJ1Y3Qgc2N0
cF90aW1ldmFsIHN0YXJ0X3RpbWU7ICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMTYgICovCisJ
c3RydWN0IHNjdHBfdGltZXZhbCBkaXNjb250aW51aXR5X3RpbWU7IC8qIHNjdHBBc3NvY0VudHJ5
IDE3ICAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gODAwMDAwCisJdWludDMyX3QgcGVlcnNfcnduZDsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7
ICAgICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMSAgICovCisJdWludDMyX3QgZXh0
cmFfcGFkZGluZ1szMl07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbHNlCisjZW5kaWYK
KyNlbHNlCisJdWludDMyX3QgcGVlcnNfcnduZDsKKwlzY3RwX2Fzc29jX3QgYXNzb2NfaWQ7ICAg
ICAgICAgICAgICAgICAgLyogc2N0cEFzc29jRW50cnkgMSAgICovCisJdWludDMyX3QgZXh0cmFf
cGFkZGluZ1szMl07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbmRpZgorfTsKKworc3Ry
dWN0IHhzY3RwX2xhZGRyIHsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyZXNzOyAgICAvKiBz
Y3RwQXNzb2NMb2NhbEFkZHJFbnRyeSAxLzIgKi8KKwl1aW50MzJfdCBsYXN0OworCXN0cnVjdCBz
Y3RwX3RpbWV2YWwgc3RhcnRfdGltZTsgIC8qIHNjdHBBc3NvY0xvY2FsQWRkckVudHJ5IDMgICAq
LworCXVpbnQzMl90IGV4dHJhX3BhZGRpbmdbMzJdOyAgICAgICAvKiBmdXR1cmUgKi8KK307CisK
K3N0cnVjdCB4c2N0cF9yYWRkciB7CisJdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkcmVzczsgICAg
ICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5IDEvMiAqLworCXVpbnQzMl90IGxhc3Q7CisJdWlu
dDMyX3QgcnRvOyAgICAgICAgICAgICAgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVudHJ5
IDUgICAqLworCXVpbnQzMl90IG1heF9wYXRoX3J0eDsgICAgICAgICAgICAgLyogc2N0cEFzc29j
TG9jYWxSZW1FbnRyeSA2ICAgKi8KKwl1aW50MzJfdCBydHg7ICAgICAgICAgICAgICAgICAgICAg
IC8qIHNjdHBBc3NvY0xvY2FsUmVtRW50cnkgNyAgICovCisJdWludDMyX3QgZXJyb3JfY291bnRl
cjsgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90
IGN3bmQ7ICAgICAgICAgICAgICAgICAgICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Ki8KKwl1aW50MzJfdCBmbGlnaHRfc2l6ZTsgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICovCisJdWludDMyX3QgbXR1OyAgICAgICAgICAgICAgICAgICAgICAvKiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQ4X3QgYWN0aXZlOyAgICAgICAgICAg
ICAgICAgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSAzICAgKi8KKwl1aW50OF90IGNvbmZp
cm1lZDsgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJ
dWludDhfdCBoZWFydGJlYXRfZW5hYmxlZDsgICAgICAgICAvKiBzY3RwQXNzb2NMb2NhbFJlbUVu
dHJ5IDQgICAqLworCXVpbnQ4X3QgcG90ZW50aWFsbHlfZmFpbGVkOworCXN0cnVjdCBzY3RwX3Rp
bWV2YWwgc3RhcnRfdGltZTsgICAgLyogc2N0cEFzc29jTG9jYWxSZW1FbnRyeSA4ICAgKi8KKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAor
CXVpbnQzMl90IHJ0dDsKKwl1aW50MzJfdCBoZWFydGJlYXRfaW50ZXJ2YWw7CisJdWludDMyX3Qg
c3N0aHJlc2g7CisJdWludDE2X3QgZW5jYXBzX3BvcnQ7CisJdWludDE2X3Qgc3RhdGU7CisJdWlu
dDMyX3QgZXh0cmFfcGFkZGluZ1syOV07ICAgICAgICAgICAgICAvKiBmdXR1cmUgKi8KKyNlbmRp
ZgorI2Vsc2UKKwl1aW50MzJfdCBydHQ7CisJdWludDMyX3QgaGVhcnRiZWF0X2ludGVydmFsOwor
CXVpbnQzMl90IHNzdGhyZXNoOworCXVpbnQxNl90IGVuY2Fwc19wb3J0OworCXVpbnQxNl90IHN0
YXRlOworCXVpbnQzMl90IGV4dHJhX3BhZGRpbmdbMjldOyAgICAgICAgICAgICAgLyogZnV0dXJl
ICovCisjZW5kaWYKK307CisKKyNkZWZpbmUgU0NUUF9NQVhfTE9HR0lOR19TSVpFIDMwMDAwCisj
ZGVmaW5lIFNDVFBfVFJBQ0VfUEFSQU1TIDYgICAgICAgICAgICAgICAgLyogVGhpcyBudW1iZXIg
TVVTVCBiZSBldmVuICAgKi8KKworc3RydWN0IHNjdHBfbG9nX2VudHJ5IHsKKwl1aW50NjRfdCB0
aW1lc3RhbXA7CisJdWludDMyX3Qgc3Vic3lzOworCXVpbnQzMl90IHBhZGRpbmc7CisJdWludDMy
X3QgcGFyYW1zW1NDVFBfVFJBQ0VfUEFSQU1TXTsKK307CisKK3N0cnVjdCBzY3RwX2xvZyB7CisJ
c3RydWN0IHNjdHBfbG9nX2VudHJ5IGVudHJ5W1NDVFBfTUFYX0xPR0dJTkdfU0laRV07CisJdWlu
dDMyX3QgaW5kZXg7CisJdWludDMyX3QgcGFkZGluZzsKK307CisKKy8qCisgKiBLZXJuZWwgZGVm
aW5lZCBmb3Igc2N0cF9zZW5kCisgKi8KKyNpZiBkZWZpbmVkKF9LRVJORUwpIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK2ludAorc2N0cF9sb3dlcl9zb3NlbmQoc3RydWN0IHNvY2tldCAqc28s
CisgICAgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgIHN0cnVjdCB1aW8gKnVpbywKKyNpZiBk
ZWZpbmVkKF9fUGFuZGFfXykKKyAgICBwYWtoYW5kbGVfdHlwZSBpX3BhaywKKyAgICBwYWtoYW5k
bGVfdHlwZSBpX2NvbnRyb2wsCisjZWxzZQorICAgIHN0cnVjdCBtYnVmICppX3BhaywKKyAgICBz
dHJ1Y3QgbWJ1ZiAqY29udHJvbCwKKyNlbmRpZgorICAgIGludCBmbGFncywKKyAgICBzdHJ1Y3Qg
c2N0cF9zbmRyY3ZpbmZvICpzcmN2CisjaWYgIShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKSkKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA1MDAwMDAKKyAgICAsc3RydWN0IHRocmVhZCAqcAorI2VsaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKKyAgICAsIFBLVEhSRUFEIHAKKyNlbHNlCisgICAgLHN0cnVjdCBwcm9jICpw
CisjZW5kaWYKKyNlbmRpZgorKTsKKworaW50CitzY3RwX3NvcmVjdm1zZyhzdHJ1Y3Qgc29ja2V0
ICpzbywKKyAgICBzdHJ1Y3QgdWlvICp1aW8sCisjaWYgZGVmaW5lZChfX1BhbmRhX18pCisgICAg
cGFydGljbGV0eXBlICoqbXAsCisjZWxzZQorICAgIHN0cnVjdCBtYnVmICoqbXAsCisjZW5kaWYK
KyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCisgICAgaW50IGZyb21sZW4sCisgICAgaW50ICpt
c2dfZmxhZ3MsCisgICAgc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc2luZm8sCisgICAgaW50IGZp
bGxpbmdfc2luZm8pOworI2VuZGlmCisKKy8qCisgKiBBUEkgc3lzdGVtIGNhbGxzCisgKi8KKyNp
ZiAhKGRlZmluZWQoX0tFUk5FTCkpICYmICEoZGVmaW5lZChfX1VzZXJzcGFjZV9fKSkKKworX19C
RUdJTl9ERUNMUworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
IDwgOTAyMDAwCitpbnQJc2N0cF9wZWVsb2ZmIF9fUCgoaW50LCBzY3RwX2Fzc29jX3QpKTsKK2lu
dAlzY3RwX2JpbmR4IF9fUCgoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBpbnQpKTsKK2lu
dAlzY3RwX2Nvbm5lY3R4IF9fUCgoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBz
Y3RwX2Fzc29jX3QgKikpOworaW50CXNjdHBfZ2V0YWRkcmxlbiBfX1AoKHNhX2ZhbWlseV90KSk7
CitpbnQJc2N0cF9nZXRwYWRkcnMgX19QKChpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2th
ZGRyICoqKSk7Cit2b2lkCXNjdHBfZnJlZXBhZGRycyBfX1AoKHN0cnVjdCBzb2NrYWRkciAqKSk7
CitpbnQJc2N0cF9nZXRsYWRkcnMgX19QKChpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2th
ZGRyICoqKSk7Cit2b2lkCXNjdHBfZnJlZWxhZGRycyBfX1AoKHN0cnVjdCBzb2NrYWRkciAqKSk7
CitpbnQJc2N0cF9vcHRfaW5mbyBfX1AoKGludCwgc2N0cF9hc3NvY190LCBpbnQsIHZvaWQgKiwg
c29ja2xlbl90ICopKTsKKworLyogZGVwcmVjYXRlZCAqLworc3NpemVfdAlzY3RwX3NlbmRtc2cg
X19QKChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwK
KwkgICAgc29ja2xlbl90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwg
dWludDMyX3QpKTsKKworLyogZGVwcmVjYXRlZCAqLworc3NpemVfdAlzY3RwX3NlbmQgX19QKChp
bnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LAorCSAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9zbmRyY3Zp
bmZvICosIGludCkpOworCisvKiBkZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2VuZHggX19Q
KChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50
LCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCkpOworCisvKiBkZXByZWNhdGVkICovCitz
c2l6ZV90CXNjdHBfc2VuZG1zZ3ggX19QKChpbnQgc2QsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90
LCB1aW50MzJfdCwgdWludDMyX3QpKTsKKworc2N0cF9hc3NvY190CXNjdHBfZ2V0YXNzb2NpZCBf
X1AoKGludCwgc3RydWN0IHNvY2thZGRyICopKTsKKworLyogZGVwcmVjYXRlZCAqLworc3NpemVf
dAlzY3RwX3JlY3Ztc2cgX19QKChpbnQsIHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIg
Kiwgc29ja2xlbl90ICosCisJICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwgaW50ICopKTsK
Kworc3NpemVfdAlzY3RwX3NlbmR2IF9fUCgoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50
LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB2b2lkICosIHNvY2tsZW5fdCwgdW5zaWdu
ZWQgaW50LCBpbnQpKTsKKworc3NpemVfdAlzY3RwX3JlY3Z2IF9fUCgoaW50LCBjb25zdCBzdHJ1
Y3QgaW92ZWMgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90ICosIHZv
aWQgKiwgc29ja2xlbl90ICosIHVuc2lnbmVkIGludCAqLCBpbnQgKikpOworI2Vsc2UKK2ludAlz
Y3RwX3BlZWxvZmYoaW50LCBzY3RwX2Fzc29jX3QpOworaW50CXNjdHBfYmluZHgoaW50LCBzdHJ1
Y3Qgc29ja2FkZHIgKiwgaW50LCBpbnQpOworaW50CXNjdHBfY29ubmVjdHgoaW50LCBjb25zdCBz
dHJ1Y3Qgc29ja2FkZHIgKiwgaW50LCBzY3RwX2Fzc29jX3QgKik7CitpbnQJc2N0cF9nZXRhZGRy
bGVuKHNhX2ZhbWlseV90KTsKK2ludAlzY3RwX2dldHBhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwg
c3RydWN0IHNvY2thZGRyICoqKTsKK3ZvaWQJc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRk
ciAqKTsKK2ludAlzY3RwX2dldGxhZGRycyhpbnQsIHNjdHBfYXNzb2NfdCwgc3RydWN0IHNvY2th
ZGRyICoqKTsKK3ZvaWQJc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqKTsKK2ludAlz
Y3RwX29wdF9pbmZvKGludCwgc2N0cF9hc3NvY190LCBpbnQsIHZvaWQgKiwgc29ja2xlbl90ICop
OworCisvKiBkZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2VuZG1zZyhpbnQsIGNvbnN0IHZv
aWQgKiwgc2l6ZV90LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90LCB1
aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCisvKiBk
ZXByZWNhdGVkICovCitzc2l6ZV90CXNjdHBfc2VuZChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90
LAorCSAgICBjb25zdCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGludCk7CisKKy8qIGRlcHJl
Y2F0ZWQgKi8KK3NzaXplX3QJc2N0cF9zZW5keChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBz
dHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICosIGlu
dCk7CisKKy8qIGRlcHJlY2F0ZWQgKi8KK3NzaXplX3QJc2N0cF9zZW5kbXNneChpbnQgc2QsIGNv
bnN0IHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB1aW50MzJf
dCwgdWludDMyX3QsIHVpbnQxNl90LCB1aW50MzJfdCwgdWludDMyX3QpOworCitzY3RwX2Fzc29j
X3QJc2N0cF9nZXRhc3NvY2lkKGludCwgc3RydWN0IHNvY2thZGRyICopOworCisvKiBkZXByZWNh
dGVkICovCitzc2l6ZV90CXNjdHBfcmVjdm1zZyhpbnQsIHZvaWQgKiwgc2l6ZV90LCBzdHJ1Y3Qg
c29ja2FkZHIgKiwgc29ja2xlbl90ICosCisJICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gKiwg
aW50ICopOworCitzc2l6ZV90CXNjdHBfc2VuZHYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwg
aW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgaW50LCB2b2lkICosIHNvY2tsZW5fdCwgdW5z
aWduZWQgaW50LCBpbnQpOworCitzc2l6ZV90CXNjdHBfcmVjdnYoaW50LCBjb25zdCBzdHJ1Y3Qg
aW92ZWMgKiwgaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkgICAgc29ja2xlbl90ICosIHZvaWQg
Kiwgc29ja2xlbl90ICosIHVuc2lnbmVkIGludCAqLCBpbnQgKik7CisjZW5kaWYKK19fRU5EX0RF
Q0xTCisKKyNlbmRpZgkJCQkvKiAhX0tFUk5FTCAqLworI2VuZGlmCQkJCS8qICFfX3NjdHBfdWlv
X2hfXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdXNl
cnNwYWNlLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwpp
bmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi42ZmNjMDhkMTZk
MzM3ZDk5ZTEyYjQ1NzdiMmEwOGIyNzUzNGJhYjYxIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cF91c2Vyc3BhY2UuYwpAQCAtMCwwICsxLDM2NCBAQAorLyotCisgKiBDb3B5
cmlnaHQgKGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIKKyAqIENvcHlyaWdodCAoYykgMjAx
MS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisK
KyNpZmRlZiBfV0lOMzIKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8
c3lzL3RpbWViLmg+CisjaW5jbHVkZSA8aXBobHBhcGkuaD4KKyNwcmFnbWEgY29tbWVudChsaWIs
ICJJUEhMUEFQSS5saWIiKQorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX3VzZXJz
cGFjZS5oPgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKyNpbmNsdWRlIDxw
dGhyZWFkX25wLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfTGludXgp
CisjaW5jbHVkZSA8c3lzL3ByY3RsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKy8qIEFkYXB0ZXIgdG8gdHJhbnNsYXRlIFVuaXggdGhyZWFkIHN0YXJ0
IHJvdXRpbmVzIHRvIFdpbmRvd3MgdGhyZWFkIHN0YXJ0CisgKiByb3V0aW5lcy4KKyAqLworc3Rh
dGljIERXT1JEIFdJTkFQSQorc2N0cF9jcmVhdGVfdGhyZWFkX2FkYXB0ZXIodm9pZCAqYXJnKSB7
CisJc3RhcnRfcm91dGluZV90IHN0YXJ0X3JvdXRpbmUgPSAoc3RhcnRfcm91dGluZV90KWFyZzsK
KwlyZXR1cm4gc3RhcnRfcm91dGluZShOVUxMKSA9PSBOVUxMOworfQorCitpbnQKK3NjdHBfdXNl
cnNwYWNlX3RocmVhZF9jcmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVhZCwgc3RhcnRfcm91
dGluZV90IHN0YXJ0X3JvdXRpbmUpCit7CisJKnRocmVhZCA9IENyZWF0ZVRocmVhZChOVUxMLCAw
LCBzY3RwX2NyZWF0ZV90aHJlYWRfYWRhcHRlciwKKwkJCSAgICAgICAodm9pZCAqKXN0YXJ0X3Jv
dXRpbmUsIDAsIE5VTEwpOworCWlmICgqdGhyZWFkID09IE5VTEwpCisJCXJldHVybiBHZXRMYXN0
RXJyb3IoKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCitpbnQKK3NjdHBfdXNlcnNwYWNlX3RocmVh
ZF9jcmVhdGUodXNlcmxhbmRfdGhyZWFkX3QgKnRocmVhZCwgc3RhcnRfcm91dGluZV90IHN0YXJ0
X3JvdXRpbmUpCit7CisJcmV0dXJuIHB0aHJlYWRfY3JlYXRlKHRocmVhZCwgTlVMTCwgc3RhcnRf
cm91dGluZSwgTlVMTCk7Cit9CisjZW5kaWYKKwordm9pZAorc2N0cF91c2Vyc3BhY2Vfc2V0X3Ro
cmVhZG5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RhcndpbikKKwlwdGhyZWFkX3NldG5hbWVfbnAobmFtZSk7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX0xpbnV4KQorCXByY3RsKFBSX1NFVF9OQU1FLCBuYW1lKTsKKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKwlwdGhyZWFkX3NldF9uYW1l
X25wKHB0aHJlYWRfc2VsZigpLCBuYW1lKTsKKyNlbmRpZgorfQorCisjaWYgIWRlZmluZWQoX1dJ
TjMyKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OYUNsKQoraW50CitzY3RwX3VzZXJzcGFj
ZV9nZXRfbXR1X2Zyb21faWZuKHVpbnQzMl90IGlmX2luZGV4LCBpbnQgYWYpCit7CisJc3RydWN0
IGlmcmVxIGlmcjsKKwlpbnQgZmQ7CisKKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKHN0cnVjdCBp
ZnJlcSkpOworCWlmIChpZl9pbmRleHRvbmFtZShpZl9pbmRleCwgaWZyLmlmcl9uYW1lKSAhPSBO
VUxMKSB7CisJCS8qIFRPRE8gY2FuIEkgdXNlIHRoZSByYXcgc29ja2V0IGhlcmUgYW5kIG5vdCBo
YXZlIHRvIG9wZW4gYSBuZXcgb25lIHdpdGggZWFjaCBxdWVyeT8gKi8KKwkJaWYgKChmZCA9IHNv
Y2tldChhZiwgU09DS19ER1JBTSwgMCkpIDwgMCkKKwkJCXJldHVybiAoMCk7CisJCWlmIChpb2N0
bChmZCwgU0lPQ0dJRk1UVSwgJmlmcikgPCAwKSB7CisJCQljbG9zZShmZCk7CisJCQlyZXR1cm4g
KDApOworCQl9CisJCWNsb3NlKGZkKTsKKwkJcmV0dXJuIGlmci5pZnJfbXR1OworCX0gZWxzZSB7
CisJCXJldHVybiAoMCk7CisJfQorfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X29zX05hQ2wpCitpbnQKK3NjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3Qg
aWZfaW5kZXgsIGludCBhZikKK3sKKwlyZXR1cm4gMTI4MDsKK30KKyNlbmRpZgorCisjaWZkZWYg
X1dJTjMyCitpbnQKK3NjdHBfdXNlcnNwYWNlX2dldF9tdHVfZnJvbV9pZm4odWludDMyX3QgaWZf
aW5kZXgsIGludCBhZikKK3sKKwlQSVBfQURBUFRFUl9BRERSRVNTRVMgcEFkYXB0ZXJBZGRycywg
cEFkYXB0OworCURXT1JEIEFkYXB0ZXJBZGRyc1NpemUsIEVycjsKKwlpbnQgcmV0OworCisJcmV0
ID0gMDsKKwlBZGFwdGVyQWRkcnNTaXplID0gMDsKKwlwQWRhcHRlckFkZHJzID0gTlVMTDsKKwlp
ZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVMTCwgTlVMTCwg
JkFkYXB0ZXJBZGRyc1NpemUpKSAhPSAwKSB7CisJCWlmICgoRXJyICE9IEVSUk9SX0JVRkZFUl9P
VkVSRkxPVykgJiYgKEVyciAhPSBFUlJPUl9JTlNVRkZJQ0lFTlRfQlVGRkVSKSkgeworCQkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkdldEFkYXB0ZXJzQWRkcmVzc2VzKCkgc2l6aW5nIGZhaWxl
ZCB3aXRoIGVycm9yIGNvZGUgJWQsIEFkYXB0ZXJBZGRyc1NpemUgPSAlZFxuIiwgRXJyLCBBZGFw
dGVyQWRkcnNTaXplKTsKKwkJCXJldCA9IC0xOworCQkJZ290byBjbGVhbnVwOworCQl9CisJfQor
CWlmICgocEFkYXB0ZXJBZGRycyA9IChQSVBfQURBUFRFUl9BRERSRVNTRVMpIEdsb2JhbEFsbG9j
KEdQVFIsIEFkYXB0ZXJBZGRyc1NpemUpKSA9PSBOVUxMKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJNZW1vcnkgYWxsb2NhdGlvbiBlcnJvciFcbiIpOworCQlyZXQgPSAtMTsKKwkJZ290
byBjbGVhbnVwOworCX0KKwlpZiAoKEVyciA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BF
QywgMCwgTlVMTCwgcEFkYXB0ZXJBZGRycywgJkFkYXB0ZXJBZGRyc1NpemUpKSAhPSBFUlJPUl9T
VUNDRVNTKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJHZXRBZGFwdGVyc0FkZHJlc3Nl
cygpIGZhaWxlZCB3aXRoIGVycm9yIGNvZGUgJWRcbiIsIEVycik7CisJCXJldCA9IC0xOworCQln
b3RvIGNsZWFudXA7CisJfQorCWZvciAocEFkYXB0ID0gcEFkYXB0ZXJBZGRyczsgcEFkYXB0OyBw
QWRhcHQgPSBwQWRhcHQtPk5leHQpIHsKKwkJaWYgKHBBZGFwdC0+SWZJbmRleCA9PSBpZl9pbmRl
eCkgeworCQkJcmV0ID0gcEFkYXB0LT5NdHU7CisJCQlicmVhazsKKwkJfQorCX0KK2NsZWFudXA6
CisJaWYgKHBBZGFwdGVyQWRkcnMgIT0gTlVMTCkgeworCQlHbG9iYWxGcmVlKHBBZGFwdGVyQWRk
cnMpOworCX0KKwlyZXR1cm4gKHJldCk7Cit9CisKK3ZvaWQKK2dldHdpbnRpbWVvZmRheShzdHJ1
Y3QgdGltZXZhbCAqdHYpCit7CisJc3RydWN0IHRpbWViIHRiOworCisJZnRpbWUoJnRiKTsKKwl0
di0+dHZfc2VjID0gKGxvbmcpdGIudGltZTsKKwl0di0+dHZfdXNlYyA9IChsb25nKSh0Yi5taWxs
aXRtKSAqIDEwMDBMOworfQorCitpbnQKK3dpbl9pZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICpp
Zm5hbWUpCit7CisJSVBfQURBUFRFUl9BRERSRVNTRVMgKmFkZHJlc3NlcywgKmFkZHI7CisJVUxP
Tkcgc3RhdHVzLCBzaXplOworCWludCBpbmRleCA9IDA7CisKKwlpZiAoIWlmbmFtZSkgeworCQly
ZXR1cm4gMDsKKwl9CisKKwlzaXplID0gMDsKKwlzdGF0dXMgPSBHZXRBZGFwdGVyc0FkZHJlc3Nl
cyhBRl9VTlNQRUMsIDAsIE5VTEwsIE5VTEwsICZzaXplKTsKKwlpZiAoc3RhdHVzICE9IEVSUk9S
X0JVRkZFUl9PVkVSRkxPVykgeworCQlyZXR1cm4gMDsKKwl9CisJYWRkcmVzc2VzID0gbWFsbG9j
KHNpemUpOworCXN0YXR1cyA9IEdldEFkYXB0ZXJzQWRkcmVzc2VzKEFGX1VOU1BFQywgMCwgTlVM
TCwgYWRkcmVzc2VzLCAmc2l6ZSk7CisJaWYgKHN0YXR1cyA9PSBFUlJPUl9TVUNDRVNTKSB7CisJ
CWZvciAoYWRkciA9IGFkZHJlc3NlczsgYWRkcjsgYWRkciA9IGFkZHItPk5leHQpIHsKKwkJCWlm
IChhZGRyLT5BZGFwdGVyTmFtZSAmJiAhc3RyY21wKGlmbmFtZSwgYWRkci0+QWRhcHRlck5hbWUp
KSB7CisJCQkJaW5kZXggPSBhZGRyLT5JZkluZGV4OworCQkJCWJyZWFrOworCQkJfQorCQl9CisJ
fQorCisJZnJlZShhZGRyZXNzZXMpOworCXJldHVybiBpbmRleDsKK30KKworI2lmIFdJTlZFUiA8
IDB4MDYwMAorLyogVGhlc2UgZnVuY3Rpb25zIGFyZSB3cml0dGVuIGJhc2VkIG9uIHRoZSBjb2Rl
IGF0CisgKiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC93aW4zMi1jdi0xLmh0bWwK
KyAqIFRoZXJlZm9yZSwgZm9yIHRoZSByZXN0IG9mIHRoZSBmaWxlIHRoZSBmb2xsb3dpbmcgYXBw
bGllczoKKyAqCisgKgorICogQ29weXJpZ2h0IGFuZCBMaWNlbnNpbmcgSW5mb3JtYXRpb24gZm9y
IEFDRShUTSksIFRBTyhUTSksIENJQU8oVE0pLAorICogREFuQ0UoVE0pLCBhbmQgQ29TTUlDKFRN
KQorICoKKyAqIFsxXUFDRShUTSksIFsyXVRBTyhUTSksIFszXUNJQU8oVE0pLCBEQW5DRShUTSks
IGFuZCBbNF1Db1NNSUMoVE0pCisgKiAoaGVuY2Vmb3J0aCByZWZlcnJlZCB0byBhcyAiRE9DIHNv
ZnR3YXJlIikgYXJlIGNvcHlyaWdodGVkIGJ5CisgKiBbNV1Eb3VnbGFzIEMuIFNjaG1pZHQgYW5k
IGhpcyBbNl1yZXNlYXJjaCBncm91cCBhdCBbN11XYXNoaW5ndG9uCisgKiBVbml2ZXJzaXR5LCBb
OF1Vbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIElydmluZSwgYW5kIFs5XVZhbmRlcmJpbHQKKyAq
IFVuaXZlcnNpdHksIENvcHlyaWdodCAoYykgMTk5My0yMDEyLCBhbGwgcmlnaHRzIHJlc2VydmVk
LiBTaW5jZSBET0MKKyAqIHNvZnR3YXJlIGlzIG9wZW4tc291cmNlLCBmcmVlbHkgYXZhaWxhYmxl
IHNvZnR3YXJlLCB5b3UgYXJlIGZyZWUgdG8KKyAqIHVzZSwgbW9kaWZ5LCBjb3B5LCBhbmQgZGlz
dHJpYnV0ZS0tcGVycGV0dWFsbHkgYW5kIGlycmV2b2NhYmx5LS10aGUKKyAqIERPQyBzb2Z0d2Fy
ZSBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgcHJvZHVjZWQgZnJvbSB0aGUgc291cmNlLCBh
cworICogd2VsbCBhcyBjb3B5IGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRo
aXMgc29mdHdhcmUuIFlvdQorICogbXVzdCwgaG93ZXZlciwgaW5jbHVkZSB0aGlzIGNvcHlyaWdo
dCBzdGF0ZW1lbnQgYWxvbmcgd2l0aCBhbnkgY29kZQorICogYnVpbHQgdXNpbmcgRE9DIHNvZnR3
YXJlIHRoYXQgeW91IHJlbGVhc2UuIE5vIGNvcHlyaWdodCBzdGF0ZW1lbnQKKyAqIG5lZWRzIHRv
IGJlIHByb3ZpZGVkIGlmIHlvdSBqdXN0IHNoaXAgYmluYXJ5IGV4ZWN1dGFibGVzIG9mIHlvdXIK
KyAqIHNvZnR3YXJlIHByb2R1Y3RzLgorICoKKyAqIFlvdSBjYW4gdXNlIERPQyBzb2Z0d2FyZSBp
biBjb21tZXJjaWFsIGFuZC9vciBiaW5hcnkgc29mdHdhcmUgcmVsZWFzZXMKKyAqIGFuZCBhcmUg
dW5kZXIgbm8gb2JsaWdhdGlvbiB0byByZWRpc3RyaWJ1dGUgYW55IG9mIHlvdXIgc291cmNlIGNv
ZGUKKyAqIHRoYXQgaXMgYnVpbHQgdXNpbmcgRE9DIHNvZnR3YXJlLiBOb3RlLCBob3dldmVyLCB0
aGF0IHlvdSBtYXkgbm90CisgKiBtaXNhcHByb3ByaWF0ZSB0aGUgRE9DIHNvZnR3YXJlIGNvZGUs
IHN1Y2ggYXMgY29weXJpZ2h0aW5nIGl0IHlvdXJzZWxmCisgKiBvciBjbGFpbWluZyBhdXRob3Jz
aGlwIG9mIHRoZSBET0Mgc29mdHdhcmUgY29kZSwgaW4gYSB3YXkgdGhhdCB3aWxsCisgKiBwcmV2
ZW50IERPQyBzb2Z0d2FyZSBmcm9tIGJlaW5nIGRpc3RyaWJ1dGVkIGZyZWVseSB1c2luZyBhbgor
ICogb3Blbi1zb3VyY2UgZGV2ZWxvcG1lbnQgbW9kZWwuIFlvdSBuZWVkbid0IGluZm9ybSBhbnlv
bmUgdGhhdCB5b3UncmUKKyAqIHVzaW5nIERPQyBzb2Z0d2FyZSBpbiB5b3VyIHNvZnR3YXJlLCB0
aG91Z2ggd2UgZW5jb3VyYWdlIHlvdSB0byBsZXQKKyAqIFsxMF11cyBrbm93IHNvIHdlIGNhbiBw
cm9tb3RlIHlvdXIgcHJvamVjdCBpbiB0aGUgWzExXURPQyBzb2Z0d2FyZQorICogc3VjY2VzcyBz
dG9yaWVzLgorICoKKyAqIFRoZSBbMTJdQUNFLCBbMTNdVEFPLCBbMTRdQ0lBTywgWzE1XURBbkNF
LCBhbmQgWzE2XUNvU01JQyB3ZWIgc2l0ZXMKKyAqIGFyZSBtYWludGFpbmVkIGJ5IHRoZSBbMTdd
RE9DIEdyb3VwIGF0IHRoZSBbMThdSW5zdGl0dXRlIGZvciBTb2Z0d2FyZQorICogSW50ZWdyYXRl
ZCBTeXN0ZW1zIChJU0lTKSBhbmQgdGhlIFsxOV1DZW50ZXIgZm9yIERpc3RyaWJ1dGVkIE9iamVj
dAorICogQ29tcHV0aW5nIG9mIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgU3QuIExvdWlzIGZvciB0
aGUgZGV2ZWxvcG1lbnQgb2YKKyAqIG9wZW4tc291cmNlIHNvZnR3YXJlIGFzIHBhcnQgb2YgdGhl
IG9wZW4tc291cmNlIHNvZnR3YXJlIGNvbW11bml0eS4KKyAqIFN1Ym1pc3Npb25zIGFyZSBwcm92
aWRlZCBieSB0aGUgc3VibWl0dGVyIGBgYXMgaXMnJyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIHdo
YXRzb2V2ZXIsIGluY2x1ZGluZyBhbnkgd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5LCBub25p
bmZyaW5nZW1lbnQKKyAqIG9mIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSwgb3Ig
Zml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIKKyAqIHB1cnBvc2UuIEluIG5vIGV2ZW50IHNoYWxs
IHRoZSBzdWJtaXR0ZXIgYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LAorICogaW5kaXJlY3QsIHNw
ZWNpYWwsIGV4ZW1wbGFyeSwgcHVuaXRpdmUsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKKyAq
IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGxvc3QgcHJvZml0cywgZXZlbiBpZiBhZHZp
c2VkIG9mIHRoZQorICogcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBMaWtld2lzZSwgRE9D
IHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzCisgKiB3aXRoIG5vIHdhcnJhbnRpZXMgb2YgYW55
IGtpbmQsIGluY2x1ZGluZyB0aGUgd2FycmFudGllcyBvZiBkZXNpZ24sCisgKiBtZXJjaGFudGFi
aWxpdHksIGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwKKyAqIG5vbmluZnJp
bmdlbWVudCwgb3IgYXJpc2luZyBmcm9tIGEgY291cnNlIG9mIGRlYWxpbmcsIHVzYWdlIG9yIHRy
YWRlCisgKiBwcmFjdGljZS4gV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBVQyBJcnZpbmUsIFZhbmRl
cmJpbHQgVW5pdmVyc2l0eSwKKyAqIHRoZWlyIGVtcGxveWVlcywgYW5kIHN0dWRlbnRzIHNoYWxs
IGhhdmUgbm8gbGlhYmlsaXR5IHdpdGggcmVzcGVjdCB0bworICogdGhlIGluZnJpbmdlbWVudCBv
ZiBjb3B5cmlnaHRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBwYXRlbnRzIGJ5IERPQworICogc29m
dHdhcmUgb3IgYW55IHBhcnQgdGhlcmVvZi4gTW9yZW92ZXIsIGluIG5vIGV2ZW50IHdpbGwgV2Fz
aGluZ3RvbgorICogVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBvciBWYW5kZXJiaWx0IFVuaXZlcnNp
dHksIHRoZWlyIGVtcGxveWVlcywgb3IKKyAqIHN0dWRlbnRzIGJlIGxpYWJsZSBmb3IgYW55IGxv
c3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIHNwZWNpYWwsCisgKiBpbmRpcmVjdCBhbmQg
Y29uc2VxdWVudGlhbCBkYW1hZ2VzLgorICoKKyAqIERPQyBzb2Z0d2FyZSBpcyBwcm92aWRlZCB3
aXRoIG5vIHN1cHBvcnQgYW5kIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gb24KKyAqIHRoZSBwYXJ0
IG9mIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwgVUMgSXJ2aW5lLCBWYW5kZXJiaWx0IFVuaXZlcnNp
dHksCisgKiB0aGVpciBlbXBsb3llZXMsIG9yIHN0dWRlbnRzIHRvIGFzc2lzdCBpbiBpdHMgdXNl
LCBjb3JyZWN0aW9uLAorICogbW9kaWZpY2F0aW9uLCBvciBlbmhhbmNlbWVudC4gQSBbMjBdbnVt
YmVyIG9mIGNvbXBhbmllcyBhcm91bmQgdGhlCisgKiB3b3JsZCBwcm92aWRlIGNvbW1lcmNpYWwg
c3VwcG9ydCBmb3IgRE9DIHNvZnR3YXJlLCBob3dldmVyLiBET0MKKyAqIHNvZnR3YXJlIGlzIFky
Sy1jb21wbGlhbnQsIGFzIGxvbmcgYXMgdGhlIHVuZGVybHlpbmcgT1MgcGxhdGZvcm0gaXMKKyAq
IFkySy1jb21wbGlhbnQuIExpa2V3aXNlLCBET0Mgc29mdHdhcmUgaXMgY29tcGxpYW50IHdpdGgg
dGhlIG5ldyBVUworICogZGF5bGlnaHQgc2F2aW5ncyBydWxlIHBhc3NlZCBieSBDb25ncmVzcyBh
cyAiVGhlIEVuZXJneSBQb2xpY3kgQWN0IG9mCisgKiAyMDA1LCIgd2hpY2ggZXN0YWJsaXNoZWQg
bmV3IGRheWxpZ2h0IHNhdmluZ3MgdGltZXMgKERTVCkgcnVsZXMgZm9yCisgKiB0aGUgVW5pdGVk
IFN0YXRlcyB0aGF0IGV4cGFuZCBEU1QgYXMgb2YgTWFyY2ggMjAwNy4gU2luY2UgRE9DIHNvZnR3
YXJlCisgKiBvYnRhaW5zIHRpbWUvZGF0ZSBhbmQgY2FsZW5kYXJpbmcgaW5mb3JtYXRpb24gZnJv
bSBvcGVyYXRpbmcgc3lzdGVtcworICogdXNlcnMgd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgdGhl
IG5ldyBEU1QgcnVsZXMgYXMgbG9uZyBhcyB0aGV5CisgKiB1cGdyYWRlIHRoZWlyIG9wZXJhdGlu
ZyBzeXN0ZW1zIGFjY29yZGluZ2x5LgorICoKKyAqIFRoZSBuYW1lcyBBQ0UoVE0pLCBUQU8oVE0p
LCBDSUFPKFRNKSwgREFuQ0UoVE0pLCBDb1NNSUMoVE0pLAorICogV2FzaGluZ3RvbiBVbml2ZXJz
aXR5LCBVQyBJcnZpbmUsIGFuZCBWYW5kZXJiaWx0IFVuaXZlcnNpdHksIG1heSBub3QKKyAqIGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIGRlcml2ZWQg
ZnJvbSB0aGlzCisgKiBzb3VyY2Ugd2l0aG91dCBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBm
cm9tIFdhc2hpbmd0b24gVW5pdmVyc2l0eSwKKyAqIFVDIElydmluZSwgb3IgVmFuZGVyYmlsdCBV
bml2ZXJzaXR5LiBUaGlzIGxpY2Vuc2UgZ3JhbnRzIG5vIHBlcm1pc3Npb24KKyAqIHRvIGNhbGwg
cHJvZHVjdHMgb3Igc2VydmljZXMgZGVyaXZlZCBmcm9tIHRoaXMgc291cmNlIEFDRShUTSksCisg
KiBUQU8oVE0pLCBDSUFPKFRNKSwgREFuQ0UoVE0pLCBvciBDb1NNSUMoVE0pLCBub3IgZG9lcyBp
dCBncmFudAorICogcGVybWlzc2lvbiBmb3IgdGhlIG5hbWUgV2FzaGluZ3RvbiBVbml2ZXJzaXR5
LCBVQyBJcnZpbmUsIG9yCisgKiBWYW5kZXJiaWx0IFVuaXZlcnNpdHkgdG8gYXBwZWFyIGluIHRo
ZWlyIG5hbWVzLgorICoKKyAqIElmIHlvdSBoYXZlIGFueSBzdWdnZXN0aW9ucywgYWRkaXRpb25z
LCBjb21tZW50cywgb3IgcXVlc3Rpb25zLCBwbGVhc2UKKyAqIGxldCBbMjFdbWUga25vdy4KKyAq
CisgKiBbMjJdRG91Z2xhcyBDLiBTY2htaWR0CisgKgorICogUmVmZXJlbmNlcworICoKKyAqICAx
LiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2NobWlkdC9BQ0UuaHRtbAorICogIDIuIGh0dHA6
Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L1RBTy5odG1sCisgKiAgMy4gaHR0cDovL3d3dy5k
cmUudmFuZGVyYmlsdC5lZHUvQ0lBTy8KKyAqICA0LiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0
LmVkdS9jb3NtaWMvCisgKiAgNS4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvfnNjaG1p
ZHQvCisgKiAgNi4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNjaG1pZHQvQUNFLW1lbWJlcnMu
aHRtbAorICogIDcuIGh0dHA6Ly93d3cud3VzdGwuZWR1LworICogIDguIGh0dHA6Ly93d3cudWNp
LmVkdS8KKyAqICA5LiBodHRwOi8vd3d3LnZhbmRlcmJpbHQuZWR1LworICogMTAuIG1haWx0bzpk
b2NfZ3JvdXBAY3Mud3VzdGwuZWR1CisgKiAxMS4gaHR0cDovL3d3dy5jcy53dXN0bC5lZHUvfnNj
aG1pZHQvQUNFLXVzZXJzLmh0bWwKKyAqIDEyLiBodHRwOi8vd3d3LmNzLnd1c3RsLmVkdS9+c2No
bWlkdC9BQ0UuaHRtbAorICogMTMuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L1RB
Ty5odG1sCisgKiAxNC4gaHR0cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvQ0lBTy8KKyAqIDE1
LiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0LmVkdS9+c2NobWlkdC9ET0NfUk9PVC9EQW5DRS8K
KyAqIDE2LiBodHRwOi8vd3d3LmRyZS52YW5kZXJiaWx0LmVkdS9jb3NtaWMvCisgKiAxNy4gaHR0
cDovL3d3dy5kcmUudmFuZGVyYmlsdC5lZHUvCisgKiAxOC4gaHR0cDovL3d3dy5pc2lzLnZhbmRl
cmJpbHQuZWR1LworICogMTkuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2RvYy1j
ZW50ZXIuaHRtbAorICogMjAuIGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L35zY2htaWR0L2NvbW1l
cmNpYWwtc3VwcG9ydC5odG1sCisgKiAyMS4gbWFpbHRvOmQuc2NobWlkdEB2YW5kZXJiaWx0LmVk
dQorICogMjIuIGh0dHA6Ly93d3cuZHJlLnZhbmRlcmJpbHQuZWR1L35zY2htaWR0LworICogMjMu
IGh0dHA6Ly93d3cuY3Mud3VzdGwuZWR1L0FDRS5odG1sCisgKi8KKwordm9pZAorSW5pdGlhbGl6
ZVhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICpjdikKK3sKKwljdi0+d2FpdGVy
c19jb3VudCA9IDA7CisJSW5pdGlhbGl6ZUNyaXRpY2FsU2VjdGlvbigmKGN2LT53YWl0ZXJzX2Nv
dW50X2xvY2spKTsKKwljdi0+ZXZlbnRzX1tDX1NJR05BTF0gPSBDcmVhdGVFdmVudCAoTlVMTCwg
RkFMU0UsIEZBTFNFLCBOVUxMKTsKKwljdi0+ZXZlbnRzX1tDX0JST0FEQ0FTVF0gPSBDcmVhdGVF
dmVudCAoTlVMTCwgVFJVRSwgRkFMU0UsIE5VTEwpOworfQorCit2b2lkCitEZWxldGVYUENvbmRp
dGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRfdCAqY3YpCit7CisJQ2xvc2VIYW5kbGUoY3YtPmV2
ZW50c19bQ19CUk9BRENBU1RdKTsKKwlDbG9zZUhhbmRsZShjdi0+ZXZlbnRzX1tDX1NJR05BTF0p
OworCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmKGN2LT53YWl0ZXJzX2NvdW50X2xvY2spKTsKK30K
KworaW50CitTbGVlcFhQQ29uZGl0aW9uVmFyaWFibGUodXNlcmxhbmRfY29uZF90ICpjdiwgdXNl
cmxhbmRfbXV0ZXhfdCAqbXR4KQoreworCWludCByZXN1bHQsIGxhc3Rfd2FpdGVyOworCisJRW50
ZXJDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2spOworCWN2LT53YWl0ZXJz
X2NvdW50Kys7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2NvdW50X2xvY2sp
OworCUxlYXZlQ3JpdGljYWxTZWN0aW9uIChtdHgpOworCXJlc3VsdCA9IFdhaXRGb3JNdWx0aXBs
ZU9iamVjdHMoMiwgY3YtPmV2ZW50c18sIEZBTFNFLCBJTkZJTklURSk7CisJaWYgKHJlc3VsdD09
LTEpIHsKKwkJcmVzdWx0ID0gR2V0TGFzdEVycm9yKCk7CisJfQorCUVudGVyQ3JpdGljYWxTZWN0
aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKKwljdi0+d2FpdGVyc19jb3VudC0tOworCWxh
c3Rfd2FpdGVyID0gcmVzdWx0ID09IChDX1NJR05BTCArIENfQlJPQURDQVNUICYmIChjdi0+d2Fp
dGVyc19jb3VudCA9PSAwKSk7CisJTGVhdmVDcml0aWNhbFNlY3Rpb24oJmN2LT53YWl0ZXJzX2Nv
dW50X2xvY2spOworCWlmIChsYXN0X3dhaXRlcikKKwkJUmVzZXRFdmVudChjdi0+ZXZlbnRzX1tD
X0JST0FEQ0FTVF0pOworCUVudGVyQ3JpdGljYWxTZWN0aW9uIChtdHgpOworCXJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQKK1dha2VBbGxYUENvbmRpdGlvblZhcmlhYmxlKHVzZXJsYW5kX2NvbmRf
dCAqY3YpCit7CisJaW50IGhhdmVfd2FpdGVyczsKKwlFbnRlckNyaXRpY2FsU2VjdGlvbigmY3Yt
PndhaXRlcnNfY291bnRfbG9jayk7CisJaGF2ZV93YWl0ZXJzID0gY3YtPndhaXRlcnNfY291bnQg
PiAwOworCUxlYXZlQ3JpdGljYWxTZWN0aW9uKCZjdi0+d2FpdGVyc19jb3VudF9sb2NrKTsKKwlp
ZiAoaGF2ZV93YWl0ZXJzKQorCQlTZXRFdmVudCAoY3YtPmV2ZW50c19bQ19CUk9BRENBU1RdKTsK
K30KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGlu
ZXQvc2N0cF91c3JyZXEuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJl
cS5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmJiNWVh
OGUwYjAwOTE2NmIyZTQ1ZjIxYjc5ZDIzODM0OWNhYjY0OTQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9U
aGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX3VzcnJlcS5jCkBAIC0wLDAgKzEsOTA0OCBAQAorLyotCisgKiBTUERY
LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAy
MDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
IG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhl
IG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBU
SEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNs
dWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9z
Y3RwX3VzcnJlcS5jIDMzNDcyNSAyMDE4LTA2LTA2IDE5OjI3OjA2WiB0dWV4ZW4gJCIpOworI2Vu
ZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpZmRlZiBfX0ZyZWVCU0RfXwor
I2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfcGNi
Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2hlYWRlci5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF92YXIuaD4KKyNpZmRlZiBJTkVUNgorI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5o
PgorI2VuZGlmCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF9vdXRwdXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfdWlvLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2FzY29uZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwu
aD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX3RpbWVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfYnNkX2FkZHIuaD4KKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2NhbGxvdXQuaD4KKyNlbHNlCisjaW5jbHVkZSA8bmV0aW5ldC91
ZHAuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1NDVFBfUEVFTE9GRl9TT0NLT1BUKQor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wZWVsb2ZmLmg+CisjZW5kaWYJCQkJLyogSEFWRV9TQ1RQ
X1BFRUxPRkZfU09DS09QVCAqLworCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisjZGVmaW5lIEFQ
UExFX0ZJTEVfTk8gNworI2VuZGlmCisKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2N0cF9jY19mdW5j
dGlvbnMgc2N0cF9jY19mdW5jdGlvbnNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2N0cF9zc19m
dW5jdGlvbnMgc2N0cF9zc19mdW5jdGlvbnNbXTsKKwordm9pZAorI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2VfXykKK3NjdHBfaW5pdCh1aW50MTZfdCBwb3J0LAorICAgICAgICAgIGludCAoKmNvbm5f
b3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpidWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3Qg
dG9zLCB1aW50OF90IHNldF9kZiksCisgICAgICAgICAgdm9pZCAoKmRlYnVnX3ByaW50ZikoY29u
c3QgY2hhciAqZm9ybWF0LCAuLi4pKQorI2VsaWYgZGVmaW5lZChfX0FQUExFX18pICYmICghZGVm
aW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYhZGVm
aW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VOVEFJTkxJT04pKQorc2N0cF9p
bml0KHN0cnVjdCBwcm90b3N3ICpwcCBTQ1RQX1VOVVNFRCwgc3RydWN0IGRvbWFpbiAqZHAgU0NU
UF9VTlVTRUQpCisjZWxzZQorc2N0cF9pbml0KHZvaWQpCisjZW5kaWYKK3sKKyNpZiAhZGVmaW5l
ZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJdV9sb25nIHNiX21heF9h
ZGo7CisKKyNlbmRpZgorCS8qIEluaXRpYWxpemUgYW5kIG1vZGlmeSB0aGUgc3lzY3RsZWQgdmFy
aWFibGVzICovCisJc2N0cF9pbml0X3N5c2N0bHMoKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX05hQ2wpCisJc3JhbmQoKHVuc2lnbmVkIGludCl0aW1lKE5VTEwpKTsKKyNlbHNl
CisJc3JhbmRvbShnZXRwaWQoKSk7IC8qIHNvIGlucC0+c2N0cF9lcC5yYW5kb21fbnVtYmVycyBh
cmUgdHJ1bHkgcmFuZG9tLi4uICovCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19QYW5k
YV9fKQorCXNjdHBfc2VuZHNwYWNlID0gU0JfTUFYOworCXNjdHBfcmVjdnNwYWNlID0gU0JfTUFY
OworCisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3VkcF90dW5uZWxpbmdfcG9ydCkgPSBwb3J0OworI2Vsc2UKKyNpZiAhZGVmaW5lZChfX0FQUExF
X18pCisJaWYgKChubWJjbHVzdGVycyAvIDgpID4gU0NUUF9BU09DX01BWF9DSFVOS1NfT05fUVVF
VUUpCisJCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9tYXhfY2h1bmtzX29uX3F1ZXVlKSA9IChubWJj
bHVzdGVycyAvIDgpOworI2VuZGlmCisJLyoKKwkgKiBBbGxvdyBhIHVzZXIgdG8gdGFrZSBubyBt
b3JlIHRoYW4gMS8yIHRoZSBudW1iZXIgb2YgY2x1c3RlcnMgb3IKKwkgKiB0aGUgU0JfTUFYIHdo
aWNoZXZlciBpcyBzbWFsbGVyIGZvciB0aGUgc2VuZCB3aW5kb3cuCisJICovCisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisJc2JfbWF4X2FkaiA9ICh1X2xvbmcpKCh1X3F1YWRfdCkgKHNiX21heCkg
KiBNQ0xCWVRFUyAvIChNU0laRSArIE1DTEJZVEVTKSk7CisjZWxzZQorCXNiX21heF9hZGogPSAo
dV9sb25nKSgodV9xdWFkX3QpIChTQl9NQVgpICogTUNMQllURVMgLyAoTVNJWkUgKyBNQ0xCWVRF
UykpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX3NlbmRzcGFjZSkgPSBzYl9tYXhfYWRqOworI2Vsc2UKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfc2VuZHNwYWNlKSA9IG1pbihzYl9tYXhfYWRqLAorCSAgICAoKCh1aW50MzJfdClubWJjbHVz
dGVycyAvIDIpICogU0NUUF9ERUZBVUxUX01BWFNFR01FTlQpKTsKKyNlbmRpZgorCS8qCisJICog
Tm93IGZvciB0aGUgcmVjdiB3aW5kb3csIHNob3VsZCB3ZSB0YWtlIHRoZSBzYW1lIGFtb3VudD8g
b3IKKwkgKiBzaG91bGQgSSBkbyAxLzIgdGhlIFNCX01BWCBpbnN0ZWFkIGluIHRoZSBTQl9NQVgg
bWluIGFib3ZlLiBGb3IKKwkgKiBub3cgSSB3aWxsIGp1c3QgY29weS4KKwkgKi8KKwlTQ1RQX0JB
U0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3Bh
Y2UpOworI2VuZGlmCisJU0NUUF9CQVNFX1ZBUihmaXJzdF90aW1lKSA9IDA7CisJU0NUUF9CQVNF
X1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPSAwOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmIGRlZmluZWQoSU5F
VCkgfHwgZGVmaW5lZChJTkVUNikKKwlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSAt
MTsKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSU5FVAorCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHApID0gLTE7CisJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYp
ID0gLTE7CisJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisjZW5kaWYK
KwlTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZF9zaG91bGRfZXhpdCkgPSAwOworCVNDVFBfQkFT
RV9WQVIoY29ubl9vdXRwdXQpID0gY29ubl9vdXRwdXQ7CisJU0NUUF9CQVNFX1ZBUihkZWJ1Z19w
cmludGYpID0gZGVidWdfcHJpbnRmOworCVNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkg
PSAwOworI2VuZGlmCisJc2N0cF9wY2JfaW5pdCgpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlzY3RwX3N0YXJ0X3RpbWVyKCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKFNDVFBfUEFDS0VU
X0xPR0dJTkcpCisJU0NUUF9CQVNFX1ZBUihwYWNrZXRfbG9nX3dyaXRlcnMpID0gMDsKKwlTQ1RQ
X0JBU0VfVkFSKHBhY2tldF9sb2dfZW5kKSA9IDA7CisJbWVtc2V0KCZTQ1RQX0JBU0VfVkFSKHBh
Y2tldF9sb2dfYnVmZmVyKSwgMCwgU0NUUF9QQUNLRVRfTE9HX1NJWkUpOworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9CQVNFX1ZBUihzY3RwX21haW5fdGltZXJfdGlja3Mp
ID0gMDsKKwlzY3RwX3N0YXJ0X21haW5fdGltZXIoKTsKKwl0aW1lb3V0KHNjdHBfZGVsYXllZF9z
dGFydHVwLCBOVUxMLCAxKTsKKyNlbmRpZgorfQorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KyNpZmRlZiBWSU1BR0UKK3N0YXRpYyB2b2lkCitzY3RwX2ZpbmlzaCh2b2lkICp1bnVzZWQgX191
bnVzZWQpCit7CisJc2N0cF9wY2JfZmluaXNoKCk7Cit9CitWTkVUX1NZU1VOSU5JVChzY3RwLCBT
SV9TVUJfUFJPVE9fRE9NQUlOLCBTSV9PUkRFUl9GT1VSVEgsIHNjdHBfZmluaXNoLCBOVUxMKTsK
KyNlbmRpZgorI2Vsc2UKK3ZvaWQKK3NjdHBfZmluaXNoKHZvaWQpCit7CisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisJdW50aW1lb3V0KHNjdHBfZGVsYXllZF9zdGFydHVwLCBOVUxMKTsKKwlzY3Rw
X292ZXJfdWRwX3N0b3AoKTsKKwlzY3RwX2FkZHJlc3NfbW9uaXRvcl9zdG9wKCk7CisJc2N0cF9z
dG9wX21haW5fdGltZXIoKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNp
ZiBkZWZpbmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJcmVjdl90aHJlYWRfZGVzdHJveSgp
OworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpZiBkZWZp
bmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3JvdXRlKSAhPSAtMSkgeworCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFk
cm91dGUpLCBOVUxMKTsKKwl9CisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIElORVQKKwlpZiAoU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisJCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihy
ZWN2dGhyZWFkcmF3KSwgSU5GSU5JVEUpOworCQlDbG9zZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJl
Y3Z0aHJlYWRyYXcpKTsKKyNlbHNlCisJCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0
aHJlYWRyYXcpLCBOVUxMKTsKKyNlbmRpZgorCX0KKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfdWRwc2N0cCkgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
CisJCVdhaXRGb3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwKSwgSU5G
SU5JVEUpOworCQlDbG9zZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHApKTsKKyNl
bHNlCisJCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHApLCBOVUxMKTsK
KyNlbmRpZgorCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHA2KSAhPSAtMSkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKwkJV2FpdEZvclNpbmdsZU9iamVjdChTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXc2
KSwgSU5GSU5JVEUpOworCQlDbG9zZUhhbmRsZShTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXc2
KSk7CisjZWxzZQorCQlwdGhyZWFkX2pvaW4oU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkcmF3Niks
IE5VTEwpOworI2VuZGlmCisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3Rw
NikgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCVdhaXRG
b3JTaW5nbGVPYmplY3QoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwNiksIElORklOSVRFKTsK
KwkJQ2xvc2VIYW5kbGUoU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwNikpOworI2Vsc2UKKwkJ
cHRocmVhZF9qb2luKFNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHVkcDYpLCBOVUxMKTsKKyNlbmRp
ZgorCX0KKyNlbmRpZgorCWF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfVkFSKHRpbWVyX3Ro
cmVhZF9zaG91bGRfZXhpdCksIDAsIDEpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKwlXYWl0Rm9yU2luZ2xlT2JqZWN0KFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSwg
SU5GSU5JVEUpOworCUNsb3NlSGFuZGxlKFNDVFBfQkFTRV9WQVIodGltZXJfdGhyZWFkKSk7Cisj
ZWxzZQorCXB0aHJlYWRfam9pbihTQ1RQX0JBU0VfVkFSKHRpbWVyX3RocmVhZCksIE5VTEwpOwor
I2VuZGlmCisjZW5kaWYKKwlzY3RwX3BjYl9maW5pc2goKTsKKyNpZiBkZWZpbmVkKF9fV2luZG93
c19fKQorCXNjdHBfZmluaXNoX3N5c2N0bHMoKTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQK
K3NjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qg
bnh0c3opCit7CisJc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrOworCXVpbnQxNl90IG92ZXJo
ZWFkOworCisJLyogQWRqdXN0IHRoYXQgdG9vICovCisJc3RjYi0+YXNvYy5zbWFsbGVzdF9tdHUg
PSBueHRzejsKKwkvKiBub3cgb2ZmIHRvIHN1YnRyYWN0IElQX0RGIGZsYWcgaWYgbmVlZGVkICov
CisJb3ZlcmhlYWQgPSBJUF9IRFJfU0laRSArIHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJaWYg
KHNjdHBfYXV0aF9pc19yZXF1aXJlZF9jaHVuayhTQ1RQX0RBVEEsIHN0Y2ItPmFzb2MucGVlcl9h
dXRoX2NodW5rcykpIHsKKwkJb3ZlcmhlYWQgKz0gc2N0cF9nZXRfYXV0aF9jaHVua19sZW4oc3Rj
Yi0+YXNvYy5wZWVyX2htYWNfaWQpOworCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFz
b2Muc2VuZF9xdWV1ZSwgc2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVy
aGVhZCkgPiBueHRzeikgeworCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9P
SzsKKwkJfQorCX0KKwlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwg
c2N0cF9uZXh0KSB7CisJCWlmICgoY2hrLT5zZW5kX3NpemUgKyBvdmVyaGVhZCkgPiBueHRzeikg
eworCQkJLyoKKwkJCSAqIEZvciB0aGlzIGd1eSB3ZSBhbHNvIG1hcmsgZm9yIGltbWVkaWF0ZSBy
ZXNlbmQKKwkJCSAqIHNpbmNlIHdlIHNlbnQgdG8gYmlnIG9mIGNodW5rCisJCQkgKi8KKwkJCWNo
ay0+ZmxhZ3MgfD0gQ0hVTktfRkxBR1NfRlJBR01FTlRfT0s7CisJCQlpZiAoY2hrLT5zZW50IDwg
U0NUUF9EQVRBR1JBTV9SRVNFTkQpIHsKKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKGNo
ayk7CisJCQkJc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgY2hrKTsKKwkJCQljaGst
PnNlbnQgPSBTQ1RQX0RBVEFHUkFNX1JFU0VORDsKKwkJCQlzY3RwX3Vjb3VudF9pbmNyKHN0Y2It
PmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJCQljaGstPnJlYy5kYXRhLmRvaW5nX2Zh
c3RfcmV0cmFuc21pdCA9IDA7CisJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5n
X2xldmVsKSAmIFNDVFBfRkxJR0hUX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfbWlzY19p
bnRzKFNDVFBfRkxJR0hUX0xPR19ET1dOX1BNVFUsCisJCQkJCQkgICAgICAgY2hrLT53aG9Uby0+
ZmxpZ2h0X3NpemUsCisJCQkJCQkgICAgICAgY2hrLT5ib29rX3NpemUsCisJCQkJCQkgICAgICAg
KHVpbnQzMl90KSh1aW50cHRyX3QpY2hrLT53aG9UbywKKwkJCQkJCSAgICAgICBjaGstPnJlYy5k
YXRhLnRzbik7CisJCQkJfQorCQkJCS8qIENsZWFyIGFueSB0aW1lIHNvIE5PIFJUVCBpcyBiZWlu
ZyBkb25lICovCisJCQkJY2hrLT5kb19ydHQgPSAwOworCQkJfQorCQl9CisJfQorfQorCisjaWZk
ZWYgSU5FVAorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkCitzY3RwX25vdGlmeShz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorICAgICAgICAgICAgc3RydWN0IHNjdHBfdGNiICpzdGNi
LAorICAgICAgICAgICAgc3RydWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgdWludDhf
dCBpY21wX3R5cGUsCisgICAgICAgICAgICB1aW50OF90IGljbXBfY29kZSwKKyAgICAgICAgICAg
IHVpbnQxNl90IGlwX2xlbiwKKyAgICAgICAgICAgIHVpbnQzMl90IG5leHRfbXR1KQoreworI2lm
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCXN0
cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisJaW50IHRpbWVyX3N0b3BwZWQ7CisKKwlpZiAoaWNt
cF90eXBlICE9IElDTVBfVU5SRUFDSCkgeworCQkvKiBXZSBvbmx5IGNhcmUgYWJvdXQgdW5yZWFj
aGFibGUgKi8KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQlyZXR1cm47CisJfQorCWlmICgo
aWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9ORVQpIHx8CisJICAgIChpY21wX2NvZGUgPT0gSUNN
UF9VTlJFQUNIX0hPU1QpIHx8CisJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX05FVF9V
TktOT1dOKSB8fAorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9IT1NUX1VOS05PV04p
IHx8CisJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX0lTT0xBVEVEKSB8fAorCSAgICAo
aWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9ORVRfUFJPSElCKSB8fAorCSAgICAoaWNtcF9jb2Rl
ID09IElDTVBfVU5SRUFDSF9IT1NUX1BST0hJQikgfHwKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykK
KwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfQURNSU4pKSB7CisjZWxpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX05ldEJTRCkKKwkgICAgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hf
QURNSU5fUFJPSElCSVQpKSB7CisjZWxzZQorCSAgICAoaWNtcF9jb2RlID09IElDTVBfVU5SRUFD
SF9GSUxURVJfUFJPSElCKSkgeworI2VuZGlmCisJCS8qIE1hcmsgdGhlIG5ldCB1bnJlYWNoYWJs
ZS4gKi8KKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJ
CS8qIE9LLCB0aGF0IGRlc3RpbmF0aW9uIGlzIE5PVCByZWFjaGFibGUuICovCisJCQluZXQtPmRl
c3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQluZXQtPmRlc3Rfc3RhdGUgJj0g
flNDVFBfQUREUl9QRjsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0Vf
RE9XTiwKKwkJCSAgICAgICAgICAgICAgICBzdGNiLCAwLAorCQkJICAgICAgICAgICAgICAgICh2
b2lkICopbmV0LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQl9CisJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwl9IGVsc2UgIGlmICgoaWNtcF9jb2RlID09IElDTVBfVU5SRUFDSF9QUk9UT0NPTCkg
fHwKKwkJICAgIChpY21wX2NvZGUgPT0gSUNNUF9VTlJFQUNIX1BPUlQpKSB7CisJCS8qIFRyZWF0
IGl0IGxpa2UgYW4gQUJPUlQuICovCisJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0Y2IsIDEs
IDAsIE5VTEwsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsK
KwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworI2Vu
ZGlmCisJCSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0Ms
CisJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xP
Q18yKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJLyogU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOyBNVDogSSB0aGluayB0aGlzIGlzIG5vdCBuZWVkZWQuKi8KKyNlbmRpZgorCQkvKiBu
byBuZWVkIHRvIHVubG9jayBoZXJlLCBzaW5jZSB0aGUgVENCIGlzIGdvbmUgKi8KKwl9IGVsc2Ug
aWYgKGljbXBfY29kZSA9PSBJQ01QX1VOUkVBQ0hfTkVFREZSQUcpIHsKKwkJaWYgKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJcmV0dXJuOworCQl9CisJCS8qIEZpbmQgdGhlIG5leHQgKHNtYWxsZXIpIE1UVSAqLwor
CQlpZiAobmV4dF9tdHUgPT0gMCkgeworCQkJLyoKKwkJCSAqIE9sZCB0eXBlIHJvdXRlciB0aGF0
IGRvZXMgbm90IHRlbGwgdXMgd2hhdCB0aGUgbmV4dAorCQkJICogTVRVIGlzLgorCQkJICogUmF0
cyB3ZSB3aWxsIGhhdmUgdG8gZ3Vlc3MgKGluIGEgZWR1Y2F0ZWQgZmFzaGlvbgorCQkJICogb2Yg
Y291cnNlKS4KKwkJCSAqLworCQkJbmV4dF9tdHUgPSBzY3RwX2dldF9wcmV2X210dShpcF9sZW4p
OworCQl9CisJCS8qIFN0b3AgdGhlIFBNVFUgdGltZXIuICovCisJCWlmIChTQ1RQX09TX1RJTUVS
X1BFTkRJTkcoJm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKKwkJCXRpbWVyX3N0b3BwZWQgPSAx
OworCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwg
c3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFND
VFBfTE9DXzEpOworCQl9IGVsc2UgeworCQkJdGltZXJfc3RvcHBlZCA9IDA7CisJCX0KKwkJLyog
VXBkYXRlIHRoZSBwYXRoIE1UVS4gKi8KKwkJaWYgKG5ldC0+cG9ydCkgeworCQkJbmV4dF9tdHUg
LT0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCWlmIChuZXQtPm10dSA+IG5leHRfbXR1
KSB7CisJCQluZXQtPm10dSA9IG5leHRfbXR1OworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJ
CQlpZiAobmV0LT5wb3J0KSB7CisJCQkJc2N0cF9oY19zZXRfbXR1KCZuZXQtPnJvLl9sX2FkZHIs
IGlucC0+ZmlibnVtLCBuZXh0X210dSArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJCQl9IGVs
c2UgeworCQkJCXNjdHBfaGNfc2V0X210dSgmbmV0LT5yby5fbF9hZGRyLCBpbnAtPmZpYm51bSwg
bmV4dF9tdHUpOworCQkJfQorI2VuZGlmCisJCX0KKwkJLyogVXBkYXRlIHRoZSBhc3NvY2lhdGlv
biBNVFUgKi8KKwkJaWYgKHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1ID4gbmV4dF9tdHUpIHsKKwkJ
CXNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0Y2IsIG5leHRfbXR1KTsKKwkJfQorCQkvKiBGaW5h
bGx5LCBzdGFydCB0aGUgUE1UVSB0aW1lciBpZiBpdCB3YXMgcnVubmluZyBiZWZvcmUuICovCisJ
CWlmICh0aW1lcl9zdG9wcGVkKSB7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKKwkJfQorCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJfSBlbHNlIHsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCX0KK30KKyNlbmRp
ZgorCisjaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQordm9pZAorI2Vsc2UKK3ZvaWQgKgorI2VuZGlmCisjaWYgZGVmaW5lZChf
X0FQUExFX18pICYmICFkZWZpbmVkKEFQUExFX0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX1NO
T1dMRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9NT1VO
VEFJTkxJT04pICYmICFkZWZpbmVkKEFQUExFX0VMQ0FQSVRBTikKK3NjdHBfY3RsaW5wdXQoaW50
IGNtZCwgc3RydWN0IHNvY2thZGRyICpzYSwgdm9pZCAqdmlwLCBzdHJ1Y3QgaWZuZXQgKmlmcCBT
Q1RQX1VOVVNFRCkKKyNlbHNlCitzY3RwX2N0bGlucHV0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRk
ciAqc2EsIHZvaWQgKnZpcCkKKyNlbmRpZgoreworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJ
c3RydWN0IGlwICpvdXRlcl9pcDsKKyNlbmRpZgorCXN0cnVjdCBpcCAqaW5uZXJfaXA7CisJc3Ry
dWN0IHNjdHBoZHIgKnNoOworCXN0cnVjdCBpY21wICppY21wOworCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
KyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOwor
I2VuZGlmCisJc3RydWN0IHNvY2thZGRyX2luIHNyYywgZHN0OworCisJaWYgKHNhLT5zYV9mYW1p
bHkgIT0gQUZfSU5FVCB8fAorCSAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhKS0+c2luX2Fk
ZHIuc19hZGRyID09IElOQUREUl9BTlkpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBk
ZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJcmV0dXJuOworI2Vs
c2UKKwkJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorCX0KKwlpZiAoUFJDX0lTX1JFRElSRUNUKGNt
ZCkpIHsKKwkJdmlwID0gTlVMTDsKKwl9IGVsc2UgaWYgKCh1bnNpZ25lZCljbWQgPj0gUFJDX05D
TURTIHx8IGluZXRjdGxlcnJtYXBbY21kXSA9PSAwKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCXJldHVy
bjsKKyNlbHNlCisJCXJldHVybiAoTlVMTCk7CisjZW5kaWYKKwl9CisJaWYgKHZpcCAhPSBOVUxM
KSB7CisJCWlubmVyX2lwID0gKHN0cnVjdCBpcCAqKXZpcDsKKwkJaWNtcCA9IChzdHJ1Y3QgaWNt
cCAqKSgoY2FkZHJfdClpbm5lcl9pcCAtCisJCSAgICAoc2l6ZW9mKHN0cnVjdCBpY21wKSAtIHNp
emVvZihzdHJ1Y3QgaXApKSk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJb3V0ZXJfaXAg
PSAoc3RydWN0IGlwICopKChjYWRkcl90KWljbXAgLSBzaXplb2Yoc3RydWN0IGlwKSk7CisjZW5k
aWYKKwkJc2ggPSAoc3RydWN0IHNjdHBoZHIgKikoKGNhZGRyX3QpaW5uZXJfaXAgKyAoaW5uZXJf
aXAtPmlwX2hsIDw8IDIpKTsKKwkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKTsKKwkJc3JjLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xF
TgorCQlzcmMuc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJ
CXNyYy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwkJc3JjLnNpbl9hZGRyID0gaW5uZXJfaXAt
PmlwX3NyYzsKKwkJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsK
KwkJZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCQlkc3Qu
c2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCWRzdC5zaW5f
cG9ydCA9IHNoLT5kZXN0X3BvcnQ7CisJCWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7
CisJCS8qCisJCSAqICdkc3QnIGhvbGRzIHRoZSBkZXN0IG9mIHRoZSBwYWNrZXQgdGhhdCBmYWls
ZWQgdG8gYmUgc2VudC4KKwkJICogJ3NyYycgaG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJl
c3MuIFRodXMgd2UgcmV2ZXJzZQorCQkgKiB0aGUgZHN0IGFuZCB0aGUgc3JjIGluIHRoZSBsb29r
dXAuCisJCSAqLworCQlpbnAgPSBOVUxMOworCQluZXQgPSBOVUxMOworCQlzdGNiID0gc2N0cF9m
aW5kYXNzb2NpYXRpb25fYWRkcl9zYSgoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJ
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnAsICZuZXQsIDEsCisJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJ
CWlmICgoc3RjYiAhPSBOVUxMKSAmJgorCQkgICAgKG5ldCAhPSBOVUxMKSAmJgorCQkgICAgKGlu
cCAhPSBOVUxMKSkgeworCQkJLyogQ2hlY2sgdGhlIHZlcmlmaWNhdGlvbiB0YWcgKi8KKwkJCWlm
IChudG9obChzaC0+dl90YWcpICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMgbXVzdCBiZSB0
aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkIGZvcgorCQkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMu
IFdlIGRvbid0IGNvbnNpZGVyCisJCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRoZSB2ZXJpZmlj
YXRpb24gdGFnLgorCQkJCSAqLworCQkJCWlmIChudG9obChzaC0+dl90YWcpICE9IHN0Y2ItPmFz
b2MucGVlcl92dGFnKSB7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJcmV0dXJu
OworCQkJCX0KKwkJCX0gZWxzZSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkJCQlpZiAo
bnRvaHMob3V0ZXJfaXAtPmlwX2xlbikgPj0KKwkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpcCkgKwor
CQkJCSAgICA4ICsgKGlubmVyX2lwLT5pcF9obCA8PCAyKSArIDIwKSB7CisJCQkJCS8qCisJCQkJ
CSAqIEluIHRoaXMgY2FzZSB3ZSBjYW4gY2hlY2sgaWYgd2UKKwkJCQkJICogZ290IGFuIElOSVQg
Y2h1bmsgYW5kIGlmIHRoZQorCQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KKwkJCQkJICov
CisJCQkJCWNoID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKikoc2ggKyAxKTsKKwkJCQkJaWYg
KChjaC0+Y2guY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJQVRJT04pIHx8CisJCQkJCSAgICAobnRv
aGwoY2gtPmluaXQuaW5pdGlhdGVfdGFnKSAhPSBzdGNiLT5hc29jLm15X3Z0YWcpKSB7CisJCQkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCQlyZXR1cm47CisJCQkJCX0KKwkJCQl9IGVs
c2UgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVybjsKKwkJCQl9Cisj
ZWxzZQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQlyZXR1cm47CisjZW5kaWYKKwkJ
CX0KKwkJCXNjdHBfbm90aWZ5KGlucCwgc3RjYiwgbmV0LAorCQkJICAgICAgICAgICAgaWNtcC0+
aWNtcF90eXBlLAorCQkJICAgICAgICAgICAgaWNtcC0+aWNtcF9jb2RlLAorI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEwMDAwMDAKKwkJCSAgICAgICAg
ICAgIG50b2hzKGlubmVyX2lwLT5pcF9sZW4pLAorI2Vsc2UKKwkJCSAgICAgICAgICAgIGlubmVy
X2lwLT5pcF9sZW4sCisjZW5kaWYKKwkJCSAgICAgICAgICAgICh1aW50MzJfdCludG9ocyhpY21w
LT5pY21wX25leHRtdHUpKTsKKwkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAm
JiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDUwMDAwMAorCQkJLyoKKwkJCSAqIFhYWCBtdXN0IGJlIGZp
eGVkIGZvciA1LnggYW5kIGhpZ2hlciwgbGVhdmUgZm9yCisJCQkgKiA0LngKKwkJCSAqLworCQkJ
aWYgKFBSQ19JU19SRURJUkVDVChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKKwkJCQlpbl9ydGNo
YW5nZSgoc3RydWN0IGlucGNiICopaW5wLAorCQkJCSAgICBpbmV0Y3RsZXJybWFwW2NtZF0pOwor
CQkJfQorI2VuZGlmCisJCQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxMKSkgewor
CQkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8KKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJ
CVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJ
fQorCQkJaWYgKHN0Y2IpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQl9CisJCX0K
Kwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pCisJcmV0dXJuOworI2Vsc2UKKwlyZXR1cm4gKE5VTEwpOworI2Vu
ZGlmCit9CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3N0YXRp
YyBpbnQKK3NjdHBfZ2V0Y3JlZChTWVNDVExfSEFORExFUl9BUkdTKQoreworCXN0cnVjdCB4dWNy
ZWQgeHVjOworCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyc1syXTsKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7
CisJaW50IGVycm9yOworCXVpbnQzMl90IHZyZl9pZDsKKworCS8qIEZJWCwgZm9yIG5vbi1ic2Qg
aXMgdGhpcyByaWdodD8gKi8KKwl2cmZfaWQgPSBTQ1RQX0RFRkFVTFRfVlJGSUQ7CisKKyNpZiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDYwMjAwMAorCWVycm9yID0gcHJpdl9jaGVjayhyZXEtPnRkLCBQ
UklWX05FVElORVRfR0VUQ1JFRCk7CisKKyNlbGlmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAw
MAorCWVycm9yID0gc3VzZXIocmVxLT50ZCk7CisjZWxzZQorCWVycm9yID0gc3VzZXIocmVxLT5w
KTsKKyNlbmRpZgorCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJvcik7CisKKwllcnJvciA9IFNZ
U0NUTF9JTihyZXEsIGFkZHJzLCBzaXplb2YoYWRkcnMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVy
biAoZXJyb3IpOworCisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc2ludG9z
YSgmYWRkcnNbMV0pLAorCSAgICBzaW50b3NhKCZhZGRyc1swXSksCisJICAgICZpbnAsICZuZXQs
IDEsIHZyZl9pZCk7CisJaWYgKHN0Y2IgPT0gTlVMTCB8fCBpbnAgPT0gTlVMTCB8fCBpbnAtPnNj
dHBfc29ja2V0ID09IE5VTEwpIHsKKwkJaWYgKChpbnAgIT0gTlVMTCkgJiYgKHN0Y2IgPT0gTlVM
TCkpIHsKKwkJCS8qIHJlZHVjZSByZWYtY291bnQgKi8KKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7
CisJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJZ290byBjcmVkX2Nhbl9jb250OworCQl9
CisKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRU5PRU5UKTsKKwkJZXJyb3IgPSBFTk9FTlQ7CisJCWdvdG8gb3V0OworCX0KKwlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJLyogV2UgdXNlIHRoZSB3cml0ZSBsb2NrIGhlcmUsIG9u
bHkKKwkgKiBzaW5jZSBpbiB0aGUgZXJyb3IgbGVnIHdlIG5lZWQgaXQuCisJICogSWYgd2UgdXNl
ZCBSTE9DSywgdGhlbiB3ZSB3b3VsZCBoYXZlCisJICogdG8gd2xvY2svZGVjci91bmxvY2svcmxv
Y2suIFdoaWNoCisJICogaW4gdGhlb3J5IGNvdWxkIGNyZWF0ZSBhIGhvbGUuIEJldHRlcgorCSAq
IHRvIHVzZSBoaWdoZXIgd2xvY2suCisJICovCisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKyBjcmVk
X2Nhbl9jb250OgorCWVycm9yID0gY3JfY2Fuc2Vlc29ja2V0KHJlcS0+dGQtPnRkX3VjcmVkLCBp
bnAtPnNjdHBfc29ja2V0KTsKKwlpZiAoZXJyb3IpIHsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCQlnb3RvIG91dDsKKwl9CisJY3J1MngoaW5wLT5zY3RwX3NvY2tldC0+c29fY3JlZCwgJnh1
Yyk7CisJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCWVycm9yID0gU1lTQ1RMX09VVChyZXEsICZ4
dWMsIHNpemVvZihzdHJ1Y3QgeHVjcmVkKSk7CitvdXQ6CisJcmV0dXJuIChlcnJvcik7Cit9CisK
K1NZU0NUTF9QUk9DKF9uZXRfaW5ldF9zY3RwLCBPSURfQVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9P
UEFRVUUgfCBDVExGTEFHX1JXLAorICAgIDAsIDAsIHNjdHBfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAi
R2V0IHRoZSB1Y3JlZCBvZiBhIFNDVFAgY29ubmVjdGlvbiIpOworI2VuZGlmCQkJCS8qICNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAqLworCisKKyNpZmRlZiBJTkVUCisjaWYgZGVmaW5lZChfX1Bh
bmRhX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K2ludAorI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2
OTAwMDAKK3N0YXRpYyB2b2lkCisjZWxzZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwX2Fib3J0
KHN0cnVjdCBzb2NrZXQgKnNvKQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJdWludDMy
X3QgZmxhZ3M7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlm
IChpbnAgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID4gNjkwMDAwCisJCXJldHVybjsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1
cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9CisKKyBzY3RwX211c3RfdHJ5X2FnYWluOgorCWZsYWdz
ID0gaW5wLT5zY3RwX2ZsYWdzOworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19j
bG9zaW5nKGlucCwgTlVMTCwgMTcpOworI2VuZGlmCisJaWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkgICAgKGF0b21pY19jbXBzZXRfaW50KCZpbnAt
PnNjdHBfZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSB8
IFNDVFBfUENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORwor
CQlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTYpOworI2VuZGlmCisJCXNjdHBfaW5wY2Jf
ZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0FCT1JULAorCQkJCVNDVFBfQ0FMTEVEX0FG
VEVSX0NNUFNFVF9PRkNMT1NFKTsKKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9TQl9DTEVBUihz
by0+c29fc25kKTsKKwkJLyogc2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5CisJ
CSAqIGhlcmUgZm9yIHRoZSBhY2NvdW50aW5nL3NlbGVjdC4KKwkJICovCisJCVNDVFBfU0JfQ0xF
QVIoc28tPnNvX3Jjdik7CisKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJc28tPnNvX3VzZWNv
dW50LS07CisjZWxzZQorCQkvKiBOb3cgbnVsbCBvdXQgdGhlIHJlZmVyZW5jZSwgd2UgYXJlIGNv
bXBsZXRlbHkgZGV0YWNoZWQuICovCisJCXNvLT5zb19wY2IgPSBOVUxMOworI2VuZGlmCisJCVNP
Q0tfVU5MT0NLKHNvKTsKKwl9IGVsc2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJ
aWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3Rv
IHNjdHBfbXVzdF90cnlfYWdhaW47CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKKwlyZXR1cm47CisjZWxzZQorCXJldHVybiAo
MCk7CisjZW5kaWYKK30KKworI2lmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCitpbnQKKyNlbHNlCitzdGF0aWMgaW50CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3NjdHBfYXR0YWNoKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIHN0cnVjdCB0aHJlYWQgKnAg
U0NUUF9VTlVTRUQpCisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJz
cGFjZV9fKQorc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VO
VVNFRCwgdWludDMyX3QgdnJmX2lkKQorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBf
YXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIFBLVEhSRUFE
IHAgU0NUUF9VTlVTRUQpCisjZWxzZQorc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGlu
dCBwcm90byBTQ1RQX1VOVVNFRCwgc3RydWN0IHByb2MgKnAgU0NUUF9VTlVTRUQpCisjZW5kaWYK
K3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBpbnBjYiAqaXBfaW5wOworCWlu
dCBlcnJvcjsKKyNpZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJdWludDMyX3QgdnJmX2lkID0gU0NUUF9ERUZBVUxUX1ZSRklEOworI2VuZGlmCisKKwlp
bnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgIT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChzby0+c29fc25k
LnNiX2hpd2F0ID09IDAgfHwgc28tPnNvX3Jjdi5zYl9oaXdhdCA9PSAwKSB7CisJCWVycm9yID0g
U0NUUF9TT1JFU0VSVkUoc28sIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9zZW5kc3BhY2UpLCBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcmVjdnNwYWNlKSk7CisJCWlmIChlcnJvcikgeworCQkJcmV0dXJu
IChlcnJvcik7CisJCX0KKwl9CisJZXJyb3IgPSBzY3RwX2lucGNiX2FsbG9jKHNvLCB2cmZfaWQp
OworCWlmIChlcnJvcikgeworCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJaW5wID0gKHN0cnVjdCBz
Y3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+c2N0
cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSBub3QgdjYhICovCisJ
aXBfaW5wID0gJmlucC0+aXBfaW5wLmlucDsKKwlpcF9pbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBW
NDsKKwlpcF9pbnAtPmlucF9pcF90dGwgPSBNT0RVTEVfR0xPQkFMKGlwX2RlZnR0bCk7CisJU0NU
UF9JTlBfV1VOTE9DSyhpbnApOworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3N0YXRpYyBpbnQKK3NjdHBf
YmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgdGhy
ZWFkICpwKQoreworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pCitzdGF0aWMgaW50CitzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2Nr
YWRkciAqYWRkciwgc3RydWN0IHByb2MgKnApIHsKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKSB8
fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHBfYmluZChzdHJ1Y3Qgc29ja2V0ICpz
bywgc3RydWN0IHNvY2thZGRyICphZGRyKSB7CisJdm9pZCAqcCA9IE5VTEw7CisjZWxpZiBkZWZp
bmVkKF9fV2luZG93c19fKQorc3RhdGljIGludAorc2N0cF9iaW5kKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIFBLVEhSRUFEIHApIHsKKyNlbHNlCitzdGF0aWMgaW50
CitzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBw
cm9jICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1
Y3Qgc29ja2FkZHIgKik6IE5VTEw7CisKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7
CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0g
TlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCWlmIChhZGRy
ICE9IE5VTEwpIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoKGFkZHItPnNhX2ZhbWlseSAh
PSBBRl9JTkVUKSB8fAorCQkgICAgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKSkpIHsKKyNlbHNlCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewor
I2VuZGlmCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCXJl
dHVybiAoc2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBwKSk7Cit9CisKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKworaW50CitzY3RwY29ubl9hdHRhY2goc3RydWN0
IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgdWludDMyX3QgdnJmX2lkKQorewor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IGlucGNiICppcF9pbnA7CisJaW50IGVy
cm9yOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5w
ICE9IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAo
c28tPnNvX3NuZC5zYl9oaXdhdCA9PSAwIHx8IHNvLT5zb19yY3Yuc2JfaGl3YXQgPT0gMCkgewor
CQllcnJvciA9IFNDVFBfU09SRVNFUlZFKHNvLCBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc2VuZHNw
YWNlKSwgU0NUUF9CQVNFX1NZU0NUTChzY3RwX3JlY3ZzcGFjZSkpOworCQlpZiAoZXJyb3IpIHsK
KwkJCXJldHVybiAoZXJyb3IpOworCQl9CisJfQorCWVycm9yID0gc2N0cF9pbnBjYl9hbGxvYyhz
bywgdnJmX2lkKTsKKwlpZiAoZXJyb3IpIHsKKwkJcmV0dXJuIChlcnJvcik7CisJfQorCWlucCA9
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
KwlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2OworCWlucC0+c2N0
cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19CT1VORF9DT05OOworCWlwX2lucCA9ICZpbnAtPmlw
X2lucC5pbnA7CisJaXBfaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0NPTk47CisJaXBfaW5wLT5pbnBf
aXBfdHRsID0gTU9EVUxFX0dMT0JBTChpcF9kZWZ0dGwpOworCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3NjdHBjb25uX2JpbmQoc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzb2NrYWRkciAqYWRkcikKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOwor
CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5V
TEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoYWRkciAh
PSBOVUxMKSB7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKChhZGRyLT5zYV9mYW1pbHkgIT0g
QUZfQ09OTikgfHwKKwkJICAgIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKSkpIHsKKyNlbHNlCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gQUZfQ09OTikgewor
I2VuZGlmCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJfQorCXJl
dHVybiAoc2N0cF9pbnBjYl9iaW5kKHNvLCBhZGRyLCBOVUxMLCBOVUxMKSk7Cit9CisKKyNlbmRp
ZgorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAw
MCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9p
ZAorc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAq
aW5wOworCXVpbnQzMl90IGZsYWdzOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28t
PnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpCisJCXJldHVybjsKKworCS8qIEluZm9ybSBhbGwg
dGhlIGxvd2VyIGxheWVyIGFzc29jIHRoYXQgd2UKKwkgKiBhcmUgZG9uZS4KKwkgKi8KKyBzY3Rw
X211c3RfdHJ5X2FnYWluOgorCWZsYWdzID0gaW5wLT5zY3RwX2ZsYWdzOworI2lmZGVmIFNDVFBf
TE9HX0NMT1NJTkcKKwlzY3RwX2xvZ19jbG9zaW5nKGlucCwgTlVMTCwgMTcpOworI2VuZGlmCisJ
aWYgKCgoZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkgICAg
KGF0b21pY19jbXBzZXRfaW50KCZpbnAtPnNjdHBfZmxhZ3MsIGZsYWdzLCAoZmxhZ3MgfCBTQ1RQ
X1BDQl9GTEFHU19TT0NLRVRfR09ORSB8IFNDVFBfUENCX0ZMQUdTX0NMT1NFX0lQKSkpKSB7Cisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNDVFBf
U09fTElOR0VSKSAmJiAoc28tPnNvX2xpbmdlciA9PSAwKSkgfHwKKwkJICAgIChzby0+c29fcmN2
LnNiX2NjID4gMCkpIHsKKyNlbHNlCisJCWlmICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VS
KSAmJiAoc28tPnNvX2xpbmdlciA9PSAwKSkgfHwKKwkJICAgIChzby0+c29fcmN2LnNiX2NjID4g
MCkpIHsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNjdHBfbG9nX2Nsb3Np
bmcoaW5wLCBOVUxMLCAxMyk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBf
RlJFRV9TSE9VTERfVVNFX0FCT1JULAorCQkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZD
TE9TRSk7CisJCX0gZWxzZSB7CisjaWZkZWYgU0NUUF9MT0dfQ0xPU0lORworCQkJc2N0cF9sb2df
Y2xvc2luZyhpbnAsIE5VTEwsIDE0KTsKKyNlbmRpZgorCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwg
U0NUUF9GUkVFX1NIT1VMRF9VU0VfR1JBQ0VGVUxfQ0xPU0UsCisJCQkJCVNDVFBfQ0FMTEVEX0FG
VEVSX0NNUFNFVF9PRkNMT1NFKTsKKwkJfQorCQkvKiBUaGUgc29ja2V0IGlzIG5vdyBkZXRhY2hl
ZCwgbm8gbWF0dGVyIHdoYXQKKwkJICogdGhlIHN0YXRlIG9mIHRoZSBTQ1RQIGFzc29jaWF0aW9u
LgorCQkgKi8KKwkJU09DS19MT0NLKHNvKTsKKwkJU0NUUF9TQl9DTEVBUihzby0+c29fc25kKTsK
KwkJLyogc2FtZSBmb3IgdGhlIHJjdiBvbmVzLCB0aGV5IGFyZSBvbmx5CisJCSAqIGhlcmUgZm9y
IHRoZSBhY2NvdW50aW5nL3NlbGVjdC4KKwkJICovCisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3Jj
dik7CisKKyNpZiAhZGVmaW5lZChfX0FQUExFX18pCisJCS8qIE5vdyBudWxsIG91dCB0aGUgcmVm
ZXJlbmNlLCB3ZSBhcmUgY29tcGxldGVseSBkZXRhY2hlZC4gKi8KKwkJc28tPnNvX3BjYiA9IE5V
TEw7CisjZW5kaWYKKwkJU09DS19VTkxPQ0soc28pOworCX0gZWxzZSB7CisJCWZsYWdzID0gaW5w
LT5zY3RwX2ZsYWdzOworCQlpZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUp
ID09IDApIHsKKwkJCWdvdG8gc2N0cF9tdXN0X3RyeV9hZ2FpbjsKKwkJfQorCX0KKwlyZXR1cm47
Cit9CisKKyNlbHNlCisKKworaW50CitzY3RwX2RldGFjaChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sK
KwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVpbnQzMl90IGZsYWdzOworCisJaW5wID0gKHN0
cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMAorCQlyZXR1
cm47CisjZWxzZQorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9
Cisgc2N0cF9tdXN0X3RyeV9hZ2FpbjoKKwlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKyNpZmRl
ZiBTQ1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKKyNl
bmRpZgorCWlmICgoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYm
CisJICAgIChhdG9taWNfY21wc2V0X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdz
IHwgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkp
KSkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKCgoc28tPnNvX29wdGlvbnMg
JiBTQ1RQX1NPX0xJTkdFUikgJiYgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28t
PnNvX3Jjdi5zYl9jYyA+IDApKSB7CisjZWxzZQorCQlpZiAoKChzby0+c29fb3B0aW9ucyAmIFNP
X0xJTkdFUikgJiYgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCSAgICAoc28tPnNvX3Jjdi5z
Yl9jYyA+IDApKSB7CisjZW5kaWYKKyNpZmRlZiBTQ1RQX0xPR19DTE9TSU5HCisJCQlzY3RwX2xv
Z19jbG9zaW5nKGlucCwgTlVMTCwgMTMpOworI2VuZGlmCisJCQlzY3RwX2lucGNiX2ZyZWUoaW5w
LCBTQ1RQX0ZSRUVfU0hPVUxEX1VTRV9BQk9SVCwKKwkJCQkJU0NUUF9DQUxMRURfQUZURVJfQ01Q
U0VUX09GQ0xPU0UpOworCQl9IGVsc2UgeworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJCXNj
dHBfbG9nX2Nsb3NpbmcoaW5wLCBOVUxMLCAxMyk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJl
ZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNFX0dSQUNFRlVMX0NMT1NFLAorCQkJCQlTQ1RQX0NB
TExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7CisJCX0KKwkJLyogVGhlIHNvY2tldCBpcyBub3cg
ZGV0YWNoZWQsIG5vIG1hdHRlciB3aGF0CisJCSAqIHRoZSBzdGF0ZSBvZiB0aGUgU0NUUCBhc3Nv
Y2lhdGlvbi4KKwkJICovCisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7CisJCS8qIHNhbWUg
Zm9yIHRoZSByY3Ygb25lcywgdGhleSBhcmUgb25seQorCQkgKiBoZXJlIGZvciB0aGUgYWNjb3Vu
dGluZy9zZWxlY3QuCisJCSAqLworCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOworI2lmICFk
ZWZpbmVkKF9fQVBQTEVfXykKKwkJLyogTm93IGRpc2Nvbm5lY3QgKi8KKwkJc28tPnNvX3BjYiA9
IE5VTEw7CisjZW5kaWYKKwl9IGVsc2UgeworCQlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKwkJ
aWYgKChmbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCQlnb3Rv
IHNjdHBfbXVzdF90cnlfYWdhaW47CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAKKwlyZXR1cm47CisjZWxzZQorCXJldHVybiAo
MCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorLyog
X19Vc2Vyc3BhY2VfXyBpcyBub3QgY2FsbGluZyBzY3RwX3NlbmRtICovCisjZW5kaWYKKyNpZiAh
KGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKSkKK2ludAorI2lmIGRl
ZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorc2N0cF9z
ZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0
IHNvY2thZGRyICphZGRyLAorICAgIHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFk
ICpwKTsKKworI2Vsc2UKK3NjdHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywg
c3RydWN0IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAq
Y29udHJvbCwgc3RydWN0IHByb2MgKnApOworCisjZW5kaWYKKworaW50CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAwCitzY3RwX3NlbmRtKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCB0aHJlYWQgKnApCit7
CisjZWxzZQorc2N0cF9zZW5kbShzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGZsYWdzLCBzdHJ1Y3Qg
bWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAgIHN0cnVjdCBtYnVmICpjb250cm9s
LCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJ
aW50IGVycm9yOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJaWYgKGNvbnRyb2wpIHsKKwkJCXNjdHBfbV9mcmVlbShjb250
cm9sKTsKKwkJCWNvbnRyb2wgPSBOVUxMOworCQl9CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtU
KG0sIGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQlz
Y3RwX21fZnJlZW0obSk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJLyogR290IHRvIGhhdmUg
YW4gdG8gYWRkcmVzcyBpZiB3ZSBhcmUgTk9UIGEgY29ubmVjdGVkIHNvY2tldCAqLworCWlmICgo
YWRkciA9PSBOVUxMKSAmJgorCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpKSkgeworCQlnb3RvIGNvbm5lY3RlZF90eXBlOworCX0gZWxzZSBpZiAoYWRkciA9PSBO
VUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVRfUEtUKG0sIGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFREVTVEFERFJSRVEpOworCQllcnJvciA9IEVERVNUQUREUlJF
UTsKKwkJc2N0cF9tX2ZyZWVtKG0pOworCQlpZiAoY29udHJvbCkgeworCQkJc2N0cF9tX2ZyZWVt
KGNvbnRyb2wpOworCQkJY29udHJvbCA9IE5VTEw7CisJCX0KKwkJcmV0dXJuIChlcnJvcik7CisJ
fQorI2lmZGVmIElORVQ2CisJaWYgKGFkZHItPnNhX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisJCS8q
IG11c3QgYmUgYSB2NCBhZGRyZXNzISAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUX1BLVChtLCBp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRURFU1RBRERSUkVRKTsKKwkJ
c2N0cF9tX2ZyZWVtKG0pOworCQlpZiAoY29udHJvbCkgeworCQkJc2N0cF9tX2ZyZWVtKGNvbnRy
b2wpOworCQkJY29udHJvbCA9IE5VTEw7CisJCX0KKwkJZXJyb3IgPSBFREVTVEFERFJSRVE7CisJ
CXJldHVybiAoZXJyb3IpOworCX0KKyNlbmRpZgkJCQkvKiBJTkVUNiAqLworY29ubmVjdGVkX3R5
cGU6CisJLyogbm93IHdoYXQgYWJvdXQgY29udHJvbCAqLworCWlmIChjb250cm9sKSB7CisJCWlm
IChpbnAtPmNvbnRyb2wpIHsKKwkJCVNDVFBfUFJJTlRGKCJodWg/IGNvbnRyb2wgc2V0P1xuIik7
CisJCQlzY3RwX21fZnJlZW0oaW5wLT5jb250cm9sKTsKKwkJCWlucC0+Y29udHJvbCA9IE5VTEw7
CisJCX0KKwkJaW5wLT5jb250cm9sID0gY29udHJvbDsKKwl9CisJLyogUGxhY2UgdGhlIGRhdGEg
Ki8KKwlpZiAoaW5wLT5wa3QpIHsKKwkJU0NUUF9CVUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07
CisJCWlucC0+cGt0X2xhc3QgPSBtOworCX0gZWxzZSB7CisJCWlucC0+cGt0X2xhc3QgPSBpbnAt
PnBrdCA9IG07CisJfQorCWlmICgKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVk
KF9fQVBQTEVfXykKKwkvKiBGcmVlQlNEIHVzZXMgYSBmbGFnIHBhc3NlZCAqLworCSAgICAoKGZs
YWdzICYgUFJVU19NT1JFVE9DT01FKSA9PSAwKQorI2Vsc2UKKwkgICAgMQkJCS8qIE9wZW4gQlNE
IGRvZXMgbm90IGhhdmUgYW55ICJtb3JlIHRvIGNvbWUiCisJCQkJICogaW5kaWNhdGlvbiAqLwor
I2VuZGlmCisJICAgICkgeworCQkvKgorCQkgKiBub3RlIHdpdGggdGhlIGN1cnJlbnQgdmVyc2lv
biB0aGlzIGNvZGUgd2lsbCBvbmx5IGJlIHVzZWQKKwkJICogYnkgT3BlbkJTRC0tIE5ldEJTRCwg
RnJlZUJTRCwgYW5kIE1hY09TIGhhdmUgbWV0aG9kcyBmb3IKKwkJICogcmUtZGVmaW5pbmcgc29z
ZW5kIHRvIHVzZSB0aGUgc2N0cF9zb3NlbmQuIE9uZSBjYW4KKwkJICogb3B0aW9uYWxseSBzd2l0
Y2ggYmFjayB0byB0aGlzIGNvZGUgKGJ5IGNoYW5naW5nIGJhY2sgdGhlCisJCSAqIGRlZmluaXRp
b25zKSBidXQgdGhpcyBpcyBub3QgYWR2aXNhYmxlLiBUaGlzIGNvZGUgaXMgdXNlZAorCQkgKiBi
eSBGcmVlQlNEIHdoZW4gc2VuZGluZyBhIGZpbGUgd2l0aCBzZW5kZmlsZSgpIHRob3VnaC4KKwkJ
ICovCisJCWludCByZXQ7CisKKwkJcmV0ID0gc2N0cF9vdXRwdXQoaW5wLCBpbnAtPnBrdCwgYWRk
ciwgaW5wLT5jb250cm9sLCBwLCBmbGFncyk7CisJCWlucC0+cGt0ID0gTlVMTDsKKwkJaW5wLT5j
b250cm9sID0gTlVMTDsKKwkJcmV0dXJuIChyZXQpOworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7
CisJfQorfQorI2VuZGlmCisKK2ludAorc2N0cF9kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNv
KQoreworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7CisJ
CXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCWlmICgoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCWlmIChMSVNUX0VNUFRZ
KCZpbnAtPnNjdHBfYXNvY19saXN0KSkgeworCQkJLyogTm8gY29ubmVjdGlvbiAqLworCQkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIHsKKwkJCXN0cnVj
dCBzY3RwX2Fzc29jaWF0aW9uICphc29jOworCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCisJ
CQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCQlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJ
CQkJcmV0dXJuIChFSU5WQUwpOworCQkJfQorCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCWFz
b2MgPSAmc3RjYi0+YXNvYzsKKwkJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9B
Qk9VVF9UT19CRV9GUkVFRCkgeworCQkJCS8qIFdlIGFyZSBhYm91dCB0byBiZSBmcmVlZCwgb3V0
IG9mIGhlcmUgKi8KKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJCXJldHVybiAoMCk7CisJCQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCQkJaWYgKCgoc28tPnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgJiYKKwkJCSAg
ICAgKHNvLT5zb19saW5nZXIgPT0gMCkpIHx8CisJCQkgICAgKHNvLT5zb19yY3Yuc2JfY2MgPiAw
KSkgeworI2Vsc2UKKwkJCWlmICgoKHNvLT5zb19vcHRpb25zICYgU09fTElOR0VSKSAmJgorCQkJ
ICAgICAoc28tPnNvX2xpbmdlciA9PSAwKSkgfHwKKwkJCSAgICAoc28tPnNvX3Jjdi5zYl9jYyA+
IDApKSB7CisjZW5kaWYKKwkJCQlpZiAoU0NUUF9HRVRfU1RBVEUoYXNvYykgIT0KKwkJCQkgICAg
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgeworCQkJCQkvKiBMZWZ0IHdpdGggRGF0YSB1bnJlYWQg
Ki8KKwkJCQkJc3RydWN0IG1idWYgKm9wX2VycjsKKworCQkJCQlvcF9lcnIgPSBzY3RwX2dlbmVy
YXRlX2NhdXNlKFNDVFBfQ0FVU0VfVVNFUl9JTklUSUFURURfQUJULCAiIik7CisJCQkJCXNjdHBf
c2VuZF9hYm9ydF90Y2Ioc3RjYiwgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19hYm9ydGVkKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBf
UlVOTE9DSyhpbnApOworCQkJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFND
VFBfU1RBVEVfT1BFTikgfHwKKwkJCQkgICAgKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9
PSBTQ1RQX1NUQVRFX1NIVVRET1dOX1JFQ0VJVkVEKSkgeworCQkJCQlTQ1RQX1NUQVRfREVDUl9H
QVVHRTMyKHNjdHBzX2N1cnJlc3RhYik7CisJCQkJfQorCQkJCSh2b2lkKXNjdHBfZnJlZV9hc3Nv
YyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzMpOworCQkJCS8qIE5vIHVubG9jayB0
Y2IgYXNzb2MgaXMgZ29uZSAqLworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlpZiAoVEFJTFFf
RU1QVFkoJmFzb2MtPnNlbmRfcXVldWUpICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNl
bnRfcXVldWUpICYmCisJCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1ZV9jbnQgPT0gMCkpIHsKKwkJ
CQkvKiB0aGVyZSBpcyBub3RoaW5nIHF1ZXVlZCB0byBzZW5kLCBzbyBkb25lICovCisJCQkJaWYg
KCgqYXNvYy0+c3NfZnVuY3Rpb25zLnNjdHBfc3NfaXNfdXNlcl9tc2dzX2luY29tcGxldGUpKHN0
Y2IsIGFzb2MpKSB7CisJCQkJCWdvdG8gYWJvcnRfYW55d2F5OworCQkJCX0KKwkJCQlpZiAoKFND
VFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCkgJiYKKwkJCQkg
ICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQp
KSB7CisJCQkJCS8qIG9ubHkgc2VuZCBTSFVURE9XTiAxc3QgdGltZSB0aHJ1ICovCisJCQkJCXN0
cnVjdCBzY3RwX25ldHMgKm5ldHA7CisKKwkJCQkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9
PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJCQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoYXNvYykgPT0g
U0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCQkJCVNDVFBfU1RBVF9ERUNSX0dB
VUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1NFVF9TVEFURShhc29j
LCBTQ1RQX1NUQVRFX1NIVVRET1dOX1NFTlQpOworCQkJCQlTQ1RQX0NMRUFSX1NVQlNUQVRFKGFz
b2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCQkJCXNjdHBfc3RvcF90aW1lcnNf
Zm9yX3NodXRkb3duKHN0Y2IpOworCQkJCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJ
CQkJCW5ldHAgPSBzdGNiLT5hc29jLmFsdGVybmF0ZTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCW5l
dHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb247CisJCQkJCX0KKwkJCQkJc2N0cF9z
ZW5kX3NodXRkb3duKHN0Y2IsbmV0cCk7CisJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1F
Ul9UWVBFX1NIVVRET1dOLAorCQkJCQkJCSBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJ
CQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwKKwkJCQkJ
CQkgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJCQkJCXNjdHBfY2h1bmtfb3V0cHV0KHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTE9DS0VEKTsK
KwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogd2Ugc3RpbGwgZ290IChvciBqdXN0
IGdvdCkgZGF0YSB0byBzZW5kLAorCQkJCSAqIHNvIHNldCBTSFVURE9XTl9QRU5ESU5HCisJCQkJ
ICovCisJCQkJLyoKKwkJCQkgKiBYWFggc29ja2V0cyBkcmFmdCBzYXlzIHRoYXQgU0NUUF9FT0YK
KwkJCQkgKiBzaG91bGQgYmUgc2VudCB3aXRoIG5vIGRhdGEuIGN1cnJlbnRseSwKKwkJCQkgKiB3
ZSB3aWxsIGFsbG93IHVzZXIgZGF0YSB0byBiZSBzZW50IGZpcnN0CisJCQkJICogYW5kIG1vdmUg
dG8gU0hVVERPV04tUEVORElORworCQkJCSAqLworCQkJCXN0cnVjdCBzY3RwX25ldHMgKm5ldHA7
CisJCQkJaWYgKHN0Y2ItPmFzb2MuYWx0ZXJuYXRlKSB7CisJCQkJCW5ldHAgPSBzdGNiLT5hc29j
LmFsdGVybmF0ZTsKKwkJCQl9IGVsc2UgeworCQkJCQluZXRwID0gc3RjYi0+YXNvYy5wcmltYXJ5
X2Rlc3RpbmF0aW9uOworCQkJCX0KKworCQkJCWFzb2MtPnN0YXRlIHw9IFNDVFBfU1RBVEVfU0hV
VERPV05fUEVORElORzsKKwkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9TSFVU
RE9XTkdVQVJELCBzdGNiLT5zY3RwX2VwLCBzdGNiLAorCQkJCQkJIG5ldHApOworCQkJCWlmICgo
KmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNi
LCBhc29jKSkgeworCQkJCQlhc29jLT5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1BBUlRJQUxfTVNHX0xF
RlQ7CisJCQkJfQorCQkJCWlmIChUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJ
CQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkJICAgIChhc29jLT5z
dGF0ZSAmIFNDVFBfU1RBVEVfUEFSVElBTF9NU0dfTEVGVCkpIHsKKwkJCQkJc3RydWN0IG1idWYg
Km9wX2VycjsKKwkJCQlhYm9ydF9hbnl3YXk6CisJCQkJCW9wX2VyciA9IHNjdHBfZ2VuZXJhdGVf
Y2F1c2UoU0NUUF9DQVVTRV9VU0VSX0lOSVRJQVRFRF9BQlQsICIiKTsKKwkJCQkJc3RjYi0+c2N0
cF9lcC0+bGFzdF9hYm9ydF9jb2RlID0gU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0Nf
NDsKKwkJCQkJc2N0cF9zZW5kX2Fib3J0X3RjYihzdGNiLCBvcF9lcnIsIFNDVFBfU09fTE9DS0VE
KTsKKwkJCQkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjMyKHNjdHBzX2Fib3J0ZWQpOworCQkJCQlp
ZiAoKFNDVFBfR0VUX1NUQVRFKCZzdGNiLT5hc29jKSA9PSBTQ1RQX1NUQVRFX09QRU4pIHx8CisJ
CQkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERP
V05fUkVDRUlWRUQpKSB7CisJCQkJCQlTQ1RQX1NUQVRfREVDUl9HQVVHRTMyKHNjdHBzX2N1cnJl
c3RhYik7CisJCQkJCX0KKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCQkodm9pZClz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCQkgICAgICAg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfNSk7CisJCQkJ
CXJldHVybiAoMCk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBz
dGNiLCBTQ1RQX09VVFBVVF9GUk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQl9CisJ
CQl9CisJCQlzb2lzZGlzY29ubmVjdGluZyhzbyk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKDApOworCQl9CisJCS8qIG5v
dCByZWFjaGVkICovCisJfSBlbHNlIHsKKwkJLyogVURQIG1vZGVsIGRvZXMgbm90IHN1cHBvcnQg
dGhpcyAqLworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQly
ZXR1cm4gKEVPUE5PVFNVUFApOworCX0KK30KKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0
cF9mbHVzaChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGhvdykKK3sKKwkvKgorCSAqIFdlIHdpbGwg
anVzdCBjbGVhciBvdXQgdGhlIHZhbHVlcyBhbmQgbGV0CisJICogc3Vic2VxdWVudCBjbG9zZSBj
bGVhciBvdXQgdGhlIGRhdGEsIGlmIGFueS4KKwkgKiBOb3RlIGlmIHRoZSB1c2VyIGRpZCBhIHNo
dXRkb3duKFNIVVRfUkQpIHRoZXkKKwkgKiB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdGhlIGRh
dGEsIHRoZSBzb2NrZXQKKwkgKiB3aWxsIGJsb2NrIHRoYXQgZnJvbSBoYXBwZW5pbmcuCisJICov
CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVy
biAoRUlOVkFMKTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkvKiBGb3IgdGhlIDEgdG8g
bWFueSBtb2RlbCB0aGlzIGRvZXMgbm90aGluZyAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19VRFBUWVBFKSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJcmV0
dXJuICgwKTsKKwl9CisJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCWlmICgoaG93ID09IFBSVV9G
TFVTSF9SRCkgfHwgKGhvdyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3QgbWFrZSBz
dXJlIHRoZSBzYiB3aWxsIGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2UgZXhjZXB0
IG1heWJlIHRoZSBjb3VudAorCQkgKi8KKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJU0NUUF9J
TlBfUkVBRF9MT0NLKGlucCk7CisJCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19T
T0NLRVRfQ0FOVF9SRUFEOworCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJCXNvLT5zb19yY3Yuc2JfY2MgPSAwOworCQlzby0+c29fcmN2LnNi
X21iY250ID0gMDsKKwkJc28tPnNvX3Jjdi5zYl9tYiA9IE5VTEw7CisJfQorCWlmICgoaG93ID09
IFBSVV9GTFVTSF9XUikgfHwgKGhvdyA9PSBQUlVfRkxVU0hfUkRXUikpIHsKKwkJLyogRmlyc3Qg
bWFrZSBzdXJlIHRoZSBzYiB3aWxsIGJlIGhhcHB5LCB3ZSBkb24ndAorCQkgKiB1c2UgdGhlc2Ug
ZXhjZXB0IG1heWJlIHRoZSBjb3VudAorCQkgKi8KKwkJc28tPnNvX3NuZC5zYl9jYyA9IDA7CisJ
CXNvLT5zb19zbmQuc2JfbWJjbnQgPSAwOworCQlzby0+c29fc25kLnNiX21iID0gTlVMTDsKKwor
CX0KKwlyZXR1cm4gKDApOworfQorI2VuZGlmCisKK2ludAorc2N0cF9zaHV0ZG93bihzdHJ1Y3Qg
c29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCisJaW5wID0gKHN0cnVj
dCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhpbnApOworCS8q
IEZvciBVRFAgbW9kZWwgdGhpcyBpcyBhIGludmFsaWQgY2FsbCAqLworCWlmICghKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkpIHsKKwkJLyogUmVzdG9yZSB0aGUg
ZmxhZ3MgdGhhdCB0aGUgc29zaHV0ZG93biB0b29rIGF3YXkuICovCisjaWYgKGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMjExNSkgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKKwkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJc28tPnNvX3Jjdi5zYl9z
dGF0ZSAmPSB+U0JTX0NBTlRSQ1ZNT1JFOworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7
CisjZWxzZQorCQlTT0NLX0xPQ0soc28pOworCQlzby0+c29fc3RhdGUgJj0gflNTX0NBTlRSQ1ZN
T1JFOworCQlTT0NLX1VOTE9DSyhzbyk7CisjZW5kaWYKKwkJLyogVGhpcyBwcm9jIHdpbGwgd2Fr
ZXVwIGZvciByZWFkIGFuZCBkbyBub3RoaW5nIChJIGhvcGUpICovCisJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQUCk7CisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfSBl
bHNlIHsKKwkJLyoKKwkJICogT2ssIGlmIHdlIHJlYWNoIGhlcmUgaXRzIHRoZSBUQ1AgbW9kZWwg
YW5kIGl0IGlzIGVpdGhlcgorCQkgKiBhIFNIVVRfV1Igb3IgU0hVVF9SRFdSLgorCQkgKiBUaGlz
IG1lYW5zIHdlIHB1dCB0aGUgc2h1dGRvd24gZmxhZyBhZ2FpbnN0IGl0LgorCQkgKi8KKwkJc3Ry
dWN0IHNjdHBfdGNiICpzdGNiOworCQlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwkJ
c3RydWN0IHNjdHBfbmV0cyAqbmV0cDsKKworCQlpZiAoKHNvLT5zb19zdGF0ZSAmCisJCSAgICAg
KFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NPTk5FQ1RJTkcpKSA9PSAw
KSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlyZXR1cm4gKEVOT1RDT05OKTsKKwkJ
fQorCQlzb2NhbnRzZW5kbW9yZShzbyk7CisKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0
cF9hc29jX2xpc3QpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogT2ssIHdl
IGhpdCB0aGUgY2FzZSB0aGF0IHRoZSBzaHV0ZG93biBjYWxsIHdhcworCQkJICogbWFkZSBhZnRl
ciBhbiBhYm9ydCBvciBzb21ldGhpbmcuIE5vdGhpbmcgdG8gZG8KKwkJCSAqIG5vdy4KKwkJCSAq
LworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlTQ1RQ
X1RDQl9MT0NLKHN0Y2IpOworCQlhc29jID0gJnN0Y2ItPmFzb2M7CisJCWlmIChhc29jLT5zdGF0
ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJ
aWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKSAmJgor
CQkgICAgKFNDVFBfR0VUX1NUQVRFKGFzb2MpICE9IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkg
JiYKKwkJICAgIChTQ1RQX0dFVF9TVEFURShhc29jKSAhPSBTQ1RQX1NUQVRFX09QRU4pKSB7CisJ
CQkvKiBJZiB3ZSBhcmUgbm90IGluIG9yIGJlZm9yZSBFU1RBQkxJU0hFRCwgdGhlcmUgaXMKKwkJ
CSAqIG5vIHByb3RvY29sIGFjdGlvbiByZXF1aXJlZC4KKwkJCSAqLworCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJcmV0dXJuICgwKTsKKwkJ
fQorCQlpZiAoc3RjYi0+YXNvYy5hbHRlcm5hdGUpIHsKKwkJCW5ldHAgPSBzdGNiLT5hc29jLmFs
dGVybmF0ZTsKKwkJfSBlbHNlIHsKKwkJCW5ldHAgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGlu
YXRpb247CisJCX0KKwkJaWYgKChTQ1RQX0dFVF9TVEFURShhc29jKSA9PSBTQ1RQX1NUQVRFX09Q
RU4pICYmCisJCSAgICBUQUlMUV9FTVBUWSgmYXNvYy0+c2VuZF9xdWV1ZSkgJiYKKwkJICAgIFRB
SUxRX0VNUFRZKCZhc29jLT5zZW50X3F1ZXVlKSAmJgorCQkgICAgKGFzb2MtPnN0cmVhbV9xdWV1
ZV9jbnQgPT0gMCkpIHsKKwkJCWlmICgoKmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3Vz
ZXJfbXNnc19pbmNvbXBsZXRlKShzdGNiLCBhc29jKSkgeworCQkJCWdvdG8gYWJvcnRfYW55d2F5
OworCQkJfQorCQkJLyogdGhlcmUgaXMgbm90aGluZyBxdWV1ZWQgdG8gc2VuZCwgc28gSSdtIGRv
bmUuLi4gKi8KKwkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwkJ
CVNDVFBfU0VUX1NUQVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVCk7CisJCQlTQ1RQ
X0NMRUFSX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfU0hVVERPV05fUEVORElORyk7CisJCQlz
Y3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihzdGNiKTsKKwkJCXNjdHBfc2VuZF9zaHV0ZG93
bihzdGNiLCBuZXRwKTsKKwkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX1NIVVRE
T1dOLAorCQkJICAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXRwKTsKKwkJ
fSBlbHNlIHsKKwkJCS8qCisJCQkgKiBXZSBzdGlsbCBnb3QgKG9yIGp1c3QgZ290KSBkYXRhIHRv
IHNlbmQsIHNvIHNldAorCQkJICogU0hVVERPV05fUEVORElORy4KKwkJCSAqLworCQkJU0NUUF9B
RERfU1VCU1RBVEUoYXNvYywgU0NUUF9TVEFURV9TSFVURE9XTl9QRU5ESU5HKTsKKwkJCWlmICgo
KmFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2lzX3VzZXJfbXNnc19pbmNvbXBsZXRlKShzdGNi
LCBhc29jKSkgeworCQkJCVNDVFBfQUREX1NVQlNUQVRFKGFzb2MsIFNDVFBfU1RBVEVfUEFSVElB
TF9NU0dfTEVGVCk7CisJCQl9CisJCQlpZiAoVEFJTFFfRU1QVFkoJmFzb2MtPnNlbmRfcXVldWUp
ICYmCisJCQkgICAgVEFJTFFfRU1QVFkoJmFzb2MtPnNlbnRfcXVldWUpICYmCisJCQkgICAgKGFz
b2MtPnN0YXRlICYgU0NUUF9TVEFURV9QQVJUSUFMX01TR19MRUZUKSkgeworCQkJCXN0cnVjdCBt
YnVmICpvcF9lcnI7CisJCQlhYm9ydF9hbnl3YXk6CisJCQkJb3BfZXJyID0gc2N0cF9nZW5lcmF0
ZV9jYXVzZShTQ1RQX0NBVVNFX1VTRVJfSU5JVElBVEVEX0FCVCwgIiIpOworCQkJCXN0Y2ItPnNj
dHBfZXAtPmxhc3RfYWJvcnRfY29kZSA9IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9D
XzY7CisJCQkJc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdGNiLT5zY3RwX2VwLCBzdGNiLAor
CQkJCQkJCSAgb3BfZXJyLCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhp
bnApOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCX0KKwkJc2N0cF90aW1lcl9zdGFydChTQ1RQ
X1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0cCk7CisJ
CS8qIFhYWDogV2h5IGRvIHRoaXMgaW4gdGhlIGNhc2Ugd2hlcmUgd2UgaGF2ZSBzdGlsbCBkYXRh
IHF1ZXVlZD8gKi8KKwkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9G
Uk9NX0NMT1NJTkcsIFNDVFBfU09fTE9DS0VEKTsKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCXJldHVybiAoMCk7CisJfQorfQorCisvKgorICog
Y29waWVzIGEgInVzZXIiIHByZXNlbnRhYmxlIGFkZHJlc3MgYW5kIHJlbW92ZXMgZW1iZWRkZWQg
c2NvcGUsIGV0Yy4KKyAqIHJldHVybnMgMCBvbiBzdWNjZXNzLCAxIG9uIGVycm9yCisgKi8KK3N0
YXRpYyB1aW50MzJfdAorc2N0cF9maWxsX3VzZXJfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHJfc3Rv
cmFnZSAqc3MsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisjaWZkZWYgSU5FVDYKKyNpZiBkZWZp
bmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCisJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2Owor
CisJc2EgPSAoc3RydWN0IHNvY2thZGRyICopc2N0cF9yZWNvdmVyX3Njb3BlKChzdHJ1Y3Qgc29j
a2FkZHJfaW42ICopc2EsCisJICAgICZsc2E2KTsKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFW
RV9TQV9MRU4KKwltZW1jcHkoc3MsIHNhLCBzYS0+c2FfbGVuKTsKKyNlbHNlCisJc3dpdGNoIChz
YS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJbWVtY3B5KHNz
LCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkJbWVtY3B5KHNzLCBzYSwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNw
YWNlX18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoc3MsIHNhLCBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pKTsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQkvKiBUU05IICov
CisJCWJyZWFrOworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisKKworCisvKgorICogTk9U
RTogYXNzdW1lcyBhZGRyIGxvY2sgaXMgaGVsZAorICovCitzdGF0aWMgc2l6ZV90CitzY3RwX2Zp
bGxfdXBfYWRkcmVzc2VzX3ZyZihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJICAgc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorCQkJICAgc2l6ZV90IGxpbWl0LAorCQkJICAgc3RydWN0IHNvY2th
ZGRyX3N0b3JhZ2UgKnNhcywKKwkJCSAgIHVpbnQzMl90IHZyZl9pZCkKK3sKKwlzdHJ1Y3Qgc2N0
cF9pZm4gKnNjdHBfaWZuOworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJc2l6ZV90IGFj
dHVhbDsKKwlpbnQgbG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWludCBpcHY0
X2xvY2FsX3Njb3BlLCBpcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2
KQorCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlm
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7CisjZW5k
aWYKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKworCWFjdHVhbCA9IDA7CisJaWYgKGxpbWl0IDw9
IDApCisJCXJldHVybiAoYWN0dWFsKTsKKworCWlmIChzdGNiKSB7CisJCS8qIFR1cm4gb24gYWxs
IHRoZSBhcHByb3ByaWF0ZSBzY29wZSAqLworCQlsb29wYmFja19zY29wZSA9IHN0Y2ItPmFzb2Mu
c2NvcGUubG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCQlpcHY0X2xvY2FsX3Nj
b3BlID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2xvY2FsX3Njb3BlOworCQlpcHY0X2FkZHJfbGVn
YWwgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfYWRkcl9sZWdhbDsKKyNlbmRpZgorI2lmIGRlZmlu
ZWQoSU5FVDYpCisJCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9zY29wZTsK
KwkJc2l0ZV9zY29wZSA9IHN0Y2ItPmFzb2Muc2NvcGUuc2l0ZV9zY29wZTsKKwkJaXB2Nl9hZGRy
X2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY2X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2Nv
cGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJfSBlbHNlIHsKKwkJLyogVXNlIGdlbmVyaWMg
dmFsdWVzIGZvciBlbmRwb2ludHMuICovCisJCWxvb3BiYWNrX3Njb3BlID0gMTsKKyNpZiBkZWZp
bmVkKElORVQpCisJCWlwdjRfbG9jYWxfc2NvcGUgPSAxOworI2VuZGlmCisjaWYgZGVmaW5lZChJ
TkVUNikKKwkJbG9jYWxfc2NvcGUgPSAxOworCQlzaXRlX3Njb3BlID0gMTsKKyNlbmRpZgorCQlp
ZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKyNpZiBkZWZp
bmVkKElORVQ2KQorCQkJaXB2Nl9hZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorI2lmIGRlZmluZWQo
SU5FVCkKKwkJCWlmIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQlpcHY0X2FkZHJfbGVn
YWwgPSAwOworCQkJfSBlbHNlIHsKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAxOworCQkJfQorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY29ubl9hZGRyX2xlZ2FsID0gMDsK
KyNlbmRpZgorCQl9IGVsc2UgeworI2lmIGRlZmluZWQoSU5FVDYpCisJCQlpcHY2X2FkZHJfbGVn
YWwgPSAwOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pIHsKKwkJCQljb25uX2FkZHJf
bGVnYWwgPSAxOworI2lmIGRlZmluZWQoSU5FVCkKKwkJCQlpcHY0X2FkZHJfbGVnYWwgPSAwOwor
I2VuZGlmCisJCQl9IGVsc2UgeworCQkJCWNvbm5fYWRkcl9sZWdhbCA9IDA7CisjaWYgZGVmaW5l
ZChJTkVUKQorCQkJCWlwdjRfYWRkcl9sZWdhbCA9IDE7CisjZW5kaWYKKwkJCX0KKyNlbHNlCisj
aWYgZGVmaW5lZChJTkVUKQorCQkJaXB2NF9hZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorI2VuZGlm
CisJCX0KKwl9CisJdnJmID0gc2N0cF9maW5kX3ZyZih2cmZfaWQpOworCWlmICh2cmYgPT0gTlVM
TCkgeworCQlyZXR1cm4gKDApOworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRBTEwpIHsKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5saXN0
LCBuZXh0X2lmbikgeworCQkJaWYgKChsb29wYmFja19zY29wZSA9PSAwKSAmJgorCQkJICAgIFND
VFBfSUZOX0lTX0lGVF9MT09QKHNjdHBfaWZuKSkgeworCQkJCS8qIFNraXAgbG9vcGJhY2sgaWYg
bG9vcGJhY2tfc2NvcGUgbm90IHNldCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJTElTVF9G
T1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlmYWxpc3QsIG5leHRfaWZhKSB7CisJCQkJaWYg
KHN0Y2IpIHsKKwkJCQkJLyoKKwkJCQkJICogRm9yIHRoZSBCT1VORC1BTEwgY2FzZSwgdGhlIGxp
c3QKKwkJCQkJICogYXNzb2NpYXRlZCB3aXRoIGEgVENCIGlzIEFsd2F5cworCQkJCQkgKiBjb25z
aWRlcmVkIGEgcmV2ZXJzZSBsaXN0Li4gaS5lLgorCQkJCQkgKiBpdCBsaXN0cyBhZGRyZXNzZXMg
dGhhdCBhcmUgTk9UCisJCQkJCSAqIHBhcnQgb2YgdGhlIGFzc29jaWF0aW9uLiBJZiB0aGlzCisJ
CQkJCSAqIGlzIG9uZSBvZiB0aG9zZSB3ZSBtdXN0IHNraXAgaXQuCisJCQkJCSAqLworCQkJCQlp
ZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwKKwkJCQkJCQkJICAgIHNjdHBfaWZhKSkg
eworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQl9CisJCQkJc3dpdGNoIChzY3RwX2lmYS0+
YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgor
CQkJCQlpZiAoaXB2NF9hZGRyX2xlZ2FsKSB7CisJCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNp
bjsKKworCQkJCQkJc2luID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjsKKwkJCQkJCWlmIChzaW4t
PnNpbl9hZGRyLnNfYWRkciA9PSAwKSB7CisJCQkJCQkJLyoKKwkJCQkJCQkgKiB3ZSBza2lwIHVu
c3BlY2lmZWQKKwkJCQkJCQkgKiBhZGRyZXNzZXMKKwkJCQkJCQkgKi8KKwkJCQkJCQljb250aW51
ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9j
aGVja19pcDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkJICAgICAgICAgICAgICAg
ICAgICAgJnNpbi0+c2luX2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0K
KyNlbmRpZgorCQkJCQkJaWYgKChpcHY0X2xvY2FsX3Njb3BlID09IDApICYmCisJCQkJCQkgICAg
KElONF9JU1BSSVZBVEVfQUREUkVTUygmc2luLT5zaW5fYWRkcikpKSB7CisJCQkJCQkJY29udGlu
dWU7CisJCQkJCQl9CisjaWZkZWYgSU5FVDYKKwkJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24o
aW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7CisJCQkJCQkJaW42X3Npbl8y
X3Y0bWFwc2luNihzaW4sIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FzKTsKKwkJCQkJCQkoKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilzYXMpLT5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJ
CQkJCQkJc2FzID0gKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQkJCQkJYWN0dWFsICs9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQkJCX0gZWxzZSB7CisjZW5kaWYKKwkJCQkJCQltZW1jcHko
c2FzLCBzaW4sIHNpemVvZigqc2luKSk7CisJCQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilz
YXMpLT5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJCQlzYXMgPSAoc3RydWN0IHNv
Y2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKCpzaW4pKTsKKwkJCQkJCQlh
Y3R1YWwgKz0gc2l6ZW9mKCpzaW4pOworI2lmZGVmIElORVQ2CisJCQkJCQl9CisjZW5kaWYKKwkJ
CQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKKwkJCQkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQkJ
CQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlicmVhazsK
KyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJaWYgKGlwdjZf
YWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworI2lmIGRl
ZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRlZmluZWQoU0NUUF9LQU1FKQorCQkJ
CQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OworI2VuZGlmCisJCQkJCQlzaW42ID0gJnNjdHBf
aWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNp
bjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQkvKgorCQkJCQkJCSAqIHdlIHNraXAgdW5zcGVjaWZl
ZAorCQkJCQkJCSAqIGFkZHJlc3NlcworCQkJCQkJCSAqLworCQkJCQkJCWNvbnRpbnVlOworCQkJ
CQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCQlpZiAocHJpc29uX2NoZWNrX2lw
NihpbnAtPmlwX2lucC5pbnAuaW5wX2NyZWQsCisJCQkJCQkgICAgICAgICAgICAgICAgICAgICAm
c2luNi0+c2luNl9hZGRyKSAhPSAwKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisjZW5k
aWYKKwkJCQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsK
KwkJCQkJCQlpZiAobG9jYWxfc2NvcGUgPT0gMCkKKwkJCQkJCQkJY29udGludWU7CisjaWYgZGVm
aW5lZChTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFKQorCQkJCQkJCWlmIChzaW42LT5zaW42X3Njb3Bl
X2lkID09IDApIHsKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJCQkJCQkJaWYgKHNhNl9yZWNvdmVyc2Nv
cGUoc2luNikgIT0gMCkKKwkJCQkJCQkJCS8qCisJCQkJCQkJCQkgKiBiYWQgbGluaworCQkJCQkJ
CQkJICogbG9jYWwKKwkJCQkJCQkJCSAqIGFkZHJlc3MKKwkJCQkJCQkJCSAqLworCQkJCQkJCQkJ
Y29udGludWU7CisjZWxzZQorCQkJCQkJCQlsc2E2ID0gKnNpbjY7CisJCQkJCQkJCWlmIChpbjZf
cmVjb3ZlcnNjb3BlKCZsc2E2LAorCQkJCQkJCQkJCSAgICAgJmxzYTYuc2luNl9hZGRyLAorCQkJ
CQkJCQkJCSAgICAgTlVMTCkpCisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJ
CQkJCQkJCSAqIGxvY2FsCisJCQkJCQkJCQkgKiBhZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJ
CQkJY29udGludWU7CisJCQkJCQkJCXNpbjYgPSAmbHNhNjsKKyNlbmRpZgkJCQkvKiBTQ1RQX0tB
TUUgKi8KKwkJCQkJCQl9CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQkJ
CQkJfQorCQkJCQkJaWYgKChzaXRlX3Njb3BlID09IDApICYmCisJCQkJCQkgICAgKElONl9JU19B
RERSX1NJVEVMT0NBTCgmc2luNi0+c2luNl9hZGRyKSkpIHsKKwkJCQkJCQljb250aW51ZTsKKwkJ
CQkJCX0KKwkJCQkJCW1lbWNweShzYXMsIHNpbjYsIHNpemVvZigqc2luNikpOworCQkJCQkJKChz
dHJ1Y3Qgc29ja2FkZHJfaW42ICopc2FzKS0+c2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0Owor
CQkJCQkJc2FzID0gKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlICopKChjYWRkcl90KXNhcyArIHNp
emVvZigqc2luNikpOworCQkJCQkJYWN0dWFsICs9IHNpemVvZigqc2luNik7CisJCQkJCQlpZiAo
YWN0dWFsID49IGxpbWl0KSB7CisJCQkJCQkJcmV0dXJuIChhY3R1YWwpOworCQkJCQkJfQorCQkJ
CQl9IGVsc2UgeworCQkJCQkJY29udGludWU7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlpZiAo
Y29ubl9hZGRyX2xlZ2FsKSB7CisJCQkJCQltZW1jcHkoc2FzLCAmc2N0cF9pZmEtPmFkZHJlc3Mu
c2Nvbm4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJCQkJKChzdHJ1Y3Qgc29j
a2FkZHJfY29ubiAqKXNhcyktPnNjb25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCQlz
YXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCQkJCQlhY3R1YWwgKz0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9jb25uKTsKKwkJCQkJCWlmIChhY3R1YWwgPj0gbGltaXQpIHsKKwkJCQkJCQlyZXR1cm4g
KGFjdHVhbCk7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsKKwkJCQkJ
fQorI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJLyogVFNOSCAqLworCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7Cisj
aWZuZGVmIEhBVkVfU0FfTEVOCisJCXVpbnQzMl90IHNhX2xlbiA9IDA7CisjZW5kaWYKKworCQlM
SVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9hZGRyKSB7
CisJCQlpZiAoc3RjYikgeworCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBs
YWRkci0+aWZhKSkgeworCQkJCQljb250aW51ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAoc2N0cF9m
aWxsX3VzZXJfYWRkcmVzcyhzYXMsICZsYWRkci0+aWZhLT5hZGRyZXNzLnNhKSkKKwkJCQljb250
aW51ZTsKKwkJCXN3aXRjaCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilz
YXMpLT5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lm
ZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAq
KXNhcyktPnNpbjZfcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQlicmVhazsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWNhc2UgQUZfQ09OTjoKKwkJCQkoKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopc2FzKS0+c2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJ
CQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7
CisJCQl9CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCXNhcyA9IChzdHJ1Y3Qgc29ja2FkZHJfc3Rv
cmFnZSAqKSgoY2FkZHJfdClzYXMgKworCQkJCQkJCSAgbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5z
YV9sZW4pOworCQkJYWN0dWFsICs9IGxhZGRyLT5pZmEtPmFkZHJlc3Muc2Euc2FfbGVuOworI2Vs
c2UKKwkJCXN3aXRjaCAobGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpIHsKKyNpZmRl
ZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisJCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJYnJl
YWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46
CisJCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQlicmVhazsK
KyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQkvKiBUU05IICovCisJCQkJYnJlYWs7CisJCQl9CisJ
CQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2FfbGVu
KTsKKwkJCWFjdHVhbCArPSBzYV9sZW47CisjZW5kaWYKKwkJCWlmIChhY3R1YWwgPj0gbGltaXQp
IHsKKwkJCQlyZXR1cm4gKGFjdHVhbCk7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChhY3R1YWwp
OworfQorCitzdGF0aWMgc2l6ZV90CitzY3RwX2ZpbGxfdXBfYWRkcmVzc2VzKHN0cnVjdCBzY3Rw
X2lucGNiICppbnAsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxpbWl0LAorICAgICAgICAgICAgICAg
ICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2FzKQoreworCXNpemVfdCBzaXplID0g
MDsKKyNpZmRlZiBTQ1RQX01WUkYKKwl1aW50MzJfdCBpZDsKKyNlbmRpZgorCisJU0NUUF9JUElf
QUREUl9STE9DSygpOworI2lmZGVmIFNDVFBfTVZSRgorLyoKKyAqIEZJWCBNRTogPz8gdGhpcyBX
SUxMIHJlcG9ydCBkdXBsaWNhdGUgYWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCisgKiBpbiBtb3Jl
IHRoYW4gb25lIFZSRi4KKyAqLworCS8qIGZpbGwgdXAgYWRkcmVzc2VzIGZvciBhbGwgVlJGcyBv
biB0aGUgZW5kcG9pbnQgKi8KKwlmb3IgKGlkID0gMDsgKGlkIDwgaW5wLT5udW1fdnJmcykgJiYg
KHNpemUgPCBsaW1pdCk7IGlkKyspIHsKKwkJc2l6ZSArPSBzY3RwX2ZpbGxfdXBfYWRkcmVzc2Vz
X3ZyZihpbnAsIHN0Y2IsIGxpbWl0LCBzYXMsCisJCQkJCQkgICBpbnAtPm1fdnJmX2lkc1tpZF0p
OworCQlzYXMgPSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgc2l6
ZSk7CisJfQorI2Vsc2UKKwkvKiBmaWxsIHVwIGFkZHJlc3NlcyBmb3IgdGhlIGVuZHBvaW50J3Mg
ZGVmYXVsdCB2cmYgKi8KKwlzaXplID0gc2N0cF9maWxsX3VwX2FkZHJlc3Nlc192cmYoaW5wLCBz
dGNiLCBsaW1pdCwgc2FzLAorCQkJCQkgIGlucC0+ZGVmX3ZyZl9pZCk7CisjZW5kaWYKKwlTQ1RQ
X0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1cm4gKHNpemUpOworfQorCisvKgorICogTk9URTog
YXNzdW1lcyBhZGRyIGxvY2sgaXMgaGVsZAorICovCitzdGF0aWMgaW50CitzY3RwX2NvdW50X21h
eF9hZGRyZXNzZXNfdnJmKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQzMl90IHZyZl9pZCkK
K3sKKwlpbnQgY250ID0gMDsKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZiA9IE5VTEw7CisKKwkvKgor
CSAqIEluIGJvdGggc3ViLXNldCBib3VuZCBhbiBib3VuZF9hbGwgY2FzZXMgd2UgcmV0dXJuIHRo
ZSBNQVhJTVVNCisJICogbnVtYmVyIG9mIGFkZHJlc3NlcyB0aGF0IHlvdSBDT1VMRCBnZXQuIElu
IHJlYWxpdHkgdGhlIHN1Yi1zZXQKKwkgKiBib3VuZCBtYXkgaGF2ZSBhbiBleGNsdXNpb24gbGlz
dCBmb3IgYSBnaXZlbiBUQ0IgT1IgaW4gdGhlCisJICogYm91bmQtYWxsIGNhc2UgYSBUQ0IgbWF5
IE5PVCBpbmNsdWRlIHRoZSBsb29wYmFjayBvciBvdGhlcgorCSAqIGFkZHJlc3NlcyBhcyB3ZWxs
LgorCSAqLworCXZyZiA9IHNjdHBfZmluZF92cmYodnJmX2lkKTsKKwlpZiAodnJmID09IE5VTEwp
IHsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX0JPVU5EQUxMKSB7CisJCXN0cnVjdCBzY3RwX2lmbiAqc2N0cF9pZm47CisJCXN0cnVjdCBz
Y3RwX2lmYSAqc2N0cF9pZmE7CisKKwkJTElTVF9GT1JFQUNIKHNjdHBfaWZuLCAmdnJmLT5pZm5s
aXN0LCBuZXh0X2lmbikgeworCQkJTElTVF9GT1JFQUNIKHNjdHBfaWZhLCAmc2N0cF9pZm4tPmlm
YWxpc3QsIG5leHRfaWZhKSB7CisJCQkJLyogQ291bnQgdGhlbSBpZiB0aGV5IGFyZSB0aGUgcmln
aHQgdHlwZSAqLworCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBJTkVUNgorCQkJCQlpZiAo
c2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkK
KwkJCQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCWVsc2UKKwkJ
CQkJCWNudCArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbHNlCisJCQkJCWNudCAr
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCQkJCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJY250ICs9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9jb25uKTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJ
CQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlzdHJ1Y3Qgc2N0cF9sYWRk
ciAqbGFkZHI7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwg
c2N0cF9ueHRfYWRkcikgeworCQkJc3dpdGNoIChsYWRkci0+aWZhLT5hZGRyZXNzLnNhLnNhX2Zh
bWlseSkgeworI2lmZGVmIElORVQKKwkJCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBJTkVUNgorCQkJ
CWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURf
VjQpKQorCQkJCQljbnQgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCWVsc2UK
KwkJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2Vsc2UKKwkJCQljbnQg
Kz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCQlicmVhazsKKyNlbmRp
ZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCWNudCArPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luNik7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJY250ICs9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfY29ubik7CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChjbnQpOworfQorCitzdGF0aWMgaW50CitzY3RwX2Nv
dW50X21heF9hZGRyZXNzZXMoc3RydWN0IHNjdHBfaW5wY2IgKmlucCkKK3sKKwlpbnQgY250ID0g
MDsKKyNpZmRlZiBTQ1RQX01WUkYKKwlpbnQgaWQ7CisjZW5kaWYKKworCVNDVFBfSVBJX0FERFJf
UkxPQ0soKTsKKyNpZmRlZiBTQ1RQX01WUkYKKy8qCisgKiBGSVggTUU6ID8/IHRoaXMgV0lMTCBj
b3VudCBkdXBsaWNhdGUgYWRkcmVzc2VzIGlmIHRoZXkgYXBwZWFyCisgKiBpbiBtb3JlIHRoYW4g
b25lIFZSRi4KKyAqLworCS8qIGNvdW50IGFkZHJlc3NlcyBmb3IgYWxsIFZSRnMgb24gdGhlIGVu
ZHBvaW50ICovCisJZm9yIChpZCA9IDA7IGlkIDwgaW5wLT5udW1fdnJmczsgaWQrKykgeworCQlj
bnQgKz0gc2N0cF9jb3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlucC0+bV92cmZfaWRzW2lk
XSk7CisJfQorI2Vsc2UKKwkvKiBjb3VudCBhZGRyZXNzZXMgZm9yIHRoZSBlbmRwb2ludCdzIGRl
ZmF1bHQgVlJGICovCisJY250ID0gc2N0cF9jb3VudF9tYXhfYWRkcmVzc2VzX3ZyZihpbnAsIGlu
cC0+ZGVmX3ZyZl9pZCk7CisjZW5kaWYKKwlTQ1RQX0lQSV9BRERSX1JVTkxPQ0soKTsKKwlyZXR1
cm4gKGNudCk7Cit9CisKK3N0YXRpYyBpbnQKK3NjdHBfZG9fY29ubmVjdF94KHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCB2b2lkICpvcHR2YWwsCisJCSAgc2l6ZV90
IG9wdHNpemUsIHZvaWQgKnAsIGludCBkZWxheSkKK3sKKwlpbnQgZXJyb3IgPSAwOworCWludCBj
cmVhdF9sb2NrX29uID0gMDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IgPSBOVUxMOworCXN0cnVj
dCBzb2NrYWRkciAqc2E7CisJdW5zaWduZWQgaW50IG51bV92NiA9IDAsIG51bV92NCA9IDAsICp0
b3RhZGRycCwgdG90YWRkcjsKKwl1aW50MzJfdCB2cmZfaWQ7CisJaW50IGJhZF9hZGRyZXNzZXMg
PSAwOworCXNjdHBfYXNzb2NfdCAqYV9pZDsKKworCVNDVFBEQkcoU0NUUF9ERUJVR19QQ0IxLCAi
Q29ubmVjdHggY2FsbGVkXG4iKTsKKworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfVENQVFlQRSkgJiYKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRCkpIHsKKwkJLyogV2UgYXJlIGFscmVhZHkgY29ubmVjdGVkIEFORCB0aGUgVENQ
IG1vZGVsICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVBRERSSU5VU0UpOworCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCX0K
KworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgJiYK
KwkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JUUkVVU0Up
KSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaWYgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgeworCQlTQ1RQX0lOUF9STE9D
SyhpbnApOworCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7CisJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwl9CisJaWYgKHN0Y2IpIHsKKwkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOwor
CQlyZXR1cm4gKEVBTFJFQURZKTsKKwl9CisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlTQ1RQ
X0FTT0NfQ1JFQVRFX0xPQ0soaW5wKTsKKwljcmVhdF9sb2NrX29uID0gMTsKKwlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoaW5w
LT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpKSB7CisJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVM
VCk7CisJCWVycm9yID0gRUZBVUxUOworCQlnb3RvIG91dF9ub3c7CisJfQorCXRvdGFkZHJwID0g
KHVuc2lnbmVkIGludCAqKW9wdHZhbDsKKwl0b3RhZGRyID0gKnRvdGFkZHJwOworCXNhID0gKHN0
cnVjdCBzb2NrYWRkciAqKSh0b3RhZGRycCArIDEpOworCXN0Y2IgPSBzY3RwX2Nvbm5lY3R4X2hl
bHBlcl9maW5kKGlucCwgc2EsICZ0b3RhZGRyLCAmbnVtX3Y0LCAmbnVtX3Y2LCAmZXJyb3IsICh1
bnNpZ25lZCBpbnQpKG9wdHNpemUgLSBzaXplb2YoaW50KSksICZiYWRfYWRkcmVzc2VzKTsKKwlp
ZiAoKHN0Y2IgIT0gTlVMTCkgfHwgYmFkX2FkZHJlc3NlcykgeworCQkvKiBBbHJlYWR5IGhhdmUg
b3IgYW0gYnJpbmcgdXAgYW4gYXNzb2NpYXRpb24gKi8KKwkJU0NUUF9BU09DX0NSRUFURV9VTkxP
Q0soaW5wKTsKKwkJY3JlYXRfbG9ja19vbiA9IDA7CisJCWlmIChzdGNiKQorCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQlpZiAoYmFkX2FkZHJlc3NlcyA9PSAwKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxSRUFE
WSk7CisJCQllcnJvciA9IEVBTFJFQURZOworCQl9CisJCWdvdG8gb3V0X25vdzsKKwl9CisjaWZk
ZWYgSU5FVDYKKwlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9W
NikgPT0gMCkgJiYKKwkgICAgKG51bV92NiA+IDApKSB7CisJCWVycm9yID0gRUlOVkFMOworCQln
b3RvIG91dF9ub3c7CisJfQorCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
Qk9VTkRfVjYpICYmCisJICAgIChudW1fdjQgPiAwKSkgeworCQlzdHJ1Y3QgaW42cGNiICppbnA2
OworCisJCWlucDYgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKKwkJaWYgKFNDVFBfSVBWNl9WNk9O
TFkoaW5wNikpIHsKKwkJCS8qCisJCQkgKiBpZiBJUFY2X1Y2T05MWSBmbGFnLCBpZ25vcmUgY29u
bmVjdGlvbnMgZGVzdGluZWQKKwkJCSAqIHRvIGEgdjQgYWRkciBvciB2NC1tYXBwZWQgYWRkcgor
CQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlnb3RvIG91dF9u
b3c7CisJCX0KKwl9CisjZW5kaWYJCQkJLyogSU5FVDYgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpID09CisJICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9V
TkQpIHsKKwkJLyogQmluZCBhIGVwaGVtZXJhbCBwb3J0ICovCisJCWVycm9yID0gc2N0cF9pbnBj
Yl9iaW5kKHNvLCBOVUxMLCBOVUxMLCBwKTsKKwkJaWYgKGVycm9yKSB7CisJCQlnb3RvIG91dF9u
b3c7CisJCX0KKwl9CisKKwkvKiBGSVggTUU6IGRvIHdlIHdhbnQgdG8gcGFzcyBpbiBhIHZyZiBv
biB0aGUgY29ubmVjdCBjYWxsPyAqLworCXZyZl9pZCA9IGlucC0+ZGVmX3ZyZl9pZDsKKworCisJ
LyogV2UgYXJlIEdPT0QgdG8gZ28gKi8KKwlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgc2Es
ICZlcnJvciwgMCwgdnJmX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2Vw
LnByZV9vcGVuX3N0cmVhbV9jb3VudCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0
cF9lcC5wb3J0LAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9u
ID49IDUwMDAwMAorCQkJICAgICAgIChzdHJ1Y3QgdGhyZWFkICopcAorI2VsaWYgZGVmaW5lZChf
X1dpbmRvd3NfXykKKwkJCSAgICAgICAoUEtUSFJFQUQpcAorI2Vsc2UKKwkJCSAgICAgICAoc3Ry
dWN0IHByb2MgKilwCisjZW5kaWYKKwkJKTsKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCS8qIEdh
ayEgbm8gbWVtb3J5ICovCisJCWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB7CisJCXN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEOworCQkvKiBTZXQgdGhlIGNv
bm5lY3RlZCBmbGFnIHNvIHdlIGNhbiBxdWV1ZSBkYXRhICovCisJCXNvaXNjb25uZWN0aW5nKHNv
KTsKKwl9CisJU0NUUF9TRVRfU1RBVEUoJnN0Y2ItPmFzb2MsIFNDVFBfU1RBVEVfQ09PS0lFX1dB
SVQpOworCS8qIG1vdmUgdG8gc2Vjb25kIGFkZHJlc3MgKi8KKwlzd2l0Y2ggKHNhLT5zYV9mYW1p
bHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlzYSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlzYSA9IChzdHJ1Y3Qg
c29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwor
CQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCWVycm9yID0gMDsK
KwlzY3RwX2Nvbm5lY3R4X2hlbHBlcl9hZGQoc3RjYiwgc2EsICh0b3RhZGRyLTEpLCAmZXJyb3Ip
OworCS8qIEZpbGwgaW4gdGhlIHJldHVybiBpZCAqLworCWlmIChlcnJvcikgeworCQkodm9pZClz
Y3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX1BDQkZSRUVfRk9SQ0UsCisJCSAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ183KTsKKwkJZ290
byBvdXRfbm93OworCX0KKwlhX2lkID0gKHNjdHBfYXNzb2NfdCAqKW9wdHZhbDsKKwkqYV9pZCA9
IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisKKwkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9u
IHBhcmFtZXRlcnMgZm9yIHRoZSBhc3NvYyAqLworCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFt
cyhpbnAsIHN0Y2IpOworCisJaWYgKGRlbGF5KSB7CisJCS8qIGRvaW5nIGRlbGF5ZWQgY29ubmVj
dGlvbiAqLworCQlzdGNiLT5hc29jLmRlbGF5ZWRfY29ubmVjdGlvbiA9IDE7CisJCXNjdHBfdGlt
ZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0lOSVQsIGlucCwgc3RjYiwgc3RjYi0+YXNvYy5wcmlt
YXJ5X2Rlc3RpbmF0aW9uKTsKKwl9IGVsc2UgeworCQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZB
TCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworCQlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBz
dGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisJfQorCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKyBvdXRf
bm93OgorCWlmIChjcmVhdF9sb2NrX29uKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlu
cCk7CisJfQorCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJcmV0dXJuIChlcnJvcik7Cit9CisK
KyNkZWZpbmUgU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhc3NvY19pZCkgeyBcCisJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fFwKKwkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7IFwKKwkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsgXAorCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlzdCk7
IFwKKwkJaWYgKHN0Y2IpIHsgXAorCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsgXAorCQl9IFwKKwkJ
U0NUUF9JTlBfUlVOTE9DSyhpbnApOyBcCisJfSBlbHNlIGlmIChhc3NvY19pZCA+IFNDVFBfQUxM
X0FTU09DKSB7IFwKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2Fzb2NpZChpbnAs
IGFzc29jX2lkLCAxKTsgXAorCQlpZiAoc3RjYiA9PSBOVUxMKSB7IFwKKwkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7
IFwKKwkJCWVycm9yID0gRU5PRU5UOyBcCisJCQlicmVhazsgXAorCQl9IFwKKwl9IGVsc2UgeyBc
CisJCXN0Y2IgPSBOVUxMOyBcCisJfSBcCit9CisKKworI2RlZmluZSBTQ1RQX0NIRUNLX0FORF9D
QVNUKGRlc3RwLCBzcmNwLCB0eXBlLCBzaXplKSB7XAorCWlmIChzaXplIDwgc2l6ZW9mKHR5cGUp
KSB7IFwKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsgXAorCQllcnJvciA9IEVJTlZBTDsgXAorCQlicmVhazsgXAor
CX0gZWxzZSB7IFwKKwkJZGVzdHAgPSAodHlwZSAqKXNyY3A7IFwKKwl9IFwKK30KKworI2lmIGRl
ZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNlbHNlCitz
dGF0aWMgaW50CisjZW5kaWYKK3NjdHBfZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0
bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3QgKm9wdHNpemUsCisJICAgIHZvaWQgKnApIHsKKwlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wID0gTlVMTDsKKwlpbnQgZXJyb3IsIHZhbCA9IDA7CisJc3Ry
dWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKworCWlmIChvcHR2YWwgPT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorCisJaW5wID0gKHN0cnVjdCBzY3Rw
X2lucGNiICopc28tPnNvX3BjYjsKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJcmV0dXJuIEVJTlZBTDsKKwl9CisJZXJyb3IgPSAwOworCisJc3dpdGNoIChvcHRuYW1lKSB7
CisJY2FzZSBTQ1RQX05PREVMQVk6CisJY2FzZSBTQ1RQX0FVVE9DTE9TRToKKwljYXNlIFNDVFBf
RVhQTElDSVRfRU9SOgorCWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoKKwljYXNlIFNDVFBfRElTQUJM
RV9GUkFHTUVOVFM6CisJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQUREUjoKKwljYXNlIFND
VFBfVVNFX0VYVF9SQ1ZJTkZPOgorCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlzd2l0Y2ggKG9w
dG5hbWUpIHsKKwkJY2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgorCQkJdmFsID0gc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9fRlJBR01FTlQpOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFI6CisJCQl2YWwgPSBzY3RwX2lzX2Zl
YXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9BVVRPX0FTQ09ORjoKKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkJCS8qIG9ubHkgdmFsaWQgZm9yIGJvdW5kIGFsbCBz
b2NrZXRzICovCisJCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxB
R1NfQVVUT19BU0NPTkYpOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9y
ID0gRUlOVkFMOworCQkJCWdvdG8gZmxhZ3Nfb3V0OworCQkJfQorCQkJYnJlYWs7CisJCWNhc2Ug
U0NUUF9FWFBMSUNJVF9FT1I6CisJCQl2YWwgPSBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQ
X1BDQl9GTEFHU19FWFBMSUNJVF9FT1IpOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9OT0RFTEFZ
OgorCQkJdmFsID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTk9ERUxB
WSk7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1VTRV9FWFRfUkNWSU5GTzoKKwkJCXZhbCA9IHNj
dHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPKTsKKwkJCWJy
ZWFrOworCQljYXNlIFNDVFBfQVVUT0NMT1NFOgorCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihp
bnAsIFNDVFBfUENCX0ZMQUdTX0FVVE9DTE9TRSkpCisJCQkJdmFsID0gVElDS1NfVE9fU0VDKGlu
cC0+c2N0cF9lcC5hdXRvX2Nsb3NlX3RpbWUpOworCQkJZWxzZQorCQkJCXZhbCA9IDA7CisJCQli
cmVhazsKKworCQlkZWZhdWx0OgorCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PUFJPVE9PUFQpOworCQkJZXJyb3IgPSBFTk9Q
Uk9UT09QVDsKKwkJfSAvKiBlbmQgc3dpdGNoIChzb3B0LT5zb3B0X25hbWUpICovCisJCWlmICgq
b3B0c2l6ZSA8IHNpemVvZih2YWwpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5W
QUw7CisJCX0KKwlmbGFnc19vdXQ6CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJaWYgKGVy
cm9yID09IDApIHsKKwkJCS8qIHJldHVybiB0aGUgb3B0aW9uIHZhbHVlICovCisJCQkqKGludCAq
KW9wdHZhbCA9IHZhbDsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHZhbCk7CisJCX0KKwkJYnJlYWs7
CisgICAgICAgIGNhc2UgU0NUUF9HRVRfUEFDS0VUX0xPRzoKKwl7CisjaWZkZWYgIFNDVFBfUEFD
S0VUX0xPR0dJTkcKKwkJdWludDhfdCAqdGFyZ2V0OworCQlpbnQgcmV0OworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QodGFyZ2V0LCBvcHR2YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKKwkJcmV0ID0g
c2N0cF9jb3B5X291dF9wYWNrZXRfbG9nKHRhcmdldCAsIChpbnQpKm9wdHNpemUpOworCQkqb3B0
c2l6ZSA9IHJldDsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQllcnJvciA9IEVPUE5PVFNV
UFA7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRVVTRV9QT1JUOgorCXsKKwkJ
dWludDMyX3QgKnZhbHVlOworCisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVURQVFlQRSkpIHsKKwkJCS8qIENhbid0IGRvIHRoaXMgZm9yIGEgMS1tIHNvY2tldCAqLwor
CQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KHZhbHVlLCBvcHR2YWwsIHVpbnQzMl90LCAqb3B0c2l6ZSk7CisJCSp2YWx1ZSA9IHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRSRVVTRSk7CisJCSpvcHRzaXplID0g
c2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElW
RVJZX1BPSU5UOgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpvcHRzaXplKTsKKwkJKnZhbHVlID0gaW5wLT5w
YXJ0aWFsX2RlbGl2ZXJ5X3BvaW50OworCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToKKwl7CisJCXVpbnQz
Ml90ICp2YWx1ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVpbnQz
Ml90LCAqb3B0c2l6ZSk7CisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19GUkFHX0lOVEVSTEVBVkUpKSB7CisJCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwg
U0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykpIHsKKwkJCQkqdmFsdWUgPSBTQ1RQX0ZS
QUdfTEVWRUxfMjsKKwkJCX0gZWxzZSB7CisJCQkJKnZhbHVlID0gU0NUUF9GUkFHX0xFVkVMXzE7
CisJCQl9CisJCX0gZWxzZSB7CisJCQkqdmFsdWUgPSBTQ1RQX0ZSQUdfTEVWRUxfMDsKKwkJfQor
CQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
SU5URVJMRUFWSU5HX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICph
djsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29j
X2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy5p
ZGF0YV9zdXBwb3J0ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJ
CQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkg
ICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQkJCWlmIChpbnAtPmlkYXRhX3N1cHBvcnRlZCkgeworCQkJCQlhdi0+YXNz
b2NfdmFsdWUgPSAxOworCQkJCX0gZWxzZSB7CisJCQkJCWF2LT5hc3NvY192YWx1ZSA9IDA7CisJ
CQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkg
eworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfQ01UX09OX09GRjoKKwl7CisJCXN0cnVjdCBzY3RwX2Fz
c29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVj
dCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0
Y2ItPmFzb2Muc2N0cF9jbXRfb25fb2ZmOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfY210
X29uX29mZjsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09
IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJ
fQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BMVUdHQUJMRV9DQzoKKwl7CisJCXN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWws
IHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1
ZSA9IHN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9jb250cm9sX21vZHVsZTsKKwkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJF
X0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVl
ID0gaW5wLT5zY3RwX2VwLnNjdHBfZGVmYXVsdF9jY19tb2R1bGU7CisJCQkJU0NUUF9JTlBfUlVO
TE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlO
VkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NU
UF9DQ19PUFRJT046CisJeworCQlzdHJ1Y3Qgc2N0cF9jY19vcHRpb24gKmNjX29wdDsKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKGNjX29wdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9jY19vcHRpb24s
ICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBjY19vcHQtPmFpZF92YWx1
ZS5hc3NvY19pZCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCWVycm9yID0gRUlOVkFMOwor
CQl9IGVsc2UgeworCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2Nr
ZXRfb3B0aW9uID09IE5VTEwpIHsKKwkJCQllcnJvciA9IEVOT1RTVVA7CisJCQl9IGVsc2Ugewor
CQkJCWVycm9yID0gKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRfc29ja2V0X29w
dGlvbikoc3RjYiwgMCwgY2Nfb3B0KTsKKwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9jY19vcHRpb24pOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfUExVR0dBQkxFX1NTOgorCXsKKwkJc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3Rj
Yi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGU7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykp
IHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+
c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlOworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU1NfVkFM
VUU6CisJeworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tf
QU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlLCAqb3B0c2l6ZSk7
CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2Ip
IHsKKwkJCWlmICgoYXYtPnN0cmVhbV9pZCA+PSBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgfHwK
KwkJCSAgICAoc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19nZXRfdmFsdWUoc3RjYiwg
JnN0Y2ItPmFzb2MsICZzdGNiLT5hc29jLnN0cm1vdXRbYXYtPnN0cmVhbV9pZF0sCisJCQkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhdi0+c3RyZWFtX3Zh
bHVlKSA8IDApKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0g
ZWxzZSB7CisJCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlKTsK
KwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCS8qIENhbid0
IGdldCBzdHJlYW0gdmFsdWUgd2l0aG91dCBhc3NvY2lhdGlvbiAqLworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX0FE
RFJfTEVOOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hF
Q0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXpl
KTsKKwkJZXJyb3IgPSBFSU5WQUw7CisjaWZkZWYgSU5FVAorCQlpZiAoYXYtPmFzc29jX3ZhbHVl
ID09IEFGX0lORVQpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pOworCQkJZXJyb3IgPSAwOworCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQlpZiAo
YXYtPmFzc29jX3ZhbHVlID09IEFGX0lORVQ2KSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQllcnJvciA9IDA7CisJCX0KKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSBBRl9DT05O
KSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOwor
CQkJZXJyb3IgPSAwOworCQl9CisjZW5kaWYKKwkJaWYgKGVycm9yKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7
CisJCX0gZWxzZSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfQVNTT0NfTlVNQkVSOgorCXsK
KwkJdWludDMyX3QgKnZhbHVlLCBjbnQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwg
b3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlp
ZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCSAgICAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkpIHsKKwkJCS8qIENh
bid0IGRvIHRoaXMgZm9yIGEgMS0xIHNvY2tldCAqLworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlT
Q1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQljbnQgPSAwOworCQlMSVNU
X0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJ
Y250Kys7CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkqdmFsdWUgPSBjbnQ7CisJ
CSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9H
RVRfQVNTT0NfSURfTElTVDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX2lkcyAqaWRzOworCQl1
aW50MzJfdCBhdDsKKwkJc2l6ZV90IGxpbWl0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaWRz
LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX2lkcywgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8CisJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkpIHsKKwkJCS8qIENhbid0IGRvIHRoaXMgZm9yIGEgMS0xIHNvY2tldCAqLworCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQlh
dCA9IDA7CisJCWxpbWl0ID0gKCpvcHRzaXplIC0gc2l6ZW9mKHVpbnQzMl90KSkgLyBzaXplb2Yo
c2N0cF9hc3NvY190KTsKKwkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0
LCBzY3RwX3RjYmxpc3QpIHsKKwkJCWlmIChhdCA8IGxpbWl0KSB7CisJCQkJaWRzLT5nYWlkc19h
c3NvY19pZFthdCsrXSA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJCQkJaWYgKGF0ID09IDAp
IHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQkJYnJlYWs7CisJ
CQkJfQorCQkJfSBlbHNlIHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJ
CQkJYnJlYWs7CisJCQl9CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlpZiAoZXJy
b3IgPT0gMCkgeworCQkJaWRzLT5nYWlkc19udW1iZXJfb2ZfaWRzID0gYXQ7CisJCQkqb3B0c2l6
ZSA9ICgoYXQgKiBzaXplb2Yoc2N0cF9hc3NvY190KSkgKyBzaXplb2YodWludDMyX3QpKTsKKwkJ
fQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0NPTlRFWFQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9h
c3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0
Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9
IHN0Y2ItPmFzb2MuY29udGV4dDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNl
IHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwK
KwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBf
SU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5zY3RwX2NvbnRleHQ7
CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJ
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9WUkZfSUQ6CisJeworCQl1aW50MzJfdCAqZGVmYXVsdF92cmZp
ZDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGRlZmF1bHRfdnJmaWQsIG9wdHZhbCwgdWludDMy
X3QsICpvcHRzaXplKTsKKwkJKmRlZmF1bHRfdnJmaWQgPSBpbnAtPmRlZl92cmZfaWQ7CisJCSpv
cHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRf
QVNPQ19WUkY6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqaWQ7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChpZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGlkLT5hc3NvY19pZCk7CisJCWlmIChz
dGNiID09IE5VTEwpIHsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQl9IGVs
c2UgeworCQkJaWQtPmFzc29jX3ZhbHVlID0gc3RjYi0+YXNvYy52cmZfaWQ7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9HRVRfVlJGX0lEUzoKKwl7Cisj
aWZkZWYgU0NUUF9NVlJGCisJCWludCBzaXpfbmVlZGVkOworCQl1aW50MzJfdCAqdnJmX2lkczsK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZyZl9pZHMsIG9wdHZhbCwgdWludDMyX3QsICpvcHRz
aXplKTsKKwkJc2l6X25lZWRlZCA9IGlucC0+bnVtX3ZyZnMgKiBzaXplb2YodWludDMyX3QpOwor
CQlpZiAoKm9wdHNpemUgPCBzaXpfbmVlZGVkKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IGVycm9yKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSh2cmZfaWRzLCBpbnAtPm1fdnJmX2lkcywg
c2l6X25lZWRlZCk7CisJCQkqb3B0c2l6ZSA9IHNpel9uZWVkZWQ7CisJCX0KKyNlbHNlCisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVPUE5PVFNVUFApOworCQllcnJvciA9IEVPUE5PVFNVUFA7CisjZW5kaWYKKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9HRVRfTk9OQ0VfVkFMVUVTOgorCXsKKwkJc3RydWN0IHNjdHBfZ2V0X25v
bmNlX3ZhbHVlcyAqZ252OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZ252LCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2dldF9ub25jZV92YWx1ZXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBnbnYtPmduX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJZ252LT5n
bl9wZWVyc190YWcgPSBzdGNiLT5hc29jLnBlZXJfdnRhZzsKKwkJCWdudi0+Z25fbG9jYWxfdGFn
ID0gc3RjYi0+YXNvYy5teV92dGFnOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9w
dHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0X25vbmNlX3ZhbHVlcyk7CisJCX0gZWxzZSB7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFTk9UQ09OTik7CisJCQllcnJvciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfREVMQVlFRF9TQUNLOgorCXsKKwkJc3RydWN0IHNjdHBfc2Fja19pbmZv
ICpzYWNrOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fjaywgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9zYWNrX2luZm8sICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWNr
LT5zYWNrX2Fzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCXNhY2stPnNhY2tfZGVsYXkgPSBz
dGNiLT5hc29jLmRlbGF5ZWRfYWNrOworCQkJc2Fjay0+c2Fja19mcmVxID0gc3RjYi0+YXNvYy5z
YWNrX2ZyZXE7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNh
Y2stPnNhY2tfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBf
UkxPQ0soaW5wKTsKKwkJCQlzYWNrLT5zYWNrX2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAtPnNj
dHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9SRUNWXSk7CisJCQkJc2Fjay0+c2Fj
a19mcmVxID0gaW5wLT5zY3RwX2VwLnNjdHBfc2Fja19mcmVxOworCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yo
c3RydWN0IHNjdHBfc2Fja19pbmZvKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dF
VF9TTkRCVUZfVVNFOgorCXsKKwkJc3RydWN0IHNjdHBfc29ja3N0YXQgKnNzOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc3MsIG9wdHZhbCwgc3RydWN0IHNjdHBfc29ja3N0YXQsICpvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcy0+c3NfYXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlzcy0+c3NfdG90YWxfc25kYnVmID0gc3RjYi0+YXNvYy50b3RhbF9vdXRw
dXRfcXVldWVfc2l6ZTsKKwkJCXNzLT5zc190b3RhbF9yZWN2X2J1ZiA9IChzdGNiLT5hc29jLnNp
emVfb25fcmVhc21fcXVldWUgKworCQkJCQkJIHN0Y2ItPmFzb2Muc2l6ZV9vbl9hbGxfc3RyZWFt
cyk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9zb2Nrc3RhdCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9UQ09OTik7CisJCQllcnJv
ciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYX0JVUlNUOgor
CXsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDkwMDAw
MAorCQl1aW50OF90ICp2YWx1ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2
YWwsIHVpbnQ4X3QsICpvcHRzaXplKTsKKworCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQlpZiAo
aW5wLT5zY3RwX2VwLm1heF9idXJzdCA8IDI1NikgeworCQkJKnZhbHVlID0gaW5wLT5zY3RwX2Vw
Lm1heF9idXJzdDsKKwkJfSBlbHNlIHsKKwkJCSp2YWx1ZSA9IDI1NTsKKwkJfQorCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQ4X3QpOworI2Vsc2UKKwkJ
c3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYs
IG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5E
X1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+
YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLm1heF9idXJzdDsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
SU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYtPmFzc29jX3ZhbHVlID0gaW5w
LT5zY3RwX2VwLm1heF9idXJzdDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJ
aWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlKTsKKwkJfQorI2VuZGlmCisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYU0VHOgor
CXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCQlpbnQgb3ZoOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRz
aXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzY3RwX2dldF9mcmFnX3BvaW50KHN0Y2Is
ICZzdGNiLT5hc29jKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJ
CWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAg
ICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAg
ICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JM
T0NLKGlucCk7CisJCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5E
X1Y2KSB7CisJCQkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOworCQkJCX0gZWxzZSB7CisJCQkJ
CW92aCA9IFNDVFBfTUVEX1Y0X09WRVJIRUFEOworCQkJCX0KKwkJCQlpZiAoaW5wLT5zY3RwX2Zy
YWdfcG9pbnQgPj0gU0NUUF9ERUZBVUxUX01BWFNFR01FTlQpCisJCQkJCWF2LT5hc3NvY192YWx1
ZSA9IDA7CisJCQkJZWxzZQorCQkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPnNjdHBfZnJhZ19w
b2ludCAtIG92aDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9y
ID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsK
KwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9TVEFUX0xPRzoKKwkJZXJyb3IgPSBz
Y3RwX2ZpbGxfc3RhdF9sb2cob3B0dmFsLCBvcHRzaXplKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0VWRU5UUzoKKwl7CisJCXN0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSAqZXZlbnRzOworCisJ
CVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZlbnRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2V2ZW50X3N1
YnNjcmliZSwgKm9wdHNpemUpOworCQltZW1zZXQoZXZlbnRzLCAwLCBzaXplb2Yoc3RydWN0IHNj
dHBfZXZlbnRfc3Vic2NyaWJlKSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCWlmIChzY3Rw
X2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWREFUQUlPRVZOVCkpCisJCQll
dmVudHMtPnNjdHBfZGF0YV9pb19ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9v
bihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKQorCQkJZXZlbnRzLT5zY3RwX2Fz
c29jaWF0aW9uX2V2ZW50ID0gMTsKKworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRkcmVzc19ldmVu
dCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JF
Q1ZTRU5ERkFJTEVWTlQpKQorCQkJZXZlbnRzLT5zY3RwX3NlbmRfZmFpbHVyZV9ldmVudCA9IDE7
CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVS
RVJSKSkKKwkJCWV2ZW50cy0+c2N0cF9wZWVyX2Vycm9yX2V2ZW50ID0gMTsKKworCQlpZiAoc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCkpCisJ
CQlldmVudHMtPnNjdHBfc2h1dGRvd25fZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpKQorCQkJZXZlbnRzLT5zY3RwX3Bh
cnRpYWxfZGVsaXZlcnlfZXZlbnQgPSAxOworCisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5w
LCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCkpCisJCQlldmVudHMtPnNjdHBfYWRhcHRh
dGlvbl9sYXllcl9ldmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFND
VFBfUENCX0ZMQUdTX0FVVEhFVk5UKSkKKwkJCWV2ZW50cy0+c2N0cF9hdXRoZW50aWNhdGlvbl9l
dmVudCA9IDE7CisKKwkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdT
X0RSWUVWTlQpKQorCQkJZXZlbnRzLT5zY3RwX3NlbmRlcl9kcnlfZXZlbnQgPSAxOworCisJCWlm
IChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5U
KSkKKwkJCWV2ZW50cy0+c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgPSAxOworCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2V2ZW50X3N1YnNj
cmliZSk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQURBUFRBVElPTl9MQVlFUjoKKwl7CisJ
CXVpbnQzMl90ICp2YWx1ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWws
IHVpbnQzMl90LCAqb3B0c2l6ZSk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJKnZhbHVl
ID0gaW5wLT5zY3RwX2VwLmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yOworCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHVpbnQzMl90KTsKKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9TRVRfSU5JVElBTF9EQkdfU0VROgorCXsKKwkJdWludDMyX3QgKnZhbHVl
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsICpvcHRz
aXplKTsKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJKnZhbHVlID0gaW5wLT5zY3RwX2VwLmlu
aXRpYWxfc2VxdWVuY2VfZGVidWc7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJKm9wdHNp
emUgPSBzaXplb2YodWludDMyX3QpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9MT0NB
TF9BRERSX1NJWkU6CisJeworCQl1aW50MzJfdCAqdmFsdWU7CisKKwkJU0NUUF9DSEVDS19BTkRf
Q0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOworCQlTQ1RQX0lOUF9STE9D
SyhpbnApOworCQkqdmFsdWUgPSBzY3RwX2NvdW50X21heF9hZGRyZXNzZXMoaW5wKTsKKwkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX1JFTU9URV9BRERSX1NJWkU6CisJeworCQl1aW50MzJf
dCAqdmFsdWU7CisJCXNpemVfdCBzaXplOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVCh2YWx1ZSwgb3B0dmFsLCB1aW50MzJfdCwgKm9wdHNpemUpOwor
CQkvKiBGSVhNRSBNVDogY2hhbmdlIHRvIHNjdHBfYXNzb2NfdmFsdWU/ICovCisJCVNDVFBfRklO
RF9TVENCKGlucCwgc3RjYiwgKHNjdHBfYXNzb2NfdCkgKnZhbHVlKTsKKworCQlpZiAoc3RjYikg
eworCQkJc2l6ZSA9IDA7CisJCQkvKiBDb3VudCB0aGUgc2l6ZXMgKi8KKwkJCVRBSUxRX0ZPUkVB
Q0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQlzd2l0Y2ggKG5ldC0+
cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVU
OgorI2lmZGVmIElORVQ2CisJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7CisJCQkJCQlzaXplICs9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW42KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisJCQkJCX0KKyNlbHNlCisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOworCQkJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KwkJCQljYXNlIEFGX0NPTk46CisJCQkJCXNpemUgKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9j
b25uKTsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJ
CQl9CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkqdmFsdWUgPSAodWludDMy
X3QpIHNpemU7CisJCQkqb3B0c2l6ZSA9IHNpemVvZih1aW50MzJfdCk7CisJCX0gZWxzZSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFTk9UQ09OTik7CisJCQllcnJvciA9IEVOT1RDT05OOworCQl9CisJCWJyZWFrOworCX0K
KwljYXNlIFNDVFBfR0VUX1BFRVJfQUREUkVTU0VTOgorCQkvKgorCQkgKiBHZXQgdGhlIGFkZHJl
c3MgaW5mb3JtYXRpb24sIGFuIGFycmF5IGlzIHBhc3NlZCBpbiB0bworCQkgKiBmaWxsIHVwIHdl
IHBhY2sgaXQuCisJCSAqLworCXsKKwkJc2l6ZV90IGNwc3osIGxlZnQ7CisJCXN0cnVjdCBzb2Nr
YWRkcl9zdG9yYWdlICpzYXM7CisJCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsKKwkJc3RydWN0IHNj
dHBfZ2V0YWRkcmVzc2VzICpzYWRkcjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhZGRyLCBv
cHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIHNhZGRyLT5zZ2V0X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgewor
CQkJbGVmdCA9ICgqb3B0c2l6ZSkgLSBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKTsK
KwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dldGFkZHJlc3Nlcyk7CisJCQlzYXMg
PSAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikmc2FkZHItPmFkZHJbMF07CisKKwkJCVRBSUxR
X0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQlzd2l0Y2gg
KG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBB
Rl9JTkVUOgorI2lmZGVmIElORVQ2CisJCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19ORUVEU19NQVBQRURfVjQpKSB7CisJCQkJCQljcHN6ID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCQl9IGVsc2UgeworCQkJCQkJY3BzeiA9IHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJCQl9CisjZWxzZQorCQkJCQljcHN6ID0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCWNwc3ogPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisJCQkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJCWNhc2UgQUZfQ09OTjoKKwkJCQkJY3BzeiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
Y29ubik7CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJZGVmYXVsdDoKKwkJCQkJY3BzeiA9IDA7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlpZiAoY3BzeiA9PSAwKSB7CisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCQlpZiAobGVmdCA8IGNwc3opIHsKKwkJCQkJLyogbm90IGVub3VnaCByb29tLiAq
LworCQkJCQlicmVhazsKKwkJCQl9CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2
KQorCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNf
TUFQUEVEX1Y0KSkgJiYKKwkJCQkgICAgKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkpIHsKKwkJCQkJLyogTXVzdCBtYXAgdGhlIGFkZHJlc3MgKi8KKwkJCQkJaW42X3Np
bl8yX3Y0bWFwc2luNigmbmV0LT5yby5fbF9hZGRyLnNpbiwKKwkJCQkJCQkgICAgKHN0cnVjdCBz
b2NrYWRkcl9pbjYgKilzYXMpOworCQkJCX0gZWxzZSB7CisJCQkJCW1lbWNweShzYXMsICZuZXQt
PnJvLl9sX2FkZHIsIGNwc3opOworCQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KHNhcywgJm5ldC0+
cm8uX2xfYWRkciwgY3Bzeik7CisjZW5kaWYKKwkJCQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNh
cyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisKKwkJCQlzYXMgPSAoc3RydWN0IHNvY2thZGRy
X3N0b3JhZ2UgKikoKGNhZGRyX3Qpc2FzICsgY3Bzeik7CisJCQkJbGVmdCAtPSBjcHN6OworCQkJ
CSpvcHRzaXplICs9IGNwc3o7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0g
ZWxzZSB7CisJCSAgICAgICAgU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfR0VUX0xPQ0FMX0FERFJFU1NFUzoKKwl7CisJCXNpemVf
dCBsaW1pdCwgYWN0dWFsOworCQlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqc2FzOworCQlzdHJ1
Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKnNhZGRyOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2Fk
ZHIsIG9wdHZhbCwgc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzLCAqb3B0c2l6ZSk7CisJCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgc2FkZHItPnNnZXRfYXNzb2NfaWQpOworCisJCXNhcyA9IChz
dHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSZzYWRkci0+YWRkclswXTsKKwkJbGltaXQgPSAqb3B0
c2l6ZSAtIHNpemVvZihzY3RwX2Fzc29jX3QpOworCQlhY3R1YWwgPSBzY3RwX2ZpbGxfdXBfYWRk
cmVzc2VzKGlucCwgc3RjYiwgbGltaXQsIHNhcyk7CisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCX0KKwkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X3N0b3JhZ2UpICsgYWN0dWFsOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9Q
QVJBTVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFkZHJwOworCQlzdHJ1Y3Qg
c2N0cF9uZXRzICpuZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElO
RVQpICYmIGRlZmluZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7Cisj
ZW5kaWYKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9wYWRkcnBhcmFtcywgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHBh
ZGRycC0+c3BwX2Fzc29jX2lkKTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVU
NikKKwkJaWYgKHBhZGRycC0+c3BwX2FkZHJlc3Muc3NfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJ
CQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBF
RCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCWluNl9zaW42XzJfc2luKCZzaW5fc3RvcmUsIHNp
bjYpOworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbl9zdG9yZTsKKwkJCX0gZWxz
ZSB7CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsK
KwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRycC0+
c3BwX2FkZHJlc3M7CisJCX0KKyNlbHNlCisJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBh
ZGRycC0+c3BwX2FkZHJlc3M7CisjZW5kaWYKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJbmV0
ID0gc2N0cF9maW5kbmV0KHN0Y2IsIGFkZHIpOworCQl9IGVsc2UgeworCQkJLyogV2UgaW5jcmVt
ZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbAorCQkJICog
ZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9ja2Vk
CisJCQkgKiB0Y2IgKGxhc3QgYXJndW1lbnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgorCQkJ
ICovCisJCQluZXQgPSBOVUxMOworCQkJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwkJCXN0Y2Ig
PSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsICZuZXQsIE5VTEwsIE5V
TEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7
CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgPT0gTlVMTCkpIHsKKyNp
ZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilh
ZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisJCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVy
cm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRy
OworCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsK
KwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmIGRl
ZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfQ09OTikg
eworCQkJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQkJCXNjb25uID0gKHN0cnVj
dCBzb2NrYWRkcl9jb25uICopYWRkcjsKKwkJCQlpZiAoc2Nvbm4tPnNjb25uX2FkZHIgIT0gTlVM
TCkgeworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBlcnJvcik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisJ
CQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWlmIChzdGNiICE9
IE5VTEwpIHsKKwkJCS8qIEFwcGxpZXMgdG8gdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uICovCisJ
CQlwYWRkcnAtPnNwcF9mbGFncyA9IDA7CisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQlwYWRk
cnAtPnNwcF9oYmludGVydmFsID0gbmV0LT5oZWFydF9iZWF0X2RlbGF5OworCQkJCXBhZGRycC0+
c3BwX3BhdGhtYXhyeHQgPSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkOworCQkJCXBhZGRycC0+c3Bw
X3BhdGhtdHUgPSBuZXQtPm10dTsKKwkJCQlzd2l0Y2ggKG5ldC0+cm8uX2xfYWRkci5zYS5zYV9m
YW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQlwYWRkcnAtPnNw
cF9wYXRobXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQlicmVhazsKKyNlbmRpZgor
I2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQkJcGFkZHJwLT5zcHBfcGF0aG10
dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCQkJY2FzZSBBRl9DT05OOgorCQkJCQlwYWRkcnAtPnNwcF9wYXRo
bXR1IC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJCWJyZWFrOworI2VuZGlmCisJCQkJ
ZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIGdldCBmbGFncyBmb3IgSEIgKi8K
KwkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpIHsKKwkJCQkJcGFkZHJw
LT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0RJU0FCTEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFkZHJw
LT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0VOQUJMRTsKKwkJCQl9CisJCQkJLyogZ2V0IGZsYWdzIGZv
ciBQTVRVICovCisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT19QTVRVRCkg
eworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRElTQUJMRTsKKwkJCQl9IGVs
c2UgeworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1UVURfRU5BQkxFOworCQkJCX0K
KwkJCQlpZiAobmV0LT5kc2NwICYgMHgwMSkgeworCQkJCQlwYWRkcnAtPnNwcF9kc2NwID0gbmV0
LT5kc2NwICYgMHhmYzsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0RTQ1A7CisJCQkJ
fQorI2lmZGVmIElORVQ2CisJCQkJaWYgKChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09
IEFGX0lORVQ2KSAmJgorCQkJCSAgICAobmV0LT5mbG93bGFiZWwgJiAweDgwMDAwMDAwKSkgewor
CQkJCQlwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCA9IG5ldC0+Zmxvd2xhYmVsICYgMHgwMDBm
ZmZmZjsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0lQVjZfRkxPV0xBQkVMOworCQkJ
CX0KKyNlbmRpZgorCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIE5vIGRlc3RpbmF0aW9uIHNv
IHJldHVybiBkZWZhdWx0CisJCQkJICogdmFsdWUKKwkJCQkgKi8KKwkJCQlwYWRkcnAtPnNwcF9w
YXRobWF4cnh0ID0gc3RjYi0+YXNvYy5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJcGFkZHJwLT5zcHBf
cGF0aG10dSA9IHN0Y2ItPmFzb2MuZGVmYXVsdF9tdHU7CisJCQkJaWYgKHN0Y2ItPmFzb2MuZGVm
YXVsdF9kc2NwICYgMHgwMSkgeworCQkJCQlwYWRkcnAtPnNwcF9kc2NwID0gc3RjYi0+YXNvYy5k
ZWZhdWx0X2RzY3AgJiAweGZjOworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfRFNDUDsK
KwkJCQl9CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc3RjYi0+YXNvYy5kZWZhdWx0X2Zsb3dsYWJl
bCAmIDB4ODAwMDAwMDApIHsKKwkJCQkJcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgPSBzdGNi
LT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJcGFkZHJwLT5zcHBf
ZmxhZ3MgfD0gU1BQX0lQVjZfRkxPV0xBQkVMOworCQkJCX0KKyNlbmRpZgorCQkJCS8qIGRlZmF1
bHQgc2V0dGluZ3Mgc2hvdWxkIGJlIHRoZXNlICovCisJCQkJaWYgKHNjdHBfc3RjYl9pc19mZWF0
dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKSkgeworCQkJ
CQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRElTQUJMRTsKKwkJCQl9IGVsc2UgeworCQkJ
CQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfSEJfRU5BQkxFOworCQkJCX0KKwkJCQlpZiAoc2N0
cF9zdGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1U
VUQpKSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9ESVNBQkxFOworCQkJ
CX0gZWxzZSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9QTVRVRF9FTkFCTEU7CisJ
CQkJfQorCQkJCXBhZGRycC0+c3BwX2hiaW50ZXJ2YWwgPSBzdGNiLT5hc29jLmhlYXJ0X2JlYXRf
ZGVsYXk7CisJCQl9CisJCQlwYWRkcnAtPnNwcF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
c3RjYik7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHBhZGRy
cC0+c3BwX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCS8qIFVzZSBlbmRw
b2ludCBkZWZhdWx0cyAqLworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJcGFkZHJwLT5z
cHBfcGF0aG1heHJ4dCA9IGlucC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJcGFkZHJw
LT5zcHBfaGJpbnRlcnZhbCA9IFRJQ0tTX1RPX01TRUMoaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91
dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSk7CisJCQkJcGFkZHJwLT5zcHBfYXNzb2NfaWQg
PSBTQ1RQX0ZVVFVSRV9BU1NPQzsKKwkJCQkvKiBnZXQgaW5wJ3MgZGVmYXVsdCAqLworCQkJCWlm
IChpbnAtPnNjdHBfZXAuZGVmYXVsdF9kc2NwICYgMHgwMSkgeworCQkJCQlwYWRkcnAtPnNwcF9k
c2NwID0gaW5wLT5zY3RwX2VwLmRlZmF1bHRfZHNjcCAmIDB4ZmM7CisJCQkJCXBhZGRycC0+c3Bw
X2ZsYWdzIHw9IFNQUF9EU0NQOworCQkJCX0KKyNpZmRlZiBJTkVUNgorCQkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkJICAgIChpbnAtPnNj
dHBfZXAuZGVmYXVsdF9mbG93bGFiZWwgJiAweDgwMDAwMDAwKSkgeworCQkJCQlwYWRkcnAtPnNw
cF9pcHY2X2Zsb3dsYWJlbCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCAmIDB4MDAw
ZmZmZmY7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9JUFY2X0ZMT1dMQUJFTDsKKwkJ
CQl9CisjZW5kaWYKKwkJCQlwYWRkcnAtPnNwcF9wYXRobXR1ID0gaW5wLT5zY3RwX2VwLmRlZmF1
bHRfbXR1OworCisJCQkJaWYgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFH
U19ET05PVF9IRUFSVEJFQVQpKSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9IQl9F
TkFCTEU7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFkZHJwLT5zcHBfZmxhZ3MgfD0gU1BQX0hCX0RJ
U0FCTEU7CisJCQkJfQorCQkJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0Jf
RkxBR1NfRE9fTk9UX1BNVFVEKSkgeworCQkJCQlwYWRkcnAtPnNwcF9mbGFncyB8PSBTUFBfUE1U
VURfRU5BQkxFOworCQkJCX0gZWxzZSB7CisJCQkJCXBhZGRycC0+c3BwX2ZsYWdzIHw9IFNQUF9Q
TVRVRF9ESVNBQkxFOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJ
aWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRy
cGFyYW1zKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5G
TzoKKwl7CisJCXN0cnVjdCBzY3RwX3BhZGRyaW5mbyAqcGFkZHJpOworCQlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYm
IGRlZmluZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYK
KworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHBhZGRyaSwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRk
cmluZm8sICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBwYWRkcmktPnNw
aW5mb19hc3NvY19pZCk7CisKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJ
CWlmIChwYWRkcmktPnNwaW5mb19hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW42ICopJnBhZGRyaS0+c3BpbmZvX2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQ
RUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBz
aW42KTsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVs
c2UgeworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnBhZGRyaS0+c3BpbmZvX2FkZHJl
c3M7CisJCQl9CisJCX0gZWxzZSB7CisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRk
cmktPnNwaW5mb19hZGRyZXNzOworCQl9CisjZWxzZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZwYWRkcmktPnNwaW5mb19hZGRyZXNzOworI2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwp
IHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8q
IFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3
aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMg
dGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2Eg
TlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7
CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0
LCBOVUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNS
X1JFRihpbnApOworCQkJfQorCQl9CisKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmIChuZXQgIT0g
TlVMTCkpIHsKKwkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQp
IHsKKwkJCQkvKiBJdCdzIHVuY29uZmlybWVkICovCisJCQkJcGFkZHJpLT5zcGluZm9fc3RhdGUg
PSBTQ1RQX1VOQ09ORklSTUVEOworCQkJfSBlbHNlIGlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQ
X0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJLyogSXQncyBhY3RpdmUgKi8KKwkJCQlwYWRkcmktPnNw
aW5mb19zdGF0ZSA9IFNDVFBfQUNUSVZFOworCQkJfSBlbHNlIHsKKwkJCQkvKiBJdCdzIGluYWN0
aXZlICovCisJCQkJcGFkZHJpLT5zcGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQkJfQor
CQkJcGFkZHJpLT5zcGluZm9fY3duZCA9IG5ldC0+Y3duZDsKKwkJCXBhZGRyaS0+c3BpbmZvX3Ny
dHQgPSBuZXQtPmxhc3RzYSA+PiBTQ1RQX1JUVF9TSElGVDsKKwkJCXBhZGRyaS0+c3BpbmZvX3J0
byA9IG5ldC0+UlRPOworCQkJcGFkZHJpLT5zcGluZm9fYXNzb2NfaWQgPSBzY3RwX2dldF9hc3Nv
Y2lkKHN0Y2IpOworCQkJcGFkZHJpLT5zcGluZm9fbXR1ID0gbmV0LT5tdHU7CisJCQlzd2l0Y2gg
KGFkZHItPnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJCWNhc2UgQUZfSU5FVDoK
KwkJCQlwYWRkcmktPnNwaW5mb19tdHUgLT0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7CisJCQkJYnJl
YWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQ2KQorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlw
YWRkcmktPnNwaW5mb19tdHUgLT0gU0NUUF9NSU5fT1ZFUkhFQUQ7CisJCQkJYnJlYWs7CisjZW5k
aWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJcGFk
ZHJpLT5zcGluZm9fbXR1IC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8pOworCQl9
IGVsc2UgeworCQkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCX0KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCQllcnJvciA9IEVOT0VOVDsKKwkJfQorCQlicmVh
azsKKwl9CisJY2FzZSBTQ1RQX1BDQl9TVEFUVVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9wY2JpbmZv
ICpzcGNiOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3BjYiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9wY2JpbmZvLCAqb3B0c2l6ZSk7CisJCXNjdHBfZmlsbF9wY2JpbmZvKHNwY2IpOworCQkqb3B0
c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9wY2JpbmZvKTsKKwkJYnJlYWs7CisJfQorCWNhc2Ug
U0NUUF9TVEFUVVM6CisJeworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0cnVjdCBzY3Rw
X3N0YXR1cyAqc3N0YXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzc3RhdCwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9zdGF0dXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNi
LCBzc3RhdC0+c3N0YXRfYXNzb2NfaWQpOworCisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCXNzdGF0LT5z
c3RhdF9zdGF0ZSA9IHNjdHBfbWFwX2Fzc29jX3N0YXRlKHN0Y2ItPmFzb2Muc3RhdGUpOworCQlz
c3RhdC0+c3N0YXRfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQlzc3RhdC0+
c3N0YXRfcnduZCA9IHN0Y2ItPmFzb2MucGVlcnNfcnduZDsKKwkJc3N0YXQtPnNzdGF0X3VuYWNr
ZGF0YSA9IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQ7CisJCS8qCisJCSAqIFdlIGNhbid0IGlu
Y2x1ZGUgY2h1bmtzIHRoYXQgaGF2ZSBiZWVuIHBhc3NlZCB0bworCQkgKiB0aGUgc29ja2V0IGxh
eWVyLiBPbmx5IHRoaW5ncyBpbiBxdWV1ZS4KKwkJICovCisJCXNzdGF0LT5zc3RhdF9wZW5kZGF0
YSA9IChzdGNiLT5hc29jLmNudF9vbl9yZWFzbV9xdWV1ZSArCisJCQkJCSBzdGNiLT5hc29jLmNu
dF9vbl9hbGxfc3RyZWFtcyk7CisKKworCQlzc3RhdC0+c3N0YXRfaW5zdHJtcyA9IHN0Y2ItPmFz
b2Muc3RyZWFtaW5jbnQ7CisJCXNzdGF0LT5zc3RhdF9vdXRzdHJtcyA9IHN0Y2ItPmFzb2Muc3Ry
ZWFtb3V0Y250OworCQlzc3RhdC0+c3N0YXRfZnJhZ21lbnRhdGlvbl9wb2ludCA9IHNjdHBfZ2V0
X2ZyYWdfcG9pbnQoc3RjYiwgJnN0Y2ItPmFzb2MpOworI2lmZGVmIEhBVkVfU0FfTEVOCisJCW1l
bWNweSgmc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX2FkZHJlc3MsCisJCSAgICAgICAmc3Rj
Yi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAorCQkgICAgICAgKChzdHJ1
Y3Qgc29ja2FkZHIgKikoJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbi0+cm8uX2xfYWRk
cikpLT5zYV9sZW4pOworI2Vsc2UKKwkJaWYgKHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlv
bi0+cm8uX2xfYWRkci5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJbWVtY3B5KCZzc3Rh
dC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRkcmVzcywKKwkJCSAgICAgICAmc3RjYi0+YXNvYy5w
cmltYXJ5X2Rlc3RpbmF0aW9uLT5yby5fbF9hZGRyLAorCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSgmc3N0YXQtPnNzdGF0X3ByaW1h
cnkuc3BpbmZvX2FkZHJlc3MsCisJCQkgICAgICAgJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbi0+cm8uX2xfYWRkciwKKwkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
OworCQl9CisjZW5kaWYKKwkJbmV0ID0gc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9uOwor
CQkoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fYWRk
cmVzcyktPnNpbl9wb3J0ID0gc3RjYi0+cnBvcnQ7CisJCS8qCisJCSAqIEFnYWluIHRoZSB1c2Vy
IGNhbiBnZXQgaW5mbyBmcm9tIHNjdHBfY29uc3RhbnRzLmgKKwkJICogZm9yIHdoYXQgdGhlIHN0
YXRlIG9mIHRoZSBuZXR3b3JrIGlzLgorCQkgKi8KKwkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFND
VFBfQUREUl9VTkNPTkZJUk1FRCkgeworCQkJLyogSXQncyB1bmNvbmZpcm1lZCAqLworCQkJc3N0
YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NUUF9VTkNPTkZJUk1FRDsKKwkJfSBl
bHNlIGlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkvKiBJ
dCdzIGFjdGl2ZSAqLworCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3BpbmZvX3N0YXRlID0gU0NU
UF9BQ1RJVkU7CisJCX0gZWxzZSB7CisJCQkvKiBJdCdzIGluYWN0aXZlICovCisJCQlzc3RhdC0+
c3N0YXRfcHJpbWFyeS5zcGluZm9fc3RhdGUgPSBTQ1RQX0lOQUNUSVZFOworCQl9CisJCXNzdGF0
LT5zc3RhdF9wcmltYXJ5LnNwaW5mb19jd25kID0gbmV0LT5jd25kOworCQlzc3RhdC0+c3N0YXRf
cHJpbWFyeS5zcGluZm9fc3J0dCA9IG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUOworCQlz
c3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9fcnRvID0gbmV0LT5SVE87CisJCXNzdGF0LT5zc3Rh
dF9wcmltYXJ5LnNwaW5mb19tdHUgPSBuZXQtPm10dTsKKwkJc3dpdGNoIChzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWYgZGVmaW5l
ZChJTkVUKQorCQljYXNlIEFGX0lORVQ6CisJCQlzc3RhdC0+c3N0YXRfcHJpbWFyeS5zcGluZm9f
bXR1IC09IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZp
bmVkKElORVQ2KQorCQljYXNlIEFGX0lORVQ2OgorCQkJc3N0YXQtPnNzdGF0X3ByaW1hcnkuc3Bp
bmZvX210dSAtPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9fKQorCQljYXNlIEFGX0NPTk46CisJCQlzc3RhdC0+c3N0YXRfcHJp
bWFyeS5zcGluZm9fbXR1IC09IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcik7CisJCQlicmVhazsKKyNl
bmRpZgorCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJc3N0YXQtPnNzdGF0X3ByaW1hcnku
c3BpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zdGF0dXMpOworCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX1JUT0lORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9ydG9pbmZv
ICpzcnRvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3J0bywgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9ydG9pbmZvLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3J0by0+
c3J0b19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXNydG8tPnNydG9faW5pdGlhbCA9
IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87CisJCQlzcnRvLT5zcnRvX21heCA9IHN0Y2ItPmFzb2Mu
bWF4cnRvOworCQkJc3J0by0+c3J0b19taW4gPSBzdGNiLT5hc29jLm1pbnJ0bzsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoc3J0by0+c3J0b19hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXNy
dG8tPnNydG9faW5pdGlhbCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKKwkJCQlzcnRvLT5z
cnRvX21heCA9IGlucC0+c2N0cF9lcC5zY3RwX21heHJ0bzsKKwkJCQlzcnRvLT5zcnRvX21pbiA9
IGlucC0+c2N0cF9lcC5zY3RwX21pbnJ0bzsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJ
CQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJ
CX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3Rw
X3J0b2luZm8pOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfVElNRU9VVFM6CisJewor
CQlzdHJ1Y3Qgc2N0cF90aW1lb3V0cyAqc3RpbW87CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChz
dGltbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF90aW1lb3V0cywgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIHN0aW1vLT5zdGltb19hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2Ip
IHsKKwkJCXN0aW1vLT5zdGltb19pbml0PSBzdGNiLT5hc29jLnRpbW9pbml0OworCQkJc3RpbW8t
PnN0aW1vX2RhdGE9IHN0Y2ItPmFzb2MudGltb2RhdGE7CisJCQlzdGltby0+c3RpbW9fc2Fjaz0g
c3RjYi0+YXNvYy50aW1vc2FjazsKKwkJCXN0aW1vLT5zdGltb19zaHV0ZG93bj0gc3RjYi0+YXNv
Yy50aW1vc2h1dGRvd247CisJCQlzdGltby0+c3RpbW9faGVhcnRiZWF0PSBzdGNiLT5hc29jLnRp
bW9oZWFydGJlYXQ7CisJCQlzdGltby0+c3RpbW9fY29va2llPSBzdGNiLT5hc29jLnRpbW9jb29r
aWU7CisJCQlzdGltby0+c3RpbW9fc2h1dGRvd25hY2s9IHN0Y2ItPmFzb2MudGltb3NodXRkb3du
YWNrOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfdGltZW91dHMpOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9y
ID0gRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNTT0NJTkZPOgorCXsK
KwkJc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgKnNhc29jOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc2Fzb2MsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMsICpvcHRzaXplKTsKKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYXNvYy0+c2Fzb2NfYXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlzYXNvYy0+c2Fzb2NfY29va2llX2xpZmUgPSBUSUNLU19UT19NU0VDKHN0
Y2ItPmFzb2MuY29va2llX2xpZmUpOworCQkJc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQgPSBzdGNi
LT5hc29jLm1heF9zZW5kX3RpbWVzOworCQkJc2Fzb2MtPnNhc29jX251bWJlcl9wZWVyX2Rlc3Rp
bmF0aW9ucyA9IHN0Y2ItPmFzb2MubnVtbmV0czsKKwkJCXNhc29jLT5zYXNvY19wZWVyX3J3bmQg
PSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJCQlzYXNvYy0+c2Fzb2NfbG9jYWxfcnduZCA9IHN0
Y2ItPmFzb2MubXlfcnduZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJ
CSAgICAoc2Fzb2MtPnNhc29jX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJ
CVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJc2Fzb2MtPnNhc29jX2Nvb2tpZV9saWZlID0gVElD
S1NfVE9fTVNFQyhpbnAtPnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZlKTsKKwkJCQlzYXNvYy0+c2Fz
b2NfYXNvY21heHJ4dCA9IGlucC0+c2N0cF9lcC5tYXhfc2VuZF90aW1lczsKKwkJCQlzYXNvYy0+
c2Fzb2NfbnVtYmVyX3BlZXJfZGVzdGluYXRpb25zID0gMDsKKwkJCQlzYXNvYy0+c2Fzb2NfcGVl
cl9yd25kID0gMDsKKwkJCQlzYXNvYy0+c2Fzb2NfbG9jYWxfcnduZCA9IHNic3BhY2UoJmlucC0+
c2N0cF9zb2NrZXQtPnNvX3Jjdik7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBl
bHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJ
CWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3Nv
Y3BhcmFtcyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUZBVUxUX1NFTkRfUEFS
QU06CisJeworCQlzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzX2luZm87CisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChzX2luZm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfc25kcmN2aW5mbywgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5mby0+c2luZm9fYXNzb2NfaWQp
OworCisJCWlmIChzdGNiKSB7CisJCQltZW1jcHkoc19pbmZvLCAmc3RjYi0+YXNvYy5kZWZfc2Vu
ZCwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVmX3NlbmQpKTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoc19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVS
RV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCW1lbWNweShzX2luZm8s
ICZpbnAtPmRlZl9zZW5kLCBzaXplb2YoaW5wLT5kZWZfc2VuZCkpOworCQkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJ
TlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXpl
b2Yoc3RydWN0IHNjdHBfc25kcmN2aW5mbyk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NU
UF9JTklUTVNHOgorCXsKKwkJc3RydWN0IHNjdHBfaW5pdG1zZyAqc2luaXQ7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChzaW5pdCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9pbml0bXNnLCAqb3B0c2l6
ZSk7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCXNpbml0LT5zaW5pdF9udW1fb3N0cmVhbXMg
PSBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50OworCQlzaW5pdC0+c2luaXRfbWF4
X2luc3RyZWFtcyA9IGlucC0+c2N0cF9lcC5tYXhfb3Blbl9zdHJlYW1zX2ludG9tZTsKKwkJc2lu
aXQtPnNpbml0X21heF9hdHRlbXB0cyA9IGlucC0+c2N0cF9lcC5tYXhfaW5pdF90aW1lczsKKwkJ
c2luaXQtPnNpbml0X21heF9pbml0X3RpbWVvID0gaW5wLT5zY3RwX2VwLmluaXRpYWxfaW5pdF9y
dG9fbWF4OworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZW9mKHN0
cnVjdCBzY3RwX2luaXRtc2cpOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BSSU1BUllfQURE
UjoKKwkJLyogd2UgYWxsb3cgYSAiZ2V0IiBvcGVyYXRpb24gb24gdGhpcyAqLworCXsKKwkJc3Ry
dWN0IHNjdHBfc2V0cHJpbSAqc3NwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc3NwLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX3NldHByaW0sICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5w
LCBzdGNiLCBzc3AtPnNzcF9hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXVuaW9uIHNj
dHBfc29ja3N0b3JlICphZGRyOworCisJCQlhZGRyID0gJnN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0
aW5hdGlvbi0+cm8uX2xfYWRkcjsKKwkJCXN3aXRjaCAoYWRkci0+c2Euc2FfZmFtaWx5KSB7Cisj
aWZkZWYgSU5FVAorCQkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIElORVQ2CisJCQkJaWYgKHNjdHBf
aXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX05FRURTX01BUFBFRF9WNCkpIHsKKwkJ
CQkJaW42X3Npbl8yX3Y0bWFwc2luNigmYWRkci0+c2luLAorCQkJCQkgICAgICAgICAgICAgICAg
ICAgIChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnNzcC0+c3NwX2FkZHIpOworCQkJCX0gZWxzZSB7
CisJCQkJCW1lbWNweSgmc3NwLT5zc3BfYWRkciwgJmFkZHItPnNpbiwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOworCQkJCX0KKyNlbHNlCisJCQkJbWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAm
YWRkci0+c2luLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYKKwkJCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2OgorCQkJCW1lbWNweSgm
c3NwLT5zc3BfYWRkciwgJmFkZHItPnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNl
IEFGX0NPTk46CisJCQkJbWVtY3B5KCZzc3AtPnNzcF9hZGRyLCAmYWRkci0+c2Nvbm4sIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfY29ubikpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQlkZWZhdWx0
OgorCQkJCWJyZWFrOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJKm9wdHNp
emUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc2V0cHJpbSk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9I
TUFDX0lERU5UOgorCXsKKwkJc3RydWN0IHNjdHBfaG1hY2FsZ28gKnNobWFjOworCQlzY3RwX2ht
YWNsaXN0X3QgKmhtYWNsaXN0OworCQl1aW50MzJfdCBzaXplOworCQlpbnQgaTsKKworCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2htYWNhbGdvLCAqb3B0
c2l6ZSk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJaG1hY2xpc3QgPSBpbnAtPnNjdHBf
ZXAubG9jYWxfaG1hY3M7CisJCWlmIChobWFjbGlzdCA9PSBOVUxMKSB7CisJCQkvKiBubyBITUFD
cyB0byByZXR1cm4gKi8KKwkJCSpvcHRzaXplID0gc2l6ZW9mKCpzaG1hYyk7CisJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQorCQkvKiBpcyB0aGVyZSByb29tIGZvciBh
bGwgb2YgdGhlIGhtYWMgaWRzPyAqLworCQlzaXplID0gc2l6ZW9mKCpzaG1hYykgKyAoaG1hY2xp
c3QtPm51bV9hbGdvICoKKwkJCQkJIHNpemVvZihzaG1hYy0+c2htYWNfaWRlbnRzWzBdKSk7CisJ
CWlmICgoc2l6ZV90KSgqb3B0c2l6ZSkgPCBzaXplKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlicmVhazsKKwkJfQor
CQkvKiBjb3B5IGluIHRoZSBsaXN0ICovCisJCXNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRz
ID0gaG1hY2xpc3QtPm51bV9hbGdvOworCQlmb3IgKGkgPSAwOyBpIDwgaG1hY2xpc3QtPm51bV9h
bGdvOyBpKyspIHsKKwkJCXNobWFjLT5zaG1hY19pZGVudHNbaV0gPSBobWFjbGlzdC0+aG1hY1tp
XTsKKwkJfQorCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCSpvcHRzaXplID0gc2l6ZTsKKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9BVVRIX0FDVElWRV9LRVk6CisJeworCQlzdHJ1Y3Qgc2N0
cF9hdXRoa2V5aWQgKnNjYWN0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2NhY3QsIG9wdHZh
bCwgc3RydWN0IHNjdHBfYXV0aGtleWlkLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJLyog
Z2V0IHRoZSBhY3RpdmUga2V5IG9uIHRoZSBhc3NvYyAqLworCQkJc2NhY3QtPnNjYWN0X2tleW51
bWJlciA9IHN0Y2ItPmFzb2MuYXV0aGluZm8uYWN0aXZlX2tleWlkOworCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NU
UF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJLyogZ2V0IHRoZSBlbmRwb2ludCBhY3RpdmUga2V5ICov
CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlzY2FjdC0+c2NhY3Rfa2V5bnVtYmVyID0g
aW5wLT5zY3RwX2VwLmRlZmF1bHRfa2V5aWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOwor
CQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQor
CQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9hdXRoa2V5aWQpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTE9DQUxfQVVUSF9D
SFVOS1M6CisJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICpzYWM7CisJCXNjdHBfYXV0aF9j
aGtsaXN0X3QgKmNoa2xpc3QgPSBOVUxMOworCQlzaXplX3Qgc2l6ZSA9IDA7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChzYWMsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNodW5rcywgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhYy0+Z2F1dGhfYXNzb2NfaWQpOwor
CisJCWlmIChzdGNiKSB7CisJCQkvKiBnZXQgb2ZmIHRoZSBhc3NvYyAqLworCQkJY2hrbGlzdCA9
IHN0Y2ItPmFzb2MubG9jYWxfYXV0aF9jaHVua3M7CisJCQkvKiBpcyB0aGVyZSBlbm91Z2ggc3Bh
Y2U/ICovCisJCQlzaXplID0gc2N0cF9hdXRoX2dldF9jaGtsaXN0X3NpemUoY2hrbGlzdCk7CisJ
CQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkp
IHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQl9IGVsc2UgeworCQkJ
CS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLworCQkJCSh2b2lkKXNjdHBfc2VyaWFsaXplX2F1dGhf
Y2h1bmtzKGNoa2xpc3QsIHNhYy0+Z2F1dGhfY2h1bmtzKTsKKwkJCQlzYWMtPmdhdXRoX251bWJl
cl9vZl9jaHVua3MgPSAodWludDMyX3Qpc2l6ZTsKKwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1
Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpIHx8CisJCQkgICAgKHNhYy0+Z2F1dGhfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVf
QVNTT0MpKSB7CisJCQkJLyogZ2V0IG9mZiB0aGUgZW5kcG9pbnQgKi8KKwkJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQkJCWNoa2xpc3QgPSBpbnAtPnNjdHBfZXAubG9jYWxfYXV0aF9jaHVua3M7
CisJCQkJLyogaXMgdGhlcmUgZW5vdWdoIHNwYWNlPyAqLworCQkJCXNpemUgPSBzY3RwX2F1dGhf
Z2V0X2Noa2xpc3Rfc2l6ZShjaGtsaXN0KTsKKwkJCQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0
cnVjdCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIGVycm9yKTsKKwkJCQl9IGVsc2UgeworCQkJCQkvKiBjb3B5IGluIHRoZSBjaHVua3Mg
Ki8KKwkJCQkJKHZvaWQpc2N0cF9zZXJpYWxpemVfYXV0aF9jaHVua3MoY2hrbGlzdCwgc2FjLT5n
YXV0aF9jaHVua3MpOworCQkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWludDMy
X3Qpc2l6ZTsKKwkJCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXV0aGNodW5rcykg
KyBzaXplOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7
CisJfQorCWNhc2UgU0NUUF9QRUVSX0FVVEhfQ0hVTktTOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0
aGNodW5rcyAqc2FjOworCQlzY3RwX2F1dGhfY2hrbGlzdF90ICpjaGtsaXN0ID0gTlVMTDsKKwkJ
c2l6ZV90IHNpemUgPSAwOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2FjLCBvcHR2YWwsIHN0
cnVjdCBzY3RwX2F1dGhjaHVua3MsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBz
dGNiLCBzYWMtPmdhdXRoX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJLyogZ2V0IG9m
ZiB0aGUgYXNzb2MgKi8KKwkJCWNoa2xpc3QgPSBzdGNiLT5hc29jLnBlZXJfYXV0aF9jaHVua3M7
CisJCQkvKiBpcyB0aGVyZSBlbm91Z2ggc3BhY2U/ICovCisJCQlzaXplID0gc2N0cF9hdXRoX2dl
dF9jaGtsaXN0X3NpemUoY2hrbGlzdCk7CisJCQlpZiAoKm9wdHNpemUgPCAoc2l6ZW9mKHN0cnVj
dCBzY3RwX2F1dGhjaHVua3MpICsgc2l6ZSkpIHsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBlcnJvcik7CisJCQl9IGVsc2UgeworCQkJCS8qIGNvcHkgaW4gdGhlIGNodW5rcyAqLworCQkJ
CSh2b2lkKXNjdHBfc2VyaWFsaXplX2F1dGhfY2h1bmtzKGNoa2xpc3QsIHNhYy0+Z2F1dGhfY2h1
bmtzKTsKKwkJCQlzYWMtPmdhdXRoX251bWJlcl9vZl9jaHVua3MgPSAodWludDMyX3Qpc2l6ZTsK
KwkJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzKSArIHNpemU7CisJ
CQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCSAgICAgICAgU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQl9CisJCWJyZWFrOworCX0KKyNpZiBkZWZp
bmVkKEhBVkVfU0NUUF9QRUVMT0ZGX1NPQ0tPUFQpCisJY2FzZSBTQ1RQX1BFRUxPRkY6CisJewor
CQlzdHJ1Y3Qgc2N0cF9wZWVsb2ZmX29wdCAqcGVlbG9mZjsKKworCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHBlZWxvZmYsIG9wdHZhbCwgc3RydWN0IHNjdHBfcGVlbG9mZl9vcHQsICpvcHRzaXplKTsK
KwkJLyogZG8gdGhlIHBlZWxvZmYgKi8KKwkJZXJyb3IgPSBzY3RwX3BlZWxvZmZfb3B0aW9uKHAs
IHBlZWxvZmYpOworCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfcGVlbG9mZl9vcHQpOworCQl9CisJfQorCWJyZWFrOworI2VuZGlmIC8qIEhBVkVf
U0NUUF9QRUVMT0ZGX1NPQ0tPUFQgKi8KKwljYXNlIFNDVFBfRVZFTlQ6CisJeworCQlzdHJ1Y3Qg
c2N0cF9ldmVudCAqZXZlbnQ7CisJCXVpbnQzMl90IGV2ZW50X3R5cGU7CisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChldmVudCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVudCwgKm9wdHNpemUpOwor
CQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGV2ZW50LT5zZV9hc3NvY19pZCk7CisKKwkJc3dp
dGNoIChldmVudC0+c2VfdHlwZSkgeworCQljYXNlIFNDVFBfQVNTT0NfQ0hBTkdFOgorCQkJZXZl
bnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQ7CisJCQlicmVhazsKKwkJY2Fz
ZSBTQ1RQX1BFRVJfQUREUl9DSEFOR0U6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBBRERSRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfUkVNT1RFX0VSUk9SOgorCQkJ
ZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9TRU5EX0ZBSUxFRDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNW
U0VOREZBSUxFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TSFVURE9XTl9FVkVOVDoKKwkJ
CWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19SRUNWU0hVVERPV05FVk5UOworCQkJYnJlYWs7
CisJCWNhc2UgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT046CisJCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfQURBUFRBVElPTkVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1BBUlRJ
QUxfREVMSVZFUllfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUERBUElF
Vk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9BVVRIRU5USUNBVElPTl9FVkVOVDoKKwkJCWV2
ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19BVVRIRVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFND
VFBfU1RSRUFNX1JFU0VUX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NU
UkVBTV9SRVNFVEVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQ6
CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVDsKKwkJCWJyZWFrOworCQlj
YXNlIFNDVFBfTk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IDA7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFTk9UU1VQKTsKKwkJCWVycm9yID0gRU5PVFNVUDsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1Nf
QVNTT0NfUkVTRVRFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVFJFQU1fQ0hBTkdFX0VW
RU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UOwor
CQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TRU5EX0ZBSUxFRF9FVkVOVDoKKwkJCWV2ZW50X3R5cGUg
PSBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVDsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJZXZlbnRfdHlwZSA9IDA7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQlicmVhazsKKwkJfQorCQlpZiAoZXZlbnRfdHlwZSA+IDApIHsKKwkJCWlmIChzdGNiKSB7
CisJCQkJZXZlbnQtPnNlX29uID0gc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBl
dmVudF90eXBlKTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCQkgICAgKGV2ZW50LT5zZV9hc3NvY19pZCA9PSBT
Q1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQkJZXZl
bnQtPnNlX29uID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgZXZlbnRfdHlwZSk7CisJCQkJCVND
VFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCQl9CisJCQl9CisJCX0KKwkJaWYgKHN0Y2IgIT0gTlVMTCkg
eworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJ
CQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9ldmVudCk7CisJCX0KKwkJYnJlYWs7CisJ
fQorCWNhc2UgU0NUUF9SRUNWUkNWSU5GTzoKKwl7CisJCWludCBvbm9mZjsKKworCQlpZiAoKm9w
dHNpemUgPCBzaXplb2YoaW50KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFM
OworCQl9IGVsc2UgeworCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCW9ub2ZmID0gc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pOworCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQl9CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkvKiByZXR1cm4g
dGhlIG9wdGlvbiB2YWx1ZSAqLworCQkJKihpbnQgKilvcHR2YWwgPSBvbm9mZjsKKwkJCSpvcHRz
aXplID0gc2l6ZW9mKGludCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNWTlhU
SU5GTzoKKwl7CisJCWludCBvbm9mZjsKKworCQlpZiAoKm9wdHNpemUgPCBzaXplb2YoaW50KSkg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQl9IGVsc2UgeworCQkJU0NU
UF9JTlBfUkxPQ0soaW5wKTsKKwkJCW9ub2ZmID0gc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NU
UF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQl9
CisJCWlmIChlcnJvciA9PSAwKSB7CisJCQkvKiByZXR1cm4gdGhlIG9wdGlvbiB2YWx1ZSAqLwor
CQkJKihpbnQgKilvcHR2YWwgPSBvbm9mZjsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKGludCk7CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUZBVUxUX1NORElORk86CisJeworCQlzdHJ1
Y3Qgc2N0cF9zbmRpbmZvICppbmZvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoaW5mbywgb3B0
dmFsLCBzdHJ1Y3Qgc2N0cF9zbmRpbmZvLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlu
cCwgc3RjYiwgaW5mby0+c25kX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJaW5mby0+
c25kX3NpZCA9IHN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fc3RyZWFtOworCQkJaW5mby0+c25k
X2ZsYWdzID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFnczsKKwkJCWluZm8tPnNuZF9m
bGFncyAmPSAweGZmZjA7CisJCQlpbmZvLT5zbmRfcHBpZCA9IHN0Y2ItPmFzb2MuZGVmX3NlbmQu
c2luZm9fcHBpZDsKKwkJCWluZm8tPnNuZF9jb250ZXh0ID0gc3RjYi0+YXNvYy5kZWZfc2VuZC5z
aW5mb19jb250ZXh0OworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAg
IChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9J
TlBfUkxPQ0soaW5wKTsKKwkJCQlpbmZvLT5zbmRfc2lkID0gaW5wLT5kZWZfc2VuZC5zaW5mb19z
dHJlYW07CisJCQkJaW5mby0+c25kX2ZsYWdzID0gaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFnczsK
KwkJCQlpbmZvLT5zbmRfZmxhZ3MgJj0gMHhmZmYwOworCQkJCWluZm8tPnNuZF9wcGlkID0gaW5w
LT5kZWZfc2VuZC5zaW5mb19wcGlkOworCQkJCWluZm8tPnNuZF9jb250ZXh0ID0gaW5wLT5kZWZf
c2VuZC5zaW5mb19jb250ZXh0OworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxz
ZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlp
ZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfc25kaW5m
byk7CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9ERUZBVUxUX1BSSU5GTzoKKwl7CisJ
CXN0cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvICppbmZvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoaW5mbywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3ByaW5mbywgKm9wdHNpemUpOwor
CQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGluZm8tPnByX2Fzc29jX2lkKTsKKworCQlpZiAo
c3RjYikgeworCQkJaW5mby0+cHJfcG9saWN5ID0gUFJfU0NUUF9QT0xJQ1koc3RjYi0+YXNvYy5k
ZWZfc2VuZC5zaW5mb19mbGFncyk7CisJCQlpbmZvLT5wcl92YWx1ZSA9IHN0Y2ItPmFzb2MuZGVm
X3NlbmQuc2luZm9fdGltZXRvbGl2ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBl
bHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkg
fHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkg
fHwKKwkJCSAgICAoaW5mby0+cHJfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJ
CQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlpbmZvLT5wcl9wb2xpY3kgPSBQUl9TQ1RQX1BP
TElDWShpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlpbmZvLT5wcl92YWx1ZSA9IGlu
cC0+ZGVmX3NlbmQuc2luZm9fdGltZXRvbGl2ZTsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9
CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2RlZmF1bHRfcHJpbmZvKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJf
QUREUl9USExEUzoKKwl7CisJCXN0cnVjdCBzY3RwX3BhZGRydGhsZHMgKnRobGRzOworCQlzdHJ1
Y3Qgc2N0cF9uZXRzICpuZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVk
KElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7
CisjZW5kaWYKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHRobGRzLCBvcHR2YWwsIHN0cnVjdCBz
Y3RwX3BhZGRydGhsZHMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCB0
aGxkcy0+c3B0X2Fzc29jX2lkKTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVU
NikKKwkJaWYgKHRobGRzLT5zcHRfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJ
CXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRy
X2luNiAqKSZ0aGxkcy0+c3B0X2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQo
JnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42
KTsKKwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2Ug
eworCQkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJ
CX0KKwkJfSBlbHNlIHsKKwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRf
YWRkcmVzczsKKwkJfQorI2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMt
PnNwdF9hZGRyZXNzOworI2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNj
dHBfZmluZG5ldChzdGNiLCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBo
ZXJlIHNpbmNlIHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEg
ZGVjcmVtZW50IGlmIGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJ
ICogdGNiIChsYXN0IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLwor
CQkJbmV0ID0gTlVMTDsKKwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0
cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCAmbmV0LCBOVUxMLCBOVUxMKTsK
KwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJ
fQorCQl9CisJCWlmICgoc3RjYiAhPSBOVUxMKSAmJiAobmV0ID09IE5VTEwpKSB7CisjaWZkZWYg
SU5FVAorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNv
Y2thZGRyX2luICpzaW47CisKKwkJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsK
KwkJCQlpZiAoc2luLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkgeworCQkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7
CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJ
CWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCisJCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJ
CQlpZiAoIUlONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVy
cm9yKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJ
CQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29j
a2FkZHJfY29ubiAqKWFkZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsK
KwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorCQkJewor
CQkJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoc3RjYiAhPSBOVUxM
KSB7CisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQl0aGxkcy0+c3B0X3BhdGhtYXhyeHQgPSBu
ZXQtPmZhaWx1cmVfdGhyZXNob2xkOworCQkJCXRobGRzLT5zcHRfcGF0aHBmdGhsZCA9IG5ldC0+
cGZfdGhyZXNob2xkOworCQkJCXRobGRzLT5zcHRfcGF0aGNwdGhsZCA9IDB4ZmZmZjsKKwkJCX0g
ZWxzZSB7CisJCQkJdGhsZHMtPnNwdF9wYXRobWF4cnh0ID0gc3RjYi0+YXNvYy5kZWZfbmV0X2Zh
aWx1cmU7CisJCQkJdGhsZHMtPnNwdF9wYXRocGZ0aGxkID0gc3RjYi0+YXNvYy5kZWZfbmV0X3Bm
X3RocmVzaG9sZDsKKwkJCQl0aGxkcy0+c3B0X3BhdGhjcHRobGQgPSAweGZmZmY7CisJCQl9CisJ
CQl0aGxkcy0+c3B0X2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAodGhsZHMtPnNwdF9hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQkvKiBVc2UgZW5kcG9pbnQgZGVmYXVsdHMgKi8K
KwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCXRobGRzLT5zcHRfcGF0aG1heHJ4dCA9IGlu
cC0+c2N0cF9lcC5kZWZfbmV0X2ZhaWx1cmU7CisJCQkJdGhsZHMtPnNwdF9wYXRocGZ0aGxkID0g
aW5wLT5zY3RwX2VwLmRlZl9uZXRfcGZfdGhyZXNob2xkOworCQkJCXRobGRzLT5zcHRfcGF0aGNw
dGhsZCA9IDB4ZmZmZjsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2Ugewor
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVy
cm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3BhZGRydGhsZHMp
OworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVDoK
Kwl7CisJCXN0cnVjdCBzY3RwX3VkcGVuY2FwcyAqZW5jYXBzOworCQlzdHJ1Y3Qgc2N0cF9uZXRz
ICpuZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRl
ZmluZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKGVuY2Fwcywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF91ZHBlbmNh
cHMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBlbmNhcHMtPnN1ZV9h
c3NvY19pZCk7CisKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYpCisJCWlmIChl
bmNhcHMtPnN1ZV9hZGRyZXNzLnNzX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJc3RydWN0IHNv
Y2thZGRyX2luNiAqc2luNjsKKworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJmVu
Y2Fwcy0+c3VlX2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNp
bjZfYWRkcikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlh
ZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFk
ZHIgPSAoc3RydWN0IHNvY2thZGRyICopJmVuY2Fwcy0+c3VlX2FkZHJlc3M7CisJCQl9CisJCX0g
ZWxzZSB7CisJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNz
OworCQl9CisjZWxzZQorCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9h
ZGRyZXNzOworI2VuZGlmCisJCWlmIChzdGNiKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3Rj
YiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3Rw
X2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBp
dCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBh
cmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7
CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0
aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9
PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKwkJfQorCQlpZiAo
KHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElORVQKKwkJCWlmIChh
ZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
OworCisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJaWYgKHNpbi0+
c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpIHsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJ
CQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsK
KwkJCQl9CisJCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQlpZiAoYWRkci0+c2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwor
CQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCQkJaWYgKCFJTjZfSVNf
QUREUl9VTlNQRUNJRklFRCgmc2luNi0+c2luNl9hZGRyKSkgeworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBlcnJvcik7CisJCQkJCWJy
ZWFrOworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7CisJCQkJc3RydWN0IHNvY2th
ZGRyX2Nvbm4gKnNjb25uOworCisJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilh
ZGRyOworCQkJCWlmIChzY29ubi0+c2Nvbm5fYWRkciAhPSBOVUxMKSB7CisJCQkJCWVycm9yID0g
RUlOVkFMOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJ
CQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQllcnJvciA9IEVB
Rk5PU1VQUE9SVDsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOwor
CQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJaWYgKG5l
dCkgeworCQkJCWVuY2Fwcy0+c3VlX3BvcnQgPSBuZXQtPnBvcnQ7CisJCQl9IGVsc2UgeworCQkJ
CWVuY2Fwcy0+c3VlX3BvcnQgPSBzdGNiLT5hc29jLnBvcnQ7CisJCQl9CisJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGVuY2Fwcy0+c3VlX2Fzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJZW5jYXBz
LT5zdWVfcG9ydCA9IGlucC0+c2N0cF9lcC5wb3J0OworCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0
IHNjdHBfdWRwZW5jYXBzKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0VDTl9TVVBQ
T1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUp
OworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0
Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MuZWNuX3N1cHBvcnRlZDsKKwkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJYXYt
PmFzc29jX3ZhbHVlID0gaW5wLT5lY25fc3VwcG9ydGVkOworCQkJCVNDVFBfSU5QX1JVTkxPQ0so
aW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUFJf
U1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRz
aXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlm
IChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLnByc2N0cF9zdXBwb3J0
ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3Nv
Y19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOwor
CQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+cHJzY3RwX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3Ig
PSBFSU5WQUw7CisJCQl9CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2Fz
ZSBTQ1RQX0FVVEhfU1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2Nf
aWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+YXNzb2NfdmFsdWUgPSBzdGNiLT5hc29jLmF1
dGhfc3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAg
IChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmF1dGhfc3VwcG9ydGVkOworCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9w
dHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfQVNDT05GX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29j
X3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlLCAqb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwg
YXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJYXYtPmFzc29jX3ZhbHVlID0gc3Rj
Yi0+YXNvYy5hc2NvbmZfc3VwcG9ydGVkOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9
IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBF
KSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09M
KSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFsdWUgPSBpbnAtPmFzY29uZl9z
dXBwb3J0ZWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9
PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJ
CX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNPTkZJR19TVVBQT1JURUQ6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwg
b3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRf
U1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5h
c3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkOworCQkJU0NUUF9UQ0Jf
VU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRV
UkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+YXNzb2NfdmFs
dWUgPSBpbnAtPnJlY29uZmlnX3N1cHBvcnRlZDsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9
CisJCX0KKwkJaWYgKGVycm9yID09IDApIHsKKwkJCSpvcHRzaXplID0gc2l6ZW9mKHN0cnVjdCBz
Y3RwX2Fzc29jX3ZhbHVlKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX05SU0FDS19T
VVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9D
SEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYg
KHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MubnJzYWNrX3N1cHBvcnRl
ZDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29j
X2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJ
CQkJYXYtPmFzc29jX3ZhbHVlID0gaW5wLT5ucnNhY2tfc3VwcG9ydGVkOworCQkJCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBz
aXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUEtURFJPUF9TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAq
YXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3Nv
Y192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3Nv
Y19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2Mu
cGt0ZHJvcF9zdXBwb3J0ZWQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7
CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJ
CQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJ
CQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlTQ1RQX0lO
UF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlucC0+cGt0ZHJvcF9zdXBwb3J0
ZWQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJvciA9PSAwKSB7
CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7CisJCX0KKwkJ
YnJlYWs7CisJfQorCWNhc2UgU0NUUF9FTkFCTEVfU1RSRUFNX1JFU0VUOgorCXsKKwkJc3RydWN0
IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZh
bCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0Io
aW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlhdi0+YXNzb2Nf
dmFsdWUgPSAodWludDMyX3Qpc3RjYi0+YXNvYy5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCQkJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlhdi0+
YXNzb2NfdmFsdWUgPSAodWludDMyX3QpaW5wLT5sb2NhbF9zdHJyZXNldF9zdXBwb3J0OworCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9w
dHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUpOworCQl9CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfUFJfU1RSRUFNX1NUQVRVUzoKKwl7CisJCXN0cnVjdCBzY3RwX3Byc3Rh
dHVzICpzcHJzdGF0OworCQl1aW50MTZfdCBzaWQ7CisJCXVpbnQxNl90IHBvbGljeTsKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKHNwcnN0YXQsIG9wdHZhbCwgc3RydWN0IHNjdHBfcHJzdGF0dXMs
ICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzcHJzdGF0LT5zcHJzdGF0
X2Fzc29jX2lkKTsKKworCQlzaWQgPSBzcHJzdGF0LT5zcHJzdGF0X3NpZDsKKwkJcG9saWN5ID0g
c3Byc3RhdC0+c3Byc3RhdF9wb2xpY3k7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9T
VEFUUykKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmCisJCSAgICAoc2lkIDwgc3RjYi0+YXNvYy5z
dHJlYW1vdXRjbnQpICYmCisJCSAgICAocG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSAmJgor
CQkgICAgKChwb2xpY3kgPD0gU0NUUF9QUl9TQ1RQX01BWCkgfHwKKwkJICAgICAocG9saWN5ID09
IFNDVFBfUFJfU0NUUF9BTEwpKSkgeworCQkJaWYgKHBvbGljeSA9PSBTQ1RQX1BSX1NDVFBfQUxM
KSB7CisJCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+YXNvYy5z
dHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFswXTsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2Fi
YW5kb25lZF9zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbMF07
CisJCQl9IGVsc2UgeworCQkJCXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudCA9IHN0
Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5kb25lZF91bnNlbnRbcG9saWN5XTsKKwkJCQlzcHJz
dGF0LT5zcHJzdGF0X2FiYW5kb25lZF9zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJh
bmRvbmVkX3NlbnRbcG9saWN5XTsKKwkJCX0KKyNlbHNlCisJCWlmICgoc3RjYiAhPSBOVUxMKSAm
JgorCQkgICAgKHNpZCA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSAmJgorCQkgICAgKHBvbGlj
eSA9PSBTQ1RQX1BSX1NDVFBfQUxMKSkgeworCQkJc3Byc3RhdC0+c3Byc3RhdF9hYmFuZG9uZWRf
dW5zZW50ID0gc3RjYi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFswXTsKKwkJ
CXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLnN0cm1vdXRbc2lk
XS5hYmFuZG9uZWRfc2VudFswXTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJCWVycm9yID0gRUlOVkFMOworCQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUg
PSBzaXplb2Yoc3RydWN0IHNjdHBfcHJzdGF0dXMpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUFJfQVNTT0NfU1RBVFVTOgorCXsKKwkJc3RydWN0IHNjdHBfcHJzdGF0dXMgKnNwcnN0
YXQ7CisJCXVpbnQxNl90IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNwcnN0YXQs
IG9wdHZhbCwgc3RydWN0IHNjdHBfcHJzdGF0dXMsICpvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBzcHJzdGF0LT5zcHJzdGF0X2Fzc29jX2lkKTsKKworCQlwb2xpY3kgPSBz
cHJzdGF0LT5zcHJzdGF0X3BvbGljeTsKKwkJaWYgKChzdGNiICE9IE5VTEwpICYmCisJCSAgICAo
cG9saWN5ICE9IFNDVFBfUFJfU0NUUF9OT05FKSAmJgorCQkgICAgKChwb2xpY3kgPD0gU0NUUF9Q
Ul9TQ1RQX01BWCkgfHwKKwkJICAgICAocG9saWN5ID09IFNDVFBfUFJfU0NUUF9BTEwpKSkgewor
CQkJaWYgKHBvbGljeSA9PSBTQ1RQX1BSX1NDVFBfQUxMKSB7CisJCQkJc3Byc3RhdC0+c3Byc3Rh
dF9hYmFuZG9uZWRfdW5zZW50ID0gc3RjYi0+YXNvYy5hYmFuZG9uZWRfdW5zZW50WzBdOworCQkJ
CXNwcnN0YXQtPnNwcnN0YXRfYWJhbmRvbmVkX3NlbnQgPSBzdGNiLT5hc29jLmFiYW5kb25lZF9z
ZW50WzBdOworCQkJfSBlbHNlIHsKKwkJCQlzcHJzdGF0LT5zcHJzdGF0X2FiYW5kb25lZF91bnNl
bnQgPSBzdGNiLT5hc29jLmFiYW5kb25lZF91bnNlbnRbcG9saWN5XTsKKwkJCQlzcHJzdGF0LT5z
cHJzdGF0X2FiYW5kb25lZF9zZW50ID0gc3RjYi0+YXNvYy5hYmFuZG9uZWRfc2VudFtwb2xpY3ld
OworCQkJfQorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOwor
CQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
fQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJKm9wdHNpemUgPSBzaXplb2Yoc3RydWN0IHNjdHBf
cHJzdGF0dXMpOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFYX0NXTkQ6CisJewor
CQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChh
diwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgKm9wdHNpemUpOworCQlTQ1RQX0ZJ
TkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCWF2
LT5hc3NvY192YWx1ZSA9IHN0Y2ItPmFzb2MubWF4X2N3bmQ7CisJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NP
QykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCWF2LT5hc3NvY192YWx1ZSA9IGlu
cC0+bWF4X2N3bmQ7CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWlmIChlcnJv
ciA9PSAwKSB7CisJCQkqb3B0c2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSk7
CisJCX0KKwkJYnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJZXJy
b3IgPSBFTk9QUk9UT09QVDsKKwkJYnJlYWs7CisJfSAvKiBlbmQgc3dpdGNoIChzb3B0LT5zb3B0
X25hbWUpICovCisJaWYgKGVycm9yKSB7CisJCSpvcHRzaXplID0gMDsKKwl9CisJcmV0dXJuIChl
cnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQoraW50CisjZWxzZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwX3NldG9wdChzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IG9wdG5hbWUsIHZvaWQgKm9wdHZhbCwgc2l6ZV90IG9wdHNpemUsCisJ
ICAgIHZvaWQgKnApCit7CisJaW50IGVycm9yLCBzZXRfb3B0OworCXVpbnQzMl90ICptb3B0Owor
CXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9IE5VTEw7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucCA9
IE5VTEw7CisJdWludDMyX3QgdnJmX2lkOworCisJaWYgKG9wdHZhbCA9PSBOVUxMKSB7CisJCVND
VFBfUFJJTlRGKCJvcHR2YWwgaXMgTlVMTFxuIik7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAo
RUlOVkFMKTsKKwl9CisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoImlucCBpcyBOVUxMP1xuIik7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJdnJmX2lkID0gaW5wLT5kZWZfdnJm
X2lkOworCisJZXJyb3IgPSAwOworCXN3aXRjaCAob3B0bmFtZSkgeworCWNhc2UgU0NUUF9OT0RF
TEFZOgorCWNhc2UgU0NUUF9BVVRPQ0xPU0U6CisJY2FzZSBTQ1RQX0FVVE9fQVNDT05GOgorCWNh
c2UgU0NUUF9FWFBMSUNJVF9FT1I6CisJY2FzZSBTQ1RQX0RJU0FCTEVfRlJBR01FTlRTOgorCWNh
c2UgU0NUUF9VU0VfRVhUX1JDVklORk86CisJY2FzZSBTQ1RQX0lfV0FOVF9NQVBQRURfVjRfQURE
UjoKKwkJLyogY29weSBpbiB0aGUgb3B0aW9uIHZhbHVlICovCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QobW9wdCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCXNldF9vcHQgPSAwOworCQlp
ZiAoZXJyb3IpCisJCQlicmVhazsKKwkJc3dpdGNoIChvcHRuYW1lKSB7CisJCWNhc2UgU0NUUF9E
SVNBQkxFX0ZSQUdNRU5UUzoKKwkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19OT19GUkFHTUVO
VDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQVVUT19BU0NPTkY6CisJCQkvKgorCQkJICogTk9U
RTogd2UgZG9uJ3QgcmVhbGx5IHN1cHBvcnQgdGhpcyBmbGFnCisJCQkgKi8KKwkJCWlmIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgeworCQkJCS8qIG9ubHkgdmFs
aWQgZm9yIGJvdW5kIGFsbCBzb2NrZXRzICovCisJCQkJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfYXV0b19hc2NvbmYpID09IDApICYmCisJCQkJICAgICgqbW9wdCAhPSAwKSkgeworCQkJCQkv
KiBmb3JiaWRkZW4gYnkgYWRtaW4gKi8KKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRVBFUk0pOworCQkJCQlyZXR1cm4gKEVQ
RVJNKTsKKwkJCQl9CisJCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0FVVE9fQVNDT05GOwor
CQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0K
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfRVhQTElDSVRfRU9SOgorCQkJc2V0X29wdCA9IFNDVFBf
UENCX0ZMQUdTX0VYUExJQ0lUX0VPUjsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfVVNFX0VYVF9S
Q1ZJTkZPOgorCQkJc2V0X29wdCA9IFNDVFBfUENCX0ZMQUdTX0VYVF9SQ1ZJTkZPOworCQkJYnJl
YWs7CisJCWNhc2UgU0NUUF9JX1dBTlRfTUFQUEVEX1Y0X0FERFI6CisJCQlpZiAoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQlzZXRfb3B0ID0gU0NUUF9Q
Q0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0OworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCXJldHVybiAoRUlOVkFMKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNDVFBfTk9ERUxB
WToKKwkJCXNldF9vcHQgPSBTQ1RQX1BDQl9GTEFHU19OT0RFTEFZOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9BVVRPQ0xPU0U6CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZM
QUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdT
X0lOX1RDUFBPT0wpKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CQl9CisJCQlzZXRfb3B0ID0gU0NUUF9QQ0JfRkxBR1NfQVVUT0NMT1NFOworCQkJLyoKKwkJCSAq
IFRoZSB2YWx1ZSBpcyBpbiB0aWNrcy4gTm90ZSB0aGlzIGRvZXMgbm90IGVmZmVjdAorCQkJICog
b2xkIGFzc29jaWF0aW9ucywgb25seSBuZXcgb25lcy4KKwkJCSAqLworCQkJaW5wLT5zY3RwX2Vw
LmF1dG9fY2xvc2VfdGltZSA9IFNFQ19UT19USUNLUygqbW9wdCk7CisJCQlicmVhazsKKwkJfQor
CQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoKm1vcHQgIT0gMCkgeworCQkJc2N0cF9mZWF0
dXJlX29uKGlucCwgc2V0X29wdCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlu
cCwgc2V0X29wdCk7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwlj
YXNlIFNDVFBfUkVVU0VfUE9SVDoKKwl7CisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobW9wdCwgb3B0
dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVU5CT1VORCkgID09IDApIHsKKwkJCS8qIENhbid0IHNldCBpdCBhZnRlciB3ZSBh
cmUgYm91bmQgKi8KKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSkgeworCQkJLyogQ2FuJ3Qg
ZG8gdGhpcyBmb3IgYSAxLW0gc29ja2V0ICovCisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFr
OworCQl9CisJCWlmIChvcHR2YWwpCisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19QT1JUUkVVU0UpOworCQllbHNlCisJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfUE9SVFJFVVNFKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QQVJUSUFMX0RF
TElWRVJZX1BPSU5UOgorCXsKKwkJdWludDMyX3QgKnZhbHVlOworCisJCVNDVFBfQ0hFQ0tfQU5E
X0NBU1QodmFsdWUsIG9wdHZhbCwgdWludDMyX3QsIG9wdHNpemUpOworCQlpZiAoKnZhbHVlID4g
U0NUUF9TQl9MSU1JVF9SQ1Yoc28pKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQlicmVhazsKKwkJfQorCQlpbnAtPnBhcnRpYWxfZGVsaXZlcnlfcG9pbnQgPSAqdmFs
dWU7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfRlJBR01FTlRfSU5URVJMRUFWRToKKwkJLyog
bm90IHlldCB1bnRpbCB3ZSByZS13cml0ZSBzY3RwX3JlY3Ztc2coKSAqLworCXsKKwkJdWludDMy
X3QgKmxldmVsOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QobGV2ZWwsIG9wdHZhbCwgdWludDMy
X3QsIG9wdHNpemUpOworCQlpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8yKSB7CisJCQlz
Y3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOworCQkJ
c2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisJ
CX0gZWxzZSBpZiAoKmxldmVsID09IFNDVFBfRlJBR19MRVZFTF8xKSB7CisJCQlzY3RwX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpOworCQkJc2N0cF9mZWF0
dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVBVkVfU1RSTVMpOworCQl9IGVsc2Ug
aWYgKCpsZXZlbCA9PSBTQ1RQX0ZSQUdfTEVWRUxfMCkgeworCQkJc2N0cF9mZWF0dXJlX29mZihp
bnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSk7CisJCQlzY3RwX2ZlYXR1cmVfb2Zm
KGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUyk7CisKKwkJfSBlbHNlIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfQorCQlicmVhazsKKwl9CisJY2Fz
ZSBTQ1RQX0lOVEVSTEVBVklOR19TVVBQT1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYt
PmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0g
RUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChp
bnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+
YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDApIHsKKwkJCQkJaW5wLT5pZGF0YV9zdXBw
b3J0ZWQgPSAwOworCQkJCX0gZWxzZSB7CisJCQkJCWlmICgoc2N0cF9pc19mZWF0dXJlX29uKGlu
cCwgU0NUUF9QQ0JfRkxBR1NfRlJBR19JTlRFUkxFQVZFKSkgICYmCisJCQkJCSAgICAoc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfSU5URVJMRUFWRV9TVFJNUykpKSB7CisJ
CQkJCQlpbnAtPmlkYXRhX3N1cHBvcnRlZCA9IDE7CisJCQkJCX0gZWxzZSB7CisJCQkJCQkvKiBN
dXN0IGhhdmUgRnJhZyBpbnRlcmxlYXZlIGFuZCBzdHJlYW0gaW50ZXJsZWF2ZSBvbiAqLworCQkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQl9CisJCQkJfQorCQkJ
CVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CQllcnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0NN
VF9PTl9PRkY6CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfY210X29uX29mZikpIHsKKwkJ
CXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQkJU0NUUF9DSEVDS19BTkRfQ0FTVChh
diwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCQlpZiAoYXYt
PmFzc29jX3ZhbHVlID4gU0NUUF9DTVRfTUFYKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCVNDVFBfRklORF9TVENCKGlucCwgc3Rj
YiwgYXYtPmFzc29jX2lkKTsKKwkJCWlmIChzdGNiKSB7CisJCQkJc3RjYi0+YXNvYy5zY3RwX2Nt
dF9vbl9vZmYgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQkJfSBlbHNlIHsKKwkJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAorCQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8
fAorCQkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOworCQkJCQlpbnAtPnNjdHBfY210X29uX29mZiA9IGF2LT5hc3NvY192
YWx1ZTsKKwkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJCX0KKwkJCQlpZiAoKGF2LT5h
c3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkJICAgIChhdi0+YXNzb2NfaWQg
PT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJCUxJ
U1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJ
CQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQkJc3RjYi0+YXNvYy5zY3RwX2NtdF9vbl9v
ZmYgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJ
CX0KKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJCX0KKwkJCX0KKwkJfSBlbHNlIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJCWVycm9yID0gRU5PUFJPVE9PUFQ7CisJCX0KKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1BMVUdHQUJMRV9DQzoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3Zh
bHVlICphdjsKKwkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlpZiAo
KGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX0NDX1JGQzI1ODEpICYmCisJCSAgICAoYXYtPmFzc29j
X3ZhbHVlICE9IFNDVFBfQ0NfSFNUQ1ApICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFND
VFBfQ0NfSFRDUCkgJiYKKwkJICAgIChhdi0+YXNzb2NfdmFsdWUgIT0gU0NUUF9DQ19SVENDKSkg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJ
U0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgewor
CQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMgPSBzY3RwX2NjX2Z1bmN0aW9uc1thdi0+YXNzb2Nf
dmFsdWVdOworCQkJc3RjYi0+YXNvYy5jb25nZXN0aW9uX2NvbnRyb2xfbW9kdWxlID0gYXYtPmFz
c29jX3ZhbHVlOworCQkJaWYgKHN0Y2ItPmFzb2MuY2NfZnVuY3Rpb25zLnNjdHBfc2V0X2luaXRp
YWxfY2NfcGFyYW0gIT0gTlVMTCkgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNv
Yy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9z
ZXRfaW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7
CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAuc2N0cF9kZWZhdWx0
X2NjX21vZHVsZSA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7
CisJCQl9CisJCQlpZiAoKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJ
CQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9S
TE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwg
c2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXN0Y2ItPmFz
b2MuY2NfZnVuY3Rpb25zID0gc2N0cF9jY19mdW5jdGlvbnNbYXYtPmFzc29jX3ZhbHVlXTsKKwkJ
CQkJc3RjYi0+YXNvYy5jb25nZXN0aW9uX2NvbnRyb2xfbW9kdWxlID0gYXYtPmFzc29jX3ZhbHVl
OworCQkJCQlpZiAoc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRfaW5pdGlhbF9jY19w
YXJhbSAhPSBOVUxMKSB7CisJCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7CisJCQkJCQkJc3RjYi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9zZXRf
aW5pdGlhbF9jY19wYXJhbShzdGNiLCBuZXQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
fQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQ0NfT1BUSU9OOgorCXsKKwkJc3RydWN0
IHNjdHBfY2Nfb3B0aW9uICpjY19vcHQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChjY19vcHQs
IG9wdHZhbCwgc3RydWN0IHNjdHBfY2Nfb3B0aW9uLCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NU
Q0IoaW5wLCBzdGNiLCBjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCk7CisJCWlmIChzdGNiID09
IE5VTEwpIHsKKwkJCWlmIChjY19vcHQtPmFpZF92YWx1ZS5hc3NvY19pZCA9PSBTQ1RQX0NVUlJF
TlRfQVNTT0MpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChz
dGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENC
X0xPQ0soc3RjYik7CisJCQkJCWlmIChzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3bmRf
c29ja2V0X29wdGlvbikgeworCQkJCQkJKCpzdGNiLT5hc29jLmNjX2Z1bmN0aW9ucy5zY3RwX2N3
bmRfc29ja2V0X29wdGlvbikoc3RjYiwgMSwgY2Nfb3B0KTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0g
ZWxzZSB7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoc3Rj
Yi0+YXNvYy5jY19mdW5jdGlvbnMuc2N0cF9jd25kX3NvY2tldF9vcHRpb24gPT0gTlVMTCkgewor
CQkJCWVycm9yID0gRU5PVFNVUDsKKwkJCX0gZWxzZSB7CisJCQkJZXJyb3IgPSAoKnN0Y2ItPmFz
b2MuY2NfZnVuY3Rpb25zLnNjdHBfY3duZF9zb2NrZXRfb3B0aW9uKShzdGNiLCAxLAorCQkJCQkJ
CQkJCQkgICBjY19vcHQpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJ
CWJyZWFrOworCX0KKwljYXNlIFNDVFBfUExVR0dBQkxFX1NTOgorCXsKKwkJc3RydWN0IHNjdHBf
YXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlpZiAoKGF2LT5hc3NvY192YWx1ZSAh
PSBTQ1RQX1NTX0RFRkFVTFQpICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1Nf
Uk9VTkRfUk9CSU4pICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfUk9VTkRf
Uk9CSU5fUEFDS0VUKSAmJgorCQkgICAgKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX1BSSU9S
SVRZKSAmJgorCQkgICAgKGF2LT5hc3NvY192YWx1ZSAhPSBTQ1RQX1NTX0ZBSVJfQkFORFdJVEgp
ICYmCisJCSAgICAoYXYtPmFzc29jX3ZhbHVlICE9IFNDVFBfU1NfRklSU1RfQ09NRSkpIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwkJaWYgKHN0Y2IpIHsKKwkJCXN0
Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfY2xlYXIoc3RjYiwgJnN0Y2ItPmFzb2MsIDEs
IDEpOworCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMgPSBzY3RwX3NzX2Z1bmN0aW9uc1thdi0+
YXNzb2NfdmFsdWVdOworCQkJc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBh
di0+YXNzb2NfdmFsdWU7CisJCQlzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQo
c3RjYiwgJnN0Y2ItPmFzb2MsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVs
c2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8
fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAg
KGF2LT5hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhp
bnApOworCQkJCWlucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfc3NfbW9kdWxlID0gYXYtPmFzc29j
X3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoYXYtPmFz
c29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9z
c19jbGVhcihzdGNiLCAmc3RjYi0+YXNvYywgMSwgMSk7CisJCQkJCXN0Y2ItPmFzb2Muc3NfZnVu
Y3Rpb25zID0gc2N0cF9zc19mdW5jdGlvbnNbYXYtPmFzc29jX3ZhbHVlXTsKKwkJCQkJc3RjYi0+
YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1bGUgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCXN0
Y2ItPmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfaW5pdChzdGNiLCAmc3RjYi0+YXNvYywgMSk7
CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU1NfVkFMVUU6CisJ
eworCQlzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfc3RyZWFtX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NU
UF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCQlpZiAoc3RjYikgeworCQkJ
aWYgKChhdi0+c3RyZWFtX2lkID49IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250KSB8fAorCQkJICAg
IChzdGNiLT5hc29jLnNzX2Z1bmN0aW9ucy5zY3RwX3NzX3NldF92YWx1ZShzdGNiLCAmc3RjYi0+
YXNvYywgJnN0Y2ItPmFzb2Muc3RybW91dFthdi0+c3RyZWFtX2lkXSwKKwkJCSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXYtPnN0cmVhbV92YWx1ZSkgPCAw
KSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoYXYtPmFzc29jX2lkID09IFND
VFBfQ1VSUkVOVF9BU1NPQykgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9G
T1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJ
U0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaWYgKGF2LT5zdHJlYW1faWQgPCBzdGNiLT5hc29j
LnN0cmVhbW91dGNudCkgeworCQkJCQkJc3RjYi0+YXNvYy5zc19mdW5jdGlvbnMuc2N0cF9zc19z
ZXRfdmFsdWUoc3RjYiwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICZzdGNiLT5hc29jLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJnN0Y2ItPmFzb2Muc3RybW91dFthdi0+c3RyZWFtX2lkXSwKKwkJCQkJCSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2LT5zdHJlYW1fdmFsdWUp
OworCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9J
TlBfUlVOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQkvKiBDYW4ndCBzZXQgc3RyZWFtIHZh
bHVlIHdpdGhvdXQgYXNzb2NpYXRpb24gKi8KKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0g
RUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQ0xSX1NUQVRfTE9H
OgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFT1BOT1RTVVBQKTsKKwkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQlicmVhazsKKwlj
YXNlIFNDVFBfQ09OVEVYVDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwor
CisJCWlmIChzdGNiKSB7CisJCQlzdGNiLT5hc29jLmNvbnRleHQgPSBhdi0+YXNzb2NfdmFsdWU7
CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19p
ZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBf
QUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5zY3RwX2Nv
bnRleHQgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJ
fQorCQkJaWYgKChhdi0+YXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJICAg
IChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBf
dGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlzdGNiLT5hc29jLmNv
bnRleHQgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOworCX0K
KwljYXNlIFNDVFBfVlJGX0lEOgorCXsKKwkJdWludDMyX3QgKmRlZmF1bHRfdnJmaWQ7CisjaWZk
ZWYgU0NUUF9NVlJGCisJCWludCBpOworI2VuZGlmCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZGVm
YXVsdF92cmZpZCwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgqZGVmYXVsdF92
cmZpZCA+IFNDVFBfTUFYX1ZSRl9JRCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlO
VkFMOworCQkJYnJlYWs7CisJCX0KKyNpZmRlZiBTQ1RQX01WUkYKKwkJZm9yIChpID0gMDsgaSA8
IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQkJLyogVGhlIFZSRiBtdXN0IGJlIGluIHRoZSBWUkYg
bGlzdCAqLworCQkJaWYgKCpkZWZhdWx0X3ZyZmlkID09IGlucC0+bV92cmZfaWRzW2ldKSB7CisJ
CQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPmRlZl92cmZfaWQgPSAqZGVmYXVsdF92
cmZpZDsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJZ290byBzY3RwX2RvbmU7CisJ
CQl9CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisjZWxzZQorCQlpbnAt
PmRlZl92cmZfaWQgPSAqZGVmYXVsdF92cmZpZDsKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgor
CXNjdHBfZG9uZToKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0RFTF9WUkZfSUQ6
CisJeworI2lmZGVmIFNDVFBfTVZSRgorCQl1aW50MzJfdCAqZGVsX3ZyZmlkOworCQlpbnQgaSwg
Zm5kID0gMDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGRlbF92cmZpZCwgb3B0dmFsLCB1aW50
MzJfdCwgb3B0c2l6ZSk7CisJCWlmICgqZGVsX3ZyZmlkID4gU0NUUF9NQVhfVlJGX0lEKSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlpZiAo
aW5wLT5udW1fdnJmcyA9PSAxKSB7CisJCQkvKiBDYW4ndCBkZWxldGUgbGFzdCBvbmUgKi8KKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0gMCkgeworCQkJLyog
Q2FuJ3QgYWRkIG1vcmUgb25jZSB5b3UgYXJlIGJvdW5kICovCisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwor
CQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCQlpZiAoKmRlbF92cmZp
ZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgeworCQkJCWZuZCA9IDE7CisJCQkJYnJlYWs7CisJCQl9
CisJCX0KKwkJaWYgKCFmbmQpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsK
KwkJCWJyZWFrOworCQl9CisJCWlmIChpICE9IChpbnAtPm51bV92cmZzIC0gMSkpIHsKKwkJCS8q
IFRha2UgYm90dG9tIG9uZSBhbmQgbW92ZSB0byB0aGlzIHNsb3QgKi8KKwkJCWlucC0+bV92cmZf
aWRzW2ldID0gaW5wLT5tX3ZyZl9pZHNbKGlucC0+bnVtX3ZyZnMtMSldOworCQl9CisJCWlmICgq
ZGVsX3ZyZmlkID09IGlucC0+ZGVmX3ZyZl9pZCkgeworCQkJLyogVGFrZSB0aGUgZmlyc3Qgb25l
IGFzIHRoZSBuZXcgZGVmYXVsdCAqLworCQkJaW5wLT5kZWZfdnJmX2lkID0gaW5wLT5tX3ZyZl9p
ZHNbMF07CisJCX0KKwkJLyogRHJvcCB0aGUgbnVtYmVyIGJ5IG9uZSBraWxsaW5nIGxhc3Qgb25l
ICovCisJCWlucC0+bnVtX3ZyZnMtLTsKKyNlbHNlCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQllcnJv
ciA9IEVPUE5PVFNVUFA7CisjZW5kaWYKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BRERfVlJG
X0lEOgorCXsKKyNpZmRlZiBTQ1RQX01WUkYKKwkJdWludDMyX3QgKmFkZF92cmZpZDsKKwkJaW50
IGk7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhZGRfdnJmaWQsIG9wdHZhbCwgdWludDMyX3Qs
IG9wdHNpemUpOworCQlpZiAoKmFkZF92cmZpZCA+IFNDVFBfTUFYX1ZSRl9JRCkgeworCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSA9PSAwKSB7CisJCQkvKiBDYW4n
dCBhZGQgbW9yZSBvbmNlIHlvdSBhcmUgYm91bmQgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCS8q
IFZlcmlmeSBpdHMgbm90IGFscmVhZHkgaGVyZSAqLworCQlmb3IgKGkgPSAwOyBpIDwgaW5wLT5u
dW1fdnJmczsgaSsrKSB7CisJCQlpZiAoKmFkZF92cmZpZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkg
eworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVBTFJFQURZKTsKKwkJCQllcnJvciA9IEVBTFJFQURZOworCQkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAoKGlucC0+bnVtX3Zy
ZnMgKyAxKSA+IGlucC0+dnJmX3NpemUpIHsKKwkJCS8qIG5lZWQgdG8gZ3JvdyBhcnJheSAqLwor
CQkJdWludDMyX3QgKnRhcnJheTsKKwkJCVNDVFBfTUFMTE9DKHRhcnJheSwgdWludDMyX3QgKiwK
KwkJCQkgICAgKHNpemVvZih1aW50MzJfdCkgKiAoaW5wLT52cmZfc2l6ZSArIFNDVFBfREVGQVVM
VF9WUkZfU0laRSkpLAorCQkJCSAgICBTQ1RQX01fTVZSRik7CisJCQlpZiAodGFycmF5ID09IE5V
TEwpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJCWVycm9yID0gRU5PTUVNOworCQkJCVNDVFBfSU5Q
X1dVTkxPQ0soaW5wKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW1lbWNweSh0YXJyYXksIGlucC0+
bV92cmZfaWRzLCAoc2l6ZW9mKHVpbnQzMl90KSAqIGlucC0+dnJmX3NpemUpKTsKKwkJCVNDVFBf
RlJFRShpbnAtPm1fdnJmX2lkcywgU0NUUF9NX01WUkYpOworCQkJaW5wLT5tX3ZyZl9pZHMgPSB0
YXJyYXk7CisJCQlpbnAtPnZyZl9zaXplICs9IFNDVFBfREVGQVVMVF9WUkZfU0laRTsKKwkJfQor
CQlpbnAtPm1fdnJmX2lkc1tpbnAtPm51bV92cmZzXSA9ICphZGRfdnJmaWQ7CisJCWlucC0+bnVt
X3ZyZnMrKzsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworI2Vsc2UKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU9QTk9UU1VQ
UCk7CisJCWVycm9yID0gRU9QTk9UU1VQUDsKKyNlbmRpZgorCQlicmVhazsKKwl9CisJY2FzZSBT
Q1RQX0RFTEFZRURfU0FDSzoKKwl7CisJCXN0cnVjdCBzY3RwX3NhY2tfaW5mbyAqc2FjazsKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhY2ssIG9wdHZhbCwgc3RydWN0IHNjdHBfc2Fja19pbmZv
LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzYWNrLT5zYWNrX2Fzc29j
X2lkKTsKKwkJaWYgKHNhY2stPnNhY2tfZGVsYXkpIHsKKwkJCWlmIChzYWNrLT5zYWNrX2RlbGF5
ID4gU0NUUF9NQVhfU0FDS19ERUxBWSkKKwkJCQlzYWNrLT5zYWNrX2RlbGF5ID0gU0NUUF9NQVhf
U0FDS19ERUxBWTsKKwkJCWlmIChNU0VDX1RPX1RJQ0tTKHNhY2stPnNhY2tfZGVsYXkpIDwgMSkg
eworCQkJCXNhY2stPnNhY2tfZGVsYXkgPSBUSUNLU19UT19NU0VDKDEpOworCQkJfQorCQl9CisJ
CWlmIChzdGNiKSB7CisJCQlpZiAoc2Fjay0+c2Fja19kZWxheSkgeworCQkJCXN0Y2ItPmFzb2Mu
ZGVsYXllZF9hY2sgPSBzYWNrLT5zYWNrX2RlbGF5OworCQkJfQorCQkJaWYgKHNhY2stPnNhY2tf
ZnJlcSkgeworCQkJCXN0Y2ItPmFzb2Muc2Fja19mcmVxID0gc2Fjay0+c2Fja19mcmVxOworCQkJ
fQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChzYWNrLT5zYWNr
X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChzYWNrLT5zYWNrX2Fz
c29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJ
CQkJaWYgKHNhY2stPnNhY2tfZGVsYXkpIHsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91
dHRpY2tzW1NDVFBfVElNRVJfUkVDVl0gPSBNU0VDX1RPX1RJQ0tTKHNhY2stPnNhY2tfZGVsYXkp
OworCQkJCX0KKwkJCQlpZiAoc2Fjay0+c2Fja19mcmVxKSB7CisJCQkJCWlucC0+c2N0cF9lcC5z
Y3RwX3NhY2tfZnJlcSA9IHNhY2stPnNhY2tfZnJlcTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCQkJfQorCQkJaWYgKChzYWNrLT5zYWNrX2Fzc29jX2lkID09IFNDVFBfQ1VS
UkVOVF9BU1NPQykgfHwKKwkJCSAgICAoc2Fjay0+c2Fja19hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNi
LCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xP
Q0soc3RjYik7CisJCQkJCWlmIChzYWNrLT5zYWNrX2RlbGF5KSB7CisJCQkJCQlzdGNiLT5hc29j
LmRlbGF5ZWRfYWNrID0gc2Fjay0+c2Fja19kZWxheTsKKwkJCQkJfQorCQkJCQlpZiAoc2Fjay0+
c2Fja19mcmVxKSB7CisJCQkJCQlzdGNiLT5hc29jLnNhY2tfZnJlcSA9IHNhY2stPnNhY2tfZnJl
cTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBf
SU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0FV
VEhfQ0hVTks6CisJeworCQlzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmsgKnNhdXRoOworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1Qoc2F1dGgsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXV0aGNodW5rLCBvcHRz
aXplKTsKKworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoc2N0cF9hdXRoX2FkZF9jaHVu
ayhzYXV0aC0+c2F1dGhfY2h1bmssIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcykpIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJfSBlbHNlIHsKKwkJCWlucC0+
YXV0aF9zdXBwb3J0ZWQgPSAxOworCQl9CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9BVVRIX0tFWToKKwl7CisJCXN0cnVjdCBzY3RwX2F1dGhrZXkg
KnNjYTsKKwkJc3RydWN0IHNjdHBfa2V5aGVhZCAqc2hhcmVkX2tleXM7CisJCXNjdHBfc2hhcmVk
a2V5X3QgKnNoYXJlZF9rZXk7CisJCXNjdHBfa2V5X3QgKmtleSA9IE5VTEw7CisJCXNpemVfdCBz
aXplOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc2NhLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1
dGhrZXksIG9wdHNpemUpOworCQlpZiAoc2NhLT5zY2Ffa2V5bGVuZ3RoID09IDApIHsKKwkJCXNp
emUgPSBvcHRzaXplIC0gc2l6ZW9mKHN0cnVjdCBzY3RwX2F1dGhrZXkpOworCQl9IGVsc2Ugewor
CQkgICAgICAgIGlmIChzY2EtPnNjYV9rZXlsZW5ndGggKyBzaXplb2Yoc3RydWN0IHNjdHBfYXV0
aGtleSkgPD0gb3B0c2l6ZSkgeworCQkJCXNpemUgPSBzY2EtPnNjYV9rZXlsZW5ndGg7CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBzY2EtPnNjYV9hc3NvY19p
ZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCXNoYXJlZF9rZXlzID0gJnN0Y2ItPmFzb2Muc2hhcmVk
X2tleXM7CisJCQkvKiBjbGVhciB0aGUgY2FjaGVkIGtleXMgZm9yIHRoaXMga2V5IGlkICovCisJ
CQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKKwkJCS8q
CisJCQkgKiBjcmVhdGUgdGhlIG5ldyBzaGFyZWQga2V5IGFuZAorCQkJICogaW5zZXJ0L3JlcGxh
Y2UgaXQKKwkJCSAqLworCQkJaWYgKHNpemUgPiAwKSB7CisJCQkJa2V5ID0gc2N0cF9zZXRfa2V5
KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKKwkJCQlpZiAoa2V5ID09IE5VTEwpIHsK
KwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRU5PTUVNKTsKKwkJCQkJZXJyb3IgPSBFTk9NRU07CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJc2hhcmVkX2tleSA9IHNj
dHBfYWxsb2Nfc2hhcmVka2V5KCk7CisJCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7CisJCQkJ
c2N0cF9mcmVlX2tleShrZXkpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT01FTSk7CisJCQkJZXJyb3IgPSBFTk9NRU07
CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCWJyZWFrOworCQkJfQorCQkJc2hhcmVk
X2tleS0+a2V5ID0ga2V5OworCQkJc2hhcmVkX2tleS0+a2V5aWQgPSBzY2EtPnNjYV9rZXludW1i
ZXI7CisJCQllcnJvciA9IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVk
X2tleSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNjYS0+
c2NhX2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChzY2EtPnNjYV9h
c3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwor
CQkJCXNoYXJlZF9rZXlzID0gJmlucC0+c2N0cF9lcC5zaGFyZWRfa2V5czsKKwkJCQkvKgorCQkJ
CSAqIGNsZWFyIHRoZSBjYWNoZWQga2V5cyBvbiBhbGwgYXNzb2NzIGZvcgorCQkJCSAqIHRoaXMg
a2V5IGlkCisJCQkJICovCisJCQkJc2N0cF9jbGVhcl9jYWNoZWRrZXlzX2VwKGlucCwgc2NhLT5z
Y2Ffa2V5bnVtYmVyKTsKKwkJCQkvKgorCQkJCSAqIGNyZWF0ZSB0aGUgbmV3IHNoYXJlZCBrZXkg
YW5kCisJCQkJICogaW5zZXJ0L3JlcGxhY2UgaXQKKwkJCQkgKi8KKwkJCQlpZiAoc2l6ZSA+IDAp
IHsKKwkJCQkJa2V5ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXpl
KTsKKwkJCQkJaWYgKGtleSA9PSBOVUxMKSB7CisJCQkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJCQkJZXJy
b3IgPSBFTk9NRU07CisJCQkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQkJCQlicmVhazsK
KwkJCQkJfQorCQkJCX0KKwkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19zaGFyZWRrZXkoKTsK
KwkJCQlpZiAoc2hhcmVkX2tleSA9PSBOVUxMKSB7CisJCQkJCXNjdHBfZnJlZV9rZXkoa2V5KTsK
KwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRU5PTUVNKTsKKwkJCQkJZXJyb3IgPSBFTk9NRU07CisJCQkJCVNDVFBfSU5QX1dV
TkxPQ0soaW5wKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCXNoYXJlZF9rZXktPmtleSA9IGtl
eTsKKwkJCQlzaGFyZWRfa2V5LT5rZXlpZCA9IHNjYS0+c2NhX2tleW51bWJlcjsKKwkJCQllcnJv
ciA9IHNjdHBfaW5zZXJ0X3NoYXJlZGtleShzaGFyZWRfa2V5cywgc2hhcmVkX2tleSk7CisJCQkJ
U0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChzY2EtPnNjYV9hc3NvY19pZCA9
PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgKHNjYS0+c2NhX2Fzc29jX2lkID09IFND
VFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JF
QUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc2hhcmVkX2tleXMgPSAmc3RjYi0+YXNvYy5zaGFyZWRf
a2V5czsKKwkJCQkJLyogY2xlYXIgdGhlIGNhY2hlZCBrZXlzIGZvciB0aGlzIGtleSBpZCAqLwor
CQkJCQlzY3RwX2NsZWFyX2NhY2hlZGtleXMoc3RjYiwgc2NhLT5zY2Ffa2V5bnVtYmVyKTsKKwkJ
CQkJLyoKKwkJCQkJICogY3JlYXRlIHRoZSBuZXcgc2hhcmVkIGtleSBhbmQKKwkJCQkJICogaW5z
ZXJ0L3JlcGxhY2UgaXQKKwkJCQkJICovCisJCQkJCWlmIChzaXplID4gMCkgeworCQkJCQkJa2V5
ID0gc2N0cF9zZXRfa2V5KHNjYS0+c2NhX2tleSwgKHVpbnQzMl90KSBzaXplKTsKKwkJCQkJCWlm
IChrZXkgPT0gTlVMTCkgeworCQkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJCQlj
b250aW51ZTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlzaGFyZWRfa2V5ID0gc2N0cF9hbGxvY19z
aGFyZWRrZXkoKTsKKwkJCQkJaWYgKHNoYXJlZF9rZXkgPT0gTlVMTCkgeworCQkJCQkJc2N0cF9m
cmVlX2tleShrZXkpOworCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJY29udGlu
dWU7CisJCQkJCX0KKwkJCQkJc2hhcmVkX2tleS0+a2V5ID0ga2V5OworCQkJCQlzaGFyZWRfa2V5
LT5rZXlpZCA9IHNjYS0+c2NhX2tleW51bWJlcjsKKwkJCQkJZXJyb3IgPSBzY3RwX2luc2VydF9z
aGFyZWRrZXkoc2hhcmVkX2tleXMsIHNoYXJlZF9rZXkpOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKwkJfQorCQli
cmVhazsKKwl9CisJY2FzZSBTQ1RQX0hNQUNfSURFTlQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9obWFj
YWxnbyAqc2htYWM7CisJCXNjdHBfaG1hY2xpc3RfdCAqaG1hY2xpc3Q7CisJCXVpbnQxNl90IGht
YWNpZDsKKwkJdWludDMyX3QgaTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNobWFjLCBvcHR2
YWwsIHN0cnVjdCBzY3RwX2htYWNhbGdvLCBvcHRzaXplKTsKKwkJaWYgKChvcHRzaXplIDwgc2l6
ZW9mKHN0cnVjdCBzY3RwX2htYWNhbGdvKSArIHNobWFjLT5zaG1hY19udW1iZXJfb2ZfaWRlbnRz
ICogc2l6ZW9mKHVpbnQxNl90KSkgfHwKKwkJICAgIChzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lk
ZW50cyA+IDB4ZmZmZikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CWJyZWFrOworCQl9CisKKwkJaG1hY2xpc3QgPSBzY3RwX2FsbG9jX2htYWNsaXN0KCh1aW50MTZf
dClzaG1hYy0+c2htYWNfbnVtYmVyX29mX2lkZW50cyk7CisJCWlmIChobWFjbGlzdCA9PSBOVUxM
KSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9NRU0pOworCQkJZXJyb3IgPSBFTk9NRU07CisJCQlicmVhazsKKwkJfQor
CQlmb3IgKGkgPSAwOyBpIDwgc2htYWMtPnNobWFjX251bWJlcl9vZl9pZGVudHM7IGkrKykgewor
CQkJaG1hY2lkID0gc2htYWMtPnNobWFjX2lkZW50c1tpXTsKKwkJCWlmIChzY3RwX2F1dGhfYWRk
X2htYWNpZChobWFjbGlzdCwgaG1hY2lkKSkgeworCQkJCS8qIGludmFsaWQgSE1BQ3Mgd2VyZSBm
b3VuZCAqLzsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCXNjdHBf
ZnJlZV9obWFjbGlzdChobWFjbGlzdCk7CisJCQkJZ290byBzY3RwX3NldF9obWFjX2RvbmU7CisJ
CQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGhtYWNsaXN0LT5udW1fYWxnbzsgaSsrKSB7CisJ
CQlpZiAoaG1hY2xpc3QtPmhtYWNbaV0gPT0gU0NUUF9BVVRIX0hNQUNfSURfU0hBMSkgeworCQkJ
CS8qIGFscmVhZHkgaW4gbGlzdCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmIChpID09
IGhtYWNsaXN0LT5udW1fYWxnbykgeworCQkJLyogbm90IGZvdW5kIGluIGxpc3QgKi8KKwkJCXNj
dHBfZnJlZV9obWFjbGlzdChobWFjbGlzdCk7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQlicmVhazsKKwkJfQorCQkvKiBzZXQgaXQgb24gdGhlIGVuZHBvaW50ICovCisJ
CVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCWlmIChpbnAtPnNjdHBfZXAubG9jYWxfaG1hY3MpCisJ
CQlzY3RwX2ZyZWVfaG1hY2xpc3QoaW5wLT5zY3RwX2VwLmxvY2FsX2htYWNzKTsKKwkJaW5wLT5z
Y3RwX2VwLmxvY2FsX2htYWNzID0gaG1hY2xpc3Q7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwlzY3RwX3NldF9obWFjX2RvbmU6CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9BQ1RJ
VkVfS0VZOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0aGtleWlkICpzY2FjdDsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKHNjYWN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6
ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NhY3QtPnNjYWN0X2Fzc29jX2lkKTsK
KworCQkvKiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24gdGhlIHJpZ2h0IHBsYWNlICovCisJCWlmIChz
dGNiKSB7CisJCQkvKiBzZXQgdGhlIGFjdGl2ZSBrZXkgb24gdGhlIGFzc29jICovCisJCQlpZiAo
c2N0cF9hdXRoX3NldGFjdGl2ZWtleShzdGNiLAorCQkJCQkJICAgc2NhY3QtPnNjYWN0X2tleW51
bWJlcikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwKKwkJCQkJ
CSAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsCisJCQkJCQkgICAgRUlOVkFMKTsKKwkJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJ
CSAgICAoc2NhY3QtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSB8fAorCQkJ
ICAgIChzY2FjdC0+c2NhY3RfYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoc2N0cF9hdXRoX3NldGFjdGl2ZWtleV9lcChpbnAs
IHNjYWN0LT5zY2FjdF9rZXludW1iZXIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9y
ID0gRUlOVkFMOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlp
ZiAoKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkg
ICAgKHNjYWN0LT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQ
X0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9SRUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2Nf
bGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXNj
dHBfYXV0aF9zZXRhY3RpdmVrZXkoc3RjYiwgc2NhY3QtPnNjYWN0X2tleW51bWJlcik7CisJCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9ERUxFVEVfS0VZOgor
CXsKKwkJc3RydWN0IHNjdHBfYXV0aGtleWlkICpzY2RlbDsKKworCQlTQ1RQX0NIRUNLX0FORF9D
QVNUKHNjZGVsLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7CisJCVND
VFBfRklORF9TVENCKGlucCwgc3RjYiwgc2NkZWwtPnNjYWN0X2Fzc29jX2lkKTsKKworCQkvKiBk
ZWxldGUgdGhlIGtleSBmcm9tIHRoZSByaWdodCBwbGFjZSAqLworCQlpZiAoc3RjYikgeworCQkJ
aWYgKHNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2RlbC0+c2NhY3Rfa2V5bnVtYmVyKSkg
eworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQX1RD
Ql9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9
PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAoc2NkZWwtPnNjYWN0X2Fzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKHNj
dHBfZGVsZXRlX3NoYXJlZGtleV9lcChpbnAsIHNjZGVsLT5zY2FjdF9rZXludW1iZXIpKSB7CisJ
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCX0KKwkJCQlTQ1RQX0lO
UF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlpZiAoKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBT
Q1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJCQkgICAgKHNjZGVsLT5zY2FjdF9hc3NvY19pZCA9PSBT
Q1RQX0FMTF9BU1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9STE9DSyhpbnApOworCQkJCUxJU1RfRk9S
RUFDSChzdGNiLCAmaW5wLT5zY3RwX2Fzb2NfbGlzdCwgc2N0cF90Y2JsaXN0KSB7CisJCQkJCVND
VFBfVENCX0xPQ0soc3RjYik7CisJCQkJCXNjdHBfZGVsZXRlX3NoYXJlZGtleShzdGNiLCBzY2Rl
bC0+c2NhY3Rfa2V5bnVtYmVyKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0K
KwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNh
c2UgU0NUUF9BVVRIX0RFQUNUSVZBVEVfS0VZOgorCXsKKwkJc3RydWN0IHNjdHBfYXV0aGtleWlk
ICprZXlpZDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGtleWlkLCBvcHR2YWwsIHN0cnVjdCBz
Y3RwX2F1dGhrZXlpZCwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwga2V5
aWQtPnNjYWN0X2Fzc29jX2lkKTsKKworCQkvKiBkZWFjdGl2YXRlIHRoZSBrZXkgZnJvbSB0aGUg
cmlnaHQgcGxhY2UgKi8KKwkJaWYgKHN0Y2IpIHsKKwkJCWlmIChzY3RwX2RlYWN0X3NoYXJlZGtl
eShzdGNiLCBrZXlpZC0+c2NhY3Rfa2V5bnVtYmVyKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxz
ZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8
CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8
CisJCQkgICAgKGtleWlkLT5zY2FjdF9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwK
KwkJCSAgICAoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJ
CVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKHNjdHBfZGVhY3Rfc2hhcmVka2V5X2VwKGlu
cCwga2V5aWQtPnNjYWN0X2tleW51bWJlcikpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJ
CWlmICgoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJ
CSAgICAoa2V5aWQtPnNjYWN0X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVND
VFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNv
Y19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJ
c2N0cF9kZWFjdF9zaGFyZWRrZXkoc3RjYiwga2V5aWQtPnNjYWN0X2tleW51bWJlcik7CisJCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfRU5BQkxFX1NUUkVBTV9SRVNF
VDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FO
RF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJ
aWYgKGF2LT5hc3NvY192YWx1ZSAmICh+U0NUUF9FTkFCTEVfVkFMVUVfTUFTSykpIHsKKwkJICAg
ICAgICBTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlicmVhazsKKwkJfQorCQlT
Q1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisJCWlmIChzdGNiKSB7CisJ
CQlzdGNiLT5hc29jLmxvY2FsX3N0cnJlc2V0X3N1cHBvcnQgPSAodWludDhfdClhdi0+YXNzb2Nf
dmFsdWU7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+
c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5h
c3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09
IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5s
b2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3QpYXYtPmFzc29jX3ZhbHVlOworCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBf
Q1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09D
KSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZp
bnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhz
dGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5sb2NhbF9zdHJyZXNldF9zdXBwb3J0ID0gKHVpbnQ4X3Qp
YXYtPmFzc29jX3ZhbHVlOworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJ
CVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCX0KKworCQl9CisJCWJyZWFrOworCX0KKwljYXNl
IFNDVFBfUkVTRVRfU1RSRUFNUzoKKwl7CisJCXN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVhbXMgKnN0
cnJzdDsKKwkJaW50IGksIHNlbmRfb3V0ID0gMDsKKwkJaW50IHNlbmRfaW4gPSAwOworCisJCVND
VFBfQ0hFQ0tfQU5EX0NBU1Qoc3RycnN0LCBvcHR2YWwsIHN0cnVjdCBzY3RwX3Jlc2V0X3N0cmVh
bXMsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHN0cnJzdC0+c3JzX2Fz
c29jX2lkKTsKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkgICAgICAgIFNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJ
CQllcnJvciA9IEVOT0VOVDsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiLT5hc29jLnJlY29u
ZmlnX3N1cHBvcnRlZCA9PSAwKSB7CisJCQkvKgorCQkJICogUGVlciBkb2VzIG5vdCBzdXBwb3J0
IHRoZSBjaHVuayB0eXBlLgorCQkJICovCisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFT1BOT1RTVVBQKTsKKwkJCWVycm9yID0g
RU9QTk9UU1VQUDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJ
CWlmIChzaXplb2Yoc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcykgKworCQkgICAgc3RycnN0LT5z
cnNfbnVtYmVyX3N0cmVhbXMgKiBzaXplb2YodWludDE2X3QpID4gb3B0c2l6ZSkgeworCQkJZXJy
b3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQor
CQlpZiAoc3RycnN0LT5zcnNfZmxhZ3MgJiBTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlORykgewor
CQkJc2VuZF9pbiA9IDE7CisJCQlpZiAoc3RjYi0+YXNvYy5zdHJlYW1fcmVzZXRfb3V0c3RhbmRp
bmcpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFQUxSRUFEWSk7CisJCQkJZXJyb3IgPSBFQUxSRUFEWTsKKwkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHN0cnJzdC0+
c3JzX2ZsYWdzICYgU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkcpIHsKKwkJCXNlbmRfb3V0ID0g
MTsKKwkJfQorCQlpZiAoKHN0cnJzdC0+c3JzX251bWJlcl9zdHJlYW1zID4gU0NUUF9NQVhfU1RS
RUFNU19BVF9PTkNFX1JFU0VUKSAmJiBzZW5kX2luKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9NRU0pOworCQkJZXJy
b3IgPSBFTk9NRU07CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVhazsKKwkJfQor
CQlpZiAoKHNlbmRfaW4gPT0gMCkgJiYgKHNlbmRfb3V0ID09IDApKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwp
OworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQlicmVh
azsKKwkJfQorCQlmb3IgKGkgPSAwOyBpIDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkr
KykgeworCQkJaWYgKChzZW5kX2luKSAmJgorCQkJICAgIChzdHJyc3QtPnNyc19zdHJlYW1fbGlz
dFtpXSA+IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQpKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoc2VuZF9vdXQpICYmCisJ
CQkgICAgKHN0cnJzdC0+c3JzX3N0cmVhbV9saXN0W2ldID4gc3RjYi0+YXNvYy5zdHJlYW1vdXRj
bnQpKSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQlicmVhazsK
KwkJCX0KKwkJfQorCQlpZiAoZXJyb3IpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CWJyZWFrOworCQl9CisJCWlmIChzZW5kX291dCkgeworCQkJaW50IGNudDsKKwkJCXVpbnQxNl90
IHN0cm07CisJCQlpZiAoc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMpIHsKKwkJCQlmb3IgKGkg
PSAwLCBjbnQgPSAwOyBpIDwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXM7IGkrKykgeworCQkJ
CQlzdHJtID0gc3RycnN0LT5zcnNfc3RyZWFtX2xpc3RbaV07CisJCQkJCWlmIChzdGNiLT5hc29j
LnN0cm1vdXRbc3RybV0uc3RhdGUgPT0gU0NUUF9TVFJFQU1fT1BFTikgeworCQkJCQkJc3RjYi0+
YXNvYy5zdHJtb3V0W3N0cm1dLnN0YXRlID0gU0NUUF9TVFJFQU1fUkVTRVRfUEVORElORzsKKwkJ
CQkJCWNudCsrOworCQkJCQl9CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBJdHMgYWxsICov
CisJCQkJZm9yIChpID0gMCwgY250ID0gMDsgaSA8IHN0Y2ItPmFzb2Muc3RyZWFtb3V0Y250OyBp
KyspIHsKKwkJCQkJaWYgKHN0Y2ItPmFzb2Muc3RybW91dFtpXS5zdGF0ZSA9PSBTQ1RQX1NUUkVB
TV9PUEVOKSB7CisJCQkJCQlzdGNiLT5hc29jLnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVB
TV9SRVNFVF9QRU5ESU5HOworCQkJCQkJY250Kys7CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0K
KwkJaWYgKHNlbmRfaW4pIHsKKwkJCWVycm9yID0gc2N0cF9zZW5kX3N0cl9yZXNldF9yZXEoc3Rj
Yiwgc3RycnN0LT5zcnNfbnVtYmVyX3N0cmVhbXMsCisJCQkJCQkJc3RycnN0LT5zcnNfc3RyZWFt
X2xpc3QsCisJCQkJCQkJc2VuZF9pbiwgMCwgMCwgMCwgMCwgMCk7CisJCX0gZWxzZSB7CisJCQll
cnJvciA9IHNjdHBfc2VuZF9zdHJlYW1fcmVzZXRfb3V0X2lmX3Bvc3NpYmxlKHN0Y2IsIFNDVFBf
U09fTE9DS0VEKTsKKwkJfQorCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJc2N0cF9jaHVua19vdXRw
dXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NUUlJTVF9SRVEsIFNDVFBfU09fTE9DS0VE
KTsKKwkJfSBlbHNlIHsKKwkJCSAvKgorCQkJICAqIEZvciBvdXRnb2luZyBzdHJlYW1zIGRvbid0
IHJlcG9ydCBhbnkgcHJvYmxlbXMgaW4KKwkJCSAgKiBzZW5kaW5nIHRoZSByZXF1ZXN0IHRvIHRo
ZSBhcHBsaWNhdGlvbi4KKwkJCSAgKiBYWFg6IERvdWJsZSBjaGVjayByZXNldHRpbmcgaW5jb21p
bmcgc3RyZWFtcy4KKwkJCSAgKi8KKwkJCWVycm9yID0gMDsKKwkJfQorCQlTQ1RQX1RDQl9VTkxP
Q0soc3RjYik7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQUREX1NUUkVBTVM6CisJeworCQlz
dHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyAqc3RyYWRkOworCQl1aW50OF90IGFkZHN0cmVhbSA9IDA7
CisJCXVpbnQxNl90IGFkZF9vX3N0cm1jbnQgPSAwOworCQl1aW50MTZfdCBhZGRfaV9zdHJtY250
ID0gMDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHN0cmFkZCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0
cF9hZGRfc3RyZWFtcywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3Ry
YWRkLT5zYXNfYXNzb2NfaWQpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCSAgICAgICAgU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2It
PmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDApIHsKKwkJCS8qCisJCQkgKiBQZWVyIGRvZXMg
bm90IHN1cHBvcnQgdGhlIGNodW5rIHR5cGUuCisJCQkgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOwor
CQkJZXJyb3IgPSBFT1BOT1RTVVBQOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJl
YWs7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFQUxSRUFEWSk7CisJCQllcnJvciA9IEVBTFJFQURZOworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKChzdHJhZGQtPnNhc19vdXRzdHJtcyA9PSAw
KSAmJgorCQkgICAgKHN0cmFkZC0+c2FzX2luc3RybXMgPT0gMCkpIHsKKwkJCWVycm9yID0gRUlO
VkFMOworCQkJZ290byBza2lwX3N0dWZmOworCQl9CisJCWlmIChzdHJhZGQtPnNhc19vdXRzdHJt
cykgeworCQkJYWRkc3RyZWFtID0gMTsKKwkJCS8qIFdlIGFsbG9jYXRlIGhlcmUgKi8KKwkJCWFk
ZF9vX3N0cm1jbnQgPSBzdHJhZGQtPnNhc19vdXRzdHJtczsKKwkJCWlmICgoKChpbnQpYWRkX29f
c3RybWNudCkgKyAoKGludClzdGNiLT5hc29jLnN0cmVhbW91dGNudCkpID4gMHgwMDAwZmZmZikg
eworCQkJCS8qIFlvdSBjYW4ndCBoYXZlIG1vcmUgdGhhbiA2NGsgKi8KKwkJCQllcnJvciA9IEVJ
TlZBTDsKKwkJCQlnb3RvIHNraXBfc3R1ZmY7CisJCQl9CisJCX0KKwkJaWYgKHN0cmFkZC0+c2Fz
X2luc3RybXMpIHsKKwkJCWludCBjbnQ7CisKKwkJCWFkZHN0cmVhbSB8PSAyOworCQkJLyogV2Ug
YWxsb2NhdGUgaW5zaWRlIHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKCkgKi8KKwkJCWFkZF9pX3N0
cm1jbnQgPSBzdHJhZGQtPnNhc19pbnN0cm1zOworCQkJY250ID0gYWRkX2lfc3RybWNudDsKKwkJ
CWNudCArPSBzdGNiLT5hc29jLnN0cmVhbWluY250OworCQkJaWYgKGNudCA+IDB4MDAwMGZmZmYp
IHsKKwkJCQkvKiBZb3UgY2FuJ3QgaGF2ZSBtb3JlIHRoYW4gNjRrICovCisJCQkJZXJyb3IgPSBF
SU5WQUw7CisJCQkJZ290byBza2lwX3N0dWZmOworCQkJfQorCQkJaWYgKGNudCA+IChpbnQpc3Rj
Yi0+YXNvYy5tYXhfaW5ib3VuZF9zdHJlYW1zKSB7CisJCQkJLyogTW9yZSB0aGFuIHlvdSBhcmUg
YWxsb3dlZCAqLworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWdvdG8gc2tpcF9zdHVmZjsKKwkJ
CX0KKwkJfQorCQllcnJvciA9IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEws
IDAsIDAsIGFkZHN0cmVhbSwgYWRkX29fc3RybWNudCwgYWRkX2lfc3RybWNudCwgMCk7CisJCXNj
dHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9PVVRQVVRfRlJPTV9TVFJSU1RfUkVRLCBT
Q1RQX1NPX0xPQ0tFRCk7CisJc2tpcF9zdHVmZjoKKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOwor
CQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1JFU0VUX0FTU09DOgorCXsKKwkJaW50IGk7CisJCXVp
bnQzMl90ICp2YWx1ZTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHZhbHVlLCBvcHR2YWwsIHVp
bnQzMl90LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCAoc2N0cF9hc3Nv
Y190KSAqdmFsdWUpOworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCSAgICAgICAgU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PRU5U
KTsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHN0Y2ItPmFzb2Mu
cmVjb25maWdfc3VwcG9ydGVkID09IDApIHsKKwkJCS8qCisJCQkgKiBQZWVyIGRvZXMgbm90IHN1
cHBvcnQgdGhlIGNodW5rIHR5cGUuCisJCQkgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVPUE5PVFNVUFApOworCQkJZXJy
b3IgPSBFT1BOT1RTVVBQOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJYnJlYWs7CisJ
CX0KKwkJaWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3Jlc2V0X291dHN0YW5kaW5nKSB7CisJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
QUxSRUFEWSk7CisJCQllcnJvciA9IEVBTFJFQURZOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJYnJlYWs7CisJCX0KKwkJLyogSXMgdGhlcmUgYW55IGRhdGEgcGVuZGluZyBpbiB0aGUg
c2VuZCBvciBzZW50IHF1ZXVlcz8gKi8KKwkJaWYgKCFUQUlMUV9FTVBUWSgmc3RjYi0+YXNvYy5z
ZW5kX3F1ZXVlKSB8fAorCQkgICAgIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbnRfcXVldWUp
KSB7CisJCWJ1c3lfb3V0OgorCQkJZXJyb3IgPSBFQlVTWTsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCS8qIERvIGFueSBzdHJlYW1z
IGhhdmUgZGF0YSBxdWV1ZWQ/ICovCisJCWZvciAoIGkgPSAwOyBpPCBzdGNiLT5hc29jLnN0cmVh
bW91dGNudDsgaSsrKSB7CisJCQlpZiAoIVRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnN0cm1vdXRb
aV0ub3V0cXVldWUpKSB7CisJCQkJZ290byBidXN5X291dDsKKwkJCX0KKwkJfQorCQllcnJvciA9
IHNjdHBfc2VuZF9zdHJfcmVzZXRfcmVxKHN0Y2IsIDAsIE5VTEwsIDAsIDEsIDAsIDAsIDAsIDAp
OworCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fU1RSUlNU
X1JFUSwgU0NUUF9TT19MT0NLRUQpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJyZWFr
OworCX0KKwljYXNlIFNDVFBfQ09OTkVDVF9YOgorCQlpZiAob3B0c2l6ZSA8IChzaXplb2YoaW50
KSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVy
cm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0KKwkJZXJyb3IgPSBzY3RwX2RvX2Nvbm5lY3Rf
eChzbywgaW5wLCBvcHR2YWwsIG9wdHNpemUsIHAsIDApOworCQlicmVhazsKKwljYXNlIFNDVFBf
Q09OTkVDVF9YX0RFTEFZRUQ6CisJCWlmIChvcHRzaXplIDwgKHNpemVvZihpbnQpICsgc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbikpKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQlicmVhazsKKwkJfQorCQllcnJvciA9IHNjdHBfZG9fY29ubmVjdF94KHNvLCBpbnAs
IG9wdHZhbCwgb3B0c2l6ZSwgcCwgMSk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9DT05ORUNUX1hf
Q09NUExFVEU6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCisJCS8qIEZJWE1FIE1UOiBj
aGVjayBjb3JyZWN0PyAqLworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKHNhLCBvcHR2YWwsIHN0cnVj
dCBzb2NrYWRkciwgb3B0c2l6ZSk7CisKKwkJLyogZmluZCB0Y2IgKi8KKwkJaWYgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkgeworCQkJU0NUUF9JTlBfUkxPQ0so
aW5wKTsKKwkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlm
IChzdGNiKSB7CisJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCX0KKwkJCVNDVFBfSU5QX1JV
TkxPQ0soaW5wKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNj
dHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlm
IGl0IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0
IGFyZ3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJU0NUUF9JTlBf
SU5DUl9SRUYoaW5wKTsKKwkJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZp
bnAsIHNhLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCQlT
Q1RQX0lOUF9ERUNSX1JFRihpbnApOworCQkJfQorCQl9CisKKwkJaWYgKHN0Y2IgPT0gTlVMTCkg
eworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRU5PRU5UKTsKKwkJCWVycm9yID0gRU5PRU5UOworCQkJYnJlYWs7CisJCX0KKwkJ
aWYgKHN0Y2ItPmFzb2MuZGVsYXllZF9jb25uZWN0aW9uID09IDEpIHsKKwkJCXN0Y2ItPmFzb2Mu
ZGVsYXllZF9jb25uZWN0aW9uID0gMDsKKwkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZz
dGNiLT5hc29jLnRpbWVfZW50ZXJlZCk7CisJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9U
WVBFX0lOSVQsIGlucCwgc3RjYiwKKwkJCQkJc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
LAorCQkJCQlTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ184KTsKKwkJCXNjdHBfc2Vu
ZF9pbml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwkJfSBlbHNlIHsKKwkJCS8q
CisJCQkgKiBhbHJlYWR5IGV4cGlyZWQgb3IgZGlkIG5vdCB1c2UgZGVsYXllZAorCQkJICogY29u
bmVjdHgKKwkJCSAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQkJZXJyb3IgPSBFQUxSRUFEWTsKKwkJ
fQorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfTUFY
X0JVUlNUOgorCXsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA8IDkwMDAwMAorCQl1aW50OF90ICpidXJzdDsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGJ1
cnN0LCBvcHR2YWwsIHVpbnQ4X3QsIG9wdHNpemUpOworCisJCVNDVFBfSU5QX1dMT0NLKGlucCk7
CisJCWlucC0+c2N0cF9lcC5tYXhfYnVyc3QgPSAqYnVyc3Q7CisJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKyNlbHNlCisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXpl
KTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChz
dGNiKSB7CisJCQlzdGNiLT5hc29jLm1heF9idXJzdCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFND
VFBfRlVUVVJFX0FTU09DKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9BTExfQVNT
T0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAubWF4X2J1
cnN0ID0gYXYtPmFzc29jX3ZhbHVlOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0K
KwkJCWlmICgoYXYtPmFzc29jX2lkID09IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAo
YXYtPmFzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlu
cCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3Rj
Ymxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5tYXhf
YnVyc3QgPSBhdi0+YXNzb2NfdmFsdWU7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisjZW5kaWYKKwkJYnJl
YWs7CisJfQorCWNhc2UgU0NUUF9NQVhTRUc6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1
ZSAqYXY7CisJCWludCBvdmg7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBz
dHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwg
c3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0Jf
RkxBR1NfQk9VTkRfVjYpIHsKKwkJCW92aCA9IFNDVFBfTUVEX09WRVJIRUFEOworCQl9IGVsc2Ug
eworCQkJb3ZoID0gU0NUUF9NRURfVjRfT1ZFUkhFQUQ7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJ
CWlmIChhdi0+YXNzb2NfdmFsdWUpIHsKKwkJCQlzdGNiLT5hc29jLnNjdHBfZnJhZ19wb2ludCA9
IChhdi0+YXNzb2NfdmFsdWUgKyBvdmgpOworCQkJfSBlbHNlIHsKKwkJCQlzdGNiLT5hc29jLnNj
dHBfZnJhZ19wb2ludCA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCQkJfQorCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9G
VVRVUkVfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQkvKiBGSVhNRSBN
VDogSSB0aGluayB0aGlzIGlzIG5vdCBpbiB0dW5lIHdpdGggdGhlIEFQSSBJRCAqLworCQkJCWlm
IChhdi0+YXNzb2NfdmFsdWUpIHsKKwkJCQkJaW5wLT5zY3RwX2ZyYWdfcG9pbnQgPSAoYXYtPmFz
c29jX3ZhbHVlICsgb3ZoKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpbnAtPnNjdHBfZnJhZ19wb2lu
dCA9IFNDVFBfREVGQVVMVF9NQVhTRUdNRU5UOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9FVkVOVFM6CisJeworCQlzdHJ1
Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUgKmV2ZW50czsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGV2ZW50cywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ldmVudF9zdWJzY3JpYmUsIG9wdHNpemUpOwor
CisJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCWlmIChldmVudHMtPnNjdHBfZGF0YV9pb19ldmVu
dCkgeworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVkRBVEFJT0VW
TlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZMQUdT
X1JFQ1ZEQVRBSU9FVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfYXNzb2NpYXRpb25f
ZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NP
Q0VWTlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZBU1NPQ0VWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9hZGRyZXNzX2V2
ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJF
Vk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWUEFERFJFVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJl
X2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VO
REZBSUxFVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BD
Ql9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfcGVl
cl9lcnJvcl9ldmVudCkgeworCQkJc2N0cF9mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlBFRVJFUlIpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc2h1dGRv
d25fZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZT
SFVURE9XTkVWTlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIFNDVFBf
UENCX0ZMQUdTX1JFQ1ZTSFVURE9XTkVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0cF9w
YXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BD
Ql9GTEFHU19QREFQSUVWTlQpOworCQl9IGVsc2UgeworCQkJc2N0cF9mZWF0dXJlX29mZihpbnAs
IFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRzLT5zY3RwX2Fk
YXB0YXRpb25fbGF5ZXJfZXZlbnQpIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENC
X0ZMQUdTX0FEQVBUQVRJT05FVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYo
aW5wLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCk7CisJCX0KKworCQlpZiAoZXZlbnRz
LT5zY3RwX2F1dGhlbnRpY2F0aW9uX2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBT
Q1RQX1BDQl9GTEFHU19BVVRIRVZOVCk7CisJCX0gZWxzZSB7CisJCQlzY3RwX2ZlYXR1cmVfb2Zm
KGlucCwgU0NUUF9QQ0JfRkxBR1NfQVVUSEVWTlQpOworCQl9CisKKwkJaWYgKGV2ZW50cy0+c2N0
cF9zZW5kZXJfZHJ5X2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9G
TEFHU19EUllFVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19EUllFVk5UKTsKKwkJfQorCisJCWlmIChldmVudHMtPnNjdHBfc3RyZWFtX3Jl
c2V0X2V2ZW50KSB7CisJCQlzY3RwX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19TVFJF
QU1fUkVTRVRFVk5UKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQ
X1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UKTsKKwkJfQorCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisKKwkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJTElTVF9GT1JFQUNIKHN0Y2IsICZpbnAt
PnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7
CisJCQlpZiAoZXZlbnRzLT5zY3RwX2Fzc29jaWF0aW9uX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNi
X2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWQVNTT0NFVk5UKTsKKwkJ
CX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0Jf
RkxBR1NfUkVDVkFTU09DRVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX2FkZHJlc3Nf
ZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZM
QUdTX1JFQ1ZQQUREUkVWTlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9v
ZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWUEFERFJFVk5UKTsKKwkJCX0KKwkJCWlm
IChldmVudHMtPnNjdHBfc2VuZF9mYWlsdXJlX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1
cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWU0VOREZBSUxFVk5UKTsKKwkJCX0g
ZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxB
R1NfUkVDVlNFTkRGQUlMRVZOVCk7CisJCQl9CisJCQlpZiAoZXZlbnRzLT5zY3RwX3BlZXJfZXJy
b3JfZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENC
X0ZMQUdTX1JFQ1ZQRUVSRVJSKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVf
b2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlBFRVJFUlIpOworCQkJfQorCQkJaWYg
KGV2ZW50cy0+c2N0cF9zaHV0ZG93bl9ldmVudCkgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29u
KGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVCk7CisJCQl9IGVsc2Ug
eworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JF
Q1ZTSFVURE9XTkVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50cy0+c2N0cF9wYXJ0aWFsX2RlbGl2
ZXJ5X2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BD
Ql9GTEFHU19QREFQSUVWTlQpOworCQkJfSBlbHNlIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9v
ZmYoaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19QREFQSUVWTlQpOworCQkJfQorCQkJaWYgKGV2
ZW50cy0+c2N0cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1
cmVfb24oaW5wLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BREFQVEFUSU9ORVZOVCk7CisJCQl9IGVs
c2UgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdT
X0FEQVBUQVRJT05FVk5UKTsKKwkJCX0KKwkJCWlmIChldmVudHMtPnNjdHBfYXV0aGVudGljYXRp
b25fZXZlbnQpIHsKKwkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENC
X0ZMQUdTX0FVVEhFVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb2Zm
KGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfQVVUSEVWTlQpOworCQkJfQorCQkJaWYgKGV2ZW50
cy0+c2N0cF9zZW5kZXJfZHJ5X2V2ZW50KSB7CisJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5w
LCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19EUllFVk5UKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF9z
dGNiX2ZlYXR1cmVfb2ZmKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCk7CisJCQl9
CisJCQlpZiAoZXZlbnRzLT5zY3RwX3N0cmVhbV9yZXNldF9ldmVudCkgeworCQkJCXNjdHBfc3Rj
Yl9mZWF0dXJlX29uKGlucCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfU1RSRUFNX1JFU0VURVZOVCk7
CisJCQl9IGVsc2UgeworCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2IsIFNDVFBf
UENCX0ZMQUdTX1NUUkVBTV9SRVNFVEVWTlQpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQl9CisJCS8qIFNlbmQgdXAgdGhlIHNlbmRlciBkcnkgZXZlbnQgb25seSBmb3IgMS10
by0xIHN0eWxlIHNvY2tldHMuICovCisJCWlmIChldmVudHMtPnNjdHBfc2VuZGVyX2RyeV9ldmVu
dCkgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8
fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkg
eworCQkJCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCQlpZiAo
c3RjYikgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQkJCQlpZiAoVEFJTFFfRU1QVFko
JnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSkgJiYKKwkJCQkJICAgIFRBSUxRX0VNUFRZKCZzdGNiLT5h
c29jLnNlbnRfcXVldWUpICYmCisJCQkJCSAgICAoc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250
ID09IDApKSB7CisJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfU0VOREVSX0RSWSwg
c3RjYiwgIDAsIE5VTEwsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJfQorCQkJCQlTQ1RQX1RDQl9V
TkxPQ0soc3RjYik7CisJCQkJfQorCQkJfQorCQl9CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9BREFQVEFUSU9OX0xBWUVSOgorCXsKKwkJc3RydWN0
IHNjdHBfc2V0YWRhcHRhdGlvbiAqYWRhcF9iaXRzOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
YWRhcF9iaXRzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX3NldGFkYXB0YXRpb24sIG9wdHNpemUpOwor
CQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpbnAtPnNjdHBfZXAuYWRhcHRhdGlvbl9sYXllcl9p
bmRpY2F0b3IgPSBhZGFwX2JpdHMtPnNzYl9hZGFwdGF0aW9uX2luZDsKKwkJaW5wLT5zY3RwX2Vw
LmFkYXB0YXRpb25fbGF5ZXJfaW5kaWNhdG9yX3Byb3ZpZGVkID0gMTsKKwkJU0NUUF9JTlBfV1VO
TE9DSyhpbnApOworCQlicmVhazsKKwl9CisjaWZkZWYgU0NUUF9ERUJVRworCWNhc2UgU0NUUF9T
RVRfSU5JVElBTF9EQkdfU0VROgorCXsKKwkJdWludDMyX3QgKnZ2djsKKworCQlTQ1RQX0NIRUNL
X0FORF9DQVNUKHZ2diwgb3B0dmFsLCB1aW50MzJfdCwgb3B0c2l6ZSk7CisJCVNDVFBfSU5QX1dM
T0NLKGlucCk7CisJCWlucC0+c2N0cF9lcC5pbml0aWFsX3NlcXVlbmNlX2RlYnVnID0gKnZ2djsK
KwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwl9CisjZW5kaWYKKwljYXNlIFND
VFBfREVGQVVMVF9TRU5EX1BBUkFNOgorCXsKKwkJc3RydWN0IHNjdHBfc25kcmN2aW5mbyAqc19p
bmZvOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qoc19pbmZvLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3NuZHJjdmluZm8sIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNfaW5m
by0+c2luZm9fYXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlpZiAoc19pbmZvLT5zaW5m
b19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCW1lbWNweSgmc3RjYi0+
YXNvYy5kZWZfc2VuZCwgc19pbmZvLCBtaW4ob3B0c2l6ZSwgc2l6ZW9mKHN0Y2ItPmFzb2MuZGVm
X3NlbmQpKSk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAo
KGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHNf
aW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAgKHNf
aW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0MpKSB7CisJCQkJU0NUUF9JTlBf
V0xPQ0soaW5wKTsKKwkJCQltZW1jcHkoJmlucC0+ZGVmX3NlbmQsIHNfaW5mbywgbWluKG9wdHNp
emUsIHNpemVvZihpbnAtPmRlZl9zZW5kKSkpOworCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
KwkJCX0KKwkJCWlmICgoc19pbmZvLT5zaW5mb19hc3NvY19pZCA9PSBTQ1RQX0NVUlJFTlRfQVNT
T0MpIHx8CisJCQkgICAgKHNfaW5mby0+c2luZm9fYXNzb2NfaWQgPT0gU0NUUF9BTExfQVNTT0Mp
KSB7CisJCQkJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlu
cC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNibGlzdCkgeworCQkJCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQkJCQlpZiAoc19pbmZvLT5zaW5mb19zdHJlYW0gPCBzdGNiLT5hc29jLnN0cmVhbW91
dGNudCkgeworCQkJCQkJbWVtY3B5KCZzdGNiLT5hc29jLmRlZl9zZW5kLCBzX2luZm8sIG1pbihv
cHRzaXplLCBzaXplb2Yoc3RjYi0+YXNvYy5kZWZfc2VuZCkpKTsKKwkJCQkJfQorCQkJCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCQkJfQorCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJ
CX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1BFRVJfQUREUl9QQVJBTVM6CisJewor
CQlzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFtcyAqcGFkZHJwOworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7CisJCXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmlu
ZWQoSU5FVDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlT
Q1RQX0NIRUNLX0FORF9DQVNUKHBhZGRycCwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnBhcmFt
cywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgcGFkZHJwLT5zcHBfYXNz
b2NfaWQpOworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlpZiAocGFk
ZHJwLT5zcHBfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZwYWRk
cnAtPnNwcF9hZGRyZXNzOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42
X2FkZHIpKSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRy
ID0gKHN0cnVjdCBzb2NrYWRkciAqKSZwYWRkcnAtPnNwcF9hZGRyZXNzOworCQkJfQorCQl9IGVs
c2UgeworCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRkcmVzczsK
KwkJfQorI2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmcGFkZHJwLT5zcHBfYWRk
cmVzczsKKyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRu
ZXQoc3RjYiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5j
ZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVu
dCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAo
bGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9
IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFz
c29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICZuZXQsIE5VTEwsIE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgewor
CQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQl9CisJCX0KKwkJaWYgKChzdGNiICE9IE5V
TEwpICYmIChuZXQgPT0gTlVMTCkpIHsKKyNpZmRlZiBJTkVUCisJCQlpZiAoYWRkci0+c2FfZmFt
aWx5ID09IEFGX0lORVQpIHsKKworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luOworCQkJCXNp
biA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQkJCWlmIChzaW4tPnNpbl9hZGRyLnNf
YWRkciAhPSBJTkFERFJfQU5ZKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJ
CX0gZWxzZQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVDYpIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQkJc2luNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKwkJCQlpZiAoIUlONl9JU19BRERSX1VOU1BF
Q0lGSUVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCVNDVFBf
VENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFrOworCQkJ
CX0KKwkJCX0gZWxzZQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJaWYg
KGFkZHItPnNhX2ZhbWlseSA9PSBBRl9DT05OKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2Nvbm4g
KnNjb25uOworCisJCQkJc2Nvbm4gPSAoc3RydWN0IHNvY2thZGRyX2Nvbm4gKilhZGRyOworCQkJ
CWlmIChzY29ubi0+c2Nvbm5fYWRkciAhPSBOVUxMKSB7CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJ
CVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWJyZWFr
OworCQkJCX0KKwkJCX0gZWxzZQorI2VuZGlmCisJCQl7CisJCQkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVh
azsKKwkJCX0KKwkJfQorCQkvKiBzYW5pdHkgY2hlY2tzICovCisJCWlmICgocGFkZHJwLT5zcHBf
ZmxhZ3MgJiBTUFBfSEJfRU5BQkxFKSAmJiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfRElT
QUJMRSkpIHsKKwkJCWlmIChzdGNiKQorCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEs
IEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKworCQlpZiAoKHBhZGRycC0+c3Bw
X2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgJiYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BN
VFVEX0RJU0FCTEUpKSB7CisJCQlpZiAoc3RjYikKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisKKwkJaWYgKHN0Y2Ig
IT0gTlVMTCkgeworCQkJLyoqKioqKioqKioqKioqKioqKioqKioqKlRDQiBTUEVDSUZJQyBTRVQg
KioqKioqKioqKioqKioqKioqLworCQkJaWYgKG5ldCAhPSBOVUxMKSB7CisJCQkJLyoqKioqKioq
KioqKioqKioqKioqKioqKk5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLworCQkJ
CWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9ESVNBQkxFKSB7CisJCQkJCWlmICghKG5l
dC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9VTkNPTkZJUk1FRCkgJiYKKwkJCQkJICAgICEobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX05PSEIpKSB7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCVNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzkpOworCQkJCQl9CisJCQkJCW5ldC0+ZGVzdF9z
dGF0ZSB8PSBTQ1RQX0FERFJfTk9IQjsKKwkJCQl9CisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdz
ICYgU1BQX0hCX0VOQUJMRSkgeworCQkJCQlpZiAocGFkZHJwLT5zcHBfaGJpbnRlcnZhbCkgewor
CQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKKwkJ
CQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9USU1FX0lTX1pFUk8pIHsK
KwkJCQkJCW5ldC0+aGVhcnRfYmVhdF9kZWxheSA9IDA7CisJCQkJCX0KKwkJCQkJc2N0cF90aW1l
cl9zdG9wKFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwgbmV0LAorCQkJCQkg
ICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBfVVNSUkVRICsgU0NUUF9MT0NfMTApOworCQkJ
CQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9IRUFSVEJFQVQsIGlucCwgc3RjYiwg
bmV0KTsKKwkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9IQjsKKwkJCQl9CisJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0RFTUFORCkgeworCQkJCQkvKiBvbiBk
ZW1hbmQgSEIgKi8KKwkJCQkJc2N0cF9zZW5kX2hiKHN0Y2IsIG5ldCwgU0NUUF9TT19MT0NLRUQp
OworCQkJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICBTQ1RQX09VVFBVVF9GUk9NX1NP
Q0tPUFQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCk7CisJCQkJfQorCQkJCWlmICgocGFkZHJw
LT5zcHBfZmxhZ3MgJiBTUFBfUE1UVURfRElTQUJMRSkgJiYgKHBhZGRycC0+c3BwX3BhdGhtdHUg
Pj0gU0NUUF9TTUFMTEVTVF9QTVRVKSkgeworCQkJCQlpZiAoU0NUUF9PU19USU1FUl9QRU5ESU5H
KCZuZXQtPnBtdHVfdGltZXIudGltZXIpKSB7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9U
SU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCVNDVFBfRlJP
TV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzExKTsKKwkJCQkJfQorCQkJCQluZXQtPmRlc3Rfc3Rh
dGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOworCQkJCQluZXQtPm10dSA9IHBhZGRycC0+c3BwX3Bh
dGhtdHU7CisJCQkJCXN3aXRjaCAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwkJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5f
VjRfT1ZFUkhFQUQ7CisJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJCWNh
c2UgQUZfSU5FVDY6CisJCQkJCQluZXQtPm10dSArPSBTQ1RQX01JTl9PVkVSSEVBRDsKKwkJCQkJ
CWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCQljYXNlIEFG
X0NPTk46CisJCQkJCQluZXQtPm10dSArPSBzaXplb2Yoc3RydWN0IHNjdHBoZHIpOworCQkJCQkJ
YnJlYWs7CisjZW5kaWYKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJ
CWlmIChuZXQtPm10dSA8IHN0Y2ItPmFzb2Muc21hbGxlc3RfbXR1KSB7CisJCQkJCQlzY3RwX3Bh
dGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXQtPm10dSk7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYg
KHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgeworCQkJCQlpZiAoIVNDVFBf
T1NfVElNRVJfUEVORElORygmbmV0LT5wbXR1X3RpbWVyLnRpbWVyKSkgeworCQkJCQkJc2N0cF90
aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFUSE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7
CisJCQkJCX0KKwkJCQkJbmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfTk9fUE1UVUQ7CisJ
CQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCWlmIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50ID4g
cGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NU
UF9BRERSX1BGOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKChuZXQtPmVycm9y
X2NvdW50IDw9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpICYmCisJCQkJCQkgICAgKG5ldC0+ZXJy
b3JfY291bnQgPiBuZXQtPnBmX3RocmVzaG9sZCkpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUg
fD0gU0NUUF9BRERSX1BGOworCQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQsIFNDVFBfU09f
TE9DS0VEKTsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVB
VCwKKwkJCQkJCQkgICAgICAgICAgICAgICAgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0LAorCQkJ
CQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xMik7
CisJCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBzdGNi
LT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWlmIChuZXQtPmRl
c3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJCQlpZiAobmV0LT5lcnJvcl9j
b3VudCA+IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUg
Jj0gflNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9U
SUZZX0lOVEVSRkFDRV9ET1dOLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJ
CX0KKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50IDw9IHBhZGRycC0+
c3BwX3BhdGhtYXhyeHQpIHsKKwkJCQkJCQluZXQtPmRlc3Rfc3RhdGUgfD0gU0NUUF9BRERSX1JF
QUNIQUJMRTsKKwkJCQkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQ
LCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlu
ZXQtPmZhaWx1cmVfdGhyZXNob2xkID0gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dDsKKwkJCQl9CisJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0RTQ1ApIHsKKwkJCQkJbmV0LT5kc2NwID0g
cGFkZHJwLT5zcHBfZHNjcCAmIDB4ZmM7CisJCQkJCW5ldC0+ZHNjcCB8PSAweDAxOworCQkJCX0K
KyNpZmRlZiBJTkVUNgorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9JUFY2X0ZMT1dM
QUJFTCkgeworCQkJCQlpZiAobmV0LT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVU
NikgeworCQkJCQkJbmV0LT5mbG93bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAm
IDB4MDAwZmZmZmY7CisJCQkJCQluZXQtPmZsb3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQkJCQl9
CisJCQkJfQorI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCS8qKioqKioqKioqKioqKioqKioqKioq
KipBU1NPQyBPTkxZIC0tIE5PIE5FVCBTUEVDSUZJQyBTRVQgKioqKioqKioqKioqKioqKioqLwor
CQkJCWlmIChwYWRkcnAtPnNwcF9wYXRobWF4cnh0ICE9IDApIHsKKwkJCQkJc3RjYi0+YXNvYy5k
ZWZfbmV0X2ZhaWx1cmUgPSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0OworCQkJCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQlpZiAobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSB7CisJCQkJCQkJaWYgKG5ldC0+ZXJyb3JfY291bnQg
PiBwYWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+
U0NUUF9BRERSX1BGOworCQkJCQkJCX0KKwkJCQkJCX0gZWxzZSB7CisJCQkJCQkJaWYgKChuZXQt
PmVycm9yX2NvdW50IDw9IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQpICYmCisJCQkJCQkJICAgIChu
ZXQtPmVycm9yX2NvdW50ID4gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJCW5ldC0+ZGVz
dF9zdGF0ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJCQkJCXNjdHBfc2VuZF9oYihzdGNiLCBuZXQs
IFNDVFBfU09fTE9DS0VEKTsKKwkJCQkJCQkJc2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQ
RV9IRUFSVEJFQVQsCisJCQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBuZXQsCisJCQkJCQkJCSAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBT
Q1RQX0xPQ18xMyk7CisJCQkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hF
QVJUQkVBVCwgc3RjYi0+c2N0cF9lcCwgc3RjYiwgbmV0KTsKKwkJCQkJCQl9CisJCQkJCQl9CisJ
CQkJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJMRSkgeworCQkJCQkJ
CWlmIChuZXQtPmVycm9yX2NvdW50ID4gcGFkZHJwLT5zcHBfcGF0aG1heHJ4dCkgeworCQkJCQkJ
CQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7CisJCQkJCQkJCXNjdHBf
dWxwX25vdGlmeShTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTiwgc3RjYiwgMCwgbmV0LCBTQ1RQ
X1NPX0xPQ0tFRCk7CisJCQkJCQkJfQorCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlpZiAobmV0LT5l
cnJvcl9jb3VudCA8PSBwYWRkcnAtPnNwcF9wYXRobWF4cnh0KSB7CisJCQkJCQkJCW5ldC0+ZGVz
dF9zdGF0ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfSU5URVJGQUNFX1VQLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09fTE9DS0VEKTsK
KwkJCQkJCQl9CisJCQkJCQl9CisJCQkJCQluZXQtPmZhaWx1cmVfdGhyZXNob2xkID0gcGFkZHJw
LT5zcHBfcGF0aG1heHJ4dDsKKwkJCQkJfQorCQkJCX0KKworCQkJCWlmIChwYWRkcnAtPnNwcF9m
bGFncyAmIFNQUF9IQl9FTkFCTEUpIHsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX2hiaW50ZXJ2YWwg
IT0gMCkgeworCQkJCQkJc3RjYi0+YXNvYy5oZWFydF9iZWF0X2RlbGF5ID0gcGFkZHJwLT5zcHBf
aGJpbnRlcnZhbDsKKwkJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9mbGFncyAmIFNQUF9IQl9U
SU1FX0lTX1pFUk8pIHsKKwkJCQkJCXN0Y2ItPmFzb2MuaGVhcnRfYmVhdF9kZWxheSA9IDA7CisJ
CQkJCX0KKwkJCQkJLyogVHVybiBiYWNrIG9uIHRoZSB0aW1lciAqLworCQkJCQlUQUlMUV9GT1JF
QUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQlpZiAocGFkZHJw
LT5zcHBfaGJpbnRlcnZhbCAhPSAwKSB7CisJCQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5ID0g
cGFkZHJwLT5zcHBfaGJpbnRlcnZhbDsKKwkJCQkJCX0gZWxzZSBpZiAocGFkZHJwLT5zcHBfZmxh
Z3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7CisJCQkJCQkJbmV0LT5oZWFydF9iZWF0X2RlbGF5
ID0gMDsKKwkJCQkJCX0KKwkJCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9I
QikgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PSEI7CisJCQkJCQl9
CisJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBz
dGNiLCBuZXQsCisJCQkJCQkJCVNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzE0KTsK
KwkJCQkJCXNjdHBfdGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwgaW5wLCBz
dGNiLCBuZXQpOworCQkJCQl9CisJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29mZihpbnAsIHN0Y2Is
IFNDVFBfUENCX0ZMQUdTX0RPTk9UX0hFQVJUQkVBVCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAt
PnNwcF9mbGFncyAmIFNQUF9IQl9ESVNBQkxFKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAm
c3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJCWlmICghKG5ldC0+ZGVzdF9zdGF0
ZSAmIFNDVFBfQUREUl9OT0hCKSkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FE
RFJfTk9IQjsKKwkJCQkJCQlpZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05G
SVJNRUQpKSB7CisJCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRC
RUFULAorCQkJCQkJCQkgICAgICAgICAgICAgICAgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCSAg
ICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNSk7CisJCQkJ
CQkJfQorCQkJCQkJfQorCQkJCQl9CisJCQkJCXNjdHBfc3RjYl9mZWF0dXJlX29uKGlucCwgc3Rj
YiwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9CisJCQkJaWYgKChwYWRk
cnAtPnNwcF9mbGFncyAmIFNQUF9QTVRVRF9ESVNBQkxFKSAmJiAocGFkZHJwLT5zcHBfcGF0aG10
dSA+PSBTQ1RQX1NNQUxMRVNUX1BNVFUpKSB7CisJCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3Rj
Yi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJ
TkcoJm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0b3AoU0NU
UF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRSwgaW5wLCBzdGNiLCBuZXQsCisJCQkJCQkJCQlTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEgKyBTQ1RQX0xPQ18xNik7CisJCQkJCQl9CisJCQkJCQluZXQtPmRl
c3Rfc3RhdGUgfD0gU0NUUF9BRERSX05PX1BNVFVEOworCQkJCQkJbmV0LT5tdHUgPSBwYWRkcnAt
PnNwcF9wYXRobXR1OworCQkJCQkJc3dpdGNoIChuZXQtPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCQkJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJCW5ldC0+bXR1ICs9
IFNDVFBfTUlOX1Y0X09WRVJIRUFEOworCQkJCQkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCQkJbmV0LT5tdHUgKz0gU0NUUF9NSU5fT1ZF
UkhFQUQ7CisJCQkJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18p
CisJCQkJCQljYXNlIEFGX0NPTk46CisJCQkJCQkJbmV0LT5tdHUgKz0gc2l6ZW9mKHN0cnVjdCBz
Y3RwaGRyKTsKKwkJCQkJCQlicmVhazsKKyNlbmRpZgorCQkJCQkJZGVmYXVsdDoKKwkJCQkJCQli
cmVhazsKKwkJCQkJCX0KKwkJCQkJCWlmIChuZXQtPm10dSA8IHN0Y2ItPmFzb2Muc21hbGxlc3Rf
bXR1KSB7CisJCQkJCQkJc2N0cF9wYXRobXR1X2FkanVzdG1lbnQoc3RjYiwgbmV0LT5tdHUpOwor
CQkJCQkJfQorCQkJCQl9CisJCQkJCXN0Y2ItPmFzb2MuZGVmYXVsdF9tdHUgPSBwYWRkcnAtPnNw
cF9wYXRobXR1OworCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIFNDVFBfUENC
X0ZMQUdTX0RPX05PVF9QTVRVRCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAm
IFNQUF9QTVRVRF9FTkFCTEUpIHsKKwkJCQkJVEFJTFFfRk9SRUFDSChuZXQsICZzdGNiLT5hc29j
Lm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCQkJaWYgKCFTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJm5l
dC0+cG10dV90aW1lci50aW1lcikpIHsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElN
RVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0KTsKKwkJCQkJCX0KKwkJCQkJCW5l
dC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX05PX1BNVFVEOworCQkJCQl9CisJCQkJCXN0Y2It
PmFzb2MuZGVmYXVsdF9tdHUgPSAwOworCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBz
dGNiLCBTQ1RQX1BDQl9GTEFHU19ET19OT1RfUE1UVUQpOworCQkJCX0KKwkJCQlpZiAocGFkZHJw
LT5zcHBfZmxhZ3MgJiBTUFBfRFNDUCkgeworCQkJCQlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2It
PmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJCQluZXQtPmRzY3AgPSBwYWRkcnAtPnNwcF9k
c2NwICYgMHhmYzsKKwkJCQkJCW5ldC0+ZHNjcCB8PSAweDAxOworCQkJCQl9CisJCQkJCXN0Y2It
PmFzb2MuZGVmYXVsdF9kc2NwID0gcGFkZHJwLT5zcHBfZHNjcCAmIDB4ZmM7CisJCQkJCXN0Y2It
PmFzb2MuZGVmYXVsdF9kc2NwIHw9IDB4MDE7CisJCQkJfQorI2lmZGVmIElORVQ2CisJCQkJaWYg
KHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0lQVjZfRkxPV0xBQkVMKSB7CisJCQkJCVRBSUxRX0ZP
UkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJCWlmIChuZXQt
PnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJCQkJbmV0LT5mbG93
bGFiZWwgPSBwYWRkcnAtPnNwcF9pcHY2X2Zsb3dsYWJlbCAmIDB4MDAwZmZmZmY7CisJCQkJCQkJ
bmV0LT5mbG93bGFiZWwgfD0gMHg4MDAwMDAwMDsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCQlzdGNi
LT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsID0gcGFkZHJwLT5zcHBfaXB2Nl9mbG93bGFiZWwgJiAw
eDAwMGZmZmZmOworCQkJCQlzdGNiLT5hc29jLmRlZmF1bHRfZmxvd2xhYmVsIHw9IDB4ODAwMDAw
MDA7CisJCQkJfQorI2VuZGlmCisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0g
ZWxzZSB7CisJCQkvKioqKioqKioqKioqKioqKioqKioqKioqTk8gVENCLCBTRVQgVE8gZGVmYXVs
dCBzdHVmZiAqKioqKioqKioqKioqKioqKiovCisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKHBhZGRycC0+c3BwX2Fzc29jX2lkID09
IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJLyoK
KwkJCQkgKiBGb3IgdGhlIFRPUy9GTE9XTEFCRUwgc3R1ZmYgeW91IHNldCBpdAorCQkJCSAqIHdp
dGggdGhlIG9wdGlvbnMgb24gdGhlIHNvY2tldAorCQkJCSAqLworCQkJCWlmIChwYWRkcnAtPnNw
cF9wYXRobWF4cnh0ICE9IDApIHsKKwkJCQkJaW5wLT5zY3RwX2VwLmRlZl9uZXRfZmFpbHVyZSA9
IHBhZGRycC0+c3BwX3BhdGhtYXhyeHQ7CisJCQkJfQorCisJCQkJaWYgKHBhZGRycC0+c3BwX2Zs
YWdzICYgU1BQX0hCX1RJTUVfSVNfWkVSTykKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91
dHRpY2tzW1NDVFBfVElNRVJfSEVBUlRCRUFUXSA9IDA7CisJCQkJZWxzZSBpZiAocGFkZHJwLT5z
cHBfaGJpbnRlcnZhbCAhPSAwKSB7CisJCQkJCWlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsID4g
U0NUUF9NQVhfSEJfSU5URVJWQUwpCisJCQkJCQlwYWRkcnAtPnNwcF9oYmludGVydmFsPSBTQ1RQ
X01BWF9IQl9JTlRFUlZBTDsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfdGltZW91dHRpY2tzW1ND
VFBfVElNRVJfSEVBUlRCRUFUXSA9IE1TRUNfVE9fVElDS1MocGFkZHJwLT5zcHBfaGJpbnRlcnZh
bCk7CisJCQkJfQorCisJCQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0VOQUJMRSkg
eworCQkJCQlpZiAocGFkZHJwLT5zcHBfZmxhZ3MgJiBTUFBfSEJfVElNRV9JU19aRVJPKSB7CisJ
CQkJCQlpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRd
ID0gMDsKKwkJCQkJfSBlbHNlIGlmIChwYWRkcnAtPnNwcF9oYmludGVydmFsKSB7CisJCQkJCQlp
bnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdID0gTVNF
Q19UT19USUNLUyhwYWRkcnAtPnNwcF9oYmludGVydmFsKTsKKwkJCQkJfQorCQkJCQlzY3RwX2Zl
YXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9IGVs
c2UgaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX0hCX0RJU0FCTEUpIHsKKwkJCQkJc2N0cF9m
ZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRE9OT1RfSEVBUlRCRUFUKTsKKwkJCQl9CisJ
CQkJaWYgKHBhZGRycC0+c3BwX2ZsYWdzICYgU1BQX1BNVFVEX0VOQUJMRSkgeworCQkJCQlpbnAt
PnNjdHBfZXAuZGVmYXVsdF9tdHUgPSAwOworCQkJCQlzY3RwX2ZlYXR1cmVfb2ZmKGlucCwgU0NU
UF9QQ0JfRkxBR1NfRE9fTk9UX1BNVFVEKTsKKwkJCQl9IGVsc2UgaWYgKHBhZGRycC0+c3BwX2Zs
YWdzICYgU1BQX1BNVFVEX0RJU0FCTEUpIHsKKwkJCQkJaWYgKHBhZGRycC0+c3BwX3BhdGhtdHUg
Pj0gU0NUUF9TTUFMTEVTVF9QTVRVKSB7CisJCQkJCQlpbnAtPnNjdHBfZXAuZGVmYXVsdF9tdHUg
PSBwYWRkcnAtPnNwcF9wYXRobXR1OworCQkJCQl9CisJCQkJCXNjdHBfZmVhdHVyZV9vbihpbnAs
IFNDVFBfUENCX0ZMQUdTX0RPX05PVF9QTVRVRCk7CisJCQkJfQorCQkJCWlmIChwYWRkcnAtPnNw
cF9mbGFncyAmIFNQUF9EU0NQKSB7CisJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X2RzY3AgPSBw
YWRkcnAtPnNwcF9kc2NwICYgMHhmYzsKKwkJCQkJaW5wLT5zY3RwX2VwLmRlZmF1bHRfZHNjcCB8
PSAweDAxOworCQkJCX0KKyNpZmRlZiBJTkVUNgorCQkJCWlmIChwYWRkcnAtPnNwcF9mbGFncyAm
IFNQUF9JUFY2X0ZMT1dMQUJFTCkgeworCQkJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJCQkJCWlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJl
bCA9IHBhZGRycC0+c3BwX2lwdjZfZmxvd2xhYmVsICYgMHgwMDBmZmZmZjsKKwkJCQkJCWlucC0+
c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCB8PSAweDgwMDAwMDAwOworCQkJCQl9CisJCQkJfQor
I2VuZGlmCisJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwlj
YXNlIFNDVFBfUlRPSU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX3J0b2luZm8gKnNydG87CisJCXVp
bnQzMl90IG5ld19pbml0LCBuZXdfbWluLCBuZXdfbWF4OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1Qoc3J0bywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9ydG9pbmZvLCBvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBzcnRvLT5zcnRvX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikg
eworCQkJaWYgKHNydG8tPnNydG9faW5pdGlhbCkKKwkJCQluZXdfaW5pdCA9IHNydG8tPnNydG9f
aW5pdGlhbDsKKwkJCWVsc2UKKwkJCQluZXdfaW5pdCA9IHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG87
CisJCQlpZiAoc3J0by0+c3J0b19tYXgpCisJCQkJbmV3X21heCA9IHNydG8tPnNydG9fbWF4Owor
CQkJZWxzZQorCQkJCW5ld19tYXggPSBzdGNiLT5hc29jLm1heHJ0bzsKKwkJCWlmIChzcnRvLT5z
cnRvX21pbikKKwkJCQluZXdfbWluID0gc3J0by0+c3J0b19taW47CisJCQllbHNlCisJCQkJbmV3
X21pbiA9IHN0Y2ItPmFzb2MubWlucnRvOworCQkJaWYgKChuZXdfbWluIDw9IG5ld19pbml0KSAm
JiAobmV3X2luaXQgPD0gbmV3X21heCkpIHsKKwkJCQlzdGNiLT5hc29jLmluaXRpYWxfcnRvID0g
bmV3X2luaXQ7CisJCQkJc3RjYi0+YXNvYy5tYXhydG8gPSBuZXdfbWF4OworCQkJCXN0Y2ItPmFz
b2MubWlucnRvID0gbmV3X21pbjsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCX0KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNl
IHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwK
KwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwK
KwkJCSAgICAoc3J0by0+c3J0b19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJ
CQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlmIChzcnRvLT5zcnRvX2luaXRpYWwpCisJCQkJ
CW5ld19pbml0ID0gc3J0by0+c3J0b19pbml0aWFsOworCQkJCWVsc2UKKwkJCQkJbmV3X2luaXQg
PSBpbnAtPnNjdHBfZXAuaW5pdGlhbF9ydG87CisJCQkJaWYgKHNydG8tPnNydG9fbWF4KQorCQkJ
CQluZXdfbWF4ID0gc3J0by0+c3J0b19tYXg7CisJCQkJZWxzZQorCQkJCQluZXdfbWF4ID0gaW5w
LT5zY3RwX2VwLnNjdHBfbWF4cnRvOworCQkJCWlmIChzcnRvLT5zcnRvX21pbikKKwkJCQkJbmV3
X21pbiA9IHNydG8tPnNydG9fbWluOworCQkJCWVsc2UKKwkJCQkJbmV3X21pbiA9IGlucC0+c2N0
cF9lcC5zY3RwX21pbnJ0bzsKKwkJCQlpZiAoKG5ld19taW4gPD0gbmV3X2luaXQpICYmIChuZXdf
aW5pdCA8PSBuZXdfbWF4KSkgeworCQkJCQlpbnAtPnNjdHBfZXAuaW5pdGlhbF9ydG8gPSBuZXdf
aW5pdDsKKwkJCQkJaW5wLT5zY3RwX2VwLnNjdHBfbWF4cnRvID0gbmV3X21heDsKKwkJCQkJaW5w
LT5zY3RwX2VwLnNjdHBfbWlucnRvID0gbmV3X21pbjsKKwkJCQl9IGVsc2UgeworCQkJCQlTQ1RQ
X0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBF
SU5WQUwpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFM
OworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVNTT0NJTkZPOgorCXsKKwkJ
c3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgKnNhc29jOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1Qo
c2Fzb2MsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMsIG9wdHNpemUpOworCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNhc29jLT5zYXNvY19hc3NvY19pZCk7CisJCWlmIChzYXNv
Yy0+c2Fzb2NfY29va2llX2xpZmUpIHsKKwkJCS8qIGJvdW5kYXJ5IGNoZWNrIHRoZSBjb29raWUg
bGlmZSAqLworCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSA8IDEwMDApCisJCQkJc2Fz
b2MtPnNhc29jX2Nvb2tpZV9saWZlID0gMTAwMDsKKwkJCWlmIChzYXNvYy0+c2Fzb2NfY29va2ll
X2xpZmUgPiBTQ1RQX01BWF9DT09LSUVfTElGRSkgeworCQkJCXNhc29jLT5zYXNvY19jb29raWVf
bGlmZSA9IFNDVFBfTUFYX0NPT0tJRV9MSUZFOworCQkJfQorCQl9CisJCWlmIChzdGNiKSB7CisJ
CQlpZiAoc2Fzb2MtPnNhc29jX2Fzb2NtYXhyeHQpCisJCQkJc3RjYi0+YXNvYy5tYXhfc2VuZF90
aW1lcyA9IHNhc29jLT5zYXNvY19hc29jbWF4cnh0OworCQkJaWYgKHNhc29jLT5zYXNvY19jb29r
aWVfbGlmZSkgeworCQkJCXN0Y2ItPmFzb2MuY29va2llX2xpZmUgPSBNU0VDX1RPX1RJQ0tTKHNh
c29jLT5zYXNvY19jb29raWVfbGlmZSk7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkgICAgKHNhc29jLT5zYXNvY19hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9B
U1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlmIChzYXNvYy0+c2Fzb2Nf
YXNvY21heHJ4dCkKKwkJCQkJaW5wLT5zY3RwX2VwLm1heF9zZW5kX3RpbWVzID0gc2Fzb2MtPnNh
c29jX2Fzb2NtYXhyeHQ7CisJCQkJaWYgKHNhc29jLT5zYXNvY19jb29raWVfbGlmZSkgeworCQkJ
CQlpbnAtPnNjdHBfZXAuZGVmX2Nvb2tpZV9saWZlID0gTVNFQ19UT19USUNLUyhzYXNvYy0+c2Fz
b2NfY29va2llX2xpZmUpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9
IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0K
KwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9JTklUTVNHOgorCXsKKwkJc3RydWN0IHNjdHBfaW5p
dG1zZyAqc2luaXQ7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzaW5pdCwgb3B0dmFsLCBzdHJ1
Y3Qgc2N0cF9pbml0bXNnLCBvcHRzaXplKTsKKwkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJaWYg
KHNpbml0LT5zaW5pdF9udW1fb3N0cmVhbXMpCisJCQlpbnAtPnNjdHBfZXAucHJlX29wZW5fc3Ry
ZWFtX2NvdW50ID0gc2luaXQtPnNpbml0X251bV9vc3RyZWFtczsKKworCQlpZiAoc2luaXQtPnNp
bml0X21heF9pbnN0cmVhbXMpCisJCQlpbnAtPnNjdHBfZXAubWF4X29wZW5fc3RyZWFtc19pbnRv
bWUgPSBzaW5pdC0+c2luaXRfbWF4X2luc3RyZWFtczsKKworCQlpZiAoc2luaXQtPnNpbml0X21h
eF9hdHRlbXB0cykKKwkJCWlucC0+c2N0cF9lcC5tYXhfaW5pdF90aW1lcyA9IHNpbml0LT5zaW5p
dF9tYXhfYXR0ZW1wdHM7CisKKwkJaWYgKHNpbml0LT5zaW5pdF9tYXhfaW5pdF90aW1lbykKKwkJ
CWlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRfcnRvX21heCA9IHNpbml0LT5zaW5pdF9tYXhfaW5p
dF90aW1lbzsKKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsKKwl9CisJY2FzZSBT
Q1RQX1BSSU1BUllfQUREUjoKKwl7CisJCXN0cnVjdCBzY3RwX3NldHByaW0gKnNwYTsKKwkJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5l
ZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3Jl
OworI2VuZGlmCisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzcGEsIG9wdHZhbCwgc3RydWN0IHNj
dHBfc2V0cHJpbSwgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgc3BhLT5z
c3BfYXNzb2NfaWQpOworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQorCQlp
ZiAoc3BhLT5zc3BfYWRkci5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzcGEt
PnNzcF9hZGRyOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIp
KSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7CisJCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsKKwkJCQlhZGRyID0gKHN0
cnVjdCBzb2NrYWRkciAqKSZzcGEtPnNzcF9hZGRyOworCQkJfQorCQl9IGVsc2UgeworCQkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKwkJfQorI2Vsc2UKKwkJYWRk
ciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc3BhLT5zc3BfYWRkcjsKKyNlbmRpZgorCQlpZiAoc3Rj
YiAhPSBOVUxMKSB7CisJCQluZXQgPSBzY3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0gZWxz
ZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQgaGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9l
cF9hZGRyKCkgd2lsCisJCQkgKiBkbyBhIGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBh
cyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEg
VENCLi4gYWthIE5VTEwuCisJCQkgKi8KKwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNS
X1JFRihpbnApOworCQkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwg
YWRkciwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXQsIE5VTEws
IE5VTEwpOworCQkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlu
cCk7CisJCQl9CisJCX0KKworCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCAhPSBOVUxMKSkg
eworCQkJaWYgKG5ldCAhPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24pIHsKKwkJCQlp
ZiAoIShuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfVU5DT05GSVJNRUQpKSB7CisJCQkJCS8q
IE9rIHdlIG5lZWQgdG8gc2V0IGl0ICovCisJCQkJCWlmIChzY3RwX3NldF9wcmltYXJ5X2FkZHIo
c3RjYiwgKHN0cnVjdCBzb2NrYWRkciAqKU5VTEwsIG5ldCkgPT0gMCkgeworCQkJCQkJaWYgKChz
dGNiLT5hc29jLmFsdGVybmF0ZSkgJiYKKwkJCQkJCSAgICAoIShuZXQtPmRlc3Rfc3RhdGUgJiBT
Q1RQX0FERFJfUEYpKSAmJgorCQkJCQkJICAgIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJf
UkVBQ0hBQkxFKSkgeworCQkJCQkJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihzdGNiLT5hc29jLmFs
dGVybmF0ZSk7CisJCQkJCQkJc3RjYi0+YXNvYy5hbHRlcm5hdGUgPSBOVUxMOworCQkJCQkJfQor
CQkJCQl9IGVsc2UgeworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQkJfQorCQkJfQorCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0g
RUlOVkFMOworCQl9CisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1NFVF9EWU5BTUlDX1BSSU1BUlk6
CisJeworCQl1bmlvbiBzY3RwX3NvY2tzdG9yZSAqc3M7CisjaWZkZWYgU0NUUF9NVlJGCisJCWlu
dCBpLCBmbmQgPSAwOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pICYmICFkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCXN0cnVjdCBwcm9j
ICpwcm9jOworI2VuZGlmCisjaWZkZWYgX19GcmVlQlNEX18KKyNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+IDYwMjAwMAorCQllcnJvciA9IHByaXZfY2hlY2soY3VydGhyZWFkLAorCQkJCSAgIFBSSVZf
TkVUSU5FVF9SRVNFUlZFRFBPUlQpOworI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDAw
CisJCWVycm9yID0gc3VzZXIoKHN0cnVjdCB0aHJlYWQgKilwKTsKKyNlbHNlCisJCWVycm9yID0g
c3VzZXIocCk7CisjZW5kaWYKKyNlbGlmIGRlZmluZWQoX19BUFBMRV9fKQorCQlwcm9jID0gKHN0
cnVjdCBwcm9jICopcDsKKwkJaWYgKHApIHsKKwkJCWVycm9yID0gc3VzZXIocHJvYy0+cF91Y3Jl
ZCwgJnByb2MtPnBfYWNmbGFnKTsKKwkJfSBlbHNlIHsKKwkJCWJyZWFrOworCQl9CisjZWxzZQor
CQllcnJvciA9IHN1c2VyKHAsIDApOworI2VuZGlmCisJCWlmIChlcnJvcikKKwkJCWJyZWFrOwor
I2VuZGlmCisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChzcywgb3B0dmFsLCB1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSwgb3B0c2l6ZSk7CisJCS8qIFNVUEVSIFVTRVIgQ0hFQ0s/ICovCisjaWZkZWYgU0NU
UF9NVlJGCisJCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJCWlmICh2
cmZfaWQgPT0gaW5wLT5tX3ZyZl9pZHNbaV0pIHsKKwkJCQlmbmQgPSAxOworCQkJCWJyZWFrOwor
CQkJfQorCQl9CisJCWlmICghZm5kKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVM
TCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCWVycm9yID0gc2N0cF9keW5hbWljX3NldF9w
cmltYXJ5KCZzcy0+c2EsIHZyZl9pZCk7CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfU0VUX1BF
RVJfUFJJTUFSWV9BRERSOgorCXsKKwkJc3RydWN0IHNjdHBfc2V0cGVlcnByaW0gKnNzcHA7CisJ
CXN0cnVjdCBzb2NrYWRkciAqYWRkcjsKKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5F
VDYpCisJCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fc3RvcmU7CisjZW5kaWYKKworCQlTQ1RQX0NI
RUNLX0FORF9DQVNUKHNzcHAsIG9wdHZhbCwgc3RydWN0IHNjdHBfc2V0cGVlcnByaW0sIG9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIHNzcHAtPnNzcHBfYXNzb2NfaWQpOwor
CQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQlzdHJ1Y3Qgc2N0cF9pZmEgKmlmYTsKKworI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJCWlmIChzc3BwLT5zc3BwX2FkZHIuc3Nf
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwor
CQkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZzc3BwLT5zc3BwX2FkZHI7CisJCQkJ
aWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQkJCWluNl9z
aW42XzJfc2luKCZzaW5fc3RvcmUsIHNpbjYpOworCQkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSZzaW5fc3RvcmU7CisJCQkJfSBlbHNlIHsKKwkJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikmc3NwcC0+c3NwcF9hZGRyOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJYWRkciA9IChz
dHJ1Y3Qgc29ja2FkZHIgKikmc3NwcC0+c3NwcF9hZGRyOworCQkJfQorI2Vsc2UKKwkJCWFkZHIg
PSAoc3RydWN0IHNvY2thZGRyICopJnNzcHAtPnNzcHBfYWRkcjsKKyNlbmRpZgorCQkJaWZhID0g
c2N0cF9maW5kX2lmYV9ieV9hZGRyKGFkZHIsIHN0Y2ItPmFzb2MudnJmX2lkLCBTQ1RQX0FERFJf
Tk9UX0xPQ0tFRCk7CisJCQlpZiAoaWZhID09IE5VTEwpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJCWdvdG8gb3V0X29mX2l0OworCQkJfQorCQkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkgeworCQkJCS8qIE11
c3QgdmFsaWRhdGUgdGhlIGlmYSBmb3VuZCBpcyBpbiBvdXIgZXAgKi8KKwkJCQlzdHJ1Y3Qgc2N0
cF9sYWRkciAqbGFkZHI7CisJCQkJaW50IGZvdW5kID0gMDsKKworCQkJCUxJU1RfRk9SRUFDSChs
YWRkciwgJmlucC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQkJaWYgKGxh
ZGRyLT5pZmEgPT0gTlVMTCkgeworCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX09VVFBVVDEsICIl
czogTlVMTCBpZmFcbiIsCisJCQkJCQkJX19mdW5jX18pOworCQkJCQkJY29udGludWU7CisJCQkJ
CX0KKwkJCQkJaWYgKChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNiLCBsYWRkci0+aWZhKSkg
JiYKKwkJCQkJICAgICghc2N0cF9pc19hZGRyX3BlbmRpbmcoc3RjYiwgbGFkZHItPmlmYSkpKSB7
CisJCQkJCQljb250aW51ZTsKKwkJCQkJfQorCQkJCQlpZiAobGFkZHItPmlmYSA9PSBpZmEpIHsK
KwkJCQkJCWZvdW5kID0gMTsKKwkJCQkJCWJyZWFrOworCQkJCQl9CisJCQkJfQorCQkJCWlmICgh
Zm91bmQpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJCWdv
dG8gb3V0X29mX2l0OworCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJfSBlbHNl
IHsKKwkJCQlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJCQljYXNl
IEFGX0lORVQ6CisJCQkJeworCQkJCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbjsKKworCQkJCQlz
aW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopYWRkcjsKKwkJCQkJaWYgKHByaXNvbl9jaGVja19p
cDQoaW5wLT5pcF9pbnAuaW5wLmlucF9jcmVkLAorCQkJCQkgICAgICAgICAgICAgICAgICAgICAm
c2luLT5zaW5fYWRkcikgIT0gMCkgeworCQkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJCWVycm9yID0g
RUlOVkFMOworCQkJCQkJZ290byBvdXRfb2ZfaXQ7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJ
fQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJCQljYXNlIEFGX0lORVQ2OgorCQkJCXsKKwkJCQkJ
c3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKilhZGRyOworCQkJCQlpZiAocHJpc29uX2NoZWNrX2lwNihpbnAtPmlwX2lucC5pbnAu
aW5wX2NyZWQsCisJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9
IDApIHsKKwkJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJCWdv
dG8gb3V0X29mX2l0OworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKyNlbmRpZgorCQkJCWRl
ZmF1bHQ6CisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOworCQkJCQlnb3Rv
IG91dF9vZl9pdDsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJCWlmIChzY3RwX3NldF9wcmltYXJ5
X2lwX2FkZHJlc3Nfc2Eoc3RjYiwgYWRkcikgIT0gMCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJ
ZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsICBT
Q1RQX09VVFBVVF9GUk9NX1NPQ0tPUFQsIFNDVFBfU09fTE9DS0VEKTsKKwkJb3V0X29mX2l0Ogor
CQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJU0NUUF9MVFJBQ0VfRVJS
X1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJ
CWVycm9yID0gRUlOVkFMOworCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQklORFhfQURE
X0FERFI6CisJeworCQlzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKmFkZHJzOworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCQlzdHJ1Y3Qg
dGhyZWFkICp0ZDsKKworCQl0ZCA9IChzdHJ1Y3QgdGhyZWFkICopcDsKKyNlbmRpZgorCQlTQ1RQ
X0NIRUNLX0FORF9DQVNUKGFkZHJzLCBvcHR2YWwsIHN0cnVjdCBzY3RwX2dldGFkZHJlc3NlcywK
KwkJCQkgICAgb3B0c2l6ZSk7CisjaWZkZWYgSU5FVAorCQlpZiAoYWRkcnMtPmFkZHItPnNhX2Zh
bWlseSA9PSBBRl9JTkVUKSB7CisJCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9n
ZXRhZGRyZXNzZXMpIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQkJ
YnJlYWs7CisJCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNp
b24gPj0gODAwMDAwCisJCQlpZiAodGQgIT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxf
aXA0KHRkLT50ZF91Y3JlZCwgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShhZGRycy0+YWRkcikp
LT5zaW5fYWRkcikpKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRp
ZgorCQl9IGVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChhZGRycy0+YWRkci0+c2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0
cF9nZXRhZGRyZXNzZXMpIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJCWJyZWFrOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDgwMDAwMAorCQkJaWYgKHRkICE9IE5VTEwgJiYgKGVycm9yID0gcHJpc29uX2xv
Y2FsX2lwNih0ZC0+dGRfdWNyZWQsICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGFkZHJzLT5h
ZGRyKSktPnNpbjZfYWRkciksCisJCQkJCQkJCQkJCSAgIChTQ1RQX0lQVjZfVjZPTkxZKGlucCkg
IT0gMCkpKSAhPSAwKSB7CisJCQkgIFNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCSAgYnJlYWs7CisJCQl9CisjZW5k
aWYKKwkJfSBlbHNlCisjZW5kaWYKKwkJeworCQkgICAgICAgZXJyb3IgPSBFQUZOT1NVUFBPUlQ7
CisJCSAgICAgICBicmVhazsKKwkJfQorCQlzY3RwX2JpbmR4X2FkZF9hZGRyZXNzKHNvLCBpbnAs
IGFkZHJzLT5hZGRyLAorCQkJCSAgICAgICBhZGRycy0+c2dldF9hc3NvY19pZCwgdnJmX2lkLAor
CQkJCSAgICAgICAmZXJyb3IsIHApOworCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX0JJTkRYX1JF
TV9BRERSOgorCXsKKwkJc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzICphZGRyczsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKwkJc3RydWN0
IHRocmVhZCAqdGQ7CisJCXRkID0gKHN0cnVjdCB0aHJlYWQgKilwOworCisjZW5kaWYKKwkJU0NU
UF9DSEVDS19BTkRfQ0FTVChhZGRycywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMs
IG9wdHNpemUpOworI2lmZGVmIElORVQKKwkJaWYgKGFkZHJzLT5hZGRyLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgeworCQkJaWYgKG9wdHNpemUgPCBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVz
c2VzKSAtIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFrOwor
CQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgw
MDAwMAorCQlpZiAodGQgIT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fbG9jYWxfaXA0KHRkLT50
ZF91Y3JlZCwgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShhZGRycy0+YWRkcikpLT5zaW5fYWRk
cikpKSkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9IGVs
c2UKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWlmIChhZGRycy0+YWRkci0+c2FfZmFtaWx5ID09
IEFGX0lORVQ2KSB7CisJCQlpZiAob3B0c2l6ZSA8IHNpemVvZihzdHJ1Y3Qgc2N0cF9nZXRhZGRy
ZXNzZXMpIC0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJCWJyZWFr
OworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49
IDgwMDAwMAorCQkJaWYgKHRkICE9IE5VTEwgJiYKKwkJCSAgICAoZXJyb3IgPSBwcmlzb25fbG9j
YWxfaXA2KHRkLT50ZF91Y3JlZCwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYo
KChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGFkZHJzLT5hZGRyKSktPnNpbjZfYWRkciksCisJCQkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9JUFY2X1Y2T05MWShpbnApICE9IDAp
KSkgIT0gMCkgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBzdGNiLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbmRpZgorCQl9
IGVsc2UKKyNlbmRpZgorCQl7CisJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJCWJyZWFrOwor
CQl9CisJCXNjdHBfYmluZHhfZGVsZXRlX2FkZHJlc3MoaW5wLCBhZGRycy0+YWRkciwKKwkJCQkJ
ICBhZGRycy0+c2dldF9hc3NvY19pZCwgdnJmX2lkLAorCQkJCQkgICZlcnJvcik7CisJCWJyZWFr
OworCX0KKyNpZmRlZiBfX0FQUExFX18KKwljYXNlIFNDVFBfTElTVEVOX0ZJWDoKKwkJLyogb25s
eSBhcHBsaWVzIHRvIG9uZS10by1tYW55IHNvY2tldHMgKi8KKwkJaWYgKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpIHsKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgQUNDRVBU
Q09OTiBmbGFnIGlzIE9GRiAqLworCQkJc28tPnNvX29wdGlvbnMgJj0gflNPX0FDQ0VQVENPTk47
CisJCX0gZWxzZSB7CisJCQkvKiBvdGhlcndpc2UsIG5vdCBhbGxvd2VkICovCisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYJCQkJLyogX19B
UFBMRV9fICovCisJY2FzZSBTQ1RQX0VWRU5UOgorCXsKKwkJc3RydWN0IHNjdHBfZXZlbnQgKmV2
ZW50OworCQl1aW50MzJfdCBldmVudF90eXBlOworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZXZl
bnQsIG9wdHZhbCwgc3RydWN0IHNjdHBfZXZlbnQsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RD
QihpbnAsIHN0Y2IsIGV2ZW50LT5zZV9hc3NvY19pZCk7CisJCXN3aXRjaCAoZXZlbnQtPnNlX3R5
cGUpIHsKKwkJY2FzZSBTQ1RQX0FTU09DX0NIQU5HRToKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BD
Ql9GTEFHU19SRUNWQVNTT0NFVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QRUVSX0FERFJf
Q0hBTkdFOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1JFQ1ZQQUREUkVWTlQ7CisJ
CQlicmVhazsKKwkJY2FzZSBTQ1RQX1JFTU9URV9FUlJPUjoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQ
X1BDQl9GTEFHU19SRUNWUEVFUkVSUjsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU0VORF9GQUlM
RUQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZOVDsKKwkJ
CWJyZWFrOworCQljYXNlIFNDVFBfU0hVVERPV05fRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NU
UF9QQ0JfRkxBR1NfUkVDVlNIVVRET1dORVZOVDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfQURB
UFRBVElPTl9JTkRJQ0FUSU9OOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX0FEQVBU
QVRJT05FVk5UOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5U
OgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVDsKKwkJCWJyZWFrOwor
CQljYXNlIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9Q
Q0JfRkxBR1NfQVVUSEVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUUkVBTV9SRVNFVF9F
VkVOVDoKKwkJCWV2ZW50X3R5cGUgPSBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fUkVTRVRFVk5UOwor
CQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TRU5ERVJfRFJZX0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9
IFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX05PVElGSUNB
VElPTlNfU1RPUFBFRF9FVkVOVDoKKwkJCWV2ZW50X3R5cGUgPSAwOworCQkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PVFNVUCk7
CisJCQllcnJvciA9IEVOT1RTVVA7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX0FTU09DX1JFU0VU
X0VWRU5UOgorCQkJZXZlbnRfdHlwZSA9IFNDVFBfUENCX0ZMQUdTX0FTU09DX1JFU0VURVZOVDsK
KwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDoKKwkJCWV2ZW50X3R5
cGUgPSBTQ1RQX1BDQl9GTEFHU19TVFJFQU1fQ0hBTkdFRVZOVDsKKwkJCWJyZWFrOworCQljYXNl
IFNDVFBfU0VORF9GQUlMRURfRVZFTlQ6CisJCQlldmVudF90eXBlID0gU0NUUF9QQ0JfRkxBR1Nf
UkVDVk5TRU5ERkFJTEVWTlQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWV2ZW50X3R5cGUg
PSAwOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJYnJlYWs7CisJCX0K
KwkJaWYgKGV2ZW50X3R5cGUgPiAwKSB7CisJCQlpZiAoc3RjYikgeworCQkJCWlmIChldmVudC0+
c2Vfb24pIHsKKwkJCQkJc2N0cF9zdGNiX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBldmVudF90eXBl
KTsKKwkJCQkJaWYgKGV2ZW50X3R5cGUgPT0gU0NUUF9QQ0JfRkxBR1NfRFJZRVZOVCkgeworCQkJ
CQkJaWYgKFRBSUxRX0VNUFRZKCZzdGNiLT5hc29jLnNlbmRfcXVldWUpICYmCisJCQkJCQkgICAg
VEFJTFFfRU1QVFkoJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSkgJiYKKwkJCQkJCSAgICAoc3RjYi0+
YXNvYy5zdHJlYW1fcXVldWVfY250ID09IDApKSB7CisJCQkJCQkJc2N0cF91bHBfbm90aWZ5KFND
VFBfTk9USUZZX1NFTkRFUl9EUlksIHN0Y2IsICAwLCBOVUxMLCBTQ1RQX1NPX0xPQ0tFRCk7CisJ
CQkJCQl9CisJCQkJCX0KKwkJCQl9IGVsc2UgeworCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYo
aW5wLCBzdGNiLCBldmVudF90eXBlKTsKKwkJCQl9CisJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJfSBlbHNlIHsKKwkJCQkvKgorCQkJCSAqIFdlIGRvbid0IHdhbnQgdG8gc2VuZCB1cCBh
IHN0b3JtIG9mIGV2ZW50cywKKwkJCQkgKiBzbyByZXR1cm4gYW4gZXJyb3IgZm9yIHNlbmRlciBk
cnkgZXZlbnRzCisJCQkJICovCisJCQkJaWYgKChldmVudF90eXBlID09IFNDVFBfUENCX0ZMQUdT
X0RSWUVWTlQpICYmCisJCQkJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgPT0gMCkgJiYKKwkJCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSA9PSAwKSAmJgorCQkJCSAgICAoKGV2ZW50LT5zZV9hc3NvY19pZCA9
PSBTQ1RQX0FMTF9BU1NPQykgfHwKKwkJCQkgICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NU
UF9DVVJSRU5UX0FTU09DKSkpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRU5PVFNVUCk7CisJCQkJCWVycm9yID0gRU5P
VFNVUDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkJICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0g
U0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkJICAgIChldmVudC0+c2VfYXNzb2NfaWQgPT0gU0NU
UF9BTExfQVNTT0MpKSB7CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChldmVu
dC0+c2Vfb24pIHsKKwkJCQkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIGV2ZW50X3R5cGUpOworCQkJ
CQl9IGVsc2UgeworCQkJCQkJc2N0cF9mZWF0dXJlX29mZihpbnAsIGV2ZW50X3R5cGUpOworCQkJ
CQl9CisJCQkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJaWYgKChldmVudC0+
c2VfYXNzb2NfaWQgPT0gU0NUUF9DVVJSRU5UX0FTU09DKSB8fAorCQkJCSAgICAoZXZlbnQtPnNl
X2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCQkJCQlMSVNUX0ZPUkVBQ0goc3RjYiwgJmlucC0+c2N0cF9hc29jX2xpc3QsIHNjdHBfdGNi
bGlzdCkgeworCQkJCQkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJCWlmIChldmVudC0+c2Vf
b24pIHsKKwkJCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vbihpbnAsIHN0Y2IsIGV2ZW50X3R5cGUp
OworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlzY3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNi
LCBldmVudF90eXBlKTsKKwkJCQkJCX0KKwkJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJ
CQkJfQorCQkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQkJfQorCQkJfQorCQl9CisJCWJy
ZWFrOworCX0KKwljYXNlIFNDVFBfUkVDVlJDVklORk86CisJeworCQlpbnQgKm9ub2ZmOworCisJ
CVNDVFBfQ0hFQ0tfQU5EX0NBU1Qob25vZmYsIG9wdHZhbCwgaW50LCBvcHRzaXplKTsKKwkJU0NU
UF9JTlBfV0xPQ0soaW5wKTsKKwkJaWYgKCpvbm9mZiAhPSAwKSB7CisJCQlzY3RwX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTyk7CisJCX0gZWxzZSB7CisJCQlzY3Rw
X2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVlJDVklORk8pOworCQl9CisJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRUNWTlhUSU5G
TzoKKwl7CisJCWludCAqb25vZmY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FTVChvbm9mZiwgb3B0
dmFsLCBpbnQsIG9wdHNpemUpOworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlpZiAoKm9ub2Zm
ICE9IDApIHsKKwkJCXNjdHBfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJ
TkZPKTsKKwkJfSBlbHNlIHsKKwkJCXNjdHBfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFH
U19SRUNWTlhUSU5GTyk7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQlicmVhazsK
Kwl9CisJY2FzZSBTQ1RQX0RFRkFVTFRfU05ESU5GTzoKKwl7CisJCXN0cnVjdCBzY3RwX3NuZGlu
Zm8gKmluZm87CisJCXVpbnQxNl90IHBvbGljeTsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGlu
Zm8sIG9wdHZhbCwgc3RydWN0IHNjdHBfc25kaW5mbywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9T
VENCKGlucCwgc3RjYiwgaW5mby0+c25kX2Fzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJ
aWYgKGluZm8tPnNuZF9zaWQgPCBzdGNiLT5hc29jLnN0cmVhbW91dGNudCkgeworCQkJCXN0Y2It
PmFzb2MuZGVmX3NlbmQuc2luZm9fc3RyZWFtID0gaW5mby0+c25kX3NpZDsKKwkJCQlwb2xpY3kg
PSBQUl9TQ1RQX1BPTElDWShzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlz
dGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2ZsYWdzID0gaW5mby0+c25kX2ZsYWdzOworCQkJCXN0
Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gcG9saWN5OworCQkJCXN0Y2ItPmFzb2Mu
ZGVmX3NlbmQuc2luZm9fcHBpZCA9IGluZm8tPnNuZF9wcGlkOworCQkJCXN0Y2ItPmFzb2MuZGVm
X3NlbmQuc2luZm9fY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0OworCQkJfSBlbHNlIHsKKwkJ
CQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNS
UkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChpbmZvLT5zbmRfYXNzb2NfaWQgPT0gU0NUUF9G
VVRVUkVfQVNTT0MpIHx8CisJCQkgICAgKGluZm8tPnNuZF9hc3NvY19pZCA9PSBTQ1RQX0FMTF9B
U1NPQykpIHsKKwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+ZGVmX3NlbmQuc2lu
Zm9fc3RyZWFtID0gaW5mby0+c25kX3NpZDsKKwkJCQlwb2xpY3kgPSBQUl9TQ1RQX1BPTElDWShp
bnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdzKTsKKwkJCQlpbnAtPmRlZl9zZW5kLnNpbmZvX2ZsYWdz
ID0gaW5mby0+c25kX2ZsYWdzOworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gcG9s
aWN5OworCQkJCWlucC0+ZGVmX3NlbmQuc2luZm9fcHBpZCA9IGluZm8tPnNuZF9wcGlkOworCQkJ
CWlucC0+ZGVmX3NlbmQuc2luZm9fY29udGV4dCA9IGluZm8tPnNuZF9jb250ZXh0OworCQkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCX0KKwkJCWlmICgoaW5mby0+c25kX2Fzc29jX2lkID09
IFNDVFBfQ1VSUkVOVF9BU1NPQykgfHwKKwkJCSAgICAoaW5mby0+c25kX2Fzc29jX2lkID09IFND
VFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JF
QUNIKHN0Y2IsICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQkJaWYgKGluZm8tPnNuZF9zaWQgPCBzdGNiLT5hc29jLnN0
cmVhbW91dGNudCkgeworCQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19zdHJlYW0gPSBp
bmZvLT5zbmRfc2lkOworCQkJCQkJcG9saWN5ID0gUFJfU0NUUF9QT0xJQ1koc3RjYi0+YXNvYy5k
ZWZfc2VuZC5zaW5mb19mbGFncyk7CisJCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX2Zs
YWdzID0gaW5mby0+c25kX2ZsYWdzOworCQkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19m
bGFncyB8PSBwb2xpY3k7CisJCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX3BwaWQgPSBp
bmZvLT5zbmRfcHBpZDsKKwkJCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fY29udGV4dCA9
IGluZm8tPnNuZF9jb250ZXh0OworCQkJCQl9CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJCQl9CisJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJfQorCQl9CisJCWJyZWFrOwor
CX0KKwljYXNlIFNDVFBfREVGQVVMVF9QUklORk86CisJeworCQlzdHJ1Y3Qgc2N0cF9kZWZhdWx0
X3ByaW5mbyAqaW5mbzsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNUKGluZm8sIG9wdHZhbCwgc3Ry
dWN0IHNjdHBfZGVmYXVsdF9wcmluZm8sIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAs
IHN0Y2IsIGluZm8tPnByX2Fzc29jX2lkKTsKKworCQlpZiAoaW5mby0+cHJfcG9saWN5ID4gU0NU
UF9QUl9TQ1RQX01BWCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9f
ZmxhZ3MgJj0gMHhmZmYwOworCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBp
bmZvLT5wcl9wb2xpY3k7CisJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUg
PSBpbmZvLT5wcl92YWx1ZTsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsK
KwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJ
CSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJ
CSAgICAoaW5mby0+cHJfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpIHx8CisJCQkgICAg
KGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQUxMX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dM
T0NLKGlucCk7CisJCQkJaW5wLT5kZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7CisJCQkJ
aW5wLT5kZWZfc2VuZC5zaW5mb19mbGFncyB8PSBpbmZvLT5wcl9wb2xpY3k7CisJCQkJaW5wLT5k
ZWZfc2VuZC5zaW5mb190aW1ldG9saXZlID0gaW5mby0+cHJfdmFsdWU7CisJCQkJU0NUUF9JTlBf
V1VOTE9DSyhpbnApOworCQkJfQorCQkJaWYgKChpbmZvLT5wcl9hc3NvY19pZCA9PSBTQ1RQX0NV
UlJFTlRfQVNTT0MpIHx8CisJCQkgICAgKGluZm8tPnByX2Fzc29jX2lkID09IFNDVFBfQUxMX0FT
U09DKSkgeworCQkJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCQkJTElTVF9GT1JFQUNIKHN0Y2Is
ICZpbnAtPnNjdHBfYXNvY19saXN0LCBzY3RwX3RjYmxpc3QpIHsKKwkJCQkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwkJCQkJc3RjYi0+YXNvYy5kZWZfc2VuZC5zaW5mb19mbGFncyAmPSAweGZmZjA7
CisJCQkJCXN0Y2ItPmFzb2MuZGVmX3NlbmQuc2luZm9fZmxhZ3MgfD0gaW5mby0+cHJfcG9saWN5
OworCQkJCQlzdGNiLT5hc29jLmRlZl9zZW5kLnNpbmZvX3RpbWV0b2xpdmUgPSBpbmZvLT5wcl92
YWx1ZTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9S
VU5MT0NLKGlucCk7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9QRUVSX0FE
RFJfVEhMRFM6CisJCS8qIEFwcGxpZXMgdG8gdGhlIHNwZWNpZmljIGFzc29jaWF0aW9uICovCisJ
eworCQlzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRzICp0aGxkczsKKwkJc3RydWN0IHNjdHBfbmV0cyAq
bmV0OworCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZp
bmVkKElORVQ2KQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luX3N0b3JlOworI2VuZGlmCisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVCh0aGxkcywgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9wYWRkcnRobGRz
LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCB0aGxkcy0+c3B0X2Fzc29j
X2lkKTsKKworI2lmIGRlZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwkJaWYgKHRobGRz
LT5zcHRfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZ0aGxkcy0+
c3B0X2FkZHJlc3M7CisJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJnNpbjYtPnNpbjZfYWRk
cikpIHsKKwkJCQlpbjZfc2luNl8yX3Npbigmc2luX3N0b3JlLCBzaW42KTsKKwkJCQlhZGRyID0g
KHN0cnVjdCBzb2NrYWRkciAqKSZzaW5fc3RvcmU7CisJCQl9IGVsc2UgeworCQkJCWFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJCX0KKwkJfSBlbHNlIHsK
KwkJCWFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopJnRobGRzLT5zcHRfYWRkcmVzczsKKwkJfQor
I2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmdGhsZHMtPnNwdF9hZGRyZXNzOwor
I2VuZGlmCisJCWlmIChzdGNiICE9IE5VTEwpIHsKKwkJCW5ldCA9IHNjdHBfZmluZG5ldChzdGNi
LCBhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBf
ZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWwKKwkJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0
IGZpbmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkJICogdGNiIChsYXN0IGFy
Z3VtZW50KSBpcyBOT1QgYSBUQ0IuLiBha2EgTlVMTC4KKwkJCSAqLworCQkJbmV0ID0gTlVMTDsK
KwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCQlzdGNiID0gc2N0cF9maW5kYXNzb2NpYXRp
b25fZXBfYWRkcigmaW5wLCBhZGRyLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJm5ldCwgTlVMTCwgTlVMTCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJU0NU
UF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCX0KKwkJfQorCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYg
KG5ldCA9PSBOVUxMKSkgeworI2lmZGVmIElORVQKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0g
QUZfSU5FVCkgeworCisJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisJCQkJc2luID0gKHN0
cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyICE9
IElOQUREUl9BTlkpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNl
CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU
NikgeworCQkJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilhZGRyOworCQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQo
JnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJ
fSBlbHNlCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoYWRkci0+
c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47
CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQkJaWYgKHNj
b25uLT5zY29ubl9hZGRyICE9IE5VTEwpIHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJ
fQorCQkJfSBlbHNlCisjZW5kaWYKKwkJCXsKKwkJCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJ
CQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisJCWlmICh0aGxkcy0+c3B0X3BhdGhjcHRobGQgIT0gMHhmZmZmKSB7CisJCQllcnJv
ciA9IEVJTlZBTDsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChzdGNiICE9
IE5VTEwpIHsKKwkJCWlmIChuZXQgIT0gTlVMTCkgeworCQkJCW5ldC0+ZmFpbHVyZV90aHJlc2hv
bGQgPSB0aGxkcy0+c3B0X3BhdGhtYXhyeHQ7CisJCQkJbmV0LT5wZl90aHJlc2hvbGQgPSB0aGxk
cy0+c3B0X3BhdGhwZnRobGQ7CisJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9Q
RikgeworCQkJCQlpZiAoKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPmZhaWx1cmVfdGhyZXNob2xk
KSB8fAorCQkJCQkgICAgKG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5wZl90aHJlc2hvbGQpKSB7
CisJCQkJCQluZXQtPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQkJfQorCQkJCX0g
ZWxzZSB7CisJCQkJCWlmICgobmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+cGZfdGhyZXNob2xkKSAm
JgorCQkJCQkgICAgKG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkp
IHsKKwkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJCQlzY3RwX3Nl
bmRfaGIoc3RjYiwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX0hFQVJUQkVBVCwKKwkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5z
Y3RwX2VwLCBzdGNiLCBuZXQsCisJCQkJCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRICsgU0NUUF9MT0NfMTcpOworCQkJCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFULCBzdGNiLT5zY3RwX2VwLCBzdGNiLCBuZXQpOworCQkJCQl9CisJCQkJ
fQorCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUkVBQ0hBQkxFKSB7CisJCQkJ
CWlmIChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJ
bmV0LT5kZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJc2N0cF91bHBf
bm90aWZ5KFNDVFBfTk9USUZZX0lOVEVSRkFDRV9ET1dOLCBzdGNiLCAwLCBuZXQsIFNDVFBfU09f
TE9DS0VEKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChuZXQtPmVycm9yX2NvdW50
IDw9IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpIHsKKwkJCQkJCW5ldC0+ZGVzdF9zdGF0ZSB8PSBT
Q1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX0lO
VEVSRkFDRV9VUCwgc3RjYiwgMCwgbmV0LCBTQ1RQX1NPX0xPQ0tFRCk7CisJCQkJCX0KKwkJCQl9
CisJCQl9IGVsc2UgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBz
Y3RwX25leHQpIHsKKwkJCQkJbmV0LT5mYWlsdXJlX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0
aG1heHJ4dDsKKwkJCQkJbmV0LT5wZl90aHJlc2hvbGQgPSB0aGxkcy0+c3B0X3BhdGhwZnRobGQ7
CisJCQkJCWlmIChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfUEYpIHsKKwkJCQkJCWlmICgo
bmV0LT5lcnJvcl9jb3VudCA+IG5ldC0+ZmFpbHVyZV90aHJlc2hvbGQpIHx8CisJCQkJCQkgICAg
KG5ldC0+ZXJyb3JfY291bnQgPD0gbmV0LT5wZl90aHJlc2hvbGQpKSB7CisJCQkJCQkJbmV0LT5k
ZXN0X3N0YXRlICY9IH5TQ1RQX0FERFJfUEY7CisJCQkJCQl9CisJCQkJCX0gZWxzZSB7CisJCQkJ
CQlpZiAoKG5ldC0+ZXJyb3JfY291bnQgPiBuZXQtPnBmX3RocmVzaG9sZCkgJiYKKwkJCQkJCSAg
ICAobmV0LT5lcnJvcl9jb3VudCA8PSBuZXQtPmZhaWx1cmVfdGhyZXNob2xkKSkgeworCQkJCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSB8PSBTQ1RQX0FERFJfUEY7CisJCQkJCQkJc2N0cF9zZW5kX2hiKHN0
Y2IsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJ
TUVSX1RZUEVfSEVBUlRCRUFULAorCQkJCQkJCSAgICAgICAgICAgICAgICBzdGNiLT5zY3RwX2Vw
LCBzdGNiLCBuZXQsCisJCQkJCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USArIFNDVFBfTE9DXzE4KTsKKwkJCQkJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQ
RV9IRUFSVEJFQVQsIHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIG5ldCk7CisJCQkJCQl9CisJCQkJCX0K
KwkJCQkJaWYgKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9SRUFDSEFCTEUpIHsKKwkJCQkJ
CWlmIChuZXQtPmVycm9yX2NvdW50ID4gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQkJCQlzY3RwX3Vs
cF9ub3RpZnkoU0NUUF9OT1RJRllfSU5URVJGQUNFX0RPV04sIHN0Y2IsIDAsIG5ldCwgU0NUUF9T
T19MT0NLRUQpOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKG5ldC0+ZXJyb3Jf
Y291bnQgPD0gbmV0LT5mYWlsdXJlX3RocmVzaG9sZCkgeworCQkJCQkJCW5ldC0+ZGVzdF9zdGF0
ZSB8PSBTQ1RQX0FERFJfUkVBQ0hBQkxFOworCQkJCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9JTlRFUkZBQ0VfVVAsIHN0Y2IsIDAsIG5ldCwgU0NUUF9TT19MT0NLRUQpOworCQkJCQkJ
fQorCQkJCQl9CisJCQkJfQorCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9mYWlsdXJlID0gdGhsZHMt
PnNwdF9wYXRobWF4cnh0OworCQkJCXN0Y2ItPmFzb2MuZGVmX25ldF9wZl90aHJlc2hvbGQgPSB0
aGxkcy0+c3B0X3BhdGhwZnRobGQ7CisJCQl9CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBP
T0wpIHx8CisJCQkgICAgKHRobGRzLT5zcHRfYXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0Mp
KSB7CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpbnAtPnNjdHBfZXAuZGVmX25ldF9m
YWlsdXJlID0gdGhsZHMtPnNwdF9wYXRobWF4cnh0OworCQkJCWlucC0+c2N0cF9lcC5kZWZfbmV0
X3BmX3RocmVzaG9sZCA9IHRobGRzLT5zcHRfcGF0aHBmdGhsZDsKKwkJCQlTQ1RQX0lOUF9XVU5M
T0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5W
QUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9SRU1PVEVfVURQX0VOQ0FQ
U19QT1JUOgorCXsKKwkJc3RydWN0IHNjdHBfdWRwZW5jYXBzICplbmNhcHM7CisJCXN0cnVjdCBz
Y3RwX25ldHMgKm5ldDsKKwkJc3RydWN0IHNvY2thZGRyICphZGRyOworI2lmIGRlZmluZWQoSU5F
VCkgJiYgZGVmaW5lZChJTkVUNikKKwkJc3RydWN0IHNvY2thZGRyX2luIHNpbl9zdG9yZTsKKyNl
bmRpZgorCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoZW5jYXBzLCBvcHR2YWwsIHN0cnVjdCBzY3Rw
X3VkcGVuY2Fwcywgb3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgZW5jYXBz
LT5zdWVfYXNzb2NfaWQpOworCisjaWYgZGVmaW5lZChJTkVUKSAmJiBkZWZpbmVkKElORVQ2KQor
CQlpZiAoZW5jYXBzLT5zdWVfYWRkcmVzcy5zc19mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCXN0
cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZz
aW42LT5zaW42X2FkZHIpKSB7CisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbl9zdG9yZSwgc2luNik7
CisJCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmc2luX3N0b3JlOworCQkJfSBlbHNlIHsK
KwkJCQlhZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKSZlbmNhcHMtPnN1ZV9hZGRyZXNzOworCQkJ
fQorCQl9IGVsc2UgeworCQkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBzLT5zdWVf
YWRkcmVzczsKKwkJfQorI2Vsc2UKKwkJYWRkciA9IChzdHJ1Y3Qgc29ja2FkZHIgKikmZW5jYXBz
LT5zdWVfYWRkcmVzczsKKyNlbmRpZgorCQlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCQluZXQgPSBz
Y3RwX2ZpbmRuZXQoc3RjYiwgYWRkcik7CisJCX0gZWxzZSB7CisJCQkvKiBXZSBpbmNyZW1lbnQg
aGVyZSBzaW5jZSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCkgd2lsCisJCQkgKiBkbyBh
IGRlY3JlbWVudCBpZiBpdCBmaW5kcyB0aGUgc3RjYiBhcyBsb25nIGFzIHRoZSBsb2NrZWQKKwkJ
CSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJCQkgKi8K
KwkJCW5ldCA9IE5VTEw7CisJCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQkJc3RjYiA9IHNj
dHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwgJm5ldCwgTlVMTCwgTlVMTCk7
CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJ
CX0KKwkJfQorCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYgKG5ldCA9PSBOVUxMKSkgeworI2lmZGVm
IElORVQKKwkJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCisJCQkJc3RydWN0
IHNvY2thZGRyX2luICpzaW47CisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7
CisJCQkJaWYgKHNpbi0+c2luX2FkZHIuc19hZGRyICE9IElOQUREUl9BTlkpIHsKKwkJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9IEVJTlZB
TDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZmRlZiBJTkVUNgor
CQkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJCXN0cnVjdCBzb2NrYWRk
cl9pbjYgKnNpbjY7CisKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyOwor
CQkJCWlmICghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJ
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQllcnJvciA9
IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKyNpZiBkZWZp
bmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsK
KwkJCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJCQlzY29ubiA9IChzdHJ1Y3Qg
c29ja2FkZHJfY29ubiAqKWFkZHI7CisJCQkJaWYgKHNjb25uLT5zY29ubl9hZGRyICE9IE5VTEwp
IHsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQll
cnJvciA9IEVJTlZBTDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlCisjZW5kaWYKKwkJ
CXsKKwkJCQkJZXJyb3IgPSBFQUZOT1NVUFBPUlQ7CisJCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgZXJyb3IpOworCQkJCQlicmVhazsKKwkJCQl9CisJCX0KKworCQlpZiAoc3Rj
YiAhPSBOVUxMKSB7CisJCQlpZiAobmV0ICE9IE5VTEwpIHsKKwkJCQluZXQtPnBvcnQgPSBlbmNh
cHMtPnN1ZV9wb3J0OworCQkJfSBlbHNlIHsKKwkJCQlzdGNiLT5hc29jLnBvcnQgPSBlbmNhcHMt
PnN1ZV9wb3J0OworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ugewor
CQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCQkJ
ICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSB8fAorCQkJ
ICAgIChlbmNhcHMtPnN1ZV9hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlT
Q1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlucC0+c2N0cF9lcC5wb3J0ID0gZW5jYXBzLT5zdWVf
cG9ydDsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJ
TlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNh
c2UgU0NUUF9FQ05fU1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2
OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUsIG9wdHNpemUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19p
ZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsK
KwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lk
ID09IFNDVFBfRlVUVVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJ
aWYgKGF2LT5hc3NvY192YWx1ZSA9PSAwKSB7CisJCQkJCWlucC0+ZWNuX3N1cHBvcnRlZCA9IDA7
CisJCQkJfSBlbHNlIHsKKwkJCQkJaW5wLT5lY25fc3VwcG9ydGVkID0gMTsKKwkJCQl9CisJCQkJ
U0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJ
CWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUFJf
U1VQUE9SVEVEOgorCXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBf
Q0hFQ0tfQU5EX0NBU1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNp
emUpOworCQlTQ1RQX0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYg
KHN0Y2IpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKGF2LT5hc3Nv
Y192YWx1ZSA9PSAwKSB7CisJCQkJCWlucC0+cHJzY3RwX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBl
bHNlIHsKKwkJCQkJaW5wLT5wcnNjdHBfc3VwcG9ydGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9J
TlBfV1VOTE9DSyhpbnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9y
ID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfQVVUSF9TVVBQ
T1JURUQ6CisJeworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVD
S19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7
CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3Rj
YikgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5M
T0NLKHN0Y2IpOworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19UQ1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVf
QVNTT0MpKSB7CisJCQkJaWYgKChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgJiYKKwkJCQkgICAgKGlu
cC0+YXNjb25mX3N1cHBvcnRlZCA9PSAxKSkgeworCQkJCSAgICAJLyogQVVUSCBpcyByZXF1aXJl
ZCBmb3IgQVNDT05GICovCisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJCX0gZWxzZSB7CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlmIChhdi0+YXNz
b2NfdmFsdWUgPT0gMCkgeworCQkJCQkJaW5wLT5hdXRoX3N1cHBvcnRlZCA9IDA7CisJCQkJCX0g
ZWxzZSB7CisJCQkJCQlpbnAtPmF1dGhfc3VwcG9ydGVkID0gMTsKKwkJCQkJfQorCQkJCQlTQ1RQ
X0lOUF9XVU5MT0NLKGlucCk7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJCWVycm9yID0gRUlOVkFMOworCQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBf
QVNDT05GX1NVUFBPUlRFRDoKKwl7CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKwor
CQlTQ1RQX0NIRUNLX0FORF9DQVNUKGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVl
LCBvcHRzaXplKTsKKwkJU0NUUF9GSU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOwor
CisJCWlmIChzdGNiKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwg
U0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlT
Q1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBT
Q1RQX0ZVVFVSRV9BU1NPQykpIHsKKwkJCQlpZiAoKGF2LT5hc3NvY192YWx1ZSAhPSAwKSAmJgor
CQkJCSAgICAoaW5wLT5hdXRoX3N1cHBvcnRlZCA9PSAwKSkgeworCQkJCSAgICAJLyogQVVUSCBp
cyByZXF1aXJlZCBmb3IgQVNDT05GICovCisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJCWVycm9yID0g
RUlOVkFMOworCQkJCX0gZWxzZSB7CisJCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJCWlm
IChhdi0+YXNzb2NfdmFsdWUgPT0gMCkgeworCQkJCQkJaW5wLT5hc2NvbmZfc3VwcG9ydGVkID0g
MDsKKwkJCQkJCXNjdHBfYXV0aF9kZWxldGVfY2h1bmsoU0NUUF9BU0NPTkYsCisJCQkJCQkgICAg
ICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5sb2NhbF9hdXRoX2NodW5rcyk7CisJCQkJ
CQlzY3RwX2F1dGhfZGVsZXRlX2NodW5rKFNDVFBfQVNDT05GX0FDSywKKwkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLmxvY2FsX2F1dGhfY2h1bmtzKTsKKwkJCQkJfSBl
bHNlIHsKKwkJCQkJCWlucC0+YXNjb25mX3N1cHBvcnRlZCA9IDE7CisJCQkJCQlzY3RwX2F1dGhf
YWRkX2NodW5rKFNDVFBfQVNDT05GLAorCQkJCQkJICAgICAgICAgICAgICAgICAgICBpbnAtPnNj
dHBfZXAubG9jYWxfYXV0aF9jaHVua3MpOworCQkJCQkJc2N0cF9hdXRoX2FkZF9jaHVuayhTQ1RQ
X0FTQ09ORl9BQ0ssCisJCQkJCQkgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0cF9lcC5sb2Nh
bF9hdXRoX2NodW5rcyk7CisJCQkJCX0KKwkJCQkJU0NUUF9JTlBfV1VOTE9DSyhpbnApOworCQkJ
CX0KKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsKKwkJ
CX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX1JFQ09ORklHX1NVUFBPUlRFRDoKKwl7
CisJCXN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICphdjsKKworCQlTQ1RQX0NIRUNLX0FORF9DQVNU
KGF2LCBvcHR2YWwsIHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlLCBvcHRzaXplKTsKKwkJU0NUUF9G
SU5EX1NUQ0IoaW5wLCBzdGNiLCBhdi0+YXNzb2NfaWQpOworCisJCWlmIChzdGNiKSB7CisJCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQkJZXJyb3IgPSBFSU5WQUw7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCX0gZWxzZSB7CisJCQlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RD
UFRZUEUpIHx8CisJCQkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RD
UFBPT0wpIHx8CisJCQkgICAgKGF2LT5hc3NvY19pZCA9PSBTQ1RQX0ZVVFVSRV9BU1NPQykpIHsK
KwkJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJCWlmIChhdi0+YXNzb2NfdmFsdWUgPT0gMCkg
eworCQkJCQlpbnAtPnJlY29uZmlnX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
aW5wLT5yZWNvbmZpZ19zdXBwb3J0ZWQgPSAxOworCQkJCX0KKwkJCQlTQ1RQX0lOUF9XVU5MT0NL
KGlucCk7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7
CisJCQl9CisJCX0KKwkJYnJlYWs7CisJfQorCWNhc2UgU0NUUF9OUlNBQ0tfU1VQUE9SVEVEOgor
CXsKKwkJc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCisJCVNDVFBfQ0hFQ0tfQU5EX0NB
U1QoYXYsIG9wdHZhbCwgc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUsIG9wdHNpemUpOworCQlTQ1RQ
X0ZJTkRfU1RDQihpbnAsIHN0Y2IsIGF2LT5hc3NvY19pZCk7CisKKwkJaWYgKHN0Y2IpIHsKKwkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5f
VENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVUVVJFX0FTU09DKSkg
eworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaWYgKGF2LT5hc3NvY192YWx1ZSA9PSAw
KSB7CisJCQkJCWlucC0+bnJzYWNrX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
aW5wLT5ucnNhY2tfc3VwcG9ydGVkID0gMTsKKwkJCQl9CisJCQkJU0NUUF9JTlBfV1VOTE9DSyhp
bnApOworCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJCWVycm9yID0gRUlOVkFMOwor
CQkJfQorCQl9CisJCWJyZWFrOworCX0KKwljYXNlIFNDVFBfUEtURFJPUF9TVVBQT1JURUQ6CisJ
eworCQlzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSAqYXY7CisKKwkJU0NUUF9DSEVDS19BTkRfQ0FT
VChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwgb3B0c2l6ZSk7CisJCVNDVFBf
RklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKworCQlpZiAoc3RjYikgeworCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJF
USwgRUlOVkFMKTsKKwkJCWVycm9yID0gRUlOVkFMOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQl9IGVsc2UgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fAorCQkJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9U
Q1BQT09MKSB8fAorCQkJICAgIChhdi0+YXNzb2NfaWQgPT0gU0NUUF9GVVRVUkVfQVNTT0MpKSB7
CisJCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCQlpZiAoYXYtPmFzc29jX3ZhbHVlID09IDAp
IHsKKwkJCQkJaW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJ
aW5wLT5wa3Rkcm9wX3N1cHBvcnRlZCA9IDE7CisJCQkJfQorCQkJCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwkJCX0gZWxzZSB7CisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJCQllcnJvciA9IEVJTlZBTDsK
KwkJCX0KKwkJfQorCQlicmVhazsKKwl9CisJY2FzZSBTQ1RQX01BWF9DV05EOgorCXsKKwkJc3Ry
dWN0IHNjdHBfYXNzb2NfdmFsdWUgKmF2OworCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJ
U0NUUF9DSEVDS19BTkRfQ0FTVChhdiwgb3B0dmFsLCBzdHJ1Y3Qgc2N0cF9hc3NvY192YWx1ZSwg
b3B0c2l6ZSk7CisJCVNDVFBfRklORF9TVENCKGlucCwgc3RjYiwgYXYtPmFzc29jX2lkKTsKKwor
CQlpZiAoc3RjYikgeworCQkJc3RjYi0+YXNvYy5tYXhfY3duZCA9IGF2LT5hc3NvY192YWx1ZTsK
KwkJCWlmIChzdGNiLT5hc29jLm1heF9jd25kID4gMCkgeworCQkJCVRBSUxRX0ZPUkVBQ0gobmV0
LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKwkJCQkJaWYgKChuZXQtPmN3bmQgPiBz
dGNiLT5hc29jLm1heF9jd25kKSAmJgorCQkJCQkgICAgKG5ldC0+Y3duZCA+IChuZXQtPm10dSAt
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpKSkgeworCQkJCQkJbmV0LT5jd25kID0gc3RjYi0+YXNv
Yy5tYXhfY3duZDsKKwkJCQkJCWlmIChuZXQtPmN3bmQgPCAobmV0LT5tdHUgLSBzaXplb2Yoc3Ry
dWN0IHNjdHBoZHIpKSkgeworCQkJCQkJCW5ldC0+Y3duZCA9IG5ldC0+bXR1IC0gc2l6ZW9mKHN0
cnVjdCBzY3RwaGRyKTsKKwkJCQkJCX0KKwkJCQkJfQorCQkJCX0KKwkJCX0KKwkJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJfSBlbHNlIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVENQVFlQRSkgfHwKKwkJCSAgICAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfSU5fVENQUE9PTCkgfHwKKwkJCSAgICAoYXYtPmFzc29jX2lkID09IFNDVFBfRlVU
VVJFX0FTU09DKSkgeworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJaW5wLT5tYXhfY3du
ZCA9IGF2LT5hc3NvY192YWx1ZTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9IGVs
c2UgeworCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCQkJZXJyb3IgPSBFSU5WQUw7CisJCQl9CisJCX0KKwkJ
YnJlYWs7CisJfQorCWRlZmF1bHQ6CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBO
VUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT1BST1RPT1BUKTsKKwkJZXJyb3IgPSBFTk9Q
Uk9UT09QVDsKKwkJYnJlYWs7CisJfSAvKiBlbmQgc3dpdGNoIChvcHQpICovCisJcmV0dXJuIChl
cnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK2ludAorc2N0cF9jdGxvdXRwdXQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2Nrb3B0ICpzb3B0KQoreworCXZvaWQgKm9wdHZhbCA9IE5VTEw7
CisJc2l6ZV90IG9wdHNpemUgPSAwOworCXZvaWQgKnA7CisJaW50IGVycm9yID0gMDsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKQorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisjZW5kaWYKKwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJaWYgKChzb3B0LT5zb3B0X2xldmVsID09IFNPTF9T
T0NLRVQpICYmCisJICAgIChzb3B0LT5zb3B0X25hbWUgPT0gU09fU0VURklCKSkgeworCQlpbnAg
PSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCQlpZiAoaW5wID09IE5VTEwpIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoc28tPnNvX3BjYiwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFTk9CVUZTKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOworCQlpbnAtPmZpYm51bSA9IHNvLT5zb19maWJudW07CisJCVNDVFBf
SU5QX1dVTkxPQ0soaW5wKTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZW5kaWYKKwlpZiAoc29wdC0+
c29wdF9sZXZlbCAhPSBJUFBST1RPX1NDVFApIHsKKwkJLyogd3JvbmcgcHJvdG8gbGV2ZWwuLi4g
c2VuZCBiYWNrIHVwIHRvIElQICovCisjaWZkZWYgSU5FVDYKKwkJaWYgKElOUF9DSEVDS19TT0NL
QUYoc28sIEFGX0lORVQ2KSkKKwkJCWVycm9yID0gaXA2X2N0bG91dHB1dChzbywgc29wdCk7Cisj
ZW5kaWYJCQkJLyogSU5FVDYgKi8KKyNpZiBkZWZpbmVkKElORVQpICYmIGRlZmluZWQoSU5FVDYp
CisJCWVsc2UKKyNlbmRpZgorI2lmZGVmIElORVQKKwkJCWVycm9yID0gaXBfY3Rsb3V0cHV0KHNv
LCBzb3B0KTsKKyNlbmRpZgorCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJb3B0c2l6ZSA9IHNvcHQt
PnNvcHRfdmFsc2l6ZTsKKwlpZiAob3B0c2l6ZSkgeworCQlTQ1RQX01BTExPQyhvcHR2YWwsIHZv
aWQgKiwgb3B0c2l6ZSwgU0NUUF9NX1NPQ0tPUFQpOworCQlpZiAob3B0dmFsID09IE5VTEwpIHsK
KwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoc28tPnNvX3BjYiwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFTk9CVUZTKTsKKwkJCXJldHVybiAoRU5PQlVGUyk7CisJCX0KKwkJZXJy
b3IgPSBzb29wdGNvcHlpbihzb3B0LCBvcHR2YWwsIG9wdHNpemUsIG9wdHNpemUpOworCQlpZiAo
ZXJyb3IpIHsKKwkJCVNDVFBfRlJFRShvcHR2YWwsIFNDVFBfTV9TT0NLT1BUKTsKKwkJCWdvdG8g
b3V0OworCQl9CisJfQorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA1MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJcCA9ICh2b2lkICopc29w
dC0+c29wdF90ZDsKKyNlbHNlCisJcCA9ICh2b2lkICopc29wdC0+c29wdF9wOworI2VuZGlmCisJ
aWYgKHNvcHQtPnNvcHRfZGlyID09IFNPUFRfU0VUKSB7CisJCWVycm9yID0gc2N0cF9zZXRvcHQo
c28sIHNvcHQtPnNvcHRfbmFtZSwgb3B0dmFsLCBvcHRzaXplLCBwKTsKKwl9IGVsc2UgaWYgKHNv
cHQtPnNvcHRfZGlyID09IFNPUFRfR0VUKSB7CisJCWVycm9yID0gc2N0cF9nZXRvcHQoc28sIHNv
cHQtPnNvcHRfbmFtZSwgb3B0dmFsLCAmb3B0c2l6ZSwgcCk7CisJfSBlbHNlIHsKKwkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChzby0+c29fcGNiLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JS
RVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCX0KKwlpZiAoKGVycm9yID09IDApICYm
IChvcHR2YWwgIT0gTlVMTCkpIHsKKwkJZXJyb3IgPSBzb29wdGNvcHlvdXQoc29wdCwgb3B0dmFs
LCBvcHRzaXplKTsKKwkJU0NUUF9GUkVFKG9wdHZhbCwgU0NUUF9NX1NPQ0tPUFQpOworCX0gZWxz
ZSBpZiAob3B0dmFsICE9IE5VTEwpIHsKKwkJU0NUUF9GUkVFKG9wdHZhbCwgU0NUUF9NX1NPQ0tP
UFQpOworCX0KK291dDoKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWZkZWYgSU5F
VAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAw
MAorc3RhdGljIGludAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIsIHN0cnVjdCB0aHJlYWQgKnApCit7CisjZWxzZQorI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGljIGludAorc2N0cF9jb25uZWN0
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBwcm9jICpw
KQoreworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
K2ludAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHIpCit7CisJdm9pZCAqcCA9IE5VTEw7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQorc3Rh
dGljIGludAorc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIg
KmFkZHIsIFBLVEhSRUFEIHApCit7CisjZWxzZQorc3RhdGljIGludAorc2N0cF9jb25uZWN0KHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKwlz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOworCisj
ZW5kaWYKKyNlbmRpZgorI2lmZGVmIFNDVFBfTVZSRgorCWludCBpLCBmbmQgPSAwOworI2VuZGlm
CisJaW50IGVycm9yID0gMDsKKwlpbnQgY3JlYXRlX2xvY2tfb24gPSAwOworCXVpbnQzMl90IHZy
Zl9pZDsKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYiA9
IE5VTEw7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmIChp
bnAgPT0gTlVMTCkgeworCQkvKiBJIG1hZGUgdGhlIHNhbWUgYXMgVENQIHNpbmNlIHdlIGFyZSBu
b3Qgc2V0dXA/ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUNPTk5SRVNFVCk7CisJfQor
CWlmIChhZGRyID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIEVJTlZBTDsKKwl9
CisKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAgICAgIC8qIFRPRE8gX19Vc2Vyc3Bh
Y2VfXyBmYWxscyBpbnRvIHRoaXMgY29kZSBmb3IgSVB2NiBzdHVmZiBhdCB0aGUgbW9tZW50Li4u
ICovCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1dpbmRvd3NfXykgJiYgIWRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfTGludXgpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJc3dp
dGNoIChhZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJ
eworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAw
MAorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42cDsKKworI2VuZGlmCisJCWlmIChhZGRyLT5z
YV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOwor
CQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCXNpbjZwID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilhZGRyOworCQlpZiAocCAhPSBOVUxMICYmIChlcnJvciA9IHByaXNvbl9yZW1vdGVfaXA2KHAt
PnRkX3VjcmVkLCAmc2luNnAtPnNpbjZfYWRkcikpICE9IDApIHsKKwkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIGVycm9yKTsKKwkJ
CXJldHVybiAoZXJyb3IpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2VuZGlmCisjaWZk
ZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lucDsK
KworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJaWYgKGFk
ZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFM
KTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJCXNpbnAgPSAoc3RydWN0IHNv
Y2thZGRyX2luICopYWRkcjsKKwkJaWYgKHAgIT0gTlVMTCAmJiAoZXJyb3IgPSBwcmlzb25fcmVt
b3RlX2lwNChwLT50ZF91Y3JlZCwgJnNpbnAtPnNpbl9hZGRyKSkgIT0gMCkgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgZXJy
b3IpOworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKwl9CisjZW5k
aWYKKwlkZWZhdWx0OgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NU
UF9GUk9NX1NDVFBfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQlyZXR1cm4gKEVBRk5PU1VQUE9S
VCk7CisJfQorI2VuZGlmCisJU0NUUF9JTlBfSU5DUl9SRUYoaW5wKTsKKwlTQ1RQX0FTT0NfQ1JF
QVRFX0xPQ0soaW5wKTsKKwljcmVhdGVfbG9ja19vbiA9IDE7CisKKworCWlmICgoaW5wLT5zY3Rw
X2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0FMTEdPTkUpIHx8CisJICAgIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkpIHsKKwkJLyogU2hvdWxkIEkg
cmVhbGx5IHVubG9jayA/ICovCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVGQVVMVCk7CisJCWVycm9yID0gRUZBVUxUOworCQln
b3RvIG91dF9ub3c7CisJfQorI2lmZGVmIElORVQ2CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpID09IDApICYmCisJICAgIChhZGRyLT5zYV9mYW1pbHkg
PT0gQUZfSU5FVDYpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3Rv
IG91dF9ub3c7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmICgo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgJiYKKwkgICAgKGFk
ZHItPnNhX2ZhbWlseSAhPSBBRl9DT05OKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwg
TlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJ
TlZBTDsKKwkJZ290byBvdXRfbm93OworCX0KKyNlbmRpZgorCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfVU5CT1VORCkgPT0KKwkgICAgU0NUUF9QQ0JfRkxBR1NfVU5CT1VO
RCkgeworCQkvKiBCaW5kIGEgZXBoZW1lcmFsIHBvcnQgKi8KKwkJZXJyb3IgPSBzY3RwX2lucGNi
X2JpbmQoc28sIE5VTEwsIE5VTEwsIHApOworCQlpZiAoZXJyb3IpIHsKKwkJCWdvdG8gb3V0X25v
dzsKKwkJfQorCX0KKwkvKiBOb3cgZG8gd2UgY29ubmVjdD8gKi8KKwlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpICYmCisJICAgIChzY3RwX2lzX2ZlYXR1
cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1NfUE9SVFJFVVNFKSkpIHsKKwkJU0NUUF9MVFJBQ0Vf
RVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsK
KwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisJaWYgKChpbnAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSAmJgorCSAgICAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSkgeworCQkvKiBXZSBhcmUgYWxyZWFkeSBjb25u
ZWN0ZWQgQU5EIHRoZSBUQ1AgbW9kZWwgKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIHN0
Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFERFJJTlVTRSk7CisJCWVycm9yID0g
RUFERFJJTlVTRTsKKwkJZ290byBvdXRfbm93OworCX0KKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYg
U0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSB7CisJCVNDVFBfSU5QX1JMT0NLKGlucCk7CisJCXN0
Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJU0NUUF9JTlBfUlVOTE9D
SyhpbnApOworCX0gZWxzZSB7CisJCS8qIFdlIGluY3JlbWVudCBoZXJlIHNpbmNlIHNjdHBfZmlu
ZGFzc29jaWF0aW9uX2VwX2FkZHIoKSB3aWxsCisJCSAqIGRvIGEgZGVjcmVtZW50IGlmIGl0IGZp
bmRzIHRoZSBzdGNiIGFzIGxvbmcgYXMgdGhlIGxvY2tlZAorCQkgKiB0Y2IgKGxhc3QgYXJndW1l
bnQpIGlzIE5PVCBhIFRDQi4uIGFrYSBOVUxMLgorCQkgKi8KKwkJU0NUUF9JTlBfSU5DUl9SRUYo
aW5wKTsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2VwX2FkZHIoJmlucCwgYWRkciwg
TlVMTCwgTlVMTCwgTlVMTCk7CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCVNDVFBfSU5QX0RF
Q1JfUkVGKGlucCk7CisJCX0gZWxzZSB7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCX0K
Kwl9CisJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IGhhdmUgb3IgYW0gYnJpbmcg
dXAgYW4gYXNzb2NpYXRpb24gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUFMUkVBRFkpOworCQllcnJvciA9IEVBTFJFQURZ
OworCQlnb3RvIG91dF9ub3c7CisJfQorCisJdnJmX2lkID0gaW5wLT5kZWZfdnJmX2lkOworI2lm
ZGVmIFNDVFBfTVZSRgorCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJ
aWYgKHZyZl9pZCA9PSBpbnAtPm1fdnJmX2lkc1tpXSkgeworCQkJZm5kID0gMTsKKwkJCWJyZWFr
OworCQl9CisJfQorCWlmICghZm5kKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFM
OworCQlnb3RvIG91dF9ub3c7CisJfQorI2VuZGlmCisJLyogV2UgYXJlIEdPT0QgdG8gZ28gKi8K
KwlzdGNiID0gc2N0cF9hbG9jX2Fzc29jKGlucCwgYWRkciwgJmVycm9yLCAwLCB2cmZfaWQsCisJ
ICAgICAgICAgICAgICAgICAgICAgICBpbnAtPnNjdHBfZXAucHJlX29wZW5fc3RyZWFtX2NvdW50
LAorCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5zY3RwX2VwLnBvcnQsIHApOworCWlmIChz
dGNiID09IE5VTEwpIHsKKwkJLyogR2FrISBubyBtZW1vcnkgKi8KKwkJZ290byBvdXRfbm93Owor
CX0KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZ
UEUpIHsKKwkJc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BDQl9GTEFHU19DT05O
RUNURUQ7CisJCS8qIFNldCB0aGUgY29ubmVjdGVkIGZsYWcgc28gd2UgY2FuIHF1ZXVlIGRhdGEg
Ki8KKwkJc29pc2Nvbm5lY3Rpbmcoc28pOworCX0KKwlTQ1RQX1NFVF9TVEFURSgmc3RjYi0+YXNv
YywgU0NUUF9TVEFURV9DT09LSUVfV0FJVCk7CisJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
JnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKKworCS8qIGluaXRpYWxpemUgYXV0aGVudGljYXRp
b24gcGFyYW1ldGVycyBmb3IgdGhlIGFzc29jICovCisJc2N0cF9pbml0aWFsaXplX2F1dGhfcGFy
YW1zKGlucCwgc3RjYik7CisKKwlzY3RwX3NlbmRfaW5pdGlhdGUoaW5wLCBzdGNiLCBTQ1RQX1NP
X0xPQ0tFRCk7CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworIG91dF9ub3c6CisJaWYgKGNyZWF0
ZV9sb2NrX29uKSB7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJfQorCisJU0NU
UF9JTlBfREVDUl9SRUYoaW5wKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgorCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwY29ubl9jb25uZWN0KHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisjaWZkZWYgU0NUUF9NVlJGCisJaW50
IGksIGZuZCA9IDA7CisjZW5kaWYKKwl2b2lkICpwID0gTlVMTDsKKwlpbnQgZXJyb3IgPSAwOwor
CWludCBjcmVhdGVfbG9ja19vbiA9IDA7CisJdWludDMyX3QgdnJmX2lkOworCXN0cnVjdCBzY3Rw
X2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKworCWlucCA9IChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCS8q
IEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJaWYgKGFkZHIgPT0gTlVMTCkg
eworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gRUlOVkFMOworCX0KKwlzd2l0Y2ggKGFkZHItPnNh
X2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lORVQ6CisjaWZkZWYgSEFWRV9TQV9M
RU4KKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgewor
CQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorI2VuZGlmCisJCWJyZWFr
OworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorI2lmZGVmIEhBVkVfU0Ff
TEVOCisJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJl
YWs7CisjZW5kaWYKKwljYXNlIEFGX0NPTk46CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGFk
ZHItPnNhX2xlbiAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKSB7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5W
QUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVs
dDoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
X1VTUlJFUSwgRUFGTk9TVVBQT1JUKTsKKwkJcmV0dXJuIChFQUZOT1NVUFBPUlQpOworCX0KKwlT
Q1RQX0lOUF9JTkNSX1JFRihpbnApOworCVNDVFBfQVNPQ19DUkVBVEVfTE9DSyhpbnApOworCWNy
ZWF0ZV9sb2NrX29uID0gMTsKKworCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfQUxMR09ORSkgfHwKKwkgICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSkgeworCQkvKiBTaG91bGQgSSByZWFsbHkgdW5sb2NrID8gKi8K
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUZBVUxUKTsKKwkgICAgICAgIGVycm9yID0gRUZBVUxUOworCQlnb3RvIG91dF9ub3c7
CisJfQorI2lmZGVmIElORVQ2CisJaWYgKCgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQk9VTkRfVjYpID09IDApICYmCisJICAgIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVDYp
KSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NU
UF9VU1JSRVEsIEVJTlZBTCk7CisJCWVycm9yID0gRUlOVkFMOworCQlnb3RvIG91dF9ub3c7CisJ
fQorI2VuZGlmCisJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5E
KSA9PSBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisJCS8qIEJpbmQgYSBlcGhlbWVyYWwgcG9y
dCAqLworCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCk7CisJCWlm
IChlcnJvcikgeworCQkJZ290byBvdXRfbm93OworCQl9CisJfQorCS8qIE5vdyBkbyB3ZSBjb25u
ZWN0PyAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfSU5fVENQUE9P
TCkgJiYKKwkgICAgKHNjdHBfaXNfZmVhdHVyZV9vZmYoaW5wLCBTQ1RQX1BDQl9GTEFHU19QT1JU
UkVVU0UpKSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9G
Uk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290byBvdXRf
bm93OworCX0KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUp
ICYmCisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7
CisJCS8qIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFQUREUklOVVNFKTsKKwkJZXJyb3IgPSBFQUREUklOVVNFOworCQlnb3RvIG91dF9ub3c7CisJ
fQorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJ
U0NUUF9JTlBfUkxPQ0soaW5wKTsKKwkJc3RjYiA9IExJU1RfRklSU1QoJmlucC0+c2N0cF9hc29j
X2xpc3QpOworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJLyogV2UgaW5j
cmVtZW50IGhlcmUgc2luY2Ugc2N0cF9maW5kYXNzb2NpYXRpb25fZXBfYWRkcigpIHdpbGwKKwkJ
ICogZG8gYSBkZWNyZW1lbnQgaWYgaXQgZmluZHMgdGhlIHN0Y2IgYXMgbG9uZyBhcyB0aGUgbG9j
a2VkCisJCSAqIHRjYiAobGFzdCBhcmd1bWVudCkgaXMgTk9UIGEgVENCLi4gYWthIE5VTEwuCisJ
CSAqLworCQlTQ1RQX0lOUF9JTkNSX1JFRihpbnApOworCQlzdGNiID0gc2N0cF9maW5kYXNzb2Np
YXRpb25fZXBfYWRkcigmaW5wLCBhZGRyLCBOVUxMLCBOVUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfSBlbHNlIHsKKwkJCVND
VFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQorCX0KKwlpZiAoc3RjYiAhPSBOVUxMKSB7CisJCS8q
IEFscmVhZHkgaGF2ZSBvciBhbSBicmluZyB1cCBhbiBhc3NvY2lhdGlvbiAqLworCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFQUxS
RUFEWSk7CisJCWVycm9yID0gRUFMUkVBRFk7CisJCWdvdG8gb3V0X25vdzsKKwl9CisKKwl2cmZf
aWQgPSBpbnAtPmRlZl92cmZfaWQ7CisjaWZkZWYgU0NUUF9NVlJGCisJZm9yIChpID0gMDsgaSA8
IGlucC0+bnVtX3ZyZnM7IGkrKykgeworCQlpZiAodnJmX2lkID09IGlucC0+bV92cmZfaWRzW2ld
KSB7CisJCQlmbmQgPSAxOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKCFmbmQpIHsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwg
RUlOVkFMKTsKKwkJZXJyb3IgPSBFSU5WQUw7CisJCWdvdG8gb3V0X25vdzsKKwl9CisjZW5kaWYK
KwkvKiBXZSBhcmUgR09PRCB0byBnbyAqLworCXN0Y2IgPSBzY3RwX2Fsb2NfYXNzb2MoaW5wLCBh
ZGRyLCAmZXJyb3IsIDAsIHZyZl9pZCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlucC0+c2N0
cF9lcC5wcmVfb3Blbl9zdHJlYW1fY291bnQsCisJICAgICAgICAgICAgICAgICAgICAgICBpbnAt
PnNjdHBfZXAucG9ydCwgcCk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkvKiBHYWshIG5vIG1l
bW9yeSAqLworCQlnb3RvIG91dF9ub3c7CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgeworCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2Zs
YWdzIHw9IFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRDsKKwkJLyogU2V0IHRoZSBjb25uZWN0ZWQg
ZmxhZyBzbyB3ZSBjYW4gcXVldWUgZGF0YSAqLworCQlzb2lzY29ubmVjdGluZyhzbyk7CisJfQor
CVNDVFBfU0VUX1NUQVRFKCZzdGNiLT5hc29jLCBTQ1RQX1NUQVRFX0NPT0tJRV9XQUlUKTsKKwko
dm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworCisJ
LyogaW5pdGlhbGl6ZSBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgYXNzb2MgKi8K
KwlzY3RwX2luaXRpYWxpemVfYXV0aF9wYXJhbXMoaW5wLCBzdGNiKTsKKworCXNjdHBfc2VuZF9p
bml0aWF0ZShpbnAsIHN0Y2IsIFNDVFBfU09fTE9DS0VEKTsKKwlTQ1RQX1RDQl9VTkxPQ0soc3Rj
Yik7Cisgb3V0X25vdzoKKwlpZiAoY3JlYXRlX2xvY2tfb24pIHsKKwkJU0NUUF9BU09DX0NSRUFU
RV9VTkxPQ0soaW5wKTsKKwl9CisKKwlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCXJldHVybiAo
ZXJyb3IpOworfQorI2VuZGlmCitpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0Zy
ZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAK
K3NjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgc3RydWN0IHRocmVh
ZCAqcCkKKyNlbHNlCitzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHRocmVh
ZCAqcCkKKyNlbmRpZgorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHBfbGlzdGVuKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZywgUEtUSFJFQUQgcCkKKyNlbGlmIGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKK3NjdHBfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xv
Zywgc3RydWN0IHByb2MgKnApCisjZWxzZQorc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBwcm9jICpwKQorI2VuZGlmCit7CisJLyoKKwkgKiBOb3RlIHRoaXMgbW9kdWxlIGRl
cGVuZHMgb24gdGhlIHByb3RvY29sIHByb2Nlc3NpbmcgYmVpbmcgY2FsbGVkCisJICogQUZURVIg
YW55IHNvY2tldCBsZXZlbCBmbGFncyBhbmQgYmFja2xvZyBhcmUgYXBwbGllZCB0byB0aGUKKwkg
KiBzb2NrZXQuIFRoZSB0cmFkaXRpb25hbCB3YXkgdGhhdCB0aGUgc29ja2V0IGZsYWdzIGFyZSBh
cHBsaWVkIGlzCisJICogQUZURVIgcHJvdG9jb2wgcHJvY2Vzc2luZy4gV2UgaGF2ZSBtYWRlIGEg
Y2hhbmdlIHRvIHRoZQorCSAqIHN5cy9rZXJuL3VpcGNfc29ja2V0LmMgbW9kdWxlIHRvIHJldmVy
c2UgdGhpcyBidXQgdGhpcyBNVVNUIGJlIGluCisJICogcGxhY2UgaWYgdGhlIHNvY2tldCBBUEkg
Zm9yIFNDVFAgaXMgdG8gd29yayBwcm9wZXJseS4KKwkgKi8KKworCWludCBlcnJvciA9IDA7CisJ
c3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNv
LT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBU
Q1Agc2luY2Ugd2UgYXJlIG5vdCBzZXR1cD8gKi8KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKKwl9CisJaWYgKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZM
QUdTX1BPUlRSRVVTRSkpIHsKKwkJLyogU2VlIGlmIHdlIGhhdmUgYSBsaXN0ZW5lciAqLworCQlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqdGlucDsKKwkJdW5pb24gc2N0cF9zb2Nrc3RvcmUgc3RvcmU7CisK
KwkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VOREFMTCkgPT0gMCkg
eworCQkJLyogbm90IGJvdW5kIGFsbCAqLworCQkJc3RydWN0IHNjdHBfbGFkZHIgKmxhZGRyOwor
CisJCQlMSVNUX0ZPUkVBQ0gobGFkZHIsICZpbnAtPnNjdHBfYWRkcl9saXN0LCBzY3RwX254dF9h
ZGRyKSB7CisJCQkJbWVtY3B5KCZzdG9yZSwgJmxhZGRyLT5pZmEtPmFkZHJlc3MsIHNpemVvZihz
dG9yZSkpOworCQkJCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAor
CQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gaW5wLT5zY3RwX2xw
b3J0OworCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9JTkVU
NjoKKwkJCQkJc3RvcmUuc2luNi5zaW42X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJCWJy
ZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWNhc2UgQUZfQ09O
TjoKKwkJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJCQkJ
YnJlYWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisJCQkJdGlu
cCA9IHNjdHBfcGNiX2ZpbmRlcCgmc3RvcmUuc2EsIDAsIDAsIGlucC0+ZGVmX3ZyZl9pZCk7CisJ
CQkJaWYgKHRpbnAgJiYgKHRpbnAgIT0gaW5wKSAmJgorCQkJCSAgICAoKHRpbnAtPnNjdHBfZmxh
Z3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgPT0gMCkgJiYKKwkJCQkgICAgKCh0
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJ
CQkJICAgIChTQ1RQX0lTX0xJU1RFTklORyh0aW5wKSkpIHsKKwkJCQkJLyogd2UgaGF2ZSBhIGxp
c3RlbmVyIGFscmVhZHkgYW5kIGl0cyBub3QgdGhpcyBpbnAuICovCisJCQkJCVNDVFBfSU5QX0RF
Q1JfUkVGKHRpbnApOworCQkJCQlyZXR1cm4gKEVBRERSSU5VU0UpOworCQkJCX0gZWxzZSBpZiAo
dGlucCkgeworCQkJCQlTQ1RQX0lOUF9ERUNSX1JFRih0aW5wKTsKKwkJCQl9CisJCQl9CisJCX0g
ZWxzZSB7CisJCQkvKiBTZXR1cCBhIGxvY2FsIGFkZHIgYm91bmQgYWxsICovCisJCQltZW1zZXQo
JnN0b3JlLCAwLCBzaXplb2Yoc3RvcmUpKTsKKyNpZmRlZiBJTkVUNgorCQkJaWYgKGlucC0+c2N0
cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCQkJc3RvcmUuc2Euc2FfZmFt
aWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCQlzdG9yZS5zYS5zYV9sZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJCX0KKyNlbmRpZgorI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9DT05OKSB7CisJCQkJc3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfQ09OTjsK
KyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJCXN0b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfY29ubik7CisjZW5kaWYKKwkJCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQlpZiAoKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VORF9WNikgPT0gMCkgJiYKKwkJCSAgICAoKGlucC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX0JPVU5EX0NPTk4pID09IDApKSB7CisjZWxzZQorCQkJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgeworI2VuZGlmCisJCQkJ
c3RvcmUuc2Euc2FfZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJCXN0
b3JlLnNhLnNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQl9
CisjZW5kaWYKKwkJCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAor
CQkJY2FzZSBBRl9JTkVUOgorCQkJCXN0b3JlLnNpbi5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9y
dDsKKwkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQljYXNlIEFGX0lORVQ2Ogor
CQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gaW5wLT5zY3RwX2xwb3J0OworCQkJCWJyZWFrOwor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJY2FzZSBBRl9DT05OOgorCQkJ
CXN0b3JlLnNjb25uLnNjb25uX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQl0aW5wID0gc2N0cF9wY2Jf
ZmluZGVwKCZzdG9yZS5zYSwgMCwgMCwgaW5wLT5kZWZfdnJmX2lkKTsKKwkJCWlmICh0aW5wICYm
ICh0aW5wICE9IGlucCkgJiYKKwkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfQUxMR09ORSkgPT0gMCkgJiYKKwkJCSAgICAoKHRpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgPT0gMCkgJiYKKwkJCSAgICAoU0NUUF9JU19M
SVNURU5JTkcodGlucCkpKSB7CisJCQkJLyogd2UgaGF2ZSBhIGxpc3RlbmVyIGFscmVhZHkgYW5k
IGl0cyBub3QgdGhpcyBpbnAuICovCisJCQkJU0NUUF9JTlBfREVDUl9SRUYodGlucCk7CisJCQkJ
cmV0dXJuIChFQUREUklOVVNFKTsKKwkJCX0gZWxzZSBpZiAodGlucCkgeworCQkJCVNDVFBfSU5Q
X0RFQ1JfUkVGKHRpbnApOworCQkJfQorCQl9CisJfQorCVNDVFBfSU5QX1JMT0NLKGlucCk7Cisj
aWZkZWYgU0NUUF9MT0NLX0xPR0dJTkcKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9MT0NLX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX2xvY2so
aW5wLCAoc3RydWN0IHNjdHBfdGNiICopTlVMTCwgU0NUUF9MT0dfTE9DS19TT0NLKTsKKwl9Cisj
ZW5kaWYKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1
MDAwMDApIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwlTT0NLX0xPQ0soc28pOworCWVycm9y
ID0gc29saXN0ZW5fcHJvdG9fY2hlY2soc28pOworCVNPQ0tfVU5MT0NLKHNvKTsKKwlpZiAoZXJy
b3IpIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQlyZXR1cm4gKGVycm9yKTsKKwl9Cisj
ZW5kaWYKKwlpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1BPUlRS
RVVTRSkpICYmCisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQ
T09MKSkgeworCQkvKiBUaGUgdW5sdWNreSBjYXNlCisJCSAqIC0gV2UgYXJlIGluIHRoZSB0Y3Ag
cG9vbCB3aXRoIHRoaXMgZ3V5LgorCQkgKiAtIFNvbWVvbmUgZWxzZSBpcyBpbiB0aGUgbWFpbiBp
bnAgc2xvdC4KKwkJICogLSBXZSBtdXN0IG1vdmUgdGhpcyBndXkgKHRoZSBsaXN0ZW5lcikgdG8g
dGhlIG1haW4gc2xvdAorCQkgKiAtIFdlIG11c3QgdGhlbiBtb3ZlIHRoZSBndXkgdGhhdCB3YXMg
bGlzdGVuZXIgdG8gdGhlIFRDUCBQb29sLgorCQkgKi8KKwkJaWYgKHNjdHBfc3dhcF9pbnBjYl9m
b3JfbGlzdGVuKGlucCkpIHsKKwkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCVNDVFBfTFRS
QUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRERS
SU5VU0UpOworCQkJcmV0dXJuIChFQUREUklOVVNFKTsKKwkJfQorCX0KKworCWlmICgoaW5wLT5z
Y3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQRSkgJiYKKwkgICAgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RFRCkpIHsKKwkJLyogV2UgYXJlIGFscmVhZHkg
Y29ubmVjdGVkIEFORCB0aGUgVENQIG1vZGVsICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsK
KwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSwgRUFERFJJTlVTRSk7CisJCXJldHVybiAoRUFERFJJTlVTRSk7CisJfQorCVNDVFBfSU5Q
X1JVTkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVU5C
T1VORCkgeworCQkvKiBXZSBtdXN0IGRvIGEgYmluZC4gKi8KKwkJaWYgKChlcnJvciA9IHNjdHBf
aW5wY2JfYmluZChzbywgTlVMTCwgTlVMTCwgcCkpKSB7CisJCQkvKiBiaW5kIGVycm9yLCBwcm9i
YWJseSBwZXJtICovCisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCX0KKwlTQ1RQX0lOUF9XTE9D
SyhpbnApOworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
IDUwMDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9f
KQorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDEyMDAwMzQKKwlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1VEUFRZUEUpID09IDApIHsKKwkJU09DS19MT0NLKHNvKTsKKwkJ
c29saXN0ZW5fcHJvdG8oc28sIGJhY2tsb2cpOworCQlTT0NLX1VOTE9DSyhzbyk7CisJfQorI2Vs
aWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkvKiBJdCBhcHBlYXJzIGZvciA3LjAgYW5kIG9uLCB3
ZSBtdXN0IGFsd2F5cyBjYWxsIHRoaXMuICovCisJU09DS19MT0NLKHNvKTsKKwlzb2xpc3Rlbl9w
cm90byhzbywgYmFja2xvZyk7CisjZWxzZQorCVNPQ0tfTE9DSyhzbyk7CisJaWYgKChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VRFBUWVBFKSA9PSAwKSB7CisJCXNvbGlzdGVuX3By
b3RvKHNvKTsKKwl9CisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBfX0ZyZWVCU0RfdmVyc2lvbiA8IDEyMDAwMzQKKwlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfVURQVFlQRSkgeworCQkvKiByZW1vdmUgdGhlIEFDQ0VQVENPTk4gZmxhZyBm
b3Igb25lLXRvLW1hbnkgc29ja2V0cyAqLworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
c28tPnNvX29wdGlvbnMgJj0gflNDVFBfU09fQUNDRVBUQ09OTjsKKyNlbHNlCisJCXNvLT5zb19v
cHRpb25zICY9IH5TT19BQ0NFUFRDT05OOworI2VuZGlmCisJfQorCVNPQ0tfVU5MT0NLKHNvKTsK
KyNlbmRpZgorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA3MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwlpZiAoYmFja2xvZyA+IDApIHsKKwkJaW5wLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZM
QUdTX0FDQ0VQVElORzsKKwl9IGVsc2UgeworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENC
X0ZMQUdTX0FDQ0VQVElORzsKKwl9CisjZWxzZQorCWlucC0+c2N0cF9mbGFncyB8PSBTQ1RQX1BD
Ql9GTEFHU19BQ0NFUFRJTkc7CisjZW5kaWYKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJcmV0
dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyBpbnQgc2N0cF9kZWZlcmVkX3dha2V1cF9jbnQgPSAw
OworCitpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc2N0cF9h
Y2NlcHQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKmFkZHIpCit7CisjZWxp
ZiBkZWZpbmVkKF9fUGFuZGFfXykKK3NjdHBfYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsIGludCAqbmFtZWxlbiwKKwkgICAgdm9pZCAqYWNjZXB0X2luZm8s
IGludCAqYWNjZXB0X2luZm9fbGVuKQoreworI2Vsc2UKK3NjdHBfYWNjZXB0KHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG10
b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisjZW5kaWYKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2I7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwl1bmlvbiBzY3RwX3NvY2tzdG9yZSBzdG9y
ZTsKKyNpZmRlZiBJTkVUNgorI2lmZGVmIFNDVFBfS0FNRQorCWludCBlcnJvcjsKKyNlbmRpZiAv
KiBTQ1RQX0tBTUUgKi8KKyNlbmRpZgorCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5z
b19wY2I7CisKKwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfVURQVFlQRSkgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9V
U1JSRVEsIEVPUE5PVFNVUFApOworCQlyZXR1cm4gKEVPUE5PVFNVUFApOworCX0KKwlpZiAoc28t
PnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNURUQpIHsKKwkJU0NUUF9JTlBfUlVOTE9DSyhpbnAp
OworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFQ09OTkFCT1JURUQpOworCQlyZXR1cm4gKEVDT05OQUJPUlRFRCk7CisJfQorCXN0
Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAoc3RjYiA9PSBOVUxM
KSB7CisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChF
Q09OTlJFU0VUKTsKKwl9CisJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwlTQ1RQX0lOUF9SVU5MT0NL
KGlucCk7CisJc3RvcmUgPSBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24tPnJvLl9sX2Fk
ZHI7CisJc3RjYi0+YXNvYy5zdGF0ZSAmPSB+U0NUUF9TVEFURV9JTl9BQ0NFUFRfUVVFVUU7CisJ
U0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCXN3aXRjaCAoc3RvcmUuc2Euc2FfZmFtaWx5KSB7Cisj
aWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2lu
OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJU0NUUF9NQUxM
T0NfU09OQU1FKHNpbiwgc3RydWN0IHNvY2thZGRyX2luICosIHNpemVvZiAqc2luKTsKKwkJaWYg
KHNpbiA9PSBOVUxMKQorCQkJcmV0dXJuIChFTk9NRU0pOworI2Vsc2UKKwkJc2luID0gKHN0cnVj
dCBzb2NrYWRkcl9pbiAqKWFkZHI7CisJCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7Cisj
ZW5kaWYKKwkJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4K
KwkJc2luLT5zaW5fbGVuID0gc2l6ZW9mKCpzaW4pOworI2VuZGlmCisJCXNpbi0+c2luX3BvcnQg
PSBzdG9yZS5zaW4uc2luX3BvcnQ7CisJCXNpbi0+c2luX2FkZHIgPSBzdG9yZS5zaW4uc2luX2Fk
ZHI7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJKmFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopc2luOworI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKQorCQlTQ1RQ
X0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKKyNlbmRpZgorCQlicmVhazsKKwl9CisjZW5k
aWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
U0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpz
aW42KTsKKwkJaWYgKHNpbjYgPT0gTlVMTCkKKwkJCXJldHVybiAoRU5PTUVNKTsKKyNlbHNlCisJ
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJCW1lbXNldChzaW42LCAwLCBz
aXplb2YoKnNpbjYpKTsKKyNlbmRpZgorCQlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2Owor
I2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOwor
I2VuZGlmCisJCXNpbjYtPnNpbjZfcG9ydCA9IHN0b3JlLnNpbjYuc2luNl9wb3J0OworCQlzaW42
LT5zaW42X2FkZHIgPSBzdG9yZS5zaW42LnNpbjZfYWRkcjsKKyNpZiBkZWZpbmVkKFNDVFBfRU1C
RURERURfVjZfU0NPUEUpCisjaWZkZWYgU0NUUF9LQU1FCisJCWlmICgoZXJyb3IgPSBzYTZfcmVj
b3ZlcnNjb3BlKHNpbjYpKSAhPSAwKSB7CisJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworCQkJ
cmV0dXJuIChlcnJvcik7CisJCX0KKyNlbHNlCisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FM
KCZzaW42LT5zaW42X2FkZHIpKQorCQkJLyoKKwkJCSAqIHNpbjYtPnNpbjZfc2NvcGVfaWQgPQor
CQkJICogbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXSk7CisJCQkgKi8KKwkJCWlu
Nl9yZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CS8qIHNraXAgaWZw
IGNoZWNrICovCisJCWVsc2UKKwkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSAwOwkvKiBYWFggKi8K
KyNlbmRpZiAvKiBTQ1RQX0tBTUUgKi8KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BF
ICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJKmFkZHIgPSAo
c3RydWN0IHNvY2thZGRyICopc2luNjsKKyNlbGlmICFkZWZpbmVkKF9fUGFuZGFfXykKKwkJU0NU
UF9CVUZfTEVOKG5hbSkgPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisJCWJyZWFrOworCX0KKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwljYXNlIEFGX0NPTk46CisJeworCQlz
dHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47CisKKwkJU0NUUF9NQUxMT0NfU09OQU1FKHNjb25u
LCBzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsK
KwkJaWYgKHNjb25uID09IE5VTEwpIHsKKwkJCXJldHVybiAoRU5PTUVNKTsKKwkJfQorCQlzY29u
bi0+c2Nvbm5fZmFtaWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCQlzY29u
bi0+c2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCQlz
Y29ubi0+c2Nvbm5fcG9ydCA9IHN0b3JlLnNjb25uLnNjb25uX3BvcnQ7CisJCXNjb25uLT5zY29u
bl9hZGRyID0gc3RvcmUuc2Nvbm4uc2Nvbm5fYWRkcjsKKwkJKmFkZHIgPSAoc3RydWN0IHNvY2th
ZGRyICopc2Nvbm47CisJCWJyZWFrOworCX0KKyNlbmRpZgorCWRlZmF1bHQ6CisJCS8qIFRTTkgg
Ki8KKwkJYnJlYWs7CisJfQorCS8qIFdha2UgYW55IGRlbGF5ZWQgc2xlZXAgYWN0aW9uICovCisJ
aWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0RPTlRfV0FLRSkgeworCQlTQ1RQ
X0lOUF9XTE9DSyhpbnApOworCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX0RP
TlRfV0FLRTsKKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBS0VPVVRQ
VVQpIHsKKwkJCWlucC0+c2N0cF9mbGFncyAmPSB+U0NUUF9QQ0JfRkxBR1NfV0FLRU9VVFBVVDsK
KwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3Nv
Y2tldC0+c29fc25kKTsKKwkJCWlmIChzb3dyaXRlYWJsZShpbnAtPnNjdHBfc29ja2V0KSkgewor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
Kl9fVXNlcnNwYWNlX18gY2FsbGluZyBzb3d3YWt1cF9sb2NrZWQgYmVjYXVzZSBvZiBTT0NLQlVG
X0xPQ0sgYWJvdmUuICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQkJc293d2FrZXVw
X2xvY2tlZChpbnAtPnNjdHBfc29ja2V0KTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX0FQUExFX18p
CisJCQkJLyogc29ja2V0IGlzIGxvY2tlZCAqLworI2VuZGlmCisJCQkJc293d2FrZXVwKGlucC0+
c2N0cF9zb2NrZXQpOworI2VuZGlmCisJCQl9IGVsc2UgeworCQkJCVNPQ0tCVUZfVU5MT0NLKCZp
bnAtPnNjdHBfc29ja2V0LT5zb19zbmQpOworCQkJfQorCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsK
KwkJfQorCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUKSB7
CisJCQlpbnAtPnNjdHBfZmxhZ3MgJj0gflNDVFBfUENCX0ZMQUdTX1dBS0VJTlBVVDsKKwkJCVND
VFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJCVNPQ0tCVUZfTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+
c29fcmN2KTsKKwkJCWlmIChzb3JlYWRhYmxlKGlucC0+c2N0cF9zb2NrZXQpKSB7CisJCQkJc2N0
cF9kZWZlcmVkX3dha2V1cF9jbnQrKzsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qX19Vc2Vyc3BhY2VfXyBjYWxsaW5nIHNvcndh
a3VwX2xvY2tlZCBiZWNhdXNlIG9mIFNPQ0tCVUZfTE9DSyBhYm92ZSAqLworI2VuZGlmCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQkJCXNvcndha2V1cF9sb2NrZWQoaW5wLT5zY3RwX3NvY2tldCk7Cisj
ZWxzZQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkJCS8qIHNvY2tldCBpcyBsb2NrZWQgKi8K
KyNlbmRpZgorCQkJCXNvcndha2V1cChpbnAtPnNjdHBfc29ja2V0KTsKKyNlbmRpZgorCQkJfSBl
bHNlIHsKKwkJCQlTT0NLQlVGX1VOTE9DSygmaW5wLT5zY3RwX3NvY2tldC0+c29fcmN2KTsKKwkJ
CX0KKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCX0KKwkJU0NUUF9JTlBfV1VOTE9DSyhpbnAp
OworCX0KKwlpZiAoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJF
RUQpIHsKKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJc2N0cF9mcmVlX2Fzc29jKGlucCwgc3Rj
YiwgU0NUUF9OT1JNQUxfUFJPQywKKwkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VT
UlJFUSArIFNDVFBfTE9DXzE5KTsKKwl9CisJcmV0dXJuICgwKTsKK30KKworI2lmZGVmIElORVQK
K2ludAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKQorc2N0cF9pbmdldGFkZHIoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisjZWxp
ZiBkZWZpbmVkKF9fUGFuZGFfXykKK3NjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3Ry
dWN0IHNvY2thZGRyX2luICopYWRkcjsKKyNlbHNlCitzY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29j
a2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiA9
IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisjZW5kaWYKKwl1aW50MzJfdCB2cmZf
aWQ7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF9pZmEgKnNjdHBfaWZh
OworCisJLyoKKwkgKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLgorCSAq
LworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKQorCVNDVFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRk
cl9pbiAqLCBzaXplb2YgKnNpbik7CisJaWYgKHNpbiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01F
TSk7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKKwltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNp
bikpOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKKwltZW1zZXQo
c2luLCAwLCBzaXplb2YoKnNpbikpOworI2VuZGlmCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7Cisj
ZW5kaWYKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmICghaW5w
KSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKKyNlbmRpZgorCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVR
LCBFSU5WQUwpOworCQlyZXR1cm4gKEVDT05OUkVTRVQpOworCX0KKwlTQ1RQX0lOUF9STE9DSyhp
bnApOworCXNpbi0+c2luX3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCWlmIChpbnAtPnNjdHBfZmxhZ3Mg
JiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsK
KwkJCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX2E7CisJCQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7
CisJCQlpbnQgZm5kOworCisJCQlzdGNiID0gTElTVF9GSVJTVCgmaW5wLT5zY3RwX2Fzb2NfbGlz
dCk7CisJCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQkJZ290byBub3RDb25uOworCQkJfQorCQkJ
Zm5kID0gMDsKKwkJCXNpbl9hID0gTlVMTDsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQlU
QUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCQkJc2lu
X2EgPSAoc3RydWN0IHNvY2thZGRyX2luICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlpZiAoc2lu
X2EgPT0gTlVMTCkKKwkJCQkJLyogdGhpcyB3aWxsIG1ha2UgY292ZXJpdHkgaGFwcHkgKi8KKwkJ
CQkJY29udGludWU7CisKKwkJCQlpZiAoc2luX2EtPnNpbl9mYW1pbHkgPT0gQUZfSU5FVCkgewor
CQkJCQlmbmQgPSAxOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQlpZiAoKCFmbmQpIHx8
IChzaW5fYSA9PSBOVUxMKSkgeworCQkJCS8qIHB1bnQgKi8KKwkJCQlTQ1RQX1RDQl9VTkxPQ0so
c3RjYik7CisJCQkJZ290byBub3RDb25uOworCQkJfQorCisJCQl2cmZfaWQgPSBpbnAtPmRlZl92
cmZfaWQ7CisJCQlzY3RwX2lmYSA9IHNjdHBfc291cmNlX2FkZHJlc3Nfc2VsZWN0aW9uKGlucCwK
KwkJCQkJCQkJIHN0Y2IsCisJCQkJCQkJCSAoc2N0cF9yb3V0ZV90ICopJm5ldC0+cm8sCisJCQkJ
CQkJCSBuZXQsIDAsIHZyZl9pZCk7CisJCQlpZiAoc2N0cF9pZmEpIHsKKwkJCQlzaW4tPnNpbl9h
ZGRyID0gc2N0cF9pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyOworCQkJCXNjdHBfZnJlZV9pZmEo
c2N0cF9pZmEpOworCQkJfQorCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9IGVsc2Ugewor
CQkJLyogRm9yIHRoZSBib3VuZCBhbGwgY2FzZSB5b3UgZ2V0IGJhY2sgMCAqLworCW5vdENvbm46
CisJCQlzaW4tPnNpbl9hZGRyLnNfYWRkciA9IDA7CisJCX0KKworCX0gZWxzZSB7CisJCS8qIFRh
a2UgdGhlIGZpcnN0IElQdjQgYWRkcmVzcyBpbiB0aGUgbGlzdCAqLworCQlzdHJ1Y3Qgc2N0cF9s
YWRkciAqbGFkZHI7CisJCWludCBmbmQgPSAwOworCisJCUxJU1RfRk9SRUFDSChsYWRkciwgJmlu
cC0+c2N0cF9hZGRyX2xpc3QsIHNjdHBfbnh0X2FkZHIpIHsKKwkJCWlmIChsYWRkci0+aWZhLT5h
ZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQkJc3RydWN0IHNvY2thZGRyX2lu
ICpzaW5fYTsKKworCQkJCXNpbl9hID0gJmxhZGRyLT5pZmEtPmFkZHJlc3Muc2luOworCQkJCXNp
bi0+c2luX2FkZHIgPSBzaW5fYS0+c2luX2FkZHI7CisJCQkJZm5kID0gMTsKKwkJCQlicmVhazsK
KwkJCX0KKwkJfQorCQlpZiAoIWZuZCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQkJU0NUUF9GUkVFX1NP
TkFNRShzaW4pOworI2VuZGlmCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFTk9F
TlQpOworCQkJcmV0dXJuIChFTk9FTlQpOworCQl9CisJfQorCVNDVFBfSU5QX1JVTkxPQ0soaW5w
KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVm
aW5lZChfX1dpbmRvd3NfXykKKwkoKmFkZHIpID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjsKKyNl
bmRpZgorCXJldHVybiAoMCk7Cit9CisKK2ludAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorc2N0cF9wZWVyYWRk
cihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqYWRkcikKK3sKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW4gKnNpbjsKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKQorc2N0cF9wZWVyYWRk
cihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN0cnVjdCBz
b2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHI7CisjZWxzZQorc2N0
cF9wZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1
Y3Qgc29ja2FkZHJfaW4gKnNpbiA9IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7CisK
KyNlbmRpZgorCWludCBmbmQ7CisJc3RydWN0IHNvY2thZGRyX2luICpzaW5fYTsKKwlzdHJ1Y3Qg
c2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9u
ZXRzICpuZXQ7CisKKwkvKiBEbyB0aGUgbWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLiAq
LworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZp
bmVkKF9fV2luZG93c19fKQorCVNDVFBfTUFMTE9DX1NPTkFNRShzaW4sIHN0cnVjdCBzb2NrYWRk
cl9pbiAqLCBzaXplb2YgKnNpbik7CisJaWYgKHNpbiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT01F
TSk7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKKwltZW1zZXQoc2luLCAwLCBzaXplb2YoKnNp
bikpOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luKTsKKwltZW1zZXQo
c2luLCAwLCBzaXplb2YoKnNpbikpOworI2VuZGlmCisJc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5F
VDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwlzaW4tPnNpbl9sZW4gPSBzaXplb2YoKnNpbik7Cisj
ZW5kaWYKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKChp
bnAgPT0gTlVMTCkgfHwKKwkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19D
T05ORUNURUQpID09IDApKSB7CisJCS8qIFVEUCB0eXBlIGFuZCBsaXN0ZW5lcnMgd2lsbCBkcm9w
IG91dCBoZXJlICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExF
X18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCVNDVFBfRlJFRV9TT05BTUUoc2luKTsKKyNl
bmRpZgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBfVVNSUkVRLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX0lO
UF9STE9DSyhpbnApOworCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsK
KwlpZiAoc3RjYikgeworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCX0KKwlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18p
IHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZS
RUVfU09OQU1FKHNpbik7CisjZW5kaWYKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJuIChFQ09OTlJF
U0VUKTsKKwl9CisJZm5kID0gMDsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7CisJCXNpbl9hID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZuZXQtPnJv
Ll9sX2FkZHI7CisJCWlmIChzaW5fYS0+c2luX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlmbmQg
PSAxOworCQkJc2luLT5zaW5fcG9ydCA9IHN0Y2ItPnJwb3J0OworCQkJc2luLT5zaW5fYWRkciA9
IHNpbl9hLT5zaW5fYWRkcjsKKwkJCWJyZWFrOworCQl9CisJfQorCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwlpZiAoIWZuZCkgeworCQkvKiBObyBJUHY0IGFkZHJlc3MgKi8KKyNpZiBkZWZpbmVk
KF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3Nf
XykKKwkJU0NUUF9GUkVFX1NPTkFNRShzaW4pOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVOT0VOVCk7CisJCXJl
dHVybiAoRU5PRU5UKTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJKCphZGRyKSA9IChzdHJ1Y3Qgc29j
a2FkZHIgKilzaW47CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCitz
dHJ1Y3QgcHJfdXNycmVxcyBzY3RwX3VzcnJlcXMgPSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykKKwkucHJ1X2Fib3J0ID0gc2N0cF9hYm9ydCwKKwkucHJ1X2FjY2VwdCA9IHNjdHBfYWNjZXB0
LAorCS5wcnVfYXR0YWNoID0gc2N0cF9hdHRhY2gsCisJLnBydV9iaW5kID0gc2N0cF9iaW5kLAor
CS5wcnVfY29ubmVjdCA9IHNjdHBfY29ubmVjdCwKKwkucHJ1X2NvbnRyb2wgPSBpbl9jb250cm9s
LAorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDY5MDAwMAorCS5wcnVfY2xvc2UgPSBzY3RwX2Ns
b3NlLAorCS5wcnVfZGV0YWNoID0gc2N0cF9jbG9zZSwKKwkucHJ1X3NvcG9sbCA9IHNvcG9sbF9n
ZW5lcmljLAorCS5wcnVfZmx1c2ggPSBzY3RwX2ZsdXNoLAorI2Vsc2UKKwkucHJ1X2RldGFjaCA9
IHNjdHBfZGV0YWNoLAorCS5wcnVfc29wb2xsID0gc29wb2xsLAorI2VuZGlmCisJLnBydV9kaXNj
b25uZWN0ID0gc2N0cF9kaXNjb25uZWN0LAorCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0ZW4sCisJ
LnBydV9wZWVyYWRkciA9IHNjdHBfcGVlcmFkZHIsCisJLnBydV9zZW5kID0gc2N0cF9zZW5kbSwK
KwkucHJ1X3NodXRkb3duID0gc2N0cF9zaHV0ZG93biwKKwkucHJ1X3NvY2thZGRyID0gc2N0cF9p
bmdldGFkZHIsCisJLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKKwkucHJ1X3NvcmVjZWl2ZSA9
IHNjdHBfc29yZWNlaXZlCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkucHJ1X2Fib3J0ID0g
c2N0cF9hYm9ydCwKKwkucHJ1X2FjY2VwdCA9IHNjdHBfYWNjZXB0LAorCS5wcnVfYXR0YWNoID0g
c2N0cF9hdHRhY2gsCisJLnBydV9iaW5kID0gc2N0cF9iaW5kLAorCS5wcnVfY29ubmVjdCA9IHNj
dHBfY29ubmVjdCwKKwkucHJ1X2Nvbm5lY3QyID0gcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCisJLnBy
dV9jb250cm9sID0gaW5fY29udHJvbCwKKwkucHJ1X2RldGFjaCA9IHNjdHBfZGV0YWNoLAorCS5w
cnVfZGlzY29ubmVjdCA9IHNjdHBfZGlzY29ubmVjdCwKKwkucHJ1X2xpc3RlbiA9IHNjdHBfbGlz
dGVuLAorCS5wcnVfcGVlcmFkZHIgPSBzY3RwX3BlZXJhZGRyLAorCS5wcnVfcmN2ZCA9IE5VTEws
CisJLnBydV9yY3Zvb2IgPSBwcnVfcmN2b29iX25vdHN1cHAsCisJLnBydV9zZW5kID0gc2N0cF9z
ZW5kbSwKKwkucHJ1X3NlbnNlID0gcHJ1X3NlbnNlX251bGwsCisJLnBydV9zaHV0ZG93biA9IHNj
dHBfc2h1dGRvd24sCisJLnBydV9zb2NrYWRkciA9IHNjdHBfaW5nZXRhZGRyLAorCS5wcnVfc29z
ZW5kID0gc2N0cF9zb3NlbmQsCisJLnBydV9zb3JlY2VpdmUgPSBzY3RwX3NvcmVjZWl2ZSwKKwku
cHJ1X3NvcG9sbCA9IHNvcG9sbAorI2VsaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlzY3RwX2Fi
b3J0LAorCXNjdHBfYWNjZXB0LAorCXNjdHBfYXR0YWNoLAorCXNjdHBfYmluZCwKKwlzY3RwX2Nv
bm5lY3QsCisJcHJ1X2Nvbm5lY3QyX25vdHN1cHAsCisJTlVMTCwKKwlOVUxMLAorCXNjdHBfZGlz
Y29ubmVjdCwKKwlzY3RwX2xpc3RlbiwKKwlzY3RwX3BlZXJhZGRyLAorCU5VTEwsCisJcHJ1X3Jj
dm9vYl9ub3RzdXBwLAorCU5VTEwsCisJcHJ1X3NlbnNlX251bGwsCisJc2N0cF9zaHV0ZG93biwK
KwlzY3RwX2ZsdXNoLAorCXNjdHBfaW5nZXRhZGRyLAorCXNjdHBfc29zZW5kLAorCXNjdHBfc29y
ZWNlaXZlLAorCXNvcG9sbF9nZW5lcmljLAorCU5VTEwsCisJc2N0cF9jbG9zZQorI2VuZGlmCit9
OworI2VsaWYgIWRlZmluZWQoX19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
aW50CitzY3RwX3VzcnJlcShzbywgcmVxLCBtLCBuYW0sIGNvbnRyb2wpCisJc3RydWN0IHNvY2tl
dCAqc287CisJaW50IHJlcTsKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm5hbSwgKmNvbnRyb2w7Cit7CisJ
c3RydWN0IHByb2MgKnAgPSBjdXJwcm9jOworCXVpbnQzMl90IHZyZl9pZDsKKwlzdHJ1Y3Qgc2N0
cF92cmYgKnZyZjsKKwlpbnQgZXJyb3I7CisJaW50IGZhbWlseTsKKwlzdHJ1Y3Qgc2N0cF9pbnBj
YiAqaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsKKworCWVycm9yID0gMDsK
KwlmYW1pbHkgPSBzby0+c29fcHJvdG8tPnByX2RvbWFpbi0+ZG9tX2ZhbWlseTsKKwlpZiAocmVx
ID09IFBSVV9DT05UUk9MKSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZfSU5FVDoK
KwkJCWVycm9yID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAorCQkJICAg
IChzdHJ1Y3QgaWZuZXQgKiljb250cm9sKTsKKwkJCWJyZWFrOworI2lmZGVmIElORVQ2CisJCWNh
c2UgUEZfSU5FVDY6CisJCQllcnJvciA9IGluNl9jb250cm9sKHNvLCAobG9uZyltLCAoY2FkZHJf
dCluYW0sCisJCQkgICAgKHN0cnVjdCBpZm5ldCAqKWNvbnRyb2wsIHApOworCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9SVCk7CisJCQllcnJvciA9IEVBRk5P
U1VQUE9SVDsKKwkJfQorCQlyZXR1cm4gKGVycm9yKTsKKwl9CisJc3dpdGNoIChyZXEpIHsKKwlj
YXNlIFBSVV9BVFRBQ0g6CisJCWVycm9yID0gc2N0cF9hdHRhY2goc28sIGZhbWlseSwgcCk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX0RFVEFDSDoKKwkJZXJyb3IgPSBzY3RwX2RldGFjaChzbyk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX0JJTkQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9M
VFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSwgRUlO
VkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCQllcnJvciA9IHNjdHBfYmluZChzbywg
bmFtLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfTElTVEVOOgorCQllcnJvciA9IHNjdHBfbGlz
dGVuKHNvLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfQ09OTkVDVDoKKwkJaWYgKG5hbSA9PSBO
VUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9N
X1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9y
ID0gc2N0cF9jb25uZWN0KHNvLCBuYW0sIHApOworCQlicmVhazsKKwljYXNlIFBSVV9ESVNDT05O
RUNUOgorCQllcnJvciA9IHNjdHBfZGlzY29ubmVjdChzbyk7CisJCWJyZWFrOworCWNhc2UgUFJV
X0FDQ0VQVDoKKwkJaWYgKG5hbSA9PSBOVUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJu
IChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7CisJCWJyZWFr
OworCWNhc2UgUFJVX1NIVVRET1dOOgorCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28pOworCQli
cmVhazsKKworCWNhc2UgUFJVX1JDVkQ6CisJCS8qCisJCSAqIEZvciBPcGVuIGFuZCBOZXQgQlNE
LCB0aGlzIGlzIHJlYWwgdWdseS4gVGhlIG1idWYgKm5hbQorCQkgKiB0aGF0IGlzIHBhc3NlZCAo
Ynkgc29yZWNlaXZlKCkpIGlzIHRoZSBpbnQgZmxhZ3MgYyBhc3QgYXMKKwkJICogYSAobWJ1ZiAq
KSB5dWNrIQorCQkgKi8KKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5EOgorCQkvKiBGbGFncyBh
cmUgaWdub3JlZCAqLworCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHI7CisKKwkJCWlmIChu
YW0gPT0gTlVMTCkKKwkJCQlhZGRyID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlhZGRyID0gbXRvZChu
YW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKKworCQkJZXJyb3IgPSBzY3RwX3NlbmRtKHNvLCAwLCBt
LCBhZGRyLCBjb250cm9sLCBwKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFBSVV9BQk9SVDoKKwkJ
ZXJyb3IgPSBzY3RwX2Fib3J0KHNvKTsKKwkJYnJlYWs7CisKKwljYXNlIFBSVV9TRU5TRToKKwkJ
ZXJyb3IgPSAwOworCQlicmVhazsKKwljYXNlIFBSVV9SQ1ZPT0I6CisJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUF9VU1JSRVEsIEVBRk5PU1VQUE9S
VCk7CisJCWVycm9yID0gRUFGTk9TVVBQT1JUOworCQlicmVhazsKKwljYXNlIFBSVV9TRU5ET09C
OgorCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBf
VVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7
CisJY2FzZSBQUlVfUEVFUkFERFI6CisJCWVycm9yID0gc2N0cF9wZWVyYWRkcihzbywgbmFtKTsK
KwkJYnJlYWs7CisJY2FzZSBQUlVfU09DS0FERFI6CisJCWVycm9yID0gc2N0cF9pbmdldGFkZHIo
c28sIG5hbSk7CisJCWJyZWFrOworCWNhc2UgUFJVX1NMT1dUSU1POgorCQllcnJvciA9IDA7CisJ
CWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
I2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorcmVnaXN0
ZXJfcmVjdl9jYihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgaW50ICgqcmVj
ZWl2ZV9jYikoc3RydWN0IHNvY2tldCAqc29jaywgdW5pb24gc2N0cF9zb2Nrc3RvcmUgYWRkciwg
dm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3Rw
X3JjdmluZm8sIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pKQoreworCXN0cnVjdCBzY3RwX2lu
cGNiICppbnA7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKikgc28tPnNvX3BjYjsKKwlp
ZiAoaW5wID09IE5VTEwpIHsKKwkJcmV0dXJuICgwKTsKKwl9CisJU0NUUF9JTlBfV0xPQ0soaW5w
KTsKKwlpbnAtPnJlY3ZfY2FsbGJhY2sgPSByZWNlaXZlX2NiOworCVNDVFBfSU5QX1dVTkxPQ0so
aW5wKTsKKwlyZXR1cm4gKDEpOworfQorCitpbnQKK3JlZ2lzdGVyX3NlbmRfY2Ioc3RydWN0IHNv
Y2tldCAqc28sIHVpbnQzMl90IHNiX3RocmVzaG9sZCwgaW50ICgqc2VuZF9jYikoc3RydWN0IHNv
Y2tldCAqc29jaywgdWludDMyX3Qgc2JfZnJlZSkpCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlu
cDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKSBzby0+c29fcGNiOworCWlmIChpbnAg
PT0gTlVMTCkgeworCQlyZXR1cm4gKDApOworCX0KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlu
cC0+c2VuZF9jYWxsYmFjayA9IHNlbmRfY2I7CisJaW5wLT5zZW5kX3NiX3RocmVzaG9sZCA9IHNi
X3RocmVzaG9sZDsKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJLyogRklYTUUgY2hhbmdlIHRv
IGN1cnJlbnQgYW1vdW50IGZyZWUuIFRoaXMgd2lsbCBiZSB0aGUgZnVsbCBidWZmZXIKKwkgKiB0
aGUgZmlyc3QgdGltZSB0aGlzIGlzIHJlZ2lzdGVyZWQgYnV0IGl0IGNvdWxkIGJlIG9ubHkgYSBw
b3J0aW9uCisJICogb2YgdGhlIHNlbmQgYnVmZmVyIGlmIHRoaXMgaXMgY2FsbGVkIGEgc2Vjb25k
IHRpbWUgZS5nLiBpZiB0aGUKKwkgKiB0aHJlc2hvbGQgY2hhbmdlcy4KKwkgKi8KKwlyZXR1cm4g
KDEpOworfQorCitpbnQKK3JlZ2lzdGVyX3VscF9pbmZvIChzdHJ1Y3Qgc29ja2V0ICpzbywgdm9p
ZCAqdWxwX2luZm8pCit7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKSBzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlyZXR1
cm4gKDApOworCX0KKwlTQ1RQX0lOUF9XTE9DSyhpbnApOworCWlucC0+dWxwX2luZm8gPSB1bHBf
aW5mbzsKKwlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJcmV0dXJuICgxKTsKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfdmFyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF92YXIuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQz
NGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5iYzRhZmU5NWYxZjA5ZGNkNzJmZWZmNWIzMmEzOTU3
OWU2ODliNzQwIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNl
L3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF92
YXIuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF92YXIuaApAQCAtMCww
ICsxLDUxOSBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNl
CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDgsIGJ5IENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAwOC0yMDEyLCBieSBSYW5k
YWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgt
MjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisg
KiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lzdGVtcywgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor
ICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJl
ZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwX3Zhci5oIDMxNzQ1NyAyMDE3LTA0LTI2IDE5OjI2
OjQwWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElORVRfU0NUUF9WQVJfSF8K
KyNkZWZpbmUgX05FVElORVRfU0NUUF9WQVJfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91
aW8uaD4KKworI2lmIGRlZmluZWQoX0tFUk5FTCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoX19XaW5kb3dzX18pCitleHRlcm4gc3RydWN0IHByX3VzcnJlcXMgc2N0cF91c3JyZXFzOwor
I2VuZGlmCisKKworI2RlZmluZSBzY3RwX2ZlYXR1cmVfb24oaW5wLCBmZWF0dXJlKSAgKGlucC0+
c2N0cF9mZWF0dXJlcyB8PSBmZWF0dXJlKQorI2RlZmluZSBzY3RwX2ZlYXR1cmVfb2ZmKGlucCwg
ZmVhdHVyZSkgKGlucC0+c2N0cF9mZWF0dXJlcyAmPSB+ZmVhdHVyZSkKKyNkZWZpbmUgc2N0cF9p
c19mZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgKChpbnAtPnNjdHBfZmVhdHVyZXMgJiBmZWF0dXJl
KSA9PSBmZWF0dXJlKQorI2RlZmluZSBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVyZSkg
KChpbnAtPnNjdHBfZmVhdHVyZXMgJiBmZWF0dXJlKSA9PSAwKQorCisjZGVmaW5lIHNjdHBfc3Rj
Yl9mZWF0dXJlX29uKGlucCwgc3RjYiwgZmVhdHVyZSkge1wKKwlpZiAoc3RjYikgeyBcCisJCXN0
Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyB8PSBmZWF0dXJlOyBcCisJfSBlbHNlIGlmIChpbnApIHsg
XAorCQlpbnAtPnNjdHBfZmVhdHVyZXMgfD0gZmVhdHVyZTsgXAorCX0gXAorfQorI2RlZmluZSBz
Y3RwX3N0Y2JfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBmZWF0dXJlKSB7XAorCWlmIChzdGNiKSB7
IFwKKwkJc3RjYi0+YXNvYy5zY3RwX2ZlYXR1cmVzICY9IH5mZWF0dXJlOyBcCisJfSBlbHNlIGlm
IChpbnApIHsgXAorCQlpbnAtPnNjdHBfZmVhdHVyZXMgJj0gfmZlYXR1cmU7IFwKKwl9IFwKK30K
KyNkZWZpbmUgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oaW5wLCBzdGNiLCBmZWF0dXJlKSBcCisJ
KCgoc3RjYiAhPSBOVUxMKSAmJiBcCisJICAoKHN0Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyAmIGZl
YXR1cmUpID09IGZlYXR1cmUpKSB8fCBcCisJICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5V
TEwpICYmIFwKKwkgICgoaW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gZmVhdHVyZSkp
KQorI2RlZmluZSBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoaW5wLCBzdGNiLCBmZWF0dXJlKSBc
CisJKCgoc3RjYiAhPSBOVUxMKSAmJiBcCisJICAoKHN0Y2ItPmFzb2Muc2N0cF9mZWF0dXJlcyAm
IGZlYXR1cmUpID09IDApKSB8fCBcCisJICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwp
ICYmIFwKKwkgICgoaW5wLT5zY3RwX2ZlYXR1cmVzICYgZmVhdHVyZSkgPT0gMCkpIHx8IFwKKwkg
KChzdGNiID09IE5VTEwpICYmIChpbnAgPT0gTlVMTCkpKQorCisvKiBtYW5hZ2luZyBtb2JpbGl0
eV9mZWF0dXJlIGluIGlucGNiIChieSBtaWNjaGllKSAqLworI2RlZmluZSBzY3RwX21vYmlsaXR5
X2ZlYXR1cmVfb24oaW5wLCBmZWF0dXJlKSAgKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyB8
PSBmZWF0dXJlKQorI2RlZmluZSBzY3RwX21vYmlsaXR5X2ZlYXR1cmVfb2ZmKGlucCwgZmVhdHVy
ZSkgKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyAmPSB+ZmVhdHVyZSkKKyNkZWZpbmUgc2N0
cF9pc19tb2JpbGl0eV9mZWF0dXJlX29uKGlucCwgZmVhdHVyZSkgKGlucC0+c2N0cF9tb2JpbGl0
eV9mZWF0dXJlcyAmIGZlYXR1cmUpCisjZGVmaW5lIHNjdHBfaXNfbW9iaWxpdHlfZmVhdHVyZV9v
ZmYoaW5wLCBmZWF0dXJlKSAoKGlucC0+c2N0cF9tb2JpbGl0eV9mZWF0dXJlcyAmIGZlYXR1cmUp
ID09IDApCisKKyNkZWZpbmUgc2N0cF9tYXhzcGFjZShzYikgKG1heCgoc2IpLT5zYl9oaXdhdCxT
Q1RQX01JTklNQUxfUldORCkpCisKKyNkZWZpbmUJc2N0cF9zYnNwYWNlKGFzb2MsIHNiKSAoKGxv
bmcpICgoc2N0cF9tYXhzcGFjZShzYikgPiAoYXNvYyktPnNiX2NjKSA/IChzY3RwX21heHNwYWNl
KHNiKSAtIChhc29jKS0+c2JfY2MpIDogMCkpCisKKyNkZWZpbmUJc2N0cF9zYnNwYWNlX2ZhaWxl
ZG1zZ3Moc2IpICgobG9uZykgKChzY3RwX21heHNwYWNlKHNiKSA+IChzYiktPnNiX2NjKSA/IChz
Y3RwX21heHNwYWNlKHNiKSAtIChzYiktPnNiX2NjKSA6IDApKQorCisjZGVmaW5lIHNjdHBfc2Jz
cGFjZV9zdWIoYSxiKSAoKChhKSA+IChiKSkgPyAoKGEpIC0gKGIpKSA6IDApCisKKy8qCisgKiBJ
IHRyaWVkIHRvIGNhY2hlIHRoZSByZWFkcSBlbnRyaWVzIGF0IG9uZSBwb2ludC4gQnV0IHRoZSBy
ZWFsaXR5CisgKiBpcyB0aGF0IGl0IGRpZCBub3QgYWRkIGFueSBwZXJmb3JtYW5jZSBzaW5jZSB0
aGlzIG1lYW50IHdlIGhhZCB0bworICogbG9jayB0aGUgU1RDQiBvbiByZWFkLiBBbmQgYXQgdGhh
dCBwb2ludCBvbmNlIHlvdSBoYXZlIHRvIGRvIGFuCisgKiBleHRyYSBsb2NrLCBpdCByZWFsbHkg
ZG9lcyBub3QgbWF0dGVyIGlmIHRoZSBsb2NrIGlzIGluIHRoZSBaT05FCisgKiBzdHVmZiBvciBp
biBvdXIgY29kZS4gTm90ZSB0aGF0IHRoaXMgc2FtZSBwcm9ibGVtIHdvdWxkIG9jY3VyIHdpdGgK
KyAqIGFuIG1idWYgY2FjaGUgYXMgd2VsbCBzbyBpdCBpcyBub3QgcmVhbGx5IHdvcnRoIGRvaW5n
LCBhdCBsZWFzdAorICogcmlnaHQgbm93IDotRAorICovCisjaWZkZWYgSU5WQVJJQU5UUworI2Rl
ZmluZSBzY3RwX2ZyZWVfYV9yZWFkcShfc3RjYiwgX3JlYWRxKSB7IFwKKwlpZiAoKF9yZWFkcSkt
Pm9uX3N0cm1fcSkgXAorCQlwYW5pYygiT24gc3RybSBxIHN0Y2I6JXAgcmVhZHE6JXAiLCAoX3N0
Y2IpLCAoX3JlYWRxKSk7IFwKKwlTQ1RQX1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9u
ZV9yZWFkcSksIChfcmVhZHEpKTsgXAorCVNDVFBfREVDUl9SRUFEUV9DT1VOVCgpOyBcCit9Cisj
ZWxzZQorI2RlZmluZSBzY3RwX2ZyZWVfYV9yZWFkcShfc3RjYiwgX3JlYWRxKSB7IFwKKwlTQ1RQ
X1pPTkVfRlJFRShTQ1RQX0JBU0VfSU5GTyhpcGlfem9uZV9yZWFkcSksIChfcmVhZHEpKTsgXAor
CVNDVFBfREVDUl9SRUFEUV9DT1VOVCgpOyBcCit9CisjZW5kaWYKKworI2RlZmluZSBzY3RwX2Fs
bG9jX2FfcmVhZHEoX3N0Y2IsIF9yZWFkcSkgeyBcCisJKF9yZWFkcSkgPSBTQ1RQX1pPTkVfR0VU
KFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX3JlYWRxKSwgc3RydWN0IHNjdHBfcXVldWVkX3RvX3Jl
YWQpOyBcCisJaWYgKChfcmVhZHEpKSB7IFwKKwkgICAgIFNDVFBfSU5DUl9SRUFEUV9DT1VOVCgp
OyBcCisJfSBcCit9CisKKyNkZWZpbmUgc2N0cF9mcmVlX2Ffc3RybW9xKF9zdGNiLCBfc3RybW9x
LCBfc29fbG9ja2VkKSB7IFwKKwlpZiAoKF9zdHJtb3EpLT5ob2xkc19rZXlfcmVmKSB7IFwKKwkJ
c2N0cF9hdXRoX2tleV9yZWxlYXNlKHN0Y2IsIHNwLT5hdXRoX2tleWlkLCBfc29fbG9ja2VkKTsg
XAorCQkoX3N0cm1vcSktPmhvbGRzX2tleV9yZWYgPSAwOyBcCisJfSBcCisJU0NUUF9aT05FX0ZS
RUUoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfc3RybW9xKSwgKF9zdHJtb3EpKTsgXAorCVNDVFBf
REVDUl9TVFJNT1FfQ09VTlQoKTsgXAorfQorCisjZGVmaW5lIHNjdHBfYWxsb2NfYV9zdHJtb3Eo
X3N0Y2IsIF9zdHJtb3EpIHsgXAorCShfc3RybW9xKSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfc3RybW9xKSwgc3RydWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcp
OyBcCisJaWYgKChfc3RybW9xKSkgeyBcCisJCW1lbXNldChfc3RybW9xLCAwLCBzaXplb2Yoc3Ry
dWN0IHNjdHBfc3RyZWFtX3F1ZXVlX3BlbmRpbmcpKTsgXAorCQlTQ1RQX0lOQ1JfU1RSTU9RX0NP
VU5UKCk7IFwKKwkJKF9zdHJtb3EpLT5ob2xkc19rZXlfcmVmID0gMDsgXAorCX0gXAorfQorCisj
ZGVmaW5lIHNjdHBfZnJlZV9hX2NodW5rKF9zdGNiLCBfY2hrLCBfc29fbG9ja2VkKSB7IFwKKwlp
ZiAoKF9jaGspLT5ob2xkc19rZXlfcmVmKSB7XAorCQlzY3RwX2F1dGhfa2V5X3JlbGVhc2UoKF9z
dGNiKSwgKF9jaGspLT5hdXRoX2tleWlkLCBfc29fbG9ja2VkKTsgXAorCQkoX2NoayktPmhvbGRz
X2tleV9yZWYgPSAwOyBcCisJfSBcCisJaWYgKF9zdGNiKSB7IFwKKwkJU0NUUF9UQ0JfTE9DS19B
U1NFUlQoKF9zdGNiKSk7IFwKKwkJaWYgKChfY2hrKS0+d2hvVG8pIHsgXAorCQkJc2N0cF9mcmVl
X3JlbW90ZV9hZGRyKChfY2hrKS0+d2hvVG8pOyBcCisJCQkoX2NoayktPndob1RvID0gTlVMTDsg
XAorCQl9IFwKKwkJaWYgKCgoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtfY250ID4gU0NUUF9CQVNF
X1NZU0NUTChzY3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0KSkgfHwgXAorCQkgICAgKFNDVFBfQkFT
RV9JTkZPKGlwaV9mcmVlX2NodW5rcykgPiBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfc3lzdGVtX2Zy
ZWVfcmVzY19saW1pdCkpKSB7IFwKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlw
aV96b25lX2NodW5rKSwgKF9jaGspKTsgXAorCQkJU0NUUF9ERUNSX0NIS19DT1VOVCgpOyBcCisJ
CX0gZWxzZSB7IFwKKwkJCVRBSUxRX0lOU0VSVF9UQUlMKCYoX3N0Y2IpLT5hc29jLmZyZWVfY2h1
bmtzLCAoX2NoayksIHNjdHBfbmV4dCk7IFwKKwkJCShfc3RjYiktPmFzb2MuZnJlZV9jaHVua19j
bnQrKzsgXAorCQkJYXRvbWljX2FkZF9pbnQoJlNDVFBfQkFTRV9JTkZPKGlwaV9mcmVlX2NodW5r
cyksIDEpOyBcCisJCX0gXAorCX0gZWxzZSB7IFwKKwkJU0NUUF9aT05FX0ZSRUUoU0NUUF9CQVNF
X0lORk8oaXBpX3pvbmVfY2h1bmspLCAoX2NoaykpOyBcCisJCVNDVFBfREVDUl9DSEtfQ09VTlQo
KTsgXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfYWxsb2NfYV9jaHVuayhfc3RjYiwgX2Noaykg
eyBcCisJaWYgKFRBSUxRX0VNUFRZKCYoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtzKSkgeyBcCisJ
CShfY2hrKSA9IFNDVFBfWk9ORV9HRVQoU0NUUF9CQVNFX0lORk8oaXBpX3pvbmVfY2h1bmspLCBz
dHJ1Y3Qgc2N0cF90bWl0X2NodW5rKTsgXAorCQlpZiAoKF9jaGspKSB7IFwKKwkJCVNDVFBfSU5D
Ul9DSEtfQ09VTlQoKTsgXAorCQkJKF9jaGspLT53aG9UbyA9IE5VTEw7IFwKKwkJCShfY2hrKS0+
aG9sZHNfa2V5X3JlZiA9IDA7IFwKKwkJfSBcCisJfSBlbHNlIHsgXAorCQkoX2NoaykgPSBUQUlM
UV9GSVJTVCgmKF9zdGNiKS0+YXNvYy5mcmVlX2NodW5rcyk7IFwKKwkJVEFJTFFfUkVNT1ZFKCYo
X3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtzLCAoX2NoayksIHNjdHBfbmV4dCk7IFwKKwkJYXRvbWlj
X3N1YnRyYWN0X2ludCgmU0NUUF9CQVNFX0lORk8oaXBpX2ZyZWVfY2h1bmtzKSwgMSk7IFwKKwkJ
KF9jaGspLT5ob2xkc19rZXlfcmVmID0gMDsgXAorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19jYWNo
ZWRfY2hrKTsgXAorCQkoX3N0Y2IpLT5hc29jLmZyZWVfY2h1bmtfY250LS07IFwKKwl9IFwKK30K
KworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNTAwMDAw
CisKKyNkZWZpbmUgc2N0cF9mcmVlX3JlbW90ZV9hZGRyKF9fbmV0KSB7IFwKKwlpZiAoKF9fbmV0
KSkgeyAgXAorCQlpZiAoU0NUUF9ERUNSRU1FTlRfQU5EX0NIRUNLX1JFRkNPVU5UKCYoX19uZXQp
LT5yZWZfY291bnQpKSB7IFwKKwkJCSh2b2lkKVNDVFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+
cnh0X3RpbWVyLnRpbWVyKTsgXAorCQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCYoX19uZXQp
LT5wbXR1X3RpbWVyLnRpbWVyKTsgXAorCQkJKHZvaWQpU0NUUF9PU19USU1FUl9TVE9QKCYoX19u
ZXQpLT5oYl90aW1lci50aW1lcik7IFwKKwkJCWlmICgoX19uZXQpLT5yby5yb19ydCkgeyBcCisJ
CQkJUlRGUkVFKChfX25ldCktPnJvLnJvX3J0KTsgXAorCQkJCShfX25ldCktPnJvLnJvX3J0ID0g
TlVMTDsgXAorCQkJfSBcCisJCQlpZiAoKF9fbmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQpIHsgXAor
CQkJCXNjdHBfZnJlZV9pZmEoKF9fbmV0KS0+cm8uX3NfYWRkcik7IFwKKwkJCQkoX19uZXQpLT5y
by5fc19hZGRyID0gTlVMTDsgXAorCQkJfSBcCisJCQkoX19uZXQpLT5zcmNfYWRkcl9zZWxlY3Rl
ZCA9IDA7IFwKKwkJCShfX25ldCktPmRlc3Rfc3RhdGUgJj0gflNDVFBfQUREUl9SRUFDSEFCTEU7
IFwKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZPKGlwaV96b25lX25ldCksIChfX25l
dCkpOyBcCisJCQlTQ1RQX0RFQ1JfUkFERFJfQ09VTlQoKTsgXAorCQl9IFwKKwl9IFwKK30KKwor
I2RlZmluZSBzY3RwX3NiZnJlZShjdGwsIHN0Y2IsIHNiLCBtKSB7IFwKKwlTQ1RQX1NBVkVfQVRP
TUlDX0RFQ1JFTUVOVCgmKHNiKS0+c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCVNDVFBf
U0FWRV9BVE9NSUNfREVDUkVNRU5UKCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKCgo
Y3RsKS0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmIHN0Y2IpIHtcCisJCVNDVFBfU0FWRV9BVE9N
SUNfREVDUkVNRU5UKCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAor
CQlTQ1RQX1NBVkVfQVRPTUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJv
bF9sZW4sIE1TSVpFKTsgXAorCX0gXAorCWlmIChTQ1RQX0JVRl9UWVBFKG0pICE9IE1UX0RBVEEg
JiYgU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9IRUFERVIgJiYgXAorCSAgICBTQ1RQX0JVRl9UWVBF
KG0pICE9IE1UX09PQkRBVEEpIFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHNiKS0+c2JfY3Rs
LFNDVFBfQlVGX0xFTigobSkpKTsgXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBz
YiwgbSkgeyBcCisJYXRvbWljX2FkZF9pbnQoJihzYiktPnNiX2NjLFNDVFBfQlVGX0xFTigobSkp
KTsgXAorCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9tYmNudCwgTVNJWkUpOyBcCisJaWYgKHN0
Y2IpIHsgXAorCQlhdG9taWNfYWRkX2ludCgmKHN0Y2IpLT5hc29jLnNiX2NjLCBTQ1RQX0JVRl9M
RU4oKG0pKSk7IFwKKwkJYXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5teV9yd25kX2NvbnRy
b2xfbGVuLCBNU0laRSk7IFwKKwl9IFwKKwlpZiAoU0NUUF9CVUZfVFlQRShtKSAhPSBNVF9EQVRB
ICYmIFNDVFBfQlVGX1RZUEUobSkgIT0gTVRfSEVBREVSICYmIFwKKwkgICAgU0NUUF9CVUZfVFlQ
RShtKSAhPSBNVF9PT0JEQVRBKSBcCisJCWF0b21pY19hZGRfaW50KCYoc2IpLT5zYl9jdGwsU0NU
UF9CVUZfTEVOKChtKSkpOyBcCit9CisKKyNlbHNlCQkJCS8qIEZyZWVCU0QgVmVyc2lvbiA8PSA1
MDAwMDAgb3Igbm9uLUZyZWVCU0QgKi8KKworI2RlZmluZSBzY3RwX2ZyZWVfcmVtb3RlX2FkZHIo
X19uZXQpIHsgXAorCWlmICgoX19uZXQpKSB7IFwKKwkJaWYgKFNDVFBfREVDUkVNRU5UX0FORF9D
SEVDS19SRUZDT1VOVCgmKF9fbmV0KS0+cmVmX2NvdW50KSkgeyBcCisJCQkodm9pZClTQ1RQX09T
X1RJTUVSX1NUT1AoJihfX25ldCktPnJ4dF90aW1lci50aW1lcik7IFwKKwkJCSh2b2lkKVNDVFBf
T1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+cG10dV90aW1lci50aW1lcik7IFwKKwkJCSh2b2lkKVND
VFBfT1NfVElNRVJfU1RPUCgmKF9fbmV0KS0+aGJfdGltZXIudGltZXIpOyBcCisJCQlpZiAoKF9f
bmV0KS0+cm8ucm9fcnQpIHsgXAorCQkJCVJURlJFRSgoX19uZXQpLT5yby5yb19ydCk7IFwKKwkJ
CQkoX19uZXQpLT5yby5yb19ydCA9IE5VTEw7IFwKKwkJCX0gXAorCQkJaWYgKChfX25ldCktPnNy
Y19hZGRyX3NlbGVjdGVkKSB7IFwKKwkJCQlzY3RwX2ZyZWVfaWZhKChfX25ldCktPnJvLl9zX2Fk
ZHIpOyBcCisJCQkJKF9fbmV0KS0+cm8uX3NfYWRkciA9IE5VTEw7IFwKKwkJCX0gXAorCQkJKF9f
bmV0KS0+c3JjX2FkZHJfc2VsZWN0ZWQgPSAwOyBcCisJCQkoX19uZXQpLT5kZXN0X3N0YXRlICY9
flNDVFBfQUREUl9SRUFDSEFCTEU7IFwKKwkJCVNDVFBfWk9ORV9GUkVFKFNDVFBfQkFTRV9JTkZP
KGlwaV96b25lX25ldCksIChfX25ldCkpOyBcCisJCQlTQ1RQX0RFQ1JfUkFERFJfQ09VTlQoKTsg
XAorCQl9IFwKKwl9IFwKK30KKworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorI2RlZmluZSBzY3Rw
X3NiZnJlZShjdGwsIHN0Y2IsIHNiLCBtKSB7IFwKKwlpZiAoKHNiKS0+c2JfY2MgPj0gKHVpbnQz
Ml90KVNDVFBfQlVGX0xFTigobSkpKSB7IFwKKwkJYXRvbWljX3N1YnRyYWN0X2ludCgmKHNiKS0+
c2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCX0gZWxzZSB7IFwKKwkJKHNiKS0+c2JfY2Mg
PSAwOyBcCisJfSBcCisJaWYgKCgoY3RsKS0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmIHN0Y2Ip
IHsgXAorCQlpZiAoKHN0Y2IpLT5hc29jLnNiX2NjID49ICh1aW50MzJfdClTQ1RQX0JVRl9MRU4o
KG0pKSkgeyBcCisJCQlhdG9taWNfc3VidHJhY3RfaW50KCYoc3RjYiktPmFzb2Muc2JfY2MsIFND
VFBfQlVGX0xFTigobSkpKTsgXAorCQl9IGVsc2UgeyBcCisJCQkoc3RjYiktPmFzb2Muc2JfY2Mg
PSAwOyBcCisJCX0gXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwg
bSkgeyBcCisJYXRvbWljX2FkZF9pbnQoJihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7
IFwKKwlpZiAoc3RjYikgeyBcCisJCWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2Muc2JfY2Ms
IFNDVFBfQlVGX0xFTigobSkpKTsgXAorCX0gXAorfQorCisjZWxzZQorCisjZGVmaW5lIHNjdHBf
c2JmcmVlKGN0bCwgc3RjYiwgc2IsIG0pIHsgXAorCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5U
KCYoc2IpLT5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBcCisJU0NUUF9TQVZFX0FUT01JQ19E
RUNSRU1FTlQoJihzYiktPnNiX21iY250LCBNU0laRSk7IFwKKwlpZiAoKChjdGwpLT5kb19ub3Rf
cmVmX3N0Y2IgPT0gMCkgJiYgc3RjYikgeyBcCisJCVNDVFBfU0FWRV9BVE9NSUNfREVDUkVNRU5U
KCYoc3RjYiktPmFzb2Muc2JfY2MsIFNDVFBfQlVGX0xFTigobSkpKTsgXAorCQlTQ1RQX1NBVkVf
QVRPTUlDX0RFQ1JFTUVOVCgmKHN0Y2IpLT5hc29jLm15X3J3bmRfY29udHJvbF9sZW4sIE1TSVpF
KTsgXAorCX0gXAorfQorCisjZGVmaW5lIHNjdHBfc2JhbGxvYyhzdGNiLCBzYiwgbSkgeyBcCisJ
YXRvbWljX2FkZF9pbnQoJihzYiktPnNiX2NjLCBTQ1RQX0JVRl9MRU4oKG0pKSk7IFwKKwlhdG9t
aWNfYWRkX2ludCgmKHNiKS0+c2JfbWJjbnQsIE1TSVpFKTsgXAorCWlmIChzdGNiKSB7IFwKKwkJ
YXRvbWljX2FkZF9pbnQoJihzdGNiKS0+YXNvYy5zYl9jYywgU0NUUF9CVUZfTEVOKChtKSkpOyBc
CisJCWF0b21pY19hZGRfaW50KCYoc3RjYiktPmFzb2MubXlfcnduZF9jb250cm9sX2xlbiwgTVNJ
WkUpOyBcCisJfSBcCit9CisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIHNjdHBfdWNvdW50X2lu
Y3IodmFsKSB7IFwKKwl2YWwrKzsgXAorfQorCisjZGVmaW5lIHNjdHBfdWNvdW50X2RlY3IodmFs
KSB7IFwKKwlpZiAodmFsID4gMCkgeyBcCisJCXZhbC0tOyBcCisJfSBlbHNlIHsgXAorCQl2YWwg
PSAwOyBcCisJfSBcCit9CisKKyNkZWZpbmUgc2N0cF9tYnVmX2NydXNoKGRhdGEpIGRvIHsgXAor
CXN0cnVjdCBtYnVmICpfbTsgXAorCV9tID0gKGRhdGEpOyBcCisJd2hpbGUgKF9tICYmIChTQ1RQ
X0JVRl9MRU4oX20pID09IDApKSB7IFwKKwkJKGRhdGEpICA9IFNDVFBfQlVGX05FWFQoX20pOyBc
CisJCVNDVFBfQlVGX05FWFQoX20pID0gTlVMTDsgXAorCQlzY3RwX21fZnJlZShfbSk7IFwKKwkJ
X20gPSAoZGF0YSk7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2N0cF9mbGlnaHRf
c2l6ZV9kZWNyZWFzZSh0cDEpIGRvIHsgXAorCWlmICh0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA+
PSB0cDEtPmJvb2tfc2l6ZSkgXAorCQl0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSAtPSB0cDEtPmJv
b2tfc2l6ZTsgXAorCWVsc2UgXAorCQl0cDEtPndob1RvLT5mbGlnaHRfc2l6ZSA9IDA7IFwKK30g
d2hpbGUgKDApCisKKyNkZWZpbmUgc2N0cF9mbGlnaHRfc2l6ZV9pbmNyZWFzZSh0cDEpIGRvIHsg
XAorCSh0cDEpLT53aG9Uby0+ZmxpZ2h0X3NpemUgKz0gKHRwMSktPmJvb2tfc2l6ZTsgXAorfSB3
aGlsZSAoMCkKKworI2lmZGVmIFNDVFBfRlNfU1BFQ19MT0cKKyNkZWZpbmUgc2N0cF90b3RhbF9m
bGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKSBkbyB7IFwKKwlpZiAoc3RjYi0+YXNvYy5mc19pbmRl
eCA+IFNDVFBfRlNfU1BFQ19MT0dfU0laRSkgXAorCQlzdGNiLT5hc29jLmZzX2luZGV4ID0gMDtc
CisJc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS50b3RhbF9mbGlnaHQgPSBz
dGNiLT5hc29jLnRvdGFsX2ZsaWdodDsgXAorCXN0Y2ItPmFzb2MuZnNsb2dbc3RjYi0+YXNvYy5m
c19pbmRleF0udHNuID0gdHAxLT5yZWMuZGF0YS50c247IFwKKwlzdGNiLT5hc29jLmZzbG9nW3N0
Y2ItPmFzb2MuZnNfaW5kZXhdLmJvb2sgPSB0cDEtPmJvb2tfc2l6ZTsgXAorCXN0Y2ItPmFzb2Mu
ZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uc2VudCA9IHRwMS0+c2VudDsgXAorCXN0Y2ItPmFz
b2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uaW5jciA9IDA7IFwKKwlzdGNiLT5hc29jLmZz
bG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLmRlY3IgPSAxOyBcCisJc3RjYi0+YXNvYy5mc19pbmRl
eCsrOyBcCisJdHAxLT53aW5kb3dfcHJvYmUgPSAwOyBcCisJaWYgKHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0ID49IHRwMS0+Ym9va19zaXplKSB7IFwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQg
LT0gdHAxLT5ib29rX3NpemU7IFwKKwkJaWYgKHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50
ID4gMCkgXAorCQkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291bnQtLTsgXAorCX0gZWxzZSB7
IFwKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHQgPSAwOyBcCisJCXN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0X2NvdW50ID0gMDsgXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzY3RwX3Rv
dGFsX2ZsaWdodF9pbmNyZWFzZShzdGNiLCB0cDEpIGRvIHsgXAorCWlmIChzdGNiLT5hc29jLmZz
X2luZGV4ID4gU0NUUF9GU19TUEVDX0xPR19TSVpFKSBcCisJCXN0Y2ItPmFzb2MuZnNfaW5kZXgg
PSAwO1wKKwlzdGNiLT5hc29jLmZzbG9nW3N0Y2ItPmFzb2MuZnNfaW5kZXhdLnRvdGFsX2ZsaWdo
dCA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0OyBcCisJc3RjYi0+YXNvYy5mc2xvZ1tzdGNiLT5h
c29jLmZzX2luZGV4XS50c24gPSB0cDEtPnJlYy5kYXRhLnRzbjsgXAorCXN0Y2ItPmFzb2MuZnNs
b2dbc3RjYi0+YXNvYy5mc19pbmRleF0uYm9vayA9IHRwMS0+Ym9va19zaXplOyBcCisJc3RjYi0+
YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS5zZW50ID0gdHAxLT5zZW50OyBcCisJc3Rj
Yi0+YXNvYy5mc2xvZ1tzdGNiLT5hc29jLmZzX2luZGV4XS5pbmNyID0gMTsgXAorCXN0Y2ItPmFz
b2MuZnNsb2dbc3RjYi0+YXNvYy5mc19pbmRleF0uZGVjciA9IDA7IFwKKwlzdGNiLT5hc29jLmZz
X2luZGV4Kys7IFwKKwkoc3RjYiktPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50Kys7IFwKKwkoc3Rj
YiktPmFzb2MudG90YWxfZmxpZ2h0ICs9ICh0cDEpLT5ib29rX3NpemU7IFwKK30gd2hpbGUgKDAp
CisKKyNlbHNlCisKKyNkZWZpbmUgc2N0cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAx
KSBkbyB7IFwKKwl0cDEtPndpbmRvd19wcm9iZSA9IDA7IFwKKwlpZiAoc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHQgPj0gdHAxLT5ib29rX3NpemUpIHsgXAorCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdo
dCAtPSB0cDEtPmJvb2tfc2l6ZTsgXAorCQlpZiAoc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRfY291
bnQgPiAwKSBcCisJCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudC0tOyBcCisJfSBlbHNl
IHsgXAorCQlzdGNiLT5hc29jLnRvdGFsX2ZsaWdodCA9IDA7IFwKKwkJc3RjYi0+YXNvYy50b3Rh
bF9mbGlnaHRfY291bnQgPSAwOyBcCisJfSBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIHNjdHBf
dG90YWxfZmxpZ2h0X2luY3JlYXNlKHN0Y2IsIHRwMSkgZG8geyBcCisJKHN0Y2IpLT5hc29jLnRv
dGFsX2ZsaWdodF9jb3VudCsrOyBcCisJKHN0Y2IpLT5hc29jLnRvdGFsX2ZsaWdodCArPSAodHAx
KS0+Ym9va19zaXplOyBcCit9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2RlZmluZSBTQ1RQX1BG
X0VOQUJMRUQoX25ldCkgKF9uZXQtPnBmX3RocmVzaG9sZCA8IF9uZXQtPmZhaWx1cmVfdGhyZXNo
b2xkKQorI2RlZmluZSBTQ1RQX05FVF9JU19QRihfbmV0KSAoX25ldC0+cGZfdGhyZXNob2xkIDwg
X25ldC0+ZXJyb3JfY291bnQpCisKK3N0cnVjdCBzY3RwX25ldHM7CitzdHJ1Y3Qgc2N0cF9pbnBj
YjsKK3N0cnVjdCBzY3RwX3RjYjsKK3N0cnVjdCBzY3RwaGRyOworCisKKyNpZiAoZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQgc2N0cF9jbG9zZShzdHJ1
Y3Qgc29ja2V0ICpzbyk7CisjZWxzZQoraW50IHNjdHBfZGV0YWNoKHN0cnVjdCBzb2NrZXQgKnNv
KTsKKyNlbmRpZgoraW50IHNjdHBfZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbyk7CisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19X
aW5kb3dzX18pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
PCA5MDIwMDAKK3ZvaWQgc2N0cF9jdGxpbnB1dCBfX1AoKGludCwgc3RydWN0IHNvY2thZGRyICos
IHZvaWQgKikpOworaW50IHNjdHBfY3Rsb3V0cHV0IF9fUCgoc3RydWN0IHNvY2tldCAqLCBzdHJ1
Y3Qgc29ja29wdCAqKSk7CisjaWZkZWYgSU5FVAordm9pZCBzY3RwX2lucHV0X3dpdGhfcG9ydCBf
X1AoKHN0cnVjdCBtYnVmICosIGludCwgdWludDE2X3QpKTsKK3ZvaWQgc2N0cF9pbnB1dCBfX1Ao
KHN0cnVjdCBtYnVmICosIGludCkpOworI2VuZGlmCit2b2lkIHNjdHBfcGF0aG10dV9hZGp1c3Rt
ZW50IF9fUCgoc3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90KSk7CisjZWxzZQorI2lmIGRlZmlu
ZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChBUFBMRV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBM
RV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVf
TU9VTlRBSU5MSU9OKSAmJiAhZGVmaW5lZChBUFBMRV9FTENBUElUQU4pCit2b2lkIHNjdHBfY3Rs
aW5wdXQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgdm9pZCAqLCBzdHJ1Y3QgaWZuZXQgKiBTQ1RQ
X1VOVVNFRCk7CisjZWxzZQordm9pZCBzY3RwX2N0bGlucHV0KGludCwgc3RydWN0IHNvY2thZGRy
ICosIHZvaWQgKik7CisjZW5kaWYKK2ludCBzY3RwX2N0bG91dHB1dChzdHJ1Y3Qgc29ja2V0ICos
IHN0cnVjdCBzb2Nrb3B0ICopOworI2lmZGVmIElORVQKK3ZvaWQgc2N0cF9pbnB1dF93aXRoX3Bv
cnQoc3RydWN0IG1idWYgKiwgaW50LCB1aW50MTZfdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAyMAoraW50IHNjdHBfaW5wdXQoc3RydWN0
IG1idWYgKiosIGludCAqLCBpbnQpOworI2Vsc2UKK3ZvaWQgc2N0cF9pbnB1dChzdHJ1Y3QgbWJ1
ZiAqLCBpbnQpOworI2VuZGlmCisjZW5kaWYKK3ZvaWQgc2N0cF9wYXRobXR1X2FkanVzdG1lbnQo
c3RydWN0IHNjdHBfdGNiICosIHVpbnQxNl90KTsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVk
KF9fUGFuZGFfXykKK3ZvaWQgc2N0cF9pbnB1dChwYWtoYW5kbGVfdHlwZSBpX3Bhayk7CisjZWxp
ZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkIHNjdHBfcGF0aG10dV9hZGp1c3RtZW50KHN0
cnVjdCBzY3RwX3RjYiAqLCB1aW50MTZfdCk7CisjZWxzZQordm9pZCBzY3RwX2lucHV0KHN0cnVj
dCBtYnVmICosLi4uKTsKKyNlbmRpZgordm9pZCAqc2N0cF9jdGxpbnB1dChpbnQsIHN0cnVjdCBz
b2NrYWRkciAqLCB2b2lkICopOworaW50IHNjdHBfY3Rsb3V0cHV0KGludCwgc3RydWN0IHNvY2tl
dCAqLCBpbnQsIGludCwgc3RydWN0IG1idWYgKiopOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK3ZvaWQgc2N0cF9kcmFpbiBf
X1AoKHZvaWQpKTsKKyNlbHNlCit2b2lkIHNjdHBfZHJhaW4odm9pZCk7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCit2b2lkIHNjdHBfaW5pdCh1aW50MTZfdCwKKyAgICAgICAg
ICAgICAgIGludCAoKikodm9pZCAqYWRkciwgdm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1
aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpLAorICAgICAgICAgICAgICAgdm9pZCAoKikoY29u
c3QgY2hhciAqLCAuLi4pKTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJT
RF92ZXJzaW9uIDwgOTAyMDAwCit2b2lkIHNjdHBfaW5pdCBfX1AoKHZvaWQpKTsKKyNlbGlmIGRl
ZmluZWQoX19BUFBMRV9fKSAmJiAoIWRlZmluZWQoQVBQTEVfTEVPUEFSRCkgJiYgIWRlZmluZWQo
QVBQTEVfU05PV0xFT1BBUkQpICYmIWRlZmluZWQoQVBQTEVfTElPTikgJiYgIWRlZmluZWQoQVBQ
TEVfTU9VTlRBSU5MSU9OKSkKK3ZvaWQgc2N0cF9pbml0KHN0cnVjdCBwcm90b3N3ICpwcCwgc3Ry
dWN0IGRvbWFpbiAqZHApOworI2Vsc2UKK3ZvaWQgc2N0cF9pbml0KHZvaWQpOwordm9pZCBzY3Rw
X25vdGlmeShzdHJ1Y3Qgc2N0cF9pbnBjYiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNj
dHBfbmV0cyAqLAorICAgIHVpbnQ4X3QsIHVpbnQ4X3QsIHVpbnQxNl90LCB1aW50MzJfdCk7Cisj
ZW5kaWYKKyNpZiAhZGVmaW5lZChfX0ZyZWVCU0RfXykKK3ZvaWQgc2N0cF9maW5pc2godm9pZCk7
CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19f
KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQgc2N0cF9mbHVzaChzdHJ1Y3Qgc29ja2V0
ICosIGludCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDkwMjAwMAoraW50IHNjdHBfc2h1dGRvd24gX19QKChzdHJ1Y3Qgc29ja2V0ICop
KTsKKyNlbHNlCitpbnQgc2N0cF9zaHV0ZG93bihzdHJ1Y3Qgc29ja2V0ICopOworI2VuZGlmCitp
bnQgc2N0cF9iaW5keChzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHNvY2thZGRyX3N0b3Jh
Z2UgKiwKKwlpbnQsIGludCwgc3RydWN0IHByb2MgKik7CisvKiBjYW4ndCB1c2Ugc2N0cF9hc3Nv
Y190IGhlcmUgKi8KK2ludCBzY3RwX3BlZWxvZmYoc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3Qgc29j
a2V0ICosIGludCwgY2FkZHJfdCwgaW50ICopOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8
IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQoraW50IHNjdHBfaW5n
ZXRhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICoqKTsKKyNlbGlmIGRlZmlu
ZWQoX19QYW5kYV9fKQoraW50IHNjdHBfaW5nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IHNvY2thZGRyICopOworI2Vsc2UKK2ludCBzY3RwX2luZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICos
IHN0cnVjdCBtYnVmICopOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVm
aW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCitpbnQgc2N0cF9wZWVyYWRk
cihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CisjZWxpZiBkZWZpbmVkKF9f
UGFuZGFfXykKK2ludCBzY3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2th
ZGRyICopOworI2Vsc2UKK2ludCBzY3RwX3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0
IG1idWYgKik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA+PSA1MDAwMDAKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKK2ludCBz
Y3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIGludCwgc3RydWN0IHRocmVhZCAqKTsKKyNlbHNl
CitpbnQgc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBzdHJ1Y3QgdGhyZWFkICopOworI2Vu
ZGlmCisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19fKQoraW50IHNjdHBfbGlzdGVuKHN0cnVjdCBz
b2NrZXQgKiwgaW50LCBQS1RIUkVBRCk7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitp
bnQgc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqLCBpbnQsIHN0cnVjdCBwcm9jICopOworI2Vs
c2UKK2ludCBzY3RwX2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBwcm9jICopOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludCBzY3RwX2Fj
Y2VwdChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2NrYWRkciAqKik7CisjZWxpZiBkZWZpbmVk
KF9fUGFuZGFfXykKK2ludCBzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICosIHN0cnVjdCBzb2Nr
YWRkciAqLCBpbnQgKiwgdm9pZCAqLCBpbnQgKik7CisjZWxzZQoraW50IHNjdHBfYWNjZXB0KHN0
cnVjdCBzb2NrZXQgKiwgc3RydWN0IG1idWYgKik7CisjZW5kaWYKKworI2VuZGlmIC8qIF9LRVJO
RUwgKi8KKworI2VuZGlmIC8qICFfTkVUSU5FVF9TQ1RQX1ZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHB1dGlsLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL25ldGluZXQvc2N0cHV0aWwuYwppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVh
ZDhjMmU0OGM1MzkxLi4xMTM0YjUwNjU3OGJiNzg5NDgxYzJmMzEyOGI4N2NlMTFlYmJmZmM0IDEw
MDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYworKysgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuYwpAQCAtMCwwICsxLDgyNjEgQEAK
Ky8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQorICoKKyAqIENv
cHlyaWdodCAoYykgMjAwMS0yMDA4LCBieSBDaXNjbyBTeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgUmFuZGFsbCBTdGV3YXJ0
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDA4LTIwMTIsIGJ5IE1p
Y2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqCisgKiBi
KSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBj
KSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIF9fRnJl
ZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IGhlYWQv
c3lzL25ldGluZXQvc2N0cHV0aWwuYyAzMzQyODYgMjAxOC0wNS0yOCAxMzozMTo0N1ogdHVleGVu
ICQiKTsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX3BjYi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cHV0aWwuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3N5c2N0bC5o
PgorI2lmZGVmIElORVQ2CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKSB8fCBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjZW5k
aWYKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9z
Y3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF91aW8uaD4KKyNpbmNsdWRlIDxu
ZXRpbmV0L3NjdHBfdGltZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5kYXRhLmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX2F1dGguaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfYXNj
b25mLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2JzZF9hZGRyLmg+CisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKyNlbmRp
ZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChJTkVUNikgfHwgZGVmaW5l
ZChJTkVUKQorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisjaW5jbHVkZSA8
bmV0aW5ldC91ZHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNpbmNsdWRlIDxz
eXMvcHJvYy5oPgorI2lmZGVmIElORVQ2CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2Vu
ZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBBUFBMRV9GSUxF
X05PIDgKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKyNpZiAhZGVmaW5lZChT
Q1RQX0xPQ0FMX1RSQUNFX0JVRikKKyNpbmNsdWRlICJldmVudHJhY2VfbmV0aW5ldC5oIgorI2lu
Y2x1ZGUgInNjdHB1dGlsLnRtaCIgLyogdGhpcyBpcyB0aGUgZmlsZSB0aGF0IHdpbGwgYmUgYXV0
byBnZW5lcmF0ZWQgKi8KKyNlbmRpZgorI2Vsc2UKKyNpZm5kZWYgS1RSX1NDVFAKKyNkZWZpbmUg
S1RSX1NDVFAgS1RSX1NVQlNZUworI2VuZGlmCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IHN0cnVj
dCBzY3RwX2NjX2Z1bmN0aW9ucyBzY3RwX2NjX2Z1bmN0aW9uc1tdOworZXh0ZXJuIGNvbnN0IHN0
cnVjdCBzY3RwX3NzX2Z1bmN0aW9ucyBzY3RwX3NzX2Z1bmN0aW9uc1tdOworCit2b2lkCitzY3Rw
X3NibG9nKHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQgZnJv
bSwgaW50IGluY3IpCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1
Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5zYi5zdGNiID0gc3Rj
YjsKKwlzY3RwX2Nsb2cueC5zYi5zb19zYmNjID0gc2ItPnNiX2NjOworCWlmIChzdGNiKQorCQlz
Y3RwX2Nsb2cueC5zYi5zdGNiX3NiY2MgPSBzdGNiLT5hc29jLnNiX2NjOworCWVsc2UKKwkJc2N0
cF9jbG9nLnguc2Iuc3RjYl9zYmNjID0gMDsKKwlzY3RwX2Nsb2cueC5zYi5pbmNyID0gaW5jcjsK
KwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBT
Q1RQX0xPR19FVkVOVF9TQiwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNj
LmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3ZvaWQK
K3NjdHBfbG9nX2Nsb3Npbmcoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNi
ICpzdGNiLCBpbnQxNl90IGxvYykKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVG
KQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LmNsb3Nl
LmlucCA9ICh2b2lkICopaW5wOworCXNjdHBfY2xvZy54LmNsb3NlLnNjdHBfZmxhZ3MgPSBpbnAt
PnNjdHBfZmxhZ3M7CisJaWYgKHN0Y2IpIHsKKwkJc2N0cF9jbG9nLnguY2xvc2Uuc3RjYiA9ICh2
b2lkICopc3RjYjsKKwkJc2N0cF9jbG9nLnguY2xvc2Uuc3RhdGUgPSAodWludDE2X3Qpc3RjYi0+
YXNvYy5zdGF0ZTsKKwl9IGVsc2UgeworCQlzY3RwX2Nsb2cueC5jbG9zZS5zdGNiID0gMDsKKwkJ
c2N0cF9jbG9nLnguY2xvc2Uuc3RhdGUgPSAwOworCX0KKwlzY3RwX2Nsb2cueC5jbG9zZS5sb2Mg
PSBsb2M7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAor
CSAgICAgU0NUUF9MT0dfRVZFTlRfQ0xPU0UsCisJICAgICAwLAorCSAgICAgc2N0cF9jbG9nLngu
bWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQor
Cit2b2lkCitydG9fbG9nZ2luZyhzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBmcm9tKQorewor
I2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cg
c2N0cF9jbG9nOworCisJbWVtc2V0KCZzY3RwX2Nsb2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsK
KwlzY3RwX2Nsb2cueC5ydG8ubmV0ID0gKHZvaWQgKikgbmV0OworCXNjdHBfY2xvZy54LnJ0by5y
dHQgPSBuZXQtPnJ0dCAvIDEwMDA7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06
JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfUlRULAorCSAgICAgZnJvbSwKKwkg
ICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwK
KwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
NCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfc3RybV9kZWxfYWx0KHN0cnVjdCBzY3Rw
X3RjYiAqc3RjYiwgdWludDMyX3QgdHNuLCB1aW50MTZfdCBzc2VxLCB1aW50MTZfdCBzdHJlYW0s
IGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0
IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguc3RybG9nLnN0Y2IgPSBz
dGNiOworCXNjdHBfY2xvZy54LnN0cmxvZy5uX3RzbiA9IHRzbjsKKwlzY3RwX2Nsb2cueC5zdHJs
b2cubl9zc2VxID0gc3NlcTsKKwlzY3RwX2Nsb2cueC5zdHJsb2cuZV90c24gPSAwOworCXNjdHBf
Y2xvZy54LnN0cmxvZy5lX3NzZXEgPSAwOworCXNjdHBfY2xvZy54LnN0cmxvZy5zdHJtID0gc3Ry
ZWFtOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkg
ICAgIFNDVFBfTE9HX0VWRU5UX1NUUk0sCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngu
bWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQor
Cit2b2lkCitzY3RwX2xvZ19uYWdsZV9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCBh
Y3Rpb24pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0
cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5uYWdsZS5zdGNiID0gKHZvaWQg
KilzdGNiOworCXNjdHBfY2xvZy54Lm5hZ2xlLnRvdGFsX2ZsaWdodCA9IHN0Y2ItPmFzb2MudG90
YWxfZmxpZ2h0OworCXNjdHBfY2xvZy54Lm5hZ2xlLnRvdGFsX2luX3F1ZXVlID0gc3RjYi0+YXNv
Yy50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsKKwlzY3RwX2Nsb2cueC5uYWdsZS5jb3VudF9pbl9x
dWV1ZSA9IHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZTsKKwlzY3RwX2Nsb2cueC5uYWds
ZS5jb3VudF9pbl9mbGlnaHQgPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudDsKKwlTQ1RQ
X0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xP
R19FVkVOVF9OQUdMRSwKKwkgICAgIGFjdGlvbiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9n
MSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nNCk7CisjZW5kaWYKK30KKwordm9pZAor
c2N0cF9sb2dfc2Fjayh1aW50MzJfdCBvbGRfY3VtYWNrLCB1aW50MzJfdCBjdW1hY2ssIHVpbnQz
Ml90IHRzbiwgdWludDE2X3QgZ2FwcywgdWludDE2X3QgZHVwcywgaW50IGZyb20pCit7CisjaWYg
ZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3Rw
X2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5zYWNrLmN1bWFjayA9IGN1bWFjazsKKwlzY3RwX2Nsb2cu
eC5zYWNrLm9sZGN1bWFjayA9IG9sZF9jdW1hY2s7CisJc2N0cF9jbG9nLnguc2Fjay50c24gPSB0
c247CisJc2N0cF9jbG9nLnguc2Fjay5udW1HYXBzID0gZ2FwczsKKwlzY3RwX2Nsb2cueC5zYWNr
Lm51bUR1cHMgPSBkdXBzOworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4
LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX1NBQ0ssCisJICAgICBmcm9tLAorCSAgICAg
c2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAg
ICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsK
KyNlbmRpZgorfQorCit2b2lkCitzY3RwX2xvZ19tYXAodWludDMyX3QgbWFwLCB1aW50MzJfdCBj
dW0sIHVpbnQzMl90IGhpZ2gsIGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9U
UkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJbWVtc2V0KCZz
Y3RwX2Nsb2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsKKwlzY3RwX2Nsb2cueC5tYXAuYmFzZSA9
IG1hcDsKKwlzY3RwX2Nsb2cueC5tYXAuY3VtID0gY3VtOworCXNjdHBfY2xvZy54Lm1hcC5oaWdo
ID0gaGlnaDsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVkWyVkXToleC0leC0leC0leCIs
CisJICAgICBTQ1RQX0xPR19FVkVOVF9NQVAsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9n
LngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgor
fQorCit2b2lkCitzY3RwX2xvZ19mcih1aW50MzJfdCBiaWdnZXN0X3RzbiwgdWludDMyX3QgYmln
Z2VzdF9uZXdfdHNuLCB1aW50MzJfdCB0c24sIGludCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NU
UF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJ
bWVtc2V0KCZzY3RwX2Nsb2csIDAsIHNpemVvZihzY3RwX2Nsb2cpKTsKKwlzY3RwX2Nsb2cueC5m
ci5sYXJnZXN0X3RzbiA9IGJpZ2dlc3RfdHNuOworCXNjdHBfY2xvZy54LmZyLmxhcmdlc3RfbmV3
X3RzbiA9IGJpZ2dlc3RfbmV3X3RzbjsKKwlzY3RwX2Nsb2cueC5mci50c24gPSB0c247CisJU0NU
UF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9M
T0dfRVZFTlRfRlIsCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cz
LAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCisjaWZkZWYgU0NU
UF9NQlVGX0xPR0dJTkcKK3ZvaWQKK3NjdHBfbG9nX21iKHN0cnVjdCBtYnVmICptLCBpbnQgZnJv
bSkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3
bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54Lm1iLm1wID0gbTsKKwlzY3RwX2Nsb2cu
eC5tYi5tYnVmX2ZsYWdzID0gKHVpbnQ4X3QpKFNDVFBfQlVGX0dFVF9GTEFHUyhtKSk7CisJc2N0
cF9jbG9nLngubWIuc2l6ZSA9ICh1aW50MTZfdCkoU0NUUF9CVUZfTEVOKG0pKTsKKwlzY3RwX2Ns
b2cueC5tYi5kYXRhID0gU0NUUF9CVUZfQVQobSwgMCk7CisJaWYgKFNDVFBfQlVGX0lTX0VYVEVO
REVEKG0pKSB7CisJCXNjdHBfY2xvZy54Lm1iLmV4dCA9IFNDVFBfQlVGX0VYVEVORF9CQVNFKG0p
OworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCQkvKiBBUFBMRSBkb2VzIG5vdCB1c2UgYSByZWZf
Y250LCBidXQgYSBmb3J3YXJkL2JhY2t3YXJkIHJlZiBxdWV1ZSAqLworI2Vsc2UKKwkJc2N0cF9j
bG9nLngubWIucmVmY250ID0gKHVpbnQ4X3QpKFNDVFBfQlVGX0VYVEVORF9SRUZDTlQobSkpOwor
I2VuZGlmCisJfSBlbHNlIHsKKwkJc2N0cF9jbG9nLngubWIuZXh0ID0gMDsKKwkJc2N0cF9jbG9n
LngubWIucmVmY250ID0gMDsKKwl9CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06
JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfTUJVRiwKKwkgICAgIGZyb20sCisJ
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIs
CisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzQpOworI2VuZGlmCit9CisKK3ZvaWQKK3NjdHBfbG9nX21iYyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50
IGZyb20pCit7CisJc3RydWN0IG1idWYgKm1hdDsKKworCWZvciAobWF0ID0gbTsgbWF0OyBtYXQg
PSBTQ1RQX0JVRl9ORVhUKG1hdCkpIHsKKwkJc2N0cF9sb2dfbWIobWF0LCBmcm9tKTsKKwl9Cit9
CisjZW5kaWYKKwordm9pZAorc2N0cF9sb2dfc3RybV9kZWwoc3RydWN0IHNjdHBfcXVldWVkX3Rv
X3JlYWQgKmNvbnRyb2wsIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpwb3NjaGssIGludCBm
cm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNjdHBf
Y3duZF9sb2cgc2N0cF9jbG9nOworCisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQlTQ1RQX1BS
SU5URigiR2FrIGxvZyBvZiBOVUxMP1xuIik7CisJCXJldHVybjsKKwl9CisJc2N0cF9jbG9nLngu
c3RybG9nLnN0Y2IgPSBjb250cm9sLT5zdGNiOworCXNjdHBfY2xvZy54LnN0cmxvZy5uX3RzbiA9
IGNvbnRyb2wtPnNpbmZvX3RzbjsKKwlzY3RwX2Nsb2cueC5zdHJsb2cubl9zc2VxID0gKHVpbnQx
Nl90KWNvbnRyb2wtPm1pZDsKKwlzY3RwX2Nsb2cueC5zdHJsb2cuc3RybSA9IGNvbnRyb2wtPnNp
bmZvX3N0cmVhbTsKKwlpZiAocG9zY2hrICE9IE5VTEwpIHsKKwkJc2N0cF9jbG9nLnguc3RybG9n
LmVfdHNuID0gcG9zY2hrLT5zaW5mb190c247CisJCXNjdHBfY2xvZy54LnN0cmxvZy5lX3NzZXEg
PSAodWludDE2X3QpcG9zY2hrLT5taWQ7CisJfSBlbHNlIHsKKwkJc2N0cF9jbG9nLnguc3RybG9n
LmVfdHNuID0gMDsKKwkJc2N0cF9jbG9nLnguc3RybG9nLmVfc3NlcSA9IDA7CisJfQorCVNDVFBf
Q1RSNihLVFJfU0NUUCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9H
X0VWRU5UX1NUUk0sCisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAor
CSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cz
LAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCit2b2lkCitzY3Rw
X2xvZ19jd25kKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqbmV0LCBp
bnQgYXVnbWVudCwgdWludDhfdCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFD
RV9CVUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLngu
Y3duZC5uZXQgPSBuZXQ7CisJaWYgKHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQgPiAyNTUpCisJ
CXNjdHBfY2xvZy54LmN3bmQuY250X2luX3NlbmQgPSAyNTU7CisJZWxzZQorCQlzY3RwX2Nsb2cu
eC5jd25kLmNudF9pbl9zZW5kID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKKwlpZiAoc3Rj
Yi0+YXNvYy5zdHJlYW1fcXVldWVfY250ID4gMjU1KQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9p
bl9zdHIgPSAyNTU7CisJZWxzZQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zdHIgPSBzdGNi
LT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQ7CisKKwlpZiAobmV0KSB7CisJCXNjdHBfY2xvZy54LmN3
bmQuY3duZF9uZXdfdmFsdWUgPSBuZXQtPmN3bmQ7CisJCXNjdHBfY2xvZy54LmN3bmQuaW5mbGln
aHQgPSBuZXQtPmZsaWdodF9zaXplOworCQlzY3RwX2Nsb2cueC5jd25kLnBzZXVkb19jdW1hY2sg
PSBuZXQtPnBzZXVkb19jdW1hY2s7CisJCXNjdHBfY2xvZy54LmN3bmQubWVldHNfcHNldWRvX2N1
bWFjayA9IG5ldC0+bmV3X3BzZXVkb19jdW1hY2s7CisJCXNjdHBfY2xvZy54LmN3bmQubmVlZF9u
ZXdfcHNldWRvX2N1bWFjayA9IG5ldC0+ZmluZF9wc2V1ZG9fY3VtYWNrOworCX0KKwlpZiAoU0NU
UF9DV05ETE9HX1BSRVNFTkQgPT0gZnJvbSkgeworCQlzY3RwX2Nsb2cueC5jd25kLm1lZXRzX3Bz
ZXVkb19jdW1hY2sgPSBzdGNiLT5hc29jLnBlZXJzX3J3bmQ7CisJfQorCXNjdHBfY2xvZy54LmN3
bmQuY3duZF9hdWdtZW50ID0gYXVnbWVudDsKKwlTQ1RQX0NUUjYoS1RSX1NDVFAsICJTQ1RQOiVk
WyVkXToleC0leC0leC0leCIsCisJICAgICBTQ1RQX0xPR19FVkVOVF9DV05ELAorCSAgICAgZnJv
bSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2Mu
bG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBfY2xvZy54Lm1p
c2MubG9nNCk7CisjZW5kaWYKK30KKworI2lmbmRlZiBfX0FQUExFX18KK3ZvaWQKK3NjdHBfbG9n
X2xvY2soc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50
OF90IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1Y3Qg
c2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwltZW1zZXQoJnNjdHBfY2xvZywgMCwgc2l6ZW9m
KHNjdHBfY2xvZykpOworCWlmIChpbnApIHsKKwkJc2N0cF9jbG9nLngubG9jay5zb2NrID0gKHZv
aWQgKikgaW5wLT5zY3RwX3NvY2tldDsKKworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2su
c29jayA9ICh2b2lkICopIE5VTEw7CisJfQorCXNjdHBfY2xvZy54LmxvY2suaW5wID0gKHZvaWQg
KikgaW5wOworI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDMwMDApIHx8IChkZWZpbmVkKF9fQVBQTEVfXykpCisJaWYgKHN0Y2IpIHsKKwkJc2N0cF9j
bG9nLngubG9jay50Y2JfbG9jayA9IG10eF9vd25lZCgmc3RjYi0+dGNiX210eCk7CisJfSBlbHNl
IHsKKwkJc2N0cF9jbG9nLngubG9jay50Y2JfbG9jayA9IFNDVFBfTE9DS19VTktOT1dOOworCX0K
KwlpZiAoaW5wKSB7CisJCXNjdHBfY2xvZy54LmxvY2suaW5wX2xvY2sgPSBtdHhfb3duZWQoJmlu
cC0+aW5wX210eCk7CisJCXNjdHBfY2xvZy54LmxvY2suY3JlYXRlX2xvY2sgPSBtdHhfb3duZWQo
JmlucC0+aW5wX2NyZWF0ZV9tdHgpOworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suaW5w
X2xvY2sgPSBTQ1RQX0xPQ0tfVU5LTk9XTjsKKwkJc2N0cF9jbG9nLngubG9jay5jcmVhdGVfbG9j
ayA9IFNDVFBfTE9DS19VTktOT1dOOworCX0KKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYg
X19GcmVlQlNEX3ZlcnNpb24gPD0gNjAyMDAwKQorCXNjdHBfY2xvZy54LmxvY2suaW5mb19sb2Nr
ID0gbXR4X293bmVkKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBfbXR4KSk7CisjZWxzZQorCXNjdHBf
Y2xvZy54LmxvY2suaW5mb19sb2NrID0gcndfd293bmVkKCZTQ1RQX0JBU0VfSU5GTyhpcGlfZXBf
bXR4KSk7CisjZW5kaWYKKwlpZiAoaW5wICYmIChpbnAtPnNjdHBfc29ja2V0KSkgeworCQlzY3Rw
X2Nsb2cueC5sb2NrLnNvY2tfbG9jayA9IG10eF9vd25lZCgmKGlucC0+c2N0cF9zb2NrZXQtPnNv
X3Jjdi5zYl9tdHgpKTsKKwkJc2N0cF9jbG9nLngubG9jay5zb2NrcmN2YnVmX2xvY2sgPSBtdHhf
b3duZWQoJihpbnAtPnNjdHBfc29ja2V0LT5zb19yY3Yuc2JfbXR4KSk7CisJCXNjdHBfY2xvZy54
LmxvY2suc29ja3NuZGJ1Zl9sb2NrID0gbXR4X293bmVkKCYoaW5wLT5zY3RwX3NvY2tldC0+c29f
c25kLnNiX210eCkpOworCX0gZWxzZSB7CisJCXNjdHBfY2xvZy54LmxvY2suc29ja19sb2NrID0g
U0NUUF9MT0NLX1VOS05PV047CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3JjdmJ1Zl9sb2NrID0g
U0NUUF9MT0NLX1VOS05PV047CisJCXNjdHBfY2xvZy54LmxvY2suc29ja3NuZGJ1Zl9sb2NrID0g
U0NUUF9MT0NLX1VOS05PV047CisJfQorI2VuZGlmCisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NU
UDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfTE9DS19FVkVOVCwKKwkgICAg
IGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cu
eC5taXNjLmxvZzQpOworI2VuZGlmCit9CisjZW5kaWYKKwordm9pZAorc2N0cF9sb2dfbWF4YnVy
c3Qoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQsIGludCBlcnJv
ciwgaW50IGJ1cnN0LCB1aW50OF90IGZyb20pCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RS
QUNFX0JVRikKKwlzdHJ1Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwltZW1zZXQoJnNj
dHBfY2xvZywgMCwgc2l6ZW9mKHNjdHBfY2xvZykpOworCXNjdHBfY2xvZy54LmN3bmQubmV0ID0g
bmV0OworCXNjdHBfY2xvZy54LmN3bmQuY3duZF9uZXdfdmFsdWUgPSBlcnJvcjsKKwlzY3RwX2Ns
b2cueC5jd25kLmluZmxpZ2h0ID0gbmV0LT5mbGlnaHRfc2l6ZTsKKwlzY3RwX2Nsb2cueC5jd25k
LmN3bmRfYXVnbWVudCA9IGJ1cnN0OworCWlmIChzdGNiLT5hc29jLnNlbmRfcXVldWVfY250ID4g
MjU1KQorCQlzY3RwX2Nsb2cueC5jd25kLmNudF9pbl9zZW5kID0gMjU1OworCWVsc2UKKwkJc2N0
cF9jbG9nLnguY3duZC5jbnRfaW5fc2VuZCA9IHN0Y2ItPmFzb2Muc2VuZF9xdWV1ZV9jbnQ7CisJ
aWYgKHN0Y2ItPmFzb2Muc3RyZWFtX3F1ZXVlX2NudCA+IDI1NSkKKwkJc2N0cF9jbG9nLnguY3du
ZC5jbnRfaW5fc3RyID0gMjU1OworCWVsc2UKKwkJc2N0cF9jbG9nLnguY3duZC5jbnRfaW5fc3Ry
ID0gc3RjYi0+YXNvYy5zdHJlYW1fcXVldWVfY250OworCVNDVFBfQ1RSNihLVFJfU0NUUCwgIlND
VFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX0VWRU5UX01BWEJVUlNULAor
CSAgICAgZnJvbSwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMSwKKwkgICAgIHNjdHBfY2xv
Zy54Lm1pc2MubG9nMiwKKwkgICAgIHNjdHBfY2xvZy54Lm1pc2MubG9nMywKKwkgICAgIHNjdHBf
Y2xvZy54Lm1pc2MubG9nNCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0cF9sb2dfcnduZCh1aW50
OF90IGZyb20sIHVpbnQzMl90IHBlZXJzX3J3bmQsIHVpbnQzMl90IHNuZF9zaXplLCB1aW50MzJf
dCBvdmVyaGVhZCkKK3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVj
dCBzY3RwX2N3bmRfbG9nIHNjdHBfY2xvZzsKKworCXNjdHBfY2xvZy54LnJ3bmQucnduZCA9IHBl
ZXJzX3J3bmQ7CisJc2N0cF9jbG9nLngucnduZC5zZW5kX3NpemUgPSBzbmRfc2l6ZTsKKwlzY3Rw
X2Nsb2cueC5yd25kLm92ZXJoZWFkID0gb3ZlcmhlYWQ7CisJc2N0cF9jbG9nLngucnduZC5uZXdf
cnduZCA9IDA7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgi
LAorCSAgICAgU0NUUF9MT0dfRVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Ns
b2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3Rw
X2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlm
Cit9CisKK3ZvaWQKK3NjdHBfbG9nX3J3bmRfc2V0KHVpbnQ4X3QgZnJvbSwgdWludDMyX3QgcGVl
cnNfcnduZCwgdWludDMyX3QgZmxpZ2h0X3NpemUsIHVpbnQzMl90IG92ZXJoZWFkLCB1aW50MzJf
dCBhX3J3bmR2YWwpCit7CisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwlzdHJ1
Y3Qgc2N0cF9jd25kX2xvZyBzY3RwX2Nsb2c7CisKKwlzY3RwX2Nsb2cueC5yd25kLnJ3bmQgPSBw
ZWVyc19yd25kOworCXNjdHBfY2xvZy54LnJ3bmQuc2VuZF9zaXplID0gZmxpZ2h0X3NpemU7CisJ
c2N0cF9jbG9nLngucnduZC5vdmVyaGVhZCA9IG92ZXJoZWFkOworCXNjdHBfY2xvZy54LnJ3bmQu
bmV3X3J3bmQgPSBhX3J3bmR2YWw7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06
JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfUldORCwKKwkgICAgIGZyb20sCisJ
ICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIs
CisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxv
ZzQpOworI2VuZGlmCit9CisKKyNpZmRlZiBTQ1RQX01CQ05UX0xPR0dJTkcKK3N0YXRpYyB2b2lk
CitzY3RwX2xvZ19tYmNudCh1aW50OF90IGZyb20sIHVpbnQzMl90IHRvdGFsX29xLCB1aW50MzJf
dCBib29rLCB1aW50MzJfdCB0b3RhbF9tYmNudF9xLCB1aW50MzJfdCBtYmNudCkKK3sKKyNpZiBk
ZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCXN0cnVjdCBzY3RwX2N3bmRfbG9nIHNjdHBf
Y2xvZzsKKworCXNjdHBfY2xvZy54Lm1iY250LnRvdGFsX3F1ZXVlX3NpemUgPSB0b3RhbF9vcTsK
KwlzY3RwX2Nsb2cueC5tYmNudC5zaXplX2NoYW5nZSA9IGJvb2s7CisJc2N0cF9jbG9nLngubWJj
bnQudG90YWxfcXVldWVfbWJfc2l6ZSA9IHRvdGFsX21iY250X3E7CisJc2N0cF9jbG9nLngubWJj
bnQubWJjbnRfY2hhbmdlID0gbWJjbnQ7CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFsl
ZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfTUJDTlQsCisJICAgICBmcm9t
LAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5s
b2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0cF9jbG9nLngubWlz
Yy5sb2c0KTsKKyNlbmRpZgorfQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfbWlzY19pbnRzKHVpbnQ4
X3QgZnJvbSwgdWludDMyX3QgYSwgdWludDMyX3QgYiwgdWludDMyX3QgYywgdWludDMyX3QgZCkK
K3sKKyNpZiBkZWZpbmVkKFNDVFBfTE9DQUxfVFJBQ0VfQlVGKQorCVNDVFBfQ1RSNihLVFJfU0NU
UCwgIlNDVFA6JWRbJWRdOiV4LSV4LSV4LSV4IiwKKwkgICAgIFNDVFBfTE9HX01JU0NfRVZFTlQs
CisJICAgICBmcm9tLAorCSAgICAgYSwgYiwgYywgZCk7CisjZW5kaWYKK30KKwordm9pZAorc2N0
cF93YWtldXBfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3Qgd2FrZV9jbnQsIGlu
dCBmcm9tKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9CVUYpCisJc3RydWN0IHNj
dHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLngud2FrZS5zdGNiID0gKHZvaWQg
KilzdGNiOworCXNjdHBfY2xvZy54Lndha2Uud2FrZV9jbnQgPSB3YWtlX2NudDsKKwlzY3RwX2Ns
b2cueC53YWtlLmZsaWdodCA9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0X2NvdW50OworCXNjdHBf
Y2xvZy54Lndha2Uuc2VuZF9xID0gc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudDsKKwlzY3RwX2Ns
b2cueC53YWtlLnNlbnRfcSA9IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9jbnQ7CisKKwlpZiAoc3Rj
Yi0+YXNvYy5zdHJlYW1fcXVldWVfY250IDwgMHhmZikKKwkJc2N0cF9jbG9nLngud2FrZS5zdHJl
YW1fcWNudCA9ICh1aW50OF90KSBzdGNiLT5hc29jLnN0cmVhbV9xdWV1ZV9jbnQ7CisJZWxzZQor
CQlzY3RwX2Nsb2cueC53YWtlLnN0cmVhbV9xY250ID0gMHhmZjsKKworCWlmIChzdGNiLT5hc29j
LmNodW5rc19vbl9vdXRfcXVldWUgPCAweGZmKQorCQlzY3RwX2Nsb2cueC53YWtlLmNodW5rc19v
bl9vcXVlID0gKHVpbnQ4X3QpIHN0Y2ItPmFzb2MuY2h1bmtzX29uX291dF9xdWV1ZTsKKwllbHNl
CisJCXNjdHBfY2xvZy54Lndha2UuY2h1bmtzX29uX29xdWUgPSAweGZmOworCisJc2N0cF9jbG9n
Lngud2FrZS5zY3RwZmxhZ3MgPSAwOworCS8qIHNldCBpbiB0aGUgZGVmZXJlZCBtb2RlIHN0dWZm
ICovCisJaWYgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19ET05U
X1dBS0UpCisJCXNjdHBfY2xvZy54Lndha2Uuc2N0cGZsYWdzIHw9IDE7CisJaWYgKHN0Y2ItPnNj
dHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19XQUtFT1VUUFVUKQorCQlzY3RwX2Ns
b2cueC53YWtlLnNjdHBmbGFncyB8PSAyOworCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfV0FLRUlOUFVUKQorCQlzY3RwX2Nsb2cueC53YWtlLnNjdHBmbGFn
cyB8PSA0OworCS8qIHdoYXQgYWJvdXQgdGhlIHNiICovCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0
KSB7CisJCXN0cnVjdCBzb2NrZXQgKnNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisKKwkJc2N0cF9j
bG9nLngud2FrZS5zYmZsYWdzID0gKHVpbnQ4X3QpKChzby0+c29fc25kLnNiX2ZsYWdzICYgMHgw
MGZmKSk7CisJfSBlbHNlIHsKKwkJc2N0cF9jbG9nLngud2FrZS5zYmZsYWdzID0gMHhmZjsKKwl9
CisJU0NUUF9DVFI2KEtUUl9TQ1RQLCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAg
U0NUUF9MT0dfRVZFTlRfV0FLRSwKKwkgICAgIGZyb20sCisJICAgICBzY3RwX2Nsb2cueC5taXNj
LmxvZzEsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzIsCisJICAgICBzY3RwX2Nsb2cueC5t
aXNjLmxvZzMsCisJICAgICBzY3RwX2Nsb2cueC5taXNjLmxvZzQpOworI2VuZGlmCit9CisKK3Zv
aWQKK3NjdHBfbG9nX2Jsb2NrKHVpbnQ4X3QgZnJvbSwgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24g
KmFzb2MsIHNpemVfdCBzZW5kbGVuKQoreworI2lmIGRlZmluZWQoU0NUUF9MT0NBTF9UUkFDRV9C
VUYpCisJc3RydWN0IHNjdHBfY3duZF9sb2cgc2N0cF9jbG9nOworCisJc2N0cF9jbG9nLnguYmxr
Lm9uc2IgPSBhc29jLT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZTsKKwlzY3RwX2Nsb2cueC5ibGsu
c2VuZF9zZW50X3FjbnQgPSAodWludDE2X3QpIChhc29jLT5zZW5kX3F1ZXVlX2NudCArIGFzb2Mt
PnNlbnRfcXVldWVfY250KTsKKwlzY3RwX2Nsb2cueC5ibGsucGVlcl9yd25kID0gYXNvYy0+cGVl
cnNfcnduZDsKKwlzY3RwX2Nsb2cueC5ibGsuc3RyZWFtX3FjbnQgPSAodWludDE2X3QpIGFzb2Mt
PnN0cmVhbV9xdWV1ZV9jbnQ7CisJc2N0cF9jbG9nLnguYmxrLmNodW5rc19vbl9vcXVlID0gKHVp
bnQxNl90KSBhc29jLT5jaHVua3Nfb25fb3V0X3F1ZXVlOworCXNjdHBfY2xvZy54LmJsay5mbGln
aHRfc2l6ZSA9ICh1aW50MTZfdCkgKGFzb2MtPnRvdGFsX2ZsaWdodC8xMDI0KTsKKwlzY3RwX2Ns
b2cueC5ibGsuc25kbGVuID0gKHVpbnQzMl90KXNlbmRsZW47CisJU0NUUF9DVFI2KEtUUl9TQ1RQ
LCAiU0NUUDolZFslZF06JXgtJXgtJXgtJXgiLAorCSAgICAgU0NUUF9MT0dfRVZFTlRfQkxPQ0ss
CisJICAgICBmcm9tLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2cxLAorCSAgICAgc2N0cF9j
bG9nLngubWlzYy5sb2cyLAorCSAgICAgc2N0cF9jbG9nLngubWlzYy5sb2czLAorCSAgICAgc2N0
cF9jbG9nLngubWlzYy5sb2c0KTsKKyNlbmRpZgorfQorCitpbnQKK3NjdHBfZmlsbF9zdGF0X2xv
Zyh2b2lkICpvcHR2YWwgU0NUUF9VTlVTRUQsIHNpemVfdCAqb3B0c2l6ZSBTQ1RQX1VOVVNFRCkK
K3sKKwkvKiBNYXkgbmVlZCB0byBmaXggdGhpcyBpZiBrdHJkdW1wIGRvZXMgbm90IHdvcmsgKi8K
KwlyZXR1cm4gKDApOworfQorCisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECit1aW50OF90
IHNjdHBfYXVkaXRfZGF0YVtTQ1RQX0FVRElUX1NJWkVdWzJdOworc3RhdGljIGludCBzY3RwX2F1
ZGl0X2luZHggPSAwOworCitzdGF0aWMKK3ZvaWQKK3NjdHBfcHJpbnRfYXVkaXRfcmVwb3J0KHZv
aWQpCit7CisJaW50IGk7CisJaW50IGNudDsKKworCWNudCA9IDA7CisJZm9yIChpID0gc2N0cF9h
dWRpdF9pbmR4OyBpIDwgU0NUUF9BVURJVF9TSVpFOyBpKyspIHsKKwkJaWYgKChzY3RwX2F1ZGl0
X2RhdGFbaV1bMF0gPT0gMHhlMCkgJiYKKwkJICAgIChzY3RwX2F1ZGl0X2RhdGFbaV1bMV0gPT0g
MHgwMSkpIHsKKwkJCWNudCA9IDA7CisJCQlTQ1RQX1BSSU5URigiXG4iKTsKKwkJfSBlbHNlIGlm
IChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0gMHhmMCkgeworCQkJY250ID0gMDsKKwkJCVNDVFBf
UFJJTlRGKCJcbiIpOworCQl9IGVsc2UgaWYgKChzY3RwX2F1ZGl0X2RhdGFbaV1bMF0gPT0gMHhj
MCkgJiYKKwkJICAgIChzY3RwX2F1ZGl0X2RhdGFbaV1bMV0gPT0gMHgwMSkpIHsKKwkJCVNDVFBf
UFJJTlRGKCJcbiIpOworCQkJY250ID0gMDsKKwkJfQorCQlTQ1RQX1BSSU5URigiJTIuMnglMi4y
eCAiLCAodWludDMyX3QpIHNjdHBfYXVkaXRfZGF0YVtpXVswXSwKKwkJCSAgICAodWludDMyX3Qp
IHNjdHBfYXVkaXRfZGF0YVtpXVsxXSk7CisJCWNudCsrOworCQlpZiAoKGNudCAlIDE0KSA9PSAw
KQorCQkJU0NUUF9QUklOVEYoIlxuIik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBzY3RwX2F1ZGl0
X2luZHg7IGkrKykgeworCQlpZiAoKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGUwKSAmJgor
CQkgICAgKHNjdHBfYXVkaXRfZGF0YVtpXVsxXSA9PSAweDAxKSkgeworCQkJY250ID0gMDsKKwkJ
CVNDVFBfUFJJTlRGKCJcbiIpOworCQl9IGVsc2UgaWYgKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9
PSAweGYwKSB7CisJCQljbnQgPSAwOworCQkJU0NUUF9QUklOVEYoIlxuIik7CisJCX0gZWxzZSBp
ZiAoKHNjdHBfYXVkaXRfZGF0YVtpXVswXSA9PSAweGMwKSAmJgorCQkgICAgKHNjdHBfYXVkaXRf
ZGF0YVtpXVsxXSA9PSAweDAxKSkgeworCQkJU0NUUF9QUklOVEYoIlxuIik7CisJCQljbnQgPSAw
OworCQl9CisJCVNDVFBfUFJJTlRGKCIlMi4yeCUyLjJ4ICIsICh1aW50MzJfdCkgc2N0cF9hdWRp
dF9kYXRhW2ldWzBdLAorCQkJICAgICh1aW50MzJfdCkgc2N0cF9hdWRpdF9kYXRhW2ldWzFdKTsK
KwkJY250Kys7CisJCWlmICgoY250ICUgMTQpID09IDApCisJCQlTQ1RQX1BSSU5URigiXG4iKTsK
Kwl9CisJU0NUUF9QUklOVEYoIlxuIik7Cit9CisKK3ZvaWQKK3NjdHBfYXVkaXRpbmcoaW50IGZy
b20sIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBz
dHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJaW50IHJlc2VuZF9jbnQsIHRvdF9vdXQsIHJlcCwg
dG90X2Jvb2tfY250OworCXN0cnVjdCBzY3RwX25ldHMgKmxuZXQ7CisJc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqY2hrOworCisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAw
eEFBOworCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHgwMDAwMDBmZiAm
IGZyb207CisJc2N0cF9hdWRpdF9pbmR4Kys7CisJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQ
X0FVRElUX1NJWkUpIHsKKwkJc2N0cF9hdWRpdF9pbmR4ID0gMDsKKwl9CisJaWYgKGlucCA9PSBO
VUxMKSB7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJ
c2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweDAxOworCQlzY3RwX2F1ZGl0
X2luZHgrKzsKKwkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJ
CXNjdHBfYXVkaXRfaW5keCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKwlpZiAoc3RjYiA9PSBO
VUxMKSB7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJ
c2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweDAyOworCQlzY3RwX2F1ZGl0
X2luZHgrKzsKKwkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJ
CXNjdHBfYXVkaXRfaW5keCA9IDA7CisJCX0KKwkJcmV0dXJuOworCX0KKwlzY3RwX2F1ZGl0X2Rh
dGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QTE7CisJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVk
aXRfaW5keF1bMV0gPQorCSAgICAoMHgwMDAwMDBmZiAmIHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9y
ZXRyYW5fY250KTsKKwlzY3RwX2F1ZGl0X2luZHgrKzsKKwlpZiAoc2N0cF9hdWRpdF9pbmR4ID49
IFNDVFBfQVVESVRfU0laRSkgeworCQlzY3RwX2F1ZGl0X2luZHggPSAwOworCX0KKwlyZXAgPSAw
OworCXRvdF9ib29rX2NudCA9IDA7CisJcmVzZW5kX2NudCA9IHRvdF9vdXQgPSAwOworCVRBSUxR
X0ZPUkVBQ0goY2hrLCAmc3RjYi0+YXNvYy5zZW50X3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYg
KGNoay0+c2VudCA9PSBTQ1RQX0RBVEFHUkFNX1JFU0VORCkgeworCQkJcmVzZW5kX2NudCsrOwor
CQl9IGVsc2UgaWYgKGNoay0+c2VudCA8IFNDVFBfREFUQUdSQU1fUkVTRU5EKSB7CisJCQl0b3Rf
b3V0ICs9IGNoay0+Ym9va19zaXplOworCQkJdG90X2Jvb2tfY250Kys7CisJCX0KKwl9CisJaWYg
KHJlc2VuZF9jbnQgIT0gc3RjYi0+YXNvYy5zZW50X3F1ZXVlX3JldHJhbl9jbnQpIHsKKwkJc2N0
cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEFGOworCQlzY3RwX2F1ZGl0X2Rh
dGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9IDB4QTE7CisJCXNjdHBfYXVkaXRfaW5keCsrOworCQlp
ZiAoc2N0cF9hdWRpdF9pbmR4ID49IFNDVFBfQVVESVRfU0laRSkgeworCQkJc2N0cF9hdWRpdF9p
bmR4ID0gMDsKKwkJfQorCQlTQ1RQX1BSSU5URigicmVzZW5kX2NudDolZCBhc29jLXRvdDolZFxu
IiwKKwkJCSAgICByZXNlbmRfY250LCBzdGNiLT5hc29jLnNlbnRfcXVldWVfcmV0cmFuX2NudCk7
CisJCXJlcCA9IDE7CisJCXN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250ID0gcmVzZW5k
X2NudDsKKwkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMF0gPSAweEEyOworCQlz
Y3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVsxXSA9CisJCSAgICAoMHgwMDAwMDBmZiAm
IHN0Y2ItPmFzb2Muc2VudF9xdWV1ZV9yZXRyYW5fY250KTsKKwkJc2N0cF9hdWRpdF9pbmR4Kys7
CisJCWlmIChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3RwX2F1
ZGl0X2luZHggPSAwOworCQl9CisJfQorCWlmICh0b3Rfb3V0ICE9IHN0Y2ItPmFzb2MudG90YWxf
ZmxpZ2h0KSB7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsK
KwkJc2N0cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweEEyOworCQlzY3RwX2F1
ZGl0X2luZHgrKzsKKwkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsK
KwkJCXNjdHBfYXVkaXRfaW5keCA9IDA7CisJCX0KKwkJcmVwID0gMTsKKwkJU0NUUF9QUklOVEYo
InRvdF9mbHQ6JWQgYXNvY190b3Q6JWRcbiIsIHRvdF9vdXQsCisJCQkgICAgKGludClzdGNiLT5h
c29jLnRvdGFsX2ZsaWdodCk7CisJCXN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0ID0gdG90X291dDsK
Kwl9CisJaWYgKHRvdF9ib29rX2NudCAhPSBzdGNiLT5hc29jLnRvdGFsX2ZsaWdodF9jb3VudCkg
eworCQlzY3RwX2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IDB4QUY7CisJCXNjdHBf
YXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzFdID0gMHhBNTsKKwkJc2N0cF9hdWRpdF9pbmR4
Kys7CisJCWlmIChzY3RwX2F1ZGl0X2luZHggPj0gU0NUUF9BVURJVF9TSVpFKSB7CisJCQlzY3Rw
X2F1ZGl0X2luZHggPSAwOworCQl9CisJCXJlcCA9IDE7CisJCVNDVFBfUFJJTlRGKCJ0b3RfZmx0
X2Jvb2s6JWRcbiIsIHRvdF9ib29rX2NudCk7CisKKwkJc3RjYi0+YXNvYy50b3RhbF9mbGlnaHRf
Y291bnQgPSB0b3RfYm9va19jbnQ7CisJfQorCXRvdF9vdXQgPSAwOworCVRBSUxRX0ZPUkVBQ0go
bG5ldCwgJnN0Y2ItPmFzb2MubmV0cywgc2N0cF9uZXh0KSB7CisJCXRvdF9vdXQgKz0gbG5ldC0+
ZmxpZ2h0X3NpemU7CisJfQorCWlmICh0b3Rfb3V0ICE9IHN0Y2ItPmFzb2MudG90YWxfZmxpZ2h0
KSB7CisJCXNjdHBfYXVkaXRfZGF0YVtzY3RwX2F1ZGl0X2luZHhdWzBdID0gMHhBRjsKKwkJc2N0
cF9hdWRpdF9kYXRhW3NjdHBfYXVkaXRfaW5keF1bMV0gPSAweEEzOworCQlzY3RwX2F1ZGl0X2lu
ZHgrKzsKKwkJaWYgKHNjdHBfYXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJCXNj
dHBfYXVkaXRfaW5keCA9IDA7CisJCX0KKwkJcmVwID0gMTsKKwkJU0NUUF9QUklOVEYoInJlYWwg
ZmxpZ2h0OiVkIG5ldCB0b3RhbCB3YXMgJWRcbiIsCisJCQkgICAgc3RjYi0+YXNvYy50b3RhbF9m
bGlnaHQsIHRvdF9vdXQpOworCQkvKiBub3cgY29ycmVjdGl2ZSBhY3Rpb24gKi8KKwkJVEFJTFFf
Rk9SRUFDSChsbmV0LCAmc3RjYi0+YXNvYy5uZXRzLCBzY3RwX25leHQpIHsKKworCQkJdG90X291
dCA9IDA7CisJCQlUQUlMUV9GT1JFQUNIKGNoaywgJnN0Y2ItPmFzb2Muc2VudF9xdWV1ZSwgc2N0
cF9uZXh0KSB7CisJCQkJaWYgKChjaGstPndob1RvID09IGxuZXQpICYmCisJCQkJICAgIChjaGst
PnNlbnQgPCBTQ1RQX0RBVEFHUkFNX1JFU0VORCkpIHsKKwkJCQkJdG90X291dCArPSBjaGstPmJv
b2tfc2l6ZTsKKwkJCQl9CisJCQl9CisJCQlpZiAobG5ldC0+ZmxpZ2h0X3NpemUgIT0gdG90X291
dCkgeworCQkJCVNDVFBfUFJJTlRGKCJuZXQ6JXAgZmxpZ2h0IHdhcyAlZCBjb3JyZWN0ZWQgdG8g
JWRcbiIsCisJCQkJCSAgICAodm9pZCAqKWxuZXQsIGxuZXQtPmZsaWdodF9zaXplLAorCQkJCQkg
ICAgdG90X291dCk7CisJCQkJbG5ldC0+ZmxpZ2h0X3NpemUgPSB0b3Rfb3V0OworCQkJfQorCQl9
CisJfQorCWlmIChyZXApIHsKKwkJc2N0cF9wcmludF9hdWRpdF9yZXBvcnQoKTsKKwl9Cit9CisK
K3ZvaWQKK3NjdHBfYXVkaXRfbG9nKHVpbnQ4X3QgZXYsIHVpbnQ4X3QgZmQpCit7CisKKwlzY3Rw
X2F1ZGl0X2RhdGFbc2N0cF9hdWRpdF9pbmR4XVswXSA9IGV2OworCXNjdHBfYXVkaXRfZGF0YVtz
Y3RwX2F1ZGl0X2luZHhdWzFdID0gZmQ7CisJc2N0cF9hdWRpdF9pbmR4Kys7CisJaWYgKHNjdHBf
YXVkaXRfaW5keCA+PSBTQ1RQX0FVRElUX1NJWkUpIHsKKwkJc2N0cF9hdWRpdF9pbmR4ID0gMDsK
Kwl9Cit9CisKKyNlbmRpZgorCisvKgorICogc2N0cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24o
KSBzaG91bGQgYmUgY2FsbGVkCisgKiB3aGVuIGVudGVyaW5nIHRoZSBTSFVURE9XTl9TRU5UIG9y
IFNIVVRET1dOX0FDS19TRU5UCisgKiBzdGF0ZSB0byBtYWtlIHN1cmUgdGhhdCBhbGwgdGltZXJz
IGFyZSBzdG9wcGVkLgorICovCit2b2lkCitzY3RwX3N0b3BfdGltZXJzX2Zvcl9zaHV0ZG93bihz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisJc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2M7
CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJYXNvYyA9ICZzdGNiLT5hc29jOworCisJKHZv
aWQpU0NUUF9PU19USU1FUl9TVE9QKCZhc29jLT5kYWNrX3RpbWVyLnRpbWVyKTsKKwkodm9pZClT
Q1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPnN0cnJlc2V0X3RpbWVyLnRpbWVyKTsKKwkodm9pZClT
Q1RQX09TX1RJTUVSX1NUT1AoJmFzb2MtPmFzY29uZl90aW1lci50aW1lcik7CisJKHZvaWQpU0NU
UF9PU19USU1FUl9TVE9QKCZhc29jLT5hdXRvY2xvc2VfdGltZXIudGltZXIpOworCSh2b2lkKVND
VFBfT1NfVElNRVJfU1RPUCgmYXNvYy0+ZGVsYXllZF9ldmVudF90aW1lci50aW1lcik7CisJVEFJ
TFFfRk9SRUFDSChuZXQsICZhc29jLT5uZXRzLCBzY3RwX25leHQpIHsKKwkJKHZvaWQpU0NUUF9P
U19USU1FUl9TVE9QKCZuZXQtPnBtdHVfdGltZXIudGltZXIpOworCQkodm9pZClTQ1RQX09TX1RJ
TUVSX1NUT1AoJm5ldC0+aGJfdGltZXIudGltZXIpOworCX0KK30KKworLyoKKyAqIEEgbGlzdCBv
ZiBzaXplcyBiYXNlZCBvbiB0eXBpY2FsIG10dSdzLCB1c2VkIG9ubHkgaWYgbmV4dCBob3Agc2l6
ZSBub3QKKyAqIHJldHVybmVkLiBUaGVzZSB2YWx1ZXMgTVVTVCBiZSBtdWx0aXBsZXMgb2YgNCBh
bmQgTVVTVCBiZSBvcmRlcmVkLgorICovCitzdGF0aWMgdWludDMyX3Qgc2N0cF9tdHVfc2l6ZXNb
XSA9IHsKKwk2OCwKKwkyOTYsCisJNTA4LAorCTUxMiwKKwk1NDQsCisJNTc2LAorCTEwMDQsCisJ
MTQ5MiwKKwkxNTAwLAorCTE1MzYsCisJMjAwMCwKKwkyMDQ4LAorCTQzNTIsCisJNDQ2NCwKKwk4
MTY2LAorCTE3OTEyLAorCTMyMDAwLAorCTY1NTMyCit9OworCisvKgorICogUmV0dXJuIHRoZSBs
YXJnZXN0IE1UVSBpbiBzY3RwX210dV9zaXplcyBzbWFsbGVyIHRoYW4gdmFsLgorICogSWYgdmFs
IGlzIHNtYWxsZXIgdGhhbiB0aGUgbWluaW11bSwganVzdCByZXR1cm4gdGhlIGxhcmdlc3QKKyAq
IG11bHRpcGxlIG9mIDQgc21hbGxlciBvciBlcXVhbCB0byB2YWwuCisgKiBFbnN1cmUgdGhhdCB0
aGUgcmVzdWx0IGlzIGEgbXVsdGlwbGUgb2YgNC4KKyAqLwordWludDMyX3QKK3NjdHBfZ2V0X3By
ZXZfbXR1KHVpbnQzMl90IHZhbCkKK3sKKwl1aW50MzJfdCBpOworCisJdmFsICY9IDB4ZmZmZmZm
ZmM7CisJaWYgKHZhbCA8PSBzY3RwX210dV9zaXplc1swXSkgeworCQlyZXR1cm4gKHZhbCk7CisJ
fQorCWZvciAoaSA9IDE7IGkgPCAoc2l6ZW9mKHNjdHBfbXR1X3NpemVzKSAvIHNpemVvZih1aW50
MzJfdCkpOyBpKyspIHsKKwkJaWYgKHZhbCA8PSBzY3RwX210dV9zaXplc1tpXSkgeworCQkJYnJl
YWs7CisJCX0KKwl9CisJS0FTU0VSVCgoc2N0cF9tdHVfc2l6ZXNbaSAtIDFdICYgMHgwMDAwMDAw
MykgPT0gMCwKKwkgICAgICAgICgic2N0cF9tdHVfc2l6ZXNbJXVdIG5vdCBhIG11bHRpcGxlIG9m
IDQiLCBpIC0gMSkpOworCXJldHVybiAoc2N0cF9tdHVfc2l6ZXNbaSAtIDFdKTsKK30KKworLyoK
KyAqIFJldHVybiB0aGUgc21hbGxlc3QgTVRVIGluIHNjdHBfbXR1X3NpemVzIGxhcmdlciB0aGFu
IHZhbC4KKyAqIElmIHZhbCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSwganVzdCByZXR1cm4g
dGhlIGxhcmdlc3QgbXVsdGlwbGUgb2YgNCBzbWFsbGVyCisgKiBvciBlcXVhbCB0byB2YWwuCisg
KiBFbnN1cmUgdGhhdCB0aGUgcmVzdWx0IGlzIGEgbXVsdGlwbGUgb2YgNC4KKyAqLwordWludDMy
X3QKK3NjdHBfZ2V0X25leHRfbXR1KHVpbnQzMl90IHZhbCkKK3sKKwkvKiBzZWxlY3QgYW5vdGhl
ciBNVFUgdGhhdCBpcyBqdXN0IGJpZ2dlciB0aGFuIHRoaXMgb25lICovCisJdWludDMyX3QgaTsK
KworCXZhbCAmPSAweGZmZmZmZmZjOworCWZvciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHNjdHBfbXR1
X3NpemVzKSAvIHNpemVvZih1aW50MzJfdCkpOyBpKyspIHsKKwkJaWYgKHZhbCA8IHNjdHBfbXR1
X3NpemVzW2ldKSB7CisJCQlLQVNTRVJUKChzY3RwX210dV9zaXplc1tpXSAmIDB4MDAwMDAwMDMp
ID09IDAsCisJCQkJKCJzY3RwX210dV9zaXplc1sldV0gbm90IGEgbXVsdGlwbGUgb2YgNCIsIGkp
KTsKKwkJCXJldHVybiAoc2N0cF9tdHVfc2l6ZXNbaV0pOworCQl9CisJfQorCXJldHVybiAodmFs
KTsKK30KKwordm9pZAorc2N0cF9maWxsX3JhbmRvbV9zdG9yZShzdHJ1Y3Qgc2N0cF9wY2IgKm0p
Cit7CisJLyoKKwkgKiBIZXJlIHdlIHVzZSB0aGUgTUQ1L1NIQS0xIHRvIGhhc2ggd2l0aCBvdXIg
Z29vZCByYW5kb21OdW1iZXJzIGFuZAorCSAqIG91ciBjb3VudGVyLiBUaGUgcmVzdWx0IGJlY29t
ZXMgb3VyIGdvb2QgcmFuZG9tIG51bWJlcnMgYW5kIHdlCisJICogdGhlbiBzZXR1cCB0byBnaXZl
IHRoZXNlIG91dC4gTm90ZSB0aGF0IHdlIGRvIG5vIGxvY2tpbmcgdG8KKwkgKiBwcm90ZWN0IHRo
aXMuIFRoaXMgaXMgb2ssIHNpbmNlIGlmIGNvbXBldGluZyBmb2xrcyBjYWxsIHRoaXMgd2UKKwkg
KiB3aWxsIGdldCBtb3JlIGdvYmJsZWQgZ29vayBpbiB0aGUgcmFuZG9tIHN0b3JlIHdoaWNoIGlz
IHdoYXQgd2UKKwkgKiB3YW50LiBUaGVyZSBpcyBhIGRhbmdlciB0aGF0IHR3byBndXlzIHdpbGwg
dXNlIHRoZSBzYW1lIHJhbmRvbQorCSAqIG51bWJlcnMsIGJ1dCB0aGF0cyBvayB0b28gc2luY2Ug
dGhhdCBpcyByYW5kb20gYXMgd2VsbCA6LT4KKwkgKi8KKwltLT5zdG9yZV9hdCA9IDA7CisJKHZv
aWQpc2N0cF9obWFjKFNDVFBfSE1BQywgKHVpbnQ4X3QgKiltLT5yYW5kb21fbnVtYmVycywKKwkg
ICAgc2l6ZW9mKG0tPnJhbmRvbV9udW1iZXJzKSwgKHVpbnQ4X3QgKikmbS0+cmFuZG9tX2NvdW50
ZXIsCisJICAgIHNpemVvZihtLT5yYW5kb21fY291bnRlciksICh1aW50OF90ICopbS0+cmFuZG9t
X3N0b3JlKTsKKwltLT5yYW5kb21fY291bnRlcisrOworfQorCit1aW50MzJfdAorc2N0cF9zZWxl
Y3RfaW5pdGlhbF9UU04oc3RydWN0IHNjdHBfcGNiICppbnApCit7CisJLyoKKwkgKiBBIHRydWUg
aW1wbGVtZW50YXRpb24gc2hvdWxkIHVzZSByYW5kb20gc2VsZWN0aW9uIHByb2Nlc3MgdG8gZ2V0
CisJICogdGhlIGluaXRpYWwgc3RyZWFtIHNlcXVlbmNlIG51bWJlciwgdXNpbmcgUkZDMTc1MCBh
cyBhIGdvb2QKKwkgKiBndWlkZWxpbmUKKwkgKi8KKwl1aW50MzJfdCB4LCAqeHA7CisJdWludDhf
dCAqcDsKKwlpbnQgc3RvcmVfYXQsIG5ld19zdG9yZTsKKworCWlmIChpbnAtPmluaXRpYWxfc2Vx
dWVuY2VfZGVidWcgIT0gMCkgeworCQl1aW50MzJfdCByZXQ7CisKKwkJcmV0ID0gaW5wLT5pbml0
aWFsX3NlcXVlbmNlX2RlYnVnOworCQlpbnAtPmluaXRpYWxfc2VxdWVuY2VfZGVidWcrKzsKKwkJ
cmV0dXJuIChyZXQpOworCX0KKyByZXRyeToKKwlzdG9yZV9hdCA9IGlucC0+c3RvcmVfYXQ7CisJ
bmV3X3N0b3JlID0gc3RvcmVfYXQgKyBzaXplb2YodWludDMyX3QpOworCWlmIChuZXdfc3RvcmUg
Pj0gKFNDVFBfU0lHTkFUVVJFX1NJWkUtMykpIHsKKwkJbmV3X3N0b3JlID0gMDsKKwl9CisJaWYg
KCFhdG9taWNfY21wc2V0X2ludCgmaW5wLT5zdG9yZV9hdCwgc3RvcmVfYXQsIG5ld19zdG9yZSkp
IHsKKwkJZ290byByZXRyeTsKKwl9CisJaWYgKG5ld19zdG9yZSA9PSAwKSB7CisJCS8qIFJlZmls
bCB0aGUgcmFuZG9tIHN0b3JlICovCisJCXNjdHBfZmlsbF9yYW5kb21fc3RvcmUoaW5wKTsKKwl9
CisJcCA9ICZpbnAtPnJhbmRvbV9zdG9yZVtzdG9yZV9hdF07CisJeHAgPSAodWludDMyX3QgKilw
OworCXggPSAqeHA7CisJcmV0dXJuICh4KTsKK30KKwordWludDMyX3QKK3NjdHBfc2VsZWN0X2Ff
dGFnKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9y
dCwgaW50IGNoZWNrKQoreworCXVpbnQzMl90IHg7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJ
aWYgKGNoZWNrKSB7CisJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZub3cpOworCX0KKwlm
b3IgKDs7KSB7CisJCXggPSBzY3RwX3NlbGVjdF9pbml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsK
KwkJaWYgKHggPT0gMCkgeworCQkJLyogd2UgbmV2ZXIgdXNlIDAgKi8KKwkJCWNvbnRpbnVlOwor
CQl9CisJCWlmICghY2hlY2sgfHwgc2N0cF9pc192dGFnX2dvb2QoeCwgbHBvcnQsIHJwb3J0LCAm
bm93KSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJcmV0dXJuICh4KTsKK30KKworaW50MzJfdAor
c2N0cF9tYXBfYXNzb2Nfc3RhdGUoaW50IGtlcm5lbF9zdGF0ZSkKK3sKKwlpbnQzMl90IHVzZXJf
c3RhdGU7CisKKwlpZiAoa2VybmVsX3N0YXRlICYgU0NUUF9TVEFURV9XQVNfQUJPUlRFRCkgewor
CQl1c2VyX3N0YXRlID0gU0NUUF9DTE9TRUQ7CisJfSBlbHNlIGlmIChrZXJuZWxfc3RhdGUgJiBT
Q1RQX1NUQVRFX1NIVVRET1dOX1BFTkRJTkcpIHsKKwkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERP
V05fUEVORElORzsKKwl9IGVsc2UgeworCQlzd2l0Y2ggKGtlcm5lbF9zdGF0ZSAmIFNDVFBfU1RB
VEVfTUFTSykgeworCQljYXNlIFNDVFBfU1RBVEVfRU1QVFk6CisJCQl1c2VyX3N0YXRlID0gU0NU
UF9DTE9TRUQ7CisJCQlicmVhazsKKwkJY2FzZSBTQ1RQX1NUQVRFX0lOVVNFOgorCQkJdXNlcl9z
dGF0ZSA9IFNDVFBfQ0xPU0VEOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9DT09LSUVf
V0FJVDoKKwkJCXVzZXJfc3RhdGUgPSBTQ1RQX0NPT0tJRV9XQUlUOworCQkJYnJlYWs7CisJCWNh
c2UgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEOgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ09PS0lF
X0VDSE9FRDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfT1BFTjoKKwkJCXVzZXJfc3Rh
dGUgPSBTQ1RQX0VTVEFCTElTSEVEOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9TVEFURV9TSFVU
RE9XTl9TRU5UOgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfU0hVVERPV05fU0VOVDsKKwkJCWJyZWFr
OworCQljYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQ6CisJCQl1c2VyX3N0YXRlID0g
U0NUUF9TSFVURE9XTl9SRUNFSVZFRDsKKwkJCWJyZWFrOworCQljYXNlIFNDVFBfU1RBVEVfU0hV
VERPV05fQUNLX1NFTlQ6CisJCQl1c2VyX3N0YXRlID0gU0NUUF9TSFVURE9XTl9BQ0tfU0VOVDsK
KwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJdXNlcl9zdGF0ZSA9IFNDVFBfQ0xPU0VEOworCQkJ
YnJlYWs7CisJCX0KKwl9CisJcmV0dXJuICh1c2VyX3N0YXRlKTsKK30KKworaW50CitzY3RwX2lu
aXRfYXNvYyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisg
ICAgICAgICAgICAgICB1aW50MzJfdCBvdmVycmlkZV90YWcsIHVpbnQzMl90IHZyZl9pZCwgdWlu
dDE2X3Qgb19zdHJtcykKK3sKKwlzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYzsKKwkvKgor
CSAqIEFueXRoaW5nIHNldCB0byB6ZXJvIGlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIGFsbG9jYXRp
b24gcm91dGluZSdzCisJICogYnplcm8KKwkgKi8KKworCS8qCisJICogVXAgZnJvbnQgc2VsZWN0
IHdoYXQgc2NvcGluZyB0byBhcHBseSBvbiBhZGRyZXNzZXMgSSB0ZWxsIG15IHBlZXIKKwkgKiBO
b3Qgc3VyZSB3aGF0IHRvIGRvIHdpdGggdGhlc2UgcmlnaHQgbm93LCB3ZSB3aWxsIG5lZWQgdG8g
Y29tZSB1cAorCSAqIHdpdGggYSB3YXkgdG8gc2V0IHRoZW0uIFdlIG1heSBuZWVkIHRvIHBhc3Mg
dGhlbSB0aHJvdWdoIGZyb20gdGhlCisJICogY2FsbGVyIGluIHRoZSBzY3RwX2Fsb2NfYXNzb2Mo
KSBmdW5jdGlvbi4KKwkgKi8KKwlpbnQgaTsKKyNpZiBkZWZpbmVkKFNDVFBfREVUQUlMRURfU1RS
X1NUQVRTKQorCWludCBqOworI2VuZGlmCisKKwlhc29jID0gJnN0Y2ItPmFzb2M7CisJLyogaW5p
dCBhbGwgdmFyaWFibGVzIHRvIGEga25vd24gdmFsdWUuICovCisJU0NUUF9TRVRfU1RBVEUoJnN0
Y2ItPmFzb2MsIFNDVFBfU1RBVEVfSU5VU0UpOworCWFzb2MtPm1heF9idXJzdCA9IGlucC0+c2N0
cF9lcC5tYXhfYnVyc3Q7CisJYXNvYy0+ZnJfbWF4X2J1cnN0ID0gaW5wLT5zY3RwX2VwLmZyX21h
eF9idXJzdDsKKwlhc29jLT5oZWFydF9iZWF0X2RlbGF5ID0gVElDS1NfVE9fTVNFQyhpbnAtPnNj
dHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9IRUFSVEJFQVRdKTsKKwlhc29jLT5j
b29raWVfbGlmZSA9IGlucC0+c2N0cF9lcC5kZWZfY29va2llX2xpZmU7CisJYXNvYy0+c2N0cF9j
bXRfb25fb2ZmID0gaW5wLT5zY3RwX2NtdF9vbl9vZmY7CisJYXNvYy0+ZWNuX3N1cHBvcnRlZCA9
IGlucC0+ZWNuX3N1cHBvcnRlZDsKKwlhc29jLT5wcnNjdHBfc3VwcG9ydGVkID0gaW5wLT5wcnNj
dHBfc3VwcG9ydGVkOworCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlucC0+aWRhdGFfc3VwcG9y
dGVkOworCWFzb2MtPmF1dGhfc3VwcG9ydGVkID0gaW5wLT5hdXRoX3N1cHBvcnRlZDsKKwlhc29j
LT5hc2NvbmZfc3VwcG9ydGVkID0gaW5wLT5hc2NvbmZfc3VwcG9ydGVkOworCWFzb2MtPnJlY29u
ZmlnX3N1cHBvcnRlZCA9IGlucC0+cmVjb25maWdfc3VwcG9ydGVkOworCWFzb2MtPm5yc2Fja19z
dXBwb3J0ZWQgPSBpbnAtPm5yc2Fja19zdXBwb3J0ZWQ7CisJYXNvYy0+cGt0ZHJvcF9zdXBwb3J0
ZWQgPSBpbnAtPnBrdGRyb3Bfc3VwcG9ydGVkOworCWFzb2MtPmlkYXRhX3N1cHBvcnRlZCA9IGlu
cC0+aWRhdGFfc3VwcG9ydGVkOworCWFzb2MtPnNjdHBfY210X3BmID0gKHVpbnQ4X3QpMDsKKwlh
c29jLT5zY3RwX2ZyYWdfcG9pbnQgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKKwlhc29jLT5zY3Rw
X2ZlYXR1cmVzID0gaW5wLT5zY3RwX2ZlYXR1cmVzOworCWFzb2MtPmRlZmF1bHRfZHNjcCA9IGlu
cC0+c2N0cF9lcC5kZWZhdWx0X2RzY3A7CisJYXNvYy0+bWF4X2N3bmQgPSBpbnAtPm1heF9jd25k
OworI2lmZGVmIElORVQ2CisJaWYgKGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJlbCkgewor
CQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCA9IGlucC0+c2N0cF9lcC5kZWZhdWx0X2Zsb3dsYWJl
bDsKKwl9IGVsc2UgeworCQlpZiAoaW5wLT5pcF9pbnAuaW5wLmlucF9mbGFncyAmIElONlBfQVVU
T0ZMT1dMQUJFTCkgeworCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSBzY3RwX3NlbGVjdF9p
bml0aWFsX1RTTigmaW5wLT5zY3RwX2VwKTsKKwkJCWFzb2MtPmRlZmF1bHRfZmxvd2xhYmVsICY9
IDB4MDAwZmZmZmY7CisJCQlhc29jLT5kZWZhdWx0X2Zsb3dsYWJlbCB8PSAweDgwMDAwMDAwOwor
CQl9IGVsc2UgeworCQkJYXNvYy0+ZGVmYXVsdF9mbG93bGFiZWwgPSAwOworCQl9CisJfQorI2Vu
ZGlmCisJYXNvYy0+c2Jfc2VuZF9yZXN2ID0gMDsKKwlpZiAob3ZlcnJpZGVfdGFnKSB7CisJCWFz
b2MtPm15X3Z0YWcgPSBvdmVycmlkZV90YWc7CisJfSBlbHNlIHsKKwkJYXNvYy0+bXlfdnRhZyA9
IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+
cnBvcnQsICAxKTsKKwl9CisJLyogR2V0IHRoZSBub25jZSB0YWdzICovCisJYXNvYy0+bXlfdnRh
Z19ub25jZSA9IHNjdHBfc2VsZWN0X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9y
dCwgc3RjYi0+cnBvcnQsIDApOworCWFzb2MtPnBlZXJfdnRhZ19ub25jZSA9IHNjdHBfc2VsZWN0
X2FfdGFnKGlucCwgc3RjYi0+c2N0cF9lcC0+c2N0cF9scG9ydCwgc3RjYi0+cnBvcnQsIDApOwor
CWFzb2MtPnZyZl9pZCA9IHZyZl9pZDsKKworI2lmZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCisJ
YXNvYy0+dHNuX2luX2F0ID0gMDsKKwlhc29jLT50c25fb3V0X2F0ID0gMDsKKwlhc29jLT50c25f
aW5fd3JhcHBlZCA9IDA7CisJYXNvYy0+dHNuX291dF93cmFwcGVkID0gMDsKKwlhc29jLT5jdW1h
Y2tfbG9nX2F0ID0gMDsKKwlhc29jLT5jdW1hY2tfbG9nX2F0c250ID0gMDsKKyNlbmRpZgorI2lm
ZGVmIFNDVFBfRlNfU1BFQ19MT0cKKwlhc29jLT5mc19pbmRleCA9IDA7CisjZW5kaWYKKwlhc29j
LT5yZWZjbnQgPSAwOworCWFzb2MtPmFzc29jX3VwX3NlbnQgPSAwOworCWFzb2MtPmFzY29uZl9z
ZXFfb3V0ID0gYXNvYy0+c3RyX3Jlc2V0X3NlcV9vdXQgPSBhc29jLT5pbml0X3NlcV9udW1iZXIg
PSBhc29jLT5zZW5kaW5nX3NlcSA9CisJICAgIHNjdHBfc2VsZWN0X2luaXRpYWxfVFNOKCZpbnAt
PnNjdHBfZXApOworCWFzb2MtPmFzY29uZl9zZXFfb3V0X2Fja2VkID0gYXNvYy0+YXNjb25mX3Nl
cV9vdXQgLSAxOworCS8qIHdlIGFyZSBvcHRpbWlzaXRpYyBoZXJlICovCisJYXNvYy0+cGVlcl9z
dXBwb3J0c19uYXQgPSAwOworCWFzb2MtPnNlbnRfcXVldWVfcmV0cmFuX2NudCA9IDA7CisKKwkv
KiBmb3IgQ01UICovCisgICAgICAgIGFzb2MtPmxhc3RfbmV0X2NtdF9zZW5kX3N0YXJ0ZWQgPSBO
VUxMOworCisJLyogVGhpcyB3aWxsIG5lZWQgdG8gYmUgYWRqdXN0ZWQgKi8KKwlhc29jLT5sYXN0
X2Fja2VkX3NlcSA9IGFzb2MtPmluaXRfc2VxX251bWJlciAtIDE7CisJYXNvYy0+YWR2YW5jZWRf
cGVlcl9hY2tfcG9pbnQgPSBhc29jLT5sYXN0X2Fja2VkX3NlcTsKKwlhc29jLT5hc2NvbmZfc2Vx
X2luID0gYXNvYy0+bGFzdF9hY2tlZF9zZXE7CisKKwkvKiBoZXJlIHdlIGFyZSBkaWZmZXJlbnQs
IHdlIGhvbGQgdGhlIG5leHQgb25lIHdlIGV4cGVjdCAqLworCWFzb2MtPnN0cl9yZXNldF9zZXFf
aW4gPSBhc29jLT5sYXN0X2Fja2VkX3NlcSArIDE7CisKKwlhc29jLT5pbml0aWFsX2luaXRfcnRv
X21heCA9IGlucC0+c2N0cF9lcC5pbml0aWFsX2luaXRfcnRvX21heDsKKwlhc29jLT5pbml0aWFs
X3J0byA9IGlucC0+c2N0cF9lcC5pbml0aWFsX3J0bzsKKworCWFzb2MtPmRlZmF1bHRfbXR1ID0g
aW5wLT5zY3RwX2VwLmRlZmF1bHRfbXR1OworCWFzb2MtPm1heF9pbml0X3RpbWVzID0gaW5wLT5z
Y3RwX2VwLm1heF9pbml0X3RpbWVzOworCWFzb2MtPm1heF9zZW5kX3RpbWVzID0gaW5wLT5zY3Rw
X2VwLm1heF9zZW5kX3RpbWVzOworCWFzb2MtPmRlZl9uZXRfZmFpbHVyZSA9IGlucC0+c2N0cF9l
cC5kZWZfbmV0X2ZhaWx1cmU7CisJYXNvYy0+ZGVmX25ldF9wZl90aHJlc2hvbGQgPSBpbnAtPnNj
dHBfZXAuZGVmX25ldF9wZl90aHJlc2hvbGQ7CisJYXNvYy0+ZnJlZV9jaHVua19jbnQgPSAwOwor
CisJYXNvYy0+aWFtX2Jsb2NraW5nID0gMDsKKwlhc29jLT5jb250ZXh0ID0gaW5wLT5zY3RwX2Nv
bnRleHQ7CisJYXNvYy0+bG9jYWxfc3RycmVzZXRfc3VwcG9ydCA9IGlucC0+bG9jYWxfc3RycmVz
ZXRfc3VwcG9ydDsKKwlhc29jLT5kZWZfc2VuZCA9IGlucC0+ZGVmX3NlbmQ7CisJYXNvYy0+ZGVs
YXllZF9hY2sgPSBUSUNLU19UT19NU0VDKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tT
Q1RQX1RJTUVSX1JFQ1ZdKTsKKwlhc29jLT5zYWNrX2ZyZXEgPSBpbnAtPnNjdHBfZXAuc2N0cF9z
YWNrX2ZyZXE7CisJYXNvYy0+cHJfc2N0cF9jbnQgPSAwOworCWFzb2MtPnRvdGFsX291dHB1dF9x
dWV1ZV9zaXplID0gMDsKKworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNikgeworCQlhc29jLT5zY29wZS5pcHY2X2FkZHJfbGVnYWwgPSAxOworCQlpZiAoU0NU
UF9JUFY2X1Y2T05MWShpbnApID09IDApIHsKKwkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdh
bCA9IDE7CisJCX0gZWxzZSB7CisJCQlhc29jLT5zY29wZS5pcHY0X2FkZHJfbGVnYWwgPSAwOwor
CQl9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJYXNvYy0+c2NvcGUuY29ubl9hZGRy
X2xlZ2FsID0gMDsKKyNlbmRpZgorCX0gZWxzZSB7CisJCWFzb2MtPnNjb3BlLmlwdjZfYWRkcl9s
ZWdhbCA9IDA7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoaW5wLT5zY3RwX2Zs
YWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfQ09OTikgeworCQkJYXNvYy0+c2NvcGUuY29ubl9h
ZGRyX2xlZ2FsID0gMTsKKwkJCWFzb2MtPnNjb3BlLmlwdjRfYWRkcl9sZWdhbCA9IDA7CisJCX0g
ZWxzZSB7CisJCQlhc29jLT5zY29wZS5jb25uX2FkZHJfbGVnYWwgPSAwOworCQkJYXNvYy0+c2Nv
cGUuaXB2NF9hZGRyX2xlZ2FsID0gMTsKKwkJfQorI2Vsc2UKKwkJYXNvYy0+c2NvcGUuaXB2NF9h
ZGRyX2xlZ2FsID0gMTsKKyNlbmRpZgorCX0KKworCWFzb2MtPm15X3J3bmQgPSBtYXgoU0NUUF9T
Ql9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCksIFNDVFBfTUlOSU1BTF9SV05EKTsKKwlhc29j
LT5wZWVyc19yd25kID0gU0NUUF9TQl9MSU1JVF9SQ1YoaW5wLT5zY3RwX3NvY2tldCk7CisKKwlh
c29jLT5zbWFsbGVzdF9tdHUgPSBpbnAtPnNjdHBfZnJhZ19wb2ludDsKKwlhc29jLT5taW5ydG8g
PSBpbnAtPnNjdHBfZXAuc2N0cF9taW5ydG87CisJYXNvYy0+bWF4cnRvID0gaW5wLT5zY3RwX2Vw
LnNjdHBfbWF4cnRvOworCisJYXNvYy0+c3RyZWFtX2xvY2tlZF9vbiA9IDA7CisJYXNvYy0+ZWNu
X2VjaG9fY250X29ucSA9IDA7CisJYXNvYy0+c3RyZWFtX2xvY2tlZCA9IDA7CisKKwlhc29jLT5z
ZW5kX3NhY2sgPSAxOworCisJTElTVF9JTklUKCZhc29jLT5zY3RwX3Jlc3RyaWN0ZWRfYWRkcnMp
OworCisJVEFJTFFfSU5JVCgmYXNvYy0+bmV0cyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+cGVuZGlu
Z19yZXBseV9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+YXNjb25mX2Fja19zZW50KTsKKwkv
KiBTZXR1cCB0byBmaWxsIHRoZSBoYiByYW5kb20gY2FjaGUgYXQgZmlyc3QgSEIgKi8KKwlhc29j
LT5oYl9yYW5kb21faWR4ID0gNDsKKworCWFzb2MtPnNjdHBfYXV0b2Nsb3NlX3RpY2tzID0gaW5w
LT5zY3RwX2VwLmF1dG9fY2xvc2VfdGltZTsKKworCXN0Y2ItPmFzb2MuY29uZ2VzdGlvbl9jb250
cm9sX21vZHVsZSA9IGlucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRfY2NfbW9kdWxlOworCXN0Y2It
PmFzb2MuY2NfZnVuY3Rpb25zID0gc2N0cF9jY19mdW5jdGlvbnNbaW5wLT5zY3RwX2VwLnNjdHBf
ZGVmYXVsdF9jY19tb2R1bGVdOworCisJc3RjYi0+YXNvYy5zdHJlYW1fc2NoZWR1bGluZ19tb2R1
bGUgPSBpbnAtPnNjdHBfZXAuc2N0cF9kZWZhdWx0X3NzX21vZHVsZTsKKwlzdGNiLT5hc29jLnNz
X2Z1bmN0aW9ucyA9IHNjdHBfc3NfZnVuY3Rpb25zW2lucC0+c2N0cF9lcC5zY3RwX2RlZmF1bHRf
c3NfbW9kdWxlXTsKKworCS8qCisJICogTm93IHRoZSBzdHJlYW0gcGFyYW1ldGVycywgaGVyZSB3
ZSBhbGxvY2F0ZSBzcGFjZSBmb3IgYWxsIHN0cmVhbXMKKwkgKiB0aGF0IHdlIHJlcXVlc3QgYnkg
ZGVmYXVsdC4KKwkgKi8KKwlhc29jLT5zdHJtX3JlYWxvdXRzaXplID0gYXNvYy0+c3RyZWFtb3V0
Y250ID0gYXNvYy0+cHJlX29wZW5fc3RyZWFtcyA9CisJICAgIG9fc3RybXM7CisJU0NUUF9NQUxM
T0MoYXNvYy0+c3RybW91dCwgc3RydWN0IHNjdHBfc3RyZWFtX291dCAqLAorCQkgICAgYXNvYy0+
c3RyZWFtb3V0Y250ICogc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9vdXQpLAorCQkgICAgU0NU
UF9NX1NUUk1PKTsKKwlpZiAoYXNvYy0+c3RybW91dCA9PSBOVUxMKSB7CisJCS8qIGJpZyB0cm91
YmxlIG5vIG1lbW9yeSAqLworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQVVRJTCwgRU5PTUVNKTsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKwlm
b3IgKGkgPSAwOyBpIDwgYXNvYy0+c3RyZWFtb3V0Y250OyBpKyspIHsKKwkJLyoKKwkJICogaW5i
b3VuZCBzaWRlIG11c3QgYmUgc2V0IHRvIDB4ZmZmZiwgYWxzbyBOT1RFIHdoZW4gd2UgZ2V0CisJ
CSAqIHRoZSBJTklULUFDSyBiYWNrIChmb3IgSU5JVCBzZW5kZXIpIHdlIE1VU1QgcmVkdWNlIHRo
ZQorCQkgKiBjb3VudCAoc3RyZWFtb3V0Y250KSBidXQgZmlyc3QgY2hlY2sgaWYgd2Ugc2VudCB0
byBhbnkgb2YKKwkJICogdGhlIHVwcGVyIHN0cmVhbXMgdGhhdCB3ZXJlIGRyb3BwZWQgKGlmIHNv
bWUgd2VyZSkuIFRob3NlCisJCSAqIHRoYXQgd2VyZSBkcm9wcGVkIG11c3QgYmUgbm90aWZpZWQg
dG8gdGhlIHVwcGVyIGxheWVyIGFzCisJCSAqIGZhaWxlZCB0byBzZW5kLgorCQkgKi8KKwkJYXNv
Yy0+c3RybW91dFtpXS5uZXh0X21pZF9vcmRlcmVkID0gMDsKKwkJYXNvYy0+c3RybW91dFtpXS5u
ZXh0X21pZF91bm9yZGVyZWQgPSAwOworCQlUQUlMUV9JTklUKCZhc29jLT5zdHJtb3V0W2ldLm91
dHF1ZXVlKTsKKwkJYXNvYy0+c3RybW91dFtpXS5jaHVua3Nfb25fcXVldWVzID0gMDsKKyNpZiBk
ZWZpbmVkKFNDVFBfREVUQUlMRURfU1RSX1NUQVRTKQorCQlmb3IgKGogPSAwOyBqIDwgU0NUUF9Q
Ul9TQ1RQX01BWCArIDE7IGorKykgeworCQkJYXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfc2Vu
dFtqXSA9IDA7CisJCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF91bnNlbnRbal0gPSAwOwor
CQl9CisjZWxzZQorCQlhc29jLT5zdHJtb3V0W2ldLmFiYW5kb25lZF9zZW50WzBdID0gMDsKKwkJ
YXNvYy0+c3RybW91dFtpXS5hYmFuZG9uZWRfdW5zZW50WzBdID0gMDsKKyNlbmRpZgorCQlhc29j
LT5zdHJtb3V0W2ldLnNpZCA9IGk7CisJCWFzb2MtPnN0cm1vdXRbaV0ubGFzdF9tc2dfaW5jb21w
bGV0ZSA9IDA7CisJCWFzb2MtPnN0cm1vdXRbaV0uc3RhdGUgPSBTQ1RQX1NUUkVBTV9PUEVOSU5H
OworCQlhc29jLT5zc19mdW5jdGlvbnMuc2N0cF9zc19pbml0X3N0cmVhbShzdGNiLCAmYXNvYy0+
c3RybW91dFtpXSwgTlVMTCk7CisJfQorCWFzb2MtPnNzX2Z1bmN0aW9ucy5zY3RwX3NzX2luaXQo
c3RjYiwgYXNvYywgMCk7CisKKwkvKiBOb3cgdGhlIG1hcHBpbmcgYXJyYXkgKi8KKwlhc29jLT5t
YXBwaW5nX2FycmF5X3NpemUgPSBTQ1RQX0lOSVRJQUxfTUFQUElOR19BUlJBWTsKKwlTQ1RQX01B
TExPQyhhc29jLT5tYXBwaW5nX2FycmF5LCB1aW50OF90ICosIGFzb2MtPm1hcHBpbmdfYXJyYXlf
c2l6ZSwKKwkJICAgIFNDVFBfTV9NQVApOworCWlmIChhc29jLT5tYXBwaW5nX2FycmF5ID09IE5V
TEwpIHsKKwkJU0NUUF9GUkVFKGFzb2MtPnN0cm1vdXQsIFNDVFBfTV9TVFJNTyk7CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9N
RU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCW1lbXNldChhc29jLT5tYXBwaW5nX2FycmF5
LCAwLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUpOworCVNDVFBfTUFMTE9DKGFzb2MtPm5yX21h
cHBpbmdfYXJyYXksIHVpbnQ4X3QgKiwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAorCSAgICBT
Q1RQX01fTUFQKTsKKwlpZiAoYXNvYy0+bnJfbWFwcGluZ19hcnJheSA9PSBOVUxMKSB7CisJCVND
VFBfRlJFRShhc29jLT5zdHJtb3V0LCBTQ1RQX01fU1RSTU8pOworCQlTQ1RQX0ZSRUUoYXNvYy0+
bWFwcGluZ19hcnJheSwgU0NUUF9NX01BUCk7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwg
c3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01F
TSk7CisJfQorCW1lbXNldChhc29jLT5ucl9tYXBwaW5nX2FycmF5LCAwLCBhc29jLT5tYXBwaW5n
X2FycmF5X3NpemUpOworCisJLyogTm93IHRoZSBpbml0IG9mIHRoZSBvdGhlciBvdXRxdWV1ZXMg
Ki8KKwlUQUlMUV9JTklUKCZhc29jLT5mcmVlX2NodW5rcyk7CisJVEFJTFFfSU5JVCgmYXNvYy0+
Y29udHJvbF9zZW5kX3F1ZXVlKTsKKwlUQUlMUV9JTklUKCZhc29jLT5hc2NvbmZfc2VuZF9xdWV1
ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+c2VuZF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+
c2VudF9xdWV1ZSk7CisJVEFJTFFfSU5JVCgmYXNvYy0+cmVzZXRIZWFkKTsKKwlhc29jLT5tYXhf
aW5ib3VuZF9zdHJlYW1zID0gaW5wLT5zY3RwX2VwLm1heF9vcGVuX3N0cmVhbXNfaW50b21lOwor
CVRBSUxRX0lOSVQoJmFzb2MtPmFzY29uZl9xdWV1ZSk7CisJLyogYXV0aGVudGljYXRpb24gZmll
bGRzICovCisJYXNvYy0+YXV0aGluZm8ucmFuZG9tID0gTlVMTDsKKwlhc29jLT5hdXRoaW5mby5h
Y3RpdmVfa2V5aWQgPSAwOworCWFzb2MtPmF1dGhpbmZvLmFzc29jX2tleSA9IE5VTEw7CisJYXNv
Yy0+YXV0aGluZm8uYXNzb2Nfa2V5aWQgPSAwOworCWFzb2MtPmF1dGhpbmZvLnJlY3Zfa2V5ID0g
TlVMTDsKKwlhc29jLT5hdXRoaW5mby5yZWN2X2tleWlkID0gMDsKKwlMSVNUX0lOSVQoJmFzb2Mt
PnNoYXJlZF9rZXlzKTsKKwlhc29jLT5tYXJrZWRfcmV0cmFucyA9IDA7CisJYXNvYy0+cG9ydCA9
IGlucC0+c2N0cF9lcC5wb3J0OworCWFzb2MtPnRpbW9pbml0ID0gMDsKKwlhc29jLT50aW1vZGF0
YSA9IDA7CisJYXNvYy0+dGltb3NhY2sgPSAwOworCWFzb2MtPnRpbW9zaHV0ZG93biA9IDA7CisJ
YXNvYy0+dGltb2hlYXJ0YmVhdCA9IDA7CisJYXNvYy0+dGltb2Nvb2tpZSA9IDA7CisJYXNvYy0+
dGltb3NodXRkb3duYWNrID0gMDsKKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmYXNvYy0+
c3RhcnRfdGltZSk7CisJYXNvYy0+ZGlzY29udGludWl0eV90aW1lID0gYXNvYy0+c3RhcnRfdGlt
ZTsKKwlmb3IgKGkgPSAwOyBpIDwgU0NUUF9QUl9TQ1RQX01BWCArIDE7IGkrKykgeworCQlhc29j
LT5hYmFuZG9uZWRfdW5zZW50W2ldID0gMDsKKwkJYXNvYy0+YWJhbmRvbmVkX3NlbnRbaV0gPSAw
OworCX0KKwkvKiBzYV9pZ25vcmUgTUVNTEVBSyB7bWVtb3J5IGlzIHB1dCBpbiB0aGUgYXNzb2Mg
bWFwcGluZyBhcnJheSBhbmQgZnJlZWQgbGF0ZXIgd2hlbgorCSAqIHRoZSBhc3NvY2lhdGlvbiBp
cyBmcmVlZC4KKwkgKi8KKwlyZXR1cm4gKDApOworfQorCit2b2lkCitzY3RwX3ByaW50X21hcHBp
bmdfYXJyYXkoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MpCit7CisJdW5zaWduZWQgaW50
IGksIGxpbWl0OworCisJU0NUUF9QUklOVEYoIk1hcHBpbmcgYXJyYXkgc2l6ZTogJWQsIGJhc2VU
U046ICU4Ljh4LCBjdW1BY2s6ICU4Ljh4LCBoaWdoZXN0VFNOOiAoJTguOHgsICU4Ljh4KS5cbiIs
CisJICAgICAgICAgICAgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplLAorCSAgICAgICAgICAgIGFz
b2MtPm1hcHBpbmdfYXJyYXlfYmFzZV90c24sCisJICAgICAgICAgICAgYXNvYy0+Y3VtdWxhdGl2
ZV90c24sCisJICAgICAgICAgICAgYXNvYy0+aGlnaGVzdF90c25faW5zaWRlX21hcCwKKwkgICAg
ICAgICAgICBhc29jLT5oaWdoZXN0X3Rzbl9pbnNpZGVfbnJfbWFwKTsKKwlmb3IgKGxpbWl0ID0g
YXNvYy0+bWFwcGluZ19hcnJheV9zaXplOyBsaW1pdCA+IDE7IGxpbWl0LS0pIHsKKwkJaWYgKGFz
b2MtPm1hcHBpbmdfYXJyYXlbbGltaXQgLSAxXSAhPSAwKSB7CisJCQlicmVhazsKKwkJfQorCX0K
KwlTQ1RQX1BSSU5URigiUmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBh
cmUgemVybyk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7CisJZm9yIChp
ID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5t
YXBwaW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcgJyA6ICdcbicpOworCX0KKwlpZiAo
bGltaXQgJSAxNikKKwkJU0NUUF9QUklOVEYoIlxuIik7CisJZm9yIChsaW1pdCA9IGFzb2MtPm1h
cHBpbmdfYXJyYXlfc2l6ZTsgbGltaXQgPiAxOyBsaW1pdC0tKSB7CisJCWlmIChhc29jLT5ucl9t
YXBwaW5nX2FycmF5W2xpbWl0IC0gMV0pIHsKKwkJCWJyZWFrOworCQl9CisJfQorCVNDVFBfUFJJ
TlRGKCJOb24gcmVuZWdhYmxlIG1hcHBpbmcgYXJyYXkgKGxhc3QgJWQgZW50cmllcyBhcmUgemVy
byk6XG4iLCBhc29jLT5tYXBwaW5nX2FycmF5X3NpemUgLSBsaW1pdCk7CisJZm9yIChpID0gMDsg
aSA8IGxpbWl0OyBpKyspIHsKKwkJU0NUUF9QUklOVEYoIiUyLjJ4JWMiLCBhc29jLT5ucl9tYXBw
aW5nX2FycmF5W2ldLCAoKGkgKyAxKSAlIDE2KSA/ICcgJzogJ1xuJyk7CisJfQorCWlmIChsaW1p
dCAlIDE2KQorCQlTQ1RQX1BSSU5URigiXG4iKTsKK30KKworaW50CitzY3RwX2V4cGFuZF9tYXBw
aW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jLCB1aW50MzJfdCBuZWVkZWQp
Cit7CisJLyogbWFwcGluZyBhcnJheSBuZWVkcyB0byBncm93ICovCisJdWludDhfdCAqbmV3X2Fy
cmF5MSwgKm5ld19hcnJheTI7CisJdWludDMyX3QgbmV3X3NpemU7CisKKwluZXdfc2l6ZSA9IGFz
b2MtPm1hcHBpbmdfYXJyYXlfc2l6ZSArICgobmVlZGVkKzcpLzggKyBTQ1RQX01BUFBJTkdfQVJS
QVlfSU5DUik7CisJU0NUUF9NQUxMT0MobmV3X2FycmF5MSwgdWludDhfdCAqLCBuZXdfc2l6ZSwg
U0NUUF9NX01BUCk7CisJU0NUUF9NQUxMT0MobmV3X2FycmF5MiwgdWludDhfdCAqLCBuZXdfc2l6
ZSwgU0NUUF9NX01BUCk7CisJaWYgKChuZXdfYXJyYXkxID09IE5VTEwpIHx8IChuZXdfYXJyYXky
ID09IE5VTEwpKSB7CisJCS8qIGNhbid0IGdldCBtb3JlLCBmb3JnZXQgaXQgKi8KKwkJU0NUUF9Q
UklOVEYoIk5vIG1lbW9yeSBmb3IgZXhwYW5zaW9uIG9mIFNDVFAgbWFwcGluZyBhcnJheSAlZFxu
IiwgbmV3X3NpemUpOworCQlpZiAobmV3X2FycmF5MSkgeworCQkJU0NUUF9GUkVFKG5ld19hcnJh
eTEsIFNDVFBfTV9NQVApOworCQl9CisJCWlmIChuZXdfYXJyYXkyKSB7CisJCQlTQ1RQX0ZSRUUo
bmV3X2FycmF5MiwgU0NUUF9NX01BUCk7CisJCX0KKwkJcmV0dXJuICgtMSk7CisJfQorCW1lbXNl
dChuZXdfYXJyYXkxLCAwLCBuZXdfc2l6ZSk7CisJbWVtc2V0KG5ld19hcnJheTIsIDAsIG5ld19z
aXplKTsKKwltZW1jcHkobmV3X2FycmF5MSwgYXNvYy0+bWFwcGluZ19hcnJheSwgYXNvYy0+bWFw
cGluZ19hcnJheV9zaXplKTsKKwltZW1jcHkobmV3X2FycmF5MiwgYXNvYy0+bnJfbWFwcGluZ19h
cnJheSwgYXNvYy0+bWFwcGluZ19hcnJheV9zaXplKTsKKwlTQ1RQX0ZSRUUoYXNvYy0+bWFwcGlu
Z19hcnJheSwgU0NUUF9NX01BUCk7CisJU0NUUF9GUkVFKGFzb2MtPm5yX21hcHBpbmdfYXJyYXks
IFNDVFBfTV9NQVApOworCWFzb2MtPm1hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkxOworCWFzb2Mt
Pm5yX21hcHBpbmdfYXJyYXkgPSBuZXdfYXJyYXkyOworCWFzb2MtPm1hcHBpbmdfYXJyYXlfc2l6
ZSA9IG5ld19zaXplOworCXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfaXRl
cmF0b3Jfd29yayhzdHJ1Y3Qgc2N0cF9pdGVyYXRvciAqaXQpCit7CisJaW50IGl0ZXJhdGlvbl9j
b3VudCA9IDA7CisJaW50IGlucF9za2lwID0gMDsKKwlpbnQgZmlyc3RfaW4gPSAxOworCXN0cnVj
dCBzY3RwX2lucGNiICp0aW5wOworCisJU0NUUF9JTlBfSU5GT19STE9DSygpOworCVNDVFBfSVRF
UkFUT1JfTE9DSygpOworCXNjdHBfaXRfY3RsLmN1cl9pdCA9IGl0OworCWlmIChpdC0+aW5wKSB7
CisJCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOworCQlTQ1RQX0lOUF9ERUNSX1JFRihpdC0+aW5w
KTsKKwl9CisJaWYgKGl0LT5pbnAgPT0gTlVMTCkgeworCQkvKiBpdGVyYXRvciBpcyBjb21wbGV0
ZSAqLworZG9uZV93aXRoX2l0ZXJhdG9yOgorCQlzY3RwX2l0X2N0bC5jdXJfaXQgPSBOVUxMOwor
CQlTQ1RQX0lURVJBVE9SX1VOTE9DSygpOworCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJ
aWYgKGl0LT5mdW5jdGlvbl9hdGVuZCAhPSBOVUxMKSB7CisJCQkoKml0LT5mdW5jdGlvbl9hdGVu
ZCkgKGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKwkJfQorCQlTQ1RQX0ZSRUUoaXQsIFNDVFBfTV9J
VEVSKTsKKwkJcmV0dXJuOworCX0KK3NlbGVjdF9hX25ld19lcDoKKwlpZiAoZmlyc3RfaW4pIHsK
KwkJZmlyc3RfaW4gPSAwOworCX0gZWxzZSB7CisJCVNDVFBfSU5QX1JMT0NLKGl0LT5pbnApOwor
CX0KKwl3aGlsZSAoKChpdC0+cGNiX2ZsYWdzKSAmJgorCSAgICAgICAgKChpdC0+aW5wLT5zY3Rw
X2ZsYWdzICYgaXQtPnBjYl9mbGFncykgIT0gaXQtPnBjYl9mbGFncykpIHx8CisJICAgICAgICgo
aXQtPnBjYl9mZWF0dXJlcykgJiYKKwkJKChpdC0+aW5wLT5zY3RwX2ZlYXR1cmVzICYgaXQtPnBj
Yl9mZWF0dXJlcykgIT0gaXQtPnBjYl9mZWF0dXJlcykpKSB7CisJCS8qIGVuZHBvaW50IGZsYWdz
IG9yIGZlYXR1cmVzIGRvbid0IG1hdGNoLCBzbyBrZWVwIGxvb2tpbmcgKi8KKwkJaWYgKGl0LT5p
dGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lOUCkgeworCQkJU0NUUF9J
TlBfUlVOTE9DSyhpdC0+aW5wKTsKKwkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOworCQl9CisJ
CXRpbnAgPSBpdC0+aW5wOworCQlpdC0+aW5wID0gTElTVF9ORVhUKGl0LT5pbnAsIHNjdHBfbGlz
dCk7CisJCVNDVFBfSU5QX1JVTkxPQ0sodGlucCk7CisJCWlmIChpdC0+aW5wID09IE5VTEwpIHsK
KwkJCWdvdG8gZG9uZV93aXRoX2l0ZXJhdG9yOworCQl9CisJCVNDVFBfSU5QX1JMT0NLKGl0LT5p
bnApOworCX0KKwkvKiBub3cgZ28gdGhyb3VnaCBlYWNoIGFzc29jIHdoaWNoIGlzIGluIHRoZSBk
ZXNpcmVkIHN0YXRlICovCisJaWYgKGl0LT5kb25lX2N1cnJlbnRfZXAgPT0gMCkgeworCQlpZiAo
aXQtPmZ1bmN0aW9uX2lucCAhPSBOVUxMKQorCQkJaW5wX3NraXAgPSAoKml0LT5mdW5jdGlvbl9p
bnApKGl0LT5pbnAsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKwkJaXQtPmRvbmVfY3VycmVudF9l
cCA9IDE7CisJfQorCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7CisJCS8qIHJ1biB0aGUgcGVyIGlu
c3RhbmNlIGZ1bmN0aW9uICovCisJCWl0LT5zdGNiID0gTElTVF9GSVJTVCgmaXQtPmlucC0+c2N0
cF9hc29jX2xpc3QpOworCX0KKwlpZiAoKGlucF9za2lwKSB8fCBpdC0+c3RjYiA9PSBOVUxMKSB7
CisJCWlmIChpdC0+ZnVuY3Rpb25faW5wX2VuZCAhPSBOVUxMKSB7CisJCQlpbnBfc2tpcCA9ICgq
aXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCisJCQkJCQkJICAgaXQtPnBvaW50ZXIsCisJ
CQkJCQkJICAgaXQtPnZhbCk7CisJCX0KKwkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+aW5wKTsKKwkJ
Z290byBub19zdGNiOworCX0KKwl3aGlsZSAoaXQtPnN0Y2IpIHsKKwkJU0NUUF9UQ0JfTE9DSyhp
dC0+c3RjYik7CisJCWlmIChpdC0+YXNvY19zdGF0ZSAmJiAoKGl0LT5zdGNiLT5hc29jLnN0YXRl
ICYgaXQtPmFzb2Nfc3RhdGUpICE9IGl0LT5hc29jX3N0YXRlKSkgeworCQkJLyogbm90IGluIHRo
ZSByaWdodCBzdGF0ZS4uLiBrZWVwIGxvb2tpbmcgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhpdC0+
c3RjYik7CisJCQlnb3RvIG5leHRfYXNzb2M7CisJCX0KKwkJLyogc2VlIGlmIHdlIGhhdmUgbGlt
aXRlZCBvdXQgdGhlIGl0ZXJhdG9yIGxvb3AgKi8KKwkJaXRlcmF0aW9uX2NvdW50Kys7CisJCWlm
IChpdGVyYXRpb25fY291bnQgPiBTQ1RQX0lURVJBVE9SX01BWF9BVF9PTkNFKSB7CisJCQkvKiBQ
YXVzZSB0byBsZXQgb3RoZXJzIGdyYWIgdGhlIGxvY2sgKi8KKwkJCWF0b21pY19hZGRfaW50KCZp
dC0+c3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKGl0LT5zdGNiKTsK
KwkJCVNDVFBfSU5QX0lOQ1JfUkVGKGl0LT5pbnApOworCQkJU0NUUF9JTlBfUlVOTE9DSyhpdC0+
aW5wKTsKKwkJCVNDVFBfSVRFUkFUT1JfVU5MT0NLKCk7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxP
Q0soKTsKKwkJCVNDVFBfSU5QX0lORk9fUkxPQ0soKTsKKwkJCVNDVFBfSVRFUkFUT1JfTE9DSygp
OworCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzKSB7CisJCQkJLyogV2Ugd29uJ3Qg
YmUgc3RheWluZyBoZXJlICovCisJCQkJU0NUUF9JTlBfREVDUl9SRUYoaXQtPmlucCk7CisJCQkJ
YXRvbWljX2FkZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOworI2lmICFkZWZpbmVk
KF9fRnJlZUJTRF9fKQorCQkJCWlmIChzY3RwX2l0X2N0bC5pdGVyYXRvcl9mbGFncyAmCisJCQkJ
ICAgU0NUUF9JVEVSQVRPUl9NVVNUX0VYSVQpIHsKKwkJCQkJZ290byBkb25lX3dpdGhfaXRlcmF0
b3I7CisJCQkJfQorI2VuZGlmCisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYK
KwkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUKSB7CisJCQkJCXNjdHBfaXRfY3RsLml0
ZXJhdG9yX2ZsYWdzICY9IH5TQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lUOworCQkJCQlnb3RvIGRv
bmVfd2l0aF9pdGVyYXRvcjsKKwkJCQl9CisJCQkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2Zs
YWdzICYKKwkJCQkgICBTQ1RQX0lURVJBVE9SX1NUT1BfQ1VSX0lOUCkgeworCQkJCQlzY3RwX2l0
X2N0bC5pdGVyYXRvcl9mbGFncyAmPSB+U0NUUF9JVEVSQVRPUl9TVE9QX0NVUl9JTlA7CisJCQkJ
CWdvdG8gbm9fc3RjYjsKKwkJCQl9CisJCQkJLyogSWYgd2UgcmVhY2ggaGVyZSBodWg/ICovCisJ
CQkJU0NUUF9QUklOVEYoIlVua25vd24gaXQgY3RsIGZsYWcgJXhcbiIsCisJCQkJCSAgICBzY3Rw
X2l0X2N0bC5pdGVyYXRvcl9mbGFncyk7CisJCQkJc2N0cF9pdF9jdGwuaXRlcmF0b3JfZmxhZ3Mg
PSAwOworCQkJfQorCQkJU0NUUF9JTlBfUkxPQ0soaXQtPmlucCk7CisJCQlTQ1RQX0lOUF9ERUNS
X1JFRihpdC0+aW5wKTsKKwkJCVNDVFBfVENCX0xPQ0soaXQtPnN0Y2IpOworCQkJYXRvbWljX2Fk
ZF9pbnQoJml0LT5zdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQkJaXRlcmF0aW9uX2NvdW50ID0g
MDsKKwkJfQorCisJCS8qIHJ1biBmdW5jdGlvbiBvbiB0aGlzIG9uZSAqLworCQkoKml0LT5mdW5j
dGlvbl9hc3NvYykoaXQtPmlucCwgaXQtPnN0Y2IsIGl0LT5wb2ludGVyLCBpdC0+dmFsKTsKKwor
CQkvKgorCQkgKiB3ZSBsaWUgaGVyZSwgaXQgcmVhbGx5IG5lZWRzIHRvIGhhdmUgaXRzIG93biB0
eXBlIGJ1dAorCQkgKiBmaXJzdCBJIG11c3QgdmVyaWZ5IHRoYXQgdGhpcyB3b24ndCBlZmZlY3Qg
dGhpbmdzIDotMAorCQkgKi8KKwkJaWYgKGl0LT5ub19jaHVua19vdXRwdXQgPT0gMCkKKwkJCXNj
dHBfY2h1bmtfb3V0cHV0KGl0LT5pbnAsIGl0LT5zdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1QzLCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworCisJCVNDVFBfVENCX1VOTE9DSyhpdC0+c3RjYik7CisJbmV4
dF9hc3NvYzoKKwkJaXQtPnN0Y2IgPSBMSVNUX05FWFQoaXQtPnN0Y2IsIHNjdHBfdGNibGlzdCk7
CisJCWlmIChpdC0+c3RjYiA9PSBOVUxMKSB7CisJCQkvKiBSdW4gbGFzdCBmdW5jdGlvbiAqLwor
CQkJaWYgKGl0LT5mdW5jdGlvbl9pbnBfZW5kICE9IE5VTEwpIHsKKwkJCQlpbnBfc2tpcCA9ICgq
aXQtPmZ1bmN0aW9uX2lucF9lbmQpKGl0LT5pbnAsCisJCQkJCQkJCSAgIGl0LT5wb2ludGVyLAor
CQkJCQkJCQkgICBpdC0+dmFsKTsKKwkJCX0KKwkJfQorCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGl0
LT5pbnApOworIG5vX3N0Y2I6CisJLyogZG9uZSB3aXRoIGFsbCBhc3NvY3Mgb24gdGhpcyBlbmRw
b2ludCwgbW92ZSBvbiB0byBuZXh0IGVuZHBvaW50ICovCisJaXQtPmRvbmVfY3VycmVudF9lcCA9
IDA7CisJaWYgKGl0LT5pdGVyYXRvcl9mbGFncyAmIFNDVFBfSVRFUkFUT1JfRE9fU0lOR0xFX0lO
UCkgeworCQlpdC0+aW5wID0gTlVMTDsKKwl9IGVsc2UgeworCQlpdC0+aW5wID0gTElTVF9ORVhU
KGl0LT5pbnAsIHNjdHBfbGlzdCk7CisJfQorCWlmIChpdC0+aW5wID09IE5VTEwpIHsKKwkJZ290
byBkb25lX3dpdGhfaXRlcmF0b3I7CisJfQorCWdvdG8gc2VsZWN0X2FfbmV3X2VwOworfQorCit2
b2lkCitzY3RwX2l0ZXJhdG9yX3dvcmtlcih2b2lkKQoreworCXN0cnVjdCBzY3RwX2l0ZXJhdG9y
ICppdCwgKm5pdDsKKworCS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIFdRIGxv
Y2sgaW4gcGxhY2UgKi8KKworCXNjdHBfaXRfY3RsLml0ZXJhdG9yX3J1bm5pbmcgPSAxOworCVRB
SUxRX0ZPUkVBQ0hfU0FGRShpdCwgJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgc2N0cF9ueHRf
aXRyLCBuaXQpIHsKKwkJLyogbm93IGxldHMgd29yayBvbiB0aGlzIG9uZSAqLworCQlUQUlMUV9S
RU1PVkUoJnNjdHBfaXRfY3RsLml0ZXJhdG9yaGVhZCwgaXQsIHNjdHBfbnh0X2l0cik7CisJCVND
VFBfSVBJX0lURVJBVE9SX1dRX1VOTE9DSygpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorCQlDVVJWTkVUX1NFVChpdC0+dm4pOworI2Vu
ZGlmCisJCXNjdHBfaXRlcmF0b3Jfd29yayhpdCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCUNVUlZORVRfUkVTVE9SRSgpOworI2Vu
ZGlmCisJCVNDVFBfSVBJX0lURVJBVE9SX1dRX0xPQ0soKTsKKyNpZiAhZGVmaW5lZChfX0ZyZWVC
U0RfXykKKwkJaWYgKHNjdHBfaXRfY3RsLml0ZXJhdG9yX2ZsYWdzICYgU0NUUF9JVEVSQVRPUl9N
VVNUX0VYSVQpIHsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJLypzYV9pZ25vcmUgRlJFRURf
TUVNT1JZKi8KKwl9CisJc2N0cF9pdF9jdGwuaXRlcmF0b3JfcnVubmluZyA9IDA7CisJcmV0dXJu
OworfQorCisKK3N0YXRpYyB2b2lkCitzY3RwX2hhbmRsZV9hZGRyX3dxKHZvaWQpCit7CisJLyog
ZGVhbCB3aXRoIHRoZSBBRERSIHdxIGZyb20gdGhlIHJ0c29jayBjYWxscyAqLworCXN0cnVjdCBz
Y3RwX2xhZGRyICp3aSwgKm53aTsKKwlzdHJ1Y3Qgc2N0cF9hc2NvbmZfaXRlcmF0b3IgKmFzYzsK
KworCVNDVFBfTUFMTE9DKGFzYywgc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yICosCisJCSAg
ICBzaXplb2Yoc3RydWN0IHNjdHBfYXNjb25mX2l0ZXJhdG9yKSwgU0NUUF9NX0FTQ19JVCk7CisJ
aWYgKGFzYyA9PSBOVUxMKSB7CisJCS8qIFRyeSBsYXRlciwgbm8gbWVtb3J5ICovCisJCXNjdHBf
dGltZXJfc3RhcnQoU0NUUF9USU1FUl9UWVBFX0FERFJfV1EsCisJCQkJIChzdHJ1Y3Qgc2N0cF9p
bnBjYiAqKU5VTEwsCisJCQkJIChzdHJ1Y3Qgc2N0cF90Y2IgKilOVUxMLAorCQkJCSAoc3RydWN0
IHNjdHBfbmV0cyAqKU5VTEwpOworCQlyZXR1cm47CisJfQorCUxJU1RfSU5JVCgmYXNjLT5saXN0
X29mX3dvcmspOworCWFzYy0+Y250ID0gMDsKKworCUxJU1RfRk9SRUFDSF9TQUZFKHdpLCAmU0NU
UF9CQVNFX0lORk8oYWRkcl93cSksIHNjdHBfbnh0X2FkZHIsIG53aSkgeworCQlMSVNUX1JFTU9W
RSh3aSwgc2N0cF9ueHRfYWRkcik7CisJCUxJU1RfSU5TRVJUX0hFQUQoJmFzYy0+bGlzdF9vZl93
b3JrLCB3aSwgc2N0cF9ueHRfYWRkcik7CisJCWFzYy0+Y250Kys7CisJfQorCisJaWYgKGFzYy0+
Y250ID09IDApIHsKKwkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJfSBlbHNlIHsK
KwkJaW50IHJldDsKKworCQlyZXQgPSBzY3RwX2luaXRpYXRlX2l0ZXJhdG9yKHNjdHBfYXNjb25m
X2l0ZXJhdG9yX2VwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25m
X2l0ZXJhdG9yX3N0Y2IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyog
Tm8gZXAgZW5kIGZvciBib3VuZGFsbCAqLworCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFNDVFBfUENCX0FOWV9GRUFUVVJFUywKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT
Q1RQX0FTT0NfQU5ZX1NUQVRFLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lk
ICopYXNjLCAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfYXNjb25mX2l0
ZXJhdG9yX2VuZCwgTlVMTCwgMCk7CisJCWlmIChyZXQpIHsKKwkJCVNDVFBfUFJJTlRGKCJGYWls
ZWQgdG8gaW5pdGlhdGUgaXRlcmF0b3IgZm9yIGhhbmRsZV9hZGRyX3dxXG4iKTsKKwkJCS8qIEZy
ZWVpbmcgaWYgd2UgYXJlIHN0b3BwaW5nIG9yIHB1dCBiYWNrIG9uIHRoZSBhZGRyX3dxLiAqLwor
CQkJaWYgKFNDVFBfQkFTRV9WQVIoc2N0cF9wY2JfaW5pdGlhbGl6ZWQpID09IDApIHsKKwkJCQlz
Y3RwX2FzY29uZl9pdGVyYXRvcl9lbmQoYXNjLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJTElTVF9G
T1JFQUNIKHdpLCAmYXNjLT5saXN0X29mX3dvcmssIHNjdHBfbnh0X2FkZHIpIHsKKwkJCQkJTElT
VF9JTlNFUlRfSEVBRCgmU0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRy
KTsKKwkJCQl9CisJCQkJU0NUUF9GUkVFKGFzYywgU0NUUF9NX0FTQ19JVCk7CisJCQl9CisJCX0K
Kwl9Cit9CisKK3ZvaWQKK3NjdHBfdGltZW91dF9oYW5kbGVyKHZvaWQgKnQpCit7CisJc3RydWN0
IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3RydWN0IHNjdHBf
bmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7CisJc3RydWN0IG1idWYgKm9wX2Vy
cjsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElO
RykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCWludCBkaWRfb3V0cHV0OworCWludCB0
eXBlOworCisJdG1yID0gKHN0cnVjdCBzY3RwX3RpbWVyICopdDsKKwlpbnAgPSAoc3RydWN0IHNj
dHBfaW5wY2IgKil0bXItPmVwOworCXN0Y2IgPSAoc3RydWN0IHNjdHBfdGNiICopdG1yLT50Y2I7
CisJbmV0ID0gKHN0cnVjdCBzY3RwX25ldHMgKil0bXItPm5ldDsKKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwlDVVJWTkVUX1NFVCgoc3Ry
dWN0IHZuZXQgKil0bXItPnZuZXQpOworI2VuZGlmCisJZGlkX291dHB1dCA9IDE7CisKKyNpZmRl
ZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwlzY3RwX2F1ZGl0X2xvZygweEYwLCAodWludDhfdCkg
dG1yLT50eXBlKTsKKwlzY3RwX2F1ZGl0aW5nKDMsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgor
CisJLyogc2FuaXR5IGNoZWNrcy4uLiAqLworCWlmICh0bXItPnNlbGYgIT0gKHZvaWQgKil0bXIp
IHsKKwkJLyoKKwkJICogU0NUUF9QUklOVEYoIlN0YWxlIFNDVFAgdGltZXIgZmlyZWQgKCVwKSwg
aWdub3JpbmcuLi5cbiIsCisJCSAqICAgICAgICAgICAgICh2b2lkICopdG1yKTsKKwkJICovCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJ
CUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJdG1yLT5zdG9wcGVk
X2Zyb20gPSAweGEwMDE7CisJaWYgKCFTQ1RQX0lTX1RJTUVSX1RZUEVfVkFMSUQodG1yLT50eXBl
KSkgeworCQkvKgorCQkgKiBTQ1RQX1BSSU5URigiU0NUUCB0aW1lciBmaXJlZCB3aXRoIGludmFs
aWQgdHlwZTogMHgleFxuIiwKKwkJICogdG1yLT50eXBlKTsKKwkJICovCisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAxMDAwCisJCUNVUlZORVRfUkVT
VE9SRSgpOworI2VuZGlmCisJCXJldHVybjsKKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEw
MDI7CisJaWYgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0FERFJfV1EpICYmIChpbnAg
PT0gTlVMTCkpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDEwMDAKKwkJQ1VSVk5FVF9SRVNUT1JFKCk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0K
KwkvKiBpZiB0aGlzIGlzIGFuIGl0ZXJhdG9yIHRpbWVvdXQsIGdldCB0aGUgc3RydWN0IGFuZCBj
bGVhciBpbnAgKi8KKwl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwMzsKKwlpZiAoaW5wKSB7CisJ
CVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7CisJCWlmICgoaW5wLT5zY3RwX3NvY2tldCA9PSBOVUxM
KSAmJgorCQkgICAgKCh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX0lOUEtJTEwpICYmCisJ
CSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfSU5JVCkgJiYKKwkJICAgICAodG1y
LT50eXBlICE9IFNDVFBfVElNRVJfVFlQRV9TRU5EKSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0g
U0NUUF9USU1FUl9UWVBFX1JFQ1YpICYmCisJCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVS
X1RZUEVfSEVBUlRCRUFUKSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBF
X1NIVVRET1dOKSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRE
T1dOQUNLKSAmJgorCQkgICAgICh0bXItPnR5cGUgIT0gU0NUUF9USU1FUl9UWVBFX1NIVVRET1dO
R1VBUkQpICYmCisJCSAgICAgKHRtci0+dHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEwp
KSkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJCUNVUlZORVRfUkVTVE9SRSgpOwor
I2VuZGlmCisJCQlyZXR1cm47CisJCX0KKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAweGEwMDQ7
CisJaWYgKHN0Y2IpIHsKKwkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsK
KwkJaWYgKHN0Y2ItPmFzb2Muc3RhdGUgPT0gMCkgeworCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2It
PmFzb2MucmVmY250LCAtMSk7CisJCQlpZiAoaW5wKSB7CisJCQkJU0NUUF9JTlBfREVDUl9SRUYo
aW5wKTsKKwkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDEwMDAKKwkJCUNVUlZORVRfUkVTVE9SRSgpOworI2VuZGlmCisJCQlyZXR1cm47CisJ
CX0KKwl9CisJdHlwZSA9IHRtci0+dHlwZTsKKwl0bXItPnN0b3BwZWRfZnJvbSA9IDB4YTAwNTsK
KwlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiVGltZXIgdHlwZSAlZCBnb2VzIG9mZlxuIiwg
dHlwZSk7CisJaWYgKCFTQ1RQX09TX1RJTUVSX0FDVElWRSgmdG1yLT50aW1lcikpIHsKKwkJaWYg
KGlucCkgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCQlpZiAoc3RjYikgewor
CQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2MucmVmY250LCAtMSk7CisJCX0KKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDEwMDAKKwkJQ1VSVk5F
VF9SRVNUT1JFKCk7CisjZW5kaWYKKwkJcmV0dXJuOworCX0KKwl0bXItPnN0b3BwZWRfZnJvbSA9
IDB4YTAwNjsKKworCWlmIChzdGNiKSB7CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21p
Y19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgLTEpOworCQlpZiAoKHR5cGUgIT0gU0NUUF9U
SU1FUl9UWVBFX0FTT0NLSUxMKSAmJgorCQkgICAgKChzdGNiLT5hc29jLnN0YXRlID09IDApIHx8
CisJCSAgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVE
KSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWlmIChpbnApIHsKKwkJCQlTQ1RQ
X0lOUF9ERUNSX1JFRihpbnApOworCQkJfQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9f
RnJlZUJTRF92ZXJzaW9uID49IDgwMTAwMAorCQkJQ1VSVk5FVF9SRVNUT1JFKCk7CisjZW5kaWYK
KwkJCXJldHVybjsKKwkJfQorCX0gZWxzZSBpZiAoaW5wICE9IE5VTEwpIHsKKwkJaWYgKHR5cGUg
IT0gU0NUUF9USU1FUl9UWVBFX0lOUEtJTEwpIHsKKwkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJ
CX0KKwl9IGVsc2UgeworCQlTQ1RQX1dRX0FERFJfTE9DSygpOworCX0KKwkvKiByZWNvcmQgaW4g
c3RvcHBlZCB3aGF0IHQtbyBvY2N1cnJlZCAqLworCXRtci0+c3RvcHBlZF9mcm9tID0gdHlwZTsK
KworCS8qIG1hcmsgYXMgYmVpbmcgc2VydmljZWQgbm93ICovCisJaWYgKFNDVFBfT1NfVElNRVJf
UEVORElORygmdG1yLT50aW1lcikpIHsKKwkJLyoKKwkJICogQ2FsbG91dCBoYXMgYmVlbiByZXNj
aGVkdWxlZC4KKwkJICovCisJCWdvdG8gZ2V0X291dDsKKwl9CisJaWYgKCFTQ1RQX09TX1RJTUVS
X0FDVElWRSgmdG1yLT50aW1lcikpIHsKKwkJLyoKKwkJICogTm90IGFjdGl2ZSwgc28gbm8gYWN0
aW9uLgorCQkgKi8KKwkJZ290byBnZXRfb3V0OworCX0KKwlTQ1RQX09TX1RJTUVSX0RFQUNUSVZB
VEUoJnRtci0+dGltZXIpOworCisJLyogY2FsbCB0aGUgaGFuZGxlciBmb3IgdGhlIGFwcHJvcHJp
YXRlIHRpbWVyIHR5cGUgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIFNDVFBfVElNRVJfVFlQ
RV9BRERSX1dROgorCQlzY3RwX2hhbmRsZV9hZGRyX3dxKCk7CisJCWJyZWFrOworCWNhc2UgU0NU
UF9USU1FUl9UWVBFX1NFTkQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwp
KSB7CisJCQlicmVhazsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vZGF0YSk7CisJ
CXN0Y2ItPmFzb2MudGltb2RhdGErKzsKKwkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAt
LTsKKwkJaWYgKHN0Y2ItPmFzb2MubnVtX3NlbmRfdGltZXJzX3VwIDwgMCkgeworCQkJc3RjYi0+
YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPSAwOworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJU
KHN0Y2IpOworCQlpZiAoc2N0cF90M3J4dF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKKwkJCS8q
IG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCisJCQlnb3RvIG91dF9kZWNy
OworCQl9CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2IpOworI2lmZGVmIFNDVFBfQVVESVRJ
TkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgor
CQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBf
U09fTk9UX0xPQ0tFRCk7CisJCWlmICgoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPT0g
MCkgJiYKKwkJICAgIChzdGNiLT5hc29jLnNlbnRfcXVldWVfY250ID4gMCkpIHsKKwkJCXN0cnVj
dCBzY3RwX3RtaXRfY2h1bmsgKmNoazsKKworCQkJLyoKKwkJCSAqIHNhZmVndWFyZC4gSWYgdGhl
cmUgb24gc29tZSBvbiB0aGUgc2VudCBxdWV1ZQorCQkJICogc29tZXdoZXJlIGJ1dCBubyB0aW1l
cnMgcnVubmluZyBzb21ldGhpbmcgaXMKKwkJCSAqIHdyb25nLi4uIHNvIHdlIHN0YXJ0IGEgdGlt
ZXIgb24gdGhlIGZpcnN0IGNodW5rCisJCQkgKiBvbiB0aGUgc2VuZCBxdWV1ZSBvbiB3aGF0ZXZl
ciBuZXQgaXQgaXMgc2VudCB0by4KKwkJCSAqLworCQkJY2hrID0gVEFJTFFfRklSU1QoJnN0Y2It
PmFzb2Muc2VudF9xdWV1ZSk7CisJCQlzY3RwX3RpbWVyX3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9T
RU5ELCBpbnAsIHN0Y2IsCisJCQkgICAgY2hrLT53aG9Ubyk7CisJCX0KKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVDoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0g
TlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9pbml0
KTsKKwkJc3RjYi0+YXNvYy50aW1vaW5pdCsrOworCQlpZiAoc2N0cF90MWluaXRfdGltZXIoaW5w
LCBzdGNiLCBuZXQpKSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUg
Ki8KKwkJCWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJLyogV2UgZG8gb3V0cHV0IGJ1dCBub3QgaGVy
ZSAqLworCQlkaWRfb3V0cHV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVf
UkVDVjoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFr
OworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9zYWNrKTsKKwkJc3RjYi0+YXNvYy50
aW1vc2FjaysrOworCQlzY3RwX3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX05PVF9MT0NLRUQpOwor
I2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCQlzY3RwX2F1ZGl0aW5nKDQsIGlucCwgc3Rj
YiwgbmV0KTsKKyNlbmRpZgorCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VU
UFVUX0ZST01fU0FDS19UTVIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX1NIVVRET1dOOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKGlucCA9
PSBOVUxMKSkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNjdHBfc2h1dGRvd25fdGltZXIoaW5w
LCBzdGNiLCBuZXQpKSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUg
Ki8KKwkJCWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb3No
dXRkb3duKTsKKwkJc3RjYi0+YXNvYy50aW1vc2h1dGRvd24rKzsKKyNpZmRlZiBTQ1RQX0FVRElU
SU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYK
KwkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBVVF9GUk9NX1NIVVRfVE1S
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9I
RUFSVEJFQVQ6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpIHx8IChuZXQg
PT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9o
ZWFydGJlYXQpOworCQlzdGNiLT5hc29jLnRpbW9oZWFydGJlYXQrKzsKKwkJaWYgKHNjdHBfaGVh
cnRiZWF0X3RpbWVyKGlucCwgc3RjYiwgbmV0KSkgeworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sg
b24gdGNiIGl0cyBnb25lICovCisJCQlnb3RvIG91dF9kZWNyOworCQl9CisjaWZkZWYgU0NUUF9B
VURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRpbmcoNCwgaW5wLCBzdGNiLCBuZXQpOworI2Vu
ZGlmCisJCWlmICghKG5ldC0+ZGVzdF9zdGF0ZSAmIFNDVFBfQUREUl9OT0hCKSkgeworCQkJc2N0
cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFULCBpbnAsIHN0Y2IsIG5ldCk7
CisJCQlzY3RwX2NodW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fSEJfVE1S
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9U
WVBFX0NPT0tJRToKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJ
CWJyZWFrOworCQl9CisKKwkJaWYgKHNjdHBfY29va2llX3RpbWVyKGlucCwgc3RjYiwgbmV0KSkg
eworCQkJLyogbm8gbmVlZCB0byB1bmxvY2sgb24gdGNiIGl0cyBnb25lICovCisJCQlnb3RvIG91
dF9kZWNyOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9jb29raWUpOworCQlzdGNi
LT5hc29jLnRpbW9jb29raWUrKzsKKyNpZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0
cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2IsIG5ldCk7CisjZW5kaWYKKwkJLyoKKwkJICogV2UgY29u
c2lkZXIgVDMgYW5kIENvb2tpZSB0aW1lciBwcmV0dHkgbXVjaCB0aGUgc2FtZSB3aXRoCisJCSAq
IHJlc3BlY3QgdG8gd2hlcmUgZnJvbSBpbiBjaHVua19vdXRwdXQuCisJCSAqLworCQlzY3RwX2No
dW5rX291dHB1dChpbnAsIHN0Y2IsIFNDVFBfT1VUUFVUX0ZST01fVDMsIFNDVFBfU09fTk9UX0xP
Q0tFRCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX05FV0NPT0tJRToKKwkJewor
CQkJc3RydWN0IHRpbWV2YWwgdHY7CisJCQlpbnQgaSwgc2VjcmV0OworCQkJaWYgKGlucCA9PSBO
VUxMKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vc2Vj
cmV0KTsKKwkJCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ0dik7CisJCQlpbnAtPnNjdHBf
ZXAudGltZV9vZl9zZWNyZXRfY2hhbmdlID0gdHYudHZfc2VjOworCQkJaW5wLT5zY3RwX2VwLmxh
c3Rfc2VjcmV0X251bWJlciA9CisJCQkgICAgaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251
bWJlcjsKKwkJCWlucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1iZXIrKzsKKwkJCWlmIChp
bnAtPnNjdHBfZXAuY3VycmVudF9zZWNyZXRfbnVtYmVyID49CisJCQkgICAgU0NUUF9IT1dfTUFO
WV9TRUNSRVRTKSB7CisJCQkJaW5wLT5zY3RwX2VwLmN1cnJlbnRfc2VjcmV0X251bWJlciA9IDA7
CisJCQl9CisJCQlzZWNyZXQgPSAoaW50KWlucC0+c2N0cF9lcC5jdXJyZW50X3NlY3JldF9udW1i
ZXI7CisJCQlmb3IgKGkgPSAwOyBpIDwgU0NUUF9OVU1CRVJfT0ZfU0VDUkVUUzsgaSsrKSB7CisJ
CQkJaW5wLT5zY3RwX2VwLnNlY3JldF9rZXlbc2VjcmV0XVtpXSA9CisJCQkJICAgIHNjdHBfc2Vs
ZWN0X2luaXRpYWxfVFNOKCZpbnAtPnNjdHBfZXApOworCQkJfQorCQkJc2N0cF90aW1lcl9zdGFy
dChTQ1RQX1RJTUVSX1RZUEVfTkVXQ09PS0lFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCX0KKwkJZGlk
X291dHB1dCA9IDA7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlT
RToKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOwor
CQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9wYXRobXR1KTsKKwkJc2N0cF9wYXRobXR1
X3RpbWVyKGlucCwgc3RjYiwgbmV0KTsKKwkJZGlkX291dHB1dCA9IDA7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOQUNLOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwg
KGlucCA9PSBOVUxMKSkgeworCQkJYnJlYWs7CisJCX0KKwkJaWYgKHNjdHBfc2h1dGRvd25hY2tf
dGltZXIoaW5wLCBzdGNiLCBuZXQpKSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2Ig
aXRzIGdvbmUgKi8KKwkJCWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0
cHNfdGltb3NodXRkb3duYWNrKTsKKwkJc3RjYi0+YXNvYy50aW1vc2h1dGRvd25hY2srKzsKKyNp
ZmRlZiBTQ1RQX0FVRElUSU5HX0VOQUJMRUQKKwkJc2N0cF9hdWRpdGluZyg0LCBpbnAsIHN0Y2Is
IG5ldCk7CisjZW5kaWYKKwkJc2N0cF9jaHVua19vdXRwdXQoaW5wLCBzdGNiLCBTQ1RQX09VVFBV
VF9GUk9NX1NIVVRfQUNLX1RNUiwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1RJTUVSX1RZUEVfU0hVVERPV05HVUFSRDoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8
IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X3RpbW9zaHV0ZG93bmd1YXJkKTsKKwkJb3BfZXJyID0gc2N0cF9nZW5lcmF0ZV9jYXVzZShTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfZGlhZ19pbmZvX2NvZGUpLAorCQkgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJTaHV0ZG93biBndWFyZCB0aW1lciBleHBpcmVkIik7CisJCXNjdHBfYWJvcnRf
YW5fYXNzb2NpYXRpb24oaW5wLCBzdGNiLCBvcF9lcnIsIFNDVFBfU09fTk9UX0xPQ0tFRCk7CisJ
CS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRjYiBpdHMgZ29uZSAqLworCQlnb3RvIG91dF9kZWNy
OworCisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU1RSUkVTRVQ6CisJCWlmICgoc3RjYiA9PSBOVUxM
KSB8fCAoaW5wID09IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2N0cF9zdHJyZXNl
dF90aW1lcihpbnAsIHN0Y2IsIG5ldCkpIHsKKwkJCS8qIG5vIG5lZWQgdG8gdW5sb2NrIG9uIHRj
YiBpdHMgZ29uZSAqLworCQkJZ290byBvdXRfZGVjcjsKKwkJfQorCQlTQ1RQX1NUQVRfSU5DUihz
Y3Rwc190aW1vc3RybXJzdCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NUUF9P
VVRQVVRfRlJPTV9TVFJSU1RfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfVElNRVJfVFlQRV9BU0NPTkY6CisJCWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5w
ID09IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlpZiAoc2N0cF9hc2NvbmZfdGltZXIoaW5w
LCBzdGNiLCBuZXQpKSB7CisJCQkvKiBubyBuZWVkIHRvIHVubG9jayBvbiB0Y2IgaXRzIGdvbmUg
Ki8KKwkJCWdvdG8gb3V0X2RlY3I7CisJCX0KKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2Fz
Y29uZik7CisjaWZkZWYgU0NUUF9BVURJVElOR19FTkFCTEVECisJCXNjdHBfYXVkaXRpbmcoNCwg
aW5wLCBzdGNiLCBuZXQpOworI2VuZGlmCisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwg
U0NUUF9PVVRQVVRfRlJPTV9BU0NPTkZfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlicmVh
azsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9QUklNX0RFTEVURUQ6CisJCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAoaW5wID09IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQorCQlzY3RwX2RlbGV0ZV9w
cmltX3RpbWVyKGlucCwgc3RjYiwgbmV0KTsKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2Rl
bHByaW0pOworCQlicmVhazsKKworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FVVE9DTE9TRToKKwkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChpbnAgPT0gTlVMTCkpIHsKKwkJCWJyZWFrOworCQl9CisJ
CVNDVFBfU1RBVF9JTkNSKHNjdHBzX3RpbW9hdXRvY2xvc2UpOworCQlzY3RwX2F1dG9jbG9zZV90
aW1lcihpbnAsIHN0Y2IsIG5ldCk7CisJCXNjdHBfY2h1bmtfb3V0cHV0KGlucCwgc3RjYiwgU0NU
UF9PVVRQVVRfRlJPTV9BVVRPQ0xPU0VfVE1SLCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQlkaWRf
b3V0cHV0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVNPQ0tJTEw6CisJ
CWlmICgoc3RjYiA9PSBOVUxMKSB8fCAoaW5wID09IE5VTEwpKSB7CisJCQlicmVhazsKKwkJfQor
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc190aW1vYXNzb2NraWxsKTsKKwkJLyogQ2FuIHdlIGZyZWUg
aXQgeWV0PyAqLworCQlTQ1RQX0lOUF9ERUNSX1JFRihpbnApOworCQlzY3RwX3RpbWVyX3N0b3Ao
U0NUUF9USU1FUl9UWVBFX0FTT0NLSUxMLCBpbnAsIHN0Y2IsIE5VTEwsCisJCSAgICAgICAgICAg
ICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xKTsKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJc28gPSBTQ1RQX0lOUF9T
TyhpbnApOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQ
X1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RD
Ql9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7CisjZW5kaWYKKwkJKHZvaWQpc2N0cF9mcmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JN
QUxfUFJPQywKKwkJICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQVVRJTCArIFND
VFBfTE9DXzIpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9D
S19URVNUSU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJCS8qCisJ
CSAqIGZyZWUgYXNvYywgYWx3YXlzIHVubG9ja3MgKG9yIGRlc3Ryb3kncykgc28gcHJldmVudAor
CQkgKiBkdXBsaWNhdGUgdW5sb2NrIG9yIHVubG9jayBvZiBhIGZyZWUgbXR4IDotMAorCQkgKi8K
KwkJc3RjYiA9IE5VTEw7CisJCWdvdG8gb3V0X25vX2RlY3I7CisJY2FzZSBTQ1RQX1RJTUVSX1RZ
UEVfSU5QS0lMTDoKKwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfdGltb2lucGtpbGwpOworCQlpZiAo
aW5wID09IE5VTEwpIHsKKwkJCWJyZWFrOworCQl9CisJCS8qCisJCSAqIHNwZWNpYWwgY2FzZSwg
dGFrZSBhd2F5IG91ciBpbmNyZW1lbnQgc2luY2UgV0UgYXJlIHRoZQorCQkgKiBraWxsZXIKKwkJ
ICovCisJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCXNjdHBfdGltZXJfc3RvcChTQ1RQX1RJ
TUVSX1RZUEVfSU5QS0lMTCwgaW5wLCBOVUxMLCBOVUxMLAorCQkgICAgICAgICAgICAgICAgU0NU
UF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfMyk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJ
CVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7CisjZW5kaWYKKwkJc2N0cF9p
bnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJPUlQsCisJCQkJU0NUUF9DQUxM
RURfRlJPTV9JTlBLSUxMX1RJTUVSKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJU0NUUF9T
T0NLRVRfVU5MT0NLKFNDVFBfSU5QX1NPKGlucCksIDEpOworI2VuZGlmCisJCWlucCA9IE5VTEw7
CisJCWdvdG8gb3V0X25vX2RlY3I7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1RJ
TUVSMSwgInNjdHBfdGltZW91dF9oYW5kbGVyOnVua25vd24gdGltZXIgJWRcbiIsCisJCQl0eXBl
KTsKKwkJYnJlYWs7CisJfQorI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAorCXNjdHBfYXVk
aXRfbG9nKDB4RjEsICh1aW50OF90KSB0eXBlKTsKKwlpZiAoaW5wKQorCQlzY3RwX2F1ZGl0aW5n
KDUsIGlucCwgc3RjYiwgbmV0KTsKKyNlbmRpZgorCWlmICgoZGlkX291dHB1dCkgJiYgc3RjYikg
eworCQkvKgorCQkgKiBOb3cgd2UgbmVlZCB0byBjbGVhbiB1cCB0aGUgY29udHJvbCBjaHVuayBj
aGFpbiBpZiBhbgorCQkgKiBFQ05FIGlzIG9uIGl0LiBJdCBtdXN0IGJlIG1hcmtlZCBhcyBVTlNF
TlQgYWdhaW4gc28gbmV4dAorCQkgKiBjYWxsIHdpbGwgY29udGludWUgdG8gc2VuZCBpdCB1bnRp
bCBzdWNoIHRpbWUgdGhhdCB3ZSBnZXQKKwkJICogYSBDV1IsIHRvIHJlbW92ZSBpdC4gSXQgaXMs
IGhvd2V2ZXIsIGxlc3MgbGlrZWx5IHRoYXQgd2UKKwkJICogd2lsbCBmaW5kIGEgZWNuIGVjaG8g
b24gdGhlIGNoYWluIHRob3VnaC4KKwkJICovCisJCXNjdHBfZml4X2Vjbl9lY2hvKCZzdGNiLT5h
c29jKTsKKwl9CitnZXRfb3V0OgorCWlmIChzdGNiKSB7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwl9IGVsc2UgaWYgKGlucCAhPSBOVUxMKSB7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsK
Kwl9IGVsc2UgeworCQlTQ1RQX1dRX0FERFJfVU5MT0NLKCk7CisJfQorCitvdXRfZGVjcjoKKwlp
ZiAoaW5wKSB7CisJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJfQorCitvdXRfbm9fZGVjcjoK
KwlTQ1RQREJHKFNDVFBfREVCVUdfVElNRVIxLCAiVGltZXIgbm93IGNvbXBsZXRlICh0eXBlID0g
JWQpXG4iLCB0eXBlKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVy
c2lvbiA+PSA4MDEwMDAKKwlDVVJWTkVUX1JFU1RPUkUoKTsKKyNlbmRpZgorfQorCit2b2lkCitz
Y3RwX3RpbWVyX3N0YXJ0KGludCB0X3R5cGUsIHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwKKyAgICBzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQpCit7CisJdWludDMy
X3QgdG9fdGlja3M7CisJc3RydWN0IHNjdHBfdGltZXIgKnRtcjsKKworCWlmICgodF90eXBlICE9
IFNDVFBfVElNRVJfVFlQRV9BRERSX1dRKSAmJiAoaW5wID09IE5VTEwpKQorCQlyZXR1cm47CisK
Kwl0bXIgPSBOVUxMOworCWlmIChzdGNiKSB7CisJCVNDVFBfVENCX0xPQ0tfQVNTRVJUKHN0Y2Ip
OworCX0KKwlzd2l0Y2ggKHRfdHlwZSkgeworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0FERFJfV1E6
CisJCS8qIE9ubHkgMSB0aWNrIGF3YXkgOi0pICovCisJCXRtciA9ICZTQ1RQX0JBU0VfSU5GTyhh
ZGRyX3dxX3RpbWVyKTsKKwkJdG9fdGlja3MgPSBTQ1RQX0FERFJFU1NfVElDS19ERUxBWTsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfU0VORDoKKwkJLyogSGVyZSB3ZSB1c2UgdGhl
IFJUTyB0aW1lciAqLworCQl7CisJCQlpbnQgcnRvX3ZhbDsKKworCQkJaWYgKChzdGNiID09IE5V
TEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCQlyZXR1cm47CisJCQl9CisJCQl0bXIgPSAmbmV0
LT5yeHRfdGltZXI7CisJCQlpZiAobmV0LT5SVE8gPT0gMCkgeworCQkJCXJ0b192YWwgPSBzdGNi
LT5hc29jLmluaXRpYWxfcnRvOworCQkJfSBlbHNlIHsKKwkJCQlydG9fdmFsID0gbmV0LT5SVE87
CisJCQl9CisJCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1MocnRvX3ZhbCk7CisJCX0KKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSU5JVDoKKwkJLyoKKwkJICogSGVyZSB3ZSB1c2Ug
dGhlIElOSVQgdGltZXIgZGVmYXVsdCB1c3VhbGx5IGFib3V0IDEKKwkJICogbWludXRlLgorCQkg
Ki8KKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsK
KwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJ
CQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCX0g
ZWxzZSB7CisJCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1MobmV0LT5SVE8pOworCQl9CisJCWJy
ZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1JFQ1Y6CisJCS8qCisJCSAqIEhlcmUgd2UgdXNl
IHRoZSBEZWxheWVkLUFjayB0aW1lciB2YWx1ZSBmcm9tIHRoZSBpbnAKKwkJICogdXN1c3VhbGx5
IGFib3V0IDIwMG1zLgorCQkgKi8KKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOwor
CQl9CisJCXRtciA9ICZzdGNiLT5hc29jLmRhY2tfdGltZXI7CisJCXRvX3RpY2tzID0gTVNFQ19U
T19USUNLUyhzdGNiLT5hc29jLmRlbGF5ZWRfYWNrKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJ
TUVSX1RZUEVfU0hVVERPV046CisJCS8qIEhlcmUgd2UgdXNlIHRoZSBSVE8gb2YgdGhlIGRlc3Rp
bmF0aW9uLiAqLworCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJ
cmV0dXJuOworCQl9CisJCWlmIChuZXQtPlJUTyA9PSAwKSB7CisJCQl0b190aWNrcyA9IE1TRUNf
VE9fVElDS1Moc3RjYi0+YXNvYy5pbml0aWFsX3J0byk7CisJCX0gZWxzZSB7CisJCQl0b190aWNr
cyA9IE1TRUNfVE9fVElDS1MobmV0LT5SVE8pOworCQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1l
cjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgorCQkvKgorCQkg
KiB0aGUgbmV0IGlzIHVzZWQgaGVyZSBzbyB0aGF0IHdlIGNhbiBhZGQgaW4gdGhlIFJUTy4gRXZl
bgorCQkgKiB0aG91Z2ggd2UgdXNlIGEgZGlmZmVyZW50IHRpbWVyLiBXZSBhbHNvIGFkZCB0aGUg
SEIgdGltZXIKKwkJICogUExVUyBhIHJhbmRvbSBqaXR0ZXIuCisJCSAqLworCQlpZiAoKHN0Y2Ig
PT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9IGVsc2UgeworCQkJ
dWludDMyX3Qgcm5kdmFsOworCQkJdWludDMyX3Qgaml0dGVyOworCisJCQlpZiAoKG5ldC0+ZGVz
dF9zdGF0ZSAmIFNDVFBfQUREUl9OT0hCKSAmJgorCQkJICAgICEobmV0LT5kZXN0X3N0YXRlICYg
U0NUUF9BRERSX1VOQ09ORklSTUVEKSkgeworCQkJCXJldHVybjsKKwkJCX0KKwkJCWlmIChuZXQt
PlJUTyA9PSAwKSB7CisJCQkJdG9fdGlja3MgPSBzdGNiLT5hc29jLmluaXRpYWxfcnRvOworCQkJ
fSBlbHNlIHsKKwkJCQl0b190aWNrcyA9IG5ldC0+UlRPOworCQkJfQorCQkJcm5kdmFsID0gc2N0
cF9zZWxlY3RfaW5pdGlhbF9UU04oJmlucC0+c2N0cF9lcCk7CisJCQlqaXR0ZXIgPSBybmR2YWwg
JSB0b190aWNrczsKKwkJCWlmIChqaXR0ZXIgPj0gKHRvX3RpY2tzID4+IDEpKSB7CisJCQkJdG9f
dGlja3MgPSB0b190aWNrcyArIChqaXR0ZXIgLSAodG9fdGlja3MgPj4gMSkpOworCQkJfSBlbHNl
IHsKKwkJCQl0b190aWNrcyA9IHRvX3RpY2tzIC0gaml0dGVyOworCQkJfQorCQkJaWYgKCEobmV0
LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1VOQ09ORklSTUVEKSAmJgorCQkJICAgICEobmV0LT5k
ZXN0X3N0YXRlICYgU0NUUF9BRERSX1BGKSkgeworCQkJCXRvX3RpY2tzICs9IG5ldC0+aGVhcnRf
YmVhdF9kZWxheTsKKwkJCX0KKwkJCS8qCisJCQkgKiBOb3cgd2UgbXVzdCBjb252ZXJ0IHRoZSB0
b190aWNrcyB0aGF0IGFyZSBub3cgaW4KKwkJCSAqIG1zIHRvIHRpY2tzLgorCQkJICovCisJCQl0
b190aWNrcyA9IE1TRUNfVE9fVElDS1ModG9fdGlja3MpOworCQkJdG1yID0gJm5ldC0+aGJfdGlt
ZXI7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQ09PS0lFOgorCQkvKgor
CQkgKiBIZXJlIHdlIGNhbiB1c2UgdGhlIFJUTyB0aW1lciBmcm9tIHRoZSBuZXR3b3JrIHNpbmNl
IG9uZQorCQkgKiBSVFQgd2FzIGNvbXBlbGV0ZS4gSWYgYSByZXRyYW4gaGFwcGVuZWQgdGhlbiB3
ZSB3aWxsIGJlCisJCSAqIHVzaW5nIHRoZSBSVE8gaW5pdGlhbCB2YWx1ZS4KKwkJICovCisJCWlm
ICgoc3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJ
aWYgKG5ldC0+UlRPID09IDApIHsKKwkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhzdGNiLT5h
c29jLmluaXRpYWxfcnRvKTsKKwkJfSBlbHNlIHsKKwkJCXRvX3RpY2tzID0gTVNFQ19UT19USUNL
UyhuZXQtPlJUTyk7CisJCX0KKwkJdG1yID0gJm5ldC0+cnh0X3RpbWVyOworCQlicmVhazsKKwlj
YXNlIFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUU6CisJCS8qCisJCSAqIG5vdGhpbmcgbmVlZGVk
IGJ1dCB0aGUgZW5kcG9pbnQgaGVyZSB1c3VzdWFsbHkgYWJvdXQgNjAKKwkJICogbWludXRlcy4K
KwkJICovCisJCXRtciA9ICZpbnAtPnNjdHBfZXAuc2lnbmF0dXJlX2NoYW5nZTsKKwkJdG9fdGlj
a3MgPSBpbnAtPnNjdHBfZXAuc2N0cF90aW1lb3V0dGlja3NbU0NUUF9USU1FUl9TSUdOQVRVUkVd
OworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoKKwkJaWYgKHN0Y2Ig
PT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0
X3RpbWVyOworCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1MoU0NUUF9BU09DX0tJTExfVElNRU9V
VCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX0lOUEtJTEw6CisJCS8qCisJCSAq
IFRoZSBpbnAgaXMgc2V0dXAgdG8gZGllLiBXZSByZS11c2UgdGhlIHNpZ25hdHVyZV9jaGFnZQor
CQkgKiB0aW1lciBzaW5jZSB0aGF0IGhhcyBzdG9wcGVkIGFuZCB3ZSBhcmUgaW4gdGhlIEdPTkUK
KwkJICogc3RhdGUuCisJCSAqLworCQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFu
Z2U7CisJCXRvX3RpY2tzID0gTVNFQ19UT19USUNLUyhTQ1RQX0lOUF9LSUxMX1RJTUVPVVQpOwor
CQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0U6CisJCS8qCisJCSAq
IEhlcmUgd2UgdXNlIHRoZSB2YWx1ZSBmb3VuZCBpbiB0aGUgRVAgZm9yIFBNVFUgdXN1c3VhbGx5
CisJCSAqIGFib3V0IDEwIG1pbnV0ZXMuCisJCSAqLworCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwg
KG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9CisJCWlmIChuZXQtPmRlc3Rfc3RhdGUg
JiBTQ1RQX0FERFJfTk9fUE1UVUQpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0b190aWNrcyA9IGlu
cC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX1BNVFVdOworCQl0bXIgPSAm
bmV0LT5wbXR1X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9X
TkFDSzoKKwkJLyogSGVyZSB3ZSB1c2UgdGhlIFJUTyBvZiB0aGUgZGVzdGluYXRpb24gKi8KKwkJ
aWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQor
CQlpZiAobmV0LT5SVE8gPT0gMCkgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2It
PmFzb2MuaW5pdGlhbF9ydG8pOworCQl9IGVsc2UgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJ
Q0tTKG5ldC0+UlRPKTsKKwkJfQorCQl0bXIgPSAmbmV0LT5yeHRfdGltZXI7CisJCWJyZWFrOwor
CWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRET1dOR1VBUkQ6CisJCS8qCisJCSAqIEhlcmUgd2Ug
dXNlIHRoZSBlbmRwb2ludHMgc2h1dGRvd24gZ3VhcmQgdGltZXIgdXN1YWxseQorCQkgKiBhYm91
dCAzIG1pbnV0ZXMuCisJCSAqLworCQlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlyZXR1cm47CisJ
CX0KKwkJaWYgKGlucC0+c2N0cF9lcC5zY3RwX3RpbWVvdXR0aWNrc1tTQ1RQX1RJTUVSX01BWFNI
VVRET1dOXSA9PSAwKSB7CisJCQl0b190aWNrcyA9IDUgKiBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFz
b2MubWF4cnRvKTsKKwkJfSBlbHNlIHsKKwkJCXRvX3RpY2tzID0gaW5wLT5zY3RwX2VwLnNjdHBf
dGltZW91dHRpY2tzW1NDVFBfVElNRVJfTUFYU0hVVERPV05dOworCQl9CisJCXRtciA9ICZzdGNi
LT5hc29jLnNodXRfZ3VhcmRfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBF
X1NUUlJFU0VUOgorCQkvKgorCQkgKiBIZXJlIHRoZSB0aW1lciBjb21lcyBmcm9tIHRoZSBzdGNi
IGJ1dCBpdHMgdmFsdWUgaXMgZnJvbQorCQkgKiB0aGUgbmV0J3MgUlRPLgorCQkgKi8KKwkJaWYg
KChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlp
ZiAobmV0LT5SVE8gPT0gMCkgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFz
b2MuaW5pdGlhbF9ydG8pOworCQl9IGVsc2UgeworCQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tT
KG5ldC0+UlRPKTsKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5zdHJyZXNldF90aW1lcjsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVSX1RZUEVfQVNDT05GOgorCQkvKgorCQkgKiBIZXJlIHRo
ZSB0aW1lciBjb21lcyBmcm9tIHRoZSBzdGNiIGJ1dCBpdHMgdmFsdWUgaXMgZnJvbQorCQkgKiB0
aGUgbmV0J3MgUlRPLgorCQkgKi8KKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVM
TCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAobmV0LT5SVE8gPT0gMCkgeworCQkJdG9fdGlj
a3MgPSBNU0VDX1RPX1RJQ0tTKHN0Y2ItPmFzb2MuaW5pdGlhbF9ydG8pOworCQl9IGVsc2Ugewor
CQkJdG9fdGlja3MgPSBNU0VDX1RPX1RJQ0tTKG5ldC0+UlRPKTsKKwkJfQorCQl0bXIgPSAmc3Rj
Yi0+YXNvYy5hc2NvbmZfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1BS
SU1fREVMRVRFRDoKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChuZXQgIT0gTlVMTCkpIHsKKwkJ
CXJldHVybjsKKwkJfQorCQl0b190aWNrcyA9IE1TRUNfVE9fVElDS1Moc3RjYi0+YXNvYy5pbml0
aWFsX3J0byk7CisJCXRtciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmltX3RpbWVyOworCQlicmVh
azsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0U6CisJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCXJldHVybjsKKwkJfQorCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNr
cyA9PSAwKSB7CisJCQkvKgorCQkJICogUmVhbGx5IGFuIGVycm9yIHNpbmNlIHN0Y2IgaXMgTk9U
IHNldCB0bworCQkJICogYXV0b2Nsb3NlCisJCQkgKi8KKwkJCXJldHVybjsKKwkJfQorCQl0b190
aWNrcyA9IHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3M7CisJCXRtciA9ICZzdGNiLT5h
c29jLmF1dG9jbG9zZV90aW1lcjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1RJTUVSMSwgIiVzOiBVbmtub3duIHRpbWVyIHR5cGUgJWRcbiIsCisJCQlfX2Z1bmNf
XywgdF90eXBlKTsKKwkJcmV0dXJuOworCQlicmVhazsKKwl9CisJaWYgKCh0b190aWNrcyA8PSAw
KSB8fCAodG1yID09IE5VTEwpKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIlczog
JWQ6c29mdHdhcmUgZXJyb3IgdG9fdGlja3M6JWQgdG1yOiVwIG5vdCBzZXQgPz9cbiIsCisJCQlf
X2Z1bmNfXywgdF90eXBlLCB0b190aWNrcywgKHZvaWQgKil0bXIpOworCQlyZXR1cm47CisJfQor
CWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkcoJnRtci0+dGltZXIpKSB7CisJCS8qCisJCSAqIHdl
IGRvIE5PVCBhbGxvdyB5b3UgdG8gaGF2ZSBpdCBhbHJlYWR5IHJ1bm5pbmcuIGlmIGl0IGlzCisJ
CSAqIHdlIGxlYXZlIHRoZSBjdXJyZW50IG9uZSB1cCB1bmNoYW5nZWQKKwkJICovCisJCXJldHVy
bjsKKwl9CisJLyogQXQgdGhpcyBwb2ludCB3ZSBjYW4gcHJvY2VlZCAqLworCWlmICh0X3R5cGUg
PT0gU0NUUF9USU1FUl9UWVBFX1NFTkQpIHsKKwkJc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNf
dXArKzsKKwl9CisJdG1yLT5zdG9wcGVkX2Zyb20gPSAwOworCXRtci0+dHlwZSA9IHRfdHlwZTsK
Kwl0bXItPmVwID0gKHZvaWQgKilpbnA7CisJdG1yLT50Y2IgPSAodm9pZCAqKXN0Y2I7CisJdG1y
LT5uZXQgPSAodm9pZCAqKW5ldDsKKwl0bXItPnNlbGYgPSAodm9pZCAqKXRtcjsKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA4MDAwMDAKKwl0bXItPnZu
ZXQgPSAodm9pZCAqKWN1cnZuZXQ7CisjZW5kaWYKKyNpZm5kZWYgX19QYW5kYV9fCisJdG1yLT50
aWNrcyA9IHNjdHBfZ2V0X3RpY2tfY291bnQoKTsKKyNlbmRpZgorCSh2b2lkKVNDVFBfT1NfVElN
RVJfU1RBUlQoJnRtci0+dGltZXIsIHRvX3RpY2tzLCBzY3RwX3RpbWVvdXRfaGFuZGxlciwgdG1y
KTsKKwlyZXR1cm47Cit9CisKK3ZvaWQKK3NjdHBfdGltZXJfc3RvcChpbnQgdF90eXBlLCBzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgc3RydWN0IHNj
dHBfbmV0cyAqbmV0LCB1aW50MzJfdCBmcm9tKQoreworCXN0cnVjdCBzY3RwX3RpbWVyICp0bXI7
CisKKwlpZiAoKHRfdHlwZSAhPSBTQ1RQX1RJTUVSX1RZUEVfQUREUl9XUSkgJiYKKwkgICAgKGlu
cCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJdG1yID0gTlVMTDsKKwlpZiAoc3RjYikgeworCQlT
Q1RQX1RDQl9MT0NLX0FTU0VSVChzdGNiKTsKKwl9CisJc3dpdGNoICh0X3R5cGUpIHsKKwljYXNl
IFNDVFBfVElNRVJfVFlQRV9BRERSX1dROgorCQl0bXIgPSAmU0NUUF9CQVNFX0lORk8oYWRkcl93
cV90aW1lcik7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NFTkQ6CisJCWlmICgo
c3RjYiA9PSBOVUxMKSB8fCAobmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdG1y
ID0gJm5ldC0+cnh0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9JTklU
OgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOwor
CQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVS
X1RZUEVfUkVDVjoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9CisJCXRt
ciA9ICZzdGNiLT5hc29jLmRhY2tfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9U
WVBFX1NIVVRET1dOOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5ldCA9PSBOVUxMKSkgewor
CQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZuZXQtPnJ4dF90aW1lcjsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX1RJTUVSX1RZUEVfSEVBUlRCRUFUOgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwgKG5l
dCA9PSBOVUxMKSkgeworCQkJcmV0dXJuOworCQl9CisJCXRtciA9ICZuZXQtPmhiX3RpbWVyOwor
CQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9DT09LSUU6CisJCWlmICgoc3RjYiA9PSBO
VUxMKSB8fCAobmV0ID09IE5VTEwpKSB7CisJCQlyZXR1cm47CisJCX0KKwkJdG1yID0gJm5ldC0+
cnh0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9ORVdDT09LSUU6CisJ
CS8qIG5vdGhpbmcgbmVlZGVkIGJ1dCB0aGUgZW5kcG9pbnQgaGVyZSAqLworCQl0bXIgPSAmaW5w
LT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7CisJCS8qCisJCSAqIFdlIHJlLXVzZSB0aGUgbmV3
Y29va2llIHRpbWVyIGZvciB0aGUgSU5QIGtpbGwgdGltZXIuIFdlCisJCSAqIG11c3QgYXNzdXJl
IHRoYXQgd2UgZG8gbm90IGtpbGwgaXQgYnkgYWNjaWRlbnQuCisJCSAqLworCQlicmVhazsKKwlj
YXNlIFNDVFBfVElNRVJfVFlQRV9BU09DS0lMTDoKKwkJLyoKKwkJICogU3RvcCB0aGUgYXNvYyBr
aWxsIHRpbWVyLgorCQkgKi8KKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9
CisJCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyOworCQlicmVhazsKKworCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX0lOUEtJTEw6CisJCS8qCisJCSAqIFRoZSBpbnAgaXMgc2V0dXAgdG8g
ZGllLiBXZSByZS11c2UgdGhlIHNpZ25hdHVyZV9jaGFnZQorCQkgKiB0aW1lciBzaW5jZSB0aGF0
IGhhcyBzdG9wcGVkIGFuZCB3ZSBhcmUgaW4gdGhlIEdPTkUKKwkJICogc3RhdGUuCisJCSAqLwor
CQl0bXIgPSAmaW5wLT5zY3RwX2VwLnNpZ25hdHVyZV9jaGFuZ2U7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX1BBVEhNVFVSQUlTRToKKwkJaWYgKChzdGNiID09IE5VTEwpIHx8IChu
ZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmbmV0LT5wbXR1X3RpbWVy
OworCQlicmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9TSFVURE9XTkFDSzoKKwkJaWYgKChz
dGNiID09IE5VTEwpIHx8IChuZXQgPT0gTlVMTCkpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIg
PSAmbmV0LT5yeHRfdGltZXI7CisJCWJyZWFrOworCWNhc2UgU0NUUF9USU1FUl9UWVBFX1NIVVRE
T1dOR1VBUkQ6CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIg
PSAmc3RjYi0+YXNvYy5zaHV0X2d1YXJkX3RpbWVyOworCQlicmVhazsKKwljYXNlIFNDVFBfVElN
RVJfVFlQRV9TVFJSRVNFVDoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJcmV0dXJuOworCQl9
CisJCXRtciA9ICZzdGNiLT5hc29jLnN0cnJlc2V0X3RpbWVyOworCQlicmVhazsKKwljYXNlIFND
VFBfVElNRVJfVFlQRV9BU0NPTkY6CisJCWlmIChzdGNiID09IE5VTEwpIHsKKwkJCXJldHVybjsK
KwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hc2NvbmZfdGltZXI7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9USU1FUl9UWVBFX1BSSU1fREVMRVRFRDoKKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworCQkJ
cmV0dXJuOworCQl9CisJCXRtciA9ICZzdGNiLT5hc29jLmRlbGV0ZV9wcmltX3RpbWVyOworCQli
cmVhazsKKwljYXNlIFNDVFBfVElNRVJfVFlQRV9BVVRPQ0xPU0U6CisJCWlmIChzdGNiID09IE5V
TEwpIHsKKwkJCXJldHVybjsKKwkJfQorCQl0bXIgPSAmc3RjYi0+YXNvYy5hdXRvY2xvc2VfdGlt
ZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVNDVFBEQkcoU0NUUF9ERUJVR19USU1FUjEsICIl
czogVW5rbm93biB0aW1lciB0eXBlICVkXG4iLAorCQkJX19mdW5jX18sIHRfdHlwZSk7CisJCWJy
ZWFrOworCX0KKwlpZiAodG1yID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoKHRtci0+
dHlwZSAhPSB0X3R5cGUpICYmIHRtci0+dHlwZSkgeworCQkvKgorCQkgKiBPayB3ZSBoYXZlIGEg
dGltZXIgdGhhdCBpcyB1bmRlciBqb2ludCB1c2UuIENvb2tpZSB0aW1lcgorCQkgKiBwZXIgY2hh
bmNlIHdpdGggdGhlIFNFTkQgdGltZXIuIFdlIHRoZXJlZm9yZSBhcmUgTk9UCisJCSAqIHJ1bm5p
bmcgdGhlIHRpbWVyIHRoYXQgdGhlIGNhbGxlciB3YW50cyBzdG9wcGVkLiAgU28ganVzdAorCQkg
KiByZXR1cm4uCisJCSAqLworCQlyZXR1cm47CisJfQorCWlmICgodF90eXBlID09IFNDVFBfVElN
RVJfVFlQRV9TRU5EKSAmJiAoc3RjYiAhPSBOVUxMKSkgeworCQlzdGNiLT5hc29jLm51bV9zZW5k
X3RpbWVyc191cC0tOworCQlpZiAoc3RjYi0+YXNvYy5udW1fc2VuZF90aW1lcnNfdXAgPCAwKSB7
CisJCQlzdGNiLT5hc29jLm51bV9zZW5kX3RpbWVyc191cCA9IDA7CisJCX0KKwl9CisJdG1yLT5z
ZWxmID0gTlVMTDsKKwl0bXItPnN0b3BwZWRfZnJvbSA9IGZyb207CisJKHZvaWQpU0NUUF9PU19U
SU1FUl9TVE9QKCZ0bXItPnRpbWVyKTsKKwlyZXR1cm47Cit9CisKK3VpbnQzMl90CitzY3RwX2Nh
bGN1bGF0ZV9sZW4oc3RydWN0IG1idWYgKm0pCit7CisJdWludDMyX3QgdGxlbiA9IDA7CisJc3Ry
dWN0IG1idWYgKmF0OworCisJYXQgPSBtOworCXdoaWxlIChhdCkgeworCQl0bGVuICs9IFNDVFBf
QlVGX0xFTihhdCk7CisJCWF0ID0gU0NUUF9CVUZfTkVYVChhdCk7CisJfQorCXJldHVybiAodGxl
bik7Cit9CisKK3ZvaWQKK3NjdHBfbXR1X3NpemVfcmVzZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKKyAgICBzdHJ1Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqYXNvYywgdWludDMyX3QgbXR1KQorewor
CS8qCisJICogUmVzZXQgdGhlIFAtTVRVIHNpemUgb24gdGhpcyBhc3NvY2lhdGlvbiwgdGhpcyBp
bnZvbHZlcyBjaGFuZ2luZworCSAqIHRoZSBhc29jIE1UVSwgZ29pbmcgdGhyb3VnaCBBTlkgY2h1
bmsrb3ZlcmhlYWQgbGFyZ2VyIHRoYW4gbXR1IHRvCisJICogYWxsb3cgdGhlIERGIGZsYWcgdG8g
YmUgY2xlYXJlZC4KKwkgKi8KKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGs7CisJdW5zaWdu
ZWQgaW50IGVmZl9tdHUsIG92aDsKKworCWFzb2MtPnNtYWxsZXN0X210dSA9IG10dTsKKwlpZiAo
aW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjYpIHsKKwkJb3ZoID0gU0NU
UF9NSU5fT1ZFUkhFQUQ7CisJfSBlbHNlIHsKKwkJb3ZoID0gU0NUUF9NSU5fVjRfT1ZFUkhFQUQ7
CisJfQorCWVmZl9tdHUgPSBtdHUgLSBvdmg7CisJVEFJTFFfRk9SRUFDSChjaGssICZhc29jLT5z
ZW5kX3F1ZXVlLCBzY3RwX25leHQpIHsKKwkJaWYgKGNoay0+c2VuZF9zaXplID4gZWZmX210dSkg
eworCQkJY2hrLT5mbGFncyB8PSBDSFVOS19GTEFHU19GUkFHTUVOVF9PSzsKKwkJfQorCX0KKwlU
QUlMUV9GT1JFQUNIKGNoaywgJmFzb2MtPnNlbnRfcXVldWUsIHNjdHBfbmV4dCkgeworCQlpZiAo
Y2hrLT5zZW5kX3NpemUgPiBlZmZfbXR1KSB7CisJCQljaGstPmZsYWdzIHw9IENIVU5LX0ZMQUdT
X0ZSQUdNRU5UX09LOworCQl9CisJfQorfQorCisKKy8qCisgKiBnaXZlbiBhbiBhc3NvY2lhdGlv
biBhbmQgc3RhcnRpbmcgdGltZSBvZiB0aGUgY3VycmVudCBSVFQgcGVyaW9kIHJldHVybgorICog
UlRPIGluIG51bWJlciBvZiBtc2VjcyBuZXQgc2hvdWxkIHBvaW50IHRvIHRoZSBjdXJyZW50IG5l
dHdvcmsKKyAqLworCit1aW50MzJfdAorc2N0cF9jYWxjdWxhdGVfcnRvKHN0cnVjdCBzY3RwX3Rj
YiAqc3RjYiwKKwkJICAgc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKmFzb2MsCisJCSAgIHN0cnVj
dCBzY3RwX25ldHMgKm5ldCwKKwkJICAgc3RydWN0IHRpbWV2YWwgKm9sZCwKKwkJICAgaW50IHJ0
dF9mcm9tX3NhY2spCit7CisJLyotCisJICogZ2l2ZW4gYW4gYXNzb2NpYXRpb24gYW5kIHRoZSBz
dGFydGluZyB0aW1lIG9mIHRoZSBjdXJyZW50IFJUVAorCSAqIHBlcmlvZCAoaW4gdmFsdWUxL3Zh
bHVlMikgcmV0dXJuIFJUTyBpbiBudW1iZXIgb2YgbXNlY3MuCisJICovCisJaW50MzJfdCBydHQ7
IC8qIFJUVCBpbiBtcyAqLworCXVpbnQzMl90IG5ld19ydG87CisJaW50IGZpcnN0X21lYXN1cmUg
PSAwOworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKworCS8qKioqKioqKioqKioqKioqKioqKioqKiov
CisJLyogMS4gY2FsY3VsYXRlIG5ldyBSVFQgKi8KKwkvKioqKioqKioqKioqKioqKioqKioqKioq
LworCS8qIGdldCB0aGUgY3VycmVudCB0aW1lICovCisJaWYgKHN0Y2ItPmFzb2MudXNlX3ByZWNp
c2VfdGltZSkgeworCQkodm9pZClTQ1RQX0dFVFBUSU1FX1RJTUVWQUwoJm5vdyk7CisJfSBlbHNl
IHsKKwkJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJm5vdyk7CisJfQorCXRpbWV2YWxzdWIo
Jm5vdywgb2xkKTsKKwkvKiBzdG9yZSB0aGUgY3VycmVudCBSVFQgaW4gdXMgKi8KKwluZXQtPnJ0
dCA9ICh1aW50NjRfdCkxMDAwMDAwICogKHVpbnQ2NF90KW5vdy50dl9zZWMgKworCSAgICAgICAg
ICAgKHVpbnQ2NF90KW5vdy50dl91c2VjOworCS8qIGNvbXB1dGUgcnR0IGluIG1zICovCisJcnR0
ID0gKGludDMyX3QpKG5ldC0+cnR0IC8gMTAwMCk7CisJaWYgKChhc29jLT5jY19mdW5jdGlvbnMu
c2N0cF9ydHRfY2FsY3VsYXRlZCkgJiYgKHJ0dF9mcm9tX3NhY2sgPT0gU0NUUF9SVFRfRlJPTV9E
QVRBKSkgeworCQkvKiBUZWxsIHRoZSBDQyBtb2R1bGUgdGhhdCBhIG5ldyB1cGRhdGUgaGFzIGp1
c3Qgb2NjdXJyZWQgZnJvbSBhIHNhY2sgKi8KKwkJKCphc29jLT5jY19mdW5jdGlvbnMuc2N0cF9y
dHRfY2FsY3VsYXRlZCkoc3RjYiwgbmV0LCAmbm93KTsKKwl9CisJLyogRG8gd2UgbmVlZCB0byBk
ZXRlcm1pbmUgdGhlIGxhbj8gV2UgZG8gdGhpcyBvbmx5CisJICogb24gc2Fja3MgaS5lLiBSVFQg
YmVpbmcgZGV0ZXJtaW5lZCBmcm9tIGRhdGEgbm90CisJICogbm9uLWRhdGEgKEhCL0lOSVQtPklO
SVRBQ0spLgorCSAqLworCWlmICgocnR0X2Zyb21fc2FjayA9PSBTQ1RQX1JUVF9GUk9NX0RBVEEp
ICYmCisJICAgIChuZXQtPmxhbl90eXBlID09IFNDVFBfTEFOX1VOS05PV04pKSB7CisJCWlmIChu
ZXQtPnJ0dCA+IFNDVFBfTE9DQUxfTEFOX1JUVCkgeworCQkJbmV0LT5sYW5fdHlwZSA9IFNDVFBf
TEFOX0lOVEVSTkVUOworCQl9IGVsc2UgeworCQkJbmV0LT5sYW5fdHlwZSA9IFNDVFBfTEFOX0xP
Q0FMOworCQl9CisJfQorCisJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwkvKiAyLiB1
cGRhdGUgUlRUVkFSICYgU1JUVCAqLworCS8qKioqKioqKioqKioqKioqKioqKioqKioqKiovCisJ
LyotCisJICogQ29tcHV0ZSB0aGUgc2NhbGVkIGF2ZXJhZ2UgbGFzdHNhIGFuZCB0aGUKKwkgKiBz
Y2FsZWQgdmFyaWFuY2UgbGFzdHN2IGFzIGRlc2NyaWJlZCBpbiB2YW4gSmFjb2Jzb24KKwkgKiBQ
YXBlciAiQ29uZ2VzdGlvbiBBdm9pZGFuY2UgYW5kIENvbnRyb2wiLCBBbm5leCBBLgorCSAqCisJ
ICogKG5ldC0+bGFzdHNhID4+IFNDVFBfUlRUX1NISUZUKSBpcyB0aGUgc3J0dAorCSAqIChuZXQt
Pmxhc3RzYSA+PiBTQ1RQX1JUVF9WQVJfU0hJRlQpIGlzIHRoZSBydHR2YXIKKwkgKi8KKwlpZiAo
bmV0LT5SVE9fbWVhc3VyZWQpIHsKKwkJcnR0IC09IChuZXQtPmxhc3RzYSA+PiBTQ1RQX1JUVF9T
SElGVCk7CisJCW5ldC0+bGFzdHNhICs9IHJ0dDsKKwkJaWYgKHJ0dCA8IDApIHsKKwkJCXJ0dCA9
IC1ydHQ7CisJCX0KKwkJcnR0IC09IChuZXQtPmxhc3RzdiA+PiBTQ1RQX1JUVF9WQVJfU0hJRlQp
OworCQluZXQtPmxhc3RzdiArPSBydHQ7CisJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
Z2luZ19sZXZlbCkgJiBTQ1RQX1JUVFZBUl9MT0dHSU5HX0VOQUJMRSkgeworCQkJcnRvX2xvZ2dp
bmcobmV0LCBTQ1RQX0xPR19SVFRWQVIpOworCQl9CisJfSBlbHNlIHsKKwkJLyogRmlyc3QgUlRP
IG1lYXN1cm1lbnQgKi8KKwkJbmV0LT5SVE9fbWVhc3VyZWQgPSAxOworCQlmaXJzdF9tZWFzdXJl
ID0gMTsKKwkJbmV0LT5sYXN0c2EgPSBydHQgPDwgU0NUUF9SVFRfU0hJRlQ7CisJCW5ldC0+bGFz
dHN2ID0gKHJ0dCAvIDIpIDw8IFNDVFBfUlRUX1ZBUl9TSElGVDsKKwkJaWYgKFNDVFBfQkFTRV9T
WVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfUlRUVkFSX0xPR0dJTkdfRU5BQkxFKSB7
CisJCQlydG9fbG9nZ2luZyhuZXQsIFNDVFBfTE9HX0lOSVRJQUxfUlRUKTsKKwkJfQorCX0KKwlp
ZiAobmV0LT5sYXN0c3YgPT0gMCkgeworCQluZXQtPmxhc3RzdiA9IFNDVFBfQ0xPQ0tfR1JBTlVM
QVJJVFk7CisJfQorCW5ld19ydG8gPSAobmV0LT5sYXN0c2EgPj4gU0NUUF9SVFRfU0hJRlQpICsg
bmV0LT5sYXN0c3Y7CisJaWYgKChuZXdfcnRvID4gU0NUUF9TQVRfTkVUV09SS19NSU4pICYmCisJ
ICAgIChzdGNiLT5hc29jLnNhdF9uZXR3b3JrX2xvY2tvdXQgPT0gMCkpIHsKKwkJc3RjYi0+YXNv
Yy5zYXRfbmV0d29yayA9IDE7CisJfSBlbHNlIGlmICgoIWZpcnN0X21lYXN1cmUpICYmIHN0Y2It
PmFzb2Muc2F0X25ldHdvcmspIHsKKwkJc3RjYi0+YXNvYy5zYXRfbmV0d29yayA9IDA7CisJCXN0
Y2ItPmFzb2Muc2F0X25ldHdvcmtfbG9ja291dCA9IDE7CisJfQorCS8qIGJvdW5kIGl0LCBwZXIg
QzYvQzcgaW4gU2VjdGlvbiA1LjMuMSAqLworCWlmIChuZXdfcnRvIDwgc3RjYi0+YXNvYy5taW5y
dG8pIHsKKwkJbmV3X3J0byA9IHN0Y2ItPmFzb2MubWlucnRvOworCX0KKwlpZiAobmV3X3J0byA+
IHN0Y2ItPmFzb2MubWF4cnRvKSB7CisJCW5ld19ydG8gPSBzdGNiLT5hc29jLm1heHJ0bzsKKwl9
CisJLyogd2UgYXJlIG5vdyByZXR1cm5pbmcgdGhlIFJUTyAqLworCXJldHVybiAobmV3X3J0byk7
Cit9CisKKy8qCisgKiByZXR1cm4gYSBwb2ludGVyIHRvIGEgY29udGlndW91cyBwaWVjZSBvZiBk
YXRhIGZyb20gdGhlIGdpdmVuIG1idWYgY2hhaW4KKyAqIHN0YXJ0aW5nIGF0ICdvZmYnIGZvciAn
bGVuJyBieXRlcy4gIElmIHRoZSBkZXNpcmVkIHBpZWNlIHNwYW5zIG1vcmUgdGhhbgorICogb25l
IG1idWYsIGEgY29weSBpcyBtYWRlIGF0ICdwdHInLiBjYWxsZXIgbXVzdCBlbnN1cmUgdGhhdCB0
aGUgYnVmZmVyIHNpemUKKyAqIGlzID49ICdsZW4nIHJldHVybnMgTlVMTCBpZiB0aGVyZSB0aGVy
ZSBpc24ndCAnbGVuJyBieXRlcyBpbiB0aGUgY2hhaW4uCisgKi8KK2NhZGRyX3QKK3NjdHBfbV9n
ZXRwdHIoc3RydWN0IG1idWYgKm0sIGludCBvZmYsIGludCBsZW4sIHVpbnQ4X3QgKiBpbl9wdHIp
Cit7CisJdWludDMyX3QgY291bnQ7CisJdWludDhfdCAqcHRyOworCisJcHRyID0gaW5fcHRyOwor
CWlmICgob2ZmIDwgMCkgfHwgKGxlbiA8PSAwKSkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qIGZp
bmQgdGhlIGRlc2lyZWQgc3RhcnQgbG9jYXRpb24gKi8KKwl3aGlsZSAoKG0gIT0gTlVMTCkgJiYg
KG9mZiA+IDApKSB7CisJCWlmIChvZmYgPCBTQ1RQX0JVRl9MRU4obSkpCisJCQlicmVhazsKKwkJ
b2ZmIC09IFNDVFBfQlVGX0xFTihtKTsKKwkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJfQorCWlm
IChtID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKiBpcyB0aGUgY3VycmVudCBtYnVm
IGxhcmdlIGVub3VnaCAoZWcuIGNvbnRpZ3VvdXMpPyAqLworCWlmICgoU0NUUF9CVUZfTEVOKG0p
IC0gb2ZmKSA+PSBsZW4pIHsKKwkJcmV0dXJuIChtdG9kKG0sIGNhZGRyX3QpICsgb2ZmKTsKKwl9
IGVsc2UgeworCQkvKiBlbHNlLCBpdCBzcGFucyBtb3JlIHRoYW4gb25lIG1idWYsIHNvIHNhdmUg
YSB0ZW1wIGNvcHkuLi4gKi8KKwkJd2hpbGUgKChtICE9IE5VTEwpICYmIChsZW4gPiAwKSkgewor
CQkJY291bnQgPSBtaW4oU0NUUF9CVUZfTEVOKG0pIC0gb2ZmLCBsZW4pOworCQkJbWVtY3B5KHB0
ciwgbXRvZChtLCBjYWRkcl90KSArIG9mZiwgY291bnQpOworCQkJbGVuIC09IGNvdW50OworCQkJ
cHRyICs9IGNvdW50OworCQkJb2ZmID0gMDsKKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9
CisJCWlmICgobSA9PSBOVUxMKSAmJiAobGVuID4gMCkpCisJCQlyZXR1cm4gKE5VTEwpOworCQll
bHNlCisJCQlyZXR1cm4gKChjYWRkcl90KWluX3B0cik7CisJfQorfQorCisKKworc3RydWN0IHNj
dHBfcGFyYW1oZHIgKgorc2N0cF9nZXRfbmV4dF9wYXJhbShzdHJ1Y3QgbWJ1ZiAqbSwKKyAgICBp
bnQgb2Zmc2V0LAorICAgIHN0cnVjdCBzY3RwX3BhcmFtaGRyICpwdWxsLAorICAgIGludCBwdWxs
X2xpbWl0KQoreworCS8qIFRoaXMganVzdCBwcm92aWRlcyBhIHR5cGVkIHNpZ25hdHVyZSB0byBQ
ZXRlcidzIFB1bGwgcm91dGluZSAqLworCXJldHVybiAoKHN0cnVjdCBzY3RwX3BhcmFtaGRyICop
c2N0cF9tX2dldHB0cihtLCBvZmZzZXQsIHB1bGxfbGltaXQsCisJICAgICh1aW50OF90ICopIHB1
bGwpKTsKK30KKworCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2FkZF9wYWRfdG9tYnVmKHN0cnVjdCBt
YnVmICptLCBpbnQgcGFkbGVuKQoreworCXN0cnVjdCBtYnVmICptX2xhc3Q7CisJY2FkZHJfdCBk
cDsKKworCWlmIChwYWRsZW4gPiAzKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChwYWRs
ZW4gPD0gTV9UUkFJTElOR1NQQUNFKG0pKSB7CisJCS8qCisJCSAqIFRoZSBlYXN5IHdheS4gV2Ug
aG9wZSB0aGUgbWFqb3JpdHkgb2YgdGhlIHRpbWUgd2UgaGl0CisJCSAqIGhlcmUgOikKKwkJICov
CisJCW1fbGFzdCA9IG07CisJfSBlbHNlIHsKKwkJLyogSGFyZCB3YXkgd2UgbXVzdCBncm93IHRo
ZSBtYnVmIGNoYWluICovCisJCW1fbGFzdCA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhwYWRsZW4s
IDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwkJaWYgKG1fbGFzdCA9PSBOVUxMKSB7CisJCQly
ZXR1cm4gKE5VTEwpOworCQl9CisJCVNDVFBfQlVGX0xFTihtX2xhc3QpID0gMDsKKwkJU0NUUF9C
VUZfTkVYVChtX2xhc3QpID0gTlVMTDsKKwkJU0NUUF9CVUZfTkVYVChtKSA9IG1fbGFzdDsKKwl9
CisJZHAgPSBtdG9kKG1fbGFzdCwgY2FkZHJfdCkgKyBTQ1RQX0JVRl9MRU4obV9sYXN0KTsKKwlT
Q1RQX0JVRl9MRU4obV9sYXN0KSArPSBwYWRsZW47CisJbWVtc2V0KGRwLCAwLCBwYWRsZW4pOwor
CXJldHVybiAobV9sYXN0KTsKK30KKworc3RydWN0IG1idWYgKgorc2N0cF9wYWRfbGFzdG1idWYo
c3RydWN0IG1idWYgKm0sIGludCBwYWR2YWwsIHN0cnVjdCBtYnVmICpsYXN0X21idWYpCit7CisJ
LyogZmluZCB0aGUgbGFzdCBtYnVmIGluIGNoYWluIGFuZCBwYWQgaXQgKi8KKwlzdHJ1Y3QgbWJ1
ZiAqbV9hdDsKKworCWlmIChsYXN0X21idWYgIT0gTlVMTCkgeworCQlyZXR1cm4gKHNjdHBfYWRk
X3BhZF90b21idWYobGFzdF9tYnVmLCBwYWR2YWwpKTsKKwl9IGVsc2UgeworCQlmb3IgKG1fYXQg
PSBtOyBtX2F0OyBtX2F0ID0gU0NUUF9CVUZfTkVYVChtX2F0KSkgeworCQkJaWYgKFNDVFBfQlVG
X05FWFQobV9hdCkgPT0gTlVMTCkgeworCQkJCXJldHVybiAoc2N0cF9hZGRfcGFkX3RvbWJ1Ziht
X2F0LCBwYWR2YWwpKTsKKwkJCX0KKwkJfQorCX0KKwlyZXR1cm4gKE5VTEwpOworfQorCitzdGF0
aWMgdm9pZAorc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKHVpbnQxNl90IHN0YXRlLCBzdHJ1Y3Qg
c2N0cF90Y2IgKnN0Y2IsCisgICAgdWludDE2X3QgZXJyb3IsIHN0cnVjdCBzY3RwX2Fib3J0X2No
dW5rICphYm9ydCwgdWludDhfdCBmcm9tX3BlZXIsIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5l
ZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgIFNDVFBf
VU5VU0VECisjZW5kaWYKKyAgICApCit7CisJc3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVj
dCBzY3RwX2Fzc29jX2NoYW5nZSAqc2FjOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpj
b250cm9sOworCXVuc2lnbmVkIGludCBub3RpZl9sZW47CisJdWludDE2X3QgYWJvcnRfbGVuOwor
CXVuc2lnbmVkIGludCBpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBf
U09fTE9DS19URVNUSU5HKQorCXN0cnVjdCBzb2NrZXQgKnNvOworI2VuZGlmCisKKwlpZiAoc3Rj
YiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29u
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZBU1NPQ0VWTlQpKSB7CisJ
CW5vdGlmX2xlbiA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5n
ZSk7CisJCWlmIChhYm9ydCAhPSBOVUxMKSB7CisJCQlhYm9ydF9sZW4gPSBudG9ocyhhYm9ydC0+
Y2guY2h1bmtfbGVuZ3RoKTsKKwkJCS8qCisJCQkgKiBPbmx5IFNDVFBfQ0hVTktfQlVGRkVSX1NJ
WkUgYXJlIGd1YXJhbnRlZWQgdG8gYmUKKwkJCSAqIGNvbnRpZ3VvdXMuCisJCQkgKi8KKwkJCWlm
IChhYm9ydF9sZW4gPiBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFKSB7CisJCQkJYWJvcnRfbGVuID0g
U0NUUF9DSFVOS19CVUZGRVJfU0laRTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWFib3J0X2xlbiA9
IDA7CisJCX0KKwkJaWYgKChzdGF0ZSA9PSBTQ1RQX0NPTU1fVVApIHx8IChzdGF0ZSA9PSBTQ1RQ
X1JFU1RBUlQpKSB7CisJCQlub3RpZl9sZW4gKz0gU0NUUF9BU1NPQ19TVVBQT1JUU19NQVg7CisJ
CX0gZWxzZSBpZiAoKHN0YXRlID09IFNDVFBfQ09NTV9MT1NUKSB8fCAoc3RhdGUgPT0gU0NUUF9D
QU5UX1NUUl9BU1NPQykpIHsKKwkJCW5vdGlmX2xlbiArPSBhYm9ydF9sZW47CisJCX0KKwkJbV9u
b3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobm90aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwg
TVRfREFUQSk7CisJCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7CisJCQkvKiBSZXRyeSB3aXRoIHNt
YWxsZXIgdmFsdWUuICovCisJCQlub3RpZl9sZW4gPSAodW5zaWduZWQgaW50KXNpemVvZihzdHJ1
Y3Qgc2N0cF9hc3NvY19jaGFuZ2UpOworCQkJbV9ub3RpZnkgPSBzY3RwX2dldF9tYnVmX2Zvcl9t
c2cobm90aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCQlpZiAobV9ub3RpZnkg
PT0gTlVMTCkgeworCQkJCWdvdG8gc2V0X2Vycm9yOworCQkJfQorCQl9CisJCVNDVFBfQlVGX05F
WFQobV9ub3RpZnkpID0gTlVMTDsKKwkJc2FjID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBf
YXNzb2NfY2hhbmdlICopOworCQltZW1zZXQoc2FjLCAwLCBub3RpZl9sZW4pOworCQlzYWMtPnNh
Y190eXBlID0gU0NUUF9BU1NPQ19DSEFOR0U7CisJCXNhYy0+c2FjX2ZsYWdzID0gMDsKKwkJc2Fj
LT5zYWNfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2Fzc29jX2NoYW5nZSk7CisJCXNhYy0+
c2FjX3N0YXRlID0gc3RhdGU7CisJCXNhYy0+c2FjX2Vycm9yID0gZXJyb3I7CisJCS8qIFhYWCB2
ZXJpZnkgdGhlc2Ugc3RyZWFtIGNvdW50cyAqLworCQlzYWMtPnNhY19vdXRib3VuZF9zdHJlYW1z
ID0gc3RjYi0+YXNvYy5zdHJlYW1vdXRjbnQ7CisJCXNhYy0+c2FjX2luYm91bmRfc3RyZWFtcyA9
IHN0Y2ItPmFzb2Muc3RyZWFtaW5jbnQ7CisJCXNhYy0+c2FjX2Fzc29jX2lkID0gc2N0cF9nZXRf
YXNzb2NpZChzdGNiKTsKKwkJaWYgKG5vdGlmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3Nv
Y19jaGFuZ2UpKSB7CisJCQlpZiAoKHN0YXRlID09IFNDVFBfQ09NTV9VUCkgfHwgKHN0YXRlID09
IFNDVFBfUkVTVEFSVCkpIHsKKwkJCQlpID0gMDsKKwkJCQlpZiAoc3RjYi0+YXNvYy5wcnNjdHBf
c3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5zYWNfaW5mb1tpKytdID0gU0NUUF9BU1NPQ19T
VVBQT1JUU19QUjsKKwkJCQl9CisJCQkJaWYgKHN0Y2ItPmFzb2MuYXV0aF9zdXBwb3J0ZWQgPT0g
MSkgeworCQkJCQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FVVEg7
CisJCQkJfQorCQkJCWlmIChzdGNiLT5hc29jLmFzY29uZl9zdXBwb3J0ZWQgPT0gMSkgeworCQkJ
CQlzYWMtPnNhY19pbmZvW2krK10gPSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FTQ09ORjsKKwkJCQl9
CisJCQkJaWYgKHN0Y2ItPmFzb2MuaWRhdGFfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5z
YWNfaW5mb1tpKytdID0gU0NUUF9BU1NPQ19TVVBQT1JUU19JTlRFUkxFQVZJTkc7CisJCQkJfQor
CQkJCXNhYy0+c2FjX2luZm9baSsrXSA9IFNDVFBfQVNTT0NfU1VQUE9SVFNfTVVMVElCVUY7CisJ
CQkJaWYgKHN0Y2ItPmFzb2MucmVjb25maWdfc3VwcG9ydGVkID09IDEpIHsKKwkJCQkJc2FjLT5z
YWNfaW5mb1tpKytdID0gU0NUUF9BU1NPQ19TVVBQT1JUU19SRV9DT05GSUc7CisJCQkJfQorCQkJ
CXNhYy0+c2FjX2xlbmd0aCArPSBpOworCQkJfSBlbHNlIGlmICgoc3RhdGUgPT0gU0NUUF9DT01N
X0xPU1QpIHx8IChzdGF0ZSA9PSBTQ1RQX0NBTlRfU1RSX0FTU09DKSkgeworCQkJCW1lbWNweShz
YWMtPnNhY19pbmZvLCBhYm9ydCwgYWJvcnRfbGVuKTsKKwkJCQlzYWMtPnNhY19sZW5ndGggKz0g
YWJvcnRfbGVuOworCQkJfQorCQl9CisJCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzYWMtPnNh
Y19sZW5ndGg7CisJCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2It
PmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCQkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX25vdGlmeSk7CisJCWlmIChjb250cm9sICE9IE5VTEwpIHsK
KwkJCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJCQljb250cm9s
LT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJCQkvKiBub3QgdGhhdCB3ZSBuZWVkIHRo
aXMgKi8KKwkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCQkJc2N0cF9hZGRfdG9f
cmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCSAgICAgICAgICAgICAgICAgIGNvbnRyb2ws
CisJCQkgICAgICAgICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwgU0NU
UF9SRUFEX0xPQ0tfTk9UX0hFTEQsCisJCQkgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOwor
CQl9IGVsc2UgeworCQkJc2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJfQorCX0KKwkvKgorCSAq
IEZvciAxLXRvLTEgc3R5bGUgc29ja2V0cywgd2Ugc2VuZCB1cCBhbmQgZXJyb3Igd2hlbiBhbiBB
Qk9SVAorCSAqIGNvbWVzIGluLgorCSAqLworc2V0X2Vycm9yOgorCWlmICgoKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19JTl9UQ1BQT09MKSkgJiYKKwkg
ICAgKChzdGF0ZSA9PSBTQ1RQX0NPTU1fTE9TVCkgfHwgKHN0YXRlID09IFNDVFBfQ0FOVF9TVFJf
QVNTT0MpKSkgeworCQlTT0NLX0xPQ0soc3RjYi0+c2N0cF9zb2NrZXQpOworCQlpZiAoZnJvbV9w
ZWVyKSB7CisJCQlpZiAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVf
Q09PS0lFX1dBSVQpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUNPTk5SRUZVU0VEKTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tl
dC0+c29fZXJyb3IgPSBFQ09OTlJFRlVTRUQ7CisJCQl9IGVsc2UgeworCQkJCVNDVFBfTFRSQUNF
X0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFQ09OTlJFU0VU
KTsKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3IgPSBFQ09OTlJFU0VUOworCQkJfQor
CQl9IGVsc2UgeworCQkJaWYgKChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9T
VEFURV9DT09LSUVfV0FJVCkgfHwKKwkJCSAgICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2Mp
ID09IFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRCkpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRVRJTUVET1VUKTsKKwkJCQlz
dGNiLT5zY3RwX3NvY2tldC0+c29fZXJyb3IgPSBFVElNRURPVVQ7CisJCQl9IGVsc2UgeworCQkJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElM
LCBFQ09OTkFCT1JURUQpOworCQkJCXN0Y2ItPnNjdHBfc29ja2V0LT5zb19lcnJvciA9IEVDT05O
QUJPUlRFRDsKKwkJCX0KKwkJfQorCQlTT0NLX1VOTE9DSyhzdGNiLT5zY3RwX3NvY2tldCk7CisJ
fQorCS8qIFdha2UgQU5ZIHNsZWVwZXJzICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRl
ZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc28gPSBTQ1RQX0lOUF9TTyhzdGNiLT5zY3Rw
X2VwKTsKKwlpZiAoIXNvX2xvY2tlZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy5y
ZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VUX0xPQ0so
c28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZz
dGNiLT5hc29jLnJlZmNudCwgMSk7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFU
RV9DTE9TRURfU09DS0VUKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJcmV0
dXJuOworCQl9CisJfQorI2VuZGlmCisJaWYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpIHx8CisJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSAmJgorCSAgICAoKHN0YXRlID09IFND
VFBfQ09NTV9MT1NUKSB8fCAoc3RhdGUgPT0gU0NUUF9DQU5UX1NUUl9BU1NPQykpKSB7CisJCXNv
Y2FudHJjdm1vcmUoc3RjYi0+c2N0cF9zb2NrZXQpOworCX0KKwlzb3J3YWtldXAoc3RjYi0+c2N0
cF9zb2NrZXQpOworCXNvd3dha2V1cChzdGNiLT5zY3RwX3NvY2tldCk7CisjaWYgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJaWYgKCFzb19sb2Nr
ZWQpIHsKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwl9CisjZW5kaWYKK30KKworc3Rh
dGljIHZvaWQKK3NjdHBfbm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCB1aW50MzJfdCBzdGF0ZSwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJfdCBl
cnJvciwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorKQoreworCXN0
cnVjdCBtYnVmICptX25vdGlmeTsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UgKnNwYzsKKwlz
dHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKworCWlmICgoc3RjYiA9PSBOVUxM
KSB8fAorCSAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwg
U0NUUF9QQ0JfRkxBR1NfUkVDVlBBRERSRVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQg
Ki8KKwkJcmV0dXJuOworCX0KKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhzaXpl
b2Yoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlKSwgMCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOwor
CWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5
KSA9IDA7CisJc3BjID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlICop
OworCW1lbXNldChzcGMsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wYWRkcl9jaGFuZ2UpKTsKKwlz
cGMtPnNwY190eXBlID0gU0NUUF9QRUVSX0FERFJfQ0hBTkdFOworCXNwYy0+c3BjX2ZsYWdzID0g
MDsKKwlzcGMtPnNwY19sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlKTsK
Kwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgor
I2lmZGVmIElORVQ2CisJCWlmIChzY3RwX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgU0NU
UF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgeworCQkJaW42X3Npbl8yX3Y0bWFwc2luNigo
c3RydWN0IHNvY2thZGRyX2luICopc2EsCisJCQkgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopJnNwYy0+c3BjX2FhZGRyKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweSgm
c3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCX0KKyNl
bHNlCisJCW1lbWNweSgmc3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSk7CisjZW5kaWYKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZf
SU5FVDY6CisJeworI2lmZGVmIFNDVFBfRU1CRURERURfVjZfU0NPUEUKKwkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisJCW1l
bWNweSgmc3BjLT5zcGNfYWFkZHIsIHNhLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwor
CisjaWZkZWYgU0NUUF9FTUJFRERFRF9WNl9TQ09QRQorCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRk
cl9pbjYgKikmc3BjLT5zcGNfYWFkZHI7CisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZz
aW42LT5zaW42X2FkZHIpKSB7CisJCQlpZiAoc2luNi0+c2luNl9zY29wZV9pZCA9PSAwKSB7CisJ
CQkJLyogcmVjb3ZlciBzY29wZV9pZCBmb3IgdXNlciAqLworI2lmZGVmIFNDVFBfS0FNRQorCQkJ
CSh2b2lkKXNhNl9yZWNvdmVyc2NvcGUoc2luNik7CisjZWxzZQorCQkJCSh2b2lkKWluNl9yZWNv
dmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwKKwkJCQkJCSAgICAgICBOVUxMKTsKKyNl
bmRpZgorCQkJfSBlbHNlIHsKKwkJCQkvKiBjbGVhciBlbWJlZGRlZCBzY29wZV9pZCBmb3IgdXNl
ciAqLworCQkJCWluNl9jbGVhcnNjb3BlKCZzaW42LT5zaW42X2FkZHIpOworCQkJfQorCQl9Cisj
ZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCQlicmVhazsKKwl9CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJY2FzZSBBRl9DT05OOgorCQltZW1jcHkoJnNw
Yy0+c3BjX2FhZGRyLCBzYSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJCWJyZWFr
OworI2VuZGlmCisJZGVmYXVsdDoKKwkJLyogVFNOSCAqLworCQlicmVhazsKKwl9CisJc3BjLT5z
cGNfc3RhdGUgPSBzdGF0ZTsKKwlzcGMtPnNwY19lcnJvciA9IGVycm9yOworCXNwYy0+c3BjX2Fz
c29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKworCVNDVFBfQlVGX0xFTihtX25vdGlm
eSkgPSBzaXplb2Yoc3RydWN0IHNjdHBfcGFkZHJfY2hhbmdlKTsKKwlTQ1RQX0JVRl9ORVhUKG1f
bm90aWZ5KSA9IE5VTEw7CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJvbCA9IHNj
dHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3RpbmF0aW9u
LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFzb2MuY29u
dGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX25vdGlm
eSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJc2N0cF9t
X2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGggPSBTQ1RQ
X0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElGSUNBVElP
TjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21idWYgPSBt
X25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLAorCSAgICAg
ICAgICAgICAgICAgIGNvbnRyb2wsCisJICAgICAgICAgICAgICAgICAgJnN0Y2ItPnNjdHBfc29j
a2V0LT5zb19yY3YsIDEsCisJICAgICAgICAgICAgICAgICAgU0NUUF9SRUFEX0xPQ0tfTk9UX0hF
TEQsCisJICAgICAgICAgICAgICAgICAgc29fbG9ja2VkKTsKK30KKworCitzdGF0aWMgdm9pZAor
c2N0cF9ub3RpZnlfc2VuZF9mYWlsZWQoc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50OF90IHNl
bnQsIHVpbnQzMl90IGVycm9yLAorICAgIHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKmNoaywgaW50
IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19M
T0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICkKK3sKKwlzdHJ1Y3Qg
bWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfc2VuZF9mYWlsZWQgKnNzZjsKKwlzdHJ1Y3Qg
c2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3NmZTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVh
ZCAqY29udHJvbDsKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqY2hraGRyOworCWludCBub3RpZmhk
cl9sZW4sIGNoa19sZW4sIGNoa2hkcl9sZW4sIHBhZGRpbmdfbGVuLCBwYXlsb2FkX2xlbjsKKwor
CWlmICgoc3RjYiA9PSBOVUxMKSB8fAorCSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZTRU5ERkFJTEVWTlQpICYmCisJ
ICAgICBzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9Q
Q0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQpKSkgeworCQkvKiBldmVudCBub3QgZW5hYmxlZCAq
LworCQlyZXR1cm47CisJfQorCisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0Y2ItPnNj
dHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgeworCQlub3Rp
Zmhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOworCX0gZWxz
ZSB7CisJCW5vdGlmaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCk7CisJ
fQorCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmaGRyX2xlbiwgMCwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFj
ZSBsZWZ0ICovCisJCXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gbm90aWZoZHJf
bGVuOworCWlmIChzdGNiLT5hc29jLmlkYXRhX3N1cHBvcnRlZCkgeworCQljaGtoZHJfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzY3RwX2lkYXRhX2NodW5rKTsKKwl9IGVsc2UgeworCQljaGtoZHJfbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2RhdGFfY2h1bmspOworCX0KKwkvKiBVc2Ugc29tZSBkZWZh
dWx0cyBpbiBjYXNlIHdlIGNhbid0IGFjY2VzcyB0aGUgY2h1bmsgaGVhZGVyICovCisJaWYgKGNo
ay0+c2VuZF9zaXplID49IGNoa2hkcl9sZW4pIHsKKwkJcGF5bG9hZF9sZW4gPSBjaGstPnNlbmRf
c2l6ZSAtIGNoa2hkcl9sZW47CisJfSBlbHNlIHsKKwkJcGF5bG9hZF9sZW4gPSAwOworCX0KKwlw
YWRkaW5nX2xlbiA9IDA7CisJaWYgKGNoay0+ZGF0YSAhPSBOVUxMKSB7CisJCWNoa2hkciA9IG10
b2QoY2hrLT5kYXRhLCBzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKTsKKwkJaWYgKGNoa2hkciAhPSBO
VUxMKSB7CisJCQljaGtfbGVuID0gbnRvaHMoY2hraGRyLT5jaHVua19sZW5ndGgpOworCQkJaWYg
KChjaGtfbGVuID49IGNoa2hkcl9sZW4pICYmCisJCQkgICAgKGNoay0+c2VuZF9zaXplID49IGNo
a19sZW4pICYmCisJCQkgICAgKGNoay0+c2VuZF9zaXplIC0gY2hrX2xlbiA8IDQpKSB7CisJCQkJ
cGFkZGluZ19sZW4gPSBjaGstPnNlbmRfc2l6ZSAtIGNoa19sZW47CisJCQkJcGF5bG9hZF9sZW4g
PSBjaGstPnNlbmRfc2l6ZSAtIGNoa2hkcl9sZW4gLSBwYWRkaW5nX2xlbjsKKwkJCX0KKwkJfQor
CX0KKwlpZiAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb24oc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NU
UF9QQ0JfRkxBR1NfUkVDVk5TRU5ERkFJTEVWTlQpKSB7CisJCXNzZmUgPSBtdG9kKG1fbm90aWZ5
LCBzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqKTsKKwkJbWVtc2V0KHNzZmUsIDAsIG5v
dGlmaGRyX2xlbik7CisJCXNzZmUtPnNzZmVfdHlwZSA9IFNDVFBfU0VORF9GQUlMRURfRVZFTlQ7
CisJCWlmIChzZW50KSB7CisJCQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1NFTlQ7CisJ
CX0gZWxzZSB7CisJCQlzc2ZlLT5zc2ZlX2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKKwkJfQor
CQlzc2ZlLT5zc2ZlX2xlbmd0aCA9ICh1aW50MzJfdCkobm90aWZoZHJfbGVuICsgcGF5bG9hZF9s
ZW4pOworCQlzc2ZlLT5zc2ZlX2Vycm9yID0gZXJyb3I7CisJCS8qIG5vdCBleGFjdGx5IHdoYXQg
dGhlIHVzZXIgc2VudCBpbiwgYnV0IHNob3VsZCBiZSBjbG9zZSA6KSAqLworCQlzc2ZlLT5zc2Zl
X2luZm8uc25kX3NpZCA9IGNoay0+cmVjLmRhdGEuc2lkOworCQlzc2ZlLT5zc2ZlX2luZm8uc25k
X2ZsYWdzID0gY2hrLT5yZWMuZGF0YS5yY3ZfZmxhZ3M7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRf
cHBpZCA9IGNoay0+cmVjLmRhdGEucHBpZDsKKwkJc3NmZS0+c3NmZV9pbmZvLnNuZF9jb250ZXh0
ID0gY2hrLT5yZWMuZGF0YS5jb250ZXh0OworCQlzc2ZlLT5zc2ZlX2luZm8uc25kX2Fzc29jX2lk
ID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwkJc3NmZS0+c3NmZV9hc3NvY19pZCA9IHNjdHBf
Z2V0X2Fzc29jaWQoc3RjYik7CisJfSBlbHNlIHsKKwkJc3NmID0gbXRvZChtX25vdGlmeSwgc3Ry
dWN0IHNjdHBfc2VuZF9mYWlsZWQgKik7CisJCW1lbXNldChzc2YsIDAsIG5vdGlmaGRyX2xlbik7
CisJCXNzZi0+c3NmX3R5cGUgPSBTQ1RQX1NFTkRfRkFJTEVEOworCQlpZiAoc2VudCkgeworCQkJ
c3NmLT5zc2ZfZmxhZ3MgPSBTQ1RQX0RBVEFfU0VOVDsKKwkJfSBlbHNlIHsKKwkJCXNzZi0+c3Nm
X2ZsYWdzID0gU0NUUF9EQVRBX1VOU0VOVDsKKwkJfQorCQlzc2YtPnNzZl9sZW5ndGggPSAodWlu
dDMyX3QpKG5vdGlmaGRyX2xlbiArIHBheWxvYWRfbGVuKTsKKwkJc3NmLT5zc2ZfZXJyb3IgPSBl
cnJvcjsKKwkJLyogbm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxk
IGJlIGNsb3NlIDopICovCisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3RyZWFtID0gY2hrLT5yZWMu
ZGF0YS5zaWQ7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3NuID0gKHVpbnQxNl90KWNoay0+cmVj
LmRhdGEubWlkOworCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2ZsYWdzID0gY2hrLT5yZWMuZGF0YS5y
Y3ZfZmxhZ3M7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fcHBpZCA9IGNoay0+cmVjLmRhdGEucHBp
ZDsKKwkJc3NmLT5zc2ZfaW5mby5zaW5mb19jb250ZXh0ID0gY2hrLT5yZWMuZGF0YS5jb250ZXh0
OworCQlzc2YtPnNzZl9pbmZvLnNpbmZvX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNi
KTsKKwkJc3NmLT5zc2ZfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCX0KKwlp
ZiAoY2hrLT5kYXRhICE9IE5VTEwpIHsKKwkJLyogVHJpbSBvZmYgdGhlIHNjdHAgY2h1bmsgaGVh
ZGVyIChpdCBzaG91bGQgYmUgdGhlcmUpICovCisJCWlmIChjaGstPnNlbmRfc2l6ZSA9PSBjaGto
ZHJfbGVuICsgcGF5bG9hZF9sZW4gKyBwYWRkaW5nX2xlbikgeworCQkJbV9hZGooY2hrLT5kYXRh
LCBjaGtoZHJfbGVuKTsKKwkJCW1fYWRqKGNoay0+ZGF0YSwgLXBhZGRpbmdfbGVuKTsKKwkJCXNj
dHBfbWJ1Zl9jcnVzaChjaGstPmRhdGEpOworCQkJY2hrLT5zZW5kX3NpemUgLT0gKGNoa2hkcl9s
ZW4gKyBwYWRkaW5nX2xlbik7CisJCX0KKwl9CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBj
aGstPmRhdGE7CisJLyogU3RlYWwgb2ZmIHRoZSBtYnVmICovCisJY2hrLT5kYXRhID0gTlVMTDsK
KwkvKgorCSAqIEZvciB0aGlzIGNhc2UsIHdlIGNoZWNrIHRoZSBhY3R1YWwgc29ja2V0IGJ1ZmZl
ciwgc2luY2UgdGhlIGFzc29jCisJICogaXMgZ29pbmcgYXdheSB3ZSBkb24ndCB3YW50IHRvIG92
ZXJmaWxsIHRoZSBzb2NrZXQgYnVmZmVyIGZvciBhCisJICogbm9uLXJlYWRlcgorCSAqLworCWlm
IChzY3RwX3Nic3BhY2VfZmFpbGVkbXNncygmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBT
Q1RQX0JVRl9MRU4obV9ub3RpZnkpKSB7CisJCXNjdHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJl
dHVybjsKKwl9CisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxk
X3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAs
IDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlm
IChjb250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbSht
X25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVO
KG1fbm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyog
bm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7
CisJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgICAgICAgICAg
ICAgICBjb250cm9sLAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29f
cmN2LCAxLAorCSAgICAgICAgICAgICAgICAgIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELAorCSAg
ICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7Cit9CisKKworc3RhdGljIHZvaWQKK3NjdHBfbm90
aWZ5X3NlbmRfZmFpbGVkMihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90IGVycm9yLAor
CQkJIHN0cnVjdCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcCwgaW50IHNvX2xvY2tlZAor
I2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcp
CisgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgorICAgICAgICAg
ICAgICAgICAgICAgICAgICkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNj
dHBfc2VuZF9mYWlsZWQgKnNzZjsKKwlzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZF9ldmVudCAqc3Nm
ZTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlpbnQgbm90aWZoZHJf
bGVuOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVy
ZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfUkVDVlNFTkRGQUlMRVZO
VCkgJiYKKwkgICAgIHNjdHBfc3RjYl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNi
LCBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCkpKSB7CisJCS8qIGV2ZW50IG5vdCBl
bmFibGVkICovCisJCXJldHVybjsKKwl9CisJaWYgKHNjdHBfc3RjYl9pc19mZWF0dXJlX29uKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOU0VOREZBSUxFVk5UKSkgewor
CQlub3RpZmhkcl9sZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRfZXZlbnQpOwor
CX0gZWxzZSB7CisJCW5vdGlmaGRyX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxl
ZCk7CisJfQorCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmaGRyX2xlbiwg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7CisJCS8q
IG5vIHNwYWNlIGxlZnQgKi8KKwkJcmV0dXJuOworCX0KKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkp
ID0gbm90aWZoZHJfbGVuOworCWlmIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vbihzdGNiLT5zY3Rw
X2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlNFTkRGQUlMRVZOVCkpIHsKKwkJc3NmZSA9
IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50ICopOworCQltZW1z
ZXQoc3NmZSwgMCwgbm90aWZoZHJfbGVuKTsKKwkJc3NmZS0+c3NmZV90eXBlID0gU0NUUF9TRU5E
X0ZBSUxFRF9FVkVOVDsKKwkJc3NmZS0+c3NmZV9mbGFncyA9IFNDVFBfREFUQV9VTlNFTlQ7CisJ
CXNzZmUtPnNzZmVfbGVuZ3RoID0gKHVpbnQzMl90KShub3RpZmhkcl9sZW4gKyBzcC0+bGVuZ3Ro
KTsKKwkJc3NmZS0+c3NmZV9lcnJvciA9IGVycm9yOworCQkvKiBub3QgZXhhY3RseSB3aGF0IHRo
ZSB1c2VyIHNlbnQgaW4sIGJ1dCBzaG91bGQgYmUgY2xvc2UgOikgKi8KKwkJc3NmZS0+c3NmZV9p
bmZvLnNuZF9zaWQgPSBzcC0+c2lkOworCQlpZiAoc3AtPnNvbWVfdGFrZW4pIHsKKwkJCXNzZmUt
PnNzZmVfaW5mby5zbmRfZmxhZ3MgPSBTQ1RQX0RBVEFfTEFTVF9GUkFHOworCQl9IGVsc2Ugewor
CQkJc3NmZS0+c3NmZV9pbmZvLnNuZF9mbGFncyA9IFNDVFBfREFUQV9OT1RfRlJBRzsKKwkJfQor
CQlzc2ZlLT5zc2ZlX2luZm8uc25kX3BwaWQgPSBzcC0+cHBpZDsKKwkJc3NmZS0+c3NmZV9pbmZv
LnNuZF9jb250ZXh0ID0gc3AtPmNvbnRleHQ7CisJCXNzZmUtPnNzZmVfaW5mby5zbmRfYXNzb2Nf
aWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQlzc2ZlLT5zc2ZlX2Fzc29jX2lkID0gc2N0
cF9nZXRfYXNzb2NpZChzdGNiKTsKKwl9IGVsc2UgeworCQlzc2YgPSBtdG9kKG1fbm90aWZ5LCBz
dHJ1Y3Qgc2N0cF9zZW5kX2ZhaWxlZCAqKTsKKwkJbWVtc2V0KHNzZiwgMCwgbm90aWZoZHJfbGVu
KTsKKwkJc3NmLT5zc2ZfdHlwZSA9IFNDVFBfU0VORF9GQUlMRUQ7CisJCXNzZi0+c3NmX2ZsYWdz
ID0gU0NUUF9EQVRBX1VOU0VOVDsKKwkJc3NmLT5zc2ZfbGVuZ3RoID0gKHVpbnQzMl90KShub3Rp
Zmhkcl9sZW4gKyBzcC0+bGVuZ3RoKTsKKwkJc3NmLT5zc2ZfZXJyb3IgPSBlcnJvcjsKKwkJLyog
bm90IGV4YWN0bHkgd2hhdCB0aGUgdXNlciBzZW50IGluLCBidXQgc2hvdWxkIGJlIGNsb3NlIDop
ICovCisJCXNzZi0+c3NmX2luZm8uc2luZm9fc3RyZWFtID0gc3AtPnNpZDsKKwkJc3NmLT5zc2Zf
aW5mby5zaW5mb19zc24gPSAwOworCQlpZiAoc3AtPnNvbWVfdGFrZW4pIHsKKwkJCXNzZi0+c3Nm
X2luZm8uc2luZm9fZmxhZ3MgPSBTQ1RQX0RBVEFfTEFTVF9GUkFHOworCQl9IGVsc2UgeworCQkJ
c3NmLT5zc2ZfaW5mby5zaW5mb19mbGFncyA9IFNDVFBfREFUQV9OT1RfRlJBRzsKKwkJfQorCQlz
c2YtPnNzZl9pbmZvLnNpbmZvX3BwaWQgPSBzcC0+cHBpZDsKKwkJc3NmLT5zc2ZfaW5mby5zaW5m
b19jb250ZXh0ID0gc3AtPmNvbnRleHQ7CisJCXNzZi0+c3NmX2luZm8uc2luZm9fYXNzb2NfaWQg
PSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCQlzc2YtPnNzZl9hc3NvY19pZCA9IHNjdHBfZ2V0
X2Fzc29jaWQoc3RjYik7CisJfQorCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gc3AtPmRhdGE7
CisKKwkvKiBTdGVhbCBvZmYgdGhlIG1idWYgKi8KKwlzcC0+ZGF0YSA9IE5VTEw7CisJLyoKKwkg
KiBGb3IgdGhpcyBjYXNlLCB3ZSBjaGVjayB0aGUgYWN0dWFsIHNvY2tldCBidWZmZXIsIHNpbmNl
IHRoZSBhc3NvYworCSAqIGlzIGdvaW5nIGF3YXkgd2UgZG9uJ3Qgd2FudCB0byBvdmVyZmlsbCB0
aGUgc29ja2V0IGJ1ZmZlciBmb3IgYQorCSAqIG5vbi1yZWFkZXIKKwkgKi8KKwlpZiAoc2N0cF9z
YnNwYWNlX2ZhaWxlZG1zZ3MoJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YpIDwgU0NUUF9CVUZf
TEVOKG1fbm90aWZ5KSkgeworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJ
fQorCS8qIGFwcGVuZCB0byBzb2NrZXQgKi8KKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9l
bnRyeShzdGNiLCBzdGNiLT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJv
bCA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkp
OworCQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlm
eSk7CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0
IHdlIG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBf
YWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBfZXAsIHN0Y2IsCisJICAgIGNvbnRyb2wsCisJICAgICZz
dGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29f
bG9ja2VkKTsKK30KKworCisKK3N0YXRpYyB2b2lkCitzY3RwX25vdGlmeV9hZGFwdGF0aW9uX2xh
eWVyKHN0cnVjdCBzY3RwX3RjYiAqc3RjYikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJ
c3RydWN0IHNjdHBfYWRhcHRhdGlvbl9ldmVudCAqc2FpOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIHNjdHBfc3Rj
Yl9pc19mZWF0dXJlX29mZihzdGNiLT5zY3RwX2VwLCBzdGNiLCBTQ1RQX1BDQl9GTEFHU19BREFQ
VEFUSU9ORVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuOworCX0K
KworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9h
ZGFwdGlvbl9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkg
PT0gTlVMTCkKKwkJLyogbm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisJU0NUUF9CVUZfTEVO
KG1fbm90aWZ5KSA9IDA7CisJc2FpID0gbXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfYWRhcHRh
dGlvbl9ldmVudCAqKTsKKwltZW1zZXQoc2FpLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfYWRhcHRh
dGlvbl9ldmVudCkpOworCXNhaS0+c2FpX3R5cGUgPSBTQ1RQX0FEQVBUQVRJT05fSU5ESUNBVElP
TjsKKwlzYWktPnNhaV9mbGFncyA9IDA7CisJc2FpLT5zYWlfbGVuZ3RoID0gc2l6ZW9mKHN0cnVj
dCBzY3RwX2FkYXB0YXRpb25fZXZlbnQpOworCXNhaS0+c2FpX2FkYXB0YXRpb25faW5kID0gc3Rj
Yi0+YXNvYy5wZWVyc19hZGFwdGF0aW9uOworCXNhaS0+c2FpX2Fzc29jX2lkID0gc2N0cF9nZXRf
YXNzb2NpZChzdGNiKTsKKworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSBzaXplb2Yoc3RydWN0
IHNjdHBfYWRhcHRhdGlvbl9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxM
OworCisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wgPSBzY3RwX2J1aWxkX3JlYWRx
X2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5hdGlvbiwKKwkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29jLmNvbnRleHQsIDAsIDAsIDAs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ub3RpZnkpOworCWlmIChjb250
cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNjdHBfbV9mcmVlbShtX25vdGlm
eSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0gU0NUUF9CVUZfTEVOKG1fbm90
aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklDQVRJT047CisJLyogbm90IHRo
YXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVmID0gbV9ub3RpZnk7CisJc2N0
cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkgICAgY29udHJvbCwKKwkgICAg
JnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxELCBT
Q1RQX1NPX05PVF9MT0NLRUQpOworfQorCisvKiBUaGlzIGFsd2F5cyBtdXN0IGJlIGNhbGxlZCB3
aXRoIHRoZSByZWFkLXF1ZXVlIExPQ0tFRCBpbiB0aGUgSU5QICovCitzdGF0aWMgdm9pZAorc2N0
cF9ub3RpZnlfcGFydGlhbF9kZWxpdmVyeV9pbmRpY2F0aW9uKHN0cnVjdCBzY3RwX3RjYiAqc3Rj
YiwgdWludDMyX3QgZXJyb3IsCisJCQkJCXVpbnQzMl90IHZhbCwgaW50IHNvX2xvY2tlZAorI2lm
ICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfVU5VU0VECisjZW5kaWYKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCit7CisJc3RydWN0IG1idWYgKm1fbm90
aWZ5OworCXN0cnVjdCBzY3RwX3BkYXBpX2V2ZW50ICpwZGFwaTsKKwlzdHJ1Y3Qgc2N0cF9xdWV1
ZWRfdG9fcmVhZCAqY29udHJvbDsKKwlzdHJ1Y3Qgc29ja2J1ZiAqc2I7CisKKwlpZiAoKHN0Y2Ig
PT0gTlVMTCkgfHwKKwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAs
IHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1BEQVBJRVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJs
ZWQgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFND
VFBfUENCX0ZMQUdTX1NPQ0tFVF9DQU5UX1JFQUQpIHsKKwkJcmV0dXJuOworCX0KKworCW1fbm90
aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVu
dCksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkKKwkJ
Lyogbm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9
IDA7CisJcGRhcGkgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCAqKTsK
KwltZW1zZXQocGRhcGksIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9wZGFwaV9ldmVudCkpOworCXBk
YXBpLT5wZGFwaV90eXBlID0gU0NUUF9QQVJUSUFMX0RFTElWRVJZX0VWRU5UOworCXBkYXBpLT5w
ZGFwaV9mbGFncyA9IDA7CisJcGRhcGktPnBkYXBpX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9wZGFwaV9ldmVudCk7CisJcGRhcGktPnBkYXBpX2luZGljYXRpb24gPSBlcnJvcjsKKwlwZGFw
aS0+cGRhcGlfc3RyZWFtID0gKHZhbCA+PiAxNik7CisJcGRhcGktPnBkYXBpX3NlcSA9ICh2YWwg
JiAweDAwMDBmZmZmKTsKKwlwZGFwaS0+cGRhcGlfYXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lk
KHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9w
ZGFwaV9ldmVudCk7CisJU0NUUF9CVUZfTkVYVChtX25vdGlmeSkgPSBOVUxMOworCWNvbnRyb2wg
PSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiwKKwkJCQkJIDAsIDAsIHN0Y2ItPmFzb2MuY29udGV4dCwgMCwgMCwgMCwKKwkJCQkJIG1f
bm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8qIG5vIG1lbW9yeSAqLworCQlz
Y3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCWNvbnRyb2wtPmxlbmd0aCA9
IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3BlY19mbGFncyA9IE1fTk9USUZJ
Q0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCWNvbnRyb2wtPnRhaWxfbWJ1
ZiA9IG1fbm90aWZ5OworCXNiID0gJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3Y7CisJaWYgKFND
VFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBfU0JfTE9HR0lOR19FTkFC
TEUpIHsKKwkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3Rj
YiwgU0NUUF9MT0dfU0JBTExPQywgU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSk7CisJfQorCXNjdHBf
c2JhbGxvYyhzdGNiLCBzYiwgbV9ub3RpZnkpOworCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfc2Jsb2co
c2IsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxU
LCAwKTsKKwl9CisJY29udHJvbC0+ZW5kX2FkZGVkID0gMTsKKwlpZiAoc3RjYi0+YXNvYy5jb250
cm9sX3BkYXBpKQorCQlUQUlMUV9JTlNFUlRfQUZURVIoJnN0Y2ItPnNjdHBfZXAtPnJlYWRfcXVl
dWUsIHN0Y2ItPmFzb2MuY29udHJvbF9wZGFwaSwgIGNvbnRyb2wsIG5leHQpOworCWVsc2Ugewor
CQkvKiB3ZSByZWFsbHkgc2hvdWxkIG5vdCBzZWUgdGhpcyBjYXNlICovCisJCVRBSUxRX0lOU0VS
VF9UQUlMKCZzdGNiLT5zY3RwX2VwLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwl9CisJ
aWYgKHN0Y2ItPnNjdHBfZXAgJiYgc3RjYi0+c2N0cF9zb2NrZXQpIHsKKwkJLyogVGhpcyBzaG91
bGQgYWx3YXlzIGJlIHRoZSBjYXNlICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmlu
ZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0g
U0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCWlmICghc29fbG9ja2VkKSB7CisJCQlhdG9t
aWNfYWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0
Y2IpOworCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2Ip
OworCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJaWYg
KHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkg
eworCQkJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisJCQkJcmV0dXJuOworCQkJfQorCQl9
CisjZW5kaWYKKwkJc2N0cF9zb3J3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2Nr
ZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQorCQlpZiAoIXNvX2xvY2tlZCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsK
KwkJfQorI2VuZGlmCisJfQorfQorCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfc2h1dGRvd25f
ZXZlbnQoc3RydWN0IHNjdHBfdGNiICpzdGNiKQoreworCXN0cnVjdCBtYnVmICptX25vdGlmeTsK
KwlzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCAqc3NlOworCXN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sOworCisJLyoKKwkgKiBGb3IgVENQIG1vZGVsIEFORCBVRFAgY29ubmVj
dGVkIHNvY2tldHMgd2Ugd2lsbCBzZW5kIGFuIGVycm9yIHVwCisJICogd2hlbiBhbiBTSFVURE9X
TiBjb21wbGV0ZXMKKwkgKi8KKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQ
X1BDQl9GTEFHU19UQ1BUWVBFKSB8fAorCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpKSB7CisJCS8qIG1hcmsgc29ja2V0IGNsb3NlZCBm
b3IgcmVhZC93cml0ZSBhbmQgd2FrZXVwISAqLworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCQlz
byA9IFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+
YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09DS0VU
X0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJhY3Rf
aW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NU
UF9TVEFURV9DTE9TRURfU09DS0VUKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOwor
CQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJc29jYW50c2VuZG1vcmUoc3RjYi0+c2N0cF9zb2Nr
ZXQpOworI2lmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNU
SU5HKQorCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworI2VuZGlmCisJfQorCWlmIChzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVlNIVVRET1dORVZOVCkpIHsKKwkJLyogZXZlbnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJu
OworCX0KKworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qg
c2N0cF9zaHV0ZG93bl9ldmVudCksIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9u
b3RpZnkgPT0gTlVMTCkKKwkJLyogbm8gc3BhY2UgbGVmdCAqLworCQlyZXR1cm47CisJc3NlID0g
bXRvZChtX25vdGlmeSwgc3RydWN0IHNjdHBfc2h1dGRvd25fZXZlbnQgKik7CisJbWVtc2V0KHNz
ZSwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50KSk7CisJc3NlLT5zc2VfdHlw
ZSA9IFNDVFBfU0hVVERPV05fRVZFTlQ7CisJc3NlLT5zc2VfZmxhZ3MgPSAwOworCXNzZS0+c3Nl
X2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCk7CisJc3NlLT5zc2Vf
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90
aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zaHV0ZG93bl9ldmVudCk7CisJU0NUUF9CVUZfTkVY
VChtX25vdGlmeSkgPSBOVUxMOworCisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wg
PSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29j
LmNvbnRleHQsIDAsIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9u
b3RpZnkpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNj
dHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0g
U0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklD
QVRJT047CisJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVm
ID0gbV9ub3RpZnk7CisJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkg
ICAgY29udHJvbCwKKwkgICAgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19yY3YsIDEsIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworfQorCitzdGF0aWMgdm9pZAor
c2N0cF9ub3RpZnlfc2VuZGVyX2RyeV9ldmVudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzb19sb2NrZWQKKyNpZiAhZGVmaW5lZChfX0FQ
UExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfc2VuZGVy
X2RyeV9ldmVudCAqZXZlbnQ7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7
CisKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2Zm
KHN0Y2ItPnNjdHBfZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX0RSWUVWTlQpKSB7CisJCS8qIGV2
ZW50IG5vdCBlbmFibGVkICovCisJCXJldHVybjsKKwl9CisKKwltX25vdGlmeSA9IHNjdHBfZ2V0
X21idWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCksIDAsIE1f
Tk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobV9ub3RpZnkgPT0gTlVMTCkgeworCQkvKiBubyBz
cGFjZSBsZWZ0ICovCisJCXJldHVybjsKKwl9CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IDA7
CisJZXZlbnQgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50ICop
OworCW1lbXNldChldmVudCwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQp
KTsKKwlldmVudC0+c2VuZGVyX2RyeV90eXBlID0gU0NUUF9TRU5ERVJfRFJZX0VWRU5UOworCWV2
ZW50LT5zZW5kZXJfZHJ5X2ZsYWdzID0gMDsKKwlldmVudC0+c2VuZGVyX2RyeV9sZW5ndGggPSBz
aXplb2Yoc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCk7CisJZXZlbnQtPnNlbmRlcl9kcnlf
YXNzb2NfaWQgPSBzY3RwX2dldF9hc3NvY2lkKHN0Y2IpOworCisJU0NUUF9CVUZfTEVOKG1fbm90
aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0cF9zZW5kZXJfZHJ5X2V2ZW50KTsKKwlTQ1RQX0JVRl9O
RVhUKG1fbm90aWZ5KSA9IE5VTEw7CisKKwkvKiBhcHBlbmQgdG8gc29ja2V0ICovCisJY29udHJv
bCA9IHNjdHBfYnVpbGRfcmVhZHFfZW50cnkoc3RjYiwgc3RjYi0+YXNvYy5wcmltYXJ5X2Rlc3Rp
bmF0aW9uLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIDAsIHN0Y2ItPmFz
b2MuY29udGV4dCwgMCwgMCwgMCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBt
X25vdGlmeSk7CisJaWYgKGNvbnRyb2wgPT0gTlVMTCkgeworCQkvKiBubyBtZW1vcnkgKi8KKwkJ
c2N0cF9tX2ZyZWVtKG1fbm90aWZ5KTsKKwkJcmV0dXJuOworCX0KKwljb250cm9sLT5sZW5ndGgg
PSBTQ1RQX0JVRl9MRU4obV9ub3RpZnkpOworCWNvbnRyb2wtPnNwZWNfZmxhZ3MgPSBNX05PVElG
SUNBVElPTjsKKwkvKiBub3QgdGhhdCB3ZSBuZWVkIHRoaXMgKi8KKwljb250cm9sLT50YWlsX21i
dWYgPSBtX25vdGlmeTsKKwlzY3RwX2FkZF90b19yZWFkcShzdGNiLT5zY3RwX2VwLCBzdGNiLCBj
b250cm9sLAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2LCAx
LCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgc29fbG9ja2VkKTsKK30KKworCit2b2lkCitzY3Rw
X25vdGlmeV9zdHJlYW1fcmVzZXRfYWRkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3Qg
bnVtYmVyaW4sIHVpbnQxNl90IG51bWJlcm91dCwgaW50IGZsYWcpCit7CisJc3RydWN0IG1idWYg
Km1fbm90aWZ5OworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250cm9sOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQgKnN0cmFkZDsKKworCWlmICgoc3RjYiA9PSBOVUxM
KSB8fAorCSAgICAoc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBfZXAsIHN0Y2Is
IFNDVFBfUENCX0ZMQUdTX1NUUkVBTV9DSEFOR0VFVk5UKSkpIHsKKwkJLyogZXZlbnQgbm90IGVu
YWJsZWQgKi8KKwkJcmV0dXJuOworCX0KKwlpZiAoKHN0Y2ItPmFzb2MucGVlcl9yZXFfb3V0KSAm
JiBmbGFnKSB7CisJCS8qIFBlZXIgbWFkZSB0aGUgcmVxdWVzdCwgZG9uJ3QgdGVsbCB0aGUgbG9j
YWwgdXNlciAqLworCQlzdGNiLT5hc29jLnBlZXJfcmVxX291dCA9IDA7CisJCXJldHVybjsKKwl9
CisJc3RjYi0+YXNvYy5wZWVyX3JlcV9vdXQgPSAwOworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1
Zl9mb3JfbXNnKHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50KSwgMCwgTV9O
T1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBzcGFj
ZSBsZWZ0ICovCisJCXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwlzdHJh
ZGQgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50ICopOwor
CW1lbXNldChzdHJhZGQsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50
KSk7CisJc3RyYWRkLT5zdHJjaGFuZ2VfdHlwZSA9IFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVDsK
KwlzdHJhZGQtPnN0cmNoYW5nZV9mbGFncyA9IGZsYWc7CisJc3RyYWRkLT5zdHJjaGFuZ2VfbGVu
Z3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3N0cmVhbV9jaGFuZ2VfZXZlbnQpOworCXN0cmFkZC0+
c3RyY2hhbmdlX2Fzc29jX2lkID0gc2N0cF9nZXRfYXNzb2NpZChzdGNiKTsKKwlzdHJhZGQtPnN0
cmNoYW5nZV9pbnN0cm1zID0gbnVtYmVyaW47CisJc3RyYWRkLT5zdHJjaGFuZ2Vfb3V0c3RybXMg
PSBudW1iZXJvdXQ7CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNpemVvZihzdHJ1Y3Qgc2N0
cF9zdHJlYW1fY2hhbmdlX2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5KSA9IE5VTEw7
CisJaWYgKHNjdHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29ja2V0LT5zb19y
Y3YpIDwgU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSkgeworCQkvKiBubyBzcGFjZSAqLworCQlzY3Rw
X21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCS8qIGFwcGVuZCB0byBzb2NrZXQg
Ki8KKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5hc29jLnBy
aW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwg
MCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8qIG5vIG1l
bW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCWNvbnRy
b2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+c3BlY19mbGFn
cyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAqLworCWNvbnRy
b2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsCisJICAgIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tldC0+c29fcmN2
LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKK30KKwor
dm9pZAorc2N0cF9ub3RpZnlfc3RyZWFtX3Jlc2V0X3RzbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2Is
IHVpbnQzMl90IHNlbmRpbmdfdHNuLCB1aW50MzJfdCByZWN2X3RzbiwgaW50IGZsYWcpCit7CisJ
c3RydWN0IG1idWYgKm1fbm90aWZ5OworCXN0cnVjdCBzY3RwX3F1ZXVlZF90b19yZWFkICpjb250
cm9sOworCXN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50ICpzdHJhc29jOworCisJaWYgKChz
dGNiID09IE5VTEwpIHx8CisJICAgIChzY3RwX3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0
cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1NfQVNTT0NfUkVTRVRFVk5UKSkpIHsKKwkJLyogZXZl
bnQgbm90IGVuYWJsZWQgKi8KKwkJcmV0dXJuOworCX0KKwltX25vdGlmeSA9IHNjdHBfZ2V0X21i
dWZfZm9yX21zZyhzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQpLCAwLCBNX05P
V0FJVCwgMSwgTVRfREFUQSk7CisJaWYgKG1fbm90aWZ5ID09IE5VTEwpCisJCS8qIG5vIHNwYWNl
IGxlZnQgKi8KKwkJcmV0dXJuOworCVNDVFBfQlVGX0xFTihtX25vdGlmeSkgPSAwOworCXN0cmFz
b2MgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgKik7CisJ
bWVtc2V0KHN0cmFzb2MsIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCkp
OworCXN0cmFzb2MtPmFzc29jcmVzZXRfdHlwZSA9IFNDVFBfQVNTT0NfUkVTRVRfRVZFTlQ7CisJ
c3RyYXNvYy0+YXNzb2NyZXNldF9mbGFncyA9IGZsYWc7CisJc3RyYXNvYy0+YXNzb2NyZXNldF9s
ZW5ndGggPSBzaXplb2Yoc3RydWN0IHNjdHBfYXNzb2NfcmVzZXRfZXZlbnQpOworCXN0cmFzb2Mt
PmFzc29jcmVzZXRfYXNzb2NfaWQ9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7CisJc3RyYXNvYy0+
YXNzb2NyZXNldF9sb2NhbF90c24gPSBzZW5kaW5nX3RzbjsKKwlzdHJhc29jLT5hc3NvY3Jlc2V0
X3JlbW90ZV90c24gPSByZWN2X3RzbjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gc2l6ZW9m
KHN0cnVjdCBzY3RwX2Fzc29jX3Jlc2V0X2V2ZW50KTsKKwlTQ1RQX0JVRl9ORVhUKG1fbm90aWZ5
KSA9IE5VTEw7CisJaWYgKHNjdHBfc2JzcGFjZSgmc3RjYi0+YXNvYywgJnN0Y2ItPnNjdHBfc29j
a2V0LT5zb19yY3YpIDwgU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSkgeworCQkvKiBubyBzcGFjZSAq
LworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJfQorCS8qIGFwcGVuZCB0
byBzb2NrZXQgKi8KKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNi
LT5hc29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJ
CS8qIG5vIG1lbW9yeSAqLworCQlzY3RwX21fZnJlZW0obV9ub3RpZnkpOworCQlyZXR1cm47CisJ
fQorCWNvbnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJY29udHJvbC0+
c3BlY19mbGFncyA9IE1fTk9USUZJQ0FUSU9OOworCS8qIG5vdCB0aGF0IHdlIG5lZWQgdGhpcyAq
LworCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCXNjdHBfYWRkX3RvX3JlYWRxKHN0
Y2ItPnNjdHBfZXAsIHN0Y2IsCisJICAgIGNvbnRyb2wsCisJICAgICZzdGNiLT5zY3RwX3NvY2tl
dC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1RfTE9DS0VE
KTsKK30KKworCisKK3N0YXRpYyB2b2lkCitzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RydWN0
IHNjdHBfdGNiICpzdGNiLAorICAgIGludCBudW1iZXJfZW50cmllcywgdWludDE2X3QgKiBsaXN0
LCBpbnQgZmxhZykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfcXVl
dWVkX3RvX3JlYWQgKmNvbnRyb2w7CisJc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50ICpz
dHJyZXNldDsKKwlpbnQgbGVuOworCisJaWYgKChzdGNiID09IE5VTEwpIHx8CisJICAgIChzY3Rw
X3N0Y2JfaXNfZmVhdHVyZV9vZmYoc3RjYi0+c2N0cF9lcCwgc3RjYiwgU0NUUF9QQ0JfRkxBR1Nf
U1RSRUFNX1JFU0VURVZOVCkpKSB7CisJCS8qIGV2ZW50IG5vdCBlbmFibGVkICovCisJCXJldHVy
bjsKKwl9CisKKwltX25vdGlmeSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhNQ0xCWVRFUywgMCwg
TV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKQorCQkvKiBubyBz
cGFjZSBsZWZ0ICovCisJCXJldHVybjsKKwlTQ1RQX0JVRl9MRU4obV9ub3RpZnkpID0gMDsKKwls
ZW4gPSBzaXplb2Yoc3RydWN0IHNjdHBfc3RyZWFtX3Jlc2V0X2V2ZW50KSArIChudW1iZXJfZW50
cmllcyAqIHNpemVvZih1aW50MTZfdCkpOworCWlmIChsZW4gPiBNX1RSQUlMSU5HU1BBQ0UobV9u
b3RpZnkpKSB7CisJCS8qIG5ldmVyIGVub3VnaCByb29tICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJc3RycmVzZXQgPSBtdG9kKG1fbm90aWZ5LCBzdHJ1Y3Qg
c2N0cF9zdHJlYW1fcmVzZXRfZXZlbnQgKik7CisJbWVtc2V0KHN0cnJlc2V0LCAwLCBsZW4pOwor
CXN0cnJlc2V0LT5zdHJyZXNldF90eXBlID0gU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQ7CisJc3Ry
cmVzZXQtPnN0cnJlc2V0X2ZsYWdzID0gZmxhZzsKKwlzdHJyZXNldC0+c3RycmVzZXRfbGVuZ3Ro
ID0gbGVuOworCXN0cnJlc2V0LT5zdHJyZXNldF9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQo
c3RjYik7CisJaWYgKG51bWJlcl9lbnRyaWVzKSB7CisJCWludCBpOworCisJCWZvciAoaSA9IDA7
IGkgPCBudW1iZXJfZW50cmllczsgaSsrKSB7CisJCQlzdHJyZXNldC0+c3RycmVzZXRfc3RyZWFt
X2xpc3RbaV0gPSBudG9ocyhsaXN0W2ldKTsKKwkJfQorCX0KKwlTQ1RQX0JVRl9MRU4obV9ub3Rp
ZnkpID0gbGVuOworCVNDVFBfQlVGX05FWFQobV9ub3RpZnkpID0gTlVMTDsKKwlpZiAoc2N0cF9z
YnNwYWNlKCZzdGNiLT5hc29jLCAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdikgPCBTQ1RQX0JV
Rl9MRU4obV9ub3RpZnkpKSB7CisJCS8qIG5vIHNwYWNlICovCisJCXNjdHBfbV9mcmVlbShtX25v
dGlmeSk7CisJCXJldHVybjsKKwl9CisJLyogYXBwZW5kIHRvIHNvY2tldCAqLworCWNvbnRyb2wg
PSBzY3RwX2J1aWxkX3JlYWRxX2VudHJ5KHN0Y2IsIHN0Y2ItPmFzb2MucHJpbWFyeV9kZXN0aW5h
dGlvbiwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwLCBzdGNiLT5hc29j
LmNvbnRleHQsIDAsIDAsIDAsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9u
b3RpZnkpOworCWlmIChjb250cm9sID09IE5VTEwpIHsKKwkJLyogbm8gbWVtb3J5ICovCisJCXNj
dHBfbV9mcmVlbShtX25vdGlmeSk7CisJCXJldHVybjsKKwl9CisJY29udHJvbC0+bGVuZ3RoID0g
U0NUUF9CVUZfTEVOKG1fbm90aWZ5KTsKKwljb250cm9sLT5zcGVjX2ZsYWdzID0gTV9OT1RJRklD
QVRJT047CisJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJY29udHJvbC0+dGFpbF9tYnVm
ID0gbV9ub3RpZnk7CisJc2N0cF9hZGRfdG9fcmVhZHEoc3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkg
ICAgICAgICAgICAgICAgICBjb250cm9sLAorCSAgICAgICAgICAgICAgICAgICZzdGNiLT5zY3Rw
X3NvY2tldC0+c29fcmN2LCAxLCBTQ1RQX1JFQURfTE9DS19OT1RfSEVMRCwgU0NUUF9TT19OT1Rf
TE9DS0VEKTsKK30KKworCitzdGF0aWMgdm9pZAorc2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9yKHN0
cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3QgZXJyb3IsIHN0cnVjdCBzY3RwX2Vycm9yX2No
dW5rICpjaHVuaykKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbV9ub3RpZnk7CisJc3RydWN0IHNjdHBfcmVt
b3RlX2Vycm9yICpzcmU7CisJc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2w7CisJ
dW5zaWduZWQgaW50IG5vdGlmX2xlbjsKKwl1aW50MTZfdCBjaHVua19sZW47CisKKwlpZiAoKHN0
Y2IgPT0gTlVMTCkgfHwKKwkgICAgc2N0cF9zdGNiX2lzX2ZlYXR1cmVfb2ZmKHN0Y2ItPnNjdHBf
ZXAsIHN0Y2IsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZQRUVSRVJSKSkgeworCQlyZXR1cm47CisJfQor
CWlmIChjaHVuayAhPSBOVUxMKSB7CisJCWNodW5rX2xlbiA9IG50b2hzKGNodW5rLT5jaC5jaHVu
a19sZW5ndGgpOworCQkvKgorCQkgKiBPbmx5IFNDVFBfQ0hVTktfQlVGRkVSX1NJWkUgYXJlIGd1
YXJhbnRlZWQgdG8gYmUKKwkJICogY29udGlndW91cy4KKwkJICovCisJCWlmIChjaHVua19sZW4g
PiBTQ1RQX0NIVU5LX0JVRkZFUl9TSVpFKSB7CisJCQljaHVua19sZW4gPSBTQ1RQX0NIVU5LX0JV
RkZFUl9TSVpFOworCQl9CisJfSBlbHNlIHsKKwkJY2h1bmtfbGVuID0gMDsKKwl9CisJbm90aWZf
bGVuID0gKHVuc2lnbmVkIGludCkoc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcikgKyBj
aHVua19sZW4pOworCW1fbm90aWZ5ID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKG5vdGlmX2xlbiwg
MCwgTV9OT1dBSVQsIDEsIE1UX0RBVEEpOworCWlmIChtX25vdGlmeSA9PSBOVUxMKSB7CisJCS8q
IFJldHJ5IHdpdGggc21hbGxlciB2YWx1ZS4gKi8KKwkJbm90aWZfbGVuID0gKHVuc2lnbmVkIGlu
dClzaXplb2Yoc3RydWN0IHNjdHBfcmVtb3RlX2Vycm9yKTsKKwkJbV9ub3RpZnkgPSBzY3RwX2dl
dF9tYnVmX2Zvcl9tc2cobm90aWZfbGVuLCAwLCBNX05PV0FJVCwgMSwgTVRfREFUQSk7CisJCWlm
IChtX25vdGlmeSA9PSBOVUxMKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisJU0NUUF9CVUZfTkVY
VChtX25vdGlmeSkgPSBOVUxMOworCXNyZSA9IG10b2QobV9ub3RpZnksIHN0cnVjdCBzY3RwX3Jl
bW90ZV9lcnJvciAqKTsKKwltZW1zZXQoc3JlLCAwLCBub3RpZl9sZW4pOworCXNyZS0+c3JlX3R5
cGUgPSBTQ1RQX1JFTU9URV9FUlJPUjsKKwlzcmUtPnNyZV9mbGFncyA9IDA7CisJc3JlLT5zcmVf
bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzY3RwX3JlbW90ZV9lcnJvcik7CisJc3JlLT5zcmVfZXJy
b3IgPSBlcnJvcjsKKwlzcmUtPnNyZV9hc3NvY19pZCA9IHNjdHBfZ2V0X2Fzc29jaWQoc3RjYik7
CisJaWYgKG5vdGlmX2xlbiA+IHNpemVvZihzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3IpKSB7CisJ
CW1lbWNweShzcmUtPnNyZV9kYXRhLCBjaHVuaywgY2h1bmtfbGVuKTsKKwkJc3JlLT5zcmVfbGVu
Z3RoICs9IGNodW5rX2xlbjsKKwl9CisJU0NUUF9CVUZfTEVOKG1fbm90aWZ5KSA9IHNyZS0+c3Jl
X2xlbmd0aDsKKwljb250cm9sID0gc2N0cF9idWlsZF9yZWFkcV9lbnRyeShzdGNiLCBzdGNiLT5h
c29jLnByaW1hcnlfZGVzdGluYXRpb24sCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgMCwgMCwgc3RjYi0+YXNvYy5jb250ZXh0LCAwLCAwLCAwLAorCSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbm90aWZ5KTsKKwlpZiAoY29udHJvbCAhPSBOVUxMKSB7CisJCWNv
bnRyb2wtPmxlbmd0aCA9IFNDVFBfQlVGX0xFTihtX25vdGlmeSk7CisJCWNvbnRyb2wtPnNwZWNf
ZmxhZ3MgPSBNX05PVElGSUNBVElPTjsKKwkJLyogbm90IHRoYXQgd2UgbmVlZCB0aGlzICovCisJ
CWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fbm90aWZ5OworCQlzY3RwX2FkZF90b19yZWFkcShzdGNi
LT5zY3RwX2VwLCBzdGNiLAorCQkgICAgICAgICAgICAgICAgICBjb250cm9sLAorCQkgICAgICAg
ICAgICAgICAgICAmc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3JjdiwgMSwKKwkJCQkgIFNDVFBfUkVB
RF9MT0NLX05PVF9IRUxELCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCX0gZWxzZSB7CisJCXNjdHBf
bV9mcmVlbShtX25vdGlmeSk7CisJfQorfQorCisKK3ZvaWQKK3NjdHBfdWxwX25vdGlmeSh1aW50
MzJfdCBub3RpZmljYXRpb24sIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICB1aW50MzJfdCBl
cnJvciwgdm9pZCAqZGF0YSwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRp
ZgorICAgICkKK3sKKwlpZiAoKHN0Y2IgPT0gTlVMTCkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2It
PnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwK
KwkgICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpKSB7CisJ
CS8qIElmIHRoZSBzb2NrZXQgaXMgZ29uZSB3ZSBhcmUgb3V0IG9mIGhlcmUgKi8KKwkJcmV0dXJu
OworCX0KKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1
MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5z
b19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpIHsKKyNlbHNlCisJaWYgKHN0Y2ItPnNj
dHBfc29ja2V0LT5zb19zdGF0ZSAmIFNTX0NBTlRSQ1ZNT1JFKSB7CisjZW5kaWYKKwkJcmV0dXJu
OworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBf
bG9ja19hc3NlcnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0gZWxzZSB7CisJCXNj
dHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfQorI2VuZGlm
CisJaWYgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkg
ICAgKHN0Y2ItPmFzb2Muc3RhdGUgJiAgU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQlp
ZiAoKG5vdGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTikgfHwKKwkJICAg
IChub3RpZmljYXRpb24gPT0gU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQKSB8fAorCQkgICAgKG5v
dGlmaWNhdGlvbiA9PSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfQ09ORklSTUVEKSkgeworCQkJLyog
RG9uJ3QgcmVwb3J0IHRoZXNlIGluIGZyb250IHN0YXRlcyAqLworCQkJcmV0dXJuOworCQl9CisJ
fQorCXN3aXRjaCAobm90aWZpY2F0aW9uKSB7CisJY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19VUDoK
KwkJaWYgKHN0Y2ItPmFzb2MuYXNzb2NfdXBfc2VudCA9PSAwKSB7CisJCQlzY3RwX25vdGlmeV9h
c3NvY19jaGFuZ2UoU0NUUF9DT01NX1VQLCBzdGNiLCBlcnJvciwgTlVMTCwgMCwgc29fbG9ja2Vk
KTsKKwkJCXN0Y2ItPmFzb2MuYXNzb2NfdXBfc2VudCA9IDE7CisJCX0KKwkJaWYgKHN0Y2ItPmFz
b2MuYWRhcHRhdGlvbl9uZWVkZWQgJiYgKHN0Y2ItPmFzb2MuYWRhcHRhdGlvbl9zZW50ID09IDAp
KSB7CisJCQlzY3RwX25vdGlmeV9hZGFwdGF0aW9uX2xheWVyKHN0Y2IpOworCQl9CisJCWlmIChz
dGNiLT5hc29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQ
X05PVElGWV9OT19QRUVSX0FVVEgsIHN0Y2IsIDAsCisJCQkgICAgICAgICAgICAgICAgTlVMTCwg
c29fbG9ja2VkKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX0RPV046
CisJCXNjdHBfbm90aWZ5X2Fzc29jX2NoYW5nZShTQ1RQX1NIVVRET1dOX0NPTVAsIHN0Y2IsIGVy
cm9yLCBOVUxMLCAwLCBzb19sb2NrZWQpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJ
aWYgKHN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2spIHsKKwkJCWlmIChzdGNiLT5zY3RwX3Nv
Y2tldCkgeworCQkJCXVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHI7CisJCQkJc3RydWN0IHNjdHBf
cmN2aW5mbyByY3Y7CisKKwkJCQltZW1zZXQoJmFkZHIsIDAsIHNpemVvZih1bmlvbiBzY3RwX3Nv
Y2tzdG9yZSkpOworCQkJCW1lbXNldCgmcmN2LCAwLCBzaXplb2Yoc3RydWN0IHNjdHBfcmN2aW5m
bykpOworCQkJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQkJU0NU
UF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCXN0Y2ItPnNjdHBfZXAtPnJlY3ZfY2FsbGJhY2soc3Rj
Yi0+c2N0cF9zb2NrZXQsIGFkZHIsIE5VTEwsIDAsIHJjdiwgMCwgc3RjYi0+c2N0cF9lcC0+dWxw
X2luZm8pOworCQkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCQkJYXRvbWljX3N1YnRyYWN0X2lu
dCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJfQorCQl9CisjZW5kaWYKKwkJYnJlYWs7CisJ
Y2FzZSBTQ1RQX05PVElGWV9JTlRFUkZBQ0VfRE9XTjoKKwkJeworCQkJc3RydWN0IHNjdHBfbmV0
cyAqbmV0OworCisJCQluZXQgPSAoc3RydWN0IHNjdHBfbmV0cyAqKWRhdGE7CisJCQlzY3RwX25v
dGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9VTlJFQUNIQUJMRSwKKwkJCSAg
ICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgZXJyb3IsIHNvX2xvY2tlZCk7
CisJCQlicmVhazsKKwkJfQorCWNhc2UgU0NUUF9OT1RJRllfSU5URVJGQUNFX1VQOgorCQl7CisJ
CQlzdHJ1Y3Qgc2N0cF9uZXRzICpuZXQ7CisKKwkJCW5ldCA9IChzdHJ1Y3Qgc2N0cF9uZXRzICop
ZGF0YTsKKwkJCXNjdHBfbm90aWZ5X3BlZXJfYWRkcl9jaGFuZ2Uoc3RjYiwgU0NUUF9BRERSX0FW
QUlMQUJMRSwKKwkJCSAgICAoc3RydWN0IHNvY2thZGRyICopJm5ldC0+cm8uX2xfYWRkciwgZXJy
b3IsIHNvX2xvY2tlZCk7CisJCQlicmVhazsKKwkJfQorCWNhc2UgU0NUUF9OT1RJRllfSU5URVJG
QUNFX0NPTkZJUk1FRDoKKwkJeworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCisJCQluZXQg
PSAoc3RydWN0IHNjdHBfbmV0cyAqKWRhdGE7CisJCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hh
bmdlKHN0Y2IsIFNDVFBfQUREUl9DT05GSVJNRUQsCisJCQkgICAgKHN0cnVjdCBzb2NrYWRkciAq
KSZuZXQtPnJvLl9sX2FkZHIsIGVycm9yLCBzb19sb2NrZWQpOworCQkJYnJlYWs7CisJCX0KKwlj
YXNlIFNDVFBfTk9USUZZX1NQRUNJQUxfU1BfRkFJTDoKKwkJc2N0cF9ub3RpZnlfc2VuZF9mYWls
ZWQyKHN0Y2IsIGVycm9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzY3Rw
X3N0cmVhbV9xdWV1ZV9wZW5kaW5nICopZGF0YSwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2Fz
ZSBTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUw6CisJCXNjdHBfbm90aWZ5X3NlbmRfZmFpbGVkKHN0
Y2IsIDEsIGVycm9yLAorCQkgICAgKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19s
b2NrZWQpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1VOU0VOVF9ER19GQUlMOgorCQlz
Y3RwX25vdGlmeV9zZW5kX2ZhaWxlZChzdGNiLCAwLCBlcnJvciwKKwkJICAgICAgICAgICAgICAg
ICAgICAgICAgKHN0cnVjdCBzY3RwX3RtaXRfY2h1bmsgKilkYXRhLCBzb19sb2NrZWQpOworCQli
cmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1BBUlRJQUxfREVMVklFUllfSU5ESUNBVElPTjoKKwkJ
eworCQkJdWludDMyX3QgdmFsOworCQkJdmFsID0gKigodWludDMyX3QgKilkYXRhKTsKKworCQkJ
c2N0cF9ub3RpZnlfcGFydGlhbF9kZWxpdmVyeV9pbmRpY2F0aW9uKHN0Y2IsIGVycm9yLCB2YWws
IHNvX2xvY2tlZCk7CisJCWJyZWFrOworCQl9CisJY2FzZSBTQ1RQX05PVElGWV9BU1NPQ19MT0Nf
QUJPUlRFRDoKKwkJaWYgKCgoc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfTUFTSykgPT0g
U0NUUF9TVEFURV9DT09LSUVfV0FJVCkgfHwKKwkJICAgICgoc3RjYi0+YXNvYy5zdGF0ZSAmIFND
VFBfU1RBVEVfTUFTSykgPT0gU0NUUF9TVEFURV9DT09LSUVfRUNIT0VEKSkgeworCQkJc2N0cF9u
b3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBfQ0FOVF9TVFJfQVNTT0MsIHN0Y2IsIGVycm9yLCBkYXRh
LCAwLCBzb19sb2NrZWQpOworCQl9IGVsc2UgeworCQkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdl
KFNDVFBfQ09NTV9MT1NULCBzdGNiLCBlcnJvciwgZGF0YSwgMCwgc29fbG9ja2VkKTsKKwkJfQor
CQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTU09DX1JFTV9BQk9SVEVEOgorCQlpZiAoKChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKSA9PSBTQ1RQX1NUQVRFX0NPT0tJRV9X
QUlUKSB8fAorCQkgICAgKChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9NQVNLKSA9PSBT
Q1RQX1NUQVRFX0NPT0tJRV9FQ0hPRUQpKSB7CisJCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2Uo
U0NUUF9DQU5UX1NUUl9BU1NPQywgc3RjYiwgZXJyb3IsIGRhdGEsIDEsIHNvX2xvY2tlZCk7CisJ
CX0gZWxzZSB7CisJCQlzY3RwX25vdGlmeV9hc3NvY19jaGFuZ2UoU0NUUF9DT01NX0xPU1QsIHN0
Y2IsIGVycm9yLCBkYXRhLCAxLCBzb19sb2NrZWQpOworCQl9CisJCWJyZWFrOworCWNhc2UgU0NU
UF9OT1RJRllfQVNTT0NfUkVTVEFSVDoKKwkJc2N0cF9ub3RpZnlfYXNzb2NfY2hhbmdlKFNDVFBf
UkVTVEFSVCwgc3RjYiwgZXJyb3IsIE5VTEwsIDAsIHNvX2xvY2tlZCk7CisJCWlmIChzdGNiLT5h
c29jLmF1dGhfc3VwcG9ydGVkID09IDApIHsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElG
WV9OT19QRUVSX0FVVEgsIHN0Y2IsIDAsCisJCQkgICAgICAgICAgICAgICAgTlVMTCwgc29fbG9j
a2VkKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9TRU5EOgor
CQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0
YSksIFNDVFBfU1RSRUFNX1JFU0VUX09VVEdPSU5HX1NTTik7CisJCWJyZWFrOworCWNhc2UgU0NU
UF9OT1RJRllfU1RSX1JFU0VUX1JFQ1Y6CisJCXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdGNi
LCBlcnJvciwgKCh1aW50MTZfdCAqKSBkYXRhKSwgU0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkcp
OworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfT1VUOgorCQlz
Y3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSks
CisJCSAgICAgICAgICAgICAgICAgICAgICAgICAoU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdf
U1NOfFNDVFBfU1RSRUFNX1JFU0VUX0ZBSUxFRCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9U
SUZZX1NUUl9SRVNFVF9ERU5JRURfT1VUOgorCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3Rj
YiwgZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCisJCSAgICAgICAgICAgICAgICAgICAgICAg
ICAoU0NUUF9TVFJFQU1fUkVTRVRfT1VUR09JTkdfU1NOfFNDVFBfU1RSRUFNX1JFU0VUX0RFTklF
RCkpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1NUUl9SRVNFVF9GQUlMRURfSU46CisJ
CXNjdHBfbm90aWZ5X3N0cmVhbV9yZXNldChzdGNiLCBlcnJvciwgKCh1aW50MTZfdCAqKSBkYXRh
KSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgIChTQ1RQX1NUUkVBTV9SRVNFVF9JTkNPTUlO
R3xTQ1RQX1NUUkVBTV9SRVNFVF9GQUlMRUQpKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElG
WV9TVFJfUkVTRVRfREVOSUVEX0lOOgorCQlzY3RwX25vdGlmeV9zdHJlYW1fcmVzZXQoc3RjYiwg
ZXJyb3IsICgodWludDE2X3QgKikgZGF0YSksCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAo
U0NUUF9TVFJFQU1fUkVTRVRfSU5DT01JTkd8U0NUUF9TVFJFQU1fUkVTRVRfREVOSUVEKSk7CisJ
CWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfQVNDT05GX0FERF9JUDoKKwkJc2N0cF9ub3RpZnlf
cGVlcl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfQURERUQsIGRhdGEsCisJCSAgICBlcnJv
ciwgc29fbG9ja2VkKTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX05PVElGWV9BU0NPTkZfREVMRVRF
X0lQOgorCQlzY3RwX25vdGlmeV9wZWVyX2FkZHJfY2hhbmdlKHN0Y2IsIFNDVFBfQUREUl9SRU1P
VkVELCBkYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2Nr
ZWQpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FTQ09ORl9TRVRfUFJJTUFSWToKKwkJ
c2N0cF9ub3RpZnlfcGVlcl9hZGRyX2NoYW5nZShzdGNiLCBTQ1RQX0FERFJfTUFERV9QUklNLCBk
YXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yLCBzb19sb2NrZWQpOwor
CQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX1BFRVJfU0hVVERPV046CisJCXNjdHBfbm90aWZ5
X3NodXRkb3duX2V2ZW50KHN0Y2IpOworCQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FVVEhf
TkVXX0tFWToKKwkJc2N0cF9ub3RpZnlfYXV0aGVudGljYXRpb24oc3RjYiwgU0NUUF9BVVRIX05F
V19LRVksIGVycm9yLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAodWludDE2X3QpKHVp
bnRwdHJfdClkYXRhLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBzb19sb2NrZWQpOwor
CQlicmVhazsKKwljYXNlIFNDVFBfTk9USUZZX0FVVEhfRlJFRV9LRVk6CisJCXNjdHBfbm90aWZ5
X2F1dGhlbnRpY2F0aW9uKHN0Y2IsIFNDVFBfQVVUSF9GUkVFX0tFWSwgZXJyb3IsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICh1aW50MTZfdCkodWludHB0cl90KWRhdGEsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNvX2xvY2tlZCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9O
T1RJRllfTk9fUEVFUl9BVVRIOgorCQlzY3RwX25vdGlmeV9hdXRoZW50aWNhdGlvbihzdGNiLCBT
Q1RQX0FVVEhfTk9fQVVUSCwgZXJyb3IsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICh1
aW50MTZfdCkodWludHB0cl90KWRhdGEsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNv
X2xvY2tlZCk7CisJCWJyZWFrOworCWNhc2UgU0NUUF9OT1RJRllfU0VOREVSX0RSWToKKwkJc2N0
cF9ub3RpZnlfc2VuZGVyX2RyeV9ldmVudChzdGNiLCBzb19sb2NrZWQpOworCQlicmVhazsKKwlj
YXNlIFNDVFBfTk9USUZZX1JFTU9URV9FUlJPUjoKKwkJc2N0cF9ub3RpZnlfcmVtb3RlX2Vycm9y
KHN0Y2IsIGVycm9yLCBkYXRhKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VUSUwxLCAiJXM6IHVua25vd24gbm90aWZpY2F0aW9uICV4aCAoJXUpXG4iLAorCQkJ
X19mdW5jX18sIG5vdGlmaWNhdGlvbiwgbm90aWZpY2F0aW9uKTsKKwkJYnJlYWs7CisJfQkJCS8q
IGVuZCBzd2l0Y2ggKi8KK30KKwordm9pZAorc2N0cF9yZXBvcnRfYWxsX291dGJvdW5kKHN0cnVj
dCBzY3RwX3RjYiAqc3RjYiwgdWludDE2X3QgZXJyb3IsIGludCBob2xkc19sb2NrLCBpbnQgc29f
bG9ja2VkCisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tf
VEVTVElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKQoreworCXN0cnVjdCBzY3Rw
X2Fzc29jaWF0aW9uICphc29jOworCXN0cnVjdCBzY3RwX3N0cmVhbV9vdXQgKm91dHM7CisJc3Ry
dWN0IHNjdHBfdG1pdF9jaHVuayAqY2hrLCAqbmNoazsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fcXVl
dWVfcGVuZGluZyAqc3AsICpuc3A7CisJaW50IGk7CisKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJ
CXJldHVybjsKKwl9CisJYXNvYyA9ICZzdGNiLT5hc29jOworCWlmIChhc29jLT5zdGF0ZSAmIFND
VFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJLyogYWxyZWFkeSBiZWluZyBmcmVlZCAq
LworCQlyZXR1cm47CisJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQp
IHsKKwkJc2N0cF9sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfSBl
bHNlIHsKKwkJc2N0cF91bmxvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsK
Kwl9CisjZW5kaWYKKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBT
Q1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkgfHwKKwkgICAgKGFzb2MtPnN0YXRlICYgU0NU
UF9TVEFURV9DTE9TRURfU09DS0VUKSkgeworCQlyZXR1cm47CisJfQorCS8qIG5vdyB0aHJvdWdo
IGFsbCB0aGUgZ3VuayBmcmVlaW5nIGNodW5rcyAqLworCWlmIChob2xkc19sb2NrID09IDApIHsK
KwkJU0NUUF9UQ0JfU0VORF9MT0NLKHN0Y2IpOworCX0KKwkvKiBzZW50IHF1ZXVlIFNIT1VMRCBi
ZSBlbXB0eSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW50X3F1ZXVlLCBz
Y3RwX25leHQsIG5jaGspIHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW50X3F1ZXVlLCBjaGss
IHNjdHBfbmV4dCk7CisJCWFzb2MtPnNlbnRfcXVldWVfY250LS07CisJCWlmIChjaGstPnNlbnQg
IT0gU0NUUF9EQVRBR1JBTV9OUl9BQ0tFRCkgeworCQkJaWYgKGFzb2MtPnN0cm1vdXRbY2hrLT5y
ZWMuZGF0YS5zaWRdLmNodW5rc19vbl9xdWV1ZXMgPiAwKSB7CisJCQkJYXNvYy0+c3RybW91dFtj
aGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCX0gZWxzZSB7CisJCQkJcGFuaWMoIk5vIGNodW5rcyBvbiB0aGUgcXVldWVzIGZvciBzaWQg
JXUuIiwgY2hrLT5yZWMuZGF0YS5zaWQpOworI2VuZGlmCisJCQl9CisJCX0KKwkJaWYgKGNoay0+
ZGF0YSAhPSBOVUxMKSB7CisJCQlzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgY2hrLCAx
KTsKKwkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsCisJ
CQkgICAgICAgICAgICAgICAgZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKKwkJCWlmIChjaGstPmRh
dGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQljaGstPmRhdGEgPSBOVUxM
OworCQkJfQorCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywgc29fbG9ja2VkKTsK
KwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJLyogcGVuZGluZyBzZW5kIHF1ZXVl
IFNIT1VMRCBiZSBlbXB0eSAqLworCVRBSUxRX0ZPUkVBQ0hfU0FGRShjaGssICZhc29jLT5zZW5k
X3F1ZXVlLCBzY3RwX25leHQsIG5jaGspIHsKKwkJVEFJTFFfUkVNT1ZFKCZhc29jLT5zZW5kX3F1
ZXVlLCBjaGssIHNjdHBfbmV4dCk7CisJCWFzb2MtPnNlbmRfcXVldWVfY250LS07CisJCWlmIChh
c29jLT5zdHJtb3V0W2Noay0+cmVjLmRhdGEuc2lkXS5jaHVua3Nfb25fcXVldWVzID4gMCkgewor
CQkJYXNvYy0+c3RybW91dFtjaGstPnJlYy5kYXRhLnNpZF0uY2h1bmtzX29uX3F1ZXVlcy0tOwor
I2lmZGVmIElOVkFSSUFOVFMKKwkJfSBlbHNlIHsKKwkJCXBhbmljKCJObyBjaHVua3Mgb24gdGhl
IHF1ZXVlcyBmb3Igc2lkICV1LiIsIGNoay0+cmVjLmRhdGEuc2lkKTsKKyNlbmRpZgorCQl9CisJ
CWlmIChjaGstPmRhdGEgIT0gTlVMTCkgeworCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsIGFz
b2MsIGNoaywgMSk7CisJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllfVU5TRU5UX0RHX0ZB
SUwsIHN0Y2IsCisJCQkgICAgICAgICAgICAgICAgZXJyb3IsIGNoaywgc29fbG9ja2VkKTsKKwkJ
CWlmIChjaGstPmRhdGEpIHsKKwkJCQlzY3RwX21fZnJlZW0oY2hrLT5kYXRhKTsKKwkJCQljaGst
PmRhdGEgPSBOVUxMOworCQkJfQorCQl9CisJCXNjdHBfZnJlZV9hX2NodW5rKHN0Y2IsIGNoaywg
c29fbG9ja2VkKTsKKwkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwl9CisJZm9yIChpID0g
MDsgaSA8IGFzb2MtPnN0cmVhbW91dGNudDsgaSsrKSB7CisJCS8qIEZvciBlYWNoIHN0cmVhbSAq
LworCQlvdXRzID0gJmFzb2MtPnN0cm1vdXRbaV07CisJCS8qIGNsZWFuIHVwIGFueSBzZW5kcyB0
aGVyZSAqLworCQlUQUlMUV9GT1JFQUNIX1NBRkUoc3AsICZvdXRzLT5vdXRxdWV1ZSwgbmV4dCwg
bnNwKSB7CisJCQlhdG9taWNfc3VidHJhY3RfaW50KCZhc29jLT5zdHJlYW1fcXVldWVfY250LCAx
KTsKKwkJCVRBSUxRX1JFTU9WRSgmb3V0cy0+b3V0cXVldWUsIHNwLCBuZXh0KTsKKwkJCXN0Y2It
PmFzb2Muc3NfZnVuY3Rpb25zLnNjdHBfc3NfcmVtb3ZlX2Zyb21fc3RyZWFtKHN0Y2IsIGFzb2Ms
IG91dHMsIHNwLCBob2xkc19sb2NrKTsKKwkJCXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsIGFz
b2MsIHNwKTsKKwkJCWlmIChzcC0+ZGF0YSkgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05P
VElGWV9TUEVDSUFMX1NQX0ZBSUwsIHN0Y2IsCisJCQkJCQllcnJvciwgKHZvaWQgKilzcCwgc29f
bG9ja2VkKTsKKwkJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWVtKHNwLT5kYXRh
KTsKKwkJCQkJc3AtPmRhdGEgPSBOVUxMOworCQkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJ
CQkJc3AtPmxlbmd0aCA9IDA7CisJCQkJfQorCQkJfQorCQkJaWYgKHNwLT5uZXQpIHsKKwkJCQlz
Y3RwX2ZyZWVfcmVtb3RlX2FkZHIoc3AtPm5ldCk7CisJCQkJc3AtPm5ldCA9IE5VTEw7CisJCQl9
CisJCQkvKiBGcmVlIHRoZSBjaHVuayAqLworCQkJc2N0cF9mcmVlX2Ffc3RybW9xKHN0Y2IsIHNw
LCBzb19sb2NrZWQpOworCQkJLypzYV9pZ25vcmUgRlJFRURfTUVNT1JZKi8KKwkJfQorCX0KKwor
CWlmIChob2xkc19sb2NrID09IDApIHsKKwkJU0NUUF9UQ0JfU0VORF9VTkxPQ0soc3RjYik7CisJ
fQorfQorCit2b2lkCitzY3RwX2Fib3J0X25vdGlmaWNhdGlvbihzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHVpbnQ4X3QgZnJvbV9wZWVyLCB1aW50MTZfdCBlcnJvciwKKwkJCXN0cnVjdCBzY3RwX2Fi
b3J0X2NodW5rICphYm9ydCwgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykg
JiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRp
ZgorICAgICkKK3sKKwlpZiAoc3RjYiA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisjaWYgZGVm
aW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tlZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFND
VFBfSU5QX1NPKHN0Y2ItPnNjdHBfZXApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3Nl
cnQoU0NUUF9JTlBfU08oc3RjYi0+c2N0cF9lcCkpOworCX0KKyNlbmRpZgorCWlmICgoc3RjYi0+
c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lOX1RDUFBPT0wpIHx8CisJICAg
ICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYm
CisJICAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5F
Q1RFRCkpKSB7CisJCXN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1Nf
V0FTX0FCT1JURUQ7CisJfQorCWlmICgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBf
UENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB8fAorCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSB8fAorCSAgICAoc3RjYi0+YXNvYy5z
dGF0ZSAmIFNDVFBfU1RBVEVfQ0xPU0VEX1NPQ0tFVCkpIHsKKwkJcmV0dXJuOworCX0KKwkvKiBU
ZWxsIHRoZW0gd2UgbG9zdCB0aGUgYXNvYyAqLworCXNjdHBfcmVwb3J0X2FsbF9vdXRib3VuZChz
dGNiLCBlcnJvciwgMSwgc29fbG9ja2VkKTsKKwlpZiAoZnJvbV9wZWVyKSB7CisJCXNjdHBfdWxw
X25vdGlmeShTQ1RQX05PVElGWV9BU1NPQ19SRU1fQUJPUlRFRCwgc3RjYiwgZXJyb3IsIGFib3J0
LCBzb19sb2NrZWQpOworCX0gZWxzZSB7CisJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9B
U1NPQ19MT0NfQUJPUlRFRCwgc3RjYiwgZXJyb3IsIGFib3J0LCBzb19sb2NrZWQpOworCX0KK30K
Kwordm9pZAorc2N0cF9hYm9ydF9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVm
ICptLCBpbnQgaXBobGVuLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIg
KnNyYywgc3RydWN0IHNvY2thZGRyICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj
dCBzY3RwaGRyICpzaCwgc3RydWN0IG1idWYgKm9wX2VyciwKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKQorICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWludDMyX3Qg
bWZsb3dpZCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCB2cmZfaWQs
IHVpbnQxNl90IHBvcnQpCit7CisJdWludDMyX3QgdnRhZzsKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsK
KyNlbmRpZgorCisJdnRhZyA9IDA7CisJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQl2dGFnID0gc3Rj
Yi0+YXNvYy5wZWVyX3Z0YWc7CisJCXZyZl9pZCA9IHN0Y2ItPmFzb2MudnJmX2lkOworCX0KKwlz
Y3RwX3NlbmRfYWJvcnQobSwgaXBobGVuLCBzcmMsIGRzdCwgc2gsIHZ0YWcsIG9wX2VyciwKKyNp
ZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCSAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93
aWQsIGlucC0+ZmlibnVtLAorI2VuZGlmCisJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7
CisJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkvKiBXZSBoYXZlIGEgVENCIHRvIGFib3J0LCBzZW5k
IG5vdGlmaWNhdGlvbiB0b28gKi8KKwkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMCwg
MCwgTlVMTCwgU0NUUF9TT19OT1RfTE9DS0VEKTsKKwkJc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQ
X1NUQVRFX1dBU19BQk9SVEVEOworCQkvKiBPaywgbm93IGxldHMgZnJlZSBpdCAqLworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlzbyA9
IFNDVFBfSU5QX1NPKGlucCk7CisJCWF0b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwg
MSk7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7
CisJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJCWF0b21pY19zdWJ0cmFjdF9pbnQoJnN0Y2ItPmFz
b2MucmVmY250LCAxKTsKKyNlbmRpZgorCQlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNf
YWJvcnRlZCk7CisJCWlmICgoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RB
VEVfT1BFTikgfHwKKwkJICAgIChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9T
VEFURV9TSFVURE9XTl9SRUNFSVZFRCkpIHsKKwkJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0
cHNfY3VycmVzdGFiKTsKKwkJfQorCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBT
Q1RQX05PUk1BTF9QUk9DLAorCQkgICAgICAgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBV
VElMICsgU0NUUF9MT0NfNCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NU
UF9TT19MT0NLX1RFU1RJTkcpCisJCVNDVFBfU09DS0VUX1VOTE9DSyhzbywgMSk7CisjZW5kaWYK
Kwl9Cit9CisjaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKK3ZvaWQKK3NjdHBfcHJpbnRfb3V0
X3RyYWNrX2xvZyhzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpCit7CisjaWZkZWYgTk9TSVlfUFJJTlRT
CisJaW50IGk7CisJU0NUUF9QUklOVEYoIkxhc3QgZXAgcmVhc29uOiV4XG4iLCBzdGNiLT5zY3Rw
X2VwLT5sYXN0X2Fib3J0X2NvZGUpOworCVNDVFBfUFJJTlRGKCJJTiBib3VuZCBUU04gbG9nLWFh
YVxuIik7CisJaWYgKChzdGNiLT5hc29jLnRzbl9pbl9hdCA9PSAwKSAmJiAoc3RjYi0+YXNvYy50
c25faW5fd3JhcHBlZCA9PSAwKSkgeworCQlTQ1RQX1BSSU5URigiTm9uZSByY3ZkXG4iKTsKKwkJ
Z290byBub25lX2luOworCX0KKwlpZiAoc3RjYi0+YXNvYy50c25faW5fd3JhcHBlZCkgeworCQlm
b3IgKGkgPSBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSA8IFNDVFBfVFNOX0xPR19TSVpFOyBpKysp
IHsKKwkJCVNDVFBfUFJJTlRGKCJUU046JXggc3RybTolZCBzZXE6JWQgZmxhZ3M6JXggc3o6JWRc
biIsCisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnRzbiwKKwkJCQkgICAgc3RjYi0+
YXNvYy5pbl90c25sb2dbaV0uc3RybSwKKwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0u
c2VxLAorCQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS5mbGdzLAorCQkJCSAgICBzdGNi
LT5hc29jLmluX3RzbmxvZ1tpXS5zeik7CisJCX0KKwl9CisJaWYgKHN0Y2ItPmFzb2MudHNuX2lu
X2F0KSB7CisJCWZvciAoaSA9IDA7IGkgPCBzdGNiLT5hc29jLnRzbl9pbl9hdDsgaSsrKSB7CisJ
CQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2VxOiVkIGZsYWdzOiV4IHN6OiVkXG4iLAor
CQkJCSAgICBzdGNiLT5hc29jLmluX3RzbmxvZ1tpXS50c24sCisJCQkJICAgIHN0Y2ItPmFzb2Mu
aW5fdHNubG9nW2ldLnN0cm0sCisJCQkJICAgIHN0Y2ItPmFzb2MuaW5fdHNubG9nW2ldLnNlcSwK
KwkJCQkgICAgc3RjYi0+YXNvYy5pbl90c25sb2dbaV0uZmxncywKKwkJCQkgICAgc3RjYi0+YXNv
Yy5pbl90c25sb2dbaV0uc3opOworCQl9CisJfQorIG5vbmVfaW46CisJU0NUUF9QUklOVEYoIk9V
VCBib3VuZCBUU04gbG9nLWFhYVxuIik7CisJaWYgKChzdGNiLT5hc29jLnRzbl9vdXRfYXQgPT0g
MCkgJiYKKwkgICAgKHN0Y2ItPmFzb2MudHNuX291dF93cmFwcGVkID09IDApKSB7CisJCVNDVFBf
UFJJTlRGKCJOb25lIHNlbnRcbiIpOworCX0KKwlpZiAoc3RjYi0+YXNvYy50c25fb3V0X3dyYXBw
ZWQpIHsKKwkJZm9yIChpID0gc3RjYi0+YXNvYy50c25fb3V0X2F0OyBpIDwgU0NUUF9UU05fTE9H
X1NJWkU7IGkrKykgeworCQkJU0NUUF9QUklOVEYoIlRTTjoleCBzdHJtOiVkIHNlcTolZCBmbGFn
czoleCBzejolZFxuIiwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnRzbiwKKwkJ
CQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLnN0cm0sCisJCQkJICAgIHN0Y2ItPmFzb2Mu
b3V0X3RzbmxvZ1tpXS5zZXEsCisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5mbGdz
LAorCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0uc3opOworCQl9CisJfQorCWlmIChz
dGNiLT5hc29jLnRzbl9vdXRfYXQpIHsKKwkJZm9yIChpID0gMDsgaSA8IHN0Y2ItPmFzb2MudHNu
X291dF9hdDsgaSsrKSB7CisJCQlTQ1RQX1BSSU5URigiVFNOOiV4IHN0cm06JWQgc2VxOiVkIGZs
YWdzOiV4IHN6OiVkXG4iLAorCQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0udHNuLAor
CQkJCSAgICBzdGNiLT5hc29jLm91dF90c25sb2dbaV0uc3RybSwKKwkJCQkgICAgc3RjYi0+YXNv
Yy5vdXRfdHNubG9nW2ldLnNlcSwKKwkJCQkgICAgc3RjYi0+YXNvYy5vdXRfdHNubG9nW2ldLmZs
Z3MsCisJCQkJICAgIHN0Y2ItPmFzb2Mub3V0X3RzbmxvZ1tpXS5zeik7CisJCX0KKwl9CisjZW5k
aWYKK30KKyNlbmRpZgorCit2b2lkCitzY3RwX2Fib3J0X2FuX2Fzc29jaWF0aW9uKHN0cnVjdCBz
Y3RwX2lucGNiICppbnAsIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IG1idWYgKm9wX2VyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9T
T19MT0NLX1RFU1RJTkcpCisgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfVU5VU0VECisj
ZW5kaWYKKykKK3sKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NPX0xP
Q0tfVEVTVElORykKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJc28gPSBTQ1RQX0lO
UF9TTyhpbnApOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJaWYgKHNvX2xvY2tl
ZCkgeworCQlzY3RwX2xvY2tfYXNzZXJ0KFNDVFBfSU5QX1NPKGlucCkpOworCX0gZWxzZSB7CisJ
CXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9CisjZW5kaWYKKwlpZiAo
c3RjYiA9PSBOVUxMKSB7CisJCS8qIEdvdCB0byBoYXZlIGEgVENCICovCisJCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgeworCQkJaWYgKExJU1RfRU1Q
VFkoJmlucC0+c2N0cF9hc29jX2xpc3QpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQkJ
aWYgKCFzb19sb2NrZWQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQkJfQor
I2VuZGlmCisJCQkJc2N0cF9pbnBjYl9mcmVlKGlucCwgU0NUUF9GUkVFX1NIT1VMRF9VU0VfQUJP
UlQsCisJCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7CisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisJCQkJaWYgKCFzb19sb2NrZWQpIHsKKwkJCQkJU0NUUF9TT0NLRVRfVU5MT0NL
KHNvLCAxKTsKKwkJCQl9CisjZW5kaWYKKwkJCX0KKwkJfQorCQlyZXR1cm47CisJfSBlbHNlIHsK
KwkJc3RjYi0+YXNvYy5zdGF0ZSB8PSBTQ1RQX1NUQVRFX1dBU19BQk9SVEVEOworCX0KKwkvKiBu
b3RpZnkgdGhlIHBlZXIgKi8KKwlzY3RwX3NlbmRfYWJvcnRfdGNiKHN0Y2IsIG9wX2Vyciwgc29f
bG9ja2VkKTsKKwlTQ1RQX1NUQVRfSU5DUl9DT1VOVEVSMzIoc2N0cHNfYWJvcnRlZCk7CisJaWYg
KChTQ1RQX0dFVF9TVEFURSgmc3RjYi0+YXNvYykgPT0gU0NUUF9TVEFURV9PUEVOKSB8fAorCSAg
ICAoU0NUUF9HRVRfU1RBVEUoJnN0Y2ItPmFzb2MpID09IFNDVFBfU1RBVEVfU0hVVERPV05fUkVD
RUlWRUQpKSB7CisJCVNDVFBfU1RBVF9ERUNSX0dBVUdFMzIoc2N0cHNfY3VycmVzdGFiKTsKKwl9
CisJLyogbm90aWZ5IHRoZSB1bHAgKi8KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX1NPQ0tFVF9HT05FKSA9PSAwKSB7CisJCXNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0
Y2IsIDAsIDAsIE5VTEwsIHNvX2xvY2tlZCk7CisJfQorCS8qIG5vdyBmcmVlIHRoZSBhc29jICov
CisjaWZkZWYgU0NUUF9BU09DTE9HX09GX1RTTlMKKwlzY3RwX3ByaW50X291dF90cmFja19sb2co
c3RjYik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQX1NP
X0xPQ0tfVEVTVElORykKKwlpZiAoIXNvX2xvY2tlZCkgeworCQlhdG9taWNfYWRkX2ludCgmc3Rj
Yi0+YXNvYy5yZWZjbnQsIDEpOworCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCVNDVFBfU09D
S0VUX0xPQ0soc28sIDEpOworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJfQorI2VuZGlmCisJKHZvaWQpc2N0cF9m
cmVlX2Fzc29jKGlucCwgc3RjYiwgU0NUUF9OT1JNQUxfUFJPQywKKwkgICAgICAgICAgICAgICAg
ICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0NfNSk7CisjaWYgZGVmaW5lZChfX0FQ
UExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisJaWYgKCFzb19sb2NrZWQp
IHsKKwkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwl9CisjZW5kaWYKK30KKwordm9pZAor
c2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwK
KyAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpzcmMsIHN0cnVjdCBzb2NrYWRkciAq
ZHN0LAorICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cGhkciAqc2gsIHN0cnVjdCBzY3RwX2lu
cGNiICppbnAsCisgICAgICAgICAgICAgICAgIHN0cnVjdCBtYnVmICpjYXVzZSwKKyNpZiBkZWZp
bmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgICB1aW50OF90IG1mbG93dHlwZSwgdWlu
dDMyX3QgbWZsb3dpZCwgdWludDE2X3QgZmlibnVtLAorI2VuZGlmCisgICAgICAgICAgICAgICAg
IHVpbnQzMl90IHZyZl9pZCwgdWludDE2X3QgcG9ydCkKK3sKKwlzdHJ1Y3Qgc2N0cF9jaHVua2hk
ciAqY2gsIGNodW5rX2J1ZjsKKwl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKKwlpbnQgY29udGFp
bnNfaW5pdF9jaHVuazsKKworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVIzMihzY3Rwc19vdXRvZnRo
ZWJsdWUpOworCS8qIEdlbmVyYXRlIGEgVE8gYWRkcmVzcyBmb3IgZnV0dXJlIHJlZmVyZW5jZSAq
LworCWlmIChpbnAgJiYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9H
T05FKSkgeworCQlpZiAoTElTVF9FTVBUWSgmaW5wLT5zY3RwX2Fzb2NfbGlzdCkpIHsKKyNpZiBk
ZWZpbmVkKF9fQVBQTEVfXykKKwkJCVNDVFBfU09DS0VUX0xPQ0soU0NUUF9JTlBfU08oaW5wKSwg
MSk7CisjZW5kaWYKKwkJCXNjdHBfaW5wY2JfZnJlZShpbnAsIFNDVFBfRlJFRV9TSE9VTERfVVNF
X0FCT1JULAorCQkJCQlTQ1RQX0NBTExFRF9ESVJFQ1RMWV9OT0NNUFNFVCk7CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soU0NUUF9JTlBfU08oaW5wKSwgMSk7
CisjZW5kaWYKKwkJfQorCX0KKwljb250YWluc19pbml0X2NodW5rID0gMDsKKwljaCA9IChzdHJ1
Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBfbV9nZXRwdHIobSwgb2Zmc2V0LAorCSAgICBzaXplb2Yo
KmNoKSwgKHVpbnQ4X3QgKikgJiBjaHVua19idWYpOworCXdoaWxlIChjaCAhPSBOVUxMKSB7CisJ
CWNoa19sZW5ndGggPSBudG9ocyhjaC0+Y2h1bmtfbGVuZ3RoKTsKKwkJaWYgKGNoa19sZW5ndGgg
PCBzaXplb2YoKmNoKSkgeworCQkJLyogYnJlYWsgdG8gYWJvcnQgbGFuZCAqLworCQkJYnJlYWs7
CisJCX0KKwkJc3dpdGNoIChjaC0+Y2h1bmtfdHlwZSkgeworCQljYXNlIFNDVFBfSU5JVDoKKwkJ
CWNvbnRhaW5zX2luaXRfY2h1bmsgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgU0NUUF9QQUNLRVRf
RFJPUFBFRDoKKwkJCS8qIHdlIGRvbid0IHJlc3BvbmQgdG8gcGt0LWRyb3BwZWQgKi8KKwkJCXJl
dHVybjsKKwkJY2FzZSBTQ1RQX0FCT1JUX0FTU09DSUFUSU9OOgorCQkJLyogd2UgZG9uJ3QgcmVz
cG9uZCB3aXRoIGFuIEFCT1JUIHRvIGFuIEFCT1JUICovCisJCQlyZXR1cm47CisJCWNhc2UgU0NU
UF9TSFVURE9XTl9DT01QTEVURToKKwkJCS8qCisJCQkgKiB3ZSBpZ25vcmUgaXQgc2luY2Ugd2Ug
YXJlIG5vdCB3YWl0aW5nIGZvciBpdCBhbmQKKwkJCSAqIHBlZXIgaXMgZ29uZQorCQkJICovCisJ
CQlyZXR1cm47CisJCWNhc2UgU0NUUF9TSFVURE9XTl9BQ0s6CisJCQlzY3RwX3NlbmRfc2h1dGRv
d25fY29tcGxldGUyKHNyYywgZHN0LCBzaCwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZmxvd3R5cGUsIG1mbG93aWQsIGZpYm51bSwK
KyNlbmRpZgorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOwor
CQkJcmV0dXJuOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJb2Zmc2V0ICs9IFNDVFBf
U0laRTMyKGNoa19sZW5ndGgpOworCQljaCA9IChzdHJ1Y3Qgc2N0cF9jaHVua2hkciAqKXNjdHBf
bV9nZXRwdHIobSwgb2Zmc2V0LAorCQkgICAgc2l6ZW9mKCpjaCksICh1aW50OF90ICopICYgY2h1
bmtfYnVmKTsKKwl9CisJaWYgKChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfYmxhY2tob2xlKSA9PSAw
KSB8fAorCSAgICAoKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ibGFja2hvbGUpID09IDEpICYmCisJ
ICAgICAoY29udGFpbnNfaW5pdF9jaHVuayA9PSAwKSkpIHsKKwkJc2N0cF9zZW5kX2Fib3J0KG0s
IGlwaGxlbiwgc3JjLCBkc3QsIHNoLCAwLCBjYXVzZSwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KQorCQkgICAgICAgICAgICAgICAgbWZsb3d0eXBlLCBtZmxvd2lkLCBmaWJudW0sCisjZW5kaWYK
KwkJICAgICAgICAgICAgICAgIHZyZl9pZCwgcG9ydCk7CisJfQorfQorCisvKgorICogY2hlY2sg
dGhlIGluYm91bmQgZGF0YWdyYW0gdG8gbWFrZSBzdXJlIHRoZXJlIGlzIG5vdCBhbiBhYm9ydCBp
bnNpZGUgaXQsCisgKiBpZiB0aGVyZSBpcyByZXR1cm4gMSwgZWxzZSByZXR1cm4gMC4KKyAqLwor
aW50CitzY3RwX2lzX3RoZXJlX2FuX2Fib3J0X2hlcmUoc3RydWN0IG1idWYgKm0sIGludCBpcGhs
ZW4sIHVpbnQzMl90ICogdnRhZ2ZpbGwpCit7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOwor
CXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmluaXRfY2hrLCBjaHVua19idWY7CisJaW50IG9mZnNl
dDsKKwl1bnNpZ25lZCBpbnQgY2hrX2xlbmd0aDsKKworCW9mZnNldCA9IGlwaGxlbiArIHNpemVv
ZihzdHJ1Y3Qgc2N0cGhkcik7CisJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKilzY3RwX21f
Z2V0cHRyKG0sIG9mZnNldCwgc2l6ZW9mKCpjaCksCisJICAgICh1aW50OF90ICopICYgY2h1bmtf
YnVmKTsKKwl3aGlsZSAoY2ggIT0gTlVMTCkgeworCQljaGtfbGVuZ3RoID0gbnRvaHMoY2gtPmNo
dW5rX2xlbmd0aCk7CisJCWlmIChjaGtfbGVuZ3RoIDwgc2l6ZW9mKCpjaCkpIHsKKwkJCS8qIHBh
Y2tldCBpcyBwcm9iYWJseSBjb3JydXB0ICovCisJCQlicmVhazsKKwkJfQorCQkvKiB3ZSBzZWVt
IHRvIGJlIG9rLCBpcyBpdCBhbiBhYm9ydD8gKi8KKwkJaWYgKGNoLT5jaHVua190eXBlID09IFND
VFBfQUJPUlRfQVNTT0NJQVRJT04pIHsKKwkJCS8qIHllcCwgdGVsbCB0aGVtICovCisJCQlyZXR1
cm4gKDEpOworCQl9CisJCWlmIChjaC0+Y2h1bmtfdHlwZSA9PSBTQ1RQX0lOSVRJQVRJT04pIHsK
KwkJCS8qIG5lZWQgdG8gdXBkYXRlIHRoZSBWdGFnICovCisJCQlpbml0X2NoayA9IChzdHJ1Y3Qg
c2N0cF9pbml0X2NodW5rICopc2N0cF9tX2dldHB0cihtLAorCQkJICAgIG9mZnNldCwgc2l6ZW9m
KCppbml0X2NoayksICh1aW50OF90ICopICYgY2h1bmtfYnVmKTsKKwkJCWlmIChpbml0X2NoayAh
PSBOVUxMKSB7CisJCQkJKnZ0YWdmaWxsID0gbnRvaGwoaW5pdF9jaGstPmluaXQuaW5pdGlhdGVf
dGFnKTsKKwkJCX0KKwkJfQorCQkvKiBOb3BlLCBtb3ZlIHRvIHRoZSBuZXh0IGNodW5rICovCisJ
CW9mZnNldCArPSBTQ1RQX1NJWkUzMihjaGtfbGVuZ3RoKTsKKwkJY2ggPSAoc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKilzY3RwX21fZ2V0cHRyKG0sIG9mZnNldCwKKwkJICAgIHNpemVvZigqY2gpLCAo
dWludDhfdCAqKSAmIGNodW5rX2J1Zik7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBj
dXJyZW50bHkgKDIvMDIpLCBpZmFfYWRkciBlbWJlZHMgc2NvcGVfaWQncyBhbmQgZG9uJ3QgaGF2
ZSBzaW42X3Njb3BlX2lkCisgKiBzZXQgKGkuZS4gaXQncyAwKSBzbywgY3JlYXRlIHRoaXMgZnVu
Y3Rpb24gdG8gY29tcGFyZSBsaW5rIGxvY2FsIHNjb3BlcworICovCisjaWZkZWYgSU5FVDYKK3Vp
bnQzMl90CitzY3RwX2lzX3NhbWVfc2NvcGUoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkcjEsIHN0
cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIyKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykK
KyAgICAvKl9fVXNlcnNwYWNlX18gUmV0dXJuaW5nIDEgaGVyZSBhbHdheXMgKi8KKyNlbmRpZgor
I2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
IGEsIGI7CisKKwkvKiBzYXZlIGNvcGllcyAqLworCWEgPSAqYWRkcjE7CisJYiA9ICphZGRyMjsK
KworCWlmIChhLnNpbjZfc2NvcGVfaWQgPT0gMCkKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJaWYgKHNh
Nl9yZWNvdmVyc2NvcGUoJmEpKSB7CisjZWxzZQorCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYSwg
JmEuc2luNl9hZGRyLCBOVUxMKSkgeworI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLworCQkJLyog
Y2FuJ3QgZ2V0IHNjb3BlLCBzbyBjYW4ndCBtYXRjaCAqLworCQkJcmV0dXJuICgwKTsKKwkJfQor
CWlmIChiLnNpbjZfc2NvcGVfaWQgPT0gMCkKKyNpZmRlZiBTQ1RQX0tBTUUKKwkJaWYgKHNhNl9y
ZWNvdmVyc2NvcGUoJmIpKSB7CisjZWxzZQorCQlpZiAoaW42X3JlY292ZXJzY29wZSgmYiwgJmIu
c2luNl9hZGRyLCBOVUxMKSkgeworI2VuZGlmCQkJCS8qIFNDVFBfS0FNRSAqLworCQkJLyogY2Fu
J3QgZ2V0IHNjb3BlLCBzbyBjYW4ndCBtYXRjaCAqLworCQkJcmV0dXJuICgwKTsKKwkJfQorCWlm
IChhLnNpbjZfc2NvcGVfaWQgIT0gYi5zaW42X3Njb3BlX2lkKQorCQlyZXR1cm4gKDApOworI2Vs
c2UKKwlpZiAoYWRkcjEtPnNpbjZfc2NvcGVfaWQgIT0gYWRkcjItPnNpbjZfc2NvcGVfaWQpCisJ
CXJldHVybiAoMCk7CisjZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworCisJcmV0
dXJuICgxKTsKK30KKworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKy8qCisg
KiByZXR1cm5zIGEgc29ja2FkZHJfaW42IHdpdGggZW1iZWRkZWQgc2NvcGUgcmVjb3ZlcmVkIGFu
ZCByZW1vdmVkCisgKi8KK3N0cnVjdCBzb2NrYWRkcl9pbjYgKgorc2N0cF9yZWNvdmVyX3Njb3Bl
KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnN0b3JlKQor
eworCS8qIGNoZWNrIGFuZCBzdHJpcCBlbWJlZGRlZCBzY29wZSBqdW5rICovCisJaWYgKGFkZHIt
PnNpbjZfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCWlmIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FM
KCZhZGRyLT5zaW42X2FkZHIpKSB7CisJCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7
CisJCQkJKnN0b3JlID0gKmFkZHI7CisjaWZkZWYgU0NUUF9LQU1FCisJCQkJaWYgKCFzYTZfcmVj
b3ZlcnNjb3BlKHN0b3JlKSkgeworI2Vsc2UKKwkJCQlpZiAoIWluNl9yZWNvdmVyc2NvcGUoc3Rv
cmUsICZzdG9yZS0+c2luNl9hZGRyLAorCQkJCSAgICBOVUxMKSkgeworI2VuZGlmIC8qIFNDVFBf
S0FNRSAqLworCQkJCQkvKiB1c2UgdGhlIHJlY292ZXJlZCBzY29wZSAqLworCQkJCQlhZGRyID0g
c3RvcmU7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQkvKiBlbHNlLCByZXR1cm4gdGhlIG9yaWdp
bmFsICJ0byIgYWRkciAqLworCQkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIpOwor
CQkJfQorCQl9CisJfQorCXJldHVybiAoYWRkcik7Cit9CisjZW5kaWYgLyogU0NUUF9FTUJFRERF
RF9WNl9TQ09QRSAqLworI2VuZGlmCisKKy8qCisgKiBhcmUgdGhlIHR3byBhZGRyZXNzZXMgdGhl
IHNhbWU/ICBjdXJyZW50bHkgYSAic2NvcGVsZXNzIiBjaGVjayByZXR1cm5zOiAxCisgKiBpZiBz
YW1lLCAwIGlmIG5vdAorICovCitpbnQKK3NjdHBfY21wYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKnNh
MSwgc3RydWN0IHNvY2thZGRyICpzYTIpCit7CisKKwkvKiBtdXN0IGJlIHZhbGlkICovCisJaWYg
KHNhMSA9PSBOVUxMIHx8IHNhMiA9PSBOVUxMKQorCQlyZXR1cm4gKDApOworCisJLyogbXVzdCBi
ZSB0aGUgc2FtZSBmYW1pbHkgKi8KKwlpZiAoc2ExLT5zYV9mYW1pbHkgIT0gc2EyLT5zYV9mYW1p
bHkpCisJCXJldHVybiAoMCk7CisKKwlzd2l0Y2ggKHNhMS0+c2FfZmFtaWx5KSB7CisjaWZkZWYg
SU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJLyogSVB2NiBhZGRyZXNzZXMgKi8KKwkJc3Ry
dWN0IHNvY2thZGRyX2luNiAqc2luNl8xLCAqc2luNl8yOworCisJCXNpbjZfMSA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopc2ExOworCQlzaW42XzIgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNh
MjsKKwkJcmV0dXJuIChTQ1RQNl9BUkVfQUREUl9FUVVBTChzaW42XzEsCisJCSAgICBzaW42XzIp
KTsKKwl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCXsKKwkJLyogSVB2
NCBhZGRyZXNzZXMgKi8KKwkJc3RydWN0IHNvY2thZGRyX2luICpzaW5fMSwgKnNpbl8yOworCisJ
CXNpbl8xID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKXNhMTsKKwkJc2luXzIgPSAoc3RydWN0IHNv
Y2thZGRyX2luICopc2EyOworCQlyZXR1cm4gKHNpbl8xLT5zaW5fYWRkci5zX2FkZHIgPT0gc2lu
XzItPnNpbl9hZGRyLnNfYWRkcik7CisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubl8x
LCAqc2Nvbm5fMjsKKworCQlzY29ubl8xID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2ExOwor
CQlzY29ubl8yID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICopc2EyOworCQlyZXR1cm4gKHNjb25u
XzEtPnNjb25uX2FkZHIgPT0gc2Nvbm5fMi0+c2Nvbm5fYWRkcik7CisJfQorI2VuZGlmCisJZGVm
YXVsdDoKKwkJLyogd2UgZG9uJ3QgZG8gdGhlc2UuLi4gKi8KKwkJcmV0dXJuICgwKTsKKwl9Cit9
CisKK3ZvaWQKK3NjdHBfcHJpbnRfYWRkcmVzcyhzdHJ1Y3Qgc29ja2FkZHIgKnNhKQoreworI2lm
ZGVmIElORVQ2CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24g
Pj0gNzAwMDAwCisJY2hhciBpcDZidWZbSU5FVDZfQUREUlNUUkxFTl07CisjZW5kaWYKKyNlbmRp
ZgorCisJc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lO
RVQ2OgorCXsKKwkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKworCQlzaW42ID0gKHN0cnVj
dCBzb2NrYWRkcl9pbjYgKilzYTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCVNDVFBf
UFJJTlRGKCJJUHY2IGFkZHJlc3M6ICV4OiV4OiV4OiV4OiV4OiV4OiV4OiV4OnBvcnQ6JWQgc2Nv
cGU6JXVcbiIsCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlswXSksCisJ
CQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsxXSksCisJCQkgICAgbnRvaHMo
c2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNlsyXSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9h
ZGRyLnM2X2FkZHIxNlszXSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIx
Nls0XSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls1XSksCisJCQkg
ICAgbnRvaHMoc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls2XSksCisJCQkgICAgbnRvaHMoc2lu
Ni0+c2luNl9hZGRyLnM2X2FkZHIxNls3XSksCisJCQkgICAgbnRvaHMoc2luNi0+c2luNl9wb3J0
KSwKKwkJCSAgICBzaW42LT5zaW42X3Njb3BlX2lkKTsKKyNlbHNlCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJCVNDVFBfUFJJTlRGKCJJ
UHY2IGFkZHJlc3M6ICVzOnBvcnQ6JWQgc2NvcGU6JXVcbiIsCisJCQkgICAgaXA2X3NwcmludGYo
aXA2YnVmLCAmc2luNi0+c2luNl9hZGRyKSwKKwkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQp
LAorCQkJICAgIHNpbjYtPnNpbjZfc2NvcGVfaWQpOworI2Vsc2UKKwkJU0NUUF9QUklOVEYoIklQ
djYgYWRkcmVzczogJXM6cG9ydDolZCBzY29wZToldVxuIiwKKwkJCSAgICBpcDZfc3ByaW50Zigm
c2luNi0+c2luNl9hZGRyKSwKKwkJCSAgICBudG9ocyhzaW42LT5zaW42X3BvcnQpLAorCQkJICAg
IHNpbjYtPnNpbjZfc2NvcGVfaWQpOworI2VuZGlmCisjZW5kaWYKKwkJYnJlYWs7CisJfQorI2Vu
ZGlmCisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9p
biAqc2luOworCQl1bnNpZ25lZCBjaGFyICpwOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKilzYTsKKwkJcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbi0+c2luX2FkZHI7CisJCVNDVFBf
UFJJTlRGKCJJUHY0IGFkZHJlc3M6ICV1LiV1LiV1LiV1OiVkXG4iLAorCQkJICAgIHBbMF0sIHBb
MV0sIHBbMl0sIHBbM10sIG50b2hzKHNpbi0+c2luX3BvcnQpKTsKKwkJYnJlYWs7CisJfQorI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNhc2UgQUZfQ09OTjoKKwl7CisJCXN0
cnVjdCBzb2NrYWRkcl9jb25uICpzY29ubjsKKworCQlzY29ubiA9IChzdHJ1Y3Qgc29ja2FkZHJf
Y29ubiAqKXNhOworCQlTQ1RQX1BSSU5URigiQUZfQ09OTiBhZGRyZXNzOiAlcFxuIiwgc2Nvbm4t
PnNjb25uX2FkZHIpOworCQlicmVhazsKKwl9CisjZW5kaWYKKwlkZWZhdWx0OgorCQlTQ1RQX1BS
SU5URigiP1xuIik7CisJCWJyZWFrOworCX0KK30KKwordm9pZAorc2N0cF9wdWxsX29mZl9jb250
cm9sX3RvX25ld19pbnAoc3RydWN0IHNjdHBfaW5wY2IgKm9sZF9pbnAsCisgICAgc3RydWN0IHNj
dHBfaW5wY2IgKm5ld19pbnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIGludCB3
YWl0ZmxhZ3MpCit7CisJLyoKKwkgKiBnbyB0aHJvdWdoIG91ciBvbGQgSU5QIGFuZCBwdWxsIG9m
ZiBhbnkgY29udHJvbCBzdHJ1Y3R1cmVzIHRoYXQKKwkgKiBiZWxvbmcgdG8gc3RjYiBhbmQgbW92
ZSB0aGVuIHRvIHRoZSBuZXcgaW5wLgorCSAqLworCXN0cnVjdCBzb2NrZXQgKm9sZF9zbywgKm5l
d19zbzsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCwgKm5jdGw7CisJc3Ry
dWN0IHNjdHBfcmVhZGhlYWQgdG1wX3F1ZXVlOworCXN0cnVjdCBtYnVmICptOworI2lmIGRlZmlu
ZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorCWludCBlcnJvciA9IDA7Cisj
ZW5kaWYKKworCW9sZF9zbyA9IG9sZF9pbnAtPnNjdHBfc29ja2V0OworCW5ld19zbyA9IG5ld19p
bnAtPnNjdHBfc29ja2V0OworCVRBSUxRX0lOSVQoJnRtcF9xdWV1ZSk7CisjaWYgZGVmaW5lZChf
X0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAKKwlTT0NLQlVGX0xPQ0soJihvbGRfc28t
PnNvX3JjdikpOworI2VuZGlmCisJZXJyb3IgPSBzYmxvY2soJm9sZF9zby0+c29fcmN2LCB3YWl0
ZmxhZ3MpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwg
NzAwMDAwCisJU09DS0JVRl9VTkxPQ0soJihvbGRfc28tPnNvX3JjdikpOworI2VuZGlmCisJaWYg
KGVycm9yKSB7CisJCS8qIEdhaywgY2FuJ3QgZ2V0IHNibG9jaywgd2UgaGF2ZSBhIHByb2JsZW0u
CisJCSAqIGRhdGEgd2lsbCBiZSBsZWZ0IHN0cmFuZGVkLi4gYW5kIHdlCisJCSAqIGRvbid0IGRh
cmUgbG9vayBhdCBpdCBzaW5jZSB0aGUKKwkJICogb3RoZXIgdGhyZWFkIG1heSBiZSByZWFkaW5n
IHNvbWV0aGluZy4KKwkJICogT2ggd2VsbCwgaXRzIGEgc2NyZXdlZCB1cCBhcHAgdGhhdCBkb2Vz
CisJCSAqIGEgcGVlbG9mZiBPUiBhIGFjY2VwdCB3aGlsZSByZWFkaW5nCisJCSAqIGZyb20gdGhl
IG1haW4gc29ja2V0Li4uIGFjdHVhbGx5IGl0cworCQkgKiBvbmx5IHRoZSBwZWVsb2ZmKCkgY2Fz
ZSwgc2luY2UgSSB0aGluaworCQkgKiByZWFkIHdpbGwgZmFpbCBvbiBhIGxpc3RlbmluZyBzb2Nr
ZXQuLgorCQkgKi8KKwkJcmV0dXJuOworCX0KKyNlbmRpZgorCS8qIGxvY2sgdGhlIHNvY2tldCBi
dWZmZXJzICovCisJU0NUUF9JTlBfUkVBRF9MT0NLKG9sZF9pbnApOworCVRBSUxRX0ZPUkVBQ0hf
U0FGRShjb250cm9sLCAmb2xkX2lucC0+cmVhZF9xdWV1ZSwgbmV4dCwgbmN0bCkgeworCQkvKiBQ
dWxsIG9mZiBhbGwgZm9yIG91dCB0YXJnZXQgc3RjYiAqLworCQlpZiAoY29udHJvbC0+c3RjYiA9
PSBzdGNiKSB7CisJCQkvKiByZW1vdmUgaXQgd2Ugd2FudCBpdCAqLworCQkJVEFJTFFfUkVNT1ZF
KCZvbGRfaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCVRBSUxRX0lOU0VSVF9U
QUlMKCZ0bXBfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQkJbSA9IGNvbnRyb2wtPmRhdGE7CisJ
CQl3aGlsZSAobSkgeworCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZl
bCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCXNjdHBfc2Jsb2coJm9sZF9zby0+
c29fcmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZS
RUUsU0NUUF9CVUZfTEVOKG0pKTsKKwkJCQl9CisJCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgc3Rj
YiwgJm9sZF9zby0+c29fcmN2LCBtKTsKKwkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xv
Z2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQlzY3RwX3NibG9n
KCZvbGRfc28tPnNvX3JjdiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NU
UF9MT0dfU0JSRVNVTFQsIDApOworCQkJCX0KKwkJCQltID0gU0NUUF9CVUZfTkVYVChtKTsKKwkJ
CX0KKwkJfQorCX0KKwlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhvbGRfaW5wKTsKKwkvKiBSZW1vdmUg
dGhlIHNiLWxvY2sgb24gdGhlIG9sZCBzb2NrZXQgKi8KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAwMAorCVNPQ0tCVUZfTE9DSygmKG9sZF9zby0+
c29fcmN2KSk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlzYnVubG9jaygmb2xk
X3NvLT5zb19yY3YsIDEpOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCXNi
dW5sb2NrKCZvbGRfc28tPnNvX3Jjdik7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9f
KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDcwMDAwMAorCVNPQ0tCVUZfVU5MT0NLKCYob2xkX3Nv
LT5zb19yY3YpKTsKKyNlbmRpZgorCS8qIE5vdyB3ZSBtb3ZlIHRoZW0gb3ZlciB0byB0aGUgbmV3
IHNvY2tldCBidWZmZXIgKi8KKwlTQ1RQX0lOUF9SRUFEX0xPQ0sobmV3X2lucCk7CisJVEFJTFFf
Rk9SRUFDSF9TQUZFKGNvbnRyb2wsICZ0bXBfcXVldWUsIG5leHQsIG5jdGwpIHsKKwkJVEFJTFFf
SU5TRVJUX1RBSUwoJm5ld19pbnAtPnJlYWRfcXVldWUsIGNvbnRyb2wsIG5leHQpOworCQltID0g
Y29udHJvbC0+ZGF0YTsKKwkJd2hpbGUgKG0pIHsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9z
YmxvZygmbmV3X3NvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2Is
IFNDVFBfTE9HX1NCQUxMT0MsIFNDVFBfQlVGX0xFTihtKSk7CisJCQl9CisJCQlzY3RwX3NiYWxs
b2Moc3RjYiwgJm5ld19zby0+c29fcmN2LCBtKTsKKwkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNj
dHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJc2N0cF9z
YmxvZygmbmV3X3NvLT5zb19yY3YsIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2Is
IFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCX0KKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOwor
CQl9CisJfQorCVNDVFBfSU5QX1JFQURfVU5MT0NLKG5ld19pbnApOworfQorCit2b2lkCitzY3Rw
X3dha2V1cF90aGVfcmVhZF9zb2NrZXQoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwKKyAgICBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgaW50IHNvX2xvY2tlZAorI2lmICFkZWZpbmVkKF9fQVBQ
TEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQK
KyNlbmRpZgorKQoreworCWlmICgoaW5wICE9IE5VTEwpICYmIChpbnAtPnNjdHBfc29ja2V0ICE9
IE5VTEwpKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NUUF9JTlBfU08oaW5w
KTsKKwkJaWYgKCFzb19sb2NrZWQpIHsKKwkJCWlmIChzdGNiKSB7CisJCQkJYXRvbWljX2FkZF9p
bnQoJnN0Y2ItPmFzb2MucmVmY250LCAxKTsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJ
CQl9CisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCWlmIChzdGNiKSB7CisJCQkJU0NU
UF9UQ0JfTE9DSyhzdGNiKTsKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJl
ZmNudCwgMSk7CisJCQl9CisJCQlpZiAoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
U09DS0VUX0dPTkUpIHsKKwkJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEpOworCQkJCXJldHVy
bjsKKwkJCX0KKwkJfQorI2VuZGlmCisJCXNjdHBfc29yd2FrZXVwKGlucCwgaW5wLT5zY3RwX3Nv
Y2tldCk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NLX1RF
U1RJTkcpCisJCWlmICghc29fbG9ja2VkKSB7CisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDEp
OworCQl9CisjZW5kaWYKKwl9Cit9CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCit2b2lk
CitzY3RwX2ludm9rZV9yZWN2X2NhbGxiYWNrKHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKmNvbnRyb2wsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBpbnBfcmVhZF9sb2NrX2hlbGQpCit7CisJdWludDMy
X3QgcGRfcG9pbnQsIGxlbmd0aDsKKworCWlmICgoaW5wLT5yZWN2X2NhbGxiYWNrID09IE5VTEwp
IHx8CisJICAgIChzdGNiID09IE5VTEwpIHx8CisJICAgIChzdGNiLT5zY3RwX3NvY2tldCA9PSBO
VUxMKSkgeworCQlyZXR1cm47CisJfQorCisJbGVuZ3RoID0gY29udHJvbC0+bGVuZ3RoOworCWlm
IChzdGNiICE9IE5VTEwgJiYgc3RjYi0+c2N0cF9zb2NrZXQgIT0gTlVMTCkgeworCQlwZF9wb2lu
dCA9IG1pbihTQ1RQX1NCX0xJTUlUX1JDVihzdGNiLT5zY3RwX3NvY2tldCkgPj4gU0NUUF9QQVJU
SUFMX0RFTElWRVJZX1NISUZULAorCQkJICAgICAgIHN0Y2ItPnNjdHBfZXAtPnBhcnRpYWxfZGVs
aXZlcnlfcG9pbnQpOworCX0gZWxzZSB7CisJCXBkX3BvaW50ID0gaW5wLT5wYXJ0aWFsX2RlbGl2
ZXJ5X3BvaW50OworCX0KKwlpZiAoKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB8fCAobGVuZ3Ro
ID49IHBkX3BvaW50KSkgeworCQlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwkJc3RydWN0IG1idWYgKm07
CisJCWNoYXIgKmJ1ZmZlcjsKKwkJc3RydWN0IHNjdHBfcmN2aW5mbyByY3Y7CisJCXVuaW9uIHNj
dHBfc29ja3N0b3JlIGFkZHI7CisJCWludCBmbGFnczsKKworCQlpZiAoKGJ1ZmZlciA9IG1hbGxv
YyhsZW5ndGgpKSA9PSBOVUxMKSB7CisJCQlyZXR1cm47CisJCX0KKwkJaWYgKGlucF9yZWFkX2xv
Y2tfaGVsZCA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJfQorCQlzbyA9
IHN0Y2ItPnNjdHBfc29ja2V0OworCQlmb3IgKG0gPSBjb250cm9sLT5kYXRhOyBtOyBtID0gU0NU
UF9CVUZfTkVYVChtKSkgeworCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgY29udHJvbC0+c3RjYiwg
JnNvLT5zb19yY3YsIG0pOworCQl9CisJCW1fY29weWRhdGEoY29udHJvbC0+ZGF0YSwgMCwgbGVu
Z3RoLCBidWZmZXIpOworCQltZW1zZXQoJnJjdiwgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3Jjdmlu
Zm8pKTsKKwkJcmN2LnJjdl9zaWQgPSBjb250cm9sLT5zaW5mb19zdHJlYW07CisJCXJjdi5yY3Zf
c3NuID0gKHVpbnQxNl90KWNvbnRyb2wtPm1pZDsKKwkJcmN2LnJjdl9mbGFncyA9IGNvbnRyb2wt
PnNpbmZvX2ZsYWdzOworCQlyY3YucmN2X3BwaWQgPSBjb250cm9sLT5zaW5mb19wcGlkOworCQly
Y3YucmN2X3RzbiA9IGNvbnRyb2wtPnNpbmZvX3RzbjsKKwkJcmN2LnJjdl9jdW10c24gPSBjb250
cm9sLT5zaW5mb19jdW10c247CisJCXJjdi5yY3ZfY29udGV4dCA9IGNvbnRyb2wtPnNpbmZvX2Nv
bnRleHQ7CisJCXJjdi5yY3ZfYXNzb2NfaWQgPSBjb250cm9sLT5zaW5mb19hc3NvY19pZDsKKwkJ
bWVtc2V0KCZhZGRyLCAwLCBzaXplb2YodW5pb24gc2N0cF9zb2Nrc3RvcmUpKTsKKwkJc3dpdGNo
IChjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElO
RVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJYWRkci5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5f
bF9hZGRyLnNpbjsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9J
TkVUNjoKKwkJCWFkZHIuc2luNiA9IGNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luNjsK
KwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgQUZfQ09OTjoKKwkJCWFkZHIuc2Nvbm4gPSBjb250
cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNjb25uOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJ
CQlhZGRyLnNhID0gY29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zYTsKKwkJCWJyZWFrOwor
CQl9CisJCWZsYWdzID0gMDsKKwkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB7CisJCQlm
bGFncyB8PSBNU0dfRU9SOworCQl9CisJCWlmIChjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJ
RklDQVRJT04pIHsKKwkJCWZsYWdzIHw9IE1TR19OT1RJRklDQVRJT047CisJCX0KKwkJc2N0cF9t
X2ZyZWVtKGNvbnRyb2wtPmRhdGEpOworCQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJY29udHJv
bC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJY29udHJvbC0+bGVuZ3RoID0gMDsKKwkJaWYgKGNvbnRy
b2wtPmVuZF9hZGRlZCkgeworCQkJVEFJTFFfUkVNT1ZFKCZzdGNiLT5zY3RwX2VwLT5yZWFkX3F1
ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJCWNvbnRyb2wtPm9uX3JlYWRfcSA9IDA7CisJCQlzY3Rw
X2ZyZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+d2hvRnJvbSk7CisJCQljb250cm9sLT53aG9Gcm9t
ID0gTlVMTDsKKwkJCXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCQl9CisJCWF0
b21pY19hZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCVNDVFBfVENCX1VOTE9DSyhz
dGNiKTsKKwkJaWYgKGlucF9yZWFkX2xvY2tfaGVsZCA9PSAwKSB7CisJCQlTQ1RQX0lOUF9SRUFE
X1VOTE9DSyhpbnApOworCQl9CisJCWlucC0+cmVjdl9jYWxsYmFjayhzbywgYWRkciwgYnVmZmVy
LCBsZW5ndGgsIHJjdiwgZmxhZ3MsIGlucC0+dWxwX2luZm8pOworCQlTQ1RQX1RDQl9MT0NLKHN0
Y2IpOworCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJfQor
fQorI2VuZGlmCisKK3ZvaWQKK3NjdHBfYWRkX3RvX3JlYWRxKHN0cnVjdCBzY3RwX2lucGNiICpp
bnAsCisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90
b19yZWFkICpjb250cm9sLAorICAgIHN0cnVjdCBzb2NrYnVmICpzYiwKKyAgICBpbnQgZW5kLAor
ICAgIGludCBpbnBfcmVhZF9sb2NrX2hlbGQsCisgICAgaW50IHNvX2xvY2tlZAorI2lmICFkZWZp
bmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NU
UF9VTlVTRUQKKyNlbmRpZgorICAgICkKK3sKKwkvKgorCSAqIEhlcmUgd2UgbXVzdCBwbGFjZSB0
aGUgY29udHJvbCBvbiB0aGUgZW5kIG9mIHRoZSBzb2NrZXQgcmVhZAorCSAqIHF1ZXVlIEFORCBp
bmNyZW1lbnQgc2JfY2Mgc28gdGhhdCBzZWxlY3Qgd2lsbCB3b3JrIHByb3Blcmx5IG9uCisJICog
cmVhZC4KKwkgKi8KKwlzdHJ1Y3QgbWJ1ZiAqbSwgKnByZXYgPSBOVUxMOworCisJaWYgKGlucCA9
PSBOVUxMKSB7CisJCS8qIEdhaywgVFNOSCEhICovCisjaWZkZWYgSU5WQVJJQU5UUworCQlwYW5p
YygiR2FrLCBpbnAgTlVMTCBvbiBhZGRfdG9fcmVhZHEiKTsKKyNlbmRpZgorCQlyZXR1cm47CisJ
fQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCWlmIChzb19sb2NrZWQpIHsKKwkJc2N0cF9sb2Nr
X2Fzc2VydChTQ1RQX0lOUF9TTyhpbnApKTsKKwl9IGVsc2UgeworCQlzY3RwX3VubG9ja19hc3Nl
cnQoU0NUUF9JTlBfU08oaW5wKSk7CisJfQorI2VuZGlmCisJaWYgKGlucF9yZWFkX2xvY2tfaGVs
ZCA9PSAwKQorCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0NBTlRfUkVBRCkgeworCQlzY3RwX2ZyZWVfcmVtb3Rl
X2FkZHIoY29udHJvbC0+d2hvRnJvbSk7CisJCWlmIChjb250cm9sLT5kYXRhKSB7CisJCQlzY3Rw
X21fZnJlZW0oY29udHJvbC0+ZGF0YSk7CisJCQljb250cm9sLT5kYXRhID0gTlVMTDsKKwkJfQor
CQlzY3RwX2ZyZWVfYV9yZWFkcShzdGNiLCBjb250cm9sKTsKKwkJaWYgKGlucF9yZWFkX2xvY2tf
aGVsZCA9PSAwKQorCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJcmV0dXJuOworCX0K
KwlpZiAoIShjb250cm9sLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pKSB7CisJCWF0b21p
Y19hZGRfaW50KCZpbnAtPnRvdGFsX3JlY3ZzLCAxKTsKKwkJaWYgKCFjb250cm9sLT5kb19ub3Rf
cmVmX3N0Y2IpIHsKKwkJCWF0b21pY19hZGRfaW50KCZzdGNiLT50b3RhbF9yZWN2cywgMSk7CisJ
CX0KKwl9CisJbSA9IGNvbnRyb2wtPmRhdGE7CisJY29udHJvbC0+aGVsZF9sZW5ndGggPSAwOwor
CWNvbnRyb2wtPmxlbmd0aCA9IDA7CisJd2hpbGUgKG0pIHsKKwkJaWYgKFNDVFBfQlVGX0xFTiht
KSA9PSAwKSB7CisJCQkvKiBTa2lwIG1idWZzIHdpdGggTk8gbGVuZ3RoICovCisJCQlpZiAocHJl
diA9PSBOVUxMKSB7CisJCQkJLyogRmlyc3Qgb25lICovCisJCQkJY29udHJvbC0+ZGF0YSA9IHNj
dHBfbV9mcmVlKG0pOworCQkJCW0gPSBjb250cm9sLT5kYXRhOworCQkJfSBlbHNlIHsKKwkJCQlT
Q1RQX0JVRl9ORVhUKHByZXYpID0gc2N0cF9tX2ZyZWUobSk7CisJCQkJbSA9IFNDVFBfQlVGX05F
WFQocHJldik7CisJCQl9CisJCQlpZiAobSA9PSBOVUxMKSB7CisJCQkJY29udHJvbC0+dGFpbF9t
YnVmID0gcHJldjsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCXByZXYgPSBtOworCQlpZiAo
U0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VO
QUJMRSkgeworCQkJc2N0cF9zYmxvZyhzYiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6
c3RjYiwgU0NUUF9MT0dfU0JBTExPQywgU0NUUF9CVUZfTEVOKG0pKTsKKwkJfQorCQlzY3RwX3Ni
YWxsb2Moc3RjYiwgc2IsIG0pOworCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJc2N0cF9zYmxvZyhzYiwgY29u
dHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6c3RjYiwgU0NUUF9MT0dfU0JSRVNVTFQsIDApOwor
CQl9CisJCWF0b21pY19hZGRfaW50KCZjb250cm9sLT5sZW5ndGgsIFNDVFBfQlVGX0xFTihtKSk7
CisJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCX0KKwlpZiAocHJldiAhPSBOVUxMKSB7CisJCWNv
bnRyb2wtPnRhaWxfbWJ1ZiA9IHByZXY7CisJfSBlbHNlIHsKKwkJLyogRXZlcnl0aGluZyBnb3Qg
Y29sbGFwc2VkIG91dD8/ICovCisJCXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9G
cm9tKTsKKwkJc2N0cF9mcmVlX2FfcmVhZHEoc3RjYiwgY29udHJvbCk7CisJCWlmIChpbnBfcmVh
ZF9sb2NrX2hlbGQgPT0gMCkKKwkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisJCXJldHVy
bjsKKwl9CisJaWYgKGVuZCkgeworCQljb250cm9sLT5lbmRfYWRkZWQgPSAxOworCX0KKwlUQUlM
UV9JTlNFUlRfVEFJTCgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwljb250cm9s
LT5vbl9yZWFkX3EgPSAxOworCWlmIChpbnBfcmVhZF9sb2NrX2hlbGQgPT0gMCkKKwkJU0NUUF9J
TlBfUkVBRF9VTkxPQ0soaW5wKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJc2N0cF9p
bnZva2VfcmVjdl9jYWxsYmFjayhpbnAsIHN0Y2IsIGNvbnRyb2wsIGlucF9yZWFkX2xvY2tfaGVs
ZCk7CisjZW5kaWYKKwlpZiAoaW5wICYmIGlucC0+c2N0cF9zb2NrZXQpIHsKKwkJc2N0cF93YWtl
dXBfdGhlX3JlYWRfc29ja2V0KGlucCwgc3RjYiwgc29fbG9ja2VkKTsKKwl9Cit9CisKKy8qKioq
KioqKioqKioqSE9MRCBUSElTIENPTU1FTlQgRk9SIFBBVENIIEZJTEUgT0YKKyAqKioqKioqKioq
KioqQUxURVJOQVRFIFJPVVRJTkcgQ09ERQorICovCisKKy8qKioqKioqKioqKioqSE9MRCBUSElT
IENPTU1FTlQgRk9SIEVORCBPRiBQQVRDSCBGSUxFIE9GCisgKioqKioqKioqKioqKkFMVEVSTkFU
RSBST1VUSU5HIENPREUKKyAqLworCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2dlbmVyYXRlX2NhdXNl
KHVpbnQxNl90IGNvZGUsIGNoYXIgKmluZm8pCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0
IHNjdHBfZ2VuX2Vycm9yX2NhdXNlICpjYXVzZTsKKwlzaXplX3QgaW5mb19sZW47CisJdWludDE2
X3QgbGVuOworCisJaWYgKChjb2RlID09IDApIHx8IChpbmZvID09IE5VTEwpKSB7CisJCXJldHVy
biAoTlVMTCk7CisJfQorCWluZm9fbGVuID0gc3RybGVuKGluZm8pOworCWlmIChpbmZvX2xlbiA+
IChTQ1RQX01BWF9DQVVTRV9MRU5HVEggLSBzaXplb2Yoc3RydWN0IHNjdHBfcGFyYW1oZHIpKSkg
eworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlsZW4gPSAodWludDE2X3QpKHNpemVvZihzdHJ1Y3Qg
c2N0cF9wYXJhbWhkcikgKyBpbmZvX2xlbik7CisJbSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhs
ZW4sIDAsIE1fTk9XQUlULCAxLCBNVF9EQVRBKTsKKwlpZiAobSAhPSBOVUxMKSB7CisJCVNDVFBf
QlVGX0xFTihtKSA9IGxlbjsKKwkJY2F1c2UgPSBtdG9kKG0sIHN0cnVjdCBzY3RwX2dlbl9lcnJv
cl9jYXVzZSAqKTsKKwkJY2F1c2UtPmNvZGUgPSBodG9ucyhjb2RlKTsKKwkJY2F1c2UtPmxlbmd0
aCA9IGh0b25zKGxlbik7CisJCW1lbWNweShjYXVzZS0+aW5mbywgaW5mbywgaW5mb19sZW4pOwor
CX0KKwlyZXR1cm4gKG0pOworfQorCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX2dlbmVyYXRlX25vX3Vz
ZXJfZGF0YV9jYXVzZSh1aW50MzJfdCB0c24pCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0
IHNjdHBfZXJyb3Jfbm9fdXNlcl9kYXRhICpub191c2VyX2RhdGFfY2F1c2U7CisJdWludDE2X3Qg
bGVuOworCisJbGVuID0gKHVpbnQxNl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9lcnJvcl9ub191c2Vy
X2RhdGEpOworCW0gPSBzY3RwX2dldF9tYnVmX2Zvcl9tc2cobGVuLCAwLCBNX05PV0FJVCwgMSwg
TVRfREFUQSk7CisJaWYgKG0gIT0gTlVMTCkgeworCQlTQ1RQX0JVRl9MRU4obSkgPSBsZW47CisJ
CW5vX3VzZXJfZGF0YV9jYXVzZSA9IG10b2QobSwgc3RydWN0IHNjdHBfZXJyb3Jfbm9fdXNlcl9k
YXRhICopOworCQlub191c2VyX2RhdGFfY2F1c2UtPmNhdXNlLmNvZGUgPSBodG9ucyhTQ1RQX0NB
VVNFX05PX1VTRVJfREFUQSk7CisJCW5vX3VzZXJfZGF0YV9jYXVzZS0+Y2F1c2UubGVuZ3RoID0g
aHRvbnMobGVuKTsKKwkJbm9fdXNlcl9kYXRhX2NhdXNlLT50c24gPSBodG9ubCh0c24pOworCX0K
KwlyZXR1cm4gKG0pOworfQorCisjaWZkZWYgU0NUUF9NQkNOVF9MT0dHSU5HCit2b2lkCitzY3Rw
X2ZyZWVfYnVmc3BhY2Uoc3RydWN0IHNjdHBfdGNiICpzdGNiLCBzdHJ1Y3Qgc2N0cF9hc3NvY2lh
dGlvbiAqYXNvYywKKyAgICBzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICp0cDEsIGludCBjaGtfY250
KQoreworCWlmICh0cDEtPmRhdGEgPT0gTlVMTCkgeworCQlyZXR1cm47CisJfQorCWFzb2MtPmNo
dW5rc19vbl9vdXRfcXVldWUgLT0gY2hrX2NudDsKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9NQkNOVF9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xv
Z19tYmNudChTQ1RQX0xPR19NQkNOVF9ERUNSRUFTRSwKKwkJCSAgICAgICBhc29jLT50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSwKKwkJCSAgICAgICB0cDEtPmJvb2tfc2l6ZSwKKwkJCSAgICAgICAw
LAorCQkJICAgICAgIHRwMS0+bWJjbnQpOworCX0KKwlpZiAoYXNvYy0+dG90YWxfb3V0cHV0X3F1
ZXVlX3NpemUgPj0gdHAxLT5ib29rX3NpemUpIHsKKwkJYXRvbWljX2FkZF9pbnQoJmFzb2MtPnRv
dGFsX291dHB1dF9xdWV1ZV9zaXplLCAtdHAxLT5ib29rX3NpemUpOworCX0gZWxzZSB7CisJCWFz
b2MtPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID0gMDsKKwl9CisKKwlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQgJiYgKCgoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0lO
X1RDUFBPT0wpKSB8fAorCQkJCSAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfVENQVFlQRSkpKSkgeworCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5z
Yl9jYyA+PSB0cDEtPmJvb2tfc2l6ZSkgeworCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5z
Yl9jYyAtPSB0cDEtPmJvb2tfc2l6ZTsKKwkJfSBlbHNlIHsKKwkJCXN0Y2ItPnNjdHBfc29ja2V0
LT5zb19zbmQuc2JfY2MgPSAwOworCisJCX0KKwl9Cit9CisKKyNlbmRpZgorCitpbnQKK3NjdHBf
cmVsZWFzZV9wcl9zY3RwX2NodW5rKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBf
dG1pdF9jaHVuayAqdHAxLAorCQkJICAgdWludDhfdCBzZW50LCBpbnQgc29fbG9ja2VkCisjaWYg
IWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKwkJ
CSAgIFNDVFBfVU5VU0VECisjZW5kaWYKKwkpCit7CisJc3RydWN0IHNjdHBfc3RyZWFtX291dCAq
c3RycTsKKwlzdHJ1Y3Qgc2N0cF90bWl0X2NodW5rICpjaGsgPSBOVUxMLCAqdHAyOworCXN0cnVj
dCBzY3RwX3N0cmVhbV9xdWV1ZV9wZW5kaW5nICpzcDsKKwl1aW50MzJfdCBtaWQ7CisJdWludDE2
X3Qgc2lkOworCXVpbnQ4X3QgZm91bmRlb20gPSAwOworCWludCByZXRfc3ogPSAwOworCWludCBu
b3Rkb25lOworCWludCBkb193YWtldXBfcm91dGluZSA9IDA7CisKKyNpZiBkZWZpbmVkKF9fQVBQ
TEVfXykKKwlpZiAoc29fbG9ja2VkKSB7CisJCXNjdHBfbG9ja19hc3NlcnQoU0NUUF9JTlBfU08o
c3RjYi0+c2N0cF9lcCkpOworCX0gZWxzZSB7CisJCXNjdHBfdW5sb2NrX2Fzc2VydChTQ1RQX0lO
UF9TTyhzdGNiLT5zY3RwX2VwKSk7CisJfQorI2VuZGlmCisJc2lkID0gdHAxLT5yZWMuZGF0YS5z
aWQ7CisJbWlkID0gdHAxLT5yZWMuZGF0YS5taWQ7CisJaWYgKHNlbnQgfHwgISh0cDEtPnJlYy5k
YXRhLnJjdl9mbGFncyAmIFNDVFBfREFUQV9GSVJTVF9GUkFHKSkgeworCQlzdGNiLT5hc29jLmFi
YW5kb25lZF9zZW50WzBdKys7CisJCXN0Y2ItPmFzb2MuYWJhbmRvbmVkX3NlbnRbUFJfU0NUUF9Q
T0xJQ1kodHAxLT5mbGFncyldKys7CisJCXN0Y2ItPmFzb2Muc3RybW91dFtzaWRdLmFiYW5kb25l
ZF9zZW50WzBdKys7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJc3Rj
Yi0+YXNvYy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3NlbnRbUFJfU0NUUF9QT0xJQ1kodHAxLT5m
bGFncyldKys7CisjZW5kaWYKKwl9IGVsc2UgeworCQlzdGNiLT5hc29jLmFiYW5kb25lZF91bnNl
bnRbMF0rKzsKKwkJc3RjYi0+YXNvYy5hYmFuZG9uZWRfdW5zZW50W1BSX1NDVFBfUE9MSUNZKHRw
MS0+ZmxhZ3MpXSsrOworCQlzdGNiLT5hc29jLnN0cm1vdXRbc2lkXS5hYmFuZG9uZWRfdW5zZW50
WzBdKys7CisjaWYgZGVmaW5lZChTQ1RQX0RFVEFJTEVEX1NUUl9TVEFUUykKKwkJc3RjYi0+YXNv
Yy5zdHJtb3V0W3NpZF0uYWJhbmRvbmVkX3Vuc2VudFtQUl9TQ1RQX1BPTElDWSh0cDEtPmZsYWdz
KV0rKzsKKyNlbmRpZgorCX0KKwlkbyB7CisJCXJldF9zeiArPSB0cDEtPmJvb2tfc2l6ZTsKKwkJ
aWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7CisJCQlpZiAodHAxLT5zZW50IDwgU0NUUF9EQVRBR1JB
TV9SRVNFTkQpIHsKKwkJCQlzY3RwX2ZsaWdodF9zaXplX2RlY3JlYXNlKHRwMSk7CisJCQkJc2N0
cF90b3RhbF9mbGlnaHRfZGVjcmVhc2Uoc3RjYiwgdHAxKTsKKwkJCX0KKwkJCXNjdHBfZnJlZV9i
dWZzcGFjZShzdGNiLCAmc3RjYi0+YXNvYywgdHAxLCAxKTsKKwkJCXN0Y2ItPmFzb2MucGVlcnNf
cnduZCArPSB0cDEtPnNlbmRfc2l6ZTsKKwkJCXN0Y2ItPmFzb2MucGVlcnNfcnduZCArPSBTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfcGVlcl9jaHVua19vaCk7CisJCQlpZiAoc2VudCkgeworCQkJCXNj
dHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9TRU5UX0RHX0ZBSUwsIHN0Y2IsIDAsIHRwMSwgc29f
bG9ja2VkKTsKKwkJCX0gZWxzZSB7CisJCQkJc2N0cF91bHBfbm90aWZ5KFNDVFBfTk9USUZZX1VO
U0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7CisJCQl9CisJCQlpZiAodHAx
LT5kYXRhKSB7CisJCQkJc2N0cF9tX2ZyZWVtKHRwMS0+ZGF0YSk7CisJCQkJdHAxLT5kYXRhID0g
TlVMTDsKKwkJCX0KKwkJCWRvX3dha2V1cF9yb3V0aW5lID0gMTsKKwkJCWlmIChQUl9TQ1RQX0JV
Rl9FTkFCTEVEKHRwMS0+ZmxhZ3MpKSB7CisJCQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudF9y
ZW1vdmVhYmxlLS07CisJCQl9CisJCX0KKwkJdHAxLT5zZW50ID0gU0NUUF9GT1JXQVJEX1RTTl9T
S0lQOworCQlpZiAoKHRwMS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX05PVF9GUkFH
KSA9PQorCQkgICAgU0NUUF9EQVRBX05PVF9GUkFHKSB7CisJCQkvKiBub3QgZnJhZydlZCB3ZSBh
ZSBkb25lICAgKi8KKwkJCW5vdGRvbmUgPSAwOworCQkJZm91bmRlb20gPSAxOworCQl9IGVsc2Ug
aWYgKHRwMS0+cmVjLmRhdGEucmN2X2ZsYWdzICYgU0NUUF9EQVRBX0xBU1RfRlJBRykgeworCQkJ
LyogZW5kIG9mIGZyYWcsIHdlIGFyZSBkb25lICovCisJCQlub3Rkb25lID0gMDsKKwkJCWZvdW5k
ZW9tID0gMTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBJdHMgYSBiZWdpbiBvciBtaWRkbGUg
cGllY2UsIHdlIG11c3QgbWFyayBhbGwgb2YKKwkJCSAqIGl0CisJCQkgKi8KKwkJCW5vdGRvbmUg
PSAxOworCQkJdHAxID0gVEFJTFFfTkVYVCh0cDEsIHNjdHBfbmV4dCk7CisJCX0KKwl9IHdoaWxl
ICh0cDEgJiYgbm90ZG9uZSk7CisJaWYgKGZvdW5kZW9tID09IDApIHsKKwkJLyoKKwkJICogVGhl
IG11bHRpLXBhcnQgbWVzc2FnZSB3YXMgc2NhdHRlcmVkIGFjcm9zcyB0aGUgc2VuZCBhbmQKKwkJ
ICogc2VudCBxdWV1ZS4KKwkJICovCisJCVRBSUxRX0ZPUkVBQ0hfU0FGRSh0cDEsICZzdGNiLT5h
c29jLnNlbmRfcXVldWUsIHNjdHBfbmV4dCwgdHAyKSB7CisJCQlpZiAoKHRwMS0+cmVjLmRhdGEu
c2lkICE9IHNpZCkgfHwKKwkJCSAgICAoIVNDVFBfTUlEX0VRKHN0Y2ItPmFzb2MuaWRhdGFfc3Vw
cG9ydGVkLCB0cDEtPnJlYy5kYXRhLm1pZCwgbWlkKSkpIHsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
CS8qIHNhdmUgdG8gY2hrIGluIGNhc2Ugd2UgaGF2ZSBzb21lIG9uIHN0cmVhbSBvdXQKKwkJCSAq
IHF1ZXVlLiBJZiBzbyBhbmQgd2UgaGF2ZSBhbiB1bi10cmFuc21pdHRlZCBvbmUKKwkJCSAqIHdl
IGRvbid0IGhhdmUgdG8gZnVkZ2UgdGhlIFRTTi4KKwkJCSAqLworCQkJY2hrID0gdHAxOworCQkJ
cmV0X3N6ICs9IHRwMS0+Ym9va19zaXplOworCQkJc2N0cF9mcmVlX2J1ZnNwYWNlKHN0Y2IsICZz
dGNiLT5hc29jLCB0cDEsIDEpOworCQkJaWYgKHNlbnQpIHsKKwkJCQlzY3RwX3VscF9ub3RpZnko
U0NUUF9OT1RJRllfU0VOVF9ER19GQUlMLCBzdGNiLCAwLCB0cDEsIHNvX2xvY2tlZCk7CisJCQl9
IGVsc2UgeworCQkJCXNjdHBfdWxwX25vdGlmeShTQ1RQX05PVElGWV9VTlNFTlRfREdfRkFJTCwg
c3RjYiwgMCwgdHAxLCBzb19sb2NrZWQpOworCQkJfQorCQkJaWYgKHRwMS0+ZGF0YSkgeworCQkJ
CXNjdHBfbV9mcmVlbSh0cDEtPmRhdGEpOworCQkJCXRwMS0+ZGF0YSA9IE5VTEw7CisJCQl9CisJ
CQkvKiBObyBmbGlnaHQgaW52b2x2ZWQgaGVyZSBib29rIHRoZSBzaXplIHRvIDAgKi8KKwkJCXRw
MS0+Ym9va19zaXplID0gMDsKKwkJCWlmICh0cDEtPnJlYy5kYXRhLnJjdl9mbGFncyAmIFNDVFBf
REFUQV9MQVNUX0ZSQUcpIHsKKwkJCQlmb3VuZGVvbSA9IDE7CisJCQl9CisJCQlkb193YWtldXBf
cm91dGluZSA9IDE7CisJCQl0cDEtPnNlbnQgPSBTQ1RQX0ZPUldBUkRfVFNOX1NLSVA7CisJCQlU
QUlMUV9SRU1PVkUoJnN0Y2ItPmFzb2Muc2VuZF9xdWV1ZSwgdHAxLCBzY3RwX25leHQpOworCQkJ
Lyogb24gdG8gdGhlIHNlbnQgcXVldWUgc28gd2UgY2FuIHdhaXQgZm9yIGl0IHRvIGJlIHBhc3Nl
ZCBieS4gKi8KKwkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnNlbnRfcXVldWUsIHRw
MSwKKwkJCQkJICBzY3RwX25leHQpOworCQkJc3RjYi0+YXNvYy5zZW5kX3F1ZXVlX2NudC0tOwor
CQkJc3RjYi0+YXNvYy5zZW50X3F1ZXVlX2NudCsrOworCQl9CisJfQorCWlmIChmb3VuZGVvbSA9
PSAwKSB7CisJCS8qCisJCSAqIFN0aWxsIG5vIGVvbSBmb3VuZC4gVGhhdCBtZWFucyB0aGVyZQor
CQkgKiBpcyBzdHVmZiBsZWZ0IG9uIHRoZSBzdHJlYW0gb3V0IHF1ZXVlLi4geXVjay4KKwkJICov
CisJCVNDVFBfVENCX1NFTkRfTE9DSyhzdGNiKTsKKwkJc3RycSA9ICZzdGNiLT5hc29jLnN0cm1v
dXRbc2lkXTsKKwkJc3AgPSBUQUlMUV9GSVJTVCgmc3RycS0+b3V0cXVldWUpOworCQlpZiAoc3Ag
IT0gTlVMTCkgeworCQkJc3AtPmRpc2NhcmRfcmVzdCA9IDE7CisJCQkvKgorCQkJICogV2UgbWF5
IG5lZWQgdG8gcHV0IGEgY2h1bmsgb24gdGhlCisJCQkgKiBxdWV1ZSB0aGF0IGhvbGRzIHRoZSBU
U04gdGhhdAorCQkJICogd291bGQgaGF2ZSBiZWVuIHNlbnQgd2l0aCB0aGUgTEFTVAorCQkJICog
Yml0LgorCQkJICovCisJCQlpZiAoY2hrID09IE5VTEwpIHsKKwkJCQkvKiBZZXAsIHdlIGhhdmUg
dG8gKi8KKwkJCQlzY3RwX2FsbG9jX2FfY2h1bmsoc3RjYiwgY2hrKTsKKwkJCQlpZiAoY2hrID09
IE5VTEwpIHsKKwkJCQkJLyogd2UgYXJlIGhvc2VkLiBBbGwgd2UgY2FuCisJCQkJCSAqIGRvIGlz
IG5vdGhpbmcuLiB3aGljaCB3aWxsCisJCQkJCSAqIGNhdXNlIGFuIGFib3J0IGlmIHRoZSBwZWVy
IGlzCisJCQkJCSAqIHBheWluZyBhdHRlbnRpb24uCisJCQkJCSAqLworCQkJCQlnb3RvIG9oX3dl
bGw7CisJCQkJfQorCQkJCW1lbXNldChjaGssIDAsIHNpemVvZigqY2hrKSk7CisJCQkJY2hrLT5y
ZWMuZGF0YS5yY3ZfZmxhZ3MgPSAwOworCQkJCWNoay0+c2VudCA9IFNDVFBfRk9SV0FSRF9UU05f
U0tJUDsKKwkJCQljaGstPmFzb2MgPSAmc3RjYi0+YXNvYzsKKwkJCQlpZiAoc3RjYi0+YXNvYy5p
ZGF0YV9zdXBwb3J0ZWQgPT0gMCkgeworCQkJCQlpZiAoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9V
Tk9SREVSRUQpIHsKKwkJCQkJCWNoay0+cmVjLmRhdGEubWlkID0gMDsKKwkJCQkJfSBlbHNlIHsK
KwkJCQkJCWNoay0+cmVjLmRhdGEubWlkID0gc3RycS0+bmV4dF9taWRfb3JkZXJlZDsKKwkJCQkJ
fQorCQkJCX0gZWxzZSB7CisJCQkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBTQ1RQX1VOT1JERVJF
RCkgeworCQkJCQkJY2hrLT5yZWMuZGF0YS5taWQgPSBzdHJxLT5uZXh0X21pZF91bm9yZGVyZWQ7
CisJCQkJCX0gZWxzZSB7CisJCQkJCQljaGstPnJlYy5kYXRhLm1pZCA9IHN0cnEtPm5leHRfbWlk
X29yZGVyZWQ7CisJCQkJCX0KKwkJCQl9CisJCQkJY2hrLT5yZWMuZGF0YS5zaWQgPSBzcC0+c2lk
OworCQkJCWNoay0+cmVjLmRhdGEucHBpZCA9IHNwLT5wcGlkOworCQkJCWNoay0+cmVjLmRhdGEu
Y29udGV4dCA9IHNwLT5jb250ZXh0OworCQkJCWNoay0+ZmxhZ3MgPSBzcC0+YWN0X2ZsYWdzOwor
CQkJCWNoay0+d2hvVG8gPSBOVUxMOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmlu
ZWQoX19QYW5kYV9fKQorCQkJCWNoay0+cmVjLmRhdGEudHNuID0gYXRvbWljX2ZldGNoYWRkX2lu
dCgmc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSwgMSk7CisjZWxzZQorCQkJCWNoay0+cmVjLmRhdGEu
dHNuID0gc3RjYi0+YXNvYy5zZW5kaW5nX3NlcSsrOworI2VuZGlmCisJCQkJc3RycS0+Y2h1bmtz
X29uX3F1ZXVlcysrOworCQkJCVRBSUxRX0lOU0VSVF9UQUlMKCZzdGNiLT5hc29jLnNlbnRfcXVl
dWUsIGNoaywgc2N0cF9uZXh0KTsKKwkJCQlzdGNiLT5hc29jLnNlbnRfcXVldWVfY250Kys7CisJ
CQkJc3RjYi0+YXNvYy5wcl9zY3RwX2NudCsrOworCQkJfQorCQkJY2hrLT5yZWMuZGF0YS5yY3Zf
ZmxhZ3MgfD0gU0NUUF9EQVRBX0xBU1RfRlJBRzsKKwkJCWlmIChzcC0+c2luZm9fZmxhZ3MgJiBT
Q1RQX1VOT1JERVJFRCkgeworCQkJCWNoay0+cmVjLmRhdGEucmN2X2ZsYWdzIHw9IFNDVFBfREFU
QV9VTk9SREVSRUQ7CisJCQl9CisJCQlpZiAoc3RjYi0+YXNvYy5pZGF0YV9zdXBwb3J0ZWQgPT0g
MCkgeworCQkJCWlmICgoc3AtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpID09IDApIHsK
KwkJCQkJc3RycS0+bmV4dF9taWRfb3JkZXJlZCsrOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJ
aWYgKHNwLT5zaW5mb19mbGFncyAmIFNDVFBfVU5PUkRFUkVEKSB7CisJCQkJCXN0cnEtPm5leHRf
bWlkX3Vub3JkZXJlZCsrOworCQkJCX0gZWxzZSB7CisJCQkJCXN0cnEtPm5leHRfbWlkX29yZGVy
ZWQrKzsKKwkJCQl9CisJCQl9CisJCW9oX3dlbGw6CisJCQlpZiAoc3AtPmRhdGEpIHsKKwkJCQkv
KiBQdWxsIGFueSBkYXRhIHRvIGZyZWUgdXAgdGhlIFNCIGFuZAorCQkJCSAqIGFsbG93IHNlbmRl
ciB0byAiYWRkIG1vcmUiIHdoaWxlIHdlCisJCQkJICogd2lsbCB0aHJvdyBhd2F5IDotKQorCQkJ
CSAqLworCQkJCXNjdHBfZnJlZV9zcGJ1ZnNwYWNlKHN0Y2IsICZzdGNiLT5hc29jLCBzcCk7CisJ
CQkJcmV0X3N6ICs9IHNwLT5sZW5ndGg7CisJCQkJZG9fd2FrZXVwX3JvdXRpbmUgPSAxOworCQkJ
CXNwLT5zb21lX3Rha2VuID0gMTsKKwkJCQlzY3RwX21fZnJlZW0oc3AtPmRhdGEpOworCQkJCXNw
LT5kYXRhID0gTlVMTDsKKwkJCQlzcC0+dGFpbF9tYnVmID0gTlVMTDsKKwkJCQlzcC0+bGVuZ3Ro
ID0gMDsKKwkJCX0KKwkJfQorCQlTQ1RQX1RDQl9TRU5EX1VOTE9DSyhzdGNiKTsKKwl9CisJaWYg
KGRvX3dha2V1cF9yb3V0aW5lKSB7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQo
U0NUUF9TT19MT0NLX1RFU1RJTkcpCisJCXN0cnVjdCBzb2NrZXQgKnNvOworCisJCXNvID0gU0NU
UF9JTlBfU08oc3RjYi0+c2N0cF9lcCk7CisJCWlmICghc29fbG9ja2VkKSB7CisJCQlhdG9taWNf
YWRkX2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQkJU0NUUF9TT0NLRVRfTE9DSyhzbywgMSk7CisJCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOwor
CQkJYXRvbWljX3N1YnRyYWN0X2ludCgmc3RjYi0+YXNvYy5yZWZjbnQsIDEpOworCQkJaWYgKHN0
Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0NMT1NFRF9TT0NLRVQpIHsKKwkJCQkvKiBhc3Nv
YyB3YXMgZnJlZWQgd2hpbGUgd2Ugd2VyZSB1bmxvY2tlZCAqLworCQkJCVNDVFBfU09DS0VUX1VO
TE9DSyhzbywgMSk7CisJCQkJcmV0dXJuIChyZXRfc3opOworCQkJfQorCQl9CisjZW5kaWYKKwkJ
c2N0cF9zb3d3YWtldXAoc3RjYi0+c2N0cF9lcCwgc3RjYi0+c2N0cF9zb2NrZXQpOworI2lmIGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQlpZiAo
IXNvX2xvY2tlZCkgeworCQkJU0NUUF9TT0NLRVRfVU5MT0NLKHNvLCAxKTsKKwkJfQorI2VuZGlm
CisJfQorCXJldHVybiAocmV0X3N6KTsKK30KKworLyoKKyAqIGNoZWNrcyB0byBzZWUgaWYgdGhl
IGdpdmVuIGFkZHJlc3MsIHNhLCBpcyBvbmUgdGhhdCBpcyBjdXJyZW50bHkga25vd24gYnkKKyAq
IHRoZSBrZXJuZWwgbm90ZTogY2FuJ3QgZGlzdGluZ3Vpc2ggdGhlIHNhbWUgYWRkcmVzcyBvbiBt
dWx0aXBsZSBpbnRlcmZhY2VzCisgKiBhbmQgZG9lc24ndCBoYW5kbGUgbXVsdGlwbGUgYWRkcmVz
c2VzIHdpdGggZGlmZmVyZW50IHpvbmUvc2NvcGUgaWQncyBub3RlOgorICogaWZhX2lmd2l0aGFk
ZHIoKSBjb21wYXJlcyB0aGUgZW50aXJlIHNvY2thZGRyIHN0cnVjdAorICovCitzdHJ1Y3Qgc2N0
cF9pZmEgKgorc2N0cF9maW5kX2lmYV9pbl9lcChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIsCisJCSAgICBpbnQgaG9sZHNfbG9jaykKK3sKKwlzdHJ1Y3Qgc2N0
cF9sYWRkciAqbGFkZHI7CisKKwlpZiAoaG9sZHNfbG9jayA9PSAwKSB7CisJCVNDVFBfSU5QX1JM
T0NLKGlucCk7CisJfQorCisJTElTVF9GT1JFQUNIKGxhZGRyLCAmaW5wLT5zY3RwX2FkZHJfbGlz
dCwgc2N0cF9ueHRfYWRkcikgeworCQlpZiAobGFkZHItPmlmYSA9PSBOVUxMKQorCQkJY29udGlu
dWU7CisJCWlmIChhZGRyLT5zYV9mYW1pbHkgIT0gbGFkZHItPmlmYS0+YWRkcmVzcy5zYS5zYV9m
YW1pbHkpCisJCQljb250aW51ZTsKKyNpZmRlZiBJTkVUCisJCWlmIChhZGRyLT5zYV9mYW1pbHkg
PT0gQUZfSU5FVCkgeworCQkJaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9h
ZGRyLnNfYWRkciA9PQorCQkJICAgIGxhZGRyLT5pZmEtPmFkZHJlc3Muc2luLnNpbl9hZGRyLnNf
YWRkcikgeworCQkJCS8qIGZvdW5kIGhpbS4gKi8KKwkJCQlpZiAoaG9sZHNfbG9jayA9PSAwKSB7
CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJcmV0dXJuIChsYWRkci0+
aWZhKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYg
KGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VR
VUFMKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkciwKKwkJCQkJCSAmbGFkZHItPmlmYS0+YWRk
cmVzcy5zaW42KSkgeworCQkJCS8qIGZvdW5kIGhpbS4gKi8KKwkJCQlpZiAoaG9sZHNfbG9jayA9
PSAwKSB7CisJCQkJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJCQl9CisJCQkJcmV0dXJuIChs
YWRkci0+aWZhKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0NPTk4pIHsKKwkJCWlm
ICgoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkciktPnNjb25uX2FkZHIgPT0gbGFkZHItPmlm
YS0+YWRkcmVzcy5zY29ubi5zY29ubl9hZGRyKSB7CisJCQkJLyogZm91bmQgaGltLiAqLworCQkJ
CWlmIChob2xkc19sb2NrID09IDApIHsKKwkJCQkJU0NUUF9JTlBfUlVOTE9DSyhpbnApOworCQkJ
CX0KKwkJCQlyZXR1cm4gKGxhZGRyLT5pZmEpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5k
aWYKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkgeworCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJfQorCXJldHVybiAoTlVMTCk7Cit9CisKK3VpbnQzMl90CitzY3RwX2dldF9pZmFfaGFzaF92
YWwoc3RydWN0IHNvY2thZGRyICphZGRyKQoreworCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7
CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwl7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiAq
c2luOworCisJCXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyOworCQlyZXR1cm4gKHNp
bi0+c2luX2FkZHIuc19hZGRyIF4gKHNpbi0+c2luX2FkZHIuc19hZGRyID4+IDE2KSk7CisJfQor
I2VuZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCXsKKwkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luNjsKKwkJdWludDMyX3QgaGFzaF9vZl9hZGRyOworCisJCXNpbjYgPSAoc3Ry
dWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisjaWYgIWRlZmluZWQoX19XaW5kb3dzX18pICYmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RhcndpbikgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJaGFzaF9vZl9h
ZGRyID0gKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMF0gKworCQkJCXNpbjYtPnNpbjZfYWRk
ci5zNl9hZGRyMzJbMV0gKworCQkJCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMl0gKworCQkJ
CXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbM10pOworI2Vsc2UKKwkJaGFzaF9vZl9hZGRyID0g
KCgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVswXSArCisJCQkJKCh1aW50MzJfdCAqKSZz
aW42LT5zaW42X2FkZHIpWzFdICsKKwkJCQkoKHVpbnQzMl90ICopJnNpbjYtPnNpbjZfYWRkcilb
Ml0gKworCQkJCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVszXSk7CisjZW5kaWYKKwkJ
aGFzaF9vZl9hZGRyID0gKGhhc2hfb2ZfYWRkciBeIChoYXNoX29mX2FkZHIgPj4gMTYpKTsKKwkJ
cmV0dXJuIChoYXNoX29mX2FkZHIpOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3Bh
Y2VfXykKKwljYXNlIEFGX0NPTk46CisJeworCQlzdHJ1Y3Qgc29ja2FkZHJfY29ubiAqc2Nvbm47
CisJCXVpbnRwdHJfdCB0ZW1wOworCisJCXNjb25uID0gKHN0cnVjdCBzb2NrYWRkcl9jb25uICop
YWRkcjsKKwkJdGVtcCA9ICh1aW50cHRyX3Qpc2Nvbm4tPnNjb25uX2FkZHI7CisJCXJldHVybiAo
KHVpbnQzMl90KSh0ZW1wIF4gKHRlbXAgPj4gMTYpKSk7CisJfQorI2VuZGlmCisJZGVmYXVsdDoK
KwkJYnJlYWs7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0cnVjdCBzY3RwX2lmYSAqCitzY3Rw
X2ZpbmRfaWZhX2J5X2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyLCB1aW50MzJfdCB2cmZfaWQs
IGludCBob2xkc19sb2NrKQoreworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmFwOworCXN0cnVj
dCBzY3RwX3ZyZiAqdnJmOworCXN0cnVjdCBzY3RwX2lmYWxpc3QgKmhhc2hfaGVhZDsKKwl1aW50
MzJfdCBoYXNoX29mX2FkZHI7CisKKwlpZiAoaG9sZHNfbG9jayA9PSAwKQorCQlTQ1RQX0lQSV9B
RERSX1JMT0NLKCk7CisKKwl2cmYgPSBzY3RwX2ZpbmRfdnJmKHZyZl9pZCk7CisJaWYgKHZyZiA9
PSBOVUxMKSB7CisJCWlmIChob2xkc19sb2NrID09IDApCisJCQlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwloYXNoX29mX2FkZHIgPSBzY3RwX2dldF9p
ZmFfaGFzaF92YWwoYWRkcik7CisKKwloYXNoX2hlYWQgPSAmdnJmLT52cmZfYWRkcl9oYXNoWyho
YXNoX29mX2FkZHIgJiB2cmYtPnZyZl9hZGRyX2hhc2htYXJrKV07CisJaWYgKGhhc2hfaGVhZCA9
PSBOVUxMKSB7CisJCVNDVFBfUFJJTlRGKCJoYXNoX29mX2FkZHI6JXggbWFzazoleCB0YWJsZTol
eCAtICIsCisJCQkgICAgaGFzaF9vZl9hZGRyLCAodWludDMyX3QpdnJmLT52cmZfYWRkcl9oYXNo
bWFyaywKKwkJCSAgICAodWludDMyX3QpKGhhc2hfb2ZfYWRkciAmIHZyZi0+dnJmX2FkZHJfaGFz
aG1hcmspKTsKKwkJc2N0cF9wcmludF9hZGRyZXNzKGFkZHIpOworCQlTQ1RQX1BSSU5URigiTm8g
c3VjaCBidWNrZXQgZm9yIGFkZHJlc3NcbiIpOworCQlpZiAoaG9sZHNfbG9jayA9PSAwKQorCQkJ
U0NUUF9JUElfQUREUl9SVU5MT0NLKCk7CisKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJTElTVF9G
T1JFQUNIKHNjdHBfaWZhcCwgaGFzaF9oZWFkLCBuZXh0X2J1Y2tldCkgeworCQlpZiAoYWRkci0+
c2FfZmFtaWx5ICE9IHNjdHBfaWZhcC0+YWRkcmVzcy5zYS5zYV9mYW1pbHkpCisJCQljb250aW51
ZTsKKyNpZmRlZiBJTkVUCisJCWlmIChhZGRyLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJ
aWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopYWRkciktPnNpbl9hZGRyLnNfYWRkciA9PQorCQkJ
ICAgIHNjdHBfaWZhcC0+YWRkcmVzcy5zaW4uc2luX2FkZHIuc19hZGRyKSB7CisJCQkJLyogZm91
bmQgaGltLiAqLworCQkJCWlmIChob2xkc19sb2NrID09IDApCisJCQkJCVNDVFBfSVBJX0FERFJf
UlVOTE9DSygpOworCQkJCXJldHVybiAoc2N0cF9pZmFwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJ
fQorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVU
NikgeworCQkJaWYgKFNDVFA2X0FSRV9BRERSX0VRVUFMKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICop
YWRkciwKKwkJCQkJCSAmc2N0cF9pZmFwLT5hZGRyZXNzLnNpbjYpKSB7CisJCQkJLyogZm91bmQg
aGltLiAqLworCQkJCWlmIChob2xkc19sb2NrID09IDApCisJCQkJCVNDVFBfSVBJX0FERFJfUlVO
TE9DSygpOworCQkJCXJldHVybiAoc2N0cF9pZmFwKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQlpZiAoYWRkci0+c2FfZmFtaWx5
ID09IEFGX0NPTk4pIHsKKwkJCWlmICgoKHN0cnVjdCBzb2NrYWRkcl9jb25uICopYWRkciktPnNj
b25uX2FkZHIgPT0gc2N0cF9pZmFwLT5hZGRyZXNzLnNjb25uLnNjb25uX2FkZHIpIHsKKwkJCQkv
KiBmb3VuZCBoaW0uICovCisJCQkJaWYgKGhvbGRzX2xvY2sgPT0gMCkKKwkJCQkJU0NUUF9JUElf
QUREUl9SVU5MT0NLKCk7CisJCQkJcmV0dXJuIChzY3RwX2lmYXApOworCQkJCWJyZWFrOworCQkJ
fQorCQl9CisjZW5kaWYKKwl9CisJaWYgKGhvbGRzX2xvY2sgPT0gMCkKKwkJU0NUUF9JUElfQURE
Ul9SVU5MT0NLKCk7CisJcmV0dXJuIChOVUxMKTsKK30KKworc3RhdGljIHZvaWQKK3NjdHBfdXNl
cl9yY3ZkKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgdWludDMyX3QgKmZyZWVkX3NvX2ZhciwgaW50
IGhvbGRfcmxvY2ssCisJICAgICAgIHVpbnQzMl90IHJ3bmRfcmVxKQoreworCS8qIFVzZXIgcHVs
bGVkIHNvbWUgZGF0YSwgZG8gd2UgbmVlZCBhIHJ3bmQgdXBkYXRlPyAqLworCWludCByX3VubG9j
a2VkID0gMDsKKwl1aW50MzJfdCBkaWYsIHJ3bmQ7CisJc3RydWN0IHNvY2tldCAqc28gPSBOVUxM
OworCisJaWYgKHN0Y2IgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJYXRvbWljX2FkZF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAxKTsKKworCWlmIChzdGNiLT5hc29jLnN0YXRlICYgKFNDVFBfU1RB
VEVfQUJPVVRfVE9fQkVfRlJFRUQgfAorCQkJCVNDVFBfU1RBVEVfU0hVVERPV05fUkVDRUlWRUQg
fAorCQkJCVNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQpKSB7CisJCS8qIFByZS1jaGVjayBJ
ZiB3ZSBhcmUgZnJlZWluZyBubyB1cGRhdGUgKi8KKwkJZ290byBub19sb2NrOworCX0KKwlTQ1RQ
X0lOUF9JTkNSX1JFRihzdGNiLT5zY3RwX2VwKTsKKwlpZiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBf
ZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkgICAgKHN0Y2ItPnNjdHBf
ZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfQUxMR09ORSkpIHsKKwkJZ290
byBvdXQ7CisJfQorCXNvID0gc3RjYi0+c2N0cF9zb2NrZXQ7CisJaWYgKHNvID09IE5VTEwpIHsK
KwkJZ290byBvdXQ7CisJfQorCWF0b21pY19hZGRfaW50KCZzdGNiLT5mcmVlZF9ieV9zb3Jjdl9z
aW5jZWxhc3QsICpmcmVlZF9zb19mYXIpOworCS8qIEhhdmUgeW91IGhhdmUgZnJlZWQgZW5vdWdo
IHRvIGxvb2sgKi8KKwkqZnJlZWRfc29fZmFyID0gMDsKKwkvKiBZZXAsIGl0cyB3b3J0aCBhIGxv
b2sgYW5kIHRoZSBsb2NrIG92ZXJoZWFkICovCisKKwkvKiBGaWd1cmUgb3V0IHdoYXQgdGhlIHJ3
bmQgd291bGQgYmUgKi8KKwlyd25kID0gc2N0cF9jYWxjX3J3bmQoc3RjYiwgJnN0Y2ItPmFzb2Mp
OworCWlmIChyd25kID49IHN0Y2ItPmFzb2MubXlfbGFzdF9yZXBvcnRlZF9yd25kKSB7CisJCWRp
ZiA9IHJ3bmQgLSBzdGNiLT5hc29jLm15X2xhc3RfcmVwb3J0ZWRfcnduZDsKKwl9IGVsc2Ugewor
CQlkaWYgPSAwOworCX0KKwlpZiAoZGlmID49IHJ3bmRfcmVxKSB7CisJCWlmIChob2xkX3Jsb2Nr
KSB7CisJCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhzdGNiLT5zY3RwX2VwKTsKKwkJCXJfdW5sb2Nr
ZWQgPSAxOworCQl9CisJCWlmIChzdGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9U
T19CRV9GUkVFRCkgeworCQkJLyoKKwkJCSAqIE9uZSBsYXN0IGNoZWNrIGJlZm9yZSB3ZSBhbGxv
dyB0aGUgZ3V5IHBvc3NpYmx5CisJCQkgKiB0byBnZXQgaW4uIFRoZXJlIGlzIGEgcmFjZSwgd2hl
cmUgdGhlIGd1eSBoYXMgbm90CisJCQkgKiByZWFjaGVkIHRoZSBnYXRlLiBJbiB0aGF0IGNhc2UK
KwkJCSAqLworCQkJZ290byBvdXQ7CisJCX0KKwkJU0NUUF9UQ0JfTE9DSyhzdGNiKTsKKwkJaWYg
KHN0Y2ItPmFzb2Muc3RhdGUgJiBTQ1RQX1NUQVRFX0FCT1VUX1RPX0JFX0ZSRUVEKSB7CisJCQkv
KiBObyByZXBvcnRzIGhlcmUgKi8KKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCWdvdG8g
b3V0OworCQl9CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3d1X3NhY2tzX3NlbnQpOworCQlzY3Rw
X3NlbmRfc2FjayhzdGNiLCBTQ1RQX1NPX0xPQ0tFRCk7CisKKwkJc2N0cF9jaHVua19vdXRwdXQo
c3RjYi0+c2N0cF9lcCwgc3RjYiwKKwkJCQkgIFNDVFBfT1VUUFVUX0ZST01fVVNSX1JDVkQsIFND
VFBfU09fTE9DS0VEKTsKKwkJLyogbWFrZSBzdXJlIG5vIHRpbWVyIGlzIHJ1bm5pbmcgKi8KKwkJ
c2N0cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9SRUNWLCBzdGNiLT5zY3RwX2VwLCBzdGNi
LCBOVUxMLAorCQkgICAgICAgICAgICAgICAgU0NUUF9GUk9NX1NDVFBVVElMICsgU0NUUF9MT0Nf
Nik7CisJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwl9IGVsc2UgeworCQkvKiBVcGRhdGUgaG93
IG11Y2ggd2UgaGF2ZSBwZW5kaW5nICovCisJCXN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFz
dCA9IGRpZjsKKwl9Cisgb3V0OgorCWlmIChzbyAmJiByX3VubG9ja2VkICYmIGhvbGRfcmxvY2sp
IHsKKwkJU0NUUF9JTlBfUkVBRF9MT0NLKHN0Y2ItPnNjdHBfZXApOworCX0KKworCVNDVFBfSU5Q
X0RFQ1JfUkVGKHN0Y2ItPnNjdHBfZXApOworIG5vX2xvY2s6CisJYXRvbWljX2FkZF9pbnQoJnN0
Y2ItPmFzb2MucmVmY250LCAtMSk7CisJcmV0dXJuOworfQorCitpbnQKK3NjdHBfc29yZWN2bXNn
KHN0cnVjdCBzb2NrZXQgKnNvLAorICAgIHN0cnVjdCB1aW8gKnVpbywKKyAgICBzdHJ1Y3QgbWJ1
ZiAqKm1wLAorICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbSwKKyAgICBpbnQgZnJvbWxlbiwKKyAg
ICBpbnQgKm1zZ19mbGFncywKKyAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbywKKyAg
ICBpbnQgZmlsbGluZ19zaW5mbykKK3sKKwkvKgorCSAqIE1TRyBmbGFncyB3ZSB3aWxsIGxvb2sg
YXQgTVNHX0RPTlRXQUlUIC0gbm9uLWJsb2NraW5nIElPLgorCSAqIE1TR19QRUVLIC0gTG9vayBk
b24ndCB0b3VjaCA6LUQgKG9ubHkgdmFsaWQgd2l0aCBPVVQgbWJ1ZiBjb3B5CisJICogbXA9TlVM
TCB0aHVzIHVpbyBpcyB0aGUgY29weSBtZXRob2QgdG8gdXNlcmxhbmQpIE1TR19XQUlUQUxMIC0g
Pz8KKwkgKiBPbiB0aGUgd2F5IG91dCB3ZSBtYXkgc2VuZCBvdXQgYW55IGNvbWJpbmF0aW9uIG9m
OgorCSAqIE1TR19OT1RJRklDQVRJT04gTVNHX0VPUgorCSAqCisJICovCisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucCA9IE5VTEw7CisJaW50IG15X2xlbiA9IDA7CisJaW50IGNwX2xlbiA9IDAsIGVy
cm9yID0gMDsKKwlzdHJ1Y3Qgc2N0cF9xdWV1ZWRfdG9fcmVhZCAqY29udHJvbCA9IE5VTEwsICpj
dGwgPSBOVUxMLCAqbnh0ID0gTlVMTDsKKwlzdHJ1Y3QgbWJ1ZiAqbSA9IE5VTEw7CisJc3RydWN0
IHNjdHBfdGNiICpzdGNiID0gTlVMTDsKKwlpbnQgd2FrZXVwX3JlYWRfc29ja2V0ID0gMDsKKwlp
bnQgZnJlZWNudF9hcHBsaWVkID0gMDsKKwlpbnQgb3V0X2ZsYWdzID0gMCwgaW5fZmxhZ3MgPSAw
OworCWludCBibG9ja19hbGxvd2VkID0gMTsKKwl1aW50MzJfdCBmcmVlZF9zb19mYXIgPSAwOwor
CXVpbnQzMl90IGNvcGllZF9zb19mYXIgPSAwOworCWludCBpbl9lZW9yX21vZGUgPSAwOworCWlu
dCBub19yY3ZfbmVlZGVkID0gMDsKKwl1aW50MzJfdCByd25kX3JlcSA9IDA7CisJaW50IGhvbGRf
c2Jsb2NrID0gMDsKKwlpbnQgaG9sZF9ybG9jayA9IDA7CisJc3NpemVfdCBzbGVuID0gMDsKKwl1
aW50MzJfdCBoZWxkX2xlbmd0aCA9IDA7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19G
cmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJaW50IHNvY2tidWZfbG9jayA9IDA7CisjZW5kaWYK
KworCWlmICh1aW8gPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJ
fQorCisJaWYgKG1zZ19mbGFncykgeworCQlpbl9mbGFncyA9ICptc2dfZmxhZ3M7CisJCWlmIChp
bl9mbGFncyAmIE1TR19QRUVLKQorCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVhZF9wZWVrcyk7
CisJfSBlbHNlIHsKKwkJaW5fZmxhZ3MgPSAwOworCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykK
KyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJc2xlbiA9IHVpby0+dWlvX3Jlc2lkOworI2Vs
c2UKKwlzbGVuID0gdWlvX3Jlc2lkKHVpbyk7CisjZW5kaWYKKyNlbHNlCisJc2xlbiA9IHVpby0+
dWlvX3Jlc2lkOworI2VuZGlmCisKKwkvKiBQdWxsIGluIGFuZCBzZXQgdXAgb3VyIGludCBmbGFn
cyAqLworCWlmIChpbl9mbGFncyAmIE1TR19PT0IpIHsKKwkJLyogT3V0IG9mIGJhbmQncyBOT1Qg
c3VwcG9ydGVkICovCisJCXJldHVybiAoRU9QTk9UU1VQUCk7CisJfQorCWlmICgoaW5fZmxhZ3Mg
JiBNU0dfUEVFSykgJiYgKG1wICE9IE5VTEwpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCXJldHVybiAoRUlO
VkFMKTsKKwl9CisJaWYgKChpbl9mbGFncyAmIChNU0dfRE9OVFdBSVQKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMAorCQkJIHwgTVNHX05CSU8K
KyNlbmRpZgorCQkgICAgICkpIHx8CisJICAgIFNDVFBfU09fSVNfTkJJTyhzbykpIHsKKwkJYmxv
Y2tfYWxsb3dlZCA9IDA7CisJfQorCS8qIHNldHVwIHRoZSBlbmRwb2ludCAqLworCWlucCA9IChz
dHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBF
RkFVTFQpOworCQlyZXR1cm4gKEVGQVVMVCk7CisJfQorCXJ3bmRfcmVxID0gKFNDVFBfU0JfTElN
SVRfUkNWKHNvKSA+PiBTQ1RQX1JXTkRfSElXQVRfU0hJRlQpOworCS8qIE11c3QgYmUgYXQgbGVh
c3QgYSBNVFUncyB3b3J0aCAqLworCWlmIChyd25kX3JlcSA8IFNDVFBfTUlOX1JXTkQpCisJCXJ3
bmRfcmVxID0gU0NUUF9NSU5fUldORDsKKwlpbl9lZW9yX21vZGUgPSBzY3RwX2lzX2ZlYXR1cmVf
b24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFBMSUNJVF9FT1IpOworCWlmIChTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1JFQ1ZfUldORF9MT0dHSU5HX0VOQUJMRSkg
eworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJ
c2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVIsCisJCQkgICAgICAgcnduZF9yZXEsIGlu
X2Vlb3JfbW9kZSwgc28tPnNvX3Jjdi5zYl9jYywgdWlvLT51aW9fcmVzaWQpOworI2Vsc2UKKwkJ
c2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVIsCisJCQkgICAgICAgcnduZF9yZXEsIGlu
X2Vlb3JfbW9kZSwgc28tPnNvX3Jjdi5zYl9jYywgdWlvX3Jlc2lkKHVpbykpOworI2VuZGlmCisj
ZWxzZQorCQlzY3RwX21pc2NfaW50cyhTQ1RQX1NPUkVDVl9FTlRFUiwKKwkJCSAgICAgICByd25k
X3JlcSwgaW5fZWVvcl9tb2RlLCBzby0+c29fcmN2LnNiX2NjLCAodWludDMyX3QpdWlvLT51aW9f
cmVzaWQpOworI2VuZGlmCisJfQorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVC
U0RfdmVyc2lvbiA8IDcwMDAwMCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCVNPQ0tCVUZf
TE9DSygmc28tPnNvX3Jjdik7CisJaG9sZF9zYmxvY2sgPSAxOworI2VuZGlmCisJaWYgKFNDVFBf
QkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmU0NUUF9SRUNWX1JXTkRfTE9HR0lOR19F
TkFCTEUpIHsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BB
UkQpCisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAgcndu
ZF9yZXEsIGJsb2NrX2FsbG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpby0+dWlvX3Jlc2lkKTsK
KyNlbHNlCisJCXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0VOVEVSUEwsCisJCQkgICAgICAg
cnduZF9yZXEsIGJsb2NrX2FsbG93ZWQsIHNvLT5zb19yY3Yuc2JfY2MsIHVpb19yZXNpZCh1aW8p
KTsKKyNlbmRpZgorI2Vsc2UKKwkJc2N0cF9taXNjX2ludHMoU0NUUF9TT1JFQ1ZfRU5URVJQTCwK
KwkJCSAgICAgICByd25kX3JlcSwgYmxvY2tfYWxsb3dlZCwgc28tPnNvX3Jjdi5zYl9jYywgKHVp
bnQzMl90KXVpby0+dWlvX3Jlc2lkKTsKKyNlbmRpZgorCX0KKworI2lmIGRlZmluZWQoX19BUFBM
RV9fKQorCWVycm9yID0gc2Jsb2NrKCZzby0+c29fcmN2LCBTQkxPQ0tXQUlUKGluX2ZsYWdzKSk7
CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJZXJyb3IgPSBzYmxvY2soJnNv
LT5zb19yY3YsIChibG9ja19hbGxvd2VkID8gU0JMX1dBSVQgOiAwKSk7CisjZW5kaWYKKwlpZiAo
ZXJyb3IpIHsKKwkJZ290byByZWxlYXNlX3VubG9ja2VkOworCX0KKyNpZiBkZWZpbmVkKF9fRnJl
ZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA3MDAwMDAKKyAgICAgICAgc29ja2J1Zl9s
b2NrID0gMTsKKyNlbmRpZgorIHJlc3RhcnQ6CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uIDwgNzAwMDAwKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJ
aWYgKGhvbGRfc2Jsb2NrID09IDApIHsKKwkJU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKwkJ
aG9sZF9zYmxvY2sgPSAxOworCX0KKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCXNi
dW5sb2NrKCZzby0+c29fcmN2LCAxKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA3MDAwMDAKKwlzYnVubG9jaygmc28tPnNvX3Jjdik7
CisjZW5kaWYKKworIHJlc3RhcnRfbm9zYmxvY2tzOgorCWlmIChob2xkX3NibG9jayA9PSAwKSB7
CisJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMTsKKwl9CisJ
aWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19TT0NLRVRfR09ORSkgfHwKKwkg
ICAgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9BTExHT05FKSkgewor
CQlnb3RvIG91dDsKKwl9CisjaWYgKGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID4gNTAwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCWlmICgoc28tPnNvX3Jj
di5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgJiYgKHNvLT5zb19yY3Yuc2JfY2MgPT0gMCkp
IHsKKyNlbHNlCisJaWYgKChzby0+c29fc3RhdGUgJiBTU19DQU5UUkNWTU9SRSkgJiYgKHNvLT5z
b19yY3Yuc2JfY2MgPT0gMCkpIHsKKyNlbmRpZgorCQlpZiAoc28tPnNvX2Vycm9yKSB7CisJCQll
cnJvciA9IHNvLT5zb19lcnJvcjsKKwkJCWlmICgoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkK
KwkJCQlzby0+c29fZXJyb3IgPSAwOworCQkJZ290byBvdXQ7CisJCX0gZWxzZSB7CisJCQlpZiAo
c28tPnNvX3Jjdi5zYl9jYyA9PSAwKSB7CisJCQkJLyogaW5kaWNhdGUgRU9GICovCisJCQkJZXJy
b3IgPSAwOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCWlmIChzby0+c29fcmN2LnNi
X2NjIDw9IGhlbGRfbGVuZ3RoKSB7CisJCWlmIChzby0+c29fZXJyb3IpIHsKKwkJCWVycm9yID0g
c28tPnNvX2Vycm9yOworCQkJaWYgKChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSB7CisJCQkJ
c28tPnNvX2Vycm9yID0gMDsKKwkJCX0KKwkJCWdvdG8gb3V0OworCQl9CisJCWlmICgoc28tPnNv
X3Jjdi5zYl9jYyA9PSAwKSAmJgorCQkgICAgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19UQ1BUWVBFKSB8fAorCQkgICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSkpIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxB
R1NfQ09OTkVDVEVEKSA9PSAwKSB7CisJCQkJLyogRm9yIGFjdGl2ZSBvcGVuIHNpZGUgY2xlYXIg
ZmxhZ3MgZm9yIHJlLXVzZQorCQkJCSAqIHBhc3NpdmUgb3BlbiBpcyBibG9ja2VkIGJ5IGNvbm5l
Y3QuCisJCQkJICovCisJCQkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dB
U19BQk9SVEVEKSB7CisJCQkJCS8qIFlvdSB3ZXJlIGFib3J0ZWQsIHBhc3NpdmUgc2lkZSBhbHdh
eXMgaGl0cyBoZXJlICovCisJCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVDT05OUkVTRVQpOworCQkJCQllcnJvciA9IEVDT05OUkVT
RVQ7CisJCQkJfQorCQkJCXNvLT5zb19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElORyB8CisJCQkJ
CQkgIFNTX0lTRElTQ09OTkVDVElORyB8CisJCQkJCQkgIFNTX0lTQ09ORklSTUlORyB8CisJCQkJ
CQkgIFNTX0lTQ09OTkVDVEVEKTsKKwkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQlpZiAoKGlu
cC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1dBU19DT05ORUNURUQpID09IDApIHsKKwkJ
CQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVU
SUwsIEVOT1RDT05OKTsKKwkJCQkJCWVycm9yID0gRU5PVENPTk47CisJCQkJCX0KKwkJCQl9CisJ
CQkJZ290byBvdXQ7CisJCQl9CisJCX0KKwkJaWYgKGJsb2NrX2FsbG93ZWQpIHsKKwkJCWVycm9y
ID0gc2J3YWl0KCZzby0+c29fcmN2KTsKKwkJCWlmIChlcnJvcikgeworCQkJCWdvdG8gb3V0Owor
CQkJfQorCQkJaGVsZF9sZW5ndGggPSAwOworCQkJZ290byByZXN0YXJ0X25vc2Jsb2NrczsKKwkJ
fSBlbHNlIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZS
T01fU0NUUFVUSUwsIEVXT1VMREJMT0NLKTsKKwkJCWVycm9yID0gRVdPVUxEQkxPQ0s7CisJCQln
b3RvIG91dDsKKwkJfQorCX0KKwlpZiAoaG9sZF9zYmxvY2sgPT0gMSkgeworCQlTT0NLQlVGX1VO
TE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMDsKKwl9CisjaWYgZGVmaW5lZChf
X0FQUExFX18pCisJZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dBSVQoaW5fZmxh
Z3MpKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJz
aW9uIDwgNzAwMDAwCisJZXJyb3IgPSBzYmxvY2soJnNvLT5zb19yY3YsIChibG9ja19hbGxvd2Vk
ID8gTV9XQUlUT0sgOiAwKSk7CisjZW5kaWYKKwkvKiB3ZSBwb3NzaWJseSBoYXZlIGRhdGEgd2Ug
Y2FuIHJlYWQgKi8KKwkvKnNhX2lnbm9yZSBGUkVFRF9NRU1PUlkqLworCWNvbnRyb2wgPSBUQUlM
UV9GSVJTVCgmaW5wLT5yZWFkX3F1ZXVlKTsKKwlpZiAoY29udHJvbCA9PSBOVUxMKSB7CisJCS8q
IFRoaXMgY291bGQgYmUgaGFwcGVuaW5nIHNpbmNlCisJCSAqIHRoZSBhcHBlbmRlciBkaWQgdGhl
IGluY3JlbWVudCBidXQgYXMgbm90CisJCSAqIHlldCBkaWQgdGhlIHRhaWxxIGluc2VydCBvbnRv
IHRoZSByZWFkX3F1ZXVlCisJCSAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7CisJCQlTQ1RQ
X0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJfQorCQljb250cm9sID0gVEFJTFFfRklSU1QoJmlucC0+
cmVhZF9xdWV1ZSk7CisJCWlmICgoY29udHJvbCA9PSBOVUxMKSAmJiAoc28tPnNvX3Jjdi5zYl9j
YyAhPSAwKSkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJCXBhbmljKCJIdWgsIGl0cyBub24gemVy
byBhbmQgbm90aGluZyBvbiBjb250cm9sPyIpOworI2VuZGlmCisJCQlzby0+c29fcmN2LnNiX2Nj
ID0gMDsKKwkJfQorCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQlob2xkX3Jsb2NrID0g
MDsKKwkJZ290byByZXN0YXJ0OworCX0KKworCWlmICgoY29udHJvbC0+bGVuZ3RoID09IDApICYm
CisJICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IpKSB7CisJCS8qIENsZWFuIHVwIGNvZGUg
Zm9yIGZyZWVpbmcgYXNzb2MgdGhhdCBsZWZ0IGJlaGluZCBhIHBkYXBpLi4KKwkJICogbWF5YmUg
YSBwZWVyIGluIEVFT1IgdGhhdCBqdXN0IGNsb3NlZCBhZnRlciBzZW5kaW5nIGFuZAorCQkgKiBu
ZXZlciBpbmRpY2F0ZWQgYSBFT1IuCisJCSAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7CisJ
CQlob2xkX3Jsb2NrID0gMTsKKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCQl9CisJCWNv
bnRyb2wtPmhlbGRfbGVuZ3RoID0gMDsKKwkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKwkJCS8qIEht
bSB0aGVyZSBpcyBkYXRhIGhlcmUgLi4gZml4ICovCisJCQlzdHJ1Y3QgbWJ1ZiAqbV90bXA7CisJ
CQlpbnQgY250ID0gMDsKKwkJCW1fdG1wID0gY29udHJvbC0+ZGF0YTsKKwkJCXdoaWxlIChtX3Rt
cCkgeworCQkJCWNudCArPSBTQ1RQX0JVRl9MRU4obV90bXApOworCQkJCWlmIChTQ1RQX0JVRl9O
RVhUKG1fdG1wKSA9PSBOVUxMKSB7CisJCQkJCWNvbnRyb2wtPnRhaWxfbWJ1ZiA9IG1fdG1wOwor
CQkJCQljb250cm9sLT5lbmRfYWRkZWQgPSAxOworCQkJCX0KKwkJCQltX3RtcCA9IFNDVFBfQlVG
X05FWFQobV90bXApOworCQkJfQorCQkJY29udHJvbC0+bGVuZ3RoID0gY250OworCQl9IGVsc2Ug
eworCQkJLyogcmVtb3ZlIGl0ICovCisJCQlUQUlMUV9SRU1PVkUoJmlucC0+cmVhZF9xdWV1ZSwg
Y29udHJvbCwgbmV4dCk7CisJCQkvKiBBZGQgYmFjayBhbnkgaGlkZGVuZCBkYXRhICovCisJCQlz
Y3RwX2ZyZWVfcmVtb3RlX2FkZHIoY29udHJvbC0+d2hvRnJvbSk7CisJCQlzY3RwX2ZyZWVfYV9y
ZWFkcShzdGNiLCBjb250cm9sKTsKKwkJfQorCQlpZiAoaG9sZF9ybG9jaykgeworCQkJaG9sZF9y
bG9jayA9IDA7CisJCQlTQ1RQX0lOUF9SRUFEX1VOTE9DSyhpbnApOworCQl9CisJCWdvdG8gcmVz
dGFydDsKKwl9CisJaWYgKChjb250cm9sLT5sZW5ndGggPT0gMCkgJiYKKwkgICAgKGNvbnRyb2wt
PmVuZF9hZGRlZCA9PSAxKSkgeworCQkvKiBEbyB3ZSBhbHNvIG5lZWQgdG8gY2hlY2sgZm9yIChj
b250cm9sLT5wZGFwaV9hYm9ydGVkID09IDEpPyAqLworCQlpZiAoaG9sZF9ybG9jayA9PSAwKSB7
CisJCQlob2xkX3Jsb2NrID0gMTsKKwkJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCQl9CisJ
CVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9sLCBuZXh0KTsKKwkJaWYgKGNv
bnRyb2wtPmRhdGEpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQlwYW5pYygiY29udHJvbC0+ZGF0
YSBub3QgbnVsbCBidXQgY29udHJvbC0+bGVuZ3RoID09IDAiKTsKKyNlbHNlCisJCQlTQ1RQX1BS
SU5URigiU3RyYW5nZSwgZGF0YSBsZWZ0IGluIHRoZSBjb250cm9sIGJ1ZmZlci4gQ2xlYW5pbmcg
dXAuXG4iKTsKKwkJCXNjdHBfbV9mcmVlbShjb250cm9sLT5kYXRhKTsKKwkJCWNvbnRyb2wtPmRh
dGEgPSBOVUxMOworI2VuZGlmCisJCX0KKwkJaWYgKGNvbnRyb2wtPmF1eF9kYXRhKSB7CisJCQlz
Y3RwX21fZnJlZSAoY29udHJvbC0+YXV4X2RhdGEpOworCQkJY29udHJvbC0+YXV4X2RhdGEgPSBO
VUxMOworCQl9CisjaWZkZWYgSU5WQVJJQU5UUworCQlpZiAoY29udHJvbC0+b25fc3RybV9xKSB7
CisJCQlwYW5pYygiQWJvdXQgdG8gZnJlZSBjdGw6JXAgc286JXAgYW5kIGl0cyBpbiAlZCIsCisJ
CQkgICAgICBjb250cm9sLCBzbywgY29udHJvbC0+b25fc3RybV9xKTsKKwkJfQorI2VuZGlmCisJ
CXNjdHBfZnJlZV9yZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJc2N0cF9mcmVlX2Ff
cmVhZHEoc3RjYiwgY29udHJvbCk7CisJCWlmIChob2xkX3Jsb2NrKSB7CisJCQlob2xkX3Jsb2Nr
ID0gMDsKKwkJCVNDVFBfSU5QX1JFQURfVU5MT0NLKGlucCk7CisJCX0KKwkJZ290byByZXN0YXJ0
OworCX0KKwlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsKKwkJaWYgKChzY3RwX2lzX2ZlYXR1
cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19GUkFHX0lOVEVSTEVBVkUpKSAmJgorCQkgICAgKGZp
bGxpbmdfc2luZm8pKSB7CisJCQkvKiBmaW5kIGEgbW9yZSBzdWl0YWJsZSBvbmUgdGhlbiB0aGlz
ICovCisJCQljdGwgPSBUQUlMUV9ORVhUKGNvbnRyb2wsIG5leHQpOworCQkJd2hpbGUgKGN0bCkg
eworCQkJCWlmICgoY3RsLT5zdGNiICE9IGNvbnRyb2wtPnN0Y2IpICYmIChjdGwtPmxlbmd0aCkg
JiYKKwkJCQkgICAgKGN0bC0+c29tZV90YWtlbiB8fAorCQkJCSAgICAgKGN0bC0+c3BlY19mbGFn
cyAmIE1fTk9USUZJQ0FUSU9OKSB8fAorCQkJCSAgICAgKChjdGwtPmRvX25vdF9yZWZfc3RjYiA9
PSAwKSAmJgorCQkJCSAgICAgIChjdGwtPnN0Y2ItPmFzb2Muc3RybWluW2N0bC0+c2luZm9fc3Ry
ZWFtXS5kZWxpdmVyeV9zdGFydGVkID09IDApKSkKKwkJCQkJKSB7CisJCQkJCS8qLQorCQkJCQkg
KiBJZiB3ZSBoYXZlIGEgZGlmZmVyZW50IFRDQiBuZXh0LCBhbmQgdGhlcmUgaXMgZGF0YQorCQkJ
CQkgKiBwcmVzZW50LiBJZiB3ZSBoYXZlIGFscmVhZHkgdGFrZW4gc29tZSAocGRhcGkpLCBPUiB3
ZSBjYW4KKwkJCQkJICogcmVmIHRoZSB0Y2IgYW5kIG5vIGRlbGl2ZXJ5IGFzIHN0YXJ0ZWQgb24g
dGhpcyBzdHJlYW0sIHdlCisJCQkJCSAqIHRha2UgaXQuIE5vdGUgd2UgYWxsb3cgYSBub3RpZmlj
YXRpb24gb24gYSBkaWZmZXJlbnQKKwkJCQkJICogYXNzb2MgdG8gYmUgZGVsaXZlcmVkLi4KKwkJ
CQkJICovCisJCQkJCWNvbnRyb2wgPSBjdGw7CisJCQkJCWdvdG8gZm91bmRfb25lOworCQkJCX0g
ZWxzZSBpZiAoKHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0lOVEVSTEVB
VkVfU1RSTVMpKSAmJgorCQkJCQkgICAoY3RsLT5sZW5ndGgpICYmCisJCQkJCSAgICgoY3RsLT5z
b21lX3Rha2VuKSB8fAorCQkJCQkgICAgKChjdGwtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJgor
CQkJCQkgICAgICgoY3RsLT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pID09IDApICYmCisJ
CQkJCSAgICAgKGN0bC0+c3RjYi0+YXNvYy5zdHJtaW5bY3RsLT5zaW5mb19zdHJlYW1dLmRlbGl2
ZXJ5X3N0YXJ0ZWQgPT0gMCkpKSkgeworCQkJCQkvKi0KKwkJCQkJICogSWYgd2UgaGF2ZSB0aGUg
c2FtZSB0Y2IsIGFuZCB0aGVyZSBpcyBkYXRhIHByZXNlbnQsIGFuZCB3ZQorCQkJCQkgKiBoYXZl
IHRoZSBzdHJtIGludGVybGVhdmUgZmVhdHVyZSBwcmVzZW50LiBUaGVuIGlmIHdlIGhhdmUKKwkJ
CQkJICogdGFrZW4gc29tZSAocGRhcGkpIG9yIHdlIGNhbiByZWZlciB0byB0aHQgdGNiIEFORCB3
ZSBoYXZlCisJCQkJCSAqIG5vdCBzdGFydGVkIGEgZGVsaXZlcnkgZm9yIHRoaXMgc3RyZWFtLCB3
ZSBjYW4gdGFrZSBpdC4KKwkJCQkJICogTm90ZSB3ZSBkbyBOT1QgYWxsb3cgYSBub3RpZmljYWl0
b24gb24gdGhlIHNhbWUgYXNzb2MgdG8KKwkJCQkJICogYmUgZGVsaXZlcmVkLgorCQkJCQkgKi8K
KwkJCQkJY29udHJvbCA9IGN0bDsKKwkJCQkJZ290byBmb3VuZF9vbmU7CisJCQkJfQorCQkJCWN0
bCA9IFRBSUxRX05FWFQoY3RsLCBuZXh0KTsKKwkJCX0KKwkJfQorCQkvKgorCQkgKiBpZiB3ZSBy
ZWFjaCBoZXJlLCBub3Qgc3VpdGFibGUgcmVwbGFjZW1lbnQgaXMgYXZhaWxhYmxlCisJCSAqIDxv
cj4gZnJhZ21lbnQgaW50ZXJsZWF2ZSBpcyBOT1Qgb24uIFNvIHN0dWZmIHRoZSBzYl9jYworCQkg
KiBpbnRvIHRoZSBvdXIgaGVsZCBjb3VudCwgYW5kIGl0cyB0aW1lIHRvIHNsZWVwIGFnYWluLgor
CQkgKi8KKwkJaGVsZF9sZW5ndGggPSBzby0+c29fcmN2LnNiX2NjOworCQljb250cm9sLT5oZWxk
X2xlbmd0aCA9IHNvLT5zb19yY3Yuc2JfY2M7CisJCWdvdG8gcmVzdGFydDsKKwl9CisJLyogQ2xl
YXIgdGhlIGhlbGQgbGVuZ3RoIHNpbmNlIHRoZXJlIGlzIHNvbWV0aGluZyB0byByZWFkICovCisJ
Y29udHJvbC0+aGVsZF9sZW5ndGggPSAwOworIGZvdW5kX29uZToKKwkvKgorCSAqIElmIHdlIHJl
YWNoIGhlcmUsIGNvbnRyb2wgaGFzIGEgc29tZSBkYXRhIGZvciB1cyB0byByZWFkIG9mZi4KKwkg
KiBOb3RlIHRoYXQgc3RjYiBDT1VMRCBiZSBOVUxMLgorCSAqLworCWlmIChob2xkX3Jsb2NrID09
IDApIHsKKwkJaG9sZF9ybG9jayA9IDE7CisJCVNDVFBfSU5QX1JFQURfTE9DSyhpbnApOworCX0K
Kwljb250cm9sLT5zb21lX3Rha2VuKys7CisJc3RjYiA9IGNvbnRyb2wtPnN0Y2I7CisJaWYgKHN0
Y2IpIHsKKwkJaWYgKChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYKKwkJICAgIChz
dGNiLT5hc29jLnN0YXRlICYgU0NUUF9TVEFURV9BQk9VVF9UT19CRV9GUkVFRCkpIHsKKwkJCWlm
IChmcmVlY250X2FwcGxpZWQgPT0gMCkKKwkJCQlzdGNiID0gTlVMTDsKKwkJfSBlbHNlIGlmIChj
b250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgeworCQkJLyogeW91IGNhbid0IGZyZWUgaXQg
b24gbWUgcGxlYXNlICovCisJCQkvKgorCQkJICogVGhlIGxvY2sgb24gdGhlIHNvY2tldCBidWZm
ZXIgcHJvdGVjdHMgdXMgc28gdGhlCisJCQkgKiBmcmVlIGNvZGUgd2lsbCBzdG9wLiBCdXQgc2lu
Y2Ugd2UgdXNlZCB0aGUgc29ja2V0YnVmCisJCQkgKiBsb2NrIGFuZCB0aGUgc2VuZGVyIHVzZXMg
dGhlIHRjYl9sb2NrIHRvIGluY3JlbWVudCwKKwkJCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBhdG9t
aWMgYWRkIHRvIHRoZSByZWZjbnQKKwkJCSAqLworCQkJaWYgKGZyZWVjbnRfYXBwbGllZCkgewor
I2lmZGVmIElOVkFSSUFOVFMKKwkJCQlwYW5pYygicmVmY250IGFscmVhZHkgaW5jcmVtZW50ZWQi
KTsKKyNlbHNlCisJCQkJU0NUUF9QUklOVEYoInJlZmNudCBhbHJlYWR5IGluY3JlbWVudGVkP1xu
Iik7CisjZW5kaWYKKwkJCX0gZWxzZSB7CisJCQkJYXRvbWljX2FkZF9pbnQoJnN0Y2ItPmFzb2Mu
cmVmY250LCAxKTsKKwkJCQlmcmVlY250X2FwcGxpZWQgPSAxOworCQkJfQorCQkJLyoKKwkJCSAq
IFNldHVwIHRvIHJlbWVtYmVyIGhvdyBtdWNoIHdlIGhhdmUgbm90IHlldCB0b2xkCisJCQkgKiB0
aGUgcGVlciBvdXIgcnduZCBoYXMgb3BlbmVkIHVwLiBOb3RlIHdlIGdyYWIKKwkJCSAqIHRoZSB2
YWx1ZSBmcm9tIHRoZSB0Y2IgZnJvbSBsYXN0IHRpbWUuCisJCQkgKiBOb3RlIHRvbyB0aGF0IHNh
Y2sgc2VuZGluZyBjbGVhcnMgdGhpcyB3aGVuIGEgc2FjaworCQkJICogaXMgc2VudCwgd2hpY2gg
aXMgZmluZS4gT25jZSB3ZSBoaXQgdGhlIHJ3bmRfcmVxLAorCQkJICogd2UgdGhlbiB3aWxsIGdv
IHRvIHRoZSBzY3RwX3VzZXJfcmN2ZCgpIHRoYXQgd2lsbAorCQkJICogbm90IGxvY2sgdW50aWwg
aXQgS05PV3MgaXQgTVVTVCBzZW5kIGEgV1VQLVNBQ0suCisJCQkgKi8KKwkJCWZyZWVkX3NvX2Zh
ciA9IHN0Y2ItPmZyZWVkX2J5X3NvcmN2X3NpbmNlbGFzdDsKKwkJCXN0Y2ItPmZyZWVkX2J5X3Nv
cmN2X3NpbmNlbGFzdCA9IDA7CisJCX0KKwl9CisJaWYgKHN0Y2IgJiYKKwkgICAgKChjb250cm9s
LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pID09IDApICYmCisJICAgIGNvbnRyb2wtPmRv
X25vdF9yZWZfc3RjYiA9PSAwKSB7CisJCXN0Y2ItPmFzb2Muc3RybWluW2NvbnRyb2wtPnNpbmZv
X3N0cmVhbV0uZGVsaXZlcnlfc3RhcnRlZCA9IDE7CisJfQorCisJLyogRmlyc3QgbGV0cyBnZXQg
b2ZmIHRoZSBzaW5mbyBhbmQgc29ja2FkZHIgaW5mbyAqLworCWlmICgoc2luZm8gIT0gTlVMTCkg
JiYgKGZpbGxpbmdfc2luZm8gIT0gMCkpIHsKKwkJc2luZm8tPnNpbmZvX3N0cmVhbSA9IGNvbnRy
b2wtPnNpbmZvX3N0cmVhbTsKKwkJc2luZm8tPnNpbmZvX3NzbiA9ICh1aW50MTZfdCljb250cm9s
LT5taWQ7CisJCXNpbmZvLT5zaW5mb19mbGFncyA9IGNvbnRyb2wtPnNpbmZvX2ZsYWdzOworCQlz
aW5mby0+c2luZm9fcHBpZCA9IGNvbnRyb2wtPnNpbmZvX3BwaWQ7CisJCXNpbmZvLT5zaW5mb19j
b250ZXh0ID1jb250cm9sLT5zaW5mb19jb250ZXh0OworCQlzaW5mby0+c2luZm9fdGltZXRvbGl2
ZSA9IGNvbnRyb2wtPnNpbmZvX3RpbWV0b2xpdmU7CisJCXNpbmZvLT5zaW5mb190c24gPSBjb250
cm9sLT5zaW5mb190c247CisJCXNpbmZvLT5zaW5mb19jdW10c24gPSBjb250cm9sLT5zaW5mb19j
dW10c247CisJCXNpbmZvLT5zaW5mb19hc3NvY19pZCA9IGNvbnRyb2wtPnNpbmZvX2Fzc29jX2lk
OworCQlueHQgPSBUQUlMUV9ORVhUKGNvbnRyb2wsIG5leHQpOworCQlpZiAoc2N0cF9pc19mZWF0
dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfRVhUX1JDVklORk8pIHx8CisJCSAgICBzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWTlhUSU5GTykpIHsKKwkJCXN0cnVj
dCBzY3RwX2V4dHJjdmluZm8gKnNfZXh0cmE7CisJCQlzX2V4dHJhID0gKHN0cnVjdCBzY3RwX2V4
dHJjdmluZm8gKilzaW5mbzsKKwkJCWlmICgobnh0KSAmJgorCQkJICAgIChueHQtPmxlbmd0aCkp
IHsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfZmxhZ3MgPSBTQ1RQX05FWFRfTVNHX0FWQUlM
OworCQkJCWlmIChueHQtPnNpbmZvX2ZsYWdzICYgU0NUUF9VTk9SREVSRUQpIHsKKwkJCQkJc19l
eHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfVU5PUkRFUkVEOwor
CQkJCX0KKwkJCQlpZiAobnh0LT5zcGVjX2ZsYWdzICYgTV9OT1RJRklDQVRJT04pIHsKKwkJCQkJ
c19leHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNfTk9USUZJQ0FU
SU9OOworCQkJCX0KKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfYWlkID0gbnh0LT5zaW5mb19h
c3NvY19pZDsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gbnh0LT5sZW5ndGg7
CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X3BwaWQgPSBueHQtPnNpbmZvX3BwaWQ7CisJCQkJ
c19leHRyYS0+c2VyaW5mb19uZXh0X3N0cmVhbSA9IG54dC0+c2luZm9fc3RyZWFtOworCQkJCWlm
IChueHQtPnRhaWxfbWJ1ZiAhPSBOVUxMKSB7CisJCQkJCWlmIChueHQtPmVuZF9hZGRlZCkgewor
CQkJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0X2ZsYWdzIHw9IFNDVFBfTkVYVF9NU0dfSVNDT01Q
TEVURTsKKwkJCQkJfQorCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJLyogd2UgZXhwbGljaXRseSAw
IHRoaXMsIHNpbmNlIHRoZSBtZW1jcHkgZ290CisJCQkJICogc29tZSBvdGhlciB0aGluZ3MgYmV5
b25kIHRoZSBvbGRlciBzaW5mb18KKwkJCQkgKiB0aGF0IGlzIG9uIHRoZSBjb250cm9sJ3Mgc3Ry
dWN0dXJlIDotRAorCQkJCSAqLworCQkJCW54dCA9IE5VTEw7CisJCQkJc19leHRyYS0+c2VyaW5m
b19uZXh0X2ZsYWdzID0gU0NUUF9OT19ORVhUX01TRzsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25l
eHRfYWlkID0gMDsKKwkJCQlzX2V4dHJhLT5zZXJpbmZvX25leHRfbGVuZ3RoID0gMDsKKwkJCQlz
X2V4dHJhLT5zZXJpbmZvX25leHRfcHBpZCA9IDA7CisJCQkJc19leHRyYS0+c2VyaW5mb19uZXh0
X3N0cmVhbSA9IDA7CisJCQl9CisJCX0KKwkJLyoKKwkJICogdXBkYXRlIG9mZiB0aGUgcmVhbCBj
dXJyZW50IGN1bS1hY2ssIGlmIHdlIGhhdmUgYW4gc3RjYi4KKwkJICovCisJCWlmICgoY29udHJv
bC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmIHN0Y2IpCisJCQlzaW5mby0+c2luZm9fY3VtdHNu
ID0gc3RjYi0+YXNvYy5jdW11bGF0aXZlX3RzbjsKKwkJLyoKKwkJICogbWFzayBvZmYgdGhlIGhp
Z2ggYml0cywgd2Uga2VlcCB0aGUgYWN0dWFsIGNodW5rIGJpdHMgaW4KKwkJICogdGhlcmUuCisJ
CSAqLworCQlzaW5mby0+c2luZm9fZmxhZ3MgJj0gMHgwMGZmOworCQlpZiAoKGNvbnRyb2wtPnNp
bmZvX2ZsYWdzID4+IDgpICYgU0NUUF9EQVRBX1VOT1JERVJFRCkgeworCQkJc2luZm8tPnNpbmZv
X2ZsYWdzIHw9IFNDVFBfVU5PUkRFUkVEOworCQl9CisJfQorI2lmZGVmIFNDVFBfQVNPQ0xPR19P
Rl9UU05TCisJeworCQlpbnQgaW5kZXgsIG5ld2luZGV4OworCQlzdHJ1Y3Qgc2N0cF9wY2J0c25f
cmxvZyAqZW50cnk7CisJCWRvIHsKKwkJCWluZGV4ID0gaW5wLT5yZWFkbG9nX2luZGV4OworCQkJ
bmV3aW5kZXggPSBpbmRleCArIDE7CisJCQlpZiAobmV3aW5kZXggPj0gU0NUUF9SRUFEX0xPR19T
SVpFKSB7CisJCQkJbmV3aW5kZXggPSAwOworCQkJfQorCQl9IHdoaWxlIChhdG9taWNfY21wc2V0
X2ludCgmaW5wLT5yZWFkbG9nX2luZGV4LCBpbmRleCwgbmV3aW5kZXgpID09IDApOworCQllbnRy
eSA9ICZpbnAtPnJlYWRsb2dbaW5kZXhdOworCQllbnRyeS0+dnRhZyA9IGNvbnRyb2wtPnNpbmZv
X2Fzc29jX2lkOworCQllbnRyeS0+c3RybSA9IGNvbnRyb2wtPnNpbmZvX3N0cmVhbTsKKwkJZW50
cnktPnNlcSA9ICh1aW50MTZfdCljb250cm9sLT5taWQ7CisJCWVudHJ5LT5zeiA9IGNvbnRyb2wt
Pmxlbmd0aDsKKwkJZW50cnktPmZsZ3MgPSBjb250cm9sLT5zaW5mb19mbGFnczsKKwl9CisjZW5k
aWYKKwlpZiAoKGZyb21sZW4gPiAwKSAmJiAoZnJvbSAhPSBOVUxMKSkgeworCQl1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBzdG9yZTsKKwkJc2l6ZV90IGxlbjsKKworCQlzd2l0Y2ggKGNvbnRyb2wtPndo
b0Zyb20tPnJvLl9sX2FkZHIuc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2Ug
QUZfSU5FVDY6CisJCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJCXN0
b3JlLnNpbjYgPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjY7CisJCQkJc3RvcmUu
c2luNi5zaW42X3BvcnQgPSBjb250cm9sLT5wb3J0X2Zyb207CisJCQkJYnJlYWs7CisjZW5kaWYK
KyNpZmRlZiBJTkVUCisJCQljYXNlIEFGX0lORVQ6CisjaWZkZWYgSU5FVDYKKwkJCQlpZiAoc2N0
cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfTkVFRFNfTUFQUEVEX1Y0KSkgewor
CQkJCQlsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJCWluNl9zaW5fMl92
NG1hcHNpbjYoJmNvbnRyb2wtPndob0Zyb20tPnJvLl9sX2FkZHIuc2luLAorCQkJCQkJCSAgICAm
c3RvcmUuc2luNik7CisJCQkJCXN0b3JlLnNpbjYuc2luNl9wb3J0ID0gY29udHJvbC0+cG9ydF9m
cm9tOworCQkJCX0gZWxzZSB7CisJCQkJCWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4p
OworCQkJCQlzdG9yZS5zaW4gPSBjb250cm9sLT53aG9Gcm9tLT5yby5fbF9hZGRyLnNpbjsKKwkJ
CQkJc3RvcmUuc2luLnNpbl9wb3J0ID0gY29udHJvbC0+cG9ydF9mcm9tOworCQkJCX0KKyNlbHNl
CisJCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQkJc3RvcmUuc2luID0g
Y29udHJvbC0+d2hvRnJvbS0+cm8uX2xfYWRkci5zaW47CisJCQkJc3RvcmUuc2luLnNpbl9wb3J0
ID0gY29udHJvbC0+cG9ydF9mcm9tOworI2VuZGlmCisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX18pCisJCQljYXNlIEFGX0NPTk46CisJCQkJbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKwkJCQlzdG9yZS5zY29ubiA9IGNvbnRyb2wtPndob0Zy
b20tPnJvLl9sX2FkZHIuc2Nvbm47CisJCQkJc3RvcmUuc2Nvbm4uc2Nvbm5fcG9ydCA9IGNvbnRy
b2wtPnBvcnRfZnJvbTsKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJZGVmYXVsdDoKKwkJCQlsZW4g
PSAwOworCQkJCWJyZWFrOworCQl9CisJCW1lbWNweShmcm9tLCAmc3RvcmUsIG1pbigoc2l6ZV90
KWZyb21sZW4sIGxlbikpOworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkKKyNp
ZmRlZiBJTkVUNgorCQl7CisJCQlzdHJ1Y3Qgc29ja2FkZHJfaW42IGxzYTYsICpmcm9tNjsKKwor
CQkJZnJvbTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWZyb207CisJCQlzY3RwX3JlY292ZXJf
c2NvcGVfbWFjKGZyb202LCAoJmxzYTYpKTsKKwkJfQorI2VuZGlmCisjZW5kaWYKKwl9CisJaWYg
KGhvbGRfcmxvY2spIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaG9sZF9ybG9j
ayA9IDA7CisJfQorCWlmIChob2xkX3NibG9jaykgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNv
X3Jjdik7CisJCWhvbGRfc2Jsb2NrID0gMDsKKwl9CisJLyogbm93IGNvcHkgb3V0IHdoYXQgZGF0
YSB3ZSBjYW4gKi8KKwlpZiAobXAgPT0gTlVMTCkgeworCQkvKiBjb3B5IG91dCBlYWNoIG1idWYg
aW4gdGhlIGNoYWluIHVwIHRvIGxlbmd0aCAqLworCWdldF9tb3JlX2RhdGE6CisJCW0gPSBjb250
cm9sLT5kYXRhOworCQl3aGlsZSAobSkgeworCQkJLyogTW92ZSBvdXQgYWxsIHdlIGNhbiAqLwor
I2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCWNw
X2xlbiA9IChpbnQpdWlvLT51aW9fcmVzaWQ7CisjZWxzZQorCQkJY3BfbGVuID0gKGludCl1aW9f
cmVzaWQodWlvKTsKKyNlbmRpZgorI2Vsc2UKKwkJCWNwX2xlbiA9IChpbnQpdWlvLT51aW9fcmVz
aWQ7CisjZW5kaWYKKwkJCW15X2xlbiA9IChpbnQpU0NUUF9CVUZfTEVOKG0pOworCQkJaWYgKGNw
X2xlbiA+IG15X2xlbikgeworCQkJCS8qIG5vdCBlbm91Z2ggaW4gdGhpcyBidWYgKi8KKwkJCQlj
cF9sZW4gPSBteV9sZW47CisJCQl9CisJCQlpZiAoaG9sZF9ybG9jaykgeworCQkJCVNDVFBfSU5Q
X1JFQURfVU5MT0NLKGlucCk7CisJCQkJaG9sZF9ybG9jayA9IDA7CisJCQl9CisjaWYgZGVmaW5l
ZChfX0FQUExFX18pCisJCQlTQ1RQX1NPQ0tFVF9VTkxPQ0soc28sIDApOworI2VuZGlmCisJCQlp
ZiAoY3BfbGVuID4gMCkKKwkJCQllcnJvciA9IHVpb21vdmUobXRvZChtLCBjaGFyICopLCBjcF9s
ZW4sIHVpbyk7CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNv
LCAwKTsKKyNlbmRpZgorCQkJLyogcmUtcmVhZCAqLworCQkJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX1NPQ0tFVF9HT05FKSB7CisJCQkJZ290byByZWxlYXNlOworCQkJfQor
CisJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiBzdGNiICYmCisJCQkg
ICAgc3RjYi0+YXNvYy5zdGF0ZSAmIFNDVFBfU1RBVEVfQUJPVVRfVE9fQkVfRlJFRUQpIHsKKwkJ
CQlub19yY3ZfbmVlZGVkID0gMTsKKwkJCX0KKwkJCWlmIChlcnJvcikgeworCQkJCS8qIGVycm9y
IHdlIGFyZSBvdXQgb2YgaGVyZSAqLworCQkJCWdvdG8gcmVsZWFzZTsKKwkJCX0KKwkJCVNDVFBf
SU5QX1JFQURfTE9DSyhpbnApOworCQkJaG9sZF9ybG9jayA9IDE7CisJCQlpZiAoY3BfbGVuID09
IFNDVFBfQlVGX0xFTihtKSkgeworCQkJCWlmICgoU0NUUF9CVUZfTkVYVChtKT09IE5VTEwpICYm
CisJCQkJICAgIChjb250cm9sLT5lbmRfYWRkZWQpKSB7CisJCQkJCW91dF9mbGFncyB8PSBNU0df
RU9SOworCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAgJiYKKwkJCQkJ
ICAgIChjb250cm9sLT5zdGNiICE9IE5VTEwpICYmCisJCQkJCSAgICAoKGNvbnRyb2wtPnNwZWNf
ZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5zdGNiLT5hc29j
LnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAwOworCQkJ
CX0KKwkJCQlpZiAoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQkJ
CW91dF9mbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJCQkvKiB3ZSBhdGUgdXAg
dGhlIG1idWYgKi8KKwkJCQlpZiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgeworCQkJCQkvKiBqdXN0
IGxvb2tpbmcgKi8KKwkJCQkJbSA9IFNDVFBfQlVGX05FWFQobSk7CisJCQkJCWNvcGllZF9zb19m
YXIgKz0gY3BfbGVuOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIGRpc3Bvc2Ugb2YgdGhlIG1idWYg
Ki8KKwkJCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
U0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQkJCXNjdHBfc2Jsb2coJnNvLT5zb19yY3YsCisJCQkJ
CQkgICBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUs
IFNDVFBfQlVGX0xFTihtKSk7CisJCQkJCX0KKwkJCQkJc2N0cF9zYmZyZWUoY29udHJvbCwgc3Rj
YiwgJnNvLT5zb19yY3YsIG0pOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dp
bmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJCQkJc2N0cF9zYmxvZygm
c28tPnNvX3JjdiwKKwkJCQkJCSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2Is
IFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCQkJfQorCQkJCQljb3BpZWRfc29fZmFyICs9IGNw
X2xlbjsKKwkJCQkJZnJlZWRfc29fZmFyICs9IGNwX2xlbjsKKwkJCQkJZnJlZWRfc29fZmFyICs9
IE1TSVpFOworCQkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZjb250cm9sLT5sZW5ndGgsIGNwX2xl
bik7CisJCQkJCWNvbnRyb2wtPmRhdGEgPSBzY3RwX21fZnJlZShtKTsKKwkJCQkJbSA9IGNvbnRy
b2wtPmRhdGE7CisJCQkJCS8qIGJlZW4gdGhyb3VnaCBpdCBhbGwsIG11c3QgaG9sZCBzYiBsb2Nr
IG9rIHRvIG51bGwgdGFpbCAqLworCQkJCQlpZiAoY29udHJvbC0+ZGF0YSA9PSBOVUxMKSB7Cisj
aWZkZWYgSU5WQVJJQU5UUworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQkJCQlpZiAoKGNv
bnRyb2wtPmVuZF9hZGRlZCA9PSAwKSB8fAorCQkJCQkJICAgIChUQUlMUV9ORVhUKGNvbnRyb2ws
IG5leHQpID09IE5VTEwpKSB7CisJCQkJCQkJLyogSWYgdGhlIGVuZCBpcyBub3QgYWRkZWQsIE9S
IHRoZQorCQkJCQkJCSAqIG5leHQgaXMgTk9UIG51bGwgd2UgTVVTVCBoYXZlIHRoZSBsb2NrLgor
CQkJCQkJCSAqLworCQkJCQkJCWlmIChtdHhfb3duZWQoJmlucC0+aW5wX3JkYXRhX210eCkgPT0g
MCkgeworCQkJCQkJCQlwYW5pYygiSG1tIHdlIGRvbid0IG93biB0aGUgbG9jaz8iKTsKKwkJCQkJ
CQl9CisJCQkJCQl9CisjZW5kaWYKKyNlbmRpZgorCQkJCQkJY29udHJvbC0+dGFpbF9tYnVmID0g
TlVMTDsKKyNpZmRlZiBJTlZBUklBTlRTCisJCQkJCQlpZiAoKGNvbnRyb2wtPmVuZF9hZGRlZCkg
JiYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSA9PSAwKSkgeworCQkJCQkJCXBhbmljKCJlbmRfYWRk
ZWQsIG5vdGhpbmcgbGVmdCBhbmQgbm8gTVNHX0VPUiIpOworCQkJCQkJfQorI2VuZGlmCisJCQkJ
CX0KKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qIERvIHdlIG5lZWQgdG8gdHJpbSB0aGUgbWJ1
Zj8gKi8KKwkJCQlpZiAoY29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJ
CQkJCW91dF9mbGFncyB8PSBNU0dfTk9USUZJQ0FUSU9OOworCQkJCX0KKwkJCQlpZiAoKGluX2Zs
YWdzICYgTVNHX1BFRUspID09IDApIHsKKwkJCQkJU0NUUF9CVUZfUkVTVl9VRihtLCBjcF9sZW4p
OworCQkJCQlTQ1RQX0JVRl9MRU4obSkgLT0gY3BfbGVuOworCQkJCQlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX2xvZ2dpbmdfbGV2ZWwpICYgU0NUUF9TQl9MT0dHSU5HX0VOQUJMRSkgeworCQkJ
CQkJc2N0cF9zYmxvZygmc28tPnNvX3JjdiwgY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiP05VTEw6
c3RjYiwgU0NUUF9MT0dfU0JGUkVFLCBjcF9sZW4pOworCQkJCQl9CisJCQkJCWF0b21pY19zdWJ0
cmFjdF9pbnQoJnNvLT5zb19yY3Yuc2JfY2MsIGNwX2xlbik7CisJCQkJCWlmICgoY29udHJvbC0+
ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkJCSAgICBzdGNiKSB7CisJCQkJCQlhdG9taWNf
c3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnNiX2NjLCBjcF9sZW4pOworCQkJCQl9CisJCQkJCWNv
cGllZF9zb19mYXIgKz0gY3BfbGVuOworCQkJCQlmcmVlZF9zb19mYXIgKz0gY3BfbGVuOworCQkJ
CQlmcmVlZF9zb19mYXIgKz0gTVNJWkU7CisJCQkJCWlmIChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
bG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdfRU5BQkxFKSB7CisJCQkJCQlzY3RwX3Ni
bG9nKCZzby0+c29fcmN2LCBjb250cm9sLT5kb19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLAorCQkJ
CQkJCSAgIFNDVFBfTE9HX1NCUkVTVUxULCAwKTsKKwkJCQkJfQorCQkJCQlhdG9taWNfc3VidHJh
Y3RfaW50KCZjb250cm9sLT5sZW5ndGgsIGNwX2xlbik7CisJCQkJfSBlbHNlIHsKKwkJCQkJY29w
aWVkX3NvX2ZhciArPSBjcF9sZW47CisJCQkJfQorCQkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9f
KQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCWlmICgob3V0X2ZsYWdzICYgTVNHX0VP
UikgfHwgKHVpby0+dWlvX3Jlc2lkID09IDApKSB7CisjZWxzZQorCQkJaWYgKChvdXRfZmxhZ3Mg
JiBNU0dfRU9SKSB8fCAodWlvX3Jlc2lkKHVpbykgPT0gMCkpIHsKKyNlbmRpZgorI2Vsc2UKKwkJ
CWlmICgob3V0X2ZsYWdzICYgTVNHX0VPUikgfHwgKHVpby0+dWlvX3Jlc2lkID09IDApKSB7Cisj
ZW5kaWYKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmICgoKHN0Y2IpICYmIChpbl9mbGFncyAmIE1T
R19QRUVLKSA9PSAwKSAmJgorCQkJICAgIChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkg
JiYKKwkJCSAgICAoZnJlZWRfc29fZmFyID49IHJ3bmRfcmVxKSkgeworCQkJCXNjdHBfdXNlcl9y
Y3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRfcmxvY2ssIHJ3bmRfcmVxKTsKKwkJCX0KKwkJ
fSAvKiBlbmQgd2hpbGUobSkgKi8KKwkJLyoKKwkJICogQXQgdGhpcyBwb2ludCB3ZSBoYXZlIGxv
b2tlZCBhdCBpdCBhbGwgYW5kIHdlIGVpdGhlciBoYXZlCisJCSAqIGEgTVNHX0VPUi9vciByZWFk
IGFsbCB0aGUgdXNlciB3YW50cy4uLiA8T1I+CisJCSAqIGNvbnRyb2wtPmxlbmd0aCA9PSAwLgor
CQkgKi8KKwkJaWYgKChvdXRfZmxhZ3MgJiBNU0dfRU9SKSAmJiAoKGluX2ZsYWdzICYgTVNHX1BF
RUspID09IDApKSB7CisJCQkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgY29udHJvbCAqLworCQkJ
aWYgKGNvbnRyb2wtPmxlbmd0aCA9PSAwKSB7CisJCQkJaWYgKGNvbnRyb2wtPmRhdGEpIHsKKyNp
ZmRlZiBJTlZBUklBTlRTCisJCQkJCXBhbmljKCJjb250cm9sLT5kYXRhIG5vdCBudWxsIGF0IHJl
YWQgZW9yPyIpOworI2Vsc2UKKwkJCQkJU0NUUF9QUklOVEYoIlN0cmFuZ2UsIGRhdGEgbGVmdCBp
biB0aGUgY29udHJvbCBidWZmZXIgLi4gaW52YXJpZW50cyB3b3VsZCBwYW5pYz9cbiIpOworCQkJ
CQlzY3RwX21fZnJlZW0oY29udHJvbC0+ZGF0YSk7CisJCQkJCWNvbnRyb2wtPmRhdGEgPSBOVUxM
OworI2VuZGlmCisJCQkJfQorCQkJZG9uZV93aXRoX2NvbnRyb2w6CisJCQkJaWYgKGhvbGRfcmxv
Y2sgPT0gMCkgeworCQkJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCQkJaG9sZF9ybG9j
ayA9IDE7CisJCQkJfQorCQkJCVRBSUxRX1JFTU9WRSgmaW5wLT5yZWFkX3F1ZXVlLCBjb250cm9s
LCBuZXh0KTsKKwkJCQkvKiBBZGQgYmFjayBhbnkgaGlkZGVuZCBkYXRhICovCisJCQkJaWYgKGNv
bnRyb2wtPmhlbGRfbGVuZ3RoKSB7CisJCQkJCWhlbGRfbGVuZ3RoID0gMDsKKwkJCQkJY29udHJv
bC0+aGVsZF9sZW5ndGggPSAwOworCQkJCQl3YWtldXBfcmVhZF9zb2NrZXQgPSAxOworCQkJCX0K
KwkJCQlpZiAoY29udHJvbC0+YXV4X2RhdGEpIHsKKwkJCQkJc2N0cF9tX2ZyZWUgKGNvbnRyb2wt
PmF1eF9kYXRhKTsKKwkJCQkJY29udHJvbC0+YXV4X2RhdGEgPSBOVUxMOworCQkJCX0KKwkJCQlu
b19yY3ZfbmVlZGVkID0gY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiOworCQkJCXNjdHBfZnJlZV9y
ZW1vdGVfYWRkcihjb250cm9sLT53aG9Gcm9tKTsKKwkJCQljb250cm9sLT5kYXRhID0gTlVMTDsK
KyNpZmRlZiBJTlZBUklBTlRTCisJCQkJaWYgKGNvbnRyb2wtPm9uX3N0cm1fcSkgeworCQkJCQlw
YW5pYygiQWJvdXQgdG8gZnJlZSBjdGw6JXAgc286JXAgYW5kIGl0cyBpbiAlZCIsCisJCQkJCSAg
ICAgIGNvbnRyb2wsIHNvLCBjb250cm9sLT5vbl9zdHJtX3EpOworCQkJCX0KKyNlbmRpZgorCQkJ
CXNjdHBfZnJlZV9hX3JlYWRxKHN0Y2IsIGNvbnRyb2wpOworCQkJCWNvbnRyb2wgPSBOVUxMOwor
CQkJCWlmICgoZnJlZWRfc29fZmFyID49IHJ3bmRfcmVxKSAmJgorCQkJCSAgICAobm9fcmN2X25l
ZWRlZCA9PSAwKSkKKwkJCQkJc2N0cF91c2VyX3JjdmQoc3RjYiwgJmZyZWVkX3NvX2ZhciwgaG9s
ZF9ybG9jaywgcnduZF9yZXEpOworCisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogVGhlIHVz
ZXIgZGlkIG5vdCByZWFkIGFsbCBvZiB0aGlzCisJCQkJICogbWVzc2FnZSwgdHVybiBvZmYgdGhl
IHJldHVybmVkIE1TR19FT1IKKwkJCQkgKiBzaW5jZSB3ZSBhcmUgbGVhdmluZyBtb3JlIGJlaGlu
ZCBvbiB0aGUKKwkJCQkgKiBjb250cm9sIHRvIHJlYWQuCisJCQkJICovCisjaWZkZWYgSU5WQVJJ
QU5UUworCQkJCWlmIChjb250cm9sLT5lbmRfYWRkZWQgJiYKKwkJCQkgICAgKGNvbnRyb2wtPmRh
dGEgPT0gTlVMTCkgJiYKKwkJCQkgICAgKGNvbnRyb2wtPnRhaWxfbWJ1ZiA9PSBOVUxMKSkgewor
CQkJCQlwYW5pYygiR2FrLCBjb250cm9sLT5sZW5ndGggaXMgY29ycnVwdD8iKTsKKwkJCQl9Cisj
ZW5kaWYKKwkJCQlub19yY3ZfbmVlZGVkID0gY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiOworCQkJ
CW91dF9mbGFncyAmPSB+TVNHX0VPUjsKKwkJCX0KKwkJfQorCQlpZiAob3V0X2ZsYWdzICYgTVNH
X0VPUikgeworCQkJZ290byByZWxlYXNlOworCQl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisj
aWYgZGVmaW5lZChBUFBMRV9MRU9QQVJEKQorCQlpZiAoKHVpby0+dWlvX3Jlc2lkID09IDApIHx8
CisjZWxzZQorCQlpZiAoKHVpb19yZXNpZCh1aW8pID09IDApIHx8CisjZW5kaWYKKyNlbHNlCisJ
CWlmICgodWlvLT51aW9fcmVzaWQgPT0gMCkgfHwKKyNlbmRpZgorCQkgICAgKChpbl9lZW9yX21v
ZGUpICYmCisJCSAgICAgKGNvcGllZF9zb19mYXIgPj0gKHVpbnQzMl90KW1heChzby0+c29fcmN2
LnNiX2xvd2F0LCAxKSkpKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJCX0KKwkJLyoKKwkJICogSWYg
SSBoaXQgaGVyZSB0aGUgcmVjZWl2ZXIgd2FudHMgbW9yZSBhbmQgdGhpcyBtZXNzYWdlIGlzCisJ
CSAqIE5PVCBkb25lIChwZC1hcGkpLiBTbyB0d28gcXVlc3Rpb25zLiBDYW4gd2UgYmxvY2s/IGlm
IG5vdAorCQkgKiB3ZSBhcmUgZG9uZS4gRGlkIHRoZSB1c2VyIE5PVCBzZXQgTVNHX1dBSVRBTEw/
CisJCSAqLworCQlpZiAoYmxvY2tfYWxsb3dlZCA9PSAwKSB7CisJCQlnb3RvIHJlbGVhc2U7CisJ
CX0KKwkJLyoKKwkJICogV2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGEgYSBmZXcgdGhpbmdz
OiAtIFdlIGRvbid0CisJCSAqIHNidW5sb2NrKCkgc28gd2UgZG9uJ3QgZ2V0IHNvbWVvbmUgZWxz
ZSByZWFkaW5nLiAtIFdlCisJCSAqIG11c3QgYmUgc3VyZSB0byBhY2NvdW50IGZvciB0aGUgY2Fz
ZSB3aGVyZSB3aGF0IGlzIGFkZGVkCisJCSAqIGlzIE5PVCB0byBvdXIgY29udHJvbCB3aGVuIHdl
IHdha2V1cC4KKwkJICovCisKKwkJLyogRG8gd2UgbmVlZCB0byB0ZWxsIHRoZSB0cmFuc3BvcnQg
YSByd25kIHVwZGF0ZSBtaWdodCBiZQorCQkgKiBuZWVkZWQgYmVmb3JlIHdlIGdvIHRvIHNsZWVw
PworCQkgKi8KKwkJaWYgKCgoc3RjYikgJiYgKGluX2ZsYWdzICYgTVNHX1BFRUspID09IDApICYm
CisJCSAgICAoKGZyZWVkX3NvX2ZhciA+PSByd25kX3JlcSkgJiYKKwkJICAgICAoY29udHJvbC0+
ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCSAgICAgKG5vX3Jjdl9uZWVkZWQgPT0gMCkpKSB7
CisJCQlzY3RwX3VzZXJfcmN2ZChzdGNiLCAmZnJlZWRfc29fZmFyLCBob2xkX3Jsb2NrLCByd25k
X3JlcSk7CisJCX0KKwl3YWl0X3NvbWVfbW9yZToKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykg
JiYgX19GcmVlQlNEX3ZlcnNpb24gPiA1MDAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJ
CWlmIChzby0+c29fcmN2LnNiX3N0YXRlICYgU0JTX0NBTlRSQ1ZNT1JFKSB7CisJCQlnb3RvIHJl
bGVhc2U7CisJCX0KKyNlbHNlCisJCWlmIChzby0+c29fc3RhdGUgJiBTU19DQU5UUkNWTU9SRSkg
eworCQkJZ290byByZWxlYXNlOworCQl9CisjZW5kaWYKKworCQlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpCisJCQlnb3RvIHJlbGVhc2U7CisKKwkJaWYg
KGhvbGRfcmxvY2sgPT0gMSkgeworCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJCWhv
bGRfcmxvY2sgPSAwOworCQl9CisJCWlmIChob2xkX3NibG9jayA9PSAwKSB7CisJCQlTT0NLQlVG
X0xPQ0soJnNvLT5zb19yY3YpOworCQkJaG9sZF9zYmxvY2sgPSAxOworCQl9CisJCWlmICgoY29w
aWVkX3NvX2ZhcikgJiYgKGNvbnRyb2wtPmxlbmd0aCA9PSAwKSAmJgorCQkgICAgKHNjdHBfaXNf
ZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX0ZSQUdfSU5URVJMRUFWRSkpKSB7CisJCQln
b3RvIHJlbGVhc2U7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJc2J1bmxvY2soJnNv
LT5zb19yY3YsIDEpOworI2VuZGlmCisJCWlmIChzby0+c29fcmN2LnNiX2NjIDw9IGNvbnRyb2wt
PmhlbGRfbGVuZ3RoKSB7CisJCQllcnJvciA9IHNid2FpdCgmc28tPnNvX3Jjdik7CisJCQlpZiAo
ZXJyb3IpIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCWdvdG8gcmVsZWFzZTsKKyNl
bHNlCisJCQkJZ290byByZWxlYXNlX3VubG9ja2VkOworI2VuZGlmCisJCQl9CisJCQljb250cm9s
LT5oZWxkX2xlbmd0aCA9IDA7CisJCX0KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwkJZXJyb3Ig
PSBzYmxvY2soJnNvLT5zb19yY3YsIFNCTE9DS1dBSVQoaW5fZmxhZ3MpKTsKKyNlbmRpZgorCQlp
ZiAoaG9sZF9zYmxvY2spIHsKKwkJCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKKwkJCWhv
bGRfc2Jsb2NrID0gMDsKKwkJfQorCQlpZiAoY29udHJvbC0+bGVuZ3RoID09IDApIHsKKwkJCS8q
IHN0aWxsIG5vdGhpbmcgaGVyZSAqLworCQkJaWYgKGNvbnRyb2wtPmVuZF9hZGRlZCA9PSAxKSB7
CisJCQkJLyogaGUgYWJvcnRlZCwgb3IgaXMgZG9uZSBpLmUuZGlkIGEgc2h1dGRvd24gKi8KKwkJ
CQlvdXRfZmxhZ3MgfD0gTVNHX0VPUjsKKwkJCQlpZiAoY29udHJvbC0+cGRhcGlfYWJvcnRlZCkg
eworCQkJCQlpZiAoKGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYiA9PSAwKSAmJiAoKGNvbnRyb2wt
PnNwZWNfZmxhZ3MgJiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJCQljb250cm9sLT5zdGNi
LT5hc29jLnN0cm1pbltjb250cm9sLT5zaW5mb19zdHJlYW1dLmRlbGl2ZXJ5X3N0YXJ0ZWQgPSAw
OworCisJCQkJCW91dF9mbGFncyB8PSBNU0dfVFJVTkM7CisJCQkJfSBlbHNlIHsKKwkJCQkJaWYg
KChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkgJiYgKChjb250cm9sLT5zcGVjX2ZsYWdz
ICYgTV9OT1RJRklDQVRJT04pID09IDApKQorCQkJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5zdHJt
aW5bY29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJCQl9CisJ
CQkJZ290byBkb25lX3dpdGhfY29udHJvbDsKKwkJCX0KKwkJCWlmIChzby0+c29fcmN2LnNiX2Nj
ID4gaGVsZF9sZW5ndGgpIHsKKwkJCQljb250cm9sLT5oZWxkX2xlbmd0aCA9IHNvLT5zb19yY3Yu
c2JfY2M7CisJCQkJaGVsZF9sZW5ndGggPSAwOworCQkJfQorCQkJZ290byB3YWl0X3NvbWVfbW9y
ZTsKKwkJfSBlbHNlIGlmIChjb250cm9sLT5kYXRhID09IE5VTEwpIHsKKwkJCS8qIHdlIG11c3Qg
cmUtc3luYyBzaW5jZSBkYXRhCisJCQkgKiBpcyBwcm9iYWJseSBiZWluZyBhZGRlZAorCQkJICov
CisJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCWlmICgoY29udHJvbC0+bGVuZ3RoID4g
MCkgJiYgKGNvbnRyb2wtPmRhdGEgPT0gTlVMTCkpIHsKKwkJCQkvKiBiaWcgdHJvdWJsZS4uIHdl
IGhhdmUgdGhlIGxvY2sgYW5kIGl0cyBjb3JydXB0PyAqLworI2lmZGVmIElOVkFSSUFOVFMKKwkJ
CQlwYW5pYyAoIkltcG9zc2libGUgZGF0YT09TlVMTCBsZW5ndGggIT0wIik7CisjZW5kaWYKKwkJ
CQlvdXRfZmxhZ3MgfD0gTVNHX0VPUjsKKwkJCQlvdXRfZmxhZ3MgfD0gTVNHX1RSVU5DOworCQkJ
CWNvbnRyb2wtPmxlbmd0aCA9IDA7CisJCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJ
CQlnb3RvIGRvbmVfd2l0aF9jb250cm9sOworCQkJfQorCQkJU0NUUF9JTlBfUkVBRF9VTkxPQ0so
aW5wKTsKKwkJCS8qIFdlIHdpbGwgZmFsbCBhcm91bmQgdG8gZ2V0IG1vcmUgZGF0YSAqLworCQl9
CisJCWdvdG8gZ2V0X21vcmVfZGF0YTsKKwl9IGVsc2UgeworCQkvKi0KKwkJICogR2l2ZSBjYWxs
ZXIgYmFjayB0aGUgbWJ1ZiBjaGFpbiwKKwkJICogc3RvcmUgaW4gdWlvX3Jlc2lkIHRoZSBsZW5n
dGgKKwkJICovCisJCXdha2V1cF9yZWFkX3NvY2tldCA9IDA7CisJCWlmICgoY29udHJvbC0+ZW5k
X2FkZGVkID09IDApIHx8CisJCSAgICAoVEFJTFFfTkVYVChjb250cm9sLCBuZXh0KSA9PSBOVUxM
KSkgeworCQkJLyogTmVlZCB0byBnZXQgcmxvY2sgKi8KKwkJCWlmIChob2xkX3Jsb2NrID09IDAp
IHsKKwkJCQlTQ1RQX0lOUF9SRUFEX0xPQ0soaW5wKTsKKwkJCQlob2xkX3Jsb2NrID0gMTsKKwkJ
CX0KKwkJfQorCQlpZiAoY29udHJvbC0+ZW5kX2FkZGVkKSB7CisJCQlvdXRfZmxhZ3MgfD0gTVNH
X0VPUjsKKwkJCWlmICgoY29udHJvbC0+ZG9fbm90X3JlZl9zdGNiID09IDApICYmCisJCQkgICAg
KGNvbnRyb2wtPnN0Y2IgIT0gTlVMTCkgJiYKKwkJCSAgICAoKGNvbnRyb2wtPnNwZWNfZmxhZ3Mg
JiBNX05PVElGSUNBVElPTikgPT0gMCkpCisJCQkJY29udHJvbC0+c3RjYi0+YXNvYy5zdHJtaW5b
Y29udHJvbC0+c2luZm9fc3RyZWFtXS5kZWxpdmVyeV9zdGFydGVkID0gMDsKKwkJfQorCQlpZiAo
Y29udHJvbC0+c3BlY19mbGFncyAmIE1fTk9USUZJQ0FUSU9OKSB7CisJCQlvdXRfZmxhZ3MgfD0g
TVNHX05PVElGSUNBVElPTjsKKwkJfQorI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmlu
ZWQoQVBQTEVfTEVPUEFSRCkKKwkJdWlvLT51aW9fcmVzaWQgPSBjb250cm9sLT5sZW5ndGg7Cisj
ZWxzZQorCQl1aW9fc2V0cmVzaWQodWlvLCBjb250cm9sLT5sZW5ndGgpOworI2VuZGlmCisjZWxz
ZQorCQl1aW8tPnVpb19yZXNpZCA9IGNvbnRyb2wtPmxlbmd0aDsKKyNlbmRpZgorCQkqbXAgPSBj
b250cm9sLT5kYXRhOworCQltID0gY29udHJvbC0+ZGF0YTsKKwkJd2hpbGUgKG0pIHsKKwkJCWlm
IChTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nZ2luZ19sZXZlbCkgJiBTQ1RQX1NCX0xPR0dJTkdf
RU5BQkxFKSB7CisJCQkJc2N0cF9zYmxvZygmc28tPnNvX3JjdiwKKwkJCQkgICBjb250cm9sLT5k
b19ub3RfcmVmX3N0Y2I/TlVMTDpzdGNiLCBTQ1RQX0xPR19TQkZSRUUsIFNDVFBfQlVGX0xFTiht
KSk7CisJCQl9CisJCQlzY3RwX3NiZnJlZShjb250cm9sLCBzdGNiLCAmc28tPnNvX3JjdiwgbSk7
CisJCQlmcmVlZF9zb19mYXIgKz0gU0NUUF9CVUZfTEVOKG0pOworCQkJZnJlZWRfc29fZmFyICs9
IE1TSVpFOworCQkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFND
VFBfU0JfTE9HR0lOR19FTkFCTEUpIHsKKwkJCQlzY3RwX3NibG9nKCZzby0+c29fcmN2LAorCQkJ
CSAgIGNvbnRyb2wtPmRvX25vdF9yZWZfc3RjYj9OVUxMOnN0Y2IsIFNDVFBfTE9HX1NCUkVTVUxU
LCAwKTsKKwkJCX0KKwkJCW0gPSBTQ1RQX0JVRl9ORVhUKG0pOworCQl9CisJCWNvbnRyb2wtPmRh
dGEgPSBjb250cm9sLT50YWlsX21idWYgPSBOVUxMOworCQljb250cm9sLT5sZW5ndGggPSAwOwor
CQlpZiAob3V0X2ZsYWdzICYgTVNHX0VPUikgeworCQkJLyogRG9uZSB3aXRoIHRoaXMgY29udHJv
bCAqLworCQkJZ290byBkb25lX3dpdGhfY29udHJvbDsKKwkJfQorCX0KKyByZWxlYXNlOgorCWlm
IChob2xkX3Jsb2NrID09IDEpIHsKKwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwkJaG9s
ZF9ybG9jayA9IDA7CisJfQorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0Rf
dmVyc2lvbiA8IDcwMDAwMCkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWlmIChob2xkX3Ni
bG9jayA9PSAwKSB7CisJCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Jsb2Nr
ID0gMTsKKwl9CisjZWxzZQorCWlmIChob2xkX3NibG9jayA9PSAxKSB7CisJCVNPQ0tCVUZfVU5M
T0NLKCZzby0+c29fcmN2KTsKKwkJaG9sZF9zYmxvY2sgPSAwOworCX0KKyNlbmRpZgorI2lmIGRl
ZmluZWQoX19BUFBMRV9fKQorCXNidW5sb2NrKCZzby0+c29fcmN2LCAxKTsKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlzYnVubG9jaygmc28tPnNvX3Jjdik7CisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJc29ja2J1
Zl9sb2NrID0gMDsKKyNlbmRpZgorI2VuZGlmCisKKyByZWxlYXNlX3VubG9ja2VkOgorCWlmICho
b2xkX3NibG9jaykgeworCQlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJCWhvbGRfc2Js
b2NrID0gMDsKKwl9CisJaWYgKChzdGNiKSAmJiAoaW5fZmxhZ3MgJiBNU0dfUEVFSykgPT0gMCkg
eworCQlpZiAoKGZyZWVkX3NvX2ZhciA+PSByd25kX3JlcSkgJiYKKwkJICAgIChjb250cm9sICYm
IChjb250cm9sLT5kb19ub3RfcmVmX3N0Y2IgPT0gMCkpICYmCisJCSAgICAobm9fcmN2X25lZWRl
ZCA9PSAwKSkKKwkJCXNjdHBfdXNlcl9yY3ZkKHN0Y2IsICZmcmVlZF9zb19mYXIsIGhvbGRfcmxv
Y2ssIHJ3bmRfcmVxKTsKKwl9Cisgb3V0OgorCWlmIChtc2dfZmxhZ3MpIHsKKwkJKm1zZ19mbGFn
cyA9IG91dF9mbGFnczsKKwl9CisJaWYgKCgob3V0X2ZsYWdzICYgTVNHX0VPUikgPT0gMCkgJiYK
KwkgICAgKChpbl9mbGFncyAmIE1TR19QRUVLKSA9PSAwKSAmJgorCSAgICAoc2luZm8pICYmCisJ
ICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19FWFRfUkNWSU5GTykg
fHwKKwkgICAgIHNjdHBfaXNfZmVhdHVyZV9vbihpbnAsIFNDVFBfUENCX0ZMQUdTX1JFQ1ZOWFRJ
TkZPKSkpIHsKKwkJc3RydWN0IHNjdHBfZXh0cmN2aW5mbyAqc19leHRyYTsKKwkJc19leHRyYSA9
IChzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvICopc2luZm87CisJCXNfZXh0cmEtPnNlcmluZm9fbmV4
dF9mbGFncyA9IFNDVFBfTk9fTkVYVF9NU0c7CisJfQorCWlmIChob2xkX3Jsb2NrID09IDEpIHsK
KwkJU0NUUF9JTlBfUkVBRF9VTkxPQ0soaW5wKTsKKwl9CisJaWYgKGhvbGRfc2Jsb2NrKSB7CisJ
CVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fcmN2KTsKKwl9CisjaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDAwCisJaWYgKHNvY2tidWZfbG9jaykgewor
CQlzYnVubG9jaygmc28tPnNvX3Jjdik7CisJfQorI2VuZGlmCisKKwlpZiAoZnJlZWNudF9hcHBs
aWVkKSB7CisJCS8qCisJCSAqIFRoZSBsb2NrIG9uIHRoZSBzb2NrZXQgYnVmZmVyIHByb3RlY3Rz
IHVzIHNvIHRoZSBmcmVlCisJCSAqIGNvZGUgd2lsbCBzdG9wLiBCdXQgc2luY2Ugd2UgdXNlZCB0
aGUgc29ja2V0YnVmIGxvY2sgYW5kCisJCSAqIHRoZSBzZW5kZXIgdXNlcyB0aGUgdGNiX2xvY2sg
dG8gaW5jcmVtZW50LCB3ZSBuZWVkIHRvIHVzZQorCQkgKiB0aGUgYXRvbWljIGFkZCB0byB0aGUg
cmVmY250LgorCQkgKi8KKwkJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmZGVmIElOVkFSSUFOVFMK
KwkJCXBhbmljKCJzdGNiIGZvciByZWZjbnQgaGFzIGdvbmUgTlVMTD8iKTsKKwkJCWdvdG8gc3Rh
Z2VfbGVmdDsKKyNlbHNlCisJCQlnb3RvIHN0YWdlX2xlZnQ7CisjZW5kaWYKKwkJfQorCQkvKiBT
YXZlIHRoZSB2YWx1ZSBiYWNrIGZvciBuZXh0IHRpbWUgKi8KKwkJc3RjYi0+ZnJlZWRfYnlfc29y
Y3Zfc2luY2VsYXN0ID0gZnJlZWRfc29fZmFyOworCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNv
Yy5yZWZjbnQsIC0xKTsKKwl9CisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xl
dmVsKSAmU0NUUF9SRUNWX1JXTkRfTE9HR0lOR19FTkFCTEUpIHsKKwkJaWYgKHN0Y2IpIHsKKwkJ
CXNjdHBfbWlzY19pbnRzKFNDVFBfU09SRUNWX0RPTkUsCisJCQkJICAgICAgIGZyZWVkX3NvX2Zh
ciwKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykKKyNpZiBkZWZpbmVkKEFQUExFX0xFT1BBUkQpCisJ
CQkJICAgICAgICgodWlvKSA/IChzbGVuIC0gdWlvLT51aW9fcmVzaWQpIDogc2xlbiksCisjZWxz
ZQorCQkJCSAgICAgICAoKHVpbykgPyAoc2xlbiAtIHVpb19yZXNpZCh1aW8pKSA6IHNsZW4pLAor
I2VuZGlmCisjZWxzZQorCQkJCSAgICAgICAodWludDMyX3QpKCh1aW8pID8gKHNsZW4gLSB1aW8t
PnVpb19yZXNpZCkgOiBzbGVuKSwKKyNlbmRpZgorCQkJCSAgICAgICBzdGNiLT5hc29jLm15X3J3
bmQsCisJCQkJICAgICAgIHNvLT5zb19yY3Yuc2JfY2MpOworCQl9IGVsc2UgeworCQkJc2N0cF9t
aXNjX2ludHMoU0NUUF9TT1JFQ1ZfRE9ORSwKKwkJCQkgICAgICAgZnJlZWRfc29fZmFyLAorI2lm
IGRlZmluZWQoX19BUFBMRV9fKQorI2lmIGRlZmluZWQoQVBQTEVfTEVPUEFSRCkKKwkJCQkgICAg
ICAgKCh1aW8pID8gKHNsZW4gLSB1aW8tPnVpb19yZXNpZCkgOiBzbGVuKSwKKyNlbHNlCisJCQkJ
ICAgICAgICgodWlvKSA/IChzbGVuIC0gdWlvX3Jlc2lkKHVpbykpIDogc2xlbiksCisjZW5kaWYK
KyNlbHNlCisJCQkJICAgICAgICh1aW50MzJfdCkoKHVpbykgPyAoc2xlbiAtIHVpby0+dWlvX3Jl
c2lkKSA6IHNsZW4pLAorI2VuZGlmCisJCQkJICAgICAgIDAsCisJCQkJICAgICAgIHNvLT5zb19y
Y3Yuc2JfY2MpOworCQl9CisJfQorIHN0YWdlX2xlZnQ6CisJaWYgKHdha2V1cF9yZWFkX3NvY2tl
dCkgeworCQlzY3RwX3Nvcndha2V1cChpbnAsIHNvKTsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9
CisKKworI2lmZGVmIFNDVFBfTUJVRl9MT0dHSU5HCitzdHJ1Y3QgbWJ1ZiAqCitzY3RwX21fZnJl
ZShzdHJ1Y3QgbWJ1ZiAqbSkKK3sKKwlpZiAoU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZ2dpbmdf
bGV2ZWwpICYgU0NUUF9NQlVGX0xPR0dJTkdfRU5BQkxFKSB7CisJCXNjdHBfbG9nX21iKG0sIFND
VFBfTUJVRl9JRlJFRSk7CisJfQorCXJldHVybiAobV9mcmVlKG0pKTsKK30KKwordm9pZAorc2N0
cF9tX2ZyZWVtKHN0cnVjdCBtYnVmICptYikKK3sKKwl3aGlsZSAobWIgIT0gTlVMTCkKKwkJbWIg
PSBzY3RwX21fZnJlZShtYik7Cit9CisKKyNlbmRpZgorCitpbnQKK3NjdHBfZHluYW1pY19zZXRf
cHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIgKnNhLCB1aW50MzJfdCB2cmZfaWQpCit7CisJLyogR2l2
ZW4gYSBsb2NhbCBhZGRyZXNzLiBGb3IgYWxsIGFzc29jaWF0aW9ucworCSAqIHRoYXQgaG9sZHMg
dGhlIGFkZHJlc3MsIHJlcXVlc3QgYSBwZWVyLXNldC1wcmltYXJ5LgorCSAqLworCXN0cnVjdCBz
Y3RwX2lmYSAqaWZhOworCXN0cnVjdCBzY3RwX2xhZGRyICp3aTsKKworCWlmYSA9IHNjdHBfZmlu
ZF9pZmFfYnlfYWRkcihzYSwgdnJmX2lkLCAwKTsKKwlpZiAoaWZhID09IE5VTEwpIHsKKwkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVB
RERSTk9UQVZBSUwpOworCQlyZXR1cm4gKEVBRERSTk9UQVZBSUwpOworCX0KKwkvKiBOb3cgdGhh
dCB3ZSBoYXZlIHRoZSBpZmEgd2UgbXVzdCBhd2FrZW4gdGhlCisJICogaXRlcmF0b3Igd2l0aCB0
aGlzIG1lc3NhZ2UuCisJICovCisJd2kgPSBTQ1RQX1pPTkVfR0VUKFNDVFBfQkFTRV9JTkZPKGlw
aV96b25lX2xhZGRyKSwgc3RydWN0IHNjdHBfbGFkZHIpOworCWlmICh3aSA9PSBOVUxMKSB7CisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoTlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElM
LCBFTk9NRU0pOworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCS8qIE5vdyBpbmNyIHRoZSBjb3Vu
dCBhbmQgaW50IHdpIHN0cnVjdHVyZSAqLworCVNDVFBfSU5DUl9MQUREUl9DT1VOVCgpOworCW1l
bXNldCh3aSwgMCwgc2l6ZW9mKCp3aSkpOworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZ3
aS0+c3RhcnRfdGltZSk7CisJd2ktPmlmYSA9IGlmYTsKKwl3aS0+YWN0aW9uID0gU0NUUF9TRVRf
UFJJTV9BRERSOworCWF0b21pY19hZGRfaW50KCZpZmEtPnJlZmNvdW50LCAxKTsKKworCS8qIE5v
dyBhZGQgaXQgdG8gdGhlIHdvcmsgcXVldWUgKi8KKwlTQ1RQX1dRX0FERFJfTE9DSygpOworCS8q
CisJICogU2hvdWxkIHRoaXMgcmVhbGx5IGJlIGEgdGFpbHE/IEFzIGl0IGlzIHdlIHdpbGwgcHJv
Y2VzcyB0aGUKKwkgKiBuZXdlc3QgZmlyc3QgOi0wCisJICovCisJTElTVF9JTlNFUlRfSEVBRCgm
U0NUUF9CQVNFX0lORk8oYWRkcl93cSksIHdpLCBzY3RwX254dF9hZGRyKTsKKwlzY3RwX3RpbWVy
X3N0YXJ0KFNDVFBfVElNRVJfVFlQRV9BRERSX1dRLAorCQkJIChzdHJ1Y3Qgc2N0cF9pbnBjYiAq
KU5VTEwsCisJCQkgKHN0cnVjdCBzY3RwX3RjYiAqKU5VTEwsCisJCQkgKHN0cnVjdCBzY3RwX25l
dHMgKilOVUxMKTsKKwlTQ1RQX1dRX0FERFJfVU5MT0NLKCk7CisJcmV0dXJuICgwKTsKK30KKwor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8qIG5vIHNjdHBfc29yZWNlaXZlIGZvciBfX1Vz
ZXJzcGFjZV9fIG5vdyAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQor
aW50CitzY3RwX3NvcmVjZWl2ZSgJc3RydWN0IHNvY2tldCAqc28sCisJCXN0cnVjdCBzb2NrYWRk
ciAqKnBzYSwKKwkJc3RydWN0IHVpbyAqdWlvLAorCQlzdHJ1Y3QgbWJ1ZiAqKm1wMCwKKwkJc3Ry
dWN0IG1idWYgKipjb250cm9scCwKKwkJaW50ICpmbGFnc3ApCit7CisJaW50IGVycm9yLCBmcm9t
bGVuOworCXVpbnQ4X3Qgc29ja2J1ZlsyNTZdOworCXN0cnVjdCBzb2NrYWRkciAqZnJvbTsKKwlz
dHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvIHNpbmZvOworCWludCBmaWxsaW5nX3NpbmZvID0gMTsKKwlp
bnQgZmxhZ3M7CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKworCWlucCA9IChzdHJ1Y3Qgc2N0
cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJLyogcGlja3VwIHRoZSBhc3NvYyB3ZSBhcmUgcmVhZGlu
ZyBmcm9tICovCisJaWYgKGlucCA9PSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCXJldHVybiAoRUlO
VkFMKTsKKwl9CisJaWYgKChzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9QQ0JfRkxBR1Nf
UkVDVkRBVEFJT0VWTlQpICYmCisJICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwgU0NUUF9Q
Q0JfRkxBR1NfUkVDVlJDVklORk8pICYmCisJICAgICBzY3RwX2lzX2ZlYXR1cmVfb2ZmKGlucCwg
U0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElORk8pKSB8fAorCSAgICAoY29udHJvbHAgPT0gTlVMTCkp
IHsKKwkJLyogdXNlciBkb2VzIG5vdCB3YW50IHRoZSBzbmRyY3YgY3RsICovCisJCWZpbGxpbmdf
c2luZm8gPSAwOworCX0KKwlpZiAocHNhKSB7CisJCWZyb20gPSAoc3RydWN0IHNvY2thZGRyICop
c29ja2J1ZjsKKwkJZnJvbWxlbiA9IHNpemVvZihzb2NrYnVmKTsKKyNpZmRlZiBIQVZFX1NBX0xF
TgorCQlmcm9tLT5zYV9sZW4gPSAwOworI2VuZGlmCisJfSBlbHNlIHsKKwkJZnJvbSA9IE5VTEw7
CisJCWZyb21sZW4gPSAwOworCX0KKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorCVNDVFBfU09D
S0VUX0xPQ0soc28sIDEpOworI2VuZGlmCisJaWYgKGZpbGxpbmdfc2luZm8pIHsKKwkJbWVtc2V0
KCZzaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX2V4dHJjdmluZm8pKTsKKwl9CisJaWYgKGZs
YWdzcCAhPSBOVUxMKSB7CisJCWZsYWdzID0gKmZsYWdzcDsKKwl9IGVsc2UgeworCQlmbGFncyA9
IDA7CisJfQorCWVycm9yID0gc2N0cF9zb3JlY3Ztc2coc28sIHVpbywgbXAwLCBmcm9tLCBmcm9t
bGVuLCAmZmxhZ3MsCisJICAgIChzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICopJnNpbmZvLCBmaWxs
aW5nX3NpbmZvKTsKKwlpZiAoZmxhZ3NwICE9IE5VTEwpIHsKKwkJKmZsYWdzcCA9IGZsYWdzOwor
CX0KKwlpZiAoY29udHJvbHAgIT0gTlVMTCkgeworCQkvKiBjb3B5IGJhY2sgdGhlIHNpbmZvIGlu
IGEgQ01TRyBmb3JtYXQgKi8KKwkJaWYgKGZpbGxpbmdfc2luZm8gJiYgKChmbGFncyAmIE1TR19O
T1RJRklDQVRJT04pID09IDApKSB7CisJCQkqY29udHJvbHAgPSBzY3RwX2J1aWxkX2N0bF9uY2h1
bmsoaW5wLAorCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc2N0
cF9zbmRyY3ZpbmZvICopJnNpbmZvKTsKKwkJfSBlbHNlIHsKKwkJCSpjb250cm9scCA9IE5VTEw7
CisJCX0KKwl9CisJaWYgKHBzYSkgeworCQkvKiBjb3B5IGJhY2sgdGhlIGFkZHJlc3MgaW5mbyAq
LworI2lmZGVmIEhBVkVfU0FfTEVOCisJCWlmIChmcm9tICYmIGZyb20tPnNhX2xlbikgeworI2Vs
c2UKKwkJaWYgKGZyb20pIHsKKyNlbmRpZgorI2lmIChkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+IDUwMDAwMCkgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJCSpw
c2EgPSBzb2R1cHNvY2thZGRyKGZyb20sIE1fTk9XQUlUKTsKKyNlbHNlCisJCQkqcHNhID0gZHVw
X3NvY2thZGRyKGZyb20sIG1wMCA9PSAwKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJKnBzYSA9
IE5VTEw7CisJCX0KKwl9CisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJU0NUUF9TT0NLRVRfVU5M
T0NLKHNvLCAxKTsKKyNlbmRpZgorCXJldHVybiAoZXJyb3IpOworfQorCisKKyNpZiAoZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA2MDMwMDApIHx8IGRlZmluZWQo
X19XaW5kb3dzX18pCisvKgorICogR2VuZXJhbCByb3V0aW5lIHRvIGFsbG9jYXRlIGEgaGFzaCB0
YWJsZSB3aXRoIGNvbnRyb2wgb2YgbWVtb3J5IGZsYWdzLgorICogaXMgaW4gNy4wIGFuZCBiZXlv
bmQgZm9yIHN1cmUgOi0pCisgKi8KK3ZvaWQgKgorc2N0cF9oYXNoaW5pdF9mbGFncyhpbnQgZWxl
bWVudHMsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgdV9s
b25nICpoYXNobWFzaywgaW50IGZsYWdzKQoreworCWxvbmcgaGFzaHNpemU7CisJTElTVF9IRUFE
KGdlbmVyaWMsIGdlbmVyaWMpICpoYXNodGJsOworCWludCBpOworCisKKwlpZiAoZWxlbWVudHMg
PD0gMCkgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJcGFuaWMoImhhc2hpbml0OiBiYWQgZWxlbWVu
dHMiKTsKKyNlbHNlCisJCVNDVFBfUFJJTlRGKCJoYXNoaW5pdDogYmFkIGVsZW1lbnRzPyIpOwor
CQllbGVtZW50cyA9IDE7CisjZW5kaWYKKwl9CisJZm9yIChoYXNoc2l6ZSA9IDE7IGhhc2hzaXpl
IDw9IGVsZW1lbnRzOyBoYXNoc2l6ZSA8PD0gMSkKKwkJY29udGludWU7CisJaGFzaHNpemUgPj49
IDE7CisJaWYgKGZsYWdzICYgSEFTSF9XQUlUT0spCisJCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9u
ZyloYXNoc2l6ZSAqIHNpemVvZigqaGFzaHRibCksIHR5cGUsIE1fV0FJVE9LKTsKKwllbHNlIGlm
IChmbGFncyAmIEhBU0hfTk9XQUlUKQorCQloYXNodGJsID0gbWFsbG9jKCh1X2xvbmcpaGFzaHNp
emUgKiBzaXplb2YoKmhhc2h0YmwpLCB0eXBlLCBNX05PV0FJVCk7CisJZWxzZSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCQlwYW5pYygiZmxhZyBpbmNvcnJlY3QgaW4gaGFzaGluaXRfZmxhZ3MiKTsK
KyNlbHNlCisJCXJldHVybiAoTlVMTCk7CisjZW5kaWYKKwl9CisKKwkvKiBubyBtZW1vcnk/ICov
CisJaWYgKGhhc2h0YmwgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKworCWZvciAoaSA9IDA7
IGkgPCBoYXNoc2l6ZTsgaSsrKQorCQlMSVNUX0lOSVQoJmhhc2h0YmxbaV0pOworCSpoYXNobWFz
ayA9IGhhc2hzaXplIC0gMTsKKwlyZXR1cm4gKGhhc2h0YmwpOworfQorI2VuZGlmCisKKyNlbHNl
IC8qICBfX1VzZXJzcGFjZV9fIGlmZGVmIGFib3ZlIHNjdHBfc29yZWNlaXZlICovCisvKgorICog
X19Vc2Vyc3BhY2VfXyBEZWZpbmluZyBzY3RwX2hhc2hpbml0X2ZsYWdzKCkgYW5kIHNjdHBfaGFz
aGRlc3Ryb3koKSBmb3IgdXNlcmxhbmQuCisgKiBOT1RFOiBXZSBkb24ndCB3YW50IG11bHRpcGxl
IGRlZmluaXRpb25zIGhlcmUuIFNvIHNjdHBfaGFzaGluaXRfZmxhZ3MoKSBhYm92ZSBmb3IKKyAq
X19GcmVlQlNEX18gbXVzdCBiZSBleGNsdWRlZC4KKyAqCisgKi8KKwordm9pZCAqCitzY3RwX2hh
c2hpbml0X2ZsYWdzKGludCBlbGVtZW50cywgc3RydWN0IG1hbGxvY190eXBlICp0eXBlLAorICAg
ICAgICAgICAgICAgICAgICB1X2xvbmcgKmhhc2htYXNrLCBpbnQgZmxhZ3MpCit7CisJbG9uZyBo
YXNoc2l6ZTsKKwlMSVNUX0hFQUQoZ2VuZXJpYywgZ2VuZXJpYykgKmhhc2h0Ymw7CisJaW50IGk7
CisKKwlpZiAoZWxlbWVudHMgPD0gMCkgeworCQlTQ1RQX1BSSU5URigiaGFzaGluaXQ6IGJhZCBl
bGVtZW50cz8iKTsKKyNpZmRlZiBJTlZBUklBTlRTCisJCXJldHVybiAoTlVMTCk7CisjZWxzZQor
CQllbGVtZW50cyA9IDE7CisjZW5kaWYKKwl9CisJZm9yIChoYXNoc2l6ZSA9IDE7IGhhc2hzaXpl
IDw9IGVsZW1lbnRzOyBoYXNoc2l6ZSA8PD0gMSkKKwkJY29udGludWU7CisJaGFzaHNpemUgPj49
IDE7CisJLypjYW5ub3QgdXNlIE1BTExPQyBoZXJlIGJlY2F1c2UgaXQgaGFzIHRvIGJlIGRlY2xh
cmVkIG9yIGRlZmluZWQKKwkgIHVzaW5nIE1BTExPQ19ERUNMQVJFIG9yIE1BTExPQ19ERUZJTkUg
Zmlyc3QuICovCisJaWYgKGZsYWdzICYgSEFTSF9XQUlUT0spCisJCWhhc2h0YmwgPSBtYWxsb2Mo
KHVfbG9uZyloYXNoc2l6ZSAqIHNpemVvZigqaGFzaHRibCkpOworCWVsc2UgaWYgKGZsYWdzICYg
SEFTSF9OT1dBSVQpCisJCWhhc2h0YmwgPSBtYWxsb2MoKHVfbG9uZyloYXNoc2l6ZSAqIHNpemVv
ZigqaGFzaHRibCkpOworCWVsc2UgeworI2lmZGVmIElOVkFSSUFOVFMKKwkJU0NUUF9QUklOVEYo
ImZsYWcgaW5jb3JyZWN0IGluIGhhc2hpbml0X2ZsYWdzLlxuIik7CisjZW5kaWYKKwkJcmV0dXJu
IChOVUxMKTsKKwl9CisKKwkvKiBubyBtZW1vcnk/ICovCisJaWYgKGhhc2h0YmwgPT0gTlVMTCkK
KwkJcmV0dXJuIChOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBoYXNoc2l6ZTsgaSsrKQorCQlM
SVNUX0lOSVQoJmhhc2h0YmxbaV0pOworCSpoYXNobWFzayA9IGhhc2hzaXplIC0gMTsKKwlyZXR1
cm4gKGhhc2h0YmwpOworfQorCisKK3ZvaWQKK3NjdHBfaGFzaGRlc3Ryb3kodm9pZCAqdmhhc2h0
YmwsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKQoreworCUxJU1Rf
SEVBRChnZW5lcmljLCBnZW5lcmljKSAqaGFzaHRibCwgKmhwOworCisJaGFzaHRibCA9IHZoYXNo
dGJsOworCWZvciAoaHAgPSBoYXNodGJsOyBocCA8PSAmaGFzaHRibFtoYXNobWFza107IGhwKysp
CisJCWlmICghTElTVF9FTVBUWShocCkpIHsKKwkJCVNDVFBfUFJJTlRGKCJoYXNoZGVzdHJveTog
aGFzaCBub3QgZW1wdHkuXG4iKTsKKwkJCXJldHVybjsKKwkJfQorCUZSRUUoaGFzaHRibCwgdHlw
ZSk7Cit9CisKKwordm9pZAorc2N0cF9oYXNoZnJlZWRlc3Ryb3kodm9pZCAqdmhhc2h0YmwsIHN0
cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdV9sb25nIGhhc2htYXNrKQoreworCUxJU1RfSEVBRChn
ZW5lcmljLCBnZW5lcmljKSAqaGFzaHRibC8qLCAqaHAqLzsKKwkvKgorCUxJU1RfRU5UUlkodHlw
ZSkgKnN0YXJ0LCAqdGVtcDsKKwkgKi8KKwloYXNodGJsID0gdmhhc2h0Ymw7CisJLyogQXBwYXJl
bnRseSB0ZW1wIGlzIG5vdCBkeW5hbWljYWxseSBhbGxvY2F0ZWQsIHNvIGF0dGVtcHRzIHRvCisJ
ICAgZnJlZSBpdCByZXN1bHRzIGluIGVycm9yLgorCWZvciAoaHAgPSBoYXNodGJsOyBocCA8PSAm
aGFzaHRibFtoYXNobWFza107IGhwKyspCisJCWlmICghTElTVF9FTVBUWShocCkpIHsKKwkJCXN0
YXJ0ID0gTElTVF9GSVJTVChocCk7CisJCQl3aGlsZSAoc3RhcnQgIT0gTlVMTCkgeworCQkJCXRl
bXAgPSBzdGFydDsKKwkJCQlzdGFydCA9IHN0YXJ0LT5sZV9uZXh0OworCQkJCVNDVFBfUFJJTlRG
KCIlczogJXAgXG4iLCBfX2Z1bmNfXywgKHZvaWQgKil0ZW1wKTsKKwkJCQlGUkVFKHRlbXAsIHR5
cGUpOworCQkJfQorCQl9CisJICovCisJRlJFRShoYXNodGJsLCB0eXBlKTsKK30KKworCisjZW5k
aWYKKworCitpbnQKK3NjdHBfY29ubmVjdHhfaGVscGVyX2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0
Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKwkJCSBpbnQgdG90YWRkciwgaW50ICplcnJvcikK
K3sKKwlpbnQgYWRkZWQgPSAwOworCWludCBpOworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJ
c3RydWN0IHNvY2thZGRyICpzYTsKKwlzaXplX3QgaW5jciA9IDA7CisjaWZkZWYgSU5FVAorCXN0
cnVjdCBzb2NrYWRkcl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29j
a2FkZHJfaW42ICpzaW42OworI2VuZGlmCisKKwlzYSA9IGFkZHI7CisJaW5wID0gc3RjYi0+c2N0
cF9lcDsKKwkqZXJyb3IgPSAwOworCWZvciAoaSA9IDA7IGkgPCB0b3RhZGRyOyBpKyspIHsKKwkJ
c3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJ
CQlpbmNyID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQlzaW4gPSAoc3RydWN0IHNv
Y2thZGRyX2luICopc2E7CisJCQlpZiAoKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9B
TlkpIHx8CisJCQkgICAgKHNpbi0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9CUk9BRENBU1Qp
IHx8CisJCQkgICAgSU5fTVVMVElDQVNUKG50b2hsKHNpbi0+c2luX2FkZHIuc19hZGRyKSkpIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQ
VVRJTCwgRUlOVkFMKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQ
X05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVU
SUwgKyBTQ1RQX0xPQ183KTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290byBvdXRfbm93
OworCQkJfQorCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNi
LT5hc29jLnBvcnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRT
Q09QRSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVE
KSkgeworCQkJCS8qIGFzc29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VS
Ul9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJ
CQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJ
CSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ184KTsK
KwkJCQkqZXJyb3IgPSBFTk9CVUZTOworCQkJCWdvdG8gb3V0X25vdzsKKwkJCX0KKwkJCWFkZGVk
Kys7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJ
CQlpbmNyID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQkJc2luNiA9IChzdHJ1Y3Qg
c29ja2FkZHJfaW42ICopc2E7CisJCQlpZiAoSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoJnNpbjYt
PnNpbjZfYWRkcikgfHwKKwkJCSAgICBJTjZfSVNfQUREUl9NVUxUSUNBU1QoJnNpbjYtPnNpbjZf
YWRkcikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIHN0Y2IsIE5VTEwsIFNDVFBf
RlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBz
dGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZS
T01fU0NUUFVUSUwgKyBTQ1RQX0xPQ185KTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJZ290
byBvdXRfbm93OworCQkJfQorCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBO
VUxMLCBzdGNiLT5hc29jLnBvcnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9E
T05PVF9TRVRTQ09QRSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNf
Q09ORklSTUVEKSkgeworCQkJCS8qIGFzc29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9C
VUZTKTsKKwkJCQkodm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9Q
Uk9DLAorCQkJCSAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQ
X0xPQ18xMCk7CisJCQkJKmVycm9yID0gRU5PQlVGUzsKKwkJCQlnb3RvIG91dF9ub3c7CisJCQl9
CisJCQlhZGRlZCsrOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNl
X18pCisJCWNhc2UgQUZfQ09OTjoKKwkJCWluY3IgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nv
bm4pOworCQkJaWYgKHNjdHBfYWRkX3JlbW90ZV9hZGRyKHN0Y2IsIHNhLCBOVUxMLCBzdGNiLT5h
c29jLnBvcnQsCisJCQkgICAgICAgICAgICAgICAgICAgICAgICAgU0NUUF9ET05PVF9TRVRTQ09Q
RSwKKwkJCSAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0FERFJfSVNfQ09ORklSTUVEKSkg
eworCQkJCS8qIGFzc29jIGdvbmUgbm8gdW4tbG9jayAqLworCQkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoTlVMTCwgc3RjYiwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFTk9CVUZTKTsKKwkJCQko
dm9pZClzY3RwX2ZyZWVfYXNzb2MoaW5wLCBzdGNiLCBTQ1RQX05PUk1BTF9QUk9DLAorCQkJCSAg
ICAgICAgICAgICAgICAgICAgICBTQ1RQX0ZST01fU0NUUFVUSUwgKyBTQ1RQX0xPQ18xMSk7CisJ
CQkJKmVycm9yID0gRU5PQlVGUzsKKwkJCQlnb3RvIG91dF9ub3c7CisJCQl9CisJCQlhZGRlZCsr
OworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCXNhID0g
KHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIGluY3IpOworCX0KKyBvdXRfbm93Ogor
CXJldHVybiAoYWRkZWQpOworfQorCitzdHJ1Y3Qgc2N0cF90Y2IgKgorc2N0cF9jb25uZWN0eF9o
ZWxwZXJfZmluZChzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIs
CisJCQkgIHVuc2lnbmVkIGludCAqdG90YWRkciwKKwkJCSAgdW5zaWduZWQgaW50ICpudW1fdjQs
IHVuc2lnbmVkIGludCAqbnVtX3Y2LCBpbnQgKmVycm9yLAorCQkJICB1bnNpZ25lZCBpbnQgbGlt
aXQsIGludCAqYmFkX2FkZHIpCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzdHJ1Y3Qgc2N0
cF90Y2IgKnN0Y2IgPSBOVUxMOworCXVuc2lnbmVkIGludCBpbmNyLCBhdCwgaTsKKworCWF0ID0g
MDsKKwlzYSA9IGFkZHI7CisJKmVycm9yID0gKm51bV92NiA9ICpudW1fdjQgPSAwOworCS8qIGFj
Y291bnQgYW5kIHZhbGlkYXRlIGFkZHJlc3NlcyAqLworCWZvciAoaSA9IDA7IGkgPCAqdG90YWRk
cjsgaSsrKSB7CisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwkJY2Fz
ZSBBRl9JTkVUOgorCQkJaW5jciA9ICh1bnNpZ25lZCBpbnQpc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbik7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3IpIHsK
KwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBV
VElMLCBFSU5WQUwpOworCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAxOwor
CQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y0KSArPSAxOworCQkJ
YnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQl7CisJCQlz
dHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCisJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9p
bjYgKilzYTsKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkg
eworCQkJCS8qIE11c3QgYmUgbm9uLW1hcHBlZCBmb3IgY29ubmVjdHggKi8KKwkJCQlTQ1RQX0xU
UkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwp
OworCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAxOworCQkJCXJldHVybiAo
TlVMTCk7CisJCQl9CisJCQlpbmNyID0gKHVuc2lnbmVkIGludClzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luNik7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChzYS0+c2FfbGVuICE9IGluY3Ip
IHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1ND
VFBVVElMLCBFSU5WQUwpOworCQkJCSplcnJvciA9IEVJTlZBTDsKKwkJCQkqYmFkX2FkZHIgPSAx
OworCQkJCXJldHVybiAoTlVMTCk7CisJCQl9CisjZW5kaWYKKwkJCSgqbnVtX3Y2KSArPSAxOwor
CQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQlkZWZhdWx0OgorCQkJKnRvdGFkZHIgPSBpOworCQkJ
aW5jciA9IDA7CisJCQkvKiB3ZSBhcmUgZG9uZSAqLworCQkJYnJlYWs7CisJCX0KKwkJaWYgKGkg
PT0gKnRvdGFkZHIpIHsKKwkJCWJyZWFrOworCQl9CisJCVNDVFBfSU5QX0lOQ1JfUkVGKGlucCk7
CisJCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIHNhLCBOVUxMLCBO
VUxMLCBOVUxMKTsKKwkJaWYgKHN0Y2IgIT0gTlVMTCkgeworCQkJLyogQWxyZWFkeSBoYXZlIG9y
IGFtIGJyaW5nIHVwIGFuIGFzc29jaWF0aW9uICovCisJCQlyZXR1cm4gKHN0Y2IpOworCQl9IGVs
c2UgeworCQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJfQorCQlpZiAoKGF0ICsgaW5jcikg
PiBsaW1pdCkgeworCQkJKnRvdGFkZHIgPSBpOworCQkJYnJlYWs7CisJCX0KKwkJc2EgPSAoc3Ry
dWN0IHNvY2thZGRyICopKChjYWRkcl90KXNhICsgaW5jcik7CisJfQorCXJldHVybiAoKHN0cnVj
dCBzY3RwX3RjYiAqKU5VTEwpOworfQorCisvKgorICogc2N0cF9iaW5keChBREQpIGZvciBvbmUg
YWRkcmVzcy4KKyAqIGFzc3VtZXMgYWxsIGFyZ3VtZW50cyBhcmUgdmFsaWQvY2hlY2tlZCBieSBj
YWxsZXIuCisgKi8KK3ZvaWQKK3NjdHBfYmluZHhfYWRkX2FkZHJlc3Moc3RydWN0IHNvY2tldCAq
c28sIHN0cnVjdCBzY3RwX2lucGNiICppbnAsCisJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNh
LCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsCisJCSAgICAgICB1aW50MzJfdCB2cmZfaWQsIGludCAq
ZXJyb3IsIHZvaWQgKnApCit7CisJc3RydWN0IHNvY2thZGRyICphZGRyX3RvdXNlOworI2lmIGRl
ZmluZWQoSU5FVCkgJiYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOwor
I2VuZGlmCisjaWZkZWYgU0NUUF9NVlJGCisJaW50IGksIGZuZCA9IDA7CisjZW5kaWYKKworCS8q
IHNlZSBpZiB3ZSdyZSBib3VuZCBhbGwgYWxyZWFkeSEgKi8KKwlpZiAoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQk9VTkRBTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAs
IE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJKmVycm9yID0gRUlO
VkFMOworCQlyZXR1cm47CisJfQorI2lmZGVmIFNDVFBfTVZSRgorCS8qIElzIHRoZSBWUkYgb25l
IHdlIGhhdmUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgaW5wLT5udW1fdnJmczsgaSsrKSB7CisJCWlm
ICh2cmZfaWQgPT0gaW5wLT5tX3ZyZl9pZHNbaV0pIHsKKwkJCWZuZCA9IDE7CisJCQlicmVhazsK
KwkJfQorCX0KKwlpZiAoIWZuZCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJ
CXJldHVybjsKKwl9CisjZW5kaWYKKwlhZGRyX3RvdXNlID0gc2E7CisjaWZkZWYgSU5FVDYKKwlp
ZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgeworI2lmZGVmIElORVQKKwkJc3RydWN0IHNv
Y2thZGRyX2luNiAqc2luNjsKKworI2VuZGlmCisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKHNh
LT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwor
CQkJKmVycm9yID0gRUlOVkFMOworCQkJcmV0dXJuOworCQl9CisjZW5kaWYKKwkJaWYgKChpbnAt
PnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19CT1VORF9WNikgPT0gMCkgeworCQkJLyogY2Fu
IG9ubHkgYmluZCB2NiBvbiBQRl9JTkVUNiBzb2NrZXRzICovCisJCQlTQ1RQX0xUUkFDRV9FUlJf
UkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJKmVy
cm9yID0gRUlOVkFMOworCQkJcmV0dXJuOworCQl9CisjaWZkZWYgSU5FVAorCQlzaW42ID0gKHN0
cnVjdCBzb2NrYWRkcl9pbjYgKilhZGRyX3RvdXNlOworCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQ
RUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9Q
Q0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCQkgICAgU0NUUF9JUFY2X1Y2T05MWShpbnApKSB7CisJ
CQkJLyogY2FuJ3QgYmluZCB2NC1tYXBwZWQgb24gUEZfSU5FVCBzb2NrZXRzICovCisJCQkJU0NU
UF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlO
VkFMKTsKKwkJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaW42X3Np
bjZfMl9zaW4oJnNpbiwgc2luNik7CisJCQlhZGRyX3RvdXNlID0gKHN0cnVjdCBzb2NrYWRkciAq
KSZzaW47CisJCX0KKyNlbmRpZgorCX0KKyNlbmRpZgorI2lmZGVmIElORVQKKwlpZiAoc2EtPnNh
X2ZhbWlseSA9PSBBRl9JTkVUKSB7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKHNhLT5zYV9s
ZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9S
RVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJy
b3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+c2N0cF9m
bGFncyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSAmJgorCQkgICAgU0NUUF9JUFY2X1Y2T05M
WShpbnApKSB7CisJCQkvKiBjYW4ndCBiaW5kIHY0IG9uIFBGX0lORVQgc29ja2V0cyAqLworCQkJ
U0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwg
RUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRp
ZgorCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19VTkJPVU5EKSB7CisjaWYg
IShkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKSkKKwkJaWYgKHAgPT0gTlVMTCkgeworCQkJLyogQ2FuJ3QgZ2V0IHByb2Mg
Zm9yIE5ldC9PcGVuIEJTRCAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZBTDsKKwkJ
CXJldHVybjsKKwkJfQorI2VuZGlmCisJCSplcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgYWRk
cl90b3VzZSwgTlVMTCwgcCk7CisJCXJldHVybjsKKwl9CisJLyoKKwkgKiBObyBsb2NrcyByZXF1
aXJlZCBoZXJlIHNpbmNlIGJpbmQgYW5kIG1nbXRfZXBfc2EKKwkgKiBhbGwgZG8gdGhlaXIgb3du
IGxvY2tpbmcuIElmIHdlIGRvIHNvbWV0aGluZyBmb3IKKwkgKiB0aGUgRklYOiBiZWxvdyB3ZSBt
YXkgbmVlZCB0byBsb2NrIGluIHRoYXQgY2FzZS4KKwkgKi8KKwlpZiAoYXNzb2NfaWQgPT0gMCkg
eworCQkvKiBhZGQgdGhlIGFkZHJlc3MgKi8KKwkJc3RydWN0IHNjdHBfaW5wY2IgKmxlcDsKKwkJ
c3RydWN0IHNvY2thZGRyX2luICpsc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWFkZHJfdG91
c2U7CisKKwkJLyogdmFsaWRhdGUgdGhlIGluY29taW5nIHBvcnQgKi8KKwkJaWYgKChsc2luLT5z
aW5fcG9ydCAhPSAwKSAmJgorCQkgICAgKGxzaW4tPnNpbl9wb3J0ICE9IGlucC0+c2N0cF9scG9y
dCkpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0g
ZWxzZSB7CisJCQkvKiB1c2VyIHNwZWNpZmllZCAwIHBvcnQsIHNldCBpdCB0byBleGlzdGluZyBw
b3J0ICovCisJCQlsc2luLT5zaW5fcG9ydCA9IGlucC0+c2N0cF9scG9ydDsKKwkJfQorCisJCWxl
cCA9IHNjdHBfcGNiX2ZpbmRlcChhZGRyX3RvdXNlLCAxLCAwLCB2cmZfaWQpOworCQlpZiAobGVw
ICE9IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBXZSBtdXN0IGRlY3JlbWVudCB0aGUgcmVmY291bnQK
KwkJCSAqIHNpbmNlIHdlIGhhdmUgdGhlIGVwIGFscmVhZHkgYW5kCisJCQkgKiBhcmUgYmluZGlu
Zy4gTm8gcmVtb3ZlIGdvaW5nIG9uCisJCQkgKiBoZXJlLgorCQkJICovCisJCQlTQ1RQX0lOUF9E
RUNSX1JFRihsZXApOworCQl9CisJCWlmIChsZXAgPT0gaW5wKSB7CisJCQkvKiBhbHJlYWR5IGJv
dW5kIHRvIGl0Li4gb2sgKi8KKwkJCXJldHVybjsKKwkJfSBlbHNlIGlmIChsZXAgPT0gTlVMTCkg
eworCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyX3RvdXNlKS0+c2luX3BvcnQgPSAwOwor
CQkJKmVycm9yID0gc2N0cF9hZGRyX21nbXRfZXBfc2EoaW5wLCBhZGRyX3RvdXNlLAorCQkJCQkJ
ICAgICAgU0NUUF9BRERfSVBfQUREUkVTUywKKwkJCQkJCSAgICAgIHZyZl9pZCwgTlVMTCk7CisJ
CX0gZWxzZSB7CisJCQkqZXJyb3IgPSBFQUREUklOVVNFOworCQl9CisJCWlmICgqZXJyb3IpCisJ
CQlyZXR1cm47CisJfSBlbHNlIHsKKwkJLyoKKwkJICogRklYOiBkZWNpZGUgd2hldGhlciB3ZSBh
bGxvdyBhc3NvYyBiYXNlZAorCQkgKiBiaW5keAorCQkgKi8KKwl9Cit9CisKKy8qCisgKiBzY3Rw
X2JpbmR4KERFTEVURSkgZm9yIG9uZSBhZGRyZXNzLgorICogYXNzdW1lcyBhbGwgYXJndW1lbnRz
IGFyZSB2YWxpZC9jaGVja2VkIGJ5IGNhbGxlci4KKyAqLwordm9pZAorc2N0cF9iaW5keF9kZWxl
dGVfYWRkcmVzcyhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLAorCQkJICBzdHJ1Y3Qgc29ja2FkZHIg
KnNhLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQsCisJCQkgIHVpbnQzMl90IHZyZl9pZCwgaW50ICpl
cnJvcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJfdG91c2U7CisjaWYgZGVmaW5lZChJTkVU
KSAmJiBkZWZpbmVkKElORVQ2KQorCXN0cnVjdCBzb2NrYWRkcl9pbiBzaW47CisjZW5kaWYKKyNp
ZmRlZiBTQ1RQX01WUkYKKwlpbnQgaSwgZm5kID0gMDsKKyNlbmRpZgorCisJLyogc2VlIGlmIHdl
J3JlIGJvdW5kIGFsbCBhbHJlYWR5ISAqLworCWlmIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BD
Ql9GTEFHU19CT1VOREFMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVM
TCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkqZXJyb3IgPSBFSU5WQUw7CisJCXJl
dHVybjsKKwl9CisjaWZkZWYgU0NUUF9NVlJGCisJLyogSXMgdGhlIFZSRiBvbmUgd2UgaGF2ZSAq
LworCWZvciAoaSA9IDA7IGkgPCBpbnAtPm51bV92cmZzOyBpKyspIHsKKwkJaWYgKHZyZl9pZCA9
PSBpbnAtPm1fdnJmX2lkc1tpXSkgeworCQkJZm5kID0gMTsKKwkJCWJyZWFrOworCQl9CisJfQor
CWlmICghZm5kKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCSplcnJvciA9IEVJTlZBTDsKKwkJcmV0dXJuOwor
CX0KKyNlbmRpZgorCWFkZHJfdG91c2UgPSBzYTsKKyNpZmRlZiBJTkVUNgorCWlmIChzYS0+c2Ff
ZmFtaWx5ID09IEFGX0lORVQ2KSB7CisjaWZkZWYgSU5FVAorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzaW42OworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoc2EtPnNhX2xlbiAh
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
aW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3Ig
PSBFSU5WQUw7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQlpZiAoKGlucC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSA9PSAwKSB7CisJCQkvKiBjYW4gb25seSBiaW5k
IHY2IG9uIFBGX0lORVQ2IHNvY2tldHMgKi8KKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUFVUSUwsIEVJTlZBTCk7CisJCQkqZXJyb3IgPSBFSU5W
QUw7CisJCQlyZXR1cm47CisJCX0KKyNpZmRlZiBJTkVUCisJCXNpbjYgPSAoc3RydWN0IHNvY2th
ZGRyX2luNiAqKWFkZHJfdG91c2U7CisJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+
c2luNl9hZGRyKSkgeworCQkJaWYgKChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19C
T1VORF9WNikgJiYKKwkJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsKKwkJCQkvKiBjYW4n
dCBiaW5kIG1hcHBlZC12NCBvbiBQRl9JTkVUIHNvY2tldHMgKi8KKwkJCQlTQ1RQX0xUUkFDRV9F
UlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOworCQkJ
CSplcnJvciA9IEVJTlZBTDsKKwkJCQlyZXR1cm47CisJCQl9CisJCQlpbjZfc2luNl8yX3Npbigm
c2luLCBzaW42KTsKKwkJCWFkZHJfdG91c2UgPSAoc3RydWN0IHNvY2thZGRyICopJnNpbjsKKwkJ
fQorI2VuZGlmCisJfQorI2VuZGlmCisjaWZkZWYgSU5FVAorCWlmIChzYS0+c2FfZmFtaWx5ID09
IEFGX0lORVQpIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoc2EtPnNhX2xlbiAhPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQVVRJTCwgRUlOVkFMKTsKKwkJCSplcnJvciA9IEVJTlZB
TDsKKwkJCXJldHVybjsKKwkJfQorI2VuZGlmCisJCWlmICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NU
UF9QQ0JfRkxBR1NfQk9VTkRfVjYpICYmCisJCSAgICBTQ1RQX0lQVjZfVjZPTkxZKGlucCkpIHsK
KwkJCS8qIGNhbid0IGJpbmQgdjQgb24gUEZfSU5FVCBzb2NrZXRzICovCisJCQlTQ1RQX0xUUkFD
RV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFBVVElMLCBFSU5WQUwpOwor
CQkJKmVycm9yID0gRUlOVkFMOworCQkJcmV0dXJuOworCQl9CisJfQorI2VuZGlmCisJLyoKKwkg
KiBObyBsb2NrIHJlcXVpcmVkIG1nbXRfZXBfc2EgZG9lcyBpdHMgb3duIGxvY2tpbmcuCisJICog
SWYgdGhlIEZJWDogYmVsb3cgaXMgZXZlciBjaGFuZ2VkIHdlIG1heSBuZWVkIHRvCisJICogbG9j
ayBiZWZvcmUgY2FsbGluZyBhc3NvY2lhdGlvbiBsZXZlbCBiaW5kaW5nLgorCSAqLworCWlmIChh
c3NvY19pZCA9PSAwKSB7CisJCS8qIGRlbGV0ZSB0aGUgYWRkcmVzcyAqLworCQkqZXJyb3IgPSBz
Y3RwX2FkZHJfbWdtdF9lcF9zYShpbnAsIGFkZHJfdG91c2UsCisJCQkJCSAgICAgIFNDVFBfREVM
X0lQX0FERFJFU1MsCisJCQkJCSAgICAgIHZyZl9pZCwgTlVMTCk7CisJfSBlbHNlIHsKKwkJLyoK
KwkJICogRklYOiBkZWNpZGUgd2hldGhlciB3ZSBhbGxvdyBhc3NvYyBiYXNlZAorCQkgKiBiaW5k
eAorCQkgKi8KKwl9Cit9CisKKy8qCisgKiByZXR1cm5zIHRoZSB2YWxpZCBsb2NhbCBhZGRyZXNz
IGNvdW50IGZvciBhbiBhc3NvYywgdGFraW5nIGludG8gYWNjb3VudAorICogYWxsIHNjb3Bpbmcg
cnVsZXMKKyAqLworaW50CitzY3RwX2xvY2FsX2FkZHJfY291bnQoc3RydWN0IHNjdHBfdGNiICpz
dGNiKQoreworCWludCBsb29wYmFja19zY29wZTsKKyNpZiBkZWZpbmVkKElORVQpCisJaW50IGlw
djRfbG9jYWxfc2NvcGUsIGlwdjRfYWRkcl9sZWdhbDsKKyNlbmRpZgorI2lmIGRlZmluZWQgKElO
RVQ2KQorCWludCBsb2NhbF9zY29wZSwgc2l0ZV9zY29wZSwgaXB2Nl9hZGRyX2xlZ2FsOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWludCBjb25uX2FkZHJfbGVnYWw7Cisj
ZW5kaWYKKwlzdHJ1Y3Qgc2N0cF92cmYgKnZyZjsKKwlzdHJ1Y3Qgc2N0cF9pZm4gKnNjdHBfaWZu
OworCXN0cnVjdCBzY3RwX2lmYSAqc2N0cF9pZmE7CisJaW50IGNvdW50ID0gMDsKKworCS8qIFR1
cm4gb24gYWxsIHRoZSBhcHByb3ByaWF0ZSBzY29wZXMgKi8KKwlsb29wYmFja19zY29wZSA9IHN0
Y2ItPmFzb2Muc2NvcGUubG9vcGJhY2tfc2NvcGU7CisjaWYgZGVmaW5lZChJTkVUKQorCWlwdjRf
bG9jYWxfc2NvcGUgPSBzdGNiLT5hc29jLnNjb3BlLmlwdjRfbG9jYWxfc2NvcGU7CisJaXB2NF9h
ZGRyX2xlZ2FsID0gc3RjYi0+YXNvYy5zY29wZS5pcHY0X2FkZHJfbGVnYWw7CisjZW5kaWYKKyNp
ZiBkZWZpbmVkKElORVQ2KQorCWxvY2FsX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5sb2NhbF9z
Y29wZTsKKwlzaXRlX3Njb3BlID0gc3RjYi0+YXNvYy5zY29wZS5zaXRlX3Njb3BlOworCWlwdjZf
YWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Muc2NvcGUuaXB2Nl9hZGRyX2xlZ2FsOworI2VuZGlmCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCWNvbm5fYWRkcl9sZWdhbCA9IHN0Y2ItPmFzb2Mu
c2NvcGUuY29ubl9hZGRyX2xlZ2FsOworI2VuZGlmCisJU0NUUF9JUElfQUREUl9STE9DSygpOwor
CXZyZiA9IHNjdHBfZmluZF92cmYoc3RjYi0+YXNvYy52cmZfaWQpOworCWlmICh2cmYgPT0gTlVM
TCkgeworCQkvKiBubyB2cmYsIG5vIGFkZHJlc3NlcyAqLworCQlTQ1RQX0lQSV9BRERSX1JVTkxP
Q0soKTsKKwkJcmV0dXJuICgwKTsKKwl9CisKKwlpZiAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFn
cyAmIFNDVFBfUENCX0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qCisJCSAqIGJvdW5kIGFsbCBjYXNl
OiBnbyB0aHJvdWdoIGFsbCBpZm5zIG9uIHRoZSB2cmYKKwkJICovCisJCUxJU1RfRk9SRUFDSChz
Y3RwX2lmbiwgJnZyZi0+aWZubGlzdCwgbmV4dF9pZm4pIHsKKwkJCWlmICgobG9vcGJhY2tfc2Nv
cGUgPT0gMCkgJiYKKwkJCSAgICBTQ1RQX0lGTl9JU19JRlRfTE9PUChzY3RwX2lmbikpIHsKKwkJ
CQljb250aW51ZTsKKwkJCX0KKwkJCUxJU1RfRk9SRUFDSChzY3RwX2lmYSwgJnNjdHBfaWZuLT5p
ZmFsaXN0LCBuZXh0X2lmYSkgeworCQkJCWlmIChzY3RwX2lzX2FkZHJfcmVzdHJpY3RlZChzdGNi
LCBzY3RwX2lmYSkpCisJCQkJCWNvbnRpbnVlOworCQkJCXN3aXRjaCAoc2N0cF9pZmEtPmFkZHJl
c3Muc2Euc2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQkJCWNhc2UgQUZfSU5FVDoKKwkJCQkJ
aWYgKGlwdjRfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRyX2luICpzaW47CisK
KwkJCQkJCXNpbiA9ICZzY3RwX2lmYS0+YWRkcmVzcy5zaW47CisJCQkJCQlpZiAoc2luLT5zaW5f
YWRkci5zX2FkZHIgPT0gMCkgeworCQkJCQkJCS8qIHNraXAgdW5zcGVjaWZpZWQgYWRkcnMgKi8K
KwkJCQkJCQljb250aW51ZTsKKwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJ
CQkJaWYgKHByaXNvbl9jaGVja19pcDQoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3Jl
ZCwKKwkJCQkJCSAgICAgICAgICAgICAgICAgICAgICZzaW4tPnNpbl9hZGRyKSAhPSAwKSB7CisJ
CQkJCQkJY29udGludWU7CisJCQkJCQl9CisjZW5kaWYKKwkJCQkJCWlmICgoaXB2NF9sb2NhbF9z
Y29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjRfSVNQUklWQVRFX0FERFJFU1MoJnNpbi0+c2lu
X2FkZHIpKSkgeworCQkJCQkJCWNvbnRpbnVlOworCQkJCQkJfQorCQkJCQkJLyogY291bnQgdGhp
cyBvbmUgKi8KKwkJCQkJCWNvdW50Kys7CisJCQkJCX0gZWxzZSB7CisJCQkJCQljb250aW51ZTsK
KwkJCQkJfQorCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCQkJY2FzZSBBRl9J
TkVUNjoKKwkJCQkJaWYgKGlwdjZfYWRkcl9sZWdhbCkgeworCQkJCQkJc3RydWN0IHNvY2thZGRy
X2luNiAqc2luNjsKKworI2lmIGRlZmluZWQoU0NUUF9FTUJFRERFRF9WNl9TQ09QRSkgJiYgIWRl
ZmluZWQoU0NUUF9LQU1FKQorCQkJCQkJc3RydWN0IHNvY2thZGRyX2luNiBsc2E2OworI2VuZGlm
CisJCQkJCQlzaW42ID0gJnNjdHBfaWZhLT5hZGRyZXNzLnNpbjY7CisJCQkJCQlpZiAoSU42X0lT
X0FERFJfVU5TUEVDSUZJRUQoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQkJCQljb250aW51ZTsK
KwkJCQkJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorCQkJCQkJaWYgKHByaXNvbl9jaGVj
a19pcDYoc3RjYi0+c2N0cF9lcC0+aXBfaW5wLmlucC5pbnBfY3JlZCwKKwkJCQkJCSAgICAgICAg
ICAgICAgICAgICAgICZzaW42LT5zaW42X2FkZHIpICE9IDApIHsKKwkJCQkJCQljb250aW51ZTsK
KwkJCQkJCX0KKyNlbmRpZgorCQkJCQkJaWYgKElONl9JU19BRERSX0xJTktMT0NBTCgmc2luNi0+
c2luNl9hZGRyKSkgeworCQkJCQkJCWlmIChsb2NhbF9zY29wZSA9PSAwKQorCQkJCQkJCQljb250
aW51ZTsKKyNpZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCisJCQkJCQkJaWYgKHNp
bjYtPnNpbjZfc2NvcGVfaWQgPT0gMCkgeworI2lmZGVmIFNDVFBfS0FNRQorCQkJCQkJCQlpZiAo
c2E2X3JlY292ZXJzY29wZShzaW42KSAhPSAwKQorCQkJCQkJCQkJLyoKKwkJCQkJCQkJCSAqIGJh
ZCBsaW5rCisJCQkJCQkJCQkgKiBsb2NhbAorCQkJCQkJCQkJICogYWRkcmVzcworCQkJCQkJCQkJ
ICovCisJCQkJCQkJCQljb250aW51ZTsKKyNlbHNlCisJCQkJCQkJCWxzYTYgPSAqc2luNjsKKwkJ
CQkJCQkJaWYgKGluNl9yZWNvdmVyc2NvcGUoJmxzYTYsCisJCQkJCQkJCSAgICAgICAgICAgICAg
ICAgICAgICZsc2E2LnNpbjZfYWRkciwKKwkJCQkJCQkJICAgICAgICAgICAgICAgICAgICAgTlVM
TCkpCisJCQkJCQkJCQkvKgorCQkJCQkJCQkJICogYmFkIGxpbmsKKwkJCQkJCQkJCSAqIGxvY2Fs
CisJCQkJCQkJCQkgKiBhZGRyZXNzCisJCQkJCQkJCQkgKi8KKwkJCQkJCQkJCWNvbnRpbnVlOwor
CQkJCQkJCQlzaW42ID0gJmxzYTY7CisjZW5kaWYgLyogU0NUUF9LQU1FICovCisJCQkJCQkJfQor
I2VuZGlmIC8qIFNDVFBfRU1CRURERURfVjZfU0NPUEUgKi8KKwkJCQkJCX0KKwkJCQkJCWlmICgo
c2l0ZV9zY29wZSA9PSAwKSAmJgorCQkJCQkJICAgIChJTjZfSVNfQUREUl9TSVRFTE9DQUwoJnNp
bjYtPnNpbjZfYWRkcikpKSB7CisJCQkJCQkJY29udGludWU7CisJCQkJCQl9CisJCQkJCQkvKiBj
b3VudCB0aGlzIG9uZSAqLworCQkJCQkJY291bnQrKzsKKwkJCQkJfQorCQkJCQlicmVhazsKKyNl
bmRpZgorI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCQljYXNlIEFGX0NPTk46CisJCQkJ
CWlmIChjb25uX2FkZHJfbGVnYWwpIHsKKwkJCQkJCWNvdW50Kys7CisJCQkJCX0KKwkJCQkJYnJl
YWs7CisjZW5kaWYKKwkJCQlkZWZhdWx0OgorCQkJCQkvKiBUU05IICovCisJCQkJCWJyZWFrOwor
CQkJCX0KKwkJCX0KKwkJfQorCX0gZWxzZSB7CisJCS8qCisJCSAqIHN1YnNldCBib3VuZCBjYXNl
CisJCSAqLworCQlzdHJ1Y3Qgc2N0cF9sYWRkciAqbGFkZHI7CisJCUxJU1RfRk9SRUFDSChsYWRk
ciwgJnN0Y2ItPnNjdHBfZXAtPnNjdHBfYWRkcl9saXN0LAorCQkJICAgICBzY3RwX254dF9hZGRy
KSB7CisJCQlpZiAoc2N0cF9pc19hZGRyX3Jlc3RyaWN0ZWQoc3RjYiwgbGFkZHItPmlmYSkpIHsK
KwkJCQljb250aW51ZTsKKwkJCX0KKwkJCS8qIGNvdW50IHRoaXMgb25lICovCisJCQljb3VudCsr
OworCQl9CisJfQorCVNDVFBfSVBJX0FERFJfUlVOTE9DSygpOworCXJldHVybiAoY291bnQpOwor
fQorCisjaWYgZGVmaW5lZChTQ1RQX0xPQ0FMX1RSQUNFX0JVRikKKwordm9pZAorc2N0cF9sb2df
dHJhY2UodWludDMyX3Qgc3Vic3lzLCBjb25zdCBjaGFyICpzdHIgU0NUUF9VTlVTRUQsIHVpbnQz
Ml90IGEsIHVpbnQzMl90IGIsIHVpbnQzMl90IGMsIHVpbnQzMl90IGQsIHVpbnQzMl90IGUsIHVp
bnQzMl90IGYpCit7CisJdWludDMyX3Qgc2F2ZWluZGV4LCBuZXdpbmRleDsKKworI2lmIGRlZmlu
ZWQoX19XaW5kb3dzX18pCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpID09IE5VTEwp
IHsKKwkJcmV0dXJuOworCX0KKwlkbyB7CisJCXNhdmVpbmRleCA9IFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2cpLT5pbmRleDsKKwkJaWYgKHNhdmVpbmRleCA+PSBTQ1RQX01BWF9MT0dHSU5HX1NJ
WkUpIHsKKwkJCW5ld2luZGV4ID0gMTsKKwkJfSBlbHNlIHsKKwkJCW5ld2luZGV4ID0gc2F2ZWlu
ZGV4ICsgMTsKKwkJfQorCX0gd2hpbGUgKGF0b21pY19jbXBzZXRfaW50KCZTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKS0+aW5kZXgsIHNhdmVpbmRleCwgbmV3aW5kZXgpID09IDApOworCWlmIChz
YXZlaW5kZXggPj0gU0NUUF9NQVhfTE9HR0lOR19TSVpFKSB7CisJCXNhdmVpbmRleCA9IDA7CisJ
fQorCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnRpbWVzdGFt
cCA9IFNDVFBfR0VUX0NZQ0xFQ09VTlQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVu
dHJ5W3NhdmVpbmRleF0uc3Vic3lzID0gc3Vic3lzOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1swXSA9IGE7CisJU0NUUF9CQVNFX1NZU0NUTChz
Y3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzFdID0gYjsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbMl0gPSBjOworCVNDVFBfQkFT
RV9TWVNDVEwoc2N0cF9sb2cpLT5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1szXSA9IGQ7CisJU0NU
UF9CQVNFX1NZU0NUTChzY3RwX2xvZyktPmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzRdID0gZTsK
KwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS0+ZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbNV0g
PSBmOworI2Vsc2UKKwlkbyB7CisJCXNhdmVpbmRleCA9IFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2cpLmluZGV4OworCQlpZiAoc2F2ZWluZGV4ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgewor
CQkJbmV3aW5kZXggPSAxOworCQl9IGVsc2UgeworCQkJbmV3aW5kZXggPSBzYXZlaW5kZXggKyAx
OworCQl9CisJfSB3aGlsZSAoYXRvbWljX2NtcHNldF9pbnQoJlNDVFBfQkFTRV9TWVNDVEwoc2N0
cF9sb2cpLmluZGV4LCBzYXZlaW5kZXgsIG5ld2luZGV4KSA9PSAwKTsKKwlpZiAoc2F2ZWluZGV4
ID49IFNDVFBfTUFYX0xPR0dJTkdfU0laRSkgeworCQlzYXZlaW5kZXggPSAwOworCX0KKwlTQ1RQ
X0JBU0VfU1lTQ1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnRpbWVzdGFtcCA9IFNDVFBf
R0VUX0NZQ0xFQ09VTlQ7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlbc2F2ZWlu
ZGV4XS5zdWJzeXMgPSBzdWJzeXM7CisJU0NUUF9CQVNFX1NZU0NUTChzY3RwX2xvZykuZW50cnlb
c2F2ZWluZGV4XS5wYXJhbXNbMF0gPSBhOworCVNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2cpLmVu
dHJ5W3NhdmVpbmRleF0ucGFyYW1zWzFdID0gYjsKKwlTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbG9n
KS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1syXSA9IGM7CisJU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X2xvZykuZW50cnlbc2F2ZWluZGV4XS5wYXJhbXNbM10gPSBkOworCVNDVFBfQkFTRV9TWVNDVEwo
c2N0cF9sb2cpLmVudHJ5W3NhdmVpbmRleF0ucGFyYW1zWzRdID0gZTsKKwlTQ1RQX0JBU0VfU1lT
Q1RMKHNjdHBfbG9nKS5lbnRyeVtzYXZlaW5kZXhdLnBhcmFtc1s1XSA9IGY7CisjZW5kaWYKK30K
KworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA4MDAwNDQKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3ZfdWRwX3R1bm5lbGVkX3BhY2tldChz
dHJ1Y3QgbWJ1ZiAqbSwgaW50IG9mZiwgc3RydWN0IGlucGNiICppbnAsCisgICAgY29uc3Qgc3Ry
dWN0IHNvY2thZGRyICpzYSBTQ1RQX1VOVVNFRCwgdm9pZCAqY3R4IFNDVFBfVU5VU0VEKQorewor
CXN0cnVjdCBpcCAqaXBoOworI2lmZGVmIElORVQ2CisJc3RydWN0IGlwNl9oZHIgKmlwNjsKKyNl
bmRpZgorCXN0cnVjdCBtYnVmICpzcCwgKmxhc3Q7CisJc3RydWN0IHVkcGhkciAqdWhkcjsKKwl1
aW50MTZfdCBwb3J0OworCisJaWYgKChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpID09IDApIHsKKwkJ
LyogQ2FuJ3QgaGFuZGxlIG9uZSB0aGF0IGlzIG5vdCBhIHBrdCBoZHIgKi8KKwkJZ290byBvdXQ7
CisJfQorCS8qIFB1bGwgdGhlIHNyYyBwb3J0ICovCisJaXBoID0gbXRvZChtLCBzdHJ1Y3QgaXAg
Kik7CisJdWhkciA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRkcl90KWlwaCArIG9mZik7CisJcG9y
dCA9IHVoZHItPnVoX3Nwb3J0OworCS8qIFNwbGl0IG91dCB0aGUgbWJ1ZiBjaGFpbi4gTGVhdmUg
dGhlCisJICogSVAgaGVhZGVyIGluIG0sIHBsYWNlIHRoZQorCSAqIHJlc3QgaW4gdGhlIHNwLgor
CSAqLworCXNwID0gbV9zcGxpdChtLCBvZmYsIE1fTk9XQUlUKTsKKwlpZiAoc3AgPT0gTlVMTCkg
eworCQkvKiBHYWssIGRyb3AgcGFja2V0LCB3ZSBjYW4ndCBkbyBhIHNwbGl0ICovCisJCWdvdG8g
b3V0OworCX0KKwlpZiAoc3AtPm1fcGt0aGRyLmxlbiA8IHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAr
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpIHsKKwkJLyogR2FrLCBwYWNrZXQgY2FuJ3QgaGF2ZSBh
biBTQ1RQIGhlYWRlciBpbiBpdCAtIHRvbyBzbWFsbCAqLworCQltX2ZyZWVtKHNwKTsKKwkJZ290
byBvdXQ7CisJfQorCS8qIE5vdyBwdWxsIHVwIHRoZSBVRFAgaGVhZGVyIGFuZCBTQ1RQIGhlYWRl
ciB0b2dldGhlciAqLworCXNwID0gbV9wdWxsdXAoc3AsIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSAr
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikpOworCWlmIChzcCA9PSBOVUxMKSB7CisJCS8qIEdhayBw
dWxsdXAgZmFpbGVkICovCisJCWdvdG8gb3V0OworCX0KKwkvKiBUcmltIG91dCB0aGUgVURQIGhl
YWRlciAqLworCW1fYWRqKHNwLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCisJLyogTm93IHJl
Y29uc3RydWN0IHRoZSBtYnVmIGNoYWluICovCisJZm9yIChsYXN0ID0gbTsgbGFzdC0+bV9uZXh0
OyBsYXN0ID0gbGFzdC0+bV9uZXh0KTsKKwlsYXN0LT5tX25leHQgPSBzcDsKKwltLT5tX3BrdGhk
ci5sZW4gKz0gc3AtPm1fcGt0aGRyLmxlbjsKKwkvKgorCSAqIFRoZSBDU1VNX0RBVEFfVkFMSUQg
ZmxhZ3MgaW5kaWNhdGVzIHRoYXQgdGhlIEhXIGNoZWNrZWQgdGhlCisJICogVURQIGNoZWNrc3Vt
IGFuZCBpdCB3YXMgdmFsaWQuCisJICogU2luY2UgQ1NVTV9EQVRBX1ZBTElEID09IENTVU1fU0NU
UF9WQUxJRCB0aGlzIHdvdWxkIGltcGx5IHRoYXQKKwkgKiB0aGUgSFcgYWxzbyB2ZXJpZmllZCB0
aGUgU0NUUCBjaGVja3N1bS4gVGhlcmVmb3JlLCBjbGVhciB0aGUgYml0LgorCSAqLworI2lmIF9f
RnJlZUJTRF92ZXJzaW9uID4gMTAwMDA0OQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FE
LAorCSAgICAgICAgInNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFja2V0KCk6IFBhY2tldCBvZiBs
ZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMgd2l0aCBjc3VtX2ZsYWdzIDB4JWIuXG4iLAorCSAgICAg
ICAgbS0+bV9wa3RoZHIubGVuLAorCSAgICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiks
CisJICAgICAgICAoaW50KW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MsIENTVU1fQklUUyk7CisjZWxz
ZQorCVNDVFBEQkcoU0NUUF9ERUJVR19DUkNPRkZMT0FELAorCSAgICAgICAgInNjdHBfcmVjdl91
ZHBfdHVubmVsZWRfcGFja2V0KCk6IFBhY2tldCBvZiBsZW5ndGggJWQgcmVjZWl2ZWQgb24gJXMg
d2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAorCSAg
ICAgICAgaWZfbmFtZShtLT5tX3BrdGhkci5yY3ZpZiksCisJICAgICAgICBtLT5tX3BrdGhkci5j
c3VtX2ZsYWdzKTsKKyNlbmRpZgorCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgJj0gfkNTVU1fREFU
QV9WQUxJRDsKKwlpcGggPSBtdG9kKG0sIHN0cnVjdCBpcCAqKTsKKwlzd2l0Y2ggKGlwaC0+aXBf
dikgeworI2lmZGVmIElORVQKKwljYXNlIElQVkVSU0lPTjoKKyNpZiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSAxMDAwMDAwCisJCWlwaC0+aXBfbGVuID0gaHRvbnMobnRvaHMoaXBoLT5pcF9sZW4pIC0g
c2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKKyNlbHNlCisJCWlwaC0+aXBfbGVuIC09IHNpemVvZihz
dHJ1Y3QgdWRwaGRyKTsKKyNlbmRpZgorCQlzY3RwX2lucHV0X3dpdGhfcG9ydChtLCBvZmYsIHBv
cnQpOworCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBJUFY2X1ZFUlNJT04g
Pj4gNDoKKwkJaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJaXA2LT5pcDZfcGxl
biA9IGh0b25zKG50b2hzKGlwNi0+aXA2X3BsZW4pIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
KwkJc2N0cDZfaW5wdXRfd2l0aF9wb3J0KCZtLCAmb2ZmLCBwb3J0KTsKKwkJYnJlYWs7CisjZW5k
aWYKKwlkZWZhdWx0OgorCQlnb3RvIG91dDsKKwkJYnJlYWs7CisJfQorCXJldHVybjsKKyBvdXQ6
CisJbV9mcmVlbShtKTsKK30KKyNlbmRpZgorCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gMTEw
MDAwMAorI2lmZGVmIElORVQKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3ZfaWNtcF90dW5uZWxlZF9w
YWNrZXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpzYSwgdm9pZCAqdmlwLCB2b2lkICpjdHgg
U0NUUF9VTlVTRUQpCit7CisJc3RydWN0IGlwICpvdXRlcl9pcCwgKmlubmVyX2lwOworCXN0cnVj
dCBzY3RwaGRyICpzaDsKKwlzdHJ1Y3QgaWNtcCAqaWNtcDsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7
CisJc3RydWN0IHNjdHBfaW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisJc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVjdCBzY3RwX2luaXRfY2h1bmsgKmNoOworCXN0cnVj
dCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKKwl1aW50OF90IHR5cGUsIGNvZGU7CisKKwlpbm5lcl9p
cCA9IChzdHJ1Y3QgaXAgKil2aXA7CisJaWNtcCA9IChzdHJ1Y3QgaWNtcCAqKSgoY2FkZHJfdClp
bm5lcl9pcCAtCisJICAgIChzaXplb2Yoc3RydWN0IGljbXApIC0gc2l6ZW9mKHN0cnVjdCBpcCkp
KTsKKwlvdXRlcl9pcCA9IChzdHJ1Y3QgaXAgKikoKGNhZGRyX3QpaWNtcCAtIHNpemVvZihzdHJ1
Y3QgaXApKTsKKwlpZiAobnRvaHMob3V0ZXJfaXAtPmlwX2xlbikgPAorCSAgICBzaXplb2Yoc3Ry
dWN0IGlwKSArIDggKyAoaW5uZXJfaXAtPmlwX2hsIDw8IDIpICsgc2l6ZW9mKHN0cnVjdCB1ZHBo
ZHIpICsgOCkgeworCQlyZXR1cm47CisJfQorCXVkcCA9IChzdHJ1Y3QgdWRwaGRyICopKChjYWRk
cl90KWlubmVyX2lwICsgKGlubmVyX2lwLT5pcF9obCA8PCAyKSk7CisJc2ggPSAoc3RydWN0IHNj
dHBoZHIgKikodWRwICsgMSk7CisJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW4pKTsKKwlzcmMuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisjaWZkZWYgSEFWRV9TSU5fTEVO
CisJc3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyNlbmRpZgorCXNy
Yy5zaW5fcG9ydCA9IHNoLT5zcmNfcG9ydDsKKwlzcmMuc2luX2FkZHIgPSBpbm5lcl9pcC0+aXBf
c3JjOworCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJZHN0
LnNpbl9mYW1pbHkgPSBBRl9JTkVUOworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVu
ID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwlkc3Quc2luX3BvcnQgPSBz
aC0+ZGVzdF9wb3J0OworCWRzdC5zaW5fYWRkciA9IGlubmVyX2lwLT5pcF9kc3Q7CisJLyoKKwkg
KiAnZHN0JyBob2xkcyB0aGUgZGVzdCBvZiB0aGUgcGFja2V0IHRoYXQgZmFpbGVkIHRvIGJlIHNl
bnQuCisJICogJ3NyYycgaG9sZHMgb3VyIGxvY2FsIGVuZHBvaW50IGFkZHJlc3MuIFRodXMgd2Ug
cmV2ZXJzZQorCSAqIHRoZSBkc3QgYW5kIHRoZSBzcmMgaW4gdGhlIGxvb2t1cC4KKwkgKi8KKwlp
bnAgPSBOVUxMOworCW5ldCA9IE5VTEw7CisJc3RjYiA9IHNjdHBfZmluZGFzc29jaWF0aW9uX2Fk
ZHJfc2EoKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmlucCwgJm5ldCwgMSwKKwkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQpOworCWlmICgoc3RjYiAhPSBOVUxMKSAm
JgorCSAgICAobmV0ICE9IE5VTEwpICYmCisJICAgIChpbnAgIT0gTlVMTCkpIHsKKwkJLyogQ2hl
Y2sgdGhlIFVEUCBwb3J0IG51bWJlcnMgKi8KKwkJaWYgKCh1ZHAtPnVoX2Rwb3J0ICE9IG5ldC0+
cG9ydCkgfHwKKwkJICAgICh1ZHAtPnVoX3Nwb3J0ICE9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwo
c2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpKSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsK
KwkJCXJldHVybjsKKwkJfQorCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLworCQlp
ZiAobnRvaGwoc2gtPnZfdGFnKSAhPSAwKSB7CisJCQkvKgorCQkJICogVGhpcyBtdXN0IGJlIHRo
ZSB2ZXJpZmljYXRpb24gdGFnIHVzZWQKKwkJCSAqIGZvciBzZW5kaW5nIG91dCBwYWNrZXRzLiBX
ZSBkb24ndAorCQkJICogY29uc2lkZXIgcGFja2V0cyByZWZsZWN0aW5nIHRoZQorCQkJICogdmVy
aWZpY2F0aW9uIHRhZy4KKwkJCSAqLworCQkJaWYgKG50b2hsKHNoLT52X3RhZykgIT0gc3RjYi0+
YXNvYy5wZWVyX3Z0YWcpIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJu
OworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKG50b2hzKG91dGVyX2lwLT5pcF9sZW4pID49CisJ
CQkgICAgc2l6ZW9mKHN0cnVjdCBpcCkgKworCQkJICAgIDggKyAoaW5uZXJfaXAtPmlwX2hsIDw8
IDIpICsgOCArIDIwKSB7CisJCQkJLyoKKwkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNr
IGlmIHdlCisJCQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQorCQkJCSAqIGluaXRp
YXRlIHRhZyBtYXRjaGVzLgorCQkJCSAqLworCQkJCWNoID0gKHN0cnVjdCBzY3RwX2luaXRfY2h1
bmsgKikoc2ggKyAxKTsKKwkJCQlpZiAoKGNoLT5jaC5jaHVua190eXBlICE9IFNDVFBfSU5JVElB
VElPTikgfHwKKwkJCQkgICAgKG50b2hsKGNoLT5pbml0LmluaXRpYXRlX3RhZykgIT0gc3RjYi0+
YXNvYy5teV92dGFnKSkgeworCQkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJCXJldHVy
bjsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCQly
ZXR1cm47CisJCQl9CisJCX0KKwkJdHlwZSA9IGljbXAtPmljbXBfdHlwZTsKKwkJY29kZSA9IGlj
bXAtPmljbXBfY29kZTsKKwkJaWYgKCh0eXBlID09IElDTVBfVU5SRUFDSCkgJiYKKwkJICAgIChj
b2RlID09IElDTVBfVU5SRUFDSF9QT1JUKSkgeworCQkJY29kZSA9IElDTVBfVU5SRUFDSF9QUk9U
T0NPTDsKKwkJfQorCQlzY3RwX25vdGlmeShpbnAsIHN0Y2IsIG5ldCwgdHlwZSwgY29kZSwKKwkJ
ICAgICAgICAgICAgbnRvaHMoaW5uZXJfaXAtPmlwX2xlbiksCisJCSAgICAgICAgICAgICh1aW50
MzJfdCludG9ocyhpY21wLT5pY21wX25leHRtdHUpKTsKKwl9IGVsc2UgeworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCisJCS8qCisJCSAqIFhY
WCBtdXN0IGJlIGZpeGVkIGZvciA1LnggYW5kIGhpZ2hlciwgbGVhdmUgZm9yCisJCSAqIDQueAor
CQkgKi8KKwkJaWYgKFBSQ19JU19SRURJUkVDVChjbWQpICYmIChpbnAgIT0gTlVMTCkpIHsKKwkJ
CWluX3J0Y2hhbmdlKChzdHJ1Y3QgaW5wY2IgKilpbnAsCisJCQkgICAgaW5ldGN0bGVycm1hcFtj
bWRdKTsKKwkJfQorI2VuZGlmCisJCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwp
KSB7CisJCQkvKiByZWR1Y2UgcmVmLWNvdW50ICovCisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOwor
CQkJU0NUUF9JTlBfREVDUl9SRUYoaW5wKTsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJ
fQorCQlpZiAoc3RjYikgeworCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQl9CisJfQorCXJl
dHVybjsKK30KKyNlbmRpZgorCisjaWZkZWYgSU5FVDYKK3N0YXRpYyB2b2lkCitzY3RwX3JlY3Zf
aWNtcDZfdHVubmVsZWRfcGFja2V0KGludCBjbWQsIHN0cnVjdCBzb2NrYWRkciAqc2EsIHZvaWQg
KmQsIHZvaWQgKmN0eCBTQ1RQX1VOVVNFRCkKK3sKKwlzdHJ1Y3QgaXA2Y3RscGFyYW0gKmlwNmNw
OworCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0
cnVjdCBzY3RwX25ldHMgKm5ldDsKKwlzdHJ1Y3Qgc2N0cGhkciBzaDsKKwlzdHJ1Y3QgdWRwaGRy
IHVkcDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OworCXVpbnQ4X3QgdHlwZSwgY29k
ZTsKKworCWlwNmNwID0gKHN0cnVjdCBpcDZjdGxwYXJhbSAqKWQ7CisJLyoKKwkgKiBYWFg6IFdl
IGFzc3VtZSB0aGF0IHdoZW4gSVBWNiBpcyBub24gTlVMTCwgTSBhbmQgT0ZGIGFyZQorCSAqIHZh
bGlkLgorCSAqLworCWlmIChpcDZjcC0+aXA2Y19tID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0K
KwkvKiBDaGVjayBpZiB3ZSBjYW4gc2FmZWx5IGV4YW1pbmUgdGhlIHBvcnRzIGFuZCB0aGUKKwkg
KiB2ZXJpZmljYXRpb24gdGFnIG9mIHRoZSBTQ1RQIGNvbW1vbiBoZWFkZXIuCisJICovCisJaWYg
KGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLmxlbiA8CisJICAgIGlwNmNwLT5pcDZjX29mZiArIHNp
emVvZihzdHJ1Y3QgdWRwaGRyKSsgb2Zmc2V0b2Yoc3RydWN0IHNjdHBoZHIsIGNoZWNrc3VtKSkg
eworCQlyZXR1cm47CisJfQorCS8qIENvcHkgb3V0IHRoZSBVRFAgaGVhZGVyLiAqLworCW1lbXNl
dCgmdWRwLCAwLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCW1fY29weWRhdGEoaXA2Y3AtPmlw
NmNfbSwKKwkJICAgaXA2Y3AtPmlwNmNfb2ZmLAorCQkgICBzaXplb2Yoc3RydWN0IHVkcGhkciks
CisJCSAgIChjYWRkcl90KSZ1ZHApOworCS8qIENvcHkgb3V0IHRoZSBwb3J0IG51bWJlcnMgYW5k
IHRoZSB2ZXJpZmljYXRpb24gdGFnLiAqLworCW1lbXNldCgmc2gsIDAsIHNpemVvZihzdHJ1Y3Qg
c2N0cGhkcikpOworCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJICAgaXA2Y3AtPmlwNmNf
b2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpLAorCQkgICBzaXplb2YodWludDE2X3QpICsgc2l6
ZW9mKHVpbnQxNl90KSArIHNpemVvZih1aW50MzJfdCksCisJCSAgIChjYWRkcl90KSZzaCk7CisJ
bWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJc3JjLnNpbjZf
ZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCXNyYy5zaW42X2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCXNyYy5zaW42X3BvcnQgPSBz
aC5zcmNfcG9ydDsKKwlzcmMuc2luNl9hZGRyID0gaXA2Y3AtPmlwNmNfaXA2LT5pcDZfc3JjOwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJaWYgKGluNl9zZXRzY29wZSgmc3JjLnNpbjZfYWRk
ciwgaXA2Y3AtPmlwNmNfbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKKwkJcmV0dXJu
OworCX0KKyNlbmRpZgorCW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
NikpOworCWRzdC5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4K
Kwlkc3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwlk
c3Quc2luNl9wb3J0ID0gc2guZGVzdF9wb3J0OworCWRzdC5zaW42X2FkZHIgPSBpcDZjcC0+aXA2
Y19pcDYtPmlwNl9kc3Q7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwlpZiAoaW42X3NldHNj
b3BlKCZkc3Quc2luNl9hZGRyLCBpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkg
IT0gMCkgeworCQlyZXR1cm47CisJfQorI2VuZGlmCisJaW5wID0gTlVMTDsKKwluZXQgPSBOVUxM
OworCXN0Y2IgPSBzY3RwX2ZpbmRhc3NvY2lhdGlvbl9hZGRyX3NhKChzdHJ1Y3Qgc29ja2FkZHIg
KikmZHN0LAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29j
a2FkZHIgKikmc3JjLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZpbnAs
ICZuZXQsIDEsIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJaWYgKChzdGNiICE9IE5VTEwpICYmCisJ
ICAgIChuZXQgIT0gTlVMTCkgJiYKKwkgICAgKGlucCAhPSBOVUxMKSkgeworCQkvKiBDaGVjayB0
aGUgVURQIHBvcnQgbnVtYmVycyAqLworCQlpZiAoKHVkcC51aF9kcG9ydCAhPSBuZXQtPnBvcnQp
IHx8CisJCSAgICAodWRwLnVoX3Nwb3J0ICE9IGh0b25zKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF91
ZHBfdHVubmVsaW5nX3BvcnQpKSkpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJl
dHVybjsKKwkJfQorCQkvKiBDaGVjayB0aGUgdmVyaWZpY2F0aW9uIHRhZyAqLworCQlpZiAobnRv
aGwoc2gudl90YWcpICE9IDApIHsKKwkJCS8qCisJCQkgKiBUaGlzIG11c3QgYmUgdGhlIHZlcmlm
aWNhdGlvbiB0YWcgdXNlZCBmb3IKKwkJCSAqIHNlbmRpbmcgb3V0IHBhY2tldHMuIFdlIGRvbid0
IGNvbnNpZGVyCisJCQkgKiBwYWNrZXRzIHJlZmxlY3RpbmcgdGhlIHZlcmlmaWNhdGlvbiB0YWcu
CisJCQkgKi8KKwkJCWlmIChudG9obChzaC52X3RhZykgIT0gc3RjYi0+YXNvYy5wZWVyX3Z0YWcp
IHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOworCQkJfQorCQl9IGVs
c2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCQlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9w
a3RoZHIubGVuID49CisJCQkgICAgaXA2Y3AtPmlwNmNfb2ZmICsgc2l6ZW9mKHN0cnVjdCB1ZHBo
ZHIpICsKKwkJCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsK
KwkJCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpICsK
KwkJCSAgICAgICAgICAgICAgICAgICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9pbml0LCBhX3J3
bmQpKSB7CisJCQkJLyoKKwkJCQkgKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIGNoZWNrIGlmIHdlCisJ
CQkJICogZ290IGFuIElOSVQgY2h1bmsgYW5kIGlmIHRoZQorCQkJCSAqIGluaXRpYXRlIHRhZyBt
YXRjaGVzLgorCQkJCSAqLworCQkJCXVpbnQzMl90IGluaXRpYXRlX3RhZzsKKwkJCQl1aW50OF90
IGNodW5rX3R5cGU7CisKKwkJCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCisJCQkJCSAgIGlw
NmNwLT5pcDZjX29mZiArCisJCQkJCSAgIHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArCisJCQkJCSAg
IHNpemVvZihzdHJ1Y3Qgc2N0cGhkciksCisJCQkJCSAgIHNpemVvZih1aW50OF90KSwKKwkJCQkJ
ICAgKGNhZGRyX3QpJmNodW5rX3R5cGUpOworCQkJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwK
KwkJCQkJICAgaXA2Y3AtPmlwNmNfb2ZmICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIp
ICsKKwkJCQkJICAgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArCisJCQkJCSAgIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkciksCisJCQkJCSAgIHNpemVvZih1aW50MzJfdCksCisJCQkJCSAgIChj
YWRkcl90KSZpbml0aWF0ZV90YWcpOworCQkJCWlmICgoY2h1bmtfdHlwZSAhPSBTQ1RQX0lOSVRJ
QVRJT04pIHx8CisJCQkJICAgIChudG9obChpbml0aWF0ZV90YWcpICE9IHN0Y2ItPmFzb2MubXlf
dnRhZykpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlyZXR1cm47CisJCQkJ
fQorCQkJfSBlbHNlIHsKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOwor
CQkJfQorI2Vsc2UKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCXJldHVybjsKKyNlbmRp
ZgorCQl9CisJCXR5cGUgPSBpcDZjcC0+aXA2Y19pY21wNi0+aWNtcDZfdHlwZTsKKwkJY29kZSA9
IGlwNmNwLT5pcDZjX2ljbXA2LT5pY21wNl9jb2RlOworCQlpZiAoKHR5cGUgPT0gSUNNUDZfRFNU
X1VOUkVBQ0gpICYmCisJCSAgICAoY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1BPUlQpKSB7
CisJCQl0eXBlID0gSUNNUDZfUEFSQU1fUFJPQjsKKwkJCWNvZGUgPSBJQ01QNl9QQVJBTVBST0Jf
TkVYVEhFQURFUjsKKwkJfQorCQlzY3RwNl9ub3RpZnkoaW5wLCBzdGNiLCBuZXQsIHR5cGUsIGNv
ZGUsCisJCQkgICAgIG50b2hsKGlwNmNwLT5pcDZjX2ljbXA2LT5pY21wNl9tdHUpKTsKKwl9IGVs
c2UgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAw
MDAwCisJCWlmIChQUkNfSVNfUkVESVJFQ1QoY21kKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQlp
bjZfcnRjaGFuZ2UoKHN0cnVjdCBpbjZwY2IgKilpbnAsCisJCQkgICAgaW5ldDZjdGxlcnJtYXBb
Y21kXSk7CisJCX0KKyNlbmRpZgorCQlpZiAoKHN0Y2IgPT0gTlVMTCkgJiYgKGlucCAhPSBOVUxM
KSkgeworCQkJLyogcmVkdWNlIGlucCdzIHJlZi1jb3VudCAqLworCQkJU0NUUF9JTlBfV0xPQ0so
aW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlucCk7CisJCQlTQ1RQX0lOUF9XVU5MT0NLKGlu
cCk7CisJCX0KKwkJaWYgKHN0Y2IpIHsKKwkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJfQor
CX0KK30KKyNlbmRpZgorI2VuZGlmCisKK3ZvaWQKK3NjdHBfb3Zlcl91ZHBfc3RvcCh2b2lkKQor
eworCS8qCisJICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHN5c2N0bCBjYWxsZXIgaG9sZHMgc2N0
cF9zeXNjdGxfaW5mb19sb2NrKCkgZm9yIHdyaXR0aW5nIQorCSAqLworI2lmZGVmIElORVQKKwlp
ZiAoU0NUUF9CQVNFX0lORk8odWRwNF90dW5fc29ja2V0KSAhPSBOVUxMKSB7CisJCXNvY2xvc2Uo
U0NUUF9CQVNFX0lORk8odWRwNF90dW5fc29ja2V0KSk7CisJCVNDVFBfQkFTRV9JTkZPKHVkcDRf
dHVuX3NvY2tldCkgPSBOVUxMOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBf
QkFTRV9JTkZPKHVkcDZfdHVuX3NvY2tldCkgIT0gTlVMTCkgeworCQlzb2Nsb3NlKFNDVFBfQkFT
RV9JTkZPKHVkcDZfdHVuX3NvY2tldCkpOworCQlTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2Nr
ZXQpID0gTlVMTDsKKwl9CisjZW5kaWYKK30KKworaW50CitzY3RwX292ZXJfdWRwX3N0YXJ0KHZv
aWQpCit7CisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDQ0CisJdWludDE2X3QgcG9ydDsK
KwlpbnQgcmV0OworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gc2luOworI2VuZGlm
CisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNpbjY7CisjZW5kaWYKKwkvKgor
CSAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyBzeXNjdGwgY2FsbGVyIGhvbGRzIHNjdHBfc3lzY3Rs
X2luZm9fbG9jaygpIGZvciB3cml0dGluZyEKKwkgKi8KKwlwb3J0ID0gU0NUUF9CQVNFX1NZU0NU
TChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCk7CisJaWYgKG50b2hzKHBvcnQpID09IDApIHsKKwkJ
LyogTXVzdCBoYXZlIGEgcG9ydCBzZXQgKi8KKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNpZmRl
ZiBJTkVUCisJaWYgKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCkgIT0gTlVMTCkgewor
CQkvKiBBbHJlYWR5IHJ1bm5pbmcgLS0gbXVzdCBzdG9wIGZpcnN0ICovCisJCXJldHVybiAoRUFM
UkVBRFkpOworCX0KKyNlbmRpZgorI2lmZGVmIElORVQ2CisJaWYgKFNDVFBfQkFTRV9JTkZPKHVk
cDZfdHVuX3NvY2tldCkgIT0gTlVMTCkgeworCQkvKiBBbHJlYWR5IHJ1bm5pbmcgLS0gbXVzdCBz
dG9wIGZpcnN0ICovCisJCXJldHVybiAoRUFMUkVBRFkpOworCX0KKyNlbmRpZgorI2lmZGVmIElO
RVQKKwlpZiAoKHJldCA9IHNvY3JlYXRlKFBGX0lORVQsICZTQ1RQX0JBU0VfSU5GTyh1ZHA0X3R1
bl9zb2NrZXQpLAorCSAgICAgICAgICAgICAgICAgICAgU09DS19ER1JBTSwgSVBQUk9UT19VRFAs
CisJICAgICAgICAgICAgICAgICAgICBjdXJ0aHJlYWQtPnRkX3VjcmVkLCBjdXJ0aHJlYWQpKSkg
eworCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKwkvKiBDYWxs
IHRoZSBzcGVjaWFsIFVEUCBob29rLiAqLworCWlmICgocmV0ID0gdWRwX3NldF9rZXJuZWxfdHVu
bmVsaW5nKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCksCisJICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2N0cF9yZWN2X3VkcF90dW5uZWxlZF9wYWNrZXQsCisjaWYg
X19GcmVlQlNEX3ZlcnNpb24gPj0gMTEwMDAwMAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNjdHBfcmVjdl9pY21wX3R1bm5lbGVkX3BhY2tldCwKKyNlbmRpZgorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSkgeworCQlzY3RwX292ZXJfdWRw
X3N0b3AoKTsKKwkJcmV0dXJuIChyZXQpOworCX0KKwkvKiBPaywgd2UgaGF2ZSBhIHNvY2tldCwg
YmluZCBpdCB0byB0aGUgcG9ydC4gKi8KKwltZW1zZXQoJnNpbiwgMCwgc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbikpOworCXNpbi5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7
CisJc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi5zaW5fcG9ydCA9IGh0b25zKHBvcnQp
OworCWlmICgocmV0ID0gc29iaW5kKFNDVFBfQkFTRV9JTkZPKHVkcDRfdHVuX3NvY2tldCksCisJ
ICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzaW4sIGN1cnRocmVhZCkpKSB7
CisJCXNjdHBfb3Zlcl91ZHBfc3RvcCgpOworCQlyZXR1cm4gKHJldCk7CisJfQorI2VuZGlmCisj
aWZkZWYgSU5FVDYKKwlpZiAoKHJldCA9IHNvY3JlYXRlKFBGX0lORVQ2LCAmU0NUUF9CQVNFX0lO
Rk8odWRwNl90dW5fc29ja2V0KSwKKwkgICAgICAgICAgICAgICAgICAgIFNPQ0tfREdSQU0sIElQ
UFJPVE9fVURQLAorCSAgICAgICAgICAgICAgICAgICAgY3VydGhyZWFkLT50ZF91Y3JlZCwgY3Vy
dGhyZWFkKSkpIHsKKwkJc2N0cF9vdmVyX3VkcF9zdG9wKCk7CisJCXJldHVybiAocmV0KTsKKwl9
CisJLyogQ2FsbCB0aGUgc3BlY2lhbCBVRFAgaG9vay4gKi8KKwlpZiAoKHJldCA9IHVkcF9zZXRf
a2VybmVsX3R1bm5lbGluZyhTQ1RQX0JBU0VfSU5GTyh1ZHA2X3R1bl9zb2NrZXQpLAorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjdHBfcmVjdl91ZHBfdHVubmVsZWRfcGFj
a2V0LAorI2lmIF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMDAKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzY3RwX3JlY3ZfaWNtcDZfdHVubmVsZWRfcGFja2V0LAorI2Vu
ZGlmCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCkpKSB7CisJCXNj
dHBfb3Zlcl91ZHBfc3RvcCgpOworCQlyZXR1cm4gKHJldCk7CisJfQorCS8qIE9rLCB3ZSBoYXZl
IGEgc29ja2V0LCBiaW5kIGl0IHRvIHRoZSBwb3J0LiAqLworCW1lbXNldCgmc2luNiwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlzaW42LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpOworCXNpbjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKwlzaW42LnNp
bjZfcG9ydCA9IGh0b25zKHBvcnQpOworCWlmICgocmV0ID0gc29iaW5kKFNDVFBfQkFTRV9JTkZP
KHVkcDZfdHVuX3NvY2tldCksCisJICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAq
KSZzaW42LCBjdXJ0aHJlYWQpKSkgeworCQlzY3RwX292ZXJfdWRwX3N0b3AoKTsKKwkJcmV0dXJu
IChyZXQpOworCX0KKyNlbmRpZgorCXJldHVybiAoMCk7CisjZWxzZQorCXJldHVybiAoRU5PVFNV
UCk7CisjZW5kaWYKK30KKyNlbmRpZgorCisvKgorICogc2N0cF9taW5fbXR1ICgpcmV0dXJucyB0
aGUgbWluaW11bSBvZiBhbGwgbm9uLXplcm8gYXJndW1lbnRzLgorICogSWYgYWxsIGFyZ3VtZW50
cyBhcmUgemVybywgemVybyBpcyByZXR1cm5lZC4KKyAqLwordWludDMyX3QKK3NjdHBfbWluX210
dSh1aW50MzJfdCBtdHUxLCB1aW50MzJfdCBtdHUyLCB1aW50MzJfdCBtdHUzKQoreworCWlmICht
dHUxID4gMCkgeworCQlpZiAobXR1MiA+IDApIHsKKwkJCWlmIChtdHUzID4gMCkgeworCQkJCXJl
dHVybiAobWluKG10dTEsIG1pbihtdHUyLCBtdHUzKSkpOworCQkJfSBlbHNlIHsKKwkJCQlyZXR1
cm4gKG1pbihtdHUxLCBtdHUyKSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAobXR1MyA+IDAp
IHsKKwkJCQlyZXR1cm4gKG1pbihtdHUxLCBtdHUzKSk7CisJCQl9IGVsc2UgeworCQkJCXJldHVy
biAobXR1MSk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpZiAobXR1MiA+IDApIHsKKwkJCWlm
IChtdHUzID4gMCkgeworCQkJCXJldHVybiAobWluKG10dTIsIG10dTMpKTsKKwkJCX0gZWxzZSB7
CisJCQkJcmV0dXJuIChtdHUyKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJldHVybiAobXR1Myk7
CisJCX0KKwl9Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQordm9pZAorc2N0cF9oY19z
ZXRfbXR1KHVuaW9uIHNjdHBfc29ja3N0b3JlICphZGRyLCB1aW50MTZfdCBmaWJudW0sIHVpbnQz
Ml90IG10dSkKK3sKKwlzdHJ1Y3QgaW5fY29ubmluZm8gaW5jOworCisJbWVtc2V0KCZpbmMsIDAs
IHNpemVvZihzdHJ1Y3QgaW5fY29ubmluZm8pKTsKKwlpbmMuaW5jX2ZpYm51bSA9IGZpYm51bTsK
Kwlzd2l0Y2ggKGFkZHItPnNhLnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFGX0lO
RVQ6CisJCWluYy5pbmNfZmFkZHIgPSBhZGRyLT5zaW4uc2luX2FkZHI7CisJCWJyZWFrOworI2Vu
ZGlmCisjaWZkZWYgSU5FVDYKKwljYXNlIEFGX0lORVQ2OgorCQlpbmMuaW5jX2ZsYWdzIHw9IElO
Q19JU0lQVjY7CisJCWluYy5pbmM2X2ZhZGRyID0gYWRkci0+c2luNi5zaW42X2FkZHI7CisJCWJy
ZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuOworCX0KKwl0Y3BfaGNfdXBkYXRlbXR1
KCZpbmMsICh1X2xvbmcpbXR1KTsKK30KKwordWludDMyX3QKK3NjdHBfaGNfZ2V0X210dSh1bmlv
biBzY3RwX3NvY2tzdG9yZSAqYWRkciwgdWludDE2X3QgZmlibnVtKQoreworCXN0cnVjdCBpbl9j
b25uaW5mbyBpbmM7CisKKwltZW1zZXQoJmluYywgMCwgc2l6ZW9mKHN0cnVjdCBpbl9jb25uaW5m
bykpOworCWluYy5pbmNfZmlibnVtID0gZmlibnVtOworCXN3aXRjaCAoYWRkci0+c2Euc2FfZmFt
aWx5KSB7CisjaWZkZWYgSU5FVAorCWNhc2UgQUZfSU5FVDoKKwkJaW5jLmluY19mYWRkciA9IGFk
ZHItPnNpbi5zaW5fYWRkcjsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2Ug
QUZfSU5FVDY6CisJCWluYy5pbmNfZmxhZ3MgfD0gSU5DX0lTSVBWNjsKKwkJaW5jLmluYzZfZmFk
ZHIgPSBhZGRyLT5zaW42LnNpbjZfYWRkcjsKKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0Ogor
CQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gKCh1aW50MzJfdCl0Y3BfaGNfZ2V0bXR1KCZpbmMp
KTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHB1dGlsLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cHV0aWwuaAppbmRleCBl
NjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi42OWZlNDg0OTgxYzFjNGZl
MGVlZjQyOTUwODA1MmEzN2NjYWFmMmQ0IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGli
L25ldGluZXQvc2N0cHV0aWwuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0
cHV0aWwuaApAQCAtMCwwICsxLDQzMCBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldC9zY3RwdXRpbC5oIDMyNDYxNSAy
MDE3LTEwLTE0IDEwOjAyOjU5WiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpZm5kZWYgX05FVElO
RVRfU0NUUF9VVElMX0hfCisjZGVmaW5lIF9ORVRJTkVUX1NDVFBfVVRJTF9IXworCisjaWYgZGVm
aW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKKyNkZWZpbmUgU0NUUF9S
RUFEX0xPQ0tfSEVMRCAxCisjZGVmaW5lIFNDVFBfUkVBRF9MT0NLX05PVF9IRUxEIDAKKworI2lm
ZGVmIFNDVFBfQVNPQ0xPR19PRl9UU05TCit2b2lkIHNjdHBfcHJpbnRfb3V0X3RyYWNrX2xvZyhz
dHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOworI2VuZGlmCisKKyNpZmRlZiBTQ1RQX01CVUZfTE9HR0lO
Rworc3RydWN0IG1idWYgKnNjdHBfbV9mcmVlKHN0cnVjdCBtYnVmICptKTsKK3ZvaWQgc2N0cF9t
X2ZyZWVtKHN0cnVjdCBtYnVmICptKTsKKyNlbHNlCisjZGVmaW5lIHNjdHBfbV9mcmVlIG1fZnJl
ZQorI2RlZmluZSBzY3RwX21fZnJlZW0gbV9mcmVlbQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFND
VFBfTE9DQUxfVFJBQ0VfQlVGKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKK3ZvaWQKK3NjdHBfbG9n
X3RyYWNlKHVpbnQzMl90IGZyLCBjb25zdCBjaGFyICpzdHIgU0NUUF9VTlVTRUQsIHVpbnQzMl90
IGEsIHVpbnQzMl90IGIsIHVpbnQzMl90IGMsIHVpbnQzMl90IGQsIHVpbnQzMl90IGUsIHVpbnQz
Ml90IGYpOworI2VuZGlmCisKKyNkZWZpbmUgc2N0cF9nZXRfYXNzb2NpZChzdGNiKSAoKHNjdHBf
YXNzb2NfdClzdGNiLT5hc29jLmFzc29jX2lkKQorCisKKy8qCisgKiBGdW5jdGlvbiBwcm90b3R5
cGVzCisgKi8KK2ludDMyX3QKK3NjdHBfbWFwX2Fzc29jX3N0YXRlKGludCk7CisKK3VpbnQzMl90
CitzY3RwX2dldF9pZmFfaGFzaF92YWwoc3RydWN0IHNvY2thZGRyICphZGRyKTsKKworc3RydWN0
IHNjdHBfaWZhICoKK3NjdHBfZmluZF9pZmFfaW5fZXAoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwg
c3RydWN0IHNvY2thZGRyICphZGRyLCBpbnQgaG9sZF9sb2NrKTsKKworc3RydWN0IHNjdHBfaWZh
ICoKK3NjdHBfZmluZF9pZmFfYnlfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHVpbnQzMl90
IHZyZl9pZCwgaW50IGhvbGRzX2xvY2spOworCit1aW50MzJfdCBzY3RwX3NlbGVjdF9pbml0aWFs
X1RTTihzdHJ1Y3Qgc2N0cF9wY2IgKik7CisKK3VpbnQzMl90IHNjdHBfc2VsZWN0X2FfdGFnKHN0
cnVjdCBzY3RwX2lucGNiICosIHVpbnQxNl90IGxwb3J0LCB1aW50MTZfdCBycG9ydCwgaW50KTsK
KworaW50IHNjdHBfaW5pdF9hc29jKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3Rj
YiAqLCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQxNl90KTsKKwordm9pZCBzY3RwX2ZpbGxfcmFu
ZG9tX3N0b3JlKHN0cnVjdCBzY3RwX3BjYiAqKTsKKwordm9pZAorc2N0cF9ub3RpZnlfc3RyZWFt
X3Jlc2V0X2FkZChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQxNl90IG51bWJlcmluLAorCQkJ
ICAgICB1aW50MTZfdCBudW1iZXJvdXQsIGludCBmbGFnKTsKK3ZvaWQKK3NjdHBfbm90aWZ5X3N0
cmVhbV9yZXNldF90c24oc3RydWN0IHNjdHBfdGNiICpzdGNiLCB1aW50MzJfdCBzZW5kaW5nX3Rz
biwgdWludDMyX3QgcmVjdl90c24sIGludCBmbGFnKTsKKwordm9pZAorc2N0cF90aW1lcl9zdGFy
dChpbnQsIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVj
dCBzY3RwX25ldHMgKik7CisKK3ZvaWQKK3NjdHBfdGltZXJfc3RvcChpbnQsIHN0cnVjdCBzY3Rw
X2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgdWlu
dDMyX3QpOworCitpbnQKK3NjdHBfZHluYW1pY19zZXRfcHJpbWFyeShzdHJ1Y3Qgc29ja2FkZHIg
KnNhLCB1aW50MzJfdCB2cmZfaWQpOworCit2b2lkCitzY3RwX210dV9zaXplX3Jlc2V0KHN0cnVj
dCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosIHVpbnQzMl90KTsKKwor
dm9pZAorc2N0cF93YWtldXBfdGhlX3JlYWRfc29ja2V0KHN0cnVjdCBzY3RwX2lucGNiICppbnAs
IHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQo
X19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VO
VVNFRAorI2VuZGlmCispOworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQordm9pZCBzY3Rw
X2ludm9rZV9yZWN2X2NhbGxiYWNrKHN0cnVjdCBzY3RwX2lucGNiICosCisgICAgc3RydWN0IHNj
dHBfdGNiICosCisgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKiwKKyAgICBpbnQpOwor
CisjZW5kaWYKK3ZvaWQKK3NjdHBfYWRkX3RvX3JlYWRxKHN0cnVjdCBzY3RwX2lucGNiICppbnAs
CisgICAgc3RydWN0IHNjdHBfdGNiICpzdGNiLAorICAgIHN0cnVjdCBzY3RwX3F1ZXVlZF90b19y
ZWFkICpjb250cm9sLAorICAgIHN0cnVjdCBzb2NrYnVmICpzYiwKKyAgICBpbnQgZW5kLAorICAg
IGludCBpbnByZWFkX2xvY2tlZCwKKyAgICBpbnQgc29fbG9ja2VkCisjaWYgIWRlZmluZWQoX19B
UFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBTQ1RQX1VOVVNF
RAorI2VuZGlmCisgICAgKTsKKwordm9pZCBzY3RwX2l0ZXJhdG9yX3dvcmtlcih2b2lkKTsKKwor
dWludDMyX3Qgc2N0cF9nZXRfcHJldl9tdHUodWludDMyX3QpOwordWludDMyX3Qgc2N0cF9nZXRf
bmV4dF9tdHUodWludDMyX3QpOworCit2b2lkCitzY3RwX3RpbWVvdXRfaGFuZGxlcih2b2lkICop
OworCit1aW50MzJfdAorc2N0cF9jYWxjdWxhdGVfcnRvKHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1
Y3Qgc2N0cF9hc3NvY2lhdGlvbiAqLAorICAgIHN0cnVjdCBzY3RwX25ldHMgKiwgc3RydWN0IHRp
bWV2YWwgKiwgaW50KTsKKwordWludDMyX3Qgc2N0cF9jYWxjdWxhdGVfbGVuKHN0cnVjdCBtYnVm
ICopOworCitjYWRkcl90IHNjdHBfbV9nZXRwdHIoc3RydWN0IG1idWYgKiwgaW50LCBpbnQsIHVp
bnQ4X3QgKik7CisKK3N0cnVjdCBzY3RwX3BhcmFtaGRyICoKK3NjdHBfZ2V0X25leHRfcGFyYW0o
c3RydWN0IG1idWYgKiwgaW50LAorICAgIHN0cnVjdCBzY3RwX3BhcmFtaGRyICosIGludCk7CisK
K3N0cnVjdCBtYnVmICoKK3NjdHBfYWRkX3BhZF90b21idWYoc3RydWN0IG1idWYgKiwgaW50KTsK
Kworc3RydWN0IG1idWYgKgorc2N0cF9wYWRfbGFzdG1idWYoc3RydWN0IG1idWYgKiwgaW50LCBz
dHJ1Y3QgbWJ1ZiAqKTsKKwordm9pZCBzY3RwX3VscF9ub3RpZnkodWludDMyX3QsIHN0cnVjdCBz
Y3RwX3RjYiAqLCB1aW50MzJfdCwgdm9pZCAqLCBpbnQKKyNpZiAhZGVmaW5lZChfX0FQUExFX18p
ICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgIFNDVFBfVU5VU0VECisjZW5k
aWYKKyAgICApOworCit2b2lkCitzY3RwX3B1bGxfb2ZmX2NvbnRyb2xfdG9fbmV3X2lucChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqb2xkX2lucCwKKyAgICBzdHJ1Y3Qgc2N0cF9pbnBjYiAqbmV3X2lucCwK
KyAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIGludCB3YWl0ZmxhZ3MpOworCisKK3ZvaWQgc2N0
cF9zdG9wX3RpbWVyc19mb3Jfc2h1dGRvd24oc3RydWN0IHNjdHBfdGNiICopOworCit2b2lkIHNj
dHBfcmVwb3J0X2FsbF9vdXRib3VuZChzdHJ1Y3Qgc2N0cF90Y2IgKiwgdWludDE2X3QsIGludCwg
aW50CisjaWYgIWRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVT
VElORykKKyAgICBTQ1RQX1VOVVNFRAorI2VuZGlmCisgICAgKTsKKworaW50IHNjdHBfZXhwYW5k
X21hcHBpbmdfYXJyYXkoc3RydWN0IHNjdHBfYXNzb2NpYXRpb24gKiwgdWludDMyX3QpOworCit2
b2lkIHNjdHBfYWJvcnRfbm90aWZpY2F0aW9uKHN0cnVjdCBzY3RwX3RjYiAqLCB1aW50OF90LCB1
aW50MTZfdCwKKwkJCSAgICAgc3RydWN0IHNjdHBfYWJvcnRfY2h1bmsgKiwgaW50CisjaWYgIWRl
ZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChTQ1RQX1NPX0xPQ0tfVEVTVElORykKKyAgICBT
Q1RQX1VOVVNFRAorI2VuZGlmCisgICAgKTsKKworLyogV2UgYWJvcnQgcmVzcG9uZGluZyB0byBh
biBJUCBwYWNrZXQgZm9yIHNvbWUgcmVhc29uICovCit2b2lkCitzY3RwX2Fib3J0X2Fzc29jaWF0
aW9uKHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3QgbWJ1ZiAq
LAorICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qg
c29ja2FkZHIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIgKiwgc3Ry
dWN0IG1idWYgKiwKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorICAgICAgICAgICAgICAgICAg
ICAgICB1aW50OF90LCB1aW50MzJfdCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICB1
aW50MzJfdCwgdWludDE2X3QpOworCisKKy8qIFdlIGNob29zZSB0byBhYm9ydCB2aWEgdXNlciBp
bnB1dCAqLwordm9pZAorc2N0cF9hYm9ydF9hbl9hc3NvY2lhdGlvbihzdHJ1Y3Qgc2N0cF9pbnBj
YiAqLCBzdHJ1Y3Qgc2N0cF90Y2IgKiwKKyAgICBzdHJ1Y3QgbWJ1ZiAqLCBpbnQKKyNpZiAhZGVm
aW5lZChfX0FQUExFX18pICYmICFkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorICAgIFND
VFBfVU5VU0VECisjZW5kaWYKKyk7CisKK3ZvaWQgc2N0cF9oYW5kbGVfb290YihzdHJ1Y3QgbWJ1
ZiAqLCBpbnQsIGludCwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiwg
c3RydWN0IHNvY2thZGRyICosCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjdHBoZHIg
Kiwgc3RydWN0IHNjdHBfaW5wY2IgKiwKKyAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1
ZiAqLAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgICAgICAgICAgICAgICAgICAgdWlu
dDhfdCwgdWludDMyX3QsIHVpbnQxNl90LAorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAg
dWludDMyX3QsIHVpbnQxNl90KTsKKworaW50IHNjdHBfY29ubmVjdHhfaGVscGVyX2FkZChzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBpbnQgdG90YWRk
ciwgaW50ICplcnJvcik7CisKK3N0cnVjdCBzY3RwX3RjYiAqCitzY3RwX2Nvbm5lY3R4X2hlbHBl
cl9maW5kKHN0cnVjdCBzY3RwX2lucGNiICppbnAsIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAg
ICB1bnNpZ25lZCBpbnQgKnRvdGFkZHIsIHVuc2lnbmVkIGludCAqbnVtX3Y0LCB1bnNpZ25lZCBp
bnQgKm51bV92NiwKKyAgICBpbnQgKmVycm9yLCB1bnNpZ25lZCBpbnQgbGltaXQsIGludCAqYmFk
X2FkZHIpOworCitpbnQgc2N0cF9pc190aGVyZV9hbl9hYm9ydF9oZXJlKHN0cnVjdCBtYnVmICos
IGludCwgdWludDMyX3QgKik7CisjaWZkZWYgSU5FVDYKK3VpbnQzMl90IHNjdHBfaXNfc2FtZV9z
Y29wZShzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CisKKyNp
ZiBkZWZpbmVkKFNDVFBfRU1CRURERURfVjZfU0NPUEUpCitzdHJ1Y3Qgc29ja2FkZHJfaW42ICoK
K3NjdHBfcmVjb3Zlcl9zY29wZShzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHN0cnVjdCBzb2NrYWRk
cl9pbjYgKik7CisKKyNpZmRlZiBTQ1RQX0tBTUUKKyNkZWZpbmUgc2N0cF9yZWNvdmVyX3Njb3Bl
X21hYyhhZGRyLCBzdG9yZSkgZG8geyBcCisJIGlmICgoYWRkci0+c2luNl9mYW1pbHkgPT0gQUZf
SU5FVDYpICYmIFwKKwkgICAgIChJTjZfSVNfU0NPUEVfTElOS0xPQ0FMKCZhZGRyLT5zaW42X2Fk
ZHIpKSkgeyBcCisJCSpzdG9yZSA9ICphZGRyOyBcCisJCWlmIChhZGRyLT5zaW42X3Njb3BlX2lk
ID09IDApIHsgXAorCQkJaWYgKCFzYTZfcmVjb3ZlcnNjb3BlKHN0b3JlKSkgeyBcCisJCQkJYWRk
ciA9IHN0b3JlOyBcCisJCQl9IFwKKwkJfSBlbHNlIHsgXAorCQkJaW42X2NsZWFyc2NvcGUoJmFk
ZHItPnNpbjZfYWRkcik7IFwKKwkJCWFkZHIgPSBzdG9yZTsgXAorCQl9IFwKKwkgfSBcCit9IHdo
aWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgc2N0cF9yZWNvdmVyX3Njb3BlX21hYyhhZGRyLCBzdG9y
ZSkgZG8geyBcCisJaWYgKChhZGRyLT5zaW42X2ZhbWlseSA9PSBBRl9JTkVUNikgJiYgXAorCSAg
ICAoSU42X0lTX1NDT1BFX0xJTktMT0NBTCgmYWRkci0+c2luNl9hZGRyKSkpIHsgXAorCQkqc3Rv
cmUgPSAqYWRkcjsgXAorCQlpZiAoYWRkci0+c2luNl9zY29wZV9pZCA9PSAwKSB7IFwKKwkJCWlm
ICghaW42X3JlY292ZXJzY29wZShzdG9yZSwgJnN0b3JlLT5zaW42X2FkZHIsIFwKKwkJCQkJICAg
ICAgTlVMTCkpIHsgXAorCQkJCWFkZHIgPSBzdG9yZTsgXAorCQkJfSBcCisJCX0gZWxzZSB7IFwK
KwkJCWluNl9jbGVhcnNjb3BlKCZhZGRyLT5zaW42X2FkZHIpOyBcCisJCQlhZGRyID0gc3RvcmU7
IFwKKwkJfSBcCisJfSBcCit9IHdoaWxlICgwKQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCitp
bnQgc2N0cF9jbXBhZGRyKHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3Qgc29ja2FkZHIgKik7CisK
K3ZvaWQgc2N0cF9wcmludF9hZGRyZXNzKHN0cnVjdCBzb2NrYWRkciAqKTsKKworaW50CitzY3Rw
X3JlbGVhc2VfcHJfc2N0cF9jaHVuayhzdHJ1Y3Qgc2N0cF90Y2IgKiwgc3RydWN0IHNjdHBfdG1p
dF9jaHVuayAqLAorICAgIHVpbnQ4X3QsIGludAorI2lmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYg
IWRlZmluZWQoU0NUUF9TT19MT0NLX1RFU1RJTkcpCisgICAgU0NUUF9VTlVTRUQKKyNlbmRpZgor
KTsKKworc3RydWN0IG1idWYgKnNjdHBfZ2VuZXJhdGVfY2F1c2UodWludDE2X3QsIGNoYXIgKik7
CitzdHJ1Y3QgbWJ1ZiAqc2N0cF9nZW5lcmF0ZV9ub191c2VyX2RhdGFfY2F1c2UodWludDMyX3Qp
OworCit2b2lkIHNjdHBfYmluZHhfYWRkX2FkZHJlc3Moc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzY3RwX2lucGNiICppbnAsCisJCQkgICAgc3RydWN0IHNvY2thZGRyICpzYSwgc2N0cF9hc3Nv
Y190IGFzc29jX2lkLAorCQkJICAgIHVpbnQzMl90IHZyZl9pZCwgaW50ICplcnJvciwgdm9pZCAq
cCk7Cit2b2lkIHNjdHBfYmluZHhfZGVsZXRlX2FkZHJlc3Moc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKKwkJCSAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBzY3RwX2Fzc29jX3QgYXNzb2NfaWQs
CisJCQkgICAgICAgdWludDMyX3QgdnJmX2lkLCBpbnQgKmVycm9yKTsKKworaW50IHNjdHBfbG9j
YWxfYWRkcl9jb3VudChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IpOworCisjaWZkZWYgU0NUUF9NQkNO
VF9MT0dHSU5HCit2b2lkCitzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RydWN0IHNjdHBfdGNiICosIHN0
cnVjdCBzY3RwX2Fzc29jaWF0aW9uICosCisgICAgc3RydWN0IHNjdHBfdG1pdF9jaHVuayAqLCBp
bnQpOworCisjZWxzZQorI2RlZmluZSBzY3RwX2ZyZWVfYnVmc3BhY2Uoc3RjYiwgYXNvYywgdHAx
LCBjaGtfY250KSAgXAorZG8geyBcCisJaWYgKHRwMS0+ZGF0YSAhPSBOVUxMKSB7IFwKKwkJYXRv
bWljX3N1YnRyYWN0X2ludCgmKChhc29jKS0+Y2h1bmtzX29uX291dF9xdWV1ZSksIGNoa19jbnQp
OyBcCisJCWlmICgoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49IHRwMS0+Ym9va19z
aXplKSB7IFwKKwkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigoYXNvYyktPnRvdGFsX291dHB1dF9x
dWV1ZV9zaXplKSwgdHAxLT5ib29rX3NpemUpOyBcCisJCX0gZWxzZSB7IFwKKwkJCShhc29jKS0+
dG90YWxfb3V0cHV0X3F1ZXVlX3NpemUgPSAwOyBcCisJCX0gXAorCQlpZiAoc3RjYi0+c2N0cF9z
b2NrZXQgJiYgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQ
VFlQRSkgfHwgXAorCQkgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9G
TEFHU19JTl9UQ1BQT09MKSkpIHsgXAorCQkJaWYgKHN0Y2ItPnNjdHBfc29ja2V0LT5zb19zbmQu
c2JfY2MgPj0gdHAxLT5ib29rX3NpemUpIHsgXAorCQkJCWF0b21pY19zdWJ0cmFjdF9pbnQoJigo
c3RjYiktPnNjdHBfc29ja2V0LT5zb19zbmQuc2JfY2MpLCB0cDEtPmJvb2tfc2l6ZSk7IFwKKwkJ
CX0gZWxzZSB7IFwKKwkJCQlzdGNiLT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjID0gMDsgXAor
CQkJfSBcCisJCX0gXAorCX0gXAorfSB3aGlsZSAoMCkKKworI2VuZGlmCisKKyNkZWZpbmUgc2N0
cF9mcmVlX3NwYnVmc3BhY2Uoc3RjYiwgYXNvYywgc3ApICBcCitkbyB7IFwKKwlpZiAoc3AtPmRh
dGEgIT0gTlVMTCkgeyBcCisJCWlmICgoYXNvYyktPnRvdGFsX291dHB1dF9xdWV1ZV9zaXplID49
IHNwLT5sZW5ndGgpIHsgXAorCQkJYXRvbWljX3N1YnRyYWN0X2ludCgmKGFzb2MpLT50b3RhbF9v
dXRwdXRfcXVldWVfc2l6ZSwgc3AtPmxlbmd0aCk7IFwKKwkJfSBlbHNlIHsgXAorCQkJKGFzb2Mp
LT50b3RhbF9vdXRwdXRfcXVldWVfc2l6ZSA9IDA7IFwKKwkJfSBcCisJCWlmIChzdGNiLT5zY3Rw
X3NvY2tldCAmJiAoKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19U
Q1BUWVBFKSB8fCBcCisJCSAgICAoc3RjYi0+c2N0cF9lcC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0lOX1RDUFBPT0wpKSkgeyBcCisJCQlpZiAoc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3Nu
ZC5zYl9jYyA+PSBzcC0+bGVuZ3RoKSB7IFwKKwkJCQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNi
LT5zY3RwX3NvY2tldC0+c29fc25kLnNiX2NjLHNwLT5sZW5ndGgpOyBcCisJCQl9IGVsc2UgeyBc
CisJCQkJc3RjYi0+c2N0cF9zb2NrZXQtPnNvX3NuZC5zYl9jYyA9IDA7IFwKKwkJCX0gXAorCQl9
IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgc2N0cF9zbmRfc2JfYWxsb2Moc3RjYiwg
c3opICBcCitkbyB7IFwKKwlhdG9taWNfYWRkX2ludCgmc3RjYi0+YXNvYy50b3RhbF9vdXRwdXRf
cXVldWVfc2l6ZSxzeik7IFwKKwlpZiAoKHN0Y2ItPnNjdHBfc29ja2V0ICE9IE5VTEwpICYmIFwK
KwkgICAgKChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfVENQVFlQ
RSkgfHwgXAorCSAgICAgKHN0Y2ItPnNjdHBfZXAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFH
U19JTl9UQ1BQT09MKSkpIHsgXAorCQlhdG9taWNfYWRkX2ludCgmc3RjYi0+c2N0cF9zb2NrZXQt
PnNvX3NuZC5zYl9jYyxzeik7IFwKKwl9IFwKK30gd2hpbGUgKDApCisKKy8qIGZ1bmN0aW9ucyB0
byBzdGFydC9zdG9wIHVkcCB0dW5uZWxpbmcgKi8KKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwg
ZGVmaW5lZChfX0ZyZWVCU0RfXykKK3ZvaWQgc2N0cF9vdmVyX3VkcF9zdG9wKHZvaWQpOworaW50
IHNjdHBfb3Zlcl91ZHBfc3RhcnQodm9pZCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV2luZG93
c19fKQordm9pZCBzY3RwX292ZXJfdWRwX3Jlc3RhcnQodm9pZCk7CisjZW5kaWYKKworaW50Citz
Y3RwX3NvcmVjZWl2ZShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqcHNhLAor
ICAgIHN0cnVjdCB1aW8gKnVpbywKKyAgICBzdHJ1Y3QgbWJ1ZiAqKm1wMCwKKyAgICBzdHJ1Y3Qg
bWJ1ZiAqKmNvbnRyb2xwLAorICAgIGludCAqZmxhZ3NwKTsKKwordm9pZAorc2N0cF9taXNjX2lu
dHModWludDhfdCBmcm9tLCB1aW50MzJfdCBhLCB1aW50MzJfdCBiLCB1aW50MzJfdCBjLCB1aW50
MzJfdCBkKTsKKwordm9pZAorc2N0cF93YWtldXBfbG9nKHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwK
KyAgICB1aW50MzJfdCB3YWtlX2NudCwgaW50IGZyb20pOworCit2b2lkIHNjdHBfbG9nX3N0cm1f
ZGVsX2FsdChzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQzMl90LCB1aW50MTZfdCwgdWludDE2
X3QsIGludCk7CisKK3ZvaWQgc2N0cF9sb2dfbmFnbGVfZXZlbnQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBpbnQgYWN0aW9uKTsKKworCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKK3ZvaWQKK3Nj
dHBfbG9nX21iKHN0cnVjdCBtYnVmICptLCBpbnQgZnJvbSk7CisKK3ZvaWQKK3NjdHBfbG9nX21i
YyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGZyb20pOworI2VuZGlmCisKK3ZvaWQKK3NjdHBfc2Jsb2co
c3RydWN0IHNvY2tidWYgKnNiLAorICAgIHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgaW50IGZyb20s
IGludCBpbmNyKTsKKwordm9pZAorc2N0cF9sb2dfc3RybV9kZWwoc3RydWN0IHNjdHBfcXVldWVk
X3RvX3JlYWQgKmNvbnRyb2wsCisgICAgc3RydWN0IHNjdHBfcXVldWVkX3RvX3JlYWQgKnBvc2No
aywKKyAgICBpbnQgZnJvbSk7Cit2b2lkIHNjdHBfbG9nX2N3bmQoc3RydWN0IHNjdHBfdGNiICpz
dGNiLCBzdHJ1Y3Qgc2N0cF9uZXRzICosIGludCwgdWludDhfdCk7Cit2b2lkIHJ0b19sb2dnaW5n
KHN0cnVjdCBzY3RwX25ldHMgKm5ldCwgaW50IGZyb20pOworCit2b2lkIHNjdHBfbG9nX2Nsb3Np
bmcoc3RydWN0IHNjdHBfaW5wY2IgKmlucCwgc3RydWN0IHNjdHBfdGNiICpzdGNiLCBpbnQxNl90
IGxvYyk7CisKK3ZvaWQgc2N0cF9sb2dfbG9jayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsIHVpbnQ4X3QgZnJvbSk7Cit2b2lkIHNjdHBfbG9nX21heGJ1cnN0
KHN0cnVjdCBzY3RwX3RjYiAqc3RjYiwgc3RydWN0IHNjdHBfbmV0cyAqLCBpbnQsIGludCwgdWlu
dDhfdCk7Cit2b2lkIHNjdHBfbG9nX2Jsb2NrKHVpbnQ4X3QsIHN0cnVjdCBzY3RwX2Fzc29jaWF0
aW9uICosIHNpemVfdCk7Cit2b2lkIHNjdHBfbG9nX3J3bmQodWludDhfdCwgdWludDMyX3QsIHVp
bnQzMl90LCB1aW50MzJfdCk7Cit2b2lkIHNjdHBfbG9nX3J3bmRfc2V0KHVpbnQ4X3QsIHVpbnQz
Ml90LCB1aW50MzJfdCwgdWludDMyX3QsIHVpbnQzMl90KTsKK2ludCBzY3RwX2ZpbGxfc3RhdF9s
b2codm9pZCAqLCBzaXplX3QgKik7Cit2b2lkIHNjdHBfbG9nX2ZyKHVpbnQzMl90LCB1aW50MzJf
dCwgdWludDMyX3QsIGludCk7Cit2b2lkIHNjdHBfbG9nX3NhY2sodWludDMyX3QsIHVpbnQzMl90
LCB1aW50MzJfdCwgdWludDE2X3QsIHVpbnQxNl90LCBpbnQpOwordm9pZCBzY3RwX2xvZ19tYXAo
dWludDMyX3QsIHVpbnQzMl90LCB1aW50MzJfdCwgaW50KTsKK3ZvaWQgc2N0cF9wcmludF9tYXBw
aW5nX2FycmF5KHN0cnVjdCBzY3RwX2Fzc29jaWF0aW9uICphc29jKTsKK3ZvaWQgc2N0cF9jbHJf
c3RhdF9sb2codm9pZCk7CisKKworI2lmZGVmIFNDVFBfQVVESVRJTkdfRU5BQkxFRAordm9pZAor
c2N0cF9hdWRpdGluZyhpbnQsIHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAq
LAorICAgIHN0cnVjdCBzY3RwX25ldHMgKik7Cit2b2lkIHNjdHBfYXVkaXRfbG9nKHVpbnQ4X3Qs
IHVpbnQ4X3QpOworCisjZW5kaWYKK3VpbnQzMl90IHNjdHBfbWluX210dSh1aW50MzJfdCwgdWlu
dDMyX3QsIHVpbnQzMl90KTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQordm9pZCBzY3RwX2hj
X3NldF9tdHUodW5pb24gc2N0cF9zb2Nrc3RvcmUgKiwgdWludDE2X3QsIHVpbnQzMl90KTsKK3Vp
bnQzMl90IHNjdHBfaGNfZ2V0X210dSh1bmlvbiBzY3RwX3NvY2tzdG9yZSAqLCB1aW50MTZfdCk7
CisjZW5kaWYKKyNlbmRpZgkJCQkvKiBfS0VSTkVMICovCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3Jz
Y3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNycmVxLmMgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjVhNTdmZDZlN2IzNTM5MzBmYWI4MDBiZGI1YTdlZTk3ZDEx
YmJkNjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0cDZfdXNy
cmVxLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl91c3JyZXEuYwpA
QCAtMCwwICsxLDE4NzAgQEAKKy8qLQorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0z
LUNsYXVzZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMS0yMDA3LCBieSBDaXNjbyBTeXN0ZW1z
LCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKGMpIDIwMDgtMjAxMiwg
YnkgUmFuZGFsbCBTdGV3YXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChj
KSAyMDA4LTIwMTIsIGJ5IE1pY2hhZWwgVHVleGVuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKgorICogYSkgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90
aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqCisgKiBiKSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBjKSBOZWl0aGVyIHRoZSBuYW1lIG9mIENpc2NvIFN5c3RlbXMsIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJ
RCgiJEZyZWVCU0Q6IGhlYWQvc3lzL25ldGluZXQ2L3NjdHA2X3VzcnJlcS5jIDMzMjI3MyAyMDE4
LTA0LTA4IDEyOjA4OjIwWiB0dWV4ZW4gJCIpOworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfb3MuaD4KKyNpZmRlZiBJTkVUNgorI2lmZGVmIF9fRnJlZUJTRF9fCisjaW5jbHVkZSA8
c3lzL3Byb2MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNs
dWRlIDxuZXRpbmV0L3NjdHBfaGVhZGVyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5o
PgorI2luY2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0
cF9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3V0cHV0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX3Vpby5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9hc2NvbmYuaD4KKyNp
bmNsdWRlIDxuZXRpbmV0L3NjdHB1dGlsLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2luZGF0
YS5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF90aW1lci5oPgorI2luY2x1ZGUgPG5ldGluZXQv
c2N0cF9hdXRoLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8
bmV0aW5ldC9zY3RwX291dHB1dC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9ic2RfYWRkci5o
PgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jcmMzMi5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2luY2x1ZGUgPG5l
dGluZXQvdWRwLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQorI2RlZmluZSBB
UFBMRV9GSUxFX05PIDkKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitleHRl
cm4gc3RydWN0IHByb3Rvc3cgaW5ldHN3W107CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fUGFuZGFf
XykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50IGlwNl92Nm9ubHk9MDsKKyNlbmRpZgor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCit2b2lkCitpbjZfc2luNl8y
X3NpbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbiwgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNikK
K3sKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJdWludDMyX3QgdGVtcDsK
KyNlbmRpZgorCW1lbXNldChzaW4sIDAsIHNpemVvZigqc2luKSk7CisjaWZkZWYgSEFWRV9TSU5f
TEVOCisJc2luLT5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYK
KwlzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXNpbi0+c2luX3BvcnQgPSBzaW42LT5zaW42
X3BvcnQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXRlbXAgPSBzaW42
LT5zaW42X2FkZHIuczZfYWRkcjE2WzddOworCXRlbXAgPSB0ZW1wIDw8IDE2OworCXRlbXAgPSB0
ZW1wIHwgc2luNi0+c2luNl9hZGRyLnM2X2FkZHIxNls2XTsKKwlzaW4tPnNpbl9hZGRyLnNfYWRk
ciA9IHRlbXA7CisjZWxzZQorCXNpbi0+c2luX2FkZHIuc19hZGRyID0gc2luNi0+c2luNl9hZGRy
LnM2X2FkZHIzMlszXTsKKyNlbmRpZgorfQorCit2b2lkCitpbjZfc2luNl8yX3Npbl9pbl9zb2Nr
KHN0cnVjdCBzb2NrYWRkciAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbiAqc2luX3A7CisJ
c3RydWN0IHNvY2thZGRyX2luNiBzaW42OworCisJLyogc2F2ZSBvcmlnaW5hbCBzb2NrYWRkcl9p
bjYgYWRkciBhbmQgY29udmVydCBpdCB0byBzb2NrYWRkcl9pbiAgKi8KKwlzaW42ID0gKihzdHJ1
Y3Qgc29ja2FkZHJfaW42ICopbmFtOworCXNpbl9wID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5h
bTsKKwlpbjZfc2luNl8yX3NpbihzaW5fcCwgJnNpbjYpOworfQorCit2b2lkCitpbjZfc2luXzJf
djRtYXBzaW42KHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luLCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpz
aW42KQoreworCW1lbXNldChzaW42LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwor
IAlzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwlz
aW42LT5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCXNp
bjYtPnNpbjZfcG9ydCA9IHNpbi0+c2luX3BvcnQ7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQorCSgodWludDMyX3QgKikmc2luNi0+c2luNl9hZGRyKVswXSA9IDA7CisJKCh1
aW50MzJfdCAqKSZzaW42LT5zaW42X2FkZHIpWzFdID0gMDsKKwkoKHVpbnQzMl90ICopJnNpbjYt
PnNpbjZfYWRkcilbMl0gPSBodG9ubCgweGZmZmYpOworCSgodWludDMyX3QgKikmc2luNi0+c2lu
Nl9hZGRyKVszXSA9IHNpbi0+c2luX2FkZHIuc19hZGRyOworI2Vsc2UKKyAJc2luNi0+c2luNl9h
ZGRyLnM2X2FkZHIzMlswXSA9IDA7CisJc2luNi0+c2luNl9hZGRyLnM2X2FkZHIzMlsxXSA9IDA7
CisgCXNpbjYtPnNpbjZfYWRkci5zNl9hZGRyMzJbMl0gPSBodG9ubCgweGZmZmYpOworCXNpbjYt
PnNpbjZfYWRkci5zNl9hZGRyMzJbM10gPSBzaW4tPnNpbl9hZGRyLnNfYWRkcjsKKyNlbmRpZgor
fQorI2VuZGlmCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitpbnQKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX0ZyZWVCU0RfXykKK3NjdHA2X2lucHV0
X3dpdGhfcG9ydChzdHJ1Y3QgbWJ1ZiAqKmlfcGFrLCBpbnQgKm9mZnAsIHVpbnQxNl90IHBvcnQp
CisjZWxpZiBkZWZpbmVkKCBfX1BhbmRhX18pCitzY3RwNl9pbnB1dChwYWtoYW5kbGVfdHlwZSAq
aV9wYWspCisjZWxzZQorc2N0cDZfaW5wdXQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZw
LCBpbnQgcHJvdG8pCisjZW5kaWYKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgaXBobGVuOwor
CXVpbnQzMl90IHZyZl9pZDsKKwl1aW50OF90IGVjbl9iaXRzOworCXN0cnVjdCBzb2NrYWRkcl9p
bjYgc3JjLCBkc3Q7CisJc3RydWN0IGlwNl9oZHIgKmlwNjsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2g7
CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCWludCBsZW5ndGgsIG9mZnNldDsKKwl1aW50
OF90IGNvbXB1dGVfY3JjOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJdWludDMyX3QgbWZs
b3dpZDsKKwl1aW50OF90IG1mbG93dHlwZTsKKwl1aW50MTZfdCBmaWJudW07CisjZW5kaWYKKyNp
ZiAhKGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkIChfX0ZyZWVCU0RfXykpCisJdWludDE2
X3QgcG9ydCA9IDA7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19QYW5kYV9fKQorCS8qIFRoaXMg
aXMgRXZpbCwgYnV0IGl0cyB0aGUgb25seSB3YXkgdG8gbWFrZSBwYW5kYSB3b3JrIHJpZ2h0LiAq
LworCWlwaGxlbiA9IHNpemVvZihzdHJ1Y3QgaXA2X2hkcik7CisjZWxzZQorCWlwaGxlbiA9ICpv
ZmZwOworI2VuZGlmCisJaWYgKFNDVFBfR0VUX1BLVF9WUkZJRCgqaV9wYWssIHZyZl9pZCkpIHsK
KwkJU0NUUF9SRUxFQVNFX1BLVCgqaV9wYWspOworCQlyZXR1cm4gKElQUFJPVE9fRE9ORSk7CisJ
fQorCW0gPSBTQ1RQX0hFQURFUl9UT19DSEFJTigqaV9wYWspOworI2lmZGVmIF9fUGFuZGFfXwor
CVNDVFBfREVUQUNIX0hFQURFUl9GUk9NX0NIQUlOKCppX3Bhayk7CisJKHZvaWQpU0NUUF9SRUxF
QVNFX0hFQURFUigqaV9wYWspOworI2VuZGlmCisjaWZkZWYgU0NUUF9NQlVGX0xPR0dJTkcKKwkv
KiBMb2cgaW4gYW55IGlucHV0IG1idWZzICovCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9s
b2dnaW5nX2xldmVsKSAmIFNDVFBfTUJVRl9MT0dHSU5HX0VOQUJMRSkgeworCQlzY3RwX2xvZ19t
YmMobSwgU0NUUF9NQlVGX0lOUFVUKTsKKwl9CisjZW5kaWYKKyNpZmRlZiBTQ1RQX1BBQ0tFVF9M
T0dHSU5HCisJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9sb2dnaW5nX2xldmVsKSAmIFNDVFBf
TEFTVF9QQUNLRVRfVFJBQ0lORykgeworCQlzY3RwX3BhY2tldF9sb2cobSk7CisJfQorI2VuZGlm
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDEwMDAw
NDkKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwNl9pbnB1
dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAw
eCViLlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIGlmX25hbWUobS0+
bV9wa3RoZHIucmN2aWYpLAorCSAgICAgICAgKGludCltLT5tX3BrdGhkci5jc3VtX2ZsYWdzLCBD
U1VNX0JJVFMpOworI2VsaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gODAwMDAwCisJU0NUUERCRyhT
Q1RQX0RFQlVHX0NSQ09GRkxPQUQsCisJICAgICAgICAic2N0cDZfaW5wdXQoKTogUGFja2V0IG9m
IGxlbmd0aCAlZCByZWNlaXZlZCBvbiAlcyB3aXRoIGNzdW1fZmxhZ3MgMHgleC5cbiIsCisJICAg
ICAgICBtLT5tX3BrdGhkci5sZW4sCisJICAgICAgICBpZl9uYW1lKG0tPm1fcGt0aGRyLnJjdmlm
KSwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2Vsc2UKKwlTQ1RQREJHKFND
VFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2Yg
bGVuZ3RoICVkIHJlY2VpdmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKKwkgICAg
ICAgIG0tPm1fcGt0aGRyLmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFt
ZSwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisjZW5kaWYKKyNp
ZiBkZWZpbmVkKF9fQVBQTEVfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZGTE9BRCwKKwkg
ICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2VpdmVkIG9uICVz
JWQgd2l0aCBjc3VtX2ZsYWdzIDB4JXguXG4iLAorCSAgICAgICAgbS0+bV9wa3RoZHIubGVuLAor
CSAgICAgICAgbS0+bV9wa3RoZHIucmN2aWYtPmlmX25hbWUsCisJICAgICAgICBtLT5tX3BrdGhk
ci5yY3ZpZi0+aWZfdW5pdCwKKwkgICAgICAgIG0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2Vu
ZGlmCisjaWYgZGVmaW5lZChfX1dpbmRvd3NfXykKKwlTQ1RQREJHKFNDVFBfREVCVUdfQ1JDT0ZG
TE9BRCwKKwkgICAgICAgICJzY3RwNl9pbnB1dCgpOiBQYWNrZXQgb2YgbGVuZ3RoICVkIHJlY2Vp
dmVkIG9uICVzIHdpdGggY3N1bV9mbGFncyAweCV4LlxuIiwKKwkgICAgICAgIG0tPm1fcGt0aGRy
LmxlbiwKKwkgICAgICAgIG0tPm1fcGt0aGRyLnJjdmlmLT5pZl94bmFtZSwKKwkgICAgICAgIG0t
Pm1fcGt0aGRyLmNzdW1fZmxhZ3MpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KwltZmxvd2lkID0gbS0+bV9wa3RoZHIuZmxvd2lkOworCW1mbG93dHlwZSA9IE1fSEFTSFRZUEVf
R0VUKG0pOworCWZpYm51bSA9IE1fR0VURklCKG0pOworI2VuZGlmCisJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcmVjdnBhY2tldHMpOworCVNDVFBfU1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBh
Y2tldHMpOworCS8qIEdldCBJUCwgU0NUUCwgYW5kIGZpcnN0IGNodW5rIGhlYWRlciB0b2dldGhl
ciBpbiB0aGUgZmlyc3QgbWJ1Zi4gKi8KKwlvZmZzZXQgPSBpcGhsZW4gKyBzaXplb2Yoc3RydWN0
IHNjdHBoZHIpICsgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwlpcDYgPSBtdG9kKG0s
IHN0cnVjdCBpcDZfaGRyICopOworCUlQNl9FWFRIRFJfR0VUKHNoLCBzdHJ1Y3Qgc2N0cGhkciAq
LCBtLCBpcGhsZW4sCisJCSAgICAgICAoaW50KShzaXplb2Yoc3RydWN0IHNjdHBoZHIpICsgc2l6
ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSkpOworCWlmIChzaCA9PSBOVUxMKSB7CisJCVNDVFBf
U1RBVF9JTkNSKHNjdHBzX2hkcm9wcyk7CisJCXJldHVybiAoSVBQUk9UT19ET05FKTsKKwl9CisJ
Y2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0
IHNjdHBoZHIpKTsKKwlvZmZzZXQgLT0gc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKTsKKwlt
ZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwlzcmMuc2luNl9m
YW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJc3JjLnNpbjZfbGVuID0g
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisJc3JjLnNpbjZfcG9ydCA9IHNo
LT5zcmNfcG9ydDsKKwlzcmMuc2luNl9hZGRyID0gaXA2LT5pcDZfc3JjOworI2lmIGRlZmluZWQo
X19GcmVlQlNEX18pCisjaWYgZGVmaW5lZChfX0FQUExFX18pCisJLyogWFhYOiBUaGlzIGNvZGUg
c2hvdWxkIGFsc28gYmUgdXNlZCBvbiBBcHBsZSAqLworI2VuZGlmCisJaWYgKGluNl9zZXRzY29w
ZSgmc3JjLnNpbjZfYWRkciwgbS0+bV9wa3RoZHIucmN2aWYsIE5VTEwpICE9IDApIHsKKwkJZ290
byBvdXQ7CisJfQorI2VuZGlmCisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KSk7CisJZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42
X0xFTgorCWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRp
ZgorCWRzdC5zaW42X3BvcnQgPSBzaC0+ZGVzdF9wb3J0OworCWRzdC5zaW42X2FkZHIgPSBpcDYt
PmlwNl9kc3Q7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyNpZiBkZWZpbmVkKF9fQVBQTEVf
XykKKwkvKiBYWFg6IFRoaXMgY29kZSBzaG91bGQgYWxzbyBiZSB1c2VkIG9uIEFwcGxlICovCisj
ZW5kaWYKKwlpZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBtLT5tX3BrdGhkci5yY3Zp
ZiwgTlVMTCkgIT0gMCkgeworCQlnb3RvIG91dDsKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
QVBQTEVfXykKKyNpZiBkZWZpbmVkKE5GQUlUSCkgJiYgMCA8IE5GQUlUSAorCWlmIChmYWl0aHBy
ZWZpeCgmZHN0LnNpbjZfYWRkcikpIHsKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCisjZW5kaWYK
KwlsZW5ndGggPSBudG9ocyhpcDYtPmlwNl9wbGVuKSArIGlwaGxlbjsKKwkvKiBWYWxpZGF0ZSBt
YnVmIGNoYWluIGxlbmd0aCB3aXRoIElQIHBheWxvYWQgbGVuZ3RoLiAqLworCWlmIChTQ1RQX0hF
QURFUl9MRU4obSkgIT0gbGVuZ3RoKSB7CisJCVNDVFBEQkcoU0NUUF9ERUJVR19JTlBVVDEsCisJ
CSAgICAgICAgInNjdHA2X2lucHV0KCkgbGVuZ3RoOiVkIHJlcG9ydGVkIGxlbmd0aDolZFxuIiwg
bGVuZ3RoLCBTQ1RQX0hFQURFUl9MRU4obSkpOworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19oZHJv
cHMpOworCQlnb3RvIG91dDsKKwl9CisJaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmaXA2LT5p
cDZfZHN0KSkgeworCQlnb3RvIG91dDsKKwl9CisJZWNuX2JpdHMgPSAoKG50b2hsKGlwNi0+aXA2
X2Zsb3cpID4+IDIwKSAmIDB4MDAwMDAwZmYpOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYm
IF9fRnJlZUJTRF92ZXJzaW9uID49IDgwMDAwMAorCWlmIChtLT5tX3BrdGhkci5jc3VtX2ZsYWdz
ICYgQ1NVTV9TQ1RQX1ZBTElEKSB7CisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7
CisJCWNvbXB1dGVfY3JjID0gMDsKKwl9IGVsc2UgeworI2Vsc2UKKwlpZiAoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spICYmCisJICAgIChJTjZfQVJFX0FERFJfRVFV
QUwoJnNyYy5zaW42X2FkZHIsICZkc3Quc2luNl9hZGRyKSkpIHsKKwkJU0NUUF9TVEFUX0lOQ1Io
c2N0cHNfcmVjdmh3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAwOworCX0gZWxzZSB7CisjZW5kaWYK
KwkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJY29tcHV0ZV9jcmMgPSAxOwor
CX0KKwlzY3RwX2NvbW1vbl9pbnB1dF9wcm9jZXNzaW5nKCZtLCBpcGhsZW4sIG9mZnNldCwgbGVu
Z3RoLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZz
cmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRz
dCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWNuX2JpdHMsCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1mbG93dHlwZSwgbWZsb3dpZCwgZmlibnVtLAorI2VuZGlmCisJICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2cmZfaWQsIHBvcnQpOworIG91dDoKKwlpZiAobSkgewor
CQlzY3RwX21fZnJlZW0obSk7CisJfQorCXJldHVybiAoSVBQUk9UT19ET05FKTsKK30KKworI2lm
IGRlZmluZWQoX19BUFBMRV9fKQoraW50CitzY3RwNl9pbnB1dChzdHJ1Y3QgbWJ1ZiAqKmlfcGFr
LCBpbnQgKm9mZnApCit7CisJcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9m
ZnAsIDApKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKK2ludAorc2N0
cDZfaW5wdXQoc3RydWN0IG1idWYgKippX3BhaywgaW50ICpvZmZwLCBpbnQgcHJvdG8gU0NUUF9V
TlVTRUQpCit7CisJcmV0dXJuIChzY3RwNl9pbnB1dF93aXRoX3BvcnQoaV9wYWssIG9mZnAsIDAp
KTsKK30KKyNlbmRpZgorCit2b2lkCitzY3RwNl9ub3RpZnkoc3RydWN0IHNjdHBfaW5wY2IgKmlu
cCwKKyAgICAgICAgICAgICBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCisgICAgICAgICAgICAgc3Ry
dWN0IHNjdHBfbmV0cyAqbmV0LAorICAgICAgICAgICAgIHVpbnQ4X3QgaWNtcDZfdHlwZSwKKyAg
ICAgICAgICAgICB1aW50OF90IGljbXA2X2NvZGUsCisgICAgICAgICAgICAgdWludDMyX3QgbmV4
dF9tdHUpCit7CisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoU0NUUF9TT19MT0NL
X1RFU1RJTkcpCisJc3RydWN0IHNvY2tldCAqc287CisjZW5kaWYKKwlpbnQgdGltZXJfc3RvcHBl
ZDsKKworCXN3aXRjaCAoaWNtcDZfdHlwZSkgeworCWNhc2UgSUNNUDZfRFNUX1VOUkVBQ0g6CisJ
CWlmICgoaWNtcDZfY29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9OT1JPVVRFKSB8fAorCQkgICAg
KGljbXA2X2NvZGUgPT0gSUNNUDZfRFNUX1VOUkVBQ0hfQURNSU4pIHx8CisJCSAgICAoaWNtcDZf
Y29kZSA9PSBJQ01QNl9EU1RfVU5SRUFDSF9CRVlPTkRTQ09QRSkgfHwKKwkJICAgIChpY21wNl9j
b2RlID09IElDTVA2X0RTVF9VTlJFQUNIX0FERFIpKSB7CisJCQkvKiBNYXJrIHRoZSBuZXQgdW5y
ZWFjaGFibGUuICovCisJCQlpZiAobmV0LT5kZXN0X3N0YXRlICYgU0NUUF9BRERSX1JFQUNIQUJM
RSkgeworCQkJCS8qIE9rIHRoYXQgZGVzdGluYXRpb24gaXMgbm90IHJlYWNoYWJsZSAqLworCQkJ
CW5ldC0+ZGVzdF9zdGF0ZSAmPSB+U0NUUF9BRERSX1JFQUNIQUJMRTsKKwkJCQluZXQtPmRlc3Rf
c3RhdGUgJj0gflNDVFBfQUREUl9QRjsKKwkJCQlzY3RwX3VscF9ub3RpZnkoU0NUUF9OT1RJRllf
SU5URVJGQUNFX0RPV04sCisJCQkJICAgICAgICAgICAgICAgIHN0Y2IsIDAsICh2b2lkICopbmV0
LCBTQ1RQX1NPX05PVF9MT0NLRUQpOworCQkJfQorCQl9CisJCVNDVFBfVENCX1VOTE9DSyhzdGNi
KTsKKwkJYnJlYWs7CisJY2FzZSBJQ01QNl9QQVJBTV9QUk9COgorCQkvKiBUcmVhdCBpdCBsaWtl
IGFuIEFCT1JULiAqLworCQlpZiAoaWNtcDZfY29kZSA9PSBJQ01QNl9QQVJBTVBST0JfTkVYVEhF
QURFUikgeworCQkJc2N0cF9hYm9ydF9ub3RpZmljYXRpb24oc3RjYiwgMSwgMCwgTlVMTCwgU0NU
UF9TT19OT1RfTE9DS0VEKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChTQ1RQ
X1NPX0xPQ0tfVEVTVElORykKKwkJCXNvID0gU0NUUF9JTlBfU08oaW5wKTsKKwkJCWF0b21pY19h
ZGRfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7
CisJCQlTQ1RQX1NPQ0tFVF9MT0NLKHNvLCAxKTsKKwkJCVNDVFBfVENCX0xPQ0soc3RjYik7CisJ
CQlhdG9taWNfc3VidHJhY3RfaW50KCZzdGNiLT5hc29jLnJlZmNudCwgMSk7CisjZW5kaWYKKwkJ
CSh2b2lkKXNjdHBfZnJlZV9hc3NvYyhpbnAsIHN0Y2IsIFNDVFBfTk9STUFMX1BST0MsCisJCQkJ
CSAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzIpOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKSB8fCBkZWZpbmVkKFNDVFBfU09fTE9DS19URVNUSU5HKQorCQkJU0NUUF9TT0NL
RVRfVU5MT0NLKHNvLCAxKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJU0NUUF9UQ0JfVU5MT0NL
KHN0Y2IpOworCQl9CisJCWJyZWFrOworCWNhc2UgSUNNUDZfUEFDS0VUX1RPT19CSUc6CisJCWlm
IChuZXQtPmRlc3Rfc3RhdGUgJiBTQ1RQX0FERFJfTk9fUE1UVUQpIHsKKwkJCVNDVFBfVENCX1VO
TE9DSyhzdGNiKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChTQ1RQX09TX1RJTUVSX1BFTkRJTkco
Jm5ldC0+cG10dV90aW1lci50aW1lcikpIHsKKwkJCXRpbWVyX3N0b3BwZWQgPSAxOworCQkJc2N0
cF90aW1lcl9zdG9wKFNDVFBfVElNRVJfVFlQRV9QQVRITVRVUkFJU0UsIGlucCwgc3RjYiwgbmV0
LAorCQkJICAgICAgICAgICAgICAgIFNDVFBfRlJPTV9TQ1RQX1VTUlJFUSArIFNDVFBfTE9DXzEp
OworCQl9IGVsc2UgeworCQkJdGltZXJfc3RvcHBlZCA9IDA7CisJCX0KKwkJLyogVXBkYXRlIHRo
ZSBwYXRoIE1UVS4gKi8KKwkJaWYgKG5ldC0+cG9ydCkgeworCQkJbmV4dF9tdHUgLT0gc2l6ZW9m
KHN0cnVjdCB1ZHBoZHIpOworCQl9CisJCWlmIChuZXQtPm10dSA+IG5leHRfbXR1KSB7CisJCQlu
ZXQtPm10dSA9IG5leHRfbXR1OworCQl9CisJCS8qIFVwZGF0ZSB0aGUgYXNzb2NpYXRpb24gTVRV
ICovCisJCWlmIChzdGNiLT5hc29jLnNtYWxsZXN0X210dSA+IG5leHRfbXR1KSB7CisJCQlzY3Rw
X3BhdGhtdHVfYWRqdXN0bWVudChzdGNiLCBuZXh0X210dSk7CisJCX0KKwkJLyogRmluYWxseSwg
c3RhcnQgdGhlIFBNVFUgdGltZXIgaWYgaXQgd2FzIHJ1bm5pbmcgYmVmb3JlLiAqLworCQlpZiAo
dGltZXJfc3RvcHBlZCkgeworCQkJc2N0cF90aW1lcl9zdGFydChTQ1RQX1RJTUVSX1RZUEVfUEFU
SE1UVVJBSVNFLCBpbnAsIHN0Y2IsIG5ldCk7CisJCX0KKwkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2Ip
OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCWJyZWFr
OworCX0KK30KKwordm9pZAorI2lmIGRlZmluZWQoX19BUFBMRV9fKSAmJiAhZGVmaW5lZChBUFBM
RV9MRU9QQVJEKSAmJiAhZGVmaW5lZChBUFBMRV9TTk9XTEVPUEFSRCkgJiYgIWRlZmluZWQoQVBQ
TEVfTElPTikgJiYgIWRlZmluZWQoQVBQTEVfTU9VTlRBSU5MSU9OKSAmJiAhZGVmaW5lZChBUFBM
RV9FTENBUElUQU4pCitzY3RwNl9jdGxpbnB1dChpbnQgY21kLCBzdHJ1Y3Qgc29ja2FkZHIgKnBr
dGRzdCwgdm9pZCAqZCwgc3RydWN0IGlmbmV0ICppZnAgU0NUUF9VTlVTRUQpCisjZWxzZQorc2N0
cDZfY3RsaW5wdXQoaW50IGNtZCwgc3RydWN0IHNvY2thZGRyICpwa3Rkc3QsIHZvaWQgKmQpCisj
ZW5kaWYKK3sKKwlzdHJ1Y3QgaXA2Y3RscGFyYW0gKmlwNmNwOworCXN0cnVjdCBzY3RwX2lucGNi
ICppbnA7CisJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCXN0cnVjdCBzY3RwX25ldHMgKm5ldDsK
KwlzdHJ1Y3Qgc2N0cGhkciBzaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IHNyYywgZHN0OworCisj
aWZkZWYgSEFWRV9TQV9MRU4KKwlpZiAocGt0ZHN0LT5zYV9mYW1pbHkgIT0gQUZfSU5FVDYgfHwK
KwkgICAgcGt0ZHN0LT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Cisj
ZWxzZQorCWlmIChwa3Rkc3QtPnNhX2ZhbWlseSAhPSBBRl9JTkVUNikgeworI2VuZGlmCisJCXJl
dHVybjsKKwl9CisKKwlpZiAoKHVuc2lnbmVkKWNtZCA+PSBQUkNfTkNNRFMpIHsKKwkJcmV0dXJu
OworCX0KKwlpZiAoUFJDX0lTX1JFRElSRUNUKGNtZCkpIHsKKwkJZCA9IE5VTEw7CisJfSBlbHNl
IGlmIChpbmV0NmN0bGVycm1hcFtjbWRdID09IDApIHsKKwkJcmV0dXJuOworCX0KKwkvKiBJZiB0
aGUgcGFyYW1ldGVyIGlzIGZyb20gaWNtcDYsIGRlY29kZSBpdC4gKi8KKwlpZiAoZCAhPSBOVUxM
KSB7CisJCWlwNmNwID0gKHN0cnVjdCBpcDZjdGxwYXJhbSAqKWQ7CisJfSBlbHNlIHsKKwkJaXA2
Y3AgPSAoc3RydWN0IGlwNmN0bHBhcmFtICopTlVMTDsKKwl9CisKKwlpZiAoaXA2Y3AgIT0gTlVM
TCkgeworCQkvKgorCQkgKiBYWFg6IFdlIGFzc3VtZSB0aGF0IHdoZW4gSVBWNiBpcyBub24gTlVM
TCwgTSBhbmQgT0ZGIGFyZQorCQkgKiB2YWxpZC4KKwkJICovCisJCWlmIChpcDZjcC0+aXA2Y19t
ID09IE5VTEwpIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIENoZWNrIGlmIHdlIGNhbiBzYWZl
bHkgZXhhbWluZSB0aGUgcG9ydHMgYW5kIHRoZQorCQkgKiB2ZXJpZmljYXRpb24gdGFnIG9mIHRo
ZSBTQ1RQIGNvbW1vbiBoZWFkZXIuCisJCSAqLworCQlpZiAoaXA2Y3AtPmlwNmNfbS0+bV9wa3Ro
ZHIubGVuIDwKKwkJICAgIChpbnQzMl90KShpcDZjcC0+aXA2Y19vZmYgKyBvZmZzZXRvZihzdHJ1
Y3Qgc2N0cGhkciwgY2hlY2tzdW0pKSkgeworCQkJcmV0dXJuOworCQl9CisKKwkJLyogQ29weSBv
dXQgdGhlIHBvcnQgbnVtYmVycyBhbmQgdGhlIHZlcmlmaWNhdGlvbiB0YWcuICovCisJCW1lbXNl
dCgmc2gsIDAsIHNpemVvZihzaCkpOworCQltX2NvcHlkYXRhKGlwNmNwLT5pcDZjX20sCisJCSAg
ICAgICAgICAgaXA2Y3AtPmlwNmNfb2ZmLAorCQkgICAgICAgICAgIHNpemVvZih1aW50MTZfdCkg
KyBzaXplb2YodWludDE2X3QpICsgc2l6ZW9mKHVpbnQzMl90KSwKKwkJICAgICAgICAgICAoY2Fk
ZHJfdCkmc2gpOworCQltZW1zZXQoJnNyYywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KTsKKwkJc3JjLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisjaWZkZWYgSEFWRV9TSU42X0xFTgor
CQlzcmMuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwkJ
c3JjLnNpbjZfcG9ydCA9IHNoLnNyY19wb3J0OworCQlzcmMuc2luNl9hZGRyID0gaXA2Y3AtPmlw
NmNfaXA2LT5pcDZfc3JjOworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pCisJCWlmIChpbjZfc2V0
c2NvcGUoJnNyYy5zaW42X2FkZHIsIGlwNmNwLT5pcDZjX20tPm1fcGt0aGRyLnJjdmlmLCBOVUxM
KSAhPSAwKSB7CisJCQlyZXR1cm47CisJCX0KKyNlbmRpZgorCQltZW1zZXQoJmRzdCwgMCwgc2l6
ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7
CisjaWZkZWYgSEFWRV9TSU42X0xFTgorCQlkc3Quc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2luNik7CisjZW5kaWYKKwkJZHN0LnNpbjZfcG9ydCA9IHNoLmRlc3RfcG9ydDsKKwkJ
ZHN0LnNpbjZfYWRkciA9IGlwNmNwLT5pcDZjX2lwNi0+aXA2X2RzdDsKKyNpZiBkZWZpbmVkKF9f
RnJlZUJTRF9fKQorCQlpZiAoaW42X3NldHNjb3BlKCZkc3Quc2luNl9hZGRyLCBpcDZjcC0+aXA2
Y19tLT5tX3BrdGhkci5yY3ZpZiwgTlVMTCkgIT0gMCkgeworCQkJcmV0dXJuOworCQl9CisjZW5k
aWYKKwkJaW5wID0gTlVMTDsKKwkJbmV0ID0gTlVMTDsKKwkJc3RjYiA9IHNjdHBfZmluZGFzc29j
aWF0aW9uX2FkZHJfc2EoKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmc3JjLAorCQkgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW5wLCAmbmV0LCAxLCBTQ1RQX0RFRkFVTFRf
VlJGSUQpOworCQlpZiAoKHN0Y2IgIT0gTlVMTCkgJiYKKwkJICAgIChuZXQgIT0gTlVMTCkgJiYK
KwkJICAgIChpbnAgIT0gTlVMTCkpIHsKKwkJCS8qIENoZWNrIHRoZSB2ZXJpZmljYXRpb24gdGFn
ICovCisJCQlpZiAobnRvaGwoc2gudl90YWcpICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIFRoaXMg
bXVzdCBiZSB0aGUgdmVyaWZpY2F0aW9uIHRhZyB1c2VkIGZvcgorCQkJCSAqIHNlbmRpbmcgb3V0
IHBhY2tldHMuIFdlIGRvbid0IGNvbnNpZGVyCisJCQkJICogcGFja2V0cyByZWZsZWN0aW5nIHRo
ZSB2ZXJpZmljYXRpb24gdGFnLgorCQkJCSAqLworCQkJCWlmIChudG9obChzaC52X3RhZykgIT0g
c3RjYi0+YXNvYy5wZWVyX3Z0YWcpIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJ
CQlyZXR1cm47CisJCQkJfQorCQkJfSBlbHNlIHsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQor
CQkJCWlmIChpcDZjcC0+aXA2Y19tLT5tX3BrdGhkci5sZW4gPj0KKwkJCQkgICAgaXA2Y3AtPmlw
NmNfb2ZmICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArCisJCQkJICAgICAgICAgICAgICAgICAg
ICAgIHNpemVvZihzdHJ1Y3Qgc2N0cF9jaHVua2hkcikgKworCQkJCSAgICAgICAgICAgICAgICAg
ICAgICBvZmZzZXRvZihzdHJ1Y3Qgc2N0cF9pbml0LCBhX3J3bmQpKSB7CisJCQkJCS8qCisJCQkJ
CSAqIEluIHRoaXMgY2FzZSB3ZSBjYW4gY2hlY2sgaWYgd2UKKwkJCQkJICogZ290IGFuIElOSVQg
Y2h1bmsgYW5kIGlmIHRoZQorCQkJCQkgKiBpbml0aWF0ZSB0YWcgbWF0Y2hlcy4KKwkJCQkJICov
CisJCQkJCXVpbnQzMl90IGluaXRpYXRlX3RhZzsKKwkJCQkJdWludDhfdCBjaHVua190eXBlOwor
CisJCQkJCW1fY29weWRhdGEoaXA2Y3AtPmlwNmNfbSwKKwkJCQkJICAgICAgICAgICBpcDZjcC0+
aXA2Y19vZmYgKworCQkJCQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2N0cGhkciksCisJCQkJ
CSAgICAgICAgICAgc2l6ZW9mKHVpbnQ4X3QpLAorCQkJCQkgICAgICAgICAgIChjYWRkcl90KSZj
aHVua190eXBlKTsKKwkJCQkJbV9jb3B5ZGF0YShpcDZjcC0+aXA2Y19tLAorCQkJCQkgICAgICAg
ICAgIGlwNmNwLT5pcDZjX29mZiArCisJCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSArCisJCQkJCSAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzY3RwX2NodW5raGRyKSwKKwkJ
CQkJICAgICAgICAgICBzaXplb2YodWludDMyX3QpLAorCQkJCQkgICAgICAgICAgIChjYWRkcl90
KSZpbml0aWF0ZV90YWcpOworCQkJCQlpZiAoKGNodW5rX3R5cGUgIT0gU0NUUF9JTklUSUFUSU9O
KSB8fAorCQkJCQkgICAgKG50b2hsKGluaXRpYXRlX3RhZykgIT0gc3RjYi0+YXNvYy5teV92dGFn
KSkgeworCQkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQkJcmV0dXJuOworCQkJCQl9
CisJCQkJfSBlbHNlIHsKKwkJCQkJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCQkJCQlyZXR1cm47
CisJCQkJfQorI2Vsc2UKKwkJCQlTQ1RQX1RDQl9VTkxPQ0soc3RjYik7CisJCQkJcmV0dXJuOwor
I2VuZGlmCisJCQl9CisJCQlzY3RwNl9ub3RpZnkoaW5wLCBzdGNiLCBuZXQsCisJCQkgICAgICAg
ICAgICAgaXA2Y3AtPmlwNmNfaWNtcDYtPmljbXA2X3R5cGUsCisJCQkgICAgICAgICAgICAgaXA2
Y3AtPmlwNmNfaWNtcDYtPmljbXA2X2NvZGUsCisJCQkgICAgICAgICAgICAgbnRvaGwoaXA2Y3At
PmlwNmNfaWNtcDYtPmljbXA2X210dSkpOworCQl9IGVsc2UgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uIDwgNTAwMDAwCisJCQlpZiAoUFJDX0lTX1JFRElS
RUNUKGNtZCkgJiYgKGlucCAhPSBOVUxMKSkgeworCQkJCWluNl9ydGNoYW5nZSgoc3RydWN0IGlu
NnBjYiAqKWlucCwKKwkJCQkgICAgaW5ldDZjdGxlcnJtYXBbY21kXSk7CisJCQl9CisjZW5kaWYK
KwkJCWlmICgoc3RjYiA9PSBOVUxMKSAmJiAoaW5wICE9IE5VTEwpKSB7CisJCQkJLyogcmVkdWNl
IGlucCdzIHJlZi1jb3VudCAqLworCQkJCVNDVFBfSU5QX1dMT0NLKGlucCk7CisJCQkJU0NUUF9J
TlBfREVDUl9SRUYoaW5wKTsKKwkJCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCQl9CisJCQlp
ZiAoc3RjYikgeworCQkJCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwkJCX0KKwkJfQorCX0KK30K
KyNlbmRpZgorCisvKgorICogdGhpcyByb3V0aW5lIGNhbiBwcm9iYWJseSBiZSBjb2xsYXNwZWQg
aW50byB0aGUgb25lIGluIHNjdHBfdXNlcnJlcS5jCisgKiBzaW5jZSB0aGV5IGRvIHRoZSBzYW1l
IHRoaW5nIGFuZCBub3cgd2UgbG9va3VwIHdpdGggYSBzb2NrYWRkcgorICovCisjaWZkZWYgX19G
cmVlQlNEX18KK3N0YXRpYyBpbnQKK3NjdHA2X2dldGNyZWQoU1lTQ1RMX0hBTkRMRVJfQVJHUykK
K3sKKwlzdHJ1Y3QgeHVjcmVkIHh1YzsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHJzWzJdOwor
CXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCXN0cnVj
dCBzY3RwX3RjYiAqc3RjYjsKKwlpbnQgZXJyb3I7CisJdWludDMyX3QgdnJmX2lkOworCisjaWYg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCisJdnJmX2lkID0gU0NU
UF9ERUZBVUxUX1ZSRklEOworI2Vsc2UKKwl2cmZfaWQgPSBwYW5kYV9nZXRfdnJmX2Zyb21fY2Fs
bCgpOyAvKiBmcm9tIGNvbm5lY3R4IGNhbGw/ICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjAyMDAwCisJZXJyb3IgPSBwcml2X2No
ZWNrKHJlcS0+dGQsIFBSSVZfTkVUSU5FVF9HRVRDUkVEKTsKKyNlbGlmIGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorCWVycm9yID0gc3VzZXIocmVx
LT50ZCk7CisjZWxzZQorCWVycm9yID0gc3VzZXIocmVxLT5wKTsKKyNlbmRpZgorCWlmIChlcnJv
cikKKwkJcmV0dXJuIChlcnJvcik7CisKKwlpZiAocmVxLT5uZXdsZW4gIT0gc2l6ZW9mKGFkZHJz
KSkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisJaWYgKHJlcS0+
b2xkbGVuICE9IHNpemVvZihzdHJ1Y3QgdWNyZWQpKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQo
TlVMTCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0
dXJuIChFSU5WQUwpOworCX0KKwllcnJvciA9IFNZU0NUTF9JTihyZXEsIGFkZHJzLCBzaXplb2Yo
YWRkcnMpKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCisJc3RjYiA9IHNjdHBf
ZmluZGFzc29jaWF0aW9uX2FkZHJfc2Eoc2luNnRvc2EoJmFkZHJzWzFdKSwKKwkgICAgc2luNnRv
c2EoJmFkZHJzWzBdKSwKKwkgICAgJmlucCwgJm5ldCwgMSwgdnJmX2lkKTsKKwlpZiAoc3RjYiA9
PSBOVUxMIHx8IGlucCA9PSBOVUxMIHx8IGlucC0+c2N0cF9zb2NrZXQgPT0gTlVMTCkgeworCQlp
ZiAoKGlucCAhPSBOVUxMKSAmJiAoc3RjYiA9PSBOVUxMKSkgeworCQkJLyogcmVkdWNlIHJlZi1j
b3VudCAqLworCQkJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwkJCVNDVFBfSU5QX0RFQ1JfUkVGKGlu
cCk7CisJCQlnb3RvIGNyZWRfY2FuX2NvbnQ7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVOT0VOVCk7CisJCWVycm9y
ID0gRU5PRU5UOworCQlnb3RvIG91dDsKKwl9CisJU0NUUF9UQ0JfVU5MT0NLKHN0Y2IpOworCS8q
IFdlIHVzZSB0aGUgd3JpdGUgbG9jayBoZXJlLCBvbmx5CisJICogc2luY2UgaW4gdGhlIGVycm9y
IGxlZyB3ZSBuZWVkIGl0LgorCSAqIElmIHdlIHVzZWQgUkxPQ0ssIHRoZW4gd2Ugd291bGQgaGF2
ZQorCSAqIHRvIHdsb2NrL2RlY3IvdW5sb2NrL3Jsb2NrLiBXaGljaAorCSAqIGluIHRoZW9yeSBj
b3VsZCBjcmVhdGUgYSBob2xlLiBCZXR0ZXIKKwkgKiB0byB1c2UgaGlnaGVyIHdsb2NrLgorCSAq
LworCVNDVFBfSU5QX1dMT0NLKGlucCk7CisgY3JlZF9jYW5fY29udDoKKwllcnJvciA9IGNyX2Nh
bnNlZXNvY2tldChyZXEtPnRkLT50ZF91Y3JlZCwgaW5wLT5zY3RwX3NvY2tldCk7CisJaWYgKGVy
cm9yKSB7CisJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJZ290byBvdXQ7CisJfQorCWNydTJ4
KGlucC0+c2N0cF9zb2NrZXQtPnNvX2NyZWQsICZ4dWMpOworCVNDVFBfSU5QX1dVTkxPQ0soaW5w
KTsKKwllcnJvciA9IFNZU0NUTF9PVVQocmVxLCAmeHVjLCBzaXplb2Yoc3RydWN0IHh1Y3JlZCkp
Oworb3V0OgorCXJldHVybiAoZXJyb3IpOworfQorCitTWVNDVExfUFJPQyhfbmV0X2luZXQ2X3Nj
dHA2LCBPSURfQVVUTywgZ2V0Y3JlZCwgQ1RMVFlQRV9PUEFRVUUgfCBDVExGTEFHX1JXLAorICAg
IDAsIDAsCisgICAgc2N0cDZfZ2V0Y3JlZCwgIlMsdWNyZWQiLCAiR2V0IHRoZSB1Y3JlZCBvZiBh
IFNDVFA2IGNvbm5lY3Rpb24iKTsKKworI2VuZGlmCisKKy8qIFRoaXMgaXMgdGhlIHNhbWUgYXMg
dGhlIHNjdHBfYWJvcnQoKSBjb3VsZCBiZSBtYWRlIGNvbW1vbiAqLworI2lmIChkZWZpbmVkKF9f
RnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+IDY5MDAwMCkgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKK3N0YXRpYyB2b2lkCisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykgfHwgZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQoraW50CisjZWxzZQorc3RhdGljIGludAorI2VuZGlmCitzY3RwNl9h
Ym9ydChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXVp
bnQzMl90IGZsYWdzOworCisJaW5wID0gKHN0cnVjdCBzY3RwX2lucGNiICopc28tPnNvX3BjYjsK
KwlpZiAoaW5wID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5V
TEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisjaWYgKGRlZmluZWQoX19GcmVl
QlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID4gNjkwMDAwKSB8fCBkZWZpbmVkKF9fV2luZG93
c19fKQorCQlyZXR1cm47CisjZWxzZQorCQlyZXR1cm4gKEVJTlZBTCk7CisjZW5kaWYKKwl9Cisg
c2N0cF9tdXN0X3RyeV9hZ2FpbjoKKwlmbGFncyA9IGlucC0+c2N0cF9mbGFnczsKKyNpZmRlZiBT
Q1RQX0xPR19DTE9TSU5HCisJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEwsIDE3KTsKKyNlbmRp
ZgorCWlmICgoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUpID09IDApICYmCisJ
ICAgIChhdG9taWNfY21wc2V0X2ludCgmaW5wLT5zY3RwX2ZsYWdzLCBmbGFncywgKGZsYWdzIHwg
U0NUUF9QQ0JfRkxBR1NfU09DS0VUX0dPTkUgfCBTQ1RQX1BDQl9GTEFHU19DTE9TRV9JUCkpKSkg
eworI2lmZGVmIFNDVFBfTE9HX0NMT1NJTkcKKwkJc2N0cF9sb2dfY2xvc2luZyhpbnAsIE5VTEws
IDE2KTsKKyNlbmRpZgorCQlzY3RwX2lucGNiX2ZyZWUoaW5wLCBTQ1RQX0ZSRUVfU0hPVUxEX1VT
RV9BQk9SVCwKKwkJCQlTQ1RQX0NBTExFRF9BRlRFUl9DTVBTRVRfT0ZDTE9TRSk7CisJCVNPQ0tf
TE9DSyhzbyk7CisJCVNDVFBfU0JfQ0xFQVIoc28tPnNvX3NuZCk7CisJCS8qIHNhbWUgZm9yIHRo
ZSByY3Ygb25lcywgdGhleSBhcmUgb25seQorCQkgKiBoZXJlIGZvciB0aGUgYWNjb3VudGluZy9z
ZWxlY3QuCisJCSAqLworCQlTQ1RQX1NCX0NMRUFSKHNvLT5zb19yY3YpOworI2lmIGRlZmluZWQo
X19BUFBMRV9fKQorCQlzby0+c29fdXNlY291bnQtLTsKKyNlbHNlCisJCS8qIE5vdyBudWxsIG91
dCB0aGUgcmVmZXJlbmNlLCB3ZSBhcmUgY29tcGxldGVseSBkZXRhY2hlZC4gKi8KKwkJc28tPnNv
X3BjYiA9IE5VTEw7CisjZW5kaWYKKwkJU09DS19VTkxPQ0soc28pOworCX0gZWxzZSB7CisJCWZs
YWdzID0gaW5wLT5zY3RwX2ZsYWdzOworCQlpZiAoKGZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfU09D
S0VUX0dPTkUpID09IDApIHsKKwkJCWdvdG8gc2N0cF9tdXN0X3RyeV9hZ2FpbjsKKwkJfQorCX0K
KyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPiA2OTAwMDAp
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJcmV0dXJuOworI2Vsc2UKKwlyZXR1cm4gKDApOwor
I2VuZGlmCit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lv
biA+PSA1MDAwMDAKK3N0YXRpYyBpbnQKK3NjdHA2X2F0dGFjaChzdHJ1Y3Qgc29ja2V0ICpzbywg
aW50IHByb3RvIFNDVFBfVU5VU0VELCBzdHJ1Y3QgdGhyZWFkICpwIFNDVFBfVU5VU0VEKQorI2Vs
aWYgZGVmaW5lZChfX1BhbmRhX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc2N0
cDZfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgcHJvdG8gU0NUUF9VTlVTRUQsIHVpbnQz
Ml90IHZyZl9pZCkKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCitzdGF0aWMgaW50CitzY3Rw
Nl9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgUEtUSFJF
QUQgcCBTQ1RQX1VOVVNFRCkKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwNl9hdHRhY2goc3RydWN0
IHNvY2tldCAqc28sIGludCBwcm90byBTQ1RQX1VOVVNFRCwgc3RydWN0IHByb2MgKnAgU0NUUF9V
TlVTRUQpCisjZW5kaWYKK3sKKwlzdHJ1Y3QgaW42cGNiICppbnA2OworCWludCBlcnJvcjsKKwlz
dHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wOworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKKwl1aW50MzJfdCB2cmZfaWQgPSBTQ1RQX0RFRkFVTFRfVlJGSUQ7
CisjZW5kaWYKKworCWlucCA9IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYg
KGlucCAhPSBOVUxMKSB7CisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBT
Q1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQor
CisJaWYgKHNvLT5zb19zbmQuc2JfaGl3YXQgPT0gMCB8fCBzby0+c29fcmN2LnNiX2hpd2F0ID09
IDApIHsKKwkJZXJyb3IgPSBTQ1RQX1NPUkVTRVJWRShzbywgU0NUUF9CQVNFX1NZU0NUTChzY3Rw
X3NlbmRzcGFjZSksIFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9yZWN2c3BhY2UpKTsKKwkJaWYgKGVy
cm9yKQorCQkJcmV0dXJuIChlcnJvcik7CisJfQorCWVycm9yID0gc2N0cF9pbnBjYl9hbGxvYyhz
bywgdnJmX2lkKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiAoZXJyb3IpOworCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJU0NUUF9JTlBfV0xPQ0soaW5wKTsKKwlpbnAt
PnNjdHBfZmxhZ3MgfD0gU0NUUF9QQ0JfRkxBR1NfQk9VTkRfVjY7CS8qIEknbSB2NiEgKi8KKwlp
bnA2ID0gKHN0cnVjdCBpbjZwY2IgKilpbnA7CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBWNjsKKyNlbHNlCisJaW5w
LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1BhbmRhX18p
CisJaW5wNi0+aW42cF9ob3BzID0gLTE7CS8qIHVzZSBrZXJuZWwgZGVmYXVsdCAqLworCWlucDYt
PmluNnBfY2tzdW0gPSAtMTsJLyoganVzdCB0byBiZSBzdXJlICovCisjZW5kaWYKKyNpZmRlZiBJ
TkVUCisJLyoKKwkgKiBYWFg6IHVnbHkhISBJUHY0IFRUTCBpbml0aWFsaXphdGlvbiBpcyBuZWNl
c3NhcnkgZm9yIGFuIElQdjYKKwkgKiBzb2NrZXQgYXMgd2VsbCwgYmVjYXVzZSB0aGUgc29ja2V0
IG1heSBiZSBib3VuZCB0byBhbiBJUHY2CisJICogd2lsZGNhcmQgYWRkcmVzcywgd2hpY2ggbWF5
IG1hdGNoIGFuIElQdjQtbWFwcGVkIElQdjYgYWRkcmVzcy4KKwkgKi8KKwlpbnA2LT5pbnBfaXBf
dHRsID0gTU9EVUxFX0dMT0JBTChpcF9kZWZ0dGwpOworI2VuZGlmCisJU0NUUF9JTlBfV1VOTE9D
SyhpbnApOworCXJldHVybiAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBf
X0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMDAKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQoc3RydWN0
IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwgc3RydWN0IHRocmVhZCAqcCkKK3sK
KyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKQorc3RhdGlj
IGludAorc2N0cDZfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRy
LCBzdHJ1Y3QgcHJvYyAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX19QYW5kYV9fKSB8fCBkZWZpbmVk
KF9fVXNlcnNwYWNlX18pCitpbnQKK3NjdHA2X2JpbmQoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqYWRkciwgdm9pZCAqIHApCit7CisjZWxpZiBkZWZpbmVkKF9fV2luZG93c19f
KQorc3RhdGljIGludAorc2N0cDZfYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICphZGRyLCBQS1RIUkVBRCBwKQoreworI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHA2X2JpbmQo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBtYnVmICpuYW0sIHN0cnVjdCBwcm9jICpwKQorewor
CXN0cnVjdCBzb2NrYWRkciAqYWRkciA9IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIg
Kik6IE5VTEw7CisKKyNlbmRpZgorCXN0cnVjdCBzY3RwX2lucGNiICppbnA7CisJc3RydWN0IGlu
NnBjYiAqaW5wNjsKKwlpbnQgZXJyb3I7CisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilz
by0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJcmV0dXJu
IChFSU5WQUwpOworCX0KKworI2lmICFkZWZpbmVkKF9fV2luZG93c19fKQorCWlmIChhZGRyKSB7
CisJCXN3aXRjaCAoYWRkci0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lO
RVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChhZGRyLT5zYV9sZW4gIT0gc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwg
TlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1cm4gKEVJTlZB
TCk7CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2Fz
ZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYgKGFkZHItPnNhX2xlbiAhPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKKwkJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlu
cCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUlOVkFMKTsKKwkJCQlyZXR1
cm4gKEVJTlZBTCk7CisJCQl9CisjZW5kaWYKKwkJCWJyZWFrOworI2VuZGlmCisJCWRlZmF1bHQ6
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2
X1VTUlJFUSwgRUlOVkFMKTsKKwkJCXJldHVybiAoRUlOVkFMKTsKKwkJfQorCX0KKyNlbmRpZgor
CWlucDYgPSAoc3RydWN0IGluNnBjYiAqKWlucDsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9fKQorCWlucDYtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjQ7CisJaW5wNi0+aW5w
X3ZmbGFnIHw9IElOUF9JUFY2OworI2Vsc2UKKwlpbnAtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjQ7
CisJaW5wLT5pbnBfdmZsYWcgfD0gSU5QX0lQVjY7CisjZW5kaWYKKwlpZiAoKGFkZHIgIT0gTlVM
TCkgJiYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikgPT0gMCkpIHsKKwkJc3dpdGNoIChhZGRyLT5z
YV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCS8qIGJpbmRpbmcg
djQgYWRkciB0byB2NiBzb2NrZXQsIHNvIHJlc2V0IGZsYWdzICovCisjaWYgZGVmaW5lZChfX0Zy
ZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKwkJCWlucDYtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsK
KwkJCWlucDYtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjY7CisjZWxzZQorCQkJaW5wLT5pbnBfdmZs
YWcgfD0gSU5QX0lQVjQ7CisJCQlpbnAtPmlucF92ZmxhZyAmPSB+SU5QX0lQVjY7CisjZW5kaWYK
KwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJewor
CQkJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNl9wOworCisJCQlzaW42X3AgPSAoc3RydWN0IHNv
Y2thZGRyX2luNiAqKWFkZHI7CisKKwkJCWlmIChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmc2lu
Nl9wLT5zaW42X2FkZHIpKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKKwkJCQlpbnA2LT5pbnBfdmZsYWcgfD0gSU5QX0lQVjQ7CisjZWxzZQorCQkJCWlucC0+aW5w
X3ZmbGFnIHw9IElOUF9JUFY0OworI2VuZGlmCisJCQl9CisjaWZkZWYgSU5FVAorCQkJaWYgKElO
Nl9JU19BRERSX1Y0TUFQUEVEKCZzaW42X3AtPnNpbjZfYWRkcikpIHsKKwkJCQlzdHJ1Y3Qgc29j
a2FkZHJfaW4gc2luOworCisJCQkJaW42X3NpbjZfMl9zaW4oJnNpbiwgc2luNl9wKTsKKyNpZiBk
ZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCQkJCWlucDYtPmlucF92ZmxhZyB8
PSBJTlBfSVBWNDsKKwkJCQlpbnA2LT5pbnBfdmZsYWcgJj0gfklOUF9JUFY2OworI2Vsc2UKKwkJ
CQlpbnAtPmlucF92ZmxhZyB8PSBJTlBfSVBWNDsKKwkJCQlpbnAtPmlucF92ZmxhZyAmPSB+SU5Q
X0lQVjY7CisjZW5kaWYKKwkJCQllcnJvciA9IHNjdHBfaW5wY2JfYmluZChzbywgKHN0cnVjdCBz
b2NrYWRkciAqKSZzaW4sIE5VTEwsIHApOworCQkJCXJldHVybiAoZXJyb3IpOworCQkJfQorI2Vu
ZGlmCisJCQlicmVhazsKKwkJfQorI2VuZGlmCisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQor
CX0gZWxzZSBpZiAoYWRkciAhPSBOVUxMKSB7CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjZf
cDsKKworCQkvKiBJUFY2X1Y2T05MWSBzb2NrZXQgKi8KKyNpZmRlZiBJTkVUCisJCWlmIChhZGRy
LT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgeworCQkJLyogY2FuJ3QgYmluZCB2NCBhZGRyIHRvIHY2
IG9ubHkgc29ja2V0ISAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CX0KKyNlbmRpZgorCQlzaW42X3AgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisKKwkJ
aWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42X3AtPnNpbjZfYWRkcikpIHsKKwkJCS8qIGNh
bid0IGJpbmQgdjQtbWFwcGVkIGFkZHJzIGVpdGhlciEgKi8KKwkJCS8qIE5PVEU6IHdlIGRvbid0
IHN1cHBvcnQgU0lJVCAqLworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEws
IFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJ
CX0KKwl9CisJZXJyb3IgPSBzY3RwX2lucGNiX2JpbmQoc28sIGFkZHIsIE5VTEwsIHApOworCXJl
dHVybiAoZXJyb3IpOworfQorCisKKyNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgJiYgX19GcmVl
QlNEX3ZlcnNpb24gPiA2OTAwMDApIHx8IGRlZmluZWQoX19XaW5kb3dzX18pIHx8IGRlZmluZWQo
X19Vc2Vyc3BhY2VfXykKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorc3RhdGljIHZvaWQK
KyNlbHNlCit2b2lkCisjZW5kaWYKK3NjdHA2X2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNvKQorewor
CXNjdHBfY2xvc2Uoc28pOworfQorCisvKiBUaGlzIGNvdWxkIGJlIG1hZGUgY29tbW9uIHdpdGgg
c2N0cF9kZXRhY2goKSBzaW5jZSB0aGV5IGFyZSBpZGVudGljYWwgKi8KKyNlbHNlCisKKyNpZiAh
ZGVmaW5lZChfX1BhbmRhX18pCitzdGF0aWMKKyNlbmRpZgoraW50CitzY3RwNl9kZXRhY2goc3Ry
dWN0IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQorCXNjdHBfY2xv
c2Uoc28pOworCXJldHVybiAoMCk7CisjZWxzZQorCXJldHVybiAoc2N0cF9kZXRhY2goc28pKTsK
KyNlbmRpZgorfQorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fUGFuZGFfXykgJiYgIWRlZmlu
ZWQoX19Vc2Vyc3BhY2VfXykKK3N0YXRpYworI2VuZGlmCitpbnQKK3NjdHA2X2Rpc2Nvbm5lY3Qo
c3RydWN0IHNvY2tldCAqc28pCit7CisJcmV0dXJuIChzY3RwX2Rpc2Nvbm5lY3Qoc28pKTsKK30K
KworCitpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+
PSA1MDAwMDAKK3NjdHBfc2VuZG0oc3RydWN0IHNvY2tldCAqc28sIGludCBmbGFncywgc3RydWN0
IG1idWYgKm0sIHN0cnVjdCBzb2NrYWRkciAqYWRkciwKKyAgICBzdHJ1Y3QgbWJ1ZiAqY29udHJv
bCwgc3RydWN0IHRocmVhZCAqcCk7CisKKyNlbHNlCitzY3RwX3NlbmRtKHN0cnVjdCBzb2NrZXQg
KnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsCisg
ICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCBwcm9jICpwKTsKKworI2VuZGlmCisKKyNp
ZiAhZGVmaW5lZChfX1BhbmRhX18pICYmICFkZWZpbmVkKF9fV2luZG93c19fKSAmJiAhZGVmaW5l
ZChfX1VzZXJzcGFjZV9fKQorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pICYmIF9fRnJlZUJTRF92
ZXJzaW9uID49IDUwMDAwMAorc3RhdGljIGludAorc2N0cDZfc2VuZChzdHJ1Y3Qgc29ja2V0ICpz
bywgaW50IGZsYWdzLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IHNvY2thZGRyICphZGRyLAorICAg
IHN0cnVjdCBtYnVmICpjb250cm9sLCBzdHJ1Y3QgdGhyZWFkICpwKQoreworI2VsaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwNl9z
ZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZmxhZ3MsIHN0cnVjdCBtYnVmICptLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsCisgICAgc3RydWN0IG1idWYgKmNvbnRyb2wsIHN0cnVjdCBwcm9jICpw
KQoreworI2Vsc2UKK3N0YXRpYyBpbnQKK3NjdHA2X3NlbmQoc3RydWN0IHNvY2tldCAqc28sIGlu
dCBmbGFncywgc3RydWN0IG1idWYgKm0sIHN0cnVjdCBtYnVmICpuYW0sCisgICAgc3RydWN0IG1i
dWYgKmNvbnRyb2wsIHN0cnVjdCBwcm9jICpwKQoreworCXN0cnVjdCBzb2NrYWRkciAqYWRkciA9
IG5hbSA/IG10b2QobmFtLCBzdHJ1Y3Qgc29ja2FkZHIgKik6IE5VTEw7CisjZW5kaWYKKwlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wOworCXN0cnVjdCBpbjZwY2IgKmlucDY7CisKKyNpZmRlZiBJTkVU
CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKyNlbmRpZiAvKiBJTkVUICovCisJLyogTm8g
U1BMIG5lZWRlZCBzaW5jZSBzY3RwX291dHB1dCBkb2VzIHRoaXMgKi8KKworCWlucCA9IChzdHJ1
Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucCA9PSBOVUxMKSB7CisJCWlmIChj
b250cm9sKSB7CisJCQlTQ1RQX1JFTEVBU0VfUEtUKGNvbnRyb2wpOworCQkJY29udHJvbCA9IE5V
TEw7CisJCX0KKwkJU0NUUF9SRUxFQVNFX1BLVChtKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCXJldHVy
biAoRUlOVkFMKTsKKwl9CisJaW5wNiA9IChzdHJ1Y3QgaW42cGNiICopaW5wOworCS8qCisJICog
Rm9yIHRoZSBUQ1AgbW9kZWwgd2UgbWF5IGdldCBhIE5VTEwgYWRkciwgaWYgd2UgYXJlIGEgY29u
bmVjdGVkCisJICogc29ja2V0IHRoYXRzIG9rLgorCSAqLworCWlmICgoaW5wLT5zY3RwX2ZsYWdz
ICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVEKSAmJgorCSAgICAoYWRkciA9PSBOVUxMKSkgewor
CQlnb3RvIGNvbm5lY3RlZF90eXBlOworCX0KKwlpZiAoYWRkciA9PSBOVUxMKSB7CisJCVNDVFBf
UkVMRUFTRV9QS1QobSk7CisJCWlmIChjb250cm9sKSB7CisJCQlTQ1RQX1JFTEVBU0VfUEtUKGNv
bnRyb2wpOworCQkJY29udHJvbCA9IE5VTEw7CisJCX0KKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChp
bnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVERVNUQUREUlJFUSk7CisJ
CXJldHVybiAoRURFU1RBRERSUkVRKTsKKwl9CisjaWZkZWYgSU5FVAorCXNpbjYgPSAoc3RydWN0
IHNvY2thZGRyX2luNiAqKWFkZHI7CisJaWYgKFNDVFBfSVBWNl9WNk9OTFkoaW5wNikpIHsKKwkJ
LyoKKwkJICogaWYgSVBWNl9WNk9OTFkgZmxhZywgd2UgZGlzY2FyZCBkYXRhZ3JhbXMgZGVzdGlu
ZWQgdG8gYQorCQkgKiB2NCBhZGRyIG9yIHY0LW1hcHBlZCBhZGRyCisJCSAqLworCQlpZiAoYWRk
ci0+c2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJcmV0dXJuIChF
SU5WQUwpOworCQl9CisJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRy
KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwl9CisJaWYg
KElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2FkZHIpKSB7CisJCXN0cnVjdCBzb2Nr
YWRkcl9pbiBzaW47CisKKwkJLyogY29udmVydCB2NC1tYXBwZWQgaW50byB2NCBhZGRyIGFuZCBz
ZW5kICovCisJCWluNl9zaW42XzJfc2luKCZzaW4sIHNpbjYpOworCQlyZXR1cm4gKHNjdHBfc2Vu
ZG0oc28sIGZsYWdzLCBtLCAoc3RydWN0IHNvY2thZGRyICopJnNpbiwgY29udHJvbCwgcCkpOwor
CX0KKyNlbmRpZgkJCQkvKiBJTkVUICovCitjb25uZWN0ZWRfdHlwZToKKwkvKiBub3cgd2hhdCBh
Ym91dCBjb250cm9sICovCisJaWYgKGNvbnRyb2wpIHsKKwkJaWYgKGlucC0+Y29udHJvbCkgewor
CQkJU0NUUF9QUklOVEYoImh1aD8gY29udHJvbCBzZXQ/XG4iKTsKKwkJCVNDVFBfUkVMRUFTRV9Q
S1QoaW5wLT5jb250cm9sKTsKKwkJCWlucC0+Y29udHJvbCA9IE5VTEw7CisJCX0KKwkJaW5wLT5j
b250cm9sID0gY29udHJvbDsKKwl9CisJLyogUGxhY2UgdGhlIGRhdGEgKi8KKwlpZiAoaW5wLT5w
a3QpIHsKKwkJU0NUUF9CVUZfTkVYVChpbnAtPnBrdF9sYXN0KSA9IG07CisJCWlucC0+cGt0X2xh
c3QgPSBtOworCX0gZWxzZSB7CisJCWlucC0+cGt0X2xhc3QgPSBpbnAtPnBrdCA9IG07CisJfQor
CWlmICgKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykKKwkv
KiBGcmVlQlNEIGFuZCBNYWNPU1ggdXNlcyBhIGZsYWcgcGFzc2VkICovCisJICAgICgoZmxhZ3Mg
JiBQUlVTX01PUkVUT0NPTUUpID09IDApCisjZWxzZQorCSAgICAxCQkJLyogT3BlbiBCU0QgZG9l
cyBub3QgaGF2ZSBhbnkgIm1vcmUgdG8gY29tZSIKKwkJCQkgKiBpbmRpY2F0aW9uICovCisjZW5k
aWYKKwkgICAgKSB7CisJCS8qCisJCSAqIG5vdGUgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIHRo
aXMgY29kZSB3aWxsIG9ubHkgYmUgdXNlZAorCQkgKiBieSBPcGVuQlNELCBOZXRCU0QgYW5kIEZy
ZWVCU0QgaGF2ZSBtZXRob2RzIGZvcgorCQkgKiByZS1kZWZpbmluZyBzb3NlbmQoKSB0byB1c2Ug
c2N0cF9zb3NlbmQoKS4gIE9uZSBjYW4KKwkJICogb3B0aW9uYWx5IHN3aXRjaCBiYWNrIHRvIHRo
aXMgY29kZSAoYnkgY2hhbmdpbmcgYmFjayB0aGUKKwkJICogZGVmaW5pbml0aW9ucyBidXQgdGhp
cyBpcyBub3QgYWR2aXNhYmxlLgorCQkgKi8KKwkJaW50IHJldDsKKworCQlyZXQgPSBzY3RwX291
dHB1dChpbnAsIGlucC0+cGt0LCBhZGRyLCBpbnAtPmNvbnRyb2wsIHAsIGZsYWdzKTsKKwkJaW5w
LT5wa3QgPSBOVUxMOworCQlpbnAtPmNvbnRyb2wgPSBOVUxMOworCQlyZXR1cm4gKHJldCk7CisJ
fSBlbHNlIHsKKwkJcmV0dXJuICgwKTsKKwl9Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19G
cmVlQlNEX18pICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAwMAorc3RhdGljIGludAorc2N0
cDZfY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1
Y3QgdGhyZWFkICpwKQoreworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChf
X0FQUExFX18pCitzdGF0aWMgaW50CitzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCBwcm9jICpwKQoreworI2VsaWYgZGVmaW5lZChf
X1BhbmRhX18pCitpbnQKK3NjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBz
b2NrYWRkciAqYWRkciwgdm9pZCAqcCkKK3sKKyNlbGlmIGRlZmluZWQoX19XaW5kb3dzX18pCitz
dGF0aWMgaW50CitzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKmFkZHIsIFBLVEhSRUFEIHApCit7CisjZWxpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCitp
bnQKK3NjdHA2X2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYWRk
cikKK3sKKwl2b2lkICpwID0gTlVMTDsKKyNlbHNlCitzdGF0aWMgaW50CitzY3RwNl9jb25uZWN0
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtLCBzdHJ1Y3QgcHJvYyAqcCkKK3sK
KwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyICopOwor
I2VuZGlmCisJdWludDMyX3QgdnJmX2lkOworCWludCBlcnJvciA9IDA7CisJc3RydWN0IHNjdHBf
aW5wY2IgKmlucDsKKwlzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2I7CisjaWZkZWYgSU5FVAorCXN0cnVj
dCBpbjZwY2IgKmlucDY7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNjsKKwl1bmlvbiBzY3Rw
X3NvY2tzdG9yZSBzdG9yZTsKKyNlbmRpZgorCisjaWZkZWYgSU5FVAorCWlucDYgPSAoc3RydWN0
IGluNnBjYiAqKXNvLT5zb19wY2I7CisjZW5kaWYKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2Ig
Kilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworCQlTQ1RQX0xUUkFDRV9FUlJfUkVU
KGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJFUSwgRUNPTk5SRVNFVCk7CisJ
CXJldHVybiAoRUNPTk5SRVNFVCk7CS8qIEkgbWFkZSB0aGUgc2FtZSBhcyBUQ1Agc2luY2Ugd2Ug
YXJlCisJCQkJCSAqIG5vdCBzZXR1cD8gKi8KKwl9CisJaWYgKGFkZHIgPT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2X1VTUlJF
USwgRUlOVkFMKTsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKyNpZiAhZGVmaW5lZChfX1dpbmRv
d3NfXykKKwlzd2l0Y2ggKGFkZHItPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQKKwljYXNlIEFG
X0lORVQ6CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJaWYgKGFkZHItPnNhX2xlbiAhPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEws
IE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZB
TCk7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJY2FzZSBB
Rl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlpZiAoYWRkci0+c2FfbGVuICE9IHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJ
TlZBTCk7CisJCX0KKyNlbmRpZgorCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBF
SU5WQUwpOworCQlyZXR1cm4gKEVJTlZBTCk7CisJfQorI2VuZGlmCisKKwl2cmZfaWQgPSBpbnAt
PmRlZl92cmZfaWQ7CisJU0NUUF9BU09DX0NSRUFURV9MT0NLKGlucCk7CisJU0NUUF9JTlBfUkxP
Q0soaW5wKTsKKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQp
ID09CisJICAgIFNDVFBfUENCX0ZMQUdTX1VOQk9VTkQpIHsKKwkJLyogQmluZCBhIGVwaGVtZXJh
bCBwb3J0ICovCisJCVNDVFBfSU5QX1JVTkxPQ0soaW5wKTsKKwkJZXJyb3IgPSBzY3RwNl9iaW5k
KHNvLCBOVUxMLCBwKTsKKwkJaWYgKGVycm9yKSB7CisJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9D
SyhpbnApOworCisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQorCQlTQ1RQX0lOUF9STE9DSyhpbnAp
OworCX0KKwlpZiAoKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX1RDUFRZUEUpICYm
CisJICAgIChpbnAtPnNjdHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpKSB7CisJ
CS8qIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCBBTkQgdGhlIFRDUCBtb2RlbCAqLworCQlTQ1RQ
X0lOUF9SVU5MT0NLKGlucCk7CisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCVND
VFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVR
LCBFQUREUklOVVNFKTsKKwkJcmV0dXJuIChFQUREUklOVVNFKTsKKwl9CisjaWZkZWYgSU5FVAor
CXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWFkZHI7CisJaWYgKFNDVFBfSVBWNl9WNk9O
TFkoaW5wNikpIHsKKwkJLyoKKwkJICogaWYgSVBWNl9WNk9OTFkgZmxhZywgaWdub3JlIGNvbm5l
Y3Rpb25zIGRlc3RpbmVkIHRvIGEgdjQKKwkJICogYWRkciBvciB2NC1tYXBwZWQgYWRkcgorCQkg
Ki8KKwkJaWYgKGFkZHItPnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJCQlTQ1RQX0lOUF9SVU5M
T0NLKGlucCk7CisJCQlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZB
TCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVE
KCZzaW42LT5zaW42X2FkZHIpKSB7CisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJCQlTQ1RQ
X0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5V
TEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJ
TlZBTCk7CisJCX0KKwl9CisJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZzaW42LT5zaW42X2Fk
ZHIpKSB7CisJCS8qIGNvbnZlcnQgdjQtbWFwcGVkIGludG8gdjQgYWRkciAqLworCQlpbjZfc2lu
Nl8yX3Npbigmc3RvcmUuc2luLCBzaW42KTsKKwkJYWRkciA9ICZzdG9yZS5zYTsKKwl9CisjZW5k
aWYJCQkJLyogSU5FVCAqLworCS8qIE5vdyBkbyB3ZSBjb25uZWN0PyAqLworCWlmIChpbnAtPnNj
dHBfZmxhZ3MgJiBTQ1RQX1BDQl9GTEFHU19DT05ORUNURUQpIHsKKwkJc3RjYiA9IExJU1RfRklS
U1QoJmlucC0+c2N0cF9hc29jX2xpc3QpOworCQlpZiAoc3RjYikgeworCQkJU0NUUF9UQ0JfTE9D
SyhzdGNiKTsKKwkJfQorCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisJfSBlbHNlIHsKKwkJU0NU
UF9JTlBfUlVOTE9DSyhpbnApOworCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQlTQ1RQX0lOUF9J
TkNSX1JFRihpbnApOworCQlTQ1RQX0lOUF9XVU5MT0NLKGlucCk7CisJCXN0Y2IgPSBzY3RwX2Zp
bmRhc3NvY2lhdGlvbl9lcF9hZGRyKCZpbnAsIGFkZHIsIE5VTEwsIE5VTEwsIE5VTEwpOworCQlp
ZiAoc3RjYiA9PSBOVUxMKSB7CisJCQlTQ1RQX0lOUF9XTE9DSyhpbnApOworCQkJU0NUUF9JTlBf
REVDUl9SRUYoaW5wKTsKKwkJCVNDVFBfSU5QX1dVTkxPQ0soaW5wKTsKKwkJfQorCX0KKworCWlm
IChzdGNiICE9IE5VTEwpIHsKKwkJLyogQWxyZWFkeSBoYXZlIG9yIGFtIGJyaW5nIHVwIGFuIGFz
c29jaWF0aW9uICovCisJCVNDVFBfQVNPQ19DUkVBVEVfVU5MT0NLKGlucCk7CisJCVNDVFBfVENC
X1VOTE9DSyhzdGNiKTsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFND
VFBfRlJPTV9TQ1RQNl9VU1JSRVEsIEVBTFJFQURZKTsKKwkJcmV0dXJuIChFQUxSRUFEWSk7CisJ
fQorCS8qIFdlIGFyZSBHT09EIHRvIGdvICovCisJc3RjYiA9IHNjdHBfYWxvY19hc3NvYyhpbnAs
IGFkZHIsICZlcnJvciwgMCwgdnJmX2lkLAorCSAgICAgICAgICAgICAgICAgICAgICAgaW5wLT5z
Y3RwX2VwLnByZV9vcGVuX3N0cmVhbV9jb3VudCwKKwkgICAgICAgICAgICAgICAgICAgICAgIGlu
cC0+c2N0cF9lcC5wb3J0LCBwKTsKKwlTQ1RQX0FTT0NfQ1JFQVRFX1VOTE9DSyhpbnApOworCWlm
IChzdGNiID09IE5VTEwpIHsKKwkJLyogR2FrISBubyBtZW1vcnkgKi8KKwkJcmV0dXJuIChlcnJv
cik7CisJfQorCWlmIChzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1Nf
VENQVFlQRSkgeworCQlzdGNiLT5zY3RwX2VwLT5zY3RwX2ZsYWdzIHw9IFNDVFBfUENCX0ZMQUdT
X0NPTk5FQ1RFRDsKKwkJLyogU2V0IHRoZSBjb25uZWN0ZWQgZmxhZyBzbyB3ZSBjYW4gcXVldWUg
ZGF0YSAqLworCQlzb2lzY29ubmVjdGluZyhzbyk7CisJfQorCXN0Y2ItPmFzb2Muc3RhdGUgPSBT
Q1RQX1NUQVRFX0NPT0tJRV9XQUlUOworCSh2b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGNi
LT5hc29jLnRpbWVfZW50ZXJlZCk7CisKKwkvKiBpbml0aWFsaXplIGF1dGhlbnRpY2F0aW9uIHBh
cmFtZXRlcnMgZm9yIHRoZSBhc3NvYyAqLworCXNjdHBfaW5pdGlhbGl6ZV9hdXRoX3BhcmFtcyhp
bnAsIHN0Y2IpOworCisJc2N0cF9zZW5kX2luaXRpYXRlKGlucCwgc3RjYiwgU0NUUF9TT19MT0NL
RUQpOworCVNDVFBfVENCX1VOTE9DSyhzdGNiKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworc3Rh
dGljIGludAorI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8
fCBkZWZpbmVkKF9fV2luZG93c19fKQorc2N0cDZfZ2V0YWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywg
c3RydWN0IHNvY2thZGRyICoqYWRkcikKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42Owor
I2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCitzY3RwNl9nZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKyNlbHNlCitzY3RwNl9nZXRhZGRyKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYg
KnNpbjYgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKKyNlbmRpZgorCXN0cnVj
dCBzY3RwX2lucGNiICppbnA7CisJdWludDMyX3QgdnJmX2lkOworCXN0cnVjdCBzY3RwX2lmYSAq
c2N0cF9pZmE7CisKKyNpZmRlZiBTQ1RQX0tBTUUKKwlpbnQgZXJyb3I7CisjZW5kaWYgLyogU0NU
UF9LQU1FICovCisKKwkvKgorCSAqIERvIHRoZSBtYWxsb2MgZmlyc3QgaW4gY2FzZSBpdCBibG9j
a3MuCisJICovCisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18p
IHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJU0NUUF9NQUxMT0NfU09OQU1FKHNpbjYsIHN0cnVj
dCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mKCpzaW42KSk7CisJaWYgKHNpbjYgPT0gTlVMTCkKKwkJ
cmV0dXJuIChFTk9NRU0pOworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCisJbWVtc2V0KHNpbjYs
IDAsIHNpemVvZigqc2luNikpOworI2Vsc2UKKwlTQ1RQX0JVRl9MRU4obmFtKSA9IHNpemVvZigq
c2luNik7CisJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworI2VuZGlmCisJc2luNi0+
c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJc2luNi0+c2lu
Nl9sZW4gPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisKKwlpbnAgPSAoc3RydWN0IHNjdHBfaW5w
Y2IgKilzby0+c29fcGNiOworCWlmIChpbnAgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVl
QlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlT
Q1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5w
LCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKKwkJcmV0
dXJuIChFQ09OTlJFU0VUKTsKKwl9CisJU0NUUF9JTlBfUkxPQ0soaW5wKTsKKwlzaW42LT5zaW42
X3BvcnQgPSBpbnAtPnNjdHBfbHBvcnQ7CisJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENC
X0ZMQUdTX0JPVU5EQUxMKSB7CisJCS8qIEZvciB0aGUgYm91bmQgYWxsIGNhc2UgeW91IGdldCBi
YWNrIDAgKi8KKwkJaWYgKGlucC0+c2N0cF9mbGFncyAmIFNDVFBfUENCX0ZMQUdTX0NPTk5FQ1RF
RCkgeworCQkJc3RydWN0IHNjdHBfdGNiICpzdGNiOworCQkJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luX2E2OworCQkJc3RydWN0IHNjdHBfbmV0cyAqbmV0OworCQkJaW50IGZuZDsKKwkJCXN0Y2Ig
PSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwkJCWlmIChzdGNiID09IE5VTEwp
IHsKKwkJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykg
fHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCQkJU0NUUF9G
UkVFX1NPTkFNRShzaW42KTsKKyNlbmRpZgorCQkJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFTk9FTlQpOworCQkJCXJldHVybiAo
RU5PRU5UKTsKKwkJCX0KKwkJCWZuZCA9IDA7CisJCQlzaW5fYTYgPSBOVUxMOworCQkJVEFJTFFf
Rk9SRUFDSChuZXQsICZzdGNiLT5hc29jLm5ldHMsIHNjdHBfbmV4dCkgeworCQkJCXNpbl9hNiA9
IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+cm8uX2xfYWRkcjsKKwkJCQlpZiAoc2luX2E2
ID09IE5VTEwpCisJCQkJCS8qIHRoaXMgd2lsbCBtYWtlIGNvdmVyaXR5IGhhcHB5ICovCisJCQkJ
CWNvbnRpbnVlOworCisJCQkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsK
KwkJCQkJZm5kID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJaWYgKCghZm5kKSB8
fCAoc2luX2E2ID09IE5VTEwpKSB7CisJCQkJLyogcHVudCAqLworCQkJCVNDVFBfSU5QX1JVTkxP
Q0soaW5wKTsKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykg
fHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2Vu
ZGlmCisJCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChpbnAsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9T
Q1RQNl9VU1JSRVEsIEVOT0VOVCk7CisJCQkJcmV0dXJuIChFTk9FTlQpOworCQkJfQorCQkJdnJm
X2lkID0gaW5wLT5kZWZfdnJmX2lkOworCQkJc2N0cF9pZmEgPSBzY3RwX3NvdXJjZV9hZGRyZXNz
X3NlbGVjdGlvbihpbnAsIHN0Y2IsIChzY3RwX3JvdXRlX3QgKikmbmV0LT5ybywgbmV0LCAwLCB2
cmZfaWQpOworCQkJaWYgKHNjdHBfaWZhKSB7CisJCQkJc2luNi0+c2luNl9hZGRyID0gc2N0cF9p
ZmEtPmFkZHJlc3Muc2luNi5zaW42X2FkZHI7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBGb3Ig
dGhlIGJvdW5kIGFsbCBjYXNlIHlvdSBnZXQgYmFjayAwICovCisJCQltZW1zZXQoJnNpbjYtPnNp
bjZfYWRkciwgMCwgc2l6ZW9mKHNpbjYtPnNpbjZfYWRkcikpOworCQl9CisJfSBlbHNlIHsKKwkJ
LyogVGFrZSB0aGUgZmlyc3QgSVB2NiBhZGRyZXNzIGluIHRoZSBsaXN0ICovCisJCXN0cnVjdCBz
Y3RwX2xhZGRyICpsYWRkcjsKKwkJaW50IGZuZCA9IDA7CisKKwkJTElTVF9GT1JFQUNIKGxhZGRy
LCAmaW5wLT5zY3RwX2FkZHJfbGlzdCwgc2N0cF9ueHRfYWRkcikgeworCQkJaWYgKGxhZGRyLT5p
ZmEtPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJCQkJc3RydWN0IHNvY2th
ZGRyX2luNiAqc2luX2E7CisKKwkJCQlzaW5fYSA9ICZsYWRkci0+aWZhLT5hZGRyZXNzLnNpbjY7
CisJCQkJc2luNi0+c2luNl9hZGRyID0gc2luX2EtPnNpbjZfYWRkcjsKKwkJCQlmbmQgPSAxOwor
CQkJCWJyZWFrOworCQkJfQorCQl9CisJCWlmICghZm5kKSB7CisjaWYgZGVmaW5lZChfX0ZyZWVC
U0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5kb3dzX18pCisJCQlT
Q1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCQlTQ1RQX0lOUF9SVU5MT0NLKGlucCk7
CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKGlucCwgTlVMTCwgTlVMTCwgU0NUUF9GUk9NX1NDVFA2
X1VTUlJFUSwgRU5PRU5UKTsKKwkJCXJldHVybiAoRU5PRU5UKTsKKwkJfQorCX0KKwlTQ1RQX0lO
UF9SVU5MT0NLKGlucCk7CisJLyogU2NvcGluZyB0aGluZ3MgZm9yIHY2ICovCisjaWZkZWYgU0NU
UF9FTUJFRERFRF9WNl9TQ09QRQorI2lmZGVmIFNDVFBfS0FNRQorCWlmICgoZXJyb3IgPSBzYTZf
cmVjb3ZlcnNjb3BlKHNpbjYpKSAhPSAwKSB7CisJCVNDVFBfRlJFRV9TT05BTUUoc2luNik7CisJ
CXJldHVybiAoZXJyb3IpOworCX0KKyNlbHNlCisJaWYgKElONl9JU19TQ09QRV9MSU5LTE9DQUwo
JnNpbjYtPnNpbjZfYWRkcikpCisJCS8qIHNraXAgaWZwIGNoZWNrIGJlbG93ICovCisJCWluNl9y
ZWNvdmVyc2NvcGUoc2luNiwgJnNpbjYtPnNpbjZfYWRkciwgTlVMTCk7CisJZWxzZQorCQlzaW42
LT5zaW42X3Njb3BlX2lkID0gMDsJLyogWFhYICovCisjZW5kaWYgLyogU0NUUF9LQU1FICovCisj
ZW5kaWYgLyogU0NUUF9FTUJFRERFRF9WNl9TQ09QRSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCSgqYWRk
cikgPSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKKyNlbmRpZgorCXJldHVybiAoMCk7Cit9CisK
K3N0YXRpYyBpbnQKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3NjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKiphZGRyKQoreworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNp
bjY7CisjZWxpZiBkZWZpbmVkKF9fUGFuZGFfXykKK3NjdHA2X3BlZXJhZGRyKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2luNiAq
c2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopYWRkcjsKKyNlbHNlCitzY3RwNl9wZWVyYWRk
cihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKwlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42ID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkcl9pbjYgKik7CisjZW5kaWYK
KwlpbnQgZm5kOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbl9hNjsKKwlzdHJ1Y3Qgc2N0cF9p
bnBjYiAqaW5wOworCXN0cnVjdCBzY3RwX3RjYiAqc3RjYjsKKwlzdHJ1Y3Qgc2N0cF9uZXRzICpu
ZXQ7CisjaWZkZWYgU0NUUF9LQU1FCisJaW50IGVycm9yOworI2VuZGlmCisKKwkvKiBEbyB0aGUg
bWFsbG9jIGZpcnN0IGluIGNhc2UgaXQgYmxvY2tzLiAqLworI2lmIGRlZmluZWQoX19GcmVlQlNE
X18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCVNDVFBf
TUFMTE9DX1NPTkFNRShzaW42LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICosIHNpemVvZiAqc2luNik7
CisJaWYgKHNpbjYgPT0gTlVMTCkKKwkJcmV0dXJuIChFTk9NRU0pOworI2VsaWYgZGVmaW5lZChf
X1BhbmRhX18pCisJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigqc2luNikpOworI2Vsc2UKKwlTQ1RQ
X0JVRl9MRU4obmFtKSA9IHNpemVvZigqc2luNik7CisJbWVtc2V0KHNpbjYsIDAsIHNpemVvZigq
c2luNikpOworI2VuZGlmCisJc2luNi0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBI
QVZFX1NJTjZfTEVOCisJc2luNi0+c2luNl9sZW4gPSBzaXplb2YoKnNpbjYpOworI2VuZGlmCisK
KwlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNiOworCWlmICgoaW5wID09IE5V
TEwpIHx8CisJICAgICgoaW5wLT5zY3RwX2ZsYWdzICYgU0NUUF9QQ0JfRkxBR1NfQ09OTkVDVEVE
KSA9PSAwKSkgeworCQkvKiBVRFAgdHlwZSBhbmQgbGlzdGVuZXJzIHdpbGwgZHJvcCBvdXQgaGVy
ZSAqLworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBk
ZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJ
CVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNS
UkVRLCBFTk9UQ09OTik7CisJCXJldHVybiAoRU5PVENPTk4pOworCX0KKwlTQ1RQX0lOUF9STE9D
SyhpbnApOworCXN0Y2IgPSBMSVNUX0ZJUlNUKCZpbnAtPnNjdHBfYXNvY19saXN0KTsKKwlpZiAo
c3RjYikgeworCQlTQ1RQX1RDQl9MT0NLKHN0Y2IpOworCX0KKwlTQ1RQX0lOUF9SVU5MT0NLKGlu
cCk7CisJaWYgKHN0Y2IgPT0gTlVMTCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09O
QU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxM
LCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQ09OTlJFU0VUKTsKKwkJcmV0dXJuIChFQ09OTlJF
U0VUKTsKKwl9CisJZm5kID0gMDsKKwlUQUlMUV9GT1JFQUNIKG5ldCwgJnN0Y2ItPmFzb2MubmV0
cywgc2N0cF9uZXh0KSB7CisJCXNpbl9hNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJm5ldC0+
cm8uX2xfYWRkcjsKKwkJaWYgKHNpbl9hNi0+c2luNl9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJ
CWZuZCA9IDE7CisJCQlzaW42LT5zaW42X3BvcnQgPSBzdGNiLT5ycG9ydDsKKwkJCXNpbjYtPnNp
bjZfYWRkciA9IHNpbl9hNi0+c2luNl9hZGRyOworCQkJYnJlYWs7CisJCX0KKwl9CisJU0NUUF9U
Q0JfVU5MT0NLKHN0Y2IpOworCWlmICghZm5kKSB7CisJCS8qIE5vIElQdjQgYWRkcmVzcyAqLwor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOworI2VuZGlmCisJCVNDVFBf
TFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBF
Tk9FTlQpOworCQlyZXR1cm4gKEVOT0VOVCk7CisJfQorI2lmZGVmIFNDVFBfRU1CRURERURfVjZf
U0NPUEUKKyNpZmRlZiBTQ1RQX0tBTUUKKwlpZiAoKGVycm9yID0gc2E2X3JlY292ZXJzY29wZShz
aW42KSkgIT0gMCkgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBM
RV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlTQ1RQX0ZSRUVfU09OQU1FKHNpbjYpOwor
I2VuZGlmCisJCVNDVFBfTFRSQUNFX0VSUl9SRVQoaW5wLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01f
U0NUUDZfVVNSUkVRLCBlcnJvcik7CisJCXJldHVybiAoZXJyb3IpOworCX0KKyNlbHNlCisJaW42
X3JlY292ZXJzY29wZShzaW42LCAmc2luNi0+c2luNl9hZGRyLCBOVUxMKTsKKyNlbmRpZiAvKiBT
Q1RQX0tBTUUgKi8KKyNlbmRpZiAvKiBTQ1RQX0VNQkVEREVEX1Y2X1NDT1BFICovCisjaWYgZGVm
aW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pIHx8IGRlZmluZWQoX19XaW5k
b3dzX18pCisJKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopc2luNjsKKyNlbmRpZgorCXJldHVy
biAoMCk7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0YXRpYyBpbnQKK3NjdHA2X2luNmdldGFkZHIo
c3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqKm5hbSkKK3sKKyNlbGlmIGRlZmlu
ZWQoX19QYW5kYV9fKQoraW50CitzY3RwNl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBz
dHJ1Y3Qgc29ja2FkZHIgKm5hbSwgdWludDMyX3QgKm5hbWVsZW4pCit7CisJc3RydWN0IHNvY2th
ZGRyICphZGRyID0gbmFtOworI2VsaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3Rw
Nl9pbjZnZXRhZGRyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3QgbWJ1ZiAqbmFtKQoreworI2lm
ZGVmIElORVQKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBtdG9kKG5hbSwgc3RydWN0IHNvY2th
ZGRyICopOworI2VuZGlmCisjZWxzZQorc3RhdGljIGludAorc2N0cDZfaW42Z2V0YWRkcihzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkKK3sKKyNpZmRlZiBJTkVUCisJc3RydWN0
IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNlbmRpZgor
I2VuZGlmCisJc3RydWN0IGluNnBjYiAqaW5wNiA9IHNvdG9pbjZwY2Ioc28pOworCWludCBlcnJv
cjsKKworCWlmIChpbnA2ID09IE5VTEwpIHsKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBO
VUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQlyZXR1cm4gKEVJ
TlZBTCk7CisJfQorCisJLyogYWxsb3cgdjYgYWRkcmVzc2VzIHByZWNlZGVuY2UgKi8KKwllcnJv
ciA9IHNjdHA2X2dldGFkZHIoc28sIG5hbSk7CisjaWZkZWYgSU5FVAorCWlmIChlcnJvcikgewor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQorCQlzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworI2Vsc2UKKwkJc3Ry
dWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisKKwkJLyogdHJ5IHY0IG5leHQgaWYgdjYg
ZmFpbGVkICovCisJCWVycm9yID0gc2N0cF9pbmdldGFkZHIoc28sIG5hbSk7CisJCWlmIChlcnJv
cikgeworCQkJcmV0dXJuIChlcnJvcik7CisJCX0KKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8
fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKKwkJU0NUUF9NQUxM
T0NfU09OQU1FKHNpbjYsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKiwgc2l6ZW9mICpzaW42KTsKKwkJ
aWYgKHNpbjYgPT0gTlVMTCkgeworCQkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKKwkJCXJldHVy
biAoRU5PTUVNKTsKKwkJfQorCQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJf
aW4gKikqbmFtLCBzaW42KTsKKwkJU0NUUF9GUkVFX1NPTkFNRSgqbmFtKTsKKwkJKm5hbSA9IChz
dHJ1Y3Qgc29ja2FkZHIgKilzaW42OworI2Vsc2UKKwkJaW42X3Npbl8yX3Y0bWFwc2luNigoc3Ry
dWN0IHNvY2thZGRyX2luICopYWRkciwgJnNpbjYpOworCQlTQ1RQX0JVRl9MRU4obmFtKSA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJbWVtY3B5KGFkZHIsICZzaW42LCBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNikpOworI2VuZGlmCisJfQorI2VuZGlmCisjaWYgZGVmaW5lZChf
X1BhbmRhX18pCisJKm5hbWVsZW4gPSBuYW0tPnNhX2xlbjsKKyNlbmRpZgorCXJldHVybiAoZXJy
b3IpOworfQorCisKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVf
XykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0YXRpYyBpbnQKK3NjdHA2X2dldHBlZXJhZGRy
KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pCit7CisjZWxpZiBkZWZp
bmVkKF9fUGFuZGFfXykKK2ludAorc2N0cDZfZ2V0cGVlcmFkZHIoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYWRkciAqbmFtLCB1aW50MzJfdCAqbmFtZWxlbikKK3sKKwlzdHJ1Y3Qgc29j
a2FkZHIgKmFkZHIgPSAoc3RydWN0IHNvY2thZGRyICopbmFtOworI2VsaWYgZGVmaW5lZChfX1Vz
ZXJzcGFjZV9fKQoraW50CitzY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3Ry
dWN0IG1idWYgKm5hbSkKK3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyICphZGRyID0g
bXRvZChuYW0sIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNlbmRpZgorI2Vsc2UKK3N0YXRpYworaW50
CitzY3RwNl9nZXRwZWVyYWRkcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IG1idWYgKm5hbSkK
K3sKKyNpZmRlZiBJTkVUCisJc3RydWN0IHNvY2thZGRyICphZGRyID0gbXRvZChuYW0sIHN0cnVj
dCBzb2NrYWRkciAqKTsKKyNlbmRpZgorCisjZW5kaWYKKwlzdHJ1Y3QgaW42cGNiICppbnA2ID0g
c290b2luNnBjYihzbyk7CisJaW50IGVycm9yOworCisJaWYgKGlucDYgPT0gTlVMTCkgeworCQlT
Q1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJPTV9TQ1RQNl9VU1JS
RVEsIEVJTlZBTCk7CisJCXJldHVybiAoRUlOVkFMKTsKKwl9CisKKwkvKiBhbGxvdyB2NiBhZGRy
ZXNzZXMgcHJlY2VkZW5jZSAqLworCWVycm9yID0gc2N0cDZfcGVlcmFkZHIoc28sIG5hbSk7Cisj
aWZkZWYgSU5FVAorCWlmIChlcnJvcikgeworI2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRl
ZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fV2luZG93c19fKQorCQlzdHJ1Y3Qgc29ja2Fk
ZHJfaW42ICpzaW42OworI2Vsc2UKKwkJc3RydWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlm
CisKKwkJLyogdHJ5IHY0IG5leHQgaWYgdjYgZmFpbGVkICovCisJCWVycm9yID0gc2N0cF9wZWVy
YWRkcihzbywgbmFtKTsKKwkJaWYgKGVycm9yKSB7CisJCQlyZXR1cm4gKGVycm9yKTsKKwkJfQor
I2lmIGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVk
KF9fV2luZG93c19fKQorCQlTQ1RQX01BTExPQ19TT05BTUUoc2luNiwgc3RydWN0IHNvY2thZGRy
X2luNiAqLCBzaXplb2YgKnNpbjYpOworCQlpZiAoc2luNiA9PSBOVUxMKSB7CisJCQlTQ1RQX0ZS
RUVfU09OQU1FKCpuYW0pOworCQkJcmV0dXJuIChFTk9NRU0pOworCQl9CisJCWluNl9zaW5fMl92
NG1hcHNpbjYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSpuYW0sIHNpbjYpOworCQlTQ1RQX0ZSRUVf
U09OQU1FKCpuYW0pOworCQkqbmFtID0gKHN0cnVjdCBzb2NrYWRkciAqKXNpbjY7CisjZWxzZQor
CQlpbjZfc2luXzJfdjRtYXBzaW42KChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhZGRyLCAmc2luNik7
CisJCVNDVFBfQlVGX0xFTihuYW0pID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQlt
ZW1jcHkoYWRkciwgJnNpbjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYK
Kwl9CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fUGFuZGFfXykKKwkqbmFtZWxlbiA9IG5hbS0+c2Ff
bGVuOworI2VuZGlmCisJcmV0dXJuIChlcnJvcik7Cit9CisKKyNpZiBkZWZpbmVkKF9fRnJlZUJT
RF9fKSB8fCBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dpbmRvd3NfXykKK3N0cnVj
dCBwcl91c3JyZXFzIHNjdHA2X3VzcnJlcXMgPSB7CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykK
KwkucHJ1X2Fib3J0ID0gc2N0cDZfYWJvcnQsCisJLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwK
KwkucHJ1X2F0dGFjaCA9IHNjdHA2X2F0dGFjaCwKKwkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAor
CS5wcnVfY29ubmVjdCA9IHNjdHA2X2Nvbm5lY3QsCisJLnBydV9jb250cm9sID0gaW42X2NvbnRy
b2wsCisjaWYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNjkwMDAwCisJLnBydV9jbG9zZSA9IHNjdHA2
X2Nsb3NlLAorCS5wcnVfZGV0YWNoID0gc2N0cDZfY2xvc2UsCisJLnBydV9zb3BvbGwgPSBzb3Bv
bGxfZ2VuZXJpYywKKwkucHJ1X2ZsdXNoID0gc2N0cF9mbHVzaCwKKyNlbHNlCisJLnBydV9kZXRh
Y2ggPSBzY3RwNl9kZXRhY2gsCisJLnBydV9zb3BvbGwgPSBzb3BvbGwsCisjZW5kaWYKKwkucHJ1
X2Rpc2Nvbm5lY3QgPSBzY3RwNl9kaXNjb25uZWN0LAorCS5wcnVfbGlzdGVuID0gc2N0cF9saXN0
ZW4sCisJLnBydV9wZWVyYWRkciA9IHNjdHA2X2dldHBlZXJhZGRyLAorCS5wcnVfc2VuZCA9IHNj
dHA2X3NlbmQsCisJLnBydV9zaHV0ZG93biA9IHNjdHBfc2h1dGRvd24sCisJLnBydV9zb2NrYWRk
ciA9IHNjdHA2X2luNmdldGFkZHIsCisJLnBydV9zb3NlbmQgPSBzY3RwX3Nvc2VuZCwKKwkucHJ1
X3NvcmVjZWl2ZSA9IHNjdHBfc29yZWNlaXZlCisjZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykKKwku
cHJ1X2Fib3J0ID0gc2N0cDZfYWJvcnQsCisJLnBydV9hY2NlcHQgPSBzY3RwX2FjY2VwdCwKKwku
cHJ1X2F0dGFjaCA9IHNjdHA2X2F0dGFjaCwKKwkucHJ1X2JpbmQgPSBzY3RwNl9iaW5kLAorCS5w
cnVfY29ubmVjdCA9IHNjdHA2X2Nvbm5lY3QsCisJLnBydV9jb25uZWN0MiA9IHBydV9jb25uZWN0
Ml9ub3RzdXBwLAorCS5wcnVfY29udHJvbCA9IGluNl9jb250cm9sLAorCS5wcnVfZGV0YWNoID0g
c2N0cDZfZGV0YWNoLAorCS5wcnVfZGlzY29ubmVjdCA9IHNjdHA2X2Rpc2Nvbm5lY3QsCisJLnBy
dV9saXN0ZW4gPSBzY3RwX2xpc3RlbiwKKwkucHJ1X3BlZXJhZGRyID0gc2N0cDZfZ2V0cGVlcmFk
ZHIsCisJLnBydV9yY3ZkID0gTlVMTCwKKwkucHJ1X3Jjdm9vYiA9IHBydV9yY3Zvb2Jfbm90c3Vw
cCwKKwkucHJ1X3NlbmQgPSBzY3RwNl9zZW5kLAorCS5wcnVfc2Vuc2UgPSBwcnVfc2Vuc2VfbnVs
bCwKKwkucHJ1X3NodXRkb3duID0gc2N0cF9zaHV0ZG93biwKKwkucHJ1X3NvY2thZGRyID0gc2N0
cDZfaW42Z2V0YWRkciwKKwkucHJ1X3Nvc2VuZCA9IHNjdHBfc29zZW5kLAorCS5wcnVfc29yZWNl
aXZlID0gc2N0cF9zb3JlY2VpdmUsCisJLnBydV9zb3BvbGwgPSBzb3BvbGwKKyNlbGlmIGRlZmlu
ZWQoX19XaW5kb3dzX18pCisJc2N0cDZfYWJvcnQsCisJc2N0cF9hY2NlcHQsCisJc2N0cDZfYXR0
YWNoLAorCXNjdHA2X2JpbmQsCisJc2N0cDZfY29ubmVjdCwKKwlwcnVfY29ubmVjdDJfbm90c3Vw
cCwKKwlOVUxMLAorCU5VTEwsCisJc2N0cDZfZGlzY29ubmVjdCwKKwlzY3RwX2xpc3RlbiwKKwlz
Y3RwNl9nZXRwZWVyYWRkciwKKwlOVUxMLAorCXBydV9yY3Zvb2Jfbm90c3VwcCwKKwlOVUxMLAor
CXBydV9zZW5zZV9udWxsLAorCXNjdHBfc2h1dGRvd24sCisJc2N0cF9mbHVzaCwKKwlzY3RwNl9p
bjZnZXRhZGRyLAorCXNjdHBfc29zZW5kLAorCXNjdHBfc29yZWNlaXZlLAorCXNvcG9sbF9nZW5l
cmljLAorCU5VTEwsCisJc2N0cDZfY2xvc2UKKyNlbmRpZgorfTsKKworI2VsaWYgIWRlZmluZWQo
X19QYW5kYV9fKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9fKQoraW50CitzY3RwNl91c3JyZXEo
c28sIHJlcSwgbSwgbmFtLCBjb250cm9sLCBwKQorCXN0cnVjdCBzb2NrZXQgKnNvOworCWludCBy
ZXE7CisJc3RydWN0IG1idWYgKm0sICpuYW0sICpjb250cm9sOworCXN0cnVjdCBwcm9jICpwOwor
eworCWludCBzOworCWludCBlcnJvciA9IDA7CisJaW50IGZhbWlseTsKKwl1aW50MzJfdCB2cmZf
aWQ7CisJZmFtaWx5ID0gc28tPnNvX3Byb3RvLT5wcl9kb21haW4tPmRvbV9mYW1pbHk7CisKKwlp
ZiAocmVxID09IFBSVV9DT05UUk9MKSB7CisJCXN3aXRjaCAoZmFtaWx5KSB7CisJCWNhc2UgUEZf
SU5FVDoKKwkJCWVycm9yID0gaW5fY29udHJvbChzbywgKGxvbmcpbSwgKGNhZGRyX3QpbmFtLAor
CQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sCisJCQkgICAgKTsKKyNpZmRlZiBJTkVUNgor
CQljYXNlIFBGX0lORVQ2OgorCQkJZXJyb3IgPSBpbjZfY29udHJvbChzbywgKGxvbmcpbSwgKGNh
ZGRyX3QpbmFtLAorCQkJICAgIChzdHJ1Y3QgaWZuZXQgKiljb250cm9sLCBwKTsKKyNlbmRpZgor
CQlkZWZhdWx0OgorCQkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQ
X0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQkJZXJyb3IgPSBFQUZOT1NVUFBP
UlQ7CisJCX0KKwkJcmV0dXJuIChlcnJvcik7CisJfQorCXN3aXRjaCAocmVxKSB7CisJY2FzZSBQ
UlVfQVRUQUNIOgorCQllcnJvciA9IHNjdHA2X2F0dGFjaChzbywgZmFtaWx5LCBwKTsKKwkJYnJl
YWs7CisJY2FzZSBQUlVfREVUQUNIOgorCQllcnJvciA9IHNjdHA2X2RldGFjaChzbyk7CisJCWJy
ZWFrOworCWNhc2UgUFJVX0JJTkQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5W
QUwpOworCQkJcmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cDZfYmluZChzbywg
bmFtLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfTElTVEVOOgorCQllcnJvciA9IHNjdHBfbGlz
dGVuKHNvLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfQ09OTkVDVDoKKwkJaWYgKG5hbSA9PSBO
VUxMKSB7CisJCQlTQ1RQX0xUUkFDRV9FUlJfUkVUKE5VTEwsIE5VTEwsIE5VTEwsIFNDVFBfRlJP
TV9TQ1RQNl9VU1JSRVEsIEVJTlZBTCk7CisJCQlyZXR1cm4gKEVJTlZBTCk7CisJCX0KKwkJZXJy
b3IgPSBzY3RwNl9jb25uZWN0KHNvLCBuYW0sIHApOworCQlicmVhazsKKwljYXNlIFBSVV9ESVND
T05ORUNUOgorCQllcnJvciA9IHNjdHA2X2Rpc2Nvbm5lY3Qoc28pOworCQlicmVhazsKKwljYXNl
IFBSVV9BQ0NFUFQ6CisJCWlmIChuYW0gPT0gTlVMTCkgeworCQkJU0NUUF9MVFJBQ0VfRVJSX1JF
VChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFSU5WQUwpOworCQkJ
cmV0dXJuIChFSU5WQUwpOworCQl9CisJCWVycm9yID0gc2N0cF9hY2NlcHQoc28sIG5hbSk7CisJ
CWJyZWFrOworCWNhc2UgUFJVX1NIVVRET1dOOgorCQllcnJvciA9IHNjdHBfc2h1dGRvd24oc28p
OworCQlicmVhazsKKworCWNhc2UgUFJVX1JDVkQ6CisJCS8qCisJCSAqIEZvciBPcGVuQlNEIGFu
ZCBOZXRCU0QsIHRoaXMgaXMgcmVhbCB1Z2x5LiBUaGUgKG1idWYgKikKKwkJICogbmFtIHRoYXQg
aXMgcGFzc2VkIChieSBzb3JlY2VpdmUoKSkgaXMgdGhlIGludCBmbGFncyBjYXN0CisJCSAqIGFz
IGEgKG1idWYgKikgeXVjayEKKwkJICovCisJCWVycm9yID0gc2N0cF91c3JfcmVjdmQoc28sIChp
bnQpKChsb25nKW5hbSkpOworCQlicmVhazsKKworCWNhc2UgUFJVX1NFTkQ6CisJCS8qIEZsYWdz
IGFyZSBpZ25vcmVkICovCisJCWVycm9yID0gc2N0cDZfc2VuZChzbywgMCwgbSwgbmFtLCBjb250
cm9sLCBwKTsKKwkJYnJlYWs7CisJY2FzZSBQUlVfQUJPUlQ6CisJCWVycm9yID0gc2N0cDZfYWJv
cnQoc28pOworCQlicmVhazsKKworCWNhc2UgUFJVX1NFTlNFOgorCQllcnJvciA9IDA7CisJCWJy
ZWFrOworCWNhc2UgUFJVX1JDVk9PQjoKKwkJU0NUUF9MVFJBQ0VfRVJSX1JFVChOVUxMLCBOVUxM
LCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZOT1NVUFBPUlQpOworCQllcnJvciA9
IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBQUlVfU0VORE9PQjoKKwkJU0NUUF9MVFJB
Q0VfRVJSX1JFVChOVUxMLCBOVUxMLCBOVUxMLCBTQ1RQX0ZST01fU0NUUDZfVVNSUkVRLCBFQUZO
T1NVUFBPUlQpOworCQllcnJvciA9IEVBRk5PU1VQUE9SVDsKKwkJYnJlYWs7CisJY2FzZSBQUlVf
UEVFUkFERFI6CisJCWVycm9yID0gc2N0cDZfZ2V0cGVlcmFkZHIoc28sIG5hbSk7CisJCWJyZWFr
OworCWNhc2UgUFJVX1NPQ0tBRERSOgorCQllcnJvciA9IHNjdHA2X2luNmdldGFkZHIoc28sIG5h
bSk7CisJCWJyZWFrOworCWNhc2UgUFJVX1NMT1dUSU1POgorCQllcnJvciA9IDA7CisJCWJyZWFr
OworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKGVycm9yKTsKK30KKyNlbmRpZgor
I2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQ2L3NjdHA2X3Zh
ci5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3Jz
Y3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRpbmV0Ni9zY3RwNl92YXIuaAppbmRleCBlNjlk
ZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi4zYzQyODVkMjljYjc4YmUxM2Zi
MGE2YmU2ODY3Y2NmNjc5ODA2OWU4IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25l
dGluZXQ2L3NjdHA2X3Zhci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0aW5ldDYvc2N0
cDZfdmFyLmgKQEAgLTAsMCArMSw5MyBAQAorLyotCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll
cjogQlNELTMtQ2xhdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxLTIwMDcsIGJ5IENpc2Nv
IFN5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoYykgMjAw
OC0yMDEyLCBieSBSYW5kYWxsIFN0ZXdhcnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKGMpIDIwMDgtMjAxMiwgYnkgTWljaGFlbCBUdWV4ZW4uIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAqCisgKiBhKSBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICoKKyAqIGIpIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAg
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIGMpIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2lzY28gU3lz
dGVtcywgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCisgKiBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZkZWYgX19GcmVlQlNEX18KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4K
K19fRkJTRElEKCIkRnJlZUJTRDogaGVhZC9zeXMvbmV0aW5ldDYvc2N0cDZfdmFyLmggMzE3NDU3
IDIwMTctMDQtMjYgMTk6MjY6NDBaIHR1ZXhlbiAkIik7CisjZW5kaWYKKworI2lmbmRlZiBfTkVU
SU5FVDZfU0NUUDZfVkFSX0hfCisjZGVmaW5lIF9ORVRJTkVUNl9TQ1RQNl9WQVJfSF8KKworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKyNpZmRlZiBJTkVUCitleHRlcm4gdm9pZCBpbjZfc2lu
Nl8yX3NpbihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRyX2luNiAqKTsKK2V4
dGVybiB2b2lkIGluNl9zaW42XzJfc2luX2luX3NvY2soc3RydWN0IHNvY2thZGRyICopOworZXh0
ZXJuIHZvaWQgaW42X3Npbl8yX3Y0bWFwc2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0
IHNvY2thZGRyX2luNiAqKTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfS0VSTkVMKQor
CisjaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX1dp
bmRvd3NfXykKK1NZU0NUTF9ERUNMKF9uZXRfaW5ldDZfc2N0cDYpOworZXh0ZXJuIHN0cnVjdCBw
cl91c3JyZXFzIHNjdHA2X3VzcnJlcXM7CisjZWxzZQoraW50IHNjdHA2X3VzcnJlcShzdHJ1Y3Qg
c29ja2V0ICosIGludCwgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYg
Kik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19BUFBMRV9fKQoraW50IHNjdHA2X2lucHV0KHN0
cnVjdCBtYnVmICoqLCBpbnQgKik7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9wb3J0KHN0cnVjdCBt
YnVmICoqLCBpbnQgKiwgdWludDE2X3QpOworI2VsaWYgZGVmaW5lZChfX1BhbmRhX18pCitpbnQg
c2N0cDZfaW5wdXQgKHBha2hhbmRsZV90eXBlICopOworI2VsaWYgZGVmaW5lZChfX0ZyZWVCU0Rf
XykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK2ludCBzY3RwNl9pbnB1dCBfX1AoKHN0
cnVjdCBtYnVmICoqLCBpbnQgKiwgaW50KSk7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9wb3J0IF9f
UCgoc3RydWN0IG1idWYgKiosIGludCAqLCB1aW50MTZfdCkpOworI2Vsc2UKK2ludCBzY3RwNl9p
bnB1dChzdHJ1Y3QgbWJ1ZiAqKiwgaW50ICosIGludCk7CitpbnQgc2N0cDZfaW5wdXRfd2l0aF9w
b3J0KHN0cnVjdCBtYnVmICoqLCBpbnQgKiwgdWludDE2X3QpOworI2VuZGlmCisjaWYgZGVmaW5l
ZChfX0ZyZWVCU0RfXykgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCA5MDIwMDAKK2ludCBzY3RwNl9v
dXRwdXQKK19fUCgoc3RydWN0IHNjdHBfaW5wY2IgKiwgc3RydWN0IG1idWYgKiwgc3RydWN0IHNv
Y2thZGRyICosCisgICAgIHN0cnVjdCBtYnVmICosIHN0cnVjdCBwcm9jICopKTsKK3ZvaWQgc2N0
cDZfY3RsaW5wdXQgX19QKChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICopKTsKKyNlbHNl
CitpbnQgc2N0cDZfb3V0cHV0KHN0cnVjdCBzY3RwX2lucGNiICosIHN0cnVjdCBtYnVmICosIHN0
cnVjdCBzb2NrYWRkciAqLAorICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJ1ZiAqLCBzdHJ1Y3Qg
cHJvYyAqKTsKKyNpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoQVBQTEVfTEVPUEFS
RCkgJiYgIWRlZmluZWQoQVBQTEVfU05PV0xFT1BBUkQpICYmICFkZWZpbmVkKEFQUExFX0xJT04p
ICYmICFkZWZpbmVkKEFQUExFX01PVU5UQUlOTElPTikgJiYgIWRlZmluZWQoQVBQTEVfRUxDQVBJ
VEFOKQordm9pZCBzY3RwNl9jdGxpbnB1dChpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCB2b2lkICos
IHN0cnVjdCBpZm5ldCAqIFNDVFBfVU5VU0VEKTsKKyNlbHNlCit2b2lkIHNjdHA2X2N0bGlucHV0
KGludCwgc3RydWN0IHNvY2thZGRyICosIHZvaWQgKik7CisjZW5kaWYKKyNlbmRpZgorI2lmICEo
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX0FQUExFX18pKQorZXh0ZXJuIHZvaWQg
aW42X3Npbl8yX3Y0bWFwc2luNihzdHJ1Y3Qgc29ja2FkZHJfaW4gKiwgc3RydWN0IHNvY2thZGRy
X2luNiAqKTsKK2V4dGVybiB2b2lkIGluNl9zaW42XzJfc2luKHN0cnVjdCBzb2NrYWRkcl9pbiAq
LCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopOworZXh0ZXJuIHZvaWQgaW42X3NpbjZfMl9zaW5faW5f
c29jayhzdHJ1Y3Qgc29ja2FkZHIgKik7CisjZW5kaWYKK3ZvaWQgc2N0cDZfbm90aWZ5KHN0cnVj
dCBzY3RwX2lucGNiICosIHN0cnVjdCBzY3RwX3RjYiAqLCBzdHJ1Y3Qgc2N0cF9uZXRzICosCisg
ICAgICAgICAgICAgICAgICB1aW50OF90LCB1aW50OF90LCB1aW50MzJfdCk7CisjZW5kaWYKKyNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjg5NzM5YzRlOTA4MmM3NmM5NjU1YTk0NDJkN2I4YmRmMTBj
YjAwMDYgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfYXRvbWljLmgKQEAgLTAsMCArMSwzMTYgQEAKKy8q
LQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJhZCBQZW5vZmYKKyAqIENvcHlyaWdodCAo
YykgMjAwOS0yMDEwIEh1bWFpcmEgS2FtYWwKKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIEly
ZW5lIFJ1ZW5nZWxlcgorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4K
KyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBB
TkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX1VTRVJfQVRPTUlDX0hf
CisjZGVmaW5lIF9VU0VSX0FUT01JQ19IXworCisvKiBfX1VzZXJzcGFjZV9fIHZlcnNpb24gb2Yg
c3lzL2kzODYvaW5jbHVkZS9hdG9taWMuaCBnb2VzIGhlcmUgKi8KKworLyogVE9ETyBJbiB0aGUg
ZnV0dXJlLCBtaWdodCB3YW50IHRvIG5vdCB1c2UgaTM4NiBzcGVjaWZpYyBhc3NlbWJseS4KKyAq
ICAgIFRoZSBvcHRpb25zIGluY2x1ZGU6CisgKiAgICAgICAtIGltcGxlbWVudCB0aGVtIGdlbmVy
aWNhbGx5IChidXQgbWF5YmUgbm90IHRydWx5IGF0b21pYz8pIGluIHVzZXJzcGFjZQorICogICAg
ICAgLSBoYXZlIGlmZGVmJ3MgZm9yIF9fVXNlcnNwYWNlX2FyY2hfIHBlcmhhcHMgKE9TIGlzbid0
IGVub3VnaC4uLikKKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkIChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisjZGVmaW5lIGF0b21pY19hZGRfaW50KGFkZHIsIHZhbCkgSW50ZXJsb2NrZWRFeGNoYW5n
ZUFkZCgoTFBMT05HKWFkZHIsIChMT05HKXZhbCkKKyNkZWZpbmUgYXRvbWljX2ZldGNoYWRkX2lu
dChhZGRyLCB2YWwpIEludGVybG9ja2VkRXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLCAoTE9ORyl2
YWwpCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoYWRkciwgdmFsKSAgIEludGVybG9ja2Vk
RXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLC0oKExPTkcpdmFsKSkKKyNkZWZpbmUgYXRvbWljX2Nt
cHNldF9pbnQoZHN0LCBleHAsIHNyYykgSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UoKExQTE9O
Rylkc3QsIHNyYywgZXhwKQorI2RlZmluZSBTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09V
TlQoYWRkcikgKEludGVybG9ja2VkRXhjaGFuZ2VBZGQoKExQTE9ORylhZGRyLCAoLTFMKSkgPT0g
MSkKKyNlbHNlCisjaW5jbHVkZSA8bGlia2Vybi9PU0F0b21pYy5oPgorI2RlZmluZSBhdG9taWNf
YWRkX2ludChhZGRyLCB2YWwpIE9TQXRvbWljQWRkMzJCYXJyaWVyKHZhbCwgKGludDMyX3QgKilh
ZGRyKQorI2RlZmluZSBhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIHZhbCkgT1NBdG9taWNBZGQz
MkJhcnJpZXIodmFsLCAoaW50MzJfdCAqKWFkZHIpCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9p
bnQoYWRkciwgdmFsKSBPU0F0b21pY0FkZDMyQmFycmllcigtdmFsLCAoaW50MzJfdCAqKWFkZHIp
CisjZGVmaW5lIGF0b21pY19jbXBzZXRfaW50KGRzdCwgZXhwLCBzcmMpIE9TQXRvbWljQ29tcGFy
ZUFuZFN3YXBJbnRCYXJyaWVyKGV4cCwgc3JjLCAoaW50ICopZHN0KQorI2RlZmluZSBTQ1RQX0RF
Q1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQoYWRkcikgKGF0b21pY19mZXRjaGFkZF9pbnQoYWRk
ciwgLTEpID09IDApCisjZW5kaWYKKworI2lmIGRlZmluZWQoSU5WQVJJQU5UUykKKyNkZWZpbmUg
U0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoYWRkciwgdmFsKSBcCit7IFwKKwlpbnQzMl90IG5l
d3ZhbDsgXAorCW5ld3ZhbCA9IGF0b21pY19mZXRjaGFkZF9pbnQoYWRkciwgLXZhbCk7IFwKKwlp
ZiAobmV3dmFsIDwgMCkgeyBcCisJCXBhbmljKCJDb3VudGVyIGdvZXMgbmVnYXRpdmUiKTsgXAor
CX0gXAorfQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoYWRkciwg
dmFsKSBcCit7IFwKKwlpbnQzMl90IG5ld3ZhbDsgXAorCW5ld3ZhbCA9IGF0b21pY19mZXRjaGFk
ZF9pbnQoYWRkciwgLXZhbCk7IFwKKwlpZiAobmV3dmFsIDwgMCkgeyBcCisJCSphZGRyID0gMDsg
XAorCX0gXAorfQorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQor
c3RhdGljIHZvaWQgYXRvbWljX2luaXQodm9pZCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90
IHVzaW5nIGF0b21pY19tdHggKi8KKyNlbHNlCisvLyBXZWJLaXQgY2hhbmdlLCB0aGlzIGNvbmZs
aWN0cyB3aXRoIGF0b21pY19pbml0CisvLyBzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQo
dm9pZCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKyNl
bmRpZgorCisjZWxzZQorLyogVXNpbmcgZ2NjIGJ1aWx0LWluIGZ1bmN0aW9ucyBmb3IgYXRvbWlj
IG1lbW9yeSBvcGVyYXRpb25zCisgICBSZWZlcmVuY2U6IGh0dHA6Ly9nY2MuZ251Lm9yZy9vbmxp
bmVkb2NzL2djYy00LjEuMC9nY2MvQXRvbWljLUJ1aWx0aW5zLmh0bWwKKyAgIFJlcXVpcmVzIGdj
YyB2ZXJzaW9uIDQuMS4wCisgICBjb21waWxlIHdpdGggLW1hcmNoPWk0ODYKKyAqLworCisvKkF0
b21pY2FsbHkgYWRkIFYgdG8gKlAuKi8KKyNkZWZpbmUgYXRvbWljX2FkZF9pbnQoUCwgVikJICh2
b2lkKSBfX3N5bmNfZmV0Y2hfYW5kX2FkZChQLCBWKQorCisvKkF0b21pY2FsbHkgc3VidHJhY2Ug
ViBmcm9tICpQLiovCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9pbnQoUCwgVikgKHZvaWQpIF9f
c3luY19mZXRjaF9hbmRfc3ViKFAsIFYpCisKKy8qCisgKiBBdG9taWNhbGx5IGFkZCB0aGUgdmFs
dWUgb2YgdiB0byB0aGUgaW50ZWdlciBwb2ludGVkIHRvIGJ5IHAgYW5kIHJldHVybgorICogdGhl
IHByZXZpb3VzIHZhbHVlIG9mICpwLgorICovCisjZGVmaW5lIGF0b21pY19mZXRjaGFkZF9pbnQo
cCwgdikgX19zeW5jX2ZldGNoX2FuZF9hZGQocCwgdikKKworLyogRm9sbG93aW5nIGV4cGxhbmF0
aW9uIGZyb20gc3JjL3N5cy9pMzg2L2luY2x1ZGUvYXRvbWljLmgsCisgKiBmb3IgYXRvbWljIGNv
bXBhcmUgYW5kIHNldAorICoKKyAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAoYWxsIDMy
IGJpdCB3b3JkcykKKyAqCisgKiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3Vj
Y2VzcworICovCisKKyNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgX19z
eW5jX2Jvb2xfY29tcGFyZV9hbmRfc3dhcChkc3QsIGV4cCwgc3JjKQorCisjZGVmaW5lIFNDVFBf
REVDUkVNRU5UX0FORF9DSEVDS19SRUZDT1VOVChhZGRyKSAoYXRvbWljX2ZldGNoYWRkX2ludChh
ZGRyLCAtMSkgPT0gMSkKKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjZGVmaW5lIFNDVFBfU0FW
RV9BVE9NSUNfREVDUkVNRU5UKGFkZHIsIHZhbCkgXAoreyBcCisJaW50MzJfdCBvbGR2YWw7IFwK
KwlvbGR2YWwgPSBhdG9taWNfZmV0Y2hhZGRfaW50KGFkZHIsIC12YWwpOyBcCisJaWYgKG9sZHZh
bCA8IHZhbCkgeyBcCisJCXBhbmljKCJDb3VudGVyIGdvZXMgbmVnYXRpdmUiKTsgXAorCX0gXAor
fQorI2Vsc2UKKyNkZWZpbmUgU0NUUF9TQVZFX0FUT01JQ19ERUNSRU1FTlQoYWRkciwgdmFsKSBc
Cit7IFwKKwlpbnQzMl90IG9sZHZhbDsgXAorCW9sZHZhbCA9IGF0b21pY19mZXRjaGFkZF9pbnQo
YWRkciwgLXZhbCk7IFwKKwlpZiAob2xkdmFsIDwgdmFsKSB7IFwKKwkJKmFkZHIgPSAwOyBcCisJ
fSBcCit9CisjZW5kaWYKK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAv
KiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLworI2VuZGlmCisKKyNp
ZiAwIC8qIHVzaW5nIGxpYmF0b21pY19vcHMgKi8KKyNpbmNsdWRlICJ1c2VyX2luY2x1ZGUvYXRv
bWljX29wcy5oIgorCisvKkF0b21pY2FsbHkgYWRkIGluY3IgdG8gKlAsIGFuZCByZXR1cm4gdGhl
IG9yaWdpbmFsIHZhbHVlIG9mICpQLiovCisjZGVmaW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSBB
T19mZXRjaF9hbmRfYWRkKChBT190KilQLCBWKQorCisjZGVmaW5lIGF0b21pY19zdWJ0cmFjdF9p
bnQoUCwgVikgQU9fZmV0Y2hfYW5kX2FkZCgoQU9fdCopUCwgLShWKSkKKworLyoKKyAqIEF0b21p
Y2FsbHkgYWRkIHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBh
bmQgcmV0dXJuCisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KKyNkZWZpbmUgYXRv
bWljX2ZldGNoYWRkX2ludChwLCB2KSBBT19mZXRjaF9hbmRfYWRkKChBT190KilwLCB2KQorCisv
KiBBdG9taWNhbGx5IGNvbXBhcmUgKmFkZHIgdG8gb2xkX3ZhbCwgYW5kIHJlcGxhY2UgKmFkZHIg
YnkgbmV3X3ZhbAorICAgaWYgdGhlIGZpcnN0IGNvbXBhcmlzb24gc3VjY2VlZHMuICBSZXR1cm5z
IG5vbnplcm8gaWYgdGhlIGNvbXBhcmlzb24KKyAgIHN1Y2NlZWRlZCBhbmQgKmFkZHIgd2FzIHVw
ZGF0ZWQuCisqLworLyogRm9sbG93aW5nIEV4cGxhbmF0aW9uIGZyb20gc3JjL3N5cy9pMzg2L2lu
Y2x1ZGUvYXRvbWljLmgsIHdoaWNoCisgICBtYXRjaGVzIHRoYXQgb2YgQU9fY29tcGFyZV9hbmRf
c3dhcCBhYm92ZS4KKyAqIEF0b21pYyBjb21wYXJlIGFuZCBzZXQsIHVzZWQgYnkgdGhlIG11dGV4
IGZ1bmN0aW9ucworICoKKyAqIGlmICgqZHN0ID09IGV4cCkgKmRzdCA9IHNyYyAoYWxsIDMyIGJp
dCB3b3JkcykKKyAqCisgKiBSZXR1cm5zIDAgb24gZmFpbHVyZSwgbm9uLXplcm8gb24gc3VjY2Vz
cworICovCisKKyNkZWZpbmUgYXRvbWljX2NtcHNldF9pbnQoZHN0LCBleHAsIHNyYykgQU9fY29t
cGFyZV9hbmRfc3dhcCgoQU9fdCopZHN0LCBleHAsIHNyYykKKworc3RhdGljIGlubGluZSB2b2lk
IGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19t
dHggKi8KKyNlbmRpZiAvKiBjbG9zaW5nICNpZiBmb3IgbGliYXRvbWljICovCisKKyNpZiAwIC8q
IHVzaW5nIGF0b21pY19tdHggKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworZXh0ZXJuIHVz
ZXJsYW5kX211dGV4X3QgYXRvbWljX210eDsKKworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2luaXQoKSB7CisJSW5pdGlhbGl6
ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRv
bWljX2Rlc3Ryb3koKSB7CisJRGVsZXRlQ3JpdGljYWxTZWN0aW9uKCZhdG9taWNfbXR4KTsKK30K
K3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfbG9jaygpIHsKKwlFbnRlckNyaXRpY2FsU2VjdGlv
bigmYXRvbWljX210eCk7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3VubG9jaygpIHsK
KwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYXRvbWljX210eCk7Cit9CisjZWxzZQorc3RhdGljIGlu
bGluZSB2b2lkIGF0b21pY19pbml0KCkgeworCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0
cjsKKworCXB0aHJlYWRfbXV0ZXhhdHRyX2luaXQoJm11dGV4X2F0dHIpOworI2lmZGVmIElOVkFS
SUFOVFMKKwlwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKCZtdXRleF9hdHRyLCBQVEhSRUFEX01V
VEVYX0VSUk9SQ0hFQ0spOworI2VuZGlmCisJcHRocmVhZF9tdXRleF9pbml0KCZhY2NlcHRfbXR4
LCAmbXV0ZXhfYXR0cik7CisJcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveSgmbXV0ZXhfYXR0cik7
Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2Rlc3Ryb3koKSB7CisJKHZvaWQpcHRocmVh
ZF9tdXRleF9kZXN0cm95KCZhdG9taWNfbXR4KTsKK30KK3N0YXRpYyBpbmxpbmUgdm9pZCBhdG9t
aWNfbG9jaygpIHsKKyNpZmRlZiBJTlZBUklBTlRTCisJS0FTU0VSVChwdGhyZWFkX211dGV4X2xv
Y2soJmF0b21pY19tdHgpID09IDAsICgiYXRvbWljX2xvY2s6IGF0b21pY19tdHggYWxyZWFkeSBs
b2NrZWQiKSkKKyNlbHNlCisJKHZvaWQpcHRocmVhZF9tdXRleF9sb2NrKCZhdG9taWNfbXR4KTsK
KyNlbmRpZgorfQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY191bmxvY2soKSB7CisjaWZkZWYg
SU5WQVJJQU5UUworCUtBU1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJmF0b21pY19tdHgpID09
IDAsICgiYXRvbWljX3VubG9jazogYXRvbWljX210eCBub3QgbG9ja2VkIikpCisjZWxzZQorCSh2
b2lkKXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZhdG9taWNfbXR4KTsKKyNlbmRpZgorfQorI2VuZGlm
CisvKgorICogRm9yIHVzZXJsYW5kLCBhbHdheXMgdXNlIGxvY2sgcHJlZml4ZXMgc28gdGhhdCB0
aGUgYmluYXJpZXMgd2lsbCBydW4KKyAqIG9uIGJvdGggU01QIGFuZCAhU01QIHN5c3RlbXMuCisg
Ki8KKworI2RlZmluZQlNUExPQ0tFRAkibG9jayA7ICIKKworLyoKKyAqIEF0b21pY2FsbHkgYWRk
IHRoZSB2YWx1ZSBvZiB2IHRvIHRoZSBpbnRlZ2VyIHBvaW50ZWQgdG8gYnkgcCBhbmQgcmV0dXJu
CisgKiB0aGUgcHJldmlvdXMgdmFsdWUgb2YgKnAuCisgKi8KK3N0YXRpYyBfX2lubGluZSB1X2lu
dAorYXRvbWljX2ZldGNoYWRkX2ludCh2b2xhdGlsZSB2b2lkICpuLCB1X2ludCB2KQoreworCWlu
dCAqcCA9IChpbnQgKikgbjsKKwlhdG9taWNfbG9jaygpOworCV9fYXNtIF9fdm9sYXRpbGUoCisJ
IgkiIE1QTE9DS0VEICIJCSIKKwkiCXhhZGRsCSUwLCAlMSA7CSIKKwkiIyBhdG9taWNfZmV0Y2hh
ZGRfaW50IgorCTogIityIiAodiksCQkJLyogMCAocmVzdWx0KSAqLworCSAgIj1tIiAoKnApCQkJ
LyogMSAqLworCTogIm0iICgqcCkpOwkJCS8qIDIgKi8KKwlhdG9taWNfdW5sb2NrKCk7CisKKwly
ZXR1cm4gKHYpOworfQorCisKKyNpZmRlZiBDUFVfRElTQUJMRV9DTVBYQ0hHCisKK3N0YXRpYyBf
X2lubGluZSBpbnQKK2F0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3QsIHVfaW50
IGV4cCwgdV9pbnQgc3JjKQoreworCXVfY2hhciByZXM7CisKKwlhdG9taWNfbG9jaygpOworCV9f
YXNtIF9fdm9sYXRpbGUoCisJIglwdXNoZmwgOwkJIgorCSIJY2xpIDsJCQkiCisJIgljbXBsCSUz
LCU0IDsJCSIKKwkiCWpuZQkxZiA7CQkiCisJIgltb3ZsCSUyLCUxIDsJCSIKKwkiMToJCQkJIgor
CSIgICAgICAgc2V0ZQklMCA7CQkiCisJIglwb3BmbCA7CQkJIgorCSIjIGF0b21pY19jbXBzZXRf
aW50IgorCTogIj1xIiAocmVzKSwJCQkvKiAwICovCisJICAiPW0iICgqZHN0KQkJCS8qIDEgKi8K
Kwk6ICJyIiAoc3JjKSwJCQkvKiAyICovCisJICAiciIgKGV4cCksCQkJLyogMyAqLworCSAgIm0i
ICgqZHN0KQkJCS8qIDQgKi8KKwk6ICJtZW1vcnkiKTsKKwlhdG9taWNfdW5sb2NrKCk7CisKKwly
ZXR1cm4gKHJlcyk7Cit9CisKKyNlbHNlIC8qICFDUFVfRElTQUJMRV9DTVBYQ0hHICovCisKK3N0
YXRpYyBfX2lubGluZSBpbnQKK2F0b21pY19jbXBzZXRfaW50KHZvbGF0aWxlIHVfaW50ICpkc3Qs
IHVfaW50IGV4cCwgdV9pbnQgc3JjKQoreworCWF0b21pY19sb2NrKCk7CisJdV9jaGFyIHJlczsK
KworCV9fYXNtIF9fdm9sYXRpbGUoCisJIgkiIE1QTE9DS0VEICIJCSIKKwkiCWNtcHhjaGdsICUy
LCUxIDsJIgorCSIJc2V0ZQklMCA7CQkiCisJIjE6CQkJCSIKKwkiIyBhdG9taWNfY21wc2V0X2lu
dCIKKwk6ICI9YSIgKHJlcyksCQkJLyogMCAqLworCSAgIj1tIiAoKmRzdCkJCQkvKiAxICovCisJ
OiAiciIgKHNyYyksCQkJLyogMiAqLworCSAgImEiIChleHApLAkJCS8qIDMgKi8KKwkgICJtIiAo
KmRzdCkJCQkvKiA0ICovCisJOiAibWVtb3J5Iik7CisJYXRvbWljX3VubG9jaygpOworCisJcmV0
dXJuIChyZXMpOworfQorCisjZW5kaWYgLyogQ1BVX0RJU0FCTEVfQ01QWENIRyAqLworCisjZGVm
aW5lIGF0b21pY19hZGRfaW50KFAsIFYpCSBkbyB7ICAgXAorCQlhdG9taWNfbG9jaygpOyAgICAg
ICAgICBcCisJCSgqKHVfaW50ICopKFApICs9IChWKSk7IFwKKwkJYXRvbWljX3VubG9jaygpOyAg
ICAgICAgXAorfSB3aGlsZSgwKQorI2RlZmluZSBhdG9taWNfc3VidHJhY3RfaW50KFAsIFYpICBk
byB7ICAgXAorCQlhdG9taWNfbG9jaygpOyAgICAgICAgICAgIFwKKwkJKCoodV9pbnQgKikoUCkg
LT0gKFYpKTsgICBcCisJCWF0b21pY191bmxvY2soKTsgICAgICAgICAgXAorfSB3aGlsZSgwKQor
CisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRj
L1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vu
dmlyb25tZW50LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuYwppbmRl
eCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi43NjdjNGJhNGQ0M2Zm
YmE3NWEyMzA3NDEwNTllNGU5M2EwODY4ZTYzIDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3Rw
bGliL3VzZXJfZW52aXJvbm1lbnQuYworKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52
aXJvbm1lbnQuYwpAQCAtMCwwICsxLDEwNCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkt
MjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1h
bAorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmln
aHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVU
SE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
CisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0Uu
CisgKi8KKworLyogX19Vc2Vyc3BhY2VfXyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaWYg
IWRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVkZSA8c3RkaW50Lmg+Cisj
aW5jbHVkZSA8bmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8
dXNlcl9lbnZpcm9ubWVudC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLyogI2luY2x1ZGUg
PHN5cy9wYXJhbS5oPiBkZWZpbmVzIE1JTiAqLworI2lmICFkZWZpbmVkKE1JTikKKyNkZWZpbmUg
TUlOKGFyZzEsYXJnMikgKChhcmcxKSA8IChhcmcyKSA/IChhcmcxKSA6IChhcmcyKSkKKyNlbmRp
ZgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjZGVmaW5lIHVIWiAxMDAwCisKKy8qIFNlZSB1c2Vy
X2luY2x1ZGUvdXNlcl9lbnZpcm9ubWVudC5oIGZvciBjb21tZW50cyBhYm91dCB0aGVzZSB2YXJp
YWJsZXMgKi8KK2ludCBtYXhzb2NrZXRzID0gMjU2MDA7CitpbnQgaHogPSB1SFo7CitpbnQgaXBf
ZGVmdHRsID0gNjQ7CitpbnQgaXBwb3J0X2ZpcnN0YXV0byA9IDQ5MTUyLCBpcHBvcnRfbGFzdGF1
dG8gPSA2NTUzNTsKK2ludCBubWJjbHVzdGVycyA9IDY1NTM2OworCisvKiBTb3VyY2UgaXBfb3V0
cHV0LmMuIGV4dGVybidkIGluIGlwX3Zhci5oICovCit1X3Nob3J0IGlwX2lkID0gMDsgLypfX1Vz
ZXJzcGFjZV9fIFRPRE8gU2hvdWxkIGl0IGJlIGluaXRpYWxpemVkIHRvIHplcm8/ICovCisKKy8q
IHVzZWQgaW4gdXNlcl9pbmNsdWRlL3VzZXJfYXRvbWljLmggaW4gb3JkZXIgdG8gbWFrZSB0aGUg
b3BlcmF0aW9ucworICogZGVmaW5lZCB0aGVyZSB0cnVseSBhdG9taWMKKyAqLwordXNlcmxhbmRf
bXV0ZXhfdCBhdG9taWNfbXR4OworCisvKiBJZiB0aGUgZW50cm9weSBkZXZpY2UgaXMgbm90IGxv
YWRlZCwgbWFrZSBhIHRva2VuIGVmZm9ydCB0bworICogcHJvdmlkZSBfc29tZV8ga2luZCBvZiBy
YW5kb21uZXNzLiBUaGlzIHNob3VsZCBvbmx5IGJlIHVzZWQKKyAqIGluc2lkZSBvdGhlciBSTkcn
cywgbGlrZSBhcmM0cmFuZG9tKDkpLgorICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19G
cmVlQlNEKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikKK3N0YXRpYyBpbnQKK3Jl
YWRfcmFuZG9tX3Bob255KHZvaWQgKmJ1ZiwgaW50IGNvdW50KQoreworCWlmIChjb3VudCA+PSAw
KSB7CisJCWFyYzRyYW5kb21fYnVmKGJ1ZiwgY291bnQpOworCX0KKwlyZXR1cm4gKGNvdW50KTsK
K30KKyNlbHNlCitzdGF0aWMgaW50CityZWFkX3JhbmRvbV9waG9ueSh2b2lkICpidWYsIGludCBj
b3VudCkKK3sKKwl1aW50MzJfdCByYW5kdmFsOworCWludCBzaXplLCBpOworCisJLyogc3JhbmRv
bSgpIGlzIGNhbGxlZCBpbiBrZXJuL2luaXRfbWFpbi5jOnByb2MwX3Bvc3QoKSAqLworCisJLyog
RmlsbCBidWZbXSB3aXRoIHJhbmRvbSg5KSBvdXRwdXQgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY291
bnQ7IGkrPSAoaW50KXNpemVvZih1aW50MzJfdCkpIHsKKwkJcmFuZHZhbCA9IHJhbmRvbSgpOwor
CQlzaXplID0gTUlOKGNvdW50IC0gaSwgKGludClzaXplb2YodWludDMyX3QpKTsKKwkJbWVtY3B5
KCYoKGNoYXIgKilidWYpW2ldLCAmcmFuZHZhbCwgKHNpemVfdClzaXplKTsKKwl9CisKKwlyZXR1
cm4gKGNvdW50KTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50ICgqcmVhZF9mdW5jKSh2b2lkICos
IGludCkgPSByZWFkX3JhbmRvbV9waG9ueTsKKworLyogVXNlcmxhbmQtdmlzaWJsZSB2ZXJzaW9u
IG9mIHJlYWRfcmFuZG9tICovCitpbnQKK3JlYWRfcmFuZG9tKHZvaWQgKmJ1ZiwgaW50IGNvdW50
KQoreworCXJldHVybiAoKCpyZWFkX2Z1bmMpKGJ1ZiwgY291bnQpKTsKK30KKwpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50LmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi5jMTFhZDJjNDFmZmQ1YjEwMzI0YjAwZjE5NjA0ZDJmMWQ5ZjQwM2Y0
IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfZW52aXJvbm1lbnQuaApAQCAtMCwwICsxLDExNyBA
QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJp
Z2h0IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0IChjKSAyMDExLTIw
MTIgSXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1
ZXhlbgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJ
UycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVVNFUl9FTlZJ
Uk9OTUVOVF9IXworI2RlZmluZSBfVVNFUl9FTlZJUk9OTUVOVF9IXworLyogX19Vc2Vyc3BhY2Vf
XyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWZkZWYgX19Vc2Vyc3BhY2Vfb3NfRnJl
ZUJTRAorI2lmbmRlZiBfU1lTX01VVEVYX0hfCisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjZW5k
aWYKKyNlbmRpZgorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaW5jbHVk
ZSAibmV0aW5ldC9zY3RwX29zX3VzZXJzcGFjZS5oIgorI2VuZGlmCisKKy8qIG1heHNvY2tldHMg
aXMgdXNlZCBpbiBTQ1RQX1pPTkVfSU5JVCBjYWxsLiBJdCByZWZlcnMgdG8KKyAqIGtlcm4uaXBj
Lm1heHNvY2tldHMga2VybmVsIGVudmlyb25tZW50IHZhcmlhYmxlLgorICovCitleHRlcm4gaW50
IG1heHNvY2tldHM7CisKKy8qIGludCBoejsgaXMgZGVjbGFyZWQgaW4gc3lzL2tlcm4vc3Vicl9w
YXJhbS5jIGFuZCByZWZlcnMgdG8ga2VybmVsIHRpbWVyIGZyZXF1ZW5jeS4KKyAqIFNlZSBodHRw
Oi8vaXZvcmFzLnNoYXJhbmV0Lm9yZy9mcmVlYnNkL3Ztd2FyZS5odG1sIGZvciBhZGRpdGlvbmFs
IGluZm8gYWJvdXQga2Vybi5oegorICogaHogaXMgaW5pdGlhbGl6ZWQgaW4gdm9pZCBpbml0X3Bh
cmFtMSh2b2lkKSBpbiB0aGF0IGZpbGUuCisgKi8KK2V4dGVybiBpbnQgaHo7CisKKworLyogVGhl
IGZvbGxvd2luZyB0d28gaW50cyBkZWZpbmUgYSByYW5nZSBvZiBhdmFpbGFibGUgZXBoZW1lcmFs
IHBvcnRzLiAqLworZXh0ZXJuIGludCBpcHBvcnRfZmlyc3RhdXRvLCBpcHBvcnRfbGFzdGF1dG87
CisKKy8qIG5tYmNsdXN0ZXJzIGlzIHVzZWQgaW4gc2N0cF91c3JyZXEuYyAoZS5nLiwgc2N0cF9p
bml0KS4gSW4gdGhlIEZyZWVCU0Qga2VybmVsLAorICogIHRoaXMgaXMgMTAyNCArIG1heHVzZXJz
ICogNjQuCisgKi8KK2V4dGVybiBpbnQgbm1iY2x1c3RlcnM7CisKKyNpZiAhZGVmaW5lZCAoX19V
c2Vyc3BhY2Vfb3NfV2luZG93cykKKyNkZWZpbmUgbWluKGEsYikgKChhKT4oYik/KGIpOihhKSkK
KyNkZWZpbmUgbWF4KGEsYikgKChhKT4oYik/KGEpOihiKSkKKyNlbmRpZgorCitleHRlcm4gaW50
IHJlYWRfcmFuZG9tKHZvaWQgKmJ1ZiwgaW50IGNvdW50KTsKKworLyogZXJybm8ncyBtYXkgZGlm
ZmVyIHBlciBPUy4gIGVycm5vLmggbm93IGluY2x1ZGVkIGluIHNjdHBfb3NfdXNlcnNwYWNlLmgg
Ki8KKy8qIFNvdXJjZTogL3Vzci9zcmMvc3lzL3N5cy9lcnJuby5oICovCisvKiAjZGVmaW5lCUVO
T1NQQwkJMjggKi8JCS8qIE5vIHNwYWNlIGxlZnQgb24gZGV2aWNlICovCisvKiAjZGVmaW5lCUVO
T0JVRlMJCTU1ICovCQkvKiBObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlICovCisvKiAjZGVmaW5l
CUVOT01FTQkJMTIgKi8JCS8qIENhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgKi8KKy8qICNkZWZpbmUJ
RUFDQ0VTCQkxMyAqLwkJLyogUGVybWlzc2lvbiBkZW5pZWQgKi8KKy8qICNkZWZpbmUJRUZBVUxU
CQkxNCAqLwkJLyogQmFkIGFkZHJlc3MgKi8KKy8qICNkZWZpbmUJRUhPU1RET1dOCTY0ICovCQkv
KiBIb3N0IGlzIGRvd24gKi8KKy8qICNkZWZpbmUJRUhPU1RVTlJFQUNICTY1ICovCQkvKiBObyBy
b3V0ZSB0byBob3N0ICovCisKKy8qIFNvdXJjZSBpcF9vdXRwdXQuYy4gZXh0ZXJuJ2QgaW4gaXBf
dmFyLmggKi8KK2V4dGVybiB1X3Nob3J0IGlwX2lkOworCisjaWYgZGVmaW5lZChfX1VzZXJzcGFj
ZV9vc19MaW51eCkKKyNkZWZpbmUgSVBWNl9WRVJTSU9OICAgICAgICAgICAgMHg2MAorI2VuZGlm
CisKKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRp
YyBpbmxpbmUgdm9pZAordGVybWluYXRlX25vbl9ncmFjZWZ1bCh2b2lkKSB7CisJYWJvcnQoKTsK
K30KKworI2RlZmluZSBwYW5pYyguLi4pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJU0NU
UF9QUklOVEYoIiVzKCk6ICIsIF9fRlVOQ1RJT05fXyk7XAorCQlTQ1RQX1BSSU5URihfX1ZBX0FS
R1NfXyk7ICAgICAgICAgICBcCisJCVNDVFBfUFJJTlRGKCJcbiIpOyAgICAgICAgICAgICAgICAg
IFwKKwkJdGVybWluYXRlX25vbl9ncmFjZWZ1bCgpOyAgICAgICAgICAgXAorfSB3aGlsZSAoMCkK
KworI2RlZmluZSBLQVNTRVJUKGNvbmQsIGFyZ3MpICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKwkJaWYgKCEoY29uZCkpIHsgICAgICAgXAorCQkJcGFuaWMgYXJn
cyA7IFwKKwkJfSAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisjZWxzZQorI2Rl
ZmluZSBLQVNTRVJUKGNvbmQsIGFyZ3MpCisjZW5kaWYKKworLyogbmVjZXNzYXJ5IGZvciBzY3Rw
X3BjYi5jICovCitleHRlcm4gaW50IGlwX2RlZnR0bDsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvdXNyc2N0cGxpYi91c2VyX2lucGNiLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJf
aW5wY2IuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi44
MWI1ZDIxMmQ3MDlmNGRkMjQ0ODliOGRmMjExNGFjNTU2OTk4ZGUzIDEwMDc1NQotLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL3VzZXJfaW5wY2IuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfaW5wY2IuaApAQCAtMCwwICsxLDM3OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIs
IDE5ODYsIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENh
bGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0
aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRv
cnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUg
UkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB
TUFHRS4KKyAqCisgKglAKCMpaW5fcGNiLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICogJEZy
ZWVCU0Q6IHNyYy9zeXMvbmV0aW5ldC9pbl9wY2IuaCx2IDEuMTAwLjIuMSAyMDA3LzEyLzA3IDA1
OjQ2OjA4IGttYWN5IEV4cCAkCisgKi8KKworI2lmbmRlZiBfVVNFUl9JTlBDQl9IXworI2RlZmlu
ZSBfVVNFUl9JTlBDQl9IXworCisjaW5jbHVkZSA8dXNlcl9yb3V0ZS5oPiAvKiB3YXMgPG5ldC9y
b3V0ZS5oPiAqLworCisjZGVmaW5lCWluNnBjYgkJaW5wY2IJLyogZm9yIEtBTUUgc3JjIHN5bmMg
b3ZlciBCU0QqJ3MgKi8KKyNkZWZpbmUJaW42cF9zcAkJaW5wX3NwCS8qIGZvciBLQU1FIHNyYyBz
eW5jIG92ZXIgQlNEKidzICovCitzdHJ1Y3QgaW5wY2Jwb2xpY3k7CisKKy8qCisgKiBTdHJ1Y3Qg
aW5wY2IgaXMgdGhlIG9tbW9uIHN0cnVjdHVyZSBwY2IgZm9yIHRoZSBJbnRlcm5ldCBQcm90b2Nv
bAorICogaW1wbGVtZW50YXRpb24uCisgKgorICogUG9pbnRlcnMgdG8gbG9jYWwgYW5kIGZvcmVp
Z24gaG9zdCB0YWJsZSBlbnRyaWVzLCBsb2NhbCBhbmQgZm9yZWlnbiBzb2NrZXQKKyAqIG51bWJl
cnMsIGFuZCBwb2ludGVycyB1cCAodG8gYSBzb2NrZXQgc3RydWN0dXJlKSBhbmQgZG93biAodG8g
YQorICogcHJvdG9jb2wtc3BlY2lmaWMgY29udHJvbCBibG9jaykgYXJlIHN0b3JlZCBoZXJlLgor
ICovCitMSVNUX0hFQUQoaW5wY2JoZWFkLCBpbnBjYik7CitMSVNUX0hFQUQoaW5wY2Jwb3J0aGVh
ZCwgaW5wY2Jwb3J0KTsKKworLyoKKyAqIFBDQiB3aXRoIEFGX0lORVQ2IG51bGwgYmluZCdlZCBs
YWRkciBjYW4gcmVjZWl2ZSBBRl9JTkVUIGlucHV0IHBhY2tldC4KKyAqIFNvLCBBRl9JTkVUNiBu
dWxsIGxhZGRyIGlzIGFsc28gdXNlZCBhcyBBRl9JTkVUIG51bGwgbGFkZHIsIGJ5IHV0aWxpemlu
ZworICogdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUuCisgKi8KK3N0cnVjdCBpbl9hZGRyXzRpbjYg
eworCXVfaW50MzJfdAlpYTQ2X3BhZDMyWzNdOworCXN0cnVjdAlpbl9hZGRyCWlhNDZfYWRkcjQ7
Cit9OworCisvKgorICogTk9URTogaXB2NiBhZGRycyBzaG91bGQgYmUgNjQtYml0IGFsaWduZWQs
IHBlciBSRkMgMjU1My4gIGluX2Nvbm5pbmZvIGhhcworICogc29tZSBleHRyYSBwYWRkaW5nIHRv
IGFjY29tcGxpc2ggdGhpcy4KKyAqLworc3RydWN0IGluX2VuZHBvaW50cyB7CisJdV9pbnQxNl90
CWllX2Zwb3J0OwkJLyogZm9yZWlnbiBwb3J0ICovCisJdV9pbnQxNl90CWllX2xwb3J0OwkJLyog
bG9jYWwgcG9ydCAqLworCS8qIHByb3RvY29sIGRlcGVuZGVudCBwYXJ0LCBsb2NhbCBhbmQgZm9y
ZWlnbiBhZGRyICovCisJdW5pb24geworCQkvKiBmb3JlaWduIGhvc3QgdGFibGUgZW50cnkgKi8K
KwkJc3RydWN0CWluX2FkZHJfNGluNiBpZTQ2X2ZvcmVpZ247CisJCXN0cnVjdAlpbjZfYWRkciBp
ZTZfZm9yZWlnbjsKKwl9IGllX2RlcGVuZGZhZGRyOworCXVuaW9uIHsKKwkJLyogbG9jYWwgaG9z
dCB0YWJsZSBlbnRyeSAqLworCQlzdHJ1Y3QJaW5fYWRkcl80aW42IGllNDZfbG9jYWw7CisJCXN0
cnVjdAlpbjZfYWRkciBpZTZfbG9jYWw7CisJfSBpZV9kZXBlbmRsYWRkcjsKKyNkZWZpbmUJaWVf
ZmFkZHIJaWVfZGVwZW5kZmFkZHIuaWU0Nl9mb3JlaWduLmlhNDZfYWRkcjQKKyNkZWZpbmUJaWVf
bGFkZHIJaWVfZGVwZW5kbGFkZHIuaWU0Nl9sb2NhbC5pYTQ2X2FkZHI0CisjZGVmaW5lCWllNl9m
YWRkcglpZV9kZXBlbmRmYWRkci5pZTZfZm9yZWlnbgorI2RlZmluZQlpZTZfbGFkZHIJaWVfZGVw
ZW5kbGFkZHIuaWU2X2xvY2FsCit9OworCisvKgorICogWFhYIFRoZSBkZWZpbmVzIGZvciBpbmNf
KiBhcmUgaGFja3MgYW5kIHNob3VsZCBiZSBjaGFuZ2VkIHRvIGRpcmVjdAorICogcmVmZXJlbmNl
cy4KKyAqLworc3RydWN0IGluX2Nvbm5pbmZvIHsKKwl1X2ludDhfdAlpbmNfZmxhZ3M7CisJdV9p
bnQ4X3QJaW5jX2xlbjsKKwl1X2ludDE2X3QJaW5jX3BhZDsJLyogWFhYIGFsaWdubWVudCBmb3Ig
aW5fZW5kcG9pbnRzICovCisJLyogcHJvdG9jb2wgZGVwZW5kZW50IHBhcnQgKi8KKwlzdHJ1Y3QJ
aW5fZW5kcG9pbnRzIGluY19pZTsKK307CisjZGVmaW5lIGluY19pc2lwdjYJaW5jX2ZsYWdzCS8q
IHRlbXAgY29tcGF0aWJpbGl0eSAqLworI2RlZmluZQlpbmNfZnBvcnQJaW5jX2llLmllX2Zwb3J0
CisjZGVmaW5lCWluY19scG9ydAlpbmNfaWUuaWVfbHBvcnQKKyNkZWZpbmUJaW5jX2ZhZGRyCWlu
Y19pZS5pZV9mYWRkcgorI2RlZmluZQlpbmNfbGFkZHIJaW5jX2llLmllX2xhZGRyCisjZGVmaW5l
CWluYzZfZmFkZHIJaW5jX2llLmllNl9mYWRkcgorI2RlZmluZQlpbmM2X2xhZGRyCWluY19pZS5p
ZTZfbGFkZHIKKworc3RydWN0CWljbXA2X2ZpbHRlcjsKKworc3RydWN0IGlucGNiIHsKKwlMSVNU
X0VOVFJZKGlucGNiKSBpbnBfaGFzaDsJLyogaGFzaCBsaXN0ICovCisJTElTVF9FTlRSWShpbnBj
YikgaW5wX2xpc3Q7CS8qIGxpc3QgZm9yIGFsbCBQQ0JzIG9mIHRoaXMgcHJvdG8gKi8KKwl2b2lk
CSppbnBfcHBjYjsJCS8qIHBvaW50ZXIgdG8gcGVyLXByb3RvY29sIHBjYiAqLworCXN0cnVjdAlp
bnBjYmluZm8gKmlucF9wY2JpbmZvOwkvKiBQQ0IgbGlzdCBpbmZvICovCisJc3RydWN0CXNvY2tl
dCAqaW5wX3NvY2tldDsJLyogYmFjayBwb2ludGVyIHRvIHNvY2tldCAqLworCisJdV9pbnQzMl90
CWlucF9mbG93OworCWludAlpbnBfZmxhZ3M7CQkvKiBnZW5lcmljIElQL2RhdGFncmFtIGZsYWdz
ICovCisKKwl1X2NoYXIJaW5wX3ZmbGFnOwkJLyogSVAgdmVyc2lvbiBmbGFnICh2NC92NikgKi8K
KyNkZWZpbmUJSU5QX0lQVjQJMHgxCisjZGVmaW5lCUlOUF9JUFY2CTB4MgorI2RlZmluZQlJTlBf
SVBWNlBST1RPCTB4NAkJLyogb3BlbmVkIHVuZGVyIElQdjYgcHJvdG9jb2wgKi8KKyNkZWZpbmUJ
SU5QX1RJTUVXQUlUCTB4OAkJLyogLi4gcHJvYmFibHkgZG9lc24ndCBnbyBoZXJlICovCisjZGVm
aW5lCUlOUF9PTkVTQkNBU1QJMHgxMAkJLyogc2VuZCBhbGwtb25lcyBicm9hZGNhc3QgKi8KKyNk
ZWZpbmUJSU5QX0RST1BQRUQJMHgyMAkJLyogcHJvdG9jb2wgZHJvcCBmbGFnICovCisjZGVmaW5l
CUlOUF9TT0NLUkVGCTB4NDAJCS8qIHN0cm9uZyBzb2NrZXQgcmVmZXJlbmNlICovCisjZGVmaW5l
IElOUF9DT05OICAgICAgICAweDgwCisJdV9jaGFyCWlucF9pcF90dGw7CQkvKiB0aW1lIHRvIGxp
dmUgcHJvdG8gKi8KKwl1X2NoYXIJaW5wX2lwX3A7CQkvKiBwcm90b2NvbCBwcm90byAqLworCXVf
Y2hhcglpbnBfaXBfbWludHRsOwkJLyogbWluaW11bSBUVEwgb3IgZHJvcCAqLworCXVpbnQzMl90
IGlucF9pc3BhcmUxOwkJLyogY29ubmVjdGlvbiBpZCAvIHF1ZXVlIGlkICovCisJdm9pZAkqaW5w
X3BzcGFyZVsyXTsJCS8qIHJ0ZW50cnkgLyBnZW5lcmFsIHVzZSAqLworCisJLyogTG9jYWwgYW5k
IGZvcmVpZ24gcG9ydHMsIGxvY2FsIGFuZCBmb3JlaWduIGFkZHIuICovCisJc3RydWN0CWluX2Nv
bm5pbmZvIGlucF9pbmM7CisKKwkJCQkJLyogbGlzdCBmb3IgdGhpcyBQQ0IncyBsb2NhbCBwb3J0
ICovCisJc3RydWN0CWxhYmVsICppbnBfbGFiZWw7CS8qIE1BQyBsYWJlbCAqLworCXN0cnVjdAlp
bnBjYnBvbGljeSAqaW5wX3NwOyAgICAvKiBmb3IgSVBTRUMgKi8KKworCS8qIFByb3RvY29sLWRl
cGVuZGVudCBwYXJ0OyBvcHRpb25zLiAqLworCXN0cnVjdCB7CisJCXVfY2hhcglpbnA0X2lwX3Rv
czsJCS8qIHR5cGUgb2Ygc2VydmljZSBwcm90byAqLworCQlzdHJ1Y3QJbWJ1ZiAqaW5wNF9vcHRp
b25zOwkvKiBJUCBvcHRpb25zICovCisJCXN0cnVjdAlpcF9tb3B0aW9ucyAqaW5wNF9tb3B0aW9u
czsgLyogSVAgbXVsdGljYXN0IG9wdGlvbnMgKi8KKwl9IGlucF9kZXBlbmQ0OworI2RlZmluZQlp
bnBfZnBvcnQJaW5wX2luYy5pbmNfZnBvcnQKKyNkZWZpbmUJaW5wX2xwb3J0CWlucF9pbmMuaW5j
X2xwb3J0CisjZGVmaW5lCWlucF9mYWRkcglpbnBfaW5jLmluY19mYWRkcgorI2RlZmluZQlpbnBf
bGFkZHIJaW5wX2luYy5pbmNfbGFkZHIKKyNkZWZpbmUJaW5wX2lwX3RvcwlpbnBfZGVwZW5kNC5p
bnA0X2lwX3RvcworI2RlZmluZQlpbnBfb3B0aW9ucwlpbnBfZGVwZW5kNC5pbnA0X29wdGlvbnMK
KyNkZWZpbmUJaW5wX21vcHRpb25zCWlucF9kZXBlbmQ0LmlucDRfbW9wdGlvbnMKKwlzdHJ1Y3Qg
eworCQkvKiBJUCBvcHRpb25zICovCisJCXN0cnVjdAltYnVmICppbnA2X29wdGlvbnM7CisJCS8q
IElQNiBvcHRpb25zIGZvciBvdXRnb2luZyBwYWNrZXRzICovCisJCXN0cnVjdAlpcDZfcGt0b3B0
cyAqaW5wNl9vdXRwdXRvcHRzOworCQkvKiBJUCBtdWx0aWNhc3Qgb3B0aW9ucyAqLworI2lmIDAK
KwkJc3RydWN0CWlwNl9tb3B0aW9ucyAqaW5wNl9tb3B0aW9uczsKKyNlbmRpZgorCQkvKiBJQ01Q
djYgY29kZSB0eXBlIGZpbHRlciAqLworCQlzdHJ1Y3QJaWNtcDZfZmlsdGVyICppbnA2X2ljbXA2
ZmlsdDsKKwkJLyogSVBWNl9DSEVDS1NVTSBzZXRzb2Nrb3B0ICovCisJCWludAlpbnA2X2Nrc3Vt
OworCQlzaG9ydAlpbnA2X2hvcHM7CisJfSBpbnBfZGVwZW5kNjsKKwlMSVNUX0VOVFJZKGlucGNi
KSBpbnBfcG9ydGxpc3Q7CisJc3RydWN0CWlucGNicG9ydCAqaW5wX3BoZDsJLyogaGVhZCBvZiB0
aGlzIGxpc3QgKi8KKyNkZWZpbmUgaW5wX3plcm9fc2l6ZSBvZmZzZXRvZihzdHJ1Y3QgaW5wY2Is
IGlucF9nZW5jbnQpCisJc3RydWN0IG10eAlpbnBfbXR4OworCisjZGVmaW5lCWluNnBfZmFkZHIJ
aW5wX2luYy5pbmM2X2ZhZGRyCisjZGVmaW5lCWluNnBfbGFkZHIJaW5wX2luYy5pbmM2X2xhZGRy
CisjZGVmaW5lCWluNnBfaG9wcwlpbnBfZGVwZW5kNi5pbnA2X2hvcHMJLyogZGVmYXVsdCBob3Ag
bGltaXQgKi8KKyNkZWZpbmUJaW42cF9pcDZfbnh0CWlucF9pcF9wCisjZGVmaW5lCWluNnBfZmxv
d2luZm8JaW5wX2Zsb3cKKyNkZWZpbmUJaW42cF92ZmxhZwlpbnBfdmZsYWcKKyNkZWZpbmUJaW42
cF9vcHRpb25zCWlucF9kZXBlbmQ2LmlucDZfb3B0aW9ucworI2RlZmluZQlpbjZwX291dHB1dG9w
dHMJaW5wX2RlcGVuZDYuaW5wNl9vdXRwdXRvcHRzCisjaWYgMAorI2RlZmluZQlpbjZwX21vcHRp
b25zCWlucF9kZXBlbmQ2LmlucDZfbW9wdGlvbnMKKyNlbmRpZgorI2RlZmluZQlpbjZwX2ljbXA2
ZmlsdAlpbnBfZGVwZW5kNi5pbnA2X2ljbXA2ZmlsdAorI2RlZmluZQlpbjZwX2Nrc3VtCWlucF9k
ZXBlbmQ2LmlucDZfY2tzdW0KKyNkZWZpbmUJaW42cF9mbGFncwlpbnBfZmxhZ3MgIC8qIGZvciBL
QU1FIHNyYyBzeW5jIG92ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfc29ja2V0CWlucF9zb2Nr
ZXQgIC8qIGZvciBLQU1FIHNyYyBzeW5jIG92ZXIgQlNEKidzICovCisjZGVmaW5lCWluNnBfbHBv
cnQJaW5wX2xwb3J0ICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLworI2RlZmlu
ZQlpbjZwX2Zwb3J0CWlucF9mcG9ydCAgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3Mg
Ki8KKyNkZWZpbmUJaW42cF9wcGNiCWlucF9wcGNiICAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVy
IEJTRConcyAqLworfTsKKy8qCisgKiBUaGUgcmFuZ2Ugb2YgdGhlIGdlbmVyYXRpb24gY291bnQs
IGFzIHVzZWQgaW4gdGhpcyBpbXBsZW1lbnRhdGlvbiwgaXMgOWUxOS4KKyAqIFdlIHdvdWxkIGhh
dmUgdG8gY3JlYXRlIDMwMCBiaWxsaW9uIGNvbm5lY3Rpb25zIHBlciBzZWNvbmQgZm9yIHRoaXMg
bnVtYmVyCisgKiB0byByb2xsIG92ZXIgaW4gYSB5ZWFyLiAgVGhpcyBzZWVtcyBzdWZmaWNpZW50
bHkgdW5saWtlbHkgdGhhdCB3ZSBzaW1wbHkKKyAqIGRvbid0IGNvbmNlcm4gb3Vyc2VsdmVzIHdp
dGggdGhhdCBwb3NzaWJpbGl0eS4KKyAqLworCitzdHJ1Y3QgaW5wY2Jwb3J0IHsKKwlMSVNUX0VO
VFJZKGlucGNicG9ydCkgcGhkX2hhc2g7CisJc3RydWN0IGlucGNiaGVhZCBwaGRfcGNibGlzdDsK
Kwl1X3Nob3J0IHBoZF9wb3J0OworfTsKKworLyoKKyAqIEdsb2JhbCBkYXRhIHN0cnVjdHVyZSBm
b3IgZWFjaCBoaWdoLWxldmVsIHByb3RvY29sIChVRFAsIFRDUCwgLi4uKSBpbiBib3RoCisgKiBJ
UHY0IGFuZCBJUHY2LiAgSG9sZHMgaW5wY2IgbGlzdHMgYW5kIGluZm9ybWF0aW9uIGZvciBtYW5h
Z2luZyB0aGVtLgorICovCitzdHJ1Y3QgaW5wY2JpbmZvIHsKKwkvKgorCSAqIEdsb2JhbCBsaXN0
IG9mIGlucGNicyBvbiB0aGUgcHJvdG9jb2wuCisJICovCisJc3RydWN0IGlucGNiaGVhZAkqaXBp
X2xpc3RoZWFkOworCXVfaW50CQkJIGlwaV9jb3VudDsKKworCS8qCisJICogR2xvYmFsIGhhc2gg
b2YgaW5wY2JzLCBoYXNoZWQgYnkgbG9jYWwgYW5kIGZvcmVpZ24gYWRkcmVzc2VzIGFuZAorCSAq
IHBvcnQgbnVtYmVycy4KKwkgKi8KKwlzdHJ1Y3QgaW5wY2JoZWFkCSppcGlfaGFzaGJhc2U7CisJ
dV9sb25nCQkJIGlwaV9oYXNobWFzazsKKworCS8qCisJICogR2xvYmFsIGhhc2ggb2YgaW5wY2Jz
LCBoYXNoZWQgYnkgb25seSBsb2NhbCBwb3J0IG51bWJlci4KKwkgKi8KKwlzdHJ1Y3QgaW5wY2Jw
b3J0aGVhZAkqaXBpX3BvcnRoYXNoYmFzZTsKKwl1X2xvbmcJCQkgaXBpX3BvcnRoYXNobWFzazsK
KworCS8qCisJICogRmllbGRzIGFzc29jaWF0ZWQgd2l0aCBwb3J0IGxvb2t1cCBhbmQgYWxsb2Nh
dGlvbi4KKwkgKi8KKwl1X3Nob3J0CQkJIGlwaV9sYXN0cG9ydDsKKwl1X3Nob3J0CQkJIGlwaV9s
YXN0bG93OworCXVfc2hvcnQJCQkgaXBpX2xhc3RoaTsKKworCS8qCisJICogVU1BIHpvbmUgZnJv
bSB3aGljaCBpbnBjYnMgYXJlIGFsbG9jYXRlZCBmb3IgdGhpcyBwcm90b2NvbC4KKwkgKi8KKwlz
dHJ1Y3QJdW1hX3pvbmUJKmlwaV96b25lOworCisJLyoKKwkgKiBHZW5lcmF0aW9uIGNvdW50LS1p
bmNyZW1lbnRlZCBlYWNoIHRpbWUgYSBjb25uZWN0aW9uIGlzIGFsbG9jYXRlZAorCSAqIG9yIGZy
ZWVkLgorCSAqLworCXN0cnVjdCBtdHgJCSBpcGlfbXR4OworCisJLyoKKwkgKiB2aW1hZ2UgMQor
CSAqIGdlbmVyYWwgdXNlIDEKKwkgKi8KKwl2b2lkIAkJCSppcGlfcHNwYXJlWzJdOworfTsKKwor
I2RlZmluZSBJTlBfTE9DS19JTklUKGlucCwgZCwgdCkgXAorCW10eF9pbml0KCYoaW5wKS0+aW5w
X210eCwgKGQpLCAodCksIE1UWF9ERUYgfCBNVFhfUkVDVVJTRSB8IE1UWF9EVVBPSykKKyNkZWZp
bmUgSU5QX0xPQ0tfREVTVFJPWShpbnApCW10eF9kZXN0cm95KCYoaW5wKS0+aW5wX210eCkKKyNk
ZWZpbmUgSU5QX0xPQ0soaW5wKQkJbXR4X2xvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJ
TlBfVU5MT0NLKGlucCkJCW10eF91bmxvY2soJihpbnApLT5pbnBfbXR4KQorI2RlZmluZSBJTlBf
TE9DS19BU1NFUlQoaW5wKQltdHhfYXNzZXJ0KCYoaW5wKS0+aW5wX210eCwgTUFfT1dORUQpCisj
ZGVmaW5lCUlOUF9VTkxPQ0tfQVNTRVJUKGlucCkJbXR4X2Fzc2VydCgmKGlucCktPmlucF9tdHgs
IE1BX05PVE9XTkVEKQorCisjZGVmaW5lIElOUF9JTkZPX0xPQ0tfSU5JVChpcGksIGQpIFwKKwlt
dHhfaW5pdCgmKGlwaSktPmlwaV9tdHgsIChkKSwgTlVMTCwgTVRYX0RFRiB8IE1UWF9SRUNVUlNF
KQorI2RlZmluZSBJTlBfSU5GT19MT0NLX0RFU1RST1koaXBpKSAgbXR4X2Rlc3Ryb3koJihpcGkp
LT5pcGlfbXR4KQorI2RlZmluZSBJTlBfSU5GT19STE9DSyhpcGkpCW10eF9sb2NrKCYoaXBpKS0+
aXBpX210eCkKKyNkZWZpbmUgSU5QX0lORk9fV0xPQ0soaXBpKQltdHhfbG9jaygmKGlwaSktPmlw
aV9tdHgpCisjZGVmaW5lIElOUF9JTkZPX1JVTkxPQ0soaXBpKQltdHhfdW5sb2NrKCYoaXBpKS0+
aXBpX210eCkKKyNkZWZpbmUgSU5QX0lORk9fV1VOTE9DSyhpcGkpCW10eF91bmxvY2soJihpcGkp
LT5pcGlfbXR4KQorI2RlZmluZSBJTlBfSU5GT19STE9DS19BU1NFUlQoaXBpKQltdHhfYXNzZXJ0
KCYoaXBpKS0+aXBpX210eCwgTUFfT1dORUQpCisjZGVmaW5lIElOUF9JTkZPX1dMT0NLX0FTU0VS
VChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9PV05FRCkKKyNkZWZpbmUgSU5Q
X0lORk9fVU5MT0NLX0FTU0VSVChpcGkpCW10eF9hc3NlcnQoJihpcGkpLT5pcGlfbXR4LCBNQV9O
T1RPV05FRCkKKworI2RlZmluZSBJTlBfUENCSEFTSChmYWRkciwgbHBvcnQsIGZwb3J0LCBtYXNr
KSBcCisJKCgoZmFkZHIpIF4gKChmYWRkcikgPj4gMTYpIF4gbnRvaHMoKGxwb3J0KSBeIChmcG9y
dCkpKSAmIChtYXNrKSkKKyNkZWZpbmUgSU5QX1BDQlBPUlRIQVNIKGxwb3J0LCBtYXNrKSBcCisJ
KG50b2hzKChscG9ydCkpICYgKG1hc2spKQorCisvKiBmbGFncyBpbiBpbnBfZmxhZ3M6ICovCisj
ZGVmaW5lCUlOUF9SRUNWT1BUUwkJMHgwMQkvKiByZWNlaXZlIGluY29taW5nIElQIG9wdGlvbnMg
Ki8KKyNkZWZpbmUJSU5QX1JFQ1ZSRVRPUFRTCQkweDAyCS8qIHJlY2VpdmUgSVAgb3B0aW9ucyBm
b3IgcmVwbHkgKi8KKyNkZWZpbmUJSU5QX1JFQ1ZEU1RBRERSCQkweDA0CS8qIHJlY2VpdmUgSVAg
ZHN0IGFkZHJlc3MgKi8KKyNkZWZpbmUJSU5QX0hEUklOQ0wJCTB4MDgJLyogdXNlciBzdXBwbGll
cyBlbnRpcmUgSVAgaGVhZGVyICovCisjZGVmaW5lCUlOUF9ISUdIUE9SVAkJMHgxMAkvKiB1c2Vy
IHdhbnRzICJoaWdoIiBwb3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0xPV1BPUlQJCTB4MjAJ
LyogdXNlciB3YW50cyAibG93IiBwb3J0IGJpbmRpbmcgKi8KKyNkZWZpbmUJSU5QX0FOT05QT1JU
CQkweDQwCS8qIHBvcnQgY2hvc2VuIGZvciB1c2VyICovCisjZGVmaW5lCUlOUF9SRUNWSUYJCTB4
ODAJLyogcmVjZWl2ZSBpbmNvbWluZyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUJSU5QX01UVURJU0MJ
CTB4MTAwCS8qIHVzZXIgY2FuIGRvIE1UVSBkaXNjb3ZlcnkgKi8KKyNkZWZpbmUJSU5QX0ZBSVRI
CQkweDIwMAkvKiBhY2NlcHQgRkFJVEgnZWQgY29ubmVjdGlvbnMgKi8KKyNkZWZpbmUJSU5QX1JF
Q1ZUVEwJCTB4NDAwCS8qIHJlY2VpdmUgaW5jb21pbmcgSVAgVFRMICovCisjZGVmaW5lCUlOUF9E
T05URlJBRwkJMHg4MDAJLyogZG9uJ3QgZnJhZ21lbnQgcGFja2V0ICovCisKKyNkZWZpbmUgSU42
UF9JUFY2X1Y2T05MWQkweDAwODAwMCAvKiByZXN0cmljdCBBRl9JTkVUNiBzb2NrZXQgZm9yIHY2
ICovCisKKyNkZWZpbmUJSU42UF9QS1RJTkZPCQkweDAxMDAwMCAvKiByZWNlaXZlIElQNiBkc3Qg
YW5kIEkvRiAqLworI2RlZmluZQlJTjZQX0hPUExJTUlUCQkweDAyMDAwMCAvKiByZWNlaXZlIGhv
cGxpbWl0ICovCisjZGVmaW5lCUlONlBfSE9QT1BUUwkJMHgwNDAwMDAgLyogcmVjZWl2ZSBob3At
YnktaG9wIG9wdGlvbnMgKi8KKyNkZWZpbmUJSU42UF9EU1RPUFRTCQkweDA4MDAwMCAvKiByZWNl
aXZlIGRzdCBvcHRpb25zIGFmdGVyIHJ0aGRyICovCisjZGVmaW5lCUlONlBfUlRIRFIJCTB4MTAw
MDAwIC8qIHJlY2VpdmUgcm91dGluZyBoZWFkZXIgKi8KKyNkZWZpbmUJSU42UF9SVEhEUkRTVE9Q
VFMJMHgyMDAwMDAgLyogcmVjZWl2ZSBkc3RvcHRpb25zIGJlZm9yZSBydGhkciAqLworI2RlZmlu
ZQlJTjZQX1RDTEFTUwkJMHg0MDAwMDAgLyogcmVjZWl2ZSB0cmFmZmljIGNsYXNzIHZhbHVlICov
CisjZGVmaW5lCUlONlBfQVVUT0ZMT1dMQUJFTAkweDgwMDAwMCAvKiBhdHRhY2ggZmxvd2xhYmVs
IGF1dG9tYXRpY2FsbHkgKi8KKyNkZWZpbmUJSU42UF9SRkMyMjkyCQkweDQwMDAwMDAwIC8qIHVz
ZWQgUkZDMjI5MiBBUEkgb24gdGhlIHNvY2tldCAqLworI2RlZmluZQlJTjZQX01UVQkJMHg4MDAw
MDAwMCAvKiByZWNlaXZlIHBhdGggTVRVICovCisKKyNkZWZpbmUJSU5QX0NPTlRST0xPUFRTCQko
SU5QX1JFQ1ZPUFRTfElOUF9SRUNWUkVUT1BUU3xJTlBfUkVDVkRTVEFERFJ8XAorCQkJCSBJTlBf
UkVDVklGfElOUF9SRUNWVFRMfFwKKwkJCQkgSU42UF9QS1RJTkZPfElONlBfSE9QTElNSVR8SU42
UF9IT1BPUFRTfFwKKwkJCQkgSU42UF9EU1RPUFRTfElONlBfUlRIRFJ8SU42UF9SVEhEUkRTVE9Q
VFN8XAorCQkJCSBJTjZQX1RDTEFTU3xJTjZQX0FVVE9GTE9XTEFCRUx8SU42UF9SRkMyMjkyfFwK
KwkJCQkgSU42UF9NVFUpCisjZGVmaW5lCUlOUF9VTk1BUFBBQkxFT1BUUwkoSU42UF9IT1BPUFRT
fElONlBfRFNUT1BUU3xJTjZQX1JUSERSfFwKKwkJCQkgSU42UF9UQ0xBU1N8SU42UF9BVVRPRkxP
V0xBQkVMKQorCisgLyogZm9yIEtBTUUgc3JjIHN5bmMgb3ZlciBCU0QqJ3MgKi8KKyNkZWZpbmUJ
SU42UF9ISUdIUE9SVAkJSU5QX0hJR0hQT1JUCisjZGVmaW5lCUlONlBfTE9XUE9SVAkJSU5QX0xP
V1BPUlQKKyNkZWZpbmUJSU42UF9BTk9OUE9SVAkJSU5QX0FOT05QT1JUCisjZGVmaW5lCUlONlBf
UkVDVklGCQlJTlBfUkVDVklGCisjZGVmaW5lCUlONlBfTVRVRElTQwkJSU5QX01UVURJU0MKKyNk
ZWZpbmUJSU42UF9GQUlUSAkJSU5QX0ZBSVRICisjZGVmaW5lCUlONlBfQ09OVFJPTE9QVFMgSU5Q
X0NPTlRST0xPUFRTCisJLyoKKwkgKiBzb2NrZXQgQUYgdmVyc2lvbiBpcyB7bmV3ZXIgdGhhbixv
ciBpbmNsdWRlfQorCSAqIGFjdHVhbCBkYXRhZ3JhbSBBRiB2ZXJzaW9uCisJICovCisKKyNkZWZp
bmUJSU5QTE9PS1VQX1dJTERDQVJECTEKKyNkZWZpbmUJc290b2lucGNiKHNvKQkoKHN0cnVjdCBp
bnBjYiAqKShzbyktPnNvX3BjYikKKyNkZWZpbmUJc290b2luNnBjYihzbykJc290b2lucGNiKHNv
KSAvKiBmb3IgS0FNRSBzcmMgc3luYyBvdmVyIEJTRConcyAqLworCisjZGVmaW5lCUlOUF9TT0NL
QUYoc28pIHNvLT5zb19wcm90by0+cHJfZG9tYWluLT5kb21fZmFtaWx5CisKKyNkZWZpbmUJSU5Q
X0NIRUNLX1NPQ0tBRihzbywgYWYpCShJTlBfU09DS0FGKHNvKSA9PSBhZikKKworLyogI2lmZGVm
IF9LRVJORUwgKi8KK2V4dGVybiBpbnQJaXBwb3J0X3Jlc2VydmVkaGlnaDsKK2V4dGVybiBpbnQJ
aXBwb3J0X3Jlc2VydmVkbG93OworZXh0ZXJuIGludAlpcHBvcnRfbG93Zmlyc3RhdXRvOworZXh0
ZXJuIGludAlpcHBvcnRfbG93bGFzdGF1dG87CitleHRlcm4gaW50CWlwcG9ydF9maXJzdGF1dG87
CitleHRlcm4gaW50CWlwcG9ydF9sYXN0YXV0bzsKK2V4dGVybiBpbnQJaXBwb3J0X2hpZmlyc3Rh
dXRvOworZXh0ZXJuIGludAlpcHBvcnRfaGlsYXN0YXV0bzsKK2V4dGVybiBzdHJ1Y3QgY2FsbG91
dCBpcHBvcnRfdGlja19jYWxsb3V0OworCit2b2lkCWluX3BjYnB1cmdlaWYwKHN0cnVjdCBpbnBj
YmluZm8gKiwgc3RydWN0IGlmbmV0ICopOworaW50CWluX3BjYmFsbG9jKHN0cnVjdCBzb2NrZXQg
Kiwgc3RydWN0IGlucGNiaW5mbyAqKTsKK2ludAlpbl9wY2JiaW5kKHN0cnVjdCBpbnBjYiAqLCBz
dHJ1Y3Qgc29ja2FkZHIgKiwgc3RydWN0IHVjcmVkICopOworaW50CWluX3BjYmNvbm5lY3Qoc3Ry
dWN0IGlucGNiICosIHN0cnVjdCBzb2NrYWRkciAqLCBzdHJ1Y3QgdWNyZWQgKik7Cit2b2lkCWlu
X3BjYmRldGFjaChzdHJ1Y3QgaW5wY2IgKik7Cit2b2lkCWluX3BjYmRpc2Nvbm5lY3Qoc3RydWN0
IGlucGNiICopOwordm9pZAlpbl9wY2Jkcm9wKHN0cnVjdCBpbnBjYiAqKTsKK3ZvaWQJaW5fcGNi
ZnJlZShzdHJ1Y3QgaW5wY2IgKik7CitpbnQJaW5fcGNiaW5zaGFzaChzdHJ1Y3QgaW5wY2IgKik7
CitzdHJ1Y3QgaW5wY2IgKgorCWluX3BjYmxvb2t1cF9sb2NhbChzdHJ1Y3QgaW5wY2JpbmZvICos
CisJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50KTsKK3N0cnVjdCBpbnBjYiAqCisJaW5f
cGNibG9va3VwX2hhc2goc3RydWN0IGlucGNiaW5mbyAqLCBzdHJ1Y3QgaW5fYWRkciwgdV9pbnQs
CisJICAgIHN0cnVjdCBpbl9hZGRyLCB1X2ludCwgaW50LCBzdHJ1Y3QgaWZuZXQgKik7Cit2b2lk
CWluX3BjYm5vdGlmeWFsbChzdHJ1Y3QgaW5wY2JpbmZvICpwY2JpbmZvLCBzdHJ1Y3QgaW5fYWRk
ciwKKwkgICAgaW50LCBzdHJ1Y3QgaW5wY2IgKigqKShzdHJ1Y3QgaW5wY2IgKiwgaW50KSk7Cit2
b2lkCWluX3BjYnJlaGFzaChzdHJ1Y3QgaW5wY2IgKik7Cit2b2lkCWluX3BjYnNldHNvbGFiZWwo
c3RydWN0IHNvY2tldCAqc28pOworaW50CWluX2dldHBlZXJhZGRyKHN0cnVjdCBzb2NrZXQgKnNv
LCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOworaW50CWluX2dldHNvY2thZGRyKHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipuYW0pOwordm9pZAlpbl9wY2Jzb3NldGxhYmVsKHN0
cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJaW5fcGNicmVtbGlzdHMoc3RydWN0IGlucGNiICppbnAp
Owordm9pZAlpcHBvcnRfdGljayh2b2lkICp4dHApOworCisvKgorICogRGVidWdnaW5nIHJvdXRp
bmVzIGNvbXBpbGVkIGluIHdoZW4gRERCIGlzIHByZXNlbnQuCisgKi8KK3ZvaWQJZGJfcHJpbnRf
aW5wY2Ioc3RydWN0IGlucGNiICppbnAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBpbmRlbnQpOwor
CisvKiAjZW5kaWYgIF9LRVJORUwgKi8KKworI2VuZGlmIC8qICFfTkVUSU5FVF9JTl9QQ0JfSF8g
Ki8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRf
cGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmggYi9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi91c3JzY3RwbGliL3VzZXJfaXA2X3Zhci5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0Yjhi
MjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmY1ZTRhNjBlNGYyN2M1NmU2NmFiMTM5M2VjMGE2ODFjZWI3
OTFlYTIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9pcDZfdmFyLmgKKysr
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwNl92YXIuaApAQCAtMCwwICsxLDEyNiBAQAor
LyotCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJv
amVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwor
ICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQg
ZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9K
RUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdF
LgorICoKKyAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqICAg
ICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2
ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3
YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklC
VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisj
aWZuZGVmIF9VU0VSX0lQNl9WQVJfSF8KKyNkZWZpbmUgX1VTRVJfSVA2X1ZBUl9IXworCisjaWYg
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorc3RydWN0IGlwNl9oZHIgeworCXVuaW9u
IHsKKwkJc3RydWN0IGlwNl9oZHJjdGwgeworCQkJdV9pbnQzMl90IGlwNl91bjFfZmxvdzsJLyog
MjAgYml0cyBvZiBmbG93LUlEICovCisJCQl1X2ludDE2X3QgaXA2X3VuMV9wbGVuOwkvKiBwYXls
b2FkIGxlbmd0aCAqLworCQkJdV9pbnQ4X3QgIGlwNl91bjFfbnh0OwkvKiBuZXh0IGhlYWRlciAq
LworCQkJdV9pbnQ4X3QgIGlwNl91bjFfaGxpbTsJLyogaG9wIGxpbWl0ICovCisJCX0gaXA2X3Vu
MTsKKwkJdV9pbnQ4X3QgaXA2X3VuMl92ZmM7CS8qIDQgYml0cyB2ZXJzaW9uLCB0b3AgNCBiaXRz
IGNsYXNzICovCisJfSBpcDZfY3RsdW47CisJc3RydWN0IGluNl9hZGRyIGlwNl9zcmM7CS8qIHNv
dXJjZSBhZGRyZXNzICovCisJc3RydWN0IGluNl9hZGRyIGlwNl9kc3Q7CS8qIGRlc3RpbmF0aW9u
IGFkZHJlc3MgKi8KK307CisjZGVmaW5lIGlwNl92ZmMJCWlwNl9jdGx1bi5pcDZfdW4yX3ZmYwor
I2RlZmluZSBpcDZfZmxvdwlpcDZfY3RsdW4uaXA2X3VuMS5pcDZfdW4xX2Zsb3cKKyNkZWZpbmUg
aXA2X3BsZW4JaXA2X2N0bHVuLmlwNl91bjEuaXA2X3VuMV9wbGVuCisjZGVmaW5lIGlwNl9ueHQJ
CWlwNl9jdGx1bi5pcDZfdW4xLmlwNl91bjFfbnh0CisjZGVmaW5lIGlwNl9obGltCWlwNl9jdGx1
bi5pcDZfdW4xLmlwNl91bjFfaGxpbQorI2RlZmluZSBpcDZfaG9wcwlpcDZfY3RsdW4uaXA2X3Vu
MS5pcDZfdW4xX2hsaW0KKworI2RlZmluZSBJUFY2X1ZFUlNJT04JCTB4NjAKKyNlbmRpZgorCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2RlZmluZSBzNl9hZGRyMTYgdS5X
b3JkCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX0xpbnV4KQorI2RlZmluZSBzNl9hZGRyOCAgX191Nl9hZGRy
Ll9fdTZfYWRkcjgKKyNkZWZpbmUgczZfYWRkcjE2IF9fdTZfYWRkci5fX3U2X2FkZHIxNgorI2Rl
ZmluZSBzNl9hZGRyMzIgX191Nl9hZGRyLl9fdTZfYWRkcjMyCisjZW5kaWYKKyNlbmRpZgorCisj
aWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfT3BlbkJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KQorc3Ry
dWN0IHJvdXRlX2luNiB7CisJc3RydWN0CXJ0ZW50cnkgKnJvX3J0OworCXN0cnVjdAlsbGVudHJ5
ICpyb19sbGU7CisJc3RydWN0CWluNl9hZGRyICpyb19pYTY7CisJaW50CQlyb19mbGFnczsKKwlz
dHJ1Y3QJc29ja2FkZHJfaW42IHJvX2RzdDsKK307CisjZW5kaWYKKyNkZWZpbmUgSVA2X0VYVEhE
Ul9HRVQodmFsLCB0eXAsIG0sIG9mZiwgbGVuKSBcCitkbyB7CQkJCQkJCQkJXAorCXN0cnVjdCBt
YnVmICp0OwkJCQkJCQlcCisJaW50IHRtcDsJCQkJCQkJXAorCWlmICgobSktPm1fbGVuID49IChv
ZmYpICsgKGxlbikpCQkJCVwKKwkJKHZhbCkgPSAodHlwKShtdG9kKChtKSwgY2FkZHJfdCkgKyAo
b2ZmKSk7CQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCXQgPSBtX3B1bGxkb3duKChtKSwgKG9mZiks
IChsZW4pLCAmdG1wKTsJCVwKKwkJaWYgKHQpIHsJCQkJCQlcCisJCQlLQVNTRVJUKHQtPm1fbGVu
ID49IHRtcCArIChsZW4pLAkJXAorCQkJICAgICAgICAoIm1fcHVsbGRvd24gbWFsZnVuY3Rpb24i
KSk7CQlcCisJCQkodmFsKSA9ICh0eXApKG10b2QodCwgY2FkZHJfdCkgKyB0bXApOwkJXAorCQl9
IGVsc2UgewkJCQkJCVwKKwkJCSh2YWwpID0gKHR5cClOVUxMOwkJCQlcCisJCQkobSkgPSBOVUxM
OwkJCQkJXAorCQl9CQkJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZW5kaWYg
LyogIV9VU0VSX0lQNl9WQVJfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIv
dXNlcl9pcF9pY21wLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfaXBfaWNtcC5oCmluZGV4
IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLmY2ZmQ1NDg3ZTJiY2Uz
YzBhZWI4MThhNmFlNGNiZTEyM2ZhODU0NGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvdXNlcl9pcF9pY21wLmgKKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2lwX2ljbXAu
aApAQCAtMCwwICsxLDIyNSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5
OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUg
VW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz
b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKi8K
KworI2lmbmRlZiBfVVNFUl9JUF9JQ01QX0hfCisjZGVmaW5lIF9VU0VSX0lQX0lDTVBfSF8KKwor
LyoKKyAqIEludGVyZmFjZSBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgRGVmaW5pdGlvbnMuCisg
KiBQZXIgUkZDIDc5MiwgU2VwdGVtYmVyIDE5ODEuCisgKi8KKworLyoKKyAqIEludGVybmFsIG9m
IGFuIElDTVAgUm91dGVyIEFkdmVydGlzZW1lbnQKKyAqLworc3RydWN0IGljbXBfcmFfYWRkciB7
CisJdV9pbnQzMl90IGlyYV9hZGRyOworCXVfaW50MzJfdCBpcmFfcHJlZmVyZW5jZTsKK307CisK
Ky8qCisgKiBTdHJ1Y3R1cmUgb2YgYW4gaWNtcCBoZWFkZXIuCisgKi8KK3N0cnVjdCBpY21waGRy
IHsKKwl1X2NoYXIJaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8K
Kwl1X2NoYXIJaWNtcF9jb2RlOwkJLyogdHlwZSBzdWIgY29kZSAqLworCXVfc2hvcnQJaWNtcF9j
a3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KK307CisKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjcHJhZ21hIHBhY2sgKHB1c2gsIDEpCitz
dHJ1Y3QgaWNtcDZfaGRyIHsKKwl1X2ludDhfdCBpY21wNl90eXBlOworCXVfaW50OF90IGljbXA2
X2NvZGU7CisJdV9pbnQxNl90IGljbXA2X2Nrc3VtOworCXVuaW9uIHsKKwkJdV9pbnQzMl90IGlj
bXA2X3VuX2RhdGEzMlsxXTsKKwkJdV9pbnQxNl90IGljbXA2X3VuX2RhdGExNlsyXTsKKwkJdV9p
bnQ4X3QgaWNtcDZfdW5fZGF0YThbNF07CisJfSBpY21wNl9kYXRhdW47Cit9OworI3ByYWdtYSBw
YWNrKHBvcCkKKworI2RlZmluZSBpY21wNl9kYXRhMzIgaWNtcDZfZGF0YXVuLmljbXA2X3VuX2Rh
dGEzMgorI2RlZmluZSBpY21wNl9tdHUgaWNtcDZfZGF0YTMyWzBdCisjZW5kaWYKKworLyoKKyAq
IFN0cnVjdHVyZSBvZiBhbiBpY21wIHBhY2tldC4KKyAqCisgKiBYWFg6IHNob3VsZCBzdGFydCB3
aXRoIGEgc3RydWN0IGljbXBoZHIuCisgKi8KK3N0cnVjdCBpY21wIHsKKwl1X2NoYXIJaWNtcF90
eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKwl1X2NoYXIJaWNtcF9jb2Rl
OwkJLyogdHlwZSBzdWIgY29kZSAqLworCXVfc2hvcnQJaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29t
cGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KKwl1bmlvbiB7CisJCXVfY2hhciBpaF9wcHRyOwkJ
CS8qIElDTVBfUEFSQU1QUk9CICovCisJCXN0cnVjdCBpbl9hZGRyIGloX2d3YWRkcjsJLyogSUNN
UF9SRURJUkVDVCAqLworCQlzdHJ1Y3QgaWhfaWRzZXEgeworCQkJdWludDE2X3QJaWNkX2lkOwkv
KiBuZXR3b3JrIGZvcm1hdCAqLworCQkJdWludDE2X3QJaWNkX3NlcTsgLyogbmV0d29yayBmb3Jt
YXQgKi8KKwkJfSBpaF9pZHNlcTsKKwkJaW50IGloX3ZvaWQ7CisKKwkJLyogSUNNUF9VTlJFQUNI
X05FRURGUkFHIC0tIFBhdGggTVRVIERpc2NvdmVyeSAoUkZDMTE5MSkgKi8KKwkJc3RydWN0IGlo
X3BtdHUgeworCQkJdWludDE2X3QgaXBtX3ZvaWQ7CS8qIG5ldHdvcmsgZm9ybWF0ICovCisJCQl1
aW50MTZfdCBpcG1fbmV4dG10dTsJLyogbmV0d29yayBmb3JtYXQgKi8KKwkJfSBpaF9wbXR1Owor
CisJCXN0cnVjdCBpaF9ydHJhZHYgeworCQkJdV9jaGFyIGlydF9udW1fYWRkcnM7CisJCQl1X2No
YXIgaXJ0X3dwYTsKKwkJCXVfaW50MTZfdCBpcnRfbGlmZXRpbWU7CisJCX0gaWhfcnRyYWR2Owor
CX0gaWNtcF9odW47CisjZGVmaW5lCWljbXBfcHB0cglpY21wX2h1bi5paF9wcHRyCisjZGVmaW5l
CWljbXBfZ3dhZGRyCWljbXBfaHVuLmloX2d3YWRkcgorI2RlZmluZQlpY21wX2lkCQlpY21wX2h1
bi5paF9pZHNlcS5pY2RfaWQKKyNkZWZpbmUJaWNtcF9zZXEJaWNtcF9odW4uaWhfaWRzZXEuaWNk
X3NlcQorI2RlZmluZQlpY21wX3ZvaWQJaWNtcF9odW4uaWhfdm9pZAorI2RlZmluZQlpY21wX3Bt
dm9pZAlpY21wX2h1bi5paF9wbXR1LmlwbV92b2lkCisjZGVmaW5lCWljbXBfbmV4dG10dQlpY21w
X2h1bi5paF9wbXR1LmlwbV9uZXh0bXR1CisjZGVmaW5lCWljbXBfbnVtX2FkZHJzCWljbXBfaHVu
LmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCisjZGVmaW5lCWljbXBfd3BhCWljbXBfaHVuLmloX3J0
cmFkdi5pcnRfd3BhCisjZGVmaW5lCWljbXBfbGlmZXRpbWUJaWNtcF9odW4uaWhfcnRyYWR2Lmly
dF9saWZldGltZQorCXVuaW9uIHsKKwkJc3RydWN0IGlkX3RzIHsJCQkvKiBJQ01QIFRpbWVzdGFt
cCAqLworCQkJLyoKKwkJCSAqIFRoZSBuZXh0IDMgZmllbGRzIGFyZSBpbiBuZXR3b3JrIGZvcm1h
dCwKKwkJCSAqIG1pbGxpc2Vjb25kcyBzaW5jZSAwMDowMCBHTVQKKwkJCSAqLworCQkJdWludDMy
X3QgaXRzX290aW1lOwkvKiBPcmlnaW5hdGUgKi8KKwkJCXVpbnQzMl90IGl0c19ydGltZTsJLyog
UmVjZWl2ZSAqLworCQkJdWludDMyX3QgaXRzX3R0aW1lOwkvKiBUcmFuc21pdCAqLworCQl9IGlk
X3RzOworCQlzdHJ1Y3QgaWRfaXAgIHsKKwkJCXN0cnVjdCBpcCBpZGlfaXA7CisJCQkvKiBvcHRp
b25zIGFuZCB0aGVuIDY0IGJpdHMgb2YgZGF0YSAqLworCQl9IGlkX2lwOworCQlzdHJ1Y3QgaWNt
cF9yYV9hZGRyIGlkX3JhZHY7CisJCXVfaW50MzJfdCBpZF9tYXNrOworCQljaGFyCWlkX2RhdGFb
MV07CisJfSBpY21wX2R1bjsKKyNkZWZpbmUJaWNtcF9vdGltZQlpY21wX2R1bi5pZF90cy5pdHNf
b3RpbWUKKyNkZWZpbmUJaWNtcF9ydGltZQlpY21wX2R1bi5pZF90cy5pdHNfcnRpbWUKKyNkZWZp
bmUJaWNtcF90dGltZQlpY21wX2R1bi5pZF90cy5pdHNfdHRpbWUKKyNkZWZpbmUJaWNtcF9pcAkJ
aWNtcF9kdW4uaWRfaXAuaWRpX2lwCisjZGVmaW5lCWljbXBfcmFkdglpY21wX2R1bi5pZF9yYWR2
CisjZGVmaW5lCWljbXBfbWFzawlpY21wX2R1bi5pZF9tYXNrCisjZGVmaW5lCWljbXBfZGF0YQlp
Y21wX2R1bi5pZF9kYXRhCit9OworCisvKgorICogTG93ZXIgYm91bmRzIG9uIHBhY2tldCBsZW5n
dGhzIGZvciB2YXJpb3VzIHR5cGVzLgorICogRm9yIHRoZSBlcnJvciBhZHZpY2UgcGFja2V0cyBt
dXN0IGZpcnN0IGluc3VyZSB0aGF0IHRoZQorICogcGFja2V0IGlzIGxhcmdlIGVub3VnaCB0byBj
b250YWluIHRoZSByZXR1cm5lZCBpcCBoZWFkZXIuCisgKiBPbmx5IHRoZW4gY2FuIHdlIGRvIHRo
ZSBjaGVjayB0byBzZWUgaWYgNjQgYml0cyBvZiBwYWNrZXQKKyAqIGRhdGEgaGF2ZSBiZWVuIHJl
dHVybmVkLCBzaW5jZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm5lZAorICogaXAgaGVhZGVy
IGxlbmd0aC4KKyAqLworI2RlZmluZQlJQ01QX01JTkxFTgk4CQkJCS8qIGFicyBtaW5pbXVtICov
CisjZGVmaW5lCUlDTVBfVFNMRU4JKDggKyAzICogc2l6ZW9mICh1aW50MzJfdCkpCS8qIHRpbWVz
dGFtcCAqLworI2RlZmluZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVzcyBtYXNrICovCisj
ZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWlu
ICovCisjZGVmaW5lCUlDTVBfQURWTEVOKHApCSg4ICsgKChwKS0+aWNtcF9pcC5pcF9obCA8PCAy
KSArIDgpCisJLyogTi5CLjogbXVzdCBzZXBhcmF0ZWx5IGNoZWNrIHRoYXQgaXBfaGwgPj0gNSAq
LworCisvKgorICogRGVmaW5pdGlvbiBvZiB0eXBlIGFuZCBjb2RlIGZpZWxkIHZhbHVlcy4KKyAq
LworI2RlZmluZQlJQ01QX0VDSE9SRVBMWQkJMAkJLyogZWNobyByZXBseSAqLworI2RlZmluZQlJ
Q01QX1VOUkVBQ0gJCTMJCS8qIGRlc3QgdW5yZWFjaGFibGUsIGNvZGVzOiAqLworI2RlZmluZQkJ
SUNNUF9VTlJFQUNIX05FVAkwCQkvKiBiYWQgbmV0ICovCisjZGVmaW5lCQlJQ01QX1VOUkVBQ0hf
SE9TVAkxCQkvKiBiYWQgaG9zdCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1BST1RPQ09MCTIJ
CS8qIGJhZCBwcm90b2NvbCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1BPUlQJMwkJLyogYmFk
IHBvcnQgKi8KKyNkZWZpbmUJCUlDTVBfVU5SRUFDSF9ORUVERlJBRwk0CQkvKiBJUF9ERiBjYXVz
ZWQgZHJvcCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1NSQ0ZBSUwJNQkJLyogc3JjIHJvdXRl
IGZhaWxlZCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOIDYJCS8qIHVua25v
d24gbmV0ICovCisjZGVmaW5lCQlJQ01QX1VOUkVBQ0hfSE9TVF9VTktOT1dOIDcJCS8qIHVua25v
d24gaG9zdCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0lTT0xBVEVECTgJCS8qIHNyYyBob3N0
IGlzb2xhdGVkICovCisjZGVmaW5lCQlJQ01QX1VOUkVBQ0hfTkVUX1BST0hJQgk5CQkvKiBwcm9o
aWJpdGVkIGFjY2VzcyAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1RfUFJPSElCIDEwCQkv
KiBkaXR0byAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX1RPU05FVAkxMQkJLyogYmFkIHRvcyBm
b3IgbmV0ICovCisjZGVmaW5lCQlJQ01QX1VOUkVBQ0hfVE9TSE9TVAkxMgkJLyogYmFkIHRvcyBm
b3IgaG9zdCAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0ZJTFRFUl9QUk9ISUIgMTMJCS8qIGFk
bWluIHByb2hpYiAqLworI2RlZmluZQkJSUNNUF9VTlJFQUNIX0hPU1RfUFJFQ0VERU5DRSAxNAkJ
LyogaG9zdCBwcmVjIHZpby4gKi8KKyNkZWZpbmUJCUlDTVBfVU5SRUFDSF9QUkVDRURFTkNFX0NV
VE9GRiAxNQkvKiBwcmVjIGN1dG9mZiAqLworI2RlZmluZQlJQ01QX1NPVVJDRVFVRU5DSAk0CQkv
KiBwYWNrZXQgbG9zdCwgc2xvdyBkb3duICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1QJCTUJCS8q
IHNob3J0ZXIgcm91dGUsIGNvZGVzOiAqLworI2RlZmluZQkJSUNNUF9SRURJUkVDVF9ORVQJMAkJ
LyogZm9yIG5ldHdvcmsgKi8KKyNkZWZpbmUJCUlDTVBfUkVESVJFQ1RfSE9TVAkxCQkvKiBmb3Ig
aG9zdCAqLworI2RlZmluZQkJSUNNUF9SRURJUkVDVF9UT1NORVQJMgkJLyogZm9yIHRvcyBhbmQg
bmV0ICovCisjZGVmaW5lCQlJQ01QX1JFRElSRUNUX1RPU0hPU1QJMwkJLyogZm9yIHRvcyBhbmQg
aG9zdCAqLworI2RlZmluZQlJQ01QX0FMVEhPU1RBRERSCTYJCS8qIGFsdGVybmF0ZSBob3N0IGFk
ZHJlc3MgKi8KKyNkZWZpbmUJSUNNUF9FQ0hPCQk4CQkvKiBlY2hvIHNlcnZpY2UgKi8KKyNkZWZp
bmUJSUNNUF9ST1VURVJBRFZFUlQJOQkJLyogcm91dGVyIGFkdmVydGlzZW1lbnQgKi8KKyNkZWZp
bmUJCUlDTVBfUk9VVEVSQURWRVJUX05PUk1BTAkJMAkvKiBub3JtYWwgYWR2ZXJ0aXNlbWVudCAq
LworI2RlZmluZQkJSUNNUF9ST1VURVJBRFZFUlRfTk9ST1VURV9DT01NT04JMTYJLyogc2VsZWN0
aXZlIHJvdXRpbmcgKi8KKyNkZWZpbmUJSUNNUF9ST1VURVJTT0xJQ0lUCTEwCQkvKiByb3V0ZXIg
c29saWNpdGF0aW9uICovCisjZGVmaW5lCUlDTVBfVElNWENFRUQJCTExCQkvKiB0aW1lIGV4Y2Vl
ZGVkLCBjb2RlOiAqLworI2RlZmluZQkJSUNNUF9USU1YQ0VFRF9JTlRSQU5TCTAJCS8qIHR0bD09
MCBpbiB0cmFuc2l0ICovCisjZGVmaW5lCQlJQ01QX1RJTVhDRUVEX1JFQVNTCTEJCS8qIHR0bD09
MCBpbiByZWFzcyAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBi
YWQgKi8KKyNkZWZpbmUJCUlDTVBfUEFSQU1QUk9CX0VSUkFUUFRSIDAJCS8qIGVycm9yIGF0IHBh
cmFtIHB0ciAqLworI2RlZmluZQkJSUNNUF9QQVJBTVBST0JfT1BUQUJTRU5UIDEJCS8qIHJlcS4g
b3B0LiBhYnNlbnQgKi8KKyNkZWZpbmUJCUlDTVBfUEFSQU1QUk9CX0xFTkdUSCAyCQkJLyogYmFk
IGxlbmd0aCAqLworI2RlZmluZQlJQ01QX1RTVEFNUAkJMTMJCS8qIHRpbWVzdGFtcCByZXF1ZXN0
ICovCisjZGVmaW5lCUlDTVBfVFNUQU1QUkVQTFkJMTQJCS8qIHRpbWVzdGFtcCByZXBseSAqLwor
I2RlZmluZQlJQ01QX0lSRVEJCTE1CQkvKiBpbmZvcm1hdGlvbiByZXF1ZXN0ICovCisjZGVmaW5l
CUlDTVBfSVJFUVJFUExZCQkxNgkJLyogaW5mb3JtYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUJSUNN
UF9NQVNLUkVRCQkxNwkJLyogYWRkcmVzcyBtYXNrIHJlcXVlc3QgKi8KKyNkZWZpbmUJSUNNUF9N
QVNLUkVQTFkJCTE4CQkvKiBhZGRyZXNzIG1hc2sgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9UUkFD
RVJPVVRFCQkzMAkJLyogdHJhY2Vyb3V0ZSAqLworI2RlZmluZQlJQ01QX0RBVEFDT05WRVJSCTMx
CQkvKiBkYXRhIGNvbnZlcnNpb24gZXJyb3IgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVESVJF
Q1QJMzIJCS8qIG1vYmlsZSBob3N0IHJlZGlyZWN0ICovCisjZGVmaW5lCUlDTVBfSVBWNl9XSEVS
RUFSRVlPVQkzMwkJLyogSVB2NiB3aGVyZS1hcmUteW91ICovCisjZGVmaW5lCUlDTVBfSVBWNl9J
QU1IRVJFCTM0CQkvKiBJUHY2IGktYW0taGVyZSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdS
RVFVRVNUCTM1CQkvKiBtb2JpbGUgcmVnaXN0cmF0aW9uIHJlcSAqLworI2RlZmluZQlJQ01QX01P
QklMRV9SRUdSRVBMWQkzNgkJLyogbW9iaWxlIHJlZ2lzdHJhdGlvbiByZXBseSAqLworI2RlZmlu
ZQlJQ01QX1NLSVAJCTM5CQkvKiBTS0lQICovCisjZGVmaW5lCUlDTVBfUEhPVFVSSVMJCTQwCQkv
KiBQaG90dXJpcyAqLworI2RlZmluZQkJSUNNUF9QSE9UVVJJU19VTktOT1dOX0lOREVYCTEJLyog
dW5rbm93biBzZWMgaW5kZXggKi8KKyNkZWZpbmUJCUlDTVBfUEhPVFVSSVNfQVVUSF9GQUlMRUQJ
MgkvKiBhdXRoIGZhaWxlZCAqLworI2RlZmluZQkJSUNNUF9QSE9UVVJJU19ERUNSWVBUX0ZBSUxF
RAkzCS8qIGRlY3J5cHQgZmFpbGVkICovCisKKyNkZWZpbmUJSUNNUF9NQVhUWVBFCQk0MAorCisj
ZGVmaW5lCUlDTVBfSU5GT1RZUEUodHlwZSkgXAorCSgodHlwZSkgPT0gSUNNUF9FQ0hPUkVQTFkg
fHwgKHR5cGUpID09IElDTVBfRUNITyB8fCBcCisJKHR5cGUpID09IElDTVBfUk9VVEVSQURWRVJU
IHx8ICh0eXBlKSA9PSBJQ01QX1JPVVRFUlNPTElDSVQgfHwgXAorCSh0eXBlKSA9PSBJQ01QX1RT
VEFNUCB8fCAodHlwZSkgPT0gSUNNUF9UU1RBTVBSRVBMWSB8fCBcCisJKHR5cGUpID09IElDTVBf
SVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQTFkgfHwgXAorCSh0eXBlKSA9PSBJQ01QX01B
U0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JFUExZKQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21hbGxvYy5oIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi91c2VyX21hbGxvYy5oCmluZGV4IGU2OWRlMjliYjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4
YzUzOTEuLjczOTA0Y2E1YjQ3YmJiNThiOGZiNmI5ZjZiYmM0NDRmZDZkMjIxMTkgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0
cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYWxsb2MuaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfbWFsbG9jLmgKQEAgLTAsMCArMSwyNjYgQEAKKy8qLQorICogQ29weXJpZ2h0
IChjKSAxOTg3LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxp
Zm9ybmlhLgorICogQ29weXJpZ2h0IChjKSAyMDA1IFJvYmVydCBOLiBNLiBXYXRzb24KKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRo
ZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlz
IHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBD
T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5U
UyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAq
LworCisvKiBUaGlzIGZpbGUgaGFzIGJlZW4gcmVuYW1lZCB1c2VyX21hbGxvYy5oIGZvciBVc2Vy
c3BhY2UgKi8KKyNpZm5kZWYgX1VTRVJfTUFMTE9DX0hfCisjZGVmaW5lCV9VU0VSX01BTExPQ19I
XworCisvKl9fVXNlcnNwYWNlX18qLworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN5
cy90eXBlcy5oPgorI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI2luY2x1
ZGUgPHN0cmluZ3MuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbHNlCisjaWYgZGVmaW5lZChf
TVNDX1ZFUikgJiYgX01TQ19WRVIgPj0gMTYwMAorI2luY2x1ZGUgPHN0ZGludC5oPgorI2VsaWYg
ZGVmaW5lZChTQ1RQX1NURElOVF9JTkNMVURFKQorI2luY2x1ZGUgU0NUUF9TVERJTlRfSU5DTFVE
RQorI2Vsc2UKKyNkZWZpbmUgdWludDMyX3QgdW5zaWduZWQgX19pbnQzMgorI2RlZmluZSB1aW50
NjRfdCB1bnNpZ25lZCBfX2ludDY0CisjZW5kaWYKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2Vu
ZGlmCisKKyNkZWZpbmUJTUlOQUxMT0NTSVpFCVVNQV9TTUFMTEVTVF9VTklUCisKKy8qCisgKiBm
bGFncyB0byBtYWxsb2MuCisgKi8KKyNkZWZpbmUJTV9OT1dBSVQJMHgwMDAxCQkvKiBkbyBub3Qg
YmxvY2sgKi8KKyNkZWZpbmUJTV9XQUlUT0sJMHgwMDAyCQkvKiBvayB0byBibG9jayAqLworI2Rl
ZmluZQlNX1pFUk8JCTB4MDEwMAkJLyogYnplcm8gdGhlIGFsbG9jYXRpb24gKi8KKyNkZWZpbmUJ
TV9OT1ZNCQkweDAyMDAJCS8qIGRvbid0IGFzayBWTSBmb3IgcGFnZXMgKi8KKyNkZWZpbmUJTV9V
U0VfUkVTRVJWRQkweDA0MDAJCS8qIGNhbiBhbGxvYyBvdXQgb2YgcmVzZXJ2ZSBtZW1vcnkgKi8K
KworI2RlZmluZQlNX01BR0lDCQk4Nzc5ODM5NzcJLyogdGltZSB3aGVuIGZpcnN0IGRlZmluZWQg
Oi0pICovCisKKy8qCisgKiBUd28gbWFsbG9jIHR5cGUgc3RydWN0dXJlcyBhcmUgcHJlc2VudDog
bWFsbG9jX3R5cGUsIHdoaWNoIGlzIHVzZWQgYnkgYQorICogdHlwZSBvd25lciB0byBkZWNsYXJl
IHRoZSB0eXBlLCBhbmQgbWFsbG9jX3R5cGVfaW50ZXJuYWwsIHdoaWNoIGhvbGRzCisgKiBtYWxs
b2Mtb3duZWQgc3RhdGlzdGljcyBhbmQgb3RoZXIgQUJJLXNlbnNpdGl2ZSBmaWVsZHMsIHN1Y2gg
YXMgdGhlIHNldCBvZgorICogbWFsbG9jIHN0YXRpc3RpY3MgaW5kZXhlZCBieSB0aGUgY29tcGls
ZS10aW1lIE1BWENQVSBjb25zdGFudC4KKyAqIEFwcGxpY2F0aW9ucyBzaG91bGQgYXZvaWQgaW50
cm9kdWNpbmcgZGVwZW5kZW5jZSBvbiB0aGUgYWxsb2NhdG9yIHByaXZhdGUKKyAqIGRhdGEgbGF5
b3V0IGFuZCBzaXplLgorICoKKyAqIFRoZSBtYWxsb2NfdHlwZSBrc19uZXh0IGZpZWxkIGlzIHBy
b3RlY3RlZCBieSBtYWxsb2NfbXR4LiAgT3RoZXIgZmllbGRzIGluCisgKiBtYWxsb2NfdHlwZSBh
cmUgc3RhdGljIGFmdGVyIGluaXRpYWxpemF0aW9uIHNvIHVuc3luY2hyb25pemVkLgorICoKKyAq
IFN0YXRpc3RpY3MgaW4gbWFsbG9jX3R5cGVfc3RhdHMgYXJlIHdyaXR0ZW4gb25seSB3aGVuIGhv
bGRpbmcgYSBjcml0aWNhbAorICogc2VjdGlvbiBhbmQgcnVubmluZyBvbiB0aGUgQ1BVIGFzc29j
aWF0ZWQgd2l0aCB0aGUgaW5kZXggaW50byB0aGUgc3RhdAorICogYXJyYXksIGJ1dCByZWFkIGxv
Y2stZnJlZSByZXN1bHRpbmcgaW4gcG9zc2libGUgKG1pbm9yKSByYWNlcywgd2hpY2ggdGhlCisg
KiBtb25pdG9yaW5nIGFwcCBzaG91bGQgdGFrZSBpbnRvIGFjY291bnQuCisgKi8KK3N0cnVjdCBt
YWxsb2NfdHlwZV9zdGF0cyB7CisJdWludDY0X3QJbXRzX21lbWFsbG9jZWQ7CS8qIEJ5dGVzIGFs
bG9jYXRlZCBvbiBDUFUuICovCisJdWludDY0X3QJbXRzX21lbWZyZWVkOwkvKiBCeXRlcyBmcmVl
ZCBvbiBDUFUuICovCisJdWludDY0X3QJbXRzX251bWFsbG9jczsJLyogTnVtYmVyIG9mIGFsbG9j
YXRlcyBvbiBDUFUuICovCisJdWludDY0X3QJbXRzX251bWZyZWVzOwkvKiBudW1iZXIgb2YgZnJl
ZXMgb24gQ1BVLiAqLworCXVpbnQ2NF90CW10c19zaXplOwkvKiBCaXRtYXNrIG9mIHNpemVzIGFs
bG9jYXRlZCBvbiBDUFUuICovCisJdWludDY0X3QJX210c19yZXNlcnZlZDE7CS8qIFJlc2VydmVk
IGZpZWxkLiAqLworCXVpbnQ2NF90CV9tdHNfcmVzZXJ2ZWQyOwkvKiBSZXNlcnZlZCBmaWVsZC4g
Ki8KKwl1aW50NjRfdAlfbXRzX3Jlc2VydmVkMzsJLyogUmVzZXJ2ZWQgZmllbGQuICovCit9Owor
CisjaWZuZGVmIE1BWENQVSAvKiBuZWNlc3Nhcnkgb24gTGludXggKi8KKyNkZWZpbmUgTUFYQ1BV
IDQgLyogYXJiaXRyYXJ5PyAqLworI2VuZGlmCisKK3N0cnVjdCBtYWxsb2NfdHlwZV9pbnRlcm5h
bCB7CisJc3RydWN0IG1hbGxvY190eXBlX3N0YXRzCW10aV9zdGF0c1tNQVhDUFVdOworfTsKKwor
LyoKKyAqIEFCSS1jb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIG9sZCAnc3RydWN0IG1hbGxvY190
eXBlJywgb25seSBhbGwgc3RhdHMgYXJlCisgKiBub3cgbWFsbG9jLW1hbmFnZWQgaW4gbWFsbG9j
LW93bmVkIG1lbW9yeSByYXRoZXIgdGhhbiBpbiBjYWxsZXIgbWVtb3J5LCBzbworICogYXMgdG8g
YXZvaWQgQUJJIGlzc3Vlcy4gIFRoZSBrc19uZXh0IHBvaW50ZXIgaXMgcmV1c2VkIGFzIGEgcG9p
bnRlciB0byB0aGUKKyAqIGludGVybmFsIGRhdGEgaGFuZGxlLgorICovCitzdHJ1Y3QgbWFsbG9j
X3R5cGUgeworCXN0cnVjdCBtYWxsb2NfdHlwZSAqa3NfbmV4dDsJLyogTmV4dCBpbiBnbG9iYWwg
Y2hhaW4uICovCisJdV9sb25nCQkgX2tzX21lbXVzZTsJLyogTm8gbG9uZ2VyIHVzZWQuICovCisJ
dV9sb25nCQkgX2tzX3NpemU7CS8qIE5vIGxvbmdlciB1c2VkLiAqLworCXVfbG9uZwkJIF9rc19p
bnVzZTsJLyogTm8gbG9uZ2VyIHVzZWQuICovCisJdWludDY0X3QJIF9rc19jYWxsczsJLyogTm8g
bG9uZ2VyIHVzZWQuICovCisJdV9sb25nCQkgX2tzX21heHVzZWQ7CS8qIE5vIGxvbmdlciB1c2Vk
LiAqLworCXVfbG9uZwkJIGtzX21hZ2ljOwkvKiBEZXRlY3QgcHJvZ3JhbW1lciBlcnJvci4gKi8K
Kwljb25zdCBjaGFyCSprc19zaG9ydGRlc2M7CS8qIFByaW50YWJsZSB0eXBlIG5hbWUuICovCisK
KwkvKgorCSAqIHN0cnVjdCBtYWxsb2NfdHlwZSB3YXMgdGVybWluYXRlZCB3aXRoIGEgc3RydWN0
IG10eCwgd2hpY2ggaXMgbm8KKwkgKiBsb25nZXIgcmVxdWlyZWQuICBGb3IgQUJJIHJlYXNvbnMs
IGNvbnRpbnVlIHRvIGZsZXNoIG91dCB0aGUgZnVsbAorCSAqIHNpemUgb2YgdGhlIG9sZCBzdHJ1
Y3R1cmUsIGJ1dCByZXVzZSB0aGUgX2xvX2NsYXNzIGZpZWxkIGZvciBvdXIKKwkgKiBpbnRlcm5h
bCBkYXRhIGhhbmRsZS4KKwkgKi8KKwl2b2lkCQkqa3NfaGFuZGxlOwkvKiBQcml2LiBkYXRhLCB3
YXMgbG9fY2xhc3MuICovCisJY29uc3QgY2hhcgkqX2xvX25hbWU7CisJY29uc3QgY2hhcgkqX2xv
X3R5cGU7CisJdV9pbnQJCSBfbG9fZmxhZ3M7CisJdm9pZAkJKl9sb19saXN0X25leHQ7CisJc3Ry
dWN0IHdpdG5lc3MJKl9sb193aXRuZXNzOworCXVpbnRwdHJfdAkgX210eF9sb2NrOworCXVfaW50
CQkgX210eF9yZWN1cnNlOworfTsKKworLyoKKyAqIFN0YXRpc3RpY3Mgc3RydWN0dXJlIGhlYWRl
cnMgZm9yIHVzZXIgc3BhY2UuICBUaGUga2Vybi5tYWxsb2Mgc3lzY3RsCisgKiBleHBvc2VzIGEg
c3RydWN0dXJlIHN0cmVhbSBjb25zaXN0aW5nIG9mIGEgc3RyZWFtIGhlYWRlciwgdGhlbiBhIHNl
cmllcyBvZgorICogbWFsbG9jIHR5cGUgaGVhZGVycyBhbmQgc3RhdGlzdGljcyBzdHJ1Y3R1cmVz
IChxdWFudGl0eSBtYXhjcHVzKS4gIEZvcgorICogY29udmVuaWVuY2UsIHRoZSBrZXJuZWwgd2ls
bCBwcm92aWRlIHRoZSBjdXJyZW50IHZhbHVlIG9mIG1heGNwdXMgYXQgdGhlCisgKiBoZWFkIG9m
IHRoZSBzdHJlYW0uCisgKi8KKyNkZWZpbmUJTUFMTE9DX1RZUEVfU1RSRUFNX1ZFUlNJT04JMHgw
MDAwMDAwMQorc3RydWN0IG1hbGxvY190eXBlX3N0cmVhbV9oZWFkZXIgeworCXVpbnQzMl90CW10
c2hfdmVyc2lvbjsJLyogU3RyZWFtIGZvcm1hdCB2ZXJzaW9uLiAqLworCXVpbnQzMl90CW10c2hf
bWF4Y3B1czsJLyogVmFsdWUgb2YgTUFYQ1BVIGZvciBzdHJlYW0uICovCisJdWludDMyX3QJbXRz
aF9jb3VudDsJLyogTnVtYmVyIG9mIHJlY29yZHMuICovCisJdWludDMyX3QJX210c2hfcGFkOwkv
KiBQYWQvcmVzZXJ2ZWQgZmllbGQuICovCit9OworCisjZGVmaW5lCU1BTExPQ19NQVhfTkFNRQkz
Mgorc3RydWN0IG1hbGxvY190eXBlX2hlYWRlciB7CisJY2hhcgkJCQltdGhfbmFtZVtNQUxMT0Nf
TUFYX05BTUVdOworfTsKKworLyogX19Vc2Vyc3BhY2VfXworTm90aWNlIHRoYXQgYXQgcGxhY2Vz
IGl0IHVzZXMgaWZkZWYgX0tFUk5FTC4gVGhhdCBsaW5lIGNhbm5vdCBiZQorcmVtb3ZlZCBiZWNh
dXNlIGl0IGNhdXNlcyBjb25mbGljdHMgd2l0aCBtYWxsb2MgZGVmaW5pdGlvbiBpbgorL3Vzci9p
bmNsdWRlL21hbGxvYy5oLCB3aGljaCBlc3NlbnRpYWxseSBzYXlzIHRoYXQgbWFsbG9jLmggaGFz
CitiZWVuIG92ZXJyaWRkZW4gYnkgc3RkbGliLmguIFdlIHdpbGwgbmVlZCB0byB1c2UgbmFtZXMg
bGlrZQordXNlcl9tYWxsb2MuaCBmb3IgaXNvbGF0aW5nIGtlcm5lbCBpbnRlcmZhY2UgaGVhZGVy
cy4gdXNpbmcKK29yaWdpbmFsIG5hbWVzIGxpa2UgbWFsbG9jLmggaW4gYSB1c2VyX2luY2x1ZGUg
aGVhZGVyIGNhbiBiZQorY29uZnVzaW5nLCBBbGwgdXNlcnNwYWNlIGhlYWRlciBmaWxlcyBhcmUg
YmVpbmcgcGxhY2VkIGluIC4vdXNlcl9pbmNsdWRlCitCZXR0ZXIgc3RpbGwgdG8gcmVtb3ZlIGZy
b20gdXNlcl9pbmNsdWRlLmggYWxsIGlycmVsZXZhbnQgY29kZSBzdWNoCithcyB0aGF0IGluIHRo
ZSBibG9jayBzdGFydGluZyB3aXRoICNpZmRlZiBfS0VSTkVMLiBJIGFtIG9ubHkgbGVhdmluZwor
aXQgaW4gZm9yIHRoZSB0aW1lIGJlaW5nIHRvIHNlZSB3aGF0IGZ1bmN0aW9uYWxpdHkgaXMgaW4g
dGhpcyBmaWxlCit0aGF0IGtlcm5lbCB1c2VzLgorCitTdGFydCBjb3B5OiBDb3BpZWQgY29kZSBm
b3IgX19Vc2Vyc3BhY2VfXyAqLworI2RlZmluZQlNQUxMT0NfREVGSU5FKHR5cGUsIHNob3J0ZGVz
YywgbG9uZ2Rlc2MpCQkJXAorCXN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdID0gewkJCQkJXAor
CQl7IE5VTEwsIDAsIDAsIDAsIDAsIDAsIE1fTUFHSUMsIHNob3J0ZGVzYywgTlVMTCwgTlVMTCwJ
XAorCQkgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwgMCB9CQkJCVwKKwl9CisKKy8qIFJlbW92
ZWQgImV4dGVybiIgaW4gX19Vc2Vyc3BhY2VfXyBjb2RlICovCisvKiBJZiB3ZSBuZWVkIHRvIHVz
ZSBNQUxMT0NfREVDTEFSRSBiZWZvcmUgdXNpbmcgTUFMTE9DIHRoZW4KKyAgIHdlIGhhdmUgdG8g
cmVtb3ZlIGV4dGVybi4KKyAgICAgSW4gL3Vzci9pbmNsdWRlL3N5cy9tYWxsb2MuaCB0aGVyZSBp
cyB0aGlzIGRlZmluaXRpb246CisgICAgICNkZWZpbmUgICAgTUFMTE9DX0RFQ0xBUkUodHlwZSkg
XAorICAgICAgICBleHRlcm4gc3RydWN0IG1hbGxvY190eXBlIHR5cGVbMV0KKyAgICAgYW5kIGxv
YWRlciBpcyB1bmFibGUgdG8gZmluZCB0aGUgZXh0ZXJuIG1hbGxvY190eXBlIGJlY2F1c2UKKyAg
ICAgaXQgbWF5IGJlIGRlZmluZWQgaW4gb25lIG9mIGtlcm5lbCBvYmplY3QgZmlsZXMuCisgICAg
IEl0IHNlZW1zIHRoYXQgTUFMTE9DX0RFQ0xBUkUgYW5kIE1BTExPQ19ERUZJTkUgY2Fubm90IGJl
IHVzZWQgYXQKKyAgICAgdGhlIHNhbWUgdGltZSBmb3Igc2FtZSAidHlwZSIgdmFyaWFibGUuIEFs
c28sIGluIFJhbmRhbGwncyBhcmNoaXRlY3R1cmUKKyAgICAgZG9jdW1lbnQsIHdoZXJlIGl0IHNw
ZWNpZmllcyBPL1Mgc3BlY2lmaWMgbWFjcm9zIGFuZCBmdW5jdGlvbnMsIGl0IHNheXMKKyAgICAg
dGhhdCB0aGUgbmFtZSBpbiBTQ1RQX01BTExPQyBkb2VzIG5vdCBoYXZlIHRvIGJlIHVzZWQuCisq
LworI2RlZmluZQlNQUxMT0NfREVDTEFSRSh0eXBlKSBcCisJZXh0ZXJuIHN0cnVjdCBtYWxsb2Nf
dHlwZSB0eXBlWzFdCisKKyNkZWZpbmUJRlJFRShhZGRyLCB0eXBlKSBmcmVlKChhZGRyKSkKKwor
LyogY2hhbmdlZCBkZWZpbml0aW9ucyBvZiBNQUxMT0MgYW5kIEZSRUUgKi8KKy8qIFVzaW5nIG1l
bXNldCBpZiBmbGFnIE1fWkVSTyBpcyBzcGVjaWZpZWQuIFRvZG86IE1fV0FJVE9LIGFuZCBNX05P
V0FJVCAqLworI2RlZmluZQlNQUxMT0Moc3BhY2UsIGNhc3QsIHNpemUsIHR5cGUsIGZsYWdzKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoc3BhY2UpID0gKGNhc3QpbWFsbG9jKCh1
X2xvbmcpKHNpemUpKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsJCQkJ
CQkJCVwKKyAgICAgICAgaWYgKGZsYWdzICYgTV9aRVJPKSB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisJICBtZW1zZXQoc3BhY2UsMCxzaXplKTsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9CQkJCQkJCQlcCisgICAgfSB3
aGlsZSAoMCk7CisKKworLyogRW5kIGNvcHk6IENvcGllZCBjb2RlIGZvciBfX1VzZXJzcGFjZV9f
ICovCisKKyNpZiAwCisjaWZkZWYgX0tFUk5FTAorI2RlZmluZQlNQUxMT0NfREVGSU5FKHR5cGUs
IHNob3J0ZGVzYywgbG9uZ2Rlc2MpCQkJXAorCXN0cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdID0g
ewkJCQkJXAorCQl7IE5VTEwsIDAsIDAsIDAsIDAsIDAsIE1fTUFHSUMsIHNob3J0ZGVzYywgTlVM
TCwgTlVMTCwJXAorCQkgICAgTlVMTCwgMCwgTlVMTCwgTlVMTCwgMCwgMCB9CQkJCVwKKwl9OwkJ
CQkJCQkJXAorCVNZU0lOSVQodHlwZSMjX2luaXQsIFNJX1NVQl9LTUVNLCBTSV9PUkRFUl9TRUNP
TkQsIG1hbGxvY19pbml0LAlcCisJICAgIHR5cGUpOwkJCQkJCQlcCisJU1lTVU5JTklUKHR5cGUj
I191bmluaXQsIFNJX1NVQl9LTUVNLCBTSV9PUkRFUl9BTlksCQlcCisJICAgIG1hbGxvY191bmlu
aXQsIHR5cGUpCisKKworI2RlZmluZQlNQUxMT0NfREVDTEFSRSh0eXBlKSBcCisJZXh0ZXJuIHN0
cnVjdCBtYWxsb2NfdHlwZSB0eXBlWzFdCisKK01BTExPQ19ERUNMQVJFKE1fQ0FDSEUpOworTUFM
TE9DX0RFQ0xBUkUoTV9ERVZCVUYpOworTUFMTE9DX0RFQ0xBUkUoTV9URU1QKTsKKworTUFMTE9D
X0RFQ0xBUkUoTV9JUDZPUFQpOyAvKiBmb3IgSU5FVDYgKi8KK01BTExPQ19ERUNMQVJFKE1fSVA2
TkRQKTsgLyogZm9yIElORVQ2ICovCisKKy8qCisgKiBEZXByZWNhdGVkIG1hY3JvIHZlcnNpb25z
IG9mIG5vdC1xdWl0ZS1tYWxsb2MoKSBhbmQgZnJlZSgpLgorICovCisjZGVmaW5lCU1BTExPQyhz
cGFjZSwgY2FzdCwgc2l6ZSwgdHlwZSwgZmxhZ3MpIFwKKwkoKHNwYWNlKSA9IChjYXN0KW1hbGxv
YygodV9sb25nKShzaXplKSwgKHR5cGUpLCAoZmxhZ3MpKSkKKyNkZWZpbmUJRlJFRShhZGRyLCB0
eXBlKSBmcmVlKChhZGRyKSwgKHR5cGUpKQorCisvKgorICogWFhYIHRoaXMgc2hvdWxkIGJlIGRl
Y2xhcmVkIGluIDxzeXMvdWlvLmg+LCBidXQgdGhhdCB0ZW5kcyB0byBmYWlsCisgKiBiZWNhdXNl
IDxzeXMvdWlvLmg+IGlzIGluY2x1ZGVkIGluIGEgaGVhZGVyIGJlZm9yZSB0aGUgc291cmNlIGZp
bGUKKyAqIGhhcyBhIGNoYW5jZSB0byBpbmNsdWRlIDxzeXMvbWFsbG9jLmg+IHRvIGdldCBNQUxM
T0NfREVDTEFSRSgpIGRlZmluZWQuCisgKi8KK01BTExPQ19ERUNMQVJFKE1fSU9WKTsKKworZXh0
ZXJuIHN0cnVjdCBtdHggbWFsbG9jX210eDsKKworLyogWFhYIHN0cnVjdCBtYWxsb2NfdHlwZSBp
cyB1bnVzZWQgZm9yIGNvbnRpZyooKS4gKi8KK3ZvaWQJY29udGlnZnJlZSh2b2lkICphZGRyLCB1
bnNpZ25lZCBsb25nIHNpemUsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSk7Cit2b2lkCSpjb250
aWdtYWxsb2ModW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIGlu
dCBmbGFncywKKwkgICAgdm1fcGFkZHJfdCBsb3csIHZtX3BhZGRyX3QgaGlnaCwgdW5zaWduZWQg
bG9uZyBhbGlnbm1lbnQsCisJICAgIHVuc2lnbmVkIGxvbmcgYm91bmRhcnkpOwordm9pZAlmcmVl
KHZvaWQgKmFkZHIsIHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSk7Cit2b2lkCSptYWxsb2ModW5z
aWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsIGludCBmbGFncyk7Cit2
b2lkCW1hbGxvY19pbml0KHZvaWQgKik7CitpbnQJbWFsbG9jX2xhc3RfZmFpbCh2b2lkKTsKK3Zv
aWQJbWFsbG9jX3R5cGVfYWxsb2NhdGVkKHN0cnVjdCBtYWxsb2NfdHlwZSAqdHlwZSwgdW5zaWdu
ZWQgbG9uZyBzaXplKTsKK3ZvaWQJbWFsbG9jX3R5cGVfZnJlZWQoc3RydWN0IG1hbGxvY190eXBl
ICp0eXBlLCB1bnNpZ25lZCBsb25nIHNpemUpOwordm9pZAltYWxsb2NfdW5pbml0KHZvaWQgKik7
Cit2b2lkCSpyZWFsbG9jKHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgc3RydWN0IG1h
bGxvY190eXBlICp0eXBlLAorCSAgICBpbnQgZmxhZ3MpOwordm9pZAkqcmVhbGxvY2Yodm9pZCAq
YWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBzdHJ1Y3QgbWFsbG9jX3R5cGUgKnR5cGUsCisJICAg
IGludCBmbGFncyk7CisKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKyNlbmRpZgorCisjZW5kaWYg
LyogIV9TWVNfTUFMTE9DX0hfICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3
ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3Vz
ZXJfbWJ1Zi5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuYwppbmRleCBlNjlkZTI5
YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5hNjNhODg5Yjc1MTNlYmM1OWM5Zjg2
ZjZiNWU0MzMxZjlmYTVhMjY1IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJf
bWJ1Zi5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmMKQEAgLTAsMCArMSwx
NTkzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk4OCwgMTk5MworICog
ICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhl
IFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMg
c29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRT
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICov
CisKKy8qCisgKiAgX19Vc2Vyc3BhY2VfXyB2ZXJzaW9uIG9mIC91c3Ivc3JjL3N5cy9rZXJuL2tl
cm5fbWJ1Zi5jCisgKiAgV2UgYXJlIGluaXRpYWxpemluZyB0d28gem9uZXMgZm9yIE1idWZzIGFu
ZCBDbHVzdGVycy4KKyAqCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3Ry
aW5nLmg+CisvKiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+IFRoaXMgZGVmaW5lcyBNU0laRSAyNTYg
Ki8KKyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisjaW5jbHVkZSAidW1lbS5o
IgorI2VuZGlmCisjaW5jbHVkZSAidXNlcl9tYnVmLmgiCisjaW5jbHVkZSAidXNlcl9lbnZpcm9u
bWVudC5oIgorI2luY2x1ZGUgInVzZXJfYXRvbWljLmgiCisjaW5jbHVkZSAibmV0aW5ldC9zY3Rw
X3BjYi5oIgorCitzdHJ1Y3QgbWJzdGF0IG1ic3RhdDsKKyNkZWZpbmUgS0lQQ19NQVhfTElOS0hE
UiAgICAgICAgNCAgICAgICAvKiBpbnQ6IG1heCBsZW5ndGggb2YgbGluayBoZWFkZXIgKHNlZSBz
eXMvc3lzY2x0LmgpICovCisjZGVmaW5lIEtJUENfTUFYX1BST1RPSERSCTUJLyogaW50OiBtYXgg
bGVuZ3RoIG9mIG5ldHdvcmsgaGVhZGVyIChzZWUgc3lzL3N5c2NsdC5oKSovCitpbnQgbWF4X2xp
bmtoZHIgPSBLSVBDX01BWF9MSU5LSERSOworaW50IG1heF9wcm90b2hkciA9IEtJUENfTUFYX1BS
T1RPSERSOyAvKiBTaXplIG9mIGxhcmdlc3QgcHJvdG9jb2wgbGF5ZXIgaGVhZGVyLiAqLworCisv
KgorICogWm9uZXMgZnJvbSB3aGljaCB3ZSBhbGxvY2F0ZS4KKyAqLworc2N0cF96b25lX3QJem9u
ZV9tYnVmOworc2N0cF96b25lX3QJem9uZV9jbHVzdDsKK3NjdHBfem9uZV90CXpvbmVfZXh0X3Jl
ZmNudDsKKworLyogX19Vc2Vyc3BhY2VfXyBjbHVzdF9tYl9hcmdzIHdpbGwgYmUgcGFzc2VkIGFz
IGNhbGxiYWNrIGRhdGEgdG8gbWJfY3Rvcl9jbHVzdAorICogYW5kIG1iX2R0b3JfY2x1c3QuCisg
KiBOb3RlOiBJIGhhZCB0byB1c2Ugc3RydWN0IGNsdXN0X2FyZ3MgYXMgYW4gZW5jYXBzdWxhdGlv
biBmb3IgYW4gbWJ1ZiBwb2ludGVyLgorICogc3RydWN0IG1idWYgKiBjbHVzdF9tYl9hcmdzOyBk
b2VzIG5vdCB3b3JrLgorICovCitzdHJ1Y3QgY2x1c3RfYXJncyBjbHVzdF9tYl9hcmdzOworCisK
Ky8qIF9fVXNlcnNwYWNlX18KKyAqIExvY2FsIHByb3RvdHlwZXMuCisgKi8KK3N0YXRpYyBpbnQJ
bWJfY3Rvcl9tYnVmKHZvaWQgKiwgdm9pZCAqLCBpbnQpOworc3RhdGljIGludCAgICAgIG1iX2N0
b3JfY2x1c3Qodm9pZCAqLCB2b2lkICosIGludCk7CitzdGF0aWMgdm9pZAltYl9kdG9yX21idWYo
dm9pZCAqLCAgdm9pZCAqKTsKK3N0YXRpYyB2b2lkCW1iX2R0b3JfY2x1c3Qodm9pZCAqLCB2b2lk
ICopOworCisKKy8qKioqKioqKioqKioqKioqKiBGdW5jdGlvbnMgdGFrZW4gZnJvbSB1c2VyX21i
dWYuaCAqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1idWZfY29uc3RydWN0b3JfZHVwKHN0
cnVjdCBtYnVmICptLCBpbnQgcGt0aGRyLCBzaG9ydCB0eXBlKQoreworCWludCBmbGFncyA9IHBr
dGhkcjsKKwlpZiAodHlwZSA9PSBNVF9OT0lOSVQpCisJCXJldHVybiAoMCk7CisKKwltLT5tX25l
eHQgPSBOVUxMOworCW0tPm1fbmV4dHBrdCA9IE5VTEw7CisJbS0+bV9sZW4gPSAwOworCW0tPm1f
ZmxhZ3MgPSBmbGFnczsKKwltLT5tX3R5cGUgPSB0eXBlOworCWlmIChmbGFncyAmIE1fUEtUSERS
KSB7CisJCW0tPm1fZGF0YSA9IG0tPm1fcGt0ZGF0OworCQltLT5tX3BrdGhkci5yY3ZpZiA9IE5V
TEw7CisJCW0tPm1fcGt0aGRyLmxlbiA9IDA7CisJCW0tPm1fcGt0aGRyLmhlYWRlciA9IE5VTEw7
CisJCW0tPm1fcGt0aGRyLmNzdW1fZmxhZ3MgPSAwOworCQltLT5tX3BrdGhkci5jc3VtX2RhdGEg
PSAwOworCQltLT5tX3BrdGhkci50c29fc2Vnc3ogPSAwOworCQltLT5tX3BrdGhkci5ldGhlcl92
dGFnID0gMDsKKwkJU0xJU1RfSU5JVCgmbS0+bV9wa3RoZHIudGFncyk7CisJfSBlbHNlCisJCW0t
Pm1fZGF0YSA9IG0tPm1fZGF0OworCisJcmV0dXJuICgwKTsKK30KKworLyogX19Vc2Vyc3BhY2Vf
XyAqLworc3RydWN0IG1idWYgKgorbV9nZXQoaW50IGhvdywgc2hvcnQgdHlwZSkKK3sKKwlzdHJ1
Y3QgbWJ1ZiAqbXJldDsKKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlzdHJ1
Y3QgbWJfYXJncyBtYnVmX21iX2FyZ3M7CisKKwkvKiBUaGUgZm9sbG93aW5nIHNldHRlciBmdW5j
dGlvbiBpcyBub3QgeWV0IGJlaW5nIGVuY2xvc2VkIHdpdGhpbgorCSAqICNpZiBVU0lOR19NQlVG
X0NPTlNUUlVDVE9SIC0gI2VuZGlmLCB1bnRpbCBJIGhhdmUgdGhvcm91Z2hseSB0ZXN0ZWQKKwkg
KiBtYl9kdG9yX21idWYuIFNlZSBjb21tZW50IHRoZXJlCisJICovCisJbWJ1Zl9tYl9hcmdzLmZs
YWdzID0gMDsKKwltYnVmX21iX2FyZ3MudHlwZSA9IHR5cGU7CisjZW5kaWYKKwkvKiBNYnVmIG1h
c3RlciB6b25lLCB6b25lX21idWYsIGhhcyBhbHJlYWR5IGJlZW4KKwkgKiBjcmVhdGVkIGluIG1i
dWZfaW5pdGlhbGl6ZSgpICovCisJbXJldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9tYnVmLCBzdHJ1
Y3QgbWJ1Zik7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJbWJfY3Rvcl9t
YnVmKG1yZXQsICZtYnVmX21iX2FyZ3MsIDApOworI2VuZGlmCisJLyptcmV0ID0gICgoc3RydWN0
IG1idWYgKil1bWVtX2NhY2hlX2FsbG9jKHpvbmVfbWJ1ZiwgVU1FTV9ERUZBVUxUKSk7Ki8KKwor
CS8qIFRoZXJlIGFyZSBjYXNlcyB3aGVuIGFuIG9iamVjdCBhdmFpbGFibGUgaW4gdGhlIGN1cnJl
bnQgQ1BVJ3MKKwkgKiBsb2FkZWQgbWFnYXppbmUgYW5kIGluIHRob3NlIGNhc2VzIHRoZSBvYmpl
Y3QncyBjb25zdHJ1Y3RvciBpcyBub3QgYXBwbGllZC4KKwkgKiBJZiB0aGF0IGlzIHRoZSBjYXNl
LCB0aGVuIHdlIGFyZSBkdXBsaWNhdGluZyBjb25zdHJ1Y3RvciBpbml0aWFsaXphdGlvbiBoZXJl
LAorCSAqIHNvIHRoYXQgdGhlIG1idWYgaXMgcHJvcGVybHkgY29uc3RydWN0ZWQgYmVmb3JlIHJl
dHVybmluZyBpdC4KKwkgKi8KKwlpZiAobXJldCkgeworI2lmIFVTSU5HX01CVUZfQ09OU1RSVUNU
T1IKKwkJaWYgKCEgKG1yZXQtPm1fdHlwZSA9PSB0eXBlKSApIHsKKwkJCW1idWZfY29uc3RydWN0
b3JfZHVwKG1yZXQsIDAsIHR5cGUpOworCQl9CisjZWxzZQorCQltYnVmX2NvbnN0cnVjdG9yX2R1
cChtcmV0LCAwLCB0eXBlKTsKKyNlbmRpZgorCisJfQorCXJldHVybiBtcmV0OworfQorCisKKy8q
IF9fVXNlcnNwYWNlX18gKi8KK3N0cnVjdCBtYnVmICoKK21fZ2V0aGRyKGludCBob3csIHNob3J0
IHR5cGUpCit7CisJc3RydWN0IG1idWYgKm1yZXQ7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9B
TExPQ0FUT1IpCisJc3RydWN0IG1iX2FyZ3MgbWJ1Zl9tYl9hcmdzOworCisJLyogVGhlIGZvbGxv
d2luZyBzZXR0ZXIgZnVuY3Rpb24gaXMgbm90IHlldCBiZWluZyBlbmNsb3NlZCB3aXRoaW4KKwkg
KiAjaWYgVVNJTkdfTUJVRl9DT05TVFJVQ1RPUiAtICNlbmRpZiwgdW50aWwgSSBoYXZlIHRob3Jv
dWdobHkgdGVzdGVkCisJICogbWJfZHRvcl9tYnVmLiBTZWUgY29tbWVudCB0aGVyZQorCSAqLwor
CW1idWZfbWJfYXJncy5mbGFncyA9IE1fUEtUSERSOworCW1idWZfbWJfYXJncy50eXBlID0gdHlw
ZTsKKyNlbmRpZgorCW1yZXQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfbWJ1Ziwgc3RydWN0IG1idWYp
OworI2lmIGRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9SKQorCW1iX2N0b3JfbWJ1ZihtcmV0
LCAmbWJ1Zl9tYl9hcmdzLCAwKTsKKyNlbmRpZgorCS8qbXJldCA9ICgoc3RydWN0IG1idWYgKil1
bWVtX2NhY2hlX2FsbG9jKHpvbmVfbWJ1ZiwgVU1FTV9ERUZBVUxUKSk7Ki8KKwkvKiBUaGVyZSBh
cmUgY2FzZXMgd2hlbiBhbiBvYmplY3QgYXZhaWxhYmxlIGluIHRoZSBjdXJyZW50IENQVSdzCisJ
ICogbG9hZGVkIG1hZ2F6aW5lIGFuZCBpbiB0aG9zZSBjYXNlcyB0aGUgb2JqZWN0J3MgY29uc3Ry
dWN0b3IgaXMgbm90IGFwcGxpZWQuCisJICogSWYgdGhhdCBpcyB0aGUgY2FzZSwgdGhlbiB3ZSBh
cmUgZHVwbGljYXRpbmcgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gaGVyZSwKKwkgKiBzbyB0
aGF0IHRoZSBtYnVmIGlzIHByb3Blcmx5IGNvbnN0cnVjdGVkIGJlZm9yZSByZXR1cm5pbmcgaXQu
CisJICovCisJaWYgKG1yZXQpIHsKKyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJCWlmICgh
ICgobXJldC0+bV9mbGFncyAmIE1fUEtUSERSKSAmJiAobXJldC0+bV90eXBlID09IHR5cGUpKSAp
IHsKKwkJCW1idWZfY29uc3RydWN0b3JfZHVwKG1yZXQsIE1fUEtUSERSLCB0eXBlKTsKKwkJfQor
I2Vsc2UKKwkJbWJ1Zl9jb25zdHJ1Y3Rvcl9kdXAobXJldCwgTV9QS1RIRFIsIHR5cGUpOworI2Vu
ZGlmCisJfQorCXJldHVybiBtcmV0OworfQorCisvKiBfX1VzZXJzcGFjZV9fICovCitzdHJ1Y3Qg
bWJ1ZiAqCittX2ZyZWUoc3RydWN0IG1idWYgKm0pCit7CisKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IG0t
Pm1fbmV4dDsKKworCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCisJCW1iX2ZyZWVfZXh0KG0pOwor
CWVsc2UgaWYgKChtLT5tX2ZsYWdzICYgTV9OT0ZSRUUpID09IDApIHsKKyNpZiBkZWZpbmVkKFND
VFBfU0lNUExFX0FMTE9DQVRPUikKKwkJbWJfZHRvcl9tYnVmKG0sIE5VTEwpOworI2VuZGlmCisJ
CVNDVFBfWk9ORV9GUkVFKHpvbmVfbWJ1ZiwgbSk7CisJfQorCQkvKnVtZW1fY2FjaGVfZnJlZSh6
b25lX21idWYsIG0pOyovCisJcmV0dXJuIChuKTsKK30KKworCitzdGF0aWMgdm9pZAorY2x1c3Rf
Y29uc3RydWN0b3JfZHVwKGNhZGRyX3QgbV9jbHVzdCwgc3RydWN0IG1idWYqIG0pCit7CisJdV9p
bnQgKnJlZmNudDsKKwlpbnQgdHlwZSwgc2l6ZTsKKworCWlmIChtID09IE5VTEwpIHsKKwkJcmV0
dXJuOworCX0KKwkvKiBBc3NpZ25pbmcgY2x1c3RlciBvZiBNQ0xCWVRFUy4gVE9ETzogQWRkIGp1
bWJvIGZyYW1lIGZ1bmN0aW9uYWxpdHkgKi8KKwl0eXBlID0gRVhUX0NMVVNURVI7CisJc2l6ZSA9
IE1DTEJZVEVTOworCisJcmVmY250ID0gU0NUUF9aT05FX0dFVCh6b25lX2V4dF9yZWZjbnQsIHVf
aW50KTsKKwkvKnJlZmNudCA9ICh1X2ludCAqKXVtZW1fY2FjaGVfYWxsb2Moem9uZV9leHRfcmVm
Y250LCBVTUVNX0RFRkFVTFQpOyovCisjaWYgIWRlZmluZWQoU0NUUF9TSU1QTEVfQUxMT0NBVE9S
KQorCWlmIChyZWZjbnQgPT0gTlVMTCkgeworCQl1bWVtX3JlYXAoKTsKKwkJcmVmY250ID0gU0NU
UF9aT05FX0dFVCh6b25lX2V4dF9yZWZjbnQsIHVfaW50KTsKKwkJLypyZWZjbnQgPSAodV9pbnQg
Kil1bWVtX2NhY2hlX2FsbG9jKHpvbmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLworCX0K
KyNlbmRpZgorCSpyZWZjbnQgPSAxOworCW0tPm1fZXh0LmV4dF9idWYgPSAoY2FkZHJfdCltX2Ns
dXN0OworCW0tPm1fZGF0YSA9IG0tPm1fZXh0LmV4dF9idWY7CisJbS0+bV9mbGFncyB8PSBNX0VY
VDsKKwltLT5tX2V4dC5leHRfZnJlZSA9IE5VTEw7CisJbS0+bV9leHQuZXh0X2FyZ3MgPSBOVUxM
OworCW0tPm1fZXh0LmV4dF9zaXplID0gc2l6ZTsKKwltLT5tX2V4dC5leHRfdHlwZSA9IHR5cGU7
CisJbS0+bV9leHQucmVmX2NudCA9IHJlZmNudDsKKwlyZXR1cm47Cit9CisKKworLyogX19Vc2Vy
c3BhY2VfXyAqLwordm9pZAorbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhvdykKK3sKKwlj
YWRkcl90IG1jbHVzdF9yZXQ7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJ
c3RydWN0IGNsdXN0X2FyZ3MgY2x1c3RfbWJfYXJnc19sOworI2VuZGlmCisJaWYgKG0tPm1fZmxh
Z3MgJiBNX0VYVCkgeworCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6ICVwIG1idWYgYWxy
ZWFkeSBoYXMgY2x1c3RlclxuIiwgX19mdW5jX18sICh2b2lkICopbSk7CisJfQorCW0tPm1fZXh0
LmV4dF9idWYgPSAoY2hhciAqKU5VTEw7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FU
T1IpCisJY2x1c3RfbWJfYXJnc19sLnBhcmVudF9tYnVmID0gbTsKKyNlbmRpZgorCW1jbHVzdF9y
ZXQgPSBTQ1RQX1pPTkVfR0VUKHpvbmVfY2x1c3QsIGNoYXIpOworI2lmIGRlZmluZWQoU0NUUF9T
SU1QTEVfQUxMT0NBVE9SKQorCW1iX2N0b3JfY2x1c3QobWNsdXN0X3JldCwgJmNsdXN0X21iX2Fy
Z3NfbCwgMCk7CisjZW5kaWYKKwkvKm1jbHVzdF9yZXQgPSB1bWVtX2NhY2hlX2FsbG9jKHpvbmVf
Y2x1c3QsIFVNRU1fREVGQVVMVCk7Ki8KKwkvKgorCSBPbiBhIGNsdXN0ZXIgYWxsb2NhdGlvbiBm
YWlsdXJlLCBjYWxsIHVtZW1fcmVhcCgpIGFuZCByZXRyeS4KKwkgKi8KKworCWlmIChtY2x1c3Rf
cmV0ID09IE5VTEwpIHsKKyNpZiAhZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJLyoJ
bWNsdXN0X3JldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7CisJCW1iX2N0b3Jf
Y2x1c3QobWNsdXN0X3JldCwgJmNsdXN0X21iX2FyZ3MsIDApOworI2Vsc2UqLworCQl1bWVtX3Jl
YXAoKTsKKwkJbWNsdXN0X3JldCA9IFNDVFBfWk9ORV9HRVQoem9uZV9jbHVzdCwgY2hhcik7Cisj
ZW5kaWYKKwkJLyptY2x1c3RfcmV0ID0gdW1lbV9jYWNoZV9hbGxvYyh6b25lX2NsdXN0LCBVTUVN
X0RFRkFVTFQpOyovCisJCWlmIChOVUxMID09IG1jbHVzdF9yZXQpIHsKKwkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIGluICVzXG4iLCBfX2Z1bmNf
Xyk7CisJCX0KKwl9CisKKyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJaWYgKChtLT5tX2V4
dC5leHRfYnVmID09IE5VTEwpKSB7CisJCWNsdXN0X2NvbnN0cnVjdG9yX2R1cChtY2x1c3RfcmV0
LCBtKTsKKwl9CisjZWxzZQorCWNsdXN0X2NvbnN0cnVjdG9yX2R1cChtY2x1c3RfcmV0LCBtKTsK
KyNlbmRpZgorfQorCitzdHJ1Y3QgbWJ1ZiAqCittX2dldG0yKHN0cnVjdCBtYnVmICptLCBpbnQg
bGVuLCBpbnQgaG93LCBzaG9ydCB0eXBlLCBpbnQgZmxhZ3MsIGludCBhbGxvbmVidWYpCit7CisJ
c3RydWN0IG1idWYgKm1iLCAqbm0gPSBOVUxMLCAqbXRhaWwgPSBOVUxMOworCWludCBzaXplID0g
MCwgbWJ1Zl90aHJlc2hvbGQsIHNwYWNlX25lZWRlZCA9IGxlbjsKKworCUtBU1NFUlQobGVuID49
IDAsICgiJXM6IGxlbiBpcyA8IDAiLCBfX2Z1bmNfXykpOworCisJLyogVmFsaWRhdGUgZmxhZ3Mu
ICovCisJZmxhZ3MgJj0gKE1fUEtUSERSIHwgTV9FT1IpOworCisJLyogUGFja2V0IGhlYWRlciBt
YnVmIG11c3QgYmUgZmlyc3QgaW4gY2hhaW4uICovCisJaWYgKChmbGFncyAmIE1fUEtUSERSKSAm
JiBtICE9IE5VTEwpIHsKKwkJZmxhZ3MgJj0gfk1fUEtUSERSOworCX0KKworCWlmIChhbGxvbmVi
dWYgPT0gMCkKKwkJbWJ1Zl90aHJlc2hvbGQgPSBTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfbWJ1Zl90
aHJlc2hvbGRfY291bnQpOworCWVsc2UKKwkJbWJ1Zl90aHJlc2hvbGQgPSAxOworCisJLyogTG9v
cCBhbmQgYXBwZW5kIG1heGltdW0gc2l6ZWQgbWJ1ZnMgdG8gdGhlIGNoYWluIHRhaWwuICovCisJ
d2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKCghYWxsb25lYnVmICYmIGxlbiA+PSBNQ0xCWVRFUykg
fHwgKGxlbiA+IChpbnQpKCgobWJ1Zl90aHJlc2hvbGQgLSAxKSAqIE1MRU4pICsgTUhMRU4pKSkg
eworCQkJbWIgPSBtX2dldGhkcihob3csIHR5cGUpOworCQkJTUNMR0VUKG1iLCBob3cpOworCQkJ
c2l6ZSA9IE1DTEJZVEVTOworCQkJLy9TQ1RQX0JVRl9MRU4obWIpID0gTUNMQllURVM7CisJCX0g
ZWxzZSBpZiAoZmxhZ3MgJiBNX1BLVEhEUikgeworCQkJbWIgPSBtX2dldGhkcihob3csIHR5cGUp
OworCQkJaWYgKGxlbiA8IE1ITEVOKSB7CisJCQkJc2l6ZSA9IGxlbjsKKwkJCX0gZWxzZSB7CisJ
CQkJc2l6ZSA9IE1ITEVOOworCQkJfQorCQl9IGVsc2UgeworCQkJbWIgPSBtX2dldChob3csIHR5
cGUpOworCQkJaWYgKGxlbiA8IE1MRU4pIHsKKwkJCQlzaXplID0gbGVuOworCQkJfSBlbHNlIHsK
KwkJCQlzaXplID0gTUxFTjsKKwkJCX0KKwkJfQorCisJCS8qIEZhaWwgdGhlIHdob2xlIG9wZXJh
dGlvbiBpZiBvbmUgbWJ1ZiBjYW4ndCBiZSBhbGxvY2F0ZWQuICovCisJCWlmIChtYiA9PSBOVUxM
KSB7CisJCQlpZiAobm0gIT0gTlVMTCkKKwkJCQltX2ZyZWVtKG5tKTsKKwkJCXJldHVybiAoTlVM
TCk7CisJCX0KKworCQlpZiAoYWxsb25lYnVmICE9IDAgJiYgc2l6ZSA8IHNwYWNlX25lZWRlZCkg
eworCQkJbV9mcmVlbShtKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKworCQkvKiBCb29rIGtl
ZXBpbmcuICovCisJCWxlbiAtPSBzaXplOworCQlpZiAobXRhaWwgIT0gTlVMTCkKKwkJCW10YWls
LT5tX25leHQgPSBtYjsKKwkJZWxzZQorCQkJbm0gPSBtYjsKKwkJbXRhaWwgPSBtYjsKKwkJZmxh
Z3MgJj0gfk1fUEtUSERSOyAgICAgLyogT25seSB2YWxpZCBvbiB0aGUgZmlyc3QgbWJ1Zi4gKi8K
Kwl9CisJaWYgKGZsYWdzICYgTV9FT1IpIHsKKwkJbXRhaWwtPm1fZmxhZ3MgfD0gTV9FT1I7ICAv
KiBPbmx5IHZhbGlkIG9uIHRoZSBsYXN0IG1idWYuICovCisJfQorCisJLyogSWYgbWJ1ZiB3YXMg
c3VwcGxpZWQsIGFwcGVuZCBuZXcgY2hhaW4gdG8gdGhlIGVuZCBvZiBpdC4gKi8KKwlpZiAobSAh
PSBOVUxMKSB7CisJCWZvciAobXRhaWwgPSBtOyBtdGFpbC0+bV9uZXh0ICE9IE5VTEw7IG10YWls
ID0gbXRhaWwtPm1fbmV4dCk7CisJCW10YWlsLT5tX25leHQgPSBubTsKKwkJbXRhaWwtPm1fZmxh
Z3MgJj0gfk1fRU9SOworCX0gZWxzZSB7CisJCW0gPSBubTsKKwl9CisKKwlyZXR1cm4gKG0pOwor
fQorCisvKgorICogQ29weSB0aGUgY29udGVudHMgb2YgdWlvIGludG8gYSBwcm9wZXJseSBzaXpl
ZCBtYnVmIGNoYWluLgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX3Vpb3RvbWJ1ZihzdHJ1Y3QgdWlv
ICp1aW8sIGludCBob3csIGludCBsZW4sIGludCBhbGlnbiwgaW50IGZsYWdzKQoreworCXN0cnVj
dCBtYnVmICptLCAqbWI7CisJaW50IGVycm9yLCBsZW5ndGg7CisJc3NpemVfdCB0b3RhbDsKKwlp
bnQgcHJvZ3Jlc3MgPSAwOworCisJLyoKKwkgKiBsZW4gY2FuIGJlIHplcm8gb3IgYW4gYXJiaXRy
YXJ5IGxhcmdlIHZhbHVlIGJvdW5kIGJ5CisJICogdGhlIHRvdGFsIGRhdGEgc3VwcGxpZWQgYnkg
dGhlIHVpby4KKwkgKi8KKwlpZiAobGVuID4gMCkKKwkJdG90YWwgPSBtaW4odWlvLT51aW9fcmVz
aWQsIGxlbik7CisJZWxzZQorCQl0b3RhbCA9IHVpby0+dWlvX3Jlc2lkOworCS8qCisJICogVGhl
IHNtYWxsZXN0IHVuaXQgcmV0dXJuZWQgYnkgbV9nZXRtMigpIGlzIGEgc2luZ2xlIG1idWYKKwkg
KiB3aXRoIHBrdGhkci4gIFdlIGNhbid0IGFsaWduIHBhc3QgaXQuCisJICovCisJaWYgKGFsaWdu
ID49IE1ITEVOKQorCQlyZXR1cm4gKE5VTEwpOworCS8qCisJICogR2l2ZSB1cyB0aGUgZnVsbCBh
bGxvY2F0aW9uIG9yIG5vdGhpbmcuCisJICogSWYgbGVuIGlzIHplcm8gcmV0dXJuIHRoZSBzbWFs
bGVzdCBlbXB0eSBtYnVmLgorCSAqLworCW0gPSBtX2dldG0yKE5VTEwsIChpbnQpbWF4KHRvdGFs
ICsgYWxpZ24sIDEpLCBob3csIE1UX0RBVEEsIGZsYWdzLCAwKTsKKwlpZiAobSA9PSBOVUxMKQor
CQlyZXR1cm4gKE5VTEwpOworCW0tPm1fZGF0YSArPSBhbGlnbjsKKworCS8qIEZpbGwgYWxsIG1i
dWZzIHdpdGggdWlvIGRhdGEgYW5kIHVwZGF0ZSBoZWFkZXIgaW5mb3JtYXRpb24uICovCisJZm9y
IChtYiA9IG07IG1iICE9IE5VTEw7IG1iID0gbWItPm1fbmV4dCkgeworCQlsZW5ndGggPSAoaW50
KW1pbihNX1RSQUlMSU5HU1BBQ0UobWIpLCB0b3RhbCAtIHByb2dyZXNzKTsKKwkJZXJyb3IgPSB1
aW9tb3ZlKG10b2QobWIsIHZvaWQgKiksIGxlbmd0aCwgdWlvKTsKKwkJaWYgKGVycm9yKSB7CisJ
CQltX2ZyZWVtKG0pOworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisJCW1iLT5tX2xlbiA9IGxl
bmd0aDsKKwkJcHJvZ3Jlc3MgKz0gbGVuZ3RoOworCQlpZiAoZmxhZ3MgJiBNX1BLVEhEUikKKwkJ
CW0tPm1fcGt0aGRyLmxlbiArPSBsZW5ndGg7CisJfQorCUtBU1NFUlQocHJvZ3Jlc3MgPT0gdG90
YWwsICgiJXM6IHByb2dyZXNzICE9IHRvdGFsIiwgX19mdW5jX18pKTsKKworCXJldHVybiAobSk7
Cit9CisKK3VfaW50CittX2xlbmd0aChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVmICoqbGFz
dCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwl1X2ludCBsZW47CisKKwlsZW4gPSAwOworCWZvciAo
bSA9IG0wOyBtICE9IE5VTEw7IG0gPSBtLT5tX25leHQpIHsKKwkJbGVuICs9IG0tPm1fbGVuOwor
CQlpZiAobS0+bV9uZXh0ID09IE5VTEwpCisJCQlicmVhazsKKwl9CisJaWYgKGxhc3QgIT0gTlVM
TCkKKwkqbGFzdCA9IG07CisJcmV0dXJuIChsZW4pOworfQorCitzdHJ1Y3QgbWJ1ZiAqCittX2xh
c3Qoc3RydWN0IG1idWYgKm0pCit7CisJd2hpbGUgKG0tPm1fbmV4dCkgeworCQltID0gbS0+bV9u
ZXh0OworCX0KKwlyZXR1cm4gKG0pOworfQorCisvKgorICogVW5saW5rIGEgdGFnIGZyb20gdGhl
IGxpc3Qgb2YgdGFncyBhc3NvY2lhdGVkIHdpdGggYW4gbWJ1Zi4KKyAqLworc3RhdGljIF9faW5s
aW5lIHZvaWQKK21fdGFnX3VubGluayhzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1fdGFnICp0KQor
eworCisJU0xJU1RfUkVNT1ZFKCZtLT5tX3BrdGhkci50YWdzLCB0LCBtX3RhZywgbV90YWdfbGlu
ayk7Cit9CisKKy8qCisgKiBSZWNsYWltIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSB0YWcu
CisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkCittX3RhZ19mcmVlKHN0cnVjdCBtX3RhZyAqdCkK
K3sKKworCSgqdC0+bV90YWdfZnJlZSkodCk7Cit9CisKKy8qCisgKiBTZXQgdXAgdGhlIGNvbnRl
bnRzIG9mIGEgdGFnLiAgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZmlsbCBpbiB0aGUgZnJlZQor
ICogbWV0aG9kOyB0aGUgY2FsbGVyIGlzIGV4cGVjdGVkIHRvIGRvIHRoYXQuCisgKgorICogWFhY
IHByb2JhYmx5IHNob3VsZCBiZSBjYWxsZWQgbV90YWdfaW5pdCwgYnV0IHRoYXQgd2FzIGFscmVh
ZHkgdGFrZW4uCisgKi8KK3N0YXRpYyBfX2lubGluZSB2b2lkCittX3RhZ19zZXR1cChzdHJ1Y3Qg
bV90YWcgKnQsIHVfaW50MzJfdCBjb29raWUsIGludCB0eXBlLCBpbnQgbGVuKQoreworCisJdC0+
bV90YWdfaWQgPSB0eXBlOworCXQtPm1fdGFnX2xlbiA9IGxlbjsKKwl0LT5tX3RhZ19jb29raWUg
PSBjb29raWU7Cit9CisKKy8qKioqKioqKioqKiogRW5kIGZ1bmN0aW9ucyBmcm9tIHVzZXJfbWJ1
Zi5oICAqKioqKioqKioqKioqKioqKiovCisKKworCisvKioqKioqKioqKioqIEVuZCBmdW5jdGlv
bnMgdG8gc3Vic3RpdHV0ZSB1bWVtX2NhY2hlX2FsbG9jIGFuZCB1bWVtX2NhY2hlX2ZyZWUgKioq
KioqKioqKioqKiovCisKK3ZvaWQKK21idWZfaW5pdGlhbGl6ZSh2b2lkICpkdW1teSkKK3sKKwor
CS8qCisJICogX19Vc2Vyc3BhY2VfX0NvbmZpZ3VyZSBVTUEgem9uZXMgZm9yIE1idWZzIGFuZCBD
bHVzdGVycy4KKwkgKiAoVE9ETzogbV9nZXRjbCgpIC0gdXNpbmcgcGFja2V0IHNlY29uZGFyeSB6
b25lKS4KKwkgKiBUaGVyZSBpcyBubyBwcm92aXNpb24gZm9yIHRyYXNoX2luaXQgYW5kIHRyYXNo
X2ZpbmkgaW4gdW1lbS4KKwkgKgorCSAqLworIC8qIHpvbmVfbWJ1ZiA9IHVtZW1fY2FjaGVfY3Jl
YXRlKE1CVUZfTUVNX05BTUUsIE1TSVpFLCAwLAorCQkJCW1iX2N0b3JfbWJ1ZiwgbWJfZHRvcl9t
YnVmLCBOVUxMLAorCQkJCSZtYnVmX21iX2FyZ3MsCisJCQkJTlVMTCwgMCk7CisJem9uZV9tYnVm
ID0gdW1lbV9jYWNoZV9jcmVhdGUoTUJVRl9NRU1fTkFNRSwgTVNJWkUsIDAsIE5VTEwsIE5VTEws
IE5VTEwsIE5VTEwsIE5VTEwsIDApOyovCisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FU
T1IpCisJU0NUUF9aT05FX0lOSVQoem9uZV9tYnVmLCBNQlVGX01FTV9OQU1FLCBNU0laRSwgMCk7
CisjZWxzZQorCXpvbmVfbWJ1ZiA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfTUVNX05BTUUsIE1T
SVpFLCAwLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1iX2N0b3JfbWJ1ZiwgbWJf
ZHRvcl9tYnVmLCBOVUxMLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VVUxMLAor
CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworI2VuZGlmCisJLyp6b25l
X2V4dF9yZWZjbnQgPSB1bWVtX2NhY2hlX2NyZWF0ZShNQlVGX0VYVFJFRkNOVF9NRU1fTkFNRSwg
c2l6ZW9mKHVfaW50KSwgMCwKKwkJCQlOVUxMLCBOVUxMLCBOVUxMLAorCQkJCU5VTEwsCisJCQkJ
TlVMTCwgMCk7Ki8KKwlTQ1RQX1pPTkVfSU5JVCh6b25lX2V4dF9yZWZjbnQsIE1CVUZfRVhUUkVG
Q05UX01FTV9OQU1FLCBzaXplb2YodV9pbnQpLCAwKTsKKworICAvKnpvbmVfY2x1c3QgPSB1bWVt
X2NhY2hlX2NyZWF0ZShNQlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAwLAorCQkJCSBt
Yl9jdG9yX2NsdXN0LCBtYl9kdG9yX2NsdXN0LCBOVUxMLAorCQkJCSAmY2x1c3RfbWJfYXJncywK
KwkJCQkgTlVMTCwgMCk7CisJem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xV
U1RFUl9NRU1fTkFNRSwgTUNMQllURVMsIDAsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEws
MCk7Ki8KKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKKwlTQ1RQX1pPTkVfSU5J
VCh6b25lX2NsdXN0LCBNQlVGX0NMVVNURVJfTUVNX05BTUUsIE1DTEJZVEVTLCAwKTsKKyNlbHNl
CisJem9uZV9jbHVzdCA9IHVtZW1fY2FjaGVfY3JlYXRlKE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSwg
TUNMQllURVMsIDAsCisJCQkJCQkJCSAgIG1iX2N0b3JfY2x1c3QsIG1iX2R0b3JfY2x1c3QsIE5V
TEwsCisJCQkJCQkJCSAgICZjbHVzdF9tYl9hcmdzLAorCQkJCQkJCQkgICBOVUxMLCAwKTsKKyNl
bmRpZgorCisJLyogdW1hX3ByZWFsbG9jKCkgZ29lcyBoZXJlLi4uICovCisKKwkvKiBfX1VzZXJz
cGFjZV9fIEFkZCB1bWVtX3JlYXAgaGVyZSBmb3IgbG93IG1lbW9yeSBzaXR1YXRpb24/CisJICoK
KwkgKi8KKworCisJLyoKKwkgKiBbUmVdc2V0IGNvdW50ZXJzIGFuZCBsb2NhbCBzdGF0aXN0aWNz
IGtub2JzLgorCSAqCisJICovCisKKwltYnN0YXQubV9tYnVmcyA9IDA7CisJbWJzdGF0Lm1fbWNs
dXN0cyA9IDA7CisJbWJzdGF0Lm1fZHJhaW4gPSAwOworCW1ic3RhdC5tX21zaXplID0gTVNJWkU7
CisJbWJzdGF0Lm1fbWNsYnl0ZXMgPSBNQ0xCWVRFUzsKKwltYnN0YXQubV9taW5jbHNpemUgPSBN
SU5DTFNJWkU7CisJbWJzdGF0Lm1fbWxlbiA9IE1MRU47CisJbWJzdGF0Lm1fbWhsZW4gPSBNSExF
TjsKKwltYnN0YXQubV9udW10eXBlcyA9IE1UX05UWVBFUzsKKworCW1ic3RhdC5tX21jZmFpbCA9
IG1ic3RhdC5tX21wZmFpbCA9IDA7CisJbWJzdGF0LnNmX2lvY250ID0gMDsKKwltYnN0YXQuc2Zf
YWxsb2N3YWl0ID0gbWJzdGF0LnNmX2FsbG9jZmFpbCA9IDA7CisKK30KKworCisKKy8qCisgKiBf
X1VzZXJzcGFjZV9fCisgKgorICogQ29uc3RydWN0b3IgZm9yIE1idWYgbWFzdGVyIHpvbmUuIFdl
IGhhdmUgYSBkaWZmZXJlbnQgY29uc3RydWN0b3IKKyAqIGZvciBhbGxvY2F0aW5nIHRoZSBjbHVz
dGVyLgorICoKKyAqIFRoZSAnYXJnJyBwb2ludGVyIHBvaW50cyB0byBhIG1iX2FyZ3Mgc3RydWN0
dXJlIHdoaWNoCisgKiBjb250YWlucyBjYWxsLXNwZWNpZmljIGluZm9ybWF0aW9uIHJlcXVpcmVk
IHRvIHN1cHBvcnQgdGhlCisgKiBtYnVmIGFsbG9jYXRpb24gQVBJLiAgU2VlIHVzZXJfbWJ1Zi5o
LgorICoKKyAqIFRoZSBmbGdzIHBhcmFtZXRlciBiZWxvdyBjYW4gYmUgVU1FTV9ERUZBVUxUIG9y
IFVNRU1fTk9GQUlMIGRlcGVuZGluZyBvbiB3aGF0CisgKiB3YXMgcGFzc2VkIHdoZW4gdW1lbV9j
YWNoZV9hbGxvYyB3YXMgY2FsbGVkLgorICogVE9ETzogVXNlIFVNRU1fTk9GQUlMIGluIHVtZW1f
Y2FjaGVfYWxsb2MgYW5kIGFsc28gZGVmaW5lIGEgZmFpbHVyZSBoYW5kbGVyCisgKiBhbmQgY2Fs
bCB1bWVtX25vZmFpbF9jYWxsYmFjayhteV9mYWlsdXJlX2hhbmRsZXIpIGluIHRoZSBzdGFjayBp
bml0aWFsaXphdGlvbiByb3V0aW5lcworICogVGhlIGFkdmFudGFnZSBvZiB1c2luZyBVTUVNX05P
RkFJTCBpcyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gY2hlY2sgaWYgdW1lbV9jYWNoZV9hbGxvYwor
ICogd2FzIHN1Y2Nlc3NmdWwgb3Igbm90LiBUaGUgZmFpbHVyZSBoYW5kbGVyIHdvdWxkIHRha2Ug
Y2FyZSBvZiBpdCwgaWYgd2UgdXNlIHRoZSBVTUVNX05PRkFJTAorICogZmxhZy4KKyAqCisgKiBO
T1RFIFJlZjogaHR0cDovL2RvY3Muc3VuLmNvbS9hcHAvZG9jcy9kb2MvODE5LTIyNDMvNm40aTA5
OXAyP2w9ZW4mYT12aWV3JnE9dW1lbV96YWxsb2MpCisgKiBUaGUgdW1lbV9ub2ZhaWxfY2FsbGJh
Y2soKSBmdW5jdGlvbiBzZXRzIHRoZSAqKnByb2Nlc3Mtd2lkZSoqIFVNRU1fTk9GQUlMIGNhbGxi
YWNrLgorICogSXQgYWxzbyBtZW50aW9ucyB0aGF0IHVtZW1fbm9mYWlsX2NhbGxiYWNrIGlzIEV2
b2x2aW5nLgorICoKKyAqLworc3RhdGljIGludAorbWJfY3Rvcl9tYnVmKHZvaWQgKm1lbSwgdm9p
ZCAqYXJnLCBpbnQgZmxncykKK3sKKyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJc3RydWN0
IG1idWYgKm07CisJc3RydWN0IG1iX2FyZ3MgKmFyZ3M7CisKKwlpbnQgZmxhZ3M7CisJc2hvcnQg
dHlwZTsKKworCW0gPSAoc3RydWN0IG1idWYgKiltZW07CisJYXJncyA9IChzdHJ1Y3QgbWJfYXJn
cyAqKWFyZzsKKwlmbGFncyA9IGFyZ3MtPmZsYWdzOworCXR5cGUgPSBhcmdzLT50eXBlOworCisJ
LyoKKwkgKiBUaGUgbWJ1ZiBpcyBpbml0aWFsaXplZCBsYXRlci4KKwkgKgorCSAqLworCWlmICh0
eXBlID09IE1UX05PSU5JVCkKKwkJcmV0dXJuICgwKTsKKworCW0tPm1fbmV4dCA9IE5VTEw7CisJ
bS0+bV9uZXh0cGt0ID0gTlVMTDsKKwltLT5tX2xlbiA9IDA7CisJbS0+bV9mbGFncyA9IGZsYWdz
OworCW0tPm1fdHlwZSA9IHR5cGU7CisJaWYgKGZsYWdzICYgTV9QS1RIRFIpIHsKKwkJbS0+bV9k
YXRhID0gbS0+bV9wa3RkYXQ7CisJCW0tPm1fcGt0aGRyLnJjdmlmID0gTlVMTDsKKwkJbS0+bV9w
a3RoZHIubGVuID0gMDsKKwkJbS0+bV9wa3RoZHIuaGVhZGVyID0gTlVMTDsKKwkJbS0+bV9wa3Ro
ZHIuY3N1bV9mbGFncyA9IDA7CisJCW0tPm1fcGt0aGRyLmNzdW1fZGF0YSA9IDA7CisJCW0tPm1f
cGt0aGRyLnRzb19zZWdzeiA9IDA7CisJCW0tPm1fcGt0aGRyLmV0aGVyX3Z0YWcgPSAwOworCQlT
TElTVF9JTklUKCZtLT5tX3BrdGhkci50YWdzKTsKKwl9IGVsc2UKKwkJbS0+bV9kYXRhID0gbS0+
bV9kYXQ7CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCisKKy8qCisgKiBfX1VzZXJzcGFjZV9f
CisgKiBUaGUgTWJ1ZiBtYXN0ZXIgem9uZSBkZXN0cnVjdG9yLgorICogVGhpcyB3b3VsZCBiZSBj
YWxsZWQgaW4gcmVzcG9uc2UgdG8gdW1lbV9jYWNoZV9kZXN0cm95CisgKiBUT0RPOiBSZWNoZWNr
IGlmIHRoaXMgaXMgd2hhdCB3ZSB3YW50IHRvIGRvIGluIHRoaXMgZGVzdHJ1Y3Rvci4KKyAqIChO
b3RlOiB0aGUgbnVtYmVyIG9mIHRpbWVzIG1iX2R0b3JfbWJ1ZiBpcyBjYWxsZWQgaXMgZXF1YWwg
dG8gdGhlCisgKiBudW1iZXIgb2YgaW5kaXZpZHVhbCBtYnVmcyBhbGxvY2F0ZWQgZnJvbSB6b25l
X21idWYuCisgKi8KK3N0YXRpYyB2b2lkCittYl9kdG9yX21idWYodm9pZCAqbWVtLCB2b2lkICph
cmcpCit7CisJc3RydWN0IG1idWYgKm07CisKKwltID0gKHN0cnVjdCBtYnVmICopbWVtOworCWlm
ICgobS0+bV9mbGFncyAmIE1fUEtUSERSKSAhPSAwKSB7CisJCW1fdGFnX2RlbGV0ZV9jaGFpbiht
LCBOVUxMKTsKKwl9Cit9CisKKworLyogX19Vc2Vyc3BhY2VfXworICogVGhlIENsdXN0ZXIgem9u
ZSBjb25zdHJ1Y3Rvci4KKyAqCisgKiBIZXJlIHRoZSAnYXJnJyBwb2ludGVyIHBvaW50cyB0byB0
aGUgTWJ1ZiB3aGljaCB3ZQorICogYXJlIGNvbmZpZ3VyaW5nIGNsdXN0ZXIgc3RvcmFnZSBmb3Iu
ICBJZiAnYXJnJyBpcworICogZW1wdHkgd2UgYWxsb2NhdGUganVzdCB0aGUgY2x1c3RlciB3aXRo
b3V0IHNldHRpbmcKKyAqIHRoZSBtYnVmIHRvIGl0LiAgU2VlIG1idWYuaC4KKyAqLworc3RhdGlj
IGludAorbWJfY3Rvcl9jbHVzdCh2b2lkICptZW0sIHZvaWQgKmFyZywgaW50IGZsZ3MpCit7CisK
KyNpZiBVU0lOR19NQlVGX0NPTlNUUlVDVE9SCisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IGNs
dXN0X2FyZ3MgKiBjbGE7CisJdV9pbnQgKnJlZmNudDsKKwlpbnQgdHlwZSwgc2l6ZTsKKwlzY3Rw
X3pvbmVfdCB6b25lOworCisJLyogQXNzaWduaW5nIGNsdXN0ZXIgb2YgTUNMQllURVMuIFRPRE86
IEFkZCBqdW1ibyBmcmFtZSBmdW5jdGlvbmFsaXR5ICovCisJdHlwZSA9IEVYVF9DTFVTVEVSOwor
CXpvbmUgPSB6b25lX2NsdXN0OworCXNpemUgPSBNQ0xCWVRFUzsKKworCWNsYSA9IChzdHJ1Y3Qg
Y2x1c3RfYXJncyAqKWFyZzsKKwltID0gY2xhLT5wYXJlbnRfbWJ1ZjsKKworCXJlZmNudCA9IFND
VFBfWk9ORV9HRVQoem9uZV9leHRfcmVmY250LCB1X2ludCk7CisJLypyZWZjbnQgPSAodV9pbnQg
Kil1bWVtX2NhY2hlX2FsbG9jKHpvbmVfZXh0X3JlZmNudCwgVU1FTV9ERUZBVUxUKTsqLworCSpy
ZWZjbnQgPSAxOworCisJaWYgKG0gIT0gTlVMTCkgeworCQltLT5tX2V4dC5leHRfYnVmID0gKGNh
ZGRyX3QpbWVtOworCQltLT5tX2RhdGEgPSBtLT5tX2V4dC5leHRfYnVmOworCQltLT5tX2ZsYWdz
IHw9IE1fRVhUOworCQltLT5tX2V4dC5leHRfZnJlZSA9IE5VTEw7CisJCW0tPm1fZXh0LmV4dF9h
cmdzID0gTlVMTDsKKwkJbS0+bV9leHQuZXh0X3NpemUgPSBzaXplOworCQltLT5tX2V4dC5leHRf
dHlwZSA9IHR5cGU7CisJCW0tPm1fZXh0LnJlZl9jbnQgPSByZWZjbnQ7CisJfQorI2VuZGlmCisJ
cmV0dXJuICgwKTsKK30KKworLyogX19Vc2Vyc3BhY2VfXyAqLworc3RhdGljIHZvaWQKK21iX2R0
b3JfY2x1c3Qodm9pZCAqbWVtLCB2b2lkICphcmcpCit7CisKKyAgLyogbWVtIGlzIG9mIHR5cGUg
Y2FkZHJfdC4gIEluIHN5cy90eXBlcy5oIHdlIGhhdmUgdHlwZWRlZiBjaGFyICogY2FkZHJfdDsg
ICovCisgIC8qIG1iX2R0b3JfY2x1c3QgaXMgY2FsbGVkIGF0IHRpbWUgb2YgdW1lbV9jYWNoZV9k
ZXN0cm95KCkgKHRoZSBudW1iZXIgb2YgdGltZXMKKyAgICogbWJfZHRvcl9jbHVzdCBpcyBjYWxs
ZWQgaXMgZXF1YWwgdG8gdGhlIG51bWJlciBvZiBpbmRpdmlkdWFsIG1idWZzIGFsbG9jYXRlZAor
ICAgKiBmcm9tIHpvbmVfY2x1c3QuIFNpbWlsYXJseSBmb3IgbWJfZHRvcl9tYnVmKS4KKyAgICog
QXQgdGhpcyBwb2ludCB0aGUgZm9sbG93aW5nOgorICAgKiAgc3RydWN0IG1idWYgKm07CisgICAq
ICAgbSA9IChzdHJ1Y3QgbWJ1ZiAqKWFyZzsKKyAgICogIGFzc2VydCAoKihtLT5tX2V4dC5yZWZf
Y250KSA9PSAwKTsgaXMgbm90IG1lYW5pbmdmdWwgc2luY2UgIG0tPm1fZXh0LnJlZl9jbnQgPSBO
VUxMOworICAgKiAgaGFzIGJlZW4gZG9uZSBpbiBtYl9mcmVlX2V4dCgpLgorICAgKi8KKworfQor
CisKKworCisvKiBVbmxpbmsgYW5kIGZyZWUgYSBwYWNrZXQgdGFnLiAqLwordm9pZAorbV90YWdf
ZGVsZXRlKHN0cnVjdCBtYnVmICptLCBzdHJ1Y3QgbV90YWcgKnQpCit7CisJS0FTU0VSVChtICYm
IHQsICgibV90YWdfZGVsZXRlOiBudWxsIGFyZ3VtZW50LCBtICVwIHQgJXAiLCAodm9pZCAqKW0s
ICh2b2lkICopdCkpOworCW1fdGFnX3VubGluayhtLCB0KTsKKwltX3RhZ19mcmVlKHQpOworfQor
CisKKy8qIFVubGluayBhbmQgZnJlZSBhIHBhY2tldCB0YWcgY2hhaW4sIHN0YXJ0aW5nIGZyb20g
Z2l2ZW4gdGFnLiAqLwordm9pZAorbV90YWdfZGVsZXRlX2NoYWluKHN0cnVjdCBtYnVmICptLCBz
dHJ1Y3QgbV90YWcgKnQpCit7CisKKwlzdHJ1Y3QgbV90YWcgKnAsICpxOworCisJS0FTU0VSVCht
LCAoIm1fdGFnX2RlbGV0ZV9jaGFpbjogbnVsbCBtYnVmIikpOworCWlmICh0ICE9IE5VTEwpCisJ
CXAgPSB0OworCWVsc2UKKwkJcCA9IFNMSVNUX0ZJUlNUKCZtLT5tX3BrdGhkci50YWdzKTsKKwlp
ZiAocCA9PSBOVUxMKQorCQlyZXR1cm47CisJd2hpbGUgKChxID0gU0xJU1RfTkVYVChwLCBtX3Rh
Z19saW5rKSkgIT0gTlVMTCkKKwkJbV90YWdfZGVsZXRlKG0sIHEpOworCW1fdGFnX2RlbGV0ZSht
LCBwKTsKK30KKworI2lmIDAKK3N0YXRpYyB2b2lkCitzY3RwX3ByaW50X21idWZfY2hhaW4oc3Ry
dWN0IG1idWYgKm0pCit7CisJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19VU1IsICJQcmludGlu
ZyBtYnVmIGNoYWluICVwLlxuIiwgKHZvaWQgKiltKTsKKwlmb3IoOyBtOyBtPW0tPm1fbmV4dCkg
eworCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiVwOiBtX2xlbiA9ICVsZCwgbV90
eXBlID0gJXgsIG1fbmV4dCA9ICVwLlxuIiwgKHZvaWQgKiltLCBtLT5tX2xlbiwgbS0+bV90eXBl
LCAodm9pZCAqKW0tPm1fbmV4dCk7CisJCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpCisJCQlTQ1RQ
X0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiVwOiBleHRlbmRfc2l6ZSA9ICVkLCBleHRlbmRf
YnVmZmVyID0gJXAsIHJlZl9jbnQgPSAlZC5cbiIsICh2b2lkICopbSwgbS0+bV9leHQuZXh0X3Np
emUsICh2b2lkICopbS0+bV9leHQuZXh0X2J1ZiwgKihtLT5tX2V4dC5yZWZfY250KSk7CisJfQor
fQorI2VuZGlmCisKKy8qCisgKiBGcmVlIGFuIGVudGlyZSBjaGFpbiBvZiBtYnVmcyBhbmQgYXNz
b2NpYXRlZCBleHRlcm5hbCBidWZmZXJzLCBpZgorICogYXBwbGljYWJsZS4KKyAqLwordm9pZAor
bV9mcmVlbShzdHJ1Y3QgbWJ1ZiAqbWIpCit7CisJd2hpbGUgKG1iICE9IE5VTEwpCisJCW1iID0g
bV9mcmVlKG1iKTsKK30KKworLyoKKyAqIF9fVXNlcnNwYWNlX18KKyAqIGNsZWFuIG1idWZzIHdp
dGggTV9FWFQgc3RvcmFnZSBhdHRhY2hlZCB0byB0aGVtCisgKiBpZiB0aGUgcmVmZXJlbmNlIGNv
dW50IGhpdHMgMS4KKyAqLwordm9pZAorbWJfZnJlZV9leHQoc3RydWN0IG1idWYgKm0pCit7CisK
KwlpbnQgc2tpcG1idWY7CisKKwlLQVNTRVJUKChtLT5tX2ZsYWdzICYgTV9FWFQpID09IE1fRVhU
LCAoIiVzOiBNX0VYVCBub3Qgc2V0IiwgX19mdW5jX18pKTsKKwlLQVNTRVJUKG0tPm1fZXh0LnJl
Zl9jbnQgIT0gTlVMTCwgKCIlczogcmVmX2NudCBub3Qgc2V0IiwgX19mdW5jX18pKTsKKworCS8q
CisJICogY2hlY2sgaWYgdGhlIGhlYWRlciBpcyBlbWJlZGRlZCBpbiB0aGUgY2x1c3RlcgorCSAq
LworCXNraXBtYnVmID0gKG0tPm1fZmxhZ3MgJiBNX05PRlJFRSk7CisKKwkvKiBGcmVlIHRoZSBl
eHRlcm5hbCBhdHRhY2hlZCBzdG9yYWdlIGlmIHRoaXMKKwkgKiBtYnVmIGlzIHRoZSBvbmx5IHJl
ZmVyZW5jZSB0byBpdC4KKwkgKl9fVXNlcnNwYWNlX18gVE9ETzoganVtYm8gZnJhbWVzCisJICoK
KwkqLworCS8qIE5PVEU6IFdlIGhhZCB0aGUgc2FtZSBjb2RlIHRoYXQgU0NUUF9ERUNSRU1FTlRf
QU5EX0NIRUNLX1JFRkNPVU5UCisJICAgICAgICAgcmVkdWNlcyB0byBoZXJlIGJlZm9yZSBidXQg
dGhlIElQSE9ORSBtYWxsb2MgY29tbWl0IGhhZCBjaGFuZ2VkCisJICAgICAgICAgdGhpcyB0byBj
b21wYXJlIHRvIDAgaW5zdGVhZCBvZiAxIChzZWUgbmV4dCBsaW5lKS4gIFdoeT8KKwkgICAgICAg
IC4gLi4gdGhpcyBjYXVzZWQgYSBodWdlIG1lbW9yeSBsZWFrIGluIExpbnV4LgorCSovCisjaWZk
ZWYgSVBIT05FCisJaWYgKGF0b21pY19mZXRjaGFkZF9pbnQobS0+bV9leHQucmVmX2NudCwgLTEp
ID09IDApCisjZWxzZQorCWlmIChTQ1RQX0RFQ1JFTUVOVF9BTkRfQ0hFQ0tfUkVGQ09VTlQobS0+
bV9leHQucmVmX2NudCkpCisjZW5kaWYKKwl7CisJCWlmIChtLT5tX2V4dC5leHRfdHlwZSA9PSBF
WFRfQ0xVU1RFUil7CisjaWYgZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJCQltYl9k
dG9yX2NsdXN0KG0tPm1fZXh0LmV4dF9idWYsICZjbHVzdF9tYl9hcmdzKTsKKyNlbmRpZgorCQkJ
U0NUUF9aT05FX0ZSRUUoem9uZV9jbHVzdCwgbS0+bV9leHQuZXh0X2J1Zik7CisJCQlTQ1RQX1pP
TkVfRlJFRSh6b25lX2V4dF9yZWZjbnQsICh1X2ludCopbS0+bV9leHQucmVmX2NudCk7CisJCQlt
LT5tX2V4dC5yZWZfY250ID0gTlVMTDsKKwkJfQorCX0KKworCWlmIChza2lwbWJ1ZikKKwkJcmV0
dXJuOworCisKKwkvKiBfX1VzZXJzcGFjZV9fIEFsc28gZnJlZWluZyB0aGUgc3RvcmFnZSBmb3Ig
cmVmX2NudAorCSAqIEZyZWUgdGhpcyBtYnVmIGJhY2sgdG8gdGhlIG1idWYgem9uZSB3aXRoIGFs
bCBtX2V4dAorCSAqIGluZm9ybWF0aW9uIHB1cmdlZC4KKwkgKi8KKwltLT5tX2V4dC5leHRfYnVm
ID0gTlVMTDsKKwltLT5tX2V4dC5leHRfZnJlZSA9IE5VTEw7CisJbS0+bV9leHQuZXh0X2FyZ3Mg
PSBOVUxMOworCW0tPm1fZXh0LnJlZl9jbnQgPSBOVUxMOworCW0tPm1fZXh0LmV4dF9zaXplID0g
MDsKKwltLT5tX2V4dC5leHRfdHlwZSA9IDA7CisJbS0+bV9mbGFncyAmPSB+TV9FWFQ7CisjaWYg
ZGVmaW5lZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisJbWJfZHRvcl9tYnVmKG0sIE5VTEwpOwor
I2VuZGlmCisJU0NUUF9aT05FX0ZSRUUoem9uZV9tYnVmLCBtKTsKKworCS8qdW1lbV9jYWNoZV9m
cmVlKHpvbmVfbWJ1ZiwgbSk7Ki8KK30KKworLyoKKyAqICJNb3ZlIiBtYnVmIHBrdGhkciBmcm9t
ICJmcm9tIiB0byAidG8iLgorICogImZyb20iIG11c3QgaGF2ZSBNX1BLVEhEUiBzZXQsIGFuZCAi
dG8iIG11c3QgYmUgZW1wdHkuCisgKi8KK3ZvaWQKK21fbW92ZV9wa3RoZHIoc3RydWN0IG1idWYg
KnRvLCBzdHJ1Y3QgbWJ1ZiAqZnJvbSkKK3sKKworCXRvLT5tX2ZsYWdzID0gKGZyb20tPm1fZmxh
Z3MgJiBNX0NPUFlGTEFHUykgfCAodG8tPm1fZmxhZ3MgJiBNX0VYVCk7CisJaWYgKCh0by0+bV9m
bGFncyAmIE1fRVhUKSA9PSAwKQorCQl0by0+bV9kYXRhID0gdG8tPm1fcGt0ZGF0OworCXRvLT5t
X3BrdGhkciA9IGZyb20tPm1fcGt0aGRyOwkJLyogZXNwZWNpYWxseSB0YWdzICovCisJU0xJU1Rf
SU5JVCgmZnJvbS0+bV9wa3RoZHIudGFncyk7CS8qIHB1cmdlIHRhZ3MgZnJvbSBzcmMgKi8KKwlm
cm9tLT5tX2ZsYWdzICY9IH5NX1BLVEhEUjsKK30KKworCisvKgorICogUmVhcmFuZ2UgYW4gbWJ1
ZiBjaGFpbiBzbyB0aGF0IGxlbiBieXRlcyBhcmUgY29udGlndW91cworICogYW5kIGluIHRoZSBk
YXRhIGFyZWEgb2YgYW4gbWJ1ZiAoc28gdGhhdCBtdG9kIGFuZCBkdG9tCisgKiB3aWxsIHdvcmsg
Zm9yIGEgc3RydWN0dXJlIG9mIHNpemUgbGVuKS4gIFJldHVybnMgdGhlIHJlc3VsdGluZworICog
bWJ1ZiBjaGFpbiBvbiBzdWNjZXNzLCBmcmVlcyBpdCBhbmQgcmV0dXJucyBudWxsIG9uIGZhaWx1
cmUuCisgKiBJZiB0aGVyZSBpcyByb29tLCBpdCB3aWxsIGFkZCB1cCB0byBtYXhfcHJvdG9oZHIt
bGVuIGV4dHJhIGJ5dGVzIHRvIHRoZQorICogY29udGlndW91cyByZWdpb24gaW4gYW4gYXR0ZW1w
dCB0byBhdm9pZCBiZWluZyBjYWxsZWQgbmV4dCB0aW1lLgorICovCitzdHJ1Y3QgbWJ1ZiAqCitt
X3B1bGx1cChzdHJ1Y3QgbWJ1ZiAqbiwgaW50IGxlbikKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlp
bnQgY291bnQ7CisJaW50IHNwYWNlOworCisJLyoKKwkgKiBJZiBmaXJzdCBtYnVmIGhhcyBubyBj
bHVzdGVyLCBhbmQgaGFzIHJvb20gZm9yIGxlbiBieXRlcworCSAqIHdpdGhvdXQgc2hpZnRpbmcg
Y3VycmVudCBkYXRhLCBwdWxsdXAgaW50byBpdCwKKwkgKiBvdGhlcndpc2UgYWxsb2NhdGUgYSBu
ZXcgbWJ1ZiB0byBwcmVwZW5kIHRvIHRoZSBjaGFpbi4KKwkgKi8KKwlpZiAoKG4tPm1fZmxhZ3Mg
JiBNX0VYVCkgPT0gMCAmJgorCSAgICBuLT5tX2RhdGEgKyBsZW4gPCAmbi0+bV9kYXRbTUxFTl0g
JiYgbi0+bV9uZXh0KSB7CisJCWlmIChuLT5tX2xlbiA+PSBsZW4pCisJCQlyZXR1cm4gKG4pOwor
CQltID0gbjsKKwkJbiA9IG4tPm1fbmV4dDsKKwkJbGVuIC09IG0tPm1fbGVuOworCX0gZWxzZSB7
CisJCWlmIChsZW4gPiBNSExFTikKKwkJCWdvdG8gYmFkOworCQlNR0VUKG0sIE1fTk9XQUlULCBu
LT5tX3R5cGUpOworCQlpZiAobSA9PSBOVUxMKQorCQkJZ290byBiYWQ7CisJCW0tPm1fbGVuID0g
MDsKKwkJaWYgKG4tPm1fZmxhZ3MgJiBNX1BLVEhEUikKKwkJCU1fTU9WRV9QS1RIRFIobSwgbik7
CisJfQorCXNwYWNlID0gKGludCkoJm0tPm1fZGF0W01MRU5dIC0gKG0tPm1fZGF0YSArIG0tPm1f
bGVuKSk7CisJZG8geworCQljb3VudCA9IG1pbihtaW4obWF4KGxlbiwgbWF4X3Byb3RvaGRyKSwg
c3BhY2UpLCBuLT5tX2xlbik7CisJCW1lbWNweShtdG9kKG0sIGNhZGRyX3QpICsgbS0+bV9sZW4s
bXRvZChuLCBjYWRkcl90KSwgKHVfaW50KWNvdW50KTsKKwkJbGVuIC09IGNvdW50OworCQltLT5t
X2xlbiArPSBjb3VudDsKKwkJbi0+bV9sZW4gLT0gY291bnQ7CisJCXNwYWNlIC09IGNvdW50Owor
CQlpZiAobi0+bV9sZW4pCisJCQluLT5tX2RhdGEgKz0gY291bnQ7CisJCWVsc2UKKwkJCW4gPSBt
X2ZyZWUobik7CisJfSB3aGlsZSAobGVuID4gMCAmJiBuKTsKKwlpZiAobGVuID4gMCkgeworCQko
dm9pZCkgbV9mcmVlKG0pOworCQlnb3RvIGJhZDsKKwl9CisJbS0+bV9uZXh0ID0gbjsKKwlyZXR1
cm4gKG0pOworYmFkOgorCW1fZnJlZW0obik7CisJbWJzdGF0Lm1fbXBmYWlsKys7CS8qIFhYWDog
Tm8gY29uc2lzdGVuY3kuICovCisJcmV0dXJuIChOVUxMKTsKK30KKworCitzdGF0aWMgc3RydWN0
IG1idWYgKgorbV9kdXAxKHN0cnVjdCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgd2Fp
dCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbiA9IE5VTEw7CisJaW50IGNvcHloZHI7CisKKwlpZiAobGVu
ID4gTUNMQllURVMpCisJCXJldHVybiBOVUxMOworCWlmIChvZmYgPT0gMCAmJiAobS0+bV9mbGFn
cyAmIE1fUEtUSERSKSAhPSAwKQorCQljb3B5aGRyID0gMTsKKwllbHNlCisJCWNvcHloZHIgPSAw
OworCWlmIChsZW4gPj0gTUlOQ0xTSVpFKSB7CisJCWlmIChjb3B5aGRyID09IDEpIHsKKwkJCW1f
Y2xnZXQobiwgd2FpdCk7IC8qIFRPRE86IGluY2x1ZGUgY29kZSBmb3IgY29weWluZyB0aGUgaGVh
ZGVyICovCisJCQltX2R1cF9wa3RoZHIobiwgbSwgd2FpdCk7CisJCX0gZWxzZQorCQkJbV9jbGdl
dChuLCB3YWl0KTsKKwl9IGVsc2UgeworCQlpZiAoY29weWhkciA9PSAxKQorCQkJbiA9IG1fZ2V0
aGRyKHdhaXQsIG0tPm1fdHlwZSk7CisJCWVsc2UKKwkJCW4gPSBtX2dldCh3YWl0LCBtLT5tX3R5
cGUpOworCX0KKwlpZiAoIW4pCisJCXJldHVybiBOVUxMOyAvKiBFTk9CVUZTICovCisKKwlpZiAo
Y29weWhkciAmJiAhbV9kdXBfcGt0aGRyKG4sIG0sIHdhaXQpKSB7CisJCW1fZnJlZShuKTsKKwkJ
cmV0dXJuIE5VTEw7CisJfQorCW1fY29weWRhdGEobSwgb2ZmLCBsZW4sIG10b2QobiwgY2FkZHJf
dCkpOworCW4tPm1fbGVuID0gbGVuOworCXJldHVybiBuOworfQorCisKKy8qIFRha2VuIGZyb20g
c3lzL2tlcm4vdWlwY19tYnVmMi5jICovCitzdHJ1Y3QgbWJ1ZiAqCittX3B1bGxkb3duKHN0cnVj
dCBtYnVmICptLCBpbnQgb2ZmLCBpbnQgbGVuLCBpbnQgKm9mZnApCit7CisJc3RydWN0IG1idWYg
Km4sICpvOworCWludCBobGVuLCB0bGVuLCBvbGVuOworCWludCB3cml0YWJsZTsKKworCS8qIGNo
ZWNrIGludmFsaWQgYXJndW1lbnRzLiAqLworCUtBU1NFUlQobSwgKCJtID09IE5VTEwgaW4gbV9w
dWxsZG93bigpIikpOworCWlmIChsZW4gPiBNQ0xCWVRFUykgeworCQltX2ZyZWVtKG0pOworCQly
ZXR1cm4gTlVMTDsgICAgLyogaW1wb3NzaWJsZSAqLworCX0KKworI2lmZGVmIFBVTExET1dOX0RF
QlVHCisJeworCQlzdHJ1Y3QgbWJ1ZiAqdDsKKwkJU0NUUF9ERUJVR19VU1IoU0NUUF9ERUJVR19V
U1IsICJiZWZvcmU6Iik7CisJCWZvciAodCA9IG07IHQ7IHQgPSB0LT5tX25leHQpCisJCQlTQ1RQ
X0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgIiAlZCIsIHQtPm1fbGVuKTsKKwkJU0NUUF9ERUJV
R19VU1IoU0NUUF9ERUJVR19VU1IsICJcbiIpOworCX0KKyNlbmRpZgorCW4gPSBtOworCXdoaWxl
IChuICE9IE5VTEwgJiYgb2ZmID4gMCkgeworCQlpZiAobi0+bV9sZW4gPiBvZmYpCisJCQlicmVh
azsKKwkJb2ZmIC09IG4tPm1fbGVuOworCQluID0gbi0+bV9uZXh0OworCX0KKwkvKiBiZSBzdXJl
IHRvIHBvaW50IG5vbi1lbXB0eSBtYnVmICovCisJd2hpbGUgKG4gIT0gTlVMTCAmJiBuLT5tX2xl
biA9PSAwKQorCQluID0gbi0+bV9uZXh0OworCWlmICghbikgeworCQltX2ZyZWVtKG0pOworCQly
ZXR1cm4gTlVMTDsgICAgLyogbWJ1ZiBjaGFpbiB0b28gc2hvcnQgKi8KKwl9CisKKwl3cml0YWJs
ZSA9IDA7CisJaWYgKChuLT5tX2ZsYWdzICYgTV9FWFQpID09IDAgfHwKKwkgICAgKG4tPm1fZXh0
LmV4dF90eXBlID09IEVYVF9DTFVTVEVSICYmIE1fV1JJVEFCTEUobikpKQorCQl3cml0YWJsZSA9
IDE7CisKKwkvKgorCSAqIHRoZSB0YXJnZXQgZGF0YSBpcyBvbiA8biwgb2ZmPi4KKwkgKiBpZiB3
ZSBnb3QgZW5vdWdoIGRhdGEgb24gdGhlIG1idWYgIm4iLCB3ZSdyZSBkb25lLgorCSAqLworCWlm
ICgob2ZmID09IDAgfHwgb2ZmcCkgJiYgbGVuIDw9IG4tPm1fbGVuIC0gb2ZmICYmIHdyaXRhYmxl
KQorCQlnb3RvIG9rOworCisJLyoKKwkgKiB3aGVuIGxlbiA8PSBuLT5tX2xlbiAtIG9mZiBhbmQg
b2ZmICE9IDAsIGl0IGlzIGEgc3BlY2lhbCBjYXNlLgorCSAqIGxlbiBieXRlcyBmcm9tIDxuLCBv
ZmY+IHNpdHMgaW4gc2luZ2xlIG1idWYsIGJ1dCB0aGUgY2FsbGVyIGRvZXMKKwkgKiBub3QgbGlr
ZSB0aGUgc3RhcnRpbmcgcG9zaXRpb24gKG9mZikuCisJICogY2hvcCB0aGUgY3VycmVudCBtYnVm
IGludG8gdHdvIHBpZWNlcywgc2V0IG9mZiB0byAwLgorCSAqLworCWlmIChsZW4gPD0gbi0+bV9s
ZW4gLSBvZmYpIHsKKwkJbyA9IG1fZHVwMShuLCBvZmYsIG4tPm1fbGVuIC0gb2ZmLCBNX05PV0FJ
VCk7CisJCWlmIChvID09IE5VTEwpIHsKKwkJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAg
ICAvKiBFTk9CVUZTICovCisJCX0KKwkJbi0+bV9sZW4gPSBvZmY7CisJCW8tPm1fbmV4dCA9IG4t
Pm1fbmV4dDsKKwkJbi0+bV9uZXh0ID0gbzsKKwkJbiA9IG4tPm1fbmV4dDsKKwkJb2ZmID0gMDsK
KwkJZ290byBvazsKKwl9CisJLyoKKwkgKiB3ZSBuZWVkIHRvIHRha2UgaGxlbiBmcm9tIDxuLCBv
ZmY+IGFuZCB0bGVuIGZyb20gPG4tPm1fbmV4dCwgMD4sCisJICogYW5kIGNvbnN0cnVjdCBjb250
aWd1b3VzIG1idWYgd2l0aCBtX2xlbiA9PSBsZW4uCisJICogbm90ZSB0aGF0IGhsZW4gKyB0bGVu
ID09IGxlbiwgYW5kIHRsZW4gPiAwLgorCSAqLworCWhsZW4gPSBuLT5tX2xlbiAtIG9mZjsKKwl0
bGVuID0gbGVuIC0gaGxlbjsKKworCS8qCisJICogZW5zdXJlIHRoYXQgd2UgaGF2ZSBlbm91Z2gg
dHJhaWxpbmcgZGF0YSBvbiBtYnVmIGNoYWluLgorCSAqIGlmIG5vdCwgd2UgY2FuIGRvIG5vdGhp
bmcgYWJvdXQgdGhlIGNoYWluLgorCSAqLworCW9sZW4gPSAwOworCWZvciAobyA9IG4tPm1fbmV4
dDsgbyAhPSBOVUxMOyBvID0gby0+bV9uZXh0KQorCQlvbGVuICs9IG8tPm1fbGVuOworCWlmICho
bGVuICsgb2xlbiA8IGxlbikgeworCQltX2ZyZWVtKG0pOworCQlyZXR1cm4gTlVMTDsgICAgLyog
bWJ1ZiBjaGFpbiB0b28gc2hvcnQgKi8KKwl9CisKKwkvKgorCSAqIGVhc3kgY2FzZXMgZmlyc3Qu
CisJICogd2UgbmVlZCB0byB1c2UgbV9jb3B5ZGF0YSgpIHRvIGdldCBkYXRhIGZyb20gPG4tPm1f
bmV4dCwgMD4uCisJICovCisJaWYgKChvZmYgPT0gMCB8fCBvZmZwKSAmJiBNX1RSQUlMSU5HU1BB
Q0UobikgPj0gdGxlbgorCSAgICAmJiB3cml0YWJsZSkgeworCQltX2NvcHlkYXRhKG4tPm1fbmV4
dCwgMCwgdGxlbiwgbXRvZChuLCBjYWRkcl90KSArIG4tPm1fbGVuKTsKKwkJbi0+bV9sZW4gKz0g
dGxlbjsKKwkJbV9hZGoobi0+bV9uZXh0LCB0bGVuKTsKKwkJZ290byBvazsKKwl9CisKKwlpZiAo
KG9mZiA9PSAwIHx8IG9mZnApICYmIE1fTEVBRElOR1NQQUNFKG4tPm1fbmV4dCkgPj0gaGxlbgor
CSAgICAmJiB3cml0YWJsZSkgeworCQluLT5tX25leHQtPm1fZGF0YSAtPSBobGVuOworCQluLT5t
X25leHQtPm1fbGVuICs9IGhsZW47CisJCW1lbWNweSggbXRvZChuLT5tX25leHQsIGNhZGRyX3Qp
LCBtdG9kKG4sIGNhZGRyX3QpICsgb2ZmLGhsZW4pOworCQluLT5tX2xlbiAtPSBobGVuOworCQlu
ID0gbi0+bV9uZXh0OworCQlvZmYgPSAwOworCQlnb3RvIG9rOworCX0KKworCS8qCisJICogbm93
LCB3ZSBuZWVkIHRvIGRvIHRoZSBoYXJkIHdheS4gIGRvbid0IG1fY29weSBhcyB0aGVyZSdzIG5v
IHJvb20KKwkgKiBvbiBib3RoIGVuZC4KKwkgKi8KKwlpZiAobGVuID4gTUxFTikKKwkJbV9jbGdl
dChvLCBNX05PV0FJVCk7CisJCS8qIG8gPSBtX2dldGNsKE1fTk9XQUlULCBtLT5tX3R5cGUsIDAp
OyovCisJZWxzZQorCQlvID0gbV9nZXQoTV9OT1dBSVQsIG0tPm1fdHlwZSk7CisJaWYgKCFvKSB7
CisJCW1fZnJlZW0obSk7CisJCXJldHVybiBOVUxMOyAgICAvKiBFTk9CVUZTICovCisJfQorCS8q
IGdldCBobGVuIGZyb20gPG4sIG9mZj4gaW50byA8bywgMD4gKi8KKwlvLT5tX2xlbiA9IGhsZW47
CisJbWVtY3B5KG10b2QobywgY2FkZHJfdCksIG10b2QobiwgY2FkZHJfdCkgKyBvZmYsIGhsZW4p
OworCW4tPm1fbGVuIC09IGhsZW47CisJLyogZ2V0IHRsZW4gZnJvbSA8bi0+bV9uZXh0LCAwPiBp
bnRvIDxvLCBobGVuPiAqLworCW1fY29weWRhdGEobi0+bV9uZXh0LCAwLCB0bGVuLCBtdG9kKG8s
IGNhZGRyX3QpICsgby0+bV9sZW4pOworCW8tPm1fbGVuICs9IHRsZW47CisJbV9hZGoobi0+bV9u
ZXh0LCB0bGVuKTsKKwlvLT5tX25leHQgPSBuLT5tX25leHQ7CisJbi0+bV9uZXh0ID0gbzsKKwlu
ID0gbzsKKwlvZmYgPSAwOworb2s6CisjaWZkZWYgUFVMTERPV05fREVCVUcKKwl7CisJCXN0cnVj
dCBtYnVmICp0OworCQlTQ1RQX0RFQlVHX1VTUihTQ1RQX0RFQlVHX1VTUiwgImFmdGVyOiIpOwor
CQlmb3IgKHQgPSBtOyB0OyB0ID0gdC0+bV9uZXh0KQorCQkJU0NUUF9ERUJVR19VU1IoU0NUUF9E
RUJVR19VU1IsICIlYyVkIiwgdCA9PSBuID8gJyonIDogJyAnLCB0LT5tX2xlbik7CisJCVNDVFBf
REVCVUdfVVNSKFNDVFBfREVCVUdfVVNSLCAiIChvZmY9JWQpXG4iLCBvZmYpOworCX0KKyNlbmRp
ZgorCWlmIChvZmZwKQorCQkqb2ZmcCA9IG9mZjsKKwlyZXR1cm4gbjsKK30KKworLyoKKyAqIEF0
dGFjaCB0aGUgdGhlIGNsdXN0ZXIgZnJvbSAqbSB0byAqbiwgc2V0IHVwIG1fZXh0IGluICpuCisg
KiBhbmQgYnVtcCB0aGUgcmVmY291bnQgb2YgdGhlIGNsdXN0ZXIuCisgKi8KK3N0YXRpYyB2b2lk
CittYl9kdXBjbChzdHJ1Y3QgbWJ1ZiAqbiwgc3RydWN0IG1idWYgKm0pCit7CisJS0FTU0VSVCgo
bS0+bV9mbGFncyAmIE1fRVhUKSA9PSBNX0VYVCwgKCIlczogTV9FWFQgbm90IHNldCIsIF9fZnVu
Y19fKSk7CisJS0FTU0VSVChtLT5tX2V4dC5yZWZfY250ICE9IE5VTEwsICgiJXM6IHJlZl9jbnQg
bm90IHNldCIsIF9fZnVuY19fKSk7CisJS0FTU0VSVCgobi0+bV9mbGFncyAmIE1fRVhUKSA9PSAw
LCAoIiVzOiBNX0VYVCBzZXQiLCBfX2Z1bmNfXykpOworCisJaWYgKCoobS0+bV9leHQucmVmX2Nu
dCkgPT0gMSkKKwkJKihtLT5tX2V4dC5yZWZfY250KSArPSAxOworCWVsc2UKKwkJYXRvbWljX2Fk
ZF9pbnQobS0+bV9leHQucmVmX2NudCwgMSk7CisJbi0+bV9leHQuZXh0X2J1ZiA9IG0tPm1fZXh0
LmV4dF9idWY7CisJbi0+bV9leHQuZXh0X2ZyZWUgPSBtLT5tX2V4dC5leHRfZnJlZTsKKwluLT5t
X2V4dC5leHRfYXJncyA9IG0tPm1fZXh0LmV4dF9hcmdzOworCW4tPm1fZXh0LmV4dF9zaXplID0g
bS0+bV9leHQuZXh0X3NpemU7CisJbi0+bV9leHQucmVmX2NudCA9IG0tPm1fZXh0LnJlZl9jbnQ7
CisJbi0+bV9leHQuZXh0X3R5cGUgPSBtLT5tX2V4dC5leHRfdHlwZTsKKwluLT5tX2ZsYWdzIHw9
IE1fRVhUOworfQorCisKKy8qCisgKiBNYWtlIGEgY29weSBvZiBhbiBtYnVmIGNoYWluIHN0YXJ0
aW5nICJvZmYwIiBieXRlcyBmcm9tIHRoZSBiZWdpbm5pbmcsCisgKiBjb250aW51aW5nIGZvciAi
bGVuIiBieXRlcy4gIElmIGxlbiBpcyBNX0NPUFlBTEwsIGNvcHkgdG8gZW5kIG9mIG1idWYuCisg
KiBUaGUgd2FpdCBwYXJhbWV0ZXIgaXMgYSBjaG9pY2Ugb2YgTV9UUllXQUlUL01fTk9XQUlUIGZy
b20gY2FsbGVyLgorICogTm90ZSB0aGF0IHRoZSBjb3B5IGlzIHJlYWQtb25seSwgYmVjYXVzZSBj
bHVzdGVycyBhcmUgbm90IGNvcGllZCwKKyAqIG9ubHkgdGhlaXIgcmVmZXJlbmNlIGNvdW50cyBh
cmUgaW5jcmVtZW50ZWQuCisgKi8KKworc3RydWN0IG1idWYgKgorbV9jb3B5bShzdHJ1Y3QgbWJ1
ZiAqbSwgaW50IG9mZjAsIGludCBsZW4sIGludCB3YWl0KQoreworCXN0cnVjdCBtYnVmICpuLCAq
Km5wOworCWludCBvZmYgPSBvZmYwOworCXN0cnVjdCBtYnVmICp0b3A7CisJaW50IGNvcHloZHIg
PSAwOworCisJS0FTU0VSVChvZmYgPj0gMCwgKCJtX2NvcHltLCBuZWdhdGl2ZSBvZmYgJWQiLCBv
ZmYpKTsKKwlLQVNTRVJUKGxlbiA+PSAwLCAoIm1fY29weW0sIG5lZ2F0aXZlIGxlbiAlZCIsIGxl
bikpOworCUtBU1NFUlQobSAhPSBOVUxMLCAoIm1fY29weW0sIG0gaXMgTlVMTCIpKTsKKworI2lm
ICFkZWZpbmVkKElOVkFSSUFOVFMpCisJaWYgKG0gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwp
OworCX0KKyNlbmRpZgorCWlmIChvZmYgPT0gMCAmJiBtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJ
CWNvcHloZHIgPSAxOworCXdoaWxlIChvZmYgPiAwKSB7CisJCUtBU1NFUlQobSAhPSBOVUxMLCAo
Im1fY29weW0sIG9mZnNldCA+IHNpemUgb2YgbWJ1ZiBjaGFpbiIpKTsKKwkJaWYgKG9mZiA8IG0t
Pm1fbGVuKQorCQkJYnJlYWs7CisJCW9mZiAtPSBtLT5tX2xlbjsKKwkJbSA9IG0tPm1fbmV4dDsK
Kwl9CisJbnAgPSAmdG9wOworCXRvcCA9IDA7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKG0g
PT0gTlVMTCkgeworCQkJS0FTU0VSVChsZW4gPT0gTV9DT1BZQUxMLCAoIm1fY29weW0sIGxlbmd0
aCA+IHNpemUgb2YgbWJ1ZiBjaGFpbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCWlmIChjb3B5aGRy
KQorCQkJTUdFVEhEUihuLCB3YWl0LCBtLT5tX3R5cGUpOworCQllbHNlCisJCQlNR0VUKG4sIHdh
aXQsIG0tPm1fdHlwZSk7CisJCSpucCA9IG47CisJCWlmIChuID09IE5VTEwpCisJCQlnb3RvIG5v
c3BhY2U7CisJCWlmIChjb3B5aGRyKSB7CisJCQlpZiAoIW1fZHVwX3BrdGhkcihuLCBtLCB3YWl0
KSkKKwkJCQlnb3RvIG5vc3BhY2U7CisJCQlpZiAobGVuID09IE1fQ09QWUFMTCkKKwkJCQluLT5t
X3BrdGhkci5sZW4gLT0gb2ZmMDsKKwkJCWVsc2UKKwkJCQluLT5tX3BrdGhkci5sZW4gPSBsZW47
CisJCQljb3B5aGRyID0gMDsKKwkJfQorCQluLT5tX2xlbiA9IG1pbihsZW4sIG0tPm1fbGVuIC0g
b2ZmKTsKKwkJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCkgeworCQkJbi0+bV9kYXRhID0gbS0+bV9k
YXRhICsgb2ZmOworCQkJbWJfZHVwY2wobiwgbSk7CisJCX0gZWxzZQorCQkJbWVtY3B5KG10b2Qo
biwgY2FkZHJfdCksIG10b2QobSwgY2FkZHJfdCkgKyBvZmYsICh1X2ludCluLT5tX2xlbik7CisJ
CWlmIChsZW4gIT0gTV9DT1BZQUxMKQorCQkJbGVuIC09IG4tPm1fbGVuOworCQlvZmYgPSAwOwor
CQltID0gbS0+bV9uZXh0OworCQlucCA9ICZuLT5tX25leHQ7CisJfQorCWlmICh0b3AgPT0gTlVM
TCkKKwkJbWJzdGF0Lm1fbWNmYWlsKys7CS8qIFhYWDogTm8gY29uc2lzdGVuY3kuICovCisKKwly
ZXR1cm4gKHRvcCk7Citub3NwYWNlOgorCW1fZnJlZW0odG9wKTsKKwltYnN0YXQubV9tY2ZhaWwr
KzsJLyogWFhYOiBObyBjb25zaXN0ZW5jeS4gKi8KKwlyZXR1cm4gKE5VTEwpOworfQorCisKK2lu
dAorbV90YWdfY29weV9jaGFpbihzdHJ1Y3QgbWJ1ZiAqdG8sIHN0cnVjdCBtYnVmICpmcm9tLCBp
bnQgaG93KQoreworCXN0cnVjdCBtX3RhZyAqcCwgKnQsICp0cHJldiA9IE5VTEw7CisKKwlLQVNT
RVJUKHRvICYmIGZyb20sICgibV90YWdfY29weV9jaGFpbjogbnVsbCBhcmd1bWVudCwgdG8gJXAg
ZnJvbSAlcCIsICh2b2lkICopdG8sICh2b2lkICopZnJvbSkpOworCW1fdGFnX2RlbGV0ZV9jaGFp
bih0bywgTlVMTCk7CisJU0xJU1RfRk9SRUFDSChwLCAmZnJvbS0+bV9wa3RoZHIudGFncywgbV90
YWdfbGluaykgeworCQl0ID0gbV90YWdfY29weShwLCBob3cpOworCQlpZiAodCA9PSBOVUxMKSB7
CisJCQltX3RhZ19kZWxldGVfY2hhaW4odG8sIE5VTEwpOworCQkJcmV0dXJuIDA7CisJCX0KKwkJ
aWYgKHRwcmV2ID09IE5VTEwpCisJCQlTTElTVF9JTlNFUlRfSEVBRCgmdG8tPm1fcGt0aGRyLnRh
Z3MsIHQsIG1fdGFnX2xpbmspOworCQllbHNlCisJCQlTTElTVF9JTlNFUlRfQUZURVIodHByZXYs
IHQsIG1fdGFnX2xpbmspOworCQl0cHJldiA9IHQ7CisJfQorCXJldHVybiAxOworfQorCisvKgor
ICogRHVwbGljYXRlICJmcm9tIidzIG1idWYgcGt0aGRyIGluICJ0byIuCisgKiAiZnJvbSIgbXVz
dCBoYXZlIE1fUEtUSERSIHNldCwgYW5kICJ0byIgbXVzdCBiZSBlbXB0eS4KKyAqIEluIHBhcnRp
Y3VsYXIsIHRoaXMgZG9lcyBhIGRlZXAgY29weSBvZiB0aGUgcGFja2V0IHRhZ3MuCisgKi8KK2lu
dAorbV9kdXBfcGt0aGRyKHN0cnVjdCBtYnVmICp0bywgc3RydWN0IG1idWYgKmZyb20sIGludCBo
b3cpCit7CisKKwlLQVNTRVJUKHRvLCAoIm1fZHVwX3BrdGhkcjogdG8gaXMgTlVMTCIpKTsKKwlL
QVNTRVJUKGZyb20sICgibV9kdXBfcGt0aGRyOiBmcm9tIGlzIE5VTEwiKSk7CisJdG8tPm1fZmxh
Z3MgPSAoZnJvbS0+bV9mbGFncyAmIE1fQ09QWUZMQUdTKSB8ICh0by0+bV9mbGFncyAmIE1fRVhU
KTsKKwlpZiAoKHRvLT5tX2ZsYWdzICYgTV9FWFQpID09IDApCisJCXRvLT5tX2RhdGEgPSB0by0+
bV9wa3RkYXQ7CisJdG8tPm1fcGt0aGRyID0gZnJvbS0+bV9wa3RoZHI7CisJU0xJU1RfSU5JVCgm
dG8tPm1fcGt0aGRyLnRhZ3MpOworCXJldHVybiAobV90YWdfY29weV9jaGFpbih0bywgZnJvbSwg
TUJUT00oaG93KSkpOworfQorCisvKiBDb3B5IGEgc2luZ2xlIHRhZy4gKi8KK3N0cnVjdCBtX3Rh
ZyAqCittX3RhZ19jb3B5KHN0cnVjdCBtX3RhZyAqdCwgaW50IGhvdykKK3sKKwlzdHJ1Y3QgbV90
YWcgKnA7CisKKwlLQVNTRVJUKHQsICgibV90YWdfY29weTogbnVsbCB0YWciKSk7CisJcCA9IG1f
dGFnX2FsbG9jKHQtPm1fdGFnX2Nvb2tpZSwgdC0+bV90YWdfaWQsIHQtPm1fdGFnX2xlbiwgaG93
KTsKKwlpZiAocCA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCW1lbWNweShwICsgMSwgdCAr
IDEsIHQtPm1fdGFnX2xlbik7IC8qIENvcHkgdGhlIGRhdGEgKi8KKwlyZXR1cm4gcDsKK30KKwor
LyogR2V0IGEgcGFja2V0IHRhZyBzdHJ1Y3R1cmUgYWxvbmcgd2l0aCBzcGVjaWZpZWQgZGF0YSBm
b2xsb3dpbmcuICovCitzdHJ1Y3QgbV90YWcgKgorbV90YWdfYWxsb2ModV9pbnQzMl90IGNvb2tp
ZSwgaW50IHR5cGUsIGludCBsZW4sIGludCB3YWl0KQoreworCXN0cnVjdCBtX3RhZyAqdDsKKwor
CWlmIChsZW4gPCAwKQorCQlyZXR1cm4gTlVMTDsKKwl0ID0gbWFsbG9jKGxlbiArIHNpemVvZihz
dHJ1Y3QgbV90YWcpKTsKKwlpZiAodCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKwltX3RhZ19z
ZXR1cCh0LCBjb29raWUsIHR5cGUsIGxlbik7CisJdC0+bV90YWdfZnJlZSA9IG1fdGFnX2ZyZWVf
ZGVmYXVsdDsKKwlyZXR1cm4gdDsKK30KKworLyogRnJlZSBhIHBhY2tldCB0YWcuICovCit2b2lk
CittX3RhZ19mcmVlX2RlZmF1bHQoc3RydWN0IG1fdGFnICp0KQoreworICBmcmVlKHQpOworfQor
CisvKgorICogQ29weSBkYXRhIGZyb20gYSBidWZmZXIgYmFjayBpbnRvIHRoZSBpbmRpY2F0ZWQg
bWJ1ZiBjaGFpbiwKKyAqIHN0YXJ0aW5nICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJlZ2lubmluZywg
ZXh0ZW5kaW5nIHRoZSBtYnVmCisgKiBjaGFpbiBpZiBuZWNlc3NhcnkuCisgKi8KK3ZvaWQKK21f
Y29weWJhY2soc3RydWN0IG1idWYgKm0wLCBpbnQgb2ZmLCBpbnQgbGVuLCBjYWRkcl90IGNwKQor
eworCWludCBtbGVuOworCXN0cnVjdCBtYnVmICptID0gbTAsICpuOworCWludCB0b3RsZW4gPSAw
OworCisJaWYgKG0wID09IE5VTEwpCisJCXJldHVybjsKKwl3aGlsZSAob2ZmID4gKG1sZW4gPSBt
LT5tX2xlbikpIHsKKwkJb2ZmIC09IG1sZW47CisJCXRvdGxlbiArPSBtbGVuOworCQlpZiAobS0+
bV9uZXh0ID09IE5VTEwpIHsKKwkJCW4gPSBtX2dldChNX05PV0FJVCwgbS0+bV90eXBlKTsKKwkJ
CWlmIChuID09IE5VTEwpCisJCQkJZ290byBvdXQ7CisJCQltZW1zZXQobXRvZChuLCBjYWRkcl90
KSwgMCwgTUxFTik7CisJCQluLT5tX2xlbiA9IG1pbihNTEVOLCBsZW4gKyBvZmYpOworCQkJbS0+
bV9uZXh0ID0gbjsKKwkJfQorCQltID0gbS0+bV9uZXh0OworCX0KKwl3aGlsZSAobGVuID4gMCkg
eworCQltbGVuID0gbWluIChtLT5tX2xlbiAtIG9mZiwgbGVuKTsKKwkJbWVtY3B5KG9mZiArIG10
b2QobSwgY2FkZHJfdCksIGNwLCAodV9pbnQpbWxlbik7CisJCWNwICs9IG1sZW47CisJCWxlbiAt
PSBtbGVuOworCQltbGVuICs9IG9mZjsKKwkJb2ZmID0gMDsKKwkJdG90bGVuICs9IG1sZW47CisJ
CWlmIChsZW4gPT0gMCkKKwkJCWJyZWFrOworCQlpZiAobS0+bV9uZXh0ID09IE5VTEwpIHsKKwkJ
CW4gPSBtX2dldChNX05PV0FJVCwgbS0+bV90eXBlKTsKKwkJCWlmIChuID09IE5VTEwpCisJCQkJ
YnJlYWs7CisJCQluLT5tX2xlbiA9IG1pbihNTEVOLCBsZW4pOworCQkJbS0+bV9uZXh0ID0gbjsK
KwkJfQorCQltID0gbS0+bV9uZXh0OworCX0KK291dDoJaWYgKCgobSA9IG0wKS0+bV9mbGFncyAm
IE1fUEtUSERSKSAmJiAobS0+bV9wa3RoZHIubGVuIDwgdG90bGVuKSkKKwkJbS0+bV9wa3RoZHIu
bGVuID0gdG90bGVuOworfQorCisKKy8qCisgKiBMZXNzZXItdXNlZCBwYXRoIGZvciBNX1BSRVBF
TkQ6CisgKiBhbGxvY2F0ZSBuZXcgbWJ1ZiB0byBwcmVwZW5kIHRvIGNoYWluLAorICogY29weSBq
dW5rIGFsb25nLgorICovCitzdHJ1Y3QgbWJ1ZiAqCittX3ByZXBlbmQoc3RydWN0IG1idWYgKm0s
IGludCBsZW4sIGludCBob3cpCit7CisJc3RydWN0IG1idWYgKm1uOworCisJaWYgKG0tPm1fZmxh
Z3MgJiBNX1BLVEhEUikKKwkJTUdFVEhEUihtbiwgaG93LCBtLT5tX3R5cGUpOworCWVsc2UKKwkJ
TUdFVChtbiwgaG93LCBtLT5tX3R5cGUpOworCWlmIChtbiA9PSBOVUxMKSB7CisJCW1fZnJlZW0o
bSk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChtLT5tX2ZsYWdzICYgTV9QS1RIRFIpCisJ
CU1fTU9WRV9QS1RIRFIobW4sIG0pOworCW1uLT5tX25leHQgPSBtOworCW0gPSBtbjsKKwlpZiAo
bS0+bV9mbGFncyAmIE1fUEtUSERSKSB7CisJCWlmIChsZW4gPCBNSExFTikKKwkJCU1IX0FMSUdO
KG0sIGxlbik7CisJfSBlbHNlIHsKKwkJaWYgKGxlbiA8IE1MRU4pCisJCQlNX0FMSUdOKG0sIGxl
bik7CisJfQorCW0tPm1fbGVuID0gbGVuOworCXJldHVybiAobSk7Cit9CisKKy8qCisgKiBDb3B5
IGRhdGEgZnJvbSBhbiBtYnVmIGNoYWluIHN0YXJ0aW5nICJvZmYiIGJ5dGVzIGZyb20gdGhlIGJl
Z2lubmluZywKKyAqIGNvbnRpbnVpbmcgZm9yICJsZW4iIGJ5dGVzLCBpbnRvIHRoZSBpbmRpY2F0
ZWQgYnVmZmVyLgorICovCit2b2lkCittX2NvcHlkYXRhKGNvbnN0IHN0cnVjdCBtYnVmICptLCBp
bnQgb2ZmLCBpbnQgbGVuLCBjYWRkcl90IGNwKQoreworCXVfaW50IGNvdW50OworCisJS0FTU0VS
VChvZmYgPj0gMCwgKCJtX2NvcHlkYXRhLCBuZWdhdGl2ZSBvZmYgJWQiLCBvZmYpKTsKKwlLQVNT
RVJUKGxlbiA+PSAwLCAoIm1fY29weWRhdGEsIG5lZ2F0aXZlIGxlbiAlZCIsIGxlbikpOworCXdo
aWxlIChvZmYgPiAwKSB7CisJCUtBU1NFUlQobSAhPSBOVUxMLCAoIm1fY29weWRhdGEsIG9mZnNl
dCA+IHNpemUgb2YgbWJ1ZiBjaGFpbiIpKTsKKwkJaWYgKG9mZiA8IG0tPm1fbGVuKQorCQkJYnJl
YWs7CisJCW9mZiAtPSBtLT5tX2xlbjsKKwkJbSA9IG0tPm1fbmV4dDsKKwl9CisJd2hpbGUgKGxl
biA+IDApIHsKKwkJS0FTU0VSVChtICE9IE5VTEwsICgibV9jb3B5ZGF0YSwgbGVuZ3RoID4gc2l6
ZSBvZiBtYnVmIGNoYWluIikpOworCQljb3VudCA9IG1pbihtLT5tX2xlbiAtIG9mZiwgbGVuKTsK
KwkJbWVtY3B5KGNwLCBtdG9kKG0sIGNhZGRyX3QpICsgb2ZmLCBjb3VudCk7CisJCWxlbiAtPSBj
b3VudDsKKwkJY3AgKz0gY291bnQ7CisJCW9mZiA9IDA7CisJCW0gPSBtLT5tX25leHQ7CisJfQor
fQorCisKKy8qCisgKiBDb25jYXRlbmF0ZSBtYnVmIGNoYWluIG4gdG8gbS4KKyAqIEJvdGggY2hh
aW5zIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZSAoZS5nLiBNVF9EQVRBKS4KKyAqIEFueSBtX3Br
dGhkciBpcyBub3QgdXBkYXRlZC4KKyAqLwordm9pZAorbV9jYXQoc3RydWN0IG1idWYgKm0sIHN0
cnVjdCBtYnVmICpuKQoreworCXdoaWxlIChtLT5tX25leHQpCisJCW0gPSBtLT5tX25leHQ7CisJ
d2hpbGUgKG4pIHsKKwkJaWYgKG0tPm1fZmxhZ3MgJiBNX0VYVCB8fAorCQkgICAgbS0+bV9kYXRh
ICsgbS0+bV9sZW4gKyBuLT5tX2xlbiA+PSAmbS0+bV9kYXRbTUxFTl0pIHsKKwkJCS8qIGp1c3Qg
am9pbiB0aGUgdHdvIGNoYWlucyAqLworCQkJbS0+bV9uZXh0ID0gbjsKKwkJCXJldHVybjsKKwkJ
fQorCQkvKiBzcGxhdCB0aGUgZGF0YSBmcm9tIG9uZSBpbnRvIHRoZSBvdGhlciAqLworCQltZW1j
cHkobXRvZChtLCBjYWRkcl90KSArIG0tPm1fbGVuLCBtdG9kKG4sIGNhZGRyX3QpLCAodV9pbnQp
bi0+bV9sZW4pOworCQltLT5tX2xlbiArPSBuLT5tX2xlbjsKKwkJbiA9IG1fZnJlZShuKTsKKwl9
Cit9CisKKwordm9pZAorbV9hZGooc3RydWN0IG1idWYgKm1wLCBpbnQgcmVxX2xlbikKK3sKKwlp
bnQgbGVuID0gcmVxX2xlbjsKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlpbnQgY291bnQ7CisKKwlpZiAo
KG0gPSBtcCkgPT0gTlVMTCkKKwkJcmV0dXJuOworCWlmIChsZW4gPj0gMCkgeworCQkvKgorCQkg
KiBUcmltIGZyb20gaGVhZC4KKwkJICovCisJCXdoaWxlIChtICE9IE5VTEwgJiYgbGVuID4gMCkg
eworCQkJaWYgKG0tPm1fbGVuIDw9IGxlbikgeworCQkJCWxlbiAtPSBtLT5tX2xlbjsKKwkJCQlt
LT5tX2xlbiA9IDA7CisJCQkJbSA9IG0tPm1fbmV4dDsKKwkJCX0gZWxzZSB7CisJCQkJbS0+bV9s
ZW4gLT0gbGVuOworCQkJCW0tPm1fZGF0YSArPSBsZW47CisJCQkJbGVuID0gMDsKKwkJCX0KKwkJ
fQorCQltID0gbXA7CisJCWlmIChtcC0+bV9mbGFncyAmIE1fUEtUSERSKQorCQkJbS0+bV9wa3Ro
ZHIubGVuIC09IChyZXFfbGVuIC0gbGVuKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUcmltIGZy
b20gdGFpbC4gIFNjYW4gdGhlIG1idWYgY2hhaW4sCisJCSAqIGNhbGN1bGF0aW5nIGl0cyBsZW5n
dGggYW5kIGZpbmRpbmcgdGhlIGxhc3QgbWJ1Zi4KKwkJICogSWYgdGhlIGFkanVzdG1lbnQgb25s
eSBhZmZlY3RzIHRoaXMgbWJ1ZiwgdGhlbiBqdXN0CisJCSAqIGFkanVzdCBhbmQgcmV0dXJuLiAg
T3RoZXJ3aXNlLCByZXNjYW4gYW5kIHRydW5jYXRlCisJCSAqIGFmdGVyIHRoZSByZW1haW5pbmcg
c2l6ZS4KKwkJICovCisJCWxlbiA9IC1sZW47CisJCWNvdW50ID0gMDsKKwkJZm9yICg7Oykgewor
CQkJY291bnQgKz0gbS0+bV9sZW47CisJCQlpZiAobS0+bV9uZXh0ID09IChzdHJ1Y3QgbWJ1ZiAq
KTApCisJCQkJYnJlYWs7CisJCQltID0gbS0+bV9uZXh0OworCQl9CisJCWlmIChtLT5tX2xlbiA+
PSBsZW4pIHsKKwkJCW0tPm1fbGVuIC09IGxlbjsKKwkJCWlmIChtcC0+bV9mbGFncyAmIE1fUEtU
SERSKQorCQkJCW1wLT5tX3BrdGhkci5sZW4gLT0gbGVuOworCQkJcmV0dXJuOworCQl9CisJCWNv
dW50IC09IGxlbjsKKwkJaWYgKGNvdW50IDwgMCkKKwkJCWNvdW50ID0gMDsKKwkJLyoKKwkJICog
Q29ycmVjdCBsZW5ndGggZm9yIGNoYWluIGlzICJjb3VudCIuCisJCSAqIEZpbmQgdGhlIG1idWYg
d2l0aCBsYXN0IGRhdGEsIGFkanVzdCBpdHMgbGVuZ3RoLAorCQkgKiBhbmQgdG9zcyBkYXRhIGZy
b20gcmVtYWluaW5nIG1idWZzIG9uIGNoYWluLgorCQkgKi8KKwkJbSA9IG1wOworCQlpZiAobS0+
bV9mbGFncyAmIE1fUEtUSERSKQorCQkJbS0+bV9wa3RoZHIubGVuID0gY291bnQ7CisJCWZvciAo
OyBtOyBtID0gbS0+bV9uZXh0KSB7CisJCQlpZiAobS0+bV9sZW4gPj0gY291bnQpIHsKKwkJCQlt
LT5tX2xlbiA9IGNvdW50OworCQkJCWlmIChtLT5tX25leHQgIT0gTlVMTCkgeworCQkJCQltX2Zy
ZWVtKG0tPm1fbmV4dCk7CisJCQkJCW0tPm1fbmV4dCA9IE5VTEw7CisJCQkJfQorCQkJCWJyZWFr
OworCQkJfQorCQkJY291bnQgLT0gbS0+bV9sZW47CisJCX0KKwl9Cit9CisKKworLyogbV9zcGxp
dCBpcyB1c2VkIHdpdGhpbiBzY3RwX2hhbmRsZV9jb29raWVfZWNoby4gKi8KKworLyoKKyAqIFBh
cnRpdGlvbiBhbiBtYnVmIGNoYWluIGluIHR3byBwaWVjZXMsIHJldHVybmluZyB0aGUgdGFpbCAt
LQorICogYWxsIGJ1dCB0aGUgZmlyc3QgbGVuMCBieXRlcy4gIEluIGNhc2Ugb2YgZmFpbHVyZSwg
aXQgcmV0dXJucyBOVUxMIGFuZAorICogYXR0ZW1wdHMgdG8gcmVzdG9yZSB0aGUgY2hhaW4gdG8g
aXRzIG9yaWdpbmFsIHN0YXRlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIG1idWZz
IG1pZ2h0IGJlIHJlYWQtb25seSwgYmVjYXVzZSB0aGUgbmV3CisgKiBtYnVmIGNhbiBlbmQgdXAg
c2hhcmluZyBhbiBtYnVmIGNsdXN0ZXIgd2l0aCB0aGUgb3JpZ2luYWwgbWJ1ZiBpZgorICogdGhl
ICJicmVha2luZyBwb2ludCIgaGFwcGVucyB0byBsaWUgd2l0aGluIGEgY2x1c3RlciBtYnVmLiBV
c2UgdGhlCisgKiBNX1dSSVRBQkxFKCkgbWFjcm8gdG8gY2hlY2sgZm9yIHRoaXMgY2FzZS4KKyAq
Lworc3RydWN0IG1idWYgKgorbV9zcGxpdChzdHJ1Y3QgbWJ1ZiAqbTAsIGludCBsZW4wLCBpbnQg
d2FpdCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbSwgKm47CisJdV9pbnQgbGVuID0gbGVuMCwgcmVtYWlu
OworCisJLyogTUJVRl9DSEVDS1NMRUVQKHdhaXQpOyAqLworCWZvciAobSA9IG0wOyBtICYmIChp
bnQpbGVuID4gbS0+bV9sZW47IG0gPSBtLT5tX25leHQpCisJCWxlbiAtPSBtLT5tX2xlbjsKKwlp
ZiAobSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXJlbWFpbiA9IG0tPm1fbGVuIC0gbGVu
OworCWlmIChtMC0+bV9mbGFncyAmIE1fUEtUSERSKSB7CisJCU1HRVRIRFIobiwgd2FpdCwgbTAt
Pm1fdHlwZSk7CisJCWlmIChuID09IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQluLT5tX3Br
dGhkci5yY3ZpZiA9IG0wLT5tX3BrdGhkci5yY3ZpZjsKKwkJbi0+bV9wa3RoZHIubGVuID0gbTAt
Pm1fcGt0aGRyLmxlbiAtIGxlbjA7CisJCW0wLT5tX3BrdGhkci5sZW4gPSBsZW4wOworCQlpZiAo
bS0+bV9mbGFncyAmIE1fRVhUKQorCQkJZ290byBleHRwYWNrZXQ7CisJCWlmIChyZW1haW4gPiBN
SExFTikgeworCQkJLyogbSBjYW4ndCBiZSB0aGUgbGVhZCBwYWNrZXQgKi8KKwkJCU1IX0FMSUdO
KG4sIDApOworCQkJbi0+bV9uZXh0ID0gbV9zcGxpdChtLCBsZW4sIHdhaXQpOworCQkJaWYgKG4t
Pm1fbmV4dCA9PSBOVUxMKSB7CisJCQkJKHZvaWQpIG1fZnJlZShuKTsKKwkJCQlyZXR1cm4gKE5V
TEwpOworCQkJfSBlbHNlIHsKKwkJCQluLT5tX2xlbiA9IDA7CisJCQkJcmV0dXJuIChuKTsKKwkJ
CX0KKwkJfSBlbHNlCisJCQlNSF9BTElHTihuLCByZW1haW4pOworCX0gZWxzZSBpZiAocmVtYWlu
ID09IDApIHsKKwkJbiA9IG0tPm1fbmV4dDsKKwkJbS0+bV9uZXh0ID0gTlVMTDsKKwkJcmV0dXJu
IChuKTsKKwl9IGVsc2UgeworCQlNR0VUKG4sIHdhaXQsIG0tPm1fdHlwZSk7CisJCWlmIChuID09
IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQlNX0FMSUdOKG4sIHJlbWFpbik7CisJfQorZXh0
cGFja2V0OgorCWlmIChtLT5tX2ZsYWdzICYgTV9FWFQpIHsKKwkJbi0+bV9kYXRhID0gbS0+bV9k
YXRhICsgbGVuOworCQltYl9kdXBjbChuLCBtKTsKKwl9IGVsc2UgeworCQltZW1jcHkobXRvZChu
LCBjYWRkcl90KSwgbXRvZChtLCBjYWRkcl90KSArIGxlbiwgcmVtYWluKTsKKwl9CisJbi0+bV9s
ZW4gPSByZW1haW47CisJbS0+bV9sZW4gPSBsZW47CisJbi0+bV9uZXh0ID0gbS0+bV9uZXh0Owor
CW0tPm1fbmV4dCA9IE5VTEw7CisJcmV0dXJuIChuKTsKK30KKworCisKKworaW50CitwYWNrX3Nl
bmRfYnVmZmVyKGNhZGRyX3QgYnVmZmVyLCBzdHJ1Y3QgbWJ1ZiogbWIpeworCisJaW50IGNvdW50
X3RvX2NvcHk7CisJaW50IHRvdGFsX2NvdW50X2NvcGllZCA9IDA7CisJaW50IG9mZnNldCA9IDA7
CisKKwlkbyB7CisJCWNvdW50X3RvX2NvcHkgPSBtYi0+bV9sZW47CisJCW1lbWNweShidWZmZXIr
b2Zmc2V0LCBtdG9kKG1iLCBjYWRkcl90KSwgY291bnRfdG9fY29weSk7CisJCW9mZnNldCArPSBj
b3VudF90b19jb3B5OworCQl0b3RhbF9jb3VudF9jb3BpZWQgKz0gY291bnRfdG9fY29weTsKKwkJ
bWIgPSBtYi0+bV9uZXh0OworCX0gd2hpbGUobWIpOworCisJcmV0dXJuICh0b3RhbF9jb3VudF9j
b3BpZWQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaCBi
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9tYnVmLmgKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRi
OGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uOWM1ZDBkN2VmNDVhMmQ5Y2ZjZDc5ZDlmNWM4NzlhMTlk
ZmQxNjY2ZiAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90
aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX21idWYuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfbWJ1Zi5oCkBAIC0wLDAgKzEsNDQwIEBACisvKi0K
KyAqIENvcHlyaWdodCAoYykgMTk4MiwgMTk4NiwgMTk4OCwgMTk5MworICogICAgICBUaGUgUmVn
ZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkg
bm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAq
ICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBg
YEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwor
ICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpZm5kZWYg
X1VTRVJfTUJVRl9IXworI2RlZmluZSBfVVNFUl9NQlVGX0hfCisKKy8qIF9fVXNlcnNwYWNlX18g
aGVhZGVyIGZpbGUgZm9yIG1idWZzICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiAhZGVmaW5l
ZChTQ1RQX1NJTVBMRV9BTExPQ0FUT1IpCisjaW5jbHVkZSAidW1lbS5oIgorI2VuZGlmCisjaW5j
bHVkZSAidXNlcl9tYWxsb2MuaCIKKyNpbmNsdWRlICJuZXRpbmV0L3NjdHBfb3NfdXNlcnNwYWNl
LmgiCisKKyNkZWZpbmUgVVNJTkdfTUJVRl9DT05TVFJVQ1RPUiAwCisKKy8qIEZvciBMaW51eCAq
LworI2lmbmRlZiBNU0laRQorI2RlZmluZSBNU0laRSAyNTYKKy8qICNkZWZpbmUgTVNJWkUgMTAy
NCAqLworI2VuZGlmCisjaWZuZGVmIE1DTEJZVEVTCisjZGVmaW5lIE1DTEJZVEVTIDIwNDgKKyNl
bmRpZgorCitzdHJ1Y3QgbWJ1ZiAqIG1fZ2V0aGRyKGludCBob3csIHNob3J0IHR5cGUpOworc3Ry
dWN0IG1idWYgKiBtX2dldChpbnQgaG93LCBzaG9ydCB0eXBlKTsKK3N0cnVjdCBtYnVmICogbV9m
cmVlKHN0cnVjdCBtYnVmICptKTsKK3ZvaWQgbV9jbGdldChzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGhv
dyk7CitzdHJ1Y3QgbWJ1ZiAqIG1fZ2V0bTIoc3RydWN0IG1idWYgKm0sIGludCBsZW4sIGludCBo
b3csIHNob3J0IHR5cGUsIGludCBmbGFncywgaW50IGFsbG9uZWJ1Zik7CitzdHJ1Y3QgbWJ1ZiAq
bV91aW90b21idWYoc3RydWN0IHVpbyAqdWlvLCBpbnQgaG93LCBpbnQgbGVuLCBpbnQgYWxpZ24s
IGludCBmbGFncyk7Cit1X2ludCBtX2xlbmd0aChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCBtYnVm
ICoqbGFzdCk7CitzdHJ1Y3QgbWJ1ZiAqbV9sYXN0KHN0cnVjdCBtYnVmICptKTsKKworLyogbWJ1
ZiBpbml0aWFsaXphdGlvbiBmdW5jdGlvbiAqLwordm9pZCBtYnVmX2luaXRpYWxpemUodm9pZCAq
KTsKKworI2RlZmluZQlNX01PVkVfUEtUSERSKHRvLCBmcm9tKQltX21vdmVfcGt0aGRyKCh0byks
IChmcm9tKSkKKyNkZWZpbmUJTUdFVChtLCBob3csIHR5cGUpCSgobSkgPSBtX2dldCgoaG93KSwg
KHR5cGUpKSkKKyNkZWZpbmUJTUdFVEhEUihtLCBob3csIHR5cGUpCSgobSkgPSBtX2dldGhkcigo
aG93KSwgKHR5cGUpKSkKKyNkZWZpbmUJTUNMR0VUKG0sIGhvdykJCW1fY2xnZXQoKG0pLCAoaG93
KSkKKworCisjZGVmaW5lIE1fSERSX1BBRCAoKHNpemVvZihpbnRwdHJfdCk9PTQpID8gMiA6IDYp
IC8qIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fICovCisKKy8qIExlbmd0aCB0byBtX2NvcHkg
dG8gY29weSBhbGwuICovCisjZGVmaW5lCU1fQ09QWUFMTAkxMDAwMDAwMDAwCisKKy8qIHVtZW1f
Y2FjaGVfdCBpcyBkZWZpbmVkIGluIHVzZXJfaW5jbHVkZS91bWVtLmggYXMKKyAqIHR5cGVkZWYg
c3RydWN0IHVtZW1fY2FjaGUgdW1lbV9jYWNoZV90OworICogTm90ZTp1bWVtX3pvbmVfdCBpcyBh
IHBvaW50ZXIuCisgKi8KKyNpZiBkZWZpbmVkKFNDVFBfU0lNUExFX0FMTE9DQVRPUikKK3R5cGVk
ZWYgc2l6ZV90IHNjdHBfem9uZV90OworI2Vsc2UKK3R5cGVkZWYgdW1lbV9jYWNoZV90ICpzY3Rw
X3pvbmVfdDsKKyNlbmRpZgorCitleHRlcm4gc2N0cF96b25lX3Qgem9uZV9tYnVmOworZXh0ZXJu
IHNjdHBfem9uZV90IHpvbmVfY2x1c3Q7CitleHRlcm4gc2N0cF96b25lX3Qgem9uZV9leHRfcmVm
Y250OworCisvKi0KKyAqIE1hY3JvcyBmb3IgdHlwZSBjb252ZXJzaW9uOgorICogbXRvZChtLCB0
KQktLSBDb252ZXJ0IG1idWYgcG9pbnRlciB0byBkYXRhIHBvaW50ZXIgb2YgY29ycmVjdCB0eXBl
LgorICogZHRvbSh4KQktLSBDb252ZXJ0IGRhdGEgcG9pbnRlciB3aXRoaW4gbWJ1ZiB0byBtYnVm
IHBvaW50ZXIgKFhYWCkuCisgKi8KKyNkZWZpbmUJbXRvZChtLCB0KQkoKHQpKChtKS0+bV9kYXRh
KSkKKyNkZWZpbmUJZHRvbSh4KQkJKChzdHJ1Y3QgbWJ1ZiAqKSgoaW50cHRyX3QpKHgpICYgfihN
U0laRS0xKSkpCisKK3N0cnVjdCBtYl9hcmdzIHsKKwlpbnQJZmxhZ3M7CS8qIEZsYWdzIGZvciBt
YnVmIGJlaW5nIGFsbG9jYXRlZCAqLworCXNob3J0CXR5cGU7CS8qIFR5cGUgb2YgbWJ1ZiBiZWlu
ZyBhbGxvY2F0ZWQgKi8KK307CisKK3N0cnVjdCBjbHVzdF9hcmdzIHsKKwlzdHJ1Y3QgbWJ1ZiAq
IHBhcmVudF9tYnVmOworfTsKKworc3RydWN0IG1idWYgKiAgICBtX3NwbGl0KHN0cnVjdCBtYnVm
ICosIGludCwgaW50KTsKK3ZvaWQgICAgICAgICAgICAgbV9jYXQoc3RydWN0IG1idWYgKm0sIHN0
cnVjdCBtYnVmICpuKTsKK3ZvaWQJCSBtX2FkaihzdHJ1Y3QgbWJ1ZiAqLCBpbnQpOwordm9pZCAg
bWJfZnJlZV9leHQoc3RydWN0IG1idWYgKik7Cit2b2lkICBtX2ZyZWVtKHN0cnVjdCBtYnVmICop
Oworc3RydWN0IG1fdGFnCSptX3RhZ19hbGxvYyh1X2ludDMyX3QsIGludCwgaW50LCBpbnQpOwor
c3RydWN0IG1idWYJKm1fY29weW0oc3RydWN0IG1idWYgKiwgaW50LCBpbnQsIGludCk7Cit2b2lk
CQkgbV9jb3B5YmFjayhzdHJ1Y3QgbWJ1ZiAqLCBpbnQsIGludCwgY2FkZHJfdCk7CitzdHJ1Y3Qg
bWJ1ZgkqbV9wdWxsdXAoc3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBtYnVmCSptX3B1bGxk
b3duKHN0cnVjdCBtYnVmICosIGludCBvZmYsIGludCBsZW4sIGludCAqb2ZmcCk7CitpbnQJCSBt
X2R1cF9wa3RoZHIoc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBt
X3RhZwkqbV90YWdfY29weShzdHJ1Y3QgbV90YWcgKiwgaW50KTsKK2ludAkJIG1fdGFnX2NvcHlf
Y2hhaW4oc3RydWN0IG1idWYgKiwgc3RydWN0IG1idWYgKiwgaW50KTsKK3N0cnVjdCBtYnVmCSpt
X3ByZXBlbmQoc3RydWN0IG1idWYgKiwgaW50LCBpbnQpOwordm9pZAkJIG1fY29weWRhdGEoY29u
c3Qgc3RydWN0IG1idWYgKiwgaW50LCBpbnQsIGNhZGRyX3QpOworCisjZGVmaW5lIE1CVUZfTUVN
X05BTUUgIm1idWYiCisjZGVmaW5lIE1CVUZfQ0xVU1RFUl9NRU1fTkFNRSAibWJ1Zl9jbHVzdGVy
IgorI2RlZmluZQlNQlVGX0VYVFJFRkNOVF9NRU1fTkFNRQkibWJ1Zl9leHRfcmVmY250IgorCisj
ZGVmaW5lCU1UX05PSU5JVAkyNTUJLyogTm90IGEgdHlwZSBidXQgYSBmbGFnIHRvIGFsbG9jYXRl
CisJCQkJICAgYSBub24taW5pdGlhbGl6ZWQgbWJ1ZiAqLworCisvKgorICogR2VuZXJhbCBtYnVm
IGFsbG9jYXRvciBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KKyAqIF9fVXNlcnNwYWNlX18gbWJzdGF0
IG1heSBiZSB1c2VmdWwgZm9yIGdhdGhlcmluZyBzdGF0aXN0aWNzLgorICogSW4gdGhlIGtlcm5l
bCBtYW55IG9mIHRoZXNlIHN0YXRpc3RpY3MgYXJlIG5vIGxvbmdlciB1c2VkIGFzCisgKiB0aGV5
IHRyYWNrIGFsbG9jYXRvciBzdGF0aXN0aWNzIHRocm91Z2gga2VybmVsIFVNQSdzIGJ1aWx0IGlu
IHN0YXRpc3RpY3MgbWVjaGFuaXNtLgorICovCitzdHJ1Y3QgbWJzdGF0IHsKKwl1X2xvbmcJbV9t
YnVmczsJLyogWFhYICovCisJdV9sb25nCW1fbWNsdXN0czsJLyogWFhYICovCisKKwl1X2xvbmcJ
bV9kcmFpbjsJLyogdGltZXMgZHJhaW5lZCBwcm90b2NvbHMgZm9yIHNwYWNlICovCisJdV9sb25n
CW1fbWNmYWlsOwkvKiBYWFg6IHRpbWVzIG1fY29weW0gZmFpbGVkICovCisJdV9sb25nCW1fbXBm
YWlsOwkvKiBYWFg6IHRpbWVzIG1fcHVsbHVwIGZhaWxlZCAqLworCXVfbG9uZwltX21zaXplOwkv
KiBsZW5ndGggb2YgYW4gbWJ1ZiAqLworCXVfbG9uZwltX21jbGJ5dGVzOwkvKiBsZW5ndGggb2Yg
YW4gbWJ1ZiBjbHVzdGVyICovCisJdV9sb25nCW1fbWluY2xzaXplOwkvKiBtaW4gbGVuZ3RoIG9m
IGRhdGEgdG8gYWxsb2NhdGUgYSBjbHVzdGVyICovCisJdV9sb25nCW1fbWxlbjsJCS8qIGxlbmd0
aCBvZiBkYXRhIGluIGFuIG1idWYgKi8KKwl1X2xvbmcJbV9taGxlbjsJLyogbGVuZ3RoIG9mIGRh
dGEgaW4gYSBoZWFkZXIgbWJ1ZiAqLworCisJLyogTnVtYmVyIG9mIG1idHlwZXMgKGdpdmVzICMg
ZWxlbXMgaW4gbWJ0eXBlc1tdIGFycmF5OiAqLworCXNob3J0CW1fbnVtdHlwZXM7CisKKwkvKiBY
WFg6IFNlbmRmaWxlIHN0YXRzIHNob3VsZCBldmVudHVhbGx5IG1vdmUgdG8gdGhlaXIgb3duIHN0
cnVjdCAqLworCXVfbG9uZwlzZl9pb2NudDsJLyogdGltZXMgc2VuZGZpbGUgaGFkIHRvIGRvIGRp
c2sgSS9PICovCisJdV9sb25nCXNmX2FsbG9jZmFpbDsJLyogdGltZXMgc2ZidWYgYWxsb2NhdGlv
biBmYWlsZWQgKi8KKwl1X2xvbmcJc2ZfYWxsb2N3YWl0OwkvKiB0aW1lcyBzZmJ1ZiBhbGxvY2F0
aW9uIGhhZCB0byB3YWl0ICovCit9OworCisKKy8qCisgKiBNYnVmcyBhcmUgb2YgYSBzaW5nbGUg
c2l6ZSwgTVNJWkUgKHN5cy9wYXJhbS5oKSwgd2hpY2ggaW5jbHVkZXMgb3ZlcmhlYWQuCisgKiBB
biBtYnVmIG1heSBhZGQgYSBzaW5nbGUgIm1idWYgY2x1c3RlciIgb2Ygc2l6ZSBNQ0xCWVRFUyAo
YWxzbyBpbgorICogc3lzL3BhcmFtLmgpLCB3aGljaCBoYXMgbm8gYWRkaXRpb25hbCBvdmVyaGVh
ZCBhbmQgaXMgdXNlZCBpbnN0ZWFkIG9mIHRoZQorICogaW50ZXJuYWwgZGF0YSBhcmVhOyB0aGlz
IGlzIGRvbmUgd2hlbiBhdCBsZWFzdCBNSU5DTFNJWkUgb2YgZGF0YSBtdXN0IGJlCisgKiBzdG9y
ZWQuICBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGFsbG9jYXRlIGEgc2VwYXJhdGUg
YnVmZmVyCisgKiBleHRlcm5hbGx5IGFuZCBhdHRhY2ggaXQgdG8gdGhlIG1idWYgaW4gYSB3YXkg
c2ltaWxhciB0byB0aGF0IG9mIG1idWYKKyAqIGNsdXN0ZXJzLgorICovCisjZGVmaW5lCU1MRU4J
CSgoaW50KShNU0laRSAtIHNpemVvZihzdHJ1Y3QgbV9oZHIpKSkJLyogbm9ybWFsIGRhdGEgbGVu
ICovCisjZGVmaW5lCU1ITEVOCQkoKGludCkoTUxFTiAtIHNpemVvZihzdHJ1Y3QgcGt0aGRyKSkp
CS8qIGRhdGEgbGVuIHcvcGt0aGRyICovCisjZGVmaW5lCU1JTkNMU0laRQkoKGludCkoTUhMRU4g
KyAxKSkJLyogc21hbGxlc3QgYW1vdW50IHRvIHB1dCBpbiBjbHVzdGVyICovCisjZGVmaW5lCU1f
TUFYQ09NUFJFU1MJKE1ITEVOIC8gMikJLyogbWF4IGFtb3VudCB0byBjb3B5IGZvciBjb21wcmVz
c2lvbiAqLworCisKKy8qCisgKiBIZWFkZXIgcHJlc2VudCBhdCB0aGUgYmVnaW5uaW5nIG9mIGV2
ZXJ5IG1idWYuCisgKi8KK3N0cnVjdCBtX2hkciB7CisJc3RydWN0IG1idWYJKm1oX25leHQ7CS8q
IG5leHQgYnVmZmVyIGluIGNoYWluICovCisJc3RydWN0IG1idWYJKm1oX25leHRwa3Q7CS8qIG5l
eHQgY2hhaW4gaW4gcXVldWUvcmVjb3JkICovCisJY2FkZHJfdAkJIG1oX2RhdGE7CS8qIGxvY2F0
aW9uIG9mIGRhdGEgKi8KKwlpbnQJCSBtaF9sZW47CS8qIGFtb3VudCBvZiBkYXRhIGluIHRoaXMg
bWJ1ZiAqLworCWludAkJIG1oX2ZsYWdzOwkvKiBmbGFnczsgc2VlIGJlbG93ICovCisJc2hvcnQJ
CSBtaF90eXBlOwkvKiB0eXBlIG9mIGRhdGEgaW4gdGhpcyBtYnVmICovCisJdWludDhfdCAgICAg
ICAgICBwYWRbTV9IRFJfUEFEXTsvKiB3b3JkIGFsaWduICAgICAgICAgICAgICAgICAgKi8KK307
CisKKy8qCisgKiBQYWNrZXQgdGFnIHN0cnVjdHVyZSAoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4K
KyAqLworc3RydWN0IG1fdGFnIHsKKwlTTElTVF9FTlRSWShtX3RhZykJbV90YWdfbGluazsJLyog
TGlzdCBvZiBwYWNrZXQgdGFncyAqLworCXVfaW50MTZfdAkJbV90YWdfaWQ7CS8qIFRhZyBJRCAq
LworCXVfaW50MTZfdAkJbV90YWdfbGVuOwkvKiBMZW5ndGggb2YgZGF0YSAqLworCXVfaW50MzJf
dAkJbV90YWdfY29va2llOwkvKiBBQkkvTW9kdWxlIElEICovCisJdm9pZAkJCSgqbV90YWdfZnJl
ZSkoc3RydWN0IG1fdGFnICopOworfTsKKworLyoKKyAqIFJlY29yZC9wYWNrZXQgaGVhZGVyIGlu
IGZpcnN0IG1idWYgb2YgY2hhaW47IHZhbGlkIG9ubHkgaWYgTV9QS1RIRFIgaXMgc2V0LgorICov
CitzdHJ1Y3QgcGt0aGRyIHsKKwlzdHJ1Y3QgaWZuZXQJKnJjdmlmOwkJLyogcmN2IGludGVyZmFj
ZSAqLworCS8qIHZhcmlhYmxlcyBmb3IgaXAgYW5kIHRjcCByZWFzc2VtYmx5ICovCisJdm9pZAkJ
KmhlYWRlcjsJLyogcG9pbnRlciB0byBwYWNrZXQgaGVhZGVyICovCisJaW50CQkgbGVuOwkJLyog
dG90YWwgcGFja2V0IGxlbmd0aCAqLworCS8qIHZhcmlhYmxlcyBmb3IgaGFyZHdhcmUgY2hlY2tz
dW0gKi8KKwlpbnQJCSBjc3VtX2ZsYWdzOwkvKiBmbGFncyByZWdhcmRpbmcgY2hlY2tzdW0gKi8K
KwlpbnQJCSBjc3VtX2RhdGE7CS8qIGRhdGEgZmllbGQgdXNlZCBieSBjc3VtIHJvdXRpbmVzICov
CisJdV9pbnQxNl90CSB0c29fc2Vnc3o7CS8qIFRTTyBzZWdtZW50IHNpemUgKi8KKwl1X2ludDE2
X3QJIGV0aGVyX3Z0YWc7CS8qIEV0aGVybmV0IDgwMi4xcCtxIHZsYW4gdGFnICovCisJU0xJU1Rf
SEVBRChwYWNrZXRfdGFncywgbV90YWcpIHRhZ3M7IC8qIGxpc3Qgb2YgcGFja2V0IHRhZ3MgKi8K
K307CisKKy8qCisgKiBEZXNjcmlwdGlvbiBvZiBleHRlcm5hbCBzdG9yYWdlIG1hcHBlZCBpbnRv
IG1idWY7IHZhbGlkIG9ubHkgaWYgTV9FWFQgaXMKKyAqIHNldC4KKyAqLworc3RydWN0IG1fZXh0
IHsKKwljYWRkcl90CQkgZXh0X2J1ZjsJLyogc3RhcnQgb2YgYnVmZmVyICovCisJdm9pZAkJKCpl
eHRfZnJlZSkJLyogZnJlZSByb3V0aW5lIGlmIG5vdCB0aGUgdXN1YWwgKi8KKwkJCSAgICAodm9p
ZCAqLCB2b2lkICopOworCXZvaWQJCSpleHRfYXJnczsJLyogb3B0aW9uYWwgYXJndW1lbnQgcG9p
bnRlciAqLworCXVfaW50CQkgZXh0X3NpemU7CS8qIHNpemUgb2YgYnVmZmVyLCBmb3IgZXh0X2Zy
ZWUgKi8KKwl2b2xhdGlsZSB1X2ludAkqcmVmX2NudDsJLyogcG9pbnRlciB0byByZWYgY291bnQg
aW5mbyAqLworCWludAkJIGV4dF90eXBlOwkvKiB0eXBlIG9mIGV4dGVybmFsIHN0b3JhZ2UgKi8K
K307CisKKworLyoKKyAqIFRoZSBjb3JlIG9mIHRoZSBtYnVmIG9iamVjdCBhbG9uZyB3aXRoIHNv
bWUgc2hvcnRjdXQgZGVmaW5lZCBmb3IgcHJhY3RpY2FsCisgKiBwdXJwb3Nlcy4KKyAqLworc3Ry
dWN0IG1idWYgeworCXN0cnVjdCBtX2hkcgltX2hkcjsKKwl1bmlvbiB7CisJCXN0cnVjdCB7CisJ
CQlzdHJ1Y3QgcGt0aGRyCU1IX3BrdGhkcjsJLyogTV9QS1RIRFIgc2V0ICovCisJCQl1bmlvbiB7
CisJCQkJc3RydWN0IG1fZXh0CU1IX2V4dDsJLyogTV9FWFQgc2V0ICovCisJCQkJY2hhcgkJTUhf
ZGF0YWJ1ZltNSExFTl07CisJCQl9IE1IX2RhdDsKKwkJfSBNSDsKKwkJY2hhcglNX2RhdGFidWZb
TUxFTl07CQkvKiAhTV9QS1RIRFIsICFNX0VYVCAqLworCX0gTV9kYXQ7Cit9OworCisjZGVmaW5l
CW1fbmV4dAkJbV9oZHIubWhfbmV4dAorI2RlZmluZQltX2xlbgkJbV9oZHIubWhfbGVuCisjZGVm
aW5lCW1fZGF0YQkJbV9oZHIubWhfZGF0YQorI2RlZmluZQltX3R5cGUJCW1faGRyLm1oX3R5cGUK
KyNkZWZpbmUJbV9mbGFncwkJbV9oZHIubWhfZmxhZ3MKKyNkZWZpbmUJbV9uZXh0cGt0CW1faGRy
Lm1oX25leHRwa3QKKyNkZWZpbmUJbV9hY3QJCW1fbmV4dHBrdAorI2RlZmluZQltX3BrdGhkcglN
X2RhdC5NSC5NSF9wa3RoZHIKKyNkZWZpbmUJbV9leHQJCU1fZGF0Lk1ILk1IX2RhdC5NSF9leHQK
KyNkZWZpbmUJbV9wa3RkYXQJTV9kYXQuTUguTUhfZGF0Lk1IX2RhdGFidWYKKyNkZWZpbmUJbV9k
YXQJCU1fZGF0Lk1fZGF0YWJ1ZgorCisKKy8qCisgKiBtYnVmIGZsYWdzLgorICovCisjZGVmaW5l
CU1fRVhUCQkweDAwMDEJLyogaGFzIGFzc29jaWF0ZWQgZXh0ZXJuYWwgc3RvcmFnZSAqLworI2Rl
ZmluZQlNX1BLVEhEUgkweDAwMDIJLyogc3RhcnQgb2YgcmVjb3JkICovCisjZGVmaW5lCU1fRU9S
CQkweDAwMDQJLyogZW5kIG9mIHJlY29yZCAqLworI2RlZmluZQlNX1JET05MWQkweDAwMDgJLyog
YXNzb2NpYXRlZCBkYXRhIGlzIG1hcmtlZCByZWFkLW9ubHkgKi8KKyNkZWZpbmUJTV9QUk9UTzEJ
MHgwMDEwCS8qIHByb3RvY29sLXNwZWNpZmljICovCisjZGVmaW5lCU1fUFJPVE8yCTB4MDAyMAkv
KiBwcm90b2NvbC1zcGVjaWZpYyAqLworI2RlZmluZQlNX1BST1RPMwkweDAwNDAJLyogcHJvdG9j
b2wtc3BlY2lmaWMgKi8KKyNkZWZpbmUJTV9QUk9UTzQJMHgwMDgwCS8qIHByb3RvY29sLXNwZWNp
ZmljICovCisjZGVmaW5lCU1fUFJPVE81CTB4MDEwMAkvKiBwcm90b2NvbC1zcGVjaWZpYyAqLwor
I2RlZmluZQlNX0ZSRUVMSVNUCTB4ODAwMAkvKiBtYnVmIGlzIG9uIHRoZSBmcmVlIGxpc3QgKi8K
KworCisvKgorICogRmxhZ3MgY29waWVkIHdoZW4gY29weWluZyBtX3BrdGhkci4KKyAqLworI2Rl
ZmluZQlNX0NPUFlGTEFHUwkoTV9QS1RIRFJ8TV9FT1J8TV9SRE9OTFl8TV9QUk9UTzF8TV9QUk9U
TzF8TV9QUk9UTzJ8XAorCQkJICAgIE1fUFJPVE8zfE1fUFJPVE80fE1fUFJPVE81fFwKKwkJCSAg
ICBNX0JDQVNUfE1fTUNBU1R8TV9GUkFHfE1fRklSU1RGUkFHfE1fTEFTVEZSQUd8XAorCQkJICAg
IE1fVkxBTlRBR3xNX1BST01JU0MpCisKKworLyoKKyAqIG1idWYgcGt0aGRyIGZsYWdzIChhbHNv
IHN0b3JlZCBpbiBtX2ZsYWdzKS4KKyAqLworI2RlZmluZQlNX0JDQVNUCQkweDAyMDAJLyogc2Vu
ZC9yZWNlaXZlZCBhcyBsaW5rLWxldmVsIGJyb2FkY2FzdCAqLworI2RlZmluZQlNX01DQVNUCQkw
eDA0MDAJLyogc2VuZC9yZWNlaXZlZCBhcyBsaW5rLWxldmVsIG11bHRpY2FzdCAqLworI2RlZmlu
ZQlNX0ZSQUcJCTB4MDgwMAkvKiBwYWNrZXQgaXMgYSBmcmFnbWVudCBvZiBhIGxhcmdlciBwYWNr
ZXQgKi8KKyNkZWZpbmUJTV9GSVJTVEZSQUcJMHgxMDAwCS8qIHBhY2tldCBpcyBmaXJzdCBmcmFn
bWVudCAqLworI2RlZmluZQlNX0xBU1RGUkFHCTB4MjAwMAkvKiBwYWNrZXQgaXMgbGFzdCBmcmFn
bWVudCAqLworI2RlZmluZQlNX1ZMQU5UQUcJMHgxMDAwMAkvKiBldGhlcl92dGFnIGlzIHZhbGlk
ICovCisjZGVmaW5lCU1fUFJPTUlTQwkweDIwMDAwCS8qIHBhY2tldCB3YXMgbm90IGZvciB1cyAq
LworI2RlZmluZQlNX05PRlJFRQkweDQwMDAwCS8qIGRvIG5vdCBmcmVlIG1idWYgLSBpdCBpcyBl
bWJlZGRlZCBpbiB0aGUgY2x1c3RlciAqLworCisKKy8qCisgKiBFeHRlcm5hbCBidWZmZXIgdHlw
ZXM6IGlkZW50aWZ5IGV4dF9idWYgdHlwZS4KKyAqLworI2RlZmluZQlFWFRfQ0xVU1RFUgkxCS8q
IG1idWYgY2x1c3RlciAqLworI2RlZmluZQlFWFRfU0ZCVUYJMgkvKiBzZW5kZmlsZSgyKSdzIHNm
X2J1ZnMgKi8KKyNkZWZpbmUJRVhUX0pVTUJPUAkzCS8qIGp1bWJvIGNsdXN0ZXIgNDA5NiBieXRl
cyAqLworI2RlZmluZQlFWFRfSlVNQk85CTQJLyoganVtYm8gY2x1c3RlciA5MjE2IGJ5dGVzICov
CisjZGVmaW5lCUVYVF9KVU1CTzE2CTUJLyoganVtYm8gY2x1c3RlciAxNjE4NCBieXRlcyAqLwor
I2RlZmluZQlFWFRfUEFDS0VUCTYJLyogbWJ1ZitjbHVzdGVyIGZyb20gcGFja2V0IHpvbmUgKi8K
KyNkZWZpbmUJRVhUX01CVUYJNwkvKiBleHRlcm5hbCBtYnVmIHJlZmVyZW5jZSAoTV9JT1ZFQykg
Ki8KKyNkZWZpbmUJRVhUX05FVF9EUlYJMTAwCS8qIGN1c3RvbSBleHRfYnVmIHByb3ZpZGVkIGJ5
IG5ldCBkcml2ZXIocykgKi8KKyNkZWZpbmUJRVhUX01PRF9UWVBFCTIwMAkvKiBjdXN0b20gbW9k
dWxlJ3MgZXh0X2J1ZiB0eXBlICovCisjZGVmaW5lCUVYVF9ESVNQT1NBQkxFCTMwMAkvKiBjYW4g
dGhyb3cgdGhpcyBidWZmZXIgYXdheSB3L3BhZ2UgZmxpcHBpbmcgKi8KKyNkZWZpbmUJRVhUX0VY
VFJFRgk0MDAJLyogaGFzIGV4dGVybmFsbHkgbWFpbnRhaW5lZCByZWZfY250IHB0ciAqLworCisK
Ky8qCisgKiBtYnVmIHR5cGVzLgorICovCisjZGVmaW5lCU1UX05PVE1CVUYJMAkvKiBVU0VEIElO
VEVSTkFMTFkgT05MWSEgT2JqZWN0IGlzIG5vdCBtYnVmICovCisjZGVmaW5lCU1UX0RBVEEJCTEJ
LyogZHluYW1pYyAoZGF0YSkgYWxsb2NhdGlvbiAqLworI2RlZmluZQlNVF9IRUFERVIJTVRfREFU
QQkvKiBwYWNrZXQgaGVhZGVyLCB1c2UgTV9QS1RIRFIgaW5zdGVhZCAqLworI2RlZmluZQlNVF9T
T05BTUUJOAkvKiBzb2NrZXQgbmFtZSAqLworI2RlZmluZQlNVF9DT05UUk9MCTE0CS8qIGV4dHJh
LWRhdGEgcHJvdG9jb2wgbWVzc2FnZSAqLworI2RlZmluZQlNVF9PT0JEQVRBCTE1CS8qIGV4cGVk
aXRlZCBkYXRhICAqLworI2RlZmluZQlNVF9OVFlQRVMJMTYJLyogbnVtYmVyIG9mIG1idWYgdHlw
ZXMgZm9yIG1idHlwZXNbXSAqLworCisjZGVmaW5lCU1UX05PSU5JVAkyNTUJLyogTm90IGEgdHlw
ZSBidXQgYSBmbGFnIHRvIGFsbG9jYXRlCisJCQkJICAgYSBub24taW5pdGlhbGl6ZWQgbWJ1ZiAq
LworCisvKgorICogX19Vc2Vyc3BhY2VfXyBmbGFncyBsaWtlIE1fTk9XQUlUIGFyZSBkZWZpbmVk
IGluIG1hbGxvYy5oCisgKiBGbGFncyBsaWtlIHRoZXNlIGFyZSB1c2VkIGluIGZ1bmN0aW9ucyBs
aWtlIHVtYV96YWxsb2MoKQorICogYnV0IGRvbid0IGhhdmUgYW4gZXF1aXZhbGVudCBpbiB1c2Vy
bGFuZCB1bWVtCisgKiBGbGFncyBzcGVjaWZ5aW5nIGhvdyBhbiBhbGxvY2F0aW9uIHNob3VsZCBi
ZSBtYWRlLgorICoKKyAqIFRoZSBmbGFnIHRvIHVzZSBpcyBhcyBmb2xsb3dzOgorICogLSBNX0RP
TlRXQUlUIG9yIE1fTk9XQUlUIGZyb20gYW4gaW50ZXJydXB0IGhhbmRsZXIgdG8gbm90IGJsb2Nr
IGFsbG9jYXRpb24uCisgKiAtIE1fV0FJVCBvciBNX1dBSVRPSyBvciBNX1RSWVdBSVQgZnJvbSB3
aGVyZXZlciBpdCBpcyBzYWZlIHRvIGJsb2NrLgorICoKKyAqIE1fRE9OVFdBSVQvTV9OT1dBSVQg
bWVhbnMgdGhhdCB3ZSB3aWxsIG5vdCBibG9jayB0aGUgdGhyZWFkIGV4cGxpY2l0bHkgYW5kCisg
KiBpZiB3ZSBjYW5ub3QgYWxsb2NhdGUgaW1tZWRpYXRlbHkgd2UgbWF5IHJldHVybiBOVUxMLCB3
aGVyZWFzCisgKiBNX1dBSVQvTV9XQUlUT0svTV9UUllXQUlUIG1lYW5zIHRoYXQgaWYgd2UgY2Fu
bm90IGFsbG9jYXRlIHJlc291cmNlcyB3ZQorICogd2lsbCBibG9jayB1bnRpbCB0aGV5IGFyZSBh
dmFpbGFibGUsIGFuZCB0aHVzIG5ldmVyIHJldHVybiBOVUxMLgorICoKKyAqIFhYWCBFdmVudHVh
bGx5IGp1c3QgcGhhc2UgdGhpcyBvdXQgdG8gdXNlIE1fV0FJVE9LL01fTk9XQUlULgorICovCisj
ZGVmaW5lCU1CVE9NKGhvdykJKGhvdykKKwordm9pZAkJIG1fdGFnX2RlbGV0ZShzdHJ1Y3QgbWJ1
ZiAqLCBzdHJ1Y3QgbV90YWcgKik7Cit2b2lkCQkgbV90YWdfZGVsZXRlX2NoYWluKHN0cnVjdCBt
YnVmICosIHN0cnVjdCBtX3RhZyAqKTsKK3ZvaWQJCSBtX21vdmVfcGt0aGRyKHN0cnVjdCBtYnVm
ICosIHN0cnVjdCBtYnVmICopOwordm9pZAkJIG1fdGFnX2ZyZWVfZGVmYXVsdChzdHJ1Y3QgbV90
YWcgKik7CisKK2V4dGVybiBpbnQgbWF4X2xpbmtoZHI7ICAgIC8qIExhcmdlc3QgbGluay1sZXZl
bCBoZWFkZXIgKi8KK2V4dGVybiBpbnQgbWF4X3Byb3RvaGRyOyAvKiBTaXplIG9mIGxhcmdlc3Qg
cHJvdG9jb2wgbGF5ZXIgaGVhZGVyLiBTZWUgdXNlcl9tYnVmLmMgKi8KKworZXh0ZXJuIHN0cnVj
dCBtYnN0YXQJbWJzdGF0OwkJLyogR2VuZXJhbCBtYnVmIHN0YXRzL2luZm9zICovCisKKworLyoK
KyAqIEV2YWx1YXRlIFRSVUUgaWYgaXQncyBzYWZlIHRvIHdyaXRlIHRvIHRoZSBtYnVmIG0ncyBk
YXRhIHJlZ2lvbiAodGhpcyBjYW4KKyAqIGJlIGJvdGggdGhlIGxvY2FsIGRhdGEgcGF5bG9hZCwg
b3IgYW4gZXh0ZXJuYWwgYnVmZmVyIGFyZWEsIGRlcGVuZGluZyBvbgorICogd2hldGhlciBNX0VY
VCBpcyBzZXQpLgorICovCisjZGVmaW5lCU1fV1JJVEFCTEUobSkJKCEoKG0pLT5tX2ZsYWdzICYg
TV9SRE9OTFkpICYmCQkJXAorCQkJICghKCgobSktPm1fZmxhZ3MgJiBNX0VYVCkpIHx8CQkJXAor
CQkJICgqKChtKS0+bV9leHQucmVmX2NudCkgPT0gMSkpICkJCVwKKworCisvKgorICogQ29tcHV0
ZSB0aGUgYW1vdW50IG9mIHNwYWNlIGF2YWlsYWJsZSBiZWZvcmUgdGhlIGN1cnJlbnQgc3RhcnQg
b2YgZGF0YSBpbgorICogYW4gbWJ1Zi4KKyAqCisgKiBUaGUgTV9XUklUQUJMRSgpIGlzIGEgdGVt
cG9yYXJ5LCBjb25zZXJ2YXRpdmUgc2FmZXR5IG1lYXN1cmU6IHRoZSBidXJkZW4KKyAqIG9mIGNo
ZWNraW5nIHdyaXRhYmlsaXR5IG9mIHRoZSBtYnVmIGRhdGEgYXJlYSByZXN0cyBzb2xlbHkgd2l0
aCB0aGUgY2FsbGVyLgorICovCisjZGVmaW5lCU1fTEVBRElOR1NQQUNFKG0pCQkJCQkJXAorCSgo
bSktPm1fZmxhZ3MgJiBNX0VYVCA/CQkJCQkJXAorCSAgICAoTV9XUklUQUJMRShtKSA/IChtKS0+
bV9kYXRhIC0gKG0pLT5tX2V4dC5leHRfYnVmIDogMCk6CVwKKwkgICAgKG0pLT5tX2ZsYWdzICYg
TV9QS1RIRFIgPyAobSktPm1fZGF0YSAtIChtKS0+bV9wa3RkYXQgOglcCisJICAgIChtKS0+bV9k
YXRhIC0gKG0pLT5tX2RhdCkKKworLyoKKyAqIENvbXB1dGUgdGhlIGFtb3VudCBvZiBzcGFjZSBh
dmFpbGFibGUgYWZ0ZXIgdGhlIGVuZCBvZiBkYXRhIGluIGFuIG1idWYuCisgKgorICogVGhlIE1f
V1JJVEFCTEUoKSBpcyBhIHRlbXBvcmFyeSwgY29uc2VydmF0aXZlIHNhZmV0eSBtZWFzdXJlOiB0
aGUgYnVyZGVuCisgKiBvZiBjaGVja2luZyB3cml0YWJpbGl0eSBvZiB0aGUgbWJ1ZiBkYXRhIGFy
ZWEgcmVzdHMgc29sZWx5IHdpdGggdGhlIGNhbGxlci4KKyAqLworI2RlZmluZQlNX1RSQUlMSU5H
U1BBQ0UobSkJCQkJCQlcCisJKChtKS0+bV9mbGFncyAmIE1fRVhUID8JCQkJCQlcCisJICAgIChN
X1dSSVRBQkxFKG0pID8gKG0pLT5tX2V4dC5leHRfYnVmICsgKG0pLT5tX2V4dC5leHRfc2l6ZQlc
CisJCS0gKChtKS0+bV9kYXRhICsgKG0pLT5tX2xlbikgOiAwKSA6CQkJXAorCSAgICAmKG0pLT5t
X2RhdFtNTEVOXSAtICgobSktPm1fZGF0YSArIChtKS0+bV9sZW4pKQorCisKKworLyoKKyAqIEFy
cmFuZ2UgdG8gcHJlcGVuZCBzcGFjZSBvZiBzaXplIHBsZW4gdG8gbWJ1ZiBtLiAgSWYgYSBuZXcg
bWJ1ZiBtdXN0IGJlCisgKiBhbGxvY2F0ZWQsIGhvdyBzcGVjaWZpZXMgd2hldGhlciB0byB3YWl0
LiAgSWYgdGhlIGFsbG9jYXRpb24gZmFpbHMsIHRoZQorICogb3JpZ2luYWwgbWJ1ZiBjaGFpbiBp
cyBmcmVlZCBhbmQgbSBpcyBzZXQgdG8gTlVMTC4KKyAqLworI2RlZmluZQlNX1BSRVBFTkQobSwg
cGxlbiwgaG93KSBkbyB7CQkJCQlcCisJc3RydWN0IG1idWYgKipfbW1wID0gJihtKTsJCQkJCVwK
KwlzdHJ1Y3QgbWJ1ZiAqX21tID0gKl9tbXA7CQkJCQlcCisJaW50IF9tcGxlbiA9IChwbGVuKTsJ
CQkJCQlcCisJaW50IF9fbWhvdyA9IChob3cpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoTV9M
RUFESU5HU1BBQ0UoX21tKSA+PSBfbXBsZW4pIHsJCQkJXAorCQlfbW0tPm1fZGF0YSAtPSBfbXBs
ZW47CQkJCQlcCisJCV9tbS0+bV9sZW4gKz0gX21wbGVuOwkJCQkJXAorCX0gZWxzZQkJCQkJCQkJ
XAorCQlfbW0gPSBtX3ByZXBlbmQoX21tLCBfbXBsZW4sIF9fbWhvdyk7CQkJXAorCWlmIChfbW0g
IT0gTlVMTCAmJiBfbW0tPm1fZmxhZ3MgJiBNX1BLVEhEUikJCQlcCisJCV9tbS0+bV9wa3RoZHIu
bGVuICs9IF9tcGxlbjsJCQkJXAorCSpfbW1wID0gX21tOwkJCQkJCQlcCit9IHdoaWxlICgwKQor
CisvKgorICogU2V0IHRoZSBtX2RhdGEgcG9pbnRlciBvZiBhIG5ld2x5LWFsbG9jYXRlZCBtYnVm
IChtX2dldC9NR0VUKSB0byBwbGFjZSBhbgorICogb2JqZWN0IG9mIHRoZSBzcGVjaWZpZWQgc2l6
ZSBhdCB0aGUgZW5kIG9mIHRoZSBtYnVmLCBsb25nd29yZCBhbGlnbmVkLgorICovCisjZGVmaW5l
CU1fQUxJR04obSwgbGVuKSBkbyB7CQkJCQkJXAorICAgICAgICBLQVNTRVJUKCEoKG0pLT5tX2Zs
YWdzICYgKE1fUEtUSERSfE1fRVhUKSksICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg
ICAgICAgICgiJXM6IE1fQUxJR04gbm90IG5vcm1hbCBtYnVmIiwgX19mdW5jX18pKTsgICAgICAg
ICAgICAgXAorICAgICAgICBLQVNTRVJUKChtKS0+bV9kYXRhID09IChtKS0+bV9kYXQsICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICgiJXM6IE1fQUxJR04g
bm90IGEgdmlyZ2luIG1idWYiLCBfX2Z1bmNfXykpOyAgICAgICAgICAgXAorCShtKS0+bV9kYXRh
ICs9IChNTEVOIC0gKGxlbikpICYgfihzaXplb2YobG9uZykgLSAxKTsJCVwKK30gd2hpbGUgKDAp
CisKKy8qCisgKiBBcyBhYm92ZSwgZm9yIG1idWZzIGFsbG9jYXRlZCB3aXRoIG1fZ2V0aGRyL01H
RVRIRFIgb3IgaW5pdGlhbGl6ZWQgYnkKKyAqIE1fRFVQL01PVkVfUEtUSERSLgorICovCisjZGVm
aW5lCU1IX0FMSUdOKG0sIGxlbikgZG8gewkJCQkJCVwKKyAgICAgICAgS0FTU0VSVCgobSktPm1f
ZmxhZ3MgJiBNX1BLVEhEUiAmJiAhKChtKS0+bV9mbGFncyAmIE1fRVhUKSwgICAgIFwKKyAgICAg
ICAgICAgICAgICAoIiVzOiBNSF9BTElHTiBub3QgUEtUSERSIG1idWYiLCBfX2Z1bmNfXykpOyAg
ICAgICAgICAgIFwKKyAgICAgICAgS0FTU0VSVCgobSktPm1fZGF0YSA9PSAobSktPm1fcGt0ZGF0
LCAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAoIiVzOiBNSF9B
TElHTiBub3QgYSB2aXJnaW4gbWJ1ZiIsIF9fZnVuY19fKSk7ICAgICAgICAgIFwKKwkobSktPm1f
ZGF0YSArPSAoTUhMRU4gLSAobGVuKSkgJiB+KHNpemVvZihsb25nKSAtIDEpOwkJXAorfSB3aGls
ZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcXVl
dWUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNy
c2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjQ0Zjg5OTQ5MDI2NjE5MGI4Yzc4NjFhYjAy
YjI3ZmY3MzJiMjE3ZGQgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1
ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oCkBAIC0wLDAgKzEsNjM5
IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2Yg
dGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFt
ZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFO
RAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9VU0VSX1FVRVVF
X0hfCisjZGVmaW5lCV9VU0VSX1FVRVVFX0hfCisKKy8qCisgKiBUaGlzIGZpbGUgZGVmaW5lcyBm
b3VyIHR5cGVzIG9mIGRhdGEgc3RydWN0dXJlczogc2luZ2x5LWxpbmtlZCBsaXN0cywKKyAqIHNp
bmdseS1saW5rZWQgdGFpbCBxdWV1ZXMsIGxpc3RzIGFuZCB0YWlsIHF1ZXVlcy4KKyAqCisgKiBB
IHNpbmdseS1saW5rZWQgbGlzdCBpcyBoZWFkZWQgYnkgYSBzaW5nbGUgZm9yd2FyZCBwb2ludGVy
LiBUaGUgZWxlbWVudHMKKyAqIGFyZSBzaW5nbHkgbGlua2VkIGZvciBtaW5pbXVtIHNwYWNlIGFu
ZCBwb2ludGVyIG1hbmlwdWxhdGlvbiBvdmVyaGVhZCBhdAorICogdGhlIGV4cGVuc2Ugb2YgTyhu
KSByZW1vdmFsIGZvciBhcmJpdHJhcnkgZWxlbWVudHMuIE5ldyBlbGVtZW50cyBjYW4gYmUKKyAq
IGFkZGVkIHRvIHRoZSBsaXN0IGFmdGVyIGFuIGV4aXN0aW5nIGVsZW1lbnQgb3IgYXQgdGhlIGhl
YWQgb2YgdGhlIGxpc3QuCisgKiBFbGVtZW50cyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGhlYWQg
b2YgdGhlIGxpc3Qgc2hvdWxkIHVzZSB0aGUgZXhwbGljaXQKKyAqIG1hY3JvIGZvciB0aGlzIHB1
cnBvc2UgZm9yIG9wdGltdW0gZWZmaWNpZW5jeS4gQSBzaW5nbHktbGlua2VkIGxpc3QgbWF5Cisg
KiBvbmx5IGJlIHRyYXZlcnNlZCBpbiB0aGUgZm9yd2FyZCBkaXJlY3Rpb24uICBTaW5nbHktbGlu
a2VkIGxpc3RzIGFyZSBpZGVhbAorICogZm9yIGFwcGxpY2F0aW9ucyB3aXRoIGxhcmdlIGRhdGFz
ZXRzIGFuZCBmZXcgb3Igbm8gcmVtb3ZhbHMgb3IgZm9yCisgKiBpbXBsZW1lbnRpbmcgYSBMSUZP
IHF1ZXVlLgorICoKKyAqIEEgc2luZ2x5LWxpbmtlZCB0YWlsIHF1ZXVlIGlzIGhlYWRlZCBieSBh
IHBhaXIgb2YgcG9pbnRlcnMsIG9uZSB0byB0aGUKKyAqIGhlYWQgb2YgdGhlIGxpc3QgYW5kIHRo
ZSBvdGhlciB0byB0aGUgdGFpbCBvZiB0aGUgbGlzdC4gVGhlIGVsZW1lbnRzIGFyZQorICogc2lu
Z2x5IGxpbmtlZCBmb3IgbWluaW11bSBzcGFjZSBhbmQgcG9pbnRlciBtYW5pcHVsYXRpb24gb3Zl
cmhlYWQgYXQgdGhlCisgKiBleHBlbnNlIG9mIE8obikgcmVtb3ZhbCBmb3IgYXJiaXRyYXJ5IGVs
ZW1lbnRzLiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVkCisgKiB0byB0aGUgbGlzdCBhZnRlciBh
biBleGlzdGluZyBlbGVtZW50LCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlCisg
KiBlbmQgb2YgdGhlIGxpc3QuIEVsZW1lbnRzIGJlaW5nIHJlbW92ZWQgZnJvbSB0aGUgaGVhZCBv
ZiB0aGUgdGFpbCBxdWV1ZQorICogc2hvdWxkIHVzZSB0aGUgZXhwbGljaXQgbWFjcm8gZm9yIHRo
aXMgcHVycG9zZSBmb3Igb3B0aW11bSBlZmZpY2llbmN5LgorICogQSBzaW5nbHktbGlua2VkIHRh
aWwgcXVldWUgbWF5IG9ubHkgYmUgdHJhdmVyc2VkIGluIHRoZSBmb3J3YXJkIGRpcmVjdGlvbi4K
KyAqIFNpbmdseS1saW5rZWQgdGFpbCBxdWV1ZXMgYXJlIGlkZWFsIGZvciBhcHBsaWNhdGlvbnMg
d2l0aCBsYXJnZSBkYXRhc2V0cworICogYW5kIGZldyBvciBubyByZW1vdmFscyBvciBmb3IgaW1w
bGVtZW50aW5nIGEgRklGTyBxdWV1ZS4KKyAqCisgKiBBIGxpc3QgaXMgaGVhZGVkIGJ5IGEgc2lu
Z2xlIGZvcndhcmQgcG9pbnRlciAob3IgYW4gYXJyYXkgb2YgZm9yd2FyZAorICogcG9pbnRlcnMg
Zm9yIGEgaGFzaCB0YWJsZSBoZWFkZXIpLiBUaGUgZWxlbWVudHMgYXJlIGRvdWJseSBsaW5rZWQK
KyAqIHNvIHRoYXQgYW4gYXJiaXRyYXJ5IGVsZW1lbnQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBh
IG5lZWQgdG8KKyAqIHRyYXZlcnNlIHRoZSBsaXN0LiBOZXcgZWxlbWVudHMgY2FuIGJlIGFkZGVk
IHRvIHRoZSBsaXN0IGJlZm9yZQorICogb3IgYWZ0ZXIgYW4gZXhpc3RpbmcgZWxlbWVudCBvciBh
dCB0aGUgaGVhZCBvZiB0aGUgbGlzdC4gQSBsaXN0CisgKiBtYXkgb25seSBiZSB0cmF2ZXJzZWQg
aW4gdGhlIGZvcndhcmQgZGlyZWN0aW9uLgorICoKKyAqIEEgdGFpbCBxdWV1ZSBpcyBoZWFkZWQg
YnkgYSBwYWlyIG9mIHBvaW50ZXJzLCBvbmUgdG8gdGhlIGhlYWQgb2YgdGhlCisgKiBsaXN0IGFu
ZCB0aGUgb3RoZXIgdG8gdGhlIHRhaWwgb2YgdGhlIGxpc3QuIFRoZSBlbGVtZW50cyBhcmUgZG91
Ymx5CisgKiBsaW5rZWQgc28gdGhhdCBhbiBhcmJpdHJhcnkgZWxlbWVudCBjYW4gYmUgcmVtb3Zl
ZCB3aXRob3V0IGEgbmVlZCB0bworICogdHJhdmVyc2UgdGhlIGxpc3QuIE5ldyBlbGVtZW50cyBj
YW4gYmUgYWRkZWQgdG8gdGhlIGxpc3QgYmVmb3JlIG9yCisgKiBhZnRlciBhbiBleGlzdGluZyBl
bGVtZW50LCBhdCB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgb3IgYXQgdGhlIGVuZCBvZgorICogdGhl
IGxpc3QuIEEgdGFpbCBxdWV1ZSBtYXkgYmUgdHJhdmVyc2VkIGluIGVpdGhlciBkaXJlY3Rpb24u
CisgKgorICogRm9yIGRldGFpbHMgb24gdGhlIHVzZSBvZiB0aGVzZSBtYWNyb3MsIHNlZSB0aGUg
cXVldWUoMykgbWFudWFsIHBhZ2UuCisgKgorICoKKyAqCQkJCVNMSVNUCUxJU1QJU1RBSUxRCVRB
SUxRCisgKiBfSEVBRAkJCSsJKwkrCSsKKyAqIF9IRUFEX0lOSVRJQUxJWkVSCQkrCSsJKwkrCisg
KiBfRU5UUlkJCQkrCSsJKwkrCisgKiBfSU5JVAkJCSsJKwkrCSsKKyAqIF9FTVBUWQkJCSsJKwkr
CSsKKyAqIF9GSVJTVAkJCSsJKwkrCSsKKyAqIF9ORVhUCQkJKwkrCSsJKworICogX1BSRVYJCQkt
CS0JLQkrCisgKiBfTEFTVAkJCS0JLQkrCSsKKyAqIF9GT1JFQUNICQkJKwkrCSsJKworICogX0ZP
UkVBQ0hfU0FGRQkJKwkrCSsJKworICogX0ZPUkVBQ0hfUkVWRVJTRQkJLQktCS0JKworICogX0ZP
UkVBQ0hfUkVWRVJTRV9TQUZFCS0JLQktCSsKKyAqIF9JTlNFUlRfSEVBRAkJCSsJKwkrCSsKKyAq
IF9JTlNFUlRfQkVGT1JFCQktCSsJLQkrCisgKiBfSU5TRVJUX0FGVEVSCQkrCSsJKwkrCisgKiBf
SU5TRVJUX1RBSUwJCQktCS0JKwkrCisgKiBfQ09OQ0FUCQkJLQktCSsJKworICogX1JFTU9WRV9B
RlRFUgkJKwktCSsJLQorICogX1JFTU9WRV9IRUFECQkJKwktCSsJLQorICogX1JFTU9WRQkJCSsJ
KwkrCSsKKyAqIF9TV0FQCQkJKwkrCSsJKworICoKKyAqLworI2lmZGVmIFFVRVVFX01BQ1JPX0RF
QlVHCisvKiBTdG9yZSB0aGUgbGFzdCAyIHBsYWNlcyB0aGUgcXVldWUgZWxlbWVudCBvciBoZWFk
IHdhcyBhbHRlcmVkICovCitzdHJ1Y3QgcW1fdHJhY2UgeworCWNoYXIgKiBsYXN0ZmlsZTsKKwlp
bnQgbGFzdGxpbmU7CisJY2hhciAqIHByZXZmaWxlOworCWludCBwcmV2bGluZTsKK307CisKKyNk
ZWZpbmUJVFJBQ0VCVUYJc3RydWN0IHFtX3RyYWNlIHRyYWNlOworI2RlZmluZQlUUkFTSElUKHgp
CWRvIHsoeCkgPSAodm9pZCAqKS0xO30gd2hpbGUgKDApCisjZGVmaW5lCVFNRF9TQVZFTElOSyhu
YW1lLCBsaW5rKQl2b2lkICoqbmFtZSA9ICh2b2lkICopJihsaW5rKQorCisjZGVmaW5lCVFNRF9U
UkFDRV9IRUFEKGhlYWQpIGRvIHsJCQkJCVwKKwkoaGVhZCktPnRyYWNlLnByZXZsaW5lID0gKGhl
YWQpLT50cmFjZS5sYXN0bGluZTsJCVwKKwkoaGVhZCktPnRyYWNlLnByZXZmaWxlID0gKGhlYWQp
LT50cmFjZS5sYXN0ZmlsZTsJCVwKKwkoaGVhZCktPnRyYWNlLmxhc3RsaW5lID0gX19MSU5FX187
CQkJCVwKKwkoaGVhZCktPnRyYWNlLmxhc3RmaWxlID0gX19GSUxFX187CQkJCVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUJUU1EX1RSQUNFX0VMRU0oZWxlbSkgZG8gewkJCQkJXAorCShlbGVtKS0+
dHJhY2UucHJldmxpbmUgPSAoZWxlbSktPnRyYWNlLmxhc3RsaW5lOwkJXAorCShlbGVtKS0+dHJh
Y2UucHJldmZpbGUgPSAoZWxlbSktPnRyYWNlLmxhc3RmaWxlOwkJXAorCShlbGVtKS0+dHJhY2Uu
bGFzdGxpbmUgPSBfX0xJTkVfXzsJCQkJXAorCShlbGVtKS0+dHJhY2UubGFzdGZpbGUgPSBfX0ZJ
TEVfXzsJCQkJXAorfSB3aGlsZSAoMCkKKworI2Vsc2UKKyNkZWZpbmUJUU1EX1RSQUNFX0VMRU0o
ZWxlbSkKKyNkZWZpbmUJUU1EX1RSQUNFX0hFQUQoaGVhZCkKKyNkZWZpbmUJUU1EX1NBVkVMSU5L
KG5hbWUsIGxpbmspCisjZGVmaW5lCVRSQUNFQlVGCisjZGVmaW5lCVRSQVNISVQoeCkKKyNlbmRp
ZgkvKiBRVUVVRV9NQUNST19ERUJVRyAqLworCisvKgorICogU2luZ2x5LWxpbmtlZCBMaXN0IGRl
Y2xhcmF0aW9ucy4KKyAqLworI2RlZmluZQlTTElTVF9IRUFEKG5hbWUsIHR5cGUpCQkJCQkJXAor
c3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpzbGhfZmlyc3Q7CS8qIGZpcnN0
IGVsZW1lbnQgKi8JCQlcCit9CisKKyNkZWZpbmUJU0xJU1RfSEVBRF9JTklUSUFMSVpFUihoZWFk
KQkJCQkJXAorCXsgTlVMTCB9CisKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorI2lmIGRlZmluZWQgKFNMSVNUX0VOVFJZKQorI3VuZGVmIFNMSVNUX0VOVFJZCisjZW5kaWYK
KyNlbmRpZgorCisjZGVmaW5lCVNMSVNUX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJ
CQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc2xlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKK30K
KworLyoKKyAqIFNpbmdseS1saW5rZWQgTGlzdCBmdW5jdGlvbnMuCisgKi8KKyNkZWZpbmUJU0xJ
U1RfRU1QVFkoaGVhZCkJKChoZWFkKS0+c2xoX2ZpcnN0ID09IE5VTEwpCisKKyNkZWZpbmUJU0xJ
U1RfRklSU1QoaGVhZCkJKChoZWFkKS0+c2xoX2ZpcnN0KQorCisjZGVmaW5lCVNMSVNUX0ZPUkVB
Q0godmFyLCBoZWFkLCBmaWVsZCkJCQkJCVwKKwlmb3IgKCh2YXIpID0gU0xJU1RfRklSU1QoKGhl
YWQpKTsJCQkJXAorCSAgICAodmFyKTsJCQkJCQkJXAorCSAgICAodmFyKSA9IFNMSVNUX05FWFQo
KHZhciksIGZpZWxkKSkKKworI2RlZmluZQlTTElTVF9GT1JFQUNIX1NBRkUodmFyLCBoZWFkLCBm
aWVsZCwgdHZhcikJCQlcCisJZm9yICgodmFyKSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQkJCVwK
KwkgICAgKHZhcikgJiYgKCh0dmFyKSA9IFNMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlc
CisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCVNMSVNUX0ZPUkVBQ0hfUFJFVlBUUih2
YXIsIHZhcnAsIGhlYWQsIGZpZWxkKQkJCVwKKwlmb3IgKCh2YXJwKSA9ICZTTElTVF9GSVJTVCgo
aGVhZCkpOwkJCQlcCisJICAgICgodmFyKSA9ICoodmFycCkpICE9IE5VTEw7CQkJCQlcCisJICAg
ICh2YXJwKSA9ICZTTElTVF9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZpbmUJU0xJU1RfSU5J
VChoZWFkKSBkbyB7CQkJCQkJXAorCVNMSVNUX0ZJUlNUKChoZWFkKSkgPSBOVUxMOwkJCQkJXAor
fSB3aGlsZSAoMCkKKworI2RlZmluZQlTTElTVF9JTlNFUlRfQUZURVIoc2xpc3RlbG0sIGVsbSwg
ZmllbGQpIGRvIHsJCQlcCisJU0xJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gU0xJU1RfTkVYVCgo
c2xpc3RlbG0pLCBmaWVsZCk7CVwKKwlTTElTVF9ORVhUKChzbGlzdGVsbSksIGZpZWxkKSA9IChl
bG0pOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNMSVNUX0lOU0VSVF9IRUFEKGhlYWQs
IGVsbSwgZmllbGQpIGRvIHsJCQlcCisJU0xJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gU0xJU1Rf
RklSU1QoKGhlYWQpKTsJCQlcCisJU0xJU1RfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJCQkJXAor
fSB3aGlsZSAoMCkKKworI2RlZmluZQlTTElTVF9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+Zmll
bGQuc2xlX25leHQpCisKKyNkZWZpbmUJU0xJU1RfUkVNT1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmll
bGQpIGRvIHsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5zbGVfbmV4
dCk7CQkJXAorCWlmIChTTElTVF9GSVJTVCgoaGVhZCkpID09IChlbG0pKSB7CQkJCVwKKwkJU0xJ
U1RfUkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwKKwllbHNlIHsJ
CQkJCQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IFNMSVNUX0ZJUlNUKChoZWFkKSk7CQlc
CisJCXdoaWxlIChTTElTVF9ORVhUKGN1cmVsbSwgZmllbGQpICE9IChlbG0pKQkJXAorCQkJY3Vy
ZWxtID0gU0xJU1RfTkVYVChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU0xJU1RfUkVNT1ZFX0FGVEVS
KGN1cmVsbSwgZmllbGQpOwkJCVwKKwl9CQkJCQkJCQlcCisJVFJBU0hJVCgqb2xkbmV4dCk7CQkJ
CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTElTVF9SRU1PVkVfQUZURVIoZWxtLCBmaWVs
ZCkgZG8gewkJCQlcCisJU0xJU1RfTkVYVChlbG0sIGZpZWxkKSA9CQkJCQlcCisJICAgIFNMSVNU
X05FWFQoU0xJU1RfTkVYVChlbG0sIGZpZWxkKSwgZmllbGQpOwkJCVwKK30gd2hpbGUgKDApCisK
KyNkZWZpbmUJU0xJU1RfUkVNT1ZFX0hFQUQoaGVhZCwgZmllbGQpIGRvIHsJCQkJXAorCVNMSVNU
X0ZJUlNUKChoZWFkKSkgPSBTTElTVF9ORVhUKFNMSVNUX0ZJUlNUKChoZWFkKSksIGZpZWxkKTsJ
XAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTTElTVF9TV0FQKGhlYWQxLCBoZWFkMiwgdHlwZSkg
ZG8gewkJCQlcCisJc3RydWN0IHR5cGUgKnN3YXBfZmlyc3QgPSBTTElTVF9GSVJTVChoZWFkMSk7
CQkJXAorCVNMSVNUX0ZJUlNUKGhlYWQxKSA9IFNMSVNUX0ZJUlNUKGhlYWQyKTsJCQlcCisJU0xJ
U1RfRklSU1QoaGVhZDIpID0gc3dhcF9maXJzdDsJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAq
IFNpbmdseS1saW5rZWQgVGFpbCBxdWV1ZSBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJU1RB
SUxRX0hFQUQobmFtZSwgdHlwZSkJCQkJCQlcCitzdHJ1Y3QgbmFtZSB7CQkJCQkJCQlcCisJc3Ry
dWN0IHR5cGUgKnN0cWhfZmlyc3Q7LyogZmlyc3QgZWxlbWVudCAqLwkJCVwKKwlzdHJ1Y3QgdHlw
ZSAqKnN0cWhfbGFzdDsvKiBhZGRyIG9mIGxhc3QgbmV4dCBlbGVtZW50ICovCQlcCit9CisKKyNk
ZWZpbmUJU1RBSUxRX0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwsICYoaGVh
ZCkuc3RxaF9maXJzdCB9CisKKyNkZWZpbmUJU1RBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3Ry
dWN0IHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3RxZV9uZXh0OwkvKiBuZXh0IGVsZW1lbnQg
Ki8JCQlcCit9CisKKy8qCisgKiBTaW5nbHktbGlua2VkIFRhaWwgcXVldWUgZnVuY3Rpb25zLgor
ICovCisjZGVmaW5lCVNUQUlMUV9DT05DQVQoaGVhZDEsIGhlYWQyKSBkbyB7CQkJCVwKKwlpZiAo
IVNUQUlMUV9FTVBUWSgoaGVhZDIpKSkgewkJCQkJXAorCQkqKGhlYWQxKS0+c3RxaF9sYXN0ID0g
KGhlYWQyKS0+c3RxaF9maXJzdDsJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0ID0gKGhlYWQyKS0+
c3RxaF9sYXN0OwkJXAorCQlTVEFJTFFfSU5JVCgoaGVhZDIpKTsJCQkJCVwKKwl9CQkJCQkJCQlc
Cit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9FTVBUWShoZWFkKQkoKGhlYWQpLT5zdHFo
X2ZpcnN0ID09IE5VTEwpCisKKyNkZWZpbmUJU1RBSUxRX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnN0
cWhfZmlyc3QpCisKKyNkZWZpbmUJU1RBSUxRX0ZPUkVBQ0godmFyLCBoZWFkLCBmaWVsZCkJCQkJ
XAorCWZvcigodmFyKSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgKHZhcik7CQkJ
CQkJCVwKKwkgICAodmFyKSA9IFNUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKworI2RlZmlu
ZQlTVEFJTFFfRk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAo
KHZhcikgPSBTVEFJTFFfRklSU1QoKGhlYWQpKTsJCQkJXAorCSAgICAodmFyKSAmJiAoKHR2YXIp
ID0gU1RBSUxRX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlcCisJICAgICh2YXIpID0gKHR2YXIp
KQorCisjZGVmaW5lCVNUQUlMUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJU1RBSUxRX0ZJUlNU
KChoZWFkKSkgPSBOVUxMOwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9GSVJT
VCgoaGVhZCkpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJU1RBSUxRX0lOU0VSVF9BRlRF
UihoZWFkLCB0cWVsbSwgZWxtLCBmaWVsZCkgZG8gewkJXAorCWlmICgoU1RBSUxRX05FWFQoKGVs
bSksIGZpZWxkKSA9IFNUQUlMUV9ORVhUKCh0cWVsbSksIGZpZWxkKSkgPT0gTlVMTClcCisJCSho
ZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJU1RBSUxR
X05FWFQoKHRxZWxtKSwgZmllbGQpID0gKGVsbSk7CQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZp
bmUJU1RBSUxRX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKChT
VEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpID0gU1RBSUxRX0ZJUlNUKChoZWFkKSkpID09IE5VTEwp
CVwKKwkJKGhlYWQpLT5zdHFoX2xhc3QgPSAmU1RBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwK
KwlTVEFJTFFfRklSU1QoKGhlYWQpKSA9IChlbG0pOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2Rl
ZmluZQlTVEFJTFFfSU5TRVJUX1RBSUwoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlTVEFJ
TFFfTkVYVCgoZWxtKSwgZmllbGQpID0gTlVMTDsJCQkJXAorCSooaGVhZCktPnN0cWhfbGFzdCA9
IChlbG0pOwkJCQkJXAorCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBm
aWVsZCk7CQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlTVEFJTFFfTEFTVChoZWFkLCB0eXBl
LCBmaWVsZCkJCQkJCVwKKwkoU1RBSUxRX0VNUFRZKChoZWFkKSkgPwkJCQkJCVwKKwkJTlVMTCA6
CQkJCQkJCVwKKwkgICAgICAgICgoc3RydWN0IHR5cGUgKikodm9pZCAqKQkJCQlcCisJCSgoY2hh
ciAqKSgoaGVhZCktPnN0cWhfbGFzdCkgLSBfX29mZnNldG9mKHN0cnVjdCB0eXBlLCBmaWVsZCkp
KSkKKworI2RlZmluZQlTVEFJTFFfTkVYVChlbG0sIGZpZWxkKQkoKGVsbSktPmZpZWxkLnN0cWVf
bmV4dCkKKworI2RlZmluZQlTVEFJTFFfUkVNT1ZFKGhlYWQsIGVsbSwgdHlwZSwgZmllbGQpIGRv
IHsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5leHQsIChlbG0pLT5maWVsZC5zdHFlX25leHQpOwkJ
CVwKKwlpZiAoU1RBSUxRX0ZJUlNUKChoZWFkKSkgPT0gKGVsbSkpIHsJCQkJXAorCQlTVEFJTFFf
UkVNT1ZFX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJXAorCX0JCQkJCQkJCVwKKwllbHNlIHsJCQkJ
CQkJCVwKKwkJc3RydWN0IHR5cGUgKmN1cmVsbSA9IFNUQUlMUV9GSVJTVCgoaGVhZCkpOwkJXAor
CQl3aGlsZSAoU1RBSUxRX05FWFQoY3VyZWxtLCBmaWVsZCkgIT0gKGVsbSkpCQlcCisJCQljdXJl
bG0gPSBTVEFJTFFfTkVYVChjdXJlbG0sIGZpZWxkKTsJCVwKKwkJU1RBSUxRX1JFTU9WRV9BRlRF
UihoZWFkLCBjdXJlbG0sIGZpZWxkKTsJCVwKKwl9CQkJCQkJCQlcCisJVFJBU0hJVCgqb2xkbmV4
dCk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBTVEFJTFFfUkVNT1ZFX0FGVEVSKGhl
YWQsIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJaWYgKChTVEFJTFFfTkVYVChlbG0sIGZpZWxkKSA9
CQkJCQlcCisJICAgICBTVEFJTFFfTkVYVChTVEFJTFFfTkVYVChlbG0sIGZpZWxkKSwgZmllbGQp
KSA9PSBOVUxMKQlcCisJCShoZWFkKS0+c3RxaF9sYXN0ID0gJlNUQUlMUV9ORVhUKChlbG0pLCBm
aWVsZCk7CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVNUQUlMUV9SRU1PVkVfSEVBRChoZWFk
LCBmaWVsZCkgZG8gewkJCQlcCisJaWYgKChTVEFJTFFfRklSU1QoKGhlYWQpKSA9CQkJCQlcCisJ
ICAgICBTVEFJTFFfTkVYVChTVEFJTFFfRklSU1QoKGhlYWQpKSwgZmllbGQpKSA9PSBOVUxMKQkJ
XAorCQkoaGVhZCktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoKGhlYWQpKTsJCVwKK30gd2hp
bGUgKDApCisKKyNkZWZpbmUgU1RBSUxRX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlKSBkbyB7CQkJ
CVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF9maXJzdCA9IFNUQUlMUV9GSVJTVChoZWFkMSk7CQkJXAor
CXN0cnVjdCB0eXBlICoqc3dhcF9sYXN0ID0gKGhlYWQxKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJ
TFFfRklSU1QoaGVhZDEpID0gU1RBSUxRX0ZJUlNUKGhlYWQyKTsJCQlcCisJKGhlYWQxKS0+c3Rx
aF9sYXN0ID0gKGhlYWQyKS0+c3RxaF9sYXN0OwkJCVwKKwlTVEFJTFFfRklSU1QoaGVhZDIpID0g
c3dhcF9maXJzdDsJCQkJXAorCShoZWFkMiktPnN0cWhfbGFzdCA9IHN3YXBfbGFzdDsJCQkJCVwK
KwlpZiAoU1RBSUxRX0VNUFRZKGhlYWQxKSkJCQkJCVwKKwkJKGhlYWQxKS0+c3RxaF9sYXN0ID0g
JlNUQUlMUV9GSVJTVChoZWFkMSk7CQlcCisJaWYgKFNUQUlMUV9FTVBUWShoZWFkMikpCQkJCQlc
CisJCShoZWFkMiktPnN0cWhfbGFzdCA9ICZTVEFJTFFfRklSU1QoaGVhZDIpOwkJXAorfSB3aGls
ZSAoMCkKKworCisvKgorICogTGlzdCBkZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJTElTVF9I
RUFEKG5hbWUsIHR5cGUpCQkJCQkJXAorc3RydWN0IG5hbWUgewkJCQkJCQkJXAorCXN0cnVjdCB0
eXBlICpsaF9maXJzdDsJLyogZmlyc3QgZWxlbWVudCAqLwkJCVwKK30KKworI2RlZmluZQlMSVNU
X0hFQURfSU5JVElBTElaRVIoaGVhZCkJCQkJCVwKKwl7IE5VTEwgfQorCisjZGVmaW5lCUxJU1Rf
RU5UUlkodHlwZSkJCQkJCQlcCitzdHJ1Y3QgewkJCQkJCQkJXAorCXN0cnVjdCB0eXBlICpsZV9u
ZXh0OwkvKiBuZXh0IGVsZW1lbnQgKi8JCQlcCisJc3RydWN0IHR5cGUgKipsZV9wcmV2OwkvKiBh
ZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAqLwlcCit9CisKKy8qCisgKiBMaXN0IGZ1
bmN0aW9ucy4KKyAqLworCisjaWYgZGVmaW5lZChJTlZBUklBTlRTKQorI2RlZmluZQlRTURfTElT
VF9DSEVDS19IRUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCQlcCisJaWYgKExJU1RfRklSU1QoKGhl
YWQpKSAhPSBOVUxMICYmCQkJCQlcCisJICAgIExJU1RfRklSU1QoKGhlYWQpKS0+ZmllbGQubGVf
cHJldiAhPQkJCQlcCisJICAgICAmTElTVF9GSVJTVCgoaGVhZCkpKQkJCQkJCVwKKwkJcGFuaWMo
IkJhZCBsaXN0IGhlYWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsICh2b2lkICopKGhlYWQpKTsJ
XAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlRTURfTElTVF9DSEVDS19ORVhUKGVsbSwgZmllbGQp
IGRvIHsJCQkJCVwKKwlpZiAoTElTVF9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCAmJgkJCQkJ
XAorCSAgICBMSVNUX05FWFQoKGVsbSksIGZpZWxkKS0+ZmllbGQubGVfcHJldiAhPQkJCQlcCisJ
ICAgICAmKChlbG0pLT5maWVsZC5sZV9uZXh0KSkJCQkJCQlcCisJICAgICAJcGFuaWMoIkJhZCBs
aW5rIGVsbSAlcCBuZXh0LT5wcmV2ICE9IGVsbSIsICh2b2lkICopKGVsbSkpOwlcCit9IHdoaWxl
ICgwKQorCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkgZG8gewkJCQkJ
XAorCWlmICgqKGVsbSktPmZpZWxkLmxlX3ByZXYgIT0gKGVsbSkpCQkJCQlcCisJCXBhbmljKCJC
YWQgbGluayBlbG0gJXAgcHJldi0+bmV4dCAhPSBlbG0iLCAodm9pZCAqKShlbG0pKTsJXAorfSB3
aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX0hFQUQoaGVhZCwgZmllbGQp
CisjZGVmaW5lCVFNRF9MSVNUX0NIRUNLX05FWFQoZWxtLCBmaWVsZCkKKyNkZWZpbmUJUU1EX0xJ
U1RfQ0hFQ0tfUFJFVihlbG0sIGZpZWxkKQorI2VuZGlmIC8qIChJTlZBUklBTlRTKSAqLworCisj
ZGVmaW5lCUxJU1RfRU1QVFkoaGVhZCkJKChoZWFkKS0+bGhfZmlyc3QgPT0gTlVMTCkKKworI2Rl
ZmluZQlMSVNUX0ZJUlNUKGhlYWQpCSgoaGVhZCktPmxoX2ZpcnN0KQorCisjZGVmaW5lCUxJU1Rf
Rk9SRUFDSCh2YXIsIGhlYWQsIGZpZWxkKQkJCQkJXAorCWZvciAoKHZhcikgPSBMSVNUX0ZJUlNU
KChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwKKwkgICAgKHZhcikgPSBMSVNUX05F
WFQoKHZhciksIGZpZWxkKSkKKworI2RlZmluZQlMSVNUX0ZPUkVBQ0hfU0FGRSh2YXIsIGhlYWQs
IGZpZWxkLCB0dmFyKQkJCVwKKwlmb3IgKCh2YXIpID0gTElTVF9GSVJTVCgoaGVhZCkpOwkJCQlc
CisJICAgICh2YXIpICYmICgodHZhcikgPSBMSVNUX05FWFQoKHZhciksIGZpZWxkKSwgMSk7CQlc
CisJICAgICh2YXIpID0gKHR2YXIpKQorCisjZGVmaW5lCUxJU1RfSU5JVChoZWFkKSBkbyB7CQkJ
CQkJXAorCUxJU1RfRklSU1QoKGhlYWQpKSA9IE5VTEw7CQkJCQlcCit9IHdoaWxlICgwKQorCisj
ZGVmaW5lCUxJU1RfSU5TRVJUX0FGVEVSKGxpc3RlbG0sIGVsbSwgZmllbGQpIGRvIHsJCQlcCisJ
UU1EX0xJU1RfQ0hFQ0tfTkVYVChsaXN0ZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoKExJU1RfTkVY
VCgoZWxtKSwgZmllbGQpID0gTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpKSAhPSBOVUxMKVwK
KwkJTElTVF9ORVhUKChsaXN0ZWxtKSwgZmllbGQpLT5maWVsZC5sZV9wcmV2ID0JCVwKKwkJICAg
ICZMSVNUX05FWFQoKGVsbSksIGZpZWxkKTsJCQkJXAorCUxJU1RfTkVYVCgobGlzdGVsbSksIGZp
ZWxkKSA9IChlbG0pOwkJCQlcCisJKGVsbSktPmZpZWxkLmxlX3ByZXYgPSAmTElTVF9ORVhUKChs
aXN0ZWxtKSwgZmllbGQpOwkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlMSVNUX0lOU0VSVF9C
RUZPUkUobGlzdGVsbSwgZWxtLCBmaWVsZCkgZG8gewkJCVwKKwlRTURfTElTVF9DSEVDS19QUkVW
KGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCShlbG0pLT5maWVsZC5sZV9wcmV2ID0gKGxpc3RlbG0p
LT5maWVsZC5sZV9wcmV2OwkJXAorCUxJU1RfTkVYVCgoZWxtKSwgZmllbGQpID0gKGxpc3RlbG0p
OwkJCQlcCisJKihsaXN0ZWxtKS0+ZmllbGQubGVfcHJldiA9IChlbG0pOwkJCQlcCisJKGxpc3Rl
bG0pLT5maWVsZC5sZV9wcmV2ID0gJkxJU1RfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorfSB3aGls
ZSAoMCkKKworI2RlZmluZQlMSVNUX0lOU0VSVF9IRUFEKGhlYWQsIGVsbSwgZmllbGQpIGRvIHsJ
CQkJXAorCVFNRF9MSVNUX0NIRUNLX0hFQUQoKGhlYWQpLCBmaWVsZCk7CQkJCVwKKwlpZiAoKExJ
U1RfTkVYVCgoZWxtKSwgZmllbGQpID0gTElTVF9GSVJTVCgoaGVhZCkpKSAhPSBOVUxMKQlcCisJ
CUxJU1RfRklSU1QoKGhlYWQpKS0+ZmllbGQubGVfcHJldiA9ICZMSVNUX05FWFQoKGVsbSksIGZp
ZWxkKTtcCisJTElTVF9GSVJTVCgoaGVhZCkpID0gKGVsbSk7CQkJCQlcCisJKGVsbSktPmZpZWxk
LmxlX3ByZXYgPSAmTElTVF9GSVJTVCgoaGVhZCkpOwkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZp
bmUJTElTVF9ORVhUKGVsbSwgZmllbGQpCSgoZWxtKS0+ZmllbGQubGVfbmV4dCkKKworI2RlZmlu
ZQlMSVNUX1JFTU9WRShlbG0sIGZpZWxkKSBkbyB7CQkJCQlcCisJUU1EX1NBVkVMSU5LKG9sZG5l
eHQsIChlbG0pLT5maWVsZC5sZV9uZXh0KTsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZHByZXYsIChl
bG0pLT5maWVsZC5sZV9wcmV2KTsJCQlcCisJUU1EX0xJU1RfQ0hFQ0tfTkVYVChlbG0sIGZpZWxk
KTsJCQkJXAorCVFNRF9MSVNUX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoTElT
VF9ORVhUKChlbG0pLCBmaWVsZCkgIT0gTlVMTCkJCQkJXAorCQlMSVNUX05FWFQoKGVsbSksIGZp
ZWxkKS0+ZmllbGQubGVfcHJldiA9IAkJXAorCQkgICAgKGVsbSktPmZpZWxkLmxlX3ByZXY7CQkJ
CVwKKwkqKGVsbSktPmZpZWxkLmxlX3ByZXYgPSBMSVNUX05FWFQoKGVsbSksIGZpZWxkKTsJCVwK
KwlUUkFTSElUKCpvbGRuZXh0KTsJCQkJCQlcCisJVFJBU0hJVCgqb2xkcHJldik7CQkJCQkJXAor
fSB3aGlsZSAoMCkKKworI2RlZmluZSBMSVNUX1NXQVAoaGVhZDEsIGhlYWQyLCB0eXBlLCBmaWVs
ZCkgZG8gewkJCVwKKwlzdHJ1Y3QgdHlwZSAqc3dhcF90bXAgPSBMSVNUX0ZJUlNUKChoZWFkMSkp
OwkJCVwKKwlMSVNUX0ZJUlNUKChoZWFkMSkpID0gTElTVF9GSVJTVCgoaGVhZDIpKTsJCQlcCisJ
TElTVF9GSVJTVCgoaGVhZDIpKSA9IHN3YXBfdG1wOwkJCQkJXAorCWlmICgoc3dhcF90bXAgPSBM
SVNUX0ZJUlNUKChoZWFkMSkpKSAhPSBOVUxMKQkJCVwKKwkJc3dhcF90bXAtPmZpZWxkLmxlX3By
ZXYgPSAmTElTVF9GSVJTVCgoaGVhZDEpKTsJCVwKKwlpZiAoKHN3YXBfdG1wID0gTElTVF9GSVJT
VCgoaGVhZDIpKSkgIT0gTlVMTCkJCQlcCisJCXN3YXBfdG1wLT5maWVsZC5sZV9wcmV2ID0gJkxJ
U1RfRklSU1QoKGhlYWQyKSk7CQlcCit9IHdoaWxlICgwKQorCisvKgorICogVGFpbCBxdWV1ZSBk
ZWNsYXJhdGlvbnMuCisgKi8KKyNkZWZpbmUJVEFJTFFfSEVBRChuYW1lLCB0eXBlKQkJCQkJCVwK
K3N0cnVjdCBuYW1lIHsJCQkJCQkJCVwKKwlzdHJ1Y3QgdHlwZSAqdHFoX2ZpcnN0OwkvKiBmaXJz
dCBlbGVtZW50ICovCQkJXAorCXN0cnVjdCB0eXBlICoqdHFoX2xhc3Q7CS8qIGFkZHIgb2YgbGFz
dCBuZXh0IGVsZW1lbnQgKi8JCVwKKwlUUkFDRUJVRgkJCQkJCQlcCit9CisKKyNkZWZpbmUJVEFJ
TFFfSEVBRF9JTklUSUFMSVpFUihoZWFkKQkJCQkJXAorCXsgTlVMTCwgJihoZWFkKS50cWhfZmly
c3QgfQorCisjZGVmaW5lCVRBSUxRX0VOVFJZKHR5cGUpCQkJCQkJXAorc3RydWN0IHsJCQkJCQkJ
CVwKKwlzdHJ1Y3QgdHlwZSAqdHFlX25leHQ7CS8qIG5leHQgZWxlbWVudCAqLwkJCVwKKwlzdHJ1
Y3QgdHlwZSAqKnRxZV9wcmV2OwkvKiBhZGRyZXNzIG9mIHByZXZpb3VzIG5leHQgZWxlbWVudCAq
LwlcCisJVFJBQ0VCVUYJCQkJCQkJXAorfQorCisvKgorICogVGFpbCBxdWV1ZSBmdW5jdGlvbnMu
CisgKi8KKyNpZiBkZWZpbmVkKElOVkFSSUFOVFMpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19I
RUFEKGhlYWQsIGZpZWxkKSBkbyB7CQkJCQlcCisJaWYgKCFUQUlMUV9FTVBUWShoZWFkKSAmJgkJ
CQkJCVwKKwkgICAgVEFJTFFfRklSU1QoKGhlYWQpKS0+ZmllbGQudHFlX3ByZXYgIT0JCQkJXAor
CSAgICAgJlRBSUxRX0ZJUlNUKChoZWFkKSkpCQkJCQkJXAorCQlwYW5pYygiQmFkIHRhaWxxIGhl
YWQgJXAgZmlyc3QtPnByZXYgIT0gaGVhZCIsICh2b2lkICopKGhlYWQpKTsJXAorfSB3aGlsZSAo
MCkKKworI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfVEFJTChoZWFkLCBmaWVsZCkgZG8gewkJCQkJ
XAorCWlmICgqKGhlYWQpLT50cWhfbGFzdCAhPSBOVUxMKQkJCQkJCVwKKwkgICAgCXBhbmljKCJC
YWQgdGFpbHEgTkVYVCglcC0+dHFoX2xhc3QpICE9IE5VTEwiLCAodm9pZCAqKShoZWFkKSk7IAlc
Cit9IHdoaWxlICgwKQorCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQp
IGRvIHsJCQkJCVwKKwlpZiAoVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpICE9IE5VTEwgJiYJCQkJ
CVwKKwkgICAgVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiAhPQkJCQlc
CisJICAgICAmKChlbG0pLT5maWVsZC50cWVfbmV4dCkpCQkJCQkJXAorCQlwYW5pYygiQmFkIGxp
bmsgZWxtICVwIG5leHQtPnByZXYgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7CVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCkgZG8gewkJCQkJ
XAorCWlmICgqKGVsbSktPmZpZWxkLnRxZV9wcmV2ICE9IChlbG0pKQkJCQkJXAorCQlwYW5pYygi
QmFkIGxpbmsgZWxtICVwIHByZXYtPm5leHQgIT0gZWxtIiwgKHZvaWQgKikoZWxtKSk7CVwKK30g
d2hpbGUgKDApCisjZWxzZQorI2RlZmluZQlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVs
ZCkKKyNkZWZpbmUJUU1EX1RBSUxRX0NIRUNLX1RBSUwoaGVhZCwgaGVhZG5hbWUpCisjZGVmaW5l
CVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpCisjZGVmaW5lCVFNRF9UQUlMUV9DSEVD
S19QUkVWKGVsbSwgZmllbGQpCisjZW5kaWYgLyogKElOVkFSSUFOVFMpICovCisKKyNkZWZpbmUJ
VEFJTFFfQ09OQ0FUKGhlYWQxLCBoZWFkMiwgZmllbGQpIGRvIHsJCQkJXAorCWlmICghVEFJTFFf
RU1QVFkoaGVhZDIpKSB7CQkJCQlcCisJCSooaGVhZDEpLT50cWhfbGFzdCA9IChoZWFkMiktPnRx
aF9maXJzdDsJCVwKKwkJKGhlYWQyKS0+dHFoX2ZpcnN0LT5maWVsZC50cWVfcHJldiA9IChoZWFk
MSktPnRxaF9sYXN0OwlcCisJCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQyKS0+dHFoX2xhc3Q7
CQkJXAorCQlUQUlMUV9JTklUKChoZWFkMikpOwkJCQkJXAorCQlRTURfVFJBQ0VfSEVBRChoZWFk
MSk7CQkJCQlcCisJCVFNRF9UUkFDRV9IRUFEKGhlYWQyKTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9
IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxRX0VNUFRZKGhlYWQpCSgoaGVhZCktPnRxaF9maXJz
dCA9PSBOVUxMKQorCisjZGVmaW5lCVRBSUxRX0ZJUlNUKGhlYWQpCSgoaGVhZCktPnRxaF9maXJz
dCkKKworI2RlZmluZQlUQUlMUV9GT1JFQUNIKHZhciwgaGVhZCwgZmllbGQpCQkJCQlcCisJZm9y
ICgodmFyKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSk7CQkJCVwKKwkgICAgKHZhcik7CQkJCQkJCVwK
KwkgICAgKHZhcikgPSBUQUlMUV9ORVhUKCh2YXIpLCBmaWVsZCkpCisKKyNkZWZpbmUJVEFJTFFf
Rk9SRUFDSF9TQUZFKHZhciwgaGVhZCwgZmllbGQsIHR2YXIpCQkJXAorCWZvciAoKHZhcikgPSBU
QUlMUV9GSVJTVCgoaGVhZCkpOwkJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9O
RVhUKCh2YXIpLCBmaWVsZCksIDEpOwkJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmlu
ZQlUQUlMUV9GT1JFQUNIX1JFVkVSU0UodmFyLCBoZWFkLCBoZWFkbmFtZSwgZmllbGQpCQlcCisJ
Zm9yICgodmFyKSA9IFRBSUxRX0xBU1QoKGhlYWQpLCBoZWFkbmFtZSk7CQkJXAorCSAgICAodmFy
KTsJCQkJCQkJXAorCSAgICAodmFyKSA9IFRBSUxRX1BSRVYoKHZhciksIGhlYWRuYW1lLCBmaWVs
ZCkpCisKKyNkZWZpbmUJVEFJTFFfRk9SRUFDSF9SRVZFUlNFX1NBRkUodmFyLCBoZWFkLCBoZWFk
bmFtZSwgZmllbGQsIHR2YXIpCVwKKwlmb3IgKCh2YXIpID0gVEFJTFFfTEFTVCgoaGVhZCksIGhl
YWRuYW1lKTsJCQlcCisJICAgICh2YXIpICYmICgodHZhcikgPSBUQUlMUV9QUkVWKCh2YXIpLCBo
ZWFkbmFtZSwgZmllbGQpLCAxKTsJXAorCSAgICAodmFyKSA9ICh0dmFyKSkKKworI2RlZmluZQlU
QUlMUV9JTklUKGhlYWQpIGRvIHsJCQkJCQlcCisJVEFJTFFfRklSU1QoKGhlYWQpKSA9IE5VTEw7
CQkJCQlcCisJKGhlYWQpLT50cWhfbGFzdCA9ICZUQUlMUV9GSVJTVCgoaGVhZCkpOwkJCVwKKwlR
TURfVFJBQ0VfSEVBRChoZWFkKTsJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCVRBSUxR
X0lOU0VSVF9BRlRFUihoZWFkLCBsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQlcCisJUU1EX1RB
SUxRX0NIRUNLX05FWFQobGlzdGVsbSwgZmllbGQpOwkJCQlcCisJaWYgKChUQUlMUV9ORVhUKChl
bG0pLCBmaWVsZCkgPSBUQUlMUV9ORVhUKChsaXN0ZWxtKSwgZmllbGQpKSAhPSBOVUxMKVwKKwkJ
VEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpLT5maWVsZC50cWVfcHJldiA9IAkJXAorCQkgICAgJlRB
SUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQkoaGVhZCkt
PnRxaF9sYXN0ID0gJlRBSUxRX05FWFQoKGVsbSksIGZpZWxkKTsJCVwKKwkJUU1EX1RSQUNFX0hF
QUQoaGVhZCk7CQkJCQlcCisJfQkJCQkJCQkJXAorCVRBSUxRX05FWFQoKGxpc3RlbG0pLCBmaWVs
ZCkgPSAoZWxtKTsJCQkJXAorCShlbG0pLT5maWVsZC50cWVfcHJldiA9ICZUQUlMUV9ORVhUKChs
aXN0ZWxtKSwgZmllbGQpOwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJCQkJ
XAorCVFNRF9UUkFDRV9FTEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwKK30gd2hpbGUgKDApCisK
KyNkZWZpbmUJVEFJTFFfSU5TRVJUX0JFRk9SRShsaXN0ZWxtLCBlbG0sIGZpZWxkKSBkbyB7CQkJ
XAorCVFNRF9UQUlMUV9DSEVDS19QUkVWKGxpc3RlbG0sIGZpZWxkKTsJCQkJXAorCShlbG0pLT5m
aWVsZC50cWVfcHJldiA9IChsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXY7CQlcCisJVEFJTFFfTkVY
VCgoZWxtKSwgZmllbGQpID0gKGxpc3RlbG0pOwkJCQlcCisJKihsaXN0ZWxtKS0+ZmllbGQudHFl
X3ByZXYgPSAoZWxtKTsJCQkJXAorCShsaXN0ZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFf
TkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVFNRF9UUkFDRV9FTEVNKCYoZWxtKS0+ZmllbGQpOwkJ
CQkJXAorCVFNRF9UUkFDRV9FTEVNKCZsaXN0ZWxtLT5maWVsZCk7CQkJCVwKK30gd2hpbGUgKDAp
CisKKyNkZWZpbmUJVEFJTFFfSU5TRVJUX0hFQUQoaGVhZCwgZWxtLCBmaWVsZCkgZG8gewkJCVwK
KwlRTURfVEFJTFFfQ0hFQ0tfSEVBRChoZWFkLCBmaWVsZCk7CQkJCVwKKwlpZiAoKFRBSUxRX05F
WFQoKGVsbSksIGZpZWxkKSA9IFRBSUxRX0ZJUlNUKChoZWFkKSkpICE9IE5VTEwpCVwKKwkJVEFJ
TFFfRklSU1QoKGhlYWQpKS0+ZmllbGQudHFlX3ByZXYgPQkJCVwKKwkJICAgICZUQUlMUV9ORVhU
KChlbG0pLCBmaWVsZCk7CQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCShoZWFkKS0+dHFoX2xhc3Qg
PSAmVEFJTFFfTkVYVCgoZWxtKSwgZmllbGQpOwkJXAorCVRBSUxRX0ZJUlNUKChoZWFkKSkgPSAo
ZWxtKTsJCQkJCVwKKwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAmVEFJTFFfRklSU1QoKGhlYWQp
KTsJCQlcCisJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQkJXAorCVFNRF9UUkFDRV9FTEVNKCYo
ZWxtKS0+ZmllbGQpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlUQUlMUV9JTlNFUlRf
VEFJTChoZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJXAorCVFNRF9UQUlMUV9DSEVDS19UQUlMKGhl
YWQsIGZpZWxkKTsJCQkJXAorCVRBSUxRX05FWFQoKGVsbSksIGZpZWxkKSA9IE5VTEw7CQkJCVwK
KwkoZWxtKS0+ZmllbGQudHFlX3ByZXYgPSAoaGVhZCktPnRxaF9sYXN0OwkJCVwKKwkqKGhlYWQp
LT50cWhfbGFzdCA9IChlbG0pOwkJCQkJXAorCShoZWFkKS0+dHFoX2xhc3QgPSAmVEFJTFFfTkVY
VCgoZWxtKSwgZmllbGQpOwkJCVwKKwlRTURfVFJBQ0VfSEVBRChoZWFkKTsJCQkJCQlcCisJUU1E
X1RSQUNFX0VMRU0oJihlbG0pLT5maWVsZCk7CQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5l
CVRBSUxRX0xBU1QoaGVhZCwgaGVhZG5hbWUpCQkJCQlcCisJKCooKChzdHJ1Y3QgaGVhZG5hbWUg
KikoKGhlYWQpLT50cWhfbGFzdCkpLT50cWhfbGFzdCkpCisKKyNkZWZpbmUJVEFJTFFfTkVYVChl
bG0sIGZpZWxkKSAoKGVsbSktPmZpZWxkLnRxZV9uZXh0KQorCisjZGVmaW5lCVRBSUxRX1BSRVYo
ZWxtLCBoZWFkbmFtZSwgZmllbGQpCQkJCVwKKwkoKigoKHN0cnVjdCBoZWFkbmFtZSAqKSgoZWxt
KS0+ZmllbGQudHFlX3ByZXYpKS0+dHFoX2xhc3QpKQorCisjZGVmaW5lCVRBSUxRX1JFTU9WRSho
ZWFkLCBlbG0sIGZpZWxkKSBkbyB7CQkJCVwKKwlRTURfU0FWRUxJTksob2xkbmV4dCwgKGVsbSkt
PmZpZWxkLnRxZV9uZXh0KTsJCQlcCisJUU1EX1NBVkVMSU5LKG9sZHByZXYsIChlbG0pLT5maWVs
ZC50cWVfcHJldik7CQkJXAorCVFNRF9UQUlMUV9DSEVDS19ORVhUKGVsbSwgZmllbGQpOwkJCQlc
CisJUU1EX1RBSUxRX0NIRUNLX1BSRVYoZWxtLCBmaWVsZCk7CQkJCVwKKwlpZiAoKFRBSUxRX05F
WFQoKGVsbSksIGZpZWxkKSkgIT0gTlVMTCkJCQkJXAorCQlUQUlMUV9ORVhUKChlbG0pLCBmaWVs
ZCktPmZpZWxkLnRxZV9wcmV2ID0gCQlcCisJCSAgICAoZWxtKS0+ZmllbGQudHFlX3ByZXY7CQkJ
CVwKKwllbHNlIHsJCQkJCQkJCVwKKwkJKGhlYWQpLT50cWhfbGFzdCA9IChlbG0pLT5maWVsZC50
cWVfcHJldjsJCVwKKwkJUU1EX1RSQUNFX0hFQUQoaGVhZCk7CQkJCQlcCisJfQkJCQkJCQkJXAor
CSooZWxtKS0+ZmllbGQudHFlX3ByZXYgPSBUQUlMUV9ORVhUKChlbG0pLCBmaWVsZCk7CQlcCisJ
VFJBU0hJVCgqb2xkbmV4dCk7CQkJCQkJXAorCVRSQVNISVQoKm9sZHByZXYpOwkJCQkJCVwKKwlR
TURfVFJBQ0VfRUxFTSgmKGVsbSktPmZpZWxkKTsJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZp
bmUgVEFJTFFfU1dBUChoZWFkMSwgaGVhZDIsIHR5cGUsIGZpZWxkKSBkbyB7CQkJXAorCXN0cnVj
dCB0eXBlICpzd2FwX2ZpcnN0ID0gKGhlYWQxKS0+dHFoX2ZpcnN0OwkJCVwKKwlzdHJ1Y3QgdHlw
ZSAqKnN3YXBfbGFzdCA9IChoZWFkMSktPnRxaF9sYXN0OwkJCVwKKwkoaGVhZDEpLT50cWhfZmly
c3QgPSAoaGVhZDIpLT50cWhfZmlyc3Q7CQkJXAorCShoZWFkMSktPnRxaF9sYXN0ID0gKGhlYWQy
KS0+dHFoX2xhc3Q7CQkJCVwKKwkoaGVhZDIpLT50cWhfZmlyc3QgPSBzd2FwX2ZpcnN0OwkJCQlc
CisJKGhlYWQyKS0+dHFoX2xhc3QgPSBzd2FwX2xhc3Q7CQkJCQlcCisJaWYgKChzd2FwX2ZpcnN0
ID0gKGhlYWQxKS0+dHFoX2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9maXJzdC0+ZmllbGQu
dHFlX3ByZXYgPSAmKGhlYWQxKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVh
ZDEpLT50cWhfbGFzdCA9ICYoaGVhZDEpLT50cWhfZmlyc3Q7CQlcCisJaWYgKChzd2FwX2ZpcnN0
ID0gKGhlYWQyKS0+dHFoX2ZpcnN0KSAhPSBOVUxMKQkJCVwKKwkJc3dhcF9maXJzdC0+ZmllbGQu
dHFlX3ByZXYgPSAmKGhlYWQyKS0+dHFoX2ZpcnN0OwlcCisJZWxzZQkJCQkJCQkJXAorCQkoaGVh
ZDIpLT50cWhfbGFzdCA9ICYoaGVhZDIpLT50cWhfZmlyc3Q7CQlcCit9IHdoaWxlICgwKQorCisj
ZW5kaWYgLyogIV9TWVNfUVVFVUVfSF8gKi8KZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5
L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBs
aWIvdXNlcl9yZWN2X3RocmVhZC5jIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhy
ZWFkLmMKaW5kZXggZTY5ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZWEw
YzEwZWZkZjk2ZGU4YmViYjQwMmJlNmM0MjlhZGQwODNhNzNlZCAxMDA3NTUKLS0tIGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmMKKysrIGIvU291cmNlL1RoaXJkUGFydHkv
bGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxp
Yi91c2VyX3JlY3ZfdGhyZWFkLmMKQEAgLTAsMCArMSwxNTAwIEBACisvKi0KKyAqIENvcHlyaWdo
dCAoYykgMjAwOS0yMDEwIEJyYWQgUGVub2ZmCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBI
dW1haXJhIEthbWFsCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBJcmVuZSBSdWVuZ2VsZXIK
KyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIE1pY2hhZWwgVHVleGVuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0gg
REFNQUdFLgorICoKKyAqLworCisjaWYgZGVmaW5lZChJTkVUKSB8fCBkZWZpbmVkKElORVQ2KQor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNp
bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaWYgIWRlZmluZWQoX19V
c2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNE
KSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpCisjaW5jbHVkZSA8c3lzL3Vpby5o
PgorI2Vsc2UKKyNpbmNsdWRlIDx1c2VyX2lwNl92YXIuaD4KKyNlbmRpZgorI2VuZGlmCisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX29zLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3Zhci5oPgor
I2luY2x1ZGUgPG5ldGluZXQvc2N0cF9wY2IuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfaW5w
dXQuaD4KKyNpZiAwCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNpbmNsdWRl
IDxsaW51eC9uZXRsaW5rLmg+CisjaWZkZWYgSEFWRV9MSU5VWF9JRl9BRERSX0gKKyNpbmNsdWRl
IDxsaW51eC9pZl9hZGRyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19I
CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0ZyZWVCU0QpCisjaW5jbHVk
ZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKy8qIGxvY2FsIG1hY3JvcyBhbmQgZGF0YXR5cGVzIHVz
ZWQgdG8gZ2V0IElQIGFkZHJlc3NlcyBzeXN0ZW0gaW5kZXBlbmRlbnRseSAqLworI2lmICFkZWZp
bmVkKElQX1BLVElORk8gKSAmJiAhIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpCisjIGVycm9yICJD
YW4ndCBkZXRlcm1pbmUgc29ja2V0IG9wdGlvbiB0byB1c2UgdG8gZ2V0IFVEUCBJUCIKKyNlbmRp
ZgorCit2b2lkIHJlY3ZfdGhyZWFkX2Rlc3Ryb3kodm9pZCk7CisjZGVmaW5lIE1BWExFTl9NQlVG
X0NIQUlOIDMyIC8qIFdoYXQgc2hvdWxkIHRoaXMgdmFsdWUgYmU/ICovCisjZGVmaW5lIFJPVU5E
VVAoYSwgc2l6ZSkgKCgoYSkgJiAoKHNpemUpLTEpKSA/ICgxICsgKChhKSB8ICgoc2l6ZSktMSkp
KSA6IChhKSkKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJT
RCkKKyNkZWZpbmUgTkVYVF9TQShhcCkgYXAgPSAoc3RydWN0IHNvY2thZGRyICopIFwKKwkoKGNh
ZGRyX3QpIGFwICsgKGFwLT5zYV9sZW4gPyBST1VORFVQKGFwLT5zYV9sZW4sIHNpemVvZiAodWlu
dDMyX3QpKSA6IHNpemVvZih1aW50MzJfdCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkpIHx8
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKK3N0YXRpYyB2b2lkCitzY3RwX2dldF9y
dGFkZHJzKGludCBhZGRycywgc3RydWN0IHNvY2thZGRyICpzYSwgc3RydWN0IHNvY2thZGRyICoq
cnRpX2luZm8pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUlRBWF9NQVg7IGkrKykg
eworCQlpZiAoYWRkcnMgJiAoMSA8PCBpKSkgeworCQkJcnRpX2luZm9baV0gPSBzYTsKKwkJCU5F
WFRfU0Eoc2EpOworCQl9IGVsc2UgeworCQkJcnRpX2luZm9baV0gPSBOVUxMOworCQl9CisJfQor
fQorCitzdGF0aWMgdm9pZAorc2N0cF9oYW5kbGVfaWZhbXNnKHVuc2lnbmVkIGNoYXIgdHlwZSwg
dW5zaWduZWQgc2hvcnQgaW5kZXgsIHN0cnVjdCBzb2NrYWRkciAqc2EpCit7CisJaW50IHJjOwor
CXN0cnVjdCBpZmFkZHJzICppZmEsICppZmFzOworCisJLyogaGFuZGxlIG9ubHkgdGhlIHR5cGVz
IHdlIHdhbnQgKi8KKwlpZiAoKHR5cGUgIT0gUlRNX05FV0FERFIpICYmICh0eXBlICE9IFJUTV9E
RUxBRERSKSkgeworCQlyZXR1cm47CisJfQorCisJcmMgPSBnZXRpZmFkZHJzKCZpZmFzKTsKKwlp
ZiAocmMgIT0gMCkgeworCQlyZXR1cm47CisJfQorCWZvciAoaWZhID0gaWZhczsgaWZhOyBpZmEg
PSBpZmEtPmlmYV9uZXh0KSB7CisJCWlmIChpbmRleCA9PSBpZl9uYW1ldG9pbmRleChpZmEtPmlm
YV9uYW1lKSkgeworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKGlmYSA9PSBOVUxMKSB7CisJCWZy
ZWVpZmFkZHJzKGlmYXMpOworCQlyZXR1cm47CisJfQorCisJLyogcmVsYXkgdGhlIGFwcHJvcHJp
YXRlIGFkZHJlc3MgY2hhbmdlIHRvIHRoZSBiYXNlIGNvZGUgKi8KKwlpZiAodHlwZSA9PSBSVE1f
TkVXQUREUikgeworCQkodm9pZClzY3RwX2FkZF9hZGRyX3RvX3ZyZihTQ1RQX0RFRkFVTFRfVlJG
SUQsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmX25hbWV0b2luZGV4KGlmYS0+aWZhX25hbWUpLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAwLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBpZmEtPmlm
YV9uYW1lLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzYSwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKwkJ
ICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisJfSBlbHNlIHsKKwkJc2N0cF9kZWxfYWRk
cl9mcm9tX3ZyZihTQ1RQX0RFRkFVTFRfVlJGSUQsIGlmYS0+aWZhX2FkZHIsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgaWZfbmFtZXRvaW5kZXgoaWZhLT5pZmFfbmFtZSksCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgaWZhLT5pZmFfbmFtZSk7CisJfQorCWZyZWVpZmFkZHJzKGlmYXMpOwor
fQorCitzdGF0aWMgdm9pZCAqCityZWN2X2Z1bmN0aW9uX3JvdXRlKHZvaWQgKmFyZykKK3sKKwlz
c2l6ZV90IHJldDsKKwlzdHJ1Y3QgaWZhX21zZ2hkciAqaWZhOworCWNoYXIgcnRfYnVmZmVyWzEw
MjRdOworCXN0cnVjdCBzb2NrYWRkciAqc2EsICpydGlfaW5mb1tSVEFYX01BWF07CisKKwlzY3Rw
X3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUCBhZGRyIG1vbiIpOworCisJd2hpbGUgKDEp
IHsKKwkJbWVtc2V0KHJ0X2J1ZmZlciwgMCwgc2l6ZW9mKHJ0X2J1ZmZlcikpOworCQlyZXQgPSBy
ZWN2KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSwgcnRfYnVmZmVyLCBzaXplb2YocnRf
YnVmZmVyKSwgMCk7CisKKwkJaWYgKHJldCA+IDApIHsKKwkJCWlmYSA9IChzdHJ1Y3QgaWZhX21z
Z2hkciAqKSBydF9idWZmZXI7CisJCQlpZiAoaWZhLT5pZmFtX3R5cGUgIT0gUlRNX0RFTEFERFIg
JiYgaWZhLT5pZmFtX3R5cGUgIT0gUlRNX05FV0FERFIpIHsKKwkJCQljb250aW51ZTsKKwkJCX0K
KwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoaWZhICsgMSk7CisJCQlzY3RwX2dldF9ydGFk
ZHJzKGlmYS0+aWZhbV9hZGRycywgc2EsIHJ0aV9pbmZvKTsKKwkJCXN3aXRjaCAoaWZhLT5pZmFt
X3R5cGUpIHsKKwkJCWNhc2UgUlRNX0RFTEFERFI6CisJCQljYXNlIFJUTV9ORVdBRERSOgorCQkJ
CXNjdHBfaGFuZGxlX2lmYW1zZyhpZmEtPmlmYW1fdHlwZSwgaWZhLT5pZmFtX2luZGV4LCBydGlf
aW5mb1tSVEFYX0lGQV0pOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBpZ25vcmUg
dGhpcyByb3V0aW5nIGV2ZW50ICovCisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJaWYgKHJldCA8
IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxz
ZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRp
ZgorCisjaWYgMAorLyogVGhpcyBkb2VzIG5vdCB5ZXQgd29yayBvbiBMaW51eCAqLworc3RhdGlj
IHZvaWQgKgorcmVjdl9mdW5jdGlvbl9yb3V0ZSh2b2lkICphcmcpCit7CisJaW50IGxlbjsKKwlj
aGFyIGJ1Zls0MDk2XTsKKwlzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYsIHNpemVvZihidWYpIH07
CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IG5sbXNnaGRyICpuaDsKKwlzdHJ1Y3QgaWZh
ZGRybXNnICpydG1zZzsKKwlzdHJ1Y3QgcnRhdHRyICpydGF0cDsKKwlzdHJ1Y3QgaW5fYWRkciAq
aW5wOworCXN0cnVjdCBzb2NrYWRkcl9ubCBzYW5sOworI2lmZGVmIElORVQKKwlzdHJ1Y3Qgc29j
a2FkZHJfaW4gKnNhOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJfaW42
ICpzYTY7CisjZW5kaWYKKworCWZvciAoOzspIHsKKwkJbWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yo
c2FubCkpOworCQlzYW5sLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisJCXNhbmwubmxfZ3JvdXBz
ID0gUlRNR1JQX0lQVjZfSUZBRERSIHwgUlRNR1JQX0lQVjRfSUZBRERSOworCQltZW1zZXQoJm1z
ZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIpKTsKKwkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikm
c2FubDsKKwkJbXNnLm1zZ19uYW1lbGVuID0gc2l6ZW9mKHNhbmwpOworCQltc2cubXNnX2lvdiA9
ICZpb3Y7CisJCW1zZy5tc2dfaW92bGVuID0gMTsKKwkJbXNnLm1zZ19jb250cm9sID0gTlVMTDsK
KwkJbXNnLm1zZ19jb250cm9sbGVuID0gMDsKKworCQlsZW4gPSByZWN2bXNnKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3JvdXRlKSwgJm1zZywgMCk7CisKKwkJaWYgKGxlbiA8IDApIHsKKwkJCWlm
IChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJl
YWs7CisJCQl9CisJCX0KKwkJZm9yIChuaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOyBOTE1T
R19PSyAobmgsIGxlbik7CisJCQluaCA9IE5MTVNHX05FWFQgKG5oLCBsZW4pKSB7CisJCQlpZiAo
bmgtPm5sbXNnX3R5cGUgPT0gTkxNU0dfRE9ORSkKKwkJCQlicmVhazsKKworCQkJaWYgKG5oLT5u
bG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IG5oLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERS
KSB7CisJCQkJcnRtc2cgPSAoc3RydWN0IGlmYWRkcm1zZyAqKU5MTVNHX0RBVEEobmgpOworCQkJ
CXJ0YXRwID0gKHN0cnVjdCBydGF0dHIgKilJRkFfUlRBKHJ0bXNnKTsKKwkJCQlpZiAocnRhdHAt
PnJ0YV90eXBlID09IElGQV9BRERSRVNTKSB7CisJCQkJCWlucCA9IChzdHJ1Y3QgaW5fYWRkciAq
KVJUQV9EQVRBKHJ0YXRwKTsKKwkJCQkJc3dpdGNoIChydG1zZy0+aWZhX2ZhbWlseSkgeworI2lm
ZGVmIElORVQKKwkJCQkJY2FzZSBBRl9JTkVUOgorCQkJCQkJc2EgPSAoc3RydWN0IHNvY2thZGRy
X2luICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCQkJCXNhLT5zaW5f
ZmFtaWx5ID0gcnRtc2ctPmlmYV9mYW1pbHk7CisJCQkJCQlzYS0+c2luX3BvcnQgPSAwOworCQkJ
CQkJbWVtY3B5KCZzYS0+c2luX2FkZHIsIGlucCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJ
CQkJCQlzY3RwX2hhbmRsZV9pZmFtc2cobmgtPm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFfaW5kZXgs
IChzdHJ1Y3Qgc29ja2FkZHIgKilzYSk7CisJCQkJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElO
RVQ2CisJCQkJCWNhc2UgQUZfSU5FVDY6CisJCQkJCQlzYTYgPSAoc3RydWN0IHNvY2thZGRyX2lu
NiAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQkJCQkJc2E2LT5zaW42
X2ZhbWlseSA9IHJ0bXNnLT5pZmFfZmFtaWx5OworCQkJCQkJc2E2LT5zaW42X3BvcnQgPSAwOwor
CQkJCQkJbWVtY3B5KCZzYTYtPnNpbjZfYWRkciwgaW5wLCBzaXplb2Yoc3RydWN0IGluNl9hZGRy
KSk7CisJCQkJCQlzY3RwX2hhbmRsZV9pZmFtc2cobmgtPm5sbXNnX3R5cGUsIHJ0bXNnLT5pZmFf
aW5kZXgsIChzdHJ1Y3Qgc29ja2FkZHIgKilzYTYpOworCQkJCQkJYnJlYWs7CisjZW5kaWYKKwkJ
CQkJZGVmYXVsdDoKKwkJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJBZGRyZXNzIGZhbWls
eSAlZCBub3Qgc3VwcG9ydGVkLlxuIiwgcnRtc2ctPmlmYV9mYW1pbHkpOworCQkJCQkJYnJlYWs7
CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCX0KKwl9CisJcmV0dXJuIChOVUxMKTsKK30KKyNlbmRp
ZgorCisjaWZkZWYgSU5FVAorc3RhdGljIHZvaWQgKgorcmVjdl9mdW5jdGlvbl9yYXcodm9pZCAq
YXJnKQoreworCXN0cnVjdCBtYnVmICoqcmVjdm1idWY7CisJc3RydWN0IGlwICppcGhkcjsKKwlz
dHJ1Y3Qgc2N0cGhkciAqc2g7CisJdWludDE2X3QgcG9ydDsKKwlpbnQgb2Zmc2V0LCBlY24gPSAw
OworCWludCBjb21wdXRlX2NyYyA9IDE7CisJc3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCXN0
cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorCXVuc2lnbmVkIGludCBuY291bnRlcjsKKwlzdHJ1Y3QgbXNnaGRyIG1zZzsKKwlz
dHJ1Y3QgaW92ZWMgcmVjdl9pb3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisjZWxzZQorCVdTQUJV
RiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsKKwlpbnQgblJlc3VsdCwgbV9FcnJvckNv
ZGU7CisJRFdPUkQgZmxhZ3M7CisJRFdPUkQgbmNvdW50ZXI7CisJc3RydWN0IHNvY2thZGRyX2lu
IGZyb207CisJaW50IGZyb21sZW47CisjZW5kaWYKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNl
dCBvZiBtYnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlz
IGFtb3VudC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxl
biBpcyB0aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG47CisJ
dW5zaWduZWQgaW50IGlvdmxlbiA9IE1DTEJZVEVTOworCWludCB3YW50X2V4dCA9IChpb3ZsZW4g
PiBNTEVOKT8gMSA6IDA7CisJaW50IHdhbnRfaGVhZGVyID0gMDsKKworCXNjdHBfdXNlcnNwYWNl
X3NldF90aHJlYWRuYW1lKCJTQ1RQL0lQNCByY3YiKTsKKworCW1lbXNldCgmc3JjLCAwLCBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJbWVtc2V0KCZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKTsKKworCXJlY3ZtYnVmID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWJ1ZiAq
KSAqIE1BWExFTl9NQlVGX0NIQUlOKTsKKworCXdoaWxlICgxKSB7CisJCWZvciAoaSA9IDA7IGkg
PCB0b19maWxsOyBpKyspIHsKKwkJCS8qIE5vdCBnZXR0aW5nIHRoZSBwYWNrZXQgaGVhZGVyLiBU
ZXN0cyB3aXRoIGNoYWluIG9mIG9uZSBydW4KKwkJCSAgIGFzIHVzdWFsIHdpdGhvdXQgaGF2aW5n
IHRoZSBwYWNrZXQgaGVhZGVyLgorCQkJICAgSGF2ZSB0cmllZCBib3RoIHNlbmRpbmcgYW5kIHJl
Y2VpdmluZworCQkJICovCisJCQlyZWN2bWJ1ZltpXSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZyhp
b3ZsZW4sIHdhbnRfaGVhZGVyLCBNX05PV0FJVCwgd2FudF9leHQsIE1UX0RBVEEpOworI2lmICFk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlyZWN2X2lvdmVjW2ldLmlvdl9iYXNl
ID0gKGNhZGRyX3QpcmVjdm1idWZbaV0tPm1fZGF0YTsKKwkJCXJlY3ZfaW92ZWNbaV0uaW92X2xl
biA9IGlvdmxlbjsKKyNlbHNlCisJCQlyZWN2X2lvdmVjW2ldLmJ1ZiA9IChjYWRkcl90KXJlY3Zt
YnVmW2ldLT5tX2RhdGE7CisJCQlyZWN2X2lvdmVjW2ldLmxlbiA9IGlvdmxlbjsKKyNlbmRpZgor
CQl9CisJCXRvX2ZpbGwgPSAwOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KwkJZmxhZ3MgPSAwOworCQluY291bnRlciA9IDA7CisJCWZyb21sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2luKTsKKwkJbWVtc2V0KCZmcm9tLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luKSk7CisKKwkJblJlc3VsdCA9IFdTQVJlY3ZGcm9tKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHApLCByZWN2X2lvdmVjLCBNQVhMRU5fTUJVRl9DSEFJTiwgJm5jb3VudGVyLCAmZmxh
Z3MsIChzdHJ1Y3Qgc29ja2FkZHIgKikmZnJvbSwgJmZyb21sZW4sIE5VTEwsIE5VTEwpOworCQlp
ZiAoblJlc3VsdCAhPSAwKSB7CisJCQltX0Vycm9yQ29kZSA9IFdTQUdldExhc3RFcnJvcigpOwor
CQkJaWYgKG1fRXJyb3JDb2RlID09IFdTQUVUSU1FRE9VVCkgeworCQkJCWNvbnRpbnVlOworCQkJ
fQorCQkJaWYgKChtX0Vycm9yQ29kZSA9PSBXU0FFTk9UU09DSykgfHwgKG1fRXJyb3JDb2RlID09
IFdTQUVJTlRSKSkgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW4gPSBuY291bnRlcjsKKyNl
bHNlCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOworCQltc2cubXNn
X25hbWUgPSBOVUxMOworCQltc2cubXNnX25hbWVsZW4gPSAwOworCQltc2cubXNnX2lvdiA9IHJl
Y3ZfaW92ZWM7CisJCW1zZy5tc2dfaW92bGVuID0gTUFYTEVOX01CVUZfQ0hBSU47CisJCW1zZy5t
c2dfY29udHJvbCA9IE5VTEw7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IDA7CisJCW5jb3VudGVy
ID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCksICZtc2csIDAp
OworCQlpZiAobiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51
ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCQlTQ1RQX0hF
QURFUl9MRU4ocmVjdm1idWZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFsIHBhY2tldCAqLwor
CQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBfU1RBVF9JTkNSX0NP
VU5URVI2NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQgaW50KW4gPD0gaW92
bGVuKSB7CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbMF0pID0gbjsKKwkJCSh0b19maWxsKSsr
OworCQl9IGVsc2UgeworCQkJaSA9IDA7CisJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbMF0pID0g
aW92bGVuOworCisJCQluY291bnRlciAtPSBtaW4obmNvdW50ZXIsIGlvdmxlbik7CisJCQkodG9f
ZmlsbCkrKzsKKwkJCWRvIHsKKwkJCQlyZWN2bWJ1ZltpXS0+bV9uZXh0ID0gcmVjdm1idWZbaSsx
XTsKKwkJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWZbaV0tPm1fbmV4dCkgPSBtaW4obmNvdW50ZXIs
IGlvdmxlbik7CisJCQkJaSsrOworCQkJCW5jb3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVu
KTsKKwkJCQkodG9fZmlsbCkrKzsKKwkJCX0gd2hpbGUgKG5jb3VudGVyID4gMCk7CisJCX0KKwor
CQlpcGhkciA9IG10b2QocmVjdm1idWZbMF0sIHN0cnVjdCBpcCAqKTsKKwkJc2ggPSAoc3RydWN0
IHNjdHBoZHIgKikoKGNhZGRyX3QpaXBoZHIgKyBzaXplb2Yoc3RydWN0IGlwKSk7CisJCWNoID0g
KHN0cnVjdCBzY3RwX2NodW5raGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKSk7CisJCW9mZnNldCA9IHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCBzY3Rw
aGRyKTsKKworCQlpZiAoaXBoZHItPmlwX3RvcyAhPSAwKSB7CisJCQllY24gPSBpcGhkci0+aXBf
dG9zICYgMHgwMjsKKwkJfQorCisJCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwkJZHN0LnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCQlkc3Quc2luX2FkZHIgPSBpcGhkci0+aXBfZHN0OworCQlkc3Quc2luX3BvcnQg
PSBzaC0+ZGVzdF9wb3J0OworCisJCXNyYy5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBI
QVZFX1NJTl9MRU4KKwkJc3JjLnNpbl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsK
KyNlbmRpZgorCQlzcmMuc2luX2FkZHIgPSBpcGhkci0+aXBfc3JjOworCQlzcmMuc2luX3BvcnQg
PSBzaC0+c3JjX3BvcnQ7CisKKwkJLyogU0NUUCBkb2VzIG5vdCBhbGxvdyBicm9hZGNhc3RzIG9y
IG11bHRpY2FzdHMgKi8KKwkJaWYgKElOX01VTFRJQ0FTVChudG9obChkc3Quc2luX2FkZHIuc19h
ZGRyKSkpIHsKKwkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOworCQkJY29udGludWU7CisJCX0KKwkJ
aWYgKFNDVFBfSVNfSVRfQlJPQURDQVNUKGRzdC5zaW5fYWRkciwgcmVjdm1idWZbMF0pKSB7CisJ
CQltX2ZyZWVtKHJlY3ZtYnVmWzBdKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJcG9ydCA9IDA7
CisKKwkJaWYgKFNDVFBfQkFTRV9TWVNDVEwoc2N0cF9ub19jc3VtX29uX2xvb3BiYWNrKSAmJgor
CQkgICAgKChJTjRfSVNMT09QQkFDS19BRERSRVNTKCZzcmMuc2luX2FkZHIpICYmCisJCSAgICAg
IElONF9JU0xPT1BCQUNLX0FERFJFU1MoJmRzdC5zaW5fYWRkcikpIHx8CisJCSAgICAgKHNyYy5z
aW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikpKSB7CisJCQljb21wdXRlX2Ny
YyA9IDA7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMpOworCQl9IGVsc2Ugewor
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJfQorCQlTQ1RQREJHKFNDVFBf
REVCVUdfVVNSLCAiJXM6IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVuY19fLCBuKTsKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21tb25faW5wdXRfcHJvY2Vz
c2luZyB3aXRoIG9mZj0lZFxuIiwgb2Zmc2V0KTsKKwkJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vz
c2luZygmcmVjdm1idWZbMF0sIHNpemVvZihzdHJ1Y3QgaXApLCBvZmZzZXQsIG4sCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAorCQkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbXB1dGVfY3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjbiwK
KwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIHBvcnQp
OworCQlpZiAocmVjdm1idWZbMF0pIHsKKwkJCW1fZnJlZW0ocmVjdm1idWZbMF0pOworCQl9CisJ
fQorCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5fTUJVRl9DSEFJTjsgaSsrKSB7CisJCW1fZnJlZShy
ZWN2bWJ1ZltpXSk7CisJfQorCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLworCWZyZWUocmVj
dm1idWYpOworCXJldHVybiAoTlVMTCk7Cit9CisjZW5kaWYKKworI2lmIGRlZmluZWQoSU5FVDYp
CitzdGF0aWMgdm9pZCAqCityZWN2X2Z1bmN0aW9uX3JhdzYodm9pZCAqYXJnKQoreworCXN0cnVj
dCBtYnVmICoqcmVjdm1idWY2OworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3Mp
CisJdW5zaWduZWQgaW50IG5jb3VudGVyID0gMDsKKwlzdHJ1Y3QgaW92ZWMgcmVjdl9pb3ZlY1tN
QVhMRU5fTUJVRl9DSEFJTl07CisJc3RydWN0IG1zZ2hkciBtc2c7CisJc3RydWN0IGNtc2doZHIg
KmNtc2dwdHI7CisJY2hhciBjbXNnYnVmW0NNU0dfU1BBQ0Uoc2l6ZW9mIChzdHJ1Y3QgaW42X3Br
dGluZm8pKV07CisjZWxzZQorCVdTQUJVRiByZWN2X2lvdmVjW01BWExFTl9NQlVGX0NIQUlOXTsK
KwlpbnQgblJlc3VsdCwgbV9FcnJvckNvZGU7CisJRFdPUkQgZmxhZ3M7CisJRFdPUkQgbmNvdW50
ZXIgPSAwOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgZnJvbTsKKwlpbnQgZnJvbWxlbjsKKwlHVUlE
IFdTQVJlY3ZNc2dfR1VJRCA9IFdTQUlEX1dTQVJFQ1ZNU0c7CisJTFBGTl9XU0FSRUNWTVNHIFdT
QVJlY3ZNc2c7CisJV1NBQ01TR0hEUiAqY21zZ3B0cjsKKwlXU0FNU0cgbXNnOworCWNoYXIgQ29u
dHJvbEJ1ZmZlclsxMDI0XTsKKyNlbmRpZgorCXN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7
CisJc3RydWN0IHNjdHBoZHIgKnNoOworCWludCBvZmZzZXQ7CisJc3RydWN0IHNjdHBfY2h1bmto
ZHIgKmNoOworCS8qSW5pdGlhbGx5IHRoZSBlbnRpcmUgc2V0IG9mIG1idWZzIGlzIHRvIGJlIGFs
bG9jYXRlZC4KKwkgIHRvX2ZpbGwgaW5kaWNhdGVzIHRoaXMgYW1vdW50LiAqLworCWludCB0b19m
aWxsID0gTUFYTEVOX01CVUZfQ0hBSU47CisJLyogaW92bGVuIGlzIHRoZSBzaXplIG9mIGVhY2gg
bWJ1ZiBpbiB0aGUgY2hhaW4gKi8KKwlpbnQgaSwgbjsKKwlpbnQgY29tcHV0ZV9jcmMgPSAxOwor
CXVuc2lnbmVkIGludCBpb3ZsZW4gPSBNQ0xCWVRFUzsKKwlpbnQgd2FudF9leHQgPSAoaW92bGVu
ID4gTUxFTik/IDEgOiAwOworCWludCB3YW50X2hlYWRlciA9IDA7CisKKwlzY3RwX3VzZXJzcGFj
ZV9zZXRfdGhyZWFkbmFtZSgiU0NUUC9JUDYgcmN2Iik7CisKKwlyZWN2bWJ1ZjYgPSBtYWxsb2Mo
c2l6ZW9mKHN0cnVjdCBtYnVmICopICogTUFYTEVOX01CVUZfQ0hBSU4pOworCisJZm9yICg7Oykg
eworCQlmb3IgKGkgPSAwOyBpIDwgdG9fZmlsbDsgaSsrKSB7CisJCQkvKiBOb3QgZ2V0dGluZyB0
aGUgcGFja2V0IGhlYWRlci4gVGVzdHMgd2l0aCBjaGFpbiBvZiBvbmUgcnVuCisJCQkgICBhcyB1
c3VhbCB3aXRob3V0IGhhdmluZyB0aGUgcGFja2V0IGhlYWRlci4KKwkJCSAgIEhhdmUgdHJpZWQg
Ym90aCBzZW5kaW5nIGFuZCByZWNlaXZpbmcKKwkJCSAqLworCQkJcmVjdm1idWY2W2ldID0gc2N0
cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIsIE1fTk9XQUlULCB3YW50X2V4
dCwgTVRfREFUQSk7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCXJl
Y3ZfaW92ZWNbaV0uaW92X2Jhc2UgPSAoY2FkZHJfdClyZWN2bWJ1ZjZbaV0tPm1fZGF0YTsKKwkJ
CXJlY3ZfaW92ZWNbaV0uaW92X2xlbiA9IGlvdmxlbjsKKyNlbHNlCisJCQlyZWN2X2lvdmVjW2ld
LmJ1ZiA9IChjYWRkcl90KXJlY3ZtYnVmNltpXS0+bV9kYXRhOworCQkJcmVjdl9pb3ZlY1tpXS5s
ZW4gPSBpb3ZsZW47CisjZW5kaWYKKwkJfQorCQl0b19maWxsID0gMDsKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWZsYWdzID0gMDsKKwkJbmNvdW50ZXIgPSAwOworCQlm
cm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworCQltZW1zZXQoJmZyb20sIDAs
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCW5SZXN1bHQgPSBXU0FJb2N0bChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9O
X1BPSU5URVIsCisJCSAgICAgICAgICAgICAgICAgICAmV1NBUmVjdk1zZ19HVUlELCBzaXplb2Yg
V1NBUmVjdk1zZ19HVUlELAorCQkgICAgICAgICAgICAgICAgICAgJldTQVJlY3ZNc2csIHNpemVv
ZiBXU0FSZWN2TXNnLAorCQkgICAgICAgICAgICAgICAgICAgJm5jb3VudGVyLCBOVUxMLCBOVUxM
KTsKKwkJaWYgKG5SZXN1bHQgPT0gMCkgeworCQkJbXNnLm5hbWUgPSAodm9pZCAqKSZzcmM7CisJ
CQltc2cubmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJCW1zZy5scEJ1
ZmZlcnMgPSByZWN2X2lvdmVjOworCQkJbXNnLmR3QnVmZmVyQ291bnQgPSBNQVhMRU5fTUJVRl9D
SEFJTjsKKwkJCW1zZy5Db250cm9sLmxlbiA9IHNpemVvZiBDb250cm9sQnVmZmVyOworCQkJbXNn
LkNvbnRyb2wuYnVmID0gQ29udHJvbEJ1ZmZlcjsKKwkJCW1zZy5kd0ZsYWdzID0gMDsKKwkJCW5S
ZXN1bHQgPSBXU0FSZWN2TXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgJm1z
ZywgJm5jb3VudGVyLCBOVUxMLCBOVUxMKTsKKwkJfQorCQlpZiAoblJlc3VsdCAhPSAwKSB7CisJ
CQltX0Vycm9yQ29kZSA9IFdTQUdldExhc3RFcnJvcigpOworCQkJaWYgKG1fRXJyb3JDb2RlID09
IFdTQUVUSU1FRE9VVCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChtX0Vycm9yQ29kZSA9PSBXU0FF
Tk9UU09DSyB8fCBtX0Vycm9yQ29kZSA9PSBXU0FFSU5UUikKKwkJCQlicmVhazsKKwkJfQorCQlu
ID0gbmNvdW50ZXI7CisjZWxzZQorCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2do
ZHIpKTsKKwkJbWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJ
CW1lbXNldCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCQltZW1zZXQo
Y21zZ2J1ZiwgMCwgQ01TR19TUEFDRShzaXplb2YgKHN0cnVjdCBpbjZfcGt0aW5mbykpKTsKKwkJ
bXNnLm1zZ19uYW1lID0gKHZvaWQgKikmc3JjOworCQltc2cubXNnX25hbWVsZW4gPSBzaXplb2Yo
c3RydWN0IHNvY2thZGRyX2luNik7CisJCW1zZy5tc2dfaW92ID0gcmVjdl9pb3ZlYzsKKwkJbXNn
Lm1zZ19pb3ZsZW4gPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJbXNnLm1zZ19jb250cm9sID0gKHZv
aWQgKiljbXNnYnVmOworCQltc2cubXNnX2NvbnRyb2xsZW4gPSAoc29ja2xlbl90KUNNU0dfTEVO
KHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSk7CisJCW1zZy5tc2dfZmxhZ3MgPSAwOworCisJ
CW5jb3VudGVyID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYp
LCAmbXNnLCAwKTsKKwkJaWYgKG4gPCAwKSB7CisJCQlpZiAoZXJybm8gPT0gRUFHQUlOKSB7CisJ
CQkJY29udGludWU7CisJCQl9IGVsc2UgeworCQkJCWJyZWFrOworCQkJfQorCQl9CisjZW5kaWYK
KwkJU0NUUF9IRUFERVJfTEVOKHJlY3ZtYnVmNlswXSkgPSBuOyAvKiBsZW5ndGggb2YgdG90YWwg
cGFja2V0ICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3ZwYWNrZXRzKTsKKwkJU0NUUF9T
VEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0cyk7CisKKwkJaWYgKCh1bnNpZ25lZCBp
bnQpbiA8PSBpb3ZsZW4pIHsKKwkJCVNDVFBfQlVGX0xFTihyZWN2bWJ1ZjZbMF0pID0gbjsKKwkJ
CSh0b19maWxsKSsrOworCQl9IGVsc2UgeworCQkJaSA9IDA7CisJCQlTQ1RQX0JVRl9MRU4ocmVj
dm1idWY2WzBdKSA9IGlvdmxlbjsKKworCQkJbmNvdW50ZXIgLT0gbWluKG5jb3VudGVyLCBpb3Zs
ZW4pOworCQkJKHRvX2ZpbGwpKys7CisJCQlkbyB7CisJCQkJcmVjdm1idWY2W2ldLT5tX25leHQg
PSByZWN2bWJ1ZjZbaSsxXTsKKwkJCQlTQ1RQX0JVRl9MRU4ocmVjdm1idWY2W2ldLT5tX25leHQp
ID0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOworCQkJCWkrKzsKKwkJCQluY291bnRlciAtPSBtaW4o
bmNvdW50ZXIsIGlvdmxlbik7CisJCQkJKHRvX2ZpbGwpKys7CisJCQl9IHdoaWxlIChuY291bnRl
ciA+IDApOworCQl9CisKKwkJZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21z
Z3B0ciAhPSBOVUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKKwkJ
CWlmICgoY21zZ3B0ci0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQVjYpICYmIChjbXNncHRyLT5j
bXNnX3R5cGUgPT0gSVBWNl9QS1RJTkZPKSkgeworCQkJCXN0cnVjdCBpbjZfcGt0aW5mbyAqIGlu
Zm87CisKKwkJCQlpbmZvID0gKHN0cnVjdCBpbjZfcGt0aW5mbyAqKUNNU0dfREFUQShjbXNncHRy
KTsKKwkJCQltZW1jcHkoKHZvaWQgKikmZHN0LnNpbjZfYWRkciwgKGNvbnN0IHZvaWQgKikgJihp
bmZvLT5pcGk2X2FkZHIpLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQkJYnJlYWs7CisJ
CQl9CisJCX0KKworCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGlj
YXN0cyAqLworCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZkc3Quc2luNl9hZGRyKSkgewor
CQkJbV9mcmVlbShyZWN2bWJ1ZjZbMF0pOworCQkJY29udGludWU7CisJCX0KKworCQlzaCA9IG10
b2QocmVjdm1idWY2WzBdLCBzdHJ1Y3Qgc2N0cGhkciAqKTsKKwkJY2ggPSAoc3RydWN0IHNjdHBf
Y2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yoc3RydWN0IHNjdHBoZHIpKTsKKwkJb2Zm
c2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKworCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9J
TkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCWRzdC5zaW42X2xlbiA9IHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQlkc3Quc2luNl9wb3J0ID0gc2gtPmRlc3RfcG9y
dDsKKworCQlzcmMuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNpZmRlZiBIQVZFX1NJTjZfTEVO
CisJCXNyYy5zaW42X2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgor
CQlzcmMuc2luNl9wb3J0ID0gc2gtPnNyY19wb3J0OworCQlpZiAobWVtY21wKCZzcmMuc2luNl9h
ZGRyLCAmZHN0LnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApIHsKKwkJ
CWNvbXB1dGVfY3JjID0gMDsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zod2NyYyk7CisJ
CX0gZWxzZSB7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2c3djcmMpOworCQl9CisJCVND
VFBEQkcoU0NUUF9ERUJVR19VU1IsICIlczogUmVjZWl2ZWQgJWQgYnl0ZXMuIiwgX19mdW5jX18s
IG4pOworCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiIC0gY2FsbGluZyBzY3RwX2NvbW1vbl9p
bnB1dF9wcm9jZXNzaW5nIHdpdGggb2ZmPSVkXG4iLCBvZmZzZXQpOworCQlzY3RwX2NvbW1vbl9p
bnB1dF9wcm9jZXNzaW5nKCZyZWN2bWJ1ZjZbMF0sIDAsIG9mZnNldCwgbiwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnNyYywKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJmRzdCwKKwkJICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaCwgY2gsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29tcHV0ZV9jcmMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKwkJICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIDApOworCQlpZiAo
cmVjdm1idWY2WzBdKSB7CisJCQltX2ZyZWVtKHJlY3ZtYnVmNlswXSk7CisJCX0KKwl9CisJZm9y
IChpID0gMDsgaSA8IE1BWExFTl9NQlVGX0NIQUlOOyBpKyspIHsKKwkJbV9mcmVlKHJlY3ZtYnVm
NltpXSk7CisJfQorCS8qIGZyZWUgdGhlIGFycmF5IGl0c2VsZiAqLworCWZyZWUocmVjdm1idWY2
KTsKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlmCisKKyNpZmRlZiBJTkVUCitzdGF0aWMgdm9p
ZCAqCityZWN2X2Z1bmN0aW9uX3VkcCh2b2lkICphcmcpCit7CisJc3RydWN0IG1idWYgKip1ZHBy
ZWN2bWJ1ZjsKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBtYnVmcyBpcyB0byBiZSBh
bGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3VudC4gKi8KKwlpbnQgdG9f
ZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxlbiBpcyB0aGUgc2l6ZSBvZiBlYWNo
IG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG4sIG9mZnNldDsKKwl1bnNpZ25lZCBpbnQg
aW92bGVuID0gTUNMQllURVM7CisJaW50IHdhbnRfZXh0ID0gKGlvdmxlbiA+IE1MRU4pPyAxIDog
MDsKKwlpbnQgd2FudF9oZWFkZXIgPSAwOworCXN0cnVjdCBzY3RwaGRyICpzaDsKKwl1aW50MTZf
dCBwb3J0OworCXN0cnVjdCBzY3RwX2NodW5raGRyICpjaDsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4g
c3JjLCBkc3Q7CisjaWYgZGVmaW5lZChJUF9QS1RJTkZPKQorCWNoYXIgY21zZ2J1ZltDTVNHX1NQ
QUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpXTsKKyNlbHNlCisJY2hhciBjbXNnYnVmW0NN
U0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSldOworI2VuZGlmCisJaW50IGNvbXB1dGVf
Y3JjID0gMTsKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCXVuc2lnbmVk
IGludCBuY291bnRlcjsKKwlzdHJ1Y3QgaW92ZWMgaW92W01BWExFTl9NQlVGX0NIQUlOXTsKKwlz
dHJ1Y3QgbXNnaGRyIG1zZzsKKwlzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKKyNlbHNlCisJR1VJ
RCBXU0FSZWN2TXNnX0dVSUQgPSBXU0FJRF9XU0FSRUNWTVNHOworCUxQRk5fV1NBUkVDVk1TRyBX
U0FSZWN2TXNnOworCWNoYXIgQ29udHJvbEJ1ZmZlclsxMDI0XTsKKwlXU0FCVUYgaW92W01BWExF
Tl9NQlVGX0NIQUlOXTsKKwlXU0FNU0cgbXNnOworCWludCBuUmVzdWx0LCBtX0Vycm9yQ29kZTsK
KwlXU0FDTVNHSERSICpjbXNncHRyOworCURXT1JEIG5jb3VudGVyOworI2VuZGlmCisKKwlzY3Rw
X3VzZXJzcGFjZV9zZXRfdGhyZWFkbmFtZSgiU0NUUC9VRFAvSVA0IHJjdiIpOworCisJdWRwcmVj
dm1idWYgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYnVmICopICogTUFYTEVOX01CVUZfQ0hBSU4p
OworCisJd2hpbGUgKDEpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRvX2ZpbGw7IGkrKykgeworCQkJ
LyogTm90IGdldHRpbmcgdGhlIHBhY2tldCBoZWFkZXIuIFRlc3RzIHdpdGggY2hhaW4gb2Ygb25l
IHJ1bgorCQkJICAgYXMgdXN1YWwgd2l0aG91dCBoYXZpbmcgdGhlIHBhY2tldCBoZWFkZXIuCisJ
CQkgICBIYXZlIHRyaWVkIGJvdGggc2VuZGluZyBhbmQgcmVjZWl2aW5nCisJCQkgKi8KKwkJCXVk
cHJlY3ZtYnVmW2ldID0gc2N0cF9nZXRfbWJ1Zl9mb3JfbXNnKGlvdmxlbiwgd2FudF9oZWFkZXIs
IE1fTk9XQUlULCB3YW50X2V4dCwgTVRfREFUQSk7CisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKwkJCWlvdltpXS5pb3ZfYmFzZSA9IChjYWRkcl90KXVkcHJlY3ZtYnVmW2ld
LT5tX2RhdGE7CisJCQlpb3ZbaV0uaW92X2xlbiA9IGlvdmxlbjsKKyNlbHNlCisJCQlpb3ZbaV0u
YnVmID0gKGNhZGRyX3QpdWRwcmVjdm1idWZbaV0tPm1fZGF0YTsKKwkJCWlvdltpXS5sZW4gPSBp
b3ZsZW47CisjZW5kaWYKKwkJfQorCQl0b19maWxsID0gMDsKKyNpZiAhZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorCQltZW1zZXQoJm1zZywgMCwgc2l6ZW9mKHN0cnVjdCBtc2doZHIp
KTsKKyNlbHNlCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2YoV1NBTVNHKSk7CisjZW5kaWYKKwkJ
bWVtc2V0KCZzcmMsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJbWVtc2V0KCZk
c3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJbWVtc2V0KGNtc2didWYsIDAs
IHNpemVvZihjbXNnYnVmKSk7CisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQltc2cubXNnX25hbWUgPSAodm9pZCAqKSZzcmM7CisJCW1zZy5tc2dfbmFtZWxlbiA9IHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQltc2cubXNnX2lvdiA9IGlvdjsKKwkJbXNnLm1z
Z19pb3ZsZW4gPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJbXNnLm1zZ19jb250cm9sID0gKHZvaWQg
KiljbXNnYnVmOworCQltc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZ2J1Zik7CisJCW1z
Zy5tc2dfZmxhZ3MgPSAwOworCisJCW5jb3VudGVyID0gbiA9IHJlY3Ztc2coU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCksICZtc2csIDApOworCQlpZiAobiA8IDApIHsKKwkJCWlmIChl
cnJubyA9PSBFQUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7
CisJCQl9CisJCX0KKyNlbHNlCisJCW5SZXN1bHQgPSBXU0FJb2N0bChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV91ZHBzY3RwKSwgU0lPX0dFVF9FWFRFTlNJT05fRlVOQ1RJT05fUE9JTlRFUiwKKwkJ
ICZXU0FSZWN2TXNnX0dVSUQsIHNpemVvZiBXU0FSZWN2TXNnX0dVSUQsCisJCSAmV1NBUmVjdk1z
Zywgc2l6ZW9mIFdTQVJlY3ZNc2csCisJCSAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQlpZiAo
blJlc3VsdCA9PSAwKSB7CisJCQltc2cubmFtZSA9ICh2b2lkICopJnNyYzsKKwkJCW1zZy5uYW1l
bGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJCQltc2cubHBCdWZmZXJzID0gaW92
OworCQkJbXNnLmR3QnVmZmVyQ291bnQgPSBNQVhMRU5fTUJVRl9DSEFJTjsKKwkJCW1zZy5Db250
cm9sLmxlbiA9IHNpemVvZiBDb250cm9sQnVmZmVyOworCQkJbXNnLkNvbnRyb2wuYnVmID0gQ29u
dHJvbEJ1ZmZlcjsKKwkJCW1zZy5kd0ZsYWdzID0gMDsKKwkJCW5SZXN1bHQgPSBXU0FSZWN2TXNn
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCAmbXNnLCAmbmNvdW50ZXIsIE5VTEws
IE5VTEwpOworCQl9CisJCWlmIChuUmVzdWx0ICE9IDApIHsKKwkJCW1fRXJyb3JDb2RlID0gV1NB
R2V0TGFzdEVycm9yKCk7CisJCQlpZiAobV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKSB7CisJ
CQkJY29udGludWU7CisJCQl9CisJCQlpZiAoKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLKSB8
fCAobV9FcnJvckNvZGUgPT0gV1NBRUlOVFIpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJ
biA9IG5jb3VudGVyOworI2VuZGlmCisJCVNDVFBfSEVBREVSX0xFTih1ZHByZWN2bWJ1ZlswXSkg
PSBuOyAvKiBsZW5ndGggb2YgdG90YWwgcGFja2V0ICovCisJCVNDVFBfU1RBVF9JTkNSKHNjdHBz
X3JlY3ZwYWNrZXRzKTsKKwkJU0NUUF9TVEFUX0lOQ1JfQ09VTlRFUjY0KHNjdHBzX2lucGFja2V0
cyk7CisKKwkJaWYgKCh1bnNpZ25lZCBpbnQpbiA8PSBpb3ZsZW4pIHsKKwkJCVNDVFBfQlVGX0xF
Tih1ZHByZWN2bWJ1ZlswXSkgPSBuOworCQkJKHRvX2ZpbGwpKys7CisJCX0gZWxzZSB7CisJCQlp
ID0gMDsKKwkJCVNDVFBfQlVGX0xFTih1ZHByZWN2bWJ1ZlswXSkgPSBpb3ZsZW47CisKKwkJCW5j
b3VudGVyIC09IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCSh0b19maWxsKSsrOworCQkJZG8g
eworCQkJCXVkcHJlY3ZtYnVmW2ldLT5tX25leHQgPSB1ZHByZWN2bWJ1ZltpKzFdOworCQkJCVND
VFBfQlVGX0xFTih1ZHByZWN2bWJ1ZltpXS0+bV9uZXh0KSA9IG1pbihuY291bnRlciwgaW92bGVu
KTsKKwkJCQlpKys7CisJCQkJbmNvdW50ZXIgLT0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOworCQkJ
CSh0b19maWxsKSsrOworCQkJfSB3aGlsZSAobmNvdW50ZXIgPiAwKTsKKwkJfQorCisJCWZvciAo
Y21zZ3B0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtc2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9
IENNU0dfTlhUSERSKCZtc2csIGNtc2dwdHIpKSB7CisjaWYgZGVmaW5lZChJUF9QS1RJTkZPKQor
CQkJaWYgKChjbXNncHRyLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVApICYmIChjbXNncHRyLT5j
bXNnX3R5cGUgPT0gSVBfUEtUSU5GTykpIHsKKwkJCQlzdHJ1Y3QgaW5fcGt0aW5mbyAqaW5mbzsK
KworCQkJCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJ
CQlkc3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJ
aW5mbyA9IChzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbXNncHRyKTsKKwkJCQltZW1j
cHkoKHZvaWQgKikmZHN0LnNpbl9hZGRyLCAoY29uc3Qgdm9pZCAqKSYoaW5mby0+aXBpX2FkZHIp
LCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJCQlicmVhazsKKwkJCX0KKyNlbHNlCisJCQlp
ZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCkgJiYgKGNtc2dwdHItPmNtc2df
dHlwZSA9PSBJUF9SRUNWRFNUQUREUikpIHsKKwkJCQlzdHJ1Y3QgaW5fYWRkciAqYWRkcjsKKwor
CQkJCWRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlk
c3Quc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJCQkJYWRk
ciA9IChzdHJ1Y3QgaW5fYWRkciAqKUNNU0dfREFUQShjbXNncHRyKTsKKwkJCQltZW1jcHkoKHZv
aWQgKikmZHN0LnNpbl9hZGRyLCAoY29uc3Qgdm9pZCAqKWFkZHIsIHNpemVvZihzdHJ1Y3QgaW5f
YWRkcikpOworCQkJCWJyZWFrOworCQkJfQorI2VuZGlmCisJCX0KKworCQkvKiBTQ1RQIGRvZXMg
bm90IGFsbG93IGJyb2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLworCQlpZiAoSU5fTVVMVElDQVNU
KG50b2hsKGRzdC5zaW5fYWRkci5zX2FkZHIpKSkgeworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1Zlsw
XSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoU0NUUF9JU19JVF9CUk9BRENBU1QoZHN0LnNp
bl9hZGRyLCB1ZHByZWN2bWJ1ZlswXSkpIHsKKwkJCW1fZnJlZW0odWRwcmVjdm1idWZbMF0pOwor
CQkJY29udGludWU7CisJCX0KKworCQkvKm9mZnNldCA9IHNpemVvZihzdHJ1Y3Qgc2N0cGhkcikg
KyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpOyovCisJCXNoID0gbXRvZCh1ZHByZWN2bWJ1
ZlswXSwgc3RydWN0IHNjdHBoZHIgKik7CisJCWNoID0gKHN0cnVjdCBzY3RwX2NodW5raGRyICop
KChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJCW9mZnNldCA9IHNpemVv
ZihzdHJ1Y3Qgc2N0cGhkcik7CisJCXBvcnQgPSBzcmMuc2luX3BvcnQ7CisJCXNyYy5zaW5fcG9y
dCA9IHNoLT5zcmNfcG9ydDsKKwkJZHN0LnNpbl9wb3J0ID0gc2gtPmRlc3RfcG9ydDsKKwkJaWYg
KHNyYy5zaW5fYWRkci5zX2FkZHIgPT0gZHN0LnNpbl9hZGRyLnNfYWRkcikgeworCQkJY29tcHV0
ZV9jcmMgPSAwOworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdmh3Y3JjKTsKKwkJfSBlbHNl
IHsKKwkJCVNDVFBfU1RBVF9JTkNSKHNjdHBzX3JlY3Zzd2NyYyk7CisJCX0KKwkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIiVzOiBSZWNlaXZlZCAlZCBieXRlcy4iLCBfX2Z1bmNfXywgbik7CisJ
CVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICIgLSBjYWxsaW5nIHNjdHBfY29tbW9uX2lucHV0X3By
b2Nlc3Npbmcgd2l0aCBvZmY9JWRcbiIsIG9mZnNldCk7CisJCXNjdHBfY29tbW9uX2lucHV0X3By
b2Nlc3NpbmcoJnVkcHJlY3ZtYnVmWzBdLCAwLCBvZmZzZXQsIG4sCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzcmMsCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2gsIGNoLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bXB1dGVfY3JjLAorCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgU0NUUF9ERUZBVUxUX1ZSRklELCBwb3J0KTsKKwkJaWYgKHVk
cHJlY3ZtYnVmWzBdKSB7CisJCQltX2ZyZWVtKHVkcHJlY3ZtYnVmWzBdKTsKKwkJfQorCX0KKwlm
b3IgKGkgPSAwOyBpIDwgTUFYTEVOX01CVUZfQ0hBSU47IGkrKykgeworCQltX2ZyZWUodWRwcmVj
dm1idWZbaV0pOworCX0KKwkvKiBmcmVlIHRoZSBhcnJheSBpdHNlbGYgKi8KKwlmcmVlKHVkcHJl
Y3ZtYnVmKTsKKwlyZXR1cm4gKE5VTEwpOworfQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKElORVQ2
KQorc3RhdGljIHZvaWQgKgorcmVjdl9mdW5jdGlvbl91ZHA2KHZvaWQgKmFyZykKK3sKKwlzdHJ1
Y3QgbWJ1ZiAqKnVkcHJlY3ZtYnVmNjsKKwkvKkluaXRpYWxseSB0aGUgZW50aXJlIHNldCBvZiBt
YnVmcyBpcyB0byBiZSBhbGxvY2F0ZWQuCisJICB0b19maWxsIGluZGljYXRlcyB0aGlzIGFtb3Vu
dC4gKi8KKwlpbnQgdG9fZmlsbCA9IE1BWExFTl9NQlVGX0NIQUlOOworCS8qIGlvdmxlbiBpcyB0
aGUgc2l6ZSBvZiBlYWNoIG1idWYgaW4gdGhlIGNoYWluICovCisJaW50IGksIG4sIG9mZnNldDsK
Kwl1bnNpZ25lZCBpbnQgaW92bGVuID0gTUNMQllURVM7CisJaW50IHdhbnRfZXh0ID0gKGlvdmxl
biA+IE1MRU4pPyAxIDogMDsKKwlpbnQgd2FudF9oZWFkZXIgPSAwOworCXN0cnVjdCBzb2NrYWRk
cl9pbjYgc3JjLCBkc3Q7CisJc3RydWN0IHNjdHBoZHIgKnNoOworCXVpbnQxNl90IHBvcnQ7CisJ
c3RydWN0IHNjdHBfY2h1bmtoZHIgKmNoOworCWNoYXIgY21zZ2J1ZltDTVNHX1NQQUNFKHNpemVv
ZiAoc3RydWN0IGluNl9wa3RpbmZvKSldOworCWludCBjb21wdXRlX2NyYyA9IDE7CisjaWYgIWRl
ZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwl1bnNpZ25lZCBpbnQgbmNvdW50ZXI7CisJ
c3RydWN0IGlvdmVjIGlvdltNQVhMRU5fTUJVRl9DSEFJTl07CisJc3RydWN0IG1zZ2hkciBtc2c7
CisJc3RydWN0IGNtc2doZHIgKmNtc2dwdHI7CisjZWxzZQorCUdVSUQgV1NBUmVjdk1zZ19HVUlE
ID0gV1NBSURfV1NBUkVDVk1TRzsKKwlMUEZOX1dTQVJFQ1ZNU0cgV1NBUmVjdk1zZzsKKwljaGFy
IENvbnRyb2xCdWZmZXJbMTAyNF07CisJV1NBQlVGIGlvdltNQVhMRU5fTUJVRl9DSEFJTl07CisJ
V1NBTVNHIG1zZzsKKwlpbnQgblJlc3VsdCwgbV9FcnJvckNvZGU7CisJRFdPUkQgbmNvdW50ZXI7
CisJV1NBQ01TR0hEUiAqY21zZ3B0cjsKKyNlbmRpZgorCisJc2N0cF91c2Vyc3BhY2Vfc2V0X3Ro
cmVhZG5hbWUoIlNDVFAvVURQL0lQNiByY3YiKTsKKworCXVkcHJlY3ZtYnVmNiA9IG1hbGxvYyhz
aXplb2Yoc3RydWN0IG1idWYgKikgKiBNQVhMRU5fTUJVRl9DSEFJTik7CisJd2hpbGUgKDEpIHsK
KwkJZm9yIChpID0gMDsgaSA8IHRvX2ZpbGw7IGkrKykgeworCQkJLyogTm90IGdldHRpbmcgdGhl
IHBhY2tldCBoZWFkZXIuIFRlc3RzIHdpdGggY2hhaW4gb2Ygb25lIHJ1bgorCQkJICAgYXMgdXN1
YWwgd2l0aG91dCBoYXZpbmcgdGhlIHBhY2tldCBoZWFkZXIuCisJCQkgICBIYXZlIHRyaWVkIGJv
dGggc2VuZGluZyBhbmQgcmVjZWl2aW5nCisJCQkgKi8KKwkJCXVkcHJlY3ZtYnVmNltpXSA9IHNj
dHBfZ2V0X21idWZfZm9yX21zZyhpb3ZsZW4sIHdhbnRfaGVhZGVyLCBNX05PV0FJVCwgd2FudF9l
eHQsIE1UX0RBVEEpOworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlp
b3ZbaV0uaW92X2Jhc2UgPSAoY2FkZHJfdCl1ZHByZWN2bWJ1ZjZbaV0tPm1fZGF0YTsKKwkJCWlv
dltpXS5pb3ZfbGVuID0gaW92bGVuOworI2Vsc2UKKwkJCWlvdltpXS5idWYgPSAoY2FkZHJfdCl1
ZHByZWN2bWJ1ZjZbaV0tPm1fZGF0YTsKKwkJCWlvdltpXS5sZW4gPSBpb3ZsZW47CisjZW5kaWYK
KwkJfQorCQl0b19maWxsID0gMDsKKworI2lmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisJCW1lbXNldCgmbXNnLCAwLCBzaXplb2Yoc3RydWN0IG1zZ2hkcikpOworI2Vsc2UKKwkJ
bWVtc2V0KCZtc2csIDAsIHNpemVvZihXU0FNU0cpKTsKKyNlbmRpZgorCQltZW1zZXQoJnNyYywg
MCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKwkJbWVtc2V0KCZkc3QsIDAsIHNpemVv
ZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCW1lbXNldChjbXNnYnVmLCAwLCBDTVNHX1NQQUNF
KHNpemVvZiAoc3RydWN0IGluNl9wa3RpbmZvKSkpOworCisjaWYgIWRlZmluZWQoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKwkJbXNnLm1zZ19uYW1lID0gKHZvaWQgKikmc3JjOworCQltc2cubXNn
X25hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCW1zZy5tc2dfaW92ID0g
aW92OworCQltc2cubXNnX2lvdmxlbiA9IE1BWExFTl9NQlVGX0NIQUlOOworCQltc2cubXNnX2Nv
bnRyb2wgPSAodm9pZCAqKWNtc2didWY7CisJCW1zZy5tc2dfY29udHJvbGxlbiA9IChzb2NrbGVu
X3QpQ01TR19MRU4oc2l6ZW9mIChzdHJ1Y3QgaW42X3BrdGluZm8pKTsKKwkJbXNnLm1zZ19mbGFn
cyA9IDA7CisKKwkJbmNvdW50ZXIgPSBuID0gcmVjdm1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV91ZHBzY3RwNiksICZtc2csIDApOworCQlpZiAobiA8IDApIHsKKwkJCWlmIChlcnJubyA9PSBF
QUdBSU4pIHsKKwkJCQljb250aW51ZTsKKwkJCX0gZWxzZSB7CisJCQkJYnJlYWs7CisJCQl9CisJ
CX0KKyNlbHNlCisJCW5SZXN1bHQgPSBXU0FJb2N0bChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwNiksIFNJT19HRVRfRVhURU5TSU9OX0ZVTkNUSU9OX1BPSU5URVIsCisJCSAgICAgICAg
ICAgICAgICAgICAmV1NBUmVjdk1zZ19HVUlELCBzaXplb2YgV1NBUmVjdk1zZ19HVUlELAorCQkg
ICAgICAgICAgICAgICAgICAgJldTQVJlY3ZNc2csIHNpemVvZiBXU0FSZWN2TXNnLAorCQkgICAg
ICAgICAgICAgICAgICAgJm5jb3VudGVyLCBOVUxMLCBOVUxMKTsKKwkJaWYgKG5SZXN1bHQgPT0g
U09DS0VUX0VSUk9SKSB7CisJCQltX0Vycm9yQ29kZSA9IFdTQUdldExhc3RFcnJvcigpOworCQkJ
V1NBUmVjdk1zZyA9IE5VTEw7CisJCX0KKwkJaWYgKG5SZXN1bHQgPT0gMCkgeworCQkJbXNnLm5h
bWUgPSAodm9pZCAqKSZzcmM7CisJCQltc2cubmFtZWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2Fk
ZHJfaW42KTsKKwkJCW1zZy5scEJ1ZmZlcnMgPSBpb3Y7CisJCQltc2cuZHdCdWZmZXJDb3VudCA9
IE1BWExFTl9NQlVGX0NIQUlOOworCQkJbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mIENvbnRyb2xC
dWZmZXI7CisJCQltc2cuQ29udHJvbC5idWYgPSBDb250cm9sQnVmZmVyOworCQkJbXNnLmR3Rmxh
Z3MgPSAwOworCQkJblJlc3VsdCA9IFdTQVJlY3ZNc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cDYpLCAmbXNnLCAmbmNvdW50ZXIsIE5VTEwsIE5VTEwpOworCQl9CisJCWlmIChuUmVz
dWx0ICE9IDApIHsKKwkJCW1fRXJyb3JDb2RlID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCQlpZiAo
bV9FcnJvckNvZGUgPT0gV1NBRVRJTUVET1VUKSB7CisJCQkJY29udGludWU7CisJCQl9CisJCQlp
ZiAoKG1fRXJyb3JDb2RlID09IFdTQUVOT1RTT0NLKSB8fCAobV9FcnJvckNvZGUgPT0gV1NBRUlO
VFIpKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJbiA9IG5jb3VudGVyOworI2VuZGlmCisJ
CVNDVFBfSEVBREVSX0xFTih1ZHByZWN2bWJ1ZjZbMF0pID0gbjsgLyogbGVuZ3RoIG9mIHRvdGFs
IHBhY2tldCAqLworCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2cGFja2V0cyk7CisJCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMpOworCisJCWlmICgodW5zaWduZWQg
aW50KW4gPD0gaW92bGVuKSB7CisJCQlTQ1RQX0JVRl9MRU4odWRwcmVjdm1idWY2WzBdKSA9IG47
CisJCQkodG9fZmlsbCkrKzsKKwkJfSBlbHNlIHsKKwkJCWkgPSAwOworCQkJU0NUUF9CVUZfTEVO
KHVkcHJlY3ZtYnVmNlswXSkgPSBpb3ZsZW47CisKKwkJCW5jb3VudGVyIC09IG1pbihuY291bnRl
ciwgaW92bGVuKTsKKwkJCSh0b19maWxsKSsrOworCQkJZG8geworCQkJCXVkcHJlY3ZtYnVmNltp
XS0+bV9uZXh0ID0gdWRwcmVjdm1idWY2W2krMV07CisJCQkJU0NUUF9CVUZfTEVOKHVkcHJlY3Zt
YnVmNltpXS0+bV9uZXh0KSA9IG1pbihuY291bnRlciwgaW92bGVuKTsKKwkJCQlpKys7CisJCQkJ
bmNvdW50ZXIgLT0gbWluKG5jb3VudGVyLCBpb3ZsZW4pOworCQkJCSh0b19maWxsKSsrOworCQkJ
fSB3aGlsZSAobmNvdW50ZXIgPiAwKTsKKwkJfQorCisJCWZvciAoY21zZ3B0ciA9IENNU0dfRklS
U1RIRFIoJm1zZyk7IGNtc2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZtc2cs
IGNtc2dwdHIpKSB7CisJCQlpZiAoKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUFY2
KSAmJiAoY21zZ3B0ci0+Y21zZ190eXBlID09IElQVjZfUEtUSU5GTykpIHsKKwkJCQlzdHJ1Y3Qg
aW42X3BrdGluZm8gKmluZm87CisKKwkJCQlkc3Quc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyNp
ZmRlZiBIQVZFX1NJTjZfTEVOCisJCQkJZHN0LnNpbjZfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbjYpOworI2VuZGlmCisJCQkJaW5mbyA9IChzdHJ1Y3QgaW42X3BrdGluZm8gKilDTVNH
X0RBVEEoY21zZ3B0cik7CisJCQkJLypkc3Quc2luNl9wb3J0ID0gaHRvbnMoU0NUUF9CQVNFX1NZ
U0NUTChzY3RwX3VkcF90dW5uZWxpbmdfcG9ydCkpOyovCisJCQkJbWVtY3B5KCh2b2lkICopJmRz
dC5zaW42X2FkZHIsIChjb25zdCB2b2lkICopJihpbmZvLT5pcGk2X2FkZHIpLCBzaXplb2Yoc3Ry
dWN0IGluNl9hZGRyKSk7CisJCQl9CisJCX0KKworCQkvKiBTQ1RQIGRvZXMgbm90IGFsbG93IGJy
b2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLworCQlpZiAoSU42X0lTX0FERFJfTVVMVElDQVNUKCZk
c3Quc2luNl9hZGRyKSkgeworCQkJbV9mcmVlbSh1ZHByZWN2bWJ1ZjZbMF0pOworCQkJY29udGlu
dWU7CisJCX0KKworCQlzaCA9IG10b2QodWRwcmVjdm1idWY2WzBdLCBzdHJ1Y3Qgc2N0cGhkciAq
KTsKKwkJY2ggPSAoc3RydWN0IHNjdHBfY2h1bmtoZHIgKikoKGNhZGRyX3Qpc2ggKyBzaXplb2Yo
c3RydWN0IHNjdHBoZHIpKTsKKwkJb2Zmc2V0ID0gc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKTsKKwor
CQlwb3J0ID0gc3JjLnNpbjZfcG9ydDsKKwkJc3JjLnNpbjZfcG9ydCA9IHNoLT5zcmNfcG9ydDsK
KwkJZHN0LnNpbjZfcG9ydCA9IHNoLT5kZXN0X3BvcnQ7CisJCWlmICgobWVtY21wKCZzcmMuc2lu
Nl9hZGRyLCAmZHN0LnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApKSB7
CisJCQljb21wdXRlX2NyYyA9IDA7CisJCQlTQ1RQX1NUQVRfSU5DUihzY3Rwc19yZWN2aHdjcmMp
OworCQl9IGVsc2UgeworCQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnN3Y3JjKTsKKwkJfQor
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiJXM6IFJlY2VpdmVkICVkIGJ5dGVzLiIsIF9fZnVu
Y19fLCBuKTsKKwkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIiAtIGNhbGxpbmcgc2N0cF9jb21t
b25faW5wdXRfcHJvY2Vzc2luZyB3aXRoIG9mZj0lZFxuIiwgKGludClzaXplb2Yoc3RydWN0IHNj
dHBoZHIpKTsKKwkJc2N0cF9jb21tb25faW5wdXRfcHJvY2Vzc2luZygmdWRwcmVjdm1idWY2WzBd
LCAwLCBvZmZzZXQsIG4sCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBz
b2NrYWRkciAqKSZzcmMsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBz
b2NrYWRkciAqKSZkc3QsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2gsIGNoLAor
CQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXB1dGVfY3JjLAorCQkgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDAsCisJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0NU
UF9ERUZBVUxUX1ZSRklELCBwb3J0KTsKKwkJaWYgKHVkcHJlY3ZtYnVmNlswXSkgeworCQkJbV9m
cmVlbSh1ZHByZWN2bWJ1ZjZbMF0pOworCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBNQVhMRU5f
TUJVRl9DSEFJTjsgaSsrKSB7CisJCW1fZnJlZSh1ZHByZWN2bWJ1ZjZbaV0pOworCX0KKwkvKiBm
cmVlIHRoZSBhcnJheSBpdHNlbGYgKi8KKwlmcmVlKHVkcHJlY3ZtYnVmNik7CisJcmV0dXJuIChO
VUxMKTsKK30KKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
K3N0YXRpYyB2b2lkCitzZXRSZWNlaXZlQnVmZmVyU2l6ZShTT0NLRVQgc2ZkLCBpbnQgbmV3X3Np
emUpCisjZWxzZQorc3RhdGljIHZvaWQKK3NldFJlY2VpdmVCdWZmZXJTaXplKGludCBzZmQsIGlu
dCBuZXdfc2l6ZSkKKyNlbmRpZgoreworCWludCBjaCA9IG5ld19zaXplOworCisJaWYgKHNldHNv
Y2tvcHQgKHNmZCwgU09MX1NPQ0tFVCwgU09fUkNWQlVGLCAodm9pZCopJmNoLCBzaXplb2YoY2gp
KSA8IDApIHsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlTQ1RQREJH
KFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IHJlY3YtYnVmZmVycyBzaXplIChlcnJubyA9ICVk
KS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBzZXQgcmVjdi1idWZmZXJzIHNpemUgKGVycm5vID0gJWQpLlxuIiwgZXJybm8p
OworI2VuZGlmCisJfQorCXJldHVybjsKK30KKworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCitzdGF0aWMgdm9pZAorc2V0U2VuZEJ1ZmZlclNpemUoU09DS0VUIHNmZCwgaW50
IG5ld19zaXplKQorI2Vsc2UKK3N0YXRpYyB2b2lkCitzZXRTZW5kQnVmZmVyU2l6ZShpbnQgc2Zk
LCBpbnQgbmV3X3NpemUpCisjZW5kaWYKK3sKKwlpbnQgY2ggPSBuZXdfc2l6ZTsKKworCWlmIChz
ZXRzb2Nrb3B0IChzZmQsIFNPTF9TT0NLRVQsIFNPX1NOREJVRiwgKHZvaWQqKSZjaCwgc2l6ZW9m
KGNoKSkgPCAwKSB7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJU0NU
UERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBzZW5kLWJ1ZmZlcnMgc2l6ZSAoZXJybm8g
PSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3Qgc2V0IHNlbmQtYnVmZmVycyBzaXplIChlcnJubyA9ICVkKS5cbiIsIGVy
cm5vKTsKKyNlbmRpZgorCX0KKwlyZXR1cm47Cit9CisKKyNkZWZpbmUgU09DS0VUX1RJTUVPVVQg
MTAwIC8qIGluIG1zICovCit2b2lkCityZWN2X3RocmVhZF9pbml0KHZvaWQpCit7CisjaWYgZGVm
aW5lZChJTkVUKQorCXN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyX2lwdjQ7CisJY29uc3QgaW50IGhk
cmluY2wgPSAxOworI2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwlzdHJ1Y3Qgc29ja2FkZHJf
aW42IGFkZHJfaXB2NjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVU
NikKKwljb25zdCBpbnQgb24gPSAxOworI2VuZGlmCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfV2luZG93cykKKwlzdHJ1Y3QgdGltZXZhbCB0aW1lb3V0OworCisJbWVtc2V0KCZ0aW1lb3V0
LCAwLCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKKwl0aW1lb3V0LnR2X3NlYyAgPSAoU09DS0VU
X1RJTUVPVVQgLyAxMDAwKTsKKwl0aW1lb3V0LnR2X3VzZWMgPSAoU09DS0VUX1RJTUVPVVQgJSAx
MDAwKSAqIDEwMDA7CisjZWxzZQorCXVuc2lnbmVkIGludCB0aW1lb3V0ID0gU09DS0VUX1RJTUVP
VVQ7IC8qIFRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9f
VXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25GbHkp
IHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKwlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2Vfcm91dGUpID09IC0xKSB7CisJCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpID0gc29ja2V0KEFGX1JPVVRFLCBTT0NLX1JBVywgMCkpID09IC0xKSB7CisJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHJvdXRpbmcgc29ja2V0IChlcnJubyA9
ICVkKS5cbiIsIGVycm5vKTsKKwkJfQorI2lmIDAKKwkJc3RydWN0IHNvY2thZGRyX25sIHNhbmw7
CisKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkgPSBzb2NrZXQoQUZfTkVU
TElOSywgU09DS19SQVcsIE5FVExJTktfUk9VVEUpKSA8IDApIHsKKwkJCVNDVFBEQkcoU0NUUF9E
RUJVR19VU1IsICJDYW4ndCBjcmVhdGUgcm91dGluZyBzb2NrZXQgKGVycm5vID0gJWQuXG4iLCBl
cnJubyk7CisJCX0KKwkJbWVtc2V0KCZzYW5sLCAwLCBzaXplb2Yoc2FubCkpOworCQlzYW5sLm5s
X2ZhbWlseSA9IEFGX05FVExJTks7CisJCXNhbmwubmxfZ3JvdXBzID0gMDsKKyNpZmRlZiBJTkVU
CisJCXNhbmwubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY0X0lGQUREUjsKKyNlbmRpZgorI2lmZGVm
IElORVQ2CisJCXNhbmwubmxfZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKKyNlbmRpZgor
CQlpZiAoYmluZChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIChzdHJ1Y3Qgc29ja2Fk
ZHIgKikgJnNhbmwsIHNpemVvZihzYW5sKSkgPCAwKSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3QgYmluZCByb3V0aW5nIHNvY2tldCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7
CisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSkpOworCQkJU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7CisJCX0KKyNlbmRpZgorCQlpZiAoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2Vfcm91dGUpICE9IC0xKSB7CisJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV9yb3V0ZSksIFNPTF9TT0NLRVQsIFNPX1JDVlRJTUVPLChjb25zdCB2
b2lkKikmdGltZW91dCwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSkgPCAwKSB7CisJCQkJU0NUUERC
RyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHJvdXRpbmcgc29ja2V0IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKKyNl
bHNlCisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpKTsKKyNlbmRpZgor
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSA9IC0xOworCQkJfQorCQl9CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChJTkVUKQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSA9PSAtMSkgeworCQlpZiAoKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
ID0gc29ja2V0KEFGX0lORVQsIFNPQ0tfUkFXLCBJUFBST1RPX1NDVFApKSA9PSAtMSkgeworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBjcmVhdGUgcmF3IHNvY2tldCBmb3IgSVB2NCAoZXJybm8gPSAlZCkuXG4iLCBX
U0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGNyZWF0ZSByYXcgc29ja2V0IGZvciBJUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsK
KyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUgcmF3IFND
VFAgc29ja2V0ICovCisJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSwgSVBQUk9UT19JUCwgSVBfSERSSU5DTCwoY29uc3Qgdm9pZCopJmhkcmluY2wsIHNp
emVvZihpbnQpKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9IRFJJTkNMIChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBzZXQgSVBfSERSSU5DTCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJ
Y2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOworI2VuZGlmCisJCQkJU0NU
UF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkgPSAtMTsKKwkJCX0gZWxzZSBpZiAoc2V0c29j
a29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSwgU09MX1NPQ0tFVCwgU09fUkNW
VElNRU8sIChjb25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAwKSB7Cisj
aWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NCAoZXJybm8g
PSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cCkpOworI2Vsc2UKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdf
VVNSLCAiQ2FuJ3Qgc2V0IHRpbWVvdXQgb24gc29ja2V0IGZvciBTQ1RQL0lQdjQgKGVycm5vID0g
JWQpLlxuIiwgZXJybm8pOworCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3Nj
dHApKTsKKyNlbmRpZgorCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApID0gLTE7
CisJCQl9IGVsc2UgeworCQkJCW1lbXNldCgodm9pZCAqKSZhZGRyX2lwdjQsIDAsIHNpemVvZihz
dHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyNpZmRlZiBIQVZFX1NJTl9MRU4KKwkJCQlhZGRyX2lwdjQu
c2luX2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisjZW5kaWYKKwkJ
CQlhZGRyX2lwdjQuc2luX2ZhbWlseSAgICAgID0gQUZfSU5FVDsKKwkJCQlhZGRyX2lwdjQuc2lu
X3BvcnQgICAgICAgID0gaHRvbnMoMCk7CisJCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9
IGh0b25sKElOQUREUl9BTlkpOworCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHApLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0
cnVjdCBzb2NrYWRkcl9pbikpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2lu
ZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZv
ciBTQ1RQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCQlj
bG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7CisjZWxzZQorCQkJ
CQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmluZCBzb2NrZXQgZm9yIFNDVFAvSVB2
NCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApKTsKKyNlbmRpZgorCQkJCQlTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
YXdzY3RwKSA9IC0xOworCQkJCX0gZWxzZSB7CisJCQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFND
VFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJ
CXNldFNlbmRCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHApLCBTQl9S
QVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGluZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/
IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAqLworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCBJ
UFBST1RPX1VEUCkpID09IC0xKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFND
VFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworI2Vsc2UK
KwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBjcmVhdGUgc29ja2V0IGZvciBTQ1RQ
L1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQl9IGVsc2Ugewor
I2lmIGRlZmluZWQoSVBfUEtUSU5GTykKKwkJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIo
dXNlcnNwYWNlX3VkcHNjdHApLCBJUFBST1RPX0lQLCBJUF9QS1RJTkZPLCAoY29uc3Qgdm9pZCAq
KSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7CisjZWxzZQorCQkJaWYgKHNldHNvY2tvcHQo
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RB
RERSLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGludClzaXplb2YoaW50KSkgPCAwKSB7CisjZW5kaWYK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjaWYgZGVmaW5lZChJUF9QS1RJ
TkZPKQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBfUEtUSU5GTyBv
biBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVy
cm9yKCkpOworI2Vsc2UKKwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQ
X1JFQ1ZEU1RBRERSIG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NCAoZXJybm8gPSAlZCkuXG4i
LCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZW5kaWYKKwkJCQljbG9zZXNvY2tldChTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7CisjZWxzZQorI2lmIGRlZmluZWQoSVBfUEtUSU5GTykK
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQX1BLVElORk8gb24gc29j
a2V0IGZvciBTQ1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbHNlCisJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUF9SRUNWRFNUQUREUiBvbiBz
b2NrZXQgZm9yIFNDVFAvVURQL0lQdjQgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworI2VuZGlm
CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2VuZGlmCisJ
CQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKKwkJCX0gZWxzZSBpZiAo
c2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSwgU09MX1NPQ0tFVCwg
U09fUkNWVElNRU8sIChjb25zdCB2b2lkICopJnRpbWVvdXQsIHNpemVvZih0aW1lb3V0KSkgPCAw
KSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJCVNDVFBEQkcoU0NU
UF9ERUJVR19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQ
djQgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0
KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKKyNlbHNlCisJCQkJU0NUUERCRyhT
Q1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAv
SVB2NCAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfdWRwc2N0cCkpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cCkgPSAtMTsKKwkJCX0gZWxzZSB7CisJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2
NCwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworI2lmZGVmIEhBVkVfU0lOX0xFTgor
CQkJCWFkZHJfaXB2NC5zaW5fbGVuICAgICAgICAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lu
KTsKKyNlbmRpZgorCQkJCWFkZHJfaXB2NC5zaW5fZmFtaWx5ICAgICAgPSBBRl9JTkVUOworCQkJ
CWFkZHJfaXB2NC5zaW5fcG9ydCAgICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBf
dWRwX3R1bm5lbGluZ19wb3J0KSk7CisJCQkJYWRkcl9pcHY0LnNpbl9hZGRyLnNfYWRkciA9IGh0
b25sKElOQUREUl9BTlkpOworCQkJCWlmIChiaW5kKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Vk
cHNjdHApLCAoY29uc3Qgc3RydWN0IHNvY2thZGRyICopJmFkZHJfaXB2NCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbikpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93
cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBT
Q1RQL1VEUC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQkJ
Y2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2Vsc2UKKwkJ
CQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VE
UC9JUHY0IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQkJY2xvc2UoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cCkpOworI2VuZGlmCisJCQkJCVNDVFBfQkFTRV9WQVIodXNlcnNw
YWNlX3VkcHNjdHApID0gLTE7CisJCQkJfSBlbHNlIHsKKwkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNp
emUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIFNCX1JBVyk7IC8qIDEyOEsgKi8K
KwkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCks
IFNCX1JBVyk7IC8qIDEyOEsgSXMgdGhpcyBzZXR0aW5nIG5ldC5pbmV0LnJhdy5tYXhkZ3JhbSB2
YWx1ZT8gU2hvdWxkIGl0IGJlIHNldCB0byA2NEs/ICovCisJCQkJfQorCQkJfQorCQl9CisJfQor
I2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cmF3c2N0cDYpID09IC0xKSB7CisJCWlmICgoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX1JBVywgSVBQUk9UT19TQ1RQKSkgPT0gLTEpIHsK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5c
biIsIFdTQUdldExhc3RFcnJvcigpKTsKKyNlbHNlCisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNS
LCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVy
cm5vKTsKKyNlbmRpZgorCQl9IGVsc2UgeworCQkJLyogY29tcGxldGUgc2V0dGluZyB1cCB0aGUg
cmF3IFNDVFAgc29ja2V0ICovCisjaWYgZGVmaW5lZChJUFY2X1JFQ1ZQS1RJTkZPKQorCQkJaWYg
KHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQ
VjYsIElQVjZfUkVDVlBLVElORk8sIChjb25zdCB2b2lkICopJm9uLCBzaXplb2Yob24pKSA8IDAp
IHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NU
UC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQljbG9zZXNv
Y2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2Vsc2UKKwkJCQlTQ1RQ
REJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfUkVDVlBLVElORk8gb24gc29ja2V0
IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgZXJybm8pOworCQkJCWNsb3NlKFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZW5kaWYKKwkJCQlTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKKwkJCX0gZWxzZSB7CisjZWxzZQorCQkJaWYgKHNl
dHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYs
IElQVjZfUEtUSU5GTywoY29uc3Qgdm9pZCopJm9uLCBzaXplb2Yob24pKSA8IDApIHsKKyNpZiBk
ZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VT
UiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24gc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5v
ID0gJWQpLlxuIiwgV1NBR2V0TGFzdEVycm9yKCkpOworCQkJCWNsb3Nlc29ja2V0KFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgSVBWNl9QS1RJTkZPIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKwkJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwNikpOworI2VuZGlmCisJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0
cDYpID0gLTE7CisJCQl9IGVsc2UgeworI2VuZGlmCisJCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9C
QVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAo
Y29uc3Qgdm9pZCopJm9uLCAoc29ja2xlbl90KXNpemVvZihvbikpIDwgMCkgeworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwg
IkNhbid0IHNldCBJUFY2X1Y2T05MWSBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAl
ZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJCQlTQ1RQREJHKFNDVFBfREVC
VUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChl
cnJubyA9ICVkKS5cbiIsIGVycm5vKTsKKyNlbmRpZgorCQkJCX0KKwkJCQlpZiAoc2V0c29ja29w
dChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksIFNPTF9TT0NLRVQsIFNPX1JDVlRJ
TUVPLCAoY29uc3Qgdm9pZCAqKSZ0aW1lb3V0LCBzaXplb2YodGltZW91dCkpIDwgMCkgeworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RFQlVH
X1VTUiwgIkNhbid0IHNldCB0aW1lb3V0IG9uIHNvY2tldCBmb3IgU0NUUC9JUHY2IChlcnJubyA9
ICVkKS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpKTsKKyNlbHNlCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJV
R19VU1IsICJDYW4ndCBzZXQgdGltZW91dCBvbiBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8g
PSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHA2KSk7CisjZW5kaWYKKwkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYp
ID0gLTE7CisJCQkJfSBlbHNlIHsKKwkJCQkJbWVtc2V0KCh2b2lkICopJmFkZHJfaXB2NiwgMCwg
c2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJCQkJ
CWFkZHJfaXB2Ni5zaW42X2xlbiAgICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
OworI2VuZGlmCisJCQkJCWFkZHJfaXB2Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7CisJ
CQkJCWFkZHJfaXB2Ni5zaW42X3BvcnQgICAgICAgID0gaHRvbnMoMCk7CisJCQkJCWFkZHJfaXB2
Ni5zaW42X2FkZHIgICAgICAgID0gaW42YWRkcl9hbnk7CisJCQkJCWlmIChiaW5kKFNDVFBfQkFT
RV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSwgKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKSZhZGRy
X2lwdjYsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgPCAwKSB7CisjaWYgZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQkJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNh
bid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwgV1NBR2V0TGFz
dEVycm9yKCkpOworCQkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3
c2N0cDYpKTsKKyNlbHNlCisJCQkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3QgYmlu
ZCBzb2NrZXQgZm9yIFNDVFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7CisJCQkJCQlj
bG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2VuZGlmCisJCQkJCQlT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgPSAtMTsKKwkJCQkJfSBlbHNlIHsKKwkJ
CQkJCXNldFJlY2VpdmVCdWZmZXJTaXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2
KSwgU0JfUkFXKTsgLyogMTI4SyAqLworCQkJCQkJc2V0U2VuZEJ1ZmZlclNpemUoU0NUUF9CQVNF
X1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLIElzIHRoaXMgc2V0dGlu
ZyBuZXQuaW5ldC5yYXcubWF4ZGdyYW0gdmFsdWU/IFNob3VsZCBpdCBiZSBzZXQgdG8gNjRLPyAq
LworCQkJCQl9CisJCQkJfQorCQkJfQorCQl9CisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV91ZHBzY3RwNikgPT0gLTEpIHsKKwkJaWYgKChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91
ZHBzY3RwNikgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIElQUFJPVE9fVURQKSkgPT0g
LTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCQlTQ1RQREJHKFND
VFBfREVCVUdfVVNSLCAiQ2FuJ3QgY3JlYXRlIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJy
bm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3IoKSk7CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQ
X0RFQlVHX1VTUiwgIkNhbid0IGNyZWF0ZSBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5v
ID0gJWQpLlxuIiwgZXJybm8pOworI2VuZGlmCisJCX0KKyNpZiBkZWZpbmVkKElQVjZfUkVDVlBL
VElORk8pCisJCWlmIChzZXRzb2Nrb3B0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSwgSVBQUk9UT19JUFY2LCBJUFY2X1JFQ1ZQS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGlu
dClzaXplb2YoaW50KSkgPCAwKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1JFQ1ZQS1RJTkZP
IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3Rw
NikpOworI2Vsc2UKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9S
RUNWUEtUSU5GTyBvbiBzb2NrZXQgZm9yIFNDVFAvVURQL0lQdjYgKGVycm5vID0gJWQpLlxuIiwg
ZXJybm8pOworCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNl
bmRpZgorCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0gZWxz
ZSB7CisjZWxzZQorCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwNiksIElQUFJPVE9fSVBWNiwgSVBWNl9QS1RJTkZPLCAoY29uc3Qgdm9pZCAqKSZvbiwgKGlu
dClzaXplb2YoaW50KSkgPCAwKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dz
KQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElORk8gb24g
c29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIFdTQUdldExhc3RFcnJv
cigpKTsKKwkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7
CisjZWxzZQorCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCBJUFY2X1BLVElO
Rk8gb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5vKTsK
KwkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7CisjZW5kaWYKKwkJ
CVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOworCQl9IGVsc2UgeworI2Vu
ZGlmCisJCQlpZiAoc2V0c29ja29wdChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiks
IElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIChjb25zdCB2b2lkICopJm9uLCAoc29ja2xlbl90
KXNpemVvZihvbikpIDwgMCkgeworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykK
KwkJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc2V0IElQVjZfVjZPTkxZIG9uIHNv
Y2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0RXJyb3Io
KSk7CisjZWxzZQorCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzZXQgSVBWNl9W
Nk9OTFkgb24gc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVkKS5cbiIsIGVycm5v
KTsKKyNlbmRpZgorCQkJfQorCQkJaWYgKHNldHNvY2tvcHQoU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfdWRwc2N0cDYpLCBTT0xfU09DS0VULCBTT19SQ1ZUSU1FTywgKGNvbnN0IHZvaWQgKikmdGlt
ZW91dCwgc2l6ZW9mKHRpbWVvdXQpKSA8IDApIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1lb3V0
IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBXU0FHZXRMYXN0
RXJyb3IoKSk7CisJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0
cDYpKTsKKyNlbHNlCisJCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHNldCB0aW1l
b3V0IG9uIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4iLCBlcnJubyk7
CisJCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbmRpZgor
CQkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSA9IC0xOworCQkJfSBlbHNlIHsK
KwkJCQltZW1zZXQoKHZvaWQgKikmYWRkcl9pcHY2LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNikpOworI2lmZGVmIEhBVkVfU0lONl9MRU4KKwkJCQlhZGRyX2lwdjYuc2luNl9sZW4gICAg
ICAgICA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyNlbmRpZgorCQkJCWFkZHJfaXB2
Ni5zaW42X2ZhbWlseSAgICAgID0gQUZfSU5FVDY7CisJCQkJYWRkcl9pcHY2LnNpbjZfcG9ydCAg
ICAgICAgPSBodG9ucyhTQ1RQX0JBU0VfU1lTQ1RMKHNjdHBfdWRwX3R1bm5lbGluZ19wb3J0KSk7
CisJCQkJYWRkcl9pcHY2LnNpbjZfYWRkciAgICAgICAgPSBpbjZhZGRyX2FueTsKKwkJCQlpZiAo
YmluZChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiksIChjb25zdCBzdHJ1Y3Qgc29j
a2FkZHIgKikmYWRkcl9pcHY2LCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIDwgMCkgewor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCQkJU0NUUERCRyhTQ1RQX0RF
QlVHX1VTUiwgIkNhbid0IGJpbmQgc29ja2V0IGZvciBTQ1RQL1VEUC9JUHY2IChlcnJubyA9ICVk
KS5cbiIsIFdTQUdldExhc3RFcnJvcigpKTsKKwkJCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZB
Uih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsKKyNlbHNlCisJCQkJCVNDVFBEQkcoU0NUUF9ERUJVR19V
U1IsICJDYW4ndCBiaW5kIHNvY2tldCBmb3IgU0NUUC9VRFAvSVB2NiAoZXJybm8gPSAlZCkuXG4i
LCBlcnJubyk7CisJCQkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSk7
CisjZW5kaWYKKwkJCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJ
CQkJfSBlbHNlIHsKKwkJCQkJc2V0UmVjZWl2ZUJ1ZmZlclNpemUoU0NUUF9CQVNFX1ZBUih1c2Vy
c3BhY2VfdWRwc2N0cDYpLCBTQl9SQVcpOyAvKiAxMjhLICovCisJCQkJCXNldFNlbmRCdWZmZXJT
aXplKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2KSwgU0JfUkFXKTsgLyogMTI4SyBJ
cyB0aGlzIHNldHRpbmcgbmV0LmluZXQucmF3Lm1heGRncmFtIHZhbHVlPyBTaG91bGQgaXQgYmUg
c2V0IHRvIDY0Sz8gKi8KKwkJCQl9CisJCQl9CisJCX0KKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX0RhcndpbikgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EcmFnb25G
bHkpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRnJlZUJTRCkKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSAh
PSAtMSkgeworCQlpbnQgcmM7CisKKwkJaWYgKChyYyA9IHNjdHBfdXNlcnNwYWNlX3RocmVhZF9j
cmVhdGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJvdXRlKSwgJnJlY3ZfZnVuY3Rpb25fcm91
dGUpKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0IHN0YXJ0IHJvdXRpbmcg
dGhyZWFkICglZCkuXG4iLCByYyk7CisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9y
b3V0ZSkpOworCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vfcm91dGUpID0gLTE7CisJCX0KKwl9
CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVCkKKwlpZiAoU0NUUF9CQVNFX1ZBUih1
c2Vyc3BhY2VfcmF3c2N0cCkgIT0gLTEpIHsKKwkJaW50IHJjOworCisJCWlmICgocmMgPSBzY3Rw
X3VzZXJzcGFjZV90aHJlYWRfY3JlYXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWRyYXcpLCAm
cmVjdl9mdW5jdGlvbl9yYXcpKSkgeworCQkJU0NUUERCRyhTQ1RQX0RFQlVHX1VTUiwgIkNhbid0
IHN0YXJ0IFNDVFAvSVB2NCByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOworI2lmIGRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNl
cnNwYWNlX3Jhd3NjdHApKTsKKyNlbHNlCisJCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwKSk7CisjZW5kaWYKKwkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHAp
ID0gLTE7CisJCX0KKwl9CisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9
IC0xKSB7CisJCWludCByYzsKKworCQlpZiAoKHJjID0gc2N0cF91c2Vyc3BhY2VfdGhyZWFkX2Ny
ZWF0ZSgmU0NUUF9CQVNFX1ZBUihyZWN2dGhyZWFkdWRwKSwgJnJlY3ZfZnVuY3Rpb25fdWRwKSkp
IHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFydCBTQ1RQL1VEUC9JUHY0
IHJlY3YgdGhyZWFkICglZCkuXG4iLCByYyk7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19X
aW5kb3dzKQorCQkJY2xvc2Vzb2NrZXQoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkp
OworI2Vsc2UKKwkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApKTsKKyNl
bmRpZgorCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgPSAtMTsKKwkJfQorCX0K
KyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNl
X3Jhd3NjdHA2KSAhPSAtMSkgeworCQlpbnQgcmM7CisKKwkJaWYgKChyYyA9IHNjdHBfdXNlcnNw
YWNlX3RocmVhZF9jcmVhdGUoJlNDVFBfQkFTRV9WQVIocmVjdnRocmVhZHJhdzYpLCAmcmVjdl9m
dW5jdGlvbl9yYXc2KSkpIHsKKwkJCVNDVFBEQkcoU0NUUF9ERUJVR19VU1IsICJDYW4ndCBzdGFy
dCBTQ1RQL0lQdjYgcmVjdiB0aHJlYWQgKCVkKS5cbiIsIHJjKTsKKyNpZiBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX1dpbmRvd3MpCisJCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwNikpOworI2Vsc2UKKwkJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jh
d3NjdHA2KSk7CisjZW5kaWYKKwkJCVNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSA9
IC0xOworCQl9CisJfQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0g
LTEpIHsKKwkJaW50IHJjOworCisJCWlmICgocmMgPSBzY3RwX3VzZXJzcGFjZV90aHJlYWRfY3Jl
YXRlKCZTQ1RQX0JBU0VfVkFSKHJlY3Z0aHJlYWR1ZHA2KSwgJnJlY3ZfZnVuY3Rpb25fdWRwNikp
KSB7CisJCQlTQ1RQREJHKFNDVFBfREVCVUdfVVNSLCAiQ2FuJ3Qgc3RhcnQgU0NUUC9VRFAvSVB2
NiByZWN2IHRocmVhZCAoJWQpLlxuIiwgcmMpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3Nf
V2luZG93cykKKwkJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSk7CisjZWxzZQorCQkJY2xvc2UoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpKTsK
KyNlbmRpZgorCQkJU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cDYpID0gLTE7CisJCX0K
Kwl9CisjZW5kaWYKK30KKwordm9pZAorcmVjdl90aHJlYWRfZGVzdHJveSh2b2lkKQoreworI2lm
IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKSB8fCBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X0RyYWdvbkZseSkgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19GcmVlQlNEKQorI2lmIGRlZmlu
ZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwlpZiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
cm91dGUpICE9IC0xKSB7CisJCWNsb3NlKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3JvdXRlKSk7
CisJfQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKElORVQpCisJaWYgKFNDVFBfQkFTRV9W
QVIodXNlcnNwYWNlX3Jhd3NjdHApICE9IC0xKSB7CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19XaW5kb3dzKQorCQljbG9zZXNvY2tldChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3Rw
KSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwKSk7Cisj
ZW5kaWYKKwl9CisJaWYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApICE9IC0xKSB7
CisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQljbG9zZXNvY2tldChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV91ZHBzY3RwKSk7CisjZW5kaWYKKwl9CisjZW5kaWYKKyNpZiBkZWZpbmVk
KElORVQ2KQorCWlmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpIHsK
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWNsb3Nlc29ja2V0KFNDVFBf
QkFTRV9WQVIodXNlcnNwYWNlX3Jhd3NjdHA2KSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0Vf
VkFSKHVzZXJzcGFjZV9yYXdzY3RwNikpOworI2VuZGlmCisJfQorCWlmIChTQ1RQX0JBU0VfVkFS
KHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpIHsKKyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X1dpbmRvd3MpCisJCWNsb3Nlc29ja2V0KFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHA2
KSk7CisjZWxzZQorCQljbG9zZShTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikpOwor
I2VuZGlmCisJfQorI2VuZGlmCit9CisjZWxzZQoraW50IGZvbzsKKyNlbmRpZgpkaWZmIC0tZ2l0
IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmggYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3Jz
Y3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3
NzVhZDhjMmU0OGM1MzkxLi42MWNkZjE3MjExMmM1MWFjMGZlM2JjYWZmOGI0ODU1Y2Y3YTYwYWNm
IDEwMDc1NQotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaAorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuaApAQCAtMCwwICsxLDM0IEBA
CisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAxMiBNaWNoYWVsIFR1ZXhlbgorICogQ29weXJpZ2h0
IChjKSAyMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENP
TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIF9VU0VSX1JFQ1ZfVEhSRUFEX0hfCisjZGVmaW5lCV9VU0VSX1JFQ1ZfVEhSRUFEX0hf
CisKK3ZvaWQgcmVjdl90aHJlYWRfaW5pdCh2b2lkKTsKK3ZvaWQgcmVjdl90aHJlYWRfZGVzdHJv
eSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJf
cm91dGUuaCBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCmluZGV4IGU2OWRlMjli
YjJkMWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjgyYjA3ZDc2OWE5Y2VjMzljMDQxM2Yw
ZjU0OWM0ZDIwNjJkN2ZlNWEgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9y
b3V0ZS5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFy
dHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9yb3V0ZS5oCkBAIC0wLDAgKzEs
MTMwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk4NiwgMTk5MworICoJVGhlIFJl
Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAg
ICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBB
UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK
KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaWZuZGVmIF9V
U0VSX1JPVVRFX0hfCisjZGVmaW5lIF9VU0VSX1JPVVRFX0hfCisKKy8qCisgKiBLZXJuZWwgcmVz
aWRlbnQgcm91dGluZyB0YWJsZXMuCisgKgorICogVGhlIHJvdXRpbmcgdGFibGVzIGFyZSBpbml0
aWFsaXplZCB3aGVuIGludGVyZmFjZSBhZGRyZXNzZXMKKyAqIGFyZSBzZXQgYnkgbWFraW5nIGVu
dHJpZXMgZm9yIGFsbCBkaXJlY3RseSBjb25uZWN0ZWQgaW50ZXJmYWNlcy4KKyAqLworCisvKgor
ICogQSByb3V0ZSBjb25zaXN0cyBvZiBhIGRlc3RpbmF0aW9uIGFkZHJlc3MgYW5kIGEgcmVmZXJl
bmNlCisgKiB0byBhIHJvdXRpbmcgZW50cnkuICBUaGVzZSBhcmUgb2Z0ZW4gaGVsZCBieSBwcm90
b2NvbHMKKyAqIGluIHRoZWlyIGNvbnRyb2wgYmxvY2tzLCBlLmcuIGlucGNiLgorICovCisKK3N0
cnVjdCBzY3RwX3JvdXRlIHsKKwlzdHJ1Y3QJc2N0cF9ydGVudHJ5ICpyb19ydDsKKwlzdHJ1Y3QJ
c29ja2FkZHIgcm9fZHN0OworfTsKKworLyoKKyAqIFRoZXNlIG51bWJlcnMgYXJlIHVzZWQgYnkg
cmVsaWFibGUgcHJvdG9jb2xzIGZvciBkZXRlcm1pbmluZworICogcmV0cmFuc21pc3Npb24gYmVo
YXZpb3IgYW5kIGFyZSBpbmNsdWRlZCBpbiB0aGUgcm91dGluZyBzdHJ1Y3R1cmUuCisgKi8KK3N0
cnVjdCBzY3RwX3J0X21ldHJpY3NfbGl0ZSB7CisJdWludDMyX3Qgcm14X210dTsJLyogTVRVIGZv
ciB0aGlzIHBhdGggKi8KKyNpZiAwCisJdV9sb25nCXJteF9leHBpcmU7CS8qIGxpZmV0aW1lIGZv
ciByb3V0ZSwgZS5nLiByZWRpcmVjdCAqLworCXVfbG9uZwlybXhfcGtzZW50OwkvKiBwYWNrZXRz
IHNlbnQgdXNpbmcgdGhpcyByb3V0ZSAqLworI2VuZGlmCit9OworCisvKgorICogV2UgZGlzdGlu
Z3Vpc2ggYmV0d2VlbiByb3V0ZXMgdG8gaG9zdHMgYW5kIHJvdXRlcyB0byBuZXR3b3JrcywKKyAq
IHByZWZlcnJpbmcgdGhlIGZvcm1lciBpZiBhdmFpbGFibGUuICBGb3IgZWFjaCByb3V0ZSB3ZSBp
bmZlcgorICogdGhlIGludGVyZmFjZSB0byB1c2UgZnJvbSB0aGUgZ2F0ZXdheSBhZGRyZXNzIHN1
cHBsaWVkIHdoZW4KKyAqIHRoZSByb3V0ZSB3YXMgZW50ZXJlZC4gIFJvdXRlcyB0aGF0IGZvcndh
cmQgcGFja2V0cyB0aHJvdWdoCisgKiBnYXRld2F5cyBhcmUgbWFya2VkIHNvIHRoYXQgdGhlIG91
dHB1dCByb3V0aW5lcyBrbm93IHRvIGFkZHJlc3MgdGhlCisgKiBnYXRld2F5IHJhdGhlciB0aGFu
IHRoZSB1bHRpbWF0ZSBkZXN0aW5hdGlvbi4KKyAqLworc3RydWN0IHNjdHBfcnRlbnRyeSB7Cisj
aWYgMAorCXN0cnVjdAlyYWRpeF9ub2RlIHJ0X25vZGVzWzJdOwkvKiB0cmVlIGdsdWUsIGFuZCBv
dGhlciB2YWx1ZXMgKi8KKwkvKgorCSAqIFhYWCBzdHJ1Y3QgcnRlbnRyeSBtdXN0IGJlZ2luIHdp
dGggYSBzdHJ1Y3QgcmFkaXhfbm9kZSAob3IgdHdvISkKKwkgKiBiZWNhdXNlIHRoZSBjb2RlIGRv
ZXMgc29tZSBjYXN0cyBvZiBhICdzdHJ1Y3QgcmFkaXhfbm9kZSAqJworCSAqIHRvIGEgJ3N0cnVj
dCBydGVudHJ5IConCisJICovCisjZGVmaW5lCXJ0X2tleShyKQkoKigoc3RydWN0IHNvY2thZGRy
ICoqKSgmKHIpLT5ydF9ub2Rlcy0+cm5fa2V5KSkpCisjZGVmaW5lCXJ0X21hc2socikJKCooKHN0
cnVjdCBzb2NrYWRkciAqKikoJihyKS0+cnRfbm9kZXMtPnJuX21hc2spKSkKKwlzdHJ1Y3QJc29j
a2FkZHIgKnJ0X2dhdGV3YXk7CS8qIHZhbHVlICovCisJdV9sb25nCXJ0X2ZsYWdzOwkJLyogdXAv
ZG93bj8sIGhvc3QvbmV0ICovCisjZW5kaWYKKwlzdHJ1Y3QJaWZuZXQgKnJ0X2lmcDsJCS8qIHRo
ZSBhbnN3ZXI6IGludGVyZmFjZSB0byB1c2UgKi8KKwlzdHJ1Y3QJaWZhZGRyICpydF9pZmE7CQkv
KiB0aGUgYW5zd2VyOiBpbnRlcmZhY2UgYWRkcmVzcyB0byB1c2UgKi8KKwlzdHJ1Y3QJc2N0cF9y
dF9tZXRyaWNzX2xpdGUgcnRfcm14OwkvKiBtZXRyaWNzIHVzZWQgYnkgcngnaW5nIHByb3RvY29s
cyAqLworCWxvbmcJcnRfcmVmY250OwkJLyogIyBoZWxkIHJlZmVyZW5jZXMgKi8KKyNpZiAwCisJ
c3RydWN0CXNvY2thZGRyICpydF9nZW5tYXNrOwkvKiBmb3IgZ2VuZXJhdGlvbiBvZiBjbG9uZWQg
cm91dGVzICovCisJY2FkZHJfdAlydF9sbGluZm87CQkvKiBwb2ludGVyIHRvIGxpbmsgbGV2ZWwg
aW5mbyBjYWNoZSAqLworCXN0cnVjdAlydGVudHJ5ICpydF9nd3JvdXRlOwkvKiBpbXBsaWVkIGVu
dHJ5IGZvciBnYXRld2F5ZWQgcm91dGVzICovCisJc3RydWN0CXJ0ZW50cnkgKnJ0X3BhcmVudDsg
CS8qIGNsb25pbmcgcGFyZW50IG9mIHRoaXMgcm91dGUgKi8KKyNlbmRpZgorCXN0cnVjdAltdHgg
cnRfbXR4OwkJLyogbXV0ZXggZm9yIHJvdXRpbmcgZW50cnkgKi8KK307CisKKyNkZWZpbmUJUlRf
TE9DS19JTklUKF9ydCkJbXR4X2luaXQoJihfcnQpLT5ydF9tdHgsICJydGVudHJ5IiwgTlVMTCwg
TVRYX0RFRiB8IE1UWF9EVVBPSykKKyNkZWZpbmUJUlRfTE9DSyhfcnQpCQltdHhfbG9jaygmKF9y
dCktPnJ0X210eCkKKyNkZWZpbmUJUlRfVU5MT0NLKF9ydCkJCW10eF91bmxvY2soJihfcnQpLT5y
dF9tdHgpCisjZGVmaW5lCVJUX0xPQ0tfREVTVFJPWShfcnQpCW10eF9kZXN0cm95KCYoX3J0KS0+
cnRfbXR4KQorI2RlZmluZQlSVF9MT0NLX0FTU0VSVChfcnQpCW10eF9hc3NlcnQoJihfcnQpLT5y
dF9tdHgsIE1BX09XTkVEKQorCisjZGVmaW5lCVJUX0FERFJFRihfcnQpCWRvIHsJCQkJCVwKKwlS
VF9MT0NLX0FTU0VSVChfcnQpOwkJCQkJXAorCUtBU1NFUlQoKF9ydCktPnJ0X3JlZmNudCA+PSAw
LAkJCQlcCisJCSgibmVnYXRpdmUgcmVmY250ICVsZCIsIChfcnQpLT5ydF9yZWZjbnQpKTsJXAor
CShfcnQpLT5ydF9yZWZjbnQrKzsJCQkJCVwKK30gd2hpbGUgKDApCisjZGVmaW5lCVJUX1JFTVJF
RihfcnQpCWRvIHsJCQkJCVwKKwlSVF9MT0NLX0FTU0VSVChfcnQpOwkJCQkJXAorCUtBU1NFUlQo
KF9ydCktPnJ0X3JlZmNudCA+IDAsCQkJCVwKKwkJKCJib2d1cyByZWZjbnQgJWxkIiwgKF9ydCkt
PnJ0X3JlZmNudCkpOwlcCisJKF9ydCktPnJ0X3JlZmNudC0tOwkJCQkJXAorfSB3aGlsZSAoMCkK
KyNkZWZpbmUJUlRGUkVFX0xPQ0tFRChfcnQpIGRvIHsJCQkJCVwKKwkJaWYgKChfcnQpLT5ydF9y
ZWZjbnQgPD0gMSkgewkJCVwKKwkJCXJ0ZnJlZShfcnQpOwkJCQlcCisJCX0gZWxzZSB7CQkJCQlc
CisJCQlSVF9SRU1SRUYoX3J0KTsJCQkJXAorCQkJUlRfVU5MT0NLKF9ydCk7CQkJCVwKKwkJfQkJ
CQkJCVwKKwkJLyogZ3VhcmQgYWdhaW5zdCBpbnZhbGlkIHJlZnMgKi8JCVwKKwkJX3J0ID0gTlVM
TDsJCQkJCVwKKwl9IHdoaWxlICgwKQorI2RlZmluZQlSVEZSRUUoX3J0KSBkbyB7CQkJCQlcCisJ
CVJUX0xPQ0soX3J0KTsJCQkJCVwKKwkJUlRGUkVFX0xPQ0tFRChfcnQpOwkJCQlcCit9IHdoaWxl
ICgwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0
LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0LmMKaW5kZXggZTY5ZGUyOWJiMmQx
ZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uOWZlNjk3NmEwYzc4N2ZiNmQwZTU5ZjJhZWEx
MDMxMmU1NzU2YzZiNCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1Nv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3NvY2tl
dC5jCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXQuYwpAQCAtMCwwICsxLDM2
ODAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTg4LCAxOTkwLCAxOTkz
CisgKiAgICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIEZyZWVCU0QgRm91bmRhdGlvbgorICogQ29weXJpZ2h0
IChjKSAyMDA0LTIwMDggUm9iZXJ0IE4uIE0uIFdhdHNvbgorICogQ29weXJpZ2h0IChjKSAyMDA5
LTIwMTAgQnJhZCBQZW5vZmYKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEgS2Ft
YWwKKyAqIENvcHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQ29weXJp
Z2h0IChjKSAyMDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUg
QVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisg
KiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAor
ICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisg
KgorICovCisKKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfb3MuaD4KKyNpbmNsdWRlIDxuZXRpbmV0
L3NjdHBfcGNiLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwdXRpbC5oPgorI2luY2x1ZGUgPG5l
dGluZXQvc2N0cF92YXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfc3lzY3RsLmg+CisjaW5j
bHVkZSA8bmV0aW5ldC9zY3RwX2lucHV0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9zY3RwX3BlZWxv
ZmYuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY3JjMzIuaD4KKyNpZmRlZiBJTkVUNgorI2lu
Y2x1ZGUgPG5ldGluZXQ2L3NjdHA2X3Zhci5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1VzZXJz
cGFjZV9vc19GcmVlQlNEKQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgZGVm
aW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkKKyNkZWZpbmUgX19GQVZPUl9CU0QgICAgLyogKG9u
IFVidW50dSBhdCBsZWFzdCkgZW5hYmxlcyBVRFAgaGVhZGVyIGZpZWxkIG5hbWVzIGxpa2UgQlNE
IGluIFJGQyA3NjggKi8KKyNlbmRpZgorI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5k
b3dzKQorI2lmIGRlZmluZWQgSU5FVCB8fCBkZWZpbmVkIElORVQ2CisjaW5jbHVkZSA8bmV0aW5l
dC91ZHAuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2Vsc2UKKyNpbmNsdWRl
IDx1c2VyX3NvY2tldHZhci5oPgorI2VuZGlmCit1c2VybGFuZF9tdXRleF90IGFjY2VwdF9tdHg7
Cit1c2VybGFuZF9jb25kX3QgYWNjZXB0X2NvbmQ7CisjaWZkZWYgX1dJTjMyCisjaW5jbHVkZSA8
dGltZS5oPgorI2luY2x1ZGUgPHN5cy90aW1lYi5oPgorI2VuZGlmCisKK01BTExPQ19ERUZJTkUo
TV9QQ0IsICJzY3RwX3BjYiIsICJzY3RwIHBjYiIpOworTUFMTE9DX0RFRklORShNX1NPTkFNRSwg
InNjdHBfc29uYW1lIiwgInNjdHAgc29uYW1lIik7CisjZGVmaW5lIE1BWExFTl9NQlVGX0NIQUlO
ICAzMgorCisvKiBQcm90b3R5cGVzICovCitleHRlcm4gaW50IHNjdHBfc29zZW5kKHN0cnVjdCBz
b2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHN0cnVjdCB1aW8gKnVpbywKKyAgICAg
ICAgICAgICAgICAgICAgICAgc3RydWN0IG1idWYgKnRvcCwgc3RydWN0IG1idWYgKmNvbnRyb2ws
IGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgLyogcHJvYyBpcyBhIGR1bW15IGlu
IF9fVXNlcnNwYWNlX18gYW5kIHdpbGwgbm90IGJlIHBhc3NlZCB0byBzY3RwX2xvd2VyX3Nvc2Vu
ZCAqLworICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHJvYyAqcCk7CisKK2V4dGVybiBp
bnQgc2N0cF9hdHRhY2goc3RydWN0IHNvY2tldCAqc28sIGludCBwcm90bywgdWludDMyX3QgdnJm
X2lkKTsKK2V4dGVybiBpbnQgc2N0cGNvbm5fYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQg
cHJvdG8sIHVpbnQzMl90IHZyZl9pZCk7CisKK3ZvaWQKK3VzcnNjdHBfaW5pdCh1aW50MTZfdCBw
b3J0LAorICAgICAgICAgICAgIGludCAoKmNvbm5fb3V0cHV0KSh2b2lkICphZGRyLCB2b2lkICpi
dWZmZXIsIHNpemVfdCBsZW5ndGgsIHVpbnQ4X3QgdG9zLCB1aW50OF90IHNldF9kZiksCisgICAg
ICAgICAgICAgdm9pZCAoKmRlYnVnX3ByaW50ZikoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pKQor
eworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJV1NBREFUQSB3c2FEYXRhOworCisJaWYgKFdTQVN0YXJ0dXAo
TUFLRVdPUkQoMiwyKSwgJndzYURhdGEpICE9IDApIHsKKwkJU0NUUF9QUklOVEYoIldTQVN0YXJ0
dXAgZmFpbGVkXG4iKTsKKwkJZXhpdCAoLTEpOworCX0KKyNlbmRpZgorCUluaXRpYWxpemVDb25k
aXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQpOworCUluaXRpYWxpemVDcml0aWNhbFNlY3Rpb24o
JmFjY2VwdF9tdHgpOworI2Vsc2UKKwlwdGhyZWFkX211dGV4YXR0cl90IG11dGV4X2F0dHI7CisK
KwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZtdXRleF9hdHRyKTsKKyNpZmRlZiBJTlZBUklBTlRT
CisJcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZSgmbXV0ZXhfYXR0ciwgUFRIUkVBRF9NVVRFWF9F
UlJPUkNIRUNLKTsKKyNlbmRpZgorCXB0aHJlYWRfbXV0ZXhfaW5pdCgmYWNjZXB0X210eCwgJm11
dGV4X2F0dHIpOworCXB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3koJm11dGV4X2F0dHIpOworCXB0
aHJlYWRfY29uZF9pbml0KCZhY2NlcHRfY29uZCwgTlVMTCk7CisjZW5kaWYKKwlzY3RwX2luaXQo
cG9ydCwgY29ubl9vdXRwdXQsIGRlYnVnX3ByaW50Zik7Cit9CisKKworLyogVGFrZW4gZnJvbSAg
dXNyL3NyYy9zeXMva2Vybi91aXBjX3NvY2tidWYuYyBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNw
YWNlX18qLworLyoKKyAqIFNvY2FudHNlbmRtb3JlIGluZGljYXRlcyB0aGF0IG5vIG1vcmUgZGF0
YSB3aWxsIGJlIHNlbnQgb24gdGhlIHNvY2tldDsgaXQKKyAqIHdvdWxkIG5vcm1hbGx5IGJlIGFw
cGxpZWQgdG8gYSBzb2NrZXQgd2hlbiB0aGUgdXNlciBpbmZvcm1zIHRoZSBzeXN0ZW0KKyAqIHRo
YXQgbm8gbW9yZSBkYXRhIGlzIHRvIGJlIHNlbnQsIGJ5IHRoZSBwcm90b2NvbCBjb2RlIChpbiBj
YXNlCisgKiBQUlVfU0hVVERPV04pLiAgU29jYW50cmN2bW9yZSBpbmRpY2F0ZXMgdGhhdCBubyBt
b3JlIGRhdGEgd2lsbCBiZQorICogcmVjZWl2ZWQsIGFuZCB3aWxsIG5vcm1hbGx5IGJlIGFwcGxp
ZWQgdG8gdGhlIHNvY2tldCBieSBhIHByb3RvY29sIHdoZW4gaXQKKyAqIGRldGVjdHMgdGhhdCB0
aGUgcGVlciB3aWxsIHNlbmQgbm8gbW9yZSBkYXRhLiAgRGF0YSBxdWV1ZWQgZm9yIHJlYWRpbmcg
aW4KKyAqIHRoZSBzb2NrZXQgbWF5IHlldCBiZSByZWFkLgorICovCisKK3ZvaWQgc29jYW50cmN2
bW9yZV9sb2NrZWQoc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS0JVRl9MT0NLX0FTU0VSVCgm
c28tPnNvX3Jjdik7CisJc28tPnNvX3Jjdi5zYl9zdGF0ZSB8PSBTQlNfQ0FOVFJDVk1PUkU7CisJ
c29yd2FrZXVwX2xvY2tlZChzbyk7Cit9CisKK3ZvaWQgc29jYW50cmN2bW9yZShzdHJ1Y3Qgc29j
a2V0ICpzbykKK3sKKwlTT0NLQlVGX0xPQ0soJnNvLT5zb19yY3YpOworCXNvY2FudHJjdm1vcmVf
bG9ja2VkKHNvKTsKK30KKwordm9pZAorc29jYW50c2VuZG1vcmVfbG9ja2VkKHN0cnVjdCBzb2Nr
ZXQgKnNvKQoreworCVNPQ0tCVUZfTE9DS19BU1NFUlQoJnNvLT5zb19zbmQpOworCXNvLT5zb19z
bmQuc2Jfc3RhdGUgfD0gU0JTX0NBTlRTRU5ETU9SRTsKKwlzb3d3YWtldXBfbG9ja2VkKHNvKTsK
K30KKwordm9pZAorc29jYW50c2VuZG1vcmUoc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS0JV
Rl9MT0NLKCZzby0+c29fc25kKTsKKwlzb2NhbnRzZW5kbW9yZV9sb2NrZWQoc28pOworfQorCisK
KworLyogVGFrZW4gZnJvbSAgdXNyL3NyYy9zeXMva2Vybi91aXBjX3NvY2tidWYuYyBhbmQgY2Fs
bGVkIHdpdGhpbiBzY3RwX2xvd2VyX3Nvc2VuZC4KKyAqLworaW50CitzYndhaXQoc3RydWN0IHNv
Y2tidWYgKnNiKQoreworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykgLyogX19Vc2Vyc3BhY2Vf
XyAqLworCisJU09DS0JVRl9MT0NLX0FTU0VSVChzYik7CisKKwlzYi0+c2JfZmxhZ3MgfD0gU0Jf
V0FJVDsKKyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCWlmIChTbGVlcENv
bmRpdGlvblZhcmlhYmxlQ1MoJihzYi0+c2JfY29uZCksICYoc2ItPnNiX210eCksIElORklOSVRF
KSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLTE7CisjZWxzZQorCXJldHVybiAocHRo
cmVhZF9jb25kX3dhaXQoJihzYi0+c2JfY29uZCksICYoc2ItPnNiX210eCkpKTsKKyNlbmRpZgor
CisjZWxzZQorCVNPQ0tCVUZfTE9DS19BU1NFUlQoc2IpOworCisJc2ItPnNiX2ZsYWdzIHw9IFNC
X1dBSVQ7CisJcmV0dXJuIChtc2xlZXAoJnNiLT5zYl9jYywgJnNiLT5zYl9tdHgsCisJICAgIChz
Yi0+c2JfZmxhZ3MgJiBTQl9OT0lOVFIpID8gUFNPQ0sgOiBQU09DSyB8IFBDQVRDSCwgInNid2Fp
dCIsCisJICAgIHNiLT5zYl90aW1lbykpOworI2VuZGlmCit9CisKKworCisKKy8qIFRha2VuIGZy
b20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1Vz
ZXJzcGFjZV9fCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29ja2V0ICoKK3NvYWxsb2Modm9pZCkKK3sK
KwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCS8qCisJICogc29hbGxvYygpIHNldHMgb2Ygc29ja2V0
IGxheWVyIHN0YXRlIGZvciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2NyZWF0ZSgp
IGFuZCBzb25ld2Nvbm4oKS4KKwkgKgorCSAqIHNvZGVhbGxvYygpIHRlYXJzIGRvd24gc29ja2V0
IGxheWVyIHN0YXRlIGZvciBhIHNvY2tldCwKKwkgKiBjYWxsZWQgb25seSBieSBzb2ZyZWUoKSBh
bmQgc29uZXdjb25uKCkuCisJICogX19Vc2Vyc3BhY2VfXyBUT0RPIDogTWFrZSBzdXJlIHNvIGlz
IHByb3Blcmx5IGRlYWxsb2NhdGVkCisJICogd2hlbiB0ZWFyaW5nIGRvd24gdGhlIGNvbm5lY3Rp
b24uCisJICovCisKKwlzbyA9IChzdHJ1Y3Qgc29ja2V0ICopbWFsbG9jKHNpemVvZihzdHJ1Y3Qg
c29ja2V0KSk7CisKKwlpZiAoc28gPT0gTlVMTCkgeworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlt
ZW1zZXQoc28sIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2V0KSk7CisKKwkvKiBfX1VzZXJzcGFjZV9f
IEluaXRpYWxpemluZyB0aGUgc29ja2V0IGxvY2tzIGhlcmUgKi8KKwlTT0NLQlVGX0xPQ0tfSU5J
VCgmc28tPnNvX3NuZCwgInNvX3NuZCIpOworCVNPQ0tCVUZfTE9DS19JTklUKCZzby0+c29fcmN2
LCAic29fcmN2Iik7CisJU09DS0JVRl9DT05EX0lOSVQoJnNvLT5zb19zbmQpOworCVNPQ0tCVUZf
Q09ORF9JTklUKCZzby0+c29fcmN2KTsKKwlTT0NLX0NPTkRfSU5JVChzbyk7IC8qIHRpbWVvX2Nv
bmQgKi8KKworCS8qIF9fVXNlcnNwYWNlX18gQW55IHJlZiBjb3VudGluZyByZXF1aXJlZCBoZXJl
PyBXaWxsIHdlIGhhdmUgYW55IHVzZSBmb3IgYWlvam9icT8KKwkgICBXaGF0IGFib3V0IGdlbmNu
dCBhbmQgbnVtb3BlbnNvY2tldHM/Ki8KKwlUQUlMUV9JTklUKCZzby0+c29fYWlvam9icSk7CisJ
cmV0dXJuIChzbyk7Cit9CisKK3N0YXRpYyB2b2lkCitzb2RlYWxsb2Moc3RydWN0IHNvY2tldCAq
c28pCit7CisKKwlLQVNTRVJUKHNvLT5zb19jb3VudCA9PSAwLCAoInNvZGVhbGxvYygpOiBzb19j
b3VudCAlZCIsIHNvLT5zb19jb3VudCkpOworCUtBU1NFUlQoc28tPnNvX3BjYiA9PSBOVUxMLCAo
InNvZGVhbGxvYygpOiBzb19wY2IgIT0gTlVMTCIpKTsKKworCVNPQ0tCVUZfQ09ORF9ERVNUUk9Z
KCZzby0+c29fc25kKTsKKwlTT0NLQlVGX0NPTkRfREVTVFJPWSgmc28tPnNvX3Jjdik7CisKKwlT
T0NLX0NPTkRfREVTVFJPWShzbyk7CisKKwlTT0NLQlVGX0xPQ0tfREVTVFJPWSgmc28tPnNvX3Nu
ZCk7CisJU09DS0JVRl9MT0NLX0RFU1RST1koJnNvLT5zb19yY3YpOworCisJZnJlZShzbyk7Cit9
CisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1v
ZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KK3ZvaWQKK3NvZnJlZShzdHJ1Y3Qgc29ja2V0
ICpzbykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpoZWFkOworCisJQUNDRVBUX0xPQ0tfQVNTRVJUKCk7
CisJU09DS19MT0NLX0FTU0VSVChzbyk7CisJLyogU1NfTk9GRFJFRiB1bnNldCBpbiBhY2NlcHQg
Y2FsbC4gIHRoaXMgY29uZGl0aW9uIHNlZW1zIGlycmVsZXZlbnQKKwkgKiAgZm9yIF9fVXNlcnNw
YWNlX18uLi4KKwkgKi8KKwlpZiAoc28tPnNvX2NvdW50ICE9IDAgfHwKKwkgICAgKHNvLT5zb19z
dGF0ZSAmIFNTX1BST1RPUkVGKSB8fCAoc28tPnNvX3FzdGF0ZSAmIFNRX0NPTVApKSB7CisJCVNP
Q0tfVU5MT0NLKHNvKTsKKwkJQUNDRVBUX1VOTE9DSygpOworCQlyZXR1cm47CisJfQorCWhlYWQg
PSBzby0+c29faGVhZDsKKwlpZiAoaGVhZCAhPSBOVUxMKSB7CisJCUtBU1NFUlQoKHNvLT5zb19x
c3RhdGUgJiBTUV9DT01QKSAhPSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09N
UCkgIT0gMCwKKwkJICAgICgic29mcmVlOiBzb19oZWFkICE9IE5VTEwsIGJ1dCBuZWl0aGVyIFNR
X0NPTVAgbm9yICIKKwkJICAgICJTUV9JTkNPTVAiKSk7CisJCUtBU1NFUlQoKHNvLT5zb19xc3Rh
dGUgJiBTUV9DT01QKSA9PSAwIHx8CisJCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkg
PT0gMCwKKwkJICAgICgic29mcmVlOiBzby0+c29fcXN0YXRlIGlzIFNRX0NPTVAgYW5kIGFsc28g
U1FfSU5DT01QIikpOworCQlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xp
c3QpOworCQloZWFkLT5zb19pbmNxbGVuLS07CisJCXNvLT5zb19xc3RhdGUgJj0gflNRX0lOQ09N
UDsKKwkJc28tPnNvX2hlYWQgPSBOVUxMOworCX0KKwlLQVNTRVJUKChzby0+c29fcXN0YXRlICYg
U1FfQ09NUCkgPT0gMCAmJgorCSAgICAoc28tPnNvX3FzdGF0ZSAmIFNRX0lOQ09NUCkgPT0gMCwK
KwkgICAgKCJzb2ZyZWU6IHNvX2hlYWQgPT0gTlVMTCwgYnV0IHN0aWxsIFNRX0NPTVAoJWQpIG9y
IFNRX0lOQ09NUCglZCkiLAorCSAgICBzby0+c29fcXN0YXRlICYgU1FfQ09NUCwgc28tPnNvX3Fz
dGF0ZSAmIFNRX0lOQ09NUCkpOworCWlmIChzby0+c29fb3B0aW9ucyAmIFNDVFBfU09fQUNDRVBU
Q09OTikgeworCQlLQVNTRVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2NvbXApKSwgKCJzb2ZyZWU6
IHNvX2NvbXAgcG9wdWxhdGVkIikpOworCQlLQVNTRVJUKChUQUlMUV9FTVBUWSgmc28tPnNvX2lu
Y29tcCkpLCAoInNvZnJlZTogc29fY29tcCBwb3B1bGF0ZWQiKSk7CisJfQorCVNPQ0tfVU5MT0NL
KHNvKTsKKwlBQ0NFUFRfVU5MT0NLKCk7CisJc2N0cF9jbG9zZShzbyk7IC8qIHdhcy4uLiAgICBz
Y3RwX2RldGFjaChzbyk7ICovCisJLyoKKwkgKiBGcm9tIHRoaXMgcG9pbnQgb24sIHdlIGFzc3Vt
ZSB0aGF0IG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gdGhpcworCSAqIHNvY2tldCBleGlzdCBhbnl3
aGVyZSBlbHNlIGluIHRoZSBzdGFjay4gIFRoZXJlZm9yZSwgbm8gbG9ja3MgbmVlZAorCSAqIHRv
IGJlIGFjcXVpcmVkIG9yIGhlbGQuCisJICoKKwkgKiBXZSB1c2VkIHRvIGRvIGEgbG90IG9mIHNv
Y2tldCBidWZmZXIgYW5kIHNvY2tldCBsb2NraW5nIGhlcmUsIGFzCisJICogd2VsbCBhcyBpbnZv
a2Ugc29yZmx1c2goKSBhbmQgcGVyZm9ybSB3YWtldXBzLiAgVGhlIGRpcmVjdCBjYWxsIHRvCisJ
ICogZG9tX2Rpc3Bvc2UoKSBhbmQgc2JyZWxlYXNlX2ludGVybmFsKCkgYXJlIGFuIGlubGluaW5n
IG9mIHdoYXQgd2FzCisJICogbmVjZXNzYXJ5IGZyb20gc29yZmx1c2goKS4KKwkgKgorCSAqIE5v
dGljZSB0aGF0IHRoZSBzb2NrZXQgYnVmZmVyIGFuZCBrcXVldWUgc3RhdGUgYXJlIHRvcm4gZG93
bgorCSAqIGJlZm9yZSBjYWxsaW5nIHBydV9kZXRhY2guICBUaGlzIG1lYW5zIHRoYXQgcHJvdG9j
b2xzIHNob2xkIG5vdAorCSAqIGFzc3VtZSB0aGV5IGNhbiBwZXJmb3JtIHNvY2tldCB3YWtldXBz
LCBldGMsIGluIHRoZWlyIGRldGFjaCBjb2RlLgorCSAqLworCXNvZGVhbGxvYyhzbyk7Cit9CisK
KworCisvKiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgKi8KK3ZvaWQK
K3NvYWJvcnQoc3RydWN0IHNvY2tldCAqc28pCit7CisjaWYgZGVmaW5lZChJTkVUNikKKwlzdHJ1
Y3Qgc2N0cF9pbnBjYiAqaW5wOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKElORVQ2KQorCWlucCA9
IChzdHJ1Y3Qgc2N0cF9pbnBjYiAqKXNvLT5zb19wY2I7CisJaWYgKGlucC0+c2N0cF9mbGFncyAm
IFNDVFBfUENCX0ZMQUdTX0JPVU5EX1Y2KSB7CisJCXNjdHA2X2Fib3J0KHNvKTsKKwl9IGVsc2Ug
eworI2lmIGRlZmluZWQoSU5FVCkKKwkJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwl9CisjZWxp
ZiBkZWZpbmVkKElORVQpCisJc2N0cF9hYm9ydChzbyk7CisjZW5kaWYKKwlBQ0NFUFRfTE9DSygp
OworCVNPQ0tfTE9DSyhzbyk7CisJc29mcmVlKHNvKTsKK30KKworCisvKiBUYWtlbiBmcm9tICB1
c3Ivc3JjL3N5cy9rZXJuL3VpcGNfc29ja2V0LmMgYW5kIGNhbGxlZCB3aXRoaW4gc2N0cF9jb25u
ZWN0IChzY3RwX3VzcnJlcS5jKS4KKyAqICBXZSB1c2Ugc2N0cF9jb25uZWN0IGZvciBzZW5kX29u
ZV9pbml0X3JlYWwgaW4gbXMxLgorICovCit2b2lkCitzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29j
a2V0ICpzbykKK3sKKworCVNPQ0tfTE9DSyhzbyk7CisJc28tPnNvX3N0YXRlICY9IH4oU1NfSVND
T05ORUNURUR8U1NfSVNESVNDT05ORUNUSU5HKTsKKwlzby0+c29fc3RhdGUgfD0gU1NfSVNDT05O
RUNUSU5HOworCVNPQ0tfVU5MT0NLKHNvKTsKK30KKworLyogVGFrZW4gZnJvbSAgdXNyL3NyYy9z
eXMva2Vybi91aXBjX3NvY2tldC5jIGFuZCBjYWxsZWQgd2l0aGluIHNjdHBfZGlzY29ubmVjdCAo
c2N0cF91c3JyZXEuYykuCisgKiAgVE9ETyBEbyB3ZSB1c2Ugc2N0cF9kaXNjb25uZWN0PworICov
Cit2b2lkCitzb2lzZGlzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKworICAgICAg
ICAvKgorICAgICAgICAgKiBOb3RlOiBUaGlzIGNvZGUgYXNzdW1lcyB0aGF0IFNPQ0tfTE9DSyhz
bykgYW5kCisgICAgICAgICAqIFNPQ0tCVUZfTE9DSygmc28tPnNvX3JjdikgYXJlIHRoZSBzYW1l
LgorICAgICAgICAgKi8KKyAgICAgICAgU09DS0JVRl9MT0NLKCZzby0+c29fcmN2KTsKKyAgICAg
ICAgc28tPnNvX3N0YXRlICY9IH5TU19JU0NPTk5FQ1RJTkc7CisgICAgICAgIHNvLT5zb19zdGF0
ZSB8PSBTU19JU0RJU0NPTk5FQ1RJTkc7CisgICAgICAgIHNvLT5zb19yY3Yuc2Jfc3RhdGUgfD0g
U0JTX0NBTlRSQ1ZNT1JFOworICAgICAgICBzb3J3YWtldXBfbG9ja2VkKHNvKTsKKyAgICAgICAg
U09DS0JVRl9MT0NLKCZzby0+c29fc25kKTsKKyAgICAgICAgc28tPnNvX3NuZC5zYl9zdGF0ZSB8
PSBTQlNfQ0FOVFNFTkRNT1JFOworICAgICAgICBzb3d3YWtldXBfbG9ja2VkKHNvKTsKKyAgICAg
ICAgd2FrZXVwKCJkdW1teSIsc28pOworICAgICAgICAvKiByZXF1aXJlcyAyIGFyZ3MgYnV0IHRo
aXMgd2FzIGluIG9yaWcgKi8KKyAgICAgICAgLyogd2FrZXVwKCZzby0+c29fdGltZW8pOyAqLwor
fQorCisKKy8qIFRha2VuIGZyb20gc3lzL2tlcm4va2Vybl9zeW5jaC5jIGFuZAorICAgbW9kaWZp
ZWQgZm9yIF9fVXNlcnNwYWNlX18KKyovCisKKy8qCisgKiBNYWtlIGFsbCB0aHJlYWRzIHNsZWVw
aW5nIG9uIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmllciBydW5uYWJsZS4KKyAqIEFzc29jaWF0aW5n
IHdha2V1cCB3aXRoIHNvX3RpbWVvIGlkZW50aWZpZXIgYW5kIHRpbWVvX2NvbmQKKyAqIGNvbmRp
dGlvbiB2YXJpYWJsZS4gVE9ETy4gSWYgd2UgdXNlIGl0ZXJhdG9yIHRocmVhZCB0aGVuIHdlIG5l
ZWQgdG8KKyAqIG1vZGlmeSB3YWtldXAgc28gaXQgY2FuIGRpc3Rpbmd1aXNoIGJldHdlZW4gaXRl
cmF0b3IgaWRlbnRpZmllciBhbmQKKyAqIHRpbWVvIGlkZW50aWZpZXIuCisgKi8KK3ZvaWQKK3dh
a2V1cCh2b2lkICppZGVudCwgc3RydWN0IHNvY2tldCAqc28pCit7CisJU09DS19MT0NLKHNvKTsK
KyNpZiBkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCVdha2VBbGxDb25kaXRpb25W
YXJpYWJsZSgmKHNvKS0+dGltZW9fY29uZCk7CisjZWxzZQorCXB0aHJlYWRfY29uZF9icm9hZGNh
c3QoJihzbyktPnRpbWVvX2NvbmQpOworI2VuZGlmCisJU09DS19VTkxPQ0soc28pOworfQorCisK
Ky8qCisgKiBNYWtlIGEgdGhyZWFkIHNsZWVwaW5nIG9uIHRoZSBzcGVjaWZpZWQgaWRlbnRpZmll
ciBydW5uYWJsZS4KKyAqIE1heSB3YWtlIG1vcmUgdGhhbiBvbmUgdGhyZWFkIGlmIGEgdGFyZ2V0
IHRocmVhZCBpcyBjdXJyZW50bHkKKyAqIHN3YXBwZWQgb3V0LgorICovCit2b2lkCit3YWtldXBf
b25lKHZvaWQgKmlkZW50KQoreworCS8qIF9fVXNlcnNwYWNlX18gQ2hlY2s6IFdlIGFyZSB1c2lu
ZyBhY2NlcHRfY29uZCBmb3Igd2FrZXVwX29uZS4KKwkgIEl0IHNlZW1zIHRoYXQgd2FrZXVwX29u
ZSBpcyBvbmx5IGNhbGxlZCB3aXRoaW4KKwkgIHNvaXNjb25uZWN0ZWQoKSBhbmQgc29uZXdjb25u
KCkgd2l0aCBpZGVudCAmaGVhZC0+c29fdGltZW8KKwkgIGhlYWQgaXMgc28tPnNvX2hlYWQsIHdo
aWNoIGlzIGJhY2sgcG9pbnRlciB0byBsaXN0ZW4gc29ja2V0CisJICBUaGlzIHNlZW1zIHRvIGlu
ZGljYXRlIHRoYXQgdGhlIHVzZSBvZiBhY2NlcHRfY29uZCBpcyBjb3JyZWN0CisJICBzaW5jZSBz
b2NrZXQgd2hlcmUgYWNjZXB0cyBvY2N1ciBpcyBzb19oZWFkIGluIGFsbAorCSAgc3Vic2lkaWFy
eSBzb2NrZXRzLgorCSAqLworCUFDQ0VQVF9MT0NLKCk7CisjaWYgZGVmaW5lZCAoX19Vc2Vyc3Bh
Y2Vfb3NfV2luZG93cykKKwlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJmFjY2VwdF9jb25kKTsK
KyNlbHNlCisJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmYWNjZXB0X2NvbmQpOworI2VuZGlmCisJ
QUNDRVBUX1VOTE9DSygpOworfQorCisKKy8qIENhbGxlZCB3aXRoaW4gc2N0cF9wcm9jZXNzX2Nv
b2tpZV9bZXhpc3RpbmcvbmV3XSAqLwordm9pZAorc29pc2Nvbm5lY3RlZChzdHJ1Y3Qgc29ja2V0
ICpzbykKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpoZWFkOworCisJQUNDRVBUX0xPQ0soKTsKKwlTT0NL
X0xPQ0soc28pOworCXNvLT5zb19zdGF0ZSAmPSB+KFNTX0lTQ09OTkVDVElOR3xTU19JU0RJU0NP
Tk5FQ1RJTkd8U1NfSVNDT05GSVJNSU5HKTsKKwlzby0+c29fc3RhdGUgfD0gU1NfSVNDT05ORUNU
RUQ7CisJaGVhZCA9IHNvLT5zb19oZWFkOworCWlmIChoZWFkICE9IE5VTEwgJiYgKHNvLT5zb19x
c3RhdGUgJiBTUV9JTkNPTVApKSB7CisJCVNPQ0tfVU5MT0NLKHNvKTsKKwkJVEFJTFFfUkVNT1ZF
KCZoZWFkLT5zb19pbmNvbXAsIHNvLCBzb19saXN0KTsKKwkJaGVhZC0+c29faW5jcWxlbi0tOwor
CQlzby0+c29fcXN0YXRlICY9IH5TUV9JTkNPTVA7CisJCVRBSUxRX0lOU0VSVF9UQUlMKCZoZWFk
LT5zb19jb21wLCBzbywgc29fbGlzdCk7CisJCWhlYWQtPnNvX3FsZW4rKzsKKwkJc28tPnNvX3Fz
dGF0ZSB8PSBTUV9DT01QOworCQlBQ0NFUFRfVU5MT0NLKCk7CisJCXNvcndha2V1cChoZWFkKTsK
KwkJd2FrZXVwX29uZSgmaGVhZC0+c29fdGltZW8pOworCQlyZXR1cm47CisJfQorCVNPQ0tfVU5M
T0NLKHNvKTsKKwlBQ0NFUFRfVU5MT0NLKCk7CisJd2FrZXVwKCZzby0+c29fdGltZW8sIHNvKTsK
Kwlzb3J3YWtldXAoc28pOworCXNvd3dha2V1cChzbyk7CisKK30KKworLyogY2FsbGVkIHdpdGhp
biBzY3RwX2hhbmRsZV9jb29raWVfZWNobyAqLworCitzdHJ1Y3Qgc29ja2V0ICoKK3NvbmV3Y29u
bihzdHJ1Y3Qgc29ja2V0ICpoZWFkLCBpbnQgY29ubnN0YXR1cykKK3sKKwlzdHJ1Y3Qgc29ja2V0
ICpzbzsKKwlpbnQgb3ZlcjsKKworCUFDQ0VQVF9MT0NLKCk7CisJb3ZlciA9IChoZWFkLT5zb19x
bGVuID4gMyAqIGhlYWQtPnNvX3FsaW1pdCAvIDIpOworCUFDQ0VQVF9VTkxPQ0soKTsKKyNpZmRl
ZiBSRUdSRVNTSU9OCisJaWYgKHJlZ3Jlc3Npb25fc29uZXdjb25uX2Vhcmx5dGVzdCAmJiBvdmVy
KQorI2Vsc2UKKwlpZiAob3ZlcikKKyNlbmRpZgorCQlyZXR1cm4gKE5VTEwpOworCXNvID0gc29h
bGxvYygpOworCWlmIChzbyA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCXNvLT5zb19oZWFk
ID0gaGVhZDsKKwlzby0+c29fdHlwZSA9IGhlYWQtPnNvX3R5cGU7CisJc28tPnNvX29wdGlvbnMg
PSBoZWFkLT5zb19vcHRpb25zICZ+IFNDVFBfU09fQUNDRVBUQ09OTjsKKwlzby0+c29fbGluZ2Vy
ID0gaGVhZC0+c29fbGluZ2VyOworCXNvLT5zb19zdGF0ZSA9IGhlYWQtPnNvX3N0YXRlIHwgU1Nf
Tk9GRFJFRjsKKwlzby0+c29fZG9tID0gaGVhZC0+c29fZG9tOworI2lmZGVmIE1BQworCVNPQ0tf
TE9DSyhoZWFkKTsKKwltYWNfY3JlYXRlX3NvY2tldF9mcm9tX3NvY2tldChoZWFkLCBzbyk7CisJ
U09DS19VTkxPQ0soaGVhZCk7CisjZW5kaWYKKwlpZiAoc29yZXNlcnZlKHNvLCBoZWFkLT5zb19z
bmQuc2JfaGl3YXQsIGhlYWQtPnNvX3Jjdi5zYl9oaXdhdCkpIHsKKwkJc29kZWFsbG9jKHNvKTsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3dpdGNoIChoZWFkLT5zb19kb20pIHsKKyNpZmRlZiBJ
TkVUCisJY2FzZSBBRl9JTkVUOgorCQlpZiAoc2N0cF9hdHRhY2goc28sIElQUFJPVE9fU0NUUCwg
U0NUUF9ERUZBVUxUX1ZSRklEKSkgeworCQkJc29kZWFsbG9jKHNvKTsKKwkJCXJldHVybiAoTlVM
TCk7CisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6
CisJCWlmIChzY3RwNl9hdHRhY2goc28sIElQUFJPVE9fU0NUUCwgU0NUUF9ERUZBVUxUX1ZSRklE
KSkgeworCQkJc29kZWFsbG9jKHNvKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7
CisjZW5kaWYKKwljYXNlIEFGX0NPTk46CisJCWlmIChzY3RwY29ubl9hdHRhY2goc28sIElQUFJP
VE9fU0NUUCwgU0NUUF9ERUZBVUxUX1ZSRklEKSkgeworCQkJc29kZWFsbG9jKHNvKTsKKwkJCXJl
dHVybiAoTlVMTCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc29kZWFsbG9jKHNvKTsK
KwkJcmV0dXJuIChOVUxMKTsKKwkJYnJlYWs7CisJfQorCXNvLT5zb19yY3Yuc2JfbG93YXQgPSBo
ZWFkLT5zb19yY3Yuc2JfbG93YXQ7CisJc28tPnNvX3NuZC5zYl9sb3dhdCA9IGhlYWQtPnNvX3Nu
ZC5zYl9sb3dhdDsKKwlzby0+c29fcmN2LnNiX3RpbWVvID0gaGVhZC0+c29fcmN2LnNiX3RpbWVv
OworCXNvLT5zb19zbmQuc2JfdGltZW8gPSBoZWFkLT5zb19zbmQuc2JfdGltZW87CisJc28tPnNv
X3Jjdi5zYl9mbGFncyB8PSBoZWFkLT5zb19yY3Yuc2JfZmxhZ3MgJiBTQl9BVVRPU0laRTsKKwlz
by0+c29fc25kLnNiX2ZsYWdzIHw9IGhlYWQtPnNvX3NuZC5zYl9mbGFncyAmIFNCX0FVVE9TSVpF
OworCXNvLT5zb19zdGF0ZSB8PSBjb25uc3RhdHVzOworCUFDQ0VQVF9MT0NLKCk7CisJaWYgKGNv
bm5zdGF0dXMpIHsKKwkJVEFJTFFfSU5TRVJUX1RBSUwoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19s
aXN0KTsKKwkJc28tPnNvX3FzdGF0ZSB8PSBTUV9DT01QOworCQloZWFkLT5zb19xbGVuKys7CisJ
fSBlbHNlIHsKKwkJLyoKKwkJICogS2VlcCByZW1vdmluZyBzb2NrZXRzIGZyb20gdGhlIGhlYWQg
dW50aWwgdGhlcmUncyByb29tIGZvcgorCQkgKiB1cyB0byBpbnNlcnQgb24gdGhlIHRhaWwuICBJ
biBwcmUtbG9ja2luZyByZXZpc2lvbnMsIHRoaXMKKwkJICogd2FzIGEgc2ltcGxlIGlmICgpLCBi
dXQgYXMgd2UgY291bGQgYmUgcmFjaW5nIHdpdGggb3RoZXIKKwkJICogdGhyZWFkcyBhbmQgc29h
Ym9ydCgpIHJlcXVpcmVzIGRyb3BwaW5nIGxvY2tzLCB3ZSBtdXN0CisJCSAqIGxvb3Agd2FpdGlu
ZyBmb3IgdGhlIGNvbmRpdGlvbiB0byBiZSB0cnVlLgorCQkgKi8KKwkJd2hpbGUgKGhlYWQtPnNv
X2luY3FsZW4gPiBoZWFkLT5zb19xbGltaXQpIHsKKwkJCXN0cnVjdCBzb2NrZXQgKnNwOworCQkJ
c3AgPSBUQUlMUV9GSVJTVCgmaGVhZC0+c29faW5jb21wKTsKKwkJCVRBSUxRX1JFTU9WRSgmaGVh
ZC0+c29faW5jb21wLCBzcCwgc29fbGlzdCk7CisJCQloZWFkLT5zb19pbmNxbGVuLS07CisJCQlz
cC0+c29fcXN0YXRlICY9IH5TUV9JTkNPTVA7CisJCQlzcC0+c29faGVhZCA9IE5VTEw7CisJCQlB
Q0NFUFRfVU5MT0NLKCk7CisJCQlzb2Fib3J0KHNwKTsKKwkJCUFDQ0VQVF9MT0NLKCk7CisJCX0K
KwkJVEFJTFFfSU5TRVJUX1RBSUwoJmhlYWQtPnNvX2luY29tcCwgc28sIHNvX2xpc3QpOworCQlz
by0+c29fcXN0YXRlIHw9IFNRX0lOQ09NUDsKKwkJaGVhZC0+c29faW5jcWxlbisrOworCX0KKwlB
Q0NFUFRfVU5MT0NLKCk7CisJaWYgKGNvbm5zdGF0dXMpIHsKKwkJc29yd2FrZXVwKGhlYWQpOwor
CQl3YWtldXBfb25lKCZoZWFkLT5zb190aW1lbyk7CisJfQorCXJldHVybiAoc28pOworCit9CisK
Ky8qIEZyb20gL3NyYy9zeXMvc3lzL3N5c3Byb3RvLmggKi8KK3N0cnVjdCBzY3RwX2dlbmVyaWNf
c2VuZG1zZ19hcmdzIHsKKwlpbnQgc2Q7CisJY2FkZHJfdCBtc2c7CisJaW50IG1sZW47CisJY2Fk
ZHJfdCB0bzsKKwlzb2NrbGVuX3QgdG9sZW47ICAvKiB3YXMgX19zb2NrbGVuX3QgKi8KKwlzdHJ1
Y3Qgc2N0cF9zbmRyY3ZpbmZvICogc2luZm87CisJaW50IGZsYWdzOworfTsKKworc3RydWN0IHNj
dHBfZ2VuZXJpY19yZWN2bXNnX2FyZ3MgeworICAgICAgICBpbnQgc2Q7CisgICAgICAgIHN0cnVj
dCBpb3ZlYyAqaW92OworICAgICAgICBpbnQgaW92bGVuOworICAgICAgICBzdHJ1Y3Qgc29ja2Fk
ZHIgKmZyb207CisgICAgICAgIHNvY2tsZW5fdCAqZnJvbWxlbmFkZHI7IC8qIHdhcyBfX3NvY2ts
ZW5fdCAqLworICAgICAgICBzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvICpzaW5mbzsKKyAgICAgICAg
aW50ICptc2dfZmxhZ3M7Cit9OworCisKKyAvKgorICAgU291cmNlOiAvc3JjL3N5cy9nbnUvZnMv
eGZzL0ZyZWVCU0QveGZzX2lvY3RsLmMKKyAqLworc3RhdGljIF9faW5saW5lX18gaW50Citjb3B5
X3RvX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pIHsKKwltZW1jcHkoZHN0
LCBzcmMsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludAorY29w
eV9mcm9tX3VzZXIodm9pZCAqZHN0LCB2b2lkICpzcmMsIHNpemVfdCBsZW4pIHsKKwltZW1jcHko
ZHN0LCBzcmMsIGxlbik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgUmVmZXJlbmNlczoKKyBzcmMv
c3lzL2Rldi9sbWMvaWZfbG1jLmg6Cisgc3JjL3N5cy9wb3dlcnBjL3Bvd2VycGMvY29weWlub3V0
LmMKKyBzcmMvc3lzL3N5cy9zeXN0bS5oCisqLworIyBkZWZpbmUgY29weWluKHUsIGssIGxlbikJ
Y29weV9mcm9tX3VzZXIoaywgdSwgbGVuKQorCisvKiBSZWZlcmVuY2VzOgorICAgc3JjL3N5cy9w
b3dlcnBjL3Bvd2VycGMvY29weWlub3V0LmMKKyAgIHNyYy9zeXMvc3lzL3N5c3RtLmgKKyovCisj
IGRlZmluZSBjb3B5b3V0KGssIHUsIGxlbikJY29weV90b191c2VyKHUsIGssIGxlbikKKworCisv
KiBjb3B5aW5pb3YgZGVmaW5pdGlvbiBjb3BpZWQvbW9kaWZpZWQgZnJvbSBzcmMvc3lzL2tlcm4v
a2Vybl9zdWJyLmMgKi8KK2ludAorY29weWluaW92KHN0cnVjdCBpb3ZlYyAqaW92cCwgdV9pbnQg
aW92Y250LCBzdHJ1Y3QgaW92ZWMgKippb3YsIGludCBlcnJvcikKK3sKKwl1X2ludCBpb3ZsZW47
CisKKwkqaW92ID0gTlVMTDsKKwlpZiAoaW92Y250ID4gVUlPX01BWElPVikKKwkJcmV0dXJuIChl
cnJvcik7CisJaW92bGVuID0gaW92Y250ICogc2l6ZW9mIChzdHJ1Y3QgaW92ZWMpOworCSppb3Yg
PSBtYWxsb2MoaW92bGVuKTsgLyosIE1fSU9WLCBNX1dBSVRPSyk7ICovCisJZXJyb3IgPSBjb3B5
aW4oaW92cCwgKmlvdiwgaW92bGVuKTsKKwlpZiAoZXJyb3IpIHsKKwkJZnJlZSgqaW92KTsgLyos
IE1fSU9WKTsgKi8KKwkJKmlvdiA9IE5VTEw7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCisv
KiAoX19Vc2Vyc3BhY2VfXykgdmVyc2lvbiBvZiB1aW9tb3ZlICovCitpbnQKK3Vpb21vdmUodm9p
ZCAqY3AsIGludCBuLCBzdHJ1Y3QgdWlvICp1aW8pCit7CisJc3RydWN0IGlvdmVjICppb3Y7CisJ
c2l6ZV90IGNudDsKKwlpbnQgZXJyb3IgPSAwOworCisJaWYgKCh1aW8tPnVpb19ydyAhPSBVSU9f
UkVBRCkgJiYKKwkgICAgKHVpby0+dWlvX3J3ICE9IFVJT19XUklURSkpIHsKKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCXdoaWxlIChuID4gMCAmJiB1aW8tPnVpb19yZXNpZCkgeworCQlpb3Yg
PSB1aW8tPnVpb19pb3Y7CisJCWNudCA9IGlvdi0+aW92X2xlbjsKKwkJaWYgKGNudCA9PSAwKSB7
CisJCQl1aW8tPnVpb19pb3YrKzsKKwkJCXVpby0+dWlvX2lvdmNudC0tOworCQkJY29udGludWU7
CisJCX0KKwkJaWYgKGNudCA+IChzaXplX3QpbikKKwkJCWNudCA9IG47CisKKwkJc3dpdGNoICh1
aW8tPnVpb19zZWdmbGcpIHsKKworCQljYXNlIFVJT19VU0VSU1BBQ0U6CisJCQlpZiAodWlvLT51
aW9fcncgPT0gVUlPX1JFQUQpCisJCQkJZXJyb3IgPSBjb3B5b3V0KGNwLCBpb3YtPmlvdl9iYXNl
LCBjbnQpOworCQkJZWxzZQorCQkJCWVycm9yID0gY29weWluKGlvdi0+aW92X2Jhc2UsIGNwLCBj
bnQpOworCQkJaWYgKGVycm9yKQorCQkJCWdvdG8gb3V0OworCQkJYnJlYWs7CisKKwkJY2FzZSBV
SU9fU1lTU1BBQ0U6CisJCQlpZiAodWlvLT51aW9fcncgPT0gVUlPX1JFQUQpCisJCQkJbWVtY3B5
KGlvdi0+aW92X2Jhc2UsIGNwLCBjbnQpOworCQkJZWxzZQorCQkJCW1lbWNweShjcCwgaW92LT5p
b3ZfYmFzZSwgY250KTsKKwkJCWJyZWFrOworCQl9CisJCWlvdi0+aW92X2Jhc2UgPSAoY2hhciAq
KWlvdi0+aW92X2Jhc2UgKyBjbnQ7CisJCWlvdi0+aW92X2xlbiAtPSBjbnQ7CisJCXVpby0+dWlv
X3Jlc2lkIC09IGNudDsKKwkJdWlvLT51aW9fb2Zmc2V0ICs9IChvZmZfdCljbnQ7CisJCWNwID0g
KGNoYXIgKiljcCArIGNudDsKKwkJbiAtPSAoaW50KWNudDsKKwl9CitvdXQ6CisJcmV0dXJuIChl
cnJvcik7Cit9CisKKworLyogU291cmNlOiBzcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jICov
CitpbnQKK2dldHNvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqKm5hbXAsIGNhZGRyX3QgdWFkZHIs
IHNpemVfdCBsZW4pCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlpbnQgZXJyb3I7CisKKwlp
ZiAobGVuID4gU09DS19NQVhBRERSTEVOKQorCQlyZXR1cm4gKEVOQU1FVE9PTE9ORyk7CisJaWYg
KGxlbiA8IG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkciwgc2FfZGF0YSkpCisJCXJldHVybiAoRUlO
VkFMKTsKKwlNQUxMT0Moc2EsIHN0cnVjdCBzb2NrYWRkciAqLCBsZW4sIE1fU09OQU1FLCBNX1dB
SVRPSyk7CisJZXJyb3IgPSBjb3B5aW4odWFkZHIsIHNhLCBsZW4pOworCWlmIChlcnJvcikgewor
CQlGUkVFKHNhLCBNX1NPTkFNRSk7CisJfSBlbHNlIHsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQlz
YS0+c2FfbGVuID0gbGVuOworI2VuZGlmCisJCSpuYW1wID0gc2E7CisJfQorCXJldHVybiAoZXJy
b3IpOworfQorCitpbnQKK3VzcnNjdHBfZ2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50
IGxldmVsLCBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9u
X3ZhbHVlLCBzb2NrbGVuX3QgKm9wdGlvbl9sZW4pOworCitzY3RwX2Fzc29jX3QKK3VzcnNjdHBf
Z2V0YXNzb2NpZChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQorewor
CXN0cnVjdCBzY3RwX3BhZGRyaW5mbyBzcDsKKwlzb2NrbGVuX3Qgc2l6OworI2lmbmRlZiBIQVZF
X1NBX0xFTgorCXNpemVfdCBzYV9sZW47CisjZW5kaWYKKworCS8qIEZpcnN0IGdldCB0aGUgYXNz
b2MgaWQgKi8KKwlzaXogPSBzaXplb2Yoc3ApOworCW1lbXNldCgmc3AsIDAsIHNpemVvZihzcCkp
OworI2lmZGVmIEhBVkVfU0FfTEVOCisJbWVtY3B5KChjYWRkcl90KSZzcC5zcGluZm9fYWRkcmVz
cywgc2EsIHNhLT5zYV9sZW4pOworI2Vsc2UKKwlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNp
ZmRlZiBJTkVUCisJY2FzZSBBRl9JTkVUOgorCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2th
ZGRyX2luKTsKKwkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVUNgorCWNhc2UgQUZfSU5FVDY6
CisJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKwkJYnJlYWs7CisjZW5k
aWYKKwljYXNlIEFGX0NPTk46CisJCXNhX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29u
bik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXNhX2xlbiA9IDA7CisJCWJyZWFrOworCX0KKwlt
ZW1jcHkoKGNhZGRyX3QpJnNwLnNwaW5mb19hZGRyZXNzLCBzYSwgc2FfbGVuKTsKKyNlbmRpZgor
CWlmICh1c3JzY3RwX2dldHNvY2tvcHQoc29jaywgSVBQUk9UT19TQ1RQLCBTQ1RQX0dFVF9QRUVS
X0FERFJfSU5GTywgJnNwLCAmc2l6KSAhPSAwKSB7CisJCS8qIFdlIGRlcGVuZCBvbiB0aGUgZmFj
dCB0aGF0IDAgY2FuIG5ldmVyIGJlIHJldHVybmVkICovCisJCXJldHVybiAoKHNjdHBfYXNzb2Nf
dCkgMCk7CisJfQorCXJldHVybiAoc3Auc3BpbmZvX2Fzc29jX2lkKTsKK30KKworCisvKiBUYWtl
biBmcm9tICAvc3JjL2xpYi9saWJjL25ldC9zY3RwX3N5c19jYWxscy5jCisgKiBhbmQgbW9kaWZp
ZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAqIGNhbGxpbmcgc2N0cF9nZW5lcmljX3NlbmRtc2cgZnJv
bSB0aGlzIGZ1bmN0aW9uCisgKi8KK3NzaXplX3QKK3VzZXJzcGFjZV9zY3RwX3NlbmRtc2coc3Ry
dWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEs
CisgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4sCisgICAgICAgICAgICAgICAgICAg
ICAgIHN0cnVjdCBzb2NrYWRkciAqdG8sCisgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5f
dCB0b2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IHBwaWQsCisgICAgICAg
ICAgICAgICAgICAgICAgIHVfaW50MzJfdCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAg
dV9pbnQxNl90IHN0cmVhbV9ubywKKyAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQzMl90IHRp
bWV0b2xpdmUsCisgICAgICAgICAgICAgICAgICAgICAgIHVfaW50MzJfdCBjb250ZXh0KQorewor
CXN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2aW5mbywgKnNpbmZvID0gJnNuZHJjdmluZm87
CisJc3RydWN0IHVpbyBhdWlvOworCXN0cnVjdCBpb3ZlYyBpb3ZbMV07CisKKwltZW1zZXQoc2lu
Zm8sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cF9zbmRyY3ZpbmZvKSk7CisJc2luZm8tPnNpbmZvX3Bw
aWQgPSBwcGlkOworCXNpbmZvLT5zaW5mb19mbGFncyA9IGZsYWdzOworCXNpbmZvLT5zaW5mb19z
dHJlYW0gPSBzdHJlYW1fbm87CisJc2luZm8tPnNpbmZvX3RpbWV0b2xpdmUgPSB0aW1ldG9saXZl
OworCXNpbmZvLT5zaW5mb19jb250ZXh0ID0gY29udGV4dDsKKwlzaW5mby0+c2luZm9fYXNzb2Nf
aWQgPSAwOworCisKKwkvKiBQZXJmb3JtIGVycm9yIGNoZWNrcyBvbiBkZXN0aW5hdGlvbiAodG8p
ICovCisJaWYgKHRvbGVuID4gU09DS19NQVhBRERSTEVOKSB7CisJCWVycm5vID0gRU5BTUVUT09M
T05HOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKCh0b2xlbiA+IDApICYmCisJICAgICgodG8g
PT0gTlVMTCkgfHwgKHRvbGVuIDwgKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkp
KSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKGRhdGEgPT0g
TlVMTCkgeworCQllcnJubyA9IEVGQVVMVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIEFkZGlu
ZyB0aGUgZm9sbG93aW5nIGFzIHBhcnQgb2YgZGVmZW5zaXZlIHByb2dyYW1taW5nLCBpbiBjYXNl
IHRoZSBhcHBsaWNhdGlvbgorCSAgIGRvZXMgbm90IGRvIGl0IHdoZW4gcHJlcGFyaW5nIHRoZSBk
ZXN0aW5hdGlvbiBhZGRyZXNzLiovCisjaWZkZWYgSEFWRV9TQV9MRU4KKwlpZiAodG8gIT0gTlVM
TCkgeworCQl0by0+c2FfbGVuID0gdG9sZW47CisJfQorI2VuZGlmCisKKwlpb3ZbMF0uaW92X2Jh
c2UgPSAoY2FkZHJfdClkYXRhOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9f
aW92ID0gIGlvdjsKKwlhdWlvLnVpb19pb3ZjbnQgPSAxOworCWF1aW8udWlvX3NlZ2ZsZyA9IFVJ
T19VU0VSU1BBQ0U7CisJYXVpby51aW9fcncgPSBVSU9fV1JJVEU7CisJYXVpby51aW9fb2Zmc2V0
ID0gMDsJCQkvKiBYWFggKi8KKwlhdWlvLnVpb19yZXNpZCA9IGxlbjsKKwllcnJubyA9IHNjdHBf
bG93ZXJfc29zZW5kKHNvLCB0bywgJmF1aW8sIE5VTEwsIE5VTEwsIDAsIHNpbmZvKTsKKwlpZiAo
ZXJybm8gPT0gMCkgeworCQlyZXR1cm4gKGxlbiAtIGF1aW8udWlvX3Jlc2lkKTsKKwl9IGVsc2Ug
eworCQlyZXR1cm4gKC0xKTsKKwl9Cit9CisKKworc3NpemVfdAordXNyc2N0cF9zZW5kdihzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwKKyAgICAgICAg
ICAgICAgc2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICp0bywKKyAg
ICAgICAgICAgICAgaW50IGFkZHJjbnQsCisgICAgICAgICAgICAgIHZvaWQgKmluZm8sCisgICAg
ICAgICAgICAgIHNvY2tsZW5fdCBpbmZvbGVuLAorICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg
aW5mb3R5cGUsCisgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKwlzdHJ1Y3Qgc2N0cF9zbmRy
Y3ZpbmZvIHNpbmZvOworCXN0cnVjdCB1aW8gYXVpbzsKKwlzdHJ1Y3QgaW92ZWMgaW92WzFdOwor
CWludCB1c2Vfc2luZm87CisJc2N0cF9hc3NvY190ICphc3NvY19pZDsKKworCWlmIChzbyA9PSBO
VUxMKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlpZiAoZGF0YSA9
PSBOVUxMKSB7CisJCWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJbWVtc2V0
KCZzaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZHJjdmluZm8pKTsKKwlhc3NvY19pZCA9
IE5VTEw7CisJdXNlX3NpbmZvID0gMDsKKwlzd2l0Y2ggKGluZm90eXBlKSB7CisJY2FzZSBTQ1RQ
X1NFTkRWX05PSU5GTzoKKwkJaWYgKChpbmZvbGVuICE9IDApIHx8IChpbmZvICE9IE5VTEwpKSB7
CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWJyZWFrOworCWNh
c2UgU0NUUF9TRU5EVl9TTkRJTkZPOgorCQlpZiAoKGluZm8gPT0gTlVMTCkgfHwgKGluZm9sZW4g
IT0gc2l6ZW9mKHN0cnVjdCBzY3RwX3NuZGluZm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJ
CQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzaW5mby5zaW5mb19zdHJlYW0gPSAoKHN0cnVjdCBzY3Rw
X3NuZGluZm8gKilpbmZvKS0+c25kX3NpZDsKKwkJc2luZm8uc2luZm9fZmxhZ3MgPSAoKHN0cnVj
dCBzY3RwX3NuZGluZm8gKilpbmZvKS0+c25kX2ZsYWdzOworCQlzaW5mby5zaW5mb19wcGlkID0g
KChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9wcGlkOworCQlzaW5mby5zaW5mb19j
b250ZXh0ID0gKChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopaW5mbyktPnNuZF9jb250ZXh0OworCQlz
aW5mby5zaW5mb19hc3NvY19pZCA9ICgoc3RydWN0IHNjdHBfc25kaW5mbyAqKWluZm8pLT5zbmRf
YXNzb2NfaWQ7CisJCWFzc29jX2lkID0gJigoKHN0cnVjdCBzY3RwX3NuZGluZm8gKilpbmZvKS0+
c25kX2Fzc29jX2lkKTsKKwkJdXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NF
TkRWX1BSSU5GTzoKKwkJaWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9wcmluZm8pKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0x
KTsKKwkJfQorCQlzaW5mby5zaW5mb19zdHJlYW0gPSAwOworCQlzaW5mby5zaW5mb19mbGFncyA9
IFBSX1NDVFBfUE9MSUNZKCgoc3RydWN0IHNjdHBfcHJpbmZvICopaW5mbyktPnByX3BvbGljeSk7
CisJCXNpbmZvLnNpbmZvX3RpbWV0b2xpdmUgPSAoKHN0cnVjdCBzY3RwX3ByaW5mbyAqKWluZm8p
LT5wcl92YWx1ZTsKKwkJdXNlX3NpbmZvID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1NFTkRW
X0FVVEhJTkZPOgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJY2FzZSBTQ1RQ
X1NFTkRWX1NQQToKKwkJaWYgKChpbmZvID09IE5VTEwpIHx8IChpbmZvbGVuICE9IHNpemVvZihz
dHJ1Y3Qgc2N0cF9zZW5kdl9zcGEpKSkgeworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4g
KC0xKTsKKwkJfQorCQlpZiAoKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZf
ZmxhZ3MgJiBTQ1RQX1NFTkRfU05ESU5GT19WQUxJRCkgeworCQkJc2luZm8uc2luZm9fc3RyZWFt
ID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfc25kaW5mby5zbmRfc2lk
OworCQkJc2luZm8uc2luZm9fZmxhZ3MgPSAoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8p
LT5zZW5kdl9zbmRpbmZvLnNuZF9mbGFnczsKKwkJCXNpbmZvLnNpbmZvX3BwaWQgPSAoKHN0cnVj
dCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5zZW5kdl9zbmRpbmZvLnNuZF9wcGlkOworCQkJc2lu
Zm8uc2luZm9fY29udGV4dCA9ICgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2
X3NuZGluZm8uc25kX2NvbnRleHQ7CisJCQlzaW5mby5zaW5mb19hc3NvY19pZCA9ICgoc3RydWN0
IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGluZm8uc25kX2Fzc29jX2lkOworCQkJ
YXNzb2NfaWQgPSAmKCgoc3RydWN0IHNjdHBfc2VuZHZfc3BhICopaW5mbyktPnNlbmR2X3NuZGlu
Zm8uc25kX2Fzc29jX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXNpbmZvLnNpbmZvX2ZsYWdzID0gMDsK
KwkJCXNpbmZvLnNpbmZvX3N0cmVhbSA9IDA7CisJCX0KKwkJaWYgKCgoc3RydWN0IHNjdHBfc2Vu
ZHZfc3BhICopaW5mbyktPnNlbmR2X2ZsYWdzICYgU0NUUF9TRU5EX1BSSU5GT19WQUxJRCkgewor
CQkJc2luZm8uc2luZm9fZmxhZ3MgfD0gUFJfU0NUUF9QT0xJQ1koKChzdHJ1Y3Qgc2N0cF9zZW5k
dl9zcGEgKilpbmZvKS0+c2VuZHZfcHJpbmZvLnByX3BvbGljeSk7CisJCQlzaW5mby5zaW5mb190
aW1ldG9saXZlID0gKChzdHJ1Y3Qgc2N0cF9zZW5kdl9zcGEgKilpbmZvKS0+c2VuZHZfcHJpbmZv
LnByX3ZhbHVlOworCQl9CisJCWlmICgoKHN0cnVjdCBzY3RwX3NlbmR2X3NwYSAqKWluZm8pLT5z
ZW5kdl9mbGFncyAmIFNDVFBfU0VORF9BVVRISU5GT19WQUxJRCkgeworCQkJZXJybm8gPSBFSU5W
QUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQl1c2Vfc2luZm8gPSAxOworCQlicmVhazsKKwlk
ZWZhdWx0OgorCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJLyogUGVy
Zm9ybSBlcnJvciBjaGVja3Mgb24gZGVzdGluYXRpb24gKHRvKSAqLworCWlmIChhZGRyY250ID4g
MSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCisJaW92WzBdLmlv
dl9iYXNlID0gKGNhZGRyX3QpZGF0YTsKKwlpb3ZbMF0uaW92X2xlbiA9IGxlbjsKKworCWF1aW8u
dWlvX2lvdiA9ICBpb3Y7CisJYXVpby51aW9faW92Y250ID0gMTsKKwlhdWlvLnVpb19zZWdmbGcg
PSBVSU9fVVNFUlNQQUNFOworCWF1aW8udWlvX3J3ID0gVUlPX1dSSVRFOworCWF1aW8udWlvX29m
ZnNldCA9IDA7CQkJLyogWFhYICovCisJYXVpby51aW9fcmVzaWQgPSBsZW47CisJZXJybm8gPSBz
Y3RwX2xvd2VyX3Nvc2VuZChzbywgdG8sICZhdWlvLCBOVUxMLCBOVUxMLCBmbGFncywgdXNlX3Np
bmZvID8gJnNpbmZvIDogTlVMTCk7CisJaWYgKGVycm5vID09IDApIHsKKwkJaWYgKCh0byAhPSBO
VUxMKSAmJiAoYXNzb2NfaWQgIT0gTlVMTCkpIHsKKwkJCSphc3NvY19pZCA9IHVzcnNjdHBfZ2V0
YXNzb2NpZChzbywgdG8pOworCQl9CisJCXJldHVybiAobGVuIC0gYXVpby51aW9fcmVzaWQpOwor
CX0gZWxzZSB7CisJCXJldHVybiAoLTEpOworCX0KK30KKworCitzc2l6ZV90Cit1c2Vyc3BhY2Vf
c2N0cF9zZW5kbWJ1ZihzdHJ1Y3Qgc29ja2V0ICpzbywKKyAgICBzdHJ1Y3QgbWJ1ZiogbWJ1ZmRh
dGEsCisgICAgc2l6ZV90IGxlbiwKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAorICAgIHNvY2ts
ZW5fdCB0b2xlbiwKKyAgICB1X2ludDMyX3QgcHBpZCwKKyAgICB1X2ludDMyX3QgZmxhZ3MsCisg
ICAgdV9pbnQxNl90IHN0cmVhbV9ubywKKyAgICB1X2ludDMyX3QgdGltZXRvbGl2ZSwKKyAgICB1
X2ludDMyX3QgY29udGV4dCkKK3sKKworICAgIHN0cnVjdCBzY3RwX3NuZHJjdmluZm8gc25kcmN2
aW5mbywgKnNpbmZvID0gJnNuZHJjdmluZm87CisgICAgLyogICAgc3RydWN0IHVpbyBhdWlvOwor
ICAgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07ICovCisgICAgaW50IGVycm9yID0gMDsKKyAg
ICBpbnQgdWZsYWdzID0gMDsKKyAgICBzc2l6ZV90IHJldHZhbDsKKworICAgIHNpbmZvLT5zaW5m
b19wcGlkID0gcHBpZDsKKyAgICBzaW5mby0+c2luZm9fZmxhZ3MgPSBmbGFnczsKKyAgICBzaW5m
by0+c2luZm9fc3RyZWFtID0gc3RyZWFtX25vOworICAgIHNpbmZvLT5zaW5mb190aW1ldG9saXZl
ID0gdGltZXRvbGl2ZTsKKyAgICBzaW5mby0+c2luZm9fY29udGV4dCA9IGNvbnRleHQ7CisgICAg
c2luZm8tPnNpbmZvX2Fzc29jX2lkID0gMDsKKworICAgIC8qIFBlcmZvcm0gZXJyb3IgY2hlY2tz
IG9uIGRlc3RpbmF0aW9uICh0bykgKi8KKyAgICBpZiAodG9sZW4gPiBTT0NLX01BWEFERFJMRU4p
eworICAgICAgICBlcnJvciA9IChFTkFNRVRPT0xPTkcpOworICAgICAgICBnb3RvIHNlbmRtc2df
cmV0dXJuOworICAgIH0KKyAgICBpZiAodG9sZW4gPCAoc29ja2xlbl90KW9mZnNldG9mKHN0cnVj
dCBzb2NrYWRkciwgc2FfZGF0YSkpeworICAgICAgICBlcnJvciA9IChFSU5WQUwpOworICAgICAg
ICBnb3RvIHNlbmRtc2dfcmV0dXJuOworICAgIH0KKyAgICAvKiBBZGRpbmcgdGhlIGZvbGxvd2lu
ZyBhcyBwYXJ0IG9mIGRlZmVuc2l2ZSBwcm9ncmFtbWluZywgaW4gY2FzZSB0aGUgYXBwbGljYXRp
b24KKyAgICAgICBkb2VzIG5vdCBkbyBpdCB3aGVuIHByZXBhcmluZyB0aGUgZGVzdGluYXRpb24g
YWRkcmVzcy4qLworI2lmZGVmIEhBVkVfU0FfTEVOCisgICAgdG8tPnNhX2xlbiA9IHRvbGVuOwor
I2VuZGlmCisKKyAgICBlcnJvciA9IHNjdHBfbG93ZXJfc29zZW5kKHNvLCB0bywgTlVMTC8qdWlv
Ki8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IG1idWYgKiltYnVmZGF0
YSwgKHN0cnVjdCBtYnVmICopTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVm
bGFncywgc2luZm8pOworc2VuZG1zZ19yZXR1cm46CisgICAgLyogVE9ETzogTmVlZHMgYSBjb25k
aXRpb24gZm9yIG5vbi1ibG9ja2luZyB3aGVuIGVycm9yIGlzIEVXT1VMREJMT0NLICovCisgICAg
aWYgKDAgPT0gZXJyb3IpCisgICAgICAgIHJldHZhbCA9IGxlbjsKKyAgICBlbHNlIGlmIChlcnJv
ciA9PSBFV09VTERCTE9DSykgeworICAgICAgICBlcnJubyA9IEVXT1VMREJMT0NLOworICAgICAg
ICByZXR2YWwgPSAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICBTQ1RQX1BSSU5URigiJXM6IGVy
cm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7CisgICAgICAgIGVycm5vID0gZXJyb3I7Cisg
ICAgICAgIHJldHZhbCA9IC0xOworICAgIH0KKyAgICByZXR1cm4gKHJldHZhbCk7CisKK30KKwor
CisvKiB0YWtlbiBmcm9tIHVzci5saWIvc2N0cF9zeXNfY2FsbHMuYyBhbmQgbmVlZGVkIGhlcmUg
Ki8KKyNkZWZpbmUgICAgICAgIFNDVFBfU01BTExfSU9WRUNfU0laRSAyCisKKy8qIFRha2VuIGZy
b20gIC9zcmMvbGliL2xpYmMvbmV0L3NjdHBfc3lzX2NhbGxzLmMKKyAqIGFuZCBtb2RpZmllZCBm
b3IgX19Vc2Vyc3BhY2VfXworICogY2FsbGluZyBzY3RwX2dlbmVyaWNfcmVjdm1zZyBmcm9tIHRo
aXMgZnVuY3Rpb24KKyAqLworc3NpemVfdAordXNlcnNwYWNlX3NjdHBfcmVjdm1zZyhzdHJ1Y3Qg
c29ja2V0ICpzbywKKyAgICB2b2lkICpkYnVmLAorICAgIHNpemVfdCBsZW4sCisgICAgc3RydWN0
IHNvY2thZGRyICpmcm9tLAorICAgIHNvY2tsZW5fdCAqZnJvbWxlbnAsCisgICAgc3RydWN0IHNj
dHBfc25kcmN2aW5mbyAqc2luZm8sCisgICAgaW50ICptc2dfZmxhZ3MpCit7CisJc3RydWN0IHVp
byBhdWlvOworCXN0cnVjdCBpb3ZlYyBpb3ZbU0NUUF9TTUFMTF9JT1ZFQ19TSVpFXTsKKwlzdHJ1
Y3QgaW92ZWMgKnRpb3Y7CisJaW50IGlvdmxlbiA9IDE7CisJaW50IGVycm9yID0gMDsKKwlzc2l6
ZV90IHVsZW47CisJaW50IGk7CisJc29ja2xlbl90IGZyb21sZW47CisKKwlpb3ZbMF0uaW92X2Jh
c2UgPSBkYnVmOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92ID0gaW92
OworCWF1aW8udWlvX2lvdmNudCA9IGlvdmxlbjsKKwlhdWlvLnVpb19zZWdmbGcgPSBVSU9fVVNF
UlNQQUNFOworCWF1aW8udWlvX3J3ID0gVUlPX1JFQUQ7CisJYXVpby51aW9fb2Zmc2V0ID0gMDsJ
CQkvKiBYWFggKi8KKwlhdWlvLnVpb19yZXNpZCA9IDA7CisJdGlvdiA9IGlvdjsKKwlmb3IgKGkg
PSAwOyBpIDxpb3ZsZW47IGkrKywgdGlvdisrKSB7CisJCWlmICgoYXVpby51aW9fcmVzaWQgKz0g
dGlvdi0+aW92X2xlbikgPCAwKSB7CisJCQllcnJvciA9IEVJTlZBTDsKKwkJCVNDVFBfUFJJTlRG
KCIlczogZXJyb3IgPSAlZFxuIiwgX19mdW5jX18sIGVycm9yKTsKKwkJCXJldHVybiAoLTEpOwor
CQl9CisJfQorCXVsZW4gPSBhdWlvLnVpb19yZXNpZDsKKwlpZiAoZnJvbWxlbnAgIT0gTlVMTCkg
eworCQlmcm9tbGVuID0gKmZyb21sZW5wOworCX0gZWxzZSB7CisJCWZyb21sZW4gPSAwOworCX0K
KwllcnJvciA9IHNjdHBfc29yZWN2bXNnKHNvLCAmYXVpbywgKHN0cnVjdCBtYnVmICoqKU5VTEws
CisJCSAgICBmcm9tLCBmcm9tbGVuLCBtc2dfZmxhZ3MsCisJCSAgICAoc3RydWN0IHNjdHBfc25k
cmN2aW5mbyAqKXNpbmZvLCAxKTsKKworCWlmIChlcnJvcikgeworCQlpZiAoKGF1aW8udWlvX3Jl
c2lkICE9IHVsZW4pICYmCisJCSAgICAoZXJyb3IgPT0gRUlOVFIgfHwKKyNpZiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19OZXRCU0QpCisJCSAgICAgZXJyb3IgPT0gRVJFU1RBUlQgfHwKKyNlbmRp
ZgorCQkgICAgIGVycm9yID09IEVXT1VMREJMT0NLKSkgeworCQkJZXJyb3IgPSAwOworCQl9CisJ
fQorCWlmICgoZnJvbWxlbnAgIT0gTlVMTCkgJiYgKGZyb21sZW4gPiAwKSAmJiAoZnJvbSAhPSBO
VUxMKSkgeworCQlzd2l0Y2ggKGZyb20tPnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkK
KwkJY2FzZSBBRl9JTkVUOgorCQkJKmZyb21sZW5wID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9p
bik7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJCWNhc2UgQUZfSU5F
VDY6CisJCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQlicmVh
azsKKyNlbmRpZgorCQljYXNlIEFGX0NPTk46CisJCQkqZnJvbWxlbnAgPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkqZnJvbWxlbnAgPSAw
OworCQkJYnJlYWs7CisJCX0KKwkJaWYgKCpmcm9tbGVucCA+IGZyb21sZW4pIHsKKwkJCSpmcm9t
bGVucCA9IGZyb21sZW47CisJCX0KKwl9CisJaWYgKGVycm9yID09IDApIHsKKwkJLyogcmVhZHkg
cmV0dXJuIHZhbHVlICovCisJCXJldHVybiAodWxlbiAtIGF1aW8udWlvX3Jlc2lkKTsKKwl9IGVs
c2UgeworCQlTQ1RQX1BSSU5URigiJXM6IGVycm9yID0gJWRcbiIsIF9fZnVuY19fLCBlcnJvcik7
CisJCXJldHVybiAoLTEpOworCX0KK30KKworc3NpemVfdAordXNyc2N0cF9yZWN2dihzdHJ1Y3Qg
c29ja2V0ICpzbywKKyAgICB2b2lkICpkYnVmLAorICAgIHNpemVfdCBsZW4sCisgICAgc3RydWN0
IHNvY2thZGRyICpmcm9tLAorICAgIHNvY2tsZW5fdCAqZnJvbWxlbnAsCisgICAgdm9pZCAqaW5m
bywKKyAgICBzb2NrbGVuX3QgKmluZm9sZW4sCisgICAgdW5zaWduZWQgaW50ICppbmZvdHlwZSwK
KyAgICBpbnQgKm1zZ19mbGFncykKK3sKKwlzdHJ1Y3QgdWlvIGF1aW87CisJc3RydWN0IGlvdmVj
IGlvdltTQ1RQX1NNQUxMX0lPVkVDX1NJWkVdOworCXN0cnVjdCBpb3ZlYyAqdGlvdjsKKwlpbnQg
aW92bGVuID0gMTsKKwlzc2l6ZV90IHVsZW47CisJaW50IGk7CisJc29ja2xlbl90IGZyb21sZW47
CisJc3RydWN0IHNjdHBfcmN2aW5mbyAqcmN2OworCXN0cnVjdCBzY3RwX3JlY3Z2X3JuICpybjsK
KwlzdHJ1Y3Qgc2N0cF9leHRyY3ZpbmZvIHNlaW5mbzsKKworCWlmIChzbyA9PSBOVUxMKSB7CisJ
CWVycm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlpb3ZbMF0uaW92X2Jhc2UgPSBk
YnVmOworCWlvdlswXS5pb3ZfbGVuID0gbGVuOworCisJYXVpby51aW9faW92ID0gaW92OworCWF1
aW8udWlvX2lvdmNudCA9IGlvdmxlbjsKKwlhdWlvLnVpb19zZWdmbGcgPSBVSU9fVVNFUlNQQUNF
OworCWF1aW8udWlvX3J3ID0gVUlPX1JFQUQ7CisJYXVpby51aW9fb2Zmc2V0ID0gMDsJCQkvKiBY
WFggKi8KKwlhdWlvLnVpb19yZXNpZCA9IDA7CisJdGlvdiA9IGlvdjsKKwlmb3IgKGkgPSAwOyBp
IDxpb3ZsZW47IGkrKywgdGlvdisrKSB7CisJCWlmICgoYXVpby51aW9fcmVzaWQgKz0gdGlvdi0+
aW92X2xlbikgPCAwKSB7CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEpOworCQl9
CisJfQorCXVsZW4gPSBhdWlvLnVpb19yZXNpZDsKKwlpZiAoZnJvbWxlbnAgIT0gTlVMTCkgewor
CQlmcm9tbGVuID0gKmZyb21sZW5wOworCX0gZWxzZSB7CisJCWZyb21sZW4gPSAwOworCX0KKwll
cnJubyA9IHNjdHBfc29yZWN2bXNnKHNvLCAmYXVpbywgKHN0cnVjdCBtYnVmICoqKU5VTEwsCisJ
CSAgICBmcm9tLCBmcm9tbGVuLCBtc2dfZmxhZ3MsCisJCSAgICAoc3RydWN0IHNjdHBfc25kcmN2
aW5mbyAqKSZzZWluZm8sIDEpOworCWlmIChlcnJubykgeworCQlpZiAoKGF1aW8udWlvX3Jlc2lk
ICE9IHVsZW4pICYmCisJCSAgICAoZXJybm8gPT0gRUlOVFIgfHwKKyNpZiAhZGVmaW5lZChfX1Vz
ZXJzcGFjZV9vc19OZXRCU0QpCisJCSAgICAgZXJybm8gPT0gRVJFU1RBUlQgfHwKKyNlbmRpZgor
CQkgICAgIGVycm5vID09IEVXT1VMREJMT0NLKSkgeworCQkJZXJybm8gPSAwOworCQl9CisJfQor
CWlmICgoKm1zZ19mbGFncyAmIE1TR19OT1RJRklDQVRJT04pID09IDApIHsKKwkJc3RydWN0IHNj
dHBfaW5wY2IgKmlucDsKKworCQlpbnAgPSAoc3RydWN0IHNjdHBfaW5wY2IgKilzby0+c29fcGNi
OworCQlpZiAoc2N0cF9pc19mZWF0dXJlX29uKGlucCwgU0NUUF9QQ0JfRkxBR1NfUkVDVk5YVElO
Rk8pICYmCisJCSAgICBzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNW
UkNWSU5GTykgJiYKKwkJICAgICppbmZvbGVuID49IChzb2NrbGVuX3Qpc2l6ZW9mKHN0cnVjdCBz
Y3RwX3JlY3Z2X3JuKSAmJgorCQkgICAgc2VpbmZvLnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBf
TkVYVF9NU0dfQVZBSUwpIHsKKwkJCXJuID0gKHN0cnVjdCBzY3RwX3JlY3Z2X3JuICopaW5mbzsK
KwkJCXJuLT5yZWN2dl9yY3ZpbmZvLnJjdl9zaWQgPSBzZWluZm8uc2luZm9fc3RyZWFtOworCQkJ
cm4tPnJlY3Z2X3JjdmluZm8ucmN2X3NzbiA9IHNlaW5mby5zaW5mb19zc247CisJCQlybi0+cmVj
dnZfcmN2aW5mby5yY3ZfZmxhZ3MgPSBzZWluZm8uc2luZm9fZmxhZ3M7CisJCQlybi0+cmVjdnZf
cmN2aW5mby5yY3ZfcHBpZCA9IHNlaW5mby5zaW5mb19wcGlkOworCQkJcm4tPnJlY3Z2X3Jjdmlu
Zm8ucmN2X2NvbnRleHQgPSBzZWluZm8uc2luZm9fY29udGV4dDsKKwkJCXJuLT5yZWN2dl9yY3Zp
bmZvLnJjdl90c24gPSBzZWluZm8uc2luZm9fdHNuOworCQkJcm4tPnJlY3Z2X3JjdmluZm8ucmN2
X2N1bXRzbiA9IHNlaW5mby5zaW5mb19jdW10c247CisJCQlybi0+cmVjdnZfcmN2aW5mby5yY3Zf
YXNzb2NfaWQgPSBzZWluZm8uc2luZm9fYXNzb2NfaWQ7CisJCQlybi0+cmVjdnZfbnh0aW5mby5u
eHRfc2lkID0gc2VpbmZvLnNyZWluZm9fbmV4dF9zdHJlYW07CisJCQlybi0+cmVjdnZfbnh0aW5m
by5ueHRfZmxhZ3MgPSAwOworCQkJaWYgKHNlaW5mby5zcmVpbmZvX25leHRfZmxhZ3MgJiBTQ1RQ
X05FWFRfTVNHX0lTX1VOT1JERVJFRCkgeworCQkJCXJuLT5yZWN2dl9ueHRpbmZvLm54dF9mbGFn
cyB8PSBTQ1RQX1VOT1JERVJFRDsKKwkJCX0KKwkJCWlmIChzZWluZm8uc3JlaW5mb19uZXh0X2Zs
YWdzICYgU0NUUF9ORVhUX01TR19JU19OT1RJRklDQVRJT04pIHsKKwkJCQlybi0+cmVjdnZfbnh0
aW5mby5ueHRfZmxhZ3MgfD0gU0NUUF9OT1RJRklDQVRJT047CisJCQl9CisJCQlpZiAoc2VpbmZv
LnNyZWluZm9fbmV4dF9mbGFncyAmIFNDVFBfTkVYVF9NU0dfSVNDT01QTEVURSkgeworCQkJCXJu
LT5yZWN2dl9ueHRpbmZvLm54dF9mbGFncyB8PSBTQ1RQX0NPTVBMRVRFOworCQkJfQorCQkJcm4t
PnJlY3Z2X254dGluZm8ubnh0X3BwaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0X3BwaWQ7CisJCQly
bi0+cmVjdnZfbnh0aW5mby5ueHRfbGVuZ3RoID0gc2VpbmZvLnNyZWluZm9fbmV4dF9sZW5ndGg7
CisJCQlybi0+cmVjdnZfbnh0aW5mby5ueHRfYXNzb2NfaWQgPSBzZWluZm8uc3JlaW5mb19uZXh0
X2FpZDsKKwkJCSppbmZvbGVuID0gKHNvY2tsZW5fdClzaXplb2Yoc3RydWN0IHNjdHBfcmVjdnZf
cm4pOworCQkJKmluZm90eXBlID0gU0NUUF9SRUNWVl9STjsKKwkJfSBlbHNlIGlmIChzY3RwX2lz
X2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19SRUNWUkNWSU5GTykgJiYKKwkJICAgICAg
ICAgICAqaW5mb2xlbiA+PSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3Qgc2N0cF9yY3ZpbmZvKSkg
eworCQkJcmN2ID0gKHN0cnVjdCBzY3RwX3JjdmluZm8gKilpbmZvOworCQkJcmN2LT5yY3Zfc2lk
ID0gc2VpbmZvLnNpbmZvX3N0cmVhbTsKKwkJCXJjdi0+cmN2X3NzbiA9IHNlaW5mby5zaW5mb19z
c247CisJCQlyY3YtPnJjdl9mbGFncyA9IHNlaW5mby5zaW5mb19mbGFnczsKKwkJCXJjdi0+cmN2
X3BwaWQgPSBzZWluZm8uc2luZm9fcHBpZDsKKwkJCXJjdi0+cmN2X2NvbnRleHQgPSBzZWluZm8u
c2luZm9fY29udGV4dDsKKwkJCXJjdi0+cmN2X3RzbiA9IHNlaW5mby5zaW5mb190c247CisJCQly
Y3YtPnJjdl9jdW10c24gPSBzZWluZm8uc2luZm9fY3VtdHNuOworCQkJcmN2LT5yY3ZfYXNzb2Nf
aWQgPSBzZWluZm8uc2luZm9fYXNzb2NfaWQ7CisJCQkqaW5mb2xlbiA9IChzb2NrbGVuX3Qpc2l6
ZW9mKHN0cnVjdCBzY3RwX3JjdmluZm8pOworCQkJKmluZm90eXBlID0gU0NUUF9SRUNWVl9SQ1ZJ
TkZPOworCQl9IGVsc2UgeworCQkJKmluZm90eXBlID0gU0NUUF9SRUNWVl9OT0lORk87CisJCQkq
aW5mb2xlbiA9IDA7CisJCX0KKwl9CisJaWYgKChmcm9tbGVucCAhPSBOVUxMKSAmJiAoZnJvbWxl
biA+IDApICYmIChmcm9tICE9IE5VTEwpKSB7CisJCXN3aXRjaCAoZnJvbS0+c2FfZmFtaWx5KSB7
CisjaWYgZGVmaW5lZChJTkVUKQorCQljYXNlIEFGX0lORVQ6CisJCQkqZnJvbWxlbnAgPSBzaXpl
b2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWYgZGVmaW5lZChJ
TkVUNikKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCSpmcm9tbGVucCA9IHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW42KTsKKwkJCWJyZWFrOworI2VuZGlmCisJCWNhc2UgQUZfQ09OTjoKKwkJCSpmcm9t
bGVucCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfY29ubik7CisJCQlicmVhazsKKwkJZGVmYXVs
dDoKKwkJCSpmcm9tbGVucCA9IDA7CisJCQlicmVhazsKKwkJfQorCQlpZiAoKmZyb21sZW5wID4g
ZnJvbWxlbikgeworCQkJKmZyb21sZW5wID0gZnJvbWxlbjsKKwkJfQorCX0KKwlpZiAoZXJybm8g
PT0gMCkgeworCQkvKiByZWFkeSByZXR1cm4gdmFsdWUgKi8KKwkJcmV0dXJuICh1bGVuIC0gYXVp
by51aW9fcmVzaWQpOworCX0gZWxzZSB7CisJCXJldHVybiAoLTEpOworCX0KK30KKworCisKKwor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4v
dWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKiBzb2Ny
ZWF0ZSByZXR1cm5zIGEgc29ja2V0LiAgVGhlIHNvY2tldCBzaG91bGQgYmUKKyAqIGNsb3NlZCB3
aXRoIHNvY2xvc2UoKS4KKyAqLworaW50Citzb2NyZWF0ZShpbnQgZG9tLCBzdHJ1Y3Qgc29ja2V0
ICoqYXNvLCBpbnQgdHlwZSwgaW50IHByb3RvKQoreworCXN0cnVjdCBzb2NrZXQgKnNvOworCWlu
dCBlcnJvcjsKKworCWlmICgoZG9tICE9IEFGX0NPTk4pICYmIChkb20gIT0gQUZfSU5FVCkgJiYg
KGRvbSAhPSBBRl9JTkVUNikpIHsKKwkJcmV0dXJuIChFSU5WQUwpOworCX0KKwlpZiAoKHR5cGUg
IT0gU09DS19TVFJFQU0pICYmICh0eXBlICE9IFNPQ0tfU0VRUEFDS0VUKSkgeworCQlyZXR1cm4g
KEVJTlZBTCk7CisJfQorCWlmIChwcm90byAhPSBJUFBST1RPX1NDVFApIHsKKwkJcmV0dXJuIChF
SU5WQUwpOworCX0KKworCXNvID0gc29hbGxvYygpOworCWlmIChzbyA9PSBOVUxMKSB7CisJCXJl
dHVybiAoRU5PQlVGUyk7CisJfQorCisJLyoKKwkgKiBzb19pbmNvbXAgcmVwcmVzZW50cyBhIHF1
ZXVlIG9mIGNvbm5lY3Rpb25zIHRoYXQKKwkgKiBtdXN0IGJlIGNvbXBsZXRlZCBhdCBwcm90b2Nv
bCBsZXZlbCBiZWZvcmUgYmVpbmcKKwkgKiByZXR1cm5lZC4gc29fY29tcCBmaWVsZCBoZWFkcyBh
IGxpc3Qgb2Ygc29ja2V0cworCSAqIHRoYXQgYXJlIHJlYWR5IHRvIGJlIHJldHVybmVkIHRvIHRo
ZSBsaXN0ZW5pbmcgcHJvY2VzcworCSAqX19Vc2Vyc3BhY2VfXyBUaGVzZSBxdWV1ZXMgYXJlIGJl
aW5nIHVzZWQgYXQgYSBudW1iZXIgb2YgcGxhY2VzIGxpa2UgYWNjZXB0IGV0Yy4KKwkgKi8KKwlU
QUlMUV9JTklUKCZzby0+c29faW5jb21wKTsKKwlUQUlMUV9JTklUKCZzby0+c29fY29tcCk7CisJ
c28tPnNvX3R5cGUgPSB0eXBlOworCXNvLT5zb19jb3VudCA9IDE7CisJc28tPnNvX2RvbSA9IGRv
bTsKKwkvKgorCSAqIEF1dG8tc2l6aW5nIG9mIHNvY2tldCBidWZmZXJzIGlzIG1hbmFnZWQgYnkg
dGhlIHByb3RvY29scyBhbmQKKwkgKiB0aGUgYXBwcm9wcmlhdGUgZmxhZ3MgbXVzdCBiZSBzZXQg
aW4gdGhlIHBydV9hdHRhY2ggZnVuY3Rpb24uCisJICogRm9yIF9fVXNlcnNwYWNlX18gVGhlIHBy
dV9hdHRhY2ggZnVuY3Rpb24gaW4gdGhpcyBjYXNlIGlzIHNjdHBfYXR0YWNoLgorCSAqLworCXN3
aXRjaCAoZG9tKSB7CisjaWYgZGVmaW5lZChJTkVUKQorCWNhc2UgQUZfSU5FVDoKKwkJZXJyb3Ig
PSBzY3RwX2F0dGFjaChzbywgcHJvdG8sIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWJyZWFrOwor
I2VuZGlmCisjaWYgZGVmaW5lZChJTkVUNikKKwljYXNlIEFGX0lORVQ2OgorCQllcnJvciA9IHNj
dHA2X2F0dGFjaChzbywgcHJvdG8sIFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWJyZWFrOworI2Vu
ZGlmCisJY2FzZSBBRl9DT05OOgorCQllcnJvciA9IHNjdHBjb25uX2F0dGFjaChzbywgcHJvdG8s
IFNDVFBfREVGQVVMVF9WUkZJRCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWVycm9yID0gRUFG
Tk9TVVBQT1JUOworCQlicmVhazsKKwl9CisJaWYgKGVycm9yKSB7CisJCUtBU1NFUlQoc28tPnNv
X2NvdW50ID09IDEsICgic29jcmVhdGU6IHNvX2NvdW50ICVkIiwgc28tPnNvX2NvdW50KSk7CisJ
CXNvLT5zb19jb3VudCA9IDA7CisJCXNvZGVhbGxvYyhzbyk7CisJCXJldHVybiAoZXJyb3IpOwor
CX0KKwkqYXNvID0gc287CisJcmV0dXJuICgwKTsKK30KKyNlbHNlCisvKiBUaGUga2VybmVsIHZl
cnNpb24gZm9yIHJlZmVyZW5jZSBpcyBiZWxvdy4gVGhlICNlbHNlCisgICBzaG91bGQgYmUgcmVt
b3ZlZCBvbmNlIHRoZSBfX1VzZXJzcGFjZV9fCisgICB2ZXJzaW9uIGlzIHRlc3RlZC4KKyAqIHNv
Y3JlYXRlIHJldHVybnMgYSBzb2NrZXQgd2l0aCBhIHJlZiBjb3VudCBvZiAxLiAgVGhlIHNvY2tl
dCBzaG91bGQgYmUKKyAqIGNsb3NlZCB3aXRoIHNvY2xvc2UoKS4KKyAqLworaW50Citzb2NyZWF0
ZShpbnQgZG9tLCBzdHJ1Y3Qgc29ja2V0ICoqYXNvLCBpbnQgdHlwZSwgaW50IHByb3RvLAorICAg
IHN0cnVjdCB1Y3JlZCAqY3JlZCwgc3RydWN0IHRocmVhZCAqdGQpCit7CisJc3RydWN0IHByb3Rv
c3cgKnBycDsKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKwlpbnQgZXJyb3I7CisKKwlpZiAocHJvdG8p
CisJCXBycCA9IHBmZmluZHByb3RvKGRvbSwgcHJvdG8sIHR5cGUpOworCWVsc2UKKwkJcHJwID0g
cGZmaW5kdHlwZShkb20sIHR5cGUpOworCisJaWYgKHBycCA9PSBOVUxMIHx8IHBycC0+cHJfdXNy
cmVxcy0+cHJ1X2F0dGFjaCA9PSBOVUxMIHx8CisJICAgIHBycC0+cHJfdXNycmVxcy0+cHJ1X2F0
dGFjaCA9PSBwcnVfYXR0YWNoX25vdHN1cHApCisJCXJldHVybiAoRVBST1RPTk9TVVBQT1JUKTsK
KworCWlmIChqYWlsZWQoY3JlZCkgJiYgamFpbF9zb2NrZXRfdW5peGlwcm91dGVfb25seSAmJgor
CSAgICBwcnAtPnByX2RvbWFpbi0+ZG9tX2ZhbWlseSAhPSBQRl9MT0NBTCAmJgorCSAgICBwcnAt
PnByX2RvbWFpbi0+ZG9tX2ZhbWlseSAhPSBQRl9JTkVUICYmCisJICAgIHBycC0+cHJfZG9tYWlu
LT5kb21fZmFtaWx5ICE9IFBGX1JPVVRFKSB7CisJCXJldHVybiAoRVBST1RPTk9TVVBQT1JUKTsK
Kwl9CisKKwlpZiAocHJwLT5wcl90eXBlICE9IHR5cGUpCisJCXJldHVybiAoRVBST1RPVFlQRSk7
CisJc28gPSBzb2FsbG9jKCk7CisJaWYgKHNvID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7
CisKKwlUQUlMUV9JTklUKCZzby0+c29faW5jb21wKTsKKwlUQUlMUV9JTklUKCZzby0+c29fY29t
cCk7CisJc28tPnNvX3R5cGUgPSB0eXBlOworCXNvLT5zb19jcmVkID0gY3Job2xkKGNyZWQpOwor
CXNvLT5zb19wcm90byA9IHBycDsKKyNpZmRlZiBNQUMKKwltYWNfY3JlYXRlX3NvY2tldChjcmVk
LCBzbyk7CisjZW5kaWYKKwlrbmxpc3RfaW5pdCgmc28tPnNvX3Jjdi5zYl9zZWwuc2lfbm90ZSwg
U09DS0JVRl9NVFgoJnNvLT5zb19yY3YpLAorCSAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwlrbmxp
c3RfaW5pdCgmc28tPnNvX3NuZC5zYl9zZWwuc2lfbm90ZSwgU09DS0JVRl9NVFgoJnNvLT5zb19z
bmQpLAorCSAgICBOVUxMLCBOVUxMLCBOVUxMKTsKKwlzby0+c29fY291bnQgPSAxOworCS8qCisJ
ICogQXV0by1zaXppbmcgb2Ygc29ja2V0IGJ1ZmZlcnMgaXMgbWFuYWdlZCBieSB0aGUgcHJvdG9j
b2xzIGFuZAorCSAqIHRoZSBhcHByb3ByaWF0ZSBmbGFncyBtdXN0IGJlIHNldCBpbiB0aGUgcHJ1
X2F0dGFjaCBmdW5jdGlvbi4KKwkgKi8KKwllcnJvciA9ICgqcHJwLT5wcl91c3JyZXFzLT5wcnVf
YXR0YWNoKShzbywgcHJvdG8sIHRkKTsKKwlpZiAoZXJyb3IpIHsKKwkJS0FTU0VSVChzby0+c29f
Y291bnQgPT0gMSwgKCJzb2NyZWF0ZTogc29fY291bnQgJWQiLAorCQkgICAgc28tPnNvX2NvdW50
KSk7CisJCXNvLT5zb19jb3VudCA9IDA7CisJCXNvZGVhbGxvYyhzbyk7CisJCXJldHVybiAoZXJy
b3IpOworCX0KKwkqYXNvID0gc287CisJcmV0dXJuICgwKTsKK30KKyNlbmRpZgorCisKKworCisv
KiBUYWtlbiBmcm9tICAvc3JjL3N5cy9rZXJuL3VpcGNfc3lzY2FsbHMuYworICogYW5kIG1vZGlm
aWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKiBSZW1vdmluZyBzdHJ1Y3QgdGhyZWFkIHRkLgorICov
CitzdHJ1Y3Qgc29ja2V0ICoKK3VzZXJzcGFjZV9zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUs
IGludCBwcm90b2NvbCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzbyA9IE5VTEw7CisKKwllcnJubyA9
IHNvY3JlYXRlKGRvbWFpbiwgJnNvLCB0eXBlLCBwcm90b2NvbCk7CisJaWYgKGVycm5vKSB7CisJ
CXJldHVybiAoTlVMTCk7CisJfQorCS8qCisJICogVGhlIG9yaWdpbmFsIHNvY2tldCBjYWxsIHJl
dHVybnMgdGhlIGZpbGUgZGVzY3JpcHRvciBmZC4KKwkgKiB0ZC0+dGRfcmV0dmFsWzBdID0gZmQu
CisJICogV2UgYXJlIHJldHVybmluZyBzdHJ1Y3Qgc29ja2V0ICpzby4KKwkgKi8KKwlyZXR1cm4g
KHNvKTsKK30KKworc3RydWN0IHNvY2tldCAqCit1c3JzY3RwX3NvY2tldChpbnQgZG9tYWluLCBp
bnQgdHlwZSwgaW50IHByb3RvY29sLAorCSAgICAgICBpbnQgKCpyZWNlaXZlX2NiKShzdHJ1Y3Qg
c29ja2V0ICpzb2NrLCB1bmlvbiBzY3RwX3NvY2tzdG9yZSBhZGRyLCB2b2lkICpkYXRhLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRhdGFsZW4sIHN0cnVjdCBzY3Rw
X3JjdmluZm8sIGludCBmbGFncywgdm9pZCAqdWxwX2luZm8pLAorCSAgICAgICBpbnQgKCpzZW5k
X2NiKShzdHJ1Y3Qgc29ja2V0ICpzb2NrLCB1aW50MzJfdCBzYl9mcmVlKSwKKwkgICAgICAgdWlu
dDMyX3Qgc2JfdGhyZXNob2xkLAorCSAgICAgICB2b2lkICp1bHBfaW5mbykKK3sKKwlzdHJ1Y3Qg
c29ja2V0ICpzbzsKKworCWlmICgocHJvdG9jb2wgPT0gSVBQUk9UT19TQ1RQKSAmJiAoU0NUUF9C
QVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPT0gMCkpIHsKKwkJZXJybm8gPSBFUFJPVE9O
T1NVUFBPUlQ7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgocmVjZWl2ZV9jYiA9PSBOVUxM
KSAmJgorCSAgICAoKHNlbmRfY2IgIT0gTlVMTCkgfHwgKHNiX3RocmVzaG9sZCAhPSAwKSB8fCAo
dWxwX2luZm8gIT0gTlVMTCkpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKE5VTEwp
OworCX0KKwlpZiAoKGRvbWFpbiA9PSBBRl9DT05OKSAmJiAoU0NUUF9CQVNFX1ZBUihjb25uX291
dHB1dCkgPT0gTlVMTCkpIHsKKwkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCXJldHVybiAoTlVM
TCk7CisJfQorCWVycm5vID0gc29jcmVhdGUoZG9tYWluLCAmc28sIHR5cGUsIHByb3RvY29sKTsK
KwlpZiAoZXJybm8pIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyoKKwkgKiBUaGUgb3JpZ2lu
YWwgc29ja2V0IGNhbGwgcmV0dXJucyB0aGUgZmlsZSBkZXNjcmlwdG9yIGZkLgorCSAqIHRkLT50
ZF9yZXR2YWxbMF0gPSBmZC4KKwkgKiBXZSBhcmUgcmV0dXJuaW5nIHN0cnVjdCBzb2NrZXQgKnNv
LgorCSAqLworCXJlZ2lzdGVyX3JlY3ZfY2Ioc28sIHJlY2VpdmVfY2IpOworCXJlZ2lzdGVyX3Nl
bmRfY2Ioc28sIHNiX3RocmVzaG9sZCwgc2VuZF9jYik7CisJcmVnaXN0ZXJfdWxwX2luZm8oc28s
IHVscF9pbmZvKTsKKwlyZXR1cm4gKHNvKTsKK30KKworCit1X2xvbmcJc2JfbWF4ID0gU0JfTUFY
OwordV9sb25nIHNiX21heF9hZGogPQorICAgICAgIFNCX01BWCAqIE1DTEJZVEVTIC8gKE1TSVpF
ICsgTUNMQllURVMpOyAvKiBhZGp1c3RlZCBzYl9tYXggKi8KKworc3RhdGljCXVfbG9uZyBzYl9l
ZmZpY2llbmN5ID0gODsJLyogcGFyYW1ldGVyIGZvciBzYnJlc2VydmUoKSAqLworCisvKgorICog
QWxsb3QgbWJ1ZnMgdG8gYSBzb2NrYnVmLiAgQXR0ZW1wdCB0byBzY2FsZSBtYm1heCBzbyB0aGF0
IG1iY250IGRvZXNuJ3QKKyAqIGJlY29tZSBsaW1pdGluZyBpZiBidWZmZXJpbmcgZWZmaWNpZW5j
eSBpcyBuZWFyIHRoZSBub3JtYWwgY2FzZS4KKyAqLworaW50CitzYnJlc2VydmVfbG9ja2VkKHN0
cnVjdCBzb2NrYnVmICpzYiwgdV9sb25nIGNjLCBzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlTT0NL
QlVGX0xPQ0tfQVNTRVJUKHNiKTsKKwlzYi0+c2JfbWJtYXggPSAodV9pbnQpbWluKGNjICogc2Jf
ZWZmaWNpZW5jeSwgc2JfbWF4KTsKKwlzYi0+c2JfaGl3YXQgPSAodV9pbnQpY2M7CisJaWYgKHNi
LT5zYl9sb3dhdCA+IChpbnQpc2ItPnNiX2hpd2F0KQorCQlzYi0+c2JfbG93YXQgPSAoaW50KXNi
LT5zYl9oaXdhdDsKKwlyZXR1cm4gKDEpOworfQorCitzdGF0aWMgaW50CitzYnJlc2VydmUoc3Ry
dWN0IHNvY2tidWYgKnNiLCB1X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvKQoreworCWludCBl
cnJvcjsKKworCVNPQ0tCVUZfTE9DSyhzYik7CisJZXJyb3IgPSBzYnJlc2VydmVfbG9ja2VkKHNi
LCBjYywgc28pOworCVNPQ0tCVUZfVU5MT0NLKHNiKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKwor
I2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2ludAorc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQg
KnNvLCB1X2xvbmcgc25kY2MsIHVfbG9uZyByY3ZjYykKK3sKKwlTT0NLQlVGX0xPQ0soJnNvLT5z
b19zbmQpOworCVNPQ0tCVUZfTE9DSygmc28tPnNvX3Jjdik7CisJc28tPnNvX3NuZC5zYl9oaXdh
dCA9ICh1aW50MzJfdClzbmRjYzsKKwlzby0+c29fcmN2LnNiX2hpd2F0ID0gKHVpbnQzMl90KXJj
dmNjOworCisJaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNuZGNjLCBzbykgPT0g
MCkgeworCQlnb3RvIGJhZDsKKwl9CisJaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19yY3Ys
IHJjdmNjLCBzbykgPT0gMCkgeworCQlnb3RvIGJhZDsKKwl9CisJaWYgKHNvLT5zb19yY3Yuc2Jf
bG93YXQgPT0gMCkKKwkJc28tPnNvX3Jjdi5zYl9sb3dhdCA9IDE7CisJaWYgKHNvLT5zb19zbmQu
c2JfbG93YXQgPT0gMCkKKwkJc28tPnNvX3NuZC5zYl9sb3dhdCA9IE1DTEJZVEVTOworCWlmIChz
by0+c29fc25kLnNiX2xvd2F0ID4gKGludClzby0+c29fc25kLnNiX2hpd2F0KQorCQlzby0+c29f
c25kLnNiX2xvd2F0ID0gKGludClzby0+c29fc25kLnNiX2hpd2F0OworCVNPQ0tCVUZfVU5MT0NL
KCZzby0+c29fcmN2KTsKKwlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3NuZCk7CisJcmV0dXJuICgw
KTsKKworIGJhZDoKKwlTT0NLQlVGX1VOTE9DSygmc28tPnNvX3Jjdik7CisJU09DS0JVRl9VTkxP
Q0soJnNvLT5zb19zbmQpOworCXJldHVybiAoRU5PQlVGUyk7Cit9CisjZWxzZSAvKiBrZXJuZWwg
dmVyc2lvbiBmb3IgcmVmZXJlbmNlICovCitpbnQKK3NvcmVzZXJ2ZShzdHJ1Y3Qgc29ja2V0ICpz
bywgdV9sb25nIHNuZGNjLCB1X2xvbmcgcmN2Y2MpCit7CisJc3RydWN0IHRocmVhZCAqdGQgPSBj
dXJ0aHJlYWQ7CisKKwlTT0NLQlVGX0xPQ0soJnNvLT5zb19zbmQpOworCVNPQ0tCVUZfTE9DSygm
c28tPnNvX3Jjdik7CisJaWYgKHNicmVzZXJ2ZV9sb2NrZWQoJnNvLT5zb19zbmQsIHNuZGNjLCBz
bywgdGQpID09IDApCisJCWdvdG8gYmFkOworCWlmIChzYnJlc2VydmVfbG9ja2VkKCZzby0+c29f
cmN2LCByY3ZjYywgc28sIHRkKSA9PSAwKQorCQlnb3RvIGJhZDI7CisJaWYgKHNvLT5zb19yY3Yu
c2JfbG93YXQgPT0gMCkKKwkJc28tPnNvX3Jjdi5zYl9sb3dhdCA9IDE7CisJaWYgKHNvLT5zb19z
bmQuc2JfbG93YXQgPT0gMCkKKwkJc28tPnNvX3NuZC5zYl9sb3dhdCA9IE1DTEJZVEVTOworCWlm
IChzby0+c29fc25kLnNiX2xvd2F0ID4gc28tPnNvX3NuZC5zYl9oaXdhdCkKKwkJc28tPnNvX3Nu
ZC5zYl9sb3dhdCA9IHNvLT5zb19zbmQuc2JfaGl3YXQ7CisJU09DS0JVRl9VTkxPQ0soJnNvLT5z
b19yY3YpOworCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwlyZXR1cm4gKDApOworYmFk
MjoKKwlzYnJlbGVhc2VfbG9ja2VkKCZzby0+c29fc25kLCBzbyk7CitiYWQ6CisJU09DS0JVRl9V
TkxPQ0soJnNvLT5zb19yY3YpOworCVNPQ0tCVUZfVU5MT0NLKCZzby0+c29fc25kKTsKKwlyZXR1
cm4gKEVOT0JVRlMpOworfQorI2VuZGlmCisKKworCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9z
eXMva2Vybi91aXBjX3NvY2tidWYuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9f
CisgKi8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK3ZvaWQKK3Nvd2FrZXVwKHN0cnVj
dCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2J1ZiAqc2IpCit7CisKKwlTT0NLQlVGX0xPQ0tfQVNT
RVJUKHNiKTsKKworCXNiLT5zYl9mbGFncyAmPSB+U0JfU0VMOworCWlmIChzYi0+c2JfZmxhZ3Mg
JiBTQl9XQUlUKSB7CisJCXNiLT5zYl9mbGFncyAmPSB+U0JfV0FJVDsKKyNpZiBkZWZpbmVkIChf
X1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCQlXYWtlQWxsQ29uZGl0aW9uVmFyaWFibGUoJihzYikt
PnNiX2NvbmQpOworI2Vsc2UKKwkJcHRocmVhZF9jb25kX2Jyb2FkY2FzdCgmKHNiKS0+c2JfY29u
ZCk7CisjZW5kaWYKKwl9CisJU09DS0JVRl9VTkxPQ0soc2IpOworCS8qX19Vc2Vyc3BhY2VfXyB3
aGF0IHRvZG8gYWJvdXQgc29fdXBjYWxsPyovCisKK30KKyNlbHNlIC8qIGtlcm5lbCB2ZXJzaW9u
IGZvciByZWZlcmVuY2UgKi8KKy8qCisgKiBXYWtldXAgcHJvY2Vzc2VzIHdhaXRpbmcgb24gYSBz
b2NrZXQgYnVmZmVyLiAgRG8gYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbgorICogdmlhIFNJR0lP
IGlmIHRoZSBzb2NrZXQgaGFzIHRoZSBTU19BU1lOQyBmbGFnIHNldC4KKyAqCisgKiBDYWxsZWQg
d2l0aCB0aGUgc29ja2V0IGJ1ZmZlciBsb2NrIGhlbGQ7IHdpbGwgcmVsZWFzZSB0aGUgbG9jayBi
eSB0aGUgZW5kCisgKiBvZiB0aGUgZnVuY3Rpb24uICBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRv
IGFjcXVpcmUgdGhlIHNvY2tldCBidWZmZXIgbG9jaworICogd2hpbGUgdGVzdGluZyBmb3IgdGhl
IG5lZWQgZm9yIHZhcmlvdXMgc29ydHMgb2Ygd2FrZXVwIGFuZCBob2xkIGl0IHRocm91Z2gKKyAq
IHRvIHRoZSBwb2ludCB3aGVyZSBpdCdzIG5vIGxvbmdlciByZXF1aXJlZC4gIFdlIGN1cnJlbnRs
eSBob2xkIHRoZSBsb2NrCisgKiB0aHJvdWdoIGNhbGxzIG91dCB0byBvdGhlciBzdWJzeXN0ZW1z
ICh3aXRoIHRoZSBleGNlcHRpb24gb2Yga3F1ZXVlKSwgYW5kCisgKiB0aGVuIHJlbGVhc2UgaXQg
dG8gYXZvaWQgbG9jayBvcmRlciBpc3N1ZXMuICBJdCdzIG5vdCBjbGVhciB0aGF0J3MKKyAqIGNv
cnJlY3QuCisgKi8KK3ZvaWQKK3Nvd2FrZXVwKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a2J1ZiAqc2IpCit7CisKKwlTT0NLQlVGX0xPQ0tfQVNTRVJUKHNiKTsKKworCXNlbHdha2V1cHBy
aSgmc2ItPnNiX3NlbCwgUFNPQ0spOworCXNiLT5zYl9mbGFncyAmPSB+U0JfU0VMOworCWlmIChz
Yi0+c2JfZmxhZ3MgJiBTQl9XQUlUKSB7CisJCXNiLT5zYl9mbGFncyAmPSB+U0JfV0FJVDsKKwkJ
d2FrZXVwKCZzYi0+c2JfY2MpOworCX0KKwlLTk9URV9MT0NLRUQoJnNiLT5zYl9zZWwuc2lfbm90
ZSwgMCk7CisJU09DS0JVRl9VTkxPQ0soc2IpOworCWlmICgoc28tPnNvX3N0YXRlICYgU1NfQVNZ
TkMpICYmIHNvLT5zb19zaWdpbyAhPSBOVUxMKQorCQlwZ3NpZ2lvKCZzby0+c29fc2lnaW8sIFNJ
R0lPLCAwKTsKKwlpZiAoc2ItPnNiX2ZsYWdzICYgU0JfVVBDQUxMKQorCQkoKnNvLT5zb191cGNh
bGwpKHNvLCBzby0+c29fdXBjYWxsYXJnLCBNX05PV0FJVCk7CisJaWYgKHNiLT5zYl9mbGFncyAm
IFNCX0FJTykKKwkJYWlvX3N3YWtlKHNvLCBzYik7CisJbXR4X2Fzc2VydChTT0NLQlVGX01UWChz
YiksIE1BX05PVE9XTkVEKTsKK30KKyNlbmRpZgorCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9z
eXMva2Vybi91aXBjX3NvY2tldC5jCisgKiBhbmQgbW9kaWZpZWQgZm9yIF9fVXNlcnNwYWNlX18K
KyAqLworCitpbnQKK3NvYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpu
YW0pCit7CisJc3dpdGNoIChuYW0tPnNhX2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwlj
YXNlIEFGX0lORVQ6CisJCXJldHVybiAoc2N0cF9iaW5kKHNvLCBuYW0pKTsKKyNlbmRpZgorI2lm
IGRlZmluZWQoSU5FVDYpCisJY2FzZSBBRl9JTkVUNjoKKwkJcmV0dXJuIChzY3RwNl9iaW5kKHNv
LCBuYW0sIE5VTEwpKTsKKyNlbmRpZgorCWNhc2UgQUZfQ09OTjoKKwkJcmV0dXJuIChzY3RwY29u
bl9iaW5kKHNvLCBuYW0pKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRUFGTk9TVVBQT1JUOworCX0K
K30KKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKKyAqIGFu
ZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICovCisKK2ludAordXNyc2N0cF9iaW5kKHN0
cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIGludCBuYW1lbGVuKQorewor
CXN0cnVjdCBzb2NrYWRkciAqc2E7CisKKwlpZiAoc28gPT0gTlVMTCkgeworCQllcnJubyA9IEVC
QURGOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKChlcnJubyA9IGdldHNvY2thZGRyKCZzYSwg
KGNhZGRyX3QpbmFtZSwgbmFtZWxlbikpICE9IDApCisJCXJldHVybiAoLTEpOworCisJZXJybm8g
PSBzb2JpbmQoc28sIHNhKTsKKwlGUkVFKHNhLCBNX1NPTkFNRSk7CisJaWYgKGVycm5vKSB7CisJ
CXJldHVybiAoLTEpOworCX0gZWxzZSB7CisJCXJldHVybiAoMCk7CisJfQorfQorCitpbnQKK3Vz
ZXJzcGFjZV9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsIGlu
dCBuYW1lbGVuKQoreworCXJldHVybiAodXNyc2N0cF9iaW5kKHNvLCBuYW1lLCBuYW1lbGVuKSk7
Cit9CisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zb2NrZXQuYworICogYW5k
IG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KKworaW50Citzb2xpc3RlbihzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGJhY2tsb2cpCit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJcmV0dXJu
IChFQkFERik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChzY3RwX2xpc3RlbihzbywgYmFja2xvZywg
TlVMTCkpOworCX0KK30KKworCitpbnQKK3NvbGlzdGVuX3Byb3RvX2NoZWNrKHN0cnVjdCBzb2Nr
ZXQgKnNvKQoreworCisJU09DS19MT0NLX0FTU0VSVChzbyk7CisKKwlpZiAoc28tPnNvX3N0YXRl
ICYgKFNTX0lTQ09OTkVDVEVEIHwgU1NfSVNDT05ORUNUSU5HIHwKKwkgICAgU1NfSVNESVNDT05O
RUNUSU5HKSkKKwkJcmV0dXJuIChFSU5WQUwpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBp
bnQgc29tYXhjb25uID0gU09NQVhDT05OOworCit2b2lkCitzb2xpc3Rlbl9wcm90byhzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGJhY2tsb2cpCit7CisKKwlTT0NLX0xPQ0tfQVNTRVJUKHNvKTsKKwor
CWlmIChiYWNrbG9nIDwgMCB8fCBiYWNrbG9nID4gc29tYXhjb25uKQorCQliYWNrbG9nID0gc29t
YXhjb25uOworCXNvLT5zb19xbGltaXQgPSBiYWNrbG9nOworCXNvLT5zb19vcHRpb25zIHw9IFND
VFBfU09fQUNDRVBUQ09OTjsKK30KKworCisKKworLyogVGFrZW4gZnJvbSAgL3NyYy9zeXMva2Vy
bi91aXBjX3N5c2NhbGxzLmMKKyAqIGFuZCBtb2RpZmllZCBmb3IgX19Vc2Vyc3BhY2VfXworICov
CisKK2ludAordXNyc2N0cF9saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKQor
eworCWVycm5vID0gc29saXN0ZW4oc28sIGJhY2tsb2cpOworCWlmIChlcnJubykgeworCQlyZXR1
cm4gKC0xKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKDApOworCX0KK30KKworaW50Cit1c2Vyc3Bh
Y2VfbGlzdGVuKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgYmFja2xvZykKK3sKKwlyZXR1cm4gKHVz
cnNjdHBfbGlzdGVuKHNvLCBiYWNrbG9nKSk7Cit9CisKKy8qIFRha2VuIGZyb20gIC9zcmMvc3lz
L2tlcm4vdWlwY19zb2NrZXQuYworICogYW5kIG1vZGlmaWVkIGZvciBfX1VzZXJzcGFjZV9fCisg
Ki8KKworaW50Citzb2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoq
bmFtKQoreworCWludCBlcnJvcjsKKworCVNPQ0tfTE9DSyhzbyk7CisJS0FTU0VSVCgoc28tPnNv
X3N0YXRlICYgU1NfTk9GRFJFRikgIT0gMCwgKCJzb2FjY2VwdDogIU5PRkRSRUYiKSk7CisJc28t
PnNvX3N0YXRlICY9IH5TU19OT0ZEUkVGOworCVNPQ0tfVU5MT0NLKHNvKTsKKwllcnJvciA9IHNj
dHBfYWNjZXB0KHNvLCBuYW0pOworCXJldHVybiAoZXJyb3IpOworfQorCisKKworLyogVGFrZW4g
ZnJvbSAgL3NyYy9zeXMva2Vybi91aXBjX3N5c2NhbGxzLmMKKyAqIGtlcm5fYWNjZXB0IG1vZGlm
aWVkIGZvciBfX1VzZXJzcGFjZV9fCisgKi8KK2ludAordXNlcl9hY2NlcHQoc3RydWN0IHNvY2tl
dCAqaGVhZCwgIHN0cnVjdCBzb2NrYWRkciAqKm5hbWUsIHNvY2tsZW5fdCAqbmFtZWxlbiwgc3Ry
dWN0IHNvY2tldCAqKnB0cl9hY2NlcHRfcmV0X3NvY2spCit7CisJc3RydWN0IHNvY2thZGRyICpz
YSA9IE5VTEw7CisJaW50IGVycm9yOworCXN0cnVjdCBzb2NrZXQgKnNvID0gTlVMTDsKKworCisJ
aWYgKG5hbWUpIHsKKwkJKm5hbWUgPSBOVUxMOworCX0KKworCWlmICgoaGVhZC0+c29fb3B0aW9u
cyAmIFNDVFBfU09fQUNDRVBUQ09OTikgPT0gMCkgeworCQllcnJvciA9IEVJTlZBTDsKKwkJZ290
byBkb25lOworCX0KKworCUFDQ0VQVF9MT0NLKCk7CisJaWYgKChoZWFkLT5zb19zdGF0ZSAmIFNT
X05CSU8pICYmIFRBSUxRX0VNUFRZKCZoZWFkLT5zb19jb21wKSkgeworCQlBQ0NFUFRfVU5MT0NL
KCk7CisJCWVycm9yID0gRVdPVUxEQkxPQ0s7CisJCWdvdG8gbm9jb25uZWN0aW9uOworCX0KKwl3
aGlsZSAoVEFJTFFfRU1QVFkoJmhlYWQtPnNvX2NvbXApICYmIGhlYWQtPnNvX2Vycm9yID09IDAp
IHsKKwkJaWYgKGhlYWQtPnNvX3Jjdi5zYl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgeworCQkJ
aGVhZC0+c29fZXJyb3IgPSBFQ09OTkFCT1JURUQ7CisJCQlicmVhazsKKwkJfQorI2lmIGRlZmlu
ZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJCWlmIChTbGVlcENvbmRpdGlvblZhcmlhYmxl
Q1MoJmFjY2VwdF9jb25kLCAmYWNjZXB0X210eCwgSU5GSU5JVEUpKQorCQkJZXJyb3IgPSAwOwor
CQllbHNlCisJCQllcnJvciA9IEdldExhc3RFcnJvcigpOworI2Vsc2UKKwkJZXJyb3IgPSBwdGhy
ZWFkX2NvbmRfd2FpdCgmYWNjZXB0X2NvbmQsICZhY2NlcHRfbXR4KTsKKyNlbmRpZgorCQlpZiAo
ZXJyb3IpIHsKKwkJCUFDQ0VQVF9VTkxPQ0soKTsKKwkJCWdvdG8gbm9jb25uZWN0aW9uOworCQl9
CisJfQorCWlmIChoZWFkLT5zb19lcnJvcikgeworCQllcnJvciA9IGhlYWQtPnNvX2Vycm9yOwor
CQloZWFkLT5zb19lcnJvciA9IDA7CisJCUFDQ0VQVF9VTkxPQ0soKTsKKwkJZ290byBub2Nvbm5l
Y3Rpb247CisJfQorCXNvID0gVEFJTFFfRklSU1QoJmhlYWQtPnNvX2NvbXApOworCUtBU1NFUlQo
IShzby0+c29fcXN0YXRlICYgU1FfSU5DT01QKSwgKCJhY2NlcHQxOiBzbyBTUV9JTkNPTVAiKSk7
CisJS0FTU0VSVChzby0+c29fcXN0YXRlICYgU1FfQ09NUCwgKCJhY2NlcHQxOiBzbyBub3QgU1Ff
Q09NUCIpKTsKKworCS8qCisJICogQmVmb3JlIGNoYW5naW5nIHRoZSBmbGFncyBvbiB0aGUgc29j
a2V0LCB3ZSBoYXZlIHRvIGJ1bXAgdGhlCisJICogcmVmZXJlbmNlIGNvdW50LiAgT3RoZXJ3aXNl
LCBpZiB0aGUgcHJvdG9jb2wgY2FsbHMgc29mcmVlKCksCisJICogdGhlIHNvY2tldCB3aWxsIGJl
IHJlbGVhc2VkIGR1ZSB0byBhIHplcm8gcmVmY291bnQuCisJICovCisJU09DS19MT0NLKHNvKTsJ
CQkvKiBzb3JlZigpIGFuZCBzb19zdGF0ZSB1cGRhdGUgKi8KKwlzb3JlZihzbyk7CQkJLyogZmls
ZSBkZXNjcmlwdG9yIHJlZmVyZW5jZSAqLworCisJVEFJTFFfUkVNT1ZFKCZoZWFkLT5zb19jb21w
LCBzbywgc29fbGlzdCk7CisJaGVhZC0+c29fcWxlbi0tOworCXNvLT5zb19zdGF0ZSB8PSAoaGVh
ZC0+c29fc3RhdGUgJiBTU19OQklPKTsKKwlzby0+c29fcXN0YXRlICY9IH5TUV9DT01QOworCXNv
LT5zb19oZWFkID0gTlVMTDsKKwlTT0NLX1VOTE9DSyhzbyk7CisJQUNDRVBUX1VOTE9DSygpOwor
CisKKwkvKgorCSAqIFRoZSBvcmlnaW5hbCBhY2NlcHQgcmV0dXJucyBmZCB2YWx1ZSB2aWEgdGQt
PnRkX3JldHZhbFswXSA9IGZkOworCSAqIHdlIHdpbGwgcmV0dXJuIHRoZSBzb2NrZXQgZm9yIGFj
Y2VwdGVkIGNvbm5lY3Rpb24uCisJICovCisKKwllcnJvciA9IHNvYWNjZXB0KHNvLCAmc2EpOwor
CWlmIChlcnJvcikgeworCQkvKgorCQkgKiByZXR1cm4gYSBuYW1lbGVuIG9mIHplcm8gZm9yIG9s
ZGVyIGNvZGUgd2hpY2ggbWlnaHQKKwkJICogaWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBh
Y2NlcHQuCisJCSAqLworCQlpZiAobmFtZSkKKwkJCSpuYW1lbGVuID0gMDsKKwkJZ290byBub2Nv
bm5lY3Rpb247CisJfQorCWlmIChzYSA9PSBOVUxMKSB7CisJCWlmIChuYW1lKQorCQkJKm5hbWVs
ZW4gPSAwOworCQlnb3RvIGRvbmU7CisJfQorCWlmIChuYW1lKSB7CisjaWZkZWYgSEFWRV9TQV9M
RU4KKwkJLyogY2hlY2sgc2FfbGVuIGJlZm9yZSBpdCBpcyBkZXN0cm95ZWQgKi8KKwkJaWYgKCpu
YW1lbGVuID4gc2EtPnNhX2xlbikgeworCQkJKm5hbWVsZW4gPSBzYS0+c2FfbGVuOworCQl9Cisj
ZWxzZQorCQlzb2NrbGVuX3Qgc2FfbGVuOworCisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgewor
I2lmZGVmIElORVQKKwkJY2FzZSBBRl9JTkVUOgorCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBz
b2NrYWRkcl9pbik7CisJCQlicmVhazsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZf
SU5FVDY6CisJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQlicmVh
azsKKyNlbmRpZgorCQljYXNlIEFGX0NPTk46CisJCQlzYV9sZW4gPSBzaXplb2Yoc3RydWN0IHNv
Y2thZGRyX2Nvbm4pOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlzYV9sZW4gPSAwOworCQkJ
YnJlYWs7CisJCX0KKwkJaWYgKCpuYW1lbGVuID4gc2FfbGVuKSB7CisJCQkqbmFtZWxlbiA9IHNh
X2xlbjsKKwkJfQorI2VuZGlmCisJCSpuYW1lID0gc2E7CisJCXNhID0gTlVMTDsKKwl9Citub2Nv
bm5lY3Rpb246CisJaWYgKHNhKSB7CisJCUZSRUUoc2EsIE1fU09OQU1FKTsKKwl9CisKK2RvbmU6
CisJKnB0cl9hY2NlcHRfcmV0X3NvY2sgPSBzbzsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworCisK
Ky8qIFRha2VuIGZyb20gIC9zcmMvc3lzL2tlcm4vdWlwY19zeXNjYWxscy5jCisgKiBhbmQgbW9k
aWZpZWQgZm9yIF9fVXNlcnNwYWNlX18KKyAqLworLyoKKyAqIGFjY2VwdDEoKQorICovCitzdGF0
aWMgaW50CithY2NlcHQxKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFuYW1l
LCBzb2NrbGVuX3QgKmFuYW1lbGVuLCBzdHJ1Y3Qgc29ja2V0ICoqcHRyX2FjY2VwdF9yZXRfc29j
aykKK3sKKwlzdHJ1Y3Qgc29ja2FkZHIgKm5hbWU7CisJc29ja2xlbl90IG5hbWVsZW47CisJaW50
IGVycm9yOworCisJaWYgKHNvID09IE5VTEwpIHsKKwkJcmV0dXJuIChFQkFERik7CisJfQorCWlm
IChhbmFtZSA9PSBOVUxMKSB7CisJCXJldHVybiAodXNlcl9hY2NlcHQoc28sIE5VTEwsIE5VTEws
IHB0cl9hY2NlcHRfcmV0X3NvY2spKTsKKwl9CisKKwllcnJvciA9IGNvcHlpbihhbmFtZWxlbiwg
Jm5hbWVsZW4sIHNpemVvZiAobmFtZWxlbikpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIChlcnJv
cik7CisKKwllcnJvciA9IHVzZXJfYWNjZXB0KHNvLCAmbmFtZSwgJm5hbWVsZW4sIHB0cl9hY2Nl
cHRfcmV0X3NvY2spOworCisJLyoKKwkgKiByZXR1cm4gYSBuYW1lbGVuIG9mIHplcm8gZm9yIG9s
ZGVyIGNvZGUgd2hpY2ggbWlnaHQKKwkgKiBpZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGFj
Y2VwdC4KKwkgKi8KKwlpZiAoZXJyb3IpIHsKKwkJKHZvaWQpIGNvcHlvdXQoJm5hbWVsZW4sCisJ
CSAgICBhbmFtZWxlbiwgc2l6ZW9mKCphbmFtZWxlbikpOworCQlyZXR1cm4gKGVycm9yKTsKKwl9
CisKKwlpZiAoZXJyb3IgPT0gMCAmJiBuYW1lICE9IE5VTEwpIHsKKwkJZXJyb3IgPSBjb3B5b3V0
KG5hbWUsIGFuYW1lLCBuYW1lbGVuKTsKKwl9CisJaWYgKGVycm9yID09IDApIHsKKwkJZXJyb3Ig
PSBjb3B5b3V0KCZuYW1lbGVuLCBhbmFtZWxlbiwgc2l6ZW9mKG5hbWVsZW4pKTsKKwl9CisKKwlp
ZiAobmFtZSkgeworCQlGUkVFKG5hbWUsIE1fU09OQU1FKTsKKwl9CisJcmV0dXJuIChlcnJvcik7
Cit9CisKK3N0cnVjdCBzb2NrZXQgKgordXNyc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28s
IHN0cnVjdCBzb2NrYWRkciAqYW5hbWUsIHNvY2tsZW5fdCAqYW5hbWVsZW4pCit7CisJc3RydWN0
IHNvY2tldCAqYWNjZXB0X3JldHVybl9zb2NrID0gTlVMTDsKKworCWVycm5vID0gYWNjZXB0MShz
bywgYW5hbWUsIGFuYW1lbGVuLCAmYWNjZXB0X3JldHVybl9zb2NrKTsKKwlpZiAoZXJybm8pIHsK
KwkJcmV0dXJuIChOVUxMKTsKKwl9IGVsc2UgeworCQlyZXR1cm4gKGFjY2VwdF9yZXR1cm5fc29j
ayk7CisJfQorfQorCitzdHJ1Y3Qgc29ja2V0ICoKK3VzZXJzcGFjZV9hY2NlcHQoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqYW5hbWUsIHNvY2tsZW5fdCAqYW5hbWVsZW4pCit7
CisJcmV0dXJuICh1c3JzY3RwX2FjY2VwdChzbywgYW5hbWUsIGFuYW1lbGVuKSk7Cit9CisKK3N0
cnVjdCBzb2NrZXQgKgordXNyc2N0cF9wZWVsb2ZmKHN0cnVjdCBzb2NrZXQgKmhlYWQsIHNjdHBf
YXNzb2NfdCBpZCkKK3sKKwlzdHJ1Y3Qgc29ja2V0ICpzbzsKKworCWlmICgoZXJybm8gPSBzY3Rw
X2Nhbl9wZWVsX29mZihoZWFkLCBpZCkpICE9IDApIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJ
aWYgKChzbyA9IHNvbmV3Y29ubihoZWFkLCBTU19JU0NPTk5FQ1RFRCkpID09IE5VTEwpIHsKKwkJ
cmV0dXJuIChOVUxMKTsKKwl9CisJQUNDRVBUX0xPQ0soKTsKKwlTT0NLX0xPQ0soc28pOworCXNv
cmVmKHNvKTsKKwlUQUlMUV9SRU1PVkUoJmhlYWQtPnNvX2NvbXAsIHNvLCBzb19saXN0KTsKKwlo
ZWFkLT5zb19xbGVuLS07CisJc28tPnNvX3N0YXRlIHw9IChoZWFkLT5zb19zdGF0ZSAmIFNTX05C
SU8pOworCXNvLT5zb19xc3RhdGUgJj0gflNRX0NPTVA7CisJc28tPnNvX2hlYWQgPSBOVUxMOwor
CVNPQ0tfVU5MT0NLKHNvKTsKKwlBQ0NFUFRfVU5MT0NLKCk7CisJaWYgKChlcnJubyA9IHNjdHBf
ZG9fcGVlbG9mZihoZWFkLCBzbywgaWQpKSAhPSAwKSB7CisJCXNvLT5zb19jb3VudCA9IDA7CisJ
CXNvZGVhbGxvYyhzbyk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXJldHVybiAoc28pOworfQor
CitpbnQKK3NvZGlzY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwlpbnQgZXJyb3I7CisK
KwlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX0lTQ09OTkVDVEVEKSA9PSAwKQorCQlyZXR1cm4gKEVO
T1RDT05OKTsKKwlpZiAoc28tPnNvX3N0YXRlICYgU1NfSVNESVNDT05ORUNUSU5HKQorCQlyZXR1
cm4gKEVBTFJFQURZKTsKKwllcnJvciA9IHNjdHBfZGlzY29ubmVjdChzbyk7CisJcmV0dXJuIChl
cnJvcik7Cit9CisKK2ludAordXNyc2N0cF9zZXRfbm9uX2Jsb2NraW5nKHN0cnVjdCBzb2NrZXQg
KnNvLCBpbnQgb25vZmYpCit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsK
KwkJcmV0dXJuICgtMSk7CisJfQorCVNPQ0tfTE9DSyhzbyk7CisJaWYgKG9ub2ZmICE9IDApIHsK
KwkJc28tPnNvX3N0YXRlIHw9IFNTX05CSU87CisJfSBlbHNlIHsKKwkJc28tPnNvX3N0YXRlICY9
IH5TU19OQklPOworCX0KKwlTT0NLX1VOTE9DSyhzbyk7CisJcmV0dXJuICgwKTsKK30KKworaW50
Cit1c3JzY3RwX2dldF9ub25fYmxvY2tpbmcoc3RydWN0IHNvY2tldCAqc28pCit7CisJaW50IHJl
c3VsdDsKKworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAo
LTEpOworCX0KKwlTT0NLX0xPQ0soc28pOworCWlmIChzby0+c29fc3RhdGUgJiBTU19OQklPKSB7
CisJCXJlc3VsdCA9IDE7CisJfSBlbHNlIHsKKwkJcmVzdWx0ID0gMDsKKwl9CisJU09DS19VTkxP
Q0soc28pOworCXJldHVybiAocmVzdWx0KTsKK30KKworaW50Citzb2Nvbm5lY3Qoc3RydWN0IHNv
Y2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtKQoreworCWludCBlcnJvcjsKKworCWlmIChz
by0+c29fb3B0aW9ucyAmIFNDVFBfU09fQUNDRVBUQ09OTikKKwkJcmV0dXJuIChFT1BOT1RTVVBQ
KTsKKwkvKgorCSAqIElmIHByb3RvY29sIGlzIGNvbm5lY3Rpb24tYmFzZWQsIGNhbiBvbmx5IGNv
bm5lY3Qgb25jZS4KKwkgKiBPdGhlcndpc2UsIGlmIGNvbm5lY3RlZCwgdHJ5IHRvIGRpc2Nvbm5l
Y3QgZmlyc3QuICBUaGlzIGFsbG93cworCSAqIHVzZXIgdG8gZGlzY29ubmVjdCBieSBjb25uZWN0
aW5nIHRvLCBlLmcuLCBhIG51bGwgYWRkcmVzcy4KKwkgKi8KKwlpZiAoc28tPnNvX3N0YXRlICYg
KFNTX0lTQ09OTkVDVEVEfFNTX0lTQ09OTkVDVElORykgJiYgKGVycm9yID0gc29kaXNjb25uZWN0
KHNvKSkpIHsKKwkJZXJyb3IgPSBFSVNDT05OOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFByZXZl
bnQgYWNjdW11bGF0ZWQgZXJyb3IgZnJvbSBwcmV2aW91cyBjb25uZWN0aW9uIGZyb20KKwkJICog
Yml0aW5nIHVzLgorCQkgKi8KKwkJc28tPnNvX2Vycm9yID0gMDsKKwkJc3dpdGNoIChuYW0tPnNh
X2ZhbWlseSkgeworI2lmIGRlZmluZWQoSU5FVCkKKwkJY2FzZSBBRl9JTkVUOgorCQkJZXJyb3Ig
PSBzY3RwX2Nvbm5lY3Qoc28sIG5hbSk7CisJCQlicmVhazsKKyNlbmRpZgorI2lmIGRlZmluZWQo
SU5FVDYpCisJCWNhc2UgQUZfSU5FVDY6CisJCQllcnJvciA9IHNjdHA2X2Nvbm5lY3Qoc28sIG5h
bSk7CisJCQlicmVhazsKKyNlbmRpZgorCQljYXNlIEFGX0NPTk46CisJCQllcnJvciA9IHNjdHBj
b25uX2Nvbm5lY3Qoc28sIG5hbSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVycm9yID0g
RUFGTk9TVVBQT1JUOworCQl9CisJfQorCisJcmV0dXJuIChlcnJvcik7Cit9CisKKworCitpbnQg
dXNlcl9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKnNhKQorewor
CWludCBlcnJvcjsKKwlpbnQgaW50ZXJydXB0ZWQgPSAwOworCisJaWYgKHNvID09IE5VTEwpIHsK
KwkJZXJyb3IgPSBFQkFERjsKKwkJZ290byBkb25lMTsKKwl9CisJaWYgKHNvLT5zb19zdGF0ZSAm
IFNTX0lTQ09OTkVDVElORykgeworCQllcnJvciA9IEVBTFJFQURZOworCQlnb3RvIGRvbmUxOwor
CX0KKworCWVycm9yID0gc29jb25uZWN0KHNvLCBzYSk7CisJaWYgKGVycm9yKSB7CisJCWdvdG8g
YmFkOworCX0KKwlpZiAoKHNvLT5zb19zdGF0ZSAmIFNTX05CSU8pICYmIChzby0+c29fc3RhdGUg
JiBTU19JU0NPTk5FQ1RJTkcpKSB7CisJCWVycm9yID0gRUlOUFJPR1JFU1M7CisJCWdvdG8gZG9u
ZTE7CisJfQorCisJU09DS19MT0NLKHNvKTsKKwl3aGlsZSAoKHNvLT5zb19zdGF0ZSAmIFNTX0lT
Q09OTkVDVElORykgJiYgc28tPnNvX2Vycm9yID09IDApIHsKKyNpZiBkZWZpbmVkIChfX1VzZXJz
cGFjZV9vc19XaW5kb3dzKQorCQlpZiAoU2xlZXBDb25kaXRpb25WYXJpYWJsZUNTKFNPQ0tfQ09O
RChzbyksIFNPQ0tfTVRYKHNvKSwgSU5GSU5JVEUpKQorCQkJZXJyb3IgPSAwOworCQllbHNlCisJ
CQllcnJvciA9IC0xOworI2Vsc2UKKwkJZXJyb3IgPSBwdGhyZWFkX2NvbmRfd2FpdChTT0NLX0NP
TkQoc28pLCBTT0NLX01UWChzbykpOworI2VuZGlmCisJCWlmIChlcnJvcikgeworI2lmIGRlZmlu
ZWQoX19Vc2Vyc3BhY2Vfb3NfTmV0QlNEKQorCQkJaWYgKGVycm9yID09IEVJTlRSKSB7CisjZWxz
ZQorCQkJaWYgKGVycm9yID09IEVJTlRSIHx8IGVycm9yID09IEVSRVNUQVJUKSB7CisjZW5kaWYK
KwkJCQlpbnRlcnJ1cHRlZCA9IDE7CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoZXJy
b3IgPT0gMCkgeworCQllcnJvciA9IHNvLT5zb19lcnJvcjsKKwkJc28tPnNvX2Vycm9yID0gMDsK
Kwl9CisJU09DS19VTkxPQ0soc28pOworCitiYWQ6CisJaWYgKCFpbnRlcnJ1cHRlZCkgeworCQlz
by0+c29fc3RhdGUgJj0gflNTX0lTQ09OTkVDVElORzsKKwl9CisjaWYgIWRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfTmV0QlNEKQorCWlmIChlcnJvciA9PSBFUkVTVEFSVCkgeworCQllcnJvciA9IEVJ
TlRSOworCX0KKyNlbmRpZgorZG9uZTE6CisJcmV0dXJuIChlcnJvcik7Cit9CisKK2ludCB1c3Jz
Y3RwX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50
IG5hbWVsZW4pCit7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKworCWVycm5vID0gZ2V0c29ja2Fk
ZHIoJnNhLCAoY2FkZHJfdCluYW1lLCBuYW1lbGVuKTsKKwlpZiAoZXJybm8pCisJCXJldHVybiAo
LTEpOworCisJZXJybm8gPSB1c2VyX2Nvbm5lY3Qoc28sIHNhKTsKKwlGUkVFKHNhLCBNX1NPTkFN
RSk7CisJaWYgKGVycm5vKSB7CisJCXJldHVybiAoLTEpOworCX0gZWxzZSB7CisJCXJldHVybiAo
MCk7CisJfQorfQorCitpbnQgdXNlcnNwYWNlX2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0
cnVjdCBzb2NrYWRkciAqbmFtZSwgaW50IG5hbWVsZW4pCit7CisJcmV0dXJuICh1c3JzY3RwX2Nv
bm5lY3Qoc28sIG5hbWUsIG5hbWVsZW4pKTsKK30KKworI2RlZmluZSBTQ1RQX1NUQUNLX0JVRl9T
SVpFICAgICAgICAgMjA0OAorCit2b2lkCit1c3JzY3RwX2Nsb3NlKHN0cnVjdCBzb2NrZXQgKnNv
KSB7CisJaWYgKHNvICE9IE5VTEwpIHsKKwkJaWYgKHNvLT5zb19vcHRpb25zICYgU0NUUF9TT19B
Q0NFUFRDT05OKSB7CisJCQlzdHJ1Y3Qgc29ja2V0ICpzcDsKKworCQkJQUNDRVBUX0xPQ0soKTsK
KwkJCXdoaWxlICgoc3AgPSBUQUlMUV9GSVJTVCgmc28tPnNvX2NvbXApKSAhPSBOVUxMKSB7CisJ
CQkJVEFJTFFfUkVNT1ZFKCZzby0+c29fY29tcCwgc3AsIHNvX2xpc3QpOworCQkJCXNvLT5zb19x
bGVuLS07CisJCQkJc3AtPnNvX3FzdGF0ZSAmPSB+U1FfQ09NUDsKKwkJCQlzcC0+c29faGVhZCA9
IE5VTEw7CisJCQkJQUNDRVBUX1VOTE9DSygpOworCQkJCXNvYWJvcnQoc3ApOworCQkJCUFDQ0VQ
VF9MT0NLKCk7CisJCQl9CisJCQlBQ0NFUFRfVU5MT0NLKCk7CisJCX0KKwkJQUNDRVBUX0xPQ0so
KTsKKwkJU09DS19MT0NLKHNvKTsKKwkJc29yZWxlKHNvKTsKKwl9Cit9CisKK3ZvaWQKK3VzZXJz
cGFjZV9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbykKK3sKKwl1c3JzY3RwX2Nsb3NlKHNvKTsKK30K
KworaW50Cit1c3JzY3RwX3NodXRkb3duKHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQorewor
CWlmICghKGhvdyA9PSBTSFVUX1JEIHx8IGhvdyA9PSBTSFVUX1dSIHx8IGhvdyA9PSBTSFVUX1JE
V1IpKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJaWYgKHNvID09
IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuICgtMSk7CisJfQorCXNjdHBfZmx1
c2goc28sIGhvdyk7CisJaWYgKGhvdyAhPSBTSFVUX1dSKQorCQkgc29jYW50cmN2bW9yZShzbyk7
CisJaWYgKGhvdyAhPSBTSFVUX1JEKSB7CisJCWVycm5vID0gc2N0cF9zaHV0ZG93bihzbyk7CisJ
CWlmIChlcnJubykgeworCQkJcmV0dXJuICgtMSk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gKDAp
OworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CisKK2ludAordXNlcnNwYWNlX3NodXRkb3duKHN0
cnVjdCBzb2NrZXQgKnNvLCBpbnQgaG93KQoreworCXJldHVybiAodXNyc2N0cF9zaHV0ZG93bihz
bywgaG93KSk7Cit9CisKK2ludAordXNyc2N0cF9maW5pc2godm9pZCkKK3sKKwlpZiAoU0NUUF9C
QVNFX1ZBUihzY3RwX3BjYl9pbml0aWFsaXplZCkgPT0gMCkgeworCQlyZXR1cm4gKDApOworCX0K
KwlpZiAoU0NUUF9JTlBfSU5GT19UUllMT0NLKCkpIHsKKwkJaWYgKCFMSVNUX0VNUFRZKCZTQ1RQ
X0JBU0VfSU5GTyhsaXN0aGVhZCkpKSB7CisJCQlTQ1RQX0lOUF9JTkZPX1JVTkxPQ0soKTsKKwkJ
CXJldHVybiAoLTEpOworCQl9CisJCVNDVFBfSU5QX0lORk9fUlVOTE9DSygpOworCX0gZWxzZSB7
CisJCXJldHVybiAoLTEpOworCX0KKwlzY3RwX2ZpbmlzaCgpOworI2lmIGRlZmluZWQoX19Vc2Vy
c3BhY2Vfb3NfV2luZG93cykKKwlEZWxldGVDb25kaXRpb25WYXJpYWJsZSgmYWNjZXB0X2NvbmQp
OworCURlbGV0ZUNyaXRpY2FsU2VjdGlvbigmYWNjZXB0X210eCk7CisjaWYgZGVmaW5lZChJTkVU
KSB8fCBkZWZpbmVkKElORVQ2KQorCVdTQUNsZWFudXAoKTsKKyNlbmRpZgorI2Vsc2UKKwlwdGhy
ZWFkX2NvbmRfZGVzdHJveSgmYWNjZXB0X2NvbmQpOworCXB0aHJlYWRfbXV0ZXhfZGVzdHJveSgm
YWNjZXB0X210eCk7CisjZW5kaWYKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3VzZXJzcGFjZV9m
aW5pc2godm9pZCkKK3sKKwlyZXR1cm4gKHVzcnNjdHBfZmluaXNoKCkpOworfQorCisvKiBuZWVk
ZWQgZnJvbSBzY3RwX3VzcnJlcS5jICovCitpbnQKK3NjdHBfc2V0b3B0KHN0cnVjdCBzb2NrZXQg
KnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0c2l6ZSwgdm9pZCAqcCk7
CisKK2ludAordXNyc2N0cF9zZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgbGV2ZWws
IGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvcHRpb25f
dmFsdWUsIHNvY2tsZW5fdCBvcHRpb25fbGVuKQoreworCWlmIChzbyA9PSBOVUxMKSB7CisJCWVy
cm5vID0gRUJBREY7CisJCXJldHVybiAoLTEpOworCX0KKwlzd2l0Y2ggKGxldmVsKSB7CisJY2Fz
ZSBTT0xfU09DS0VUOgorCXsKKwkJc3dpdGNoIChvcHRpb25fbmFtZSkgeworCQljYXNlIFNPX1JD
VkJVRjoKKwkJCWlmIChvcHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJ
CWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQg
KmJ1Zl9zaXplOworCisJCQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCWlm
ICgqYnVmX3NpemUgPCAxKSB7CisJCQkJCWVycm5vID0gRUlOVkFMOworCQkJCQlyZXR1cm4gKC0x
KTsKKwkJCQl9CisJCQkJc2JyZXNlcnZlKCZzby0+c29fcmN2LCAodV9sb25nKSpidWZfc2l6ZSwg
c28pOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19TTkRCVUY6
CisJCQlpZiAob3B0aW9uX2xlbiA8IChzb2NrbGVuX3Qpc2l6ZW9mKGludCkpIHsKKwkJCQllcnJu
byA9IEVJTlZBTDsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0gZWxzZSB7CisJCQkJaW50ICpidWZf
c2l6ZTsKKworCQkJCWJ1Zl9zaXplID0gKGludCAqKW9wdGlvbl92YWx1ZTsKKwkJCQlpZiAoKmJ1
Zl9zaXplIDwgMSkgeworCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuICgtMSk7CisJ
CQkJfQorCQkJCXNicmVzZXJ2ZSgmc28tPnNvX3NuZCwgKHVfbG9uZykqYnVmX3NpemUsIHNvKTsK
KwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU09fTElOR0VSOgorCQkJ
aWYgKG9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3QgbGluZ2VyKSkgeworCQkJ
CWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlzdHJ1
Y3QgbGluZ2VyICpsOworCisJCQkJbCA9IChzdHJ1Y3QgbGluZ2VyICopb3B0aW9uX3ZhbHVlOwor
CQkJCXNvLT5zb19saW5nZXIgPSBsLT5sX2xpbmdlcjsKKwkJCQlpZiAobC0+bF9vbm9mZikgewor
CQkJCQlzby0+c29fb3B0aW9ucyB8PSBTQ1RQX1NPX0xJTkdFUjsKKwkJCQl9IGVsc2UgeworCQkJ
CQlzby0+c29fb3B0aW9ucyAmPSB+U0NUUF9TT19MSU5HRVI7CisJCQkJfQorCQkJCXJldHVybiAo
MCk7CisJCQl9CisJCWRlZmF1bHQ6CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAoLTEp
OworCQl9CisJfQorCWNhc2UgSVBQUk9UT19TQ1RQOgorCQllcnJubyA9IHNjdHBfc2V0b3B0KHNv
LCBvcHRpb25fbmFtZSwgKHZvaWQgKikgb3B0aW9uX3ZhbHVlLCAoc2l6ZV90KW9wdGlvbl9sZW4s
IE5VTEwpOworCQlpZiAoZXJybm8pIHsKKwkJCXJldHVybiAoLTEpOworCQl9IGVsc2UgeworCQkJ
cmV0dXJuICgwKTsKKwkJfQorCWRlZmF1bHQ6CisJCWVycm5vID0gRU5PUFJPVE9PUFQ7CisJCXJl
dHVybiAoLTEpOworCX0KK30KKworaW50Cit1c2Vyc3BhY2Vfc2V0c29ja29wdChzdHJ1Y3Qgc29j
a2V0ICpzbywgaW50IGxldmVsLCBpbnQgb3B0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAg
ICBjb25zdCB2b2lkICpvcHRpb25fdmFsdWUsIHNvY2tsZW5fdCBvcHRpb25fbGVuKQoreworCXJl
dHVybiAodXNyc2N0cF9zZXRzb2Nrb3B0KHNvLCBsZXZlbCwgb3B0aW9uX25hbWUsIG9wdGlvbl92
YWx1ZSwgb3B0aW9uX2xlbikpOworfQorCisvKiBuZWVkZWQgZnJvbSBzY3RwX3VzcnJlcS5jICov
CitpbnQKK3NjdHBfZ2V0b3B0KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgb3B0bmFtZSwgdm9pZCAq
b3B0dmFsLCBzaXplX3QgKm9wdHNpemUsCisJICAgIHZvaWQgKnApOworCitpbnQKK3VzcnNjdHBf
Z2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGxldmVsLCBpbnQgb3B0aW9uX25hbWUs
CisgICAgICAgICAgICAgICAgICAgdm9pZCAqb3B0aW9uX3ZhbHVlLCBzb2NrbGVuX3QgKm9wdGlv
bl9sZW4pCit7CisJaWYgKHNvID09IE5VTEwpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJu
ICgtMSk7CisJfQorCWlmIChvcHRpb25fbGVuID09IE5VTEwpIHsKKwkJZXJybm8gPSBFRkFVTFQ7
CisJCXJldHVybiAoLTEpOworCX0KKwlzd2l0Y2ggKGxldmVsKSB7CisJY2FzZSBTT0xfU09DS0VU
OgorCQlzd2l0Y2ggKG9wdGlvbl9uYW1lKSB7CisJCWNhc2UgU09fUkNWQlVGOgorCQkJaWYgKCpv
cHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5vID0gRUlOVkFM
OworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9zaXplOworCisJ
CQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCSpidWZfc2l6ZSA9IHNvLT5z
b19yY3Yuc2JfaGl3YXQ7OworCQkJCSpvcHRpb25fbGVuID0gKHNvY2tsZW5fdClzaXplb2YoaW50
KTsKKwkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU09fU05EQlVGOgor
CQkJaWYgKCpvcHRpb25fbGVuIDwgKHNvY2tsZW5fdClzaXplb2YoaW50KSkgeworCQkJCWVycm5v
ID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNlIHsKKwkJCQlpbnQgKmJ1Zl9z
aXplOworCisJCQkJYnVmX3NpemUgPSAoaW50ICopb3B0aW9uX3ZhbHVlOworCQkJCSpidWZfc2l6
ZSA9IHNvLT5zb19zbmQuc2JfaGl3YXQ7CisJCQkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KXNp
emVvZihpbnQpOworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBTT19M
SU5HRVI6CisJCQlpZiAoKm9wdGlvbl9sZW4gPCAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3QgbGlu
Z2VyKSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJCXJldHVybiAoLTEpOworCQkJfSBlbHNl
IHsKKwkJCQlzdHJ1Y3QgbGluZ2VyICpsOworCisJCQkJbCA9IChzdHJ1Y3QgbGluZ2VyICopb3B0
aW9uX3ZhbHVlOworCQkJCWwtPmxfbGluZ2VyID0gc28tPnNvX2xpbmdlcjsKKwkJCQlpZiAoc28t
PnNvX29wdGlvbnMgJiBTQ1RQX1NPX0xJTkdFUikgeworCQkJCQlsLT5sX29ub2ZmID0gMTsKKwkJ
CQl9IGVsc2UgeworCQkJCQlsLT5sX29ub2ZmID0gMDsKKwkJCQl9CisJCQkJKm9wdGlvbl9sZW4g
PSAoc29ja2xlbl90KXNpemVvZihzdHJ1Y3QgbGluZ2VyKTsKKwkJCQlyZXR1cm4gKDApOworCQkJ
fQorCQlkZWZhdWx0OgorCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQor
CWNhc2UgSVBQUk9UT19TQ1RQOgorCXsKKwkJc2l6ZV90IGxlbjsKKworCQlsZW4gPSAoc2l6ZV90
KSpvcHRpb25fbGVuOworCQllcnJubyA9IHNjdHBfZ2V0b3B0KHNvLCBvcHRpb25fbmFtZSwgb3B0
aW9uX3ZhbHVlLCAmbGVuLCBOVUxMKTsKKwkJKm9wdGlvbl9sZW4gPSAoc29ja2xlbl90KWxlbjsK
KwkJaWYgKGVycm5vKSB7CisJCQlyZXR1cm4gKC0xKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAo
MCk7CisJCX0KKwl9CisJZGVmYXVsdDoKKwkJZXJybm8gPSBFTk9QUk9UT09QVDsKKwkJcmV0dXJu
ICgtMSk7CisJfQorfQorCitpbnQKK3VzZXJzcGFjZV9nZXRzb2Nrb3B0KHN0cnVjdCBzb2NrZXQg
KnNvLCBpbnQgbGV2ZWwsIGludCBvcHRpb25fbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHZv
aWQgKm9wdGlvbl92YWx1ZSwgc29ja2xlbl90ICpvcHRpb25fbGVuKQoreworCXJldHVybiAodXNy
c2N0cF9nZXRzb2Nrb3B0KHNvLCBsZXZlbCwgb3B0aW9uX25hbWUsIG9wdGlvbl92YWx1ZSwgb3B0
aW9uX2xlbikpOworfQorCitpbnQKK3VzcnNjdHBfb3B0X2luZm8oc3RydWN0IHNvY2tldCAqc28s
IHNjdHBfYXNzb2NfdCBpZCwgaW50IG9wdCwgdm9pZCAqYXJnLCBzb2NrbGVuX3QgKnNpemUpCit7
CisJaWYgKGFyZyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsK
Kwl9CisJaWYgKChpZCA9PSBTQ1RQX0NVUlJFTlRfQVNTT0MpIHx8CisJICAgIChpZCA9PSBTQ1RQ
X0FMTF9BU1NPQykpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoLTEpOworCX0KKwlz
d2l0Y2ggKG9wdCkgeworCWNhc2UgU0NUUF9SVE9JTkZPOgorCQkoKHN0cnVjdCBzY3RwX3J0b2lu
Zm8gKilhcmcpLT5zcnRvX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9BU1NP
Q0lORk86CisJCSgoc3RydWN0IHNjdHBfYXNzb2NwYXJhbXMgKilhcmcpLT5zYXNvY19hc3NvY19p
ZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfREVGQVVMVF9TRU5EX1BBUkFNOgorCQkoKHN0
cnVjdCBzY3RwX2Fzc29jcGFyYW1zICopYXJnKS0+c2Fzb2NfYXNzb2NfaWQgPSBpZDsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX1BSSU1BUllfQUREUjoKKwkJKChzdHJ1Y3Qgc2N0cF9zZXRwcmltICop
YXJnKS0+c3NwX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9QRUVSX0FERFJf
UEFSQU1TOgorCQkoKHN0cnVjdCBzY3RwX3BhZGRycGFyYW1zICopYXJnKS0+c3BwX2Fzc29jX2lk
ID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9NQVhTRUc6CisJCSgoc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfQVVU
SF9LRVk6CisJCSgoc3RydWN0IHNjdHBfYXV0aGtleSAqKWFyZyktPnNjYV9hc3NvY19pZCA9IGlk
OworCQlicmVhazsKKwljYXNlIFNDVFBfQVVUSF9BQ1RJVkVfS0VZOgorCQkoKHN0cnVjdCBzY3Rw
X2F1dGhrZXlpZCAqKWFyZyktPnNjYWN0X2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2Ug
U0NUUF9ERUxBWUVEX1NBQ0s6CisJCSgoc3RydWN0IHNjdHBfc2Fja19pbmZvICopYXJnKS0+c2Fj
a19hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfQ09OVEVYVDoKKwkJKChzdHJ1
Y3Qgc2N0cF9hc3NvY192YWx1ZSAqKWFyZyktPmFzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNh
c2UgU0NUUF9TVEFUVVM6CisJCSgoc3RydWN0IHNjdHBfc3RhdHVzICopYXJnKS0+c3N0YXRfYXNz
b2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0dFVF9QRUVSX0FERFJfSU5GTzoKKwkJ
KChzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gKilhcmcpLT5zcGluZm9fYXNzb2NfaWQgPSBpZDsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX1BFRVJfQVVUSF9DSFVOS1M6CisJCSgoc3RydWN0IHNjdHBfYXV0
aGNodW5rcyAqKWFyZyktPmdhdXRoX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NU
UF9MT0NBTF9BVVRIX0NIVU5LUzoKKwkJKChzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzICopYXJnKS0+
Z2F1dGhfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX1RJTUVPVVRTOgorCQko
KHN0cnVjdCBzY3RwX3RpbWVvdXRzICopYXJnKS0+c3RpbW9fYXNzb2NfaWQgPSBpZDsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX0VWRU5UOgorCQkoKHN0cnVjdCBzY3RwX2V2ZW50ICopYXJnKS0+c2Vf
YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0RFRkFVTFRfU05ESU5GTzoKKwkJ
KChzdHJ1Y3Qgc2N0cF9zbmRpbmZvICopYXJnKS0+c25kX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFr
OworCWNhc2UgU0NUUF9ERUZBVUxUX1BSSU5GTzoKKwkJKChzdHJ1Y3Qgc2N0cF9kZWZhdWx0X3By
aW5mbyAqKWFyZyktPnByX2Fzc29jX2lkID0gaWQ7CisJCWJyZWFrOworCWNhc2UgU0NUUF9QRUVS
X0FERFJfVEhMRFM6CisJCSgoc3RydWN0IHNjdHBfcGFkZHJ0aGxkcyAqKWFyZyktPnNwdF9hc3Nv
Y19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVNT1RFX1VEUF9FTkNBUFNfUE9SVDoK
KwkJKChzdHJ1Y3Qgc2N0cF91ZHBlbmNhcHMgKilhcmcpLT5zdWVfYXNzb2NfaWQgPSBpZDsKKwkJ
YnJlYWs7CisJY2FzZSBTQ1RQX0VDTl9TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU1VQ
UE9SVEVEOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBp
ZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQX0FVVEhfU1VQUE9SVEVEOgorCQkoKHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0FTQ09ORl9TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5h
c3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUkVDT05GSUdfU1VQUE9SVEVEOgor
CQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJl
YWs7CisJY2FzZSBTQ1RQX05SU0FDS19TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2Nf
dmFsdWUgKilhcmcpLT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUEtURFJP
UF9TVVBQT1JURUQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcpLT5hc3NvY19p
ZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfTUFYX0JVUlNUOgorCQkoKHN0cnVjdCBzY3Rw
X2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBTQ1RQ
X0VOQUJMRV9TVFJFQU1fUkVTRVQ6CisJCSgoc3RydWN0IHNjdHBfYXNzb2NfdmFsdWUgKilhcmcp
LT5hc3NvY19pZCA9IGlkOworCQlicmVhazsKKwljYXNlIFNDVFBfUFJfU1RSRUFNX1NUQVRVUzoK
KwkJKChzdHJ1Y3Qgc2N0cF9wcnN0YXR1cyAqKWFyZyktPnNwcnN0YXRfYXNzb2NfaWQgPSBpZDsK
KwkJYnJlYWs7CisJY2FzZSBTQ1RQX1BSX0FTU09DX1NUQVRVUzoKKwkJKChzdHJ1Y3Qgc2N0cF9w
cnN0YXR1cyAqKWFyZyktPnNwcnN0YXRfYXNzb2NfaWQgPSBpZDsKKwkJYnJlYWs7CisJY2FzZSBT
Q1RQX01BWF9DV05EOgorCQkoKHN0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlICopYXJnKS0+YXNzb2Nf
aWQgPSBpZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCXJldHVybiAodXNy
c2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIG9wdCwgYXJnLCBzaXplKSk7Cit9CisK
K2ludAordXNyc2N0cF9zZXRfdWxwaW5mbyhzdHJ1Y3Qgc29ja2V0ICpzbywgdm9pZCAqdWxwX2lu
Zm8pCit7CisJcmV0dXJuIChyZWdpc3Rlcl91bHBfaW5mbyhzbywgdWxwX2luZm8pKTsKK30KKwor
aW50Cit1c3JzY3RwX2JpbmR4KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFk
ZHJzLCBpbnQgYWRkcmNudCwgaW50IGZsYWdzKQoreworCXN0cnVjdCBzY3RwX2dldGFkZHJlc3Nl
cyAqZ2FkZHJzOworCXN0cnVjdCBzb2NrYWRkciAqc2E7CisjaWZkZWYgSU5FVAorCXN0cnVjdCBz
b2NrYWRkcl9pbiAqc2luOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwlzdHJ1Y3Qgc29ja2FkZHJf
aW42ICpzaW42OworI2VuZGlmCisJaW50IGk7CisJc2l6ZV90IGFyZ3N6OworI2lmIGRlZmluZWQo
SU5FVCkgfHwgZGVmaW5lZChJTkVUNikKKwl1aW50MTZfdCBzcG9ydCA9IDA7CisjZW5kaWYKKwor
CS8qIHZhbGlkYXRlIHRoZSBmbGFncyAqLworCWlmICgoZmxhZ3MgIT0gU0NUUF9CSU5EWF9BRERf
QUREUikgJiYKKwkgICAgKGZsYWdzICE9IFNDVFBfQklORFhfUkVNX0FERFIpKSB7CisJCWVycm5v
ID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogdmFsaWRhdGUgdGhlIGFkZHJlc3Mg
Y291bnQgYW5kIGxpc3QgKi8KKwlpZiAoKGFkZHJjbnQgPD0gMCkgfHwgKGFkZHJzID09IE5VTEwp
KSB7CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKC0xKTsKKwl9CisJLyogRmlyc3QgcHJl
LXNjcmVlbiB0aGUgYWRkcmVzc2VzICovCisJc2EgPSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwg
YWRkcmNudDsgaSsrKSB7CisJCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworI2lmZGVmIElORVQK
KwkJY2FzZSBBRl9JTkVUOgorI2lmZGVmIEhBVkVfU0FfTEVOCisJCQlpZiAoc2EtPnNhX2xlbiAh
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkgeworCQkJCWVycm5vID0gRUlOVkFMOworCQkJ
CXJldHVybiAoLTEpOworCQkJfQorI2VuZGlmCisJCQlzaW4gPSAoc3RydWN0IHNvY2thZGRyX2lu
ICopc2E7CisJCQlpZiAoc2luLT5zaW5fcG9ydCkgeworCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNo
ZWNrIG9yIHNhdmUgKi8KKwkJCQlpZiAoc3BvcnQpIHsKKwkJCQkJLyogQ2hlY2sgYWdhaW5zdCBv
dXIgcG9ydCAqLworCQkJCQlpZiAoc3BvcnQgIT0gc2luLT5zaW5fcG9ydCkgeworCQkJCQkJZXJy
bm8gPSBFSU5WQUw7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJfQorCQkJCX0gZWxzZSB7CisJ
CQkJCS8qIHNhdmUgb2ZmIHRoZSBwb3J0ICovCisJCQkJCXNwb3J0ID0gc2luLT5zaW5fcG9ydDsK
KwkJCQl9CisJCQl9CisjaWZuZGVmIEhBVkVfU0FfTEVOCisJCQlzYSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisjZW5kaWYK
KwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZmRl
ZiBIQVZFX1NBX0xFTgorCQkJaWYgKHNhLT5zYV9sZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9Cisj
ZW5kaWYKKwkJCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOworCQkJaWYgKHNpbjYt
PnNpbjZfcG9ydCkgeworCQkJCS8qIG5vbi16ZXJvIHBvcnQsIGNoZWNrIG9yIHNhdmUgKi8KKwkJ
CQlpZiAoc3BvcnQpIHsKKwkJCQkJLyogQ2hlY2sgYWdhaW5zdCBvdXIgcG9ydCAqLworCQkJCQlp
ZiAoc3BvcnQgIT0gc2luNi0+c2luNl9wb3J0KSB7CisJCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJ
CQkJCXJldHVybiAoLTEpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyogc2F2ZSBvZmYg
dGhlIHBvcnQgKi8KKwkJCQkJc3BvcnQgPSBzaW42LT5zaW42X3BvcnQ7CisJCQkJfQorCQkJfQor
I2lmbmRlZiBIQVZFX1NBX0xFTgorCQkJc2EgPSAoc3RydWN0IHNvY2thZGRyICopKChjYWRkcl90
KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyNlbmRpZgorCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJZGVmYXVsdDoKKwkJCS8qIEludmFsaWQgYWRkcmVzcyBmYW1pbHkgc3BlY2lmaWVk
LiAqLworCQkJZXJybm8gPSBFQUZOT1NVUFBPUlQ7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorI2lm
ZGVmIEhBVkVfU0FfTEVOCisJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSAr
IHNhLT5zYV9sZW4pOworI2VuZGlmCisJfQorCWFyZ3N6ID0gc2l6ZW9mKHN0cnVjdCBzY3RwX2dl
dGFkZHJlc3NlcykgKworCSAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlKTsK
KwlpZiAoKGdhZGRycyA9IChzdHJ1Y3Qgc2N0cF9nZXRhZGRyZXNzZXMgKiltYWxsb2MoYXJnc3op
KSA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc2Eg
PSBhZGRyczsKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmNudDsgaSsrKSB7CisjaWZuZGVmIEhBVkVf
U0FfTEVOCisJCXNpemVfdCBzYV9sZW47CisjZW5kaWYKKwkJbWVtc2V0KGdhZGRycywgMCwgYXJn
c3opOworCQlnYWRkcnMtPnNnZXRfYXNzb2NfaWQgPSAwOworI2lmZGVmIEhBVkVfU0FfTEVOCisJ
CW1lbWNweShnYWRkcnMtPmFkZHIsIHNhLCBzYS0+c2FfbGVuKTsKKyNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCisJCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKKwkJ
CXN3aXRjaCAoZ2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNl
IEFGX0lORVQ6CisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsK
KwkJCQlzaW4tPnNpbl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYg
KilnYWRkcnMtPmFkZHI7CisJCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7
CisjZW5kaWYKKwkJCX0KKwkJfQorI2VuZGlmCisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28s
IElQUFJPVE9fU0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgewor
CQkJZnJlZShnYWRkcnMpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNv
Y2thZGRyICopKChjYWRkcl90KXNhICsgc2EtPnNhX2xlbik7CisjZWxzZQorCQlzd2l0Y2ggKHNh
LT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCWNhc2UgQUZfSU5FVDoKKwkJCXNhX2xlbiA9
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJ
TkVUNgorCQljYXNlIEFGX0lORVQ2OgorCQkJc2FfbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9pbjYpOworCQkJYnJlYWs7CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCXNhX2xlbiA9IDA7CisJ
CQlicmVhazsKKwkJfQorCQltZW1jcHkoZ2FkZHJzLT5hZGRyLCBzYSwgc2FfbGVuKTsKKwkJLyoK
KwkJICogTm93LCBpZiB0aGVyZSB3YXMgYSBwb3J0IG1lbnRpb25lZCwgYXNzdXJlIHRoYXQgdGhl
CisJCSAqIGZpcnN0IGFkZHJlc3MgaGFzIHRoYXQgcG9ydCB0byBtYWtlIHN1cmUgaXQgZmFpbHMg
b3IKKwkJICogc3VjY2VlZHMgY29ycmVjdGx5LgorCQkgKi8KKyNpZiBkZWZpbmVkKElORVQpIHx8
IGRlZmluZWQoSU5FVDYpCisJCWlmICgoaSA9PSAwKSAmJiAoc3BvcnQgIT0gMCkpIHsKKwkJCXN3
aXRjaCAoZ2FkZHJzLT5hZGRyLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJCQljYXNlIEFG
X0lORVQ6CisJCQkJc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWdhZGRycy0+YWRkcjsKKwkJ
CQlzaW4tPnNpbl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7CisjZW5kaWYKKyNpZmRlZiBJTkVU
NgorCQkJY2FzZSBBRl9JTkVUNjoKKwkJCQlzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiln
YWRkcnMtPmFkZHI7CisJCQkJc2luNi0+c2luNl9wb3J0ID0gc3BvcnQ7CisJCQkJYnJlYWs7Cisj
ZW5kaWYKKwkJCX0KKwkJfQorI2VuZGlmCisJCWlmICh1c3JzY3RwX3NldHNvY2tvcHQoc28sIElQ
UFJPVE9fU0NUUCwgZmxhZ3MsIGdhZGRycywgKHNvY2tsZW5fdClhcmdzeikgIT0gMCkgeworCQkJ
ZnJlZShnYWRkcnMpOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJc2EgPSAoc3RydWN0IHNvY2th
ZGRyICopKChjYWRkcl90KXNhICsgc2FfbGVuKTsKKyNlbmRpZgorCX0KKwlmcmVlKGdhZGRycyk7
CisJcmV0dXJuICgwKTsKK30KKworaW50Cit1c3JzY3RwX2Nvbm5lY3R4KHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHJzLCBpbnQg
YWRkcmNudCwKKyAgICAgICAgICAgICAgICAgc2N0cF9hc3NvY190ICppZCkKK3sKKyNpZiBkZWZp
bmVkKElORVQpIHx8IGRlZmluZWQoSU5FVDYpCisJY2hhciBidWZbU0NUUF9TVEFDS19CVUZfU0la
RV07CisJaW50IGksIHJldCwgY250LCAqYWE7CisJY2hhciAqY3B0bzsKKwljb25zdCBzdHJ1Y3Qg
c29ja2FkZHIgKmF0OworCXNjdHBfYXNzb2NfdCAqcF9pZDsKKwlzaXplX3QgbGVuID0gc2l6ZW9m
KGludCk7CisKKwkvKiB2YWxpZGF0ZSB0aGUgYWRkcmVzcyBjb3VudCBhbmQgbGlzdCAqLworCWlm
ICgoYWRkcnMgPT0gTlVMTCkgfHwgKGFkZHJjbnQgPD0gMCkpIHsKKwkJZXJybm8gPSBFSU5WQUw7
CisJCXJldHVybiAoLTEpOworCX0KKwlhdCA9IGFkZHJzOworCWNudCA9IDA7CisJY3B0byA9ICgo
Y2FkZHJfdClidWYgKyBzaXplb2YoaW50KSk7CisJLyogdmFsaWRhdGUgYWxsIHRoZSBhZGRyZXNz
ZXMgYW5kIGdldCB0aGUgc2l6ZSAqLworCWZvciAoaSA9IDA7IGkgPCBhZGRyY250OyBpKyspIHsK
KwkJc3dpdGNoIChhdC0+c2FfZmFtaWx5KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6
CisjaWZkZWYgSEFWRV9TQV9MRU4KKwkJCWlmIChhdC0+c2FfbGVuICE9IHNpemVvZihzdHJ1Y3Qg
c29ja2FkZHJfaW4pKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7CisJCQkJcmV0dXJuICgtMSk7CisJ
CQl9CisjZW5kaWYKKwkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCWlm
IChsZW4gPiBTQ1RQX1NUQUNLX0JVRl9TSVpFKSB7CisJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJ
cmV0dXJuICgtMSk7CisJCQl9CisJCQltZW1jcHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfaW4pKTsKKwkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClhdCArIHNp
emVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYgSU5F
VDYKKwkJY2FzZSBBRl9JTkVUNjoKKyNpZmRlZiBIQVZFX1NBX0xFTgorCQkJaWYgKGF0LT5zYV9s
ZW4gIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisJCQkJZXJybm8gPSBFSU5WQUw7
CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisjZW5kaWYKKyNpZmRlZiBJTkVUCisJCQlpZiAoSU42
X0lTX0FERFJfVjRNQVBQRUQoJigoc3RydWN0IHNvY2thZGRyX2luNiAqKWF0KS0+c2luNl9hZGRy
KSkgeworCQkJCWxlbiArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKwkJCQlpZiAobGVu
ID4gU0NUUF9TVEFDS19CVUZfU0laRSkgeworCQkJCQllcnJubyA9IEVOT01FTTsKKwkJCQkJcmV0
dXJuICgtMSk7CisJCQkJfQorCQkJCWluNl9zaW42XzJfc2luKChzdHJ1Y3Qgc29ja2FkZHJfaW4g
KiljcHRvLCAoc3RydWN0IHNvY2thZGRyX2luNiAqKWF0KTsKKwkJCQljcHRvID0gKChjYWRkcl90
KWNwdG8gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQl9IGVsc2UgeworCQkJCWxl
biArPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJCQkJaWYgKGxlbiA+IFNDVFBfU1RB
Q0tfQlVGX1NJWkUpIHsKKwkJCQkJZXJybm8gPSBFTk9NRU07CisJCQkJCXJldHVybiAoLTEpOwor
CQkJCX0KKwkJCQltZW1jcHkoY3B0bywgYXQsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7
CisJCQkJY3B0byA9ICgoY2FkZHJfdCljcHRvICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYp
KTsKKwkJCX0KKyNlbHNlCisJCQlsZW4gKz0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwor
CQkJaWYgKGxlbiA+IFNDVFBfU1RBQ0tfQlVGX1NJWkUpIHsKKwkJCQllcnJubyA9IEVOT01FTTsK
KwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCW1lbWNweShjcHRvLCBhdCwgc2l6ZW9mKHN0cnVj
dCBzb2NrYWRkcl9pbjYpKTsKKwkJCWNwdG8gPSAoKGNhZGRyX3QpY3B0byArIHNpemVvZihzdHJ1
Y3Qgc29ja2FkZHJfaW42KSk7CisjZW5kaWYKKwkJCWF0ID0gKHN0cnVjdCBzb2NrYWRkciAqKSgo
Y2FkZHJfdClhdCArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNl
bmRpZgorCQlkZWZhdWx0OgorCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKC0xKTsKKwkJ
fQorCQljbnQrKzsKKwl9CisJYWEgPSAoaW50ICopYnVmOworCSphYSA9IGNudDsKKwlyZXQgPSB1
c3JzY3RwX3NldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9DT05ORUNUX1gsICh2b2lk
ICopYnVmLCAoc29ja2xlbl90KWxlbik7CisJaWYgKChyZXQgPT0gMCkgJiYgaWQpIHsKKwkJcF9p
ZCA9IChzY3RwX2Fzc29jX3QgKilidWY7CisJCSppZCA9ICpwX2lkOworCX0KKwlyZXR1cm4gKHJl
dCk7CisjZWxzZQorCWVycm5vID0gRUlOVkFMOworCXJldHVybiAoLTEpOworI2VuZGlmCit9CisK
K2ludAordXNyc2N0cF9nZXRwYWRkcnMoc3RydWN0IHNvY2tldCAqc28sIHNjdHBfYXNzb2NfdCBp
ZCwgc3RydWN0IHNvY2thZGRyICoqcmFkZHJzKQoreworCXN0cnVjdCBzY3RwX2dldGFkZHJlc3Nl
cyAqYWRkcnM7CisJc3RydWN0IHNvY2thZGRyICpzYTsKKwlzY3RwX2Fzc29jX3QgYXNvYzsKKwlj
YWRkcl90IGxpbTsKKwlzb2NrbGVuX3Qgb3B0X2xlbjsKKwlpbnQgY250OworCisJaWYgKHJhZGRy
cyA9PSBOVUxMKSB7CisJCWVycm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJYXNv
YyA9IGlkOworCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihzY3RwX2Fzc29jX3QpOworCWlm
ICh1c3JzY3RwX2dldHNvY2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9HRVRfUkVNT1RFX0FE
RFJfU0laRSwgJmFzb2MsICZvcHRfbGVuKSAhPSAwKSB7CisJCXJldHVybiAoLTEpOworCX0KKwkv
KiBzaXplIHJlcXVpcmVkIGlzIHJldHVybmVkIGluICdhc29jJyAqLworCW9wdF9sZW4gPSAoc29j
a2xlbl90KSgoc2l6ZV90KWFzb2MgKyBzaXplb2Yoc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzKSk7
CisJYWRkcnMgPSBjYWxsb2MoMSwgKHNpemVfdClvcHRfbGVuKTsKKwlpZiAoYWRkcnMgPT0gTlVM
TCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCWFkZHJzLT5zZ2V0
X2Fzc29jX2lkID0gaWQ7CisJLyogTm93IGxldHMgZ2V0IHRoZSBhcnJheSBvZiBhZGRyZXNzZXMg
Ki8KKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RPX1NDVFAsIFNDVFBfR0VUX1BF
RVJfQUREUkVTU0VTLCBhZGRycywgJm9wdF9sZW4pICE9IDApIHsKKwkJZnJlZShhZGRycyk7CisJ
CXJldHVybiAoLTEpOworCX0KKwkqcmFkZHJzID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRycy0+
YWRkclswXTsKKwljbnQgPSAwOworCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRycy0+YWRk
clswXTsKKwlsaW0gPSAoY2FkZHJfdClhZGRycyArIG9wdF9sZW47CisjaWZkZWYgSEFWRV9TQV9M
RU4KKwl3aGlsZSAoKChjYWRkcl90KXNhIDwgbGltKSAmJiAoc2EtPnNhX2xlbiA+IDApKSB7CisJ
CXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSArIHNhLT5zYV9sZW4pOworI2Vs
c2UKKwl3aGlsZSAoKGNhZGRyX3Qpc2EgPCBsaW0pIHsKKwkJc3dpdGNoIChzYS0+c2FfZmFtaWx5
KSB7CisjaWZkZWYgSU5FVAorCQljYXNlIEFGX0lORVQ6CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2Fk
ZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CisJCQlicmVh
azsKKyNlbmRpZgorI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCQlzYSA9IChzdHJ1
Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qpc2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikp
OworCQkJYnJlYWs7CisjZW5kaWYKKwkJY2FzZSBBRl9DT05OOgorCQkJc2EgPSAoc3RydWN0IHNv
Y2thZGRyICopKChjYWRkcl90KXNhICsgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKSk7CisJ
CQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAoY250KTsKKwkJCWJyZWFrOworCQl9Cisj
ZW5kaWYKKwkJY250Kys7CisJfQorCXJldHVybiAoY250KTsKK30KKwordm9pZAordXNyc2N0cF9m
cmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAqYWRkcnMpCit7CisJLyogVGFrZSBhd2F5IHRoZSBo
aWRkZW4gYXNzb2NpYXRpb24gaWQgKi8KKwl2b2lkICpmcl9hZGRyOworCisJZnJfYWRkciA9ICh2
b2lkICopKChjYWRkcl90KWFkZHJzIC0gc2l6ZW9mKHNjdHBfYXNzb2NfdCkpOworCS8qIE5vdyBm
cmVlIGl0ICovCisJZnJlZShmcl9hZGRyKTsKK30KKworaW50Cit1c3JzY3RwX2dldGxhZGRycyhz
dHJ1Y3Qgc29ja2V0ICpzbywgc2N0cF9hc3NvY190IGlkLCBzdHJ1Y3Qgc29ja2FkZHIgKipyYWRk
cnMpCit7CisJc3RydWN0IHNjdHBfZ2V0YWRkcmVzc2VzICphZGRyczsKKwljYWRkcl90IGxpbTsK
KwlzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCXNpemVfdCBzaXplX29mX2FkZHJlc3NlczsKKwlzb2Nr
bGVuX3Qgb3B0X2xlbjsKKwlpbnQgY250OworCisJaWYgKHJhZGRycyA9PSBOVUxMKSB7CisJCWVy
cm5vID0gRUZBVUxUOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc2l6ZV9vZl9hZGRyZXNzZXMgPSAw
OworCW9wdF9sZW4gPSAoc29ja2xlbl90KXNpemVvZihpbnQpOworCWlmICh1c3JzY3RwX2dldHNv
Y2tvcHQoc28sIElQUFJPVE9fU0NUUCwgU0NUUF9HRVRfTE9DQUxfQUREUl9TSVpFLCAmc2l6ZV9v
Zl9hZGRyZXNzZXMsICZvcHRfbGVuKSAhPSAwKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1
cm4gKC0xKTsKKwl9CisJaWYgKHNpemVfb2ZfYWRkcmVzc2VzID09IDApIHsKKwkJZXJybm8gPSBF
Tk9UQ09OTjsKKwkJcmV0dXJuICgtMSk7CisJfQorCW9wdF9sZW4gPSAoc29ja2xlbl90KShzaXpl
X29mX2FkZHJlc3NlcyArCisJICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29j
a2FkZHJfc3RvcmFnZSkgKworCSAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNj
dHBfZ2V0YWRkcmVzc2VzKSk7CisJYWRkcnMgPSBjYWxsb2MoMSwgKHNpemVfdClvcHRfbGVuKTsK
KwlpZiAoYWRkcnMgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7
CisJfQorCWFkZHJzLT5zZ2V0X2Fzc29jX2lkID0gaWQ7CisJLyogTm93IGxldHMgZ2V0IHRoZSBh
cnJheSBvZiBhZGRyZXNzZXMgKi8KKwlpZiAodXNyc2N0cF9nZXRzb2Nrb3B0KHNvLCBJUFBST1RP
X1NDVFAsIFNDVFBfR0VUX0xPQ0FMX0FERFJFU1NFUywgYWRkcnMsICZvcHRfbGVuKSAhPSAwKSB7
CisJCWZyZWUoYWRkcnMpOworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQor
CSpyYWRkcnMgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHJzLT5hZGRyWzBdOworCWNudCA9IDA7
CisJc2EgPSAoc3RydWN0IHNvY2thZGRyICopJmFkZHJzLT5hZGRyWzBdOworCWxpbSA9IChjYWRk
cl90KWFkZHJzICsgb3B0X2xlbjsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXdoaWxlICgoKGNhZGRy
X3Qpc2EgPCBsaW0pICYmIChzYS0+c2FfbGVuID4gMCkpIHsKKwkJc2EgPSAoc3RydWN0IHNvY2th
ZGRyICopKChjYWRkcl90KXNhICsgc2EtPnNhX2xlbik7CisjZWxzZQorCXdoaWxlICgoY2FkZHJf
dClzYSA8IGxpbSkgeworCQlzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyNpZmRlZiBJTkVUCisJ
CWNhc2UgQUZfSU5FVDoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2FkZHJfdClzYSAr
IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwkJCWJyZWFrOworI2VuZGlmCisjaWZkZWYg
SU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXNhID0gKHN0cnVjdCBzb2NrYWRkciAqKSgoY2Fk
ZHJfdClzYSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJCQlicmVhazsKKyNlbmRp
ZgorCQljYXNlIEFGX0NPTk46CisJCQlzYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikoKGNhZGRyX3Qp
c2EgKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0
OgorCQkJcmV0dXJuIChjbnQpOworCQkJYnJlYWs7CisJCX0KKyNlbmRpZgorCQljbnQrKzsKKwl9
CisJcmV0dXJuIChjbnQpOworfQorCit2b2lkCit1c3JzY3RwX2ZyZWVsYWRkcnMoc3RydWN0IHNv
Y2thZGRyICphZGRycykKK3sKKwkvKiBUYWtlIGF3YXkgdGhlIGhpZGRlbiBhc3NvY2lhdGlvbiBp
ZCAqLworCXZvaWQgKmZyX2FkZHI7CisKKwlmcl9hZGRyID0gKHZvaWQgKikoKGNhZGRyX3QpYWRk
cnMgLSBzaXplb2Yoc2N0cF9hc3NvY190KSk7CisJLyogTm93IGZyZWUgaXQgKi8KKwlmcmVlKGZy
X2FkZHIpOworfQorCisjaWZkZWYgSU5FVAordm9pZAorc2N0cF91c2Vyc3BhY2VfaXBfb3V0cHV0
KGludCAqcmVzdWx0LCBzdHJ1Y3QgbWJ1ZiAqb19wYWssCisgICAgICAgICAgICAgICAgICAgICAg
ICAgc2N0cF9yb3V0ZV90ICpybywgdm9pZCAqc3RjYiwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICB1aW50MzJfdCB2cmZfaWQpCit7CisJc3RydWN0IG1idWYgKm07CisJc3RydWN0IG1idWYgKm1f
b3JpZzsKKwlpbnQgaW92Y250OworCWludCBzZW5kX2xlbjsKKwlpbnQgbGVuOworCWludCBzZW5k
X2NvdW50OworCXN0cnVjdCBpcCAqaXA7CisJc3RydWN0IHVkcGhkciAqdWRwOworI2lmICFkZWZp
bmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorCWludCByZXM7CisjZW5kaWYKKwlzdHJ1Y3Qg
c29ja2FkZHJfaW4gZHN0OworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJ
V1NBTVNHIHdpbl9tc2dfaGRyOworCURXT1JEIHdpbl9zZW50X2xlbjsKKwlXU0FCVUYgc2VuZF9p
b3ZlY1tNQVhMRU5fTUJVRl9DSEFJTl07CisJV1NBQlVGIHdpbmJ1ZjsKKyNlbHNlCisJc3RydWN0
IGlvdmVjIHNlbmRfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOworCXN0cnVjdCBtc2doZHIgbXNn
X2hkcjsKKyNlbmRpZgorCWludCB1c2VfdWRwX3R1bm5lbGluZzsKKworCSpyZXN1bHQgPSAwOwor
CisJbSA9IFNDVFBfSEVBREVSX1RPX0NIQUlOKG9fcGFrKTsKKwltX29yaWcgPSBtOworCisJbGVu
ID0gc2l6ZW9mKHN0cnVjdCBpcCk7CisJaWYgKFNDVFBfQlVGX0xFTihtKSA8IGxlbikgeworCQlp
ZiAoKG0gPSBtX3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7CisJCQlTQ1RQX1BSSU5URigiQ2FuIG5v
dCBnZXQgdGhlIElQIGhlYWRlciBpbiB0aGUgZmlyc3QgbWJ1Zi5cbiIpOworCQkJcmV0dXJuOwor
CQl9CisJfQorCWlwID0gbXRvZChtLCBzdHJ1Y3QgaXAgKik7CisJdXNlX3VkcF90dW5uZWxpbmcg
PSAoaXAtPmlwX3AgPT0gSVBQUk9UT19VRFApOworCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7
CisJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOworCQlp
ZiAoU0NUUF9CVUZfTEVOKG0pIDwgbGVuKSB7CisJCQlpZiAoKG0gPSBtX3B1bGx1cChtLCBsZW4p
KSA9PSAwKSB7CisJCQkJU0NUUF9QUklOVEYoIkNhbiBub3QgZ2V0IHRoZSBVRFAvSVAgaGVhZGVy
IGluIHRoZSBmaXJzdCBtYnVmLlxuIik7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaXAgPSBtdG9k
KG0sIHN0cnVjdCBpcCAqKTsKKwkJfQorCQl1ZHAgPSAoc3RydWN0IHVkcGhkciAqKShpcCArIDEp
OworCX0gZWxzZSB7CisJCXVkcCA9IE5VTEw7CisJfQorCisJaWYgKCF1c2VfdWRwX3R1bm5lbGlu
ZykgeworCQlpZiAoaXAtPmlwX3NyYy5zX2FkZHIgPT0gSU5BRERSX0FOWSkgeworCQkJLyogVE9E
TyBnZXQgYWRkciBvZiBvdXRnb2luZyBpbnRlcmZhY2UgKi8KKwkJCVNDVFBfUFJJTlRGKCJXaHkg
ZGlkIHRoZSBTQ1RQIGltcGxlbWVudGF0aW9uIGRpZCBub3QgY2hvb3NlIGEgc291cmNlIGFkZHJl
c3M/XG4iKTsKKwkJfQorCQkvKiBUT0RPIG5lZWQgdG8gd29ycnkgYWJvdXQgcm8tPnJvX2RzdCBh
cyBpbiBpcF9vdXRwdXQ/ICovCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19MaW51eCkgfHwg
ZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykgfHwgKGRlZmluZWQoX19Vc2Vyc3BhY2Vf
b3NfRnJlZUJTRCkgJiYgKF9fRnJlZUJTRF92ZXJzaW9uID49IDExMDAwMzApKQorCQkvKiBuZWVk
IHRvIHB1dCBjZXJ0YWluIGZpZWxkcyBpbnRvIG5ldHdvcmsgb3JkZXIgZm9yIExpbnV4ICovCisJ
CWlwLT5pcF9sZW4gPSBodG9ucyhpcC0+aXBfbGVuKTsKKyNlbmRpZgorCX0KKworCW1lbXNldCgo
dm9pZCAqKSZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwlkc3Quc2luX2Zh
bWlseSA9IEFGX0lORVQ7CisJZHN0LnNpbl9hZGRyLnNfYWRkciA9IGlwLT5pcF9kc3Quc19hZGRy
OworI2lmZGVmIEhBVkVfU0lOX0xFTgorCWRzdC5zaW5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2Nr
YWRkcl9pbik7CisjZW5kaWYKKwlpZiAodXNlX3VkcF90dW5uZWxpbmcpIHsKKwkJZHN0LnNpbl9w
b3J0ID0gdWRwLT51aF9kcG9ydDsKKwl9IGVsc2UgeworCQlkc3Quc2luX3BvcnQgPSAwOworCX0K
KworCS8qIHR3ZWFrIHRoZSBtYnVmIGNoYWluICovCisJaWYgKHVzZV91ZHBfdHVubmVsaW5nKSB7
CisJCW1fYWRqKG0sIHNpemVvZihzdHJ1Y3QgaXApICsgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsK
Kwl9CisKKwlzZW5kX2xlbiA9IFNDVFBfSEVBREVSX0xFTihtKTsgLyogbGVuZ3RoIG9mIGVudGly
ZSBwYWNrZXQgKi8KKwlzZW5kX2NvdW50ID0gMDsKKwlmb3IgKGlvdmNudCA9IDA7IG0gIT0gTlVM
TCAmJiBpb3ZjbnQgPCBNQVhMRU5fTUJVRl9DSEFJTjsgbSA9IG0tPm1fbmV4dCwgaW92Y250Kysp
IHsKKyNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwkJc2VuZF9pb3ZlY1tp
b3ZjbnRdLmlvdl9iYXNlID0gKGNhZGRyX3QpbS0+bV9kYXRhOworCQlzZW5kX2lvdmVjW2lvdmNu
dF0uaW92X2xlbiA9IFNDVFBfQlVGX0xFTihtKTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVj
W2lvdmNudF0uaW92X2xlbjsKKyNlbHNlCisJCXNlbmRfaW92ZWNbaW92Y250XS5idWYgPSAoY2Fk
ZHJfdCltLT5tX2RhdGE7CisJCXNlbmRfaW92ZWNbaW92Y250XS5sZW4gPSBTQ1RQX0JVRl9MRU4o
bSk7CisJCXNlbmRfY291bnQgKz0gc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbjsKKyNlbmRpZgorCX0K
KworCWlmIChtICE9IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIm1idWYgY2hhaW4gY291bGRuJ3Qg
YmUgY29waWVkIGNvbXBsZXRlbHlcbiIpOworCQlnb3RvIGZyZWVfbWJ1ZjsKKwl9CisKKyNpZiAh
ZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwltc2dfaGRyLm1zZ19uYW1lID0gKHN0
cnVjdCBzb2NrYWRkciAqKSAmZHN0OworCW1zZ19oZHIubXNnX25hbWVsZW4gPSBzaXplb2Yoc3Ry
dWN0IHNvY2thZGRyX2luKTsKKwltc2dfaGRyLm1zZ19pb3YgPSBzZW5kX2lvdmVjOworCW1zZ19o
ZHIubXNnX2lvdmxlbiA9IGlvdmNudDsKKwltc2dfaGRyLm1zZ19jb250cm9sID0gTlVMTDsKKwlt
c2dfaGRyLm1zZ19jb250cm9sbGVuID0gMDsKKwltc2dfaGRyLm1zZ19mbGFncyA9IDA7CisKKwlp
ZiAoKCF1c2VfdWRwX3R1bm5lbGluZykgJiYgKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3Jhd3Nj
dHApICE9IC0xKSkgeworCQlpZiAoKHJlcyA9IHNlbmRtc2coU0NUUF9CQVNFX1ZBUih1c2Vyc3Bh
Y2VfcmF3c2N0cCksICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgeworCQkJ
KnJlc3VsdCA9IGVycm5vOworCQl9CisJfQorCWlmICgodXNlX3VkcF90dW5uZWxpbmcpICYmIChT
Q1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwKSAhPSAtMSkpIHsKKwkJaWYgKChyZXMgPSBz
ZW5kbXNnKFNDVFBfQkFTRV9WQVIodXNlcnNwYWNlX3VkcHNjdHApLCAmbXNnX2hkciwgTVNHX0RP
TlRXQUlUKSkgIT0gc2VuZF9sZW4pIHsKKwkJCSpyZXN1bHQgPSBlcnJubzsKKwkJfQorCX0KKyNl
bHNlCisJd2luX21zZ19oZHIubmFtZSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmRzdDsKKwl3aW5f
bXNnX2hkci5uYW1lbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisJd2luX21zZ19o
ZHIubHBCdWZmZXJzID0gKExQV1NBQlVGKXNlbmRfaW92ZWM7CisJd2luX21zZ19oZHIuZHdCdWZm
ZXJDb3VudCA9IGlvdmNudDsKKwl3aW5idWYubGVuID0gMDsKKwl3aW5idWYuYnVmID0gTlVMTDsK
Kwl3aW5fbXNnX2hkci5Db250cm9sID0gd2luYnVmOworCXdpbl9tc2dfaGRyLmR3RmxhZ3MgPSAw
OworCisJaWYgKCghdXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFj
ZV9yYXdzY3RwKSAhPSAtMSkpIHsKKwkJaWYgKFdTQVNlbmRUbyhTQ1RQX0JBU0VfVkFSKHVzZXJz
cGFjZV9yYXdzY3RwKSwgKExQV1NBQlVGKSBzZW5kX2lvdmVjLCBpb3ZjbnQsICZ3aW5fc2VudF9s
ZW4sIHdpbl9tc2dfaGRyLmR3RmxhZ3MsIHdpbl9tc2dfaGRyLm5hbWUsIChpbnQpIHdpbl9tc2df
aGRyLm5hbWVsZW4sIE5VTEwsIE5VTEwpICE9IDApIHsKKwkJCSpyZXN1bHQgPSBXU0FHZXRMYXN0
RXJyb3IoKTsKKwkJfSBlbHNlIGlmICh3aW5fc2VudF9sZW4gIT0gc2VuZF9sZW4pIHsKKwkJCSpy
ZXN1bHQgPSBXU0FHZXRMYXN0RXJyb3IoKTsKKwkJfQorCX0KKwlpZiAoKHVzZV91ZHBfdHVubmVs
aW5nKSAmJiAoU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCkgIT0gLTEpKSB7CisJCWlm
IChXU0FTZW5kVG8oU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfdWRwc2N0cCksIChMUFdTQUJVRikg
c2VuZF9pb3ZlYywgaW92Y250LCAmd2luX3NlbnRfbGVuLCB3aW5fbXNnX2hkci5kd0ZsYWdzLCB3
aW5fbXNnX2hkci5uYW1lLCAoaW50KSB3aW5fbXNnX2hkci5uYW1lbGVuLCBOVUxMLCBOVUxMKSAh
PSAwKSB7CisJCQkqcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7CisJCX0gZWxzZSBpZiAod2lu
X3NlbnRfbGVuICE9IHNlbmRfbGVuKSB7CisJCQkqcmVzdWx0ID0gV1NBR2V0TGFzdEVycm9yKCk7
CisJCX0KKwl9CisjZW5kaWYKK2ZyZWVfbWJ1ZjoKKwlzY3RwX21fZnJlZW0obV9vcmlnKTsKK30K
KyNlbmRpZgorCisjaWYgZGVmaW5lZCAoSU5FVDYpCit2b2lkIHNjdHBfdXNlcnNwYWNlX2lwNl9v
dXRwdXQoaW50ICpyZXN1bHQsIHN0cnVjdCBtYnVmICpvX3BhaywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJvdXRlX2luNiAqcm8sIHZvaWQgKnN0
Y2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90
IHZyZl9pZCkKK3sKKwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3QgbWJ1ZiAqbV9vcmlnOworCWlu
dCBpb3ZjbnQ7CisJaW50IHNlbmRfbGVuOworCWludCBsZW47CisJaW50IHNlbmRfY291bnQ7CisJ
c3RydWN0IGlwNl9oZHIgKmlwNjsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHA7CisjaWYgIWRlZmluZWQg
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJaW50IHJlczsKKyNlbmRpZgorCXN0cnVjdCBzb2Nr
YWRkcl9pbjYgZHN0OworI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisJV1NB
TVNHIHdpbl9tc2dfaGRyOworCURXT1JEIHdpbl9zZW50X2xlbjsKKwlXU0FCVUYgc2VuZF9pb3Zl
Y1tNQVhMRU5fTUJVRl9DSEFJTl07CisJV1NBQlVGIHdpbmJ1ZjsKKyNlbHNlCisJc3RydWN0IGlv
dmVjIHNlbmRfaW92ZWNbTUFYTEVOX01CVUZfQ0hBSU5dOworCXN0cnVjdCBtc2doZHIgbXNnX2hk
cjsKKyNlbmRpZgorCWludCB1c2VfdWRwX3R1bm5lbGluZzsKKworCSpyZXN1bHQgPSAwOworCisJ
bSA9IFNDVFBfSEVBREVSX1RPX0NIQUlOKG9fcGFrKTsKKwltX29yaWcgPSBtOworCisJbGVuID0g
c2l6ZW9mKHN0cnVjdCBpcDZfaGRyKTsKKworCWlmIChTQ1RQX0JVRl9MRU4obSkgPCBsZW4pIHsK
KwkJaWYgKChtID0gbV9wdWxsdXAobSwgbGVuKSkgPT0gMCkgeworCQkJU0NUUF9QUklOVEYoIkNh
biBub3QgZ2V0IHRoZSBJUCBoZWFkZXIgaW4gdGhlIGZpcnN0IG1idWYuXG4iKTsKKwkJCXJldHVy
bjsKKwkJfQorCX0KKworCWlwNiA9IG10b2QobSwgc3RydWN0IGlwNl9oZHIgKik7CisJdXNlX3Vk
cF90dW5uZWxpbmcgPSAoaXA2LT5pcDZfbnh0ID09IElQUFJPVE9fVURQKTsKKworCWlmICh1c2Vf
dWRwX3R1bm5lbGluZykgeworCQlsZW4gPSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpICsgc2l6ZW9m
KHN0cnVjdCB1ZHBoZHIpOworCQlpZiAoU0NUUF9CVUZfTEVOKG0pIDwgbGVuKSB7CisJCQlpZiAo
KG0gPSBtX3B1bGx1cChtLCBsZW4pKSA9PSAwKSB7CisJCQkJU0NUUF9QUklOVEYoIkNhbiBub3Qg
Z2V0IHRoZSBVRFAvSVAgaGVhZGVyIGluIHRoZSBmaXJzdCBtYnVmLlxuIik7CisJCQkJcmV0dXJu
OworCQkJfQorCQkJaXA2ID0gbXRvZChtLCBzdHJ1Y3QgaXA2X2hkciAqKTsKKwkJfQorCQl1ZHAg
PSAoc3RydWN0IHVkcGhkciAqKShpcDYgKyAxKTsKKwl9IGVsc2UgeworCQl1ZHAgPSBOVUxMOwor
CX0KKworCWlmICghdXNlX3VkcF90dW5uZWxpbmcpIHsKKwkJaWYgKGlwNi0+aXA2X3NyYy5zNl9h
ZGRyID09IGluNmFkZHJfYW55LnM2X2FkZHIpIHsKKwkJCS8qIFRPRE8gZ2V0IGFkZHIgb2Ygb3V0
Z29pbmcgaW50ZXJmYWNlICovCisJCQlTQ1RQX1BSSU5URigiV2h5IGRpZCB0aGUgU0NUUCBpbXBs
ZW1lbnRhdGlvbiBkaWQgbm90IGNob29zZSBhIHNvdXJjZSBhZGRyZXNzP1xuIik7CisJCX0KKwkJ
LyogVE9ETyBuZWVkIHRvIHdvcnJ5IGFib3V0IHJvLT5yb19kc3QgYXMgaW4gaXBfb3V0cHV0PyAq
LworCX0KKworCW1lbXNldCgodm9pZCAqKSZkc3QsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJf
aW42KSk7CisJZHN0LnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisJZHN0LnNpbjZfYWRkciA9IGlw
Ni0+aXA2X2RzdDsKKyNpZmRlZiBIQVZFX1NJTjZfTEVOCisJZHN0LnNpbjZfbGVuID0gc2l6ZW9m
KHN0cnVjdCBzb2NrYWRkcl9pbjYpOworI2VuZGlmCisKKwlpZiAodXNlX3VkcF90dW5uZWxpbmcp
IHsKKwkJZHN0LnNpbjZfcG9ydCA9IHVkcC0+dWhfZHBvcnQ7CisJfSBlbHNlIHsKKwkJZHN0LnNp
bjZfcG9ydCA9IDA7CisJfQorCisJLyogdHdlYWsgdGhlIG1idWYgY2hhaW4gKi8KKwlpZiAodXNl
X3VkcF90dW5uZWxpbmcpIHsKKwkJbV9hZGoobSwgc2l6ZW9mKHN0cnVjdCBpcDZfaGRyKSArIHNp
emVvZihzdHJ1Y3QgdWRwaGRyKSk7CisJfSBlbHNlIHsKKwkgIG1fYWRqKG0sIHNpemVvZihzdHJ1
Y3QgaXA2X2hkcikpOworCX0KKworCXNlbmRfbGVuID0gU0NUUF9IRUFERVJfTEVOKG0pOyAvKiBs
ZW5ndGggb2YgZW50aXJlIHBhY2tldCAqLworCXNlbmRfY291bnQgPSAwOworCWZvciAoaW92Y250
ID0gMDsgbSAhPSBOVUxMICYmIGlvdmNudCA8IE1BWExFTl9NQlVGX0NIQUlOOyBtID0gbS0+bV9u
ZXh0LCBpb3ZjbnQrKykgeworI2lmICFkZWZpbmVkIChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQor
CQlzZW5kX2lvdmVjW2lvdmNudF0uaW92X2Jhc2UgPSAoY2FkZHJfdCltLT5tX2RhdGE7CisJCXNl
bmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuID0gU0NUUF9CVUZfTEVOKG0pOworCQlzZW5kX2NvdW50
ICs9IHNlbmRfaW92ZWNbaW92Y250XS5pb3ZfbGVuOworI2Vsc2UKKwkJc2VuZF9pb3ZlY1tpb3Zj
bnRdLmJ1ZiA9IChjYWRkcl90KW0tPm1fZGF0YTsKKwkJc2VuZF9pb3ZlY1tpb3ZjbnRdLmxlbiA9
IFNDVFBfQlVGX0xFTihtKTsKKwkJc2VuZF9jb3VudCArPSBzZW5kX2lvdmVjW2lvdmNudF0ubGVu
OworI2VuZGlmCisJfQorCWlmIChtICE9IE5VTEwpIHsKKwkJU0NUUF9QUklOVEYoIm1idWYgY2hh
aW4gY291bGRuJ3QgYmUgY29waWVkIGNvbXBsZXRlbHlcbiIpOworCQlnb3RvIGZyZWVfbWJ1ZjsK
Kwl9CisKKyNpZiAhZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKwltc2dfaGRyLm1z
Z19uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmZHN0OworCW1zZ19oZHIubXNnX25hbWVsZW4g
PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisJbXNnX2hkci5tc2dfaW92ID0gc2VuZF9p
b3ZlYzsKKwltc2dfaGRyLm1zZ19pb3ZsZW4gPSBpb3ZjbnQ7CisJbXNnX2hkci5tc2dfY29udHJv
bCA9IE5VTEw7CisJbXNnX2hkci5tc2dfY29udHJvbGxlbiA9IDA7CisJbXNnX2hkci5tc2dfZmxh
Z3MgPSAwOworCisJaWYgKCghdXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVz
ZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpKSB7CisJCWlmICgocmVzID0gc2VuZG1zZyhTQ1RQX0JB
U0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNiksICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBz
ZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IGVycm5vOworCQl9CisJfQorCWlmICgodXNlX3VkcF90
dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNikgIT0gLTEpKSB7
CisJCWlmICgocmVzID0gc2VuZG1zZyhTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBzY3RwNiks
ICZtc2dfaGRyLCBNU0dfRE9OVFdBSVQpKSAhPSBzZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IGVy
cm5vOworCQl9CisJfQorI2Vsc2UKKwl3aW5fbXNnX2hkci5uYW1lID0gKHN0cnVjdCBzb2NrYWRk
ciAqKSAmZHN0OworCXdpbl9tc2dfaGRyLm5hbWVsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy
X2luNik7CisJd2luX21zZ19oZHIubHBCdWZmZXJzID0gKExQV1NBQlVGKXNlbmRfaW92ZWM7CisJ
d2luX21zZ19oZHIuZHdCdWZmZXJDb3VudCA9IGlvdmNudDsKKwl3aW5idWYubGVuID0gMDsKKwl3
aW5idWYuYnVmID0gTlVMTDsKKwl3aW5fbXNnX2hkci5Db250cm9sID0gd2luYnVmOworCXdpbl9t
c2dfaGRyLmR3RmxhZ3MgPSAwOworCisJaWYgKCghdXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQ
X0JBU0VfVkFSKHVzZXJzcGFjZV9yYXdzY3RwNikgIT0gLTEpKSB7CisJCWlmIChXU0FTZW5kVG8o
U0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2VfcmF3c2N0cDYpLCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMs
IGlvdmNudCwgJndpbl9zZW50X2xlbiwgd2luX21zZ19oZHIuZHdGbGFncywgd2luX21zZ19oZHIu
bmFtZSwgKGludCkgd2luX21zZ19oZHIubmFtZWxlbiwgTlVMTCwgTlVMTCkgIT0gMCkgeworCQkJ
KnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworCQl9IGVsc2UgaWYgKHdpbl9zZW50X2xlbiAh
PSBzZW5kX2xlbikgeworCQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJvcigpOworCQl9CisJfQor
CWlmICgodXNlX3VkcF90dW5uZWxpbmcpICYmIChTQ1RQX0JBU0VfVkFSKHVzZXJzcGFjZV91ZHBz
Y3RwNikgIT0gLTEpKSB7CisJCWlmIChXU0FTZW5kVG8oU0NUUF9CQVNFX1ZBUih1c2Vyc3BhY2Vf
dWRwc2N0cDYpLCAoTFBXU0FCVUYpIHNlbmRfaW92ZWMsIGlvdmNudCwgJndpbl9zZW50X2xlbiwg
d2luX21zZ19oZHIuZHdGbGFncywgd2luX21zZ19oZHIubmFtZSwgKGludCkgd2luX21zZ19oZHIu
bmFtZWxlbiwgTlVMTCwgTlVMTCkgIT0gMCkgeworCQkJKnJlc3VsdCA9IFdTQUdldExhc3RFcnJv
cigpOworCQl9IGVsc2UgaWYgKHdpbl9zZW50X2xlbiAhPSBzZW5kX2xlbikgeworCQkJKnJlc3Vs
dCA9IFdTQUdldExhc3RFcnJvcigpOworCQl9CisJfQorI2VuZGlmCitmcmVlX21idWY6CisJc2N0
cF9tX2ZyZWVtKG1fb3JpZyk7Cit9CisjZW5kaWYKKwordm9pZAordXNyc2N0cF9yZWdpc3Rlcl9h
ZGRyZXNzKHZvaWQgKmFkZHIpCit7CisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisKKwlt
ZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5z
Y29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVmIEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nv
bm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNj
b25uX3BvcnQgPSAwOworCXNjb25uLnNjb25uX2FkZHIgPSBhZGRyOworCXNjdHBfYWRkX2FkZHJf
dG9fdnJmKFNDVFBfREVGQVVMVF9WUkZJRCwKKwkgICAgICAgICAgICAgICAgICAgICBOVUxMLAor
CSAgICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYsCisJICAgICAgICAgICAgICAgICAgICAg
MCwKKwkgICAgICAgICAgICAgICAgICAgICAiY29ubiIsCisJICAgICAgICAgICAgICAgICAgICAg
TlVMTCwKKwkgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyICopJnNjb25uLAor
CSAgICAgICAgICAgICAgICAgICAgIDAsCisJICAgICAgICAgICAgICAgICAgICAgMCk7Cit9CisK
K3ZvaWQKK3VzcnNjdHBfZGVyZWdpc3Rlcl9hZGRyZXNzKHZvaWQgKmFkZHIpCit7CisJc3RydWN0
IHNvY2thZGRyX2Nvbm4gc2Nvbm47CisKKwltZW1zZXQoJnNjb25uLCAwLCBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pKTsKKwlzY29ubi5zY29ubl9mYW1pbHkgPSBBRl9DT05OOworI2lmZGVm
IEhBVkVfU0NPTk5fTEVOCisJc2Nvbm4uc2Nvbm5fbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRk
cl9jb25uKTsKKyNlbmRpZgorCXNjb25uLnNjb25uX3BvcnQgPSAwOworCXNjb25uLnNjb25uX2Fk
ZHIgPSBhZGRyOworCXNjdHBfZGVsX2FkZHJfZnJvbV92cmYoU0NUUF9ERUZBVUxUX1ZSRklELAor
CSAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZzY29ubiwKKwkgICAg
ICAgICAgICAgICAgICAgICAgIDB4ZmZmZmZmZmYsCisJICAgICAgICAgICAgICAgICAgICAgICAi
Y29ubiIpOworfQorCisjZGVmaW5lIFBSRUFNQkxFX0ZPUk1BVCAiXG4lYyAlMDJkOiUwMmQ6JTAy
ZC4lMDZsZCAiCisjZGVmaW5lIFBSRUFNQkxFX0xFTkdUSCAxOQorI2RlZmluZSBIRUFERVIgIjAw
MDAgIgorI2RlZmluZSBUUkFJTEVSICIjIFNDVFBfUEFDS0VUXG4iCisKK2NoYXIgKgordXNyc2N0
cF9kdW1wcGFja2V0KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbiwgaW50IG91dGJvdW5kKQor
eworCXNpemVfdCBpLCBwb3M7CisJY2hhciAqZHVtcF9idWYsICpwYWNrZXQ7CisJc3RydWN0IHRt
IHQ7CisjaWZkZWYgX1dJTjMyCisJc3RydWN0IHRpbWViIHRiOworI2Vsc2UKKwlzdHJ1Y3QgdGlt
ZXZhbCB0djsKKwl0aW1lX3Qgc2VjOworI2VuZGlmCisKKwlpZiAoKGxlbiA9PSAwKSB8fCAoYnVm
ID09IE5VTEwpKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmICgoZHVtcF9idWYgPSBtYWxs
b2MoUFJFQU1CTEVfTEVOR1RIICsgc3RybGVuKEhFQURFUikgKyAzICogbGVuICsgc3RybGVuKFRS
QUlMRVIpICsgMSkpID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJcG9zID0gMDsK
KyNpZmRlZiBfV0lOMzIKKwlmdGltZSgmdGIpOworCWxvY2FsdGltZV9zKCZ0LCAmdGIudGltZSk7
CisJX3NucHJpbnRmX3MoZHVtcF9idWYsIFBSRUFNQkxFX0xFTkdUSCArIDEsIFBSRUFNQkxFX0xF
TkdUSCwgUFJFQU1CTEVfRk9STUFULAorCSAgICAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0kn
LAorCSAgICAgICAgICAgIHQudG1faG91ciwgdC50bV9taW4sIHQudG1fc2VjLCAobG9uZykoMTAw
MCAqIHRiLm1pbGxpdG0pKTsKKyNlbHNlCisJZ2V0dGltZW9mZGF5KCZ0diwgTlVMTCk7CisJc2Vj
ID0gKHRpbWVfdCl0di50dl9zZWM7CisJbG9jYWx0aW1lX3IoKGNvbnN0IHRpbWVfdCAqKSZzZWMs
ICZ0KTsKKwlzbnByaW50ZihkdW1wX2J1ZiwgUFJFQU1CTEVfTEVOR1RIICsgMSwgUFJFQU1CTEVf
Rk9STUFULAorCSAgICAgICAgIG91dGJvdW5kID8gJ08nIDogJ0knLAorCSAgICAgICAgIHQudG1f
aG91ciwgdC50bV9taW4sIHQudG1fc2VjLCAobG9uZyl0di50dl91c2VjKTsKKyNlbmRpZgorCXBv
cyArPSBQUkVBTUJMRV9MRU5HVEg7CisjaWZkZWYgX1dJTjMyCisJc3RybmNweV9zKGR1bXBfYnVm
ICsgcG9zLCBzdHJsZW4oSEVBREVSKSArIDEsIEhFQURFUiwgc3RybGVuKEhFQURFUikpOworI2Vs
c2UKKwlzdHJjcHkoZHVtcF9idWYgKyBwb3MsIEhFQURFUik7CisjZW5kaWYKKwlwb3MgKz0gc3Ry
bGVuKEhFQURFUik7CisJcGFja2V0ID0gKGNoYXIgKilidWY7CisJZm9yIChpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CisJCXVpbnQ4X3QgYnl0ZSwgbG93LCBoaWdoOworCisJCWJ5dGUgPSAodWludDhf
dClwYWNrZXRbaV07CisJCWhpZ2ggPSBieXRlIC8gMTY7CisJCWxvdyA9IGJ5dGUgJSAxNjsKKwkJ
ZHVtcF9idWZbcG9zKytdID0gaGlnaCA8IDEwID8gJzAnICsgaGlnaCA6ICdhJyArIChoaWdoIC0g
MTApOworCQlkdW1wX2J1Zltwb3MrK10gPSBsb3cgPCAxMCA/ICcwJyArIGxvdyA6ICdhJyArIChs
b3cgLSAxMCk7CisJCWR1bXBfYnVmW3BvcysrXSA9ICcgJzsKKwl9CisjaWZkZWYgX1dJTjMyCisJ
c3RybmNweV9zKGR1bXBfYnVmICsgcG9zLCBzdHJsZW4oVFJBSUxFUikgKyAxLCBUUkFJTEVSLCBz
dHJsZW4oVFJBSUxFUikpOworI2Vsc2UKKwlzdHJjcHkoZHVtcF9idWYgKyBwb3MsIFRSQUlMRVIp
OworI2VuZGlmCisJcG9zICs9IHN0cmxlbihUUkFJTEVSKTsKKwlkdW1wX2J1Zltwb3MrK10gPSAn
XDAnOworCXJldHVybiAoZHVtcF9idWYpOworfQorCit2b2lkCit1c3JzY3RwX2ZyZWVkdW1wYnVm
ZmVyKGNoYXIgKmJ1ZikKK3sKKwlmcmVlKGJ1Zik7Cit9CisKK3ZvaWQKK3VzcnNjdHBfZW5hYmxl
X2NyYzMyY19vZmZsb2FkKHZvaWQpCit7CisJU0NUUF9CQVNFX1ZBUihjcmMzMmNfb2ZmbG9hZGVk
KSA9IDE7Cit9CisKK3ZvaWQKK3VzcnNjdHBfZGlzYWJsZV9jcmMzMmNfb2ZmbG9hZCh2b2lkKQor
eworCVNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRlZCkgPSAwOworfQorCisvKiBDb21wdXRl
IHRoZSBDUkMzMkMgaW4gbmV0d29yayBieXRlIG9yZGVyICovCit1aW50MzJfdAordXNyc2N0cF9j
cmMzMmModm9pZCAqYnVmZmVyLCBzaXplX3QgbGVuZ3RoKQoreworCXVpbnQzMl90IGJhc2UgPSAw
eGZmZmZmZmZmOworCisJYmFzZSA9IGNhbGN1bGF0ZV9jcmMzMmMoMHhmZmZmZmZmZiwgKHVuc2ln
bmVkIGNoYXIgKilidWZmZXIsICh1bnNpZ25lZCBpbnQpIGxlbmd0aCk7CisJYmFzZSA9IHNjdHBf
ZmluYWxpemVfY3JjMzJjKGJhc2UpOworCXJldHVybiAoYmFzZSk7Cit9CisKK3ZvaWQKK3VzcnNj
dHBfY29ubmlucHV0KHZvaWQgKmFkZHIsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0
aCwgdWludDhfdCBlY25fYml0cykKK3sKKwlzdHJ1Y3Qgc29ja2FkZHJfY29ubiBzcmMsIGRzdDsK
KwlzdHJ1Y3QgbWJ1ZiAqbTsKKwlzdHJ1Y3Qgc2N0cGhkciAqc2g7CisJc3RydWN0IHNjdHBfY2h1
bmtoZHIgKmNoOworCisJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfcmVjdnBhY2tldHMpOworCVNDVFBf
U1RBVF9JTkNSX0NPVU5URVI2NChzY3Rwc19pbnBhY2tldHMpOworCW1lbXNldCgmc3JjLCAwLCBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlzcmMuc2Nvbm5fZmFtaWx5ID0gQUZfQ09O
TjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCXNyYy5zY29ubl9sZW4gPSBzaXplb2Yoc3RydWN0
IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJc3JjLnNjb25uX2FkZHIgPSBhZGRyOworCW1lbXNl
dCgmZHN0LCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pKTsKKwlkc3Quc2Nvbm5fZmFt
aWx5ID0gQUZfQ09OTjsKKyNpZmRlZiBIQVZFX1NDT05OX0xFTgorCWRzdC5zY29ubl9sZW4gPSBz
aXplb2Yoc3RydWN0IHNvY2thZGRyX2Nvbm4pOworI2VuZGlmCisJZHN0LnNjb25uX2FkZHIgPSBh
ZGRyOworCWlmICgobSA9IHNjdHBfZ2V0X21idWZfZm9yX21zZygodW5zaWduZWQgaW50KWxlbmd0
aCwgMSwgTV9OT1dBSVQsIDAsIE1UX0RBVEEpKSA9PSBOVUxMKSB7CisJCXJldHVybjsKKwl9CisJ
bV9jb3B5YmFjayhtLCAwLCAoaW50KWxlbmd0aCwgKGNhZGRyX3QpYnVmZmVyKTsKKwlpZiAoU0NU
UF9CVUZfTEVOKG0pIDwgKGludCkoc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSArIHNpemVvZihzdHJ1
Y3Qgc2N0cF9jaHVua2hkcikpKSB7CisJCWlmICgobSA9IG1fcHVsbHVwKG0sIHNpemVvZihzdHJ1
Y3Qgc2N0cGhkcikgKyBzaXplb2Yoc3RydWN0IHNjdHBfY2h1bmtoZHIpKSkgPT0gTlVMTCkgewor
CQkJU0NUUF9TVEFUX0lOQ1Ioc2N0cHNfaGRyb3BzKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKwlz
aCA9IG10b2QobSwgc3RydWN0IHNjdHBoZHIgKik7OworCWNoID0gKHN0cnVjdCBzY3RwX2NodW5r
aGRyICopKChjYWRkcl90KXNoICsgc2l6ZW9mKHN0cnVjdCBzY3RwaGRyKSk7CisJc3JjLnNjb25u
X3BvcnQgPSBzaC0+c3JjX3BvcnQ7CisJZHN0LnNjb25uX3BvcnQgPSBzaC0+ZGVzdF9wb3J0Owor
CXNjdHBfY29tbW9uX2lucHV0X3Byb2Nlc3NpbmcoJm0sIDAsIHNpemVvZihzdHJ1Y3Qgc2N0cGhk
ciksIChpbnQpbGVuZ3RoLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBz
b2NrYWRkciAqKSZzcmMsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNv
Y2thZGRyICopJmRzdCwKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoLCBjaCwKKwkg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfQkFTRV9WQVIoY3JjMzJjX29mZmxvYWRl
ZCkgPT0gMSA/IDAgOiAxLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNuX2JpdHMs
CisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX0RFRkFVTFRfVlJGSUQsIDApOwor
CWlmIChtKSB7CisJCXNjdHBfbV9mcmVlbShtKTsKKwl9CisJcmV0dXJuOworfQorCisjZGVmaW5l
IFVTUlNDVFBfVFVOQUJMRV9TRVRfREVGKF9fZmllbGQsIF9fcHJlZml4KSAgIFwKK2ludCB1c3Jz
Y3RwX3R1bmFibGVfc2V0XyAjIyBfX2ZpZWxkKHVpbnQzMl90IHZhbHVlKSAgXAoreyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgKCh2YWx1
ZSA8IF9fcHJlZml4IyNfTUlOKSB8fCAgICAgICAgICAgICAgXAorCSAgICAodmFsdWUgPiBfX3By
ZWZpeCMjX01BWCkpIHsgICAgICAgICAgICAgIFwKKwkJZXJybm8gPSBFSU5WQUw7ICAgICAgICAg
ICAgICAgICAgICAgIFwKKwkJcmV0dXJuICgtMSk7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK
Kwl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCVNDVFBf
QkFTRV9TWVNDVEwoX19maWVsZCkgPSB2YWx1ZTsgICBcCisJCXJldHVybiAoMCk7ICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorfQorCitVU1JTQ1RQX1RVTkFCTEVfU0VUX0RFRihzY3RwX2hhc2h0YmxzaXpl
LCBTQ1RQQ1RMX1RDQkhBU0hTSVpFKQorVVNSU0NUUF9UVU5BQkxFX1NFVF9ERUYoc2N0cF9wY2J0
YmxzaXplLCBTQ1RQQ1RMX1BDQkhBU0hTSVpFKQorVVNSU0NUUF9UVU5BQkxFX1NFVF9ERUYoc2N0
cF9jaHVua3NjYWxlLCBTQ1RQQ1RMX0NIVU5LU0NBTEUpCisKKyNkZWZpbmUgVVNSU0NUUF9TWVND
VExfU0VUX0RFRihfX2ZpZWxkLCBfX3ByZWZpeCkgICAgXAoraW50IHVzcnNjdHBfc3lzY3RsX3Nl
dF8gIyMgX19maWVsZCh1aW50MzJfdCB2YWx1ZSkgICBcCit7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlpZiAoKHZhbHVlIDwgX19wcmVmaXgj
I19NSU4pIHx8ICAgICAgICAgICAgICBcCisJICAgICh2YWx1ZSA+IF9fcHJlZml4IyNfTUFYKSkg
eyAgICAgICAgICAgICAgXAorCQllcnJubyA9IEVJTlZBTDsgICAgICAgICAgICAgICAgICAgICAg
XAorCQlyZXR1cm4gKC0xKTsgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gZWxzZSB7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJU0NUUF9CQVNFX1NZU0NUTChf
X2ZpZWxkKSA9IHZhbHVlOyAgIFwKKwkJcmV0dXJuICgwKTsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKwl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9
CisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQorI3ByYWdtYSBHQ0MgZGlh
Z25vc3RpYyBwdXNoCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdHlwZS1saW1p
dHMiCisjZW5kaWYKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9zZW5kc3BhY2UsIFNDVFBD
VExfTUFYREdSQU0pCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcmVjdnNwYWNlLCBTQ1RQ
Q1RMX1JFQ1ZTUEFDRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hdXRvX2FzY29uZiwg
U0NUUENUTF9BVVRPQVNDT05GKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2Vjbl9lbmFi
bGUsIFNDVFBDVExfRUNOX0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wcl9l
bmFibGUsIFNDVFBDVExfUFJfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2F1
dGhfZW5hYmxlLCBTQ1RQQ1RMX0FVVEhfRU5BQkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX2FzY29uZl9lbmFibGUsIFNDVFBDVExfQVNDT05GX0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF9yZWNvbmZpZ19lbmFibGUsIFNDVFBDVExfUkVDT05GSUdfRU5BQkxFKQor
VVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25yc2Fja19lbmFibGUsIFNDVFBDVExfTlJTQUNL
X0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wa3Rkcm9wX2VuYWJsZSwgU0NU
UENUTF9QS1REUk9QX0VOQUJMRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ub19jc3Vt
X29uX2xvb3BiYWNrLCBTQ1RQQ1RMX0xPT1BCQUNLX05PQ1NVTSkKK1VTUlNDVFBfU1lTQ1RMX1NF
VF9ERUYoc2N0cF9wZWVyX2NodW5rX29oLCBTQ1RQQ1RMX1BFRVJfQ0hLT0gpCitVU1JTQ1RQX1NZ
U0NUTF9TRVRfREVGKHNjdHBfbWF4X2J1cnN0X2RlZmF1bHQsIFNDVFBDVExfTUFYQlVSU1QpCitV
U1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWF4X2NodW5rc19vbl9xdWV1ZSwgU0NUUENUTF9N
QVhDSFVOS1MpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbWluX3NwbGl0X3BvaW50LCBT
Q1RQQ1RMX01JTl9TUExJVF9QT0lOVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kZWxh
eWVkX3NhY2tfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX0RFTEFZRURfU0FDS19USU1FKQorVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX3NhY2tfZnJlcV9kZWZhdWx0LCBTQ1RQQ1RMX1NBQ0tfRlJF
USkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0LCBT
Q1RQQ1RMX1NZU19SRVNPVVJDRSkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hc29jX2Zy
ZWVfcmVzY19saW1pdCwgU0NUUENUTF9BU09DX1JFU09VUkNFKQorVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0LCBTQ1RQQ1RMX0hFQVJUQkVBVF9J
TlRFUlZBTCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVm
YXVsdCwgU0NUUENUTF9QTVRVX1JBSVNFX1RJTUUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNj
dHBfc2h1dGRvd25fZ3VhcmRfdGltZV9kZWZhdWx0LCBTQ1RQQ1RMX1NIVVRET1dOX0dVQVJEX1RJ
TUUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQs
IFNDVFBDVExfU0VDUkVUX0xJRkVUSU1FKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3J0
b19tYXhfZGVmYXVsdCwgU0NUUENUTF9SVE9fTUFYKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX3J0b19taW5fZGVmYXVsdCwgU0NUUENUTF9SVE9fTUlOKQorVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX3J0b19pbml0aWFsX2RlZmF1bHQsIFNDVFBDVExfUlRPX0lOSVRJQUwpCitVU1JT
Q1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5J
VF9SVE9fTUFYKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3ZhbGlkX2Nvb2tpZV9saWZl
X2RlZmF1bHQsIFNDVFBDVExfVkFMSURfQ09PS0lFX0xJRkUpCitVU1JTQ1RQX1NZU0NUTF9TRVRf
REVGKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQsIFNDVFBDVExfSU5JVF9SVFhfTUFYKQorVVNS
U0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2Fzc29jX3J0eF9tYXhfZGVmYXVsdCwgU0NUUENUTF9B
U1NPQ19SVFhfTUFYKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3BhdGhfcnR4X21heF9k
ZWZhdWx0LCBTQ1RQQ1RMX1BBVEhfUlRYX01BWCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0
cF9hZGRfbW9yZV90aHJlc2hvbGQsIFNDVFBDVExfQUREX01PUkVfT05fT1VUUFVUKQorVVNSU0NU
UF9TWVNDVExfU0VUX0RFRihzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENU
TF9JTkNPTUlOR19TVFJFQU1TKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25yX291dGdv
aW5nX3N0cmVhbXNfZGVmYXVsdCwgU0NUUENUTF9PVVRHT0lOR19TVFJFQU1TKQorVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX2NtdF9vbl9vZmYsIFNDVFBDVExfQ01UX09OX09GRikKK1VTUlND
VFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9jbXRfdXNlX2RhYywgU0NUUENUTF9DTVRfVVNFX0RBQykK
K1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJzdCwgU0NU
UENUTF9DV05EX01BWEJVUlNUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX25hdF9mcmll
bmRseSwgU0NUUENUTF9OQVRfRlJJRU5ETFkpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBf
TDJfYWJjX3ZhcmlhYmxlLCBTQ1RQQ1RMX0FCQ19MX1ZBUikKK1VTUlNDVFBfU1lTQ1RMX1NFVF9E
RUYoc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCwgU0NUUENUTF9NQVhfQ0hBSU5FRF9NQlVGUykK
K1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9kb19kcmFpbiwgU0NUUENUTF9ET19TQ1RQX0RS
QUlOKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2hiX21heGJ1cnN0LCBTQ1RQQ1RMX0hC
X01BWF9CVVJTVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9hYm9ydF9pZl9vbmVfMl9v
bmVfaGl0c19saW1pdCwgU0NUUENUTF9BQk9SVF9BVF9MSU1JVCkKK1VTUlNDVFBfU1lTQ1RMX1NF
VF9ERUYoc2N0cF9taW5fcmVzaWR1YWwsIFNDVFBDVExfTUlOX1JFU0lEVUFMKQorVVNSU0NUUF9T
WVNDVExfU0VUX0RFRihzY3RwX21heF9yZXRyYW5fY2h1bmssIFNDVFBDVExfTUFYX1JFVFJBTl9D
SFVOSykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9sb2dnaW5nX2xldmVsLCBTQ1RQQ1RM
X0xPR0dJTkdfTEVWRUwpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVmYXVsdF9jY19t
b2R1bGUsIFNDVFBDVExfREVGQVVMVF9DQ19NT0RVTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVG
KHNjdHBfZGVmYXVsdF9mcmFnX2ludGVybGVhdmUsIFNDVFBDVExfREVGQVVMVF9GUkFHX0lOVEVS
TEVBVkUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfbW9iaWxpdHlfYmFzZSwgU0NUUENU
TF9NT0JJTElUWV9CQVNFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX21vYmlsaXR5X2Zh
c3RoYW5kb2ZmLCBTQ1RQQ1RMX01PQklMSVRZX0ZBU1RIQU5ET0ZGKQorVVNSU0NUUF9TWVNDVExf
U0VUX0RFRihzY3RwX2luaXRzX2luY2x1ZGVfbmF0X2ZyaWVuZGx5LCBTQ1RQQ1RMX05BVF9GUklF
TkRMWV9JTklUUykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF91ZHBfdHVubmVsaW5nX3Bv
cnQsIFNDVFBDVExfVURQX1RVTk5FTElOR19QT1JUKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihz
Y3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0ZWx5LCBTQ1RQQ1RMX1NBQ0tfSU1NRURJQVRFTFlfRU5B
QkxFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX3Z0YWdfdGltZV93YWl0LCBTQ1RQQ1RM
X1RJTUVfV0FJVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ibGFja2hvbGUsIFNDVFBD
VExfQkxBQ0tIT0xFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2RpYWdfaW5mb19jb2Rl
LCBTQ1RQQ1RMX0RJQUdfSU5GT19DT0RFKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2Zy
X21heF9idXJzdF9kZWZhdWx0LCBTQ1RQQ1RMX0ZSTUFYQlVSU1QpCitVU1JTQ1RQX1NZU0NUTF9T
RVRfREVGKHNjdHBfcGF0aF9wZl90aHJlc2hvbGQsIFNDVFBDVExfUEFUSF9QRl9USFJFU0hPTEQp
CitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfZGVmYXVsdF9zc19tb2R1bGUsIFNDVFBDVExf
REVGQVVMVF9TU19NT0RVTEUpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0dmFyX2J3
LCBTQ1RQQ1RMX1JUVFZBUl9CVykKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYoc2N0cF9ydHR2YXJf
cnR0LCBTQ1RQQ1RMX1JUVFZBUl9SVFQpCitVU1JTQ1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfcnR0
dmFyX2VxcmV0LCBTQ1RQQ1RMX1JUVFZBUl9FUVJFVCkKK1VTUlNDVFBfU1lTQ1RMX1NFVF9ERUYo
c2N0cF9zdGVhZHlfc3RlcCwgU0NUUENUTF9SVFRWQVJfU1RFQURZUykKK1VTUlNDVFBfU1lTQ1RM
X1NFVF9ERUYoc2N0cF91c2VfZGNjY19lY24sIFNDVFBDVExfUlRUVkFSX0RDQ0NFQ04pCitVU1JT
Q1RQX1NZU0NUTF9TRVRfREVGKHNjdHBfYnVmZmVyX3NwbGl0dGluZywgU0NUUENUTF9CVUZGRVJf
U1BMSVRUSU5HKQorVVNSU0NUUF9TWVNDVExfU0VUX0RFRihzY3RwX2luaXRpYWxfY3duZCwgU0NU
UENUTF9JTklUSUFMX0NXTkQpCisjaWZkZWYgU0NUUF9ERUJVRworVVNSU0NUUF9TWVNDVExfU0VU
X0RFRihzY3RwX2RlYnVnX29uLCBTQ1RQQ1RMX0RFQlVHKQorI2VuZGlmCisjaWYgIWRlZmluZWQo
X19Vc2Vyc3BhY2Vfb3NfV2luZG93cykKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorI2Vu
ZGlmCisKKyNkZWZpbmUgVVNSU0NUUF9TWVNDVExfR0VUX0RFRihfX2ZpZWxkKSBcCit1aW50MzJf
dCB1c3JzY3RwX3N5c2N0bF9nZXRfICMjIF9fZmllbGQodm9pZCkgeyBcCisJcmV0dXJuIFNDVFBf
QkFTRV9TWVNDVEwoX19maWVsZCk7IFwKK30KKworVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X3NlbmRzcGFjZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9yZWN2c3BhY2UpCitVU1JT
Q1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYXV0b19hc2NvbmYpCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfbXVsdGlwbGVfYXNjb25mcykKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9l
Y25fZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3ByX2VuYWJsZSkKK1VTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hdXRoX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9hc2NvbmZfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3JlY29u
ZmlnX2VuYWJsZSkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ucnNhY2tfZW5hYmxlKQor
VVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3BrdGRyb3BfZW5hYmxlKQorVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX25vX2NzdW1fb25fbG9vcGJhY2spCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfcGVlcl9jaHVua19vaCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tYXhf
YnVyc3RfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tYXhfY2h1bmtzX29u
X3F1ZXVlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2hhc2h0YmxzaXplKQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX3BjYnRibHNpemUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfbWluX3NwbGl0X3BvaW50KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2NodW5r
c2NhbGUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZGVsYXllZF9zYWNrX3RpbWVfZGVm
YXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9zYWNrX2ZyZXFfZGVmYXVsdCkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9zeXN0ZW1fZnJlZV9yZXNjX2xpbWl0KQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX2Fzb2NfZnJlZV9yZXNjX2xpbWl0KQorVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX2hlYXJ0YmVhdF9pbnRlcnZhbF9kZWZhdWx0KQorVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX3BtdHVfcmFpc2VfdGltZV9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExf
R0VUX0RFRihzY3RwX3NodXRkb3duX2d1YXJkX3RpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9zZWNyZXRfbGlmZXRpbWVfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dF
VF9ERUYoc2N0cF9ydG9fbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBf
cnRvX21pbl9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0b19pbml0aWFs
X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfaW5pdF9ydG9fbWF4X2RlZmF1
bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfdmFsaWRfY29va2llX2xpZmVfZGVmYXVs
dCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9pbml0X3J0eF9tYXhfZGVmYXVsdCkKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9hc3NvY19ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQ
X1NZU0NUTF9HRVRfREVGKHNjdHBfcGF0aF9ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NU
TF9HRVRfREVGKHNjdHBfYWRkX21vcmVfdGhyZXNob2xkKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX25yX2luY29taW5nX3N0cmVhbXNfZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9ucl9vdXRnb2luZ19zdHJlYW1zX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfY210X29uX29mZikKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9jbXRfdXNl
X2RhYykKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF91c2VfY3duZF9iYXNlZF9tYXhidXJz
dCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9uYXRfZnJpZW5kbHkpCitVU1JTQ1RQX1NZ
U0NUTF9HRVRfREVGKHNjdHBfTDJfYWJjX3ZhcmlhYmxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX21idWZfdGhyZXNob2xkX2NvdW50KQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3Rw
X2RvX2RyYWluKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2hiX21heGJ1cnN0KQorVVNS
U0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2Fib3J0X2lmX29uZV8yX29uZV9oaXRzX2xpbWl0KQor
VVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX21pbl9yZXNpZHVhbCkKK1VTUlNDVFBfU1lTQ1RM
X0dFVF9ERUYoc2N0cF9tYXhfcmV0cmFuX2NodW5rKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihz
Y3RwX2xvZ2dpbmdfbGV2ZWwpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZGVmYXVsdF9j
Y19tb2R1bGUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfZGVmYXVsdF9mcmFnX2ludGVy
bGVhdmUpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfbW9iaWxpdHlfYmFzZSkKK1VTUlND
VFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9tb2JpbGl0eV9mYXN0aGFuZG9mZikKK1VTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF9pbml0c19pbmNsdWRlX25hdF9mcmllbmRseSkKK1VTUlNDVFBfU1lT
Q1RMX0dFVF9ERUYoc2N0cF91ZHBfdHVubmVsaW5nX3BvcnQpCitVU1JTQ1RQX1NZU0NUTF9HRVRf
REVGKHNjdHBfZW5hYmxlX3NhY2tfaW1tZWRpYXRlbHkpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVG
KHNjdHBfdnRhZ190aW1lX3dhaXQpCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYmxhY2to
b2xlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RpYWdfaW5mb19jb2RlKQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX2ZyX21heF9idXJzdF9kZWZhdWx0KQorVVNSU0NUUF9TWVND
VExfR0VUX0RFRihzY3RwX3BhdGhfcGZfdGhyZXNob2xkKQorVVNSU0NUUF9TWVNDVExfR0VUX0RF
RihzY3RwX2RlZmF1bHRfc3NfbW9kdWxlKQorVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX3J0
dHZhcl9idykKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9ydHR2YXJfcnR0KQorVVNSU0NU
UF9TWVNDVExfR0VUX0RFRihzY3RwX3J0dHZhcl9lcXJldCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9E
RUYoc2N0cF9zdGVhZHlfc3RlcCkKK1VTUlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF91c2VfZGNj
Y19lY24pCitVU1JTQ1RQX1NZU0NUTF9HRVRfREVGKHNjdHBfYnVmZmVyX3NwbGl0dGluZykKK1VT
UlNDVFBfU1lTQ1RMX0dFVF9ERUYoc2N0cF9pbml0aWFsX2N3bmQpCisjaWZkZWYgU0NUUF9ERUJV
RworVVNSU0NUUF9TWVNDVExfR0VUX0RFRihzY3RwX2RlYnVnX29uKQorI2VuZGlmCisKK3ZvaWQg
dXNyc2N0cF9nZXRfc3RhdChzdHJ1Y3Qgc2N0cHN0YXQgKnN0YXQpCit7CisJKnN0YXQgPSBTQ1RQ
X0JBU0VfU1RBVFM7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29j
a2V0dmFyLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfc29ja2V0dmFyLmgKaW5kZXggZTY5
ZGUyOWJiMmQxZDY0MzRiOGIyOWFlNzc1YWQ4YzJlNDhjNTM5MS4uZmZjODI3MGVmZGE0NmY4YmNj
OTllOWI1MTg0MjY1ZjA2OGYyOWM5NCAxMDA3NTUKLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91
c2VyX3NvY2tldHZhci5oCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2Uv
dGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9zb2NrZXR2YXIu
aApAQCAtMCwwICsxLDg2MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5
OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBv
ZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAg
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20g
dGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBB
TkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJF
R0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAq
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisg
KiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAq
CisgKi8KKworLyogX19Vc2Vyc3BhY2VfXyB2ZXJzaW9uIG9mIDxzeXMvc29ja2V0dmFyLmg+IGdv
ZXMgaGVyZS4qLworCisjaWZuZGVmIF9VU0VSX1NPQ0tFVFZBUl9IXworI2RlZmluZSBfVVNFUl9T
T0NLRVRWQVJfSF8KKworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRGFyd2luKQorI2luY2x1
ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKy8qICNpbmNs
dWRlIDxzeXMvc2VsaW5mby5oPiAqLyAvKl9fVXNlcnNwYWNlX18gYWx0ZXJuYXRpdmU/Ki8JLyog
Zm9yIHN0cnVjdCBzZWxpbmZvICovCisvKiAjaW5jbHVkZSA8c3lzL19sb2NrLmg+ICB3YXMgMCBi
eXRlIGZpbGUgKi8KKy8qICNpbmNsdWRlIDxzeXMvX211dGV4Lmg+IHdhcyAwIGJ5dGUgZmlsZSAq
LworLyogI2luY2x1ZGUgPHN5cy9fc3guaD4gKi8gLypfX1VzZXJzcGFjZV9fIGFsdGVybmF0aXZl
PyovCisjaWYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSAmJiAhZGVmaW5lZChf
X1VzZXJzcGFjZV9vc19GcmVlQlNEKSAmJiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0Qp
ICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpICYmICFkZWZpbmVkKF9fVXNlcnNw
YWNlX29zX05hQ2wpCisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisjZGVmaW5lIFNPQ0tf
TUFYQUREUkxFTiAyNTUKKyNpZiAhZGVmaW5lZChNU0dfTk9USUZJQ0FUSU9OKQorI2RlZmluZSBN
U0dfTk9USUZJQ0FUSU9OIDB4MjAwMCAgICAgICAgIC8qIFNDVFAgbm90aWZpY2F0aW9uICovCisj
ZW5kaWYKKyNkZWZpbmUgU0NUUF9TT19MSU5HRVIgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX1NP
X0FDQ0VQVENPTk4gMHgwMDAyCisjZGVmaW5lIFNTX0NBTlRSQ1ZNT1JFIDB4MDIwCisjZGVmaW5l
IFNTX0NBTlRTRU5ETU9SRSAweDAxMAorCisjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3
aW4pIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfRHJhZ29uRmx5KSB8fCBkZWZpbmVkKF9fVXNl
cnNwYWNlX29zX0ZyZWVCU0QpIHx8IGRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJTRCkgfHwg
ZGVmaW5lZCAoX19Vc2Vyc3BhY2Vfb3NfV2luZG93cykgfHwgZGVmaW5lZChfX1VzZXJzcGFjZV9v
c19OYUNsKQorI2RlZmluZSBVSU9fTUFYSU9WIDEwMjQKKyNkZWZpbmUgRVJFU1RBUlQgKC0xKQor
I2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX1VzZXJzcGFjZV9vc19EYXJ3aW4pICYmICFkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX05ldEJTRCkgJiYgIWRlZmluZWQoX19Vc2Vyc3BhY2Vfb3NfT3BlbkJT
RCkKK2VudW0JdWlvX3J3IHsgVUlPX1JFQUQsIFVJT19XUklURSB9OworI2VuZGlmCisKKyNpZiAh
ZGVmaW5lZChfX1VzZXJzcGFjZV9vc19OZXRCU0QpICYmICFkZWZpbmVkKF9fVXNlcnNwYWNlX29z
X09wZW5CU0QpCisvKiBTZWdtZW50IGZsYWcgdmFsdWVzLiAqLworZW51bSB1aW9fc2VnIHsKKwlV
SU9fVVNFUlNQQUNFLAkJLyogZnJvbSB1c2VyIGRhdGEgc3BhY2UgKi8KKwlVSU9fU1lTU1BBQ0UJ
CS8qIGZyb20gc3lzdGVtIHNwYWNlICovCit9OworI2VuZGlmCisKK3N0cnVjdCBwcm9jIHsKKyAg
ICBpbnQgc3R1YjsgLyogc3RydWN0IHByb2MgaXMgYSBkdW1teSBmb3IgX19Vc2Vyc3BhY2VfXyAq
LworfTsKKworTUFMTE9DX0RFQ0xBUkUoTV9BQ0NGKTsKK01BTExPQ19ERUNMQVJFKE1fUENCKTsK
K01BTExPQ19ERUNMQVJFKE1fU09OQU1FKTsKKworLyogX19Vc2Vyc3BhY2VfXyBBcmUgdGhlc2Ug
YWxsIHRoZSBmaWVsZHMgd2UgbmVlZD8KKyAqIFJlbW92aW5nIHN0cnVjdCB0aHJlYWQgKnVpb190
ZDsgICAgb3duZXIgZmllbGQKKyovCitzdHJ1Y3QgdWlvIHsKKyAgICBzdHJ1Y3QJaW92ZWMgKnVp
b19pb3Y7CQkvKiBzY2F0dGVyL2dhdGhlciBsaXN0ICovCisgICAgaW50CQl1aW9faW92Y250OwkJ
LyogbGVuZ3RoIG9mIHNjYXR0ZXIvZ2F0aGVyIGxpc3QgKi8KKyAgICBvZmZfdAl1aW9fb2Zmc2V0
OwkJLyogb2Zmc2V0IGluIHRhcmdldCBvYmplY3QgKi8KKyAgICBzc2l6ZV90IAl1aW9fcmVzaWQ7
CQkvKiByZW1haW5pbmcgYnl0ZXMgdG8gcHJvY2VzcyAqLworICAgIGVudW0JdWlvX3NlZyB1aW9f
c2VnZmxnOwkvKiBhZGRyZXNzIHNwYWNlICovCisgICAgZW51bQl1aW9fcncgdWlvX3J3OwkJLyog
b3BlcmF0aW9uICovCit9OworCisKKy8qIF9fVXNlcnNwYWNlX18gKi8KKworLyoKKyAqIEtlcm5l
bCBzdHJ1Y3R1cmUgcGVyIHNvY2tldC4KKyAqIENvbnRhaW5zIHNlbmQgYW5kIHJlY2VpdmUgYnVm
ZmVyIHF1ZXVlcywKKyAqIGhhbmRsZSBvbiBwcm90b2NvbCBhbmQgcG9pbnRlciB0byBwcm90b2Nv
bAorICogcHJpdmF0ZSBkYXRhIGFuZCBlcnJvciBpbmZvcm1hdGlvbi4KKyAqLworI2lmIGRlZmlu
ZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCisjZGVmaW5lIEFGX1JPVVRFICAxNwordHlwZWRl
ZiBfX2ludDMyIHBpZF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDMyIHVpZF90OworZW51bSBz
aWdUeXBlIHsKKwlTSUdOQUwgPSAwLAorCUJST0FEQ0FTVCA9IDEsCisJTUFYX0VWRU5UUyA9IDIK
K307CisjZW5kaWYKKworLyotCisgKiBMb2NraW5nIGtleSB0byBzdHJ1Y3Qgc29ja2V0OgorICog
KGEpIGNvbnN0YW50IGFmdGVyIGFsbG9jYXRpb24sIG5vIGxvY2tpbmcgcmVxdWlyZWQuCisgKiAo
YikgbG9ja2VkIGJ5IFNPQ0tfTE9DSyhzbykuCisgKiAoYykgbG9ja2VkIGJ5IFNPQ0tCVUZfTE9D
Sygmc28tPnNvX3JjdikuCisgKiAoZCkgbG9ja2VkIGJ5IFNPQ0tCVUZfTE9DSygmc28tPnNvX3Nu
ZCkuCisgKiAoZSkgbG9ja2VkIGJ5IEFDQ0VQVF9MT0NLKCkuCisgKiAoZikgbm90IGxvY2tlZCBz
aW5jZSBpbnRlZ2VyIHJlYWRzL3dyaXRlcyBhcmUgYXRvbWljLgorICogKGcpIHVzZWQgb25seSBh
cyBhIHNsZWVwL3dha2V1cCBhZGRyZXNzLCBubyB2YWx1ZS4KKyAqIChoKSBsb2NrZWQgYnkgZ2xv
YmFsIG11dGV4IHNvX2dsb2JhbF9tdHguCisgKi8KK3N0cnVjdCBzb2NrZXQgeworCWludAlzb19j
b3VudDsJCS8qIChiKSByZWZlcmVuY2UgY291bnQgKi8KKwlzaG9ydAlzb190eXBlOwkJLyogKGEp
IGdlbmVyaWMgdHlwZSwgc2VlIHNvY2tldC5oICovCisJc2hvcnQJc29fb3B0aW9uczsJCS8qIGZy
b20gc29ja2V0IGNhbGwsIHNlZSBzb2NrZXQuaCAqLworCXNob3J0CXNvX2xpbmdlcjsJCS8qIHRp
bWUgdG8gbGluZ2VyIHdoaWxlIGNsb3NpbmcgKi8KKwlzaG9ydAlzb19zdGF0ZTsJCS8qIChiKSBp
bnRlcm5hbCBzdGF0ZSBmbGFncyBTU18qICovCisJaW50CXNvX3FzdGF0ZTsJCS8qIChlKSBpbnRl
cm5hbCBzdGF0ZSBmbGFncyBTUV8qICovCisJdm9pZAkqc29fcGNiOwkJLyogcHJvdG9jb2wgY29u
dHJvbCBibG9jayAqLworCWludAlzb19kb207CisvKgorICogVmFyaWFibGVzIGZvciBjb25uZWN0
aW9uIHF1ZXVpbmcuCisgKiBTb2NrZXQgd2hlcmUgYWNjZXB0cyBvY2N1ciBpcyBzb19oZWFkIGlu
IGFsbCBzdWJzaWRpYXJ5IHNvY2tldHMuCisgKiBJZiBzb19oZWFkIGlzIDAsIHNvY2tldCBpcyBu
b3QgcmVsYXRlZCB0byBhbiBhY2NlcHQuCisgKiBGb3IgaGVhZCBzb2NrZXQgc29faW5jb21wIHF1
ZXVlcyBwYXJ0aWFsbHkgY29tcGxldGVkIGNvbm5lY3Rpb25zLAorICogd2hpbGUgc29fY29tcCBp
cyBhIHF1ZXVlIG9mIGNvbm5lY3Rpb25zIHJlYWR5IHRvIGJlIGFjY2VwdGVkLgorICogSWYgYSBj
b25uZWN0aW9uIGlzIGFib3J0ZWQgYW5kIGl0IGhhcyBzb19oZWFkIHNldCwgdGhlbgorICogaXQg
aGFzIHRvIGJlIHB1bGxlZCBvdXQgb2YgZWl0aGVyIHNvX2luY29tcCBvciBzb19jb21wLgorICog
V2UgYWxsb3cgY29ubmVjdGlvbnMgdG8gcXVldWUgdXAgYmFzZWQgb24gY3VycmVudCBxdWV1ZSBs
ZW5ndGhzCisgKiBhbmQgbGltaXQgb24gbnVtYmVyIG9mIHF1ZXVlZCBjb25uZWN0aW9ucyBmb3Ig
dGhpcyBzb2NrZXQuCisgKi8KKwlzdHJ1Y3QJc29ja2V0ICpzb19oZWFkOwkvKiAoZSkgYmFjayBw
b2ludGVyIHRvIGxpc3RlbiBzb2NrZXQgKi8KKwlUQUlMUV9IRUFEKCwgc29ja2V0KSBzb19pbmNv
bXA7CS8qIChlKSBxdWV1ZSBvZiBwYXJ0aWFsIHVuYWNjZXB0ZWQgY29ubmVjdGlvbnMgKi8KKwlU
QUlMUV9IRUFEKCwgc29ja2V0KSBzb19jb21wOwkvKiAoZSkgcXVldWUgb2YgY29tcGxldGUgdW5h
Y2NlcHRlZCBjb25uZWN0aW9ucyAqLworCVRBSUxRX0VOVFJZKHNvY2tldCkgc29fbGlzdDsJLyog
KGUpIGxpc3Qgb2YgdW5hY2NlcHRlZCBjb25uZWN0aW9ucyAqLworCXVfc2hvcnQJc29fcWxlbjsJ
CS8qIChlKSBudW1iZXIgb2YgdW5hY2NlcHRlZCBjb25uZWN0aW9ucyAqLworCXVfc2hvcnQJc29f
aW5jcWxlbjsJCS8qIChlKSBudW1iZXIgb2YgdW5hY2NlcHRlZCBpbmNvbXBsZXRlCisJCQkJCSAg
IGNvbm5lY3Rpb25zICovCisJdV9zaG9ydAlzb19xbGltaXQ7CQkvKiAoZSkgbWF4IG51bWJlciBx
dWV1ZWQgY29ubmVjdGlvbnMgKi8KKwlzaG9ydAlzb190aW1lbzsJCS8qIChnKSBjb25uZWN0aW9u
IHRpbWVvdXQgKi8KKwl1c2VybGFuZF9jb25kX3QgdGltZW9fY29uZDsgICAgICAvKiB0aW1lb19j
b25kIGNvbmRpdGlvbiB2YXJpYWJsZSBiZWluZyB1c2VkIGluIHdha2V1cCAqLworCisJdV9zaG9y
dAlzb19lcnJvcjsJCS8qIChmKSBlcnJvciBhZmZlY3RpbmcgY29ubmVjdGlvbiAqLworCXN0cnVj
dAlzaWdpbyAqc29fc2lnaW87CS8qIFtzZ10gaW5mb3JtYXRpb24gZm9yIGFzeW5jIEkvTyBvcgor
CQkJCQkgICBvdXQgb2YgYmFuZCBkYXRhIChTSUdVUkcpICovCisJdV9sb25nCXNvX29vYm1hcms7
CQkvKiAoYykgY2hhcnMgdG8gb29iIG1hcmsgKi8KKwlUQUlMUV9IRUFEKCwgYWlvY2JsaXN0KSBz
b19haW9qb2JxOyAvKiBBSU8gb3BzIHdhaXRpbmcgb24gc29ja2V0ICovCisvKgorICogVmFyaWFi
bGVzIGZvciBzb2NrZXQgYnVmZmVyaW5nLgorICovCisJc3RydWN0IHNvY2tidWYgeworCQkvKiBf
X1VzZXJzcGFjZV9fIE1hbnkgb2YgdGhlc2UgZmllbGRzIG1heQorCQkgKiBub3QgYmUgcmVxdWly
ZWQgZm9yIHRoZSBzY3RwIHN0YWNrLgorCQkgKiBDb21tZW50aW5nIG91dCB0aGUgZm9sbG93aW5n
LgorCQkgKiBJbmNsdWRpbmcgcHRocmVhZCBtdXRleCBhbmQgY29uZGl0aW9uIHZhcmlhYmxlIHRv
IGJlCisJCSAqIHVzZWQgYnkgc2J3YWl0LCBzb3J3YWtldXAgYW5kIHNvd3dha2V1cC4KKwkJKi8K
KwkJLyogc3RydWN0CXNlbGluZm8gc2Jfc2VsOyovIC8qIHByb2Nlc3Mgc2VsZWN0aW5nIHJlYWQv
d3JpdGUgKi8KKwkJLyogc3RydWN0CW10eCBzYl9tdHg7Ki8JLyogc29ja2J1ZiBsb2NrICovCisJ
CS8qIHN0cnVjdAlzeCBzYl9zeDsqLwkvKiBwcmV2ZW50IEkvTyBpbnRlcmxhY2luZyAqLworCQl1
c2VybGFuZF9jb25kX3Qgc2JfY29uZDsgLyogc29ja2J1ZiBjb25kaXRpb24gdmFyaWFibGUgKi8K
KwkJdXNlcmxhbmRfbXV0ZXhfdCBzYl9tdHg7IC8qIHNvY2tidWYgbG9jayBhc3NvY2lhdGVkIHdp
dGggc2JfY29uZCAqLworCQlzaG9ydAlzYl9zdGF0ZTsJLyogKGMvZCkgc29ja2V0IHN0YXRlIG9u
IHNvY2tidWYgKi8KKyNkZWZpbmUJc2Jfc3RhcnR6ZXJvCXNiX21iCisJCXN0cnVjdAltYnVmICpz
Yl9tYjsJLyogKGMvZCkgdGhlIG1idWYgY2hhaW4gKi8KKwkJc3RydWN0CW1idWYgKnNiX21idGFp
bDsgLyogKGMvZCkgdGhlIGxhc3QgbWJ1ZiBpbiB0aGUgY2hhaW4gKi8KKwkJc3RydWN0CW1idWYg
KnNiX2xhc3RyZWNvcmQ7CS8qIChjL2QpIGZpcnN0IG1idWYgb2YgbGFzdAorCQkJCQkJICogcmVj
b3JkIGluIHNvY2tldCBidWZmZXIgKi8KKwkJc3RydWN0CW1idWYgKnNiX3NuZHB0cjsgLyogKGMv
ZCkgcG9pbnRlciBpbnRvIG1idWYgY2hhaW4gKi8KKwkJdV9pbnQJc2Jfc25kcHRyb2ZmOwkvKiAo
Yy9kKSBieXRlIG9mZnNldCBvZiBwdHIgaW50byBjaGFpbiAqLworCQl1X2ludAlzYl9jYzsJCS8q
IChjL2QpIGFjdHVhbCBjaGFycyBpbiBidWZmZXIgKi8KKwkJdV9pbnQJc2JfaGl3YXQ7CS8qIChj
L2QpIG1heCBhY3R1YWwgY2hhciBjb3VudCAqLworCQl1X2ludAlzYl9tYmNudDsJLyogKGMvZCkg
Y2hhcnMgb2YgbWJ1ZnMgdXNlZCAqLworCQl1X2ludAlzYl9tYm1heDsJLyogKGMvZCkgbWF4IGNo
YXJzIG9mIG1idWZzIHRvIHVzZSAqLworCQl1X2ludAlzYl9jdGw7CQkvKiAoYy9kKSBub24tZGF0
YSBjaGFycyBpbiBidWZmZXIgKi8KKwkJaW50CXNiX2xvd2F0OwkvKiAoYy9kKSBsb3cgd2F0ZXIg
bWFyayAqLworCQlpbnQJc2JfdGltZW87CS8qIChjL2QpIHRpbWVvdXQgZm9yIHJlYWQvd3JpdGUg
Ki8KKwkJc2hvcnQJc2JfZmxhZ3M7CS8qIChjL2QpIGZsYWdzLCBzZWUgYmVsb3cgKi8KKwl9IHNv
X3Jjdiwgc29fc25kOworLyoKKyAqIENvbnN0YW50cyBmb3Igc2JfZmxhZ3MgZmllbGQgb2Ygc3Ry
dWN0IHNvY2tidWYuCisgKi8KKyNkZWZpbmUJU0JfTUFYCQkoMjU2KjEwMjQpCS8qIGRlZmF1bHQg
Zm9yIG1heCBjaGFycyBpbiBzb2NrYnVmICovCisjZGVmaW5lIFNCX1JBVyAgICAgICAgICAoNjQq
MTAyNCoyKSAgICAvKkFsaWduaW5nIHNvLT5zb19yY3Yuc2JfaGl3YXQgd2l0aCB0aGUgcmVjZWl2
ZSBidWZmZXIgc2l6ZSBvZiByYXcgc29ja2V0Ki8KKy8qCisgKiBDb25zdGFudHMgZm9yIHNiX2Zs
YWdzIGZpZWxkIG9mIHN0cnVjdCBzb2NrYnVmLgorICovCisjZGVmaW5lCVNCX1dBSVQJCTB4MDQJ
CS8qIHNvbWVvbmUgaXMgd2FpdGluZyBmb3IgZGF0YS9zcGFjZSAqLworI2RlZmluZQlTQl9TRUwJ
CTB4MDgJCS8qIHNvbWVvbmUgaXMgc2VsZWN0aW5nICovCisjZGVmaW5lCVNCX0FTWU5DCTB4MTAJ
CS8qIEFTWU5DIEkvTywgbmVlZCBzaWduYWxzICovCisjZGVmaW5lCVNCX1VQQ0FMTAkweDIwCQkv
KiBzb21lb25lIHdhbnRzIGFuIHVwY2FsbCAqLworI2RlZmluZQlTQl9OT0lOVFIJMHg0MAkJLyog
b3BlcmF0aW9ucyBub3QgaW50ZXJydXB0aWJsZSAqLworI2RlZmluZQlTQl9BSU8JCTB4ODAJCS8q
IEFJTyBvcGVyYXRpb25zIHF1ZXVlZCAqLworI2RlZmluZQlTQl9LTk9URQkweDEwMAkJLyoga2Vy
bmVsIG5vdGUgYXR0YWNoZWQgKi8KKyNkZWZpbmUJU0JfQVVUT1NJWkUJMHg4MDAJCS8qIGF1dG9t
YXRpY2FsbHkgc2l6ZSBzb2NrZXQgYnVmZmVyICovCisKKwl2b2lkCSgqc29fdXBjYWxsKShzdHJ1
Y3Qgc29ja2V0ICosIHZvaWQgKiwgaW50KTsKKwl2b2lkCSpzb191cGNhbGxhcmc7CisJc3RydWN0
CXVjcmVkICpzb19jcmVkOwkJLyogKGEpIHVzZXIgY3JlZGVudGlhbHMgKi8KKwlzdHJ1Y3QJbGFi
ZWwgKnNvX2xhYmVsOwkvKiAoYikgTUFDIGxhYmVsIGZvciBzb2NrZXQgKi8KKwlzdHJ1Y3QJbGFi
ZWwgKnNvX3BlZXJsYWJlbDsJLyogKGIpIGNhY2hlZCBNQUMgbGFiZWwgZm9yIHBlZXIgKi8KKwkv
KiBOQjogZ2VuZXJhdGlvbiBjb3VudCBtdXN0IG5vdCBiZSBmaXJzdC4gKi8KKwl1aW50MzJfdCBz
b19nZW5jbnQ7CQkvKiAoaCkgZ2VuZXJhdGlvbiBjb3VudCAqLworCXZvaWQJKnNvX2VtdWxkYXRh
OwkJLyogKGIpIHByaXZhdGUgZGF0YSBmb3IgZW11bGF0b3JzICovCisgCXN0cnVjdCBzb19hY2Nm
IHsKKwkJc3RydWN0CWFjY2VwdF9maWx0ZXIgKnNvX2FjY2VwdF9maWx0ZXI7CisJCXZvaWQJKnNv
X2FjY2VwdF9maWx0ZXJfYXJnOwkvKiBzYXZlZCBmaWx0ZXIgYXJncyAqLworCQljaGFyCSpzb19h
Y2NlcHRfZmlsdGVyX3N0cjsJLyogc2F2ZWQgdXNlciBhcmdzICovCisJfSAqc29fYWNjZjsKK307
CisKKyNkZWZpbmUgU0JfRU1QVFlfRklYVVAoc2IpIGRvIHsJCQkJCQlcCisJaWYgKChzYiktPnNi
X21iID09IE5VTEwpIHsJCQkJCVwKKwkJKHNiKS0+c2JfbWJ0YWlsID0gTlVMTDsJCQkJCVwKKwkJ
KHNiKS0+c2JfbGFzdHJlY29yZCA9IE5VTEw7CQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgv
KkNPTlNUQ09ORCovMCkKKworLyoKKyAqIEdsb2JhbCBhY2NlcHQgbXV0ZXggdG8gc2VyaWFsaXpl
IGFjY2VzcyB0byBhY2NlcHQgcXVldWVzIGFuZAorICogZmllbGRzIGFzc29jaWF0ZWQgd2l0aCBt
dWx0aXBsZSBzb2NrZXRzLiAgVGhpcyBhbGxvd3MgdXMgdG8KKyAqIGF2b2lkIGRlZmluaW5nIGEg
bG9jayBvcmRlciBiZXR3ZWVuIGxpc3RlbiBhbmQgYWNjZXB0IHNvY2tldHMKKyAqIHVudGlsIHN1
Y2ggdGltZSBhcyBpdCBwcm92ZXMgdG8gYmUgYSBnb29kIGlkZWEuCisgKi8KKyNpZiBkZWZpbmVk
KF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCitleHRlcm4gdXNlcmxhbmRfbXV0ZXhfdCBhY2NlcHRf
bXR4OworZXh0ZXJuIHVzZXJsYW5kX2NvbmRfdCBhY2NlcHRfY29uZDsKKyNkZWZpbmUgQUNDRVBU
X0xPQ0tfQVNTRVJUKCkKKyNkZWZpbmUJQUNDRVBUX0xPQ0soKSBkbyB7IFwKKwlFbnRlckNyaXRp
Y2FsU2VjdGlvbigmYWNjZXB0X210eCk7IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCUFDQ0VQVF9V
TkxPQ0soKQlkbyB7IFwKKwlMZWF2ZUNyaXRpY2FsU2VjdGlvbigmYWNjZXB0X210eCk7IFwKK30g
d2hpbGUgKDApCisjZGVmaW5lCUFDQ0VQVF9VTkxPQ0tfQVNTRVJUKCkKKyNlbHNlCitleHRlcm4g
dXNlcmxhbmRfbXV0ZXhfdCBhY2NlcHRfbXR4OworCitleHRlcm4gdXNlcmxhbmRfY29uZF90IGFj
Y2VwdF9jb25kOworI2lmZGVmIElOVkFSSUFOVFMKKyNkZWZpbmUJQUNDRVBUX0xPQ0soKQlLQVNT
RVJUKHB0aHJlYWRfbXV0ZXhfbG9jaygmYWNjZXB0X210eCkgPT0gMCwgKCIlczogYWNjZXB0X210
eCBhbHJlYWR5IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNkZWZpbmUJQUNDRVBUX1VOTE9DSygpCUtB
U1NFUlQocHRocmVhZF9tdXRleF91bmxvY2soJmFjY2VwdF9tdHgpID09IDAsICgiJXM6IGFjY2Vw
dF9tdHggbm90IGxvY2tlZCIsIF9fZnVuY19fKSkKKyNlbHNlCisjZGVmaW5lCUFDQ0VQVF9MT0NL
KCkgICAodm9pZClwdGhyZWFkX211dGV4X2xvY2soJmFjY2VwdF9tdHgpCisjZGVmaW5lCUFDQ0VQ
VF9VTkxPQ0soKSAodm9pZClwdGhyZWFkX211dGV4X3VubG9jaygmYWNjZXB0X210eCkKKyNlbmRp
ZgorI2RlZmluZQlBQ0NFUFRfTE9DS19BU1NFUlQoKSBcCisgICAgICAgICAgS0FTU0VSVChwdGhy
ZWFkX211dGV4X3RyeWxvY2soJmFjY2VwdF9tdHgpID09IEVCVVNZLCAoIiVzOiBhY2NlcHRfbXR4
IG5vdCBsb2NrZWQiLCBfX2Z1bmNfXykpCisjZGVmaW5lCUFDQ0VQVF9VTkxPQ0tfQVNTRVJUKCkg
ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKwkgIEtBU1NFUlQocHRocmVhZF9tdXRleF90cnlsb2NrKCZhY2NlcHRfbXR4
KSA9PSAwLCAoIiVzOiBhY2NlcHRfbXR4ICBsb2NrZWQiLCBfX2Z1bmNfXykpOyBcCisJICAodm9p
ZClwdGhyZWFkX211dGV4X3VubG9jaygmYWNjZXB0X210eCk7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9IHdoaWxlICgwKQorI2VuZGlm
CisKKy8qCisgKiBQZXItc29ja2V0IGJ1ZmZlciBtdXRleCB1c2VkIHRvIHByb3RlY3QgbW9zdCBm
aWVsZHMgaW4gdGhlIHNvY2tldAorICogYnVmZmVyLgorICovCisjZGVmaW5lCVNPQ0tCVUZfTVRY
KF9zYikgKCYoX3NiKS0+c2JfbXR4KQorI2lmIGRlZmluZWQgKF9fVXNlcnNwYWNlX29zX1dpbmRv
d3MpCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19JTklUKF9zYiwgX25hbWUpIFwKKwlJbml0aWFsaXpl
Q3JpdGljYWxTZWN0aW9uKFNPQ0tCVUZfTVRYKF9zYikpCisjZGVmaW5lIFNPQ0tCVUZfTE9DS19E
RVNUUk9ZKF9zYikgRGVsZXRlQ3JpdGljYWxTZWN0aW9uKFNPQ0tCVUZfTVRYKF9zYikpCisjZGVm
aW5lIFNPQ0tCVUZfQ09ORF9JTklUKF9zYikgSW5pdGlhbGl6ZUNvbmRpdGlvblZhcmlhYmxlKCgm
KF9zYiktPnNiX2NvbmQpKQorI2RlZmluZSBTT0NLQlVGX0NPTkRfREVTVFJPWShfc2IpIERlbGV0
ZUNvbmRpdGlvblZhcmlhYmxlKCgmKF9zYiktPnNiX2NvbmQpKQorI2RlZmluZSBTT0NLX0NPTkRf
SU5JVChfc28pIEluaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZSgoJihfc28pLT50aW1lb19jb25k
KSkKKyNkZWZpbmUgU09DS19DT05EX0RFU1RST1koX3NvKSBEZWxldGVDb25kaXRpb25WYXJpYWJs
ZSgoJihfc28pLT50aW1lb19jb25kKSkKKyNkZWZpbmUgU09DS19DT05EKF9zbykgKCYoX3NvKS0+
dGltZW9fY29uZCkKKyNlbHNlCisjaWZkZWYgSU5WQVJJQU5UUworI2RlZmluZSBTT0NLQlVGX0xP
Q0tfSU5JVChfc2IsIF9uYW1lKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorCXB0aHJlYWRfbXV0ZXhhdHRyX3QgbXV0ZXhfYXR0cjsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlwdGhyZWFkX211dGV4YXR0cl9pbml0KCZt
dXRleF9hdHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCXB0aHJlYWRfbXV0
ZXhhdHRyX3NldHR5cGUoJm11dGV4X2F0dHIsIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyk7ICBc
CisJcHRocmVhZF9tdXRleF9pbml0KFNPQ0tCVUZfTVRYKF9zYiksICZtdXRleF9hdHRyKTsgICAg
ICAgICAgICAgICAgIFwKKwlwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KCZtdXRleF9hdHRyKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5l
IFNPQ0tCVUZfTE9DS19JTklUKF9zYiwgX25hbWUpIFwKKwlwdGhyZWFkX211dGV4X2luaXQoU09D
S0JVRl9NVFgoX3NiKSwgTlVMTCkKKyNlbmRpZgorI2RlZmluZSBTT0NLQlVGX0xPQ0tfREVTVFJP
WShfc2IpIHB0aHJlYWRfbXV0ZXhfZGVzdHJveShTT0NLQlVGX01UWChfc2IpKQorI2RlZmluZSBT
T0NLQlVGX0NPTkRfSU5JVChfc2IpIHB0aHJlYWRfY29uZF9pbml0KCgmKF9zYiktPnNiX2NvbmQp
LCBOVUxMKQorI2RlZmluZSBTT0NLQlVGX0NPTkRfREVTVFJPWShfc2IpIHB0aHJlYWRfY29uZF9k
ZXN0cm95KCgmKF9zYiktPnNiX2NvbmQpKQorI2RlZmluZSBTT0NLX0NPTkRfSU5JVChfc28pIHB0
aHJlYWRfY29uZF9pbml0KCgmKF9zbyktPnRpbWVvX2NvbmQpLCBOVUxMKQorI2RlZmluZSBTT0NL
X0NPTkRfREVTVFJPWShfc28pIHB0aHJlYWRfY29uZF9kZXN0cm95KCgmKF9zbyktPnRpbWVvX2Nv
bmQpKQorI2RlZmluZSBTT0NLX0NPTkQoX3NvKSAoJihfc28pLT50aW1lb19jb25kKQorI2VuZGlm
CisvKl9fVXNlcnNwYWNlX18gU09DS0JVRl9MT0NLKF9zYikgaXMgbm93IGRlZmluZWQgaW4gbmV0
aW5ldC9zY3RwX3Byb2Nlc3NfbG9jay5oICovCisKKy8qICNkZWZpbmUJU09DS0JVRl9PV05FRChf
c2IpCQltdHhfb3duZWQoU09DS0JVRl9NVFgoX3NiKSkgdW51c2VkICovCisvKl9fVXNlcnNwYWNl
X18gU09DS0JVRl9VTkxPQ0soX3NiKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJv
Y2Vzc19sb2NrLmggKi8KKworLypfX1VzZXJzcGFjZV9fIFNPQ0tCVUZfTE9DS19BU1NFUlQoX3Ni
KSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8KKworLyog
I2RlZmluZQlTT0NLQlVGX1VOTE9DS19BU1NFUlQoX3NiKQltdHhfYXNzZXJ0KFNPQ0tCVUZfTVRY
KF9zYiksIE1BX05PVE9XTkVEKSAgIHVudXNlZCAqLworCisvKgorICogUGVyLXNvY2tldCBtdXRl
eDogd2UgcmV1c2UgdGhlIHJlY2VpdmUgc29ja2V0IGJ1ZmZlciBtdXRleCBmb3Igc3BhY2UKKyAq
IGVmZmljaWVuY3kuICBUaGlzIGRlY2lzaW9uIHNob3VsZCBwcm9iYWJseSBiZSByZXZpc2l0ZWQg
YXMgd2Ugb3B0aW1pemUKKyAqIGxvY2tpbmcgZm9yIHRoZSBzb2NrZXQgY29kZS4KKyAqLworI2Rl
ZmluZQlTT0NLX01UWChfc28pCQkJU09DS0JVRl9NVFgoJihfc28pLT5zb19yY3YpCisvKl9fVXNl
cnNwYWNlX18gU09DS19MT0NLKF9zbykgaXMgbm93IGRlZmluZWQgaW4gbmV0aW5ldC9zY3RwX3By
b2Nlc3NfbG9jay5oICovCisKKy8qICNkZWZpbmUJU09DS19PV05FRChfc28pCQkJU09DS0JVRl9P
V05FRCgmKF9zbyktPnNvX3JjdikgdW51c2VkICovCisvKl9fVXNlcnNwYWNlX18gU09DS19VTkxP
Q0soX3NvKSBpcyBub3cgZGVmaW5lZCBpbiBuZXRpbmV0L3NjdHBfcHJvY2Vzc19sb2NrLmggKi8K
KworI2RlZmluZQlTT0NLX0xPQ0tfQVNTRVJUKF9zbykJCVNPQ0tCVUZfTE9DS19BU1NFUlQoJihf
c28pLT5zb19yY3YpCisKKy8qCisgKiBTb2NrZXQgc3RhdGUgYml0cy4KKyAqCisgKiBIaXN0b3Jp
Y2FsbHksIHRoaXMgYml0cyB3ZXJlIGFsbCBrZXB0IGluIHRoZSBzb19zdGF0ZSBmaWVsZC4gIEZv
cgorICogbG9ja2luZyByZWFzb25zLCB0aGV5IGFyZSBub3cgaW4gbXVsdGlwbGUgZmllbGRzLCBh
cyB0aGV5IGFyZQorICogbG9ja2VkIGRpZmZlcmVudGx5LiAgc29fc3RhdGUgbWFpbnRhaW5zIGJh
c2ljIHNvY2tldCBzdGF0ZSBwcm90ZWN0ZWQKKyAqIGJ5IHRoZSBzb2NrZXQgbG9jay4gIHNvX3Fz
dGF0ZSBob2xkcyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc29ja2V0CisgKiBhY2NlcHQgcXVldWVz
LiAgRWFjaCBzb2NrZXQgYnVmZmVyIGFsc28gaGFzIGEgc3RhdGUgZmllbGQgaG9sZGluZworICog
aW5mb3JtYXRpb24gcmVsZXZhbnQgdG8gdGhhdCBzb2NrZXQgYnVmZmVyIChjYW4ndCBzZW5kLCBy
Y3YpLiAgTWFueQorICogZmllbGRzIHdpbGwgYmUgcmVhZCB3aXRob3V0IGxvY2tzIHRvIGltcHJv
dmUgcGVyZm9ybWFuY2UgYW5kIGF2b2lkCisgKiBsb2NrIG9yZGVyIGlzc3Vlcy4gIEhvd2V2ZXIs
IHRoaXMgYXBwcm9hY2ggbXVzdCBiZSB1c2VkIHdpdGggY2F1dGlvbi4KKyAqLworI2RlZmluZQlT
U19OT0ZEUkVGCQkweDAwMDEJLyogbm8gZmlsZSB0YWJsZSByZWYgYW55IG1vcmUgKi8KKyNkZWZp
bmUJU1NfSVNDT05ORUNURUQJCTB4MDAwMgkvKiBzb2NrZXQgY29ubmVjdGVkIHRvIGEgcGVlciAq
LworI2RlZmluZQlTU19JU0NPTk5FQ1RJTkcJCTB4MDAwNAkvKiBpbiBwcm9jZXNzIG9mIGNvbm5l
Y3RpbmcgdG8gcGVlciAqLworI2RlZmluZQlTU19JU0RJU0NPTk5FQ1RJTkcJMHgwMDA4CS8qIGlu
IHByb2Nlc3Mgb2YgZGlzY29ubmVjdGluZyAqLworI2RlZmluZQlTU19OQklPCQkJMHgwMTAwCS8q
IG5vbi1ibG9ja2luZyBvcHMgKi8KKyNkZWZpbmUJU1NfQVNZTkMJCTB4MDIwMAkvKiBhc3luYyBp
L28gbm90aWZ5ICovCisjZGVmaW5lCVNTX0lTQ09ORklSTUlORwkJMHgwNDAwCS8qIGRlY2lkaW5n
IHRvIGFjY2VwdCBjb25uZWN0aW9uIHJlcSAqLworI2RlZmluZQlTU19JU0RJU0NPTk5FQ1RFRAkw
eDIwMDAJLyogc29ja2V0IGRpc2Nvbm5lY3RlZCBmcm9tIHBlZXIgKi8KKy8qCisgKiBQcm90b2Nv
bHMgY2FuIG1hcmsgYSBzb2NrZXQgYXMgU1NfUFJPVE9SRUYgdG8gaW5kaWNhdGUgdGhhdCwgZm9s
bG93aW5nCisgKiBwcnVfZGV0YWNoLCB0aGV5IHN0aWxsIHdhbnQgdGhlIHNvY2tldCB0byBwZXJz
aXN0LCBhbmQgd2lsbCBmcmVlIGl0CisgKiB0aGVtc2VsdmVzIHdoZW4gdGhleSBhcmUgZG9uZS4g
IFByb3RvY29scyBzaG91bGQgb25seSBldmVyIGNhbGwgc29mcmVlKCkKKyAqIGZvbGxvd2luZyBz
ZXR0aW5nIHRoaXMgZmxhZyBpbiBwcnVfZGV0YWNoKCksIGFuZCBuZXZlciBvdGhlcndpc2UsIGFz
CisgKiBzb2ZyZWUoKSBieXBhc3NlcyBzb2NrZXQgcmVmZXJlbmNlIGNvdW50aW5nLgorICovCisj
ZGVmaW5lCVNTX1BST1RPUkVGCQkweDQwMDAJLyogc3Ryb25nIHByb3RvY29sIHJlZmVyZW5jZSAq
LworCisvKgorICogU29ja2V0IHN0YXRlIGJpdHMgbm93IHN0b3JlZCBpbiB0aGUgc29ja2V0IGJ1
ZmZlciBzdGF0ZSBmaWVsZC4KKyAqLworI2RlZmluZQlTQlNfQ0FOVFNFTkRNT1JFCTB4MDAxMAkv
KiBjYW4ndCBzZW5kIG1vcmUgZGF0YSB0byBwZWVyICovCisjZGVmaW5lCVNCU19DQU5UUkNWTU9S
RQkJMHgwMDIwCS8qIGNhbid0IHJlY2VpdmUgbW9yZSBkYXRhIGZyb20gcGVlciAqLworI2RlZmlu
ZQlTQlNfUkNWQVRNQVJLCQkweDAwNDAJLyogYXQgbWFyayBvbiBpbnB1dCAqLworCisvKgorICog
U29ja2V0IHN0YXRlIGJpdHMgc3RvcmVkIGluIHNvX3FzdGF0ZS4KKyAqLworI2RlZmluZQlTUV9J
TkNPTVAJCTB4MDgwMAkvKiB1bmFjY2VwdGVkLCBpbmNvbXBsZXRlIGNvbm5lY3Rpb24gKi8KKyNk
ZWZpbmUJU1FfQ09NUAkJCTB4MTAwMAkvKiB1bmFjY2VwdGVkLCBjb21wbGV0ZSBjb25uZWN0aW9u
ICovCisKKy8qCisgKiBFeHRlcm5hbGl6ZWQgZm9ybSBvZiBzdHJ1Y3Qgc29ja2V0IHVzZWQgYnkg
dGhlIHN5c2N0bCgzKSBpbnRlcmZhY2UuCisgKi8KK3N0cnVjdCB4c29ja2V0IHsKKwlzaXplX3QJ
eHNvX2xlbjsJLyogbGVuZ3RoIG9mIHRoaXMgc3RydWN0dXJlICovCisJc3RydWN0CXNvY2tldCAq
eHNvX3NvOwkvKiBtYWtlcyBhIGNvbnZlbmllbnQgaGFuZGxlIHNvbWV0aW1lcyAqLworCXNob3J0
CXNvX3R5cGU7CisJc2hvcnQJc29fb3B0aW9uczsKKwlzaG9ydAlzb19saW5nZXI7CisJc2hvcnQJ
c29fc3RhdGU7CisJY2FkZHJfdAlzb19wY2I7CQkvKiBhbm90aGVyIGNvbnZlbmllbnQgaGFuZGxl
ICovCisJaW50CXhzb19wcm90b2NvbDsKKwlpbnQJeHNvX2ZhbWlseTsKKwl1X3Nob3J0CXNvX3Fs
ZW47CisJdV9zaG9ydAlzb19pbmNxbGVuOworCXVfc2hvcnQJc29fcWxpbWl0OworCXNob3J0CXNv
X3RpbWVvOworCXVfc2hvcnQJc29fZXJyb3I7CisJcGlkX3QJc29fcGdpZDsKKwl1X2xvbmcJc29f
b29ibWFyazsKKwlzdHJ1Y3QgeHNvY2tidWYgeworCQl1X2ludAlzYl9jYzsKKwkJdV9pbnQJc2Jf
aGl3YXQ7CisJCXVfaW50CXNiX21iY250OworCQl1X2ludAlzYl9tYm1heDsKKwkJaW50CXNiX2xv
d2F0OworCQlpbnQJc2JfdGltZW87CisJCXNob3J0CXNiX2ZsYWdzOworCX0gc29fcmN2LCBzb19z
bmQ7CisJdWlkX3QJc29fdWlkOwkJLyogWFhYICovCit9OworCisjaWYgZGVmaW5lZChfS0VSTkVM
KQorCisKKy8qCisgKiBNYWNyb3MgZm9yIHNvY2tldHMgYW5kIHNvY2tldCBidWZmZXJpbmcuCisg
Ki8KKworLyoKKyAqIERvIHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBvdGhlciBzaWRlIHdoZW4gSS9P
IGlzIHBvc3NpYmxlPworICovCisjZGVmaW5lCXNiX25vdGlmeShzYikJKCgoc2IpLT5zYl9mbGFn
cyAmIChTQl9XQUlUIHwgU0JfU0VMIHwgU0JfQVNZTkMgfCBcCisgICAgU0JfVVBDQUxMIHwgU0Jf
QUlPIHwgU0JfS05PVEUpKSAhPSAwKQorCisvKgorICogSG93IG11Y2ggc3BhY2UgaXMgdGhlcmUg
aW4gYSBzb2NrZXQgYnVmZmVyIChzby0+c29fc25kIG9yIHNvLT5zb19yY3YpPworICogVGhpcyBp
cyBwcm9ibGVtYXRpY2FsIGlmIHRoZSBmaWVsZHMgYXJlIHVuc2lnbmVkLCBhcyB0aGUgc3BhY2Ug
bWlnaHQKKyAqIHN0aWxsIGJlIG5lZ2F0aXZlIChjYyA+IGhpd2F0IG9yIG1iY250ID4gbWJtYXgp
LiAgU2hvdWxkIGRldGVjdAorICogb3ZlcmZsb3cgYW5kIHJldHVybiAwLiAgU2hvdWxkIHVzZSAi
bG1pbiIgYnV0IGl0IGRvZXNuJ3QgZXhpc3Qgbm93LgorICovCisjZGVmaW5lCXNic3BhY2Uoc2Ip
IFwKKyAgICAoKGxvbmcpIGltaW4oKGludCkoKHNiKS0+c2JfaGl3YXQgLSAoc2IpLT5zYl9jYyks
IFwKKwkgKGludCkoKHNiKS0+c2JfbWJtYXggLSAoc2IpLT5zYl9tYmNudCkpKQorCisvKiBkbyB3
ZSBoYXZlIHRvIHNlbmQgYWxsIGF0IG9uY2Ugb24gYSBzb2NrZXQ/ICovCisjZGVmaW5lCXNvc2Vu
ZGFsbGF0b25jZShzbykgXAorICAgICgoc28pLT5zb19wcm90by0+cHJfZmxhZ3MgJiBQUl9BVE9N
SUMpCisKKy8qIGNhbiB3ZSByZWFkIHNvbWV0aGluZyBmcm9tIHNvPyAqLworI2RlZmluZQlzb3Jl
YWRhYmxlKHNvKSBcCisgICAgKChzbyktPnNvX3Jjdi5zYl9jYyA+PSAoc28pLT5zb19yY3Yuc2Jf
bG93YXQgfHwgXAorCSgoc28pLT5zb19yY3Yuc2Jfc3RhdGUgJiBTQlNfQ0FOVFJDVk1PUkUpIHx8
IFwKKwkhVEFJTFFfRU1QVFkoJihzbyktPnNvX2NvbXApIHx8IChzbyktPnNvX2Vycm9yKQorCisv
KiBjYW4gd2Ugd3JpdGUgc29tZXRoaW5nIHRvIHNvPyAqLworI2RlZmluZQlzb3dyaXRlYWJsZShz
bykgXAorICAgICgoc2JzcGFjZSgmKHNvKS0+c29fc25kKSA+PSAoc28pLT5zb19zbmQuc2JfbG93
YXQgJiYgXAorCSgoKHNvKS0+c29fc3RhdGUmU1NfSVNDT05ORUNURUQpIHx8IFwKKwkgICgoc28p
LT5zb19wcm90by0+cHJfZmxhZ3MmUFJfQ09OTlJFUVVJUkVEKT09MCkpIHx8IFwKKyAgICAgKChz
byktPnNvX3NuZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8IFwKKyAgICAgKHNvKS0+
c29fZXJyb3IpCisKKy8qIGFkanVzdCBjb3VudGVycyBpbiBzYiByZWZsZWN0aW5nIGFsbG9jYXRp
b24gb2YgbSAqLworI2RlZmluZQlzYmFsbG9jKHNiLCBtKSB7IFwKKwkoc2IpLT5zYl9jYyArPSAo
bSktPm1fbGVuOyBcCisJaWYgKChtKS0+bV90eXBlICE9IE1UX0RBVEEgJiYgKG0pLT5tX3R5cGUg
IT0gTVRfT09CREFUQSkgXAorCQkoc2IpLT5zYl9jdGwgKz0gKG0pLT5tX2xlbjsgXAorCShzYikt
PnNiX21iY250ICs9IE1TSVpFOyBcCisJaWYgKChtKS0+bV9mbGFncyAmIE1fRVhUKSBcCisJCShz
YiktPnNiX21iY250ICs9IChtKS0+bV9leHQuZXh0X3NpemU7IFwKK30KKworLyogYWRqdXN0IGNv
dW50ZXJzIGluIHNiIHJlZmxlY3RpbmcgZnJlZWluZyBvZiBtICovCisjZGVmaW5lCXNiZnJlZShz
YiwgbSkgeyBcCisJKHNiKS0+c2JfY2MgLT0gKG0pLT5tX2xlbjsgXAorCWlmICgobSktPm1fdHlw
ZSAhPSBNVF9EQVRBICYmIChtKS0+bV90eXBlICE9IE1UX09PQkRBVEEpIFwKKwkJKHNiKS0+c2Jf
Y3RsIC09IChtKS0+bV9sZW47IFwKKwkoc2IpLT5zYl9tYmNudCAtPSBNU0laRTsgXAorCWlmICgo
bSktPm1fZmxhZ3MgJiBNX0VYVCkgXAorCQkoc2IpLT5zYl9tYmNudCAtPSAobSktPm1fZXh0LmV4
dF9zaXplOyBcCisJaWYgKChzYiktPnNiX3NuZHB0ciA9PSAobSkpIHsgXAorCQkoc2IpLT5zYl9z
bmRwdHIgPSBOVUxMOyBcCisJCShzYiktPnNiX3NuZHB0cm9mZiA9IDA7IFwKKwl9IFwKKwlpZiAo
KHNiKS0+c2Jfc25kcHRyb2ZmICE9IDApIFwKKwkJKHNiKS0+c2Jfc25kcHRyb2ZmIC09IChtKS0+
bV9sZW47IFwKK30KKworLyoKKyAqIHNvcmVmKCkvc29yZWxlKCkgcmVmLWNvdW50IHRoZSBzb2Nr
ZXQgc3RydWN0dXJlLiAgTm90ZSB0aGF0IHlvdSBtdXN0CisgKiBzdGlsbCBleHBsaWNpdGx5IGNs
b3NlIHRoZSBzb2NrZXQsIGJ1dCB0aGUgbGFzdCByZWYgY291bnQgd2lsbCBmcmVlCisgKiB0aGUg
c3RydWN0dXJlLgorICovCisjZGVmaW5lCXNvcmVmKHNvKSBkbyB7CQkJCQkJCVwKKwlTT0NLX0xP
Q0tfQVNTRVJUKHNvKTsJCQkJCQlcCisJKysoc28pLT5zb19jb3VudDsJCQkJCQlcCit9IHdoaWxl
ICgwKQorCisjZGVmaW5lCXNvcmVsZShzbykgZG8gewkJCQkJCQlcCisJQUNDRVBUX0xPQ0tfQVNT
RVJUKCk7CQkJCQkJXAorCVNPQ0tfTE9DS19BU1NFUlQoc28pOwkJCQkJCVwKKwlLQVNTRVJUKChz
byktPnNvX2NvdW50ID4gMCwgKCJzb3JlbGUiKSk7CQkJXAorCWlmICgtLShzbyktPnNvX2NvdW50
ID09IDApCQkJCQlcCisJCXNvZnJlZShzbyk7CQkJCQkJXAorCWVsc2UgewkJCQkJCQkJXAorCQlT
T0NLX1VOTE9DSyhzbyk7CQkJCQlcCisJCUFDQ0VQVF9VTkxPQ0soKTsJCQkJCVwKKwl9CQkJCQkJ
CQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCXNvdHJ5ZnJlZShzbykgZG8gewkJCQkJCVwKKwlB
Q0NFUFRfTE9DS19BU1NFUlQoKTsJCQkJCQlcCisJU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJ
XAorCWlmICgoc28pLT5zb19jb3VudCA9PSAwKQkJCQkJXAorCQlzb2ZyZWUoc28pOwkJCQkJCVwK
KwllbHNlIHsJCQkJCQkJCVwKKwkJU09DS19VTkxPQ0soc28pOwkJCQkJXAorCQlBQ0NFUFRfVU5M
T0NLKCk7CQkJCQlcCisJfQkJCQkJCQkJXAorfSB3aGlsZSgwKQorCisvKgorICogSW4gc29yd2Fr
ZXVwKCkgYW5kIHNvd3dha2V1cCgpLCBhY3F1aXJlIHRoZSBzb2NrZXQgYnVmZmVyIGxvY2sgdG8K
KyAqIGF2b2lkIGEgbm9uLWF0b21pYyB0ZXN0LWFuZC13YWtldXAuICBIb3dldmVyLCBzb3dha2V1
cCBpcworICogcmVzcG9uc2libGUgZm9yIHJlbGVhc2luZyB0aGUgbG9jayBpZiBpdCBpcyBjYWxs
ZWQuICBXZSB1bmxvY2sgb25seQorICogaWYgd2UgZG9uJ3QgY2FsbCBpbnRvIHNvd2FrZXVwLiAg
SWYgYW55IGNvZGUgaXMgaW50cm9kdWNlZCB0aGF0CisgKiBkaXJlY3RseSBpbnZva2VzIHRoZSB1
bmRlcmx5aW5nIHNvd2FrZXVwKCkgcHJpbWl0aXZlcywgaXQgbXVzdAorICogbWFpbnRhaW4gdGhl
IHNhbWUgc2VtYW50aWNzLgorICovCisjZGVmaW5lCXNvcndha2V1cF9sb2NrZWQoc28pIGRvIHsJ
CQkJCVwKKwlTT0NLQlVGX0xPQ0tfQVNTRVJUKCYoc28pLT5zb19yY3YpOwkJCQlcCisJaWYgKHNi
X25vdGlmeSgmKHNvKS0+c29fcmN2KSkJCQkJCVwKKwkJc293YWtldXAoKHNvKSwgJihzbyktPnNv
X3Jjdik7CSAJCQlcCisJZWxzZQkJCQkJCQkJXAorCQlTT0NLQlVGX1VOTE9DSygmKHNvKS0+c29f
cmN2KTsJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZQlzb3J3YWtldXAoc28pIGRvIHsJCQkJ
CQlcCisJU09DS0JVRl9MT0NLKCYoc28pLT5zb19yY3YpOwkJCQkJXAorCXNvcndha2V1cF9sb2Nr
ZWQoc28pOwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUJc293d2FrZXVwX2xvY2tlZChz
bykgZG8gewkJCQkJXAorCVNPQ0tCVUZfTE9DS19BU1NFUlQoJihzbyktPnNvX3NuZCk7CQkJCVwK
KwlpZiAoc2Jfbm90aWZ5KCYoc28pLT5zb19zbmQpKQkJCQkJXAorCQlzb3dha2V1cCgoc28pLCAm
KHNvKS0+c29fc25kKTsgCQkJCVwKKwllbHNlCQkJCQkJCQlcCisJCVNPQ0tCVUZfVU5MT0NLKCYo
c28pLT5zb19zbmQpOwkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lCXNvd3dha2V1cChzbykg
ZG8gewkJCQkJCVwKKwlTT0NLQlVGX0xPQ0soJihzbyktPnNvX3NuZCk7CQkJCQlcCisJc293d2Fr
ZXVwX2xvY2tlZChzbyk7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyoKKyAqIEFyZ3VtZW50IHN0
cnVjdHVyZSBmb3Igc29zZXRvcHQgZXQgc2VxLiAgVGhpcyBpcyBpbiB0aGUgS0VSTkVMCisgKiBz
ZWN0aW9uIGJlY2F1c2UgaXQgd2lsbCBuZXZlciBiZSB2aXNpYmxlIHRvIHVzZXIgY29kZS4KKyAq
LworZW51bSBzb3B0X2RpciB7IFNPUFRfR0VULCBTT1BUX1NFVCB9Oworc3RydWN0IHNvY2tvcHQg
eworCWVudW0Jc29wdF9kaXIgc29wdF9kaXI7IC8qIGlzIHRoaXMgYSBnZXQgb3IgYSBzZXQ/ICov
CisJaW50CXNvcHRfbGV2ZWw7CS8qIHNlY29uZCBhcmcgb2YgW2dzXWV0c29ja29wdCAqLworCWlu
dAlzb3B0X25hbWU7CS8qIHRoaXJkIGFyZyBvZiBbZ3NdZXRzb2Nrb3B0ICovCisJdm9pZCAgICpz
b3B0X3ZhbDsJLyogZm91cnRoIGFyZyBvZiBbZ3NdZXRzb2Nrb3B0ICovCisJc2l6ZV90CXNvcHRf
dmFsc2l6ZTsJLyogKGFsbW9zdCkgZmlmdGggYXJnIG9mIFtnc11ldHNvY2tvcHQgKi8KKwlzdHJ1
Y3QJdGhyZWFkICpzb3B0X3RkOyAvKiBjYWxsaW5nIHRocmVhZCBvciBudWxsIGlmIGtlcm5lbCAq
LworfTsKKworc3RydWN0IGFjY2VwdF9maWx0ZXIgeworCWNoYXIJYWNjZl9uYW1lWzE2XTsKKwl2
b2lkCSgqYWNjZl9jYWxsYmFjaykKKwkJKHN0cnVjdCBzb2NrZXQgKnNvLCB2b2lkICphcmcsIGlu
dCB3YWl0ZmxhZyk7CisJdm9pZCAqCSgqYWNjZl9jcmVhdGUpCisJCShzdHJ1Y3Qgc29ja2V0ICpz
bywgY2hhciAqYXJnKTsKKwl2b2lkCSgqYWNjZl9kZXN0cm95KQorCQkoc3RydWN0IHNvY2tldCAq
c28pOworCVNMSVNUX0VOVFJZKGFjY2VwdF9maWx0ZXIpIGFjY2ZfbmV4dDsKK307CisKK2V4dGVy
biBpbnQJbWF4c29ja2V0czsKK2V4dGVybiB1X2xvbmcJc2JfbWF4OworZXh0ZXJuIHN0cnVjdCB1
bWFfem9uZSAqc29ja2V0X3pvbmU7CitleHRlcm4gc29fZ2VuX3Qgc29fZ2VuY250OworCitzdHJ1
Y3QgbWJ1ZjsKK3N0cnVjdCBzb2NrYWRkcjsKK3N0cnVjdCB1Y3JlZDsKK3N0cnVjdCB1aW87CisK
Ky8qCisgKiBGcm9tIHVpcGNfc29ja2V0IGFuZCBmcmllbmRzCisgKi8KK2ludAlkb19nZXRvcHRf
YWNjZXB0X2ZpbHRlcihzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpOwor
aW50CWRvX3NldG9wdF9hY2NlcHRfZmlsdGVyKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29j
a29wdCAqc29wdCk7CitpbnQJc29fc2V0c29ja29wdChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGxl
dmVsLCBpbnQgb3B0bmFtZSwKKwkgICAgdm9pZCAqb3B0dmFsLCBzaXplX3Qgb3B0bGVuKTsKK2lu
dAlzb2NrYXJncyhzdHJ1Y3QgbWJ1ZiAqKm1wLCBjYWRkcl90IGJ1ZiwgaW50IGJ1ZmxlbiwgaW50
IHR5cGUpOworaW50CWdldHNvY2thZGRyKHN0cnVjdCBzb2NrYWRkciAqKm5hbXAsIGNhZGRyX3Qg
dWFkZHIsIHNpemVfdCBsZW4pOwordm9pZAlzYmFwcGVuZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHN0
cnVjdCBtYnVmICptKTsKK3ZvaWQJc2JhcHBlbmRfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYiwg
c3RydWN0IG1idWYgKm0pOwordm9pZAlzYmFwcGVuZHN0cmVhbShzdHJ1Y3Qgc29ja2J1ZiAqc2Is
IHN0cnVjdCBtYnVmICptKTsKK3ZvaWQJc2JhcHBlbmRzdHJlYW1fbG9ja2VkKHN0cnVjdCBzb2Nr
YnVmICpzYiwgc3RydWN0IG1idWYgKm0pOworaW50CXNiYXBwZW5kYWRkcihzdHJ1Y3Qgc29ja2J1
ZiAqc2IsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYXNhLAorCSAgICBzdHJ1Y3QgbWJ1ZiAqbTAs
IHN0cnVjdCBtYnVmICpjb250cm9sKTsKK2ludAlzYmFwcGVuZGFkZHJfbG9ja2VkKHN0cnVjdCBz
b2NrYnVmICpzYiwgY29uc3Qgc3RydWN0IHNvY2thZGRyICphc2EsCisJICAgIHN0cnVjdCBtYnVm
ICptMCwgc3RydWN0IG1idWYgKmNvbnRyb2wpOworaW50CXNiYXBwZW5kY29udHJvbChzdHJ1Y3Qg
c29ja2J1ZiAqc2IsIHN0cnVjdCBtYnVmICptMCwKKwkgICAgc3RydWN0IG1idWYgKmNvbnRyb2wp
OworaW50CXNiYXBwZW5kY29udHJvbF9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3Qg
bWJ1ZiAqbTAsCisJICAgIHN0cnVjdCBtYnVmICpjb250cm9sKTsKK3ZvaWQJc2JhcHBlbmRyZWNv
cmQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbTApOwordm9pZAlzYmFwcGVuZHJl
Y29yZF9sb2NrZWQoc3RydWN0IHNvY2tidWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbTApOwordm9pZAlz
YmNoZWNrKHN0cnVjdCBzb2NrYnVmICpzYik7Cit2b2lkCXNiY29tcHJlc3Moc3RydWN0IHNvY2ti
dWYgKnNiLCBzdHJ1Y3QgbWJ1ZiAqbSwgc3RydWN0IG1idWYgKm4pOworc3RydWN0IG1idWYgKgor
CXNiY3JlYXRlY29udHJvbChjYWRkcl90IHAsIGludCBzaXplLCBpbnQgdHlwZSwgaW50IGxldmVs
KTsKK3ZvaWQJc2JkZXN0cm95KHN0cnVjdCBzb2NrYnVmICpzYiwgc3RydWN0IHNvY2tldCAqc28p
Owordm9pZAlzYmRyb3Aoc3RydWN0IHNvY2tidWYgKnNiLCBpbnQgbGVuKTsKK3ZvaWQJc2Jkcm9w
X2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIGludCBsZW4pOwordm9pZAlzYmRyb3ByZWNvcmQo
c3RydWN0IHNvY2tidWYgKnNiKTsKK3ZvaWQJc2Jkcm9wcmVjb3JkX2xvY2tlZChzdHJ1Y3Qgc29j
a2J1ZiAqc2IpOwordm9pZAlzYmZsdXNoKHN0cnVjdCBzb2NrYnVmICpzYik7Cit2b2lkCXNiZmx1
c2hfbG9ja2VkKHN0cnVjdCBzb2NrYnVmICpzYik7Cit2b2lkCXNicmVsZWFzZShzdHJ1Y3Qgc29j
a2J1ZiAqc2IsIHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJc2JyZWxlYXNlX2xvY2tlZChzdHJ1
Y3Qgc29ja2J1ZiAqc2IsIHN0cnVjdCBzb2NrZXQgKnNvKTsKK2ludAlzYnJlc2VydmUoc3RydWN0
IHNvY2tidWYgKnNiLCB1X2xvbmcgY2MsIHN0cnVjdCBzb2NrZXQgKnNvLAorCSAgICBzdHJ1Y3Qg
dGhyZWFkICp0ZCk7CitpbnQJc2JyZXNlcnZlX2xvY2tlZChzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVf
bG9uZyBjYywgc3RydWN0IHNvY2tldCAqc28sCisJICAgIHN0cnVjdCB0aHJlYWQgKnRkKTsKK3N0
cnVjdCBtYnVmICoKKwlzYnNuZHB0cihzdHJ1Y3Qgc29ja2J1ZiAqc2IsIHVfaW50IG9mZiwgdV9p
bnQgbGVuLCB1X2ludCAqbW9mZik7Cit2b2lkCXNidG94c29ja2J1ZihzdHJ1Y3Qgc29ja2J1ZiAq
c2IsIHN0cnVjdCB4c29ja2J1ZiAqeHNiKTsKK2ludAlzYndhaXQoc3RydWN0IHNvY2tidWYgKnNi
KTsKK2ludAlzYmxvY2soc3RydWN0IHNvY2tidWYgKnNiLCBpbnQgZmxhZ3MpOwordm9pZAlzYnVu
bG9jayhzdHJ1Y3Qgc29ja2J1ZiAqc2IpOwordm9pZAlzb2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNv
KTsKK2ludAlzb2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICoqbmFt
KTsKK2ludAlzb2NoZWNrdWlkKHN0cnVjdCBzb2NrZXQgKnNvLCB1aWRfdCB1aWQpOworaW50CXNv
YmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0sIHN0cnVjdCB0aHJl
YWQgKnRkKTsKK3ZvaWQJc29jYW50cmN2bW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNv
Y2FudHJjdm1vcmVfbG9ja2VkKHN0cnVjdCBzb2NrZXQgKnNvKTsKK3ZvaWQJc29jYW50c2VuZG1v
cmUoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2NhbnRzZW5kbW9yZV9sb2NrZWQoc3RydWN0
IHNvY2tldCAqc28pOworaW50CXNvY2xvc2Uoc3RydWN0IHNvY2tldCAqc28pOworaW50CXNvY29u
bmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICpuYW0sIHN0cnVjdCB0aHJl
YWQgKnRkKTsKK2ludAlzb2Nvbm5lY3QyKHN0cnVjdCBzb2NrZXQgKnNvMSwgc3RydWN0IHNvY2tl
dCAqc28yKTsKK2ludAlzb2Nvd19zZXR1cChzdHJ1Y3QgbWJ1ZiAqbTAsIHN0cnVjdCB1aW8gKnVp
byk7CitpbnQJc29jcmVhdGUoaW50IGRvbSwgc3RydWN0IHNvY2tldCAqKmFzbywgaW50IHR5cGUs
IGludCBwcm90bywKKwkgICAgc3RydWN0IHVjcmVkICpjcmVkLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7
CitpbnQJc29kaXNjb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvKTsKK3N0cnVjdAlzb2NrYWRkciAq
c29kdXBzb2NrYWRkcihjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhLCBpbnQgbWZsYWdzKTsKK3Zv
aWQJc29mcmVlKHN0cnVjdCBzb2NrZXQgKnNvKTsKK2ludAlzb2dldG9wdChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpOwordm9pZAlzb2hhc291dG9mYmFuZChzdHJ1Y3Qg
c29ja2V0ICpzbyk7Cit2b2lkCXNvaXNjb25uZWN0ZWQoc3RydWN0IHNvY2tldCAqc28pOwordm9p
ZAlzb2lzY29ubmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNvaXNkaXNjb25uZWN0
ZWQoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2lzZGlzY29ubmVjdGluZyhzdHJ1Y3Qgc29j
a2V0ICpzbyk7CitpbnQJc29saXN0ZW4oc3RydWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nLCBz
dHJ1Y3QgdGhyZWFkICp0ZCk7Cit2b2lkCXNvbGlzdGVuX3Byb3RvKHN0cnVjdCBzb2NrZXQgKnNv
LCBpbnQgYmFja2xvZyk7CitpbnQJc29saXN0ZW5fcHJvdG9fY2hlY2soc3RydWN0IHNvY2tldCAq
c28pOworc3RydWN0IHNvY2tldCAqCisJc29uZXdjb25uKHN0cnVjdCBzb2NrZXQgKmhlYWQsIGlu
dCBjb25uc3RhdHVzKTsKK2ludAlzb29wdGNvcHlpbihzdHJ1Y3Qgc29ja29wdCAqc29wdCwgdm9p
ZCAqYnVmLCBzaXplX3QgbGVuLCBzaXplX3QgbWlubGVuKTsKK2ludAlzb29wdGNvcHlvdXQoc3Ry
dWN0IHNvY2tvcHQgKnNvcHQsIGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IGxlbik7CisKKy8qIFhY
WDsgcHJlcGFyZSBtYnVmIGZvciAoX19GcmVlQlNEX18gPCAzKSByb3V0aW5lcy4gKi8KK2ludAlz
b29wdF9nZXRtKHN0cnVjdCBzb2Nrb3B0ICpzb3B0LCBzdHJ1Y3QgbWJ1ZiAqKm1wKTsKK2ludAlz
b29wdF9tY29weWluKHN0cnVjdCBzb2Nrb3B0ICpzb3B0LCBzdHJ1Y3QgbWJ1ZiAqbSk7CitpbnQJ
c29vcHRfbWNvcHlvdXQoc3RydWN0IHNvY2tvcHQgKnNvcHQsIHN0cnVjdCBtYnVmICptKTsKKwor
aW50CXNvcG9sbChzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGV2ZW50cywgc3RydWN0IHVjcmVkICph
Y3RpdmVfY3JlZCwKKwkgICAgc3RydWN0IHRocmVhZCAqdGQpOworaW50CXNvcG9sbF9nZW5lcmlj
KHN0cnVjdCBzb2NrZXQgKnNvLCBpbnQgZXZlbnRzLAorCSAgICBzdHJ1Y3QgdWNyZWQgKmFjdGl2
ZV9jcmVkLCBzdHJ1Y3QgdGhyZWFkICp0ZCk7CitpbnQJc29yZWNlaXZlKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipwYWRkciwgc3RydWN0IHVpbyAqdWlvLAorCSAgICBzdHJ1
Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1idWYgKipjb250cm9scCwgaW50ICpmbGFnc3ApOworaW50
CXNvcmVjZWl2ZV9nZW5lcmljKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKipw
YWRkciwKKwkgICAgc3RydWN0IHVpbyAqdWlvLCBzdHJ1Y3QgbWJ1ZiAqKm1wMCwgc3RydWN0IG1i
dWYgKipjb250cm9scCwKKwkgICAgaW50ICpmbGFnc3ApOworaW50CXNvcmVzZXJ2ZShzdHJ1Y3Qg
c29ja2V0ICpzbywgdV9sb25nIHNuZGNjLCB1X2xvbmcgcmN2Y2MpOwordm9pZAlzb3JmbHVzaChz
dHJ1Y3Qgc29ja2V0ICpzbyk7CitpbnQJc29zZW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qg
c29ja2FkZHIgKmFkZHIsIHN0cnVjdCB1aW8gKnVpbywKKwkgICAgc3RydWN0IG1idWYgKnRvcCwg
c3RydWN0IG1idWYgKmNvbnRyb2wsIGludCBmbGFncywKKwkgICAgc3RydWN0IHRocmVhZCAqdGQp
OworaW50CXNvc2VuZF9kZ3JhbShzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICph
ZGRyLAorCSAgICBzdHJ1Y3QgdWlvICp1aW8sIHN0cnVjdCBtYnVmICp0b3AsIHN0cnVjdCBtYnVm
ICpjb250cm9sLAorCSAgICBpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAlzb3Nl
bmRfZ2VuZXJpYyhzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyLAorCSAg
ICBzdHJ1Y3QgdWlvICp1aW8sIHN0cnVjdCBtYnVmICp0b3AsIHN0cnVjdCBtYnVmICpjb250cm9s
LAorCSAgICBpbnQgZmxhZ3MsIHN0cnVjdCB0aHJlYWQgKnRkKTsKK2ludAlzb3NldG9wdChzdHJ1
Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2tvcHQgKnNvcHQpOworaW50CXNvc2h1dGRvd24oc3Ry
dWN0IHNvY2tldCAqc28sIGludCBob3cpOwordm9pZAlzb3RveHNvY2tldChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHhzb2NrZXQgKnhzbyk7Cit2b2lkCXNvd2FrZXVwKHN0cnVjdCBzb2NrZXQg
KnNvLCBzdHJ1Y3Qgc29ja2J1ZiAqc2IpOworCisjaWZkZWYgU09DS0JVRl9ERUJVRwordm9pZAlz
Ymxhc3RyZWNvcmRjaGsoc3RydWN0IHNvY2tidWYgKiwgY29uc3QgY2hhciAqLCBpbnQpOworI2Rl
ZmluZQlTQkxBU1RSRUNPUkRDSEsoc2IpCXNibGFzdHJlY29yZGNoaygoc2IpLCBfX0ZJTEVfXywg
X19MSU5FX18pCisKK3ZvaWQJc2JsYXN0bWJ1ZmNoayhzdHJ1Y3Qgc29ja2J1ZiAqLCBjb25zdCBj
aGFyICosIGludCk7CisjZGVmaW5lCVNCTEFTVE1CVUZDSEsoc2IpCXNibGFzdG1idWZjaGsoKHNi
KSwgX19GSUxFX18sIF9fTElORV9fKQorI2Vsc2UKKyNkZWZpbmUJU0JMQVNUUkVDT1JEQ0hLKHNi
KSAgICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUJU0JMQVNUTUJVRkNISyhzYikgICAgICAgIC8q
IG5vdGhpbmcgKi8KKyNlbmRpZiAvKiBTT0NLQlVGX0RFQlVHICovCisKKy8qCisgKiBBY2NlcHQg
ZmlsdGVyIGZ1bmN0aW9ucyAoZHVoKS4KKyAqLworaW50CWFjY2VwdF9maWx0X2FkZChzdHJ1Y3Qg
YWNjZXB0X2ZpbHRlciAqZmlsdCk7CitpbnQJYWNjZXB0X2ZpbHRfZGVsKGNoYXIgKm5hbWUpOwor
c3RydWN0CWFjY2VwdF9maWx0ZXIgKmFjY2VwdF9maWx0X2dldChjaGFyICpuYW1lKTsKKyNpZmRl
ZiBBQ0NFUFRfRklMVEVSX01PRAorI2lmZGVmIFNZU0NUTF9ERUNMCitTWVNDVExfREVDTChfbmV0
X2luZXRfYWNjZik7CisjZW5kaWYKK2ludAlhY2NlcHRfZmlsdF9nZW5lcmljX21vZF9ldmVudCht
b2R1bGVfdCBtb2QsIGludCBldmVudCwgdm9pZCAqZGF0YSk7CisjZW5kaWYKKworI2VuZGlmIC8q
IF9LRVJORUwgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qICAgICAgICAgICAgICAgICAg
IF9fVXNlcnNwYWNlX18gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor
LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tKi8KKy8qIHRoaXMgbmV3IF9fVXNlcnNwYWNlX18gc2VjdGlvbiBpcyB0byBjb3B5IHBv
cnRpb25zIG9mIHRoZSBfS0VSTkVMIGJsb2NrCisgKiAgYWJvdmUgaW50bywgYXZvaWRpbmcgaGF2
aW5nIHRvIHBvcnQgdGhlIGVudGlyZSB0aGluZyBhdCBvbmNlLi4uCisgKiAgRm9yIGZ1bmN0aW9u
IHByb3RvdHlwZXMsIHRoZSBmdWxsIGJvZGllcyBhcmUgaW4gdXNlcl9zb2NrZXQuYyAuCisgKi8K
KyNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX18pCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIC0tLSBmdW5jdGlvbiBw
cm90b3R5cGVzIChpbXBsZW1lbnRlZCBpbiB1c2VyX3NvY2tldC5jKSAtLS0gKi8KKy8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
K3ZvaWQJc29pc2Nvbm5lY3Rpbmcoc3RydWN0IHNvY2tldCAqc28pOwordm9pZAlzb2lzZGlzY29u
bmVjdGluZyhzdHJ1Y3Qgc29ja2V0ICpzbyk7Cit2b2lkCXNvaXNjb25uZWN0ZWQoc3RydWN0IHNv
Y2tldCAqc28pOworc3RydWN0IHNvY2tldCAqIHNvbmV3Y29ubihzdHJ1Y3Qgc29ja2V0ICpoZWFk
LCBpbnQgY29ubnN0YXR1cyk7Cit2b2lkCXNvY2FudHJjdm1vcmUoc3RydWN0IHNvY2tldCAqc28p
Owordm9pZAlzb2NhbnRzZW5kbW9yZShzdHJ1Y3Qgc29ja2V0ICpzbyk7CisKKworCisvKiAtLS0t
LS0tLS0tLS0tLSAqLworLyogLS0tIG1hY3JvcyAtLS0gKi8KKy8qIC0tLS0tLS0tLS0tLS0tICov
CisKKyNkZWZpbmUJc29yZWYoc28pIGRvIHsJCQkJCQkJXAorCVNPQ0tfTE9DS19BU1NFUlQoc28p
OwkJCQkJCVwKKwkrKyhzbyktPnNvX2NvdW50OwkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZp
bmUJc29yZWxlKHNvKSBkbyB7CQkJCQkJCVwKKwlBQ0NFUFRfTE9DS19BU1NFUlQoKTsJCQkJCQlc
CisJU09DS19MT0NLX0FTU0VSVChzbyk7CQkJCQkJXAorCUtBU1NFUlQoKHNvKS0+c29fY291bnQg
PiAwLCAoInNvcmVsZSIpKTsJCQlcCisJaWYgKC0tKHNvKS0+c29fY291bnQgPT0gMCkJCQkJCVwK
KwkJc29mcmVlKHNvKTsJCQkJCQlcCisJZWxzZSB7CQkJCQkJCQlcCisJCVNPQ0tfVU5MT0NLKHNv
KTsJCQkJCVwKKwkJQUNDRVBUX1VOTE9DSygpOwkJCQkJXAorCX0JCQkJCQkJCVwKK30gd2hpbGUg
KDApCisKKworLyogcmVwbGFjaW5nIGltaW4gd2l0aCBtaW4gKHVzZXJfZW52aXJvbm1lbnQuaCkg
Ki8KKyNkZWZpbmUJc2JzcGFjZShzYikgXAorICAgICgobG9uZykgbWluKChpbnQpKChzYiktPnNi
X2hpd2F0IC0gKHNiKS0+c2JfY2MpLCBcCisJIChpbnQpKChzYiktPnNiX21ibWF4IC0gKHNiKS0+
c2JfbWJjbnQpKSkKKworLyogZG8gd2UgaGF2ZSB0byBzZW5kIGFsbCBhdCBvbmNlIG9uIGEgc29j
a2V0PyAqLworI2RlZmluZQlzb3NlbmRhbGxhdG9uY2Uoc28pIFwKKyAgICAoKHNvKS0+c29fcHJv
dG8tPnByX2ZsYWdzICYgUFJfQVRPTUlDKQorCisvKiBjYW4gd2UgcmVhZCBzb21ldGhpbmcgZnJv
bSBzbz8gKi8KKyNkZWZpbmUJc29yZWFkYWJsZShzbykgXAorICAgICgoaW50KSgoc28pLT5zb19y
Y3Yuc2JfY2MpID49IChzbyktPnNvX3Jjdi5zYl9sb3dhdCB8fCBcCisJKChzbyktPnNvX3Jjdi5z
Yl9zdGF0ZSAmIFNCU19DQU5UUkNWTU9SRSkgfHwgXAorCSFUQUlMUV9FTVBUWSgmKHNvKS0+c29f
Y29tcCkgfHwgKHNvKS0+c29fZXJyb3IpCisKKyNpZiAwICAvKiAgb3JpZ2luYWwgKi8KKyNkZWZp
bmUgUFJfQ09OTlJFUVVJUkVEIDB4MDQgIC8qIGZyb20gc3lzL3Byb3Rvc3cuaCAibmVlZGVkIiBm
b3Igc293cml0ZWFibGUgKi8KKyNkZWZpbmUJc293cml0ZWFibGUoc28pIFwKKyAgICAoKHNic3Bh
Y2UoJihzbyktPnNvX3NuZCkgPj0gKHNvKS0+c29fc25kLnNiX2xvd2F0ICYmIFwKKwkoKChzbykt
PnNvX3N0YXRlJlNTX0lTQ09OTkVDVEVEKSB8fCBcCisJICAoKHNvKS0+c29fcHJvdG8tPnByX2Zs
YWdzJlBSX0NPTk5SRVFVSVJFRCk9PTApKSB8fCBcCisgICAgICgoc28pLT5zb19zbmQuc2Jfc3Rh
dGUgJiBTQlNfQ0FOVFNFTkRNT1JFKSB8fCBcCisgICAgIChzbyktPnNvX2Vycm9yKQorI2Vsc2Ug
IC8qIGxpbmUgd2l0aCBQUl9DT05OUkVRVUlSRUQgcmVtb3ZlZCAqLworLyogY2FuIHdlIHdyaXRl
IHNvbWV0aGluZyB0byBzbz8gKi8KKyNkZWZpbmUJc293cml0ZWFibGUoc28pIFwKKyAgICAoKHNi
c3BhY2UoJihzbyktPnNvX3NuZCkgPj0gKHNvKS0+c29fc25kLnNiX2xvd2F0ICYmIFwKKyAgICAg
ICgoKHNvKS0+c29fc3RhdGUmU1NfSVNDT05ORUNURUQpKSkgfHwgICAgICAgICAgICAgIFwKKyAg
ICAgKChzbyktPnNvX3NuZC5zYl9zdGF0ZSAmIFNCU19DQU5UU0VORE1PUkUpIHx8IFwKKyAgICAg
KHNvKS0+c29fZXJyb3IpCisjZW5kaWYKKworZXh0ZXJuIHZvaWQgc29saXN0ZW5fcHJvdG8oc3Ry
dWN0IHNvY2tldCAqc28sIGludCBiYWNrbG9nKTsKK2V4dGVybiBpbnQgc29saXN0ZW5fcHJvdG9f
Y2hlY2soc3RydWN0IHNvY2tldCAqc28pOworZXh0ZXJuIGludCBzY3RwX2xpc3RlbihzdHJ1Y3Qg
c29ja2V0ICpzbywgaW50IGJhY2tsb2csIHN0cnVjdCBwcm9jICpwKTsKK2V4dGVybiB2b2lkIHNv
Y2FudHJjdm1vcmVfbG9ja2VkKHN0cnVjdCBzb2NrZXQgKnNvKTsKK2V4dGVybiBpbnQgc2N0cF9i
aW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOworZXh0ZXJuIGlu
dCBzY3RwNl9iaW5kKHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIsIHZv
aWQgKnByb2MpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKK2V4dGVybiBpbnQgc2N0cGNv
bm5fYmluZChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2thZGRyICphZGRyKTsKKyNlbmRp
ZgorZXh0ZXJuIGludCBzY3RwX2FjY2VwdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0IHNvY2th
ZGRyICoqYWRkcik7CitleHRlcm4gaW50IHNjdHBfYXR0YWNoKHN0cnVjdCBzb2NrZXQgKnNvLCBp
bnQgcHJvdG8sIHVpbnQzMl90IHZyZl9pZCk7CitleHRlcm4gaW50IHNjdHA2X2F0dGFjaChzdHJ1
Y3Qgc29ja2V0ICpzbywgaW50IHByb3RvLCB1aW50MzJfdCB2cmZfaWQpOworZXh0ZXJuIGludCBz
Y3RwX2Fib3J0KHN0cnVjdCBzb2NrZXQgKnNvKTsKK2V4dGVybiBpbnQgc2N0cDZfYWJvcnQoc3Ry
dWN0IHNvY2tldCAqc28pOworZXh0ZXJuIHZvaWQgc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpz
byk7CitleHRlcm4gaW50IHNvYWNjZXB0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1Y3Qgc29ja2Fk
ZHIgKipuYW0pOworZXh0ZXJuIGludCBzb2xpc3RlbihzdHJ1Y3Qgc29ja2V0ICpzbywgaW50IGJh
Y2tsb2cpOworZXh0ZXJuIGludCAgc29yZXNlcnZlKHN0cnVjdCBzb2NrZXQgKnNvLCB1X2xvbmcg
c25kY2MsIHVfbG9uZyByY3ZjYyk7CitleHRlcm4gdm9pZCBzb3dha2V1cChzdHJ1Y3Qgc29ja2V0
ICpzbywgc3RydWN0IHNvY2tidWYgKnNiKTsKK2V4dGVybiB2b2lkIHdha2V1cCh2b2lkICppZGVu
dCwgc3RydWN0IHNvY2tldCAqc28pOyAvKl9fVXNlcnNwYWNlX18gKi8KK2V4dGVybiBpbnQgdWlv
bW92ZSh2b2lkICpjcCwgaW50IG4sIHN0cnVjdCB1aW8gKnVpbyk7CitleHRlcm4gaW50IHNid2Fp
dChzdHJ1Y3Qgc29ja2J1ZiAqc2IpOworZXh0ZXJuIGludCBzb2Rpc2Nvbm5lY3Qoc3RydWN0IHNv
Y2tldCAqc28pOworZXh0ZXJuIGludCBzb2Nvbm5lY3Qoc3RydWN0IHNvY2tldCAqc28sIHN0cnVj
dCBzb2NrYWRkciAqbmFtKTsKK2V4dGVybiBpbnQgc2N0cF9kaXNjb25uZWN0KHN0cnVjdCBzb2Nr
ZXQgKnNvKTsKK2V4dGVybiBpbnQgc2N0cF9jb25uZWN0KHN0cnVjdCBzb2NrZXQgKnNvLCBzdHJ1
Y3Qgc29ja2FkZHIgKmFkZHIpOworZXh0ZXJuIGludCBzY3RwNl9jb25uZWN0KHN0cnVjdCBzb2Nr
ZXQgKnNvLCBzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpOworI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2Vf
XykKK2V4dGVybiBpbnQgc2N0cGNvbm5fY29ubmVjdChzdHJ1Y3Qgc29ja2V0ICpzbywgc3RydWN0
IHNvY2thZGRyICphZGRyKTsKKyNlbmRpZgorZXh0ZXJuIHZvaWQgc2N0cF9maW5pc2godm9pZCk7
CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LworLyogLS0tLS0gIG1hY3JvcyBjb3BpZWQgZnJvbSBhYm92ZSAtLS0tICovCisvKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIERv
IHdlIG5lZWQgdG8gbm90aWZ5IHRoZSBvdGhlciBzaWRlIHdoZW4gSS9PIGlzIHBvc3NpYmxlPwor
ICovCisjZGVmaW5lCXNiX25vdGlmeShzYikJKCgoc2IpLT5zYl9mbGFncyAmIChTQl9XQUlUIHwg
U0JfU0VMIHwgU0JfQVNZTkMgfCBcCisgICAgU0JfVVBDQUxMIHwgU0JfQUlPIHwgU0JfS05PVEUp
KSAhPSAwKQorCisKKy8qCisgKiBJbiBzb3J3YWtldXAoKSBhbmQgc293d2FrZXVwKCksIGFjcXVp
cmUgdGhlIHNvY2tldCBidWZmZXIgbG9jayB0bworICogYXZvaWQgYSBub24tYXRvbWljIHRlc3Qt
YW5kLXdha2V1cC4gIEhvd2V2ZXIsIHNvd2FrZXVwIGlzCisgKiByZXNwb25zaWJsZSBmb3IgcmVs
ZWFzaW5nIHRoZSBsb2NrIGlmIGl0IGlzIGNhbGxlZC4gIFdlIHVubG9jayBvbmx5CisgKiBpZiB3
ZSBkb24ndCBjYWxsIGludG8gc293YWtldXAuICBJZiBhbnkgY29kZSBpcyBpbnRyb2R1Y2VkIHRo
YXQKKyAqIGRpcmVjdGx5IGludm9rZXMgdGhlIHVuZGVybHlpbmcgc293YWtldXAoKSBwcmltaXRp
dmVzLCBpdCBtdXN0CisgKiBtYWludGFpbiB0aGUgc2FtZSBzZW1hbnRpY3MuCisgKi8KKyNkZWZp
bmUJc29yd2FrZXVwX2xvY2tlZChzbykgZG8gewkJCQkJXAorCVNPQ0tCVUZfTE9DS19BU1NFUlQo
JihzbyktPnNvX3Jjdik7CQkJCVwKKwlpZiAoc2Jfbm90aWZ5KCYoc28pLT5zb19yY3YpKQkJCQkJ
XAorCQlzb3dha2V1cCgoc28pLCAmKHNvKS0+c29fcmN2KTsJIAkJCVwKKwllbHNlCQkJCQkJCQlc
CisJCVNPQ0tCVUZfVU5MT0NLKCYoc28pLT5zb19yY3YpOwkJCQlcCit9IHdoaWxlICgwKQorCisj
ZGVmaW5lCXNvcndha2V1cChzbykgZG8gewkJCQkJCVwKKwlTT0NLQlVGX0xPQ0soJihzbyktPnNv
X3Jjdik7CQkJCQlcCisJc29yd2FrZXVwX2xvY2tlZChzbyk7CQkJCQkJXAorfSB3aGlsZSAoMCkK
KworI2RlZmluZQlzb3d3YWtldXBfbG9ja2VkKHNvKSBkbyB7CQkJCQlcCisJU09DS0JVRl9MT0NL
X0FTU0VSVCgmKHNvKS0+c29fc25kKTsJCQkJXAorCWlmIChzYl9ub3RpZnkoJihzbyktPnNvX3Nu
ZCkpCQkJCQlcCisJCXNvd2FrZXVwKChzbyksICYoc28pLT5zb19zbmQpOyAJCQkJXAorCWVsc2UJ
CQkJCQkJCVwKKwkJU09DS0JVRl9VTkxPQ0soJihzbyktPnNvX3NuZCk7CQkJCVwKK30gd2hpbGUg
KDApCisKKyNkZWZpbmUJc293d2FrZXVwKHNvKSBkbyB7CQkJCQkJXAorCVNPQ0tCVUZfTE9DSygm
KHNvKS0+c29fc25kKTsJCQkJCVwKKwlzb3d3YWtldXBfbG9ja2VkKHNvKTsJCQkJCQlcCit9IHdo
aWxlICgwKQorCisKKworI2VuZGlmIC8qIF9fVXNlcnNwYWNlX18gKi8KKworI2VuZGlmIC8qICFf
U1lTX1NPQ0tFVFZBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2Vy
X3VtYS5oIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX3VtYS5oCmluZGV4IGU2OWRlMjliYjJk
MWQ2NDM0YjhiMjlhZTc3NWFkOGMyZTQ4YzUzOTEuLjFiZGVmZGI4MDk2OGFlOWM0OWVmNGViMGEy
NWZhMWE5Y2U5YTRiNDIgMTAwNzU1Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl91bWEu
aAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfdW1hLmgKQEAgLTAsMCArMSw5OCBAQAor
LyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxMCBCcmFkIFBlbm9mZgorICogQ29weXJpZ2h0
IChjKSAyMDA5LTIwMTAgSHVtYWlyYSBLYW1hbAorICogQ29weXJpZ2h0IChjKSAyMDExLTIwMTIg
SXJlbmUgUnVlbmdlbGVyCisgKiBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBNaWNoYWVsIFR1ZXhl
bgorICoKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn
IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfVVNFUl9VTUFfSF8K
KyNkZWZpbmUgX1VTRVJfVU1BX0hfCisKKyNkZWZpbmUgVU1BX1pGTEFHX0ZVTEwJCTB4NDAwMDAw
MDAJLyogUmVhY2hlZCB1el9tYXhwYWdlcyAqLworI2RlZmluZSBVTUFfQUxJR05fUFRSCShzaXpl
b2Yodm9pZCAqKSAtIDEpCS8qIEFsaWdubWVudCBmaXQgZm9yIHB0ciAqLworCisvKiBfX1VzZXJz
cGFjZV9fIEFsbCB0aGVzZSBkZWZpbml0aW9ucyB3aWxsIGNoYW5nZSBmb3IKK3VzZXJzcGFjZSBV
bml2ZXJzYWwgTWVtb3J5IEFsbG9jYXRvciAoVU1BKS4gVGhlc2UgYXJlIGluY2x1ZGVkCitmb3Ig
cmVmZXJlbmNlIHB1cnBvc2VzIGFuZCB0byBhdm9pZCBjb21waWxlIGVycm9ycyBmb3IgdGhlIHRp
bWUgYmVpbmcuCisqLwordHlwZWRlZiBpbnQgKCp1bWFfY3Rvcikodm9pZCAqbWVtLCBpbnQgc2l6
ZSwgdm9pZCAqYXJnLCBpbnQgZmxhZ3MpOwordHlwZWRlZiB2b2lkICgqdW1hX2R0b3IpKHZvaWQg
Km1lbSwgaW50IHNpemUsIHZvaWQgKmFyZyk7Cit0eXBlZGVmIGludCAoKnVtYV9pbml0KSh2b2lk
ICptZW0sIGludCBzaXplLCBpbnQgZmxhZ3MpOwordHlwZWRlZiB2b2lkICgqdW1hX2ZpbmkpKHZv
aWQgKm1lbSwgaW50IHNpemUpOwordHlwZWRlZiBzdHJ1Y3QgdW1hX3pvbmUgKiB1bWFfem9uZV90
OwordHlwZWRlZiBzdHJ1Y3QgdW1hX2tlZyAqIHVtYV9rZWdfdDsKKworc3RydWN0IHVtYV9jYWNo
ZSB7CisgICAgaW50IHN0dWI7IC8qIFRPRE8gX19Vc2Vyc3BhY2VfXyAqLworfTsKKworc3RydWN0
IHVtYV9rZWcgeworICAgIGludCBzdHViOyAvKiBUT0RPIF9fVXNlcnNwYWNlX18gKi8KK307CisK
K3N0cnVjdCB1bWFfem9uZSB7CisJY2hhcgkJKnV6X25hbWU7CS8qIFRleHQgbmFtZSBvZiB0aGUg
em9uZSAqLworCXN0cnVjdCBtdHgJKnV6X2xvY2s7CS8qIExvY2sgZm9yIHRoZSB6b25lIChrZWcn
cyBsb2NrKSAqLworCXVtYV9rZWdfdAl1el9rZWc7CQkvKiBPdXIgdW5kZXJseWluZyBLZWcgKi8K
KworCUxJU1RfRU5UUlkodW1hX3pvbmUpCXV6X2xpbms7CS8qIExpc3Qgb2YgYWxsIHpvbmVzIGlu
IGtlZyAqLworCUxJU1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnVsbF9idWNrZXQ7CS8qIGZ1bGwg
YnVja2V0cyAqLworCUxJU1RfSEVBRCgsdW1hX2J1Y2tldCkJdXpfZnJlZV9idWNrZXQ7CS8qIEJ1
Y2tldHMgZm9yIGZyZWVzICovCisKKwl1bWFfY3Rvcgl1el9jdG9yOwkvKiBDb25zdHJ1Y3RvciBm
b3IgZWFjaCBhbGxvY2F0aW9uICovCisJdW1hX2R0b3IJdXpfZHRvcjsJLyogRGVzdHJ1Y3RvciAq
LworCXVtYV9pbml0CXV6X2luaXQ7CS8qIEluaXRpYWxpemVyIGZvciBlYWNoIGl0ZW0gKi8KKwl1
bWFfZmluaQl1el9maW5pOwkvKiBEaXNjYXJkcyBtZW1vcnkgKi8KKworCXVfaW50NjRfdAl1el9h
bGxvY3M7CS8qIFRvdGFsIG51bWJlciBvZiBhbGxvY2F0aW9ucyAqLworCXVfaW50NjRfdAl1el9m
cmVlczsJLyogVG90YWwgbnVtYmVyIG9mIGZyZWVzICovCisJdV9pbnQ2NF90CXV6X2ZhaWxzOwkv
KiBUb3RhbCBudW1iZXIgb2YgYWxsb2MgZmFpbHVyZXMgKi8KKwl1aW50MTZfdAl1el9maWxsczsJ
LyogT3V0c3RhbmRpbmcgYnVja2V0IGZpbGxzICovCisJdWludDE2X3QJdXpfY291bnQ7CS8qIEhp
Z2hlc3QgdmFsdWUgdWJfcHRyIGNhbiBoYXZlICovCisKKwkvKgorCSAqIFRoaXMgSEFTIHRvIGJl
IHRoZSBsYXN0IGl0ZW0gYmVjYXVzZSB3ZSBhZGp1c3QgdGhlIHpvbmUgc2l6ZQorCSAqIGJhc2Vk
IG9uIE5DUFUgYW5kIHRoZW4gYWxsb2NhdGUgdGhlIHNwYWNlIGZvciB0aGUgem9uZXMuCisJICov
CisJc3RydWN0IHVtYV9jYWNoZQl1el9jcHVbMV07CS8qIFBlciBjcHUgY2FjaGVzICovCit9Owor
CisvKiBQcm90b3R5cGUgKi8KK3VtYV96b25lX3QKK3VtYV96Y3JlYXRlKGNoYXIgKm5hbWUsIHNp
emVfdCBzaXplLCB1bWFfY3RvciBjdG9yLCB1bWFfZHRvciBkdG9yLAorCSAgICB1bWFfaW5pdCB1
bWluaXQsIHVtYV9maW5pIGZpbmksIGludCBhbGlnbiwgdV9pbnQzMl90IGZsYWdzKTsKKworCisj
ZGVmaW5lIHVtYV96b25lX3NldF9tYXgoem9uZSwgbnVtYmVyKSAvKiBzdHViIFRPRE8gX19Vc2Vy
c3BhY2VfXyAqLworCit1bWFfem9uZV90Cit1bWFfemNyZWF0ZShjaGFyICpuYW1lLCBzaXplX3Qg
c2l6ZSwgdW1hX2N0b3IgY3RvciwgdW1hX2R0b3IgZHRvciwKKwkgICAgdW1hX2luaXQgdW1pbml0
LCB1bWFfZmluaSBmaW5pLCBpbnQgYWxpZ24sIHVfaW50MzJfdCBmbGFncykKK3sKKyAgICByZXR1
cm4gTlVMTDsgLyogc3R1YiBUT0RPIF9fVXNlcnNwYWNlX18uIEFsc28gcGxhY2UgaW1wbGVtZW50
YXRpb24gaW4gYSBzZXBhcmF0ZSAuYyBmaWxlICovCisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvdXNyc2N0cGxpYi91c3JzY3RwLmggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzcnNj
dHAuaAppbmRleCBlNjlkZTI5YmIyZDFkNjQzNGI4YjI5YWU3NzVhZDhjMmU0OGM1MzkxLi5lOTMz
YzE0NWVmYjUwNzQzN2NiMGFiMWFiZjE3NTk1ZjkzOTNhYmE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c3JzY3RwbGliL3VzcnNjdHAuaAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMv
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzcnNjdHAu
aApAQCAtMCwwICsxLDEyODAgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5LTIwMTAgQnJh
ZCBQZW5vZmYKKyAqIENvcHlyaWdodCAoYykgMjAwOS0yMDEwIEh1bWFpcmEgS2FtYWwKKyAqIENv
cHlyaWdodCAoYykgMjAxMS0yMDEyIElyZW5lIFJ1ZW5nZWxlcgorICogQ29weXJpZ2h0IChjKSAy
MDExLTIwMTIgTWljaGFlbCBUdWV4ZW4KKyAqCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgX19VU1JTQ1RQX0hfXworI2RlZmluZSBfX1VTUlNDVFBfSF9fCisKKyNpZmRlZiAg
X19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgor
I2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIF9XSU4zMgorI2lmZGVmIF9NU0NfVkVSCisj
cHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkKKyNlbmRpZgorI2luY2x1ZGUgPHdpbnNvY2sy
Lmg+CisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NvY2tldC5o
PgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaWZuZGVmIE1TR19OT1RJRklD
QVRJT04KKy8qIFRoaXMgZGVmaW5pdGlvbiBNVVNUIGJlIGluIHN5bmMgd2l0aCB1c3JzY3RwbGli
L3VzZXJfc29ja2V0dmFyLmggKi8KKyNkZWZpbmUgTVNHX05PVElGSUNBVElPTiAweDIwMDAKKyNl
bmRpZgorCisjaWZuZGVmIElQUFJPVE9fU0NUUAorLyogVGhpcyBpcyB0aGUgSUFOQSBhc3NpZ25l
ZCBwcm90b2NvbCBudW1iZXIgb2YgU0NUUC4gKi8KKyNkZWZpbmUgSVBQUk9UT19TQ1RQIDEzMgor
I2VuZGlmCisKKyNpZmRlZiBfV0lOMzIKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBfTVNDX1ZF
UiA+PSAxNjAwCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjZWxpZiBkZWZpbmVkKFNDVFBfU1RESU5U
X0lOQ0xVREUpCisjaW5jbHVkZSBTQ1RQX1NURElOVF9JTkNMVURFCisjZWxzZQorI2RlZmluZSB1
aW50OF90ICAgdW5zaWduZWQgX19pbnQ4CisjZGVmaW5lIHVpbnQxNl90ICB1bnNpZ25lZCBfX2lu
dDE2CisjZGVmaW5lIHVpbnQzMl90ICB1bnNpZ25lZCBfX2ludDMyCisjZGVmaW5lIHVpbnQ2NF90
ICB1bnNpZ25lZCBfX2ludDY0CisjZGVmaW5lIGludDE2X3QgICBfX2ludDE2CisjZGVmaW5lIGlu
dDMyX3QgICBfX2ludDMyCisjZW5kaWYKKworI2RlZmluZSBzc2l6ZV90ICAgX19pbnQ2NAorI2Rl
ZmluZSBNU0dfRU9SICAgMHg4CisjaWZuZGVmIEVXT1VMREJMT0NLCisjZGVmaW5lIEVXT1VMREJM
T0NLICBXU0FFV09VTERCTE9DSworI2VuZGlmCisjaWZuZGVmIEVJTlBST0dSRVNTCisjZGVmaW5l
IEVJTlBST0dSRVNTICBXU0FFSU5QUk9HUkVTUworI2VuZGlmCisjZGVmaW5lIFNIVVRfUkQgICAg
MQorI2RlZmluZSBTSFVUX1dSICAgIDIKKyNkZWZpbmUgU0hVVF9SRFdSICAzCisjZW5kaWYKKwor
dHlwZWRlZiB1aW50MzJfdCBzY3RwX2Fzc29jX3Q7CisKKyNpZiBkZWZpbmVkKF9XSU4zMikgJiYg
ZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgcGFjayAocHVzaCwgMSkKKyNkZWZpbmUgU0NUUF9Q
QUNLRUQKKyNlbHNlCisjZGVmaW5lIFNDVFBfUEFDS0VEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp
CisjZW5kaWYKKworc3RydWN0IHNjdHBfY29tbW9uX2hlYWRlciB7CisJdWludDE2X3Qgc291cmNl
X3BvcnQ7CisJdWludDE2X3QgZGVzdGluYXRpb25fcG9ydDsKKwl1aW50MzJfdCB2ZXJpZmljYXRp
b25fdGFnOworCXVpbnQzMl90IGNyYzMyYzsKK30gU0NUUF9QQUNLRUQ7CisKKyNpZiBkZWZpbmVk
KF9XSU4zMikgJiYgZGVmaW5lZChfTVNDX1ZFUikKKyNwcmFnbWEgcGFjayhwb3ApCisjZW5kaWYK
KyN1bmRlZiBTQ1RQX1BBQ0tFRAorCisjZGVmaW5lIEFGX0NPTk4gMTIzCisvKiBUaGUgZGVmaW5p
dGlvbiBvZiBzdHJ1Y3Qgc29ja2FkZHJfY29ubiBNVVNUIGJlIGluCisgKiB0dW5lIHdpdGggb3Ro
ZXIgc29ja2FkZHJfKiBzdHJ1Y3R1cmVzLgorICovCisjaWYgZGVmaW5lZChfX0FQUExFX18pIHx8
IGRlZmluZWQoX19CaXRyaWdfXykgfHwgZGVmaW5lZChfX0RyYWdvbkZseV9fKSB8fCBcCisgICAg
ZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX09wZW5CU0RfXykgfHwgZGVmaW5lZChf
X05ldEJTRF9fKQorc3RydWN0IHNvY2thZGRyX2Nvbm4geworCXVpbnQ4X3Qgc2Nvbm5fbGVuOwor
CXVpbnQ4X3Qgc2Nvbm5fZmFtaWx5OworCXVpbnQxNl90IHNjb25uX3BvcnQ7CisJdm9pZCAqc2Nv
bm5fYWRkcjsKK307CisjZWxzZQorc3RydWN0IHNvY2thZGRyX2Nvbm4geworCXVpbnQxNl90IHNj
b25uX2ZhbWlseTsKKwl1aW50MTZfdCBzY29ubl9wb3J0OworCXZvaWQgKnNjb25uX2FkZHI7Cit9
OworI2VuZGlmCisKK3VuaW9uIHNjdHBfc29ja3N0b3JlIHsKKyNpZiBkZWZpbmVkKElORVQpCisJ
c3RydWN0IHNvY2thZGRyX2luIHNpbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSU5FVDYpCisJc3Ry
dWN0IHNvY2thZGRyX2luNiBzaW42OworI2VuZGlmCisJc3RydWN0IHNvY2thZGRyX2Nvbm4gc2Nv
bm47CisJc3RydWN0IHNvY2thZGRyIHNhOworfTsKKworI2RlZmluZSBTQ1RQX0ZVVFVSRV9BU1NP
QyAgMAorI2RlZmluZSBTQ1RQX0NVUlJFTlRfQVNTT0MgMQorI2RlZmluZSBTQ1RQX0FMTF9BU1NP
QyAgICAgMgorCisvKioqICBTdHJ1Y3R1cmVzIGFuZCBkZWZpbml0aW9ucyB0byB1c2UgdGhlIHNv
Y2tldCBBUEkgICoqKi8KKworI2RlZmluZSBTQ1RQX0FMSUdOX1JFU1ZfUEFEIDkyCisjZGVmaW5l
IFNDVFBfQUxJR05fUkVTVl9QQURfU0hPUlQgNzYKKworc3RydWN0IHNjdHBfcmN2aW5mbyB7CisJ
dWludDE2X3QgcmN2X3NpZDsKKwl1aW50MTZfdCByY3Zfc3NuOworCXVpbnQxNl90IHJjdl9mbGFn
czsKKwl1aW50MzJfdCByY3ZfcHBpZDsKKwl1aW50MzJfdCByY3ZfdHNuOworCXVpbnQzMl90IHJj
dl9jdW10c247CisJdWludDMyX3QgcmN2X2NvbnRleHQ7CisJc2N0cF9hc3NvY190IHJjdl9hc3Nv
Y19pZDsKK307CisKK3N0cnVjdCBzY3RwX254dGluZm8geworCXVpbnQxNl90IG54dF9zaWQ7CisJ
dWludDE2X3Qgbnh0X2ZsYWdzOworCXVpbnQzMl90IG54dF9wcGlkOworCXVpbnQzMl90IG54dF9s
ZW5ndGg7CisJc2N0cF9hc3NvY190IG54dF9hc3NvY19pZDsKK307CisKKyNkZWZpbmUgU0NUUF9O
T19ORVhUX01TRyAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIFNDVFBfTkVYVF9NU0dfQVZBSUwg
ICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX05FWFRfTVNHX0lTQ09NUExFVEUgICAweDAwMDIK
KyNkZWZpbmUgU0NUUF9ORVhUX01TR19JU19VTk9SREVSRUQgMHgwMDA0CisjZGVmaW5lIFNDVFBf
TkVYVF9NU0dfSVNfTk9USUZJQ0FUSU9OIDB4MDAwOAorCitzdHJ1Y3Qgc2N0cF9yZWN2dl9ybiB7
CisJc3RydWN0IHNjdHBfcmN2aW5mbyByZWN2dl9yY3ZpbmZvOworCXN0cnVjdCBzY3RwX254dGlu
Zm8gcmVjdnZfbnh0aW5mbzsKK307CisKKyNkZWZpbmUgU0NUUF9SRUNWVl9OT0lORk8gIDAKKyNk
ZWZpbmUgU0NUUF9SRUNWVl9SQ1ZJTkZPIDEKKyNkZWZpbmUgU0NUUF9SRUNWVl9OWFRJTkZPIDIK
KyNkZWZpbmUgU0NUUF9SRUNWVl9STiAgICAgIDMKKworI2RlZmluZSBTQ1RQX1NFTkRWX05PSU5G
TyAgIDAKKyNkZWZpbmUgU0NUUF9TRU5EVl9TTkRJTkZPICAxCisjZGVmaW5lIFNDVFBfU0VORFZf
UFJJTkZPICAgMgorI2RlZmluZSBTQ1RQX1NFTkRWX0FVVEhJTkZPIDMKKyNkZWZpbmUgU0NUUF9T
RU5EVl9TUEEgICAgICA0CisKKyNkZWZpbmUgU0NUUF9TRU5EX1NORElORk9fVkFMSUQgIDB4MDAw
MDAwMDEKKyNkZWZpbmUgU0NUUF9TRU5EX1BSSU5GT19WQUxJRCAgIDB4MDAwMDAwMDIKKyNkZWZp
bmUgU0NUUF9TRU5EX0FVVEhJTkZPX1ZBTElEIDB4MDAwMDAwMDQKKworc3RydWN0IHNjdHBfc25k
X2FsbF9jb21wbGV0ZXMgeworCXVpbnQxNl90IHNhbGxfc3RyZWFtOworCXVpbnQxNl90IHNhbGxf
ZmxhZ3M7CisJdWludDMyX3Qgc2FsbF9wcGlkOworCXVpbnQzMl90IHNhbGxfY29udGV4dDsKKwl1
aW50MzJfdCBzYWxsX251bV9zZW50OworCXVpbnQzMl90IHNhbGxfbnVtX2ZhaWxlZDsKK307CisK
K3N0cnVjdCBzY3RwX3NuZGluZm8geworCXVpbnQxNl90IHNuZF9zaWQ7CisJdWludDE2X3Qgc25k
X2ZsYWdzOworCXVpbnQzMl90IHNuZF9wcGlkOworCXVpbnQzMl90IHNuZF9jb250ZXh0OworCXNj
dHBfYXNzb2NfdCBzbmRfYXNzb2NfaWQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9wcmluZm8geworCXVp
bnQxNl90IHByX3BvbGljeTsKKwl1aW50MzJfdCBwcl92YWx1ZTsKK307CisKK3N0cnVjdCBzY3Rw
X2F1dGhpbmZvIHsKKwl1aW50MTZfdCBhdXRoX2tleW51bWJlcjsKK307CisKK3N0cnVjdCBzY3Rw
X3NlbmR2X3NwYSB7CisJdWludDMyX3Qgc2VuZHZfZmxhZ3M7CisJc3RydWN0IHNjdHBfc25kaW5m
byBzZW5kdl9zbmRpbmZvOworCXN0cnVjdCBzY3RwX3ByaW5mbyBzZW5kdl9wcmluZm87CisJc3Ry
dWN0IHNjdHBfYXV0aGluZm8gc2VuZHZfYXV0aGluZm87Cit9OworCitzdHJ1Y3Qgc2N0cF91ZHBl
bmNhcHMgeworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHN1ZV9hZGRyZXNzOworCXVpbnQzMl90
IHN1ZV9hc3NvY19pZDsKKwl1aW50MTZfdCBzdWVfcG9ydDsKK307CisKKy8qKioqKioqKiAgTm90
aWZpY2F0aW9ucyAgKioqKioqKioqKioqKiovCisKKy8qIG5vdGlmaWNhdGlvbiB0eXBlcyAqLwor
I2RlZmluZSBTQ1RQX0FTU09DX0NIQU5HRSAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5l
IFNDVFBfUEVFUl9BRERSX0NIQU5HRSAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgU0NUUF9S
RU1PVEVfRVJST1IgICAgICAgICAgICAgICAgIDB4MDAwMworI2RlZmluZSBTQ1RQX1NFTkRfRkFJ
TEVEICAgICAgICAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfU0hVVERPV05fRVZFTlQg
ICAgICAgICAgICAgICAweDAwMDUKKyNkZWZpbmUgU0NUUF9BREFQVEFUSU9OX0lORElDQVRJT04g
ICAgICAgIDB4MDAwNgorI2RlZmluZSBTQ1RQX1BBUlRJQUxfREVMSVZFUllfRVZFTlQgICAgICAg
MHgwMDA3CisjZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT05fRVZFTlQgICAgICAgICAweDAwMDgK
KyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVRfRVZFTlQgICAgICAgICAgIDB4MDAwOQorI2RlZmlu
ZSBTQ1RQX1NFTkRFUl9EUllfRVZFTlQgICAgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIFNDVFBf
Tk9USUZJQ0FUSU9OU19TVE9QUEVEX0VWRU5UICAweDAwMGIKKyNkZWZpbmUgU0NUUF9BU1NPQ19S
RVNFVF9FVkVOVCAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBTQ1RQX1NUUkVBTV9DSEFOR0Vf
RVZFTlQgICAgICAgICAgMHgwMDBkCisjZGVmaW5lIFNDVFBfU0VORF9GQUlMRURfRVZFTlQgICAg
ICAgICAgICAweDAwMGUKKworLyogbm90aWZpY2F0aW9uIGV2ZW50IHN0cnVjdHVyZXMgKi8KKwor
CisvKiBhc3NvY2lhdGlvbiBjaGFuZ2UgZXZlbnQgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX2NoYW5n
ZSB7CisJdWludDE2X3Qgc2FjX3R5cGU7CisJdWludDE2X3Qgc2FjX2ZsYWdzOworCXVpbnQzMl90
IHNhY19sZW5ndGg7CisJdWludDE2X3Qgc2FjX3N0YXRlOworCXVpbnQxNl90IHNhY19lcnJvcjsK
Kwl1aW50MTZfdCBzYWNfb3V0Ym91bmRfc3RyZWFtczsKKwl1aW50MTZfdCBzYWNfaW5ib3VuZF9z
dHJlYW1zOworCXNjdHBfYXNzb2NfdCBzYWNfYXNzb2NfaWQ7CisJdWludDhfdCBzYWNfaW5mb1td
OyAvKiBub3QgYXZhaWxhYmxlIHlldCAqLworfTsKKworLyogc2FjX3N0YXRlIHZhbHVlcyAqLwor
I2RlZmluZSBTQ1RQX0NPTU1fVVAgICAgICAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0NPTU1fTE9T
VCAgICAgIDB4MDAwMgorI2RlZmluZSBTQ1RQX1JFU1RBUlQgICAgICAgIDB4MDAwMworI2RlZmlu
ZSBTQ1RQX1NIVVRET1dOX0NPTVAgIDB4MDAwNAorI2RlZmluZSBTQ1RQX0NBTlRfU1RSX0FTU09D
IDB4MDAwNQorCisvKiBzYWNfaW5mbyB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BU1NPQ19TVVBQ
T1JUU19QUiAgICAgICAgMHgwMQorI2RlZmluZSBTQ1RQX0FTU09DX1NVUFBPUlRTX0FVVEggICAg
ICAweDAyCisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfQVNDT05GICAgIDB4MDMKKyNkZWZp
bmUgU0NUUF9BU1NPQ19TVVBQT1JUU19NVUxUSUJVRiAgMHgwNAorI2RlZmluZSBTQ1RQX0FTU09D
X1NVUFBPUlRTX1JFX0NPTkZJRyAweDA1CisjZGVmaW5lIFNDVFBfQVNTT0NfU1VQUE9SVFNfTUFY
ICAgICAgIDB4MDUKKworLyogQWRkcmVzcyBldmVudCAqLworc3RydWN0IHNjdHBfcGFkZHJfY2hh
bmdlIHsKKwl1aW50MTZfdCBzcGNfdHlwZTsKKwl1aW50MTZfdCBzcGNfZmxhZ3M7CisJdWludDMy
X3Qgc3BjX2xlbmd0aDsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzcGNfYWFkZHI7CisJdWlu
dDMyX3Qgc3BjX3N0YXRlOworCXVpbnQzMl90IHNwY19lcnJvcjsKKwlzY3RwX2Fzc29jX3Qgc3Bj
X2Fzc29jX2lkOworCXVpbnQ4X3Qgc3BjX3BhZGRpbmdbNF07Cit9OworCisvKiBwYWRkciBzdGF0
ZSB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9BRERSX0FWQUlMQUJMRSAgIDB4MDAwMQorI2RlZmlu
ZSBTQ1RQX0FERFJfVU5SRUFDSEFCTEUgMHgwMDAyCisjZGVmaW5lIFNDVFBfQUREUl9SRU1PVkVE
ICAgICAweDAwMDMKKyNkZWZpbmUgU0NUUF9BRERSX0FEREVEICAgICAgIDB4MDAwNAorI2RlZmlu
ZSBTQ1RQX0FERFJfTUFERV9QUklNICAgMHgwMDA1CisjZGVmaW5lIFNDVFBfQUREUl9DT05GSVJN
RUQgICAweDAwMDYKKworLyogcmVtb3RlIGVycm9yIGV2ZW50cyAqLworc3RydWN0IHNjdHBfcmVt
b3RlX2Vycm9yIHsKKwl1aW50MTZfdCBzcmVfdHlwZTsKKwl1aW50MTZfdCBzcmVfZmxhZ3M7CisJ
dWludDMyX3Qgc3JlX2xlbmd0aDsKKwl1aW50MTZfdCBzcmVfZXJyb3I7CisJc2N0cF9hc3NvY190
IHNyZV9hc3NvY19pZDsKKwl1aW50OF90IHNyZV9kYXRhWzRdOworfTsKKworLyogc2h1dGRvd24g
ZXZlbnQgKi8KK3N0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50IHsKKwl1aW50MTZfdCBzc2VfdHlw
ZTsKKwl1aW50MTZfdCBzc2VfZmxhZ3M7CisJdWludDMyX3Qgc3NlX2xlbmd0aDsKKwlzY3RwX2Fz
c29jX3Qgc3NlX2Fzc29jX2lkOworfTsKKworLyogQWRhcHRhdGlvbiBsYXllciBpbmRpY2F0aW9u
ICovCitzdHJ1Y3Qgc2N0cF9hZGFwdGF0aW9uX2V2ZW50IHsKKwl1aW50MTZfdCBzYWlfdHlwZTsK
Kwl1aW50MTZfdCBzYWlfZmxhZ3M7CisJdWludDMyX3Qgc2FpX2xlbmd0aDsKKwl1aW50MzJfdCBz
YWlfYWRhcHRhdGlvbl9pbmQ7CisJc2N0cF9hc3NvY190IHNhaV9hc3NvY19pZDsKK307CisKKy8q
IFBhcnRpYWwgZGVsaXZlcnkgZXZlbnQgKi8KK3N0cnVjdCBzY3RwX3BkYXBpX2V2ZW50IHsKKwl1
aW50MTZfdCBwZGFwaV90eXBlOworCXVpbnQxNl90IHBkYXBpX2ZsYWdzOworCXVpbnQzMl90IHBk
YXBpX2xlbmd0aDsKKwl1aW50MzJfdCBwZGFwaV9pbmRpY2F0aW9uOworCXVpbnQzMl90IHBkYXBp
X3N0cmVhbTsKKwl1aW50MzJfdCBwZGFwaV9zZXE7CisJc2N0cF9hc3NvY190IHBkYXBpX2Fzc29j
X2lkOworfTsKKworLyogaW5kaWNhdGlvbiB2YWx1ZXMgKi8KKyNkZWZpbmUgU0NUUF9QQVJUSUFM
X0RFTElWRVJZX0FCT1JURUQgIDB4MDAwMQorCisvKiBTQ1RQIGF1dGhlbnRpY2F0aW9uIGV2ZW50
ICovCitzdHJ1Y3Qgc2N0cF9hdXRoa2V5X2V2ZW50IHsKKwl1aW50MTZfdCBhdXRoX3R5cGU7CisJ
dWludDE2X3QgYXV0aF9mbGFnczsKKwl1aW50MzJfdCBhdXRoX2xlbmd0aDsKKwl1aW50MTZfdCBh
dXRoX2tleW51bWJlcjsKKwl1aW50MzJfdCBhdXRoX2luZGljYXRpb247CisJc2N0cF9hc3NvY190
IGF1dGhfYXNzb2NfaWQ7Cit9OworCisvKiBpbmRpY2F0aW9uIHZhbHVlcyAqLworI2RlZmluZSBT
Q1RQX0FVVEhfTkVXX0tFWSAgIDB4MDAwMQorI2RlZmluZSBTQ1RQX0FVVEhfTk9fQVVUSCAgIDB4
MDAwMgorI2RlZmluZSBTQ1RQX0FVVEhfRlJFRV9LRVkgIDB4MDAwMworCisvKiBTQ1RQIHNlbmRl
ciBkcnkgZXZlbnQgKi8KK3N0cnVjdCBzY3RwX3NlbmRlcl9kcnlfZXZlbnQgeworCXVpbnQxNl90
IHNlbmRlcl9kcnlfdHlwZTsKKwl1aW50MTZfdCBzZW5kZXJfZHJ5X2ZsYWdzOworCXVpbnQzMl90
IHNlbmRlcl9kcnlfbGVuZ3RoOworCXNjdHBfYXNzb2NfdCBzZW5kZXJfZHJ5X2Fzc29jX2lkOwor
fTsKKworCisvKiBTdHJlYW0gcmVzZXQgZXZlbnQgLSBzdWJzY3JpYmUgdG8gU0NUUF9TVFJFQU1f
UkVTRVRfRVZFTlQgKi8KK3N0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCB7CisJdWludDE2
X3Qgc3RycmVzZXRfdHlwZTsKKwl1aW50MTZfdCBzdHJyZXNldF9mbGFnczsKKwl1aW50MzJfdCBz
dHJyZXNldF9sZW5ndGg7CisJc2N0cF9hc3NvY190IHN0cnJlc2V0X2Fzc29jX2lkOworCXVpbnQx
Nl90IHN0cnJlc2V0X3N0cmVhbV9saXN0W107Cit9OworCisvKiBmbGFncyBpbiBzdHJlYW1fcmVz
ZXRfZXZlbnQgKHN0cnJlc2V0X2ZsYWdzKSAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9J
TkNPTUlOR19TU04gIDB4MDAwMQorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9PVVRHT0lOR19T
U04gIDB4MDAwMgorI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9ERU5JRUQgICAgICAgIDB4MDAw
NCAvKiBTQ1RQX1NUUlJFU0VUX0ZBSUxFRCAqLworI2RlZmluZSBTQ1RQX1NUUkVBTV9SRVNFVF9G
QUlMRUQgICAgICAgIDB4MDAwOCAvKiBTQ1RQX1NUUlJFU0VUX0ZBSUxFRCAqLworI2RlZmluZSBT
Q1RQX1NUUkVBTV9DSEFOR0VEX0RFTklFRCAgICAgIDB4MDAxMAorCisjZGVmaW5lIFNDVFBfU1RS
RUFNX1JFU0VUX0lOQ09NSU5HICAgICAgMHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX1NUUkVBTV9S
RVNFVF9PVVRHT0lORyAgICAgIDB4MDAwMDAwMDIKKworCisvKiBBc3NvYyByZXNldCBldmVudCAt
IHN1YnNjcmliZSB0byBTQ1RQX0FTU09DX1JFU0VUX0VWRU5UICovCitzdHJ1Y3Qgc2N0cF9hc3Nv
Y19yZXNldF9ldmVudCB7CisJdWludDE2X3QgYXNzb2NyZXNldF90eXBlOworCXVpbnQxNl90IGFz
c29jcmVzZXRfZmxhZ3M7CisJdWludDMyX3QgYXNzb2NyZXNldF9sZW5ndGg7CisJc2N0cF9hc3Nv
Y190IGFzc29jcmVzZXRfYXNzb2NfaWQ7CisJdWludDMyX3QgYXNzb2NyZXNldF9sb2NhbF90c247
CisJdWludDMyX3QgYXNzb2NyZXNldF9yZW1vdGVfdHNuOworfTsKKworI2RlZmluZSBTQ1RQX0FT
U09DX1JFU0VUX0RFTklFRCAgICAgICAgMHgwMDA0CisjZGVmaW5lIFNDVFBfQVNTT0NfUkVTRVRf
RkFJTEVEICAgICAgICAweDAwMDgKKworCisvKiBTdHJlYW0gY2hhbmdlIGV2ZW50IC0gc3Vic2Ny
aWJlIHRvIFNDVFBfU1RSRUFNX0NIQU5HRV9FVkVOVCAqLworc3RydWN0IHNjdHBfc3RyZWFtX2No
YW5nZV9ldmVudCB7CisJdWludDE2X3Qgc3RyY2hhbmdlX3R5cGU7CisJdWludDE2X3Qgc3RyY2hh
bmdlX2ZsYWdzOworCXVpbnQzMl90IHN0cmNoYW5nZV9sZW5ndGg7CisJc2N0cF9hc3NvY190IHN0
cmNoYW5nZV9hc3NvY19pZDsKKwl1aW50MTZfdCBzdHJjaGFuZ2VfaW5zdHJtczsKKwl1aW50MTZf
dCBzdHJjaGFuZ2Vfb3V0c3RybXM7Cit9OworCisjZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9E
RU5JRUQJMHgwMDA0CisjZGVmaW5lIFNDVFBfU1RSRUFNX0NIQU5HRV9GQUlMRUQJMHgwMDA4CisK
KworLyogU0NUUCBzZW5kIGZhaWxlZCBldmVudCAqLworc3RydWN0IHNjdHBfc2VuZF9mYWlsZWRf
ZXZlbnQgeworCXVpbnQxNl90IHNzZmVfdHlwZTsKKwl1aW50MTZfdCBzc2ZlX2ZsYWdzOworCXVp
bnQzMl90IHNzZmVfbGVuZ3RoOworCXVpbnQzMl90IHNzZmVfZXJyb3I7CisJc3RydWN0IHNjdHBf
c25kaW5mbyBzc2ZlX2luZm87CisJc2N0cF9hc3NvY190IHNzZmVfYXNzb2NfaWQ7CisJdWludDhf
dCAgc3NmZV9kYXRhW107Cit9OworCisvKiBmbGFnIHRoYXQgaW5kaWNhdGVzIHN0YXRlIG9mIGRh
dGEgKi8KKyNkZWZpbmUgU0NUUF9EQVRBX1VOU0VOVCAgMHgwMDAxCS8qIGlucXVldWUgbmV2ZXIg
b24gd2lyZSAqLworI2RlZmluZSBTQ1RQX0RBVEFfU0VOVCAgICAweDAwMDIJLyogb24gd2lyZSBh
dCBmYWlsdXJlICovCisKKy8qIFNDVFAgZXZlbnQgb3B0aW9uICovCitzdHJ1Y3Qgc2N0cF9ldmVu
dCB7CisJc2N0cF9hc3NvY190ICAgc2VfYXNzb2NfaWQ7CisJdWludDE2X3QgICAgICAgc2VfdHlw
ZTsKKwl1aW50OF90ICAgICAgICBzZV9vbjsKK307CisKK3VuaW9uIHNjdHBfbm90aWZpY2F0aW9u
IHsKKwlzdHJ1Y3Qgc2N0cF90bHYgeworCQl1aW50MTZfdCBzbl90eXBlOworCQl1aW50MTZfdCBz
bl9mbGFnczsKKwkJdWludDMyX3Qgc25fbGVuZ3RoOworCX0gc25faGVhZGVyOworCXN0cnVjdCBz
Y3RwX2Fzc29jX2NoYW5nZSBzbl9hc3NvY19jaGFuZ2U7CisJc3RydWN0IHNjdHBfcGFkZHJfY2hh
bmdlIHNuX3BhZGRyX2NoYW5nZTsKKwlzdHJ1Y3Qgc2N0cF9yZW1vdGVfZXJyb3Igc25fcmVtb3Rl
X2Vycm9yOworCXN0cnVjdCBzY3RwX3NodXRkb3duX2V2ZW50IHNuX3NodXRkb3duX2V2ZW50Owor
CXN0cnVjdCBzY3RwX2FkYXB0YXRpb25fZXZlbnQgc25fYWRhcHRhdGlvbl9ldmVudDsKKwlzdHJ1
Y3Qgc2N0cF9wZGFwaV9ldmVudCBzbl9wZGFwaV9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hdXRoa2V5
X2V2ZW50IHNuX2F1dGhfZXZlbnQ7CisJc3RydWN0IHNjdHBfc2VuZGVyX2RyeV9ldmVudCBzbl9z
ZW5kZXJfZHJ5X2V2ZW50OworCXN0cnVjdCBzY3RwX3NlbmRfZmFpbGVkX2V2ZW50IHNuX3NlbmRf
ZmFpbGVkX2V2ZW50OworCXN0cnVjdCBzY3RwX3N0cmVhbV9yZXNldF9ldmVudCBzbl9zdHJyZXNl
dF9ldmVudDsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY19yZXNldF9ldmVudCAgc25fYXNzb2NyZXNldF9l
dmVudDsKKwlzdHJ1Y3Qgc2N0cF9zdHJlYW1fY2hhbmdlX2V2ZW50IHNuX3N0cmNoYW5nZV9ldmVu
dDsKK307CisKK3N0cnVjdCBzY3RwX2V2ZW50X3N1YnNjcmliZSB7CisJdWludDhfdCBzY3RwX2Rh
dGFfaW9fZXZlbnQ7CisJdWludDhfdCBzY3RwX2Fzc29jaWF0aW9uX2V2ZW50OworCXVpbnQ4X3Qg
c2N0cF9hZGRyZXNzX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9zZW5kX2ZhaWx1cmVfZXZlbnQ7CisJ
dWludDhfdCBzY3RwX3BlZXJfZXJyb3JfZXZlbnQ7CisJdWludDhfdCBzY3RwX3NodXRkb3duX2V2
ZW50OworCXVpbnQ4X3Qgc2N0cF9wYXJ0aWFsX2RlbGl2ZXJ5X2V2ZW50OworCXVpbnQ4X3Qgc2N0
cF9hZGFwdGF0aW9uX2xheWVyX2V2ZW50OworCXVpbnQ4X3Qgc2N0cF9hdXRoZW50aWNhdGlvbl9l
dmVudDsKKwl1aW50OF90IHNjdHBfc2VuZGVyX2RyeV9ldmVudDsKKwl1aW50OF90IHNjdHBfc3Ry
ZWFtX3Jlc2V0X2V2ZW50OworfTsKKworCisKKy8qIEZsYWdzIHRoYXQgZ28gaW50byB0aGUgc2lu
Zm8tPnNpbmZvX2ZsYWdzIGZpZWxkICovCisjZGVmaW5lIFNDVFBfTk9USUZJQ0FUSU9OICAgICAw
eDAwMTAgLyogbmV4dCBtZXNzYWdlIGlzIGEgbm90aWZpY2F0aW9uICovCisjZGVmaW5lIFNDVFBf
Q09NUExFVEUgICAgICAgICAweDAwMjAgLyogbmV4dCBtZXNzYWdlIGlzIGNvbXBsZXRlICovCisj
ZGVmaW5lIFNDVFBfRU9GICAgICAgICAgICAgICAweDAxMDAgLyogU3RhcnQgc2h1dGRvd24gcHJv
Y2VkdXJlcyAqLworI2RlZmluZSBTQ1RQX0FCT1JUICAgICAgICAgICAgMHgwMjAwIC8qIFNlbmQg
YW4gQUJPUlQgdG8gcGVlciAqLworI2RlZmluZSBTQ1RQX1VOT1JERVJFRCAgICAgICAgMHgwNDAw
IC8qIE1lc3NhZ2UgaXMgdW4tb3JkZXJlZCAqLworI2RlZmluZSBTQ1RQX0FERFJfT1ZFUiAgICAg
ICAgMHgwODAwIC8qIE92ZXJyaWRlIHRoZSBwcmltYXJ5LWFkZHJlc3MgKi8KKyNkZWZpbmUgU0NU
UF9TRU5EQUxMICAgICAgICAgIDB4MTAwMCAvKiBTZW5kIHRoaXMgb24gYWxsIGFzc29jaWF0aW9u
cyAqLworI2RlZmluZSBTQ1RQX0VPUiAgICAgICAgICAgICAgMHgyMDAwIC8qIGVuZCBvZiBtZXNz
YWdlIHNpZ25hbCAqLworI2RlZmluZSBTQ1RQX1NBQ0tfSU1NRURJQVRFTFkgMHg0MDAwIC8qIFNl
dCBJLUJpdCAqLworCisjZGVmaW5lIElOVkFMSURfU0lORk9fRkxBRyh4KSAoKCh4KSAmIDB4ZmZm
ZmZmZjAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KFNDVFBfRU9G
IHwgU0NUUF9BQk9SVCB8IFNDVFBfVU5PUkRFUkVEIHxcCisJCQkJICAgICAgICBTQ1RQX0FERFJf
T1ZFUiB8IFNDVFBfU0VOREFMTCB8IFNDVFBfRU9SIHxcCisJCQkJCVNDVFBfU0FDS19JTU1FRElB
VEVMWSkpICE9IDApCisvKiBmb3IgdGhlIGVuZHBvaW50ICovCisKKy8qIFRoZSBsb3dlciBieXRl
IGlzIGFuIGVudW1lcmF0aW9uIG9mIFBSLVNDVFAgcG9saWNpZXMgKi8KKyNkZWZpbmUgU0NUUF9Q
Ul9TQ1RQX05PTkUgMHgwMDAwIC8qIFJlbGlhYmxlIHRyYW5zZmVyICovCisjZGVmaW5lIFNDVFBf
UFJfU0NUUF9UVEwgIDB4MDAwMSAvKiBUaW1lIGJhc2VkIFBSLVNDVFAgKi8KKyNkZWZpbmUgU0NU
UF9QUl9TQ1RQX0JVRiAgMHgwMDAyIC8qIEJ1ZmZlciBiYXNlZCBQUi1TQ1RQICovCisjZGVmaW5l
IFNDVFBfUFJfU0NUUF9SVFggIDB4MDAwMyAvKiBOdW1iZXIgb2YgcmV0cmFuc21pc3Npb25zIGJh
c2VkIFBSLVNDVFAgKi8KKworI2RlZmluZSBQUl9TQ1RQX1BPTElDWSh4KSAgICAgICAgICgoeCkg
JiAweDBmKQorI2RlZmluZSBQUl9TQ1RQX0VOQUJMRUQoeCkgICAgICAgIChQUl9TQ1RQX1BPTElD
WSh4KSAhPSBTQ1RQX1BSX1NDVFBfTk9ORSkKKyNkZWZpbmUgUFJfU0NUUF9UVExfRU5BQkxFRCh4
KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQX1RUTCkKKyNkZWZpbmUgUFJf
U0NUUF9CVUZfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1koeCkgPT0gU0NUUF9QUl9TQ1RQ
X0JVRikKKyNkZWZpbmUgUFJfU0NUUF9SVFhfRU5BQkxFRCh4KSAgICAoUFJfU0NUUF9QT0xJQ1ko
eCkgPT0gU0NUUF9QUl9TQ1RQX1JUWCkKKyNkZWZpbmUgUFJfU0NUUF9JTlZBTElEX1BPTElDWSh4
KSAoUFJfU0NUUF9QT0xJQ1koeCkgPiBTQ1RQX1BSX1NDVFBfUlRYKQorCisKKy8qCisgKiB1c2Vy
IHNvY2tldCBvcHRpb25zOiBzb2NrZXQgQVBJIGRlZmluZWQKKyAqLworLyoKKyAqIHJlYWQtd3Jp
dGUgb3B0aW9ucworICovCisjZGVmaW5lIFNDVFBfUlRPSU5GTyAgICAgICAgICAgICAgICAgICAg
MHgwMDAwMDAwMQorI2RlZmluZSBTQ1RQX0FTU09DSU5GTyAgICAgICAgICAgICAgICAgIDB4MDAw
MDAwMDIKKyNkZWZpbmUgU0NUUF9JTklUTVNHICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAz
CisjZGVmaW5lIFNDVFBfTk9ERUxBWSAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAorI2Rl
ZmluZSBTQ1RQX0FVVE9DTE9TRSAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDUKKyNkZWZpbmUg
U0NUUF9QUklNQVJZX0FERFIgICAgICAgICAgICAgICAweDAwMDAwMDA3CisjZGVmaW5lIFNDVFBf
QURBUFRBVElPTl9MQVlFUiAgICAgICAgICAgMHgwMDAwMDAwOAorI2RlZmluZSBTQ1RQX0RJU0FC
TEVfRlJBR01FTlRTICAgICAgICAgIDB4MDAwMDAwMDkKKyNkZWZpbmUgU0NUUF9QRUVSX0FERFJf
UEFSQU1TICAgICAgICAgICAweDAwMDAwMDBhCisvKiBhbmNpbGxhcnkgZGF0YS9ub3RpZmljYXRp
b24gaW50ZXJlc3Qgb3B0aW9ucyAqLworLyogV2l0aG91dCB0aGlzIGFwcGxpZWQgd2Ugd2lsbCBn
aXZlIFY0IGFuZCBWNiBhZGRyZXNzZXMgb24gYSBWNiBzb2NrZXQgKi8KKyNkZWZpbmUgU0NUUF9J
X1dBTlRfTUFQUEVEX1Y0X0FERFIgICAgICAweDAwMDAwMDBkCisjZGVmaW5lIFNDVFBfTUFYU0VH
ICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwZQorI2RlZmluZSBTQ1RQX0RFTEFZRURfU0FD
SyAgICAgICAgICAgICAgIDB4MDAwMDAwMGYKKyNkZWZpbmUgU0NUUF9GUkFHTUVOVF9JTlRFUkxF
QVZFICAgICAgICAweDAwMDAwMDEwCisjZGVmaW5lIFNDVFBfUEFSVElBTF9ERUxJVkVSWV9QT0lO
VCAgICAgMHgwMDAwMDAxMQorLyogYXV0aGVudGljYXRpb24gc3VwcG9ydCAqLworI2RlZmluZSBT
Q1RQX0hNQUNfSURFTlQgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTQKKyNkZWZpbmUgU0NUUF9B
VVRIX0FDVElWRV9LRVkgICAgICAgICAgICAweDAwMDAwMDE1CisjZGVmaW5lIFNDVFBfQVVUT19B
U0NPTkYgICAgICAgICAgICAgICAgMHgwMDAwMDAxOAorI2RlZmluZSBTQ1RQX01BWF9CVVJTVCAg
ICAgICAgICAgICAgICAgIDB4MDAwMDAwMTkKKy8qIGFzc29jIGxldmVsIGNvbnRleHQgKi8KKyNk
ZWZpbmUgU0NUUF9DT05URVhUICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDFhCisvKiBleHBs
aWNpdCBFT1Igc2lnbmFsbGluZyAqLworI2RlZmluZSBTQ1RQX0VYUExJQ0lUX0VPUiAgICAgICAg
ICAgICAgIDB4MDAwMDAwMWIKKyNkZWZpbmUgU0NUUF9SRVVTRV9QT1JUICAgICAgICAgICAgICAg
ICAweDAwMDAwMDFjCisKKyNkZWZpbmUgU0NUUF9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAw
eDAwMDAwMDFlCisjZGVmaW5lIFNDVFBfUkVDVlJDVklORk8gICAgICAgICAgICAgICAgMHgwMDAw
MDAxZgorI2RlZmluZSBTQ1RQX1JFQ1ZOWFRJTkZPICAgICAgICAgICAgICAgIDB4MDAwMDAwMjAK
KyNkZWZpbmUgU0NUUF9ERUZBVUxUX1NORElORk8gICAgICAgICAgICAweDAwMDAwMDIxCisjZGVm
aW5lIFNDVFBfREVGQVVMVF9QUklORk8gICAgICAgICAgICAgMHgwMDAwMDAyMgorI2RlZmluZSBT
Q1RQX1JFTU9URV9VRFBfRU5DQVBTX1BPUlQgICAgIDB4MDAwMDAwMjQKKworI2RlZmluZSBTQ1RQ
X0VOQUJMRV9TVFJFQU1fUkVTRVQgICAgICAgIDB4MDAwMDA5MDAgLyogc3RydWN0IHNjdHBfYXNz
b2NfdmFsdWUgKi8KKworLyogUGx1Z2dhYmxlIFN0cmVhbSBTY2hlZHVsaW5nIFNvY2tldCBvcHRp
b24gKi8KKyNkZWZpbmUgU0NUUF9QTFVHR0FCTEVfU1MgICAgICAgICAgICAgICAweDAwMDAxMjAz
CisjZGVmaW5lIFNDVFBfU1NfVkFMVUUgICAgICAgICAgICAgICAgICAgMHgwMDAwMTIwNAorCisv
KgorICogcmVhZC1vbmx5IG9wdGlvbnMKKyAqLworI2RlZmluZSBTQ1RQX1NUQVRVUyAgICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgU0NUUF9HRVRfUEVFUl9BRERSX0lORk8g
ICAgICAgICAweDAwMDAwMTAxCisvKiBhdXRoZW50aWNhdGlvbiBzdXBwb3J0ICovCisjZGVmaW5l
IFNDVFBfUEVFUl9BVVRIX0NIVU5LUyAgICAgICAgICAgMHgwMDAwMDEwMgorI2RlZmluZSBTQ1RQ
X0xPQ0FMX0FVVEhfQ0hVTktTICAgICAgICAgIDB4MDAwMDAxMDMKKyNkZWZpbmUgU0NUUF9HRVRf
QVNTT0NfTlVNQkVSICAgICAgICAgICAweDAwMDAwMTA0CisjZGVmaW5lIFNDVFBfR0VUX0FTU09D
X0lEX0xJU1QgICAgICAgICAgMHgwMDAwMDEwNQorI2RlZmluZSBTQ1RQX1RJTUVPVVRTICAgICAg
ICAgICAgICAgICAgIDB4MDAwMDAxMDYKKyNkZWZpbmUgU0NUUF9QUl9TVFJFQU1fU1RBVFVTICAg
ICAgICAgICAweDAwMDAwMTA3CisjZGVmaW5lIFNDVFBfUFJfQVNTT0NfU1RBVFVTICAgICAgICAg
ICAgMHgwMDAwMDEwOAorCisvKgorICogd3JpdGUtb25seSBvcHRpb25zCisgKi8KKyNkZWZpbmUg
U0NUUF9TRVRfUEVFUl9QUklNQVJZX0FERFIgICAgICAweDAwMDAwMDA2CisjZGVmaW5lIFNDVFBf
QVVUSF9DSFVOSyAgICAgICAgICAgICAgICAgMHgwMDAwMDAxMgorI2RlZmluZSBTQ1RQX0FVVEhf
S0VZICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMTMKKyNkZWZpbmUgU0NUUF9BVVRIX0RFQUNU
SVZBVEVfS0VZICAgICAgICAweDAwMDAwMDFkCisjZGVmaW5lIFNDVFBfQVVUSF9ERUxFVEVfS0VZ
ICAgICAgICAgICAgMHgwMDAwMDAxNgorI2RlZmluZSBTQ1RQX1JFU0VUX1NUUkVBTVMgICAgICAg
ICAgICAgIDB4MDAwMDA5MDEgLyogc3RydWN0IHNjdHBfcmVzZXRfc3RyZWFtcyAqLworI2RlZmlu
ZSBTQ1RQX1JFU0VUX0FTU09DICAgICAgICAgICAgICAgIDB4MDAwMDA5MDIgLyogc2N0cF9hc3Nv
Y190ICovCisjZGVmaW5lIFNDVFBfQUREX1NUUkVBTVMgICAgICAgICAgICAgICAgMHgwMDAwMDkw
MyAvKiBzdHJ1Y3Qgc2N0cF9hZGRfc3RyZWFtcyAqLworCitzdHJ1Y3Qgc2N0cF9pbml0bXNnIHsK
Kwl1aW50MTZfdCBzaW5pdF9udW1fb3N0cmVhbXM7CisJdWludDE2X3Qgc2luaXRfbWF4X2luc3Ry
ZWFtczsKKwl1aW50MTZfdCBzaW5pdF9tYXhfYXR0ZW1wdHM7CisJdWludDE2X3Qgc2luaXRfbWF4
X2luaXRfdGltZW87Cit9OworCitzdHJ1Y3Qgc2N0cF9ydG9pbmZvIHsKKwlzY3RwX2Fzc29jX3Qg
c3J0b19hc3NvY19pZDsKKwl1aW50MzJfdCBzcnRvX2luaXRpYWw7CisJdWludDMyX3Qgc3J0b19t
YXg7CisJdWludDMyX3Qgc3J0b19taW47Cit9OworCitzdHJ1Y3Qgc2N0cF9hc3NvY3BhcmFtcyB7
CisJc2N0cF9hc3NvY190IHNhc29jX2Fzc29jX2lkOworCXVpbnQzMl90IHNhc29jX3BlZXJfcndu
ZDsKKwl1aW50MzJfdCBzYXNvY19sb2NhbF9yd25kOworCXVpbnQzMl90IHNhc29jX2Nvb2tpZV9s
aWZlOworCXVpbnQxNl90IHNhc29jX2Fzb2NtYXhyeHQ7CisJdWludDE2X3Qgc2Fzb2NfbnVtYmVy
X3BlZXJfZGVzdGluYXRpb25zOworfTsKKworc3RydWN0IHNjdHBfc2V0cHJpbSB7CisJc3RydWN0
IHNvY2thZGRyX3N0b3JhZ2Ugc3NwX2FkZHI7CisJc2N0cF9hc3NvY190IHNzcF9hc3NvY19pZDsK
Kwl1aW50OF90IHNzcF9wYWRkaW5nWzRdOworfTsKKworc3RydWN0IHNjdHBfc2V0YWRhcHRhdGlv
biB7CisJdWludDMyX3QgICBzc2JfYWRhcHRhdGlvbl9pbmQ7Cit9OworCitzdHJ1Y3Qgc2N0cF9w
YWRkcnBhcmFtcyB7CisJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3BwX2FkZHJlc3M7CisJc2N0
cF9hc3NvY190IHNwcF9hc3NvY19pZDsKKwl1aW50MzJfdCBzcHBfaGJpbnRlcnZhbDsKKwl1aW50
MzJfdCBzcHBfcGF0aG10dTsKKwl1aW50MzJfdCBzcHBfZmxhZ3M7CisJdWludDMyX3Qgc3BwX2lw
djZfZmxvd2xhYmVsOworCXVpbnQxNl90IHNwcF9wYXRobWF4cnh0OworCXVpbnQ4X3Qgc3BwX2Rz
Y3A7Cit9OworCisjZGVmaW5lIFNQUF9IQl9FTkFCTEUgICAgICAgMHgwMDAwMDAwMQorI2RlZmlu
ZSBTUFBfSEJfRElTQUJMRSAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgU1BQX0hCX0RFTUFORCAg
ICAgICAweDAwMDAwMDA0CisjZGVmaW5lIFNQUF9QTVRVRF9FTkFCTEUgICAgMHgwMDAwMDAwOAor
I2RlZmluZSBTUFBfUE1UVURfRElTQUJMRSAgIDB4MDAwMDAwMTAKKyNkZWZpbmUgU1BQX0hCX1RJ
TUVfSVNfWkVSTyAweDAwMDAwMDgwCisjZGVmaW5lIFNQUF9JUFY2X0ZMT1dMQUJFTCAgMHgwMDAw
MDEwMAorI2RlZmluZSBTUFBfRFNDUCAgICAgICAgICAgIDB4MDAwMDAyMDAKKworLyogVXNlZCBm
b3IgU0NUUF9NQVhTRUcsIFNDVFBfTUFYX0JVUlNULCBTQ1RQX0VOQUJMRV9TVFJFQU1fUkVTRVQs
IGFuZCBTQ1RQX0NPTlRFWFQgKi8KK3N0cnVjdCBzY3RwX2Fzc29jX3ZhbHVlIHsKKwlzY3RwX2Fz
c29jX3QgYXNzb2NfaWQ7CisJdWludDMyX3QgYXNzb2NfdmFsdWU7Cit9OworCisvKiBUbyBlbmFi
bGUgc3RyZWFtIHJlc2V0ICovCisjZGVmaW5lIFNDVFBfRU5BQkxFX1JFU0VUX1NUUkVBTV9SRVEg
IDB4MDAwMDAwMDEKKyNkZWZpbmUgU0NUUF9FTkFCTEVfUkVTRVRfQVNTT0NfUkVRICAgMHgwMDAw
MDAwMgorI2RlZmluZSBTQ1RQX0VOQUJMRV9DSEFOR0VfQVNTT0NfUkVRICAweDAwMDAwMDA0Cisj
ZGVmaW5lIFNDVFBfRU5BQkxFX1ZBTFVFX01BU0sgICAgICAgIDB4MDAwMDAwMDcKKworc3RydWN0
IHNjdHBfcmVzZXRfc3RyZWFtcyB7CisJc2N0cF9hc3NvY190IHNyc19hc3NvY19pZDsKKwl1aW50
MTZfdCBzcnNfZmxhZ3M7CisJdWludDE2X3Qgc3JzX251bWJlcl9zdHJlYW1zOyAgLyogMCA9PSBB
TEwgKi8KKwl1aW50MTZfdCBzcnNfc3RyZWFtX2xpc3RbXTsgICAvKiBsaXN0IGlmIHN0cnJzdF9u
dW1fc3RyZWFtcyBpcyBub3QgMCAqLworfTsKKworc3RydWN0IHNjdHBfYWRkX3N0cmVhbXMgewor
CXNjdHBfYXNzb2NfdAlzYXNfYXNzb2NfaWQ7CisJdWludDE2X3QJc2FzX2luc3RybXM7CisJdWlu
dDE2X3QJc2FzX291dHN0cm1zOworfTsKKworc3RydWN0IHNjdHBfaG1hY2FsZ28geworCXVpbnQz
Ml90IHNobWFjX251bWJlcl9vZl9pZGVudHM7CisJdWludDE2X3Qgc2htYWNfaWRlbnRzW107Cit9
OworCisvKiBBVVRIIGhtYWNfaWQgKi8KKyNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfUlNWRCAg
ICAweDAwMDAKKyNkZWZpbmUgU0NUUF9BVVRIX0hNQUNfSURfU0hBMSAgICAweDAwMDEJLyogZGVm
YXVsdCwgbWFuZGF0b3J5ICovCisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTI1NiAgMHgw
MDAzCisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lEX1NIQTIyNCAgMHgwMDA0CisjZGVmaW5lIFND
VFBfQVVUSF9ITUFDX0lEX1NIQTM4NCAgMHgwMDA1CisjZGVmaW5lIFNDVFBfQVVUSF9ITUFDX0lE
X1NIQTUxMiAgMHgwMDA2CisKKworc3RydWN0IHNjdHBfc2Fja19pbmZvIHsKKwlzY3RwX2Fzc29j
X3Qgc2Fja19hc3NvY19pZDsKKwl1aW50MzJfdCBzYWNrX2RlbGF5OworCXVpbnQzMl90IHNhY2tf
ZnJlcTsKK307CisKK3N0cnVjdCBzY3RwX2RlZmF1bHRfcHJpbmZvIHsKKwl1aW50MTZfdCBwcl9w
b2xpY3k7CisJdWludDMyX3QgcHJfdmFsdWU7CisJc2N0cF9hc3NvY190IHByX2Fzc29jX2lkOwor
fTsKKworc3RydWN0IHNjdHBfcGFkZHJpbmZvIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBz
cGluZm9fYWRkcmVzczsKKwlzY3RwX2Fzc29jX3Qgc3BpbmZvX2Fzc29jX2lkOworCWludDMyX3Qg
c3BpbmZvX3N0YXRlOworCXVpbnQzMl90IHNwaW5mb19jd25kOworCXVpbnQzMl90IHNwaW5mb19z
cnR0OworCXVpbnQzMl90IHNwaW5mb19ydG87CisJdWludDMyX3Qgc3BpbmZvX210dTsKK307CisK
K3N0cnVjdCBzY3RwX3N0YXR1cyB7CisJc2N0cF9hc3NvY190IHNzdGF0X2Fzc29jX2lkOworCWlu
dDMyX3QgIHNzdGF0X3N0YXRlOworCXVpbnQzMl90IHNzdGF0X3J3bmQ7CisJdWludDE2X3Qgc3N0
YXRfdW5hY2tkYXRhOworCXVpbnQxNl90IHNzdGF0X3BlbmRkYXRhOworCXVpbnQxNl90IHNzdGF0
X2luc3RybXM7CisJdWludDE2X3Qgc3N0YXRfb3V0c3RybXM7CisJdWludDMyX3Qgc3N0YXRfZnJh
Z21lbnRhdGlvbl9wb2ludDsKKwlzdHJ1Y3Qgc2N0cF9wYWRkcmluZm8gc3N0YXRfcHJpbWFyeTsK
K307CisKKy8qCisgKiB1c2VyIHN0YXRlIHZhbHVlcworICovCisjZGVmaW5lIFNDVFBfQ0xPU0VE
ICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBTQ1RQX0JPVU5EICAgICAgICAgICAgICAweDEw
MDAKKyNkZWZpbmUgU0NUUF9MSVNURU4gICAgICAgICAgICAgMHgyMDAwCisjZGVmaW5lIFNDVFBf
Q09PS0lFX1dBSVQgICAgICAgIDB4MDAwMgorI2RlZmluZSBTQ1RQX0NPT0tJRV9FQ0hPRUQgICAg
ICAweDAwMDQKKyNkZWZpbmUgU0NUUF9FU1RBQkxJU0hFRCAgICAgICAgMHgwMDA4CisjZGVmaW5l
IFNDVFBfU0hVVERPV05fU0VOVCAgICAgIDB4MDAxMAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX1JF
Q0VJVkVEICAweDAwMjAKKyNkZWZpbmUgU0NUUF9TSFVURE9XTl9BQ0tfU0VOVCAgMHgwMDQwCisj
ZGVmaW5lIFNDVFBfU0hVVERPV05fUEVORElORyAgIDB4MDA4MAorCisKKyNkZWZpbmUgU0NUUF9B
Q1RJVkUgICAgICAgMHgwMDAxICAvKiBTQ1RQX0FERFJfUkVBQ0hBQkxFICovCisjZGVmaW5lIFND
VFBfSU5BQ1RJVkUgICAgIDB4MDAwMiAgLyogbmVpdGhlciBTQ1RQX0FERFJfUkVBQ0hBQkxFCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9yIFNDVFBfQUREUl9VTkNPTkZJ
Uk1FRCAqLworI2RlZmluZSBTQ1RQX1VOQ09ORklSTUVEICAweDAyMDAgIC8qIFNDVFBfQUREUl9V
TkNPTkZJUk1FRCAqLworCitzdHJ1Y3Qgc2N0cF9hdXRoY2h1bmtzIHsKKwlzY3RwX2Fzc29jX3Qg
Z2F1dGhfYXNzb2NfaWQ7CisvKgl1aW50MzJfdCBnYXV0aF9udW1iZXJfb2ZfY2h1bmtzOyBub3Qg
YXZhaWxhYmxlICovCisJdWludDhfdCAgZ2F1dGhfY2h1bmtzW107Cit9OworCitzdHJ1Y3Qgc2N0
cF9hc3NvY19pZHMgeworCXVpbnQzMl90IGdhaWRzX251bWJlcl9vZl9pZHM7CisJc2N0cF9hc3Nv
Y190IGdhaWRzX2Fzc29jX2lkW107Cit9OworCitzdHJ1Y3Qgc2N0cF9zZXRwZWVycHJpbSB7CisJ
c3RydWN0IHNvY2thZGRyX3N0b3JhZ2Ugc3NwcF9hZGRyOworCXNjdHBfYXNzb2NfdCBzc3BwX2Fz
c29jX2lkOworCXVpbnQ4X3Qgc3NwcF9wYWRkaW5nWzRdOworfTsKKworc3RydWN0IHNjdHBfYXV0
aGNodW5rIHsKKwl1aW50OF90IHNhdXRoX2NodW5rOworfTsKKworCitzdHJ1Y3Qgc2N0cF9nZXRf
bm9uY2VfdmFsdWVzIHsKKwlzY3RwX2Fzc29jX3QgZ25fYXNzb2NfaWQ7CisJdWludDMyX3QgZ25f
cGVlcnNfdGFnOworCXVpbnQzMl90IGduX2xvY2FsX3RhZzsKK307CisKKworLyoKKyAqIE1haW4g
U0NUUCBjaHVuayB0eXBlcworICovCisvKioqKioqKioqKioqMHgwMCBzZXJpZXMgKioqKioqKioq
KiovCisjZGVmaW5lIFNDVFBfREFUQSAgICAgICAgICAgICAgIDB4MDAKKyNkZWZpbmUgU0NUUF9J
TklUSUFUSU9OICAgICAgICAgMHgwMQorI2RlZmluZSBTQ1RQX0lOSVRJQVRJT05fQUNLICAgICAw
eDAyCisjZGVmaW5lIFNDVFBfU0VMRUNUSVZFX0FDSyAgICAgIDB4MDMKKyNkZWZpbmUgU0NUUF9I
RUFSVEJFQVRfUkVRVUVTVCAgMHgwNAorI2RlZmluZSBTQ1RQX0hFQVJUQkVBVF9BQ0sgICAgICAw
eDA1CisjZGVmaW5lIFNDVFBfQUJPUlRfQVNTT0NJQVRJT04gIDB4MDYKKyNkZWZpbmUgU0NUUF9T
SFVURE9XTiAgICAgICAgICAgMHgwNworI2RlZmluZSBTQ1RQX1NIVVRET1dOX0FDSyAgICAgICAw
eDA4CisjZGVmaW5lIFNDVFBfT1BFUkFUSU9OX0VSUk9SICAgIDB4MDkKKyNkZWZpbmUgU0NUUF9D
T09LSUVfRUNITyAgICAgICAgMHgwYQorI2RlZmluZSBTQ1RQX0NPT0tJRV9BQ0sgICAgICAgICAw
eDBiCisjZGVmaW5lIFNDVFBfRUNOX0VDSE8gICAgICAgICAgIDB4MGMKKyNkZWZpbmUgU0NUUF9F
Q05fQ1dSICAgICAgICAgICAgMHgwZAorI2RlZmluZSBTQ1RQX1NIVVRET1dOX0NPTVBMRVRFICAw
eDBlCisvKiBSRkM0ODk1ICovCisjZGVmaW5lIFNDVFBfQVVUSEVOVElDQVRJT04gICAgIDB4MGYK
Ky8qIEVZIG5yX3NhY2sgY2h1bmsgaWQqLworI2RlZmluZSBTQ1RQX05SX1NFTEVDVElWRV9BQ0sg
ICAweDEwCisvKioqKioqKioqKioqMHg0MCBzZXJpZXMgKioqKioqKioqKiovCisvKioqKioqKioq
KioqMHg4MCBzZXJpZXMgKioqKioqKioqKiovCisvKiBSRkM1MDYxICovCisjZGVmaW5lCVNDVFBf
QVNDT05GX0FDSyAgICAgICAgIDB4ODAKKy8qIGRyYWZ0LWlldGYtc3Rld2FydC1wa3RkcnBzY3Rw
ICovCisjZGVmaW5lIFNDVFBfUEFDS0VUX0RST1BQRUQgICAgIDB4ODEKKy8qIGRyYWZ0LWlldGYt
c3Rld2FydC1zdHJyZXNldC14eHggKi8KKyNkZWZpbmUgU0NUUF9TVFJFQU1fUkVTRVQgICAgICAg
MHg4MgorCisvKiBSRkM0ODIwICAgICAgICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFND
VFBfUEFEX0NIVU5LICAgICAgICAgIDB4ODQKKy8qKioqKioqKioqKioweGMwIHNlcmllcyAqKioq
KioqKioqKi8KKy8qIFJGQzM3NTggKi8KKyNkZWZpbmUgU0NUUF9GT1JXQVJEX0NVTV9UU04gICAg
MHhjMAorLyogUkZDNTA2MSAqLworI2RlZmluZSBTQ1RQX0FTQ09ORiAgICAgICAgICAgICAweGMx
CisKK3N0cnVjdCBzY3RwX2F1dGhrZXkgeworCXNjdHBfYXNzb2NfdCBzY2FfYXNzb2NfaWQ7CisJ
dWludDE2X3Qgc2NhX2tleW51bWJlcjsKKwl1aW50MTZfdCBzY2Ffa2V5bGVuZ3RoOworCXVpbnQ4
X3QgIHNjYV9rZXlbXTsKK307CisKK3N0cnVjdCBzY3RwX2F1dGhrZXlpZCB7CisJc2N0cF9hc3Nv
Y190IHNjYWN0X2Fzc29jX2lkOworCXVpbnQxNl90IHNjYWN0X2tleW51bWJlcjsKK307CisKK3N0
cnVjdCBzY3RwX2NjX29wdGlvbiB7CisJaW50IG9wdGlvbjsKKwlzdHJ1Y3Qgc2N0cF9hc3NvY192
YWx1ZSBhaWRfdmFsdWU7Cit9OworCitzdHJ1Y3Qgc2N0cF9zdHJlYW1fdmFsdWUgeworCXNjdHBf
YXNzb2NfdCBhc3NvY19pZDsKKwl1aW50MTZfdCBzdHJlYW1faWQ7CisJdWludDE2X3Qgc3RyZWFt
X3ZhbHVlOworfTsKKworc3RydWN0IHNjdHBfdGltZW91dHMgeworCXNjdHBfYXNzb2NfdCBzdGlt
b19hc3NvY19pZDsKKwl1aW50MzJfdCBzdGltb19pbml0OworCXVpbnQzMl90IHN0aW1vX2RhdGE7
CisJdWludDMyX3Qgc3RpbW9fc2FjazsKKwl1aW50MzJfdCBzdGltb19zaHV0ZG93bjsKKwl1aW50
MzJfdCBzdGltb19oZWFydGJlYXQ7CisJdWludDMyX3Qgc3RpbW9fY29va2llOworCXVpbnQzMl90
IHN0aW1vX3NodXRkb3duYWNrOworfTsKKworc3RydWN0IHNjdHBfcHJzdGF0dXMgeworCXNjdHBf
YXNzb2NfdCBzcHJzdGF0X2Fzc29jX2lkOworCXVpbnQxNl90IHNwcnN0YXRfc2lkOworCXVpbnQx
Nl90IHNwcnN0YXRfcG9saWN5OworCXVpbnQ2NF90IHNwcnN0YXRfYWJhbmRvbmVkX3Vuc2VudDsK
Kwl1aW50NjRfdCBzcHJzdGF0X2FiYW5kb25lZF9zZW50OworfTsKKworLyogU3RhbmRhcmQgVENQ
IENvbmdlc3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX1JGQzI1ODEgICAgICAgICAw
eDAwMDAwMDAwCisvKiBIaWdoIFNwZWVkIFRDUCBDb25nZXN0aW9uIENvbnRyb2wgKEZsb3lkKSAq
LworI2RlZmluZSBTQ1RQX0NDX0hTVENQICAgICAgICAgICAweDAwMDAwMDAxCisvKiBIVENQIENv
bmdlc3Rpb24gQ29udHJvbCAqLworI2RlZmluZSBTQ1RQX0NDX0hUQ1AgICAgICAgICAgICAweDAw
MDAwMDAyCisvKiBSVENDIENvbmdlc3Rpb24gQ29udHJvbCAtIFJGQzI1ODEgcGx1cyAqLworI2Rl
ZmluZSBTQ1RQX0NDX1JUQ0MgICAgICAgICAgICAweDAwMDAwMDAzCisKKyNkZWZpbmUgU0NUUF9D
Q19PUFRfUlRDQ19TRVRNT0RFIDB4MDAwMDIwMDAKKyNkZWZpbmUgU0NUUF9DQ19PUFRfVVNFX0RD
Q0NfRUMgIDB4MDAwMDIwMDEKKyNkZWZpbmUgU0NUUF9DQ19PUFRfU1RFQURZX1NURVAgIDB4MDAw
MDIwMDIKKworI2RlZmluZSBTQ1RQX0NNVF9PRkYgICAgICAgICAgICAwCisjZGVmaW5lIFNDVFBf
Q01UX0JBU0UgICAgICAgICAgIDEKKyNkZWZpbmUgU0NUUF9DTVRfUlBWMSAgICAgICAgICAgMgor
I2RlZmluZSBTQ1RQX0NNVF9SUFYyICAgICAgICAgICAzCisjZGVmaW5lIFNDVFBfQ01UX01QVENQ
ICAgICAgICAgIDQKKyNkZWZpbmUgU0NUUF9DTVRfTUFYICAgICAgICAgICAgU0NUUF9DTVRfTVBU
Q1AKKworLyogUlMgLSBTdXBwb3J0ZWQgc3RyZWFtIHNjaGVkdWxpbmcgbW9kdWxlcyBmb3IgcGx1
Z2dhYmxlCisgKiBzdHJlYW0gc2NoZWR1bGluZworICovCisvKiBEZWZhdWx0IHNpbXBsZSByb3Vu
ZC1yb2JpbiAqLworI2RlZmluZSBTQ1RQX1NTX0RFRkFVTFQgICAgICAgICAgICAgMHgwMDAwMDAw
MAorLyogUmVhbCByb3VuZC1yb2JpbiAqLworI2RlZmluZSBTQ1RQX1NTX1JPVU5EX1JPQklOICAg
ICAgICAgMHgwMDAwMDAwMQorLyogUmVhbCByb3VuZC1yb2JpbiBwZXIgcGFja2V0ICovCisjZGVm
aW5lIFNDVFBfU1NfUk9VTkRfUk9CSU5fUEFDS0VUICAweDAwMDAwMDAyCisvKiBQcmlvcml0eSAq
LworI2RlZmluZSBTQ1RQX1NTX1BSSU9SSVRZICAgICAgICAgICAgMHgwMDAwMDAwMworLyogRmFp
ciBCYW5kd2lkdGggKi8KKyNkZWZpbmUgU0NUUF9TU19GQUlSX0JBTkRXSVRIICAgICAgIDB4MDAw
MDAwMDQKKy8qIEZpcnN0LWNvbWUsIGZpcnN0LXNlcnZlICovCisjZGVmaW5lIFNDVFBfU1NfRklS
U1RfQ09NRSAgICAgICAgICAweDAwMDAwMDA1CisKKy8qKioqKioqKioqKioqKioqKioqKiBTeXN0
ZW0gY2FsbHMgKioqKioqKioqKioqKi8KKworc3RydWN0IHNvY2tldDsKKwordm9pZAordXNyc2N0
cF9pbml0KHVpbnQxNl90LAorICAgICAgICAgICAgIGludCAoKikodm9pZCAqYWRkciwgdm9pZCAq
YnVmZmVyLCBzaXplX3QgbGVuZ3RoLCB1aW50OF90IHRvcywgdWludDhfdCBzZXRfZGYpLAorICAg
ICAgICAgICAgIHZvaWQgKCopKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKSk7CisKK3N0cnVjdCBz
b2NrZXQgKgordXNyc2N0cF9zb2NrZXQoaW50IGRvbWFpbiwgaW50IHR5cGUsIGludCBwcm90b2Nv
bCwKKyAgICAgICAgICAgICAgIGludCAoKnJlY2VpdmVfY2IpKHN0cnVjdCBzb2NrZXQgKnNvY2ss
IHVuaW9uIHNjdHBfc29ja3N0b3JlIGFkZHIsIHZvaWQgKmRhdGEsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgZGF0YWxlbiwgc3RydWN0IHNjdHBfcmN2aW5mbywgaW50
IGZsYWdzLCB2b2lkICp1bHBfaW5mbyksCisgICAgICAgICAgICAgICBpbnQgKCpzZW5kX2NiKShz
dHJ1Y3Qgc29ja2V0ICpzb2NrLCB1aW50MzJfdCBzYl9mcmVlKSwKKyAgICAgICAgICAgICAgIHVp
bnQzMl90IHNiX3RocmVzaG9sZCwKKyAgICAgICAgICAgICAgIHZvaWQgKnVscF9pbmZvKTsKKwor
aW50Cit1c3JzY3RwX3NldHNvY2tvcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAg
ICAgICAgaW50IGxldmVsLAorICAgICAgICAgICAgICAgICAgIGludCBvcHRpb25fbmFtZSwKKyAg
ICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpvcHRpb25fdmFsdWUsCisgICAgICAgICAgICAg
ICAgICAgc29ja2xlbl90IG9wdGlvbl9sZW4pOworCitpbnQKK3VzcnNjdHBfZ2V0c29ja29wdChz
dHJ1Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgICAgICBpbnQgbGV2ZWwsCisgICAgICAg
ICAgICAgICAgICAgaW50IG9wdGlvbl9uYW1lLAorICAgICAgICAgICAgICAgICAgIHZvaWQgKm9w
dGlvbl92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKm9wdGlvbl9sZW4pOwor
CitpbnQKK3VzcnNjdHBfb3B0X2luZm8oc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAg
ICAgIHNjdHBfYXNzb2NfdCBpZCwKKyAgICAgICAgICAgICAgICAgaW50IG9wdCwKKyAgICAgICAg
ICAgICAgICAgdm9pZCAqYXJnLAorICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKnNpemUpOwor
CitpbnQKK3VzcnNjdHBfZ2V0cGFkZHJzKHN0cnVjdCBzb2NrZXQgKnNvLAorICAgICAgICAgICAg
ICAgICAgc2N0cF9hc3NvY190IGlkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRy
ICoqcmFkZHJzKTsKKwordm9pZAordXNyc2N0cF9mcmVlcGFkZHJzKHN0cnVjdCBzb2NrYWRkciAq
YWRkcnMpOworCitpbnQKK3VzcnNjdHBfZ2V0bGFkZHJzKHN0cnVjdCBzb2NrZXQgKnNvLAorICAg
ICAgICAgICAgICAgICAgc2N0cF9hc3NvY190IGlkLAorICAgICAgICAgICAgICAgICAgc3RydWN0
IHNvY2thZGRyICoqcmFkZHJzKTsKKwordm9pZAordXNyc2N0cF9mcmVlbGFkZHJzKHN0cnVjdCBz
b2NrYWRkciAqYWRkcnMpOworCitzc2l6ZV90Cit1c3JzY3RwX3NlbmR2KHN0cnVjdCBzb2NrZXQg
KnNvLAorICAgICAgICAgICAgICBjb25zdCB2b2lkICpkYXRhLAorICAgICAgICAgICAgICBzaXpl
X3QgbGVuLAorICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvLAorICAgICAgICAgICAg
ICBpbnQgYWRkcmNudCwKKyAgICAgICAgICAgICAgdm9pZCAqaW5mbywKKyAgICAgICAgICAgICAg
c29ja2xlbl90IGluZm9sZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBpbmZvdHlwZSwK
KyAgICAgICAgICAgICAgaW50IGZsYWdzKTsKKworc3NpemVfdAordXNyc2N0cF9yZWN2dihzdHJ1
Y3Qgc29ja2V0ICpzbywKKyAgICAgICAgICAgICAgdm9pZCAqZGJ1ZiwKKyAgICAgICAgICAgICAg
c2l6ZV90IGxlbiwKKyAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgICAg
ICAgICAgICBzb2NrbGVuX3QgKiBmcm9tbGVuLAorICAgICAgICAgICAgICB2b2lkICppbmZvLAor
ICAgICAgICAgICAgICBzb2NrbGVuX3QgKmluZm9sZW4sCisgICAgICAgICAgICAgIHVuc2lnbmVk
IGludCAqaW5mb3R5cGUsCisgICAgICAgICAgICAgIGludCAqbXNnX2ZsYWdzKTsKKworaW50Cit1
c3JzY3RwX2JpbmQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgc3RydWN0IHNvY2th
ZGRyICpuYW1lLAorICAgICAgICAgICAgIHNvY2tsZW5fdCBuYW1lbGVuKTsKKworI2RlZmluZSBT
Q1RQX0JJTkRYX0FERF9BRERSIDB4MDAwMDgwMDEKKyNkZWZpbmUgU0NUUF9CSU5EWF9SRU1fQURE
UiAweDAwMDA4MDAyCisKK2ludAordXNyc2N0cF9iaW5keChzdHJ1Y3Qgc29ja2V0ICpzbywKKyAg
ICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICphZGRycywKKyAgICAgICAgICAgICAgaW50IGFk
ZHJjbnQsCisgICAgICAgICAgICAgIGludCBmbGFncyk7CisKK2ludAordXNyc2N0cF9saXN0ZW4o
c3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICBpbnQgYmFja2xvZyk7CisKK3N0cnVj
dCBzb2NrZXQgKgordXNyc2N0cF9hY2NlcHQoc3RydWN0IHNvY2tldCAqc28sCisgICAgICAgICAg
ICAgICBzdHJ1Y3Qgc29ja2FkZHIgKiBhbmFtZSwKKyAgICAgICAgICAgICAgIHNvY2tsZW5fdCAq
IGFuYW1lbGVuKTsKKworc3RydWN0IHNvY2tldCAqCit1c3JzY3RwX3BlZWxvZmYoc3RydWN0IHNv
Y2tldCAqLCBzY3RwX2Fzc29jX3QpOworCitpbnQKK3VzcnNjdHBfY29ubmVjdChzdHJ1Y3Qgc29j
a2V0ICpzbywKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKm5hbWUsCisgICAgICAg
ICAgICAgICAgc29ja2xlbl90IG5hbWVsZW4pOworCitpbnQKK3VzcnNjdHBfY29ubmVjdHgoc3Ry
dWN0IHNvY2tldCAqc28sCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAq
YWRkcnMsIGludCBhZGRyY250LAorICAgICAgICAgICAgICAgICBzY3RwX2Fzc29jX3QgKmlkKTsK
Kwordm9pZAordXNyc2N0cF9jbG9zZShzdHJ1Y3Qgc29ja2V0ICpzbyk7CisKK3NjdHBfYXNzb2Nf
dAordXNyc2N0cF9nZXRhc3NvY2lkKHN0cnVjdCBzb2NrZXQgKiwgc3RydWN0IHNvY2thZGRyICop
OworCitpbnQKK3VzcnNjdHBfZmluaXNoKHZvaWQpOworCitpbnQKK3VzcnNjdHBfc2h1dGRvd24o
c3RydWN0IHNvY2tldCAqc28sIGludCBob3cpOworCit2b2lkCit1c3JzY3RwX2Nvbm5pbnB1dCh2
b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCB1aW50OF90KTsKKworaW50Cit1c3JzY3RwX3Nl
dF9ub25fYmxvY2tpbmcoc3RydWN0IHNvY2tldCAqLCBpbnQpOworCitpbnQKK3VzcnNjdHBfZ2V0
X25vbl9ibG9ja2luZyhzdHJ1Y3Qgc29ja2V0ICopOworCit2b2lkCit1c3JzY3RwX3JlZ2lzdGVy
X2FkZHJlc3Modm9pZCAqKTsKKwordm9pZAordXNyc2N0cF9kZXJlZ2lzdGVyX2FkZHJlc3Modm9p
ZCAqKTsKKworaW50Cit1c3JzY3RwX3NldF91bHBpbmZvKHN0cnVjdCBzb2NrZXQgKiwgdm9pZCAq
KTsKKworI2RlZmluZSBTQ1RQX0RVTVBfT1VUQk9VTkQgMQorI2RlZmluZSBTQ1RQX0RVTVBfSU5C
T1VORCAgMAorCitjaGFyICoKK3VzcnNjdHBfZHVtcHBhY2tldChjb25zdCB2b2lkICosIHNpemVf
dCwgaW50KTsKKwordm9pZAordXNyc2N0cF9mcmVlZHVtcGJ1ZmZlcihjaGFyICopOworCit2b2lk
Cit1c3JzY3RwX2VuYWJsZV9jcmMzMmNfb2ZmbG9hZCh2b2lkKTsKKwordm9pZAordXNyc2N0cF9k
aXNhYmxlX2NyYzMyY19vZmZsb2FkKHZvaWQpOworCit1aW50MzJfdAordXNyc2N0cF9jcmMzMmMo
dm9pZCAqLCBzaXplX3QpOworCisjZGVmaW5lIFVTUlNDVFBfVFVOQUJMRV9ERUNMKF9fZmllbGQp
ICAgICAgICAgICAgICAgXAoraW50IHVzcnNjdHBfdHVuYWJsZV9zZXRfICMjIF9fZmllbGQodWlu
dDMyX3QgdmFsdWUpO1wKK3VpbnQzMl90IHVzcnNjdHBfc3lzY3RsX2dldF8gIyMgX19maWVsZCh2
b2lkKTsKKworVVNSU0NUUF9UVU5BQkxFX0RFQ0woc2N0cF9oYXNodGJsc2l6ZSkKK1VTUlNDVFBf
VFVOQUJMRV9ERUNMKHNjdHBfcGNidGJsc2l6ZSkKK1VTUlNDVFBfVFVOQUJMRV9ERUNMKHNjdHBf
Y2h1bmtzY2FsZSkKKworI2RlZmluZSBVU1JTQ1RQX1NZU0NUTF9ERUNMKF9fZmllbGQpICAgICAg
ICAgICAgICAgXAoraW50IHVzcnNjdHBfc3lzY3RsX3NldF8gIyMgX19maWVsZCh1aW50MzJfdCB2
YWx1ZSk7XAordWludDMyX3QgdXNyc2N0cF9zeXNjdGxfZ2V0XyAjIyBfX2ZpZWxkKHZvaWQpOwor
CitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc2VuZHNwYWNlKQorVVNSU0NUUF9TWVNDVExfREVD
TChzY3RwX3JlY3ZzcGFjZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hdXRvX2FzY29uZikK
K1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9tdWx0aXBsZV9hc2NvbmZzKQorVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX2Vjbl9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcHJfZW5h
YmxlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2F1dGhfZW5hYmxlKQorVVNSU0NUUF9TWVND
VExfREVDTChzY3RwX2FzY29uZl9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcmVj
b25maWdfZW5hYmxlKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX25yc2Fja19lbmFibGUpCitV
U1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcGt0ZHJvcF9lbmFibGUpCitVU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfbm9fY3N1bV9vbl9sb29wYmFjaykKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9w
ZWVyX2NodW5rX29oKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21heF9idXJzdF9kZWZhdWx0
KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX21heF9jaHVua3Nfb25fcXVldWUpCitVU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfbWluX3NwbGl0X3BvaW50KQorVVNSU0NUUF9TWVNDVExfREVDTChz
Y3RwX2RlbGF5ZWRfc2Fja190aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBf
c2Fja19mcmVxX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfc3lzdGVtX2ZyZWVf
cmVzY19saW1pdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hc29jX2ZyZWVfcmVzY19saW1p
dCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oZWFydGJlYXRfaW50ZXJ2YWxfZGVmYXVsdCkK
K1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wbXR1X3JhaXNlX3RpbWVfZGVmYXVsdCkKK1VTUlND
VFBfU1lTQ1RMX0RFQ0woc2N0cF9zaHV0ZG93bl9ndWFyZF90aW1lX2RlZmF1bHQpCitVU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfc2VjcmV0X2xpZmV0aW1lX2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NU
TF9ERUNMKHNjdHBfcnRvX21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3J0
b19taW5fZGVmYXVsdCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydG9faW5pdGlhbF9kZWZh
dWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2luaXRfcnRvX21heF9kZWZhdWx0KQorVVNS
U0NUUF9TWVNDVExfREVDTChzY3RwX3ZhbGlkX2Nvb2tpZV9saWZlX2RlZmF1bHQpCitVU1JTQ1RQ
X1NZU0NUTF9ERUNMKHNjdHBfaW5pdF9ydHhfbWF4X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfYXNzb2NfcnR4X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3Rw
X3BhdGhfcnR4X21heF9kZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2FkZF9tb3Jl
X3RocmVzaG9sZCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ucl9pbmNvbWluZ19zdHJlYW1z
X2RlZmF1bHQpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbnJfb3V0Z29pbmdfc3RyZWFtc19k
ZWZhdWx0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2NtdF9vbl9vZmYpCitVU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfY210X3VzZV9kYWMpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNl
X2N3bmRfYmFzZWRfbWF4YnVyc3QpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfbmF0X2ZyaWVu
ZGx5KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX0wyX2FiY192YXJpYWJsZSkKK1VTUlNDVFBf
U1lTQ1RMX0RFQ0woc2N0cF9tYnVmX3RocmVzaG9sZF9jb3VudCkKK1VTUlNDVFBfU1lTQ1RMX0RF
Q0woc2N0cF9kb19kcmFpbikKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9oYl9tYXhidXJzdCkK
K1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9hYm9ydF9pZl9vbmVfMl9vbmVfaGl0c19saW1pdCkK
K1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9taW5fcmVzaWR1YWwpCitVU1JTQ1RQX1NZU0NUTF9E
RUNMKHNjdHBfbWF4X3JldHJhbl9jaHVuaykKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9sb2dn
aW5nX2xldmVsKQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfY2NfbW9kdWxlKQor
VVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2RlZmF1bHRfZnJhZ19pbnRlcmxlYXZlKQorVVNSU0NU
UF9TWVNDVExfREVDTChzY3RwX21vYmlsaXR5X2Jhc2UpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNj
dHBfbW9iaWxpdHlfZmFzdGhhbmRvZmYpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfaW5pdHNf
aW5jbHVkZV9uYXRfZnJpZW5kbHkpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdWRwX3R1bm5l
bGluZ19wb3J0KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2VuYWJsZV9zYWNrX2ltbWVkaWF0
ZWx5KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX3Z0YWdfdGltZV93YWl0KQorVVNSU0NUUF9T
WVNDVExfREVDTChzY3RwX2JsYWNraG9sZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9kaWFn
X2luZm9fY29kZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9mcl9tYXhfYnVyc3RfZGVmYXVs
dCkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9wYXRoX3BmX3RocmVzaG9sZCkKK1VTUlNDVFBf
U1lTQ1RMX0RFQ0woc2N0cF9kZWZhdWx0X3NzX21vZHVsZSkKK1VTUlNDVFBfU1lTQ1RMX0RFQ0wo
c2N0cF9ydHR2YXJfYncpCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfcnR0dmFyX3J0dCkKK1VT
UlNDVFBfU1lTQ1RMX0RFQ0woc2N0cF9ydHR2YXJfZXFyZXQpCitVU1JTQ1RQX1NZU0NUTF9ERUNM
KHNjdHBfc3RlYWR5X3N0ZXApCitVU1JTQ1RQX1NZU0NUTF9ERUNMKHNjdHBfdXNlX2RjY2NfZWNu
KQorVVNSU0NUUF9TWVNDVExfREVDTChzY3RwX2J1ZmZlcl9zcGxpdHRpbmcpCitVU1JTQ1RQX1NZ
U0NUTF9ERUNMKHNjdHBfaW5pdGlhbF9jd25kKQorI2lmZGVmIFNDVFBfREVCVUcKK1VTUlNDVFBf
U1lTQ1RMX0RFQ0woc2N0cF9kZWJ1Z19vbikKKy8qIE1vcmUgc3BlY2lmaWMgdmFsdWVzIGNhbiBi
ZSBmb3VuZCBpbiBzY3RwX2NvbnN0YW50cywgYnV0CisgKiBhcmUgbm90IGNvbnNpZGVyZWQgdG8g
YmUgcGFydCBvZiB0aGUgQVBJLgorICovCisjZGVmaW5lIFNDVFBfREVCVUdfTk9ORSAweDAwMDAw
MDAwCisjZGVmaW5lIFNDVFBfREVCVUdfQUxMICAweGZmZmZmZmZmCisjZW5kaWYKKyN1bmRlZiBV
U1JTQ1RQX1NZU0NUTF9ERUNMCitzdHJ1Y3Qgc2N0cF90aW1ldmFsIHsKKwl1aW50MzJfdCB0dl9z
ZWM7CisJdWludDMyX3QgdHZfdXNlYzsKK307CisKK3N0cnVjdCBzY3Rwc3RhdCB7CisJc3RydWN0
IHNjdHBfdGltZXZhbCBzY3Rwc19kaXNjb250aW51aXR5dGltZTsgLyogc2N0cFN0YXRzIDE4IChU
aW1lU3RhbXApICovCisJLyogTUlCIGFjY29yZGluZyB0byBSRkMgMzg3MyAqLworCXVpbnQzMl90
ICBzY3Rwc19jdXJyZXN0YWI7ICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDEgICAoR2F1Z2UzMikg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfYWN0aXZlZXN0YWI7ICAgICAgICAgLyogc2N0cFN0YXRzICAy
IChDb3VudGVyMzIpICovCisJdWludDMyX3QgIHNjdHBzX3Jlc3RhcnRlc3RhYjsKKwl1aW50MzJf
dCAgc2N0cHNfY29sbGlzaW9uZXN0YWI7CisJdWludDMyX3QgIHNjdHBzX3Bhc3NpdmVlc3RhYjsg
ICAgICAgIC8qIHNjdHBTdGF0cyAgMyAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19h
Ym9ydGVkOyAgICAgICAgICAgICAvKiBzY3RwU3RhdHMgIDQgKENvdW50ZXIzMikgKi8KKwl1aW50
MzJfdCAgc2N0cHNfc2h1dGRvd247ICAgICAgICAgICAgLyogc2N0cFN0YXRzICA1IChDb3VudGVy
MzIpICovCisJdWludDMyX3QgIHNjdHBzX291dG9mdGhlYmx1ZTsgICAgICAgIC8qIHNjdHBTdGF0
cyAgNiAoQ291bnRlcjMyKSAqLworCXVpbnQzMl90ICBzY3Rwc19jaGVja3N1bWVycm9yczsgICAg
ICAvKiBzY3RwU3RhdHMgIDcgKENvdW50ZXIzMikgKi8KKwl1aW50MzJfdCAgc2N0cHNfb3V0Y29u
dHJvbGNodW5rczsgICAgLyogc2N0cFN0YXRzICA4IChDb3VudGVyNjQpICovCisJdWludDMyX3Qg
IHNjdHBzX291dG9yZGVyY2h1bmtzOyAgICAgIC8qIHNjdHBTdGF0cyAgOSAoQ291bnRlcjY0KSAq
LworCXVpbnQzMl90ICBzY3Rwc19vdXR1bm9yZGVyY2h1bmtzOyAgICAvKiBzY3RwU3RhdHMgMTAg
KENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5jb250cm9sY2h1bmtzOyAgICAgLyog
c2N0cFN0YXRzIDExIChDb3VudGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX2lub3JkZXJjaHVu
a3M7ICAgICAgIC8qIHNjdHBTdGF0cyAxMiAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rw
c19pbnVub3JkZXJjaHVua3M7ICAgICAvKiBzY3RwU3RhdHMgMTMgKENvdW50ZXI2NCkgKi8KKwl1
aW50MzJfdCAgc2N0cHNfZnJhZ3Vzcm1zZ3M7ICAgICAgICAgLyogc2N0cFN0YXRzIDE0IChDb3Vu
dGVyNjQpICovCisJdWludDMyX3QgIHNjdHBzX3JlYXNtdXNybXNnczsgICAgICAgIC8qIHNjdHBT
dGF0cyAxNSAoQ291bnRlcjY0KSAqLworCXVpbnQzMl90ICBzY3Rwc19vdXRwYWNrZXRzOyAgICAg
ICAgICAvKiBzY3RwU3RhdHMgMTYgKENvdW50ZXI2NCkgKi8KKwl1aW50MzJfdCAgc2N0cHNfaW5w
YWNrZXRzOyAgICAgICAgICAgLyogc2N0cFN0YXRzIDE3IChDb3VudGVyNjQpICovCisKKwkvKiBp
bnB1dCBzdGF0aXN0aWNzOiAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2cGFja2V0czsgICAgICAg
ICAvKiB0b3RhbCBpbnB1dCBwYWNrZXRzICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2
ZGF0YWdyYW1zOyAgICAgICAvKiB0b3RhbCBpbnB1dCBkYXRhZ3JhbXMgICAgICAqLworCXVpbnQz
Ml90ICBzY3Rwc19yZWN2cGt0d2l0aGRhdGE7ICAgICAvKiB0b3RhbCBwYWNrZXRzIHRoYXQgaGFk
IGRhdGEgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdnNhY2tzOyAgICAgICAgICAgLyogdG90YWwg
aW5wdXQgU0FDSyBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmRhdGE7ICAgICAg
ICAgICAgLyogdG90YWwgaW5wdXQgREFUQSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNf
cmVjdmR1cGRhdGE7ICAgICAgICAgLyogdG90YWwgaW5wdXQgZHVwbGljYXRlIERBVEEgY2h1bmtz
ICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXQ7ICAgICAgIC8qIHRvdGFsIGlucHV0
IEhCIGNodW5rcyAgICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZoZWFydGJlYXRhY2s7ICAg
IC8qIHRvdGFsIGlucHV0IEhCLUFDSyBjaHVua3MgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3Zl
Y25lOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEVDTkUgY2h1bmtzICAgICovCisJdWludDMy
X3QgIHNjdHBzX3JlY3ZhdXRoOyAgICAgICAgICAgIC8qIHRvdGFsIGlucHV0IEFVVEggY2h1bmtz
ICAgICovCisJdWludDMyX3QgIHNjdHBzX3JlY3ZhdXRobWlzc2luZzsgICAgIC8qIHRvdGFsIGlu
cHV0IGNodW5rcyBtaXNzaW5nIEFVVEggKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxobWFj
aWQ7ICAgICAgLyogdG90YWwgbnVtYmVyIG9mIGludmFsaWQgSE1BQyBpZHMgcmVjZWl2ZWQgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfcmVjdml2YWxrZXlpZDsgICAgICAgLyogdG90YWwgbnVtYmVyIG9m
IGludmFsaWQgc2VjcmV0IGlkcyByZWNlaXZlZCAqLworCXVpbnQzMl90ICBzY3Rwc19yZWN2YXV0
aGZhaWxlZDsgICAgICAvKiB0b3RhbCBudW1iZXIgb2YgYXV0aCBmYWlsZWQgKi8KKwl1aW50MzJf
dCAgc2N0cHNfcmVjdmV4cHJlc3M7ICAgICAgICAgLyogdG90YWwgZmFzdCBwYXRoIHJlY2VpdmVz
IGFsbCBvbmUgY2h1bmsgKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVjdmV4cHJlc3NtOyAgICAgICAg
LyogdG90YWwgZmFzdCBwYXRoIG11bHRpLXBhcnQgZGF0YSAqLworCXVpbnQzMl90ICBzY3Rwc19y
ZWN2X3NwYXJlOyAgICAgICAgICAvKiBmb3JtZXJseSBzY3Rwc19yZWN2bm9jcmMgKi8KKwl1aW50
MzJfdCAgc2N0cHNfcmVjdnN3Y3JjOworCXVpbnQzMl90ICBzY3Rwc19yZWN2aHdjcmM7CisKKwkv
KiBvdXRwdXQgc3RhdGlzdGljczogKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHBhY2tldHM7ICAg
ICAgICAgLyogdG90YWwgb3V0cHV0IHBhY2tldHMgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZHNhY2tzOyAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IFNBQ0tzICAgICAgICAgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZGRhdGE7ICAgICAgICAgICAgLyogdG90YWwgb3V0cHV0IERBVEEg
Y2h1bmtzICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHJldHJhbnNkYXRhOyAgICAgLyogdG90
YWwgb3V0cHV0IHJldHJhbnNtaXR0ZWQgREFUQSBjaHVua3MgKi8KKwl1aW50MzJfdCAgc2N0cHNf
c2VuZGZhc3RyZXRyYW5zOyAgICAgLyogdG90YWwgb3V0cHV0IGZhc3QgcmV0cmFuc21pdHRlZCBE
QVRBIGNodW5rcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kbXVsdGZhc3RyZXRyYW5zOyAvKiB0
b3RhbCBGUidzIHRoYXQgaGFwcGVuZWQgbW9yZSB0aGFuIG9uY2UKKwkgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICogdG8gc2FtZSBjaHVuayAodS1kZWwgbXVsdGktZnIgYWxn
bykuCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90
ICBzY3Rwc19zZW5kaGVhcnRiZWF0OyAgICAgICAvKiB0b3RhbCBvdXRwdXQgSEIgY2h1bmtzICAg
ICAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kZWNuZTsgICAgICAgICAgICAvKiB0b3RhbCBvdXRw
dXQgRUNORSBjaHVua3MgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZGF1dGg7ICAgICAgICAg
ICAgLyogdG90YWwgb3V0cHV0IEFVVEggY2h1bmtzIEZJWE1FICAgKi8KKwl1aW50MzJfdCAgc2N0
cHNfc2VuZGVycm9yczsgICAgICAgICAgLyogaXBfb3V0cHV0IGVycm9yIGNvdW50ZXIgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZF9zcGFyZTsgICAgICAgICAgLyogZm9ybWVybHkgc2N0cHNfc2Vu
ZG5vY3JjICovCisJdWludDMyX3QgIHNjdHBzX3NlbmRzd2NyYzsKKwl1aW50MzJfdCAgc2N0cHNf
c2VuZGh3Y3JjOworCS8qIFBDS0RST1BSRVAgc3RhdGlzdGljczogKi8KKwl1aW50MzJfdCAgc2N0
cHNfcGRycGZtYm94OyAgICAgICAgICAgLyogUGFja2V0IGRyb3AgZnJvbSBtaWRkbGUgYm94ICov
CisJdWludDMyX3QgIHNjdHBzX3BkcnBmZWhvczsgICAgICAgICAgIC8qIFAtZHJvcCBmcm9tIGVu
ZCBob3N0ICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBtYmRhOyAgICAgICAgICAgIC8qIFAtZHJv
cHMgd2l0aCBkYXRhICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBtYmN0OyAgICAgICAgICAgIC8q
IFAtZHJvcHMsIG5vbi1kYXRhLCBub24tZW5kaG9zdCAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJw
YndycHQ7ICAgICAgICAgICAvKiBQLWRyb3AsIG5vbi1lbmRob3N0LCBiYW5kd2lkdGggcmVwIG9u
bHkgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGNydXB0OyAgICAgICAgICAgLyogUC1kcm9wLCBu
b3QgZW5vdWdoIGZvciBjaHVuayBoZWFkZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycG5lZGF0
OyAgICAgICAgICAgLyogUC1kcm9wLCBub3QgZW5vdWdoIGRhdGEgdG8gY29uZmlybSAqLworCXVp
bnQzMl90ICBzY3Rwc19wZHJwcGRicms7ICAgICAgICAgICAvKiBQLWRyb3AsIHdoZXJlIHByb2Nl
c3NfY2h1bmtfZHJvcCBzYWlkIGJyZWFrICovCisJdWludDMyX3QgIHNjdHBzX3BkcnB0c25uZjsg
ICAgICAgICAgIC8qIFAtZHJvcCwgY291bGQgbm90IGZpbmQgVFNOICovCisJdWludDMyX3QgIHNj
dHBzX3BkcnBkbmZuZDsgICAgICAgICAgIC8qIFAtZHJvcCwgYXR0ZW1wdCByZXZlcnNlIFRTTiBs
b29rdXAgKi8KKwl1aW50MzJfdCAgc2N0cHNfcGRycGRpd25wOyAgICAgICAgICAgLyogUC1kcm9w
LCBlLWhvc3QgY29uZmlybXMgemVyby1yd25kICovCisJdWludDMyX3QgIHNjdHBzX3BkcnBkaXpy
dzsgICAgICAgICAgIC8qIFAtZHJvcCwgbWlkYm94IGNvbmZpcm1zIG5vIHNwYWNlICovCisJdWlu
dDMyX3QgIHNjdHBzX3BkcnBiYWRkOyAgICAgICAgICAgIC8qIFAtZHJvcCwgZGF0YSBkaWQgbm90
IG1hdGNoIFRTTiAqLworCXVpbnQzMl90ICBzY3Rwc19wZHJwbWFyazsgICAgICAgICAgICAvKiBQ
LWRyb3AsIFRTTidzIG1hcmtlZCBmb3IgRmFzdCBSZXRyYW4gKi8KKwkvKiB0aW1lb3V0cyAqLwor
CXVpbnQzMl90ICBzY3Rwc190aW1vaXRlcmF0b3I7ICAgICAgICAvKiBOdW1iZXIgb2YgaXRlcmF0
b3IgdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2RhdGE7ICAgICAg
ICAgICAgLyogTnVtYmVyIG9mIFQzIGRhdGEgdGltZSBvdXRzICovCisJdWludDMyX3QgIHNjdHBz
X3RpbW93aW5kb3dwcm9iZTsgICAgIC8qIE51bWJlciBvZiB3aW5kb3cgcHJvYmUgKFQzKSB0aW1l
cnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vaW5pdDsgICAgICAgICAgICAv
KiBOdW1iZXIgb2YgSU5JVCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190
aW1vc2FjazsgICAgICAgICAgICAvKiBOdW1iZXIgb2Ygc2FjayB0aW1lcnMgdGhhdCBmaXJlZCAq
LworCXVpbnQzMl90ICBzY3Rwc190aW1vc2h1dGRvd247ICAgICAgICAvKiBOdW1iZXIgb2Ygc2h1
dGRvd24gdGltZXJzIHRoYXQgZmlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2hlYXJ0YmVh
dDsgICAgICAgLyogTnVtYmVyIG9mIGhlYXJ0YmVhdCB0aW1lcnMgdGhhdCBmaXJlZCAqLworCXVp
bnQzMl90ICBzY3Rwc190aW1vY29va2llOyAgICAgICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYSBj
b29raWUgdGltZW91dCBmaXJlZCAqLworCXVpbnQzMl90ICBzY3Rwc190aW1vc2VjcmV0OyAgICAg
ICAgICAvKiBOdW1iZXIgb2YgdGltZXMgYW4gZW5kcG9pbnQgY2hhbmdlZCBpdHMgY29va2llIHNl
Y3JldCovCisJdWludDMyX3QgIHNjdHBzX3RpbW9wYXRobXR1OyAgICAgICAgIC8qIE51bWJlciBv
ZiBQTVRVIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zaHV0ZG93
bmFjazsgICAgIC8qIE51bWJlciBvZiBzaHV0ZG93biBhY2sgdGltZXJzIHRoYXQgZmlyZWQgKi8K
Kwl1aW50MzJfdCAgc2N0cHNfdGltb3NodXRkb3duZ3VhcmQ7ICAgLyogTnVtYmVyIG9mIHNodXRk
b3duIGd1YXJkIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9zdHJt
cnN0OyAgICAgICAgIC8qIE51bWJlciBvZiBzdHJlYW0gcmVzZXQgdGltZXJzIHRoYXQgZmlyZWQg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2Vhcmx5ZnI7ICAgICAgICAgLyogTnVtYmVyIG9mIGVh
cmx5IEZSIHRpbWVycyB0aGF0IGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9hc2NvbmY7
ICAgICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhbiBhc2NvbmYgdGltZXIgZmlyZWQgKi8KKwl1
aW50MzJfdCAgc2N0cHNfdGltb2RlbHByaW07CSAgICAgLyogTnVtYmVyIG9mIHRpbWVzIGEgcHJp
bV9kZWxldGVkIHRpbWVyIGZpcmVkICovCisJdWludDMyX3QgIHNjdHBzX3RpbW9hdXRvY2xvc2U7
ICAgICAgIC8qIE51bWJlciBvZiB0aW1lcyBhdXRvIGNsb3NlIHRpbWVyIGZpcmVkICovCisJdWlu
dDMyX3QgIHNjdHBzX3RpbW9hc3NvY2tpbGw7ICAgICAgIC8qIE51bWJlciBvZiBhc29jIGZyZWUg
dGltZXJzIGV4cGlyZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfdGltb2lucGtpbGw7ICAgICAgICAg
LyogTnVtYmVyIG9mIGlucCBmcmVlIHRpbWVycyBleHBpcmVkICovCisJLyogZm9ybWVyIGVhcmx5
IEZSIGNvdW50ZXJzICovCisJdWludDMyX3QgIHNjdHBzX3NwYXJlWzExXTsKKwkvKiBvdGhlcnMg
Ki8KKwl1aW50MzJfdCAgc2N0cHNfaGRyb3BzOyAgICAgICAgICAgICAgLyogcGFja2V0IHNob3J0
ZXIgdGhhbiBoZWFkZXIgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkc3VtOyAgICAgICAgICAgICAg
LyogY2hlY2tzdW0gZXJyb3IgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfbm9wb3J0
OyAgICAgICAgICAgICAgLyogbm8gZW5kcG9pbnQgZm9yIHBvcnQgICAgICAgKi8KKwl1aW50MzJf
dCAgc2N0cHNfYmFkdnRhZzsgICAgICAgICAgICAgLyogYmFkIHYtdGFnICAgICAgICAgICAgICAg
ICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfYmFkc2lkOyAgICAgICAgICAgICAgLyogYmFkIFNJRCAg
ICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfbm9tZW07ICAgICAgICAgICAg
ICAgLyogbm8gbWVtb3J5ICAgICAgICAgICAgICAgICAgKi8KKwl1aW50MzJfdCAgc2N0cHNfZmFz
dHJldHJhbnNpbnJ0dDsgICAgLyogbnVtYmVyIG9mIG11bHRpcGxlIEZSIGluIGEgUlRUIHdpbmRv
dyAqLworCXVpbnQzMl90ICBzY3Rwc19tYXJrZWRyZXRyYW5zOworCXVpbnQzMl90ICBzY3Rwc19u
YWdsZXNlbnQ7ICAgICAgICAgICAvKiBuYWdsZSBhbGxvd2VkIHNlbmRpbmcgICAgICAqLworCXVp
bnQzMl90ICBzY3Rwc19uYWdsZXF1ZXVlZDsgICAgICAgICAvKiBuYWdsZSBkb2Vzbid0IGFsbG93
IHNlbmRpbmcgKi8KKwl1aW50MzJfdCAgc2N0cHNfbWF4YnVyc3RxdWV1ZWQ7ICAgICAgLyogbWF4
IGJ1cnN0IGRvZXNuJ3QgYWxsb3cgc2VuZGluZyAqLworCXVpbnQzMl90ICBzY3Rwc19pZm5vbWVt
cXVldWVkOyAgICAgICAvKiBsb29rIGFoZWFkIHRlbGxzIHVzIG5vIG1lbW9yeSBpbgorCSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpbnRlcmZhY2UgcmluZyBidWZmZXIg
T1Igd2UgaGFkIGEKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2Vu
ZCBlcnJvciBhbmQgYXJlIHF1ZXVpbmcgb25lIHNlbmQuCisJICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAqLworCXVpbnQzMl90ICBzY3Rwc193aW5kb3dwcm9iZWQ7ICAgICAg
ICAvKiB0b3RhbCBudW1iZXIgb2Ygd2luZG93IHByb2JlcyBzZW50ICovCisJdWludDMyX3QgIHNj
dHBzX2xvd2xldmVsZXJyOyAgICAgICAgIC8qIHRvdGFsIHRpbWVzIGFuIG91dHB1dCBlcnJvciBj
YXVzZXMgdXMKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gY2xh
bXAgZG93biBvbiBuZXh0IHVzZXIgc2VuZC4KKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICovCisJdWludDMyX3QgIHNjdHBzX2xvd2xldmVsZXJydXNyOyAgICAgIC8qIHRv
dGFsIHRpbWVzIHNjdHBfc2VuZGVycm9ycyB3ZXJlIGNhdXNlZCBmcm9tCisJICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGEgdXNlciBzZW5kIGZyb20gYSB1c2VyIGludm9r
ZWQgc2VuZCBub3QKKwkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYSBz
YWNrIHJlc3BvbnNlCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwor
CXVpbnQzMl90ICBzY3Rwc19kYXRhZHJvcGNoa2xtdDsgICAgICAvKiBOdW1iZXIgb2YgaW4gZGF0
YSBkcm9wcyBkdWUgdG8gY2h1bmsgbGltaXQgcmVhY2hlZCAqLworCXVpbnQzMl90ICBzY3Rwc19k
YXRhZHJvcHJ3bmQ7ICAgICAgICAvKiBOdW1iZXIgb2YgaW4gZGF0YSBkcm9wcyBkdWUgdG8gcndu
ZCBsaW1pdCByZWFjaGVkICovCisJdWludDMyX3QgIHNjdHBzX2VjbmVyZWR1Y2VkY3duZDsgICAg
IC8qIE51bWJlciBvZiB0aW1lcyBhIEVDTiByZWR1Y2VkIHRoZSBjd25kICovCisJdWludDMyX3Qg
IHNjdHBzX3Z0YWdleHByZXNzOyAgICAgICAgIC8qIFVzZWQgZXhwcmVzcyBsb29rdXAgdmlhIHZ0
YWcgKi8KKwl1aW50MzJfdCAgc2N0cHNfdnRhZ2JvZ3VzOyAgICAgICAgICAgLyogQ29sbGlzaW9u
IGluIGV4cHJlc3MgbG9va3VwLiAqLworCXVpbnQzMl90ICBzY3Rwc19wcmltYXJ5X3JhbmRyeTsg
ICAgICAvKiBOdW1iZXIgb2YgdGltZXMgdGhlIHNlbmRlciByYW4gZHJ5IG9mIHVzZXIgZGF0YSBv
biBwcmltYXJ5ICovCisJdWludDMyX3QgIHNjdHBzX2NtdF9yYW5kcnk7ICAgICAgICAgIC8qIFNh
bWUgZm9yIGFib3ZlICovCisJdWludDMyX3QgIHNjdHBzX3Nsb3dwYXRoX3NhY2s7ICAgICAgIC8q
IFNhY2tzIHRoZSBzbG93IHdheSAqLworCXVpbnQzMl90ICBzY3Rwc193dV9zYWNrc19zZW50OyAg
ICAgICAvKiBXaW5kb3cgVXBkYXRlIG9ubHkgc2Fja3Mgc2VudCAqLworCXVpbnQzMl90ICBzY3Rw
c19zZW5kc193aXRoX2ZsYWdzOyAgICAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBzaW5mb19mbGFn
cyAhPTAgKi8KKwl1aW50MzJfdCAgc2N0cHNfc2VuZHNfd2l0aF91bm9yZDsgICAgLyogbnVtYmVy
IG9mIHVub3JkZXJlZCBzZW5kcyAqLworCXVpbnQzMl90ICBzY3Rwc19zZW5kc193aXRoX2VvZjsg
ICAgICAvKiBudW1iZXIgb2Ygc2VuZHMgd2l0aCBFT0YgZmxhZyBzZXQgKi8KKwl1aW50MzJfdCAg
c2N0cHNfc2VuZHNfd2l0aF9hYm9ydDsgICAgLyogbnVtYmVyIG9mIHNlbmRzIHdpdGggQUJPUlQg
ZmxhZyBzZXQgKi8KKwl1aW50MzJfdCAgc2N0cHNfcHJvdG9jb2xfZHJhaW5fY2FsbHM7LyogbnVt
YmVyIG9mIHRpbWVzIHByb3RvY29sIGRyYWluIGNhbGxlZCAqLworCXVpbnQzMl90ICBzY3Rwc19w
cm90b2NvbF9kcmFpbnNfZG9uZTsvKiBudW1iZXIgb2YgdGltZXMgd2UgZGlkIGEgcHJvdG9jb2wg
ZHJhaW4gKi8KKwl1aW50MzJfdCAgc2N0cHNfcmVhZF9wZWVrczsgICAgICAgICAgLyogTnVtYmVy
IG9mIHRpbWVzIHJlY3Ygd2FzIGNhbGxlZCB3aXRoIHBlZWsgKi8KKwl1aW50MzJfdCAgc2N0cHNf
Y2FjaGVkX2NoazsgICAgICAgICAgLyogTnVtYmVyIG9mIGNhY2hlZCBjaHVua3MgdXNlZCAqLwor
CXVpbnQzMl90ICBzY3Rwc19jYWNoZWRfc3RybW9xOyAgICAgICAvKiBOdW1iZXIgb2YgY2FjaGVk
IHN0cmVhbSBvcSdzIHVzZWQgKi8KKwl1aW50MzJfdCAgc2N0cHNfbGVmdF9hYmFuZG9uOyAgICAg
ICAgLyogTnVtYmVyIG9mIHVucmVhZCBtZXNzYWdlcyBhYmFuZG9uZWQgYnkgY2xvc2UgKi8KKwl1
aW50MzJfdCAgc2N0cHNfc2VuZF9idXJzdF9hdm9pZDsgICAgLyogVW51c2VkICovCisJdWludDMy
X3QgIHNjdHBzX3NlbmRfY3duZF9hdm9pZDsgICAgIC8qIFNlbmQgY3duZCBmdWxsICBhdm9pZGFu
Y2UsIGFscmVhZHkgbWF4IGJ1cnN0IGluZmxpZ2h0IHRvIG5ldCAqLworCXVpbnQzMl90ICBzY3Rw
c19md2R0c25fbWFwX292ZXI7ICAgICAvKiBudW1iZXIgb2YgbWFwIGFycmF5IG92ZXItcnVucyB2
aWEgZndkLXRzbidzICovCisJdWludDMyX3QgIHNjdHBzX3F1ZXVlX3VwZF9lY25lOyAgICAgIC8q
IE51bWJlciBvZiB0aW1lcyB3ZSBxdWV1ZWQgb3IgdXBkYXRlZCBhbiBFQ04gY2h1bmsgb24gc2Vu
ZCBxdWV1ZSAqLworCXVpbnQzMl90ICBzY3Rwc19yZXNlcnZlZFszMV07ICAgICAgICAvKiBGdXR1
cmUgQUJJIGNvbXBhdCAtIHJlbW92ZSBpbnQncyBmcm9tIGhlcmUgd2hlbiBhZGRpbmcgbmV3ICov
Cit9OworCit2b2lkCit1c3JzY3RwX2dldF9zdGF0KHN0cnVjdCBzY3Rwc3RhdCAqKTsKKworI2lm
ZGVmIF9XSU4zMgorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcoZGVmYXVsdDogNDIw
MCkKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZp
eGluZy11c3JjdHAtbGlicmFyeS1jb21waWxhdGlvbi1lcnJvcnMucGF0Y2ggYi9Tb3VyY2UvVGhp
cmRQYXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBp
bGF0aW9uLWVycm9ycy5wYXRjaAppbmRleCA5MzY0NzExNTRhNTk0Yjc1MGFjYmE1OGY3MzAzYTAz
YjRmNzRkYmM3Li5kYTUwOTI3ZGU5YjU1NGZmN2I4ZjMwYmU4NGQ1ZmMxYzM3YmFkODJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVz
cmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5wYXRjaAorKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvV2ViS2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0
aW9uLWVycm9ycy5wYXRjaApAQCAtMSw2NyArMSw4IEBACi1Gcm9tIGJlNzFhNTRkYTliMGFlN2Yz
NzllZmYwMzc3MzUzNzljOWU4NWU5Y2IgTW9uIFNlcCAxNyAwMDowMDowMCAyMDAxCi1Gcm9tOiBZ
b3Vlbm4gRmFibGV0IDx5b3Vlbm5AYXBwbGUuY29tPgotRGF0ZTogVGh1LCAxNCBEZWMgMjAxNyAx
Mzo0NDo0MSAtMDgwMAotU3ViamVjdDogW1BBVENIIDIvOF0gRml4aW5nIHVzcmN0cCBsaWJyYXJ5
IGNvbXBpbGF0aW9uIGVycm9ycwotCi0tLS0KLSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyAgICB8IDggKysrKysrLS0KLSAuLi4v
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0
LmMgICB8IDUgKysrLS0KLSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi9uZXRpbmV0L3NjdHBfcGNiLmMgICAgICB8IDEgLQotIC4uLi9saWJ3ZWJydGMvU291cmNlL3Ro
aXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIHwgMyArKy0KLSA0IGZp
bGVzIGNoYW5nZWQsIDExIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCi0KLWRpZmYgLS1n
aXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNj
dHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xp
YndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0
cF9pbnB1dC5jCi1pbmRleCAwNjQ5ZWMyZTMyNS4uZTRiYjUxMzc4ZGMgMTAwNzU1Ci0tLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYwotKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3Rw
X2lucHV0LmMKLUBAIC0xNzI4LDEwICsxNzI4LDEyIEBAIHNjdHBfcHJvY2Vzc19jb29raWVfZXhp
c3Rpbmcoc3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCi0gCQkJCSAqIGRv
bid0IGRvdWJsZSB0aGluZ3MKLSAJCQkJICovCi0gCQkJCW5ldC0+aGJfcmVzcG9uZGVkID0gMTsK
LSsJCQkJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOwotIAkJCQluZXQtPlJUTyA9IHNjdHBf
Y2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCBuZXQsCi0tCQkJCQkJCSAgICAgICZjb29raWUtPnRp
bWVfZW50ZXJlZCwKLSsJCQkJCQkJICAgICAgJnRpbWVfZW50ZXJlZCwKLSAJCQkJCQkJICAgICAg
c2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCi0gCQkJCQkJCSAgICAgIFNDVFBfUlRUX0ZST01f
Tk9OX0RBVEEpOwotKwkJCQljb29raWUtPnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50ZXJlZDsKLSAK
LSAJCQkJaWYgKHN0Y2ItPmFzb2Muc2N0cF9hdXRvY2xvc2VfdGlja3MgJiYKLSAJCQkJICAgIChz
Y3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xPU0UpKSkgewotQEAg
LTI0ODEsOSArMjQ4MywxMSBAQCBzY3RwX3Byb2Nlc3NfY29va2llX25ldyhzdHJ1Y3QgbWJ1ZiAq
bSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKLSAJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwo
JnN0Y2ItPmFzb2MudGltZV9lbnRlcmVkKTsKLSAJaWYgKChuZXRwICE9IE5VTEwpICYmICgqbmV0
cCAhPSBOVUxMKSkgewotIAkJLyogY2FsY3VsYXRlIHRoZSBSVFQgYW5kIHNldCB0aGUgZW5jYXBz
IHBvcnQgKi8KLSsJCXN0cnVjdCB0aW1ldmFsIHRpbWVfZW50ZXJlZDsKLSAJCSgqbmV0cCktPlJU
TyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCAqbmV0cCwKLS0JCQkJCQkgICZjb29r
aWUtPnRpbWVfZW50ZXJlZCwgc2N0cF9hbGlnbl91bnNhZmVfbWFrZWNvcHksCi0rCQkJCQkJICAm
dGltZV9lbnRlcmVkLCBzY3RwX2FsaWduX3Vuc2FmZV9tYWtlY29weSwKLSAJCQkJCQkgIFNDVFBf
UlRUX0ZST01fTk9OX0RBVEEpOwotKwkJY29va2llLT50aW1lX2VudGVyZWQgPSB0aW1lX2VudGVy
ZWQ7Ci0gCX0KLSAJLyogcmVzcG9uZCB3aXRoIGEgQ09PS0lFLUFDSyAqLwotIAlzY3RwX3NlbmRf
Y29va2llX2FjayhzdGNiKTsKLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0
cHV0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3Vz
cnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKLWluZGV4IDkwYjBiZjNkNjM2
Li5mNjQ2Y2EzYTNjNiAxMDA3NTUKLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9T
b3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQu
YwotKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX291dHB1dC5jCi1AQCAtNjAyNCw4ICs2MDI0
LDkgQEAgc2N0cF9zZW5kX2luaXRpYXRlX2FjayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1
Y3Qgc2N0cF90Y2IgKnN0Y2IsCi0gCW1lbXNldCgmc3RjLCAwLCBzaXplb2Yoc3RydWN0IHNjdHBf
c3RhdGVfY29va2llKSk7Ci0gCi0gCS8qIHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCi0tCSh2
b2lkKVNDVFBfR0VUVElNRV9USU1FVkFMKCZzdGMudGltZV9lbnRlcmVkKTsKLS0KLSsJc3RydWN0
IHRpbWV2YWwgdGltZV9lbnRlcmVkOwotKwkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZBTCgmdGlt
ZV9lbnRlcmVkKTsKLSsJc3RjLnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50ZXJlZDsKLSAJLyogcG9w
dWxhdGUgYW55IHRpZSB0YWdzICovCi0gCWlmIChhc29jICE9IE5VTEwpIHsKLSAJCS8qIHVubG9j
ayBiZWZvcmUgdGFnIHNlbGVjdGlvbnMgKi8KLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcGNiLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKLWluZGV4IDllOWZjYTA2
YzRkLi5kMGM3NzBlMzA3OCAxMDA3NTUKLS0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0
Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2Iu
YwotKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91
c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCi1AQCAtNjgwOSw3ICs2ODA5LDYg
QEAgc2N0cF9wY2JfaW5pdCgpCitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2Vi
cnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi9uZXRp
bmV0L3NjdHBfcGNiLmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJk
X3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL25ldGluZXQvc2N0cF9wY2IuYwor
aW5kZXggNmVmY2JhYjkxZTguLmY4ZGQwMjQwYWYzIDEwMDc1NQorLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvbmV0
aW5ldC9zY3RwX3BjYi5jCitAQCAtNjg1Miw3ICs2ODUyLDYgQEAgc2N0cF9wY2JfaW5pdCgpCiAg
I2VuZGlmCiAgI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKICAJbWJ1Zl9pbml0aWFsaXplKE5V
TEwpOwpAQCAtNjksMjAgKzEwLDExMCBAQCBpbmRleCA5ZTlmY2EwNmM0ZC4uZDBjNzcwZTMwNzgg
MTAwNzU1CiAgI2lmIGRlZmluZWQoSU5FVCkgfHwgZGVmaW5lZChJTkVUNikKICAJcmVjdl90aHJl
YWRfaW5pdCgpOwogICNlbmRpZgotZGlmZiAtLWdpdCBhL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzZXJfYXRvbWljLmgg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAv
dXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCi1pbmRleCBiODQxNWM2MDQ3ZS4uZjM0NDA1NWRjNWIg
MTAwNzU1Ci0tLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3Bh
cnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCi0rKysgYi9Tb3VyY2UvVGhpcmRQ
YXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c2Vy
X2F0b21pYy5oCitkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5o
IGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3Rw
L3VzcnNjdHBsaWIvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oCitpbmRleCA3N2VhNzdiNjcxYS4u
ODk3MzljNGU5MDggMTAwNzU1CistLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliL3VzZXJfYXRvbWlj
LmgKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkv
dXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAogQEAgLTgwLDcgKzgw
LDggQEAKICAjaWYgZGVmaW5lZChfX1VzZXJzcGFjZV9vc19XaW5kb3dzKQotIHN0YXRpYyB2b2lk
IGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19t
dHggKi8KKyBzdGF0aWMgdm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAvKiBlbXB0eSB3aGVuIHdl
IGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwogICNlbHNlCi0tc3RhdGljIGlubGluZSB2b2lk
IGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19t
dHggKi8KLSsvLyBXZWJLaXQgY2hhbmdlLCB0aGlzIGNvbmZsaWN0cyB3aXRoIGF0b21pY19pbml0
IE1hY09TIG1hY3JvLgotKy8vIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCgpIHt9IC8q
IGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2luZyBhdG9taWNfbXR4ICovCistc3RhdGljIGlubGlu
ZSB2b2lkIGF0b21pY19pbml0KHZvaWQpIHt9IC8qIGVtcHR5IHdoZW4gd2UgYXJlIG5vdCB1c2lu
ZyBhdG9taWNfbXR4ICovCisrLy8gV2ViS2l0IGNoYW5nZSwgdGhpcyBjb25mbGljdHMgd2l0aCBh
dG9taWNfaW5pdAorKy8vIHN0YXRpYyBpbmxpbmUgdm9pZCBhdG9taWNfaW5pdCh2b2lkKSB7fSAv
KiBlbXB0eSB3aGVuIHdlIGFyZSBub3QgdXNpbmcgYXRvbWljX210eCAqLwogICNlbmRpZgogIAog
ICNlbHNlCi0tLSAKLTIuMTMuNSAoQXBwbGUgR2l0LTk0KQotCitkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGlicmFyeS1j
b21waWxhdGlvbi1lcnJvcnMucGF0Y2ggYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvV2Vi
S2l0LzAwMDItRml4aW5nLXVzcmN0cC1saWJyYXJ5LWNvbXBpbGF0aW9uLWVycm9ycy5wYXRjaAor
aW5kZXggOTM2NDcxMTU0YTUuLmU2OWRlMjliYjJkIDEwMDY0NAorLS0tIGEvU291cmNlL1RoaXJk
UGFydHkvbGlid2VicnRjL1dlYktpdC8wMDAyLUZpeGluZy11c3JjdHAtbGlicmFyeS1jb21waWxh
dGlvbi1lcnJvcnMucGF0Y2gKKysrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9XZWJL
aXQvMDAwMi1GaXhpbmctdXNyY3RwLWxpYnJhcnktY29tcGlsYXRpb24tZXJyb3JzLnBhdGNoCitA
QCAtMSw4OCArMCwwIEBACistRnJvbSBiZTcxYTU0ZGE5YjBhZTdmMzc5ZWZmMDM3NzM1Mzc5Yzll
ODVlOWNiIE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQorLUZyb206IFlvdWVubiBGYWJsZXQgPHlv
dWVubkBhcHBsZS5jb20+CistRGF0ZTogVGh1LCAxNCBEZWMgMjAxNyAxMzo0NDo0MSAtMDgwMAor
LVN1YmplY3Q6IFtQQVRDSCAyLzhdIEZpeGluZyB1c3JjdHAgbGlicmFyeSBjb21waWxhdGlvbiBl
cnJvcnMKKy0KKy0tLS0KKy0gLi4uL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC9zY3RwX2lucHV0LmMgICAgfCA4ICsrKysrKy0tCistIC4uLi9Tb3VyY2UvdGhp
cmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYyAgIHwgNSAr
KystLQorLSAuLi4vU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0
L3NjdHBfcGNiLmMgICAgICB8IDEgLQorLSAuLi4vbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0
eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaCB8IDMgKystCistIDQgZmlsZXMgY2hh
bmdlZCwgMTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKKy0KKy1kaWZmIC0tZ2l0IGEv
U291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3Vz
cnNjdHBsaWIvbmV0aW5ldC9zY3RwX2lucHV0LmMgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJy
dGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfaW5w
dXQuYworLWluZGV4IDA2NDllYzJlMzI1Li5lNGJiNTEzNzhkYyAxMDA3NTUKKy0tLS0gYS9Tb3Vy
Y2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0
cGxpYi9uZXRpbmV0L3NjdHBfaW5wdXQuYworLSsrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9p
bnB1dC5jCistQEAgLTE3MjgsMTAgKzE3MjgsMTIgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9leGlz
dGluZyhzdHJ1Y3QgbWJ1ZiAqbSwgaW50IGlwaGxlbiwgaW50IG9mZnNldCwKKy0gCQkJCSAqIGRv
bid0IGRvdWJsZSB0aGluZ3MKKy0gCQkJCSAqLworLSAJCQkJbmV0LT5oYl9yZXNwb25kZWQgPSAx
OworLSsJCQkJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVkOworLSAJCQkJbmV0LT5SVE8gPSBz
Y3RwX2NhbGN1bGF0ZV9ydG8oc3RjYiwgYXNvYywgbmV0LAorLS0JCQkJCQkJICAgICAgJmNvb2tp
ZS0+dGltZV9lbnRlcmVkLAorLSsJCQkJCQkJICAgICAgJnRpbWVfZW50ZXJlZCwKKy0gCQkJCQkJ
CSAgICAgIHNjdHBfYWxpZ25fdW5zYWZlX21ha2Vjb3B5LAorLSAJCQkJCQkJICAgICAgU0NUUF9S
VFRfRlJPTV9OT05fREFUQSk7CistKwkJCQljb29raWUtPnRpbWVfZW50ZXJlZCA9IHRpbWVfZW50
ZXJlZDsKKy0gCistIAkJCQlpZiAoc3RjYi0+YXNvYy5zY3RwX2F1dG9jbG9zZV90aWNrcyAmJgor
LSAJCQkJICAgIChzY3RwX2lzX2ZlYXR1cmVfb24oaW5wLCBTQ1RQX1BDQl9GTEFHU19BVVRPQ0xP
U0UpKSkgeworLUBAIC0yNDgxLDkgKzI0ODMsMTEgQEAgc2N0cF9wcm9jZXNzX2Nvb2tpZV9uZXco
c3RydWN0IG1idWYgKm0sIGludCBpcGhsZW4sIGludCBvZmZzZXQsCistIAkodm9pZClTQ1RQX0dF
VFRJTUVfVElNRVZBTCgmc3RjYi0+YXNvYy50aW1lX2VudGVyZWQpOworLSAJaWYgKChuZXRwICE9
IE5VTEwpICYmICgqbmV0cCAhPSBOVUxMKSkgeworLSAJCS8qIGNhbGN1bGF0ZSB0aGUgUlRUIGFu
ZCBzZXQgdGhlIGVuY2FwcyBwb3J0ICovCistKwkJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVk
OworLSAJCSgqbmV0cCktPlJUTyA9IHNjdHBfY2FsY3VsYXRlX3J0byhzdGNiLCBhc29jLCAqbmV0
cCwKKy0tCQkJCQkJICAmY29va2llLT50aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fdW5zYWZlX21h
a2Vjb3B5LAorLSsJCQkJCQkgICZ0aW1lX2VudGVyZWQsIHNjdHBfYWxpZ25fdW5zYWZlX21ha2Vj
b3B5LAorLSAJCQkJCQkgIFNDVFBfUlRUX0ZST01fTk9OX0RBVEEpOworLSsJCWNvb2tpZS0+dGlt
ZV9lbnRlcmVkID0gdGltZV9lbnRlcmVkOworLSAJfQorLSAJLyogcmVzcG9uZCB3aXRoIGEgQ09P
S0lFLUFDSyAqLworLSAJc2N0cF9zZW5kX2Nvb2tpZV9hY2soc3RjYik7CistZGlmZiAtLWdpdCBh
L1NvdXJjZS9UaGlyZFBhcnR5L2xpYndlYnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91
c3JzY3RwbGliL25ldGluZXQvc2N0cF9vdXRwdXQuYyBiL1NvdXJjZS9UaGlyZFBhcnR5L2xpYndl
YnJ0Yy9Tb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL25ldGluZXQvc2N0cF9v
dXRwdXQuYworLWluZGV4IDkwYjBiZjNkNjM2Li5mNjQ2Y2EzYTNjNiAxMDA3NTUKKy0tLS0gYS9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfb3V0cHV0LmMKKy0rKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9s
aWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3Nj
dHBfb3V0cHV0LmMKKy1AQCAtNjAyNCw4ICs2MDI0LDkgQEAgc2N0cF9zZW5kX2luaXRpYXRlX2Fj
ayhzdHJ1Y3Qgc2N0cF9pbnBjYiAqaW5wLCBzdHJ1Y3Qgc2N0cF90Y2IgKnN0Y2IsCistIAltZW1z
ZXQoJnN0YywgMCwgc2l6ZW9mKHN0cnVjdCBzY3RwX3N0YXRlX2Nvb2tpZSkpOworLSAKKy0gCS8q
IHRoZSB0aW1lIEkgYnVpbHQgY29va2llICovCistLQkodm9pZClTQ1RQX0dFVFRJTUVfVElNRVZB
TCgmc3RjLnRpbWVfZW50ZXJlZCk7CistLQorLSsJc3RydWN0IHRpbWV2YWwgdGltZV9lbnRlcmVk
OworLSsJKHZvaWQpU0NUUF9HRVRUSU1FX1RJTUVWQUwoJnRpbWVfZW50ZXJlZCk7CistKwlzdGMu
dGltZV9lbnRlcmVkID0gdGltZV9lbnRlcmVkOworLSAJLyogcG9wdWxhdGUgYW55IHRpZSB0YWdz
ICovCistIAlpZiAoYXNvYyAhPSBOVUxMKSB7CistIAkJLyogdW5sb2NrIGJlZm9yZSB0YWcgc2Vs
ZWN0aW9ucyAqLworLWRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291
cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMgYi9T
b3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNy
c2N0cGxpYi9uZXRpbmV0L3NjdHBfcGNiLmMKKy1pbmRleCA5ZTlmY2EwNmM0ZC4uZDBjNzcwZTMw
NzggMTAwNzU1CistLS0tIGEvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGly
ZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCistKysrIGIvU291
cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNj
dHBsaWIvbmV0aW5ldC9zY3RwX3BjYi5jCistQEAgLTY4MDksNyArNjgwOSw2IEBAIHNjdHBfcGNi
X2luaXQoKQorLSAjZW5kaWYKKy0gI2lmIGRlZmluZWQoX19Vc2Vyc3BhY2VfXykKKy0gCW1idWZf
aW5pdGlhbGl6ZShOVUxMKTsKKy0tCWF0b21pY19pbml0KCk7CistICNpZiBkZWZpbmVkKElORVQp
IHx8IGRlZmluZWQoSU5FVDYpCistIAlyZWN2X3RocmVhZF9pbml0KCk7CistICNlbmRpZgorLWRp
ZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5
L3VzcnNjdHAvdXNyc2N0cGxpYi91c2VyX2F0b21pYy5oIGIvU291cmNlL1RoaXJkUGFydHkvbGli
d2VicnRjL1NvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMu
aAorLWluZGV4IGI4NDE1YzYwNDdlLi5mMzQ0MDU1ZGM1YiAxMDA3NTUKKy0tLS0gYS9Tb3VyY2Uv
VGhpcmRQYXJ0eS9saWJ3ZWJydGMvU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxp
Yi91c2VyX2F0b21pYy5oCistKysrIGIvU291cmNlL1RoaXJkUGFydHkvbGlid2VicnRjL1NvdXJj
ZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNlcl9hdG9taWMuaAorLUBAIC04MCw3
ICs4MCw4IEBACistICNpZiBkZWZpbmVkKF9fVXNlcnNwYWNlX29zX1dpbmRvd3MpCistIHN0YXRp
YyB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0
b21pY19tdHggKi8KKy0gI2Vsc2UKKy0tc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkg
e30gLyogZW1wdHkgd2hlbiB3ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKy0rLy8gV2Vi
S2l0IGNoYW5nZSwgdGhpcyBjb25mbGljdHMgd2l0aCBhdG9taWNfaW5pdCBNYWNPUyBtYWNyby4K
Ky0rLy8gc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19pbml0KCkge30gLyogZW1wdHkgd2hlbiB3
ZSBhcmUgbm90IHVzaW5nIGF0b21pY19tdHggKi8KKy0gI2VuZGlmCistIAorLSAjZWxzZQorLS0t
IAorLTIuMTMuNSAoQXBwbGUgR2l0LTk0KQorLQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFy
dHkvbGlid2VicnRjL2xpYndlYnJ0Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1RoaXJkUGFydHkvbGlid2VicnRjL2xpYndlYnJ0Yy54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDIyOTI4MmNhN2NkOTRjMjdkZWRlMjdhOTA2N2I4MWQwM2JhMDU4NGMuLmI3NTc0ZDNh
MTNhNzcwZWUyMTAxZmRiZmIyNTJkYTFiYzI0Mjg4OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGly
ZFBhcnR5L2xpYndlYnJ0Yy9saWJ3ZWJydGMueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysg
Yi9Tb3VyY2UvVGhpcmRQYXJ0eS9saWJ3ZWJydGMvbGlid2VicnRjLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQzMzcsNyArNDMzNyw3IEBACiAJCTQxNDVGNjFBMUZFMUYzOEMwMEVCOUNB
RiAvKiB2aWRlb19kZWNvZGVyX2ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gdmlkZW9fZGVjb2Rlcl9mYWN0b3J5Lmg7IHBhdGggPSB2aWRlb19jb2RlY3MvdmlkZW9f
ZGVjb2Rlcl9mYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNDVGNjFC
MUZFMUYzOEQwMEVCOUNBRiAvKiB2aWRlb19lbmNvZGVyX2ZhY3RvcnkuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gdmlkZW9fZW5jb2Rlcl9mYWN0b3J5Lmg7IHBhdGggPSB2aWRl
b19jb2RlY3MvdmlkZW9fZW5jb2Rlcl9mYWN0b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTQxNDVGNjFDMUZFMUYzOEQwMEVCOUNBRiAvKiB2aWRlb19lbmNvZGVyLmNjICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gdmlkZW9fZW5jb2Rlci5jYzsgcGF0aCA9
IHZpZGVvX2NvZGVjcy92aWRlb19lbmNvZGVyLmNjOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQk0MTRENzExMjFFNEFFOTgyMDAyM0U1MjYgLyogdXNlcl9zb2NrZXQuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdXNlcl9zb2NrZXQuYzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNDE0RDcxMTIxRTRBRTk4MjAwMjNFNTI2IC8qIHVzZXJfc29ja2V0LmMgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVzZXJfc29ja2V0LmM7IHBhdGggPSB1c3Jz
Y3RwbGliL3VzZXJfc29ja2V0LmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQxNEQ3
MTE1MUU0QUVBQ0QwMDIzRTUyNiAvKiBzY3RwX2luZGF0YS5jICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmM7IHBhdGggPSBzY3RwX2luZGF0YS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk0MTRENzExODFFNEFFQjExMDAyM0U1MjYgLyogc2N0cF91c2Vyc3BhY2UuYyAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gc2N0cF91c2Vyc3BhY2UuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNDE0RkI4NjcyMTZCQjc2NjAwMUY1NDkyIC8qIFJUQ1J0cEZyYWdtZW50
YXRpb25IZWFkZXIrUHJpdmF0ZS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9ICJSVENSdHBGcmFn
bWVudGF0aW9uSGVhZGVyK1ByaXZhdGUubW0iOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTg4MiwyMiArNTg4MiwyMiBAQAogCQk1QzRCNEFBMTFFNDJDNTJEMDAyNjUxQzggLyogcmVw
YWNrZXRpemVyX2RlbW8uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gcmVwYWNr
ZXRpemVyX2RlbW8uYzsgcGF0aCA9IHNyYy9yZXBhY2tldGl6ZXJfZGVtby5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk1QzRCNEFBMjFFNDJDNTJEMDAyNjUxQzggLyogcmVwYWNrZXRp
emVyLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHJlcGFja2V0aXplci5jOyBw
YXRoID0gc3JjL3JlcGFja2V0aXplci5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
QzRCNEFBMzFFNDJDNTJEMDAyNjUxQzggLyogdGFuc2lnX3RhYmxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IHRhbnNpZ190YWJsZS5oOyBwYXRoID0gc3JjL3RhbnNpZ190YWJs
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1QzRCNEFDQjFFNDJDOUQ2MDAyNjUx
QzggLyogdXNlcl9hdG9taWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gdXNl
cl9hdG9taWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBQ0MxRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfZW52aXJvbm1lbnQuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gdXNlcl9lbnZpcm9ubWVudC5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk1QzRCNEFDRDFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9lbnZpcm9ubWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX2Vudmlyb25tZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUNFMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2lucGNi
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVzZXJfaW5wY2IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBQ0YxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJf
aXBfaWNtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX2lwX2ljbXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDAxRTQyQzlENjAwMjY1MUM4
IC8qIHVzZXJfaXA2X3Zhci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2Vy
X2lwNl92YXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDExRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfbWFsbG9jLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IHVzZXJfbWFsbG9jLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQy
MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX21idWYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5j
OyBwYXRoID0gdXNlcl9tYnVmLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0
QUQzMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX21idWYuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gdXNlcl9tYnVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVD
NEI0QUQ0MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IHVzZXJfcXVldWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNUM0QjRBRDUxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJlYWQuYyAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5jOyBwYXRoID0gdXNlcl9yZWN2X3RocmVhZC5jOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQk1QzRCNEFENjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yZWN2
X3RocmVhZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB1c2VyX3JlY3ZfdGhy
ZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVDNEI0QUQ3MUU0MkM5RDYwMDI2
NTFDOCAvKiB1c2VyX3JvdXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHVz
ZXJfcm91dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNUM0QjRBRDkxRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfc29ja2V0dmFyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IHVzZXJfc29ja2V0dmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTVD
NEI0QURBMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3VtYS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1c2VyX3VtYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk1
QzRCNEFEQjFFNDJDOUQ2MDAyNjUxQzggLyogdXNyc2N0cC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSB1c3JzY3RwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVD
NEI0QUNCMUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX2F0b21pYy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSB1c2VyX2F0b21pYy5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX2F0
b21pYy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFDQzFFNDJDOUQ2MDAy
NjUxQzggLyogdXNlcl9lbnZpcm9ubWVudC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5h
bWUgPSB1c2VyX2Vudmlyb25tZW50LmM7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfZW52aXJvbm1l
bnQuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBQ0QxRTQyQzlENjAwMjY1
MUM4IC8qIHVzZXJfZW52aXJvbm1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gdXNlcl9lbnZpcm9ubWVudC5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX2Vudmlyb25tZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUNFMUU0MkM5RDYwMDI2NTFD
OCAvKiB1c2VyX2lucGNiLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJf
aW5wY2IuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9pbnBjYi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1QzRCNEFDRjFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9pcF9pY21wLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfaXBfaWNtcC5oOyBwYXRoID0g
dXNyc2N0cGxpYi91c2VyX2lwX2ljbXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NUM0QjRBRDAxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfaXA2X3Zhci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSB1c2VyX2lwNl92YXIuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNl
cl9pcDZfdmFyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUQxMUU0MkM5
RDYwMDI2NTFDOCAvKiB1c2VyX21hbGxvYy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSB1c2VyX21hbGxvYy5oOyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX21hbGxvYy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFEMjFFNDJDOUQ2MDAyNjUxQzggLyogdXNl
cl9tYnVmLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IHVzZXJfbWJ1Zi5jOyBw
YXRoID0gdXNyc2N0cGxpYi91c2VyX21idWYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNUM0QjRBRDMxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfbWJ1Zi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSB1c2VyX21idWYuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9t
YnVmLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTVDNEI0QUQ0MUU0MkM5RDYwMDI2
NTFDOCAvKiB1c2VyX3F1ZXVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVz
ZXJfcXVldWUuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9xdWV1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk1QzRCNEFENTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9yZWN2X3Ro
cmVhZC5jICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmM7IG5hbWUgPSB1c2VyX3JlY3ZfdGhyZWFk
LmM7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfcmVjdl90aHJlYWQuYzsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNUM0QjRBRDYxRTQyQzlENjAwMjY1MUM4IC8qIHVzZXJfcmVjdl90aHJl
YWQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gdXNlcl9yZWN2X3RocmVhZC5o
OyBwYXRoID0gdXNyc2N0cGxpYi91c2VyX3JlY3ZfdGhyZWFkLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTVDNEI0QUQ3MUU0MkM5RDYwMDI2NTFDOCAvKiB1c2VyX3JvdXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzZXJfcm91dGUuaDsgcGF0aCA9IHVzcnNj
dHBsaWIvdXNlcl9yb3V0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1QzRCNEFE
OTFFNDJDOUQ2MDAyNjUxQzggLyogdXNlcl9zb2NrZXR2YXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gdXNlcl9zb2NrZXR2YXIuaDsgcGF0aCA9IHVzcnNjdHBsaWIvdXNlcl9z
b2NrZXR2YXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNUM0QjRBREExRTQyQzlE
NjAwMjY1MUM4IC8qIHVzZXJfdW1hLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IHVzZXJfdW1hLmg7IHBhdGggPSB1c3JzY3RwbGliL3VzZXJfdW1hLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTVDNEI0QURCMUU0MkM5RDYwMDI2NTFDOCAvKiB1c3JzY3RwLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IHVzcnNjdHAuaDsgcGF0aCA9IHVzcnNjdHBs
aWIvdXNyc2N0cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1QzRCNEFFRTFFNDJD
OUVGMDAyNjUxQzggLyogc2N0cF9hc2NvbmYuYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBw
YXRoID0gc2N0cF9hc2NvbmYuYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNUM0QjRB
RUYxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHBfYXNjb25mLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IHNjdHBfYXNjb25mLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTVDNEI0QUYwMUU0MkM5RUYwMDI2NTFDOCAvKiBzY3RwX2F1dGguYyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5jOyBwYXRoID0gc2N0cF9hdXRoLmM7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC0xMDk0Nyw3ICsxMDk0Nyw4IEBACiAJCQkJNUM0QjRCMTYxRTQyQzlFRjAwMjY1MUM4IC8q
IHNjdHB1dGlsLmMgKi8sCiAJCQkJNUM0QjRCMTcxRTQyQzlFRjAwMjY1MUM4IC8qIHNjdHB1dGls
LmggKi8sCiAJCQkpOwotCQkJcGF0aCA9IG5ldGluZXQ7CisJCQluYW1lID0gbmV0aW5ldDsKKwkJ
CXBhdGggPSB1c3JzY3RwbGliL25ldGluZXQ7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OwogCQk1QzRCNEI0MjFFNDJDOUY2MDAyNjUxQzggLyogbmV0aW5ldDYgKi8gPSB7CkBAIC0x
MDk1Niw3ICsxMDk1Nyw4IEBACiAJCQkJNUM0QjRCNDMxRTQyQ0EwMDAwMjY1MUM4IC8qIHNjdHA2
X3VzcnJlcS5jICovLAogCQkJCTVDNEI0QjQ0MUU0MkNBMDAwMDI2NTFDOCAvKiBzY3RwNl92YXIu
aCAqLywKIAkJCSk7Ci0JCQlwYXRoID0gbmV0aW5ldDY7CisJCQluYW1lID0gbmV0aW5ldDY7CisJ
CQlwYXRoID0gdXNyc2N0cGxpYi9uZXRpbmV0NjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CiAJCTVDNEI0QjU3MUU0MzFDMjAwMDI2NTFDOCAvKiBzZGsgKi8gPSB7CkBAIC0xNzU4
Nyw2ICsxNzU4OSw3IEBACiAJCQkJCVNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBs
aWIvbmV0aW5ldC8sCiAJCQkJCVNvdXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIv
LAogCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvYm9yaW5nc3NsL3NyYy9pbmNsdWRlLywKKwkJCQkJ
U291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi91c3JzY3RwbGliLywKIAkJCQkp
OwogCQkJCVBST0RVQ1RfTkFNRSA9ICIkKFRBUkdFVF9OQU1FKSI7CiAJCQl9OwpAQCAtMTc2MDEs
NiArMTc2MDQsNyBAQAogCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGli
L25ldGluZXQvLAogCQkJCQlTb3VyY2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliLywK
IAkJCQkJU291cmNlL3RoaXJkX3BhcnR5L2JvcmluZ3NzbC9zcmMvaW5jbHVkZS8sCisJCQkJCVNv
dXJjZS90aGlyZF9wYXJ0eS91c3JzY3RwL3VzcnNjdHBsaWIvdXNyc2N0cGxpYi8sCiAJCQkJKTsK
IAkJCQlQUk9EVUNUX05BTUUgPSAiJChUQVJHRVRfTkFNRSkiOwogCQkJfTsKQEAgLTE3NjE1LDYg
KzE3NjE5LDcgQEAKIAkJCQkJU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi9u
ZXRpbmV0LywKIAkJCQkJU291cmNlL3RoaXJkX3BhcnR5L3VzcnNjdHAvdXNyc2N0cGxpYi8sCiAJ
CQkJCVNvdXJjZS90aGlyZF9wYXJ0eS9ib3Jpbmdzc2wvc3JjL2luY2x1ZGUvLAorCQkJCQlTb3Vy
Y2UvdGhpcmRfcGFydHkvdXNyc2N0cC91c3JzY3RwbGliL3VzcnNjdHBsaWIvLAogCQkJCSk7CiAJ
CQkJUFJPRFVDVF9OQU1FID0gIiQoVEFSR0VUX05BTUUpIjsKIAkJCX07Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>